diff -Nrc3pad gcc-3.0.4/.brik gcc-3.1/.brik *** gcc-3.0.4/.brik Wed Feb 20 20:24:20 2002 --- gcc-3.1/.brik Wed May 15 03:48:23 2002 *************** *** 3,28 **** # CRC-32 filename # ------ -------- ! 3243366834b ./boehm-gc/acinclude.m4 ! 2107795540b ./boehm-gc/aclocal.m4 ! 4022851412b ./boehm-gc/add_gc_prefix.c ! 3675915241b ./boehm-gc/allchblk.c ! 3500671031b ./boehm-gc/alloc.c ! 693242850b ./boehm-gc/alpha_mach_dep.s ! 3637942716b ./boehm-gc/backptr.h ! 602673483b ./boehm-gc/barrett_diagram ! 3461973635b ./boehm-gc/BCC_MAKEFILE ! 4184632247b ./boehm-gc/blacklst.c 971406525b ./boehm-gc/callprocs ! 2659152012b ./boehm-gc/ChangeLog ! 3725131560b ./boehm-gc/checksums.c ! 124915759b ./boehm-gc/configure ! 202677859b ./boehm-gc/configure.host ! 1207654743b ./boehm-gc/configure.in 3430717956b ./boehm-gc/cord/cordbscs.c - 3897882033b ./boehm-gc/cord/cord.h 473686535b ./boehm-gc/cord/cordprnt.c ! 341614194b ./boehm-gc/cord/cordtest.c 3610557498b ./boehm-gc/cord/cordxtra.c 1399512076b ./boehm-gc/cord/de.c 3493089115b ./boehm-gc/cord/de_cmds.h --- 3,29 ---- # CRC-32 filename # ------ -------- ! 643045998b ./boehm-gc/acinclude.m4 ! 2700729979b ./boehm-gc/aclocal.m4 ! 971051254b ./boehm-gc/add_gc_prefix.c ! 2056900000b ./boehm-gc/allchblk.c ! 182725132b ./boehm-gc/alloc.c ! 1198071641b ./boehm-gc/alpha_mach_dep.s ! 655018850b ./boehm-gc/AmigaOS.c ! 3099799990b ./boehm-gc/backgraph.c ! 2411687152b ./boehm-gc/BCC_MAKEFILE ! 394605993b ./boehm-gc/blacklst.c 971406525b ./boehm-gc/callprocs ! 359751564b ./boehm-gc/ChangeLog ! 2542310219b ./boehm-gc/checksums.c ! 1272640704b ./boehm-gc/config.guess ! 4182969326b ./boehm-gc/config.sub ! 1543515895b ./boehm-gc/configure ! 2331870630b ./boehm-gc/configure.host ! 2767393649b ./boehm-gc/configure.in 3430717956b ./boehm-gc/cord/cordbscs.c 473686535b ./boehm-gc/cord/cordprnt.c ! 1796537586b ./boehm-gc/cord/cordtest.c 3610557498b ./boehm-gc/cord/cordxtra.c 1399512076b ./boehm-gc/cord/de.c 3493089115b ./boehm-gc/cord/de_cmds.h *************** *** 30,158 **** 1969645283b ./boehm-gc/cord/de_win.h 2226183422b ./boehm-gc/cord/de_win.ICO 2296745137b ./boehm-gc/cord/de_win.RC ! 214150158b ./boehm-gc/cord/ec.h ! 61081546b ./boehm-gc/cord/gc.h ! 1547838704b ./boehm-gc/cord/private/cord_pos.h ! 697594862b ./boehm-gc/cord/README ! 248857674b ./boehm-gc/cord/SCOPTIONS.amiga ! 722115270b ./boehm-gc/cord/SMakefile.amiga ! 383905019b ./boehm-gc/dbg_mlc.c ! 2970224406b ./boehm-gc/dbg_mlc.h ! 518935421b ./boehm-gc/dyn_load.c ! 4012707064b ./boehm-gc/EMX_MAKEFILE ! 917164011b ./boehm-gc/finalize.c ! 4062316117b ./boehm-gc/gc_alloc.h ! 2802741123b ./boehm-gc/gcconfig.h ! 2004674553b ./boehm-gc/gc_cpp.cc ! 2702688889b ./boehm-gc/gc_cpp.h 3458300802b ./boehm-gc/gcc_support.c ! 61081546b ./boehm-gc/gc.h ! 2998163449b ./boehm-gc/gc_hdrs.h ! 81686212b ./boehm-gc/gcj_mlc.c ! 3485810529b ./boehm-gc/gc.mak ! 2587456343b ./boehm-gc/gc.man ! 168209047b ./boehm-gc/gc_mark.h ! 2971863704b ./boehm-gc/gc_private.h ! 1210957641b ./boehm-gc/gc_priv.h ! 3286861254b ./boehm-gc/gc_typed.h ! 2300078171b ./boehm-gc/headers.c ! 2358466284b ./boehm-gc/hpux_irix_threads.c 1596485799b ./boehm-gc/hpux_test_and_clear.s ! 2724382631b ./boehm-gc/if_mach.c ! 3239215219b ./boehm-gc/if_not_there.c ! 3637942716b ./boehm-gc/include/backptr.h 3897882033b ./boehm-gc/include/cord.h 214150158b ./boehm-gc/include/ec.h ! 4062316117b ./boehm-gc/include/gc_alloc.h ! 568213574b ./boehm-gc/include/gc_copy_descr.h ! 2702688889b ./boehm-gc/include/gc_cpp.h ! 2872844541b ./boehm-gc/include/gc_gcj.h ! 61081546b ./boehm-gc/include/gc.h ! 786051960b ./boehm-gc/include/gc_inl.h 601682422b ./boehm-gc/include/gc_inline.h ! 2703255666b ./boehm-gc/include/gc_nursery.h 3286861254b ./boehm-gc/include/gc_typed.h 2246764458b ./boehm-gc/include/javaxfc.h ! 2816634172b ./boehm-gc/include/leak_detector.h ! 2886903053b ./boehm-gc/include/new_gc_alloc.h 1547838704b ./boehm-gc/include/private/cord_pos.h ! 57220927b ./boehm-gc/include/private/gcconfig.h ! 1742395254b ./boehm-gc/include/private/gc_hdrs.h ! 3047199208b ./boehm-gc/include/private/gc_priv.h 2262051120b ./boehm-gc/include/weakpointer.h ! 705894296b ./boehm-gc/linux_threads.c 789649079b ./boehm-gc/Mac_files/dataend.c 3520138091b ./boehm-gc/Mac_files/datastart.c 537693184b ./boehm-gc/Mac_files/MacOS_config.h 3338272940b ./boehm-gc/Mac_files/MacOS_Test_config.h ! 4277754409b ./boehm-gc/mach_dep.c 145946109b ./boehm-gc/MacOS.c 591574792b ./boehm-gc/MacProjects.sit.hqx ! 2062393541b ./boehm-gc/Makefile.am ! 4294967295b ./boehm-gc/makefile.depend ! 2362359874b ./boehm-gc/Makefile.dist ! 1527083461b ./boehm-gc/Makefile.dj 2647418481b ./boehm-gc/Makefile.DLLs ! 3030006705b ./boehm-gc/Makefile.in ! 651387412b ./boehm-gc/malloc.c ! 2906986244b ./boehm-gc/mallocx.c ! 2094170155b ./boehm-gc/mark.c ! 2315821270b ./boehm-gc/mark_rts.c ! 2792262463b ./boehm-gc/mips_sgi_mach_dep.s 447949782b ./boehm-gc/mips_ultrix_mach_dep.s ! 2659354396b ./boehm-gc/misc.c ! 1510014416b ./boehm-gc/new_hblk.c ! 221737275b ./boehm-gc/NT_MAKEFILE ! 3485810529b ./boehm-gc/NT_THREADS_MAKEFILE ! 1861230457b ./boehm-gc/nursery.c ! 2097779843b ./boehm-gc/obj_map.c ! 1470223144b ./boehm-gc/OS2_MAKEFILE ! 2719895468b ./boehm-gc/os_dep.c ! 1384581591b ./boehm-gc/pc_excludes ! 2980692409b ./boehm-gc/pcr_interface.c 2438519321b ./boehm-gc/PCR-Makefile ! 562824942b ./boehm-gc/ptr_chck.c ! 4201190247b ./boehm-gc/README ! 2175291517b ./boehm-gc/README.alpha ! 3307383745b ./boehm-gc/README.amiga ! 1566591708b ./boehm-gc/README.debugging ! 2101980206b ./boehm-gc/README.dj ! 3526461791b ./boehm-gc/README.hp ! 3008502487b ./boehm-gc/README.linux ! 2912965872b ./boehm-gc/README.Mac ! 1009764294b ./boehm-gc/README.OS2 ! 61050169b ./boehm-gc/README.QUICK ! 3249391671b ./boehm-gc/README.rs6000 ! 3589734965b ./boehm-gc/README.sgi ! 1669363969b ./boehm-gc/README.solaris2 ! 1044770375b ./boehm-gc/README.uts ! 1526451190b ./boehm-gc/README.win32 3988382907b ./boehm-gc/real_malloc.c ! 1641724287b ./boehm-gc/reclaim.c ! 2022551282b ./boehm-gc/rs6000_mach_dep.s ! 2463868610b ./boehm-gc/SCoptions.amiga ! 3292223258b ./boehm-gc/setjmp_t.c ! 2178285379b ./boehm-gc/SMakefile.amiga ! 3718957139b ./boehm-gc/solaris_pthreads.c ! 1880901174b ./boehm-gc/solaris_threads.c ! 1458967877b ./boehm-gc/solaris_threads.h ! 3705733266b ./boehm-gc/sparc_mach_dep.s 293721320b ./boehm-gc/sparc_sunos4_mach_dep.s ! 2828827237b ./boehm-gc/stubborn.c ! 3932607711b ./boehm-gc/test.c ! 342108927b ./boehm-gc/test_cpp.cc ! 191117291b ./boehm-gc/threadlibs.c ! 2177167998b ./boehm-gc/typd_mlc.c ! 3707632643b ./boehm-gc/version.h ! 1086659516b ./boehm-gc/WCC_MAKEFILE ! 2262051120b ./boehm-gc/weakpointer.h ! 4042937657b ./boehm-gc/win32_threads.c ! 3110697611b ./BUGS ! 3007304509b ./bugs.html ! 2815725787b ./ChangeLog ! 612455112b ./config/acinclude.m4 ! 1897469722b ./config/ChangeLog ! 1152210207b ./config.guess 3430029098b ./config.if 3007349820b ./config/mh-a68bsd 1442196770b ./config/mh-aix386 --- 31,173 ---- 1969645283b ./boehm-gc/cord/de_win.h 2226183422b ./boehm-gc/cord/de_win.ICO 2296745137b ./boehm-gc/cord/de_win.RC ! 3479570773b ./boehm-gc/dbg_mlc.c ! 4155306217b ./boehm-gc/digimars.mak ! 602673483b ./boehm-gc/doc/barrett_diagram ! 2134574438b ./boehm-gc/doc/debugging.html ! 4112273729b ./boehm-gc/doc/gcdescr.html ! 2587456343b ./boehm-gc/doc/gc.man ! 1852147885b ./boehm-gc/doc/README ! 1398938057b ./boehm-gc/doc/README.amiga ! 3968038895b ./boehm-gc/doc/README.autoconf ! 609394135b ./boehm-gc/doc/README.changes ! 124254120b ./boehm-gc/doc/README.contributors ! 2337143875b ./boehm-gc/doc/README.cords ! 2101980206b ./boehm-gc/doc/README.dj ! 1564073111b ./boehm-gc/doc/README.environment ! 1544667036b ./boehm-gc/doc/README.ews4800 ! 2032435380b ./boehm-gc/doc/README.hp ! 261398962b ./boehm-gc/doc/README.linux ! 2912965872b ./boehm-gc/doc/README.Mac ! 3192387476b ./boehm-gc/doc/README.MacOSX ! 3651372180b ./boehm-gc/doc/README.macros ! 1009764294b ./boehm-gc/doc/README.OS2 ! 3249391671b ./boehm-gc/doc/README.rs6000 ! 2157435131b ./boehm-gc/doc/README.sgi ! 2210572734b ./boehm-gc/doc/README.solaris2 ! 1044770375b ./boehm-gc/doc/README.uts ! 3162142981b ./boehm-gc/doc/README.win32 ! 1244216301b ./boehm-gc/doc/tree.html ! 1267269518b ./boehm-gc/dyn_load.c ! 3428452570b ./boehm-gc/EMX_MAKEFILE ! 110360283b ./boehm-gc/finalize.c ! 3449835837b ./boehm-gc/gc_cpp.cc ! 231223753b ./boehm-gc/gc_cpp.cpp 3458300802b ./boehm-gc/gcc_support.c ! 145159317b ./boehm-gc/gc_dlopen.c ! 4111426693b ./boehm-gc/gcj_mlc.c ! 3607948475b ./boehm-gc/gc.mak ! 3106502053b ./boehm-gc/gcname.c ! 1644234138b ./boehm-gc/headers.c 1596485799b ./boehm-gc/hpux_test_and_clear.s ! 1676909184b ./boehm-gc/ia64_save_regs_in_stack.s ! 3582080946b ./boehm-gc/if_mach.c ! 387600055b ./boehm-gc/if_not_there.c 3897882033b ./boehm-gc/include/cord.h 214150158b ./boehm-gc/include/ec.h ! 2874534410b ./boehm-gc/include/gc_alloc.h ! 1922524680b ./boehm-gc/include/gc_amiga_redirects.h ! 3531915622b ./boehm-gc/include/gc_backptr.h ! 1564499082b ./boehm-gc/include/gc_cpp.h ! 2080667503b ./boehm-gc/include/gc_gcj.h ! 61666144b ./boehm-gc/include/gc.h ! 30043067b ./boehm-gc/include/gc_inl.h 601682422b ./boehm-gc/include/gc_inline.h ! 2851726125b ./boehm-gc/include/gc_local_alloc.h ! 3323450216b ./boehm-gc/include/gc_mark.h ! 4062216651b ./boehm-gc/include/gc_pthread_redirects.h 3286861254b ./boehm-gc/include/gc_typed.h 2246764458b ./boehm-gc/include/javaxfc.h ! 4237951566b ./boehm-gc/include/leak_detector.h ! 695561534b ./boehm-gc/include/Makefile.am ! 3142769731b ./boehm-gc/include/Makefile.in ! 3792791209b ./boehm-gc/include/new_gc_alloc.h 1547838704b ./boehm-gc/include/private/cord_pos.h ! 902196938b ./boehm-gc/include/private/dbg_mlc.h ! 1218966353b ./boehm-gc/include/private/gcconfig.h ! 1215170430b ./boehm-gc/include/private/gc_hdrs.h ! 687589575b ./boehm-gc/include/private/gc_locks.h ! 583510369b ./boehm-gc/include/private/gc_pmark.h ! 2936482199b ./boehm-gc/include/private/gc_priv.h ! 2686914147b ./boehm-gc/include/private/solaris_threads.h ! 3935909412b ./boehm-gc/include/private/specific.h 2262051120b ./boehm-gc/include/weakpointer.h ! 4171599065b ./boehm-gc/install-sh ! 3059795267b ./boehm-gc/irix_threads.c ! 1133052236b ./boehm-gc/libtool.m4 ! 3750760998b ./boehm-gc/linux_threads.c ! 3535854335b ./boehm-gc/ltconfig ! 2828184627b ./boehm-gc/ltmain.sh 789649079b ./boehm-gc/Mac_files/dataend.c 3520138091b ./boehm-gc/Mac_files/datastart.c 537693184b ./boehm-gc/Mac_files/MacOS_config.h 3338272940b ./boehm-gc/Mac_files/MacOS_Test_config.h ! 2932074179b ./boehm-gc/mach_dep.c 145946109b ./boehm-gc/MacOS.c 591574792b ./boehm-gc/MacProjects.sit.hqx ! 1399035599b ./boehm-gc/Makefile.am ! 3148936110b ./boehm-gc/Makefile.direct ! 3806813747b ./boehm-gc/Makefile.dist ! 87051491b ./boehm-gc/Makefile.dj 2647418481b ./boehm-gc/Makefile.DLLs ! 3352764249b ./boehm-gc/Makefile.in ! 4270565414b ./boehm-gc/malloc.c ! 3656007348b ./boehm-gc/mallocx.c ! 2488176063b ./boehm-gc/mark.c ! 4184892336b ./boehm-gc/mark_rts.c ! 2792262463b ./boehm-gc/mips_sgi_mach_dep.S 447949782b ./boehm-gc/mips_ultrix_mach_dep.s ! 1352116856b ./boehm-gc/misc.c ! 4236112450b ./boehm-gc/mkinstalldirs ! 2583630088b ./boehm-gc/new_hblk.c ! 3941839401b ./boehm-gc/NT_MAKEFILE ! 3607948475b ./boehm-gc/NT_THREADS_MAKEFILE ! 1361724709b ./boehm-gc/obj_map.c ! 3289014202b ./boehm-gc/OS2_MAKEFILE ! 3844001122b ./boehm-gc/os_dep.c ! 600864111b ./boehm-gc/pc_excludes ! 735852084b ./boehm-gc/pcr_interface.c 2438519321b ./boehm-gc/PCR-Makefile ! 811834911b ./boehm-gc/powerpc_macosx_mach_dep.s ! 105828241b ./boehm-gc/ptr_chck.c 3988382907b ./boehm-gc/real_malloc.c ! 2946495074b ./boehm-gc/reclaim.c ! 2737439630b ./boehm-gc/rs6000_mach_dep.s ! 636267038b ./boehm-gc/setjmp_t.c ! 2956367466b ./boehm-gc/SMakefile.amiga ! 751650501b ./boehm-gc/solaris_pthreads.c ! 275051372b ./boehm-gc/solaris_threads.c ! 1425695416b ./boehm-gc/sparc_mach_dep.S ! 551455534b ./boehm-gc/sparc_netbsd_mach_dep.s 293721320b ./boehm-gc/sparc_sunos4_mach_dep.s ! 3072675593b ./boehm-gc/specific.c ! 644387711b ./boehm-gc/stubborn.c ! 1440779450b ./boehm-gc/tests/leak_test.c ! 1742599416b ./boehm-gc/tests/test.c ! 3630296235b ./boehm-gc/tests/test_cpp.cc ! 14580047b ./boehm-gc/tests/thread_leak_test.c ! 1499257362b ./boehm-gc/tests/trace_test.c ! 3287937987b ./boehm-gc/threadlibs.c ! 2467355438b ./boehm-gc/typd_mlc.c ! 332085760b ./boehm-gc/version.h ! 205379550b ./boehm-gc/WCC_MAKEFILE ! 120565013b ./boehm-gc/win32_threads.c ! 1964211173b ./BUGS ! 2119217968b ./bugs.html ! 3924613041b ./ChangeLog ! 3004978457b ./config/acinclude.m4 ! 1671654896b ./config/ChangeLog ! 1242784498b ./config.guess 3430029098b ./config.if 3007349820b ./config/mh-a68bsd 1442196770b ./config/mh-aix386 *************** *** 196,202 **** 456622165b ./config/mh-vaxult2 3265825290b ./config/mh-x86pic 3139906847b ./config-ml.in ! 2849899169b ./config/mpw/ChangeLog 4005879853b ./config/mpw/forward-include 439409833b ./config/mpw/g-mpw-make.sed 198559626b ./config/mpw-mh-mpw --- 211,217 ---- 456622165b ./config/mh-vaxult2 3265825290b ./config/mh-x86pic 3139906847b ./config-ml.in ! 238075985b ./config/mpw/ChangeLog 4005879853b ./config/mpw/forward-include 439409833b ./config/mpw/g-mpw-make.sed 198559626b ./config/mpw-mh-mpw *************** *** 225,496 **** 787786243b ./config/mt-v810 2659154290b ./config/mt-wince 771382916b ./config/mt-x86pic ! 1636127198b ./config.sub ! 3721047005b ./configure ! 3733934766b ./configure.in ! 977460710b ./contrib/ChangeLog 550196746b ./contrib/compare_tests 2828387446b ./contrib/convert_to_f2c 2929939770b ./contrib/convert_to_g2c 2025073358b ./contrib/download_f2c 1336632236b ./contrib/gccbug.el 2292355102b ./contrib/gcc_build ! 2946097430b ./contrib/gcc_release ! 3156084968b ./contrib/gcc_update 1569920421b ./contrib/gennews 4256039795b ./contrib/index-prop 3683285493b ./contrib/newcvsroot ! 3237021432b ./contrib/PR3145.patch ! 3627076674b ./contrib/snapshot 1623905231b ./contrib/test_installed ! 1719899924b ./contrib/test_summary ! 921638709b ./contrib/texi2pod.pl ! 2210983108b ./contrib/warn_summary 2171125041b ./COPYING 508743035b ./COPYING.LIB 2864072627b ./.cvsignore ! 3122632810b ./FAQ ! 288808035b ./faq.html ! 851373127b ./fastjar/aclocal.m4 1005262133b ./fastjar/AUTHORS ! 3288385892b ./fastjar/ChangeLog 1745615150b ./fastjar/CHANGES ! 858861863b ./fastjar/compress.c 1169302702b ./fastjar/compress.h ! 1863610272b ./fastjar/config.h.in ! 4247214273b ./fastjar/configure ! 1452422248b ./fastjar/configure.in 1396100520b ./fastjar/COPYING 390830084b ./fastjar/dostime.c 2574136940b ./fastjar/dostime.h 2770615802b ./fastjar/INSTALL 2331671736b ./fastjar/install-defs.sh.in 1178077958b ./fastjar/install-sh ! 2297669990b ./fastjar/jargrep.c ! 3501388452b ./fastjar/jargrep.h ! 389929381b ./fastjar/jartool.c 2754304773b ./fastjar/jartool.h ! 2457567884b ./fastjar/Makefile.am ! 1854345631b ./fastjar/Makefile.in 990942143b ./fastjar/missing 1455437353b ./fastjar/mkinstalldirs 4038493440b ./fastjar/NEWS ! 4256537865b ./fastjar/pushback.c 302085493b ./fastjar/pushback.h 3780741064b ./fastjar/README 216805921b ./fastjar/stamp-h.in 3071504729b ./fastjar/zipfile.h ! 260406431b ./gcc/ABOUT-GCC-NLS ! 1014730298b ./gcc/ABOUT-NLS ! 2958064375b ./gcc/acconfig.h ! 1889980762b ./gcc/aclocal.m4 ! 834740043b ./gcc/alias.c ! 1470543567b ./gcc/basic-block.h ! 1630019981b ./gcc/bb-reorder.c ! 446912740b ./gcc/bitmap.c ! 1224669072b ./gcc/bitmap.h ! 4170845746b ./gcc/build-make ! 1766646758b ./gcc/builtins.c ! 3745012357b ./gcc/builtins.def ! 3240633480b ./gcc/caller-save.c ! 1728509875b ./gcc/calls.c ! 293598240b ./gcc/c-aux-info.c ! 573459883b ./gcc/c-common.c ! 3509838272b ./gcc/c-common.def ! 3568543160b ./gcc/c-common.h ! 530343767b ./gcc/c-convert.c ! 636107114b ./gcc/c-decl.c ! 876789290b ./gcc/c-dump.c ! 364561457b ./gcc/c-dump.h ! 1023031932b ./gcc/c-errors.c ! 3741298184b ./gcc/c-format.c ! 3844671600b ./gcc/ChangeLog ! 1908191848b ./gcc/ChangeLog.0 ! 1287222071b ./gcc/ChangeLog.1 ! 3345586942b ./gcc/ChangeLog.2 ! 767989098b ./gcc/ChangeLog.3 ! 3892893930b ./gcc/ChangeLog.4 ! 1673972178b ./gcc/ChangeLog.lib ! 3040046848b ./gcc/c-lang.c ! 61530428b ./gcc/c-lex.c ! 916578687b ./gcc/c-lex.h ! 1002247553b ./gcc/collect2.c ! 972672658b ./gcc/collect2.h ! 2565271898b ./gcc/combine.c ! 1434596660b ./gcc/conditions.h ! 550533333b ./gcc/config/1750a/1750a.c ! 1762431589b ./gcc/config/1750a/1750a.h ! 299532112b ./gcc/config/1750a/1750a.md ! 3329436298b ./gcc/config/1750a/1750a-protos.h 2477730384b ./gcc/config/1750a/ms1750.inc ! 105220162b ./gcc/config/1750a/xm-1750a.h ! 211842456b ./gcc/config/a29k/a29k.c ! 2413655887b ./gcc/config/a29k/a29k.h ! 2764520837b ./gcc/config/a29k/a29k.md ! 3222794029b ./gcc/config/a29k/a29k-protos.h ! 2297326806b ./gcc/config/a29k/rtems.h ! 2307933459b ./gcc/config/a29k/t-a29k ! 204554476b ./gcc/config/a29k/t-a29kbare ! 2868399830b ./gcc/config/a29k/t-vx29k ! 1954565974b ./gcc/config/a29k/udi.h ! 1721009153b ./gcc/config/a29k/unix.h 3167234709b ./gcc/config/a29k/vx29k.h ! 1889387254b ./gcc/config/a29k/xm-a29k.h ! 886575345b ./gcc/config/a29k/xm-unix.h ! 144752292b ./gcc/config/a29k/x-unix ! 1998454692b ./gcc/config/alpha/alpha32.h ! 4064904564b ./gcc/config/alpha/alpha.c ! 1455720533b ./gcc/config/alpha/alpha.h ! 2162061640b ./gcc/config/alpha/alpha-interix.h ! 3129153843b ./gcc/config/alpha/alpha.md ! 6534706b ./gcc/config/alpha/alpha-protos.h ! 795597665b ./gcc/config/alpha/config-nt.sed ! 695885256b ./gcc/config/alpha/crtbegin.asm ! 3766958261b ./gcc/config/alpha/crtend.asm ! 228143787b ./gcc/config/alpha/elf.h ! 143201956b ./gcc/config/alpha/freebsd.h ! 2529981406b ./gcc/config/alpha/lib1funcs.asm 1763018017b ./gcc/config/alpha/linux-ecoff.h ! 3273041531b ./gcc/config/alpha/linux-elf.h ! 3207568930b ./gcc/config/alpha/linux.h ! 3777698255b ./gcc/config/alpha/netbsd-elf.h ! 560446968b ./gcc/config/alpha/netbsd.h 156117508b ./gcc/config/alpha/openbsd.h 1792826440b ./gcc/config/alpha/osf12.h 3744703656b ./gcc/config/alpha/osf2or3.h 2776242025b ./gcc/config/alpha/osf5.h ! 915689720b ./gcc/config/alpha/osf.h 1190572001b ./gcc/config/alpha/qrnnd.asm 2672344824b ./gcc/config/alpha/t-alpha ! 470157602b ./gcc/config/alpha/t-crtbe 3084092578b ./gcc/config/alpha/t-ieee ! 3118619483b ./gcc/config/alpha/t-interix ! 2406591497b ./gcc/config/alpha/t-osf ! 4195494887b ./gcc/config/alpha/t-osf4 ! 1500154793b ./gcc/config/alpha/t-vms 2817356982b ./gcc/config/alpha/va_list.h ! 3633198328b ./gcc/config/alpha/vms.h ! 1402142372b ./gcc/config/alpha/vms-tramp.asm 985208816b ./gcc/config/alpha/vxworks.h ! 2727426403b ./gcc/config/alpha/win-nt.h ! 2541366340b ./gcc/config/alpha/xm-alpha.h ! 4139273463b ./gcc/config/alpha/xm-alpha-interix.h ! 2208381303b ./gcc/config/alpha/xm-openbsd.h ! 3846901144b ./gcc/config/alpha/xm-vms.h ! 822385833b ./gcc/config/alpha/xm-winnt.h ! 729157724b ./gcc/config/alpha/x-osf 662120966b ./gcc/config/aoutos.h ! 885024657b ./gcc/config/arc/arc.c ! 2222223501b ./gcc/config/arc/arc.h ! 4025790572b ./gcc/config/arc/arc.md ! 3489318571b ./gcc/config/arc/arc-protos.h 2242623574b ./gcc/config/arc/initfini.c ! 658547142b ./gcc/config/arc/lib1funcs.asm ! 707880629b ./gcc/config/arc/t-arc ! 781831565b ./gcc/config/arc/xm-arc.h ! 2096010197b ./gcc/config/arm/aof.h ! 3991610686b ./gcc/config/arm/aout.h ! 1409257642b ./gcc/config/arm/arm.c ! 1220949056b ./gcc/config/arm/arm.h ! 45374279b ./gcc/config/arm/arm.md ! 2093699269b ./gcc/config/arm/arm-protos.h 478450204b ./gcc/config/arm/arm-wince-pe.h ! 2444652934b ./gcc/config/arm/coff.h ! 2696406159b ./gcc/config/arm/conix-elf.h ! 1087283327b ./gcc/config/arm/ecos-elf.h ! 3536639403b ./gcc/config/arm/elf.h ! 822520065b ./gcc/config/arm/lib1funcs.asm ! 2894870058b ./gcc/config/arm/linux-elf.h ! 2372719730b ./gcc/config/arm/linux-gas.h ! 2387399091b ./gcc/config/arm/netbsd.h ! 1066318255b ./gcc/config/arm/pe.c ! 3768927943b ./gcc/config/arm/pe.h 2885119589b ./gcc/config/arm/README-interworking ! 3894425269b ./gcc/config/arm/riscix1-1.h ! 2879384629b ./gcc/config/arm/riscix.h ! 1910088041b ./gcc/config/arm/rix-gas.h ! 2402976494b ./gcc/config/arm/rtems-elf.h ! 2333245964b ./gcc/config/arm/semiaof.h ! 1345878867b ./gcc/config/arm/semi.h ! 3824844131b ./gcc/config/arm/strongarm-coff.h ! 1199112206b ./gcc/config/arm/strongarm-elf.h ! 2581566480b ./gcc/config/arm/strongarm-pe.h ! 6562926b ./gcc/config/arm/t-arm-aout ! 3898909797b ./gcc/config/arm/t-arm-coff ! 3410478496b ./gcc/config/arm/t-arm-elf ! 2934757173b ./gcc/config/arm/t-linux ! 1199782465b ./gcc/config/arm/t-netbsd ! 1397197320b ./gcc/config/arm/t-pe ! 1885831441b ./gcc/config/arm/t-riscix ! 218282365b ./gcc/config/arm/t-semi ! 2918134625b ./gcc/config/arm/t-semiaof ! 4180289693b ./gcc/config/arm/t-strongarm-coff ! 3043635110b ./gcc/config/arm/t-strongarm-elf ! 4032447791b ./gcc/config/arm/t-strongarm-pe ! 2572509569b ./gcc/config/arm/t-xscale-coff ! 2572509569b ./gcc/config/arm/t-xscale-elf ! 2433483220b ./gcc/config/arm/uclinux-elf.h ! 3971818520b ./gcc/config/arm/unknown-elf.h ! 325089407b ./gcc/config/arm/unknown-elf-oabi.h ! 109273072b ./gcc/config/arm/vxarm.h ! 296091289b ./gcc/config/arm/xm-arm.h ! 1599844562b ./gcc/config/arm/xm-linux.h ! 2097180198b ./gcc/config/arm/x-riscix ! 1516433770b ./gcc/config/arm/xscale-coff.h ! 850423094b ./gcc/config/arm/xscale-elf.h ! 474705185b ./gcc/config/avr/avr.c ! 2236743183b ./gcc/config/avr/avr.h ! 4228853051b ./gcc/config/avr/avr.md ! 797696786b ./gcc/config/avr/avr-protos.h 1853285406b ./gcc/config/avr/libgcc.S ! 2584285546b ./gcc/config/avr/t-avr ! 2422120746b ./gcc/config/avr/xm-avr.h ! 731308108b ./gcc/config/c4x/c4x.c ! 818753849b ./gcc/config/c4x/c4x.h ! 3990648755b ./gcc/config/c4x/c4x.md ! 577418579b ./gcc/config/c4x/c4x-protos.h ! 1233657746b ./gcc/config/c4x/libgcc.S ! 1648157120b ./gcc/config/c4x/rtems.h ! 3637144924b ./gcc/config/c4x/t-c4x ! 569088706b ./gcc/config/c4x/xm-c4x.h ! 2790823516b ./gcc/config/clipper/clipper.c ! 2074068926b ./gcc/config/clipper/clipper.h ! 811754992b ./gcc/config/clipper/clipper.md ! 4116515715b ./gcc/config/clipper/clipper-protos.h ! 629841856b ./gcc/config/clipper/clix.h ! 4019777817b ./gcc/config/clipper/x-clix ! 2642942535b ./gcc/config/clipper/xm-clix.h ! 2896096143b ./gcc/config/convex/convex.c ! 4131716266b ./gcc/config/convex/convex.h ! 2936344108b ./gcc/config/convex/convex.md 2941206894b ./gcc/config/convex/convex-protos.h 384964748b ./gcc/config/convex/fixinc.convex ! 2034360953b ./gcc/config/convex/x-convex ! 2110306837b ./gcc/config/convex/xm-convex.h 3834330727b ./gcc/config/d30v/abi ! 4247774964b ./gcc/config/d30v/d30v.c ! 297632543b ./gcc/config/d30v/d30v.h ! 3235907525b ./gcc/config/d30v/d30v.md ! 740824832b ./gcc/config/d30v/d30v-protos.h ! 901310313b ./gcc/config/d30v/libgcc1.asm ! 2502614708b ./gcc/config/d30v/t-d30v ! 89982870b ./gcc/config/d30v/xm-d30v.h 2118339989b ./gcc/config/dbxcoff.h ! 3758818269b ./gcc/config/dbxelf.h 186717254b ./gcc/config/dbx.h 4083711028b ./gcc/config/divmod.c ! 4086544067b ./gcc/config/dsp16xx/dsp16xx.c ! 2310880765b ./gcc/config/dsp16xx/dsp16xx.h ! 4033615684b ./gcc/config/dsp16xx/dsp16xx.md ! 1334799433b ./gcc/config/dsp16xx/dsp16xx-protos.h ! 2521513577b ./gcc/config/dsp16xx/xm-dsp16xx.h ! 2967990158b ./gcc/config/elfos.h ! 817143838b ./gcc/config/elxsi/elxsi.c ! 2228578351b ./gcc/config/elxsi/elxsi.h 1729380348b ./gcc/config/elxsi/elxsi.md 1622698848b ./gcc/config/elxsi/elxsi-protos.h - 3748147985b ./gcc/config/elxsi/x-elxsi - 3457322814b ./gcc/config/elxsi/xm-elxsi.h 2520622557b ./gcc/config/float-c4x.h 36687624b ./gcc/config/float-i128.h 2077185169b ./gcc/config/float-i32.h --- 240,1882 ---- 787786243b ./config/mt-v810 2659154290b ./config/mt-wince 771382916b ./config/mt-x86pic ! 3897683520b ./config.sub ! 2288319900b ./configure ! 1597777924b ./configure.in ! 1948950130b ./contrib/analyze_brprob ! 3901943201b ./contrib/ChangeLog 550196746b ./contrib/compare_tests 2828387446b ./contrib/convert_to_f2c 2929939770b ./contrib/convert_to_g2c 2025073358b ./contrib/download_f2c 1336632236b ./contrib/gccbug.el 2292355102b ./contrib/gcc_build ! 2687391969b ./contrib/gcc_update 1569920421b ./contrib/gennews 4256039795b ./contrib/index-prop 3683285493b ./contrib/newcvsroot ! 1596938872b ./contrib/regression/btest-gcc.sh ! 3102929781b ./contrib/regression/ChangeLog ! 4208566980b ./contrib/regression/objs-gcc.sh ! 1757898889b ./contrib/regression/README ! 1865505596b ./contrib/regression/site.exp 1623905231b ./contrib/test_installed ! 2523431553b ./contrib/test_summary ! 3362750683b ./contrib/texi2pod.pl ! 4228623080b ./contrib/warn_summary 2171125041b ./COPYING 508743035b ./COPYING.LIB 2864072627b ./.cvsignore ! 947637265b ./FAQ ! 272137294b ./faq.html ! 3513702948b ./fastjar/aclocal.m4 1005262133b ./fastjar/AUTHORS ! 4075963299b ./fastjar/ChangeLog 1745615150b ./fastjar/CHANGES ! 3743222129b ./fastjar/compress.c 1169302702b ./fastjar/compress.h ! 754715889b ./fastjar/config.h.in ! 1796406241b ./fastjar/configure ! 1220094724b ./fastjar/configure.in 1396100520b ./fastjar/COPYING 390830084b ./fastjar/dostime.c 2574136940b ./fastjar/dostime.h 2770615802b ./fastjar/INSTALL 2331671736b ./fastjar/install-defs.sh.in 1178077958b ./fastjar/install-sh ! 1960714715b ./fastjar/jargrep.c ! 4062871816b ./fastjar/jargrep.h ! 2153374785b ./fastjar/jartool.c 2754304773b ./fastjar/jartool.h ! 3714739366b ./fastjar/Makefile.am ! 39617579b ./fastjar/Makefile.in 990942143b ./fastjar/missing 1455437353b ./fastjar/mkinstalldirs 4038493440b ./fastjar/NEWS ! 1315168235b ./fastjar/pushback.c 302085493b ./fastjar/pushback.h 3780741064b ./fastjar/README 216805921b ./fastjar/stamp-h.in 3071504729b ./fastjar/zipfile.h ! 2539671184b ./gcc/ABOUT-GCC-NLS ! 1758308615b ./gcc/ABOUT-NLS ! 3729933059b ./gcc/acconfig.h ! 3650551157b ./gcc/aclocal.m4 ! 4242669380b ./gcc/ada/1aexcept.adb ! 956455478b ./gcc/ada/1aexcept.ads ! 1459838793b ./gcc/ada/1ic.ads ! 3953623706b ./gcc/ada/31soccon.ads ! 2884972597b ./gcc/ada/31soliop.ads ! 4248758801b ./gcc/ada/3asoccon.ads ! 3931896843b ./gcc/ada/3bsoccon.ads ! 3560754896b ./gcc/ada/3gsoccon.ads ! 580031672b ./gcc/ada/3hsoccon.ads ! 229359869b ./gcc/ada/3lsoccon.ads ! 2442231443b ./gcc/ada/3ssoccon.ads ! 1502394419b ./gcc/ada/3ssoliop.ads ! 3387310401b ./gcc/ada/3wsoccon.ads ! 391658942b ./gcc/ada/3wsocthi.adb ! 1356739718b ./gcc/ada/3wsocthi.ads ! 681502184b ./gcc/ada/3wsoliop.ads ! 3245682325b ./gcc/ada/41intnam.ads ! 2662178618b ./gcc/ada/42intnam.ads ! 959518590b ./gcc/ada/4aintnam.ads ! 3097801335b ./gcc/ada/4cintnam.ads ! 481858334b ./gcc/ada/4dintnam.ads ! 4162574675b ./gcc/ada/4gintnam.ads ! 2002752921b ./gcc/ada/4hexcpol.adb ! 2499132704b ./gcc/ada/4hintnam.ads ! 222726646b ./gcc/ada/4lintnam.ads ! 374384539b ./gcc/ada/4mintnam.ads ! 3241941732b ./gcc/ada/4nintnam.ads ! 620116621b ./gcc/ada/4ointnam.ads ! 3443503753b ./gcc/ada/4onumaux.ads ! 1566782773b ./gcc/ada/4pintnam.ads ! 3406122898b ./gcc/ada/4rintnam.ads ! 459655329b ./gcc/ada/4sintnam.ads ! 719827780b ./gcc/ada/4uintnam.ads ! 1115932068b ./gcc/ada/4vcaldel.adb ! 4160669776b ./gcc/ada/4vcalend.adb ! 2943884446b ./gcc/ada/4vcalend.ads ! 1904156899b ./gcc/ada/4vintnam.ads ! 594124201b ./gcc/ada/4wcalend.adb ! 3762378663b ./gcc/ada/4wexcpol.adb ! 1710451163b ./gcc/ada/4wintnam.ads ! 548303504b ./gcc/ada/4zintnam.ads ! 770211451b ./gcc/ada/4znumaux.ads ! 930797522b ./gcc/ada/4zsytaco.adb ! 3071531568b ./gcc/ada/4zsytaco.ads ! 3569647494b ./gcc/ada/51osinte.adb ! 2532503682b ./gcc/ada/51osinte.ads ! 3468089494b ./gcc/ada/52osinte.adb ! 2083506135b ./gcc/ada/52osinte.ads ! 765740382b ./gcc/ada/52system.ads ! 3057318985b ./gcc/ada/53osinte.ads ! 3513991105b ./gcc/ada/54osinte.ads ! 249779471b ./gcc/ada/5amastop.adb ! 1653378497b ./gcc/ada/5aosinte.adb ! 3367754742b ./gcc/ada/5aosinte.ads ! 3819202190b ./gcc/ada/5asystem.ads ! 613172531b ./gcc/ada/5ataprop.adb ! 3013377906b ./gcc/ada/5atasinf.ads ! 3014755298b ./gcc/ada/5ataspri.ads ! 3667261101b ./gcc/ada/5atpopsp.adb ! 3916423708b ./gcc/ada/5avxwork.ads ! 3659011384b ./gcc/ada/5bosinte.adb ! 2779241737b ./gcc/ada/5bosinte.ads ! 2308169616b ./gcc/ada/5bsystem.ads ! 1335114659b ./gcc/ada/5cosinte.ads ! 2058704820b ./gcc/ada/5dosinte.ads ! 1118228281b ./gcc/ada/5esystem.ads ! 74251179b ./gcc/ada/5etpopse.adb ! 745978377b ./gcc/ada/5fintman.adb ! 3658042447b ./gcc/ada/5fosinte.ads ! 3136371085b ./gcc/ada/5fsystem.ads ! 1678802713b ./gcc/ada/5ftaprop.adb ! 2739603168b ./gcc/ada/5ftasinf.ads ! 3610821942b ./gcc/ada/5ginterr.adb ! 975866538b ./gcc/ada/5gintman.adb ! 1378115556b ./gcc/ada/5gmastop.adb ! 2183233435b ./gcc/ada/5gosinte.ads ! 571431837b ./gcc/ada/5gproinf.adb ! 3191048862b ./gcc/ada/5gproinf.ads ! 693393540b ./gcc/ada/5gsystem.ads ! 2970373496b ./gcc/ada/5gtaprop.adb ! 2321444413b ./gcc/ada/5gtasinf.adb ! 3287583301b ./gcc/ada/5gtasinf.ads ! 2785741821b ./gcc/ada/5gtpgetc.adb ! 3503873280b ./gcc/ada/5hosinte.adb ! 2098542990b ./gcc/ada/5hosinte.ads ! 2099158447b ./gcc/ada/5hparame.ads ! 3465869647b ./gcc/ada/5hsystem.ads ! 1377954775b ./gcc/ada/5htaprop.adb ! 158492006b ./gcc/ada/5htaspri.ads ! 58230655b ./gcc/ada/5htraceb.adb ! 703108891b ./gcc/ada/5iosinte.adb ! 3200296303b ./gcc/ada/5iosinte.ads ! 1823263396b ./gcc/ada/5itaprop.adb ! 2428441881b ./gcc/ada/5itaspri.ads ! 258764448b ./gcc/ada/5ksystem.ads ! 801131281b ./gcc/ada/5kvxwork.ads ! 3740352184b ./gcc/ada/5lintman.adb ! 2092578045b ./gcc/ada/5lml-tgt.adb ! 1560385947b ./gcc/ada/5losinte.ads ! 566581471b ./gcc/ada/5lsystem.ads ! 3212004635b ./gcc/ada/5mosinte.ads ! 2556228116b ./gcc/ada/5mvxwork.ads ! 1277970924b ./gcc/ada/5ninmaop.adb ! 921618338b ./gcc/ada/5nintman.adb ! 2773599964b ./gcc/ada/5nosinte.ads ! 2606543337b ./gcc/ada/5ntaprop.adb ! 3755362459b ./gcc/ada/5ntaspri.ads ! 2203283165b ./gcc/ada/5ointerr.adb ! 4214075066b ./gcc/ada/5omastop.adb ! 51561081b ./gcc/ada/5oosinte.adb ! 3809744645b ./gcc/ada/5oosinte.ads ! 2928684265b ./gcc/ada/5oosprim.adb ! 2072280969b ./gcc/ada/5oparame.adb ! 3575712341b ./gcc/ada/5osystem.ads ! 679733143b ./gcc/ada/5otaprop.adb ! 1685662286b ./gcc/ada/5otaspri.ads ! 656589266b ./gcc/ada/5posinte.ads ! 3394687510b ./gcc/ada/5posprim.adb ! 1947102917b ./gcc/ada/5pvxwork.ads ! 2218896062b ./gcc/ada/5qosinte.adb ! 147874672b ./gcc/ada/5qosinte.ads ! 487900047b ./gcc/ada/5qparame.ads ! 1923594129b ./gcc/ada/5qstache.adb ! 2941573152b ./gcc/ada/5qtaprop.adb ! 3425306326b ./gcc/ada/5qtaspri.ads ! 3925078434b ./gcc/ada/5qvxwork.ads ! 3811279815b ./gcc/ada/5rosinte.adb ! 4146733644b ./gcc/ada/5rosinte.ads ! 341619696b ./gcc/ada/5rparame.adb ! 3395974413b ./gcc/ada/5sintman.adb ! 2666853386b ./gcc/ada/5smastop.adb ! 946915847b ./gcc/ada/5sosinte.adb ! 1686512140b ./gcc/ada/5sosinte.ads ! 1089056181b ./gcc/ada/5sparame.adb ! 1789906565b ./gcc/ada/5ssystem.ads ! 1618657802b ./gcc/ada/5staprop.adb ! 2345225497b ./gcc/ada/5stasinf.adb ! 2933480236b ./gcc/ada/5stasinf.ads ! 3413502572b ./gcc/ada/5staspri.ads ! 1154412482b ./gcc/ada/5stpopse.adb ! 67524432b ./gcc/ada/5svxwork.ads ! 3415155229b ./gcc/ada/5tosinte.ads ! 512605178b ./gcc/ada/5uintman.adb ! 4009109831b ./gcc/ada/5uosinte.ads ! 20834007b ./gcc/ada/5vasthan.adb ! 2828545983b ./gcc/ada/5vinmaop.adb ! 757746642b ./gcc/ada/5vinterr.adb ! 3554377996b ./gcc/ada/5vintman.adb ! 4186329246b ./gcc/ada/5vintman.ads ! 1363122615b ./gcc/ada/5vmastop.adb ! 2126801266b ./gcc/ada/5vosinte.adb ! 257481916b ./gcc/ada/5vosinte.ads ! 2697009894b ./gcc/ada/5vosprim.adb ! 3173364854b ./gcc/ada/5vosprim.ads ! 1485530536b ./gcc/ada/5vparame.ads ! 477268412b ./gcc/ada/5vsystem.ads ! 880665297b ./gcc/ada/5vtaprop.adb ! 2017768241b ./gcc/ada/5vtaspri.ads ! 1524831970b ./gcc/ada/5vtpopde.adb ! 2510422485b ./gcc/ada/5vtpopde.ads ! 1323493335b ./gcc/ada/5vvaflop.adb ! 2061622518b ./gcc/ada/5wgloloc.adb ! 2867255266b ./gcc/ada/5wintman.adb ! 379035915b ./gcc/ada/5wmemory.adb ! 1635278585b ./gcc/ada/5wosinte.ads ! 2409163205b ./gcc/ada/5wosprim.adb ! 478208583b ./gcc/ada/5wsystem.ads ! 3106892401b ./gcc/ada/5wtaprop.adb ! 4085824633b ./gcc/ada/5wtaspri.ads ! 3290324010b ./gcc/ada/5ysystem.ads ! 218453075b ./gcc/ada/5zinterr.adb ! 2488090528b ./gcc/ada/5zintman.adb ! 3420496615b ./gcc/ada/5zosinte.adb ! 217803163b ./gcc/ada/5zosinte.ads ! 2386679201b ./gcc/ada/5zosprim.adb ! 4153514169b ./gcc/ada/5zparame.ads ! 2955891758b ./gcc/ada/5zsystem.ads ! 1056290651b ./gcc/ada/5ztaprop.adb ! 2493859349b ./gcc/ada/6vcpp.adb ! 3764631364b ./gcc/ada/6vcstrea.adb ! 1298363378b ./gcc/ada/6vinterf.ads ! 4042684575b ./gcc/ada/7sinmaop.adb ! 784835892b ./gcc/ada/7sintman.adb ! 3674994444b ./gcc/ada/7sosinte.adb ! 1201544504b ./gcc/ada/7sosprim.adb ! 2188892819b ./gcc/ada/7staprop.adb ! 2314536447b ./gcc/ada/7staspri.ads ! 2244813175b ./gcc/ada/7stpopsp.adb ! 1360717481b ./gcc/ada/7straceb.adb ! 1989930650b ./gcc/ada/86numaux.adb ! 4223067829b ./gcc/ada/86numaux.ads ! 176063031b ./gcc/ada/9drpc.adb ! 1238937539b ./gcc/ada/a-astaco.adb ! 4160306902b ./gcc/ada/a-astaco.ads ! 1228169839b ./gcc/ada/a-caldel.adb ! 2176358398b ./gcc/ada/a-caldel.ads ! 3780985610b ./gcc/ada/a-calend.adb ! 3197442795b ./gcc/ada/a-calend.ads ! 1974463316b ./gcc/ada/a-chahan.adb ! 3292743834b ./gcc/ada/a-chahan.ads ! 825575293b ./gcc/ada/a-charac.ads ! 3290669737b ./gcc/ada/a-chlat1.ads ! 4141698919b ./gcc/ada/a-colien.adb ! 1708206584b ./gcc/ada/a-colien.ads ! 2886731379b ./gcc/ada/a-colire.adb ! 632756715b ./gcc/ada/a-colire.ads ! 4188471995b ./gcc/ada/a-comlin.adb ! 1346248274b ./gcc/ada/a-comlin.ads ! 3629140421b ./gcc/ada/a-cwila1.ads ! 307313649b ./gcc/ada/ada.ads ! 4047226521b ./gcc/ada/ada.h ! 885231182b ./gcc/ada/adaint.c ! 2846678559b ./gcc/ada/adaint.h ! 512963659b ./gcc/ada/ada-tree.def ! 804772500b ./gcc/ada/ada-tree.h ! 3138793590b ./gcc/ada/a-decima.adb ! 1463764551b ./gcc/ada/a-decima.ads ! 2965106267b ./gcc/ada/a-diocst.adb ! 1351302553b ./gcc/ada/a-diocst.ads ! 2204236254b ./gcc/ada/a-direio.adb ! 2663951086b ./gcc/ada/a-direio.ads ! 2899453035b ./gcc/ada/a-dynpri.adb ! 1808034404b ./gcc/ada/a-dynpri.ads ! 1930539183b ./gcc/ada/a-einuoc.adb ! 2923383870b ./gcc/ada/a-einuoc.ads ! 3811259854b ./gcc/ada/a-except.adb ! 4208405793b ./gcc/ada/a-except.ads ! 4151617553b ./gcc/ada/a-excpol.adb ! 1040381731b ./gcc/ada/a-exctra.adb ! 87828562b ./gcc/ada/a-exctra.ads ! 2225675502b ./gcc/ada/a-filico.adb ! 3260597455b ./gcc/ada/a-filico.ads ! 907923324b ./gcc/ada/a-finali.adb ! 3572535024b ./gcc/ada/a-finali.ads ! 2422945006b ./gcc/ada/a-flteio.ads ! 3013254494b ./gcc/ada/a-fwteio.ads ! 1706398574b ./gcc/ada/a-inteio.ads ! 2001069544b ./gcc/ada/a-interr.adb ! 2400554368b ./gcc/ada/a-interr.ads ! 3855829577b ./gcc/ada/a-intnam.ads ! 1774182036b ./gcc/ada/a-intsig.adb ! 2389005781b ./gcc/ada/a-intsig.ads ! 2978442327b ./gcc/ada/a-ioexce.ads ! 2820771598b ./gcc/ada/a-iwteio.ads ! 2695025338b ./gcc/ada/a-lfteio.ads ! 68898824b ./gcc/ada/a-lfwtio.ads ! 1582815074b ./gcc/ada/ali.adb ! 1110656306b ./gcc/ada/ali.ads ! 3958947062b ./gcc/ada/a-liteio.ads ! 3701505690b ./gcc/ada/ali-util.adb ! 534404399b ./gcc/ada/ali-util.ads ! 3989352502b ./gcc/ada/a-liwtio.ads ! 706064852b ./gcc/ada/a-llftio.ads ! 1760483522b ./gcc/ada/a-llfwti.ads ! 1685529166b ./gcc/ada/a-llitio.ads ! 1092110807b ./gcc/ada/a-lliwti.ads ! 1648510288b ./gcc/ada/alloc.ads ! 3751218976b ./gcc/ada/a-ncelfu.ads ! 3307386742b ./gcc/ada/a-ngcefu.adb ! 3410028763b ./gcc/ada/a-ngcefu.ads ! 1098245021b ./gcc/ada/a-ngcoty.adb ! 3206810014b ./gcc/ada/a-ngcoty.ads ! 3316580416b ./gcc/ada/a-ngelfu.adb ! 3094594364b ./gcc/ada/a-ngelfu.ads ! 238508204b ./gcc/ada/a-nlcefu.ads ! 4084493045b ./gcc/ada/a-nlcoty.ads ! 2627472219b ./gcc/ada/a-nlelfu.ads ! 4117474264b ./gcc/ada/a-nllcef.ads ! 2318923524b ./gcc/ada/a-nllcty.ads ! 2611968609b ./gcc/ada/a-nllefu.ads ! 1082074441b ./gcc/ada/a-nscefu.ads ! 3357121256b ./gcc/ada/a-nscoty.ads ! 3712559791b ./gcc/ada/a-nselfu.ads ! 1597516775b ./gcc/ada/a-nucoty.ads ! 1662364886b ./gcc/ada/a-nudira.adb ! 3453922662b ./gcc/ada/a-nudira.ads ! 4261702712b ./gcc/ada/a-nuelfu.ads ! 2981834359b ./gcc/ada/a-nuflra.adb ! 197186767b ./gcc/ada/a-nuflra.ads ! 3913215245b ./gcc/ada/a-numaux.ads ! 1796312085b ./gcc/ada/a-numeri.ads ! 1699976913b ./gcc/ada/a-reatim.adb ! 2826402039b ./gcc/ada/a-reatim.ads ! 4184054556b ./gcc/ada/a-retide.adb ! 1321308146b ./gcc/ada/a-retide.ads ! 151152579b ./gcc/ada/argv.c ! 4225555660b ./gcc/ada/a-sequio.adb ! 3093499209b ./gcc/ada/a-sequio.ads ! 201813662b ./gcc/ada/a-sfteio.ads ! 768813005b ./gcc/ada/a-sfwtio.ads ! 3107027497b ./gcc/ada/a-siocst.adb ! 4067781141b ./gcc/ada/a-siocst.ads ! 2998945311b ./gcc/ada/a-siteio.ads ! 764480998b ./gcc/ada/a-siwtio.ads ! 164767602b ./gcc/ada/a-ssicst.adb ! 2673543741b ./gcc/ada/a-ssicst.ads ! 6703000b ./gcc/ada/a-ssitio.ads ! 597839343b ./gcc/ada/a-ssiwti.ads ! 358760311b ./gcc/ada/a-stmaco.ads ! 3991680331b ./gcc/ada/a-storio.adb ! 3996647403b ./gcc/ada/a-storio.ads ! 850701758b ./gcc/ada/a-strbou.adb ! 209100723b ./gcc/ada/a-strbou.ads ! 2712052749b ./gcc/ada/a-stream.ads ! 3445389326b ./gcc/ada/a-strfix.adb ! 2291830284b ./gcc/ada/a-strfix.ads ! 3358703553b ./gcc/ada/a-string.ads ! 1074484976b ./gcc/ada/a-strmap.adb ! 3962780233b ./gcc/ada/a-strmap.ads ! 2443268654b ./gcc/ada/a-strsea.adb ! 294757473b ./gcc/ada/a-strsea.ads ! 1067561841b ./gcc/ada/a-strunb.adb ! 4156134282b ./gcc/ada/a-strunb.ads ! 4032395003b ./gcc/ada/a-ststio.adb ! 1884417935b ./gcc/ada/a-ststio.ads ! 3010897568b ./gcc/ada/a-stunau.adb ! 3715203779b ./gcc/ada/a-stunau.ads ! 2054174824b ./gcc/ada/a-stwibo.adb ! 744358246b ./gcc/ada/a-stwibo.ads ! 3330826391b ./gcc/ada/a-stwifi.adb ! 2923302688b ./gcc/ada/a-stwifi.ads ! 3258659279b ./gcc/ada/a-stwima.adb ! 1429080954b ./gcc/ada/a-stwima.ads ! 1405535584b ./gcc/ada/a-stwise.adb ! 2375036092b ./gcc/ada/a-stwise.ads ! 3573494769b ./gcc/ada/a-stwiun.adb ! 4063750480b ./gcc/ada/a-stwiun.ads ! 1857462924b ./gcc/ada/a-suteio.adb ! 988077225b ./gcc/ada/a-suteio.ads ! 3427083052b ./gcc/ada/a-swmwco.ads ! 247624637b ./gcc/ada/a-swuwti.adb ! 1326104524b ./gcc/ada/a-swuwti.ads ! 3992727238b ./gcc/ada/a-sytaco.adb ! 4059971314b ./gcc/ada/a-sytaco.ads ! 2394326814b ./gcc/ada/a-tags.adb ! 3486033137b ./gcc/ada/a-tags.ads ! 1194894578b ./gcc/ada/a-tasatt.adb ! 2943432852b ./gcc/ada/a-tasatt.ads ! 2912651322b ./gcc/ada/a-taside.adb ! 646153741b ./gcc/ada/a-taside.ads ! 3438800004b ./gcc/ada/a-teioed.adb ! 1748001536b ./gcc/ada/a-teioed.ads ! 1427379759b ./gcc/ada/a-textio.adb ! 1210750137b ./gcc/ada/a-textio.ads ! 1749119361b ./gcc/ada/a-ticoau.adb ! 2222697472b ./gcc/ada/a-ticoau.ads ! 1221231446b ./gcc/ada/a-ticoio.adb ! 1223874862b ./gcc/ada/a-ticoio.ads ! 4279581986b ./gcc/ada/a-tideau.adb ! 434050393b ./gcc/ada/a-tideau.ads ! 2037256210b ./gcc/ada/a-tideio.adb ! 1718502310b ./gcc/ada/a-tideio.ads ! 529543928b ./gcc/ada/a-tienau.adb ! 3941439160b ./gcc/ada/a-tienau.ads ! 3371851163b ./gcc/ada/a-tienio.adb ! 3974972174b ./gcc/ada/a-tienio.ads ! 4188977439b ./gcc/ada/a-tifiio.adb ! 1786065440b ./gcc/ada/a-tifiio.ads ! 3558731868b ./gcc/ada/a-tiflau.adb ! 1745997125b ./gcc/ada/a-tiflau.ads ! 1485143016b ./gcc/ada/a-tiflio.adb ! 3470894323b ./gcc/ada/a-tiflio.ads ! 3323143227b ./gcc/ada/a-tigeau.adb ! 1729452158b ./gcc/ada/a-tigeau.ads ! 3932871049b ./gcc/ada/a-tiinau.adb ! 2369391467b ./gcc/ada/a-tiinau.ads ! 1924191553b ./gcc/ada/a-tiinio.adb ! 2729601893b ./gcc/ada/a-tiinio.ads ! 934261002b ./gcc/ada/a-timoau.adb ! 1113536362b ./gcc/ada/a-timoau.ads ! 4264051069b ./gcc/ada/a-timoio.adb ! 805418156b ./gcc/ada/a-timoio.ads ! 3870116277b ./gcc/ada/a-tiocst.adb ! 1562031680b ./gcc/ada/a-tiocst.ads ! 622798727b ./gcc/ada/a-titest.adb ! 1725647162b ./gcc/ada/a-titest.ads ! 2460925843b ./gcc/ada/atree.adb ! 1541614871b ./gcc/ada/atree.ads ! 1078226318b ./gcc/ada/atree.h ! 278716747b ./gcc/ada/a-unccon.ads ! 1157859592b ./gcc/ada/a-uncdea.ads ! 3576417048b ./gcc/ada/a-witeio.adb ! 3179602980b ./gcc/ada/a-witeio.ads ! 3259356202b ./gcc/ada/a-wtcoau.adb ! 4157240054b ./gcc/ada/a-wtcoau.ads ! 2649721481b ./gcc/ada/a-wtcoio.adb ! 3041062214b ./gcc/ada/a-wtcoio.ads ! 2350995641b ./gcc/ada/a-wtcstr.adb ! 4151370387b ./gcc/ada/a-wtcstr.ads ! 737993830b ./gcc/ada/a-wtdeau.adb ! 1297223500b ./gcc/ada/a-wtdeau.ads ! 317498445b ./gcc/ada/a-wtdeio.adb ! 2698675362b ./gcc/ada/a-wtdeio.ads ! 1920359111b ./gcc/ada/a-wtedit.adb ! 4233035352b ./gcc/ada/a-wtedit.ads ! 3733610031b ./gcc/ada/a-wtenau.adb ! 1209649592b ./gcc/ada/a-wtenau.ads ! 1772371901b ./gcc/ada/a-wtenio.adb ! 3345087568b ./gcc/ada/a-wtenio.ads ! 3955231020b ./gcc/ada/a-wtfiio.adb ! 2966383122b ./gcc/ada/a-wtfiio.ads ! 3172802882b ./gcc/ada/a-wtflau.adb ! 2847914558b ./gcc/ada/a-wtflau.ads ! 1430031960b ./gcc/ada/a-wtflio.adb ! 3504471884b ./gcc/ada/a-wtflio.ads ! 146615287b ./gcc/ada/a-wtgeau.adb ! 3202407425b ./gcc/ada/a-wtgeau.ads ! 1556046286b ./gcc/ada/a-wtinau.adb ! 620705682b ./gcc/ada/a-wtinau.ads ! 3330610374b ./gcc/ada/a-wtinio.adb ! 1587983670b ./gcc/ada/a-wtinio.ads ! 585816566b ./gcc/ada/a-wtmoau.adb ! 2360842842b ./gcc/ada/a-wtmoau.ads ! 2728837322b ./gcc/ada/a-wtmoio.adb ! 994042627b ./gcc/ada/a-wtmoio.ads ! 10193259b ./gcc/ada/a-wttest.adb ! 3792433389b ./gcc/ada/a-wttest.ads ! 3092527849b ./gcc/ada/back_end.adb ! 477747165b ./gcc/ada/back_end.ads ! 554760143b ./gcc/ada/bcheck.adb ! 1423149518b ./gcc/ada/bcheck.ads ! 603483282b ./gcc/ada/binde.adb ! 608595938b ./gcc/ada/binde.ads ! 3034016752b ./gcc/ada/binderr.adb ! 861498600b ./gcc/ada/binderr.ads ! 3217748288b ./gcc/ada/bindgen.adb ! 3453434027b ./gcc/ada/bindgen.ads ! 715016497b ./gcc/ada/bindusg.adb ! 2507691128b ./gcc/ada/bindusg.ads ! 1055153314b ./gcc/ada/butil.adb ! 2616385499b ./gcc/ada/butil.ads ! 322199477b ./gcc/ada/cal.c ! 3874049157b ./gcc/ada/calendar.ads ! 3825818772b ./gcc/ada/casing.adb ! 2190810584b ./gcc/ada/casing.ads ! 3750437973b ./gcc/ada/ceinfo.adb ! 552265150b ./gcc/ada/ChangeLog ! 869185536b ./gcc/ada/checks.adb ! 440073759b ./gcc/ada/checks.ads ! 401488734b ./gcc/ada/cio.c ! 1870694279b ./gcc/ada/comperr.adb ! 1643780092b ./gcc/ada/comperr.ads ! 1676023100b ./gcc/ada/config-lang.in ! 3110809717b ./gcc/ada/csets.adb ! 519863585b ./gcc/ada/csets.ads ! 1124381824b ./gcc/ada/csinfo.adb ! 853889379b ./gcc/ada/cstand.adb ! 276146343b ./gcc/ada/cstand.ads ! 1520807724b ./gcc/ada/cstreams.c ! 1822736202b ./gcc/ada/cuintp.c ! 579009580b ./gcc/ada/debug_a.adb ! 799315376b ./gcc/ada/debug_a.ads ! 2435692819b ./gcc/ada/debug.adb ! 638126818b ./gcc/ada/debug.ads ! 1459266024b ./gcc/ada/dec.ads ! 3565371015b ./gcc/ada/dec-io.adb ! 2106947862b ./gcc/ada/dec-io.ads ! 2132162623b ./gcc/ada/decl.c ! 1390338918b ./gcc/ada/deftarg.c ! 1749835375b ./gcc/ada/directio.ads ! 2461185080b ./gcc/ada/einfo.adb ! 3725314637b ./gcc/ada/einfo.ads ! 1040486350b ./gcc/ada/einfo.h ! 3827088848b ./gcc/ada/elists.adb ! 2003740348b ./gcc/ada/elists.ads ! 1105190374b ./gcc/ada/elists.h ! 204753916b ./gcc/ada/errno.c ! 4008402022b ./gcc/ada/errout.adb ! 320928564b ./gcc/ada/errout.ads ! 2999271413b ./gcc/ada/eval_fat.adb ! 2463431696b ./gcc/ada/eval_fat.ads ! 3517544739b ./gcc/ada/exit.c ! 2311141325b ./gcc/ada/exp_aggr.adb ! 2860900195b ./gcc/ada/exp_aggr.ads ! 2681017510b ./gcc/ada/expander.adb ! 2575484225b ./gcc/ada/expander.ads ! 2455995554b ./gcc/ada/exp_attr.adb ! 2274665870b ./gcc/ada/exp_attr.ads ! 3788438274b ./gcc/ada/exp_ch10.ads ! 1959020568b ./gcc/ada/exp_ch11.adb ! 1356092263b ./gcc/ada/exp_ch11.ads ! 2662303632b ./gcc/ada/exp_ch12.adb ! 1677837106b ./gcc/ada/exp_ch12.ads ! 1201493881b ./gcc/ada/exp_ch13.adb ! 2523628624b ./gcc/ada/exp_ch13.ads ! 2836932963b ./gcc/ada/exp_ch2.adb ! 1920342641b ./gcc/ada/exp_ch2.ads ! 2780430528b ./gcc/ada/exp_ch3.adb ! 3277988254b ./gcc/ada/exp_ch3.ads ! 423127048b ./gcc/ada/exp_ch4.adb ! 630544925b ./gcc/ada/exp_ch4.ads ! 1300859159b ./gcc/ada/exp_ch5.adb ! 3884008715b ./gcc/ada/exp_ch5.ads ! 1421574227b ./gcc/ada/exp_ch6.adb ! 2978408620b ./gcc/ada/exp_ch6.ads ! 1516530505b ./gcc/ada/exp_ch7.adb ! 4029388464b ./gcc/ada/exp_ch7.ads ! 806341254b ./gcc/ada/exp_ch8.adb ! 2493548378b ./gcc/ada/exp_ch8.ads ! 947069359b ./gcc/ada/exp_ch9.adb ! 3130662329b ./gcc/ada/exp_ch9.ads ! 2689298271b ./gcc/ada/exp_code.adb ! 3591911170b ./gcc/ada/exp_code.ads ! 3574458760b ./gcc/ada/exp_dbug.adb ! 4105290806b ./gcc/ada/exp_dbug.ads ! 3835417459b ./gcc/ada/exp_disp.adb ! 1460989777b ./gcc/ada/exp_disp.ads ! 4152673151b ./gcc/ada/exp_dist.adb ! 2224744101b ./gcc/ada/exp_dist.ads ! 196370175b ./gcc/ada/expect.c ! 2380394819b ./gcc/ada/exp_fixd.adb ! 2971633787b ./gcc/ada/exp_fixd.ads ! 383808865b ./gcc/ada/exp_imgv.adb ! 107414456b ./gcc/ada/exp_imgv.ads ! 533490453b ./gcc/ada/exp_intr.adb ! 603944530b ./gcc/ada/exp_intr.ads ! 1223570350b ./gcc/ada/exp_pakd.adb ! 3169217058b ./gcc/ada/exp_pakd.ads ! 561903948b ./gcc/ada/exp_prag.adb ! 2726623065b ./gcc/ada/exp_prag.ads ! 2694622276b ./gcc/ada/exp_smem.adb ! 4102883600b ./gcc/ada/exp_smem.ads ! 3367849671b ./gcc/ada/exp_strm.adb ! 508903407b ./gcc/ada/exp_strm.ads ! 4061285632b ./gcc/ada/exp_tss.adb ! 802174414b ./gcc/ada/exp_tss.ads ! 4294889971b ./gcc/ada/exp_util.adb ! 2588841819b ./gcc/ada/exp_util.ads ! 732650724b ./gcc/ada/exp_vfpt.adb ! 3158703166b ./gcc/ada/exp_vfpt.ads ! 3730235790b ./gcc/ada/fe.h ! 742167588b ./gcc/ada/final.c ! 2410826795b ./gcc/ada/fmap.adb ! 1989849769b ./gcc/ada/fmap.ads ! 4193711832b ./gcc/ada/fname.adb ! 3581054847b ./gcc/ada/fname.ads ! 2554721004b ./gcc/ada/fname-sf.adb ! 3385587425b ./gcc/ada/fname-sf.ads ! 152433494b ./gcc/ada/fname-uf.adb ! 2869979673b ./gcc/ada/fname-uf.ads ! 165073793b ./gcc/ada/freeze.adb ! 286956192b ./gcc/ada/freeze.ads ! 146613934b ./gcc/ada/frontend.adb ! 1342421440b ./gcc/ada/frontend.ads ! 4158577973b ./gcc/ada/g-awk.adb ! 609310253b ./gcc/ada/g-awk.ads ! 606317350b ./gcc/ada/g-busora.adb ! 2327940372b ./gcc/ada/g-busora.ads ! 614263783b ./gcc/ada/g-busorg.adb ! 2383765954b ./gcc/ada/g-busorg.ads ! 2310918787b ./gcc/ada/g-calend.adb ! 775102218b ./gcc/ada/g-calend.ads ! 4188678555b ./gcc/ada/g-casuti.adb ! 1046751589b ./gcc/ada/g-casuti.ads ! 2508275788b ./gcc/ada/g-catiio.adb ! 1700304817b ./gcc/ada/g-catiio.ads ! 153263812b ./gcc/ada/g-cgi.adb ! 491501987b ./gcc/ada/g-cgi.ads ! 1552120806b ./gcc/ada/g-cgicoo.adb ! 514376152b ./gcc/ada/g-cgicoo.ads ! 2079055740b ./gcc/ada/g-cgideb.adb ! 3073151229b ./gcc/ada/g-cgideb.ads ! 1337328080b ./gcc/ada/g-comlin.adb ! 762947182b ./gcc/ada/g-comlin.ads ! 3063697563b ./gcc/ada/g-crc32.adb ! 4042174606b ./gcc/ada/g-crc32.ads ! 123778282b ./gcc/ada/g-curexc.ads ! 1009530951b ./gcc/ada/g-debpoo.adb ! 2797049575b ./gcc/ada/g-debpoo.ads ! 2483821241b ./gcc/ada/g-debuti.adb ! 2759144883b ./gcc/ada/g-debuti.ads ! 1479126304b ./gcc/ada/g-diopit.adb ! 2613579847b ./gcc/ada/g-diopit.ads ! 1351705587b ./gcc/ada/g-dirope.adb ! 1843551212b ./gcc/ada/g-dirope.ads ! 2129456205b ./gcc/ada/g-dyntab.adb ! 2301313958b ./gcc/ada/g-dyntab.ads ! 2000619828b ./gcc/ada/get_targ.adb ! 4235434426b ./gcc/ada/get_targ.ads ! 240250153b ./gcc/ada/g-except.ads ! 311327188b ./gcc/ada/g-exctra.adb ! 696104010b ./gcc/ada/g-exctra.ads ! 2021399770b ./gcc/ada/g-expect.adb ! 3670453648b ./gcc/ada/g-expect.ads ! 115710627b ./gcc/ada/g-flocon.ads ! 1241285700b ./gcc/ada/g-hesora.adb ! 1954443348b ./gcc/ada/g-hesora.ads ! 2162133654b ./gcc/ada/g-hesorg.adb ! 1899093730b ./gcc/ada/g-hesorg.ads ! 615231546b ./gcc/ada/g-htable.adb ! 1147404231b ./gcc/ada/g-htable.ads ! 3771528129b ./gcc/ada/gigi.h ! 4074378557b ./gcc/ada/g-io.adb ! 2059397144b ./gcc/ada/g-io.ads ! 3075502902b ./gcc/ada/g-io_aux.adb ! 2987271187b ./gcc/ada/g-io_aux.ads ! 2315560945b ./gcc/ada/g-locfil.adb ! 3845793000b ./gcc/ada/g-locfil.ads ! 3781796779b ./gcc/ada/gmem.c ! 2382601227b ./gcc/ada/g-moreex.adb ! 1324668450b ./gcc/ada/g-moreex.ads ! 3331018174b ./gcc/ada/gnat1drv.adb ! 1236781124b ./gcc/ada/gnat1drv.ads ! 3338432106b ./gcc/ada/gnat.ads ! 2299667202b ./gcc/ada/gnatbind.adb ! 104731427b ./gcc/ada/gnatbind.ads ! 4059170038b ./gcc/ada/gnatbl.c ! 3226234054b ./gcc/ada/gnatchop.adb ! 3118972477b ./gcc/ada/gnatcmd.adb ! 3908617844b ./gcc/ada/gnatcmd.ads ! 2796597452b ./gcc/ada/gnatdll.adb ! 1086468102b ./gcc/ada/gnatfind.adb ! 3373987329b ./gcc/ada/gnatkr.adb ! 3373093353b ./gcc/ada/gnatkr.ads ! 616714676b ./gcc/ada/gnatlbr.adb ! 2504670692b ./gcc/ada/gnatlink.adb ! 2544717462b ./gcc/ada/gnatlink.ads ! 4282914717b ./gcc/ada/gnatls.adb ! 1758666063b ./gcc/ada/gnatls.ads ! 1542183559b ./gcc/ada/gnatmain.adb ! 3283765307b ./gcc/ada/gnatmain.ads ! 2033004516b ./gcc/ada/gnatmake.adb ! 145840748b ./gcc/ada/gnatmake.ads ! 1758767486b ./gcc/ada/gnatmem.adb ! 2813528580b ./gcc/ada/gnatprep.adb ! 2835105488b ./gcc/ada/gnatprep.ads ! 3865862564b ./gcc/ada/gnatpsta.adb ! 3829654473b ./gcc/ada/gnatpsys.adb ! 2787179765b ./gcc/ada/gnat_rm.texi ! 1099903949b ./gcc/ada/gnat-style.texi ! 3866519797b ./gcc/ada/gnat_ug.texi ! 2790230500b ./gcc/ada/gnatvsn.ads ! 2692053620b ./gcc/ada/gnatxref.adb ! 1804647254b ./gcc/ada/g-os_lib.adb ! 3221085683b ./gcc/ada/g-os_lib.ads ! 1185528967b ./gcc/ada/g-regexp.adb ! 1629361223b ./gcc/ada/g-regexp.ads ! 3390523966b ./gcc/ada/g-regist.adb ! 3208719885b ./gcc/ada/g-regist.ads ! 1577468709b ./gcc/ada/g-regpat.adb ! 582026880b ./gcc/ada/g-regpat.ads ! 2451205314b ./gcc/ada/g-soccon.ads ! 2575242004b ./gcc/ada/g-socket.adb ! 1535656165b ./gcc/ada/g-socket.ads ! 2293859502b ./gcc/ada/g-socthi.adb ! 651912058b ./gcc/ada/g-socthi.ads ! 3350030780b ./gcc/ada/g-soliop.ads ! 758288908b ./gcc/ada/g-souinf.ads ! 581975334b ./gcc/ada/g-speche.adb ! 2314638139b ./gcc/ada/g-speche.ads ! 2855842118b ./gcc/ada/g-spipat.adb ! 791106872b ./gcc/ada/g-spipat.ads ! 3318271323b ./gcc/ada/g-spitbo.adb ! 605302019b ./gcc/ada/g-spitbo.ads ! 2302115365b ./gcc/ada/g-sptabo.ads ! 795251741b ./gcc/ada/g-sptain.ads ! 2860049437b ./gcc/ada/g-sptavs.ads ! 2522673043b ./gcc/ada/g-table.adb ! 4247473857b ./gcc/ada/g-table.ads ! 963828728b ./gcc/ada/g-tasloc.adb ! 3443589956b ./gcc/ada/g-tasloc.ads ! 4222037032b ./gcc/ada/g-thread.adb ! 2926605455b ./gcc/ada/g-thread.ads ! 1214503882b ./gcc/ada/g-traceb.adb ! 3641101501b ./gcc/ada/g-traceb.ads ! 4093206552b ./gcc/ada/g-trasym.adb ! 344030511b ./gcc/ada/g-trasym.ads ! 577038397b ./gcc/ada/hlo.adb ! 991320325b ./gcc/ada/hlo.ads ! 1962035170b ./gcc/ada/hostparm.ads ! 2031335613b ./gcc/ada/i-c.adb ! 1630163220b ./gcc/ada/i-c.ads ! 1541946831b ./gcc/ada/i-cexten.ads ! 3090969270b ./gcc/ada/i-cobol.adb ! 2496712247b ./gcc/ada/i-cobol.ads ! 2325074871b ./gcc/ada/i-cpoint.adb ! 1699793483b ./gcc/ada/i-cpoint.ads ! 214865019b ./gcc/ada/i-cpp.adb ! 2912941503b ./gcc/ada/i-cpp.ads ! 3140439521b ./gcc/ada/i-cstrea.adb ! 1842827516b ./gcc/ada/i-cstrea.ads ! 1294230726b ./gcc/ada/i-cstrin.adb ! 3630365631b ./gcc/ada/i-cstrin.ads ! 3233154322b ./gcc/ada/i-fortra.adb ! 3862297824b ./gcc/ada/i-fortra.ads ! 2205213686b ./gcc/ada/impunit.adb ! 3867557683b ./gcc/ada/impunit.ads ! 1455106367b ./gcc/ada/init.c ! 2729724075b ./gcc/ada/inline.adb ! 409617942b ./gcc/ada/inline.ads ! 2710275605b ./gcc/ada/interfac.ads ! 304019218b ./gcc/ada/io-aux.c ! 182695114b ./gcc/ada/ioexcept.ads ! 2660299838b ./gcc/ada/i-os2err.ads ! 1001031450b ./gcc/ada/i-os2lib.adb ! 3863909326b ./gcc/ada/i-os2lib.ads ! 2629699505b ./gcc/ada/i-os2syn.ads ! 2757162007b ./gcc/ada/i-os2thr.ads ! 10095810b ./gcc/ada/i-pacdec.adb ! 4204365106b ./gcc/ada/i-pacdec.ads ! 3730121014b ./gcc/ada/itypes.adb ! 1791965281b ./gcc/ada/itypes.ads ! 2079820695b ./gcc/ada/i-vxwork.ads ! 1636222037b ./gcc/ada/krunch.adb ! 3193149413b ./gcc/ada/krunch.ads ! 3877739435b ./gcc/ada/lang-options.h ! 2419758820b ./gcc/ada/lang-specs.h ! 731292528b ./gcc/ada/layout.adb ! 2930468142b ./gcc/ada/layout.ads ! 1029825782b ./gcc/ada/lib.adb ! 1122008701b ./gcc/ada/lib.ads ! 3615838165b ./gcc/ada/lib-list.adb ! 13730108b ./gcc/ada/lib-load.adb ! 2583052213b ./gcc/ada/lib-load.ads ! 1127145456b ./gcc/ada/lib-sort.adb ! 1302172495b ./gcc/ada/lib-util.adb ! 1970877184b ./gcc/ada/lib-util.ads ! 1719338144b ./gcc/ada/lib-writ.adb ! 3384492892b ./gcc/ada/lib-writ.ads ! 1654030036b ./gcc/ada/lib-xref.adb ! 2167962937b ./gcc/ada/lib-xref.ads ! 3576767122b ./gcc/ada/link.c ! 1382287720b ./gcc/ada/live.adb ! 241788297b ./gcc/ada/live.ads ! 2349274909b ./gcc/ada/machcode.ads ! 1702260548b ./gcc/ada/make.adb ! 3505443302b ./gcc/ada/make.ads ! 82447397b ./gcc/ada/Makefile.adalib ! 2651233511b ./gcc/ada/Makefile.in ! 1732491936b ./gcc/ada/Make-lang.in ! 2073972201b ./gcc/ada/makeusg.adb ! 2946385998b ./gcc/ada/makeusg.ads ! 1369191481b ./gcc/ada/math_lib.adb ! 3431850830b ./gcc/ada/mdll.adb ! 3403824619b ./gcc/ada/mdll.ads ! 63072210b ./gcc/ada/mdllfile.adb ! 1377024247b ./gcc/ada/mdllfile.ads ! 271650509b ./gcc/ada/mdlltool.adb ! 3822656791b ./gcc/ada/mdlltool.ads ! 2562707248b ./gcc/ada/memroot.adb ! 3394187078b ./gcc/ada/memroot.ads ! 3285031453b ./gcc/ada/memtrack.adb ! 2151760376b ./gcc/ada/misc.c ! 2389340576b ./gcc/ada/mlib.adb ! 3760284379b ./gcc/ada/mlib.ads ! 3038778953b ./gcc/ada/mlib-fil.adb ! 1806810212b ./gcc/ada/mlib-fil.ads ! 222091384b ./gcc/ada/mlib-prj.adb ! 2968654783b ./gcc/ada/mlib-prj.ads ! 882896001b ./gcc/ada/mlib-tgt.adb ! 3995257659b ./gcc/ada/mlib-tgt.ads ! 557486163b ./gcc/ada/mlib-utl.adb ! 3132611148b ./gcc/ada/mlib-utl.ads ! 2192832241b ./gcc/ada/namet.adb ! 4115408171b ./gcc/ada/namet.ads ! 1021113274b ./gcc/ada/namet.h ! 2786583125b ./gcc/ada/nlists.adb ! 3207616321b ./gcc/ada/nlists.ads ! 4207230567b ./gcc/ada/nlists.h ! 1668172920b ./gcc/ada/nmake.adb ! 3530016949b ./gcc/ada/nmake.ads ! 810039548b ./gcc/ada/nmake.adt ! 603482997b ./gcc/ada/opt.adb ! 272528391b ./gcc/ada/opt.ads ! 757957959b ./gcc/ada/osint.adb ! 124998996b ./gcc/ada/osint.ads ! 1444051127b ./gcc/ada/output.adb ! 4192286483b ./gcc/ada/output.ads ! 667325059b ./gcc/ada/par.adb ! 890918457b ./gcc/ada/par.ads ! 286171607b ./gcc/ada/par-ch10.adb ! 82263454b ./gcc/ada/par-ch11.adb ! 977429014b ./gcc/ada/par-ch12.adb ! 1605568863b ./gcc/ada/par-ch13.adb ! 2759284176b ./gcc/ada/par-ch2.adb ! 3744247741b ./gcc/ada/par-ch3.adb ! 2502332261b ./gcc/ada/par-ch4.adb ! 2508708623b ./gcc/ada/par-ch5.adb ! 3460173897b ./gcc/ada/par-ch6.adb ! 2558917702b ./gcc/ada/par-ch7.adb ! 1991687801b ./gcc/ada/par-ch8.adb ! 2902683544b ./gcc/ada/par-ch9.adb ! 1736379569b ./gcc/ada/par-endh.adb ! 2386370437b ./gcc/ada/par-labl.adb ! 2191110385b ./gcc/ada/par-load.adb ! 3989665290b ./gcc/ada/par-prag.adb ! 2061902000b ./gcc/ada/par-sync.adb ! 3034220935b ./gcc/ada/par-tchk.adb ! 435842982b ./gcc/ada/par-util.adb ! 2681846287b ./gcc/ada/prj.adb ! 2159508649b ./gcc/ada/prj.ads ! 769972278b ./gcc/ada/prj-attr.adb ! 1517107046b ./gcc/ada/prj-attr.ads ! 2579476649b ./gcc/ada/prj-com.adb ! 4188434019b ./gcc/ada/prj-com.ads ! 1445752564b ./gcc/ada/prj-dect.adb ! 2054972414b ./gcc/ada/prj-dect.ads ! 2978271615b ./gcc/ada/prj-env.adb ! 3039443255b ./gcc/ada/prj-env.ads ! 2914671733b ./gcc/ada/prj-ext.adb ! 2463218682b ./gcc/ada/prj-ext.ads ! 2361570952b ./gcc/ada/prj-nmsc.adb ! 1462185546b ./gcc/ada/prj-nmsc.ads ! 1324893907b ./gcc/ada/prj-pars.adb ! 1278172108b ./gcc/ada/prj-pars.ads ! 3627484519b ./gcc/ada/prj-part.adb ! 3249280050b ./gcc/ada/prj-part.ads ! 4152265411b ./gcc/ada/prj-proc.adb ! 2864536023b ./gcc/ada/prj-proc.ads ! 3885810048b ./gcc/ada/prj-strt.adb ! 463253586b ./gcc/ada/prj-strt.ads ! 2752403718b ./gcc/ada/prj-tree.adb ! 4172539515b ./gcc/ada/prj-tree.ads ! 195833379b ./gcc/ada/prj-util.adb ! 2190751868b ./gcc/ada/prj-util.ads ! 1173868787b ./gcc/ada/raise.c ! 137228817b ./gcc/ada/raise.h ! 2480259783b ./gcc/ada/repinfo.adb ! 638755227b ./gcc/ada/repinfo.ads ! 3072671705b ./gcc/ada/repinfo.h ! 1399693331b ./gcc/ada/restrict.adb ! 2826035214b ./gcc/ada/restrict.ads ! 1958872377b ./gcc/ada/rident.ads ! 685615765b ./gcc/ada/rtsfind.adb ! 944636897b ./gcc/ada/rtsfind.ads ! 2934207681b ./gcc/ada/s-addima.adb ! 2921793700b ./gcc/ada/s-addima.ads ! 3133788426b ./gcc/ada/s-arit64.adb ! 139066661b ./gcc/ada/s-arit64.ads ! 2146399349b ./gcc/ada/s-assert.adb ! 2467675233b ./gcc/ada/s-assert.ads ! 2471473947b ./gcc/ada/s-asthan.adb ! 1425755957b ./gcc/ada/s-asthan.ads ! 3345093947b ./gcc/ada/s-atacco.adb ! 274791225b ./gcc/ada/s-atacco.ads ! 1268162914b ./gcc/ada/s-auxdec.adb ! 3265586513b ./gcc/ada/s-auxdec.ads ! 1722353021b ./gcc/ada/s-bitops.adb ! 2501304200b ./gcc/ada/s-bitops.ads ! 468056045b ./gcc/ada/scans.adb ! 815846534b ./gcc/ada/scans.ads ! 368971619b ./gcc/ada/s-chepoo.ads ! 2107362337b ./gcc/ada/scn.adb ! 643548576b ./gcc/ada/scn.ads ! 3089102575b ./gcc/ada/scn-nlit.adb ! 4137585658b ./gcc/ada/scn-slit.adb ! 2083911466b ./gcc/ada/s-crc32.adb ! 3182978663b ./gcc/ada/s-crc32.ads ! 1550561834b ./gcc/ada/sdefault.ads ! 353869099b ./gcc/ada/s-direio.adb ! 309988644b ./gcc/ada/s-direio.ads ! 3951057432b ./gcc/ada/sem.adb ! 1409686204b ./gcc/ada/sem.ads ! 666790856b ./gcc/ada/sem_aggr.adb ! 526541988b ./gcc/ada/sem_aggr.ads ! 3591099921b ./gcc/ada/sem_attr.adb ! 2192022517b ./gcc/ada/sem_attr.ads ! 2483089446b ./gcc/ada/sem_case.adb ! 1285698743b ./gcc/ada/sem_case.ads ! 3650211808b ./gcc/ada/sem_cat.adb ! 2960627583b ./gcc/ada/sem_cat.ads ! 3310159843b ./gcc/ada/sem_ch10.adb ! 1481985747b ./gcc/ada/sem_ch10.ads ! 4010667392b ./gcc/ada/sem_ch11.adb ! 1735222025b ./gcc/ada/sem_ch11.ads ! 248848194b ./gcc/ada/sem_ch12.adb ! 997879767b ./gcc/ada/sem_ch12.ads ! 2493455042b ./gcc/ada/sem_ch13.adb ! 3760013065b ./gcc/ada/sem_ch13.ads ! 1035453033b ./gcc/ada/sem_ch2.adb ! 2925796260b ./gcc/ada/sem_ch2.ads ! 256651025b ./gcc/ada/sem_ch3.adb ! 3506394288b ./gcc/ada/sem_ch3.ads ! 3342506445b ./gcc/ada/sem_ch4.adb ! 3161721114b ./gcc/ada/sem_ch4.ads ! 425430463b ./gcc/ada/sem_ch5.adb ! 921448714b ./gcc/ada/sem_ch5.ads ! 3940967835b ./gcc/ada/sem_ch6.adb ! 3617379945b ./gcc/ada/sem_ch6.ads ! 806087534b ./gcc/ada/sem_ch7.adb ! 2229285886b ./gcc/ada/sem_ch7.ads ! 2675641382b ./gcc/ada/sem_ch8.adb ! 414296948b ./gcc/ada/sem_ch8.ads ! 2226149000b ./gcc/ada/sem_ch9.adb ! 2313393680b ./gcc/ada/sem_ch9.ads ! 2789952266b ./gcc/ada/sem_disp.adb ! 1522627489b ./gcc/ada/sem_disp.ads ! 705974316b ./gcc/ada/sem_dist.adb ! 1442557709b ./gcc/ada/sem_dist.ads ! 2065925155b ./gcc/ada/sem_elab.adb ! 618332011b ./gcc/ada/sem_elab.ads ! 2796522258b ./gcc/ada/sem_elim.adb ! 4083559357b ./gcc/ada/sem_elim.ads ! 2582716150b ./gcc/ada/sem_eval.adb ! 1067144441b ./gcc/ada/sem_eval.ads ! 2566870177b ./gcc/ada/sem_intr.adb ! 4270264978b ./gcc/ada/sem_intr.ads ! 626970173b ./gcc/ada/sem_maps.adb ! 2624950393b ./gcc/ada/sem_maps.ads ! 2004945865b ./gcc/ada/sem_mech.adb ! 727986888b ./gcc/ada/sem_mech.ads ! 211861215b ./gcc/ada/sem_prag.adb ! 692139933b ./gcc/ada/sem_prag.ads ! 1680274646b ./gcc/ada/sem_res.adb ! 4223338214b ./gcc/ada/sem_res.ads ! 1966095667b ./gcc/ada/sem_smem.adb ! 3543394119b ./gcc/ada/sem_smem.ads ! 54838574b ./gcc/ada/sem_type.adb ! 1083645285b ./gcc/ada/sem_type.ads ! 3315098834b ./gcc/ada/sem_util.adb ! 3071381257b ./gcc/ada/sem_util.ads ! 512361512b ./gcc/ada/sem_vfpt.adb ! 2796693707b ./gcc/ada/sem_vfpt.ads ! 4155489467b ./gcc/ada/sem_warn.adb ! 2670991982b ./gcc/ada/sem_warn.ads ! 1802605744b ./gcc/ada/sequenio.ads ! 2211683422b ./gcc/ada/s-errrep.adb ! 1186812435b ./gcc/ada/s-errrep.ads ! 561621508b ./gcc/ada/s-except.ads ! 7350293b ./gcc/ada/s-exctab.adb ! 1119186265b ./gcc/ada/s-exctab.ads ! 622864413b ./gcc/ada/s-exnflt.ads ! 1352415346b ./gcc/ada/s-exngen.adb ! 2596541002b ./gcc/ada/s-exngen.ads ! 3390809287b ./gcc/ada/s-exnint.ads ! 4092255620b ./gcc/ada/s-exnlfl.ads ! 1474028514b ./gcc/ada/s-exnlin.ads ! 3994054006b ./gcc/ada/s-exnllf.ads ! 2680813188b ./gcc/ada/s-exnlli.ads ! 1172996611b ./gcc/ada/s-exnsfl.ads ! 2557413106b ./gcc/ada/s-exnsin.ads ! 2820344349b ./gcc/ada/s-exnssi.ads ! 4059331373b ./gcc/ada/s-expflt.ads ! 3105649102b ./gcc/ada/s-expgen.adb ! 4177327143b ./gcc/ada/s-expgen.ads ! 2038272825b ./gcc/ada/s-expint.ads ! 2921280512b ./gcc/ada/s-explfl.ads ! 3409169717b ./gcc/ada/s-explin.ads ! 1559471549b ./gcc/ada/s-expllf.ads ! 361819024b ./gcc/ada/s-explli.ads ! 1136797591b ./gcc/ada/s-expllu.adb ! 1070447422b ./gcc/ada/s-expllu.ads ! 3783588084b ./gcc/ada/s-expmod.adb ! 1306565465b ./gcc/ada/s-expmod.ads ! 1935872355b ./gcc/ada/s-expsfl.ads ! 693874826b ./gcc/ada/s-expsin.ads ! 3200711015b ./gcc/ada/s-expssi.ads ! 423463208b ./gcc/ada/s-expuns.adb ! 1226202999b ./gcc/ada/s-expuns.ads ! 3596082207b ./gcc/ada/s-fatflt.ads ! 152336698b ./gcc/ada/s-fatgen.adb ! 3452704907b ./gcc/ada/s-fatgen.ads ! 518796998b ./gcc/ada/s-fatlfl.ads ! 177868014b ./gcc/ada/s-fatllf.ads ! 1844976187b ./gcc/ada/s-fatsfl.ads ! 2030917946b ./gcc/ada/s-ficobl.ads ! 3604265630b ./gcc/ada/s-fileio.adb ! 1245988519b ./gcc/ada/s-fileio.ads ! 3998800077b ./gcc/ada/s-finimp.adb ! 348300428b ./gcc/ada/s-finimp.ads ! 3256667434b ./gcc/ada/s-finroo.adb ! 3539088082b ./gcc/ada/s-finroo.ads ! 2389974990b ./gcc/ada/sfn_scan.adb ! 2382113394b ./gcc/ada/sfn_scan.ads ! 1543367984b ./gcc/ada/s-fore.adb ! 2136160505b ./gcc/ada/s-fore.ads ! 1724896850b ./gcc/ada/s-gloloc.adb ! 2874263872b ./gcc/ada/s-gloloc.ads ! 2576558599b ./gcc/ada/s-imgbiu.adb ! 485571853b ./gcc/ada/s-imgbiu.ads ! 2696391467b ./gcc/ada/s-imgboo.adb ! 562529842b ./gcc/ada/s-imgboo.ads ! 3469875082b ./gcc/ada/s-imgcha.adb ! 768667588b ./gcc/ada/s-imgcha.ads ! 891425892b ./gcc/ada/s-imgdec.adb ! 3956162567b ./gcc/ada/s-imgdec.ads ! 799265416b ./gcc/ada/s-imgenu.adb ! 3206640093b ./gcc/ada/s-imgenu.ads ! 1232841808b ./gcc/ada/s-imgint.adb ! 1884481077b ./gcc/ada/s-imgint.ads ! 2589338037b ./gcc/ada/s-imgllb.adb ! 952054489b ./gcc/ada/s-imgllb.ads ! 3511505943b ./gcc/ada/s-imglld.adb ! 3728427327b ./gcc/ada/s-imglld.ads ! 710546980b ./gcc/ada/s-imglli.adb ! 3496934828b ./gcc/ada/s-imglli.ads ! 2026551128b ./gcc/ada/s-imgllu.adb ! 898533582b ./gcc/ada/s-imgllu.ads ! 2093598044b ./gcc/ada/s-imgllw.adb ! 1635490829b ./gcc/ada/s-imgllw.ads ! 771945696b ./gcc/ada/s-imgrea.adb ! 3266140221b ./gcc/ada/s-imgrea.ads ! 783564063b ./gcc/ada/s-imguns.adb ! 550522958b ./gcc/ada/s-imguns.ads ! 1103898200b ./gcc/ada/s-imgwch.adb ! 306032126b ./gcc/ada/s-imgwch.ads ! 1632744438b ./gcc/ada/s-imgwiu.adb ! 3186715504b ./gcc/ada/s-imgwiu.ads ! 1405497043b ./gcc/ada/sinfo.adb ! 267608903b ./gcc/ada/sinfo.ads ! 2547960021b ./gcc/ada/sinfo-cn.adb ! 528396316b ./gcc/ada/sinfo-cn.ads ! 4211174202b ./gcc/ada/sinfo.h ! 2491143860b ./gcc/ada/s-inmaop.ads ! 3969757742b ./gcc/ada/sinput.adb ! 2051669844b ./gcc/ada/sinput.ads ! 318075408b ./gcc/ada/sinput-l.adb ! 4161724197b ./gcc/ada/sinput-l.ads ! 2486137427b ./gcc/ada/sinput-p.adb ! 4179659691b ./gcc/ada/sinput-p.ads ! 642329874b ./gcc/ada/s-interr.adb ! 2363118667b ./gcc/ada/s-interr.ads ! 3439464760b ./gcc/ada/s-intman.ads ! 3081896815b ./gcc/ada/s-io.adb ! 2704983298b ./gcc/ada/s-io.ads ! 4266387665b ./gcc/ada/s-maccod.ads ! 697475233b ./gcc/ada/s-mantis.adb ! 3382852588b ./gcc/ada/s-mantis.ads ! 2497788184b ./gcc/ada/s-mastop.adb ! 412040989b ./gcc/ada/s-mastop.ads ! 4056300803b ./gcc/ada/s-memory.adb ! 436917678b ./gcc/ada/s-memory.ads ! 3972943832b ./gcc/ada/snames.adb ! 2711732664b ./gcc/ada/snames.ads ! 95357118b ./gcc/ada/snames.h ! 915988587b ./gcc/ada/s-osprim.ads ! 1785995040b ./gcc/ada/s-pack03.adb ! 1159696143b ./gcc/ada/s-pack03.ads ! 4006352481b ./gcc/ada/s-pack05.adb ! 943301033b ./gcc/ada/s-pack05.ads ! 2948914699b ./gcc/ada/s-pack06.adb ! 1761489706b ./gcc/ada/s-pack06.ads ! 2460225886b ./gcc/ada/s-pack07.adb ! 1527563558b ./gcc/ada/s-pack07.ads ! 1020068514b ./gcc/ada/s-pack09.adb ! 2851601610b ./gcc/ada/s-pack09.ads ! 3981484000b ./gcc/ada/s-pack10.adb ! 4110961926b ./gcc/ada/s-pack10.ads ! 3243254137b ./gcc/ada/s-pack11.adb ! 650802763b ./gcc/ada/s-pack11.ads ! 3544834485b ./gcc/ada/s-pack12.adb ! 1524517676b ./gcc/ada/s-pack12.ads ! 3174573638b ./gcc/ada/s-pack13.adb ! 1859524441b ./gcc/ada/s-pack13.ads ! 2439144266b ./gcc/ada/s-pack14.adb ! 34461279b ./gcc/ada/s-pack14.ads ! 964701959b ./gcc/ada/s-pack15.adb ! 3069359215b ./gcc/ada/s-pack15.ads ! 1172842552b ./gcc/ada/s-pack17.adb ! 4277065085b ./gcc/ada/s-pack17.ads ! 355821236b ./gcc/ada/s-pack18.adb ! 667115373b ./gcc/ada/s-pack18.ads ! 3951115204b ./gcc/ada/s-pack19.adb ! 3721065538b ./gcc/ada/s-pack19.ads ! 3968916188b ./gcc/ada/s-pack20.adb ! 1519291685b ./gcc/ada/s-pack20.ads ! 1677028498b ./gcc/ada/s-pack21.adb ! 2507237065b ./gcc/ada/s-pack21.ads ! 3532235913b ./gcc/ada/s-pack22.adb ! 4116220687b ./gcc/ada/s-pack22.ads ! 530410413b ./gcc/ada/s-pack23.adb ! 3714910171b ./gcc/ada/s-pack23.ads ! 2426545782b ./gcc/ada/s-pack24.adb ! 3730016048b ./gcc/ada/s-pack24.ads ! 2602918636b ./gcc/ada/s-pack25.adb ! 88712429b ./gcc/ada/s-pack25.ads ! 2931513379b ./gcc/ada/s-pack26.adb ! 1904574746b ./gcc/ada/s-pack26.ads ! 3880609235b ./gcc/ada/s-pack27.adb ! 1297466879b ./gcc/ada/s-pack27.ads ! 351609736b ./gcc/ada/s-pack28.adb ! 2286264142b ./gcc/ada/s-pack28.ads ! 1227126319b ./gcc/ada/s-pack29.adb ! 1852957888b ./gcc/ada/s-pack29.ads ! 3962509768b ./gcc/ada/s-pack30.adb ! 1072902852b ./gcc/ada/s-pack30.ads ! 3032045044b ./gcc/ada/s-pack31.adb ! 4226258615b ./gcc/ada/s-pack31.ads ! 3369161419b ./gcc/ada/s-pack33.adb ! 3019634597b ./gcc/ada/s-pack33.ads ! 2417878370b ./gcc/ada/s-pack34.adb ! 3140368593b ./gcc/ada/s-pack34.ads ! 1281973130b ./gcc/ada/s-pack35.adb ! 1809798291b ./gcc/ada/s-pack35.ads ! 2919537463b ./gcc/ada/s-pack36.adb ! 351813371b ./gcc/ada/s-pack36.ads ! 805395637b ./gcc/ada/s-pack37.adb ! 599995777b ./gcc/ada/s-pack37.ads ! 340451484b ./gcc/ada/s-pack38.adb ! 3979878575b ./gcc/ada/s-pack38.ads ! 2657636169b ./gcc/ada/s-pack39.adb ! 15144126b ./gcc/ada/s-pack39.ads ! 4010823844b ./gcc/ada/s-pack40.adb ! 3740404514b ./gcc/ada/s-pack40.ads ! 4258197765b ./gcc/ada/s-pack41.adb ! 695615884b ./gcc/ada/s-pack41.ads ! 3507039985b ./gcc/ada/s-pack42.adb ! 1898188040b ./gcc/ada/s-pack42.ads ! 2175202874b ./gcc/ada/s-pack43.adb ! 1634345118b ./gcc/ada/s-pack43.ads ! 2468523022b ./gcc/ada/s-pack44.adb ! 1513029943b ./gcc/ada/s-pack44.ads ! 85917563b ./gcc/ada/s-pack45.adb ! 3108930472b ./gcc/ada/s-pack45.ads ! 2906378843b ./gcc/ada/s-pack46.adb ! 4126738205b ./gcc/ada/s-pack46.ads ! 2037839940b ./gcc/ada/s-pack47.adb ! 4048741050b ./gcc/ada/s-pack47.ads ! 393587184b ./gcc/ada/s-pack48.adb ! 205068617b ./gcc/ada/s-pack48.ads ! 3609193400b ./gcc/ada/s-pack49.adb ! 3530998661b ./gcc/ada/s-pack49.ads ! 4021261232b ./gcc/ada/s-pack50.adb ! 3146757315b ./gcc/ada/s-pack50.ads ! 713214051b ./gcc/ada/s-pack51.adb ! 1205907954b ./gcc/ada/s-pack51.ads ! 3518426597b ./gcc/ada/s-pack52.adb ! 341422825b ./gcc/ada/s-pack52.ads ! 1458229084b ./gcc/ada/s-pack53.adb ! 268226784b ./gcc/ada/s-pack53.ads ! 2476568346b ./gcc/ada/s-pack54.adb ! 1062387414b ./gcc/ada/s-pack54.ads ! 3528640029b ./gcc/ada/s-pack55.adb ! 3621286870b ./gcc/ada/s-pack55.ads ! 2911113551b ./gcc/ada/s-pack56.adb ! 2424617212b ./gcc/ada/s-pack56.ads ! 2923086114b ./gcc/ada/s-pack57.adb ! 2680427204b ./gcc/ada/s-pack57.ads ! 399141604b ./gcc/ada/s-pack58.adb ! 1766106792b ./gcc/ada/s-pack58.ads ! 5493470b ./gcc/ada/s-pack59.adb ! 3168809979b ./gcc/ada/s-pack59.ads ! 4000306828b ./gcc/ada/s-pack60.adb ! 336164064b ./gcc/ada/s-pack60.ads ! 2284291464b ./gcc/ada/s-pack61.adb ! 4099645808b ./gcc/ada/s-pack61.ads ! 3497437401b ./gcc/ada/s-pack62.adb ! 3151983306b ./gcc/ada/s-pack62.ads ! 4098851511b ./gcc/ada/s-pack63.adb ! 3158818914b ./gcc/ada/s-pack63.ads ! 4185842302b ./gcc/ada/s-parame.adb ! 1016134734b ./gcc/ada/s-parame.ads ! 1616379944b ./gcc/ada/s-parint.adb ! 93334734b ./gcc/ada/s-parint.ads ! 985076593b ./gcc/ada/s-pooglo.adb ! 3631327025b ./gcc/ada/s-pooglo.ads ! 2411088466b ./gcc/ada/s-pooloc.adb ! 1220335642b ./gcc/ada/s-pooloc.ads ! 1276581093b ./gcc/ada/s-poosiz.adb ! 2771854951b ./gcc/ada/s-poosiz.ads ! 2369419157b ./gcc/ada/s-powtab.ads ! 3261788857b ./gcc/ada/sprint.adb ! 1590570499b ./gcc/ada/sprint.ads ! 4071092937b ./gcc/ada/s-proinf.adb ! 416511513b ./gcc/ada/s-proinf.ads ! 2266850977b ./gcc/ada/s-rpc.adb ! 4275658188b ./gcc/ada/s-rpc.ads ! 3513640423b ./gcc/ada/s-scaval.ads ! 2621428416b ./gcc/ada/s-secsta.adb ! 2345034983b ./gcc/ada/s-secsta.ads ! 4240948929b ./gcc/ada/s-sequio.adb ! 382868367b ./gcc/ada/s-sequio.ads ! 3744646875b ./gcc/ada/s-shasto.adb ! 3750666269b ./gcc/ada/s-shasto.ads ! 2184182802b ./gcc/ada/s-soflin.adb ! 4106853306b ./gcc/ada/s-soflin.ads ! 2959161428b ./gcc/ada/s-sopco3.adb ! 104891649b ./gcc/ada/s-sopco3.ads ! 4175442594b ./gcc/ada/s-sopco4.adb ! 3936975251b ./gcc/ada/s-sopco4.ads ! 291408130b ./gcc/ada/s-sopco5.adb ! 812118675b ./gcc/ada/s-sopco5.ads ! 1796793007b ./gcc/ada/s-stache.adb ! 2789527219b ./gcc/ada/s-stache.ads ! 1537964372b ./gcc/ada/s-stalib.adb ! 3115651505b ./gcc/ada/s-stalib.ads ! 432471810b ./gcc/ada/s-stoele.adb ! 1360919545b ./gcc/ada/s-stoele.ads ! 2052345399b ./gcc/ada/s-stopoo.ads ! 1633760278b ./gcc/ada/s-stratt.adb ! 1417791298b ./gcc/ada/s-stratt.ads ! 1686965279b ./gcc/ada/s-strops.adb ! 4252576344b ./gcc/ada/s-strops.ads ! 2532586131b ./gcc/ada/s-taasde.adb ! 2453532957b ./gcc/ada/s-taasde.ads ! 828130019b ./gcc/ada/s-tadeca.adb ! 1076421306b ./gcc/ada/s-tadeca.ads ! 1301221686b ./gcc/ada/s-tadert.adb ! 789036441b ./gcc/ada/s-tadert.ads ! 630027435b ./gcc/ada/s-taenca.adb ! 2587539578b ./gcc/ada/s-taenca.ads ! 4203205869b ./gcc/ada/stand.adb ! 3916070949b ./gcc/ada/stand.ads ! 2632590584b ./gcc/ada/s-taprob.adb ! 4128031181b ./gcc/ada/s-taprob.ads ! 1400440071b ./gcc/ada/s-taprop.ads ! 177921966b ./gcc/ada/s-tarest.adb ! 4066847638b ./gcc/ada/s-tarest.ads ! 1991438887b ./gcc/ada/s-tasdeb.adb ! 2613803021b ./gcc/ada/s-tasdeb.ads ! 4020918264b ./gcc/ada/s-tasinf.adb ! 1668935870b ./gcc/ada/s-tasinf.ads ! 2945140891b ./gcc/ada/s-tasini.adb ! 334920681b ./gcc/ada/s-tasini.ads ! 1584664889b ./gcc/ada/s-taskin.adb ! 1712940961b ./gcc/ada/s-taskin.ads ! 1111738188b ./gcc/ada/s-tasque.adb ! 3925582077b ./gcc/ada/s-tasque.ads ! 3253689117b ./gcc/ada/s-tasren.adb ! 3585675949b ./gcc/ada/s-tasren.ads ! 639180081b ./gcc/ada/s-tasres.ads ! 2506382509b ./gcc/ada/s-tassta.adb ! 1308608849b ./gcc/ada/s-tassta.ads ! 2198255554b ./gcc/ada/s-tasuti.adb ! 1251170994b ./gcc/ada/s-tasuti.ads ! 2438615219b ./gcc/ada/s-tataat.adb ! 2752485611b ./gcc/ada/s-tataat.ads ! 3146825506b ./gcc/ada/s-tpinop.adb ! 2392114437b ./gcc/ada/s-tpinop.ads ! 1630989423b ./gcc/ada/s-tpoben.adb ! 2974774482b ./gcc/ada/s-tpoben.ads ! 576942612b ./gcc/ada/s-tpobop.adb ! 348329523b ./gcc/ada/s-tpobop.ads ! 4078482581b ./gcc/ada/s-tposen.adb ! 583641471b ./gcc/ada/s-tposen.ads ! 1726319339b ./gcc/ada/s-traceb.adb ! 2819123084b ./gcc/ada/s-traceb.ads ! 3088644110b ./gcc/ada/stringt.adb ! 3489928984b ./gcc/ada/stringt.ads ! 115966881b ./gcc/ada/stringt.h ! 1519917575b ./gcc/ada/style.adb ! 2363652095b ./gcc/ada/style.ads ! 941550211b ./gcc/ada/stylesw.adb ! 300221687b ./gcc/ada/stylesw.ads ! 2238856213b ./gcc/ada/s-unstyp.ads ! 383705502b ./gcc/ada/s-vaflop.adb ! 3525840106b ./gcc/ada/s-vaflop.ads ! 3777456120b ./gcc/ada/s-valboo.adb ! 823783850b ./gcc/ada/s-valboo.ads ! 2182323653b ./gcc/ada/s-valcha.adb ! 3984994262b ./gcc/ada/s-valcha.ads ! 2486462063b ./gcc/ada/s-valdec.adb ! 3078507172b ./gcc/ada/s-valdec.ads ! 4035209494b ./gcc/ada/s-valenu.adb ! 3348402059b ./gcc/ada/s-valenu.ads ! 3233347202b ./gcc/ada/s-valint.adb ! 809353895b ./gcc/ada/s-valint.ads ! 1624092680b ./gcc/ada/s-vallld.adb ! 2769897228b ./gcc/ada/s-vallld.ads ! 3744656291b ./gcc/ada/s-vallli.adb ! 3279109387b ./gcc/ada/s-vallli.ads ! 1459947133b ./gcc/ada/s-valllu.adb ! 585018696b ./gcc/ada/s-valllu.ads ! 764594178b ./gcc/ada/s-valrea.adb ! 1720102121b ./gcc/ada/s-valrea.ads ! 532716097b ./gcc/ada/s-valuns.adb ! 1244197250b ./gcc/ada/s-valuns.ads ! 852079584b ./gcc/ada/s-valuti.adb ! 738175561b ./gcc/ada/s-valuti.ads ! 8578713b ./gcc/ada/s-valwch.adb ! 1511491362b ./gcc/ada/s-valwch.ads ! 2493998789b ./gcc/ada/s-vercon.adb ! 76755328b ./gcc/ada/s-vercon.ads ! 4202237657b ./gcc/ada/s-vmexta.adb ! 4131737075b ./gcc/ada/s-vmexta.ads ! 3071200887b ./gcc/ada/s-wchcnv.adb ! 4248746072b ./gcc/ada/s-wchcnv.ads ! 1113131496b ./gcc/ada/s-wchcon.ads ! 13946560b ./gcc/ada/s-wchjis.adb ! 2260481846b ./gcc/ada/s-wchjis.ads ! 1448393887b ./gcc/ada/s-wchstw.adb ! 1559813388b ./gcc/ada/s-wchstw.ads ! 3747078028b ./gcc/ada/s-wchwts.adb ! 3218956526b ./gcc/ada/s-wchwts.ads ! 2111277990b ./gcc/ada/s-widboo.adb ! 3292895124b ./gcc/ada/s-widboo.ads ! 1836742483b ./gcc/ada/s-widcha.adb ! 3867876244b ./gcc/ada/s-widcha.ads ! 1034537775b ./gcc/ada/s-widenu.adb ! 847743074b ./gcc/ada/s-widenu.ads ! 1845615445b ./gcc/ada/s-widlli.adb ! 2364218579b ./gcc/ada/s-widlli.ads ! 248576485b ./gcc/ada/s-widllu.adb ! 2854689029b ./gcc/ada/s-widllu.ads ! 2511495067b ./gcc/ada/s-widwch.adb ! 3401797070b ./gcc/ada/s-widwch.ads ! 27582413b ./gcc/ada/switch.adb ! 1598342278b ./gcc/ada/switch.ads ! 3528609494b ./gcc/ada/s-wwdcha.adb ! 586285622b ./gcc/ada/s-wwdcha.ads ! 2810367382b ./gcc/ada/s-wwdenu.adb ! 4200440603b ./gcc/ada/s-wwdenu.ads ! 1874741026b ./gcc/ada/s-wwdwch.adb ! 3321650370b ./gcc/ada/s-wwdwch.ads ! 1364437604b ./gcc/ada/sysdep.c ! 1119298405b ./gcc/ada/system.ads ! 3848197813b ./gcc/ada/table.adb ! 3687590744b ./gcc/ada/table.ads ! 1109639380b ./gcc/ada/targparm.adb ! 1825795995b ./gcc/ada/targparm.ads ! 1202794553b ./gcc/ada/targtyps.c ! 1356345663b ./gcc/ada/tbuild.adb ! 1858742811b ./gcc/ada/tbuild.ads ! 75780159b ./gcc/ada/text_io.ads ! 360994578b ./gcc/ada/tracebak.c ! 2571992805b ./gcc/ada/trans.c ! 1966951634b ./gcc/ada/tree_gen.adb ! 3159530633b ./gcc/ada/tree_gen.ads ! 2530728701b ./gcc/ada/tree_in.adb ! 2711628455b ./gcc/ada/tree_in.ads ! 838934979b ./gcc/ada/tree_io.adb ! 752324076b ./gcc/ada/tree_io.ads ! 3859295957b ./gcc/ada/treepr.adb ! 2456186617b ./gcc/ada/treepr.ads ! 1911577299b ./gcc/ada/treeprs.ads ! 1276512398b ./gcc/ada/treeprs.adt ! 4263888685b ./gcc/ada/ttypef.ads ! 3874309715b ./gcc/ada/ttypes.ads ! 1369397640b ./gcc/ada/types.adb ! 4024957899b ./gcc/ada/types.ads ! 1402875333b ./gcc/ada/types.h ! 981400444b ./gcc/ada/ug_words ! 259981028b ./gcc/ada/uintp.adb ! 1501595103b ./gcc/ada/uintp.ads ! 2726784320b ./gcc/ada/uintp.h ! 1168757069b ./gcc/ada/uname.adb ! 3887027289b ./gcc/ada/uname.ads ! 2682664197b ./gcc/ada/unchconv.ads ! 906261077b ./gcc/ada/unchdeal.ads ! 1146813221b ./gcc/ada/urealp.adb ! 3019307290b ./gcc/ada/urealp.ads ! 2098404567b ./gcc/ada/urealp.h ! 3991257953b ./gcc/ada/usage.adb ! 876425940b ./gcc/ada/usage.ads ! 3098691088b ./gcc/ada/utils2.c ! 35898743b ./gcc/ada/utils.c ! 2206670030b ./gcc/ada/validsw.adb ! 2813759673b ./gcc/ada/validsw.ads ! 3183449725b ./gcc/ada/widechar.adb ! 1939896965b ./gcc/ada/widechar.ads ! 4107540872b ./gcc/ada/xeinfo.adb ! 208322693b ./gcc/ada/xgnatug.adb ! 5897144b ./gcc/ada/xnmake.adb ! 3670337130b ./gcc/ada/xref_lib.adb ! 4020137442b ./gcc/ada/xref_lib.ads ! 3378631066b ./gcc/ada/xr_tabls.adb ! 3872099053b ./gcc/ada/xr_tabls.ads ! 1408035530b ./gcc/ada/xsinfo.adb ! 1441973181b ./gcc/ada/xsnames.adb ! 579454790b ./gcc/ada/xtreeprs.adb ! 2770972828b ./gcc/alias.c ! 2321578096b ./gcc/attribs.c ! 2742514573b ./gcc/basic-block.h ! 2091758289b ./gcc/bb-reorder.c ! 770293842b ./gcc/bitmap.c ! 477755928b ./gcc/bitmap.h ! 540939972b ./gcc/builtin-attrs.def ! 2448248820b ./gcc/builtins.c ! 2454689977b ./gcc/builtins.def ! 3361511841b ./gcc/builtin-types.def ! 4196427447b ./gcc/caller-save.c ! 2566522078b ./gcc/calls.c ! 420541423b ./gcc/c-aux-info.c ! 3751821271b ./gcc/c-common.c ! 2096270511b ./gcc/c-common.def ! 3951106812b ./gcc/c-common.h ! 1317742909b ./gcc/c-convert.c ! 1710902902b ./gcc/c-decl.c ! 487899684b ./gcc/c-errors.c ! 181278358b ./gcc/cfganal.c ! 1964748151b ./gcc/cfgbuild.c ! 2908854975b ./gcc/cfg.c ! 1773279654b ./gcc/cfgcleanup.c ! 1219429812b ./gcc/cfglayout.c ! 1858346793b ./gcc/cfglayout.h ! 3236894730b ./gcc/cfgloop.c ! 217788288b ./gcc/cfgrtl.c ! 2243757094b ./gcc/c-format.c ! 1767627081b ./gcc/ChangeLog ! 1398127668b ./gcc/ChangeLog.0 ! 2827765101b ./gcc/ChangeLog.1 ! 1199055802b ./gcc/ChangeLog.2 ! 2924329613b ./gcc/ChangeLog.3 ! 164761891b ./gcc/ChangeLog.4 ! 1481898300b ./gcc/ChangeLog.5 ! 2613464808b ./gcc/ChangeLog.6 ! 3235050590b ./gcc/ChangeLog.lib ! 3226058006b ./gcc/c-lang.c ! 863126810b ./gcc/c-lex.c ! 835686435b ./gcc/c-lex.h ! 2161943665b ./gcc/c-objc-common.c ! 2900417621b ./gcc/collect2.c ! 653998699b ./gcc/collect2.h ! 3252208879b ./gcc/combine.c ! 4122382037b ./gcc/conditions.h ! 525821919b ./gcc/config/1750a/1750a.c ! 3294042887b ./gcc/config/1750a/1750a.h ! 3089740443b ./gcc/config/1750a/1750a.md ! 3356933371b ./gcc/config/1750a/1750a-protos.h 2477730384b ./gcc/config/1750a/ms1750.inc ! 4248885141b ./gcc/config/a29k/a29k.c ! 1800382809b ./gcc/config/a29k/a29k.h ! 1270050344b ./gcc/config/a29k/a29k.md ! 820188974b ./gcc/config/a29k/a29k-protos.h ! 1083391793b ./gcc/config/a29k/rtems.h ! 696851807b ./gcc/config/a29k/t-a29kbare ! 2585873370b ./gcc/config/a29k/t-vx29k ! 1544651385b ./gcc/config/a29k/unix.h 3167234709b ./gcc/config/a29k/vx29k.h ! 3915788506b ./gcc/config/alpha/alpha32.h ! 1431837126b ./gcc/config/alpha/alpha.c ! 3757921164b ./gcc/config/alpha/alpha.h ! 1076515812b ./gcc/config/alpha/alpha-interix.h ! 2405259347b ./gcc/config/alpha/alpha.md ! 4085134134b ./gcc/config/alpha/alpha-protos.h ! 1407988137b ./gcc/config/alpha/crtfastmath.c ! 1226305108b ./gcc/config/alpha/elf.h ! 611485563b ./gcc/config/alpha/freebsd.h ! 2998860143b ./gcc/config/alpha/lib1funcs.asm 1763018017b ./gcc/config/alpha/linux-ecoff.h ! 37916839b ./gcc/config/alpha/linux-elf.h ! 3901756355b ./gcc/config/alpha/linux.h ! 255541272b ./gcc/config/alpha/netbsd.h 156117508b ./gcc/config/alpha/openbsd.h 1792826440b ./gcc/config/alpha/osf12.h 3744703656b ./gcc/config/alpha/osf2or3.h 2776242025b ./gcc/config/alpha/osf5.h ! 2313475776b ./gcc/config/alpha/osf.h 1190572001b ./gcc/config/alpha/qrnnd.asm 2672344824b ./gcc/config/alpha/t-alpha ! 1949254250b ./gcc/config/alpha/t-crtfm 3084092578b ./gcc/config/alpha/t-ieee ! 3884780449b ./gcc/config/alpha/t-interix ! 4208963116b ./gcc/config/alpha/t-osf4 ! 1191509594b ./gcc/config/alpha/t-unicosmk ! 1694999122b ./gcc/config/alpha/t-vms ! 3342100479b ./gcc/config/alpha/t-vms64 ! 742053938b ./gcc/config/alpha/unicosmk.h 2817356982b ./gcc/config/alpha/va_list.h ! 2920918174b ./gcc/config/alpha/vms64.h ! 3118436884b ./gcc/config/alpha/vms-cc.c ! 2784080362b ./gcc/config/alpha/vms-crt0-64.c ! 92885822b ./gcc/config/alpha/vms-crt0.c ! 3572749067b ./gcc/config/alpha/vms-dwarf2.asm ! 3031921581b ./gcc/config/alpha/vms-dwarf2eh.asm ! 923619902b ./gcc/config/alpha/vms.h ! 2333112991b ./gcc/config/alpha/vms-ld.c ! 664285780b ./gcc/config/alpha/vms-psxcrt0-64.c ! 1499899963b ./gcc/config/alpha/vms-psxcrt0.c ! 1497613985b ./gcc/config/alpha/vms_tramp.asm 985208816b ./gcc/config/alpha/vxworks.h ! 1631226706b ./gcc/config/alpha/xm-alpha-interix.h ! 2164887597b ./gcc/config/alpha/xm-vms64.h ! 1813891070b ./gcc/config/alpha/xm-vms.h ! 1756604664b ./gcc/config/alpha/x-vms 662120966b ./gcc/config/aoutos.h ! 3700366341b ./gcc/config/arc/arc.c ! 2300457202b ./gcc/config/arc/arc.h ! 2348200471b ./gcc/config/arc/arc.md ! 1916903876b ./gcc/config/arc/arc-protos.h 2242623574b ./gcc/config/arc/initfini.c ! 4224412506b ./gcc/config/arc/lib1funcs.asm ! 2135297695b ./gcc/config/arc/t-arc ! 2672724137b ./gcc/config/arm/aof.h ! 754089758b ./gcc/config/arm/aout.h ! 1254732439b ./gcc/config/arm/arm.c ! 2476043642b ./gcc/config/arm/arm.h ! 1691247413b ./gcc/config/arm/arm.md ! 2355527864b ./gcc/config/arm/arm-protos.h 478450204b ./gcc/config/arm/arm-wince-pe.h ! 531784060b ./gcc/config/arm/coff.h ! 3968543328b ./gcc/config/arm/conix-elf.h ! 2901180917b ./gcc/config/arm/crti.asm ! 2281461647b ./gcc/config/arm/crtn.asm ! 4281626291b ./gcc/config/arm/ecos-elf.h ! 3143079784b ./gcc/config/arm/elf.h ! 1564985594b ./gcc/config/arm/freebsd.h ! 3355567723b ./gcc/config/arm/lib1funcs.asm ! 1770982396b ./gcc/config/arm/linux-elf.h ! 2890656711b ./gcc/config/arm/linux-gas.h ! 3050794234b ./gcc/config/arm/netbsd.h ! 3970353953b ./gcc/config/arm/pe.c ! 581802105b ./gcc/config/arm/pe.h 2885119589b ./gcc/config/arm/README-interworking ! 2367073445b ./gcc/config/arm/riscix1-1.h ! 3068021852b ./gcc/config/arm/riscix.h ! 3648344095b ./gcc/config/arm/rix-gas.h ! 3970258112b ./gcc/config/arm/rtems-elf.h ! 3108552778b ./gcc/config/arm/semiaof.h ! 2419470702b ./gcc/config/arm/semi.h ! 1676744073b ./gcc/config/arm/strongarm-coff.h ! 2572947596b ./gcc/config/arm/strongarm-elf.h ! 4084147202b ./gcc/config/arm/strongarm-pe.h ! 1225127474b ./gcc/config/arm/t-arm-aout ! 1432575844b ./gcc/config/arm/t-arm-coff ! 3068297759b ./gcc/config/arm/t-arm-elf ! 2454749767b ./gcc/config/arm/t-linux ! 849756574b ./gcc/config/arm/t-netbsd ! 1171746127b ./gcc/config/arm/t-pe ! 3531598494b ./gcc/config/arm/t-riscix ! 1572194130b ./gcc/config/arm/t-semi ! 3145229981b ./gcc/config/arm/t-strongarm-coff ! 358695252b ./gcc/config/arm/t-strongarm-elf ! 2389193190b ./gcc/config/arm/t-strongarm-pe ! 3941249553b ./gcc/config/arm/t-xscale-coff ! 4238855457b ./gcc/config/arm/t-xscale-elf ! 3331622085b ./gcc/config/arm/uclinux-elf.h ! 169320906b ./gcc/config/arm/unknown-elf.h ! 3664576446b ./gcc/config/arm/unknown-elf-oabi.h ! 4086326841b ./gcc/config/arm/vxarm.h ! 2632983487b ./gcc/config/arm/xscale-coff.h ! 2366951282b ./gcc/config/arm/xscale-elf.h ! 2098839590b ./gcc/config/avr/avr.c ! 3254145940b ./gcc/config/avr/avr.h ! 3802932744b ./gcc/config/avr/avr.md ! 567694740b ./gcc/config/avr/avr-protos.h 1853285406b ./gcc/config/avr/libgcc.S ! 3040444126b ./gcc/config/avr/t-avr ! 487323483b ./gcc/config/c4x/c4x.c ! 1272252374b ./gcc/config/c4x/c4x-c.c ! 4149345821b ./gcc/config/c4x/c4x.h ! 2240751934b ./gcc/config/c4x/c4x.md ! 4161503224b ./gcc/config/c4x/c4x-protos.h ! 1473970252b ./gcc/config/c4x/libgcc.S ! 3126919437b ./gcc/config/c4x/rtems.h ! 1848402932b ./gcc/config/c4x/t-c4x ! 2216814105b ./gcc/config/chorus.h ! 2064231953b ./gcc/config/clipper/clipper.c ! 402683259b ./gcc/config/clipper/clipper.h ! 28615455b ./gcc/config/clipper/clipper.md ! 3381447812b ./gcc/config/clipper/clipper-protos.h ! 319322158b ./gcc/config/clipper/clix.h ! 3677219838b ./gcc/config/convex/convex.c ! 597637161b ./gcc/config/convex/convex.h ! 462857671b ./gcc/config/convex/convex.md 2941206894b ./gcc/config/convex/convex-protos.h 384964748b ./gcc/config/convex/fixinc.convex ! 2576905081b ./gcc/config/convex/proto.h ! 2561716856b ./gcc/config/cris/aout.h ! 2531765543b ./gcc/config/cris/arit.c ! 4228128527b ./gcc/config/cris/cris_abi_symbol.c ! 646584466b ./gcc/config/cris/cris.c ! 2454901271b ./gcc/config/cris/cris.h ! 1485586916b ./gcc/config/cris/cris.md ! 2623962717b ./gcc/config/cris/cris-protos.h ! 431791288b ./gcc/config/cris/linux.h ! 907689569b ./gcc/config/cris/mulsi3.asm ! 45521295b ./gcc/config/cris/t-aout ! 874481385b ./gcc/config/cris/t-cris ! 2080407099b ./gcc/config/cris/t-elfmulti ! 1112852607b ./gcc/config/cris/t-linux 3834330727b ./gcc/config/d30v/abi ! 349365251b ./gcc/config/d30v/d30v.c ! 5113978b ./gcc/config/d30v/d30v.h ! 3430463305b ./gcc/config/d30v/d30v.md ! 3966607018b ./gcc/config/d30v/d30v-protos.h ! 1512688016b ./gcc/config/d30v/libgcc1.asm ! 2120255627b ./gcc/config/d30v/t-d30v ! 2411222628b ./gcc/config/darwin.c ! 2176622144b ./gcc/config/darwin-c.c ! 2796646825b ./gcc/config/darwin.h ! 1469496228b ./gcc/config/darwin-protos.h 2118339989b ./gcc/config/dbxcoff.h ! 2470898471b ./gcc/config/dbxelf.h 186717254b ./gcc/config/dbx.h 4083711028b ./gcc/config/divmod.c ! 1337751109b ./gcc/config/dsp16xx/dsp16xx.c ! 2267196660b ./gcc/config/dsp16xx/dsp16xx.h ! 273715633b ./gcc/config/dsp16xx/dsp16xx.md ! 3807169411b ./gcc/config/dsp16xx/dsp16xx-protos.h ! 1123139357b ./gcc/config/elfos.h ! 2583638380b ./gcc/config/elxsi/elxsi.c ! 1846962457b ./gcc/config/elxsi/elxsi.h 1729380348b ./gcc/config/elxsi/elxsi.md 1622698848b ./gcc/config/elxsi/elxsi-protos.h 2520622557b ./gcc/config/float-c4x.h 36687624b ./gcc/config/float-i128.h 2077185169b ./gcc/config/float-i32.h *************** *** 498,1647 **** 466751418b ./gcc/config/float-i64.h 2601002892b ./gcc/config/float-m68k.h 1084189067b ./gcc/config/float-sh.h ! 3472567657b ./gcc/config/float-sparc.h 766947524b ./gcc/config/float-vax.h ! 729288938b ./gcc/config/fp-bit.c ! 1972802898b ./gcc/config/fp-bit.h 2304723625b ./gcc/config/fr30/crti.asm 2025473533b ./gcc/config/fr30/crtn.asm ! 2199465289b ./gcc/config/fr30/fr30.c ! 3208063212b ./gcc/config/fr30/fr30.h ! 1177384981b ./gcc/config/fr30/fr30.md 4061935745b ./gcc/config/fr30/fr30-protos.h ! 4269327141b ./gcc/config/fr30/lib1funcs.asm ! 3501217985b ./gcc/config/fr30/t-fr30 ! 4080807226b ./gcc/config/fr30/xm-fr30.h 3857422654b ./gcc/config/freebsd3.h 2210711654b ./gcc/config/freebsd4.h 1531797731b ./gcc/config/freebsd5.h 3920011053b ./gcc/config/freebsd6.h ! 2727094490b ./gcc/config/freebsd.h 3532526787b ./gcc/config/freebsd-nthr.h ! 728976648b ./gcc/config.gcc 3236013445b ./gcc/config/gnu.h ! 1556064359b ./gcc/config/gofast.h 1315260558b ./gcc/config.guess ! 1813884828b ./gcc/config/h8300/fixunssfsi.c ! 1256626199b ./gcc/config/h8300/h8300.c ! 305883268b ./gcc/config/h8300/h8300.h ! 2195131597b ./gcc/config/h8300/h8300.md ! 1075730847b ./gcc/config/h8300/h8300-protos.h ! 2095012315b ./gcc/config/h8300/lib1funcs.asm ! 620192398b ./gcc/config/h8300/rtems.h ! 3200589132b ./gcc/config/h8300/t-h8300 ! 2653746305b ./gcc/config/h8300/xm-h8300.h ! 1521645304b ./gcc/config/i370/i370.c ! 3443388489b ./gcc/config/i370/i370.h ! 1224714656b ./gcc/config/i370/i370.md ! 2148254440b ./gcc/config/i370/i370-protos.h ! 2153433605b ./gcc/config/i370/linux.h 1044154955b ./gcc/config/i370/mvs.h 3630097967b ./gcc/config/i370/oe.h 2187046003b ./gcc/config/i370/README ! 1901725621b ./gcc/config/i370/t-i370 ! 3635350950b ./gcc/config/i370/t-linux ! 1901725621b ./gcc/config/i370/t-mvs ! 455680690b ./gcc/config/i370/t-oe ! 1736309817b ./gcc/config/i370/xm-i370.h ! 2268479239b ./gcc/config/i370/xm-linux.h ! 2340439047b ./gcc/config/i370/xm-mvs.h ! 527480929b ./gcc/config/i370/xm-oe.h ! 3337174716b ./gcc/config/i370/x-oe ! 1386558586b ./gcc/config/i386/386bsd.h ! 1705548602b ./gcc/config/i386/aix386.h ! 687188794b ./gcc/config/i386/aix386ng.h ! 2339833047b ./gcc/config/i386/att.h ! 1207024061b ./gcc/config/i386/beos-elf.h ! 4294967295b ./gcc/config/i386/beos-pe.h ! 1571822316b ./gcc/config/i386/bsd386.h ! 3537332016b ./gcc/config/i386/bsd.h ! 3189299534b ./gcc/config/i386/chorus.h ! 3010444208b ./gcc/config/i386/config-nt.sed ! 3207315249b ./gcc/config/i386/crtdll.h ! 3943560803b ./gcc/config/i386/cygwin.asm ! 1405926987b ./gcc/config/i386/cygwin.h ! 2274149541b ./gcc/config/i386/dgux.c ! 3055146333b ./gcc/config/i386/dgux.h ! 1380903219b ./gcc/config/i386/djgpp.h ! 1570943831b ./gcc/config/i386/djgpp-rtems.h ! 301916446b ./gcc/config/i386/freebsd-aout.h ! 3878874905b ./gcc/config/i386/freebsd.h ! 1632002228b ./gcc/config/i386/gas.h 4266288971b ./gcc/config/i386/gmon-sol2.c ! 4261347788b ./gcc/config/i386/gnu.h 166489147b ./gcc/config/i386/gstabs.h 1725036574b ./gcc/config/i386/i386-aout.h ! 4176448367b ./gcc/config/i386/i386.c ! 3714536309b ./gcc/config/i386/i386-coff.h ! 2138609268b ./gcc/config/i386/i386elf.h ! 663612626b ./gcc/config/i386/i386.h ! 1565496826b ./gcc/config/i386/i386-interix.h ! 3961207690b ./gcc/config/i386/i386.md ! 1433006975b ./gcc/config/i386/i386-protos.h ! 2044371014b ./gcc/config/i386/interix.c ! 3165191846b ./gcc/config/i386/isccoff.h ! 231729323b ./gcc/config/i386/iscdbx.h ! 3245573839b ./gcc/config/i386/isc.h ! 1178509338b ./gcc/config/i386/linux-aout.h ! 3197331965b ./gcc/config/i386/linux.h ! 44798988b ./gcc/config/i386/linux-oldld.h ! 358216381b ./gcc/config/i386/lynx.h 83628421b ./gcc/config/i386/lynx-ng.h ! 2128828944b ./gcc/config/i386/mach.h ! 1019451099b ./gcc/config/i386/mingw32.h 3361545892b ./gcc/config/i386/moss.h ! 1469074318b ./gcc/config/i386/netbsd-elf.h ! 2913497186b ./gcc/config/i386/netbsd.h ! 4211562640b ./gcc/config/i386/netware.h ! 1904082784b ./gcc/config/i386/next.h ! 2316910802b ./gcc/config/i386/openbsd.h ! 407886013b ./gcc/config/i386/os2.h 2999570618b ./gcc/config/i386/osf1-ci.asm 2303041887b ./gcc/config/i386/osf1-cn.asm ! 3380650348b ./gcc/config/i386/osf1elfgdb.h ! 3100631212b ./gcc/config/i386/osf1elf.h 3128347339b ./gcc/config/i386/osfelf.h ! 2747691184b ./gcc/config/i386/osfrose.h ! 1380319377b ./gcc/config/i386/perform.h ! 1864644214b ./gcc/config/i386/ptx4-i.h ! 3148528024b ./gcc/config/i386/rtemself.h ! 682740562b ./gcc/config/i386/rtems.h ! 1608140239b ./gcc/config/i386/sco4dbx.h ! 3672544994b ./gcc/config/i386/sco4.h ! 4073321814b ./gcc/config/i386/sco5.h ! 544707575b ./gcc/config/i386/scodbx.h ! 1655058580b ./gcc/config/i386/sco.h 3439848366b ./gcc/config/i386/seq2-sysv3.h ! 2260828739b ./gcc/config/i386/seq-gas.h ! 2485377693b ./gcc/config/i386/seq-sysv3.h ! 1023540524b ./gcc/config/i386/sequent.h 425477609b ./gcc/config/i386/sol2-c1.asm 1565106149b ./gcc/config/i386/sol2-ci.asm 4008317666b ./gcc/config/i386/sol2-cn.asm 3870175252b ./gcc/config/i386/sol2gas.h 2045686122b ./gcc/config/i386/sol2-gc1.asm ! 4286221804b ./gcc/config/i386/sol2.h ! 1745602951b ./gcc/config/i386/sun386.h 4009223163b ./gcc/config/i386/sun.h ! 3556123079b ./gcc/config/i386/svr3dbx.h ! 1522134145b ./gcc/config/i386/svr3gas.h 3846064431b ./gcc/config/i386/svr3.ifile 1523044645b ./gcc/config/i386/svr3z.ifile ! 3840602724b ./gcc/config/i386/sysv3.h ! 2362380022b ./gcc/config/i386/sysv4.h ! 2273562527b ./gcc/config/i386/sysv5.h ! 2307182909b ./gcc/config/i386/t-beos 2437302600b ./gcc/config/i386/t-crtpic 2246944266b ./gcc/config/i386/t-crtstuff ! 1293787568b ./gcc/config/i386/t-cygwin ! 2849008235b ./gcc/config/i386/t-dgux ! 482628910b ./gcc/config/i386/t-djgpp ! 2949021345b ./gcc/config/i386/t-i386bare ! 2652294844b ./gcc/config/i386/t-i386elf ! 1933662227b ./gcc/config/i386/t-interix 4056914306b ./gcc/config/i386/t-mingw32 ! 1294101962b ./gcc/config/i386/t-netware ! 3437455964b ./gcc/config/i386/t-next 709063989b ./gcc/config/i386/t-openbsd 1186749595b ./gcc/config/i386/t-osf 1520459705b ./gcc/config/i386/t-osf1elf 422823583b ./gcc/config/i386/t-rtems-i386 ! 1749021412b ./gcc/config/i386/t-sco5 ! 1729674677b ./gcc/config/i386/t-sco5gas ! 1755709893b ./gcc/config/i386/t-sol2 3128852740b ./gcc/config/i386/t-svr3dbx 2977164768b ./gcc/config/i386/t-udk 1023926647b ./gcc/config/i386/t-uwin ! 482628910b ./gcc/config/i386/t-vsta ! 3516825605b ./gcc/config/i386/t-winnt ! 2348843648b ./gcc/config/i386/udk.h ! 3077301906b ./gcc/config/i386/unix.h ! 2149794869b ./gcc/config/i386/uwin.asm ! 4091738264b ./gcc/config/i386/uwin.h 1148022895b ./gcc/config/i386/v3gas.h ! 3137911939b ./gcc/config/i386/vsta.h ! 1838786343b ./gcc/config/i386/vxi386.h ! 1179440303b ./gcc/config/i386/win32.h ! 2717440508b ./gcc/config/i386/winnt.c ! 2774178891b ./gcc/config/i386/win-nt.h ! 3474740080b ./gcc/config/i386/x-aix ! 2826951782b ./gcc/config/i386/x-beos ! 237037873b ./gcc/config/i386/x-cygwin ! 745721423b ./gcc/config/i386/x-dgux ! 428447728b ./gcc/config/i386/x-djgpp ! 4175788105b ./gcc/config/i386/x-isc ! 1331677327b ./gcc/config/i386/x-isc3 ! 4294967295b ./gcc/config/i386/xm-aix.h ! 258398432b ./gcc/config/i386/xm-beos.h ! 4250296631b ./gcc/config/i386/xm-bsd386.h ! 3316565872b ./gcc/config/i386/xm-cygwin.h ! 2515568374b ./gcc/config/i386/xm-dgux.h ! 3338746302b ./gcc/config/i386/xm-djgpp.h ! 928373880b ./gcc/config/i386/xm-dos.h ! 2787520086b ./gcc/config/i386/xm-freebsd.h ! 2990995265b ./gcc/config/i386/xm-gnu.h ! 3707398841b ./gcc/config/i386/xm-i386.h ! 256026568b ./gcc/config/i386/xm-i386-interix.h ! 3899420493b ./gcc/config/i386/xm-isc.h ! 3801083047b ./gcc/config/i386/xm-linux.h ! 2830832587b ./gcc/config/i386/xm-lynx.h ! 1247035955b ./gcc/config/i386/xm-mingw32.h ! 3487707401b ./gcc/config/i386/xm-next.h ! 1218154368b ./gcc/config/i386/xm-openbsd.h ! 3280114153b ./gcc/config/i386/xm-os2.h ! 412013975b ./gcc/config/i386/xm-osf1elf.h ! 4294967295b ./gcc/config/i386/xm-osf.h ! 3701039150b ./gcc/config/i386/xm-sco5.h ! 2987620009b ./gcc/config/i386/xm-sco.h ! 1933101345b ./gcc/config/i386/xm-sun.h ! 1551498273b ./gcc/config/i386/xm-sysv3.h ! 3083140420b ./gcc/config/i386/xm-sysv4.h 1404515293b ./gcc/config/i386/xm-vsta.h - 2531169178b ./gcc/config/i386/xm-winnt.h - 1612131512b ./gcc/config/i386/x-ncr3000 - 2391387330b ./gcc/config/i386/x-next - 4245915723b ./gcc/config/i386/x-osf1elf - 42414247b ./gcc/config/i386/x-osfrose - 2268838873b ./gcc/config/i386/x-sco - 2587996311b ./gcc/config/i386/x-sco4 - 1611173336b ./gcc/config/i386/x-sco5 - 1036967407b ./gcc/config/i386/x-sysv3 - 1769627032b ./gcc/config/i386/x-vsta 2229503331b ./gcc/config/i860/bsd-gas.h ! 1738425418b ./gcc/config/i860/bsd.h ! 2669911021b ./gcc/config/i860/fx2800.h ! 4208976970b ./gcc/config/i860/i860.c ! 2888349862b ./gcc/config/i860/i860.h ! 277648315b ./gcc/config/i860/i860.md ! 3924983389b ./gcc/config/i860/i860-protos.h 3806449409b ./gcc/config/i860/mach.h ! 39310468b ./gcc/config/i860/paragon.h ! 3462285793b ./gcc/config/i860/sysv3.h ! 3530547748b ./gcc/config/i860/sysv4.h 269024431b ./gcc/config/i860/t-fx2800 1835110220b ./gcc/config/i860/varargs.asm ! 3969131493b ./gcc/config/i860/x-fx2800 ! 994204119b ./gcc/config/i860/xm-fx2800.h ! 2908243215b ./gcc/config/i860/xm-i860.h ! 878205655b ./gcc/config/i860/x-sysv3 ! 3510916973b ./gcc/config/i860/x-sysv4 ! 3134927219b ./gcc/config/i960/i960.c ! 257666960b ./gcc/config/i960/i960-coff.h ! 2679588497b ./gcc/config/i960/i960.h ! 302073607b ./gcc/config/i960/i960.md ! 969698165b ./gcc/config/i960/i960-protos.h ! 3489902325b ./gcc/config/i960/rtems.h ! 649423259b ./gcc/config/i960/t-960bare ! 1707964932b ./gcc/config/i960/t-vxworks960 ! 3983766548b ./gcc/config/i960/vx960-coff.h 1895495318b ./gcc/config/i960/vx960.h ! 651274697b ./gcc/config/i960/xm-i960.h ! 876649532b ./gcc/config/ia64/crtbegin.asm ! 1855415332b ./gcc/config/ia64/crtend.asm ! 2915180026b ./gcc/config/ia64/elf.h ! 2257162614b ./gcc/config/ia64/fde-glibc.c ! 1924751760b ./gcc/config/ia64/freebsd.h ! 3662079824b ./gcc/config/ia64/hpux.h ! 1190921893b ./gcc/config/ia64/ia64.c ! 4239981362b ./gcc/config/ia64/ia64.h ! 3051569292b ./gcc/config/ia64/ia64intrin.h ! 2221221481b ./gcc/config/ia64/ia64.md ! 353921496b ./gcc/config/ia64/ia64-protos.h 3488320870b ./gcc/config/ia64/lib1funcs.asm 2361471520b ./gcc/config/ia64/libgcc-ia64.ver ! 2524176459b ./gcc/config/ia64/linux.h ! 3617523204b ./gcc/config/ia64/sysv4.h 2148782144b ./gcc/config/ia64/t-glibc ! 4031706241b ./gcc/config/ia64/t-hpux ! 1418203225b ./gcc/config/ia64/t-ia64 ! 1607496940b ./gcc/config/ia64/unwind-ia64.c 2355075302b ./gcc/config/ia64/unwind-ia64.h ! 2902007620b ./gcc/config/ia64/xm-ia64.h ! 523349083b ./gcc/config.in ! 860516247b ./gcc/config/interix.h 3774321010b ./gcc/config/libgcc-glibc.ver 679171109b ./gcc/config/libgloss.h 265766519b ./gcc/config/linux-aout.h ! 3399875116b ./gcc/config/linux.h ! 3226158869b ./gcc/config/lynx.h 2466014571b ./gcc/config/lynx-ng.h 2460604231b ./gcc/config/m32r/initfini.c ! 617990517b ./gcc/config/m32r/m32r.c ! 856646429b ./gcc/config/m32r/m32r.h ! 304509363b ./gcc/config/m32r/m32r.md ! 1669506687b ./gcc/config/m32r/m32r-protos.h ! 699324061b ./gcc/config/m32r/t-m32r ! 505110414b ./gcc/config/m32r/xm-m32r.h ! 2629267148b ./gcc/config/m68hc11/larith.asm ! 3659628307b ./gcc/config/m68hc11/m68hc11.c 3563849705b ./gcc/config/m68hc11/m68hc11-crt0.S ! 313616667b ./gcc/config/m68hc11/m68hc11.h ! 2352306031b ./gcc/config/m68hc11/m68hc11.md ! 321124732b ./gcc/config/m68hc11/m68hc11-protos.h ! 3915866468b ./gcc/config/m68hc11/m68hc12.h ! 3238866738b ./gcc/config/m68hc11/t-m68hc11-gas ! 1569281943b ./gcc/config/m68hc11/xm-m68hc11.h ! 620759368b ./gcc/config/m68k/3b1g.h ! 9689423b ./gcc/config/m68k/3b1.h ! 147639204b ./gcc/config/m68k/altos3068.h ! 4059345438b ./gcc/config/m68k/amix.h ! 4135298771b ./gcc/config/m68k/apollo68.h ! 3247437832b ./gcc/config/m68k/atari.h ! 2292458327b ./gcc/config/m68k/auxas.h 1360990051b ./gcc/config/m68k/aux-crt1.c ! 189508427b ./gcc/config/m68k/aux-crt2.asm ! 118144777b ./gcc/config/m68k/aux-crtn.asm ! 4111538126b ./gcc/config/m68k/aux-exit.c ! 573708090b ./gcc/config/m68k/auxgas.h 922288695b ./gcc/config/m68k/auxgld.h ! 827041276b ./gcc/config/m68k/a-ux.h 2685530303b ./gcc/config/m68k/auxld.h 2164284366b ./gcc/config/m68k/aux-low.gld ! 54783867b ./gcc/config/m68k/aux-mcount.c ! 140000703b ./gcc/config/m68k/ccur-GAS.h ! 3009141914b ./gcc/config/m68k/coff.h ! 1805389994b ./gcc/config/m68k/crds.h 1173190318b ./gcc/config/m68k/crti.s 4181788584b ./gcc/config/m68k/crtn.s 3642339847b ./gcc/config/m68k/ctix.h 2770446786b ./gcc/config/m68k/dpx2cdbx.h ! 1165167071b ./gcc/config/m68k/dpx2g.h ! 1622202553b ./gcc/config/m68k/dpx2.h 2216029984b ./gcc/config/m68k/dpx2.ifile 2518640661b ./gcc/config/m68k/fpgnulib.c 136981270b ./gcc/config/m68k/hp2bsd.h 4247760656b ./gcc/config/m68k/hp310g.h ! 1601304406b ./gcc/config/m68k/hp310.h 3645108527b ./gcc/config/m68k/hp320g.h ! 2054091463b ./gcc/config/m68k/hp320.h 3605366445b ./gcc/config/m68k/hp3bsd44.h 942415927b ./gcc/config/m68k/hp3bsd.h 2864047424b ./gcc/config/m68k/hpux7.h ! 3924901323b ./gcc/config/m68k/isi.h 3484500543b ./gcc/config/m68k/isi-nfp.h ! 2393398106b ./gcc/config/m68k/lb1sf68.asm ! 1977334448b ./gcc/config/m68k/linux-aout.h ! 3697403275b ./gcc/config/m68k/linux.h ! 3139650275b ./gcc/config/m68k/lynx.h 162996909b ./gcc/config/m68k/lynx-ng.h ! 810585616b ./gcc/config/m68k/m68020-elf.h 388266224b ./gcc/config/m68k/m68k-aout.h ! 2929757075b ./gcc/config/m68k/m68k.c 3882947461b ./gcc/config/m68k/m68k-coff.h ! 342213590b ./gcc/config/m68k/m68kelf.h ! 3506718024b ./gcc/config/m68k/m68kemb.h ! 1778306871b ./gcc/config/m68k/m68k.h ! 2207471422b ./gcc/config/m68k/m68k.md 3855098247b ./gcc/config/m68k/m68k-none.h ! 3399395319b ./gcc/config/m68k/m68k-protos.h ! 2991007317b ./gcc/config/m68k/m68k-psos.h ! 4069130220b ./gcc/config/m68k/m68kv4.h 1902334218b ./gcc/config/m68k/mot3300-crt0.S ! 1194682689b ./gcc/config/m68k/mot3300.h 4250921257b ./gcc/config/m68k/mot3300Mcrt0.S ! 3236765119b ./gcc/config/m68k/netbsd.h 2598124463b ./gcc/config/m68k/news3gas.h 895337217b ./gcc/config/m68k/news3.h 2724290690b ./gcc/config/m68k/newsgas.h ! 2294289203b ./gcc/config/m68k/news.h ! 3157936907b ./gcc/config/m68k/next21.h ! 1143602367b ./gcc/config/m68k/next.h 615787625b ./gcc/config/m68k/openbsd.h ! 1533226086b ./gcc/config/m68k/pbb.h ! 7332679b ./gcc/config/m68k/plexus.h ! 4049405611b ./gcc/config/m68k/rtemself.h ! 1149584472b ./gcc/config/m68k/rtems.h ! 1017884931b ./gcc/config/m68k/sgs.h 844744081b ./gcc/config/m68k/sun2.h ! 34831333b ./gcc/config/m68k/sun2o4.h ! 3710614278b ./gcc/config/m68k/sun3.h 3724598161b ./gcc/config/m68k/sun3mach.h 864417723b ./gcc/config/m68k/sun3n3.h 120628064b ./gcc/config/m68k/sun3n.h 2298299278b ./gcc/config/m68k/sun3o3.h ! 2211291190b ./gcc/config/m68k/t-aux 1499818164b ./gcc/config/m68k/t-crtstuff 1601671577b ./gcc/config/m68k/t-linux 1601671577b ./gcc/config/m68k/t-linux-aout ! 1477854374b ./gcc/config/m68k/t-lynx ! 1502100187b ./gcc/config/m68k/t-m68kbare ! 1431188037b ./gcc/config/m68k/t-m68kelf 2312371323b ./gcc/config/m68k/t-mot3300 ! 2539908773b ./gcc/config/m68k/t-mot3300-gald ! 2414955585b ./gcc/config/m68k/t-mot3300-gas 2294965883b ./gcc/config/m68k/t-mot3300-gld ! 249897538b ./gcc/config/m68k/t-next 3937644742b ./gcc/config/m68k/t-openbsd ! 3067739314b ./gcc/config/m68k/tower-as.h ! 1341630096b ./gcc/config/m68k/tower.h ! 2967405432b ./gcc/config/m68k/t-vxworks68 ! 1259318702b ./gcc/config/m68k/vxm68k.h ! 878205655b ./gcc/config/m68k/x-alloca-c ! 4096453725b ./gcc/config/m68k/x-amix ! 2350764792b ./gcc/config/m68k/x-apollo68 ! 3846969125b ./gcc/config/m68k/x-ccur ! 1762620255b ./gcc/config/m68k/x-crds ! 1170864157b ./gcc/config/m68k/x-dpx2 ! 1240963087b ./gcc/config/m68k/x-hp2bsd ! 2545656064b ./gcc/config/m68k/x-hp320 ! 1331165359b ./gcc/config/m68k/x-hp320g ! 2280950471b ./gcc/config/m68k/xm-3b1.h ! 832557662b ./gcc/config/m68k/xm-altos3068.h ! 3373121608b ./gcc/config/m68k/xm-amix.h ! 1707292853b ./gcc/config/m68k/xm-atari.h ! 3022058994b ./gcc/config/m68k/xm-aux.h ! 732179410b ./gcc/config/m68k/xm-crds.h ! 3752973929b ./gcc/config/m68k/xm-hp320.h ! 1829956157b ./gcc/config/m68k/xm-linux.h ! 3417287401b ./gcc/config/m68k/xm-lynx.h ! 1083678153b ./gcc/config/m68k/xm-m68k.h ! 7692108b ./gcc/config/m68k/xm-m68kv.h ! 2316649618b ./gcc/config/m68k/xm-mot3300.h ! 3626208384b ./gcc/config/m68k/xm-next.h ! 2596148490b ./gcc/config/m68k/xm-openbsd.h ! 3404524005b ./gcc/config/m68k/x-mot3300 ! 3170569156b ./gcc/config/m68k/x-mot3300-gas ! 4033365544b ./gcc/config/m68k/xm-plexus.h ! 3728255284b ./gcc/config/m68k/xm-sun3.h ! 1429673665b ./gcc/config/m68k/xm-tower.h ! 805482102b ./gcc/config/m68k/x-next ! 263693140b ./gcc/config/m68k/x-tower 3877749712b ./gcc/config/m88k/aout-dbx.h ! 896466153b ./gcc/config/m88k/dguxbcs.h ! 2323023553b ./gcc/config/m88k/dgux.h 3298414170b ./gcc/config/m88k/dgux.ld 1645309935b ./gcc/config/m88k/dolph.h 1558967450b ./gcc/config/m88k/dolphin.ld 27544745b ./gcc/config/m88k/luna.h 1097971558b ./gcc/config/m88k/m88k-aout.h ! 309112331b ./gcc/config/m88k/m88k.c 929158884b ./gcc/config/m88k/m88k-coff.h ! 2649261708b ./gcc/config/m88k/m88k.h ! 4230260951b ./gcc/config/m88k/m88k.md 2372325319b ./gcc/config/m88k/m88k-move.sh ! 1897660913b ./gcc/config/m88k/m88k-protos.h 3182883703b ./gcc/config/m88k/openbsd.h ! 1705222007b ./gcc/config/m88k/sysv3.h ! 3714563049b ./gcc/config/m88k/sysv4.h ! 4060219622b ./gcc/config/m88k/t-bug ! 3683187732b ./gcc/config/m88k/t-dgux ! 4032605278b ./gcc/config/m88k/t-dguxbcs ! 1298890126b ./gcc/config/m88k/t-dgux-gas 3899935761b ./gcc/config/m88k/tekXD88.h 173867895b ./gcc/config/m88k/tekXD88.ld ! 3651584303b ./gcc/config/m88k/t-luna ! 270918189b ./gcc/config/m88k/t-luna-gas ! 4060219622b ./gcc/config/m88k/t-m88k ! 2588594092b ./gcc/config/m88k/t-m88k-gas ! 3886447115b ./gcc/config/m88k/t-sysv4 ! 3129976968b ./gcc/config/m88k/x-dgux ! 487572801b ./gcc/config/m88k/x-dguxbcs ! 3447263593b ./gcc/config/m88k/x-dolph ! 3848712418b ./gcc/config/m88k/xm-m88k.h ! 460094438b ./gcc/config/m88k/xm-openbsd.h ! 1950046494b ./gcc/config/m88k/xm-sysv3.h ! 432446889b ./gcc/config/m88k/x-sysv3 ! 2614770624b ./gcc/config/m88k/x-sysv4 ! 2762110114b ./gcc/config/m88k/x-tekXD88 4057462442b ./gcc/config/mcore/crti.asm 3021138350b ./gcc/config/mcore/crtn.asm ! 3584440754b ./gcc/config/mcore/gfloat.h ! 189449918b ./gcc/config/mcore/lib1.asm ! 3933605945b ./gcc/config/mcore/mcore.c ! 2224334508b ./gcc/config/mcore/mcore-elf.h ! 3405305692b ./gcc/config/mcore/mcore.h ! 1989463738b ./gcc/config/mcore/mcore.md ! 1370914404b ./gcc/config/mcore/mcore-pe.h ! 1248573747b ./gcc/config/mcore/mcore-protos.h ! 3379126391b ./gcc/config/mcore/t-mcore ! 2347131269b ./gcc/config/mcore/t-mcore-pe ! 722345926b ./gcc/config/mcore/xm-mcore.h ! 1409995103b ./gcc/config/mips/abi64.h 1865003947b ./gcc/config/mips/bsd-4.h ! 327819195b ./gcc/config/mips/bsd-5.h 930726788b ./gcc/config/mips/cross64.h 3317633569b ./gcc/config/mips/dec-bsd.h 4118299381b ./gcc/config/mips/dec-osf1.h 1910637049b ./gcc/config/mips/ecoff.h 3551974985b ./gcc/config/mips/ecoffl.h ! 3410980773b ./gcc/config/mips/elf64.h ! 3363346895b ./gcc/config/mips/elf.h 1175169006b ./gcc/config/mips/elfl64.h 4118432176b ./gcc/config/mips/elfl.h 452497001b ./gcc/config/mips/elflorion.h 4210328521b ./gcc/config/mips/elforion.h - 1831506294b ./gcc/config/mips/gnu.h 4009674128b ./gcc/config/mips/iris3.h 3161243087b ./gcc/config/mips/iris4.h 2743944992b ./gcc/config/mips/iris4loser.h ! 3875094584b ./gcc/config/mips/iris5gas.h ! 1274309488b ./gcc/config/mips/iris5.h ! 2607381948b ./gcc/config/mips/iris6gld.h ! 1945245383b ./gcc/config/mips/iris6.h ! 4258956066b ./gcc/config/mips/irix6-libc-compat.c ! 943017591b ./gcc/config/mips/linux.h ! 3291569396b ./gcc/config/mips/mips16.S ! 1257153673b ./gcc/config/mips/mips-5.h ! 3526180852b ./gcc/config/mips/mips.c ! 3509654835b ./gcc/config/mips/mips.h ! 2840790028b ./gcc/config/mips/mips.md ! 3874587589b ./gcc/config/mips/mips-protos.h ! 789509308b ./gcc/config/mips/netbsd.h 1685635385b ./gcc/config/mips/news4.h 3776131275b ./gcc/config/mips/news5.h 807792414b ./gcc/config/mips/nws3250v4.h 391873849b ./gcc/config/mips/openbsd-be.h ! 2720997319b ./gcc/config/mips/openbsd.h ! 1925895122b ./gcc/config/mips/osfrose.h ! 2754808236b ./gcc/config/mips/r3900.h ! 431539617b ./gcc/config/mips/rtems64.h ! 3389933311b ./gcc/config/mips/rtems.h ! 17103592b ./gcc/config/mips/sni-gas.h ! 4135108666b ./gcc/config/mips/sni-svr4.h 3194520655b ./gcc/config/mips/svr3-4.h ! 3016169780b ./gcc/config/mips/svr3-5.h 2860455593b ./gcc/config/mips/svr4-4.h ! 154927040b ./gcc/config/mips/svr4-5.h ! 3657782110b ./gcc/config/mips/svr4-t.h ! 4000764442b ./gcc/config/mips/t-bsd ! 2520217533b ./gcc/config/mips/t-bsd-gas ! 3490072647b ./gcc/config/mips/t-cross64 ! 3126392274b ./gcc/config/mips/t-ecoff ! 3254374069b ./gcc/config/mips/t-elf ! 991348745b ./gcc/config/mips/t-iris6 ! 491943219b ./gcc/config/mips/t-mips ! 491943219b ./gcc/config/mips/t-mips-gas ! 491943219b ./gcc/config/mips/t-osfrose ! 2108757837b ./gcc/config/mips/t-r3900 ! 3415770488b ./gcc/config/mips/t-svr3 ! 3458446551b ./gcc/config/mips/t-svr3-gas ! 701999388b ./gcc/config/mips/t-svr4 ! 745314483b ./gcc/config/mips/t-svr4-gas ! 1286021302b ./gcc/config/mips/t-ultrix ! 4209872658b ./gcc/config/mips/ultrix.h ! 1323257609b ./gcc/config/mips/vxworks.h ! 1093662493b ./gcc/config/mips/x-dec-osf1 ! 3056692151b ./gcc/config/mips/x-iris ! 490324532b ./gcc/config/mips/x-iris3 ! 1174670635b ./gcc/config/mips/x-iris6 ! 1433979648b ./gcc/config/mips/x-mips ! 2375550941b ./gcc/config/mips/xm-iris3.h ! 3197006010b ./gcc/config/mips/xm-iris4.h ! 3440296848b ./gcc/config/mips/xm-iris5.h ! 1766959056b ./gcc/config/mips/xm-iris6.h ! 1673409130b ./gcc/config/mips/xm-mips.h ! 1980789011b ./gcc/config/mips/xm-nws3250v4.h ! 1855747780b ./gcc/config/mips/xm-openbsd.h ! 1007989765b ./gcc/config/mips/xm-sysv.h ! 2162788729b ./gcc/config/mips/x-netbsd ! 3800034921b ./gcc/config/mips/x-nws3250v4 ! 2621150460b ./gcc/config/mips/x-osfrose ! 20691378b ./gcc/config/mips/x-sni-svr4 ! 2028727147b ./gcc/config/mips/x-sony ! 823835751b ./gcc/config/mips/x-sysv ! 1093662493b ./gcc/config/mips/x-ultrix ! 3469336328b ./gcc/config/mn10200/lib1funcs.asm ! 1832400411b ./gcc/config/mn10200/mn10200.c ! 504726353b ./gcc/config/mn10200/mn10200.h ! 2020602808b ./gcc/config/mn10200/mn10200.md 4029388596b ./gcc/config/mn10200/mn10200-protos.h ! 4135411984b ./gcc/config/mn10200/t-mn10200 ! 4023523482b ./gcc/config/mn10200/xm-mn10200.h ! 430494059b ./gcc/config/mn10300/mn10300.c ! 3776593069b ./gcc/config/mn10300/mn10300.h ! 1524167958b ./gcc/config/mn10300/mn10300.md ! 2666234742b ./gcc/config/mn10300/mn10300-protos.h ! 1566257346b ./gcc/config/mn10300/t-mn10300 ! 2016681354b ./gcc/config/mn10300/xm-mn10300.h ! 694182602b ./gcc/config/netbsd.h ! 3731699790b ./gcc/config/netware.h ! 3987001747b ./gcc/config/nextstep21.h ! 2025151529b ./gcc/config/nextstep.c ! 288451612b ./gcc/config/nextstep.h ! 2904637345b ./gcc/config/ns32k/encore.h ! 1181784917b ./gcc/config/ns32k/merlin.h ! 1928103774b ./gcc/config/ns32k/netbsd.h ! 4108102992b ./gcc/config/ns32k/ns32k.c ! 302317598b ./gcc/config/ns32k/ns32k.h ! 313521040b ./gcc/config/ns32k/ns32k.md ! 2700620052b ./gcc/config/ns32k/ns32k-protos.h 3974800750b ./gcc/config/ns32k/pc532.h 104963810b ./gcc/config/ns32k/pc532-mach.h 1249730935b ./gcc/config/ns32k/pc532-min.h 1951152204b ./gcc/config/ns32k/sequent.h ! 607705625b ./gcc/config/ns32k/tek6000.h 906085514b ./gcc/config/ns32k/tek6100.h 3417438490b ./gcc/config/ns32k/tek6200.h ! 1809546469b ./gcc/config/ns32k/xm-netbsd.h ! 4010302330b ./gcc/config/ns32k/xm-ns32k.h ! 876936455b ./gcc/config/ns32k/xm-pc532-min.h ! 92576225b ./gcc/config/openbsd.h ! 3202962647b ./gcc/config/pa/elf.h 1435423353b ./gcc/config/pa/lib1funcs.asm ! 1377366310b ./gcc/config/pa/lib2funcs.asm ! 3718309114b ./gcc/config/pa/long_double.h ! 2140547228b ./gcc/config/pa/pa32-regs.h ! 3327464349b ./gcc/config/pa/pa-64.h ! 2547741530b ./gcc/config/pa/pa64-regs.h 3813586304b ./gcc/config/pa/pa64-start.h ! 2192823609b ./gcc/config/pa/pa.c ! 3698457987b ./gcc/config/pa/pa-gas.h ! 3128848414b ./gcc/config/pa/pa.h 2070570431b ./gcc/config/pa/pa-hiux.h ! 2956159534b ./gcc/config/pa/pa-hpux10.h ! 3040387073b ./gcc/config/pa/pa-hpux11.h 3949639215b ./gcc/config/pa/pa-hpux7.h 3124002443b ./gcc/config/pa/pa-hpux9.h 2419055394b ./gcc/config/pa/pa-hpux.h ! 2513444607b ./gcc/config/pa/pa-linux.h ! 615799232b ./gcc/config/pa/pa.md 3618123809b ./gcc/config/pa/pa-oldas.h 3108768032b ./gcc/config/pa/pa-osf.h ! 4221067313b ./gcc/config/pa/pa-pro-end.h ! 4153090749b ./gcc/config/pa/pa-protos.h ! 663503870b ./gcc/config/pa/quadlib.c ! 3833697026b ./gcc/config/pa/rtems.h ! 2111204326b ./gcc/config/pa/som.h 1117935804b ./gcc/config/pa/t-dce-thr ! 2462903148b ./gcc/config/pa/t-linux ! 278862279b ./gcc/config/pa/t-pa ! 3083244471b ./gcc/config/pa/t-pa64 ! 3036316357b ./gcc/config/pa/t-pro ! 494824938b ./gcc/config/pa/xm-linux.h ! 3102727626b ./gcc/config/pa/xm-pa64hpux.h ! 1548653553b ./gcc/config/pa/xm-pa.h ! 3466869507b ./gcc/config/pa/xm-pahpux.h ! 3295109842b ./gcc/config/pa/xm-papro.h ! 2143426929b ./gcc/config/pa/x-pa ! 2463719567b ./gcc/config/pa/x-pa-hpux ! 775920628b ./gcc/config/pa/x-pa-mpeix ! 587733214b ./gcc/config/pdp11/2bsd.h ! 291151382b ./gcc/config/pdp11/pdp11.c ! 1439657814b ./gcc/config/pdp11/pdp11.h ! 3903603775b ./gcc/config/pdp11/pdp11.md ! 413805869b ./gcc/config/pdp11/pdp11-protos.h ! 2225205890b ./gcc/config/pdp11/t-pdp11 ! 3333372393b ./gcc/config/pdp11/xm-pdp11.h 1460345365b ./gcc/config/pj/lib1funcs.S ! 3046646453b ./gcc/config/pj/linux.h ! 1936305807b ./gcc/config/pj/pj.c ! 3681246753b ./gcc/config/pj/pj.h 140528803b ./gcc/config/pj/pjl.h 4115579495b ./gcc/config/pj/pj.md ! 265929447b ./gcc/config/pj/pj-protos.h ! 2464670362b ./gcc/config/pj/t-pj ! 1057903673b ./gcc/config/pj/xm-pj.h ! 2590529303b ./gcc/config/psos.h ! 2157520811b ./gcc/config/ptx4.h 3917072699b ./gcc/config/README ! 1817084019b ./gcc/config/romp/romp.c ! 634432064b ./gcc/config/romp/romp.h ! 4084750743b ./gcc/config/romp/romp.md ! 3255530558b ./gcc/config/romp/romp-protos.h ! 2880448747b ./gcc/config/romp/x-mach ! 3533377098b ./gcc/config/romp/xm-romp.h ! 2947038505b ./gcc/config/romp/x-romp ! 1519682134b ./gcc/config/rs6000/aix31.h 2741987967b ./gcc/config/rs6000/aix3newas.h 1702283472b ./gcc/config/rs6000/aix41.h ! 1022329456b ./gcc/config/rs6000/aix43.h ! 4060481809b ./gcc/config/rs6000/aix51.h ! 1942268621b ./gcc/config/rs6000/aix.h ! 1754617408b ./gcc/config/rs6000/beos.h ! 1335068300b ./gcc/config/rs6000/chorus.h 318728404b ./gcc/config/rs6000/eabiaix.h ! 1354799879b ./gcc/config/rs6000/eabi.asm 383867253b ./gcc/config/rs6000/eabi-ci.asm 3758141774b ./gcc/config/rs6000/eabi-cn.asm 4071223554b ./gcc/config/rs6000/eabi.h 1258445797b ./gcc/config/rs6000/eabisim.h ! 3762602113b ./gcc/config/rs6000/linux.h ! 3919710780b ./gcc/config/rs6000/lynx.h ! 1717863199b ./gcc/config/rs6000/mach.h 1820610909b ./gcc/config/rs6000/milli.exp ! 2451456339b ./gcc/config/rs6000/netbsd.h ! 2333747099b ./gcc/config/rs6000/rs6000.c ! 3718915863b ./gcc/config/rs6000/rs6000.h ! 119791080b ./gcc/config/rs6000/rs6000.md ! 911358933b ./gcc/config/rs6000/rs6000-protos.h ! 832384455b ./gcc/config/rs6000/rtems.h ! 554206256b ./gcc/config/rs6000/sol2.h ! 4210977084b ./gcc/config/rs6000/sol-c0.c ! 1695016479b ./gcc/config/rs6000/sol-ci.asm ! 1927994766b ./gcc/config/rs6000/sol-cn.asm ! 2116302544b ./gcc/config/rs6000/sysv4.h 3795959522b ./gcc/config/rs6000/sysv4le.h ! 2145328627b ./gcc/config/rs6000/t-aix43 ! 3185730278b ./gcc/config/rs6000/t-beos ! 2787085020b ./gcc/config/rs6000/t-newas ! 1092060430b ./gcc/config/rs6000/t-ppccomm 365048301b ./gcc/config/rs6000/t-ppcgas ! 2289036871b ./gcc/config/rs6000/t-ppcos ! 3674297686b ./gcc/config/rs6000/tramp.asm ! 1709081807b ./gcc/config/rs6000/t-rs6000 ! 2434716614b ./gcc/config/rs6000/t-xnewas ! 3817285156b ./gcc/config/rs6000/t-xrs6000 301220496b ./gcc/config/rs6000/vxppc.h ! 489691602b ./gcc/config/rs6000/x-aix31 ! 764225160b ./gcc/config/rs6000/x-aix41 ! 1379999620b ./gcc/config/rs6000/x-beos ! 4218694447b ./gcc/config/rs6000/x-cygwin ! 1490560839b ./gcc/config/rs6000/x-darwin ! 176036232b ./gcc/config/rs6000/x-lynx ! 1119193055b ./gcc/config/rs6000/x-mach ! 189397500b ./gcc/config/rs6000/xm-beos.h ! 3277280620b ./gcc/config/rs6000/xm-cygwin.h ! 3437564598b ./gcc/config/rs6000/xm-darwin.h ! 1387161565b ./gcc/config/rs6000/xm-lynx.h ! 2311049093b ./gcc/config/rs6000/xm-mach.h ! 3676444310b ./gcc/config/rs6000/xm-rs6000.h ! 1451552425b ./gcc/config/rs6000/xm-sysv4.h ! 443641603b ./gcc/config/rs6000/x-rs6000 ! 1861191694b ./gcc/config/rs6000/x-sysv4 ! 3895058198b ./gcc/config/rtems.h 3390348482b ./gcc/config/s390/fixdfdi.h ! 854043548b ./gcc/config/s390/linux64.h ! 3456013752b ./gcc/config/s390/linux.h ! 905524531b ./gcc/config/s390/s390.c ! 1921139648b ./gcc/config/s390/s390.h ! 2766214118b ./gcc/config/s390/s390.md ! 2354442092b ./gcc/config/s390/s390-protos.h ! 2251075592b ./gcc/config/s390/t-linux ! 843019701b ./gcc/config/s390/xm-s390.h ! 1662767015b ./gcc/config/s390/xm-s390x.h ! 3830594407b ./gcc/config/sh/crt1.asm ! 3104307092b ./gcc/config/sh/crti.asm ! 4096536650b ./gcc/config/sh/crtn.asm ! 2257671377b ./gcc/config/sh/elf.h ! 4104777346b ./gcc/config/sh/lib1funcs.asm ! 1661322756b ./gcc/config/sh/linux.h ! 468868402b ./gcc/config/sh/rtemself.h ! 3574223471b ./gcc/config/sh/rtems.h ! 1358956373b ./gcc/config/sh/sh.c ! 2550458827b ./gcc/config/sh/sh.h ! 3029807708b ./gcc/config/sh/sh.md ! 2070405666b ./gcc/config/sh/sh-protos.h 3555569248b ./gcc/config/sh/t-elf ! 1641673146b ./gcc/config/sh/t-linux ! 2851505400b ./gcc/config/sh/t-sh ! 289833097b ./gcc/config/sh/xm-sh.h ! 3809429298b ./gcc/config/sparc/aout.h ! 2582541021b ./gcc/config/sparc/bsd.h ! 2769051540b ./gcc/config/sparc/chorus.h ! 1585403564b ./gcc/config/sparc/elf.h ! 1888361739b ./gcc/config/sparc/gmon-sol2.c 3746795534b ./gcc/config/sparc/hal.h ! 671302508b ./gcc/config/sparc/lb1spc.asm ! 892412538b ./gcc/config/sparc/lb1spl.asm ! 253698474b ./gcc/config/sparc/linux64.h ! 1118226000b ./gcc/config/sparc/linux-aout.h ! 3074747325b ./gcc/config/sparc/linux.h ! 2098369347b ./gcc/config/sparc/litecoff.h ! 243249983b ./gcc/config/sparc/liteelf.h ! 2041477542b ./gcc/config/sparc/lite.h ! 4076055548b ./gcc/config/sparc/lynx.h ! 3970301731b ./gcc/config/sparc/lynx-ng.h ! 4227191410b ./gcc/config/sparc/netbsd.h ! 3588896900b ./gcc/config/sparc/openbsd.h ! 2511482476b ./gcc/config/sparc/pbd.h ! 4086396014b ./gcc/config/sparc/rtemself.h ! 3581419004b ./gcc/config/sparc/rtems.h ! 2777436121b ./gcc/config/sparc/sol2-64.h 1463670426b ./gcc/config/sparc/sol2-c1.asm 3288323690b ./gcc/config/sparc/sol2-ci.asm 2004370404b ./gcc/config/sparc/sol2-cn.asm 2182182911b ./gcc/config/sparc/sol2-g1.asm ! 543360898b ./gcc/config/sparc/sol2.h ! 3014519214b ./gcc/config/sparc/sol2-sld-64.h ! 407406271b ./gcc/config/sparc/sol2-sld.h ! 2789031481b ./gcc/config/sparc/sp64-aout.h ! 2782172898b ./gcc/config/sparc/sp64-elf.h ! 4047109349b ./gcc/config/sparc/sp86x-aout.h ! 1145591187b ./gcc/config/sparc/sp86x-elf.h ! 389502879b ./gcc/config/sparc/sparc.c ! 3958437963b ./gcc/config/sparc/sparc.h ! 4024754094b ./gcc/config/sparc/sparc.md ! 3513225184b ./gcc/config/sparc/sparc-protos.h ! 113090716b ./gcc/config/sparc/splet.h ! 3035335612b ./gcc/config/sparc/sun4gas.h ! 3455486806b ./gcc/config/sparc/sun4o3.h ! 1385844182b ./gcc/config/sparc/sunos4.h ! 2829739904b ./gcc/config/sparc/sysv4.h ! 3200804020b ./gcc/config/sparc/t-chorus-elf ! 2616142394b ./gcc/config/sparc/t-elf 1582758741b ./gcc/config/sparc/t-halos ! 3089985973b ./gcc/config/sparc/t-linux64 1190032917b ./gcc/config/sparc/t-openbsd ! 1215655583b ./gcc/config/sparc/t-sol2 ! 3160382849b ./gcc/config/sparc/t-sol2-64 ! 1887691100b ./gcc/config/sparc/t-sp64 ! 3534729076b ./gcc/config/sparc/t-sp86x ! 1065472511b ./gcc/config/sparc/t-sparcbare ! 2332124527b ./gcc/config/sparc/t-sparclite ! 2939045323b ./gcc/config/sparc/t-splet ! 2014088017b ./gcc/config/sparc/t-sunos40 ! 1401640619b ./gcc/config/sparc/t-sunos41 ! 2219277944b ./gcc/config/sparc/t-vxsparc ! 3655312791b ./gcc/config/sparc/t-vxsparc64 ! 1214947507b ./gcc/config/sparc/vxsim.h ! 44327914b ./gcc/config/sparc/vxsparc64.h ! 2627970010b ./gcc/config/sparc/vxsparc.h ! 2878609946b ./gcc/config/sparc/xm-linux.h ! 2943271346b ./gcc/config/sparc/xm-lynx.h ! 1370920631b ./gcc/config/sparc/xm-openbsd.h ! 1348380296b ./gcc/config/sparc/xm-pbd.h ! 1880319471b ./gcc/config/sparc/xm-sol2.h ! 2593496306b ./gcc/config/sparc/xm-sp64.h ! 2900160321b ./gcc/config/sparc/xm-sparc.h ! 1086199292b ./gcc/config/sparc/xm-sysv4-64.h ! 3164518383b ./gcc/config/sparc/xm-sysv4.h ! 1861191694b ./gcc/config/sparc/x-sysv4 ! 319890872b ./gcc/config/svr3.h ! 2231464381b ./gcc/config/svr4.h 2749923948b ./gcc/config/t-freebsd ! 58624861b ./gcc/config/t-freebsd-thread 2512129728b ./gcc/config/t-gnu 3050012299b ./gcc/config/t-install-cpp ! 64239056b ./gcc/config/t-libc-ok 2753685882b ./gcc/config/t-libgcc-pic ! 3735725807b ./gcc/config/t-linux ! 4067850389b ./gcc/config/t-linux-aout ! 4111896717b ./gcc/config/t-linux-gnulibc1 121353396b ./gcc/config/tm-dwarf2.h ! 2573490585b ./gcc/config/t-netbsd ! 3770151057b ./gcc/config/t-openbsd 2917904648b ./gcc/config/t-openbsd-thread 2246241652b ./gcc/config/t-rtems ! 1931910305b ./gcc/config/t-slibgcc-elf-ver ! 1335194906b ./gcc/config/t-slibgcc-sld ! 182724490b ./gcc/config/t-svr4 937080303b ./gcc/config/udivmod.c 2590328114b ./gcc/config/udivmodsi4.c ! 1177591164b ./gcc/configure ! 3600082583b ./gcc/configure.frag ! 3512872634b ./gcc/configure.in 1401546799b ./gcc/config/usegas.h ! 1755103459b ./gcc/config/v850/lib1funcs.asm ! 675280324b ./gcc/config/v850/rtems.h ! 3289228637b ./gcc/config/v850/t-v850 ! 3586695901b ./gcc/config/v850/v850.c ! 2277307708b ./gcc/config/v850/v850-c.c ! 2015084960b ./gcc/config/v850/v850.h ! 2952263546b ./gcc/config/v850/v850.md ! 4194174891b ./gcc/config/v850/v850-protos.h ! 1862842141b ./gcc/config/v850/xm-v850.h ! 4077449679b ./gcc/config/vax/netbsd.h ! 341687494b ./gcc/config/vax/openbsd1.h ! 2399746971b ./gcc/config/vax/openbsd.h ! 1672593853b ./gcc/config/vax/t-openbsd ! 662711130b ./gcc/config/vax/t-vax ! 3876569436b ./gcc/config/vax/ultrix.h ! 294028470b ./gcc/config/vax/vax.c ! 2415252270b ./gcc/config/vax/vax.h ! 43686676b ./gcc/config/vax/vax.md ! 2989692327b ./gcc/config/vax/vax-protos.h ! 4028632317b ./gcc/config/vax/vaxv.h ! 3998186887b ./gcc/config/vax/vms.h ! 3568884591b ./gcc/config/vax/xm-vax.h ! 542222840b ./gcc/config/vax/xm-vaxv.h ! 3291319634b ./gcc/config/vax/xm-vms.h ! 1977189772b ./gcc/config/we32k/we32k.c ! 1369685870b ./gcc/config/we32k/we32k.h ! 2512381047b ./gcc/config/we32k/we32k.md 2514844092b ./gcc/config/we32k/we32k-protos.h ! 3464993937b ./gcc/config/we32k/xm-we32k.h ! 878205655b ./gcc/config/we32k/x-we32k ! 1670851102b ./gcc/config/x-interix ! 825269638b ./gcc/config/x-linux ! 1881475236b ./gcc/config/x-linux-aout ! 462930175b ./gcc/config/x-lynx ! 3779976015b ./gcc/config/xm-alloca.h ! 2675300859b ./gcc/config/xm-freebsd.h ! 4234308852b ./gcc/config/xm-gnu.h ! 169151355b ./gcc/config/xm-interix.h ! 3688290092b ./gcc/config/xm-linux.h ! 784810928b ./gcc/config/xm-lynx.h ! 2284065217b ./gcc/config/xm-openbsd.h ! 3697539901b ./gcc/config/xm-std32.h ! 4091214272b ./gcc/config/xm-svr3.h ! 3741840130b ./gcc/config/xm-svr4.h ! 3288074061b ./gcc/config/x-svr4 ! 3616246132b ./gcc/config/xtensa/elf.h ! 2612361409b ./gcc/config/xtensa/lib1funcs.asm 3621223618b ./gcc/config/xtensa/lib2funcs.S ! 2222146372b ./gcc/config/xtensa/linux.h ! 3673137579b ./gcc/config/xtensa/t-xtensa ! 2957239980b ./gcc/config/xtensa/xm-xtensa.h ! 1118119737b ./gcc/config/xtensa/xtensa.c ! 3646876274b ./gcc/config/xtensa/xtensa-config.h ! 4059830144b ./gcc/config/xtensa/xtensa.h ! 1071404480b ./gcc/config/xtensa/xtensa.md ! 2975401370b ./gcc/config/xtensa/xtensa-protos.h ! 3394568616b ./gcc/conflict.c ! 556313302b ./gcc/convert.c ! 4032982380b ./gcc/convert.h 2171125041b ./gcc/COPYING 508743035b ./gcc/COPYING.LIB ! 1164896329b ./gcc/c-parse.c ! 2521267304b ./gcc/c-parse.in ! 1444138297b ./gcc/c-parse.y ! 3462171967b ./gcc/cp/call.c 4115552602b ./gcc/cp/cfns.gperf 1705070232b ./gcc/cp/cfns.h ! 3962414445b ./gcc/cp/ChangeLog ! 1903584b ./gcc/cp/ChangeLog.1 ! 1881731020b ./gcc/cp/ChangeLog.2 2546444747b ./gcc/cp/ChangeLog.egcs ! 1978013841b ./gcc/cp/class.c ! 1920345452b ./gcc/cp/config-lang.in ! 3406340479b ./gcc/cp/cp-tree.def ! 3385771554b ./gcc/cp/cp-tree.h 1230086821b ./gcc/cp/.cvsignore ! 788167684b ./gcc/cp/cvt.c ! 1690588862b ./gcc/cp/decl2.c ! 3661544601b ./gcc/cp/decl.c ! 1027981985b ./gcc/cp/decl.h ! 217522872b ./gcc/cp/dump.c ! 3091430199b ./gcc/cp/errfn.c ! 3135875533b ./gcc/cp/error.c ! 374515501b ./gcc/cp/except.c ! 764912804b ./gcc/cp/expr.c ! 1673698151b ./gcc/cp/friend.c 1574667259b ./gcc/cp/g++.1 ! 958770625b ./gcc/cp/g++spec.c ! 3262826623b ./gcc/cp/init.c ! 2002469304b ./gcc/cp/lang-options.h ! 1106559236b ./gcc/cp/lang-specs.h ! 3458231555b ./gcc/cp/lex.c ! 1080237442b ./gcc/cp/lex.h ! 3271703209b ./gcc/cp/Make-lang.in ! 1021016080b ./gcc/cp/mangle.c ! 1170925025b ./gcc/cp/method.c 701335209b ./gcc/cp/mpw-config.in 4041177245b ./gcc/cp/mpw-make.sed ! 846059250b ./gcc/cp/NEWS ! 2545245613b ./gcc/cp/operators.def ! 4219135273b ./gcc/cp/optimize.c ! 348619331b ./gcc/cp/parse.c ! 4085964132b ./gcc/cp/parse.h ! 1879411084b ./gcc/cp/parse.y 1602205564b ./gcc/cppdefault.c ! 1864191136b ./gcc/cppdefault.h ! 1696803319b ./gcc/cpperror.c ! 1757467731b ./gcc/cppexp.c ! 1209278199b ./gcc/cppfiles.c ! 3904470681b ./gcc/cpphash.c ! 1641754935b ./gcc/cpphash.h ! 1376958113b ./gcc/cppinit.c ! 791416625b ./gcc/cpplex.c ! 365830801b ./gcc/cpplib.c ! 3400544410b ./gcc/cpplib.h ! 1609411692b ./gcc/cppmacro.c ! 373762755b ./gcc/cppmain.c ! 3666180672b ./gcc/cppspec.c ! 1087392378b ./gcc/cp/pt.c ! 903594734b ./gcc/cp/ptree.c ! 3529754923b ./gcc/c-pragma.c ! 2111457647b ./gcc/c-pragma.h ! 1890655336b ./gcc/cp/repo.c ! 456361741b ./gcc/cp/rtti.c ! 696207784b ./gcc/cp/search.c ! 3923373072b ./gcc/cp/semantics.c ! 1818467654b ./gcc/cp/spew.c ! 783708168b ./gcc/cp/tree.c ! 3459487995b ./gcc/cp/typeck2.c ! 2083169874b ./gcc/cp/typeck.c ! 1359529404b ./gcc/cp/xref.c ! 2903740050b ./gcc/cross-make ! 1363172067b ./gcc/crtstuff.c ! 2482075139b ./gcc/cse.c ! 1864237584b ./gcc/cselib.h ! 1462421478b ./gcc/c-semantics.c 216805921b ./gcc/cstamp-h.in ! 1365281254b ./gcc/c-tree.h ! 1632067213b ./gcc/c-typeck.c ! 1225978796b ./gcc/.cvsignore ! 458197924b ./gcc/dbxout.c ! 181061183b ./gcc/dbxout.h 1104788844b ./gcc/dbxstclass.h ! 2469057166b ./gcc/dce.c ! 984558316b ./gcc/defaults.h ! 2226328701b ./gcc/dependence.c ! 4065269356b ./gcc/diagnostic.c ! 2207352912b ./gcc/diagnostic.h ! 3078797124b ./gcc/doc/contrib.texi ! 2536828939b ./gcc/doc/cpp.1 ! 603516745b ./gcc/doc/cpp.info ! 2168457714b ./gcc/doc/cpp.info-1 ! 3244533800b ./gcc/doc/cpp.info-2 ! 1749960335b ./gcc/doc/cpp.info-3 ! 200370605b ./gcc/doc/cpp.info-4 ! 220004220b ./gcc/doc/cppinternals.info ! 1445289518b ./gcc/doc/cppinternals.texi ! 3325515262b ./gcc/doc/cpp.texi ! 176815542b ./gcc/doc/c-tree.texi ! 890851034b ./gcc/doc/.cvsignore ! 502739661b ./gcc/doc/extend.texi ! 4082117256b ./gcc/doc/fsf-funding.7 ! 2547935421b ./gcc/doc/gcc.1 ! 2843274065b ./gcc/doc/gcc.info ! 2990386687b ./gcc/doc/gcc.info-1 ! 1445464779b ./gcc/doc/gcc.info-10 ! 1677294261b ./gcc/doc/gcc.info-11 ! 3439233692b ./gcc/doc/gcc.info-12 ! 2124898997b ./gcc/doc/gcc.info-13 ! 1577881631b ./gcc/doc/gcc.info-14 ! 1505513439b ./gcc/doc/gcc.info-15 ! 1488869065b ./gcc/doc/gcc.info-16 ! 3981089770b ./gcc/doc/gcc.info-17 ! 3580511162b ./gcc/doc/gcc.info-18 ! 3053665660b ./gcc/doc/gcc.info-19 ! 3324036132b ./gcc/doc/gcc.info-2 ! 1711685926b ./gcc/doc/gcc.info-20 ! 3061785565b ./gcc/doc/gcc.info-21 ! 2911384001b ./gcc/doc/gcc.info-22 ! 231523791b ./gcc/doc/gcc.info-23 ! 1942014712b ./gcc/doc/gcc.info-24 ! 306751634b ./gcc/doc/gcc.info-25 ! 2089792943b ./gcc/doc/gcc.info-26 ! 4035801517b ./gcc/doc/gcc.info-27 ! 1215885789b ./gcc/doc/gcc.info-28 ! 931081699b ./gcc/doc/gcc.info-29 ! 3989194140b ./gcc/doc/gcc.info-3 ! 3454950667b ./gcc/doc/gcc.info-30 ! 2982962372b ./gcc/doc/gcc.info-31 ! 4107027028b ./gcc/doc/gcc.info-32 ! 150283287b ./gcc/doc/gcc.info-33 ! 3995591609b ./gcc/doc/gcc.info-34 ! 2672779904b ./gcc/doc/gcc.info-35 ! 1595610527b ./gcc/doc/gcc.info-36 ! 2148106363b ./gcc/doc/gcc.info-37 ! 1194930305b ./gcc/doc/gcc.info-38 ! 3872447951b ./gcc/doc/gcc.info-4 ! 4174679714b ./gcc/doc/gcc.info-5 ! 1955990022b ./gcc/doc/gcc.info-6 ! 3947720052b ./gcc/doc/gcc.info-7 ! 1050915150b ./gcc/doc/gcc.info-8 ! 858978988b ./gcc/doc/gcc.info-9 ! 4189272091b ./gcc/doc/gcc.texi ! 1068718416b ./gcc/doc/gcov.1 ! 3462759430b ./gcc/doc/gcov.texi ! 3125222608b ./gcc/doc/gfdl.7 ! 2353450575b ./gcc/doc/gpl.7 ! 973259336b ./gcc/doc/include/fdl.texi 2048065465b ./gcc/doc/include/funding.texi ! 3235143907b ./gcc/doc/include/gpl.texi ! 4016541318b ./gcc/doc/include/texinfo.tex ! 2393405651b ./gcc/doc/install-old.texi ! 3972578140b ./gcc/doc/install.texi ! 1547785611b ./gcc/doc/install.texi2html ! 3326003035b ./gcc/doc/invoke.texi ! 2629464946b ./gcc/doc/md.texi ! 1033541327b ./gcc/doc/objc.texi ! 1140289608b ./gcc/doc/rtl.texi ! 89665016b ./gcc/doc/tm.texi ! 2499571202b ./gcc/doloop.c ! 123944430b ./gcc/dominance.c ! 2660216905b ./gcc/doprint.c 2791449994b ./gcc/doschk.c ! 3438566628b ./gcc/dostage2 ! 1965038258b ./gcc/dostage3 ! 1793399413b ./gcc/dwarf2asm.c ! 3481577918b ./gcc/dwarf2asm.h ! 369471853b ./gcc/dwarf2.h ! 3529109919b ./gcc/dwarf2out.c ! 907111294b ./gcc/dwarf2out.h ! 4219638407b ./gcc/dwarf.h ! 1291353303b ./gcc/dwarfout.c ! 1589660034b ./gcc/dwarfout.h ! 337813410b ./gcc/emit-rtl.c 626897841b ./gcc/enquire.c ! 3097048689b ./gcc/errors.c ! 3948305090b ./gcc/errors.h ! 618805483b ./gcc/except.c ! 3751320921b ./gcc/except.h ! 3470052574b ./gcc/exgettext ! 1523181895b ./gcc/explow.c ! 2360937586b ./gcc/expmed.c ! 351991323b ./gcc/expr.c ! 3169905778b ./gcc/expr.h 1934744031b ./gcc/f/ansify.c ! 924620387b ./gcc/f/bad.c ! 2075017867b ./gcc/f/bad.def ! 2944793883b ./gcc/f/bad.h 4003760421b ./gcc/f/bit.c ! 787197484b ./gcc/f/bit.h ! 535953754b ./gcc/f/bld.c ! 806295869b ./gcc/f/bld.h 2128697889b ./gcc/f/bld-op.def ! 496151338b ./gcc/f/BUGS 235013049b ./gcc/f/bugs0.texi ! 3591523699b ./gcc/f/bugs.texi ! 3017982124b ./gcc/f/ChangeLog 4225493150b ./gcc/f/ChangeLog.0 ! 3426833468b ./gcc/f/com.c ! 3692027131b ./gcc/f/com.h ! 2935402943b ./gcc/f/com-rt.def ! 1714014206b ./gcc/f/config-lang.in ! 2920655732b ./gcc/f/.cvsignore ! 618178673b ./gcc/f/data.c ! 224874956b ./gcc/f/data.h ! 1172483877b ./gcc/f/equiv.c ! 500183067b ./gcc/f/equiv.h ! 2364012254b ./gcc/f/expr.c ! 2989892382b ./gcc/f/expr.h ! 4228142157b ./gcc/f/ffe.texi ! 4039257523b ./gcc/f/fini.c ! 3733092107b ./gcc/f/g77.1 ! 1558529464b ./gcc/f/g77.info ! 4073004879b ./gcc/f/g77.info-1 ! 1572730289b ./gcc/f/g77.info-10 ! 708712496b ./gcc/f/g77.info-11 ! 386211315b ./gcc/f/g77.info-12 ! 334611184b ./gcc/f/g77.info-13 ! 2922158039b ./gcc/f/g77.info-14 ! 1429542232b ./gcc/f/g77.info-15 ! 407014851b ./gcc/f/g77.info-16 ! 2044254643b ./gcc/f/g77.info-17 ! 3680927546b ./gcc/f/g77.info-18 ! 4153739622b ./gcc/f/g77.info-19 ! 1747971186b ./gcc/f/g77.info-2 ! 250010659b ./gcc/f/g77.info-20 ! 1737028323b ./gcc/f/g77.info-3 ! 441095326b ./gcc/f/g77.info-4 ! 3062436597b ./gcc/f/g77.info-5 ! 2298371298b ./gcc/f/g77.info-6 ! 1132943234b ./gcc/f/g77.info-7 ! 1760016451b ./gcc/f/g77.info-8 ! 3934020738b ./gcc/f/g77.info-9 ! 908822112b ./gcc/f/g77install.texi ! 2350422564b ./gcc/f/g77spec.c ! 2640639478b ./gcc/f/g77.texi ! 1736110997b ./gcc/f/global.c ! 368896602b ./gcc/f/global.h ! 3914027293b ./gcc/f/implic.c ! 2480459444b ./gcc/f/implic.h ! 1052098650b ./gcc/final.c 2287601317b ./gcc/f/info-b.def ! 1125228698b ./gcc/f/info.c ! 3911039718b ./gcc/f/info.h ! 2157151689b ./gcc/f/info-k.def 2242176401b ./gcc/f/info-w.def ! 929810179b ./gcc/f/intdoc.c ! 2865476752b ./gcc/f/intdoc.in ! 1518221274b ./gcc/f/intdoc.texi ! 1536079149b ./gcc/f/intrin.c ! 2817340704b ./gcc/f/intrin.def ! 1819421669b ./gcc/f/intrin.h ! 3904468581b ./gcc/fix-header.c ! 2497636676b ./gcc/fixinc/check.tpl ! 2400562783b ./gcc/fixinc/fixfixes.c 3110054233b ./gcc/fixinc/fixinc.dgux 15758129b ./gcc/fixinc/fixinc.interix 1824978333b ./gcc/fixinc/fixincl.c 4214658264b ./gcc/fixinc/fixincl.sh 2178021789b ./gcc/fixinc/fixincl.tpl ! 3121350554b ./gcc/fixinc/fixincl.x 1474597097b ./gcc/fixinc/fixinc.ptx 1901674452b ./gcc/fixinc/fixinc.svr4 2193207840b ./gcc/fixinc/fixinc.winnt --- 1884,2957 ---- 466751418b ./gcc/config/float-i64.h 2601002892b ./gcc/config/float-m68k.h 1084189067b ./gcc/config/float-sh.h ! 2134536939b ./gcc/config/float-sparc.h 766947524b ./gcc/config/float-vax.h ! 2162319998b ./gcc/config/fp-bit.c ! 3844459473b ./gcc/config/fp-bit.h 2304723625b ./gcc/config/fr30/crti.asm 2025473533b ./gcc/config/fr30/crtn.asm ! 3792879472b ./gcc/config/fr30/fr30.c ! 869213712b ./gcc/config/fr30/fr30.h ! 4172871396b ./gcc/config/fr30/fr30.md 4061935745b ./gcc/config/fr30/fr30-protos.h ! 2734319269b ./gcc/config/fr30/lib1funcs.asm ! 3068633205b ./gcc/config/fr30/t-fr30 3857422654b ./gcc/config/freebsd3.h 2210711654b ./gcc/config/freebsd4.h 1531797731b ./gcc/config/freebsd5.h 3920011053b ./gcc/config/freebsd6.h ! 22917470b ./gcc/config/freebsd.h 3532526787b ./gcc/config/freebsd-nthr.h ! 3508760161b ./gcc/config/freebsd-spec.h ! 3982478526b ./gcc/config.gcc 3236013445b ./gcc/config/gnu.h ! 269492728b ./gcc/config/gofast.h 1315260558b ./gcc/config.guess ! 3397297833b ./gcc/config/h8300/crti.asm ! 3919963794b ./gcc/config/h8300/crtn.asm ! 3512988181b ./gcc/config/h8300/elf.h ! 3407042493b ./gcc/config/h8300/fixunssfsi.c ! 3423866381b ./gcc/config/h8300/h8300.c ! 36086897b ./gcc/config/h8300/h8300.h ! 311961515b ./gcc/config/h8300/h8300.md ! 1292256972b ./gcc/config/h8300/h8300-protos.h ! 2991149153b ./gcc/config/h8300/lib1funcs.asm ! 2198420981b ./gcc/config/h8300/rtems.h ! 2094865057b ./gcc/config/h8300/t-elf ! 85067832b ./gcc/config/h8300/t-h8300 ! 3470805473b ./gcc/config/i370/i370.c ! 979765873b ./gcc/config/i370/i370-c.c ! 3238258803b ./gcc/config/i370/i370.h ! 4214408308b ./gcc/config/i370/i370.md ! 1981911754b ./gcc/config/i370/i370-protos.h ! 1433729913b ./gcc/config/i370/linux.h 1044154955b ./gcc/config/i370/mvs.h 3630097967b ./gcc/config/i370/oe.h 2187046003b ./gcc/config/i370/README ! 1023365638b ./gcc/config/i370/t-i370 ! 1100145942b ./gcc/config/i370/t-oe ! 3856846943b ./gcc/config/i386/386bsd.h ! 3990721733b ./gcc/config/i386/aix386.h ! 757618460b ./gcc/config/i386/aix386ng.h ! 3049279797b ./gcc/config/i386/att.h ! 1685915522b ./gcc/config/i386/beos-elf.h ! 778550489b ./gcc/config/i386/biarch64.h ! 118206770b ./gcc/config/i386/bsd386.h ! 2349519740b ./gcc/config/i386/bsd.h ! 105502713b ./gcc/config/i386/crtdll.h ! 4293145615b ./gcc/config/i386/cygwin.asm ! 2449448955b ./gcc/config/i386/cygwin.h ! 3582951454b ./gcc/config/i386/dgux.h ! 1419143807b ./gcc/config/i386/djgpp.h ! 2694509274b ./gcc/config/i386/djgpp-rtems.h ! 3516447755b ./gcc/config/i386/freebsd64.h ! 1128409449b ./gcc/config/i386/freebsd-aout.h ! 149642195b ./gcc/config/i386/freebsd.h ! 872852389b ./gcc/config/i386/gas.h 4266288971b ./gcc/config/i386/gmon-sol2.c ! 915598536b ./gcc/config/i386/gnu.h 166489147b ./gcc/config/i386/gstabs.h 1725036574b ./gcc/config/i386/i386-aout.h ! 2220354271b ./gcc/config/i386/i386.c ! 4168545992b ./gcc/config/i386/i386-coff.h ! 2017248418b ./gcc/config/i386/i386elf.h ! 4265596819b ./gcc/config/i386/i386.h ! 721929446b ./gcc/config/i386/i386-interix3.h ! 1321445318b ./gcc/config/i386/i386-interix.h ! 1299174871b ./gcc/config/i386/i386.md ! 2931096540b ./gcc/config/i386/i386-protos.h ! 1164740130b ./gcc/config/i386/interix.c ! 1996803131b ./gcc/config/i386/isccoff.h ! 1692083111b ./gcc/config/i386/iscdbx.h ! 3908393755b ./gcc/config/i386/isc.h ! 877642037b ./gcc/config/i386/libgcc-x86_64-glibc.ver ! 1764509521b ./gcc/config/i386/linux64.h ! 2999558891b ./gcc/config/i386/linux-aout.h ! 2801664794b ./gcc/config/i386/linux.h ! 2799520524b ./gcc/config/i386/linux-oldld.h ! 372710545b ./gcc/config/i386/lynx.h 83628421b ./gcc/config/i386/lynx-ng.h ! 4206477894b ./gcc/config/i386/mach.h ! 3763689293b ./gcc/config/i386/mingw32.h ! 2271894911b ./gcc/config/i386/mmintrin.h 3361545892b ./gcc/config/i386/moss.h ! 4043203226b ./gcc/config/i386/netbsd64.h ! 527360119b ./gcc/config/i386/netbsd-elf.h ! 4276805615b ./gcc/config/i386/netbsd.h ! 2351965586b ./gcc/config/i386/netware.h ! 3059925901b ./gcc/config/i386/next.h ! 1097827022b ./gcc/config/i386/openbsd.h 2999570618b ./gcc/config/i386/osf1-ci.asm 2303041887b ./gcc/config/i386/osf1-cn.asm ! 3979872455b ./gcc/config/i386/osf1elfgdb.h ! 1710286781b ./gcc/config/i386/osf1elf.h 3128347339b ./gcc/config/i386/osfelf.h ! 4023690019b ./gcc/config/i386/osfrose.h ! 4166685458b ./gcc/config/i386/ptx4-i.h ! 3397896458b ./gcc/config/i386/rtemself.h ! 3754059204b ./gcc/config/i386/rtems.h ! 3691307729b ./gcc/config/i386/sco5.h 3439848366b ./gcc/config/i386/seq2-sysv3.h ! 2517904468b ./gcc/config/i386/seq-gas.h ! 2376826274b ./gcc/config/i386/seq-sysv3.h ! 1460292009b ./gcc/config/i386/sequent.h 425477609b ./gcc/config/i386/sol2-c1.asm 1565106149b ./gcc/config/i386/sol2-ci.asm 4008317666b ./gcc/config/i386/sol2-cn.asm 3870175252b ./gcc/config/i386/sol2gas.h 2045686122b ./gcc/config/i386/sol2-gc1.asm ! 293602449b ./gcc/config/i386/sol2.h ! 3471554836b ./gcc/config/i386/sun386.h 4009223163b ./gcc/config/i386/sun.h ! 2138673972b ./gcc/config/i386/svr3dbx.h ! 1965747476b ./gcc/config/i386/svr3gas.h 3846064431b ./gcc/config/i386/svr3.ifile 1523044645b ./gcc/config/i386/svr3z.ifile ! 3848105951b ./gcc/config/i386/sysv3.h ! 1594728867b ./gcc/config/i386/sysv4.h ! 1357982390b ./gcc/config/i386/sysv5.h ! 3914733738b ./gcc/config/i386/t-beos 2437302600b ./gcc/config/i386/t-crtpic 2246944266b ./gcc/config/i386/t-crtstuff ! 3093621951b ./gcc/config/i386/t-cygwin ! 2054288148b ./gcc/config/i386/t-dgux ! 2902972689b ./gcc/config/i386/t-djgpp ! 537671296b ./gcc/config/i386/t-i386elf ! 1614388594b ./gcc/config/i386/t-interix ! 795980282b ./gcc/config/i386/t-linux64 4056914306b ./gcc/config/i386/t-mingw32 ! 92801654b ./gcc/config/i386/t-netware ! 1960948471b ./gcc/config/i386/t-next 709063989b ./gcc/config/i386/t-openbsd 1186749595b ./gcc/config/i386/t-osf 1520459705b ./gcc/config/i386/t-osf1elf 422823583b ./gcc/config/i386/t-rtems-i386 ! 1649755892b ./gcc/config/i386/t-sco5 ! 1824758327b ./gcc/config/i386/t-sco5gas ! 2786912378b ./gcc/config/i386/t-sol2 3128852740b ./gcc/config/i386/t-svr3dbx 2977164768b ./gcc/config/i386/t-udk 1023926647b ./gcc/config/i386/t-uwin ! 1775100101b ./gcc/config/i386/udk.h ! 2818591693b ./gcc/config/i386/unix.h ! 2798938994b ./gcc/config/i386/uwin.asm ! 4142598938b ./gcc/config/i386/uwin.h 1148022895b ./gcc/config/i386/v3gas.h ! 1621915956b ./gcc/config/i386/vsta.h ! 57307462b ./gcc/config/i386/vxi386.h ! 3423798645b ./gcc/config/i386/win32.h ! 3552187277b ./gcc/config/i386/winnt.c ! 2420589009b ./gcc/config/i386/x86-64.h ! 1690208514b ./gcc/config/i386/xm-cygwin.h ! 3902343879b ./gcc/config/i386/xm-djgpp.h ! 3631826497b ./gcc/config/i386/xm-i386-interix.h ! 92688945b ./gcc/config/i386/xm-mingw32.h ! 298059282b ./gcc/config/i386/xmmintrin.h 1404515293b ./gcc/config/i386/xm-vsta.h 2229503331b ./gcc/config/i860/bsd-gas.h ! 3105781024b ./gcc/config/i860/bsd.h ! 1997415443b ./gcc/config/i860/fx2800.h ! 4081368347b ./gcc/config/i860/i860.c ! 718661732b ./gcc/config/i860/i860.h ! 2940070083b ./gcc/config/i860/i860.md ! 1479219352b ./gcc/config/i860/i860-protos.h 3806449409b ./gcc/config/i860/mach.h ! 3225474743b ./gcc/config/i860/paragon.h ! 3497246692b ./gcc/config/i860/sysv3.h ! 1181281122b ./gcc/config/i860/sysv4.h 269024431b ./gcc/config/i860/t-fx2800 1835110220b ./gcc/config/i860/varargs.asm ! 736082089b ./gcc/config/i960/i960.c ! 648677105b ./gcc/config/i960/i960-c.c ! 3384279950b ./gcc/config/i960/i960-coff.h ! 2499300591b ./gcc/config/i960/i960.h ! 2800981685b ./gcc/config/i960/i960.md ! 3598295769b ./gcc/config/i960/i960-protos.h ! 1281966645b ./gcc/config/i960/rtems.h ! 2036399646b ./gcc/config/i960/t-960bare ! 703563677b ./gcc/config/i960/t-vxworks960 ! 3103531078b ./gcc/config/i960/vx960-coff.h 1895495318b ./gcc/config/i960/vx960.h ! 1007852506b ./gcc/config/ia64/aix.h ! 1057225417b ./gcc/config/ia64/crtbegin.asm ! 2515543842b ./gcc/config/ia64/crtend.asm ! 281392077b ./gcc/config/ia64/crtfastmath.c ! 3128441059b ./gcc/config/ia64/crti.asm ! 3161585686b ./gcc/config/ia64/crtn.asm ! 2297508797b ./gcc/config/ia64/elf.h ! 2446839914b ./gcc/config/ia64/fde-glibc.c ! 2501046378b ./gcc/config/ia64/freebsd.h ! 2423115826b ./gcc/config/ia64/hpux.h ! 3320865692b ./gcc/config/ia64/hpux_longdouble.h ! 2150614374b ./gcc/config/ia64/ia64.c ! 160446917b ./gcc/config/ia64/ia64.h ! 511545686b ./gcc/config/ia64/ia64intrin.h ! 1143291289b ./gcc/config/ia64/ia64.md ! 2354458740b ./gcc/config/ia64/ia64-protos.h 3488320870b ./gcc/config/ia64/lib1funcs.asm 2361471520b ./gcc/config/ia64/libgcc-ia64.ver ! 1673403325b ./gcc/config/ia64/linux.h ! 1337642433b ./gcc/config/ia64/quadlib.c ! 948246891b ./gcc/config/ia64/sysv4.h ! 2374494786b ./gcc/config/ia64/t-aix 2148782144b ./gcc/config/ia64/t-glibc ! 3471209231b ./gcc/config/ia64/t-hpux ! 158251161b ./gcc/config/ia64/t-ia64 ! 2759923269b ./gcc/config/ia64/unwind-aix.c ! 1364155779b ./gcc/config/ia64/unwind-ia64.c 2355075302b ./gcc/config/ia64/unwind-ia64.h ! 1924641967b ./gcc/config.in ! 3221870490b ./gcc/config/interix3.h ! 1139973568b ./gcc/config/interix.h 3774321010b ./gcc/config/libgcc-glibc.ver 679171109b ./gcc/config/libgloss.h 265766519b ./gcc/config/linux-aout.h ! 2201567287b ./gcc/config/linux.h ! 510514981b ./gcc/config/lynx.h 2466014571b ./gcc/config/lynx-ng.h 2460604231b ./gcc/config/m32r/initfini.c ! 2298486681b ./gcc/config/m32r/m32r.c ! 2178062905b ./gcc/config/m32r/m32r.h ! 2455193277b ./gcc/config/m32r/m32r.md ! 67938598b ./gcc/config/m32r/m32r-protos.h ! 3043182144b ./gcc/config/m32r/t-m32r ! 35339373b ./gcc/config/m68hc11/larith.asm ! 3307677762b ./gcc/config/m68hc11/m68hc11.c 3563849705b ./gcc/config/m68hc11/m68hc11-crt0.S ! 1396676368b ./gcc/config/m68hc11/m68hc11.h ! 2604222265b ./gcc/config/m68hc11/m68hc11.md ! 2207634479b ./gcc/config/m68hc11/m68hc11-protos.h ! 452436463b ./gcc/config/m68hc11/m68hc12.h ! 1483227044b ./gcc/config/m68hc11/t-m68hc11-gas ! 3032963201b ./gcc/config/m68k/3b1g.h ! 3262237289b ./gcc/config/m68k/3b1.h ! 1524307847b ./gcc/config/m68k/altos3068.h ! 1472845046b ./gcc/config/m68k/amix.h ! 3726815317b ./gcc/config/m68k/apollo68.h ! 2229011187b ./gcc/config/m68k/atari.h ! 304653227b ./gcc/config/m68k/auxas.h 1360990051b ./gcc/config/m68k/aux-crt1.c ! 1689696476b ./gcc/config/m68k/aux-crt2.asm ! 2072970828b ./gcc/config/m68k/aux-crtn.asm ! 409246969b ./gcc/config/m68k/aux-exit.c ! 741505994b ./gcc/config/m68k/auxgas.h 922288695b ./gcc/config/m68k/auxgld.h ! 1105413220b ./gcc/config/m68k/a-ux.h 2685530303b ./gcc/config/m68k/auxld.h 2164284366b ./gcc/config/m68k/aux-low.gld ! 2208437798b ./gcc/config/m68k/aux-mcount.c ! 1916112183b ./gcc/config/m68k/ccur-GAS.h ! 597864788b ./gcc/config/m68k/coff.h ! 2360909894b ./gcc/config/m68k/crds.h 1173190318b ./gcc/config/m68k/crti.s 4181788584b ./gcc/config/m68k/crtn.s 3642339847b ./gcc/config/m68k/ctix.h 2770446786b ./gcc/config/m68k/dpx2cdbx.h ! 3851760573b ./gcc/config/m68k/dpx2g.h ! 2199460345b ./gcc/config/m68k/dpx2.h 2216029984b ./gcc/config/m68k/dpx2.ifile 2518640661b ./gcc/config/m68k/fpgnulib.c 136981270b ./gcc/config/m68k/hp2bsd.h 4247760656b ./gcc/config/m68k/hp310g.h ! 2625821362b ./gcc/config/m68k/hp310.h 3645108527b ./gcc/config/m68k/hp320g.h ! 2642329211b ./gcc/config/m68k/hp320.h 3605366445b ./gcc/config/m68k/hp3bsd44.h 942415927b ./gcc/config/m68k/hp3bsd.h 2864047424b ./gcc/config/m68k/hpux7.h ! 665470337b ./gcc/config/m68k/isi.h 3484500543b ./gcc/config/m68k/isi-nfp.h ! 704862081b ./gcc/config/m68k/lb1sf68.asm ! 1023591365b ./gcc/config/m68k/linux-aout.h ! 1138393842b ./gcc/config/m68k/linux.h ! 3350690882b ./gcc/config/m68k/lynx.h 162996909b ./gcc/config/m68k/lynx-ng.h ! 3379792683b ./gcc/config/m68k/m68020-elf.h 388266224b ./gcc/config/m68k/m68k-aout.h ! 1870424553b ./gcc/config/m68k/m68k.c 3882947461b ./gcc/config/m68k/m68k-coff.h ! 2573430517b ./gcc/config/m68k/m68kelf.h ! 1120822994b ./gcc/config/m68k/m68kemb.h ! 424059070b ./gcc/config/m68k/m68k.h ! 3281000245b ./gcc/config/m68k/m68k.md 3855098247b ./gcc/config/m68k/m68k-none.h ! 3954442786b ./gcc/config/m68k/m68k-protos.h ! 1109594909b ./gcc/config/m68k/m68k-psos.h ! 947783547b ./gcc/config/m68k/m68kv4.h ! 2766673945b ./gcc/config/m68k/math-3300.h ! 3047408322b ./gcc/config/m68k/math-68881.h 1902334218b ./gcc/config/m68k/mot3300-crt0.S ! 2216988570b ./gcc/config/m68k/mot3300.h 4250921257b ./gcc/config/m68k/mot3300Mcrt0.S ! 4238930488b ./gcc/config/m68k/netbsd-elf.h ! 306540848b ./gcc/config/m68k/netbsd.h 2598124463b ./gcc/config/m68k/news3gas.h 895337217b ./gcc/config/m68k/news3.h 2724290690b ./gcc/config/m68k/newsgas.h ! 823527599b ./gcc/config/m68k/news.h ! 3839942171b ./gcc/config/m68k/next21.h ! 3375370361b ./gcc/config/m68k/next.h 615787625b ./gcc/config/m68k/openbsd.h ! 1412462225b ./gcc/config/m68k/pbb.h ! 964659279b ./gcc/config/m68k/plexus.h ! 3840336856b ./gcc/config/m68k/rtemself.h ! 4045485418b ./gcc/config/m68k/rtems.h ! 2246845695b ./gcc/config/m68k/sgs.h 844744081b ./gcc/config/m68k/sun2.h ! 3991060631b ./gcc/config/m68k/sun2o4.h ! 842360161b ./gcc/config/m68k/sun3.h 3724598161b ./gcc/config/m68k/sun3mach.h 864417723b ./gcc/config/m68k/sun3n3.h 120628064b ./gcc/config/m68k/sun3n.h 2298299278b ./gcc/config/m68k/sun3o3.h ! 3527955370b ./gcc/config/m68k/t-aux 1499818164b ./gcc/config/m68k/t-crtstuff + 1845413337b ./gcc/config/m68k/t-hp320 1601671577b ./gcc/config/m68k/t-linux 1601671577b ./gcc/config/m68k/t-linux-aout ! 3474104024b ./gcc/config/m68k/t-lynx ! 591505405b ./gcc/config/m68k/t-m68kbare ! 1376927127b ./gcc/config/m68k/t-m68kelf 2312371323b ./gcc/config/m68k/t-mot3300 ! 1278563328b ./gcc/config/m68k/t-mot3300-gald ! 505153656b ./gcc/config/m68k/t-mot3300-gas 2294965883b ./gcc/config/m68k/t-mot3300-gld ! 1947397845b ./gcc/config/m68k/t-next 3937644742b ./gcc/config/m68k/t-openbsd ! 1079952514b ./gcc/config/m68k/tower-as.h ! 2265492461b ./gcc/config/m68k/tower.h ! 2710264317b ./gcc/config/m68k/t-vxworks68 ! 2466779056b ./gcc/config/m68k/vxm68k.h ! 330782920b ./gcc/config/m68k/x-next 3877749712b ./gcc/config/m88k/aout-dbx.h ! 3964892058b ./gcc/config/m88k/dguxbcs.h ! 2407166913b ./gcc/config/m88k/dgux.h 3298414170b ./gcc/config/m88k/dgux.ld 1645309935b ./gcc/config/m88k/dolph.h 1558967450b ./gcc/config/m88k/dolphin.ld 27544745b ./gcc/config/m88k/luna.h 1097971558b ./gcc/config/m88k/m88k-aout.h ! 1383766601b ./gcc/config/m88k/m88k.c 929158884b ./gcc/config/m88k/m88k-coff.h ! 3165616393b ./gcc/config/m88k/m88k.h ! 249987577b ./gcc/config/m88k/m88k.md 2372325319b ./gcc/config/m88k/m88k-move.sh ! 3958641691b ./gcc/config/m88k/m88k-protos.h 3182883703b ./gcc/config/m88k/openbsd.h ! 2062420508b ./gcc/config/m88k/sysv3.h ! 2064243939b ./gcc/config/m88k/sysv4.h ! 1952601632b ./gcc/config/m88k/t-bug ! 3570488521b ./gcc/config/m88k/t-dgux ! 1929747752b ./gcc/config/m88k/t-dguxbcs ! 185935036b ./gcc/config/m88k/t-dgux-gas ! 141637502b ./gcc/config/m88k/t-dolph 3899935761b ./gcc/config/m88k/tekXD88.h 173867895b ./gcc/config/m88k/tekXD88.ld ! 2294317049b ./gcc/config/m88k/t-luna ! 3352809625b ./gcc/config/m88k/t-luna-gas ! 1952601632b ./gcc/config/m88k/t-m88k ! 2909533034b ./gcc/config/m88k/t-m88k-gas ! 3580877409b ./gcc/config/m88k/t-sysv4 ! 3049523840b ./gcc/config/m88k/t-tekXD88 4057462442b ./gcc/config/mcore/crti.asm 3021138350b ./gcc/config/mcore/crtn.asm ! 3514021936b ./gcc/config/mcore/gfloat.h ! 3510059529b ./gcc/config/mcore/lib1.asm ! 2263673310b ./gcc/config/mcore/mcore.c ! 511751417b ./gcc/config/mcore/mcore-elf.h ! 2030700230b ./gcc/config/mcore/mcore.h ! 400725302b ./gcc/config/mcore/mcore.md ! 3984142890b ./gcc/config/mcore/mcore-pe.h ! 149272234b ./gcc/config/mcore/mcore-protos.h ! 1343396749b ./gcc/config/mcore/t-mcore ! 2921008064b ./gcc/config/mcore/t-mcore-pe ! 1252529019b ./gcc/config/mips/abi64.h 1865003947b ./gcc/config/mips/bsd-4.h ! 2290247989b ./gcc/config/mips/bsd-5.h 930726788b ./gcc/config/mips/cross64.h + 1227388398b ./gcc/config/mips/crti.asm + 1600482981b ./gcc/config/mips/crtn.asm 3317633569b ./gcc/config/mips/dec-bsd.h 4118299381b ./gcc/config/mips/dec-osf1.h 1910637049b ./gcc/config/mips/ecoff.h 3551974985b ./gcc/config/mips/ecoffl.h ! 1974114900b ./gcc/config/mips/elf64.h ! 715994964b ./gcc/config/mips/elf.h 1175169006b ./gcc/config/mips/elfl64.h 4118432176b ./gcc/config/mips/elfl.h 452497001b ./gcc/config/mips/elflorion.h 4210328521b ./gcc/config/mips/elforion.h 4009674128b ./gcc/config/mips/iris3.h 3161243087b ./gcc/config/mips/iris4.h 2743944992b ./gcc/config/mips/iris4loser.h ! 1342606731b ./gcc/config/mips/iris5gas.h ! 4137712676b ./gcc/config/mips/iris5.h ! 2290690324b ./gcc/config/mips/iris6gld.h ! 3234294689b ./gcc/config/mips/iris6.h ! 3658812670b ./gcc/config/mips/irix6-libc-compat.c ! 3639703657b ./gcc/config/mips/isa3264.h ! 3645898751b ./gcc/config/mips/isa32-linux.h ! 1922092548b ./gcc/config/mips/linux.h ! 2202363688b ./gcc/config/mips/little.h ! 2024693888b ./gcc/config/mips/mips16.S ! 3112223626b ./gcc/config/mips/mips-5.h ! 242585385b ./gcc/config/mips/mips.c ! 1450296441b ./gcc/config/mips/mips.h ! 27312380b ./gcc/config/mips/mips.md ! 4191298187b ./gcc/config/mips/mips-protos.h ! 396210794b ./gcc/config/mips/netbsd.h 1685635385b ./gcc/config/mips/news4.h 3776131275b ./gcc/config/mips/news5.h 807792414b ./gcc/config/mips/nws3250v4.h 391873849b ./gcc/config/mips/openbsd-be.h ! 2082964611b ./gcc/config/mips/openbsd.h ! 14433004b ./gcc/config/mips/osfrose.h ! 440031462b ./gcc/config/mips/r3900.h ! 1390680376b ./gcc/config/mips/rtems64.h ! 725646271b ./gcc/config/mips/rtems.h ! 4240783400b ./gcc/config/mips/sni-gas.h ! 670897314b ./gcc/config/mips/sni-svr4.h 3194520655b ./gcc/config/mips/svr3-4.h ! 767984692b ./gcc/config/mips/svr3-5.h 2860455593b ./gcc/config/mips/svr4-4.h ! 980733461b ./gcc/config/mips/svr4-5.h ! 2452459111b ./gcc/config/mips/svr4-t.h ! 2607420510b ./gcc/config/mips/t-bsd ! 2303697534b ./gcc/config/mips/t-bsd-gas ! 3044783963b ./gcc/config/mips/t-cross64 ! 3379398326b ./gcc/config/mips/t-ecoff ! 3744526568b ./gcc/config/mips/t-elf ! 2896429436b ./gcc/config/mips/t-iris ! 926858795b ./gcc/config/mips/t-iris6 ! 2995723142b ./gcc/config/mips/t-isa3264 ! 3174612276b ./gcc/config/mips/t-linux ! 1879935135b ./gcc/config/mips/t-r3900 ! 1413700483b ./gcc/config/mips/t-svr3 ! 3653081423b ./gcc/config/mips/t-svr3-gas ! 764398973b ./gcc/config/mips/t-svr4 ! 2691764145b ./gcc/config/mips/t-svr4-gas ! 1592869717b ./gcc/config/mips/t-ultrix ! 904152708b ./gcc/config/mips/ultrix.h ! 2931924525b ./gcc/config/mips/vxworks.h ! 3454112118b ./gcc/config/mips/xm-iris5.h ! 1256346916b ./gcc/config/mmix/crti.asm ! 4149276856b ./gcc/config/mmix/crtn.asm ! 1365569292b ./gcc/config/mmix/mmix.c ! 3912110255b ./gcc/config/mmix/mmix.h ! 785535891b ./gcc/config/mmix/mmix.md ! 1558302901b ./gcc/config/mmix/mmix-protos.h ! 1410017015b ./gcc/config/mmix/t-mmix ! 38698671b ./gcc/config/mn10200/lib1funcs.asm ! 585104722b ./gcc/config/mn10200/mn10200.c ! 3521160628b ./gcc/config/mn10200/mn10200.h ! 1601326717b ./gcc/config/mn10200/mn10200.md 4029388596b ./gcc/config/mn10200/mn10200-protos.h ! 2767557893b ./gcc/config/mn10200/t-mn10200 ! 62398656b ./gcc/config/mn10300/mn10300.c ! 2168100301b ./gcc/config/mn10300/mn10300.h ! 680410204b ./gcc/config/mn10300/mn10300.md ! 3249413352b ./gcc/config/mn10300/mn10300-protos.h ! 3295955402b ./gcc/config/mn10300/t-mn10300 ! 3969750295b ./gcc/config/netbsd-aout.h ! 2304062656b ./gcc/config/netbsd-elf.h ! 1669681271b ./gcc/config/netbsd.h ! 3670236471b ./gcc/config/netware.h ! 3498035575b ./gcc/config/nextstep21.h ! 884710202b ./gcc/config/nextstep.c ! 251016432b ./gcc/config/nextstep.h ! 2525790015b ./gcc/config/nextstep-protos.h ! 505151767b ./gcc/config/ns32k/encore.h ! 3294809321b ./gcc/config/ns32k/merlin.h ! 1759962800b ./gcc/config/ns32k/netbsd.h ! 1296740637b ./gcc/config/ns32k/ns32k.c ! 1493984519b ./gcc/config/ns32k/ns32k.h ! 1903185806b ./gcc/config/ns32k/ns32k.md ! 1708247420b ./gcc/config/ns32k/ns32k-protos.h 3974800750b ./gcc/config/ns32k/pc532.h 104963810b ./gcc/config/ns32k/pc532-mach.h 1249730935b ./gcc/config/ns32k/pc532-min.h 1951152204b ./gcc/config/ns32k/sequent.h ! 3970632321b ./gcc/config/ns32k/tek6000.h 906085514b ./gcc/config/ns32k/tek6100.h 3417438490b ./gcc/config/ns32k/tek6200.h ! 247387334b ./gcc/config/openbsd.h ! 2401043639b ./gcc/config/pa/elf.h 1435423353b ./gcc/config/pa/lib1funcs.asm ! 454965220b ./gcc/config/pa/lib2funcs.asm ! 2056209887b ./gcc/config/pa/long_double.h ! 2062031370b ./gcc/config/pa/milli32.S ! 401709680b ./gcc/config/pa/milli64.S ! 2660241824b ./gcc/config/pa/pa32-linux.h ! 3627454173b ./gcc/config/pa/pa32-regs.h ! 255410879b ./gcc/config/pa/pa-64.h ! 2399407521b ./gcc/config/pa/pa64-hpux.h ! 4127689659b ./gcc/config/pa/pa64-linux.h ! 106717215b ./gcc/config/pa/pa64-regs.h 3813586304b ./gcc/config/pa/pa64-start.h ! 2999551426b ./gcc/config/pa/pa.c ! 3792562292b ./gcc/config/pa/pa.h 2070570431b ./gcc/config/pa/pa-hiux.h ! 722967032b ./gcc/config/pa/pa-hpux10.h ! 3160109858b ./gcc/config/pa/pa-hpux11.h 3949639215b ./gcc/config/pa/pa-hpux7.h 3124002443b ./gcc/config/pa/pa-hpux9.h 2419055394b ./gcc/config/pa/pa-hpux.h ! 334238140b ./gcc/config/pa/pa-linux.h ! 715986632b ./gcc/config/pa/pa.md 3618123809b ./gcc/config/pa/pa-oldas.h 3108768032b ./gcc/config/pa/pa-osf.h ! 2360373262b ./gcc/config/pa/pa-pro-end.h ! 2208816980b ./gcc/config/pa/pa-protos.h ! 1224647575b ./gcc/config/pa/quadlib.c ! 17931766b ./gcc/config/pa/rtems.h ! 971757202b ./gcc/config/pa/som.h ! 299977776b ./gcc/config/pa/t-bsd 1117935804b ./gcc/config/pa/t-dce-thr ! 4044826599b ./gcc/config/pa/t-hpux-shlib ! 176583881b ./gcc/config/pa/t-linux ! 3127053933b ./gcc/config/pa/t-linux64 ! 1211178790b ./gcc/config/pa/t-mpeix ! 3597581162b ./gcc/config/pa/t-pa ! 1659865778b ./gcc/config/pa/t-pa64 ! 2754633370b ./gcc/config/pa/t-pa-hpux ! 817714064b ./gcc/config/pa/t-pro ! 1293323254b ./gcc/config/pa/x-ada ! 4118902235b ./gcc/config/pdp11/2bsd.h ! 3233992791b ./gcc/config/pdp11/pdp11.c ! 3228770397b ./gcc/config/pdp11/pdp11.h ! 3587948093b ./gcc/config/pdp11/pdp11.md ! 1678731791b ./gcc/config/pdp11/pdp11-protos.h ! 3096460014b ./gcc/config/pdp11/t-pdp11 1460345365b ./gcc/config/pj/lib1funcs.S ! 3899085832b ./gcc/config/pj/linux.h ! 3905905230b ./gcc/config/pj/pj.c ! 2997103714b ./gcc/config/pj/pj.h 140528803b ./gcc/config/pj/pjl.h 4115579495b ./gcc/config/pj/pj.md ! 827420337b ./gcc/config/pj/pj-protos.h ! 3942936368b ./gcc/config/pj/t-pj ! 1311052798b ./gcc/config/psos.h ! 1638983603b ./gcc/config/ptx4.h 3917072699b ./gcc/config/README ! 1415145997b ./gcc/config/romp/romp.c ! 4030226328b ./gcc/config/romp/romp.h ! 4096557609b ./gcc/config/romp/romp.md ! 1229374838b ./gcc/config/romp/romp-protos.h ! 3731158896b ./gcc/config/rs6000/aix31.h 2741987967b ./gcc/config/rs6000/aix3newas.h 1702283472b ./gcc/config/rs6000/aix41.h ! 3809319566b ./gcc/config/rs6000/aix43.h ! 1082269428b ./gcc/config/rs6000/aix51.h ! 676923459b ./gcc/config/rs6000/aix.h ! 1953946692b ./gcc/config/rs6000/altivec-defs.h ! 3168500243b ./gcc/config/rs6000/altivec.h ! 510508394b ./gcc/config/rs6000/beos.h ! 511519789b ./gcc/config/rs6000/crtsavres.asm ! 362681124b ./gcc/config/rs6000/darwin.h ! 3983537248b ./gcc/config/rs6000/darwin-tramp.asm 318728404b ./gcc/config/rs6000/eabiaix.h ! 1991998428b ./gcc/config/rs6000/eabialtivec.h ! 2647778291b ./gcc/config/rs6000/eabi.asm 383867253b ./gcc/config/rs6000/eabi-ci.asm 3758141774b ./gcc/config/rs6000/eabi-cn.asm 4071223554b ./gcc/config/rs6000/eabi.h 1258445797b ./gcc/config/rs6000/eabisim.h ! 3017082484b ./gcc/config/rs6000/freebsd.h ! 4293496085b ./gcc/config/rs6000/gnu.h ! 4277033356b ./gcc/config/rs6000/linux64.h ! 1351560312b ./gcc/config/rs6000/linuxaltivec.h ! 3642990693b ./gcc/config/rs6000/linux.h ! 1286374006b ./gcc/config/rs6000/lynx.h ! 4204979131b ./gcc/config/rs6000/mach.h 1820610909b ./gcc/config/rs6000/milli.exp ! 693602701b ./gcc/config/rs6000/netbsd.h ! 4127185084b ./gcc/config/rs6000/ppc-asm.h ! 3898393602b ./gcc/config/rs6000/rs6000.c ! 2973919280b ./gcc/config/rs6000/rs6000.h ! 1691659242b ./gcc/config/rs6000/rs6000.md ! 4107218804b ./gcc/config/rs6000/rs6000-protos.h ! 1817513646b ./gcc/config/rs6000/rtems.h ! 2439652147b ./gcc/config/rs6000/softfloat.h ! 3703627966b ./gcc/config/rs6000/sol-ci.asm ! 3016810975b ./gcc/config/rs6000/sol-cn.asm ! 1078401283b ./gcc/config/rs6000/sysv4.h 3795959522b ./gcc/config/rs6000/sysv4le.h ! 781650112b ./gcc/config/rs6000/t-aix43 ! 2042460673b ./gcc/config/rs6000/t-beos ! 3302666617b ./gcc/config/rs6000/t-darwin ! 2019934202b ./gcc/config/rs6000/t-linux64 ! 4049449059b ./gcc/config/rs6000/t-newas ! 3107528900b ./gcc/config/rs6000/t-ppccomm 365048301b ./gcc/config/rs6000/t-ppcgas ! 3552141086b ./gcc/config/rs6000/t-ppcos ! 85679922b ./gcc/config/rs6000/tramp.asm ! 946774617b ./gcc/config/rs6000/t-rs6000 301220496b ./gcc/config/rs6000/vxppc.h ! 3024887630b ./gcc/config/rs6000/xcoff.h ! 1142085470b ./gcc/config/rtems.h 3390348482b ./gcc/config/s390/fixdfdi.h ! 1234245155b ./gcc/config/s390/libgcc-glibc.ver ! 661638700b ./gcc/config/s390/linux.h ! 952324584b ./gcc/config/s390/s390.c ! 1762771167b ./gcc/config/s390/s390.h ! 2635324496b ./gcc/config/s390/s390.md ! 2764225003b ./gcc/config/s390/s390-protos.h ! 3998835120b ./gcc/config/s390/s390x.h ! 1051100452b ./gcc/config/s390/t-linux ! 2020003531b ./gcc/config/s390/t-linux64 ! 41732123b ./gcc/config/sh/crt1.asm ! 643557115b ./gcc/config/sh/crti.asm ! 567573801b ./gcc/config/sh/crtn.asm ! 1588713186b ./gcc/config/sh/elf.h ! 3107978185b ./gcc/config/sh/lib1funcs.asm ! 450228266b ./gcc/config/sh/linux.h ! 2022181827b ./gcc/config/sh/rtemself.h ! 1498631144b ./gcc/config/sh/rtems.h ! 1071738647b ./gcc/config/sh/sh64.h ! 3254166331b ./gcc/config/sh/sh.c ! 3738163077b ./gcc/config/sh/sh.h ! 1738052341b ./gcc/config/sh/sh.md ! 3656510246b ./gcc/config/sh/shmedia.h ! 410816511b ./gcc/config/sh/sh-protos.h ! 4192915538b ./gcc/config/sh/sshmedia.h 3555569248b ./gcc/config/sh/t-elf ! 3486728930b ./gcc/config/sh/t-linux ! 2597458196b ./gcc/config/sh/t-sh ! 672246409b ./gcc/config/sh/t-sh64 ! 2893164163b ./gcc/config/sh/ushmedia.h ! 1926756242b ./gcc/config/sparc/aout.h ! 3461838008b ./gcc/config/sparc/biarch64.h ! 1386942151b ./gcc/config/sparc/bsd.h ! 1479022830b ./gcc/config/sparc/crtfastmath.c ! 54964474b ./gcc/config/sparc/elf.h ! 2261391724b ./gcc/config/sparc/freebsd.h ! 1322899413b ./gcc/config/sparc/gmon-sol2.c 3746795534b ./gcc/config/sparc/hal.h ! 3587954192b ./gcc/config/sparc/lb1spc.asm ! 557614974b ./gcc/config/sparc/lb1spl.asm ! 1761187951b ./gcc/config/sparc/libgcc-sparc-glibc.ver ! 1211069020b ./gcc/config/sparc/linux64.h ! 2544415545b ./gcc/config/sparc/linux-aout.h ! 1914379195b ./gcc/config/sparc/linux.h ! 2163445162b ./gcc/config/sparc/litecoff.h ! 1933660745b ./gcc/config/sparc/liteelf.h ! 2424336991b ./gcc/config/sparc/lite.h ! 2399395336b ./gcc/config/sparc/lynx.h ! 2334021382b ./gcc/config/sparc/lynx-ng.h ! 1146469998b ./gcc/config/sparc/netbsd-elf.h ! 365271853b ./gcc/config/sparc/netbsd.h ! 349992599b ./gcc/config/sparc/openbsd.h ! 3728184707b ./gcc/config/sparc/pbd.h ! 2243601282b ./gcc/config/sparc/rtemself.h ! 4106236389b ./gcc/config/sparc/rtems.h ! 1579903847b ./gcc/config/sparc/sol2-64.h ! 2488307215b ./gcc/config/sparc/sol27-sld.h ! 3856389871b ./gcc/config/sparc/sol2-bi.h 1463670426b ./gcc/config/sparc/sol2-c1.asm 3288323690b ./gcc/config/sparc/sol2-ci.asm 2004370404b ./gcc/config/sparc/sol2-cn.asm 2182182911b ./gcc/config/sparc/sol2-g1.asm ! 878755050b ./gcc/config/sparc/sol2-gas-bi.h ! 3173831404b ./gcc/config/sparc/sol2-gld-bi.h ! 4206582763b ./gcc/config/sparc/sol2-gld.h ! 4099517211b ./gcc/config/sparc/sol2.h ! 3918002150b ./gcc/config/sparc/sp64-aout.h ! 2870886299b ./gcc/config/sparc/sp64-elf.h ! 3128199560b ./gcc/config/sparc/sp86x-aout.h ! 1221714757b ./gcc/config/sparc/sp86x-elf.h ! 1440912782b ./gcc/config/sparc/sparc.c ! 201504811b ./gcc/config/sparc/sparc.h ! 3779592443b ./gcc/config/sparc/sparc.md ! 4181984480b ./gcc/config/sparc/sparc-protos.h ! 842964351b ./gcc/config/sparc/splet.h ! 952337645b ./gcc/config/sparc/sun4gas.h ! 1795303911b ./gcc/config/sparc/sun4o3.h ! 721602587b ./gcc/config/sparc/sunos4.h ! 14508846b ./gcc/config/sparc/sysv4.h ! 2782836992b ./gcc/config/sparc/t-chorus-elf ! 3789889905b ./gcc/config/sparc/t-crtfm ! 3744055768b ./gcc/config/sparc/t-elf 1582758741b ./gcc/config/sparc/t-halos ! 3231155557b ./gcc/config/sparc/t-linux64 ! 695285893b ./gcc/config/sparc/t-netbsd64 1190032917b ./gcc/config/sparc/t-openbsd ! 851768603b ./gcc/config/sparc/t-sol2 ! 253776311b ./gcc/config/sparc/t-sol2-64 ! 4194854877b ./gcc/config/sparc/t-sp86x ! 2727045329b ./gcc/config/sparc/t-sparcbare ! 1324996929b ./gcc/config/sparc/t-sparclite ! 4249538597b ./gcc/config/sparc/t-splet ! 1776401931b ./gcc/config/sparc/t-sunos41 ! 3082115393b ./gcc/config/sparc/t-vxsparc ! 3638105138b ./gcc/config/sparc/t-vxsparc64 ! 2444638453b ./gcc/config/sparc/vxsim.h ! 3450727705b ./gcc/config/sparc/vxsparc64.h ! 1610820992b ./gcc/config/sparc/vxsparc.h ! 1548984109b ./gcc/config/stormy16/stormy16.c ! 3776989782b ./gcc/config/stormy16/stormy16.h ! 4011003560b ./gcc/config/stormy16/stormy16-lib2.c ! 552174638b ./gcc/config/stormy16/stormy16.md ! 2190947530b ./gcc/config/stormy16/stormy16-protos.h ! 1002673818b ./gcc/config/stormy16/stormy-abi ! 3561720924b ./gcc/config/stormy16/t-stormy16 ! 2159505844b ./gcc/config/svr3.h ! 4237693824b ./gcc/config/svr4.h 2749923948b ./gcc/config/t-freebsd ! 3853732254b ./gcc/config/t-freebsd-thread 2512129728b ./gcc/config/t-gnu 3050012299b ./gcc/config/t-install-cpp ! 825269638b ./gcc/config/t-interix ! 1047761087b ./gcc/config/t-libc-ok 2753685882b ./gcc/config/t-libgcc-pic ! 2712900964b ./gcc/config/t-linux ! 825269638b ./gcc/config/t-linux-aout ! 3205817010b ./gcc/config/t-linux-gnulibc1 121353396b ./gcc/config/tm-dwarf2.h ! 825269638b ./gcc/config/t-netbsd ! 2903849127b ./gcc/config/t-openbsd 2917904648b ./gcc/config/t-openbsd-thread 2246241652b ./gcc/config/t-rtems ! 2258421829b ./gcc/config/t-slibgcc-elf-ver ! 2124668958b ./gcc/config/t-slibgcc-nolc-override ! 1896414626b ./gcc/config/t-slibgcc-sld ! 321200235b ./gcc/config/t-svr4 937080303b ./gcc/config/udivmod.c 2590328114b ./gcc/config/udivmodsi4.c ! 2756132761b ./gcc/configure ! 2239237249b ./gcc/configure.frag ! 3861102285b ./gcc/configure.in 1401546799b ./gcc/config/usegas.h ! 1330961877b ./gcc/config/v850/lib1funcs.asm ! 3345272584b ./gcc/config/v850/rtems.h ! 3046767615b ./gcc/config/v850/t-v850 ! 2149356335b ./gcc/config/v850/v850.c ! 4072890677b ./gcc/config/v850/v850-c.c ! 1028297694b ./gcc/config/v850/v850.h ! 2739963548b ./gcc/config/v850/v850.md ! 1229280760b ./gcc/config/v850/v850-protos.h ! 678831326b ./gcc/config/vax/netbsd.h ! 3271953013b ./gcc/config/vax/openbsd1.h ! 2993271330b ./gcc/config/vax/openbsd.h ! 1070068995b ./gcc/config/vax/ultrix.h ! 3091217209b ./gcc/config/vax/vax.c ! 1003009211b ./gcc/config/vax/vax.h ! 3688695163b ./gcc/config/vax/vax.md ! 3894216269b ./gcc/config/vax/vax-protos.h ! 3118052779b ./gcc/config/vax/vaxv.h ! 1265968606b ./gcc/config/vax/vms.h ! 1260653442b ./gcc/config/vax/xm-vms.h ! 560039799b ./gcc/config/we32k/we32k.c ! 1100296089b ./gcc/config/we32k/we32k.h ! 3169968881b ./gcc/config/we32k/we32k.md 2514844092b ./gcc/config/we32k/we32k-protos.h ! 2711497169b ./gcc/config/x-interix ! 2141220080b ./gcc/config/xtensa/elf.h ! 1027874511b ./gcc/config/xtensa/lib1funcs.asm 3621223618b ./gcc/config/xtensa/lib2funcs.S ! 2321639494b ./gcc/config/xtensa/linux.h ! 3617796239b ./gcc/config/xtensa/t-xtensa ! 2730302225b ./gcc/config/xtensa/xtensa.c ! 2796950173b ./gcc/config/xtensa/xtensa-config.h ! 1828949757b ./gcc/config/xtensa/xtensa.h ! 2624040412b ./gcc/config/xtensa/xtensa.md ! 1806400723b ./gcc/config/xtensa/xtensa-protos.h ! 3382606314b ./gcc/conflict.c ! 879729133b ./gcc/convert.c ! 2020855935b ./gcc/convert.h 2171125041b ./gcc/COPYING 508743035b ./gcc/COPYING.LIB ! 2221971030b ./gcc/c-parse.c ! 404744322b ./gcc/c-parse.in ! 4212422843b ./gcc/c-parse.y ! 1606645276b ./gcc/cp/call.c 4115552602b ./gcc/cp/cfns.gperf 1705070232b ./gcc/cp/cfns.h ! 4179439137b ./gcc/cp/ChangeLog ! 2221404065b ./gcc/cp/ChangeLog.1 ! 2127340768b ./gcc/cp/ChangeLog.2 2546444747b ./gcc/cp/ChangeLog.egcs ! 3183049197b ./gcc/cp/class.c ! 1309293181b ./gcc/cp/config-lang.in ! 4181461399b ./gcc/cp/cp-lang.c ! 2928114977b ./gcc/cp/cp-tree.def ! 691274132b ./gcc/cp/cp-tree.h 1230086821b ./gcc/cp/.cvsignore ! 2009587140b ./gcc/cp/cvt.c ! 123177b ./gcc/cp/decl2.c ! 3651127911b ./gcc/cp/decl.c ! 3040950596b ./gcc/cp/decl.h ! 1503739344b ./gcc/cp/dump.c ! 3528935033b ./gcc/cp/error.c ! 1298672024b ./gcc/cp/except.c ! 2612079645b ./gcc/cp/expr.c ! 728682437b ./gcc/cp/friend.c 1574667259b ./gcc/cp/g++.1 ! 3180385434b ./gcc/cp/g++spec.c ! 1092390451b ./gcc/cp/init.c ! 3812650249b ./gcc/cp/lang-options.h ! 1834287749b ./gcc/cp/lang-specs.h ! 635563648b ./gcc/cp/lex.c ! 2280147967b ./gcc/cp/lex.h ! 2020293663b ./gcc/cp/Make-lang.in ! 110717073b ./gcc/cp/mangle.c ! 3566373635b ./gcc/cp/method.c 701335209b ./gcc/cp/mpw-config.in 4041177245b ./gcc/cp/mpw-make.sed ! 3379488726b ./gcc/cp/NEWS ! 3247354675b ./gcc/cp/operators.def ! 622478745b ./gcc/cp/optimize.c ! 2913547076b ./gcc/cp/parse.c ! 170370885b ./gcc/cp/parse.h ! 3869126793b ./gcc/cp/parse.y 1602205564b ./gcc/cppdefault.c ! 733799898b ./gcc/cppdefault.h ! 3582099799b ./gcc/cpperror.c ! 4072103215b ./gcc/cppexp.c ! 1744773234b ./gcc/cppfiles.c ! 2283152717b ./gcc/cpphash.c ! 3545195852b ./gcc/cpphash.h ! 1683789867b ./gcc/cppinit.c ! 201524367b ./gcc/cpplex.c ! 696100766b ./gcc/cpplib.c ! 2677210260b ./gcc/cpplib.h ! 956403033b ./gcc/cppmacro.c ! 2363485754b ./gcc/cppmain.c ! 3972345626b ./gcc/cppspec.c ! 869544284b ./gcc/cp/pt.c ! 1408553642b ./gcc/cp/ptree.c ! 951685116b ./gcc/c-pragma.c ! 1212765089b ./gcc/c-pragma.h ! 3993964584b ./gcc/cp/repo.c ! 373887640b ./gcc/cp/rtti.c ! 4073173263b ./gcc/cp/search.c ! 1391383527b ./gcc/cp/semantics.c ! 435715887b ./gcc/cp/spew.c ! 1223112841b ./gcc/cp/tree.c ! 1104404539b ./gcc/cp/typeck2.c ! 216625426b ./gcc/cp/typeck.c ! 2032357073b ./gcc/crtstuff.c ! 4072060626b ./gcc/cse.c ! 1601788710b ./gcc/cselib.c ! 3914093915b ./gcc/cselib.h ! 2383555787b ./gcc/c-semantics.c 216805921b ./gcc/cstamp-h.in ! 2979514529b ./gcc/c-tree.h ! 2525875527b ./gcc/c-typeck.c ! 4208197548b ./gcc/.cvsignore ! 1600176938b ./gcc/dbxout.c ! 2583180678b ./gcc/dbxout.h 1104788844b ./gcc/dbxstclass.h ! 2470087149b ./gcc/debug.c ! 178689220b ./gcc/debug.h ! 3203273376b ./gcc/defaults.h ! 2369804086b ./gcc/dependence.c ! 2491556822b ./gcc/df.c ! 3792421516b ./gcc/df.h ! 1042165669b ./gcc/diagnostic.c ! 1311569781b ./gcc/diagnostic.def ! 4192732570b ./gcc/diagnostic.h ! 23600501b ./gcc/doc/bugreport.texi ! 2815010075b ./gcc/doc/collect2.texi ! 2785243168b ./gcc/doc/configfiles.texi ! 3399730921b ./gcc/doc/configterms.texi ! 178835589b ./gcc/doc/contrib.texi ! 2272556046b ./gcc/doc/contribute.texi ! 3532032039b ./gcc/doc/cpp.1 ! 728474004b ./gcc/doc/cppenv.texi ! 614113989b ./gcc/doc/cpp.info ! 3684701703b ./gcc/doc/cpp.info-1 ! 2051881480b ./gcc/doc/cpp.info-2 ! 4277996359b ./gcc/doc/cpp.info-3 ! 1723172915b ./gcc/doc/cpp.info-4 ! 4128300115b ./gcc/doc/cppinternals.info ! 1958814700b ./gcc/doc/cppinternals.texi ! 1576301312b ./gcc/doc/cppopts.texi ! 3942827135b ./gcc/doc/cpp.texi ! 3074388753b ./gcc/doc/c-tree.texi ! 1471878644b ./gcc/doc/.cvsignore ! 3767903981b ./gcc/doc/extend.texi ! 2634996326b ./gcc/doc/fragments.texi ! 600815516b ./gcc/doc/frontends.texi ! 785810521b ./gcc/doc/fsf-funding.7 ! 1219439851b ./gcc/doc/gcc.1 ! 1818627276b ./gcc/doc/gcc.info ! 1319117426b ./gcc/doc/gcc.info-1 ! 2210088709b ./gcc/doc/gcc.info-10 ! 3588585377b ./gcc/doc/gcc.info-11 ! 2472794790b ./gcc/doc/gcc.info-12 ! 3020319333b ./gcc/doc/gcc.info-13 ! 1555589246b ./gcc/doc/gcc.info-14 ! 2100335389b ./gcc/doc/gcc.info-15 ! 1973326326b ./gcc/doc/gcc.info-16 ! 983912118b ./gcc/doc/gcc.info-17 ! 4229810973b ./gcc/doc/gcc.info-18 ! 2774448157b ./gcc/doc/gcc.info-19 ! 4041736365b ./gcc/doc/gcc.info-2 ! 273873526b ./gcc/doc/gcc.info-20 ! 373096534b ./gcc/doc/gcc.info-21 ! 1105239440b ./gcc/doc/gcc.info-22 ! 3748204607b ./gcc/doc/gcc.info-23 ! 177802939b ./gcc/doc/gcc.info-3 ! 3514858133b ./gcc/doc/gcc.info-4 ! 4164754347b ./gcc/doc/gcc.info-5 ! 523405852b ./gcc/doc/gcc.info-6 ! 4075929926b ./gcc/doc/gcc.info-7 ! 1276947272b ./gcc/doc/gcc.info-8 ! 701416922b ./gcc/doc/gcc.info-9 ! 2259220057b ./gcc/doc/gccint.info ! 1545378372b ./gcc/doc/gccint.info-1 ! 1504619998b ./gcc/doc/gccint.info-10 ! 3473339140b ./gcc/doc/gccint.info-11 ! 121842836b ./gcc/doc/gccint.info-12 ! 1382416683b ./gcc/doc/gccint.info-13 ! 17271233b ./gcc/doc/gccint.info-14 ! 3485597023b ./gcc/doc/gccint.info-15 ! 1782892412b ./gcc/doc/gccint.info-16 ! 2959978575b ./gcc/doc/gccint.info-17 ! 4176515869b ./gcc/doc/gccint.info-18 ! 140211443b ./gcc/doc/gccint.info-19 ! 807234232b ./gcc/doc/gccint.info-2 ! 202943203b ./gcc/doc/gccint.info-20 ! 3389515766b ./gcc/doc/gccint.info-21 ! 1609190242b ./gcc/doc/gccint.info-22 ! 2398443189b ./gcc/doc/gccint.info-23 ! 1907881660b ./gcc/doc/gccint.info-3 ! 1456140435b ./gcc/doc/gccint.info-4 ! 645003639b ./gcc/doc/gccint.info-5 ! 2130774212b ./gcc/doc/gccint.info-6 ! 393035355b ./gcc/doc/gccint.info-7 ! 422138694b ./gcc/doc/gccint.info-8 ! 1381894043b ./gcc/doc/gccint.info-9 ! 926520134b ./gcc/doc/gccint.texi ! 1397603823b ./gcc/doc/gcc.texi ! 609698978b ./gcc/doc/gcov.1 ! 3165676809b ./gcc/doc/gcov.texi ! 3249981369b ./gcc/doc/gfdl.7 ! 4217859569b ./gcc/doc/gnu.texi ! 4103668381b ./gcc/doc/gpl.7 ! 2632697239b ./gcc/doc/headerdirs.texi ! 1425599017b ./gcc/doc/hostconfig.texi ! 1232987106b ./gcc/doc/include/fdl.texi 2048065465b ./gcc/doc/include/funding.texi ! 444307564b ./gcc/doc/include/gcc-common.texi ! 1416455933b ./gcc/doc/include/gpl.texi ! 3627483023b ./gcc/doc/include/texinfo.tex ! 4219640220b ./gcc/doc/install-old.texi ! 3408748664b ./gcc/doc/install.texi ! 1451529977b ./gcc/doc/install.texi2html ! 1103982611b ./gcc/doc/interface.texi ! 1238510282b ./gcc/doc/invoke.texi ! 1327866291b ./gcc/doc/languages.texi ! 1442569774b ./gcc/doc/makefile.texi ! 351459532b ./gcc/doc/md.texi ! 2014418726b ./gcc/doc/objc.texi ! 285120363b ./gcc/doc/passes.texi ! 2247614285b ./gcc/doc/portability.texi ! 1491224498b ./gcc/doc/rtl.texi ! 3603168219b ./gcc/doc/service.texi ! 1541018360b ./gcc/doc/sourcebuild.texi ! 4060536618b ./gcc/doc/standards.texi ! 1062799302b ./gcc/doc/tm.texi ! 3680484655b ./gcc/doc/trouble.texi ! 3478556786b ./gcc/doc/vms.texi ! 1216009797b ./gcc/doloop.c ! 1033704706b ./gcc/dominance.c 2791449994b ./gcc/doschk.c ! 31829346b ./gcc/dwarf2asm.c ! 2077057275b ./gcc/dwarf2asm.h ! 2184520814b ./gcc/dwarf2.h ! 2702810335b ./gcc/dwarf2out.c ! 1010158138b ./gcc/dwarf2out.h ! 109276966b ./gcc/dwarf.h ! 3538556678b ./gcc/dwarfout.c ! 620021703b ./gcc/emit-rtl.c 626897841b ./gcc/enquire.c ! 2953931641b ./gcc/errors.c ! 3972701730b ./gcc/errors.h ! 1431652736b ./gcc/except.c ! 2826708782b ./gcc/except.h ! 3043936594b ./gcc/explow.c ! 2204988582b ./gcc/expmed.c ! 2453007041b ./gcc/expr.c ! 2884660603b ./gcc/expr.h 1934744031b ./gcc/f/ansify.c ! 1543506773b ./gcc/f/bad.c ! 3978113547b ./gcc/f/bad.def ! 2128126262b ./gcc/f/bad.h 4003760421b ./gcc/f/bit.c ! 194938753b ./gcc/f/bit.h ! 948632599b ./gcc/f/bld.c ! 3286267604b ./gcc/f/bld.h 2128697889b ./gcc/f/bld-op.def ! 276048984b ./gcc/f/BUGS 235013049b ./gcc/f/bugs0.texi ! 2193415872b ./gcc/f/bugs.texi ! 3034148871b ./gcc/f/ChangeLog 4225493150b ./gcc/f/ChangeLog.0 ! 3761650327b ./gcc/f/com.c ! 87369815b ./gcc/f/com.h ! 2664732170b ./gcc/f/com-rt.def ! 535595698b ./gcc/f/config-lang.in ! 1546791101b ./gcc/f/.cvsignore ! 1011994563b ./gcc/f/data.c ! 1923155684b ./gcc/f/data.h ! 1611338677b ./gcc/f/equiv.c ! 2175994638b ./gcc/f/equiv.h ! 2251785098b ./gcc/f/expr.c ! 417834755b ./gcc/f/expr.h ! 2351117682b ./gcc/f/ffe.texi ! 782070966b ./gcc/f/fini.c ! 2773163133b ./gcc/f/g77.1 ! 1037226619b ./gcc/f/g77.info ! 2529060485b ./gcc/f/g77.info-1 ! 2392806453b ./gcc/f/g77.info-10 ! 84907233b ./gcc/f/g77.info-11 ! 1421534311b ./gcc/f/g77.info-12 ! 3672125906b ./gcc/f/g77.info-13 ! 2829585005b ./gcc/f/g77.info-14 ! 1722844877b ./gcc/f/g77.info-15 ! 1533369096b ./gcc/f/g77.info-16 ! 2474727030b ./gcc/f/g77.info-17 ! 295046617b ./gcc/f/g77.info-18 ! 3238363624b ./gcc/f/g77.info-19 ! 2836736457b ./gcc/f/g77.info-2 ! 2326247988b ./gcc/f/g77.info-20 ! 532929806b ./gcc/f/g77.info-21 ! 2297740209b ./gcc/f/g77.info-3 ! 1472416982b ./gcc/f/g77.info-4 ! 3726797101b ./gcc/f/g77.info-5 ! 239170095b ./gcc/f/g77.info-6 ! 2638465735b ./gcc/f/g77.info-7 ! 563283124b ./gcc/f/g77.info-8 ! 2747065980b ./gcc/f/g77.info-9 ! 2824974536b ./gcc/f/g77spec.c ! 3054392079b ./gcc/f/g77.texi ! 4062822261b ./gcc/f/global.c ! 3559352394b ./gcc/f/global.h ! 1392305407b ./gcc/f/implic.c ! 3939649511b ./gcc/f/implic.h ! 3457648447b ./gcc/final.c 2287601317b ./gcc/f/info-b.def ! 2342702754b ./gcc/f/info.c ! 1115234844b ./gcc/f/info.h ! 2535813338b ./gcc/f/info-k.def 2242176401b ./gcc/f/info-w.def ! 3953937189b ./gcc/f/intdoc.c ! 3843015483b ./gcc/f/intdoc.in ! 4069635816b ./gcc/f/intdoc.texi ! 2410122381b ./gcc/f/intrin.c ! 1048488593b ./gcc/f/intrin.def ! 3418049706b ./gcc/f/intrin.h ! 2243664841b ./gcc/f/invoke.texi ! 2247789519b ./gcc/fix-header.c ! 2894614091b ./gcc/fixinc/check.tpl ! 786772235b ./gcc/fixinc/fixfixes.c 3110054233b ./gcc/fixinc/fixinc.dgux 15758129b ./gcc/fixinc/fixinc.interix 1824978333b ./gcc/fixinc/fixincl.c 4214658264b ./gcc/fixinc/fixincl.sh 2178021789b ./gcc/fixinc/fixincl.tpl ! 3312009046b ./gcc/fixinc/fixincl.x 1474597097b ./gcc/fixinc/fixinc.ptx 1901674452b ./gcc/fixinc/fixinc.svr4 2193207840b ./gcc/fixinc/fixinc.winnt *************** *** 1650,1669 **** 971233728b ./gcc/fixinc/fixlib.h 4013194329b ./gcc/fixinc/fixtests.c 2003329934b ./gcc/fixinc/genfixes ! 3680461708b ./gcc/fixinc/gnu-regex.c 1403987073b ./gcc/fixinc/gnu-regex.h ! 1541023411b ./gcc/fixinc/inclhack.def ! 3884502794b ./gcc/fixinc/Makefile.in ! 245955576b ./gcc/fixinc/mkfixinc.sh ! 3901871541b ./gcc/fixinc/procopen.c 2351321356b ./gcc/fixinc/README 1750379031b ./gcc/fixinc/server.c ! 2895407134b ./gcc/fixinc/server.h 1165473466b ./gcc/fixinc/tests/base/ansi/math.h 3124694417b ./gcc/fixinc/tests/base/ansi/stdlib.h 2980092932b ./gcc/fixinc/tests/base/arch/i960/archI960.h 1062137968b ./gcc/fixinc/tests/base/arpa/inet.h ! 2535365837b ./gcc/fixinc/tests/base/assert.h 3220984809b ./gcc/fixinc/tests/base/bsd/libc.h 1799847368b ./gcc/fixinc/tests/base/c_asm.h 2725396384b ./gcc/fixinc/tests/base/ctrl-quotes-def-1.h --- 2960,2979 ---- 971233728b ./gcc/fixinc/fixlib.h 4013194329b ./gcc/fixinc/fixtests.c 2003329934b ./gcc/fixinc/genfixes ! 605191257b ./gcc/fixinc/gnu-regex.c 1403987073b ./gcc/fixinc/gnu-regex.h ! 2194272133b ./gcc/fixinc/inclhack.def ! 3390155447b ./gcc/fixinc/Makefile.in ! 3327140809b ./gcc/fixinc/mkfixinc.sh ! 1834585069b ./gcc/fixinc/procopen.c 2351321356b ./gcc/fixinc/README 1750379031b ./gcc/fixinc/server.c ! 3490851801b ./gcc/fixinc/server.h 1165473466b ./gcc/fixinc/tests/base/ansi/math.h 3124694417b ./gcc/fixinc/tests/base/ansi/stdlib.h 2980092932b ./gcc/fixinc/tests/base/arch/i960/archI960.h 1062137968b ./gcc/fixinc/tests/base/arpa/inet.h ! 597415717b ./gcc/fixinc/tests/base/assert.h 3220984809b ./gcc/fixinc/tests/base/bsd/libc.h 1799847368b ./gcc/fixinc/tests/base/c_asm.h 2725396384b ./gcc/fixinc/tests/base/ctrl-quotes-def-1.h *************** *** 1691,1696 **** --- 3001,3007 ---- 164451816b ./gcc/fixinc/tests/base/rpc/xdr.h 135186565b ./gcc/fixinc/tests/base/sparc/asm_linkage.h 2925418517b ./gcc/fixinc/tests/base/stdio.h + 1529509815b ./gcc/fixinc/tests/base/stdio_tag.h 135522837b ./gcc/fixinc/tests/base/stdlib.h 2941232612b ./gcc/fixinc/tests/base/strings.h 482468002b ./gcc/fixinc/tests/base/sundev/vuid_event.h *************** *** 1718,2081 **** 3845139066b ./gcc/fixinc/tests/base/tinfo.h 4209310059b ./gcc/fixinc/tests/base/types/vxTypesBase.h 3839547353b ./gcc/fixinc/tests/base/unistd.h 1516247519b ./gcc/fixinc/tests/base/X11/Intrinsic.h 2715935838b ./gcc/fixinc/tests/base/X11/ShellP.h 4147305037b ./gcc/fixinc/tests/base/X11/Xmu.h 3373785317b ./gcc/fixinc/tests/base/Xm/BaseClassI.h 1118590845b ./gcc/fixinc/tests/base/Xm/Traversal.h ! 1711694323b ./gcc/fixproto 1861938661b ./gcc/f/lab.c ! 1912790643b ./gcc/f/lab.h ! 4214100853b ./gcc/flags.h ! 1541062170b ./gcc/f/lang-options.h ! 3052573854b ./gcc/f/lang-specs.h ! 123352428b ./gcc/f/lex.c ! 3648980141b ./gcc/f/lex.h ! 14144180b ./gcc/floatlib.c ! 645949506b ./gcc/flow.c ! 437764639b ./gcc/f/Make-lang.in ! 3616710460b ./gcc/f/malloc.c ! 3829974116b ./gcc/f/malloc.h 2687881356b ./gcc/f/name.c ! 2439587488b ./gcc/f/name.h ! 4163515796b ./gcc/f/NEWS 3453379674b ./gcc/f/news0.texi ! 1979951996b ./gcc/f/news.texi ! 3036032403b ./gcc/fold-const.c ! 1209793850b ./gcc/f/parse.c ! 1179014538b ./gcc/f/proj.c ! 2975337745b ./gcc/f/proj.h ! 814448160b ./gcc/fp-test.c 281424983b ./gcc/f/README 3295584012b ./gcc/f/RELEASE-PREP ! 1932088293b ./gcc/f/root.texi 2146007539b ./gcc/FSFChangeLog ! 232745070b ./gcc/FSFChangeLog.10 ! 2525829644b ./gcc/FSFChangeLog.11 3531682397b ./gcc/f/src.c ! 1764828976b ./gcc/f/src.h ! 1096594920b ./gcc/f/sta.c ! 4016204844b ./gcc/f/sta.h ! 160388911b ./gcc/f/stb.c ! 2971641335b ./gcc/f/stb.h 3466162958b ./gcc/f/st.c ! 3318262160b ./gcc/f/stc.c ! 495996435b ./gcc/f/stc.h ! 181775227b ./gcc/f/std.c ! 1726735653b ./gcc/f/std.h ! 511843509b ./gcc/f/ste.c ! 480358952b ./gcc/f/ste.h ! 1121987325b ./gcc/f/st.h 1100581971b ./gcc/f/storag.c ! 2376153183b ./gcc/f/storag.h 2404416327b ./gcc/f/stp.c ! 1012274389b ./gcc/f/stp.h 3722860946b ./gcc/f/str-1t.fin 2828127862b ./gcc/f/str-2t.fin 920153914b ./gcc/f/str.c 4215029898b ./gcc/f/str-fo.fin ! 2319274141b ./gcc/f/str.h 281471485b ./gcc/f/str-io.fin 3735910053b ./gcc/f/str-nq.fin 3134124633b ./gcc/f/str-op.fin 2608567153b ./gcc/f/str-ot.fin 610725318b ./gcc/f/sts.c ! 884551177b ./gcc/f/sts.h ! 854662715b ./gcc/f/stt.c ! 3890711200b ./gcc/f/stt.h ! 1314649482b ./gcc/f/stu.c ! 2872877005b ./gcc/f/stu.h 857063390b ./gcc/f/stv.c ! 939390778b ./gcc/f/stv.h 2156320080b ./gcc/f/stw.c ! 1162160075b ./gcc/f/stw.h ! 3779085472b ./gcc/f/symbol.c 1323122026b ./gcc/f/symbol.def ! 4185634583b ./gcc/f/symbol.h ! 2744008879b ./gcc/f/target.c ! 2483223874b ./gcc/f/target.h ! 3965009956b ./gcc/f/top.c ! 4257635887b ./gcc/f/top.h 3443401298b ./gcc/f/type.c ! 1269043734b ./gcc/f/type.h ! 888363625b ./gcc/function.c ! 1538066423b ./gcc/function.h ! 1945284764b ./gcc/future.options ! 3282212134b ./gcc/f/version.c ! 1880947867b ./gcc/f/version.h 3584291506b ./gcc/f/where.c ! 422122823b ./gcc/f/where.h ! 4221598017b ./gcc/gansidecl.h ! 4122921738b ./gcc/gbl-ctors.h ! 2684927393b ./gcc/gccbug.in ! 2158776393b ./gcc/gcc.c ! 3913162253b ./gcc/gcc.h ! 3891935819b ./gcc/gcc.hlp ! 3916741943b ./gcc/gccspec.c ! 313069282b ./gcc/gcov.c ! 1843506698b ./gcc/gcov-io.h ! 608033730b ./gcc/gcse.c ! 3926621640b ./gcc/.gdbinit ! 3274885314b ./gcc/genattr.c ! 1086728373b ./gcc/genattrtab.c ! 585144688b ./gcc/gencheck.c ! 3514602915b ./gcc/gencodes.c ! 3134564723b ./gcc/genconfig.c ! 3670112883b ./gcc/genemit.c ! 4073796545b ./gcc/genextract.c ! 4137509142b ./gcc/genflags.c ! 2347823121b ./gcc/gengenrtl.c ! 3431565455b ./gcc/genmultilib ! 2071013330b ./gcc/genopinit.c ! 3255624157b ./gcc/genoutput.c ! 2541130076b ./gcc/genpeep.c ! 3956392696b ./gcc/gen-protos.c ! 3247028598b ./gcc/genrecog.c ! 2490833208b ./gcc/gensupport.c ! 3363828385b ./gcc/gensupport.h ! 1154682720b ./gcc/ggc-callbacks.c ! 4265450004b ./gcc/ggc-common.c ! 181778858b ./gcc/ggc.h ! 3502438694b ./gcc/ggc-none.c ! 1083498216b ./gcc/ggc-page.c ! 513963563b ./gcc/ggc-simple.c 684549565b ./gcc/ginclude/iso646.h - 2766673945b ./gcc/ginclude/math-3300.h - 3047408322b ./gcc/ginclude/math-68881.h - 2851218889b ./gcc/ginclude/ppc-asm.h - 2576905081b ./gcc/ginclude/proto.h 956736189b ./gcc/ginclude/stdarg.h 4095609490b ./gcc/ginclude/stdbool.h ! 888602182b ./gcc/ginclude/stddef.h 673473982b ./gcc/ginclude/varargs.h ! 781372572b ./gcc/glimits.h ! 1473153467b ./gcc/global.c ! 1296086035b ./gcc/gmon.c ! 2371574518b ./gcc/graph.c ! 2390994464b ./gcc/graph.h ! 2127526719b ./gcc/gstab.h 2040904551b ./gcc/gsyms.h 808024354b ./gcc/gsyslimits.h ! 517312911b ./gcc/gthr-aix.h ! 1056858492b ./gcc/gthr-dce.h ! 2337416886b ./gcc/gthr.h ! 1504011079b ./gcc/gthr-posix.h ! 2140486842b ./gcc/gthr-rtems.h ! 2905827269b ./gcc/gthr-single.h ! 1038062946b ./gcc/gthr-solaris.h ! 2035828726b ./gcc/gthr-vxworks.h ! 82508872b ./gcc/gthr-win32.h ! 96676216b ./gcc/haifa-sched.c ! 3418019003b ./gcc/halfpic.c ! 1586005212b ./gcc/halfpic.h ! 1042416722b ./gcc/hard-reg-set.h ! 3760968495b ./gcc/hash.c 2987787285b ./gcc/hash.h ! 3658640867b ./gcc/hwint.h ! 1398051783b ./gcc/ifcvt.c ! 309316919b ./gcc/input.h ! 1198394584b ./gcc/insn-addr.h ! 1849234295b ./gcc/integrate.c ! 2996455768b ./gcc/integrate.h ! 2050167308b ./gcc/intl/bindtextdom.c ! 1933110400b ./gcc/intl.c ! 2763549264b ./gcc/intl/cat-compat.c ! 3231260167b ./gcc/intl/ChangeLog ! 2639631145b ./gcc/intl/dcgettext.c ! 1792432593b ./gcc/intl/dgettext.c ! 4070412658b ./gcc/intl/explodename.c ! 3238681487b ./gcc/intl/finddomain.c ! 1265937805b ./gcc/intl/gettext.c ! 1283023429b ./gcc/intl/gettext.h ! 3071290636b ./gcc/intl/gettextP.h ! 1326021680b ./gcc/intl.h ! 2389284831b ./gcc/intl/hash-string.h ! 1443767269b ./gcc/intl/intl-compat.c ! 2769175672b ./gcc/intl/l10nflist.c ! 1703356123b ./gcc/intl/libgettext.h ! 3263658828b ./gcc/intl/linux-msg.sed ! 3800232883b ./gcc/intl/loadinfo.h ! 1189922637b ./gcc/intl/loadmsgcat.c ! 1839707340b ./gcc/intl/localealias.c ! 2608513953b ./gcc/intl/Makefile.in ! 1800501876b ./gcc/intl/po2tbl.sed.in ! 3722123962b ./gcc/intl/textdomain.c ! 1035788439b ./gcc/intl/VERSION ! 2960721199b ./gcc/intl/xopen-msg.sed ! 3788283147b ./gcc/java/boehm.c ! 2541917855b ./gcc/java/buffer.c 1535113190b ./gcc/java/buffer.h ! 2027575246b ./gcc/java/ChangeLog ! 3525399284b ./gcc/java/chartables.h ! 2664267463b ./gcc/java/check-init.c ! 247804317b ./gcc/java/class.c ! 2038704444b ./gcc/java/config-lang.in ! 3496722225b ./gcc/java/constants.c 640032177b ./gcc/java/convert.h ! 4005572097b ./gcc/java/.cvsignore ! 2740930497b ./gcc/java/decl.c ! 3124910668b ./gcc/java/except.c ! 2881802120b ./gcc/java/expr.c ! 1217663868b ./gcc/java/gcj.info ! 271445606b ./gcc/java/gcj.texi ! 4209811621b ./gcc/java/gen-table.pl ! 3950168328b ./gcc/java/gjavah.c 1545050516b ./gcc/java/java-except.h 1953641142b ./gcc/java/java-opcodes.h 2538410445b ./gcc/java/javaop.def ! 465175220b ./gcc/java/javaop.h ! 266672469b ./gcc/java/java-tree.def ! 102847448b ./gcc/java/java-tree.h 1618392854b ./gcc/java/jcf-depend.c ! 2734013335b ./gcc/java/jcf-dump.c ! 1809110177b ./gcc/java/jcf.h ! 522453936b ./gcc/java/jcf-io.c ! 1036557942b ./gcc/java/jcf-parse.c ! 929522434b ./gcc/java/jcf-path.c 3070824570b ./gcc/java/jcf-reader.c ! 1146326619b ./gcc/java/jcf-write.c ! 2779755583b ./gcc/java/jvgenmain.c ! 2686701189b ./gcc/java/jv-scan.c ! 1154927807b ./gcc/java/jvspec.c ! 3567108747b ./gcc/java/keyword.gperf ! 1595011281b ./gcc/java/keyword.h ! 1733878774b ./gcc/java/lang.c ! 1056131461b ./gcc/java/lang-options.h ! 2810580326b ./gcc/java/lang-specs.h ! 1642003161b ./gcc/java/lex.c ! 1271687574b ./gcc/java/lex.h ! 3199045892b ./gcc/java/Make-lang.in ! 3274830053b ./gcc/java/mangle.c ! 2248284043b ./gcc/java/mangle_name.c ! 374046075b ./gcc/java/parse.c ! 790738941b ./gcc/java/parse.h ! 4269076625b ./gcc/java/parse-scan.c 578153036b ./gcc/java/parse-scan.y ! 3618600566b ./gcc/java/parse.y ! 3137203029b ./gcc/java/typeck.c ! 3386519452b ./gcc/java/verify.c 3207437983b ./gcc/java/xref.c 3070080051b ./gcc/java/xref.h 2742723736b ./gcc/java/zextract.c ! 1368240654b ./gcc/java/zipfile.h ! 3775245805b ./gcc/jump.c ! 2771840517b ./gcc/LANGUAGES ! 3310289094b ./gcc/lcm.c ! 2732284594b ./gcc/libgcc1.c ! 987096986b ./gcc/libgcc1-test.c ! 3770790132b ./gcc/libgcc2.c ! 3947354765b ./gcc/libgcc2.h 1452643639b ./gcc/libgcc-std.ver 2497915666b ./gcc/limitx.h 1045880008b ./gcc/limity.h ! 4116099112b ./gcc/lists.c ! 3899123841b ./gcc/local-alloc.c ! 2278161154b ./gcc/longlong.h ! 2626114710b ./gcc/loop.c ! 3762441882b ./gcc/loop.h ! 983398590b ./gcc/machmode.def ! 2565031954b ./gcc/machmode.h ! 102022123b ./gcc/Makefile.in ! 2729121193b ./gcc/makefile.vms ! 1146561233b ./gcc/make-l2.com ! 1233620396b ./gcc/mbchar.c ! 2058944294b ./gcc/mbchar.h ! 3764019377b ./gcc/mips-tdump.c ! 1819966709b ./gcc/mips-tfile.c ! 72945903b ./gcc/mkconfig.sh ! 1872345184b ./gcc/mkdeps.c ! 1784521594b ./gcc/mkdeps.h 827441351b ./gcc/mkinstalldirs ! 2925172224b ./gcc/mklibgcc.in ! 2364607364b ./gcc/mkmap-flat.awk ! 60626456b ./gcc/mkmap-symver.awk 1597314052b ./gcc/move-if-change ! 175347149b ./gcc/NEWS ! 1290836098b ./gcc/objc/config-lang.in 1966957144b ./gcc/objc/.cvsignore 588115418b ./gcc/objc/lang-options.h ! 2977909645b ./gcc/objc/lang-specs.h ! 2164276951b ./gcc/objc/Make-lang.in ! 4226828284b ./gcc/objc/objc-act.c ! 3444272236b ./gcc/objc/objc-act.h ! 1567868913b ./gcc/objc/objc.gperf ! 1422707573b ./gcc/objc/objc-parse.c ! 3322535695b ./gcc/objc/objc-parse.y ! 620378166b ./gcc/objc/objc-tree.def 3823063152b ./gcc/objc/README ! 408114840b ./gcc/ONEWS ! 3926640974b ./gcc/optabs.c ! 780547048b ./gcc/output.h ! 2930919949b ./gcc/params.c ! 52078911b ./gcc/params.def ! 200901683b ./gcc/params.h ! 1987145824b ./gcc/patch-apollo-includes ! 2625119691b ./gcc/po/cat-id-tbl.c ! 3645263678b ./gcc/po/ChangeLog ! 793353780b ./gcc/po/gcc.pot ! 1909445789b ./gcc/po/Makefile.in.in ! 1504810947b ./gcc/po/POTFILES.in ! 216805921b ./gcc/po/stamp-cat-id ! 426208372b ./gcc/po/sv.po ! 3613543765b ./gcc/predict.c ! 1215810064b ./gcc/prefix.c ! 3118553823b ./gcc/prefix.h ! 1935701222b ./gcc/print-rtl.c ! 1190448249b ./gcc/print-tree.c ! 4192602583b ./gcc/profile.c ! 2243120815b ./gcc/protoize.c ! 3310775363b ./gcc/README-fixinc 2741038711b ./gcc/README.Portability ! 2622627904b ./gcc/real.c ! 1203040742b ./gcc/real.h ! 3488595237b ./gcc/recog.c ! 3792773945b ./gcc/recog.h ! 1357530535b ./gcc/regclass.c ! 2081265358b ./gcc/regmove.c ! 583135114b ./gcc/regrename.c ! 3830393261b ./gcc/regs.h ! 3444596851b ./gcc/reg-stack.c ! 3062408354b ./gcc/reload1.c ! 3006122128b ./gcc/reload.c ! 725417840b ./gcc/reload.h ! 2155579804b ./gcc/reorg.c ! 1244398550b ./gcc/resource.c ! 1586797891b ./gcc/resource.h ! 672511953b ./gcc/rtlanal.c ! 2870047737b ./gcc/rtl.c ! 1510325517b ./gcc/rtl.def ! 425279543b ./gcc/rtl.h ! 1769394538b ./gcc/sbitmap.c ! 2634452046b ./gcc/sbitmap.h ! 2929263455b ./gcc/scan.c ! 3713148128b ./gcc/scan-decls.c ! 1244301251b ./gcc/scan.h 3912741047b ./gcc/scan-types.sh ! 4087293714b ./gcc/sched-deps.c ! 1096437805b ./gcc/sched-ebb.c ! 4098187407b ./gcc/sched-int.h ! 581894034b ./gcc/sched-rgn.c ! 4091631937b ./gcc/sched-vis.c ! 3073218432b ./gcc/sdbout.c ! 4067506551b ./gcc/sdbout.h 1084935625b ./gcc/SERVICE ! 2293681625b ./gcc/sibcall.c ! 149348570b ./gcc/simplify-rtx.c 3345261950b ./gcc/sort-protos ! 4238707268b ./gcc/ssa.c ! 213938074b ./gcc/ssa.h 2395322097b ./gcc/stab.def 471587796b ./gcc/stack.h ! 2583915063b ./gcc/stmt.c ! 3365131970b ./gcc/stor-layout.c ! 1839687809b ./gcc/stringpool.c 567176141b ./gcc/sys-protos.h ! 949648988b ./gcc/system.h 482558466b ./gcc/sys-types.h ! 1793766339b ./gcc/testsuite/ChangeLog 1101480727b ./gcc/testsuite/config/default.exp 2710099993b ./gcc/testsuite/g77.dg/20010216-1.f 1815830648b ./gcc/testsuite/g77.dg/dg.exp 2382988813b ./gcc/testsuite/g77.f-torture/compile/19990218-0.f 687255164b ./gcc/testsuite/g77.f-torture/compile/19990305-0.f 4067537756b ./gcc/testsuite/g77.f-torture/compile/19990419-0.f --- 3029,5122 ---- 3845139066b ./gcc/fixinc/tests/base/tinfo.h 4209310059b ./gcc/fixinc/tests/base/types/vxTypesBase.h 3839547353b ./gcc/fixinc/tests/base/unistd.h + 1242753480b ./gcc/fixinc/tests/base/widec.h 1516247519b ./gcc/fixinc/tests/base/X11/Intrinsic.h 2715935838b ./gcc/fixinc/tests/base/X11/ShellP.h 4147305037b ./gcc/fixinc/tests/base/X11/Xmu.h 3373785317b ./gcc/fixinc/tests/base/Xm/BaseClassI.h 1118590845b ./gcc/fixinc/tests/base/Xm/Traversal.h ! 2236212838b ./gcc/fixproto 1861938661b ./gcc/f/lab.c ! 3674332618b ./gcc/f/lab.h ! 2269802260b ./gcc/flags.h ! 136843109b ./gcc/f/lang-options.h ! 1804470939b ./gcc/f/lang-specs.h ! 4037310288b ./gcc/f/lex.c ! 722310274b ./gcc/f/lex.h ! 1465737068b ./gcc/floatlib.c ! 4159478385b ./gcc/flow.c ! 413109492b ./gcc/f/Make-lang.in ! 3929672430b ./gcc/f/malloc.c ! 1633854048b ./gcc/f/malloc.h 2687881356b ./gcc/f/name.c ! 558328466b ./gcc/f/name.h ! 813263502b ./gcc/f/NEWS 3453379674b ./gcc/f/news0.texi ! 1060861326b ./gcc/f/news.texi ! 2491083781b ./gcc/fold-const.c ! 2696377463b ./gcc/f/parse.c ! 1067232252b ./gcc/f/proj.h ! 3820449811b ./gcc/fp-test.c 281424983b ./gcc/f/README 3295584012b ./gcc/f/RELEASE-PREP ! 3113183884b ./gcc/f/root.texi 2146007539b ./gcc/FSFChangeLog ! 4184732518b ./gcc/FSFChangeLog.10 ! 3797967515b ./gcc/FSFChangeLog.11 3531682397b ./gcc/f/src.c ! 246620254b ./gcc/f/src.h ! 3608541363b ./gcc/f/sta.c ! 520236030b ./gcc/f/sta.h ! 520927036b ./gcc/f/stb.c ! 2810193132b ./gcc/f/stb.h 3466162958b ./gcc/f/st.c ! 502694498b ./gcc/f/stc.c ! 1751601456b ./gcc/f/stc.h ! 260229363b ./gcc/f/std.c ! 1219390242b ./gcc/f/std.h ! 2021799054b ./gcc/f/ste.c ! 1786873989b ./gcc/f/ste.h ! 1705988958b ./gcc/f/st.h 1100581971b ./gcc/f/storag.c ! 790029114b ./gcc/f/storag.h 2404416327b ./gcc/f/stp.c ! 3782361290b ./gcc/f/stp.h 3722860946b ./gcc/f/str-1t.fin 2828127862b ./gcc/f/str-2t.fin 920153914b ./gcc/f/str.c 4215029898b ./gcc/f/str-fo.fin ! 2184386780b ./gcc/f/str.h 281471485b ./gcc/f/str-io.fin 3735910053b ./gcc/f/str-nq.fin 3134124633b ./gcc/f/str-op.fin 2608567153b ./gcc/f/str-ot.fin 610725318b ./gcc/f/sts.c ! 1450832819b ./gcc/f/sts.h ! 2301635495b ./gcc/f/stt.c ! 514307919b ./gcc/f/stt.h ! 3188469687b ./gcc/f/stu.c ! 166252279b ./gcc/f/stu.h 857063390b ./gcc/f/stv.c ! 971049710b ./gcc/f/stv.h 2156320080b ./gcc/f/stw.c ! 3741680211b ./gcc/f/stw.h ! 659922490b ./gcc/f/symbol.c 1323122026b ./gcc/f/symbol.def ! 690030434b ./gcc/f/symbol.h ! 1638259975b ./gcc/f/target.c ! 45862499b ./gcc/f/target.h ! 2698043928b ./gcc/f/top.c ! 2232338664b ./gcc/f/top.h 3443401298b ./gcc/f/type.c ! 2499934202b ./gcc/f/type.h ! 3730312212b ./gcc/function.c ! 316231375b ./gcc/function.h ! 3058774034b ./gcc/future.options ! 182594673b ./gcc/f/version.c ! 1781447679b ./gcc/f/version.h 3584291506b ./gcc/f/where.c ! 819940437b ./gcc/f/where.h ! 1214866690b ./gcc/gbl-ctors.h ! 2405976148b ./gcc/gccbug.in ! 1240604985b ./gcc/gcc.c ! 960741132b ./gcc/gcc.h ! 3093644366b ./gcc/gcc.hlp ! 3633749318b ./gcc/gccspec.c ! 3825112355b ./gcc/gcov.c ! 4197147799b ./gcc/gcov-io.h ! 1895463511b ./gcc/gcse.c ! 802469235b ./gcc/gdbinit.in ! 3638083387b ./gcc/genattr.c ! 3417344932b ./gcc/genattrtab.c ! 2682166046b ./gcc/gencheck.c ! 3810064934b ./gcc/gencodes.c ! 2539346427b ./gcc/genconfig.c ! 2631615302b ./gcc/genconstants.c ! 1628507273b ./gcc/genemit.c ! 2648961261b ./gcc/genextract.c ! 2023228290b ./gcc/genflags.c ! 2713590814b ./gcc/gengenrtl.c ! 2807447281b ./gcc/genmultilib ! 1384421270b ./gcc/genopinit.c ! 4030468350b ./gcc/genoutput.c ! 2221468101b ./gcc/genpeep.c ! 345520579b ./gcc/genpreds.c ! 4293398944b ./gcc/gen-protos.c ! 1766167058b ./gcc/genrecog.c ! 3076545551b ./gcc/gensupport.c ! 1823528383b ./gcc/gensupport.h ! 2561993607b ./gcc/ggc-callbacks.c ! 831448355b ./gcc/ggc-common.c ! 1613425309b ./gcc/ggc.h ! 1943428995b ./gcc/ggc-none.c ! 914540366b ./gcc/ggc-page.c ! 3876596452b ./gcc/ggc-simple.c 684549565b ./gcc/ginclude/iso646.h 956736189b ./gcc/ginclude/stdarg.h 4095609490b ./gcc/ginclude/stdbool.h ! 917377878b ./gcc/ginclude/stddef.h 673473982b ./gcc/ginclude/varargs.h ! 1222982330b ./gcc/glimits.h ! 807066606b ./gcc/global.c ! 991678839b ./gcc/gmon.c ! 4262862037b ./gcc/graph.c ! 2272086758b ./gcc/graph.h ! 2006423200b ./gcc/gstab.h 2040904551b ./gcc/gsyms.h 808024354b ./gcc/gsyslimits.h ! 2343151743b ./gcc/gthr-aix.h ! 3203810708b ./gcc/gthr-dce.h ! 925349290b ./gcc/gthr.h ! 1931993243b ./gcc/gthr-posix.h ! 2000135006b ./gcc/gthr-rtems.h ! 1258851302b ./gcc/gthr-single.h ! 3966292684b ./gcc/gthr-solaris.h ! 4243675148b ./gcc/gthr-vxworks.h ! 3942109358b ./gcc/gthr-win32.h ! 3024578055b ./gcc/haifa-sched.c ! 544018069b ./gcc/halfpic.c ! 2731657470b ./gcc/halfpic.h ! 3590969103b ./gcc/hard-reg-set.h ! 2643914866b ./gcc/hash.c 2987787285b ./gcc/hash.h ! 466224151b ./gcc/hashtable.c ! 126902747b ./gcc/hashtable.h ! 2723232457b ./gcc/hooks.c ! 3941225424b ./gcc/hooks.h ! 519586985b ./gcc/hwint.h ! 1355524844b ./gcc/ifcvt.c ! 3686080794b ./gcc/input.h ! 2324132584b ./gcc/insn-addr.h ! 3004940478b ./gcc/integrate.c ! 1320722832b ./gcc/integrate.h ! 3847321727b ./gcc/intl/bindtextdom.c ! 3277280645b ./gcc/intl.c ! 1128940412b ./gcc/intl/ChangeLog ! 3698301396b ./gcc/intl/config.charset ! 3683549278b ./gcc/intl/dcgettext.c ! 1537282354b ./gcc/intl/dcigettext.c ! 4252721850b ./gcc/intl/dcngettext.c ! 3231507403b ./gcc/intl/dgettext.c ! 1989280280b ./gcc/intl/dngettext.c ! 3422232669b ./gcc/intl/explodename.c ! 745873491b ./gcc/intl/finddomain.c ! 3807651580b ./gcc/intl/gettext.c ! 864082220b ./gcc/intl/gettext.h ! 959917220b ./gcc/intl/gettextP.h ! 2379664116b ./gcc/intl.h ! 3470048606b ./gcc/intl/hash-string.h ! 3803759614b ./gcc/intl/intl-compat.c ! 3500562604b ./gcc/intl/l10nflist.c ! 863021802b ./gcc/intl/libgettext.h ! 21199758b ./gcc/intl/libgnuintl.h ! 105544597b ./gcc/intl/loadinfo.h ! 2094146432b ./gcc/intl/loadmsgcat.c ! 934932803b ./gcc/intl/localcharset.c ! 3093413149b ./gcc/intl/locale.alias ! 2364750309b ./gcc/intl/localealias.c ! 680616337b ./gcc/intl/Makefile.in ! 2022997717b ./gcc/intl/ngettext.c ! 543478295b ./gcc/intl/plural.c ! 1047167798b ./gcc/intl/plural.y ! 409545719b ./gcc/intl/ref-add.sin ! 1121743739b ./gcc/intl/ref-del.sin ! 1971238900b ./gcc/intl/textdomain.c ! 1166279255b ./gcc/intl/VERSION ! 1752055498b ./gcc/java/boehm.c ! 3814965188b ./gcc/java/buffer.c 1535113190b ./gcc/java/buffer.h ! 637702143b ./gcc/java/builtins.c ! 1744468759b ./gcc/java/ChangeLog ! 2409493226b ./gcc/java/chartables.h ! 1544711683b ./gcc/java/check-init.c ! 3161785437b ./gcc/java/class.c ! 2672598613b ./gcc/java/config-lang.in ! 70342256b ./gcc/java/constants.c 640032177b ./gcc/java/convert.h ! 503022028b ./gcc/java/.cvsignore ! 698834578b ./gcc/java/decl.c ! 1301173842b ./gcc/java/except.c ! 571765061b ./gcc/java/expr.c ! 993757941b ./gcc/java/gcj.1 ! 3116633542b ./gcc/java/gcjh.1 ! 4005049153b ./gcc/java/gcj.info ! 3864487285b ./gcc/java/gcj.info-1 ! 4154067378b ./gcc/java/gcj.info-2 ! 2722885402b ./gcc/java/gcj.texi ! 533046670b ./gcc/java/gen-table.pl ! 4288959057b ./gcc/java/gij.1 ! 2862690686b ./gcc/java/gjavah.c 1545050516b ./gcc/java/java-except.h 1953641142b ./gcc/java/java-opcodes.h 2538410445b ./gcc/java/javaop.def ! 872575611b ./gcc/java/javaop.h ! 2113802419b ./gcc/java/java-tree.def ! 3438770006b ./gcc/java/java-tree.h 1618392854b ./gcc/java/jcf-depend.c ! 3695596248b ./gcc/java/jcf-dump.1 ! 1347786459b ./gcc/java/jcf-dump.c ! 1959768790b ./gcc/java/jcf.h ! 1121076730b ./gcc/java/jcf-io.c ! 981094631b ./gcc/java/jcf-parse.c ! 3535720077b ./gcc/java/jcf-path.c 3070824570b ./gcc/java/jcf-reader.c ! 203601536b ./gcc/java/jcf-write.c ! 832738066b ./gcc/java/jv-convert.1 ! 3805988298b ./gcc/java/jvgenmain.c ! 1596066572b ./gcc/java/jv-scan.1 ! 3491242747b ./gcc/java/jv-scan.c ! 686969605b ./gcc/java/jvspec.c ! 3733396854b ./gcc/java/keyword.gperf ! 3748734913b ./gcc/java/keyword.h ! 3104736611b ./gcc/java/lang.c ! 366330104b ./gcc/java/lang-options.h ! 3731853870b ./gcc/java/lang-specs.h ! 930602719b ./gcc/java/lex.c ! 1057768549b ./gcc/java/lex.h ! 497222224b ./gcc/java/Make-lang.in ! 1290236487b ./gcc/java/mangle.c ! 624686086b ./gcc/java/mangle_name.c ! 262407679b ./gcc/java/parse.c ! 924019294b ./gcc/java/parse.h ! 1747279160b ./gcc/java/parse-scan.c 578153036b ./gcc/java/parse-scan.y ! 2403790794b ./gcc/java/parse.y ! 3494194353b ./gcc/java/rmic.1 ! 297385148b ./gcc/java/rmiregistry.1 ! 2066605666b ./gcc/java/typeck.c ! 173829162b ./gcc/java/verify.c 3207437983b ./gcc/java/xref.c 3070080051b ./gcc/java/xref.h 2742723736b ./gcc/java/zextract.c ! 1459175152b ./gcc/java/zipfile.h ! 2231553098b ./gcc/jump.c ! 1661628068b ./gcc/langhooks.c ! 4260985447b ./gcc/langhooks-def.h ! 1614772535b ./gcc/langhooks.h ! 4134111346b ./gcc/LANGUAGES ! 2367190261b ./gcc/lcm.c ! 2318627229b ./gcc/libfuncs.h ! 668464634b ./gcc/libgcc2.c ! 3671718625b ./gcc/libgcc2.h 1452643639b ./gcc/libgcc-std.ver 2497915666b ./gcc/limitx.h 1045880008b ./gcc/limity.h ! 1060915850b ./gcc/line-map.c ! 3486158933b ./gcc/line-map.h ! 2698117766b ./gcc/lists.c ! 4192676218b ./gcc/local-alloc.c ! 830917499b ./gcc/longlong.h ! 1461498478b ./gcc/loop.c ! 1864476849b ./gcc/loop.h ! 2150704349b ./gcc/machmode.def ! 3928982379b ./gcc/machmode.h ! 189930733b ./gcc/main.c ! 451556994b ./gcc/Makefile.in ! 501600506b ./gcc/mbchar.c ! 1508701785b ./gcc/mbchar.h ! 886384654b ./gcc/mips-tdump.c ! 4187769843b ./gcc/mips-tfile.c ! 3936313187b ./gcc/mkconfig.sh ! 217659056b ./gcc/mkdeps.c ! 3976112005b ./gcc/mkdeps.h 827441351b ./gcc/mkinstalldirs ! 461862408b ./gcc/mklibgcc.in ! 4201050746b ./gcc/mkmap-flat.awk ! 2827346461b ./gcc/mkmap-symver.awk 1597314052b ./gcc/move-if-change ! 1276076168b ./gcc/NEWS ! 4010954163b ./gcc/objc/config-lang.in 1966957144b ./gcc/objc/.cvsignore 588115418b ./gcc/objc/lang-options.h ! 852310047b ./gcc/objc/lang-specs.h ! 3983694173b ./gcc/objc/Make-lang.in ! 3712044081b ./gcc/objc/objc-act.c ! 2554922770b ./gcc/objc/objc-act.h ! 2553643590b ./gcc/objc/objc-lang.c ! 1948940216b ./gcc/objc/objc-parse.c ! 2631161308b ./gcc/objc/objc-parse.y ! 688475759b ./gcc/objc/objc-tree.def 3823063152b ./gcc/objc/README ! 538471119b ./gcc/ONEWS ! 2124113523b ./gcc/optabs.c ! 3971816206b ./gcc/optabs.h ! 151133448b ./gcc/output.h ! 1911824904b ./gcc/params.c ! 2474575794b ./gcc/params.def ! 840880994b ./gcc/params.h ! 258167758b ./gcc/po/ChangeLog ! 275286308b ./gcc/po/da.gmo ! 276047898b ./gcc/po/da.po ! 4175362661b ./gcc/po/el.gmo ! 1399154149b ./gcc/po/el.po ! 1592121868b ./gcc/po/es.gmo ! 239486157b ./gcc/po/es.po ! 4281232887b ./gcc/po/EXCLUDES ! 234060324b ./gcc/po/exgettext ! 3271137864b ./gcc/po/fr.gmo ! 641572084b ./gcc/po/fr.po ! 953510881b ./gcc/po/gcc.pot ! 810430188b ./gcc/po/ja.gmo ! 2505973891b ./gcc/po/ja.po ! 3002010451b ./gcc/po/nl.gmo ! 934957733b ./gcc/po/nl.po ! 3351765398b ./gcc/po/sv.gmo ! 1330626989b ./gcc/po/sv.po ! 866561722b ./gcc/po/tr.gmo ! 3345738807b ./gcc/po/tr.po ! 1839892656b ./gcc/predict.c ! 1371462395b ./gcc/predict.def ! 204342296b ./gcc/predict.h ! 542352850b ./gcc/prefix.c ! 3203071066b ./gcc/prefix.h ! 2033099595b ./gcc/print-rtl.c ! 417163997b ./gcc/print-tree.c ! 2666623009b ./gcc/profile.c ! 1610870410b ./gcc/protoize.c ! 2799003008b ./gcc/README-fixinc 2741038711b ./gcc/README.Portability ! 2723074973b ./gcc/read-rtl.c ! 2962281463b ./gcc/real.c ! 2885483337b ./gcc/real.h ! 3525476493b ./gcc/recog.c ! 2056680576b ./gcc/recog.h ! 1439133939b ./gcc/regclass.c ! 3658385705b ./gcc/regmove.c ! 113125100b ./gcc/regrename.c ! 3100477763b ./gcc/regs.h ! 3483199254b ./gcc/reg-stack.c ! 2251681177b ./gcc/reload1.c ! 1426129688b ./gcc/reload.c ! 834085082b ./gcc/reload.h ! 4167441145b ./gcc/reorg.c ! 2715704724b ./gcc/resource.c ! 2605579460b ./gcc/resource.h ! 1675583813b ./gcc/rtlanal.c ! 2800367218b ./gcc/rtl.c ! 3964111654b ./gcc/rtl.def ! 3490774286b ./gcc/rtl-error.c ! 591657889b ./gcc/rtl.h ! 1989258075b ./gcc/sbitmap.c ! 3201428436b ./gcc/sbitmap.h ! 324348149b ./gcc/scan.c ! 1702118899b ./gcc/scan-decls.c ! 339714129b ./gcc/scan.h 3912741047b ./gcc/scan-types.sh ! 1385416186b ./gcc/sched-deps.c ! 3568403641b ./gcc/sched-ebb.c ! 3539655811b ./gcc/sched-int.h ! 2565292623b ./gcc/sched-rgn.c ! 2176345645b ./gcc/sched-vis.c ! 3014933100b ./gcc/sdbout.c ! 1391855772b ./gcc/sdbout.h 1084935625b ./gcc/SERVICE ! 3262529120b ./gcc/sibcall.c ! 63942362b ./gcc/simplify-rtx.c 3345261950b ./gcc/sort-protos ! 3157302619b ./gcc/ssa.c ! 3407562807b ./gcc/ssa-ccp.c ! 2078369101b ./gcc/ssa-dce.c ! 332547863b ./gcc/ssa.h 2395322097b ./gcc/stab.def 471587796b ./gcc/stack.h ! 3088505215b ./gcc/stmt.c ! 2004713279b ./gcc/stor-layout.c ! 3515875777b ./gcc/stringpool.c 567176141b ./gcc/sys-protos.h ! 3262209488b ./gcc/system.h 482558466b ./gcc/sys-types.h ! 293723253b ./gcc/target-def.h ! 4078089769b ./gcc/target.h ! 3370929021b ./gcc/testsuite/ChangeLog 1101480727b ./gcc/testsuite/config/default.exp + 3657217366b ./gcc/testsuite/consistency.vlad/layout/a-char.c + 2814769741b ./gcc/testsuite/consistency.vlad/layout/a-double.c + 789833107b ./gcc/testsuite/consistency.vlad/layout/a-float.c + 1654384929b ./gcc/testsuite/consistency.vlad/layout/a-int.c + 4146459649b ./gcc/testsuite/consistency.vlad/layout/align-bool.cpp + 2242642270b ./gcc/testsuite/consistency.vlad/layout/align-char.c + 1789069487b ./gcc/testsuite/consistency.vlad/layout/align-double.c + 2365706302b ./gcc/testsuite/consistency.vlad/layout/align-float.c + 1139013298b ./gcc/testsuite/consistency.vlad/layout/align-int.c + 2305175273b ./gcc/testsuite/consistency.vlad/layout/align-long.c + 1683867594b ./gcc/testsuite/consistency.vlad/layout/align-longdouble.c + 2116189486b ./gcc/testsuite/consistency.vlad/layout/align-longlong.c + 3775705613b ./gcc/testsuite/consistency.vlad/layout/align-pointer.c + 3243328118b ./gcc/testsuite/consistency.vlad/layout/align-ptrdiff.c + 3355052908b ./gcc/testsuite/consistency.vlad/layout/align-short.c + 2446562994b ./gcc/testsuite/consistency.vlad/layout/align-size.c + 4125888825b ./gcc/testsuite/consistency.vlad/layout/align-wchar.c + 4126836986b ./gcc/testsuite/consistency.vlad/layout/a-long.c + 2082883507b ./gcc/testsuite/consistency.vlad/layout/a-longdouble.c + 1870550230b ./gcc/testsuite/consistency.vlad/layout/a-longlong.c + 836566472b ./gcc/testsuite/consistency.vlad/layout/a-of-s-char.c + 808556227b ./gcc/testsuite/consistency.vlad/layout/a-of-s-double.c + 3993719731b ./gcc/testsuite/consistency.vlad/layout/a-of-s-float.c + 783523024b ./gcc/testsuite/consistency.vlad/layout/a-of-s-int.c + 942819612b ./gcc/testsuite/consistency.vlad/layout/a-of-s-long.c + 3646710863b ./gcc/testsuite/consistency.vlad/layout/a-of-s-longdouble.c + 3060876629b ./gcc/testsuite/consistency.vlad/layout/a-of-s-longlong.c + 3104817372b ./gcc/testsuite/consistency.vlad/layout/a-of-s-pointer.c + 1147565030b ./gcc/testsuite/consistency.vlad/layout/a-of-s-ptrdiff_t.c + 418802581b ./gcc/testsuite/consistency.vlad/layout/a-of-s-short.c + 141666140b ./gcc/testsuite/consistency.vlad/layout/a-pointer.c + 420085095b ./gcc/testsuite/consistency.vlad/layout/a-ptrdiff_t.c + 3218633480b ./gcc/testsuite/consistency.vlad/layout/a-short.c + 1126124139b ./gcc/testsuite/consistency.vlad/layout/a-size_t.c + 3526110053b ./gcc/testsuite/consistency.vlad/layout/a-wchar_t.c + 3324795146b ./gcc/testsuite/consistency.vlad/layout/biggest-field-align.c + 1487466473b ./gcc/testsuite/consistency.vlad/layout/c-char-1-c-char.cpp + 3519286859b ./gcc/testsuite/consistency.vlad/layout/c-char-1-c-double.cpp + 1910397221b ./gcc/testsuite/consistency.vlad/layout/c-char-1-c-float.cpp + 2051738332b ./gcc/testsuite/consistency.vlad/layout/c-char-1-c-int.cpp + 2064124916b ./gcc/testsuite/consistency.vlad/layout/c-char-1-c-long.cpp + 2713877479b ./gcc/testsuite/consistency.vlad/layout/c-char-1-c-longdouble.cpp + 1809060976b ./gcc/testsuite/consistency.vlad/layout/c-char-1-c-longlong.cpp + 1381436129b ./gcc/testsuite/consistency.vlad/layout/c-char-1-c-pointer.cpp + 3954863954b ./gcc/testsuite/consistency.vlad/layout/c-char-1-c-short.cpp + 1129753509b ./gcc/testsuite/consistency.vlad/layout/c-char-2-c-char.cpp + 152778947b ./gcc/testsuite/consistency.vlad/layout/c-char-2-c-double.cpp + 3158222807b ./gcc/testsuite/consistency.vlad/layout/c-char-2-c-float.cpp + 724995923b ./gcc/testsuite/consistency.vlad/layout/c-char-2-c-int.cpp + 2244023836b ./gcc/testsuite/consistency.vlad/layout/c-char-2-c-long.cpp + 1820645651b ./gcc/testsuite/consistency.vlad/layout/c-char-2-c-longdouble.cpp + 2590987120b ./gcc/testsuite/consistency.vlad/layout/c-char-2-c-longlong.cpp + 2721353414b ./gcc/testsuite/consistency.vlad/layout/c-char-2-c-pointer.cpp + 647549268b ./gcc/testsuite/consistency.vlad/layout/c-char-2-c-short.cpp + 698855560b ./gcc/testsuite/consistency.vlad/layout/c-double-1-c-char.cpp + 1810672926b ./gcc/testsuite/consistency.vlad/layout/c-double-1-c-double.cpp + 882201712b ./gcc/testsuite/consistency.vlad/layout/c-double-1-c-float.cpp + 1868861566b ./gcc/testsuite/consistency.vlad/layout/c-double-1-c-int.cpp + 1504966725b ./gcc/testsuite/consistency.vlad/layout/c-double-1-c-long.cpp + 2848245738b ./gcc/testsuite/consistency.vlad/layout/c-double-1-c-longdouble.cpp + 323482860b ./gcc/testsuite/consistency.vlad/layout/c-double-1-c-longlong.cpp + 1719416020b ./gcc/testsuite/consistency.vlad/layout/c-double-1-c-pointer.cpp + 3378135217b ./gcc/testsuite/consistency.vlad/layout/c-double-1-c-short.cpp + 4238608616b ./gcc/testsuite/consistency.vlad/layout/c-double-2-c-char.cpp + 3694666869b ./gcc/testsuite/consistency.vlad/layout/c-double-2-c-double.cpp + 3134966605b ./gcc/testsuite/consistency.vlad/layout/c-double-2-c-float.cpp + 2693193737b ./gcc/testsuite/consistency.vlad/layout/c-double-2-c-int.cpp + 3803963296b ./gcc/testsuite/consistency.vlad/layout/c-double-2-c-long.cpp + 184829139b ./gcc/testsuite/consistency.vlad/layout/c-double-2-c-longdouble.cpp + 2949968343b ./gcc/testsuite/consistency.vlad/layout/c-double-2-c-longlong.cpp + 2009543278b ./gcc/testsuite/consistency.vlad/layout/c-double-2-c-pointer.cpp + 44469885b ./gcc/testsuite/consistency.vlad/layout/c-double-2-c-short.cpp + 558923497b ./gcc/testsuite/consistency.vlad/layout/c-float-1-c-char.cpp + 3523046577b ./gcc/testsuite/consistency.vlad/layout/c-float-1-c-double.cpp + 1275327467b ./gcc/testsuite/consistency.vlad/layout/c-float-1-c-float.cpp + 3922774992b ./gcc/testsuite/consistency.vlad/layout/c-float-1-c-int.cpp + 2704908269b ./gcc/testsuite/consistency.vlad/layout/c-float-1-c-long.cpp + 3193901260b ./gcc/testsuite/consistency.vlad/layout/c-float-1-c-longdouble.cpp + 436514518b ./gcc/testsuite/consistency.vlad/layout/c-float-1-c-longlong.cpp + 2452020808b ./gcc/testsuite/consistency.vlad/layout/c-float-1-c-pointer.cpp + 418251021b ./gcc/testsuite/consistency.vlad/layout/c-float-1-c-short.cpp + 2667439235b ./gcc/testsuite/consistency.vlad/layout/c-float-2-c-char.cpp + 2881981590b ./gcc/testsuite/consistency.vlad/layout/c-float-2-c-double.cpp + 3201780621b ./gcc/testsuite/consistency.vlad/layout/c-float-2-c-float.cpp + 3375452217b ./gcc/testsuite/consistency.vlad/layout/c-float-2-c-int.cpp + 2468199592b ./gcc/testsuite/consistency.vlad/layout/c-float-2-c-long.cpp + 3842914089b ./gcc/testsuite/consistency.vlad/layout/c-float-2-c-longdouble.cpp + 114905404b ./gcc/testsuite/consistency.vlad/layout/c-float-2-c-longlong.cpp + 1497679777b ./gcc/testsuite/consistency.vlad/layout/c-float-2-c-pointer.cpp + 143833974b ./gcc/testsuite/consistency.vlad/layout/c-float-2-c-short.cpp + 1543978137b ./gcc/testsuite/consistency.vlad/layout/c-int-1-c-char.cpp + 4270896237b ./gcc/testsuite/consistency.vlad/layout/c-int-1-c-double.cpp + 4263740047b ./gcc/testsuite/consistency.vlad/layout/c-int-1-c-float.cpp + 1779635362b ./gcc/testsuite/consistency.vlad/layout/c-int-1-c-int.cpp + 743837724b ./gcc/testsuite/consistency.vlad/layout/c-int-1-c-long.cpp + 3224784467b ./gcc/testsuite/consistency.vlad/layout/c-int-1-c-longdouble.cpp + 3401381192b ./gcc/testsuite/consistency.vlad/layout/c-int-1-c-longlong.cpp + 3737012303b ./gcc/testsuite/consistency.vlad/layout/c-int-1-c-pointer.cpp + 2370648943b ./gcc/testsuite/consistency.vlad/layout/c-int-1-c-short.cpp + 4055775560b ./gcc/testsuite/consistency.vlad/layout/c-int-2-c-char.cpp + 4043145228b ./gcc/testsuite/consistency.vlad/layout/c-int-2-c-double.cpp + 1704557853b ./gcc/testsuite/consistency.vlad/layout/c-int-2-c-float.cpp + 360364552b ./gcc/testsuite/consistency.vlad/layout/c-int-2-c-int.cpp + 1401787792b ./gcc/testsuite/consistency.vlad/layout/c-int-2-c-long.cpp + 1019203678b ./gcc/testsuite/consistency.vlad/layout/c-int-2-c-longdouble.cpp + 3230342428b ./gcc/testsuite/consistency.vlad/layout/c-int-2-c-longlong.cpp + 443814793b ./gcc/testsuite/consistency.vlad/layout/c-int-2-c-pointer.cpp + 986131700b ./gcc/testsuite/consistency.vlad/layout/c-int-2-c-short.cpp + 1839888072b ./gcc/testsuite/consistency.vlad/layout/class-char-and-virtual.cpp + 2259371507b ./gcc/testsuite/consistency.vlad/layout/class-double-and-virtual.cpp + 3308691044b ./gcc/testsuite/consistency.vlad/layout/class-float-and-virtual.cpp + 4237514561b ./gcc/testsuite/consistency.vlad/layout/class-int-and-virtual.cpp + 3380766571b ./gcc/testsuite/consistency.vlad/layout/class-long-and-virtual.cpp + 815671556b ./gcc/testsuite/consistency.vlad/layout/class-longdouble-and-virtual.cpp + 3694413639b ./gcc/testsuite/consistency.vlad/layout/class-longlong-and-virtual.cpp + 361431068b ./gcc/testsuite/consistency.vlad/layout/class-pointer-and-virtual.cpp + 4030637509b ./gcc/testsuite/consistency.vlad/layout/class-short-and-virtual.cpp + 3640144004b ./gcc/testsuite/consistency.vlad/layout/c-long-1-c-char.cpp + 3170239534b ./gcc/testsuite/consistency.vlad/layout/c-long-1-c-double.cpp + 1373364368b ./gcc/testsuite/consistency.vlad/layout/c-long-1-c-float.cpp + 2715489812b ./gcc/testsuite/consistency.vlad/layout/c-long-1-c-int.cpp + 4216902809b ./gcc/testsuite/consistency.vlad/layout/c-long-1-c-long.cpp + 2020353215b ./gcc/testsuite/consistency.vlad/layout/c-long-1-c-longdouble.cpp + 143021478b ./gcc/testsuite/consistency.vlad/layout/c-long-1-c-longlong.cpp + 288494342b ./gcc/testsuite/consistency.vlad/layout/c-long-1-c-pointer.cpp + 3418347239b ./gcc/testsuite/consistency.vlad/layout/c-long-1-c-short.cpp + 391993576b ./gcc/testsuite/consistency.vlad/layout/c-long-2-c-char.cpp + 1825915999b ./gcc/testsuite/consistency.vlad/layout/c-long-2-c-double.cpp + 3270317833b ./gcc/testsuite/consistency.vlad/layout/c-long-2-c-float.cpp + 1164900700b ./gcc/testsuite/consistency.vlad/layout/c-long-2-c-int.cpp + 3519735121b ./gcc/testsuite/consistency.vlad/layout/c-long-2-c-long.cpp + 690915349b ./gcc/testsuite/consistency.vlad/layout/c-long-2-c-longdouble.cpp + 952863529b ./gcc/testsuite/consistency.vlad/layout/c-long-2-c-longlong.cpp + 1541971925b ./gcc/testsuite/consistency.vlad/layout/c-long-2-c-pointer.cpp + 1481335178b ./gcc/testsuite/consistency.vlad/layout/c-long-2-c-short.cpp + 1034111645b ./gcc/testsuite/consistency.vlad/layout/c-longdouble-1-c-char.cpp + 223428769b ./gcc/testsuite/consistency.vlad/layout/c-longdouble-1-c-double.cpp + 1686950830b ./gcc/testsuite/consistency.vlad/layout/c-longdouble-1-c-float.cpp + 4007796170b ./gcc/testsuite/consistency.vlad/layout/c-longdouble-1-c-int.cpp + 1430297307b ./gcc/testsuite/consistency.vlad/layout/c-longdouble-1-c-long.cpp + 1762615105b ./gcc/testsuite/consistency.vlad/layout/c-longdouble-1-c-longdouble.cpp + 455084292b ./gcc/testsuite/consistency.vlad/layout/c-longdouble-1-c-longlong.cpp + 989738191b ./gcc/testsuite/consistency.vlad/layout/c-longdouble-1-c-pointer.cpp + 2328224637b ./gcc/testsuite/consistency.vlad/layout/c-longdouble-1-c-short.cpp + 1760745939b ./gcc/testsuite/consistency.vlad/layout/c-longdouble-2-c-char.cpp + 1217350634b ./gcc/testsuite/consistency.vlad/layout/c-longdouble-2-c-double.cpp + 4225543090b ./gcc/testsuite/consistency.vlad/layout/c-longdouble-2-c-float.cpp + 1922520334b ./gcc/testsuite/consistency.vlad/layout/c-longdouble-2-c-int.cpp + 124367783b ./gcc/testsuite/consistency.vlad/layout/c-longdouble-2-c-long.cpp + 2219449090b ./gcc/testsuite/consistency.vlad/layout/c-longdouble-2-c-longdouble.cpp + 1757646669b ./gcc/testsuite/consistency.vlad/layout/c-longdouble-2-c-longlong.cpp + 1035759316b ./gcc/testsuite/consistency.vlad/layout/c-longdouble-2-c-pointer.cpp + 444856555b ./gcc/testsuite/consistency.vlad/layout/c-longdouble-2-c-short.cpp + 1826856781b ./gcc/testsuite/consistency.vlad/layout/c-longlong-1-c-char.cpp + 1741302927b ./gcc/testsuite/consistency.vlad/layout/c-longlong-1-c-double.cpp + 4120602989b ./gcc/testsuite/consistency.vlad/layout/c-longlong-1-c-float.cpp + 1561431628b ./gcc/testsuite/consistency.vlad/layout/c-longlong-1-c-int.cpp + 1058278587b ./gcc/testsuite/consistency.vlad/layout/c-longlong-1-c-long.cpp + 4082939652b ./gcc/testsuite/consistency.vlad/layout/c-longlong-1-c-longdouble.cpp + 4091778481b ./gcc/testsuite/consistency.vlad/layout/c-longlong-1-c-longlong.cpp + 2537874539b ./gcc/testsuite/consistency.vlad/layout/c-longlong-1-c-pointer.cpp + 1697718289b ./gcc/testsuite/consistency.vlad/layout/c-longlong-1-c-short.cpp + 4035527714b ./gcc/testsuite/consistency.vlad/layout/c-longlong-2-c-char.cpp + 2229850447b ./gcc/testsuite/consistency.vlad/layout/c-longlong-2-c-double.cpp + 2643791394b ./gcc/testsuite/consistency.vlad/layout/c-longlong-2-c-float.cpp + 925524845b ./gcc/testsuite/consistency.vlad/layout/c-longlong-2-c-int.cpp + 463155534b ./gcc/testsuite/consistency.vlad/layout/c-longlong-2-c-long.cpp + 2018895918b ./gcc/testsuite/consistency.vlad/layout/c-longlong-2-c-longdouble.cpp + 737052449b ./gcc/testsuite/consistency.vlad/layout/c-longlong-2-c-longlong.cpp + 3847946387b ./gcc/testsuite/consistency.vlad/layout/c-longlong-2-c-pointer.cpp + 1651679595b ./gcc/testsuite/consistency.vlad/layout/c-longlong-2-c-short.cpp + 1442225884b ./gcc/testsuite/consistency.vlad/layout/c-pointer-1-c-char.cpp + 86231492b ./gcc/testsuite/consistency.vlad/layout/c-pointer-1-c-double.cpp + 3039612943b ./gcc/testsuite/consistency.vlad/layout/c-pointer-1-c-float.cpp + 4268774855b ./gcc/testsuite/consistency.vlad/layout/c-pointer-1-c-int.cpp + 1989685785b ./gcc/testsuite/consistency.vlad/layout/c-pointer-1-c-long.cpp + 1765842423b ./gcc/testsuite/consistency.vlad/layout/c-pointer-1-c-longdouble.cpp + 3566620692b ./gcc/testsuite/consistency.vlad/layout/c-pointer-1-c-longlong.cpp + 1511217411b ./gcc/testsuite/consistency.vlad/layout/c-pointer-1-c-pointer.cpp + 146891497b ./gcc/testsuite/consistency.vlad/layout/c-pointer-1-c-short.cpp + 1203621554b ./gcc/testsuite/consistency.vlad/layout/c-pointer-2-c-char.cpp + 1661672620b ./gcc/testsuite/consistency.vlad/layout/c-pointer-2-c-double.cpp + 3464981922b ./gcc/testsuite/consistency.vlad/layout/c-pointer-2-c-float.cpp + 2162290685b ./gcc/testsuite/consistency.vlad/layout/c-pointer-2-c-int.cpp + 3458760843b ./gcc/testsuite/consistency.vlad/layout/c-pointer-2-c-long.cpp + 1723971678b ./gcc/testsuite/consistency.vlad/layout/c-pointer-2-c-longdouble.cpp + 2772502076b ./gcc/testsuite/consistency.vlad/layout/c-pointer-2-c-longlong.cpp + 1617244322b ./gcc/testsuite/consistency.vlad/layout/c-pointer-2-c-pointer.cpp + 2107205209b ./gcc/testsuite/consistency.vlad/layout/c-pointer-2-c-short.cpp + 2637993722b ./gcc/testsuite/consistency.vlad/layout/c-short-1-c-char.cpp + 2593108653b ./gcc/testsuite/consistency.vlad/layout/c-short-1-c-double.cpp + 2285678779b ./gcc/testsuite/consistency.vlad/layout/c-short-1-c-float.cpp + 4058415376b ./gcc/testsuite/consistency.vlad/layout/c-short-1-c-int.cpp + 492140542b ./gcc/testsuite/consistency.vlad/layout/c-short-1-c-long.cpp + 2044765763b ./gcc/testsuite/consistency.vlad/layout/c-short-1-c-longdouble.cpp + 3012275733b ./gcc/testsuite/consistency.vlad/layout/c-short-1-c-longlong.cpp + 1369560784b ./gcc/testsuite/consistency.vlad/layout/c-short-1-c-pointer.cpp + 3704701533b ./gcc/testsuite/consistency.vlad/layout/c-short-1-c-short.cpp + 3281843471b ./gcc/testsuite/consistency.vlad/layout/c-short-2-c-char.cpp + 1657812194b ./gcc/testsuite/consistency.vlad/layout/c-short-2-c-double.cpp + 2415256428b ./gcc/testsuite/consistency.vlad/layout/c-short-2-c-float.cpp + 1236964140b ./gcc/testsuite/consistency.vlad/layout/c-short-2-c-int.cpp + 3464277284b ./gcc/testsuite/consistency.vlad/layout/c-short-2-c-long.cpp + 3737764099b ./gcc/testsuite/consistency.vlad/layout/c-short-2-c-longdouble.cpp + 4128191352b ./gcc/testsuite/consistency.vlad/layout/c-short-2-c-longlong.cpp + 249914684b ./gcc/testsuite/consistency.vlad/layout/c-short-2-c-pointer.cpp + 967840663b ./gcc/testsuite/consistency.vlad/layout/c-short-2-c-short.cpp + 3227054482b ./gcc/testsuite/consistency.vlad/layout/endian.c + 3691894150b ./gcc/testsuite/consistency.vlad/layout/f-0-0-5.c + 2906280459b ./gcc/testsuite/consistency.vlad/layout/f-0-20-17.c + 4153795460b ./gcc/testsuite/consistency.vlad/layout/f-0-24-24.c + 2223677750b ./gcc/testsuite/consistency.vlad/layout/f-10-11-10.c + 1656961235b ./gcc/testsuite/consistency.vlad/layout/f-11-12-10.c + 2616499905b ./gcc/testsuite/consistency.vlad/layout/f-1-21-31.c + 877204714b ./gcc/testsuite/consistency.vlad/layout/f-1-3-1.c + 628897670b ./gcc/testsuite/consistency.vlad/layout/f-14-22-10.c + 2499257242b ./gcc/testsuite/consistency.vlad/layout/f-14-29-30.c + 1116508393b ./gcc/testsuite/consistency.vlad/layout/f-14-31-26.c + 3215710590b ./gcc/testsuite/consistency.vlad/layout/f-14-8-9.c + 2598471587b ./gcc/testsuite/consistency.vlad/layout/f-15-1-22.c + 1235023325b ./gcc/testsuite/consistency.vlad/layout/f-16-30-15.c + 3175789490b ./gcc/testsuite/consistency.vlad/layout/f-17-17-20.c + 1483764145b ./gcc/testsuite/consistency.vlad/layout/f-17-17-2.c + 2825171767b ./gcc/testsuite/consistency.vlad/layout/f-17-21-17.c + 3571484701b ./gcc/testsuite/consistency.vlad/layout/f-18-15-30.c + 325844328b ./gcc/testsuite/consistency.vlad/layout/f-18-26-0.c + 4067860400b ./gcc/testsuite/consistency.vlad/layout/f-18-26-11.c + 1812484656b ./gcc/testsuite/consistency.vlad/layout/f-18-4-17.c + 3026961559b ./gcc/testsuite/consistency.vlad/layout/f-18-5-16.c + 3538065200b ./gcc/testsuite/consistency.vlad/layout/f-19-6-22.c + 2636321909b ./gcc/testsuite/consistency.vlad/layout/f-20-19-9.c + 4072544979b ./gcc/testsuite/consistency.vlad/layout/f-20-20-15.c + 3513144108b ./gcc/testsuite/consistency.vlad/layout/f-20-26-14.c + 413528084b ./gcc/testsuite/consistency.vlad/layout/f-21-16-24.c + 2389669149b ./gcc/testsuite/consistency.vlad/layout/f-21-19-4.c + 1161583564b ./gcc/testsuite/consistency.vlad/layout/f-21-22-1.c + 3107982509b ./gcc/testsuite/consistency.vlad/layout/f-21-24-20.c + 1590859529b ./gcc/testsuite/consistency.vlad/layout/f-21-5-26.c + 1027772335b ./gcc/testsuite/consistency.vlad/layout/f-22-2-19.c + 1959300243b ./gcc/testsuite/consistency.vlad/layout/f-22-2-28.c + 1424392875b ./gcc/testsuite/consistency.vlad/layout/f-2-25-27.c + 4169983870b ./gcc/testsuite/consistency.vlad/layout/f-23-17-8.c + 728940177b ./gcc/testsuite/consistency.vlad/layout/f-24-18-9.c + 851596736b ./gcc/testsuite/consistency.vlad/layout/f-24-27-8.c + 58214057b ./gcc/testsuite/consistency.vlad/layout/f-25-6-23.c + 2209054578b ./gcc/testsuite/consistency.vlad/layout/f-26-8-6.c + 2248812453b ./gcc/testsuite/consistency.vlad/layout/f-27-22-7.c + 3851531263b ./gcc/testsuite/consistency.vlad/layout/f-29-16-7.c + 1140548972b ./gcc/testsuite/consistency.vlad/layout/f-29-4-10.c + 3817519794b ./gcc/testsuite/consistency.vlad/layout/f-30-15-26.c + 2254570093b ./gcc/testsuite/consistency.vlad/layout/f-30-24-30.c + 1287065065b ./gcc/testsuite/consistency.vlad/layout/f-31-28-16.c + 1393314717b ./gcc/testsuite/consistency.vlad/layout/f-31-4-14.c + 1649382578b ./gcc/testsuite/consistency.vlad/layout/f-31-9-0.c + 600206604b ./gcc/testsuite/consistency.vlad/layout/f-3-7-1.c + 666347310b ./gcc/testsuite/consistency.vlad/layout/f-4-14-29.c + 821467656b ./gcc/testsuite/consistency.vlad/layout/f-5-23-7.c + 2794715020b ./gcc/testsuite/consistency.vlad/layout/f-7-14-12.c + 281818021b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-char.out + 281818021b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-char.out++ + 1727061245b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-double.out + 1727061245b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-double.out++ + 1601851831b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-float.out + 1601851831b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-float.out++ + 3221406627b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-int.out + 3221406627b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-int.out++ + 3462656330b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-bool.out++ + 2284866161b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-char.out + 2284866161b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-char.out++ + 2016168953b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-double.out + 2016168953b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-double.out++ + 3778571582b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-float.out + 3778571582b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-float.out++ + 2268947026b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-int.out + 2268947026b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-int.out++ + 3232401121b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-longdouble.out + 3232401121b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-longdouble.out++ + 2659664521b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-longlong.out + 2659664521b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-longlong.out++ + 3668254953b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-long.out + 3668254953b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-long.out++ + 3544657861b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-pointer.out + 3544657861b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-pointer.out++ + 568190957b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-ptrdiff.out + 568190957b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-ptrdiff.out++ + 1592598882b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-short.out + 1592598882b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-short.out++ + 2711568334b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-size.out + 2711568334b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-size.out++ + 1604716971b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-wchar.out + 1604716971b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/align-wchar.out++ + 2227734332b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-longdouble.out + 2227734332b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-longdouble.out++ + 1069590031b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-longlong.out + 1069590031b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-longlong.out++ + 3142186771b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-long.out + 3142186771b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-long.out++ + 1963275345b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-char.out + 1963275345b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-char.out++ + 2939358541b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-double.out + 2939358541b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-double.out++ + 4001039866b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-float.out + 4001039866b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-float.out++ + 3232823433b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-int.out + 3232823433b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-int.out++ + 2623902989b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-longdouble.out + 2623902989b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-longdouble.out++ + 1713649002b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-longlong.out + 1713649002b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-longlong.out++ + 3779601801b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-long.out + 3779601801b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-long.out++ + 2443484079b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-pointer.out + 2443484079b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-pointer.out++ + 3159633525b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-ptrdiff_t.out + 3159633525b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-ptrdiff_t.out++ + 2253324871b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-short.out + 2253324871b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-of-s-short.out++ + 166125968b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-pointer.out + 166125968b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-pointer.out++ + 608443471b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-ptrdiff_t.out + 608443471b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-ptrdiff_t.out++ + 2402228544b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-short.out + 2402228544b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-short.out++ + 4156594561b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-size_t.out + 4156594561b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-size_t.out++ + 492360794b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-wchar_t.out + 492360794b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/a-wchar_t.out++ + 4129036106b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/biggest-field-align.out + 4129036106b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/biggest-field-align.out++ + 4100226006b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-1-c-char.out++ + 3647609206b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-1-c-double.out++ + 706559590b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-1-c-float.out++ + 1215678453b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-1-c-int.out++ + 2100244020b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-1-c-longdouble.out+ + 48453457b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-1-c-longlong.out++ + 4196765215b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-1-c-long.out++ + 3131996511b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-1-c-pointer.out++ + 1181309658b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-1-c-short.out++ + 3978860778b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-2-c-char.out++ + 2575125216b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-2-c-double.out++ + 3758626543b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-2-c-float.out++ + 876931045b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-2-c-int.out++ + 2507562199b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-2-c-longdouble.out+ + 1079948168b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-2-c-longlong.out++ + 3122728674b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-2-c-long.out++ + 557528819b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-2-c-pointer.out++ + 984328826b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-char-2-c-short.out++ + 3870081867b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-1-c-char.out++ + 19559768b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-1-c-double.out++ + 2915080636b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-1-c-float.out++ + 391114415b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-1-c-int.out++ + 2943384114b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-1-c-longlong.out+ + 897790368b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-1-c-long.out++ + 1812530953b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-1-c-pointer.out++ + 4419316b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-1-c-short.out++ + 1529425773b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-2-c-char.out++ + 2110018195b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-2-c-double.out++ + 431267742b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-2-c-float.out++ + 4127117436b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-2-c-int.out++ + 3919625178b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-2-c-longlong.out+ + 3610473804b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-2-c-long.out++ + 4161112465b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-2-c-pointer.out++ + 2097187829b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-double-2-c-short.out++ + 638577261b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-1-c-char.out++ + 476074193b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-1-c-double.out++ + 384192667b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-1-c-float.out++ + 3196085957b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-1-c-int.out++ + 3708436693b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-1-c-longdouble.out + 2203415599b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-1-c-longlong.out++ + 964541378b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-1-c-long.out++ + 317097833b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-1-c-pointer.out++ + 2217857064b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-1-c-short.out++ + 3381433116b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-2-c-char.out++ + 429641349b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-2-c-double.out++ + 3143138522b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-2-c-float.out++ + 637049178b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-2-c-int.out++ + 2436155461b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-2-c-longdouble.out + 1035042416b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-2-c-longlong.out++ + 3915291152b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-2-c-long.out++ + 2715660950b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-2-c-pointer.out++ + 1668069472b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-float-2-c-short.out++ + 3152579670b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-1-c-char.out++ + 1138705949b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-1-c-double.out++ + 2023313489b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-1-c-float.out++ + 1706645581b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-1-c-int.out++ + 1167102151b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-1-c-longdouble.out++ + 853135804b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-1-c-longlong.out++ + 824095637b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-1-c-long.out++ + 2845722513b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-1-c-pointer.out++ + 1032279461b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-1-c-short.out++ + 150139450b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-2-c-char.out++ + 3993039563b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-2-c-double.out++ + 1771341638b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-2-c-float.out++ + 981734500b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-2-c-int.out++ + 1272920488b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-2-c-longdouble.out++ + 2082772967b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-2-c-longlong.out++ + 673250102b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-2-c-long.out++ + 1447464664b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-2-c-pointer.out++ + 2980070396b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-int-2-c-short.out++ + 3338202537b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/class-char-and-virtual.out + 836464684b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/class-int-and-virtual.out+ + 3651827794b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/class-long-and-virtual.out + 978303701b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-1-c-char.out++ + 1349831301b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-1-c-double.out++ + 4055309409b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-1-c-float.out++ + 281114634b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-1-c-int.out++ + 1591591915b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-1-c-longdouble.out+ + 1601182123b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-1-c-longlong.out++ + 2092387878b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-1-c-long.out++ + 1167331858b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-1-c-pointer.out++ + 1373996143b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-1-c-short.out++ + 328768010b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-2-c-char.out++ + 3391651497b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-2-c-double.out++ + 1331092866b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-2-c-float.out++ + 1363762993b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-2-c-int.out++ + 3764776043b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-2-c-longdouble.out+ + 3487659489b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-2-c-longlong.out++ + 860525318b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-2-c-long.out++ + 1919812282b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-2-c-pointer.out++ + 2539788600b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-long-2-c-short.out++ + 1261002308b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-longdouble-1-c-char.out+ + 1789962814b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-longdouble-1-c-float.out + 1178372529b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-longdouble-1-c-int.out++ + 923540745b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-longdouble-1-c-long.out+ + 4019539100b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-longdouble-1-c-short.out + 1400671035b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-longdouble-2-c-char.out+ + 1620516804b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-longdouble-2-c-float.out + 57959266b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-longdouble-2-c-int.out++ + 428651475b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-longdouble-2-c-long.out+ + 2929532078b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-longdouble-2-c-short.out + 156205829b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-longlong-1-c-char.out++ + 274806308b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-longlong-1-c-double.out+ + 1311432891b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-longlong-1-c-float.out++ + 271147996b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-longlong-1-c-int.out++ + 2325547598b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-longlong-1-c-long.out++ + 1602376231b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-longlong-1-c-pointer.out + 2056285955b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-longlong-1-c-short.out++ + 252215927b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-longlong-2-c-char.out++ + 1703813948b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-longlong-2-c-double.out+ + 3833743177b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-longlong-2-c-float.out++ + 168092554b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-longlong-2-c-int.out++ + 2199050326b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-longlong-2-c-long.out++ + 3195305369b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-longlong-2-c-pointer.out + 2151043874b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-longlong-2-c-short.out++ + 3346796594b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-1-c-char.out++ + 1049692423b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-1-c-double.out++ + 1162385065b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-1-c-float.out++ + 1723690768b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-1-c-int.out++ + 1018652914b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-1-c-longlong.out + 1122627681b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-1-c-long.out++ + 3157843542b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-1-c-pointer.out+ + 274267090b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-1-c-short.out++ + 1856515882b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-2-c-char.out++ + 1292784229b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-2-c-double.out++ + 1950731775b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-2-c-float.out++ + 1717751486b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-2-c-int.out++ + 2591426150b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-2-c-longlong.out + 1316628006b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-2-c-long.out++ + 4115148406b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-2-c-pointer.out+ + 2893089093b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-pointer-2-c-short.out++ + 3269036579b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-1-c-char.out++ + 327031780b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-1-c-double.out++ + 1794337572b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-1-c-float.out++ + 799398662b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-1-c-int.out++ + 82846972b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-1-c-longdouble.out + 3028299097b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-1-c-longlong.out++ + 294463294b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-1-c-long.out++ + 3616473829b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-1-c-pointer.out++ + 4123209829b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-1-c-short.out++ + 2386618953b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-2-c-char.out++ + 337500653b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-2-c-double.out++ + 2241141027b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-2-c-float.out++ + 3329743364b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-2-c-int.out++ + 3880624999b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-2-c-longdouble.out + 3865506072b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-2-c-longlong.out++ + 1783534270b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-2-c-long.out++ + 2891687422b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-2-c-pointer.out++ + 3938727462b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/c-short-2-c-short.out++ + 2162077044b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/endian.out + 2162077044b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/endian.out++ + 3419137637b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-0-0-5.out + 2697696866b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-0-0-5.out++ + 3829700152b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-0-20-17.out + 4063785218b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-0-20-17.out++ + 3595644405b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-0-24-24.out + 2437734191b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-0-24-24.out++ + 3203785748b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-10-11-10.out + 3203785748b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-10-11-10.out++ + 3883743979b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-11-12-10.out + 3883743979b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-11-12-10.out++ + 1776162150b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-1-21-31.out + 1776162150b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-1-21-31.out++ + 4292846411b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-1-3-1.out + 4292846411b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-1-3-1.out++ + 268554786b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-14-22-10.out + 268554786b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-14-22-10.out++ + 3887247867b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-14-29-30.out + 3887247867b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-14-29-30.out++ + 1252658061b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-14-31-26.out + 1252658061b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-14-31-26.out++ + 3752599983b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-14-8-9.out + 3752599983b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-14-8-9.out++ + 2504143009b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-15-1-22.out + 2504143009b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-15-1-22.out++ + 285193031b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-16-30-15.out + 285193031b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-16-30-15.out++ + 1491637755b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-17-17-20.out + 1491637755b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-17-17-20.out++ + 3346294426b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-17-17-2.out + 3346294426b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-17-17-2.out++ + 2949641380b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-17-21-17.out + 2949641380b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-17-21-17.out++ + 3877885575b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-18-15-30.out + 3877885575b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-18-15-30.out++ + 3070142360b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-18-26-0.out + 1554435890b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-18-26-0.out++ + 934830165b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-18-26-11.out + 934830165b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-18-26-11.out++ + 3962835451b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-18-4-17.out + 3962835451b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-18-4-17.out++ + 1291671333b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-18-5-16.out + 1291671333b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-18-5-16.out++ + 1700775495b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-19-6-22.out + 1700775495b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-19-6-22.out++ + 123227249b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-20-19-9.out + 123227249b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-20-19-9.out++ + 1217631134b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-20-20-15.out + 1217631134b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-20-20-15.out++ + 122124427b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-20-26-14.out + 122124427b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-20-26-14.out++ + 1954763271b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-21-16-24.out + 1954763271b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-21-16-24.out++ + 4037426595b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-21-19-4.out + 4037426595b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-21-19-4.out++ + 570806957b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-21-22-1.out + 570806957b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-21-22-1.out++ + 3471862654b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-21-24-20.out + 3471862654b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-21-24-20.out++ + 2840862240b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-21-5-26.out + 2840862240b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-21-5-26.out++ + 1675033355b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-22-2-19.out + 1675033355b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-22-2-19.out++ + 419856428b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-22-2-28.out + 419856428b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-22-2-28.out++ + 906364881b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-2-25-27.out + 906364881b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-2-25-27.out++ + 2034059518b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-23-17-8.out + 2034059518b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-23-17-8.out++ + 4200924887b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-24-18-9.out + 4200924887b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-24-18-9.out++ + 945528697b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-24-27-8.out + 945528697b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-24-27-8.out++ + 3365164560b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-25-6-23.out + 3365164560b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-25-6-23.out++ + 925799049b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-26-8-6.out + 925799049b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-26-8-6.out++ + 1807802763b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-27-22-7.out + 1807802763b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-27-22-7.out++ + 3387583484b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-29-16-7.out + 3387583484b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-29-16-7.out++ + 2411254670b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-29-4-10.out + 2411254670b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-29-4-10.out++ + 1870571592b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-30-15-26.out + 1870571592b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-30-15-26.out++ + 1466032498b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-30-24-30.out + 1466032498b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-30-24-30.out++ + 1625962562b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-31-28-16.out + 1625962562b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-31-28-16.out++ + 663265344b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-31-4-14.out + 663265344b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-31-4-14.out++ + 1272990598b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-31-9-0.out + 785742212b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-31-9-0.out++ + 1816309710b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-3-7-1.out + 1816309710b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-3-7-1.out++ + 4120030053b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-4-14-29.out + 4120030053b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-4-14-29.out++ + 140937946b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-5-23-7.out + 140937946b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-5-23-7.out++ + 1100765591b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-7-14-12.out + 1100765591b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/f-7-14-12.out++ + 2156310103b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/README + 13174497b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-char.out + 13174497b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-char.out++ + 1263879599b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-double.out + 1263879599b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-double.out++ + 3169577204b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-float.out + 3169577204b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-float.out++ + 3237207754b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-int.out + 3237207754b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-int.out++ + 300638802b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-longdouble.out + 300638802b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-longdouble.out++ + 851353395b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-longlong.out + 851353395b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-longlong.out++ + 1717871431b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-long.out + 1717871431b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-long.out++ + 2838094559b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-pointer.out + 2838094559b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-pointer.out++ + 4192163054b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-short.out + 4192163054b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-a-short.out++ + 149259060b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-char.out + 149259060b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-char.out++ + 119844797b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-double.out + 119844797b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-double.out++ + 3332841867b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-float.out + 3332841867b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-float.out++ + 1726003194b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-int.out + 1726003194b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-int.out++ + 2075118149b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-longdouble.out + 2075118149b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-longdouble.out++ + 4051434430b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-longlong.out + 4051434430b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-longlong.out++ + 1941216341b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-long.out + 1941216341b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-long.out++ + 3517893171b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-pointer.out + 3517893171b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-pointer.out++ + 1361556762b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-ptrdiff_t.out + 1361556762b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-ptrdiff_t.out++ + 3648796915b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-char.out + 3648796915b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-char.out++ + 3472798323b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-double.out + 3472798323b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-double.out++ + 1163555929b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-float.out + 1163555929b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-float.out++ + 2797269136b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-short.out + 2797269136b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-short.out++ + 611130168b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-int.out + 611130168b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-int.out++ + 3946363802b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-size_t.out + 3946363802b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-size_t.out++ + 1330421760b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-longdouble.out + 1330421760b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-longdouble.out++ + 2813748371b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-longlong.out + 2813748371b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-longlong.out++ + 3300687114b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-long.out + 3300687114b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-long.out++ + 622013241b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-pointer.out + 622013241b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-pointer.out++ + 2254695019b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-short.out + 2254695019b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-s-short.out++ + 782081091b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-wchar_t.out + 782081091b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-wchar_t.out++ + 4058125827b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-zf-char.out + 2028972393b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-zf-char.out++ + 2183773616b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-zf-int.out + 720666868b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-zf-int.out++ + 2722211350b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-zf-longlong.out + 3171703288b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-zf-longlong.out++ + 3570596356b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-zf-long.out + 3870166054b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-zf-long.out++ + 3936055108b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-zf-short.out + 2420900899b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-char-zf-short.out++ + 4236338674b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-char.out + 4236338674b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-char.out++ + 2364889610b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-double.out + 2364889610b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-double.out++ + 424524236b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-float.out + 424524236b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-float.out++ + 2185924966b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-int.out + 2185924966b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-int.out++ + 3208408277b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-longdouble.out + 3208408277b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-longdouble.out+ + 616366511b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-longlong.out + 616366511b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-longlong.out++ + 1377847542b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-long.out + 1377847542b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-long.out++ + 1932644731b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-pointer.out + 1932644731b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-pointer.out++ + 2597633381b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-short.out + 2597633381b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-a-short.out++ + 2667451408b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-char.out + 2667451408b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-char.out++ + 3581566571b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-double.out + 3581566571b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-double.out++ + 3759577000b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-float.out + 3759577000b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-float.out++ + 51600390b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-int.out + 51600390b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-int.out++ + 3808892329b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-longdouble.out + 3808892329b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-longdouble.out++ + 3894925976b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-longlong.out + 3894925976b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-longlong.out++ + 3724144772b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-long.out + 3724144772b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-long.out++ + 1869357795b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-pointer.out + 1869357795b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-pointer.out++ + 993350744b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-ptrdiff_t.out + 993350744b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-ptrdiff_t.out++ + 2313797849b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-char.out + 2313797849b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-char.out++ + 2223824125b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-double.out + 2223824125b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-double.out++ + 3883069309b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-float.out + 3883069309b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-float.out++ + 351083924b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-short.out + 351083924b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-short.out++ + 2863998748b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-int.out + 2863998748b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-int.out++ + 3505234855b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-size_t.out + 3505234855b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-size_t.out++ + 1829775023b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-longdouble.out + 1829775023b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-longdouble.out+ + 284599855b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-longlong.out + 284599855b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-longlong.out++ + 2272464711b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-long.out + 2272464711b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-long.out++ + 598623650b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-pointer.out + 598623650b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-pointer.out++ + 2749602529b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-short.out + 2749602529b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-s-short.out++ + 3026762224b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-wchar_t.out + 3026762224b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-wchar_t.out++ + 3986574077b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-zf-char.out + 2222066822b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-zf-char.out++ + 1754736725b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-zf-int.out + 1559899710b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-zf-int.out++ + 3088104680b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-zf-longlong.out + 3583168624b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-zf-longlong.out++ + 2138195968b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-zf-long.out + 1206677029b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-zf-long.out++ + 868552483b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-zf-short.out + 3855067152b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-double-zf-short.out++ + 424345382b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-char.out + 424345382b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-char.out++ + 3542754385b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-double.out + 3542754385b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-double.out++ + 1489296274b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-float.out + 1489296274b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-float.out++ + 1250016403b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-int.out + 1250016403b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-int.out++ + 1568017389b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-longdouble.out + 1568017389b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-longdouble.out++ + 1248642357b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-longlong.out + 1248642357b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-longlong.out++ + 2598597791b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-long.out + 2598597791b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-long.out++ + 799116997b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-pointer.out + 799116997b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-pointer.out++ + 3756480259b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-short.out + 3756480259b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-a-short.out++ + 3564221209b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-char.out + 3564221209b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-char.out++ + 3409990675b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-double.out + 3409990675b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-double.out++ + 1556696261b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-float.out + 1556696261b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-float.out++ + 1622170282b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-int.out + 1622170282b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-int.out++ + 1134958145b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-longdouble.out + 1134958145b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-longdouble.out++ + 3168453682b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-longlong.out + 3168453682b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-longlong.out++ + 530122249b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-long.out + 530122249b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-long.out++ + 2922640763b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-pointer.out + 2922640763b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-pointer.out++ + 4066163210b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-ptrdiff_t.out + 4066163210b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-ptrdiff_t.out++ + 646390276b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-char.out + 646390276b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-char.out++ + 1420738760b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-double.out + 1420738760b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-double.out++ + 1009261265b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-float.out + 1009261265b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-float.out++ + 233068758b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-short.out + 233068758b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-short.out++ + 2256009544b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-int.out + 2256009544b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-int.out++ + 3735342934b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-size_t.out + 3735342934b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-size_t.out++ + 310608698b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-longdouble.out + 310608698b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-longdouble.out++ + 229917060b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-longlong.out + 229917060b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-longlong.out++ + 1389606757b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-long.out + 1389606757b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-long.out++ + 1605766695b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-pointer.out + 1605766695b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-pointer.out++ + 1493100197b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-short.out + 1493100197b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-s-short.out++ + 1525245762b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-wchar_t.out + 1525245762b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-wchar_t.out++ + 2458932893b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-zf-char.out + 2965855099b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-zf-char.out++ + 349006013b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-zf-int.out + 2335123085b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-zf-int.out++ + 1503454956b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-zf-longlong.out + 2287857977b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-zf-longlong.out++ + 1137560689b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-zf-long.out + 430614706b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-zf-long.out++ + 811714276b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-zf-short.out + 2579260275b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-float-zf-short.out++ + 3026572564b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-char.out + 3026572564b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-char.out++ + 3107188041b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-double.out + 3107188041b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-double.out++ + 879973237b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-float.out + 879973237b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-float.out++ + 3051633289b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-int.out + 3051633289b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-int.out++ + 2410327242b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-longdouble.out + 2410327242b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-longdouble.out++ + 3929531475b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-longlong.out + 3929531475b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-longlong.out++ + 2062849219b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-long.out + 2062849219b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-long.out++ + 3096965928b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-pointer.out + 3096965928b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-pointer.out++ + 1204833150b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-short.out + 1204833150b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-a-short.out++ + 2920760800b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-char.out + 2920760800b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-char.out++ + 1027251474b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-double.out + 1027251474b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-double.out++ + 3856842277b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-float.out + 3856842277b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-float.out++ + 3890912034b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-int.out + 3890912034b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-int.out++ + 3592101251b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-longdouble.out + 3592101251b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-longdouble.out++ + 881354323b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-longlong.out + 881354323b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-longlong.out++ + 162876982b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-long.out + 162876982b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-long.out++ + 3497380019b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-pointer.out + 3497380019b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-pointer.out++ + 127240785b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-ptrdiff_t.out + 127240785b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-ptrdiff_t.out++ + 1588095226b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-char.out + 1588095226b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-char.out++ + 1788492129b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-double.out + 1788492129b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-double.out++ + 3331892538b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-float.out + 3331892538b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-float.out++ + 3410880438b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-short.out + 3410880438b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-short.out++ + 446524396b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-int.out + 446524396b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-int.out++ + 2907962645b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-size_t.out + 2907962645b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-size_t.out++ + 476184310b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-longdouble.out + 476184310b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-longdouble.out++ + 4058854518b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-longlong.out + 4058854518b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-longlong.out++ + 751158190b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-long.out + 751158190b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-long.out++ + 1766070031b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-pointer.out + 1766070031b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-pointer.out++ + 2844975244b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-short.out + 2844975244b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-s-short.out++ + 496574257b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-wchar_t.out + 496574257b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-wchar_t.out++ + 3465834813b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-zf-char.out + 3886284191b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-zf-char.out++ + 1090439347b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-zf-int.out + 3979163905b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-zf-int.out++ + 2062836287b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-zf-longlong.out + 3075841449b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-zf-longlong.out++ + 2400092189b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-zf-long.out + 3700180902b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-zf-long.out++ + 2158685975b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-zf-short.out + 1012271831b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-int-zf-short.out++ + 4107261541b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-bool.out++ + 919632946b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-char.out + 919632946b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-char.out++ + 1524915532b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-double.out + 1524915532b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-double.out++ + 594930693b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-float.out + 594930693b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-float.out++ + 1957268000b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-int.out + 1957268000b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-int.out++ + 1658583497b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-longdouble.out + 1658583497b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-longdouble.out++ + 312453039b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-longlong.out + 312453039b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-longlong.out++ + 1244662439b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-long.out + 1244662439b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-long.out++ + 3802875737b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-pointer.out + 3802875737b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-pointer.out++ + 1324451320b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-ptrdiff.out + 1324451320b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-ptrdiff.out++ + 1620300254b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-short.out + 1620300254b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-short.out++ + 1933118540b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-size.out + 1933118540b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-size.out++ + 3741425609b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-wchar.out + 3741425609b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/size-wchar.out++ + 1870109470b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-char.out + 1870109470b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-char.out++ + 1651744974b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-double.out + 1651744974b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-double.out++ + 362585434b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-float.out + 362585434b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-float.out++ + 1163094327b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-int.out + 1163094327b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-int.out++ + 291703399b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-longdouble.out + 291703399b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-longdouble.out++ + 3762408624b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-longlong.out + 3762408624b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-longlong.out++ + 3555956076b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-long.out + 3555956076b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-long.out++ + 2332886721b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-pointer.out + 2332886721b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-pointer.out++ + 2480870612b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-short.out + 2480870612b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-a-short.out++ + 2916189460b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-char.out + 2916189460b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-char.out++ + 2502123578b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-a-char.out + 2502123578b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-a-char.out++ + 908745179b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-a-double.out + 908745179b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-a-double.out+ + 1491334033b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-a-float.out + 1491334033b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-a-float.out++ + 1108678434b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-a-int.out + 1108678434b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-a-int.out++ + 1691807337b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-a-long.out + 1691807337b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-a-long.out++ + 3880595806b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-a-pointer.out + 1830679325b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-a-short.out + 1830679325b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-a-short.out++ + 2688367579b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-char.out + 2688367579b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-char.out++ + 562176588b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-double.out + 562176588b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-double.out++ + 3081730244b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-float.out + 3081730244b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-float.out++ + 830680808b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-int.out + 830680808b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-int.out++ + 4111931150b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-longlong.out + 4111931150b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-longlong.out+ + 1437253678b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-long.out + 1437253678b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-long.out++ + 497513900b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-double.out + 497513900b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-double.out++ + 3184654982b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-pointer.out + 3184654982b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-pointer.out++ + 2209121894b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-ptrdiff_t.out + 607323772b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-s-char.out + 607323772b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-s-char.out++ + 1592572645b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-s-double.out + 1592572645b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-s-double.out+ + 2123592192b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-s-float.out + 2123592192b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-s-float.out++ + 1624565665b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-short.out + 1624565665b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-short.out++ + 2058112871b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-s-int.out + 2058112871b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-s-int.out++ + 18114278b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-size_t.out + 18114278b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-size_t.out++ + 1209643017b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-s-long.out + 1209643017b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-s-long.out++ + 137221407b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-s-pointer.out + 2707233896b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-s-short.out + 2707233896b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-s-short.out++ + 2306040258b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-wchar_t.out + 2306040258b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-wchar_t.out++ + 561421555b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-zf-char.out + 3000456303b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-zf-char.out++ + 989841357b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-zf-int.out + 2841513809b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-zf-int.out++ + 3221903988b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-zf-long.out + 1403753192b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-zf-long.out++ + 2463066035b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-zf-short.out + 24031023b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longdouble-zf-short.out+ + 2489472050b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-float.out + 2489472050b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-float.out++ + 2743476630b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-int.out + 2743476630b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-int.out++ + 2821438118b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-char.out + 2821438118b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-char.out++ + 44039327b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-double.out + 44039327b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-double.out++ + 3941392051b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-float.out + 3941392051b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-float.out++ + 2609834450b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-int.out + 2609834450b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-int.out++ + 2868812260b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-longlong.out + 2868812260b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-longlong.out+ + 3407178115b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-long.out + 3407178115b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-long.out++ + 855452388b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-pointer.out + 855452388b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-pointer.out++ + 3186715271b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-short.out + 3186715271b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-a-short.out++ + 3073461247b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-char.out + 3073461247b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-char.out++ + 3665863579b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-longdouble.out + 3665863579b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-longdouble.out++ + 3026224568b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-double.out + 3026224568b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-double.out++ + 1191292162b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-float.out + 1191292162b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-float.out++ + 1548870351b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-int.out + 1548870351b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-int.out++ + 3829659624b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-longdouble.out + 3829659624b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-longdouble.out+ + 1372837239b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-longlong.out + 1372837239b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-longlong.out++ + 4020247482b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-longlong.out + 4020247482b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-longlong.out++ + 470378869b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-long.out + 470378869b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-long.out++ + 2654575439b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-long.out + 2654575439b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-long.out++ + 3536102064b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-pointer.out + 3536102064b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-pointer.out++ + 579862700b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-ptrdiff_t.out + 579862700b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-ptrdiff_t.out++ + 949526555b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-char.out + 949526555b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-char.out++ + 397921610b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-double.out + 397921610b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-double.out++ + 2538191755b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-float.out + 2538191755b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-float.out++ + 1971310399b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-short.out + 1971310399b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-short.out++ + 4237589805b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-int.out + 4237589805b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-int.out++ + 2419011586b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-size_t.out + 2419011586b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-size_t.out++ + 1624025758b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-longlong.out + 1624025758b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-longlong.out+ + 3782463750b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-long.out + 3782463750b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-long.out++ + 1972186934b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-pointer.out + 1972186934b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-pointer.out++ + 829099133b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-short.out + 829099133b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-s-short.out++ + 1350491757b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-wchar_t.out + 1350491757b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-wchar_t.out++ + 2215666329b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-zf-char.out + 745407154b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-zf-char.out++ + 140198870b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-zf-int.out + 3397457298b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-zf-int.out++ + 972059489b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-zf-longlong.out + 904046880b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-zf-long.out + 2657286993b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-zf-long.out++ + 2804701286b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-zf-short.out + 22008069b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-longlong-zf-short.out++ + 628108037b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-pointer.out + 628108037b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-pointer.out++ + 1311213846b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-ptrdiff_t.out + 1311213846b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-ptrdiff_t.out++ + 2141238480b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-char.out + 2141238480b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-char.out++ + 1859208772b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-double.out + 1859208772b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-double.out++ + 4206164034b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-float.out + 4206164034b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-float.out++ + 945387931b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-short.out + 945387931b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-short.out++ + 3679940725b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-int.out + 3679940725b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-int.out++ + 2232487072b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-size_t.out + 2232487072b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-size_t.out++ + 3251153332b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-longdouble.out + 3251153332b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-longdouble.out++ + 247594466b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-longlong.out + 247594466b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-longlong.out++ + 2261218946b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-long.out + 2261218946b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-long.out++ + 3759513989b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-pointer.out + 3759513989b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-pointer.out++ + 3008225932b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-short.out + 3008225932b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-s-short.out++ + 3661856117b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-wchar_t.out + 3661856117b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-wchar_t.out++ + 2003883578b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-zf-char.out + 1185711188b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-zf-char.out++ + 79396233b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-zf-int.out + 347581897b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-zf-int.out++ + 2617412395b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-zf-longlong.out + 2872220966b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-zf-longlong.out++ + 1379940925b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-zf-long.out + 3639419163b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-zf-long.out++ + 1812574077b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-zf-short.out + 2920229150b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-long-zf-short.out++ + 638071746b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-char.out + 638071746b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-char.out++ + 3332432545b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-double.out + 3332432545b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-double.out++ + 1534334155b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-float.out + 1534334155b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-float.out++ + 3880550727b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-int.out + 3880550727b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-int.out++ + 251411986b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-longdouble.out + 2493905430b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-longlong.out + 2493905430b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-longlong.out++ + 180275403b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-long.out + 180275403b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-long.out++ + 1868637423b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-pointer.out + 1868637423b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-pointer.out++ + 3971852122b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-short.out + 3971852122b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-a-short.out++ + 3868413247b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-char.out + 3868413247b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-char.out++ + 3686342475b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-double.out + 3686342475b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-double.out++ + 3364520721b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-float.out + 3364520721b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-float.out++ + 2026186277b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-int.out + 2026186277b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-int.out++ + 1274562854b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-longdouble.out + 1274562854b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-longdouble.out++ + 2670045344b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-longlong.out + 2670045344b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-longlong.out++ + 554032384b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-long.out + 554032384b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-long.out++ + 2655788537b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-pointer.out + 2655788537b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-pointer.out++ + 797630104b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-ptrdiff_t.out + 797630104b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-ptrdiff_t.out++ + 1922745643b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-char.out + 1922745643b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-char.out++ + 4073638002b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-double.out + 4073638002b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-double.out++ + 3219629814b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-float.out + 3219629814b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-float.out++ + 3050131671b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-short.out + 3050131671b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-short.out++ + 2810751409b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-int.out + 2810751409b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-int.out++ + 3655683515b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-size_t.out + 3655683515b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-size_t.out++ + 2708502837b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-longdouble.out + 753682265b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-longlong.out + 753682265b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-longlong.out++ + 4193535248b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-long.out + 4193535248b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-long.out++ + 554657656b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-pointer.out + 554657656b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-pointer.out++ + 843107606b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-short.out + 843107606b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-s-short.out++ + 2293091315b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-wchar_t.out + 2293091315b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-wchar_t.out++ + 1599802745b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-zf-char.out + 3264566923b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-zf-char.out++ + 2587475685b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-zf-int.out + 1005185879b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-zf-int.out++ + 2426330969b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-zf-longlong.out + 3112366542b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-zf-longlong.out+ + 273113417b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-zf-long.out + 3825433163b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-zf-long.out++ + 1180077740b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-zf-short.out + 875920723b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-pointer-zf-short.out++ + 2651380458b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-char.out + 2651380458b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-char.out++ + 2157112743b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-double.out + 2157112743b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-double.out++ + 2483342b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-float.out + 2483342b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-float.out++ + 3030027871b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-int.out + 3030027871b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-int.out++ + 842815367b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-longdouble.out + 2374908820b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-longlong.out + 2374908820b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-longlong.out++ + 2742634608b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-long.out + 2742634608b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-long.out++ + 1105378681b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-pointer.out + 1105378681b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-pointer.out++ + 2222112016b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-ptrdiff_t.out + 2222112016b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-ptrdiff_t.out+ + 178487862b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-short.out + 178487862b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-short.out++ + 3944948267b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-size_t.out + 3944948267b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-size_t.out++ + 730216995b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-wchar_t.out + 730216995b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-ptrdiff_t-wchar_t.out++ + 3233423287b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-char.out + 3233423287b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-char.out++ + 2913953381b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-double.out + 2913953381b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-double.out++ + 3441673581b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-float.out + 3441673581b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-float.out++ + 911216572b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-int.out + 911216572b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-int.out++ + 3193177612b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-longdouble.out + 3193177612b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-longdouble.out++ + 3997296607b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-longlong.out + 3997296607b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-longlong.out++ + 1537969173b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-long.out + 1537969173b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-long.out++ + 364952624b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-pointer.out + 364952624b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-pointer.out++ + 970855379b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-short.out + 970855379b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-a-short.out++ + 3887113392b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-char.out + 3887113392b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-char.out++ + 851101858b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-double.out + 851101858b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-double.out++ + 3721234230b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-float.out + 3721234230b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-float.out++ + 1012475701b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-int.out + 1012475701b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-int.out++ + 2555149638b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-longdouble.out + 2555149638b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-longdouble.out++ + 2273094318b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-longlong.out + 2273094318b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-longlong.out++ + 3766414610b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-long.out + 3766414610b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-long.out++ + 1639107229b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-pointer.out + 1639107229b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-pointer.out++ + 1075156439b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-ptrdiff_t.out + 1075156439b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-ptrdiff_t.out++ + 2869252033b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-char.out + 2869252033b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-char.out++ + 2528716480b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-double.out + 2528716480b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-double.out++ + 785209287b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-float.out + 785209287b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-float.out++ + 2164738263b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-short.out + 2164738263b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-short.out++ + 1126071492b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-int.out + 1126071492b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-int.out++ + 3593875829b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-size_t.out + 3593875829b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-size_t.out++ + 3460438392b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-longdouble.out + 3460438392b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-longdouble.out++ + 1289753849b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-longlong.out + 1289753849b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-longlong.out++ + 1435590236b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-long.out + 1435590236b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-long.out++ + 1476260714b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-pointer.out + 1476260714b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-pointer.out++ + 500188532b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-short.out + 500188532b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-s-short.out++ + 2506643620b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-wchar_t.out + 2506643620b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-wchar_t.out++ + 3126905441b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-zf-char.out + 1940799148b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-zf-char.out++ + 1010693185b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-zf-int.out + 1212564314b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-zf-int.out++ + 2599781179b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-zf-longlong.out + 3990788430b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-zf-longlong.out++ + 1799180429b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-zf-long.out + 3670265189b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-zf-long.out++ + 412178968b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-zf-short.out + 1523910308b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-short-zf-short.out++ + 177607961b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-char.out + 177607961b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-char.out++ + 2444832335b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-double.out + 2444832335b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-double.out++ + 2227123143b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-float.out + 2227123143b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-float.out++ + 2732243950b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-int.out + 2732243950b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-int.out++ + 2655501391b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-longdouble.out + 2655501391b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-longdouble.out++ + 3487867828b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-longlong.out + 3487867828b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-longlong.out++ + 978381513b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-long.out + 978381513b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-long.out++ + 4141092354b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-pointer.out + 4141092354b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-pointer.out++ + 282420262b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-ptrdiff_t.out + 282420262b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-ptrdiff_t.out++ + 708432696b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-short.out + 708432696b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-short.out++ + 1667222853b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-size_t.out + 1667222853b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-size_t.out++ + 839103492b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-wchar_t.out + 839103492b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-size_t-wchar_t.out++ + 1754196141b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-char.out + 1754196141b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-char.out++ + 355115283b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-double.out + 355115283b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-double.out++ + 4175033844b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-float.out + 4175033844b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-float.out++ + 2745764679b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-int.out + 2745764679b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-int.out++ + 3007141392b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-longdouble.out + 3007141392b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-longdouble.out++ + 1445387844b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-longlong.out + 1445387844b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-longlong.out++ + 2937616530b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-long.out + 2937616530b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-long.out++ + 2501204111b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-pointer.out + 2501204111b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-pointer.out++ + 887379829b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-ptrdiff_t.out + 887379829b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-ptrdiff_t.out++ + 2241734194b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-short.out + 2241734194b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-short.out++ + 676320345b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-size_t.out + 676320345b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-size_t.out++ + 2213842565b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-wchar_t.out + 2213842565b ./gcc/testsuite/consistency.vlad/layout/i960-97r2-results/s-wchar_t-wchar_t.out++ + 2700306833b ./gcc/testsuite/consistency.vlad/layout/minimal-struct-size-align.c + 3619982975b ./gcc/testsuite/consistency.vlad/layout/s-char-a-char.c + 727040386b ./gcc/testsuite/consistency.vlad/layout/s-char-a-double.c + 491533109b ./gcc/testsuite/consistency.vlad/layout/s-char-a-float.c + 3078996477b ./gcc/testsuite/consistency.vlad/layout/s-char-a-int.c + 572081613b ./gcc/testsuite/consistency.vlad/layout/s-char-a-long.c + 1875679261b ./gcc/testsuite/consistency.vlad/layout/s-char-a-longdouble.c + 1802587241b ./gcc/testsuite/consistency.vlad/layout/s-char-a-longlong.c + 3668401631b ./gcc/testsuite/consistency.vlad/layout/s-char-a-pointer.c + 2583229386b ./gcc/testsuite/consistency.vlad/layout/s-char-a-short.c + 354065986b ./gcc/testsuite/consistency.vlad/layout/s-char-char.c + 166713106b ./gcc/testsuite/consistency.vlad/layout/s-char-double.c + 789665974b ./gcc/testsuite/consistency.vlad/layout/s-char-float.c + 2449543606b ./gcc/testsuite/consistency.vlad/layout/s-char-int.c + 2677202274b ./gcc/testsuite/consistency.vlad/layout/s-char-long.c + 3864063005b ./gcc/testsuite/consistency.vlad/layout/s-char-longdouble.c + 2745197038b ./gcc/testsuite/consistency.vlad/layout/s-char-longlong.c + 4261808453b ./gcc/testsuite/consistency.vlad/layout/s-char-pointer.c + 2261048804b ./gcc/testsuite/consistency.vlad/layout/s-char-ptrdiff_t.c + 1919204038b ./gcc/testsuite/consistency.vlad/layout/s-char-s-char.c + 2356076301b ./gcc/testsuite/consistency.vlad/layout/s-char-s-double.c + 765329706b ./gcc/testsuite/consistency.vlad/layout/s-char-s-float.c + 3605211274b ./gcc/testsuite/consistency.vlad/layout/s-char-short.c + 3351760677b ./gcc/testsuite/consistency.vlad/layout/s-char-s-int.c + 3130164308b ./gcc/testsuite/consistency.vlad/layout/s-char-size_t.c + 1763672929b ./gcc/testsuite/consistency.vlad/layout/s-char-s-long.c + 1834388031b ./gcc/testsuite/consistency.vlad/layout/s-char-s-longdouble.c + 559076232b ./gcc/testsuite/consistency.vlad/layout/s-char-s-longlong.c + 2344655103b ./gcc/testsuite/consistency.vlad/layout/s-char-s-pointer.c + 220067620b ./gcc/testsuite/consistency.vlad/layout/s-char-s-short.c + 4159231551b ./gcc/testsuite/consistency.vlad/layout/s-char-wchar_t.c + 2462993036b ./gcc/testsuite/consistency.vlad/layout/s-char-zf-char.c + 541003594b ./gcc/testsuite/consistency.vlad/layout/s-char-zf-int.c + 2021533516b ./gcc/testsuite/consistency.vlad/layout/s-char-zf-long.c + 664373477b ./gcc/testsuite/consistency.vlad/layout/s-char-zf-longlong.c + 3578692014b ./gcc/testsuite/consistency.vlad/layout/s-char-zf-short.c + 3453180393b ./gcc/testsuite/consistency.vlad/layout/s-double-a-char.c + 101761990b ./gcc/testsuite/consistency.vlad/layout/s-double-a-double.c + 3473415719b ./gcc/testsuite/consistency.vlad/layout/s-double-a-float.c + 327989632b ./gcc/testsuite/consistency.vlad/layout/s-double-a-int.c + 233827811b ./gcc/testsuite/consistency.vlad/layout/s-double-a-long.c + 2208485716b ./gcc/testsuite/consistency.vlad/layout/s-double-a-longdouble.c + 1391002931b ./gcc/testsuite/consistency.vlad/layout/s-double-a-longlong.c + 2859596990b ./gcc/testsuite/consistency.vlad/layout/s-double-a-pointer.c + 3559689934b ./gcc/testsuite/consistency.vlad/layout/s-double-a-short.c + 4020276225b ./gcc/testsuite/consistency.vlad/layout/s-double-char.c + 987841011b ./gcc/testsuite/consistency.vlad/layout/s-double-double.c + 704836077b ./gcc/testsuite/consistency.vlad/layout/s-double-float.c + 2692874561b ./gcc/testsuite/consistency.vlad/layout/s-double-int.c + 2941605757b ./gcc/testsuite/consistency.vlad/layout/s-double-long.c + 3228770514b ./gcc/testsuite/consistency.vlad/layout/s-double-longdouble.c + 3584369719b ./gcc/testsuite/consistency.vlad/layout/s-double-longlong.c + 1752254424b ./gcc/testsuite/consistency.vlad/layout/s-double-pointer.c + 2905865681b ./gcc/testsuite/consistency.vlad/layout/s-double-ptrdiff_t.c + 1892057278b ./gcc/testsuite/consistency.vlad/layout/s-double-s-char.c + 2394566615b ./gcc/testsuite/consistency.vlad/layout/s-double-s-double.c + 4064931917b ./gcc/testsuite/consistency.vlad/layout/s-double-s-float.c + 1137455402b ./gcc/testsuite/consistency.vlad/layout/s-double-short.c + 3672946380b ./gcc/testsuite/consistency.vlad/layout/s-double-s-int.c + 3731114983b ./gcc/testsuite/consistency.vlad/layout/s-double-size_t.c + 4099130503b ./gcc/testsuite/consistency.vlad/layout/s-double-s-long.c + 2508841997b ./gcc/testsuite/consistency.vlad/layout/s-double-s-longdouble.c + 2547516874b ./gcc/testsuite/consistency.vlad/layout/s-double-s-longlong.c + 2394584890b ./gcc/testsuite/consistency.vlad/layout/s-double-s-pointer.c + 1087857878b ./gcc/testsuite/consistency.vlad/layout/s-double-s-short.c + 1074227714b ./gcc/testsuite/consistency.vlad/layout/s-double-wchar_t.c + 4075513176b ./gcc/testsuite/consistency.vlad/layout/s-double-zf-char.c + 2181060239b ./gcc/testsuite/consistency.vlad/layout/s-double-zf-int.c + 1000788988b ./gcc/testsuite/consistency.vlad/layout/s-double-zf-long.c + 2794343535b ./gcc/testsuite/consistency.vlad/layout/s-double-zf-longlong.c + 3512529490b ./gcc/testsuite/consistency.vlad/layout/s-double-zf-short.c + 4042825902b ./gcc/testsuite/consistency.vlad/layout/s-float-a-char.c + 281123545b ./gcc/testsuite/consistency.vlad/layout/s-float-a-double.c + 1325772879b ./gcc/testsuite/consistency.vlad/layout/s-float-a-float.c + 3760629573b ./gcc/testsuite/consistency.vlad/layout/s-float-a-int.c + 2902891820b ./gcc/testsuite/consistency.vlad/layout/s-float-a-long.c + 3379455906b ./gcc/testsuite/consistency.vlad/layout/s-float-a-longdouble.c + 398042011b ./gcc/testsuite/consistency.vlad/layout/s-float-a-longlong.c + 2674774020b ./gcc/testsuite/consistency.vlad/layout/s-float-a-pointer.c + 3115271065b ./gcc/testsuite/consistency.vlad/layout/s-float-a-short.c + 230653640b ./gcc/testsuite/consistency.vlad/layout/s-float-char.c + 1157255499b ./gcc/testsuite/consistency.vlad/layout/s-float-double.c + 3686192464b ./gcc/testsuite/consistency.vlad/layout/s-float-float.c + 2877639267b ./gcc/testsuite/consistency.vlad/layout/s-float-int.c + 3705421231b ./gcc/testsuite/consistency.vlad/layout/s-float-long.c + 1996389551b ./gcc/testsuite/consistency.vlad/layout/s-float-longdouble.c + 3641662812b ./gcc/testsuite/consistency.vlad/layout/s-float-longlong.c + 4197610973b ./gcc/testsuite/consistency.vlad/layout/s-float-pointer.c + 3172840384b ./gcc/testsuite/consistency.vlad/layout/s-float-ptrdiff_t.c + 3748837421b ./gcc/testsuite/consistency.vlad/layout/s-float-s-char.c + 1026162480b ./gcc/testsuite/consistency.vlad/layout/s-float-s-double.c + 1757829971b ./gcc/testsuite/consistency.vlad/layout/s-float-s-float.c + 1092900439b ./gcc/testsuite/consistency.vlad/layout/s-float-short.c + 1286304248b ./gcc/testsuite/consistency.vlad/layout/s-float-s-int.c + 1246576103b ./gcc/testsuite/consistency.vlad/layout/s-float-size_t.c + 1058880033b ./gcc/testsuite/consistency.vlad/layout/s-float-s-long.c + 3954384291b ./gcc/testsuite/consistency.vlad/layout/s-float-s-longdouble.c + 2151659662b ./gcc/testsuite/consistency.vlad/layout/s-float-s-longlong.c + 3825039217b ./gcc/testsuite/consistency.vlad/layout/s-float-s-pointer.c + 4061428355b ./gcc/testsuite/consistency.vlad/layout/s-float-s-short.c + 1758331367b ./gcc/testsuite/consistency.vlad/layout/s-float-wchar_t.c + 3117484708b ./gcc/testsuite/consistency.vlad/layout/s-float-zf-char.c + 550306535b ./gcc/testsuite/consistency.vlad/layout/s-float-zf-int.c + 860633704b ./gcc/testsuite/consistency.vlad/layout/s-float-zf-long.c + 2581705036b ./gcc/testsuite/consistency.vlad/layout/s-float-zf-longlong.c + 978024585b ./gcc/testsuite/consistency.vlad/layout/s-float-zf-short.c + 2251445439b ./gcc/testsuite/consistency.vlad/layout/s-int-a-char.c + 4138447069b ./gcc/testsuite/consistency.vlad/layout/s-int-a-double.c + 8870751b ./gcc/testsuite/consistency.vlad/layout/s-int-a-float.c + 594032269b ./gcc/testsuite/consistency.vlad/layout/s-int-a-int.c + 1651432793b ./gcc/testsuite/consistency.vlad/layout/s-int-a-long.c + 425973014b ./gcc/testsuite/consistency.vlad/layout/s-int-a-longdouble.c + 2059166583b ./gcc/testsuite/consistency.vlad/layout/s-int-a-longlong.c + 1995049255b ./gcc/testsuite/consistency.vlad/layout/s-int-a-pointer.c + 2715818862b ./gcc/testsuite/consistency.vlad/layout/s-int-a-short.c + 2961221250b ./gcc/testsuite/consistency.vlad/layout/s-int-char.c + 3584882967b ./gcc/testsuite/consistency.vlad/layout/s-int-double.c + 125565346b ./gcc/testsuite/consistency.vlad/layout/s-int-float.c + 2549467707b ./gcc/testsuite/consistency.vlad/layout/s-int-int.c + 2672469567b ./gcc/testsuite/consistency.vlad/layout/s-int-long.c + 1658335152b ./gcc/testsuite/consistency.vlad/layout/s-int-longdouble.c + 2278283539b ./gcc/testsuite/consistency.vlad/layout/s-int-longlong.c + 2494362400b ./gcc/testsuite/consistency.vlad/layout/s-int-pointer.c + 2858080039b ./gcc/testsuite/consistency.vlad/layout/s-int-ptrdiff_t.c + 2014925874b ./gcc/testsuite/consistency.vlad/layout/s-int-s-char.c + 1964724618b ./gcc/testsuite/consistency.vlad/layout/s-int-s-double.c + 3513841278b ./gcc/testsuite/consistency.vlad/layout/s-int-s-float.c + 3104696131b ./gcc/testsuite/consistency.vlad/layout/s-int-short.c + 1905836586b ./gcc/testsuite/consistency.vlad/layout/s-int-s-int.c + 2371102487b ./gcc/testsuite/consistency.vlad/layout/s-int-size_t.c + 2587799721b ./gcc/testsuite/consistency.vlad/layout/s-int-s-long.c + 3343583899b ./gcc/testsuite/consistency.vlad/layout/s-int-s-longdouble.c + 3181309941b ./gcc/testsuite/consistency.vlad/layout/s-int-s-longlong.c + 3198349197b ./gcc/testsuite/consistency.vlad/layout/s-int-s-pointer.c + 1300436407b ./gcc/testsuite/consistency.vlad/layout/s-int-s-short.c + 1358869671b ./gcc/testsuite/consistency.vlad/layout/s-int-wchar_t.c + 2934034901b ./gcc/testsuite/consistency.vlad/layout/s-int-zf-char.c + 3777217979b ./gcc/testsuite/consistency.vlad/layout/s-int-zf-int.c + 823148372b ./gcc/testsuite/consistency.vlad/layout/s-int-zf-long.c + 55540591b ./gcc/testsuite/consistency.vlad/layout/s-int-zf-longlong.c + 3825926612b ./gcc/testsuite/consistency.vlad/layout/s-int-zf-short.c + 1746672839b ./gcc/testsuite/consistency.vlad/layout/size-bool.cpp + 1662052327b ./gcc/testsuite/consistency.vlad/layout/size-char.c + 3361924014b ./gcc/testsuite/consistency.vlad/layout/size-double.c + 3608174439b ./gcc/testsuite/consistency.vlad/layout/size-float.c + 224133749b ./gcc/testsuite/consistency.vlad/layout/size-int.c + 2229647371b ./gcc/testsuite/consistency.vlad/layout/size-long.c + 1496097293b ./gcc/testsuite/consistency.vlad/layout/size-longdouble.c + 4243493805b ./gcc/testsuite/consistency.vlad/layout/size-longlong.c + 4234774016b ./gcc/testsuite/consistency.vlad/layout/size-pointer.c + 2742276437b ./gcc/testsuite/consistency.vlad/layout/size-ptrdiff.c + 2302838291b ./gcc/testsuite/consistency.vlad/layout/size-short.c + 1008704183b ./gcc/testsuite/consistency.vlad/layout/size-size.c + 767395346b ./gcc/testsuite/consistency.vlad/layout/size-wchar.c + 1014160019b ./gcc/testsuite/consistency.vlad/layout/s-long-a-char.c + 1536711874b ./gcc/testsuite/consistency.vlad/layout/s-long-a-double.c + 3755724289b ./gcc/testsuite/consistency.vlad/layout/s-long-a-float.c + 503463330b ./gcc/testsuite/consistency.vlad/layout/s-long-a-int.c + 3383693601b ./gcc/testsuite/consistency.vlad/layout/s-long-a-long.c + 2168579267b ./gcc/testsuite/consistency.vlad/layout/s-long-a-longdouble.c + 4089126986b ./gcc/testsuite/consistency.vlad/layout/s-long-a-longlong.c + 4219127792b ./gcc/testsuite/consistency.vlad/layout/s-long-a-pointer.c + 1534004990b ./gcc/testsuite/consistency.vlad/layout/s-long-a-short.c + 34352633b ./gcc/testsuite/consistency.vlad/layout/s-long-char.c + 2174891233b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-a-char.c + 2263495912b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-a-double.c + 3626355134b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-a-float.c + 1044992438b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-a-int.c + 189180334b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-a-long.c + 4219133242b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-a-longdouble.c + 2001710554b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-a-longlong.c + 1208252647b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-a-pointer.c + 2636586618b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-a-short.c + 1855339665b ./gcc/testsuite/consistency.vlad/layout/s-long-double.c + 1490423944b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-char.c + 838089339b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-double.c + 1901020700b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-float.c + 2396695027b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-int.c + 2690146526b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-long.c + 2776581044b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-longdouble.c + 3418604951b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-longlong.c + 1459368509b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-pointer.c + 3960936313b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-ptrdiff_t.c + 3172036867b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-s-char.c + 3278313495b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-s-double.c + 717089781b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-s-float.c + 2851776236b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-short.c + 585061394b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-s-int.c + 1105156962b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-size_t.c + 2473143756b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-s-long.c + 3638726274b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-s-longdouble.c + 2023017496b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-s-longlong.c + 54720140b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-s-pointer.c + 1046498915b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-s-short.c + 696506953b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-wchar_t.c + 928069138b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-zf-char.c + 258209983b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-zf-int.c + 2227123382b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-zf-long.c + 2318782753b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-zf-longlong.c + 558562280b ./gcc/testsuite/consistency.vlad/layout/s-longdouble-zf-short.c + 1325299293b ./gcc/testsuite/consistency.vlad/layout/s-long-float.c + 1780742682b ./gcc/testsuite/consistency.vlad/layout/s-long-int.c + 2746913946b ./gcc/testsuite/consistency.vlad/layout/s-longlong-a-char.c + 2756929591b ./gcc/testsuite/consistency.vlad/layout/s-longlong-a-double.c + 2279164925b ./gcc/testsuite/consistency.vlad/layout/s-longlong-a-float.c + 4018385557b ./gcc/testsuite/consistency.vlad/layout/s-longlong-a-int.c + 1568904470b ./gcc/testsuite/consistency.vlad/layout/s-longlong-a-long.c + 2084909194b ./gcc/testsuite/consistency.vlad/layout/s-longlong-a-longdouble.c + 2072567607b ./gcc/testsuite/consistency.vlad/layout/s-longlong-a-longlong.c + 3659263135b ./gcc/testsuite/consistency.vlad/layout/s-longlong-a-pointer.c + 2702861495b ./gcc/testsuite/consistency.vlad/layout/s-longlong-a-short.c + 2290380505b ./gcc/testsuite/consistency.vlad/layout/s-long-long.c + 1507260206b ./gcc/testsuite/consistency.vlad/layout/s-longlong-char.c + 1915663861b ./gcc/testsuite/consistency.vlad/layout/s-long-longdouble.c + 3018473966b ./gcc/testsuite/consistency.vlad/layout/s-longlong-double.c + 3253702018b ./gcc/testsuite/consistency.vlad/layout/s-longlong-float.c + 2941557918b ./gcc/testsuite/consistency.vlad/layout/s-longlong-int.c + 2368362338b ./gcc/testsuite/consistency.vlad/layout/s-long-longlong.c + 4153967841b ./gcc/testsuite/consistency.vlad/layout/s-longlong-long.c + 3405846513b ./gcc/testsuite/consistency.vlad/layout/s-longlong-longdouble.c + 2651247883b ./gcc/testsuite/consistency.vlad/layout/s-longlong-longlong.c + 1899261816b ./gcc/testsuite/consistency.vlad/layout/s-longlong-pointer.c + 4100649747b ./gcc/testsuite/consistency.vlad/layout/s-longlong-ptrdiff_t.c + 183550901b ./gcc/testsuite/consistency.vlad/layout/s-longlong-s-char.c + 1353709337b ./gcc/testsuite/consistency.vlad/layout/s-longlong-s-double.c + 1622859985b ./gcc/testsuite/consistency.vlad/layout/s-longlong-s-float.c + 922091281b ./gcc/testsuite/consistency.vlad/layout/s-longlong-short.c + 3395819121b ./gcc/testsuite/consistency.vlad/layout/s-longlong-s-int.c + 3366304494b ./gcc/testsuite/consistency.vlad/layout/s-longlong-size_t.c + 263554828b ./gcc/testsuite/consistency.vlad/layout/s-longlong-s-long.c + 3292604731b ./gcc/testsuite/consistency.vlad/layout/s-longlong-s-longdouble.c + 591712639b ./gcc/testsuite/consistency.vlad/layout/s-longlong-s-longlong.c + 1892567537b ./gcc/testsuite/consistency.vlad/layout/s-longlong-s-pointer.c + 108932916b ./gcc/testsuite/consistency.vlad/layout/s-longlong-s-short.c + 2585353545b ./gcc/testsuite/consistency.vlad/layout/s-longlong-wchar_t.c + 1992502711b ./gcc/testsuite/consistency.vlad/layout/s-longlong-zf-char.c + 943400451b ./gcc/testsuite/consistency.vlad/layout/s-longlong-zf-int.c + 2630463188b ./gcc/testsuite/consistency.vlad/layout/s-longlong-zf-long.c + 108059264b ./gcc/testsuite/consistency.vlad/layout/s-longlong-zf-longlong.c + 162090179b ./gcc/testsuite/consistency.vlad/layout/s-longlong-zf-short.c + 843227723b ./gcc/testsuite/consistency.vlad/layout/s-long-pointer.c + 501034814b ./gcc/testsuite/consistency.vlad/layout/s-long-ptrdiff_t.c + 1174469544b ./gcc/testsuite/consistency.vlad/layout/s-long-s-char.c + 1007870215b ./gcc/testsuite/consistency.vlad/layout/s-long-s-double.c + 1307839500b ./gcc/testsuite/consistency.vlad/layout/s-long-s-float.c + 3071018593b ./gcc/testsuite/consistency.vlad/layout/s-long-short.c + 3475912781b ./gcc/testsuite/consistency.vlad/layout/s-long-s-int.c + 3723194327b ./gcc/testsuite/consistency.vlad/layout/s-long-size_t.c + 1568391695b ./gcc/testsuite/consistency.vlad/layout/s-long-s-long.c + 74365094b ./gcc/testsuite/consistency.vlad/layout/s-long-s-longdouble.c + 501521658b ./gcc/testsuite/consistency.vlad/layout/s-long-s-longlong.c + 1748381535b ./gcc/testsuite/consistency.vlad/layout/s-long-s-pointer.c + 1836579330b ./gcc/testsuite/consistency.vlad/layout/s-long-s-short.c + 531244141b ./gcc/testsuite/consistency.vlad/layout/s-long-wchar_t.c + 3081442820b ./gcc/testsuite/consistency.vlad/layout/s-long-zf-char.c + 914301375b ./gcc/testsuite/consistency.vlad/layout/s-long-zf-int.c + 1562082244b ./gcc/testsuite/consistency.vlad/layout/s-long-zf-long.c + 2520232686b ./gcc/testsuite/consistency.vlad/layout/s-long-zf-longlong.c + 3568433576b ./gcc/testsuite/consistency.vlad/layout/s-long-zf-short.c + 2431525882b ./gcc/testsuite/consistency.vlad/layout/s-pointer-a-char.c + 4182828966b ./gcc/testsuite/consistency.vlad/layout/s-pointer-a-double.c + 2030442801b ./gcc/testsuite/consistency.vlad/layout/s-pointer-a-float.c + 1733216426b ./gcc/testsuite/consistency.vlad/layout/s-pointer-a-int.c + 3840360232b ./gcc/testsuite/consistency.vlad/layout/s-pointer-a-long.c + 2069695022b ./gcc/testsuite/consistency.vlad/layout/s-pointer-a-longdouble.c + 2835229256b ./gcc/testsuite/consistency.vlad/layout/s-pointer-a-longlong.c + 3644499340b ./gcc/testsuite/consistency.vlad/layout/s-pointer-a-pointer.c + 773032503b ./gcc/testsuite/consistency.vlad/layout/s-pointer-a-short.c + 872221332b ./gcc/testsuite/consistency.vlad/layout/s-pointer-char.c + 3712864759b ./gcc/testsuite/consistency.vlad/layout/s-pointer-double.c + 3278150392b ./gcc/testsuite/consistency.vlad/layout/s-pointer-float.c + 2124704716b ./gcc/testsuite/consistency.vlad/layout/s-pointer-int.c + 1565179914b ./gcc/testsuite/consistency.vlad/layout/s-pointer-long.c + 2078378543b ./gcc/testsuite/consistency.vlad/layout/s-pointer-longdouble.c + 1849539090b ./gcc/testsuite/consistency.vlad/layout/s-pointer-longlong.c + 503815918b ./gcc/testsuite/consistency.vlad/layout/s-pointer-pointer.c + 3954057196b ./gcc/testsuite/consistency.vlad/layout/s-pointer-ptrdiff_t.c + 1074103467b ./gcc/testsuite/consistency.vlad/layout/s-pointer-s-char.c + 902838190b ./gcc/testsuite/consistency.vlad/layout/s-pointer-s-double.c + 2754137289b ./gcc/testsuite/consistency.vlad/layout/s-pointer-s-float.c + 2645485672b ./gcc/testsuite/consistency.vlad/layout/s-pointer-short.c + 157709325b ./gcc/testsuite/consistency.vlad/layout/s-pointer-s-int.c + 3640207262b ./gcc/testsuite/consistency.vlad/layout/s-pointer-size_t.c + 663732630b ./gcc/testsuite/consistency.vlad/layout/s-pointer-s-long.c + 1874509941b ./gcc/testsuite/consistency.vlad/layout/s-pointer-s-longdouble.c + 2063875624b ./gcc/testsuite/consistency.vlad/layout/s-pointer-s-longlong.c + 3199456656b ./gcc/testsuite/consistency.vlad/layout/s-pointer-s-pointer.c + 2883478056b ./gcc/testsuite/consistency.vlad/layout/s-pointer-s-short.c + 1316769493b ./gcc/testsuite/consistency.vlad/layout/s-pointer-wchar_t.c + 2773199310b ./gcc/testsuite/consistency.vlad/layout/s-pointer-zf-char.c + 2595768381b ./gcc/testsuite/consistency.vlad/layout/s-pointer-zf-int.c + 3251136680b ./gcc/testsuite/consistency.vlad/layout/s-pointer-zf-long.c + 3053600608b ./gcc/testsuite/consistency.vlad/layout/s-pointer-zf-longlong.c + 2022112027b ./gcc/testsuite/consistency.vlad/layout/s-pointer-zf-short.c + 618303243b ./gcc/testsuite/consistency.vlad/layout/s-ptrdiff_t-char.c + 3604192129b ./gcc/testsuite/consistency.vlad/layout/s-ptrdiff_t-double.c + 3789860510b ./gcc/testsuite/consistency.vlad/layout/s-ptrdiff_t-float.c + 4080198327b ./gcc/testsuite/consistency.vlad/layout/s-ptrdiff_t-int.c + 728676820b ./gcc/testsuite/consistency.vlad/layout/s-ptrdiff_t-long.c + 2724559984b ./gcc/testsuite/consistency.vlad/layout/s-ptrdiff_t-longdouble.c + 3861693259b ./gcc/testsuite/consistency.vlad/layout/s-ptrdiff_t-longlong.c + 2953128927b ./gcc/testsuite/consistency.vlad/layout/s-ptrdiff_t-pointer.c + 3951847759b ./gcc/testsuite/consistency.vlad/layout/s-ptrdiff_t-ptrdiff_t.c + 1191074387b ./gcc/testsuite/consistency.vlad/layout/s-ptrdiff_t-short.c + 2578277124b ./gcc/testsuite/consistency.vlad/layout/s-ptrdiff_t-size_t.c + 990211289b ./gcc/testsuite/consistency.vlad/layout/s-ptrdiff_t-wchar_t.c + 3239161768b ./gcc/testsuite/consistency.vlad/layout/s-short-a-char.c + 166180776b ./gcc/testsuite/consistency.vlad/layout/s-short-a-double.c + 3527046415b ./gcc/testsuite/consistency.vlad/layout/s-short-a-float.c + 3518845261b ./gcc/testsuite/consistency.vlad/layout/s-short-a-int.c + 2632946218b ./gcc/testsuite/consistency.vlad/layout/s-short-a-long.c + 891865249b ./gcc/testsuite/consistency.vlad/layout/s-short-a-longdouble.c + 3556515853b ./gcc/testsuite/consistency.vlad/layout/s-short-a-longlong.c + 4114603886b ./gcc/testsuite/consistency.vlad/layout/s-short-a-pointer.c + 613451481b ./gcc/testsuite/consistency.vlad/layout/s-short-a-short.c + 1593495051b ./gcc/testsuite/consistency.vlad/layout/s-short-char.c + 1100143197b ./gcc/testsuite/consistency.vlad/layout/s-short-double.c + 2242679753b ./gcc/testsuite/consistency.vlad/layout/s-short-float.c + 238785879b ./gcc/testsuite/consistency.vlad/layout/s-short-int.c + 2409205100b ./gcc/testsuite/consistency.vlad/layout/s-short-long.c + 936065027b ./gcc/testsuite/consistency.vlad/layout/s-short-longdouble.c + 1356304829b ./gcc/testsuite/consistency.vlad/layout/s-short-longlong.c + 3906654641b ./gcc/testsuite/consistency.vlad/layout/s-short-pointer.c + 746386291b ./gcc/testsuite/consistency.vlad/layout/s-short-ptrdiff_t.c + 4244286521b ./gcc/testsuite/consistency.vlad/layout/s-short-s-char.c + 2777905017b ./gcc/testsuite/consistency.vlad/layout/s-short-s-double.c + 2756050532b ./gcc/testsuite/consistency.vlad/layout/s-short-s-float.c + 524161230b ./gcc/testsuite/consistency.vlad/layout/s-short-short.c + 374910896b ./gcc/testsuite/consistency.vlad/layout/s-short-s-int.c + 1327871729b ./gcc/testsuite/consistency.vlad/layout/s-short-size_t.c + 479538741b ./gcc/testsuite/consistency.vlad/layout/s-short-s-long.c + 4025001367b ./gcc/testsuite/consistency.vlad/layout/s-short-s-longdouble.c + 1274385076b ./gcc/testsuite/consistency.vlad/layout/s-short-s-longlong.c + 2921220650b ./gcc/testsuite/consistency.vlad/layout/s-short-s-pointer.c + 1050140596b ./gcc/testsuite/consistency.vlad/layout/s-short-s-short.c + 2735755699b ./gcc/testsuite/consistency.vlad/layout/s-short-wchar_t.c + 2947437906b ./gcc/testsuite/consistency.vlad/layout/s-short-zf-char.c + 3330463439b ./gcc/testsuite/consistency.vlad/layout/s-short-zf-int.c + 624125342b ./gcc/testsuite/consistency.vlad/layout/s-short-zf-long.c + 3735090434b ./gcc/testsuite/consistency.vlad/layout/s-short-zf-longlong.c + 1239770486b ./gcc/testsuite/consistency.vlad/layout/s-short-zf-short.c + 3848053775b ./gcc/testsuite/consistency.vlad/layout/s-size_t-char.c + 1956516319b ./gcc/testsuite/consistency.vlad/layout/s-size_t-double.c + 2592266062b ./gcc/testsuite/consistency.vlad/layout/s-size_t-float.c + 3435419949b ./gcc/testsuite/consistency.vlad/layout/s-size_t-int.c + 2779348851b ./gcc/testsuite/consistency.vlad/layout/s-size_t-long.c + 1352676649b ./gcc/testsuite/consistency.vlad/layout/s-size_t-longdouble.c + 1255992044b ./gcc/testsuite/consistency.vlad/layout/s-size_t-longlong.c + 1034174646b ./gcc/testsuite/consistency.vlad/layout/s-size_t-pointer.c + 1114015641b ./gcc/testsuite/consistency.vlad/layout/s-size_t-ptrdiff_t.c + 4081850249b ./gcc/testsuite/consistency.vlad/layout/s-size_t-short.c + 3689183736b ./gcc/testsuite/consistency.vlad/layout/s-size_t-size_t.c + 1221978657b ./gcc/testsuite/consistency.vlad/layout/s-size_t-wchar_t.c + 828103866b ./gcc/testsuite/consistency.vlad/layout/s-wchar_t-char.c + 3601528642b ./gcc/testsuite/consistency.vlad/layout/s-wchar_t-double.c + 2903333507b ./gcc/testsuite/consistency.vlad/layout/s-wchar_t-float.c + 3466709699b ./gcc/testsuite/consistency.vlad/layout/s-wchar_t-int.c + 1609307684b ./gcc/testsuite/consistency.vlad/layout/s-wchar_t-long.c + 1060870307b ./gcc/testsuite/consistency.vlad/layout/s-wchar_t-longdouble.c + 6489873b ./gcc/testsuite/consistency.vlad/layout/s-wchar_t-longlong.c + 3776188535b ./gcc/testsuite/consistency.vlad/layout/s-wchar_t-pointer.c + 1700128528b ./gcc/testsuite/consistency.vlad/layout/s-wchar_t-ptrdiff_t.c + 4089915411b ./gcc/testsuite/consistency.vlad/layout/s-wchar_t-short.c + 2415574017b ./gcc/testsuite/consistency.vlad/layout/s-wchar_t-size_t.c + 2755349152b ./gcc/testsuite/consistency.vlad/layout/s-wchar_t-wchar_t.c + 3207711727b ./gcc/testsuite/consistency.vlad/README + 2068139423b ./gcc/testsuite/consistency.vlad/vlad.exp 2710099993b ./gcc/testsuite/g77.dg/20010216-1.f + 211215127b ./gcc/testsuite/g77.dg/bprob/bprob-1.f + 345215922b ./gcc/testsuite/g77.dg/bprob/bprob.exp 1815830648b ./gcc/testsuite/g77.dg/dg.exp + 2557434398b ./gcc/testsuite/g77.dg/f77-edit-i-in.f + 462852590b ./gcc/testsuite/g77.dg/f77-edit-i-out.f + 3692598063b ./gcc/testsuite/g77.dg/fbackslash.f + 3349950140b ./gcc/testsuite/g77.dg/fcase-preserve.f + 3493107241b ./gcc/testsuite/g77.dg/ff90-1.f + 846110140b ./gcc/testsuite/g77.dg/ffixed-line-length-0.f + 306302525b ./gcc/testsuite/g77.dg/ffixed-line-length-132.f + 256008601b ./gcc/testsuite/g77.dg/ffixed-line-length-72.f + 1293833923b ./gcc/testsuite/g77.dg/ffixed-line-length-7.f + 2426259256b ./gcc/testsuite/g77.dg/ffixed-line-length-none.f + 382313186b ./gcc/testsuite/g77.dg/ffree-form-1.f + 1427613779b ./gcc/testsuite/g77.dg/fno-backslash.f + 1787673713b ./gcc/testsuite/g77.dg/fno-f90-1.f + 1073584992b ./gcc/testsuite/g77.dg/fno-fixed-form-1.f + 2730066868b ./gcc/testsuite/g77.dg/fno-onetrip.f + 109115498b ./gcc/testsuite/g77.dg/fno-typeless-boz.f + 2720105997b ./gcc/testsuite/g77.dg/fno-underscoring.f + 614291430b ./gcc/testsuite/g77.dg/fno-vxt-1.f + 646478354b ./gcc/testsuite/g77.dg/fonetrip.f + 298378793b ./gcc/testsuite/g77.dg/ftypeless-boz.f + 1970388396b ./gcc/testsuite/g77.dg/fugly-assumed.f + 813122842b ./gcc/testsuite/g77.dg/funderscoring.f + 2755287889b ./gcc/testsuite/g77.dg/fvxt-1.f + 4218369628b ./gcc/testsuite/g77.dg/gcov/gcov-1.f + 2262587727b ./gcc/testsuite/g77.dg/gcov/gcov-1.x + 3439770285b ./gcc/testsuite/g77.dg/gcov/gcov.exp + 2336318971b ./gcc/testsuite/g77.dg/pr3743-1.f + 3986109564b ./gcc/testsuite/g77.dg/pr3743-2.f + 202729794b ./gcc/testsuite/g77.dg/pr3743-3.f + 2533314951b ./gcc/testsuite/g77.dg/pr3743-4.f + 3959051916b ./gcc/testsuite/g77.dg/pr5473.f + 3263834407b ./gcc/testsuite/g77.dg/strlen0.f 2382988813b ./gcc/testsuite/g77.f-torture/compile/19990218-0.f 687255164b ./gcc/testsuite/g77.f-torture/compile/19990305-0.f 4067537756b ./gcc/testsuite/g77.f-torture/compile/19990419-0.f *************** *** 2096,2101 **** --- 5137,5143 ---- 2336002500b ./gcc/testsuite/g77.f-torture/compile/20000630-2.f 3970776632b ./gcc/testsuite/g77.f-torture/compile/20010115.f 3772314415b ./gcc/testsuite/g77.f-torture/compile/20010321-1.f + 2213180372b ./gcc/testsuite/g77.f-torture/compile/20010426.f 267354428b ./gcc/testsuite/g77.f-torture/compile/20010519-1.f 1776224360b ./gcc/testsuite/g77.f-torture/compile/960317-1.f 2528706840b ./gcc/testsuite/g77.f-torture/compile/970125-0.f *************** *** 2115,2121 **** 1069123470b ./gcc/testsuite/g77.f-torture/compile/981117-1.f 2053478041b ./gcc/testsuite/g77.f-torture/compile/990115-1.f 3973737388b ./gcc/testsuite/g77.f-torture/compile/alpha1.f ! 4102920068b ./gcc/testsuite/g77.f-torture/compile/compile.exp 1347946300b ./gcc/testsuite/g77.f-torture/compile/cpp2.F 883444817b ./gcc/testsuite/g77.f-torture/compile/cpp.F 407305629b ./gcc/testsuite/g77.f-torture/compile/toon_1.f --- 5157,5164 ---- 1069123470b ./gcc/testsuite/g77.f-torture/compile/981117-1.f 2053478041b ./gcc/testsuite/g77.f-torture/compile/990115-1.f 3973737388b ./gcc/testsuite/g77.f-torture/compile/alpha1.f ! 2107279947b ./gcc/testsuite/g77.f-torture/compile/alpha1.x ! 4148688482b ./gcc/testsuite/g77.f-torture/compile/compile.exp 1347946300b ./gcc/testsuite/g77.f-torture/compile/cpp2.F 883444817b ./gcc/testsuite/g77.f-torture/compile/cpp.F 407305629b ./gcc/testsuite/g77.f-torture/compile/toon_1.f *************** *** 2132,2138 **** --- 5175,5187 ---- 2245832686b ./gcc/testsuite/g77.f-torture/execute/20000503-1.f 119817854b ./gcc/testsuite/g77.f-torture/execute/20001111.f 3778266196b ./gcc/testsuite/g77.f-torture/execute/20001201.f + 1721706271b ./gcc/testsuite/g77.f-torture/execute/20001201.x 3482653018b ./gcc/testsuite/g77.f-torture/execute/20010116.f + 104441706b ./gcc/testsuite/g77.f-torture/execute/20010426.f + 2134591728b ./gcc/testsuite/g77.f-torture/execute/20010430.f + 2127502131b ./gcc/testsuite/g77.f-torture/execute/20010610.f + 1835626441b ./gcc/testsuite/g77.f-torture/execute/5122.f + 166046708b ./gcc/testsuite/g77.f-torture/execute/947.f 2872624206b ./gcc/testsuite/g77.f-torture/execute/970625-2.f 2944713164b ./gcc/testsuite/g77.f-torture/execute/970816-3.f 3043987240b ./gcc/testsuite/g77.f-torture/execute/971102-1.f *************** *** 2143,2158 **** --- 5192,5213 ---- 652392894b ./gcc/testsuite/g77.f-torture/execute/980628-2.f 3891656681b ./gcc/testsuite/g77.f-torture/execute/980628-3.f 4188896500b ./gcc/testsuite/g77.f-torture/execute/980628-4.f + 2107279947b ./gcc/testsuite/g77.f-torture/execute/980628-4.x 3480269714b ./gcc/testsuite/g77.f-torture/execute/980628-5.f + 2107279947b ./gcc/testsuite/g77.f-torture/execute/980628-5.x 1467613590b ./gcc/testsuite/g77.f-torture/execute/980628-6.f + 2107279947b ./gcc/testsuite/g77.f-torture/execute/980628-6.x 1104933088b ./gcc/testsuite/g77.f-torture/execute/980628-7.f 1264093278b ./gcc/testsuite/g77.f-torture/execute/980628-8.f 2969694593b ./gcc/testsuite/g77.f-torture/execute/980628-9.f 1979661682b ./gcc/testsuite/g77.f-torture/execute/980701-0.f 2199388550b ./gcc/testsuite/g77.f-torture/execute/980701-1.f 2519492399b ./gcc/testsuite/g77.f-torture/execute/alpha2.f + 2107279947b ./gcc/testsuite/g77.f-torture/execute/alpha2.x 2259027475b ./gcc/testsuite/g77.f-torture/execute/auto0.f + 2107279947b ./gcc/testsuite/g77.f-torture/execute/auto0.x 4202240464b ./gcc/testsuite/g77.f-torture/execute/auto1.f + 2107279947b ./gcc/testsuite/g77.f-torture/execute/auto1.x 232981110b ./gcc/testsuite/g77.f-torture/execute/cabs.f 877306443b ./gcc/testsuite/g77.f-torture/execute/claus.f 2682388459b ./gcc/testsuite/g77.f-torture/execute/complex_1.f *************** *** 2161,2175 **** 3689042274b ./gcc/testsuite/g77.f-torture/execute/dcomplex.f 2431087293b ./gcc/testsuite/g77.f-torture/execute/dnrm2.f 1012852742b ./gcc/testsuite/g77.f-torture/execute/erfc.f ! 2699270047b ./gcc/testsuite/g77.f-torture/execute/execute.exp 2348837361b ./gcc/testsuite/g77.f-torture/execute/exp.f 3527337523b ./gcc/testsuite/g77.f-torture/execute/io0.f 1499748556b ./gcc/testsuite/g77.f-torture/execute/io1.f 3838992103b ./gcc/testsuite/g77.f-torture/execute/labug1.f 273345472b ./gcc/testsuite/g77.f-torture/execute/large_vec.f 775036014b ./gcc/testsuite/g77.f-torture/execute/le.f 3780459526b ./gcc/testsuite/g77.f-torture/execute/short.f 85764886b ./gcc/testsuite/g77.f-torture/execute/u77-test.f 2234422141b ./gcc/testsuite/g77.f-torture/noncompile/19981216-0.f 2509327097b ./gcc/testsuite/g77.f-torture/noncompile/19990218-1.f 684708897b ./gcc/testsuite/g77.f-torture/noncompile/19990826-4.f --- 5216,5241 ---- 3689042274b ./gcc/testsuite/g77.f-torture/execute/dcomplex.f 2431087293b ./gcc/testsuite/g77.f-torture/execute/dnrm2.f 1012852742b ./gcc/testsuite/g77.f-torture/execute/erfc.f ! 574860802b ./gcc/testsuite/g77.f-torture/execute/execute.exp 2348837361b ./gcc/testsuite/g77.f-torture/execute/exp.f + 1166305221b ./gcc/testsuite/g77.f-torture/execute/f90-intrinsic-bit.f + 1401151480b ./gcc/testsuite/g77.f-torture/execute/f90-intrinsic-mathematical.f + 296501581b ./gcc/testsuite/g77.f-torture/execute/f90-intrinsic-numeric.f + 1448802159b ./gcc/testsuite/g77.f-torture/execute/intrinsic77.f + 1619227376b ./gcc/testsuite/g77.f-torture/execute/intrinsic-f2c-z.f + 2512429495b ./gcc/testsuite/g77.f-torture/execute/intrinsic-unix-bessel.f + 846341057b ./gcc/testsuite/g77.f-torture/execute/intrinsic-unix-erf.f + 3837275230b ./gcc/testsuite/g77.f-torture/execute/intrinsic-vax-cd.f 3527337523b ./gcc/testsuite/g77.f-torture/execute/io0.f + 1721706271b ./gcc/testsuite/g77.f-torture/execute/io0.x 1499748556b ./gcc/testsuite/g77.f-torture/execute/io1.f + 1721706271b ./gcc/testsuite/g77.f-torture/execute/io1.x 3838992103b ./gcc/testsuite/g77.f-torture/execute/labug1.f 273345472b ./gcc/testsuite/g77.f-torture/execute/large_vec.f 775036014b ./gcc/testsuite/g77.f-torture/execute/le.f 3780459526b ./gcc/testsuite/g77.f-torture/execute/short.f 85764886b ./gcc/testsuite/g77.f-torture/execute/u77-test.f + 991484451b ./gcc/testsuite/g77.f-torture/execute/u77-test.x 2234422141b ./gcc/testsuite/g77.f-torture/noncompile/19981216-0.f 2509327097b ./gcc/testsuite/g77.f-torture/noncompile/19990218-1.f 684708897b ./gcc/testsuite/g77.f-torture/noncompile/19990826-4.f *************** *** 2178,2184 **** 3382416911b ./gcc/testsuite/g77.f-torture/noncompile/980615-0.f 4269744935b ./gcc/testsuite/g77.f-torture/noncompile/980616-0.f 2374591598b ./gcc/testsuite/g77.f-torture/noncompile/check0.f ! 2832439585b ./gcc/testsuite/g77.f-torture/noncompile/noncompile.exp 2075770423b ./gcc/testsuite/gcc.c-torture/ChangeLog.0 1091110310b ./gcc/testsuite/gcc.c-torture/compat/strct-layout.c 684784126b ./gcc/testsuite/gcc.c-torture/compat/struct-align.c --- 5244,5250 ---- 3382416911b ./gcc/testsuite/g77.f-torture/noncompile/980615-0.f 4269744935b ./gcc/testsuite/g77.f-torture/noncompile/980616-0.f 2374591598b ./gcc/testsuite/g77.f-torture/noncompile/check0.f ! 351555731b ./gcc/testsuite/g77.f-torture/noncompile/noncompile.exp 2075770423b ./gcc/testsuite/gcc.c-torture/ChangeLog.0 1091110310b ./gcc/testsuite/gcc.c-torture/compat/strct-layout.c 684784126b ./gcc/testsuite/gcc.c-torture/compat/struct-align.c *************** *** 2194,2200 **** 3770371830b ./gcc/testsuite/gcc.c-torture/compile/20000127-1.c 1457334923b ./gcc/testsuite/gcc.c-torture/compile/20000211-1.c 3072124491b ./gcc/testsuite/gcc.c-torture/compile/20000211-3.c ! 3582069713b ./gcc/testsuite/gcc.c-torture/compile/20000224-1.c 976060843b ./gcc/testsuite/gcc.c-torture/compile/20000314-1.c 2716819908b ./gcc/testsuite/gcc.c-torture/compile/20000314-2.c 3323098889b ./gcc/testsuite/gcc.c-torture/compile/20000319-1.c --- 5260,5266 ---- 3770371830b ./gcc/testsuite/gcc.c-torture/compile/20000127-1.c 1457334923b ./gcc/testsuite/gcc.c-torture/compile/20000211-1.c 3072124491b ./gcc/testsuite/gcc.c-torture/compile/20000211-3.c ! 2487027780b ./gcc/testsuite/gcc.c-torture/compile/20000224-1.c 976060843b ./gcc/testsuite/gcc.c-torture/compile/20000314-1.c 2716819908b ./gcc/testsuite/gcc.c-torture/compile/20000314-2.c 3323098889b ./gcc/testsuite/gcc.c-torture/compile/20000319-1.c *************** *** 2235,2241 **** 1702972966b ./gcc/testsuite/gcc.c-torture/compile/20000922-1.c 1072305501b ./gcc/testsuite/gcc.c-torture/compile/20000923-1.c 3797844565b ./gcc/testsuite/gcc.c-torture/compile/20001018-1.c - 2402428546b ./gcc/testsuite/gcc.c-torture/compile/20001018-1.x 1683967360b ./gcc/testsuite/gcc.c-torture/compile/20001024-1.c 2747210984b ./gcc/testsuite/gcc.c-torture/compile/20001109-1.c 1480527842b ./gcc/testsuite/gcc.c-torture/compile/20001109-2.c --- 5301,5306 ---- *************** *** 2255,2261 **** 1898226085b ./gcc/testsuite/gcc.c-torture/compile/20010112-1.c 2489493145b ./gcc/testsuite/gcc.c-torture/compile/20010113-1.c 297170965b ./gcc/testsuite/gcc.c-torture/compile/20010114-1.c - 2402428546b ./gcc/testsuite/gcc.c-torture/compile/20010114-1.x 419921862b ./gcc/testsuite/gcc.c-torture/compile/20010114-2.c 1452007589b ./gcc/testsuite/gcc.c-torture/compile/20010117-1.c 704576096b ./gcc/testsuite/gcc.c-torture/compile/20010117-2.c --- 5320,5325 ---- *************** *** 2263,2268 **** --- 5327,5337 ---- 3355150280b ./gcc/testsuite/gcc.c-torture/compile/20010124-1.c 1731094577b ./gcc/testsuite/gcc.c-torture/compile/20010202-1.c 459778149b ./gcc/testsuite/gcc.c-torture/compile/20010209-1.c + 620156961b ./gcc/testsuite/gcc.c-torture/compile/20010226-1.c + 501795051b ./gcc/testsuite/gcc.c-torture/compile/20010227-1.c + 1832317029b ./gcc/testsuite/gcc.c-torture/compile/20010313-1.c + 2854417844b ./gcc/testsuite/gcc.c-torture/compile/20010320-1.c + 3271306723b ./gcc/testsuite/gcc.c-torture/compile/20010326-1.c 2222955049b ./gcc/testsuite/gcc.c-torture/compile/20010327-1.c 3399421780b ./gcc/testsuite/gcc.c-torture/compile/20010328-1.c 3356008690b ./gcc/testsuite/gcc.c-torture/compile/20010329-1.c *************** *** 2270,2285 **** --- 5339,5410 ---- 1548469760b ./gcc/testsuite/gcc.c-torture/compile/20010408-1.c 3063630520b ./gcc/testsuite/gcc.c-torture/compile/20010421-1.c 3134579946b ./gcc/testsuite/gcc.c-torture/compile/20010423-1.c + 2289909284b ./gcc/testsuite/gcc.c-torture/compile/20010426-1.c 2357536931b ./gcc/testsuite/gcc.c-torture/compile/20010503-1.c + 1212631565b ./gcc/testsuite/gcc.c-torture/compile/20010510-1.c + 1882079811b ./gcc/testsuite/gcc.c-torture/compile/20010516-1.c + 3166989448b ./gcc/testsuite/gcc.c-torture/compile/20010518-1.c + 3017611134b ./gcc/testsuite/gcc.c-torture/compile/20010518-2.c + 85616231b ./gcc/testsuite/gcc.c-torture/compile/20010518-2.x 3272357537b ./gcc/testsuite/gcc.c-torture/compile/20010525-1.c 475581102b ./gcc/testsuite/gcc.c-torture/compile/20010605-1.c + 2936945185b ./gcc/testsuite/gcc.c-torture/compile/20010605-2.c + 1294346331b ./gcc/testsuite/gcc.c-torture/compile/20010605-3.c 1636067950b ./gcc/testsuite/gcc.c-torture/compile/20010610-1.c 3077114319b ./gcc/testsuite/gcc.c-torture/compile/20010611-1.c + 2584744929b ./gcc/testsuite/gcc.c-torture/compile/20010701-1.c + 3815198051b ./gcc/testsuite/gcc.c-torture/compile/20010706-1.c + 2713093522b ./gcc/testsuite/gcc.c-torture/compile/20010711-1.c + 2299173088b ./gcc/testsuite/gcc.c-torture/compile/20010711-2.c + 2571658330b ./gcc/testsuite/gcc.c-torture/compile/20010714-1.c + 3287379546b ./gcc/testsuite/gcc.c-torture/compile/20010824-1.c 246682254b ./gcc/testsuite/gcc.c-torture/compile/20010903-1.c + 2923439609b ./gcc/testsuite/gcc.c-torture/compile/20010903-2.c + 4222197564b ./gcc/testsuite/gcc.c-torture/compile/20010911-1.c 1179192833b ./gcc/testsuite/gcc.c-torture/compile/20011010-1.c + 3994663975b ./gcc/testsuite/gcc.c-torture/compile/20011023-1.c 1413783183b ./gcc/testsuite/gcc.c-torture/compile/20011029-1.c + 2871784009b ./gcc/testsuite/gcc.c-torture/compile/20011106-1.c + 3630952349b ./gcc/testsuite/gcc.c-torture/compile/20011106-2.c 259957404b ./gcc/testsuite/gcc.c-torture/compile/20011109-1.c + 2924929463b ./gcc/testsuite/gcc.c-torture/compile/20011114-1.c + 3434496008b ./gcc/testsuite/gcc.c-torture/compile/20011114-2.c + 2760161415b ./gcc/testsuite/gcc.c-torture/compile/20011114-3.c + 3547339064b ./gcc/testsuite/gcc.c-torture/compile/20011114-4.c + 3653343012b ./gcc/testsuite/gcc.c-torture/compile/20011119-1.c + 2885054257b ./gcc/testsuite/gcc.c-torture/compile/20011119-2.c + 174415171b ./gcc/testsuite/gcc.c-torture/compile/20011130-1.c + 1745547919b ./gcc/testsuite/gcc.c-torture/compile/20011130-2.c 3987052556b ./gcc/testsuite/gcc.c-torture/compile/20011205-1.c + 1179199950b ./gcc/testsuite/gcc.c-torture/compile/20011217-1.c + 315452475b ./gcc/testsuite/gcc.c-torture/compile/20011217-2.c + 3416537061b ./gcc/testsuite/gcc.c-torture/compile/20011218-1.c + 2149414673b ./gcc/testsuite/gcc.c-torture/compile/20011219-1.c + 1484609615b ./gcc/testsuite/gcc.c-torture/compile/20011219-2.c + 3590162726b ./gcc/testsuite/gcc.c-torture/compile/20011229-1.c + 1849951092b ./gcc/testsuite/gcc.c-torture/compile/20011229-2.c + 3637150343b ./gcc/testsuite/gcc.c-torture/compile/20020103-1.c + 3505269843b ./gcc/testsuite/gcc.c-torture/compile/20020106-1.c + 3398919425b ./gcc/testsuite/gcc.c-torture/compile/20020109-1.c + 2348431150b ./gcc/testsuite/gcc.c-torture/compile/20020109-2.c + 4197667212b ./gcc/testsuite/gcc.c-torture/compile/20020110.c + 208428249b ./gcc/testsuite/gcc.c-torture/compile/20020116-1.c + 966527433b ./gcc/testsuite/gcc.c-torture/compile/20020120-1.c + 3002186865b ./gcc/testsuite/gcc.c-torture/compile/20020121-1.c + 2862264485b ./gcc/testsuite/gcc.c-torture/compile/20020206-1.c + 1009994283b ./gcc/testsuite/gcc.c-torture/compile/20020210-1.c + 1683706700b ./gcc/testsuite/gcc.c-torture/compile/20020304-1.c + 3186842248b ./gcc/testsuite/gcc.c-torture/compile/20020304-2.c + 1366050512b ./gcc/testsuite/gcc.c-torture/compile/20020309-1.c + 1174986914b ./gcc/testsuite/gcc.c-torture/compile/20020309-2.c + 1727441689b ./gcc/testsuite/gcc.c-torture/compile/20020312-1.c + 2378124589b ./gcc/testsuite/gcc.c-torture/compile/20020315-1.c + 4029159547b ./gcc/testsuite/gcc.c-torture/compile/20020318-1.c + 2837722984b ./gcc/testsuite/gcc.c-torture/compile/20020320-1.c + 1380106070b ./gcc/testsuite/gcc.c-torture/compile/20020323-1.c + 392286369b ./gcc/testsuite/gcc.c-torture/compile/20020330-1.c + 4289507025b ./gcc/testsuite/gcc.c-torture/compile/20020409-1.c + 3246888365b ./gcc/testsuite/gcc.c-torture/compile/20020418-1.c 375311401b ./gcc/testsuite/gcc.c-torture/compile/900116-1.c 4181931788b ./gcc/testsuite/gcc.c-torture/compile/900216-1.c 426860692b ./gcc/testsuite/gcc.c-torture/compile/900313-1.c *************** *** 2324,2330 **** 4273234272b ./gcc/testsuite/gcc.c-torture/compile/920502-1.c 451473472b ./gcc/testsuite/gcc.c-torture/compile/920502-2.c 1332166500b ./gcc/testsuite/gcc.c-torture/compile/920520-1.c ! 1766348262b ./gcc/testsuite/gcc.c-torture/compile/920520-1.x 901366109b ./gcc/testsuite/gcc.c-torture/compile/920521-1.c 85616231b ./gcc/testsuite/gcc.c-torture/compile/920521-1.x 1216353647b ./gcc/testsuite/gcc.c-torture/compile/920529-1.c --- 5449,5455 ---- 4273234272b ./gcc/testsuite/gcc.c-torture/compile/920502-1.c 451473472b ./gcc/testsuite/gcc.c-torture/compile/920502-2.c 1332166500b ./gcc/testsuite/gcc.c-torture/compile/920520-1.c ! 3357986992b ./gcc/testsuite/gcc.c-torture/compile/920520-1.x 901366109b ./gcc/testsuite/gcc.c-torture/compile/920521-1.c 85616231b ./gcc/testsuite/gcc.c-torture/compile/920521-1.x 1216353647b ./gcc/testsuite/gcc.c-torture/compile/920529-1.c *************** *** 2336,2341 **** --- 5461,5467 ---- 15254500b ./gcc/testsuite/gcc.c-torture/compile/920623-1.c 1775235688b ./gcc/testsuite/gcc.c-torture/compile/920624-1.c 3157795265b ./gcc/testsuite/gcc.c-torture/compile/920625-1.c + 2188778612b ./gcc/testsuite/gcc.c-torture/compile/920625-1.x 832571494b ./gcc/testsuite/gcc.c-torture/compile/920625-2.c 1209301541b ./gcc/testsuite/gcc.c-torture/compile/920626-1.c 1071302436b ./gcc/testsuite/gcc.c-torture/compile/920701-1.c *************** *** 2491,2503 **** 2048507537b ./gcc/testsuite/gcc.c-torture/compile/961031-1.c 3079865887b ./gcc/testsuite/gcc.c-torture/compile/961126-1.c 1672232168b ./gcc/testsuite/gcc.c-torture/compile/961203-1.c ! 62534017b ./gcc/testsuite/gcc.c-torture/compile/961203-1.x 3759439975b ./gcc/testsuite/gcc.c-torture/compile/970206-1.c 1182708149b ./gcc/testsuite/gcc.c-torture/compile/970214-1.c 3593522245b ./gcc/testsuite/gcc.c-torture/compile/980329-1.c 3672497829b ./gcc/testsuite/gcc.c-torture/compile/980408-1.c 2062728359b ./gcc/testsuite/gcc.c-torture/compile/980504-1.c 4232017618b ./gcc/testsuite/gcc.c-torture/compile/980506-1.c 32528983b ./gcc/testsuite/gcc.c-torture/compile/980506-2.c 4270541716b ./gcc/testsuite/gcc.c-torture/compile/980511-1.c 3713274322b ./gcc/testsuite/gcc.c-torture/compile/980701-1.c --- 5617,5630 ---- 2048507537b ./gcc/testsuite/gcc.c-torture/compile/961031-1.c 3079865887b ./gcc/testsuite/gcc.c-torture/compile/961126-1.c 1672232168b ./gcc/testsuite/gcc.c-torture/compile/961203-1.c ! 4037616572b ./gcc/testsuite/gcc.c-torture/compile/961203-1.x 3759439975b ./gcc/testsuite/gcc.c-torture/compile/970206-1.c 1182708149b ./gcc/testsuite/gcc.c-torture/compile/970214-1.c 3593522245b ./gcc/testsuite/gcc.c-torture/compile/980329-1.c 3672497829b ./gcc/testsuite/gcc.c-torture/compile/980408-1.c 2062728359b ./gcc/testsuite/gcc.c-torture/compile/980504-1.c 4232017618b ./gcc/testsuite/gcc.c-torture/compile/980506-1.c + 4075622106b ./gcc/testsuite/gcc.c-torture/compile/980506-1.x 32528983b ./gcc/testsuite/gcc.c-torture/compile/980506-2.c 4270541716b ./gcc/testsuite/gcc.c-torture/compile/980511-1.c 3713274322b ./gcc/testsuite/gcc.c-torture/compile/980701-1.c *************** *** 2512,2523 **** 668832071b ./gcc/testsuite/gcc.c-torture/compile/981001-3.c 2581029790b ./gcc/testsuite/gcc.c-torture/compile/981001-4.c 2455813842b ./gcc/testsuite/gcc.c-torture/compile/981006-1.c ! 2478222990b ./gcc/testsuite/gcc.c-torture/compile/981006-1.x 436023456b ./gcc/testsuite/gcc.c-torture/compile/981007-1.c 3644509388b ./gcc/testsuite/gcc.c-torture/compile/981022-1.c 2402428546b ./gcc/testsuite/gcc.c-torture/compile/981022-1.x 2312981402b ./gcc/testsuite/gcc.c-torture/compile/981107-1.c 1534948383b ./gcc/testsuite/gcc.c-torture/compile/981223-1.c 4068323857b ./gcc/testsuite/gcc.c-torture/compile/990107-1.c 2146948130b ./gcc/testsuite/gcc.c-torture/compile/990117-1.c 569996007b ./gcc/testsuite/gcc.c-torture/compile/990203-1.c --- 5639,5651 ---- 668832071b ./gcc/testsuite/gcc.c-torture/compile/981001-3.c 2581029790b ./gcc/testsuite/gcc.c-torture/compile/981001-4.c 2455813842b ./gcc/testsuite/gcc.c-torture/compile/981006-1.c ! 303831411b ./gcc/testsuite/gcc.c-torture/compile/981006-1.x 436023456b ./gcc/testsuite/gcc.c-torture/compile/981007-1.c 3644509388b ./gcc/testsuite/gcc.c-torture/compile/981022-1.c 2402428546b ./gcc/testsuite/gcc.c-torture/compile/981022-1.x 2312981402b ./gcc/testsuite/gcc.c-torture/compile/981107-1.c 1534948383b ./gcc/testsuite/gcc.c-torture/compile/981223-1.c + 2200568070b ./gcc/testsuite/gcc.c-torture/compile/981223-1.x 4068323857b ./gcc/testsuite/gcc.c-torture/compile/990107-1.c 2146948130b ./gcc/testsuite/gcc.c-torture/compile/990117-1.c 569996007b ./gcc/testsuite/gcc.c-torture/compile/990203-1.c *************** *** 2526,2531 **** --- 5654,5660 ---- 2791783349b ./gcc/testsuite/gcc.c-torture/compile/990523-1.c 3000844764b ./gcc/testsuite/gcc.c-torture/compile/990527-1.c 582106274b ./gcc/testsuite/gcc.c-torture/compile/990617-1.c + 2322013805b ./gcc/testsuite/gcc.c-torture/compile/990617-1.x 492504629b ./gcc/testsuite/gcc.c-torture/compile/990625-1.c 884965957b ./gcc/testsuite/gcc.c-torture/compile/990625-2.c 4084131388b ./gcc/testsuite/gcc.c-torture/compile/990801-1.c *************** *** 2550,2568 **** 1572386559b ./gcc/testsuite/gcc.c-torture/compile/calls.c 2432910359b ./gcc/testsuite/gcc.c-torture/compile/cmpdi-1.c 614750703b ./gcc/testsuite/gcc.c-torture/compile/combine-hang.c ! 899256220b ./gcc/testsuite/gcc.c-torture/compile/compile.exp 1794942657b ./gcc/testsuite/gcc.c-torture/compile/cpp-1.c 970559481b ./gcc/testsuite/gcc.c-torture/compile/cpp-2.c 1931627759b ./gcc/testsuite/gcc.c-torture/compile/dll.c 3830564423b ./gcc/testsuite/gcc.c-torture/compile/dll.x 3452765233b ./gcc/testsuite/gcc.c-torture/compile/funcptr-1.c 1935315878b ./gcc/testsuite/gcc.c-torture/compile/goto-1.c 4225667120b ./gcc/testsuite/gcc.c-torture/compile/init-1.c 2861967846b ./gcc/testsuite/gcc.c-torture/compile/init-2.c ! 2844322000b ./gcc/testsuite/gcc.c-torture/compile/init-3.c 4126878501b ./gcc/testsuite/gcc.c-torture/compile/labels-1.c 2067585207b ./gcc/testsuite/gcc.c-torture/compile/labels-2.c 1060389673b ./gcc/testsuite/gcc.c-torture/compile/packed-1.c 3723113555b ./gcc/testsuite/gcc.c-torture/compile/widechar-1.c 2985433108b ./gcc/testsuite/gcc.c-torture/compile/zero-strct-1.c 1530761060b ./gcc/testsuite/gcc.c-torture/execute/20000112-1.c --- 5679,5702 ---- 1572386559b ./gcc/testsuite/gcc.c-torture/compile/calls.c 2432910359b ./gcc/testsuite/gcc.c-torture/compile/cmpdi-1.c 614750703b ./gcc/testsuite/gcc.c-torture/compile/combine-hang.c ! 1983287936b ./gcc/testsuite/gcc.c-torture/compile/compile.exp 1794942657b ./gcc/testsuite/gcc.c-torture/compile/cpp-1.c 970559481b ./gcc/testsuite/gcc.c-torture/compile/cpp-2.c 1931627759b ./gcc/testsuite/gcc.c-torture/compile/dll.c 3830564423b ./gcc/testsuite/gcc.c-torture/compile/dll.x 3452765233b ./gcc/testsuite/gcc.c-torture/compile/funcptr-1.c 1935315878b ./gcc/testsuite/gcc.c-torture/compile/goto-1.c + 1601988128b ./gcc/testsuite/gcc.c-torture/compile/iftrap-1.c + 335811326b ./gcc/testsuite/gcc.c-torture/compile/iftrap-2.c 4225667120b ./gcc/testsuite/gcc.c-torture/compile/init-1.c 2861967846b ./gcc/testsuite/gcc.c-torture/compile/init-2.c ! 2669634792b ./gcc/testsuite/gcc.c-torture/compile/init-3.c 4126878501b ./gcc/testsuite/gcc.c-torture/compile/labels-1.c 2067585207b ./gcc/testsuite/gcc.c-torture/compile/labels-2.c + 3607951474b ./gcc/testsuite/gcc.c-torture/compile/labels-3.c + 709334018b ./gcc/testsuite/gcc.c-torture/compile/labels-3.x 1060389673b ./gcc/testsuite/gcc.c-torture/compile/packed-1.c + 69389766b ./gcc/testsuite/gcc.c-torture/compile/structs.c 3723113555b ./gcc/testsuite/gcc.c-torture/compile/widechar-1.c 2985433108b ./gcc/testsuite/gcc.c-torture/compile/zero-strct-1.c 1530761060b ./gcc/testsuite/gcc.c-torture/execute/20000112-1.c *************** *** 2614,2620 **** 843831990b ./gcc/testsuite/gcc.c-torture/execute/20000717-4.c 3868604235b ./gcc/testsuite/gcc.c-torture/execute/20000717-5.c 3718377161b ./gcc/testsuite/gcc.c-torture/execute/20000722-1.c - 8773011b ./gcc/testsuite/gcc.c-torture/execute/20000722-1.x 1809610528b ./gcc/testsuite/gcc.c-torture/execute/20000726-1.c 3447416803b ./gcc/testsuite/gcc.c-torture/execute/20000731-1.c 1979644625b ./gcc/testsuite/gcc.c-torture/execute/20000731-2.c --- 5748,5753 ---- *************** *** 2622,2634 **** 379050989b ./gcc/testsuite/gcc.c-torture/execute/20000801-2.c 1541984007b ./gcc/testsuite/gcc.c-torture/execute/20000801-3.c 2632039733b ./gcc/testsuite/gcc.c-torture/execute/20000801-4.c - 165550417b ./gcc/testsuite/gcc.c-torture/execute/20000801-4.x 3273221977b ./gcc/testsuite/gcc.c-torture/execute/20000808-1.c 3715226001b ./gcc/testsuite/gcc.c-torture/execute/20000815-1.c 2910084298b ./gcc/testsuite/gcc.c-torture/execute/20000818-1.c 3982907773b ./gcc/testsuite/gcc.c-torture/execute/20000819-1.c 806186932b ./gcc/testsuite/gcc.c-torture/execute/20000822-1.c - 1398277721b ./gcc/testsuite/gcc.c-torture/execute/20000906-1.x 1842039169b ./gcc/testsuite/gcc.c-torture/execute/20000910-1.c 187331803b ./gcc/testsuite/gcc.c-torture/execute/20000910-2.c 2672323622b ./gcc/testsuite/gcc.c-torture/execute/20000914-1.c --- 5755,5765 ---- *************** *** 2652,2658 **** 378727792b ./gcc/testsuite/gcc.c-torture/execute/20001130-1.c 1876645280b ./gcc/testsuite/gcc.c-torture/execute/20001130-2.c 3253069371b ./gcc/testsuite/gcc.c-torture/execute/20001203-1.c ! 2416535943b ./gcc/testsuite/gcc.c-torture/execute/20001203-2.c 315046176b ./gcc/testsuite/gcc.c-torture/execute/20001221-1.c 3430334061b ./gcc/testsuite/gcc.c-torture/execute/20001228-1.c 4145547631b ./gcc/testsuite/gcc.c-torture/execute/20001229-1.c --- 5783,5789 ---- 378727792b ./gcc/testsuite/gcc.c-torture/execute/20001130-1.c 1876645280b ./gcc/testsuite/gcc.c-torture/execute/20001130-2.c 3253069371b ./gcc/testsuite/gcc.c-torture/execute/20001203-1.c ! 2873524021b ./gcc/testsuite/gcc.c-torture/execute/20001203-2.c 315046176b ./gcc/testsuite/gcc.c-torture/execute/20001221-1.c 3430334061b ./gcc/testsuite/gcc.c-torture/execute/20001228-1.c 4145547631b ./gcc/testsuite/gcc.c-torture/execute/20001229-1.c *************** *** 2661,2692 **** 4274826155b ./gcc/testsuite/gcc.c-torture/execute/20010116-1.c 1853154998b ./gcc/testsuite/gcc.c-torture/execute/20010118-1.c 1273676691b ./gcc/testsuite/gcc.c-torture/execute/20010119-1.c ! 159288468b ./gcc/testsuite/gcc.c-torture/execute/20010122-1.c ! 2509604296b ./gcc/testsuite/gcc.c-torture/execute/20010122-1.x 2126355226b ./gcc/testsuite/gcc.c-torture/execute/20010123-1.c - 3644699221b ./gcc/testsuite/gcc.c-torture/execute/20010123-1.x 2748204733b ./gcc/testsuite/gcc.c-torture/execute/20010124-1.c 962969845b ./gcc/testsuite/gcc.c-torture/execute/20010129-1.c 3261363423b ./gcc/testsuite/gcc.c-torture/execute/20010129-1.x 3208398809b ./gcc/testsuite/gcc.c-torture/execute/20010206-1.c 2457134781b ./gcc/testsuite/gcc.c-torture/execute/20010222-1.c 3606901851b ./gcc/testsuite/gcc.c-torture/execute/20010224-1.c 1780176502b ./gcc/testsuite/gcc.c-torture/execute/20010325-1.c 111828245b ./gcc/testsuite/gcc.c-torture/execute/20010329-1.c 4181677122b ./gcc/testsuite/gcc.c-torture/execute/20010403-1.c 2948781834b ./gcc/testsuite/gcc.c-torture/execute/20010422-1.c 3398306936b ./gcc/testsuite/gcc.c-torture/execute/20010604-1.c 1597970944b ./gcc/testsuite/gcc.c-torture/execute/20010605-1.c 2151082111b ./gcc/testsuite/gcc.c-torture/execute/20010605-2.c 3978892519b ./gcc/testsuite/gcc.c-torture/execute/20010724-1.c 1723617799b ./gcc/testsuite/gcc.c-torture/execute/20010724-1.x 731866148b ./gcc/testsuite/gcc.c-torture/execute/20010904-1.c 731377342b ./gcc/testsuite/gcc.c-torture/execute/20010904-2.c 2522784842b ./gcc/testsuite/gcc.c-torture/execute/20010910-1.c ! 2728142706b ./gcc/testsuite/gcc.c-torture/execute/20011008-3.c 37158978b ./gcc/testsuite/gcc.c-torture/execute/900409-1.c 1241514475b ./gcc/testsuite/gcc.c-torture/execute/920202-1.c ! 3659466606b ./gcc/testsuite/gcc.c-torture/execute/920302-1.c 2196801137b ./gcc/testsuite/gcc.c-torture/execute/920409-1.c 1816933206b ./gcc/testsuite/gcc.c-torture/execute/920410-1.c 1957456510b ./gcc/testsuite/gcc.c-torture/execute/920411-1.c --- 5792,5879 ---- 4274826155b ./gcc/testsuite/gcc.c-torture/execute/20010116-1.c 1853154998b ./gcc/testsuite/gcc.c-torture/execute/20010118-1.c 1273676691b ./gcc/testsuite/gcc.c-torture/execute/20010119-1.c ! 367104834b ./gcc/testsuite/gcc.c-torture/execute/20010122-1.c ! 2189672298b ./gcc/testsuite/gcc.c-torture/execute/20010122-1.x 2126355226b ./gcc/testsuite/gcc.c-torture/execute/20010123-1.c 2748204733b ./gcc/testsuite/gcc.c-torture/execute/20010124-1.c 962969845b ./gcc/testsuite/gcc.c-torture/execute/20010129-1.c 3261363423b ./gcc/testsuite/gcc.c-torture/execute/20010129-1.x 3208398809b ./gcc/testsuite/gcc.c-torture/execute/20010206-1.c + 1778342214b ./gcc/testsuite/gcc.c-torture/execute/20010209-1.c + 3579334795b ./gcc/testsuite/gcc.c-torture/execute/20010221-1.c 2457134781b ./gcc/testsuite/gcc.c-torture/execute/20010222-1.c 3606901851b ./gcc/testsuite/gcc.c-torture/execute/20010224-1.c 1780176502b ./gcc/testsuite/gcc.c-torture/execute/20010325-1.c 111828245b ./gcc/testsuite/gcc.c-torture/execute/20010329-1.c 4181677122b ./gcc/testsuite/gcc.c-torture/execute/20010403-1.c + 1255405665b ./gcc/testsuite/gcc.c-torture/execute/20010409-1.c 2948781834b ./gcc/testsuite/gcc.c-torture/execute/20010422-1.c + 3990119664b ./gcc/testsuite/gcc.c-torture/execute/20010518-1.c + 3221966760b ./gcc/testsuite/gcc.c-torture/execute/20010518-2.c + 4150058335b ./gcc/testsuite/gcc.c-torture/execute/20010520-1.c 3398306936b ./gcc/testsuite/gcc.c-torture/execute/20010604-1.c 1597970944b ./gcc/testsuite/gcc.c-torture/execute/20010605-1.c 2151082111b ./gcc/testsuite/gcc.c-torture/execute/20010605-2.c + 2682131177b ./gcc/testsuite/gcc.c-torture/execute/20010711-1.c + 873772836b ./gcc/testsuite/gcc.c-torture/execute/20010717-1.c + 2673367189b ./gcc/testsuite/gcc.c-torture/execute/20010723-1.c 3978892519b ./gcc/testsuite/gcc.c-torture/execute/20010724-1.c 1723617799b ./gcc/testsuite/gcc.c-torture/execute/20010724-1.x 731866148b ./gcc/testsuite/gcc.c-torture/execute/20010904-1.c 731377342b ./gcc/testsuite/gcc.c-torture/execute/20010904-2.c 2522784842b ./gcc/testsuite/gcc.c-torture/execute/20010910-1.c ! 1182047103b ./gcc/testsuite/gcc.c-torture/execute/20010915-1.c ! 3737091006b ./gcc/testsuite/gcc.c-torture/execute/20010924-1.c ! 260325577b ./gcc/testsuite/gcc.c-torture/execute/20010925-1.c ! 4188355089b ./gcc/testsuite/gcc.c-torture/execute/20011008-3.c ! 2281713299b ./gcc/testsuite/gcc.c-torture/execute/20011019-1.c ! 2655569315b ./gcc/testsuite/gcc.c-torture/execute/20011024-1.c ! 1814584846b ./gcc/testsuite/gcc.c-torture/execute/20011109-1.c ! 1662612200b ./gcc/testsuite/gcc.c-torture/execute/20011109-2.c ! 2550685908b ./gcc/testsuite/gcc.c-torture/execute/20011113-1.c ! 172432599b ./gcc/testsuite/gcc.c-torture/execute/20011114-1.c ! 809814896b ./gcc/testsuite/gcc.c-torture/execute/20011115-1.c ! 4092518b ./gcc/testsuite/gcc.c-torture/execute/20011121-1.c ! 3502448934b ./gcc/testsuite/gcc.c-torture/execute/20011126-1.c ! 2732339842b ./gcc/testsuite/gcc.c-torture/execute/20011126-2.c ! 815133002b ./gcc/testsuite/gcc.c-torture/execute/20011128-1.c ! 241656074b ./gcc/testsuite/gcc.c-torture/execute/20011217-1.c ! 2277704872b ./gcc/testsuite/gcc.c-torture/execute/20011219-1.c ! 2006770303b ./gcc/testsuite/gcc.c-torture/execute/20011223-1.c ! 4135985164b ./gcc/testsuite/gcc.c-torture/execute/20020103-1.c ! 2284569670b ./gcc/testsuite/gcc.c-torture/execute/20020107-1.c ! 2382854982b ./gcc/testsuite/gcc.c-torture/execute/20020108-1.c ! 2848042033b ./gcc/testsuite/gcc.c-torture/execute/20020118-1.c ! 2653510244b ./gcc/testsuite/gcc.c-torture/execute/20020127-1.c ! 1739097481b ./gcc/testsuite/gcc.c-torture/execute/20020129-1.c ! 1264770028b ./gcc/testsuite/gcc.c-torture/execute/20020201-1.c ! 502375258b ./gcc/testsuite/gcc.c-torture/execute/20020206-1.c ! 3691690701b ./gcc/testsuite/gcc.c-torture/execute/20020206-2.c ! 4078405558b ./gcc/testsuite/gcc.c-torture/execute/20020213-1.c ! 125431111b ./gcc/testsuite/gcc.c-torture/execute/20020215-1.c ! 1599210871b ./gcc/testsuite/gcc.c-torture/execute/20020216-1.c ! 1360698555b ./gcc/testsuite/gcc.c-torture/execute/20020219-1.c ! 1656358954b ./gcc/testsuite/gcc.c-torture/execute/20020225-1.c ! 127051635b ./gcc/testsuite/gcc.c-torture/execute/20020227-1.c ! 2757105756b ./gcc/testsuite/gcc.c-torture/execute/20020227-1.x ! 1982547595b ./gcc/testsuite/gcc.c-torture/execute/20020307-1.c ! 1497258578b ./gcc/testsuite/gcc.c-torture/execute/20020307-2.c ! 2236973257b ./gcc/testsuite/gcc.c-torture/execute/20020314-1.c ! 3091941732b ./gcc/testsuite/gcc.c-torture/execute/20020320-1.c ! 3564527352b ./gcc/testsuite/gcc.c-torture/execute/20020321-1.c ! 577542360b ./gcc/testsuite/gcc.c-torture/execute/20020402-1.c ! 3290123747b ./gcc/testsuite/gcc.c-torture/execute/20020402-2.c ! 2122778375b ./gcc/testsuite/gcc.c-torture/execute/20020402-3.c ! 2806949247b ./gcc/testsuite/gcc.c-torture/execute/20020404-1.c ! 658725271b ./gcc/testsuite/gcc.c-torture/execute/20020406-1.c ! 1900879256b ./gcc/testsuite/gcc.c-torture/execute/20020411-1.c ! 2788774617b ./gcc/testsuite/gcc.c-torture/execute/20020413-1.c ! 2439380096b ./gcc/testsuite/gcc.c-torture/execute/20020418-1.c ! 49470659b ./gcc/testsuite/gcc.c-torture/execute/20020423-1.c ! 484359727b ./gcc/testsuite/gcc.c-torture/execute/20020503-1.c 37158978b ./gcc/testsuite/gcc.c-torture/execute/900409-1.c 1241514475b ./gcc/testsuite/gcc.c-torture/execute/920202-1.c ! 651529975b ./gcc/testsuite/gcc.c-torture/execute/920302-1.c 2196801137b ./gcc/testsuite/gcc.c-torture/execute/920409-1.c 1816933206b ./gcc/testsuite/gcc.c-torture/execute/920410-1.c 1957456510b ./gcc/testsuite/gcc.c-torture/execute/920411-1.c *************** *** 2764,2770 **** 4162371994b ./gcc/testsuite/gcc.c-torture/execute/930123-1.c 3265874780b ./gcc/testsuite/gcc.c-torture/execute/930126-1.c 2299871172b ./gcc/testsuite/gcc.c-torture/execute/930208-1.c ! 1479746588b ./gcc/testsuite/gcc.c-torture/execute/930406-1.c 3189774734b ./gcc/testsuite/gcc.c-torture/execute/930408-1.c 3400489427b ./gcc/testsuite/gcc.c-torture/execute/930429-1.c 2948158283b ./gcc/testsuite/gcc.c-torture/execute/930429-2.c --- 5951,5957 ---- 4162371994b ./gcc/testsuite/gcc.c-torture/execute/930123-1.c 3265874780b ./gcc/testsuite/gcc.c-torture/execute/930126-1.c 2299871172b ./gcc/testsuite/gcc.c-torture/execute/930208-1.c ! 3144873997b ./gcc/testsuite/gcc.c-torture/execute/930406-1.c 3189774734b ./gcc/testsuite/gcc.c-torture/execute/930408-1.c 3400489427b ./gcc/testsuite/gcc.c-torture/execute/930429-1.c 2948158283b ./gcc/testsuite/gcc.c-torture/execute/930429-2.c *************** *** 2880,2885 **** --- 6067,6073 ---- 2463095434b ./gcc/testsuite/gcc.c-torture/execute/960402-1.c 3079720318b ./gcc/testsuite/gcc.c-torture/execute/960405-1.c 4251399269b ./gcc/testsuite/gcc.c-torture/execute/960416-1.c + 2615797380b ./gcc/testsuite/gcc.c-torture/execute/960416-1.x 2014388579b ./gcc/testsuite/gcc.c-torture/execute/960419-1.c 235840907b ./gcc/testsuite/gcc.c-torture/execute/960419-2.c 4266479970b ./gcc/testsuite/gcc.c-torture/execute/960512-1.c *************** *** 2906,2912 **** 167780433b ./gcc/testsuite/gcc.c-torture/execute/970217-1.c 2343108590b ./gcc/testsuite/gcc.c-torture/execute/970923-1.c 2894602056b ./gcc/testsuite/gcc.c-torture/execute/980205.c ! 3277310074b ./gcc/testsuite/gcc.c-torture/execute/980223.c 1143734080b ./gcc/testsuite/gcc.c-torture/execute/980424-1.c 3704443102b ./gcc/testsuite/gcc.c-torture/execute/980505-1.c 2419800133b ./gcc/testsuite/gcc.c-torture/execute/980505-2.c --- 6094,6100 ---- 167780433b ./gcc/testsuite/gcc.c-torture/execute/970217-1.c 2343108590b ./gcc/testsuite/gcc.c-torture/execute/970923-1.c 2894602056b ./gcc/testsuite/gcc.c-torture/execute/980205.c ! 4265139835b ./gcc/testsuite/gcc.c-torture/execute/980223.c 1143734080b ./gcc/testsuite/gcc.c-torture/execute/980424-1.c 3704443102b ./gcc/testsuite/gcc.c-torture/execute/980505-1.c 2419800133b ./gcc/testsuite/gcc.c-torture/execute/980505-2.c *************** *** 2925,2933 **** 1796014237b ./gcc/testsuite/gcc.c-torture/execute/980617-1.c 1416887007b ./gcc/testsuite/gcc.c-torture/execute/980618-1.c 3252251770b ./gcc/testsuite/gcc.c-torture/execute/980701-1.c ! 2524223611b ./gcc/testsuite/gcc.c-torture/execute/980707-1.c 3327976229b ./gcc/testsuite/gcc.c-torture/execute/980709-1.c ! 4282683347b ./gcc/testsuite/gcc.c-torture/execute/980709-1.x 1464453071b ./gcc/testsuite/gcc.c-torture/execute/980716-1.c 1144140014b ./gcc/testsuite/gcc.c-torture/execute/980929-1.c 2567595595b ./gcc/testsuite/gcc.c-torture/execute/981001-1.c --- 6113,6121 ---- 1796014237b ./gcc/testsuite/gcc.c-torture/execute/980617-1.c 1416887007b ./gcc/testsuite/gcc.c-torture/execute/980618-1.c 3252251770b ./gcc/testsuite/gcc.c-torture/execute/980701-1.c ! 3843080992b ./gcc/testsuite/gcc.c-torture/execute/980707-1.c 3327976229b ./gcc/testsuite/gcc.c-torture/execute/980709-1.c ! 2346484511b ./gcc/testsuite/gcc.c-torture/execute/980709-1.x 1464453071b ./gcc/testsuite/gcc.c-torture/execute/980716-1.c 1144140014b ./gcc/testsuite/gcc.c-torture/execute/980929-1.c 2567595595b ./gcc/testsuite/gcc.c-torture/execute/981001-1.c *************** *** 2962,2968 **** 2064588039b ./gcc/testsuite/gcc.c-torture/execute/990804-1.c 2063909199b ./gcc/testsuite/gcc.c-torture/execute/990811-1.c 1435922216b ./gcc/testsuite/gcc.c-torture/execute/990826-0.c ! 1575902040b ./gcc/testsuite/gcc.c-torture/execute/990826-0.x 3894203537b ./gcc/testsuite/gcc.c-torture/execute/990827-1.c 1924065387b ./gcc/testsuite/gcc.c-torture/execute/990829-1.c 3657724130b ./gcc/testsuite/gcc.c-torture/execute/990923-1.c --- 6150,6156 ---- 2064588039b ./gcc/testsuite/gcc.c-torture/execute/990804-1.c 2063909199b ./gcc/testsuite/gcc.c-torture/execute/990811-1.c 1435922216b ./gcc/testsuite/gcc.c-torture/execute/990826-0.c ! 2369075067b ./gcc/testsuite/gcc.c-torture/execute/990826-0.x 3894203537b ./gcc/testsuite/gcc.c-torture/execute/990827-1.c 1924065387b ./gcc/testsuite/gcc.c-torture/execute/990829-1.c 3657724130b ./gcc/testsuite/gcc.c-torture/execute/990923-1.c *************** *** 2985,2992 **** --- 6173,6184 ---- 2854457808b ./gcc/testsuite/gcc.c-torture/execute/991227-1.c 3688640862b ./gcc/testsuite/gcc.c-torture/execute/991228-1.c 3793831392b ./gcc/testsuite/gcc.c-torture/execute/align-1.c + 4120792597b ./gcc/testsuite/gcc.c-torture/execute/align-2.c + 3292072248b ./gcc/testsuite/gcc.c-torture/execute/anon-1.c 1605923399b ./gcc/testsuite/gcc.c-torture/execute/arith-1.c 343449147b ./gcc/testsuite/gcc.c-torture/execute/arith-rand.c + 312869222b ./gcc/testsuite/gcc.c-torture/execute/ashldi-1.c + 1327544364b ./gcc/testsuite/gcc.c-torture/execute/ashrdi-1.c 629391558b ./gcc/testsuite/gcc.c-torture/execute/bcp-1.c 323354359b ./gcc/testsuite/gcc.c-torture/execute/bf64-1.c 3097986350b ./gcc/testsuite/gcc.c-torture/execute/bf64-1.x *************** *** 2994,3008 **** 2757361338b ./gcc/testsuite/gcc.c-torture/execute/bf-pack-1.c 3543906045b ./gcc/testsuite/gcc.c-torture/execute/bf-sign-1.c 1320697357b ./gcc/testsuite/gcc.c-torture/execute/bf-sign-2.c 1673141587b ./gcc/testsuite/gcc.c-torture/execute/builtin-abs-1.c 2056736695b ./gcc/testsuite/gcc.c-torture/execute/builtin-abs-2.c 3097553545b ./gcc/testsuite/gcc.c-torture/execute/builtin-complex-1.c 1581619700b ./gcc/testsuite/gcc.c-torture/execute/builtin-noret-1.c ! 4943515b ./gcc/testsuite/gcc.c-torture/execute/built-in-setjmp.c 2177138525b ./gcc/testsuite/gcc.c-torture/execute/cbrt.c 2994579909b ./gcc/testsuite/gcc.c-torture/execute/cmpdi-1.c 3257252249b ./gcc/testsuite/gcc.c-torture/execute/cmpsi-1.c ! 206176803b ./gcc/testsuite/gcc.c-torture/execute/comp-goto-1.c 3449149566b ./gcc/testsuite/gcc.c-torture/execute/comp-goto-2.c 760972136b ./gcc/testsuite/gcc.c-torture/execute/complex-1.c 3034158014b ./gcc/testsuite/gcc.c-torture/execute/complex-2.c --- 6186,6210 ---- 2757361338b ./gcc/testsuite/gcc.c-torture/execute/bf-pack-1.c 3543906045b ./gcc/testsuite/gcc.c-torture/execute/bf-sign-1.c 1320697357b ./gcc/testsuite/gcc.c-torture/execute/bf-sign-2.c + 1331291117b ./gcc/testsuite/gcc.c-torture/execute/bitfld-1.c + 3644699221b ./gcc/testsuite/gcc.c-torture/execute/bitfld-1.x + 1684940093b ./gcc/testsuite/gcc.c-torture/execute/bitfld-2.c 1673141587b ./gcc/testsuite/gcc.c-torture/execute/builtin-abs-1.c 2056736695b ./gcc/testsuite/gcc.c-torture/execute/builtin-abs-2.c 3097553545b ./gcc/testsuite/gcc.c-torture/execute/builtin-complex-1.c 1581619700b ./gcc/testsuite/gcc.c-torture/execute/builtin-noret-1.c ! 329340471b ./gcc/testsuite/gcc.c-torture/execute/builtin-prefetch-1.c ! 397570715b ./gcc/testsuite/gcc.c-torture/execute/builtin-prefetch-2.c ! 1484227202b ./gcc/testsuite/gcc.c-torture/execute/builtin-prefetch-3.c ! 1934387710b ./gcc/testsuite/gcc.c-torture/execute/builtin-prefetch-4.c ! 2627312111b ./gcc/testsuite/gcc.c-torture/execute/builtin-prefetch-5.c ! 3741124173b ./gcc/testsuite/gcc.c-torture/execute/builtin-prefetch-6.c ! 4012339802b ./gcc/testsuite/gcc.c-torture/execute/built-in-setjmp.c ! 2250919883b ./gcc/testsuite/gcc.c-torture/execute/builtin-types-compatible-p.c 2177138525b ./gcc/testsuite/gcc.c-torture/execute/cbrt.c 2994579909b ./gcc/testsuite/gcc.c-torture/execute/cmpdi-1.c 3257252249b ./gcc/testsuite/gcc.c-torture/execute/cmpsi-1.c ! 3943123822b ./gcc/testsuite/gcc.c-torture/execute/comp-goto-1.c 3449149566b ./gcc/testsuite/gcc.c-torture/execute/comp-goto-2.c 760972136b ./gcc/testsuite/gcc.c-torture/execute/complex-1.c 3034158014b ./gcc/testsuite/gcc.c-torture/execute/complex-2.c *************** *** 3017,3033 **** 3567725587b ./gcc/testsuite/gcc.c-torture/execute/divconst-1.c 3321693440b ./gcc/testsuite/gcc.c-torture/execute/divconst-2.c 506840532b ./gcc/testsuite/gcc.c-torture/execute/divconst-3.c ! 1945012748b ./gcc/testsuite/gcc.c-torture/execute/divmod-1.c 1808173474b ./gcc/testsuite/gcc.c-torture/execute/eeprof-1.c 2216490291b ./gcc/testsuite/gcc.c-torture/execute/eeprof-1.x 1886321368b ./gcc/testsuite/gcc.c-torture/execute/enum-1.c 3916720934b ./gcc/testsuite/gcc.c-torture/execute/enum-2.c ! 3024447168b ./gcc/testsuite/gcc.c-torture/execute/execute.exp 155906334b ./gcc/testsuite/gcc.c-torture/execute/func-ptr-1.c 1157816092b ./gcc/testsuite/gcc.c-torture/execute/gofast.c ! 1262906405b ./gcc/testsuite/gcc.c-torture/execute/ieee/20000320-1.c 981656236b ./gcc/testsuite/gcc.c-torture/execute/ieee/20001122-1.c 2602526611b ./gcc/testsuite/gcc.c-torture/execute/ieee/20010114-2.c 2046772610b ./gcc/testsuite/gcc.c-torture/execute/ieee/920518-1.c 3673851898b ./gcc/testsuite/gcc.c-torture/execute/ieee/920810-1.c 1813910189b ./gcc/testsuite/gcc.c-torture/execute/ieee/930529-1.c --- 6219,6238 ---- 3567725587b ./gcc/testsuite/gcc.c-torture/execute/divconst-1.c 3321693440b ./gcc/testsuite/gcc.c-torture/execute/divconst-2.c 506840532b ./gcc/testsuite/gcc.c-torture/execute/divconst-3.c ! 2615797380b ./gcc/testsuite/gcc.c-torture/execute/divconst-3.x ! 2274689094b ./gcc/testsuite/gcc.c-torture/execute/divmod-1.c 1808173474b ./gcc/testsuite/gcc.c-torture/execute/eeprof-1.c 2216490291b ./gcc/testsuite/gcc.c-torture/execute/eeprof-1.x 1886321368b ./gcc/testsuite/gcc.c-torture/execute/enum-1.c 3916720934b ./gcc/testsuite/gcc.c-torture/execute/enum-2.c ! 2211348141b ./gcc/testsuite/gcc.c-torture/execute/execute.exp 155906334b ./gcc/testsuite/gcc.c-torture/execute/func-ptr-1.c 1157816092b ./gcc/testsuite/gcc.c-torture/execute/gofast.c ! 3099798770b ./gcc/testsuite/gcc.c-torture/execute/ieee/20000320-1.c 981656236b ./gcc/testsuite/gcc.c-torture/execute/ieee/20001122-1.c 2602526611b ./gcc/testsuite/gcc.c-torture/execute/ieee/20010114-2.c + 3379104705b ./gcc/testsuite/gcc.c-torture/execute/ieee/20010226-1.c + 372215662b ./gcc/testsuite/gcc.c-torture/execute/ieee/20011123-1.c 2046772610b ./gcc/testsuite/gcc.c-torture/execute/ieee/920518-1.c 3673851898b ./gcc/testsuite/gcc.c-torture/execute/ieee/920810-1.c 1813910189b ./gcc/testsuite/gcc.c-torture/execute/ieee/930529-1.c *************** *** 3036,3061 **** 1948647907b ./gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-1.c 1935804586b ./gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-2.c 817625481b ./gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-3.c ! 634010742b ./gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-4.c 4125344101b ./gcc/testsuite/gcc.c-torture/execute/ieee/hugeval.c 1953413990b ./gcc/testsuite/gcc.c-torture/execute/ieee/hugeval.x ! 3655953044b ./gcc/testsuite/gcc.c-torture/execute/ieee/ieee.exp 4017678214b ./gcc/testsuite/gcc.c-torture/execute/ieee/minuszero.c 3545392440b ./gcc/testsuite/gcc.c-torture/execute/ieee/mzero2.c 2290856575b ./gcc/testsuite/gcc.c-torture/execute/ieee/mzero2.x ! 1544464067b ./gcc/testsuite/gcc.c-torture/execute/ieee/rbug.c ! 696995253b ./gcc/testsuite/gcc.c-torture/execute/ieee/rbug.x 287394580b ./gcc/testsuite/gcc.c-torture/execute/index-1.c 3728840213b ./gcc/testsuite/gcc.c-torture/execute/inst-check.c 2015511278b ./gcc/testsuite/gcc.c-torture/execute/int-compare.c 2701191371b ./gcc/testsuite/gcc.c-torture/execute/loop-1.c 3443893179b ./gcc/testsuite/gcc.c-torture/execute/loop-2b.c - 2408019489b ./gcc/testsuite/gcc.c-torture/execute/loop-2b.x 869002341b ./gcc/testsuite/gcc.c-torture/execute/loop-2.c 153943550b ./gcc/testsuite/gcc.c-torture/execute/loop-2c.c 720145550b ./gcc/testsuite/gcc.c-torture/execute/loop-2d.c 2058046897b ./gcc/testsuite/gcc.c-torture/execute/loop-2e.c ! 3280299116b ./gcc/testsuite/gcc.c-torture/execute/loop-2e.x 1291794748b ./gcc/testsuite/gcc.c-torture/execute/loop-2f.c 3280299116b ./gcc/testsuite/gcc.c-torture/execute/loop-2f.x 661111306b ./gcc/testsuite/gcc.c-torture/execute/loop-2g.c --- 6241,6272 ---- 1948647907b ./gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-1.c 1935804586b ./gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-2.c 817625481b ./gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-3.c ! 3452570198b ./gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-4.c ! 330892698b ./gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-5.c 4125344101b ./gcc/testsuite/gcc.c-torture/execute/ieee/hugeval.c 1953413990b ./gcc/testsuite/gcc.c-torture/execute/ieee/hugeval.x ! 2299573411b ./gcc/testsuite/gcc.c-torture/execute/ieee/ieee.exp 4017678214b ./gcc/testsuite/gcc.c-torture/execute/ieee/minuszero.c 3545392440b ./gcc/testsuite/gcc.c-torture/execute/ieee/mzero2.c 2290856575b ./gcc/testsuite/gcc.c-torture/execute/ieee/mzero2.x ! 545426428b ./gcc/testsuite/gcc.c-torture/execute/ieee/rbug.c ! 2631912054b ./gcc/testsuite/gcc.c-torture/execute/ieee/rbug.x 287394580b ./gcc/testsuite/gcc.c-torture/execute/index-1.c 3728840213b ./gcc/testsuite/gcc.c-torture/execute/inst-check.c 2015511278b ./gcc/testsuite/gcc.c-torture/execute/int-compare.c + 2503239574b ./gcc/testsuite/gcc.c-torture/execute/longlong.c + 3284814162b ./gcc/testsuite/gcc.c-torture/execute/loop-10.c + 2766603756b ./gcc/testsuite/gcc.c-torture/execute/loop-11.c + 3036735737b ./gcc/testsuite/gcc.c-torture/execute/loop-12.c 2701191371b ./gcc/testsuite/gcc.c-torture/execute/loop-1.c 3443893179b ./gcc/testsuite/gcc.c-torture/execute/loop-2b.c 869002341b ./gcc/testsuite/gcc.c-torture/execute/loop-2.c 153943550b ./gcc/testsuite/gcc.c-torture/execute/loop-2c.c + 2249811917b ./gcc/testsuite/gcc.c-torture/execute/loop-2c.x 720145550b ./gcc/testsuite/gcc.c-torture/execute/loop-2d.c + 2249811917b ./gcc/testsuite/gcc.c-torture/execute/loop-2d.x 2058046897b ./gcc/testsuite/gcc.c-torture/execute/loop-2e.c ! 2718531033b ./gcc/testsuite/gcc.c-torture/execute/loop-2e.x 1291794748b ./gcc/testsuite/gcc.c-torture/execute/loop-2f.c 3280299116b ./gcc/testsuite/gcc.c-torture/execute/loop-2f.x 661111306b ./gcc/testsuite/gcc.c-torture/execute/loop-2g.c *************** *** 3063,3068 **** --- 6274,6280 ---- 4068453712b ./gcc/testsuite/gcc.c-torture/execute/loop-3b.c 3620613760b ./gcc/testsuite/gcc.c-torture/execute/loop-3.c 2778041526b ./gcc/testsuite/gcc.c-torture/execute/loop-3c.c + 2249811917b ./gcc/testsuite/gcc.c-torture/execute/loop-3c.x 1791416082b ./gcc/testsuite/gcc.c-torture/execute/loop-4b.c 3316778727b ./gcc/testsuite/gcc.c-torture/execute/loop-4.c 3541035036b ./gcc/testsuite/gcc.c-torture/execute/loop-5.c *************** *** 3070,3096 **** 3649171232b ./gcc/testsuite/gcc.c-torture/execute/loop-7.c 3999194364b ./gcc/testsuite/gcc.c-torture/execute/loop-8.c 239440461b ./gcc/testsuite/gcc.c-torture/execute/loop-9.c ! 4193598129b ./gcc/testsuite/gcc.c-torture/execute/memcheck/blkarg.c ! 3951702309b ./gcc/testsuite/gcc.c-torture/execute/memcheck/blkarg.x ! 118878540b ./gcc/testsuite/gcc.c-torture/execute/memcheck/driver.c ! 333202422b ./gcc/testsuite/gcc.c-torture/execute/memcheck/driver.h ! 2778716642b ./gcc/testsuite/gcc.c-torture/execute/memcheck/memcheck.exp ! 264725139b ./gcc/testsuite/gcc.c-torture/execute/memcheck/t1.c ! 1882816663b ./gcc/testsuite/gcc.c-torture/execute/memcheck/t2.c ! 2034083433b ./gcc/testsuite/gcc.c-torture/execute/memcheck/t3.c ! 3207311191b ./gcc/testsuite/gcc.c-torture/execute/memcheck/t4.c ! 1181409068b ./gcc/testsuite/gcc.c-torture/execute/memcheck/t5.c ! 4116250117b ./gcc/testsuite/gcc.c-torture/execute/memcheck/t6.c ! 2249979756b ./gcc/testsuite/gcc.c-torture/execute/memcheck/t7.c ! 3477620501b ./gcc/testsuite/gcc.c-torture/execute/memcheck/t8.c ! 3155991726b ./gcc/testsuite/gcc.c-torture/execute/memcheck/t9.c ! 1880832802b ./gcc/testsuite/gcc.c-torture/execute/memcheck/template 1655048971b ./gcc/testsuite/gcc.c-torture/execute/memcpy-1.c 1198957866b ./gcc/testsuite/gcc.c-torture/execute/memcpy-bi.c 1146723390b ./gcc/testsuite/gcc.c-torture/execute/mod-1.c 843122257b ./gcc/testsuite/gcc.c-torture/execute/nestfunc-1.c 2875393797b ./gcc/testsuite/gcc.c-torture/execute/nestfunc-2.c 3451120516b ./gcc/testsuite/gcc.c-torture/execute/nestfunc-3.c 462740811b ./gcc/testsuite/gcc.c-torture/execute/nest-stdar-1.c 1347988605b ./gcc/testsuite/gcc.c-torture/execute/packed-1.c 3662025483b ./gcc/testsuite/gcc.c-torture/execute/packed-2.c --- 6282,6295 ---- 3649171232b ./gcc/testsuite/gcc.c-torture/execute/loop-7.c 3999194364b ./gcc/testsuite/gcc.c-torture/execute/loop-8.c 239440461b ./gcc/testsuite/gcc.c-torture/execute/loop-9.c ! 3308349321b ./gcc/testsuite/gcc.c-torture/execute/lshrdi-1.c 1655048971b ./gcc/testsuite/gcc.c-torture/execute/memcpy-1.c 1198957866b ./gcc/testsuite/gcc.c-torture/execute/memcpy-bi.c 1146723390b ./gcc/testsuite/gcc.c-torture/execute/mod-1.c 843122257b ./gcc/testsuite/gcc.c-torture/execute/nestfunc-1.c 2875393797b ./gcc/testsuite/gcc.c-torture/execute/nestfunc-2.c 3451120516b ./gcc/testsuite/gcc.c-torture/execute/nestfunc-3.c + 1193207968b ./gcc/testsuite/gcc.c-torture/execute/nestfunc-4.c 462740811b ./gcc/testsuite/gcc.c-torture/execute/nest-stdar-1.c 1347988605b ./gcc/testsuite/gcc.c-torture/execute/packed-1.c 3662025483b ./gcc/testsuite/gcc.c-torture/execute/packed-2.c *************** *** 3107,3117 **** --- 6306,6321 ---- 3788900866b ./gcc/testsuite/gcc.c-torture/execute/strct-pack-3.c 3787465303b ./gcc/testsuite/gcc.c-torture/execute/strct-pack-4.c 2204360040b ./gcc/testsuite/gcc.c-torture/execute/strct-stdarg-1.c + 665194027b ./gcc/testsuite/gcc.c-torture/execute/strct-stdarg-1.x 3638595647b ./gcc/testsuite/gcc.c-torture/execute/strct-varg-1.c 2424749175b ./gcc/testsuite/gcc.c-torture/execute/strct-varg-1.x 2004905304b ./gcc/testsuite/gcc.c-torture/execute/string-opt-10.c 1757228388b ./gcc/testsuite/gcc.c-torture/execute/string-opt-11.c 3269205009b ./gcc/testsuite/gcc.c-torture/execute/string-opt-12.c + 1302429529b ./gcc/testsuite/gcc.c-torture/execute/string-opt-13.c + 1984203373b ./gcc/testsuite/gcc.c-torture/execute/string-opt-14.c + 206750096b ./gcc/testsuite/gcc.c-torture/execute/string-opt-15.c + 2089995b ./gcc/testsuite/gcc.c-torture/execute/string-opt-16.c 3389618360b ./gcc/testsuite/gcc.c-torture/execute/string-opt-1.c 2499130848b ./gcc/testsuite/gcc.c-torture/execute/string-opt-2.c 307949358b ./gcc/testsuite/gcc.c-torture/execute/string-opt-3.c *************** *** 3145,3150 **** --- 6349,6355 ---- 4100317579b ./gcc/testsuite/gcc.c-torture/execute/va-arg-1.c 366376907b ./gcc/testsuite/gcc.c-torture/execute/va-arg-20.c 3416533370b ./gcc/testsuite/gcc.c-torture/execute/va-arg-21.c + 1403664843b ./gcc/testsuite/gcc.c-torture/execute/va-arg-22.c 3898927180b ./gcc/testsuite/gcc.c-torture/execute/va-arg-2.c 3316575978b ./gcc/testsuite/gcc.c-torture/execute/va-arg-3.c 2693536633b ./gcc/testsuite/gcc.c-torture/execute/va-arg-3.x *************** *** 3154,3159 **** --- 6359,6365 ---- 3547378445b ./gcc/testsuite/gcc.c-torture/execute/va-arg-7.c 3028804389b ./gcc/testsuite/gcc.c-torture/execute/va-arg-8.c 2833151734b ./gcc/testsuite/gcc.c-torture/execute/va-arg-9.c + 1911372417b ./gcc/testsuite/gcc.c-torture/execute/wchar_t-1.c 529327846b ./gcc/testsuite/gcc.c-torture/execute/widechar-1.c 1902127658b ./gcc/testsuite/gcc.c-torture/execute/widechar-2.c 2556092488b ./gcc/testsuite/gcc.c-torture/execute/zerolen-1.c *************** *** 3192,3198 **** 2113129899b ./gcc/testsuite/gcc.c-torture/unsorted/bbb.c 3604241750b ./gcc/testsuite/gcc.c-torture/unsorted/b.c 2670310529b ./gcc/testsuite/gcc.c-torture/unsorted/bc.c ! 3572510195b ./gcc/testsuite/gcc.c-torture/unsorted/bcopy.c 2685623920b ./gcc/testsuite/gcc.c-torture/unsorted/bf.c 1825505370b ./gcc/testsuite/gcc.c-torture/unsorted/bfins.c 3222678366b ./gcc/testsuite/gcc.c-torture/unsorted/bfx.c --- 6398,6404 ---- 2113129899b ./gcc/testsuite/gcc.c-torture/unsorted/bbb.c 3604241750b ./gcc/testsuite/gcc.c-torture/unsorted/b.c 2670310529b ./gcc/testsuite/gcc.c-torture/unsorted/bc.c ! 3090384483b ./gcc/testsuite/gcc.c-torture/unsorted/bcopy.c 2685623920b ./gcc/testsuite/gcc.c-torture/unsorted/bf.c 1825505370b ./gcc/testsuite/gcc.c-torture/unsorted/bfins.c 3222678366b ./gcc/testsuite/gcc.c-torture/unsorted/bfx.c *************** *** 3408,3414 **** 4030884798b ./gcc/testsuite/gcc.c-torture/unsorted/udivmod4.c 367886956b ./gcc/testsuite/gcc.c-torture/unsorted/UHIcmp.c 2240659922b ./gcc/testsuite/gcc.c-torture/unsorted/uns.c ! 2130364609b ./gcc/testsuite/gcc.c-torture/unsorted/unsorted.exp 4067751424b ./gcc/testsuite/gcc.c-torture/unsorted/uns_tst.c 3380740291b ./gcc/testsuite/gcc.c-torture/unsorted/UQIcmp.c 3065994513b ./gcc/testsuite/gcc.c-torture/unsorted/USIcmp.c --- 6614,6620 ---- 4030884798b ./gcc/testsuite/gcc.c-torture/unsorted/udivmod4.c 367886956b ./gcc/testsuite/gcc.c-torture/unsorted/UHIcmp.c 2240659922b ./gcc/testsuite/gcc.c-torture/unsorted/uns.c ! 434767322b ./gcc/testsuite/gcc.c-torture/unsorted/unsorted.exp 4067751424b ./gcc/testsuite/gcc.c-torture/unsorted/uns_tst.c 3380740291b ./gcc/testsuite/gcc.c-torture/unsorted/UQIcmp.c 3065994513b ./gcc/testsuite/gcc.c-torture/unsorted/USIcmp.c *************** *** 3438,3444 **** 3236233174b ./gcc/testsuite/gcc.c-torture/unsorted/xzz.c 1020735670b ./gcc/testsuite/gcc.dg/20000108-1.c 289377156b ./gcc/testsuite/gcc.dg/20000111-1.c - 785687275b ./gcc/testsuite/gcc.dg/20000503-1.c 441096099b ./gcc/testsuite/gcc.dg/20000609-1.c 843859427b ./gcc/testsuite/gcc.dg/20000614-1.c 984866335b ./gcc/testsuite/gcc.dg/20000614-2.c --- 6644,6649 ---- *************** *** 3450,3461 **** 2628509241b ./gcc/testsuite/gcc.dg/20000724-1.c 855317863b ./gcc/testsuite/gcc.dg/20000807-1.c 2282190390b ./gcc/testsuite/gcc.dg/20000904-1.c ! 2618642972b ./gcc/testsuite/gcc.dg/20000906-1.c ! 1969376564b ./gcc/testsuite/gcc.dg/20000926-1.c ! 2692197230b ./gcc/testsuite/gcc.dg/20001009-1.c 4235098888b ./gcc/testsuite/gcc.dg/20001012-1.c 3084023965b ./gcc/testsuite/gcc.dg/20001012-2.c ! 1654808351b ./gcc/testsuite/gcc.dg/20001013-1.c 2644591049b ./gcc/testsuite/gcc.dg/20001108-1.c 3796315325b ./gcc/testsuite/gcc.dg/20001116-1.c 280677441b ./gcc/testsuite/gcc.dg/20001117-1.c --- 6655,6669 ---- 2628509241b ./gcc/testsuite/gcc.dg/20000724-1.c 855317863b ./gcc/testsuite/gcc.dg/20000807-1.c 2282190390b ./gcc/testsuite/gcc.dg/20000904-1.c ! 1205584698b ./gcc/testsuite/gcc.dg/20000906-1.c ! 2401733773b ./gcc/testsuite/gcc.dg/20000926-1.c ! 912559247b ./gcc/testsuite/gcc.dg/20001009-1.c 4235098888b ./gcc/testsuite/gcc.dg/20001012-1.c 3084023965b ./gcc/testsuite/gcc.dg/20001012-2.c ! 2504286200b ./gcc/testsuite/gcc.dg/20001013-1.c ! 989710521b ./gcc/testsuite/gcc.dg/20001023-1.c ! 2648600842b ./gcc/testsuite/gcc.dg/20001101-1.c ! 452608955b ./gcc/testsuite/gcc.dg/20001102-1.c 2644591049b ./gcc/testsuite/gcc.dg/20001108-1.c 3796315325b ./gcc/testsuite/gcc.dg/20001116-1.c 280677441b ./gcc/testsuite/gcc.dg/20001117-1.c *************** *** 3463,3471 **** 1243003570b ./gcc/testsuite/gcc.dg/20001201-1.c 1646064105b ./gcc/testsuite/gcc.dg/20001228-1.c 2498549558b ./gcc/testsuite/gcc.dg/20010202-1.c 3041407018b ./gcc/testsuite/gcc.dg/20010520-1.c 3520626317b ./gcc/testsuite/gcc.dg/20010622-1.c ! 100264975b ./gcc/testsuite/gcc.dg/20010912-1.c 1577979025b ./gcc/testsuite/gcc.dg/920413-1.c 2176221389b ./gcc/testsuite/gcc.dg/940409-1.c 1567764883b ./gcc/testsuite/gcc.dg/940510-1.c --- 6671,6734 ---- 1243003570b ./gcc/testsuite/gcc.dg/20001201-1.c 1646064105b ./gcc/testsuite/gcc.dg/20001228-1.c 2498549558b ./gcc/testsuite/gcc.dg/20010202-1.c + 2616951355b ./gcc/testsuite/gcc.dg/20010405-1.c + 2545788691b ./gcc/testsuite/gcc.dg/20010423-1.c 3041407018b ./gcc/testsuite/gcc.dg/20010520-1.c 3520626317b ./gcc/testsuite/gcc.dg/20010622-1.c ! 2877988798b ./gcc/testsuite/gcc.dg/20010822-1.c ! 2149609410b ./gcc/testsuite/gcc.dg/20010912-1.c ! 2349250184b ./gcc/testsuite/gcc.dg/20011008-1.c ! 2932858639b ./gcc/testsuite/gcc.dg/20011008-2.c ! 2130390160b ./gcc/testsuite/gcc.dg/20011009-1.c ! 1094879191b ./gcc/testsuite/gcc.dg/20011015-1.c ! 3257749642b ./gcc/testsuite/gcc.dg/20011018-1.c ! 1920312928b ./gcc/testsuite/gcc.dg/20011021-1.c ! 707554340b ./gcc/testsuite/gcc.dg/20011029-2.c ! 1124303586b ./gcc/testsuite/gcc.dg/20011107-1.c ! 3977721072b ./gcc/testsuite/gcc.dg/20011113-1.c ! 43629702b ./gcc/testsuite/gcc.dg/20011119-1.c ! 1970395659b ./gcc/testsuite/gcc.dg/20011127-1.c ! 640681704b ./gcc/testsuite/gcc.dg/20011130-1.c ! 715751053b ./gcc/testsuite/gcc.dg/20011214-1.c ! 2394786434b ./gcc/testsuite/gcc.dg/20020103-1.c ! 2180708198b ./gcc/testsuite/gcc.dg/20020104-1.c ! 98244853b ./gcc/testsuite/gcc.dg/20020108-1.c ! 951724852b ./gcc/testsuite/gcc.dg/20020115-1.c ! 785896302b ./gcc/testsuite/gcc.dg/20020116-1.c ! 3842134030b ./gcc/testsuite/gcc.dg/20020116-2.c ! 4113077329b ./gcc/testsuite/gcc.dg/20020118-1.c ! 3751699275b ./gcc/testsuite/gcc.dg/20020122-1.c ! 150189901b ./gcc/testsuite/gcc.dg/20020122-2.c ! 57782331b ./gcc/testsuite/gcc.dg/20020122-3.c ! 2367653115b ./gcc/testsuite/gcc.dg/20020122-4.c ! 4139034769b ./gcc/testsuite/gcc.dg/20020201-1.c ! 205098899b ./gcc/testsuite/gcc.dg/20020201-2.c ! 821274050b ./gcc/testsuite/gcc.dg/20020201-3.c ! 2936802890b ./gcc/testsuite/gcc.dg/20020201-4.c ! 2531686627b ./gcc/testsuite/gcc.dg/20020206-1.c ! 756555090b ./gcc/testsuite/gcc.dg/20020210-1.c ! 3546737192b ./gcc/testsuite/gcc.dg/20020218-1.c ! 2855726391b ./gcc/testsuite/gcc.dg/20020219-1.c ! 794792782b ./gcc/testsuite/gcc.dg/20020220-1.c ! 1662033181b ./gcc/testsuite/gcc.dg/20020220-2.c ! 2954578455b ./gcc/testsuite/gcc.dg/20020222-1.c ! 2546434352b ./gcc/testsuite/gcc.dg/20020224-1.c ! 627755992b ./gcc/testsuite/gcc.dg/20020304-1.c ! 2738421039b ./gcc/testsuite/gcc.dg/20020310-1.c ! 767384458b ./gcc/testsuite/gcc.dg/20020312-1.c ! 1632668533b ./gcc/testsuite/gcc.dg/20020312-2.c ! 3842300935b ./gcc/testsuite/gcc.dg/20020313-1.c ! 663674028b ./gcc/testsuite/gcc.dg/20020319-1.c ! 3802202669b ./gcc/testsuite/gcc.dg/20020326-1.c ! 926713919b ./gcc/testsuite/gcc.dg/20020411-1.c ! 2767099233b ./gcc/testsuite/gcc.dg/20020415-1.c ! 2427264054b ./gcc/testsuite/gcc.dg/20020416-1.c ! 1785651312b ./gcc/testsuite/gcc.dg/20020418-1.c ! 1527728757b ./gcc/testsuite/gcc.dg/20020418-2.c ! 2088656022b ./gcc/testsuite/gcc.dg/20020426-1.c ! 4234050901b ./gcc/testsuite/gcc.dg/20020426-2.c ! 464722125b ./gcc/testsuite/gcc.dg/20020430-1.c ! 1745642748b ./gcc/testsuite/gcc.dg/20020503-1.c 1577979025b ./gcc/testsuite/gcc.dg/920413-1.c 2176221389b ./gcc/testsuite/gcc.dg/940409-1.c 1567764883b ./gcc/testsuite/gcc.dg/940510-1.c *************** *** 3481,3517 **** 1113123204b ./gcc/testsuite/gcc.dg/980523-1.c 2389539979b ./gcc/testsuite/gcc.dg/980526-1.c 384442948b ./gcc/testsuite/gcc.dg/980709-1.c ! 147296516b ./gcc/testsuite/gcc.dg/980816-1.c 2659217655b ./gcc/testsuite/gcc.dg/980827-1.c ! 3311826119b ./gcc/testsuite/gcc.dg/990117-1.c 3592792935b ./gcc/testsuite/gcc.dg/990130-1.c 2565768458b ./gcc/testsuite/gcc.dg/990213-1.c ! 2646952971b ./gcc/testsuite/gcc.dg/990213-2.c ! 2874694976b ./gcc/testsuite/gcc.dg/990214-1.c 1614449588b ./gcc/testsuite/gcc.dg/990424-1.c 1324715064b ./gcc/testsuite/gcc.dg/990506-0.c ! 758527833b ./gcc/testsuite/gcc.dg/990524-1.c 3071468415b ./gcc/testsuite/gcc.dg/991129-1.c 156954019b ./gcc/testsuite/gcc.dg/991209-1.c ! 2278054090b ./gcc/testsuite/gcc.dg/991214-1.c 3370443605b ./gcc/testsuite/gcc.dg/991230-1.c 1274871710b ./gcc/testsuite/gcc.dg/array-1.c ! 2092836833b ./gcc/testsuite/gcc.dg/array-2.c 1410330225b ./gcc/testsuite/gcc.dg/array-3.c ! 3803331180b ./gcc/testsuite/gcc.dg/array-4.c 2233987289b ./gcc/testsuite/gcc.dg/array-5.c 2814093959b ./gcc/testsuite/gcc.dg/asm-1.c ! 2130035945b ./gcc/testsuite/gcc.dg/asm-2.c ! 2531825241b ./gcc/testsuite/gcc.dg/asm-3.c ! 1851013323b ./gcc/testsuite/gcc.dg/asm-fs-1.c ! 2590660240b ./gcc/testsuite/gcc.dg/asm-names.c 3155000092b ./gcc/testsuite/gcc.dg/bconstp-1.c 15751103b ./gcc/testsuite/gcc.dg/bf-spl1.c ! 2150146400b ./gcc/testsuite/gcc.dg/c90-array-lval-1.c ! 3238760819b ./gcc/testsuite/gcc.dg/c90-array-lval-2.c 4018159207b ./gcc/testsuite/gcc.dg/c90-complex-1.c 1705314837b ./gcc/testsuite/gcc.dg/c90-const-expr-1.c 78994009b ./gcc/testsuite/gcc.dg/c90-const-expr-2.c 4085555442b ./gcc/testsuite/gcc.dg/c90-digraph-1.c 3599184840b ./gcc/testsuite/gcc.dg/c90-enum-comma-1.c 2306764382b ./gcc/testsuite/gcc.dg/c90-float-1.c --- 6744,6802 ---- 1113123204b ./gcc/testsuite/gcc.dg/980523-1.c 2389539979b ./gcc/testsuite/gcc.dg/980526-1.c 384442948b ./gcc/testsuite/gcc.dg/980709-1.c ! 1276688993b ./gcc/testsuite/gcc.dg/980816-1.c 2659217655b ./gcc/testsuite/gcc.dg/980827-1.c ! 844249748b ./gcc/testsuite/gcc.dg/990117-1.c 3592792935b ./gcc/testsuite/gcc.dg/990130-1.c 2565768458b ./gcc/testsuite/gcc.dg/990213-1.c ! 2125486048b ./gcc/testsuite/gcc.dg/990213-2.c ! 318703178b ./gcc/testsuite/gcc.dg/990214-1.c 1614449588b ./gcc/testsuite/gcc.dg/990424-1.c 1324715064b ./gcc/testsuite/gcc.dg/990506-0.c ! 714032148b ./gcc/testsuite/gcc.dg/990524-1.c 3071468415b ./gcc/testsuite/gcc.dg/991129-1.c 156954019b ./gcc/testsuite/gcc.dg/991209-1.c ! 1980057279b ./gcc/testsuite/gcc.dg/991214-1.c 3370443605b ./gcc/testsuite/gcc.dg/991230-1.c + 3936329118b ./gcc/testsuite/gcc.dg/altivec-1.c + 79724433b ./gcc/testsuite/gcc.dg/altivec-2.c + 967922284b ./gcc/testsuite/gcc.dg/altivec-3.c + 93905551b ./gcc/testsuite/gcc.dg/altivec-4.c 1274871710b ./gcc/testsuite/gcc.dg/array-1.c ! 3861156036b ./gcc/testsuite/gcc.dg/array-2.c 1410330225b ./gcc/testsuite/gcc.dg/array-3.c ! 2440308460b ./gcc/testsuite/gcc.dg/array-4.c 2233987289b ./gcc/testsuite/gcc.dg/array-5.c + 3636290766b ./gcc/testsuite/gcc.dg/array-6.c 2814093959b ./gcc/testsuite/gcc.dg/asm-1.c ! 3024001214b ./gcc/testsuite/gcc.dg/asm-2.c ! 2686162767b ./gcc/testsuite/gcc.dg/asm-3.c ! 339244874b ./gcc/testsuite/gcc.dg/asm-4.c ! 2673255882b ./gcc/testsuite/gcc.dg/asm-5.c ! 2560291160b ./gcc/testsuite/gcc.dg/asm-fs-1.c ! 1287172903b ./gcc/testsuite/gcc.dg/asm-names.c ! 2801105283b ./gcc/testsuite/gcc.dg/attr-alwaysinline.c ! 1514674985b ./gcc/testsuite/gcc.dg/attr-invalid.c ! 1915283314b ./gcc/testsuite/gcc.dg/attr-nest.c ! 2689909602b ./gcc/testsuite/gcc.dg/attr-noinline.c ! 745375068b ./gcc/testsuite/gcc.dg/attr-used.c 3155000092b ./gcc/testsuite/gcc.dg/bconstp-1.c 15751103b ./gcc/testsuite/gcc.dg/bf-spl1.c ! 1274634279b ./gcc/testsuite/gcc.dg/bitfld-1.c ! 865608720b ./gcc/testsuite/gcc.dg/bitfld-2.c ! 1594168367b ./gcc/testsuite/gcc.dg/builtin-choose-expr.c ! 2462561678b ./gcc/testsuite/gcc.dg/builtin-prefetch-1.c ! 3153387113b ./gcc/testsuite/gcc.dg/c90-arraydecl-1.c ! 2243816200b ./gcc/testsuite/gcc.dg/c90-array-lval-1.c ! 2768106060b ./gcc/testsuite/gcc.dg/c90-array-lval-2.c ! 4098525451b ./gcc/testsuite/gcc.dg/c90-array-lval-3.c ! 3655088604b ./gcc/testsuite/gcc.dg/c90-array-lval-4.c ! 1572913366b ./gcc/testsuite/gcc.dg/c90-array-lval-5.c 4018159207b ./gcc/testsuite/gcc.dg/c90-complex-1.c + 3681535923b ./gcc/testsuite/gcc.dg/c90-complit-1.c 1705314837b ./gcc/testsuite/gcc.dg/c90-const-expr-1.c 78994009b ./gcc/testsuite/gcc.dg/c90-const-expr-2.c + 822031417b ./gcc/testsuite/gcc.dg/c90-const-expr-3.c 4085555442b ./gcc/testsuite/gcc.dg/c90-digraph-1.c 3599184840b ./gcc/testsuite/gcc.dg/c90-enum-comma-1.c 2306764382b ./gcc/testsuite/gcc.dg/c90-float-1.c *************** *** 3523,3574 **** 440307834b ./gcc/testsuite/gcc.dg/c90-impl-int-1.c 2344767678b ./gcc/testsuite/gcc.dg/c90-impl-int-2.c 970479166b ./gcc/testsuite/gcc.dg/c90-init-1.c 3559700294b ./gcc/testsuite/gcc.dg/c90-longlong-1.c 3728641939b ./gcc/testsuite/gcc.dg/c90-mixdecl-1.c 211178091b ./gcc/testsuite/gcc.dg/c90-restrict-1.c 3688680206b ./gcc/testsuite/gcc.dg/c90-return-1.c 1775037086b ./gcc/testsuite/gcc.dg/c90-scope-1.c 3958618876b ./gcc/testsuite/gcc.dg/c94-digraph-1.c ! 3710825020b ./gcc/testsuite/gcc.dg/c99-array-lval-1.c ! 910556448b ./gcc/testsuite/gcc.dg/c99-array-lval-2.c 1817213908b ./gcc/testsuite/gcc.dg/c99-array-nonobj-1.c 1951407439b ./gcc/testsuite/gcc.dg/c99-bool-1.c 2269932988b ./gcc/testsuite/gcc.dg/c99-complex-1.c 820370146b ./gcc/testsuite/gcc.dg/c99-complex-2.c 1355429032b ./gcc/testsuite/gcc.dg/c99-condexpr-1.c 1666861367b ./gcc/testsuite/gcc.dg/c99-const-expr-1.c 1567288443b ./gcc/testsuite/gcc.dg/c99-const-expr-2.c 1067407398b ./gcc/testsuite/gcc.dg/c99-digraph-1.c 436400556b ./gcc/testsuite/gcc.dg/c99-enum-comma-1.c 3680360076b ./gcc/testsuite/gcc.dg/c99-flex-array-1.c ! 3000949069b ./gcc/testsuite/gcc.dg/c99-float-1.c 553627065b ./gcc/testsuite/gcc.dg/c99-fordecl-1.c 561068221b ./gcc/testsuite/gcc.dg/c99-fordecl-2.c 2859208293b ./gcc/testsuite/gcc.dg/c99-func-1.c ! 2837871670b ./gcc/testsuite/gcc.dg/c99-func-2.c ! 2298234720b ./gcc/testsuite/gcc.dg/c99-func-3.c ! 3278294548b ./gcc/testsuite/gcc.dg/c99-func-4.c 403500133b ./gcc/testsuite/gcc.dg/c99-hexfloat-1.c 442351990b ./gcc/testsuite/gcc.dg/c99-hexfloat-2.c 1046797268b ./gcc/testsuite/gcc.dg/c99-idem-qual-1.c 1293044648b ./gcc/testsuite/gcc.dg/c99-impl-decl-1.c ! 1781816522b ./gcc/testsuite/gcc.dg/c99-impl-int-1.c 2312236475b ./gcc/testsuite/gcc.dg/c99-impl-int-2.c 829207642b ./gcc/testsuite/gcc.dg/c99-init-1.c 938647013b ./gcc/testsuite/gcc.dg/c99-init-2.c 336478880b ./gcc/testsuite/gcc.dg/c99-longlong-1.c 2179124750b ./gcc/testsuite/gcc.dg/c99-main-1.c 1603510892b ./gcc/testsuite/gcc.dg/c99-mixdecl-1.c 2789813637b ./gcc/testsuite/gcc.dg/c99-restrict-1.c 1090698500b ./gcc/testsuite/gcc.dg/c99-return-1.c 1305485104b ./gcc/testsuite/gcc.dg/c99-scope-1.c ! 1901837551b ./gcc/testsuite/gcc.dg/c99-scope-2.c ! 2436952715b ./gcc/testsuite/gcc.dg/c99-tag-1.c 3333661125b ./gcc/testsuite/gcc.dg/cast-qual-1.c 3509657813b ./gcc/testsuite/gcc.dg/clobbers.c 3796475762b ./gcc/testsuite/gcc.dg/compare1.c 280070085b ./gcc/testsuite/gcc.dg/compare2.c 1929905505b ./gcc/testsuite/gcc.dg/compare3.c 2444556566b ./gcc/testsuite/gcc.dg/concat.c 872352985b ./gcc/testsuite/gcc.dg/conv-1.c 2296607049b ./gcc/testsuite/gcc.dg/cpp/19921210-1.c --- 6808,6873 ---- 440307834b ./gcc/testsuite/gcc.dg/c90-impl-int-1.c 2344767678b ./gcc/testsuite/gcc.dg/c90-impl-int-2.c 970479166b ./gcc/testsuite/gcc.dg/c90-init-1.c + 2729946148b ./gcc/testsuite/gcc.dg/c90-intconst-1.c 3559700294b ./gcc/testsuite/gcc.dg/c90-longlong-1.c 3728641939b ./gcc/testsuite/gcc.dg/c90-mixdecl-1.c 211178091b ./gcc/testsuite/gcc.dg/c90-restrict-1.c 3688680206b ./gcc/testsuite/gcc.dg/c90-return-1.c 1775037086b ./gcc/testsuite/gcc.dg/c90-scope-1.c 3958618876b ./gcc/testsuite/gcc.dg/c94-digraph-1.c ! 815267755b ./gcc/testsuite/gcc.dg/c99-arraydecl-1.c ! 1553286096b ./gcc/testsuite/gcc.dg/c99-array-lval-1.c ! 695388665b ./gcc/testsuite/gcc.dg/c99-array-lval-2.c ! 533861407b ./gcc/testsuite/gcc.dg/c99-array-lval-3.c ! 2215212813b ./gcc/testsuite/gcc.dg/c99-array-lval-4.c ! 3070583409b ./gcc/testsuite/gcc.dg/c99-array-lval-5.c 1817213908b ./gcc/testsuite/gcc.dg/c99-array-nonobj-1.c 1951407439b ./gcc/testsuite/gcc.dg/c99-bool-1.c 2269932988b ./gcc/testsuite/gcc.dg/c99-complex-1.c 820370146b ./gcc/testsuite/gcc.dg/c99-complex-2.c + 3348642281b ./gcc/testsuite/gcc.dg/c99-complit-1.c + 2252128544b ./gcc/testsuite/gcc.dg/c99-complit-2.c 1355429032b ./gcc/testsuite/gcc.dg/c99-condexpr-1.c 1666861367b ./gcc/testsuite/gcc.dg/c99-const-expr-1.c 1567288443b ./gcc/testsuite/gcc.dg/c99-const-expr-2.c + 1530464516b ./gcc/testsuite/gcc.dg/c99-const-expr-3.c 1067407398b ./gcc/testsuite/gcc.dg/c99-digraph-1.c 436400556b ./gcc/testsuite/gcc.dg/c99-enum-comma-1.c 3680360076b ./gcc/testsuite/gcc.dg/c99-flex-array-1.c ! 1133393573b ./gcc/testsuite/gcc.dg/c99-flex-array-2.c ! 4185875504b ./gcc/testsuite/gcc.dg/c99-float-1.c 553627065b ./gcc/testsuite/gcc.dg/c99-fordecl-1.c 561068221b ./gcc/testsuite/gcc.dg/c99-fordecl-2.c 2859208293b ./gcc/testsuite/gcc.dg/c99-func-1.c ! 2626542091b ./gcc/testsuite/gcc.dg/c99-func-2.c ! 2857481018b ./gcc/testsuite/gcc.dg/c99-func-3.c ! 3824254533b ./gcc/testsuite/gcc.dg/c99-func-4.c 403500133b ./gcc/testsuite/gcc.dg/c99-hexfloat-1.c 442351990b ./gcc/testsuite/gcc.dg/c99-hexfloat-2.c 1046797268b ./gcc/testsuite/gcc.dg/c99-idem-qual-1.c 1293044648b ./gcc/testsuite/gcc.dg/c99-impl-decl-1.c ! 818104690b ./gcc/testsuite/gcc.dg/c99-impl-int-1.c 2312236475b ./gcc/testsuite/gcc.dg/c99-impl-int-2.c 829207642b ./gcc/testsuite/gcc.dg/c99-init-1.c 938647013b ./gcc/testsuite/gcc.dg/c99-init-2.c + 3578360837b ./gcc/testsuite/gcc.dg/c99-intconst-1.c 336478880b ./gcc/testsuite/gcc.dg/c99-longlong-1.c 2179124750b ./gcc/testsuite/gcc.dg/c99-main-1.c 1603510892b ./gcc/testsuite/gcc.dg/c99-mixdecl-1.c 2789813637b ./gcc/testsuite/gcc.dg/c99-restrict-1.c 1090698500b ./gcc/testsuite/gcc.dg/c99-return-1.c 1305485104b ./gcc/testsuite/gcc.dg/c99-scope-1.c ! 328628580b ./gcc/testsuite/gcc.dg/c99-scope-2.c ! 1500087630b ./gcc/testsuite/gcc.dg/c99-tag-1.c 3333661125b ./gcc/testsuite/gcc.dg/cast-qual-1.c + 1853040812b ./gcc/testsuite/gcc.dg/cast-qual-2.c 3509657813b ./gcc/testsuite/gcc.dg/clobbers.c 3796475762b ./gcc/testsuite/gcc.dg/compare1.c 280070085b ./gcc/testsuite/gcc.dg/compare2.c 1929905505b ./gcc/testsuite/gcc.dg/compare3.c + 4172088563b ./gcc/testsuite/gcc.dg/compare4.c + 2873193357b ./gcc/testsuite/gcc.dg/compare5.c + 2818358019b ./gcc/testsuite/gcc.dg/complete-port.c 2444556566b ./gcc/testsuite/gcc.dg/concat.c 872352985b ./gcc/testsuite/gcc.dg/conv-1.c 2296607049b ./gcc/testsuite/gcc.dg/cpp/19921210-1.c *************** *** 3585,3591 **** 2850976318b ./gcc/testsuite/gcc.dg/cpp/19990407-1.c 1821165639b ./gcc/testsuite/gcc.dg/cpp/19990409-1.c 2941995947b ./gcc/testsuite/gcc.dg/cpp/19990413-1.c - 226715691b ./gcc/testsuite/gcc.dg/cpp/19990703-1.c 3962958732b ./gcc/testsuite/gcc.dg/cpp/20000127-1.c 2271984635b ./gcc/testsuite/gcc.dg/cpp/20000129-1.c 2675766007b ./gcc/testsuite/gcc.dg/cpp/20000207-1.c --- 6884,6889 ---- *************** *** 3597,3603 **** 2720098340b ./gcc/testsuite/gcc.dg/cpp/20000519-1.c 96666994b ./gcc/testsuite/gcc.dg/cpp/20000529-1.c 1226501171b ./gcc/testsuite/gcc.dg/cpp/20000625-1.c ! 3032444029b ./gcc/testsuite/gcc.dg/cpp/20000625-2.c 3024473110b ./gcc/testsuite/gcc.dg/cpp/20000627-1.c 1252878971b ./gcc/testsuite/gcc.dg/cpp/20000628-1a.h 3176910360b ./gcc/testsuite/gcc.dg/cpp/20000628-1.c --- 6895,6901 ---- 2720098340b ./gcc/testsuite/gcc.dg/cpp/20000519-1.c 96666994b ./gcc/testsuite/gcc.dg/cpp/20000529-1.c 1226501171b ./gcc/testsuite/gcc.dg/cpp/20000625-1.c ! 2192746957b ./gcc/testsuite/gcc.dg/cpp/20000625-2.c 3024473110b ./gcc/testsuite/gcc.dg/cpp/20000627-1.c 1252878971b ./gcc/testsuite/gcc.dg/cpp/20000628-1a.h 3176910360b ./gcc/testsuite/gcc.dg/cpp/20000628-1.c *************** *** 3608,3614 **** 2692554582b ./gcc/testsuite/gcc.dg/cpp/assert1.c 3542126362b ./gcc/testsuite/gcc.dg/cpp/assert2.c 1282180884b ./gcc/testsuite/gcc.dg/cpp/assert3.c ! 125637328b ./gcc/testsuite/gcc.dg/cpp/assert_trad1.c 4025150262b ./gcc/testsuite/gcc.dg/cpp/assert_trad2.c 1560406171b ./gcc/testsuite/gcc.dg/cpp/assert_trad3.c 1134445732b ./gcc/testsuite/gcc.dg/cpp/avoidpaste1.c --- 6906,6912 ---- 2692554582b ./gcc/testsuite/gcc.dg/cpp/assert1.c 3542126362b ./gcc/testsuite/gcc.dg/cpp/assert2.c 1282180884b ./gcc/testsuite/gcc.dg/cpp/assert3.c ! 2600163266b ./gcc/testsuite/gcc.dg/cpp/assert_trad1.c 4025150262b ./gcc/testsuite/gcc.dg/cpp/assert_trad2.c 1560406171b ./gcc/testsuite/gcc.dg/cpp/assert_trad3.c 1134445732b ./gcc/testsuite/gcc.dg/cpp/avoidpaste1.c *************** *** 3623,3642 **** 2939353970b ./gcc/testsuite/gcc.dg/cpp/c++98-pedantic.c 3857361837b ./gcc/testsuite/gcc.dg/cpp/c99.c 3306050866b ./gcc/testsuite/gcc.dg/cpp/c99-pedantic.c ! 1523895616b ./gcc/testsuite/gcc.dg/cpp/cmdlne-C.c 2496993356b ./gcc/testsuite/gcc.dg/cpp/cmdlne-dD.c 1486055617b ./gcc/testsuite/gcc.dg/cpp/cmdlne-dM.c 2953736128b ./gcc/testsuite/gcc.dg/cpp/cmdlne-P.c ! 3972030445b ./gcc/testsuite/gcc.dg/cpp/cpp.exp 3494213157b ./gcc/testsuite/gcc.dg/cpp/cxxcom1.c 3135164554b ./gcc/testsuite/gcc.dg/cpp/cxxcom2.c ! 866098993b ./gcc/testsuite/gcc.dg/cpp/defined.c 3663773136b ./gcc/testsuite/gcc.dg/cpp/defined_trad.c 1438288565b ./gcc/testsuite/gcc.dg/cpp/digraph1.c 2968203420b ./gcc/testsuite/gcc.dg/cpp/digraph2.c ! 3322349204b ./gcc/testsuite/gcc.dg/cpp/digraphs.c ! 3353939326b ./gcc/testsuite/gcc.dg/cpp/directiv.c ! 2021491879b ./gcc/testsuite/gcc.dg/cpp/extratokens.c 3280737784b ./gcc/testsuite/gcc.dg/cpp/gnuc89.c 836196340b ./gcc/testsuite/gcc.dg/cpp/gnuc89-pedantic.c 1263189585b ./gcc/testsuite/gcc.dg/cpp/gnuc99.c --- 6921,6958 ---- 2939353970b ./gcc/testsuite/gcc.dg/cpp/c++98-pedantic.c 3857361837b ./gcc/testsuite/gcc.dg/cpp/c99.c 3306050866b ./gcc/testsuite/gcc.dg/cpp/c99-pedantic.c ! 3516322832b ./gcc/testsuite/gcc.dg/cpp/charconst-2.c ! 796483159b ./gcc/testsuite/gcc.dg/cpp/charconst.c ! 1491584113b ./gcc/testsuite/gcc.dg/cpp/cmdlne-C2.c ! 3355056256b ./gcc/testsuite/gcc.dg/cpp/cmdlne-C.c 2496993356b ./gcc/testsuite/gcc.dg/cpp/cmdlne-dD.c + 609905807b ./gcc/testsuite/gcc.dg/cpp/cmdlne-dD-dM.c + 1600174935b ./gcc/testsuite/gcc.dg/cpp/cmdlne-dD-M.c + 3705836802b ./gcc/testsuite/gcc.dg/cpp/cmdlne-dI-M.c + 3088209084b ./gcc/testsuite/gcc.dg/cpp/cmdlne-dI-M.h 1486055617b ./gcc/testsuite/gcc.dg/cpp/cmdlne-dM.c + 1101687822b ./gcc/testsuite/gcc.dg/cpp/cmdlne-dM-dD.c + 932524367b ./gcc/testsuite/gcc.dg/cpp/cmdlne-dM-M.c + 553926808b ./gcc/testsuite/gcc.dg/cpp/cmdlne-dN-M.c 2953736128b ./gcc/testsuite/gcc.dg/cpp/cmdlne-P.c ! 2647411665b ./gcc/testsuite/gcc.dg/cpp/cpp.exp 3494213157b ./gcc/testsuite/gcc.dg/cpp/cxxcom1.c 3135164554b ./gcc/testsuite/gcc.dg/cpp/cxxcom2.c ! 2496170433b ./gcc/testsuite/gcc.dg/cpp/defined.c 3663773136b ./gcc/testsuite/gcc.dg/cpp/defined_trad.c 1438288565b ./gcc/testsuite/gcc.dg/cpp/digraph1.c 2968203420b ./gcc/testsuite/gcc.dg/cpp/digraph2.c ! 2068680422b ./gcc/testsuite/gcc.dg/cpp/digraphs.c ! 1984293489b ./gcc/testsuite/gcc.dg/cpp/direct2.c ! 3678821918b ./gcc/testsuite/gcc.dg/cpp/direct2s.c ! 3290053048b ./gcc/testsuite/gcc.dg/cpp/directiv.c ! 3129493545b ./gcc/testsuite/gcc.dg/cpp/endif.c ! 3479505545b ./gcc/testsuite/gcc.dg/cpp/endif.h ! 2483248350b ./gcc/testsuite/gcc.dg/cpp/escape-1.c ! 1730195871b ./gcc/testsuite/gcc.dg/cpp/escape-2.c ! 3767981014b ./gcc/testsuite/gcc.dg/cpp/escape.c ! 2697913940b ./gcc/testsuite/gcc.dg/cpp/extratokens.c ! 905736b ./gcc/testsuite/gcc.dg/cpp/fpreprocessed.c 3280737784b ./gcc/testsuite/gcc.dg/cpp/gnuc89.c 836196340b ./gcc/testsuite/gcc.dg/cpp/gnuc89-pedantic.c 1263189585b ./gcc/testsuite/gcc.dg/cpp/gnuc99.c *************** *** 3666,3671 **** --- 6982,6990 ---- 100687188b ./gcc/testsuite/gcc.dg/cpp/line2.c 567370415b ./gcc/testsuite/gcc.dg/cpp/line3.c 1626475943b ./gcc/testsuite/gcc.dg/cpp/line4.c + 4294705052b ./gcc/testsuite/gcc.dg/cpp/line5.c + 1379729851b ./gcc/testsuite/gcc.dg/cpp/macro10.c + 3340222164b ./gcc/testsuite/gcc.dg/cpp/macro11.c 271504116b ./gcc/testsuite/gcc.dg/cpp/macro1.c 4270051746b ./gcc/testsuite/gcc.dg/cpp/macro2.c 2969168869b ./gcc/testsuite/gcc.dg/cpp/macro3.c *************** *** 3673,3680 **** 1628527586b ./gcc/testsuite/gcc.dg/cpp/macro5.c 2368380713b ./gcc/testsuite/gcc.dg/cpp/macro6.c 2072551274b ./gcc/testsuite/gcc.dg/cpp/macro7.c 5175037b ./gcc/testsuite/gcc.dg/cpp/macsyntx.c ! 4262315475b ./gcc/testsuite/gcc.dg/cpp/mi1.c 4261701187b ./gcc/testsuite/gcc.dg/cpp/mi1cc.h 419074706b ./gcc/testsuite/gcc.dg/cpp/mi1c.h 3904566528b ./gcc/testsuite/gcc.dg/cpp/mi1nd.h --- 6992,7001 ---- 1628527586b ./gcc/testsuite/gcc.dg/cpp/macro5.c 2368380713b ./gcc/testsuite/gcc.dg/cpp/macro6.c 2072551274b ./gcc/testsuite/gcc.dg/cpp/macro7.c + 613805223b ./gcc/testsuite/gcc.dg/cpp/macro8.c + 2926705982b ./gcc/testsuite/gcc.dg/cpp/macro9.c 5175037b ./gcc/testsuite/gcc.dg/cpp/macsyntx.c ! 3610840456b ./gcc/testsuite/gcc.dg/cpp/mi1.c 4261701187b ./gcc/testsuite/gcc.dg/cpp/mi1cc.h 419074706b ./gcc/testsuite/gcc.dg/cpp/mi1c.h 3904566528b ./gcc/testsuite/gcc.dg/cpp/mi1nd.h *************** *** 3689,3694 **** --- 7010,7021 ---- 1784999780b ./gcc/testsuite/gcc.dg/cpp/mi3.h 3722098684b ./gcc/testsuite/gcc.dg/cpp/mi4.c 1150462829b ./gcc/testsuite/gcc.dg/cpp/mi5.c + 1358227252b ./gcc/testsuite/gcc.dg/cpp/mi6a.h + 641332290b ./gcc/testsuite/gcc.dg/cpp/mi6b.h + 1142195235b ./gcc/testsuite/gcc.dg/cpp/mi6.c + 4070915278b ./gcc/testsuite/gcc.dg/cpp/mi6c.h + 1337479900b ./gcc/testsuite/gcc.dg/cpp/mi6d.h + 509977090b ./gcc/testsuite/gcc.dg/cpp/mi6e.h 68499164b ./gcc/testsuite/gcc.dg/cpp/multiline.c 2266859121b ./gcc/testsuite/gcc.dg/cpp/paste10.c 4285709590b ./gcc/testsuite/gcc.dg/cpp/paste11.c *************** *** 3708,3761 **** 4186091043b ./gcc/testsuite/gcc.dg/cpp/_Pragma2.c 1107840471b ./gcc/testsuite/gcc.dg/cpp/redef1.c 1601641321b ./gcc/testsuite/gcc.dg/cpp/redef2.c 3846911977b ./gcc/testsuite/gcc.dg/cpp/skipping.c ! 4230263348b ./gcc/testsuite/gcc.dg/cpp/spacing1.c 3081823659b ./gcc/testsuite/gcc.dg/cpp/strify1.c 3973832195b ./gcc/testsuite/gcc.dg/cpp/strify2.c 2496189814b ./gcc/testsuite/gcc.dg/cpp/strp1.c 3609546715b ./gcc/testsuite/gcc.dg/cpp/strp2.c 3648062425b ./gcc/testsuite/gcc.dg/cpp/syshdr1.h 930452060b ./gcc/testsuite/gcc.dg/cpp/syshdr2.h 2075703559b ./gcc/testsuite/gcc.dg/cpp/syshdr.c 3021818451b ./gcc/testsuite/gcc.dg/cpp/tr-define.c 298013196b ./gcc/testsuite/gcc.dg/cpp/tr-direct.c 580041869b ./gcc/testsuite/gcc.dg/cpp/trigraphs.c ! 2119982316b ./gcc/testsuite/gcc.dg/cpp/tr-paste.c ! 3072166050b ./gcc/testsuite/gcc.dg/cpp/tr-str.c 2720640173b ./gcc/testsuite/gcc.dg/cpp/tr-warn1.c 4214944447b ./gcc/testsuite/gcc.dg/cpp/tr-warn2.c 3053015314b ./gcc/testsuite/gcc.dg/cpp/tr-warn3.c 2634569795b ./gcc/testsuite/gcc.dg/cpp/tr-warn4.c 733328423b ./gcc/testsuite/gcc.dg/cpp/tr-warn5.c 880495829b ./gcc/testsuite/gcc.dg/cpp/tr-warn6.c 1271068491b ./gcc/testsuite/gcc.dg/cpp/unc1.c 2985690540b ./gcc/testsuite/gcc.dg/cpp/unc2.c 479621763b ./gcc/testsuite/gcc.dg/cpp/unc3.c 1549705287b ./gcc/testsuite/gcc.dg/cpp/unc4.c ! 2103239730b ./gcc/testsuite/gcc.dg/cpp/undef1.c 1052162081b ./gcc/testsuite/gcc.dg/cpp/undef2.c 1278828881b ./gcc/testsuite/gcc.dg/cpp/vararg1.c 270851301b ./gcc/testsuite/gcc.dg/cpp/vararg2.c 2112571638b ./gcc/testsuite/gcc.dg/cpp/widestr1.c 1685485063b ./gcc/testsuite/gcc.dg/cpp/Wtrigraphs.c 462220244b ./gcc/testsuite/gcc.dg/dg.exp ! 1984293489b ./gcc/testsuite/gcc.dg/direct2.c ! 3678821918b ./gcc/testsuite/gcc.dg/direct2s.c ! 4275147045b ./gcc/testsuite/gcc.dg/dll-1.c 2397785716b ./gcc/testsuite/gcc.dg/dll-2.c ! 299356667b ./gcc/testsuite/gcc.dg/dll-3.c ! 1474481354b ./gcc/testsuite/gcc.dg/dll-4.c ! 879701642b ./gcc/testsuite/gcc.dg/dwarf2-1.c ! 2629871938b ./gcc/testsuite/gcc.dg/dwarf2-2.c ! 1490655481b ./gcc/testsuite/gcc.dg/ext-glob.c 3222632325b ./gcc/testsuite/gcc.dg/format/array-1.c 1862455428b ./gcc/testsuite/gcc.dg/format/attr-1.c 3131101897b ./gcc/testsuite/gcc.dg/format/attr-2.c ! 4100818838b ./gcc/testsuite/gcc.dg/format/attr-3.c 2805119685b ./gcc/testsuite/gcc.dg/format/branch-1.c 1458645895b ./gcc/testsuite/gcc.dg/format/c90-printf-1.c 2152399739b ./gcc/testsuite/gcc.dg/format/c90-printf-2.c ! 3251366828b ./gcc/testsuite/gcc.dg/format/c90-printf-3.c 1600984968b ./gcc/testsuite/gcc.dg/format/c90-scanf-1.c 461393812b ./gcc/testsuite/gcc.dg/format/c90-scanf-2.c 2607652439b ./gcc/testsuite/gcc.dg/format/c90-scanf-3.c --- 7035,7122 ---- 4186091043b ./gcc/testsuite/gcc.dg/cpp/_Pragma2.c 1107840471b ./gcc/testsuite/gcc.dg/cpp/redef1.c 1601641321b ./gcc/testsuite/gcc.dg/cpp/redef2.c + 2020720031b ./gcc/testsuite/gcc.dg/cpp/skipping2.c 3846911977b ./gcc/testsuite/gcc.dg/cpp/skipping.c ! 3873271528b ./gcc/testsuite/gcc.dg/cpp/spacing1.c ! 1299147601b ./gcc/testsuite/gcc.dg/cpp/spacing2.c 3081823659b ./gcc/testsuite/gcc.dg/cpp/strify1.c 3973832195b ./gcc/testsuite/gcc.dg/cpp/strify2.c + 2418211010b ./gcc/testsuite/gcc.dg/cpp/strify3.c 2496189814b ./gcc/testsuite/gcc.dg/cpp/strp1.c 3609546715b ./gcc/testsuite/gcc.dg/cpp/strp2.c 3648062425b ./gcc/testsuite/gcc.dg/cpp/syshdr1.h 930452060b ./gcc/testsuite/gcc.dg/cpp/syshdr2.h 2075703559b ./gcc/testsuite/gcc.dg/cpp/syshdr.c + 3898065321b ./gcc/testsuite/gcc.dg/cpp/syshdr.h + 3033820257b ./gcc/testsuite/gcc.dg/cpp/sysmac1.c + 2994610141b ./gcc/testsuite/gcc.dg/cpp/sysmac2.c 3021818451b ./gcc/testsuite/gcc.dg/cpp/tr-define.c 298013196b ./gcc/testsuite/gcc.dg/cpp/tr-direct.c 580041869b ./gcc/testsuite/gcc.dg/cpp/trigraphs.c ! 3954705973b ./gcc/testsuite/gcc.dg/cpp/tr-paste.c ! 56672469b ./gcc/testsuite/gcc.dg/cpp/tr-sign.c ! 2430481737b ./gcc/testsuite/gcc.dg/cpp/tr-str.c 2720640173b ./gcc/testsuite/gcc.dg/cpp/tr-warn1.c 4214944447b ./gcc/testsuite/gcc.dg/cpp/tr-warn2.c 3053015314b ./gcc/testsuite/gcc.dg/cpp/tr-warn3.c 2634569795b ./gcc/testsuite/gcc.dg/cpp/tr-warn4.c 733328423b ./gcc/testsuite/gcc.dg/cpp/tr-warn5.c 880495829b ./gcc/testsuite/gcc.dg/cpp/tr-warn6.c + 2894747317b ./gcc/testsuite/gcc.dg/cpp/uchar-1.c + 1961440147b ./gcc/testsuite/gcc.dg/cpp/uchar-2.c + 2806339500b ./gcc/testsuite/gcc.dg/cpp/uchar-3.c + 3156619494b ./gcc/testsuite/gcc.dg/cpp/ucs.c 1271068491b ./gcc/testsuite/gcc.dg/cpp/unc1.c 2985690540b ./gcc/testsuite/gcc.dg/cpp/unc2.c 479621763b ./gcc/testsuite/gcc.dg/cpp/unc3.c 1549705287b ./gcc/testsuite/gcc.dg/cpp/unc4.c ! 3474810570b ./gcc/testsuite/gcc.dg/cpp/undef1.c 1052162081b ./gcc/testsuite/gcc.dg/cpp/undef2.c 1278828881b ./gcc/testsuite/gcc.dg/cpp/vararg1.c 270851301b ./gcc/testsuite/gcc.dg/cpp/vararg2.c + 3684840524b ./gcc/testsuite/gcc.dg/cpp/wchar-1.c 2112571638b ./gcc/testsuite/gcc.dg/cpp/widestr1.c 1685485063b ./gcc/testsuite/gcc.dg/cpp/Wtrigraphs.c + 2478073469b ./gcc/testsuite/gcc.dg/debug/20000503-1.c + 1850073884b ./gcc/testsuite/gcc.dg/debug/20010207-1.c + 2575589968b ./gcc/testsuite/gcc.dg/debug/20011223-1.c + 3480555031b ./gcc/testsuite/gcc.dg/debug/20020104-2.c + 465470758b ./gcc/testsuite/gcc.dg/debug/20020220-1.c + 38521003b ./gcc/testsuite/gcc.dg/debug/20020224-1.c + 1897254689b ./gcc/testsuite/gcc.dg/debug/20020327-1.c + 2095797855b ./gcc/testsuite/gcc.dg/debug/debug-1.c + 936371752b ./gcc/testsuite/gcc.dg/debug/debug-2.c + 1466203416b ./gcc/testsuite/gcc.dg/debug/debug-3.c + 591803753b ./gcc/testsuite/gcc.dg/debug/debug-4.c + 524177325b ./gcc/testsuite/gcc.dg/debug/debug-5.c + 4017752601b ./gcc/testsuite/gcc.dg/debug/debug-6.c + 2820451029b ./gcc/testsuite/gcc.dg/debug/debug.exp + 3154398188b ./gcc/testsuite/gcc.dg/debug/dwarf2-1.c + 3551380716b ./gcc/testsuite/gcc.dg/debug/dwarf2-2.c + 1865154101b ./gcc/testsuite/gcc.dg/debug/trivial.c + 2108424497b ./gcc/testsuite/gcc.dg/decl-1.c + 2106699188b ./gcc/testsuite/gcc.dg/deprecated.c 462220244b ./gcc/testsuite/gcc.dg/dg.exp ! 3005671194b ./gcc/testsuite/gcc.dg/divbyzero.c ! 3732188130b ./gcc/testsuite/gcc.dg/dll-1.c 2397785716b ./gcc/testsuite/gcc.dg/dll-2.c ! 4107998098b ./gcc/testsuite/gcc.dg/dll-3.c ! 38849204b ./gcc/testsuite/gcc.dg/dll-4.c ! 2135186629b ./gcc/testsuite/gcc.dg/enum1.c ! 2635594155b ./gcc/testsuite/gcc.dg/ext-glob.c 3222632325b ./gcc/testsuite/gcc.dg/format/array-1.c 1862455428b ./gcc/testsuite/gcc.dg/format/attr-1.c 3131101897b ./gcc/testsuite/gcc.dg/format/attr-2.c ! 884013987b ./gcc/testsuite/gcc.dg/format/attr-3.c ! 1282524185b ./gcc/testsuite/gcc.dg/format/attr-4.c ! 3309516915b ./gcc/testsuite/gcc.dg/format/attr-5.c ! 1342273591b ./gcc/testsuite/gcc.dg/format/attr-6.c ! 3314290167b ./gcc/testsuite/gcc.dg/format/attr-7.c 2805119685b ./gcc/testsuite/gcc.dg/format/branch-1.c + 753102824b ./gcc/testsuite/gcc.dg/format/builtin-1.c 1458645895b ./gcc/testsuite/gcc.dg/format/c90-printf-1.c 2152399739b ./gcc/testsuite/gcc.dg/format/c90-printf-2.c ! 576410250b ./gcc/testsuite/gcc.dg/format/c90-printf-3.c 1600984968b ./gcc/testsuite/gcc.dg/format/c90-scanf-1.c 461393812b ./gcc/testsuite/gcc.dg/format/c90-scanf-2.c 2607652439b ./gcc/testsuite/gcc.dg/format/c90-scanf-3.c *************** *** 3766,3772 **** 1772682986b ./gcc/testsuite/gcc.dg/format/c94-scanf-1.c 2398886219b ./gcc/testsuite/gcc.dg/format/c99-printf-1.c 1982196060b ./gcc/testsuite/gcc.dg/format/c99-printf-2.c ! 1543463224b ./gcc/testsuite/gcc.dg/format/c99-printf-3.c 842927031b ./gcc/testsuite/gcc.dg/format/c99-scanf-1.c 3735460767b ./gcc/testsuite/gcc.dg/format/c99-scanf-2.c 3432916856b ./gcc/testsuite/gcc.dg/format/c99-scanf-3.c --- 7127,7133 ---- 1772682986b ./gcc/testsuite/gcc.dg/format/c94-scanf-1.c 2398886219b ./gcc/testsuite/gcc.dg/format/c99-printf-1.c 1982196060b ./gcc/testsuite/gcc.dg/format/c99-printf-2.c ! 3845709577b ./gcc/testsuite/gcc.dg/format/c99-printf-3.c 842927031b ./gcc/testsuite/gcc.dg/format/c99-scanf-1.c 3735460767b ./gcc/testsuite/gcc.dg/format/c99-scanf-2.c 3432916856b ./gcc/testsuite/gcc.dg/format/c99-scanf-3.c *************** *** 3774,3812 **** 2090637496b ./gcc/testsuite/gcc.dg/format/c99-strftime-2.c 2345337374b ./gcc/testsuite/gcc.dg/format/diag-1.c 1250738052b ./gcc/testsuite/gcc.dg/format/errmk-1.c ! 3568765864b ./gcc/testsuite/gcc.dg/format/ext-1.c 230043853b ./gcc/testsuite/gcc.dg/format/ext-2.c 3735744313b ./gcc/testsuite/gcc.dg/format/ext-3.c 2712114535b ./gcc/testsuite/gcc.dg/format/ext-4.c 3870005152b ./gcc/testsuite/gcc.dg/format/ext-5.c ! 3051558447b ./gcc/testsuite/gcc.dg/format/format.exp ! 3295965233b ./gcc/testsuite/gcc.dg/format/format.h 3030055438b ./gcc/testsuite/gcc.dg/format/miss-1.c 58040071b ./gcc/testsuite/gcc.dg/format/miss-2.c 2482792163b ./gcc/testsuite/gcc.dg/format/no-exargs-1.c 2335984266b ./gcc/testsuite/gcc.dg/format/nonlit-1.c 3055177111b ./gcc/testsuite/gcc.dg/format/nonlit-2.c 449451912b ./gcc/testsuite/gcc.dg/format/nonlit-3.c 4199776146b ./gcc/testsuite/gcc.dg/format/no-y2k-1.c 2673114039b ./gcc/testsuite/gcc.dg/format/sec-1.c ! 2688469317b ./gcc/testsuite/gcc.dg/format/strfmon-1.c 821372176b ./gcc/testsuite/gcc.dg/format/va-1.c 358822374b ./gcc/testsuite/gcc.dg/format/warnll-1.c ! 3652044411b ./gcc/testsuite/gcc.dg/format/xopen-1.c 73044124b ./gcc/testsuite/gcc.dg/format/z-1.c 1770671475b ./gcc/testsuite/gcc.dg/gnu99-init-1.c 646600080b ./gcc/testsuite/gcc.dg/ia64-asm-1.c 2995485298b ./gcc/testsuite/gcc.dg/ia64-sync-1.c 72205644b ./gcc/testsuite/gcc.dg/ia64-sync-2.c 1374850312b ./gcc/testsuite/gcc.dg/ifelse-1.c 247919548b ./gcc/testsuite/gcc.dg/loop-1.c 3562764821b ./gcc/testsuite/gcc.dg/noncompile/20001228-1.c ! 3062554414b ./gcc/testsuite/gcc.dg/noncompile/20010524-1.c ! 1572913245b ./gcc/testsuite/gcc.dg/noncompile/920507-1.c 2161867266b ./gcc/testsuite/gcc.dg/noncompile/920616-2.c ! 337407618b ./gcc/testsuite/gcc.dg/noncompile/920721-2.c 2834384944b ./gcc/testsuite/gcc.dg/noncompile/920824-1.c ! 11095313b ./gcc/testsuite/gcc.dg/noncompile/920923-1.c 3162370830b ./gcc/testsuite/gcc.dg/noncompile/921102-1.c 2258888666b ./gcc/testsuite/gcc.dg/noncompile/921116-1.c 4097035630b ./gcc/testsuite/gcc.dg/noncompile/930301-1.c --- 7135,7202 ---- 2090637496b ./gcc/testsuite/gcc.dg/format/c99-strftime-2.c 2345337374b ./gcc/testsuite/gcc.dg/format/diag-1.c 1250738052b ./gcc/testsuite/gcc.dg/format/errmk-1.c ! 1927556152b ./gcc/testsuite/gcc.dg/format/ext-1.c 230043853b ./gcc/testsuite/gcc.dg/format/ext-2.c 3735744313b ./gcc/testsuite/gcc.dg/format/ext-3.c 2712114535b ./gcc/testsuite/gcc.dg/format/ext-4.c 3870005152b ./gcc/testsuite/gcc.dg/format/ext-5.c ! 4154438977b ./gcc/testsuite/gcc.dg/format/ext-6.c ! 174407969b ./gcc/testsuite/gcc.dg/format/format.exp ! 2650327793b ./gcc/testsuite/gcc.dg/format/format.h 3030055438b ./gcc/testsuite/gcc.dg/format/miss-1.c 58040071b ./gcc/testsuite/gcc.dg/format/miss-2.c + 1680800961b ./gcc/testsuite/gcc.dg/format/multattr-1.c + 3511814217b ./gcc/testsuite/gcc.dg/format/multattr-2.c + 1621224881b ./gcc/testsuite/gcc.dg/format/multattr-3.c 2482792163b ./gcc/testsuite/gcc.dg/format/no-exargs-1.c + 3432514252b ./gcc/testsuite/gcc.dg/format/no-exargs-2.c 2335984266b ./gcc/testsuite/gcc.dg/format/nonlit-1.c 3055177111b ./gcc/testsuite/gcc.dg/format/nonlit-2.c 449451912b ./gcc/testsuite/gcc.dg/format/nonlit-3.c 4199776146b ./gcc/testsuite/gcc.dg/format/no-y2k-1.c + 3652642152b ./gcc/testsuite/gcc.dg/format/plus-1.c 2673114039b ./gcc/testsuite/gcc.dg/format/sec-1.c ! 1815893280b ./gcc/testsuite/gcc.dg/format/strfmon-1.c 821372176b ./gcc/testsuite/gcc.dg/format/va-1.c 358822374b ./gcc/testsuite/gcc.dg/format/warnll-1.c ! 3962912739b ./gcc/testsuite/gcc.dg/format/xopen-1.c 73044124b ./gcc/testsuite/gcc.dg/format/z-1.c + 745582715b ./gcc/testsuite/gcc.dg/gnu89-init-1.c 1770671475b ./gcc/testsuite/gcc.dg/gnu99-init-1.c + 885923224b ./gcc/testsuite/gcc.dg/i386-387-1.c + 4204057333b ./gcc/testsuite/gcc.dg/i386-387-2.c + 2049230625b ./gcc/testsuite/gcc.dg/i386-mmx-1.c + 3973906625b ./gcc/testsuite/gcc.dg/i386-mmx-2.c + 2923520039b ./gcc/testsuite/gcc.dg/i386-sse-1.c + 1935024742b ./gcc/testsuite/gcc.dg/i386-sse-2.c + 2407665653b ./gcc/testsuite/gcc.dg/i386-sse-3.c 646600080b ./gcc/testsuite/gcc.dg/ia64-asm-1.c 2995485298b ./gcc/testsuite/gcc.dg/ia64-sync-1.c 72205644b ./gcc/testsuite/gcc.dg/ia64-sync-2.c 1374850312b ./gcc/testsuite/gcc.dg/ifelse-1.c + 4085178572b ./gcc/testsuite/gcc.dg/iftrap-1.c + 448418366b ./gcc/testsuite/gcc.dg/iftrap-2.c + 3685495880b ./gcc/testsuite/gcc.dg/inline-1.c + 6005157b ./gcc/testsuite/gcc.dg/inline-2.c 247919548b ./gcc/testsuite/gcc.dg/loop-1.c + 2954420820b ./gcc/testsuite/gcc.dg/mmix-1.c + 2663557248b ./gcc/testsuite/gcc.dg/m-un-1.c + 2341407016b ./gcc/testsuite/gcc.dg/m-un-2.c + 167742958b ./gcc/testsuite/gcc.dg/no-builtin-1.c + 2208318132b ./gcc/testsuite/gcc.dg/noncompile/20000901-1.c 3562764821b ./gcc/testsuite/gcc.dg/noncompile/20001228-1.c ! 677199841b ./gcc/testsuite/gcc.dg/noncompile/20010425-1.c ! 100652056b ./gcc/testsuite/gcc.dg/noncompile/20010524-1.c ! 292530438b ./gcc/testsuite/gcc.dg/noncompile/20011025-1.c ! 3164469142b ./gcc/testsuite/gcc.dg/noncompile/20020130-1.c ! 3055182962b ./gcc/testsuite/gcc.dg/noncompile/20020207-1.c ! 3889627347b ./gcc/testsuite/gcc.dg/noncompile/20020213-1.c ! 1457569280b ./gcc/testsuite/gcc.dg/noncompile/20020220-1.c ! 2964160251b ./gcc/testsuite/gcc.dg/noncompile/920507-1.c 2161867266b ./gcc/testsuite/gcc.dg/noncompile/920616-2.c ! 1449844754b ./gcc/testsuite/gcc.dg/noncompile/920721-2.c 2834384944b ./gcc/testsuite/gcc.dg/noncompile/920824-1.c ! 3021076947b ./gcc/testsuite/gcc.dg/noncompile/920923-1.c 3162370830b ./gcc/testsuite/gcc.dg/noncompile/921102-1.c 2258888666b ./gcc/testsuite/gcc.dg/noncompile/921116-1.c 4097035630b ./gcc/testsuite/gcc.dg/noncompile/930301-1.c *************** *** 3826,3832 **** 2927938029b ./gcc/testsuite/gcc.dg/noncompile/init-2.c 4011814030b ./gcc/testsuite/gcc.dg/noncompile/init-3.c 835046904b ./gcc/testsuite/gcc.dg/noncompile/invalid_asm.c ! 171035031b ./gcc/testsuite/gcc.dg/noncompile/label-lineno-1.c 348329041b ./gcc/testsuite/gcc.dg/noncompile/noncompile.exp 3105423709b ./gcc/testsuite/gcc.dg/noncompile/redecl-1.c 1781438824b ./gcc/testsuite/gcc.dg/noncompile/va-arg-1.c --- 7216,7222 ---- 2927938029b ./gcc/testsuite/gcc.dg/noncompile/init-2.c 4011814030b ./gcc/testsuite/gcc.dg/noncompile/init-3.c 835046904b ./gcc/testsuite/gcc.dg/noncompile/invalid_asm.c ! 3441206096b ./gcc/testsuite/gcc.dg/noncompile/label-lineno-1.c 348329041b ./gcc/testsuite/gcc.dg/noncompile/noncompile.exp 3105423709b ./gcc/testsuite/gcc.dg/noncompile/redecl-1.c 1781438824b ./gcc/testsuite/gcc.dg/noncompile/va-arg-1.c *************** *** 3839,3844 **** --- 7229,7240 ---- 2754082325b ./gcc/testsuite/gcc.dg/pack-test-1.h 2875409621b ./gcc/testsuite/gcc.dg/pack-test-2.c 3395691298b ./gcc/testsuite/gcc.dg/pragma-align.c + 2976918557b ./gcc/testsuite/gcc.dg/pragma-darwin.c + 967979463b ./gcc/testsuite/gcc.dg/pragma-ep-1.c + 689657683b ./gcc/testsuite/gcc.dg/pragma-ep-2.c + 375277958b ./gcc/testsuite/gcc.dg/pragma-ep-3.c + 18511022b ./gcc/testsuite/gcc.dg/pragma-re-1.c + 3911201539b ./gcc/testsuite/gcc.dg/pragma-re-2.c 3011001240b ./gcc/testsuite/gcc.dg/qual-return-1.c 4111880764b ./gcc/testsuite/gcc.dg/qual-return-2.c 2426423235b ./gcc/testsuite/gcc.dg/README *************** *** 3846,3854 **** 3519355790b ./gcc/testsuite/gcc.dg/return-type-2.c 3862146754b ./gcc/testsuite/gcc.dg/sequence-pt-1.c 3997091992b ./gcc/testsuite/gcc.dg/setjmp-1.c 1993113484b ./gcc/testsuite/gcc.dg/special/20000419-2.c 3430419731b ./gcc/testsuite/gcc.dg/special/alias-1.c ! 3063487837b ./gcc/testsuite/gcc.dg/special/ecos.exp 4212112354b ./gcc/testsuite/gcc.dg/special/gcsec-1.c 274062869b ./gcc/testsuite/gcc.dg/special/special.exp 3422703148b ./gcc/testsuite/gcc.dg/special/weak-1a.c --- 7242,7252 ---- 3519355790b ./gcc/testsuite/gcc.dg/return-type-2.c 3862146754b ./gcc/testsuite/gcc.dg/sequence-pt-1.c 3997091992b ./gcc/testsuite/gcc.dg/setjmp-1.c + 802040009b ./gcc/testsuite/gcc.dg/sparc-ret.c 1993113484b ./gcc/testsuite/gcc.dg/special/20000419-2.c 3430419731b ./gcc/testsuite/gcc.dg/special/alias-1.c ! 7306739b ./gcc/testsuite/gcc.dg/special/alias-2.c ! 371725929b ./gcc/testsuite/gcc.dg/special/ecos.exp 4212112354b ./gcc/testsuite/gcc.dg/special/gcsec-1.c 274062869b ./gcc/testsuite/gcc.dg/special/special.exp 3422703148b ./gcc/testsuite/gcc.dg/special/weak-1a.c *************** *** 3861,3873 **** 2277202182b ./gcc/testsuite/gcc.dg/special/wkali-2b.c 3142421222b ./gcc/testsuite/gcc.dg/special/wkali-2.c 1648410279b ./gcc/testsuite/gcc.dg/splet-1.c 935614314b ./gcc/testsuite/gcc.dg/struct-ret-1.c ! 3823263742b ./gcc/testsuite/gcc.dg/struct-ret-2.c 548999932b ./gcc/testsuite/gcc.dg/switch-1.c 1141366394b ./gcc/testsuite/gcc.dg/trunc-1.c 1860858242b ./gcc/testsuite/gcc.dg/ultrasp1.c 789972216b ./gcc/testsuite/gcc.dg/ultrasp2.c 2708772692b ./gcc/testsuite/gcc.dg/ultrasp3.c 2258658308b ./gcc/testsuite/gcc.dg/uninit-1.c 608086310b ./gcc/testsuite/gcc.dg/uninit-2.c 2219873069b ./gcc/testsuite/gcc.dg/uninit-3.c --- 7259,7274 ---- 2277202182b ./gcc/testsuite/gcc.dg/special/wkali-2b.c 3142421222b ./gcc/testsuite/gcc.dg/special/wkali-2.c 1648410279b ./gcc/testsuite/gcc.dg/splet-1.c + 276809676b ./gcc/testsuite/gcc.dg/struct-alias-1.c + 2735438447b ./gcc/testsuite/gcc.dg/struct-by-value-1.c 935614314b ./gcc/testsuite/gcc.dg/struct-ret-1.c ! 1932500816b ./gcc/testsuite/gcc.dg/struct-ret-2.c 548999932b ./gcc/testsuite/gcc.dg/switch-1.c 1141366394b ./gcc/testsuite/gcc.dg/trunc-1.c 1860858242b ./gcc/testsuite/gcc.dg/ultrasp1.c 789972216b ./gcc/testsuite/gcc.dg/ultrasp2.c 2708772692b ./gcc/testsuite/gcc.dg/ultrasp3.c + 1890424464b ./gcc/testsuite/gcc.dg/ultrasp4.c 2258658308b ./gcc/testsuite/gcc.dg/uninit-1.c 608086310b ./gcc/testsuite/gcc.dg/uninit-2.c 2219873069b ./gcc/testsuite/gcc.dg/uninit-3.c *************** *** 3876,3891 **** 4187609695b ./gcc/testsuite/gcc.dg/uninit-6.c 3846997492b ./gcc/testsuite/gcc.dg/uninit-8.c 390912088b ./gcc/testsuite/gcc.dg/uninit-9.c ! 4059769481b ./gcc/testsuite/gcc.dg/uninit-A.c 3967573468b ./gcc/testsuite/gcc.dg/uninit-B.c 977726966b ./gcc/testsuite/gcc.dg/unused-1.c 3484455791b ./gcc/testsuite/gcc.dg/unused-2.c 865910481b ./gcc/testsuite/gcc.dg/unused-3.c ! 1952778960b ./gcc/testsuite/gcc.dg/va-arg-1.c ! 2228363679b ./gcc/testsuite/gcc.dg/wchar_t-1.c ! 455748560b ./gcc/testsuite/gcc.dg/wint_t-1.c 3364645726b ./gcc/testsuite/gcc.dg/Wlarger-than.c ! 3467454579b ./gcc/testsuite/gcc.dg/wtr-aggr-init-1.c 3348015737b ./gcc/testsuite/gcc.dg/wtr-conversion-1.c 3943648306b ./gcc/testsuite/gcc.dg/wtr-escape-1.c 1258505090b ./gcc/testsuite/gcc.dg/wtr-int-type-1.c --- 7277,7307 ---- 4187609695b ./gcc/testsuite/gcc.dg/uninit-6.c 3846997492b ./gcc/testsuite/gcc.dg/uninit-8.c 390912088b ./gcc/testsuite/gcc.dg/uninit-9.c ! 4065754561b ./gcc/testsuite/gcc.dg/uninit-A.c 3967573468b ./gcc/testsuite/gcc.dg/uninit-B.c 977726966b ./gcc/testsuite/gcc.dg/unused-1.c 3484455791b ./gcc/testsuite/gcc.dg/unused-2.c 865910481b ./gcc/testsuite/gcc.dg/unused-3.c ! 3706472995b ./gcc/testsuite/gcc.dg/va-arg-1.c ! 2427295047b ./gcc/testsuite/gcc.dg/vla-init-1.c ! 3993664995b ./gcc/testsuite/gcc.dg/wchar_t-1.c ! 943771070b ./gcc/testsuite/gcc.dg/Wconversion.c ! 2603701000b ./gcc/testsuite/gcc.dg/weak-1.c ! 845503470b ./gcc/testsuite/gcc.dg/weak-2.c ! 2706085588b ./gcc/testsuite/gcc.dg/weak-3.c ! 366214213b ./gcc/testsuite/gcc.dg/weak-4.c ! 2249990781b ./gcc/testsuite/gcc.dg/weak-5.c ! 3288640728b ./gcc/testsuite/gcc.dg/weak-6.c ! 448806115b ./gcc/testsuite/gcc.dg/weak-7.c ! 4149249905b ./gcc/testsuite/gcc.dg/wint_t-1.c 3364645726b ./gcc/testsuite/gcc.dg/Wlarger-than.c ! 3791055151b ./gcc/testsuite/gcc.dg/Wparentheses-1.c ! 3316229121b ./gcc/testsuite/gcc.dg/Wreturn-type2.c ! 2809247827b ./gcc/testsuite/gcc.dg/Wreturn-type.c ! 3907876407b ./gcc/testsuite/gcc.dg/Wshadow-1.c ! 3928913400b ./gcc/testsuite/gcc.dg/Wswitch-2.c ! 49151727b ./gcc/testsuite/gcc.dg/Wswitch.c ! 1217899241b ./gcc/testsuite/gcc.dg/wtr-aggr-init-1.c 3348015737b ./gcc/testsuite/gcc.dg/wtr-conversion-1.c 3943648306b ./gcc/testsuite/gcc.dg/wtr-escape-1.c 1258505090b ./gcc/testsuite/gcc.dg/wtr-int-type-1.c *************** *** 3898,3905 **** --- 7314,7328 ---- 1007453610b ./gcc/testsuite/gcc.dg/wtr-union-init-1.c 1817815277b ./gcc/testsuite/gcc.dg/wtr-union-init-2.c 3147738885b ./gcc/testsuite/gcc.dg/wtr-union-init-3.c + 1674197654b ./gcc/testsuite/gcc.dg/Wunreachable-1.c + 3581949676b ./gcc/testsuite/gcc.dg/Wunreachable-2.c 1769759078b ./gcc/testsuite/gcc.misc-tests/acker1.c 1443030966b ./gcc/testsuite/gcc.misc-tests/acker1.exp + 278378178b ./gcc/testsuite/gcc.misc-tests/arm-isr.c + 1193019601b ./gcc/testsuite/gcc.misc-tests/arm-isr.exp + 2075376861b ./gcc/testsuite/gcc.misc-tests/bprob-1.c + 3293027214b ./gcc/testsuite/gcc.misc-tests/bprob-2.c + 2453911973b ./gcc/testsuite/gcc.misc-tests/bprob.exp 865542926b ./gcc/testsuite/gcc.misc-tests/dg-10.c 2063159250b ./gcc/testsuite/gcc.misc-tests/dg-11.c 33043738b ./gcc/testsuite/gcc.misc-tests/dg-12.c *************** *** 3917,3941 **** 1824463967b ./gcc/testsuite/gcc.misc-tests/dhry.exp 208907585b ./gcc/testsuite/gcc.misc-tests/dhry.h 779830061b ./gcc/testsuite/gcc.misc-tests/gcov-1.c ! 365927888b ./gcc/testsuite/gcc.misc-tests/gcov-2.c 4211514085b ./gcc/testsuite/gcc.misc-tests/gcov-3.c ! 3439242634b ./gcc/testsuite/gcc.misc-tests/gcov.exp ! 1234973871b ./gcc/testsuite/gcc.misc-tests/linkage.exp 2071381157b ./gcc/testsuite/gcc.misc-tests/linkage-x.c 3975807378b ./gcc/testsuite/gcc.misc-tests/linkage-y.c 2874350784b ./gcc/testsuite/gcc.misc-tests/matrix1.c 1686589144b ./gcc/testsuite/gcc.misc-tests/matrix1.exp 1813429392b ./gcc/testsuite/gcc.misc-tests/mg.c 1868251641b ./gcc/testsuite/gcc.misc-tests/mg.exp - 2954737355b ./gcc/testsuite/gcc.misc-tests/msgs.exp - 2663557248b ./gcc/testsuite/gcc.misc-tests/m-un-1.c - 1614311416b ./gcc/testsuite/gcc.misc-tests/m-un-2.c 1983153897b ./gcc/testsuite/gcc.misc-tests/sieve.c 3220093576b ./gcc/testsuite/gcc.misc-tests/sieve.exp 4235385594b ./gcc/testsuite/gcc.misc-tests/sort2.c 232815709b ./gcc/testsuite/gcc.misc-tests/sort2.exp ! 2175367674b ./gcc/testsuite/g++.dg/dg.exp ! 559527351b ./gcc/testsuite/g++.dg/mangle1.C 522523166b ./gcc/testsuite/g++.dg/ref1.C 1942107252b ./gcc/testsuite/g++.dg/sizeof1.C 370035332b ./gcc/testsuite/g++.dg/special/conpr-1.C --- 7340,7507 ---- 1824463967b ./gcc/testsuite/gcc.misc-tests/dhry.exp 208907585b ./gcc/testsuite/gcc.misc-tests/dhry.h 779830061b ./gcc/testsuite/gcc.misc-tests/gcov-1.c ! 3193043874b ./gcc/testsuite/gcc.misc-tests/gcov-2.c 4211514085b ./gcc/testsuite/gcc.misc-tests/gcov-3.c ! 527032712b ./gcc/testsuite/gcc.misc-tests/gcov-4b.c ! 3346981345b ./gcc/testsuite/gcc.misc-tests/gcov-4b.x ! 3919110722b ./gcc/testsuite/gcc.misc-tests/gcov-4.c ! 695277662b ./gcc/testsuite/gcc.misc-tests/gcov-5b.c ! 3346981345b ./gcc/testsuite/gcc.misc-tests/gcov-5b.x ! 790797496b ./gcc/testsuite/gcc.misc-tests/gcov-6.c ! 2262587727b ./gcc/testsuite/gcc.misc-tests/gcov-6.x ! 2647301947b ./gcc/testsuite/gcc.misc-tests/gcov-7.c ! 2262587727b ./gcc/testsuite/gcc.misc-tests/gcov-7.x ! 283921131b ./gcc/testsuite/gcc.misc-tests/gcov.exp ! 1258478426b ./gcc/testsuite/gcc.misc-tests/i386-pf-3dnow-1.c ! 3346801828b ./gcc/testsuite/gcc.misc-tests/i386-pf-athlon-1.c ! 2266643451b ./gcc/testsuite/gcc.misc-tests/i386-pf-none-1.c ! 2697809529b ./gcc/testsuite/gcc.misc-tests/i386-pf-sse-1.c ! 2256410310b ./gcc/testsuite/gcc.misc-tests/i386-prefetch.exp ! 1392461362b ./gcc/testsuite/gcc.misc-tests/linkage.exp 2071381157b ./gcc/testsuite/gcc.misc-tests/linkage-x.c 3975807378b ./gcc/testsuite/gcc.misc-tests/linkage-y.c 2874350784b ./gcc/testsuite/gcc.misc-tests/matrix1.c 1686589144b ./gcc/testsuite/gcc.misc-tests/matrix1.exp 1813429392b ./gcc/testsuite/gcc.misc-tests/mg.c 1868251641b ./gcc/testsuite/gcc.misc-tests/mg.exp 1983153897b ./gcc/testsuite/gcc.misc-tests/sieve.c 3220093576b ./gcc/testsuite/gcc.misc-tests/sieve.exp 4235385594b ./gcc/testsuite/gcc.misc-tests/sort2.c 232815709b ./gcc/testsuite/gcc.misc-tests/sort2.exp ! 885716516b ./gcc/testsuite/g++.dg/abi/bitfield1.C ! 479436735b ./gcc/testsuite/g++.dg/abi/bitfield2.C ! 257517025b ./gcc/testsuite/g++.dg/abi/empty4.C ! 2703592525b ./gcc/testsuite/g++.dg/abi/enum1.C ! 4166781498b ./gcc/testsuite/g++.dg/abi/mangle1.C ! 4182318030b ./gcc/testsuite/g++.dg/abi/mangle2.C ! 1755377648b ./gcc/testsuite/g++.dg/abi/mangle3.C ! 3981957296b ./gcc/testsuite/g++.dg/abi/mangle4.C ! 4052214936b ./gcc/testsuite/g++.dg/abi/mangle5.C ! 31392269b ./gcc/testsuite/g++.dg/abi/mangle6.C ! 1724007624b ./gcc/testsuite/g++.dg/abi/mangle7.C ! 1969970486b ./gcc/testsuite/g++.dg/abi/offsetof.C ! 20126271b ./gcc/testsuite/g++.dg/abi/vbase1.C ! 1286609512b ./gcc/testsuite/g++.dg/abi/vbase8-10.C ! 3227029100b ./gcc/testsuite/g++.dg/abi/vbase8-21.C ! 1921427599b ./gcc/testsuite/g++.dg/abi/vbase8-22.C ! 3728366429b ./gcc/testsuite/g++.dg/abi/vbase8-4.C ! 2997752155b ./gcc/testsuite/g++.dg/abi/vbase9.C ! 4073115738b ./gcc/testsuite/g++.dg/abi/vthunk1.C ! 1740237496b ./gcc/testsuite/g++.dg/debug/debug1.C ! 1473360233b ./gcc/testsuite/g++.dg/debug/debug2.C ! 4057306503b ./gcc/testsuite/g++.dg/debug/debug3.C ! 4063448821b ./gcc/testsuite/g++.dg/debug/debug4.C ! 2101587412b ./gcc/testsuite/g++.dg/debug/debug5.C ! 1949293295b ./gcc/testsuite/g++.dg/debug/debug.exp ! 1865154101b ./gcc/testsuite/g++.dg/debug/trivial.C ! 2006018373b ./gcc/testsuite/g++.dg/dg.exp ! 65538524b ./gcc/testsuite/g++.dg/eh/ctor1.C ! 3380022165b ./gcc/testsuite/g++.dg/eh/dead1.C ! 2307599878b ./gcc/testsuite/g++.dg/eh/dtor1.C ! 3289569863b ./gcc/testsuite/g++.dg/eh/filter1.C ! 1460645953b ./gcc/testsuite/g++.dg/eh/filter2.C ! 507841710b ./gcc/testsuite/g++.dg/eh/loop1.C ! 4035633334b ./gcc/testsuite/g++.dg/eh/omit-frame-pointer.C ! 1888049158b ./gcc/testsuite/g++.dg/eh/registers1.C ! 2204781248b ./gcc/testsuite/g++.dg/eh/spec1.C ! 985744667b ./gcc/testsuite/g++.dg/eh/synth1.C ! 2213107508b ./gcc/testsuite/g++.dg/eh/template1.C ! 3379396295b ./gcc/testsuite/g++.dg/eh/template2.C ! 1789254796b ./gcc/testsuite/g++.dg/eh/unexpected1.C ! 10818138b ./gcc/testsuite/g++.dg/ext/align1.C ! 4214519942b ./gcc/testsuite/g++.dg/ext/attrib1.C ! 2242814507b ./gcc/testsuite/g++.dg/ext/attrib2.C ! 2606851845b ./gcc/testsuite/g++.dg/ext/attrib3.C ! 3822844850b ./gcc/testsuite/g++.dg/ext/attrib4.C ! 783893625b ./gcc/testsuite/g++.dg/ext/attrib5.C ! 2703749043b ./gcc/testsuite/g++.dg/ext/conv1.C ! 4165742225b ./gcc/testsuite/g++.dg/ext/forscope1.C ! 4019239529b ./gcc/testsuite/g++.dg/ext/forscope2.C ! 2832497986b ./gcc/testsuite/g++.dg/ext/instantiate1.C ! 1033795910b ./gcc/testsuite/g++.dg/ext/instantiate2.C ! 631460058b ./gcc/testsuite/g++.dg/ext/instantiate3.C ! 433892339b ./gcc/testsuite/g++.dg/ext/lvalue1.C ! 1765466377b ./gcc/testsuite/g++.dg/ext/member-attr.C ! 3028501104b ./gcc/testsuite/g++.dg/ext/typeof1.C ! 2576905511b ./gcc/testsuite/g++.dg/inherit/access1.C ! 3833575012b ./gcc/testsuite/g++.dg/inherit/access2.C ! 3439912284b ./gcc/testsuite/g++.dg/inherit/base1.C ! 2309234518b ./gcc/testsuite/g++.dg/inherit/namespace-as-base.C ! 4167951109b ./gcc/testsuite/g++.dg/inherit/null1.C ! 3799679971b ./gcc/testsuite/g++.dg/inherit/using1.C ! 3967911027b ./gcc/testsuite/g++.dg/init/array1.C ! 3157994593b ./gcc/testsuite/g++.dg/init/array2.C ! 486682064b ./gcc/testsuite/g++.dg/init/copy1.C ! 1741245578b ./gcc/testsuite/g++.dg/init/dtor1.C ! 486760656b ./gcc/testsuite/g++.dg/init/elide1.C ! 2797496870b ./gcc/testsuite/g++.dg/init/empty1.C ! 2640181867b ./gcc/testsuite/g++.dg/init/init-ref1.C ! 3275947242b ./gcc/testsuite/g++.dg/init/init-ref2.C ! 1678560039b ./gcc/testsuite/g++.dg/init/new1.C ! 4033502091b ./gcc/testsuite/g++.dg/init/new2.C ! 684033142b ./gcc/testsuite/g++.dg/lookup/struct1.C ! 3358174935b ./gcc/testsuite/g++.dg/lookup/using2.C ! 3384907788b ./gcc/testsuite/g++.dg/lookup/using.C ! 421486798b ./gcc/testsuite/g++.dg/opt/alias1.C ! 3198583204b ./gcc/testsuite/g++.dg/opt/alias2.C ! 1878509122b ./gcc/testsuite/g++.dg/opt/anonunion1.C ! 1484527337b ./gcc/testsuite/g++.dg/opt/cleanup1.C ! 3120356664b ./gcc/testsuite/g++.dg/opt/conj1.C ! 4054451892b ./gcc/testsuite/g++.dg/opt/conj2.C ! 2033783153b ./gcc/testsuite/g++.dg/opt/const1.C ! 1685294627b ./gcc/testsuite/g++.dg/opt/dtor1.C ! 3770486737b ./gcc/testsuite/g++.dg/opt/inline1.C ! 2869206713b ./gcc/testsuite/g++.dg/opt/inline2.C ! 3146403914b ./gcc/testsuite/g++.dg/opt/longbranch1.C ! 2026702440b ./gcc/testsuite/g++.dg/opt/mmx1.C ! 2857034604b ./gcc/testsuite/g++.dg/opt/nrv1.C ! 2448700667b ./gcc/testsuite/g++.dg/opt/nrv2.C ! 442892442b ./gcc/testsuite/g++.dg/opt/preinc1.C ! 1496969096b ./gcc/testsuite/g++.dg/opt/ptrintsum1.C ! 571185401b ./gcc/testsuite/g++.dg/opt/reg-stack.C ! 1124740865b ./gcc/testsuite/g++.dg/opt/static1.C ! 684782459b ./gcc/testsuite/g++.dg/opt/static2.C ! 135165742b ./gcc/testsuite/g++.dg/opt/vtgc1.C ! 686527483b ./gcc/testsuite/g++.dg/other/access1.C ! 3285252373b ./gcc/testsuite/g++.dg/other/anon2.C ! 681497421b ./gcc/testsuite/g++.dg/other/anon-struct.C ! 1585173858b ./gcc/testsuite/g++.dg/other/anon-union.C ! 1233509973b ./gcc/testsuite/g++.dg/other/array1.C ! 2359273471b ./gcc/testsuite/g++.dg/other/big-struct.C ! 2708764484b ./gcc/testsuite/g++.dg/other/classkey1.C ! 867943500b ./gcc/testsuite/g++.dg/other/component1.C ! 4045861590b ./gcc/testsuite/g++.dg/other/const1.C ! 109747091b ./gcc/testsuite/g++.dg/other/const2.C ! 3254620469b ./gcc/testsuite/g++.dg/other/copy1.C ! 1287592684b ./gcc/testsuite/g++.dg/other/deprecated.C ! 1127806654b ./gcc/testsuite/g++.dg/other/enum1.C ! 3062339491b ./gcc/testsuite/g++.dg/other/error1.C ! 4222650217b ./gcc/testsuite/g++.dg/other/error2.C ! 490611048b ./gcc/testsuite/g++.dg/other/error3.C ! 2120952916b ./gcc/testsuite/g++.dg/other/exception-specification.C ! 1698581993b ./gcc/testsuite/g++.dg/other/forscope1.C ! 2764746133b ./gcc/testsuite/g++.dg/other/friend1.C ! 2377020172b ./gcc/testsuite/g++.dg/other/gc1.C ! 2096815409b ./gcc/testsuite/g++.dg/other/init1.C ! 2028368016b ./gcc/testsuite/g++.dg/other/init2.C ! 2143945221b ./gcc/testsuite/g++.dg/other/linkage1.C ! 2384288796b ./gcc/testsuite/g++.dg/other/pragma-ep-1.C ! 198088036b ./gcc/testsuite/g++.dg/other/pragma-re-1.C ! 1453288357b ./gcc/testsuite/g++.dg/other/ptrmem1.C ! 392352692b ./gcc/testsuite/g++.dg/other/ptrmem2.C ! 522786262b ./gcc/testsuite/g++.dg/other/scope1.C ! 3572380294b ./gcc/testsuite/g++.dg/other/stdarg1.C ! 873911472b ./gcc/testsuite/g++.dg/other/stdbool-if.C ! 492684594b ./gcc/testsuite/g++.dg/overload/builtin1.C ! 3775778165b ./gcc/testsuite/g++.dg/overload/cond1.C ! 3588815363b ./gcc/testsuite/g++.dg/overload/pmf1.C ! 2166944080b ./gcc/testsuite/g++.dg/parse/angle-bracket.C ! 3621016079b ./gcc/testsuite/g++.dg/parse/attr1.C ! 4289007099b ./gcc/testsuite/g++.dg/parse/saved1.C ! 1402579554b ./gcc/testsuite/g++.dg/parse/stmtexpr1.C ! 2804352074b ./gcc/testsuite/g++.dg/parse/stmtexpr2.C ! 805014732b ./gcc/testsuite/g++.dg/parse/typedef1.C ! 739732730b ./gcc/testsuite/g++.dg/README 522523166b ./gcc/testsuite/g++.dg/ref1.C 1942107252b ./gcc/testsuite/g++.dg/sizeof1.C 370035332b ./gcc/testsuite/g++.dg/special/conpr-1.C *************** *** 3944,3963 **** 3756639268b ./gcc/testsuite/g++.dg/special/conpr-3a.C 3436726377b ./gcc/testsuite/g++.dg/special/conpr-3b.C 1019201819b ./gcc/testsuite/g++.dg/special/conpr-3.C ! 1078385668b ./gcc/testsuite/g++.dg/special/ecos.exp ! 2770706292b ./gcc/testsuite/g++.dg/special/initp1.C ! 873911472b ./gcc/testsuite/g++.dg/stdbool-if.C ! 3595370582b ./gcc/testsuite/g++.dg/unify1.C ! 1148935665b ./gcc/testsuite/g++.dg/vtgc1.C ! 400952277b ./gcc/testsuite/g++.old-deja/g++.abi/aggregates.C ! 999778394b ./gcc/testsuite/g++.old-deja/g++.abi/align.C ! 519494714b ./gcc/testsuite/g++.old-deja/g++.abi/arraynew.C ! 848990512b ./gcc/testsuite/g++.old-deja/g++.abi/bitfields.C 2026386788b ./gcc/testsuite/g++.old-deja/g++.abi/crash1.C ! 2827344973b ./gcc/testsuite/g++.old-deja/g++.abi/cxa_vec.C 4096109742b ./gcc/testsuite/g++.old-deja/g++.abi/empty2.C 1878628007b ./gcc/testsuite/g++.old-deja/g++.abi/empty3.C - 2464785360b ./gcc/testsuite/g++.old-deja/g++.abi/empty4.C 2936636767b ./gcc/testsuite/g++.old-deja/g++.abi/empty.C 239352654b ./gcc/testsuite/g++.old-deja/g++.abi/layout1.C 3009318595b ./gcc/testsuite/g++.old-deja/g++.abi/mangle1.C --- 7510,7589 ---- 3756639268b ./gcc/testsuite/g++.dg/special/conpr-3a.C 3436726377b ./gcc/testsuite/g++.dg/special/conpr-3b.C 1019201819b ./gcc/testsuite/g++.dg/special/conpr-3.C ! 4265992428b ./gcc/testsuite/g++.dg/special/ecos.exp ! 1952533588b ./gcc/testsuite/g++.dg/special/initp1.C ! 3059417569b ./gcc/testsuite/g++.dg/template/access1.C ! 2083292273b ./gcc/testsuite/g++.dg/template/copy1.C ! 1072669517b ./gcc/testsuite/g++.dg/template/crash1.C ! 3504290323b ./gcc/testsuite/g++.dg/template/ctor1.C ! 1161800603b ./gcc/testsuite/g++.dg/template/explicit-instantiation.C ! 3302501697b ./gcc/testsuite/g++.dg/template/friend3.C ! 587931705b ./gcc/testsuite/g++.dg/template/friend4.C ! 3560434139b ./gcc/testsuite/g++.dg/template/friend5.C ! 590954347b ./gcc/testsuite/g++.dg/template/friend6.C ! 3595433718b ./gcc/testsuite/g++.dg/template/friend.C ! 438837461b ./gcc/testsuite/g++.dg/template/inherit.C ! 2872339928b ./gcc/testsuite/g++.dg/template/init-list.C ! 416617778b ./gcc/testsuite/g++.dg/template/local1.C ! 1449269044b ./gcc/testsuite/g++.dg/template/member.C ! 2073430043b ./gcc/testsuite/g++.dg/template/ntp1.C ! 188396250b ./gcc/testsuite/g++.dg/template/partial-specialization.C ! 601175114b ./gcc/testsuite/g++.dg/template/ptrmem1.C ! 3748090308b ./gcc/testsuite/g++.dg/template/ptrmem2.C ! 1117759327b ./gcc/testsuite/g++.dg/template/qual1.C ! 4043559007b ./gcc/testsuite/g++.dg/template/qualttp10.C ! 265969049b ./gcc/testsuite/g++.dg/template/qualttp11.C ! 3320116615b ./gcc/testsuite/g++.dg/template/qualttp12.C ! 1886222588b ./gcc/testsuite/g++.dg/template/qualttp13.C ! 349133345b ./gcc/testsuite/g++.dg/template/qualttp14.C ! 1405414284b ./gcc/testsuite/g++.dg/template/qualttp15.C ! 1602753867b ./gcc/testsuite/g++.dg/template/qualttp16.C ! 730215493b ./gcc/testsuite/g++.dg/template/qualttp17.C ! 2705854603b ./gcc/testsuite/g++.dg/template/qualttp18.C ! 2340914395b ./gcc/testsuite/g++.dg/template/qualttp19.C ! 3125902504b ./gcc/testsuite/g++.dg/template/qualttp1.C ! 1471270599b ./gcc/testsuite/g++.dg/template/qualttp20.C ! 662492681b ./gcc/testsuite/g++.dg/template/qualttp2.C ! 2704736755b ./gcc/testsuite/g++.dg/template/qualttp3.C ! 2095971540b ./gcc/testsuite/g++.dg/template/qualttp4.C ! 1142633939b ./gcc/testsuite/g++.dg/template/qualttp5.C ! 950873247b ./gcc/testsuite/g++.dg/template/qualttp6.C ! 433357978b ./gcc/testsuite/g++.dg/template/qualttp7.C ! 1704860378b ./gcc/testsuite/g++.dg/template/qualttp8.C ! 700938418b ./gcc/testsuite/g++.dg/template/qualttp9.C ! 4163290563b ./gcc/testsuite/g++.dg/template/recurse.C ! 2914549620b ./gcc/testsuite/g++.dg/template/spec1.C ! 2378483146b ./gcc/testsuite/g++.dg/template/spec2.C ! 4241261648b ./gcc/testsuite/g++.dg/template/ttp1.C ! 2877667245b ./gcc/testsuite/g++.dg/template/ttp2.C ! 764874225b ./gcc/testsuite/g++.dg/template/ttp3.C ! 4098822025b ./gcc/testsuite/g++.dg/template/type1.C ! 1430073082b ./gcc/testsuite/g++.dg/template/typedef1.C ! 3583659165b ./gcc/testsuite/g++.dg/template/typename1.C ! 1057553535b ./gcc/testsuite/g++.dg/template/typename2.C ! 3595370582b ./gcc/testsuite/g++.dg/template/unify1.C ! 3639225580b ./gcc/testsuite/g++.dg/template/unify2.C ! 4266445185b ./gcc/testsuite/g++.dg/template/unify3.C ! 3718685372b ./gcc/testsuite/g++.dg/template/vtable1.C ! 2244072137b ./gcc/testsuite/g++.dg/warn/effc1.C ! 1455133800b ./gcc/testsuite/g++.dg/warn/format1.C ! 886747822b ./gcc/testsuite/g++.dg/warn/format2.C ! 2805519034b ./gcc/testsuite/g++.dg/warn/friend.C ! 3402610409b ./gcc/testsuite/g++.dg/warn/oldcast1.C ! 2394314287b ./gcc/testsuite/g++.dg/warn/return-reference.C ! 3714230484b ./gcc/testsuite/g++.dg/warn/weak1.C ! 1594659113b ./gcc/testsuite/g++.dg/warn/Wshadow-1.C ! 3339416566b ./gcc/testsuite/g++.dg/warn/Wswitch-1.C ! 3928913400b ./gcc/testsuite/g++.dg/warn/Wswitch-2.C ! 223408438b ./gcc/testsuite/g++.dg/warn/Wunused-1.C ! 1014061570b ./gcc/testsuite/g++.old-deja/g++.abi/aggregates.C ! 3074970655b ./gcc/testsuite/g++.old-deja/g++.abi/align.C ! 1155806507b ./gcc/testsuite/g++.old-deja/g++.abi/arraynew.C ! 3647855758b ./gcc/testsuite/g++.old-deja/g++.abi/bitfields.C 2026386788b ./gcc/testsuite/g++.old-deja/g++.abi/crash1.C ! 1147144784b ./gcc/testsuite/g++.old-deja/g++.abi/cxa_vec.C 4096109742b ./gcc/testsuite/g++.old-deja/g++.abi/empty2.C 1878628007b ./gcc/testsuite/g++.old-deja/g++.abi/empty3.C 2936636767b ./gcc/testsuite/g++.old-deja/g++.abi/empty.C 239352654b ./gcc/testsuite/g++.old-deja/g++.abi/layout1.C 3009318595b ./gcc/testsuite/g++.old-deja/g++.abi/mangle1.C *************** *** 3967,3973 **** 758749582b ./gcc/testsuite/g++.old-deja/g++.abi/primary5.C 694100951b ./gcc/testsuite/g++.old-deja/g++.abi/primary.C 1620071560b ./gcc/testsuite/g++.old-deja/g++.abi/ptrflags.C ! 990658695b ./gcc/testsuite/g++.old-deja/g++.abi/ptrmem.C 627664718b ./gcc/testsuite/g++.old-deja/g++.abi/vbase1.C 1393433492b ./gcc/testsuite/g++.old-deja/g++.abi/vbase2.C 1591406699b ./gcc/testsuite/g++.old-deja/g++.abi/vbase3.C --- 7593,7599 ---- 758749582b ./gcc/testsuite/g++.old-deja/g++.abi/primary5.C 694100951b ./gcc/testsuite/g++.old-deja/g++.abi/primary.C 1620071560b ./gcc/testsuite/g++.old-deja/g++.abi/ptrflags.C ! 3967703303b ./gcc/testsuite/g++.old-deja/g++.abi/ptrmem.C 627664718b ./gcc/testsuite/g++.old-deja/g++.abi/vbase1.C 1393433492b ./gcc/testsuite/g++.old-deja/g++.abi/vbase2.C 1591406699b ./gcc/testsuite/g++.old-deja/g++.abi/vbase3.C *************** *** 3975,4007 **** 2484396991b ./gcc/testsuite/g++.old-deja/g++.abi/vbase5.C 762829112b ./gcc/testsuite/g++.old-deja/g++.abi/vbase6.C 2351342219b ./gcc/testsuite/g++.old-deja/g++.abi/vbase7.C - 3172517351b ./gcc/testsuite/g++.old-deja/g++.abi/vbase8-10.C - 995467002b ./gcc/testsuite/g++.old-deja/g++.abi/vbase8-21.C - 3642163828b ./gcc/testsuite/g++.old-deja/g++.abi/vbase8-22.C 3914589079b ./gcc/testsuite/g++.old-deja/g++.abi/vbase8-5.C 3332397893b ./gcc/testsuite/g++.old-deja/g++.abi/vbase8-9.C - 4009533659b ./gcc/testsuite/g++.old-deja/g++.abi/vbase9.C 186405531b ./gcc/testsuite/g++.old-deja/g++.abi/vmihint.C 1117843110b ./gcc/testsuite/g++.old-deja/g++.abi/vtable2.C ! 88732305b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3a.C ! 376549672b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3b.C ! 362851700b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3c.C ! 2694563853b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3d.C ! 3164965879b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3e.C ! 3069246939b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3f.C ! 3087496358b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3g.C 3689828910b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3.h ! 255582158b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3h.C ! 3409231452b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3i.C ! 895613077b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3j.C 2313706108b ./gcc/testsuite/g++.old-deja/g++.abi/vtable.C - 4124551189b ./gcc/testsuite/g++.old-deja/g++.abi/vthunk1.C 3645238009b ./gcc/testsuite/g++.old-deja/g++.benjamin/13478.C 1290057507b ./gcc/testsuite/g++.old-deja/g++.benjamin/13523.C 3226269269b ./gcc/testsuite/g++.old-deja/g++.benjamin/13908.C 2784092938b ./gcc/testsuite/g++.old-deja/g++.benjamin/14139.C ! 3992719725b ./gcc/testsuite/g++.old-deja/g++.benjamin/14664-1.C ! 1418438156b ./gcc/testsuite/g++.old-deja/g++.benjamin/14664-2.C 3677086750b ./gcc/testsuite/g++.old-deja/g++.benjamin/14687.C 1586319624b ./gcc/testsuite/g++.old-deja/g++.benjamin/15054.C 3684855646b ./gcc/testsuite/g++.old-deja/g++.benjamin/15071.C --- 7601,7628 ---- 2484396991b ./gcc/testsuite/g++.old-deja/g++.abi/vbase5.C 762829112b ./gcc/testsuite/g++.old-deja/g++.abi/vbase6.C 2351342219b ./gcc/testsuite/g++.old-deja/g++.abi/vbase7.C 3914589079b ./gcc/testsuite/g++.old-deja/g++.abi/vbase8-5.C 3332397893b ./gcc/testsuite/g++.old-deja/g++.abi/vbase8-9.C 186405531b ./gcc/testsuite/g++.old-deja/g++.abi/vmihint.C 1117843110b ./gcc/testsuite/g++.old-deja/g++.abi/vtable2.C ! 3601882386b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3a.C ! 1066819949b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3b.C ! 733573133b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3c.C ! 2659325300b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3d.C ! 2504154034b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3e.C ! 841363633b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3f.C ! 1020377548b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3g.C 3689828910b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3.h ! 1675326614b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3h.C ! 3323598815b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3i.C ! 4291841254b ./gcc/testsuite/g++.old-deja/g++.abi/vtable3j.C 2313706108b ./gcc/testsuite/g++.old-deja/g++.abi/vtable.C 3645238009b ./gcc/testsuite/g++.old-deja/g++.benjamin/13478.C 1290057507b ./gcc/testsuite/g++.old-deja/g++.benjamin/13523.C 3226269269b ./gcc/testsuite/g++.old-deja/g++.benjamin/13908.C 2784092938b ./gcc/testsuite/g++.old-deja/g++.benjamin/14139.C ! 2423853762b ./gcc/testsuite/g++.old-deja/g++.benjamin/14664-1.C ! 2212548175b ./gcc/testsuite/g++.old-deja/g++.benjamin/14664-2.C 3677086750b ./gcc/testsuite/g++.old-deja/g++.benjamin/14687.C 1586319624b ./gcc/testsuite/g++.old-deja/g++.benjamin/15054.C 3684855646b ./gcc/testsuite/g++.old-deja/g++.benjamin/15071.C *************** *** 4053,4059 **** 3066265332b ./gcc/testsuite/g++.old-deja/g++.bob/friend1.C 128684785b ./gcc/testsuite/g++.old-deja/g++.bob/incomplete-cast1.C 2721973759b ./gcc/testsuite/g++.old-deja/g++.bob/inherit1.C ! 3595198225b ./gcc/testsuite/g++.old-deja/g++.bob/inherit2.C 2833738657b ./gcc/testsuite/g++.old-deja/g++.bob/nested1.C 3565275304b ./gcc/testsuite/g++.old-deja/g++.bob/packed1.C 4197806151b ./gcc/testsuite/g++.old-deja/g++.bob/protected1.C --- 7674,7680 ---- 3066265332b ./gcc/testsuite/g++.old-deja/g++.bob/friend1.C 128684785b ./gcc/testsuite/g++.old-deja/g++.bob/incomplete-cast1.C 2721973759b ./gcc/testsuite/g++.old-deja/g++.bob/inherit1.C ! 1103043835b ./gcc/testsuite/g++.old-deja/g++.bob/inherit2.C 2833738657b ./gcc/testsuite/g++.old-deja/g++.bob/nested1.C 3565275304b ./gcc/testsuite/g++.old-deja/g++.bob/packed1.C 4197806151b ./gcc/testsuite/g++.old-deja/g++.bob/protected1.C *************** *** 4135,4145 **** 2075374404b ./gcc/testsuite/g++.old-deja/g++.brendan/crash4.C 3106709406b ./gcc/testsuite/g++.old-deja/g++.brendan/crash50.C 2259885687b ./gcc/testsuite/g++.old-deja/g++.brendan/crash51.C ! 1461898881b ./gcc/testsuite/g++.old-deja/g++.brendan/crash52.C 353501789b ./gcc/testsuite/g++.old-deja/g++.brendan/crash53.C 249063748b ./gcc/testsuite/g++.old-deja/g++.brendan/crash54.C 88615881b ./gcc/testsuite/g++.old-deja/g++.brendan/crash55.C ! 1818363302b ./gcc/testsuite/g++.old-deja/g++.brendan/crash56.C 2097488269b ./gcc/testsuite/g++.old-deja/g++.brendan/crash57.C 1260831404b ./gcc/testsuite/g++.old-deja/g++.brendan/crash58.C 1308193179b ./gcc/testsuite/g++.old-deja/g++.brendan/crash5.C --- 7756,7766 ---- 2075374404b ./gcc/testsuite/g++.old-deja/g++.brendan/crash4.C 3106709406b ./gcc/testsuite/g++.old-deja/g++.brendan/crash50.C 2259885687b ./gcc/testsuite/g++.old-deja/g++.brendan/crash51.C ! 2036848605b ./gcc/testsuite/g++.old-deja/g++.brendan/crash52.C 353501789b ./gcc/testsuite/g++.old-deja/g++.brendan/crash53.C 249063748b ./gcc/testsuite/g++.old-deja/g++.brendan/crash54.C 88615881b ./gcc/testsuite/g++.old-deja/g++.brendan/crash55.C ! 1729790662b ./gcc/testsuite/g++.old-deja/g++.brendan/crash56.C 2097488269b ./gcc/testsuite/g++.old-deja/g++.brendan/crash57.C 1260831404b ./gcc/testsuite/g++.old-deja/g++.brendan/crash58.C 1308193179b ./gcc/testsuite/g++.old-deja/g++.brendan/crash5.C *************** *** 4154,4160 **** 3682557717b ./gcc/testsuite/g++.old-deja/g++.brendan/crash68.C 3392471730b ./gcc/testsuite/g++.old-deja/g++.brendan/crash6.C 345174202b ./gcc/testsuite/g++.old-deja/g++.brendan/crash7.C ! 2475220478b ./gcc/testsuite/g++.old-deja/g++.brendan/crash8.C 3802934826b ./gcc/testsuite/g++.old-deja/g++.brendan/crash9.C 906320343b ./gcc/testsuite/g++.old-deja/g++.brendan/ctors1.C 2290504125b ./gcc/testsuite/g++.old-deja/g++.brendan/ctors2.C --- 7775,7781 ---- 3682557717b ./gcc/testsuite/g++.old-deja/g++.brendan/crash68.C 3392471730b ./gcc/testsuite/g++.old-deja/g++.brendan/crash6.C 345174202b ./gcc/testsuite/g++.old-deja/g++.brendan/crash7.C ! 4188483267b ./gcc/testsuite/g++.old-deja/g++.brendan/crash8.C 3802934826b ./gcc/testsuite/g++.old-deja/g++.brendan/crash9.C 906320343b ./gcc/testsuite/g++.old-deja/g++.brendan/ctors1.C 2290504125b ./gcc/testsuite/g++.old-deja/g++.brendan/ctors2.C *************** *** 4191,4197 **** 3189183114b ./gcc/testsuite/g++.old-deja/g++.brendan/err-msg11.C 1104107183b ./gcc/testsuite/g++.old-deja/g++.brendan/err-msg12.C 1658458603b ./gcc/testsuite/g++.old-deja/g++.brendan/err-msg1.C ! 781593210b ./gcc/testsuite/g++.old-deja/g++.brendan/err-msg2.C 139198600b ./gcc/testsuite/g++.old-deja/g++.brendan/err-msg3.C 3762408786b ./gcc/testsuite/g++.old-deja/g++.brendan/err-msg4.C 4113288075b ./gcc/testsuite/g++.old-deja/g++.brendan/err-msg5.C --- 7812,7818 ---- 3189183114b ./gcc/testsuite/g++.old-deja/g++.brendan/err-msg11.C 1104107183b ./gcc/testsuite/g++.old-deja/g++.brendan/err-msg12.C 1658458603b ./gcc/testsuite/g++.old-deja/g++.brendan/err-msg1.C ! 1956101213b ./gcc/testsuite/g++.old-deja/g++.brendan/err-msg2.C 139198600b ./gcc/testsuite/g++.old-deja/g++.brendan/err-msg3.C 3762408786b ./gcc/testsuite/g++.old-deja/g++.brendan/err-msg4.C 4113288075b ./gcc/testsuite/g++.old-deja/g++.brendan/err-msg5.C *************** *** 4204,4210 **** 1863938790b ./gcc/testsuite/g++.old-deja/g++.brendan/friend2.C 2483886013b ./gcc/testsuite/g++.old-deja/g++.brendan/friend3.C 3122834560b ./gcc/testsuite/g++.old-deja/g++.brendan/friend4.C ! 1884071371b ./gcc/testsuite/g++.old-deja/g++.brendan/groff1.C 2246409428b ./gcc/testsuite/g++.old-deja/g++.brendan/init10.C 1901230214b ./gcc/testsuite/g++.old-deja/g++.brendan/init11.C 851254540b ./gcc/testsuite/g++.old-deja/g++.brendan/init12.C --- 7825,7831 ---- 1863938790b ./gcc/testsuite/g++.old-deja/g++.brendan/friend2.C 2483886013b ./gcc/testsuite/g++.old-deja/g++.brendan/friend3.C 3122834560b ./gcc/testsuite/g++.old-deja/g++.brendan/friend4.C ! 1714830524b ./gcc/testsuite/g++.old-deja/g++.brendan/groff1.C 2246409428b ./gcc/testsuite/g++.old-deja/g++.brendan/init10.C 1901230214b ./gcc/testsuite/g++.old-deja/g++.brendan/init11.C 851254540b ./gcc/testsuite/g++.old-deja/g++.brendan/init12.C *************** *** 4256,4262 **** 3460040540b ./gcc/testsuite/g++.old-deja/g++.brendan/nest3.C 3092321784b ./gcc/testsuite/g++.old-deja/g++.brendan/nest4.C 3209968741b ./gcc/testsuite/g++.old-deja/g++.brendan/new1.C ! 1158764880b ./gcc/testsuite/g++.old-deja/g++.brendan/new2.C 952562718b ./gcc/testsuite/g++.old-deja/g++.brendan/new3.C 611468654b ./gcc/testsuite/g++.old-deja/g++.brendan/new-array.C 864176391b ./gcc/testsuite/g++.old-deja/g++.brendan/ns1.C --- 7877,7883 ---- 3460040540b ./gcc/testsuite/g++.old-deja/g++.brendan/nest3.C 3092321784b ./gcc/testsuite/g++.old-deja/g++.brendan/nest4.C 3209968741b ./gcc/testsuite/g++.old-deja/g++.brendan/new1.C ! 560844122b ./gcc/testsuite/g++.old-deja/g++.brendan/new2.C 952562718b ./gcc/testsuite/g++.old-deja/g++.brendan/new3.C 611468654b ./gcc/testsuite/g++.old-deja/g++.brendan/new-array.C 864176391b ./gcc/testsuite/g++.old-deja/g++.brendan/ns1.C *************** *** 4281,4287 **** 3089598546b ./gcc/testsuite/g++.old-deja/g++.brendan/overload9.C 3352057260b ./gcc/testsuite/g++.old-deja/g++.brendan/parse1.C 3784585361b ./gcc/testsuite/g++.old-deja/g++.brendan/parse2.C ! 2631225969b ./gcc/testsuite/g++.old-deja/g++.brendan/parse3.C 2326400572b ./gcc/testsuite/g++.old-deja/g++.brendan/parse4.C 3249609747b ./gcc/testsuite/g++.old-deja/g++.brendan/parse5.C 3147672451b ./gcc/testsuite/g++.old-deja/g++.brendan/parse6.C --- 7902,7908 ---- 3089598546b ./gcc/testsuite/g++.old-deja/g++.brendan/overload9.C 3352057260b ./gcc/testsuite/g++.old-deja/g++.brendan/parse1.C 3784585361b ./gcc/testsuite/g++.old-deja/g++.brendan/parse2.C ! 3312018900b ./gcc/testsuite/g++.old-deja/g++.brendan/parse3.C 2326400572b ./gcc/testsuite/g++.old-deja/g++.brendan/parse4.C 3249609747b ./gcc/testsuite/g++.old-deja/g++.brendan/parse5.C 3147672451b ./gcc/testsuite/g++.old-deja/g++.brendan/parse6.C *************** *** 4348,4354 **** 517567456b ./gcc/testsuite/g++.old-deja/g++.brendan/template8.C 1644370694b ./gcc/testsuite/g++.old-deja/g++.brendan/temporary1.C 2369869850b ./gcc/testsuite/g++.old-deja/g++.brendan/typedef1.C ! 2735505257b ./gcc/testsuite/g++.old-deja/g++.brendan/union1.C 823018336b ./gcc/testsuite/g++.old-deja/g++.brendan/union2.C 2620564840b ./gcc/testsuite/g++.old-deja/g++.brendan/union3.C 1914281947b ./gcc/testsuite/g++.old-deja/g++.brendan/visibility10.C --- 7969,7975 ---- 517567456b ./gcc/testsuite/g++.old-deja/g++.brendan/template8.C 1644370694b ./gcc/testsuite/g++.old-deja/g++.brendan/temporary1.C 2369869850b ./gcc/testsuite/g++.old-deja/g++.brendan/typedef1.C ! 2846047998b ./gcc/testsuite/g++.old-deja/g++.brendan/union1.C 823018336b ./gcc/testsuite/g++.old-deja/g++.brendan/union2.C 2620564840b ./gcc/testsuite/g++.old-deja/g++.brendan/union3.C 1914281947b ./gcc/testsuite/g++.old-deja/g++.brendan/visibility10.C *************** *** 4382,4388 **** 1991520903b ./gcc/testsuite/g++.old-deja/g++.bugs/900127_01.C 2330321470b ./gcc/testsuite/g++.old-deja/g++.bugs/900127_02.C 3489166192b ./gcc/testsuite/g++.old-deja/g++.bugs/900205_02.C ! 92613813b ./gcc/testsuite/g++.old-deja/g++.bugs/900205_03.C 1813191232b ./gcc/testsuite/g++.old-deja/g++.bugs/900205_04.C 2807062312b ./gcc/testsuite/g++.old-deja/g++.bugs/900207_03.C 1397162767b ./gcc/testsuite/g++.old-deja/g++.bugs/900208_02.C --- 8003,8009 ---- 1991520903b ./gcc/testsuite/g++.old-deja/g++.bugs/900127_01.C 2330321470b ./gcc/testsuite/g++.old-deja/g++.bugs/900127_02.C 3489166192b ./gcc/testsuite/g++.old-deja/g++.bugs/900205_02.C ! 3457661037b ./gcc/testsuite/g++.old-deja/g++.bugs/900205_03.C 1813191232b ./gcc/testsuite/g++.old-deja/g++.bugs/900205_04.C 2807062312b ./gcc/testsuite/g++.old-deja/g++.bugs/900207_03.C 1397162767b ./gcc/testsuite/g++.old-deja/g++.bugs/900208_02.C *************** *** 4415,4421 **** 3910347278b ./gcc/testsuite/g++.old-deja/g++.bugs/900220_02.C 4252298896b ./gcc/testsuite/g++.old-deja/g++.bugs/900220_03.C 1290432832b ./gcc/testsuite/g++.old-deja/g++.bugs/900221_01.C ! 2092940311b ./gcc/testsuite/g++.old-deja/g++.bugs/900227_01.C 1984786856b ./gcc/testsuite/g++.old-deja/g++.bugs/900321_01.C 3263132139b ./gcc/testsuite/g++.old-deja/g++.bugs/900321_02.C 3726833614b ./gcc/testsuite/g++.old-deja/g++.bugs/900321_04.C --- 8036,8042 ---- 3910347278b ./gcc/testsuite/g++.old-deja/g++.bugs/900220_02.C 4252298896b ./gcc/testsuite/g++.old-deja/g++.bugs/900220_03.C 1290432832b ./gcc/testsuite/g++.old-deja/g++.bugs/900221_01.C ! 1900361967b ./gcc/testsuite/g++.old-deja/g++.bugs/900227_01.C 1984786856b ./gcc/testsuite/g++.old-deja/g++.bugs/900321_01.C 3263132139b ./gcc/testsuite/g++.old-deja/g++.bugs/900321_02.C 3726833614b ./gcc/testsuite/g++.old-deja/g++.bugs/900321_04.C *************** *** 4468,4474 **** 3373505469b ./gcc/testsuite/g++.old-deja/g++.bugs/900520_04.C 1381261051b ./gcc/testsuite/g++.old-deja/g++.bugs/900520_05.C 3515041132b ./gcc/testsuite/g++.old-deja/g++.bugs/900520_06.C ! 1773583073b ./gcc/testsuite/g++.old-deja/g++.eh/badalloc1.C 3799957377b ./gcc/testsuite/g++.old-deja/g++.eh/catch10.C 2291520496b ./gcc/testsuite/g++.old-deja/g++.eh/catch11.C 3311967999b ./gcc/testsuite/g++.old-deja/g++.eh/catch12.C --- 8089,8095 ---- 3373505469b ./gcc/testsuite/g++.old-deja/g++.bugs/900520_04.C 1381261051b ./gcc/testsuite/g++.old-deja/g++.bugs/900520_05.C 3515041132b ./gcc/testsuite/g++.old-deja/g++.bugs/900520_06.C ! 1287054743b ./gcc/testsuite/g++.old-deja/g++.eh/badalloc1.C 3799957377b ./gcc/testsuite/g++.old-deja/g++.eh/catch10.C 2291520496b ./gcc/testsuite/g++.old-deja/g++.eh/catch11.C 3311967999b ./gcc/testsuite/g++.old-deja/g++.eh/catch12.C *************** *** 4490,4496 **** 1196849462b ./gcc/testsuite/g++.old-deja/g++.eh/catch8p.C 1548291979b ./gcc/testsuite/g++.old-deja/g++.eh/catch9.C 2807268437b ./gcc/testsuite/g++.old-deja/g++.eh/catch9p.C ! 2791567256b ./gcc/testsuite/g++.old-deja/g++.eh/catchptr1.C 3391348266b ./gcc/testsuite/g++.old-deja/g++.eh/cleanup1.C 2075767168b ./gcc/testsuite/g++.old-deja/g++.eh/cleanup2.C 4233648694b ./gcc/testsuite/g++.old-deja/g++.eh/cond1.C --- 8111,8117 ---- 1196849462b ./gcc/testsuite/g++.old-deja/g++.eh/catch8p.C 1548291979b ./gcc/testsuite/g++.old-deja/g++.eh/catch9.C 2807268437b ./gcc/testsuite/g++.old-deja/g++.eh/catch9p.C ! 1011765156b ./gcc/testsuite/g++.old-deja/g++.eh/catchptr1.C 3391348266b ./gcc/testsuite/g++.old-deja/g++.eh/cleanup1.C 2075767168b ./gcc/testsuite/g++.old-deja/g++.eh/cleanup2.C 4233648694b ./gcc/testsuite/g++.old-deja/g++.eh/cond1.C *************** *** 4501,4514 **** 3254817681b ./gcc/testsuite/g++.old-deja/g++.eh/crash5.C 2429027833b ./gcc/testsuite/g++.old-deja/g++.eh/crash6.C 633960827b ./gcc/testsuite/g++.old-deja/g++.eh/ctor1.C ! 3927012113b ./gcc/testsuite/g++.old-deja/g++.eh/flow1.C 735112314b ./gcc/testsuite/g++.old-deja/g++.eh/fntry1.C 676523103b ./gcc/testsuite/g++.old-deja/g++.eh/inline1.C 3790493474b ./gcc/testsuite/g++.old-deja/g++.eh/new1.C 535130965b ./gcc/testsuite/g++.old-deja/g++.eh/new2.C 3634137795b ./gcc/testsuite/g++.old-deja/g++.eh/pdel1.C 2137801791b ./gcc/testsuite/g++.old-deja/g++.eh/pdel2.C 281186416b ./gcc/testsuite/g++.old-deja/g++.eh/ptr1.C 1768169036b ./gcc/testsuite/g++.old-deja/g++.eh/rethrow1.C 2742043120b ./gcc/testsuite/g++.old-deja/g++.eh/rethrow2.C 797701813b ./gcc/testsuite/g++.old-deja/g++.eh/rethrow3.C --- 8122,8138 ---- 3254817681b ./gcc/testsuite/g++.old-deja/g++.eh/crash5.C 2429027833b ./gcc/testsuite/g++.old-deja/g++.eh/crash6.C 633960827b ./gcc/testsuite/g++.old-deja/g++.eh/ctor1.C ! 2442750901b ./gcc/testsuite/g++.old-deja/g++.eh/flow1.C 735112314b ./gcc/testsuite/g++.old-deja/g++.eh/fntry1.C + 2322235726b ./gcc/testsuite/g++.old-deja/g++.eh/ia64-1.C 676523103b ./gcc/testsuite/g++.old-deja/g++.eh/inline1.C + 1365103519b ./gcc/testsuite/g++.old-deja/g++.eh/inline2.C 3790493474b ./gcc/testsuite/g++.old-deja/g++.eh/new1.C 535130965b ./gcc/testsuite/g++.old-deja/g++.eh/new2.C 3634137795b ./gcc/testsuite/g++.old-deja/g++.eh/pdel1.C 2137801791b ./gcc/testsuite/g++.old-deja/g++.eh/pdel2.C 281186416b ./gcc/testsuite/g++.old-deja/g++.eh/ptr1.C + 576857198b ./gcc/testsuite/g++.old-deja/g++.eh/ptrmem1.C 1768169036b ./gcc/testsuite/g++.old-deja/g++.eh/rethrow1.C 2742043120b ./gcc/testsuite/g++.old-deja/g++.eh/rethrow2.C 797701813b ./gcc/testsuite/g++.old-deja/g++.eh/rethrow3.C *************** *** 4522,4527 **** --- 8146,8153 ---- 3529701833b ./gcc/testsuite/g++.old-deja/g++.eh/spec5.C 3545946102b ./gcc/testsuite/g++.old-deja/g++.eh/spec6.C 3657524244b ./gcc/testsuite/g++.old-deja/g++.eh/spec7.C + 1957276023b ./gcc/testsuite/g++.old-deja/g++.eh/terminate1.C + 2882522407b ./gcc/testsuite/g++.old-deja/g++.eh/terminate2.C 2244717b ./gcc/testsuite/g++.old-deja/g++.eh/throw1.C 67637737b ./gcc/testsuite/g++.old-deja/g++.eh/throw2.C 2714145986b ./gcc/testsuite/g++.old-deja/g++.eh/tmpl1.C *************** *** 4530,4536 **** 2285781015b ./gcc/testsuite/g++.old-deja/g++.eh/tmpl4.C 3757999789b ./gcc/testsuite/g++.old-deja/g++.eh/tmpl5.C 2082523657b ./gcc/testsuite/g++.old-deja/g++.eh/tmpl6.C ! 718465415b ./gcc/testsuite/g++.old-deja/g++.eh/unwind1.C 4087820734b ./gcc/testsuite/g++.old-deja/g++.eh/vbase1.C 7954090b ./gcc/testsuite/g++.old-deja/g++.eh/vbase2.C 597975959b ./gcc/testsuite/g++.old-deja/g++.eh/vbase3.C --- 8156,8162 ---- 2285781015b ./gcc/testsuite/g++.old-deja/g++.eh/tmpl4.C 3757999789b ./gcc/testsuite/g++.old-deja/g++.eh/tmpl5.C 2082523657b ./gcc/testsuite/g++.old-deja/g++.eh/tmpl6.C ! 1395348093b ./gcc/testsuite/g++.old-deja/g++.eh/unwind1.C 4087820734b ./gcc/testsuite/g++.old-deja/g++.eh/vbase1.C 7954090b ./gcc/testsuite/g++.old-deja/g++.eh/vbase2.C 597975959b ./gcc/testsuite/g++.old-deja/g++.eh/vbase3.C *************** *** 4538,4544 **** 4199943262b ./gcc/testsuite/g++.old-deja/g++.ext/addrfunc1.C 159934505b ./gcc/testsuite/g++.old-deja/g++.ext/addrfunc2.C 585898936b ./gcc/testsuite/g++.old-deja/g++.ext/addrfunc3.C ! 104957316b ./gcc/testsuite/g++.old-deja/g++.ext/addrfunc4.C 3380550287b ./gcc/testsuite/g++.old-deja/g++.ext/anon1.C 1974705038b ./gcc/testsuite/g++.old-deja/g++.ext/anon2.C 813082081b ./gcc/testsuite/g++.old-deja/g++.ext/anon3.C --- 8164,8170 ---- 4199943262b ./gcc/testsuite/g++.old-deja/g++.ext/addrfunc1.C 159934505b ./gcc/testsuite/g++.old-deja/g++.ext/addrfunc2.C 585898936b ./gcc/testsuite/g++.old-deja/g++.ext/addrfunc3.C ! 2984020525b ./gcc/testsuite/g++.old-deja/g++.ext/addrfunc4.C 3380550287b ./gcc/testsuite/g++.old-deja/g++.ext/anon1.C 1974705038b ./gcc/testsuite/g++.old-deja/g++.ext/anon2.C 813082081b ./gcc/testsuite/g++.old-deja/g++.ext/anon3.C *************** *** 4553,4567 **** 3350275577b ./gcc/testsuite/g++.old-deja/g++.ext/attrib2.C 1053733436b ./gcc/testsuite/g++.old-deja/g++.ext/attrib3.C 1626467181b ./gcc/testsuite/g++.old-deja/g++.ext/attrib4.C ! 2710709841b ./gcc/testsuite/g++.old-deja/g++.ext/attrib5.C 1172027159b ./gcc/testsuite/g++.old-deja/g++.ext/bound1.C - 4067976377b ./gcc/testsuite/g++.old-deja/g++.ext/comint1.C 2395600799b ./gcc/testsuite/g++.old-deja/g++.ext/constructor.C 2324105514b ./gcc/testsuite/g++.old-deja/g++.ext/default.C 3043261002b ./gcc/testsuite/g++.old-deja/g++.ext/delvoid.C - 4137741371b ./gcc/testsuite/g++.old-deja/g++.ext/instantiate1.C - 3435280734b ./gcc/testsuite/g++.old-deja/g++.ext/instantiate2.C - 4049320186b ./gcc/testsuite/g++.old-deja/g++.ext/instantiate3.C 1220140779b ./gcc/testsuite/g++.old-deja/g++.ext/jump1.C 3122237559b ./gcc/testsuite/g++.old-deja/g++.ext/label1.C 1955233630b ./gcc/testsuite/g++.old-deja/g++.ext/label2.C --- 8179,8190 ---- 3350275577b ./gcc/testsuite/g++.old-deja/g++.ext/attrib2.C 1053733436b ./gcc/testsuite/g++.old-deja/g++.ext/attrib3.C 1626467181b ./gcc/testsuite/g++.old-deja/g++.ext/attrib4.C ! 3199258020b ./gcc/testsuite/g++.old-deja/g++.ext/attrib5.C ! 1231673353b ./gcc/testsuite/g++.old-deja/g++.ext/attrib6.C 1172027159b ./gcc/testsuite/g++.old-deja/g++.ext/bound1.C 2395600799b ./gcc/testsuite/g++.old-deja/g++.ext/constructor.C 2324105514b ./gcc/testsuite/g++.old-deja/g++.ext/default.C 3043261002b ./gcc/testsuite/g++.old-deja/g++.ext/delvoid.C 1220140779b ./gcc/testsuite/g++.old-deja/g++.ext/jump1.C 3122237559b ./gcc/testsuite/g++.old-deja/g++.ext/label1.C 1955233630b ./gcc/testsuite/g++.old-deja/g++.ext/label2.C *************** *** 4569,4587 **** 3051345065b ./gcc/testsuite/g++.old-deja/g++.ext/namedret1.C 1721594512b ./gcc/testsuite/g++.old-deja/g++.ext/namedret2.C 1693910821b ./gcc/testsuite/g++.old-deja/g++.ext/namedret3.C 1485906792b ./gcc/testsuite/g++.old-deja/g++.ext/null1.C 1534627522b ./gcc/testsuite/g++.old-deja/g++.ext/overload1.C 2789279145b ./gcc/testsuite/g++.old-deja/g++.ext/pretty2.C 1721106953b ./gcc/testsuite/g++.old-deja/g++.ext/pretty3.C 2283773682b ./gcc/testsuite/g++.old-deja/g++.ext/pretty4.C 2953041955b ./gcc/testsuite/g++.old-deja/g++.ext/pretty.C - 2322469082b ./gcc/testsuite/g++.old-deja/g++.ext/realpt1.C 1326958568b ./gcc/testsuite/g++.old-deja/g++.ext/restrict1.C 1853972109b ./gcc/testsuite/g++.old-deja/g++.ext/return1.C 463327965b ./gcc/testsuite/g++.old-deja/g++.ext/stmtexpr1.C 3353267413b ./gcc/testsuite/g++.old-deja/g++.ext/syshdr1.C 1434079824b ./gcc/testsuite/g++.old-deja/g++.ext/typename1.C 3055500151b ./gcc/testsuite/g++.old-deja/g++.ext/typeof1.C 122985883b ./gcc/testsuite/g++.old-deja/g++.gb/README 3834907847b ./gcc/testsuite/g++.old-deja/g++.gb/scope01.C 2804649369b ./gcc/testsuite/g++.old-deja/g++.gb/scope02.C --- 8192,8211 ---- 3051345065b ./gcc/testsuite/g++.old-deja/g++.ext/namedret1.C 1721594512b ./gcc/testsuite/g++.old-deja/g++.ext/namedret2.C 1693910821b ./gcc/testsuite/g++.old-deja/g++.ext/namedret3.C + 4236509390b ./gcc/testsuite/g++.old-deja/g++.ext/noweak1.C 1485906792b ./gcc/testsuite/g++.old-deja/g++.ext/null1.C 1534627522b ./gcc/testsuite/g++.old-deja/g++.ext/overload1.C 2789279145b ./gcc/testsuite/g++.old-deja/g++.ext/pretty2.C 1721106953b ./gcc/testsuite/g++.old-deja/g++.ext/pretty3.C 2283773682b ./gcc/testsuite/g++.old-deja/g++.ext/pretty4.C 2953041955b ./gcc/testsuite/g++.old-deja/g++.ext/pretty.C 1326958568b ./gcc/testsuite/g++.old-deja/g++.ext/restrict1.C 1853972109b ./gcc/testsuite/g++.old-deja/g++.ext/return1.C 463327965b ./gcc/testsuite/g++.old-deja/g++.ext/stmtexpr1.C 3353267413b ./gcc/testsuite/g++.old-deja/g++.ext/syshdr1.C 1434079824b ./gcc/testsuite/g++.old-deja/g++.ext/typename1.C 3055500151b ./gcc/testsuite/g++.old-deja/g++.ext/typeof1.C + 3482525745b ./gcc/testsuite/g++.old-deja/g++.ext/typeof2.C 122985883b ./gcc/testsuite/g++.old-deja/g++.gb/README 3834907847b ./gcc/testsuite/g++.old-deja/g++.gb/scope01.C 2804649369b ./gcc/testsuite/g++.old-deja/g++.gb/scope02.C *************** *** 4596,4602 **** 2330909859b ./gcc/testsuite/g++.old-deja/g++.gb/scope11.C 3275516446b ./gcc/testsuite/g++.old-deja/g++.gb/scope12.C 732967750b ./gcc/testsuite/g++.old-deja/g++.gb/scope13.C ! 843332171b ./gcc/testsuite/g++.old-deja/g++.jason/2371.C 3968774299b ./gcc/testsuite/g++.old-deja/g++.jason/3523.C 1546884424b ./gcc/testsuite/g++.old-deja/g++.jason/access10.C 739404807b ./gcc/testsuite/g++.old-deja/g++.jason/access11.C --- 8220,8226 ---- 2330909859b ./gcc/testsuite/g++.old-deja/g++.gb/scope11.C 3275516446b ./gcc/testsuite/g++.old-deja/g++.gb/scope12.C 732967750b ./gcc/testsuite/g++.old-deja/g++.gb/scope13.C ! 939161176b ./gcc/testsuite/g++.old-deja/g++.jason/2371.C 3968774299b ./gcc/testsuite/g++.old-deja/g++.jason/3523.C 1546884424b ./gcc/testsuite/g++.old-deja/g++.jason/access10.C 739404807b ./gcc/testsuite/g++.old-deja/g++.jason/access11.C *************** *** 4626,4632 **** 2153743197b ./gcc/testsuite/g++.old-deja/g++.jason/ambig2.C 970394079b ./gcc/testsuite/g++.old-deja/g++.jason/ambig3.C 3198278705b ./gcc/testsuite/g++.old-deja/g++.jason/anon2.C ! 312286241b ./gcc/testsuite/g++.old-deja/g++.jason/anon3.C 1050500875b ./gcc/testsuite/g++.old-deja/g++.jason/anon4.C 3828622053b ./gcc/testsuite/g++.old-deja/g++.jason/anon.C 1263298999b ./gcc/testsuite/g++.old-deja/g++.jason/binding2.C --- 8250,8256 ---- 2153743197b ./gcc/testsuite/g++.old-deja/g++.jason/ambig2.C 970394079b ./gcc/testsuite/g++.old-deja/g++.jason/ambig3.C 3198278705b ./gcc/testsuite/g++.old-deja/g++.jason/anon2.C ! 221090634b ./gcc/testsuite/g++.old-deja/g++.jason/anon3.C 1050500875b ./gcc/testsuite/g++.old-deja/g++.jason/anon4.C 3828622053b ./gcc/testsuite/g++.old-deja/g++.jason/anon.C 1263298999b ./gcc/testsuite/g++.old-deja/g++.jason/binding2.C *************** *** 4641,4647 **** 876810594b ./gcc/testsuite/g++.old-deja/g++.jason/bool.C 910455504b ./gcc/testsuite/g++.old-deja/g++.jason/builtin2.C 1992610065b ./gcc/testsuite/g++.old-deja/g++.jason/builtin.C ! 1462484324b ./gcc/testsuite/g++.old-deja/g++.jason/byval2.C 3007011667b ./gcc/testsuite/g++.old-deja/g++.jason/byval3.C 2992950563b ./gcc/testsuite/g++.old-deja/g++.jason/byval.C 4208843404b ./gcc/testsuite/g++.old-deja/g++.jason/cast1.C --- 8265,8271 ---- 876810594b ./gcc/testsuite/g++.old-deja/g++.jason/bool.C 910455504b ./gcc/testsuite/g++.old-deja/g++.jason/builtin2.C 1992610065b ./gcc/testsuite/g++.old-deja/g++.jason/builtin.C ! 3965054847b ./gcc/testsuite/g++.old-deja/g++.jason/byval2.C 3007011667b ./gcc/testsuite/g++.old-deja/g++.jason/byval3.C 2992950563b ./gcc/testsuite/g++.old-deja/g++.jason/byval.C 4208843404b ./gcc/testsuite/g++.old-deja/g++.jason/cast1.C *************** *** 4857,4863 **** 3285486142b ./gcc/testsuite/g++.old-deja/g++.jason/ref7.C 1357591997b ./gcc/testsuite/g++.old-deja/g++.jason/ref8.C 1262470243b ./gcc/testsuite/g++.old-deja/g++.jason/ref9.C ! 2072399181b ./gcc/testsuite/g++.old-deja/g++.jason/report.C 1302488236b ./gcc/testsuite/g++.old-deja/g++.jason/return2.C 1422012899b ./gcc/testsuite/g++.old-deja/g++.jason/return3.C 2084961742b ./gcc/testsuite/g++.old-deja/g++.jason/return.C --- 8481,8487 ---- 3285486142b ./gcc/testsuite/g++.old-deja/g++.jason/ref7.C 1357591997b ./gcc/testsuite/g++.old-deja/g++.jason/ref8.C 1262470243b ./gcc/testsuite/g++.old-deja/g++.jason/ref9.C ! 2679324150b ./gcc/testsuite/g++.old-deja/g++.jason/report.C 1302488236b ./gcc/testsuite/g++.old-deja/g++.jason/return2.C 1422012899b ./gcc/testsuite/g++.old-deja/g++.jason/return3.C 2084961742b ./gcc/testsuite/g++.old-deja/g++.jason/return.C *************** *** 4932,4938 **** 1159298863b ./gcc/testsuite/g++.old-deja/g++.jason/template15.C 2954276864b ./gcc/testsuite/g++.old-deja/g++.jason/template16.C 1681885743b ./gcc/testsuite/g++.old-deja/g++.jason/template17.C ! 3868296403b ./gcc/testsuite/g++.old-deja/g++.jason/template18.C 3406115895b ./gcc/testsuite/g++.old-deja/g++.jason/template19.C 3635346741b ./gcc/testsuite/g++.old-deja/g++.jason/template1.C 3294085147b ./gcc/testsuite/g++.old-deja/g++.jason/template20.C --- 8556,8562 ---- 1159298863b ./gcc/testsuite/g++.old-deja/g++.jason/template15.C 2954276864b ./gcc/testsuite/g++.old-deja/g++.jason/template16.C 1681885743b ./gcc/testsuite/g++.old-deja/g++.jason/template17.C ! 885790390b ./gcc/testsuite/g++.old-deja/g++.jason/template18.C 3406115895b ./gcc/testsuite/g++.old-deja/g++.jason/template19.C 3635346741b ./gcc/testsuite/g++.old-deja/g++.jason/template1.C 3294085147b ./gcc/testsuite/g++.old-deja/g++.jason/template20.C *************** *** 4947,4958 **** 3438625432b ./gcc/testsuite/g++.old-deja/g++.jason/template29.C 43030923b ./gcc/testsuite/g++.old-deja/g++.jason/template2.C 2310025160b ./gcc/testsuite/g++.old-deja/g++.jason/template30.C ! 1246458185b ./gcc/testsuite/g++.old-deja/g++.jason/template31.C 987062964b ./gcc/testsuite/g++.old-deja/g++.jason/template32.C ! 2285089512b ./gcc/testsuite/g++.old-deja/g++.jason/template33.C ! 2869807634b ./gcc/testsuite/g++.old-deja/g++.jason/template34.C 3189860272b ./gcc/testsuite/g++.old-deja/g++.jason/template35.C ! 305472920b ./gcc/testsuite/g++.old-deja/g++.jason/template36.C 2952351972b ./gcc/testsuite/g++.old-deja/g++.jason/template37.C 1653595335b ./gcc/testsuite/g++.old-deja/g++.jason/template39.C 2243617030b ./gcc/testsuite/g++.old-deja/g++.jason/template3.C --- 8571,8582 ---- 3438625432b ./gcc/testsuite/g++.old-deja/g++.jason/template29.C 43030923b ./gcc/testsuite/g++.old-deja/g++.jason/template2.C 2310025160b ./gcc/testsuite/g++.old-deja/g++.jason/template30.C ! 3335790712b ./gcc/testsuite/g++.old-deja/g++.jason/template31.C 987062964b ./gcc/testsuite/g++.old-deja/g++.jason/template32.C ! 1904333349b ./gcc/testsuite/g++.old-deja/g++.jason/template33.C ! 2135579206b ./gcc/testsuite/g++.old-deja/g++.jason/template34.C 3189860272b ./gcc/testsuite/g++.old-deja/g++.jason/template35.C ! 805289702b ./gcc/testsuite/g++.old-deja/g++.jason/template36.C 2952351972b ./gcc/testsuite/g++.old-deja/g++.jason/template37.C 1653595335b ./gcc/testsuite/g++.old-deja/g++.jason/template39.C 2243617030b ./gcc/testsuite/g++.old-deja/g++.jason/template3.C *************** *** 4979,4987 **** 2151541644b ./gcc/testsuite/g++.old-deja/g++.jason/tempparse.C 2779254633b ./gcc/testsuite/g++.old-deja/g++.jason/tempsub.C 853323087b ./gcc/testsuite/g++.old-deja/g++.jason/this.C ! 1451508504b ./gcc/testsuite/g++.old-deja/g++.jason/thunk1.C ! 2589478777b ./gcc/testsuite/g++.old-deja/g++.jason/thunk2.C ! 3712455924b ./gcc/testsuite/g++.old-deja/g++.jason/thunk3.C 2448025143b ./gcc/testsuite/g++.old-deja/g++.jason/tredecl2.C 3072514699b ./gcc/testsuite/g++.old-deja/g++.jason/tredecl3.C 979924921b ./gcc/testsuite/g++.old-deja/g++.jason/tredecl4.C --- 8603,8611 ---- 2151541644b ./gcc/testsuite/g++.old-deja/g++.jason/tempparse.C 2779254633b ./gcc/testsuite/g++.old-deja/g++.jason/tempsub.C 853323087b ./gcc/testsuite/g++.old-deja/g++.jason/this.C ! 4280002449b ./gcc/testsuite/g++.old-deja/g++.jason/thunk1.C ! 274835885b ./gcc/testsuite/g++.old-deja/g++.jason/thunk2.C ! 1347779987b ./gcc/testsuite/g++.old-deja/g++.jason/thunk3.C 2448025143b ./gcc/testsuite/g++.old-deja/g++.jason/tredecl2.C 3072514699b ./gcc/testsuite/g++.old-deja/g++.jason/tredecl3.C 979924921b ./gcc/testsuite/g++.old-deja/g++.jason/tredecl4.C *************** *** 4999,5005 **** 3907710929b ./gcc/testsuite/g++.old-deja/g++.jason/virtual.C 628732210b ./gcc/testsuite/g++.old-deja/g++.jason/warning10.C 230540000b ./gcc/testsuite/g++.old-deja/g++.jason/warning1.C ! 1344686660b ./gcc/testsuite/g++.old-deja/g++.jason/warning2.C 1528338319b ./gcc/testsuite/g++.old-deja/g++.jason/warning3.C 4233202460b ./gcc/testsuite/g++.old-deja/g++.jason/warning4.C 2344004192b ./gcc/testsuite/g++.old-deja/g++.jason/warning5.C --- 8623,8629 ---- 3907710929b ./gcc/testsuite/g++.old-deja/g++.jason/virtual.C 628732210b ./gcc/testsuite/g++.old-deja/g++.jason/warning10.C 230540000b ./gcc/testsuite/g++.old-deja/g++.jason/warning1.C ! 4258001283b ./gcc/testsuite/g++.old-deja/g++.jason/warning2.C 1528338319b ./gcc/testsuite/g++.old-deja/g++.jason/warning3.C 4233202460b ./gcc/testsuite/g++.old-deja/g++.jason/warning4.C 2344004192b ./gcc/testsuite/g++.old-deja/g++.jason/warning5.C *************** *** 5047,5053 **** 3420787868b ./gcc/testsuite/g++.old-deja/g++.law/bad-error6.C 3619362891b ./gcc/testsuite/g++.old-deja/g++.law/bad-error7.C 3180589913b ./gcc/testsuite/g++.old-deja/g++.law/bit-fields1.C ! 432045834b ./gcc/testsuite/g++.old-deja/g++.law/bit-fields2.C 2693195990b ./gcc/testsuite/g++.old-deja/g++.law/bit-fields3.C 2084814101b ./gcc/testsuite/g++.old-deja/g++.law/builtin1.C 282097136b ./gcc/testsuite/g++.old-deja/g++.law/casts1.C --- 8671,8677 ---- 3420787868b ./gcc/testsuite/g++.old-deja/g++.law/bad-error6.C 3619362891b ./gcc/testsuite/g++.old-deja/g++.law/bad-error7.C 3180589913b ./gcc/testsuite/g++.old-deja/g++.law/bit-fields1.C ! 987706110b ./gcc/testsuite/g++.old-deja/g++.law/bit-fields2.C 2693195990b ./gcc/testsuite/g++.old-deja/g++.law/bit-fields3.C 2084814101b ./gcc/testsuite/g++.old-deja/g++.law/builtin1.C 282097136b ./gcc/testsuite/g++.old-deja/g++.law/casts1.C *************** *** 5059,5067 **** 1581356732b ./gcc/testsuite/g++.old-deja/g++.law/code-gen5.C 3634037248b ./gcc/testsuite/g++.old-deja/g++.law/copy1.C 1559838734b ./gcc/testsuite/g++.old-deja/g++.law/copy2.C ! 2041542590b ./gcc/testsuite/g++.old-deja/g++.law/ctors10.C 3669003858b ./gcc/testsuite/g++.old-deja/g++.law/ctors11.C ! 363327373b ./gcc/testsuite/g++.old-deja/g++.law/ctors12.C 2682605352b ./gcc/testsuite/g++.old-deja/g++.law/ctors13.C 2981100605b ./gcc/testsuite/g++.old-deja/g++.law/ctors14.C 2355681221b ./gcc/testsuite/g++.old-deja/g++.law/ctors15.C --- 8683,8691 ---- 1581356732b ./gcc/testsuite/g++.old-deja/g++.law/code-gen5.C 3634037248b ./gcc/testsuite/g++.old-deja/g++.law/copy1.C 1559838734b ./gcc/testsuite/g++.old-deja/g++.law/copy2.C ! 2824193941b ./gcc/testsuite/g++.old-deja/g++.law/ctors10.C 3669003858b ./gcc/testsuite/g++.old-deja/g++.law/ctors11.C ! 162342663b ./gcc/testsuite/g++.old-deja/g++.law/ctors12.C 2682605352b ./gcc/testsuite/g++.old-deja/g++.law/ctors13.C 2981100605b ./gcc/testsuite/g++.old-deja/g++.law/ctors14.C 2355681221b ./gcc/testsuite/g++.old-deja/g++.law/ctors15.C *************** *** 5100,5106 **** 1937028645b ./gcc/testsuite/g++.old-deja/g++.law/cvt4.C 2149948272b ./gcc/testsuite/g++.old-deja/g++.law/cvt5.C 1375863901b ./gcc/testsuite/g++.old-deja/g++.law/cvt6.C ! 1268590000b ./gcc/testsuite/g++.old-deja/g++.law/cvt7.C 4106332146b ./gcc/testsuite/g++.old-deja/g++.law/cvt8.C 3074219571b ./gcc/testsuite/g++.old-deja/g++.law/cvt9.C 3892359310b ./gcc/testsuite/g++.old-deja/g++.law/dossier1.C --- 8724,8730 ---- 1937028645b ./gcc/testsuite/g++.old-deja/g++.law/cvt4.C 2149948272b ./gcc/testsuite/g++.old-deja/g++.law/cvt5.C 1375863901b ./gcc/testsuite/g++.old-deja/g++.law/cvt6.C ! 2338585473b ./gcc/testsuite/g++.old-deja/g++.law/cvt7.C 4106332146b ./gcc/testsuite/g++.old-deja/g++.law/cvt8.C 3074219571b ./gcc/testsuite/g++.old-deja/g++.law/cvt9.C 3892359310b ./gcc/testsuite/g++.old-deja/g++.law/dossier1.C *************** *** 5162,5168 **** 723011663b ./gcc/testsuite/g++.old-deja/g++.law/operators14.C 3803866684b ./gcc/testsuite/g++.old-deja/g++.law/operators15.C 2547646465b ./gcc/testsuite/g++.old-deja/g++.law/operators16.C ! 2137362951b ./gcc/testsuite/g++.old-deja/g++.law/operators17.C 1796063085b ./gcc/testsuite/g++.old-deja/g++.law/operators18.C 909424019b ./gcc/testsuite/g++.old-deja/g++.law/operators19.C 799876233b ./gcc/testsuite/g++.old-deja/g++.law/operators21.C --- 8786,8792 ---- 723011663b ./gcc/testsuite/g++.old-deja/g++.law/operators14.C 3803866684b ./gcc/testsuite/g++.old-deja/g++.law/operators15.C 2547646465b ./gcc/testsuite/g++.old-deja/g++.law/operators16.C ! 367329317b ./gcc/testsuite/g++.old-deja/g++.law/operators17.C 1796063085b ./gcc/testsuite/g++.old-deja/g++.law/operators18.C 909424019b ./gcc/testsuite/g++.old-deja/g++.law/operators19.C 799876233b ./gcc/testsuite/g++.old-deja/g++.law/operators21.C *************** *** 5176,5182 **** 3492185823b ./gcc/testsuite/g++.old-deja/g++.law/operators2.C 936276361b ./gcc/testsuite/g++.old-deja/g++.law/operators30.C 1540784012b ./gcc/testsuite/g++.old-deja/g++.law/operators31.C ! 4127266219b ./gcc/testsuite/g++.old-deja/g++.law/operators32.C 1564136570b ./gcc/testsuite/g++.old-deja/g++.law/operators33.C 2258128088b ./gcc/testsuite/g++.old-deja/g++.law/operators34.C 578739979b ./gcc/testsuite/g++.old-deja/g++.law/operators3.C --- 8800,8806 ---- 3492185823b ./gcc/testsuite/g++.old-deja/g++.law/operators2.C 936276361b ./gcc/testsuite/g++.old-deja/g++.law/operators30.C 1540784012b ./gcc/testsuite/g++.old-deja/g++.law/operators31.C ! 1046500493b ./gcc/testsuite/g++.old-deja/g++.law/operators32.C 1564136570b ./gcc/testsuite/g++.old-deja/g++.law/operators33.C 2258128088b ./gcc/testsuite/g++.old-deja/g++.law/operators34.C 578739979b ./gcc/testsuite/g++.old-deja/g++.law/operators3.C *************** *** 5217,5223 **** 4284541b ./gcc/testsuite/g++.old-deja/g++.law/temps1.C 1612155730b ./gcc/testsuite/g++.old-deja/g++.law/temps2.C 1353434176b ./gcc/testsuite/g++.old-deja/g++.law/temps3.C ! 390462309b ./gcc/testsuite/g++.old-deja/g++.law/temps4.C 4070589019b ./gcc/testsuite/g++.old-deja/g++.law/temps5.C 3020683221b ./gcc/testsuite/g++.old-deja/g++.law/temps6.C 117460955b ./gcc/testsuite/g++.old-deja/g++.law/temps7.C --- 8841,8847 ---- 4284541b ./gcc/testsuite/g++.old-deja/g++.law/temps1.C 1612155730b ./gcc/testsuite/g++.old-deja/g++.law/temps2.C 1353434176b ./gcc/testsuite/g++.old-deja/g++.law/temps3.C ! 3401895101b ./gcc/testsuite/g++.old-deja/g++.law/temps4.C 4070589019b ./gcc/testsuite/g++.old-deja/g++.law/temps5.C 3020683221b ./gcc/testsuite/g++.old-deja/g++.law/temps6.C 117460955b ./gcc/testsuite/g++.old-deja/g++.law/temps7.C *************** *** 5249,5257 **** 62330698b ./gcc/testsuite/g++.old-deja/g++.law/visibility1.C 1427247483b ./gcc/testsuite/g++.old-deja/g++.law/visibility20.C 3793046825b ./gcc/testsuite/g++.old-deja/g++.law/visibility21.C ! 1936888134b ./gcc/testsuite/g++.old-deja/g++.law/visibility22.C 797044341b ./gcc/testsuite/g++.old-deja/g++.law/visibility24.C ! 4255415888b ./gcc/testsuite/g++.old-deja/g++.law/visibility25.C 322999725b ./gcc/testsuite/g++.old-deja/g++.law/visibility26.C 4190347231b ./gcc/testsuite/g++.old-deja/g++.law/visibility27.C 2911402499b ./gcc/testsuite/g++.old-deja/g++.law/visibility28.C --- 8873,8881 ---- 62330698b ./gcc/testsuite/g++.old-deja/g++.law/visibility1.C 1427247483b ./gcc/testsuite/g++.old-deja/g++.law/visibility20.C 3793046825b ./gcc/testsuite/g++.old-deja/g++.law/visibility21.C ! 271235804b ./gcc/testsuite/g++.old-deja/g++.law/visibility22.C 797044341b ./gcc/testsuite/g++.old-deja/g++.law/visibility24.C ! 3910738507b ./gcc/testsuite/g++.old-deja/g++.law/visibility25.C 322999725b ./gcc/testsuite/g++.old-deja/g++.law/visibility26.C 4190347231b ./gcc/testsuite/g++.old-deja/g++.law/visibility27.C 2911402499b ./gcc/testsuite/g++.old-deja/g++.law/visibility28.C *************** *** 5329,5335 **** 19764474b ./gcc/testsuite/g++.old-deja/g++.mike/eh30.C 2656014861b ./gcc/testsuite/g++.old-deja/g++.mike/eh31.C 3196832667b ./gcc/testsuite/g++.old-deja/g++.mike/eh32.C ! 307331323b ./gcc/testsuite/g++.old-deja/g++.mike/eh33.C 503529587b ./gcc/testsuite/g++.old-deja/g++.mike/eh34.C 3352893098b ./gcc/testsuite/g++.old-deja/g++.mike/eh35.C 647929045b ./gcc/testsuite/g++.old-deja/g++.mike/eh36.C --- 8953,8959 ---- 19764474b ./gcc/testsuite/g++.old-deja/g++.mike/eh30.C 2656014861b ./gcc/testsuite/g++.old-deja/g++.mike/eh31.C 3196832667b ./gcc/testsuite/g++.old-deja/g++.mike/eh32.C ! 66552972b ./gcc/testsuite/g++.old-deja/g++.mike/eh33.C 503529587b ./gcc/testsuite/g++.old-deja/g++.mike/eh34.C 3352893098b ./gcc/testsuite/g++.old-deja/g++.mike/eh35.C 647929045b ./gcc/testsuite/g++.old-deja/g++.mike/eh36.C *************** *** 5347,5354 **** 3489458651b ./gcc/testsuite/g++.old-deja/g++.mike/eh48.C 836588330b ./gcc/testsuite/g++.old-deja/g++.mike/eh49.C 833195775b ./gcc/testsuite/g++.old-deja/g++.mike/eh4.C ! 2141282397b ./gcc/testsuite/g++.old-deja/g++.mike/eh50.C ! 2040905887b ./gcc/testsuite/g++.old-deja/g++.mike/eh51.C 359223272b ./gcc/testsuite/g++.old-deja/g++.mike/eh52.C 4025472676b ./gcc/testsuite/g++.old-deja/g++.mike/eh53.C 2118473425b ./gcc/testsuite/g++.old-deja/g++.mike/eh54.C --- 8971,8978 ---- 3489458651b ./gcc/testsuite/g++.old-deja/g++.mike/eh48.C 836588330b ./gcc/testsuite/g++.old-deja/g++.mike/eh49.C 833195775b ./gcc/testsuite/g++.old-deja/g++.mike/eh4.C ! 2022453553b ./gcc/testsuite/g++.old-deja/g++.mike/eh50.C ! 2472994932b ./gcc/testsuite/g++.old-deja/g++.mike/eh51.C 359223272b ./gcc/testsuite/g++.old-deja/g++.mike/eh52.C 4025472676b ./gcc/testsuite/g++.old-deja/g++.mike/eh53.C 2118473425b ./gcc/testsuite/g++.old-deja/g++.mike/eh54.C *************** *** 5370,5376 **** 3536764934b ./gcc/testsuite/g++.old-deja/g++.mike/explicit2.C 1026557390b ./gcc/testsuite/g++.old-deja/g++.mike/for1.C 2974641653b ./gcc/testsuite/g++.old-deja/g++.mike/for2.C ! 839567599b ./gcc/testsuite/g++.old-deja/g++.mike/for3.C 2404672898b ./gcc/testsuite/g++.old-deja/g++.mike/fresco1.C 3102490391b ./gcc/testsuite/g++.old-deja/g++.mike/hog1.C 2749462033b ./gcc/testsuite/g++.old-deja/g++.mike/init1.C --- 8994,9000 ---- 3536764934b ./gcc/testsuite/g++.old-deja/g++.mike/explicit2.C 1026557390b ./gcc/testsuite/g++.old-deja/g++.mike/for1.C 2974641653b ./gcc/testsuite/g++.old-deja/g++.mike/for2.C ! 2702017140b ./gcc/testsuite/g++.old-deja/g++.mike/for3.C 2404672898b ./gcc/testsuite/g++.old-deja/g++.mike/fresco1.C 3102490391b ./gcc/testsuite/g++.old-deja/g++.mike/hog1.C 2749462033b ./gcc/testsuite/g++.old-deja/g++.mike/init1.C *************** *** 5405,5411 **** 128141995b ./gcc/testsuite/g++.old-deja/g++.mike/net18.C 948890721b ./gcc/testsuite/g++.old-deja/g++.mike/net19.C 2700723029b ./gcc/testsuite/g++.old-deja/g++.mike/net1.C ! 3570531294b ./gcc/testsuite/g++.old-deja/g++.mike/net20.C 226565812b ./gcc/testsuite/g++.old-deja/g++.mike/net21.C 1728885921b ./gcc/testsuite/g++.old-deja/g++.mike/net22.C 4024678725b ./gcc/testsuite/g++.old-deja/g++.mike/net23.C --- 9029,9035 ---- 128141995b ./gcc/testsuite/g++.old-deja/g++.mike/net18.C 948890721b ./gcc/testsuite/g++.old-deja/g++.mike/net19.C 2700723029b ./gcc/testsuite/g++.old-deja/g++.mike/net1.C ! 4292061310b ./gcc/testsuite/g++.old-deja/g++.mike/net20.C 226565812b ./gcc/testsuite/g++.old-deja/g++.mike/net21.C 1728885921b ./gcc/testsuite/g++.old-deja/g++.mike/net22.C 4024678725b ./gcc/testsuite/g++.old-deja/g++.mike/net23.C *************** *** 5426,5437 **** 373469883b ./gcc/testsuite/g++.old-deja/g++.mike/net38.C 3771016947b ./gcc/testsuite/g++.old-deja/g++.mike/net39.C 2896773743b ./gcc/testsuite/g++.old-deja/g++.mike/net3.C ! 1728828234b ./gcc/testsuite/g++.old-deja/g++.mike/net40.C 2329906223b ./gcc/testsuite/g++.old-deja/g++.mike/net41.C 257842077b ./gcc/testsuite/g++.old-deja/g++.mike/net42.C 273531074b ./gcc/testsuite/g++.old-deja/g++.mike/net43.C 1013597348b ./gcc/testsuite/g++.old-deja/g++.mike/net44.C ! 1580412377b ./gcc/testsuite/g++.old-deja/g++.mike/net45.C 4252296965b ./gcc/testsuite/g++.old-deja/g++.mike/net46.C 3377446225b ./gcc/testsuite/g++.old-deja/g++.mike/net47.C 3175541105b ./gcc/testsuite/g++.old-deja/g++.mike/net48.C --- 9050,9061 ---- 373469883b ./gcc/testsuite/g++.old-deja/g++.mike/net38.C 3771016947b ./gcc/testsuite/g++.old-deja/g++.mike/net39.C 2896773743b ./gcc/testsuite/g++.old-deja/g++.mike/net3.C ! 3117098407b ./gcc/testsuite/g++.old-deja/g++.mike/net40.C 2329906223b ./gcc/testsuite/g++.old-deja/g++.mike/net41.C 257842077b ./gcc/testsuite/g++.old-deja/g++.mike/net42.C 273531074b ./gcc/testsuite/g++.old-deja/g++.mike/net43.C 1013597348b ./gcc/testsuite/g++.old-deja/g++.mike/net44.C ! 533128132b ./gcc/testsuite/g++.old-deja/g++.mike/net45.C 4252296965b ./gcc/testsuite/g++.old-deja/g++.mike/net46.C 3377446225b ./gcc/testsuite/g++.old-deja/g++.mike/net47.C 3175541105b ./gcc/testsuite/g++.old-deja/g++.mike/net48.C *************** *** 5445,5451 **** 533880824b ./gcc/testsuite/g++.old-deja/g++.mike/ns12.C 1634894638b ./gcc/testsuite/g++.old-deja/g++.mike/ns13.C 133757607b ./gcc/testsuite/g++.old-deja/g++.mike/ns14.C ! 2198411317b ./gcc/testsuite/g++.old-deja/g++.mike/ns15.C 452066686b ./gcc/testsuite/g++.old-deja/g++.mike/ns1.C 3588362593b ./gcc/testsuite/g++.old-deja/g++.mike/ns2.C 1013122739b ./gcc/testsuite/g++.old-deja/g++.mike/ns3.C --- 9069,9075 ---- 533880824b ./gcc/testsuite/g++.old-deja/g++.mike/ns12.C 1634894638b ./gcc/testsuite/g++.old-deja/g++.mike/ns13.C 133757607b ./gcc/testsuite/g++.old-deja/g++.mike/ns14.C ! 2272679205b ./gcc/testsuite/g++.old-deja/g++.mike/ns15.C 452066686b ./gcc/testsuite/g++.old-deja/g++.mike/ns1.C 3588362593b ./gcc/testsuite/g++.old-deja/g++.mike/ns2.C 1013122739b ./gcc/testsuite/g++.old-deja/g++.mike/ns3.C *************** *** 5461,5474 **** 3930590560b ./gcc/testsuite/g++.old-deja/g++.mike/p10148.C 3568933834b ./gcc/testsuite/g++.old-deja/g++.mike/p10247.C 3637822285b ./gcc/testsuite/g++.old-deja/g++.mike/p10416.C ! 3104407656b ./gcc/testsuite/g++.old-deja/g++.mike/p10511.C 2480212522b ./gcc/testsuite/g++.old-deja/g++.mike/p10769a.C 3120977893b ./gcc/testsuite/g++.old-deja/g++.mike/p10769b.C 2837914956b ./gcc/testsuite/g++.old-deja/g++.mike/p10849a.C 288448977b ./gcc/testsuite/g++.old-deja/g++.mike/p10951.C ! 244295624b ./gcc/testsuite/g++.old-deja/g++.mike/p11012.C 3327529664b ./gcc/testsuite/g++.old-deja/g++.mike/p11110.C - 2763947527b ./gcc/testsuite/g++.old-deja/g++.mike/p11116.C 1723536064b ./gcc/testsuite/g++.old-deja/g++.mike/p11142.C 2584300706b ./gcc/testsuite/g++.old-deja/g++.mike/p11144.C 1612526821b ./gcc/testsuite/g++.old-deja/g++.mike/p11482.C --- 9085,9097 ---- 3930590560b ./gcc/testsuite/g++.old-deja/g++.mike/p10148.C 3568933834b ./gcc/testsuite/g++.old-deja/g++.mike/p10247.C 3637822285b ./gcc/testsuite/g++.old-deja/g++.mike/p10416.C ! 2277517536b ./gcc/testsuite/g++.old-deja/g++.mike/p10511.C 2480212522b ./gcc/testsuite/g++.old-deja/g++.mike/p10769a.C 3120977893b ./gcc/testsuite/g++.old-deja/g++.mike/p10769b.C 2837914956b ./gcc/testsuite/g++.old-deja/g++.mike/p10849a.C 288448977b ./gcc/testsuite/g++.old-deja/g++.mike/p10951.C ! 885447599b ./gcc/testsuite/g++.old-deja/g++.mike/p11012.C 3327529664b ./gcc/testsuite/g++.old-deja/g++.mike/p11110.C 1723536064b ./gcc/testsuite/g++.old-deja/g++.mike/p11142.C 2584300706b ./gcc/testsuite/g++.old-deja/g++.mike/p11144.C 1612526821b ./gcc/testsuite/g++.old-deja/g++.mike/p11482.C *************** *** 5556,5562 **** 224810393b ./gcc/testsuite/g++.old-deja/g++.mike/p701.C 2057788178b ./gcc/testsuite/g++.old-deja/g++.mike/p710.C 1244723488b ./gcc/testsuite/g++.old-deja/g++.mike/p7180.C ! 2709277349b ./gcc/testsuite/g++.old-deja/g++.mike/p7325.C 3900843491b ./gcc/testsuite/g++.old-deja/g++.mike/p7476.C 3394798100b ./gcc/testsuite/g++.old-deja/g++.mike/p755a.C 2349738175b ./gcc/testsuite/g++.old-deja/g++.mike/p755.C --- 9179,9185 ---- 224810393b ./gcc/testsuite/g++.old-deja/g++.mike/p701.C 2057788178b ./gcc/testsuite/g++.old-deja/g++.mike/p710.C 1244723488b ./gcc/testsuite/g++.old-deja/g++.mike/p7180.C ! 3521513511b ./gcc/testsuite/g++.old-deja/g++.mike/p7325.C 3900843491b ./gcc/testsuite/g++.old-deja/g++.mike/p7476.C 3394798100b ./gcc/testsuite/g++.old-deja/g++.mike/p755a.C 2349738175b ./gcc/testsuite/g++.old-deja/g++.mike/p755.C *************** *** 5566,5572 **** 3247827104b ./gcc/testsuite/g++.old-deja/g++.mike/p783a.C 3185815998b ./gcc/testsuite/g++.old-deja/g++.mike/p783b.C 298093700b ./gcc/testsuite/g++.old-deja/g++.mike/p783.C ! 2349799332b ./gcc/testsuite/g++.old-deja/g++.mike/p784.C 3281865096b ./gcc/testsuite/g++.old-deja/g++.mike/p7865.C 341429709b ./gcc/testsuite/g++.old-deja/g++.mike/p7868.C 1887516335b ./gcc/testsuite/g++.old-deja/g++.mike/p786.C --- 9189,9195 ---- 3247827104b ./gcc/testsuite/g++.old-deja/g++.mike/p783a.C 3185815998b ./gcc/testsuite/g++.old-deja/g++.mike/p783b.C 298093700b ./gcc/testsuite/g++.old-deja/g++.mike/p783.C ! 1112249731b ./gcc/testsuite/g++.old-deja/g++.mike/p784.C 3281865096b ./gcc/testsuite/g++.old-deja/g++.mike/p7865.C 341429709b ./gcc/testsuite/g++.old-deja/g++.mike/p7868.C 1887516335b ./gcc/testsuite/g++.old-deja/g++.mike/p786.C *************** *** 5733,5738 **** --- 9356,9362 ---- 79283455b ./gcc/testsuite/g++.old-deja/g++.ns/template13.C 1942781319b ./gcc/testsuite/g++.old-deja/g++.ns/template14.C 4227768604b ./gcc/testsuite/g++.old-deja/g++.ns/template15.C + 703552988b ./gcc/testsuite/g++.old-deja/g++.ns/template16.C 3733063651b ./gcc/testsuite/g++.old-deja/g++.ns/template17.C 1888321924b ./gcc/testsuite/g++.old-deja/g++.ns/template18.C 1497628723b ./gcc/testsuite/g++.old-deja/g++.ns/template1.C *************** *** 5761,5771 **** 3099602163b ./gcc/testsuite/g++.old-deja/g++.ns/using7.C 396388537b ./gcc/testsuite/g++.old-deja/g++.ns/using8.C 536814910b ./gcc/testsuite/g++.old-deja/g++.ns/using9.C ! 833251751b ./gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog 3728265872b ./gcc/testsuite/g++.old-deja/g++.oliva/ctor1.C 3026414575b ./gcc/testsuite/g++.old-deja/g++.oliva/delete1.C 3639944207b ./gcc/testsuite/g++.old-deja/g++.oliva/delete2.C ! 477237501b ./gcc/testsuite/g++.old-deja/g++.oliva/delete3.C 2694375318b ./gcc/testsuite/g++.old-deja/g++.oliva/delete4.C 344447742b ./gcc/testsuite/g++.old-deja/g++.oliva/delete5.C 2655620155b ./gcc/testsuite/g++.old-deja/g++.oliva/dwarf1.C --- 9385,9395 ---- 3099602163b ./gcc/testsuite/g++.old-deja/g++.ns/using7.C 396388537b ./gcc/testsuite/g++.old-deja/g++.ns/using8.C 536814910b ./gcc/testsuite/g++.old-deja/g++.ns/using9.C ! 396945284b ./gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog 3728265872b ./gcc/testsuite/g++.old-deja/g++.oliva/ctor1.C 3026414575b ./gcc/testsuite/g++.old-deja/g++.oliva/delete1.C 3639944207b ./gcc/testsuite/g++.old-deja/g++.oliva/delete2.C ! 2643297136b ./gcc/testsuite/g++.old-deja/g++.oliva/delete3.C 2694375318b ./gcc/testsuite/g++.old-deja/g++.oliva/delete4.C 344447742b ./gcc/testsuite/g++.old-deja/g++.oliva/delete5.C 2655620155b ./gcc/testsuite/g++.old-deja/g++.oliva/dwarf1.C *************** *** 5797,5808 **** 2923124652b ./gcc/testsuite/g++.old-deja/g++.oliva/template8.C 1030363186b ./gcc/testsuite/g++.old-deja/g++.oliva/template9.C 3126175465b ./gcc/testsuite/g++.old-deja/g++.oliva/thunk1.C ! 1040814482b ./gcc/testsuite/g++.old-deja/g++.oliva/typename1.C ! 2426878983b ./gcc/testsuite/g++.old-deja/g++.oliva/typename2.C 3536726592b ./gcc/testsuite/g++.old-deja/g++.oliva/typeof1.C 1057884755b ./gcc/testsuite/g++.old-deja/g++.other/900403_04.C 3988635652b ./gcc/testsuite/g++.old-deja/g++.other/900519_12.C 3191928166b ./gcc/testsuite/g++.old-deja/g++.other/access10.C 2645069492b ./gcc/testsuite/g++.old-deja/g++.other/access1.C 627859229b ./gcc/testsuite/g++.old-deja/g++.other/access2.C 2495312369b ./gcc/testsuite/g++.old-deja/g++.other/access3.C --- 9421,9433 ---- 2923124652b ./gcc/testsuite/g++.old-deja/g++.oliva/template8.C 1030363186b ./gcc/testsuite/g++.old-deja/g++.oliva/template9.C 3126175465b ./gcc/testsuite/g++.old-deja/g++.oliva/thunk1.C ! 2910311896b ./gcc/testsuite/g++.old-deja/g++.oliva/typename1.C ! 3314243773b ./gcc/testsuite/g++.old-deja/g++.oliva/typename2.C 3536726592b ./gcc/testsuite/g++.old-deja/g++.oliva/typeof1.C 1057884755b ./gcc/testsuite/g++.old-deja/g++.other/900403_04.C 3988635652b ./gcc/testsuite/g++.old-deja/g++.other/900519_12.C 3191928166b ./gcc/testsuite/g++.old-deja/g++.other/access10.C + 2726240569b ./gcc/testsuite/g++.old-deja/g++.other/access11.C 2645069492b ./gcc/testsuite/g++.old-deja/g++.other/access1.C 627859229b ./gcc/testsuite/g++.old-deja/g++.other/access2.C 2495312369b ./gcc/testsuite/g++.old-deja/g++.other/access3.C *************** *** 5825,5837 **** 2854182173b ./gcc/testsuite/g++.old-deja/g++.other/anon6.C 3655281019b ./gcc/testsuite/g++.old-deja/g++.other/anon7.C 2243818429b ./gcc/testsuite/g++.old-deja/g++.other/anon8.C 3655425788b ./gcc/testsuite/g++.old-deja/g++.other/array1.C 2041445169b ./gcc/testsuite/g++.old-deja/g++.other/array2.C 817672117b ./gcc/testsuite/g++.old-deja/g++.other/array3.C ! 4210498948b ./gcc/testsuite/g++.old-deja/g++.other/array4.C ! 1839235782b ./gcc/testsuite/g++.old-deja/g++.other/array5.C 775293500b ./gcc/testsuite/g++.old-deja/g++.other/asm1.C ! 2120817147b ./gcc/testsuite/g++.old-deja/g++.other/asm2.C 4169192453b ./gcc/testsuite/g++.old-deja/g++.other/badarrow.C 1457616136b ./gcc/testsuite/g++.old-deja/g++.other/badopt1.C 578421507b ./gcc/testsuite/g++.old-deja/g++.other/base1.C --- 9450,9466 ---- 2854182173b ./gcc/testsuite/g++.old-deja/g++.other/anon6.C 3655281019b ./gcc/testsuite/g++.old-deja/g++.other/anon7.C 2243818429b ./gcc/testsuite/g++.old-deja/g++.other/anon8.C + 2944422964b ./gcc/testsuite/g++.old-deja/g++.other/anon9.C 3655425788b ./gcc/testsuite/g++.old-deja/g++.other/array1.C 2041445169b ./gcc/testsuite/g++.old-deja/g++.other/array2.C 817672117b ./gcc/testsuite/g++.old-deja/g++.other/array3.C ! 1236007435b ./gcc/testsuite/g++.old-deja/g++.other/array4.C ! 4210498948b ./gcc/testsuite/g++.old-deja/g++.other/array5.C ! 1839235782b ./gcc/testsuite/g++.old-deja/g++.other/array6.C ! 128237130b ./gcc/testsuite/g++.old-deja/g++.other/array9.C 775293500b ./gcc/testsuite/g++.old-deja/g++.other/asm1.C ! 1087917488b ./gcc/testsuite/g++.old-deja/g++.other/asm2.C ! 2120817147b ./gcc/testsuite/g++.old-deja/g++.other/asm3.C 4169192453b ./gcc/testsuite/g++.old-deja/g++.other/badarrow.C 1457616136b ./gcc/testsuite/g++.old-deja/g++.other/badopt1.C 578421507b ./gcc/testsuite/g++.old-deja/g++.other/base1.C *************** *** 5844,5849 **** --- 9473,9483 ---- 1119192045b ./gcc/testsuite/g++.old-deja/g++.other/builtins2.C 1541855856b ./gcc/testsuite/g++.old-deja/g++.other/builtins3.C 3612794982b ./gcc/testsuite/g++.old-deja/g++.other/builtins4.C + 2609921973b ./gcc/testsuite/g++.old-deja/g++.other/builtins5.C + 1770005594b ./gcc/testsuite/g++.old-deja/g++.other/builtins6.C + 2118815705b ./gcc/testsuite/g++.old-deja/g++.other/builtins7.C + 3786327583b ./gcc/testsuite/g++.old-deja/g++.other/builtins8.C + 3198258077b ./gcc/testsuite/g++.old-deja/g++.other/builtins9.C 1856291545b ./gcc/testsuite/g++.old-deja/g++.other/call1.C 1948526601b ./gcc/testsuite/g++.old-deja/g++.other/cast1.C 2969373696b ./gcc/testsuite/g++.old-deja/g++.other/cast2.C *************** *** 5857,5862 **** --- 9491,9498 ---- 995095788b ./gcc/testsuite/g++.old-deja/g++.other/cleanup4.C 3815448745b ./gcc/testsuite/g++.old-deja/g++.other/comdat1-aux.cc 3620214006b ./gcc/testsuite/g++.old-deja/g++.other/comdat1.C + 2015497124b ./gcc/testsuite/g++.old-deja/g++.other/comdat2-aux.cc + 1235507024b ./gcc/testsuite/g++.old-deja/g++.other/comdat2.C 32346335b ./gcc/testsuite/g++.old-deja/g++.other/cond1.C 2040886616b ./gcc/testsuite/g++.old-deja/g++.other/cond2.C 1693754994b ./gcc/testsuite/g++.old-deja/g++.other/cond3.C *************** *** 5873,5878 **** --- 9509,9516 ---- 310726280b ./gcc/testsuite/g++.old-deja/g++.other/conv5.C 4132208036b ./gcc/testsuite/g++.old-deja/g++.other/conv6.C 3821789807b ./gcc/testsuite/g++.old-deja/g++.other/conv7.C + 2577806949b ./gcc/testsuite/g++.old-deja/g++.other/conv8.C + 1535970476b ./gcc/testsuite/g++.old-deja/g++.other/conv9.C 3587605986b ./gcc/testsuite/g++.old-deja/g++.other/copy1.C 3735054018b ./gcc/testsuite/g++.old-deja/g++.other/copy2.C 4116304803b ./gcc/testsuite/g++.old-deja/g++.other/copy3.C *************** *** 5885,5891 **** 3608968471b ./gcc/testsuite/g++.old-deja/g++.other/crash15.C 1523769869b ./gcc/testsuite/g++.old-deja/g++.other/crash16.C 2768038718b ./gcc/testsuite/g++.old-deja/g++.other/crash17.C ! 3714094366b ./gcc/testsuite/g++.old-deja/g++.other/crash18.C 4239879636b ./gcc/testsuite/g++.old-deja/g++.other/crash19.C 1458918645b ./gcc/testsuite/g++.old-deja/g++.other/crash1.C 2114923665b ./gcc/testsuite/g++.old-deja/g++.other/crash20.C --- 9523,9529 ---- 3608968471b ./gcc/testsuite/g++.old-deja/g++.other/crash15.C 1523769869b ./gcc/testsuite/g++.old-deja/g++.other/crash16.C 2768038718b ./gcc/testsuite/g++.old-deja/g++.other/crash17.C ! 1844482260b ./gcc/testsuite/g++.old-deja/g++.other/crash18.C 4239879636b ./gcc/testsuite/g++.old-deja/g++.other/crash19.C 1458918645b ./gcc/testsuite/g++.old-deja/g++.other/crash1.C 2114923665b ./gcc/testsuite/g++.old-deja/g++.other/crash20.C *************** *** 5894,5910 **** 3346026369b ./gcc/testsuite/g++.old-deja/g++.other/crash23.C 3240226401b ./gcc/testsuite/g++.old-deja/g++.other/crash24.C 1103500081b ./gcc/testsuite/g++.old-deja/g++.other/crash25.C ! 3783988736b ./gcc/testsuite/g++.old-deja/g++.other/crash26.C 621631894b ./gcc/testsuite/g++.old-deja/g++.other/crash27.C ! 906427884b ./gcc/testsuite/g++.old-deja/g++.other/crash28.C ! 411155802b ./gcc/testsuite/g++.old-deja/g++.other/crash29.C 2556139745b ./gcc/testsuite/g++.old-deja/g++.other/crash2.C ! 2963031366b ./gcc/testsuite/g++.old-deja/g++.other/crash30.C ! 4037092160b ./gcc/testsuite/g++.old-deja/g++.other/crash31.C 2337764618b ./gcc/testsuite/g++.old-deja/g++.other/crash32.C 3826660229b ./gcc/testsuite/g++.old-deja/g++.other/crash33.C 1464877078b ./gcc/testsuite/g++.old-deja/g++.other/crash34.C ! 688359105b ./gcc/testsuite/g++.old-deja/g++.other/crash35.C 1919242889b ./gcc/testsuite/g++.old-deja/g++.other/crash36.C 3888381363b ./gcc/testsuite/g++.old-deja/g++.other/crash37.C 3660059490b ./gcc/testsuite/g++.old-deja/g++.other/crash38.C --- 9532,9548 ---- 3346026369b ./gcc/testsuite/g++.old-deja/g++.other/crash23.C 3240226401b ./gcc/testsuite/g++.old-deja/g++.other/crash24.C 1103500081b ./gcc/testsuite/g++.old-deja/g++.other/crash25.C ! 662847024b ./gcc/testsuite/g++.old-deja/g++.other/crash26.C 621631894b ./gcc/testsuite/g++.old-deja/g++.other/crash27.C ! 1274918070b ./gcc/testsuite/g++.old-deja/g++.other/crash28.C ! 3218325168b ./gcc/testsuite/g++.old-deja/g++.other/crash29.C 2556139745b ./gcc/testsuite/g++.old-deja/g++.other/crash2.C ! 3863621974b ./gcc/testsuite/g++.old-deja/g++.other/crash30.C ! 1567414961b ./gcc/testsuite/g++.old-deja/g++.other/crash31.C 2337764618b ./gcc/testsuite/g++.old-deja/g++.other/crash32.C 3826660229b ./gcc/testsuite/g++.old-deja/g++.other/crash33.C 1464877078b ./gcc/testsuite/g++.old-deja/g++.other/crash34.C ! 1090618161b ./gcc/testsuite/g++.old-deja/g++.other/crash35.C 1919242889b ./gcc/testsuite/g++.old-deja/g++.other/crash36.C 3888381363b ./gcc/testsuite/g++.old-deja/g++.other/crash37.C 3660059490b ./gcc/testsuite/g++.old-deja/g++.other/crash38.C *************** *** 5915,5920 **** --- 9553,9559 ---- 2300001961b ./gcc/testsuite/g++.old-deja/g++.other/crash42.C 226105322b ./gcc/testsuite/g++.old-deja/g++.other/crash4.C 1657789856b ./gcc/testsuite/g++.old-deja/g++.other/crash5.C + 2889210351b ./gcc/testsuite/g++.old-deja/g++.other/crash60.C 3212679954b ./gcc/testsuite/g++.old-deja/g++.other/crash6.C 3092570108b ./gcc/testsuite/g++.old-deja/g++.other/crash7.C 1968632283b ./gcc/testsuite/g++.old-deja/g++.other/crash8.C *************** *** 5934,5939 **** --- 9573,9579 ---- 295818831b ./gcc/testsuite/g++.old-deja/g++.other/debug6.C 3988487536b ./gcc/testsuite/g++.old-deja/g++.other/debug7.C 1879227744b ./gcc/testsuite/g++.old-deja/g++.other/debug8.C + 3358773301b ./gcc/testsuite/g++.old-deja/g++.other/debug9.C 3900152738b ./gcc/testsuite/g++.old-deja/g++.other/decl1.C 424334940b ./gcc/testsuite/g++.old-deja/g++.other/decl2.C 3608003944b ./gcc/testsuite/g++.old-deja/g++.other/decl3.C *************** *** 5970,5975 **** --- 9610,9616 ---- 18134551b ./gcc/testsuite/g++.old-deja/g++.other/dtor10.C 1164270328b ./gcc/testsuite/g++.old-deja/g++.other/dtor11.C 3251874725b ./gcc/testsuite/g++.old-deja/g++.other/dtor12.C + 2995412590b ./gcc/testsuite/g++.old-deja/g++.other/dtor13.C 1284663345b ./gcc/testsuite/g++.old-deja/g++.other/dtor1.C 19912911b ./gcc/testsuite/g++.old-deja/g++.other/dtor2.C 1972124996b ./gcc/testsuite/g++.old-deja/g++.other/dtor3.C *************** *** 5989,6004 **** 4127184370b ./gcc/testsuite/g++.old-deja/g++.other/eh2.C 3559396844b ./gcc/testsuite/g++.old-deja/g++.other/eh3.C 3143843455b ./gcc/testsuite/g++.old-deja/g++.other/eh4.C 326457279b ./gcc/testsuite/g++.old-deja/g++.other/eh.C 3053308594b ./gcc/testsuite/g++.old-deja/g++.other/elab1.C ! 1418681681b ./gcc/testsuite/g++.old-deja/g++.other/empty1.C 3170636835b ./gcc/testsuite/g++.old-deja/g++.other/empty2.C - 3348313183b ./gcc/testsuite/g++.old-deja/g++.other/empty3.C 845552508b ./gcc/testsuite/g++.old-deja/g++.other/enum1.C 1384469113b ./gcc/testsuite/g++.old-deja/g++.other/enum2.C ! 3409398862b ./gcc/testsuite/g++.old-deja/g++.other/enum3.C 2843499248b ./gcc/testsuite/g++.old-deja/g++.other/explicit1.C 1334454026b ./gcc/testsuite/g++.old-deja/g++.other/expr1.C 1049589711b ./gcc/testsuite/g++.old-deja/g++.other/externC1.C 106210432b ./gcc/testsuite/g++.old-deja/g++.other/externC2.C 763760707b ./gcc/testsuite/g++.old-deja/g++.other/externC3.C --- 9630,9648 ---- 4127184370b ./gcc/testsuite/g++.old-deja/g++.other/eh2.C 3559396844b ./gcc/testsuite/g++.old-deja/g++.other/eh3.C 3143843455b ./gcc/testsuite/g++.old-deja/g++.other/eh4.C + 1752543333b ./gcc/testsuite/g++.old-deja/g++.other/eh5.C 326457279b ./gcc/testsuite/g++.old-deja/g++.other/eh.C 3053308594b ./gcc/testsuite/g++.old-deja/g++.other/elab1.C ! 3888745390b ./gcc/testsuite/g++.old-deja/g++.other/empty1.C 3170636835b ./gcc/testsuite/g++.old-deja/g++.other/empty2.C 845552508b ./gcc/testsuite/g++.old-deja/g++.other/enum1.C 1384469113b ./gcc/testsuite/g++.old-deja/g++.other/enum2.C ! 556645706b ./gcc/testsuite/g++.old-deja/g++.other/enum3.C ! 3409398862b ./gcc/testsuite/g++.old-deja/g++.other/enum4.C ! 1750723822b ./gcc/testsuite/g++.old-deja/g++.other/enum5.C 2843499248b ./gcc/testsuite/g++.old-deja/g++.other/explicit1.C 1334454026b ./gcc/testsuite/g++.old-deja/g++.other/expr1.C + 4041831790b ./gcc/testsuite/g++.old-deja/g++.other/exprstmt1.C 1049589711b ./gcc/testsuite/g++.old-deja/g++.other/externC1.C 106210432b ./gcc/testsuite/g++.old-deja/g++.other/externC2.C 763760707b ./gcc/testsuite/g++.old-deja/g++.other/externC3.C *************** *** 6007,6017 **** 778443229b ./gcc/testsuite/g++.old-deja/g++.other/field1.C 250200362b ./gcc/testsuite/g++.old-deja/g++.other/field2.C 1648602614b ./gcc/testsuite/g++.old-deja/g++.other/fnname1.C ! 3466875687b ./gcc/testsuite/g++.old-deja/g++.other/for1.C 3948754017b ./gcc/testsuite/g++.old-deja/g++.other/for2.C 1195751396b ./gcc/testsuite/g++.old-deja/g++.other/friend10.C 3233024721b ./gcc/testsuite/g++.old-deja/g++.other/friend11.C ! 2264586745b ./gcc/testsuite/g++.old-deja/g++.other/friend1.C 1833376578b ./gcc/testsuite/g++.old-deja/g++.other/friend2.C 1953203540b ./gcc/testsuite/g++.old-deja/g++.other/friend3.C 438287814b ./gcc/testsuite/g++.old-deja/g++.other/friend4.C --- 9651,9661 ---- 778443229b ./gcc/testsuite/g++.old-deja/g++.other/field1.C 250200362b ./gcc/testsuite/g++.old-deja/g++.other/field2.C 1648602614b ./gcc/testsuite/g++.old-deja/g++.other/fnname1.C ! 2595576321b ./gcc/testsuite/g++.old-deja/g++.other/for1.C 3948754017b ./gcc/testsuite/g++.old-deja/g++.other/for2.C 1195751396b ./gcc/testsuite/g++.old-deja/g++.other/friend10.C 3233024721b ./gcc/testsuite/g++.old-deja/g++.other/friend11.C ! 3153977462b ./gcc/testsuite/g++.old-deja/g++.other/friend1.C 1833376578b ./gcc/testsuite/g++.old-deja/g++.other/friend2.C 1953203540b ./gcc/testsuite/g++.old-deja/g++.other/friend3.C 438287814b ./gcc/testsuite/g++.old-deja/g++.other/friend4.C *************** *** 6028,6034 **** 1685869594b ./gcc/testsuite/g++.old-deja/g++.other/incomplete.C 1598723950b ./gcc/testsuite/g++.old-deja/g++.other/init10.C 1393596821b ./gcc/testsuite/g++.old-deja/g++.other/init11.C ! 1765497357b ./gcc/testsuite/g++.old-deja/g++.other/init12.C 2230863646b ./gcc/testsuite/g++.old-deja/g++.other/init13.C 4165471595b ./gcc/testsuite/g++.old-deja/g++.other/init14.C 2091624673b ./gcc/testsuite/g++.old-deja/g++.other/init15.C --- 9672,9678 ---- 1685869594b ./gcc/testsuite/g++.old-deja/g++.other/incomplete.C 1598723950b ./gcc/testsuite/g++.old-deja/g++.other/init10.C 1393596821b ./gcc/testsuite/g++.old-deja/g++.other/init11.C ! 3918302157b ./gcc/testsuite/g++.old-deja/g++.other/init12.C 2230863646b ./gcc/testsuite/g++.old-deja/g++.other/init13.C 4165471595b ./gcc/testsuite/g++.old-deja/g++.other/init14.C 2091624673b ./gcc/testsuite/g++.old-deja/g++.other/init15.C *************** *** 6057,6062 **** --- 9701,9707 ---- 2434780038b ./gcc/testsuite/g++.old-deja/g++.other/inline1.C 1204135970b ./gcc/testsuite/g++.old-deja/g++.other/inline20.C 3724397225b ./gcc/testsuite/g++.old-deja/g++.other/inline21.C + 3956374226b ./gcc/testsuite/g++.old-deja/g++.other/inline23.C 2138039153b ./gcc/testsuite/g++.old-deja/g++.other/inline2.C 1052546588b ./gcc/testsuite/g++.old-deja/g++.other/inline3.C 56787941b ./gcc/testsuite/g++.old-deja/g++.other/inline4.C *************** *** 6083,6088 **** --- 9728,9734 ---- 88188461b ./gcc/testsuite/g++.old-deja/g++.other/local2.C 2840919735b ./gcc/testsuite/g++.old-deja/g++.other/local3.C 1540707900b ./gcc/testsuite/g++.old-deja/g++.other/local4.C + 3682661614b ./gcc/testsuite/g++.old-deja/g++.other/local-alloc1.C 1737066412b ./gcc/testsuite/g++.old-deja/g++.other/lookup10.C 1037102268b ./gcc/testsuite/g++.old-deja/g++.other/lookup11.C 245062181b ./gcc/testsuite/g++.old-deja/g++.other/lookup12.C *************** *** 6110,6115 **** --- 9756,9762 ---- 3525634979b ./gcc/testsuite/g++.old-deja/g++.other/loop2.C 3124866775b ./gcc/testsuite/g++.old-deja/g++.other/main1.C 3887765310b ./gcc/testsuite/g++.old-deja/g++.other/main2.C + 1745830473b ./gcc/testsuite/g++.old-deja/g++.other/mangle10.C 2766673663b ./gcc/testsuite/g++.old-deja/g++.other/mangle2.C 199984455b ./gcc/testsuite/g++.old-deja/g++.other/mangle3.C 1065924618b ./gcc/testsuite/g++.old-deja/g++.other/mutable1.C *************** *** 6119,6131 **** 3749047676b ./gcc/testsuite/g++.old-deja/g++.other/nested4.C 2899415960b ./gcc/testsuite/g++.old-deja/g++.other/new2.C 1176720819b ./gcc/testsuite/g++.old-deja/g++.other/new3.C ! 2198588577b ./gcc/testsuite/g++.old-deja/g++.other/new4.C 850194097b ./gcc/testsuite/g++.old-deja/g++.other/new5.C 2266969204b ./gcc/testsuite/g++.old-deja/g++.other/new6.C 2661895613b ./gcc/testsuite/g++.old-deja/g++.other/new7.C ! 4220638747b ./gcc/testsuite/g++.old-deja/g++.other/new.C 4142273200b ./gcc/testsuite/g++.old-deja/g++.other/null1.C ! 1708499485b ./gcc/testsuite/g++.old-deja/g++.other/null2.C 2676296478b ./gcc/testsuite/g++.old-deja/g++.other/null3.C 952036012b ./gcc/testsuite/g++.old-deja/g++.other/op1.C 1061118185b ./gcc/testsuite/g++.old-deja/g++.other/op2.C --- 9766,9778 ---- 3749047676b ./gcc/testsuite/g++.old-deja/g++.other/nested4.C 2899415960b ./gcc/testsuite/g++.old-deja/g++.other/new2.C 1176720819b ./gcc/testsuite/g++.old-deja/g++.other/new3.C ! 2825689270b ./gcc/testsuite/g++.old-deja/g++.other/new4.C 850194097b ./gcc/testsuite/g++.old-deja/g++.other/new5.C 2266969204b ./gcc/testsuite/g++.old-deja/g++.other/new6.C 2661895613b ./gcc/testsuite/g++.old-deja/g++.other/new7.C ! 2658114065b ./gcc/testsuite/g++.old-deja/g++.other/new.C 4142273200b ./gcc/testsuite/g++.old-deja/g++.other/null1.C ! 2086727759b ./gcc/testsuite/g++.old-deja/g++.other/null2.C 2676296478b ./gcc/testsuite/g++.old-deja/g++.other/null3.C 952036012b ./gcc/testsuite/g++.old-deja/g++.other/op1.C 1061118185b ./gcc/testsuite/g++.old-deja/g++.other/op2.C *************** *** 6170,6180 **** 104810161b ./gcc/testsuite/g++.old-deja/g++.other/ptrmem3.C 516033591b ./gcc/testsuite/g++.old-deja/g++.other/ptrmem4.C 3693600549b ./gcc/testsuite/g++.old-deja/g++.other/ptrmem5.C ! 3581240284b ./gcc/testsuite/g++.old-deja/g++.other/ptrmem6.C 308552023b ./gcc/testsuite/g++.old-deja/g++.other/ptrmem7.C 3160378056b ./gcc/testsuite/g++.old-deja/g++.other/ptrmem8.C 963938985b ./gcc/testsuite/g++.old-deja/g++.other/ptrmem9.C ! 637943438b ./gcc/testsuite/g++.old-deja/g++.other/qual1.C 606859601b ./gcc/testsuite/g++.old-deja/g++.other/realloc.C 2179956418b ./gcc/testsuite/g++.old-deja/g++.other/redecl1.C 245777050b ./gcc/testsuite/g++.old-deja/g++.other/redecl2.C --- 9817,9827 ---- 104810161b ./gcc/testsuite/g++.old-deja/g++.other/ptrmem3.C 516033591b ./gcc/testsuite/g++.old-deja/g++.other/ptrmem4.C 3693600549b ./gcc/testsuite/g++.old-deja/g++.other/ptrmem5.C ! 725330086b ./gcc/testsuite/g++.old-deja/g++.other/ptrmem6.C 308552023b ./gcc/testsuite/g++.old-deja/g++.other/ptrmem7.C 3160378056b ./gcc/testsuite/g++.old-deja/g++.other/ptrmem8.C 963938985b ./gcc/testsuite/g++.old-deja/g++.other/ptrmem9.C ! 3704604722b ./gcc/testsuite/g++.old-deja/g++.other/qual1.C 606859601b ./gcc/testsuite/g++.old-deja/g++.other/realloc.C 2179956418b ./gcc/testsuite/g++.old-deja/g++.other/redecl1.C 245777050b ./gcc/testsuite/g++.old-deja/g++.other/redecl2.C *************** *** 6187,6194 **** 3976024536b ./gcc/testsuite/g++.old-deja/g++.other/refinit1.C 690459633b ./gcc/testsuite/g++.old-deja/g++.other/refinit2.C 1101055782b ./gcc/testsuite/g++.old-deja/g++.other/regstack.C ! 1618749638b ./gcc/testsuite/g++.old-deja/g++.other/return1.C ! 247321106b ./gcc/testsuite/g++.old-deja/g++.other/rtti1.C 1393937598b ./gcc/testsuite/g++.old-deja/g++.other/rtti2.C 69462645b ./gcc/testsuite/g++.old-deja/g++.other/rtti3.C 1416727844b ./gcc/testsuite/g++.old-deja/g++.other/rtti4.C --- 9834,9842 ---- 3976024536b ./gcc/testsuite/g++.old-deja/g++.other/refinit1.C 690459633b ./gcc/testsuite/g++.old-deja/g++.other/refinit2.C 1101055782b ./gcc/testsuite/g++.old-deja/g++.other/regstack.C ! 1964301536b ./gcc/testsuite/g++.old-deja/g++.other/reload1.C ! 1919174692b ./gcc/testsuite/g++.old-deja/g++.other/return1.C ! 1404089609b ./gcc/testsuite/g++.old-deja/g++.other/rtti1.C 1393937598b ./gcc/testsuite/g++.old-deja/g++.other/rtti2.C 69462645b ./gcc/testsuite/g++.old-deja/g++.other/rtti3.C 1416727844b ./gcc/testsuite/g++.old-deja/g++.other/rtti4.C *************** *** 6200,6205 **** --- 9848,9854 ---- 3818908597b ./gcc/testsuite/g++.old-deja/g++.other/scope1.C 3543848546b ./gcc/testsuite/g++.old-deja/g++.other/shadow1.C 3144403535b ./gcc/testsuite/g++.old-deja/g++.other/sibcall1.C + 1879839494b ./gcc/testsuite/g++.old-deja/g++.other/sibcall2.C 2236161814b ./gcc/testsuite/g++.old-deja/g++.other/signed.C 3978933585b ./gcc/testsuite/g++.old-deja/g++.other/singleton.C 2035612399b ./gcc/testsuite/g++.old-deja/g++.other/sizeof1.C *************** *** 6215,6220 **** --- 9864,9870 ---- 2968457282b ./gcc/testsuite/g++.old-deja/g++.other/static15.C 254220227b ./gcc/testsuite/g++.old-deja/g++.other/static16.C 730081105b ./gcc/testsuite/g++.old-deja/g++.other/static1.C + 400806999b ./gcc/testsuite/g++.old-deja/g++.other/static20.C 1208581965b ./gcc/testsuite/g++.old-deja/g++.other/static2.C 1822341199b ./gcc/testsuite/g++.old-deja/g++.other/static3.C 3669301779b ./gcc/testsuite/g++.old-deja/g++.other/static4.C *************** *** 6224,6229 **** --- 9874,9882 ---- 1409972884b ./gcc/testsuite/g++.old-deja/g++.other/static9.C 910948586b ./gcc/testsuite/g++.old-deja/g++.other/std1.C 574242123b ./gcc/testsuite/g++.old-deja/g++.other/stmtexpr1.C + 198454248b ./gcc/testsuite/g++.old-deja/g++.other/stmtexpr2.C + 2323476072b ./gcc/testsuite/g++.old-deja/g++.other/store-expr1.C + 106303641b ./gcc/testsuite/g++.old-deja/g++.other/store-expr2.C 3308418318b ./gcc/testsuite/g++.old-deja/g++.other/string1.C 3417212046b ./gcc/testsuite/g++.old-deja/g++.other/string2.C 262484701b ./gcc/testsuite/g++.old-deja/g++.other/struct1.C *************** *** 6246,6252 **** 330448653b ./gcc/testsuite/g++.old-deja/g++.other/typedef8.C 2163665334b ./gcc/testsuite/g++.old-deja/g++.other/typeid1.C 3380807260b ./gcc/testsuite/g++.old-deja/g++.other/typeinfo1.C ! 602332707b ./gcc/testsuite/g++.old-deja/g++.other/typename1.C 2207249090b ./gcc/testsuite/g++.old-deja/g++.other/union1.C 1220663165b ./gcc/testsuite/g++.old-deja/g++.other/union2.C 100032111b ./gcc/testsuite/g++.old-deja/g++.other/union3.C --- 9899,9907 ---- 330448653b ./gcc/testsuite/g++.old-deja/g++.other/typedef8.C 2163665334b ./gcc/testsuite/g++.old-deja/g++.other/typeid1.C 3380807260b ./gcc/testsuite/g++.old-deja/g++.other/typeinfo1.C ! 2873064218b ./gcc/testsuite/g++.old-deja/g++.other/typename1.C ! 2681453665b ./gcc/testsuite/g++.old-deja/g++.other/typename2.C ! 2945224541b ./gcc/testsuite/g++.old-deja/g++.other/unchanging1.C 2207249090b ./gcc/testsuite/g++.old-deja/g++.other/union1.C 1220663165b ./gcc/testsuite/g++.old-deja/g++.other/union2.C 100032111b ./gcc/testsuite/g++.old-deja/g++.other/union3.C *************** *** 6259,6265 **** 3873577868b ./gcc/testsuite/g++.old-deja/g++.other/using6.C 1034385045b ./gcc/testsuite/g++.old-deja/g++.other/using7.C 1471419785b ./gcc/testsuite/g++.old-deja/g++.other/using8.C ! 751534998b ./gcc/testsuite/g++.old-deja/g++.other/using9.C 1336382176b ./gcc/testsuite/g++.old-deja/g++.other/vaarg1.C 942920287b ./gcc/testsuite/g++.old-deja/g++.other/vaarg2.C 3319728754b ./gcc/testsuite/g++.old-deja/g++.other/vaarg3.C --- 9914,9920 ---- 3873577868b ./gcc/testsuite/g++.old-deja/g++.other/using6.C 1034385045b ./gcc/testsuite/g++.old-deja/g++.other/using7.C 1471419785b ./gcc/testsuite/g++.old-deja/g++.other/using8.C ! 118467765b ./gcc/testsuite/g++.old-deja/g++.other/using9.C 1336382176b ./gcc/testsuite/g++.old-deja/g++.other/vaarg1.C 942920287b ./gcc/testsuite/g++.old-deja/g++.other/vaarg2.C 3319728754b ./gcc/testsuite/g++.old-deja/g++.other/vaarg3.C *************** *** 6269,6275 **** 1361331299b ./gcc/testsuite/g++.old-deja/g++.other/vbase3.C 2014677415b ./gcc/testsuite/g++.old-deja/g++.other/vbase4.C 891656248b ./gcc/testsuite/g++.old-deja/g++.other/vbase5.C - 373063b ./gcc/testsuite/g++.old-deja/g++.other/vector1.C 1779651648b ./gcc/testsuite/g++.old-deja/g++.other/virtual10.C 3755735707b ./gcc/testsuite/g++.old-deja/g++.other/virtual11.C 1164439917b ./gcc/testsuite/g++.old-deja/g++.other/virtual1.C --- 9924,9929 ---- *************** *** 6323,6329 **** 2103079352b ./gcc/testsuite/g++.old-deja/g++.pt/crash13.C 4259627326b ./gcc/testsuite/g++.old-deja/g++.pt/crash14.C 1891414246b ./gcc/testsuite/g++.old-deja/g++.pt/crash15.C ! 2623046055b ./gcc/testsuite/g++.old-deja/g++.pt/crash16.C 3806215227b ./gcc/testsuite/g++.old-deja/g++.pt/crash17.C 2468320011b ./gcc/testsuite/g++.old-deja/g++.pt/crash18.C 2448971391b ./gcc/testsuite/g++.old-deja/g++.pt/crash19.C --- 9977,9983 ---- 2103079352b ./gcc/testsuite/g++.old-deja/g++.pt/crash13.C 4259627326b ./gcc/testsuite/g++.old-deja/g++.pt/crash14.C 1891414246b ./gcc/testsuite/g++.old-deja/g++.pt/crash15.C ! 2454938413b ./gcc/testsuite/g++.old-deja/g++.pt/crash16.C 3806215227b ./gcc/testsuite/g++.old-deja/g++.pt/crash17.C 2468320011b ./gcc/testsuite/g++.old-deja/g++.pt/crash18.C 2448971391b ./gcc/testsuite/g++.old-deja/g++.pt/crash19.C *************** *** 6362,6368 **** 248168869b ./gcc/testsuite/g++.old-deja/g++.pt/crash49.C 2620241700b ./gcc/testsuite/g++.old-deja/g++.pt/crash4.C 803889593b ./gcc/testsuite/g++.old-deja/g++.pt/crash50.C ! 3398132131b ./gcc/testsuite/g++.old-deja/g++.pt/crash51.C 4194603956b ./gcc/testsuite/g++.old-deja/g++.pt/crash52.C 491092947b ./gcc/testsuite/g++.old-deja/g++.pt/crash53.C 3642813625b ./gcc/testsuite/g++.old-deja/g++.pt/crash54.C --- 10016,10022 ---- 248168869b ./gcc/testsuite/g++.old-deja/g++.pt/crash49.C 2620241700b ./gcc/testsuite/g++.old-deja/g++.pt/crash4.C 803889593b ./gcc/testsuite/g++.old-deja/g++.pt/crash50.C ! 3389049910b ./gcc/testsuite/g++.old-deja/g++.pt/crash51.C 4194603956b ./gcc/testsuite/g++.old-deja/g++.pt/crash52.C 491092947b ./gcc/testsuite/g++.old-deja/g++.pt/crash53.C 3642813625b ./gcc/testsuite/g++.old-deja/g++.pt/crash54.C *************** *** 6378,6383 **** --- 10032,10039 ---- 3223409625b ./gcc/testsuite/g++.old-deja/g++.pt/crash63.C 3150696822b ./gcc/testsuite/g++.old-deja/g++.pt/crash64.C 3278220743b ./gcc/testsuite/g++.old-deja/g++.pt/crash65.C + 2950875437b ./gcc/testsuite/g++.old-deja/g++.pt/crash66.C + 1588727602b ./gcc/testsuite/g++.old-deja/g++.pt/crash67.C 2591611103b ./gcc/testsuite/g++.old-deja/g++.pt/crash68.C 2304216659b ./gcc/testsuite/g++.old-deja/g++.pt/crash6.C 3887562144b ./gcc/testsuite/g++.old-deja/g++.pt/crash7.C *************** *** 6387,6393 **** 1009070264b ./gcc/testsuite/g++.old-deja/g++.pt/ctor2.C 542513642b ./gcc/testsuite/g++.old-deja/g++.pt/debug1.C 4104205907b ./gcc/testsuite/g++.old-deja/g++.pt/decl1.C ! 389148473b ./gcc/testsuite/g++.old-deja/g++.pt/decl2.C 1112077051b ./gcc/testsuite/g++.old-deja/g++.pt/decl3.C 1579795236b ./gcc/testsuite/g++.old-deja/g++.pt/decl4.C 3073530878b ./gcc/testsuite/g++.old-deja/g++.pt/deduct1.C --- 10043,10049 ---- 1009070264b ./gcc/testsuite/g++.old-deja/g++.pt/ctor2.C 542513642b ./gcc/testsuite/g++.old-deja/g++.pt/debug1.C 4104205907b ./gcc/testsuite/g++.old-deja/g++.pt/decl1.C ! 3657390003b ./gcc/testsuite/g++.old-deja/g++.pt/decl2.C 1112077051b ./gcc/testsuite/g++.old-deja/g++.pt/decl3.C 1579795236b ./gcc/testsuite/g++.old-deja/g++.pt/decl4.C 3073530878b ./gcc/testsuite/g++.old-deja/g++.pt/deduct1.C *************** *** 6401,6406 **** --- 10057,10063 ---- 3439579652b ./gcc/testsuite/g++.old-deja/g++.pt/defarg11.C 3231347060b ./gcc/testsuite/g++.old-deja/g++.pt/defarg12.C 3348379576b ./gcc/testsuite/g++.old-deja/g++.pt/defarg13.C + 1334739447b ./gcc/testsuite/g++.old-deja/g++.pt/defarg14.C 975389866b ./gcc/testsuite/g++.old-deja/g++.pt/defarg2.C 1340096939b ./gcc/testsuite/g++.old-deja/g++.pt/defarg3.C 1845545956b ./gcc/testsuite/g++.old-deja/g++.pt/defarg4.C *************** *** 6572,6580 **** 2373771284b ./gcc/testsuite/g++.old-deja/g++.pt/goto2.C 3949127698b ./gcc/testsuite/g++.old-deja/g++.pt/goto.C 1470520127b ./gcc/testsuite/g++.old-deja/g++.pt/incomplete1.C ! 3510352662b ./gcc/testsuite/g++.old-deja/g++.pt/infinite1.C 2141463905b ./gcc/testsuite/g++.old-deja/g++.pt/inherit1.C ! 1571510235b ./gcc/testsuite/g++.old-deja/g++.pt/inherit2.C 393856408b ./gcc/testsuite/g++.old-deja/g++.pt/inject1.C 1666451974b ./gcc/testsuite/g++.old-deja/g++.pt/inject2.C 775587620b ./gcc/testsuite/g++.old-deja/g++.pt/inline1.C --- 10229,10237 ---- 2373771284b ./gcc/testsuite/g++.old-deja/g++.pt/goto2.C 3949127698b ./gcc/testsuite/g++.old-deja/g++.pt/goto.C 1470520127b ./gcc/testsuite/g++.old-deja/g++.pt/incomplete1.C ! 2675563938b ./gcc/testsuite/g++.old-deja/g++.pt/infinite1.C 2141463905b ./gcc/testsuite/g++.old-deja/g++.pt/inherit1.C ! 3554938548b ./gcc/testsuite/g++.old-deja/g++.pt/inherit2.C 393856408b ./gcc/testsuite/g++.old-deja/g++.pt/inject1.C 1666451974b ./gcc/testsuite/g++.old-deja/g++.pt/inject2.C 775587620b ./gcc/testsuite/g++.old-deja/g++.pt/inline1.C *************** *** 6752,6758 **** 2346801762b ./gcc/testsuite/g++.old-deja/g++.pt/nontype2.C 2564631917b ./gcc/testsuite/g++.old-deja/g++.pt/nontype3.C 4032766447b ./gcc/testsuite/g++.old-deja/g++.pt/nontype4.C ! 2460587031b ./gcc/testsuite/g++.old-deja/g++.pt/nontype5.C 2791152240b ./gcc/testsuite/g++.old-deja/g++.pt/nttp1.C 247002708b ./gcc/testsuite/g++.old-deja/g++.pt/nttp2.C 1278541513b ./gcc/testsuite/g++.old-deja/g++.pt/operator1.C --- 10409,10415 ---- 2346801762b ./gcc/testsuite/g++.old-deja/g++.pt/nontype2.C 2564631917b ./gcc/testsuite/g++.old-deja/g++.pt/nontype3.C 4032766447b ./gcc/testsuite/g++.old-deja/g++.pt/nontype4.C ! 1767300701b ./gcc/testsuite/g++.old-deja/g++.pt/nontype5.C 2791152240b ./gcc/testsuite/g++.old-deja/g++.pt/nttp1.C 247002708b ./gcc/testsuite/g++.old-deja/g++.pt/nttp2.C 1278541513b ./gcc/testsuite/g++.old-deja/g++.pt/operator1.C *************** *** 6761,6766 **** --- 10418,10424 ---- 2233076058b ./gcc/testsuite/g++.old-deja/g++.pt/overload12.C 567369625b ./gcc/testsuite/g++.old-deja/g++.pt/overload13.C 43242814b ./gcc/testsuite/g++.old-deja/g++.pt/overload14.C + 775259676b ./gcc/testsuite/g++.old-deja/g++.pt/overload15.C 2435336654b ./gcc/testsuite/g++.old-deja/g++.pt/overload1.C 1331381682b ./gcc/testsuite/g++.old-deja/g++.pt/overload2.C 2609432689b ./gcc/testsuite/g++.old-deja/g++.pt/overload3.C *************** *** 6819,6825 **** 411261988b ./gcc/testsuite/g++.old-deja/g++.pt/spec17.C 4048825100b ./gcc/testsuite/g++.old-deja/g++.pt/spec18.C 3877582914b ./gcc/testsuite/g++.old-deja/g++.pt/spec19.C ! 2028350994b ./gcc/testsuite/g++.old-deja/g++.pt/spec1.C 2791297069b ./gcc/testsuite/g++.old-deja/g++.pt/spec20.C 3113620134b ./gcc/testsuite/g++.old-deja/g++.pt/spec21.C 2983405950b ./gcc/testsuite/g++.old-deja/g++.pt/spec22.C --- 10477,10483 ---- 411261988b ./gcc/testsuite/g++.old-deja/g++.pt/spec17.C 4048825100b ./gcc/testsuite/g++.old-deja/g++.pt/spec18.C 3877582914b ./gcc/testsuite/g++.old-deja/g++.pt/spec19.C ! 991382684b ./gcc/testsuite/g++.old-deja/g++.pt/spec1.C 2791297069b ./gcc/testsuite/g++.old-deja/g++.pt/spec20.C 3113620134b ./gcc/testsuite/g++.old-deja/g++.pt/spec21.C 2983405950b ./gcc/testsuite/g++.old-deja/g++.pt/spec22.C *************** *** 6843,6848 **** --- 10501,10507 ---- 3573286877b ./gcc/testsuite/g++.old-deja/g++.pt/spec39.C 2986435997b ./gcc/testsuite/g++.old-deja/g++.pt/spec3.C 263033306b ./gcc/testsuite/g++.old-deja/g++.pt/spec40.C + 4257539281b ./gcc/testsuite/g++.old-deja/g++.pt/spec41.C 1203682774b ./gcc/testsuite/g++.old-deja/g++.pt/spec4.C 472020156b ./gcc/testsuite/g++.old-deja/g++.pt/spec5.C 2997305150b ./gcc/testsuite/g++.old-deja/g++.pt/spec6.C *************** *** 6850,6856 **** 2956825769b ./gcc/testsuite/g++.old-deja/g++.pt/spec8.C 689217773b ./gcc/testsuite/g++.old-deja/g++.pt/spec9.C 3499532117b ./gcc/testsuite/g++.old-deja/g++.pt/static10.C ! 3264521084b ./gcc/testsuite/g++.old-deja/g++.pt/static11.C 2178379561b ./gcc/testsuite/g++.old-deja/g++.pt/static1.C 3095826275b ./gcc/testsuite/g++.old-deja/g++.pt/static2.C 3043759182b ./gcc/testsuite/g++.old-deja/g++.pt/static3.C --- 10509,10515 ---- 2956825769b ./gcc/testsuite/g++.old-deja/g++.pt/spec8.C 689217773b ./gcc/testsuite/g++.old-deja/g++.pt/spec9.C 3499532117b ./gcc/testsuite/g++.old-deja/g++.pt/static10.C ! 3672678643b ./gcc/testsuite/g++.old-deja/g++.pt/static11.C 2178379561b ./gcc/testsuite/g++.old-deja/g++.pt/static1.C 3095826275b ./gcc/testsuite/g++.old-deja/g++.pt/static2.C 3043759182b ./gcc/testsuite/g++.old-deja/g++.pt/static3.C *************** *** 6988,6999 **** 1128115184b ./gcc/testsuite/g++.old-deja/g++.pt/typedef3.C 687887055b ./gcc/testsuite/g++.old-deja/g++.pt/typedef4.C 3197185389b ./gcc/testsuite/g++.old-deja/g++.pt/typename10.C ! 3587550596b ./gcc/testsuite/g++.old-deja/g++.pt/typename11.C 275086081b ./gcc/testsuite/g++.old-deja/g++.pt/typename12.C 2524443126b ./gcc/testsuite/g++.old-deja/g++.pt/typename13.C ! 1850210298b ./gcc/testsuite/g++.old-deja/g++.pt/typename14.C 1039841774b ./gcc/testsuite/g++.old-deja/g++.pt/typename15.C ! 3359087058b ./gcc/testsuite/g++.old-deja/g++.pt/typename16.C 4165656026b ./gcc/testsuite/g++.old-deja/g++.pt/typename17.C 2199791863b ./gcc/testsuite/g++.old-deja/g++.pt/typename18.C 1657062514b ./gcc/testsuite/g++.old-deja/g++.pt/typename19.C --- 10647,10658 ---- 1128115184b ./gcc/testsuite/g++.old-deja/g++.pt/typedef3.C 687887055b ./gcc/testsuite/g++.old-deja/g++.pt/typedef4.C 3197185389b ./gcc/testsuite/g++.old-deja/g++.pt/typename10.C ! 11764674b ./gcc/testsuite/g++.old-deja/g++.pt/typename11.C 275086081b ./gcc/testsuite/g++.old-deja/g++.pt/typename12.C 2524443126b ./gcc/testsuite/g++.old-deja/g++.pt/typename13.C ! 1552645689b ./gcc/testsuite/g++.old-deja/g++.pt/typename14.C 1039841774b ./gcc/testsuite/g++.old-deja/g++.pt/typename15.C ! 2603845994b ./gcc/testsuite/g++.old-deja/g++.pt/typename16.C 4165656026b ./gcc/testsuite/g++.old-deja/g++.pt/typename17.C 2199791863b ./gcc/testsuite/g++.old-deja/g++.pt/typename18.C 1657062514b ./gcc/testsuite/g++.old-deja/g++.pt/typename19.C *************** *** 7008,7018 **** 1423713632b ./gcc/testsuite/g++.old-deja/g++.pt/typename27.C 1479397024b ./gcc/testsuite/g++.old-deja/g++.pt/typename28.C 1202424634b ./gcc/testsuite/g++.old-deja/g++.pt/typename2.C ! 1990305097b ./gcc/testsuite/g++.old-deja/g++.pt/typename3.C ! 929522058b ./gcc/testsuite/g++.old-deja/g++.pt/typename4.C ! 836974900b ./gcc/testsuite/g++.old-deja/g++.pt/typename5.C 1190749888b ./gcc/testsuite/g++.old-deja/g++.pt/typename6.C ! 466462912b ./gcc/testsuite/g++.old-deja/g++.pt/typename7.C 539346100b ./gcc/testsuite/g++.old-deja/g++.pt/typename8.C 1531696057b ./gcc/testsuite/g++.old-deja/g++.pt/typename9.C 2013928518b ./gcc/testsuite/g++.old-deja/g++.pt/unify1.C --- 10667,10677 ---- 1423713632b ./gcc/testsuite/g++.old-deja/g++.pt/typename27.C 1479397024b ./gcc/testsuite/g++.old-deja/g++.pt/typename28.C 1202424634b ./gcc/testsuite/g++.old-deja/g++.pt/typename2.C ! 671867998b ./gcc/testsuite/g++.old-deja/g++.pt/typename3.C ! 516047961b ./gcc/testsuite/g++.old-deja/g++.pt/typename4.C ! 3990219214b ./gcc/testsuite/g++.old-deja/g++.pt/typename5.C 1190749888b ./gcc/testsuite/g++.old-deja/g++.pt/typename6.C ! 1106680146b ./gcc/testsuite/g++.old-deja/g++.pt/typename7.C 539346100b ./gcc/testsuite/g++.old-deja/g++.pt/typename8.C 1531696057b ./gcc/testsuite/g++.old-deja/g++.pt/typename9.C 2013928518b ./gcc/testsuite/g++.old-deja/g++.pt/unify1.C *************** *** 7040,7046 **** 1415873556b ./gcc/testsuite/g++.old-deja/g++.rfg/00321_01-.C 1112275657b ./gcc/testsuite/g++.old-deja/g++.rfg/00324_02-.C 4001281008b ./gcc/testsuite/g++.old-deja/g++.robertl/980310-1.C - 1744537515b ./gcc/testsuite/g++.old-deja/g++.robertl/eb101.C 3472844044b ./gcc/testsuite/g++.old-deja/g++.robertl/eb102.C 2443648446b ./gcc/testsuite/g++.old-deja/g++.robertl/eb103.C 2507881262b ./gcc/testsuite/g++.old-deja/g++.robertl/eb104.C --- 10699,10704 ---- *************** *** 7072,7078 **** 2811911547b ./gcc/testsuite/g++.old-deja/g++.robertl/eb129a.C 551639476b ./gcc/testsuite/g++.old-deja/g++.robertl/eb129.C 158711949b ./gcc/testsuite/g++.old-deja/g++.robertl/eb12.C ! 4778977b ./gcc/testsuite/g++.old-deja/g++.robertl/eb130.C 2576744469b ./gcc/testsuite/g++.old-deja/g++.robertl/eb131.C 191646019b ./gcc/testsuite/g++.old-deja/g++.robertl/eb132.C 2212505012b ./gcc/testsuite/g++.old-deja/g++.robertl/eb133a.C --- 10730,10736 ---- 2811911547b ./gcc/testsuite/g++.old-deja/g++.robertl/eb129a.C 551639476b ./gcc/testsuite/g++.old-deja/g++.robertl/eb129.C 158711949b ./gcc/testsuite/g++.old-deja/g++.robertl/eb12.C ! 3610132478b ./gcc/testsuite/g++.old-deja/g++.robertl/eb130.C 2576744469b ./gcc/testsuite/g++.old-deja/g++.robertl/eb131.C 191646019b ./gcc/testsuite/g++.old-deja/g++.robertl/eb132.C 2212505012b ./gcc/testsuite/g++.old-deja/g++.robertl/eb133a.C *************** *** 7082,7088 **** 3851013524b ./gcc/testsuite/g++.old-deja/g++.robertl/eb14.C 8426984b ./gcc/testsuite/g++.old-deja/g++.robertl/eb15.C 2805277324b ./gcc/testsuite/g++.old-deja/g++.robertl/eb16.C ! 900862765b ./gcc/testsuite/g++.old-deja/g++.robertl/eb17.C 2664767884b ./gcc/testsuite/g++.old-deja/g++.robertl/eb18.C 526517709b ./gcc/testsuite/g++.old-deja/g++.robertl/eb19.C 461969397b ./gcc/testsuite/g++.old-deja/g++.robertl/eb20.C --- 10740,10746 ---- 3851013524b ./gcc/testsuite/g++.old-deja/g++.robertl/eb14.C 8426984b ./gcc/testsuite/g++.old-deja/g++.robertl/eb15.C 2805277324b ./gcc/testsuite/g++.old-deja/g++.robertl/eb16.C ! 1023058352b ./gcc/testsuite/g++.old-deja/g++.robertl/eb17.C 2664767884b ./gcc/testsuite/g++.old-deja/g++.robertl/eb18.C 526517709b ./gcc/testsuite/g++.old-deja/g++.robertl/eb19.C 461969397b ./gcc/testsuite/g++.old-deja/g++.robertl/eb20.C *************** *** 7095,7101 **** 1890436003b ./gcc/testsuite/g++.old-deja/g++.robertl/eb28.C 3453020821b ./gcc/testsuite/g++.old-deja/g++.robertl/eb29.C 3780933159b ./gcc/testsuite/g++.old-deja/g++.robertl/eb2.C ! 4204273145b ./gcc/testsuite/g++.old-deja/g++.robertl/eb30.C 3084203745b ./gcc/testsuite/g++.old-deja/g++.robertl/eb31.C 4187617186b ./gcc/testsuite/g++.old-deja/g++.robertl/eb32.C 220886230b ./gcc/testsuite/g++.old-deja/g++.robertl/eb33.C --- 10753,10759 ---- 1890436003b ./gcc/testsuite/g++.old-deja/g++.robertl/eb28.C 3453020821b ./gcc/testsuite/g++.old-deja/g++.robertl/eb29.C 3780933159b ./gcc/testsuite/g++.old-deja/g++.robertl/eb2.C ! 563892057b ./gcc/testsuite/g++.old-deja/g++.robertl/eb30.C 3084203745b ./gcc/testsuite/g++.old-deja/g++.robertl/eb31.C 4187617186b ./gcc/testsuite/g++.old-deja/g++.robertl/eb32.C 220886230b ./gcc/testsuite/g++.old-deja/g++.robertl/eb33.C *************** *** 7107,7117 **** 528193552b ./gcc/testsuite/g++.old-deja/g++.robertl/eb39.C 2212669672b ./gcc/testsuite/g++.old-deja/g++.robertl/eb3.C 507123073b ./gcc/testsuite/g++.old-deja/g++.robertl/eb41.C - 764874431b ./gcc/testsuite/g++.old-deja/g++.robertl/eb42.C 3295582703b ./gcc/testsuite/g++.old-deja/g++.robertl/eb43.C 3397322273b ./gcc/testsuite/g++.old-deja/g++.robertl/eb44.C 687602470b ./gcc/testsuite/g++.old-deja/g++.robertl/eb45.C ! 2815630241b ./gcc/testsuite/g++.old-deja/g++.robertl/eb46.C 753241876b ./gcc/testsuite/g++.old-deja/g++.robertl/eb48.C 3504050873b ./gcc/testsuite/g++.old-deja/g++.robertl/eb49.C 291255111b ./gcc/testsuite/g++.old-deja/g++.robertl/eb4.C --- 10765,10774 ---- 528193552b ./gcc/testsuite/g++.old-deja/g++.robertl/eb39.C 2212669672b ./gcc/testsuite/g++.old-deja/g++.robertl/eb3.C 507123073b ./gcc/testsuite/g++.old-deja/g++.robertl/eb41.C 3295582703b ./gcc/testsuite/g++.old-deja/g++.robertl/eb43.C 3397322273b ./gcc/testsuite/g++.old-deja/g++.robertl/eb44.C 687602470b ./gcc/testsuite/g++.old-deja/g++.robertl/eb45.C ! 804543247b ./gcc/testsuite/g++.old-deja/g++.robertl/eb46.C 753241876b ./gcc/testsuite/g++.old-deja/g++.robertl/eb48.C 3504050873b ./gcc/testsuite/g++.old-deja/g++.robertl/eb49.C 291255111b ./gcc/testsuite/g++.old-deja/g++.robertl/eb4.C *************** *** 7120,7126 **** 3209054875b ./gcc/testsuite/g++.old-deja/g++.robertl/eb52.C 710220281b ./gcc/testsuite/g++.old-deja/g++.robertl/eb54.C 2958452317b ./gcc/testsuite/g++.old-deja/g++.robertl/eb55.C ! 2755526955b ./gcc/testsuite/g++.old-deja/g++.robertl/eb56.C 1356497150b ./gcc/testsuite/g++.old-deja/g++.robertl/eb57.C 3407397105b ./gcc/testsuite/g++.old-deja/g++.robertl/eb58.C 794738043b ./gcc/testsuite/g++.old-deja/g++.robertl/eb59.C --- 10777,10783 ---- 3209054875b ./gcc/testsuite/g++.old-deja/g++.robertl/eb52.C 710220281b ./gcc/testsuite/g++.old-deja/g++.robertl/eb54.C 2958452317b ./gcc/testsuite/g++.old-deja/g++.robertl/eb55.C ! 925139048b ./gcc/testsuite/g++.old-deja/g++.robertl/eb56.C 1356497150b ./gcc/testsuite/g++.old-deja/g++.robertl/eb57.C 3407397105b ./gcc/testsuite/g++.old-deja/g++.robertl/eb58.C 794738043b ./gcc/testsuite/g++.old-deja/g++.robertl/eb59.C *************** *** 7131,7137 **** 4040217083b ./gcc/testsuite/g++.old-deja/g++.robertl/eb63.C 1956073784b ./gcc/testsuite/g++.old-deja/g++.robertl/eb64.C 4008623056b ./gcc/testsuite/g++.old-deja/g++.robertl/eb65.C ! 4124326108b ./gcc/testsuite/g++.old-deja/g++.robertl/eb66.C 3389307963b ./gcc/testsuite/g++.old-deja/g++.robertl/eb67.C 4223737421b ./gcc/testsuite/g++.old-deja/g++.robertl/eb69.C 1997456294b ./gcc/testsuite/g++.old-deja/g++.robertl/eb6.C --- 10788,10794 ---- 4040217083b ./gcc/testsuite/g++.old-deja/g++.robertl/eb63.C 1956073784b ./gcc/testsuite/g++.old-deja/g++.robertl/eb64.C 4008623056b ./gcc/testsuite/g++.old-deja/g++.robertl/eb65.C ! 980372542b ./gcc/testsuite/g++.old-deja/g++.robertl/eb66.C 3389307963b ./gcc/testsuite/g++.old-deja/g++.robertl/eb67.C 4223737421b ./gcc/testsuite/g++.old-deja/g++.robertl/eb69.C 1997456294b ./gcc/testsuite/g++.old-deja/g++.robertl/eb6.C *************** *** 7162,7168 **** 2908163544b ./gcc/testsuite/g++.old-deja/g++.robertl/eb97.C 131102227b ./gcc/testsuite/g++.old-deja/g++.robertl/eb98.C 2054173722b ./gcc/testsuite/g++.old-deja/g++.robertl/eb99.C ! 1559463697b ./gcc/testsuite/g++.old-deja/g++.robertl/eb9.C 3496760893b ./gcc/testsuite/g++.old-deja/g++.robertl/ebnull.C 1294688249b ./gcc/testsuite/g++.old-deja/g++.robertl/ebnull-cast.C 2390910991b ./gcc/testsuite/g++.old-deja/g++.robertl/ebnull-oldcast.C --- 10819,10825 ---- 2908163544b ./gcc/testsuite/g++.old-deja/g++.robertl/eb97.C 131102227b ./gcc/testsuite/g++.old-deja/g++.robertl/eb98.C 2054173722b ./gcc/testsuite/g++.old-deja/g++.robertl/eb99.C ! 3273280926b ./gcc/testsuite/g++.old-deja/g++.robertl/eb9.C 3496760893b ./gcc/testsuite/g++.old-deja/g++.robertl/ebnull.C 1294688249b ./gcc/testsuite/g++.old-deja/g++.robertl/ebnull-cast.C 2390910991b ./gcc/testsuite/g++.old-deja/g++.robertl/ebnull-oldcast.C *************** *** 7178,7208 **** 2792305431b ./gcc/testsuite/g++.old-deja/g++.robertl/ice990323-5.C 3593716546b ./gcc/testsuite/g++.old-deja/g++.robertl/README 2167858031b ./gcc/testsuite/g++.old-deja/g++.warn/cast-align1.C 478428580b ./gcc/testsuite/g++.old-deja/g++.warn/flow1.C 1434994100b ./gcc/testsuite/g++.old-deja/g++.warn/impint2.C 228848226b ./gcc/testsuite/g++.old-deja/g++.warn/impint.C 308484502b ./gcc/testsuite/g++.old-deja/g++.warn/inline.C 3053994732b ./gcc/testsuite/g++.old-deja/g++.warn/iomanip.C 3603456747b ./gcc/testsuite/g++.old-deja/g++.warn/virt1.C ! 1192919505b ./gcc/testsuite/g++.old-deja/old-deja.exp ! 3480506200b ./gcc/testsuite/lib/chill.exp 1387283607b ./gcc/testsuite/lib/c-torture.exp ! 1219011657b ./gcc/testsuite/lib/file-format.exp 246962046b ./gcc/testsuite/lib/f-torture.exp ! 3802109199b ./gcc/testsuite/lib/g77-dg.exp ! 1805589965b ./gcc/testsuite/lib/g77.exp ! 1223951383b ./gcc/testsuite/lib/gcc-dg.exp ! 1082813114b ./gcc/testsuite/lib/gcc.exp ! 1898640330b ./gcc/testsuite/lib/g++-dg.exp ! 1264458001b ./gcc/testsuite/lib/g++.exp ! 3009729864b ./gcc/testsuite/lib/mike-g77.exp ! 3143525169b ./gcc/testsuite/lib/mike-gcc.exp ! 2072712920b ./gcc/testsuite/lib/mike-g++.exp ! 1365070112b ./gcc/testsuite/lib/objc.exp ! 3056147734b ./gcc/testsuite/lib/objc-torture.exp ! 3931030396b ./gcc/testsuite/lib/old-dejagnu.exp ! 2677371927b ./gcc/testsuite/lib/scanasm.exp 743118127b ./gcc/testsuite/lib/target-supports.exp 3837394038b ./gcc/testsuite/objc/execute/accessing_ivars.m 2710215022b ./gcc/testsuite/objc/execute/bf-10.m 2657298938b ./gcc/testsuite/objc/execute/bf-11.m --- 10835,10891 ---- 2792305431b ./gcc/testsuite/g++.old-deja/g++.robertl/ice990323-5.C 3593716546b ./gcc/testsuite/g++.old-deja/g++.robertl/README 2167858031b ./gcc/testsuite/g++.old-deja/g++.warn/cast-align1.C + 2257841595b ./gcc/testsuite/g++.old-deja/g++.warn/compare1.C 478428580b ./gcc/testsuite/g++.old-deja/g++.warn/flow1.C 1434994100b ./gcc/testsuite/g++.old-deja/g++.warn/impint2.C 228848226b ./gcc/testsuite/g++.old-deja/g++.warn/impint.C 308484502b ./gcc/testsuite/g++.old-deja/g++.warn/inline.C 3053994732b ./gcc/testsuite/g++.old-deja/g++.warn/iomanip.C 3603456747b ./gcc/testsuite/g++.old-deja/g++.warn/virt1.C ! 1241992731b ./gcc/testsuite/g++.old-deja/old-deja.exp 1387283607b ./gcc/testsuite/lib/c-torture.exp ! 827216288b ./gcc/testsuite/lib/file-format.exp 246962046b ./gcc/testsuite/lib/f-torture.exp ! 2197210451b ./gcc/testsuite/lib/g77-dg.exp ! 4020741824b ./gcc/testsuite/lib/g77.exp ! 3365202398b ./gcc/testsuite/lib/gcc-defs.exp ! 3402161270b ./gcc/testsuite/lib/gcc-dg.exp ! 3313214307b ./gcc/testsuite/lib/gcc.exp ! 1748156049b ./gcc/testsuite/lib/gcov.exp ! 1025717576b ./gcc/testsuite/lib/g++-dg.exp ! 590309199b ./gcc/testsuite/lib/g++.exp ! 1785660070b ./gcc/testsuite/lib/mike-g77.exp ! 3188273403b ./gcc/testsuite/lib/mike-gcc.exp ! 2511438650b ./gcc/testsuite/lib/mike-g++.exp ! 576875699b ./gcc/testsuite/lib/objc-dg.exp ! 2555356069b ./gcc/testsuite/lib/objc.exp ! 3849564329b ./gcc/testsuite/lib/objc-torture.exp ! 1673351574b ./gcc/testsuite/lib/old-dejagnu.exp ! 766192419b ./gcc/testsuite/lib/profopt.exp ! 1029251629b ./gcc/testsuite/lib/prune.exp ! 2428636490b ./gcc/testsuite/lib/scanasm.exp 743118127b ./gcc/testsuite/lib/target-supports.exp + 3665869615b ./gcc/testsuite/objc/compile/20011211-1.m + 1806367206b ./gcc/testsuite/objc/compile/compile.exp + 1369080733b ./gcc/testsuite/objc.dg/alias.m + 3316559321b ./gcc/testsuite/objc.dg/class-1.m + 3678679752b ./gcc/testsuite/objc.dg/class-2.m + 1411503086b ./gcc/testsuite/objc.dg/const-str-1.m + 1342714795b ./gcc/testsuite/objc.dg/const-str-2.m + 1541394849b ./gcc/testsuite/objc.dg/dg.exp + 1505392257b ./gcc/testsuite/objc.dg/fwd-proto-1.m + 2449513844b ./gcc/testsuite/objc.dg/id-1.m + 2495249432b ./gcc/testsuite/objc.dg/local-decl-1.m + 1667427564b ./gcc/testsuite/objc.dg/method-1.m + 2835356210b ./gcc/testsuite/objc.dg/method-2.m + 1830729571b ./gcc/testsuite/objc.dg/naming-1.m + 250748297b ./gcc/testsuite/objc.dg/naming-2.m + 2785734223b ./gcc/testsuite/objc.dg/proto-hier-1.m + 888349193b ./gcc/testsuite/objc.dg/special/special.exp + 3208621557b ./gcc/testsuite/objc.dg/special/unclaimed-category-1a.m + 3078900770b ./gcc/testsuite/objc.dg/special/unclaimed-category-1.h + 1931469026b ./gcc/testsuite/objc.dg/special/unclaimed-category-1.m + 967308749b ./gcc/testsuite/objc.dg/super-class-1.m 3837394038b ./gcc/testsuite/objc/execute/accessing_ivars.m 2710215022b ./gcc/testsuite/objc/execute/bf-10.m 2657298938b ./gcc/testsuite/objc/execute/bf-11.m *************** *** 7216,7221 **** --- 10899,10905 ---- 3674443693b ./gcc/testsuite/objc/execute/bf-19.m 1927175126b ./gcc/testsuite/objc/execute/bf-1.m 2184610020b ./gcc/testsuite/objc/execute/bf-20.m + 2019969445b ./gcc/testsuite/objc/execute/bf-21.m 3212450864b ./gcc/testsuite/objc/execute/bf-2.m 80833366b ./gcc/testsuite/objc/execute/bf-3.m 1154895973b ./gcc/testsuite/objc/execute/bf-4.m *************** *** 7227,7233 **** 3485125753b ./gcc/testsuite/objc/execute/bf-common.h 490840694b ./gcc/testsuite/objc/execute/bycopy-1.m 494931174b ./gcc/testsuite/objc/execute/bycopy-2.m ! 3181394643b ./gcc/testsuite/objc/execute/bycopy-3.m 3022811812b ./gcc/testsuite/objc/execute/class-10.m 1808680681b ./gcc/testsuite/objc/execute/class-11.m 3170467444b ./gcc/testsuite/objc/execute/class-12.m --- 10911,10917 ---- 3485125753b ./gcc/testsuite/objc/execute/bf-common.h 490840694b ./gcc/testsuite/objc/execute/bycopy-1.m 494931174b ./gcc/testsuite/objc/execute/bycopy-2.m ! 1730034329b ./gcc/testsuite/objc/execute/bycopy-3.m 3022811812b ./gcc/testsuite/objc/execute/class-10.m 1808680681b ./gcc/testsuite/objc/execute/class-11.m 3170467444b ./gcc/testsuite/objc/execute/class-12.m *************** *** 7242,7261 **** 3834458842b ./gcc/testsuite/objc/execute/class-7.m 3671287888b ./gcc/testsuite/objc/execute/class-8.m 3384901465b ./gcc/testsuite/objc/execute/class-9.m 68195390b ./gcc/testsuite/objc/execute/class-tests-1.h 1742460237b ./gcc/testsuite/objc/execute/class-tests-2.h 1707819077b ./gcc/testsuite/objc/execute/_cmd.m 2668180928b ./gcc/testsuite/objc/execute/compatibility_alias.m 2525550462b ./gcc/testsuite/objc/execute/encode-1.m ! 3597168293b ./gcc/testsuite/objc/execute/execute.exp 2364697004b ./gcc/testsuite/objc/execute/fdecl.m 2041731208b ./gcc/testsuite/objc/execute/formal_protocol-1.m 1183019794b ./gcc/testsuite/objc/execute/formal_protocol-2.m 964580640b ./gcc/testsuite/objc/execute/formal_protocol-3.m 382692504b ./gcc/testsuite/objc/execute/formal_protocol-4.m 3973735702b ./gcc/testsuite/objc/execute/formal_protocol-5.m - 3644699221b ./gcc/testsuite/objc/execute/formal_protocol-6.cexp 2144981305b ./gcc/testsuite/objc/execute/formal_protocol-6.m 99644718b ./gcc/testsuite/objc/execute/formal_protocol-7.m 2696823090b ./gcc/testsuite/objc/execute/IMP.m 1013228926b ./gcc/testsuite/objc/execute/informal_protocol.m --- 10926,10949 ---- 3834458842b ./gcc/testsuite/objc/execute/class-7.m 3671287888b ./gcc/testsuite/objc/execute/class-8.m 3384901465b ./gcc/testsuite/objc/execute/class-9.m + 4110777484b ./gcc/testsuite/objc/execute/class_self-1.m + 1951268392b ./gcc/testsuite/objc/execute/class_self-2.m 68195390b ./gcc/testsuite/objc/execute/class-tests-1.h 1742460237b ./gcc/testsuite/objc/execute/class-tests-2.h 1707819077b ./gcc/testsuite/objc/execute/_cmd.m 2668180928b ./gcc/testsuite/objc/execute/compatibility_alias.m 2525550462b ./gcc/testsuite/objc/execute/encode-1.m ! 2615444748b ./gcc/testsuite/objc/execute/enumeration-1.m ! 594446998b ./gcc/testsuite/objc/execute/enumeration-2.m ! 1013968222b ./gcc/testsuite/objc/execute/execute.exp 2364697004b ./gcc/testsuite/objc/execute/fdecl.m 2041731208b ./gcc/testsuite/objc/execute/formal_protocol-1.m 1183019794b ./gcc/testsuite/objc/execute/formal_protocol-2.m 964580640b ./gcc/testsuite/objc/execute/formal_protocol-3.m 382692504b ./gcc/testsuite/objc/execute/formal_protocol-4.m 3973735702b ./gcc/testsuite/objc/execute/formal_protocol-5.m 2144981305b ./gcc/testsuite/objc/execute/formal_protocol-6.m + 3644699221b ./gcc/testsuite/objc/execute/formal_protocol-6.x 99644718b ./gcc/testsuite/objc/execute/formal_protocol-7.m 2696823090b ./gcc/testsuite/objc/execute/IMP.m 1013228926b ./gcc/testsuite/objc/execute/informal_protocol.m *************** *** 7272,7278 **** 837055144b ./gcc/testsuite/objc/execute/np-2.m 936059862b ./gcc/testsuite/objc/execute/object_is_class.m 1811140144b ./gcc/testsuite/objc/execute/object_is_meta_class.m - 3244628587b ./gcc/testsuite/objc/execute/paste.m 3444127895b ./gcc/testsuite/objc/execute/private.m 1487670997b ./gcc/testsuite/objc/execute/protocol.m 3592928955b ./gcc/testsuite/objc/execute/redefining_self.m --- 10960,10965 ---- *************** *** 7288,7360 **** 986418331b ./gcc/testsuite/README 4258789052b ./gcc/testsuite/README.g++ 174183124b ./gcc/testsuite/README.gcc ! 2056968410b ./gcc/timevar.c ! 780535585b ./gcc/timevar.def ! 3918443491b ./gcc/timevar.h ! 697833503b ./gcc/tlink.c ! 3644362593b ./gcc/toplev.c ! 3421121434b ./gcc/toplev.h ! 3381960764b ./gcc/tradcif.c ! 2773797431b ./gcc/tradcif.y ! 3407200617b ./gcc/tradcpp.c ! 1987124132b ./gcc/tradcpp.h ! 4149158830b ./gcc/tree.c ! 1441632713b ./gcc/tree.def ! 3111116672b ./gcc/tree.h ! 231560538b ./gcc/tsystem.h 4139263293b ./gcc/typeclass.h ! 17641651b ./gcc/unprotoize.c ! 1475109513b ./gcc/unroll.c ! 1325164416b ./gcc/unwind-dw2.c ! 624853400b ./gcc/unwind-dw2-fde.c ! 2579082273b ./gcc/unwind-dw2-fde.h ! 1716444183b ./gcc/unwind.h ! 3680807945b ./gcc/unwind.inc ! 2257776618b ./gcc/unwind-pe.h ! 2658132252b ./gcc/unwind-sjlj.c ! 1491937623b ./gcc/varasm.c ! 740604337b ./gcc/varray.c ! 3918364708b ./gcc/varray.h ! 1915182644b ./gcc/version.c ! 1227851131b ./gcc/version.h ! 1040256635b ./gcc/vmsconfig.com ! 4121715740b ./gcc/xcoffout.c ! 2574034949b ./gcc/xcoffout.h 156832288b ./GNATS 2219513221b ./gnats.html ! 888917931b ./include/ansidecl.h ! 2481221985b ./include/ChangeLog 2171125041b ./include/COPYING ! 1789350587b ./include/demangle.h ! 2980645374b ./include/dyn-string.h ! 1268417702b ./include/floatformat.h ! 1425556021b ./include/fnmatch.h ! 64215250b ./include/getopt.h ! 179144212b ./include/hashtab.h ! 2310644814b ./include/libiberty.h ! 3466131698b ./include/md5.h ! 839668154b ./include/objalloc.h ! 2986057194b ./include/obstack.h ! 4166662235b ./include/partition.h ! 276097960b ./include/safe-ctype.h ! 3414810753b ./include/sort.h ! 176339077b ./include/splay-tree.h 1653599470b ./include/symcat.h ! 3074338500b ./INSTALL/binaries.html ! 2803750908b ./INSTALL/build.html ! 566320920b ./INSTALL/configure.html ! 3528655914b ./INSTALL/download.html ! 95093851b ./INSTALL/finalinstall.html ! 3711504199b ./INSTALL/gfdl.html ! 3430333701b ./INSTALL/index.html 2229468985b ./INSTALL/README ! 4171599065b ./install-sh ! 2212673202b ./INSTALL/specific.html ! 628896210b ./INSTALL/test.html ! 1578109026b ./libf2c/ChangeLog 1973941211b ./libf2c/changes.netlib ! 622554075b ./libf2c/configure ! 3822530789b ./libf2c/configure.in 2487502900b ./libf2c/disclaimer.netlib 332556269b ./libf2c/f2cext.c 259100451b ./libf2c/f2c.h --- 10975,11058 ---- 986418331b ./gcc/testsuite/README 4258789052b ./gcc/testsuite/README.g++ 174183124b ./gcc/testsuite/README.gcc ! 214354681b ./gcc/timevar.c ! 2559007517b ./gcc/timevar.def ! 2115869626b ./gcc/timevar.h ! 2335446483b ./gcc/tlink.c ! 175975850b ./gcc/toplev.c ! 1100253771b ./gcc/toplev.h ! 2851581967b ./gcc/tradcif.c ! 840149782b ./gcc/tradcif.y ! 1783803443b ./gcc/tradcpp.c ! 133942480b ./gcc/tradcpp.h ! 816276340b ./gcc/tree.c ! 1914541060b ./gcc/tree.def ! 1565760610b ./gcc/tree-dump.c ! 177026127b ./gcc/tree-dump.h ! 3303657849b ./gcc/tree.h ! 209817651b ./gcc/tree-inline.c ! 2000795530b ./gcc/tree-inline.h ! 2106315745b ./gcc/tsystem.h 4139263293b ./gcc/typeclass.h ! 3460417697b ./gcc/unroll.c ! 3994883910b ./gcc/unwind-dw2.c ! 939184029b ./gcc/unwind-dw2-fde.c ! 2451297709b ./gcc/unwind-dw2-fde-glibc.c ! 2681777274b ./gcc/unwind-dw2-fde.h ! 4110084340b ./gcc/unwind.h ! 1788741054b ./gcc/unwind.inc ! 1733200042b ./gcc/unwind-pe.h ! 3015631845b ./gcc/unwind-sjlj.c ! 1633260393b ./gcc/varasm.c ! 1377429075b ./gcc/varray.c ! 251576980b ./gcc/varray.h ! 1240332072b ./gcc/version.c ! 835289284b ./gcc/version.h ! 1602668013b ./gcc/vmsdbg.h ! 4159431942b ./gcc/vmsdbgout.c ! 3414725237b ./gcc/xcoffout.c ! 241048359b ./gcc/xcoffout.h 156832288b ./GNATS 2219513221b ./gnats.html ! 218913669b ./include/ansidecl.h ! 501501100b ./include/ChangeLog 2171125041b ./include/COPYING ! 3472518673b ./include/demangle.h ! 524172850b ./include/dyn-string.h ! 3966992879b ./include/fibheap.h ! 3882244111b ./include/floatformat.h ! 1934715875b ./include/fnmatch.h ! 2129795953b ./include/getopt.h ! 3613614297b ./include/hashtab.h ! 1889274764b ./include/libiberty.h ! 2315750201b ./include/md5.h ! 1017179691b ./include/objalloc.h ! 2663239037b ./include/obstack.h ! 1121284874b ./include/partition.h ! 618378141b ./include/safe-ctype.h ! 1944369318b ./include/sort.h ! 2658328396b ./include/splay-tree.h 1653599470b ./include/symcat.h ! 1386762946b ./include/ternary.h ! 1261882580b ./include/xregex2.h ! 1151436348b ./include/xregex.h ! 3141216929b ./INSTALL/binaries.html ! 977917286b ./INSTALL/build.html ! 1105563578b ./INSTALL/configure.html ! 478604867b ./INSTALL/download.html ! 2210419938b ./INSTALL/finalinstall.html ! 2173681035b ./INSTALL/gfdl.html ! 2452615433b ./INSTALL/index.html ! 353693005b ./INSTALL/old.html 2229468985b ./INSTALL/README ! 656627656b ./install-sh ! 1163581470b ./INSTALL/specific.html ! 3807738351b ./INSTALL/test.html ! 2475843866b ./libf2c/aclocal.m4 ! 1600761915b ./libf2c/ChangeLog 1973941211b ./libf2c/changes.netlib ! 1856804015b ./libf2c/configure ! 444707888b ./libf2c/configure.in 2487502900b ./libf2c/disclaimer.netlib 332556269b ./libf2c/f2cext.c 259100451b ./libf2c/f2c.h *************** *** 7366,7373 **** 1754542093b ./libf2c/libF77/c_div.c 3847115202b ./libf2c/libF77/c_exp.c 2878052462b ./libf2c/libF77/c_log.c ! 2842305275b ./libf2c/libF77/configure ! 876621133b ./libf2c/libF77/configure.in 3389634672b ./libf2c/libF77/c_sin.c 1183895118b ./libf2c/libF77/c_sqrt.c 3030188690b ./libf2c/libF77/d_abs.c --- 11064,11071 ---- 1754542093b ./libf2c/libF77/c_div.c 3847115202b ./libf2c/libF77/c_exp.c 2878052462b ./libf2c/libF77/c_log.c ! 871413835b ./libf2c/libF77/configure ! 937702981b ./libf2c/libF77/configure.in 3389634672b ./libf2c/libF77/c_sin.c 1183895118b ./libf2c/libF77/c_sqrt.c 3030188690b ./libf2c/libF77/d_abs.c *************** *** 7434,7440 **** 1122360099b ./libf2c/libF77/l_le.c 3320765614b ./libf2c/libF77/l_lt.c 1531755714b ./libf2c/libF77/main.c ! 3068841118b ./libf2c/libF77/Makefile.in 1177519321b ./libf2c/libF77/makefile.netlib 1384146782b ./libf2c/libF77/Notice 3561723582b ./libf2c/libF77/pow_ci.c --- 11132,11138 ---- 1122360099b ./libf2c/libF77/l_le.c 3320765614b ./libf2c/libF77/l_lt.c 1531755714b ./libf2c/libF77/main.c ! 2048561220b ./libf2c/libF77/Makefile.in 1177519321b ./libf2c/libF77/makefile.netlib 1384146782b ./libf2c/libF77/Notice 3561723582b ./libf2c/libF77/pow_ci.c *************** *** 7484,7490 **** 2593705873b ./libf2c/libF77/s_rnge.c 3862265148b ./libf2c/libF77/s_stop.c 113341864b ./libf2c/libF77/system_.c ! 1248986055b ./libf2c/libF77/Version.c 1937893648b ./libf2c/libF77/z_abs.c 2431309812b ./libf2c/libF77/z_cos.c 4069203393b ./libf2c/libF77/z_div.c --- 11182,11188 ---- 2593705873b ./libf2c/libF77/s_rnge.c 3862265148b ./libf2c/libF77/s_stop.c 113341864b ./libf2c/libF77/system_.c ! 3524728642b ./libf2c/libF77/Version.c 1937893648b ./libf2c/libF77/z_abs.c 2431309812b ./libf2c/libF77/z_cos.c 4069203393b ./libf2c/libF77/z_div.c *************** *** 7492,7541 **** 391907002b ./libf2c/libF77/z_log.c 2332417514b ./libf2c/libF77/z_sin.c 4013824581b ./libf2c/libF77/z_sqrt.c ! 1131505415b ./libf2c/libI77/backspace.c 2398093876b ./libf2c/libI77/close.c ! 3931934799b ./libf2c/libI77/config.h.in ! 1852198171b ./libf2c/libI77/configure ! 3736779334b ./libf2c/libI77/configure.in ! 3018153615b ./libf2c/libI77/dfe.c 1498544240b ./libf2c/libI77/dolio.c ! 4283690771b ./libf2c/libI77/due.c ! 1211665159b ./libf2c/libI77/endfile.c ! 3237984441b ./libf2c/libI77/err.c 3294101487b ./libf2c/libI77/f2ch.add ! 3487746107b ./libf2c/libI77/fio.h 772866895b ./libf2c/libI77/fmt.c 4101507712b ./libf2c/libI77/fmt.h 3009804035b ./libf2c/libI77/fmtlib.c 1409031309b ./libf2c/libI77/fp.h ! 2618287290b ./libf2c/libI77/ftell_.c 1917699485b ./libf2c/libI77/iio.c 1458869538b ./libf2c/libI77/ilnw.c ! 3153145830b ./libf2c/libI77/inquire.c 771509778b ./libf2c/libI77/lio.h 339145586b ./libf2c/libI77/lread.c 2727021368b ./libf2c/libI77/lwrite.c ! 999500799b ./libf2c/libI77/Makefile.in 2636902289b ./libf2c/libI77/makefile.netlib 1384146782b ./libf2c/libI77/Notice ! 1001886377b ./libf2c/libI77/open.c ! 2618650127b ./libf2c/libI77/rawio.h ! 2729078058b ./libf2c/libI77/rdfmt.c 3744878144b ./libf2c/libI77/README.netlib ! 1734468511b ./libf2c/libI77/rewind.c 3082421543b ./libf2c/libI77/rsfe.c 27319661b ./libf2c/libI77/rsli.c 673652988b ./libf2c/libI77/rsne.c ! 1678384016b ./libf2c/libI77/sfe.c 216805921b ./libf2c/libI77/stamp-h.in ! 1288276876b ./libf2c/libI77/sue.c 4028809578b ./libf2c/libI77/typesize.c 2487538082b ./libf2c/libI77/uio.c 1670879675b ./libf2c/libI77/util.c ! 896633589b ./libf2c/libI77/Version.c 3746777128b ./libf2c/libI77/wref.c 1966568786b ./libf2c/libI77/wrtfmt.c ! 4073830155b ./libf2c/libI77/wsfe.c 869896149b ./libf2c/libI77/wsle.c 3647229305b ./libf2c/libI77/wsne.c 2958634571b ./libf2c/libI77/xwsne.c --- 11190,11238 ---- 391907002b ./libf2c/libF77/z_log.c 2332417514b ./libf2c/libF77/z_sin.c 4013824581b ./libf2c/libF77/z_sqrt.c ! 1606913831b ./libf2c/libI77/backspace.c 2398093876b ./libf2c/libI77/close.c ! 3442307107b ./libf2c/libI77/config.h.in ! 3559715528b ./libf2c/libI77/configure ! 511797131b ./libf2c/libI77/configure.in ! 1434317732b ./libf2c/libI77/dfe.c 1498544240b ./libf2c/libI77/dolio.c ! 4138072081b ./libf2c/libI77/due.c ! 2736903293b ./libf2c/libI77/endfile.c ! 690850192b ./libf2c/libI77/err.c 3294101487b ./libf2c/libI77/f2ch.add ! 1356134703b ./libf2c/libI77/fio.h 772866895b ./libf2c/libI77/fmt.c 4101507712b ./libf2c/libI77/fmt.h 3009804035b ./libf2c/libI77/fmtlib.c 1409031309b ./libf2c/libI77/fp.h ! 1512800910b ./libf2c/libI77/ftell_.c 1917699485b ./libf2c/libI77/iio.c 1458869538b ./libf2c/libI77/ilnw.c ! 1005821588b ./libf2c/libI77/inquire.c 771509778b ./libf2c/libI77/lio.h 339145586b ./libf2c/libI77/lread.c 2727021368b ./libf2c/libI77/lwrite.c ! 81211418b ./libf2c/libI77/Makefile.in 2636902289b ./libf2c/libI77/makefile.netlib 1384146782b ./libf2c/libI77/Notice ! 1954564498b ./libf2c/libI77/open.c ! 2450120238b ./libf2c/libI77/rdfmt.c 3744878144b ./libf2c/libI77/README.netlib ! 2149393700b ./libf2c/libI77/rewind.c 3082421543b ./libf2c/libI77/rsfe.c 27319661b ./libf2c/libI77/rsli.c 673652988b ./libf2c/libI77/rsne.c ! 2680457877b ./libf2c/libI77/sfe.c 216805921b ./libf2c/libI77/stamp-h.in ! 4119833693b ./libf2c/libI77/sue.c 4028809578b ./libf2c/libI77/typesize.c 2487538082b ./libf2c/libI77/uio.c 1670879675b ./libf2c/libI77/util.c ! 3831398902b ./libf2c/libI77/Version.c 3746777128b ./libf2c/libI77/wref.c 1966568786b ./libf2c/libI77/wrtfmt.c ! 3540661106b ./libf2c/libI77/wsfe.c 869896149b ./libf2c/libI77/wsle.c 3647229305b ./libf2c/libI77/wsne.c 2958634571b ./libf2c/libI77/xwsne.c *************** *** 7546,7557 **** 481185218b ./libf2c/libU77/bes.c 3531718858b ./libf2c/libU77/chdir_.c 3571215248b ./libf2c/libU77/chmod_.c ! 2081549700b ./libf2c/libU77/config.hin ! 3354161026b ./libf2c/libU77/configure ! 3932473971b ./libf2c/libU77/configure.in 508743035b ./libf2c/libU77/COPYING.LIB 3577720310b ./libf2c/libU77/ctime_.c ! 1581466296b ./libf2c/libU77/date_.c 2503989765b ./libf2c/libU77/datetime_.c 1344682531b ./libf2c/libU77/dbes.c 969611891b ./libf2c/libU77/dtime_.c --- 11243,11254 ---- 481185218b ./libf2c/libU77/bes.c 3531718858b ./libf2c/libU77/chdir_.c 3571215248b ./libf2c/libU77/chmod_.c ! 1954724291b ./libf2c/libU77/config.hin ! 2271415334b ./libf2c/libU77/configure ! 4081950488b ./libf2c/libU77/configure.in 508743035b ./libf2c/libU77/COPYING.LIB 3577720310b ./libf2c/libU77/ctime_.c ! 2890960351b ./libf2c/libU77/date_.c 2503989765b ./libf2c/libU77/datetime_.c 1344682531b ./libf2c/libU77/dbes.c 969611891b ./libf2c/libU77/dtime_.c *************** *** 7580,7586 **** 1995276793b ./libf2c/libU77/lnblnk_.c 3149128167b ./libf2c/libU77/lstat_.c 1763071373b ./libf2c/libU77/ltime_.c ! 2966234338b ./libf2c/libU77/Makefile.in 2455391013b ./libf2c/libU77/mclock_.c 4183902576b ./libf2c/libU77/perror_.c 572996563b ./libf2c/libU77/PROJECTS --- 11277,11283 ---- 1995276793b ./libf2c/libU77/lnblnk_.c 3149128167b ./libf2c/libU77/lstat_.c 1763071373b ./libf2c/libU77/ltime_.c ! 2717291481b ./libf2c/libU77/Makefile.in 2455391013b ./libf2c/libU77/mclock_.c 4183902576b ./libf2c/libU77/perror_.c 572996563b ./libf2c/libU77/PROJECTS *************** *** 7600,7788 **** 791266987b ./libf2c/libU77/u77-test.f 387772730b ./libf2c/libU77/umask_.c 1230596654b ./libf2c/libU77/unlink_.c ! 668157450b ./libf2c/libU77/Version.c ! 2675847219b ./libf2c/libU77/vxtidate_.c 3987376609b ./libf2c/libU77/vxttime_.c ! 57434001b ./libf2c/Makefile.in 1384146782b ./libf2c/permission.netlib 3111321221b ./libf2c/README 3513813969b ./libf2c/readme.netlib 308226469b ./libf2c/TODO 1812706554b ./libffi/acconfig.h 2067133813b ./libffi/acinclude.m4 ! 3541235691b ./libffi/aclocal.m4 ! 20419354b ./libffi/ChangeLog 2412263940b ./libffi/ChangeLog.libgcj 1481682558b ./libffi/ChangeLog.v1 ! 1421737416b ./libffi/configure ! 2560983985b ./libffi/configure.in ! 2955525038b ./libffi/fficonfig.h.in 3309556484b ./libffi/include/ffi_common.h ! 3520784265b ./libffi/include/ffi.h.in ! 1647998382b ./libffi/include/ffi_mips.h 1175058075b ./libffi/include/Makefile.am ! 1670240125b ./libffi/include/Makefile.in 2593181117b ./libffi/LICENSE ! 1211392828b ./libffi/Makefile.am ! 1522444358b ./libffi/Makefile.in ! 1493657837b ./libffi/README ! 931496280b ./libffi/src/alpha/ffi.c 2032396460b ./libffi/src/alpha/osf.S ! 1858437870b ./libffi/src/arm/ffi.c ! 3794061997b ./libffi/src/arm/sysv.S ! 2383098329b ./libffi/src/debug.c ! 3843669517b ./libffi/src/ffitest.c ! 247187525b ./libffi/src/ia64/ffi.c 1956966073b ./libffi/src/ia64/ia64_flags.h ! 3648505216b ./libffi/src/ia64/unix.S ! 2691755568b ./libffi/src/java_raw_api.c 4236219331b ./libffi/src/m68k/ffi.c 1684090594b ./libffi/src/m68k/sysv.S ! 601400312b ./libffi/src/mips/ffi.c ! 3012781160b ./libffi/src/mips/n32.s ! 3872687454b ./libffi/src/mips/n32.S ! 3233926819b ./libffi/src/mips/o32.s ! 3781865376b ./libffi/src/mips/o32.S 257105690b ./libffi/src/powerpc/asm.h 1107349205b ./libffi/src/powerpc/ffi.c 2353704113b ./libffi/src/powerpc/ppc_closure.S 1185461672b ./libffi/src/powerpc/sysv.S ! 2696068941b ./libffi/src/prep_cif.c 2419197691b ./libffi/src/raw_api.c ! 2866330053b ./libffi/src/sparc/ffi.c ! 3219496080b ./libffi/src/sparc/v8.S ! 1736720411b ./libffi/src/sparc/v9.S ! 1207476889b ./libffi/src/types.c ! 1855580175b ./libffi/src/x86/ffi.c ! 1417743400b ./libffi/src/x86/sysv.S ! 4026965770b ./libffi/src/x86/win32.S 216805921b ./libffi/stamp-h.in ! 4152189310b ./libiberty/aclocal.m4 ! 3328478890b ./libiberty/alloca.c ! 879652143b ./libiberty/alloca-conf.h ! 279063279b ./libiberty/argv.c ! 4095921893b ./libiberty/asprintf.c ! 244715449b ./libiberty/atexit.c ! 1779739894b ./libiberty/basename.c ! 2078733360b ./libiberty/bcmp.c ! 4095628943b ./libiberty/bcopy.c ! 2420910047b ./libiberty/bsearch.c ! 1355398667b ./libiberty/bzero.c ! 348958315b ./libiberty/calloc.c ! 1086362866b ./libiberty/ChangeLog ! 28549657b ./libiberty/choose-temp.c ! 2971856697b ./libiberty/clock.c ! 876083662b ./libiberty/concat.c 1987387424b ./libiberty/config.h-vms ! 396793389b ./libiberty/config.in 3500529335b ./libiberty/config/mh-aix - 3138156860b ./libiberty/config/mh-beos 3476234501b ./libiberty/config/mh-cxux7 1235651640b ./libiberty/config/mh-fbsd21 2904567379b ./libiberty/config/mh-openedition 2131807358b ./libiberty/config/mh-windows ! 3459212459b ./libiberty/config.table ! 2284033167b ./libiberty/configure ! 3475925890b ./libiberty/configure.in 508743035b ./libiberty/COPYING.LIB ! 3602665671b ./libiberty/copysign.c ! 382214955b ./libiberty/cp-demangle.c ! 2736791262b ./libiberty/cplus-dem.c ! 1493405776b ./libiberty/dyn-string.c ! 2375131771b ./libiberty/fdmatch.c ! 3402508166b ./libiberty/floatformat.c 1510070689b ./libiberty/fnmatch.c ! 483871133b ./libiberty/getcwd.c 2320609345b ./libiberty/getopt1.c ! 3383279087b ./libiberty/getopt.c ! 3222194456b ./libiberty/getpagesize.c ! 2067703356b ./libiberty/getpwd.c ! 4095635511b ./libiberty/getruntime.c ! 3697743224b ./libiberty/hashtab.c ! 2427662967b ./libiberty/hex.c ! 2509113063b ./libiberty/index.c ! 3649773387b ./libiberty/insque.c ! 580066308b ./libiberty/lbasename.c ! 2883770811b ./libiberty/Makefile.in 3226217883b ./libiberty/makefile.vms ! 1750372449b ./libiberty/md5.c ! 524935133b ./libiberty/memchr.c ! 2574859101b ./libiberty/memcmp.c ! 1234981574b ./libiberty/memcpy.c ! 453125218b ./libiberty/memmove.c ! 3145829545b ./libiberty/memset.c ! 3846776882b ./libiberty/mkstemps.c 3930704547b ./libiberty/mpw.c 2010995764b ./libiberty/mpw-config.in 1580171809b ./libiberty/mpw-make.sed 2503648631b ./libiberty/msdos.c 196373918b ./libiberty/objalloc.c ! 2457942828b ./libiberty/obstack.c ! 2859106643b ./libiberty/partition.c ! 1705086573b ./libiberty/pexecute.c ! 298749640b ./libiberty/putenv.c ! 3684946760b ./libiberty/random.c 4016047250b ./libiberty/README ! 2416322803b ./libiberty/rename.c ! 2259647700b ./libiberty/rindex.c 2149284318b ./libiberty/safe-ctype.c ! 2262782128b ./libiberty/setenv.c ! 3700750697b ./libiberty/sigsetmask.c 532242404b ./libiberty/sort.c ! 2608485555b ./libiberty/spaces.c ! 3886232402b ./libiberty/splay-tree.c ! 1006482148b ./libiberty/strcasecmp.c ! 3230937814b ./libiberty/strchr.c ! 3756692660b ./libiberty/strdup.c ! 691208982b ./libiberty/strerror.c ! 1880128423b ./libiberty/strncasecmp.c ! 3841395899b ./libiberty/strncmp.c ! 3749439866b ./libiberty/strrchr.c ! 3208246968b ./libiberty/strsignal.c ! 2094027097b ./libiberty/strstr.c ! 4065518220b ./libiberty/strtod.c ! 974873767b ./libiberty/strtol.c 1828706574b ./libiberty/strtoul.c ! 1232507167b ./libiberty/testsuite/demangle-expected 2389145348b ./libiberty/testsuite/Makefile.in ! 1807149783b ./libiberty/testsuite/regress-demangle ! 1688081427b ./libiberty/tmpnam.c ! 1231940410b ./libiberty/vasprintf.c ! 286686145b ./libiberty/vfork.c 3556593952b ./libiberty/vfprintf.c 2773716443b ./libiberty/vmsbuild.com ! 1198002722b ./libiberty/vprintf.c ! 3353261530b ./libiberty/vsprintf.c ! 1944277470b ./libiberty/waitpid.c ! 1616442733b ./libiberty/xatexit.c ! 318075579b ./libiberty/xexit.c ! 983034547b ./libiberty/xmalloc.c ! 3877767643b ./libiberty/xmemdup.c ! 3859667112b ./libiberty/xstrdup.c ! 2509140929b ./libiberty/xstrerror.c ! 4020104846b ./libjava/acconfig.h ! 2834260208b ./libjava/acinclude.m4 ! 1842823374b ./libjava/aclocal.m4 3784840223b ./libjava/addr2name.awk ! 608342622b ./libjava/boehm.cc ! 3439292454b ./libjava/ChangeLog 3473562392b ./libjava/ChangeLog-1999 ! 1179658282b ./libjava/chartables.pl ! 652541543b ./libjava/configure ! 3242339555b ./libjava/configure.host ! 2518793201b ./libjava/configure.in 2171125041b ./libjava/COPYING ! 3942405165b ./libjava/defineclass.cc 535801509b ./libjava/doc/cni.sgml ! 1132558953b ./libjava/exception.cc 3591403769b ./libjava/gcj/array.h ! 341624408b ./libjava/gcj/cni.h 227606957b ./libjava/gcj/field.h ! 2938701788b ./libjava/gcj/javaprims.h ! 2155926294b ./libjava/gcj/Makefile.am ! 991572967b ./libjava/gcj/Makefile.in 1073488355b ./libjava/gcj/method.h ! 3216096294b ./libjava/gij.cc 1596689297b ./libjava/gnu/awt/gtk/GtkButtonPeer.java 922026864b ./libjava/gnu/awt/gtk/gtkcommon.cc 3699017559b ./libjava/gnu/awt/gtk/gtkcommon.h --- 11297,11500 ---- 791266987b ./libf2c/libU77/u77-test.f 387772730b ./libf2c/libU77/umask_.c 1230596654b ./libf2c/libU77/unlink_.c ! 2261923763b ./libf2c/libU77/Version.c ! 2702299573b ./libf2c/libU77/vxtidate_.c 3987376609b ./libf2c/libU77/vxttime_.c ! 2003108059b ./libf2c/Makefile.in 1384146782b ./libf2c/permission.netlib 3111321221b ./libf2c/README 3513813969b ./libf2c/readme.netlib 308226469b ./libf2c/TODO 1812706554b ./libffi/acconfig.h 2067133813b ./libffi/acinclude.m4 ! 724319761b ./libffi/aclocal.m4 ! 586046036b ./libffi/ChangeLog 2412263940b ./libffi/ChangeLog.libgcj 1481682558b ./libffi/ChangeLog.v1 ! 3495452477b ./libffi/configure ! 2032651767b ./libffi/configure.in ! 1158949320b ./libffi/fficonfig.h.in 3309556484b ./libffi/include/ffi_common.h ! 2313143056b ./libffi/include/ffi.h.in ! 2321044801b ./libffi/include/ffi_mips.h 1175058075b ./libffi/include/Makefile.am ! 3624063070b ./libffi/include/Makefile.in 2593181117b ./libffi/LICENSE ! 3803183793b ./libffi/Makefile.am ! 4109869593b ./libffi/Makefile.in ! 3508322383b ./libffi/README ! 3852747706b ./libffi/src/alpha/ffi.c 2032396460b ./libffi/src/alpha/osf.S ! 4293371769b ./libffi/src/arm/ffi.c ! 591152992b ./libffi/src/arm/sysv.S ! 2669027491b ./libffi/src/debug.c ! 269618381b ./libffi/src/ffitest.c ! 2435449601b ./libffi/src/ia64/ffi.c 1956966073b ./libffi/src/ia64/ia64_flags.h ! 2886414800b ./libffi/src/ia64/unix.S ! 2946352717b ./libffi/src/java_raw_api.c 4236219331b ./libffi/src/m68k/ffi.c 1684090594b ./libffi/src/m68k/sysv.S ! 1785558758b ./libffi/src/mips/ffi.c ! 176940890b ./libffi/src/mips/n32.S ! 3634355650b ./libffi/src/mips/o32.S ! 2356375417b ./libffi/src/powerpc/aix_closure.S ! 1342850260b ./libffi/src/powerpc/aix.S 257105690b ./libffi/src/powerpc/asm.h + 1992059182b ./libffi/src/powerpc/darwin_closure.S + 91989017b ./libffi/src/powerpc/darwin.S 1107349205b ./libffi/src/powerpc/ffi.c + 342545621b ./libffi/src/powerpc/ffi_darwin.c 2353704113b ./libffi/src/powerpc/ppc_closure.S 1185461672b ./libffi/src/powerpc/sysv.S ! 1962807490b ./libffi/src/prep_cif.c 2419197691b ./libffi/src/raw_api.c ! 1719114531b ./libffi/src/sparc/ffi.c ! 1526185028b ./libffi/src/sparc/v8.S ! 2310583994b ./libffi/src/sparc/v9.S ! 518804215b ./libffi/src/types.c ! 3516634738b ./libffi/src/x86/ffi.c ! 760488121b ./libffi/src/x86/sysv.S ! 478025840b ./libffi/src/x86/win32.S 216805921b ./libffi/stamp-h.in ! 640604299b ./libiberty/aclocal.m4 ! 4169173798b ./libiberty/alloca.c ! 122203256b ./libiberty/argv.c ! 751194285b ./libiberty/asprintf.c ! 3613577770b ./libiberty/atexit.c ! 412337659b ./libiberty/basename.c ! 2877771686b ./libiberty/bcmp.c ! 3653876397b ./libiberty/bcopy.c ! 1033916047b ./libiberty/bsearch.c ! 2389959529b ./libiberty/bzero.c ! 1591293922b ./libiberty/calloc.c ! 1976404269b ./libiberty/ChangeLog ! 2264262326b ./libiberty/choose-temp.c ! 2557767520b ./libiberty/clock.c ! 3170582338b ./libiberty/concat.c 1987387424b ./libiberty/config.h-vms ! 2319815417b ./libiberty/config.in 3500529335b ./libiberty/config/mh-aix 3476234501b ./libiberty/config/mh-cxux7 1235651640b ./libiberty/config/mh-fbsd21 2904567379b ./libiberty/config/mh-openedition 2131807358b ./libiberty/config/mh-windows ! 4294237366b ./libiberty/config.table ! 3216189239b ./libiberty/configure ! 3470508651b ./libiberty/configure.in 508743035b ./libiberty/COPYING.LIB ! 2478885430b ./libiberty/copying-lib.texi ! 3329761531b ./libiberty/copysign.c ! 2003155661b ./libiberty/cp-demangle.c ! 2109007668b ./libiberty/cplus-dem.c ! 602306638b ./libiberty/_doprnt.c ! 3785501494b ./libiberty/dyn-string.c ! 1492855576b ./libiberty/fdmatch.c ! 3977780801b ./libiberty/ffs.c ! 2257696761b ./libiberty/fibheap.c ! 2495949053b ./libiberty/floatformat.c 1510070689b ./libiberty/fnmatch.c ! 1078076716b ./libiberty/fnmatch.txh ! 85493406b ./libiberty/functions.texi ! 3789905598b ./libiberty/gather-docs ! 2046253791b ./libiberty/getcwd.c 2320609345b ./libiberty/getopt1.c ! 3944018229b ./libiberty/getopt.c ! 3996466380b ./libiberty/getpagesize.c ! 2690816019b ./libiberty/getpwd.c ! 3425858883b ./libiberty/getruntime.c ! 1214210640b ./libiberty/hashtab.c ! 1870214410b ./libiberty/hex.c ! 3335497459b ./libiberty/index.c ! 3255705408b ./libiberty/insque.c ! 1676968368b ./libiberty/lbasename.c ! 1958824006b ./libiberty/libiberty.texi ! 3183084918b ./libiberty/maint-tool ! 16748852b ./libiberty/Makefile.in 3226217883b ./libiberty/makefile.vms ! 2495473509b ./libiberty/make-temp-file.c ! 3176875729b ./libiberty/md5.c ! 1640952211b ./libiberty/memchr.c ! 2120544197b ./libiberty/memcmp.c ! 998344495b ./libiberty/memcpy.c ! 1685999989b ./libiberty/memmove.c ! 781584880b ./libiberty/memset.c ! 1326635668b ./libiberty/mkstemps.c 3930704547b ./libiberty/mpw.c 2010995764b ./libiberty/mpw-config.in 1580171809b ./libiberty/mpw-make.sed 2503648631b ./libiberty/msdos.c 196373918b ./libiberty/objalloc.c ! 317557207b ./libiberty/obstack.c ! 3821010694b ./libiberty/obstacks.texi ! 1735078044b ./libiberty/partition.c ! 2798791758b ./libiberty/pexecute.c ! 3819346820b ./libiberty/putenv.c ! 4197438328b ./libiberty/random.c 4016047250b ./libiberty/README ! 4045358849b ./libiberty/regex.c ! 1175910896b ./libiberty/rename.c ! 2903758838b ./libiberty/rindex.c 2149284318b ./libiberty/safe-ctype.c ! 779495612b ./libiberty/setenv.c ! 1334646884b ./libiberty/sigsetmask.c 532242404b ./libiberty/sort.c ! 4103476962b ./libiberty/spaces.c ! 656918725b ./libiberty/splay-tree.c ! 2341714522b ./libiberty/strcasecmp.c ! 4233130047b ./libiberty/strchr.c ! 18952980b ./libiberty/strdup.c ! 2389170415b ./libiberty/strerror.c ! 169676915b ./libiberty/strncasecmp.c ! 1464675486b ./libiberty/strncmp.c ! 1805839887b ./libiberty/strrchr.c ! 3254160712b ./libiberty/strsignal.c ! 2303974130b ./libiberty/strstr.c ! 2399125104b ./libiberty/strtod.c ! 2287814393b ./libiberty/strtol.c 1828706574b ./libiberty/strtoul.c ! 3268886825b ./libiberty/ternary.c ! 3508543088b ./libiberty/testsuite/demangle-expected 2389145348b ./libiberty/testsuite/Makefile.in ! 2944174175b ./libiberty/testsuite/regress-demangle ! 3862028978b ./libiberty/tmpnam.c ! 3018358591b ./libiberty/vasprintf.c ! 3875192457b ./libiberty/vfork.c 3556593952b ./libiberty/vfprintf.c 2773716443b ./libiberty/vmsbuild.com ! 3899232273b ./libiberty/vprintf.c ! 3719865817b ./libiberty/vsprintf.c ! 192504561b ./libiberty/waitpid.c ! 3482083725b ./libiberty/xatexit.c ! 805686844b ./libiberty/xexit.c ! 3313408860b ./libiberty/xmalloc.c ! 1302531664b ./libiberty/xmemdup.c ! 991611298b ./libiberty/xstrdup.c ! 387398324b ./libiberty/xstrerror.c ! 426063533b ./libjava/acconfig.h ! 3221815868b ./libjava/acinclude.m4 ! 3506621156b ./libjava/aclocal.m4 3784840223b ./libjava/addr2name.awk ! 2317653915b ./libjava/boehm.cc ! 1039659153b ./libjava/ChangeLog 3473562392b ./libjava/ChangeLog-1999 ! 2385951174b ./libjava/ChangeLog-2001 ! 2118024035b ./libjava/configure ! 1635457542b ./libjava/configure.host ! 3463448501b ./libjava/configure.in 2171125041b ./libjava/COPYING ! 3097747965b ./libjava/defineclass.cc 535801509b ./libjava/doc/cni.sgml ! 1183730379b ./libjava/exception.cc 3591403769b ./libjava/gcj/array.h ! 1281724033b ./libjava/gcj/cni.h 227606957b ./libjava/gcj/field.h ! 1774648773b ./libjava/gcj/javaprims.h ! 1775313853b ./libjava/gcj/libgcj-config.h.in ! 1011701793b ./libjava/gcj/Makefile.am ! 3428145469b ./libjava/gcj/Makefile.in 1073488355b ./libjava/gcj/method.h ! 1055027936b ./libjava/gij.cc 1596689297b ./libjava/gnu/awt/gtk/GtkButtonPeer.java 922026864b ./libjava/gnu/awt/gtk/gtkcommon.cc 3699017559b ./libjava/gnu/awt/gtk/gtkcommon.h *************** *** 7807,7844 **** 2946615030b ./libjava/gnu/awt/j2d/IntegerGraphicsState.java 823126662b ./libjava/gnu/awt/j2d/MappedRaster.java 2535888045b ./libjava/gnu/awt/LightweightRedirector.java ! 1827098534b ./libjava/gnu/awt/xlib/XCanvasPeer.java 3055110597b ./libjava/gnu/awt/xlib/XEventLoop.java 2886723915b ./libjava/gnu/awt/xlib/XEventQueue.java 1386185884b ./libjava/gnu/awt/xlib/XFontMetrics.java ! 800182476b ./libjava/gnu/awt/xlib/XFramePeer.java ! 2973787128b ./libjava/gnu/awt/xlib/XGraphicsConfiguration.java 1394253720b ./libjava/gnu/awt/xlib/XGraphics.java ! 1761808258b ./libjava/gnu/awt/xlib/XPanelPeer.java ! 1364167782b ./libjava/gnu/awt/xlib/XToolkit.java ! 4033660757b ./libjava/gnu/classpath/Configuration.java.in ! 1207049292b ./libjava/gnu/gcj/awt/BitMaskExtent.java ! 502384971b ./libjava/gnu/gcj/awt/Buffers.java ! 1950998373b ./libjava/gnu/gcj/awt/ComponentDataBlitOp.java ! 1925436486b ./libjava/gnu/gcj/awt/GLightweightPeer.java ! 2128850323b ./libjava/gnu/gcj/convert/BytesToUnicode.java ! 670718184b ./libjava/gnu/gcj/convert/Convert.java ! 3408472191b ./libjava/gnu/gcj/convert/gen-from-JIS.c 624954174b ./libjava/gnu/gcj/convert/Input_8859_1.java 1230020474b ./libjava/gnu/gcj/convert/Input_ASCII.java 271098151b ./libjava/gnu/gcj/convert/Input_EUCJIS.java ! 2068197843b ./libjava/gnu/gcj/convert/Input_iconv.java 2185755288b ./libjava/gnu/gcj/convert/Input_JavaSrc.java 2110225778b ./libjava/gnu/gcj/convert/Input_SJIS.java 1513325785b ./libjava/gnu/gcj/convert/Input_UTF8.java ! 1836280018b ./libjava/gnu/gcj/convert/IOConverter.java 3459137842b ./libjava/gnu/gcj/convert/JIS0201.h 2049723314b ./libjava/gnu/gcj/convert/JIS0208.h ! 390729770b ./libjava/gnu/gcj/convert/JIS0208_to_Unicode.cc 1075531862b ./libjava/gnu/gcj/convert/JIS0212.h ! 4086209434b ./libjava/gnu/gcj/convert/JIS0212_to_Unicode.cc 3112494990b ./libjava/gnu/gcj/convert/make-trie.c ! 1681076521b ./libjava/gnu/gcj/convert/natIconv.cc 3409212961b ./libjava/gnu/gcj/convert/natInput_EUCJIS.cc 2514359574b ./libjava/gnu/gcj/convert/natInput_SJIS.cc 784829283b ./libjava/gnu/gcj/convert/natOutput_EUCJIS.cc --- 11519,11553 ---- 2946615030b ./libjava/gnu/awt/j2d/IntegerGraphicsState.java 823126662b ./libjava/gnu/awt/j2d/MappedRaster.java 2535888045b ./libjava/gnu/awt/LightweightRedirector.java ! 4203439929b ./libjava/gnu/awt/xlib/XCanvasPeer.java 3055110597b ./libjava/gnu/awt/xlib/XEventLoop.java 2886723915b ./libjava/gnu/awt/xlib/XEventQueue.java 1386185884b ./libjava/gnu/awt/xlib/XFontMetrics.java ! 1240842045b ./libjava/gnu/awt/xlib/XFramePeer.java ! 1292730399b ./libjava/gnu/awt/xlib/XGraphicsConfiguration.java 1394253720b ./libjava/gnu/awt/xlib/XGraphics.java ! 4211424512b ./libjava/gnu/awt/xlib/XPanelPeer.java ! 2089387515b ./libjava/gnu/awt/xlib/XToolkit.java ! 3357000131b ./libjava/gnu/classpath/Configuration.java.in ! 2926627917b ./libjava/gnu/gcj/convert/Blocks-3.txt ! 958965717b ./libjava/gnu/gcj/convert/BytesToUnicode.java ! 3687721297b ./libjava/gnu/gcj/convert/Convert.java ! 2990675168b ./libjava/gnu/gcj/convert/gen-from-JIS.c 624954174b ./libjava/gnu/gcj/convert/Input_8859_1.java 1230020474b ./libjava/gnu/gcj/convert/Input_ASCII.java 271098151b ./libjava/gnu/gcj/convert/Input_EUCJIS.java ! 1595200171b ./libjava/gnu/gcj/convert/Input_iconv.java 2185755288b ./libjava/gnu/gcj/convert/Input_JavaSrc.java 2110225778b ./libjava/gnu/gcj/convert/Input_SJIS.java 1513325785b ./libjava/gnu/gcj/convert/Input_UTF8.java ! 1955248518b ./libjava/gnu/gcj/convert/IOConverter.java 3459137842b ./libjava/gnu/gcj/convert/JIS0201.h 2049723314b ./libjava/gnu/gcj/convert/JIS0208.h ! 4153637973b ./libjava/gnu/gcj/convert/JIS0208_to_Unicode.cc 1075531862b ./libjava/gnu/gcj/convert/JIS0212.h ! 2320550799b ./libjava/gnu/gcj/convert/JIS0212_to_Unicode.cc 3112494990b ./libjava/gnu/gcj/convert/make-trie.c ! 2305784698b ./libjava/gnu/gcj/convert/natIconv.cc 3409212961b ./libjava/gnu/gcj/convert/natInput_EUCJIS.cc 2514359574b ./libjava/gnu/gcj/convert/natInput_SJIS.cc 784829283b ./libjava/gnu/gcj/convert/natOutput_EUCJIS.cc *************** *** 7846,7885 **** 2034070368b ./libjava/gnu/gcj/convert/Output_8859_1.java 4217873292b ./libjava/gnu/gcj/convert/Output_ASCII.java 842766967b ./libjava/gnu/gcj/convert/Output_EUCJIS.java ! 1244826212b ./libjava/gnu/gcj/convert/Output_iconv.java 3127943909b ./libjava/gnu/gcj/convert/Output_JavaSrc.java 3336489456b ./libjava/gnu/gcj/convert/Output_SJIS.java 1644529420b ./libjava/gnu/gcj/convert/Output_UTF8.java ! 1140731374b ./libjava/gnu/gcj/convert/UnicodeToBytes.java ! 173962255b ./libjava/gnu/gcj/convert/Unicode_to_JIS.cc 3580885543b ./libjava/gnu/gcj/io/DefaultMimeTypes.java 1393439370b ./libjava/gnu/gcj/io/MimeTypes.java ! 3416786485b ./libjava/gnu/gcj/io/natSimpleSHSStream.cc ! 1292950504b ./libjava/gnu/gcj/io/shs.cc ! 2562174602b ./libjava/gnu/gcj/io/shs.h 595453629b ./libjava/gnu/gcj/io/SimpleSHSStream.java ! 400565712b ./libjava/gnu/gcj/jni/NativeThread.java ! 3884140198b ./libjava/gnu/gcj/jni/natNativeThread.cc ! 2929289099b ./libjava/gnu/gcj/math/MPN.java ! 2475588765b ./libjava/gnu/gcj/protocol/file/Connection.java ! 3417069786b ./libjava/gnu/gcj/protocol/file/Handler.java ! 3417724987b ./libjava/gnu/gcj/protocol/http/Connection.java 132815256b ./libjava/gnu/gcj/protocol/http/Handler.java 2878492435b ./libjava/gnu/gcj/protocol/jar/Connection.java 1743208466b ./libjava/gnu/gcj/protocol/jar/Handler.java 2282503099b ./libjava/gnu/gcj/RawData.java 501773112b ./libjava/gnu/gcj/runtime/FileDeleter.java ! 3433902184b ./libjava/gnu/gcj/runtime/FirstThread.java ! 784657895b ./libjava/gnu/gcj/runtime/natFirstThread.cc ! 2884015653b ./libjava/gnu/gcj/runtime/VMClassLoader.java ! 1287370049b ./libjava/gnu/gcj/text/BaseBreakIterator.java ! 3670914440b ./libjava/gnu/gcj/text/CharacterBreakIterator.java ! 1463280546b ./libjava/gnu/gcj/text/LineBreakIterator.java ! 1075681897b ./libjava/gnu/gcj/text/LocaleData_en.java ! 3759244213b ./libjava/gnu/gcj/text/LocaleData_en_US.java ! 2169899674b ./libjava/gnu/gcj/text/SentenceBreakIterator.java ! 3414040661b ./libjava/gnu/gcj/text/WordBreakIterator.java ! 597555083b ./libjava/gnu/gcj/util/EnumerationChain.java 66527498b ./libjava/gnu/gcj/xlib/Clip.java 2501208995b ./libjava/gnu/gcj/xlib/Colormap.java 4007691160b ./libjava/gnu/gcj/xlib/Display.java --- 11555,11598 ---- 2034070368b ./libjava/gnu/gcj/convert/Output_8859_1.java 4217873292b ./libjava/gnu/gcj/convert/Output_ASCII.java 842766967b ./libjava/gnu/gcj/convert/Output_EUCJIS.java ! 58644124b ./libjava/gnu/gcj/convert/Output_iconv.java 3127943909b ./libjava/gnu/gcj/convert/Output_JavaSrc.java 3336489456b ./libjava/gnu/gcj/convert/Output_SJIS.java 1644529420b ./libjava/gnu/gcj/convert/Output_UTF8.java ! 2459634193b ./libjava/gnu/gcj/convert/UnicodeCharacterDatabase-3.0.0.html ! 2507096442b ./libjava/gnu/gcj/convert/UnicodeData-3.0.0.txt ! 4262149961b ./libjava/gnu/gcj/convert/UnicodeToBytes.java ! 2676798711b ./libjava/gnu/gcj/convert/Unicode_to_JIS.cc ! 2882288660b ./libjava/gnu/gcj/Core.java 3580885543b ./libjava/gnu/gcj/io/DefaultMimeTypes.java 1393439370b ./libjava/gnu/gcj/io/MimeTypes.java ! 1645841998b ./libjava/gnu/gcj/io/natSimpleSHSStream.cc ! 88411881b ./libjava/gnu/gcj/io/shs.cc ! 3951902308b ./libjava/gnu/gcj/io/shs.h 595453629b ./libjava/gnu/gcj/io/SimpleSHSStream.java ! 19196032b ./libjava/gnu/gcj/natCore.cc ! 3713902803b ./libjava/gnu/gcj/protocol/core/Connection.java ! 1924151198b ./libjava/gnu/gcj/protocol/core/CoreInputStream.java ! 2886826729b ./libjava/gnu/gcj/protocol/core/Handler.java ! 3112605791b ./libjava/gnu/gcj/protocol/core/natCoreInputStream.cc ! 640992483b ./libjava/gnu/gcj/protocol/file/Connection.java ! 3103931425b ./libjava/gnu/gcj/protocol/file/Handler.java ! 635772836b ./libjava/gnu/gcj/protocol/http/Connection.java 132815256b ./libjava/gnu/gcj/protocol/http/Handler.java 2878492435b ./libjava/gnu/gcj/protocol/jar/Connection.java 1743208466b ./libjava/gnu/gcj/protocol/jar/Handler.java 2282503099b ./libjava/gnu/gcj/RawData.java 501773112b ./libjava/gnu/gcj/runtime/FileDeleter.java ! 1535802220b ./libjava/gnu/gcj/runtime/FinalizerThread.java ! 1105934296b ./libjava/gnu/gcj/runtime/FirstThread.java ! 4204305482b ./libjava/gnu/gcj/runtime/JNIWeakRef.java ! 1025799273b ./libjava/gnu/gcj/runtime/natFinalizerThread.cc ! 1558736281b ./libjava/gnu/gcj/runtime/natFirstThread.cc ! 2521984623b ./libjava/gnu/gcj/runtime/natSharedLibLoader.cc ! 2150610459b ./libjava/gnu/gcj/runtime/natStringBuffer.cc ! 2135835481b ./libjava/gnu/gcj/runtime/SharedLibLoader.java ! 3369847265b ./libjava/gnu/gcj/runtime/StringBuffer.java ! 3662016298b ./libjava/gnu/gcj/runtime/VMClassLoader.java 66527498b ./libjava/gnu/gcj/xlib/Clip.java 2501208995b ./libjava/gnu/gcj/xlib/Colormap.java 4007691160b ./libjava/gnu/gcj/xlib/Display.java *************** *** 7889,8014 **** 2721622585b ./libjava/gnu/gcj/xlib/natClip.cc 313845725b ./libjava/gnu/gcj/xlib/natColormap.cc 4037646551b ./libjava/gnu/gcj/xlib/natDisplay.cc ! 4274838217b ./libjava/gnu/gcj/xlib/natDrawable.cc ! 3867976336b ./libjava/gnu/gcj/xlib/natFont.cc 61045074b ./libjava/gnu/gcj/xlib/natGC.cc 2441230090b ./libjava/gnu/gcj/xlib/natPixmap.cc 1112468906b ./libjava/gnu/gcj/xlib/natScreen.cc 3505240565b ./libjava/gnu/gcj/xlib/natVisual.cc ! 1675730301b ./libjava/gnu/gcj/xlib/natWindowAttributes.cc 3715533436b ./libjava/gnu/gcj/xlib/natWindow.cc ! 1596399902b ./libjava/gnu/gcj/xlib/natWMSizeHints.cc 2928451851b ./libjava/gnu/gcj/xlib/natXAnyEvent.cc 1448210768b ./libjava/gnu/gcj/xlib/natXButtonEvent.cc 1690231537b ./libjava/gnu/gcj/xlib/natXColor.cc 2465747567b ./libjava/gnu/gcj/xlib/natXConfigureEvent.cc 1372643816b ./libjava/gnu/gcj/xlib/natXException.cc 1109730421b ./libjava/gnu/gcj/xlib/natXExposeEvent.cc ! 2086639609b ./libjava/gnu/gcj/xlib/natXImage.cc 2947736072b ./libjava/gnu/gcj/xlib/natXUnmapEvent.cc ! 1029227777b ./libjava/gnu/gcj/xlib/Pixmap.java 3350074944b ./libjava/gnu/gcj/xlib/Screen.java 442092378b ./libjava/gnu/gcj/xlib/Visual.java ! 1903207113b ./libjava/gnu/gcj/xlib/WindowAttributes.java 2300472805b ./libjava/gnu/gcj/xlib/Window.java 540355668b ./libjava/gnu/gcj/xlib/WMSizeHints.java 735616079b ./libjava/gnu/gcj/xlib/XAnyEvent.java 2053093871b ./libjava/gnu/gcj/xlib/XButtonEvent.java ! 935350482b ./libjava/gnu/gcj/xlib/XColor.java 3412915905b ./libjava/gnu/gcj/xlib/XConfigureEvent.java 3680444774b ./libjava/gnu/gcj/xlib/XConnectException.java 3758585380b ./libjava/gnu/gcj/xlib/XEvent.java ! 3856636964b ./libjava/gnu/gcj/xlib/XException.java 3813405109b ./libjava/gnu/gcj/xlib/XExposeEvent.java 1394364288b ./libjava/gnu/gcj/xlib/XID.java ! 4001088375b ./libjava/gnu/gcj/xlib/XImage.java 623452528b ./libjava/gnu/gcj/xlib/XUnmapEvent.java ! 4273502853b ./libjava/gnu/java/beans/BeanInfoEmbryo.java ! 1735480832b ./libjava/gnu/java/beans/editors/ColorEditor.java ! 1963057631b ./libjava/gnu/java/beans/editors/FontEditor.java ! 3854572123b ./libjava/gnu/java/beans/editors/NativeBooleanEditor.java ! 1338497687b ./libjava/gnu/java/beans/editors/NativeByteEditor.java ! 3966884759b ./libjava/gnu/java/beans/editors/NativeDoubleEditor.java ! 1541762615b ./libjava/gnu/java/beans/editors/NativeFloatEditor.java ! 3312128496b ./libjava/gnu/java/beans/editors/NativeIntEditor.java ! 2212666417b ./libjava/gnu/java/beans/editors/NativeLongEditor.java ! 2968170466b ./libjava/gnu/java/beans/editors/NativeShortEditor.java ! 3828622539b ./libjava/gnu/java/beans/editors/StringEditor.java ! 988057590b ./libjava/gnu/java/beans/EmptyBeanInfo.java ! 2151935590b ./libjava/gnu/java/beans/ExplicitBeanInfo.java ! 127708904b ./libjava/gnu/java/beans/info/ComponentBeanInfo.java ! 72314036b ./libjava/gnu/java/beans/IntrospectionIncubator.java ! 3962186427b ./libjava/gnu/java/io/ClassLoaderObjectInputStream.java ! 1228002358b ./libjava/gnu/java/io/NullOutputStream.java ! 3565745044b ./libjava/gnu/java/io/ObjectIdentityWrapper.java ! 1867547596b ./libjava/gnu/java/lang/ArrayHelper.java ! 1542742885b ./libjava/gnu/java/lang/ClassHelper.java ! 2961910985b ./libjava/gnu/java/lang/reflect/TypeSignature.java ! 1500316389b ./libjava/gnu/java/locale/Calendar_de.java ! 4267165056b ./libjava/gnu/java/locale/Calendar_en.java ! 2980613011b ./libjava/gnu/java/locale/Calendar.java ! 1117504825b ./libjava/gnu/java/locale/Calendar_nl.java ! 674671617b ./libjava/gnu/java/security/provider/Gnu.java ! 1906234033b ./libjava/gnu/java/security/provider/SHA1PRNG.java ! 61780098b ./libjava/gnu/java/security/provider/SHA.java ! 3913589198b ./libjava/HACKING ! 332977143b ./libjava/include/boehm-gc.h ! 287131728b ./libjava/include/config.h.in 1108817619b ./libjava/include/default-signal.h ! 1148242917b ./libjava/include/dwarf2-signal.h ! 598122022b ./libjava/include/i386-signal.h 590982531b ./libjava/include/java-assert.h ! 2915860759b ./libjava/include/java-chardecomp.h ! 1707166649b ./libjava/include/java-chartables.h 11772111b ./libjava/include/java-cpool.h ! 901786356b ./libjava/include/java-insns.h ! 3196660512b ./libjava/include/java-interp.h 770850052b ./libjava/include/java-props.h ! 1103865457b ./libjava/include/jni.h ! 422446180b ./libjava/include/jvm.h 1398877611b ./libjava/include/jvmpi.h 2049405362b ./libjava/include/Makefile.am ! 2120312729b ./libjava/include/Makefile.in ! 2161520436b ./libjava/include/name-finder.h 528567171b ./libjava/include/no-gc.h ! 1417677646b ./libjava/include/no-threads.h ! 857399060b ./libjava/include/posix.h ! 2127673017b ./libjava/include/posix-threads.h ! 2366673227b ./libjava/include/sparc-signal.h 216805921b ./libjava/include/stamp-h.in 2649356437b ./libjava/include/win32-signal.h ! 2516944769b ./libjava/include/win32-threads.h ! 86111431b ./libjava/interpret.cc ! 3172045496b ./libjava/java/applet/AppletContext.java ! 2309249335b ./libjava/java/applet/Applet.java ! 1042170972b ./libjava/java/applet/AppletStub.java ! 2275982857b ./libjava/java/applet/AudioClip.java ! 3266569852b ./libjava/java/awt/ActiveEvent.java ! 3583139554b ./libjava/java/awt/Adjustable.java ! 1865738223b ./libjava/java/awt/AWTError.java ! 3117047937b ./libjava/java/awt/AWTEvent.java ! 505816507b ./libjava/java/awt/AWTEventMulticaster.java ! 302850174b ./libjava/java/awt/AWTException.java ! 110449746b ./libjava/java/awt/AWTPermission.java ! 2475254460b ./libjava/java/awt/BorderLayout.java ! 1439785158b ./libjava/java/awt/Button.java ! 2586489363b ./libjava/java/awt/Canvas.java ! 1446158171b ./libjava/java/awt/CardLayout.java ! 312153050b ./libjava/java/awt/CheckboxGroup.java ! 2782857657b ./libjava/java/awt/Checkbox.java ! 2145189296b ./libjava/java/awt/CheckboxMenuItem.java ! 1514926119b ./libjava/java/awt/Choice.java ! 2719082391b ./libjava/java/awt/color/ColorSpace.java ! 2177357666b ./libjava/java/awt/color/ICC_ColorSpace.java ! 4150885630b ./libjava/java/awt/color/ICC_Profile.java ! 3278701452b ./libjava/java/awt/Color.java ! 3654968179b ./libjava/java/awt/Component.java ! 1017582805b ./libjava/java/awt/ComponentOrientation.java ! 1422226525b ./libjava/java/awt/Container.java ! 4291249901b ./libjava/java/awt/Cursor.java ! 2483186014b ./libjava/java/awt/datatransfer/Clipboard.java ! 1796529130b ./libjava/java/awt/Dialog.java ! 422290141b ./libjava/java/awt/Dimension.java 722690297b ./libjava/java/awt/event/ActionEvent.java 1915593531b ./libjava/java/awt/event/ActionListener.java 3892890048b ./libjava/java/awt/event/AdjustmentEvent.java --- 11602,11907 ---- 2721622585b ./libjava/gnu/gcj/xlib/natClip.cc 313845725b ./libjava/gnu/gcj/xlib/natColormap.cc 4037646551b ./libjava/gnu/gcj/xlib/natDisplay.cc ! 639031309b ./libjava/gnu/gcj/xlib/natDrawable.cc ! 1648177432b ./libjava/gnu/gcj/xlib/natFont.cc 61045074b ./libjava/gnu/gcj/xlib/natGC.cc 2441230090b ./libjava/gnu/gcj/xlib/natPixmap.cc 1112468906b ./libjava/gnu/gcj/xlib/natScreen.cc 3505240565b ./libjava/gnu/gcj/xlib/natVisual.cc ! 49610297b ./libjava/gnu/gcj/xlib/natWindowAttributes.cc 3715533436b ./libjava/gnu/gcj/xlib/natWindow.cc ! 2728656554b ./libjava/gnu/gcj/xlib/natWMSizeHints.cc 2928451851b ./libjava/gnu/gcj/xlib/natXAnyEvent.cc 1448210768b ./libjava/gnu/gcj/xlib/natXButtonEvent.cc 1690231537b ./libjava/gnu/gcj/xlib/natXColor.cc 2465747567b ./libjava/gnu/gcj/xlib/natXConfigureEvent.cc 1372643816b ./libjava/gnu/gcj/xlib/natXException.cc 1109730421b ./libjava/gnu/gcj/xlib/natXExposeEvent.cc ! 2724939209b ./libjava/gnu/gcj/xlib/natXImage.cc 2947736072b ./libjava/gnu/gcj/xlib/natXUnmapEvent.cc ! 3285825579b ./libjava/gnu/gcj/xlib/Pixmap.java 3350074944b ./libjava/gnu/gcj/xlib/Screen.java 442092378b ./libjava/gnu/gcj/xlib/Visual.java ! 2703412405b ./libjava/gnu/gcj/xlib/WindowAttributes.java 2300472805b ./libjava/gnu/gcj/xlib/Window.java 540355668b ./libjava/gnu/gcj/xlib/WMSizeHints.java 735616079b ./libjava/gnu/gcj/xlib/XAnyEvent.java 2053093871b ./libjava/gnu/gcj/xlib/XButtonEvent.java ! 1193490335b ./libjava/gnu/gcj/xlib/XColor.java 3412915905b ./libjava/gnu/gcj/xlib/XConfigureEvent.java 3680444774b ./libjava/gnu/gcj/xlib/XConnectException.java 3758585380b ./libjava/gnu/gcj/xlib/XEvent.java ! 2109559056b ./libjava/gnu/gcj/xlib/XException.java 3813405109b ./libjava/gnu/gcj/xlib/XExposeEvent.java 1394364288b ./libjava/gnu/gcj/xlib/XID.java ! 2651203935b ./libjava/gnu/gcj/xlib/XImage.java 623452528b ./libjava/gnu/gcj/xlib/XUnmapEvent.java ! 251988486b ./libjava/gnu/java/awt/BitMaskExtent.java ! 2959084409b ./libjava/gnu/java/awt/Buffers.java ! 3864124155b ./libjava/gnu/java/awt/ComponentDataBlitOp.java ! 76001054b ./libjava/gnu/java/awt/GLightweightPeer.java ! 4175984299b ./libjava/gnu/java/beans/BeanInfoEmbryo.java ! 1186439895b ./libjava/gnu/java/beans/editors/ColorEditor.java ! 1824068032b ./libjava/gnu/java/beans/editors/FontEditor.java ! 1141912550b ./libjava/gnu/java/beans/editors/NativeBooleanEditor.java ! 3464614661b ./libjava/gnu/java/beans/editors/NativeByteEditor.java ! 2154821458b ./libjava/gnu/java/beans/editors/NativeDoubleEditor.java ! 956044404b ./libjava/gnu/java/beans/editors/NativeFloatEditor.java ! 1106992351b ./libjava/gnu/java/beans/editors/NativeIntEditor.java ! 3649786395b ./libjava/gnu/java/beans/editors/NativeLongEditor.java ! 2388248931b ./libjava/gnu/java/beans/editors/NativeShortEditor.java ! 84373625b ./libjava/gnu/java/beans/editors/StringEditor.java ! 1050980841b ./libjava/gnu/java/beans/EmptyBeanInfo.java ! 4274204668b ./libjava/gnu/java/beans/ExplicitBeanInfo.java ! 3309737548b ./libjava/gnu/java/beans/info/ComponentBeanInfo.java ! 2859546207b ./libjava/gnu/java/beans/IntrospectionIncubator.java ! 1517826185b ./libjava/gnu/java/io/ClassLoaderObjectInputStream.java ! 185400995b ./libjava/gnu/java/io/NullOutputStream.java ! 337775204b ./libjava/gnu/java/io/ObjectIdentityWrapper.java ! 412146955b ./libjava/gnu/java/lang/ArrayHelper.java ! 1957385229b ./libjava/gnu/java/lang/CharData.java ! 1294839044b ./libjava/gnu/java/lang/ClassHelper.java ! 375881807b ./libjava/gnu/java/lang/reflect/TypeSignature.java ! 3366025795b ./libjava/gnu/java/locale/Calendar_de.java ! 3838960820b ./libjava/gnu/java/locale/Calendar_en.java ! 3367817123b ./libjava/gnu/java/locale/Calendar.java ! 2827383186b ./libjava/gnu/java/locale/Calendar_nl.java ! 853990452b ./libjava/gnu/java/locale/LocaleInformation_af_ZA.java ! 3574665519b ./libjava/gnu/java/locale/LocaleInformation_ar_AE.java ! 1313953526b ./libjava/gnu/java/locale/LocaleInformation_ar_BH.java ! 1063099118b ./libjava/gnu/java/locale/LocaleInformation_ar_DZ.java ! 2661355701b ./libjava/gnu/java/locale/LocaleInformation_ar_EG.java ! 792384655b ./libjava/gnu/java/locale/LocaleInformation_ar_IN.java ! 2984374613b ./libjava/gnu/java/locale/LocaleInformation_ar_IQ.java ! 149108303b ./libjava/gnu/java/locale/LocaleInformation_ar_JO.java ! 3524478720b ./libjava/gnu/java/locale/LocaleInformation_ar_KW.java ! 83370893b ./libjava/gnu/java/locale/LocaleInformation_ar_LB.java ! 3602937944b ./libjava/gnu/java/locale/LocaleInformation_ar_LY.java ! 4151428411b ./libjava/gnu/java/locale/LocaleInformation_ar_MA.java ! 4074629453b ./libjava/gnu/java/locale/LocaleInformation_ar_OM.java ! 4155901603b ./libjava/gnu/java/locale/LocaleInformation_ar_QA.java ! 2390802667b ./libjava/gnu/java/locale/LocaleInformation_ar_SD.java ! 658870558b ./libjava/gnu/java/locale/LocaleInformation_ar_SY.java ! 633628430b ./libjava/gnu/java/locale/LocaleInformation_ar_TN.java ! 3417988329b ./libjava/gnu/java/locale/LocaleInformation_ar_YE.java ! 16694947b ./libjava/gnu/java/locale/LocaleInformation_be_BY.java ! 2893823739b ./libjava/gnu/java/locale/LocaleInformation_bn_IN.java ! 3473497973b ./libjava/gnu/java/locale/LocaleInformation_br_FR.java ! 2011654773b ./libjava/gnu/java/locale/LocaleInformation_bs_BA.java ! 703208961b ./libjava/gnu/java/locale/LocaleInformation_ca_ES.java ! 3606272911b ./libjava/gnu/java/locale/LocaleInformation_cs_CZ.java ! 3029808974b ./libjava/gnu/java/locale/LocaleInformation_cy_GB.java ! 3138806717b ./libjava/gnu/java/locale/LocaleInformation_da_DK.java ! 660397810b ./libjava/gnu/java/locale/LocaleInformation_de_AT.java ! 2697869622b ./libjava/gnu/java/locale/LocaleInformation_de_BE.java ! 1184133602b ./libjava/gnu/java/locale/LocaleInformation_de_CH.java ! 2039543804b ./libjava/gnu/java/locale/LocaleInformation_de_DE.java ! 1896252461b ./libjava/gnu/java/locale/LocaleInformation_de.java ! 1754963126b ./libjava/gnu/java/locale/LocaleInformation_de_LU.java ! 1950789713b ./libjava/gnu/java/locale/LocaleInformation_el_GR.java ! 3105733407b ./libjava/gnu/java/locale/LocaleInformation_en_AU.java ! 1645688637b ./libjava/gnu/java/locale/LocaleInformation_en_BW.java ! 1552823020b ./libjava/gnu/java/locale/LocaleInformation_en_CA.java ! 1224627615b ./libjava/gnu/java/locale/LocaleInformation_en_DK.java ! 1660785124b ./libjava/gnu/java/locale/LocaleInformation_en_GB.java ! 3654129156b ./libjava/gnu/java/locale/LocaleInformation_en_HK.java ! 1423793734b ./libjava/gnu/java/locale/LocaleInformation_en_IE.java ! 3034389835b ./libjava/gnu/java/locale/LocaleInformation_en_IN.java ! 1639156831b ./libjava/gnu/java/locale/LocaleInformation_en.java ! 4146466217b ./libjava/gnu/java/locale/LocaleInformation_en_NZ.java ! 2700111700b ./libjava/gnu/java/locale/LocaleInformation_en_PH.java ! 1734741103b ./libjava/gnu/java/locale/LocaleInformation_en_SG.java ! 3123474486b ./libjava/gnu/java/locale/LocaleInformation_en_US.java ! 1439333667b ./libjava/gnu/java/locale/LocaleInformation_en_ZA.java ! 835156286b ./libjava/gnu/java/locale/LocaleInformation_en_ZW.java ! 3007131568b ./libjava/gnu/java/locale/LocaleInformation_es_AR.java ! 3464689606b ./libjava/gnu/java/locale/LocaleInformation_es_BO.java ! 2989224997b ./libjava/gnu/java/locale/LocaleInformation_es_CL.java ! 308487454b ./libjava/gnu/java/locale/LocaleInformation_es_CO.java ! 1200270410b ./libjava/gnu/java/locale/LocaleInformation_es_CR.java ! 1068207106b ./libjava/gnu/java/locale/LocaleInformation_es_DO.java ! 14677377b ./libjava/gnu/java/locale/LocaleInformation_es_EC.java ! 3508510841b ./libjava/gnu/java/locale/LocaleInformation_es_ES.java ! 649064556b ./libjava/gnu/java/locale/LocaleInformation_es_GT.java ! 3444054086b ./libjava/gnu/java/locale/LocaleInformation_es_HN.java ! 3555909696b ./libjava/gnu/java/locale/LocaleInformation_es_MX.java ! 2833308305b ./libjava/gnu/java/locale/LocaleInformation_es_NI.java ! 4174396920b ./libjava/gnu/java/locale/LocaleInformation_es_PA.java ! 838660172b ./libjava/gnu/java/locale/LocaleInformation_es_PE.java ! 3589446087b ./libjava/gnu/java/locale/LocaleInformation_es_PR.java ! 4075678248b ./libjava/gnu/java/locale/LocaleInformation_es_PY.java ! 2329208913b ./libjava/gnu/java/locale/LocaleInformation_es_SV.java ! 2413424051b ./libjava/gnu/java/locale/LocaleInformation_es_US.java ! 2571158522b ./libjava/gnu/java/locale/LocaleInformation_es_UY.java ! 3961724338b ./libjava/gnu/java/locale/LocaleInformation_es_VE.java ! 1652877014b ./libjava/gnu/java/locale/LocaleInformation_et_EE.java ! 1998932970b ./libjava/gnu/java/locale/LocaleInformation_eu_ES.java ! 1225517253b ./libjava/gnu/java/locale/LocaleInformation_fa_IR.java ! 4095933109b ./libjava/gnu/java/locale/LocaleInformation_fi_FI.java ! 4260527638b ./libjava/gnu/java/locale/LocaleInformation_fo_FO.java ! 313030804b ./libjava/gnu/java/locale/LocaleInformation_fr_BE.java ! 929726634b ./libjava/gnu/java/locale/LocaleInformation_fr_CA.java ! 3560295796b ./libjava/gnu/java/locale/LocaleInformation_fr_CH.java ! 1651927254b ./libjava/gnu/java/locale/LocaleInformation_fr_FR.java ! 1770965918b ./libjava/gnu/java/locale/LocaleInformation_fr_LU.java ! 2930632457b ./libjava/gnu/java/locale/LocaleInformation_ga_IE.java ! 3764917948b ./libjava/gnu/java/locale/LocaleInformation_gd_GB.java ! 184397736b ./libjava/gnu/java/locale/LocaleInformation_gl_ES.java ! 4075108403b ./libjava/gnu/java/locale/LocaleInformation_gv_GB.java ! 3671687849b ./libjava/gnu/java/locale/LocaleInformation_he_IL.java ! 1551837931b ./libjava/gnu/java/locale/LocaleInformation_hi_IN.java ! 2876691276b ./libjava/gnu/java/locale/LocaleInformation_hr_HR.java ! 2174207126b ./libjava/gnu/java/locale/LocaleInformation_hu_HU.java ! 2936636022b ./libjava/gnu/java/locale/LocaleInformation_id_ID.java ! 679304833b ./libjava/gnu/java/locale/LocaleInformation_it_CH.java ! 2288758679b ./libjava/gnu/java/locale/LocaleInformation_it_IT.java ! 1670529133b ./libjava/gnu/java/locale/LocaleInformation_iw_IL.java ! 4285275820b ./libjava/gnu/java/locale/LocaleInformation_ja_JP.java ! 88782889b ./libjava/gnu/java/locale/LocaleInformation.java ! 305209674b ./libjava/gnu/java/locale/LocaleInformation_ka_GE.java ! 289636212b ./libjava/gnu/java/locale/LocaleInformation_kl_GL.java ! 3381743821b ./libjava/gnu/java/locale/LocaleInformation_ko_KR.java ! 1243496183b ./libjava/gnu/java/locale/LocaleInformation_kw_GB.java ! 808874315b ./libjava/gnu/java/locale/LocaleInformation_lt_LT.java ! 3825187332b ./libjava/gnu/java/locale/LocaleInformation_lv_LV.java ! 3084880379b ./libjava/gnu/java/locale/LocaleInformation_mi_NZ.java ! 1118828067b ./libjava/gnu/java/locale/LocaleInformation_mk_MK.java ! 3470919889b ./libjava/gnu/java/locale/LocaleInformation_mr_IN.java ! 3011395902b ./libjava/gnu/java/locale/LocaleInformation_mt_MT.java ! 3941557872b ./libjava/gnu/java/locale/LocaleInformation_nl_BE.java ! 803932216b ./libjava/gnu/java/locale/LocaleInformation_nl.java ! 2192944115b ./libjava/gnu/java/locale/LocaleInformation_nl_NL.java ! 171051379b ./libjava/gnu/java/locale/LocaleInformation_nn_NO.java ! 1581832797b ./libjava/gnu/java/locale/LocaleInformation_no_NO.java ! 1219732943b ./libjava/gnu/java/locale/LocaleInformation_oc_FR.java ! 2114116519b ./libjava/gnu/java/locale/LocaleInformation_pl_PL.java ! 1296721389b ./libjava/gnu/java/locale/LocaleInformation_pt_BR.java ! 532295687b ./libjava/gnu/java/locale/LocaleInformation_pt_PT.java ! 3905012288b ./libjava/gnu/java/locale/LocaleInformation_ro_RO.java ! 2891469302b ./libjava/gnu/java/locale/LocaleInformation_ru_RU.java ! 2211921262b ./libjava/gnu/java/locale/LocaleInformation_ru_UA.java ! 2154597673b ./libjava/gnu/java/locale/LocaleInformation_se_NO.java ! 1657728755b ./libjava/gnu/java/locale/LocaleInformation_sk_SK.java ! 4026231879b ./libjava/gnu/java/locale/LocaleInformation_sl_SI.java ! 2922727788b ./libjava/gnu/java/locale/LocaleInformation_sq_AL.java ! 3806137820b ./libjava/gnu/java/locale/LocaleInformation_sr_YU.java ! 1835499757b ./libjava/gnu/java/locale/LocaleInformation_sv_FI.java ! 1350098382b ./libjava/gnu/java/locale/LocaleInformation_sv_SE.java ! 189094633b ./libjava/gnu/java/locale/LocaleInformation_ta_IN.java ! 2178333634b ./libjava/gnu/java/locale/LocaleInformation_te_IN.java ! 2564074117b ./libjava/gnu/java/locale/LocaleInformation_tg_TJ.java ! 1155895744b ./libjava/gnu/java/locale/LocaleInformation_tl_PH.java ! 2362053980b ./libjava/gnu/java/locale/LocaleInformation_tr_TR.java ! 1718823447b ./libjava/gnu/java/locale/LocaleInformation_uk_UA.java ! 3861809213b ./libjava/gnu/java/locale/LocaleInformation_ur_PK.java ! 3380107b ./libjava/gnu/java/locale/LocaleInformation_uz_UZ.java ! 1701278586b ./libjava/gnu/java/locale/LocaleInformation_vi_VN.java ! 1606209787b ./libjava/gnu/java/locale/LocaleInformation_yi_US.java ! 2421213319b ./libjava/gnu/java/locale/LocaleInformation_zh_CN.java ! 183615398b ./libjava/gnu/java/locale/LocaleInformation_zh_HK.java ! 1075516168b ./libjava/gnu/java/locale/LocaleInformation_zh_SG.java ! 3357709537b ./libjava/gnu/java/locale/LocaleInformation_zh_TW.java ! 3391912438b ./libjava/gnu/java/math/MPN.java ! 4169108228b ./libjava/gnu/java/rmi/dgc/DGCImpl.java ! 4171280577b ./libjava/gnu/java/rmi/dgc/DGCImpl_Skel.java ! 1424132902b ./libjava/gnu/java/rmi/dgc/DGCImpl_Stub.java ! 1371885502b ./libjava/gnu/java/rmi/registry/RegistryImpl.java ! 583279947b ./libjava/gnu/java/rmi/registry/RegistryImpl_Skel.java ! 44985979b ./libjava/gnu/java/rmi/registry/RegistryImpl_Stub.java ! 3466229248b ./libjava/gnu/java/rmi/rmic/Compile_gcj.java ! 2495154954b ./libjava/gnu/java/rmi/rmic/Compiler.java ! 2850269889b ./libjava/gnu/java/rmi/rmic/CompilerProcess.java ! 4019537723b ./libjava/gnu/java/rmi/rmic/RMIC.java ! 634294081b ./libjava/gnu/java/rmi/rmic/TabbedWriter.java ! 2494884681b ./libjava/gnu/java/rmi/server/ProtocolConstants.java ! 1676680003b ./libjava/gnu/java/rmi/server/RMIDefaultSocketFactory.java ! 2333110819b ./libjava/gnu/java/rmi/server/RMIHashes.java ! 742398258b ./libjava/gnu/java/rmi/server/RMIObjectInputStream.java ! 1754833006b ./libjava/gnu/java/rmi/server/RMIObjectOutputStream.java ! 3598051261b ./libjava/gnu/java/rmi/server/UnicastConnection.java ! 2756896208b ./libjava/gnu/java/rmi/server/UnicastConnectionManager.java ! 1237410073b ./libjava/gnu/java/rmi/server/UnicastRef.java ! 764069575b ./libjava/gnu/java/rmi/server/UnicastRemoteCall.java ! 2008823240b ./libjava/gnu/java/rmi/server/UnicastRemoteStub.java ! 2722838441b ./libjava/gnu/java/rmi/server/UnicastServer.java ! 3552747973b ./libjava/gnu/java/rmi/server/UnicastServerRef.java ! 841643156b ./libjava/gnu/java/security/provider/DefaultPolicy.java ! 663745795b ./libjava/gnu/java/security/provider/Gnu.java ! 1021717986b ./libjava/gnu/java/security/provider/SHA1PRNG.java ! 2413849314b ./libjava/gnu/java/security/provider/SHA.java ! 1289725769b ./libjava/gnu/java/text/BaseBreakIterator.java ! 3390709828b ./libjava/gnu/java/text/CharacterBreakIterator.java ! 1407853328b ./libjava/gnu/java/text/LineBreakIterator.java ! 2384000550b ./libjava/gnu/java/text/SentenceBreakIterator.java ! 1103805396b ./libjava/gnu/java/text/WordBreakIterator.java ! 3820369931b ./libjava/gnu/java/util/DoubleEnumeration.java ! 1487334009b ./libjava/HACKING ! 264180982b ./libjava/include/boehm-gc.h ! 2986199884b ./libjava/include/config.h.in 1108817619b ./libjava/include/default-signal.h ! 833024369b ./libjava/include/dwarf2-signal.h ! 1283777735b ./libjava/include/i386-signal.h 590982531b ./libjava/include/java-assert.h ! 890969256b ./libjava/include/java-chardecomp.h ! 3721703006b ./libjava/include/java-chartables.h 11772111b ./libjava/include/java-cpool.h ! 2197729359b ./libjava/include/java-insns.h ! 1956488254b ./libjava/include/java-interp.h 770850052b ./libjava/include/java-props.h ! 4043128117b ./libjava/include/jni.h ! 1917986290b ./libjava/include/jvm.h 1398877611b ./libjava/include/jvmpi.h 2049405362b ./libjava/include/Makefile.am ! 2861273894b ./libjava/include/Makefile.in ! 1055189824b ./libjava/include/name-finder.h 528567171b ./libjava/include/no-gc.h ! 2243083888b ./libjava/include/no-threads.h ! 1563983297b ./libjava/include/posix.h ! 2807487107b ./libjava/include/posix-threads.h ! 1012702888b ./libjava/include/sparc-signal.h 216805921b ./libjava/include/stamp-h.in + 976467848b ./libjava/include/win32.h 2649356437b ./libjava/include/win32-signal.h ! 2413743549b ./libjava/include/win32-threads.h ! 3593727190b ./libjava/interpret.cc ! 1953201146b ./libjava/java/applet/AppletContext.java ! 2958027378b ./libjava/java/applet/Applet.java ! 2731140101b ./libjava/java/applet/AppletStub.java ! 3593095746b ./libjava/java/applet/AudioClip.java ! 160993819b ./libjava/java/awt/ActiveEvent.java ! 3526070699b ./libjava/java/awt/Adjustable.java ! 1157609128b ./libjava/java/awt/AWTError.java ! 111816746b ./libjava/java/awt/AWTEvent.java ! 4165999385b ./libjava/java/awt/AWTEventMulticaster.java ! 825557229b ./libjava/java/awt/AWTException.java ! 285605791b ./libjava/java/awt/AWTPermission.java ! 3534694635b ./libjava/java/awt/BorderLayout.java ! 1398395335b ./libjava/java/awt/Button.java ! 3153758342b ./libjava/java/awt/Canvas.java ! 2092554577b ./libjava/java/awt/CardLayout.java ! 2084690368b ./libjava/java/awt/CheckboxGroup.java ! 2248202942b ./libjava/java/awt/Checkbox.java ! 1349721036b ./libjava/java/awt/CheckboxMenuItem.java ! 1888831652b ./libjava/java/awt/Choice.java ! 1282085816b ./libjava/java/awt/color/ColorSpace.java ! 2276155610b ./libjava/java/awt/color/ICC_ColorSpace.java ! 4017444258b ./libjava/java/awt/color/ICC_Profile.java ! 1705431914b ./libjava/java/awt/Color.java ! 1148661590b ./libjava/java/awt/Component.java ! 361324264b ./libjava/java/awt/ComponentOrientation.java ! 2162499700b ./libjava/java/awt/Container.java ! 4143803538b ./libjava/java/awt/Cursor.java ! 275075726b ./libjava/java/awt/datatransfer/Clipboard.java ! 4070519256b ./libjava/java/awt/datatransfer/ClipboardOwner.java ! 61459584b ./libjava/java/awt/datatransfer/DataFlavor.java ! 783509723b ./libjava/java/awt/datatransfer/FlavorMap.java ! 579142958b ./libjava/java/awt/datatransfer/MimeTypeParseException.java ! 253155729b ./libjava/java/awt/datatransfer/StringSelection.java ! 219256387b ./libjava/java/awt/datatransfer/SystemFlavorMap.java ! 1647430043b ./libjava/java/awt/datatransfer/Transferable.java ! 1851200747b ./libjava/java/awt/datatransfer/UnsupportedFlavorException.java ! 3031261269b ./libjava/java/awt/Dialog.java ! 2683530461b ./libjava/java/awt/Dimension.java 722690297b ./libjava/java/awt/event/ActionEvent.java 1915593531b ./libjava/java/awt/event/ActionListener.java 3892890048b ./libjava/java/awt/event/AdjustmentEvent.java *************** *** 8018,8291 **** 3039204703b ./libjava/java/awt/event/ComponentEvent.java 360564300b ./libjava/java/awt/event/ComponentListener.java 810761210b ./libjava/java/awt/event/ContainerAdapter.java ! 1883311248b ./libjava/java/awt/event/ContainerEvent.java 95255207b ./libjava/java/awt/event/ContainerListener.java ! 1660702469b ./libjava/java/awt/EventDispatchThread.java 1865939252b ./libjava/java/awt/event/FocusAdapter.java 934630871b ./libjava/java/awt/event/FocusEvent.java 4001635571b ./libjava/java/awt/event/FocusListener.java ! 2347071340b ./libjava/java/awt/event/HierarchyBoundsAdapter.java ! 2255326325b ./libjava/java/awt/event/HierarchyBoundsListener.java ! 1211333339b ./libjava/java/awt/event/HierarchyEvent.java ! 778727503b ./libjava/java/awt/event/HierarchyListener.java ! 2914452384b ./libjava/java/awt/event/InputEvent.java 726380493b ./libjava/java/awt/event/InputMethodEvent.java 4033049562b ./libjava/java/awt/event/InputMethodListener.java 1843469307b ./libjava/java/awt/event/InvocationEvent.java 3611652050b ./libjava/java/awt/event/ItemEvent.java 3300913656b ./libjava/java/awt/event/ItemListener.java ! 4171753372b ./libjava/java/awt/Event.java 1564566587b ./libjava/java/awt/event/KeyAdapter.java 3711723317b ./libjava/java/awt/event/KeyEvent.java 1381805491b ./libjava/java/awt/event/KeyListener.java 2313273360b ./libjava/java/awt/event/MouseAdapter.java ! 1704869602b ./libjava/java/awt/event/MouseEvent.java 1649544172b ./libjava/java/awt/event/MouseListener.java 1060229023b ./libjava/java/awt/event/MouseMotionAdapter.java 1773953094b ./libjava/java/awt/event/MouseMotionListener.java 560349420b ./libjava/java/awt/event/PaintEvent.java ! 2587141998b ./libjava/java/awt/EventQueue.java 3023928876b ./libjava/java/awt/event/TextEvent.java 2239555241b ./libjava/java/awt/event/TextListener.java 2939336909b ./libjava/java/awt/event/WindowAdapter.java 3033208050b ./libjava/java/awt/event/WindowEvent.java 1930937502b ./libjava/java/awt/event/WindowListener.java ! 1644523368b ./libjava/java/awt/FileDialog.java ! 2242238262b ./libjava/java/awt/FlowLayout.java ! 858949050b ./libjava/java/awt/Font.java ! 4294407624b ./libjava/java/awt/FontMetrics.java ! 2505483948b ./libjava/java/awt/Frame.java ! 747511287b ./libjava/java/awt/geom/AffineTransform.java ! 2832082383b ./libjava/java/awt/geom/Dimension2D.java ! 1623904439b ./libjava/java/awt/geom/Ellipse2D.java ! 1290218290b ./libjava/java/awt/geom/IllegalPathStateException.java ! 3950802725b ./libjava/java/awt/geom/NoninvertibleTransformException.java ! 3767711060b ./libjava/java/awt/geom/PathIterator.java ! 236635912b ./libjava/java/awt/geom/Point2D.java ! 1973336607b ./libjava/java/awt/geom/Rectangle2D.java ! 4034427088b ./libjava/java/awt/geom/RectangularShape.java ! 3242812542b ./libjava/java/awt/geom/RoundRectangle2D.java ! 786657339b ./libjava/java/awt/Graphics2D.java ! 237358674b ./libjava/java/awt/GraphicsConfiguration.java ! 1245424989b ./libjava/java/awt/Graphics.java ! 2710187713b ./libjava/java/awt/GridBagConstraints.java ! 3759111665b ./libjava/java/awt/GridLayout.java ! 3402406228b ./libjava/java/awt/IllegalComponentStateException.java ! 2449373443b ./libjava/java/awt/image/BufferedImage.java ! 814386953b ./libjava/java/awt/image/ColorModel.java ! 4100236774b ./libjava/java/awt/image/ComponentColorModel.java ! 82380134b ./libjava/java/awt/image/ComponentSampleModel.java ! 3537520750b ./libjava/java/awt/image/DataBufferByte.java ! 1464937158b ./libjava/java/awt/image/DataBufferInt.java ! 204885485b ./libjava/java/awt/image/DataBuffer.java ! 1975442350b ./libjava/java/awt/image/DataBufferUShort.java ! 1571054975b ./libjava/java/awt/image/DirectColorModel.java ! 786828154b ./libjava/java/awt/image/ImageConsumer.java ! 1552367570b ./libjava/java/awt/image/ImageObserver.java ! 1200545486b ./libjava/java/awt/image/ImageProducer.java ! 3006339646b ./libjava/java/awt/image/IndexColorModel.java ! 3971009939b ./libjava/java/awt/Image.java ! 2758776414b ./libjava/java/awt/image/PackedColorModel.java ! 1057113305b ./libjava/java/awt/image/Raster.java ! 2089870070b ./libjava/java/awt/image/RasterOp.java ! 1621898252b ./libjava/java/awt/image/SampleModel.java ! 3444535959b ./libjava/java/awt/image/SinglePixelPackedSampleModel.java ! 1047509558b ./libjava/java/awt/image/WritableRaster.java ! 3043680743b ./libjava/java/awt/Insets.java ! 4143716071b ./libjava/java/awt/ItemSelectable.java ! 541307878b ./libjava/java/awt/Label.java ! 1111014901b ./libjava/java/awt/LayoutManager2.java ! 3149759358b ./libjava/java/awt/LayoutManager.java ! 220566601b ./libjava/java/awt/List.java ! 2076129343b ./libjava/java/awt/MenuBar.java ! 3656271735b ./libjava/java/awt/MenuComponent.java ! 802096992b ./libjava/java/awt/MenuContainer.java ! 4242136319b ./libjava/java/awt/MenuItem.java ! 1754859075b ./libjava/java/awt/Menu.java ! 3233454982b ./libjava/java/awt/MenuShortcut.java ! 794455040b ./libjava/java/awt/PaintContext.java ! 2594735532b ./libjava/java/awt/Paint.java ! 1732382017b ./libjava/java/awt/Panel.java ! 1707164566b ./libjava/java/awt/peer/ButtonPeer.java ! 2198306292b ./libjava/java/awt/peer/CanvasPeer.java ! 123130701b ./libjava/java/awt/peer/CheckboxMenuItemPeer.java ! 3767454904b ./libjava/java/awt/peer/CheckboxPeer.java ! 812318856b ./libjava/java/awt/peer/ChoicePeer.java ! 1231293934b ./libjava/java/awt/peer/ComponentPeer.java ! 4086009302b ./libjava/java/awt/peer/ContainerPeer.java ! 1153783865b ./libjava/java/awt/peer/DialogPeer.java ! 1297629706b ./libjava/java/awt/peer/FileDialogPeer.java ! 773929652b ./libjava/java/awt/peer/FontPeer.java ! 1875338935b ./libjava/java/awt/peer/FramePeer.java ! 100440318b ./libjava/java/awt/peer/LabelPeer.java ! 3589571724b ./libjava/java/awt/peer/LightweightPeer.java ! 3552812792b ./libjava/java/awt/peer/ListPeer.java ! 988464184b ./libjava/java/awt/peer/MenuBarPeer.java ! 1801313112b ./libjava/java/awt/peer/MenuComponentPeer.java ! 468783139b ./libjava/java/awt/peer/MenuItemPeer.java ! 2442654924b ./libjava/java/awt/peer/MenuPeer.java ! 3630263770b ./libjava/java/awt/peer/PanelPeer.java ! 2329942112b ./libjava/java/awt/peer/PopupMenuPeer.java ! 126407742b ./libjava/java/awt/peer/ScrollbarPeer.java ! 3215389936b ./libjava/java/awt/peer/ScrollPanePeer.java ! 2718197343b ./libjava/java/awt/peer/TextAreaPeer.java ! 1004466783b ./libjava/java/awt/peer/TextComponentPeer.java ! 1876113695b ./libjava/java/awt/peer/TextFieldPeer.java ! 2270109896b ./libjava/java/awt/peer/WindowPeer.java ! 331631424b ./libjava/java/awt/Point.java ! 2735084322b ./libjava/java/awt/PopupMenu.java ! 3720195621b ./libjava/java/awt/Rectangle.java ! 3170079077b ./libjava/java/awt/RenderingHints.java ! 524430192b ./libjava/java/awt/Scrollbar.java 3117778311b ./libjava/java/awt/ScrollPane.java ! 1687004984b ./libjava/java/awt/Shape.java ! 4162613585b ./libjava/java/awt/SystemColor.java ! 4104447738b ./libjava/java/awt/TextArea.java ! 1106524657b ./libjava/java/awt/TextComponent.java ! 276115400b ./libjava/java/awt/TextField.java ! 2789005197b ./libjava/java/awt/Toolkit.java ! 2808507478b ./libjava/java/awt/Transparency.java ! 847951992b ./libjava/java/awt/Window.java ! 3977693521b ./libjava/java/beans/beancontext/BeanContextChildComponentProxy.java ! 1013264905b ./libjava/java/beans/beancontext/BeanContextChild.java ! 1577803063b ./libjava/java/beans/beancontext/BeanContextChildSupport.java ! 2709952616b ./libjava/java/beans/beancontext/BeanContextContainerProxy.java ! 1417079879b ./libjava/java/beans/beancontext/BeanContextEvent.java ! 2941787978b ./libjava/java/beans/beancontext/BeanContext.java ! 4189274788b ./libjava/java/beans/beancontext/BeanContextMembershipEvent.java ! 541902676b ./libjava/java/beans/beancontext/BeanContextMembershipListener.java ! 602609663b ./libjava/java/beans/beancontext/BeanContextProxy.java ! 3990725236b ./libjava/java/beans/beancontext/BeanContextServiceAvailableEvent.java ! 3697429777b ./libjava/java/beans/beancontext/BeanContextServiceProviderBeanInfo.java ! 3232646497b ./libjava/java/beans/beancontext/BeanContextServiceProvider.java ! 38598995b ./libjava/java/beans/beancontext/BeanContextServiceRevokedEvent.java ! 2749444455b ./libjava/java/beans/beancontext/BeanContextServiceRevokedListener.java ! 379642514b ./libjava/java/beans/beancontext/BeanContextServices.java ! 1498501746b ./libjava/java/beans/beancontext/BeanContextServicesListener.java ! 415858019b ./libjava/java/beans/BeanDescriptor.java ! 3350696043b ./libjava/java/beans/BeanInfo.java ! 2147681857b ./libjava/java/beans/Beans.java ! 1960829615b ./libjava/java/beans/Customizer.java ! 324324994b ./libjava/java/beans/DesignMode.java ! 1562989630b ./libjava/java/beans/EventSetDescriptor.java ! 693069986b ./libjava/java/beans/FeatureDescriptor.java ! 3637486826b ./libjava/java/beans/IndexedPropertyDescriptor.java ! 1373737273b ./libjava/java/beans/IntrospectionException.java ! 1249982089b ./libjava/java/beans/Introspector.java ! 3422288718b ./libjava/java/beans/MethodDescriptor.java ! 3544098469b ./libjava/java/beans/ParameterDescriptor.java ! 3526766727b ./libjava/java/beans/PropertyChangeEvent.java ! 703037013b ./libjava/java/beans/PropertyChangeListener.java ! 2118956427b ./libjava/java/beans/PropertyChangeSupport.java ! 3378954372b ./libjava/java/beans/PropertyDescriptor.java ! 3830749786b ./libjava/java/beans/PropertyEditor.java ! 533992325b ./libjava/java/beans/PropertyEditorManager.java ! 1431319441b ./libjava/java/beans/PropertyEditorSupport.java ! 588455671b ./libjava/java/beans/PropertyVetoException.java ! 2199252132b ./libjava/java/beans/SimpleBeanInfo.java ! 791334711b ./libjava/java/beans/VetoableChangeListener.java ! 2393634620b ./libjava/java/beans/VetoableChangeSupport.java ! 4188283976b ./libjava/java/beans/Visibility.java ! 1632576596b ./libjava/java/io/BufferedInputStream.java ! 380495348b ./libjava/java/io/BufferedOutputStream.java ! 3177974817b ./libjava/java/io/BufferedReader.java ! 106361472b ./libjava/java/io/BufferedWriter.java ! 1921311922b ./libjava/java/io/ByteArrayInputStream.java ! 839616880b ./libjava/java/io/ByteArrayOutputStream.java ! 2659110851b ./libjava/java/io/CharArrayReader.java ! 4145877383b ./libjava/java/io/CharArrayWriter.java ! 74162005b ./libjava/java/io/CharConversionException.java ! 291842595b ./libjava/java/io/DataInput.java ! 1432914103b ./libjava/java/io/DataInputStream.java ! 814477870b ./libjava/java/io/DataOutput.java ! 1792031297b ./libjava/java/io/DataOutputStream.java ! 4260863877b ./libjava/java/io/EOFException.java ! 3970357142b ./libjava/java/io/Externalizable.java ! 2504863172b ./libjava/java/io/FileDescriptor.java ! 4114330107b ./libjava/java/io/FileFilter.java ! 1347883250b ./libjava/java/io/FileInputStream.java ! 1700842754b ./libjava/java/io/File.java ! 2681086913b ./libjava/java/io/FilenameFilter.java ! 3494589896b ./libjava/java/io/FileNotFoundException.java ! 1627894068b ./libjava/java/io/FileOutputStream.java ! 3221074926b ./libjava/java/io/FilePermission.java ! 387896511b ./libjava/java/io/FileReader.java ! 2212175111b ./libjava/java/io/FileWriter.java ! 2333067867b ./libjava/java/io/FilterInputStream.java ! 2685860136b ./libjava/java/io/FilterOutputStream.java ! 598436927b ./libjava/java/io/FilterReader.java ! 1309027155b ./libjava/java/io/FilterWriter.java ! 2988801590b ./libjava/java/io/InputStream.java ! 2109956582b ./libjava/java/io/InputStreamReader.java ! 59106739b ./libjava/java/io/InterruptedIOException.java ! 904177873b ./libjava/java/io/InvalidClassException.java ! 2906974814b ./libjava/java/io/InvalidObjectException.java ! 3105843246b ./libjava/java/io/IOException.java 2297659773b ./libjava/java/io/LineNumberInputStream.java ! 1628141488b ./libjava/java/io/LineNumberReader.java ! 1332507382b ./libjava/java/io/natFile.cc ! 1562521391b ./libjava/java/io/natFileDescriptorEcos.cc ! 2196097286b ./libjava/java/io/natFileDescriptorPosix.cc ! 3769648083b ./libjava/java/io/natFileDescriptorWin32.cc ! 276931083b ./libjava/java/io/natFileWin32.cc ! 1248276847b ./libjava/java/io/natObjectInputStream.cc 4239505089b ./libjava/java/io/natObjectOutputStream.cc ! 513933084b ./libjava/java/io/NotActiveException.java ! 1253763123b ./libjava/java/io/NotSerializableException.java ! 780261215b ./libjava/java/io/ObjectInput.java ! 146354153b ./libjava/java/io/ObjectInputStream.java ! 1427126785b ./libjava/java/io/ObjectInputValidation.java ! 3082732264b ./libjava/java/io/ObjectOutput.java ! 2789692269b ./libjava/java/io/ObjectOutputStream.java ! 3576153587b ./libjava/java/io/ObjectStreamClass.java ! 3218906025b ./libjava/java/io/ObjectStreamConstants.java ! 558463860b ./libjava/java/io/ObjectStreamException.java ! 2872990950b ./libjava/java/io/ObjectStreamField.java ! 1046731203b ./libjava/java/io/OptionalDataException.java ! 794753210b ./libjava/java/io/OutputStream.java 1432753727b ./libjava/java/io/OutputStreamWriter.java ! 2613963478b ./libjava/java/io/PipedInputStream.java ! 353515058b ./libjava/java/io/PipedOutputStream.java ! 424677916b ./libjava/java/io/PipedReader.java ! 1710975727b ./libjava/java/io/PipedWriter.java 1146852699b ./libjava/java/io/PrintStream.java ! 2396480344b ./libjava/java/io/PrintWriter.java ! 3179849042b ./libjava/java/io/PushbackInputStream.java ! 3563791723b ./libjava/java/io/PushbackReader.java ! 2379705441b ./libjava/java/io/RandomAccessFile.java ! 153510004b ./libjava/java/io/Reader.java ! 3941269066b ./libjava/java/io/SequenceInputStream.java ! 2797663173b ./libjava/java/io/Serializable.java ! 3235925424b ./libjava/java/io/SerializablePermission.java ! 2337171682b ./libjava/java/io/StreamCorruptedException.java ! 3287568304b ./libjava/java/io/StreamTokenizer.java ! 3943478157b ./libjava/java/io/StringBufferInputStream.java ! 91893454b ./libjava/java/io/StringReader.java ! 1162792661b ./libjava/java/io/StringWriter.java ! 1393851700b ./libjava/java/io/SyncFailedException.java ! 3277438941b ./libjava/java/io/UnsupportedEncodingException.java ! 3372299271b ./libjava/java/io/UTFDataFormatException.java ! 2331138641b ./libjava/java/io/WriteAbortedException.java ! 3305767237b ./libjava/java/io/Writer.java ! 1817734720b ./libjava/java/lang/AbstractMethodError.java ! 2860171065b ./libjava/java/lang/ArithmeticException.java ! 2771321611b ./libjava/java/lang/ArrayIndexOutOfBoundsException.java ! 3784133658b ./libjava/java/lang/ArrayStoreException.java ! 1949184473b ./libjava/java/lang/Boolean.java ! 3912602300b ./libjava/java/lang/Byte.java ! 1799924505b ./libjava/java/lang/Character.java ! 2465177804b ./libjava/java/lang/ClassCastException.java ! 522355456b ./libjava/java/lang/ClassCircularityError.java ! 1389116330b ./libjava/java/lang/ClassFormatError.java ! 1295012839b ./libjava/java/lang/Class.h ! 2393404172b ./libjava/java/lang/Class.java ! 295751819b ./libjava/java/lang/ClassLoader.java ! 704220625b ./libjava/java/lang/ClassNotFoundException.java ! 1141027261b ./libjava/java/lang/Cloneable.java ! 2356612385b ./libjava/java/lang/CloneNotSupportedException.java ! 2463928338b ./libjava/java/lang/Comparable.java ! 1873136729b ./libjava/java/lang/Compiler.java ! 2121923098b ./libjava/java/lang/Double.java 1435754341b ./libjava/java/lang/dtoa.c 994774164b ./libjava/java/lang/e_acos.c 4273053537b ./libjava/java/lang/e_asin.c --- 11911,12199 ---- 3039204703b ./libjava/java/awt/event/ComponentEvent.java 360564300b ./libjava/java/awt/event/ComponentListener.java 810761210b ./libjava/java/awt/event/ContainerAdapter.java ! 2468937091b ./libjava/java/awt/event/ContainerEvent.java 95255207b ./libjava/java/awt/event/ContainerListener.java ! 483492170b ./libjava/java/awt/EventDispatchThread.java 1865939252b ./libjava/java/awt/event/FocusAdapter.java 934630871b ./libjava/java/awt/event/FocusEvent.java 4001635571b ./libjava/java/awt/event/FocusListener.java ! 4282322346b ./libjava/java/awt/event/HierarchyBoundsAdapter.java ! 2758355953b ./libjava/java/awt/event/HierarchyBoundsListener.java ! 2116272606b ./libjava/java/awt/event/HierarchyEvent.java ! 2771680955b ./libjava/java/awt/event/HierarchyListener.java ! 702145522b ./libjava/java/awt/event/InputEvent.java 726380493b ./libjava/java/awt/event/InputMethodEvent.java 4033049562b ./libjava/java/awt/event/InputMethodListener.java 1843469307b ./libjava/java/awt/event/InvocationEvent.java 3611652050b ./libjava/java/awt/event/ItemEvent.java 3300913656b ./libjava/java/awt/event/ItemListener.java ! 1493568122b ./libjava/java/awt/Event.java 1564566587b ./libjava/java/awt/event/KeyAdapter.java 3711723317b ./libjava/java/awt/event/KeyEvent.java 1381805491b ./libjava/java/awt/event/KeyListener.java 2313273360b ./libjava/java/awt/event/MouseAdapter.java ! 2126050085b ./libjava/java/awt/event/MouseEvent.java 1649544172b ./libjava/java/awt/event/MouseListener.java 1060229023b ./libjava/java/awt/event/MouseMotionAdapter.java 1773953094b ./libjava/java/awt/event/MouseMotionListener.java 560349420b ./libjava/java/awt/event/PaintEvent.java ! 651462567b ./libjava/java/awt/EventQueue.java 3023928876b ./libjava/java/awt/event/TextEvent.java 2239555241b ./libjava/java/awt/event/TextListener.java 2939336909b ./libjava/java/awt/event/WindowAdapter.java 3033208050b ./libjava/java/awt/event/WindowEvent.java 1930937502b ./libjava/java/awt/event/WindowListener.java ! 1194915480b ./libjava/java/awt/FileDialog.java ! 3367824178b ./libjava/java/awt/FlowLayout.java ! 1157240010b ./libjava/java/awt/Font.java ! 484873117b ./libjava/java/awt/FontMetrics.java ! 1144124992b ./libjava/java/awt/Frame.java ! 2545826257b ./libjava/java/awt/geom/AffineTransform.java ! 4013428113b ./libjava/java/awt/geom/Dimension2D.java ! 4073501358b ./libjava/java/awt/geom/Ellipse2D.java ! 2790798005b ./libjava/java/awt/geom/IllegalPathStateException.java ! 400349421b ./libjava/java/awt/geom/Line2D.java ! 1253586302b ./libjava/java/awt/geom/NoninvertibleTransformException.java ! 1513833568b ./libjava/java/awt/geom/PathIterator.java ! 3208068889b ./libjava/java/awt/geom/Point2D.java ! 1401543311b ./libjava/java/awt/geom/Rectangle2D.java ! 1140671299b ./libjava/java/awt/geom/RectangularShape.java ! 3886036733b ./libjava/java/awt/geom/RoundRectangle2D.java ! 3811561912b ./libjava/java/awt/Graphics2D.java ! 986514240b ./libjava/java/awt/GraphicsConfiguration.java ! 2012998318b ./libjava/java/awt/Graphics.java ! 2629743040b ./libjava/java/awt/GridBagConstraints.java ! 2079310366b ./libjava/java/awt/GridLayout.java ! 681353006b ./libjava/java/awt/IllegalComponentStateException.java ! 2039150620b ./libjava/java/awt/image/AreaAveragingScaleFilter.java ! 47278745b ./libjava/java/awt/image/BufferedImage.java ! 897500197b ./libjava/java/awt/image/ColorModel.java ! 109440071b ./libjava/java/awt/image/ComponentColorModel.java ! 1906201349b ./libjava/java/awt/image/ComponentSampleModel.java ! 3384911687b ./libjava/java/awt/image/CropImageFilter.java ! 3465530846b ./libjava/java/awt/image/DataBufferByte.java ! 4075525464b ./libjava/java/awt/image/DataBufferInt.java ! 634855604b ./libjava/java/awt/image/DataBuffer.java ! 3095543468b ./libjava/java/awt/image/DataBufferUShort.java ! 1806419668b ./libjava/java/awt/image/DirectColorModel.java ! 3631042426b ./libjava/java/awt/image/FilteredImageSource.java ! 2890896341b ./libjava/java/awt/image/ImageConsumer.java ! 1624439520b ./libjava/java/awt/image/ImageFilter.java ! 4043851738b ./libjava/java/awt/image/ImageObserver.java ! 3411264349b ./libjava/java/awt/image/ImageProducer.java ! 2968747135b ./libjava/java/awt/image/IndexColorModel.java ! 4141700730b ./libjava/java/awt/Image.java ! 1393501117b ./libjava/java/awt/image/MemoryImageSource.java ! 1585332925b ./libjava/java/awt/image/PackedColorModel.java ! 1331801894b ./libjava/java/awt/image/PixelGrabber.java ! 1883441019b ./libjava/java/awt/image/Raster.java ! 869369986b ./libjava/java/awt/image/RasterOp.java ! 3510533440b ./libjava/java/awt/image/ReplicateScaleFilter.java ! 4052348878b ./libjava/java/awt/image/RGBImageFilter.java ! 1652657911b ./libjava/java/awt/image/SampleModel.java ! 2512892899b ./libjava/java/awt/image/SinglePixelPackedSampleModel.java ! 4567438b ./libjava/java/awt/image/WritableRaster.java ! 4084426b ./libjava/java/awt/Insets.java ! 3129189005b ./libjava/java/awt/ItemSelectable.java ! 1439045277b ./libjava/java/awt/Label.java ! 3544278012b ./libjava/java/awt/LayoutManager2.java ! 2458754937b ./libjava/java/awt/LayoutManager.java ! 2578681493b ./libjava/java/awt/List.java ! 4032096533b ./libjava/java/awt/MediaTracker.java ! 3704860539b ./libjava/java/awt/MenuBar.java ! 1793267135b ./libjava/java/awt/MenuComponent.java ! 3297700167b ./libjava/java/awt/MenuContainer.java ! 641743542b ./libjava/java/awt/MenuItem.java ! 2620146298b ./libjava/java/awt/Menu.java ! 2408918380b ./libjava/java/awt/MenuShortcut.java ! 3861110754b ./libjava/java/awt/PaintContext.java ! 2127085069b ./libjava/java/awt/Paint.java ! 3663039317b ./libjava/java/awt/Panel.java ! 1611158274b ./libjava/java/awt/peer/ButtonPeer.java ! 1171238008b ./libjava/java/awt/peer/CanvasPeer.java ! 483129233b ./libjava/java/awt/peer/CheckboxMenuItemPeer.java ! 1055872542b ./libjava/java/awt/peer/CheckboxPeer.java ! 2176941064b ./libjava/java/awt/peer/ChoicePeer.java ! 1485974642b ./libjava/java/awt/peer/ComponentPeer.java ! 385477645b ./libjava/java/awt/peer/ContainerPeer.java ! 1630111979b ./libjava/java/awt/peer/DialogPeer.java ! 3476723069b ./libjava/java/awt/peer/FileDialogPeer.java ! 1821313126b ./libjava/java/awt/peer/FontPeer.java ! 2885509310b ./libjava/java/awt/peer/FramePeer.java ! 1219267739b ./libjava/java/awt/peer/LabelPeer.java ! 542666273b ./libjava/java/awt/peer/LightweightPeer.java ! 2680629684b ./libjava/java/awt/peer/ListPeer.java ! 721644029b ./libjava/java/awt/peer/MenuBarPeer.java ! 1694400788b ./libjava/java/awt/peer/MenuComponentPeer.java ! 2412205583b ./libjava/java/awt/peer/MenuItemPeer.java ! 2144114987b ./libjava/java/awt/peer/MenuPeer.java ! 3010921620b ./libjava/java/awt/peer/PanelPeer.java ! 3378714445b ./libjava/java/awt/peer/PopupMenuPeer.java ! 2932476036b ./libjava/java/awt/peer/ScrollbarPeer.java ! 921008058b ./libjava/java/awt/peer/ScrollPanePeer.java ! 4184845888b ./libjava/java/awt/peer/TextAreaPeer.java ! 1984969162b ./libjava/java/awt/peer/TextComponentPeer.java ! 3129312744b ./libjava/java/awt/peer/TextFieldPeer.java ! 2230435871b ./libjava/java/awt/peer/WindowPeer.java ! 2267781966b ./libjava/java/awt/Point.java ! 2495677833b ./libjava/java/awt/Polygon.java ! 931171809b ./libjava/java/awt/PopupMenu.java ! 2031272343b ./libjava/java/awt/PrintGraphics.java ! 2842009822b ./libjava/java/awt/PrintJob.java ! 1514649029b ./libjava/java/awt/Rectangle.java ! 3814610113b ./libjava/java/awt/RenderingHints.java ! 1642159056b ./libjava/java/awt/Scrollbar.java 3117778311b ./libjava/java/awt/ScrollPane.java ! 2074345175b ./libjava/java/awt/Shape.java ! 1158345737b ./libjava/java/awt/SystemColor.java ! 3469060179b ./libjava/java/awt/TextArea.java ! 725438430b ./libjava/java/awt/TextComponent.java ! 4163002735b ./libjava/java/awt/TextField.java ! 1661689740b ./libjava/java/awt/Toolkit.java ! 3337245196b ./libjava/java/awt/Transparency.java ! 2530618234b ./libjava/java/awt/Window.java ! 1515366999b ./libjava/java/beans/AppletInitializer.java ! 2669908550b ./libjava/java/beans/beancontext/BeanContextChildComponentProxy.java ! 1680972619b ./libjava/java/beans/beancontext/BeanContextChild.java ! 1680093002b ./libjava/java/beans/beancontext/BeanContextChildSupport.java ! 1094587434b ./libjava/java/beans/beancontext/BeanContextContainerProxy.java ! 1135449293b ./libjava/java/beans/beancontext/BeanContextEvent.java ! 2767542609b ./libjava/java/beans/beancontext/BeanContext.java ! 242862210b ./libjava/java/beans/beancontext/BeanContextMembershipEvent.java ! 2481552408b ./libjava/java/beans/beancontext/BeanContextMembershipListener.java ! 2023778890b ./libjava/java/beans/beancontext/BeanContextProxy.java ! 3567375214b ./libjava/java/beans/beancontext/BeanContextServiceAvailableEvent.java ! 1524483334b ./libjava/java/beans/beancontext/BeanContextServiceProviderBeanInfo.java ! 2290646255b ./libjava/java/beans/beancontext/BeanContextServiceProvider.java ! 3486010592b ./libjava/java/beans/beancontext/BeanContextServiceRevokedEvent.java ! 1792611913b ./libjava/java/beans/beancontext/BeanContextServiceRevokedListener.java ! 172300183b ./libjava/java/beans/beancontext/BeanContextServices.java ! 649450665b ./libjava/java/beans/beancontext/BeanContextServicesListener.java ! 1833441000b ./libjava/java/beans/BeanDescriptor.java ! 1195953294b ./libjava/java/beans/BeanInfo.java ! 744629114b ./libjava/java/beans/Beans.java ! 2117723836b ./libjava/java/beans/Customizer.java ! 1994194050b ./libjava/java/beans/DesignMode.java ! 3820662012b ./libjava/java/beans/EventSetDescriptor.java ! 4125494981b ./libjava/java/beans/FeatureDescriptor.java ! 1047826036b ./libjava/java/beans/IndexedPropertyDescriptor.java ! 2875985243b ./libjava/java/beans/IntrospectionException.java ! 1848432301b ./libjava/java/beans/Introspector.java ! 649392727b ./libjava/java/beans/MethodDescriptor.java ! 3829002128b ./libjava/java/beans/ParameterDescriptor.java ! 1516690242b ./libjava/java/beans/PropertyChangeEvent.java ! 469117173b ./libjava/java/beans/PropertyChangeListener.java ! 703973953b ./libjava/java/beans/PropertyChangeSupport.java ! 2757753208b ./libjava/java/beans/PropertyDescriptor.java ! 199700315b ./libjava/java/beans/PropertyEditor.java ! 1782408506b ./libjava/java/beans/PropertyEditorManager.java ! 1820268780b ./libjava/java/beans/PropertyEditorSupport.java ! 4007301740b ./libjava/java/beans/PropertyVetoException.java ! 2552578115b ./libjava/java/beans/SimpleBeanInfo.java ! 1050530153b ./libjava/java/beans/VetoableChangeListener.java ! 292324922b ./libjava/java/beans/VetoableChangeSupport.java ! 1473289197b ./libjava/java/beans/Visibility.java ! 200470800b ./libjava/java/io/BufferedInputStream.java ! 369879890b ./libjava/java/io/BufferedOutputStream.java ! 2577191356b ./libjava/java/io/BufferedReader.java ! 1491845880b ./libjava/java/io/BufferedWriter.java ! 3804278996b ./libjava/java/io/ByteArrayInputStream.java ! 200503157b ./libjava/java/io/ByteArrayOutputStream.java ! 1595495810b ./libjava/java/io/CharArrayReader.java ! 926602239b ./libjava/java/io/CharArrayWriter.java ! 2789582151b ./libjava/java/io/CharConversionException.java ! 833277233b ./libjava/java/io/DataInput.java ! 634383556b ./libjava/java/io/DataInputStream.java ! 2779752650b ./libjava/java/io/DataOutput.java ! 2879044799b ./libjava/java/io/DataOutputStream.java ! 3063714856b ./libjava/java/io/EOFException.java ! 1517492329b ./libjava/java/io/Externalizable.java ! 3546628049b ./libjava/java/io/FileDescriptor.java ! 3092690903b ./libjava/java/io/FileFilter.java ! 3304954915b ./libjava/java/io/FileInputStream.java ! 3923475116b ./libjava/java/io/File.java ! 57206385b ./libjava/java/io/FilenameFilter.java ! 1122350410b ./libjava/java/io/FileNotFoundException.java ! 493183800b ./libjava/java/io/FileOutputStream.java ! 4203170751b ./libjava/java/io/FilePermission.java ! 480136026b ./libjava/java/io/FileReader.java ! 3272147344b ./libjava/java/io/FileWriter.java ! 491642459b ./libjava/java/io/FilterInputStream.java ! 3572067476b ./libjava/java/io/FilterOutputStream.java ! 834480594b ./libjava/java/io/FilterReader.java ! 805331833b ./libjava/java/io/FilterWriter.java ! 1021426083b ./libjava/java/io/InputStream.java ! 529146689b ./libjava/java/io/InputStreamReader.java ! 2158134143b ./libjava/java/io/InterruptedIOException.java ! 2959384144b ./libjava/java/io/InvalidClassException.java ! 2711688958b ./libjava/java/io/InvalidObjectException.java ! 1797218177b ./libjava/java/io/IOException.java 2297659773b ./libjava/java/io/LineNumberInputStream.java ! 1977393201b ./libjava/java/io/LineNumberReader.java ! 1763600901b ./libjava/java/io/natFileDescriptorEcos.cc ! 50298342b ./libjava/java/io/natFileDescriptorPosix.cc ! 553363467b ./libjava/java/io/natFileDescriptorWin32.cc ! 438765382b ./libjava/java/io/natFilePosix.cc ! 4215574494b ./libjava/java/io/natFileWin32.cc ! 2701462559b ./libjava/java/io/natObjectInputStream.cc 4239505089b ./libjava/java/io/natObjectOutputStream.cc ! 356981144b ./libjava/java/io/NotActiveException.java ! 296825781b ./libjava/java/io/NotSerializableException.java ! 3695857432b ./libjava/java/io/ObjectInput.java ! 2999285723b ./libjava/java/io/ObjectInputStream.java ! 1835600781b ./libjava/java/io/ObjectInputValidation.java ! 601064657b ./libjava/java/io/ObjectOutput.java ! 839357625b ./libjava/java/io/ObjectOutputStream.java ! 758370469b ./libjava/java/io/ObjectStreamClass.java ! 3828010025b ./libjava/java/io/ObjectStreamConstants.java ! 1279521507b ./libjava/java/io/ObjectStreamException.java ! 3088927270b ./libjava/java/io/ObjectStreamField.java ! 2743734189b ./libjava/java/io/OptionalDataException.java ! 3053819886b ./libjava/java/io/OutputStream.java 1432753727b ./libjava/java/io/OutputStreamWriter.java ! 3611790327b ./libjava/java/io/PipedInputStream.java ! 2982069551b ./libjava/java/io/PipedOutputStream.java ! 3065379959b ./libjava/java/io/PipedReader.java ! 4173881044b ./libjava/java/io/PipedWriter.java 1146852699b ./libjava/java/io/PrintStream.java ! 569978908b ./libjava/java/io/PrintWriter.java ! 1369338935b ./libjava/java/io/PushbackInputStream.java ! 2210002535b ./libjava/java/io/PushbackReader.java ! 3411632522b ./libjava/java/io/RandomAccessFile.java ! 3147885412b ./libjava/java/io/Reader.java ! 978743808b ./libjava/java/io/SequenceInputStream.java ! 1322946837b ./libjava/java/io/Serializable.java ! 745751528b ./libjava/java/io/SerializablePermission.java ! 750070673b ./libjava/java/io/StreamCorruptedException.java ! 949081819b ./libjava/java/io/StreamTokenizer.java ! 1180454189b ./libjava/java/io/StringBufferInputStream.java ! 3179611106b ./libjava/java/io/StringReader.java ! 2031479671b ./libjava/java/io/StringWriter.java ! 1480215451b ./libjava/java/io/SyncFailedException.java ! 616805431b ./libjava/java/io/UnsupportedEncodingException.java ! 2698018036b ./libjava/java/io/UTFDataFormatException.java ! 2719928003b ./libjava/java/io/WriteAbortedException.java ! 3470521880b ./libjava/java/io/Writer.java ! 4090106463b ./libjava/java/lang/AbstractMethodError.java ! 3425188680b ./libjava/java/lang/ArithmeticException.java ! 3115671720b ./libjava/java/lang/ArrayIndexOutOfBoundsException.java ! 1373410447b ./libjava/java/lang/ArrayStoreException.java ! 2983258460b ./libjava/java/lang/Boolean.java ! 4251066809b ./libjava/java/lang/Byte.java ! 3669872961b ./libjava/java/lang/Character.java ! 3632753519b ./libjava/java/lang/CharSequence.java ! 3914593902b ./libjava/java/lang/ClassCastException.java ! 2018649547b ./libjava/java/lang/ClassCircularityError.java ! 1262342693b ./libjava/java/lang/ClassFormatError.java ! 553573251b ./libjava/java/lang/Class.h ! 3641057162b ./libjava/java/lang/Class.java ! 2745405805b ./libjava/java/lang/ClassLoader.java ! 863405399b ./libjava/java/lang/ClassNotFoundException.java ! 524108559b ./libjava/java/lang/Cloneable.java ! 1163791317b ./libjava/java/lang/CloneNotSupportedException.java ! 2017623600b ./libjava/java/lang/Comparable.java ! 4154726046b ./libjava/java/lang/Compiler.java ! 4246954832b ./libjava/java/lang/Double.java 1435754341b ./libjava/java/lang/dtoa.c 994774164b ./libjava/java/lang/e_acos.c 4273053537b ./libjava/java/lang/e_asin.c *************** *** 8297,8750 **** 876585599b ./libjava/java/lang/e_pow.c 3495227073b ./libjava/java/lang/e_remainder.c 3827866584b ./libjava/java/lang/e_rem_pio2.c ! 3772200365b ./libjava/java/lang/Error.java 351649389b ./libjava/java/lang/e_scalb.c 4172761909b ./libjava/java/lang/e_sqrt.c ! 2186141209b ./libjava/java/lang/ExceptionInInitializerError.java ! 900933428b ./libjava/java/lang/Exception.java 773177573b ./libjava/java/lang/fdlibm.h ! 1657422441b ./libjava/java/lang/Float.java ! 4020633601b ./libjava/java/lang/ieeefp.h ! 2221359593b ./libjava/java/lang/IllegalAccessError.java ! 3562776944b ./libjava/java/lang/IllegalAccessException.java ! 2768044069b ./libjava/java/lang/IllegalArgumentException.java ! 626397388b ./libjava/java/lang/IllegalMonitorStateException.java ! 221861270b ./libjava/java/lang/IllegalStateException.java ! 2163550352b ./libjava/java/lang/IllegalThreadStateException.java ! 193980224b ./libjava/java/lang/IncompatibleClassChangeError.java ! 555063345b ./libjava/java/lang/IndexOutOfBoundsException.java ! 2787021848b ./libjava/java/lang/InstantiationError.java ! 3622109792b ./libjava/java/lang/InstantiationException.java ! 3365603667b ./libjava/java/lang/Integer.java ! 2606420219b ./libjava/java/lang/InternalError.java ! 999961701b ./libjava/java/lang/InterruptedException.java 2140439599b ./libjava/java/lang/k_cos.c 2521991737b ./libjava/java/lang/k_rem_pio2.c 1794170989b ./libjava/java/lang/k_sin.c 2812209061b ./libjava/java/lang/k_tan.c ! 3350650220b ./libjava/java/lang/LinkageError.java ! 33507473b ./libjava/java/lang/Long.java ! 520231672b ./libjava/java/lang/Math.java ! 4037044768b ./libjava/java/lang/mprec.c 338852744b ./libjava/java/lang/mprec.h ! 1038271037b ./libjava/java/lang/natCharacter.cc ! 3926684472b ./libjava/java/lang/natClass.cc ! 2190403644b ./libjava/java/lang/natClassLoader.cc ! 299573242b ./libjava/java/lang/natDouble.cc 2312870767b ./libjava/java/lang/natEcosProcess.cc 91234316b ./libjava/java/lang/natFloat.cc ! 2021831688b ./libjava/java/lang/natMath.cc ! 4082444176b ./libjava/java/lang/natObject.cc ! 1594147159b ./libjava/java/lang/natPosixProcess.cc ! 4074682623b ./libjava/java/lang/natRuntime.cc ! 305206444b ./libjava/java/lang/natString.cc ! 269747584b ./libjava/java/lang/natSystem.cc ! 2135592706b ./libjava/java/lang/natThread.cc ! 369390980b ./libjava/java/lang/natThrowable.cc ! 3625642068b ./libjava/java/lang/NegativeArraySizeException.java ! 4097007565b ./libjava/java/lang/NoClassDefFoundError.java ! 3127230070b ./libjava/java/lang/NoSuchFieldError.java ! 3877287480b ./libjava/java/lang/NoSuchFieldException.java ! 233891515b ./libjava/java/lang/NoSuchMethodError.java ! 3669879475b ./libjava/java/lang/NoSuchMethodException.java ! 1522838723b ./libjava/java/lang/NullPointerException.java ! 2225406226b ./libjava/java/lang/NumberFormatException.java ! 2613672051b ./libjava/java/lang/Number.java ! 1721099376b ./libjava/java/lang/Object.h 3641470251b ./libjava/java/lang/Object.java ! 418275306b ./libjava/java/lang/OutOfMemoryError.java ! 1057408310b ./libjava/java/lang/PosixProcess.java ! 318828438b ./libjava/java/lang/Process.java ! 553025145b ./libjava/java/lang/reflect/AccessibleObject.java 1772289084b ./libjava/java/lang/reflect/Array.java ! 1505384845b ./libjava/java/lang/reflect/Constructor.java ! 3358959174b ./libjava/java/lang/reflect/Field.java ! 3488241078b ./libjava/java/lang/reflect/InvocationTargetException.java ! 2393805109b ./libjava/java/lang/reflect/Member.java ! 151809881b ./libjava/java/lang/reflect/Method.java ! 3601273380b ./libjava/java/lang/reflect/Modifier.java ! 1896995744b ./libjava/java/lang/reflect/natArray.cc ! 3931502653b ./libjava/java/lang/reflect/natConstructor.cc ! 998989760b ./libjava/java/lang/reflect/natField.cc ! 4009910910b ./libjava/java/lang/reflect/natMethod.cc ! 660571158b ./libjava/java/lang/reflect/ReflectPermission.java ! 2988123488b ./libjava/java/lang/ref/PhantomReference.java ! 278043258b ./libjava/java/lang/ref/Reference.java ! 2960785678b ./libjava/java/lang/ref/ReferenceQueue.java ! 3011955273b ./libjava/java/lang/ref/SoftReference.java ! 3509239033b ./libjava/java/lang/ref/WeakReference.java ! 1417758702b ./libjava/java/lang/Runnable.java ! 479957650b ./libjava/java/lang/RuntimeException.java 1498739702b ./libjava/java/lang/Runtime.java ! 2871988350b ./libjava/java/lang/RuntimePermission.java 4211007333b ./libjava/java/lang/s_atan.c 1992861509b ./libjava/java/lang/s_ceil.c 2560516823b ./libjava/java/lang/s_copysign.c 138245783b ./libjava/java/lang/s_cos.c ! 2161143254b ./libjava/java/lang/SecurityException.java ! 4037785176b ./libjava/java/lang/SecurityManager.java 2696927637b ./libjava/java/lang/s_fabs.c 2861859787b ./libjava/java/lang/sf_fabs.c 1587392745b ./libjava/java/lang/s_floor.c 3733918551b ./libjava/java/lang/sf_rint.c ! 1696318228b ./libjava/java/lang/Short.java 781279555b ./libjava/java/lang/s_rint.c 1543063550b ./libjava/java/lang/s_scalbn.c 683141039b ./libjava/java/lang/s_sin.c ! 2974943037b ./libjava/java/lang/StackOverflowError.java 2604631654b ./libjava/java/lang/s_tan.c ! 2523924341b ./libjava/java/lang/StringBuffer.java ! 468294173b ./libjava/java/lang/StringIndexOutOfBoundsException.java ! 1880694493b ./libjava/java/lang/String.java ! 3436478388b ./libjava/java/lang/strtod.c ! 3237566020b ./libjava/java/lang/System.java ! 672576342b ./libjava/java/lang/ThreadDeath.java ! 3426501087b ./libjava/java/lang/ThreadGroup.java ! 1486101649b ./libjava/java/lang/Thread.java 2728582923b ./libjava/java/lang/Throwable.java ! 2872004101b ./libjava/java/lang/UnknownError.java ! 225230263b ./libjava/java/lang/UnsatisfiedLinkError.java ! 1033342519b ./libjava/java/lang/UnsupportedOperationException.java ! 934086019b ./libjava/java/lang/VerifyError.java ! 879928233b ./libjava/java/lang/VirtualMachineError.java ! 2619808397b ./libjava/java/lang/Void.java 2208706716b ./libjava/java/lang/w_acos.c 2509257289b ./libjava/java/lang/w_asin.c 129756780b ./libjava/java/lang/w_atan2.c 3101537020b ./libjava/java/lang/w_exp.c 4251570485b ./libjava/java/lang/w_fmod.c 2517288589b ./libjava/java/lang/w_log.c 2200179114b ./libjava/java/lang/w_pow.c 3127225850b ./libjava/java/lang/w_remainder.c 3084712253b ./libjava/java/lang/w_sqrt.c ! 822846426b ./libjava/java/math/BigDecimal.java ! 3439569152b ./libjava/java/math/BigInteger.java ! 1409416951b ./libjava/java/net/BindException.java ! 3030051264b ./libjava/java/net/ConnectException.java ! 3096417119b ./libjava/java/net/ContentHandlerFactory.java ! 2426080489b ./libjava/java/net/ContentHandler.java ! 2484141724b ./libjava/java/net/DatagramPacket.java ! 1651721630b ./libjava/java/net/DatagramSocketImpl.java ! 3722966634b ./libjava/java/net/DatagramSocket.java ! 3416523675b ./libjava/java/net/FileNameMap.java 905107405b ./libjava/java/net/HttpURLConnection.java ! 1127084318b ./libjava/java/net/InetAddress.java 3267095408b ./libjava/java/net/JarURLConnection.java ! 2937513184b ./libjava/java/net/MalformedURLException.java ! 3380647190b ./libjava/java/net/MulticastSocket.java ! 1699982728b ./libjava/java/net/natInetAddress.cc ! 2413567714b ./libjava/java/net/natPlainDatagramSocketImpl.cc ! 2428724788b ./libjava/java/net/natPlainSocketImpl.cc ! 1854126948b ./libjava/java/net/NoRouteToHostException.java ! 33885610b ./libjava/java/net/PlainDatagramSocketImpl.java ! 3345252756b ./libjava/java/net/PlainSocketImpl.java ! 1475932692b ./libjava/java/net/ProtocolException.java ! 1284823767b ./libjava/java/net/ServerSocket.java ! 152768055b ./libjava/java/net/SocketException.java ! 572700958b ./libjava/java/net/SocketImplFactory.java ! 2624715440b ./libjava/java/net/SocketImpl.java ! 1254149142b ./libjava/java/net/Socket.java ! 1825095442b ./libjava/java/net/SocketOptions.java ! 4281924200b ./libjava/java/net/UnknownHostException.java ! 11968751b ./libjava/java/net/UnknownServiceException.java 194604118b ./libjava/java/net/URLClassLoader.java 2961889722b ./libjava/java/net/URLConnection.java ! 1824991994b ./libjava/java/net/URLDecoder.java ! 4262697959b ./libjava/java/net/URLEncoder.java ! 3250004157b ./libjava/java/net/URL.java ! 380514678b ./libjava/java/net/URLStreamHandlerFactory.java ! 3307968775b ./libjava/java/net/URLStreamHandler.java ! 993185288b ./libjava/java/security/AlgorithmParameterGeneratorSpi.java ! 228936680b ./libjava/java/security/BasicPermission.java ! 651038b ./libjava/java/security/cert/CertificateEncodingException.java ! 1245003189b ./libjava/java/security/cert/CertificateException.java ! 3363546789b ./libjava/java/security/cert/CertificateExpiredException.java ! 2058363372b ./libjava/java/security/cert/CertificateFactory.java ! 789457250b ./libjava/java/security/cert/CertificateFactorySpi.java ! 713658827b ./libjava/java/security/cert/Certificate.java ! 442435746b ./libjava/java/security/cert/CertificateNotYetValidException.java ! 1072746996b ./libjava/java/security/cert/CertificateParsingException.java ! 2401429904b ./libjava/java/security/cert/CRLException.java ! 3643559321b ./libjava/java/security/cert/CRL.java ! 540726234b ./libjava/java/security/cert/X509Certificate.java ! 2207071136b ./libjava/java/security/cert/X509CRLEntry.java ! 1949251746b ./libjava/java/security/cert/X509CRL.java ! 2533082173b ./libjava/java/security/cert/X509Extension.java ! 1209135215b ./libjava/java/security/DigestException.java ! 4001441158b ./libjava/java/security/DigestOutputStream.java ! 2315893286b ./libjava/java/security/GeneralSecurityException.java ! 1303472788b ./libjava/java/security/Guard.java ! 3709159575b ./libjava/java/security/interfaces/DSAKey.java ! 3171235431b ./libjava/java/security/interfaces/DSAParams.java ! 979912588b ./libjava/java/security/interfaces/DSAPrivateKey.java ! 1457430654b ./libjava/java/security/interfaces/DSAPublicKey.java ! 329887896b ./libjava/java/security/interfaces/RSAPrivateCrtKey.java ! 3033128964b ./libjava/java/security/interfaces/RSAPrivateKey.java ! 1703966575b ./libjava/java/security/interfaces/RSAPublicKey.java ! 3777750642b ./libjava/java/security/InvalidAlgorithmParameterException.java ! 3823152568b ./libjava/java/security/InvalidKeyException.java ! 3140568570b ./libjava/java/security/InvalidParameterException.java ! 423346036b ./libjava/java/security/KeyException.java ! 191677695b ./libjava/java/security/Key.java ! 2822712333b ./libjava/java/security/KeyPairGenerator.java ! 1049965691b ./libjava/java/security/KeyPairGeneratorSpi.java ! 4032611841b ./libjava/java/security/KeyPair.java ! 2829214783b ./libjava/java/security/MessageDigest.java ! 4213854806b ./libjava/java/security/NoSuchAlgorithmException.java ! 164911862b ./libjava/java/security/NoSuchProviderException.java ! 828098359b ./libjava/java/security/PermissionCollection.java ! 345772079b ./libjava/java/security/Permission.java ! 3593698756b ./libjava/java/security/Principal.java ! 2877700335b ./libjava/java/security/PrivateKey.java ! 3136164889b ./libjava/java/security/Provider.java ! 508126008b ./libjava/java/security/PublicKey.java ! 885837722b ./libjava/java/security/SecureClassLoader.java ! 603148415b ./libjava/java/security/SecureRandom.java ! 4147114934b ./libjava/java/security/Security.java ! 4160041312b ./libjava/java/security/SignatureException.java ! 4120297330b ./libjava/java/security/Signature.java ! 4075431752b ./libjava/java/security/spec/AlgorithmParameterSpec.java ! 1011611271b ./libjava/java/security/spec/InvalidKeySpecException.java ! 1347144036b ./libjava/java/security/spec/InvalidParameterSpecException.java ! 1768074412b ./libjava/java/security/spec/KeySpec.java ! 1244913136b ./libjava/java/security/spec/RSAPrivateCrtKeySpec.java ! 1656477964b ./libjava/java/security/spec/RSAPrivateKeySpec.java ! 2109887928b ./libjava/java/security/spec/RSAPublicKeySpec.java ! 685002436b ./libjava/java/sql/Array.java ! 1230887925b ./libjava/java/sql/BatchUpdateException.java ! 527036808b ./libjava/java/sql/Blob.java ! 1427991403b ./libjava/java/sql/CallableStatement.java ! 393138513b ./libjava/java/sql/Clob.java ! 884258821b ./libjava/java/sql/Connection.java ! 656560981b ./libjava/java/sql/DatabaseMetaData.java ! 3690870954b ./libjava/java/sql/DataTruncation.java ! 193716878b ./libjava/java/sql/Date.java ! 2723273542b ./libjava/java/sql/Driver.java ! 3729586446b ./libjava/java/sql/DriverManager.java ! 2798060781b ./libjava/java/sql/DriverPropertyInfo.java ! 2846566281b ./libjava/java/sql/PreparedStatement.java ! 1549206157b ./libjava/java/sql/Ref.java ! 342252744b ./libjava/java/sql/ResultSet.java ! 3624968677b ./libjava/java/sql/ResultSetMetaData.java ! 2815640246b ./libjava/java/sql/SQLData.java ! 2178456404b ./libjava/java/sql/SQLException.java ! 4048762004b ./libjava/java/sql/SQLInput.java ! 3429447702b ./libjava/java/sql/SQLOutput.java ! 3900334568b ./libjava/java/sql/SQLWarning.java ! 323193732b ./libjava/java/sql/Statement.java ! 3770258863b ./libjava/java/sql/Struct.java ! 2798939977b ./libjava/java/sql/Time.java ! 783201530b ./libjava/java/sql/Timestamp.java ! 218453481b ./libjava/java/sql/Types.java ! 1996873013b ./libjava/java/text/BreakIterator.java ! 2464948775b ./libjava/java/text/CharacterIterator.java ! 2950028998b ./libjava/java/text/ChoiceFormat.java ! 923745114b ./libjava/java/text/CollationElementIterator.java 285476728b ./libjava/java/text/CollationKey.java ! 2150811554b ./libjava/java/text/Collator.java ! 2367997545b ./libjava/java/text/DateFormat.java ! 3963507399b ./libjava/java/text/DateFormatSymbols.java ! 1709340527b ./libjava/java/text/DecimalFormat.java ! 787613163b ./libjava/java/text/DecimalFormatSymbols.java ! 3080324986b ./libjava/java/text/FieldPosition.java ! 1681261300b ./libjava/java/text/Format.java ! 3205248285b ./libjava/java/text/MessageFormat.java 1224532863b ./libjava/java/text/natCollator.cc ! 318010311b ./libjava/java/text/NumberFormat.java ! 1137878626b ./libjava/java/text/ParseException.java ! 743601250b ./libjava/java/text/ParsePosition.java ! 3552871858b ./libjava/java/text/RuleBasedCollator.java ! 4258659701b ./libjava/java/text/SimpleDateFormat.java ! 1285938162b ./libjava/java/text/StringCharacterIterator.java ! 2552777128b ./libjava/java/util/AbstractCollection.java ! 2978251069b ./libjava/java/util/AbstractList.java ! 1917969304b ./libjava/java/util/AbstractMap.java ! 1746088836b ./libjava/java/util/AbstractSequentialList.java ! 1638569699b ./libjava/java/util/AbstractSet.java ! 858668202b ./libjava/java/util/ArrayList.java ! 3432644196b ./libjava/java/util/Arrays.java ! 2798237409b ./libjava/java/util/BasicMapEntry.java ! 2209008758b ./libjava/java/util/BitSet.java ! 2395525689b ./libjava/java/util/Calendar.java ! 184305725b ./libjava/java/util/Collection.java ! 117321533b ./libjava/java/util/Collections.java ! 1732183963b ./libjava/java/util/Comparator.java ! 2910484659b ./libjava/java/util/ConcurrentModificationException.java ! 1254731391b ./libjava/java/util/Date.java ! 4264401441b ./libjava/java/util/Dictionary.java ! 1258520999b ./libjava/java/util/EmptyStackException.java ! 307154374b ./libjava/java/util/Enumeration.java ! 1380613236b ./libjava/java/util/EventListener.java ! 1782487560b ./libjava/java/util/EventObject.java ! 3732032089b ./libjava/java/util/GregorianCalendar.java ! 4028527790b ./libjava/java/util/HashMap.java ! 3585020155b ./libjava/java/util/HashSet.java ! 1029373921b ./libjava/java/util/Hashtable.java ! 3236643201b ./libjava/java/util/Iterator.java ! 93605881b ./libjava/java/util/jar/Attributes.java ! 2130767468b ./libjava/java/util/jar/JarEntry.java ! 4194099265b ./libjava/java/util/jar/JarException.java ! 254410869b ./libjava/java/util/jar/JarFile.java ! 2178380615b ./libjava/java/util/jar/JarInputStream.java ! 1060164625b ./libjava/java/util/jar/JarOutputStream.java ! 3832564104b ./libjava/java/util/jar/Manifest.java ! 582685533b ./libjava/java/util/LinkedList.java ! 1458733580b ./libjava/java/util/ListIterator.java ! 2735235417b ./libjava/java/util/List.java ! 2615034791b ./libjava/java/util/ListResourceBundle.java ! 2625256837b ./libjava/java/util/Locale.java ! 3585001711b ./libjava/java/util/Map.java ! 4043691026b ./libjava/java/util/MissingResourceException.java ! 2530230150b ./libjava/java/util/natGregorianCalendar.cc ! 805192455b ./libjava/java/util/NoSuchElementException.java ! 4110483929b ./libjava/java/util/Observable.java ! 2399528405b ./libjava/java/util/Observer.java ! 120811272b ./libjava/java/util/Properties.java ! 3325895758b ./libjava/java/util/PropertyPermission.java ! 4271305503b ./libjava/java/util/PropertyResourceBundle.java ! 2741452504b ./libjava/java/util/Random.java ! 2842331792b ./libjava/java/util/ResourceBundle.java ! 3447391054b ./libjava/java/util/Set.java ! 2232309372b ./libjava/java/util/SimpleTimeZone.java ! 2707871230b ./libjava/java/util/SortedMap.java ! 711690964b ./libjava/java/util/SortedSet.java ! 3860402043b ./libjava/java/util/Stack.java ! 2009055327b ./libjava/java/util/StringTokenizer.java ! 553357091b ./libjava/java/util/Timer.java ! 1289479478b ./libjava/java/util/TimerTask.java ! 3228900600b ./libjava/java/util/TimeZone.java ! 130622114b ./libjava/java/util/TooManyListenersException.java ! 592898611b ./libjava/java/util/TreeMap.java ! 3957462546b ./libjava/java/util/TreeSet.java ! 2626194822b ./libjava/java/util/Vector.java ! 3775679049b ./libjava/java/util/WeakHashMap.java ! 2579707382b ./libjava/java/util/zip/Adler32.java ! 2034633684b ./libjava/java/util/zip/CheckedInputStream.java ! 2467563563b ./libjava/java/util/zip/CheckedOutputStream.java ! 3456281219b ./libjava/java/util/zip/Checksum.java ! 1773643934b ./libjava/java/util/zip/CRC32.java ! 2811687919b ./libjava/java/util/zip/DataFormatException.java ! 1728433270b ./libjava/java/util/zip/Deflater.java ! 3025056738b ./libjava/java/util/zip/DeflaterOutputStream.java ! 314362794b ./libjava/java/util/zip/GZIPInputStream.java ! 3096347518b ./libjava/java/util/zip/GZIPOutputStream.java ! 3926190134b ./libjava/java/util/zip/InflaterInputStream.java ! 3209962990b ./libjava/java/util/zip/Inflater.java ! 1386019033b ./libjava/java/util/zip/natDeflater.cc ! 1239636158b ./libjava/java/util/zip/natInflater.cc ! 4241093002b ./libjava/java/util/zip/ZipConstants.java ! 879401659b ./libjava/java/util/zip/ZipEntry.java ! 1809272100b ./libjava/java/util/zip/ZipException.java ! 1505603634b ./libjava/java/util/zip/ZipFile.java ! 3862717865b ./libjava/java/util/zip/ZipInputStream.java ! 3166817996b ./libjava/java/util/zip/ZipOutputStream.java 145274057b ./libjava/javax/naming/AuthenticationException.java 1613568553b ./libjava/javax/naming/AuthenticationNotSupportedException.java ! 3058324768b ./libjava/javax/naming/CannotProceedException.java 1696161213b ./libjava/javax/naming/CommunicationException.java 2106105768b ./libjava/javax/naming/ConfigurationException.java 2355024605b ./libjava/javax/naming/Context.java 3253591271b ./libjava/javax/naming/ContextNotEmptyException.java ! 4239580975b ./libjava/javax/naming/directory/AttributeInUseException.java ! 3276565767b ./libjava/javax/naming/directory/Attribute.java ! 4002773042b ./libjava/javax/naming/directory/AttributeModificationException.java ! 3508427544b ./libjava/javax/naming/directory/Attributes.java ! 1615026244b ./libjava/javax/naming/directory/DirContext.java ! 189275616b ./libjava/javax/naming/directory/InitialDirContext.java ! 2408415656b ./libjava/javax/naming/directory/InvalidAttributeIdentifierException.java ! 2230639501b ./libjava/javax/naming/directory/InvalidAttributesException.java ! 2156964568b ./libjava/javax/naming/directory/InvalidAttributeValueException.java ! 3570154093b ./libjava/javax/naming/directory/InvalidSearchControlsException.java ! 153449804b ./libjava/javax/naming/directory/InvalidSearchFilterException.java ! 2616167022b ./libjava/javax/naming/directory/NoSuchAttributeException.java ! 838691513b ./libjava/javax/naming/directory/SchemaViolationException.java ! 974113075b ./libjava/javax/naming/InitialContext.java 38212245b ./libjava/javax/naming/InsufficientResourcesException.java 2296688963b ./libjava/javax/naming/InterruptedNamingException.java ! 3361081040b ./libjava/javax/naming/InvalidNameException.java 3467011523b ./libjava/javax/naming/LimitExceededException.java ! 3324682016b ./libjava/javax/naming/LinkException.java 3280765719b ./libjava/javax/naming/LinkLoopException.java 1528609025b ./libjava/javax/naming/MalformedLinkException.java 2798268023b ./libjava/javax/naming/NameAlreadyBoundException.java ! 1014708360b ./libjava/javax/naming/Name.java 230282723b ./libjava/javax/naming/NameNotFoundException.java 2454523681b ./libjava/javax/naming/NameParser.java 3641625296b ./libjava/javax/naming/NamingEnumeration.java ! 852337554b ./libjava/javax/naming/NamingException.java 1081898018b ./libjava/javax/naming/NamingSecurityException.java 3355150544b ./libjava/javax/naming/NoInitialContextException.java 3148663544b ./libjava/javax/naming/NoPermissionException.java 1051745286b ./libjava/javax/naming/NotContextException.java ! 1244321394b ./libjava/javax/naming/OperationNotSupportedException.java 2758830928b ./libjava/javax/naming/PartialResultException.java ! 376710790b ./libjava/javax/naming/RefAddr.java 1496952630b ./libjava/javax/naming/Referenceable.java ! 2983298448b ./libjava/javax/naming/Reference.java ! 3883374405b ./libjava/javax/naming/ReferralException.java 740355282b ./libjava/javax/naming/ServiceUnavailableException.java 2175690233b ./libjava/javax/naming/SizeLimitExceededException.java 2067382225b ./libjava/javax/naming/spi/InitialContextFactoryBuilder.java 1751323528b ./libjava/javax/naming/spi/InitialContextFactory.java ! 1709476683b ./libjava/javax/naming/spi/NamingManager.java ! 562080873b ./libjava/javax/naming/spi/ObjectFactory.java ! 3286563593b ./libjava/javax/naming/StringRefAddr.java 668991294b ./libjava/javax/naming/TimeLimitExceededException.java ! 2194098132b ./libjava/jni.cc ! 3693275905b ./libjava/libgcjdata.c ! 2906142423b ./libjava/LIBGCJ_LICENSE ! 1618850334b ./libjava/libgcj.spec.in 3263845190b ./libjava/libgcj-test.spec.in 464053222b ./libjava/libltdl/acconfig.h 1486261890b ./libjava/libltdl/acinclude.m4 2748542911b ./libjava/libltdl/aclocal.m4 ! 835832481b ./libjava/libltdl/ChangeLog 3229611250b ./libjava/libltdl/config.h.in ! 1181542053b ./libjava/libltdl/configure ! 2859679520b ./libjava/libltdl/configure.in 1530919786b ./libjava/libltdl/COPYING.LIB ! 1996902805b ./libjava/libltdl/.cvsignore 1708336280b ./libjava/libltdl/ltdl.c 3122579166b ./libjava/libltdl/ltdl.h 3589765398b ./libjava/libltdl/Makefile.am 2495909158b ./libjava/libltdl/Makefile.in 1322928877b ./libjava/libltdl/README 216805921b ./libjava/libltdl/stamp-h.in ! 813832923b ./libjava/libtool-version ! 1368636295b ./libjava/Makefile.am ! 2256360485b ./libjava/Makefile.in ! 3999324446b ./libjava/mauve-libgcj ! 705579572b ./libjava/name-finder.cc 4049677327b ./libjava/NEWS ! 1286501666b ./libjava/nogc.cc ! 2661739964b ./libjava/no-threads.cc ! 3324310841b ./libjava/posix.cc ! 4005482993b ./libjava/posix-threads.cc ! 1977338832b ./libjava/prims.cc 3199155412b ./libjava/README ! 791119016b ./libjava/resolve.cc ! 3367494457b ./libjava/scripts/blocks.pl 2710913388b ./libjava/scripts/classes.pl ! 3877965866b ./libjava/scripts/encodings.pl 211751055b ./libjava/scripts/MakeDefaultMimeTypes.java 415147073b ./libjava/scripts/mime.types 1359447378b ./libjava/scripts/showval.java 2309086205b ./libjava/scripts/TexinfoDoclet.java 4255020929b ./libjava/sysdep/ia64.c 3969226176b ./libjava/sysdep/ia64-frame.h ! 2160618678b ./libjava/testsuite/ChangeLog 1230501773b ./libjava/testsuite/config/default.exp 3718926011b ./libjava/testsuite/libjava.compile/abstr.java 2888415448b ./libjava/testsuite/libjava.compile/abstr.xfail 2597392402b ./libjava/testsuite/libjava.compile/ArrayClass.java 2510342235b ./libjava/testsuite/libjava.compile/assignment_2.java 113533645b ./libjava/testsuite/libjava.compile/assignment.java - 2529689226b ./libjava/testsuite/libjava.compile/BlankFinal.java 226856759b ./libjava/testsuite/libjava.compile/block.java 1927457704b ./libjava/testsuite/libjava.compile/block.xfail 2001362839b ./libjava/testsuite/libjava.compile/Case.java 1280659122b ./libjava/testsuite/libjava.compile/comment.java 1877199736b ./libjava/testsuite/libjava.compile/compile.exp 1402474633b ./libjava/testsuite/libjava.compile/G19990210_1.java 3600660956b ./libjava/testsuite/libjava.compile/G19990210_2.java 2466381413b ./libjava/testsuite/libjava.compile/G19990210_3.java --- 12205,12920 ---- 876585599b ./libjava/java/lang/e_pow.c 3495227073b ./libjava/java/lang/e_remainder.c 3827866584b ./libjava/java/lang/e_rem_pio2.c ! 674629591b ./libjava/java/lang/Error.java 351649389b ./libjava/java/lang/e_scalb.c 4172761909b ./libjava/java/lang/e_sqrt.c ! 479874825b ./libjava/java/lang/ExceptionInInitializerError.java ! 2224382764b ./libjava/java/lang/Exception.java 773177573b ./libjava/java/lang/fdlibm.h ! 1399651516b ./libjava/java/lang/Float.java ! 969459924b ./libjava/java/lang/ieeefp.h ! 1546884627b ./libjava/java/lang/IllegalAccessError.java ! 2739492776b ./libjava/java/lang/IllegalAccessException.java ! 1557093291b ./libjava/java/lang/IllegalArgumentException.java ! 4220991068b ./libjava/java/lang/IllegalMonitorStateException.java ! 172855953b ./libjava/java/lang/IllegalStateException.java ! 1303108506b ./libjava/java/lang/IllegalThreadStateException.java ! 153906896b ./libjava/java/lang/IncompatibleClassChangeError.java ! 166061792b ./libjava/java/lang/IndexOutOfBoundsException.java ! 2772342819b ./libjava/java/lang/InheritableThreadLocal.java ! 1458836935b ./libjava/java/lang/InstantiationError.java ! 650328562b ./libjava/java/lang/InstantiationException.java ! 4120577335b ./libjava/java/lang/Integer.java ! 1716407270b ./libjava/java/lang/InternalError.java ! 3005393186b ./libjava/java/lang/InterruptedException.java 2140439599b ./libjava/java/lang/k_cos.c 2521991737b ./libjava/java/lang/k_rem_pio2.c 1794170989b ./libjava/java/lang/k_sin.c 2812209061b ./libjava/java/lang/k_tan.c ! 1031814374b ./libjava/java/lang/LinkageError.java ! 1043365864b ./libjava/java/lang/Long.java ! 3228990355b ./libjava/java/lang/Math.java ! 3525801158b ./libjava/java/lang/mprec.c 338852744b ./libjava/java/lang/mprec.h ! 2041042935b ./libjava/java/lang/natCharacter.cc ! 1760287660b ./libjava/java/lang/natClass.cc ! 3980285264b ./libjava/java/lang/natClassLoader.cc ! 3519010570b ./libjava/java/lang/natDouble.cc 2312870767b ./libjava/java/lang/natEcosProcess.cc 91234316b ./libjava/java/lang/natFloat.cc ! 3510482433b ./libjava/java/lang/natMath.cc ! 76124715b ./libjava/java/lang/natObject.cc ! 1982998394b ./libjava/java/lang/natPosixProcess.cc ! 3985207471b ./libjava/java/lang/natRuntime.cc ! 209062817b ./libjava/java/lang/natStringBuffer.cc ! 4255324328b ./libjava/java/lang/natString.cc ! 1182371633b ./libjava/java/lang/natSystem.cc ! 1391213516b ./libjava/java/lang/natThread.cc ! 1137947649b ./libjava/java/lang/natThrowable.cc ! 4294967295b ./libjava/java/lang/natWin32Process.cc ! 480489940b ./libjava/java/lang/NegativeArraySizeException.java ! 1147004568b ./libjava/java/lang/NoClassDefFoundError.java ! 2828263392b ./libjava/java/lang/NoSuchFieldError.java ! 2392659469b ./libjava/java/lang/NoSuchFieldException.java ! 1339035495b ./libjava/java/lang/NoSuchMethodError.java ! 615266877b ./libjava/java/lang/NoSuchMethodException.java ! 1556435959b ./libjava/java/lang/NullPointerException.java ! 899274464b ./libjava/java/lang/NumberFormatException.java ! 1334794302b ./libjava/java/lang/Number.java ! 3421547735b ./libjava/java/lang/Object.h 3641470251b ./libjava/java/lang/Object.java ! 344219618b ./libjava/java/lang/OutOfMemoryError.java ! 2281685049b ./libjava/java/lang/Package.java ! 2357238508b ./libjava/java/lang/PosixProcess.java ! 3622530025b ./libjava/java/lang/Process.java ! 1863148120b ./libjava/java/lang/reflect/AccessibleObject.java 1772289084b ./libjava/java/lang/reflect/Array.java ! 1042641503b ./libjava/java/lang/reflect/Constructor.java ! 2343995282b ./libjava/java/lang/reflect/Field.java ! 4276731407b ./libjava/java/lang/reflect/InvocationTargetException.java ! 2195316717b ./libjava/java/lang/reflect/Member.java ! 3154056039b ./libjava/java/lang/reflect/Method.java ! 737811330b ./libjava/java/lang/reflect/Modifier.java ! 467850593b ./libjava/java/lang/reflect/natArray.cc ! 848571325b ./libjava/java/lang/reflect/natConstructor.cc ! 2897267786b ./libjava/java/lang/reflect/natField.cc ! 3433405242b ./libjava/java/lang/reflect/natMethod.cc ! 3286982797b ./libjava/java/lang/reflect/ReflectPermission.java ! 4262082056b ./libjava/java/lang/ref/natReference.cc ! 1460247144b ./libjava/java/lang/ref/PhantomReference.java ! 704062708b ./libjava/java/lang/ref/Reference.java ! 65399149b ./libjava/java/lang/ref/ReferenceQueue.java ! 3675082054b ./libjava/java/lang/ref/SoftReference.java ! 4137952990b ./libjava/java/lang/ref/WeakReference.java ! 3010960818b ./libjava/java/lang/Runnable.java ! 1799896457b ./libjava/java/lang/RuntimeException.java 1498739702b ./libjava/java/lang/Runtime.java ! 3735977458b ./libjava/java/lang/RuntimePermission.java 4211007333b ./libjava/java/lang/s_atan.c 1992861509b ./libjava/java/lang/s_ceil.c 2560516823b ./libjava/java/lang/s_copysign.c 138245783b ./libjava/java/lang/s_cos.c ! 3082173393b ./libjava/java/lang/SecurityException.java ! 788295818b ./libjava/java/lang/SecurityManager.java 2696927637b ./libjava/java/lang/s_fabs.c 2861859787b ./libjava/java/lang/sf_fabs.c 1587392745b ./libjava/java/lang/s_floor.c 3733918551b ./libjava/java/lang/sf_rint.c ! 987059562b ./libjava/java/lang/Short.java 781279555b ./libjava/java/lang/s_rint.c 1543063550b ./libjava/java/lang/s_scalbn.c 683141039b ./libjava/java/lang/s_sin.c ! 3968168506b ./libjava/java/lang/StackOverflowError.java 2604631654b ./libjava/java/lang/s_tan.c ! 2934755101b ./libjava/java/lang/StrictMath.java ! 2480138781b ./libjava/java/lang/StringBuffer.java ! 4119807874b ./libjava/java/lang/StringIndexOutOfBoundsException.java ! 1328413402b ./libjava/java/lang/String.java ! 2159586687b ./libjava/java/lang/strtod.c ! 2990987309b ./libjava/java/lang/System.java ! 3910182705b ./libjava/java/lang/ThreadDeath.java ! 176223137b ./libjava/java/lang/ThreadGroup.java ! 3073946400b ./libjava/java/lang/Thread.java ! 2901552173b ./libjava/java/lang/ThreadLocal.java 2728582923b ./libjava/java/lang/Throwable.java ! 402341795b ./libjava/java/lang/UnknownError.java ! 964603433b ./libjava/java/lang/UnsatisfiedLinkError.java ! 1966641471b ./libjava/java/lang/UnsupportedClassVersionError.java ! 3152130847b ./libjava/java/lang/UnsupportedOperationException.java ! 4139089776b ./libjava/java/lang/VerifyError.java ! 3680335112b ./libjava/java/lang/VirtualMachineError.java ! 1734917059b ./libjava/java/lang/VMClassLoader.java ! 3002073692b ./libjava/java/lang/VMSecurityManager.java ! 3929414917b ./libjava/java/lang/Void.java 2208706716b ./libjava/java/lang/w_acos.c 2509257289b ./libjava/java/lang/w_asin.c 129756780b ./libjava/java/lang/w_atan2.c 3101537020b ./libjava/java/lang/w_exp.c 4251570485b ./libjava/java/lang/w_fmod.c + 3209764157b ./libjava/java/lang/Win32Process.java 2517288589b ./libjava/java/lang/w_log.c 2200179114b ./libjava/java/lang/w_pow.c 3127225850b ./libjava/java/lang/w_remainder.c 3084712253b ./libjava/java/lang/w_sqrt.c ! 647790385b ./libjava/java/math/BigDecimal.java ! 1413640672b ./libjava/java/math/BigInteger.java ! 2740663451b ./libjava/java/net/Authenticator.java ! 1892964846b ./libjava/java/net/BindException.java ! 465134141b ./libjava/java/net/ConnectException.java ! 2451709496b ./libjava/java/net/ContentHandlerFactory.java ! 2009481994b ./libjava/java/net/ContentHandler.java ! 2799450041b ./libjava/java/net/DatagramPacket.java ! 1684404099b ./libjava/java/net/DatagramSocketImpl.java ! 2186623986b ./libjava/java/net/DatagramSocket.java ! 3221371229b ./libjava/java/net/FileNameMap.java 905107405b ./libjava/java/net/HttpURLConnection.java ! 2016211119b ./libjava/java/net/InetAddress.java 3267095408b ./libjava/java/net/JarURLConnection.java ! 2855708971b ./libjava/java/net/MalformedURLException.java ! 2301622401b ./libjava/java/net/MulticastSocket.java ! 4045295019b ./libjava/java/net/natInetAddress.cc ! 743824210b ./libjava/java/net/natPlainDatagramSocketImpl.cc ! 2983285886b ./libjava/java/net/natPlainSocketImpl.cc ! 1682337997b ./libjava/java/net/NetPermission.java ! 219229722b ./libjava/java/net/NoRouteToHostException.java ! 833606891b ./libjava/java/net/PasswordAuthentication.java ! 4105261490b ./libjava/java/net/PlainDatagramSocketImpl.java ! 2335349056b ./libjava/java/net/PlainSocketImpl.java ! 1942565398b ./libjava/java/net/ProtocolException.java ! 3938255056b ./libjava/java/net/ServerSocket.java ! 3016170839b ./libjava/java/net/SocketException.java ! 2277031455b ./libjava/java/net/SocketImplFactory.java ! 1289495366b ./libjava/java/net/SocketImpl.java ! 1934542585b ./libjava/java/net/Socket.java ! 2567328645b ./libjava/java/net/SocketOptions.java ! 1657196367b ./libjava/java/net/SocketPermission.java ! 1041327798b ./libjava/java/net/UnknownHostException.java ! 2623632799b ./libjava/java/net/UnknownServiceException.java 194604118b ./libjava/java/net/URLClassLoader.java 2961889722b ./libjava/java/net/URLConnection.java ! 2772681802b ./libjava/java/net/URLDecoder.java ! 4220867118b ./libjava/java/net/URLEncoder.java ! 1440065038b ./libjava/java/net/URL.java ! 2216267556b ./libjava/java/net/URLStreamHandlerFactory.java ! 3036638609b ./libjava/java/net/URLStreamHandler.java ! 2345713982b ./libjava/java/rmi/AccessException.java ! 1531149925b ./libjava/java/rmi/activation/Activatable.java ! 202413195b ./libjava/java/rmi/activation/ActivateFailedException.java ! 3435388540b ./libjava/java/rmi/activation/ActivationDesc.java ! 2977173158b ./libjava/java/rmi/activation/ActivationException.java ! 3932453163b ./libjava/java/rmi/activation/ActivationGroupDesc.java ! 3794676101b ./libjava/java/rmi/activation/ActivationGroupID.java ! 443589476b ./libjava/java/rmi/activation/ActivationGroup.java ! 1660066253b ./libjava/java/rmi/activation/ActivationID.java ! 3314676255b ./libjava/java/rmi/activation/ActivationInstantiator.java ! 331032778b ./libjava/java/rmi/activation/ActivationMonitor.java ! 3527811786b ./libjava/java/rmi/activation/ActivationSystem.java ! 38902488b ./libjava/java/rmi/activation/Activator.java ! 3932075613b ./libjava/java/rmi/activation/UnknownGroupException.java ! 2859838111b ./libjava/java/rmi/activation/UnknownObjectException.java ! 638523787b ./libjava/java/rmi/AlreadyBoundException.java ! 3168686766b ./libjava/java/rmi/ConnectException.java ! 108680455b ./libjava/java/rmi/ConnectIOException.java ! 1240298b ./libjava/java/rmi/dgc/DGC.java ! 3040253205b ./libjava/java/rmi/dgc/Lease.java ! 4206440135b ./libjava/java/rmi/dgc/VMID.java ! 2315456896b ./libjava/java/rmi/MarshalException.java ! 1559402097b ./libjava/java/rmi/MarshalledObject.java ! 2730841917b ./libjava/java/rmi/Naming.java ! 2964967266b ./libjava/java/rmi/NoSuchObjectException.java ! 2207159994b ./libjava/java/rmi/NotBoundException.java ! 2660899207b ./libjava/java/rmi/registry/LocateRegistry.java ! 1399983578b ./libjava/java/rmi/registry/RegistryHandler.java ! 3447606163b ./libjava/java/rmi/registry/Registry.java ! 2722897537b ./libjava/java/rmi/RemoteException.java ! 3977817460b ./libjava/java/rmi/Remote.java ! 1880593648b ./libjava/java/rmi/RMISecurityException.java ! 1668944357b ./libjava/java/rmi/RMISecurityManager.java ! 2063315085b ./libjava/java/rmi/ServerError.java ! 3013999798b ./libjava/java/rmi/ServerException.java ! 3139440594b ./libjava/java/rmi/server/ExportException.java ! 1080320338b ./libjava/java/rmi/server/LoaderHandler.java ! 3453671358b ./libjava/java/rmi/server/LogStream.java ! 3627631958b ./libjava/java/rmi/server/ObjID.java ! 1620681979b ./libjava/java/rmi/server/Operation.java ! 3007384076b ./libjava/java/rmi/server/RemoteCall.java ! 646982205b ./libjava/java/rmi/server/RemoteObject.java ! 1057967745b ./libjava/java/rmi/server/RemoteRef.java ! 3980074697b ./libjava/java/rmi/server/RemoteServer.java ! 2379911685b ./libjava/java/rmi/server/RemoteStub.java ! 766223293b ./libjava/java/rmi/server/RMIClassLoader.java ! 1381387676b ./libjava/java/rmi/server/RMIClientSocketFactory.java ! 1355495784b ./libjava/java/rmi/server/RMIFailureHandler.java ! 637510001b ./libjava/java/rmi/server/RMIServerSocketFactory.java ! 491843230b ./libjava/java/rmi/server/RMISocketFactory.java ! 991417645b ./libjava/java/rmi/ServerRuntimeException.java ! 2405566142b ./libjava/java/rmi/server/ServerCloneException.java ! 970903487b ./libjava/java/rmi/server/ServerNotActiveException.java ! 3269103800b ./libjava/java/rmi/server/ServerRef.java ! 1284557277b ./libjava/java/rmi/server/Skeleton.java ! 1298691040b ./libjava/java/rmi/server/SkeletonMismatchException.java ! 301272094b ./libjava/java/rmi/server/SkeletonNotFoundException.java ! 2163278585b ./libjava/java/rmi/server/SocketSecurityException.java ! 946423957b ./libjava/java/rmi/server/UID.java ! 3436591463b ./libjava/java/rmi/server/UnicastRemoteObject.java ! 3786643443b ./libjava/java/rmi/server/Unreferenced.java ! 158040251b ./libjava/java/rmi/StubNotFoundException.java ! 981089142b ./libjava/java/rmi/UnexpectedException.java ! 3267495332b ./libjava/java/rmi/UnknownHostException.java ! 3831786123b ./libjava/java/rmi/UnmarshalException.java ! 3377565930b ./libjava/java/security/AccessControlContext.java ! 2503008464b ./libjava/java/security/AccessControlException.java ! 961049396b ./libjava/java/security/AccessController.java ! 1107973997b ./libjava/java/security/acl/AclEntry.java ! 208951186b ./libjava/java/security/acl/Acl.java ! 470826478b ./libjava/java/security/acl/AclNotFoundException.java ! 1196419206b ./libjava/java/security/acl/Group.java ! 2213283367b ./libjava/java/security/acl/LastOwnerException.java ! 3397637888b ./libjava/java/security/acl/NotOwnerException.java ! 689449683b ./libjava/java/security/acl/Owner.java ! 3427961043b ./libjava/java/security/acl/Permission.java ! 2206881746b ./libjava/java/security/AlgorithmParameterGenerator.java ! 3955879194b ./libjava/java/security/AlgorithmParameterGeneratorSpi.java ! 1605717160b ./libjava/java/security/AlgorithmParameters.java ! 2891548705b ./libjava/java/security/AlgorithmParametersSpi.java ! 445477635b ./libjava/java/security/AllPermission.java ! 3690509591b ./libjava/java/security/BasicPermission.java ! 962908602b ./libjava/java/security/cert/CertificateEncodingException.java ! 3422220568b ./libjava/java/security/cert/CertificateException.java ! 392043989b ./libjava/java/security/cert/CertificateExpiredException.java ! 1893973660b ./libjava/java/security/cert/CertificateFactory.java ! 1773373825b ./libjava/java/security/cert/CertificateFactorySpi.java ! 233269914b ./libjava/java/security/cert/Certificate.java ! 2007231431b ./libjava/java/security/cert/CertificateNotYetValidException.java ! 944611608b ./libjava/java/security/cert/CertificateParsingException.java ! 938503207b ./libjava/java/security/cert/CRLException.java ! 275997395b ./libjava/java/security/cert/CRL.java ! 3914599195b ./libjava/java/security/Certificate.java ! 3595656724b ./libjava/java/security/cert/X509Certificate.java ! 379566121b ./libjava/java/security/cert/X509CRLEntry.java ! 838800704b ./libjava/java/security/cert/X509CRL.java ! 1496043464b ./libjava/java/security/cert/X509Extension.java ! 2128346166b ./libjava/java/security/classpath.security ! 1245295455b ./libjava/java/security/CodeSource.java ! 1011061724b ./libjava/java/security/DigestException.java ! 3484233527b ./libjava/java/security/DigestInputStream.java ! 1273872520b ./libjava/java/security/DigestOutputStream.java ! 3131452143b ./libjava/java/security/DomainCombiner.java ! 2064440254b ./libjava/java/security/DummyKeyPairGenerator.java ! 1205011236b ./libjava/java/security/DummyMessageDigest.java ! 3244660822b ./libjava/java/security/DummySignature.java ! 3754360724b ./libjava/java/security/GeneralSecurityException.java ! 1546088936b ./libjava/java/security/GuardedObject.java ! 1223151028b ./libjava/java/security/Guard.java ! 2534219749b ./libjava/java/security/Identity.java ! 3669588150b ./libjava/java/security/IdentityScope.java ! 1502191052b ./libjava/java/security/interfaces/DSAKey.java ! 931326038b ./libjava/java/security/interfaces/DSAKeyPairGenerator.java ! 3412106065b ./libjava/java/security/interfaces/DSAParams.java ! 2946643846b ./libjava/java/security/interfaces/DSAPrivateKey.java ! 348049866b ./libjava/java/security/interfaces/DSAPublicKey.java ! 3186115353b ./libjava/java/security/interfaces/RSAKey.java ! 1654913905b ./libjava/java/security/interfaces/RSAPrivateCrtKey.java ! 2692733678b ./libjava/java/security/interfaces/RSAPrivateKey.java ! 1233397848b ./libjava/java/security/interfaces/RSAPublicKey.java ! 1258878052b ./libjava/java/security/InvalidAlgorithmParameterException.java ! 729426758b ./libjava/java/security/InvalidKeyException.java ! 4278354519b ./libjava/java/security/InvalidParameterException.java ! 508303117b ./libjava/java/security/KeyException.java ! 3556171286b ./libjava/java/security/KeyFactory.java ! 1081989305b ./libjava/java/security/KeyFactorySpi.java ! 323696554b ./libjava/java/security/Key.java ! 3220074237b ./libjava/java/security/KeyManagementException.java ! 1445793144b ./libjava/java/security/KeyPairGenerator.java ! 3630224179b ./libjava/java/security/KeyPairGeneratorSpi.java ! 1450975497b ./libjava/java/security/KeyPair.java ! 2462887043b ./libjava/java/security/KeyStoreException.java ! 2818591760b ./libjava/java/security/KeyStore.java ! 803045781b ./libjava/java/security/KeyStoreSpi.java ! 464741950b ./libjava/java/security/libgcj.security ! 4235721395b ./libjava/java/security/MessageDigest.java ! 3540748562b ./libjava/java/security/MessageDigestSpi.java ! 1866536196b ./libjava/java/security/NoSuchAlgorithmException.java ! 492706813b ./libjava/java/security/NoSuchProviderException.java ! 4053507376b ./libjava/java/security/PermissionCollection.java ! 528332829b ./libjava/java/security/Permission.java ! 3401846776b ./libjava/java/security/Permissions.java ! 1801865567b ./libjava/java/security/Policy.java ! 3369614815b ./libjava/java/security/Principal.java ! 985381771b ./libjava/java/security/PrivateKey.java ! 2559441309b ./libjava/java/security/PrivilegedActionException.java ! 1519374483b ./libjava/java/security/PrivilegedAction.java ! 1001728643b ./libjava/java/security/PrivilegedExceptionAction.java ! 368821109b ./libjava/java/security/ProtectionDomain.java ! 3835680906b ./libjava/java/security/ProviderException.java ! 2340776264b ./libjava/java/security/Provider.java ! 1224382933b ./libjava/java/security/PublicKey.java ! 120707443b ./libjava/java/security/SecureClassLoader.java ! 494331022b ./libjava/java/security/SecureRandom.java ! 2053869154b ./libjava/java/security/SecureRandomSpi.java ! 3229850841b ./libjava/java/security/Security.java ! 3637925183b ./libjava/java/security/SecurityPermission.java ! 498383671b ./libjava/java/security/SignatureException.java ! 4213110400b ./libjava/java/security/Signature.java ! 2850222648b ./libjava/java/security/SignatureSpi.java ! 366295954b ./libjava/java/security/SignedObject.java ! 3719230281b ./libjava/java/security/Signer.java ! 822101390b ./libjava/java/security/spec/AlgorithmParameterSpec.java ! 3120841125b ./libjava/java/security/spec/DSAParameterSpec.java ! 2299637832b ./libjava/java/security/spec/DSAPrivateKeySpec.java ! 681202330b ./libjava/java/security/spec/DSAPublicKeySpec.java ! 1352408709b ./libjava/java/security/spec/EncodedKeySpec.java ! 4009180494b ./libjava/java/security/spec/InvalidKeySpecException.java ! 965497815b ./libjava/java/security/spec/InvalidParameterSpecException.java ! 3101037976b ./libjava/java/security/spec/KeySpec.java ! 2816023539b ./libjava/java/security/spec/PKCS8EncodedKeySpec.java ! 1120858009b ./libjava/java/security/spec/RSAKeyGenParameterSpec.java ! 4250337880b ./libjava/java/security/spec/RSAPrivateCrtKeySpec.java ! 2927717266b ./libjava/java/security/spec/RSAPrivateKeySpec.java ! 379229426b ./libjava/java/security/spec/RSAPublicKeySpec.java ! 2631607563b ./libjava/java/security/spec/X509EncodedKeySpec.java ! 2654502080b ./libjava/java/security/UnrecoverableKeyException.java ! 3042679945b ./libjava/java/security/UnresolvedPermission.java ! 2530986689b ./libjava/java/sql/Array.java ! 732307642b ./libjava/java/sql/BatchUpdateException.java ! 374178764b ./libjava/java/sql/Blob.java ! 1076961675b ./libjava/java/sql/CallableStatement.java ! 3989040128b ./libjava/java/sql/Clob.java ! 2277896489b ./libjava/java/sql/Connection.java ! 3263074261b ./libjava/java/sql/DatabaseMetaData.java ! 3465346954b ./libjava/java/sql/DataTruncation.java ! 3146941939b ./libjava/java/sql/Date.java ! 2513314582b ./libjava/java/sql/Driver.java ! 3274581597b ./libjava/java/sql/DriverManager.java ! 824112165b ./libjava/java/sql/DriverPropertyInfo.java ! 650191309b ./libjava/java/sql/PreparedStatement.java ! 3735265522b ./libjava/java/sql/Ref.java ! 1340870361b ./libjava/java/sql/ResultSet.java ! 303434648b ./libjava/java/sql/ResultSetMetaData.java ! 2203730199b ./libjava/java/sql/SQLData.java ! 2087528963b ./libjava/java/sql/SQLException.java ! 4204919565b ./libjava/java/sql/SQLInput.java ! 497830475b ./libjava/java/sql/SQLOutput.java ! 2690669161b ./libjava/java/sql/SQLWarning.java ! 2118176561b ./libjava/java/sql/Statement.java ! 1941352982b ./libjava/java/sql/Struct.java ! 1822095083b ./libjava/java/sql/Time.java ! 3582484656b ./libjava/java/sql/Timestamp.java ! 2990213411b ./libjava/java/sql/Types.java ! 2231202473b ./libjava/java/text/Annotation.java ! 459822626b ./libjava/java/text/AttributedCharacterIterator.java ! 1193044303b ./libjava/java/text/AttributedStringIterator.java ! 1309664747b ./libjava/java/text/AttributedString.java ! 2390211842b ./libjava/java/text/BreakIterator.java ! 558207429b ./libjava/java/text/CharacterIterator.java ! 2434956617b ./libjava/java/text/ChoiceFormat.java ! 3293929777b ./libjava/java/text/CollationElementIterator.java 285476728b ./libjava/java/text/CollationKey.java ! 376903872b ./libjava/java/text/Collator.java ! 178017360b ./libjava/java/text/DateFormat.java ! 1553614803b ./libjava/java/text/DateFormatSymbols.java ! 3087605867b ./libjava/java/text/DecimalFormat.java ! 934140472b ./libjava/java/text/DecimalFormatSymbols.java ! 2519664708b ./libjava/java/text/FieldPosition.java ! 1527062930b ./libjava/java/text/Format.java ! 3209075256b ./libjava/java/text/MessageFormat.java 1224532863b ./libjava/java/text/natCollator.cc ! 2380468989b ./libjava/java/text/NumberFormat.java ! 2701315364b ./libjava/java/text/ParseException.java ! 807650843b ./libjava/java/text/ParsePosition.java ! 2113083680b ./libjava/java/text/RuleBasedCollator.java ! 1428855839b ./libjava/java/text/SimpleDateFormat.java ! 253040983b ./libjava/java/text/StringCharacterIterator.java ! 2532876071b ./libjava/java/util/AbstractCollection.java ! 2029909984b ./libjava/java/util/AbstractList.java ! 744897810b ./libjava/java/util/AbstractMap.java ! 4033710468b ./libjava/java/util/AbstractSequentialList.java ! 2512678519b ./libjava/java/util/AbstractSet.java ! 3703107479b ./libjava/java/util/ArrayList.java ! 1381887354b ./libjava/java/util/Arrays.java ! 3524843230b ./libjava/java/util/BasicMapEntry.java ! 282804152b ./libjava/java/util/BitSet.java ! 2660147876b ./libjava/java/util/Calendar.java ! 1341887661b ./libjava/java/util/Collection.java ! 2871372597b ./libjava/java/util/Collections.java ! 3016313098b ./libjava/java/util/Comparator.java ! 2908271472b ./libjava/java/util/ConcurrentModificationException.java ! 710778165b ./libjava/java/util/Date.java ! 328149423b ./libjava/java/util/Dictionary.java ! 393960426b ./libjava/java/util/EmptyStackException.java ! 358368463b ./libjava/java/util/Enumeration.java ! 2421153851b ./libjava/java/util/EventListener.java ! 3090423014b ./libjava/java/util/EventObject.java ! 3092311908b ./libjava/java/util/GregorianCalendar.java ! 1559136349b ./libjava/java/util/HashMap.java ! 3919942898b ./libjava/java/util/HashSet.java ! 804852857b ./libjava/java/util/Hashtable.java ! 4293305226b ./libjava/java/util/IdentityHashMap.java ! 4026479457b ./libjava/java/util/Iterator.java ! 3778884769b ./libjava/java/util/jar/Attributes.java ! 3242774103b ./libjava/java/util/jar/JarEntry.java ! 1439364136b ./libjava/java/util/jar/JarException.java ! 3579491279b ./libjava/java/util/jar/JarFile.java ! 3108700190b ./libjava/java/util/jar/JarInputStream.java ! 3060414122b ./libjava/java/util/jar/JarOutputStream.java ! 1259280694b ./libjava/java/util/jar/Manifest.java ! 832329135b ./libjava/java/util/LinkedHashMap.java ! 1624117899b ./libjava/java/util/LinkedHashSet.java ! 627526944b ./libjava/java/util/LinkedList.java ! 751985718b ./libjava/java/util/ListIterator.java ! 3068429576b ./libjava/java/util/List.java ! 2456450061b ./libjava/java/util/ListResourceBundle.java ! 667725203b ./libjava/java/util/Locale.java ! 484359853b ./libjava/java/util/Map.java ! 2250155039b ./libjava/java/util/MissingResourceException.java ! 1572696779b ./libjava/java/util/NoSuchElementException.java ! 1271533381b ./libjava/java/util/Observable.java ! 4174427959b ./libjava/java/util/Observer.java ! 2595158547b ./libjava/java/util/Properties.java ! 2604596284b ./libjava/java/util/PropertyPermission.java ! 1495521984b ./libjava/java/util/PropertyResourceBundle.java ! 2707837116b ./libjava/java/util/RandomAccess.java ! 1741060266b ./libjava/java/util/Random.java ! 604399175b ./libjava/java/util/ResourceBundle.java ! 2326466944b ./libjava/java/util/Set.java ! 2701923146b ./libjava/java/util/SimpleTimeZone.java ! 1991994937b ./libjava/java/util/SortedMap.java ! 2357787438b ./libjava/java/util/SortedSet.java ! 1274465736b ./libjava/java/util/Stack.java ! 3200298650b ./libjava/java/util/StringTokenizer.java ! 3482719698b ./libjava/java/util/Timer.java ! 2154207616b ./libjava/java/util/TimerTask.java ! 2511347434b ./libjava/java/util/TimeZone.java ! 4294130868b ./libjava/java/util/TooManyListenersException.java ! 3728869390b ./libjava/java/util/TreeMap.java ! 3277604160b ./libjava/java/util/TreeSet.java ! 3512853982b ./libjava/java/util/Vector.java ! 1610986963b ./libjava/java/util/WeakHashMap.java ! 2655847765b ./libjava/java/util/zip/Adler32.java ! 4095201247b ./libjava/java/util/zip/CheckedInputStream.java ! 1148292706b ./libjava/java/util/zip/CheckedOutputStream.java ! 2267421579b ./libjava/java/util/zip/Checksum.java ! 2436561403b ./libjava/java/util/zip/CRC32.java ! 3657795573b ./libjava/java/util/zip/DataFormatException.java ! 199330457b ./libjava/java/util/zip/Deflater.java ! 3336807235b ./libjava/java/util/zip/DeflaterOutputStream.java ! 4059428363b ./libjava/java/util/zip/GZIPInputStream.java ! 371303032b ./libjava/java/util/zip/GZIPOutputStream.java ! 3396470608b ./libjava/java/util/zip/InflaterInputStream.java ! 2396996601b ./libjava/java/util/zip/Inflater.java ! 1224162092b ./libjava/java/util/zip/natDeflater.cc ! 3063634192b ./libjava/java/util/zip/natInflater.cc ! 1145913690b ./libjava/java/util/zip/ZipConstants.java ! 65566596b ./libjava/java/util/zip/ZipEntry.java ! 96030578b ./libjava/java/util/zip/ZipException.java ! 2814843272b ./libjava/java/util/zip/ZipFile.java ! 2069419618b ./libjava/java/util/zip/ZipInputStream.java ! 3710262911b ./libjava/java/util/zip/ZipOutputStream.java 145274057b ./libjava/javax/naming/AuthenticationException.java 1613568553b ./libjava/javax/naming/AuthenticationNotSupportedException.java ! 3018524827b ./libjava/javax/naming/BinaryRefAddr.java ! 2950522979b ./libjava/javax/naming/Binding.java ! 495208868b ./libjava/javax/naming/CannotProceedException.java 1696161213b ./libjava/javax/naming/CommunicationException.java + 1020365512b ./libjava/javax/naming/CompositeName.java + 3091243262b ./libjava/javax/naming/CompoundName.java 2106105768b ./libjava/javax/naming/ConfigurationException.java 2355024605b ./libjava/javax/naming/Context.java 3253591271b ./libjava/javax/naming/ContextNotEmptyException.java ! 1403862831b ./libjava/javax/naming/directory/AttributeInUseException.java ! 3287107224b ./libjava/javax/naming/directory/Attribute.java ! 1937491808b ./libjava/javax/naming/directory/AttributeModificationException.java ! 2124855085b ./libjava/javax/naming/directory/Attributes.java ! 4218631907b ./libjava/javax/naming/directory/BasicAttribute.java ! 1340187773b ./libjava/javax/naming/directory/BasicAttributes.java ! 525649657b ./libjava/javax/naming/directory/DirContext.java ! 3780905669b ./libjava/javax/naming/directory/InitialDirContext.java ! 1070098408b ./libjava/javax/naming/directory/InvalidAttributeIdentifierException.java ! 2130227696b ./libjava/javax/naming/directory/InvalidAttributesException.java ! 2448051700b ./libjava/javax/naming/directory/InvalidAttributeValueException.java ! 3317095745b ./libjava/javax/naming/directory/InvalidSearchControlsException.java ! 2677951745b ./libjava/javax/naming/directory/InvalidSearchFilterException.java ! 297375529b ./libjava/javax/naming/directory/ModificationItem.java ! 1218016472b ./libjava/javax/naming/directory/NoSuchAttributeException.java ! 3800798223b ./libjava/javax/naming/directory/SchemaViolationException.java ! 2280737329b ./libjava/javax/naming/directory/SearchControls.java ! 2833305555b ./libjava/javax/naming/directory/SearchResult.java ! 632548719b ./libjava/javax/naming/event/EventContext.java ! 1104789568b ./libjava/javax/naming/event/EventDirContext.java ! 1079821505b ./libjava/javax/naming/event/NamespaceChangeListener.java ! 1238809356b ./libjava/javax/naming/event/NamingEvent.java ! 3831078506b ./libjava/javax/naming/event/NamingExceptionEvent.java ! 1293039497b ./libjava/javax/naming/event/NamingListener.java ! 1847110909b ./libjava/javax/naming/event/ObjectChangeListener.java ! 1739543939b ./libjava/javax/naming/InitialContext.java 38212245b ./libjava/javax/naming/InsufficientResourcesException.java 2296688963b ./libjava/javax/naming/InterruptedNamingException.java ! 4165253207b ./libjava/javax/naming/InvalidNameException.java ! 4178007180b ./libjava/javax/naming/ldap/ControlFactory.java ! 1181684484b ./libjava/javax/naming/ldap/Control.java ! 1350269098b ./libjava/javax/naming/ldap/ExtendedRequest.java ! 738885701b ./libjava/javax/naming/ldap/ExtendedResponse.java ! 4143032207b ./libjava/javax/naming/ldap/HasControls.java ! 992304517b ./libjava/javax/naming/ldap/InitialLdapContext.java ! 1094699680b ./libjava/javax/naming/ldap/LdapContext.java ! 3377633528b ./libjava/javax/naming/ldap/LdapReferralException.java ! 2717074673b ./libjava/javax/naming/ldap/UnsolicitedNotificationEvent.java ! 391691341b ./libjava/javax/naming/ldap/UnsolicitedNotification.java ! 4115295275b ./libjava/javax/naming/ldap/UnsolicitedNotificationListener.java 3467011523b ./libjava/javax/naming/LimitExceededException.java ! 2945536555b ./libjava/javax/naming/LinkException.java 3280765719b ./libjava/javax/naming/LinkLoopException.java + 4232859152b ./libjava/javax/naming/LinkRef.java 1528609025b ./libjava/javax/naming/MalformedLinkException.java 2798268023b ./libjava/javax/naming/NameAlreadyBoundException.java ! 4202297725b ./libjava/javax/naming/NameClassPair.java ! 2645610340b ./libjava/javax/naming/Name.java 230282723b ./libjava/javax/naming/NameNotFoundException.java 2454523681b ./libjava/javax/naming/NameParser.java 3641625296b ./libjava/javax/naming/NamingEnumeration.java ! 949888078b ./libjava/javax/naming/NamingException.java 1081898018b ./libjava/javax/naming/NamingSecurityException.java 3355150544b ./libjava/javax/naming/NoInitialContextException.java 3148663544b ./libjava/javax/naming/NoPermissionException.java 1051745286b ./libjava/javax/naming/NotContextException.java ! 1197235786b ./libjava/javax/naming/OperationNotSupportedException.java 2758830928b ./libjava/javax/naming/PartialResultException.java ! 3291792639b ./libjava/javax/naming/RefAddr.java 1496952630b ./libjava/javax/naming/Referenceable.java ! 3197721219b ./libjava/javax/naming/Reference.java ! 2706204834b ./libjava/javax/naming/ReferralException.java 740355282b ./libjava/javax/naming/ServiceUnavailableException.java 2175690233b ./libjava/javax/naming/SizeLimitExceededException.java + 940282333b ./libjava/javax/naming/spi/DirectoryManager.java + 1671315693b ./libjava/javax/naming/spi/DirObjectFactory.java + 2654197748b ./libjava/javax/naming/spi/DirStateFactory.java 2067382225b ./libjava/javax/naming/spi/InitialContextFactoryBuilder.java 1751323528b ./libjava/javax/naming/spi/InitialContextFactory.java ! 4282133359b ./libjava/javax/naming/spi/NamingManager.java ! 2834439335b ./libjava/javax/naming/spi/ObjectFactoryBuilder.java ! 162979435b ./libjava/javax/naming/spi/ObjectFactory.java ! 3604649919b ./libjava/javax/naming/spi/ResolveResult.java ! 324774529b ./libjava/javax/naming/spi/Resolver.java ! 2596286413b ./libjava/javax/naming/spi/StateFactory.java ! 255272768b ./libjava/javax/naming/StringRefAddr.java 668991294b ./libjava/javax/naming/TimeLimitExceededException.java ! 1100799981b ./libjava/javax/transaction/HeuristicCommitException.java ! 3468030488b ./libjava/javax/transaction/HeuristicMixedException.java ! 3612916446b ./libjava/javax/transaction/HeuristicRollbackException.java ! 3063033259b ./libjava/javax/transaction/InvalidTransactionException.java ! 3066010541b ./libjava/javax/transaction/NotSupportedException.java ! 2654654450b ./libjava/javax/transaction/RollbackException.java ! 1778487585b ./libjava/javax/transaction/Status.java ! 314435753b ./libjava/javax/transaction/Synchronization.java ! 2247680091b ./libjava/javax/transaction/SystemException.java ! 3332683111b ./libjava/javax/transaction/Transaction.java ! 1322333630b ./libjava/javax/transaction/TransactionManager.java ! 1540883701b ./libjava/javax/transaction/TransactionRequiredException.java ! 149347685b ./libjava/javax/transaction/TransactionRolledbackException.java ! 1599652796b ./libjava/javax/transaction/UserTransaction.java ! 91616559b ./libjava/javax/transaction/xa/XAException.java ! 151022467b ./libjava/javax/transaction/xa/XAResource.java ! 2545015127b ./libjava/javax/transaction/xa/Xid.java ! 2987342447b ./libjava/jni.cc ! 1362543266b ./libjava/LIBGCJ_LICENSE ! 799924566b ./libjava/libgcj.spec.in 3263845190b ./libjava/libgcj-test.spec.in 464053222b ./libjava/libltdl/acconfig.h 1486261890b ./libjava/libltdl/acinclude.m4 2748542911b ./libjava/libltdl/aclocal.m4 ! 260538191b ./libjava/libltdl/ChangeLog 3229611250b ./libjava/libltdl/config.h.in ! 3663840013b ./libjava/libltdl/configure ! 586017012b ./libjava/libltdl/configure.in 1530919786b ./libjava/libltdl/COPYING.LIB ! 3885054737b ./libjava/libltdl/.cvsignore 1708336280b ./libjava/libltdl/ltdl.c 3122579166b ./libjava/libltdl/ltdl.h 3589765398b ./libjava/libltdl/Makefile.am 2495909158b ./libjava/libltdl/Makefile.in 1322928877b ./libjava/libltdl/README 216805921b ./libjava/libltdl/stamp-h.in ! 4225681790b ./libjava/libtool-version ! 1255585512b ./libjava/Makefile.am ! 1553105382b ./libjava/Makefile.in ! 1775785992b ./libjava/mauve-libgcj ! 3598737829b ./libjava/name-finder.cc 4049677327b ./libjava/NEWS ! 3395710497b ./libjava/nogc.cc ! 529282886b ./libjava/no-threads.cc ! 2042069291b ./libjava/org/w3c/dom/Attr.java ! 722169044b ./libjava/org/w3c/dom/CDATASection.java ! 2065721992b ./libjava/org/w3c/dom/CharacterData.java ! 2143127567b ./libjava/org/w3c/dom/Comment.java ! 862763522b ./libjava/org/w3c/dom/DocumentFragment.java ! 1900680333b ./libjava/org/w3c/dom/Document.java ! 2426412549b ./libjava/org/w3c/dom/DocumentType.java ! 488476586b ./libjava/org/w3c/dom/DOMException.java ! 4211570251b ./libjava/org/w3c/dom/DOMImplementation.java ! 4250415570b ./libjava/org/w3c/dom/Element.java ! 4046624265b ./libjava/org/w3c/dom/Entity.java ! 2262342958b ./libjava/org/w3c/dom/EntityReference.java ! 855632112b ./libjava/org/w3c/dom/NamedNodeMap.java ! 2986347584b ./libjava/org/w3c/dom/Node.java ! 1228842303b ./libjava/org/w3c/dom/NodeList.java ! 3739671112b ./libjava/org/w3c/dom/Notation.java ! 358325944b ./libjava/org/w3c/dom/ProcessingInstruction.java ! 2318984118b ./libjava/org/w3c/dom/ranges/DocumentRange.java ! 575095803b ./libjava/org/w3c/dom/ranges/RangeException.java ! 1265227100b ./libjava/org/w3c/dom/ranges/Range.java ! 1690022844b ./libjava/org/w3c/dom/Text.java ! 4050517071b ./libjava/org/w3c/dom/traversal/DocumentTraversal.java ! 2226386849b ./libjava/org/w3c/dom/traversal/NodeFilter.java ! 3652245705b ./libjava/org/w3c/dom/traversal/NodeIterator.java ! 819381088b ./libjava/org/w3c/dom/traversal/TreeWalker.java ! 1845225689b ./libjava/org/xml/sax/AttributeList.java ! 34783101b ./libjava/org/xml/sax/Attributes.java ! 2393098782b ./libjava/org/xml/sax/ContentHandler.java ! 2167265032b ./libjava/org/xml/sax/DocumentHandler.java ! 2487190850b ./libjava/org/xml/sax/DTDHandler.java ! 3192023668b ./libjava/org/xml/sax/EntityResolver.java ! 2389406127b ./libjava/org/xml/sax/ErrorHandler.java ! 3779605388b ./libjava/org/xml/sax/ext/DeclHandler.java ! 3015426944b ./libjava/org/xml/sax/ext/LexicalHandler.java ! 3331884369b ./libjava/org/xml/sax/HandlerBase.java ! 2006841075b ./libjava/org/xml/sax/helpers/AttributeListImpl.java ! 1981118939b ./libjava/org/xml/sax/helpers/AttributesImpl.java ! 3683787168b ./libjava/org/xml/sax/helpers/DefaultHandler.java ! 3791965905b ./libjava/org/xml/sax/helpers/LocatorImpl.java ! 1401784461b ./libjava/org/xml/sax/helpers/NamespaceSupport.java ! 3459248108b ./libjava/org/xml/sax/helpers/ParserAdapter.java ! 1216147324b ./libjava/org/xml/sax/helpers/ParserFactory.java ! 774083139b ./libjava/org/xml/sax/helpers/XMLFilterImpl.java ! 3667288069b ./libjava/org/xml/sax/helpers/XMLReaderAdapter.java ! 1058624631b ./libjava/org/xml/sax/helpers/XMLReaderFactory.java ! 3525958518b ./libjava/org/xml/sax/InputSource.java ! 1358247595b ./libjava/org/xml/sax/Locator.java ! 570431615b ./libjava/org/xml/sax/Parser.java ! 1627938146b ./libjava/org/xml/sax/SAXException.java ! 4028320752b ./libjava/org/xml/sax/SAXNotRecognizedException.java ! 800153920b ./libjava/org/xml/sax/SAXNotSupportedException.java ! 24590437b ./libjava/org/xml/sax/SAXParseException.java ! 2665273964b ./libjava/org/xml/sax/XMLFilter.java ! 557624139b ./libjava/org/xml/sax/XMLReader.java ! 268319164b ./libjava/posix.cc ! 4218036894b ./libjava/posix-threads.cc ! 1057670606b ./libjava/prims.cc 3199155412b ./libjava/README ! 3315476665b ./libjava/resolve.cc 2710913388b ./libjava/scripts/classes.pl ! 2322272636b ./libjava/scripts/encodings.pl ! 2639955246b ./libjava/scripts/MakeCharTables.java 211751055b ./libjava/scripts/MakeDefaultMimeTypes.java 415147073b ./libjava/scripts/mime.types 1359447378b ./libjava/scripts/showval.java 2309086205b ./libjava/scripts/TexinfoDoclet.java + 2507783b ./libjava/scripts/unicode-blocks.pl + 2554188738b ./libjava/scripts/unicode-decomp.pl + 3460612990b ./libjava/scripts/unicode-muncher.pl + 810390237b ./libjava/sysdep/alpha/locks.h + 2948369561b ./libjava/sysdep/generic/locks.h + 255022282b ./libjava/sysdep/i386/locks.h 4255020929b ./libjava/sysdep/ia64.c 3969226176b ./libjava/sysdep/ia64-frame.h ! 2487590179b ./libjava/sysdep/ia64/locks.h ! 3446737173b ./libjava/sysdep/powerpc/locks.h ! 2903495760b ./libjava/sysdep/sparc/locks.h ! 1976031315b ./libjava/testsuite/ChangeLog 1230501773b ./libjava/testsuite/config/default.exp 3718926011b ./libjava/testsuite/libjava.compile/abstr.java 2888415448b ./libjava/testsuite/libjava.compile/abstr.xfail 2597392402b ./libjava/testsuite/libjava.compile/ArrayClass.java 2510342235b ./libjava/testsuite/libjava.compile/assignment_2.java 113533645b ./libjava/testsuite/libjava.compile/assignment.java 226856759b ./libjava/testsuite/libjava.compile/block.java 1927457704b ./libjava/testsuite/libjava.compile/block.xfail 2001362839b ./libjava/testsuite/libjava.compile/Case.java 1280659122b ./libjava/testsuite/libjava.compile/comment.java 1877199736b ./libjava/testsuite/libjava.compile/compile.exp + 3242282126b ./libjava/testsuite/libjava.compile/final_assignment_check.java + 1927457704b ./libjava/testsuite/libjava.compile/final_assignment_check.xfail + 2489230363b ./libjava/testsuite/libjava.compile/final_initialization_in_ctor.java + 2700872724b ./libjava/testsuite/libjava.compile/final_local_switch.java 1402474633b ./libjava/testsuite/libjava.compile/G19990210_1.java 3600660956b ./libjava/testsuite/libjava.compile/G19990210_2.java 2466381413b ./libjava/testsuite/libjava.compile/G19990210_3.java *************** *** 8803,8810 **** --- 12973,12991 ---- 1408787751b ./libjava/testsuite/libjava.compile/PR295.java 1630321289b ./libjava/testsuite/libjava.compile/PR310.java 1927457704b ./libjava/testsuite/libjava.compile/PR310.xfail + 3891302784b ./libjava/testsuite/libjava.compile/PR3417.java + 1927457704b ./libjava/testsuite/libjava.compile/PR3417.xfail 1207363773b ./libjava/testsuite/libjava.compile/PR374.java 1864561249b ./libjava/testsuite/libjava.compile/PR375.java + 2378882884b ./libjava/testsuite/libjava.compile/PR4766.java + 277297044b ./libjava/testsuite/libjava.compile/PR5641.java + 2888415448b ./libjava/testsuite/libjava.compile/PR5641.xfail + 2775990221b ./libjava/testsuite/libjava.compile/PR5848.java + 2802394982b ./libjava/testsuite/libjava.compile/PR5848.xfail + 3877718833b ./libjava/testsuite/libjava.compile/PR5902.java + 3468040591b ./libjava/testsuite/libjava.compile/PR5913.java + 588631470b ./libjava/testsuite/libjava.compile/PR5913.xfail + 3689218637b ./libjava/testsuite/libjava.compile/PR6026.java 1123122376b ./libjava/testsuite/libjava.compile/redef1.java 1927457704b ./libjava/testsuite/libjava.compile/redef1.xfail 1933159159b ./libjava/testsuite/libjava.compile/redef2.java *************** *** 8842,8850 **** 2802394982b ./libjava/testsuite/libjava.compile/weirddecl.xfail 328754321b ./libjava/testsuite/libjava.compile/Where.java 20838332b ./libjava/testsuite/libjava.compile/Where.xfail ! 884913456b ./libjava/testsuite/libjava.jni/calls.c 570497497b ./libjava/testsuite/libjava.jni/calls.java 2319994314b ./libjava/testsuite/libjava.jni/calls.out 2542861742b ./libjava/testsuite/libjava.jni/final_method.c 744642976b ./libjava/testsuite/libjava.jni/final_method.java 4113024295b ./libjava/testsuite/libjava.jni/final_method.out --- 13023,13038 ---- 2802394982b ./libjava/testsuite/libjava.compile/weirddecl.xfail 328754321b ./libjava/testsuite/libjava.compile/Where.java 20838332b ./libjava/testsuite/libjava.compile/Where.xfail ! 4003272220b ./libjava/testsuite/libjava.compile/XercesBug.java ! 2406961399b ./libjava/testsuite/libjava.jni/calls.c 570497497b ./libjava/testsuite/libjava.jni/calls.java 2319994314b ./libjava/testsuite/libjava.jni/calls.out + 3258253370b ./libjava/testsuite/libjava.jni/cxxtest.cc + 3556355428b ./libjava/testsuite/libjava.jni/cxxtest.java + 1591540413b ./libjava/testsuite/libjava.jni/cxxtest.out + 3827106409b ./libjava/testsuite/libjava.jni/field.c + 2827280571b ./libjava/testsuite/libjava.jni/field.java + 1591540413b ./libjava/testsuite/libjava.jni/field.out 2542861742b ./libjava/testsuite/libjava.jni/final_method.c 744642976b ./libjava/testsuite/libjava.jni/final_method.java 4113024295b ./libjava/testsuite/libjava.jni/final_method.out *************** *** 8854,8859 **** --- 13042,13048 ---- 3064158603b ./libjava/testsuite/libjava.jni/invoke.c 259614484b ./libjava/testsuite/libjava.jni/invoke.java 2175620992b ./libjava/testsuite/libjava.jni/invoke.out + 2564626451b ./libjava/testsuite/libjava.jni/jni.exp 4181163842b ./libjava/testsuite/libjava.jni/martin.c 1311631215b ./libjava/testsuite/libjava.jni/martin.java 3887683434b ./libjava/testsuite/libjava.jni/martin.out *************** *** 8889,8908 **** 1685542540b ./libjava/testsuite/libjava.lang/anonarray3.out 1808791407b ./libjava/testsuite/libjava.lang/anonarray.java 2382672912b ./libjava/testsuite/libjava.lang/anonarray.out 4123776590b ./libjava/testsuite/libjava.lang/anon.java 2668540913b ./libjava/testsuite/libjava.lang/anon.out 861880957b ./libjava/testsuite/libjava.lang/Array_1.java 882278996b ./libjava/testsuite/libjava.lang/Array_1.out 1251637952b ./libjava/testsuite/libjava.lang/Array_2.java 684357305b ./libjava/testsuite/libjava.lang/Array_2.out 3857779796b ./libjava/testsuite/libjava.lang/Class_1.java 2350753667b ./libjava/testsuite/libjava.lang/Class_1.out 2546101232b ./libjava/testsuite/libjava.lang/direct_read.java 2764570783b ./libjava/testsuite/libjava.lang/direct_read.out 941796535b ./libjava/testsuite/libjava.lang/direct_write.java 975119945b ./libjava/testsuite/libjava.lang/direct_write.out ! 2880379059b ./libjava/testsuite/libjava.lang/Divide_1.java ! 559381141b ./libjava/testsuite/libjava.lang/Divide_1.out 215085604b ./libjava/testsuite/libjava.lang/err10.java 2283836352b ./libjava/testsuite/libjava.lang/err10.out 1346535668b ./libjava/testsuite/libjava.lang/err11.java --- 13078,13107 ---- 1685542540b ./libjava/testsuite/libjava.lang/anonarray3.out 1808791407b ./libjava/testsuite/libjava.lang/anonarray.java 2382672912b ./libjava/testsuite/libjava.lang/anonarray.out + 112674158b ./libjava/testsuite/libjava.lang/anon_ctor_itf_arg.java + 3114021423b ./libjava/testsuite/libjava.lang/anon_ctor_itf_arg.out 4123776590b ./libjava/testsuite/libjava.lang/anon.java 2668540913b ./libjava/testsuite/libjava.lang/anon.out 861880957b ./libjava/testsuite/libjava.lang/Array_1.java 882278996b ./libjava/testsuite/libjava.lang/Array_1.out 1251637952b ./libjava/testsuite/libjava.lang/Array_2.java 684357305b ./libjava/testsuite/libjava.lang/Array_2.out + 938556093b ./libjava/testsuite/libjava.lang/Array_3.java + 4294967295b ./libjava/testsuite/libjava.lang/Array_3.out + 4266220724b ./libjava/testsuite/libjava.lang/ArrayStore2.java + 2092431633b ./libjava/testsuite/libjava.lang/ArrayStore2.out + 4156356334b ./libjava/testsuite/libjava.lang/ArrayStore2.xfail + 2027810547b ./libjava/testsuite/libjava.lang/ArrayStore.java + 1436845427b ./libjava/testsuite/libjava.lang/ArrayStore.out + 300949552b ./libjava/testsuite/libjava.lang/ArrayStore.xfail 3857779796b ./libjava/testsuite/libjava.lang/Class_1.java 2350753667b ./libjava/testsuite/libjava.lang/Class_1.out 2546101232b ./libjava/testsuite/libjava.lang/direct_read.java 2764570783b ./libjava/testsuite/libjava.lang/direct_read.out 941796535b ./libjava/testsuite/libjava.lang/direct_write.java 975119945b ./libjava/testsuite/libjava.lang/direct_write.out ! 101283440b ./libjava/testsuite/libjava.lang/Divide_1.java ! 1217781165b ./libjava/testsuite/libjava.lang/Divide_1.out 215085604b ./libjava/testsuite/libjava.lang/err10.java 2283836352b ./libjava/testsuite/libjava.lang/err10.out 1346535668b ./libjava/testsuite/libjava.lang/err11.java *************** *** 8925,8936 **** 2283836352b ./libjava/testsuite/libjava.lang/err6.out 1873356782b ./libjava/testsuite/libjava.lang/err7.java 2283836352b ./libjava/testsuite/libjava.lang/err7.out - 563800791b ./libjava/testsuite/libjava.lang/err7.xfail 1622039882b ./libjava/testsuite/libjava.lang/err8.java 2283836352b ./libjava/testsuite/libjava.lang/err8.out - 563800791b ./libjava/testsuite/libjava.lang/err8.xfail 1031956187b ./libjava/testsuite/libjava.lang/err9.java 2283836352b ./libjava/testsuite/libjava.lang/err9.out 595443392b ./libjava/testsuite/libjava.lang/final_inner.java 269314928b ./libjava/testsuite/libjava.lang/final_inner.out 2193071619b ./libjava/testsuite/libjava.lang/final_int.java --- 13124,13135 ---- 2283836352b ./libjava/testsuite/libjava.lang/err6.out 1873356782b ./libjava/testsuite/libjava.lang/err7.java 2283836352b ./libjava/testsuite/libjava.lang/err7.out 1622039882b ./libjava/testsuite/libjava.lang/err8.java 2283836352b ./libjava/testsuite/libjava.lang/err8.out 1031956187b ./libjava/testsuite/libjava.lang/err9.java 2283836352b ./libjava/testsuite/libjava.lang/err9.out + 3723805515b ./libjava/testsuite/libjava.lang/FileHandleGcTest.java + 4294967295b ./libjava/testsuite/libjava.lang/FileHandleGcTest.out 595443392b ./libjava/testsuite/libjava.lang/final_inner.java 269314928b ./libjava/testsuite/libjava.lang/final_inner.out 2193071619b ./libjava/testsuite/libjava.lang/final_int.java *************** *** 8953,8958 **** --- 13152,13159 ---- 2163223985b ./libjava/testsuite/libjava.lang/G19990304_01.out 309057909b ./libjava/testsuite/libjava.lang/G19990310_01.java 3818873941b ./libjava/testsuite/libjava.lang/G19990310_01.out + 3927692588b ./libjava/testsuite/libjava.lang/II.java + 324202418b ./libjava/testsuite/libjava.lang/II.out 2525179149b ./libjava/testsuite/libjava.lang/indirect.java 904878278b ./libjava/testsuite/libjava.lang/indirect.out 2201837161b ./libjava/testsuite/libjava.lang/indirect_read.java *************** *** 8983,8991 **** --- 13184,13202 ---- 636088706b ./libjava/testsuite/libjava.lang/Invoke_1.out 482546829b ./libjava/testsuite/libjava.lang/Invoke_2.java 1406708247b ./libjava/testsuite/libjava.lang/Invoke_2.out + 4259046923b ./libjava/testsuite/libjava.lang/invoke_from_inner.java + 297330900b ./libjava/testsuite/libjava.lang/invoke_from_inner.out + 1233424497b ./libjava/testsuite/libjava.lang/InvokeReturn.java + 1505249822b ./libjava/testsuite/libjava.lang/InvokeReturn.out + 4188659518b ./libjava/testsuite/libjava.lang/invokethrow.java + 191230813b ./libjava/testsuite/libjava.lang/invokethrow.out + 897141912b ./libjava/testsuite/libjava.lang/KeepInline.java + 3068566825b ./libjava/testsuite/libjava.lang/KeepInline.out 1729910187b ./libjava/testsuite/libjava.lang/klass.java 1591540413b ./libjava/testsuite/libjava.lang/klass.out 2546673117b ./libjava/testsuite/libjava.lang/lang.exp + 1339868029b ./libjava/testsuite/libjava.lang/Matrix4f.java + 2870485448b ./libjava/testsuite/libjava.lang/Matrix4f.out 2891997855b ./libjava/testsuite/libjava.lang/multiple_finit.java 3652598231b ./libjava/testsuite/libjava.lang/multiple_finit.out 3824357332b ./libjava/testsuite/libjava.lang/N19990310_02.java *************** *** 8994,9002 **** 2283836352b ./libjava/testsuite/libjava.lang/N19990310_3.out 1646449121b ./libjava/testsuite/libjava.lang/N19990310_4.java 2283836352b ./libjava/testsuite/libjava.lang/N19990310_4.out - 190776755b ./libjava/testsuite/libjava.lang/N19990310_4.xfail 1522131980b ./libjava/testsuite/libjava.lang/N19990310_5.java 2283836352b ./libjava/testsuite/libjava.lang/N19990310_5.out 1199013303b ./libjava/testsuite/libjava.lang/nested_with_ctor.java 4279847335b ./libjava/testsuite/libjava.lang/nested_with_ctor.out 3956035919b ./libjava/testsuite/libjava.lang/pr100.java --- 13205,13214 ---- 2283836352b ./libjava/testsuite/libjava.lang/N19990310_3.out 1646449121b ./libjava/testsuite/libjava.lang/N19990310_4.java 2283836352b ./libjava/testsuite/libjava.lang/N19990310_4.out 1522131980b ./libjava/testsuite/libjava.lang/N19990310_5.java 2283836352b ./libjava/testsuite/libjava.lang/N19990310_5.out + 1347891809b ./libjava/testsuite/libjava.lang/negzero.java + 2849607288b ./libjava/testsuite/libjava.lang/negzero.out 1199013303b ./libjava/testsuite/libjava.lang/nested_with_ctor.java 4279847335b ./libjava/testsuite/libjava.lang/nested_with_ctor.out 3956035919b ./libjava/testsuite/libjava.lang/pr100.java *************** *** 9021,9026 **** --- 13233,13246 ---- 1147234566b ./libjava/testsuite/libjava.lang/PR242.out 526707998b ./libjava/testsuite/libjava.lang/PR260.java 3569591772b ./libjava/testsuite/libjava.lang/PR260.out + 14665884b ./libjava/testsuite/libjava.lang/PR3096.java + 2259565565b ./libjava/testsuite/libjava.lang/PR3096.out + 2985138501b ./libjava/testsuite/libjava.lang/PR3731.java + 3956933800b ./libjava/testsuite/libjava.lang/PR3731.out + 2570001649b ./libjava/testsuite/libjava.lang/PR5057_2.java + 742353047b ./libjava/testsuite/libjava.lang/PR5057_2.out + 2537530668b ./libjava/testsuite/libjava.lang/PR5057.java + 742353047b ./libjava/testsuite/libjava.lang/PR5057.out 1438756381b ./libjava/testsuite/libjava.lang/PR55.java 1201518198b ./libjava/testsuite/libjava.lang/PR55.out 1733338993b ./libjava/testsuite/libjava.lang/PR56.java *************** *** 9044,9061 **** 2835043487b ./libjava/testsuite/libjava.lang/stringconst2.out 1863083995b ./libjava/testsuite/libjava.lang/stringconst.java 2835043487b ./libjava/testsuite/libjava.lang/stringconst.out ! 190776755b ./libjava/testsuite/libjava.lang/stringconst.xfail 2261096902b ./libjava/testsuite/libjava.lang/stub.java 3886998802b ./libjava/testsuite/libjava.lang/stub.out - 739071436b ./libjava/testsuite/libjava.lang/stub.xfail 3629333030b ./libjava/testsuite/libjava.lang/Synch.java 497334114b ./libjava/testsuite/libjava.lang/Synch.out 1655763772b ./libjava/testsuite/libjava.lang/test_long.java 3533371317b ./libjava/testsuite/libjava.lang/test_long.out 523427206b ./libjava/testsuite/libjava.lang/Thread_Alive.java 3591103454b ./libjava/testsuite/libjava.lang/Thread_Alive.out 2443605665b ./libjava/testsuite/libjava.lang/Thread_Alive.xfail ! 2085039500b ./libjava/testsuite/libjava.lang/Thread_Interrupt.java 2320601405b ./libjava/testsuite/libjava.lang/Thread_Interrupt.out 2443605665b ./libjava/testsuite/libjava.lang/Thread_Interrupt.xfail 2682118636b ./libjava/testsuite/libjava.lang/Thread_Join.java --- 13264,13283 ---- 2835043487b ./libjava/testsuite/libjava.lang/stringconst2.out 1863083995b ./libjava/testsuite/libjava.lang/stringconst.java 2835043487b ./libjava/testsuite/libjava.lang/stringconst.out ! 4156356334b ./libjava/testsuite/libjava.lang/stringconst.xfail 2261096902b ./libjava/testsuite/libjava.lang/stub.java 3886998802b ./libjava/testsuite/libjava.lang/stub.out 3629333030b ./libjava/testsuite/libjava.lang/Synch.java 497334114b ./libjava/testsuite/libjava.lang/Synch.out + 2731334240b ./libjava/testsuite/libjava.lang/SyncTest.java + 636088706b ./libjava/testsuite/libjava.lang/SyncTest.out + 2443605665b ./libjava/testsuite/libjava.lang/SyncTest.xfail 1655763772b ./libjava/testsuite/libjava.lang/test_long.java 3533371317b ./libjava/testsuite/libjava.lang/test_long.out 523427206b ./libjava/testsuite/libjava.lang/Thread_Alive.java 3591103454b ./libjava/testsuite/libjava.lang/Thread_Alive.out 2443605665b ./libjava/testsuite/libjava.lang/Thread_Alive.xfail ! 1125974645b ./libjava/testsuite/libjava.lang/Thread_Interrupt.java 2320601405b ./libjava/testsuite/libjava.lang/Thread_Interrupt.out 2443605665b ./libjava/testsuite/libjava.lang/Thread_Interrupt.xfail 2682118636b ./libjava/testsuite/libjava.lang/Thread_Join.java *************** *** 9073,9083 **** 3412514508b ./libjava/testsuite/libjava.lang/Thread_Wait_Interrupt.java 3606244218b ./libjava/testsuite/libjava.lang/Thread_Wait_Interrupt.out 2443605665b ./libjava/testsuite/libjava.lang/Thread_Wait_Interrupt.xfail ! 1345063061b ./libjava/testsuite/libjava.lang/Thread_Wait.java 3866441409b ./libjava/testsuite/libjava.lang/Thread_Wait.out 2443605665b ./libjava/testsuite/libjava.lang/Thread_Wait.xfail 1046451808b ./libjava/testsuite/libjava.lang/Throw_1.java 4294967295b ./libjava/testsuite/libjava.lang/Throw_1.out 1531499305b ./libjava/testsuite/libjava.lang/tmi.java 1798035647b ./libjava/testsuite/libjava.lang/tmi.out 4123810669b ./libjava/testsuite/libjava.lang/tp.java --- 13295,13310 ---- 3412514508b ./libjava/testsuite/libjava.lang/Thread_Wait_Interrupt.java 3606244218b ./libjava/testsuite/libjava.lang/Thread_Wait_Interrupt.out 2443605665b ./libjava/testsuite/libjava.lang/Thread_Wait_Interrupt.xfail ! 3820325918b ./libjava/testsuite/libjava.lang/Thread_Wait.java 3866441409b ./libjava/testsuite/libjava.lang/Thread_Wait.out 2443605665b ./libjava/testsuite/libjava.lang/Thread_Wait.xfail 1046451808b ./libjava/testsuite/libjava.lang/Throw_1.java 4294967295b ./libjava/testsuite/libjava.lang/Throw_1.out + 1749384831b ./libjava/testsuite/libjava.lang/Throw_2.java + 4294967295b ./libjava/testsuite/libjava.lang/Throw_2.out + 1571608298b ./libjava/testsuite/libjava.lang/TLtest.java + 2677880801b ./libjava/testsuite/libjava.lang/TLtest.out + 2443605665b ./libjava/testsuite/libjava.lang/TLtest.xfail 1531499305b ./libjava/testsuite/libjava.lang/tmi.java 1798035647b ./libjava/testsuite/libjava.lang/tmi.out 4123810669b ./libjava/testsuite/libjava.lang/tp.java *************** *** 9085,9120 **** 3674020949b ./libjava/testsuite/libjava.lang/update_outer.java 1947112134b ./libjava/testsuite/libjava.lang/update_outer.out 4013205125b ./libjava/testsuite/libjava.mauve/DejaGNUTestHarness.java ! 1032868016b ./libjava/testsuite/libjava.mauve/mauve.exp ! 168151904b ./libjava/testsuite/libjava.mauve/xfails ! 147133276b ./libjava/testsuite/lib/libjava.exp 3806425466b ./libjava/testsuite/Makefile.am ! 1253427395b ./libjava/testsuite/Makefile.in ! 1242996640b ./libjava/THANKS ! 1531406287b ./libjava/win32-threads.cc ! 1907010449b ./libobjc/aclocal.m4 605856870b ./libobjc/archive.c ! 2004876812b ./libobjc/ChangeLog ! 3067716864b ./libobjc/class.c 1748737547b ./libobjc/config.h.in ! 1070305657b ./libobjc/configure ! 880190808b ./libobjc/configure.in ! 869425378b ./libobjc/encoding.c ! 2195769577b ./libobjc/gc.c 1761713542b ./libobjc/hash.c ! 454584474b ./libobjc/init.c 489398123b ./libobjc/libobjc.def 4072125181b ./libobjc/libobjc_entry.c 4260228535b ./libobjc/linking.m 2398517524b ./libobjc/makefile.dos ! 3802413505b ./libobjc/Makefile.in 687879051b ./libobjc/misc.c 1752870170b ./libobjc/nil_method.c 638422313b ./libobjc/NXConstStr.m 1692177559b ./libobjc/objc/encoding.h 597415090b ./libobjc/objc/hash.h 1937854528b ./libobjc/objc/NXConstStr.h ! 4211776544b ./libobjc/objc/objc-api.h 2946018502b ./libobjc/objc/objc.h 1569406371b ./libobjc/objc/objc-list.h 1680445531b ./libobjc/objc/Object.h --- 13312,13349 ---- 3674020949b ./libjava/testsuite/libjava.lang/update_outer.java 1947112134b ./libjava/testsuite/libjava.lang/update_outer.out 4013205125b ./libjava/testsuite/libjava.mauve/DejaGNUTestHarness.java ! 1740456441b ./libjava/testsuite/libjava.mauve/mauve.exp ! 2293687712b ./libjava/testsuite/libjava.mauve/xfails ! 3826628758b ./libjava/testsuite/lib/libjava.exp 3806425466b ./libjava/testsuite/Makefile.am ! 1096421437b ./libjava/testsuite/Makefile.in ! 3410290178b ./libjava/THANKS ! 3417667916b ./libjava/verify.cc ! 916359044b ./libjava/win32.cc ! 3459150705b ./libjava/win32-threads.cc ! 423229196b ./libobjc/aclocal.m4 605856870b ./libobjc/archive.c ! 1541143020b ./libobjc/ChangeLog ! 3477231866b ./libobjc/class.c 1748737547b ./libobjc/config.h.in ! 3567730840b ./libobjc/configure ! 420004746b ./libobjc/configure.in ! 506544385b ./libobjc/encoding.c ! 726164266b ./libobjc/gc.c 1761713542b ./libobjc/hash.c ! 1287123563b ./libobjc/init.c 489398123b ./libobjc/libobjc.def 4072125181b ./libobjc/libobjc_entry.c 4260228535b ./libobjc/linking.m 2398517524b ./libobjc/makefile.dos ! 1555626783b ./libobjc/Makefile.in 687879051b ./libobjc/misc.c 1752870170b ./libobjc/nil_method.c 638422313b ./libobjc/NXConstStr.m 1692177559b ./libobjc/objc/encoding.h 597415090b ./libobjc/objc/hash.h 1937854528b ./libobjc/objc/NXConstStr.h ! 1908906592b ./libobjc/objc/objc-api.h 2946018502b ./libobjc/objc/objc.h 1569406371b ./libobjc/objc/objc-list.h 1680445531b ./libobjc/objc/Object.h *************** *** 9131,9137 **** 1415022174b ./libobjc/sarray.c 791617547b ./libobjc/selector.c 3257296953b ./libobjc/sendmsg.c ! 1509327042b ./libobjc/thr.c 3414327023b ./libobjc/thr-dce.c 2193934747b ./libobjc/thr-decosf1.c 519687216b ./libobjc/THREADS --- 13360,13366 ---- 1415022174b ./libobjc/sarray.c 791617547b ./libobjc/selector.c 3257296953b ./libobjc/sendmsg.c ! 3239202263b ./libobjc/thr.c 3414327023b ./libobjc/thr-dce.c 2193934747b ./libobjc/thr-decosf1.c 519687216b ./libobjc/THREADS *************** *** 9147,9248 **** 60531382b ./libobjc/thr-solaris.c 2005277748b ./libobjc/thr-vxworks.c 2963027857b ./libobjc/thr-win32.c ! 1454978311b ./libstdc++-v3/acconfig.h ! 3308481966b ./libstdc++-v3/acinclude.m4 ! 3903424483b ./libstdc++-v3/aclocal.m4 ! 1090172234b ./libstdc++-v3/ChangeLog ! 4193951875b ./libstdc++-v3/ChangeLog-2000 ! 1453199454b ./libstdc++-v3/config/basic_file_libio.cc ! 440650960b ./libstdc++-v3/config/basic_file_libio.h ! 3327448769b ./libstdc++-v3/config/basic_file_stdio.cc ! 2359827032b ./libstdc++-v3/config/basic_file_stdio.h ! 714808428b ./libstdc++-v3/config/c_io_libio_codecvt.c ! 1954145125b ./libstdc++-v3/config/c_io_libio.h ! 3101771185b ./libstdc++-v3/config/c_io_stdio.h ! 2888714698b ./libstdc++-v3/config/c_locale_generic.cc ! 2082932498b ./libstdc++-v3/config/c_locale_generic.h ! 4025046173b ./libstdc++-v3/config/c_locale_gnu.cc ! 1637993962b ./libstdc++-v3/config/c_locale_gnu.h ! 2418599665b ./libstdc++-v3/config/cpu/alpha/bits/atomicity.h ! 337654572b ./libstdc++-v3/config/cpu/arm/bits/atomicity.h ! 4265367019b ./libstdc++-v3/config/cpu/generic/bits/atomicity.h 1670735336b ./libstdc++-v3/config/cpu/generic/bits/limits.h 2485610863b ./libstdc++-v3/config/cpu/i386/bits/atomicity.h ! 593957722b ./libstdc++-v3/config/cpu/i386/bits/limits.h ! 2887076979b ./libstdc++-v3/config/cpu/i486/bits/atomicity.h ! 3880622031b ./libstdc++-v3/config/cpu/ia64/bits/atomicity.h 3423219675b ./libstdc++-v3/config/cpu/m68k/bits/atomicity.h ! 2747806168b ./libstdc++-v3/config/cpu/mips/bits/atomicity.h ! 632361011b ./libstdc++-v3/config/cpu/powerpc/bits/atomicity.h ! 2029688870b ./libstdc++-v3/config/cpu/powerpc/bits/limits.h 3930061484b ./libstdc++-v3/config/cpu/s390/bits/atomicity.h ! 3320429858b ./libstdc++-v3/config/cpu/sparc/sparc32/bits/atomicity.h ! 2358797811b ./libstdc++-v3/config/cpu/sparc/sparc64/bits/atomicity.h ! 2886240118b ./libstdc++-v3/config.h.in 4256387970b ./libstdc++-v3/config/os/aix/bits/atomicity.h 2669974896b ./libstdc++-v3/config/os/aix/bits/ctype_base.h 3165823414b ./libstdc++-v3/config/os/aix/bits/ctype_inline.h ! 2776462375b ./libstdc++-v3/config/os/aix/bits/ctype_noninline.h ! 2686194341b ./libstdc++-v3/config/os/aix/bits/os_defines.h 537966674b ./libstdc++-v3/config/os/bsd/freebsd/bits/ctype_base.h 2331573625b ./libstdc++-v3/config/os/bsd/freebsd/bits/ctype_inline.h ! 3790282654b ./libstdc++-v3/config/os/bsd/freebsd/bits/ctype_noninline.h ! 3312706942b ./libstdc++-v3/config/os/bsd/freebsd/bits/os_defines.h 1041874990b ./libstdc++-v3/config/os/bsd/netbsd/bits/ctype_base.h 361863904b ./libstdc++-v3/config/os/bsd/netbsd/bits/ctype_inline.h ! 3688142615b ./libstdc++-v3/config/os/bsd/netbsd/bits/ctype_noninline.h ! 1641643895b ./libstdc++-v3/config/os/bsd/netbsd/bits/os_defines.h 3950885908b ./libstdc++-v3/config/os/djgpp/bits/ctype_base.h 4050668400b ./libstdc++-v3/config/os/djgpp/bits/ctype_inline.h ! 1631125897b ./libstdc++-v3/config/os/djgpp/bits/ctype_noninline.h ! 1803886928b ./libstdc++-v3/config/os/djgpp/bits/os_defines.h ! 297286676b ./libstdc++-v3/config/os/generic/bits/ctype_base.h ! 3751997700b ./libstdc++-v3/config/os/generic/bits/ctype_inline.h ! 1959980985b ./libstdc++-v3/config/os/generic/bits/ctype_noninline.h ! 242441459b ./libstdc++-v3/config/os/generic/bits/os_defines.h ! 1667394230b ./libstdc++-v3/config/os/gnu-linux/bits/ctype_base.h ! 172209115b ./libstdc++-v3/config/os/gnu-linux/bits/ctype_inline.h ! 2769914139b ./libstdc++-v3/config/os/gnu-linux/bits/ctype_noninline.h ! 2655214212b ./libstdc++-v3/config/os/gnu-linux/bits/os_defines.h ! 2680166297b ./libstdc++-v3/config/os/hpux/bits/ctype_base.h 521899911b ./libstdc++-v3/config/os/hpux/bits/ctype_inline.h ! 1959980985b ./libstdc++-v3/config/os/hpux/bits/ctype_noninline.h ! 2177574233b ./libstdc++-v3/config/os/hpux/bits/os_defines.h 805235121b ./libstdc++-v3/config/os/irix/irix5.2/bits/atomicity.h 734403019b ./libstdc++-v3/config/os/irix/irix5.2/bits/ctype_base.h 3968534641b ./libstdc++-v3/config/os/irix/irix5.2/bits/ctype_inline.h ! 103012525b ./libstdc++-v3/config/os/irix/irix5.2/bits/ctype_noninline.h ! 1013515659b ./libstdc++-v3/config/os/irix/irix5.2/bits/os_defines.h 1437354439b ./libstdc++-v3/config/os/irix/irix6.5/bits/atomicity.h 1682275129b ./libstdc++-v3/config/os/irix/irix6.5/bits/ctype_base.h ! 363484342b ./libstdc++-v3/config/os/irix/irix6.5/bits/ctype_inline.h ! 257232326b ./libstdc++-v3/config/os/irix/irix6.5/bits/ctype_noninline.h ! 3096266225b ./libstdc++-v3/config/os/irix/irix6.5/bits/os_defines.h 1435551091b ./libstdc++-v3/config/os/newlib/bits/ctype_base.h 3131508399b ./libstdc++-v3/config/os/newlib/bits/ctype_inline.h ! 456723072b ./libstdc++-v3/config/os/newlib/bits/ctype_noninline.h ! 3288084564b ./libstdc++-v3/config/os/newlib/bits/os_defines.h 922066072b ./libstdc++-v3/config/os/solaris/solaris2.5/bits/ctype_base.h ! 808758490b ./libstdc++-v3/config/os/solaris/solaris2.5/bits/ctype_inline.h ! 70416953b ./libstdc++-v3/config/os/solaris/solaris2.5/bits/ctype_noninline.h ! 1066067601b ./libstdc++-v3/config/os/solaris/solaris2.5/bits/os_defines.h 1305011444b ./libstdc++-v3/config/os/solaris/solaris2.6/bits/ctype_base.h ! 2079684144b ./libstdc++-v3/config/os/solaris/solaris2.6/bits/ctype_inline.h ! 2149038889b ./libstdc++-v3/config/os/solaris/solaris2.6/bits/ctype_noninline.h ! 164362252b ./libstdc++-v3/config/os/solaris/solaris2.6/bits/os_defines.h 2023078243b ./libstdc++-v3/config/os/solaris/solaris2.7/bits/ctype_base.h ! 3980190828b ./libstdc++-v3/config/os/solaris/solaris2.7/bits/ctype_inline.h ! 1735304697b ./libstdc++-v3/config/os/solaris/solaris2.7/bits/ctype_noninline.h ! 186536916b ./libstdc++-v3/config/os/solaris/solaris2.7/bits/os_defines.h ! 1901503332b ./libstdc++-v3/configure 3116040814b ./libstdc++-v3/configure.host ! 502813057b ./libstdc++-v3/configure.in ! 1480290219b ./libstdc++-v3/configure.target ! 4163616924b ./libstdc++-v3/docs/doxygen/mainpage.doxy ! 225771389b ./libstdc++-v3/docs/doxygen/maint.cfg.in ! 2208204477b ./libstdc++-v3/docs/doxygen/run_doxygen ! 863086283b ./libstdc++-v3/docs/doxygen/style.css ! 404838806b ./libstdc++-v3/docs/doxygen/user.cfg.in 4001239912b ./libstdc++-v3/docs/html/17_intro/BADNAMES 985890621b ./libstdc++-v3/docs/html/17_intro/BUGS 2881598729b ./libstdc++-v3/docs/html/17_intro/CHECKLIST --- 13376,13520 ---- 60531382b ./libobjc/thr-solaris.c 2005277748b ./libobjc/thr-vxworks.c 2963027857b ./libobjc/thr-win32.c ! 1220048278b ./libstdc++-v3/acconfig.h ! 1666857394b ./libstdc++-v3/acinclude.m4 ! 3334413456b ./libstdc++-v3/aclocal.m4 ! 3023832819b ./libstdc++-v3/ChangeLog ! 1996982572b ./libstdc++-v3/ChangeLog-2000 ! 3665233589b ./libstdc++-v3/ChangeLog-2001 ! 3799164404b ./libstdc++-v3/config/cpu/alpha/bits/atomicity.h ! 2657854614b ./libstdc++-v3/config/cpu/alpha/bits/cpu_limits.h ! 2453414067b ./libstdc++-v3/config/cpu/arm/bits/atomicity.h ! 1636456412b ./libstdc++-v3/config/cpu/cris/bits/atomicity.h ! 2029688870b ./libstdc++-v3/config/cpu/cris/bits/cpu_limits.h ! 3812954815b ./libstdc++-v3/config/cpu/generic/bits/atomicity.h ! 1315378737b ./libstdc++-v3/config/cpu/generic/bits/cpu_limits.h 1670735336b ./libstdc++-v3/config/cpu/generic/bits/limits.h 2485610863b ./libstdc++-v3/config/cpu/i386/bits/atomicity.h ! 593957722b ./libstdc++-v3/config/cpu/i386/bits/cpu_limits.h ! 623210587b ./libstdc++-v3/config/cpu/i486/bits/atomicity.h ! 193432505b ./libstdc++-v3/config/cpu/ia64/bits/atomicity.h ! 1770651251b ./libstdc++-v3/config/cpu/ia64/bits/cpu_limits.h 3423219675b ./libstdc++-v3/config/cpu/m68k/bits/atomicity.h ! 3967527574b ./libstdc++-v3/config/cpu/m68k/bits/cpu_limits.h ! 1806424498b ./libstdc++-v3/config/cpu/mips/bits/atomicity.h ! 736712600b ./libstdc++-v3/config/cpu/mmix/bits/cpu_limits.h ! 1062517327b ./libstdc++-v3/config/cpu/powerpc/bits/atomicity.h ! 1958944292b ./libstdc++-v3/config/cpu/powerpc/bits/cpu_limits.h 3930061484b ./libstdc++-v3/config/cpu/s390/bits/atomicity.h ! 2029688870b ./libstdc++-v3/config/cpu/s390/bits/cpu_limits.h ! 3637219689b ./libstdc++-v3/config/cpu/sparc/sparc32/bits/atomicity.h ! 1609193065b ./libstdc++-v3/config/cpu/sparc/sparc64/bits/atomicity.h ! 785222978b ./libstdc++-v3/config/cpu/x86-64/bits/atomicity.h ! 4180289496b ./libstdc++-v3/config/cpu/x86-64/bits/cpu_limits.h ! 4083508390b ./libstdc++-v3/config.h.in ! 1453199454b ./libstdc++-v3/config/io/basic_file_libio.cc ! 3157152478b ./libstdc++-v3/config/io/basic_file_libio.h ! 3725479456b ./libstdc++-v3/config/io/basic_file_stdio.cc ! 2615133940b ./libstdc++-v3/config/io/basic_file_stdio.h ! 714808428b ./libstdc++-v3/config/io/c_io_libio_codecvt.c ! 1754405198b ./libstdc++-v3/config/io/c_io_libio.h ! 3948747720b ./libstdc++-v3/config/io/c_io_stdio.h ! 1615839786b ./libstdc++-v3/config/linker-map.dummy ! 1079592523b ./libstdc++-v3/config/linker-map.gnu ! 1976229158b ./libstdc++-v3/config/locale/generic/c_locale.cc ! 785097262b ./libstdc++-v3/config/locale/generic/c_locale.h ! 2005861251b ./libstdc++-v3/config/locale/generic/codecvt_specializations.h ! 4228611347b ./libstdc++-v3/config/locale/generic/collate_members.cc ! 2230383066b ./libstdc++-v3/config/locale/generic/ctype_members.cc ! 3466940416b ./libstdc++-v3/config/locale/generic/messages_members.cc ! 2682213266b ./libstdc++-v3/config/locale/generic/messages_members.h ! 1672865747b ./libstdc++-v3/config/locale/generic/monetary_members.cc ! 650933917b ./libstdc++-v3/config/locale/generic/numeric_members.cc ! 2207293776b ./libstdc++-v3/config/locale/generic/time_members.cc ! 781005318b ./libstdc++-v3/config/locale/gnu/c_locale.cc ! 2998667708b ./libstdc++-v3/config/locale/gnu/c_locale.h ! 3774435712b ./libstdc++-v3/config/locale/gnu/collate_members.cc ! 3199191340b ./libstdc++-v3/config/locale/gnu/ctype_members.cc ! 1116649335b ./libstdc++-v3/config/locale/gnu/messages_members.cc ! 1560788565b ./libstdc++-v3/config/locale/gnu/messages_members.h ! 3506365458b ./libstdc++-v3/config/locale/gnu/monetary_members.cc ! 4180020740b ./libstdc++-v3/config/locale/gnu/numeric_members.cc ! 4055399754b ./libstdc++-v3/config/locale/gnu/time_members.cc ! 3232379868b ./libstdc++-v3/config/locale/ieee_1003.1-2001/c_locale.cc ! 3136594064b ./libstdc++-v3/config/locale/ieee_1003.1-2001/c_locale.h ! 379849651b ./libstdc++-v3/config/locale/ieee_1003.1-2001/codecvt_specializations.h ! 3490831019b ./libstdc++-v3/config/locale/ieee_1003.1-2001/messages_members.cc ! 488667815b ./libstdc++-v3/config/locale/ieee_1003.1-2001/messages_members.h 4256387970b ./libstdc++-v3/config/os/aix/bits/atomicity.h 2669974896b ./libstdc++-v3/config/os/aix/bits/ctype_base.h 3165823414b ./libstdc++-v3/config/os/aix/bits/ctype_inline.h ! 812293069b ./libstdc++-v3/config/os/aix/bits/ctype_noninline.h ! 1501649315b ./libstdc++-v3/config/os/aix/bits/os_defines.h 537966674b ./libstdc++-v3/config/os/bsd/freebsd/bits/ctype_base.h 2331573625b ./libstdc++-v3/config/os/bsd/freebsd/bits/ctype_inline.h ! 1778189959b ./libstdc++-v3/config/os/bsd/freebsd/bits/ctype_noninline.h ! 4188452209b ./libstdc++-v3/config/os/bsd/freebsd/bits/os_defines.h 1041874990b ./libstdc++-v3/config/os/bsd/netbsd/bits/ctype_base.h 361863904b ./libstdc++-v3/config/os/bsd/netbsd/bits/ctype_inline.h ! 3997726502b ./libstdc++-v3/config/os/bsd/netbsd/bits/ctype_noninline.h ! 1602795831b ./libstdc++-v3/config/os/bsd/netbsd/bits/os_defines.h 3950885908b ./libstdc++-v3/config/os/djgpp/bits/ctype_base.h 4050668400b ./libstdc++-v3/config/os/djgpp/bits/ctype_inline.h ! 2200168434b ./libstdc++-v3/config/os/djgpp/bits/ctype_noninline.h ! 1128798661b ./libstdc++-v3/config/os/djgpp/bits/os_defines.h ! 1770894154b ./libstdc++-v3/config/os/generic/bits/ctype_base.h ! 913781161b ./libstdc++-v3/config/os/generic/bits/ctype_inline.h ! 3462804290b ./libstdc++-v3/config/os/generic/bits/ctype_noninline.h ! 2662031339b ./libstdc++-v3/config/os/generic/bits/os_defines.h ! 1728709835b ./libstdc++-v3/config/os/gnu-linux/bits/ctype_base.h ! 577770049b ./libstdc++-v3/config/os/gnu-linux/bits/ctype_inline.h ! 2657263605b ./libstdc++-v3/config/os/gnu-linux/bits/ctype_noninline.h ! 1840948493b ./libstdc++-v3/config/os/gnu-linux/bits/os_defines.h ! 1503897878b ./libstdc++-v3/config/os/hpux/bits/cpu_limits.h ! 2727448261b ./libstdc++-v3/config/os/hpux/bits/ctype_base.h 521899911b ./libstdc++-v3/config/os/hpux/bits/ctype_inline.h ! 1287488501b ./libstdc++-v3/config/os/hpux/bits/ctype_noninline.h ! 4256303940b ./libstdc++-v3/config/os/hpux/bits/os_defines.h 805235121b ./libstdc++-v3/config/os/irix/irix5.2/bits/atomicity.h 734403019b ./libstdc++-v3/config/os/irix/irix5.2/bits/ctype_base.h 3968534641b ./libstdc++-v3/config/os/irix/irix5.2/bits/ctype_inline.h ! 4099896350b ./libstdc++-v3/config/os/irix/irix5.2/bits/ctype_noninline.h ! 756859930b ./libstdc++-v3/config/os/irix/irix5.2/bits/os_defines.h 1437354439b ./libstdc++-v3/config/os/irix/irix6.5/bits/atomicity.h 1682275129b ./libstdc++-v3/config/os/irix/irix6.5/bits/ctype_base.h ! 1430479845b ./libstdc++-v3/config/os/irix/irix6.5/bits/ctype_inline.h ! 1925322031b ./libstdc++-v3/config/os/irix/irix6.5/bits/ctype_noninline.h ! 4040974915b ./libstdc++-v3/config/os/irix/irix6.5/bits/os_defines.h ! 2513027003b ./libstdc++-v3/config/os/mingw32/bits/ctype_base.h ! 2249364639b ./libstdc++-v3/config/os/mingw32/bits/ctype_inline.h ! 4236896349b ./libstdc++-v3/config/os/mingw32/bits/ctype_noninline.h ! 3217385665b ./libstdc++-v3/config/os/mingw32/bits/os_defines.h 1435551091b ./libstdc++-v3/config/os/newlib/bits/ctype_base.h 3131508399b ./libstdc++-v3/config/os/newlib/bits/ctype_inline.h ! 780060341b ./libstdc++-v3/config/os/newlib/bits/ctype_noninline.h ! 1247228618b ./libstdc++-v3/config/os/newlib/bits/os_defines.h ! 269230749b ./libstdc++-v3/config/os/osf/osf5.0/bits/cpu_limits.h 922066072b ./libstdc++-v3/config/os/solaris/solaris2.5/bits/ctype_base.h ! 967249986b ./libstdc++-v3/config/os/solaris/solaris2.5/bits/ctype_inline.h ! 3091024214b ./libstdc++-v3/config/os/solaris/solaris2.5/bits/ctype_noninline.h ! 3371220486b ./libstdc++-v3/config/os/solaris/solaris2.5/bits/os_defines.h 1305011444b ./libstdc++-v3/config/os/solaris/solaris2.6/bits/ctype_base.h ! 404061893b ./libstdc++-v3/config/os/solaris/solaris2.6/bits/ctype_inline.h ! 519682606b ./libstdc++-v3/config/os/solaris/solaris2.6/bits/ctype_noninline.h ! 2818399007b ./libstdc++-v3/config/os/solaris/solaris2.6/bits/os_defines.h 2023078243b ./libstdc++-v3/config/os/solaris/solaris2.7/bits/ctype_base.h ! 577770049b ./libstdc++-v3/config/os/solaris/solaris2.7/bits/ctype_inline.h ! 399834321b ./libstdc++-v3/config/os/solaris/solaris2.7/bits/ctype_noninline.h ! 2955649134b ./libstdc++-v3/config/os/solaris/solaris2.7/bits/os_defines.h ! 3684429838b ./libstdc++-v3/configure 3116040814b ./libstdc++-v3/configure.host ! 3512024163b ./libstdc++-v3/configure.in ! 1278773789b ./libstdc++-v3/configure.target ! 1779001880b ./libstdc++-v3/docs/doxygen/doxygroups.cc ! 1637481960b ./libstdc++-v3/docs/doxygen/Intro.3 ! 748681152b ./libstdc++-v3/docs/doxygen/mainpage.html ! 2057897016b ./libstdc++-v3/docs/doxygen/run_doxygen ! 668865588b ./libstdc++-v3/docs/doxygen/stdheader.cc ! 2931788874b ./libstdc++-v3/docs/doxygen/style.css ! 2236727365b ./libstdc++-v3/docs/doxygen/tables.html ! 2456116652b ./libstdc++-v3/docs/doxygen/TODO ! 3036638466b ./libstdc++-v3/docs/doxygen/user.cfg.in 4001239912b ./libstdc++-v3/docs/html/17_intro/BADNAMES 985890621b ./libstdc++-v3/docs/html/17_intro/BUGS 2881598729b ./libstdc++-v3/docs/html/17_intro/CHECKLIST *************** *** 9254,9273 **** 3222542515b ./libstdc++-v3/docs/html/17_intro/DESIGN 1363011462b ./libstdc++-v3/docs/html/17_intro/HEADER_POLICY 3461116413b ./libstdc++-v3/docs/html/17_intro/headers_cc.txt ! 2379403154b ./libstdc++-v3/docs/html/17_intro/howto.html 3565645043b ./libstdc++-v3/docs/html/17_intro/libstdc++-assign.txt 2208482093b ./libstdc++-v3/docs/html/17_intro/license.html 982764901b ./libstdc++-v3/docs/html/17_intro/organization ! 4058128368b ./libstdc++-v3/docs/html/17_intro/porting-howto.html ! 424990165b ./libstdc++-v3/docs/html/17_intro/porting-howto.xml 2455364651b ./libstdc++-v3/docs/html/17_intro/porting.html 127841094b ./libstdc++-v3/docs/html/17_intro/porting.texi 12001592b ./libstdc++-v3/docs/html/17_intro/PROBLEMS ! 698966724b ./libstdc++-v3/docs/html/17_intro/RELEASE-NOTES ! 3997667910b ./libstdc++-v3/docs/html/17_intro/TODO ! 3329218498b ./libstdc++-v3/docs/html/18_support/howto.html ! 2268070041b ./libstdc++-v3/docs/html/19_diagnostics/howto.html ! 2248597755b ./libstdc++-v3/docs/html/20_util/howto.html 2326263830b ./libstdc++-v3/docs/html/21_strings/gotw29a.txt 933711313b ./libstdc++-v3/docs/html/21_strings/howto.html 3590781787b ./libstdc++-v3/docs/html/21_strings/stringtok_h.txt --- 13526,13545 ---- 3222542515b ./libstdc++-v3/docs/html/17_intro/DESIGN 1363011462b ./libstdc++-v3/docs/html/17_intro/HEADER_POLICY 3461116413b ./libstdc++-v3/docs/html/17_intro/headers_cc.txt ! 2624515000b ./libstdc++-v3/docs/html/17_intro/howto.html 3565645043b ./libstdc++-v3/docs/html/17_intro/libstdc++-assign.txt 2208482093b ./libstdc++-v3/docs/html/17_intro/license.html 982764901b ./libstdc++-v3/docs/html/17_intro/organization ! 1322295551b ./libstdc++-v3/docs/html/17_intro/porting-howto.html ! 405521978b ./libstdc++-v3/docs/html/17_intro/porting-howto.xml 2455364651b ./libstdc++-v3/docs/html/17_intro/porting.html 127841094b ./libstdc++-v3/docs/html/17_intro/porting.texi 12001592b ./libstdc++-v3/docs/html/17_intro/PROBLEMS ! 487221562b ./libstdc++-v3/docs/html/17_intro/RELEASE-NOTES ! 1553498574b ./libstdc++-v3/docs/html/17_intro/TODO ! 2234420344b ./libstdc++-v3/docs/html/18_support/howto.html ! 1891872084b ./libstdc++-v3/docs/html/19_diagnostics/howto.html ! 797227370b ./libstdc++-v3/docs/html/20_util/howto.html 2326263830b ./libstdc++-v3/docs/html/21_strings/gotw29a.txt 933711313b ./libstdc++-v3/docs/html/21_strings/howto.html 3590781787b ./libstdc++-v3/docs/html/21_strings/stringtok_h.txt *************** *** 9276,9455 **** 2826225921b ./libstdc++-v3/docs/html/22_locale/ctype.html 1554570816b ./libstdc++-v3/docs/html/22_locale/howto.html 60951948b ./libstdc++-v3/docs/html/22_locale/locale.html ! 2961292476b ./libstdc++-v3/docs/html/22_locale/messages.html ! 2056976870b ./libstdc++-v3/docs/html/23_containers/howto.html 3458392326b ./libstdc++-v3/docs/html/23_containers/wrappers_h.txt 403270116b ./libstdc++-v3/docs/html/24_iterators/howto.html 2968708740b ./libstdc++-v3/docs/html/25_algorithms/howto.html 2926171563b ./libstdc++-v3/docs/html/26_numerics/howto.html 2452165260b ./libstdc++-v3/docs/html/27_io/binary_iostreams_kanze.txt 3249620502b ./libstdc++-v3/docs/html/27_io/binary_iostreams_kuehl.txt ! 2949880033b ./libstdc++-v3/docs/html/27_io/howto.html ! 1903336430b ./libstdc++-v3/docs/html/configopts.html ! 2546324033b ./libstdc++-v3/docs/html/documentation.html 3529196048b ./libstdc++-v3/docs/html/explanations.html ! 1226112276b ./libstdc++-v3/docs/html/ext/howto.html 3141721309b ./libstdc++-v3/docs/html/ext/lwg-active.html 3531115263b ./libstdc++-v3/docs/html/ext/lwg-defects.html ! 3111249657b ./libstdc++-v3/docs/html/ext/sgiexts.html ! 2202036139b ./libstdc++-v3/docs/html/faq/index.html ! 2188256919b ./libstdc++-v3/docs/html/faq/index.txt ! 3510747379b ./libstdc++-v3/docs/html/install.html 2049389478b ./libstdc++-v3/docs/html/lib3styles.css ! 3129179057b ./libstdc++-v3/docs/html/Makefile ! 3952415343b ./libstdc++-v3/include/backward/algobase.h ! 3124086694b ./libstdc++-v3/include/backward/algo.h ! 3083859890b ./libstdc++-v3/include/backward/alloc.h ! 3605066841b ./libstdc++-v3/include/backward/backward_warning.h ! 1443940237b ./libstdc++-v3/include/backward/bvector.h ! 3947901111b ./libstdc++-v3/include/backward/complex.h 397779689b ./libstdc++-v3/include/backward/defalloc.h ! 2793317910b ./libstdc++-v3/include/backward/deque.h ! 2323541526b ./libstdc++-v3/include/backward/fstream.h ! 678000316b ./libstdc++-v3/include/backward/function.h ! 1302395673b ./libstdc++-v3/include/backward/hash_map.h ! 2957554616b ./libstdc++-v3/include/backward/hash_set.h ! 1416592786b ./libstdc++-v3/include/backward/hashtable.h 3255441651b ./libstdc++-v3/include/backward/heap.h ! 2989618329b ./libstdc++-v3/include/backward/iomanip.h ! 1747716150b ./libstdc++-v3/include/backward/iostream.h 1766778751b ./libstdc++-v3/include/backward/istream.h ! 2552098315b ./libstdc++-v3/include/backward/iterator.h ! 475724936b ./libstdc++-v3/include/backward/list.h ! 2239784128b ./libstdc++-v3/include/backward/map.h ! 331224518b ./libstdc++-v3/include/backward/multimap.h ! 157058158b ./libstdc++-v3/include/backward/multiset.h 1959434229b ./libstdc++-v3/include/backward/new.h 3127480935b ./libstdc++-v3/include/backward/ostream.h 1702071145b ./libstdc++-v3/include/backward/pair.h ! 800595743b ./libstdc++-v3/include/backward/queue.h ! 1028905566b ./libstdc++-v3/include/backward/rope.h ! 1647731658b ./libstdc++-v3/include/backward/set.h ! 3815267460b ./libstdc++-v3/include/backward/slist.h ! 1493269043b ./libstdc++-v3/include/backward/stack.h ! 3194664680b ./libstdc++-v3/include/backward/streambuf.h 2367779603b ./libstdc++-v3/include/backward/stream.h ! 3842161536b ./libstdc++-v3/include/backward/strstream 3139222786b ./libstdc++-v3/include/backward/strstream.h ! 65721256b ./libstdc++-v3/include/backward/tempbuf.h ! 418149387b ./libstdc++-v3/include/backward/tree.h ! 3110792059b ./libstdc++-v3/include/backward/vector.h ! 4248267406b ./libstdc++-v3/include/bits/basic_file.h ! 2964830866b ./libstdc++-v3/include/bits/basic_ios.h ! 2254012334b ./libstdc++-v3/include/bits/basic_ios.tcc ! 2082508960b ./libstdc++-v3/include/bits/basic_string.h ! 1457427451b ./libstdc++-v3/include/bits/basic_string.tcc ! 683603772b ./libstdc++-v3/include/bits/boost_concept_check.h ! 480739133b ./libstdc++-v3/include/bits/c++config ! 2314692779b ./libstdc++-v3/include/bits/char_traits.h ! 2805936695b ./libstdc++-v3/include/bits/codecvt.h ! 4120003531b ./libstdc++-v3/include/bits/concept_check.h ! 4222967943b ./libstdc++-v3/include/bits/concept_checks.h ! 3638262457b ./libstdc++-v3/include/bits/container_concepts.h ! 783599862b ./libstdc++-v3/include/bits/cpp_type_traits.h ! 1601132351b ./libstdc++-v3/include/bits/fpos.h ! 3545962146b ./libstdc++-v3/include/bits/fstream.tcc 3886600201b ./libstdc++-v3/include/bits/functexcept.h ! 3431103117b ./libstdc++-v3/include/bits/generic_shadow.h ! 2680318333b ./libstdc++-v3/include/bits/gslice_array.h ! 704022289b ./libstdc++-v3/include/bits/gslice.h ! 3437988551b ./libstdc++-v3/include/bits/indirect_array.h ! 354751699b ./libstdc++-v3/include/bits/ios_base.h ! 2213504588b ./libstdc++-v3/include/bits/istream.tcc ! 2076404966b ./libstdc++-v3/include/bits/limits_generic.h ! 774313285b ./libstdc++-v3/include/bits/locale_facets.h ! 4019781243b ./libstdc++-v3/include/bits/locale_facets.tcc ! 1654371752b ./libstdc++-v3/include/bits/localefwd.h ! 1773064307b ./libstdc++-v3/include/bits/mask_array.h ! 989950016b ./libstdc++-v3/include/bits/ostream.tcc ! 1424261561b ./libstdc++-v3/include/bits/pthread_allocimpl.h ! 3133412073b ./libstdc++-v3/include/bits/sbuf_iter.h ! 4271226930b ./libstdc++-v3/include/bits/sequence_concepts.h ! 2371332296b ./libstdc++-v3/include/bits/slice_array.h ! 3998840520b ./libstdc++-v3/include/bits/slice.h ! 3436409662b ./libstdc++-v3/include/bits/sstream.tcc ! 289136488b ./libstdc++-v3/include/bits/std_algorithm.h ! 2190102835b ./libstdc++-v3/include/bits/std_bitset.h ! 4200624366b ./libstdc++-v3/include/bits/std_complex.h ! 2026387708b ./libstdc++-v3/include/bits/std_deque.h ! 1480548940b ./libstdc++-v3/include/bits/std_fstream.h ! 909850763b ./libstdc++-v3/include/bits/std_functional.h ! 3352468770b ./libstdc++-v3/include/bits/std_iomanip.h ! 1205323902b ./libstdc++-v3/include/bits/std_iosfwd.h ! 488282993b ./libstdc++-v3/include/bits/std_ios.h ! 2709925409b ./libstdc++-v3/include/bits/std_iostream.h ! 570267107b ./libstdc++-v3/include/bits/std_istream.h ! 2834882043b ./libstdc++-v3/include/bits/std_iterator.h ! 3099065606b ./libstdc++-v3/include/bits/std_limits.h ! 2877785888b ./libstdc++-v3/include/bits/std_list.h ! 3961142338b ./libstdc++-v3/include/bits/std_locale.h ! 201090893b ./libstdc++-v3/include/bits/std_map.h ! 1460768210b ./libstdc++-v3/include/bits/std_memory.h ! 2302451537b ./libstdc++-v3/include/bits/std_numeric.h ! 2285426606b ./libstdc++-v3/include/bits/std_ostream.h ! 3179131913b ./libstdc++-v3/include/bits/std_queue.h ! 3133393677b ./libstdc++-v3/include/bits/std_set.h ! 1371200050b ./libstdc++-v3/include/bits/std_sstream.h ! 3598384035b ./libstdc++-v3/include/bits/std_stack.h ! 2264027066b ./libstdc++-v3/include/bits/std_stdexcept.h ! 4010253753b ./libstdc++-v3/include/bits/std_streambuf.h ! 1317538322b ./libstdc++-v3/include/bits/std_string.h ! 2339103859b ./libstdc++-v3/include/bits/std_utility.h ! 3199914954b ./libstdc++-v3/include/bits/std_valarray.h ! 258120529b ./libstdc++-v3/include/bits/std_vector.h ! 3737848625b ./libstdc++-v3/include/bits/stl_algobase.h ! 1915896541b ./libstdc++-v3/include/bits/stl_algo.h ! 1733002409b ./libstdc++-v3/include/bits/stl_alloc.h ! 1901902183b ./libstdc++-v3/include/bits/stl_bvector.h ! 2179796154b ./libstdc++-v3/include/bits/stl_config.h ! 2878454282b ./libstdc++-v3/include/bits/stl_construct.h ! 900906786b ./libstdc++-v3/include/bits/stl_deque.h ! 1616976213b ./libstdc++-v3/include/bits/stl_function.h ! 3262343598b ./libstdc++-v3/include/bits/stl_heap.h ! 3659610962b ./libstdc++-v3/include/bits/stl_iterator_base_funcs.h ! 181127396b ./libstdc++-v3/include/bits/stl_iterator_base.h ! 3251128673b ./libstdc++-v3/include/bits/stl_iterator_base_types.h ! 38213228b ./libstdc++-v3/include/bits/stl_iterator.h ! 1963814561b ./libstdc++-v3/include/bits/stl_list.h ! 3450924006b ./libstdc++-v3/include/bits/stl_map.h ! 736048442b ./libstdc++-v3/include/bits/stl_multimap.h ! 1140070258b ./libstdc++-v3/include/bits/stl_multiset.h ! 2219429302b ./libstdc++-v3/include/bits/stl_numeric.h ! 1877454624b ./libstdc++-v3/include/bits/stl_pair.h ! 2893938050b ./libstdc++-v3/include/bits/stl_pthread_alloc.h ! 3110972640b ./libstdc++-v3/include/bits/stl_queue.h ! 2641345647b ./libstdc++-v3/include/bits/stl_raw_storage_iter.h ! 2949788455b ./libstdc++-v3/include/bits/stl_relops.h ! 451857313b ./libstdc++-v3/include/bits/stl_set.h ! 4190899759b ./libstdc++-v3/include/bits/stl_stack.h ! 2706761852b ./libstdc++-v3/include/bits/stl_tempbuf.h ! 4173037205b ./libstdc++-v3/include/bits/stl_threads.h ! 885729826b ./libstdc++-v3/include/bits/stl_tree.h ! 2510296522b ./libstdc++-v3/include/bits/stl_uninitialized.h ! 3933418180b ./libstdc++-v3/include/bits/stl_vector.h ! 4030971306b ./libstdc++-v3/include/bits/streambuf.tcc ! 3733069616b ./libstdc++-v3/include/bits/stringfwd.h ! 3044846779b ./libstdc++-v3/include/bits/type_traits.h ! 1275731289b ./libstdc++-v3/include/bits/valarray_array.h ! 1408725829b ./libstdc++-v3/include/bits/valarray_array.tcc ! 4062553156b ./libstdc++-v3/include/bits/valarray_meta.h ! 3294031792b ./libstdc++-v3/include/c/bits/std_cassert.h ! 1463522619b ./libstdc++-v3/include/c/bits/std_cctype.h ! 2203354679b ./libstdc++-v3/include/c/bits/std_cerrno.h ! 1946380643b ./libstdc++-v3/include/c/bits/std_cfloat.h ! 4107991924b ./libstdc++-v3/include/c/bits/std_climits.h ! 4199237873b ./libstdc++-v3/include/c/bits/std_clocale.h ! 1702162947b ./libstdc++-v3/include/c/bits/std_cmath.h ! 2592340843b ./libstdc++-v3/include/c/bits/std_csetjmp.h ! 3110475545b ./libstdc++-v3/include/c/bits/std_csignal.h ! 883941471b ./libstdc++-v3/include/c/bits/std_cstdarg.h ! 3731912091b ./libstdc++-v3/include/c/bits/std_cstddef.h ! 2574628929b ./libstdc++-v3/include/c/bits/std_cstdio.h ! 2556140684b ./libstdc++-v3/include/c/bits/std_cstdlib.h ! 3579232551b ./libstdc++-v3/include/c/bits/std_cstring.h ! 2189083294b ./libstdc++-v3/include/c/bits/std_ctime.h ! 141696522b ./libstdc++-v3/include/c/bits/std_cwchar.h ! 4139935864b ./libstdc++-v3/include/c/bits/std_cwctype.h 54766345b ./libstdc++-v3/include/c_shadow/assert.h 408320858b ./libstdc++-v3/include/c_shadow/bits/std_cassert.h 560228963b ./libstdc++-v3/include/c_shadow/bits/std_cctype.h --- 13548,13675 ---- 2826225921b ./libstdc++-v3/docs/html/22_locale/ctype.html 1554570816b ./libstdc++-v3/docs/html/22_locale/howto.html 60951948b ./libstdc++-v3/docs/html/22_locale/locale.html ! 2041856691b ./libstdc++-v3/docs/html/22_locale/messages.html ! 2700180314b ./libstdc++-v3/docs/html/23_containers/howto.html 3458392326b ./libstdc++-v3/docs/html/23_containers/wrappers_h.txt 403270116b ./libstdc++-v3/docs/html/24_iterators/howto.html 2968708740b ./libstdc++-v3/docs/html/25_algorithms/howto.html 2926171563b ./libstdc++-v3/docs/html/26_numerics/howto.html 2452165260b ./libstdc++-v3/docs/html/27_io/binary_iostreams_kanze.txt 3249620502b ./libstdc++-v3/docs/html/27_io/binary_iostreams_kuehl.txt ! 20954860b ./libstdc++-v3/docs/html/27_io/howto.html ! 1576753364b ./libstdc++-v3/docs/html/configopts.html ! 2733529750b ./libstdc++-v3/docs/html/documentation.html 3529196048b ./libstdc++-v3/docs/html/explanations.html ! 3397106848b ./libstdc++-v3/docs/html/ext/howto.html 3141721309b ./libstdc++-v3/docs/html/ext/lwg-active.html 3531115263b ./libstdc++-v3/docs/html/ext/lwg-defects.html ! 1724723596b ./libstdc++-v3/docs/html/ext/sgiexts.html ! 278050506b ./libstdc++-v3/docs/html/faq/index.html ! 724611588b ./libstdc++-v3/docs/html/faq/index.txt ! 631230724b ./libstdc++-v3/docs/html/install.html 2049389478b ./libstdc++-v3/docs/html/lib3styles.css ! 1112274180b ./libstdc++-v3/docs/html/Makefile ! 2473605692b ./libstdc++-v3/include/backward/algobase.h ! 2730818532b ./libstdc++-v3/include/backward/algo.h ! 1509057550b ./libstdc++-v3/include/backward/alloc.h ! 2505680659b ./libstdc++-v3/include/backward/backward_warning.h ! 1252063761b ./libstdc++-v3/include/backward/bvector.h ! 3485743051b ./libstdc++-v3/include/backward/complex.h 397779689b ./libstdc++-v3/include/backward/defalloc.h ! 3218873508b ./libstdc++-v3/include/backward/deque.h ! 3713719075b ./libstdc++-v3/include/backward/fstream.h ! 3758866193b ./libstdc++-v3/include/backward/function.h ! 3633365455b ./libstdc++-v3/include/backward/hash_map.h ! 2468519049b ./libstdc++-v3/include/backward/hash_set.h ! 3191638109b ./libstdc++-v3/include/backward/hashtable.h 3255441651b ./libstdc++-v3/include/backward/heap.h ! 3979460244b ./libstdc++-v3/include/backward/iomanip.h ! 1508058162b ./libstdc++-v3/include/backward/iostream.h 1766778751b ./libstdc++-v3/include/backward/istream.h ! 3559514326b ./libstdc++-v3/include/backward/iterator.h ! 477791767b ./libstdc++-v3/include/backward/list.h ! 2194603711b ./libstdc++-v3/include/backward/map.h ! 3046068041b ./libstdc++-v3/include/backward/multimap.h ! 3924474284b ./libstdc++-v3/include/backward/multiset.h 1959434229b ./libstdc++-v3/include/backward/new.h 3127480935b ./libstdc++-v3/include/backward/ostream.h 1702071145b ./libstdc++-v3/include/backward/pair.h ! 1947043927b ./libstdc++-v3/include/backward/queue.h ! 3061027826b ./libstdc++-v3/include/backward/rope.h ! 2568486625b ./libstdc++-v3/include/backward/set.h ! 2372197114b ./libstdc++-v3/include/backward/slist.h ! 374939843b ./libstdc++-v3/include/backward/stack.h ! 3825989730b ./libstdc++-v3/include/backward/streambuf.h 2367779603b ./libstdc++-v3/include/backward/stream.h ! 3433849844b ./libstdc++-v3/include/backward/strstream 3139222786b ./libstdc++-v3/include/backward/strstream.h ! 2999216474b ./libstdc++-v3/include/backward/tempbuf.h ! 1420771511b ./libstdc++-v3/include/backward/tree.h ! 3803139445b ./libstdc++-v3/include/backward/vector.h ! 4104762506b ./libstdc++-v3/include/bits/basic_ios.h ! 2714685470b ./libstdc++-v3/include/bits/basic_ios.tcc ! 1062547003b ./libstdc++-v3/include/bits/basic_string.h ! 1189657332b ./libstdc++-v3/include/bits/basic_string.tcc ! 179433314b ./libstdc++-v3/include/bits/boost_concept_check.h ! 2729986281b ./libstdc++-v3/include/bits/c++config ! 4257211256b ./libstdc++-v3/include/bits/char_traits.h ! 229999844b ./libstdc++-v3/include/bits/codecvt.h ! 2442194789b ./libstdc++-v3/include/bits/concept_check.h ! 329719722b ./libstdc++-v3/include/bits/cpp_type_traits.h ! 521120516b ./libstdc++-v3/include/bits/fpos.h ! 2395419606b ./libstdc++-v3/include/bits/fstream.tcc 3886600201b ./libstdc++-v3/include/bits/functexcept.h ! 3055891139b ./libstdc++-v3/include/bits/generic_shadow.h ! 3512731163b ./libstdc++-v3/include/bits/gslice_array.h ! 1117238130b ./libstdc++-v3/include/bits/gslice.h ! 3450716320b ./libstdc++-v3/include/bits/indirect_array.h ! 1556465309b ./libstdc++-v3/include/bits/ios_base.h ! 1253084334b ./libstdc++-v3/include/bits/istream.tcc ! 2682709655b ./libstdc++-v3/include/bits/locale_facets.h ! 2915167815b ./libstdc++-v3/include/bits/locale_facets.tcc ! 2301356812b ./libstdc++-v3/include/bits/localefwd.h ! 1519677165b ./libstdc++-v3/include/bits/mask_array.h ! 912698033b ./libstdc++-v3/include/bits/ostream.tcc ! 3592433582b ./libstdc++-v3/include/bits/pthread_allocimpl.h ! 2670647629b ./libstdc++-v3/include/bits/slice_array.h ! 3194205835b ./libstdc++-v3/include/bits/slice.h ! 3600922095b ./libstdc++-v3/include/bits/sstream.tcc ! 3316800061b ./libstdc++-v3/include/bits/stl_algobase.h ! 1569010907b ./libstdc++-v3/include/bits/stl_algo.h ! 2270226903b ./libstdc++-v3/include/bits/stl_alloc.h ! 1958644445b ./libstdc++-v3/include/bits/stl_bvector.h ! 3302543196b ./libstdc++-v3/include/bits/stl_construct.h ! 1350022756b ./libstdc++-v3/include/bits/stl_deque.h ! 297399515b ./libstdc++-v3/include/bits/stl_function.h ! 2464389940b ./libstdc++-v3/include/bits/stl_heap.h ! 2116609667b ./libstdc++-v3/include/bits/stl_iterator_base_funcs.h ! 2132265867b ./libstdc++-v3/include/bits/stl_iterator_base_types.h ! 2545242760b ./libstdc++-v3/include/bits/stl_iterator.h ! 684063649b ./libstdc++-v3/include/bits/stl_list.h ! 883579033b ./libstdc++-v3/include/bits/stl_map.h ! 567466793b ./libstdc++-v3/include/bits/stl_multimap.h ! 2343171452b ./libstdc++-v3/include/bits/stl_multiset.h ! 1738941440b ./libstdc++-v3/include/bits/stl_numeric.h ! 1426524054b ./libstdc++-v3/include/bits/stl_pair.h ! 369962606b ./libstdc++-v3/include/bits/stl_pthread_alloc.h ! 2900628572b ./libstdc++-v3/include/bits/stl_queue.h ! 2150554874b ./libstdc++-v3/include/bits/stl_raw_storage_iter.h ! 2630067228b ./libstdc++-v3/include/bits/stl_relops.h ! 114789971b ./libstdc++-v3/include/bits/stl_set.h ! 256518146b ./libstdc++-v3/include/bits/stl_stack.h ! 745396233b ./libstdc++-v3/include/bits/stl_tempbuf.h ! 3393061403b ./libstdc++-v3/include/bits/stl_threads.h ! 1753867163b ./libstdc++-v3/include/bits/stl_tree.h ! 1954571679b ./libstdc++-v3/include/bits/stl_uninitialized.h ! 1635426571b ./libstdc++-v3/include/bits/stl_vector.h ! 1655868427b ./libstdc++-v3/include/bits/streambuf_iterator.h ! 2916214614b ./libstdc++-v3/include/bits/streambuf.tcc ! 99981565b ./libstdc++-v3/include/bits/stream_iterator.h ! 1646222939b ./libstdc++-v3/include/bits/stringfwd.h ! 1571290449b ./libstdc++-v3/include/bits/type_traits.h ! 3358963606b ./libstdc++-v3/include/bits/valarray_array.h ! 780098702b ./libstdc++-v3/include/bits/valarray_array.tcc ! 63020838b ./libstdc++-v3/include/bits/valarray_meta.h 54766345b ./libstdc++-v3/include/c_shadow/assert.h 408320858b ./libstdc++-v3/include/c_shadow/bits/std_cassert.h 560228963b ./libstdc++-v3/include/c_shadow/bits/std_cctype.h *************** *** 9457,9463 **** 2068961496b ./libstdc++-v3/include/c_shadow/bits/std_cfloat.h 1221980595b ./libstdc++-v3/include/c_shadow/bits/std_climits.h 2373554238b ./libstdc++-v3/include/c_shadow/bits/std_clocale.h ! 677151749b ./libstdc++-v3/include/c_shadow/bits/std_cmath.h 3399111523b ./libstdc++-v3/include/c_shadow/bits/std_csetjmp.h 2811346449b ./libstdc++-v3/include/c_shadow/bits/std_csignal.h 1849023164b ./libstdc++-v3/include/c_shadow/bits/std_cstdarg.h --- 13677,13683 ---- 2068961496b ./libstdc++-v3/include/c_shadow/bits/std_cfloat.h 1221980595b ./libstdc++-v3/include/c_shadow/bits/std_climits.h 2373554238b ./libstdc++-v3/include/c_shadow/bits/std_clocale.h ! 2922108560b ./libstdc++-v3/include/c_shadow/bits/std_cmath.h 3399111523b ./libstdc++-v3/include/c_shadow/bits/std_csetjmp.h 2811346449b ./libstdc++-v3/include/c_shadow/bits/std_csignal.h 1849023164b ./libstdc++-v3/include/c_shadow/bits/std_cstdarg.h *************** *** 9503,9587 **** 3696004291b ./libstdc++-v3/include/c_shadow/unistd.h 3189910958b ./libstdc++-v3/include/c_shadow/wchar.h 887325795b ./libstdc++-v3/include/c_shadow/wctype.h ! 4087026299b ./libstdc++-v3/include/c_std/bits/cmath.tcc ! 4173967768b ./libstdc++-v3/include/c_std/bits/std_cassert.h ! 3755378346b ./libstdc++-v3/include/c_std/bits/std_cctype.h ! 1941333242b ./libstdc++-v3/include/c_std/bits/std_cerrno.h ! 1754745587b ./libstdc++-v3/include/c_std/bits/std_cfloat.h ! 1073898404b ./libstdc++-v3/include/c_std/bits/std_climits.h ! 1419451335b ./libstdc++-v3/include/c_std/bits/std_clocale.h ! 210118b ./libstdc++-v3/include/c_std/bits/std_cmath.h ! 2753276786b ./libstdc++-v3/include/c_std/bits/std_csetjmp.h ! 3019403730b ./libstdc++-v3/include/c_std/bits/std_csignal.h ! 2011156002b ./libstdc++-v3/include/c_std/bits/std_cstdarg.h ! 1885068282b ./libstdc++-v3/include/c_std/bits/std_cstddef.h ! 1711293805b ./libstdc++-v3/include/c_std/bits/std_cstdio.h ! 459786272b ./libstdc++-v3/include/c_std/bits/std_cstdlib.h ! 3134790463b ./libstdc++-v3/include/c_std/bits/std_cstring.h ! 2488914866b ./libstdc++-v3/include/c_std/bits/std_ctime.h ! 2924979082b ./libstdc++-v3/include/c_std/bits/std_cwchar.h ! 1623200046b ./libstdc++-v3/include/c_std/bits/std_cwctype.h ! 2457699013b ./libstdc++-v3/include/ext/bvector ! 32562494b ./libstdc++-v3/include/ext/hash_map ! 1791958016b ./libstdc++-v3/include/ext/hash_set ! 852081170b ./libstdc++-v3/include/ext/rope ! 3281946583b ./libstdc++-v3/include/ext/ropeimpl.h ! 3974788162b ./libstdc++-v3/include/ext/slist ! 4005867415b ./libstdc++-v3/include/ext/stl_bvector.h ! 4275898655b ./libstdc++-v3/include/ext/stl_hash_fun.h ! 432472271b ./libstdc++-v3/include/ext/stl_hashtable.h ! 2912765281b ./libstdc++-v3/include/ext/stl_rope.h ! 2948918123b ./libstdc++-v3/include/ext/tree ! 3010972509b ./libstdc++-v3/include/Makefile.am ! 409239263b ./libstdc++-v3/include/Makefile.in ! 3439966783b ./libstdc++-v3/include/std/algorithm ! 2084535427b ./libstdc++-v3/include/std/bitset ! 3453024003b ./libstdc++-v3/include/std/cassert ! 1876528921b ./libstdc++-v3/include/std/cctype ! 3912090948b ./libstdc++-v3/include/std/cerrno ! 627661198b ./libstdc++-v3/include/std/cfloat ! 2639541417b ./libstdc++-v3/include/std/ciso646 ! 964098699b ./libstdc++-v3/include/std/climits ! 1694774305b ./libstdc++-v3/include/std/clocale ! 4242380746b ./libstdc++-v3/include/std/cmath ! 520021214b ./libstdc++-v3/include/std/complex ! 4003902160b ./libstdc++-v3/include/std/csetjmp ! 1490476102b ./libstdc++-v3/include/std/csignal ! 60353202b ./libstdc++-v3/include/std/cstdarg ! 1796361621b ./libstdc++-v3/include/std/cstddef ! 1888581427b ./libstdc++-v3/include/std/cstdio ! 2804459502b ./libstdc++-v3/include/std/cstdlib ! 1757971010b ./libstdc++-v3/include/std/cstring ! 3590124298b ./libstdc++-v3/include/std/ctime ! 3090235789b ./libstdc++-v3/include/std/cwchar ! 2252748974b ./libstdc++-v3/include/std/cwctype ! 3902505294b ./libstdc++-v3/include/std/deque ! 345910296b ./libstdc++-v3/include/std/fstream ! 3990635380b ./libstdc++-v3/include/std/functional ! 116995592b ./libstdc++-v3/include/std/iomanip ! 2777010686b ./libstdc++-v3/include/std/ios ! 3002692112b ./libstdc++-v3/include/std/iosfwd ! 1644928102b ./libstdc++-v3/include/std/iostream ! 570887345b ./libstdc++-v3/include/std/istream ! 994089739b ./libstdc++-v3/include/std/iterator ! 1158102202b ./libstdc++-v3/include/std/limits ! 2108265464b ./libstdc++-v3/include/std/list ! 4211869592b ./libstdc++-v3/include/std/locale ! 1840361169b ./libstdc++-v3/include/std/map ! 777116344b ./libstdc++-v3/include/std/memory ! 3658097138b ./libstdc++-v3/include/std/numeric ! 1408060702b ./libstdc++-v3/include/std/ostream ! 3452382284b ./libstdc++-v3/include/std/queue ! 3115651810b ./libstdc++-v3/include/std/set ! 2807443734b ./libstdc++-v3/include/std/sstream ! 346704505b ./libstdc++-v3/include/std/stack ! 248804344b ./libstdc++-v3/include/std/stdexcept ! 171085692b ./libstdc++-v3/include/std/streambuf ! 2464865760b ./libstdc++-v3/include/std/string ! 2645437597b ./libstdc++-v3/include/std/utility ! 2280752861b ./libstdc++-v3/include/std/valarray ! 392237057b ./libstdc++-v3/include/std/vector ! 1155879680b ./libstdc++-v3/libio/ChangeLog 2122576197b ./libstdc++-v3/libio/filedoalloc.c 3590060213b ./libstdc++-v3/libio/fileops.c 314955067b ./libstdc++-v3/libio/_G_config.h --- 13723,13813 ---- 3696004291b ./libstdc++-v3/include/c_shadow/unistd.h 3189910958b ./libstdc++-v3/include/c_shadow/wchar.h 887325795b ./libstdc++-v3/include/c_shadow/wctype.h ! 4098574322b ./libstdc++-v3/include/c/std_cassert.h ! 1243273805b ./libstdc++-v3/include/c/std_cctype.h ! 4209078569b ./libstdc++-v3/include/c/std_cerrno.h ! 4090686127b ./libstdc++-v3/include/c/std_cfloat.h ! 1108468159b ./libstdc++-v3/include/c/std_ciso646.h ! 1957729161b ./libstdc++-v3/include/c/std_climits.h ! 2616677270b ./libstdc++-v3/include/c/std_clocale.h ! 3953982446b ./libstdc++-v3/include/c/std_cmath.h ! 4087026299b ./libstdc++-v3/include/c_std/cmath.tcc ! 3287404971b ./libstdc++-v3/include/c/std_csetjmp.h ! 3312976087b ./libstdc++-v3/include/c/std_csignal.h ! 2338420256b ./libstdc++-v3/include/c/std_cstdarg.h ! 329222331b ./libstdc++-v3/include/c/std_cstddef.h ! 1836877162b ./libstdc++-v3/include/c/std_cstdio.h ! 2143638095b ./libstdc++-v3/include/c/std_cstdlib.h ! 948151623b ./libstdc++-v3/include/c/std_cstring.h ! 641399722b ./libstdc++-v3/include/c/std_ctime.h ! 1705937636b ./libstdc++-v3/include/c/std_cwchar.h ! 3511412634b ./libstdc++-v3/include/c/std_cwctype.h ! 1055988818b ./libstdc++-v3/include/c_std/std_cassert.h ! 513093939b ./libstdc++-v3/include/c_std/std_cctype.h ! 2752122999b ./libstdc++-v3/include/c_std/std_cerrno.h ! 3553306451b ./libstdc++-v3/include/c_std/std_cfloat.h ! 1108468159b ./libstdc++-v3/include/c_std/std_ciso646.h ! 3552340376b ./libstdc++-v3/include/c_std/std_climits.h ! 3610469005b ./libstdc++-v3/include/c_std/std_clocale.h ! 3603077307b ./libstdc++-v3/include/c_std/std_cmath.h ! 664446368b ./libstdc++-v3/include/c_std/std_csetjmp.h ! 1548436805b ./libstdc++-v3/include/c_std/std_csignal.h ! 2409940084b ./libstdc++-v3/include/c_std/std_cstdarg.h ! 2943077263b ./libstdc++-v3/include/c_std/std_cstddef.h ! 2516759904b ./libstdc++-v3/include/c_std/std_cstdio.h ! 1778106626b ./libstdc++-v3/include/c_std/std_cstdlib.h ! 3597700667b ./libstdc++-v3/include/c_std/std_cstring.h ! 1833374328b ./libstdc++-v3/include/c_std/std_ctime.h ! 855540198b ./libstdc++-v3/include/c_std/std_cwchar.h ! 3941323151b ./libstdc++-v3/include/c_std/std_cwctype.h ! 2344189166b ./libstdc++-v3/include/ext/algorithm ! 1641495854b ./libstdc++-v3/include/ext/enc_filebuf.h ! 3444585981b ./libstdc++-v3/include/ext/functional ! 177412747b ./libstdc++-v3/include/ext/hash_map ! 597741368b ./libstdc++-v3/include/ext/hash_set ! 2824729150b ./libstdc++-v3/include/ext/iterator ! 1166159156b ./libstdc++-v3/include/ext/memory ! 4117060565b ./libstdc++-v3/include/ext/numeric ! 4079668166b ./libstdc++-v3/include/ext/rb_tree ! 177834210b ./libstdc++-v3/include/ext/rope ! 836293130b ./libstdc++-v3/include/ext/ropeimpl.h ! 797110709b ./libstdc++-v3/include/ext/slist ! 1189451505b ./libstdc++-v3/include/ext/stdio_filebuf.h ! 2805137138b ./libstdc++-v3/include/ext/stl_hash_fun.h ! 3764616622b ./libstdc++-v3/include/ext/stl_hashtable.h ! 1930025858b ./libstdc++-v3/include/ext/stl_rope.h ! 4201466100b ./libstdc++-v3/include/Makefile.am ! 513846786b ./libstdc++-v3/include/Makefile.in ! 4064711400b ./libstdc++-v3/include/std/std_algorithm.h ! 709624692b ./libstdc++-v3/include/std/std_bitset.h ! 3412647990b ./libstdc++-v3/include/std/std_complex.h ! 1730455182b ./libstdc++-v3/include/std/std_deque.h ! 2069118484b ./libstdc++-v3/include/std/std_fstream.h ! 3174050204b ./libstdc++-v3/include/std/std_functional.h ! 735018069b ./libstdc++-v3/include/std/std_iomanip.h ! 3189740242b ./libstdc++-v3/include/std/std_iosfwd.h ! 2056599714b ./libstdc++-v3/include/std/std_ios.h ! 3699343429b ./libstdc++-v3/include/std/std_iostream.h ! 2276910012b ./libstdc++-v3/include/std/std_istream.h ! 3826418885b ./libstdc++-v3/include/std/std_iterator.h ! 3811165801b ./libstdc++-v3/include/std/std_limits.h ! 1509281666b ./libstdc++-v3/include/std/std_list.h ! 918488326b ./libstdc++-v3/include/std/std_locale.h ! 2375471353b ./libstdc++-v3/include/std/std_map.h ! 2661430438b ./libstdc++-v3/include/std/std_memory.h ! 2200880623b ./libstdc++-v3/include/std/std_numeric.h ! 3467401292b ./libstdc++-v3/include/std/std_ostream.h ! 1570707417b ./libstdc++-v3/include/std/std_queue.h ! 2180214858b ./libstdc++-v3/include/std/std_set.h ! 4147065580b ./libstdc++-v3/include/std/std_sstream.h ! 1037640383b ./libstdc++-v3/include/std/std_stack.h ! 3429471837b ./libstdc++-v3/include/std/std_stdexcept.h ! 1649581748b ./libstdc++-v3/include/std/std_streambuf.h ! 1365091273b ./libstdc++-v3/include/std/std_string.h ! 4158492065b ./libstdc++-v3/include/std/std_utility.h ! 362016596b ./libstdc++-v3/include/std/std_valarray.h ! 125145631b ./libstdc++-v3/include/std/std_vector.h ! 3029670399b ./libstdc++-v3/libio/ChangeLog 2122576197b ./libstdc++-v3/libio/filedoalloc.c 3590060213b ./libstdc++-v3/libio/fileops.c 314955067b ./libstdc++-v3/libio/_G_config.h *************** *** 9593,9673 **** 4269898080b ./libstdc++-v3/libio/libio.h 276542374b ./libstdc++-v3/libio/libioP.h 226381804b ./libstdc++-v3/libio/Makefile.am ! 2246465854b ./libstdc++-v3/libio/Makefile.in 13280908b ./libstdc++-v3/libio/stdfiles.c 2344987226b ./libstdc++-v3/libio/stdio.c 688559115b ./libstdc++-v3/libio/wfiledoalloc.c 871695306b ./libstdc++-v3/libio/wfileops.c 2568419733b ./libstdc++-v3/libio/wgenops.c ! 3059642182b ./libstdc++-v3/libmath/copysignf.c ! 1992629512b ./libstdc++-v3/libmath/Makefile.am ! 1640257395b ./libstdc++-v3/libmath/Makefile.in ! 3949749210b ./libstdc++-v3/libmath/mathconf.h ! 875119219b ./libstdc++-v3/libmath/nan.c ! 4185958949b ./libstdc++-v3/libmath/signbit.c ! 2047804662b ./libstdc++-v3/libmath/signbitf.c ! 711912297b ./libstdc++-v3/libmath/signbitl.c ! 2028045037b ./libstdc++-v3/libmath/stubs.c ! 1538560956b ./libstdc++-v3/libsupc++/cxxabi.h 3887473586b ./libstdc++-v3/libsupc++/del_op.cc 2108254126b ./libstdc++-v3/libsupc++/del_opnt.cc 998297127b ./libstdc++-v3/libsupc++/del_opv.cc 958055369b ./libstdc++-v3/libsupc++/del_opvnt.cc ! 3183403236b ./libstdc++-v3/libsupc++/eh_alloc.cc ! 3620314663b ./libstdc++-v3/libsupc++/eh_aux_runtime.cc ! 542643738b ./libstdc++-v3/libsupc++/eh_catch.cc ! 926666888b ./libstdc++-v3/libsupc++/eh_exception.cc 1852005316b ./libstdc++-v3/libsupc++/eh_globals.cc ! 2661319592b ./libstdc++-v3/libsupc++/eh_personality.cc 192927225b ./libstdc++-v3/libsupc++/eh_terminate.cc ! 2900215744b ./libstdc++-v3/libsupc++/eh_throw.cc ! 188596486b ./libstdc++-v3/libsupc++/exception 3453419455b ./libstdc++-v3/libsupc++/exception_defines.h ! 2808634066b ./libstdc++-v3/libsupc++/Makefile.am ! 665016942b ./libstdc++-v3/libsupc++/Makefile.in ! 2432709783b ./libstdc++-v3/libsupc++/new ! 1474493160b ./libstdc++-v3/libsupc++/new_handler.cc ! 4140508393b ./libstdc++-v3/libsupc++/new_op.cc 1924050083b ./libstdc++-v3/libsupc++/new_opnt.cc 4286163592b ./libstdc++-v3/libsupc++/new_opv.cc 1153125428b ./libstdc++-v3/libsupc++/new_opvnt.cc 4183571000b ./libstdc++-v3/libsupc++/pure.cc 2446382575b ./libstdc++-v3/libsupc++/tinfo2.cc ! 4000313327b ./libstdc++-v3/libsupc++/tinfo.cc ! 684549201b ./libstdc++-v3/libsupc++/tinfo.h ! 250050351b ./libstdc++-v3/libsupc++/typeinfo ! 3616638474b ./libstdc++-v3/libsupc++/unwind-cxx.h ! 3864118754b ./libstdc++-v3/libsupc++/vec.cc ! 2737980541b ./libstdc++-v3/Makefile.am ! 3896532944b ./libstdc++-v3/Makefile.in ! 3043274587b ./libstdc++-v3/mkc++config ! 3093437076b ./libstdc++-v3/mkcheck.in 3790569303b ./libstdc++-v3/mkcshadow 805804711b ./libstdc++-v3/mkinclosure ! 1536428020b ./libstdc++-v3/mknumeric_limits ! 2605795304b ./libstdc++-v3/porting.texi ! 476340085b ./libstdc++-v3/README ! 1651858599b ./libstdc++-v3/src/bitset.cc ! 3659270218b ./libstdc++-v3/src/cmath.cc ! 3763564632b ./libstdc++-v3/src/codecvt.cc ! 2074797863b ./libstdc++-v3/src/complex_io.cc ! 3833330768b ./libstdc++-v3/src/functexcept.cc ! 180238345b ./libstdc++-v3/src/gen-num-limits.cc ! 681129958b ./libstdc++-v3/src/globals.cc ! 1383759180b ./libstdc++-v3/src/ios.cc ! 4247682085b ./libstdc++-v3/src/limits.cc ! 641891272b ./libstdc++-v3/src/limits_generic.cc ! 1154042250b ./libstdc++-v3/src/locale.cc ! 888901044b ./libstdc++-v3/src/locale-inst.cc ! 3678785766b ./libstdc++-v3/src/localename.cc ! 796347171b ./libstdc++-v3/src/Makefile.am ! 3482864698b ./libstdc++-v3/src/Makefile.in ! 4290618040b ./libstdc++-v3/src/misc-inst.cc ! 1726669856b ./libstdc++-v3/src/stdexcept.cc ! 3210807708b ./libstdc++-v3/src/stl-inst.cc ! 2153343514b ./libstdc++-v3/src/string-inst.cc 3829054154b ./libstdc++-v3/src/strstream.cc ! 2505521591b ./libstdc++-v3/src/valarray-inst.cc 1651008667b ./libstdc++-v3/src/wstring-inst.cc 3407177850b ./libstdc++-v3/testsuite/17_intro/header_cassert.cc 718483329b ./libstdc++-v3/testsuite/17_intro/header_cerrno.cc --- 13819,13905 ---- 4269898080b ./libstdc++-v3/libio/libio.h 276542374b ./libstdc++-v3/libio/libioP.h 226381804b ./libstdc++-v3/libio/Makefile.am ! 1355938524b ./libstdc++-v3/libio/Makefile.in 13280908b ./libstdc++-v3/libio/stdfiles.c 2344987226b ./libstdc++-v3/libio/stdio.c 688559115b ./libstdc++-v3/libio/wfiledoalloc.c 871695306b ./libstdc++-v3/libio/wfileops.c 2568419733b ./libstdc++-v3/libio/wgenops.c ! 4088285812b ./libstdc++-v3/libmath/copysignf.c ! 1192225650b ./libstdc++-v3/libmath/Makefile.am ! 872348035b ./libstdc++-v3/libmath/Makefile.in ! 346371220b ./libstdc++-v3/libmath/mathconf.h ! 1759197966b ./libstdc++-v3/libmath/nan.c ! 1774241233b ./libstdc++-v3/libmath/signbit.c ! 3226432156b ./libstdc++-v3/libmath/signbitf.c ! 706230946b ./libstdc++-v3/libmath/signbitl.c ! 940829383b ./libstdc++-v3/libmath/stubs.c ! 362085700b ./libstdc++-v3/libsupc++/cxxabi.h 3887473586b ./libstdc++-v3/libsupc++/del_op.cc 2108254126b ./libstdc++-v3/libsupc++/del_opnt.cc 998297127b ./libstdc++-v3/libsupc++/del_opv.cc 958055369b ./libstdc++-v3/libsupc++/del_opvnt.cc ! 3181598228b ./libstdc++-v3/libsupc++/eh_alloc.cc ! 1594858350b ./libstdc++-v3/libsupc++/eh_aux_runtime.cc ! 152242761b ./libstdc++-v3/libsupc++/eh_catch.cc ! 4215496070b ./libstdc++-v3/libsupc++/eh_exception.cc 1852005316b ./libstdc++-v3/libsupc++/eh_globals.cc ! 1601550960b ./libstdc++-v3/libsupc++/eh_personality.cc 192927225b ./libstdc++-v3/libsupc++/eh_terminate.cc ! 3767983751b ./libstdc++-v3/libsupc++/eh_throw.cc ! 3381460574b ./libstdc++-v3/libsupc++/eh_type.cc ! 1338501219b ./libstdc++-v3/libsupc++/exception 3453419455b ./libstdc++-v3/libsupc++/exception_defines.h ! 2095786657b ./libstdc++-v3/libsupc++/Makefile.am ! 614217958b ./libstdc++-v3/libsupc++/Makefile.in ! 3874429611b ./libstdc++-v3/libsupc++/new ! 1062654239b ./libstdc++-v3/libsupc++/new_handler.cc ! 3610294139b ./libstdc++-v3/libsupc++/new_op.cc 1924050083b ./libstdc++-v3/libsupc++/new_opnt.cc 4286163592b ./libstdc++-v3/libsupc++/new_opv.cc 1153125428b ./libstdc++-v3/libsupc++/new_opvnt.cc 4183571000b ./libstdc++-v3/libsupc++/pure.cc 2446382575b ./libstdc++-v3/libsupc++/tinfo2.cc ! 3153916157b ./libstdc++-v3/libsupc++/tinfo.cc ! 1192700122b ./libstdc++-v3/libsupc++/tinfo.h ! 2283435214b ./libstdc++-v3/libsupc++/typeinfo ! 875479559b ./libstdc++-v3/libsupc++/unwind-cxx.h ! 712738859b ./libstdc++-v3/libsupc++/vec.cc ! 514484816b ./libstdc++-v3/Makefile.am ! 703545588b ./libstdc++-v3/Makefile.in ! 2396933860b ./libstdc++-v3/mkcheck.in 3790569303b ./libstdc++-v3/mkcshadow 805804711b ./libstdc++-v3/mkinclosure ! 1252249648b ./libstdc++-v3/po/de.po ! 4161545945b ./libstdc++-v3/po/fr.po ! 571561184b ./libstdc++-v3/po/libstdc++.pot ! 2710223631b ./libstdc++-v3/po/Makefile.am ! 2351120206b ./libstdc++-v3/po/Makefile.in ! 2014452913b ./libstdc++-v3/po/POTFILES.in ! 1352447199b ./libstdc++-v3/po/string_literals.cc ! 201474883b ./libstdc++-v3/README ! 33119601b ./libstdc++-v3/src/bitset.cc ! 2516358454b ./libstdc++-v3/src/cmath.cc ! 3432581077b ./libstdc++-v3/src/codecvt.cc ! 252828227b ./libstdc++-v3/src/complex_io.cc ! 3518329104b ./libstdc++-v3/src/concept-inst.cc ! 4220514680b ./libstdc++-v3/src/ext-inst.cc ! 3677721072b ./libstdc++-v3/src/functexcept.cc ! 650049293b ./libstdc++-v3/src/globals.cc ! 4223583336b ./libstdc++-v3/src/ios.cc ! 2798828124b ./libstdc++-v3/src/limits.cc ! 3427590836b ./libstdc++-v3/src/locale.cc ! 3050770571b ./libstdc++-v3/src/locale-inst.cc ! 1002874783b ./libstdc++-v3/src/localename.cc ! 2484337607b ./libstdc++-v3/src/Makefile.am ! 460631784b ./libstdc++-v3/src/Makefile.in ! 2846642539b ./libstdc++-v3/src/misc-inst.cc ! 3634270088b ./libstdc++-v3/src/stdexcept.cc ! 1621643001b ./libstdc++-v3/src/stl-inst.cc ! 693942221b ./libstdc++-v3/src/string-inst.cc 3829054154b ./libstdc++-v3/src/strstream.cc ! 3557593608b ./libstdc++-v3/src/valarray-inst.cc ! 2281175186b ./libstdc++-v3/src/vterminate.cc 1651008667b ./libstdc++-v3/src/wstring-inst.cc 3407177850b ./libstdc++-v3/testsuite/17_intro/header_cassert.cc 718483329b ./libstdc++-v3/testsuite/17_intro/header_cerrno.cc *************** *** 9693,9787 **** 2076357409b ./libstdc++-v3/testsuite/17_intro/headers_c++.cc 161485874b ./libstdc++-v3/testsuite/17_intro/header_sstream.cc 553109088b ./libstdc++-v3/testsuite/17_intro/header_streambuf.cc ! 1297373821b ./libstdc++-v3/testsuite/18_support/numeric_limits.cc ! 410938608b ./libstdc++-v3/testsuite/19_diagnostics/stdexceptions.cc 3136764659b ./libstdc++-v3/testsuite/20_util/auto_ptr.cc 4006660250b ./libstdc++-v3/testsuite/20_util/binders.cc 2620430532b ./libstdc++-v3/testsuite/21_strings/append.cc ! 2085027904b ./libstdc++-v3/testsuite/21_strings/capacity.cc 2635888646b ./libstdc++-v3/testsuite/21_strings/char_traits_requirements.cc 4052621376b ./libstdc++-v3/testsuite/21_strings/char_traits_typedefs.cc ! 2800726480b ./libstdc++-v3/testsuite/21_strings/compare.cc 1828225934b ./libstdc++-v3/testsuite/21_strings/c_strings.cc ! 2548295922b ./libstdc++-v3/testsuite/21_strings/ctor_copy_dtor.cc ! 2661084265b ./libstdc++-v3/testsuite/21_strings/element_access.cc 2204151867b ./libstdc++-v3/testsuite/21_strings/find.cc ! 101500475b ./libstdc++-v3/testsuite/21_strings/insert.cc ! 2657132462b ./libstdc++-v3/testsuite/21_strings/inserters_extractors.cc 2168000074b ./libstdc++-v3/testsuite/21_strings/invariants.cc ! 1895351902b ./libstdc++-v3/testsuite/21_strings/nonmember.cc 1709617082b ./libstdc++-v3/testsuite/21_strings/operations.cc ! 1201188626b ./libstdc++-v3/testsuite/21_strings/replace.cc 2718476092b ./libstdc++-v3/testsuite/21_strings/rfind.cc 1483165749b ./libstdc++-v3/testsuite/21_strings/substr.cc ! 3866937567b ./libstdc++-v3/testsuite/22_locale/codecvt_char_char.cc ! 636244027b ./libstdc++-v3/testsuite/22_locale/codecvt_unicode_char.cc ! 511768235b ./libstdc++-v3/testsuite/22_locale/codecvt_unicode_wchar_t.cc ! 1812800874b ./libstdc++-v3/testsuite/22_locale/codecvt_wchar_t_char.cc ! 1033440651b ./libstdc++-v3/testsuite/22_locale/ctor_copy_dtor.cc ! 758113484b ./libstdc++-v3/testsuite/22_locale/ctype.cc ! 985554485b ./libstdc++-v3/testsuite/22_locale/ctype_char_members.cc ! 3584040307b ./libstdc++-v3/testsuite/22_locale/ctype_wchar_t_members.cc ! 2573412066b ./libstdc++-v3/testsuite/22_locale/facet.cc 3496730433b ./libstdc++-v3/testsuite/22_locale/global_templates.cc ! 3243201175b ./libstdc++-v3/testsuite/22_locale/members.cc ! 3463227673b ./libstdc++-v3/testsuite/22_locale/numpunct_byname.cc ! 1852213058b ./libstdc++-v3/testsuite/22_locale/numpunct.cc ! 4085763304b ./libstdc++-v3/testsuite/22_locale/numpunct_char_members.cc ! 1710593315b ./libstdc++-v3/testsuite/22_locale/operators.cc 2943563602b ./libstdc++-v3/testsuite/22_locale/static_members.cc ! 3600430355b ./libstdc++-v3/testsuite/23_containers/bitset_ctor.cc ! 475577229b ./libstdc++-v3/testsuite/23_containers/bitset_members.cc 897013241b ./libstdc++-v3/testsuite/23_containers/bitset_shift.cc 307316045b ./libstdc++-v3/testsuite/23_containers/map_insert.cc ! 3178774718b ./libstdc++-v3/testsuite/23_containers/map_operators.cc ! 2332883344b ./libstdc++-v3/testsuite/23_containers/multiset.cc ! 584738240b ./libstdc++-v3/testsuite/23_containers/set_operators.cc 2845787844b ./libstdc++-v3/testsuite/23_containers/vector_capacity.cc ! 2680681229b ./libstdc++-v3/testsuite/23_containers/vector_ctor.cc 3683155594b ./libstdc++-v3/testsuite/23_containers/vector_element_access.cc ! 3019110519b ./libstdc++-v3/testsuite/23_containers/vector_modifiers.cc ! 986439371b ./libstdc++-v3/testsuite/24_iterators/istreambuf_iterator.cc ! 1805154351b ./libstdc++-v3/testsuite/24_iterators/iterator.cc ! 1097193416b ./libstdc++-v3/testsuite/24_iterators/ostreambuf_iterator.cc 499887025b ./libstdc++-v3/testsuite/25_algorithms/equal.cc 3229510528b ./libstdc++-v3/testsuite/25_algorithms/lower_bound.cc 4253988362b ./libstdc++-v3/testsuite/25_algorithms/min_max.cc 825452073b ./libstdc++-v3/testsuite/26_numerics/binary_closure.cc 4174117585b ./libstdc++-v3/testsuite/26_numerics/buggy_complex.cc ! 1943684863b ./libstdc++-v3/testsuite/26_numerics/c99_classification_macros_c.cc 477083436b ./libstdc++-v3/testsuite/26_numerics/c99_classification_macros_c++.cc 162388279b ./libstdc++-v3/testsuite/26_numerics/c_math.cc ! 1078048999b ./libstdc++-v3/testsuite/26_numerics/complex_inserters_extractors.cc 4028172023b ./libstdc++-v3/testsuite/26_numerics/complex_value.cc 2560606731b ./libstdc++-v3/testsuite/26_numerics/fabs_inline.cc 2203801309b ./libstdc++-v3/testsuite/26_numerics/valarray.cc 2289035929b ./libstdc++-v3/testsuite/26_numerics/valarray_const_bracket.cc ! 4204648704b ./libstdc++-v3/testsuite/27_io/filebuf-1.tst ! 4204648704b ./libstdc++-v3/testsuite/27_io/filebuf-1.txt ! 655821823b ./libstdc++-v3/testsuite/27_io/filebuf-2.tst ! 1896106013b ./libstdc++-v3/testsuite/27_io/filebuf-3.tst ! 3402256454b ./libstdc++-v3/testsuite/27_io/filebuf.cc 4294967295b ./libstdc++-v3/testsuite/27_io/filebuf_members-1.tst 4294967295b ./libstdc++-v3/testsuite/27_io/filebuf_members-1.txt ! 530760041b ./libstdc++-v3/testsuite/27_io/filebuf_members.cc ! 1696922807b ./libstdc++-v3/testsuite/27_io/filebuf_virtuals.cc 1987901042b ./libstdc++-v3/testsuite/27_io/fpos.cc 358840366b ./libstdc++-v3/testsuite/27_io/fstream_members.cc 4294967295b ./libstdc++-v3/testsuite/27_io/ifstream_members-1.tst 4294967295b ./libstdc++-v3/testsuite/27_io/ifstream_members-1.txt 2885752721b ./libstdc++-v3/testsuite/27_io/ifstream_members.cc ! 921559118b ./libstdc++-v3/testsuite/27_io/ios_base_callbacks.cc 3079502096b ./libstdc++-v3/testsuite/27_io/ios_base_members_static-1.tst 2904656871b ./libstdc++-v3/testsuite/27_io/ios_base_members_static.cc ! 3946940640b ./libstdc++-v3/testsuite/27_io/ios_base_storage.cc 3028704293b ./libstdc++-v3/testsuite/27_io/ios_ctor.cc ! 3943208282b ./libstdc++-v3/testsuite/27_io/ios_init.cc ! 126651840b ./libstdc++-v3/testsuite/27_io/ios_manip_basefield.cc ! 1876828962b ./libstdc++-v3/testsuite/27_io/ios_manip_fmtflags.cc 402291869b ./libstdc++-v3/testsuite/27_io/ios_members.cc ! 1023084641b ./libstdc++-v3/testsuite/27_io/istream.cc ! 149386730b ./libstdc++-v3/testsuite/27_io/istream_extractor_arith.cc 262004209b ./libstdc++-v3/testsuite/27_io/istream_extractor_char.cc 1013375821b ./libstdc++-v3/testsuite/27_io/istream_extractor_other-1.tst 1013375821b ./libstdc++-v3/testsuite/27_io/istream_extractor_other-1.txt --- 13925,14081 ---- 2076357409b ./libstdc++-v3/testsuite/17_intro/headers_c++.cc 161485874b ./libstdc++-v3/testsuite/17_intro/header_sstream.cc 553109088b ./libstdc++-v3/testsuite/17_intro/header_streambuf.cc ! 2714224389b ./libstdc++-v3/testsuite/18_support/numeric_limits.cc ! 1268854968b ./libstdc++-v3/testsuite/19_diagnostics/stdexceptions.cc ! 1972393936b ./libstdc++-v3/testsuite/20_util/allocator_members.cc 3136764659b ./libstdc++-v3/testsuite/20_util/auto_ptr.cc 4006660250b ./libstdc++-v3/testsuite/20_util/binders.cc + 1043517205b ./libstdc++-v3/testsuite/20_util/comparisons.cc + 1073181186b ./libstdc++-v3/testsuite/20_util/pairs.cc + 2591691225b ./libstdc++-v3/testsuite/20_util/raw_storage_iterator.cc + 2339280423b ./libstdc++-v3/testsuite/20_util/temporary_buffer.cc 2620430532b ./libstdc++-v3/testsuite/21_strings/append.cc ! 1749237095b ./libstdc++-v3/testsuite/21_strings/assign.cc ! 2117556824b ./libstdc++-v3/testsuite/21_strings/capacity.cc 2635888646b ./libstdc++-v3/testsuite/21_strings/char_traits_requirements.cc 4052621376b ./libstdc++-v3/testsuite/21_strings/char_traits_typedefs.cc ! 2742086522b ./libstdc++-v3/testsuite/21_strings/compare.cc 1828225934b ./libstdc++-v3/testsuite/21_strings/c_strings.cc ! 2782349661b ./libstdc++-v3/testsuite/21_strings/ctor_copy_dtor.cc ! 2926478704b ./libstdc++-v3/testsuite/21_strings/element_access.cc 2204151867b ./libstdc++-v3/testsuite/21_strings/find.cc ! 1722926940b ./libstdc++-v3/testsuite/21_strings/insert.cc ! 1426636344b ./libstdc++-v3/testsuite/21_strings/inserters_extractors.cc 2168000074b ./libstdc++-v3/testsuite/21_strings/invariants.cc ! 593155147b ./libstdc++-v3/testsuite/21_strings/nonmember.cc 1709617082b ./libstdc++-v3/testsuite/21_strings/operations.cc ! 1457621082b ./libstdc++-v3/testsuite/21_strings/replace.cc 2718476092b ./libstdc++-v3/testsuite/21_strings/rfind.cc 1483165749b ./libstdc++-v3/testsuite/21_strings/substr.cc ! 387593609b ./libstdc++-v3/testsuite/22_locale/codecvt.cc ! 872933211b ./libstdc++-v3/testsuite/22_locale/codecvt_members_char_char.cc ! 1648636673b ./libstdc++-v3/testsuite/22_locale/codecvt_members_unicode_char.cc ! 3529033557b ./libstdc++-v3/testsuite/22_locale/codecvt_members_unicode_wchar_t.cc ! 1516251301b ./libstdc++-v3/testsuite/22_locale/codecvt_members_wchar_t_char.cc ! 378719965b ./libstdc++-v3/testsuite/22_locale/collate_byname.cc ! 4219192012b ./libstdc++-v3/testsuite/22_locale/collate.cc ! 3467761763b ./libstdc++-v3/testsuite/22_locale/collate_members_char.cc ! 2672821922b ./libstdc++-v3/testsuite/22_locale/collate_members_wchar_t.cc ! 6122968b ./libstdc++-v3/testsuite/22_locale/ctor_copy_dtor.cc ! 2708515186b ./libstdc++-v3/testsuite/22_locale/ctype.cc ! 2680074281b ./libstdc++-v3/testsuite/22_locale/ctype_members_char.cc ! 3571485613b ./libstdc++-v3/testsuite/22_locale/ctype_members_wchar_t.cc ! 3268934912b ./libstdc++-v3/testsuite/22_locale/facet.cc 3496730433b ./libstdc++-v3/testsuite/22_locale/global_templates.cc ! 1723684426b ./libstdc++-v3/testsuite/22_locale/members.cc ! 1401094326b ./libstdc++-v3/testsuite/22_locale/messages_byname.cc ! 3196187062b ./libstdc++-v3/testsuite/22_locale/messages.cc ! 1374375401b ./libstdc++-v3/testsuite/22_locale/messages_members_char.cc ! 2495817416b ./libstdc++-v3/testsuite/22_locale/money_get.cc ! 678451152b ./libstdc++-v3/testsuite/22_locale/money_get_members_char.cc ! 2482281541b ./libstdc++-v3/testsuite/22_locale/money_get_members_wchar_t.cc ! 396525641b ./libstdc++-v3/testsuite/22_locale/moneypunct_byname.cc ! 1298769732b ./libstdc++-v3/testsuite/22_locale/moneypunct.cc ! 1317059496b ./libstdc++-v3/testsuite/22_locale/moneypunct_members_char.cc ! 1655518997b ./libstdc++-v3/testsuite/22_locale/moneypunct_members_wchar_t.cc ! 2714963439b ./libstdc++-v3/testsuite/22_locale/money_put.cc ! 2817344662b ./libstdc++-v3/testsuite/22_locale/money_put_members_char.cc ! 48437909b ./libstdc++-v3/testsuite/22_locale/money_put_members_wchar_t.cc ! 3806757668b ./libstdc++-v3/testsuite/22_locale/num_get.cc ! 3952866174b ./libstdc++-v3/testsuite/22_locale/num_get_members_char.cc ! 499896641b ./libstdc++-v3/testsuite/22_locale/num_get_members_wchar_t.cc ! 3109277057b ./libstdc++-v3/testsuite/22_locale/numpunct_byname.cc ! 481449220b ./libstdc++-v3/testsuite/22_locale/numpunct.cc ! 2198705734b ./libstdc++-v3/testsuite/22_locale/numpunct_members_char.cc ! 1887115970b ./libstdc++-v3/testsuite/22_locale/numpunct_members_wchar_t.cc ! 2013396522b ./libstdc++-v3/testsuite/22_locale/num_put.cc ! 3741350549b ./libstdc++-v3/testsuite/22_locale/num_put_members_char.cc ! 243311744b ./libstdc++-v3/testsuite/22_locale/num_put_members_wchar_t.cc ! 2592583186b ./libstdc++-v3/testsuite/22_locale/operators.cc 2943563602b ./libstdc++-v3/testsuite/22_locale/static_members.cc ! 3529549306b ./libstdc++-v3/testsuite/22_locale/time_get.cc ! 808845239b ./libstdc++-v3/testsuite/22_locale/time_get_members_char.cc ! 2876140131b ./libstdc++-v3/testsuite/22_locale/time_get_members_wchar_t.cc ! 4249879313b ./libstdc++-v3/testsuite/22_locale/time_put.cc ! 635176586b ./libstdc++-v3/testsuite/22_locale/time_put_members_char.cc ! 3548679787b ./libstdc++-v3/testsuite/22_locale/time_put_members_wchar_t.cc ! 2738492066b ./libstdc++-v3/testsuite/23_containers/bitset_ctor.cc ! 4248533082b ./libstdc++-v3/testsuite/23_containers/bitset_members.cc 897013241b ./libstdc++-v3/testsuite/23_containers/bitset_shift.cc + 298271417b ./libstdc++-v3/testsuite/23_containers/deque_ctor.cc + 205784061b ./libstdc++-v3/testsuite/23_containers/list_capacity.cc + 326983922b ./libstdc++-v3/testsuite/23_containers/list_ctor.cc + 599293253b ./libstdc++-v3/testsuite/23_containers/list_modifiers.cc + 4244756936b ./libstdc++-v3/testsuite/23_containers/list_operators.cc 307316045b ./libstdc++-v3/testsuite/23_containers/map_insert.cc ! 1772243688b ./libstdc++-v3/testsuite/23_containers/map_operators.cc ! 3789154851b ./libstdc++-v3/testsuite/23_containers/multiset.cc ! 4102929314b ./libstdc++-v3/testsuite/23_containers/set_operators.cc ! 1719624688b ./libstdc++-v3/testsuite/23_containers/vector_bool.cc 2845787844b ./libstdc++-v3/testsuite/23_containers/vector_capacity.cc ! 2149604858b ./libstdc++-v3/testsuite/23_containers/vector_ctor.cc 3683155594b ./libstdc++-v3/testsuite/23_containers/vector_element_access.cc ! 4203207973b ./libstdc++-v3/testsuite/23_containers/vector_modifiers.cc ! 3679802360b ./libstdc++-v3/testsuite/24_iterators/back_insert_iterator.cc ! 2736134729b ./libstdc++-v3/testsuite/24_iterators/front_insert_iterator.cc ! 1154183743b ./libstdc++-v3/testsuite/24_iterators/insert_iterator.cc ! 714376333b ./libstdc++-v3/testsuite/24_iterators/istreambuf_iterator.cc ! 3795589628b ./libstdc++-v3/testsuite/24_iterators/istream_iterator.cc ! 2213561533b ./libstdc++-v3/testsuite/24_iterators/iterator.cc ! 1144199940b ./libstdc++-v3/testsuite/24_iterators/ostreambuf_iterator.cc ! 3195646624b ./libstdc++-v3/testsuite/24_iterators/ostream_iterator.cc ! 1944522737b ./libstdc++-v3/testsuite/24_iterators/rel_ops.cc ! 2512302022b ./libstdc++-v3/testsuite/24_iterators/reverse_iterator.cc ! 1024863451b ./libstdc++-v3/testsuite/25_algorithms/binary_search.cc ! 3359092851b ./libstdc++-v3/testsuite/25_algorithms/copy.cc 499887025b ./libstdc++-v3/testsuite/25_algorithms/equal.cc + 2307649178b ./libstdc++-v3/testsuite/25_algorithms/heap.cc 3229510528b ./libstdc++-v3/testsuite/25_algorithms/lower_bound.cc 4253988362b ./libstdc++-v3/testsuite/25_algorithms/min_max.cc + 737927184b ./libstdc++-v3/testsuite/25_algorithms/partition.cc + 2077920331b ./libstdc++-v3/testsuite/25_algorithms/rotate.cc + 2843376967b ./libstdc++-v3/testsuite/25_algorithms/sort.cc + 3487714017b ./libstdc++-v3/testsuite/25_algorithms/unique.cc 825452073b ./libstdc++-v3/testsuite/26_numerics/binary_closure.cc 4174117585b ./libstdc++-v3/testsuite/26_numerics/buggy_complex.cc ! 3446031285b ./libstdc++-v3/testsuite/26_numerics/c99_classification_macros_c.cc 477083436b ./libstdc++-v3/testsuite/26_numerics/c99_classification_macros_c++.cc 162388279b ./libstdc++-v3/testsuite/26_numerics/c_math.cc ! 3345793307b ./libstdc++-v3/testsuite/26_numerics/complex_inserters_extractors.cc 4028172023b ./libstdc++-v3/testsuite/26_numerics/complex_value.cc 2560606731b ./libstdc++-v3/testsuite/26_numerics/fabs_inline.cc + 2007868264b ./libstdc++-v3/testsuite/26_numerics/slice_array_assignment.cc + 2493789332b ./libstdc++-v3/testsuite/26_numerics/sum_diff.cc 2203801309b ./libstdc++-v3/testsuite/26_numerics/valarray.cc 2289035929b ./libstdc++-v3/testsuite/26_numerics/valarray_const_bracket.cc ! 882132708b ./libstdc++-v3/testsuite/27_io/filebuf.cc 4294967295b ./libstdc++-v3/testsuite/27_io/filebuf_members-1.tst 4294967295b ./libstdc++-v3/testsuite/27_io/filebuf_members-1.txt ! 3299934909b ./libstdc++-v3/testsuite/27_io/filebuf_members.cc ! 4204648704b ./libstdc++-v3/testsuite/27_io/filebuf_virtuals-1.tst ! 4204648704b ./libstdc++-v3/testsuite/27_io/filebuf_virtuals-1.txt ! 655821823b ./libstdc++-v3/testsuite/27_io/filebuf_virtuals-2.tst ! 1896106013b ./libstdc++-v3/testsuite/27_io/filebuf_virtuals-3.tst ! 2105624580b ./libstdc++-v3/testsuite/27_io/filebuf_virtuals.cc 1987901042b ./libstdc++-v3/testsuite/27_io/fpos.cc 358840366b ./libstdc++-v3/testsuite/27_io/fstream_members.cc 4294967295b ./libstdc++-v3/testsuite/27_io/ifstream_members-1.tst 4294967295b ./libstdc++-v3/testsuite/27_io/ifstream_members-1.txt 2885752721b ./libstdc++-v3/testsuite/27_io/ifstream_members.cc ! 2822576026b ./libstdc++-v3/testsuite/27_io/instantiations.cc ! 1158981090b ./libstdc++-v3/testsuite/27_io/ios_base_callbacks.cc 3079502096b ./libstdc++-v3/testsuite/27_io/ios_base_members_static-1.tst 2904656871b ./libstdc++-v3/testsuite/27_io/ios_base_members_static.cc ! 446281776b ./libstdc++-v3/testsuite/27_io/ios_base_storage.cc 3028704293b ./libstdc++-v3/testsuite/27_io/ios_ctor.cc ! 2560126374b ./libstdc++-v3/testsuite/27_io/ios_init.cc ! 1589179378b ./libstdc++-v3/testsuite/27_io/ios_manip_basefield.cc ! 2543133138b ./libstdc++-v3/testsuite/27_io/ios_manip_fmtflags.cc 402291869b ./libstdc++-v3/testsuite/27_io/ios_members.cc ! 1406172954b ./libstdc++-v3/testsuite/27_io/iostream.cc ! 2441613414b ./libstdc++-v3/testsuite/27_io/iostream_members.cc ! 3532934373b ./libstdc++-v3/testsuite/27_io/istream.cc ! 982148445b ./libstdc++-v3/testsuite/27_io/istream_extractor_arith.cc 262004209b ./libstdc++-v3/testsuite/27_io/istream_extractor_char.cc 1013375821b ./libstdc++-v3/testsuite/27_io/istream_extractor_other-1.tst 1013375821b ./libstdc++-v3/testsuite/27_io/istream_extractor_other-1.txt *************** *** 9792,9843 **** 3951789237b ./libstdc++-v3/testsuite/27_io/istream_seeks-1.txt 4294967295b ./libstdc++-v3/testsuite/27_io/istream_seeks-2.tst 2129191219b ./libstdc++-v3/testsuite/27_io/istream_seeks-3.tst ! 2005418869b ./libstdc++-v3/testsuite/27_io/istream_seeks.cc 3260211703b ./libstdc++-v3/testsuite/27_io/istream_sentry.cc 38986799b ./libstdc++-v3/testsuite/27_io/istream_unformatted-1.tst 38986799b ./libstdc++-v3/testsuite/27_io/istream_unformatted-1.txt ! 2745209174b ./libstdc++-v3/testsuite/27_io/istream_unformatted.cc 2607021483b ./libstdc++-v3/testsuite/27_io/istringstream_members.cc ! 496005118b ./libstdc++-v3/testsuite/27_io/narrow_stream_objects.cc 4294967295b ./libstdc++-v3/testsuite/27_io/ofstream_members-1.tst 2333857258b ./libstdc++-v3/testsuite/27_io/ofstream_members.cc ! 1339570826b ./libstdc++-v3/testsuite/27_io/ostream.cc ! 2788616858b ./libstdc++-v3/testsuite/27_io/ostream_inserter_arith.cc 1556078817b ./libstdc++-v3/testsuite/27_io/ostream_inserter_char-1.tst 1556078817b ./libstdc++-v3/testsuite/27_io/ostream_inserter_char-1.txt ! 812427060b ./libstdc++-v3/testsuite/27_io/ostream_inserter_char.cc 4204648704b ./libstdc++-v3/testsuite/27_io/ostream_inserter_other-1.tst 4204648704b ./libstdc++-v3/testsuite/27_io/ostream_inserter_other-2.tst ! 4286505089b ./libstdc++-v3/testsuite/27_io/ostream_inserter_other.cc ! 962776286b ./libstdc++-v3/testsuite/27_io/ostream_manip.cc 4294967295b ./libstdc++-v3/testsuite/27_io/ostream_seeks-1.tst ! 1270935874b ./libstdc++-v3/testsuite/27_io/ostream_seeks.cc 4124709644b ./libstdc++-v3/testsuite/27_io/ostream_unformatted.cc 3304429615b ./libstdc++-v3/testsuite/27_io/ostringstream_members.cc ! 57182980b ./libstdc++-v3/testsuite/27_io/streambuf.cc ! 3983604379b ./libstdc++-v3/testsuite/27_io/stringbuf.cc ! 256529737b ./libstdc++-v3/testsuite/27_io/stringbuf_virtuals.cc ! 3323753738b ./libstdc++-v3/testsuite/27_io/stringstream.cc 1600633309b ./libstdc++-v3/testsuite/27_io/stringstream_members.cc 365205754b ./libstdc++-v3/testsuite/27_io/wide_stream_objects.cc 872857903b ./libstdc++-v3/testsuite/config/default.exp ! 857963154b ./libstdc++-v3/testsuite/ext/headers.cc ! 1283007056b ./libstdc++-v3/testsuite_flags.in ! 1601794371b ./libstdc++-v3/testsuite/lib/libstdc++-v3-dg.exp 2361428628b ./libstdc++-v3/testsuite/libstdc++-v3.dg/dg.exp 2294107082b ./libstdc++-v3/testsuite/Makefile.am ! 2744043161b ./libstdc++-v3/testsuite/Makefile.in 1352817621b ./libstdc++-v3/testsuite/printnow.c ! 2848669759b ./libstdc++-v3/testsuite/README ! 1460178224b ./libstdc++-v3/testsuite/testsuite_hooks.h 4084702431b ./libtool.m4 2081401147b ./ltcf-c.sh 534669854b ./ltcf-cxx.sh 3594421631b ./ltcf-gcj.sh 30175378b ./ltconfig ! 4261167591b ./ltmain.sh ! 585133217b ./MAINTAINERS ! 253028645b ./Makefile.in 990942143b ./missing 2656466409b ./mkdep 4236112450b ./mkinstalldirs --- 14086,14168 ---- 3951789237b ./libstdc++-v3/testsuite/27_io/istream_seeks-1.txt 4294967295b ./libstdc++-v3/testsuite/27_io/istream_seeks-2.tst 2129191219b ./libstdc++-v3/testsuite/27_io/istream_seeks-3.tst ! 1606780265b ./libstdc++-v3/testsuite/27_io/istream_seeks.cc 3260211703b ./libstdc++-v3/testsuite/27_io/istream_sentry.cc 38986799b ./libstdc++-v3/testsuite/27_io/istream_unformatted-1.tst 38986799b ./libstdc++-v3/testsuite/27_io/istream_unformatted-1.txt ! 2702886872b ./libstdc++-v3/testsuite/27_io/istream_unformatted.cc 2607021483b ./libstdc++-v3/testsuite/27_io/istringstream_members.cc ! 611146282b ./libstdc++-v3/testsuite/27_io/narrow_stream_objects.cc 4294967295b ./libstdc++-v3/testsuite/27_io/ofstream_members-1.tst 2333857258b ./libstdc++-v3/testsuite/27_io/ofstream_members.cc ! 2500839812b ./libstdc++-v3/testsuite/27_io/ostream.cc ! 4258844886b ./libstdc++-v3/testsuite/27_io/ostream_inserter_arith.cc 1556078817b ./libstdc++-v3/testsuite/27_io/ostream_inserter_char-1.tst 1556078817b ./libstdc++-v3/testsuite/27_io/ostream_inserter_char-1.txt ! 1233804706b ./libstdc++-v3/testsuite/27_io/ostream_inserter_char.cc 4204648704b ./libstdc++-v3/testsuite/27_io/ostream_inserter_other-1.tst 4204648704b ./libstdc++-v3/testsuite/27_io/ostream_inserter_other-2.tst ! 457585208b ./libstdc++-v3/testsuite/27_io/ostream_inserter_other.cc ! 1438625590b ./libstdc++-v3/testsuite/27_io/ostream_manip.cc 4294967295b ./libstdc++-v3/testsuite/27_io/ostream_seeks-1.tst ! 169443827b ./libstdc++-v3/testsuite/27_io/ostream_seeks.cc 4124709644b ./libstdc++-v3/testsuite/27_io/ostream_unformatted.cc 3304429615b ./libstdc++-v3/testsuite/27_io/ostringstream_members.cc ! 989576790b ./libstdc++-v3/testsuite/27_io/standard_manipulators.cc ! 2336603373b ./libstdc++-v3/testsuite/27_io/streambuf.cc ! 1939814633b ./libstdc++-v3/testsuite/27_io/stringbuf.cc ! 826108650b ./libstdc++-v3/testsuite/27_io/stringbuf_virtuals.cc ! 2779057461b ./libstdc++-v3/testsuite/27_io/stringstream.cc 1600633309b ./libstdc++-v3/testsuite/27_io/stringstream_members.cc 365205754b ./libstdc++-v3/testsuite/27_io/wide_stream_objects.cc + 3762370376b ./libstdc++-v3/testsuite/backward/header_deque_h.cc + 651880874b ./libstdc++-v3/testsuite/backward/header_hash_map_h.cc + 2293472298b ./libstdc++-v3/testsuite/backward/header_hash_set_h.cc + 1063503519b ./libstdc++-v3/testsuite/backward/header_hashtable_h.cc + 1384531088b ./libstdc++-v3/testsuite/backward/header_iterator_h.cc + 1470125519b ./libstdc++-v3/testsuite/backward/header_rope_h.cc + 4158324753b ./libstdc++-v3/testsuite/backward/header_slist_h.cc + 4284948430b ./libstdc++-v3/testsuite/backward/header_tempbuf_h.cc 872857903b ./libstdc++-v3/testsuite/config/default.exp ! 3323103327b ./libstdc++-v3/testsuite/ext/allocators.cc ! 1828531587b ./libstdc++-v3/testsuite/ext/concept_checks.cc ! 2382325141b ./libstdc++-v3/testsuite/ext/hash_set.cc ! 2849413443b ./libstdc++-v3/testsuite/ext/headers.cc ! 2661012354b ./libstdc++-v3/testsuite/ext/rope.cc ! 1165386526b ./libstdc++-v3/testsuite_flags.in ! 4278875690b ./libstdc++-v3/testsuite/lib/libstdc++-v3-dg.exp ! 3712176129b ./libstdc++-v3/testsuite/lib/prune.exp 2361428628b ./libstdc++-v3/testsuite/libstdc++-v3.dg/dg.exp 2294107082b ./libstdc++-v3/testsuite/Makefile.am ! 2918951225b ./libstdc++-v3/testsuite/Makefile.in 1352817621b ./libstdc++-v3/testsuite/printnow.c ! 443433597b ./libstdc++-v3/testsuite/README ! 1830362882b ./libstdc++-v3/testsuite/testsuite_hooks.h ! 156463796b ./libstdc++-v3/testsuite/thread/pthread1.cc ! 1550931445b ./libstdc++-v3/testsuite/thread/pthread2.cc ! 1829037829b ./libstdc++-v3/testsuite/thread/pthread3.cc ! 3999709480b ./libstdc++-v3/testsuite/thread/pthread4.cc ! 3966130685b ./libstdc++-v3/testsuite/thread/pthread5.cc ! 2701150431b ./libstdc++-v3/testsuite/thread/pthread6.cc 4084702431b ./libtool.m4 2081401147b ./ltcf-c.sh 534669854b ./ltcf-cxx.sh 3594421631b ./ltcf-gcj.sh 30175378b ./ltconfig ! 509321472b ./ltmain.sh ! 1311810028b ./MAINTAINERS ! 1506582330b ./maintainer-scripts/ChangeLog ! 1905552954b ./maintainer-scripts/crontab ! 4171969357b ./maintainer-scripts/doc_exclude ! 2507647076b ./maintainer-scripts/gcc_release ! 3126840705b ./maintainer-scripts/README ! 4169093075b ./maintainer-scripts/snapshot-index.html ! 1797615493b ./maintainer-scripts/snapshot-README ! 3359505648b ./maintainer-scripts/update_version ! 612565256b ./maintainer-scripts/update_web_docs ! 2568232642b ./maintainer-scripts/update_web_docs_libstdcxx ! 1719002991b ./maintainer-scripts/update_web_docs_old ! 136033403b ./Makefile.in 990942143b ./missing 2656466409b ./mkdep 4236112450b ./mkinstalldirs *************** *** 9847,9861 **** 1370970362b ./ylwrap 1221785251b ./zlib/acinclude.m4 63064805b ./zlib/aclocal.m4 ! 3719585698b ./zlib/adler32.c 2360440520b ./zlib/algorithm.txt 1537725969b ./zlib/amiga/Makefile.pup 3919607569b ./zlib/amiga/Makefile.sas ! 3935669306b ./zlib/ChangeLog ! 2655845150b ./zlib/ChangeLog.gcj ! 3703350509b ./zlib/compress.c ! 3871307965b ./zlib/configure ! 2035691596b ./zlib/configure.in 215845136b ./zlib/contrib/asm386/gvmat32.asm 4143184108b ./zlib/contrib/asm386/gvmat32c.c 2920733537b ./zlib/contrib/asm386/mkgvmt32.bat --- 14172,14186 ---- 1370970362b ./ylwrap 1221785251b ./zlib/acinclude.m4 63064805b ./zlib/aclocal.m4 ! 1297198925b ./zlib/adler32.c 2360440520b ./zlib/algorithm.txt 1537725969b ./zlib/amiga/Makefile.pup 3919607569b ./zlib/amiga/Makefile.sas ! 2136479423b ./zlib/ChangeLog ! 3062272324b ./zlib/ChangeLog.gcj ! 720988996b ./zlib/compress.c ! 1404772722b ./zlib/configure ! 1923259853b ./zlib/configure.in 215845136b ./zlib/contrib/asm386/gvmat32.asm 4143184108b ./zlib/contrib/asm386/gvmat32c.c 2920733537b ./zlib/contrib/asm386/mkgvmt32.bat *************** *** 9877,9883 **** 2183495051b ./zlib/contrib/delphi2/zlib.pas 26085236b ./zlib/contrib/delphi/zlibdef.pas 1981000180b ./zlib/contrib/delphi/zlib.mak ! 2013096941b ./zlib/contrib/iostream2/zstream.h 3297987584b ./zlib/contrib/iostream2/zstream_test.cpp 339148404b ./zlib/contrib/iostream/test.cpp 1960805227b ./zlib/contrib/iostream/zfstream.cpp --- 14202,14208 ---- 2183495051b ./zlib/contrib/delphi2/zlib.pas 26085236b ./zlib/contrib/delphi/zlibdef.pas 1981000180b ./zlib/contrib/delphi/zlib.mak ! 2533136546b ./zlib/contrib/iostream2/zstream.h 3297987584b ./zlib/contrib/iostream2/zstream_test.cpp 339148404b ./zlib/contrib/iostream/test.cpp 1960805227b ./zlib/contrib/iostream/zfstream.cpp *************** *** 9901,9932 **** 1408736380b ./zlib/contrib/untgz/makefile.w32 1384858048b ./zlib/contrib/untgz/untgz.c 2352798505b ./zlib/contrib/visual-basic.txt ! 3703233222b ./zlib/crc32.c ! 2969379996b ./zlib/deflate.c ! 358838013b ./zlib/deflate.h 1690938184b ./zlib/descrip.mms ! 3065406481b ./zlib/example.c ! 3874989574b ./zlib/FAQ ! 935289373b ./zlib/gzio.c 467711448b ./zlib/INDEX ! 3646818092b ./zlib/infblock.c ! 3023541430b ./zlib/infblock.h ! 1796372121b ./zlib/infcodes.c ! 1229370580b ./zlib/infcodes.h ! 1726002210b ./zlib/inffast.c ! 1849570361b ./zlib/inffast.h 490193883b ./zlib/inffixed.h ! 1877330520b ./zlib/inflate.c ! 478576682b ./zlib/inftrees.c ! 2471240806b ./zlib/inftrees.h ! 2558688888b ./zlib/infutil.c ! 2271525925b ./zlib/infutil.h ! 1133202278b ./zlib/Makefile.am ! 3677194275b ./zlib/Makefile.in 3707467235b ./zlib/Makefile.riscos ! 2720096141b ./zlib/maketree.c 3901505907b ./zlib/Make_vms.com ! 1440410944b ./zlib/minigzip.c 955312409b ./zlib/msdos/Makefile.b32 3122518693b ./zlib/msdos/Makefile.bor 73399342b ./zlib/msdos/Makefile.dj2 --- 14226,14257 ---- 1408736380b ./zlib/contrib/untgz/makefile.w32 1384858048b ./zlib/contrib/untgz/untgz.c 2352798505b ./zlib/contrib/visual-basic.txt ! 4189021895b ./zlib/crc32.c ! 1822942177b ./zlib/deflate.c ! 1789868741b ./zlib/deflate.h 1690938184b ./zlib/descrip.mms ! 2345539147b ./zlib/example.c ! 1790959550b ./zlib/FAQ ! 703718503b ./zlib/gzio.c 467711448b ./zlib/INDEX ! 3009787290b ./zlib/infblock.c ! 34847356b ./zlib/infblock.h ! 763710488b ./zlib/infcodes.c ! 3334929562b ./zlib/infcodes.h ! 1206037810b ./zlib/inffast.c ! 3339512059b ./zlib/inffast.h 490193883b ./zlib/inffixed.h ! 2412593958b ./zlib/inflate.c ! 3025160042b ./zlib/inftrees.c ! 2634414216b ./zlib/inftrees.h ! 788977750b ./zlib/infutil.c ! 2297950969b ./zlib/infutil.h ! 3601491819b ./zlib/Makefile.am ! 1642730173b ./zlib/Makefile.in 3707467235b ./zlib/Makefile.riscos ! 196153738b ./zlib/maketree.c 3901505907b ./zlib/Make_vms.com ! 229496420b ./zlib/minigzip.c 955312409b ./zlib/msdos/Makefile.b32 3122518693b ./zlib/msdos/Makefile.bor 73399342b ./zlib/msdos/Makefile.dj2 *************** *** 9943,9954 **** 3298347746b ./zlib/nt/zlib.dnt 2605576410b ./zlib/os2/Makefile.os2 99579017b ./zlib/os2/zlib.def ! 72241230b ./zlib/README ! 1841308310b ./zlib/trees.c 10665304b ./zlib/trees.h ! 2617429507b ./zlib/uncompr.c ! 1626171633b ./zlib/zconf.h ! 1416447192b ./zlib/zlib.3 ! 243912721b ./zlib/zlib.h ! 2179909986b ./zlib/zutil.c ! 1925582594b ./zlib/zutil.h --- 14268,14280 ---- 3298347746b ./zlib/nt/zlib.dnt 2605576410b ./zlib/os2/Makefile.os2 99579017b ./zlib/os2/zlib.def ! 2343974137b ./zlib/README ! 2789763235b ./zlib/trees.c 10665304b ./zlib/trees.h ! 1566688640b ./zlib/uncompr.c ! 2035162903b ./zlib/zconf.h ! 3626005175b ./zlib/zlib.3 ! 3609968891b ./zlib/zlib.h ! 191319815b ./zlib/zlib.html ! 957671919b ./zlib/zutil.c ! 4163685086b ./zlib/zutil.h diff -Nrc3pad gcc-3.0.4/BUGS gcc-3.1/BUGS *** gcc-3.0.4/BUGS Wed Feb 20 19:41:08 2002 --- gcc-3.1/BUGS Wed May 15 02:40:23 2002 *************** Table of Contents *** 12,36 **** + [4]What we DON'T want + [5]Where to post it + [6]Detailed bug reporting instructions ! * [7]Managing Bugs (GNATS and the test-suite) ! * [8]Frequently Reported Bugs in GCC 3.0 ! + [9]General ! + [10]Fortran ! + [11]C ! + [12]C++ ! o [13]Common problems updating from G++ 2.95 to G++ 3.0 ! o [14]Non-bugs ! o [15]Missing features ! o [16]Parse errors for "simple" code ! o [17]Optimization at -O3 takes a very long time _________________________________________________________________ Reporting Bugs ! Our preferred way of receiving bugs is via the [18]GCC GNATS bug reporting system. ! Before you report a bug, please check the [19]list of well-known bugs and, if possible in any way, try a current development snapshot. If you want to report a bug with versions of GCC before 3.0 we strongly recommend upgrading to the current release first. --- 12,37 ---- + [4]What we DON'T want + [5]Where to post it + [6]Detailed bug reporting instructions ! + [7]Detailed bug reporting instructions for GNAT ! * [8]Managing Bugs (GNATS and the test-suite) ! * [9]Frequently Reported Bugs in GCC 3.0 ! + [10]General ! + [11]Fortran ! + [12]C ! + [13]C++ ! o [14]Common problems updating from G++ 2.95 to G++ 3.0 ! o [15]Non-bugs ! o [16]Missing features ! o [17]Parse errors for "simple" code ! o [18]Optimization at -O3 takes a very long time _________________________________________________________________ Reporting Bugs ! Our preferred way of receiving bugs is via the [19]GCC GNATS bug reporting system. ! Before you report a bug, please check the [20]list of well-known bugs and, if possible in any way, try a current development snapshot. If you want to report a bug with versions of GCC before 3.0 we strongly recommend upgrading to the current release first. *************** Summarized bug reporting instructions *** 55,62 **** * the complete command line that triggers the bug; * the compiler output (error messages, warnings, etc.); and * the preprocessed file (*.i*) that triggers the bug, generated by ! adding -save-temps to the complete compilation command (see ! below). What we do not want --- 56,64 ---- * the complete command line that triggers the bug; * the compiler output (error messages, warnings, etc.); and * the preprocessed file (*.i*) that triggers the bug, generated by ! adding -save-temps to the complete compilation command, or, in the ! case of a bug report for the GNAT front end, a complete set of ! source files (see below). What we do not want *************** Summarized bug reporting instructions *** 96,107 **** Where to post it ! Please submit your bug report directly to the [20]GCC GNATS bug database. Only if this is not possible, mail all information to ! [21]bug-gcc@gnu.org or [22]gcc-bugs@gcc.gnu.org. Detailed bug reporting instructions In general, all the information we need can be obtained by collecting the command line below, as well as its output and the preprocessed file it generates. --- 98,116 ---- Where to post it ! Please submit your bug report directly to the [21]GCC GNATS bug database. Only if this is not possible, mail all information to ! [22]bug-gcc@gnu.org or [23]gcc-bugs@gcc.gnu.org. ! ! The GCC lists have message size limits (200 kbytes) and bug reports ! over those limits will currently be bounced. If your bug is larger ! than that, please post it using the [24]GCC GNATS bug database. Detailed bug reporting instructions + Please refer to the [25]next section when reporting bugs in GNAT, the + Ada compiler. + In general, all the information we need can be obtained by collecting the command line below, as well as its output and the preprocessed file it generates. *************** Detailed bug reporting instructions *** 142,151 **** the body of your bug report as plain text, even if needlessly duplicated as part of an archive. - The gcc lists have message size limits (200 kbytes) and bug reports - over those limits will currently be bounced. If your bug is larger - than that, please post it using the [23]GCC GNATS bug database. - If you fail to supply enough information for a bug report to be reproduced, someone will probably ask you to post additional information (or just ignore your bug report, if they're in a bad day, --- 151,156 ---- *************** Detailed bug reporting instructions *** 156,161 **** --- 161,204 ---- supplied in the incomplete bug report (including the preprocessor output), so that the new bug report is self-contained. + Detailed bug reporting instructions for GNAT + + See the [26]previous section for bug reporting instructions for GCC + language implementations other than Ada. + + Bug reports have to contain at least the following information in + order to be useful: + * the exact version of GCC, as shown by "gcc -v"; + * the system type; + * the options when GCC was configured/built; + * the exact command line passed to the gcc program triggering the + bug (not just the flags passed to gnatmake, but gnatmake prints + the parameters it passed to gcc) + * a collection of source files for reproducing the bug, preferably a + minimal set (see below); + * a description of the expected behavior; + * a description of actual behavior. + + If your code depends on additional source files (usually package + specifications), submit the source code for these compilation units in + a single file that is acceptable input to gnatchop, i.e. contains no + non-Ada text. If the compilation terminated normally, you can usually + obtain a list of dependencies using the "gnatls -d main_unit" command, + where main_unit is the file name of the main compilation unit (which + is also passed to gcc). + + If you report a bug which causes the compiler to print a bug box, + include that bug box in your report, and do not forget to send all the + source files listed after the bug box along with your report. + + If you use gnatprep, be sure to send in preprocessed sources (unless + you have to report a bug in gnatprep). + + When you have checked that your report meets these criteria, please + submit it accoding to our [27]generic instructions. (If you use a + mailing list for reporting, please include an "[Ada]" tag in the + subject.) + Managing Bugs (GNATS and the test-suite) This section contains information mostly intended for GCC *************** General *** 191,197 **** Fortran Fortran bugs are documented in the G77 manual rather than explicitly ! listed here. Please see [24]Known Causes of Trouble with GNU Fortran in the G77 manual. _________________________________________________________________ --- 234,240 ---- Fortran Fortran bugs are documented in the G77 manual rather than explicitly ! listed here. Please see [28]Known Causes of Trouble with GNU Fortran in the G77 manual. _________________________________________________________________ *************** C *** 204,210 **** This has nothing to do with GCC, but people ask us about it a lot. Code like this: ! #include FILE *yyin = stdin; will not compile with GNU libc (GNU/Linux libc6), because stdin is not a constant. This was done deliberately, to make it --- 247,255 ---- This has nothing to do with GCC, but people ask us about it a lot. Code like this: ! #include ! ! FILE *yyin = stdin; will not compile with GNU libc (GNU/Linux libc6), because stdin is not a constant. This was done deliberately, to make it *************** C *** 221,233 **** There is a common misconception that the GCC developers are responsible for GNU libc. These are in fact two entirely ! separate projects; please check the [25]GNU libc web pages for details. Cannot use preprocessor directive in macro arguments. Let me guess... you wrote code that looks something like this: ! memcpy(dest, src, #ifdef PLATFORM1 12 #else 24 #endif ); and you got a whole pile of error messages: --- 266,284 ---- There is a common misconception that the GCC developers are responsible for GNU libc. These are in fact two entirely ! separate projects; please check the [29]GNU libc web pages for details. Cannot use preprocessor directive in macro arguments. Let me guess... you wrote code that looks something like this: ! memcpy(dest, src, ! #ifdef PLATFORM1 ! 12 ! #else ! 24 ! #endif ! ); and you got a whole pile of error messages: *************** C *** 244,291 **** test.c:10: undefined or invalid # directive test.c:11: parse error before `#' ! The problem, simply put, is that GCC's preprocessor does not ! allow you to put #ifdef (or any other directive) inside the ! arguments of a macro. Your C library's happens to ! define memcpy as a macro - this is perfectly legitimate. The ! code therefore will not compile. ! ! We have two good reasons for not allowing directives inside ! macro arguments. First, it is not portable. It is "undefined ! behavior" according to the C standard; that means different ! compilers will do different things with it. Some will give you ! errors. Some will dump core. Some will silently mangle your ! code - you could get the equivalent of ! ! memcpy(dest, src, 1224); ! ! from the above example. A very few might do what you expected ! it to. We therefore feel it is most useful for GCC to reject ! this construct immediately so that it is found and fixed. ! ! Second, it is extraordinarily difficult to implement the ! preprocessor such that it does what you would expect for every ! possible directive found inside a macro argument. The best ! example is perhaps ! ! #define foo(arg) ... arg ... ! foo(blah ! #undef foo ! blah) ! which is impossible to implement in portable C without leaking ! memory. Allowing only a subset of directives would be ! confusing. ! It is always possible to rewrite code which uses conditionals ! inside macros so that it doesn't. You could write the above ! example ! #ifdef PLATFORM1 ! memcpy(dest, src, 12); ! #else ! memcpy(dest, src, 24); ! #endif This is a bit more typing, but I personally think it's better style in addition to being more portable. --- 295,321 ---- test.c:10: undefined or invalid # directive test.c:11: parse error before `#' ! Update: As of GCC 3.2 this kind of construct is always accepted ! and CPP will probably do what you expect, but see the manual ! for detailed semantics. ! However, versions of GCC prior to 3.2 did not allow you to put ! #ifdef (or any other directive) inside the arguments of a ! macro. Your C library's happens to define memcpy as ! a macro - this is perfectly legitimate. The code therefore ! would not compile. ! This kind of code is not portable. It is "undefined behavior" ! according to the C standard; that means different compilers ! will do different things with it. It is always possible to ! rewrite code which uses conditionals inside macros so that it ! doesn't. You could write the above example ! #ifdef PLATFORM1 ! memcpy(dest, src, 12); ! #else ! memcpy(dest, src, 24); ! #endif This is a bit more typing, but I personally think it's better style in addition to being more portable. *************** C++ *** 300,306 **** reported very often, but not yet fixed. While it is certainly better to fix bugs instead of documenting them, this document might save people the effort of writing a bug report when the bug is already ! well-known. [26]How to report bugs tells you how to report a bug. There are many reasons why reported bugs don't get fixed. It might be difficult to fix, or fixing it might break compatibility. Often, --- 330,336 ---- reported very often, but not yet fixed. While it is certainly better to fix bugs instead of documenting them, this document might save people the effort of writing a bug report when the bug is already ! well-known. [30]How to report bugs tells you how to report a bug. There are many reasons why reported bugs don't get fixed. It might be difficult to fix, or fixing it might break compatibility. Often, *************** C++ *** 319,330 **** Common problems updating from G++ 2.95 to G++ 3.0 G++ 3.0 conforms much closer to the ISO C++ standard (available at ! [27]http://www.ncits.org/cplusplus.htm). We have also implemented some of the core and library defect reports (available at ! [28]http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/cwg_defects.html & ! [29]http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-defects.html respectively). * The ABI has changed. This means that both class layout and name mangling is different. You must recompile all c++ libraries (if --- 349,360 ---- Common problems updating from G++ 2.95 to G++ 3.0 G++ 3.0 conforms much closer to the ISO C++ standard (available at ! [31]http://www.ncits.org/cplusplus.htm). We have also implemented some of the core and library defect reports (available at ! [32]http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/cwg_defects.html & ! [33]http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-defects.html respectively). * The ABI has changed. This means that both class layout and name mangling is different. You must recompile all c++ libraries (if *************** C++ *** 383,389 **** both that and an operator delete[] (void *) is provided. Although the produced code functions, it is incompatible with the ABI. GNATS PR 113 tracked this, which is now fixed in the ! 3.1 tree with [30]this patch. Covariant return types We do not implement non-trivial covariant returns. We also --- 413,419 ---- both that and an operator delete[] (void *) is provided. Although the produced code functions, it is incompatible with the ABI. GNATS PR 113 tracked this, which is now fixed in the ! 3.1 tree with [34]this patch. Covariant return types We do not implement non-trivial covariant returns. We also *************** C++ *** 455,461 **** the nearest representable number. This is not a bug in the compiler, but an inherent limitation ! of the float and double types. Please study [31]this paper for more information. Missing features --- 485,491 ---- the nearest representable number. This is not a bug in the compiler, but an inherent limitation ! of the float and double types. Please study [35]this paper for more information. Missing features *************** References *** 551,578 **** 4. http://gcc.gnu.org/bugs.html#dontwant 5. http://gcc.gnu.org/bugs.html#where 6. http://gcc.gnu.org/bugs.html#detailed ! 7. http://gcc.gnu.org/bugs.html#manage ! 8. http://gcc.gnu.org/bugs.html#known ! 9. http://gcc.gnu.org/bugs.html#general ! 10. http://gcc.gnu.org/bugs.html#fortran ! 11. http://gcc.gnu.org/bugs.html#c ! 12. http://gcc.gnu.org/bugs.html#cplusplus ! 13. http://gcc.gnu.org/bugs.html#updating ! 14. http://gcc.gnu.org/bugs.html#nonbugs ! 15. http://gcc.gnu.org/bugs.html#missing ! 16. http://gcc.gnu.org/bugs.html#parsing ! 17. http://gcc.gnu.org/bugs.html#-O3 ! 18. http://gcc.gnu.org/gnats.html ! 19. http://gcc.gnu.org/bugs.html#known ! 20. http://gcc.gnu.org/gnats.html ! 21. mailto:bug-gcc@gnu.org ! 22. mailto:gcc-bugs@gcc.gnu.org ! 23. http://gcc.gnu.org/gnats.html ! 24. http://gcc.gnu.org/onlinedocs/g77_bugs.html ! 25. http://www.gnu.org/software/glibc/ ! 26. http://gcc.gnu.org/bugs.html#report ! 27. http://www.ncits.org/cplusplus.htm ! 28. http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/cwg_defects.html ! 29. http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-defects.html ! 30. http://gcc.gnu.org/ml/gcc-patches/2001-07/msg01302.html ! 31. http://www.validlab.com/goldberg/paper.ps --- 581,612 ---- 4. http://gcc.gnu.org/bugs.html#dontwant 5. http://gcc.gnu.org/bugs.html#where 6. http://gcc.gnu.org/bugs.html#detailed ! 7. http://gcc.gnu.org/bugs.html#gnat ! 8. http://gcc.gnu.org/bugs.html#manage ! 9. http://gcc.gnu.org/bugs.html#known ! 10. http://gcc.gnu.org/bugs.html#general ! 11. http://gcc.gnu.org/bugs.html#fortran ! 12. http://gcc.gnu.org/bugs.html#c ! 13. http://gcc.gnu.org/bugs.html#cplusplus ! 14. http://gcc.gnu.org/bugs.html#updating ! 15. http://gcc.gnu.org/bugs.html#nonbugs ! 16. http://gcc.gnu.org/bugs.html#missing ! 17. http://gcc.gnu.org/bugs.html#parsing ! 18. http://gcc.gnu.org/bugs.html#-O3 ! 19. http://gcc.gnu.org/gnats.html ! 20. http://gcc.gnu.org/bugs.html#known ! 21. http://gcc.gnu.org/gnats.html ! 22. mailto:bug-gcc@gnu.org ! 23. mailto:gcc-bugs@gcc.gnu.org ! 24. http://gcc.gnu.org/gnats.html ! 25. http://gcc.gnu.org/bugs.html#gnat ! 26. http://gcc.gnu.org/bugs.html#detailed ! 27. http://gcc.gnu.org/bugs.html#where ! 28. http://gcc.gnu.org/onlinedocs/g77_bugs.html ! 29. http://www.gnu.org/software/glibc/ ! 30. http://gcc.gnu.org/bugs.html#report ! 31. http://www.ncits.org/cplusplus.htm ! 32. http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/cwg_defects.html ! 33. http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-defects.html ! 34. http://gcc.gnu.org/ml/gcc-patches/2001-07/msg01302.html ! 35. http://www.validlab.com/goldberg/paper.ps diff -Nrc3pad gcc-3.0.4/ChangeLog gcc-3.1/ChangeLog *** gcc-3.0.4/ChangeLog Wed Feb 20 18:38:07 2002 --- gcc-3.1/ChangeLog Wed May 15 02:14:53 2002 *************** *** 1,89 **** ! 2002-02-20 Release Manager ! * GCC 3.0.4 Released. ! 2002-02-20 Release Manager ! * GCC 3.0.4 Released. ! 2002-01-31 Bob Wilson ! * config.sub: Add support for Xtensa processors. ! 2001-12-20 Release Manager ! * GCC 3.0.3 Released. ! 2001-10-23 Release Manager ! * GCC 3.0.2 Released. ! 2001-10-03 Eric Christopher ! * MAINTAINERS: Replace Gavin with myself as MIPS maintainer. ! 2001-10-02 Joseph S. Myers ! * configure: Handle temporary files securely using mkdir. ! 2001-08-19 Release Manager ! * GCC 3.0.1 Released. ! 2001-08-19 Release Manager ! * GCC 3.0.1 Released. ! 2001-08-19 Release Manager ! * GCC 3.0.1 Released. ! 2001-08-13 Andreas Jaeger ! * configure.in: Disable libgcj on s390*-linux targets. ! 2001-08-10 Ulrich Weigand ! * MAINTAINERS (Various maintainers: s390 port): Added myself ! and Hartmut Penner . ! 2001-07-30 Jeff Sturm ! * ltcf-c.sh: Use $objext, not $ac_objext. ! 2001-07-28 Richard Henderson ! * .cvsignore: Add LAST_UPDATED. ! 2001-07-27 Mark Kettenis ! * ltcf-cxx.sh: Add support for GNU. ! 2001-07-22 Timothy Wall * ltcf-c.sh: Don't disable shared libraries for AIX5/IA64. Preserve default settings if using GNU tools with that configuration. * ltcf-cxx.sh: Ditto. * ltcf-gcj.sh: Ditto. ! ! 2001-07-21 Michael Chastain ! * ltconfig: Set max_cmd_len to a maximum of 512Kb, as it seems some HPUX 11.0 systems have trouble with 1MB. Mark as gcc-local. * ltmain.sh: Mark as gcc-local. 2001-07-16 Aldy Hernandez ! * config.sub: Fix mips64vr5000el typo in CPU-COMPANY. 2001-07-12 Stephane Carrez * configure.in (noconfigdirs): Don't compile libiberty, libstdcxx and libgcj on m68hc11/m68hc12. ! 20010617 Release Manager ! * GCC 3.0 Released. 2001-06-13 Joseph S. Myers --- 1,473 ---- ! 2002-05-14 Release Manager ! * GCC 3.1 Released. ! 2002-05-14 Release Manager ! * GCC 3.1 Released. ! 2002-05-04 Alexandre Oliva ! * configure.in (noconfigdirs): Don't disable libgcj on ! sparc64-*-solaris* and sparcv9-*-solaris*. ! 2002-05-03 Alexandre Oliva ! * configure.in: Revert 2002-04-18's patch; fixed in libjava. ! 2002-04-29 Roger Sayle ! * MAINTAINERS: Synchronize with mainline. ! 2002-04-26 Joel Sherrill ! * configure.in (h8300*-*-rtems*): Disable libf2c and libgcj. ! (sparc-*-elf*, sparc64-*-elf*): Disable libgcj. ! 2002-04-22 Ulrich Weigand ! * configure.in: Disable libgcj on s390-linux targets. ! 2002-04-19 Mark Mitchell ! * MAINTAINERS: Add information about purpose of this file. ! 2002-04-18 Tom Tromey ! * configure.in: Disallow configuring libgcj when it is already ! installed and we're using Solaris 2.8 linker. Do enable libgcj on ! Solaris 2.8 by default. For PR libgcj/6158. ! 2002-04-15 Richard Henderson ! * config.guess (sun4u:SunOS:5.*:*): Revert 04-12 change. ! 2002-04-15 Mark Mitchell ! * MAINTAINERS: Remove chill maintainers. ! * Makefile.in (CHILLFLAGS): Remove. ! (CHILL_LIB): Remove. ! (TARGET_CONFIGDIRS): Remove libchill. ! (CHILL_FOR_TARGET): Remove. ! (BASE_FLAGS_TO_PASS): Don't pass CHILLFLAGS, CHILL_FOR_TARGET, or ! CHILL_LIB. ! (CONFIGURE_TARGET_MODULES): Remove configure-target-libchill. ! (CHECK_TARGET_MODULES): Likewise. ! (INSTALL_TARGET_MODULES): Likewise. ! (CLEAN_TARGET_MODULES): Likewise. ! (configure-target-libchill): Remove. ! (all-target-libchill): Remove. ! * configure.in (target_libs): Remove target-libchill. ! Do not compute CHILL_FOR_TARGET. ! * libchill: Remove directory. ! ! 2002-04-12 Richard Henderson ! * config.guess (sun4u:SunOS:5.*:*): Guess sparcv9 if 64-bit isa ! is supported. ! 2002-04-09 Loren J. Rittle ! * configure.in: Add *-*-freebsd* configurations. ! 2002-04-08 Tom Tromey ! * configure.in: Add FLAGS_FOR_TARGET to GCJ_FOR_TARGET. ! Fixes PR libgcj/6068. ! 2002-03-30 Krister Walfridsson ! * configure.in (i*86-*-netbsdelf*): Don't disable libgcj. ! 2002-03-27 Rainer Orth ! * configure.in (alpha*-dec-osf*): Enable libgcj. ! ! 2002-03-24 Nick Clifton ! ! Fix for: PR bootstrap/3591, target/5676 ! * configure.in (mcore-pe): Disable the configuration of ! libstdc++-v3 since exceptions are not supported. ! ! 2002-03-20 Anthony Green ! ! * configure.in: Enable libgcj for xscale-elf target. ! ! 2002-03-16 Alexandre Oliva ! ! * ltmain.sh (relink_command): Fix typo in previous change. ! ! 2002-03-15 Alexandre Oliva ! ! * ltmain.sh (taglist): Initialized. Don't let `CC' tag out of it. ! (relink_command): Added --tag flags. ! (mode=install): If relinking fails; error out. ! ! 2002-03-12 Richard Henderson ! ! * Makefile.in (NOTPARALLEL): New. Use it instead of explicit ! .NOTPARALLEL tag. ! (do-check): Rename from check. ! (check): Allow parallel check. ! ! 2002-03-12 Bob Wilson ! ! * MAINTAINERS: Add myself as maintainer for xtensa port. ! Fix alphabetical order in CPU port maintainer list. ! Remove myself from Write After Approval list. ! ! 2002-03-11 Richard Henderson ! ! * Makefile.in (.NOTPARALLEL): Add fake tag. ! ! 2002-03-07 H.J. Lu (hjl@gnu.org) ! ! * configure.in: Enable gprof for mips*-*-linux*. ! ! 2002-02-28 Alexandre Oliva ! ! * configure.in (libstdcxx_flags): Don't add libstdc++-v3 flags for ! libjava. ! (CXX_FOR_TARGET): Explain why -shared-libgcc here. ! ! 2002-02-23 Alexandre Oliva ! ! * Makefile.in (MAKEINFO): Don't assume makeinfo will be built just ! because its Makefile is there; test for the executable instead. ! ! 2002-02-22 Alexandre Oliva ! ! * configure.in (CXX_FOR_TARGET): Add -shared-libgcc for ! libstdc++-v3 and libjava. ! ! 2002-02-11 Adam Megacz ! ! * gcc/Makefile.in: Removed libstdc++-v3 dependancy for libjava and ! boehm-gc ! ! 2002-02-09 Alexandre Oliva ! ! * config.guess: Updated to 2002-01-30's version. ! * config.sub: Updated to 2002-02-01's version. ! Contribute sh64-elf. ! 2000-12-01 Alexandre Oliva ! * configure.in: Added sh64-*-*. ! ! 2002-02-08 Chris Demetriou ! ! * MAINTAINERS: Belatedly add myself to write after approval list. ! ! Thu Feb 7 12:40:58 CET 2002 Jan Hubicka ! ! * MAINTAINERS: Put self in as maintainer for x86-64 port. ! Remove self as Write After Approval. ! ! 2002-01-31 Geoffrey Keating ! ! * MAINTAINERS: Put self in as maintainer for contrib/regression ! directory. ! ! 2002-01-28 Phil Edwards ! ! * MAINTAINERS: Update my email address. ! ! 2002-01-26 Jason Thorpe ! ! * configure.in (*-*-netbsd*): New. Skip target-newlib, ! target-libiberty, and target-libgloss. Skip Java-related ! libraries if not supported for NetBSD on target CPU. ! ! 2002-01-25 Douglas B Rupp ! ! * install-sh: Use _inst.$$_ for temp file name. ! ! 2002-01-24 Jason Thorpe ! ! * MAINTAINERS (Write After Approval): Move my contact info ! from here... ! (OS Port Maintainers): ...to here (netbsd). ! ! 2002-01-22 Bob Wilson ! ! * MAINTAINERS (Write After Approval): Add myself. ! ! 2002-01-17 H.J. Lu ! ! * Makefile.in (all-fastjar): Also depend on all-libiberty. ! (all-target-fastjar): Also depend on all-target-libiberty. ! ! 2002-01-16 H.J. Lu (hjl@gnu.org) ! ! * config.guess: Import from master sources, rev 1.225. ! * config.sub: Import from master sources, rev 1.238. ! ! 2002-01-16 Kazu Hirata ! ! * MAINTAINERS (Write After Approval): Remove myself. + 2001-12-19 Florian Weimer + + * MAINTAINERS (Write After Approval): Add myself. + + 2001-12-17 Joseph S. Myers + + * MAINTAINERS: Add self as docs co-maintainer. + + 2001-12-11 Matthias Klose + + * MAINTAINERS (Write After Approval): Add myself. + + 2001-12-09 Zack Weinberg + + * MAINTAINERS: Update my email address. + + 2001-12-07 Turly O'Connor + * MAINTAINERS (Write After Approval): Add myself. + * rs6000.c (rs6000_trampoline_size): Handle ABI_DARWIN case. + (rs6000_initialize_trampoline): Call __trampoline_setup for + ABI_DARWIN too. + * darwin-tramp.asm: New file, implements __trampoline_setup. + * t-darwin (LIB2FUNCS_EXTRA): Include darwin-tramp.asm. + + 2001-12-07 Paolo Carlini + + * MAINTAINERS (Write After Approval): Add myself. + + Wed Dec 5 07:33:45 2001 Douglas B. Rupp + + * configure, configure.in: Use temp file for long sed commands. + + 2001-12-03 Laurent Guerby + + * config.sub: Update to version 1.232 on subversion. + + 2001-12-03 Ben Elliston + + * MAINTAINERS: Update mail address for config.* patches. + + 2001-11-27 DJ Delorie + Zack Weinberg + + When build != host, create libiberty for the build machine. + + * Makefile.in (TARGET_CONFIGARGS, BUILD_CONFIGARGS): Replace + CONFIG_ARGUMENTS. + (ALL_BUILD_MODULES_LIST, BUILD_CONFIGDIRS, BUILD_SUBDIR): + New variables. + (ALL_BUILD_MODULES, CONFIGURE_BUILD_MODULES): New variables + and rules. + (all.normal): Depend on ALL_BUILD_MODULES. + (CONFIGURE_TARGET_MODULES rule): Use TARGET_CONFIGARGS. + (all-build-libiberty): Depend on configure-build-libiberty. + + * configure: Calculate and substitute proper value for + ALL_BUILD_MODULES. + * configure.in: Create the build subdirectory. + Calculate and substitute TARGET_CONFIGARGS (formerly + CONFIG_ARGUMENTS); also BUILD_SUBDIR and BUILD_CONFIGARGS (new). + + 2001-11-26 Ziemowit Laski + + * MAINTAINERS (write-after-approval): Add self. + + 2001-11-17 Craig Rodrigues + + * MAINTAINERS (GNATS only accounts): Remove self. + + 2001-11-14 Hans-Peter Nilsson + + * configure.in (noconfigdirs) [h8300*-*-*, h8500-*-*]: Disable + libf2c. + + 2001-11-12 Craig Rodrigues + + * MAINTAINERS (Write After Approval): Add self. + + 2001-11-12 David O'Brien + + * MAINTAINERS: mips and s390 are also CPU ports. + + 2001-11-12 David O'Brien + + * MAINTAINERS: mcore, cris and mmix are also CPU ports. + + 2001-11-11 David O'Brien + + * MAINTAINERS: Alphabetize. + + 2001-11-09 Kazu Hirata + + * MAINTAINERS (Various maintainers: h8 port): Add myself. + + 2001-11-09 John David Anglin + + * MAINTAINERS (Various maintainers: hppa port): Added myself. + + 2001-11-08 Phil Edwards + + * configure.in (--enable-languages): Be more permissive about + syntax. Check for empty lists better. Warn about $LANGUAGES. + + 2001-11-08 Geoffrey Keating + + * config.sub: Import from master sources, rev. 1.230. + * MAINTAINERS: Change 'stormy16' to 'xstormy16'. + + 2001-11-07 Laurent Guerby + + * MAINTAINERS (Write After Approval): Add self. + + 2001-11-06 Hans-Peter Nilsson + + * Makefile.in (MAKEINFO): Use "missing" for makeinfo older than 4.0. + + 2001-11-05 Hans-Peter Nilsson + + * config.sub: Import from master sources, rev 1.226. + * config.guess: Import from master sources, rev 1.216. + + 2001-11-03 Hans-Peter Nilsson + + * configure.in (noconfigdirs) [mmix-*-*]: Disable libgcj. + * MAINTAINERS: Add self as maintainer of MMIX port. + Remove old after-approval entry. + + 2001-10-28 Joseph S. Myers + + * ChangeLog, configure: Fix spelling errors. + + 2001-10-20 Brendan Kehoe + + * MAINTAINERS: Tweak my address. + + Thu Oct 11 21:50:15 2001 J"orn Rennecke + + * MAINTAINERS: Update my email address. + + 2001-10-11 Hans-Peter Nilsson + + * configure.in (noconfigdirs) [cris-*-*]: Disable libgcj. + * MAINTAINERS: Add self as maintainer of CRIS port. + + 2001-10-10 Geert Bosch + + * MAINTAINERS (Various maintainers: Ada front end): + Added Robert Dewar. + + 2001-10-03 David Billinghurst + + * MAINTAINERS (Write After Approval): Added self + + 2001-10-02 Geert Bosch + + * MAINTAINERS (Various maintainers: Ada front end): Added myself. + + 2001-10-02 Joseph S. Myers + + * configure: Handle temporary files securely using mkdir. + + 2001-09-29 Alexandre Oliva + + * Makefile.in (configure-target-gperf): Depend on $(ALL_GCC_CXX). + + 2001-09-26 Will Cohen + + * configure.in (*-*-linux*): Disable configuration of target-newlib + and target-libgloss. + + 2001-09-26 Alexandre Oliva + + * Makefile.in (EXTRA_TARGET_FLAGS): Pass RANLIB_FOR_TARGET for + RANLIB. + + 2001-09-21 Alexandre Oliva + + * Makefile.in (AS_FOR_TARGET, LD_FOR_TARGET, + DLLTOOL_FOR_TARGET, WINDRES_FOR_TARGET, AR_FOR_TARGET, + RANLIB_FOR_TARGET, NM_FOR_TARGET): Don't use double quotes to + avoid quotes nesting problems. + (NATIVE_CHECK_MODULES): Ditto, just for consistency. + (DO_X): Export only variables that are set. + + 2001-09-19 Ben Elliston + + * configure.in (sparc-sun-solaris2*): Don't use /usr/bin/which on + Solaris when testing for the /usr/ucb/cc compiler; it has incorrect + semantics. Use the shell built-in "type" command instead. + + 2001-08-31 Alexandre Oliva + + Merged from gcc-3_0-branch: + 2001-07-30 Jeff Sturm + * ltcf-c.sh: Use $objext, not $ac_objext. + 2001-07-27 Mark Kettenis + * ltcf-cxx.sh: Add support for GNU. + 2001-07-22 Timothy Wall * ltcf-c.sh: Don't disable shared libraries for AIX5/IA64. Preserve default settings if using GNU tools with that configuration. * ltcf-cxx.sh: Ditto. * ltcf-gcj.sh: Ditto. ! 2001-07-21 Michael Chastain * ltconfig: Set max_cmd_len to a maximum of 512Kb, as it seems some HPUX 11.0 systems have trouble with 1MB. Mark as gcc-local. * ltmain.sh: Mark as gcc-local. + 2001-08-30 Eric Christopher + Jason Eckhardt + + * config.guess: Merge from master sources. + * config.sub: Merge from master sources, add support for mipsisa32. + + 2001-08-25 Geoffrey Keating + * config.sub: Merge from master sources, rev 1.219. + * MAINTAINERS: Add self as contact for stormy16 port. + + 2001-08-14 Zack Weinberg + + * config.sub: Merge from master sources, rev 1.218. + * config.guess: Merge from master sources, rev 1.209. + + 2001-08-11 Graham Stott + + * Makefile.in (check-c++): Add missing semicolon. + + Mon Jul 30 19:24:13 CEST 2001 Jan Hubicka + + * MAINTAINERS (Various maitainers: predict.def): Added myself. + + 2001-07-30 Eric Christopher + + * MAINTAINERS (Various maintainers: mips port): Added myself. + + 2001-07-25 Andrew Haley + + * configure.in (sh-*-linux*): New. + + 2001-07-27 Richard Henderson + + * .cvsignore: Add LAST_UPDATED. + + 2001-07-23 Ulrich Weigand + + * MAINTAINERS (Various maintainers: s390 port): Added myself. + 2001-07-16 Aldy Hernandez ! * config.sub: Fix mips64vr5000el typo in CPU-COMPANY. ! ! Fri Jul 13 14:31:57 2001 Nicola Pero ! ! * MAINTAINERS (Write After Approval): Added myself. 2001-07-12 Stephane Carrez * configure.in (noconfigdirs): Don't compile libiberty, libstdcxx and libgcj on m68hc11/m68hc12. ! 2001-06-27 H.J. Lu (hjl@gnu.org) ! * Makefile (CFLAGS_FOR_BUILD): New. ! (EXTRA_GCC_FLAGS): Add CFLAGS_FOR_BUILD. 2001-06-13 Joseph S. Myers *************** *** 103,118 **** * config-ml.in (powerpc-*-* | rs6000-*-*): Allow aix64 and pthread multilibs to be disabled. 2001-06-09 Alexandre Oliva * config.guess: Import CVS version 1.195. * config.sub: Import CVS version 1.212. - 2001-06-08 Loren J. Rittle - - * MAINTAINERS: Update e-mail address changes from mainline. - Add myself to write after approval list. - 2001-06-08 Alexandre Oliva , Jeff Sturm * Makefile.in (AS_FOR_TARGET, LD_FOR_TARGET, NM_FOR_TARGET): If --- 487,501 ---- * config-ml.in (powerpc-*-* | rs6000-*-*): Allow aix64 and pthread multilibs to be disabled. + 2001-06-11 Daniel Berlin + + * MAINTAINERS (Write After Approval): Add myself. + 2001-06-09 Alexandre Oliva * config.guess: Import CVS version 1.195. * config.sub: Import CVS version 1.212. 2001-06-08 Alexandre Oliva , Jeff Sturm * Makefile.in (AS_FOR_TARGET, LD_FOR_TARGET, NM_FOR_TARGET): If *************** *** 125,136 **** appear to also be in the master copy. * config.sub: Import CVS version 1.211. ! Mon Jun 4 16:32:58 2001 Mark Mitchell * ltcf-c.sh (archive_cmds, archive_expsym_cmds) [solaris, with_gcc]: Use `gcc -shared' to build a shared library. ! Mon Jun 4 16:24:56 2001 John David Anglin * ltcf-c.sh (archive_cmd) [hpux, with_gcc]: Use gcc to link shared archives. --- 508,519 ---- appear to also be in the master copy. * config.sub: Import CVS version 1.211. ! Mon Jun 4 16:32:53 2001 Mark Mitchell * ltcf-c.sh (archive_cmds, archive_expsym_cmds) [solaris, with_gcc]: Use `gcc -shared' to build a shared library. ! Mon Jun 4 16:24:43 2001 John David Anglin * ltcf-c.sh (archive_cmd) [hpux, with_gcc]: Use gcc to link shared archives. *************** Fri Jun 1 18:55:19 2001 Rainer Orth < *** 139,149 **** * MAINTAINERS (Write After Approval): Add myself. ! 2001-05-30 Hans-Peter Nilsson * configure.in (libstdcxx_flags): Do not try to execute libstdc++-v3/testsuite_flags until it exists. 2001-05-28 Simon Patarin * ltcf-cxx.sh (osf3/osf4/osf5): Support creation of C++ shared --- 522,540 ---- * MAINTAINERS (Write After Approval): Add myself. ! 2001-06-01 Hans-Peter Nilsson * configure.in (libstdcxx_flags): Do not try to execute libstdc++-v3/testsuite_flags until it exists. + 2001-06-01 Alan Modra + + * MAINTAINERS: Update my email address. + + 2001-05-31 Graham Stott + + * MAINTAINERS (Write After Approval): Add myself. + 2001-05-28 Simon Patarin * ltcf-cxx.sh (osf3/osf4/osf5): Support creation of C++ shared *************** Fri Jun 1 18:55:19 2001 Rainer Orth < *** 164,212 **** ltcf-gcj.sh: Upgraded to libtool 1.4a 1.641.2.254. Rebuilt a number of subdir/configure scripts to use the new libtool.m4. 2001-05-18 Benjamin Kosnik * configure.in (libstdcxx_flags): Remove reference to libstdc++.INC. ! 2001-05-07 Mark Mitchell ! * configure.in (target_libs): Remove target-libchill. 2001-05-03 Alexandre Oliva * configure.in (noconfigdirs) [*-cygwin*, *-mingw*, *-beos]: Disable libgcj. ! Fri Apr 27 14:39:25 2001 Alexandre Oliva ! ! * ltcf-cxx.sh: Add -nostdlib to HP-UX GCC archive_cmds. ! ! Fri Apr 27 10:23:04 2001 Mark P Mitchell ! * ltcf-cxx.sh: Add -nostdlib to IRIX 6 archive_cmds. ! Thu Apr 26 02:13:41 2001 Alexandre Oliva * configure.in (noconfigdirs): Don't reset it from scratch in the target case; only append to it. - Thu Apr 26 02:13:07 2001 Alexandre Oliva - * configure.in (noconfigdirs) [hppa*-*-*, mips*-*-irix6*, sparc-*-solaris2.8]: Disable ${libgcj}. ! Wed Apr 25 18:35:30 2001 Alexandre Oliva * configure.in (libgcj_saved): Copy from $libgcj. (libgcj): Zero out if --enable-libgcj; add to noconfigdirs is --disable-libgcj. Mon Apr 23 09:15:03 2001 Anthony Green * configure.in: Move *-chorusos target case to the proper switch. Disable libgcj. ! 2001-04-20 Alexandre Oliva * ltconfig, ltmain.sh, ltcf-cxx.sh: Upgraded to libtool 1.4a 1.641.2.228. --- 555,613 ---- ltcf-gcj.sh: Upgraded to libtool 1.4a 1.641.2.254. Rebuilt a number of subdir/configure scripts to use the new libtool.m4. + 2001-05-19 Matt Kraai + + * MAINTAINERS (Write After Approval): Add myself. + 2001-05-18 Benjamin Kosnik * configure.in (libstdcxx_flags): Remove reference to libstdc++.INC. ! 2001-05-11 Ben Elliston ! * Makefile.in (all-sid): New target. ! (check-sid, clean-sid, install-sid): Likewise. ! ! 2001-05-09 Jeffrey Oldham ! ! * ltcf-cxx.sh: Add -nostdlib to IRIX 6 archive_cmds. 2001-05-03 Alexandre Oliva * configure.in (noconfigdirs) [*-cygwin*, *-mingw*, *-beos]: Disable libgcj. ! 2001-05-03 Alexandre Oliva ! * Makefile.in (AS_FOR_TARGET, LD_FOR_TARGET, NM_FOR_TARGET): If ! gcc/xgcc is built, use -print-prog-name to find out the program ! name to use. ! 2001-04-26 Alexandre Oliva * configure.in (noconfigdirs): Don't reset it from scratch in the target case; only append to it. * configure.in (noconfigdirs) [hppa*-*-*, mips*-*-irix6*, sparc-*-solaris2.8]: Disable ${libgcj}. ! 2001-04-25 Alexandre Oliva * configure.in (libgcj_saved): Copy from $libgcj. (libgcj): Zero out if --enable-libgcj; add to noconfigdirs is --disable-libgcj. + 2001-04-25 Gavin Romig-Koch + + * MAINTAINERS: Remove self as MIPS maintainer and + C front end maintainer. + Mon Apr 23 09:15:03 2001 Anthony Green * configure.in: Move *-chorusos target case to the proper switch. Disable libgcj. ! 2001-04-12 Alexandre Oliva * ltconfig, ltmain.sh, ltcf-cxx.sh: Upgraded to libtool 1.4a 1.641.2.228. *************** Mon Apr 23 09:15:03 2001 Anthony Green *** 215,225 **** --- 616,640 ---- * Makefile.in (STAGE1_CFLAGS): Pass down. + 2001-04-13 Alan Modra + + * config.guess: Add hppa64-linux support. Note for next import that + this is already in the master file. + * configure.in: Likewise. Accept `parisc' alias for `hppa'. + 2001-04-12 Alexandre Oliva * ltconfig, ltmain.sh, libtool.m4, ltcf-c.sh, ltcf-cxx.sh, ltcf-gcj.sh: Upgraded to libtool 1.4a 1.641.2.226. + 2001-04-11 Stan Shebs + + * MAINTAINERS: Add self as Darwin port maintainer. + + 2001-04-11 Alan Modra + + * MAINTAINERS: Update my email address. + 2001-04-10 Loren J. Rittle * ltcf-cxx.sh: Support creation of C++ shared libraries on *************** Mon Apr 23 09:15:03 2001 Anthony Green *** 228,247 **** a shared library or else the standard -pthread gcc option is rendered worthless to later users of the built library. - 2001-04-08 Gerald Pfeifer - - * MAINTAINERS: Add myself as "documentation co-maintainer". - 2001-04-06 Joseph S. Myers * MAINTAINERS: Add self and RTH as C front end maintainers. ! 2001-04-01 Alexandre Oliva ! * Makefile.in (CXX_FOR_TARGET_FOR_RECURSIVE_MAKE, RECURSE_FLAGS): ! New macros. ! (bootstrap, cross): Use RECURSE_FLAGS. ! * configure.in: Subst CXX_FOR_TARGET_FOR_RECURSIVE_MAKE. 2001-04-01 Alexandre Oliva --- 643,656 ---- a shared library or else the standard -pthread gcc option is rendered worthless to later users of the built library. 2001-04-06 Joseph S. Myers * MAINTAINERS: Add self and RTH as C front end maintainers. ! 2001-04-05 Alexandre Oliva ! * config.sub: Make sure to match an already-canonicalized ! machine name (eg. mn10300-unknown-elf). 2001-04-01 Alexandre Oliva *************** Mon Apr 23 09:15:03 2001 Anthony Green *** 254,259 **** --- 663,673 ---- * configure.in (CXX_FOR_TARGET): Use xgcc for libstdc++-v3. + 2001-03-22 Colin Howell + + * Makefile.in (DO_X): Do not backslash single-quotes in + backquotes (two places). + 2001-03-22 Alexandre Oliva Re-installed: *************** Mon Apr 23 09:15:03 2001 Anthony Green *** 263,268 **** --- 677,688 ---- * ltcf-cxx.sh: Likewise. * ltcf-gcj.sh: Likewise. + 2001-03-22 Gerald Pfeifer + + * MAINTAINERS: Add myself as "documentation co-maintainer". + + 2001-03-22 Alexandre Oliva + * ltconfig, ltmain.sh, libtool.m4, ltcf-c.sh, ltcf-cxx.sh, ltcf-gcj.sh: Upgraded to libtool 1.4a 1.641.2.198. *************** Mon Apr 23 09:15:03 2001 Anthony Green *** 270,275 **** --- 690,716 ---- * config-ml.in: Handle GCJ and GCJFLAGS. + 2001-03-21 Michael Chastain + + * Makefile.in: all-m4 depends on all-texinfo. + + 2001-03-20 Loren J. Rittle + + * MAINTAINERS: Add myself to write after approval list. + + 2001-03-18 Laurynas Biveinis + + * Makefile.in (DO_X): Quote nested quotes. + + 2001-03-18 Alan Modra + + * MAINTAINERS: Add myself to write after approval list. + + 2001-03-15 Laurynas Biveinis + + * Makefile.in (DO_X): Use double quotes for quoting + "RANLIB=$${RANLIB}". + 2001-03-10 Ovidiu Predescu * MAINTAINERS: Added Stan Shebs as new maintainer for Objective-C. *************** Mon Apr 23 09:15:03 2001 Anthony Green *** 279,284 **** --- 720,729 ---- * configure.in: Only use `lang_requires' for languages athat are actually enabled. + 2001-03-08 Phil Edwards + + * MAINTAINERS (C++ runtime libs): Update and alphabatize. + 2001-03-08 Alexandre Oliva * Makefile.in (ALL_GCC, ALL_GCC_C, ALL_GCC_CXX): Set before use. *************** Mon Apr 23 09:15:03 2001 Anthony Green *** 288,298 **** * configure.in: Allow config-lang.in to set `lang_requires' to list of other required languages. 2001-02-20 Laurynas Biveinis * MAINTAINERS: add myself to Write After Approval list. ! 2001-02-19 Benjamin Kosnik * configure.in (target_libs): Remove libg++. (noconfigdirs): Remove libg++. --- 733,756 ---- * configure.in: Allow config-lang.in to set `lang_requires' to list of other required languages. + 2001-03-06 Laurynas Biveinis + + * Makefile.in: Remove RANLIB definition. Use RANLIB + in RANLIB_FOR_TARGET, EXTRA_HOST_FLAGS, EXTRA_TARGET_FLAGS, + EXTRA_GCC_FLAGS, $(DO_X) targets only when the RANLIB is set. + + 2001-02-28 Benjamin Kosnik + Alexandre Oliva + + * Makefile.in (check-c++): Use tabs, not spaces. + 2001-02-20 Laurynas Biveinis * MAINTAINERS: add myself to Write After Approval list. ! 2001-02-19 Benjamin Kosnik ! ! * Makefile.in (check-c++): New rule. * configure.in (target_libs): Remove libg++. (noconfigdirs): Remove libg++. *************** Mon Apr 23 09:15:03 2001 Anthony Green *** 318,333 **** (ALL_GCC_CXX): Remove libstdc++. (all-target-gperf): Correct. 2001-02-15 Anthony Green * configure: Introduce GCJ_FOR_TARGET. * configure.in: Ditto. * Makefile.in: Ditto. 2001-02-08 Chandrakala Chavva * configure.in: for *-chorusos, don't config target-newlib and ! target-libgloss. 2001-02-06 Ben Elliston --- 776,805 ---- (ALL_GCC_CXX): Remove libstdc++. (all-target-gperf): Correct. + 2001-02-16 Nick Clifton + + * configure.in (noconfigdirs): Allow configuration of texinfo + for Cygwin hosts. + 2001-02-15 Anthony Green * configure: Introduce GCJ_FOR_TARGET. * configure.in: Ditto. * Makefile.in: Ditto. + 2001-02-13 Andreas Schwab + + * MAINTAINERS: Update mail address. + + 2001-02-09 Martin Schwidefsky + + * config.guess: Add linux target for S/390. + * config.sub: Likewise. + 2001-02-08 Chandrakala Chavva * configure.in: for *-chorusos, don't config target-newlib and ! target-libgloss. 2001-02-06 Ben Elliston *************** Mon Apr 23 09:15:03 2001 Anthony Green *** 420,432 **** * Makefile.in (CONFIGURE_TARGET_MODULES): Pass back configuration failures of subdirectories. ! 2001-01-02 Laurynas Biveinis <lauras@softhome.net> ! * ltcf-c.sh: clear ac_cv_prog_cc_pic for DJGPP. Do not add '-DPIC' to ac_cv_prog_cc_pic for DJGPP. ! * ltcf-cxx.sh: likewise. ! * ltcf-gcj.sh: likewise. ! * ltconfig.sh: fix typo. 2001-01-02 Laurynas Biveinis --- 892,904 ---- * Makefile.in (CONFIGURE_TARGET_MODULES): Pass back configuration failures of subdirectories. ! 2001-01-02 Laurynas Biveinis ! * ltcf-c.sh: Clear ac_cv_prog_cc_pic for DJGPP. Do not add '-DPIC' to ac_cv_prog_cc_pic for DJGPP. ! * ltcf-cxx.sh: Likewise. ! * ltcf-gcj.sh: Likewise. ! * ltconfig.sh: Fix typo. 2001-01-02 Laurynas Biveinis *************** Mon Apr 23 09:15:03 2001 Anthony Green *** 480,487 **** 2000-12-13 Anthony Green * configure.in: Disable libgcj for any target not specifically ! listed. Disable libgcj for x86 and Alpha Linux until compatible ! with g++ abi. 2000-12-13 Mike Stump --- 952,959 ---- 2000-12-13 Anthony Green * configure.in: Disable libgcj for any target not specifically ! listed. Disable libgcj for x86 and Alpha Linux until compatible ! with g++ abi. 2000-12-13 Mike Stump *************** Mon Apr 23 09:15:03 2001 Anthony Green *** 557,567 **** 2000-11-22 Loren J. Rittle ! * ltcf-cxx.sh: Support creation of C++ shared libraries on ! recent versions of FreeBSD (release 3 or later). ! * ltconfig: On FreeBSD, -lc must not be provided when building ! a shared library or else the standard -pthread gcc option is ! rendered worthless to later users of the built library. 2000-11-16 Fred Fish --- 1029,1039 ---- 2000-11-22 Loren J. Rittle ! * ltcf-cxx.sh: Support creation of C++ shared libraries on ! recent versions of FreeBSD (release 3 or later). ! * ltconfig: On FreeBSD, -lc must not be provided when building ! a shared library or else the standard -pthread gcc option is ! rendered worthless to later users of the built library. 2000-11-16 Fred Fish *************** Sun Sep 17 16:55:59 CEST 2000 Marc Espie *** 696,703 **** Wed Sep 13 11:11:29 2000 Jeffrey A Law (law@cygnus.com) ! * configure.in: Do not build byacc for hppa64. Provide paths to the ! X11 libraries for hppa64. 2000-09-08 Stephane Carrez --- 1168,1175 ---- Wed Sep 13 11:11:29 2000 Jeffrey A Law (law@cygnus.com) ! * configure.in: Do not build byacc for hppa64. Provide paths to the ! X11 libraries for hppa64. 2000-09-08 Stephane Carrez *************** Wed Sep 13 11:11:29 2000 Jeffrey A Law *** 923,929 **** 2000-07-01 Koundinya K ! * ltconfig: Add support for mips-dde-sysv4.2MP 2000-06-29 Michael Hayes --- 1395,1401 ---- 2000-07-01 Koundinya K ! * ltconfig: Add support for mips-dde-sysv4.2MP 2000-06-29 Michael Hayes *************** Mon May 29 21:15:00 MET 2000 Philipp Th *** 955,966 **** 20000-05-21 H.J. Lu (hjl@gnu.org) ! * Makefile.in (CC_FOR_TARGET): Make sure as/ld in the gcc ! directory are used if they exist. Make sure ! $(build_tooldir)/include is searched for header files, ! $(build_tooldir)/lib/ for library files. (GCC_FOR_TARGET): Likewise. ! (CXX_FOR_TARGET): Likewise. Thu May 18 10:58:13 2000 Jeffrey A Law (law@cygnus.com) --- 1427,1438 ---- 20000-05-21 H.J. Lu (hjl@gnu.org) ! * Makefile.in (CC_FOR_TARGET): Make sure as/ld in the gcc ! directory are used if they exist. Make sure ! $(build_tooldir)/include is searched for header files, ! $(build_tooldir)/lib/ for library files. (GCC_FOR_TARGET): Likewise. ! (CXX_FOR_TARGET): Likewise. Thu May 18 10:58:13 2000 Jeffrey A Law (law@cygnus.com) *************** Tue May 16 09:57:35 2000 Andrew Cagney *** 985,991 **** Wed Apr 26 17:03:53 2000 Andrew Cagney : * Makefile.in (do-djunpack): New target. Update djunpack.bat with ! current version information. Add to proto-toplev directory. (gdb-taz): Build do-djunpack. 2000-05-15 David Edelsohn --- 1457,1463 ---- Wed Apr 26 17:03:53 2000 Andrew Cagney : * Makefile.in (do-djunpack): New target. Update djunpack.bat with ! current version information. Add to proto-toplev directory. (gdb-taz): Build do-djunpack. 2000-05-15 David Edelsohn *************** Wed May 10 21:26:51 2000 Jim Wilson * djunpack.bat: Change the Sed script to replace @V@ in fnchange.lst ! with the version name. Sat May 6 21:12:55 CDT 2000 Jason Eckhardt --- 1484,1490 ---- 2000-05-08 Eli Zaretskii * djunpack.bat: Change the Sed script to replace @V@ in fnchange.lst ! with the version name. Sat May 6 21:12:55 CDT 2000 Jason Eckhardt *************** Sat May 6 21:12:55 CDT 2000 Jason Eckh *** 1029,1042 **** Wed Apr 19 12:46:26 2000 Andrew Cagney * Makefile.in (taz, gdb-taz, gas.tar.bz2, binutils.tar.bz2, ! gas+binutils.tar.bz2, libg++.tar.bz2, gnats.tar.bz2, gdb.tar.bz2, ! dejagnu.tar.bz2, gdb+dejagnu.tar.bz2, insight.tar.bz2, ! insight+dejagnu.tar.bz2, newlib.tar.bz2): Pass MD5PROG to sub-make. 2000-04-16 Dave Pitts ! * config.sub (case $basic_machine): Change default for "ibm-*" ! to "openedition". 2000-04-13 Andreas Jaeger --- 1501,1514 ---- Wed Apr 19 12:46:26 2000 Andrew Cagney * Makefile.in (taz, gdb-taz, gas.tar.bz2, binutils.tar.bz2, ! gas+binutils.tar.bz2, libg++.tar.bz2, gnats.tar.bz2, gdb.tar.bz2, ! dejagnu.tar.bz2, gdb+dejagnu.tar.bz2, insight.tar.bz2, ! insight+dejagnu.tar.bz2, newlib.tar.bz2): Pass MD5PROG to sub-make. 2000-04-16 Dave Pitts ! * config.sub (case $basic_machine): Change default for "ibm-*" ! to "openedition". 2000-04-13 Andreas Jaeger *************** Wed Apr 12 16:42:48 2000 Andrew Cagney *** 1050,1060 **** (PACKAGE): Default to TOOL. (VER): Default to a shell script. (taz): Rewrite target. Move real work to do-proto-toplev. Include ! md5 checksum generation. (do-proto-toplev): New target. Create $(PACKAGE)-$(VER) link. (do-tar-bz2): Delete creation of $(PACKAGE)-$(VER) link. (gdb.tar.bz2, dejagnu.tar.bz2, gdb+dejagnu.tar.bz2, ! insight.tar.bz2): Use gdb-taz to create archive. Fri Apr 7 18:10:29 2000 Andrew Cagney --- 1522,1532 ---- (PACKAGE): Default to TOOL. (VER): Default to a shell script. (taz): Rewrite target. Move real work to do-proto-toplev. Include ! md5 checksum generation. (do-proto-toplev): New target. Create $(PACKAGE)-$(VER) link. (do-tar-bz2): Delete creation of $(PACKAGE)-$(VER) link. (gdb.tar.bz2, dejagnu.tar.bz2, gdb+dejagnu.tar.bz2, ! insight.tar.bz2): Use gdb-taz to create archive. Fri Apr 7 18:10:29 2000 Andrew Cagney *************** Thu Apr 6 16:15:14 2000 Philippe De Mu *** 1065,1077 **** * MAINTAINERS: Added myself. 2000-04-05 Benjamin Kosnik ! Martin v. Loewis ! * configure.in (enable_libstdcxx_v3): Add. ! (target_libs): Add bits here to switch between libstdc++-v2 and ! libstdc++-v3. ! * config.if: And this file too. ! * Makefile.in: Add libstdc++-v3 targets. 2000-04-05 Michael Meissner --- 1537,1549 ---- * MAINTAINERS: Added myself. 2000-04-05 Benjamin Kosnik ! Martin v. Loewis ! * configure.in (enable_libstdcxx_v3): Add. ! (target_libs): Add bits here to switch between libstdc++-v2 and ! libstdc++-v3. ! * config.if: And this file too. ! * Makefile.in: Add libstdc++-v3 targets. 2000-04-05 Michael Meissner *************** Fri Mar 3 18:44:08 2000 Andrew Cagney *** 1099,1105 **** (do-tar-bz2): Replace TOOL with PACKAGE. (gdb.tar.bz2): Remove GDBTK from GDB package. (gdb+dejagnu.tar.bz2, insight.tar.bz2, insight+dejagnu.tar.bz2, ! dejagnu.tar.bz2): New packages. 2000-02-27 Andreas Jaeger --- 1571,1577 ---- (do-tar-bz2): Replace TOOL with PACKAGE. (gdb.tar.bz2): Remove GDBTK from GDB package. (gdb+dejagnu.tar.bz2, insight.tar.bz2, insight+dejagnu.tar.bz2, ! dejagnu.tar.bz2): New packages. 2000-02-27 Andreas Jaeger *************** Fri Mar 3 18:44:08 2000 Andrew Cagney *** 1117,1123 **** Thu Feb 24 16:15:56 2000 Andrew Cagney * config.guess, config.sub: Updated to match config's 2000-02-15 ! version. 2000-02-23 Linas Vepstas --- 1589,1595 ---- Thu Feb 24 16:15:56 2000 Andrew Cagney * config.guess, config.sub: Updated to match config's 2000-02-15 ! version. 2000-02-23 Linas Vepstas *************** Tue Jun 22 23:45:18 1999 Tom Tromey ! * config.guess: Correct typo for detecting ELF on FreeBSD. Thu Mar 18 00:17:50 1999 Mark Elbrecht --- 1918,1924 ---- 1999-03-21 Ben Elliston ! * config.guess: Correct typo for detecting ELF on FreeBSD. Thu Mar 18 00:17:50 1999 Mark Elbrecht *************** Wed Mar 10 18:35:07 1999 Jeff Johnston *** 1478,1484 **** Wed Mar 10 17:39:09 1999 Drew Moseley * configure.in: Added bsp support to arm-*-coff and arm-*-elf ! targets. 1999-03-02 Nick Clifton --- 1950,1956 ---- Wed Mar 10 17:39:09 1999 Drew Moseley * configure.in: Added bsp support to arm-*-coff and arm-*-elf ! targets. 1999-03-02 Nick Clifton *************** Tue Feb 2 19:46:40 1999 Jim Wilson ! * config.sub (oabi): Recognize. ! * configure.in (arm-*-oabi): Handle. Sat Jan 30 06:09:00 1999 Robert Lipe (robertlipe@usa.net) --- 2028,2035 ---- Tue Feb 2 20:05:05 1999 Catherine Moore ! * config.sub (oabi): Recognize. ! * configure.in (arm-*-oabi): Handle. Sat Jan 30 06:09:00 1999 Robert Lipe (robertlipe@usa.net) *************** Thu Dec 17 01:22:30 1998 Jeffrey A Law *** 1606,1612 **** Tue Dec 15 17:02:58 1998 Bob Manson * configure.in: Add cygmon for x86-coff and x86-elf. Configure ! cygmon for all sparclite targets, regardless of object format. 1998-12-15 Mark Salter --- 2078,2084 ---- Tue Dec 15 17:02:58 1998 Bob Manson * configure.in: Add cygmon for x86-coff and x86-elf. Configure ! cygmon for all sparclite targets, regardless of object format. 1998-12-15 Mark Salter *************** Wed Nov 18 20:13:29 1998 Christopher Fa *** 1645,1652 **** Tue Nov 17 16:57:51 1998 Geoffrey Noer ! * Makefile.in: modify CC_FOR_TARGET and CXX_FOR_TARGET so that ! they include winsup/include when it's a cygwin target. 1998-11-12 Tom Tromey --- 2117,2124 ---- Tue Nov 17 16:57:51 1998 Geoffrey Noer ! * Makefile.in: modify CC_FOR_TARGET and CXX_FOR_TARGET so that ! they include winsup/include when it's a cygwin target. 1998-11-12 Tom Tromey *************** Wed Nov 4 18:49:43 1998 Dave Brolley *** 1672,1678 **** Mon Nov 2 15:19:33 1998 Geoffrey Noer ! * configure.in: drop "32" from config/mh-cygwin32. Check cygwin* instead of cygwin32*. * config.sub: Check cygwin* instead of cygwin32*. --- 2144,2150 ---- Mon Nov 2 15:19:33 1998 Geoffrey Noer ! * configure.in: drop "32" from config/mh-cygwin32. Check cygwin* instead of cygwin32*. * config.sub: Check cygwin* instead of cygwin32*. *************** Sat Jun 27 22:46:32 1998 Jeffrey A Law *** 1993,1999 **** Wed Jun 24 16:01:59 1998 John Metzler * configure.in (noconfigdirs): Add configure pattern for mips tx39 ! cygmon Tue Jun 23 22:42:32 1998 Mark Alexander --- 2465,2471 ---- Wed Jun 24 16:01:59 1998 John Metzler * configure.in (noconfigdirs): Add configure pattern for mips tx39 ! cygmon Tue Jun 23 22:42:32 1998 Mark Alexander *************** Fri Mar 6 00:14:55 1998 Franz Sirl --- 2750,2756 ---- Mon Feb 23 15:09:18 1998 Bruno Haible *************** Sat Nov 8 14:42:59 1997 Michael Meissn *** 2590,2599 **** Fri Nov 7 10:34:09 1997 Rob Savoye ! * include/libiberty.h: Add extern "C" { so it can be used with C++ ! progrms. ! * include/remote-sim.h: Add extern "C" { so it can be used with C++ ! programs. Thu Oct 30 11:09:29 1997 Michael Meissner --- 3062,3071 ---- Fri Nov 7 10:34:09 1997 Rob Savoye ! * include/libiberty.h: Add extern "C" { so it can be used with C++ ! progrms. ! * include/remote-sim.h: Add extern "C" { so it can be used with C++ ! programs. Thu Oct 30 11:09:29 1997 Michael Meissner *************** Mon Sep 29 00:38:08 1997 Aaron Jackson < *** 2645,2651 **** Wed Sep 24 18:06:27 1997 Stu Grossman * configure.in (d30v): Remove tcl, tk, expect, gdb, itcl, tix, db, ! sn, and gnuserv from noconfigdirs. Wed Sep 24 15:18:32 1997 Ian Lance Taylor --- 3117,3123 ---- Wed Sep 24 18:06:27 1997 Stu Grossman * configure.in (d30v): Remove tcl, tk, expect, gdb, itcl, tix, db, ! sn, and gnuserv from noconfigdirs. Wed Sep 24 15:18:32 1997 Ian Lance Taylor *************** Thu Sep 18 21:43:23 1997 Alexandre Oliv *** 2665,2671 **** Thu Sep 18 15:37:42 1997 Andrew Cagney * configure (tooldir): enable_gdbtk=YES for cygwin32, NO for ! windows. Consistent with gdb/configure. 1997-09-15 02:37 Ulrich Drepper --- 3137,3143 ---- Thu Sep 18 15:37:42 1997 Andrew Cagney * configure (tooldir): enable_gdbtk=YES for cygwin32, NO for ! windows. Consistent with gdb/configure. 1997-09-15 02:37 Ulrich Drepper *************** Wed Sep 10 21:29:54 1997 Jeffrey A Law *** 2701,2707 **** Wed Sep 10 15:19:22 1997 Jeffrey A Law (law@cygnus.com) ! * config.sub: Accept 'amigados' for backward compatability. Mon Sep 8 20:46:20 1997 Ian Lance Taylor --- 3173,3179 ---- Wed Sep 10 15:19:22 1997 Jeffrey A Law (law@cygnus.com) ! * config.sub: Accept 'amigados' for backward compatibility. Mon Sep 8 20:46:20 1997 Ian Lance Taylor *************** Sun Sep 7 15:55:28 1997 Gavin Koch --- 3257,3263 ---- * configure: When handling a Canadian Cross, handle YACC as well as BISON. Just set BISON to bison. When setting YACC, prefer bison. ! * Makefile.in (all-bison): Depend upon all-texinfo. Tue Aug 12 20:09:48 1997 Jason Merrill *************** Tue Aug 5 12:12:44 1997 Andrew Cagney *** 2846,2858 **** Mon Aug 4 22:59:02 1997 Andrew Cagney * Makefile.in (CC_FOR_TARGET): When winsup/Makefile present, ! correctly specify the target build directory $(TARGET_SUBDIR)/winsup ! for libraries. Mon Aug 4 12:40:24 1997 Jason Merrill * Makefile.in (EXTRA_GCC_FLAGS): Fix handling of macros with values ! separated by spaces. Thu Jul 31 19:49:49 1997 Ian Lance Taylor --- 3318,3330 ---- Mon Aug 4 22:59:02 1997 Andrew Cagney * Makefile.in (CC_FOR_TARGET): When winsup/Makefile present, ! correctly specify the target build directory $(TARGET_SUBDIR)/winsup ! for libraries. Mon Aug 4 12:40:24 1997 Jason Merrill * Makefile.in (EXTRA_GCC_FLAGS): Fix handling of macros with values ! separated by spaces. Thu Jul 31 19:49:49 1997 Ian Lance Taylor *************** Mon Jun 16 11:11:10 1997 Ian Lance Tayl *** 2983,2989 **** $(DEFAULT_YACC). * configure.in: Build itl, db, sn, etc., when building for native ! cygwin32. * Makefile.in (LD): New variable. (EXTRA_HOST_FLAGS): Pass down LD. --- 3455,3461 ---- $(DEFAULT_YACC). * configure.in: Build itl, db, sn, etc., when building for native ! cygwin32. * Makefile.in (LD): New variable. (EXTRA_HOST_FLAGS): Pass down LD. *************** Mon Jun 16 11:10:35 1997 Philip Blundel *** 2996,3002 **** Fri Jun 13 10:22:56 1997 Bob Manson * configure.in (targargs): Strip out any supplied --build argument ! before adding our own. Always add --build. Thu Jun 12 21:12:28 1997 Bob Manson --- 3468,3474 ---- Fri Jun 13 10:22:56 1997 Bob Manson * configure.in (targargs): Strip out any supplied --build argument ! before adding our own. Always add --build. Thu Jun 12 21:12:28 1997 Bob Manson *************** Tue Apr 1 16:28:50 1997 Klaus Kaempf *** 3118,3124 **** Mon Mar 31 16:26:55 1997 Joel Sherrill ! * configure.in (hppa1.1-*-rtems*): New target, like hppa-*-*elf*. Sun Mar 30 12:38:27 1997 Fred Fish --- 3590,3596 ---- Mon Mar 31 16:26:55 1997 Joel Sherrill ! * configure.in (hppa1.1-*-rtems*): New target, like hppa-*-*elf*. Sun Mar 30 12:38:27 1997 Fred Fish *************** Tue Feb 25 18:46:14 1997 Stan Shebs * configure.in (noconfigdirs): Disable target-newlib, ! target-examples and target-libiberty for d30v. Fri Feb 21 17:56:25 1997 Martin M. Hunt --- 3663,3669 ---- Tue Feb 25 13:19:14 1997 Andrew Cagney * configure.in (noconfigdirs): Disable target-newlib, ! target-examples and target-libiberty for d30v. Fri Feb 21 17:56:25 1997 Martin M. Hunt *************** Fri Feb 21 20:58:51 1997 Michael Meissn *** 3204,3210 **** Sun Feb 16 15:41:09 1997 Andrew Cagney * configure.in (d30v-*): Remove sim directory from list of ! unsupported d30v directories Tue Feb 18 17:32:42 1997 Martin M. Hunt --- 3676,3682 ---- Sun Feb 16 15:41:09 1997 Andrew Cagney * configure.in (d30v-*): Remove sim directory from list of ! unsupported d30v directories Tue Feb 18 17:32:42 1997 Martin M. Hunt *************** Fri Nov 8 11:34:58 1996 David J. MacKe *** 3387,3393 **** LynxOs is not a hardware supplier. * config.guess: Contributions from bug-gnu-utils to add support for: ! OpenBSD like NetBSD. Stratus systems. More Pyramid systems. i[n>4]86 Intel chips. --- 3859,3865 ---- LynxOs is not a hardware supplier. * config.guess: Contributions from bug-gnu-utils to add support for: ! OpenBSD like NetBSD. Stratus systems. More Pyramid systems. i[n>4]86 Intel chips. *************** Wed Oct 9 17:24:59 1996 Per Bothner < *** 3470,3480 **** * config.guess: Merge from FSF. 1996-09-12 Richard Stallman ! * config.guess: Use pc instead of unknown, for pc clone systems. ! Change linux to linux-gnu. Mon Jul 15 23:51:11 1996 Karl Heuer ! * config.guess: Avoid non-portable tr syntax. Wed Oct 9 06:06:46 1996 Jeffrey A Law (law@cygnus.com) --- 3942,3952 ---- * config.guess: Merge from FSF. 1996-09-12 Richard Stallman ! * config.guess: Use pc instead of unknown, for pc clone systems. ! Change linux to linux-gnu. Mon Jul 15 23:51:11 1996 Karl Heuer ! * config.guess: Avoid non-portable tr syntax. Wed Oct 9 06:06:46 1996 Jeffrey A Law (law@cygnus.com) *************** Wed Oct 2 15:52:36 1996 Klaus Kaempf *** 3528,3534 **** Tue Oct 1 01:28:41 1996 James G. Smith * configure.in (noconfigdirs): Don't build libgloss for arm-coff ! targets. Mon Sep 30 14:24:01 1996 Stan Shebs --- 4000,4006 ---- Tue Oct 1 01:28:41 1996 James G. Smith * configure.in (noconfigdirs): Don't build libgloss for arm-coff ! targets. Mon Sep 30 14:24:01 1996 Stan Shebs *************** Mon Jun 24 15:01:12 1996 Joel Sherrill *** 3748,3761 **** Sun Jun 23 22:41:54 1996 Geoffrey Noer ! * configure.in: enable dosrel for cygwin32-hosted builds, ! remove diff from the list of things not buildable ! via Canadian Cross Sat Jun 22 11:39:01 1996 Jason Merrill * Makefile.in (TARGET_SUBDIR): Move comment to previous line so we ! don't get ". ". Fri Jun 21 17:24:48 1996 Jim Wilson --- 4220,4233 ---- Sun Jun 23 22:41:54 1996 Geoffrey Noer ! * configure.in: enable dosrel for cygwin32-hosted builds, ! remove diff from the list of things not buildable ! via Canadian Cross Sat Jun 22 11:39:01 1996 Jason Merrill * Makefile.in (TARGET_SUBDIR): Move comment to previous line so we ! don't get ". ". Fri Jun 21 17:24:48 1996 Jim Wilson *************** Thu Mar 28 14:11:11 1996 Tom Tromey ! * configure (--enable-*): Handle quoted option lists such as ! --enable-sim-cflags='-g0 -O' better. Thu Mar 21 11:53:08 1996 Michael Meissner --- 4424,4431 ---- Tue Mar 26 21:18:50 1996 Andrew Cagney ! * configure (--enable-*): Handle quoted option lists such as ! --enable-sim-cflags='-g0 -O' better. Thu Mar 21 11:53:08 1996 Michael Meissner *************** Fri Dec 29 07:56:11 1995 Michael Meissn *** 4202,4208 **** * Makefile.in (EXTRA_GCC_FLAGS): If any of the make variables LANGUAGES, BOOT_CFLAGS, STMP_FIXPROTO, LIMITS_H_TEST, LIBGCC1_TEST, LIBGCC2_CFLAGS, LIBGCC2_INCLUDES, and ENQUIRE are ! non-empty, pass them on to the GCC make. (all-bootstrap): New rule that is like all-gcc, except it executes the GCC bootstrap rule instead of the GCC all rule. --- 4674,4680 ---- * Makefile.in (EXTRA_GCC_FLAGS): If any of the make variables LANGUAGES, BOOT_CFLAGS, STMP_FIXPROTO, LIMITS_H_TEST, LIBGCC1_TEST, LIBGCC2_CFLAGS, LIBGCC2_INCLUDES, and ENQUIRE are ! non-empty, pass them on to the GCC make. (all-bootstrap): New rule that is like all-gcc, except it executes the GCC bootstrap rule instead of the GCC all rule. *************** Mon Dec 4 12:38:15 1995 Ian Lance Tayl *** 4282,4288 **** Thu Nov 30 14:45:25 1995 J.T. Conklin * config/mt-v810 (CC_FOR_TARGET): Add -ansi flag. NEC compiler ! defaults to K&R mode, but doesn't have varargs.h, so we have to compile in ANSI mode. Thu Nov 30 16:57:33 1995 Per Bothner --- 4754,4760 ---- Thu Nov 30 14:45:25 1995 J.T. Conklin * config/mt-v810 (CC_FOR_TARGET): Add -ansi flag. NEC compiler ! defaults to K&R mode, but doesn't have varargs.h, so we have to compile in ANSI mode. Thu Nov 30 16:57:33 1995 Per Bothner *************** Mon Nov 13 12:34:20 1995 Stan Shebs * configure: CXX defaults to gcc, not g++. If we find ! gcc in the path, set CC to gcc -O2. Tue Nov 7 15:45:17 1995 Ian Lance Taylor --- 4866,4880 ---- * mpw-config.in: Configure grez if targeting Mac. * config.sub: Accept pmac and pmac-mpw as names for PowerMacs, ! accept mpw and mac-mpw as names for m68k Macs, change macos7 to ! just macos. * configure.in: Configure grez resource compiler if targeting Mac. * Makefile.in (all-grez, install-grez): New targets. Wed Nov 8 17:33:51 1995 Jason Merrill * configure: CXX defaults to gcc, not g++. If we find ! gcc in the path, set CC to gcc -O2. Tue Nov 7 15:45:17 1995 Ian Lance Taylor *************** Wed Nov 1 12:23:20 1995 Ian Lance Tayl *** 4452,4459 **** Tue Oct 31 17:52:39 1995 J.T. Conklin * configure.in (host_makefile_frag): Use m68k-sun-sunos* instead ! of m68k-sun-* when selecting mh-sun3 to avoid matching NetBSD/sun3 ! systems. Tue Oct 31 16:57:32 1995 Jim Wilson --- 4924,4931 ---- Tue Oct 31 17:52:39 1995 J.T. Conklin * configure.in (host_makefile_frag): Use m68k-sun-sunos* instead ! of m68k-sun-* when selecting mh-sun3 to avoid matching NetBSD/sun3 ! systems. Tue Oct 31 16:57:32 1995 Jim Wilson *************** Thu Sep 7 20:03:41 1995 Ken Raeburn < *** 4731,4737 **** Fri Sep 1 08:06:58 1995 James G. Smith * config.sub: recognise mips64vr4300 and mips64vr4300el as valid ! targets. Wed Aug 30 21:06:50 1995 Jason Molenda (crash@phydeaux.cygnus.com) --- 5203,5209 ---- Fri Sep 1 08:06:58 1995 James G. Smith * config.sub: recognise mips64vr4300 and mips64vr4300el as valid ! targets. Wed Aug 30 21:06:50 1995 Jason Molenda (crash@phydeaux.cygnus.com) *************** Thu May 11 17:23:26 1995 Per Bothner < *** 4916,4922 **** Tue May 9 15:52:05 1995 Michael Meissner ! * config.sub: Recognize powerpcle as the little endian varient of the PowerPC. Recgonize ppc as a PowerPC variant, and ppcle as a powerpcle variant. Convert pentium into i586, not i486. Add p5 alias for i586. Map new x86 variants p6, k5, nexgen into i586 --- 5388,5394 ---- Tue May 9 15:52:05 1995 Michael Meissner ! * config.sub: Recognize powerpcle as the little endian variant of the PowerPC. Recgonize ppc as a PowerPC variant, and ppcle as a powerpcle variant. Convert pentium into i586, not i486. Add p5 alias for i586. Map new x86 variants p6, k5, nexgen into i586 *************** Fri Apr 14 15:21:17 1995 Doug Evans * test-build.mk: Enable building of shared libraries on IRIX 5 and ! OSF/1. Fix compiler flags. * build-all.mk: Support Linux and OSF/1 3.0. Fix compiler flags. Tue Apr 11 18:55:40 1995 Doug Evans --- 5426,5432 ---- Wed Apr 12 16:06:01 1995 Jason Merrill * test-build.mk: Enable building of shared libraries on IRIX 5 and ! OSF/1. Fix compiler flags. * build-all.mk: Support Linux and OSF/1 3.0. Fix compiler flags. Tue Apr 11 18:55:40 1995 Doug Evans *************** Fri Aug 26 13:05:27 1994 Per Bothner ( *** 5388,5408 **** Thu Aug 25 20:28:51 1994 Richard Stallman * config.guess (Pyramid*:OSx*:*:*): New case. ! (PATH): Add /.attbin at end for finding uname. ! (dummy.c): Handle i860-alliant-bsd. Follow whitespace conventions. Wed Aug 17 18:21:02 1994 Tor Egge (tegge@pvv.unit.no) ! * config.guess (M88*:DolphinOS:*:*): New case. Thu Aug 11 17:00:13 1994 Stan Cox (coxs@dg-rtp.dg.com) ! * config.guess (AViiON:dgux:*:*): Use TARGET_BINARY_INTERFACE ! to select whether to use ELF or COFF. Sun Jul 24 16:20:53 1994 Richard Stallman ! * config.guess: Recognize i860-stardent-sysv and i860-unknown-sysv. Sun May 1 10:23:10 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) --- 5860,5880 ---- Thu Aug 25 20:28:51 1994 Richard Stallman * config.guess (Pyramid*:OSx*:*:*): New case. ! (PATH): Add /.attbin at end for finding uname. ! (dummy.c): Handle i860-alliant-bsd. Follow whitespace conventions. Wed Aug 17 18:21:02 1994 Tor Egge (tegge@pvv.unit.no) ! * config.guess (M88*:DolphinOS:*:*): New case. Thu Aug 11 17:00:13 1994 Stan Cox (coxs@dg-rtp.dg.com) ! * config.guess (AViiON:dgux:*:*): Use TARGET_BINARY_INTERFACE ! to select whether to use ELF or COFF. Sun Jul 24 16:20:53 1994 Richard Stallman ! * config.guess: Recognize i860-stardent-sysv and i860-unknown-sysv. Sun May 1 10:23:10 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) *************** Tue Apr 26 18:11:33 1994 Ian Lance Tayl *** 5725,5732 **** Mon Apr 25 15:06:34 1994 Stan Shebs (shebs@andros.cygnus.com) ! * configure.in (*-*-lynxos*): Don't configure newlib for either ! native or cross Lynx. Sat Apr 16 11:58:16 1994 Doug Evans (dje@canuck.cygnus.com) --- 6197,6204 ---- Mon Apr 25 15:06:34 1994 Stan Shebs (shebs@andros.cygnus.com) ! * configure.in (*-*-lynxos*): Don't configure newlib for either ! native or cross Lynx. Sat Apr 16 11:58:16 1994 Doug Evans (dje@canuck.cygnus.com) *************** Thu Apr 14 23:33:17 1994 Ian Lance Tayl *** 5741,5747 **** Wed Apr 13 15:14:52 1994 Bill Cox (bill@cygnus.com) * configure: Make file links cleanly even if Lynx fails on ! an NFS symlink (at least fail cleanly). Mon Apr 11 10:58:56 1994 Jim Wilson (wilson@sphagnum.cygnus.com) --- 6213,6219 ---- Wed Apr 13 15:14:52 1994 Bill Cox (bill@cygnus.com) * configure: Make file links cleanly even if Lynx fails on ! an NFS symlink (at least fail cleanly). Mon Apr 11 10:58:56 1994 Jim Wilson (wilson@sphagnum.cygnus.com) *************** Sat Feb 5 01:00:33 1994 Ian Lance Tayl *** 5894,5900 **** Wed Feb 2 13:57:57 1994 Jeffrey A. Law (law@snake.cs.utah.edu) ! * Makefile.in: Avoid bug in losing hpux sed. Wed Feb 2 14:53:05 1994 Jim Kingdon (kingdon@lioth.cygnus.com) --- 6366,6372 ---- Wed Feb 2 13:57:57 1994 Jeffrey A. Law (law@snake.cs.utah.edu) ! * Makefile.in: Avoid bug in losing hpux sed. Wed Feb 2 14:53:05 1994 Jim Kingdon (kingdon@lioth.cygnus.com) *************** Thu Oct 29 00:12:41 1992 david d `zoo' *** 7329,7336 **** ranlib. * configure: also define $(host_canonical) and ! $(target_canonical), which are the full, canonical names for the ! given host and target Sun Nov 1 16:38:17 1992 Per Bothner (bothner@cygnus.com) --- 7801,7808 ---- ranlib. * configure: also define $(host_canonical) and ! $(target_canonical), which are the full, canonical names for the ! given host and target Sun Nov 1 16:38:17 1992 Per Bothner (bothner@cygnus.com) *************** Thu Aug 27 13:04:42 1992 Brendan Kehoe *** 7471,7484 **** Mon Aug 24 14:05:14 1992 Ian Lance Taylor (ian@cygnus.com) ! * config.sub, configure.in: accept OSE68000 and OSE68k. * Makefile.in: don't create all directories for ``make install''; let the subdirectories create the ones they need. Tue Aug 11 23:13:17 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com) ! * COPYING: new file, GPL v2 Tue Aug 4 01:12:43 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com) --- 7943,7956 ---- Mon Aug 24 14:05:14 1992 Ian Lance Taylor (ian@cygnus.com) ! * config.sub, configure.in: accept OSE68000 and OSE68k. * Makefile.in: don't create all directories for ``make install''; let the subdirectories create the ones they need. Tue Aug 11 23:13:17 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com) ! * COPYING: new file, GPL v2 Tue Aug 4 01:12:43 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com) *************** Fri May 8 08:31:41 1992 K. Richard Pix *** 7643,7649 **** * configure: print the "Building in" message only when building in other than "." AND verbose. ! * configure: remove -s, rework -v to better accomodate guested configures. * standards.texi: updated to 3 may, fixed librid <-> libdir typo. --- 8115,8121 ---- * configure: print the "Building in" message only when building in other than "." AND verbose. ! * configure: remove -s, rework -v to better accommodate guested configures. * standards.texi: updated to 3 may, fixed librid <-> libdir typo. diff -Nrc3pad gcc-3.0.4/FAQ gcc-3.1/FAQ *** gcc-3.0.4/FAQ Wed Feb 20 19:41:08 2002 --- gcc-3.1/FAQ Wed May 15 02:40:24 2002 *************** References *** 622,628 **** 1. http://www.gnu.org/software/gcc/faq.html 2. http://www.eskimo.com/~scs/C-faq/top.html ! 3. http://reality.sgi.com/austern_mti/std-c++/faq.html 4. http://www.fortran.com/fortran/info.html 5. http://gcc.gnu.org/onlinedocs/libstdc++/faq/index.html 6. http://gcc.gnu.org/java/faq.html --- 622,628 ---- 1. http://www.gnu.org/software/gcc/faq.html 2. http://www.eskimo.com/~scs/C-faq/top.html ! 3. http://www.research.att.com/~austern/csc/faq.html 4. http://www.fortran.com/fortran/info.html 5. http://gcc.gnu.org/onlinedocs/libstdc++/faq/index.html 6. http://gcc.gnu.org/java/faq.html diff -Nrc3pad gcc-3.0.4/INSTALL/binaries.html gcc-3.1/INSTALL/binaries.html *** gcc-3.0.4/INSTALL/binaries.html Wed Feb 20 19:41:09 2002 --- gcc-3.1/INSTALL/binaries.html Wed May 15 02:40:24 2002 *************** *** 3,13 **** Installing GCC: Binaries ! ! -

Installing GCC: Binaries

We are often asked about pre-compiled versions of GCC. While we cannot --- 3,13 ---- Installing GCC: Binaries ! ! +

Installing GCC: Binaries

Installing GCC: Binaries

We are often asked about pre-compiled versions of GCC. While we cannot diff -Nrc3pad gcc-3.0.4/INSTALL/build.html gcc-3.1/INSTALL/build.html *** gcc-3.0.4/INSTALL/build.html Wed Feb 20 19:41:09 2002 --- gcc-3.1/INSTALL/build.html Wed May 15 02:40:24 2002 *************** *** 3,20 **** Installing GCC: Building ! ! -

Installing GCC: Building

Now that GCC is configured, you are ready to build the compiler and runtime libraries.

We highly recommend that GCC be built using GNU make; ! other versions may work, then again they might not.

(For example, many broken versions of make will fail if you use the recommended setup where objdir is different from srcdir. --- 3,22 ---- Installing GCC: Building ! ! +

Installing GCC: Building

Installing GCC: Building

Now that GCC is configured, you are ready to build the compiler and runtime libraries.

We highly recommend that GCC be built using GNU make; ! other versions may work, then again they might not. ! GNU make is required for compiling GNAT (the Ada compiler) and the Java ! runtime library.

(For example, many broken versions of make will fail if you use the recommended setup where objdir is different from srcdir. *************** parser sources, releases contain the Bis *** 54,64 **** not need Bison installed to build them.

When building from CVS or snapshots, or if you modify Texinfo ! documentation, you need version 4.0 or later of Texinfo installed if you want Info documentation to be regenerated. Releases contain Info documentation pre-built for the unmodified documentation in the release. !

Building a native compiler

For a native build issue the command make bootstrap. This will build the entire GCC system, which includes the following steps: --- 56,66 ---- not need Bison installed to build them.

When building from CVS or snapshots, or if you modify Texinfo ! documentation, you need version 4.1 or later of Texinfo installed if you want Info documentation to be regenerated. Releases contain Info documentation pre-built for the unmodified documentation in the release. !

Building a native compiler

For a native build issue the command make bootstrap. This will build the entire GCC system, which includes the following steps: *************** a few systems, meaningful comparison of *** 118,124 **** always appear "different". If you encounter this problem, you will need to disable comparison in the Makefile.) !

Building a cross compiler

We recommend reading the crossgcc FAQ --- 120,126 ---- always appear "different". If you encounter this problem, you will need to disable comparison in the Makefile.) !

Building a cross compiler

We recommend reading the crossgcc FAQ *************** tree before configuring. *** 153,159 ****

Note that if an error occurs in any step the make process will exit. !

Building in parallel

If you have a multiprocessor system you can use make bootstrap MAKE="make -j 2" -j 2 or just make -j 2 bootstrap --- 155,161 ----

Note that if an error occurs in any step the make process will exit. !

Building in parallel

If you have a multiprocessor system you can use make bootstrap MAKE="make -j 2" -j 2 or just make -j 2 bootstrap *************** when building GCC. You can use a bigger *** 162,167 **** --- 164,222 ---- you like. In most cases, it won't help to use a number bigger than the number of processors in your machine. +

Building the Ada compiler

+ +

In order to build GNAT, the Ada compiler, you need a working GNAT + compiler (GNAT version 3.13 or later, or GCC version 3.1 or later), + since the Ada front end is written in Ada (with some + GNAT-specific extensions), and GNU make. + +

However, you do not need a full installation of GNAT, just the GNAT + binary gnat1, a copy of gnatbind, and a compiler driver + which can deal with Ada input (by invoking the gnat1 binary). + You can specify this compiler driver by setting the ADAC + environment variable at the configure step. configure can + detect the driver automatically if it has got a common name such as + gcc or gnatgcc. Of course, you still need a working + C compiler (the compiler driver can be different or not). + configure does not test whether the GNAT installation works + and has a sufficiently recent version; if too old a GNAT version is + installed, the build will fail unless --enable-languages is + used to disable building the Ada front end. + +

Additional build tools (such as gnatmake) or a working GNAT + run-time library installation are usually not required. However, + if you want to boostrap the compiler using a minimal version of GNAT, + you have to issue the following commands before invoking make + boostrap (this assumes that you start with an unmodified and consistent + source distribution): + +

    cd srcdir/gcc/ada
+     touch treeprs.ads [es]info.h nmake.ad[bs]
+ 
+ +

At the moment, the GNAT library and several tools for GNAT are not built + by make bootstrap. You have to invoke + make gnatlib_and_tools in the objdir/gcc + subdirectory before proceeding with the next steps. + +

For example, you can build a native Ada compiler by issuing the + following commands (assuming make is GNU make): + +

    cd objdir
+     srcdir/configure --enable-languages=c,ada
+     cd srcdir/gcc/ada
+     touch treeprs.ads [es]info.h nmake.ad[bs]
+     cd objdir
+     make bootstrap
+     cd gcc
+     make gnatlib_and_tools
+     cd ..
+ 
+ +

Currently, when compiling the Ada front end, you cannot use the parallel + build feature described in the previous section. +


Return to the GCC Installation page diff -Nrc3pad gcc-3.0.4/INSTALL/configure.html gcc-3.1/INSTALL/configure.html *** gcc-3.0.4/INSTALL/configure.html Wed Feb 20 19:41:09 2002 --- gcc-3.1/INSTALL/configure.html Wed May 15 02:40:24 2002 *************** *** 3,13 **** Installing GCC: Configuration ! ! -

Installing GCC: Configuration

Like most GNU software, GCC must be configured before it can be built. --- 3,13 ---- Installing GCC: Configuration ! ! +

Installing GCC: Configuration

Installing GCC: Configuration

Like most GNU software, GCC must be configured before it can be built. *************** affected by this requirement, see *** 50,61 ****

To configure GCC: !

   % mkdir objdir
     % cd objdir
     % srcdir/configure [options] [target]
  
!

Target specification

!

Options specification

Use options to override several configure time options for GCC. A list of supported options follows; configure *************** the installation directory for G++ heade *** 127,132 **** --- 127,177 ---- +

--program-prefix=prefix +
GCC supports some transformations of the names of its programs when + installing them. This option prepends prefix to the names of + programs to install in bindir (see above). For example, specifying + --program-prefix=foo- would result in gcc + being installed as /usr/local/bin/foo-gcc. + +
--program-suffix=suffix +
Appends suffix to the names of programs to install in bindir + (see above). For example, specifying --program-suffix=-3.1 + would result in gcc being installed as + /usr/local/bin/gcc-3.1. + +
--program-transform-name=pattern +
Applies the sed script pattern to be applied to the names + of programs to install in bindir (see above). pattern has to + consist of one or more basic sed editing commands, separated by + semicolons. For example, if you want the gcc program name to be + transformed to the installed program /usr/local/bin/myowngcc and + the g++ program name to be transformed to + /usr/local/bin/gspecial++ without changing other program names, + you could use the pattern + --program-transform-name='s/^gcc$/myowngcc/; s/^g++$/gspecial++/' + to achieve this effect. + +

All three options can be combined and used together, resulting in more + complex conversion patterns. As a basic rule, prefix (and + suffix) are prepended (appended) before further transformations + can happen with a special transformation script pattern. + +

As currently implemented, this options only take effect for native + builds; cross compiler binaries' names are not transformed even when a + transformation is explicitly asked for by one of this options. + +

For native builds, some of the installed programs are also installed + with the target alias in front of their name, as in + i686-pc-linux-gnu-gcc. All of the above transformations happen + before the target alias is prepended to the name - so, specifying + --program-prefix=foo- and program-suffix=-3.1, the + resulting binary would be installed as + /usr/local/bin/i686-pc-linux-gnu-foo-gcc-3.1. + +

As a last shortcoming, none of the installed Ada programs are + transformed yet, which will be fixed in some time. +

--with-local-prefix=dirname
Specify the installation directory for local include files. The default is *************** SPARC. If configure does not recognize *** 353,358 **** --- 398,409 ---- 603e, or ultrasparc) you provide, please check the configure script for a complete list of supported models. +
--enable-altivec +
Specify that the target supports AltiVec vector enhancements. This + option will adjust the ABI for AltiVec enhancements, as well as generate + AltiVec code when appropriate. This option is only available for + PowerPC systems. +
--enable-target-optspace
Specify that target libraries should be optimized for code space instead of code speed. *************** changed in this case. *** 391,402 **** their runtime libraries should be built. For a list of valid values for langN you can issue the following command in the gcc directory of your GCC source tree:
!
grep language= */config-lang.in
  
Currently, you can use any of the following: ! c, c++, f77, java and objc. ! CHILL is not currently maintained, and will almost ! certainly fail to compile.
If you do not pass this flag, all languages available in the gcc sub-tree will be configured. Re-defining LANGUAGES when calling make bootstrap does not work anymore, as those --- 442,452 ---- their runtime libraries should be built. For a list of valid values for langN you can issue the following command in the gcc directory of your GCC source tree:
!
grep language= */config-lang.in
  
Currently, you can use any of the following: ! ada, c, c++, f77, java, objc. ! Building the Ada compiler has special requirements, see below.
If you do not pass this flag, all languages available in the gcc sub-tree will be configured. Re-defining LANGUAGES when calling make bootstrap does not work anymore, as those *************** use DWARF 2 debugging information as the *** 424,430 ****
The --enable-win32-registry option enables Windows-hosted GCC to look up installations paths in the registry using the following key: !
HKEY_LOCAL_MACHINE\SOFTWARE\Free Software Foundation\key
  

key defaults to GCC version number, and can be overridden by the --- 474,480 ----

The --enable-win32-registry option enables Windows-hosted GCC to look up installations paths in the registry using the following key: !
HKEY_LOCAL_MACHINE\SOFTWARE\Free Software Foundation\key
  

key defaults to GCC version number, and can be overridden by the *************** ignores catgets and instead *** 472,480 **** gettext library. The --with-catgets option causes the build procedure to use the host's catgets in this situation.

--with-system-zlib
Use installed zlib rather than that included with GCC. This option ! only applies if the Java front end is being built.

Some options which only apply to building cross compilers: --- 522,544 ---- gettext library. The --with-catgets option causes the build procedure to use the host's catgets in this situation. +

--with-libiconv-prefix=dir +
Search for libiconv header files in dir/include and + libiconv library files in dir/lib. +
--with-system-zlib
Use installed zlib rather than that included with GCC. This option ! only applies if the Java front end is being built. ! !
--enable-obsolete !
Enable configuration for an obsoleted system. If you attempt to ! configure GCC for a system (build, host, or target) which has been ! obsoleted, and you do not specify this flag, configure will halt with an ! error message. ! !

All support for systems which have been obsoleted in one release of GCC ! is removed entirely in the next major release, unless someone steps ! forward to maintain the port.

Some options which only apply to building cross compilers: diff -Nrc3pad gcc-3.0.4/INSTALL/download.html gcc-3.1/INSTALL/download.html *** gcc-3.0.4/INSTALL/download.html Wed Feb 20 19:41:08 2002 --- gcc-3.1/INSTALL/download.html Wed May 15 02:40:24 2002 *************** *** 3,13 **** Downloading GCC ! ! -

Downloading GCC

GCC is distributed via CVS and FTP --- 3,13 ---- Downloading GCC ! ! +

Downloading GCC

Downloading GCC

GCC is distributed via CVS and FTP *************** components. *** 19,28 **** for information on how to obtain GCC.

The full distribution includes the C, C++, Objective-C, Fortran, Java, ! and CHILL compilers. The full distribution also includes runtime libraries ! for C++, Objective-C, Fortran, Java and CHILL. (GCC 3.0 does not ! include CHILL.) In GCC 3.0 and later versions, GNU compiler testsuites ! are also included in the full distribution.

If you choose to download specific components, you must download the core GCC distribution plus any language specific distributions you wish to --- 19,28 ---- for information on how to obtain GCC.

The full distribution includes the C, C++, Objective-C, Fortran, Java, ! and Ada (in case of GCC 3.1 and later) compilers. The full distribution ! also includes runtime libraries for C++, Objective-C, Fortran, and Java. ! In GCC 3.0 and later versions, GNU compiler testsuites are also included ! in the full distribution.

If you choose to download specific components, you must download the core GCC distribution plus any language specific distributions you wish to diff -Nrc3pad gcc-3.0.4/INSTALL/finalinstall.html gcc-3.1/INSTALL/finalinstall.html *** gcc-3.0.4/INSTALL/finalinstall.html Wed Feb 20 19:41:09 2002 --- gcc-3.1/INSTALL/finalinstall.html Wed May 15 02:40:24 2002 *************** *** 3,17 **** Installing GCC: Final installation ! ! -

Installing GCC: Final installation

Now that GCC has been built (and optionally tested), you can install it with !

cd objdir; make install
  

That step completes the installation of GCC; user level binaries can --- 3,17 ---- Installing GCC: Final installation ! ! +

Installing GCC: Final installation

Installing GCC: Final installation

Now that GCC has been built (and optionally tested), you can install it with !

cd objdir; make install
  

That step completes the installation of GCC; user level binaries can *************** in libdir (norma *** 25,32 **** parts of the compiler in libdir/gcc-lib; documentation in info format in infodir (normally prefix/info). !

If you don't mind, please quickly review the ! 3.0 build status page. If your system is not listed for the version of GCC that you built, send a note to gcc@gcc.gnu.org indicating --- 25,35 ---- parts of the compiler in libdir/gcc-lib; documentation in info format in infodir (normally prefix/info). !

If you built a released version of GCC using make bootstrap then please ! quickly review the build status page for ! 3.1, ! 3.0, or ! 2.95. If your system is not listed for the version of GCC that you built, send a note to gcc@gcc.gnu.org indicating *************** that file itself, just the one-line outp *** 41,46 **** --- 44,55 ---- This tells us which version of GCC you built and the options you passed to configure. +

  • Whether you enabled all languages or a subset of them. If you used a + full distribution then this information is part of the configure + options in the output of gcc -v, but if you downloaded the + "core" compiler plus additional front ends then it isn't apparent + which ones you built unless you tell us about it. +
  • If the build was for GNU/Linux, also include:
    • The distribution name and version (e.g., Red Hat 7.1 or Debian 2.2.3); *************** incomplete or out of date. Send a note *** 71,77 **** bug reporting guidelines.

      If you want to print the GCC manuals, do cd objdir; make ! dvi. You will need to have texi2dvi (version at least 4.0) and TeX installed. This creates a number of .dvi files in subdirectories of objdir; these may be converted for printing with programs such as dvips. You can also --- 80,86 ---- bug reporting guidelines.

      If you want to print the GCC manuals, do cd objdir; make ! dvi. You will need to have texi2dvi (version at least 4.1) and TeX installed. This creates a number of .dvi files in subdirectories of objdir; these may be converted for printing with programs such as dvips. You can also diff -Nrc3pad gcc-3.0.4/INSTALL/gfdl.html gcc-3.1/INSTALL/gfdl.html *** gcc-3.0.4/INSTALL/gfdl.html Wed Feb 20 19:41:09 2002 --- gcc-3.1/INSTALL/gfdl.html Wed May 15 02:40:24 2002 *************** *** 3,17 **** Installing GCC: GNU Free Documentation License ! ! -

      Installing GCC: GNU Free Documentation License

      Version 1.1, March 2000
      !
      Copyright © 2000 Free Software Foundation, Inc.
        59 Temple Place, Suite 330, Boston, MA  02111-1307, USA
        
        Everyone is permitted to copy and distribute verbatim copies
      --- 3,17 ----
        Installing GCC: GNU Free Documentation License
        
        
      ! 
      ! 
        
        
      + 

      Installing GCC: GNU Free Documentation License

      Installing GCC: GNU Free Documentation License

      Version 1.1, March 2000
      !
      Copyright © 2000 Free Software Foundation, Inc.
        59 Temple Place, Suite 330, Boston, MA  02111-1307, USA
        
        Everyone is permitted to copy and distribute verbatim copies
      *************** number of this License, you may choose a
      *** 347,359 ****
        as a draft) by the Free Software Foundation.
        
        
      ! 

      ADDENDUM: How to use this License for your documents

      To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: !

        Copyright (C)  year  your name.
          Permission is granted to copy, distribute and/or modify this document
          under the terms of the GNU Free Documentation License, Version 1.1
          or any later version published by the Free Software Foundation;
      --- 347,359 ----
        as a draft) by the Free Software Foundation.
        
        
      ! 

      ADDENDUM: How to use this License for your documents

      To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: !

        Copyright (C)  year  your name.
          Permission is granted to copy, distribute and/or modify this document
          under the terms of the GNU Free Documentation License, Version 1.1
          or any later version published by the Free Software Foundation;
      diff -Nrc3pad gcc-3.0.4/INSTALL/index.html gcc-3.1/INSTALL/index.html
      *** gcc-3.0.4/INSTALL/index.html	Wed Feb 20 19:41:08 2002
      --- gcc-3.1/INSTALL/index.html	Wed May 15 02:40:24 2002
      ***************
      *** 3,13 ****
        Installing GCC
        
        
      ! 
      ! 
        
      - 
        
        

      Installing GCC

      The latest version of this document is always available at --- 3,13 ---- Installing GCC ! ! +

      Installing GCC

      Installing GCC

      The latest version of this document is always available at *************** package specific installation instructio *** 25,34 **** We recommend you browse the entire generic installation instructions before you proceed. !

      A ! list of successful builds ! for GCC 3.0 releases is available at our web pages. This list is updated ! as new information becomes available.

      The installation procedure itself is broken into five steps. --- 25,37 ---- We recommend you browse the entire generic installation instructions before you proceed. !

      Lists of successful builds for released versions of GCC are ! available at our web pages for ! 3.1, ! 3.0 ! and ! 2.95. ! These lists are updated as new information becomes available.

      The installation procedure itself is broken into five steps. *************** remove that directory when you do not ne *** 47,59 **** any longer, and, if shared libraries are installed there as well, no more binaries exist that use them.


      Return to the GCC Installation page

      Copyright © 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001 Free Software Foundation, Inc. !

      Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or --- 50,65 ---- any longer, and, if shared libraries are installed there as well, no more binaries exist that use them. +

      There are also some old installation instructions, + which are mostly obsolete but still contain some information which has + not yet been merged into the main part of this manual. +


      Return to the GCC Installation page

      Copyright © 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc.

      Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or diff -Nrc3pad gcc-3.0.4/INSTALL/old.html gcc-3.1/INSTALL/old.html *** gcc-3.0.4/INSTALL/old.html Thu Jan 1 00:00:00 1970 --- gcc-3.1/INSTALL/old.html Wed May 15 02:40:24 2002 *************** *** 0 **** --- 1,611 ---- + + + Installing GCC: Old documentation + + + + + + +

      Installing GCC: Old documentation

      +

      Old installation documentation

      + +

      Note most of this information is out of date and superseded by the + previous chapters of this manual. It is provided for historical + reference only, because of a lack of volunteers to merge it into the + main manual. + +

      Here is the procedure for installing GNU CC on a GNU or Unix system. + See VMS Install, for VMS systems. + +

        +

      1. If you have chosen a configuration for GNU CC which requires other GNU + tools (such as GAS or the GNU linker) instead of the standard system + tools, install the required tools in the build directory under the names + as, ld or whatever is appropriate. This will enable the + compiler to find the proper tools for compilation of the program + enquire. + +

        Alternatively, you can do subsequent compilation using a value of the + PATH environment variable such that the necessary GNU tools come + before the standard system tools. + +

      2. Specify the host, build and target machine configurations. You do this + when you run the configure script. + +

        The build machine is the system which you are using, the + host machine is the system where you want to run the resulting + compiler (normally the build machine), and the target machine is + the system for which you want the compiler to generate code. + +

        If you are building a compiler to produce code for the machine it runs + on (a native compiler), you normally do not need to specify any operands + to configure; it will try to guess the type of machine you are on + and use that as the build, host and target machines. So you don't need + to specify a configuration when building a native compiler unless + configure cannot figure out what your configuration is or guesses + wrong. + +

        In those cases, specify the build machine's configuration name + with the --host option; the host and target will default to be + the same as the host machine. (If you are building a cross-compiler, + see Cross-Compiler.) + +

        Here is an example: + +

        ./configure --host=sparc-sun-sunos4.1
        + 
        + +

        A configuration name may be canonical or it may be more or less + abbreviated. + +

        A canonical configuration name has three parts, separated by dashes. + It looks like this: cpu-company-system. + (The three parts may themselves contain dashes; configure + can figure out which dashes serve which purpose.) For example, + m68k-sun-sunos4.1 specifies a Sun 3. + +

        You can also replace parts of the configuration by nicknames or aliases. + For example, sun3 stands for m68k-sun, so + sun3-sunos4.1 is another way to specify a Sun 3. + +

        You can specify a version number after any of the system types, and some + of the CPU types. In most cases, the version is irrelevant, and will be + ignored. So you might as well specify the version if you know it. + +

        See Configurations, for a list of supported configuration names and + notes on many of the configurations. You should check the notes in that + section before proceeding any further with the installation of GNU CC. + +

      + +

      Configurations Supported by GNU CC

      + +

      Here are the possible CPU types: + +

      + 1750a, a29k, alpha, arm, avr, cn, clipper, dsp16xx, elxsi, fr30, h8300, + hppa1.0, hppa1.1, i370, i386, i486, i586, i686, i786, i860, i960, m32r, + m68000, m68k, m6811, m6812, m88k, mcore, mips, mipsel, mips64, mips64el, + mn10200, mn10300, ns32k, pdp11, powerpc, powerpcle, romp, rs6000, sh, sparc, + sparclite, sparc64, v850, vax, we32k. +
      + +

      Here are the recognized company names. As you can see, customary + abbreviations are used rather than the longer official names. + +

      + acorn, alliant, altos, apollo, apple, att, bull, + cbm, convergent, convex, crds, dec, dg, dolphin, + elxsi, encore, harris, hitachi, hp, ibm, intergraph, isi, + mips, motorola, ncr, next, ns, omron, plexus, + sequent, sgi, sony, sun, tti, unicom, wrs. +
      + +

      The company name is meaningful only to disambiguate when the rest of + the information supplied is insufficient. You can omit it, writing + just cpu-system, if it is not needed. For example, + vax-ultrix4.2 is equivalent to vax-dec-ultrix4.2. + +

      Here is a list of system types: + +

      + 386bsd, aix, acis, amigaos, aos, aout, aux, bosx, bsd, clix, coff, ctix, cxux, + dgux, dynix, ebmon, ecoff, elf, esix, freebsd, hms, genix, gnu, linux, + linux-gnu, hiux, hpux, iris, irix, isc, luna, lynxos, mach, minix, msdos, mvs, + netbsd, newsos, nindy, ns, osf, osfrose, ptx, riscix, riscos, rtu, sco, sim, + solaris, sunos, sym, sysv, udi, ultrix, unicos, uniplus, unos, vms, vsta, + vxworks, winnt, xenix. +
      + +

      You can omit the system type; then configure guesses the + operating system from the CPU and company. + +

      You can add a version number to the system type; this may or may not + make a difference. For example, you can write bsd4.3 or + bsd4.4 to distinguish versions of BSD. In practice, the version + number is most needed for sysv3 and sysv4, which are often + treated differently. + +

      linux-gnu is the canonical name for the GNU/Linux target; however + GNU CC will also accept linux. The version of the kernel in use is + not relevant on these systems. A suffix such as libc1 or aout + distinguishes major versions of the C library; all of the suffixed versions + are obsolete. + +

      If you specify an impossible combination such as i860-dg-vms, + then you may get an error message from configure, or it may + ignore part of the information and do the best it can with the rest. + configure always prints the canonical name for the alternative + that it used. GNU CC does not support all possible alternatives. + +

      Often a particular model of machine has a name. Many machine names are + recognized as aliases for CPU/company combinations. Thus, the machine + name sun3, mentioned above, is an alias for m68k-sun. + Sometimes we accept a company name as a machine name, when the name is + popularly used for a particular machine. Here is a table of the known + machine names: + +

      + 3300, 3b1, 3bn, 7300, altos3068, altos, + apollo68, att-7300, balance, + convex-cn, crds, decstation-3100, + decstation, delta, encore, + fx2800, gmicro, hp7nn, hp8nn, + hp9k2nn, hp9k3nn, hp9k7nn, + hp9k8nn, iris4d, iris, isi68, + m3230, magnum, merlin, miniframe, + mmax, news-3600, news800, news, next, + pbd, pc532, pmax, powerpc, powerpcle, ps2, risc-news, + rtpc, sun2, sun386i, sun386, sun3, + sun4, symmetry, tower-32, tower. +
      + +

      Remember that a machine name specifies both the cpu type and the company + name. + If you want to install your own homemade configuration files, you can + use local as the company name to access them. If you use + configuration cpu-local, the configuration name + without the cpu prefix + is used to form the configuration file names. + +

      Thus, if you specify m68k-local, configuration uses + files m68k.md, local.h, m68k.c, + xm-local.h, t-local, and x-local, all in the + directory config/m68k. + +

      Here is a list of configurations that have special treatment or special + things you must know: + +

      +
      vax-dec-vms +
      See VMS Install, for details on how to install GNU CC on VMS. +
      + +

      Building and Installing a Cross-Compiler

      + +

      GNU CC can function as a cross-compiler for many machines, but not all. + +

        +
      • Cross-compilers for the Mips as target using the Mips assembler + currently do not work, because the auxiliary programs + mips-tdump.c and mips-tfile.c can't be compiled on + anything but a Mips. It does work to cross compile for a Mips + if you use the GNU assembler and linker. + +
      • Cross-compilers between machines with different floating point formats + have not all been made to work. GNU CC now has a floating point + emulator with which these can work, but each target machine description + needs to be updated to take advantage of it. + +
      • Cross-compilation between machines of different word sizes is + somewhat problematic and sometimes does not work. +
      + +

      Since GNU CC generates assembler code, you probably need a + cross-assembler that GNU CC can run, in order to produce object files. + If you want to link on other than the target machine, you need a + cross-linker as well. You also need header files and libraries suitable + for the target machine that you can install on the host machine. + +

      Steps of Cross-Compilation

      + +

      To compile and run a program using a cross-compiler involves several + steps: + +

        +
      • Run the cross-compiler on the host machine to produce assembler files + for the target machine. This requires header files for the target + machine. + +
      • Assemble the files produced by the cross-compiler. You can do this + either with an assembler on the target machine, or with a + cross-assembler on the host machine. + +
      • Link those files to make an executable. You can do this either with a + linker on the target machine, or with a cross-linker on the host + machine. Whichever machine you use, you need libraries and certain + startup files (typically crt....o) for the target machine. +
      + +

      It is most convenient to do all of these steps on the same host machine, + since then you can do it all with a single invocation of GNU CC. This + requires a suitable cross-assembler and cross-linker. For some targets, + the GNU assembler and linker are available. + +

      Configuring a Cross-Compiler

      + +

      To build GNU CC as a cross-compiler, you start out by running + configure. Use the --target=target to specify the + target type. If configure was unable to correctly identify the + system you are running on, also specify the --build=build + option. For example, here is how to configure for a cross-compiler that + produces code for an HP 68030 system running BSD on a system that + configure can correctly identify: + +

      ./configure --target=m68k-hp-bsd4.3
      + 
      + +

      Tools and Libraries for a Cross-Compiler

      + +

      If you have a cross-assembler and cross-linker available, you should + install them now. Put them in the directory + /usr/local/target/bin. Here is a table of the tools + you should put in this directory: + +

      +
      as +
      This should be the cross-assembler. + +
      ld +
      This should be the cross-linker. + +
      ar +
      This should be the cross-archiver: a program which can manipulate + archive files (linker libraries) in the target machine's format. + +
      ranlib +
      This should be a program to construct a symbol table in an archive file. +
      + +

      The installation of GNU CC will find these programs in that directory, + and copy or link them to the proper place to for the cross-compiler to + find them when run later. + +

      The easiest way to provide these files is to build the Binutils package + and GAS. Configure them with the same --host and --target + options that you use for configuring GNU CC, then build and install + them. They install their executables automatically into the proper + directory. Alas, they do not support all the targets that GNU CC + supports. + +

      If you want to install libraries to use with the cross-compiler, such as + a standard C library, put them in the directory + /usr/local/target/lib; installation of GNU CC copies + all the files in that subdirectory into the proper place for GNU CC to + find them and link with them. Here's an example of copying some + libraries from a target machine: + +

      ftp target-machine
      + lcd /usr/local/target/lib
      + cd /lib
      + get libc.a
      + cd /usr/lib
      + get libg.a
      + get libm.a
      + quit
      + 
      + +

      The precise set of libraries you'll need, and their locations on + the target machine, vary depending on its operating system. + +

      Many targets require "start files" such as crt0.o and + crtn.o which are linked into each executable; these too should be + placed in /usr/local/target/lib. There may be several + alternatives for crt0.o, for use with profiling or other + compilation options. Check your target's definition of + STARTFILE_SPEC to find out what start files it uses. + Here's an example of copying these files from a target machine: + +

      ftp target-machine
      + lcd /usr/local/target/lib
      + prompt
      + cd /lib
      + mget *crt*.o
      + cd /usr/lib
      + mget *crt*.o
      + quit
      + 
      + +

      Cross-Compilers and Header Files

      + +

      If you are cross-compiling a standalone program or a program for an + embedded system, then you may not need any header files except the few + that are part of GNU CC (and those of your program). However, if you + intend to link your program with a standard C library such as + libc.a, then you probably need to compile with the header files + that go with the library you use. + +

      The GNU C compiler does not come with these files, because (1) they are + system-specific, and (2) they belong in a C library, not in a compiler. + +

      If the GNU C library supports your target machine, then you can get the + header files from there (assuming you actually use the GNU library when + you link your program). + +

      If your target machine comes with a C compiler, it probably comes with + suitable header files also. If you make these files accessible from the host + machine, the cross-compiler can use them also. + +

      Otherwise, you're on your own in finding header files to use when + cross-compiling. + +

      When you have found suitable header files, you should put them in the + directory /usr/local/target/include, before building the + cross compiler. Then installation will run fixincludes properly and + install the corrected versions of the header files where the compiler + will use them. + +

      Provide the header files before you build the cross-compiler, because + the build stage actually runs the cross-compiler to produce parts of + libgcc.a. (These are the parts that can be compiled with + GNU CC.) Some of them need suitable header files. + +

      Here's an example showing how to copy the header files from a target + machine. On the target machine, do this: + +

      (cd /usr/include; tar cf - .) > tarfile
      + 
      + +

      Then, on the host machine, do this: + +

      ftp target-machine
      + lcd /usr/local/target/include
      + get tarfile
      + quit
      + tar xf tarfile
      + 
      + +

      Actually Building the Cross-Compiler

      + +

      Now you can proceed just as for compiling a single-machine compiler + through the step of building stage 1. + +

      If your target is exotic, you may need to provide the header file + float.h.One way to do this is to compile enquire and run + it on your target machine. The job of enquire is to run on the + target machine and figure out by experiment the nature of its floating + point representation. enquire records its findings in the header + file float.h. If you can't produce this file by running + enquire on the target machine, then you will need to come up with + a suitable float.h in some other way (or else, avoid using it in + your programs). + +

      Do not try to build stage 2 for a cross-compiler. It doesn't work to + rebuild GNU CC as a cross-compiler using the cross-compiler, because + that would produce a program that runs on the target machine, not on the + host. For example, if you compile a 386-to-68030 cross-compiler with + itself, the result will not be right either for the 386 (because it was + compiled into 68030 code) or for the 68030 (because it was configured + for a 386 as the host). If you want to compile GNU CC into 68030 code, + whether you compile it on a 68030 or with a cross-compiler on a 386, you + must specify a 68030 as the host when you configure it. + +

      To install the cross-compiler, use make install, as usual. + +

      Installing GNU CC on VMS

      + +

      The VMS version of GNU CC is distributed in a backup saveset containing + both source code and precompiled binaries. + +

      To install the gcc command so you can use the compiler easily, in + the same manner as you use the VMS C compiler, you must install the VMS CLD + file for GNU CC as follows: + +

        +

      1. Define the VMS logical names GNU_CC and GNU_CC_INCLUDE + to point to the directories where the GNU CC executables + (gcc-cpp.exe, gcc-cc1.exe, etc.) and the C include files are + kept respectively. This should be done with the commands: + +
        $ assign /system /translation=concealed -
        +   disk:[gcc.] gnu_cc
        + $ assign /system /translation=concealed -
        +   disk:[gcc.include.] gnu_cc_include
        + 
        + +

        with the appropriate disk and directory names. These commands can be + placed in your system startup file so they will be executed whenever + the machine is rebooted. You may, if you choose, do this via the + GCC_INSTALL.COM script in the [GCC] directory. + +

      2. Install the GCC command with the command line: + +
        $ set command /table=sys$common:[syslib]dcltables -
        +   /output=sys$common:[syslib]dcltables gnu_cc:[000000]gcc
        + $ install replace sys$common:[syslib]dcltables
        + 
        + +
      3. To install the help file, do the following: + +
        $ library/help sys$library:helplib.hlb gcc.hlp
        + 
        + +

        Now you can invoke the compiler with a command like gcc /verbose + file.c, which is equivalent to the command gcc -v -c file.c in + Unix. +

      + +

      If you wish to use GNU C++ you must first install GNU CC, and then + perform the following steps: + +

        +

      1. Define the VMS logical name GNU_GXX_INCLUDE to point to the + directory where the preprocessor will search for the C++ header files. + This can be done with the command: + +
        $ assign /system /translation=concealed -
        +   disk:[gcc.gxx_include.] gnu_gxx_include
        + 
        + +

        with the appropriate disk and directory name. If you are going to be + using a C++ runtime library, this is where its install procedure will install + its header files. + +

      2. Obtain the file gcc-cc1plus.exe, and place this in the same + directory that gcc-cc1.exe is kept. + +

        The GNU C++ compiler can be invoked with a command like gcc /plus + /verbose file.cc, which is equivalent to the command g++ -v -c + file.cc in Unix. +

      + +

      We try to put corresponding binaries and sources on the VMS distribution + tape. But sometimes the binaries will be from an older version than the + sources, because we don't always have time to update them. (Use the + /version option to determine the version number of the binaries and + compare it with the source file version.c to tell whether this is + so.) In this case, you should use the binaries you get to recompile the + sources. If you must recompile, here is how: + +

        +

      1. Execute the command procedure vmsconfig.com to set up the files + tm.h, config.h, aux-output.c, and md., and + to create files tconfig.h and hconfig.h. This procedure + also creates several linker option files used by make-cc1.com and + a data file used by make-l2.com. + +
        $ @vmsconfig.com
        + 
        + +
      2. Setup the logical names and command tables as defined above. In + addition, define the VMS logical name GNU_BISON to point at the + to the directories where the Bison executable is kept. This should be + done with the command: + +
        $ assign /system /translation=concealed -
        +   disk:[bison.] gnu_bison
        + 
        + +

        You may, if you choose, use the INSTALL_BISON.COM script in the + [BISON] directory. + +

      3. Install the BISON command with the command line: + +
        $ set command /table=sys$common:[syslib]dcltables -
        +   /output=sys$common:[syslib]dcltables -
        +   gnu_bison:[000000]bison
        + $ install replace sys$common:[syslib]dcltables
        + 
        + +
      4. Type @make-gcc to recompile everything, or submit the file + make-gcc.com to a batch queue. If you wish to build the GNU C++ + compiler as well as the GNU CC compiler, you must first edit + make-gcc.com and follow the instructions that appear in the + comments. + +
      5. In order to use GCC, you need a library of functions which GCC compiled code + will call to perform certain tasks, and these functions are defined in the + file libgcc2.c. To compile this you should use the command procedure + make-l2.com, which will generate the library libgcc2.olb. + libgcc2.olb should be built using the compiler built from + the same distribution that libgcc2.c came from, and + make-gcc.com will automatically do all of this for you. + +

        To install the library, use the following commands: + +

        $ library gnu_cc:[000000]gcclib/delete=(new,eprintf)
        + $ library gnu_cc:[000000]gcclib/delete=L_*
        + $ library libgcc2/extract=*/output=libgcc2.obj
        + $ library gnu_cc:[000000]gcclib libgcc2.obj
        + 
        + +

        The first command simply removes old modules that will be replaced with + modules from libgcc2 under different module names. The modules + new and eprintf may not actually be present in your + gcclib.olb--if the VMS librarian complains about those modules + not being present, simply ignore the message and continue on with the + next command. The second command removes the modules that came from the + previous version of the library libgcc2.c. + +

        Whenever you update the compiler on your system, you should also update the + library with the above procedure. + +

      6. You may wish to build GCC in such a way that no files are written to the + directory where the source files reside. An example would be the when + the source files are on a read-only disk. In these cases, execute the + following DCL commands (substituting your actual path names): + +
        $ assign dua0:[gcc.build_dir.]/translation=concealed, -
        +          dua1:[gcc.source_dir.]/translation=concealed  gcc_build
        + $ set default gcc_build:[000000]
        + 
        + +

        where the directory dua1:[gcc.source_dir] contains the source + code, and the directory dua0:[gcc.build_dir] is meant to contain + all of the generated object files and executables. Once you have done + this, you can proceed building GCC as described above. (Keep in mind + that gcc_build is a rooted logical name, and thus the device + names in each element of the search list must be an actual physical + device name rather than another rooted logical name). + +

      7. If you are building GNU CC with a previous version of GNU CC, + you also should check to see that you have the newest version of the + assembler. In particular, GNU CC version 2 treats global constant + variables slightly differently from GNU CC version 1, and GAS version + 1.38.1 does not have the patches required to work with GCC version 2. + If you use GAS 1.38.1, then extern const variables will not have + the read-only bit set, and the linker will generate warning messages + about mismatched psect attributes for these variables. These warning + messages are merely a nuisance, and can safely be ignored. + +
      8. If you want to build GNU CC with the VAX C compiler, you will need to + make minor changes in make-cccp.com and make-cc1.com + to choose alternate definitions of CC, CFLAGS, and + LIBS. See comments in those files. However, you must + also have a working version of the GNU assembler (GNU as, aka GAS) as + it is used as the back end for GNU CC to produce binary object modules + and is not included in the GNU CC sources. GAS is also needed to + compile libgcc2 in order to build gcclib (see above); + make-l2.com expects to be able to find it operational in + gnu_cc:[000000]gnu-as.exe. + +

        To use GNU CC on VMS, you need the VMS driver programs + gcc.exe, gcc.com, and gcc.cld. They are + distributed with the VMS binaries (gcc-vms) rather than the + GNU CC sources. GAS is also included in gcc-vms, as is Bison. + +

        Once you have successfully built GNU CC with VAX C, you should use the + resulting compiler to rebuild itself. Before doing this, be sure to + restore the CC, CFLAGS, and LIBS definitions in + make-cccp.com and make-cc1.com. The second generation + compiler will be able to take advantage of many optimizations that must + be suppressed when building with other compilers. +

      + +

      Under previous versions of GNU CC, the generated code would occasionally + give strange results when linked with the sharable VAXCRTL library. + Now this should work. + +

      Even with this version, however, GNU CC itself should not be linked with + the sharable VAXCRTL. The version of qsort in + VAXCRTL has a bug (known to be present in VMS versions V4.6 + through V5.5) which causes the compiler to fail. + +

      The executables are generated by make-cc1.com and + make-cccp.com use the object library version of VAXCRTL in + order to make use of the qsort routine in gcclib.olb. If + you wish to link the compiler executables with the shareable image + version of VAXCRTL, you should edit the file tm.h (created + by vmsconfig.com) to define the macro QSORT_WORKAROUND. + +

      QSORT_WORKAROUND is always defined when GNU CC is compiled with + VAX C, to avoid a problem in case gcclib.olb is not yet + available. +

      +
      +

      + Return to the GCC Installation page + + + diff -Nrc3pad gcc-3.0.4/INSTALL/specific.html gcc-3.1/INSTALL/specific.html *** gcc-3.0.4/INSTALL/specific.html Wed Feb 20 19:41:08 2002 --- gcc-3.1/INSTALL/specific.html Wed May 15 02:40:24 2002 *************** *** 3,29 **** Host/Target specific installation notes for GCC ! ! -

      Host/target specific installation notes for GCC

      Please read this document carefully before installing the GNU Compiler Collection on your machine. -

      A - list of successful builds - for GCC 3.0 releases is available at our web pages. This list is updated - as new information becomes available. -

      • 1750a-*-*
      • a29k
      • a29k-*-bsd
      • alpha*-*-*
      • alpha*-dec-osf*
      • arc-*-elf
      • arm-*-aout
      • arm-*-elf --- 3,25 ---- Host/Target specific installation notes for GCC ! ! +

        Host/Target specific installation notes for GCC

        Host/target specific installation notes for GCC

        Please read this document carefully before installing the GNU Compiler Collection on your machine.

        • 1750a-*-*
        • a29k
        • a29k-*-bsd
        • alpha*-*-*
        • alpha*-dec-osf* +
        • alphaev5-cray-unicosmk*
        • arc-*-elf
        • arm-*-aout
        • arm-*-elf *************** as new information becomes available. *** 53,60 ****
        • i?86-*-esix
        • i?86-ibm-aix
        • i?86-sequent-bsd !
        • i?86-sequent-ptx1* i?86-sequent-ptx2* !
        • i?86-*-sysv3*
        • i860-intel-osf*
        • ia64-*-linux
        • *-lynx-lynxos --- 49,55 ----
        • i?86-*-esix
        • i?86-ibm-aix
        • i?86-sequent-bsd !
        • i?86-sequent-ptx1* i?86-sequent-ptx2*, i?86-sequent-sysv3*
        • i860-intel-osf*
        • ia64-*-linux
        • *-lynx-lynxos *************** as new information becomes available. *** 67,73 ****
        • m68k-apple-aux
        • m68k-att-sysv
        • m68k-bull-sysv !
        • m68k-crds-unox
        • m68k-hp-hpux
        • m68k-*-nextstep*
        • m68k-ncr-* --- 62,68 ----
        • m68k-apple-aux
        • m68k-att-sysv
        • m68k-bull-sysv !
        • m68k-crds-unos
        • m68k-hp-hpux
        • m68k-*-nextstep*
        • m68k-ncr-* *************** as new information becomes available. *** 89,94 **** --- 84,90 ----
        • ns32k-sequent
        • ns32k-utek
        • powerpc*-*-* powerpc-*-sysv4 +
        • powerpc-*-darwin*
        • powerpc-*-elf powerpc-*-sysv4
        • powerpc-*-linux-gnu*
        • powerpc-*-netbsd* *************** as new information becomes available. *** 105,115 ****
        • *-*-solaris2*
        • sparc-sun-solaris2*
        • sparc-sun-solaris2.7 -
        • *-*-solaris2.8
        • sparc-sun-sunos4*
        • sparc-unknown-linux-gnulibc1
        • sparc-*-linux*
        • sparc64-*-*
        • *-*-sysv*
        • vax-dec-ultrix
        • we32k-*-* --- 101,111 ----
        • *-*-solaris2*
        • sparc-sun-solaris2*
        • sparc-sun-solaris2.7
        • sparc-sun-sunos4*
        • sparc-unknown-linux-gnulibc1
        • sparc-*-linux*
        • sparc64-*-* +
        • sparcv9-*-solaris2*
        • *-*-sysv*
        • vax-dec-ultrix
        • we32k-*-* *************** as new information becomes available. *** 127,135 ****
          !

          1750a-*-*

          !

          MIL-STD-1750A processors.

          The MIL-STD-1750A cross configuration produces output for as1750, an assembler/linker available under the GNU General Public --- 123,131 ----


          !

          1750a-*-*

          !

          MIL-STD-1750A processors. This target is obsoleted in GCC 3.1.

          The MIL-STD-1750A cross configuration produces output for as1750, an assembler/linker available under the GNU General Public *************** GCC. *** 169,181 ****


          !

          a29k

          AMD Am29k-family processors. These are normally used in embedded ! applications. There are no standard Unix configurations. ! This configuration ! corresponds to AMD's standard calling sequence and binary interface ! and is compatible with other 29k tools.

          You may need to make a variant of the file a29k.h for your particular configuration. --- 165,178 ----


          !

          a29k

          AMD Am29k-family processors. These are normally used in embedded ! applications. This configuration corresponds to AMD's standard calling ! sequence and binary interface and is compatible with other 29k tools. ! !

          AMD has abandoned this processor. All existing a29k targets are obsoleted ! in GCC 3.1.

          You may need to make a variant of the file a29k.h for your particular configuration. *************** particular configuration. *** 183,196 ****


          !

          a29k-*-bsd

          AMD Am29050 used in a system running a variant of BSD Unix.


          !

          alpha*-*-*

          This section contains general configuration information for all alpha-based platforms using ELF (in particular, ignore this section for --- 180,193 ----


          !

          a29k-*-bsd

          AMD Am29050 used in a system running a variant of BSD Unix.


          !

          alpha*-*-*

          This section contains general configuration information for all alpha-based platforms using ELF (in particular, ignore this section for *************** shared libraries. *** 205,228 ****


          !

          alpha*-dec-osf*

          Systems using processors that implement the DEC Alpha architecture and are running the DEC/Compaq Unix (DEC OSF/1, Digital UNIX, or Compaq Tru64 UNIX) operating system, for example the DEC Alpha AXP systems.

          In Tru64 UNIX V5.1, Compaq introduced a new assembler that does not currently (2001-06-13) work with mips-tfile. As a workaround, we need to use the old assembler, invoked via the barely documented -oldas option. To bootstrap GCC, you either need to use the Compaq C Compiler: !

             % CC=cc srcdir/configure [options] [target]
            

          or you can use a copy of GCC 2.95.3 or higher built on Tru64 UNIX V4.0: !

             % CC=gcc -Wa,-oldas srcdir/configure [options] [target]
            

          As of GNU binutils 2.11.2, neither GNU as nor GNU ld --- 202,228 ----


          !

          alpha*-dec-osf*

          Systems using processors that implement the DEC Alpha architecture and are running the DEC/Compaq Unix (DEC OSF/1, Digital UNIX, or Compaq Tru64 UNIX) operating system, for example the DEC Alpha AXP systems. +

          Support for versions before alpha*-dec-osf4 is obsoleted in GCC + 3.1. (These are the versions which identify themselves as DEC OSF/1.) +

          In Tru64 UNIX V5.1, Compaq introduced a new assembler that does not currently (2001-06-13) work with mips-tfile. As a workaround, we need to use the old assembler, invoked via the barely documented -oldas option. To bootstrap GCC, you either need to use the Compaq C Compiler: !

             % CC=cc srcdir/configure [options] [target]
            

          or you can use a copy of GCC 2.95.3 or higher built on Tru64 UNIX V4.0: !

             % CC=gcc -Wa,-oldas srcdir/configure [options] [target]
            

          As of GNU binutils 2.11.2, neither GNU as nor GNU ld *************** are supported on Tru64 UNIX, so you must *** 230,238 **** --with-gnu-as or --with-gnu-ld.

          The --enable-threads options isn't supported yet. A patch is ! in preparation for a future release. The Java runtime library has been ! reported to work on Tru64 UNIX V4.0F, V5.0, and V5.1, so you may try ! --enable-libgcj and report your results.

          GCC writes a .verstamp directive to the assembler output file unless it is built as a cross-compiler. It gets the version to use from --- 230,236 ---- --with-gnu-as or --with-gnu-ld.

          The --enable-threads options isn't supported yet. A patch is ! in preparation for a future release.

          GCC writes a .verstamp directive to the assembler output file unless it is built as a cross-compiler. It gets the version to use from *************** provide a fix shortly. *** 279,285 ****


          !

          arc-*-elf

          Argonaut ARC processor. This configuration is intended for embedded systems. --- 277,309 ----


          !

          alphaev5-cray-unicosmk*

          ! !

          Cray T3E systems running Unicos/Mk. ! !

          This port is incomplete and has many known bugs. We hope to improve the ! support for this target soon. Currently, only the C front end is supported, ! and it is not possible to build parallel applications. Cray modules are not ! supported; in particular, Craylibs are assumed to be in ! /opt/ctl/craylibs/craylibs. ! !

          You absolutely must use GNU make on this platform. Also, you ! need to tell GCC where to find the assembler and the linker. The ! simplest way to do so is by providing --with-as and ! --with-ld to configure, e.g. ! !

          configure --with-as=/opt/ctl/bin/cam --with-ld=/opt/ctl/bin/cld ! --enable-languages=c ! !

          The comparison test during make bootstrap fails on Unicos/Mk ! because the assembler inserts timestamps into object files. You should ! be able to work around this by doing make all after getting this ! failure. ! !

          !
          ! !

          arc-*-elf

          Argonaut ARC processor. This configuration is intended for embedded systems. *************** This configuration is intended for embed *** 287,293 ****


          !

          arm-*-aout

          Advanced RISC Machines ARM-family processors. These are often used in embedded applications. There are no standard Unix configurations. --- 311,317 ----


          !

          arm-*-aout

          Advanced RISC Machines ARM-family processors. These are often used in embedded applications. There are no standard Unix configurations. *************** configuration. *** 300,323 ****


          !

          arm-*-elf

          This configuration is intended for embedded systems.


          !

          arm*-*-linux-gnu

          We require GNU binutils 2.10 or newer.


          !

          arm-*-riscix

          The ARM2 or ARM3 processor running RISC iX, Acorn's port of BSD Unix. ! If you are running a version of RISC iX prior to 1.2 then you must specify the version number during configuration. Note that the assembler shipped with RISC iX does not support stabs debugging information; a new version of the assembler, with stabs support --- 324,349 ----


          !

          arm-*-elf

          This configuration is intended for embedded systems.


          !

          arm*-*-linux-gnu

          We require GNU binutils 2.10 or newer.


          !

          arm-*-riscix

          The ARM2 or ARM3 processor running RISC iX, Acorn's port of BSD Unix. ! This configuration is obsoleted in GCC 3.1. ! !

          If you are running a version of RISC iX prior to 1.2 then you must specify the version number during configuration. Note that the assembler shipped with RISC iX does not support stabs debugging information; a new version of the assembler, with stabs support *************** debugging, pass --with-gnu-as


          !

          avr

          ATMEL AVR-family micro controllers. These are used in embedded applications. There are no standard Unix configurations. --- 356,362 ----


          !

          avr

          ATMEL AVR-family micro controllers. These are used in embedded applications. There are no standard Unix configurations. *************** can also be obtained from: *** 350,356 ****

          We strongly recommend using binutils 2.11 or newer.

          The following error: !

            Error: register required
            

          indicates that you should upgrade to a newer version of the binutils. --- 376,382 ----

          We strongly recommend using binutils 2.11 or newer.

          The following error: !

            Error: register required
            

          indicates that you should upgrade to a newer version of the binutils. *************** can also be obtained from: *** 358,364 ****


          !

          c4x

          Texas Instruments TMS320C3x and TMS320C4x Floating Point Digital Signal Processors. These are used in embedded applications. There are no --- 384,390 ----


          !

          c4x

          Texas Instruments TMS320C3x and TMS320C4x Floating Point Digital Signal Processors. These are used in embedded applications. There are no *************** can also be obtained from: *** 380,386 ****


          !

          DOS

          Please have a look at our binaries page. --- 406,444 ----


          !

          CRIS

          ! !

          CRIS is the CPU architecture in Axis Communications ETRAX system-on-a-chip ! series. These are used in embedded applications. ! !

          See "CRIS Options" in the main manual ! for a list of CRIS-specific options. ! !

          There are a few different CRIS targets: !

          !
          cris-axis-aout !
          Old target. Includes a multilib for the elinux a.out-based ! target. No multilibs for newer architecture variants. !
          cris-axis-elf !
          Mainly for monolithic embedded systems. Includes a multilib for the ! v10 core used in ETRAX 100 LX. !
          cris-axis-linux-gnu !
          A GNU/Linux port for the CRIS architecture, currently targeting ! ETRAX 100 LX by default. !
          ! !

          For cris-axis-aout and cris-axis-elf you need binutils 2.11 ! or newer. For cris-axis-linux-gnu you need binutils 2.12 or newer. ! !

          Pre-packaged tools can be obtained from ! ftp://ftp.axis.com/pub/axis/tools/cris/compiler-kit/. More ! information about this platform is available at ! http://developer.axis.com/. ! !

          !
          ! !

          DOS

          Please have a look at our binaries page. *************** and includes all the necessary compilati *** 392,409 ****


          !

          dsp16xx

          A port to the AT&T DSP1610 family of processors.


          !

          *-*-freebsd*

          The version of binutils installed in /usr/bin is known to work unless otherwise specified in any per-architecture notes. However, binutils ! 2.11 is known to improve overall testsuite results.

          For FreeBSD 1, FreeBSD 2 or any mutant a.out versions of FreeBSD 3: All configuration support and files as shipped with GCC 2.95 are still in --- 450,467 ----


          !

          dsp16xx

          A port to the AT&T DSP1610 family of processors.


          !

          *-*-freebsd*

          The version of binutils installed in /usr/bin is known to work unless otherwise specified in any per-architecture notes. However, binutils ! 2.12.1 or greater is known to improve overall testsuite results.

          For FreeBSD 1, FreeBSD 2 or any mutant a.out versions of FreeBSD 3: All configuration support and files as shipped with GCC 2.95 are still in *************** place. FreeBSD 2.2.7 has been known to *** 411,416 **** --- 469,476 ---- it is unknown which version of binutils was used (it is assumed that it was the system copy in /usr/bin) and C++ EH failures were noted. +

          Support for FreeBSD 1 is obsoleted in GCC 3.1. +

          For FreeBSD using the ELF file format: DWARF 2 debugging is now the default for all CPU architectures. It had been the default on FreeBSD/alpha since its inception. You may use -gstabs instead *************** of the configuration used in the stock F *** 421,443 **** particular, --enable-threads is now configured by default. However, as a general user, do not attempt to replace the system compiler with this release. Known to bootstrap and check with good ! results on FreeBSD 3.0, 3.4, 4.0, 4.2, 4.3 and 5-CURRENT. !

          At this time, --enable-threads is not compatible with ! --enable-libgcj on FreeBSD.


          !

          elxsi-elxsi-bsd

          The Elxsi's C compiler has known limitations that prevent it from compiling GCC. Please contact mrs@wrs.com for more details.


          !

          h8300-hms

          Hitachi H8/300 series of processors. --- 481,519 ---- particular, --enable-threads is now configured by default. However, as a general user, do not attempt to replace the system compiler with this release. Known to bootstrap and check with good ! results on FreeBSD 3.0, 3.4, 4.0, 4.2, 4.3, 4.4, 4.5-STABLE and 5-CURRENT. !

          In principle, --enable-threads is now compatible with ! --enable-libgcj on FreeBSD. However, it has only been built ! and tested on i386-*-freebsd4.5 and alpha-*-freebsd5.0. The static ! library may be incorrectly built (symbols are missing at link time). ! There is a rare timing-based startup hang (probably involves an ! assupmtion about the thread library). Multi-threaded boehm-gc (required for ! libjava) exposes severe threaded signal-handling bugs on FreeBSD before ! 4.5-RELEASE. The alpha port may not fully bootstrap without some manual ! intervention: gcjh will crash with a floating-point exception while ! generating java/lang/Double.h (just copy the version built on ! i386-*-freebsd* and rerun the top-level gmake with no arguments and it ! should properly complete the bootstrap). Other CPU architectures ! supported by FreeBSD will require additional configuration tuning in, at ! the very least, both boehm-gc and libffi. ! !

          Shared libgcc_s.so is now built and installed by default.


          !

          elxsi-elxsi-bsd

          The Elxsi's C compiler has known limitations that prevent it from compiling GCC. Please contact mrs@wrs.com for more details. +

          Support for this processor is obsoleted in GCC 3.1. +


          !

          h8300-hms

          Hitachi H8/300 series of processors. *************** longer a multiple of 2 bytes. *** 451,457 ****


          !

          hppa*-hp-hpux*

          We highly recommend using gas/binutils 2.8 or newer on all hppa platforms; you may encounter a variety of problems when using the HP --- 527,533 ----


          !

          hppa*-hp-hpux*

          We highly recommend using gas/binutils 2.8 or newer on all hppa platforms; you may encounter a variety of problems when using the HP *************** the HP assembler, gas/binutils 2.11 or a *** 472,478 ****


          !

          hppa*-hp-hpux9

          The HP assembler has major problems on this platform. We've tried to work around the worst of the problems. However, those workarounds may be causing --- 548,554 ----


          !

          hppa*-hp-hpux9

          The HP assembler has major problems on this platform. We've tried to work around the worst of the problems. However, those workarounds may be causing *************** and SHELL to /bin/ksh *** 486,492 ****


          !

          hppa*-hp-hpux10

          For hpux10.20, we highly recommend you pick up the latest sed patch PHCO_19798 from HP. HP has two sites which provide patches free of --- 562,568 ----


          !

          hppa*-hp-hpux10

          For hpux10.20, we highly recommend you pick up the latest sed patch PHCO_19798 from HP. HP has two sites which provide patches free of *************** bootstrap. *** 508,528 ****


          !

          hppa*-hp-hpux11

          !

          GCC 3.0 supports HP-UX 11. You must use GNU binutils 2.11 or above on this platform. Thread support is not currently implemented for this platform, so --enable-threads does not work. See http://gcc.gnu.org/ml/gcc-prs/2002-01/msg00551.html and http://gcc.gnu.org/ml/gcc-bugs/2002-01/msg00663.html. GCC 2.95.x is not supported under HP-UX 11 and cannot be used to ! compile GCC 3.0. Refer to binaries for information ! about obtaining precompiled GCC binaries for HP-UX.


          !

          i370-*-*

          This port is very preliminary and has many known bugs. We hope to have a higher-quality port for this machine soon. --- 584,604 ----


          !

          hppa*-hp-hpux11

          !

          GCC 3.0 and up support HP-UX 11. You must use GNU binutils 2.11 or above on this platform. Thread support is not currently implemented for this platform, so --enable-threads does not work. See http://gcc.gnu.org/ml/gcc-prs/2002-01/msg00551.html and http://gcc.gnu.org/ml/gcc-bugs/2002-01/msg00663.html. GCC 2.95.x is not supported under HP-UX 11 and cannot be used to ! compile GCC 3.0 and up. Refer to binaries for ! information about obtaining precompiled GCC binaries for HP-UX.


          !

          i370-*-*

          This port is very preliminary and has many known bugs. We hope to have a higher-quality port for this machine soon. *************** have a higher-quality port for this mach *** 530,536 ****


          !

          *-*-linux-gnu

          If you use glibc 2.2 (or 2.1.9x), GCC 2.95.2 won't install out-of-the-box. You'll get compile errors while building libstdc++. --- 606,612 ----


          !

          *-*-linux-gnu

          If you use glibc 2.2 (or 2.1.9x), GCC 2.95.2 won't install out-of-the-box. You'll get compile errors while building libstdc++. *************** glibc 2.2.4 whether patches for GCC 3.0 *** 553,568 ****


          !

          i?86-*-linux*oldld

          Use this configuration to generate a.out binaries on Linux-based GNU systems if you do not have gas/binutils version 2.5.2 or later ! installed. This is an obsolete configuration.


          !

          i?86-*-linux*aout

          Use this configuration to generate a.out binaries on Linux-based GNU systems. This configuration is being superseded. You must use --- 629,646 ----


          !

          i?86-*-linux*oldld

          Use this configuration to generate a.out binaries on Linux-based GNU systems if you do not have gas/binutils version 2.5.2 or later ! installed. ! !

          This configuration is obsoleted in GCC 3.1.


          !

          i?86-*-linux*aout

          Use this configuration to generate a.out binaries on Linux-based GNU systems. This configuration is being superseded. You must use *************** gas/binutils version 2.5.2 or later. *** 571,577 ****


          !

          i?86-*-linux*

          You will need binutils 2.9.1.0.15 or newer for exception handling to work. --- 649,655 ----


          !

          i?86-*-linux*

          You will need binutils 2.9.1.0.15 or newer for exception handling to work. *************** found on i?86-*-sco

          Compilation with RCC is recommended. Also, it may be a good idea to link with GNU malloc instead of the malloc that comes with the system. --- 660,666 ----


          !

          i?86-*-sco

          Compilation with RCC is recommended. Also, it may be a good idea to link with GNU malloc instead of the malloc that comes with the system. *************** link with GNU malloc instead of the mall *** 590,603 ****


          !

          i?86-*-sco3.2v4

          Use this configuration for SCO release 3.2 version 4.


          !

          i?86-*-sco3.2v5*

          Use this for the SCO OpenServer Release 5 family of operating systems. --- 668,681 ----


          !

          i?86-*-sco3.2v4

          Use this configuration for SCO release 3.2 version 4.


          !

          i?86-*-sco3.2v5*

          Use this for the SCO OpenServer Release 5 family of operating systems. *************** unrecognized opcodes when using the nati *** 616,622 **** that version.) While it's rather rare to see these emitted by GCC yet, errors of the basic form: !

            /usr/tmp/ccaNlqBc.s:22:unknown instruction: fcomip
              /usr/tmp/ccaNlqBc.s:50:unknown instruction: fucomip
            
          --- 694,700 ---- that version.) While it's rather rare to see these emitted by GCC yet, errors of the basic form: !
            /usr/tmp/ccaNlqBc.s:22:unknown instruction: fcomip
              /usr/tmp/ccaNlqBc.s:50:unknown instruction: fucomip
            
          *************** engineering and will hopefully be addres *** 671,677 ****


          !

          i?86-*-udk

          This target emulates the SCO Universal Development Kit and requires that package be installed. (If it is installed, you will have a --- 749,755 ----


          !

          i?86-*-udk

          This target emulates the SCO Universal Development Kit and requires that package be installed. (If it is installed, you will have a *************** have installed. *** 704,710 ****


          !

          i?86-*-isc

          It may be a good idea to link with GNU malloc instead of the malloc that comes with the system. --- 782,790 ----


          !

          i?86-*-isc

          ! !

          This configuration is obsoleted in GCC 3.1.

          It may be a good idea to link with GNU malloc instead of the malloc that comes with the system. *************** comes with the system. *** 715,729 ****


          !

          i?86-*-esix

          ! !

          It may be good idea to link with GNU malloc instead of the malloc that ! comes with the system. ! !

          !
          !

          i?86-ibm-aix

          You need to use GAS version 2.1 or later, and LD from GNU binutils version 2.2 or later. --- 795,803 ----


          !

          i?86-ibm-aix

          !

          This configuration is obsoleted in GCC 3.1.

          You need to use GAS version 2.1 or later, and LD from GNU binutils version 2.2 or later. *************** GNU binutils version 2.2 or later. *** 731,751 ****


          !

          i?86-sequent-bsd

          Go to the Berkeley universe before compiling.


          !

          i?86-sequent-ptx1*, i?86-sequent-ptx2*

          ! !

          You must install GNU sed before running configure. !

          !
          !

          i?86-*-sysv3*

          The fixproto shell script may trigger a bug in the system shell. If you encounter this problem, upgrade your operating system or --- 805,824 ----


          !

          i?86-sequent-bsd

          ! !

          This configuration is obsoleted in GCC 3.1.

          Go to the Berkeley universe before compiling.


          !

          i?86-sequent-ptx1*, i?86-sequent-ptx2*, i?86-sequent-sysv3*

          !

          This configuration is obsoleted in GCC 3.1. !

          You must install GNU sed before running configure.

          The fixproto shell script may trigger a bug in the system shell. If you encounter this problem, upgrade your operating system or *************** use bash (the GNU shell) to *** 754,760 ****


          !

          i860-intel-osf*

          On the Intel Paragon (an i860 machine), if you are using operating system version 1.0, you will get warnings or errors about redefinition --- 827,835 ----


          !

          i860-intel-osf*

          ! !

          All support for the i860 processor is obsoleted in GCC 3.1.

          On the Intel Paragon (an i860 machine), if you are using operating system version 1.0, you will get warnings or errors about redefinition *************** of va_arg when you build GC *** 764,788 **** iclib.a. You must also modify stdio.h as follows: before the lines !

          #if     defined(__i860__) && !defined(_VA_LIST)
            #include <va_list.h>
            

          insert the line !

          #if __PGC__
            

          and after the lines !

          extern int  vprintf(const char *, va_list );
            extern int  vsprintf(char *, const char *, va_list );
            #endif
            

          insert the line !

          #endif /* __PGC__ */
            

          These problems don't exist in operating system version 1.1. --- 839,863 ---- iclib.a. You must also modify stdio.h as follows: before the lines !

          #if     defined(__i860__) && !defined(_VA_LIST)
            #include <va_list.h>
            

          insert the line !

          #if __PGC__
            

          and after the lines !

          extern int  vprintf(const char *, va_list );
            extern int  vsprintf(char *, const char *, va_list );
            #endif
            

          insert the line !

          #endif /* __PGC__ */
            

          These problems don't exist in operating system version 1.1. *************** extern int vsprintf(char *, const char *** 790,796 ****


          !

          ia64-*-linux

          IA-64 processor (also known as IPF, or Itanium Processor Family) running GNU/Linux. --- 865,871 ----


          !

          ia64-*-linux

          IA-64 processor (also known as IPF, or Itanium Processor Family) running GNU/Linux. *************** ABI changes are expected. *** 815,821 ****


          !

          *-lynx-lynxos

          LynxOS 2.2 and earlier comes with GCC 1.x already installed as /bin/gcc. You should compile with this instead of /bin/cc. --- 890,896 ----


          !

          *-lynx-lynxos

          LynxOS 2.2 and earlier comes with GCC 1.x already installed as /bin/gcc. You should compile with this instead of /bin/cc. *************** installed tools, which produce a.o *** 828,834 ****


          !

          *-ibm-aix*

          AIX Make frequently has problems with GCC makefiles. GNU Make 3.76 or newer is recommended to build on this platform. --- 903,909 ----


          !

          *-ibm-aix*

          AIX Make frequently has problems with GCC makefiles. GNU Make 3.76 or newer is recommended to build on this platform. *************** and function declarations in the origina *** 860,876 **** not prevent the linker from producing a correct library or runnable executable. -

          GCC's exception handling implementation stores process-specific data in - the shared library which prevents exception handling from working - correctly on AIX in a default installation. To work around this, the - shared objects need to be loaded in the process private segment to - prevent them from being shared and marked read-only. This is - accomplished on AIX by installing the shared libraries - (libgcc_s.a and libstdc++.a) with file permissions - disallowing read-other (chmod a+x,o-r). If the shared libraries - have been used, the shared library segment can be cleaned using the - /usr/sbin/slibclean command. -

          AIX 4.3 utilizes a "large format" archive to support both 32-bit and 64-bit object modules. The routines provided in AIX 4.3.0 and AIX 4.3.1 to parse archive libraries did not handle the new format correctly. --- 935,940 ---- *************** switch and using the configure option


          !

          m32r-*-elf

          Mitsubishi M32R processor. This configuration is intended for embedded systems. --- 982,988 ----


          !

          m32r-*-elf

          Mitsubishi M32R processor. This configuration is intended for embedded systems. *************** This configuration is intended for embed *** 926,932 ****


          !

          m68000-hp-bsd

          HP 9000 series 200 running BSD. Note that the C compiler that comes with this system cannot compile GCC; contact law@cygnus.com --- 990,996 ----


          !

          m68000-hp-bsd

          HP 9000 series 200 running BSD. Note that the C compiler that comes with this system cannot compile GCC; contact law@cygnus.com *************** to get binaries of GCC for bootstrapping *** 935,941 ****


          !

          m6811-elf

          Motorola 68HC11 family micro controllers. These are used in embedded applications. There are no standard Unix configurations. --- 999,1005 ----


          !

          m6811-elf

          Motorola 68HC11 family micro controllers. These are used in embedded applications. There are no standard Unix configurations. *************** applications. There are no standard Uni *** 943,949 ****


          !

          m6812-elf

          Motorola 68HC12 family micro controllers. These are used in embedded applications. There are no standard Unix configurations. --- 1007,1013 ----


          !

          m6812-elf

          Motorola 68HC12 family micro controllers. These are used in embedded applications. There are no standard Unix configurations. *************** applications. There are no standard Uni *** 951,968 ****


          !

          m68k-altos

          !

          Altos 3068. You must use the GNU assembler, linker and debugger. Also, you must fix a kernel bug.


          !

          m68k-apple-aux

          Apple Macintosh running A/UX. ! You may configure GCC to use either the system assembler and linker or the GNU assembler and linker. You should use the GNU configuration if you can, especially if you also want to use G++. You enable that configuration with the --with-gnu-as and --with-gnu-ld --- 1015,1036 ----


          !

          m68k-altos

          !

          Altos 3068. This configuration is obsoleted in GCC 3.1. ! !

          You must use the GNU assembler, linker and debugger. Also, you must fix a kernel bug.


          !

          m68k-apple-aux

          Apple Macintosh running A/UX. ! This configuration is obsoleted in GCC 3.1. ! !

          You may configure GCC to use either the system assembler and linker or the GNU assembler and linker. You should use the GNU configuration if you can, especially if you also want to use G++. You enable that configuration with the --with-gnu-as and --with-gnu-ld *************** raises some of the arbitrary limits foun *** 977,983 ****


          !

          m68k-att-sysv

          AT&T 3b1, a.k.a. 7300 PC. This version of GCC cannot be compiled with the system C compiler, which is too buggy. --- 1045,1051 ----


          !

          m68k-att-sysv

          AT&T 3b1, a.k.a. 7300 PC. This version of GCC cannot be compiled with the system C compiler, which is too buggy. *************** bootstrap. Binaries are available from *** 988,996 ****


          !

          m68k-bull-sysv

          !

          Bull DPX/2 series 200 and 300 with BOS-2.00.45 up to BOS-2.01. GCC works either with native assembler or GNU assembler. You can use GNU assembler with native COFF generation by providing --with-gnu-as to the configure script or use GNU assembler with stabs-in-COFF encapsulation --- 1056,1067 ----


          !

          m68k-bull-sysv

          !

          Bull DPX/2 series 200 and 300 with BOS-2.00.45 up to BOS-2.01. ! This configuration is obsoleted in GCC 3.1. ! !

          GCC works either with native assembler or GNU assembler. You can use GNU assembler with native COFF generation by providing --with-gnu-as to the configure script or use GNU assembler with stabs-in-COFF encapsulation *************** assembler or for availability of the DPX *** 1001,1007 ****


          !

          m68k-crds-unox

          Use configure unos for building on Unos. --- 1072,1078 ----


          !

          m68k-crds-unos

          Use configure unos for building on Unos. *************** behavior, and does not work. So, when i *** 1011,1017 **** install the following script as as in the subdirectory where the passes of GCC are installed: !

          #!/bin/sh
            casm $*
            
          --- 1082,1088 ---- install the following script as as in the subdirectory where the passes of GCC are installed: !
          #!/bin/sh
            casm $*
            
          *************** and linking from that library. *** 1039,1052 ****


          !

          m68k-hp-hpux

          HP 9000 series 300 or 400 running HP-UX. HP-UX version 8.0 has a bug in the assembler that prevents compilation of GCC. This bug manifests itself during the first stage of compilation, while building libgcc2.a: !

          _floatdisf
            cc1: warning: `-g' option not supported on this version of GCC
            cc1: warning: `-g1' option not supported on this version of GCC
            ./xgcc: Internal compiler error: program as got fatal signal 11
          --- 1110,1123 ----
            


          !

          m68k-hp-hpux

          HP 9000 series 300 or 400 running HP-UX. HP-UX version 8.0 has a bug in the assembler that prevents compilation of GCC. This bug manifests itself during the first stage of compilation, while building libgcc2.a: !

          _floatdisf
            cc1: warning: `-g' option not supported on this version of GCC
            cc1: warning: `-g1' option not supported on this version of GCC
            ./xgcc: Internal compiler error: program as got fatal signal 11
          *************** encounter this problem, upgrade your ope
          *** 1082,1100 ****
            GNU shell) to run fixproto.  This bug will cause the fixproto
            program to report an error of the form:
            
          ! 
          ./fixproto: sh internal 1K buffer overflow
            

          To fix this, you can also change the first line of the fixproto script to look like: !

          #!/bin/ksh
            


          !

          m68k-*-nextstep*

          Current GCC versions probably do not work on version 2 of the NeXT operating system. --- 1153,1173 ---- GNU shell) to run fixproto. This bug will cause the fixproto program to report an error of the form: !

          ./fixproto: sh internal 1K buffer overflow
            

          To fix this, you can also change the first line of the fixproto script to look like: !

          #!/bin/ksh
            


          !

          m68k-*-nextstep*

          ! !

          These configurations are obsoleted in GCC 3.1.

          Current GCC versions probably do not work on version 2 of the NeXT operating system. *************** does not happen on 3.1. *** 1108,1114 ****

          On NeXTSTEP 3.x where x < 3 the build of GCC will abort during stage1 with an error message like this: !

            _eh
              /usr/tmp/ccbbsZ0U.s:987:Unknown pseudo-op: .section
              /usr/tmp/ccbbsZ0U.s:987:Rest of line ignored. 1st junk character
              valued 95 (_).
          --- 1181,1187 ----
            

          On NeXTSTEP 3.x where x < 3 the build of GCC will abort during stage1 with an error message like this: !

            _eh
              /usr/tmp/ccbbsZ0U.s:987:Unknown pseudo-op: .section
              /usr/tmp/ccbbsZ0U.s:987:Rest of line ignored. 1st junk character
              valued 95 (_).
          *************** to use the following sequence.  Note you
          *** 1128,1134 ****
            the directory prefix you specified in the configuration process of GCC
            for this sequence to work.
            
          ! 
            cd bld-gcc
              make all-texinfo all-bison all-byacc all-binutils all-gas all-ld
              cd gcc
              make bootstrap
          --- 1201,1207 ----
            the directory prefix you specified in the configuration process of GCC
            for this sequence to work.
            
          ! 
            cd bld-gcc
              make all-texinfo all-bison all-byacc all-binutils all-gas all-ld
              cd gcc
              make bootstrap
          *************** for this sequence to work.
          *** 1140,1146 ****
            


          !

          m68k-ncr-*

          On the Tower models 4n0 and 6n0, by default a process is not allowed to have more than one megabyte of memory. GCC cannot compile --- 1213,1219 ----


          !

          m68k-ncr-*

          On the Tower models 4n0 and 6n0, by default a process is not allowed to have more than one megabyte of memory. GCC cannot compile *************** itself (or many other programs) with To solve this problem, reconfigure the kernel adding the following line to the configuration file: !

          MAXUMEM = 4096
            


          !

          m68k-sun

          Sun 3. We do not provide a configuration file to use the Sun FPA by default, because programs that establish signal handlers for floating --- 1222,1234 ----

          To solve this problem, reconfigure the kernel adding the following line to the configuration file: !

          MAXUMEM = 4096
            


          !

          m68k-sun

          Sun 3. We do not provide a configuration file to use the Sun FPA by default, because programs that establish signal handlers for floating *************** point traps inherently cannot work with *** 1164,1180 ****


          !

          m68k-sun-sunos4.1.1

          It is reported that you may need the GNU assembler on this platform.


          !

          m88k-*-svr3

          Motorola m88k running the AT&T/Unisoft/Motorola V.3 reference port. ! These systems tend to use the Green Hills C, revision 1.8.5, as the standard C compiler. There are apparently bugs in this compiler that result in object files differences between stage 2 and stage 3. If this happens, make the stage 4 compiler and compare it to the stage 3 --- 1237,1255 ----


          !

          m68k-sun-sunos4.1.1

          It is reported that you may need the GNU assembler on this platform.


          !

          m88k-*-svr3

          Motorola m88k running the AT&T/Unisoft/Motorola V.3 reference port. ! These configurations are obsoleted in GCC 3.1. ! !

          These systems tend to use the Green Hills C, revision 1.8.5, as the standard C compiler. There are apparently bugs in this compiler that result in object files differences between stage 2 and stage 3. If this happens, make the stage 4 compiler and compare it to the stage 3 *************** if you have one. *** 1188,1196 ****


          !

          m88k-*-dgux

          !

          Motorola m88k running DG/UX. To build 88open BCS native or cross compilers on DG/UX, specify the configuration name as m88k-*-dguxbcs and build in the 88open BCS software development environment. To build ELF native or cross compilers on DG/UX, specify --- 1263,1274 ----


          !

          m88k-*-dgux

          !

          Motorola m88k running DG/UX. ! These configurations are obsoleted in GCC 3.1. ! !

          To build 88open BCS native or cross compilers on DG/UX, specify the configuration name as m88k-*-dguxbcs and build in the 88open BCS software development environment. To build ELF native or cross compilers on DG/UX, specify *************** configuration based on the current softw *** 1205,1213 ****


          !

          m88k-tektronix-sysv3

          !

          Tektronix XD88 running UTekV 3.2e. Do not turn on optimization while building stage1 if you bootstrap with the buggy Green Hills compiler. Also, the bundled LAI System V NFS is buggy so if you build in an NFS mounted --- 1283,1294 ----


          !

          m88k-tektronix-sysv3

          !

          Tektronix XD88 running UTekV 3.2e. ! These configurations are obsoleted in GCC 3.1. ! !

          Do not turn on optimization while building stage1 if you bootstrap with the buggy Green Hills compiler. Also, the bundled LAI System V NFS is buggy so if you build in an NFS mounted *************** between stages. *** 1218,1224 ****


          !

          mips-*-*

          If you use the 1.31 version of the MIPS assembler (such as was shipped with Ultrix 3.1), you will need to use the -fno-delayed-branch switch --- 1299,1305 ----


          !

          mips-*-*

          If you use the 1.31 version of the MIPS assembler (such as was shipped with Ultrix 3.1), you will need to use the -fno-delayed-branch switch *************** To protect against this, GCC passes -shared or -call_shared switch. !

          mips-mips-bsd

          !

          MIPS machines running the MIPS operating system in BSD mode. It's ! possible that some old versions of the system lack the functions memcpy, memmove, memcmp, and memset. If your system lacks these, you must remove or undo the definition of TARGET_MEM_FUNCTIONS in mips-bsd.h. --- 1332,1343 ---- linker unless you pass an explicit -shared or -call_shared switch. !

          mips-mips-bsd

          !

          MIPS machines running the MIPS operating system in BSD mode. ! These configurations are obsoleted in GCC 3.1. ! !

          It's possible that some old versions of the system lack the functions memcpy, memmove, memcmp, and memset. If your system lacks these, you must remove or undo the definition of TARGET_MEM_FUNCTIONS in mips-bsd.h. *************** compilers, you may need to add -Wf *** 1271,1277 ****


          !

          mips-dec-*

          MIPS-based DECstations can support three different personalities: Ultrix, DEC OSF/1, and OSF/rose. (Alpha-based DECstation products have --- 1354,1362 ----


          !

          mips-dec-*

          ! !

          These configurations are obsoleted in GCC 3.1.

          MIPS-based DECstations can support three different personalities: Ultrix, DEC OSF/1, and OSF/rose. (Alpha-based DECstation products have *************** compilers, you may need to add -Wf *** 1303,1309 ****


          !

          mips-mips-riscos*

          If you use the MIPS C compiler to bootstrap, it may be necessary to increase its table size for switch statements with the --- 1388,1396 ----


          !

          mips-mips-riscos*

          ! !

          These configurations are obsoleted in GCC 3.1.

          If you use the MIPS C compiler to bootstrap, it may be necessary to increase its table size for switch statements with the *************** avoiding a linker bug. *** 1343,1349 ****


          !

          mips-sgi-irix4

          In order to compile GCC on an SGI running IRIX 4, the "c.hdr.lib" option must be installed from the CD-ROM supplied from Silicon Graphics. --- 1430,1438 ----


          !

          mips-sgi-irix4

          ! !

          This configuration is obsoleted in GCC 3.1.

          In order to compile GCC on an SGI running IRIX 4, the "c.hdr.lib" option must be installed from the CD-ROM supplied from Silicon Graphics. *************** reordering--perhaps GCC itself was misco *** 1367,1379 ****

          You may get the following warning on IRIX 4 platforms, it can be safely ignored. !

            warning: foo.o does not have gp tables for all its sections.
            


          !

          mips-sgi-irix5

          This configuration has considerable problems, which will be fixed in a future release. --- 1456,1468 ----

          You may get the following warning on IRIX 4 platforms, it can be safely ignored. !

            warning: foo.o does not have gp tables for all its sections.
            


          !

          mips-sgi-irix5

          This configuration has considerable problems, which will be fixed in a future release. *************** not have GNU make available *** 1418,1441 ****


          !

          mips-sgi-irix6

          If you are using IRIX cc as your bootstrap compiler, you must ensure that the N32 ABI is in use. To test this, compile a simple C file with cc and then run file on the resulting object file. The output should look like: !

          test.o: ELF N32 MSB ...
            

          If you see: !

          test.o: ELF 32-bit MSB ...
            

          or !

          test.o: ELF 64-bit MSB ...
            

          then your version of cc uses the O32 or N64 ABI by default. You --- 1507,1530 ----


          !

          mips-sgi-irix6

          If you are using IRIX cc as your bootstrap compiler, you must ensure that the N32 ABI is in use. To test this, compile a simple C file with cc and then run file on the resulting object file. The output should look like: !

          test.o: ELF N32 MSB ...
            

          If you see: !

          test.o: ELF 32-bit MSB ...
            

          or !

          test.o: ELF 64-bit MSB ...
            

          then your version of cc uses the O32 or N64 ABI by default. You *************** information about using GCC on IRIX plat *** 1493,1541 ****


          !

          mips-sony-sysv

          !

          Sony MIPS NEWS. This works in NEWSOS 5.0.1, but not in 5.0.2 (which ! uses ELF instead of COFF). Support for 5.0.2 will probably be provided ! soon by volunteers. In particular, the linker does not like the ! code generated by GCC when shared libraries are linked in.


          !

          ns32k-encore

          Encore ns32000 system. Encore systems are supported only under BSD.


          !

          ns32k-*-genix

          !

          National Semiconductor ns32000 system. Genix has bugs in alloca ! and malloc; you must get the compiled versions of these from GNU ! Emacs.


          !

          ns32k-sequent

          Go to the Berkeley universe before compiling.


          !

          ns32k-utek

          !

          UTEK ns32000 system ("merlin"). The C compiler that comes with this ! system cannot compile GCC; contact tektronix!reed!mason to get ! binaries of GCC for bootstrapping.


          !

          powerpc-*-*

          You can specify a default version for the -mcpu=cpu_type switch by using the configure option --with-cpu-cpu_type. --- 1582,1639 ----


          !

          mips-sony-sysv

          !

          Sony MIPS NEWS. This configuration is obsoleted in GCC 3.1. ! !

          This works in NEWSOS 5.0.1, but not in 5.0.2 (which uses ELF instead of ! COFF). In particular, the linker does not like the code generated by ! GCC when shared libraries are linked in.


          !

          ns32k-encore

          ! !

          This configuration is obsoleted in GCC 3.1.

          Encore ns32000 system. Encore systems are supported only under BSD.


          !

          ns32k-*-genix

          !

          National Semiconductor ns32000 system. This configuration is obsoleted ! in GCC 3.1. ! !

          Genix has bugs in alloca and malloc; you must get the ! compiled versions of these from GNU Emacs.


          !

          ns32k-sequent

          ! !

          This configuration is obsoleted in GCC 3.1.

          Go to the Berkeley universe before compiling.


          !

          ns32k-utek

          !

          UTEK ns32000 system ("merlin"). This configuration is obsoleted in ! GCC 3.1. ! !

          The C compiler that comes with this system cannot compile GCC; contact ! tektronix!reed!mason to get binaries of GCC for bootstrapping.


          !

          powerpc-*-*

          You can specify a default version for the -mcpu=cpu_type switch by using the configure option --with-cpu-cpu_type. *************** switch by using the configure option


          !

          powerpc-*-elf, powerpc-*-sysv4

          PowerPC system in big endian mode, running System V.4.


          !

          powerpc-*-linux-gnu*

          You will need ! binutils 2.9.4.0.8 ! or newer for a working GCC. It is strongly recommended to recompile binutils ! if you initially built it with gcc-2.7.2.x.


          !

          powerpc-*-netbsd*

          PowerPC system in big endian mode running NetBSD. To build the ! documentation you will need Texinfo version 4.0 (NetBSD 1.5.1 included Texinfo version 3.12).


          !

          powerpc-*-eabiaix

          Embedded PowerPC system in big endian mode with -mcall-aix selected as the default. --- 1641,1706 ----


          !

          powerpc-*-darwin*

          ! !

          PowerPC running Darwin (Mac OS X kernel). ! !

          GCC 3.0 does not support Darwin, but 3.1 and later releases will work. ! !

          Pre-installed versions of Mac OS X may not include any developer tools, ! meaning that you will not be able to build GCC from source. Tool ! binaries are available at ! http://www.opensource.apple.com/projects/darwin (free ! registration required). ! !

          Versions of the assembler prior to "cctools-364" cannot handle the ! 4-argument form of rlwinm and related mask-using instructions. Darwin ! 1.3 (Mac OS X 10.0) uses cctools-353 for instance. To get cctools-364, ! check out cctools with tag Apple-364, build it, and ! install the assembler as usr/bin/as. See ! http://www.opensource.apple.com/tools/cvs/docs.html for details. ! !

          Also, the default stack limit of 512K is too small, and a bootstrap will ! typically fail when self-compiling expr.c. Set the stack to 800K ! or more, for instance by doing limit stack 800. It's also ! convenient to use the GNU preprocessor instead of Apple's during the ! first stage of bootstrapping; this is automatic when doing make ! bootstrap, but to do it from the toplevel objdir you will need to say ! make CC='cc -no-cpp-precomp' bootstrap. ! !

          Note that the version of GCC shipped by Apple typically includes a ! number of extensions not available in a standard GCC release. These ! extensions are generally specific to Mac programming. ! !

          !
          ! !

          powerpc-*-elf, powerpc-*-sysv4

          PowerPC system in big endian mode, running System V.4.


          !

          powerpc-*-linux-gnu*

          You will need ! binutils 2.12.90.0.7 ! or newer for a working GCC.


          !

          powerpc-*-netbsd*

          PowerPC system in big endian mode running NetBSD. To build the ! documentation you will need Texinfo version 4.1 (NetBSD 1.5.1 included Texinfo version 3.12).


          !

          powerpc-*-eabiaix

          Embedded PowerPC system in big endian mode with -mcall-aix selected as the default. *************** the default. *** 1577,1583 ****


          !

          powerpc-*-eabisim

          Embedded PowerPC system in big endian mode for use in running under the PSIM simulator. --- 1708,1714 ----


          !

          powerpc-*-eabisim

          Embedded PowerPC system in big endian mode for use in running under the PSIM simulator. *************** PSIM simulator. *** 1585,1605 ****


          !

          powerpc-*-eabi

          Embedded PowerPC system in big endian mode.


          !

          powerpcle-*-elf, powerpcle-*-sysv4

          PowerPC system in little endian mode, running System V.4.


          !

          powerpcle-*-eabisim

          Embedded PowerPC system in little endian mode for use in running under the PSIM simulator. --- 1716,1736 ----


          !

          powerpc-*-eabi

          Embedded PowerPC system in big endian mode.


          !

          powerpcle-*-elf, powerpcle-*-sysv4

          PowerPC system in little endian mode, running System V.4.


          !

          powerpcle-*-eabisim

          Embedded PowerPC system in little endian mode for use in running under the PSIM simulator. *************** the PSIM simulator. *** 1607,1654 ****


          !

          powerpcle-*-eabi

          Embedded PowerPC system in little endian mode.


          !

          powerpcle-*-winnt, powerpcle-*-pe

          PowerPC system in little endian mode running Windows NT.


          !

          romp-*-aos, romp-*-mach

          !

          The only operating systems supported for the IBM RT PC are AOS and ! MACH. GCC does not support AIX running on the RT. We recommend you ! compile GCC with an earlier version of itself; if you compile GCC ! with hc, the Metaware compiler, it will work, but you will get ! mismatches between the stage 2 and stage 3 compilers in various files. ! These errors are minor differences in some floating-point constants and ! can be safely ignored; the stage 3 compiler is correct.


          !

          s390-*-linux*

          !

          IBM S/390 system running Linux for S/390.


          !

          s390x-*-linux*

          !

          IBM zSeries system (64 bit) running Linux for zSeries.


          !

          *-*-solaris2*

          Sun does not ship a C compiler with Solaris 2. To bootstrap and install GCC you first have to install a pre-built compiler, see our --- 1738,1786 ----


          !

          powerpcle-*-eabi

          Embedded PowerPC system in little endian mode.


          !

          powerpcle-*-winnt, powerpcle-*-pe

          PowerPC system in little endian mode running Windows NT.


          !

          romp-*-aos, romp-*-mach

          !

          These configurations are obsoleted in GCC 3.1. ! !

          We recommend you compile GCC with an earlier version of itself; if you ! compile GCC with hc, the Metaware compiler, it will work, but ! you will get mismatches between the stage 2 and stage 3 compilers in ! various files. These errors are minor differences in some ! floating-point constants and can be safely ignored; the stage 3 compiler ! is correct.


          !

          s390-*-linux*

          !

          S/390 system running Linux for S/390.


          !

          s390x-*-linux*

          !

          zSeries system (64 Bit) running Linux for zSeries.


          !

          *-*-solaris2*

          Sun does not ship a C compiler with Solaris 2. To bootstrap and install GCC you first have to install a pre-built compiler, see our *************** will assume that any missing type is


          !

          sparc-sun-solaris2*

          Sun as 4.x is broken in that it cannot cope with long symbol names. A typical error message might look similar to the following: --- 1831,1842 ----


          !

          sparc-sun-solaris2*

          ! !

          When GCC is configured to use binutils 2.11.2 or later the binaries ! produced are smaller than the ones produced using Sun's native tools; ! this difference is quite significant for binaries containing debugging ! information.

          Sun as 4.x is broken in that it cannot cope with long symbol names. A typical error message might look similar to the following: *************** error: can't compute value of an express *** 1712,1732 **** starting with Solaris 7.

          Starting with Solaris 7, the operating system is capable of executing ! 64-bit SPARC V9 binaries. GCC 3.0 doesn't properly support this yet. ! Although some patches or recipes to enable this support have been posted ! to various newsgroups and mailing lists, we recommend against using ! them, since the compiler may either crash or, worse, silently generate ! bad code. If you really need this capability now, you might try a CVS ! version of GCC 3.1, which will fully support this. If all you want is ! code tuned for the UltraSPARC CPU, you should try the ! -mtune=ultrasparc option instead, which should be safe from ! those bugs and produce code that, unlike full 64-bit code, can still run ! on non-UltraSPARC machines.


          !

          sparc-sun-solaris2.7

          Sun patch 107058-01 (1999-01-13) for Solaris 7/SPARC triggers a bug in the dynamic linker. This problem (Sun bug 4210064) affects GCC 2.8 --- 1849,1870 ---- starting with Solaris 7.

          Starting with Solaris 7, the operating system is capable of executing ! 64-bit SPARC V9 binaries. GCC 3.1 and later properly supports ! this; the -m64 option enables 64-bit code generation. ! However, if all you want is code tuned for the UltraSPARC CPU, you ! should try the -mtune=ultrasparc option instead, which produces ! code that, unlike full 64-bit code, can still run on non-UltraSPARC ! machines. ! !

          When configuring on a Solaris 7 or later system that is running a kernel ! that supports only 32-bit binaries, one must configure with ! --disable-multilib, since we will not be able to build the ! 64-bit target libraries.


          !

          sparc-sun-solaris2.7

          Sun patch 107058-01 (1999-01-13) for Solaris 7/SPARC triggers a bug in the dynamic linker. This problem (Sun bug 4210064) affects GCC 2.8 *************** back it out. *** 1744,1750 ****

        • Copy the original, unpatched Solaris 7 /usr/ccs/bin/as into ! /usr/local/lib/gcc-lib/sparc-sun-solaris2.7/3.0/as, adjusting the latter name to fit your local conventions and software version numbers. --- 1882,1888 ----
        • Copy the original, unpatched Solaris 7 /usr/ccs/bin/as into ! /usr/local/lib/gcc-lib/sparc-sun-solaris2.7/3.1/as, adjusting the latter name to fit your local conventions and software version numbers. *************** the Solaris 7 Recommended Patch Cluster. *** 1763,1781 ****


          !

          *-*-solaris2.8

          ! !

          The Solaris 8 linker fails to link some libjava programs if ! previously-installed GCC java libraries already exist in the configured ! prefix. For this reason, libgcj is disabled by default on Solaris 8. ! If you use GNU ld, or if you don't have a previously-installed libgcj in ! the same prefix, use --enable-libgcj to build and install the ! Java libraries. ! !

          !


          ! !

          sparc-sun-sunos4*

          A bug in the SunOS 4 linker will cause it to crash when linking -fPIC compiled objects (and will therefore not allow you to build --- 1901,1907 ----


          !

          sparc-sun-sunos4*

          A bug in the SunOS 4 linker will cause it to crash when linking -fPIC compiled objects (and will therefore not allow you to build *************** be due to a bug in sh. You *** 1794,1800 ****


          !

          sparc-unknown-linux-gnulibc1

          It has been reported that you might need binutils 2.8.1.0.23 --- 1920,1926 ----


          !

          sparc-unknown-linux-gnulibc1

          It has been reported that you might need binutils 2.8.1.0.23 *************** for this platform, too. *** 1803,1809 ****


          !

          sparc-*-linux*

          GCC versions 3.0 and higher require binutils 2.11.2 and glibc 2.2.4 or newer on this platform. All earlier binutils and glibc --- 1929,1935 ----


          !

          sparc-*-linux*

          GCC versions 3.0 and higher require binutils 2.11.2 and glibc 2.2.4 or newer on this platform. All earlier binutils and glibc *************** releases mishandled unaligned relocation *** 1812,1818 ****


          !

          sparc64-*-*

          GCC version 2.95 is not able to compile code correctly for sparc64 targets. Users of the Linux kernel, at least, --- 1938,1944 ----


          !

          sparc64-*-*

          GCC version 2.95 is not able to compile code correctly for sparc64 targets. Users of the Linux kernel, at least, *************** recognize (via uname -a) th *** 1823,1834 ****


          !

          *-*-sysv*

          On System V release 3, you may get this error message while linking: !

          ld fatal: failed to write symbol name something
             in strings table for file whatever
            
          --- 1949,1974 ----


          !

          sparcv9-*-solaris2*

          ! !

          The following compiler flags must be specified in the configure ! step in order to bootstrap this target with the Sun compiler: ! !

             % CC="cc -xildoff -xarch=v9" srcdir/configure [options] [target]
          ! 
          ! !

          -xildoff turns off the incremental linker, and -xarch=v9 ! specifies the v9 architecture to the Sun linker and assembler. ! !

          !
          ! !

          *-*-sysv*

          On System V release 3, you may get this error message while linking: !

          ld fatal: failed to write symbol name something
             in strings table for file whatever
            
          *************** is said to work. Smaller values may als *** 1842,1848 ****

          On System V, if you get an error like this, !

          /usr/local/lib/bison.simple: In function `yyparse':
            /usr/local/lib/bison.simple:625: virtual memory exhausted
            
          --- 1982,1988 ----

          On System V, if you get an error like this, !

          /usr/local/lib/bison.simple: In function `yyparse':
            /usr/local/lib/bison.simple:625: virtual memory exhausted
            
          *************** is said to work. Smaller values may als *** 1855,1861 ****


          !

          vax-dec-ultrix

          Don't try compiling with VAX C (vcc). It produces incorrect code in some cases (for example, when alloca is used). --- 1995,2001 ----


          !

          vax-dec-ultrix

          Don't try compiling with VAX C (vcc). It produces incorrect code in some cases (for example, when alloca is used). *************** in some cases (for example, when a *** 1863,1872 ****


          !

          we32k-*-*

          These computers are also known as the 3b2, 3b5, 3b20 and other similar ! names. (However, the 3b1 is actually a 68000.)

          Don't use -g when compiling with the system's compiler. The system's linker seems to be unable to handle such a large program with --- 2003,2013 ----


          !

          we32k-*-*

          These computers are also known as the 3b2, 3b5, 3b20 and other similar ! names. (However, the 3b1 is actually a 68000.) ! These configurations are obsoleted in GCC 3.1.

          Don't use -g when compiling with the system's compiler. The system's linker seems to be unable to handle such a large program with *************** in GCC. You can work around this by bui *** 1877,1883 **** first, then use that instead of the system's preprocessor with the system's C compiler to compile stmt.c. Here is how: !

          mv /lib/cpp /lib/cpp.att
            cp cpp /lib/cpp.gnu
            echo '/lib/cpp.gnu -traditional ${1+"$@"}' > /lib/cpp
            chmod +x /lib/cpp
          --- 2018,2024 ----
            first, then use that instead of the system's preprocessor with the
            system's C compiler to compile stmt.c.  Here is how:
            
          ! 
          mv /lib/cpp /lib/cpp.att
            cp cpp /lib/cpp.gnu
            echo '/lib/cpp.gnu -traditional ${1+"$@"}' > /lib/cpp
            chmod +x /lib/cpp
          *************** optimization files.  So you must build t
          *** 1888,1894 ****
            optimization.  Then build a stage 3 compiler with optimization. 
            That executable should work.  Here are the necessary commands:
            
          ! 
          make LANGUAGES=c CC=stage1/xgcc CFLAGS="-Bstage1/ -g"
            make stage2
            make CC=stage2/xgcc CFLAGS="-Bstage2/ -g -O"
            
          --- 2029,2035 ---- optimization. Then build a stage 3 compiler with optimization. That executable should work. Here are the necessary commands: !
          make LANGUAGES=c CC=stage1/xgcc CFLAGS="-Bstage1/ -g"
            make stage2
            make CC=stage2/xgcc CFLAGS="-Bstage2/ -g -O"
            
          *************** as the file cc1plus is larg *** 1899,1905 ****


          !

          xtensa-*-elf

          This target is intended for embedded Xtensa systems using the newlib C library. It uses ELF but does not support shared --- 2040,2046 ----


          !

          xtensa-*-elf

          This target is intended for embedded Xtensa systems using the newlib C library. It uses ELF but does not support shared *************** which you can use to replace the default *** 1917,1923 ****


          !

          xtensa-*-linux*

          This target is for Xtensa systems running GNU/Linux. It supports ELF shared objects and the GNU C library (glibc). It also generates --- 2058,2064 ----


          !

          xtensa-*-linux*

          This target is for Xtensa systems running GNU/Linux. It supports ELF shared objects and the GNU C library (glibc). It also generates *************** respects, this target is the same as the *** 1929,1935 ****


          !

          Microsoft Windows (32 bit)

          A port of GCC 2.95.x is included with the Cygwin environment. --- 2070,2076 ----


          !

          Microsoft Windows (32 bit)

          A port of GCC 2.95.x is included with the Cygwin environment. *************** without modification. *** 1940,1946 ****


          !

          OS/2

          GCC does not currently support OS/2. However, Andrew Zabolotny has been working on a generic OS/2 port with pgcc. The current code can be found --- 2081,2087 ----


          !

          OS/2

          GCC does not currently support OS/2. However, Andrew Zabolotny has been working on a generic OS/2 port with pgcc. The current code can be found *************** at Older systems

          GCC contains support files for many older (1980s and early 1990s) Unix variants. For the most part, support for these systems --- 2093,2099 ----


          !

          Older systems

          GCC contains support files for many older (1980s and early 1990s) Unix variants. For the most part, support for these systems *************** has been removed from GCC 3: fx80, ns32- *** 1962,1967 **** --- 2103,2115 ---- gmicro, spur; most of these targets had not been updated since GCC version 1. +

          We are planning to remove support for more older systems, starting in + GCC 3.1. Each release will have a list of "obsoleted" systems. + Support for these systems is still present in that release, but + configure will fail unless the --enable-obsolete + option is given. Unless a maintainer steps forward, support for + these systems will be removed from the next release of GCC. +

          Support for older systems as targets for cross-compilation is less problematic than support for them as hosts for GCC; if an enthusiast wishes to make such a target work again (including resurrecting any *************** current GCC) is to be found in the GCC t *** 1995,2001 ****


          !

          all ELF targets (SVR4, Solaris 2, etc.)

          C++ support is significantly better on ELF targets if you use the GNU linker; duplicate copies of --- 2143,2149 ----


          !

          all ELF targets (SVR4, Solaris 2, etc.)

          C++ support is significantly better on ELF targets if you use the GNU linker; duplicate copies of diff -Nrc3pad gcc-3.0.4/INSTALL/test.html gcc-3.1/INSTALL/test.html *** gcc-3.0.4/INSTALL/test.html Wed Feb 20 19:41:09 2002 --- gcc-3.1/INSTALL/test.html Wed May 15 02:40:24 2002 *************** *** 3,24 **** Installing GCC: Testing ! ! -

          Installing GCC: Testing

          !

          Before you install GCC, you might wish to run the testsuite. This ! step is optional and may require you to download additional software.

          First, you must have downloaded the testsuites. ! The full distribution contains testsuites; only if you downloaded the ! "core" compiler plus any front ends, you do not have the testsuites. !

          Second, you must have a current version of DejaGnu installed; ! dejagnu 1.3 is not sufficient.

          Now you may need specific preparations: --- 3,32 ---- Installing GCC: Testing ! ! +

          Installing GCC: Testing

          Installing GCC: Testing

          !

          Before you install GCC, we encourage you to run the testsuites and to ! compare your results with results from a similar configuration that have ! been submitted to the ! gcc-testresults mailing list. ! This step is optional and may require you to download additional software, ! but it can give you confidence in your new GCC installation or point out ! problems before you install and start using your new GCC.

          First, you must have downloaded the testsuites. ! These are part of the full distribution, but if you downloaded the ! "core" compiler plus any front ends, you must download the testsuites ! separately. !

          Second, you must have the testing tools installed. This includes ! a current version of DejaGnu; ! dejagnu 1.3 is not sufficient. ! It also includes Tcl and Expect; the DejaGnu site has links to these.

          Now you may need specific preparations: *************** dejagnu 1.3 is not sufficient. *** 28,34 **** the following example (which assumes that DejaGnu has been installed under /usr/local): !

               TCL_LIBRARY = /usr/local/share/tcl8.0
                 DEJAGNULIBS = /usr/local/share/dejagnu
            
          --- 36,42 ---- the following example (which assumes that DejaGnu has been installed under /usr/local): !
               TCL_LIBRARY = /usr/local/share/tcl8.0
                 DEJAGNULIBS = /usr/local/share/dejagnu
            
          *************** environment variables. *** 43,68 ****

        Finally, you can run the testsuite (which may take a long time): !

             cd objdir; make -k check
          

        The testing process will try to test as many components in the GCC distribution as possible, including the C, C++, Objective-C and Fortran compilers as well as the C++ and Java runtime libraries. !

        How can I run the test suite on selected tests?

        As a first possibility to cut down the number of tests that are run it is possible to use make check-gcc or make check-g++ in the gcc subdirectory of the object directory. To further cut down the tests the following is possible: !

            make check-gcc RUNTESTFLAGS="execute.exp other-options"
          

        This will run all gcc execute tests in the testsuite. !

            make check-g++ RUNTESTFLAGS="old-deja.exp=9805* other-options"
          

        This will run the g++ "old-deja" tests in the testsuite where the filename --- 51,76 ----

      Finally, you can run the testsuite (which may take a long time): !

           cd objdir; make -k check
        

      The testing process will try to test as many components in the GCC distribution as possible, including the C, C++, Objective-C and Fortran compilers as well as the C++ and Java runtime libraries. !

      How can I run the test suite on selected tests?

      As a first possibility to cut down the number of tests that are run it is possible to use make check-gcc or make check-g++ in the gcc subdirectory of the object directory. To further cut down the tests the following is possible: !

          make check-gcc RUNTESTFLAGS="execute.exp other-options"
        

      This will run all gcc execute tests in the testsuite. !

          make check-g++ RUNTESTFLAGS="old-deja.exp=9805* other-options"
        

      This will run the g++ "old-deja" tests in the testsuite where the filename *************** To get a list of the possible *.ex *** 75,81 **** output of make check into a file and look at the Running ... .exp lines. !

      How to interpret test results

      After the testsuite has run you'll find various *.sum and *.log files in the testsuite subdirectories. The *.log files contain a --- 83,89 ---- output of make check into a file and look at the Running ... .exp lines. !

      How to interpret test results

      After the testsuite has run you'll find various *.sum and *.log files in the testsuite subdirectories. The *.log files contain a *************** current time our testing harness does no *** 98,109 **** over whether or not a test is expected to fail. We expect to fix this problem in future releases. !

      Submitting test results

      If you want to report the results to the GCC project, use the contrib/test_summary shell script. Start it in the objdir with !

          srcdir/contrib/test_summary -p your_commentary.txt \
                -m gcc-testresults@gcc.gnu.org |sh
        
      --- 106,117 ---- over whether or not a test is expected to fail. We expect to fix this problem in future releases. !

      Submitting test results

      If you want to report the results to the GCC project, use the contrib/test_summary shell script. Start it in the objdir with !

          srcdir/contrib/test_summary -p your_commentary.txt \
                -m gcc-testresults@gcc.gnu.org |sh
        
      diff -Nrc3pad gcc-3.0.4/MAINTAINERS gcc-3.1/MAINTAINERS *** gcc-3.0.4/MAINTAINERS Thu Oct 4 00:46:36 2001 --- gcc-3.1/MAINTAINERS Mon Apr 29 20:44:37 2002 *************** *** 1,6 **** Blanket Write Privs. - Craig Burley craig@jcb-sc.com John Carr jfc@mit.edu Richard Earnshaw rearnsha@arm.com Richard Henderson rth@redhat.com --- 1,25 ---- + Note + ==== + + This file contains information about people who are permitted to make + changes to various parts of the compiler and associated libraries. + + Please do not contact the people in this file directly to report + problems in GCC. + + For general information about GCC, please visit: + + http://gcc.gnu.org + + To report problems in GCC, please visit: + + http://gcc.gnu.org/bugs.html + + Maintainers + =========== + Blanket Write Privs. John Carr jfc@mit.edu Richard Earnshaw rearnsha@arm.com Richard Henderson rth@redhat.com *************** Bernd Schmidt bernds@redhat.com *** 15,73 **** Jim Wilson wilson@redhat.com ! Various Maintainers ! sh port Joern Rennecke amylaar@redhat.com ! Alexandre Oliva aoliva@redhat.com ! v850 port Nick Clifton nickc@redhat.com ! v850 port Michael Meissner meissner@redhat.com arm port Nick Clifton nickc@redhat.com arm port Richard Earnshaw rearnsha@arm.com ! m32r port Nick Clifton nickc@redhat.com ! Michael Meissner meissner@redhat.com h8 port Jeff Law law@redhat.com ! mcore Nick Clifton nickc@redhat.com ! Jim Dein jdein@windriver.com ! mn10200 port Jeff Law law@redhat.com ! mn10300 port Jeff Law law@redhat.com ! Alexandre Oliva aoliva@redhat.com hppa port Jeff Law law@redhat.com m68hc11 port Stephane Carrez Stephane.Carrez@worldnet.fr m68k port (?) Jeff Law law@redhat.com m68k-motorola-sysv port Philippe De Muyter phdm@macqel.be rs6000 port Geoff Keating geoffk@redhat.com rs6000 port David Edelsohn dje@watson.ibm.com ! mips port Eric Christopher echristo@redhat.com ! ia64 port Jim Wilson wilson@redhat.com ! i860 port Jason Eckhardt jle@redhat.com ! i960 port Jim Wilson wilson@redhat.com ! a29k port Jim Wilson wilson@redhat.com ! alpha port Richard Henderson rth@redhat.com sparc port Richard Henderson rth@redhat.com sparc port David S. Miller davem@redhat.com sparc port Jakub Jelinek jakub@redhat.com ! x86 ports Stan Cox scox@redhat.com ! c4x port Michael Hayes m.hayes@elec.canterbury.ac.nz ! arc port Richard Kenner kenner@nyu.edu ! fr30 port Nick Clifton niclc@redhat.com vax port Dave Anglin dave.anglin@nrc.ca ! s390 port Hartmut Penner hpenner@de.ibm.com ! s390 port Ulrich Weigand uweigand@de.ibm.com fortran Richard Henderson rth@redhat.com fortran Toon Moene toon@moene.indiv.nluug.nl c++ Jason Merrill jason@redhat.com c++ Mark Mitchell mark@codesourcery.com ! chill Dave Brolley brolley@redhat.com ! chill Per Bothner per@bothner.com java Per Bothner per@bothner.com java Alexandre Petit-Bianco apbianco@redhat.com mercury Fergus Henderson fjh@cs.mu.oz.au objective-c Stan Shebs shebs@apple.com objective-c Ovidiu Predescu ovidiu@cup.hp.com - cpplib Dave Brolley brolley@redhat.com - cpplib Per Bothner per@bothner.com - cpplib Zack Weinberg zackw@stanford.edu - cpplib Neil Booth neil@daikokuya.demon.co.uk alias analysis John Carr jfc@mit.edu loop unrolling Jim Wilson wilson@redhat.com loop discovery Michael Hayes m.hayes@elec.canterbury.ac.nz --- 34,110 ---- Jim Wilson wilson@redhat.com ! CPU Port Maintainers (CPU alphabetical order) ! alpha port Richard Henderson rth@redhat.com ! arc port Richard Kenner kenner@nyu.edu arm port Nick Clifton nickc@redhat.com arm port Richard Earnshaw rearnsha@arm.com ! avr port Denis Chertykov denisc@overta.ru ! avr port Marek Michalkiewicz marekm@linux.org.pl ! c4x port Michael Hayes m.hayes@elec.canterbury.ac.nz ! cris port Hans-Peter Nilsson hp@axis.com ! fr30 port Nick Clifton niclc@redhat.com h8 port Jeff Law law@redhat.com ! h8 port Kazu Hirata kazu@hxi.com hppa port Jeff Law law@redhat.com + hppa port Dave Anglin dave.anglin@nrc.ca + i386 port Richard Henderson rth@redhat.com + i860 port Jason Eckhardt jle@redhat.com + i960 port Jim Wilson wilson@redhat.com + ia64 port Jim Wilson wilson@redhat.com + m32r port Nick Clifton nickc@redhat.com + m32r port Michael Meissner meissner@redhat.com m68hc11 port Stephane Carrez Stephane.Carrez@worldnet.fr m68k port (?) Jeff Law law@redhat.com m68k-motorola-sysv port Philippe De Muyter phdm@macqel.be + mcore port Nick Clifton nickc@redhat.com + mips port Eric Christopher echristo@redhat.com + mmix port Hans-Peter Nilsson hp@bitrange.com + mn10200 port Jeff Law law@redhat.com + mn10300 port Jeff Law law@redhat.com + mn10300 port Alexandre Oliva aoliva@redhat.com rs6000 port Geoff Keating geoffk@redhat.com rs6000 port David Edelsohn dje@watson.ibm.com ! s390 port Hartmut Penner hpenner@de.ibm.com ! s390 port Ulrich Weigand uweigand@de.ibm.com ! sh port Joern Rennecke joern.rennecke@superh.com ! sh port Alexandre Oliva aoliva@redhat.com sparc port Richard Henderson rth@redhat.com sparc port David S. Miller davem@redhat.com sparc port Jakub Jelinek jakub@redhat.com ! v850 port Nick Clifton nickc@redhat.com ! v850 port Michael Meissner meissner@redhat.com vax port Dave Anglin dave.anglin@nrc.ca ! x86-64 port Jan Hubicka jh@suse.cz ! xstormy16 port Geoffrey Keating geoffk@redhat.com ! xtensa port Bob Wilson bob.wilson@acm.org ! ! OS Port Maintainers (OS alphabetical order) ! ! darwin port Stan Shebs shebs@apple.com ! netbsd Jason Thorpe thorpej@wasabisystems.com ! sco5, unixware, sco udk Robert Lipe robertlipe@usa.net ! ! Various Maintainers ! ! C front end/ISO C99 Joseph Myers jsm28@cam.ac.uk ! C front end/ISO C99 Richard Henderson rth@redhat.com ! Ada front end Geert Bosch bosch@gnat.com ! Ada front end Robert Dewar dewar@gnat.com fortran Richard Henderson rth@redhat.com fortran Toon Moene toon@moene.indiv.nluug.nl c++ Jason Merrill jason@redhat.com c++ Mark Mitchell mark@codesourcery.com ! cpplib Dave Brolley brolley@redhat.com ! cpplib Per Bothner per@bothner.com ! cpplib Zack Weinberg zack@codesourcery.com ! cpplib Neil Booth neil@daikokuya.demon.co.uk java Per Bothner per@bothner.com java Alexandre Petit-Bianco apbianco@redhat.com mercury Fergus Henderson fjh@cs.mu.oz.au objective-c Stan Shebs shebs@apple.com objective-c Ovidiu Predescu ovidiu@cup.hp.com alias analysis John Carr jfc@mit.edu loop unrolling Jim Wilson wilson@redhat.com loop discovery Michael Hayes m.hayes@elec.canterbury.ac.nz *************** reorg Jeff Law law@redhat.com *** 78,100 **** caller-save.c Jeff Law law@redhat.com debugging code Jim Wilson wilson@redhat.com dwarf debugging code Jason Merrill jason@redhat.com - c++ runtime libs Ulrich Drepper drepper@redhat.com c++ runtime libs Gabriel Dos Reis dosreis@cmla.ens-cachan.fr *synthetic multiply Torbjorn Granlund tege@swox.com *c-torture Torbjorn Granlund tege@swox.com - *f-torture Kate Hedstrom kate@ahab.rutgers.edu - sco5, unixware, sco udk Robert Lipe robertlipe@usa.net fixincludes Bruce Korb bkorb@gnu.org gcse.c Jeff Law law@redhat.com global opt framework Jeff Law law@redhat.com jump.c David S. Miller davem@redhat.com web pages Gerald Pfeifer pfeifer@dbai.tuwien.ac.at ! C front end/ISO C99 Gavin Romig-Koch gavin@redhat.com ! C front end/ISO C99 Joseph Myers jsm28@cam.ac.uk ! C front end/ISO C99 Richard Henderson rth@redhat.com ! config.sub/config.guess Ben Elliston bje@redhat.com ! avr port Denis Chertykov denisc@overta.ru ! Marek Michalkiewicz marekm@linux.org.pl basic block reordering Jason Eckhardt jle@redhat.com i18n Philipp Thomas pthomas@suse.de diagnostic messages Gabriel Dos Reis gdr@codesourcery.com --- 115,132 ---- caller-save.c Jeff Law law@redhat.com debugging code Jim Wilson wilson@redhat.com dwarf debugging code Jason Merrill jason@redhat.com c++ runtime libs Gabriel Dos Reis dosreis@cmla.ens-cachan.fr + c++ runtime libs Ulrich Drepper drepper@redhat.com + c++ runtime libs Phil Edwards pme@gcc.gnu.org + c++ runtime libs Benjamin Kosnik bkoz@redhat.com *synthetic multiply Torbjorn Granlund tege@swox.com *c-torture Torbjorn Granlund tege@swox.com fixincludes Bruce Korb bkorb@gnu.org gcse.c Jeff Law law@redhat.com global opt framework Jeff Law law@redhat.com jump.c David S. Miller davem@redhat.com web pages Gerald Pfeifer pfeifer@dbai.tuwien.ac.at ! config.sub/config.guess Ben Elliston config-patches@gnu.org basic block reordering Jason Eckhardt jle@redhat.com i18n Philipp Thomas pthomas@suse.de diagnostic messages Gabriel Dos Reis gdr@codesourcery.com *************** libiberty DJ Delorie dj@redhat.com *** 105,141 **** build machinery (*.in) DJ Delorie dj@redhat.com build machinery (*.in) Alexandre Oliva aoliva@redhat.com docs co-maintainer Gerald Pfeifer pfeifer@dbai.tuwien.ac.at Note individuals who maintain parts of the compiler need approval to check in changes outside of the parts of the compiler they maintain. ! Write After Approval Scott Bambrough scottb@netwinder.org Laurynas Biveinis lauras@softhome.net Phil Blundell pb@futuretv.com Hans Boehm hboehm@gcc.gnu.org ! Andrew cagney cagney@redhat.com ! Eric Christopher echristo@redhat.com William Cohen wcohen@redhat.com ! Phil Edwards pedwards@jaj.com *Paul Eggert eggert@twinsun.com Ben Elliston bje@redhat.com Marc Espie espie@cvs.openbsd.org Kaveh Ghazi ghazi@caip.rutgers.edu Anthony Green green@redhat.com Stu Grossman grossman@redhat.com Andrew Haley aph@redhat.com Aldy Hernandez aldyh@redhat.com ! Kazu Hirata kazu@hxi.com Manfred Hollstein mhollstein@redhat.com - Jan Hubicka hubicka@freesoft.cz Andreas Jaeger aj@suse.de Jakub Jelinek jakub@redhat.com Klaus Kaempf kkaempf@progis.de ! Brendan Kehoe brendan@redhat.com Mumit Khan khan@xraylith.wisc.edu ! Benjamin Kosnik bkoz@redhat.com Marc Lehmann pcg@goof.com Alan Lehotsky apl@alum.mit.edu Warren Levy warrenl@redhat.com --- 137,189 ---- build machinery (*.in) DJ Delorie dj@redhat.com build machinery (*.in) Alexandre Oliva aoliva@redhat.com docs co-maintainer Gerald Pfeifer pfeifer@dbai.tuwien.ac.at + docs co-maintainer Joseph Myers jsm28@cam.ac.uk + Pico-Java port Steve Chamberlain sac@transmeta.com + RTEMS Ports Joel Sherrill + predict.def Jan Hubicka jh@suse.cz + contrib/regression Geoff Keating geoffk@redhat.com Note individuals who maintain parts of the compiler need approval to check in changes outside of the parts of the compiler they maintain. ! Write After Approval (last name alphabetical order) Scott Bambrough scottb@netwinder.org + Daniel Berlin dan@dberlin.org + David Billinghurst David.Billinghurst@riotinto.com Laurynas Biveinis lauras@softhome.net + Jim Blandy jimb@redhat.com Phil Blundell pb@futuretv.com Hans Boehm hboehm@gcc.gnu.org ! Andrew Cagney cagney@redhat.com ! Paolo Carlini pcarlini@unitus.it ! Chandra Chavva cchavva@redhat.com William Cohen wcohen@redhat.com ! Chris Demetriou cgd@broadcom.com *Paul Eggert eggert@twinsun.com Ben Elliston bje@redhat.com Marc Espie espie@cvs.openbsd.org + Doug Evans devans@transmeta.com Kaveh Ghazi ghazi@caip.rutgers.edu + Matthew Gingell gingell@gnat.com Anthony Green green@redhat.com Stu Grossman grossman@redhat.com + Laurent Guerby guerby@acm.org Andrew Haley aph@redhat.com Aldy Hernandez aldyh@redhat.com ! Matthew Hiller hiller@redhat.com Manfred Hollstein mhollstein@redhat.com Andreas Jaeger aj@suse.de Jakub Jelinek jakub@redhat.com + Dale Johannesen dalej@apple.com + Janis Johnson janis187@us.ibm.com Klaus Kaempf kkaempf@progis.de ! Brendan Kehoe brendan@zen.org Mumit Khan khan@xraylith.wisc.edu ! Matthias Klose doko@debian.org ! Jeff Knaggs jknaggs@redhat.com ! Matt Kraai kraai@alumni.carnegiemellon.edu ! Ziemowit Laski zlaski@apple.com Marc Lehmann pcg@goof.com Alan Lehotsky apl@alum.mit.edu Warren Levy warrenl@redhat.com *************** Martin v. Löwis loewis@informatik.hu *** 146,179 **** *HJ Lu hjl@lucon.org Andrew Macleod amacleod@redhat.com Vladimir Makarov vmakarov@redhat.com Greg McGary gkm@gnu.org Bryce McKinlay bryce@gcc.gnu.org Toon Moene toon@moene.indiv.nluug.nl Catherine Moore clm@redhat.com - Hans-Peter Nilsson hp@bitrange.com Diego Novillo dnovillo@redhat.com David O'Brien obrien@FreeBSD.org Jeffrey D. Oldham oldham@codesourcery.com Rainer Orth ro@TechFak.Uni-Bielefeld.DE Alexandre Petit-Bianco apbianco@redhat.com Clinton Popetz cpopetz@cpopetz.com Ken Raeburn raeburn@redhat.com Rolf Rasmussen rolfwr@gcc.gnu.org Gabriel Dos Reis dosreis@cmla.ens-cachan.fr Loren J. Rittle ljrittle@acm.org Alex Samuel samuel@codesourcery.com Bernd Schmidt bernds@redhat.com Andreas Schwab schwab@suse.de Stan Shebs shebs@apple.com Nathan Sidwell nathan@acm.org Franz Sirl franz.sirl-kernel@lauterbach.com Michael Sokolov msokolov@ivan.Harhan.ORG Mike Stump mrs@windriver.com Ian Taylor ian@zembu.com Philipp Thomas pthomas@suse.de Kresten Krab Thorup krab@gcc.gnu.org Tom Tromey tromey@redhat.com John Wehle john@feith.com Mark Wielaard mark@gcc.gnu.org ! * Indicates folks we need to get Kerberos/ssh accounts ready so they ! can write in the source tree --- 194,247 ---- *HJ Lu hjl@lucon.org Andrew Macleod amacleod@redhat.com Vladimir Makarov vmakarov@redhat.com + Michael Matz matz@suse.de Greg McGary gkm@gnu.org Bryce McKinlay bryce@gcc.gnu.org + Adam Megacz adam@xwt.org + Alan Modra amodra@bigpond.net.au Toon Moene toon@moene.indiv.nluug.nl Catherine Moore clm@redhat.com Diego Novillo dnovillo@redhat.com David O'Brien obrien@FreeBSD.org + Turly O'Connor turly@apple.com Jeffrey D. Oldham oldham@codesourcery.com Rainer Orth ro@TechFak.Uni-Bielefeld.DE + Nicola Pero n.pero@mi.flashnet.it Alexandre Petit-Bianco apbianco@redhat.com Clinton Popetz cpopetz@cpopetz.com Ken Raeburn raeburn@redhat.com Rolf Rasmussen rolfwr@gcc.gnu.org Gabriel Dos Reis dosreis@cmla.ens-cachan.fr Loren J. Rittle ljrittle@acm.org + Tom Rix trix@redhat.com + Craig Rodrigues rodrigc@gcc.gnu.org + Gavin Romig-Koch gavin@redhat.com + Ira Ruben ira@apple.com Alex Samuel samuel@codesourcery.com + Richard Sandiford rsandifo@redhat.com + Roger Sayle roger@eyesopen.com Bernd Schmidt bernds@redhat.com Andreas Schwab schwab@suse.de Stan Shebs shebs@apple.com Nathan Sidwell nathan@acm.org Franz Sirl franz.sirl-kernel@lauterbach.com + Danny Smith dannysmith@users.sourceforge.net Michael Sokolov msokolov@ivan.Harhan.ORG + Richard Stallman rms@gnu.org + Graham Stott grahams@redhat.com Mike Stump mrs@windriver.com Ian Taylor ian@zembu.com + Michael Tiemann tiemann@redhat.com Philipp Thomas pthomas@suse.de Kresten Krab Thorup krab@gcc.gnu.org Tom Tromey tromey@redhat.com John Wehle john@feith.com + Florian Weimer fw@deneb.enyo.de Mark Wielaard mark@gcc.gnu.org ! ! GNATS only accounts ! Peter Bienstman(?) ! Benjamin Chelf(?) ! James Dennett(?) ! Mark Galassi(?) ! Jeff Strum(?) diff -Nrc3pad gcc-3.0.4/Makefile.in gcc-3.1/Makefile.in *** gcc-3.0.4/Makefile.in Fri Jun 8 03:23:56 2001 --- gcc-3.1/Makefile.in Mon Apr 15 18:59:13 2002 *************** *** 1,7 **** # # Makefile for directory with subdirs to build. # Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! # 1999, 2000 Free Software Foundation # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by --- 1,7 ---- # # Makefile for directory with subdirs to build. # Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! # 1999, 2000, 2001 Free Software Foundation # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by *************** *** 18,23 **** --- 18,29 ---- # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # + # Tell GNU make 3.79 not to run the top level in parallel. This + # prevents contention for $builddir/$target/config.cache, as well + # as minimizing scatter in file system caches. + NOTPARALLEL = .NOTPARALLEL + $(NOTPARALLEL): + srcdir = . prefix = /usr/local *************** CXXFLAGS = -g -O2 *** 87,100 **** LDFLAGS = LIBCFLAGS = $(CFLAGS) CFLAGS_FOR_TARGET = $(CFLAGS) LDFLAGS_FOR_TARGET = LIBCFLAGS_FOR_TARGET = $(CFLAGS_FOR_TARGET) PICFLAG = PICFLAG_FOR_TARGET = - CHILLFLAGS = $(CFLAGS) - CHILL_LIB = -lchill CXX = c++ # Use -O2 to stress test the compiler. --- 93,105 ---- LDFLAGS = LIBCFLAGS = $(CFLAGS) + CFLAGS_FOR_BUILD = $(CFLAGS) CFLAGS_FOR_TARGET = $(CFLAGS) LDFLAGS_FOR_TARGET = LIBCFLAGS_FOR_TARGET = $(CFLAGS_FOR_TARGET) PICFLAG = PICFLAG_FOR_TARGET = CXX = c++ # Use -O2 to stress test the compiler. *************** LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit- *** 102,109 **** CXXFLAGS_FOR_TARGET = $(CXXFLAGS) LIBCXXFLAGS_FOR_TARGET = $(CXXFLAGS_FOR_TARGET) -fno-implicit-templates - RANLIB = ranlib - DLLTOOL = dlltool WINDRES = windres --- 107,112 ---- *************** M4 = `if [ -f $$r/m4/m4 ] ; \ *** 141,149 **** then echo $$r/m4/m4 ; \ else echo ${DEFAULT_M4} ; fi` ! MAKEINFO = `if [ -f $$r/texinfo/makeinfo/Makefile ] ; \ then echo $$r/texinfo/makeinfo/makeinfo ; \ ! else echo makeinfo ; fi` # This just becomes part of the MAKEINFO definition passed down to # sub-makes. It lets flags be given on the command line while still --- 144,156 ---- then echo $$r/m4/m4 ; \ else echo ${DEFAULT_M4} ; fi` ! # For an installed makeinfo, we require it to be from texinfo 4 or ! # higher, else we use the "missing" dummy. ! MAKEINFO = `if [ -f $$r/texinfo/makeinfo/makeinfo ] ; \ then echo $$r/texinfo/makeinfo/makeinfo ; \ ! else if (makeinfo --version \ ! | egrep 'texinfo[^0-9]*([1-3][0-9]|[4-9])') >/dev/null 2>&1; \ ! then echo makeinfo; else echo $$s/missing makeinfo; fi; fi` # This just becomes part of the MAKEINFO definition passed down to # sub-makes. It lets flags be given on the command line while still *************** OTHERS = *** 169,182 **** # This is set by the configure script to the list of directories which # should be built using the target tools. ! TARGET_CONFIGDIRS = libiberty libgloss $(SPECIAL_LIBS) newlib librx winsup opcodes bsp libstub cygmon libf2c libchill libobjc # Target libraries are put under this directory: # Changed by configure to $(target_alias) if cross. TARGET_SUBDIR = . ! # This is set by the configure script to the arguments passed to configure. ! CONFIG_ARGUMENTS = # This is set by configure to REALLY_SET_LIB_PATH if --enable-shared # was used. --- 176,197 ---- # This is set by the configure script to the list of directories which # should be built using the target tools. ! TARGET_CONFIGDIRS = libiberty libgloss $(SPECIAL_LIBS) newlib librx winsup opcodes bsp libstub cygmon libf2c libobjc # Target libraries are put under this directory: # Changed by configure to $(target_alias) if cross. TARGET_SUBDIR = . ! BUILD_CONFIGDIRS = libiberty ! BUILD_SUBDIR = . ! ! # This is set by the configure script to the arguments to use when configuring ! # directories built for the target. ! TARGET_CONFIGARGS = ! ! # This is set by the configure script to the arguments to use when configuring ! # directories built for the build system. ! BUILD_CONFIGARGS = # This is set by configure to REALLY_SET_LIB_PATH if --enable-shared # was used. *************** INSTALL_TARGET_CROSS = installdirs \ *** 218,224 **** # Should be substed by configure.in FLAGS_FOR_TARGET = CC_FOR_TARGET = - CHILL_FOR_TARGET = CXX_FOR_TARGET = CXX_FOR_TARGET_FOR_RECURSIVE_MAKE = GCJ_FOR_TARGET = --- 233,238 ---- *************** AS_FOR_TARGET = ` \ *** 235,241 **** elif [ -f $$r/gcc/xgcc ]; then \ $(CC_FOR_TARGET) -print-prog-name=as ; \ else \ ! if [ "$(host_canonical)" = "$(target_canonical)" ] ; then \ echo $(AS); \ else \ t='$(program_transform_name)'; echo as | sed -e 's/x/x/' $$t ; \ --- 249,255 ---- elif [ -f $$r/gcc/xgcc ]; then \ $(CC_FOR_TARGET) -print-prog-name=as ; \ else \ ! if [ '$(host_canonical)' = '$(target_canonical)' ] ; then \ echo $(AS); \ else \ t='$(program_transform_name)'; echo as | sed -e 's/x/x/' $$t ; \ *************** LD_FOR_TARGET = ` \ *** 248,254 **** elif [ -f $$r/gcc/xgcc ]; then \ $(CC_FOR_TARGET) -print-prog-name=ld ; \ else \ ! if [ "$(host_canonical)" = "$(target_canonical)" ] ; then \ echo $(LD); \ else \ t='$(program_transform_name)'; echo ld | sed -e 's/x/x/' $$t ; \ --- 262,268 ---- elif [ -f $$r/gcc/xgcc ]; then \ $(CC_FOR_TARGET) -print-prog-name=ld ; \ else \ ! if [ '$(host_canonical)' = '$(target_canonical)' ] ; then \ echo $(LD); \ else \ t='$(program_transform_name)'; echo ld | sed -e 's/x/x/' $$t ; \ *************** DLLTOOL_FOR_TARGET = ` \ *** 259,265 **** if [ -f $$r/binutils/dlltool ] ; then \ echo $$r/binutils/dlltool ; \ else \ ! if [ "$(host_canonical)" = "$(target_canonical)" ] ; then \ echo $(DLLTOOL); \ else \ t='$(program_transform_name)'; echo dlltool | sed -e 's/x/x/' $$t ; \ --- 273,279 ---- if [ -f $$r/binutils/dlltool ] ; then \ echo $$r/binutils/dlltool ; \ else \ ! if [ '$(host_canonical)' = '$(target_canonical)' ] ; then \ echo $(DLLTOOL); \ else \ t='$(program_transform_name)'; echo dlltool | sed -e 's/x/x/' $$t ; \ *************** WINDRES_FOR_TARGET = ` \ *** 270,276 **** if [ -f $$r/binutils/windres ] ; then \ echo $$r/binutils/windres ; \ else \ ! if [ "$(host_canonical)" = "$(target_canonical)" ] ; then \ echo $(WINDRES); \ else \ t='$(program_transform_name)'; echo windres | sed -e 's/x/x/' $$t ; \ --- 284,290 ---- if [ -f $$r/binutils/windres ] ; then \ echo $$r/binutils/windres ; \ else \ ! if [ '$(host_canonical)' = '$(target_canonical)' ] ; then \ echo $(WINDRES); \ else \ t='$(program_transform_name)'; echo windres | sed -e 's/x/x/' $$t ; \ *************** AR_FOR_TARGET = ` \ *** 281,287 **** if [ -f $$r/binutils/ar ] ; then \ echo $$r/binutils/ar ; \ else \ ! if [ "$(host_canonical)" = "$(target_canonical)" ] ; then \ echo $(AR); \ else \ t='$(program_transform_name)'; echo ar | sed -e 's/x/x/' $$t ; \ --- 295,301 ---- if [ -f $$r/binutils/ar ] ; then \ echo $$r/binutils/ar ; \ else \ ! if [ '$(host_canonical)' = '$(target_canonical)' ] ; then \ echo $(AR); \ else \ t='$(program_transform_name)'; echo ar | sed -e 's/x/x/' $$t ; \ *************** RANLIB_FOR_TARGET = ` \ *** 292,299 **** if [ -f $$r/binutils/ranlib ] ; then \ echo $$r/binutils/ranlib ; \ else \ ! if [ "$(host_canonical)" = "$(target_canonical)" ] ; then \ ! echo $(RANLIB); \ else \ t='$(program_transform_name)'; echo ranlib | sed -e 's/x/x/' $$t ; \ fi; \ --- 306,317 ---- if [ -f $$r/binutils/ranlib ] ; then \ echo $$r/binutils/ranlib ; \ else \ ! if [ '$(host_canonical)' = '$(target_canonical)' ] ; then \ ! if [ x'$(RANLIB)' != x ]; then \ ! echo $(RANLIB); \ ! else \ ! echo ranlib; \ ! fi; \ else \ t='$(program_transform_name)'; echo ranlib | sed -e 's/x/x/' $$t ; \ fi; \ *************** NM_FOR_TARGET = ` \ *** 305,311 **** elif [ -f $$r/gcc/xgcc ]; then \ $(CC_FOR_TARGET) -print-prog-name=nm ; \ else \ ! if [ "$(host_canonical)" = "$(target_canonical)" ] ; then \ echo $(NM); \ else \ t='$(program_transform_name)'; echo nm | sed -e 's/x/x/' $$t ; \ --- 323,329 ---- elif [ -f $$r/gcc/xgcc ]; then \ $(CC_FOR_TARGET) -print-prog-name=nm ; \ else \ ! if [ '$(host_canonical)' = '$(target_canonical)' ] ; then \ echo $(NM); \ else \ t='$(program_transform_name)'; echo nm | sed -e 's/x/x/' $$t ; \ *************** BASE_FLAGS_TO_PASS = \ *** 338,346 **** "CC_FOR_TARGET=$(CC_FOR_TARGET)" \ "CFLAGS=$(CFLAGS)" \ "CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)" \ - "CHILLFLAGS=$(CHILLFLAGS)" \ - "CHILL_FOR_TARGET=$(CHILL_FOR_TARGET)" \ - "CHILL_LIB=$(CHILL_LIB)" \ "GCJ_FOR_TARGET=$(GCJ_FOR_TARGET)" \ "CXX_FOR_BUILD=$(CXX_FOR_BUILD)" \ "CXXFLAGS=$(CXXFLAGS)" \ --- 356,361 ---- *************** EXTRA_HOST_FLAGS = \ *** 414,420 **** 'DLLTOOL=$(DLLTOOL)' \ 'LD=$(LD)' \ 'NM=$(NM)' \ ! 'RANLIB=$(RANLIB)' \ 'WINDRES=$(WINDRES)' FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) --- 429,435 ---- 'DLLTOOL=$(DLLTOOL)' \ 'LD=$(LD)' \ 'NM=$(NM)' \ ! "`echo 'RANLIB=$(RANLIB)' | sed -e s/.*=$$/XFOO=/`" \ 'WINDRES=$(WINDRES)' FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) *************** EXTRA_GCC_FLAGS = \ *** 468,476 **** 'HOST_PREFIX=$(HOST_PREFIX)' \ 'HOST_PREFIX_1=$(HOST_PREFIX_1)' \ 'NM=$(NM)' \ ! 'RANLIB=$(RANLIB)' \ 'WINDRES=$$(WINDRES_FOR_TARGET)' \ "GCC_FOR_TARGET=$(GCC_FOR_TARGET)" \ "`echo 'LANGUAGES=$(LANGUAGES)' | sed -e s/.*=$$/XFOO=/`" \ "`echo 'STMP_FIXPROTO=$(STMP_FIXPROTO)' | sed -e s/.*=$$/XFOO=/`" \ "`echo 'LIMITS_H_TEST=$(LIMITS_H_TEST)' | sed -e s/.*=$$/XFOO=/`" \ --- 483,492 ---- 'HOST_PREFIX=$(HOST_PREFIX)' \ 'HOST_PREFIX_1=$(HOST_PREFIX_1)' \ 'NM=$(NM)' \ ! "`echo 'RANLIB=$(RANLIB)' | sed -e s/.*=$$/XFOO=/`" \ 'WINDRES=$$(WINDRES_FOR_TARGET)' \ "GCC_FOR_TARGET=$(GCC_FOR_TARGET)" \ + "CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \ "`echo 'LANGUAGES=$(LANGUAGES)' | sed -e s/.*=$$/XFOO=/`" \ "`echo 'STMP_FIXPROTO=$(STMP_FIXPROTO)' | sed -e s/.*=$$/XFOO=/`" \ "`echo 'LIMITS_H_TEST=$(LIMITS_H_TEST)' | sed -e s/.*=$$/XFOO=/`" \ *************** EXTRA_GCC_FLAGS = \ *** 485,490 **** --- 501,518 ---- GCC_FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) # This is a list of the targets for all of the modules which are compiled + # using the build machine's native compiler. Configure edits the second + # macro for build!=host builds. + ALL_BUILD_MODULES_LIST = \ + all-build-libiberty + ALL_BUILD_MODULES = + + # This is a list of the configure targets for all of the modules which + # are compiled using the native tools. + CONFIGURE_BUILD_MODULES = \ + configure-build-libiberty + + # This is a list of the targets for all of the modules which are compiled # using $(FLAGS_TO_PASS). ALL_MODULES = \ all-apache \ *************** ALL_MODULES = \ *** 541,546 **** --- 569,575 ---- all-sed \ all-send-pr \ all-shellutils \ + all-sid \ all-sim \ all-snavigator \ all-tar \ *************** CROSS_CHECK_MODULES = \ *** 618,623 **** --- 647,653 ---- check-send-pr \ check-shellutils \ check-snavigator \ + check-sid \ check-sim \ check-tar \ check-tcl \ *************** INSTALL_MODULES = \ *** 694,699 **** --- 724,730 ---- install-sed \ install-send-pr \ install-shellutils \ + install-sid \ install-sim \ install-snavigator \ install-tar \ *************** ALL_TARGET_MODULES = \ *** 752,758 **** all-target-librx \ all-target-newlib \ all-target-libf2c \ - all-target-libchill \ all-target-libobjc \ all-target-libtermcap \ all-target-winsup \ --- 783,788 ---- *************** CONFIGURE_TARGET_MODULES = \ *** 776,782 **** configure-target-librx \ configure-target-newlib \ configure-target-libf2c \ - configure-target-libchill \ configure-target-libobjc \ configure-target-libtermcap \ configure-target-winsup \ --- 806,811 ---- *************** CHECK_TARGET_MODULES = \ *** 799,805 **** check-target-libstdc++-v3 \ check-target-newlib \ check-target-libf2c \ - check-target-libchill \ check-target-libobjc \ check-target-winsup \ check-target-libiberty \ --- 828,833 ---- *************** INSTALL_TARGET_MODULES = \ *** 816,822 **** install-target-libstdc++-v3 \ install-target-newlib \ install-target-libf2c \ - install-target-libchill \ install-target-libobjc \ install-target-libtermcap \ install-target-winsup \ --- 844,849 ---- *************** CLEAN_MODULES = \ *** 885,890 **** --- 912,918 ---- clean-sed \ clean-send-pr \ clean-shellutils \ + clean-sid \ clean-sim \ clean-snavigator \ clean-tar \ *************** CLEAN_TARGET_MODULES = \ *** 904,910 **** clean-target-librx \ clean-target-newlib \ clean-target-libf2c \ - clean-target-libchill \ clean-target-libobjc \ clean-target-winsup \ clean-target-libgloss \ --- 932,937 ---- *************** CLEAN_X11_MODULES = \ *** 935,940 **** --- 962,968 ---- # The target built for a native build. .PHONY: all.normal all.normal: \ + $(ALL_BUILD_MODULES) \ $(ALL_MODULES) \ $(ALL_X11_MODULES) \ $(ALL_TARGET_MODULES) \ *************** $(DO_X): *** 968,987 **** case $$i in \ gcc) \ for flag in $(EXTRA_GCC_FLAGS); do \ ! eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'|"`; \ done; \ ;; \ *) \ for flag in $(EXTRA_HOST_FLAGS); do \ ! eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'|"`; \ done; \ ;; \ esac ; \ - export AR AS CC CXX LD NM RANLIB DLLTOOL WINDRES; \ if (cd ./$$i; \ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ ! "RANLIB=$${RANLIB}" \ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \ $${target}); \ then true; else exit 1; fi; \ --- 996,1014 ---- case $$i in \ gcc) \ for flag in $(EXTRA_GCC_FLAGS); do \ ! eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ done; \ ;; \ *) \ for flag in $(EXTRA_HOST_FLAGS); do \ ! eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ done; \ ;; \ esac ; \ if (cd ./$$i; \ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ ! "`echo \"RANLIB=$${RANLIB}\" | sed -e 's/.*=$$/XFOO=/'`" \ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \ $${target}); \ then true; else exit 1; fi; \ *************** $(DO_X): *** 994,1006 **** for i in $(TARGET_CONFIGDIRS) -dummy-; do \ if [ -f $(TARGET_SUBDIR)/$$i/Makefile ]; then \ for flag in $(EXTRA_TARGET_FLAGS); do \ ! eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'|"`; \ done; \ - export AR AS CC CXX LD NM RANLIB DLLTOOL WINDRES; \ if (cd $(TARGET_SUBDIR)/$$i; \ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ ! "RANLIB=$${RANLIB}" \ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \ $${target}); \ then true; else exit 1; fi; \ --- 1021,1032 ---- for i in $(TARGET_CONFIGDIRS) -dummy-; do \ if [ -f $(TARGET_SUBDIR)/$$i/Makefile ]; then \ for flag in $(EXTRA_TARGET_FLAGS); do \ ! eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ done; \ if (cd $(TARGET_SUBDIR)/$$i; \ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ ! "`echo \"RANLIB=$${RANLIB}\" | sed -e 's/.*=$$/XFOO=/'`" \ "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \ $${target}); \ then true; else exit 1; fi; \ *************** clean-target-libgcc: *** 1085,1092 **** # Check target. ! .PHONY: check ! check: $(CHECK_MODULES) \ $(CHECK_TARGET_MODULES) \ $(CHECK_X11_MODULES) \ check-gcc --- 1111,1121 ---- # Check target. ! .PHONY: check do-check ! check: ! $(MAKE) do-check NOTPARALLEL=parallel-ok ! ! do-check: $(CHECK_MODULES) \ $(CHECK_TARGET_MODULES) \ $(CHECK_X11_MODULES) \ check-gcc *************** gcc-no-fixedincludes: *** 1183,1188 **** --- 1212,1317 ---- mv gcc/tmp-include gcc/include 2>/dev/null; \ else true; fi + # This rule is used to build the modules which are built with the + # build machine's native compiler. + .PHONY: $(ALL_BUILD_MODULES) + $(ALL_BUILD_MODULES): + dir=`echo $@ | sed -e 's/all-build-//'`; \ + if [ -f ./$${dir}/Makefile ] ; then \ + r=`pwd`; export r; \ + s=`cd $(srcdir); pwd`; export s; \ + (cd $(BUILD_SUBDIR)/$${dir} && $(MAKE) all); \ + else \ + true; \ + fi + + # This rule is used to configure the modules which are built with the + # native tools. + .PHONY: $(CONFIGURE_BUILD_MODULES) + $(CONFIGURE_BUILD_MODULES): + @dir=`echo $@ | sed -e 's/configure-build-//'`; \ + if [ ! -d $(BUILD_SUBDIR) ]; then \ + true; \ + elif [ -f $(BUILD_SUBDIR)/$${dir}/Makefile ] ; then \ + true; \ + elif echo " $(BUILD_CONFIGDIRS) " | grep " $${dir} " >/dev/null 2>&1; then \ + if [ -d $(srcdir)/$${dir} ]; then \ + [ -d $(BUILD_SUBDIR)/$${dir} ] || mkdir $(BUILD_SUBDIR)/$${dir};\ + r=`pwd`; export r; \ + s=`cd $(srcdir); pwd`; export s; \ + AR="$(AR_FOR_BUILD)"; export AR; \ + AS="$(AS_FOR_BUILD)"; export AS; \ + CC="$(CC_FOR_BUILD)"; export CC; \ + CFLAGS="$(CFLAGS_FOR_BUILD)"; export CFLAGS; \ + CXX="$(CXX_FOR_BUILD)"; export CXX; \ + CXXFLAGS="$(CXXFLAGS_FOR_BUILD)"; export CXXFLAGS; \ + GCJ="$(GCJ_FOR_BUILD)"; export GCJ; \ + DLLTOOL="$(DLLTOOL_FOR_BUILD)"; export DLLTOOL; \ + LD="$(LD_FOR_BUILD)"; export LD; \ + LDFLAGS="$(LDFLAGS_FOR_BUILD)"; export LDFLAGS; \ + NM="$(NM_FOR_BUILD)"; export NM; \ + RANLIB="$(RANLIB_FOR_BUILD)"; export RANLIB; \ + WINDRES="$(WINDRES_FOR_BUILD)"; export WINDRES; \ + echo Configuring in $(BUILD_SUBDIR)/$${dir}; \ + cd "$(BUILD_SUBDIR)/$${dir}" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) \ + topdir=$(srcdir) ;; \ + *) \ + case "$(BUILD_SUBDIR)" in \ + .) topdir="../$(srcdir)" ;; \ + *) topdir="../../$(srcdir)" ;; \ + esac ;; \ + esac; \ + if [ "$(srcdir)" = "." ] ; then \ + if [ "$(BUILD_SUBDIR)" != "." ] ; then \ + if $(SHELL) $$s/symlink-tree $${topdir}/$${dir} "no-such-file" ; then \ + if [ -f Makefile ]; then \ + if $(MAKE) distclean; then \ + true; \ + else \ + exit 1; \ + fi; \ + else \ + true; \ + fi; \ + else \ + exit 1; \ + fi; \ + else \ + true; \ + fi; \ + srcdiroption="--srcdir=."; \ + libsrcdir="."; \ + else \ + srcdiroption="--srcdir=$${topdir}/$${dir}"; \ + libsrcdir="$$s/$${dir}"; \ + fi; \ + if [ -f $${libsrcdir}/configure ] ; then \ + rm -f no-such-file skip-this-dir; \ + CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \ + $(BUILD_CONFIGARGS) $${srcdiroption} \ + --with-build-subdir="$(BUILD_SUBDIR)"; \ + else \ + rm -f no-such-file skip-this-dir; \ + CONFIG_SITE=no-such-file $(SHELL) $$s/configure \ + $(BUILD_CONFIGARGS) $${srcdiroption} \ + --with-build-subdir="$(BUILD_SUBDIR)"; \ + fi || exit 1; \ + if [ -f skip-this-dir ] ; then \ + sh skip-this-dir; \ + rm -f skip-this-dir; \ + cd ..; rmdir $${dir} || true; \ + else \ + true; \ + fi; \ + else \ + true; \ + fi; \ + else \ + true; \ + fi + # This rule is used to build the modules which use FLAGS_TO_PASS. To # build a target all-X means to cd to X and make all. # *************** $(ALL_MODULES) all-gui all-libproc: *** 1207,1213 **** .PHONY: $(CHECK_MODULES) $(NATIVE_CHECK_MODULES) $(CROSS_CHECK_MODULES) $(NATIVE_CHECK_MODULES): ! @if [ "$(host_canonical)" = "$(target_canonical)" ] ; then \ dir=`echo $@ | sed -e 's/check-//'`; \ if [ -f ./$${dir}/Makefile ] ; then \ r=`pwd`; export r; \ --- 1336,1342 ---- .PHONY: $(CHECK_MODULES) $(NATIVE_CHECK_MODULES) $(CROSS_CHECK_MODULES) $(NATIVE_CHECK_MODULES): ! @if [ '$(host_canonical)' = '$(target_canonical)' ] ; then \ dir=`echo $@ | sed -e 's/check-//'`; \ if [ -f ./$${dir}/Makefile ] ; then \ r=`pwd`; export r; \ *************** $(CONFIGURE_TARGET_MODULES): *** 1328,1339 **** if [ -f $${libsrcdir}/configure ] ; then \ rm -f no-such-file skip-this-dir; \ CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \ ! $(CONFIG_ARGUMENTS) $${srcdiroption} \ --with-target-subdir="$(TARGET_SUBDIR)"; \ else \ rm -f no-such-file skip-this-dir; \ CONFIG_SITE=no-such-file $(SHELL) $$s/configure \ ! $(CONFIG_ARGUMENTS) $${srcdiroption} \ --with-target-subdir="$(TARGET_SUBDIR)"; \ fi || exit 1; \ if [ -f skip-this-dir ] ; then \ --- 1457,1468 ---- if [ -f $${libsrcdir}/configure ] ; then \ rm -f no-such-file skip-this-dir; \ CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \ ! $(TARGET_CONFIGARGS) $${srcdiroption} \ --with-target-subdir="$(TARGET_SUBDIR)"; \ else \ rm -f no-such-file skip-this-dir; \ CONFIG_SITE=no-such-file $(SHELL) $$s/configure \ ! $(TARGET_CONFIGARGS) $${srcdiroption} \ --with-target-subdir="$(TARGET_SUBDIR)"; \ fi || exit 1; \ if [ -f skip-this-dir ] ; then \ *************** check-gcc: *** 1517,1522 **** --- 1646,1663 ---- true; \ fi + .PHONY: check-c++ + check-c++: + @if [ -f ./gcc/Makefile ] ; then \ + r=`pwd`; export r; \ + s=`cd $(srcdir); pwd`; export s; \ + $(SET_LIB_PATH) \ + (cd gcc; $(MAKE) $(GCC_FLAGS_TO_PASS) check-c++); \ + $(MAKE) check-target-libstdc++-v3; \ + else \ + true; \ + fi + .PHONY: install-gcc install-gcc: @if [ -f ./gcc/Makefile ] ; then \ *************** all-bash: *** 1568,1574 **** all-bfd: all-libiberty all-intl all-binutils: all-libiberty all-opcodes all-bfd all-flex all-bison all-byacc all-intl all-bison: all-texinfo ! configure-target-boehm-gc: $(ALL_GCC_CXX) configure-target-qthreads all-target-boehm-gc: configure-target-boehm-gc configure-target-bsp: $(ALL_GCC_C) all-target-bsp: configure-target-bsp --- 1709,1715 ---- all-bfd: all-libiberty all-intl all-binutils: all-libiberty all-opcodes all-bfd all-flex all-bison all-byacc all-intl all-bison: all-texinfo ! configure-target-boehm-gc: $(ALL_GCC_C) configure-target-qthreads all-target-boehm-gc: configure-target-boehm-gc configure-target-bsp: $(ALL_GCC_C) all-target-bsp: configure-target-bsp *************** GDB_TK = all-tk all-tcl all-itcl all-tix *** 1600,1606 **** all-gdb: all-libiberty all-opcodes all-bfd all-mmalloc all-readline all-bison all-byacc all-sim $(gdbnlmrequirements) $(GDB_TK) all-gettext: all-gnuserv: ! configure-target-gperf: $(ALL_GCC_C) all-target-gperf: configure-target-gperf all-target-libiberty all-target-libstdc++-v3 all-gprof: all-libiberty all-bfd all-opcodes all-intl all-grep: all-libiberty --- 1741,1747 ---- all-gdb: all-libiberty all-opcodes all-bfd all-mmalloc all-readline all-bison all-byacc all-sim $(gdbnlmrequirements) $(GDB_TK) all-gettext: all-gnuserv: ! configure-target-gperf: $(ALL_GCC_CXX) all-target-gperf: configure-target-gperf all-target-libiberty all-target-libstdc++-v3 all-gprof: all-libiberty all-bfd all-opcodes all-intl all-grep: all-libiberty *************** configure-target-libgloss: $(ALL_GCC) *** 1619,1627 **** all-target-libgloss: configure-target-libgloss configure-target-newlib all-libgui: all-tcl all-tk all-tcl8.1 all-tk8.1 all-itcl all-libiberty: configure-target-libffi: $(ALL_GCC_C) all-target-libffi: configure-target-libffi ! configure-target-libjava: $(ALL_GCC_CXX) configure-target-zlib configure-target-boehm-gc configure-target-qthreads configure-target-libffi all-target-libjava: configure-target-libjava all-fastjar all-target-zlib all-target-boehm-gc all-target-qthreads all-target-libffi configure-target-librx: $(ALL_GCC_C) all-target-librx: configure-target-librx --- 1760,1771 ---- all-target-libgloss: configure-target-libgloss configure-target-newlib all-libgui: all-tcl all-tk all-tcl8.1 all-tk8.1 all-itcl all-libiberty: + + all-build-libiberty: configure-build-libiberty + configure-target-libffi: $(ALL_GCC_C) all-target-libffi: configure-target-libffi ! configure-target-libjava: $(ALL_GCC_C) configure-target-zlib configure-target-boehm-gc configure-target-qthreads configure-target-libffi all-target-libjava: configure-target-libjava all-fastjar all-target-zlib all-target-boehm-gc all-target-qthreads all-target-libffi configure-target-librx: $(ALL_GCC_C) all-target-librx: configure-target-librx *************** all-target-libstub: configure-target-lib *** 1632,1642 **** all-libtool: configure-target-libf2c: $(ALL_GCC_C) all-target-libf2c: configure-target-libf2c all-target-libiberty - configure-target-libchill: $(ALL_GCC_C) - all-target-libchill: configure-target-libchill all-target-libiberty configure-target-libobjc: $(ALL_GCC_C) all-target-libobjc: configure-target-libobjc all-target-libiberty ! all-m4: all-libiberty all-make: all-libiberty all-mmalloc: configure-target-newlib: $(ALL_GCC) --- 1776,1784 ---- all-libtool: configure-target-libf2c: $(ALL_GCC_C) all-target-libf2c: configure-target-libf2c all-target-libiberty configure-target-libobjc: $(ALL_GCC_C) all-target-libobjc: configure-target-libobjc all-target-libiberty ! all-m4: all-libiberty all-texinfo all-make: all-libiberty all-mmalloc: configure-target-newlib: $(ALL_GCC) *************** all-recode: all-libiberty *** 1655,1660 **** --- 1797,1803 ---- all-sed: all-libiberty all-send-pr: all-prms all-shellutils: + all-sid: all-tcl all-tk all-sim: all-libiberty all-bfd all-opcodes all-readline all-cgen all-snavigator: all-tcl all-tk all-itcl all-db all-grep all-libgui all-tar: all-libiberty *************** all-zip: *** 1676,1689 **** all-zlib: configure-target-zlib: $(ALL_GCC_C) all-target-zlib: configure-target-zlib ! all-fastjar: all-zlib configure-target-fastjar: configure-target-zlib ! all-target-fastjar: configure-target-fastjar all-target-zlib configure-target-libiberty: $(ALL_GCC_C) all-target-libiberty: configure-target-libiberty all-target: $(ALL_TARGET_MODULES) install-target: $(INSTALL_TARGET_MODULES) install-gdb: install-tcl install-tk install-itcl install-tix install-libgui ### other supporting targets MAKEDIRS= \ --- 1819,1833 ---- all-zlib: configure-target-zlib: $(ALL_GCC_C) all-target-zlib: configure-target-zlib ! all-fastjar: all-zlib all-libiberty configure-target-fastjar: configure-target-zlib ! all-target-fastjar: configure-target-fastjar all-target-zlib all-target-libiberty configure-target-libiberty: $(ALL_GCC_C) all-target-libiberty: configure-target-libiberty all-target: $(ALL_TARGET_MODULES) install-target: $(INSTALL_TARGET_MODULES) install-gdb: install-tcl install-tk install-itcl install-tix install-libgui + install-sid: install-tcl install-tk ### other supporting targets MAKEDIRS= \ diff -Nrc3pad gcc-3.0.4/bugs.html gcc-3.1/bugs.html *** gcc-3.0.4/bugs.html Wed Feb 20 19:40:55 2002 --- gcc-3.1/bugs.html Wed May 15 02:40:21 2002 *************** *** 20,25 **** --- 20,26 ----
    • What we DON'T want
    • Where to post it
    • Detailed bug reporting instructions
    • +
    • Detailed bug reporting instructions for GNAT
  • Managing Bugs (GNATS and the test-suite)
  • *************** three of which can be obtained from the *** 80,86 ****
  • the compiler output (error messages, warnings, etc.); and
  • the preprocessed file (*.i*) that triggers the bug, generated by adding -save-temps to the complete ! compilation command (see below).
  • What we do not want

    --- 81,88 ----
  • the compiler output (error messages, warnings, etc.); and
  • the preprocessed file (*.i*) that triggers the bug, generated by adding -save-temps to the complete ! compilation command, or, in the case of a bug report for the GNAT front end, ! a complete set of source files (see below).
  • What we do not want

    *************** Only if this is not possible, mail all i *** 140,148 **** --- 142,157 ---- bug-gcc@gnu.org or gcc-bugs@gcc.gnu.org.

    +

    The GCC lists have message size limits (200 kbytes) and bug reports + over those limits will currently be bounced. If your bug is larger + than that, please post it using the GCC GNATS bug + database.

    Detailed bug reporting instructions

    +

    Please refer to the next section when reporting + bugs in GNAT, the Ada compiler.

    +

    In general, all the information we need can be obtained by collecting the command line below, as well as its output and the preprocessed file it generates.

    *************** make sure the compiler version, error me *** 187,197 **** the body of your bug report as plain text, even if needlessly duplicated as part of an archive.

    -

    The gcc lists have message size limits (200 kbytes) and bug reports - over those limits will currently be bounced. If your bug is larger - than that, please post it using the GCC GNATS bug - database.

    -

    If you fail to supply enough information for a bug report to be reproduced, someone will probably ask you to post additional information (or just ignore your bug report, if they're in a bad day, --- 196,201 ---- *************** possible, please include in this follow- *** 202,208 **** --- 206,253 ---- supplied in the incomplete bug report (including the preprocessor output), so that the new bug report is self-contained.

    +

    Detailed bug reporting instructions for GNAT

    +

    See the previous section for bug reporting + instructions for GCC language implementations other than Ada.

    + +

    Bug reports have to contain at least the following information in + order to be useful:

    + +
      +
    • the exact version of GCC, as shown by "gcc -v";
    • +
    • the system type;
    • +
    • the options when GCC was configured/built;
    • +
    • the exact command line passed to the gcc program + triggering the bug + (not just the flags passed to gnatmake, but + gnatmake prints the parameters it passed to gcc)
    • +
    • a collection of source files for reproducing the bug, + preferably a minimal set (see below);
    • +
    • a description of the expected behavior;
    • +
    • a description of actual behavior.
    • +
    + +

    If your code depends on additional source files (usually package + specifications), submit the source code for these compilation units in + a single file that is acceptable input to gnatchop, + i.e. contains no non-Ada text. If the compilation terminated + normally, you can usually obtain a list of dependencies using the + "gnatls -d main_unit" command, where + main_unit is the file name of the main compilation + unit (which is also passed to gcc).

    + +

    If you report a bug which causes the compiler to print a bug box, + include that bug box in your report, and do not forget to send all the + source files listed after the bug box along with your report.

    + +

    If you use gnatprep, be sure to send in preprocessed + sources (unless you have to report a bug in gnatprep).

    + +

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

    Managing Bugs (GNATS and the test-suite)

    *************** often enough to warrant a mention here.< *** 270,280 ****

    This has nothing to do with GCC, but people ask us about it a lot. Code like this:

    !
    ! #include <stdio.h> ! FILE *yyin = stdin; !

    will not compile with GNU libc (GNU/Linux libc6), because stdin is not a constant. This was done deliberately, to make --- 315,325 ----

    This has nothing to do with GCC, but people ask us about it a lot. Code like this:

    !
    ! #include <stdio.h>
      
    ! FILE *yyin = stdin;
    ! 

    will not compile with GNU libc (GNU/Linux libc6), because stdin is not a constant. This was done deliberately, to make *************** for details. *** 297,303 ****

    Cannot use preprocessor directive in macro arguments.

    Let me guess... you wrote code that looks something like this:

    !
    memcpy(dest, src, #ifdef PLATFORM1 12 --- 342,348 ----
    Cannot use preprocessor directive in macro arguments.

    Let me guess... you wrote code that looks something like this:

    !
        memcpy(dest, src,
      #ifdef PLATFORM1
      	 12
    *************** for details.
    *** 305,311 ****
      	 24
      #endif
      	);
    ! 

    and you got a whole pile of error messages:

    --- 350,356 ---- 24 #endif ); !

    and you got a whole pile of error messages:

    *************** test.c:10: undefined or invalid # direct *** 323,371 **** test.c:11: parse error before `#'
    !

    The problem, simply put, is that GCC's preprocessor does not allow you ! to put #ifdef (or any other directive) inside the arguments of ! a macro. Your C library's <string.h> happens to ! define memcpy as a macro - this is perfectly legitimate. ! The code therefore will not compile.

    ! !

    We have two good reasons for not allowing directives inside ! macro arguments. First, it is not portable. It is "undefined ! behavior" according to the C standard; that means different ! compilers will do different things with it. Some will give you ! errors. Some will dump core. Some will silently mangle your code - ! you could get the equivalent of

    !
    ! 	memcpy(dest, src, 1224);
    ! 
    !

    from the above example. A very few might do what you expected it ! to. We therefore feel it is most useful for GCC to reject this ! construct immediately so that it is found and fixed.

    !

    Second, it is extraordinarily difficult to implement the ! preprocessor such that it does what you would expect for every ! possible directive found inside a macro argument. The best example is ! perhaps

    !
    ! #define foo(arg) ... arg ...
    ! foo(blah
    ! #undef foo
    ! blah)
    !
    !

    which is impossible to implement in portable C without ! leaking memory. Allowing only a subset of directives would be ! confusing.

    !

    It is always possible to rewrite code which uses conditionals ! inside macros so that it doesn't. You could write the above ! example

    !
    ! #ifdef PLATFORM1
    ! memcpy(dest, src, 12);
    ! #else
    ! memcpy(dest, src, 24);
    ! #endif
    !

    This is a bit more typing, but I personally think it's better style in addition to being more portable.

    --- 368,395 ---- test.c:11: parse error before `#'
    !

    Update: As of GCC 3.2 this kind of construct is ! always accepted and CPP will probably do what you expect, but see the ! manual for detailed semantics.

    !

    However, versions of GCC prior to 3.2 did not allow you to put ! #ifdef (or any other directive) inside the arguments of a ! macro. Your C library's <string.h> happens to ! define memcpy as a macro - this is perfectly legitimate. ! The code therefore would not compile.

    !

    This kind of code is not portable. It is "undefined behavior" ! according to the C standard; that means different compilers will do ! different things with it. It is always possible to rewrite code which ! uses conditionals inside macros so that it doesn't. You could write ! the above example

    !
    ! #ifdef PLATFORM1
    !    memcpy(dest, src, 12);
    ! #else
    !    memcpy(dest, src, 24);
    ! #endif
    ! 

    This is a bit more typing, but I personally think it's better style in addition to being more portable.

    diff -Nrc3pad gcc-3.0.4/config/ChangeLog gcc-3.1/config/ChangeLog *** gcc-3.0.4/config/ChangeLog Wed Feb 20 18:38:36 2002 --- gcc-3.1/config/ChangeLog Wed May 15 02:15:07 2002 *************** *** 1,30 **** ! 2002-02-20 Release Manager ! ! * GCC 3.0.4 Released. ! ! 2002-02-20 Release Manager ! ! * GCC 3.0.4 Released. ! ! 2001-12-20 Release Manager ! ! * GCC 3.0.3 Released. ! ! 2001-10-23 Release Manager ! ! * GCC 3.0.2 Released. ! ! 2001-08-19 Release Manager ! * GCC 3.0.1 Released. ! 2001-08-19 Release Manager ! * GCC 3.0.1 Released. ! 20010617 Release Manager ! * GCC 3.0 Released. 2001-05-22 Jason Merrill --- 1,14 ---- ! 2002-05-14 Release Manager ! * GCC 3.1 Released. ! 2002-05-14 Release Manager ! * GCC 3.1 Released. ! 2001-10-07 Joseph S. Myers ! * acinclude.m4: Fix spelling error of "separate" as "seperate". 2001-05-22 Jason Merrill diff -Nrc3pad gcc-3.0.4/config/acinclude.m4 gcc-3.1/config/acinclude.m4 *** gcc-3.0.4/config/acinclude.m4 Fri Jul 21 05:44:02 2000 --- gcc-3.1/config/acinclude.m4 Sun Oct 7 18:02:40 2001 *************** AC_DEFUN(CYG_AC_PATH_TKH, [ *** 1071,1077 **** # Note the gross little conversion here of srcdir by cd'ing to the found # directory. This converts the path from a relative to an absolute, so # recursive cache variables for the path will work right. We check all ! # the possible paths in one loop rather than many seperate loops to speed # things up. # the alternative search directory is involked by --with-tkinclude # --- 1071,1077 ---- # Note the gross little conversion here of srcdir by cd'ing to the found # directory. This converts the path from a relative to an absolute, so # recursive cache variables for the path will work right. We check all ! # the possible paths in one loop rather than many separate loops to speed # things up. # the alternative search directory is involked by --with-tkinclude # diff -Nrc3pad gcc-3.0.4/config/mpw/ChangeLog gcc-3.1/config/mpw/ChangeLog *** gcc-3.0.4/config/mpw/ChangeLog Wed Feb 20 18:38:25 2002 --- gcc-3.1/config/mpw/ChangeLog Wed May 15 02:15:01 2002 *************** *** 1,34 **** ! 2002-02-20 Release Manager ! ! * GCC 3.0.4 Released. ! ! 2002-02-20 Release Manager ! ! * GCC 3.0.4 Released. ! ! 2001-12-20 Release Manager ! ! * GCC 3.0.3 Released. ! ! 2001-10-23 Release Manager ! ! * GCC 3.0.2 Released. ! ! 2001-08-19 Release Manager ! ! * GCC 3.0.1 Released. ! ! 2001-08-19 Release Manager ! ! * GCC 3.0.1 Released. ! ! 2001-08-19 Release Manager ! * GCC 3.0.1 Released. ! 20010617 Release Manager ! * GCC 3.0 Released. Tue Nov 26 12:34:12 1996 Stan Shebs --- 1,10 ---- ! 2002-05-14 Release Manager ! * GCC 3.1 Released. ! 2002-05-14 Release Manager ! * GCC 3.1 Released. Tue Nov 26 12:34:12 1996 Stan Shebs diff -Nrc3pad gcc-3.0.4/config.guess gcc-3.1/config.guess *** gcc-3.0.4/config.guess Sat Jun 9 18:49:05 2001 --- gcc-3.1/config.guess Tue Apr 16 00:15:59 2002 *************** *** 1,9 **** #! /bin/sh # Attempt to guess a canonical system name. ! # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 ! # Free Software Foundation, Inc. ! timestamp='2001-06-05' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by --- 1,9 ---- #! /bin/sh # Attempt to guess a canonical system name. ! # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, ! # 2000, 2001, 2002 Free Software Foundation, Inc. ! timestamp='2002-01-30' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by *************** timestamp='2001-06-05' *** 24,31 **** # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. ! # Written by Per Bothner . ! # Please send patches to . # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and --- 24,32 ---- # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. ! # Originally written by Per Bothner . ! # Please send patches to . Submit a context ! # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and *************** trap 'rm -f $dummy.c $dummy.o $dummy.rel *** 95,119 **** # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. ! case $CC_FOR_BUILD,$HOST_CC,$CC in ! ,,) echo "int dummy(){}" > $dummy.c for c in cc gcc c89 ; do ! ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 if test $? = 0 ; then ! CC_FOR_BUILD="$c"; break ! fi ! done ! rm -f $dummy.c $dummy.o $dummy.rel if test x"$CC_FOR_BUILD" = x ; then ! CC_FOR_BUILD=no_compiler_found fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; ! esac # This is needed to find uname on a Pyramid OSx when run in the BSD universe. ! # (ghazi@noc.rutgers.edu 8/24/94.) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi --- 96,120 ---- # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. ! set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in ! ,,) echo "int dummy(){}" > $dummy.c ; for c in cc gcc c89 ; do ! ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ; if test $? = 0 ; then ! CC_FOR_BUILD="$c"; break ; ! fi ; ! done ; ! rm -f $dummy.c $dummy.o $dummy.rel ; if test x"$CC_FOR_BUILD" = x ; then ! CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; ! esac' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. ! # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi *************** UNAME_VERSION=`(uname -v) 2>/dev/null` | *** 127,155 **** case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) ! # Netbsd (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. ! # Determine the machine/vendor (is the vendor relevant). ! case "${UNAME_MACHINE}" in ! amiga) machine=m68k-unknown ;; ! arm32) machine=arm-unknown ;; ! atari*) machine=m68k-atari ;; ! sun3*) machine=m68k-sun ;; ! mac68k) machine=m68k-apple ;; ! macppc) machine=powerpc-apple ;; ! hp3[0-9][05]) machine=m68k-hp ;; ! ibmrt|romp-ibm) machine=romp-ibm ;; ! *) machine=${UNAME_MACHINE}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. ! case "${UNAME_MACHINE}" in ! i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k) if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then --- 128,156 ---- case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) ! # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. ! # ! # Note: NetBSD doesn't particularly care about the vendor ! # portion of the name. We always set it to "unknown". ! UNAME_MACHINE_ARCH=`(uname -p) 2>/dev/null` || \ ! UNAME_MACHINE_ARCH=unknown ! case "${UNAME_MACHINE_ARCH}" in ! arm*) machine=arm-unknown ;; ! sh3el) machine=shl-unknown ;; ! sh3eb) machine=sh-unknown ;; ! *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. ! case "${UNAME_MACHINE_ARCH}" in ! arm*|i386|m68k|ns32k|sh3*|sparc|vax) ! eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then *************** case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$ *** 171,176 **** --- 172,216 ---- # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit 0 ;; + amiga:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + arc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + hp300:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mac68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + macppc:OpenBSD:*:*) + echo powerpc-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme88k:OpenBSD:*:*) + echo m88k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvmeppc:OpenBSD:*:*) + echo powerpc-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + pmax:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sgi:OpenBSD:*:*) + echo mipseb-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sun3:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + wgrisc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + *:OpenBSD:*:*) + echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; alpha:OSF1:*:*) if test $UNAME_RELEASE = "V4.0"; then UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` *************** main: *** 204,209 **** --- 244,250 ---- jsr \$26,exit .end main EOF + eval $set_cc_for_build $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null if test "$?" = 0 ; then case `./$dummy` in *************** EOF *** 225,230 **** --- 266,274 ---- 2-307) UNAME_MACHINE="alphaev67" ;; + 2-1307) + UNAME_MACHINE="alphaev68" + ;; esac fi rm -f $dummy.s $dummy *************** EOF *** 242,270 **** Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit 0;; - amiga:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit 0 ;; ! arc64:OpenBSD:*:*) ! echo mips64el-unknown-openbsd${UNAME_RELEASE} ! exit 0 ;; ! arc:OpenBSD:*:*) ! echo mipsel-unknown-openbsd${UNAME_RELEASE} ! exit 0 ;; ! hkmips:OpenBSD:*:*) ! echo mips-unknown-openbsd${UNAME_RELEASE} ! exit 0 ;; ! pmax:OpenBSD:*:*) ! echo mipsel-unknown-openbsd${UNAME_RELEASE} ! exit 0 ;; ! sgi:OpenBSD:*:*) ! echo mips-unknown-openbsd${UNAME_RELEASE} ! exit 0 ;; ! wgrisc:OpenBSD:*:*) ! echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:OS/390:*:*) echo i370-ibm-openedition --- 286,296 ---- Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit 0;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit 0 ;; ! *:[Mm]orph[Oo][Ss]:*:*) ! echo ${UNAME_MACHINE}-unknown-morphos exit 0 ;; *:OS/390:*:*) echo i370-ibm-openedition *************** EOF *** 328,336 **** aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit 0 ;; - atari*:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor --- 354,359 ---- *************** EOF *** 357,374 **** *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit 0 ;; - sun3*:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mac68k:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mvme68k:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mvme88k:OpenBSD:*:*) - echo m88k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit 0 ;; --- 380,385 ---- *************** EOF *** 385,390 **** --- 396,402 ---- echo clipper-intergraph-clix${UNAME_RELEASE} exit 0 ;; mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ *************** EOF *** 475,480 **** --- 487,493 ---- exit 0 ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include *************** EOF *** 536,545 **** 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) ! case "${HPUX_REV}" in ! 11.[0-9][0-9]) ! if [ -x /usr/bin/getconf ]; then ! sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 --- 549,556 ---- 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) ! if [ -x /usr/bin/getconf ]; then ! sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 *************** EOF *** 548,559 **** case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; esac ;; esac ! fi ;; ! esac ! if [ "${HP_ARCH}" = "" ]; then ! sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include --- 559,571 ---- case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac ! fi ! if [ "${HP_ARCH}" = "" ]; then ! eval $set_cc_for_build ! sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include *************** EOF *** 586,595 **** exit (0); } EOF ! (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy` ! if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi ! rm -f $dummy.c $dummy ! fi ;; esac echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; --- 598,607 ---- exit (0); } EOF ! (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null) && HP_ARCH=`./$dummy` ! if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi ! rm -f $dummy.c $dummy ! fi ;; esac echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; *************** EOF *** 598,603 **** --- 610,616 ---- echo ia64-hp-hpux${HPUX_REV} exit 0 ;; 3050*:HI-UX:*:*) + eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int *************** EOF *** 633,639 **** 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit 0 ;; ! *9??*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit 0 ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) --- 646,652 ---- 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit 0 ;; ! *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit 0 ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) *************** EOF *** 652,660 **** parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit 0 ;; - hppa*:OpenBSD:*:*) - echo hppa-unknown-openbsd - exit 0 ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit 0 ;; --- 665,670 ---- *************** EOF *** 677,688 **** echo xmp-cray-unicos exit 0 ;; CRAY*Y-MP:*:*:*) ! echo ymp-cray-unicos${UNAME_RELEASE} exit 0 ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ ! -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ exit 0 ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' --- 687,699 ---- echo xmp-cray-unicos exit 0 ;; CRAY*Y-MP:*:*:*) ! echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ ! -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ ! -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' *************** EOF *** 705,713 **** FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; - hp300:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; --- 716,721 ---- *************** EOF *** 720,728 **** *:FreeBSD:*:*) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit 0 ;; - *:OpenBSD:*:*) - echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - exit 0 ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit 0 ;; --- 728,733 ---- *************** EOF *** 732,737 **** --- 737,745 ---- i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit 0 ;; + x86:Interix*:3*) + echo i386-pc-interix3 + exit 0 ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we *************** EOF *** 763,859 **** echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; mips:Linux:*:*) ! cat >$dummy.c < /* for printf() prototype */ ! int main (int argc, char *argv[]) { ! #else ! int main (argc, argv) int argc; char *argv[]; { ! #endif ! #ifdef __MIPSEB__ ! printf ("%s-unknown-linux-gnu\n", argv[1]); ! #endif ! #ifdef __MIPSEL__ ! printf ("%sel-unknown-linux-gnu\n", argv[1]); ! #endif ! return 0; ! } EOF ! $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0 ! rm -f $dummy.c $dummy ;; ppc:Linux:*:*) ! # Determine Lib Version ! cat >$dummy.c < ! #if defined(__GLIBC__) ! extern char __libc_version[]; ! extern char __libc_release[]; ! #endif ! main(argc, argv) ! int argc; ! char *argv[]; ! { ! #if defined(__GLIBC__) ! printf("%s %s\n", __libc_version, __libc_release); ! #else ! printf("unknown\n"); ! #endif ! return 0; ! } ! EOF ! LIBC="" ! $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ! if test "$?" = 0 ; then ! ./$dummy | grep 1\.99 > /dev/null ! if test "$?" = 0 ; then LIBC="libc1" ; fi ! fi ! rm -f $dummy.c $dummy ! echo powerpc-unknown-linux-gnu${LIBC} exit 0 ;; alpha:Linux:*:*) ! cat <$dummy.s ! .data ! \$Lformat: ! .byte 37,100,45,37,120,10,0 # "%d-%x\n" ! .text ! .globl main ! .align 4 ! .ent main ! main: ! .frame \$30,16,\$26,0 ! ldgp \$29,0(\$27) ! .prologue 1 ! .long 0x47e03d80 # implver \$0 ! lda \$2,-1 ! .long 0x47e20c21 # amask \$2,\$1 ! lda \$16,\$Lformat ! mov \$0,\$17 ! not \$1,\$18 ! jsr \$26,printf ! ldgp \$29,0(\$26) ! mov 0,\$16 ! jsr \$26,exit ! .end main ! EOF ! LIBC="" ! $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null ! if test "$?" = 0 ; then ! case `./$dummy` in ! 0-0) UNAME_MACHINE="alpha" ;; ! 1-0) UNAME_MACHINE="alphaev5" ;; ! 1-1) UNAME_MACHINE="alphaev56" ;; ! 1-101) UNAME_MACHINE="alphapca56" ;; ! 2-303) UNAME_MACHINE="alphaev6" ;; ! 2-307) UNAME_MACHINE="alphaev67" ;; ! esac ! objdump --private-headers $dummy | \ ! grep ld.so.1 > /dev/null ! if test "$?" = 0 ; then ! LIBC="libc1" ! fi ! fi ! rm -f $dummy.s $dummy echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit 0 ;; parisc:Linux:*:* | hppa:Linux:*:*) --- 771,813 ---- echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; mips:Linux:*:*) ! eval $set_cc_for_build ! sed 's/^ //' << EOF >$dummy.c ! #undef CPU ! #undef mips ! #undef mipsel ! #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) ! CPU=mipsel ! #else ! #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) ! CPU=mips ! #else ! CPU= ! #endif ! #endif EOF ! eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` ! rm -f $dummy.c ! test x"${CPU}" != x && echo "${CPU}-pc-linux-gnu" && exit 0 ;; ppc:Linux:*:*) ! echo powerpc-unknown-linux-gnu ! exit 0 ;; ! ppc64:Linux:*:*) ! echo powerpc64-unknown-linux-gnu exit 0 ;; alpha:Linux:*:*) ! case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in ! EV5) UNAME_MACHINE=alphaev5 ;; ! EV56) UNAME_MACHINE=alphaev56 ;; ! PCA56) UNAME_MACHINE=alphapca56 ;; ! PCA57) UNAME_MACHINE=alphapca56 ;; ! EV6) UNAME_MACHINE=alphaev6 ;; ! EV67) UNAME_MACHINE=alphaev67 ;; ! EV68*) UNAME_MACHINE=alphaev68 ;; ! esac ! objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null ! if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit 0 ;; parisc:Linux:*:* | hppa:Linux:*:*) *************** EOF *** 883,889 **** # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. ! ld_supported_targets=`cd /; ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// --- 837,845 ---- # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. ! # Export LANG=C to prevent ld from outputting information in other ! # languages. ! ld_supported_targets=`LANG=C; export LANG; cd /; ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// *************** EOF *** 906,942 **** exit 0 ;; esac # Determine whether the default compiler is a.out or elf ! cat >$dummy.c < ! #ifdef __cplusplus ! #include /* for printf() prototype */ ! int main (int argc, char *argv[]) { ! #else ! int main (argc, argv) int argc; char *argv[]; { ! #endif ! #ifdef __ELF__ ! # ifdef __GLIBC__ ! # if __GLIBC__ >= 2 ! printf ("%s-pc-linux-gnu\n", argv[1]); ! # else ! printf ("%s-pc-linux-gnulibc1\n", argv[1]); ! # endif ! # else ! printf ("%s-pc-linux-gnulibc1\n", argv[1]); ! # endif ! #else ! printf ("%s-pc-linux-gnuaout\n", argv[1]); ! #endif ! return 0; ! } EOF ! $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0 ! rm -f $dummy.c $dummy test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 ;; - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions - # are messed up and put the nodename in both sysname and nodename. i*86:DYNIX/ptx:4*:*) echo i386-sequent-sysv4 exit 0 ;; i*86:UNIX_SV:4.2MP:2.*) --- 862,897 ---- exit 0 ;; esac # Determine whether the default compiler is a.out or elf ! eval $set_cc_for_build ! sed 's/^ //' << EOF >$dummy.c ! #include ! #ifdef __ELF__ ! # ifdef __GLIBC__ ! # if __GLIBC__ >= 2 ! LIBC=gnu ! # else ! LIBC=gnulibc1 ! # endif ! # else ! LIBC=gnulibc1 ! # endif ! #else ! #ifdef __INTEL_COMPILER ! LIBC=gnu ! #else ! LIBC=gnuaout ! #endif ! #endif EOF ! eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` ! rm -f $dummy.c ! test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 ;; i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. echo i386-sequent-sysv4 exit 0 ;; i*86:UNIX_SV:4.2MP:2.*) *************** EOF *** 955,968 **** echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit 0 ;; ! i*86:*:5:7*) ! # Fixed at (any) Pentium or better ! UNAME_MACHINE=i586 ! if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then ! echo ${UNAME_MACHINE}-sco-sysv${UNAME_RELEASE}uw${UNAME_VERSION} ! else ! echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE} ! fi exit 0 ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then --- 910,922 ---- echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit 0 ;; ! i*86:*:5:[78]*) ! case `/bin/uname -X | grep "^Machine"` in ! *486*) UNAME_MACHINE=i486 ;; ! *Pentium) UNAME_MACHINE=i586 ;; ! *Pent*|*Celeron) UNAME_MACHINE=i686 ;; ! esac ! echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit 0 ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then *************** EOF *** 1010,1016 **** exit 0 ;; M68*:*:R3V[567]*:*) test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; ! 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` --- 964,970 ---- exit 0 ;; M68*:*:R3V[567]*:*) test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; ! 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` *************** EOF *** 1056,1063 **** echo ns32k-sni-sysv fi exit 0 ;; ! PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort ! # says echo i586-unisys-sysv4 exit 0 ;; *:UNIX_System_V:4*:FTX*) --- 1010,1017 ---- echo ns32k-sni-sysv fi exit 0 ;; ! PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort ! # says echo i586-unisys-sysv4 exit 0 ;; *:UNIX_System_V:4*:FTX*) *************** EOF *** 1069,1074 **** --- 1023,1032 ---- # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit 0 ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit 0 ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit 0 ;; *************** EOF *** 1109,1121 **** *:procnto*:*:* | *:QNX:[0123456789]*:*) if test "${UNAME_MACHINE}" = "x86pc"; then UNAME_MACHINE=pc fi - echo `uname -p`-${UNAME_MACHINE}-nto-qnx exit 0 ;; *:QNX:*:4*) echo i386-pc-qnx exit 0 ;; ! NSR-[KW]:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit 0 ;; *:NonStop-UX:*:*) --- 1067,1081 ---- *:procnto*:*:* | *:QNX:[0123456789]*:*) if test "${UNAME_MACHINE}" = "x86pc"; then UNAME_MACHINE=pc + echo i386-${UNAME_MACHINE}-nto-qnx + else + echo `uname -p`-${UNAME_MACHINE}-nto-qnx fi exit 0 ;; *:QNX:*:4*) echo i386-pc-qnx exit 0 ;; ! NSR-[GKLNPTVW]:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit 0 ;; *:NonStop-UX:*:*) *************** EOF *** 1161,1171 **** --- 1121,1138 ---- *:ITS:*:*) echo pdp10-unknown-its exit 0 ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit 0 ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit 0 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + eval $set_cc_for_build cat >$dummy.c < diff -Nrc3pad gcc-3.0.4/config.sub gcc-3.1/config.sub *** gcc-3.0.4/config.sub Thu Jan 31 20:42:45 2002 --- gcc-3.1/config.sub Sat Feb 9 03:00:13 2002 *************** *** 1,9 **** #! /bin/sh # Configuration validation subroutine script. ! # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 ! # Free Software Foundation, Inc. ! timestamp='2001-06-08' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software --- 1,9 ---- #! /bin/sh # Configuration validation subroutine script. ! # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, ! # 2000, 2001, 2002 Free Software Foundation, Inc. ! timestamp='2002-02-01' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software *************** timestamp='2001-06-08' *** 29,35 **** # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. ! # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. --- 29,36 ---- # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. ! # Please send patches to . Submit a context ! # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. *************** esac *** 223,249 **** case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. ! tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc \ ! | arm | arme[lb] | arm[bl]e | armv[2345] | armv[345][lb] | strongarm | xscale \ ! | pyramid | mn10200 | mn10300 | tron | a29k \ ! | 580 | i960 | h8300 \ ! | x86 | ppcbe | mipsbe | mipsle | shbe | shle \ ! | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \ ! | hppa64 \ ! | alpha | alphaev[4-8] | alphaev56 | alphapca5[67] \ ! | alphaev6[78] \ ! | we32k | ns16k | clipper | i370 | sh | sh[34] \ ! | powerpc | powerpcle \ ! | 1750a | dsp16xx | pdp10 | pdp11 \ ! | mips16 | mips64 | mipsel | mips64el \ ! | mips64orion | mips64orionel | mipstx39 | mipstx39el \ ! | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \ ! | mips64vr5000 | mips64vr5000el | mcore | s390 | s390x \ ! | xtensa \ ! | sparc | sparclet | sparclite | sparc64 | sparcv9 | sparcv9b \ ! | v850 | c4x \ ! | thumb | d10v | d30v | fr30 | avr | openrisc | tic80 \ ! | pj | pjl | h8500 | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) --- 224,259 ---- case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. ! 1750a | 580 \ ! | a29k \ ! | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ ! | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ ! | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ ! | c4x | clipper \ ! | d10v | d30v | dsp16xx \ ! | fr30 \ ! | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ ! | i370 | i860 | i960 | ia64 \ ! | m32r | m68000 | m68k | m88k | mcore \ ! | mips16 | mips64 | mips64el | mips64orion | mips64orionel \ ! | mips64vr4100 | mips64vr4100el | mips64vr4300 \ ! | mips64vr4300el | mips64vr5000 | mips64vr5000el \ ! | mipsbe | mipseb | mipsel | mipsle | mipstx39 | mipstx39el \ ! | mipsisa32 \ ! | mn10200 | mn10300 \ ! | ns16k | ns32k \ ! | openrisc | or32 \ ! | pdp10 | pdp11 | pj | pjl \ ! | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ ! | pyramid \ ! | sh | sh[34] | sh[34]eb | shbe | shle | sh64 \ ! | sparc | sparc64 | sparclet | sparclite | sparcv9 | sparcv9b \ ! | strongarm \ ! | tahoe | thumb | tic80 | tron \ ! | v850 | v850e \ ! | we32k \ ! | x86 | xscale | xstormy16 | xtensa \ ! | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) *************** case $basic_machine in *** 266,297 **** exit 1 ;; # Recognize the basic CPU types with company name. ! # FIXME: clean up the formatting here. ! vax-* | tahoe-* | i*86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \ ! | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | c[123]* \ ! | arm-* | armbe-* | armle-* | armv*-* | strongarm-* | xscale-* \ ! | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \ ! | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \ ! | xmp-* | ymp-* \ ! | x86-* | ppcbe-* | mipsbe-* | mipsle-* | shbe-* | shle-* \ ! | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* \ ! | hppa2.0n-* | hppa64-* \ ! | alpha-* | alphaev[4-8]-* | alphaev56-* | alphapca5[67]-* \ ! | alphaev6[78]-* \ ! | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \ ! | clipper-* | orion-* \ ! | sparclite-* | pdp10-* | pdp11-* | sh-* | sh[34]-* | sh[34]eb-* \ ! | powerpc-* | powerpcle-* | sparc64-* | sparcv9-* | sparcv9b-* | sparc86x-* \ ! | mips16-* | mips64-* | mipsel-* \ ! | mips64el-* | mips64orion-* | mips64orionel-* \ ! | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \ ! | mipstx39-* | mipstx39el-* | mcore-* \ ! | xtensa-* \ ! | f30[01]-* | f700-* | s390-* | s390x-* | sv1-* | t3e-* \ ! | [cjt]90-* \ ! | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \ ! | thumb-* | v850-* | d30v-* | tic30-* | tic80-* | c30-* | fr30-* \ ! | bs2000-* | tic54x-* | c54x-* | x86_64-* | pj-* | pjl-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. --- 276,320 ---- exit 1 ;; # Recognize the basic CPU types with company name. ! 580-* \ ! | a29k-* \ ! | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ ! | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ ! | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ ! | arm-* | armbe-* | armle-* | armv*-* \ ! | avr-* \ ! | bs2000-* \ ! | c[123]* | c30-* | [cjt]90-* | c54x-* \ ! | clipper-* | cray2-* | cydra-* \ ! | d10v-* | d30v-* \ ! | elxsi-* \ ! | f30[01]-* | f700-* | fr30-* | fx80-* \ ! | h8300-* | h8500-* \ ! | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ ! | i*86-* | i860-* | i960-* | ia64-* \ ! | m32r-* \ ! | m68000-* | m680[01234]0-* | m68360-* | m683?2-* | m68k-* \ ! | m88110-* | m88k-* | mcore-* \ ! | mips-* | mips16-* | mips64-* | mips64el-* | mips64orion-* \ ! | mips64orionel-* | mips64vr4100-* | mips64vr4100el-* \ ! | mips64vr4300-* | mips64vr4300el-* | mipsbe-* | mipseb-* \ ! | mipsle-* | mipsel-* | mipstx39-* | mipstx39el-* \ ! | none-* | np1-* | ns16k-* | ns32k-* \ ! | orion-* \ ! | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ ! | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ ! | pyramid-* \ ! | romp-* | rs6000-* \ ! | sh-* | sh[34]-* | sh[34]eb-* | shbe-* | shle-* | sh64-* \ ! | sparc-* | sparc64-* | sparc86x-* | sparclite-* \ ! | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* \ ! | t3e-* | tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \ ! | v850-* | v850e-* | vax-* \ ! | we32k-* \ ! | x86-* | x86_64-* | xmp-* | xps100-* | xscale-* | xstormy16-* \ ! | xtensa-* \ ! | ymp-* \ ! | z8k-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. *************** case $basic_machine in *** 398,403 **** --- 421,434 ---- decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola *************** case $basic_machine in *** 600,605 **** --- 631,640 ---- basic_machine=m68k-rom68k os=-coff ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; msdos) basic_machine=i386-pc os=-msdos *************** case $basic_machine in *** 679,684 **** --- 714,723 ---- basic_machine=hppa1.1-oki os=-proelf ;; + or32 | or32-*) + basic_machine=or32-unknown + os=-coff + ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose *************** case $basic_machine in *** 704,710 **** pc532 | pc532-*) basic_machine=ns32k-pc532 ;; ! pentium | p5 | k5 | k6 | nexgen) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon) --- 743,749 ---- pc532 | pc532-*) basic_machine=ns32k-pc532 ;; ! pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon) *************** case $basic_machine in *** 713,719 **** pentiumii | pentium2) basic_machine=i686-pc ;; ! pentium-* | p5-* | k5-* | k6-* | nexgen-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) --- 752,758 ---- pentiumii | pentium2) basic_machine=i686-pc ;; ! pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) *************** case $basic_machine in *** 737,742 **** --- 776,791 ---- ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; ps2) basic_machine=i386-ibm ;; *************** case $basic_machine in *** 754,759 **** --- 803,814 ---- rtpc | rtpc-*) basic_machine=romp-ibm ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; sa29200) basic_machine=a29k-amd os=-udi *************** case $basic_machine in *** 765,771 **** basic_machine=sh-hitachi os=-hms ;; ! sparclite-wrs) basic_machine=sparclite-wrs os=-vxworks ;; --- 820,826 ---- basic_machine=sh-hitachi os=-hms ;; ! sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; *************** case $basic_machine in *** 845,850 **** --- 900,909 ---- tx39el) basic_machine=mipstx39el-unknown ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; tower | tower-32) basic_machine=m68k-ncr ;; *************** case $basic_machine in *** 948,956 **** we32k) basic_machine=we32k-att ;; ! sh3 | sh4) basic_machine=sh-unknown ;; sparc | sparcv9 | sparcv9b) basic_machine=sparc-sun ;; --- 1007,1018 ---- we32k) basic_machine=we32k-att ;; ! sh3 | sh4 | sh3eb | sh4eb) basic_machine=sh-unknown ;; + sh64) + basic_machine=sh64-unknown + ;; sparc | sparcv9 | sparcv9b) basic_machine=sparc-sun ;; *************** case $os in *** 1037,1043 **** | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ ! | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* | -os2*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) --- 1099,1106 ---- | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ ! | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ ! | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* | -morphos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) *************** case $os in *** 1089,1094 **** --- 1152,1160 ---- -acis*) os=-aos ;; + -atheos*) + os=-atheos + ;; -386bsd) os=-bsd ;; *************** case $basic_machine in *** 1169,1174 **** --- 1235,1241 ---- arm*-semi) os=-aout ;; + # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; *************** case $basic_machine in *** 1199,1204 **** --- 1266,1274 ---- mips*-*) os=-elf ;; + or32-*) + os=-coff + ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; *************** case $basic_machine in *** 1361,1366 **** --- 1431,1439 ---- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; + -vos*) + vendor=stratus + ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; diff -Nrc3pad gcc-3.0.4/configure gcc-3.1/configure *** gcc-3.0.4/configure Tue Oct 2 06:50:12 2001 --- gcc-3.1/configure Wed Dec 5 12:40:39 2001 *************** subdirs= *** 89,95 **** target_alias=NOTARGET target_makefile_frag= undefs=NOUNDEFS ! version="$Revision: 1.34.2.2 $" x11=default bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' --- 89,95 ---- target_alias=NOTARGET target_makefile_frag= undefs=NOUNDEFS ! version="$Revision: 1.40 $" x11=default bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' *************** else *** 1088,1093 **** --- 1088,1099 ---- GDB_TK="" fi + all_build_modules= + if test x"${build_alias}" != x"${host_alias}" + then + all_build_modules='$(ALL_BUILD_MODULES_LIST)' + fi + for subdir in . ${subdirs} ; do # ${subdir} is relative path from . to the directory we're currently *************** EOF *** 1295,1301 **** esac # real copy now in ${subdir}/Makefile.tem ! # prepend warning about editting, and a bunch of variables. rm -f ${Makefile} cat > ${Makefile} < ${Makefile} < ${subdir}/Makefile.tm2 rm -f ${subdir}/Makefile.tem mv ${subdir}/Makefile.tm2 ${subdir}/Makefile.tem fi --- 1370,1383 ---- # remove any form feeds. if [ -z "${subdirs}" ]; then rm -f ${subdir}/Makefile.tm2 ! sedtemp=sed.$$ ! cat >$sedtemp < ${subdir}/Makefile.tm2 + rm -f $sedtemp rm -f ${subdir}/Makefile.tem mv ${subdir}/Makefile.tm2 ${subdir}/Makefile.tem fi *************** EOF *** 1384,1389 **** --- 1395,1401 ---- -e "s|^oldincludedir[ ]*=.*$|oldincludedir = ${oldincludedir}|" \ -e "s|^infodir[ ]*=.*$|infodir = ${infodir}|" \ -e "s|^mandir[ ]*=.*$|mandir = ${mandir}|" \ + -e "s|^ALL_BUILD_MODULES =.*|ALL_BUILD_MODULES =${all_build_modules}|" \ -e "/^CC[ ]*=/{ :loop1 /\\\\$/ N diff -Nrc3pad gcc-3.0.4/configure.in gcc-3.1/configure.in *** gcc-3.0.4/configure.in Mon Aug 13 16:14:49 2001 --- gcc-3.1/configure.in Sun May 5 18:56:48 2002 *************** *** 15,21 **** ## for 'Autoconf' (autoconf.texi) and 'Configure' (configure.texi). # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! # 1999, 2000, 2001 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by --- 15,21 ---- ## for 'Autoconf' (autoconf.texi) and 'Configure' (configure.texi). # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! # 1999, 2000, 2001, 2002 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by *************** fi *** 50,56 **** libstdcxx_version="target-libstdc++-v3" # Don't use libstdc++-v3's flags to configure/build itself. ! libstdcxx_flags='`case $$dir in libstdc++-v3) ;; *) test ! -f $$r/$(TARGET_SUBDIR)/libstdc++-v3/testsuite_flags || $(SHELL) $$r/$(TARGET_SUBDIR)/libstdc++-v3/testsuite_flags --build-includes;; esac` -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs' # these tools are built for the host environment # Note, the powerpc-eabi build depends on sim occurring before gdb in order to --- 50,56 ---- libstdcxx_version="target-libstdc++-v3" # Don't use libstdc++-v3's flags to configure/build itself. ! libstdcxx_flags='`case $$dir in libstdc++-v3 | libjava) ;; *) test ! -f $$r/$(TARGET_SUBDIR)/libstdc++-v3/testsuite_flags || $(SHELL) $$r/$(TARGET_SUBDIR)/libstdc++-v3/testsuite_flags --build-includes;; esac` -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs' # these tools are built for the host environment # Note, the powerpc-eabi build depends on sim occurring before gdb in order to *************** if [ x${shared} = xyes ]; then *** 303,309 **** arm*-*-*) host_makefile_frag="${host_makefile_frag} config/mh-armpic" ;; ! hppa*-*-*) host_makefile_frag="${host_makefile_frag} config/mh-papic" ;; i[3456]86-*-cygwin*) --- 303,309 ---- arm*-*-*) host_makefile_frag="${host_makefile_frag} config/mh-armpic" ;; ! parisc*-*-* | hppa*-*-*) host_makefile_frag="${host_makefile_frag} config/mh-papic" ;; i[3456]86-*-cygwin*) *************** if [ ! -d ${target_subdir} ] ; then *** 444,449 **** --- 444,461 ---- fi fi + build_subdir=${build_alias} + + if [ x"${build_alias}" != x"${host}" ] ; then + if [ ! -d ${build_subdir} ] ; then + if mkdir ${build_subdir} ; then true + else + echo "'*** could not make ${PWD=`pwd`}/${build_subdir}" 1>&2 + exit 1 + fi + fi + fi + copy_dirs= # Handle --with-headers=XXX. The contents of the named directory are *************** case "${host}" in *** 571,577 **** noconfigdirs="$noconfigdirs tk itcl tix libgui gdb" ;; *-*-cygwin*) ! noconfigdirs="autoconf automake send-pr rcs guile perl texinfo apache inet" ;; *-*-netbsd*) noconfigdirs="rcs" --- 583,589 ---- noconfigdirs="$noconfigdirs tk itcl tix libgui gdb" ;; *-*-cygwin*) ! noconfigdirs="autoconf automake send-pr rcs guile perl apache inet" ;; *-*-netbsd*) noconfigdirs="rcs" *************** case "${target}" in *** 604,614 **** --- 616,647 ---- *-*-chorusos) noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}" ;; + *-*-freebsd[12] | *-*-freebsd[12].* | *-*-freebsd*aout*) + noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}" + ;; + *-*-netbsd*) + # Skip some stuff on all NetBSD configurations. + skipdirs="$skipdirs target-newlib target-libiberty target-libgloss" + + # Skip some stuff that's unsupported on some NetBSD configurations. + case "${target}" in + i*86-*-netbsdelf*) ;; + *) + noconfigdirs="$noconfigdirs ${libgcj}" + ;; + esac + ;; *-*-netware) noconfigdirs="$noconfigdirs ${libstdcxx_version} target-librx target-newlib target-libiberty target-libgloss ${libgcj}" ;; *-*-rtems*) noconfigdirs="$noconfigdirs target-libgloss ${libgcj}" + case ${target} in + h8300*-*-* | h8500-*-*) + noconfigdirs="$noconfigdirs target-libf2c" + ;; + *) ;; + esac ;; *-*-vxworks*) noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}" *************** case "${target}" in *** 617,623 **** # ld works, but does not support shared libraries. emacs doesn't # work. newlib is not 64 bit ready. I'm not sure about fileutils. # gas doesn't generate exception information. ! noconfigdirs="$noconfigdirs gas ld emacs fileutils target-newlib target-libgloss ${libgcj}" ;; alpha*-*-*vms*) noconfigdirs="$noconfigdirs gdb ld target-newlib target-libgloss ${libgcj}" --- 650,656 ---- # ld works, but does not support shared libraries. emacs doesn't # work. newlib is not 64 bit ready. I'm not sure about fileutils. # gas doesn't generate exception information. ! noconfigdirs="$noconfigdirs gas ld emacs fileutils target-newlib target-libgloss" ;; alpha*-*-*vms*) noconfigdirs="$noconfigdirs gdb ld target-newlib target-libgloss ${libgcj}" *************** case "${target}" in *** 628,637 **** --- 661,678 ---- # linux has rx in libc skipdirs="$skipdirs target-librx" ;; + alpha*-*-freebsd*) + noconfigdirs="$noconfigdirs target-newlib target-libgloss" + ;; alpha*-*-*) # newlib is not 64 bit ready noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}" ;; + sh-*-linux*) + noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss" + # linux has rx in libc + skipdirs="$skipdirs target-librx" + ;; sh*-*-pe|mips*-*-pe|*arm-wince-pe) noconfigdirs="$noconfigdirs ${libgcj}" noconfigdirs="$noconfigdirs target-examples" *************** case "${target}" in *** 696,702 **** fi ;; xscale-*-elf) ! noconfigdirs="$noconfigdirs target-libgloss ${libgcj}" if [ x${is_cross_compiler} != xno ] ; then target_configdirs="${target_configdirs} target-bsp target-cygmon" fi --- 737,743 ---- fi ;; xscale-*-elf) ! noconfigdirs="$noconfigdirs target-libgloss target-libffi target-qthreads" if [ x${is_cross_compiler} != xno ] ; then target_configdirs="${target_configdirs} target-bsp target-cygmon" fi *************** case "${target}" in *** 713,718 **** --- 754,762 ---- arm-*-riscix*) noconfigdirs="$noconfigdirs ld target-libgloss ${libgcj}" ;; + cris-*-*) + noconfigdirs="$noconfigdirs ${libgcj}" + ;; d10v-*-*) noconfigdirs="$noconfigdirs target-librx ${libstdcxx_version} target-libgloss ${libgcj}" ;; *************** case "${target}" in *** 727,736 **** ;; h8300*-*-* | \ h8500-*-*) ! noconfigdirs="$noconfigdirs ${libstdcxx_version} target-librx target-libgloss ${libgcj}" ;; hppa*-*-*elf* | \ ! hppa*-*-linux* | \ hppa*-*-lites* | \ hppa*64*-*-*) noconfigdirs="$noconfigdirs ${libgcj}" --- 771,786 ---- ;; h8300*-*-* | \ h8500-*-*) ! noconfigdirs="$noconfigdirs ${libstdcxx_version} target-librx target-libgloss ${libgcj} target-libf2c" ! ;; ! hppa*64*-*-linux* | parisc*64*-*-linux*) ! # In this case, it's because the hppa64-linux target is for ! # the kernel only at this point and has no libc, and thus no ! # headers, crt*.o, etc., all of which are needed by these. ! noconfigdirs="$noconfigdirs target-zlib" ;; hppa*-*-*elf* | \ ! parisc*-*-linux* | hppa*-*-linux* | \ hppa*-*-lites* | \ hppa*64*-*-*) noconfigdirs="$noconfigdirs ${libgcj}" *************** case "${target}" in *** 758,770 **** target_configdirs="${target_configdirs} target-libstub target-cygmon" fi ;; s390*-*-linux*) # linux has rx in libc skipdirs="$skipdirs target-librx" - # The libffi port is not yet in the GCC tree, boehm-gc does not work. - noconfigdirs="$noconfigdirs ${libgcj}" ;; *-*-linux*) # linux has rx in libc skipdirs="$skipdirs target-librx" ;; --- 808,824 ---- target_configdirs="${target_configdirs} target-libstub target-cygmon" fi ;; + i[34567]86-*-freebsd*) + noconfigdirs="$noconfigdirs target-newlib target-libgloss" + ;; s390*-*-linux*) + # The libffi port is not yet in the GCC tree + noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}" # linux has rx in libc skipdirs="$skipdirs target-librx" ;; *-*-linux*) + noconfigdirs="$noconfigdirs target-newlib target-libgloss" # linux has rx in libc skipdirs="$skipdirs target-librx" ;; *************** case "${target}" in *** 833,838 **** --- 887,900 ---- target_configdirs="${target_configdirs} target-bsp target-cygmon" fi ;; + mcore-*-pe*) + # The EPOC C++ environment does not support exceptions or rtti, + # and so building libstdc++-v3 tends not to always work. + noconfigdirs="$noconfigdirs target-libstdc++-v3" + ;; + mmix-*-*) + noconfigdirs="$noconfigdirs ${libgcj}" + ;; mn10200-*-*) noconfigdirs="$noconfigdirs ${libgcj}" if [ x${is_cross_compiler} != xno ] ; then *************** case "${target}" in *** 915,920 **** --- 977,985 ---- noconfigdirs="$noconfigdirs gprof ${libgcj}" # same as generic mips target_configdirs="${target_configdirs} target-bsp target-libstub target-cygmon" ;; + mips*-*-linux*) + noconfigdirs="$noconfigdirs target-libffi" + ;; mips*-*-*) noconfigdirs="$noconfigdirs gprof ${libgcj}" ;; *************** case "${target}" in *** 930,944 **** --- 995,1014 ---- esac noconfigdirs="$noconfigdirs target-libgloss ${libgcj}" ;; + sh64-*-*) + noconfigdirs="$noconfigdirs target-libgloss ${libgcj}" + ;; sparc-*-elf*) if [ x${is_cross_compiler} != xno ] ; then target_configdirs="${target_configdirs} target-libstub target-cygmon" fi + noconfigdirs="$noconfigdirs ${libgcj}" ;; sparc64-*-elf*) if [ x${is_cross_compiler} != xno ] ; then target_configdirs="${target_configdirs} target-libstub target-cygmon" fi + noconfigdirs="$noconfigdirs ${libgcj}" ;; sparclite-*-*) if [ x${is_cross_compiler} != xno ] ; then *************** case "${target}" in *** 954,969 **** use_gnu_ld=no fi ;; ! sparc-*-solaris*) ! case "${host}" in ! sparc-*-solaris2.8) ! # According to Gerald Pfeifer , libjava ! # won't build correctly on Solaris 8 if there's a ! # previously-installed version of GCC in the configured prefix. ! # This problem does not show up on earlier versions of Solaris. ! noconfigdirs="$noconfigdirs ${libgcj}" ! ;; ! esac ;; v810-*-*) noconfigdirs="$noconfigdirs bfd binutils gas gcc gdb ld ${libstdcxx_version} opcodes target-libgloss ${libgcj}" --- 1024,1030 ---- use_gnu_ld=no fi ;; ! sparc-*-solaris* | sparc64-*-solaris* | sparcv9-*-solaris*) ;; v810-*-*) noconfigdirs="$noconfigdirs bfd binutils gas gcc gdb ld ${libstdcxx_version} opcodes target-libgloss ${libgcj}" *************** fi *** 1020,1037 **** # Look if the user specified --enable-languages="..."; if not, use # the environment variable $LANGUAGES if defined. $LANGUAGES might # go away some day. if test x"${enable_languages+set}" != xset; then if test x"${LANGUAGES+set}" = xset; then ! enable_languages="`echo ${LANGUAGES} | tr ' ' ','`" else enable_languages=all fi else ! if test x"${enable_languages}" = x; then ! echo configure.in: --enable-languages needs at least one argument 1>&2 exit 1 fi fi # First scan to see if an enabled language requires some other language. # We assume that a given config-lang.in will list all the language --- 1081,1103 ---- # Look if the user specified --enable-languages="..."; if not, use # the environment variable $LANGUAGES if defined. $LANGUAGES might # go away some day. + # NB: embedded tabs in this IF block -- do not untabify if test x"${enable_languages+set}" != xset; then if test x"${LANGUAGES+set}" = xset; then ! enable_languages="${LANGUAGES}" ! echo configure.in: warning: setting LANGUAGES is deprecated, use --enable-languages instead 1>&2 else enable_languages=all fi else ! if test x"${enable_languages}" = x || ! test x"${enable_languages}" = xyes; ! then ! echo configure.in: --enable-languages needs at least one language argument 1>&2 exit 1 fi fi + enable_languages=`echo "${enable_languages}" | sed -e 's/[ ,][ ,]*/,/g' -e 's/,$//'` # First scan to see if an enabled language requires some other language. # We assume that a given config-lang.in will list all the language *************** fi *** 1232,1238 **** if [ x${shared} = xyes ]; then case "${target}" in ! hppa*) target_makefile_frag="${target_makefile_frag} config/mt-papic" ;; i[3456]86-*) --- 1298,1304 ---- if [ x${shared} = xyes ]; then case "${target}" in ! hppa* | parisc*) target_makefile_frag="${target_makefile_frag} config/mt-papic" ;; i[3456]86-*) *************** rm -f conftest* *** 1289,1295 **** case "${host}" in sparc-sun-solaris2*) CCBASE="`echo ${CC-cc} | sed 's/ .*$//'`" ! if [ "`/usr/bin/which $CCBASE`" = "/usr/ucb/cc" ] ; then could_use= [ -d /opt/SUNWspro/bin ] && could_use="/opt/SUNWspro/bin" if [ -d /opt/cygnus/bin ] ; then --- 1355,1361 ---- case "${host}" in sparc-sun-solaris2*) CCBASE="`echo ${CC-cc} | sed 's/ .*$//'`" ! if [ "`type $CCBASE | sed 's/^[^/]*//'`" = "/usr/ucb/cc" ] ; then could_use= [ -d /opt/SUNWspro/bin ] && could_use="/opt/SUNWspro/bin" if [ -d /opt/cygnus/bin ] ; then *************** if [ "${shared}" = "yes" ]; then *** 1331,1337 **** esac fi ! # Record target_configdirs and the configure arguments in Makefile. target_configdirs=`echo "${target_configdirs}" | sed -e 's/target-//g'` targargs=`echo "${arguments}" | \ sed -e 's/--no[^ ]*//' \ --- 1397,1404 ---- esac fi ! # Record target_configdirs and the configure arguments for target and ! # build configuration in Makefile. target_configdirs=`echo "${target_configdirs}" | sed -e 's/target-//g'` targargs=`echo "${arguments}" | \ sed -e 's/--no[^ ]*//' \ *************** targargs=`echo "${arguments}" | \ *** 1340,1345 **** --- 1407,1417 ---- -e 's/--bu[a-z-]*=[^ ]*//' \ -e 's/--ta[a-z-]*=[^ ]*//'` + # For the build-side libraries, we just need to pretend we're native, + # and not use the same cache file. Multilibs are neither needed nor + # desired. + buildargs="--cache-file=../config.cache --build=${build_alias} --host=${build_alias} ${targargs}" + # Passing a --with-cross-host argument lets the target libraries know # whether they are being built with a cross-compiler or being built # native. However, it would be better to use other mechanisms to make the *************** if [ x${with_newlib} != xno ] && echo " *** 1360,1365 **** --- 1432,1440 ---- targargs="--with-newlib ${targargs}" fi + # Pass the appropriate --host, --build, and --cache-file arguments. + targargs="--cache-file=../config.cache --host=${target_alias} --build=${build_alias} ${targargs}" + # provide a proper gxx_include_dir. # Note, if you change the default, make sure to fix both here and in # the gcc and libstdc++-v3 subdirectories. *************** case $CC_FOR_TARGET in *** 1468,1487 **** *) CC_FOR_TARGET=$CC_FOR_TARGET' $(FLAGS_FOR_TARGET)' ;; esac - if test "x${CHILL_FOR_TARGET+set}" = xset; then - : - elif test -d ${topsrcdir}/gcc; then - CHILL_FOR_TARGET='$$r/gcc/xgcc -B$$r/gcc/ -L$$r/gcc/ch/runtime/' - elif test "$host" = "$target"; then - CHILL_FOR_TARGET='$(CC)' - else - CHILL_FOR_TARGET=`echo gcc | sed -e 's/x/x/' ${program_transform_name}` - fi - case $CHILL_FOR_TARGET in - *' $(FLAGS_FOR_TARGET)') ;; - *) CHILL_FOR_TARGET=$CHILL_FOR_TARGET' $(FLAGS_FOR_TARGET)' ;; - esac - if test "x${GCJ_FOR_TARGET+set}" = xset; then : elif test -d ${topsrcdir}/gcc; then --- 1543,1548 ---- *************** elif test "$host" = "$target"; then *** 1491,1501 **** else GCJ_FOR_TARGET=`echo gcj | sed -e 's/x/x/' ${program_transform_name}` fi if test "x${CXX_FOR_TARGET+set}" = xset; then : elif test -d ${topsrcdir}/gcc; then ! CXX_FOR_TARGET='$$r/gcc/`case $$dir in libstdc++-v3) echo xgcc ;; *) echo g++ ;; esac` -B$$r/gcc/ -nostdinc++ '$libstdcxx_flags elif test "$host" = "$target"; then CXX_FOR_TARGET='$(CXX)' else --- 1552,1569 ---- else GCJ_FOR_TARGET=`echo gcj | sed -e 's/x/x/' ${program_transform_name}` fi + case $GCJ_FOR_TARGET in + *' $(FLAGS_FOR_TARGET)') ;; + *) GCJ_FOR_TARGET=$GCJ_FOR_TARGET' $(FLAGS_FOR_TARGET)' ;; + esac if test "x${CXX_FOR_TARGET+set}" = xset; then : elif test -d ${topsrcdir}/gcc; then ! # We add -shared-libgcc to CXX_FOR_TARGET whenever we use xgcc instead ! # of g++ for linking C++ or Java, because g++ has -shared-libgcc by ! # default whereas gcc does not. ! CXX_FOR_TARGET='$$r/gcc/`case $$dir in libstdc++-v3 | libjava) echo xgcc -shared-libgcc ;; *) echo g++ ;; esac` -B$$r/gcc/ -nostdinc++ '$libstdcxx_flags elif test "$host" = "$target"; then CXX_FOR_TARGET='$(CXX)' else *************** qCXX_FOR_TARGET=`echo "$CXX_FOR_TARGET" *** 1515,1533 **** # macros. qqCXX_FOR_TARGET=`echo "$qCXX_FOR_TARGET" | sed -e 's,[$][$],$$$$,g'` ! targargs="--cache-file=../config.cache --host=${target_alias} --build=${build_alias} ${targargs}" ! sed -e "s:^TARGET_CONFIGDIRS[ ]*=.*$:TARGET_CONFIGDIRS = ${target_configdirs}:" \ ! -e "s%^CONFIG_ARGUMENTS[ ]*=.*$%CONFIG_ARGUMENTS = ${targargs}%" \ ! -e "s%^FLAGS_FOR_TARGET[ ]*=.*$%FLAGS_FOR_TARGET = ${FLAGS_FOR_TARGET}%" \ ! -e "s%^CC_FOR_TARGET[ ]*=.*$%CC_FOR_TARGET = ${CC_FOR_TARGET}%" \ ! -e "s%^CHILL_FOR_TARGET[ ]*=.*$%CHILL_FOR_TARGET = ${CHILL_FOR_TARGET}%" \ ! -e "s%^GCJ_FOR_TARGET[ ]*=.*$%GCJ_FOR_TARGET = ${GCJ_FOR_TARGET}%" \ ! -e "s%^CXX_FOR_TARGET[ ]*=.*$%CXX_FOR_TARGET = ${qCXX_FOR_TARGET}%" \ ! -e "s%^CXX_FOR_TARGET_FOR_RECURSIVE_MAKE[ ]*=.*$%CXX_FOR_TARGET_FOR_RECURSIVE_MAKE = ${qqCXX_FOR_TARGET}%" \ ! -e "s%^TARGET_SUBDIR[ ]*=.*$%TARGET_SUBDIR = ${target_subdir}%" \ ! -e "s%^gxx_include_dir[ ]*=.*$%gxx_include_dir=${gxx_include_dir}%" \ ! Makefile > Makefile.tem ! rm -f Makefile mv -f Makefile.tem Makefile # --- 1583,1604 ---- # macros. qqCXX_FOR_TARGET=`echo "$qCXX_FOR_TARGET" | sed -e 's,[$][$],$$$$,g'` ! sedtemp=sed.$$ ! cat >$sedtemp < Makefile.tem ! rm -f Makefile $sedtemp mv -f Makefile.tem Makefile # diff -Nrc3pad gcc-3.0.4/contrib/ChangeLog gcc-3.1/contrib/ChangeLog *** gcc-3.0.4/contrib/ChangeLog Wed Feb 20 18:38:46 2002 --- gcc-3.1/contrib/ChangeLog Wed May 15 02:15:14 2002 *************** *** 1,14 **** ! 2002-02-20 Release Manager ! * GCC 3.0.4 Released. ! 2002-02-20 Release Manager ! * GCC 3.0.4 Released. ! 2002-02-03 Franz Sirl ! * PR3145.patch: Update. 2002-01-26 Gerald Pfeifer --- 1,24 ---- ! 2002-05-14 Release Manager ! * GCC 3.1 Released. ! 2002-05-14 Release Manager ! * GCC 3.1 Released. ! 2002-04-03 Zack Weinberg ! * texi2pod.pl: Handle @end ftable and @end vtable. ! ! 2002-03-12 Zack Weinberg ! ! * texi2pod.pl: Handle @include, @ftable, @vtable. ! Reformat some code for clarity. ! ! 2002-02-24 Christian Jönsson ! ! * test_summary: Additional to XPASS and FAIL, add UNRESOLVED, ! WARNING and ERROR output from the *.sum files. 2002-01-26 Gerald Pfeifer *************** *** 22,42 **** egcs-1.1/egcs-1.1.1.html, and egcs-1.1/egcs-1.1.html by egcs-1.1/index.html. ! 2001-12-20 Release Manager ! ! * GCC 3.0.3 Released. ! ! 2001-12-10 Franz Sirl ! ! * PR3145.patch: Update. ! ! 2001-12-01 Franz Sirl ! * PR3145.patch: Backported bugfix. ! 2001-11-18 Joseph S. Myers ! * gcc_update (files_and_dependencies): Add the new *.7 man pages. 2001-11-14 Joseph S. Myers --- 32,50 ---- egcs-1.1/egcs-1.1.1.html, and egcs-1.1/egcs-1.1.html by egcs-1.1/index.html. ! 2002-01-01 Kaveh R. Ghazi ! * warn_summary: Add -ada subdirectory flag. ! 2001-12-12 Matthias Klose ! * texi2pod.pl: Merge changes from binutils' texi2pod.pl. Allows ! generation of more than one man page from one source. ! Add '-' to set of valid chars for an identifier. ! Let -D option accept flags of the form =. ! Use \s+ for whitespace detection in '@c man' lines. ! Handle @set and @clear independent of $output. ! Substitute all @value{}'s in a line. 2001-11-14 Joseph S. Myers *************** *** 45,161 **** and @center. Allow [a-z] after @enumerate. Handle 0 and numbers greater than 9 in enumerations. ! 2001-10-23 Release Manager ! * GCC 3.0.2 Released. ! 2001-08-24 Mark Mitchell ! * gcc_release: Correct quoting. ! 2001-08-19 Release Manager ! * GCC 3.0.1 Released. ! 2001-08-19 Release Manager ! * GCC 3.0.1 Released. ! 2001-08-13 Mark Mitchell ! * gcc_release: Remove restriction against minor revisions. ! 2001-07-28 Richard Henderson ! * test_summary: Copy LAST_UPDATED UTC time to head of summary. ! * gcc_update: Dump timestamp in LAST_UPDATED. ! 2001-07-03 Joseph S. Myers ! * texi2pod.pl: Handle @r inside @item. ! 2001-06-21 Joseph S. Myers ! * gcc_release: Add another space to ChangeLog headers. Use tab to ! indent ChangeLog message. Update release status in Fortran ! version files. ! 2001-06-18 Mark Mitchell ! * gcc_release (build_sources): Fix dates generated ! for ChangeLogs. ! * gcc_release: Add support for modifying ChangeLogs and ! updating versions. ! 20010617 Release Manager ! * GCC 3.0 Released. ! 2001-06-14 Albert Chin-A-Young ! * contrib/gcc_update: Fix timestamp on gcc/f/intdoc.texi. ! 2001-06-14 Mark Mitchell ! Gerald Pfeifer ! * gcc_release (build_sources): Generate more files from ! web documents. ! (CVS): Use compression everywhere. ! 2001-06-14 Gerald Pfeifer ! * gcc_release (build_sources): Obtain some documentation files ! from the wwwdocs module. 2001-06-13 Mark Mitchell - * gcc_release (-b): Remove option. - (build_sources): Generate NEWS files. - (build_tarfiles): Set permissions on directories and files. - Always generate BZIP2 files. * gennews: Set TERM to vt100 for Lynx. 2001-06-13 Gerald Pfeifer ! * gcc_release (build_sources): Generate documentation in HTML from ! gcc/doc/install.texi. ! 2001-06-13 Gerald Pfeifer ! * release: Remove. 2001-06-11 Mark Mitchell ! * gcc_build: Output information about the commands used to configure the compiler. - 2001-06-09 Joseph S. Myers - - * gcc_update: Update for move of documentation to gcc/doc. - 2001-06-07 Joseph S. Myers * gennews: Update for GCC 3.0. ! 2001-06-07 Nathan Sidwell ! ! * gcc_release: Tweaks for solaris /bin/sh. ! ! 2001-06-02 Gerald Pfeifer ! * gcc_release: Fail for unknown modes instead of ignoring them. 2001-05-28 Rainer Orth * contrib/test_summary (files): Sort before evaluating. ! 2001-05-27 Joseph S. Myers ! * gcc_release: Support creating diffs. Support creating .bz2 ! files. Support creating CVS tags. Support creating snapshots ! without generated files. Move generated .gmo files to the source ! directory. Update comments. Fix typos. 2001-05-21 Mark Mitchell --- 53,164 ---- and @center. Allow [a-z] after @enumerate. Handle 0 and numbers greater than 9 in enumerations. ! 2001-11-07 Laurent Guerby ! * gcc_update (files_and_dependencies): Add Ada dependencies. ! 2001-10-08 Joseph S. Myers ! * snapshot: Remove. ! 2001-09-07 Richard Sandiford ! Revert: ! * gcc_update: (files_and_dependencies) Add gcc/java/parse.c ! gcc/java/parse-scan.c and gcc/java/keyword.h to list of files to ! touch. ! 2001-09-04 David.Billinghurst ! * gcc_update: (files_and_dependencies) Add gcc/java/parse.c ! gcc/java/parse-scan.c and gcc/java/keyword.h to list of files to ! touch. ! Mon Aug 13 02:29:08 CEST 2001 Jan Hubicka ! * analyze_brprob: Update for changes in gcc debug output. ! Sat Jul 28 22:37:49 CEST 2001 Jan Hubicka ! * analyze_brprob: Avoid more overflows. ! 2001-07-27 Richard Henderson ! * test_summary: Copy LAST_UPDATED UTC time to head of summary. ! Fri Jul 27 18:01:21 CEST 2001 Jan Hubicka ! * analyze_brprob: Avoid overflows. ! 2001-07-27 Richard Henderson ! * gcc_update: Dump timestamp in LAST_UPDATED. ! 2001-07-26 Andreas Jaeger , ! Hans-Peter Nilsson ! * analyze_brprob: Fix documentation. ! Mon Jul 23 15:47:19 CEST 2001 Jan Hubicka ! * analyze_brprob: Fix awk compatibility problems; update comment. ! 2001-07-23 Andreas Jaeger ! * analyze_brprob: Fix more typos. ! 2001-07-23 Andreas Jaeger ! * analyze_brprob: Fix typos. ! 2001-07-03 Joseph S. Myers ! ! * texi2pod.pl: Handle @r inside @item. ! ! 2001-07-02 Zack Weinberg ! ! * gcc_update: Remove entries for gcc.1, cpp.1, gcov.1. ! ! 2001-07-01 Zoltan Felleg ! ! * warn_summary: Fix typo in a comment. ! ! 2001-06-14 Albert Chin-A-Young ! ! * contrib/gcc_update: Fix timestamp on gcc/f/intdoc.texi. 2001-06-13 Mark Mitchell * gennews: Set TERM to vt100 for Lynx. 2001-06-13 Gerald Pfeifer ! * release: Remove. ! Tue Jun 12 12:21:40 CEST 2001 Jan Hubicka ! * analyze_brprob: New file. 2001-06-11 Mark Mitchell ! * gcc_build: Output information about the commands used to configure the compiler. 2001-06-07 Joseph S. Myers * gennews: Update for GCC 3.0. ! 2001-06-02 Joseph S. Myers ! * gcc_update: Update for move of documentation to gcc/doc. 2001-05-28 Rainer Orth * contrib/test_summary (files): Sort before evaluating. ! 2001-05-23 Gerald Pfeifer ! * gcc_update (UPDATE_OPTIONS): Add -d to the default settings. 2001-05-21 Mark Mitchell diff -Nrc3pad gcc-3.0.4/contrib/PR3145.patch gcc-3.1/contrib/PR3145.patch *** gcc-3.0.4/contrib/PR3145.patch Sun Feb 3 18:10:13 2002 --- gcc-3.1/contrib/PR3145.patch Thu Jan 1 00:00:00 1970 *************** *** 1,3806 **** - - This patch is a quick backport of Nathan Sidwell's patch to fix PR c++/3145, - the infamous "virtual inheritance" bug. This affected especially KDE2 - (eg. artsd). - - Apply in the in GCC's toplevel source dir with: - - patch -p0 - - - - 2001-12-04 Jason Merrill - - * init.c (resolve_offset_ref): Don't check access for the base - conversion to access a FIELD_DECL. - - 2001-11-22 Nathan Sidwell - - PR g++/3145 - * class.c (build_vbase_pointer): Remove. - (build_vbase_path): Remove. - (build_base_path): New function. - * cp-tree.h (base_access, base_kind): New enumerations. - (build_base_path): Declare. - (convert_pointer_to_real): Remove. - (convert_pointer_to): Remove. - (lookup_base): Declare. - (convert_pointer_to_vbase): Remove. - * call.c (build_scoped_method_call): Use lookup_base & - build_base_path instead of convert_pointer_to_real, - get_base_distance & get_binfo. - (build_over_call): Likewise. - * cvt.c (cp_convert_to_pointer): Likewise. - (convert_to_pointer_force): Likewise. - (build_up_reference): Likewise. - (convert_pointer_to_real): Remove. - (convert_pointer_to): Remove. - * init.c (dfs_initialize_vtbl_ptrs): Use build_base_path - instead of convert_pointer_to_vbase & build_vbase_path. - (emit_base_init): Use build_base_path instead of - convert_pointer_to_real. - (expand_virtual_init): Lose unrequired conversions. - (resolve_offset_ref): Use lookup_base and build_base_path - instead of convert_pointer_to. - *rtti.c (build_dynamic_cast_1): Use lookup_base & - build_base_path instead of get_base_distance & build_vbase_path. - *search.c (get_vbase_1): Remove. - (get_vbase): Remove. - (convert_pointer_to_vbase): Remove. - (lookup_base_recursive): New function. - (lookup_base): New function. - * typeck.c (require_complete_type): Use lookup_base & - build_base_path instead of convert_pointer_to. - (build_component_ref): Likewise. - (build_x_function_call): Likewise. - (get_member_function_from_ptrfunc): Likewise. - (build_component_addr): Likewise. - * typeck2.c (build_scoped_ref): Likewise. - - 2001-07-31 Nathan Sidwell - - The 3.0 ABI no longer has vbase pointer fields. - * cp-tree.h (VBASE_NAME, VBASE_NAME_FORMAT, VBASE_NAME_P, - FORMAT_VBASE_NAME): Remove. - * method.c (do_build_copy_constructor): Adjust. - (do_build_assign_ref): Adjust. - * search.c (lookup_field_r): Adjust. - * typeck.c (build_component_ref): Adjust. - - The 3.0 ABI always has a vtable pointer at the start of every - polymorphic class. - * rtti.c (build_headof_sub): Remove. - (build_headof): Adjust. - (get_tinfo_decl_dynamic): No need to check flag_rtti - here. Adjust. - (create_real_tinfo_var): Explain why we need a hidden name. - - 2001-07-20 Nathan Sidwell - - Remove flag_vtable_thunk. It is always on for the 3.0 ABI. - * cp-tree.h (CPTI_DELTA2_IDENTIFIER): Remove. - (CPTI_INDEX_IDENTIFIER): Remove. - (CPT_PFN_OR_DELTA2_IDENTIFIER): Remove. - (delta2_identifier): Remove. - (index_identifier): Remove. - (pfn_or_delta2_identifier): Remove. - (flag_vtable_thunks): Remove. - (VTABLE_DELTA2_NAME): Remove. - (VTABLE_INDEX_NAME): Remove. - (FNADDR_FROM_VTABLE_ENTRY): Adjust. - (vfunc_ptr_type_node): Adjust. - (VTABLE_NAME_PREFIX): Adjust. - (build_vfn_ref): Lose first parameter. - (fixup_all_virtual_upcast_offsets): Remove. - * decl.c (initialize_predefined_identifiers): Remove - delta2_identifier, index_identifier, pfn_or_delta2_identifier. - (init_decl_processing): Remove no-vtable-thunk code. - * decl2.c (flag_vtable_thunks): Remove. - (mark_vtable_entries): Remove no-vtable-thunk code. - * error.c (dump_decl): Remove no-vtable-thunk code. - (dump_expr): Adjust ptr to member function code. - * init.c (initialize_vtable_ptrs): Remove no-vtable-thunk - code. - * rtti.c (build_headof): Remove no-vtable-thunk code. - (get_tinfo_decl_dynamic): Adjust build_vfn_ref call. - * search.c (get_base_distance): Remove expand_upcast_fixups case. - (virtual_context) Remove. - (expand_upcast_fixups): Remove. - (fixup_virtual_upcast_offsets): Remove. - (fixup_all_virtual_upcast_offsets): Remove. - * typeck.c (get_member_function_from_ptrfunc): Remove - no-vtable-thunk code. - * call.c (build_over_call): Adjust call to build_vfn_ref. - * class.c (build_vfn_ref): Lose first parameter. Remove - no-vtable-thunk code. - (build_rtti_vtbl_entries): Remove no-vtable-thunk code. - (build_vtable_entry): Remove no-vtable-thunk code. - - 2001-07-20 Nathan Sidwell - - Remove old-abi remnants. Remove comments about old abi - behaviour. Remove refences to 'new-abi' in comments. - * cp-tree.h: Adjust comments. - (vbase_offsets_in_vtable_p): Delete. - (vcall_offsets_in_vtable_p): Delete. - (vptrs_present_everywhere_p): Delete. - (all_overridden_vfuns_in_vtables_p): Delete. - (merge_primary_and_secondary_vtables_p): Delete. - (TYPE_CONTAINS_VPTR_P): Adjust. - (VTT_NAME_PREFIX): Remove. - (CTOR_VTBL_NAME_PREFIX): Remove. - (init_vbase_pointers): Remove. - * class.c: Adjust coments. - (build_vbase_pointer_fields): Delete. - (build_vbase_pointer): Remove old-abi code. - (build_secondary_vtable): Likewise. - (modify_all_vtables): Likewise. - (create_vtable_ptr): Likewise. - (layout_class_type): Likewise. - (finish_struct_1): Likewise. - (finish_vtbls): Likewise. - (dfs_finish_vtbls): Delete. - (build_vbase_offset_vtbl_entries): Remove old-abi code. - * cvt.c: Adjust comments. - * decl.c: Adjust comments. - * decl2.c: Adjust comments. - * init.c: Adjust comments. - (construct_virtual_bases): Remove old-abi code. - * lang-specs.h: Remove -fno-new-abi. - * mangle.c: Adjust comments. - * rtti.c: Adjust comments. - (get_base_offset): Remove old-abi-code. - * search.c: Adjust comments. - (dfs_init_vbase_pointers): Remove. - (dfs_vtable_path_unmark): Remove. - (init_vbase_pointers): Remove. - * semantics.c: Adjust comments. - (emit_associated_thunks): Remove old-abi code. - * typeck.c: Adjust comments. - - Index: gcc/cp/call.c - =================================================================== - RCS file: /cvs/gcc/gcc/gcc/cp/call.c,v - retrieving revision 1.255.2.20 - diff -u -p -r1.255.2.20 call.c - --- gcc/cp/call.c 2001/11/29 20:16:18 1.255.2.20 - +++ gcc/cp/call.c 2002/02/01 22:44:17 - @@ -288,7 +288,7 @@ build_scoped_method_call (exp, basetype, - - if (! binfo) - { - - binfo = get_binfo (basetype, type, 1); - + binfo = lookup_base (type, basetype, ba_check, NULL); - if (binfo == error_mark_node) - return error_mark_node; - if (! binfo) - @@ -298,9 +298,12 @@ build_scoped_method_call (exp, basetype, - if (binfo) - { - if (TREE_CODE (exp) == INDIRECT_REF) - - decl = build_indirect_ref - - (convert_pointer_to_real - - (binfo, build_unary_op (ADDR_EXPR, exp, 0)), NULL_PTR); - + { - + decl = build_base_path (PLUS_EXPR, - + build_unary_op (ADDR_EXPR, exp, 0), - + binfo, 1); - + decl = build_indirect_ref (decl, NULL); - + } - else - decl = build_scoped_ref (exp, basetype); - - @@ -4126,7 +4129,9 @@ build_over_call (cand, args, flags) - So we can assume that anything passed as 'this' is non-null, and - optimize accordingly. */ - my_friendly_assert (TREE_CODE (parmtype) == POINTER_TYPE, 19990811); - - t = convert_pointer_to_real (TREE_TYPE (parmtype), TREE_VALUE (arg)); - + t = lookup_base (TREE_TYPE (TREE_TYPE (TREE_VALUE (arg))), - + TREE_TYPE (parmtype), ba_ignore, NULL); - + t = build_base_path (PLUS_EXPR, TREE_VALUE (arg), t, 1); - converted_args = tree_cons (NULL_TREE, t, converted_args); - parm = TREE_CHAIN (parm); - arg = TREE_CHAIN (arg); - @@ -4300,16 +4305,19 @@ build_over_call (cand, args, flags) - if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0) - { - tree t, *p = &TREE_VALUE (converted_args); - - tree binfo = get_binfo - - (DECL_VIRTUAL_CONTEXT (fn), TREE_TYPE (TREE_TYPE (*p)), 0); - - *p = convert_pointer_to_real (binfo, *p); - + tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (*p)), - + DECL_VIRTUAL_CONTEXT (fn), - + ba_any, NULL); - + my_friendly_assert (binfo && binfo != error_mark_node, 20010730); - + - + *p = build_base_path (PLUS_EXPR, *p, binfo, 1); - if (TREE_SIDE_EFFECTS (*p)) - *p = save_expr (*p); - t = build_pointer_type (TREE_TYPE (fn)); - if (DECL_CONTEXT (fn) && TYPE_JAVA_INTERFACE (DECL_CONTEXT (fn))) - fn = build_java_interface_fn_ref (fn, *p); - else - - fn = build_vfn_ref (p, build_indirect_ref (*p, 0), DECL_VINDEX (fn)); - + fn = build_vfn_ref (build_indirect_ref (*p, 0), DECL_VINDEX (fn)); - TREE_TYPE (fn) = t; - } - else if (DECL_INLINE (fn)) - Index: gcc/cp/class.c - =================================================================== - RCS file: /cvs/gcc/gcc/gcc/cp/class.c,v - retrieving revision 1.358.2.40 - diff -u -p -r1.358.2.40 class.c - --- gcc/cp/class.c 2002/01/03 11:39:44 1.358.2.40 - +++ gcc/cp/class.c 2002/02/01 22:44:24 - @@ -106,13 +106,11 @@ varray_type local_classes; - - static tree get_vfield_name PARAMS ((tree)); - static void finish_struct_anon PARAMS ((tree)); - -static tree build_vbase_pointer PARAMS ((tree, tree)); - static tree build_vtable_entry PARAMS ((tree, tree, tree)); - static tree get_vtable_name PARAMS ((tree)); - static tree get_basefndecls PARAMS ((tree, tree)); - static int build_primary_vtable PARAMS ((tree, tree)); - static int build_secondary_vtable PARAMS ((tree, tree)); - -static tree dfs_finish_vtbls PARAMS ((tree, void *)); - static void finish_vtbls PARAMS ((tree)); - static void modify_vtable_entry PARAMS ((tree, tree, tree, tree, tree *)); - static void add_virtual_function PARAMS ((tree *, tree *, int *, tree, tree)); - @@ -146,7 +144,6 @@ static bool build_base_field PARAMS ((re - splay_tree, tree)); - static bool build_base_fields PARAMS ((record_layout_info, int *, - splay_tree, tree)); - -static tree build_vbase_pointer_fields PARAMS ((record_layout_info, int *)); - static tree build_vtbl_or_vbase_field PARAMS ((tree, tree, tree, tree, tree, - int *)); - static void check_methods PARAMS ((tree)); - @@ -237,277 +234,122 @@ int n_build_method_call = 0; - int n_inner_fields_searched = 0; - #endif - - -/* Virtual base class layout. */ - +/* Convert to or from a base subobject. EXPR is an expression of type - + `A' or `A*', an expression of type `B' or `B*' is returned. To - + convert A to a base B, CODE is PLUS_EXPR and BINFO is the binfo for - + the B base instance within A. To convert base A to derived B, CODE - + is MINUS_EXPR and BINFO is the binfo for the A instance within B. - + In this latter case, A must not be a morally virtual base of B. - + NONNULL is true if EXPR is known to be non-NULL (this is only - + needed when EXPR is of pointer type). CV qualifiers are preserved - + from EXPR. */ - - -/* Returns a list of virtual base class pointers as a chain of - - FIELD_DECLS. */ - - - -static tree - -build_vbase_pointer_fields (rli, empty_p) - - record_layout_info rli; - - int *empty_p; - -{ - - /* Chain to hold all the new FIELD_DECLs which point at virtual - - base classes. */ - - tree rec = rli->t; - - tree vbase_decls = NULL_TREE; - - tree binfos = TYPE_BINFO_BASETYPES (rec); - - int n_baseclasses = CLASSTYPE_N_BASECLASSES (rec); - - tree decl; - - int i; - - - - /* Under the new ABI, there are no vbase pointers in the object. - - Instead, the offsets are stored in the vtable. */ - - if (vbase_offsets_in_vtable_p ()) - - return NULL_TREE; - - - - /* Loop over the baseclasses, adding vbase pointers as needed. */ - - for (i = 0; i < n_baseclasses; i++) - - { - - register tree base_binfo = TREE_VEC_ELT (binfos, i); - - register tree basetype = BINFO_TYPE (base_binfo); - - - - if (!COMPLETE_TYPE_P (basetype)) - - /* This error is now reported in xref_tag, thus giving better - - location information. */ - - continue; - - - - /* All basetypes are recorded in the association list of the - - derived type. */ - - - - if (TREE_VIA_VIRTUAL (base_binfo)) - - { - - int j; - - const char *name; - - - - /* The offset for a virtual base class is only used in computing - - virtual function tables and for initializing virtual base - - pointers. It is built once `get_vbase_types' is called. */ - - - - /* If this basetype can come from another vbase pointer - - without an additional indirection, we will share - - that pointer. If an indirection is involved, we - - make our own pointer. */ - - for (j = 0; j < n_baseclasses; j++) - - { - - tree other_base_binfo = TREE_VEC_ELT (binfos, j); - - if (! TREE_VIA_VIRTUAL (other_base_binfo) - - && binfo_for_vbase (basetype, BINFO_TYPE (other_base_binfo))) - - goto got_it; - - } - - FORMAT_VBASE_NAME (name, basetype); - - decl = build_vtbl_or_vbase_field (get_identifier (name), - - get_identifier (VTABLE_BASE), - - build_pointer_type (basetype), - - rec, - - basetype, - - empty_p); - - BINFO_VPTR_FIELD (base_binfo) = decl; - - TREE_CHAIN (decl) = vbase_decls; - - place_field (rli, decl); - - vbase_decls = decl; - - *empty_p = 0; - - - - got_it: - - /* The space this decl occupies has already been accounted for. */ - - ; - - } - - } - - - - return vbase_decls; - -} - - - -/* Returns a pointer to the virtual base class of EXP that has the - - indicated TYPE. EXP is of class type, not a pointer type. */ - - - -static tree - -build_vbase_pointer (exp, type) - - tree exp, type; - -{ - - if (vbase_offsets_in_vtable_p ()) - - { - - tree vbase; - - tree vbase_ptr; - - - - /* Find the shared copy of TYPE; that's where the vtable offset - - is recorded. */ - - vbase = binfo_for_vbase (type, TREE_TYPE (exp)); - - /* Find the virtual function table pointer. */ - - vbase_ptr = build_vfield_ref (exp, TREE_TYPE (exp)); - - /* Compute the location where the offset will lie. */ - - vbase_ptr = build (PLUS_EXPR, - - TREE_TYPE (vbase_ptr), - - vbase_ptr, - - BINFO_VPTR_FIELD (vbase)); - - vbase_ptr = build1 (NOP_EXPR, - - build_pointer_type (ptrdiff_type_node), - - vbase_ptr); - - /* Add the contents of this location to EXP. */ - - return build (PLUS_EXPR, - - build_pointer_type (type), - - build_unary_op (ADDR_EXPR, exp, /*noconvert=*/0), - - build1 (INDIRECT_REF, ptrdiff_type_node, vbase_ptr)); - - } - - else - - { - - char *name; - - FORMAT_VBASE_NAME (name, type); - - return build_component_ref (exp, get_identifier (name), NULL_TREE, 0); - - } - -} - - - -/* Build multi-level access to EXPR using hierarchy path PATH. - - CODE is PLUS_EXPR if we are going with the grain, - - and MINUS_EXPR if we are not (in which case, we cannot traverse - - virtual baseclass links). - - - - TYPE is the type we want this path to have on exit. - - - - NONNULL is non-zero if we know (for any reason) that EXPR is - - not, in fact, zero. */ - - - tree - -build_vbase_path (code, type, expr, path, nonnull) - +build_base_path (code, expr, binfo, nonnull) - enum tree_code code; - - tree type, expr, path; - + tree expr; - + tree binfo; - int nonnull; - { - - register int changed = 0; - - tree last = NULL_TREE, last_virtual = NULL_TREE; - + tree v_binfo = NULL_TREE; - + tree t; - + tree probe; - + tree offset; - + tree target_type; - + tree null_test = NULL; - + tree ptr_target_type; - int fixed_type_p; - - tree null_expr = 0, nonnull_expr; - - tree basetype; - - tree offset = integer_zero_node; - + int want_pointer = TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE; - - - if (BINFO_INHERITANCE_CHAIN (path) == NULL_TREE) - - return build1 (NOP_EXPR, type, expr); - + if (expr == error_mark_node || binfo == error_mark_node || !binfo) - + return error_mark_node; - + - + for (probe = binfo; probe; - + t = probe, probe = BINFO_INHERITANCE_CHAIN (probe)) - + if (!v_binfo && TREE_VIA_VIRTUAL (probe)) - + v_binfo = probe; - + - + probe = TYPE_MAIN_VARIANT (TREE_TYPE (expr)); - + if (want_pointer) - + probe = TYPE_MAIN_VARIANT (TREE_TYPE (probe)); - + - + my_friendly_assert (code == MINUS_EXPR - + ? same_type_p (BINFO_TYPE (binfo), probe) - + : code == PLUS_EXPR - + ? same_type_p (BINFO_TYPE (t), probe) - + : false, 20010723); - + - + if (code == MINUS_EXPR && v_binfo) - + { - + cp_error ("cannot convert from base `%T' to derived type `%T' via virtual base `%T'", - + BINFO_TYPE (binfo), BINFO_TYPE (t), BINFO_TYPE (v_binfo)); - + return error_mark_node; - + } - - - /* We could do better if we had additional logic to convert back to the - - unconverted type (the static type of the complete object), and then - - convert back to the type we want. Until that is done, we only optimize - - if the complete type is the same type as expr has. */ - fixed_type_p = resolves_to_fixed_type_p (expr, &nonnull); - if (fixed_type_p < 0) - /* Virtual base layout is not fixed, even in ctors and dtors. */ - fixed_type_p = 0; - - - if (!fixed_type_p && TREE_SIDE_EFFECTS (expr)) - expr = save_expr (expr); - - nonnull_expr = expr; - - - - path = reverse_path (path); - - - - basetype = BINFO_TYPE (path); - - - - while (path) - + - + if (!want_pointer) - + expr = build_unary_op (ADDR_EXPR, expr, 0); - + else if (!nonnull) - + null_test = build (EQ_EXPR, boolean_type_node, expr, integer_zero_node); - + - + offset = BINFO_OFFSET (binfo); - + - + if (v_binfo && !fixed_type_p) - { - - if (TREE_VIA_VIRTUAL (TREE_VALUE (path))) - - { - - last_virtual = BINFO_TYPE (TREE_VALUE (path)); - - if (code == PLUS_EXPR) - - { - - changed = ! fixed_type_p; - - - - if (changed) - - { - - tree ind; - - - - /* We already check for ambiguous things in the caller, just - - find a path. */ - - if (last) - - { - - tree binfo = get_binfo (last, TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (nonnull_expr))), 0); - - nonnull_expr = convert_pointer_to_real (binfo, nonnull_expr); - - } - - ind = build_indirect_ref (nonnull_expr, NULL_PTR); - - nonnull_expr = build_vbase_pointer (ind, last_virtual); - - if (nonnull == 0 - - && TREE_CODE (type) == POINTER_TYPE - - && null_expr == NULL_TREE) - - { - - null_expr = build1 (NOP_EXPR, build_pointer_type (last_virtual), integer_zero_node); - - expr = build (COND_EXPR, build_pointer_type (last_virtual), - - build (EQ_EXPR, boolean_type_node, expr, - - integer_zero_node), - - null_expr, nonnull_expr); - - } - - } - - /* else we'll figure out the offset below. */ - + /* Going via virtual base V_BINFO. We need the static offset - + from V_BINFO to BINFO, and the dynamic offset from T to - + V_BINFO. That offset is an entry in T's vtable. */ - + tree v_offset = build_vfield_ref (build_indirect_ref (expr, NULL), - + TREE_TYPE (TREE_TYPE (expr))); - + - + v_binfo = binfo_for_vbase (BINFO_TYPE (v_binfo), BINFO_TYPE (t)); - + - + v_offset = build (PLUS_EXPR, TREE_TYPE (v_offset), - + v_offset, BINFO_VPTR_FIELD (v_binfo)); - + v_offset = build1 (NOP_EXPR, - + build_pointer_type (ptrdiff_type_node), - + v_offset); - + v_offset = build_indirect_ref (v_offset, NULL); - + - + offset = cp_convert (ptrdiff_type_node, - + size_diffop (offset, BINFO_OFFSET (v_binfo))); - - - /* Happens in the case of parse errors. */ - - if (nonnull_expr == error_mark_node) - - return error_mark_node; - - } - - else - - { - - cp_error ("cannot cast up from virtual baseclass `%T'", - - last_virtual); - - return error_mark_node; - - } - - } - - last = TREE_VALUE (path); - - path = TREE_CHAIN (path); - + if (!integer_zerop (offset)) - + offset = build (code, ptrdiff_type_node, v_offset, offset); - + else - + offset = v_offset; - } - - /* LAST is now the last basetype assoc on the path. */ - - - /* A pointer to a virtual base member of a non-null object - - is non-null. Therefore, we only need to test for zeroness once. - - Make EXPR the canonical expression to deal with here. */ - - if (null_expr) - - { - - TREE_OPERAND (expr, 2) = nonnull_expr; - - TREE_TYPE (expr) = TREE_TYPE (TREE_OPERAND (expr, 1)) - - = TREE_TYPE (nonnull_expr); - - } - - else - - expr = nonnull_expr; - + target_type = code == PLUS_EXPR ? BINFO_TYPE (binfo) : BINFO_TYPE (t); - + - + target_type = cp_build_qualified_type - + (target_type, CP_TYPE_QUALS (TREE_TYPE (TREE_TYPE (expr)))); - + ptr_target_type = build_pointer_type (target_type); - + if (want_pointer) - + target_type = ptr_target_type; - + - + expr = build1 (NOP_EXPR, ptr_target_type, expr); - - - /* If we go through any virtual base pointers, make sure that - - casts to BASETYPE from the last virtual base class use - - the right value for BASETYPE. */ - - if (changed) - - { - - tree intype = TREE_TYPE (TREE_TYPE (expr)); - - - - if (TYPE_MAIN_VARIANT (intype) != BINFO_TYPE (last)) - - offset - - = BINFO_OFFSET (get_binfo (last, TYPE_MAIN_VARIANT (intype), 0)); - - } - + if (!integer_zerop (offset)) - + expr = build (code, ptr_target_type, expr, offset); - else - - offset = BINFO_OFFSET (last); - - - - if (! integer_zerop (offset)) - - { - - /* Bash types to make the backend happy. */ - - offset = cp_convert (type, offset); - - - - /* If expr might be 0, we need to preserve that zeroness. */ - - if (nonnull == 0) - - { - - if (null_expr) - - TREE_TYPE (null_expr) = type; - - else - - null_expr = build1 (NOP_EXPR, type, integer_zero_node); - - if (TREE_SIDE_EFFECTS (expr)) - - expr = save_expr (expr); - - - - return build (COND_EXPR, type, - - build (EQ_EXPR, boolean_type_node, expr, integer_zero_node), - - null_expr, - - build (code, type, expr, offset)); - - } - - else return build (code, type, expr, offset); - - } - + null_test = NULL; - + - + if (!want_pointer) - + expr = build_indirect_ref (expr, NULL); - - - /* Cannot change the TREE_TYPE of a NOP_EXPR here, since it may - - be used multiple times in initialization of multiple inheritance. */ - - if (null_expr) - - { - - TREE_TYPE (expr) = type; - - return expr; - - } - - else - - return build1 (NOP_EXPR, type, expr); - + if (null_test) - + expr = build (COND_EXPR, target_type, null_test, - + build1 (NOP_EXPR, target_type, integer_zero_node), - + expr); - + - + return expr; - } - - - @@ -533,8 +375,6 @@ build_vtable_entry_ref (basetype, vtbl, - s = build_tree_list (build_string (1, "s"), s); - - i = build_array_ref (vtbl, idx); - - if (!flag_vtable_thunks) - - i = build_component_ref (i, pfn_identifier, vtable_entry_type, 0); - i = build_c_cast (ptrdiff_type_node, build_unary_op (ADDR_EXPR, i, 0)); - i2 = build_array_ref (vtbl, build_int_2(0,0)); - i2 = build_c_cast (ptrdiff_type_node, build_unary_op (ADDR_EXPR, i2, 0)); - @@ -603,8 +443,8 @@ build_vtbl_ref (instance, idx) - { - vtbl = TYPE_BINFO_VTABLE (basetype); - /* Knowing the dynamic type of INSTANCE we can easily obtain - - the correct vtable entry. In the new ABI, we resolve - - this back to be in terms of the primary vtable. */ - + the correct vtable entry. We resolve this back to be in - + terms of the primary vtable. */ - if (TREE_CODE (vtbl) == PLUS_EXPR) - { - idx = fold (build (PLUS_EXPR, - @@ -632,45 +472,22 @@ build_vtbl_ref (instance, idx) - } - - /* Given an object INSTANCE, return an expression which yields the - - virtual function corresponding to INDEX. There are many special - - cases for INSTANCE which we take care of here, mainly to avoid - - creating extra tree nodes when we don't have to. */ - + virtual function corresponding to IDX. */ - - tree - -build_vfn_ref (ptr_to_instptr, instance, idx) - - tree *ptr_to_instptr, instance; - +build_vfn_ref (instance, idx) - + tree instance; - tree idx; - { - tree aref = build_vtbl_ref (instance, idx); - - - - /* When using thunks, there is no extra delta, and we get the pfn - - directly. */ - - if (flag_vtable_thunks) - - { - - /* When using function descriptors, the address of the - - vtable entry is treated as a function pointer. */ - - if (TARGET_VTABLE_USES_DESCRIPTORS) - - return build1 (NOP_EXPR, TREE_TYPE (aref), - - build_unary_op (ADDR_EXPR, aref, /*noconvert=*/1)); - - - - return aref; - - } - - - - if (ptr_to_instptr) - - { - - /* Save the intermediate result in a SAVE_EXPR so we don't have to - - compute each component of the virtual function pointer twice. */ - - if (TREE_CODE (aref) == INDIRECT_REF) - - TREE_OPERAND (aref, 0) = save_expr (TREE_OPERAND (aref, 0)); - - - *ptr_to_instptr - - = build (PLUS_EXPR, TREE_TYPE (*ptr_to_instptr), - - *ptr_to_instptr, - - cp_convert (ptrdiff_type_node, - - build_component_ref (aref, delta_identifier, NULL_TREE, 0))); - - } - + /* When using function descriptors, the address of the - + vtable entry is treated as a function pointer. */ - + if (TARGET_VTABLE_USES_DESCRIPTORS) - + return build1 (NOP_EXPR, TREE_TYPE (aref), - + build_unary_op (ADDR_EXPR, aref, /*noconvert=*/1)); - - - return build_component_ref (aref, pfn_identifier, NULL_TREE, 0); - + return aref; - } - - /* Return the name of the virtual function table (as an IDENTIFIER_NODE) - @@ -826,15 +643,15 @@ build_primary_vtable (binfo, type) - return 1; - } - - -/* Give TYPE a new virtual function table which is initialized - +/* Give BINFO a new virtual function table which is initialized - with a skeleton-copy of its original initialization. The only - entry that changes is the `delta' entry, so we can really - share a lot of structure. - - - FOR_TYPE is the derived type which caused this table to - + FOR_TYPE is the most derived type which caused this table to - be needed. - - - BINFO is the type association which provided TYPE for FOR_TYPE. - + Returns non-zero if we haven't met BINFO before. - - The order in which vtables are built (by calling this function) for - an object must remain the same, otherwise a binary incompatibility - @@ -844,143 +661,28 @@ static int - build_secondary_vtable (binfo, for_type) - tree binfo, for_type; - { - - tree basetype; - - tree orig_decl = BINFO_VTABLE (binfo); - - tree name; - - tree new_decl; - - tree offset; - - tree path = binfo; - - char *buf; - - const char *buf2; - - char joiner = '_'; - - int i; - - - -#ifdef JOINER - - joiner = JOINER; - -#endif - - - - if (TREE_VIA_VIRTUAL (binfo)) - - my_friendly_assert (binfo == binfo_for_vbase (BINFO_TYPE (binfo), - - current_class_type), - - 170); - + my_friendly_assert (binfo == CANONICAL_BINFO (binfo, for_type), 20010605); - - - if (BINFO_NEW_VTABLE_MARKED (binfo, current_class_type)) - + if (BINFO_NEW_VTABLE_MARKED (binfo, for_type)) - /* We already created a vtable for this base. There's no need to - do it again. */ - return 0; - - /* Remember that we've created a vtable for this BINFO, so that we - don't try to do so again. */ - - SET_BINFO_NEW_VTABLE_MARKED (binfo, current_class_type); - + SET_BINFO_NEW_VTABLE_MARKED (binfo, for_type); - - /* Make fresh virtual list, so we can smash it later. */ - BINFO_VIRTUALS (binfo) = copy_virtuals (binfo); - - - - my_friendly_assert (binfo == CANONICAL_BINFO (binfo, for_type), 20010605); - - offset = BINFO_OFFSET (binfo); - - - - /* In the new ABI, secondary vtables are laid out as part of the - - same structure as the primary vtable. */ - - if (merge_primary_and_secondary_vtables_p ()) - - { - - BINFO_VTABLE (binfo) = NULL_TREE; - - return 1; - - } - - - - /* Create the declaration for the secondary vtable. */ - - basetype = TYPE_MAIN_VARIANT (BINFO_TYPE (binfo)); - - buf2 = TYPE_ASSEMBLER_NAME_STRING (basetype); - - i = TYPE_ASSEMBLER_NAME_LENGTH (basetype) + 1; - - - - /* We know that the vtable that we are going to create doesn't exist - - yet in the global namespace, and when we finish, it will be - - pushed into the global namespace. In complex MI hierarchies, we - - have to loop while the name we are thinking of adding is globally - - defined, adding more name components to the vtable name as we - - loop, until the name is unique. This is because in complex MI - - cases, we might have the same base more than once. This means - - that the order in which this function is called for vtables must - - remain the same, otherwise binary compatibility can be - - compromised. */ - - - - while (1) - - { - - char *buf1 = (char *) alloca (TYPE_ASSEMBLER_NAME_LENGTH (for_type) - - + 1 + i); - - char *new_buf2; - - - - sprintf (buf1, "%s%c%s", TYPE_ASSEMBLER_NAME_STRING (for_type), joiner, - - buf2); - - buf = (char *) alloca (strlen (VTABLE_NAME_PREFIX) + strlen (buf1) + 1); - - sprintf (buf, "%s%s", VTABLE_NAME_PREFIX, buf1); - - name = get_identifier (buf); - - - - /* If this name doesn't clash, then we can use it, otherwise - - we add more to the name until it is unique. */ - - - - if (! IDENTIFIER_GLOBAL_VALUE (name)) - - break; - - - - /* Set values for next loop through, if the name isn't unique. */ - - - - path = BINFO_INHERITANCE_CHAIN (path); - - - - /* We better not run out of stuff to make it unique. */ - - my_friendly_assert (path != NULL_TREE, 368); - - - - basetype = TYPE_MAIN_VARIANT (BINFO_TYPE (path)); - - - - if (for_type == basetype) - - { - - /* If we run out of basetypes in the path, we have already - - found created a vtable with that name before, we now - - resort to tacking on _%d to distinguish them. */ - - int j = 2; - - i = TYPE_ASSEMBLER_NAME_LENGTH (basetype) + 1 + i + 1 + 3; - - buf1 = (char *) alloca (i); - - do { - - sprintf (buf1, "%s%c%s%c%d", - - TYPE_ASSEMBLER_NAME_STRING (basetype), joiner, - - buf2, joiner, j); - - buf = (char *) alloca (strlen (VTABLE_NAME_PREFIX) - - + strlen (buf1) + 1); - - sprintf (buf, "%s%s", VTABLE_NAME_PREFIX, buf1); - - name = get_identifier (buf); - - - - /* If this name doesn't clash, then we can use it, - - otherwise we add something different to the name until - - it is unique. */ - - } while (++j <= 999 && IDENTIFIER_GLOBAL_VALUE (name)); - - - - /* Hey, they really like MI don't they? Increase the 3 - - above to 6, and the 999 to 999999. :-) */ - - my_friendly_assert (j <= 999, 369); - - - - break; - - } - - - i = TYPE_ASSEMBLER_NAME_LENGTH (basetype) + 1 + i; - - new_buf2 = (char *) alloca (i); - - sprintf (new_buf2, "%s%c%s", - - TYPE_ASSEMBLER_NAME_STRING (basetype), joiner, buf2); - - buf2 = new_buf2; - - } - - - - new_decl = build_vtable (for_type, name, TREE_TYPE (orig_decl)); - - DECL_ALIGN (new_decl) = DECL_ALIGN (orig_decl); - - DECL_USER_ALIGN (new_decl) = DECL_USER_ALIGN (orig_decl); - - BINFO_VTABLE (binfo) = pushdecl_top_level (new_decl); - - - -#ifdef GATHER_STATISTICS - - n_vtables += 1; - - n_vtable_elems += list_length (BINFO_VIRTUALS (binfo)); - -#endif - - - + /* Secondary vtables are laid out as part of the same structure as - + the primary vtable. */ - + BINFO_VTABLE (binfo) = NULL_TREE; - return 1; - } - - /* Create a new vtable for BINFO which is the hierarchy dominated by - - T. */ - + T. Return non-zero if we actually created a new vtable. */ - - static int - make_new_vtable (t, binfo) - @@ -1965,9 +1667,8 @@ determine_primary_base (t, vfuns_p) - if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t)) - CLASSTYPE_RTTI (t) = CLASSTYPE_RTTI (basetype); - - - /* A virtual baseclass can't be the primary base under the - - old ABI. And under the new ABI we still prefer a - - non-virtual base. */ - + /* We prefer a non-virtual base, although a virtual one will - + do. */ - if (TREE_VIA_VIRTUAL (base_binfo)) - continue; - - @@ -2036,9 +1737,8 @@ determine_primary_base (t, vfuns_p) - } - } - - - /* The new ABI allows for the use of a "nearly-empty" virtual base - - class as the primary base class if no non-virtual polymorphic - - base can be found. */ - + /* A "nearly-empty" virtual base class can be the primary base - + class, if no non-virtual polymorphic base can be found. */ - if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t)) - { - /* If not NULL, this is the best primary base candidate we have - @@ -2921,9 +2621,6 @@ dfs_modify_vtables (binfo, data) - - t = (tree) data; - - - /* If we're supporting RTTI then we always need a new vtable to - - point to the RTTI information. Under the new ABI we may need - - a new vtable to contain vcall and vbase offsets. */ - make_new_vtable (t, binfo); - - /* Now, go through each of the virtual functions in the virtual - @@ -2960,10 +2657,9 @@ modify_all_vtables (t, vfuns_p, overridd - int *vfuns_p; - tree overridden_virtuals; - { - - tree binfo; - + tree binfo = TYPE_BINFO (t); - + tree *fnsp; - - - binfo = TYPE_BINFO (t); - - - /* Update all of the vtables. */ - dfs_walk (binfo, - dfs_modify_vtables, - @@ -2971,43 +2667,35 @@ modify_all_vtables (t, vfuns_p, overridd - t); - dfs_walk (binfo, dfs_unmark, dfs_marked_real_bases_queue_p, t); - - - /* If we should include overriding functions for secondary vtables - - in our primary vtable, add them now. */ - - if (all_overridden_vfuns_in_vtables_p ()) - + /* Include overriding functions for secondary vtables in our primary - + vtable. */ - + for (fnsp = &overridden_virtuals; *fnsp; ) - { - - tree *fnsp = &overridden_virtuals; - + tree fn = TREE_VALUE (*fnsp); - - - while (*fnsp) - + if (!BINFO_VIRTUALS (binfo) - + || !value_member (fn, BINFO_VIRTUALS (binfo))) - { - - tree fn = TREE_VALUE (*fnsp); - - - - if (!BINFO_VIRTUALS (binfo) - - || !value_member (fn, BINFO_VIRTUALS (binfo))) - - { - - /* Set the vtable index. */ - - set_vindex (fn, vfuns_p); - - /* We don't need to convert to a base class when calling - - this function. */ - - DECL_VIRTUAL_CONTEXT (fn) = t; - - - - /* We don't need to adjust the `this' pointer when - - calling this function. */ - - BV_DELTA (*fnsp) = integer_zero_node; - - BV_VCALL_INDEX (*fnsp) = NULL_TREE; - - - - /* This is an overridden function not already in our - - vtable. Keep it. */ - - fnsp = &TREE_CHAIN (*fnsp); - - } - - else - - /* We've already got an entry for this function. Skip - - it. */ - - *fnsp = TREE_CHAIN (*fnsp); - + /* Set the vtable index. */ - + set_vindex (fn, vfuns_p); - + /* We don't need to convert to a base class when calling - + this function. */ - + DECL_VIRTUAL_CONTEXT (fn) = t; - + - + /* We don't need to adjust the `this' pointer when - + calling this function. */ - + BV_DELTA (*fnsp) = integer_zero_node; - + BV_VCALL_INDEX (*fnsp) = NULL_TREE; - + - + /* This is an overridden function not already in our - + vtable. Keep it. */ - + fnsp = &TREE_CHAIN (*fnsp); - } - + else - + /* We've already got an entry for this function. Skip it. */ - + *fnsp = TREE_CHAIN (*fnsp); - } - - else - - overridden_virtuals = NULL_TREE; - - - + - return overridden_virtuals; - } - - @@ -4222,8 +3910,7 @@ build_base_fields (rli, empty_p, offsets - int i; - bool atend = 0; - - - /* Under the new ABI, the primary base class is always allocated - - first. */ - + /* The primary base class is always allocated first. */ - if (CLASSTYPE_HAS_PRIMARY_BASE_P (rec)) - build_base_field (rli, CLASSTYPE_PRIMARY_BINFO (rec), - empty_p, offsets, t); - @@ -4235,8 +3922,8 @@ build_base_fields (rli, empty_p, offsets - - base_binfo = BINFO_BASETYPE (TYPE_BINFO (rec), i); - - - /* Under the new ABI, the primary base was already allocated - - above, so we don't need to allocate it again here. */ - + /* The primary base was already allocated above, so we don't - + need to allocate it again here. */ - if (base_binfo == CLASSTYPE_PRIMARY_BINFO (rec)) - continue; - - @@ -4722,9 +4409,7 @@ create_vtable_ptr (t, empty_p, vfuns_p, - here. Even if there weren't any new virtual functions, we might need a - new virtual function table if we're supposed to include vptrs in - all classes that need them. */ - - if (!TYPE_VFIELD (t) - - && (*vfuns_p - - || (TYPE_CONTAINS_VPTR_P (t) && vptrs_present_everywhere_p ()))) - + if (!TYPE_VFIELD (t) && (*vfuns_p || TYPE_CONTAINS_VPTR_P (t))) - { - /* We build this decl with vtbl_ptr_type_node, which is a - `vtable_entry_type*'. It might seem more precise to use - @@ -4929,10 +4614,8 @@ layout_virtual_bases (t, offsets) - TYPE_ALIGN (t) = MAX (TYPE_ALIGN (t), BITS_PER_UNIT); - - /* Go through the virtual bases, allocating space for each virtual - - base that is not already a primary base class. Under the old - - ABI, these are allocated according to a depth-first left-to-right - - postorder traversal; in the new ABI, inheritance graph order is - - used instead. */ - + base that is not already a primary base class. These are - + allocated in inheritance graph order. */ - for (vbases = TYPE_BINFO (t); - vbases; - vbases = TREE_CHAIN (vbases)) - @@ -4959,8 +4642,8 @@ layout_virtual_bases (t, offsets) - appropriately aligned offset. */ - dsize = CEIL (dsize, desired_align) * desired_align; - - - /* Under the new ABI, we try to squish empty virtual bases in - - just like ordinary empty bases. */ - + /* We try to squish empty virtual bases in just like - + ordinary empty bases. */ - if (is_empty_class (basetype)) - layout_empty_base (vbase, - size_int (CEIL (dsize, BITS_PER_UNIT)), - @@ -5142,8 +4825,7 @@ layout_class_type (t, empty_p, vfuns_p, - vptr = create_vtable_ptr (t, empty_p, vfuns_p, - new_virtuals_p, overridden_virtuals_p); - - - /* Under the new ABI, the vptr is always the first thing in the - - class. */ - + /* The vptr is always the first thing in the class. */ - if (vptr) - { - TYPE_FIELDS (t) = chainon (vptr, TYPE_FIELDS (t)); - @@ -5156,10 +4838,6 @@ layout_class_type (t, empty_p, vfuns_p, - if (build_base_fields (rli, empty_p, empty_base_offsets, t)) - CLASSTYPE_NEARLY_EMPTY_P (t) = 0; - - - /* Add pointers to all of our virtual base-classes. */ - - TYPE_FIELDS (t) = chainon (build_vbase_pointer_fields (rli, empty_p), - - TYPE_FIELDS (t)); - - - /* CLASSTYPE_INLINE_FRIENDS is really TYPE_NONCOPIED_PARTS. Thus, - we have to save this before we zap TYPE_NONCOPIED_PARTS. */ - fixup_inline_methods (t); - @@ -5181,10 +4859,8 @@ layout_class_type (t, empty_p, vfuns_p, - type = TREE_TYPE (field); - - /* If this field is a bit-field whose width is greater than its - - type, then there are some special rules for allocating it - - under the new ABI. Under the old ABI, there were no special - - rules, but the back-end can't handle bitfields longer than a - - `long long', so we use the same mechanism. */ - + type, then there are some special rules for allocating - + it. */ - if (DECL_C_BIT_FIELD (field) - && INT_CST_LT (TYPE_SIZE (type), DECL_SIZE (field))) - { - @@ -5249,10 +4925,10 @@ layout_class_type (t, empty_p, vfuns_p, - } - - /* We make all structures have at least one element, so that they - - have non-zero size. In the new ABI, the class may be empty even - - if it has basetypes. Therefore, we add the fake field after all - - the other fields; if there are already FIELD_DECLs on the list, - - their offsets will not be disturbed. */ - + have non-zero size. The class may be empty even if it has - + basetypes. Therefore, we add the fake field after all the other - + fields; if there are already FIELD_DECLs on the list, their - + offsets will not be disturbed. */ - if (!eoc && *empty_p) - { - tree padding; - @@ -5413,9 +5089,7 @@ finish_struct_1 (t) - = chainon (CLASSTYPE_VFIELDS (t), build_tree_list (NULL_TREE, t)); - - /* If necessary, create the primary vtable for this class. */ - - if (new_virtuals - - || overridden_virtuals - - || (TYPE_CONTAINS_VPTR_P (t) && vptrs_present_everywhere_p ())) - + if (new_virtuals || overridden_virtuals || TYPE_CONTAINS_VPTR_P (t)) - { - new_virtuals = nreverse (new_virtuals); - /* We must enter these virtuals into the table. */ - @@ -5727,11 +5401,12 @@ fixed_type_or_null (instance, nonnull, c - } - } - - -/* Return non-zero if the dynamic type of INSTANCE is known, and equivalent - - to the static type. We also handle the case where INSTANCE is really - - a pointer. Return negative if this is a ctor/dtor. There the dynamic type - - is known, but this might not be the most derived base of the original object, - - and hence virtual bases may not be layed out according to this type. - +/* Return non-zero if the dynamic type of INSTANCE is known, and - + equivalent to the static type. We also handle the case where - + INSTANCE is really a pointer. Return negative if this is a - + ctor/dtor. There the dynamic type is known, but this might not be - + the most derived base of the original object, and hence virtual - + bases may not be layed out according to this type. - - Used to determine whether the virtual function table is needed - or not. - @@ -6783,10 +6458,9 @@ note_name_declared_in_class (name, decl) - } - } - - -/* Returns the VAR_DECL for the complete vtable associated with - - BINFO. (Under the new ABI, secondary vtables are merged with - - primary vtables; this function will return the VAR_DECL for the - - primary vtable.) */ - +/* Returns the VAR_DECL for the complete vtable associated with BINFO. - + Secondary vtables are merged with primary vtables; this function - + will return the VAR_DECL for the primary vtable. */ - - tree - get_vtbl_decl_for_binfo (binfo) - @@ -7134,77 +6808,47 @@ static void - finish_vtbls (t) - tree t; - { - - if (merge_primary_and_secondary_vtables_p ()) - - { - - tree list; - - tree vbase; - - int i; - - - - /* Under the new ABI, we lay out the primary and secondary - - vtables in one contiguous vtable. The primary vtable is - - first, followed by the non-virtual secondary vtables in - - inheritance graph order. */ - - list = build_tree_list (TYPE_BINFO_VTABLE (t), NULL_TREE); - - accumulate_vtbl_inits (TYPE_BINFO (t), TYPE_BINFO (t), - - TYPE_BINFO (t), t, list); - - /* Then come the virtual bases, also in inheritance graph - - order. */ - - for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase)) - - { - - tree real_base; - - - - if (!TREE_VIA_VIRTUAL (vbase)) - - continue; - - - - /* Although we walk in inheritance order, that might not get the - - canonical base. */ - - real_base = binfo_for_vbase (BINFO_TYPE (vbase), t); - - - - accumulate_vtbl_inits (real_base, real_base, - - TYPE_BINFO (t), t, list); - - } - + tree list; - + tree vbase; - + int i; - - - /* Fill in BINFO_VPTR_FIELD in the immediate binfos for our virtual - - base classes, for the benefit of the debugging backends. */ - - for (i = 0; i < BINFO_N_BASETYPES (TYPE_BINFO (t)); ++i) - - { - - tree base = BINFO_BASETYPE (TYPE_BINFO (t), i); - - if (TREE_VIA_VIRTUAL (base)) - - { - - tree vbase = binfo_for_vbase (BINFO_TYPE (base), t); - - BINFO_VPTR_FIELD (base) = BINFO_VPTR_FIELD (vbase); - - } - - } - + /* We lay out the primary and secondary vtables in one contiguous - + vtable. The primary vtable is first, followed by the non-virtual - + secondary vtables in inheritance graph order. */ - + list = build_tree_list (TYPE_BINFO_VTABLE (t), NULL_TREE); - + accumulate_vtbl_inits (TYPE_BINFO (t), TYPE_BINFO (t), - + TYPE_BINFO (t), t, list); - - - if (TYPE_BINFO_VTABLE (t)) - - initialize_vtable (TYPE_BINFO (t), TREE_VALUE (list)); - - } - - else - + /* Then come the virtual bases, also in inheritance graph order. */ - + for (vbase = TYPE_BINFO (t); vbase; vbase = TREE_CHAIN (vbase)) - { - - dfs_walk (TYPE_BINFO (t), dfs_finish_vtbls, - - dfs_unmarked_real_bases_queue_p, t); - - dfs_walk (TYPE_BINFO (t), dfs_unmark, - - dfs_marked_real_bases_queue_p, t); - - } - -} - + tree real_base; - - -/* Called from finish_vtbls via dfs_walk. */ - + if (!TREE_VIA_VIRTUAL (vbase)) - + continue; - - -static tree - -dfs_finish_vtbls (binfo, data) - - tree binfo; - - void *data; - -{ - - tree t = (tree) data; - + /* Although we walk in inheritance order, that might not get the - + canonical base. */ - + real_base = binfo_for_vbase (BINFO_TYPE (vbase), t); - - - if (BINFO_NEW_VTABLE_MARKED (binfo, t)) - - initialize_vtable (binfo, - - build_vtbl_initializer (binfo, binfo, t, - - TYPE_BINFO (t), NULL)); - + accumulate_vtbl_inits (real_base, real_base, - + TYPE_BINFO (t), t, list); - + } - - - SET_BINFO_MARKED (binfo); - + /* Fill in BINFO_VPTR_FIELD in the immediate binfos for our virtual - + base classes, for the benefit of the debugging backends. */ - + for (i = 0; i < BINFO_N_BASETYPES (TYPE_BINFO (t)); ++i) - + { - + tree base = BINFO_BASETYPE (TYPE_BINFO (t), i); - + if (TREE_VIA_VIRTUAL (base)) - + { - + tree vbase = binfo_for_vbase (BINFO_TYPE (base), t); - + BINFO_VPTR_FIELD (base) = BINFO_VPTR_FIELD (vbase); - + } - + } - - - return NULL_TREE; - + if (TYPE_BINFO_VTABLE (t)) - + initialize_vtable (TYPE_BINFO (t), TREE_VALUE (list)); - } - - /* Initialize the vtable for BINFO with the INITS. */ - @@ -7677,9 +7321,8 @@ accumulate_vtbl_inits (binfo, orig_binfo - } - } - - -/* Called from accumulate_vtbl_inits when using the new ABI. - - Accumulates the vtable initializers for all of the vtables into - - TREE_VALUE (DATA). Returns the initializers for the BINFO vtable. */ - +/* Called from accumulate_vtbl_inits. Returns the initializers for - + the BINFO vtable. */ - - static tree - dfs_accumulate_vtbl_inits (binfo, orig_binfo, rtti_binfo, t, l) - @@ -7987,11 +7630,6 @@ build_vbase_offset_vtbl_entries (binfo, - tree t; - tree non_primary_binfo; - - - /* Under the old ABI, pointers to virtual bases are stored in each - - object. */ - - if (!vbase_offsets_in_vtable_p ()) - - return; - - - /* If there are no virtual baseclasses, then there is nothing to - do. */ - if (!TYPE_USES_VIRTUAL_BASECLASSES (BINFO_TYPE (binfo))) - @@ -8093,11 +7731,6 @@ build_vcall_offset_vtbl_entries (binfo, - tree binfo; - vtbl_init_data *vid; - { - - /* Under the old ABI, the adjustments to the `this' pointer were made - - elsewhere. */ - - if (!vcall_offsets_in_vtable_p ()) - - return; - - - /* We only need these entries if this base is a virtual base. */ - if (!TREE_VIA_VIRTUAL (binfo)) - return; - @@ -8352,16 +7985,12 @@ build_rtti_vtbl_entries (binfo, vid) - vid->last_init = &TREE_CHAIN (*vid->last_init); - - /* Add the offset-to-top entry. It comes earlier in the vtable that - - the the typeinfo entry. */ - - if (flag_vtable_thunks) - - { - - /* Convert the offset to look like a function pointer, so that - - we can put it in the vtable. */ - - init = build1 (NOP_EXPR, vfunc_ptr_type_node, offset); - - TREE_CONSTANT (init) = 1; - - *vid->last_init = build_tree_list (NULL_TREE, init); - - vid->last_init = &TREE_CHAIN (*vid->last_init); - - } - + the the typeinfo entry. Convert the offset to look like a - + function pointer, so that we can put it in the vtable. */ - + init = build1 (NOP_EXPR, vfunc_ptr_type_node, offset); - + TREE_CONSTANT (init) = 1; - + *vid->last_init = build_tree_list (NULL_TREE, init); - + vid->last_init = &TREE_CHAIN (*vid->last_init); - } - - /* Build an entry in the virtual function table. DELTA is the offset - @@ -8378,55 +8007,20 @@ build_vtable_entry (delta, vcall_index, - tree vcall_index; - tree entry; - { - - if (flag_vtable_thunks) - - { - - tree fn; - + tree fn; - - - fn = TREE_OPERAND (entry, 0); - - if ((!integer_zerop (delta) || vcall_index != NULL_TREE) - - && fn != abort_fndecl - - && !DECL_TINFO_FN_P (fn)) - - { - - entry = make_thunk (entry, delta, vcall_index); - - entry = build1 (ADDR_EXPR, vtable_entry_type, entry); - - TREE_READONLY (entry) = 1; - - TREE_CONSTANT (entry) = 1; - - } - -#ifdef GATHER_STATISTICS - - n_vtable_entries += 1; - -#endif - - return entry; - - } - - else - + fn = TREE_OPERAND (entry, 0); - + if ((!integer_zerop (delta) || vcall_index != NULL_TREE) - + && fn != abort_fndecl - + && !DECL_TINFO_FN_P (fn)) - { - - tree elems = tree_cons (NULL_TREE, delta, - - tree_cons (NULL_TREE, integer_zero_node, - - build_tree_list (NULL_TREE, entry))); - - tree entry = build (CONSTRUCTOR, vtable_entry_type, NULL_TREE, elems); - - - - /* We don't use vcall offsets when not using vtable thunks. */ - - my_friendly_assert (vcall_index == NULL_TREE, 20000125); - - - - /* DELTA used to be constructed by `size_int' and/or size_binop, - - which caused overflow problems when it was negative. That should - - be fixed now. */ - - - - if (! int_fits_type_p (delta, delta_type_node)) - - { - - if (flag_huge_objects) - - sorry ("object size exceeds built-in limit for virtual function table implementation"); - - else - - sorry ("object size exceeds normal limit for virtual function table implementation, recompile all source and use -fhuge-objects"); - - } - - - - TREE_CONSTANT (entry) = 1; - - TREE_STATIC (entry) = 1; - + entry = make_thunk (entry, delta, vcall_index); - + entry = build1 (ADDR_EXPR, vtable_entry_type, entry); - TREE_READONLY (entry) = 1; - - - + TREE_CONSTANT (entry) = 1; - + } - #ifdef GATHER_STATISTICS - - n_vtable_entries += 1; - + n_vtable_entries += 1; - #endif - - - - return entry; - - } - + return entry; - } - Index: gcc/cp/cp-tree.h - =================================================================== - RCS file: /cvs/gcc/gcc/gcc/cp/cp-tree.h,v - retrieving revision 1.572.2.36 - diff -u -p -r1.572.2.36 cp-tree.h - --- gcc/cp/cp-tree.h 2001/12/08 16:12:51 1.572.2.36 - +++ gcc/cp/cp-tree.h 2002/02/01 22:44:27 - @@ -135,11 +135,9 @@ Boston, MA 02111-1307, USA. */ - does not have a BV_FN; it is just an offset. - - BINFO_VTABLE - - Sometimes this is a VAR_DECL. Under the new ABI, it is instead - - an expression with POINTER_TYPE pointing that gives the value - + This is an expression with POINTER_TYPE that gives the value - to which the vptr should be initialized. Use get_vtbl_decl_for_binfo - - to extract the VAR_DECL for the complete vtable; that macro works - - in both ABIs. - + to extract the VAR_DECL for the complete vtable. - - DECL_ARGUMENTS - For a VAR_DECL this is DECL_ANON_UNION_ELEMS. - @@ -226,40 +224,6 @@ extern int flag_rtti; - - extern int flag_huge_objects; - - -/* Nonzero if virtual base class offsets are stored in the virtual - - function table. Zero if, instead, a pointer to the virtual base is - - stored in the object itself. */ - -#define vbase_offsets_in_vtable_p() (1) - - - -/* Nonzero if displacements to the `this' pointer to use when calling - - virtual functions in a virtual base class are present in the - - vtable. */ - -#define vcall_offsets_in_vtable_p() (1) - - - -/* Nonzero if a derived class that needs a vptr should always get one, - - even if a non-primary base class already has one. For example, - - given: - - - - struct S { int i; virtual void f(); }; - - struct T : virtual public S {}; - - - - one could either reuse the vptr in `S' for `T', or create a new - - vptr for `T'. If this flag is nonzero we choose the latter - - alternative; otherwise, we choose the former. */ - -#define vptrs_present_everywhere_p() (1) - - - -/* Nonzero if the vtable for a derived class should contain the - - virtual functions from the primary base and all virtual functions - - present in the class itself. Zero if, instead, it should contain - - only those virtual functions from the primary base together with - - the functions declared in the derived class (but not in any base - - class). */ - -#define all_overridden_vfuns_in_vtables_p() (1) - - - -/* Nonzero if primary and secondary vtables are combined into a single - - vtable. */ - -#define merge_primary_and_secondary_vtables_p() (1) - - - - /* Language-dependent contents of an identifier. */ - - @@ -601,15 +565,12 @@ enum cp_tree_index - CPTI_COMPLETE_DTOR_IDENTIFIER, - CPTI_BASE_DTOR_IDENTIFIER, - CPTI_DELETING_DTOR_IDENTIFIER, - - CPTI_DELTA2_IDENTIFIER, - CPTI_DELTA_IDENTIFIER, - CPTI_IN_CHARGE_IDENTIFIER, - CPTI_VTT_PARM_IDENTIFIER, - - CPTI_INDEX_IDENTIFIER, - CPTI_NELTS_IDENTIFIER, - CPTI_THIS_IDENTIFIER, - CPTI_PFN_IDENTIFIER, - - CPTI_PFN_OR_DELTA2_IDENTIFIER, - CPTI_VPTR_IDENTIFIER, - CPTI_STD_IDENTIFIER, - - @@ -643,8 +604,7 @@ extern tree cp_global_trees[CPTI_MAX]; - #define wchar_decl_node cp_global_trees[CPTI_WCHAR_DECL] - #define vtable_entry_type cp_global_trees[CPTI_VTABLE_ENTRY_TYPE] - /* The type used to represent an offset by which to adjust the `this' - - pointer in pointer-to-member types and, when not using vtable - - thunks, in vtables. */ - + pointer in pointer-to-member types. */ - #define delta_type_node cp_global_trees[CPTI_DELTA_TYPE] - /* The type used to represent an index into the vtable. */ - #define vtable_index_type cp_global_trees[CPTI_VTABLE_INDEX_TYPE] - @@ -720,20 +680,14 @@ extern tree cp_global_trees[CPTI_MAX]; - /* The name of a destructor that destroys virtual base classes, and - then deletes the entire object. */ - #define deleting_dtor_identifier cp_global_trees[CPTI_DELETING_DTOR_IDENTIFIER] - - - -#define delta2_identifier cp_global_trees[CPTI_DELTA2_IDENTIFIER] - #define delta_identifier cp_global_trees[CPTI_DELTA_IDENTIFIER] - #define in_charge_identifier cp_global_trees[CPTI_IN_CHARGE_IDENTIFIER] - - - /* The name of the parameter that contains a pointer to the VTT to use - for this subobject constructor or destructor. */ - #define vtt_parm_identifier cp_global_trees[CPTI_VTT_PARM_IDENTIFIER] - - - -#define index_identifier cp_global_trees[CPTI_INDEX_IDENTIFIER] - #define nelts_identifier cp_global_trees[CPTI_NELTS_IDENTIFIER] - #define this_identifier cp_global_trees[CPTI_THIS_IDENTIFIER] - #define pfn_identifier cp_global_trees[CPTI_PFN_IDENTIFIER] - -#define pfn_or_delta2_identifier cp_global_trees[CPTI_PFN_OR_DELTA2_IDENTIFIER] - #define vptr_identifier cp_global_trees[CPTI_VPTR_IDENTIFIER] - /* The name of the std namespace. */ - #define std_identifier cp_global_trees[CPTI_STD_IDENTIFIER] - @@ -1081,11 +1035,6 @@ extern int warn_reorder; - - extern int flag_signed_bitfields; - - -/* True for more efficient but incompatible (not fully tested) - - vtable implementation (using thunks). - - 0 is old behavior; 1 is new behavior. */ - -extern int flag_vtable_thunks; - - - /* INTERFACE_ONLY nonzero means that we are in an "interface" - section of the compiler. INTERFACE_UNKNOWN nonzero means - we cannot trust the value of INTERFACE_ONLY. If INTERFACE_UNKNOWN - @@ -1234,11 +1183,9 @@ enum languages { lang_c, lang_cplusplus, - /* Virtual function addresses can be gotten from a virtual function - table entry using this macro. */ - #define FNADDR_FROM_VTABLE_ENTRY(ENTRY) \ - - (!flag_vtable_thunks ? \ - - TREE_VALUE (TREE_CHAIN (TREE_CHAIN (CONSTRUCTOR_ELTS (ENTRY)))) \ - - : !DECL_THUNK_P (TREE_OPERAND ((ENTRY), 0)) \ - - ? (ENTRY) \ - - : DECL_INITIAL (TREE_OPERAND ((ENTRY), 0))) - + (DECL_THUNK_P (TREE_OPERAND ((ENTRY), 0)) \ - + : DECL_INITIAL (TREE_OPERAND ((ENTRY), 0)) \ - + ? (ENTRY)) - - #define FUNCTION_ARG_CHAIN(NODE) \ - (TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (NODE)))) - @@ -2478,8 +2425,7 @@ struct lang_decl - /* Nonzero if this class has a virtual function table pointer. */ - #define TYPE_CONTAINS_VPTR_P(NODE) \ - (TYPE_POLYMORPHIC_P (NODE) \ - - || (vbase_offsets_in_vtable_p () \ - - && TYPE_USES_VIRTUAL_BASECLASSES (NODE))) - + || TYPE_USES_VIRTUAL_BASECLASSES (NODE)) - - extern int flag_new_for_scope; - - @@ -2634,67 +2580,15 @@ extern int flag_new_for_scope; - - /* A pointer-to-function member type looks like: - - - struct { - - short __delta; - - short __index; - - union { - - P __pfn; - - short __delta2; - - } __pfn_or_delta2; - - }; - - - - where P is a POINTER_TYPE to a METHOD_TYPE appropriate for the - - pointer to member. The fields are used as follows: - - - - If __INDEX is -1, then the function to call is non-virtual, and - - is located at the address given by __PFN. - - - - If __INDEX is zero, then this a NULL pointer-to-member. - - - - Otherwise, the function to call is virtual. Then, __DELTA2 gives - - the offset from an instance of the object to the virtual function - - table, and __INDEX - 1 is the index into the vtable to use to - - find the function. - - - - The value to use for the THIS parameter is the address of the - - object plus __DELTA. - - - - For example, given: - - - - struct B1 { - - int i; - - }; - - - - struct B2 { - - double d; - - void f(); - - }; - - - - struct S : public B1, B2 {}; - - - - the pointer-to-member for `&S::f' looks like: - - - - { 4, -1, { &f__2B2 } }; - - - - The `4' means that given an `S*' you have to add 4 bytes to get to - - the address of the `B2*'. Then, the -1 indicates that this is a - - non-virtual function. Of course, `&f__2B2' is the name of that - - function. - - - - (Of course, the exact values may differ depending on the mangling - - scheme, sizes of types, and such.). - - - - Under the new ABI, we do: - - - struct { - __P __pfn; - ptrdiff_t __delta; - }; - - - (We don't need DELTA2, because the vtable is always the first thing - - in the object.) If the function is virtual, then PFN is one plus - - twice the index into the vtable; otherwise, it is just a pointer to - - the function. - + (As the vtable is always the first thing in the object, we don't - + need an offset to it.) If the function is virtual, then PFN is one - + plus twice the index into the vtable; otherwise, it is just a - + pointer to the function. - - Unfortunately, using the lowest bit of PFN doesn't work in - architectures that don't impose alignment requirements on function - @@ -3201,6 +3095,29 @@ typedef enum instantiate_type_flags { - itf_ptrmem_ok = 1 << 2, /* pointers to member ok (internal use) */ - } instantiate_type_flags; - - +/* The kind of checking we can do looking in a class heirarchy. */ - +typedef enum base_access { - + ba_any = -2, /* Do not check access, allow an ambiguous base, - + prefer a non-virtual base */ - + ba_ignore = -1, /* Do not check access */ - + ba_check = 0, /* Check access */ - + ba_not_special /* Do not consider special privilege - + current_class_type might give. */ - +} base_access; - + - +/* The kind of base we can find, looking in a class heirarchy. - + values <0 indicate we failed. */ - +typedef enum base_kind { - + bk_inaccessible = -3, /* The base is inaccessible */ - + bk_ambig = -2, /* The base is ambiguous */ - + bk_not_base = -1, /* It is not a base */ - + bk_same_type = 0, /* It is the same type */ - + bk_proper_base = 1, /* It is a proper base */ - + bk_via_virtual = 2 /* It is a proper base, but via a virtual - + path. This might not be the canonical - + binfo. */ - +} base_kind; - + - /* Nonzero means allow Microsoft extensions without a pedwarn. */ - extern int flag_ms_extensions; - - @@ -3226,8 +3143,7 @@ extern tree pending_vtables; - - /* Node for "pointer to (virtual) function". - This may be distinct from ptr_type_node so gdb can distinguish them. */ - -#define vfunc_ptr_type_node \ - - (flag_vtable_thunks ? vtable_entry_type : ptr_type_node) - +#define vfunc_ptr_type_node vtable_entry_type - - - /* For building calls to `delete'. */ - @@ -3295,12 +3211,10 @@ extern varray_type local_classes; - #define AUTO_TEMP_NAME "_$tmp_" - #define AUTO_TEMP_FORMAT "_$tmp_%d" - #define VTABLE_BASE "$vb" - -#define VTABLE_NAME_PREFIX (flag_vtable_thunks ? "__vt_" : "_vt$") - +#define VTABLE_NAME_PREFIX "__vt_" - #define VFIELD_BASE "$vf" - #define VFIELD_NAME "_vptr$" - #define VFIELD_NAME_FORMAT "_vptr$%s" - -#define VBASE_NAME "_vb$" - -#define VBASE_NAME_FORMAT "_vb$%s" - #define STATIC_NAME_FORMAT "_%s$%s" - #define ANON_AGGRNAME_FORMAT "$_%d" - - @@ -3317,12 +3231,10 @@ extern varray_type local_classes; - #define AUTO_TEMP_NAME "_.tmp_" - #define AUTO_TEMP_FORMAT "_.tmp_%d" - #define VTABLE_BASE ".vb" - -#define VTABLE_NAME_PREFIX (flag_vtable_thunks ? "__vt_" : "_vt.") - +#define VTABLE_NAME_PREFIX "__vt_" - #define VFIELD_BASE ".vf" - #define VFIELD_NAME "_vptr." - #define VFIELD_NAME_FORMAT "_vptr.%s" - -#define VBASE_NAME "_vb." - -#define VBASE_NAME_FORMAT "_vb.%s" - #define STATIC_NAME_FORMAT "_%s.%s" - - #define ANON_AGGRNAME_FORMAT "._%d" - @@ -3346,7 +3258,7 @@ extern varray_type local_classes; - #define AUTO_TEMP_FORMAT "__tmp_%d" - #define VTABLE_BASE "__vtb" - #define VTABLE_NAME "__vt_" - -#define VTABLE_NAME_PREFIX (flag_vtable_thunks ? "__vt_" : "_vt_") - +#define VTABLE_NAME_PREFIX "__vt_" - #define VTABLE_NAME_P(ID_NODE) \ - (!strncmp (IDENTIFIER_POINTER (ID_NODE), VTABLE_NAME, \ - sizeof (VTABLE_NAME) - 1)) - @@ -3356,11 +3268,6 @@ extern varray_type local_classes; - (!strncmp (IDENTIFIER_POINTER (ID_NODE), VFIELD_NAME, \ - sizeof (VFIELD_NAME) - 1)) - #define VFIELD_NAME_FORMAT "_vptr_%s" - -#define VBASE_NAME "__vb_" - -#define VBASE_NAME_P(ID_NODE) \ - - (!strncmp (IDENTIFIER_POINTER (ID_NODE), VBASE_NAME, \ - - sizeof (VBASE_NAME) - 1)) - -#define VBASE_NAME_FORMAT "__vb_%s" - #define STATIC_NAME_FORMAT "__static_%s_%s" - - #define ANON_AGGRNAME_PREFIX "__anon_" - @@ -3386,21 +3293,10 @@ extern varray_type local_classes; - - #define VTBL_PTR_TYPE "__vtbl_ptr_type" - #define VTABLE_DELTA_NAME "__delta" - -#define VTABLE_INDEX_NAME "__index" - #define VTABLE_PFN_NAME "__pfn" - -#define VTABLE_DELTA2_NAME "__delta2" - - #define EXCEPTION_CLEANUP_NAME "exception cleanup" - - -/* The name used as a prefix for VTTs. When the new ABI mangling - - scheme is implemented, this should be removed. */ - - - -#define VTT_NAME_PREFIX "__vtt_" - - - -/* The name used as a prefix for construction vtables. */ - - - -#define CTOR_VTBL_NAME_PREFIX "__ctorvt_" - - - #define THIS_NAME_P(ID_NODE) (strcmp(IDENTIFIER_POINTER (ID_NODE), "this") == 0) - - #if !defined(NO_DOLLAR_IN_LABEL) || !defined(NO_DOT_IN_LABEL) - @@ -3414,10 +3310,6 @@ extern varray_type local_classes; - && IDENTIFIER_POINTER (ID_NODE)[2] == 't' \ - && IDENTIFIER_POINTER (ID_NODE)[3] == JOINER) - - -#define VBASE_NAME_P(ID_NODE) (IDENTIFIER_POINTER (ID_NODE)[1] == 'v' \ - - && IDENTIFIER_POINTER (ID_NODE)[2] == 'b' \ - - && IDENTIFIER_POINTER (ID_NODE)[3] == JOINER) - - - #define TEMP_NAME_P(ID_NODE) (!strncmp (IDENTIFIER_POINTER (ID_NODE), AUTO_TEMP_NAME, sizeof (AUTO_TEMP_NAME)-1)) - #define VFIELD_NAME_P(ID_NODE) (!strncmp (IDENTIFIER_POINTER (ID_NODE), VFIELD_NAME, sizeof(VFIELD_NAME)-1)) - - @@ -3431,14 +3323,6 @@ extern varray_type local_classes; - && IDENTIFIER_POINTER (ID_NODE)[1] <= '9') - #endif /* !defined(NO_DOLLAR_IN_LABEL) || !defined(NO_DOT_IN_LABEL) */ - - -/* Store the vbase pointer field name for type TYPE into pointer BUF. */ - -#define FORMAT_VBASE_NAME(BUF,TYPE) do { \ - - char *wbuf = (char *) alloca (TYPE_ASSEMBLER_NAME_LENGTH (TYPE) \ - - + sizeof (VBASE_NAME) + 1); \ - - sprintf (wbuf, VBASE_NAME_FORMAT, TYPE_ASSEMBLER_NAME_STRING (TYPE)); \ - - (BUF) = wbuf; \ - -} while (0) - - - /* Returns non-zero iff NODE is a declaration for the global function - `main'. */ - #define DECL_MAIN_P(NODE) \ - @@ -3742,9 +3626,10 @@ extern tree strip_top_quals - extern tree perform_implicit_conversion PARAMS ((tree, tree)); - - /* in class.c */ - +extern tree build_base_path PARAMS ((enum tree_code, tree, tree, int)); - extern tree build_vbase_path PARAMS ((enum tree_code, tree, tree, tree, int)); - extern tree build_vtbl_ref PARAMS ((tree, tree)); - -extern tree build_vfn_ref PARAMS ((tree *, tree, tree)); - +extern tree build_vfn_ref PARAMS ((tree, tree)); - extern tree get_vtable_decl PARAMS ((tree, int)); - extern void add_method PARAMS ((tree, tree, int)); - extern int currently_open_class PARAMS ((tree)); - @@ -3781,8 +3666,6 @@ extern tree get_primary_binfo - extern tree convert_to_reference PARAMS ((tree, tree, int, int, tree)); - extern tree convert_from_reference PARAMS ((tree)); - extern tree convert_lvalue PARAMS ((tree, tree)); - -extern tree convert_pointer_to_real PARAMS ((tree, tree)); - -extern tree convert_pointer_to PARAMS ((tree, tree)); - extern tree ocp_convert PARAMS ((tree, tree, int, int)); - extern tree cp_convert PARAMS ((tree, tree)); - extern tree convert_to_void PARAMS ((tree, const char */*implicit context*/)); - @@ -4216,6 +4099,7 @@ extern int tinfo_decl_p - extern int emit_tinfo_decl PARAMS((tree *, void *)); - - /* in search.c */ - +extern tree lookup_base PARAMS ((tree, tree, base_access, base_kind *)); - extern int types_overlap_p PARAMS ((tree, tree)); - extern tree get_vbase PARAMS ((tree, tree)); - extern tree get_binfo PARAMS ((tree, tree, int)); - @@ -4229,7 +4113,6 @@ extern tree lookup_fnfields PARAMS ((t - extern tree lookup_member PARAMS ((tree, tree, int, int)); - extern int look_for_overrides PARAMS ((tree, tree)); - extern void get_pure_virtuals PARAMS ((tree)); - -extern tree init_vbase_pointers PARAMS ((tree, tree)); - extern void get_vbase_types PARAMS ((tree)); - extern void maybe_suppress_debug_info PARAMS ((tree)); - extern void note_debug_info_needed PARAMS ((tree)); - @@ -4265,11 +4148,9 @@ extern tree dfs_marked_real_bases_queue_ - extern tree dfs_skip_vbases PARAMS ((tree, void *)); - extern tree marked_vtable_pathp PARAMS ((tree, void *)); - extern tree unmarked_vtable_pathp PARAMS ((tree, void *)); - -extern tree convert_pointer_to_vbase PARAMS ((tree, tree)); - extern tree find_vbase_instance PARAMS ((tree, tree)); - extern tree binfo_for_vbase PARAMS ((tree, tree)); - extern tree binfo_via_virtual PARAMS ((tree, tree)); - -extern void fixup_all_virtual_upcast_offsets PARAMS ((tree)); - - /* in semantics.c */ - extern void init_cp_semantics PARAMS ((void)); - Index: gcc/cp/cvt.c - =================================================================== - RCS file: /cvs/gcc/gcc/gcc/cp/cvt.c,v - retrieving revision 1.97.2.3 - diff -u -p -r1.97.2.3 cvt.c - --- gcc/cp/cvt.c 2001/08/17 04:31:27 1.97.2.3 - +++ gcc/cp/cvt.c 2002/02/01 22:44:28 - @@ -141,44 +141,35 @@ cp_convert_to_pointer (type, expr, force - && TREE_CODE (TREE_TYPE (type)) == RECORD_TYPE - && IS_AGGR_TYPE (TREE_TYPE (type)) - && IS_AGGR_TYPE (TREE_TYPE (intype)) - - && TREE_CODE (TREE_TYPE (intype)) == RECORD_TYPE - - /* If EXPR is NULL, then we don't need to do any arithmetic - - to convert it: - - - - [conv.ptr] - - - - The null pointer value is converted to the null pointer - - value of the destination type. */ - - && !integer_zerop (expr)) - + && TREE_CODE (TREE_TYPE (intype)) == RECORD_TYPE) - { - enum tree_code code = PLUS_EXPR; - - tree binfo = get_binfo (TREE_TYPE (type), TREE_TYPE (intype), 1); - - if (binfo == error_mark_node) - - return error_mark_node; - - if (binfo == NULL_TREE) - + tree binfo; - + - + /* Try derived to base conversion. */ - + binfo = lookup_base (TREE_TYPE (intype), TREE_TYPE (type), - + ba_check, NULL); - + if (!binfo) - { - - binfo = get_binfo (TREE_TYPE (intype), TREE_TYPE (type), 1); - - if (binfo == error_mark_node) - - return error_mark_node; - + /* Try base to derived conversion. */ - + binfo = lookup_base (TREE_TYPE (type), TREE_TYPE (intype), - + ba_check, NULL); - code = MINUS_EXPR; - } - + if (binfo == error_mark_node) - + return error_mark_node; - if (binfo) - { - - if (TYPE_USES_VIRTUAL_BASECLASSES (TREE_TYPE (type)) - - || TYPE_USES_VIRTUAL_BASECLASSES (TREE_TYPE (intype)) - - || ! BINFO_OFFSET_ZEROP (binfo)) - + expr = build_base_path (code, expr, binfo, 0); - + /* Add any qualifier conversions. */ - + if (!same_type_p (TREE_TYPE (TREE_TYPE (expr)), - + TREE_TYPE (type))) - { - - /* Need to get the path we took. */ - - tree path; - - - - if (code == PLUS_EXPR) - - get_base_distance (TREE_TYPE (type), TREE_TYPE (intype), - - 0, &path); - - else - - get_base_distance (TREE_TYPE (intype), TREE_TYPE (type), - - 0, &path); - - return build_vbase_path (code, type, expr, path, 0); - + expr = build1 (NOP_EXPR, type, expr); - + TREE_CONSTANT (expr) = - + TREE_CONSTANT (TREE_OPERAND (expr, 0)); - } - + return expr; - } - } - - @@ -187,36 +178,29 @@ cp_convert_to_pointer (type, expr, force - tree b1; - tree b2; - tree binfo; - - tree virt_binfo; - - enum tree_code code; - + enum tree_code code = PLUS_EXPR; - + base_kind bk; - - b1 = TYPE_OFFSET_BASETYPE (TREE_TYPE (type)); - b2 = TYPE_OFFSET_BASETYPE (TREE_TYPE (intype)); - - binfo = get_binfo (b2, b1, 1); - - - - if (binfo == NULL_TREE) - + binfo = lookup_base (b1, b2, ba_check, &bk); - + if (!binfo) - { - - binfo = get_binfo (b1, b2, 1); - + binfo = lookup_base (b2, b1, ba_check, &bk); - code = MINUS_EXPR; - } - - else - - code = PLUS_EXPR; - - - if (binfo == error_mark_node) - return error_mark_node; - - - virt_binfo = binfo_from_vbase (binfo); - - if (virt_binfo) - + if (bk == bk_via_virtual) - { - if (force) - - cp_warning ("pointer to member cast via virtual base `%T' of `%T'", - - BINFO_TYPE (virt_binfo), - - BINFO_TYPE (BINFO_INHERITANCE_CHAIN (virt_binfo))); - + cp_warning ("pointer to member cast from `%T' to `%T' is via virtual base", - + TREE_TYPE (intype), TREE_TYPE (type)); - else - { - - cp_error ("pointer to member cast via virtual base `%T' of `%T'", - - BINFO_TYPE (virt_binfo), - - BINFO_TYPE (BINFO_INHERITANCE_CHAIN (virt_binfo))); - + cp_error ("pointer to member cast from `%T' to `%T' is via virtual base", - + TREE_TYPE (intype), TREE_TYPE (type)); - return error_mark_node; - } - /* This is a reinterpret cast, whose result is unspecified. - @@ -259,8 +243,8 @@ cp_convert_to_pointer (type, expr, force - return build_ptrmemfunc (TYPE_PTRMEMFUNC_FN_TYPE (type), expr, 0); - - if (TYPE_PTRMEM_P (type)) - - /* Under the new ABI, a NULL pointer-to-member is represented - - by -1, not by zero. */ - + /* A NULL pointer-to-member is represented by -1, not by - + zero. */ - expr = build_int_2 (-1, -1); - else - expr = build_int_2 (0, 0); - @@ -319,34 +303,32 @@ convert_to_pointer_force (type, expr) - && TREE_CODE (TREE_TYPE (intype)) == RECORD_TYPE) - { - enum tree_code code = PLUS_EXPR; - - tree path; - - int distance = get_base_distance (TREE_TYPE (type), - - TREE_TYPE (intype), 0, &path); - - if (distance == -2) - + tree binfo; - + - + binfo = lookup_base (TREE_TYPE (intype), TREE_TYPE (type), - + ba_ignore, NULL); - + if (!binfo) - { - - cp_error ("type `%T' is ambiguous base of `%T'", - - TREE_TYPE (type), - - TREE_TYPE (intype)); - - return error_mark_node; - + binfo = lookup_base (TREE_TYPE (type), TREE_TYPE (intype), - + ba_ignore, NULL); - + code = MINUS_EXPR; - } - - if (distance == -1) - + if (binfo == error_mark_node) - + return error_mark_node; - + if (binfo) - { - - distance = get_base_distance (TREE_TYPE (intype), - - TREE_TYPE (type), 0, &path); - - if (distance == -2) - - { - - cp_error ("type `%T' is ambiguous base of `%T'", - - TREE_TYPE (intype), - - TREE_TYPE (type)); - - return error_mark_node; - - } - - if (distance < 0) - - /* Doesn't need any special help from us. */ - - return build1 (NOP_EXPR, type, expr); - - - - code = MINUS_EXPR; - + expr = build_base_path (code, expr, binfo, 0); - + /* Add any qualifier conversions. */ - + if (!same_type_p (TREE_TYPE (TREE_TYPE (expr)), - + TREE_TYPE (type))) - + { - + expr = build1 (NOP_EXPR, type, expr); - + TREE_CONSTANT (expr) = - + TREE_CONSTANT (TREE_OPERAND (expr, 0)); - + } - + return expr; - } - - return build_vbase_path (code, type, expr, path, 0); - + - } - } - - @@ -406,12 +388,12 @@ build_up_reference (type, arg, flags) - && IS_AGGR_TYPE (target_type)) - { - /* We go through get_binfo for the access control. */ - - tree binfo = get_binfo (target_type, argtype, 1); - + tree binfo = lookup_base (argtype, target_type, ba_check, NULL); - if (binfo == error_mark_node) - return error_mark_node; - if (binfo == NULL_TREE) - return error_not_base_type (target_type, argtype); - - rval = convert_pointer_to_real (binfo, rval); - + rval = build_base_path (PLUS_EXPR, rval, binfo, 1); - } - else - rval - @@ -610,87 +592,6 @@ convert_lvalue (totype, expr) - expr = convert_to_reference (totype, expr, CONV_IMPLICIT, LOOKUP_NORMAL, - NULL_TREE); - return convert_from_reference (expr); - -} - - - -/* Call this when we know (for any reason) that expr is not, in fact, - - zero. This routine is like convert_pointer_to, but it pays - - attention to which specific instance of what type we want to - - convert to. This routine should eventually become - - convert_to_pointer after all references to convert_to_pointer - - are removed. */ - - - -tree - -convert_pointer_to_real (binfo, expr) - - tree binfo, expr; - -{ - - register tree intype = TREE_TYPE (expr); - - tree ptr_type; - - tree type, rval; - - - - if (intype == error_mark_node) - - return error_mark_node; - - - - if (TREE_CODE (binfo) == TREE_VEC) - - type = BINFO_TYPE (binfo); - - else if (IS_AGGR_TYPE (binfo)) - - { - - type = binfo; - - } - - else - - { - - type = binfo; - - binfo = NULL_TREE; - - } - - - - ptr_type = cp_build_qualified_type (type, - - CP_TYPE_QUALS (TREE_TYPE (intype))); - - ptr_type = build_pointer_type (ptr_type); - - if (same_type_p (ptr_type, TYPE_MAIN_VARIANT (intype))) - - return expr; - - - - my_friendly_assert (!integer_zerop (expr), 191); - - - - intype = TYPE_MAIN_VARIANT (TREE_TYPE (intype)); - - if (TREE_CODE (type) == RECORD_TYPE - - && TREE_CODE (intype) == RECORD_TYPE - - && type != intype) - - { - - tree path; - - int distance - - = get_base_distance (binfo, intype, 0, &path); - - - - /* This function shouldn't be called with unqualified arguments - - but if it is, give them an error message that they can read. */ - - if (distance < 0) - - { - - cp_error ("cannot convert a pointer of type `%T' to a pointer of type `%T'", - - intype, type); - - - - if (distance == -2) - - cp_error ("because `%T' is an ambiguous base class", type); - - return error_mark_node; - - } - - - - return build_vbase_path (PLUS_EXPR, ptr_type, expr, path, 1); - - } - - rval = build1 (NOP_EXPR, ptr_type, - - TREE_CODE (expr) == NOP_EXPR ? TREE_OPERAND (expr, 0) : expr); - - TREE_CONSTANT (rval) = TREE_CONSTANT (expr); - - return rval; - -} - - - -/* Call this when we know (for any reason) that expr is - - not, in fact, zero. This routine gets a type out of the first - - argument and uses it to search for the type to convert to. If there - - is more than one instance of that type in the expr, the conversion is - - ambiguous. This routine should eventually go away, and all - - callers should use convert_to_pointer_real. */ - - - -tree - -convert_pointer_to (binfo, expr) - - tree binfo, expr; - -{ - - return convert_pointer_to_real (binfo, expr); - } - - /* C++ conversions, preference to static cast conversions. */ - Index: gcc/cp/decl.c - =================================================================== - RCS file: /cvs/gcc/gcc/gcc/cp/decl.c,v - retrieving revision 1.747.2.36 - diff -u -p -r1.747.2.36 decl.c - --- gcc/cp/decl.c 2002/01/18 03:36:08 1.747.2.36 - +++ gcc/cp/decl.c 2002/02/01 22:44:37 - @@ -51,8 +51,7 @@ extern tree global_namespace; - extern int (*valid_lang_attribute) PARAMS ((tree, tree, tree, tree)); - - #ifndef BOOL_TYPE_SIZE - -/* In the new ABI, `bool' has size and alignment `1', on all - - platforms. */ - +/* `bool' has size and alignment `1', on all platforms. */ - #define BOOL_TYPE_SIZE CHAR_TYPE_SIZE - #endif - - @@ -166,28 +165,13 @@ tree error_mark_list; - - tree vtable_entry_type; - tree delta_type_node; - -#if 0 - - Old rtti stuff. - - tree __baselist_desc_type_node; - - tree __i_desc_type_node, __m_desc_type_node; - - tree __t_desc_array_type, __i_desc_array_type, __m_desc_array_type; - -#endif - tree __t_desc_type_node; - -#if 0 - - tree __tp_desc_type_node; - -#endif - tree ti_desc_type_node; - tree bltn_desc_type_node, ptr_desc_type_node; - tree ary_desc_type_node, func_desc_type_node, enum_desc_type_node; - tree class_desc_type_node, si_class_desc_type_node, vmi_class_desc_type_node; - tree ptm_desc_type_node; - tree base_desc_type_node; - -#if 0 - - Not needed yet? May be needed one day? - - tree __bltn_desc_array_type, __user_desc_array_type, __class_desc_array_type; - - tree __ptr_desc_array_type, __attr_dec_array_type, __func_desc_array_type; - - tree __ptmf_desc_array_type, __ptmd_desc_array_type; - -#endif - - tree class_type_node, record_type_node, union_type_node, enum_type_node; - tree unknown_type_node; - @@ -6317,14 +6301,11 @@ initialize_predefined_identifiers () - { "__comp_dtor", &complete_dtor_identifier, 1 }, - { "__base_dtor", &base_dtor_identifier, 1 }, - { "__deleting_dtor", &deleting_dtor_identifier, 1 }, - - { VTABLE_DELTA2_NAME, &delta2_identifier, 0 }, - - { VTABLE_DELTA_NAME, &delta_identifier, 0 }, - { IN_CHARGE_NAME, &in_charge_identifier, 0 }, - - { VTABLE_INDEX_NAME, &index_identifier, 0 }, - { "nelts", &nelts_identifier, 0 }, - { THIS_NAME, &this_identifier, 0 }, - + { VTABLE_DELTA_NAME, &delta_identifier, 0 }, - { VTABLE_PFN_NAME, &pfn_identifier, 0 }, - - { "__pfn_or_delta2", &pfn_or_delta2_identifier, 0 }, - { "_vptr", &vptr_identifier, 0 }, - { "__vtt_parm", &vtt_parm_identifier, 0 }, - { "std", &std_identifier, 0 }, - @@ -6349,11 +6330,6 @@ init_decl_processing () - { - tree fields[20]; - - - /* Check to see that the user did not specify an invalid combination - - of command-line options. */ - - if (!flag_vtable_thunks) - - error ("the ABI requires vtable thunks"); - - - /* Create all the identifiers we need. */ - initialize_predefined_identifiers (); - - @@ -6493,41 +6469,16 @@ init_decl_processing () - TYPE_POINTER_TO (unknown_type_node) = unknown_type_node; - TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node; - - - if (flag_vtable_thunks) - - { - - /* Make sure we get a unique function type, so we can give - - its pointer type a name. (This wins for gdb.) */ - - tree vfunc_type = make_node (FUNCTION_TYPE); - - TREE_TYPE (vfunc_type) = integer_type_node; - - TYPE_ARG_TYPES (vfunc_type) = NULL_TREE; - - layout_type (vfunc_type); - - - - vtable_entry_type = build_pointer_type (vfunc_type); - - } - - else - - { - - vtable_entry_type = make_aggr_type (RECORD_TYPE); - - fields[0] = build_decl (FIELD_DECL, delta_identifier, - - delta_type_node); - - fields[1] = build_decl (FIELD_DECL, index_identifier, - - delta_type_node); - - fields[2] = build_decl (FIELD_DECL, pfn_identifier, - - ptr_type_node); - - finish_builtin_type (vtable_entry_type, VTBL_PTR_TYPE, fields, 2, - - double_type_node); - - - - /* Make this part of an invisible union. */ - - fields[3] = copy_node (fields[2]); - - TREE_TYPE (fields[3]) = delta_type_node; - - DECL_NAME (fields[3]) = delta2_identifier; - - DECL_MODE (fields[3]) = TYPE_MODE (delta_type_node); - - DECL_SIZE (fields[3]) = TYPE_SIZE (delta_type_node); - - DECL_SIZE_UNIT (fields[3]) = TYPE_SIZE_UNIT (delta_type_node); - - TREE_UNSIGNED (fields[3]) = 0; - - TREE_CHAIN (fields[2]) = fields[3]; - - vtable_entry_type = build_qualified_type (vtable_entry_type, - - TYPE_QUAL_CONST); - - } - + { - + /* Make sure we get a unique function type, so we can give - + its pointer type a name. (This wins for gdb.) */ - + tree vfunc_type = make_node (FUNCTION_TYPE); - + TREE_TYPE (vfunc_type) = integer_type_node; - + TYPE_ARG_TYPES (vfunc_type) = NULL_TREE; - + layout_type (vfunc_type); - + - + vtable_entry_type = build_pointer_type (vfunc_type); - + } - record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type); - - vtbl_type_node - @@ -9473,7 +9424,6 @@ check_special_function_return_type (sfk, - if (type) - cp_error ("return type specification for constructor invalid"); - - - /* In the new ABI constructors do not return a value. */ - type = void_type_node; - break; - - Index: gcc/cp/decl2.c - =================================================================== - RCS file: /cvs/gcc/gcc/gcc/cp/decl2.c,v - retrieving revision 1.437.2.29 - diff -u -p -r1.437.2.29 decl2.c - --- gcc/cp/decl2.c 2001/11/30 03:12:42 1.437.2.29 - +++ gcc/cp/decl2.c 2002/02/01 22:44:40 - @@ -200,11 +200,6 @@ int warn_long_long = 1; - - int warn_ctor_dtor_privacy = 1; - - -/* True if we want to implement vtables using "thunks". - - The default is off. */ - - - -int flag_vtable_thunks = 1; - - - /* Nonzero means generate separate instantiation control files and juggle - them at link time. */ - - @@ -2262,12 +2257,9 @@ mark_vtable_entries (decl) - - for (; entries; entries = TREE_CHAIN (entries)) - { - - tree fnaddr; - + tree fnaddr = TREE_VALUE (entries); - tree fn; - - - fnaddr = (flag_vtable_thunks ? TREE_VALUE (entries) - - : FNADDR_FROM_VTABLE_ENTRY (TREE_VALUE (entries))); - - - if (TREE_CODE (fnaddr) != ADDR_EXPR - && TREE_CODE (fnaddr) != FDESC_EXPR) - /* This entry is an offset: a virtual base class offset, a - @@ -2307,12 +2299,12 @@ comdat_linkage (decl) - address, and this will not hold when we emit multiple copies of - the function. However, there's little else we can do. - - - Also, by default, the typeinfo implementation for the new ABI - - assumes that there will be only one copy of the string used as - - the name for each type. Therefore, if weak symbols are - - unavailable, the run-time library should perform a more - - conservative check; it should perform a string comparison, - - rather than an address comparison. */ - + Also, by default, the typeinfo implementation assumes that - + there will be only one copy of the string used as the name for - + each type. Therefore, if weak symbols are unavailable, the - + run-time library should perform a more conservative check; it - + should perform a string comparison, rather than an address - + comparison. */ - TREE_PUBLIC (decl) = 0; - else - { - @@ -2751,8 +2743,8 @@ get_guard (decl) - { - tree guard_type; - - - /* Under the new ABI, we use a type that is big enough to - - contain a mutex as well as an integer counter. */ - + /* We use a type that is big enough to contain a mutex as well - + as an integer counter. */ - guard_type = long_long_integer_type_node; - guard = build_decl (VAR_DECL, sname, guard_type); - - @@ -2779,8 +2771,8 @@ static tree - get_guard_bits (guard) - tree guard; - { - - /* Under the new ABI, we only set the first byte of the guard, - - in order to leave room for a mutex in the high-order bits. */ - + /* We only set the first byte of the guard, in order to leave room - + for a mutex in the high-order bits. */ - guard = build1 (ADDR_EXPR, - build_pointer_type (TREE_TYPE (guard)), - guard); - Index: gcc/cp/error.c - =================================================================== - RCS file: /cvs/gcc/gcc/gcc/cp/error.c,v - retrieving revision 1.149.2.5 - diff -u -p -r1.149.2.5 error.c - --- gcc/cp/error.c 2001/09/15 19:43:41 1.149.2.5 - +++ gcc/cp/error.c 2002/02/01 22:44:43 - @@ -950,13 +950,8 @@ dump_decl (t, flags) - if (DECL_NAME (t) && VTABLE_NAME_P (DECL_NAME (t))) - { - output_add_string (scratch_buffer, "vtable for "); - - if (TYPE_P (DECL_CONTEXT (t))) - - dump_type (DECL_CONTEXT (t), flags); - - else - - /* This case can arise with -fno-vtable-thunks. See - - expand_upcast_fixups. It's not clear what to print - - here. */ - - print_identifier (scratch_buffer, ""); - + my_friendly_assert (TYPE_P (DECL_CONTEXT (t)), 20010720); - + dump_type (DECL_CONTEXT (t), flags); - break; - } - /* else fall through */ - @@ -1918,16 +1913,9 @@ dump_expr (t, flags) - case CONSTRUCTOR: - if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))) - { - - tree idx = build_component_ref (t, index_identifier, NULL_TREE, 0); - + tree idx = build_component_ref (t, pfn_identifier, NULL_TREE, 0); - - - if (integer_all_onesp (idx)) - - { - - tree pfn = PFN_FROM_PTRMEMFUNC (t); - - dump_unary_op ("&", pfn, flags | TFF_EXPR_IN_PARENS); - - break; - - } - - else if (TREE_CODE (idx) == INTEGER_CST - - && tree_int_cst_equal (idx, integer_zero_node)) - + if (integer_zerop (idx)) - { - /* A NULL pointer-to-member constant. */ - output_add_string (scratch_buffer, "(("); - Index: gcc/cp/init.c - =================================================================== - RCS file: /cvs/gcc/gcc/gcc/cp/init.c,v - retrieving revision 1.232.2.10 - diff -u -p -r1.232.2.10 init.c - --- gcc/cp/init.c 2002/01/23 12:47:11 1.232.2.10 - +++ gcc/cp/init.c 2002/02/01 22:44:44 - @@ -130,7 +130,9 @@ finish_init_stmts (stmt_expr, compound_s - - /* Constructors */ - - -/* Called from initialize_vtbl_ptrs via dfs_walk. */ - +/* Called from initialize_vtbl_ptrs via dfs_walk. BINFO is the base - + which we want to initialize the vtable pointer for, DATA is - + TREE_LIST whose TREE_VALUE is the this ptr expression. */ - - static tree - dfs_initialize_vtbl_ptrs (binfo, data) - @@ -142,16 +144,7 @@ dfs_initialize_vtbl_ptrs (binfo, data) - { - tree base_ptr = TREE_VALUE ((tree) data); - - - if (TREE_VIA_VIRTUAL (binfo)) - - base_ptr = convert_pointer_to_vbase (BINFO_TYPE (binfo), - - base_ptr); - - else - - base_ptr - - = build_vbase_path (PLUS_EXPR, - - build_pointer_type (BINFO_TYPE (binfo)), - - base_ptr, - - binfo, - - /*nonnull=*/1); - + base_ptr = build_base_path (PLUS_EXPR, base_ptr, binfo, /*nonnull=*/1); - - expand_virtual_init (binfo, base_ptr); - } - @@ -175,21 +168,13 @@ initialize_vtbl_ptrs (addr) - list = build_tree_list (type, addr); - - /* Walk through the hierarchy, initializing the vptr in each base - - class. We do these in pre-order because under the new ABI we - - can't find the virtual bases for a class until we've initialized - - the vtbl for that class. */ - + class. We do these in pre-order because can't find the virtual - + bases for a class until we've initialized the vtbl for that - + class. */ - dfs_walk_real (TYPE_BINFO (type), dfs_initialize_vtbl_ptrs, - NULL, dfs_unmarked_real_bases_queue_p, list); - dfs_walk (TYPE_BINFO (type), dfs_unmark, - dfs_marked_real_bases_queue_p, type); - - - - /* If we're not using thunks, we may need to adjust the deltas in - - the vtable to handle virtual base classes correctly. When we are - - using thunks, we either use construction vtables (which are - - preloaded with the right answers) or nothing (in which case - - vitual function calls sometimes don't work right.) */ - - if (TYPE_USES_VIRTUAL_BASECLASSES (type) && !flag_vtable_thunks) - - fixup_all_virtual_upcast_offsets (addr); - } - - /* [dcl.init]: - @@ -748,7 +733,8 @@ emit_base_init (mem_init_list, base_init - - if (init != void_list_node) - { - - member = convert_pointer_to_real (base_binfo, current_class_ptr); - + member = build_base_path (PLUS_EXPR, current_class_ptr, - + base_binfo, 1); - expand_aggr_init_1 (base_binfo, NULL_TREE, - build_indirect_ref (member, NULL_PTR), init, - LOOKUP_NORMAL); - @@ -839,20 +825,14 @@ static void - expand_virtual_init (binfo, decl) - tree binfo, decl; - { - - tree type = BINFO_TYPE (binfo); - tree vtbl, vtbl_ptr; - - tree vtype, vtype_binfo; - tree vtt_index; - - - /* Compute the location of the vtable. */ - - vtype = DECL_CONTEXT (TYPE_VFIELD (type)); - - vtype_binfo = get_binfo (vtype, TREE_TYPE (TREE_TYPE (decl)), 0); - - - /* Compute the initializer for vptr. */ - vtbl = build_vtbl_address (binfo); - - - /* Under the new ABI, we may get this vptr from a VTT, if this is a - - subobject constructor or subobject destructor. */ - + /* We may get this vptr from a VTT, if this is a subobject - + constructor or subobject destructor. */ - vtt_index = BINFO_VPTR_INDEX (binfo); - if (vtt_index) - { - @@ -879,10 +859,9 @@ expand_virtual_init (binfo, decl) - } - - /* Compute the location of the vtpr. */ - - decl = convert_pointer_to_real (vtype_binfo, decl); - - vtbl_ptr = build_vfield_ref (build_indirect_ref (decl, NULL_PTR), vtype); - - if (vtbl_ptr == error_mark_node) - - return; - + vtbl_ptr = build_vfield_ref (build_indirect_ref (decl, NULL), - + TREE_TYPE (binfo)); - + my_friendly_assert (vtbl_ptr != error_mark_node, 20010730); - - /* Assign the vtable to the vptr. */ - vtbl = convert_force (TREE_TYPE (vtbl_ptr), vtbl, 0); - @@ -951,22 +930,6 @@ construct_virtual_bases (type, this_ref, - /* If there are no virtual baseclasses, we shouldn't even be here. */ - my_friendly_assert (TYPE_USES_VIRTUAL_BASECLASSES (type), 19990621); - - - /* First set the pointers in our object that tell us where to find - - our virtual baseclasses. */ - - if (!vbase_offsets_in_vtable_p ()) - - { - - tree if_stmt; - - tree result; - - - - if_stmt = begin_if_stmt (); - - finish_if_stmt_cond (flag, if_stmt); - - result = init_vbase_pointers (type, this_ptr); - - if (result) - - finish_expr_stmt (build_compound_expr (result)); - - finish_then_clause (if_stmt); - - finish_if_stmt (); - - } - - - /* Now, run through the baseclasses, initializing each. */ - for (vbases = CLASSTYPE_VBASECLASSES (type); vbases; - vbases = TREE_CHAIN (vbases)) - @@ -1919,14 +1882,17 @@ resolve_offset_ref (exp) - if (TREE_CODE (exp) == OFFSET_REF && TREE_CODE (type) == OFFSET_TYPE) - base = build_scoped_ref (base, TYPE_OFFSET_BASETYPE (type)); - - - addr = build_unary_op (ADDR_EXPR, base, 0); - - addr = convert_pointer_to (basetype, addr); - + /* Don't check access on the conversion; we might be after a member - + promoted by an access- or using-declaration, and we have already - + checked access for the member itself. */ - + basetype = lookup_base (TREE_TYPE (base), basetype, ba_ignore, NULL); - + expr = build_base_path (PLUS_EXPR, base, basetype, 1); - - - if (addr == error_mark_node) - + if (expr == error_mark_node) - return error_mark_node; - - expr = build (COMPONENT_REF, TREE_TYPE (member), - - build_indirect_ref (addr, NULL_PTR), member); - + expr, member); - return convert_from_reference (expr); - } - - @@ -1949,7 +1915,10 @@ resolve_offset_ref (exp) - } - - basetype = TYPE_OFFSET_BASETYPE (TREE_TYPE (TREE_TYPE (member))); - - addr = convert_pointer_to (basetype, addr); - + basetype = lookup_base (TREE_TYPE (TREE_TYPE (addr)), - + basetype, ba_check, NULL); - + addr = build_base_path (PLUS_EXPR, addr, basetype, 1); - + - member = cp_convert (ptrdiff_type_node, member); - - addr = build (PLUS_EXPR, build_pointer_type (type), addr, member); - @@ -2212,7 +2181,7 @@ build_java_class_ref (type) - jclass_node = TREE_TYPE (jclass_node); - } - - - /* Mangle the class$ field, new and old ABI */ - + /* Mangle the class$ field */ - { - tree field; - for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field)) - @@ -2251,8 +2220,8 @@ get_cookie_size (type) - { - tree cookie_size; - - - /* Under the new ABI, we need to allocate an additional max - - (sizeof (size_t), alignof (true_type)) bytes. */ - + /* We need to allocate an additional max (sizeof (size_t), alignof - + (true_type)) bytes. */ - tree sizetype_size; - tree type_align; - - @@ -2359,9 +2328,7 @@ build_new_1 (exp) - if (!has_array || !TYPE_VEC_NEW_USES_COOKIE (true_type)) - use_cookie = 0; - /* When using placement new, users may not realize that they need - - the extra storage. Under the old ABI, we don't allocate the - - cookie whenever they use one placement argument of type `void - - *'. Under the new ABI, we require that the operator called be - + the extra storage. We require that the operator called be - the global placement operator delete[]. */ - else if (placement && !TREE_CHAIN (placement) - && same_type_p (TREE_TYPE (TREE_VALUE (placement)), - @@ -2478,9 +2445,8 @@ build_new_1 (exp) - tree cookie; - - /* Store the number of bytes allocated so that we can know how - - many elements to destroy later. Under the new ABI, we use - - the last sizeof (size_t) bytes to store the number of - - elements. */ - + many elements to destroy later. We use the last sizeof - + (size_t) bytes to store the number of elements. */ - cookie = build (MINUS_EXPR, build_pointer_type (sizetype), - alloc_node, size_in_bytes (sizetype)); - cookie = build_indirect_ref (cookie, NULL_PTR); - Index: gcc/cp/lang-specs.h - =================================================================== - RCS file: /cvs/gcc/gcc/gcc/cp/lang-specs.h,v - retrieving revision 1.39.2.4 - diff -u -p -r1.39.2.4 lang-specs.h - --- gcc/cp/lang-specs.h 2001/06/08 00:00:32 1.39.2.4 - +++ gcc/cp/lang-specs.h 2002/02/01 22:44:45 - @@ -38,14 +38,14 @@ Boston, MA 02111-1307, USA. */ - "%{E|M|MM:cpp0 -lang-c++ %{!no-gcc:-D__GNUG__=%v1}\ - %{!Wno-deprecated:-D__GXX_DEPRECATED}\ - %{!fno-exceptions:-D__EXCEPTIONS}\ - - %{!fno-new-abi:-D__GXX_ABI_VERSION=100}\ - + -D__GXX_ABI_VERSION=100\ - %{ansi:-D__STRICT_ANSI__ -trigraphs -$} %(cpp_options)}\ - %{!E:%{!M:%{!MM:\ - %{save-temps:cpp0 -lang-c++ \ - %{!no-gcc:-D__GNUG__=%v1}\ - %{!Wno-deprecated:-D__GXX_DEPRECATED}\ - %{!fno-exceptions:-D__EXCEPTIONS}\ - - %{!fno-new-abi:-D__GXX_ABI_VERSION=100}\ - + -D__GXX_ABI_VERSION=100\ - %{ansi:-D__STRICT_ANSI__ -trigraphs -$}\ - %(cpp_options) %b.ii \n}\ - cc1plus %{save-temps:-fpreprocessed %b.ii}\ - @@ -53,7 +53,7 @@ Boston, MA 02111-1307, USA. */ - %{!no-gcc:-D__GNUG__=%v1} \ - %{!Wno-deprecated:-D__GXX_DEPRECATED}\ - %{!fno-exceptions:-D__EXCEPTIONS}\ - - %{!fno-new-abi:-D__GXX_ABI_VERSION=100}\ - + -D__GXX_ABI_VERSION=100\ - %{ansi:-D__STRICT_ANSI__}}\ - %{ansi:-trigraphs -$}\ - %(cc1_options) %2 %{+e1*}\ - Index: gcc/cp/mangle.c - =================================================================== - RCS file: /cvs/gcc/gcc/gcc/cp/mangle.c,v - retrieving revision 1.26.4.9 - diff -u -p -r1.26.4.9 mangle.c - --- gcc/cp/mangle.c 2001/12/03 17:38:50 1.26.4.9 - +++ gcc/cp/mangle.c 2002/02/01 22:44:46 - @@ -1,4 +1,4 @@ - -/* Name mangling for the new standard C++ ABI. - +/* Name mangling for the 3.0 C++ ABI. - Copyright (C) 2000, 2001 Free Software Foundation, Inc. - Written by Alex Samuel - - @@ -1195,10 +1195,7 @@ write_special_name_constructor (ctor) - ::= D0 # deleting (in-charge) destructor - ::= D1 # complete object (in-charge) destructor - ::= D2 # base object (not-in-charge) destructor - - - - We also need to provide unique mngled names for old-ABI - - destructors, sometimes. These should only be used internally. We - - use "D*INTERNAL*" for these. */ - + */ - - static void - write_special_name_destructor (dtor) - Index: gcc/cp/method.c - =================================================================== - RCS file: /cvs/gcc/gcc/gcc/cp/method.c,v - retrieving revision 1.190.2.15 - diff -u -p -r1.190.2.15 method.c - --- gcc/cp/method.c 2002/01/07 20:51:38 1.190.2.15 - +++ gcc/cp/method.c 2002/02/01 22:44:46 - @@ -600,8 +600,6 @@ do_build_copy_constructor (fndecl) - { - if (VFIELD_NAME_P (DECL_NAME (field))) - continue; - - if (VBASE_NAME_P (DECL_NAME (field))) - - continue; - - /* True for duplicate members. */ - if (IDENTIFIER_CLASS_VALUE (DECL_NAME (field)) != field) - @@ -689,8 +687,6 @@ do_build_assign_ref (fndecl) - if (DECL_NAME (field)) - { - if (VFIELD_NAME_P (DECL_NAME (field))) - - continue; - - if (VBASE_NAME_P (DECL_NAME (field))) - continue; - - /* True for duplicate members. */ - Index: gcc/cp/rtti.c - =================================================================== - RCS file: /cvs/gcc/gcc/gcc/cp/rtti.c,v - retrieving revision 1.109.2.7 - diff -u -p -r1.109.2.7 rtti.c - --- gcc/cp/rtti.c 2001/12/06 12:54:19 1.109.2.7 - +++ gcc/cp/rtti.c 2002/02/01 22:44:47 - @@ -41,7 +41,6 @@ Boston, MA 02111-1307, USA. */ - - extern struct obstack permanent_obstack; - - -static tree build_headof_sub PARAMS((tree)); - static tree build_headof PARAMS((tree)); - static tree ifnonnull PARAMS((tree, tree)); - static tree tinfo_name PARAMS((tree)); - @@ -86,23 +85,6 @@ init_rtti_processing () - build_qualified_type (type_info_type_node, TYPE_QUAL_CONST); - } - - -/* Given a pointer to an object with at least one virtual table - - pointer somewhere, return a pointer to a possible sub-object that - - has a virtual table pointer in it that is the vtable parent for - - that sub-object. */ - - - -static tree - -build_headof_sub (exp) - - tree exp; - -{ - - tree type = TREE_TYPE (TREE_TYPE (exp)); - - tree basetype = CLASSTYPE_RTTI (type); - - tree binfo = get_binfo (basetype, type, 0); - - - - exp = convert_pointer_to_real (binfo, exp); - - return exp; - -} - - - /* Given the expression EXP of type `class *', return the head of the - object pointed to by EXP with type cv void*, if the class has any - virtual functions (TYPE_POLYMORPHIC_P), else just return the - @@ -113,7 +95,6 @@ build_headof (exp) - tree exp; - { - tree type = TREE_TYPE (exp); - - tree aref; - tree offset; - tree index; - - @@ -128,24 +109,14 @@ build_headof (exp) - return error_mark_node; - } - - - /* If we don't have rtti stuff, get to a sub-object that does. */ - - if (!CLASSTYPE_VFIELDS (TREE_TYPE (TREE_TYPE (exp)))) - - exp = build_headof_sub (exp); - - - /* We use this a couple of times below, protect it. */ - exp = save_expr (exp); - - - /* Under the new ABI, the offset-to-top field is at index -2 from - - the vptr. */ - + /* The offset-to-top field is at index -2 from the vptr. */ - index = build_int_2 (-2, -1); - - - aref = build_vtbl_ref (build_indirect_ref (exp, NULL_PTR), index); - + offset = build_vtbl_ref (build_indirect_ref (exp, NULL), index); - - - if (flag_vtable_thunks) - - offset = aref; - - else - - offset = build_component_ref (aref, delta_identifier, NULL_TREE, 0); - - - type = build_qualified_type (ptr_type_node, - CP_TYPE_QUALS (TREE_TYPE (exp))); - return build (PLUS_EXPR, type, exp, - @@ -220,22 +191,12 @@ get_tinfo_decl_dynamic (exp) - tree t; - tree index; - - - if (! flag_rtti) - - error ("taking dynamic typeid of object with -fno-rtti"); - if (CLASSTYPE_COM_INTERFACE (type)) - { - cp_error ("RTTI not supported for COM interface type `%T'", type); - return error_mark_node; - } - - - /* If we don't have rtti stuff, get to a sub-object that does. */ - - if (! CLASSTYPE_VFIELDS (type)) - - { - - exp = build_unary_op (ADDR_EXPR, exp, 0); - - exp = build_headof_sub (exp); - - exp = build_indirect_ref (exp, NULL_PTR); - - } - - - /* The RTTI information is at index -1. */ - index = integer_minus_one_node; - t = build_vtbl_ref (exp, index); - @@ -462,36 +423,12 @@ get_base_offset (binfo, parent) - { - if (! TREE_VIA_VIRTUAL (binfo)) - return BINFO_OFFSET (binfo); - - else if (! vbase_offsets_in_vtable_p ()) - - { - - const char *name; - - tree result; - - tree field; - - - - FORMAT_VBASE_NAME (name, BINFO_TYPE (binfo)); - - field = lookup_field (parent, get_identifier (name), 0, 0); - - result = byte_position (field); - - - - if (DECL_CONTEXT (field) != parent) - - { - - /* The vbase pointer might be in a non-virtual base of PARENT. - - * Adjust for the offset of that base in PARENT. */ - - tree path; - - - - get_base_distance (DECL_CONTEXT (field), parent, -1, &path); - - result = build (PLUS_EXPR, TREE_TYPE (result), - - result, BINFO_OFFSET (path)); - - result = fold (result); - - } - - return result; - - } - else - - /* Under the new ABI, we store the vtable offset at which - - the virtual base offset can be found. */ - + /* We store the vtable offset at which the virtual base offset can - + be found. */ - return convert (sizetype, - BINFO_VPTR_FIELD (binfo_for_vbase (BINFO_TYPE (binfo), - parent))); - - - } - - /* Execute a dynamic cast, as described in section 5.2.6 of the 9/93 working - @@ -600,28 +537,15 @@ build_dynamic_cast_1 (type, expr) - /* If *type is an unambiguous accessible base class of *exprtype, - convert statically. */ - { - - int distance; - - tree path; - - - - distance = get_base_distance (TREE_TYPE (type), TREE_TYPE (exprtype), 1, - - &path); - + tree binfo; - - - if (distance == -2) - - { - - cp_error ("dynamic_cast from `%T' to ambiguous base class `%T'", - - TREE_TYPE (exprtype), TREE_TYPE (type)); - - return error_mark_node; - - } - - if (distance == -3) - - { - - cp_error ("dynamic_cast from `%T' to private base class `%T'", - - TREE_TYPE (exprtype), TREE_TYPE (type)); - - return error_mark_node; - - } - + binfo = lookup_base (TREE_TYPE (exprtype), TREE_TYPE (type), - + ba_not_special, NULL); - - - if (distance >= 0) - + if (binfo) - { - - expr = build_vbase_path (PLUS_EXPR, type, expr, path, 0); - + expr = build_base_path (PLUS_EXPR, convert_from_reference (expr), - + binfo, 0); - if (TREE_CODE (exprtype) == POINTER_TYPE) - expr = non_lvalue (expr); - return expr; - @@ -843,8 +767,8 @@ tinfo_base_init (desc, target) - DECL_EXTERNAL (name_decl) = 0; - TREE_PUBLIC (name_decl) = 1; - comdat_linkage (name_decl); - - /* The new ABI specifies the external name of the string - - containing the type's name. */ - + /* External name of the string containing the type's name has a - + special name. */ - SET_DECL_ASSEMBLER_NAME (name_decl, - mangle_typeinfo_string_for_type (target)); - DECL_INITIAL (name_decl) = name_string; - @@ -1232,7 +1156,11 @@ create_real_tinfo_var (target_type, name - tree decl; - tree hidden_name; - char hidden[30]; - - - + - + /* We cannot give this the name NAME, as that already is globally - + bound to the tinfo_decl we originally created for this type in - + get_tinfo_decl. */ - + - sprintf (hidden, "%.*s_%d", - IDENTIFIER_LENGTH (tinfo_decl_id), IDENTIFIER_POINTER (tinfo_decl_id), - count++); - @@ -1314,8 +1242,7 @@ create_pseudo_type_info VPARAMS((const c - vtable_decl = get_vtable_decl (real_type, /*complete=*/1); - vtable_decl = build_unary_op (ADDR_EXPR, vtable_decl, 0); - - - /* Under the new ABI, we need to point into the middle of the - - vtable. */ - + /* We need to point into the middle of the vtable. */ - vtable_decl = build (PLUS_EXPR, - TREE_TYPE (vtable_decl), - vtable_decl, - Index: gcc/cp/search.c - =================================================================== - RCS file: /cvs/gcc/gcc/gcc/cp/search.c,v - retrieving revision 1.202.2.6 - diff -u -p -r1.202.2.6 search.c - --- gcc/cp/search.c 2001/06/08 17:12:41 1.202.2.6 - +++ gcc/cp/search.c 2002/02/01 22:44:49 - @@ -83,26 +83,21 @@ struct vbase_info - tree inits; - }; - - -static tree get_vbase_1 PARAMS ((tree, tree, unsigned int *)); - static tree lookup_field_1 PARAMS ((tree, tree)); - static int is_subobject_of_p PARAMS ((tree, tree, tree)); - -static tree virtual_context PARAMS ((tree, tree, tree)); - static tree dfs_check_overlap PARAMS ((tree, void *)); - static tree dfs_no_overlap_yet PARAMS ((tree, void *)); - static int get_base_distance_recursive - PARAMS ((tree, int, int, int, int *, tree *, tree, - int, int *, int, int)); - +static base_kind lookup_base_r - + PARAMS ((tree, tree, base_access, - + int, int, int, tree *)); - static int dynamic_cast_base_recurse PARAMS ((tree, tree, int, tree *)); - -static void expand_upcast_fixups - - PARAMS ((tree, tree, tree, tree, tree, tree, tree *)); - -static void fixup_virtual_upcast_offsets - - PARAMS ((tree, tree, int, int, tree, tree, tree, tree, - - tree *)); - static tree marked_pushdecls_p PARAMS ((tree, void *)); - static tree unmarked_pushdecls_p PARAMS ((tree, void *)); - static tree dfs_debug_unmarkedp PARAMS ((tree, void *)); - static tree dfs_debug_mark PARAMS ((tree, void *)); - -static tree dfs_init_vbase_pointers PARAMS ((tree, void *)); - static tree dfs_get_vbase_types PARAMS ((tree, void *)); - static tree dfs_push_type_decls PARAMS ((tree, void *)); - static tree dfs_push_decls PARAMS ((tree, void *)); - @@ -140,7 +135,6 @@ static tree get_shared_vbase_if_not_prim - static tree dfs_find_vbase_instance PARAMS ((tree, void *)); - static tree dfs_get_pure_virtuals PARAMS ((tree, void *)); - static tree dfs_build_inheritance_graph_order PARAMS ((tree, void *)); - -static tree dfs_vtable_path_unmark PARAMS ((tree, void *)); - - /* Allocate a level of searching. */ - - @@ -177,76 +171,6 @@ static int n_contexts_saved; - #endif /* GATHER_STATISTICS */ - - - -/* Get a virtual binfo that is found inside BINFO's hierarchy that is - - the same type as the type given in PARENT. To be optimal, we want - - the first one that is found by going through the least number of - - virtual bases. - - - - This uses a clever algorithm that updates *depth when we find the vbase, - - and cuts off other paths of search when they reach that depth. */ - - - -static tree - -get_vbase_1 (parent, binfo, depth) - - tree parent, binfo; - - unsigned int *depth; - -{ - - tree binfos; - - int i, n_baselinks; - - tree rval = NULL_TREE; - - int virtualp = TREE_VIA_VIRTUAL (binfo) != 0; - - - - *depth -= virtualp; - - if (virtualp && BINFO_TYPE (binfo) == parent) - - { - - *depth = 0; - - return binfo; - - } - - - - binfos = BINFO_BASETYPES (binfo); - - n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0; - - - - /* Process base types. */ - - for (i = 0; i < n_baselinks; i++) - - { - - tree base_binfo = TREE_VEC_ELT (binfos, i); - - tree nrval; - - - - if (*depth == 0) - - break; - - - - nrval = get_vbase_1 (parent, base_binfo, depth); - - if (nrval) - - rval = nrval; - - } - - *depth += virtualp; - - return rval; - -} - - - -/* Return the shortest path to vbase PARENT within BINFO, ignoring - - access and ambiguity. */ - - - -tree - -get_vbase (parent, binfo) - - tree parent; - - tree binfo; - -{ - - unsigned int d = (unsigned int)-1; - - return get_vbase_1 (parent, binfo, &d); - -} - - - -/* Convert EXPR to a virtual base class of type TYPE. We know that - - EXPR is a non-null POINTER_TYPE to RECORD_TYPE. We also know that - - the type of what expr points to has a virtual base of type TYPE. */ - - - -tree - -convert_pointer_to_vbase (type, expr) - - tree type; - - tree expr; - -{ - - tree vb = get_vbase (type, TYPE_BINFO (TREE_TYPE (TREE_TYPE (expr)))); - - return convert_pointer_to_real (vb, expr); - -} - - - /* Check whether the type given in BINFO is derived from PARENT. If - it isn't, return 0. If it is, but the derivation is MI-ambiguous - AND protect != 0, emit an error message and return error_mark_node. - @@ -414,9 +338,6 @@ get_base_distance_recursive (binfo, dept - If PROTECT is greater than 1, ignore any special access the current - scope might have when determining whether PARENT is inaccessible. - - - PARENT can also be a binfo, in which case that exact parent is found - - and no other. convert_pointer_to_real uses this functionality. - - - If BINFO is a binfo, its BINFO_INHERITANCE_CHAIN will be left alone. */ - - int - @@ -476,21 +397,198 @@ get_base_distance (parent, binfo, protec - if (rval && protect && rval_private) - return -3; - - - /* If they gave us the real vbase binfo, which isn't in the main binfo - - tree, deal with it. This happens when we are called from - - expand_upcast_fixups. */ - - if (rval == -1 && TREE_CODE (parent) == TREE_VEC - - && parent == binfo_for_vbase (BINFO_TYPE (parent), type)) - - { - - new_binfo = parent; - - rval = 1; - - } - - - if (path_ptr) - *path_ptr = new_binfo; - return rval; - } - - +/* Worker for lookup_base. BINFO is the binfo we are searching at, - + BASE is the RECORD_TYPE we are searching for. ACCESS is the - + required access checks. WITHIN_CURRENT_SCOPE, IS_NON_PUBLIC and - + IS_VIRTUAL indicate how BINFO was reached from the start of the - + search. WITHIN_CURRENT_SCOPE is true if we met the current scope, - + or friend thereof (this allows us to determine whether a protected - + base is accessible or not). IS_NON_PUBLIC indicates whether BINFO - + is accessible and IS_VIRTUAL indicates if it is morally virtual. - + - + If BINFO is of the required type, then *BINFO_PTR is examined to - + compare with any other instance of BASE we might have already - + discovered. *BINFO_PTR is initialized and a base_kind return value - + indicates what kind of base was located. - + - + Otherwise BINFO's bases are searched. */ - + - +static base_kind - +lookup_base_r (binfo, base, access, within_current_scope, - + is_non_public, is_virtual, binfo_ptr) - + tree binfo, base; - + base_access access; - + int within_current_scope; - + int is_non_public; /* inside a non-public part */ - + int is_virtual; /* inside a virtual part */ - + tree *binfo_ptr; - +{ - + int i; - + tree bases; - + base_kind found = bk_not_base; - + - + if (access == ba_check - + && !within_current_scope - + && is_friend (BINFO_TYPE (binfo), current_scope ())) - + { - + within_current_scope = 1; - + is_non_public = 0; - + } - + - + if (same_type_p (BINFO_TYPE (binfo), base)) - + { - + /* We have found a base. Check against what we have found - + already. */ - + found = bk_same_type; - + if (is_virtual) - + found = bk_via_virtual; - + if (is_non_public) - + found = bk_inaccessible; - + - + if (!*binfo_ptr) - + *binfo_ptr = binfo; - + else if (!is_virtual || !tree_int_cst_equal (BINFO_OFFSET (binfo), - + BINFO_OFFSET (*binfo_ptr))) - + { - + if (access != ba_any) - + *binfo_ptr = NULL; - + else if (found != is_virtual) - + /* Prefer a non-virtual base. */ - + *binfo_ptr = binfo; - + found = bk_ambig; - + } - + else if (found == bk_via_virtual) - + *binfo_ptr = binfo; - + - + return found; - + } - + - + bases = BINFO_BASETYPES (binfo); - + if (!bases) - + return bk_not_base; - + - + for (i = TREE_VEC_LENGTH (bases); i--;) - + { - + tree base_binfo = TREE_VEC_ELT (bases, i); - + int this_non_public = is_non_public; - + int this_virtual = is_virtual; - + - + if (access <= ba_ignore) - + ; /* no change */ - + else if (TREE_VIA_PUBLIC (base_binfo)) - + ; /* no change */ - + else if (access == ba_not_special) - + this_non_public = 1; - + else if (TREE_VIA_PROTECTED (base_binfo) && within_current_scope) - + ; /* no change */ - + else if (is_friend (BINFO_TYPE (binfo), current_scope ())) - + ; /* no change */ - + else - + this_non_public = 1; - + - + if (TREE_VIA_VIRTUAL (base_binfo)) - + this_virtual = 1; - + - + base_kind bk = lookup_base_r (base_binfo, base, - + access, within_current_scope, - + this_non_public, this_virtual, - + binfo_ptr); - + - + switch (bk) - + { - + case bk_ambig: - + if (access != ba_any) - + return bk; - + found = bk; - + break; - + - + case bk_inaccessible: - + if (found == bk_not_base) - + found = bk; - + my_friendly_assert (found == bk_via_virtual - + || found == bk_inaccessible, 20010723); - + - + break; - + - + case bk_same_type: - + bk = bk_proper_base; - + /* FALLTHROUGH */ - + case bk_proper_base: - + my_friendly_assert (found == bk_not_base, 20010723); - + found = bk; - + break; - + - + case bk_via_virtual: - + my_friendly_assert (found == bk_not_base - + || found == bk_via_virtual - + || found == bk_inaccessible, 20010723); - + found = bk; - + break; - + - + case bk_not_base: - + break; - + } - + } - + return found; - +} - + - +/* Lookup BASE in the hierarchy dominated by T. Do access checking as - + ACCESS specifies. Return the binfo we discover (which might not be - + canonical). If KIND_PTR is non-NULL, fill with information about - + what kind of base we discoveded. - + - + Issue an error message if an inaccessible or ambiguous base is - + discovered, and return error_mark_node. */ - + - +tree - +lookup_base (t, base, access, kind_ptr) - + tree t, base; - + base_access access; - + base_kind *kind_ptr; - +{ - + tree binfo = NULL; /* The binfo we've found so far. */ - + base_kind bk; - + - + if (t == error_mark_node || base == error_mark_node) - + { - + if (kind_ptr) - + *kind_ptr = bk_not_base; - + return error_mark_node; - + } - + - + t = TYPE_MAIN_VARIANT (t); - + base = TYPE_MAIN_VARIANT (base); - + - + bk = lookup_base_r (TYPE_BINFO (t), base, access, 0, 0, 0, &binfo); - + - + switch (bk) - + { - + case bk_inaccessible: - + cp_error ("`%T' is an inaccessible base of `%T'", base, t); - + binfo = error_mark_node; - + break; - + case bk_ambig: - + if (access != ba_any) - + { - + cp_error ("`%T' is an ambiguous base of `%T'", base, t); - + binfo = error_mark_node; - + } - + break; - + - + default:; - + } - + - + if (kind_ptr) - + *kind_ptr = bk; - + - + return binfo; - +} - + - /* Worker function for get_dynamic_cast_base_type. */ - - static int - @@ -1467,15 +1565,6 @@ lookup_field_r (binfo, data) - } - else - { - - /* If the thing we're looking for is a virtual base class, then - - we know we've got what we want at this point; there's no way - - to get an ambiguity. */ - - if (VBASE_NAME_P (lfi->name)) - - { - - lfi->rval = nval; - - return nval; - - } - - - if (from_dep_base_p && TREE_CODE (nval) != TYPE_DECL - /* We need to return a member template class so we can - define partial specializations. Is there a better - @@ -2333,391 +2422,6 @@ dfs_unmark (binfo, data) - } - - - -static tree - -dfs_init_vbase_pointers (binfo, data) - - tree binfo; - - void *data; - -{ - - struct vbase_info *vi = (struct vbase_info *) data; - - tree type = BINFO_TYPE (binfo); - - tree fields; - - tree this_vbase_ptr; - - - - /* Don't initialize the same base more than once. */ - - SET_BINFO_VTABLE_PATH_MARKED (binfo); - - - - /* We know that VI->DECL_PTR points to the complete object. So, - - finding a pointer to this subobject is easy. */ - - this_vbase_ptr = build (PLUS_EXPR, - - build_pointer_type (type), - - vi->decl_ptr, - - BINFO_OFFSET (binfo)); - - - - /* We're going to iterate through all the pointers to virtual - - base-classes. They come at the beginning of the class. */ - - fields = TYPE_FIELDS (type); - - - - if (fields == NULL_TREE - - || DECL_NAME (fields) == NULL_TREE - - || ! VBASE_NAME_P (DECL_NAME (fields))) - - return NULL_TREE; - - - - if (build_pointer_type (type) - - != TYPE_MAIN_VARIANT (TREE_TYPE (this_vbase_ptr))) - - my_friendly_abort (125); - - - - while (fields && DECL_NAME (fields) && VBASE_NAME_P (DECL_NAME (fields))) - - { - - tree ref = build (COMPONENT_REF, TREE_TYPE (fields), - - build_indirect_ref (this_vbase_ptr, NULL_PTR), fields); - - tree init; - - tree vbase_type; - - tree vbase_binfo; - - - - vbase_type = TREE_TYPE (TREE_TYPE (fields)); - - vbase_binfo = binfo_for_vbase (vbase_type, vi->type); - - init = build (PLUS_EXPR, - - build_pointer_type (vbase_type), - - vi->decl_ptr, - - BINFO_OFFSET (vbase_binfo)); - - vi->inits - - = tree_cons (vbase_binfo, - - build_modify_expr (ref, NOP_EXPR, init), - - vi->inits); - - fields = TREE_CHAIN (fields); - - } - - - - return NULL_TREE; - -} - - - -/* Call CLEAR_BINFO_VTABLE_PATH_MARKED for BINFO. */ - - - -static tree - -dfs_vtable_path_unmark (binfo, data) - - tree binfo; - - void *data ATTRIBUTE_UNUSED; - -{ - - CLEAR_BINFO_VTABLE_PATH_MARKED (binfo); - - return NULL_TREE; - -} - - - -tree - -init_vbase_pointers (type, decl_ptr) - - tree type; - - tree decl_ptr; - -{ - - my_friendly_assert (!vbase_offsets_in_vtable_p (), 20000516); - - - - if (TYPE_USES_VIRTUAL_BASECLASSES (type)) - - { - - struct vbase_info vi; - - tree binfo = TYPE_BINFO (type); - - - - /* Find all the virtual base classes, marking them for later - - initialization. */ - - vi.type = type; - - vi.decl_ptr = decl_ptr; - - vi.inits = NULL_TREE; - - - - /* Build up a list of the initializers. */ - - dfs_walk_real (binfo, - - dfs_init_vbase_pointers, 0, - - unmarked_vtable_pathp, - - &vi); - - dfs_walk (binfo, - - dfs_vtable_path_unmark, - - marked_vtable_pathp, - - NULL); - - - - return vi.inits; - - } - - - - return 0; - -} - - - -/* get the virtual context (the vbase that directly contains the - - DECL_CONTEXT of the FNDECL) that the given FNDECL is declared in, - - or NULL_TREE if there is none. - - - - FNDECL must come from a virtual table from a virtual base to ensure - - that there is only one possible DECL_CONTEXT. - - - - We know that if there is more than one place (binfo) the fndecl that the - - declared, they all refer to the same binfo. See get_class_offset_1 for - - the check that ensures this. */ - - - -static tree - -virtual_context (fndecl, t, vbase) - - tree fndecl, t, vbase; - -{ - - tree path; - - if (get_base_distance (DECL_CONTEXT (fndecl), t, 0, &path) < 0) - - { - - /* DECL_CONTEXT can be ambiguous in t. */ - - if (get_base_distance (DECL_CONTEXT (fndecl), vbase, 0, &path) >= 0) - - { - - while (path) - - { - - /* Not sure if checking path == vbase is necessary here, but just in - - case it is. */ - - if (TREE_VIA_VIRTUAL (path) || path == vbase) - - return binfo_for_vbase (BINFO_TYPE (path), t); - - path = BINFO_INHERITANCE_CHAIN (path); - - } - - } - - /* This shouldn't happen, I don't want errors! */ - - warning ("recoverable compiler error, fixups for virtual function"); - - return vbase; - - } - - while (path) - - { - - if (TREE_VIA_VIRTUAL (path)) - - return binfo_for_vbase (BINFO_TYPE (path), t); - - path = BINFO_INHERITANCE_CHAIN (path); - - } - - return 0; - -} - - - -/* Fixups upcast offsets for one vtable. - - Entries may stay within the VBASE given, or - - they may upcast into a direct base, or - - they may upcast into a different vbase. - - - - We only need to do fixups in case 2 and 3. In case 2, we add in - - the virtual base offset to effect an upcast, in case 3, we add in - - the virtual base offset to effect an upcast, then subtract out the - - offset for the other virtual base, to effect a downcast into it. - - - - This routine mirrors fixup_vtable_deltas in functionality, though - - this one is runtime based, and the other is compile time based. - - Conceivably that routine could be removed entirely, and all fixups - - done at runtime. - - - - VBASE_OFFSETS is an association list of virtual bases that contains - - offset information for the virtual bases, so the offsets are only - - calculated once. */ - - - -static void - -expand_upcast_fixups (binfo, addr, orig_addr, vbase, vbase_addr, t, - - vbase_offsets) - - tree binfo, addr, orig_addr, vbase, vbase_addr, t, *vbase_offsets; - -{ - - tree virtuals; - - tree vc; - - tree delta; - - HOST_WIDE_INT n; - - - - while (BINFO_PRIMARY_P (binfo)) - - { - - binfo = BINFO_INHERITANCE_CHAIN (binfo); - - if (TREE_VIA_VIRTUAL (binfo)) - - return; - - } - - - - delta = purpose_member (vbase, *vbase_offsets); - - if (! delta) - - { - - delta = build (PLUS_EXPR, - - build_pointer_type (BINFO_TYPE (vbase)), - - orig_addr, - - BINFO_OFFSET (vbase)); - - delta = build (MINUS_EXPR, ptrdiff_type_node, delta, vbase_addr); - - delta = save_expr (delta); - - delta = tree_cons (vbase, delta, *vbase_offsets); - - *vbase_offsets = delta; - - } - - - - for (virtuals = BINFO_VIRTUALS (binfo), n = 0; - - virtuals; - - virtuals = TREE_CHAIN (virtuals), ++n) - - { - - tree current_fndecl = TREE_VALUE (virtuals); - - - - if (current_fndecl - - && current_fndecl != abort_fndecl - - && (vc=virtual_context (current_fndecl, t, vbase)) != vbase) - - { - - /* This may in fact need a runtime fixup. */ - - tree idx = build_int_2 (n, 0); - - tree vtbl = BINFO_VTABLE (binfo); - - tree nvtbl = lookup_name (DECL_NAME (vtbl), 0); - - tree aref, ref, naref; - - tree old_delta, new_delta; - - tree init; - - - - if (nvtbl == NULL_TREE - - || nvtbl == IDENTIFIER_GLOBAL_VALUE (DECL_NAME (vtbl))) - - { - - /* Dup it if it isn't in local scope yet. */ - - nvtbl = build_decl - - (VAR_DECL, DECL_NAME (vtbl), - - TYPE_MAIN_VARIANT (TREE_TYPE (vtbl))); - - DECL_ALIGN (nvtbl) = MAX (TYPE_ALIGN (double_type_node), - - DECL_ALIGN (nvtbl)); - - TREE_READONLY (nvtbl) = 0; - - DECL_ARTIFICIAL (nvtbl) = 1; - - nvtbl = pushdecl (nvtbl); - - init = NULL_TREE; - - cp_finish_decl (nvtbl, init, NULL_TREE, - - LOOKUP_ONLYCONVERTING); - - - - /* We don't set DECL_VIRTUAL_P and DECL_CONTEXT on nvtbl - - because they wouldn't be useful; everything that wants to - - look at the vtable will look at the decl for the normal - - vtable. Setting DECL_CONTEXT also screws up - - decl_function_context. */ - - - - init = build (MODIFY_EXPR, TREE_TYPE (nvtbl), - - nvtbl, vtbl); - - finish_expr_stmt (init); - - /* Update the vtable pointers as necessary. */ - - ref = build_vfield_ref - - (build_indirect_ref (addr, NULL_PTR), - - DECL_CONTEXT (TYPE_VFIELD (BINFO_TYPE (binfo)))); - - finish_expr_stmt - - (build_modify_expr (ref, NOP_EXPR, nvtbl)); - - } - - assemble_external (vtbl); - - aref = build_array_ref (vtbl, idx); - - naref = build_array_ref (nvtbl, idx); - - old_delta = build_component_ref (aref, delta_identifier, - - NULL_TREE, 0); - - new_delta = build_component_ref (naref, delta_identifier, - - NULL_TREE, 0); - - - - /* This is a upcast, so we have to add the offset for the - - virtual base. */ - - old_delta = cp_build_binary_op (PLUS_EXPR, old_delta, - - TREE_VALUE (delta)); - - if (vc) - - { - - /* If this is set, we need to subtract out the delta - - adjustments for the other virtual base that we - - downcast into. */ - - tree vc_delta = purpose_member (vc, *vbase_offsets); - - if (! vc_delta) - - { - - tree vc_addr = convert_pointer_to_real (vc, orig_addr); - - vc_delta = build (PLUS_EXPR, - - build_pointer_type (BINFO_TYPE (vc)), - - orig_addr, - - BINFO_OFFSET (vc)); - - vc_delta = build (MINUS_EXPR, ptrdiff_type_node, - - vc_delta, vc_addr); - - vc_delta = save_expr (vc_delta); - - *vbase_offsets = tree_cons (vc, vc_delta, *vbase_offsets); - - } - - else - - vc_delta = TREE_VALUE (vc_delta); - - - - /* This is a downcast, so we have to subtract the offset - - for the virtual base. */ - - old_delta = cp_build_binary_op (MINUS_EXPR, old_delta, vc_delta); - - } - - - - TREE_READONLY (new_delta) = 0; - - TREE_TYPE (new_delta) = - - cp_build_qualified_type (TREE_TYPE (new_delta), - - CP_TYPE_QUALS (TREE_TYPE (new_delta)) - - & ~TYPE_QUAL_CONST); - - finish_expr_stmt (build_modify_expr (new_delta, NOP_EXPR, - - old_delta)); - - } - - } - -} - - - -/* Fixup upcast offsets for all direct vtables. Patterned after - - expand_direct_vtbls_init. */ - - - -static void - -fixup_virtual_upcast_offsets (real_binfo, binfo, init_self, can_elide, addr, orig_addr, type, vbase, vbase_offsets) - - tree real_binfo, binfo; - - int init_self, can_elide; - - tree addr, orig_addr, type, vbase, *vbase_offsets; - -{ - - tree real_binfos = BINFO_BASETYPES (real_binfo); - - tree binfos = BINFO_BASETYPES (binfo); - - int i, n_baselinks = real_binfos ? TREE_VEC_LENGTH (real_binfos) : 0; - - - - for (i = 0; i < n_baselinks; i++) - - { - - tree real_base_binfo = TREE_VEC_ELT (real_binfos, i); - - tree base_binfo = TREE_VEC_ELT (binfos, i); - - int is_not_base_vtable - - = !BINFO_PRIMARY_P (real_base_binfo); - - if (! TREE_VIA_VIRTUAL (real_base_binfo)) - - fixup_virtual_upcast_offsets (real_base_binfo, base_binfo, - - is_not_base_vtable, can_elide, addr, - - orig_addr, type, vbase, vbase_offsets); - - } - -#if 0 - - /* Before turning this on, make sure it is correct. */ - - if (can_elide && ! BINFO_MODIFIED (binfo)) - - return; - -#endif - - /* Should we use something besides CLASSTYPE_VFIELDS? */ - - if (init_self && CLASSTYPE_VFIELDS (BINFO_TYPE (real_binfo))) - - { - - tree new_addr = convert_pointer_to_real (binfo, addr); - - expand_upcast_fixups (real_binfo, new_addr, orig_addr, vbase, addr, - - type, vbase_offsets); - - } - -} - - - -/* Fixup all the virtual upcast offsets for TYPE. DECL_PTR is the - - address of the sub-object being initialized. */ - - - -void - -fixup_all_virtual_upcast_offsets (decl_ptr) - - tree decl_ptr; - -{ - - tree if_stmt; - - tree in_charge_node; - - tree vbases; - - tree type; - - - - /* Only tweak the vtables if we're in charge. */ - - in_charge_node = current_in_charge_parm; - - if (!in_charge_node) - - /* There's no need for any fixups in this case. */ - - return; - - in_charge_node = cp_build_binary_op (EQ_EXPR, - - in_charge_node, integer_zero_node); - - if_stmt = begin_if_stmt (); - - finish_if_stmt_cond (in_charge_node, if_stmt); - - - - /* Iterate through the virtual bases, fixing up the upcast offset - - for each one. */ - - type = TREE_TYPE (TREE_TYPE (decl_ptr)); - - for (vbases = CLASSTYPE_VBASECLASSES (type); - - vbases; - - vbases = TREE_CHAIN (vbases)) - - { - - if (flag_vtable_thunks) - - /* We don't have dynamic thunks yet! So for now, just fail - - silently. */ - - ; - - else - - { - - tree vbase; - - tree vbase_offsets; - - tree addr; - - - - vbase = find_vbase_instance (TREE_PURPOSE (vbases), type); - - vbase_offsets = NULL_TREE; - - addr = convert_pointer_to_vbase (TREE_PURPOSE (vbases), decl_ptr); - - fixup_virtual_upcast_offsets (vbase, - - TYPE_BINFO (TREE_PURPOSE (vbases)), - - 1, 0, addr, decl_ptr, - - type, vbase, &vbase_offsets); - - } - - } - - - - /* Close out the if-statement. */ - - finish_then_clause (if_stmt); - - finish_if_stmt (); - -} - - - /* get virtual base class types. - This adds type to the vbase_types list in reverse dfs order. - Ordering is very important, so don't change it. */ - Index: gcc/cp/semantics.c - =================================================================== - RCS file: /cvs/gcc/gcc/gcc/cp/semantics.c,v - retrieving revision 1.189.2.19 - diff -u -p -r1.189.2.19 semantics.c - --- gcc/cp/semantics.c 2002/01/31 22:46:46 1.189.2.19 - +++ gcc/cp/semantics.c 2002/02/01 22:44:51 - @@ -2349,7 +2349,7 @@ emit_associated_thunks (fn) - is so that you can know statically the entire set of thunks that - will ever be needed for a given virtual function, thereby - enabling you to output all the thunks with the function itself. */ - - if (vcall_offsets_in_vtable_p () && DECL_VIRTUAL_P (fn)) - + if (DECL_VIRTUAL_P (fn)) - { - tree binfo; - tree v; - @@ -2415,8 +2415,8 @@ expand_body (fn) - simplify_aggr_init_exprs_r, - NULL); - - - /* If this is a constructor or destructor body, we have to clone it - - under the new ABI. */ - + /* If this is a constructor or destructor body, we have to clone - + it. */ - if (maybe_clone_body (fn)) - { - /* We don't want to process FN again, so pretend we've written - Index: gcc/cp/tree.c - =================================================================== - RCS file: /cvs/gcc/gcc/gcc/cp/tree.c,v - retrieving revision 1.232.2.10 - diff -u -p -r1.232.2.10 tree.c - --- gcc/cp/tree.c 2001/11/30 03:12:44 1.232.2.10 - +++ gcc/cp/tree.c 2002/02/01 22:44:52 - @@ -2220,12 +2220,6 @@ cp_valid_lang_attribute (attr_name, attr - } - if (is_attribute_p ("com_interface", attr_name)) - { - - if (! flag_vtable_thunks) - - { - - error ("`com_interface' only supported with -fvtable-thunks"); - - return 0; - - } - - - if (attr_args != NULL_TREE - || decl != NULL_TREE - || ! CLASS_TYPE_P (type) - Index: gcc/cp/typeck.c - =================================================================== - RCS file: /cvs/gcc/gcc/gcc/cp/typeck.c,v - retrieving revision 1.337.2.11 - diff -u -p -r1.337.2.11 typeck.c - --- gcc/cp/typeck.c 2001/11/20 04:39:23 1.337.2.11 - +++ gcc/cp/typeck.c 2002/02/01 22:44:58 - @@ -114,8 +114,11 @@ require_complete_type (value) - { - tree base, member = TREE_OPERAND (value, 1); - tree basetype = TYPE_OFFSET_BASETYPE (type); - + - my_friendly_assert (TREE_CODE (member) == FIELD_DECL, 305); - - base = convert_pointer_to (basetype, current_class_ptr); - + basetype = lookup_base (current_class_type, basetype, ba_check, NULL); - + base = build_base_path (PLUS_EXPR, current_class_ptr, basetype, 1); - + - value = build (COMPONENT_REF, TREE_TYPE (member), - build_indirect_ref (base, NULL_PTR), member); - return require_complete_type (value); - @@ -2235,23 +2238,15 @@ build_component_ref (datum, component, b - /* Handle base classes here... */ - if (base != basetype && TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (basetype)) - { - - tree addr = build_unary_op (ADDR_EXPR, datum, 0); - - if (integer_zerop (addr)) - + tree binfo = lookup_base (TREE_TYPE (datum), base, ba_check, NULL); - + - + if (TREE_CODE (datum) == INDIRECT_REF - + && integer_zerop (TREE_OPERAND (datum, 0))) - { - error ("invalid reference to NULL ptr, use ptr-to-member instead"); - return error_mark_node; - - } - - if (VBASE_NAME_P (DECL_NAME (field))) - - { - - /* It doesn't matter which vbase pointer we grab, just - - find one of them. */ - - tree binfo = get_binfo (base, - - TREE_TYPE (TREE_TYPE (addr)), 0); - - addr = convert_pointer_to_real (binfo, addr); - } - - else - - addr = convert_pointer_to (base, addr); - - datum = build_indirect_ref (addr, NULL_PTR); - + datum = build_base_path (PLUS_EXPR, datum, binfo, 1); - if (datum == error_mark_node) - return error_mark_node; - } - @@ -2842,8 +2837,11 @@ build_x_function_call (function, params, - if (TREE_CODE (TREE_TYPE (decl)) != POINTER_TYPE - && ! TYPE_PTRMEMFUNC_P (TREE_TYPE (decl))) - { - + tree binfo = lookup_base (TREE_TYPE (decl), TREE_TYPE (ctypeptr), - + ba_check, NULL); - + - decl = build_unary_op (ADDR_EXPR, decl, 0); - - decl = convert_pointer_to (TREE_TYPE (ctypeptr), decl); - + decl = build_base_path (PLUS_EXPR, decl, binfo, 1); - } - else - decl = build_c_cast (ctypeptr, decl); - @@ -2862,13 +2860,11 @@ get_member_function_from_ptrfunc (instan - tree function; - { - if (TREE_CODE (function) == OFFSET_REF) - - { - - function = TREE_OPERAND (function, 1); - - } - + function = TREE_OPERAND (function, 1); - - if (TYPE_PTRMEMFUNC_P (TREE_TYPE (function))) - { - - tree fntype, idx, e1, delta, delta2, e2, e3, aref, vtbl; - + tree fntype, idx, e1, delta, delta2, e2, e3, vtbl; - tree instance, basetype; - - tree instance_ptr = *instance_ptrptr; - @@ -2893,14 +2889,18 @@ get_member_function_from_ptrfunc (instan - fntype = TYPE_PTRMEMFUNC_FN_TYPE (TREE_TYPE (function)); - basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (fntype)); - - - /* Convert down to the right base, before using the instance. */ - - instance = convert_pointer_to_real (basetype, instance_ptr); - + /* Convert down to the right base, before using the instance. */ - + instance = lookup_base (TREE_TYPE (TREE_TYPE (instance_ptr)), basetype, - + ba_check, NULL); - + instance = build_base_path (PLUS_EXPR, instance_ptr, instance, 1); - if (instance == error_mark_node && instance_ptr != error_mark_node) - return instance; - - e3 = PFN_FROM_PTRMEMFUNC (function); - - - - vtbl = convert_pointer_to (ptr_type_node, instance); - + - + vtbl = build1 (NOP_EXPR, build_pointer_type (ptr_type_node), instance); - + TREE_CONSTANT (vtbl) = TREE_CONSTANT (instance); - + - delta = cp_convert (ptrdiff_type_node, - build_component_ref (function, delta_identifier, - NULL_TREE, 0)); - @@ -2950,27 +2950,8 @@ get_member_function_from_ptrfunc (instan - build_pointer_type (build_pointer_type (vtable_entry_type)), - vtbl, cp_convert (ptrdiff_type_node, delta2)); - vtbl = build_indirect_ref (vtbl, NULL_PTR); - - aref = build_array_ref (vtbl, idx); - - - - if (! flag_vtable_thunks) - - { - - aref = save_expr (aref); - - - - delta = cp_build_binary_op - - (PLUS_EXPR, - - build_conditional_expr (e1, - - build_component_ref (aref, - - delta_identifier, - - NULL_TREE, 0), - - integer_zero_node), - - delta); - - } - + e2 = build_array_ref (vtbl, idx); - - - if (flag_vtable_thunks) - - e2 = aref; - - else - - e2 = build_component_ref (aref, pfn_identifier, NULL_TREE, 0); - - - /* When using function descriptors, the address of the - vtable entry is treated as a function pointer. */ - if (TARGET_VTABLE_USES_DESCRIPTORS) - @@ -4277,8 +4258,11 @@ build_component_addr (arg, argtype) - /* Can't convert directly to ARGTYPE, since that - may have the same pointer type as one of our - baseclasses. */ - - rval = build1 (NOP_EXPR, argtype, - - convert_pointer_to (basetype, rval)); - + tree binfo = lookup_base (TREE_TYPE (TREE_TYPE (rval)), basetype, - + ba_check, NULL); - + - + rval = build_base_path (PLUS_EXPR, rval, binfo, 1); - + rval = build1 (NOP_EXPR, argtype, rval); - TREE_CONSTANT (rval) = TREE_CONSTANT (TREE_OPERAND (rval, 0)); - } - else - @@ -6107,8 +6091,7 @@ build_ptrmemfunc (type, pfn, force) - delta = build_component_ref (pfn, delta_identifier, NULL_TREE, 0); - } - - - /* Under the new ABI, the conversion is easy. Just adjust - - the DELTA field. */ - + /* Just adjust the DELTA field. */ - delta = cp_convert (ptrdiff_type_node, delta); - if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_delta) - n = cp_build_binary_op (LSHIFT_EXPR, n, integer_one_node); - @@ -6173,10 +6156,9 @@ expand_ptrmemfunc_cst (cst, delta, pfn) - *delta = fold (build (PLUS_EXPR, TREE_TYPE (*delta), - *delta, BINFO_OFFSET (binfo))); - - - /* Under the new ABI, we set PFN to the vtable offset at - - which the function can be found, plus one (unless - - ptrmemfunc_vbit_in_delta, in which case delta is shifted - - left, and then incremented). */ - + /* We set PFN to the vtable offset at which the function can be - + found, plus one (unless ptrmemfunc_vbit_in_delta, in which - + case delta is shifted left, and then incremented). */ - *pfn = DECL_VINDEX (fn); - *pfn = fold (build (MULT_EXPR, integer_type_node, *pfn, - TYPE_SIZE_UNIT (vtable_entry_type))); - Index: gcc/cp/typeck2.c - =================================================================== - RCS file: /cvs/gcc/gcc/gcc/cp/typeck2.c,v - retrieving revision 1.97.2.2 - diff -u -p -r1.97.2.2 typeck2.c - --- gcc/cp/typeck2.c 2001/04/12 05:26:11 1.97.2.2 - +++ gcc/cp/typeck2.c 2002/02/01 22:44:58 - @@ -980,12 +980,17 @@ build_scoped_ref (datum, basetype) - tree basetype; - { - tree ref; - + tree binfo; - - if (datum == error_mark_node) - return error_mark_node; - + binfo = lookup_base (TREE_TYPE (datum), basetype, ba_check, NULL); - - + if (!binfo) - + return error_not_base_type (TREE_TYPE (datum), basetype); - + - ref = build_unary_op (ADDR_EXPR, datum, 0); - - ref = convert_pointer_to (basetype, ref); - + ref = build_base_path (PLUS_EXPR, ref, binfo, 1); - - return build_indirect_ref (ref, "(compiler error in build_scoped_ref)"); - } --- 0 ---- diff -Nrc3pad gcc-3.0.4/contrib/analyze_brprob gcc-3.1/contrib/analyze_brprob *** gcc-3.0.4/contrib/analyze_brprob Thu Jan 1 00:00:00 1970 --- gcc-3.1/contrib/analyze_brprob Mon Aug 13 14:34:11 2001 *************** *** 0 **** --- 1,146 ---- + #!/usr/bin/awk -f + # Script to analyze experimental results of our branch prediction heuristics + # Contributed by Jan Hubicka, SuSE Inc. + # Copyright (C) 2001 Free Software Foundation, Inc. + # + # This file is part of GNU CC. + # + # GNU CC is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by + # the Free Software Foundation; either version 2, or (at your option) + # any later version. + # + # GNU CC is distributed in the hope that it will be useful, + # but WITHOUT ANY WARRANTY; without even the implied warranty of + # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + # GNU General Public License for more details. + # + # You should have received a copy of the GNU General Public License + # along with GNU CC; see the file COPYING. If not, write to + # the Free Software Foundation, 59 Temple Place - Suite 330, + # Boston, MA 02111-1307, USA. + # + # + # This script is used to calculate two basic properties of the branch prediction + # heuristics - coverage and hitrate. Coverage is number of executions of a given + # branch matched by the heuristics and hitrate is probability that once branch is + # predicted as taken it is really taken. + # + # These values are useful to determine the quality of given heuristics. Hitrate + # may be directly used in predict.c. + # + # Usage: + # Step 1: Compile and profile your program. You need to use -fprofile-arcs + # flag to get the profiles + # Step 2: Generate log files. The information about given heuristics are + # saved into *.life dumps. You need to pass the -df switch to the compiler as well + # as -fbranch-probabilities to get the results of profiling noted in the dumps. + # Ensure that there are no "Arc profiling: some edge counts were bad." warnings. + # Step 3: Run this script to concatenate all *.life files: + # analyze_brprob `find . -name *.life` + # the information is collected and print once all files are parsed. This + # may take a while. + # Note that the script does use bc to perform long arithmetic. + # Step 4: Read the results. Basically the following table is printed: + # (this is just an example from a very early stage of branch prediction pass + # development, so please don't take these numbers seriously) + # + #HEURISTICS BRANCHES (REL) HITRATE COVERAGE (REL) + #opcode 2889 83.7% 94.96%/ 97.62% 7516383 75.3% + #pointer 246 7.1% 99.69%/ 99.86% 118791 1.2% + #loop header 449 13.0% 98.32%/ 99.07% 43553 0.4% + #first match 3450 100.0% 89.92%/ 97.27% 9979782 100.0% + #loop exit 924 26.8% 88.95%/ 95.58% 9026266 90.4% + #error return 150 4.3% 64.48%/ 86.81% 453542 4.5% + #call 803 23.3% 51.66%/ 98.61% 3614037 36.2% + #loop branch 51 1.5% 99.26%/ 99.27% 26854 0.3% + #noreturn call 951 27.6% 100.00%/100.00% 1759809 17.6% + # + # The heuristic called "first match" is a heuristic used by GCC branch + # prediction pass and it predicts 89.92% branches correctly. + # + # The quality of heuristics can be rated using both, coverage and hitrate + # parameters. For example "loop branch" heuristics (predicting loopback edge + # as taken) have both very high hitrate and coverage, so it is very useful. + # On the other hand, "exit block" heuristics (predicting exit edges as not + # taken) have good hitrate, but poor coverage, so only 3 branches have been + # predicted. The "loop header" heuristic has problems, since it tends to + # misspredict. + # + # The implementation of this script is somewhat brute force. My awk skills + # are limited. + + function longeval(e) + { + e = "echo \"scale = 2 ;"e"\" | bc" + e | getline res + close (e) + return res + } + + BEGIN {nnames = 0} + + /^ .* heuristics: .*.$/ { + name=$0 + sub (/^ /,"",name) + sub (/ heuristics: .*.$/,"",name) + if (!(name in branches)) + { + names[nnames] = name + branches[name]=0 + counts[name]=0 + hits[name]=0 + phits[name]=0 + nnames++ + } + branches[name]+=1 + } + + /^ .* heuristics: .*. exec [0-9]* hit [0-9]* (.*.)$/ { + name=$0 + sub (/^ /,"",name) + sub (/ heuristics: .*. exec [0-9]* hit [0-9]* (.*.)$/,"",name) + pred=$0 + sub (/^ .* heuristics: /,"",pred) + sub (/. exec [0-9]* hit [0-9]* (.*.)$/,"",pred) + count=$0 + sub (/^ .* heuristics: .*. exec /,"",count) + sub (/ hit [0-9]* (.*.)$/,"",count) + hit=$0 + sub (/^ .* heuristics: .*. exec [0-9]* hit /,"",hit) + sub (/ (.*.)$/,"",hit) + + if (int(pred) < 50.0) + { + hit = count"-"hit; + } + counts[name]=counts[name] "+" count + hits[name]=hits[name] "+" hit + phits[name]=phits[name] "+(("hit")<"count"/2)*("count"-("hit"))+(("hit")>="count"/2)*("hit")" + + #BC crashes on long strings. Irritating. + if (length(counts[name]) > 2000) + counts[name] = longeval(counts[name]) + if (length(hits[name]) > 2000) + hits[name] = longeval(hits[name]) + if (length(phits[name]) > 2000) + phits[name] = longeval(phits[name]) + } + END { + # Heuristics called combined predicts just everything. + maxcounts = longeval(counts["combined"]) + maxbranches = branches["combined"] + max = names["combined"] + printf("HEURISTICS BRANCHES (REL) HITRATE COVERAGE (REL)\n") + for (i = 0; i < nnames ; i++) + { + name = names[i] + counts[name] = longeval(counts[name]) + printf ("%-27s %8i %5.1f%% %6s%%/%6s%% %12s %5.1f%%\n", + name, + branches[name], branches[name] * 100 / maxbranches, + longeval("("hits[name]") * 100 /(" counts[name]"-0.00001)"), + longeval("("phits[name]") * 100 /(" counts[name]"-0.00001)"), + counts[name], longeval(counts[name]" * 100 / ("maxcounts"-0.00001)")) + } + } diff -Nrc3pad gcc-3.0.4/contrib/gcc_release gcc-3.1/contrib/gcc_release *** gcc-3.0.4/contrib/gcc_release Fri Aug 24 20:16:05 2001 --- gcc-3.1/contrib/gcc_release Thu Jan 1 00:00:00 1970 *************** *** 1,543 **** - #! /bin/sh - - ######################################################################## - # - # File: gcc_release - # Author: Jeffrey Law, Bernd Schmidt, Mark Mitchell - # Date: 2001-05-25 - # - # Contents: - # Script to create a GCC release. - # - # Copyright (c) 2001 Free Software Foundation. - # - # 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. - # - ######################################################################## - - ######################################################################## - # Notes - ######################################################################## - - # Here is an example usage of this script, to create a GCC 3.0.2 - # prerelease: - # - # gcc_release -r 3.0.2 - # - # This script will automatically use the head of the release branch - # to generate the release. - - ######################################################################## - # Functions - ######################################################################## - - # Issue the error message given by $1 and exit with a non-zero - # exit code. - - error() { - echo "gcc_release: error: $1" - exit 1 - } - - # Issue the informational message given by $1. - - inform() { - echo "gcc_release: $1" - } - - # Issue a usage message explaining how to use this script. - - usage() { - cat < ${x}.new < ${y}.new && \ - mv ${y}.new ${y} && \ - ${CVS} ci -m 'Update version' ${y}) || \ - error "Could not update ${x}" - done - for x in gcc/f/version.c libf2c/libF77/Version.c \ - libf2c/libI77/Version.c libf2c/libU77/Version.c; do - y=`basename ${x}` - (changedir `dirname ${SOURCE_DIRECTORY}/${x}` && \ - sed -e 's/experimental\|prerelease/release/g' < ${y} > ${y}.new && \ - mv ${y}.new ${y} && \ - ${CVS} ci -m 'Update version' ${y}) || \ - error "Could not update ${x}" - done - - # Make sure we tag the sources for a final release. - TAG="gcc_`echo ${RELEASE} | tr . _`_release" - - rm -rf ${SOURCE_DIRECTORY} - fi - - # Tag the sources. - if [ -n "${TAG}" ]; then - inform "Tagging release sources" - ${CVS} rtag -r ${BRANCH} -F ${TAG} gcc || \ - error "Could not tag release sources" - BRANCH=$TAG - fi - - # Export the current sources. - inform "Retrieving release sources" - ${CVS} \ - export -d "`basename ${SOURCE_DIRECTORY}`" \ - -r ${BRANCH} gcc || \ - error "Could not retrieve release sources" - - # Run gcc_update on them to set up the timestamps nicely. - changedir "gcc-${RELEASE}" - contrib/gcc_update --touch - - # Obtain some documentation files from the wwwdocs module. - inform "Retrieving HTML documentation" - changedir "${WORKING_DIRECTORY}" - for x in bugs gnats faq; do - (${CVS} export -r HEAD wwwdocs/htdocs/${x}.html && \ - cp ${WORKING_DIRECTORY}/wwwdocs/htdocs/${x}.html \ - ${SOURCE_DIRECTORY}) || \ - error "Could not retrieve ${x}.html" - done - - inform "Generating plain-text documentation from HTML" - changedir "${SOURCE_DIRECTORY}" - for file in *.html; do - newfile=`echo $file | sed -e 's/.html//' | tr "[:lower:]" "[:upper:]"` - (${ENV} TERM=vt100 lynx -dump $file \ - | sed -e "s#file://localhost`/bin/pwd`\(.*\)#http://gcc.gnu.org\1#g" \ - > $newfile) || \ - error "Could not regenerate documentation" - done - - # For a prerelease or real release, we need to generate additional - # files not present in CVS. - changedir "${SOURCE_DIRECTORY}" - if [ $SNAPSHOT -ne 1 ]; then - # Generate the documentation. - inform "Building install docs" - SOURCEDIR=${SOURCE_DIRECTORY}/gcc/doc - DESTDIR=${SOURCE_DIRECTORY}/INSTALL - export SOURCEDIR - export DESTDIR - ${SOURCE_DIRECTORY}/gcc/doc/install.texi2html - - # Regenerate the NEWS file. - contrib/gennews > gcc/NEWS || \ - error "Could not regenerate NEWS files" - - # Now, we must build the compiler in order to create any generated - # files that are supposed to go in the source directory. This is - # also a good sanity check to make sure that the release builds - # on at least one platform. - inform "Building compiler" - OBJECT_DIRECTORY=../objdir - contrib/gcc_build -d ${SOURCE_DIRECTORY} -o ${OBJECT_DIRECTORY} build || \ - error "Could not rebuild GCC" - - # Regenerate the Fotran NEWS and BUGS files. - (cd ${OBJECT_DIRECTORY}/gcc && make f77.rebuilt) || \ - error "Could not regenerate Fortran NEWS and BUGS files" - fi - - # Move message catalogs to source directory. - mv ../objdir/gcc/po/*.gmo gcc/po/ - - # Create a `.brik' file to use for checking the validity of the - # release. - changedir "${SOURCE_DIRECTORY}" - BRIK_FILE=`mktemp /tmp/gcc_release.XXXXXXX` - ((find . -type f | sort > $BRIK_FILE) && \ - brik -Gb -f ${BRIK_FILE} > .brik && \ - rm ${BRIK_FILE}) || \ - error "Could not compute brik checksum" - } - - # Buid a single tarfile. The first argument is the name of the name - # of the tarfile to build, without any suffixes. They will be added - # automatically. The rest of the arguments are the files or - # directories to include. - - build_tarfile() { - # Get the name of the destination tar file. - TARFILE="$1.tar.gz" - shift - - # Build the tar file itself. - (${TAR} cf - "$@" | ${GZIP} > ${TARFILE}) || \ - error "Could not build tarfile" - FILE_LIST="${FILE_LIST} ${TARFILE}" - } - - # Build the various tar files for the release. - - build_tarfiles() { - inform "Building tarfiles" - - changedir "${WORKING_DIRECTORY}" - - # The GNU Coding Standards specify that all files should - # world readable. - chmod -R a+r ${SOURCE_DIRECTORY} - # And that all directories have mode 777. - find ${SOURCE_DIRECTORY} -type d -exec chmod 777 {} \; - - # Build one huge tarfile for the entire distribution. - build_tarfile gcc-${RELEASE} `basename ${SOURCE_DIRECTORY}` - - # Now, build one for each of the languages. - build_tarfile gcc-g++-${RELEASE} ${CPLUSPLUS_DIRS} - build_tarfile gcc-g77-${RELEASE} ${FORTRAN_DIRS} - build_tarfile gcc-java-${RELEASE} ${JAVA_DIRS} - build_tarfile gcc-objc-${RELEASE} ${OBJECTIVEC_DIRS} - build_tarfile gcc-testsuite-${RELEASE} ${TESTSUITE_DIRS} - - # The core is everything else. - EXCLUDES="" - for x in ${CPLUSPLUS_DIRS} ${FORTRAN_DIRS} ${JAVA_DIRS} \ - ${OBJECTIVEC_DIRS} ${TESTSUITE_DIRS}; do - EXCLUDES="${EXCLUDES} --exclude $x" - done - build_tarfile gcc-core-${RELEASE} ${EXCLUDES} \ - `basename ${SOURCE_DIRECTORY}` - - # Possibly build diffs. - if [ -n "$OLD_TARS" ]; then - for old_tar in $OLD_TARS; do - build_diffs $old_tar - done - fi - - # Build .bz2 files. - for f in ${FILE_LIST}; do - bzfile=${f%.gz}.bz2 - zcat $f | ${BZIP2} > ${bzfile} - FILE_LIST="${FILE_LIST} ${bzfile}" - done - } - - # Build diffs against an old release. - build_diffs() { - old_dir=${1%/*} - old_file=${1##*/} - old_vers=${old_file%.tar.gz} - old_vers=${old_vers#gcc-} - inform "Building diffs against version $old_vers" - for f in gcc gcc-g++ gcc-g77 gcc-java gcc-objc gcc-testsuite gcc-core; do - old_tar=${old_dir}/${f}-${old_vers}.tar.gz - new_tar=${WORKING_DIRECTORY}/${f}-${RELEASE}.tar.gz - if [ -e $old_tar ] && [ -e $new_tar ]; then - build_diff $old_tar gcc-${old_vers} $new_tar gcc-${RELEASE} \ - ${f}-${old_vers}-${RELEASE}.diff.gz - fi - done - } - - # Build an individual diff. - build_diff() { - changedir "${WORKING_DIRECTORY}" - tmpdir=gccdiff.$$ - mkdir $tmpdir || error "Could not create directory $tmpdir" - changedir $tmpdir - tar xfz $1 || error "Could not unpack $1 for diffs" - tar xfz $3 || error "Could not unpack $3 for diffs" - ${DIFF} $2 $4 | ${GZIP} > ../$5 - if [ $? -eq 2 ]; then - error "Trouble making diffs from $1 to $3" - fi - changedir .. - rm -rf $tmpdir - FILE_LIST="${FILE_LIST} $5" - } - - # Upload the files to the FTP server. - - upload_files() { - inform "Uploading files" - - changedir "${WORKING_DIRECTORY}" - - # Copy the tar files to the FTP server. - for x in gcc*.gz gcc*.bz2; do - if [ -e ${x} ]; then - # Make sure the file will be readable on the server. - chmod a+r ${x} - # Copy it. - ${SCP} -p ${x} ${FTP_PATH} || \ - error "Could not upload ${x}" - fi - done - } - - ######################################################################## - # Initialization - ######################################################################## - - # Today's date. - DATE=`date "+%Y%m%d"` - - # The CVS server containing the GCC repository. - CVS_SERVER="gcc.gnu.org" - # The path to the repository on that server. - CVS_REPOSITORY="/cvs/gcc" - # The CVS protocol to use. - CVS_PROTOCOL="ext" - # The username to use when connecting to the server. - CVS_USERNAME="${USER}" - - # The path to the directory where the files are uploaded for FTP. - FTP_PATH="gccadmin@gcc.gnu.org:~ftp/pub/gcc" - - # The major number for the release. For release `3.0.2' this would be - # `3' - RELEASE_MAJOR="" - # The minor number for the release. For release `3.0.2' this would be - # `0'. - RELEASE_MINOR="" - # The revision number for the release. For release `3.0.2' this would - # be `2'. - RELEASE_REVISION="" - # The complete name of the release. - RELEASE="" - - # The name of the branch from which the release should be made. - BRANCH="" - - # The tag to apply to the sources used for the release. - TAG="" - - # The old tarballs from which to generate diffs. - OLD_TARS="" - - # The directory that will be used to construct the release. The - # release itself will be placed in a subdirectory of this diretory. - DESTINATION=${HOME} - # The subdirectory. - WORKING_DIRECTORY="" - # The directory that will contain the GCC sources. - SOURCE_DIRECTORY="" - - # The directories that should be part of the various language-specific - # tar files. These are all relative to the top of the source tree. - CPLUSPLUS_DIRS="gcc/cp libstdc++-v3" - FORTRAN_DIRS="gcc/f libf2c" - JAVA_DIRS="gcc/java libjava libffi fastjar zlib boehm-gc" - OBJECTIVEC_DIRS="gcc/objc libobjc" - TESTSUITE_DIRS="gcc/testsuite" - - # Non-zero if this is the final release, rather than a prerelease. - FINAL=0 - - # Non-zero if we are building a snapshot, and don't build gcc or - # include generated files. - SNAPSHOT=0 - - # Major operation modes. - MODE_SOURCES=0 - MODE_TARFILES=0 - MODE_UPLOAD=0 - - # Files generated to upload. - FILE_LIST="" - - # Programs we use. - - BZIP2="${BZIP2:-bzip2}" - CVS="${CVS:-cvs -f -Q -z9}" - DIFF="${DIFF:-diff -Nrc3pad}" - ENV="${ENV:-env}" - GZIP="${GZIP:-gzip --best}" - SCP="${SCP:-scp}" - TAR="${TAR:-tar}" - - ######################################################################## - # Command Line Processing - ######################################################################## - - # Parse the options. - while getopts "d:fr:u:t:p:s" ARG; do - case $ARG in - d) DESTINATION="${OPTARG}";; - r) RELEASE="${OPTARG}";; - t) TAG="${OPTARG}";; - u) CVS_USERNAME="${OPTARG}";; - f) FINAL=1;; - s) SNAPSHOT=1;; - p) OLD_TARS="${OLD_TARS} ${OPTARG}";; - \?) usage;; - esac - done - shift `expr ${OPTIND} - 1` - - # Perform consistency checking. - if [ -z ${CVS_USERNAME} ]; then - error "No username specified" - fi - - if [ -z ${RELEASE} ]; then - error "No release number specified" - fi - - if [ ! -d ${DESTINATION} ]; then - error "\`${DESTINATION}' is not a directory" - fi - - # Compute the major and minor release numbers. - RELEASE_MAJOR=`echo $RELEASE | awk --assign FS=. '{ print $1; }'` - RELEASE_MINOR=`echo $RELEASE | awk --assign FS=. '{ print $2; }'` - RELEASE_REVISION=`echo $RELEASE | awk --assign FS=. '{ print $3; }'` - - if [ -z "${RELEASE_MAJOR}" ] || [ -z "${RELEASE_MINOR}" ]; then - error "Release number \`${RELEASE}' is invalid" - fi - - # Compute the full name of the release. - if [ -z "${RELEASE_REVISION}" ]; then - RELEASE="${RELEASE_MAJOR}.${RELEASE_MINOR}" - else - RELEASE="${RELEASE_MAJOR}.${RELEASE_MINOR}.${RELEASE_REVISION}" - fi - - # Compute the name of the branch, which is based solely on the major - # and minor release numbers. - BRANCH="gcc-${RELEASE_MAJOR}_${RELEASE_MINOR}-branch" - - # If this is not a final release, set various parameters acordingly. - if [ ${FINAL} -ne 1 ]; then - RELEASE="${RELEASE}-${DATE}" - FTP_PATH="${FTP_PATH}/snapshots" - else - FTP_PATH="${FTP_PATH}/releases/gcc-${RELEASE}" - fi - - # Compute the name of the WORKING_DIRECTORY and the SOURCE_DIRECTORY. - WORKING_DIRECTORY="${DESTINATION}/gcc-${RELEASE}" - SOURCE_DIRECTORY="${WORKING_DIRECTORY}/gcc-${RELEASE}" - - # Recompute the names of all the language-specific directories, - # relative to the WORKING_DIRECTORY. - CPLUSPLUS_DIRS=`adjust_dirs ${CPLUSPLUS_DIRS}` - FORTRAN_DIRS=`adjust_dirs ${FORTRAN_DIRS}` - JAVA_DIRS=`adjust_dirs ${JAVA_DIRS}` - OBJECTIVEC_DIRS=`adjust_dirs ${OBJECTIVEC_DIRS}` - TESTSUITE_DIRS=`adjust_dirs ${TESTSUITE_DIRS}` - - # Set up CVSROOT. - CVSROOT=":${CVS_PROTOCOL}:${CVS_USERNAME}@" - CVSROOT="${CVSROOT}${CVS_SERVER}:${CVS_REPOSITORY}" - export CVSROOT - - ######################################################################## - # Main Program - ######################################################################## - - # Handle the major modes. - while [ $# -ne 0 ]; do - case $1 in - sources) MODE_SOURCES=1;; - tarfiles) MODE_TARFILES=1;; - upload) MODE_UPLOAD=1;; - all) MODE_SOURCES=1; MODE_TARFILES=1; MODE_UPLOAD=1;; - *) error "Unknown mode $1";; - esac - shift - done - - # Build the source directory. - - if [ $MODE_SOURCES -ne 0 ]; then - build_sources - fi - - # Build the tar files. - - if [ $MODE_TARFILES -ne 0 ]; then - build_tarfiles - fi - - # Upload them to the FTP server. - - if [ $MODE_UPLOAD -ne 0 ]; then - upload_files - fi --- 0 ---- diff -Nrc3pad gcc-3.0.4/contrib/gcc_update gcc-3.1/contrib/gcc_update *** gcc-3.0.4/contrib/gcc_update Sun Nov 18 20:11:47 2001 --- gcc-3.1/contrib/gcc_update Wed Nov 7 20:26:58 2001 *************** *** 38,47 **** # Default options used when updating via CVS. ! UPDATE_OPTIONS=-P ! # Add -d to create any directories that exist in the repository but not ! # locally. ! # Add -A to reset any sticky tags, dates, or `-k' options. # Arrange for the value of $0 to be available for functions self=$0 --- 38,50 ---- # Default options used when updating via CVS. ! UPDATE_OPTIONS=-Pd ! # Use -P to prune empty directories. ! # Use -d to create any directories that exist in the repository but not ! # locally. ! # Use -A to reset any sticky tags, dates, or `-k' options. ! ! ######## Anything below shouldn't be changed by regular users. # Arrange for the value of $0 to be available for functions self=$0 *************** gcc/configure: gcc/configure.in *** 66,79 **** gcc/cstamp-h.in: gcc/configure.in gcc/acconfig.h gcc/config.in: gcc/cstamp-h.in gcc/fixinc/fixincl.x: gcc/fixinc/fixincl.tpl gcc/fixinc/inclhack.def - gcc/doc/gcov.1: gcc/doc/gcov.texi - gcc/doc/cpp.1: gcc/doc/cpp.texi - gcc/doc/gcc.1: gcc/doc/invoke.texi - gcc/doc/fsf-funding.7: gcc/doc/include/funding.texi - gcc/doc/gfdl.7: gcc/doc/include/fdl.texi - gcc/doc/gpl.7: gcc/doc/include/gpl.texi # And then, language-specific files gcc/f/intdoc.texi: gcc/f/intdoc.in gcc/f/intdoc.c gcc/f/intrin.h gcc/f/intrin.def # And libraries, at last libchill/configure: libchill/configure.in libf2c/configure: libf2c/configure.in --- 69,81 ---- gcc/cstamp-h.in: gcc/configure.in gcc/acconfig.h gcc/config.in: gcc/cstamp-h.in gcc/fixinc/fixincl.x: gcc/fixinc/fixincl.tpl gcc/fixinc/inclhack.def # And then, language-specific files gcc/f/intdoc.texi: gcc/f/intdoc.in gcc/f/intdoc.c gcc/f/intrin.h gcc/f/intrin.def + gcc/ada/treeprs.ads: gcc/ada/treeprs.adt gcc/ada/sinfo.ads gcc/ada/xtreeprs.adb + gcc/ada/einfo.h: gcc/ada/einfo.ads gcc/ada/einfo.adb gcc/ada/xeinfo.adb + gcc/ada/sinfo.h: gcc/ada/sinfo.ads gcc/ada/xsinfo.adb + gcc/ada/nmake.adb: gcc/ada/sinfo.ads gcc/ada/nmake.adt gcc/ada/xnmake.adb + gcc/ada/nmake.ads: gcc/ada/sinfo.ads gcc/ada/nmake.adt gcc/ada/xnmake.adb # And libraries, at last libchill/configure: libchill/configure.in libf2c/configure: libf2c/configure.in diff -Nrc3pad gcc-3.0.4/contrib/regression/ChangeLog gcc-3.1/contrib/regression/ChangeLog *** gcc-3.0.4/contrib/regression/ChangeLog Thu Jan 1 00:00:00 1970 --- gcc-3.1/contrib/regression/ChangeLog Wed May 15 02:15:18 2002 *************** *** 0 **** --- 1,17 ---- + 2002-05-14 Release Manager + + * GCC 3.1 Released. + + 2002-05-14 Release Manager + + * GCC 3.1 Released. + + 2002-01-31 Geoffrey Keating + + * btest-gcc.sh: New file. + * objs-gcc.sh: New file. + * site.exp: New file. + * ChangeLog: New file. + * README: New file. + + diff -Nrc3pad gcc-3.0.4/contrib/regression/README gcc-3.1/contrib/regression/README *** gcc-3.0.4/contrib/regression/README Thu Jan 1 00:00:00 1970 --- gcc-3.1/contrib/regression/README Sat Feb 2 05:23:34 2002 *************** *** 0 **** --- 1,18 ---- + This directory contains scripts that are used by the regression + tester, . + + The primary script is 'btest-gcc.sh'. This is the script that is run + to actually test the compiler. + + 'objs-gcc.sh' takes a combined tree and builds (but does not test) the + tools required for 'btest-gcc.sh'. It is run periodically to update + the tools. This script is followed by running 'btest-gcc.sh' using + the newly-build tools to check that they will not cause regressions. + + 'site.exp' is what $DEJAGNU points to when the regression tester runs + these scripts. + + Note that any changes made here need to be approved by the regression + tester's maintainer (see MAINTAINERS). The changes will be used on + the tester's next run, so `experimental' changes are very strongly + discouraged :-). diff -Nrc3pad gcc-3.0.4/contrib/regression/btest-gcc.sh gcc-3.1/contrib/regression/btest-gcc.sh *** gcc-3.0.4/contrib/regression/btest-gcc.sh Thu Jan 1 00:00:00 1970 --- gcc-3.1/contrib/regression/btest-gcc.sh Sat Feb 2 05:23:34 2002 *************** *** 0 **** --- 1,172 ---- + #!/bin/sh + + # Test GCC. + # Copyright (C) 1999, 2000, 2001, 2002 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 of the License, 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + # INPUT: + # btest + # TARGET is the target triplet. It should be the same one + # as used in constructing PREFIX. + TARGET=$1 + # SOURCE is the directory containing the toplevel configure. + SOURCE=$2 + + # PREFIX is the directory for the --prefix option to configure. + # For cross compilers, it needs to contain header files, + # libraries, and binutils. PATH should probably include + # $PREFIX/bin. + PREFIX=$3 + # This script also needs to include the GDB testsuite in + # $PREFIX/share/gdb-testsuite. + GDB_TESTSUITE=$PREFIX/share/gdb-testsuite + + # STATE is where the tester maintains its internal state, + # described below. + STATE=$4 + + # BUILD is a temporary directory that this script will + # delete and recreate, containing the build tree. + BUILD=$5 + + # you also probably need to set these variables: + # PATH: should contain a native gcc, and a cross gdb. + # DEJAGNU: should point to a site.exp suitable for testing + # the compiler and debugger. + + + # OUTPUT: in $RESULT, one of the following keywords: + # error the script failed due to + # a misconfiguration or resource limitation + # build the build failed + # regress- the build succeeded, but there were + # testsuite regressions, listed in $REGRESS + # pass build succeeded and there were no regressions + RESULT=$STATE/RESULT + # in BUILD_LOG, the output of the build + BUILD_LOG=$STATE/build_log + # in FAILED, a list of failing testcases + FAILED=$STATE/failed + # in PASSES, the list of testcases we expect to pass + PASSES=$STATE/passes + # in REGRESS, a list of testcases we expected to pass but that failed + REGRESS=$STATE/regress + + # Make sure various files exist. + [ -d $STATE ] || mkdir $STATE + [ -f $PASSES ] || touch $PASSES + + # These lines should stay in this order, because + # that way if something is badly wrong and $RESULT can't + # be modified then cron will mail the error message. + # The reverse order could lead to the testsuite claiming that + # everything always passes, without running any tests. + echo error > $RESULT || exit 1 + exec > $BUILD_LOG 2>&1 || exit 1 + + set -x + + # Nuke $BUILD and recreate it. + rm -rf $BUILD $REGRESS $FAILED + mkdir $BUILD || exit 1 + cd $BUILD || exit 1 + + H_BUILD=`$SOURCE/config.guess || exit 1` + H_HOST=$H_BUILD + if [ $TARGET = native ] ; then + H_TARGET=$H_HOST + else + H_TARGET=$TARGET + fi + H_REAL_TARGET=`$SOURCE/config.sub $H_TARGET || exit 1` + + # TESTLOGS is the list of dejagnu .sum files that the tester should + # look at. + TESTLOGS="gcc/testsuite/gcc.sum + gcc/testsuite/g++.sum + gcc/testsuite/g77.sum + gcc/testsuite/objc.sum + test-gdb/gdb.sum" + # $H_TARGET/libstdc++-v3/testsuite/libstdc++-v3.sum + + # Build. + echo build > $RESULT + $SOURCE/configure --prefix=$PREFIX --target=$H_TARGET || exit 1 + if [ $H_HOST = $H_TARGET ] ; then + if ! make bootstrap ; then + [ -s gcc/.bad_compare ] || exit 1 + cat gcc/.bad_compare >> $REGRESS || exit 1 + make all || exit 1 + fi + else + make || exit 1 + fi + echo error > $RESULT || exit 1 + + # Test GCC against its internal testsuite. + make -k check-gcc + + # Test libstd++-v3 + make check-target-libstdc++-v3 + + # Test the just-built GCC with the GDB testsuite. + mkdir test-gdb || exit 1 + cd $GDB_TESTSUITE || exit 1 + for i in gdb.* ; do + if [ -d $i ] ; then + mkdir $BUILD/test-gdb/$i + fi + done + cd $BUILD/test-gdb || exit 1 + echo "set host_alias $H_HOST" > site.exp + echo "set host_triplet $H_HOST" >> site.exp + echo "set target_alias $H_TARGET" >> site.exp + echo "set target_triplet $H_REAL_TARGET" >> site.exp + echo "set build_alias $H_BUILD" >> site.exp + echo "set build_triplet $H_BUILD" >> site.exp + echo "set srcdir $GDB_TESTSUITE" >> site.exp + runtest --tool gdb + + # Sanity-check the testlogs. They should contain at least one PASS. + cd $BUILD || exit 1 + for LOG in $TESTLOGS ; do + if ! grep ^PASS: $LOG > /dev/null ; then + echo build > $RESULT + exit 1 + fi + done + + # Work out what failed + for LOG in $TESTLOGS ; do + L=`basename $LOG` + awk '/^FAIL: / { print "'$L'",$2; }' $LOG || exit 1 + done | sort | uniq > $FAILED || exit 1 + comm -12 $FAILED $PASSES >> $REGRESS || exit 1 + NUMREGRESS=`wc -l < $REGRESS | tr -d ' '` + if [ $NUMREGRESS -ne 0 ] ; then + echo regress-$NUMREGRESS > $RESULT + exit 1 + fi + + # It passed. Update the state. + for LOG in $TESTLOGS ; do + L=`basename $LOG` + awk '/^PASS: / { print "'$L'",$2; }' $LOG || exit 1 + done | sort | uniq | comm -23 - $FAILED > ${PASSES}~ || exit 1 + [ -s ${PASSES}~ ] || exit 1 + mv ${PASSES}~ ${PASSES} || exit 1 + echo pass > $RESULT + exit 0 diff -Nrc3pad gcc-3.0.4/contrib/regression/objs-gcc.sh gcc-3.1/contrib/regression/objs-gcc.sh *** gcc-3.0.4/contrib/regression/objs-gcc.sh Thu Jan 1 00:00:00 1970 --- gcc-3.1/contrib/regression/objs-gcc.sh Sat Feb 2 05:23:34 2002 *************** *** 0 **** --- 1,121 ---- + #!/bin/sh + + # Build tools for testing GCC. + # Copyright (C) 1999, 2000, 2001, 2002 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 of the License, 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + # INPUT: + # btest + # TARGET is the target triplet. It should be the same one + # as used in constructing PREFIX. + TARGET=$1 + # SOURCE is the directory containing the toplevel configure. + SOURCE=$2 + + # PREFIX is the directory for the --prefix option to configure. + PREFIX=$3 + + # STATE is where the tester maintains its internal state, + # described below. + STATE=$4 + + # BUILD is a temporary directory that this script will + # delete and recreate, containing the build tree. + BUILD=$5 + + # you also probably need to set these variables: + # DEJAGNU: should point to a site.exp suitable for testing + # the compiler and debugger. + + # OUTPUT: in $RESULT, one of the following keywords: + # error the script failed due to + # a misconfiguration or resource limitation + # build the build failed + # regress- the build succeeded, but there were + # testsuite regressions, listed in $REGRESS + # pass build succeeded and there were no regressions + RESULT=$STATE/RESULT + # in BUILD_LOG, the output of the build + BUILD_LOG=$STATE/build_log + # in FAILED, a list of failing testcases + FAILED=$STATE/failed + # in PASSES, the list of testcases we expect to pass + PASSES=$STATE/passes + # in REGRESS, a list of testcases we expected to pass but that failed + REGRESS=$STATE/regress + + # Make sure various files exist. + [ -d $STATE ] || mkdir $STATE + [ -f $PASSES ] || touch $PASSES + + # These lines should stay in this order, because + # that way if something is badly wrong and $RESULT can't + # be modified then cron will mail the error message. + # The reverse order could lead to the testsuite claiming that + # everything always passes, without running any tests. + echo error > $RESULT || exit 1 + exec > $BUILD_LOG 2>&1 || exit 1 + + set -x + + # TESTLOGS is the list of dejagnu .sum files that the tester should + # look at. + TESTLOGS="test/gcc/gcc.sum + test/g++/g++.sum" + + # Nuke $BUILD and recreate it. + rm -rf $BUILD $REGRESS $FAILED + mkdir $BUILD $BUILD/build $BUILD/objs || exit 1 + cd $BUILD || exit 1 + + # This script used to use config.guess, but that is not how releng + # determines hostnames. + H_BUILD=`$SOURCE/config.guess || exit 1` + H_HOST=$H_BUILD + if [ $TARGET = native ] ; then + H_TARGET=$H_HOST + else + H_TARGET=$TARGET + fi + H_REAL_TARGET=`$SOURCE/config.sub $H_TARGET || exit 1` + H_REAL_BUILD=`$SOURCE/config.sub $H_BUILD || exit 1` + H_REAL_HOST=`$SOURCE/config.sub $H_HOST || exit 1` + + # Build. + echo build > $RESULT + + cd $BUILD/build || exit 1 + TMP_PREFIX=$BUILD/install + $SOURCE/configure --prefix=$PREFIX --target=$H_TARGET || exit 1 + if [ $H_REAL_TARGET = $H_REAL_HOST -a $H_REAL_TARGET = i686-pc-linux-gnu ] + then + make all-gdb all-dejagnu all-ld || exit 1 + make install-gdb install-dejagnu install-ld || exit 1 + else + make || exit 1 + make install || exit 1 + fi + + mkdir -p $PREFIX/share/gdb-testsuite || exit 1 + cd $SOURCE/gdb/testsuite || exit 1 + find . -print | cpio -pdmu $PREFIX/share/gdb-testsuite || exit 1 + # selftest.exp requires keeping old sources around, which is impractical + rm $PREFIX/share/gdb-testsuite/gdb.base/selftest.exp + # these tests seem to be broken and randomly failing + rm -r $PREFIX/share/gdb-testsuite/gdb.mi + + echo pass > $RESULT + exit 0 diff -Nrc3pad gcc-3.0.4/contrib/regression/site.exp gcc-3.1/contrib/regression/site.exp *** gcc-3.0.4/contrib/regression/site.exp Thu Jan 1 00:00:00 1970 --- gcc-3.1/contrib/regression/site.exp Sat Feb 2 05:23:34 2002 *************** *** 0 **** --- 1,18 ---- + global target_list + + case "$target_triplet" in { + { "powerpc*-*eabi*" } { + # if { [info exists tool] && $tool == "gcc" } { + # set target_list { "powerpc-sim{,-fpic}" } + # } else { + set target_list { "powerpc-sim" } + # } + } + { "mips-elf" } { + set target_list { "mips-sim" } + } + + default { + set target_list { "unix" } + } + } diff -Nrc3pad gcc-3.0.4/contrib/snapshot gcc-3.1/contrib/snapshot *** gcc-3.0.4/contrib/snapshot Wed Jan 3 18:13:43 2001 --- gcc-3.1/contrib/snapshot Thu Jan 1 00:00:00 1970 *************** *** 1,181 **** - #! /bin/csh - # - # GCC snapshot generation script. - # - # Originally written by Jeff Law . Most minor modifications - # by Gerald Pfeifer . - - # TODO: Include the FAQ and installation instructions in the snapshot - - set SCRIPTDIR=/home/law/gcc - set STATEDIR=/home/law - set TMPDIR=/var/tmp - - set path = (/usr/local/bin $path) - - # Get somewhere useful with a lot of disk space. - cd $TMPDIR - - # Get date of current and previous snapshot. - set date=`date +%Y%m%d` - set last_date=`cat $STATEDIR/.snapshot_date` - set snapdir=`date +%Y-%m-%d` - - # Update and uncomment the following lines to run a particular snapshot pair. - #set date=971215 - #set last_date=19990920 - - # We run this on the cvs server itself so we can get at - # the cvs files quickly. - setenv CVSROOT /cvs/gcc - - # Get into a temporary directory so as not to be confused by - # any existing CVS administration files. - rm -rf $$ - mkdir $$ - cd $$ - - # Tag the current sources for the snapshot - cvs -z 9 -Q rtag -F gcc_ss_$date gcc - - # Get an exported copy of the last gcc-core module snapshot - # arggh gcc-core doesn't work right now, so check out the whole - # thing and remove bits we don't need. - #zcat ~ftp/pub/gcc/snapshots/1998-05-31/gcc-$last_date.tar.gz | tar xf - - cvs -z 9 -Q export -rgcc_ss_$last_date gcc - cd gcc - find . -type f -print | sort > ../files_$last_date - ~law/bin/brik -Gb -f ../files_$last_date > ../.brik_$last_date - cp ../.brik_$last_date ./.brik - cd .. - rm -rf gcc/{libio,libstdc++,libstdc++-v3,libf2c,libchill,libobjc} - rm -rf gcc/{boehm-gc,fastjar,libffi,libjava,zlib} - rm -rf gcc/gcc/{testsuite,f,objc,cp,java,ch} - mv gcc gcc-$last_date - - # Similarly for today's gcc-core module snapshot - cvs -z 9 -Q export -rgcc_ss_$date gcc - cd gcc - contrib/gcc_update --touch - find . -type f -print | sort > ../files_$date - ~law/bin/brik -Gb -f ../files_$date > ../.brik_$date - cp ../.brik_$date ./.brik - cd .. - rm -rf gcc/{libio,libstdc++,libstdc++-v3,libf2c,libchill,libobjc} - rm -rf gcc/{boehm-gc,fastjar,libffi,libjava,zlib} - rm -rf gcc/gcc/{testsuite,f,objc,cp,java,ch} - mv gcc gcc-$date - - rm -rf files_$date - rm -rf files_$last_date - - # Diff them - diff -Nrc3p gcc-$last_date gcc-$date > gcc-core-$last_date-$date.diff - - # Make the tarball for the core - tar cf - gcc-$date | gzip --best > gcc-core-$date.tar.gz - - # Remove the core gunk and get the whole thing back. - rm -rf gcc-$last_date - rm -rf gcc-$date - #zcat ~ftp/pub/gcc/snapshots/1998-05-31/gcc-$last_date.tar.gz | tar xf - - cvs -z 9 -Q export -rgcc_ss_$last_date gcc - mv gcc gcc-$last_date - cp .brik_$last_date gcc-$last_date/.brik - cvs -z 9 -Q export -rgcc_ss_$date gcc - cd gcc - contrib/gcc_update --touch - cd .. - mv gcc gcc-$date - cp .brik_$date gcc-$date/.brik - - # We don't need this anymore. - rm -rf .brik_$date - rm -rf .brik_$last_date - - # Now make diffs for g77, g77-testsuite chill, java objc, g++, g++-testsuite, - # testsuite, then the whole bloody thing. - diff -Nrc3p gcc-$last_date/gcc/f gcc-$date/gcc/f > gcc-g77-$last_date-$date.diff - diff -Nrc3p gcc-$last_date/libf2c gcc-$date/libf2c >> gcc-g77-$last_date-$date.diff - - diff -Nrc3p gcc-$last_date/gcc/testsuite/g77.f-torture gcc-$date/gcc/testsuite/g77.f-torture > gcc-g77-testsuite-$last_date-$date.diff - - diff -Nrc3p gcc-$last_date/gcc/objc gcc-$date/gcc/objc > gcc-objc-$last_date-$date.diff - diff -Nrc3p gcc-$last_date/libobjc gcc-$date/libobjc >> gcc-objc-$last_date-$date.diff - - diff -Nrc3p gcc-$last_date/gcc/java gcc-$date/gcc/java > gcc-java-$last_date-$date.diff - diff -Nrc3p gcc-$last_date/boehm-gc gcc-$date/boehm-gc >> gcc-java-$last_date-$date.diff - diff -Nrc3p gcc-$last_date/fastjar gcc-$date/fastjar >> gcc-java-$last_date-$date.diff - diff -Nrc3p gcc-$last_date/libffi gcc-$date/libffi >> gcc-java-$last_date-$date.diff - diff -Nrc3p gcc-$last_date/libjava gcc-$date/libjava >> gcc-java-$last_date-$date.diff - diff -Nrc3p gcc-$last_date/zlib gcc-$date/zlib >> gcc-java-$last_date-$date.diff - - diff -Nrc3p gcc-$last_date/gcc/ch gcc-$date/gcc/ch > gcc-chill-$last_date-$date.diff - diff -Nrc3p gcc-$last_date/libchill gcc-$date/libchill >> gcc-chill-$last_date-$date.diff - - diff -Nrc3p gcc-$last_date/gcc/cp gcc-$date/gcc/cp > gcc-g++-$last_date-$date.diff - diff -Nrc3p gcc-$last_date/libio gcc-$date/libio >> gcc-g++-$last_date-$date.diff - diff -Nrc3p gcc-$last_date/libstdc++ gcc-$date/libstdc++ >> gcc-g++-$last_date-$date.diff - diff -Nrc3p gcc-$last_date/libstdc++-v3 gcc-$date/libstdc++-v3 >> gcc-g++-$last_date-$date.diff - - diff -Nrc3p gcc-$last_date/gcc/testsuite/g++.old-deja gcc-$date/gcc/testsuite/g++.old-deja > gcc-g++-tests-$last_date-$date.diff - - diff -Nrc3p gcc-$last_date/gcc/testsuite gcc-$date/gcc/testsuite > gcc-tests-$last_date-$date.diff - - diff -Nrc3p gcc-$last_date gcc-$date > gcc-$last_date-$date.diff - - - # Apply the patches to the old snapshot and run another diff to see if anything - # bad happened. - cd gcc-$last_date - patch -p1 -E -s < ../gcc-$last_date-$date.diff - find . -name \*.orig -print | xargs rm -rf - rm -rf .brik.orig - find . -name \*.rej > $STATEDIR/CHECKME - ~law/bin/brik -C .brik >> $STATEDIR/CHECKME - cd .. - diff -Nrc3p gcc-$last_date gcc-$date >> $STATEDIR/CHECKME - - # Remove the old snapshot, we're done with it. - #rm -rf gcc-$last_date - - # Make tarballs - # Touch all the machine generated files so people don't need gperf, bison and friends. - - tar cf - gcc-$date/.brik gcc-$date/gcc/f gcc-$date/libf2c | gzip --best > gcc-g77-$date.tar.gz - tar cf - gcc-$date/.brik gcc-$date/gcc/testsuite/g77.f-torture | gzip --best > gcc-g77-testsuite-$date.tar.gz - tar cf - gcc-$date/.brik gcc-$date/gcc/objc gcc-$date/libobjc | gzip --best > gcc-objc-$date.tar.gz - tar cf - gcc-$date/.brik gcc-$date/gcc/java gcc-$date/{boehm-gc,fastjar,libffi,libjava,zlib} | gzip --best > gcc-java-$date.tar.gz - tar cf - gcc-$date/.brik gcc-$date/gcc/ch gcc-$date/libchill | gzip --best > gcc-chill-$date.tar.gz - tar cf - gcc-$date/.brik gcc-$date/gcc/cp gcc-$date/{libio,libstdc++,libstdc++-v3} | gzip --best > gcc-g++-$date.tar.gz - tar cf - gcc-$date/.brik gcc-$date/gcc/testsuite/g++.old-deja | gzip --best > gcc-g++-tests-$date.tar.gz - tar cf - gcc-$date/.brik gcc-$date/gcc/testsuite | gzip --best > gcc-tests-$date.tar.gz - tar cf - gcc-$date | gzip --best > gcc-$date.tar.gz - - # Compress the diff files. - gzip --best *.diff - - # Copy them to the FTP server XXX - mkdir ~ftp/pub/gcc/snapshots/$snapdir - chmod 775 ~ftp/pub/gcc/snapshots/$snapdir - cp *.gz ~ftp/pub/gcc/snapshots/$snapdir - foreach tst (*.gz) - echo $tst `sum $tst` >>~ftp/pub/gcc/snapshots/$snapdir/CHECKSUMS - end - - # Update links on the ftp server - $SCRIPTDIR/update_links $date - - # Get back to the toplevel directory before we update the date. - cd $STATEDIR - - # Note that we made a snapshot today - mv .snapshot_date .prev_snapshot_date - echo $date > .snapshot_date - - $SCRIPTDIR/update_tags - - # Announce it XXX - mail -s "gcc-ss-$date is now available" gcc@gcc.gnu.org < ~ftp/pub/gcc/snapshots/README - mail -s "snapshot:CHECKME" law@cygnus.com < $STATEDIR/CHECKME - rm -rf $TMPDIR/$$ --- 0 ---- diff -Nrc3pad gcc-3.0.4/contrib/test_summary gcc-3.1/contrib/test_summary *** gcc-3.0.4/contrib/test_summary Sun Jul 29 06:46:24 2001 --- gcc-3.1/contrib/test_summary Sun Feb 24 20:45:15 2002 *************** $1 ~ /\/configure$/ { *** 115,121 **** $2 == "version" { save = $0; $1 = ""; $2 = ""; version = $0; gsub(/^ */, "", version); gsub(/\r$/, "", version); $0 = save; } /\===.*Summary/ { print ""; print; blanks=1; } /tests ===/ || /^(Target|Host|Native)/ || $2 == "version" { print; blanks=1; } ! /^(XPASS|FAIL|# of )/ { print; } # dumpall != 0 && /^X?(PASS|FAIL|UNTESTED)|^testcase/ { dumpall=0; } # dumpall != 0 { print; } # /^FAIL/ { dumpall=1; } --- 115,121 ---- $2 == "version" { save = $0; $1 = ""; $2 = ""; version = $0; gsub(/^ */, "", version); gsub(/\r$/, "", version); $0 = save; } /\===.*Summary/ { print ""; print; blanks=1; } /tests ===/ || /^(Target|Host|Native)/ || $2 == "version" { print; blanks=1; } ! /^(XPASS|FAIL|UNRESOLVED|WARNING|ERROR|# of )/ { print; } # dumpall != 0 && /^X?(PASS|FAIL|UNTESTED)|^testcase/ { dumpall=0; } # dumpall != 0 { print; } # /^FAIL/ { dumpall=1; } diff -Nrc3pad gcc-3.0.4/contrib/texi2pod.pl gcc-3.1/contrib/texi2pod.pl *** gcc-3.0.4/contrib/texi2pod.pl Wed Nov 14 22:33:28 2001 --- gcc-3.1/contrib/texi2pod.pl Wed Apr 3 18:33:58 2002 *************** $section = ""; *** 30,38 **** --- 30,41 ---- @icstack = (); @endwstack = (); @skstack = (); + @instack = (); $shift = ""; %defs = (); $fnno = 1; + $inf = ""; + $ibase = ""; while ($_ = shift) { if (/^-D(.*)$/) { *************** while ($_ = shift) { *** 41,51 **** } else { $flag = shift; } die "no flag specified for -D\n" unless $flag ne ""; ! die "flags may only contain letters, digits, hyphens, and underscores\n" unless $flag =~ /^[a-zA-Z0-9_-]+$/; ! $defs{$flag} = ""; } elsif (/^-/) { usage(); } else { --- 44,56 ---- } else { $flag = shift; } + $value = ""; + ($flag, $value) = ($flag =~ /^([^=]+)(?:=(.+))?/); die "no flag specified for -D\n" unless $flag ne ""; ! die "flags may only contain letters, digits, hyphens, dashes and underscores\n" unless $flag =~ /^[a-zA-Z0-9_-]+$/; ! $defs{$flag} = $value; } elsif (/^-/) { usage(); } else { *************** while ($_ = shift) { *** 56,69 **** } if (defined $in) { ! open(STDIN, $in) or die "opening \"$in\": $!\n"; } if (defined $out) { open(STDOUT, ">$out") or die "opening \"$out\": $!\n"; } ! while() ! { # Certain commands are discarded without further processing. /^\@(?: [a-z]+index # @*index: useful only in complete manual --- 61,79 ---- } if (defined $in) { ! $inf = gensym(); ! open($inf, "<$in") or die "opening \"$in\": $!\n"; ! $ibase = $1 if $in =~ m|^(.+)/[^/]+$|; ! } else { ! $inf = \*STDIN; } + if (defined $out) { open(STDOUT, ">$out") or die "opening \"$out\": $!\n"; } ! while(defined $inf) { ! while(<$inf>) { # Certain commands are discarded without further processing. /^\@(?: [a-z]+index # @*index: useful only in complete manual *************** while() *** 73,96 **** |node # @node: useful only in .info file |(?:end\s+)?ifnottex # @ifnottex .. @end ifnottex: use contents )\b/x and next; ! chomp; # Look for filename and title markers. /^\@setfilename\s+([^.]+)/ and $fn = $1, next; ! /^\@settitle\s+([^.]+)/ and $tl = $1, next; # Look for blocks surrounded by @c man begin SECTION ... @c man end. # This really oughta be @ifman ... @end ifman and the like, but such # would require rev'ing all other Texinfo translators. ! /^\@c man begin ([A-Z]+)/ and $sect = $1, $output = 1, next; ! /^\@c man end/ and do { $sects{$sect} = "" unless exists $sects{$sect}; $sects{$sect} .= postprocess($section); $section = ""; $output = 0; next; }; next unless $output; # Discard comments. (Can't do it above, because then we'd never see --- 83,131 ---- |node # @node: useful only in .info file |(?:end\s+)?ifnottex # @ifnottex .. @end ifnottex: use contents )\b/x and next; ! chomp; # Look for filename and title markers. /^\@setfilename\s+([^.]+)/ and $fn = $1, next; ! /^\@settitle\s+([^.]+)/ and $tl = postprocess($1), next; ! ! # Identify a man title but keep only the one we are interested in. ! /^\@c\s+man\s+title\s+([A-Za-z0-9-]+)\s+(.+)/ and do { ! if (exists $defs{$1}) { ! $fn = $1; ! $tl = postprocess($2); ! } ! next; ! }; # Look for blocks surrounded by @c man begin SECTION ... @c man end. # This really oughta be @ifman ... @end ifman and the like, but such # would require rev'ing all other Texinfo translators. ! /^\@c\s+man\s+begin\s+([A-Z]+)\s+([A-Za-z0-9-]+)/ and do { ! $output = 1 if exists $defs{$2}; ! $sect = $1; ! next; ! }; ! /^\@c\s+man\s+begin\s+([A-Z]+)/ and $sect = $1, $output = 1, next; ! /^\@c\s+man\s+end/ and do { $sects{$sect} = "" unless exists $sects{$sect}; $sects{$sect} .= postprocess($section); $section = ""; $output = 0; next; }; + + # handle variables + /^\@set\s+([a-zA-Z0-9_-]+)\s*(.*)$/ and do { + $defs{$1} = $2; + next; + }; + /^\@clear\s+([a-zA-Z0-9_-]+)/ and do { + delete $defs{$1}; + next; + }; + next unless $output; # Discard comments. (Can't do it above, because then we'd never see *************** while() *** 116,122 **** } elsif ($ended =~ /^(?:example|smallexample|display)$/) { $shift = ""; $_ = ""; # need a paragraph break ! } elsif ($ended =~ /^(?:itemize|enumerate|table)$/) { $_ = "\n=back\n"; $ic = pop @icstack; } else { --- 151,157 ---- } elsif ($ended =~ /^(?:example|smallexample|display)$/) { $shift = ""; $_ = ""; # need a paragraph break ! } elsif ($ended =~ /^(?:itemize|enumerate|[fv]?table)$/) { $_ = "\n=back\n"; $ic = pop @icstack; } else { *************** while() *** 188,198 **** } # Single line command handlers. - /^\@set\s+([a-zA-Z0-9_-]+)\s*(.*)$/ and $defs{$1} = $2, next; - /^\@clear\s+([a-zA-Z0-9_-]+)/ and delete $defs{$1}, next; ! /^\@(?:section|unnumbered|unnumberedsec|center)\s+(.+)$/ and $_ = "\n=head2 $1\n"; ! /^\@subsection\s+(.+)$/ and $_ = "\n=head3 $1\n"; # Block command handlers: /^\@itemize\s+(\@[a-z]+|\*|-)/ and do { --- 223,244 ---- } # Single line command handlers. ! /^\@include\s+(.+)$/ and do { ! push @instack, $inf; ! $inf = gensym(); ! ! # Try cwd and $ibase. ! open($inf, "<" . $1) ! or open($inf, "<" . $ibase . "/" . $1) ! or die "cannot open $1 or $ibase/$1: $!\n"; ! next; ! }; ! ! /^\@(?:section|unnumbered|unnumberedsec|center)\s+(.+)$/ ! and $_ = "\n=head2 $1\n"; ! /^\@subsection\s+(.+)$/ ! and $_ = "\n=head3 $1\n"; # Block command handlers: /^\@itemize\s+(\@[a-z]+|\*|-)/ and do { *************** while() *** 215,230 **** $endw = "enumerate"; }; ! /^\@table\s+(\@[a-z]+)/ and do { push @endwstack, $endw; push @icstack, $ic; ! $ic = $1; $ic =~ s/\@(?:samp|strong|key|gcctabopt|env)/B/; $ic =~ s/\@(?:code|kbd)/C/; $ic =~ s/\@(?:dfn|var|emph|cite|i)/I/; $ic =~ s/\@(?:file)/F/; $_ = "\n=over 4\n"; - $endw = "table"; }; /^\@((?:small)?example|display)/ and do { --- 261,276 ---- $endw = "enumerate"; }; ! /^\@([fv]?table)\s+(\@[a-z]+)/ and do { push @endwstack, $endw; push @icstack, $ic; ! $endw = $1; ! $ic = $2; $ic =~ s/\@(?:samp|strong|key|gcctabopt|env)/B/; $ic =~ s/\@(?:code|kbd)/C/; $ic =~ s/\@(?:dfn|var|emph|cite|i)/I/; $ic =~ s/\@(?:file)/F/; $_ = "\n=over 4\n"; }; /^\@((?:small)?example|display)/ and do { *************** while() *** 247,252 **** --- 293,302 ---- $section .= $shift.$_."\n"; } + # End of current file. + close($inf); + $inf = pop @instack; + } die "No filename or title\n" unless defined $fn && defined $tl; *************** sub postprocess *** 274,280 **** local $_ = $_[0]; # @value{foo} is replaced by whatever 'foo' is defined as. ! s/\@value\{([a-zA-Z0-9_-]+)\}/$defs{$1}/g; # Formatting commands. # Temporary escape for @r. --- 324,338 ---- local $_ = $_[0]; # @value{foo} is replaced by whatever 'foo' is defined as. ! while (m/(\@value\{([a-zA-Z0-9_-]+)\})/g) { ! if (! exists $defs{$2}) { ! print STDERR "Option $2 not defined\n"; ! s/\Q$1\E//; ! } else { ! $value = $defs{$2}; ! s/\Q$1\E/$value/; ! } ! } # Formatting commands. # Temporary escape for @r. *************** sub add_footnote *** 355,358 **** $sects{FOOTNOTES} .= $_[0]; $sects{FOOTNOTES} .= "\n\n"; } ! --- 413,427 ---- $sects{FOOTNOTES} .= $_[0]; $sects{FOOTNOTES} .= "\n\n"; } ! ! # stolen from Symbol.pm ! { ! my $genseq = 0; ! sub gensym ! { ! my $name = "GEN" . $genseq++; ! my $ref = \*{$name}; ! delete $::{$name}; ! return $ref; ! } ! } diff -Nrc3pad gcc-3.0.4/contrib/warn_summary gcc-3.1/contrib/warn_summary *** gcc-3.0.4/contrib/warn_summary Mon Jan 15 17:53:57 2001 --- gcc-3.1/contrib/warn_summary Wed Jan 2 03:35:21 2002 *************** *** 3,13 **** # This script parses the output of a gcc bootstrap when using warning # flags and determines various statistics. # ! # usage: warn_summary [-llf] [-s stage] [-nosub|-ch|-cp|-f|-java|-intl|-fixinc] # [-pass|-wpass] [file(s)] # # -llf ! # Filter out long lines from the bootstap output before any other # action. This is useful for systems with broken awks/greps which choke # on long lines. It is not done by default as it sometimes slows things # down. --- 3,13 ---- # This script parses the output of a gcc bootstrap when using warning # flags and determines various statistics. # ! # usage: warn_summary [-llf] [-s stage] [-nosub|-ch|-cp|-f|-java|-ada|-intl|-fixinc] # [-pass|-wpass] [file(s)] # # -llf ! # Filter out long lines from the bootstrap output before any other # action. This is useful for systems with broken awks/greps which choke # on long lines. It is not done by default as it sometimes slows things # down. *************** *** 19,25 **** # # -nosub # Only show warnings from the gcc top level directory. ! # -ch|-cp|-f|-java|-intl|-fixinc # Only show warnings from the specified language subdirectory. # These override each other so only the last one passed takes effect. # --- 19,25 ---- # # -nosub # Only show warnings from the gcc top level directory. ! # -ch|-cp|-f|-java|-ada|-intl|-fixinc # Only show warnings from the specified language subdirectory. # These override each other so only the last one passed takes effect. # *************** s%^[^ ]*/\(lib[a-z23+-]*/\)%\1%;' *** 132,138 **** # Start the main section. ! usage="usage: `basename $0` [-llf] [-s stage] [-nosub|-ch|-cp|-f|-java|-intl|-fixinc] [-pass|-wpass] [file(s)]" stageN=3 tmpfile=/tmp/tmp-warn.$$ --- 132,138 ---- # Start the main section. ! usage="usage: `basename $0` [-llf] [-s stage] [-nosub|-ch|-cp|-f|-java|-ada|-intl|-fixinc] [-pass|-wpass] [file(s)]" stageN=3 tmpfile=/tmp/tmp-warn.$$ *************** while test -n "$1" ; do *** 158,164 **** -s) if test -z "$2"; then echo $usage 1>&2; exit 1; fi stageN="$2"; shift 2 ;; -s*) stageN="`expr $1 : '-s\(.*\)'`" ; shift ;; ! -nosub|-ch|-cp|-f|-java|-intl|-fixinc) filter="`expr $1 : '-\(.*\)'`" ; shift ;; -pass) pass=1 ; shift ;; -wpass) pass=w ; shift ;; -*) echo $usage 1>&2 ; exit 1 ;; --- 158,164 ---- -s) if test -z "$2"; then echo $usage 1>&2; exit 1; fi stageN="$2"; shift 2 ;; -s*) stageN="`expr $1 : '-s\(.*\)'`" ; shift ;; ! -nosub|-ch|-cp|-f|-java|-ada|-intl|-fixinc) filter="`expr $1 : '-\(.*\)'`" ; shift ;; -pass) pass=1 ; shift ;; -wpass) pass=w ; shift ;; -*) echo $usage 1>&2 ; exit 1 ;; diff -Nrc3pad gcc-3.0.4/faq.html gcc-3.1/faq.html *** gcc-3.0.4/faq.html Wed Feb 20 19:41:08 2002 --- gcc-3.1/faq.html Wed May 15 02:40:23 2002 *************** *** 14,23 ****

    This FAQ tries to answer specific questions concerning GCC. For general information regarding C, C++, resp. Fortran please check the comp.lang.c FAQ, ! ! comp.std.c++ FAQ, and the Fortran Information ! page.

    Other GCC-related FAQs: --- 14,23 ----

    This FAQ tries to answer specific questions concerning GCC. For general information regarding C, C++, resp. Fortran please check the comp.lang.c FAQ, ! comp.std.c++ ! FAQ, ! and the Fortran ! Information page.

    Other GCC-related FAQs: diff -Nrc3pad gcc-3.0.4/gcc/.cvsignore gcc-3.1/gcc/.cvsignore *** gcc-3.0.4/gcc/.cvsignore Sat Jan 13 00:24:38 2001 --- gcc-3.1/gcc/.cvsignore Wed Aug 15 04:52:54 2001 *************** gcc.info* *** 9,11 **** --- 9,13 ---- cpp.info* c-tree.info* cppinternals.info* + cscope.files + cscope.out diff -Nrc3pad gcc-3.0.4/gcc/.gdbinit gcc-3.1/gcc/.gdbinit *** gcc-3.0.4/gcc/.gdbinit Tue Mar 16 20:58:45 1999 --- gcc-3.1/gcc/.gdbinit Thu Jan 1 00:00:00 1970 *************** *** 1,102 **** - define pr - set debug_rtx ($) - end - - document pr - Print the full structure of the rtx that is $. - Works only when an inferior is executing. - end - - define prl - set debug_rtx_list ($, debug_rtx_count) - end - - document prl - Print the full structure of all rtx insns beginning at $. - Works only when an inferior is executing. - Uses variable debug_rtx_count to control number of insns printed: - debug_rtx_count > 0: print from $ on. - debug_rtx_count < 0: print a window around $. - - There is also debug_rtx_find (rtx, uid) that will scan a list for UID and print - it using debug_rtx_list. Usage example: set $foo=debug_rtx_find(first, 42) - end - - define pt - set debug_tree ($) - end - - document pt - Print the full structure of the tree that is $. - Works only when an inferior is executing. - end - - define ptc - output (enum tree_code) $.common.code - echo \n - end - - document ptc - Print the tree-code of the tree node that is $. - end - - define pdn - output $.decl.name->identifier.pointer - echo \n - end - - document pdn - Print the name of the decl-node that is $. - end - - define ptn - output $.type.name->decl.name->identifier.pointer - echo \n - end - - document ptn - Print the name of the type-node that is $. - end - - define prc - output (enum rtx_code) $.code - echo \ ( - output $.mode - echo )\n - end - - document prc - Print the rtx-code and machine mode of the rtx that is $. - end - - define pi - print $.fld[0].rtx@7 - end - - document pi - Print the fields of an instruction that is $. - end - - define pbs - set print_binding_stack () - end - - document pbs - In cc1plus, print the current binding stack, frame by frame, up to and - including the global binding level. - end - - # Put breakpoints at exit and fancy_abort in case abort is mapped - # to either fprintf/exit or fancy_abort. - b exit - b fancy_abort - - # Make gdb complain about symbol reading errors. This is so that gcc - # developers can see and fix bugs in gcc debug output. - set complaints 20 - - # Don't let abort actually run, as it will make - # stdio stop working and therefore the `pr' command above as well. - # Put this last because gcc does not reference it any more unless - # USE_SYSTEM_ABORT is defined, so gdb may complain and bail out. - b abort --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/ABOUT-GCC-NLS gcc-3.1/gcc/ABOUT-GCC-NLS *** gcc-3.0.4/gcc/ABOUT-GCC-NLS Tue Nov 7 17:45:31 2000 --- gcc-3.1/gcc/ABOUT-GCC-NLS Sun Apr 22 22:33:45 2001 *************** line, where MSGID does not contain `%' o *** 36,50 **** message MSGID that requires translation; this is needed to identify diagnostics in GCC spec strings. ! If you modify source files, you'll need to use a special version of the GNU gettext package to propagate the modifications to the translation tables. - All patches needed for GCC have been incorporated into the official - gettext CVS. These sources may be accessed via anonymous cvs. The root for - the gettext CVS is :pserver:anoncvs@anoncvs.cygnus.com:/cvs/gettext - Password is `anoncvs' like for the GCC CVS. - After having built and installed these gettext tools, you have to configure GCC with --enable-maintainer-mode to get the master catalog rebuilt. --- 36,45 ---- message MSGID that requires translation; this is needed to identify diagnostics in GCC spec strings. ! If you modify source files, you'll need at least version 0.10.37 of the GNU gettext package to propagate the modifications to the translation tables. After having built and installed these gettext tools, you have to configure GCC with --enable-maintainer-mode to get the master catalog rebuilt. diff -Nrc3pad gcc-3.0.4/gcc/ABOUT-NLS gcc-3.1/gcc/ABOUT-NLS *** gcc-3.0.4/gcc/ABOUT-NLS Sat Sep 4 15:08:54 1999 --- gcc-3.1/gcc/ABOUT-NLS Fri Oct 12 17:23:46 2001 *************** A few packages already provide translati *** 8,14 **** If you found this `ABOUT-NLS' file inside a distribution, you may assume that the distributed package does use GNU `gettext' internally, ! itself available at your nearest GNU archive site. But you do *not* need to install GNU `gettext' prior to configuring, installing or using this package with messages translated. --- 8,14 ---- If you found this `ABOUT-NLS' file inside a distribution, you may assume that the distributed package does use GNU `gettext' internally, ! itself available at your nearest GNU archive site. But you do _not_ need to install GNU `gettext' prior to configuring, installing or using this package with messages translated. *************** related to internationalization, you sho *** 22,29 **** `gettext' which is used. The information can be found in the `intl/VERSION' file, in internationalized packages. ! One advise in advance ! ===================== If you want to exploit the full power of internationalization, you should configure it using --- 22,29 ---- `gettext' which is used. The information can be found in the `intl/VERSION' file, in internationalized packages. ! Quick configuration advice ! ========================== If you want to exploit the full power of internationalization, you should configure it using *************** to force usage of internationalizing rou *** 34,46 **** package, despite the existence of internationalizing capabilities in the operating system where this package is being installed. So far, only the `gettext' implementation in the GNU C library version 2 provides as ! many features (such as locale alias or message inheritance) as the ! implementation here. It is also not possible to offer this additional ! functionality on top of a `catgets' implementation. Future versions of ! GNU `gettext' will very likely convey even more functionality. So it ! might be a good idea to change to GNU `gettext' as soon as possible. ! So you need not provide this option if you are using GNU libc 2 or you have installed a recent copy of the GNU gettext package with the included `libintl'. --- 34,47 ---- package, despite the existence of internationalizing capabilities in the operating system where this package is being installed. So far, only the `gettext' implementation in the GNU C library version 2 provides as ! many features (such as locale alias, message inheritance, automatic ! charset conversion or plural form handling) as the implementation here. ! It is also not possible to offer this additional functionality on top ! of a `catgets' implementation. Future versions of GNU `gettext' will ! very likely convey even more functionality. So it might be a good idea ! to change to GNU `gettext' as soon as possible. ! So you need _not_ provide this option if you are using GNU libc 2 or you have installed a recent copy of the GNU gettext package with the included `libintl'. *************** Most such packages use GNU `gettext'. O *** 53,75 **** ways to internationalization, predating GNU `gettext'. By default, this package will be installed to allow translation of ! messages. It will automatically detect whether the system provides ! usable `catgets' (if using this is selected by the installer) or ! `gettext' functions. If neither is available, the GNU `gettext' own library will be used. This library is wholly contained within this package, usually in the `intl/' subdirectory, so prior installation of ! the GNU `gettext' package is *not* required. Installers may use special options at configuration time for changing the default behaviour. The commands: ./configure --with-included-gettext - ./configure --with-catgets ./configure --disable-nls ! will respectively bypass any pre-existing `catgets' or `gettext' to use ! the internationalizing routines provided within this package, enable ! the use of the `catgets' functions (if found on the locale system), or ! else, *totally* disable translation of messages. When you already have GNU `gettext' installed on your system and run configure without an option for your new package, `configure' will --- 54,73 ---- ways to internationalization, predating GNU `gettext'. By default, this package will be installed to allow translation of ! messages. It will automatically detect whether the system already ! provides the GNU `gettext' functions. If not, the GNU `gettext' own library will be used. This library is wholly contained within this package, usually in the `intl/' subdirectory, so prior installation of ! the GNU `gettext' package is _not_ required. Installers may use special options at configuration time for changing the default behaviour. The commands: ./configure --with-included-gettext ./configure --disable-nls ! will respectively bypass any pre-existing `gettext' to use the ! internationalizing routines provided within this package, or else, ! _totally_ disable translation of messages. When you already have GNU `gettext' installed on your system and run configure without an option for your new package, `configure' will *************** package is more recent, you should use *** 83,100 **** to prevent auto-detection. ! By default the configuration process will not test for the `catgets' ! function and therefore they will not be used. The reasons are already ! given above: the emulation on top of `catgets' cannot provide all the ! extensions provided by the GNU `gettext' library. If you nevertheless ! want to use the `catgets' functions use ! ! ./configure --with-catgets ! ! to enable the test for `catgets' (this causes no harm if `catgets' is ! not available on your system). If you really select this option we ! would like to hear about the reasons because we cannot think of any ! good one ourself. Internationalized packages have usually many `po/LL.po' files, where LL gives an ISO 639 two-letter code identifying the language. Unless --- 81,90 ---- to prevent auto-detection. ! The configuration process will not test for the `catgets' function ! and therefore it will not be used. The reason is that even an ! emulation of `gettext' on top of `catgets' could not provide all the ! extensions of the GNU `gettext' library. Internationalized packages have usually many `po/LL.po' files, where LL gives an ISO 639 two-letter code identifying the language. Unless *************** Using This Package *** 110,131 **** As a user, if your language has been installed for this package, you only have to set the `LANG' environment variable to the appropriate ! ISO 639 `LL' two-letter code prior to using the programs in the ! package. For example, let's suppose that you speak German. At the ! shell prompt, merely execute `setenv LANG de' (in `csh'), ! `export LANG; LANG=de' (in `sh') or `export LANG=de' (in `bash'). This ! can be done from your `.login' or `.profile' file, once and for all. ! An operating system might already offer message localization for ! many of its programs, while other programs have been installed locally ! with the full capabilities of GNU `gettext'. Just using `gettext' ! extended syntax for `LANG' would break proper localization of already ! available operating system programs. In this case, users should set ! both `LANGUAGE' and `LANG' variables in their environment, as programs ! using GNU `gettext' give preference to `LANGUAGE'. For example, some ! Swedish users would rather read translations in German than English for ! when Swedish is not available. This is easily accomplished by setting ! `LANGUAGE' to `sv:de' while leaving `LANG' to `sv'. Translating Teams ================= --- 100,134 ---- As a user, if your language has been installed for this package, you only have to set the `LANG' environment variable to the appropriate ! `LL_CC' combination. Here `LL' is an ISO 639 two-letter language code, ! and `CC' is an ISO 3166 two-letter country code. For example, let's ! suppose that you speak German and live in Germany. At the shell ! prompt, merely execute `setenv LANG de_DE' (in `csh'), ! `export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash'). ! This can be done from your `.login' or `.profile' file, once and for ! all. ! You might think that the country code specification is redundant. ! But in fact, some languages have dialects in different countries. For ! example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The ! country code serves to distinguish the dialects. ! ! Not all programs have translations for all languages. By default, an ! English message is shown in place of a nonexistent translation. If you ! understand other languages, you can set up a priority list of languages. ! This is done through a different environment variable, called ! `LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG' ! for the purpose of message handling, but you still need to have `LANG' ! set to the primary language; this is required by other parts of the ! system libraries. For example, some Swedish users who would rather ! read translations in German than English for when Swedish is not ! available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'. ! ! In the `LANGUAGE' environment variable, but not in the `LANG' ! environment variable, `LL_CC' combinations can be abbreviated as `LL' ! to denote the language's main dialect. For example, `de' is equivalent ! to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT' ! (Portuguese as spoken in Portugal) in this context. Translating Teams ================= *************** Translating Teams *** 133,165 **** For the Free Translation Project to be a success, we need interested people who like their own language and write it well, and who are also able to synergize with other translators speaking the same language. ! Each translation team has its own mailing list, courtesy of Linux ! International. You may reach your translation team at the address ! `LL@li.org', replacing LL by the two-letter ISO 639 code for your ! language. Language codes are *not* the same as the country codes given ! in ISO 3166. The following translation teams exist, as of December ! 1997: ! ! Chinese `zh', Czech `cs', Danish `da', Dutch `nl', English `en', ! Esperanto `eo', Finnish `fi', French `fr', German `de', Hungarian ! `hu', Irish `ga', Italian `it', Indonesian `id', Japanese `ja', ! Korean `ko', Latin `la', Norwegian `no', Persian `fa', Polish ! `pl', Portuguese `pt', Russian `ru', Slovenian `sl', Spanish `es', ! Swedish `sv', and Turkish `tr'. ! ! For example, you may reach the Chinese translation team by writing to ! `zh@li.org'. ! If you'd like to volunteer to *work* at translating messages, you should become a member of the translating team for your own language. ! The subscribing address is *not* the same as the list itself, it has `-request' appended. For example, speakers of Swedish can send a message to `sv-request@li.org', having this message body: subscribe Keep in mind that team members are expected to participate ! *actively* in translations, or at solving translational difficulties, rather than merely lurking around. If your team does not exist yet and you want to start one, or if you are unsure about what to do or how to get started, please write to `translation@iro.umontreal.ca' to reach the --- 136,156 ---- For the Free Translation Project to be a success, we need interested people who like their own language and write it well, and who are also able to synergize with other translators speaking the same language. ! Each translation team has its own mailing list. The up-to-date list of ! teams can be found at the Free Translation Project's homepage, ! `http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams" ! area. ! If you'd like to volunteer to _work_ at translating messages, you should become a member of the translating team for your own language. ! The subscribing address is _not_ the same as the list itself, it has `-request' appended. For example, speakers of Swedish can send a message to `sv-request@li.org', having this message body: subscribe Keep in mind that team members are expected to participate ! _actively_ in translations, or at solving translational difficulties, rather than merely lurking around. If your team does not exist yet and you want to start one, or if you are unsure about what to do or how to get started, please write to `translation@iro.umontreal.ca' to reach the *************** Available Packages *** 173,214 **** ================== Languages are not equally supported in all packages. The following ! matrix shows the current state of internationalization, as of December ! 1997. The matrix shows, in regard of each package, for which languages ! PO files have been submitted to translation coordination. ! Ready PO files cs da de en es fi fr it ja ko nl no pl pt ru sl sv ! .----------------------------------------------------. ! bash | [] [] [] | 3 ! bison | [] [] [] | 3 ! clisp | [] [] [] [] | 4 ! cpio | [] [] [] [] [] [] | 6 ! diffutils | [] [] [] [] [] | 5 ! enscript | [] [] [] [] [] [] | 6 ! fileutils | [] [] [] [] [] [] [] [] [] [] | 10 ! findutils | [] [] [] [] [] [] [] [] [] | 9 ! flex | [] [] [] [] | 4 ! gcal | [] [] [] [] [] | 5 ! gettext | [] [] [] [] [] [] [] [] [] [] [] | 12 ! grep | [] [] [] [] [] [] [] [] [] [] | 10 ! hello | [] [] [] [] [] [] [] [] [] [] [] | 11 ! id-utils | [] [] [] | 3 ! indent | [] [] [] [] [] | 5 ! libc | [] [] [] [] [] [] [] | 7 ! m4 | [] [] [] [] [] [] | 6 ! make | [] [] [] [] [] [] | 6 ! music | [] [] | 2 ! ptx | [] [] [] [] [] [] [] [] | 8 ! recode | [] [] [] [] [] [] [] [] [] | 9 ! sh-utils | [] [] [] [] [] [] [] [] | 8 ! sharutils | [] [] [] [] [] [] | 6 ! tar | [] [] [] [] [] [] [] [] [] [] [] | 11 ! texinfo | [] [] [] | 3 ! textutils | [] [] [] [] [] [] [] [] [] | 9 ! wdiff | [] [] [] [] [] [] [] [] | 8 ! `----------------------------------------------------' ! 17 languages cs da de en es fi fr it ja ko nl no pl pt ru sl sv ! 27 packages 6 4 25 1 18 1 26 2 1 12 20 9 19 7 4 7 17 179 Some counters in the preceding matrix are higher than the number of visible blocks let us expect. This is because a few extra PO files are --- 164,291 ---- ================== Languages are not equally supported in all packages. The following ! matrix shows the current state of internationalization, as of September ! 2001. The matrix shows, in regard of each package, for which languages ! PO files have been submitted to translation coordination, with a ! translation percentage of at least 50%. ! Ready PO files bg cs da de el en eo es et fi fr gl he hr id it ja ! +----------------------------------------------------+ ! a2ps | [] [] [] | ! bash | [] [] [] [] | ! bfd | | ! binutils | [] | ! bison | [] [] [] [] [] | ! clisp | [] [] [] [] | ! cpio | [] [] [] [] [] | ! diffutils | [] [] [] [] [] [] [] | ! enscript | [] [] | ! error | [] [] | ! fetchmail | | ! fileutils | [] [] [] [] [] [] [] [] | ! findutils | [] [] [] [] [] [] [] [] | ! flex | [] [] [] | ! freetype | | ! gas | | ! gawk | [] [] | ! gcal | | ! gcc | | ! gettext | [] [] [] [] [] [] [] [] [] [] | ! gnupg | [] [] [] [] [] [] [] | ! gprof | | ! grep | [] [] [] [] [] [] [] [] | ! hello | [] [] [] [] [] [] [] [] [] [] [] | ! id-utils | [] [] [] | ! indent | [] [] [] [] [] | ! jpilot | [] | ! kbd | | ! ld | [] | ! libc | [] [] [] [] [] [] [] [] | ! lilypond | [] | ! lynx | [] [] [] [] | ! m4 | [] [] [] [] [] [] [] [] | ! make | [] [] [] [] [] [] | ! mysecretdiary | [] | ! nano | [] [] [] | ! opcodes | | ! parted | [] [] [] | ! ptx | [] [] [] [] [] [] [] | ! python | | ! recode | [] [] [] [] [] [] [] [] [] | ! sed | [] [] [] [] [] [] [] [] [] [] [] [] | ! sh-utils | [] [] [] [] [] [] [] [] [] [] | ! sharutils | [] [] [] [] [] [] [] [] | ! sketch | | ! soundtracker | [] [] [] | ! sp | | ! tar | [] [] [] [] [] [] [] [] | ! texinfo | [] [] [] [] [] [] | ! textutils | [] [] [] [] [] [] [] [] | ! util-linux | [] [] | ! wdiff | [] [] [] | ! wget | [] [] [] [] [] [] [] [] [] [] | ! +----------------------------------------------------+ ! bg cs da de el en eo es et fi fr gl he hr id it ja ! 0 14 24 32 11 1 8 23 13 1 33 22 4 0 7 9 18 ! ! ko lv nb nl nn no pl pt pt_BR ru sk sl sv tr uk zh ! +----------------------------------------------------+ ! a2ps | [] [] [] | 6 ! bash | | 4 ! bfd | | 0 ! binutils | | 1 ! bison | [] | 6 ! clisp | [] | 5 ! cpio | [] [] [] [] [] | 10 ! diffutils | [] [] [] [] | 11 ! enscript | [] [] [] | 5 ! error | [] [] | 4 ! fetchmail | | 0 ! fileutils | [] [] [] [] [] [] [] [] [] | 17 ! findutils | [] [] [] [] [] [] [] [] | 16 ! flex | [] [] [] | 6 ! freetype | | 0 ! gas | | 0 ! gawk | [] | 3 ! gcal | | 0 ! gcc | | 0 ! gettext | [] [] [] [] [] [] [] [] | 18 ! gnupg | [] [] [] | 10 ! gprof | | 0 ! grep | [] [] [] [] | 12 ! hello | [] [] [] [] [] [] [] [] [] [] [] | 22 ! id-utils | [] [] [] | 6 ! indent | [] [] [] [] [] [] [] | 12 ! jpilot | | 1 ! kbd | [] | 1 ! ld | | 1 ! libc | [] [] [] [] [] [] [] [] | 16 ! lilypond | [] [] | 3 ! lynx | [] [] [] [] | 8 ! m4 | [] [] [] [] | 12 ! make | [] [] [] [] [] [] | 12 ! mysecretdiary | | 1 ! nano | [] | 4 ! opcodes | [] | 1 ! parted | [] [] | 5 ! ptx | [] [] [] [] [] [] [] [] | 15 ! python | | 0 ! recode | [] [] [] [] | 13 ! sed | [] [] [] [] [] [] [] | 19 ! sh-utils | [] [] [] [] [] [] [] [] [] [] [] | 21 ! sharutils | [] [] [] | 11 ! sketch | | 0 ! soundtracker | | 3 ! sp | | 0 ! tar | [] [] [] [] [] [] [] | 15 ! texinfo | [] | 7 ! textutils | [] [] [] [] [] [] [] [] | 16 ! util-linux | [] [] | 4 ! wdiff | [] [] [] [] | 7 ! wget | [] [] [] [] [] [] [] | 17 ! +----------------------------------------------------+ ! 33 teams ko lv nb nl nn no pl pt pt_BR ru sk sl sv tr uk zh ! 53 domains 9 1 6 20 0 6 17 1 13 25 10 11 23 21 2 2 387 Some counters in the preceding matrix are higher than the number of visible blocks let us expect. This is because a few extra PO files are *************** distributed as such by its maintainer. *** 221,226 **** lag between the mere existence a PO file and its wide availability in a distribution. ! If December 1997 seems to be old, you may fetch a more recent copy ! of this `ABOUT-NLS' file on most GNU archive sites. --- 298,324 ---- lag between the mere existence a PO file and its wide availability in a distribution. ! If September 2001 seems to be old, you may fetch a more recent copy ! of this `ABOUT-NLS' file on most GNU archive sites. The most ! up-to-date matrix with full percentage details can be found at ! `http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'. ! ! Using `gettext' in new packages ! =============================== ! ! If you are writing a freely available program and want to ! internationalize it you are welcome to use GNU `gettext' in your ! package. Of course you have to respect the GNU Library General Public ! License which covers the use of the GNU `gettext' library. This means ! in particular that even non-free programs can use `libintl' as a shared ! library, whereas only free software can use `libintl' as a static ! library or use modified versions of `libintl'. ! ! Once the sources are changed appropriately and the setup can handle ! to use of `gettext' the only thing missing are the translations. The ! Free Translation Project is also available for packages which are not ! developed inside the GNU project. Therefore the information given above ! applies also for every other Free Software Project. Contact ! `translation@iro.umontreal.ca' to make the `.pot' files available to ! the translation teams. diff -Nrc3pad gcc-3.0.4/gcc/ChangeLog gcc-3.1/gcc/ChangeLog *** gcc-3.0.4/gcc/ChangeLog Wed Feb 20 18:39:49 2002 --- gcc-3.1/gcc/ChangeLog Wed May 15 02:19:14 2002 *************** *** 1,10876 **** ! 2002-02-20 Release Manager ! * GCC 3.0.4 Released. ! 2002-02-20 Release Manager ! * GCC 3.0.4 Released. ! 2002-02-19 Eric Christopher ! PR 5405 Backport march/mtune patches for compatibility with ! recent binutils. ! * config/mips/mips.c (mips_parse_cpu): New. ! (mips_arch, mips_arch_string): Ditto. ! (mips_tune, mips_tune_string): Ditto. ! (override_options): Use above. Add warning for isa and arch ! incompatibility. ! (mips_asm_file_start): Use above. ! * config/mips/mips.h (mips_cpu_attr): Use mips_tune. ! (TARGET_OPTIONS): Add mtune/march. ! Change mips_cpu to mips_tune for scheduling. ! * config/mips/mips.md: Change mips_cpu to mips_arch in patterns. ! 2002-02-19 Robert Lipe ! * config/i386/t-sco5gas: (CRTSTUFF_T_CFLAGS_S): Delete -mcoff. ! 2002-02-14 Bob Wilson ! * config/xtensa/xm-xtensa.h: Add missing SUCCESS_EXIT_CODE ! and FATAL_EXIT_CODE; remove HAVE_VPRINTF and HAVE_PUTENV. ! * config/xtensa/lib1funcs.asm: Fix copyright to include ! special case for libgcc files. ! * config/xtensa/lib2funcs.S: Likewise. ! 2002-02-14 Janis Johnson ! * config.gcc (i*86-sequent-sysv4): Fix setting of tm_file. ! 2002-02-13 Jeroen Dobbelaere ! * config/arm/linux-elf.h (CPLUSPLUS_CPP_SPEC): Define. ! Required for libstdc++ to work with glibc. ! 2002-02-08 Philip Blundell ! Fix PR 5209: ! * rtlanal.c (parms_set, find_first_parameter_load): Break out ! from ... ! * except.c (sjlj_mark_call_sites): ... here. Handle multiple ! sets. ! * rtl.h (find_first_parameter_load): Add prototype. ! 2002-02-05 Dale Johannesen ! * config/rs6000/rs6000.c (rs6000_emit_cmove): Fix mode of ! if_then_else to match result, not operands. ! 2002-02-05 Phil Edwards ! * configure.in (leb128 support): Test as versions more carefully. ! * configure: Regenerated. ! 2002-02-04 Craig Rodrigues ! PR target/5584 ! * config/rs6000/aix.h (UNIQUE_SECTION): Fix use of alloca. ! 2002-02-02 Richard Henderson ! PR opt/5076 ! * rtl.h (NOTE_INSN_LOOP_END_TOP_COND): New. ! * rtl.c (note_insn_name): Update. ! * emit-rtl.c (remove_unnecessary_notes): Kill it. ! * stmt.c (expand_end_loop): Kill jump opt code. Use LOOP_END_TOP_COND ! to perform loop rotation. ! (expand_exit_loop_top_cond): New. ! * tree.h (expand_exit_loop_top_cond): Declare it. ! * c-semantics.c (genrtl_while_stmt): Use it. ! (genrtl_for_stmt): Likewise. ! 2002-02-01 Craig Rodrigues ! * doc/install.texi (avr): Update outdated URL. ! 2002-01-31 Zack Weinberg ! * c-decl.c (c_expand_body): Reset input_filename from ! DECL_SOURCE_FILE (fndecl) before calling init_function_start. ! 2002-01-31 Jeffrey A Law ! * c-common.c (c_expand_start_cond): Expect the IF_STMT node to ! be passed in, do not build it. ! (c_begin_if_stmt): New function. ! (c_begin_while_stmt, c_finish_while_stmt_cond): Likewise. ! * c-common.h (c_expand_start_cond): Update prototype. ! (c_begin_if_stmt): Prototype new function. ! (c_begin_while_stmt, c_finish_while_stmt_cond): Likewise. ! * c-parse.in (if_prefix): Use c_begin_if_stmt, ! c_begin_while_stmt and c_finish_while_stmt_cond. ! 2002-01-31 Joseph S. Myers ! * doc/gcc.1: Regenerate. ! 2002-01-31 Bob Wilson ! * config/xtensa/elf.h: New file. ! * config/xtensa/lib1funcs.asm: New file. ! * config/xtensa/lib2funcs.S: New file. ! * config/xtensa/linux.h: New file. ! * config/xtensa/t-xtensa: New file. ! * config/xtensa/xm-xtensa.h: New file. ! * config/xtensa/xtensa-config.h: New file. ! * config/xtensa/xtensa-protos.h: New file. ! * config/xtensa/xtensa.c: New file. ! * config/xtensa/xtensa.h: New file. ! * config/xtensa/xtensa.md: New file. ! * config.gcc (xtensa-*-elf*): New target. ! (xtensa-*-linux*): New target. ! * cse.c (canon_hash): Compare rtx pointers instead of register ! numbers. This is required for the Xtensa port. ! * integrate.c (copy_insn_list): Handle case where the static ! chain is in memory and the memory address has to be copied to ! a register. ! * doc/invoke.texi (Option Summary): Add Xtensa options. ! (Xtensa Options): New node. ! * doc/md.texi (Machine Constraints): Add Xtensa machine constraints. ! * doc/install.texi (xtensa-*-elf): New target. ! (xtensa-*-linux*): New target. ! * doc/contrib.texi: Add myself. ! 2002-01-29 Richard Henderson ! 2001-10-19 Jakub Jelinek ! * config/alpha/alpha.c (summarize_insn): Don't abort on ASM_INPUT. ! 2002-01-26 Joseph S. Myers ! * doc/cpp.1, doc/fsf-funding.7, doc/gcc.1, doc/gcov.1, doc/gfdl.7, ! doc/gpl.7: Regenerate. ! 2002-01-24 Alexandre Oliva ! * config/sparc/sparc.md (fix_trunctfdi2): Correct typo in mode. ! 2002-01-24 Jason Merrill ! PR c++/2432 ! * config/sparc/sparc.md (call-jump peepholes): Pass the right insn ! to can_throw_internal. ! 2002-01-23 Neil Booth ! PR c/3504 ! * doc/extend.texi: Correct documentation of __alignof__. ! 2002-01-22 Craig Rodrigues ! PR java/4972 ! * aclocal.m4 (AM_ICONV): Put linking flags for libiconv ! in LIBICONV variable. ! * configure: Regenerated. ! 2002-01-22 Richard Henderson ! 2001-09-25 Andrew Haley ! * except.c (sjlj_mark_call_sites): Change address inside sequence. ! 2002-01-22 Craig Rodrigues ! PR other/5450 ! * config/i386/sysv4.h (CPP_SPEC): Define, and add CPU ! preprocessor flags. ! 2001-12-11 Richard Henderson ! * expmed.c (expand_divmod): Ignore sdiv_pow2_cheap for modes in ! which there is no divide expander. ! 2002-01-21 Franz Sirl ! * config/rs6000/t-ppccomm (CRTSTUFF_T_CFLAGS_S): Re-add -fPIC. ! 2002-01-21 Zack Weinberg ! PR target/5410 ! * config.gcc (i?86-*-netbsdelf*): New stanza. ! * config/i386/netbsd-elf.h: New file (backport from mainline). ! 2002-01-21 Neil Booth ! PR preprocessor/3571 ! * tradcpp.c (handle_directive): Skip non-vertical space. ! 2002-01-18 Craig Rodrigues ! * doc/install.texi (hppa*-hp-hpux11): Clarify that GCC 2.95.x cannot ! be used for bootstrapping GCC 3.0. Clarify that --enable-threads ! does not work. ! 2002-01-17 David Edelsohn ! * doc/install.texi (*-ibm-aix*): Update assembler and exception ! handling information. ! * doc/gcc.texi (Interoperation): Add libstdc++ information ! for AIX. ! (Misunderstandings): Add template instantiation and static template ! member information for AIX. ! 2002-01-15 Jason Merrill ! * c-common.def (FILE_STMT): New code. ! * c-common.c (statement_code_p): It's a statement. ! * c-common.h (stmt_tree_s): Add x_last_filename. ! (FILE_STMT_FILENAME_NODE, FILE_STMT_FILENAME): New macros. ! (last_expr_filename): New macro. ! * c-semantics.c (begin_stmt_tree): Initialize it. ! (add_stmt): If the filename changed, also insert a ! FILE_STMT. ! (expand_stmt): Handle seeing one. ! 2002-01-13 Gerald Pfeifer ! * doc/install.texi (Binaries): Make link to ftp.writtenword.com ! more generic. ! 2002-01-02 David Edelsohn ! * gcc.c (init_gcc_spec): Do not link with static libgcc.a if ! gcc invoked with -shared. ! * config/rs6000/t-aix43: Revert previous change. ! 2002-01-02 Hans-Peter Nilsson ! * unwind-dw2-fde.c (fde_unencoded_compare): Derefer pc_begin ! fields when comparing. ! 2002-01-02 Richard Henderson ! * unwind-dw2-fde.c (fde_compare_t): Change return type to int. ! (fde_unencoded_compare): Likewise. Don't use subtraction to get ! a tristate comparison value. ! (fde_single_encoding_compare, fde_mixed_encoding_compare): Likewise. ! 2001-12-20 Release Manager ! * GCC 3.0.3 Released. ! 2001-12-13 Richard Henderson ! * stmt.c (expand_asm_operands): Correct and simplify the ! conditions for spilling an output operand to memory. ! 2001-12-12 Bruce Korb ! Rodney Brown ! * fixinc/inclhack.def (strict_ansi_not_ctd): Update for UnixWare 2.1.3. ! * fixinc/mkfixinc.sh: Use C fixincludes for UnixWare 2.1.3. ! * fixinc/tests/base/math.h: update for new test text for rework ! 2001-12-13 Alan Modra ! * config/rs6000/rs6000.c (rs6000_unique_section): Simplify and ! correct code selecting section. ! 2001-12-11 Richard Henderson ! * except.c (sjlj_find_directly_reachable_regions): Don't ! consider RNL_BLOCKED a directly reachable region. ! (sjlj_assign_call_site_values): Trust directly_reachable. ! (sjlj_emit_dispatch_table): Likewise. ! 2001-12-11 Neil Booth ! * c-common.c (combine_strings): Complain if concatenating ! __FUNCTION__. ! * c-parse.in (yylexname): Flag artificial strings. ! * tree.h (TREE_ARTIFICIAL_STRING_P): New. ! doc: ! * extend.texi: Update. ! 2001-12-09 David Edelsohn ! * stor-layout.c (place_union_field): Apply ADJUST_FIELD_ALIGN ! to unions. ! 2001-12-08 Alan Modra ! * config/rs6000/rs6000.c (rs6000_unique_section): Add missing ! parentheses. ! 2001-12-07 Craig Rodrigues ! * expr.c (store_constructor): Handle zero-length arrays and ! flexible arrays correctly. ! 2001-12-07 David O'Brien ! * elfos.h (_USING_ELFOS_H): Rename to USING_ELFOS_H, to match mainline. ! * rs6000/rs6000.c (_USING_ELFOS_H): Likewise. ! 2001-12-06 Nick Clifton ! * config/arm/arm.h (STRUCT_VALUE): Suppress definition. ! (STRUCT_VALUE_REGNUM): Restore definition. ! 2001-12-06 Richard Henderson ! * stmt.c (parse_input_constraint): Break out from ... ! (expand_asm_operands): ... here. Loop over the operands twice, ! the first time only calling mark_addressable. ! 2001-12-06 Rainer Orth ! * fixinc/inclhack.def (stdio_va_list): Handle __VA_LIST__ in Tru64 ! UNIX V5.1A stdio.h. * fixinc/fixincl.x: Regenerate. ! Fixes PR libf2c/4826. ! ! 2001-12-05 Neil Booth ! ! * cppspec.c (lang_specific_driver): Set is_cpp_driver. ! * gcc.c (process_command): Ensure the cpp driver sees ! --help and --target-help, and that the help is printed ! exactly once. ! ! 2001-12-04 DJ Delorie ! ! * fixinc/fixincl.c (initialize): Avoid problemsome macro ! parameter names (PR 3388). ! 2001-12-04 Loren J. Rittle ! bootstrap/4422 ! * configure.in: Setup ability to run ./stage[1234]/xgcc in ! fixinc *as if* it were a proper lang subdirectory. * configure: Rebuilt. ! 2001-12-04 Joseph S. Myers ! ! * doc/install.texi: Use the GFDL. Include years from old install ! manual in copyright notice. Include copyright and GFDL notice on ! HTML index page. Include usual footer on testing.html. ! * doc/install.texi2html: Build gfdl.html. Use -I ! $SOURCEDIR/include. ! * doc/include/fdl.texi: Adapt for use in the install manual. ! ! 2001-12-04 Joseph S. Myers ! ! * doc/install.texi: Document that installed native compiler for ! building cross compilers should be GCC 2.95 or later. ! ! 2001-12-03 Neil Booth ! ! PR c/4988 ! * gcc.c (process_command): Don't add a preprocessor option for ! --help and --target-help; cc1 is enough. ! ! 2001-12-03 Jason Merrill ! ! * dwarf2out.c (add_data_member_location_attribute): Do the ! right thing for virtual bases. ! * dbxout.c (dbxout_type): For a virtual base, print the offset ! within the vtable. ! ! 2001-12-01 Olivier Hainque ! ! * unroll.c (loop_iterations): Give up on jumps with null JUMP_LABEL ! while scanning for multiple back edges. ! ! 2001-12-01 Franz Sirl ! ! * ginclude/ppc-asm.h (JUMP_TARGET): New macro. ! * config/rs6000/tramp.asm: Use it. ! ! 2001-11-30 Stephane Carrez ! ! * config/sparc/sparc.c (DF_MODES_NO_S): Fix pr/3623, define to ! accept DFmode and DImode only. ! ! 2001-11-20 Zoltan Hidvegi ! ! * doloop.c (doloop_modify_runtime): Correct calculation of ! iterations. ! * unroll.c (unroll_loop): Correct special exit cases. ! ! 2001-11-30 Jakub Jelinek ! ! * config/sparc/sparc.md (movdf): Avoid calling validize_mem during ! or after reload. ! ! 2001-11-27 John David Anglin ! Bruce Korb ! ! * inclhack.def (AAA_time): Delete. ! (hpux_size_t): Revise select and fix for HP-UX 11.11. ! (hpux11_vsnprintf): Adapt to above hack. ! ! 2001-08-14 Steve Ellcey ! ! * tlink.c (scan_linker_output): Check string for unsatisfied in ! addition to undefined and unresolved. ! ! 2001-11-29 Zoltan Hidvegi ! ! * doloop.c (doloop_valid_p): Check for LTU and GTU as well. ! ! 2001-11-29 Richard Henderson ! ! * ifcvt.c (noce_try_store_flag_constants): Test for overflow ! in computing DIFF. ! ! 2001-11-29 Craig Rodrigues ! ! PR other/4932 ! * config/i386/i386.c (print_operand): Verify that the ! argument to %c is a constant and not a conditional which ! needs to be reversed. ! ! 2001-11-27 Rainer Orth ! ! * gcc.c (set_input): Export. ! Move declaration ... ! gcc.h (set_input): ... here. ! ! 2001-11-27 Rainer Orth ! ! * gcc.c (set_collect_gcc_options): New function, split out from ! main. ! Ignore elided switches. ! (do_spec): Invoke before executing command. ! (do_spec_1): Likewise. ! Fixes PR other/3968. ! ! 2001-11-27 Rainer Orth ! ! * config/i386/sol2.h (WINT_TYPE): Redefine. ! (WINT_TYPE_SIZE): Likewise. ! ! 2001-11-26 Ian Lance Taylor ! ! * config/i386/i386.md (movstrsi): Use strmovqi rather than ! strmovsi for final byte move. ! ! 2001-11-26 Alan Modra ! ! * final.c: (insn_lengths): Make it an int *, so that large jump ! tables don't overflow. ! ! 2001-11-25 Stephane Carrez ! ! * config/m68hc11/m68hc11.md (peephole2): New peephole2 to optimize ! address computations. ! ! 2001-11-25 Stephane Carrez ! ! * config/m68hc11/m68hc11.c (d_register_operand): Must accept ! register b (low part of d). ! ! 2001-11-25 Stephane Carrez ! ! * config/m68hc11/m68hc11.h (FUNCTION_PROFILER): Fix label name ! passed to mcount. ! ! 2001-11-24 Neil Booth ! ! * cppmacro.c (warn_of_redefinition): Warn regardless of -pedantic. ! * cppinit.c (init_dependency_output): Suppress other stdout ! output when dumping dependencies. ! ! 2001-11-19 Brad Kaiser ! ! * reload1.c (elimination_effects): Use function_invariant_p ! instead of CONSTANT_P when considering register equivalences. ! ! 2001-11-18 Craig Rodrigues ! ! PR bootstrap/4020 ! * mklibgcc.in: Add missing semi-colons. ! * Makefile.in: Same. ! ! 2001-11-18 Craig Rodrigues ! ! PR c/4448 ! * gthr-win32.h: (__gthread_objc_thread_exit): Fix variable ! name __objc_thread_exit_status so that it matches the ! variable defined in objc/thr.h. ! ! 2001-11-18 Craig Rodrigues ! ! PR optimization/4815 ! * alias.c: Merge from mainline: ! 2001-08-05 Bernd Schmidt ! * alias.c (rtx_equal_for_memref_p): VALUEs are only identical ! if their CSELIB_VAL_PTRs are. ! 2001-07-25 Andrew Haley ! * alias.c (rtx_equal_for_memref_p): Allow strings as types in ! operands. ! ! 2001-11-17 Craig Rodrigues ! ! PR target/4606 ! * config.gcc: Remove reference to va-clipper.h. ! ! 2001-11-17 Christopher Faylor ! Corinna Vinschen ! ! * config/i386/cygwin.h: Search target specific include directory for ! w32api stuff, if appropriate. ! ! 2001-11-15 Kazu Hirata ! ! * config/h8300/h8300.md: Fix insn length of bit insns. ! ! 2001-11-15 Richard Hodson ! ! * config/h8300/h8300.c (dosize): Avoid corrupting R3 in interrupt ! routines. ! ! 2001-11-14 Joseph S. Myers ! ! * Makefile.in (POD2MAN): Don't include --section=1. ! (manext): Rename to man1ext. All users changed. ! (man7ext): New. ! (man7dir): New. ! (generated-manpages): Also depend on $(docdir)/gfdl.7, ! $(docdir)/gpl.7, and $(docdir)/fsf-funding.7. ! ($(docdir)/gcov.1, $(docdir)/cpp.1, $(docdir)/gcc.1): Include ! --section=1 in calls to $(POD2MAN). ! ($(docdir)/gfdl.7, $(docdir)/gpl.7, $(docdir)/fsf-funding.7): New. ! (maintainer-clean, install, uninstall): Handle the new man pages. ! ($(docdir)/cpp.info, cpp.dvi): Depend on fdl.texi. ! (installdirs): Create man7dir. ! * doc/cpp.texi: Include GFDL in this manual. In the man page, ! refer to gfdl(7) for the GFDL. Apply Front Cover and Back Cover ! texts to man page. Include gpl(7), gfdl(7) and fsf-funding(7) in ! the SEE ALSO man page section. ! * doc/gcov.texi: Apply GFDL to man page. Include gpl(7), gfdl(7) ! and fsf-funding(7) in the SEE ALSO man page section. ! * doc/invoke.texi: Apply GFDL to man page. Include gpl(7), ! gfdl(7) and fsf-funding(7) in the SEE ALSO man page section. ! * doc/include/fdl.texi, doc/include/funding.texi, ! doc/include/gpl.texi: Adjust for conversion by texi2pod.pl. ! * doc/cpp.1, doc/gcc.1, doc/gcov.1: Regenerate. ! * doc/gpl.7, doc/gfdl.7, doc/fsf-funding.7: New. ! ! 2001-11-13 Jeff Sturm ! ! * doc/install.texi (sparc-*-linux*): Mention requirements for ! binutils and glibc. ! ! 2001-11-12 Craig Rodrigues ! ! PR bootstrap/3451 ! * c-pragma.c: Rename macros BAD, BAD2, BAD_ACTION to ! GCC_BAD, GCC_BAD2, GCC_BAD_ACTION. ! ! 2001-11-12 David O'Brien ! ! * config/ia64/freebsd.h: Fix comment (sync with mainline). ! ! 2001-05-15 Geoffrey Keating ! ! * config/rs6000/sysv4.h (ASM_PREFERRED_EH_DATA_FORMAT): Treat ! TARGET_RELOCATABLE like flag_pic for now. ! ! 2001-05-13 Geoff Keating ! ! * config/rs6000/rs6000.h (EXCEPTION_SECTION): Move to... ! * config/rs6000/aix.h (EXCEPTION_SECTION): ... here. ! * config/rs6000/sysv4.h (CONST_SECTION_ASM_OP): Delete. ! (ASM_PREFERRED_EH_DATA_FORMAT): Define. ! (EXCEPTION_SECTION): Define. ! ! 2001-11-09 Jason Eckhardt ! ! * config/mips/mips.c (mips_output_conditional_branch): Do not hard ! code the branch target as ".+16/.+12", but rather use labels. ! ! 2001-11-09 Gerald Pfeifer ! ! * doc/install.texi2html: Use $MAKEINFO --no-split. ! ! 2001-11-08 Richard Henderson ! ! * Makefile.in (GCC_FOR_TARGET): Add build_tooldir/sys-include. ! (CROSS_SYSTEM_HEADER_DIR): Use build_tooldir not tooldir. ! (ORDINARY_FLAGS_TO_PASS, stmp-fixinc): Likewise. ! ! 2001-11-08 Richard Henderson ! ! 2001-07-11 Richard Sandiford , ! H.J. Lu ! * mips.md (call_internal1): Use CONSTANT_ADDRESS_P to check for ! constant addresses. ! (call_internal2): Likewise. ! (call_value_internal1): Likewise. ! (call_value_internal2): Likewise. ! (call_value_multiple_internal1): Likewise. ! (call_value_multiple_internal2): Likewise. ! ! * config/mips/mips.c (save_restore_insns): Remove GP from the ! restore registers mask early instead of special casing it inside ! the loop. ! ! * config/fp-bit.h (usi_to_float): Define for US_SOFTWARE_GOFAST ! case as well. ! ! * Makefile.in (NM_FOR_TARGET): Single build tree uses nm-new. ! ! 2001-11-07 Neil Booth ! Per Bothner ! H.J. Lu ! ! * acconfig.h (PREFIX_INCLUDE_DIR): New variable. ! * config.in: Rebuild. ! * cppdefault.c (cpp_include_defaults): Also search PREFIX_INCLUDE_DIR. ! * Makefile.in (includedir): Rename to local_includedir. ! (includedir): Define as $(prefix)/include. ! * config.in (PREFIX_INCLUDE_DIR): New variable. ! * configure.in (PREFIX_INCLUDE_DIR): Test for new variable. ! ! 2001-11-07 Joseph S. Myers ! ! * doc/gcc.texi: Move terminology and spelling conventions to ! htdocs/codingconventions.html. ! ! 2001-11-06 Joseph S. Myers ! ! * doc/install.texi: Document that configure options not listed in ! this file are unsupported. Document --with-system-zlib. ! ! 2001-11-05 Alan Modra ! ! * config/rs6000/rs6000.md (load_toc_aix_{si,di}): Mark r2 as used. ! ! 2001-11-05 Zack Weinberg ! ! * configure.in: AC_SUBST xm_defines. ! * configure: Regenerate. ! * Makefile.in: Set DEFINES=$(xm_defines) when building ! tconfig.h. ! ! 2001-09-15 Roman Lechtchinsky ! ! * c-common.c (c_promoting_integer_type_p): Handle ?Imode types. ! ! 2001-08-18 Zack Weinberg ! ! * combine.c (make_compound_operation, simplify_comparison): ! Fix typos testing for this or that instruction. ! ! 2001-07-26 Kazu Hirata ! ! * regmove.c (regmove_optimize): Don't replace a reg with ! another reg of a different mode. ! ! 2001-06-16 Franz Sirl ! ! * gccspec.c (lang_specific_driver): If compiling ObjC, add ! -shared-libgcc when necessary. ! * Makefile.in (gccspec.o): Compile with DRIVER_DEFINES. ! ! 2001-06-11 Aldy Hernandez ! ! * loop.c (scan_loop): Do not combine asm statements. ! ! 2001-11-03 David O'Brien ! ! * config.gcc: Add FreeBSD/IA-64 target. Move inclusion of IA-64 ! target headers to tm_file. ! * config/ia64/ia64.h (TARGET_VERSION,ASM_SPEC,LINK_SPEC): Remove, ! they are OS specific. Use CPP_CPU_SPEC rather than CPP_PREDEFINES, ! so OS specific files and use CPP_PREDEFINES for their needs. ! * config/ia64/elf.h (TARGET_VERSION): Add. Also, move inclusion of ! target headers to tm_file. ! * config/ia64/linux.h (TARGET_VERSION): Likewise. ! * config/ia64/freebsd.h: New file. ! * config/freebsd.h: Tidy up. ! (_USING_CONFIG_FREEBSD): Define. ! (FBSD_CPP_PREDEFINES): Add __KPRINTF_ATTRIBUTE__. ! (FBSD_CPP_SPEC): Define generic FreeBSD spec. ! (FBSD_STARTFILE_SPEC): Likewise. ! (FBSD_ENDFILE_SPEC): Likewise. ! (FBSD_LIB_SPEC): Likewise. ! (WCHAR_UNSIGNED): Undefine, FreeBSD's wchars are signed. ! (USER_LABEL_PREFIX): Define to ELF compatible value as some CPU headers ! set an ELF-improper one. ! ! 2001-11-03 Joseph S. Myers ! ! * doc/extend.texi, doc/gcc.texi, doc/install.texi, doc/tm.texi: ! Use "invalid" instead of "illegal". Use @r in comments in ! examples. ! ! 2001-11-01 Richard Sandiford ! ! * config/mips/mips.c (save_restore_insns): Don't mark any register ! save slots as unchanging if current_function_calls_eh_return. ! ! 2001-11-01 Kazu Hirata ! ! * config/h8300/h8300.c (h8300_encode_label): Compute a string ! before passing it to ggc_alloc_string. ! ! 2001-10-30 Jakub Jelinek ! ! * flow.c (merge_blocks): Don't merge blocks if second block is ! nonlocal_goto handler. ! ! 2001-10-28 David Edelsohn ! ! * config/rs6000/rs6000.c (output_mi_thunk): Fix typo. ! ! 2001-10-28 David O'Brien ! ! * config/rs6000/sysv4.h (CPP_PREDEFINES): Quiet warning when overriden. ! ! 2001-10-28 Joseph S. Myers ! ! * toplev.c: Fix spelling errors. ! ! 2001-10-28 David O'Brien ! ! * config/elfos.h (_USING_ELFOS_H): Define. ! * config/rs6000/rs6000.c: Test for _USING_ELFOS_H rather than ! USING_SVR4_H to know when to turn on ELF support. ! ! 2001-10-28 Joseph S. Myers ! ! * doc/invoke.texi: Fix spelling. ! ! * doc/gcc.texi: Document use of "dependent" and American spelling. ! ! 2001-10-26 Andrew Cagney ! ! Import 2001-07-11 Andrew Cagney : ! ! * config.gcc: Recognize powerpc-*-netbsd*. ! ! * doc/install.texi (Host/target specific installation notes for ! GCC): Mention powerpc-*-netbsd*. ! ! * config/rs6000/netbsd.h: New file. ! (STANDARD_STARTFILE_PREFIX, LINK_SHLIB_SPEC): Redefine. ! (LIB_DEFAULT_SPEC, STARTFILE_DEFAULT_SPEC): Redefine. ! (ENDFILE_DEFAULT_SPEC, LINK_START_DEFAULT_SPEC): Redefine. ! (LINK_OS_DEFAULT_SPEC, CPP_OS_DEFAULT_SPEC): Redefine. ! (TARGET_VERSION): Redefine. ! ! * config/rs6000/t-ppccomm (MULTILIB_MATCHES_SYSV): Recognize ! mcall-netbsd as a match for mcall-sysv. ! (EXTRA_MULTILIB_PARTS): Add ncrti$(objext) and ncrtn$(objext). ! (ncrti.S, ncrtn.S): New targets. ! ($(T)ncrti$(objext), $(T)ncrtn$(objext)): New targets. ! ! * config/rs6000/sysv4.h (SUBTARGET_OVERRIDE_OPTIONS): Recognize ! "netbsd' as a V4 ABI. ! (ASM_SPEC): Check for -mcall-netbsd. ! (CC1_SPEC, CC1_SPEC, LINK_START_SPEC, LINK_OS_SPEC): Ditto. ! (CPP_ENDIAN_SPEC, CPP_SPEC, STARTFILE_SPEC): Ditto. ! (LIB_SPEC, ENDFILE_SPEC): Ditto. ! (LIB_NETBSD_SPEC, STARTFILE_NETBSD_SPEC): Define. ! (ENDFILE_NETBSD_SPEC, LINK_START_NETBSD_SPEC): Define. ! (LINK_OS_NETBSD_SPEC, CPP_OS_NETBSD_SPEC): Define. ! (SUBTARGET_EXTRA_SPECS): Add NetBSD specs. ! ! * doc/invoke.texi (Option Summary): Add -mcall-netbsd. ! (RS/6000 and PowerPC Options): Mention -mcall-netbsd. ! ! 2001-10-26 David Edelsohn ! ! * config/rs6000/rs6000.md (cr_logical): Swap order of CODE and ! MODE arguments to gen_rtx and compare operand with const0_rtx. ! ! 2001-10-26 Christopher Faylor ! ! * config/i386/cygwin.h: Search target specfic include directory, if ! appropriate. ! ! 2001-10-24 Christopher Faylor ! ! * config/i386/cygwin.h: Use proper path for mingw crt files when ! -mno-cygwin. ! ! 2001-10-23 Release Manager ! ! * GCC 3.0.2 Released. ! ! 2001-10-23 Joseph S. Myers ! * doc/gcc.texi (Sending Patches): Remove. ! 2001-10-17 Joseph S. Myers ! * doc/gcc.1: Regenerate. ! 2001-10-16 Matt Kraai ! * c-tree.texi: Eliminate duplicated word. ! * cpp.texi: Likewise. ! * install.texi: Likewise. ! * invoke.texi: Likewise. ! * tm.texi: Likewise. ! 2001-10-14 Craig Rodrigues ! PR c/4157 ! * config/i386/cygwin.h: Add missing space to MINGW_INCLUDES. ! 2001-10-13 Craig Rodrigues ! * doc/invoke.texi: Remove -fvtable-gc. ! * doc/gcc.1: Likewise. ! 2001-10-12 Joseph S. Myers ! * doc/cpp.1, doc/gcc.1, doc/gcov.1: Regenerate. ! 2001-10-11 Franz Sirl ! * unroll.c (loop_iterations): Extend check for multiple back edges. ! 2001-10-11 Mark Mitchell ! Revert these changes: ! 2001-10-10 Franz Sirl ! PR c++/4512 ! * unroll.c (loop_iterations): Ignore insns generated by loop ! unrolling. ! 2001-10-08 Franz Sirl ! * unroll.c (loop_iterations): Extend check for multiple back edges. ! 2001-10-10 Danny Smith ! * config/i386/mingw32.h (WIN32_NO_ABSOLUTE_INST_DIRS): New define. ! (Thanks to Chris Faylor for suggesting macro name). ! (CPP_PREDEFINES): Define __MINGW32__ but don't set value; add more ! WIN32 defines. ! (STANDARD_INCLUDE_DIR): Remove i386- from directory name. ! (STANDARD_INCLUDE_COMPONENT): Change to MINGW. ! (MATH_LIBRARY): Undef before definition. ! (OUTPUT_QUOTED_STRING): Likewise. ! * config/i386/cygwin.h: Use WIN32_NO_ABSOLUTE_INST_DIRS. ! 2001-10-10 Franz Sirl ! PR c++/4512 ! * unroll.c (loop_iterations): Ignore insns generated by loop ! unrolling. ! 2001-10-10 Hartmut Schirmer ! * config/float-i128.h: Make sure __STDC__VERSION__ is defined ! before using it. ! * config/float/i32.h: Likewise. ! * config/float-i386.h: Likewise. ! * config/float-i64.h: Likewise. ! * config/float-m68k.h: Likewise. ! * config/float-sh.h: Likewise. ! * config/float-sparc.h: Likewise. ! 2001-10-09 Danny Smith ! * config.gcc (i[34567]86-*-mingw32*): Make msvcrt-dependent ! version default. ! 2001-10-10 Joseph S. Myers ! * doc/c-tree.texi, doc/extend.texi, doc/install.texi, doc/md.texi, ! doc/rtl.texi, doc/tm.texi: Consistently use "nonzero" instead of ! "non-zero". ! 2001-10-09 Kazu Hirata ! * doc/cpp.texi: Fix typos. ! * doc/c-tree.texi: Likewise. ! * doc/extend.texi: Likewise. ! * doc/invoke.texi: Likewise. ! * doc/objc.texi: Likewise. ! 2001-10-09 Joseph S. Myers ! * doc/gcc.texi: Document preference for "nonzero" over "non-zero". ! 2001-10-08 Neil Booth ! * doc/cpp.texi: Update. ! 2001-10-08 Neil Booth ! * cppmacro.c (_cpp_create_definition): Leave comments off. ! * cpplex.c (_cpp_lex_token): Don't save comments if skipping. ! * doc/cpp.texi: Update. ! 2001-10-08 Franz Sirl ! * unroll.c (loop_iterations): Extend check for multiple back edges. ! 2001-10-08 Jeffrey A Law ! * sibcall.c (optimize_sibling_and_tail_recursive_calls): Call ! purge_mem_unchanging_flag on all instructions, not just on those ! before NOTE_INSN_FUNCTION_BEG. ! 2001-10-07 Joseph S. Myers ! * doc/gcc.texi: Fix spelling error of "separate" as "seperate". ! 2001-10-07 Joseph S. Myers ! * doc/c-tree.texi, doc/tm.texi: Consistently put NULL and ! NULL_TREE inside @code. ! 2001-10-07 Joseph S. Myers ! * doc/gcc.texi: Document consistent style of "32-bit", ! "Objective-C", and "@code{NULL}". ! 2001-10-05 Richard Henderson ! * i386.md (movsi_xor): Export. ! (setcc peep2): Use it when available. ! 2001-10-05 Richard Henderson ! * dwarf2out.c (FRAME_BEGIN_LABEL): New. ! (output_call_frame_info): Use it instead of __FRAME_BEGIN__ and ! the gas section-name-as-label feature. ! 2001-10-04 Loren J. Rittle ! * Makefile.in (STAGE2_FLAGS_TO_PASS): Remove patch which ! propagated HOST_CC. ! Thu Oct 4 16:18:12 CEST 2001 Jan Hubicka ! * gcc.c (main): Set this_file_error if the appropriate ! compiler for a language has not been installed. ! 2001-10-01 Loren J. Rittle ! * Makefile.in (STAGE2_FLAGS_TO_PASS): Propagate HOST_CC. ! (fixinc.sh): Map CC, CFLAGS and LDFLAGS to HOST_* versions for ! later recursive make invocation. ! 2001-10-01 Stephane Carrez ! * config/m68hc11/m68hc11.md ("add-split"): Fix add split when ! operand 2 is the stack pointer. ! ("addr-peephole"): Fix address computation peephole when operand 2 ! is the stack pointer. ! 2001-09-30 Stephane Carrez ! * config/m68hc11/m68hc11.md ("cmpqi_1"): Fix constraints. ! ("tsthi_1"): Avoid allocation in register y. ! ("*movqi_68hc12"): Reorganize and fix constraints. ! ("zero_extendqisi2"): Prefer d over x and y for operand 1. ! ("addqi3"): Likewise. ! ("addhi3"): Fix constraints. ! ("*logicalhi3_zexthi"): Disparage soft registers. ! 2001-09-30 Stephane Carrez ! * config/m68hc11/m68hc11.c (m68hc11_gen_movhi): Fix move of sp ! to tmp reg. ! 2001-09-30 Stephane Carrez ! * config/m68hc11/m68hc11.h(INCOMING_RETURN_ADDR_RTX): Remove so ! that we use setjmp/longjmp exceptions. ! 2001-09-30 Ulrich Weigand ! * config/s390/s390.c (s390_adjust_cost): Fixed incorrect scheduling. ! * config/s390/s390.md (function units): Likewise. ! * config/s390/s390.md (addsi3_cc, addsi3_cconly, addsi3_cconly2, ! subsi3_cc, subsi3_cconly): Removed. ! * config/s390/s390.c (legitimate_la_operand_p): New. ! * config/s390/s390-protos.h (legitimate_la_operand_p): Add. ! * config/s390/s390.md (movsi): Convert load address patterns to ! arithmetic operations when necessary. ! (addaddr_picR, addaddr_picL, addaddr_picN): Removed. ! (do_la): Renamed to *do_la and use legitimate_la_operand_p. ! (*do_la_reg_0): Don't use before reload. ! * config/s390/s390.c (legitimize_address): Make more efficient ! use of two-register addressing mode. ! * config/s390/s390.c (s390_function_prologue): Fix incorrect prolog ! with -mno-backchain in some corner cases. ! * config/s390/s390.md (cmpsi_cct): Operands 0 and 1 do not commute. ! 2001-09-29 Alexandre Oliva ! * reload.c (find_reloads): Mark new USE insns with QImode. ! (find_reloads_toplev, find_reloads_address, subst_reg_equivs, ! find_reloads_subreg_address): Likewise. ! * regrename.c (note_sets, clear_dead_regs): Abort if pseudos are ! encountered. ! * reload1.c (reload_combine_note_use): Likewise, inside USEs and ! CLOBBERs. ! (reload): Make sure there are no USEs with mode other than ! VOIDmode. At the end, remove those marked with QImode. ! 2001-09-28 Rainer Orth ! * config/i386/sol2.h (CPLUSPLUS_CPP_SPEC): Define. ! 2001-09-27 Richard Henderson ! * dwarf2out.c (dwarf2out_frame_finish): Never elide .debug_frame ! in favour of .eh_frame; fix eh test wrt USING_SJLJ_EXCEPTIONS. ! Tue Sep 25 15:09:03 2001 Rainer Orth ! * doc/install.texi (Specific, sparc-sun-solaris2*): Document ! 64-bit support. ! 2001-09-25 Janis Johnson ! Jim Wilson ! * doc/install.texi (Specific, ia64-*-linux): Document. ! 2001-09-24 David Edelsohn ! * rs6000.c (lwa_operand): Address must be word aligned. ! 2001-09-24 Janis Johnson ! * doc/install.texi (Final install): Request additional information ! in mail about successful builds. ! 2001-09-24 Rainer Orth ! * doc/install.texi: Markup fixes. ! Use Solaris 2, SunOS 4 as appropriate. ! (Specific, *-*-solaris2*): Explain this. ! Unconditionally warn against /usr/ucb tools. ! Remove Sun as warning, obsolete. ! Move X11 header bug workaround here, update patches. ! (Specific, sparc-sun-solaris2*): Detail Sun as fix status. ! (Specific, sparc-sun-solaris2.7): Update patch 106950 status. ! 2001-09-21 Richard Henderson ! * tree.def (FDESC_EXPR): New. ! * expr.c (expand_expr): Handle it. ! * varasm.c (initializer_constant_valid_p): Likewise. ! (output_constant): Likewise. ! * defaults.h (TARGET_VTABLE_USES_DESCRIPTORS): New. ! * config/ia64/ia64.h (TARGET_VTABLE_USES_DESCRIPTORS): New. ! (ASM_OUTPUT_FDESC): New. ! 2001-09-20 Andrew MacLeod ! * testsuite/gcc.c-torture/execute/990208-1.x: New. XFAIL at -O3 ! on ia64. ! Thu Sep 20 12:49:34 2001 J"orn Rennecke ! * sh.c (shiftcosts): Don't use shiftcosts array for modes wider ! than SImode. ! Thu Sep 20 12:18:41 2001 J"orn Rennecke ! * sh.c (initial_elimination_offset): When seeing ! RETURN_ADDRESS_POINTER_REGNUM, force pr to be live. ! Fix FROM == RETURN_ADDRESS_POINTER_REGNUM case. ! 2001-08-21 Richard Henderson ! * config/ia64/ia64.c (ia64_return_in_memory): True for variable ! sized types. ! 2001-06-19 Bernd Schmidt ! * regmove.c (optimize_reg_copy_3): Do nothing if previous insn ! carries a REG_EQUIV note. If it carries REG_EQUAL, delete the ! note. ! 2001-09-18 Philip Blundell ! * config/arm/lib1funcs.asm (L_dvmd_lnx): Don't rely on kernel ! header files. ! 2001-09-17 Jeff Sturm ! * except.c (dw2_build_landing_pads): New local ! clobbers_hard_regs. Emit an ASM_INPUT as a scheduling ! barrier after clobbers. Fixes c++/4012. ! 2001-09-17 Franz Sirl ! * gcse.c (hash_scan_set): Fix merge glitch in last patch. ! 2001-09-17 Joseph S. Myers ! * listing: Remove obsolete file. ! 2001-09-15 Richard Henderson ! * c-typeck.c (comptypes): Handle zero-length arrays properly. ! 2001-09-15 David Edelsohn ! * doc/install.texi: Explain AIX exception handling work-around. ! Update URL for AIX fixes. ! 2001-09-15 Neil Booth ! * cpplib.c (do_pragma): Never expand macros. ! 2001-09-14 Richard Henderson ! * config/i386/i386.c (internal_label_prefix): New. ! (internal_label_prefix_len): New. ! (override_options): Set them. ! (local_symbolic_operand): New. ! (legitimate_pic_address_disp_p): Use it. ! (legitimize_pic_address): Likewise. ! 2001-09-14 Marc Espie ! * config/i386/unix.h (ASM_OUTPUT_MI_THUNK): Generate reference to GOT ! correctly. ! 2001-09-13 Markus Werle Gerald Pfeifer ! * doc/install.texi (Binaries): Add "Binaries for HP-UX 11.00 at ! Aachen University of Technology". ! ! 2001-09-13 Andreas Schwab ! ! * config/float-m68k.h: Define DECIMAL_DIG and FLT_EVAL_METHOD for ! C99. ! ! 2001-09-12 Josh Martin ! ! * fixinc/inclhack.def(hpux11_size_t): Keep HP-UX headers from ! defining __size_t and leaving size_t undefined. ! ! 2001-09-12 Jakub Jelinek ! ! * gcse.c (gcse_main): Fix comment typo. ! (delete_null_pointer_check): Likewise. ! (hash_scan_set): Don't consider sets with REG_EQUIV MEM notes. ! * cse.c (cse_insn): Likewise. ! * function.c (fixup_var_refs_insns_with_hash): The sequence is ! toplevel. ! ! 2001-09-11 Jim Wilson ! ! * alias.c (clear_reg_alias_info): Only handle pseudo registers. ! ! 2001-09-10 Tim Freeman ! ! * dwarf2out.c (incomplete_types, decl_scope_table): Make them ! into varray's and register them as roots with the garbage ! collector so they are not collected too soon. ! ! 2001-09-10 David Edelsohn ! ! * config/rs6000/rs6000.c (scc_eq_operand): New predicate. ! * config/rs6000/rs6000-protos.h: Declare it. ! * config/rs6000/rs6000.h (PREDICATE_CODES): Add it. ! * config/rs6000/rs6000.md (SCC eq:DI): Use it. ! * config/rs6000/t-aix43 (SHLIB_INSTALL): Use mode 751 (a+x,r-o). ! ! 2001-09-07 Jim Wilson ! ! * alias.c (clear_reg_alias_info): New. ! * flow.c (attempt_auto_inc): Call clear_reg_alias_info. ! * rtl.h (clear_reg_alias_info): Declare. ! ! 2001-09-06 Richard Henderson ! ! * simplify-rtx.c (simplify_binary_operation): Revert last change. ! ! 2001-09-06 Richard Henderson ! ! * simplify-rtx.c (simplify_binary_operation): Simplify contents ! of CONST. ! ! 2001-09-06 Franz Sirl ! ! * config/rs6000/rs6000.c (rs6000_emit_prologue): Fix DWARF2 register ! number used for CR register. ! ! 2001-09-06 Alan Modra ! ! * config/rs6000/rs6000.c (mask_operand): Use signed vars to avoid ! compiler warnings. ! (mask64_operand): Likewise. ! (includes_rldic_lshift_p): Likewise. ! (includes_rldicr_lshift_p): Likewise. ! ! 2001-09-05 Alan Modra ! ! * config/rs6000/rs6000.c (mask_operand): Rewrite without ! bit-shifting loop. ! (mask64_operand): Likewise. ! (rldic_operand): Delete. ! (includes_lshift64_p): Delete. ! (includes_rldic_lshift_p): New function. ! (includes_rldicr_lshift_p): New function. ! (print_operand): Don't call rldic_operand in case 'W'. ! * config/rs6000/rs6000-protos.h (rldic_operand): Remove. ! (includes_lshift64_p): Remove. ! (includes_rldic_lshift_p): Declare. ! (includes_rldicr_lshift_p): Declare. ! * config/rs6000/rs6000.h (PREDICATE_CODES): Remove rldic_operand. ! * config/rs6000/rs6000.md : ! Replace match_operand rldic_operand predicate with ! const_int_operand. Replace includes_lshift64_p condition with ! includes_rldic_lshift_p. ! : New. ! ! 2001-09-05 David S. Miller ! ! * config/sparc/linux.h: Set CPLUSPLUS_CPP_SPEC. ! * config/sparc/linux64.h: Likewise. ! ! 2001-09-05 Andreas Jaeger ! ! * doc/invoke.texi (i386 Options): -mwide-multiply is not ! available anymore, remove the documentation. ! (i386 Options): Fix typo, cleanup index entries. ! ! 2001-09-05 Jakub Jelinek ! ! * stor-layout.c (layout_type) [ARRAY_TYPE]: Copy elements ! TYPE_USER_ALIGN. ! ! * loop.c (express_from_1): Fix CONSTANT_P(a) case. ! ! 2001-09-04 Richard Henderson ! ! * unwind.h (_UA_END_OF_STACK): New flag. ! * unwind.inc (_Unwind_ForcedUnwind_Phase2): Set it. ! ! Thu Aug 30 18:50:37 2001 J"orn Rennecke ! ! * t-h8300 (LIB1ASMFUNCS): Add _fixunssfdi and _fixunssfsi_asm. ! (LIB2FUNCS_EXTRA): Define. ! config/h8300/lib1funcs.asm: New part: L_fixunssfsi_asm . ! config/h8300/fixunssfsi.c: New file. ! ! Thu Aug 30 16:00:31 2001 J"orn Rennecke ! ! * h8300.c (dosize): Fix test for "sub". ! ! 2001-08-29 Kazu Hirata ! ! * config/h8300/lib1funcs.asm: Update the copyright. Fix ! comment typos. ! ! 2001-08-29 Kazu Hirata ! ! * config/h8300/h8300.md (anonymous movhi pattern): Don't move ! (reg n) to (mem (pre_dec (reg n)). ! (anonymous movsi pattern): Likewise. ! ! 2001-08-29 Kazu Hirata ! * config/h8300/h8300.h (RETURN_ADDR_RTX): New. ! 2001-08-29 Kazu Hirata ! * config/h8300/lib1funcs.asm: Fix comment typos. ! 2001-08-28 Richard Henderson ! * config/ia64/ia64.md (andcmbi3, iorcmbi3): Fix typos. ! (one_cmplbi2 splitter): Remove redundant test. ! 2001-08-28 Danny Smith ! * config/i386/cygwin.h (BIGGEST_FIELD_ALIGNMENT): Set to 64. ! 2001-08-24 David Edelsohn ! * config/rs6000/rs6000.c (rs6000_initialize_trampoline): Function ! descriptor members are pointer size, not constant 4. ! 2001-08-23 Neil Booth ! * cppmacro.c (enter_macro_context): Push macro expansions even ! if empty. ! 2001-08-23 Kazu Hirata ! * config/h8300/h8300.md (zero_extendqihi2): Correct the insn ! length. ! 2001-08-19 Release Manager ! * GCC 3.0.1 Released. ! 2001-08-19 Release Manager ! * GCC 3.0.1 Released. ! 2001-08-17 Janis Johnson ! * doc/install.texi (Install GCC): Add links to build status pages. ! (Specific): Ditto. ! (Final install): Ditto; request updates for specific info ! 2001-08-17 Gerald Pfeifer ! * doc/invoke.texi (Optimize Options): The default for ! -finline-limit is 600. ! 2001-08-16 Joel Sherrill ! * config/rs6000/rtems.h: Set STARTFILE_DEFAULT_SPEC and ! ENDFILE_DEFAULT_SPEC to correctly include ecrti and ecrtn. ! * config/arm/rtems-elf.h: Remove bad -Darm and -Darm_elf. ! 2001-08-14 Ulrich Weigand ! * config/s390/linux64.h (CPP_PREDEFINES): Define __s390__ ! also on 64-bit s390x targets. ! 2001-08-14 Gerald Pfeifer ! * doc/install.texi (Specific, avr): Fix markup. ! (Specific, c4x): Ditto. ! 2001-08-13 Andreas Jaeger ! * config.gcc: Use t-slibgcc-elf to build shared libgcc_s on ! s390*linux. ! 2001-08-13 Roman Zippel ! Richard Henderson ! * regmove.c (regmove_optimize): Avoid setting a register twice in ! a parallel set. ! 2001-08-12 David Edelsohn ! Revert: ! 2001-08-02 Rainer Orth ! * gcc.c (set_collect_gcc_options): New function, split out from ! main. ! Ignore elided switches. ! (do_spec_1): Invoke before executing command. ! (set_input): Export. ! Move declaration ... ! * gcc.h (set_input): ... here. ! * config/alpha/osf.h (ASM_FINAL_SPEC): Use %U.s to refer to input ! file. ! 2001-08-11 Gerald Pfeifer ! * doc/install.texi (Specific, c4x): Fix cross-reference to the ! main manual to work both for info and HTML versions. ! 2001-08-10 Ulrich Weigand ! * glimits.h (__LONG_MAX__): Add s390x as 64-bit architecture. ! * config/s390/s390.c (legitimize_pic_address): Don't generate ! unnecessary moves (to avoid confusing loop optimization). ! (check_and_change_labels): Replace jump_long by indirect_jump. ! (s390_final_chunkify): Don't start a new literal pool on section ! switch in 64-bit code. ! (s390_va_start, s390_va_arg): Fixed incorrect sizes for 64-bit. ! * config/s390/s390.h (HARD_REGNO_MODE_OK, RETURN_IN_MEMORY): ! Support complex integer modes correctly. ! (reg_class, REG_CLASS_NAMES, REG_CLASS_CONTENTS): Remove CC_REGS. ! (EH_RETURN_HANDLER_RTX): Fixed incorrect offset for 64-bit. ! (CONST_COSTS): Fixed incorrect costs. ! * config/s390/s390.md (divsi3, modsi3): Clobber low word of ! divmoddisi3 before shifting (to avoid confusing flow analysis). ! (cjump_long, icjump_long, jump_long, indirect_jump, casesi_jump): ! Never use "address_operand" without "p" or "memory_operand" ! without mode. ! (builtin_setjmp_setup, builtin_setjmp_receiver, builtin_longjmp): ! Fixed broken setjmp/longjmp handling. ! (do_builtin_setjmp_setup): Removed. ! 2001-08-10 John David Anglin ! * doc/install.texi (vax-dec-ultrix): Change `Vax' to VAX. ! 2001-08-10 Gerald Pfeifer ! * doc/install.texi (Specific, avr): Fix cross-reference to the ! main manual to work both for info and HTML versions. ! 2001-08-09 Jakub Jelinek ! * config/ia64/fde-glibc.c: Require glibc 2.2.4+ headers. ! (find_fde_for_dso): Remove. ! (_Unwind_IteratePhdrCallback): New. ! (_Unwind_FindTableEntry): Use dl_iterate_phdr. ! * config/ia64/crtbegin.asm (__ia64_app_header): Remove. ! 2001-08-08 Kelley Cook ! * Makefile.in: Move many of the *_H definitions eariler in the file, ! so that rules in t-* files that use them for dependencies will work ! in a parallel build. ! * config/i386/t-cygwin (winnt.o): Depend on $(CONFIG_H). ! 2001-08-08 Mark Mitchell ! * except.c (remove_fixup_regions): Fix typo. ! 2001-08-07 Daniel Jacobowitz ! * config.gcc: Quote target_cpu_default2 correctly for ! powerpc*-*-* targets. ! 2001-08-07 David Edelsohn ! * doc/install.texi: Document fine-grained multilib configuration. ! 2001-08-06 Richard Henderson ! * config/i386/i386.h (FORCE_PREFERRED_STACK_BOUNDARY_IN_MAIN): New. ! * function.c (expand_main_function): Implement it. ! * doc/tm.texi: Document it. ! * i386-protos.h, i386.c, i386.h, osf1elf.h, osfrose.h: Revert 08-01 ! ix86_output_main_function_alignment_hack patch. ! 2001-08-06 Richard Henderson ! 2001-07-23 Richard Henderson ! * config/i386/i386.c (ix86_expand_setcc): Don't use method 0 ! before CSE. ! * config/i386/i386.md: New setcc+movzbl peephole2. ! 2001-07-22 Richard Henderson ! * fold-const.c (fold): Test vs FLOAT_TYPE_P instead of ! INTEGRAL_TYPE_P when folding comparisons with operand_equal_p ! arguments. ! 2001-08-06 John David Anglin ! * varasm.c (output_constant_def_contents): Use for the length of a ! string constant either its TREE_STRING_LENGTH or its int_size_in_bytes ! depending on which is larger. ! 2001-08-04 Hans-Peter Nilsson ! * doc/extend.texi (Other Builtins): Fix typo in last change. ! 2001-08-04 Stephane Carrez ! * config/m68hc11/m68hc11.md ("cmphi_1", "cmpqi_1"): Allow memory ! and soft register for operand 0. ! ("cmphi_z_used", "cmpqi_z_used"): Allow memory for operand 0. ! 2001-08-04 Stephane Carrez ! * config/m68hc11/m68hc11.md ("bitcmpqi"): Allow memory and soft ! register for operand 0. ! ("bitcmpqi_z_used"): Allow memory for operand 0. ! (split "bitcmpqi"): New split to handle address reg as operand 1. ! 2001-08-03 Zack Weinberg ! * builtins.c (fold_builtin_constant_p): Return integer_zero_node ! for complex expressions when cfun == 0. ! * doc/extend.texi: Document that __builtin_constant_p can be ! used in data initializers as well as functions. ! 2001-08-03 Richard Henderson ! * except.c (collect_one_action_chain): Add an explicit cleanup ! action if regions surrounding a catch were encoded entirely ! within the call-site entry. ! 2001-08-03 Stephane Carrez ! * config/m68hc11/t-m68hc11-gas (T_CPPFLAGS): Add _ctor and _dtor. ! * config/m68hc11/larith.asm (_exit): Split in several sub-sections ! merged by linker script to get a final _exit(). ! (__do_global_dtors): New for destructor handling in specific exit ! section. ! (__do_global_ctors): New for constructors in specific install section. ! (__map_data_section): Map data sections before running constructors. ! * config/m68hc11/m68hc11.h (INT_ASM_OP): Define to use .word. ! (CTORS_SECTION_ASM_OP): Define to put in readonly section. ! (DTORS_SECTION_ASM_OP): Likewise. ! (CTORS_SECTION_FUNCTION): Define to force a reference to ! __do_global_ctors. ! (DTORS_SECTION_FUNCTION): Likewise for __do_global_dtors. ! 2001-08-03 Ulrich Weigand ! * config.gcc (s390-*-linux*, s390x-*-linux*): Added. ! * doc/install.texi: Add s390 and s390x targets. ! * doc/invoke.texi: Add s390 and s390x target options. ! * doc/md.texi: Add s390 and s390x extra constraints. ! * config/s390/s390.c: New. Subroutines for code generation. ! * config/s390/s390.h: New. Definitions for S/390. ! * config/s390/s390-protos.h: New. Prototypes. ! * config/s390/linux.h: New. Definitions for Linux for S/390. ! * config/s390/linux64.h: New. Definitions for Linux for zSeries. ! * config/s390/t-linux: New. Makefile fragment. ! * config/s390/s390.md: New. Machine description for S/390 and zSeries. ! * config/s390/xm-390.h: New. Host definitions for S/390. ! * config/s390/xm-390x.h: New. Host definitions for zSeries. ! * config/s390/fixdfdi.h: New. Fix L_fix*di. ! 2001-08-03 Neil Booth ! * cpplex.c (parse_string): Warn once per string. ! * cpplib.c (_cpp_do_file_change): Call hook correctly. ! 2001-08-03 Rainer Orth ! * doc/install.texi (Configuration): Fix markup. ! (Specific, i?86-*-udk): Likewise. ! (Specific, alpha*-dec-osf*): Warn against --with-gnu-as, ! --with-gnu-ld. ! Document --enable-threads and --enable-libgcj status. ! (Specific, mips-sgi-irix*): Canonicalize triples. ! (Specific, mips-sgi-irix5): Warn about problems with this config. ! Mention required GNU as patch. ! Native assembler problems are fixed. ! (Specific, mips-sgi-irix6): Update O32 ABI support status. ! Document --enable-threads and --enable-libgcj status. ! 2001-08-02 David Edelsohn ! * doc/install.texi (Install GCC: Binaries): Update Bull info. ! 2001-08-02 Nathan Sidwell ! Remove -fhonor-std. ! * doc/invoke.texi (C++ Dialect Options): Remove -fno-honor-std. ! 2001-08-02 Rainer Orth ! * gcc.c (set_collect_gcc_options): New function, split out from ! main. ! Ignore elided switches. ! (do_spec_1): Invoke before executing command. ! (set_input): Export. ! Move declaration ... ! * gcc.h (set_input): ... here. ! * config/alpha/osf.h (ASM_FINAL_SPEC): Use %U.s to refer to input ! file. ! 2001-08-01 Hartmut Penner ! * varasm.c (decode_rtx_const): Allow unspec (symbol_ref) in ! constant pool to be identical by string address and index. ! 2001-08-01 Gerald Pfeifer ! * params.def (PARAM_MAX_INLINE_INSNS): Change default to 600. ! Correct comment that had been missed in the previous change. ! 2001-08-01 Robert Lipe ! * dwarfout.c: Remove reference to README.DWARF. ! 2001-08-01 Richard Henderson ! * rtl.c (read_name): Consider \r whitespace. ! 2001-08-01 Mark Kettenis ! * unwind-pe.h (base_of_encoded_value, read_encoded_value): Define ! only if NO_BASE_OF_ENCODED_VALUE isn't defined. ! * unwind-dw2-fde.c (NO_BASE_OF_ENCODED_VALUE): Define before ! including "unwind-pe.h". ! Wed Aug 1 20:15:33 CEST 2001 Jan Hubicka ! * i386-protos.h (ix86_output_main_function_alignment_hack): Declare. ! * i386.c (ix86_output_main_function_alignment_hack): New global ! function. ! * i386.h (FUNCTION_PROLOGUE): New macro. ! * osf1elf.h (FUNCTION_PROLOGUE): Call new function. ! * osfrose.h (FUNCTION_PROLOGUE): Likewise. ! 2001-08-01 H.J. Lu ! * config/mips/linux.h (ASM_OUTPUT_IDENT): Defined. ! 2001-08-01 H.J. Lu ! * gcc/config/mips/linux.h (ASM_OUTPUT_SOURCE_LINE): Defined. ! 2001-07-31 Jeff Sturm ! * except.c (duplicate_eh_regions): Test n_array[i] for NULL. ! 2001-07-30 Roman Zippel ! * config/m68k/m68k.md: Replace all general_operand with ! nonimmediate_operand for all destinations. ! * config/m68k/m68k.c: Include expr.h and reload.h. ! (not_sp_operand): Check nonimmediate_operand. ! 2001-07-30 Roman Zippel ! * config/m68k/m68k.h (TARGET_SWITCHES/TARGET_OPTIONS): ! Add missing doc strings. ! * config/m68k/linux-aout.h (SUBTARGET_SWITCHES): Likewise. ! * config/m68k/linux.h (SUBTARGET_SWITCHES): Likewise. ! 2001-07-30 H.J. Lu ! * config/mips/linux.h (CPLUSPLUS_CPP_SPEC): Add -D_GNU_SOURCE. ! (ASM_DECLARE_FUNCTION_NAME): Defined. ! (ASM_DECLARE_FUNCTION_SIZE): Likewise. ! (FUNCTION_NAME_ALREADY_DECLARED): Likewise. ! 2001-07-30 Janis Johnson ! * profile.c (branch_prob): Fix .bbg info for computed gotos ! and C++ EH code. ! 2001-07-28 Golubev I. N. ! * config/i386/sco5.h (DWARF2_DEBUGGING_INFO): Define. ! 2001-07-27 Gerald Pfeifer ! * doc/install.texi (Configuration): Properly link the host ! specific instructions also when generating HTML. ! 2001-07-26 Rainer Orth ! * glimits.h (_MACH_MACHLIMITS_H_): Delete. ! Thu Jul 26 22:01:30 2001 Denis Chertykov ! * cse.c (cse_process_notes): Replace any registers if the address ! remains valid. ! 2001-07-26 Rainer Orth ! * Makefile.in (LIBICONV): Define. ! 2001-07-26 Andrew MacLeod ! * params.def (PARAM_MAX_PENDING_LIST_LENGTH): Add parameter to ! limit length of dependancy flush list. ! * params.h (MAX_PENDING_LIST_LENGTH): Define. ! * sched-int.h (struct deps): Add pending_flush_length field. ! * sched-deps.c (flush_pending_lists): Last_pending_memory_flush now ! has 1 element in it. ! (sched_analyze_1): Use MAX_PENDING_LIST_LENGTH. ! (sched_analyze): After a jump, if the pending memory flush list is too ! large, flush the pending lists. ! (init_deps): Initialize pending_flush_length to 0. ! * doc/invoke.texi (max_pending_list_length): Document parameter. ! 2001-07-25 Richard Henderson ! * varasm.c (assemble_variable): Create DECL_RTL before setting ! TREE_ASM_WRITTEN. ! 2001-07-25 Andrew MacLeod ! Janis Johnson ! * stmt.c (expand_goto): A nonlocal goto can be a call too. ! * builtins.c (expand_builtin_longjmp): Reverse label and static chain ! pointer parameters to match documented usage of nonlocal_goto. ! * config/ia64/ia64.md (nonlocal_goto): Revert label and static chain ! parameters to their correct order. ! * config/sparc/sparc.md (nonlocal_goto): Revert label and static chain ! parameters to their correct order. ! 2001-07-25 Andrew MacLeod ! * config/ia64/ia64.h (STRIP_NAME_ENCODING): Strip out '*' as well. ! 2001-07-24 Joel Sherrill ! * config/i960/i960.h (CPP_SPEC): Define _SOFT_FLOAT for -msoft-float. ! 2001-07-24 Joel Sherrill ! * config/sparc/rtems.h (CPP_PREDEFINES): Remove redundant ! -Acpu and -Amachine.h. ! * config/sparc/rtemself.h (CPP_PREDEFINES): Likewise. ! Corrected header to say ELF not a.out. ! * config/sparc/sparc.h (CPP_CPU_SPEC): Define _SOFT_FLOAT ! when given -msoft-float. ! 2001-07-24 Joel Sherrill ! * config.gcc (arm*-*-rtems*): Include crtinit.o and crtfini.o as ! extra multilib parts like arm-elf. ! (i960-*-coff*, i960-*-rtems): Should not use collect2. ! (m68020-*-elf*, m68k-*-elf*, m68k-*-rtems*): Include crtinit.o and ! crtfini.o as extra multilib parts. ! 2001-07-24 Joel Sherrill ! * configure.in: Add rtems as a supported thread model. ! * gthr-rtems.h: Add missing entry point __gthread_active_p. ! * configure: Rebuilt. ! 2001-07-24 Rainer Orth ! * config/mips/irix6-libc-compat.c: New file. ! * config/mips/t-iris6 (LIB2FUNCS_STATIC_EXTRA): Use it. ! * doc/install.texi (Specific, mips*-sgi-irix6): Mention structure ! passing workaround. ! 2001-07-23 Kazu Hirata ! * reload.c: Fix comment typos. ! 2001-07-23 Richard Henderson ! * config/i386/i386.c (ix86_expand_setcc): Don't use method 0 ! before CSE. ! * config/i386/i386.md: New setcc+movzbl peephole2. ! 2001-07-23 lars brinkhoff ! * tm.texi (TARGET_FLOAT_FORMAT): Document IBM_FLOAT_FORMAT ! and C4X_FLOAT_FORMAT. ! (BOOL_TYPE_SIZE): Document. ! 2001-07-22 Richard Henderson ! * fold-const.c (fold): Test vs FLOAT_TYPE_P instead of ! INTEGRAL_TYPE_P when folding comparisons with operand_equal_p ! arguments. ! 2001-07-22 Alexandre Oliva ! * config/i386/freebsd-aout.h (ASM_PREFERRED_EH_DATA_FORMAT): Use ! the definition in defaults.h. ! 2001-07-22 Richard Henderson ! * regrename.c (regrename_optimize): Compute nregs for each ! potential target register. ! 2001-07-20 Stephane Carrez ! * config/m68hc11/m68hc11.md ("andqi3"): Accept d as second operand. ! ("iorqi3"): Likewise. ! ("xorqi3"): Likewise. ! ("*addhi3"): Fix constraint to avoid reloading in a soft register. ! ("*subhi3_sp): Likewise. ! ("*subhi3"): Likewise. ! ("extendhisi2"): Accept D, X and Y as source operand to avoid ! reload problems. ! 2001-07-20 Bruce Korb ! * fixinc/fixincl.c(test_for_changes): force unsigned char comparisons ! because getc() and char* may disagree on signedness. ! 2001-07-20 Richard Henderson ! Wed May 9 10:40:25 2001 Alexandre Oliva ! * regclass.c (scan_one_insn): Update REG_N_REFS when optimizing ! handling of two-address insns. ! 2001-07-20 Stephane Carrez ! * config/m68hc11/m68hc11.md ("movdi", "movdi_internal"): Use an ! expand to emit the pattern; put a REG_INC note for push/pop ! instructions. ! ("movdf", "movdf_internal"): Likewise. ! ("movsi", "movsi_internal"): Likewise. ! ("movsf", "movsf_internal"): Likewise. ! ("movhi", "movqi"): Emit a REG_INC note for push/pop instructions. ! 2001-07-20 Stephane Carrez ! * config/m68hc11/m68hc11.c (m68hc11_gen_highpart): Don't use ! gen_highpart. ! 2001-07-20 Daniel Berlin ! * params.def: Change default max inline insns to 100. ! 2001-06-20 Kelley Cook ! * doc/install.texi (sparc-sun-solaris*): Add in 4.x assembler bug ! information. Move rest into ... ! (*-*-solaris): ... here. Eliminate redundant information and ! reword necessary packages section. Delete 4.x assembler bug info. ! (sparc-sun-*): Merge into ... ! (sparc-sun-sunos*): here. ! 2001-07-19 Mark Mitchell ! * reorg.c (fill_simple_delay_slots): If an instruction might throw ! an exception that will be caught within this function, do not fill ! its delay slot with any subsequent instruction. ! 2001-07-19 Mark Kettenis ! Jakub Jelinek ! * unwind-dw2.c (_Unwind_FrameState): Add eh_ptr. ! (extract_cie_info): Handle "eh" augmentation properly, ! remember eh_ptr. ! (struct frame_state, __frame_state_for): New. ! 2001-07-19 Rainer Orth ! * config/alpha/osf.h (ASM_OUTPUT_WEAK_ALIAS, ASM_WEAKEN_LABEL, ! HANDLE_SYSV_PRAGMA): Define. ! * mips-tfile.c (add_ext_symbol): Pass complete symbol ptr, inline ! previous args. ! (copy_object): Caller changed. ! 2001-07-19 Andreas Schwab ! * configure.in (assembler dwarf2 debug_line support): Define nop ! insn for m68k. ! * configure: Regenerated. ! 2001-07-18 Jeff Sturm ! * dwarf2out.c (dwarf2out_abstract_function): Don't emit ! in-class declaration at -g1. Fixes c++/2814. ! 2001-07-18 Rainer Orth ! * defaults.h (ASM_OUTPUT_WEAK_ALIAS): Check for ASM_WEAKEN_LABEL. ! 2001-07-18 Andreas Schwab ! * configure.in (assembler eh_frame optimization): Handle big ! endian. ! * configure: Regenerated. ! 2001-07-18 Tom Tromey ! For PR java/2812: ! * configure: Rebuilt. ! * configure.in: Don't check for iconv.h or iconv(); use AM_ICONV ! instead. ! * aclocal.m4 (AM_ICONV): New macro from Bruno Haible. ! Wed Jul 18 12:05:29 2001 Nicola Pero ! * gthr-posix.h (__gthread_objc_mutex_trylock): Fixed return value ! on error. We can't blindly return the result of ! pthread_mutex_trylock because it returns a positive number on ! error, while we must return -1 on error. ! (__gthread_objc_mutex_lock, __gthread_objc_mutex_unlock): Similar ! fixes. ! Reported by Stephen Brandon . ! 2001-07-17 H.J. Lu ! Rainer Orth ! * c-pragma.h (HANDLE_PRAGMA_WEAK): Define iff ASM_WEAKEN_LABEL and ! ASM_OUTPUT_WEAK_ALIAS are defined. ! * defaults.h (ASM_OUTPUT_WEAK_ALIAS): Define if possible. ! * config/mips/iris6.h (ASM_OUTPUT_WEAK_ALIAS, ASM_WEAKEN_LABEL): ! Moved ... ! * config/mips/iris5.h: ... here. ! (HANDLE_SYSV_PRAGMA): Defined as 1. ! * varasm.c (weak_finish): Use ASM_OUTPUT_WEAK_ALIAS. ! * doc/tm.texi (ASM_OUTPUT_WEAK_ALIAS): Support the undefined weak ! symbol. ! 2001-07-15 Richard Henderson ! * config/alpha/alpha.c (alpha_emit_xfloating_compare): Use CCmode ! instead of COMPARE for the EQUIV expression. ! 2001-07-14 David Edelsohn ! * rs6000.c (reg_or_{add,sub}_cint64_operand): New predicates. ! (add_operand): Compare CONST_INT with fewer function calls. ! (print_operand, case 'p'): Ensure positive operand. ! * rs6000.h (CONST_OK_FOR_LETTER_P, case 'N'): Ensure positive value. ! (PREDICATE_CODES): Add new predicates. ! * rs6000.md (addsi3): Split 32-bit constants more correctly. ! (divsi3, modsi3): Ensure positive power-of-2. ! (adddi3): Use new predicate. Split 32-bit constants more ! correctly. Re-arrange splitter to handle any constant. ! (subdi3): Use new predicate. ! (divdi3, moddi3): Ensure positive power-of-2. ! 2001-07-13 Kazu Hirata ! * jump.c (reversed_comparison_code_parts): Fix comment typos. ! 2001-07-13 Marc Espie ! * config.gcc (*-*-openbsd*): Add fragment to compile libgcc ! correctly for shared configurations. ! * config/t-libgcc-pic: New. ! * config/{i386,m68k,sparc}/t-openbsd: New. ! * config/openbsd.h: Include cpu_spec in cpp_spec where needed. ! Support -shared. Support debugging libraries with -g. ! * config/i386/openbsd.h: Correct ASM_COMMENT_START. Ensure dwarf2 ! frame information does not emit pointer diffs. ! * config/sparc/openbsd.h: Ensure dwarf2 frame information does not ! emit pointer diffs. ! 2001-07-13 David Edelsohn ! * combine.c (try_combine): Ensure const_int pow2 is positive. ! 2001-07-11 Kazu Hirata ! * recog.c (validate_change): Fix a comment typo. ! 2001-07-11 Mark Mitchell ! * stmt.c (parse_output_constraint): New function, split out ! from ... ! (expand_asm_operands): ... here. Use parse_output_constraint. ! * tree.h (parse_output_constraint): Declare it. ! 2001-07-10 Kazu Hirata ! * calls.c (emit_library_call_value_1): Fix a comment typo. ! * dwarf2out.c (mem_loc_descriptor): Likewise. ! 2001-07-09 Kazu Hirata ! * config/h8300/t-h8300 (LIB1ASMFUNCS): Add _floatdisf and _fixsfdi. ! * config/mn10200/t-mn10200 (LIB1ASMFUNCS): Likewise. ! 2001-07-09 Joseph S. Myers ! * doc/c-tree.texi: Document representation of attributes. ! 2001-07-08 Joseph S. Myers ! * doc/tm.texi: Fix typo. ! 2001-07-07 Stephane Carrez ! * config/m68hc11/m68hc11.c (m68hc11_initial_elimination_offset): ! Take into account m68hc11_sp_correction for FRAME_POINTER_REGNUM ! elimination. ! * config/m68hc11/m68hc11.h (STARTING_FRAME_OFFSET): Use 0. ! 2001-07-06 Richard Henderson ! * except.h (MUST_USE_SJLJ_EXCEPTIONS): Examine the value of ! DWARF2_UNWIND_INFO not just whether it is defined. ! 2001-07-06 DJ Delorie ! * doc/gcc.texi (Makefile): Rename to be a more general purpose ! chapter about various build hints and history. Add section ! talking about the various types of native and cross builds. ! 2001-07-05 David Edelsohn ! * doc/install.texi (Install GCC: Binaries): Fix typo. ! 2001-07-04 Stephane Carrez ! * config/m68hc11/m68hc11.md ("*ashlsi3"): Operand 1 can be a memory ! reference using the stack pointer, adjust it since we push Y ! temporarily. ! ("*ashrsi3"): Likewise. ! ("*lshrsi3"): Likewise. ! 2001-07-05 Stephane Carrez ! * config/m68hc11/m68hc11.h (RETURN_ADDR_RTX): Fix return address ! when -fomit-frame-pointer is used. ! 2001-07-05 Brad Lucier ! Gerald Pfeifer ! * doc/invoke.texi (Optimize Options): Document that -fgcse may ! cause programs using computed gotos to run more slowly. ! 2001-07-04 Rainer Orth ! * doc/install.texi (Specific): Markup, spelling and typo fixes. ! Fixed sorting. ! Consistently require binutils 2.11.2, not prereleases. ! (Specific, decstation-*): Canonicalize as mips-dec-*. ! (Specific, i?86-*-sco3.2v5*): Remove make bootstrap requirement, ! always necessary. ! (Specific, m68k-altos): Removed reference to README.altos, deleted. ! (Specific, mips-*): Reword MIPS C compiler requirements. ! (Specific, powerpc*-*-*): New, mention --with-cpu once. ! (Specific, sunv5): Removed, obsolete. ! 2001-07-04 Kazu Hirata ! * config/h8300/h8300.c (get_shift_alg): Remove an extra operand ! from shll. ! 2001-07-04 Joseph S. Myers ! * doc/include: New directory. ! * doc/fdl.texi: Move to doc/include/fdl.texi. ! * doc/texinfo.tex: Move to doc/include/texinfo.tex. ! * doc/include/funding.texi, doc/include/gpl.texi: New files. ! * doc/gcc.texi: Use funding.texi and gpl.texi. ! * Makefile.in ($(docdir)/cpp.info, $(docdir)/gcc.info, ! $(docdir)/cppinternals.info, cpp.dvi. gcc.dvi. cppinternals.dvi): ! Update dependencies and use -I $(docdir)/include. ! 2001-07-04 Gerald Pfeifer ! * doc/install.texi (sparc64-*-*): Remove garbage. ! 2001-07-04 Gerald Pfeifer ! * doc/install.texi (Specific): Update information for *-*-solaris*. ! 2001-07-03 Jan Hubicka ! * optabs.c (expand_twoval_binop): Avoid undefined behaviour. ! 2001-07-03 Rainer Orth ! * config/i386/sol2.h (ASM_PREFERRED_EH_DATA_FORMAT): Define. ! Fixes PRs bootstrap/3067, bootstrap/3249, bootstrap/3275. ! 2001-07-03 Joseph S. Myers ! * doc/cppinternals.texi: Improve formatting and logical markup. ! 2001-07-03 Joseph S. Myers ! * doc/cppinternals.texi: Merge from mainline. ! * doc/extend.texi, doc/gcc.texi, doc/invoke.texi, doc/md.texi, ! doc/rtl.texi, doc/tm.texi: Improve formatting. Improve ! documentation of -std and -Wwrite-strings. ! * doc/cpp.1, doc/gcc.1: Regenerate. ! 2001-07-02 Rainer Orth ! * doc/install.texi: Various spelling and markup fixes. ! (Installing GCC): Component specific installation instructions are ! gone. ! Fix reference. ! Warn about removing old install dir in the presence of shared libs. ! (Configuration): Invoke with options target to match configure ! --help. ! Consistently refer to gas, gld pathnames. ! Invert --enable-multilib documentation. ! Remove references to old compiler versions. ! 2001-07-02 Rainer Orth ! * doc/install.texi (Specific, mips*-sgi-irix4): Split from IRIX 5 ! section. ! (Specific, mips*-sgi-irix5): Note IDO download. ! Reworded MIPS C hints. ! Use GNU as instead of GAS. ! Markup fixes. ! Removed SGI Freeware reference, IRIX 6 only. ! (Specific, mips*-sgi-irix6): Removed ranlib caveats, obsolete. ! Note N64 library requirement/workaround. ! Update O32 hints. ! Complete list of structure passing bug victims. ! 2001-07-02 Gerald Pfeifer ! * doc/install.texi: Remove CVS Id. ! 2001-07-01 Mark Mitchell ! * expr.c (expand_expr, case ARRAY_REF): Correct check for ! side-effects in the value of an array element. ! 2001-06-29 Rainer Orth ! * objc/objc-act.c (handle_class_ref): Always place decl in ! variable section. ! (handle_impent): Always place decl in readonly data section. ! Fixes PRs libobjc/917, libobjc/3237, bootstrap/3251. ! 2001-06-29 Alan Modra ! * recog.c (validate_replace_rtx_1): Exit early if nothing changed ! in args of commutative of comparison operations. ! 2001-06-28 Rainer Orth ! * gthr-posix.h [LIBOBJC]: Add weak definitions of ! sched_get_priority_max, sched_get_priority_min. ! Thu Jun 28 11:32:24 CEST 2001 Jan Hubicka ! * i386.c (x86_use_loop): Disable for K6 temporarily. ! 2001-06-27 Bruce Korb ! * fixinc/inclhack.def(hpux11_cpp_pow_inline): new, but real similar to ! hpux10_cpp_pow_inline. Not similar enough. ! (solaris_mutex_init): renamed. PTHREAD_*_INITIALIZER is a problem for ! all Solaris versions. This fix patches MUTEX and COND initializers, ! the RWLOCK one will wait for someone to complain. For now, anyway. ! (uw7_byteorder_fix): It was looking for the byteorder.h file in the ! wrong directory. ! Thu Jun 28 00:31:24 2001 Denis Chertykov ! * config/avr/avr.md (strlenhi): PARALLEL keyword removed. ! * config/avr/avr.c (legitimate_address_p): Return value changed ! from letter to register classes. For better debugging. ! 2001-06-27 Joseph S. Myers ! * doc/c-tree.texi, doc/contrib.texi, doc/cpp.texi, ! doc/cppinternals.texi, doc/extend.texi, doc/gcc.texi, ! doc/gcov.texi, doc/install-old.texi, doc/install.texi, ! doc/invoke.texi, doc/md.texi, doc/rtl.texi, doc/tm.texi: Replace ! . at end of sentences preceded by a capital letter with @.. ! 2001-06-18 Jason Merrill ! * expr.c (clear_storage): Set TREE_NOTHROW on the decl for memset. ! (emit_block_move): Likewise. ! 2001-06-27 Joseph S. Myers ! * doc/cpp.texi, doc/cppinternals.texi, doc/extend.texi, ! doc/gcc.texi, doc/install.texi, doc/invoke.texi, doc/md.texi, ! doc/tm.texi: Use @: where necessary when a full stop does not end ! a sentence. ! 2001-06-27 Joseph S. Myers ! * doc/gcc.texi, doc/install.texi, doc/invoke.texi: Remove trailing ! whitespace. ! 2001-06-26 Joseph S. Myers ! * doc/c-tree.texi, doc/cpp.texi, doc/extend.texi, doc/gcc.texi, ! doc/install.texi, doc/invoke.texi, doc/objc.texi, doc/rtl.texi, ! doc/tm.texi: Use two spaces after ends of sentences. ! 2001-06-26 Daniel Berlin ! * toplev.c (display_help): Fix param thinko. ! * Makefile.in: Fix params.h dependencies. ! 2001-06-26 Rainer Orth ! * config/i386/sol2.h (CPP_SPEC): Pass -P for .S files. ! 2001-06-26 Rainer Orth ! * config/mips/iris5.h (UNALIGNED_INT_ASM_OP, ! UNALIGNED_SHORT_ASM_OP): Define. ! * config/mips/iris6.h (UNALIGNED_INT_ASM_OP, ! UNALIGNED_SHORT_ASM_OP): Undef. ! 2001-06-26 Aldy Hernandez ! * config/sh/sh.md (interrupt_function): Use ! current_function_interrupt. ! (define_delay): Schedule in delay slot if TARGET_SH3, even if it is ! an interrupt function. ! * config/sh/sh.h (current_function_interrupt): Define extern. ! * config/sh/sh.c (current_function_interrupt): New global. ! (sh_expand_prologue): Set current_function_interrupt. ! 2001-06-25 Neil Booth ! * cppmacro.c (make_string_token): Null terminate. ! * doc/cpp.texi: Update. ! * doc/cpp.1: Regenerate. ! 2001-06-25 Joseph S. Myers ! * doc/c-tree.texi, doc/contrib.texi, doc/extend.texi, ! doc/gcc.texi, doc/gcov.texi, doc/install.texi, doc/invoke.texi, ! doc/md.texi, doc/rtl.texi, doc/tm.texi: Be more consistent about ! the use of "GCC" and related terms. ! * doc/gcc.1, doc/gcov.1: Regenerate. ! 2001-06-24 Joseph S. Myers ! * doc/extend.texi, doc/gcc.texi, doc/install-old.texi, ! doc/invoke.texi, doc/md.texi, doc/rtl.texi, doc/tm.texi: Remove ! uses of @refill. ! 2001-06-24 Joseph S. Myers ! * doc/install-old.texi: Remove more documentation of configure ! options. ! * doc/install.texi: Add it here. ! 2001-06-23 Joseph S. Myers ! * doc/install.texi: Merge from mainline: ! 2001-06-21 Phil Edwards ! * doc/install.texi: Add 'c' to list of --enable-languages choices. ! 2001-06-21 Stan Shebs ! * doc/install.texi: Use the correct name "Objective-C" everywhere ! instead of "Objective C". ! 2001-06-15 Loren J. Rittle ! * doc/install.texi: Use correct markup hints. ! 2001-06-15 Loren J. Rittle ! * doc/install.texi: Update --enable-threads to match reality. ! 2001-06-22 Joseph S. Myers ! * doc/gcc.texi: Update documentation of source files of C ! compiler. ! 2001-06-22 Toshiyasu Morita (toshiyasu.morita@hsa.hitachi.com) ! * predict.c: (expected_value_to_br_prob): Check for const_true_rtx ! instead of const1_rtx for true case. ! 2001-06-22 Joseph S. Myers ! * doc/c-tree.texi, doc/contrib.texi, doc/extend.texi, ! doc/gcc.texi, doc/install-old.texi, doc/install.texi, ! doc/invoke.texi, doc/rtl.texi: Consistently use "front end" and ! "back end" as nouns and "front-end" and "back-end" as adjectives. ! 2001-06-22 Toshiyasu Morita ! * config/v850/v850.c (v850_mark_machine_status): Don't mark the ! p->machine->ra_rtx for GC if p->machine has already been ! freed. ! 2001-06-22 Joseph S. Myers ! * c-common.c (verify_tree): Check for x being NULL. ! * doc/c-tree.texi: Document COMPOUND_BODY of an empty ! COMPOUND_STMT. ! Fixes PR c/3259. ! 2001-06-21 Geoff Keating ! * config/rs6000/rs6000.md (maxsf3): Use rs6000_emit_minmax. ! (maxsf3+1): Delete. ! (minsf3): Use rs6000_emit_minmax. ! (minsf3+1): Generalize to handle both SMIN and SMAX. Use ! rs6000_emit_minmax. ! (movsfcc): Use rs6000_emit_cmove. ! (fselsfsf4): Don't compare a CONST_INT with a floating-point value. ! Don't generate emit_fselsfsf4. ! (fseldfsf4): Likewise. ! (maxdf3): Use rs6000_emit_minmax. ! (maxdf3+1): Delete. ! (mindf3): Use rs6000_emit_minmax. ! (mindf3+1): Generalize to handle both SMIN and SMAX. Use ! rs6000_emit_minmax. ! (movdfcc): Use rs6000_emit_cmove. ! (fseldfdf4): Don't compare a CONST_INT with a floating-point value. ! Don't generate emit_fselsfsf4. ! (fselsfdf4): Likewise. ! * config/rs6000/rs6000.c (zero_fp_constant): New predicate. ! (min_max_operator): New predicate. ! (rs6000_emit_cmove): New function. ! (rs6000_emit_minmax): New function. ! * config/rs6000/rs6000-protos.h: Prototype new functions. ! * config/rs6000/rs6000.h (PREDICATE_CODES): Add zero_fp_constant ! and min_max_operator. ! * config/rs6000/rs6000.c (output_cbranch): Handle all ! conditional types in the switch statement. ! 20010617 Release Manager ! * GCC 3.0 Released. ! 2001-06-15 Andreas Jaeger ! * doc/install.texi (Specific): Mention that glibc cannot be ! compiled with GCC 3.0. ! 2001-06-15 Zack Weinberg ! * doc/cpp.texi: Formatting corrections. ! Correct buggy example of use of __GNUC__ etc. ! Clarify $ in identifiers. ! * doc/cpp.1: Regenerate. ! 2001-06-15 Rainer Orth ! * doc/install.texi (Specific, alpha*-*-*): Fixed Tru64 UNIX ! etc. spelling. ! (Specific, alpha-*-osf1): Renamed to alpha*-*-osf*. ! Added Tru64 UNIX V5.1 bootstrap hints. ! (Specific, alpha*-*-osf*): Removed old section, obsolete. ! 2001-06-15 Zack Weinberg ! * doc/cpp.texi: Revised and brought up to date. ! * doc/cpp.1: Regenerate. ! 2001-06-14 Bruce Korb ! * fixinc/inclhack.def(hpux10_cpp_pow_inline): add a phoney file for ! testing purposes ! * fixinc/fixincl.x: regenerate with the phoney file ! * fixinc/tests/base/fixinc-test-limits.h: Add new test results ! 2001-06-15 Michael Hayes ! * doc/install.texi: Update for C4x. ! * README.C4X: Remove. ! 2001-06-14 John David Anglin ! * objc-act.c (handle_class_ref): Put the class reference in the ! variable section for hpux only. ! (handle_impent): Put the objc class and category name labels in ! the readonly data section for hpux only. ! 2001-06-14 Joseph S. Myers ! * doc/c-tree.texi, doc/contrib.texi, doc/extend.texi, ! doc/gcc.texi, doc/install.texi, doc/invoke.texi, doc/md.texi, ! doc/objc.texi, doc/rtl.texi, doc/tm.texi: Fix spelling and typos. ! Consistently use "built-in" and "bit-field". Minor logical markup ! improvements. ! * doc/gcc.1: Regenerate. ! 2001-06-14 Richard Henderson ! * config/mips/mips.h (ASM_OUTPUT_ASCII): Rename local variables ! to avoid shadowing parameters. ! * config/mips/mips.md (exception_receiver): New. ! 2001-06-14 Daniel J. Berlin ! * doc/gcc.texi: Update passes documentation to be more in tune ! with reality. ! 2001-06-14 Joseph S. Myers ! * doc/c-tree.texi, doc/contrib.texi, doc/extend.texi, ! doc/gcc.texi, doc/gcov.texi, doc/install-old.texi, ! doc/invoke.texi, doc/md.texi, doc/rtl.texi, doc/tm.texi: Use more ! logical markup. Use TeX quotes and dashes. Use @dots{} and ! @minus{}. Avoid spaces inside @var. Update last modification ! date in gcc.texi. ! * doc/gcc.1, doc/gcov.1: Regenerate. ! 2001-06-14 John David Anglin ! * fixinc/inclhack.def (hpux10_cpp_pow_inline): New hack. ! * fixinc/fixincl.x: Rebuilt. ! 2001-06-13 Richard Henderson ! * ifcvt.c (dead_or_predicable): Fix return value last patch. ! 2001-06-13 Philip Blundell ! * config/arm/arm.c (add_minipool_backward_ref): Check that the ! entire object will be reachable in the constant pool. ! 2001-06-13 Mark Mitchell ! * NEWS: Remove. ! 2001-06-13 Richard Henderson ! * ifcvt.c (cond_exec_get_condition): Use reversed_comparison_code. ! (cond_exec_process_if_block, dead_or_predicable): Likewise. ! 2001-06-13 Rainer Orth ! * mips-tfile.c (copy_object): Always pass indexNil for symbol ! table index. ! 2001-06-13 Kazu Hirata ! * config/h8300/h8300.h (OK_FOR_T): Remove. ! (EXTRA_CONSTRAINT): Do not use OK_FOR_T. ! * config/h8300/h8300.md: Remove alternatives involving inc and dec ! in the helper patterns for addhi3 and addsi3. ! 2001-06-13 John David Anglin ! * gthr-dce.h (UNUSED): Attribute unused macro. ! (__GTHREAD_MUTEX_INIT_FUNCTION and __GTHREAD_MUTEX_INIT_DEFAULT): New ! macros for mutex initialization. ! (__gthread_key_dtor): Make arguments UNUSED. ! (__gthread_key_delete): Unsupported. Argument UNUSED. ! (__gthread_mutex_init_function): New function for mutex initialization. ! 2001-06-13 Phil Edwards ! * doc/contrib.texi: Link to libstdc++'s thanks.html for now. ! 2001-06-13 Joseph S. Myers ! * doc/install.texi: Use more logical markup. Include @node ! commands in the source when generating any non-HTML. ! 2001-06-13 Joseph S. Myers ! * README: Remove. Some of the contents moved to ../README. ! 2001-06-13 Alexandre Oliva ! * doc/install.texi (--enable-shared): List package names ! recognized by GCC. ! 2001-06-13 Richard Earnshaw (rearnsha@arm.com) ! * arm.c (arm_reload_in_hi): Handle the scratch operand overlapping ! with the output operand. ! 2001-06-12 Zack Weinberg ! * Makefile.in: Move _bb and __gcc_bcmp from LIB2FUNCS to ! LIB2FUNCS_ST. ! * libgcc-std.ver: Don't export __bb* or __gcc_bcmp. ! * config/t-slibgcc-elf-ver, config/t-slibgcc-sld, ! config/alpha/t-osf4, config/mips/t-iris6: Bump libgcc soname ! to .so.1. ! 2001-06-13 Alexandre Oliva ! * doc/texinfo.texi: Copied from mainline. ! * doc/install.texi (ix86-*-solaris*): Removed, outdated. ! (*-*-solaris*): Document problem in /bin/sh that affects ! configuring libraries. ! (sparc-*-solaris*): Recommend GNU binutils 2.11.1 or vendor tools. ! (*-sun-solaris2.8): Document linker problem that explains why ! libjava is disabled by default. ! 2001-06-09 Mark Mitchell ! Revert this patch: ! * toplev.c (rest_of_compilation): Remove dead code before ! purge_addressof. ! 2001-06-12 Jim Wilson ! * loop.c (strength_reduce): Move bl->all_reduced set before ! check_ext_dependant_givs call. ! (check_ext_dependant_givs): Clear bl->all_reduced when ignoring givs. ! 2001-06-12 Alexandre Oliva ! Reverted: ! 2001-06-07 Nathan Sidwell ! * configure.in (sparc*-*-*): Check assembler R_SPARC_UA32 support. ! * configure: Rebuilt. ! * doc/extend.texi (Function Attributes): Document SH's sp_switch ! and trap_exit. ! 2001-06-13 Joseph S. Myers ! * doc/invoke.texi: Use more logical markup. Use TeX quotes, ! dashes and @dots{}. ! 2001-06-12 Zack Weinberg ! * configure.in (ALL_LINGUAS): Set to nothing. ! * configure: Regenerate. ! 2001-06-12 Richard Henderson ! * config/i386/i386.c (ix86_expand_prologue): Always use ! gen_pro_epilogue_adjust_stack; update arguments. ! (ix86_emit_epilogue_esp_adjustment): Likewise. ! (ix86_expand_epilogue): Likewise. ! * config/i386/i386.md (pro_epilogue_adjust_stack): Use a BLKmode ! clobber of scratch memory instead of a modification of EBP as the ! barrier. Update all peepholes to match. ! 2001-06-12 Joseph S. Myers ! * doc/gcc.texi: Change the font used for @def... commands to a ! fixed width font. ! * doc/extend.texi: Use more logical markup. Use "built-in" ! instead of "builtin". Use @deftypefn to mark up built-in ! functions; specify their types in the @deftypefn and not in the ! descriptive text. Use TeX quotes and dashes. Add more index ! entries. ! 2001-06-12 Joseph S. Myers ! * doc/install.texi (--exec-prefix, --bindir, --libdir, ! --with-slibdir, --infodir, --mandir, --with-cpp-install-dir): ! Document. ! (--enable-cpp): Change to document --disable-cpp instead; update ! to reflect current default. ! (--without-fast-fixincludes): Remove documentation. ! (Final install): Document installation directories in more ! detail. Document use of make dvi. ! 2001-06-12 lars brinkhoff ! * gcc.texi (HOST_BITS_PER_LONGLONG): Document. ! (DIR_SEPARATOR_2): Likewise. ! 2001-06-12 Kaveh R. Ghazi ! * c-decl.c (grokdeclarator): Use INTEGRAL_TYPE_P. ! * c-typeck.c (c_start_case): Likewise. ! 2001-06-12 Mark Mitchell ! * expr.c (store_field): Don't set MEM_ALIAS_SET for a field ! in a structure at a variable address. ! 2001-06-12 Joseph S. Myers ! * doc/gcov.texi: Use more logical markup. ! 2001-06-11 Stephane Carrez ! * config/m68hc11/m68hc11.c: Remove ifdef'ed gcc-2.95 code. ! (m68hc11_reorg): Remove the gcc-2.95 compatible code. ! (m68hc11_split_all_insns): Likewise, delete. ! * config/m68hc11/m68hc11.h: Remove ifdef'ed gcc-2.95 code. ! * config/m68hc11/m68hc11-protos.h: Likewise. ! 2001-06-11 Stephane Carrez ! * config/m68hc11/m68hc11.md ("*lshrdi3_const32"): Mark the clobber ! as an early clobber to make sure it is not used by reload in ! one of the operands. ! 2001-06-11 Mark Mitchell ! * toplev.c (lang_independent_f_options): Remove ! -feliminate-dwarf2-dups, -fbounded-pointers, and -fbounds-check. ! * doc/c-tree.texi: Update information about flag_honor_std. ! * doc/install.texi: Note that binutils is required on HPUX 11. ! * doc/invoke.texi (-fhonor-std): Note that -fno-honor-std is ! now the default. ! * config/mips/abi64.h (RETURN_IN_MEMORY): Fix handling of ! variable-sized types. ! 2001-06-11 Joseph S. Myers ! * doc/md.texi: Use TeX dashes and quotes. ! 2001-06-11 Joseph S. Myers ! * doc/rtl.texi: Reference manual chapter about trees. ! 2001-06-11 Rainer Orth ! * config/mips/iris6.h (NO_BUILTIN_WINT_TYPE): Define. ! (WINT_TYPE): Override. ! (WINT_TYPE_SIZE): Likewise. ! (SUBTARGET_CPP_SIZE_SPEC): Define __WINT_TYPE__ as appropriate. ! * config/sparc/sol2.h (WINT_TYPE): Define. ! (WINT_TYPE_SIZE): Likewise. ! * config/sparc/sol2-sld-64.h (NO_BUILTIN_WINT_TYPE): Define. ! (WINT_TYPE): Override. ! (WINT_TYPE_SIZE): Likewise. ! (CPP_ARCH32_SPEC): Add __WINT_TYPE__ definition. ! (CPP_ARCH64_SPEC): Likewise. ! 2001-06-11 Richard Henderson ! * unwind-dw2-fde.c (__deregister_frame_info): Don't play games ! with alias attribute. ! * config/linux.h (CPLUSPLUS_CPP_SPEC): Use %(cpp) not $(cpp_cpu). ! * config/alpha/linux.h (CPLUSPLUS_CPP_SPEC): Likewise. ! 2001-06-11 Franz Sirl ! * config/rs6000/linux.h (CPLUSPLUS_CPP_SPEC): New. ! 2001-06-11 Richard Henderson ! * config/alpha/osf5.h (TARGET_LD_BUGGY_LDGP): New. ! * config/alpha/alpha.h (TARGET_LD_BUGGY_LDGP): Default. ! (struct machine_function): Add gp_save_rtx. ! * config/alpha/alpha.c (alpha_mark_machine_status): Mark it. ! (alpha_gp_save_rtx): New. ! * config/alpha/alpha-protos.h: Declare it. ! * config/alpha/alpha.md (exception_receiver): Make an expander. ! Use alpha_gp_save_rtx if TARGET_LD_BUGGY_LDGP. ! 2001-06-11 Richard Henderson ! * config/alpha/osf.h (LINK_SPEC): Hide _GLOBAL_* symbols. ! 2001-06-11 Rainer Orth ! * configure.in: Align --help messages. ! Remove trailing full stops. ! Consistently use lower case. ! Fix DWARF 2 spelling. ! * configure: Rebuilt. ! 2001-06-11 Joseph S. Myers ! * c-decl.c (store_parm_decls): When comparing types in an ! old-style function declaration with those from a previous ! prototype, compare the unqualified versions of parameter types. ! Fixes PR c/3116. ! 2001-06-11 Joseph S. Myers ! * doc/objc.texi: Use more logical markup. Use TeX dashes. ! 2001-06-11 Joseph S. Myers ! * doc/c-tree.texi: Use more logical markup. ! 2001-06-11 Joseph S. Myers ! * doc/install.texi: Update details of what components are included ! in the GCC distribution. Update default directory for g++ ! includes. Update documentation relating to old libio. Adjust ! documentation on DejaGnu environment variables. Remove ! documentation of --enable-cpplib. ! 2001-06-11 Joseph S. Myers ! * doc/contrib.texi: Fix alphabetical order. Fix typos. Improve ! markup. ! 2001-06-10 Richard Henderson ! * ifcvt.c (life_data_ok): New. ! (merge_if_block): Use it to determine whether to update ! global_live_at_end. ! (if_convert): Set it. ! 2001-06-10 Richard Henderson ! * config/alpha/osf5.h (ASM_OLDAS_SPEC): Add -c. ! 2001-06-10 Alexandre Oliva ! * doc/invoke.texi (MN10300 Options): Document -mno-crt0. ! (SH Options): Document -mieee. ! * doc/install.texi (Final install): Remove obsolete information ! about installing cross compilers. ! * doc/gcc.1: Rebuilt. ! 2001-06-10 Richard Henderson ! * config/alpha/alpha.c (override_options): Set align_loops, ! align_jumps, and align_functions. ! * config/alpha/alpha.h (FUNCTION_BOUNDARY): Set to 32 bits. ! (LOOP_ALIGN, LABEL_ALIGN_AFTER_BARRIER): Remove. ! 2001-06-10 Richard Henderson ! * doc/invoke.texi (Optimization Options): Document -fpeephole2. ! (Code Generation Options): Document -fnon-call-exceptions. ! 2001-06-10 Mark Kettenis ! * config/i386/gnu.h (MD_FALLBACK_FRAME_STATE_FOR): Undefine. ! 2001-06-10 Stephane Carrez ! * m68hc11.md (peepholes): Remove unused and wrong peepholes. ! 2001-06-10 Stephane Carrez ! * config/m68hc11/m68hc11.md ("extendhisi2"): Fix constraints to ! prefer a memory for operand 1. ! ("*addsi3"): Fix constraints, the '!' was too strong. ! ("*addsi3_split"): Accept soft register and split accordingly. ! 2001-06-10 Stephane Carrez ! * config/m68hc11/m68hc11-protos.h (m68hc11_initialize_trampoline): ! Move definition in the RTX_CODE section. ! 2001-06-10 Stephane Carrez ! * config/m68hc11/m68hc11.h (RETURN_ADDR_RTX): Define the return ! address as relative to the argument pointer. ! 2001-06-09 Alexandre Oliva ! * doc/invoke.texi (C Dialect Options): Document -aux-info. ! (Debugging Options): Document -print-multi-directory and ! -print-multi-lib. ! * doc/gcc.1: Rebuilt. ! * toplev.c (independent_decode_option): Require `=' between ! `-aux-info' and filename in the same argument. ! * gcc.c: Don't pass -aux-info=filename twice. ! 2001-06-10 Neil Booth ! * cppinit.c (print_help): Document -fpreprocessed. ! * invoke.texi: Similarly. ! 2001-06-09 Mark Mitchell ! * expr.c (expand_expr, case ARRAY_REF): Do not replace ! an array element with the known initializing value if it has ! side-effects. ! * toplev.c (rest_of_compilation): Remove dead code before ! purge_addressof. ! 2001-06-09 Richard Henderson ! * defaults.h (ACCUMULATE_OUTGOING_ARGS, PUSH_ARGS): Move from ... ! * calls.c: ... here. ! * combine.c, expr.c, final.c, function.c toplev.c: Don't provide ! defaults for them here. ! 2001-06-09 Peter Jakubek ! * config/m68k/m68k.md (ashrdi_const): Fix right shift by 16. ! 2001-06-09 Joseph S. Myers ! * doc/gcc.texi: Use @defcodeindex for the index of options. Add ! more index entries. Use more logical markup where appropriate. ! Use TeX quotes and dashes. ! 2001-06-09 Nicola Pero ! * gthr-posix.h (__gthread_objc_init_thread_system): If ! pthread_key_create fails, it's not clear what the return value is. ! This obvious fix makes sure it always returns -1 if a problem ! occurs. ! 2001-06-09 Benjamin Kosnik ! * unwind-pe.h: Conditionally qualify references to abort with ! std::. ! 2001-06-09 John David Anglin ! * vax.h (NOTICE_UPDATE_CC): Set CC_NO_OVERFLOW in cc_status.flags ! for integer operations that don't update C bit. ! 2001-06-09 Julian Foad ! * invoke.texi: Remove superfluous text. ! 2001-06-08 Richard Henderson ! * config/alpha/linux.h (CPLUSPLUS_CPP_SPEC): New. ! (LIB_SPEC): Mirror config/linux.h version. ! 2001-06-08 Richard Henderson ! 2001-03-29 Richard Henderson ! * libgcc2.c [L__main]: Include unwind-dw2-fde.h instead of frame.h. ! 2001-06-08 Richard Henderson ! * except.c (get_exception_pointer, get_exception_filter): Take a ! struct function. Update all callers. ! * except.h (get_exception_pointer): Update declaration. ! * expr.c (expand_expr): Update get_exception_pointer call. ! * integrate.c (expand_inline_function): Remap the exception pointer ! from callee to caller. ! 2001-06-08 Mark Mitchell ! * c-decl.c (grokdeclarator): Make the TREE_TYPE for declarations ! accurately reflect its cv-qualification. ! * c-typeck.c (type_lists_compatible_p): Ignore the top-levl ! cv-qualifiers on function types. ! 2001-06-07 Loren J. Rittle ! * config/alpha/elf.h (MAKE_DECL_ONE_ONLY): Copy definition ! from config/elfos.h. ! 2001-06-08 Joseph S. Myers ! * doc/gcc.texi, doc/invoke.texi: Add index of command line ! options. Use @opindex to index them rather than other indexing ! commands. Use @var{...} instead of <...>. Avoid spaces in names ! inside @var. Don't use @kindex to index escape sequences in ! source code. ! 2001-06-08 Jason Merrill ! * dbxout.c (dbxout_symbol): Use DECL_RTL_SET_P. ! 2001-06-08 Jakub Jelinek ! * config/ia64/ia64.c (ia64_function_arg): Use [SDT]Fmode as gr_mode ! for complex floats passed to unprototyped functions. ! 2001-06-08 Jakub Jelinek ! * jump.c (mark_modified_reg): Allow jump threading if condition ! codes are represented by a hard register. ! 2001-06-08 Jakub Jelinek ! * config/ia64/ia64.h (CC1_SPEC): Define. ! * config/ia64/linux.h (CC1_SPEC): Define. ! 2001-06-08 Jakub Jelinek ! * tradcpp.c (do_define): Make sure we don't walk past limit. ! 2001-06-08 Jakub Jelinek ! * except.c (expand_eh_region_end_allowed): Call ! do_pending_stack_adjust as necessary. ! 2001-06-08 Gerald Pfeifer ! * doc/install.texi2html (MAKEINFO): Keep value if set already. ! 2001-06-07 Mark Mitchell ! * tree.h (DECL_SOURCE_FILE): Improve documentation. ! (DECL_SOURCE_LINE): Likewise. ! 2001-06-07 Phil Edwards ! * linux.h (CPLUSPLUS_CPP_SPEC): Move -D_GNU_SOURCE to here. ! * pa/pa-linux.h: Allow CPLUSPLUS_CPP_SPEC to remain. ! 2001-06-08 Joseph S. Myers ! * doc/contrib.texi: Add copyright notice. ! 2001-06-08 Joseph S. Myers ! * doc/md.texi: Use four digit years in copyright notice. ! 2001-06-07 DJ Delorie ! * c-tree.texi, contrib.texi, cpp.texi, cppinternals.texi, ! extend.texi, fdl.texi, gcov.texi, invoke.texi, md.texi, ! objc.texi, rtl.texi, tm.texi, texinfo.tex, gcc.1, cpp.1, ! gcov.1: Move to doc subdirectory. ! * install.texi: Move to doc/install-old.texi. ! * gcc.texi: Move to doc, refer to install-old.texi. ! * Makefile.in: Reflect move of docs to doc/. ! * f/Make-lang.in: Ditto. ! * java/Make-lang.in: Ditto. ! * doc/.cvsignore: New. ! 2001-06-07 Theodore Papadopoulo ! * c-tree.texi: Reformat the manual as a single chapter now ! included by gcc.texi. ! * gcc.texi: Include c-tree.texi. Merge all indexes. ! * Makefile.in (dvi): Add generation for the cppinternals ! documentation. Added dependencies on fdl.texi and c-tree.texi ! where appropriate. Use TEXI2DVI instead of custom tex calls. ! (info): Added dependencies on fdl.texi and c-tree.texi where ! appropriate. Remove the target c-tree.info. ! 2001-06-07 Joseph S. Myers ! * NEWS: Regenerate. ! 2001-06-07 Rainer Orth ! * gthr-posix.h (__gthread_objc_thread_detach): Simply cast ! pthread_t to objc_thread_t. ! (__gthread_objc_thread_id): Likewise. ! 2001-06-07 Rainer Orth ! * alpha/osf5.h (CPP_XFLOAT_SPEC): Override default definition. ! (ASM_OLDAS_SPEC): Likewise. ! * alpha/osf.h (CPP_XFLOAT_SPEC): Define. ! (CPP_SUBTARGET_SPEC): Use it. ! (ASM_OLDAS_SPEC): Define. ! (ASM_SPEC): Use it. ! (SUBTARGET_EXTRA_SPECS): Define, declare the new specs above. ! 2001-06-07 Rainer Orth ! * config/alpha/alpha.c (alpha_va_arg): Handle TFmode, TCmode args, ! passed by reference. ! 2001-06-07 Joseph S. Myers ! * tm.texi (TARGET_SWITCHES, TARGET_OPTIONS): Adjust markup. ! Document use of N_(...), and show it in examples. Note that ! documentation should be added to invoke.texi. Avoid an overfull ! hbox. ! 2001-06-07 Gerald Pfeifer ! * pself.c, pself1.c, pself2.c, pself3.c, pself4.c, pself5.c: ! Remove. ! 2001-06-07 Joseph S. Myers ! * install.texi: Remove more obsolete documentation. ! 2001-06-07 Nathan Sidwell ! * configure.in (sparc*-*-*): Check assembler R_SPARC_UA32 support. ! * configure: Rebuilt. ! 2001-06-06 Richard Henderson ! * flow.c (mark_used_reg): Clean up looping over multiple hard ! registers. Do conditional life bits across multiple hard regs. ! 2001-06-05 Jeffrey D. Oldham ! * reload1.c (reload): Revert Schmidt's change so all USEs are not ! deleted during reload. ! 2001-06-05 Mark Mitchell ! * c-semantics.c (genrtl_scope_stmt): Write out nested inline ! functions here, instead of ... ! * c-decl.c (c_expand_body): ... here. ! 2001-06-05 Richard Henderson ! * dwarf2.h (DW_EH_PE_aligned): New. ! * dwarf2asm.c (eh_data_format_name): Name it. ! (dw2_asm_output_encoded_addr_rtx): Align for it. ! * dwarf2out.c (output_call_frame_info): Handle it for personality ! routine and LSDA pointers. ! * unwind-pe.h (DW_EH_PE_aligned): New. ! (base_of_encoded_value): Handle it. ! (read_encoded_value_with_base): Likewise. ! * unwind-dw2-fde.c (base_from_object): Likewise. ! (get_cie_encoding): Likewise. ! * config/alpha/elf.h: Remove ecoff commentary. ! * config/alpha/osf.h (ASM_PREFERRED_EH_DATA_FORMAT): New. ! 2001-06-05 Mark Mitchell ! * print-rtl.c (xspaces): Remove. ! (print_rtx): Use printf field-width, rather than xpsaces, to ! indent. ! * toplev.c (main): Disable sibling-call optimization if we are ! handling exceptions. ! 2001-06-05 Bernd Schmidt ! * reload1.c (reload): Delete all USEs generated during reload. ! Tue Jun 5 21:08:39 2001 Rainer Orth ! * config.gcc (i?86-*-solaris2*): Enable shared libgcc. ! 2001-06-05 Phil Edwards ! * gccbug.in: Remove high priority. ! 2001-06-05 scott snyder ! * gccbug.in: Fix typo. ! 2001-06-05 David Edelsohn ! * rs6000/aix51.h (CPP_SPEC, CPLUSPLUS_CPP_SPEC): Fix typo in ! __WCHAR_TYPE__ definition. ! (WCHAR_TYPE_SIZE): #undef before #define. ! 2001-06-05 Nathan Sidwell ! * c-common.h (flag_dump_translation_unit): Remove. ! (enum tree_dump_index): Define. ! (TDF_ADDRESS, TDF_SLIM): New #defines. ! (dump_node_to_file): Remove. ! (dump_node): Make extern. Add flags. ! (dump_flag, dump_enabled_p, dump_begin, dump_end, ! dump_switch_p): Prototype. ! * c-common.c (flag_dump_translation_unit): Remove. ! * c-decl.c (c_decode_option): Remove -fdump-translation-unit ! logic. Use dump_switch_p. ! * c-dump.h (struct dump_info): Add node and user fields. ! (dump_pointer): Declare. ! * c-dump.c (dump_node): Make extern. Add flags. ! (SOL_COLUMN, EOL_COLUMN, COLUMN_ALIGNMENT): New #defines. ! (dump_new_line, dump_maybe_newline): Use them. ! (dump_pointer): New function. ! (dequeue_and_dump): Check TDF_SLIM before dumping a _DECL's ! chain or function's body. Dump address, if TDF_ADDRESS set. ! (dump_flag): Define. ! (dump_node_to_file): Remove. ! (struct dump_file_info): New struct. ! (dump_files): New array. ! (dump_begin, dump_end, dump_enabled_p, dump_switch_p): Define. ! * c-lang.c (finish_file): Adjust dumping. ! * toplev.h (dump_base_name): Make extern. ! * invoke.texi: Document new flags. ! 2001-06-04 Mark Mitchell ! * c-tree.h (lang_decl): Add pending_sizes fields. ! * c-decl.c (store_parm_decls): Save pending_sizes away for nested ! functions. ! (c_expand_body): Expand them. ! (lang_mark_tree): Mark lang_decl:pending_sizes. ! * function.c (expand_pending_sizes): New function, broken out ! from ... ! (expand_function_start): ... here. ! * tree.h (expand_pending_sizes): Declare it. ! 2001-06-04 Loren J. Rittle ! * doc/install.texi: Update FreeBSD information. Generalize ! and update information for alpha-based platforms using ELF. ! 2001-06-04 Richard Henderson ! * sibcall.c (optimize_sibling_and_tail_recursive_call): Suppress ! optimization if current_function_calls_setjmp. ! 2001-06-04 Joseph S. Myers ! * c-tree.texi: Fix documentation of TREE_STRING_LENGTH for wide ! strings. ! 2001-06-04 John David Anglin ! * c-decl.c (get_parm_info): Use INTEGRAL_TYPE_P. ! (store_parm_decls): Likewise. ! * c-typeck.c (convert_arguments): Likewise. ! 2001-06-03 kaz Kojima ! * gcc/config/sh/sh.c (print_operand_address, print_operand): Call ! mark_constant_pool_use before output_addr_const. ! (struct pool_node): New field wend. ! (add_constant): Note a sequence of constants that are referenced ! by a given label. ! (pool_window_label, pool_window_last): New variables. ! (dump_table): Emit a unspec_volatile representing the end of a ! sequence of constants. ! (mark_constant_pool_use): New function. ! * gcc/config/sh/sh.md (UNSPECV_WINDOW_END): New constant. ! (consttable_2): Add the second operand which flags whether ! this consttable entry was used or not. ! (consttable_4, consttable_8, consttable_sf, consttable_df): ! Likewise. ! (consttable_window_end): New insn. ! 2001-06-03 Alexandre Oliva ! Warning removal. ! * config/sh/sh.c (print_operand_address): Cast INTVAL to int. ! (shl_and_kind): Cast wide constant. ! (gen_far_branch): Define as static, as in declaration. ! (barrier_align): Compute cache-line length as unsigned. Add ! parentheses in initial credit computation. ! (rounded_frame_size): Add parentheses. ! (permanent_obstack): Remove declaration. Include ggc.h for ! declaration of ggc_add_root_rtx(). ! (get_free_reg): Removed declaration of unused variable reg. ! (legitimize_pic_address): Mark mode argument as unused. ! 2001-06-03 Igor Shevlyakov ! * config/sh/sh.c (output_branch): Support for insn with lenght ! attr 12 & 16 which represents cond branches outside +-4096 range. ! 2001-06-03 Alexandre Oliva ! * config/sh/lib1funcs.asm (ic_invalidate): Align the ! cache-mirroring sequence. Add nops. ! 2001-06-03 Joseph S. Myers ! * install.texi: Remove more old installation documentation. ! * doc/install.texi: Add relevant parts here. ! 2001-06-03 Gerald Pfeifer ! * doc/install.texi2html: New script. ! 2001-06-03 David Edelsohn ! * doc/install.texi: Update AIX information again. ! 2001-06-02 Joseph S. Myers ! * gcc.texi, install.texi: Remove old system-specific installation ! documentation. ! * doc/install.texi: Move it to here. ! 2001-06-02 Joseph S. Myers ! * doc/install.texi: Clean up Texinfo markup. ! 2001-06-02 Joseph S. Myers ! * cpp.texi, cppinternals.texi, gcc.texi: Move contents to just ! after title page. ! 2001-06-02 Joseph S. Myers ! * install.texi: Remove documentation of some configuration ! options. ! * doc/install.texi: Add relevant parts of this documentation here. ! 2001-06-02 Gerald Pfeifer ! * contrib.texi: Updated entries for Mark Mitchell, Joseph S. Myers, ! Gerald Pfeifer, Bernd Schmidt, and Dean Wakerley. ! 2001-06-02 Joseph S. Myers ! * install.texi: Remove libgcc1 documentation. ! * gcc.texi: Remove link to Cross Runtime. ! 2001-06-01 Jan van Male ! * invoke.texi: Remove references to papers about sequence points to ! readings.html, refer to that page. ! 2001-06-01 Gerald Pfeifer ! * README: Update references to installation instructions. ! 2001-06-01 Laurent Guerby ! Gerald Pfeifer ! * doc/install.texi: Define srcdir when sources come from CVS. ! Significantly improve markup. Wrap overly long lines. ! 2001-05-31 Richard Henderson ! * gcc.c (init_gcc_specs): When linking against libgcc_s.so, ! also link against libgcc.a. ! Thu May 31 19:17:01 CEST 2001 Jan Hubicka ! * i386.c (ix86_expand_int_movcc): Force one of operands to be register. ! 2001-05-31 Rodney Brown ! * install.texi (Configuration): Add html links for --with-gnu-as & ! --with-gnu-ld and refer to them from hppa & SCO triplets. ! (Specific): Link back to with-gnu-ld for all ELF platfoms. ! (Specific): Reword AVR binutils recommendation. ! 2001-05-31 Jan van Male ! * extend.texi: Fix formating of examples, eliminate some ! 'overfull hboxes'. ! * gcc.texi: Eliminate some 'overfull hboxes'. ! * invoke.texi: Use two spaces between command options, eliminate ! some 'overfull hboxes'. ! 2001-05-30 Richard Henderson ! * dwarf2out.c (dwarf2out_finish): Don't emit DW_AT_stmt_list at -g1. ! 2001-05-30 Tom Tromey ! * gcc.c (do_spec_1): In `%O' case, if we computed saved_suffix, ! use it in the new association. ! 2001-05-30 Loren J. Rittle ! David O'Brien ! FreeBSD system configuration merged from mainline. ! * config.gcc (the unlabeled system switch statement): Add ! generic configuration section to handle *-*-freebsd*. Also, ! to match the system compiler, default to threading support (it ! may be disabled with the standard --disable-threads ! configuration-time switch). Report bad configuration. ! (i[34567]86-*-freebsd* in machine-specific section): Use it. ! (alpha*-*-freebsd* in machine-specific section): Likewise. ! * config/freebsd.h (LIB_SPEC): Key the exact setting to ! configure-time options and target version of FreeBSD. Set-up ! to match architectural change in threading support. Correctly ! report when -pthread option is not supported by configure-time ! options. ! (FBSD_CPP_PREDEFINES): Move from architecture-specific files ! and extend to encode target version number in run-time setting ! of __FreeBSD__ macro to match the system compiler. Use #endif/#if pair ! instead of #elif (which is OK for this case but not in general). ! (CPP_PREDEFINES): Likewise. ! (PREFERRED_DEBUGGING_TYPE): Change to DWARF2_DEBUG. ! * config/alpha/freebsd.h (CPP_PREDEFINES): Moved to common freebsd.h. ! * config/i386/freebsd.h (CPP_PREDEFINES): Likewise. ! * config/freebsd3.h: New file to expose FBSD_MAJOR macro (3). ! * config/freebsd4.h: New file to expose FBSD_MAJOR macro (4). ! * config/freebsd5.h: New file to expose FBSD_MAJOR macro (5). ! * config/freebsd6.h: New file to expose FBSD_MAJOR macro (6). ! * config/freebsd-nthr.h: New file to expose FBSD_NO_THREADS macro. ! * config/t-freebsd (TARGET_LIBGCC2_CFLAGS): Add -fPIC. ! * config/t-freebsd-thread (TARGET_LIBGCC2_CFLAGS): Add ! -pthread instead setting macro. ! 2001-05-30 Loren J. Rittle ! John David Anglin ! * gthr-posix.h (__gthread_active_ptr): Cast function pointer ! to target type to allow ISO C++ compiler to accept it. ! * gthr-dce.h (__gthread_active_ptr): Likewise. ! * gthr-solaris.h (__gthread_active_ptr): Likewise. ! 2001-05-30 Neil Booth ! * cpplex.c (_cpp_lex_token): Revert patch of 16 May 2001 ! so that we do accept comments in preprocessed input. ! 2000-05-30 Kelley Cook ! * config/i386/i386.h (TARGET_SWITCHES): Remove -mmmx and -msse options. ! 2001-05-30 Rainer Orth ! * sparc/sol2.h (CPLUSPLUS_CPP_SPEC): Add all of CPP_SPEC instead ! of just copying CPP_CPU_SPEC. ! 2001-05-30 Gordon Sadler ! * invoke.texi (Option Summary): Remove -isystem-c++ from options. ! 2001-05-30 Hans-Peter Nilsson ! * Makefile.in (s-mlib): Make backtick-commands always succeed. ! (DRIVER_DEFINES): Ditto. ! 2001-05-29 Stan Shebs ! * gcc.texi: Add links for information about Objective-C. ! 2001-05-29 Hartmut Schirmer ! * config/sh/sh.h (IDENT_ASM_OP): End with TAB, not LF. ! 2001-05-29 Nathan Sidwell ! * configure.in (gcc_version): Remove unrequired \ on ". (Solaris ! /bin/sed fails on [^\"]). ! (configargs.h): Likewise. ! * configure: Rebuilt. ! 2001-05-28 Joseph S. Myers ! * c-tree.texi, contrib.texi, cpp.texi, extend.texi, gcc.texi, ! gcov.texi, install.texi, md.texi, objc.texi, rtl.texi, tm.texi: ! Remove trailing whitespace. ! 2001-05-28 Gabriel Dos Reis ! * c-common.c (c_common_nodes_and_builtins): Change __builtin_fsqrt ! to __builtin_sqrt. ! * extend.texi (Other Builtins): Update documentation about ! __builtin_sqrt. ! 2001-05-28 Gerald Pfeifer ! * doc/install.texi (Specific): http://reality.sgi.com/ariel/freeware/ ! became http://freeware.sgi.com/. ! 2001-05-27 Kaveh R. Ghazi ! * fixinc/fixtests.c: Declare entries in ENV_TABLE. ! 2001-05-27 Neil Booth ! * cpplib.c (run_directive): Set pfile->directive. ! 2001-05-27 Nathan Sidwell ! * lists.c (init_EXPR_INSN_LIST_cache): Only called once. ! * toplev.c (rest_of_compilation): Don't call it here. ! (compile_file): Call it here. ! 2001-05-27 Lars Brinkhoff ! * combine.c (try_combine): Fix typo in comment. ! * expr.c (expand_expr): Likewise. ! * config/i370/i370.md (untyped_call): Likewise. ! 2001-05-26 Bruce Korb ! * fixinc/fixtests.c(stdc_0_in_system_headers_test): Must return "FIX" ! when fixincl is operating in test mode ! * fixinc/inclhack.def(AAB_dgux_int_varargs) : aesthetics ! (AAB_ultrix_limits): remove redundant text ! (AAB_ultrix_memory): ditto ! (AAB_ultrix_string): ditto ! (djgpp_wchar_h): fix the test text ! (irix_stdio_va_list): add test text ! (irix_limits_const): add a testing output file (limits.h is overwritten) ! (strict_ansi_not_ctd): put limits.h second in list for same reason ! (solaris27_mutex_init): test text needed selection text, too ! * fixinc/fixtests.c(stdc_0_in_system_headers_test): Must return "FIX" ! when fixincl is operating in test mode ! 2001-05-25 Zack Weinberg ! * toplev.c (debug_args, f_options, W_options): Mark ! descriptions for translation. ! (display_help): Translate descriptions on output. ! * cp/lang-options.h, f/lang-options.h, java/lang-options.h, ! objc/lang-options.h: Mark descriptions for translation. ! * aclocal.m4: Quote final argument of patsubst. Use ! 3-argument form of AC_DEFINE. Restore quotes to [] while ! using AC_FD_CC. ! * configure, config.in: Regenerate. ! 2001-05-25 Herman A.J. ten Brugge ! * c4x.h (HARD_REGNO_CALLER_SAVE_MODE): Remove MODE argument. ! 2001-05-25 Stacey Sheldon ! * config/arc/initfini.c (.init): Fix typo. ! 2001-05-25 Rainer Orth ! * i386/i386.h (CC1_CPU_SPEC): Clarify -m486 etc deprecation messages. ! 2001-05-25 Richard Henderson ! * config.gcc (all gnu and linux): Use t-slibgcc-elf-ver with t-linux. ! (i386-*-solaris2): Use t-slibgcc-elf-ver or t-slibgcc-sld. ! (sparc*-*-solaris2): Likewise. ! * config/t-linux: Remove shared libgcc macros. ! * config/t-slibgcc-elf-ver: Move from sparc/t-slibgcc. ! * config/t-slibgcc-sld: Move from sparc/t-slibgcc-sld. ! 2001-05-25 Richard Henderson ! * libgcc-std.ver: Export XFmode and TFmode versions of symbols. ! 2001-05-25 Rainer Orth ! * fixinc/inclhack.def (strict_ansi_not, strict_ansi_not_ctd, ! strict_ansi_only): Don't run if stdc_0_in_system_headers. ! * fixinc/fixincl.x: Regenerate. ! * fixinc/fixtests.c (stdc_0_in_system_headers_test): New function. ! (FIX_TEST_TABLE): Declare it. ! * fixinc/fixlib.h: Include config.h. ! 2001-05-25 Rainer Orth ! * fixinc/inclhack.def (alpha___assert): Change char * args to ! const char * on Tru64 UNIX to avoid excessive warnings from ! assert.h. ! * fixinc/fixincl.x: Regenerate. ! 2001-05-25 David Edelsohn ! * xcoffout.h (DBX_OUTPUT_GCC_MARKER): Do not emit any marker. ! * config/rs6000/aix.h (USER_LABEL_PREFIX): AIX symbols do not have ! any prefix. ! 2001-05-25 Jeff Knaggs ! * config/alpha/alpha.md (movtf_internal): Use reg_overlap_mentioned_p ! instead of rtx_equal_p for early clobber test. ! 2001-05-25 Rainer Orth ! * aclocal.m4: Fixed typo. ! (gcc_AC_HEADER_STDBOOL): Define. ! (gcc_AC_C__BOOL): Define. ! * configure.in: Use them. ! (AC_CHECK_HEADERS): Remove stdbool.h ! * configure, config.in: Regenerate. ! 2001-05-25 Richard Henderson ! * config/i386/i386.md: Revert previous change. Do not apply ! the peephole if the components do not die after the sequence. ! 2001-05-25 Mark Mitchell ! * config/i386/i386.md: Make sure cmpstr peepholes do not ! affect liveness information. ! 2001-05-24 Mark Mitchell ! * c-typeck.c (digest_init): Issue error messages about ! invalid constants, not warnings. ! * invoke.texi (-fno-builtin): Document that this is always on ! in C++. ! 2001-05-24 Philip Blundell ! * config/arm/arm.c (output_return_instruction): Correctly handle ! interworking and interrupt functions. ! 2001-05-24 Philip Blundell ! * config/arm/arm.h (TARGET_SWITCHES): Correct misleading help for ! -m{no-}sched-prolog. Fix typos and improve formatting. ! 2001-05-24 Philip Blundell ! * invoke.texi (ARM Options): Improve wording slightly. Add ! documentation for more options, including those for Thumb mode. ! Don't mention options that don't exist or are unimplemented. ! (Thumb Options): Delete; merged into above section. ! 2001-05-24 Geoff Keating ! * config/rs6000/linux.h (SIGNAL_FRAMESIZE): Define. ! (MD_FALLBACK_FRAME_STATE_FOR): Use it. ! 2001-05-23 Richard Henderson ! * doc/install.texi (alpha-linux): Require binutils 2.11. ! 2001-05-23 Joseph S. Myers ! * extend.texi (Attribute Syntax): Clarify application of ! attributes to parameters declared as functions or arrays. ! 2001-05-23 Zack Weinberg ! * diagnostic.c (vnotice): Kill. ! (fnotice): Call vfprintf directly. ! (diagnostic_for_decl, output_do_verbatim, output_verbatim, ! verbatim, set_diagnostic_context): Rename string argument to ! indicate that it is run through gettext. ! (vbuild_message_string, build_message_string, output_do_printf): ! Rename string argument to indicate that it is NOT run through ! gettext. ! (output_printf, diagnostic_for_decl, fatal_io_error, sorry, ! output_do_verbatim, set_diagnostic_context, fnotice, _fatal_insn): ! Run msgid argument through gettext. ! (default_print_error_function): Run constant strings through ! gettext when nothing else will. ! (fatal_error, internal_error, error_recursion): Use fnotice. ! Present complete sentences to gettext. ! 2001-05-23 Mark Mitchell ! * jump.c (mark_jump_label): Fix thinko in 2001-05-19 change. ! 2001-05-22 Richard Henderson ! * config/mips/iris6.h (EH_FRAME_SECTION_ASM_OP): Give the ! section pointer alignment. ! * doc/install.texi (alpha-linux): Require binutils >= 2.10. ! * unwind-dw2-fde.c (__deregister_frame_info): Stringize use ! of __USER_LABEL_PREFIX__. ! 2001-05-22 Richard Henderson ! * unwind-dw2-fde.c (__deregister_frame_info): Stubbify in favour of... ! (__deregister_frame_info_bases): New. ! * unwind-dw2-fde.h: Declare it. ! * libgcc-std.ver: Export it. ! * crtstuff.c (__do_global_dtors_aux): Call it if we would have ! called __register_frame_info_bases. ! 2001-05-22 Andrew MacLeod ! * builtins.c (expand_builtin_longjmp): A longjmp can be a call too. ! * config/ia64/ia64.md (nonlocal_goto): Reverse label and frame pointer ! parameters to __ia64_nonlocal_goto. Flag as NO_RETURN. ! * config/ia64/ia64.c (ia64_expand_epilogue): Make sure we are issuing ! "r2" to the assembly file. Only issue allocs with non-zero parameters. ! 2001-05-22 Richard Henderson ! * libgcc2.c: Include hwint.h. ! 2001-05-22 Richard Henderson ! * crtstuff.c (__register_frame_info_bases): Declare. ! (frame_dummy): Use it, if CRT_GET_RFIB_TEXT or CRT_GET_RFIB_DATA. ! (__do_global_dtors_aux, __do_global_dtors): Streamline. ! * config/i386/linux.h (ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX): New. ! (CRT_GET_RFIB_DATA): New. ! * config/i386/sysv4.h: Likewise. ! * config/i386/sco5.h: Likewise. ! (ASM_PREFERRED_EH_DATA_FORMAT): New. ! 2001-05-22 Gerald Pfeifer ! * doc/install.texi (Specific): Remove a bogus and duplicate part ! copied from the end of the document. ! 2001-05-22 Gerald Pfeifer ! * install.texi: Remove obsolete information on SunOS as well as ! i386-sun-sunos4, i860-intel-osf1, and powerpcle-*-solaris2*. ! (Installing GNU CC on the Sun): Remove section. ! 2001-05-22 Alexandre Oliva ! * cppfiles.c (remove_component_p): Don't assume lstat/stat will ! keep errno unchanged on success. ! 2001-05-22 Joseph S. Myers ! * c-lex.c (lex_number): If pedantic and not C99, pedwarn exactly ! once for hexadecimal floats, whether or not they contain a decimal ! point. Don't let the setting of pedantic otherwise affect the ! parsing of hexadecimal floats. ! 2001-05-22 Gerald Pfeifer ! * README.ACORN: Remove obsolete file. ! 2001-05-22 Joseph S. Myers ! Merge objc.texi from mainline: ! 2001-02-28 Ovidiu Predescu ! * objc-features.texi: Document the @compatibility_alias compiler ! directive (description from Nicola Pero ). ! 2001-05-21 Mark Mitchell ! * tree.h (type_num_arguments): Declare it. ! * tree.c (type_num_arguments): New function. ! 2001-05-21 Richard Henderson ! * dwarf2out.c (current_funcdef_number): Move outside dwarf2 ! conditional ifdef. ! 2001-05-21 Mark Mitchell ! * c-decl.c (finish_decl): Don't set DECL_C_HARD_REGISTER for ! non-register variables. ! * extend.texi: Document that asm-specifications do not make sense ! for non-static local variables. ! 2001-05-17 Andrew Haley ! * config/rs6000/linux.h (MD_FALLBACK_FRAME_STATE_FOR): New. ! 2001-05-20 Mark Mitchell ! Jim Wilson ! * libgcc2.h (TItype): Do not assume that the host has 64-bit ntegers. ! (W_TYPE_SIZE): Likewise. ! 2001-05-21 Joseph S. Myers ! * extend.texi: Clarify documentation of extensions included in ISO ! C99. Prefer C99 terminology and syntax to old GNU terminology and ! syntax. Add more index entries. Document mixed declarations and ! code as an extension in C89 mode. Warn about future changes to ! semantics of inline functions. Fixes PR other/930. ! 2001-05-20 Richard Henderson ! * sched-deps.c (sched_analyze_insn): Force volatile memory reads ! to be output before a branch. ! 2001-05-12 Neil Booth ! * sched-deps.c (sched_analyze_insn): Remove unused vars. ! 2001-04-05 Bernd Schmidt ! * sched-deps.c (sched_analyze_insn): Revert more of the March 27 ! change. ! 2001-04-04 Bernd Schmidt ! * sched-deps.c (sched_analyze_insn): Partially revert March 27 ! change. ! 2001-05-20 Richard Henderson ! * Makefile.in (dwarf2asm.o): Depend on $(TREE_H). ! 2001-05-20 Richard Henderson ! * config/i386/att.h (ASM_SHORT, ASM_LONG): Add trailing \t. ! (ASM_DOUBLE): Remove. ! * config/i386/bsd.h, config/i386/sco5.h: Likewise. ! * config/i386/sun386.h: Likewise. ! * config/i386/i386.h (UNALIGNED_SHORT_ASM_OP): New. ! (UNALIGNED_INT_ASM_OP, INT_ASM_OP): New. ! * config/i386/cygwin.h (INT_ASM_OP): Remove. ! * config/i386/freebsd-aout.h, config/i386/i386-aout.h: Likewise. ! * config/i386/i386-coff.h, config/i386/i386-interix.h: Likewise. ! * config/i386/netbsd.h, config/i386/openbsd.h: Likewise. ! * config/i386/cygwin.h: Adjust uses of ASM_LONG for trailing \t. ! * config/i386/djgpp.h, config/i386/i386.h: Likewise. ! * config/i386/i386elf.h, config/i386/ptx4-i.h: Likewise. ! * config/i386/sco5.h, config/i386/svr3gas.h: Likewise. ! * config/i386/sysv4.h, config/i386/vsta.h: Likewise. ! * config/i386/win-nt.h, config/i386/win32.h: Likewise. ! 2001-05-20 Joseph S. Myers ! * invoke.texi: Add more options to summary list. ! 2001-05-19 Zack Weinberg ! * extend.texi: Document #pragma GCC java_exceptions. ! 2001-05-20 Joseph S. Myers ! * invoke.texi: Document meaning of -pedantic when -std=gnu* is ! used. Fixes PR c/2291. ! * gcc.1: Regenerate. ! 2001-05-20 Stephane Carrez ! * config/m68hc11/m68hc11.c (m68hc11_override_options): Ignore ! the -fpic and -fPIC options, clear flag_pic. ! 2001-05-19 Brad Lucier , Alexandre Oliva ! * Makefile.in (alloca.o): Depend on $(GCONFIG_H). ! ($(HOST_PREFIX_1)alloca.o): Depend on $(HCONFIG_H). Arrange for ! hconfig.h to be included. ! Sat May 19 18:23:04 2001 Richard Henderson ! * except.c (dw2_build_landing_pads): Use word_mode, not Pmode, ! as ncessary. ! (expand_eh_return): Convert between word_mode and Pmode. ! * unwind-dw2.c (extract_cie_info): Do not assume words and pointers ! are the same size. ! (execute_stack_op): Likewise. ! (execute_cfa_program): Likewise. ! (uw_frame_state_for): Likewise. ! (uw_update_context_1): Likewise. ! * unwind.inc (_Unwind_Reason_Code): Likewise. ! * config/mips/mips.h (EH_RETURN_DATA_REGNO): Define. ! (EH_RETURN_STACKADJ_RTX): Likewise. ! * config/mips/mips.c (compute_frame_size): Make space for saving ! EH return registers. ! (mips_expand_epilogue): Handle EH stack adjustments. ! * config/mips/mips.md (eh_return): New pattern. ! (eh_set_lr_si): Likewise. ! (eh_set_lr_di): Likewise. ! Add splitter to perform EH return after reload. ! 2001-05-19 Mark Mitchell ! * jump.c (mark_jump_label): Tidy previous change. ! 2001-05-17 Brendan Conoboy ! Bruce Korb ! * fixinc/fixincl.sh(FIXINC): accept local directory if fixincl not ! found in fixinc directory. Facilitates binary distributions. ! 2001-05-19 Bruce Korb ! * fixinc/fixincl.tpl: rewritten as an AutoGen version 5 template ! * fixinc/genfixes: emit a warning if AutoGen is out of date ! * fixinc/fixincl.x: regen ! * fixinc/Makefile.in: open stdin for those building with a closed one. ! 2001-05-19 Mark Mitchell ! * jump.c (mark_jump_label): Tidy previous change. ! * jump.c (jump_optimize_1): Tidy. ! (mark_jump_label): When changing the label in a LABEL_REF, change ! update any REG_EQUAL notes as well. ! * defaults.h (TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER): New ! macro. ! * tm.texi (TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER): ! Document it. ! * toplev.c (main): If the target does not allow profiling without ! a frame pointer, issue an error message. ! * config/i386/linux.h (TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER): ! Define it to false. ! Sat May 19 09:40:45 2001 Denis Chertykov ! * regrename.c (regrename_optimize): frame pointer register can ! use a few hardregs. ! 2001-05-18 John David Anglin ! * toplev.c (note_outlining_of_inline_function): Add ATTRIBUTE_UNUSED ! to argument declaration. ! 2001-05-18 Jason Merrill ! * README.DWARF: Move into dwarfout.c. ! 2001-05-18 Stan Shebs ! * configure.in (gcc_cv_as_eh_frame): Cope with old assemblers. * configure: Regenerate. ! 2001-05-18 Geoff Keating ! ! * config/rs6000/rs6000.c (rs6000_emit_prologue): Don't save ! the link register if we're not going to use it. ! ! * config/rs6000/rs6000.c (output_function_profiler): Fix a warning. ! ! 2001-05-18 Per Bothner ! ! Changes needed for java/jvspec.c ! * gcc.h (n_infiles, outfiles): Add declarations. ! * gcc.c (n_infiles, outfiles): Mske no longer static. ! ! Fri May 18 10:12:19 2001 Jeffrey A Law (law@cygnus.com) ! ! * config/pa/som.h (EXCEPTION_SECTION): Define. ! ! 2001-05-18 Bernd Schmidt ! ! Revert ! 2001-02-09 Nick Clifton ! * config/arm/arm.md: Change output constraint on post inc ! load/store multiple patterns to be a read/write constraint. ! ! 2001-05-18 Mark Mitchell ! ! * function.c (expand_function_start): Avoid creating BLKmode ! pseudos. ! ! 2001-05-17 Mark Mitchell ! ! * dwarf2out.c (output_comp_unit): Always output a compilation-unit ! DIE, even if it has no children. ! (dwarf2out_finish): Always output the line-number table, even if ! it has no content. ! ! 2000-05-18 David Edelsohn ! ! * rs6000.md (movsfcc,movdfcc): Remove NE case. ! ! 2000-05-17 Franz Sirl ! ! * config/rs6000/rs6000.c (rs6000_legitimate_address): Allow any stack ! offsets if not REG_OK_STRICT. ! ! * config/rs6000/rs6000.h (REG_OK_STRICT_FLAG): New macro. ! (INT_REG_OK_FOR_INDEX_P): Likewise. ! (INT_REG_OK_FOR_BASE_P): Likewise. ! (REG_OK_FOR_INDEX_P): Use INT_REG_OK_FOR_INDEX_P. ! (REG_OK_FOR_BASE_P): Use INT_REG_OK_FOR_BASE_P. ! (LEGITIMATE_OFFSET_ADDRESS_P): Use INT_REG_OK_FOR_INDEX_P and ! INT_REG_OK_FOR_BASE_P instead of REG_OK_FOR_INDEX_P and ! REG_OK_FOR_BASE_P. Take an additional parameter. ! (LEGITIMATE_INDEXED_ADDRESS_P): Likeewise. ! (LEGITIMATE_INDIRECT_ADDRESS_P): Likewise. ! (LEGITIMATE_LO_SUM_ADDRESS_P): Likewise. ! (GO_IF_LEGITIMATE_ADDRESS): Move code into new function ! rs6000_legitimate_address() and use it. ! * config/rs6000/rs6000.c: Update all callers. ! (rs6000_legitimate_address): New function. ! ! 2001-05-17 Mark Kettenis ! ! * dwarf2out.c (modified_type_die): Equate qualified type to die. ! ! 2001-05-17 Mark Mitchell ! ! * doc/install.texi: Update Solaris information. ! ! * except.h (protect_cleanup_actions): Remove it. ! (lang_protect_cleanup_actions): Declare it. ! * except.c (protect_cleanup_actions): Remove it. ! (lang_protect_cleanup_actions): New variable. ! (init_eh): Don't make protect_cleanup_actions a GC root. ! (expand_eh_region_and_cleanup): Call ! lang_protect_cleanup_actions. ! (output_function_exception_table): Remove unused `align' ! variable. ! * varasm.c (assemble_external): Abort if we have not yet ! opened the assembly output file. ! Thu May 17 11:53:49 2001 Jeffrey A Law (law@cygnus.com) ! * pa.c (hppa_init_pic_save): No longer update last_parm_insn. ! * except.c (sjlj_emit_function_enter): Call assemble_external_libcall ! for eh_personality_libfunc. ! 2001-05-17 Bernd Schmidt ! * reload1.c (delete_output_reload): Call eliminate_regs on substed. ! (reload_as_needed): Call update_eliminable_offsets a bit later. ! * expr.c (protect_from_queue): Protect against subsequent calls to ! emit_queue. ! (expand_expr, case ADDR_EXPR): Prevent protect_from_queue from being ! too clever. ! 2001-05-17 Jeffrey Oldham ! * dbxout.c (dbxout_symbol_location): For CONCAT, skip types not ! COMPLEX_TYPE. ! 2001-05-17 Gerald Pfeifer ! * gccbug.in (CATEGORIES): Add "bootstrap". ! 2001-05-17 Bernd Schmidt ! * stmt.c (expand_asm_operands): For inout operands, make sure ! the substitution of '=' for '+' makes it into the rtl. ! 2001-05-17 Gerald Pfeifer ! * gcc.texi (gccbug): Refer to the web pages for detailed information ! on GNATS. ! 2001-05-16 Wolfgang Bangerth ! Bruce Korb ! * fixinc/inclhack.def(solaris27_mutex_init): Fix broken mutex ! initializer ! 2001-05-16 Zack Weinberg ! * assert.h: Removed. ! * libgcc-std.ver, sys-protos.h: Remove __eprintf. ! * libgcc2.c: Document that __eprintf exists for backward ! compatibility only. ! * configure.in: Correct commentary now assert.h does not exist. ! * configure: Regenerate. ! * Makefile.in: Delete INSTALL_ASSERT_H, assertdir, and all ! references to either. Delete install-assert-h target. Do not ! create $(assertdir) or $(gcc_tooldir) in mkinstalldirs target. ! Move _eprintf from LIB2FUNCS to LIB2FUNCS_ST; pass ! LIB2FUNCS_ST to mklibgcc. ! * cross-make: Don't set assertdir. ! * mklibgcc.in: Add support for LIB2FUNCS_ST. ! * config/t-freebsd, config/t-linux, config/t-linux-aout, ! config/t-netbsd, config/t-openbsd, config/t-rtems, config/x-linux, ! config/alpha/t-interix, config/i386/t-beos, config/i386/t-interix, ! config/mcore/t-mcore, config/mcore/t-mcore-pe: ! No need to set INSTALL_ASSERT_H. ! * fixinc/fixinc.dgux, fixinc/fixinc.interix, fixinc/fixinc.ptx, ! fixinc/fixinc.svr4, fixinc/fixinc.winnnt, fixinc/fixinc.wrap, ! fixinc/fixincl.sh: Don't install assert.h. ! 2001-05-16 Zack Weinberg ! * i386.md: Add two peepholes to clean up code generated by ! cmpstr* expanders. ! 2001-05-16 Richard Henderson ! * dwarf2asm.c (eh_data_format_name): Add names for "pointer size" ! variants of non-absolute encodings. ! * config/i386/i386.h (ASM_PREFERRED_EH_DATA_FORMAT): New. ! * libgcc-std.ver (_Unwind_Find_FDE, __register_frame_info_bases, ! __register_frame_info_table_bases): Export. ! Wed May 16 13:38:21 2001 Jeffrey A Law (law@cygnus.com) ! * pa32-regs.h (HARD_REGNO_MODE_OK): Allow TI/TFmode values in ! GPRs. ! 2001-05-16 Richard Henderson ! * except.c (eh_data_format_name): Move to ... ! * dwarf2asm.c: ... here. Use designated initializers if available. ! (dw2_asm_output_encoded_addr_rtx): Accept varargs commentary. ! * dwarf2asm.h: Update declarations. ! * dwarf2out.c (output_cfi) [DW_CFA_set_loc]: If for_eh, mind ! ASM_PREFERRED_EH_DATA_FORMAT. ! (output_call_frame_info): Likewise. Use 'L' augmentation for ! the LSDA encoding. ! * unwind-dw2-fde.h (struct fde_vector): New. ! (struct old_object): Rename from struct object. ! (struct object): New. ! (__register_frame_info_bases): Declare. ! (__register_frame_info_table_bases): Declare. ! (struct dwarf_fde): Remove explicit pc_begin/pc_range members. ! * unwind-dw2-fde.c (objects): Remove. ! (unseen_objects, seen_objects): New. ! (__register_frame_info_bases): New. ! (__register_frame_info): Use it. ! (__register_frame_info_table_bases): New. ! (__register_frame_info_table): Use it. ! (__deregister_frame_info): Rewrite for changed object struct. ! (base_from_object, get_cie_encoding, get_fde_encoding): New. ! (fde_unencoded_compare): Rename from fde_compare; uninline. ! (fde_single_encoding_compare, fde_mixed_encoding_compare): New. ! (start_fde_sort): Adjust for new definition of fde_vector. ! (fde_insert): Likewise. ! (end_fde_sort): Likewise. Select comparison function based ! on properties of the object. ! (fde_split): Take object and fde_compare_t arguments. ! (frame_heapsort, fde_merge): Likewise. ! (classify_object_over_fdes): Rename from count_fdes. Handle ! encoded pointers. Collect encoding, mixed_encoding, and pc_begin ! for the object. ! (add_fdes): Handle encoded pointers. ! (init_object): Rename from frame_init. Update for new struct object. ! (linear_search_fdes): Rename from search_fdes. Handle encoded ! pointers. ! (binary_search_unencoded_fdes): Broken out from _Unwind_Find_FDE. ! (binary_search_single_encoding_fdes): New. ! (binary_search_mixed_encoding_fdes): New. ! (search_object): New. ! (_Unwind_Find_FDE): Update for new struct object. Fill in ! the dwarf_eh_bases. ! * unwind-dw2.c: Include unwind-pe.h. Constify all pointers ! iterating over EH data. ! (_Unwind_FrameState): Remove saw_lsda, addr_encoding. Add ! fde_encoding, lsda_encoding. ! (read_uleb128, read_sleb128): Remove. ! (read_encoded_pointer): Remove. All callers use read_encoded_value. ! (extract_cie_info): Set lsda_encoding from 'L' augmentation. ! (uw_frame_state_for): Don't set bases.func. Handle encoded fde ! pointers. ! * unwind-pe.h: Add "struct" to _Unwind_Context references. ! 2001-05-16 Andreas Jaeger ! * Makefile.in (toplev.o): Add dependency on dwarf2asm.h. ! * toplev.c: Include dwarf2asm.h for prototype of ! dw2_output_indirect_constants. ! 2001-05-16 Richard Henderson ! 2001-03-08 Richard Henderson ! * configure.in (HAVE_AS_LEB128): New assembler check. ! * configure, config.in: Rebuilt. ! 2001-05-16 David Edelsohn ! * doc/install.texi: Update AIX information. ! * README.RS6000: Remove obsolete file. ! 2001-05-16 John David Anglin ! * pa-hpux10.h (THREAD_MODEL_SPEC): Define. ! 2001-05-16 Jakub Jelinek ! Nathan Sidwell ! * gcc.c (give_switch): Don't write before start of string. ! Always append suffix. ! 2001-05-16 Nathan Sidwell ! * cpplex.c (_cpp_lex_token, '/' case): Comments can't appear ! after stage3. ! 2001-05-16 Dean Wakerley ! * doc/install.texi: New file. Converted to texinfo from the HTML ! documentation in wwwdocs/htdocs/install. ! 2001-05-16 Gerald Pfeifer ! * README.ALTOS: Remove obsolete file. ! Tue May 15 22:12:41 2001 Jeffrey A Law (law@cygnus.com) ! * flow.c (life_analysis): After life analysis is complete, do ! an optional scan over insns looking for REG_LABEL notes that ! reference a deleted label. ! (propagate_block_delete_insn): Verify INOTE is a CODE_LABEL ! before peeking at LABEL_NUSES. ! 2001-05-15 Richard Henderson ! * unwind-sjlj.c (_Unwind_GetDataRelBase): New. ! (_Unwind_GetTextRelBase): New. ! 2001-05-15 Mark Mitchell ! * config/sparc/sol2.h (CPLUSPLUS_CPP_SPEC): Define. ! 2001-05-15 Loren J. Rittle ! * gthr-posix.h: Make additional pthread-* functions weak. ! 2001-05-14 Richard Henderson ! * configure.in (gcc_cv_as_eh_frame): New test. ! * config.in, configure: Rebuild. ! * gcc.c (init_spec): Honor USE_AS_TRADITIONAL_FORMAT. ! 2001-05-14 Andrew MacLeod ! * config/ia64/ia64.c (rtx_needs_barrier): Call rtx_needs_barrier ! for RETURNS as well. ! * config/ia64/lib1funcs.asm (__divtf3): Fix incorrect bits in ! extended precision divide. ! 2001-05-14 Andrew Haley ! * reload1.c (copy_eh_notes): New function. ! (emit_input_reload_insns): Call it. ! (emit_output_reload_insns): Call it. ! * emit-rtl.c (try_split): Copy EH notes to sequence. ! 2001-05-14 Richard Henderson ! 2001-04-12 Richard Henderson ! * Makefile.in (regmove.o): Depend on except.h. ! * regmove.c: Include it. ! Mon May 14 08:57:23 2001 Jeffrey A Law (law@cygnus.com) ! * config/pa/som.h (NM_FLAGS): Remove. ! (ASM_OUTPUT_FUNCTION_PREFIX): No longer truncate subspace names. ! (ASM_OUTPUT_SECTION_NAME): Remove. ! (MAKE_DECL_ONE_ONLY, ASM_WEAKEN_LABEL): Likewise. ! 2001-05-14 Mark Mitchell ! * regrename.c (regrename_optimize): Do not rename registers to ! leaf registers. ! 2001-05-14 Alexandre Oliva ! * rtl.texi (CALL_INSN_FUNCTION_USAGE): Note that (and when) it may ! contain MEMs. Remove useless distinction about clobbering ! registers. ! 2001-05-13 Richard Henderson ! 2001-03-28 Richard Henderson ! * config/rs6000/rs6000.h (EPILOGUE_USES): Use TARGET_AIX, ! not TARGET_TOC for special toc restore handling. ! * config/rs6000/rs6000.md (eh_return): Likewise. ! 2001-05-13 Alexandre Oliva ! * tm.texi (THREAD_MODEL_SPEC): Document it. ! * gcc.c (main): Use it. ! * config/rs6000/aix43.h (THREAD_MODEL_SPEC): Define it. ! * config/rs6000/aix51.h (THREAD_MODEL_SPEC): Likewise. ! 2001-05-13 Franz Sirl ! * rtl.h (SYMBOL_REF_WEAK): New macro. ! * rtlanal.h (rtx_addr_can_trap): Use it, a weak SYMBOL_REF can trap. ! * varasm.c (make_decl_rtl): Mark SYMBOL_REF weak if necessary. ! * rtl.texi (SYMBOL_REF_WEAK): Document it. ! * gcc.texi: Remove wrong description. ! 2001-05-13 Mark Mitchell ! * stringpool.c (xxx, yyy): Remove. ! (get_identifier): Don't set them. ! * Makefile.in (STAMP): New macro. ! Replace all uses of `touch' with $(STAMP). ! * fixinc/Makefile.in: Likewise. ! 2001-05-13 Kaveh R. Ghazi ! * i386.c (ix86_save_reg): Change `bool' parameter to `int'. ! 2001-05-12 Richard Henderson ! EH merge from mainline, continued. ! 2001-05-12 Richard Henderson ! * dwarf2asm.c (size_of_encoded_value): New function. ! * dwarf2asm.h: Declare it. ! * except.c (output_function_exception_table): Align the TType ! array only as wide as the encoding. ! 2001-05-11 Richard Henderson ! * defaults.h (ASM_PREFERRED_EH_DATA_FORMAT): New. ! * dwarf2asm.c (dw2_force_const_mem, dw2_output_indirect_constant_1, ! dw2_output_indirect_constants, dw2_asm_output_encoded_addr_rtx): New. ! * dwarf2asm.h (dw2_asm_output_encoded_addr_rtx): Prototype. ! (dw2_output_indirect_constants): Prototype. ! * dwarf2out.c (dwarf2out_begin_prologue): Generate ! current_function_func_begin_label if we'll need it for EH. Exit ! early for IA64_UNWIND_INFO. ! * except.c: Get DW_EH_PE_* defines from dwarf2.h. ! (eh_data_format_name): Update for indirect references. ! (output_function_exception_table): Care for IA64_UNWIND_INFO. ! Handle ASM_PREFERRED_EH_DATA_FORMAT. ! * except.h (MUST_USE_SJLJ_EXCEPTIONS): IA64_UNWIND_INFO needn't ! define HAVE_eh_return etc. ! * final.c (final_start_function): Always call dwarf2out_begin_prologue. ! (final_end_function): Don't call output_function_exception_table. ! * toplev.c (compile_file): Call dw2_output_indirect_constants. ! (rest_of_compilation): Invoke output_function_exception_table ! for ia64 before assemble_end_function. ! * tm.texi (ASM_PREFERRED_EH_DATA_FORMAT): Document. ! (ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX): Document. ! * unwind-dw2.c (_Unwind_GetTextRelBase, _Unwind_GetDataRelBase): New. ! * unwind.h: Declare them. ! * libgcc-std.ver: Export them. ! * unwind-pe.h: New file. ! * config/alpha/elf.h (ASM_PREFERRED_EH_DATA_FORMAT): New. ! * config/ia64/fde-glibc.c: Use "struct unw_table_entry" ! instead of "fde". ! (find_fde_for_dso): Extract DT_PLTGOT. ! (_Unwind_FindTableEntry): Rename from __ia64_find_fde; return ! the segment and gp as well. ! * config/ia64/frame-ia64.c: Remove file. ! * config/ia64/frame-ia64.h: Remove file. ! * config/ia64/unwind-ia64.c: New file. ! * config/ia64/unwind-ia64.h: New file. ! * config/ia64/ia64.h (ASM_OUTPUT_EH_CHAR): Remove. ! (ASM_OUTPUT_EH_SHORT, ASM_OUTPUT_EH_INT): Remove. ! (ASM_OUTPUT_EH_DOUBLE_INT): Remove. ! (ASM_PREFERRED_EH_DATA_FORMAT): New. ! (ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX): New. ! (IA64_UNWIND_INFO): Re-enable. ! (HANDLER_SECTION): Remove. ! (EH_RETURN_DATA_REGNO): New. ! * config/ia64/ia64.md (exception_receiver): Remove. ! * config/ia64/t-glibc (LIB2ADDEH): Re-enable. ! * config/ia64/t-ia64 (LIB2ADDEH): Re-enable. ! Mon May 7 09:30:14 2001 Jeffrey A Law (law@cygnus.com) ! * except.c (sjlj_mark_call_sites): Do not search for assignments to ! non-argumment registers that are mentioned in CALL_INSN_FUNCTION_USAGE. ! 2001-05-05 Richard Henderson ! * except.c (remove_fixup_regions): Adjust REG_EH_REGION notes ! to the parent of the fixup region. ! 2001-04-28 Jason Merrill ! * except.c (expand_eh_region_start): Don't start a new block. ! (expand_eh_region_end): Don't end a block. ! * stmt.c (expand_end_bindings): Don't end EH blocks. ! (expand_decl_cleanup): Starting an EH region won't change the block. ! (mark_block_as_eh_region, mark_block_as_not_eh_region): Lose. ! (is_eh_region): Lose. ! * tree.h: Adjust. ! 2001-04-27 Jeffrey Oldham ! * except.c (expand_eh_region_end_cleanup): word_mode, not Pmode. ! 2001-04-27 Jason Merrill ! * except.c (get_exception_filter): word_mode, not Pmode. ! 2001-04-26 Andrew Haley ! * except.c (expand_eh_region_end_cleanup): Force pending stack ! adjust before emitting label that branches around cleanup code. ! 2001-04-25 Richard Henderson ! * config/i386/i386.c (ix86_expand_epilogue): Properly compute size ! of registers to restore along non eh_return path. ! 2001-04-24 Jason Merrill ! * except.c (reachable_handlers): Step out one level from a RESX. ! * except.c (struct eh_region): Rename 'last' to 'resume'. ! (mark_eh_region, duplicate_eh_region_1): Adjust. ! (expand_eh_region_end_cleanup): Remember the jump, not the barrier. ! (build_post_landing_pads): Likewise. ! (expand_end_catch, expand_eh_region_end_allowed): Don't set it. ! (expand_eh_region_end_must_not_throw): Likewise. ! (connect_post_landing_pads): Thread (only) regions with non-deleted ! resume insns. ! * except.c (expand_eh_region_end_cleanup): Save the EH return data ! registers around the cleanup. ! (get_exception_filter): New fn. ! (finish_eh_generation): Use it. ! 2001-04-03 Richard Henderson ! * rtl.h (LCT_THROW): New. ! * calls.c (emit_library_call_value_1): Handle it. ! * except.c (connect_post_landing_pads): Use it. ! 2001-03-28 Richard Henderson ! * except.c: Rewrite entirely for IA-64 ABI exception handling. ! * except.h: Likewise. ! * Makefile.in (LIB2ADDEH): Mention unwind-dw2*.c ! (LIB2ADDEHDEP): New. ! (LIB2FUNCS_EH): Remove. ! (LIB2ADD): Remove LIB2ADDEH. ! (libgcc.mk): Pass LIB2ADDEHDEP, don't pass LIB2FUNCS_EH. ! (LIBGCC_DEPS): Use LIB2ADDEHDEP. ! (crt{begin,end}[S].o): Likewise. ! (except.o): Update includes. ! * mklibgcc.in: Remove LIB2FUNCS_EH, add LIB2ADDEH, LIB2ADDEHDEP. ! (libgcc2_c_dep): Use LIB2ADDEHDEP. ! * basic-block.h (struct basic_block_def): Remove eh_beg, eh_end. ! * bb-reorder.c (reorder_basic_blocks): Don't disable for EH. ! * builtins.def (BUILT_IN_EH_RETURN_DATA_REGNO): New. ! * builtins.c (expand_builtin): Implement it. ! [BUILT_IN_EH_RETURN]: Update for nr arguments change. ! * c-common.c (c_common_nodes_and_builtins): Declare it. ! * c-decl.c (init_decl_processing): Update __builtin_eh_return. ! * calls.c (libfunc_nothrow): Remove. ! (emit_library_call_value_1): Don't call it. ! * crtstuff.c: Include unwind-dw2-fde.h instead of frame.h. ! * dwarf2.h (dwarf_call_frame_info): Add dwarf2.1 elements. ! (DW_EH_PE_*): New defines for pointer encoding in .eh_frame. ! * dwarf2out.c (struct dw_fde_struct): Add uses_eh_lsda, funcdef_number. ! (current_funcdef_number): Globalize. ! (output_call_frame_info): Emit frame data if an lsda is needed. ! Generate augmentation for personality routine. Don't play with ! difference symbols. ! (dwarf2out_begin_prologue): Record funcdef_number. ! * dwarf2out.h (current_funcdef_number): Declare. ! * expr.c (expand_expr): Update for except.h name changes. ! Remove POPDCC_EXPR, POPDHC_EXPR. Add EXC_PTR_EXPR. ! * expr.h (LTI_throw, LTI_rethrow): Remove. ! (LTI_sjthrow, LTI_sjpopnthrow, LTI_terminate): Remove. ! (LTI_eh_rtime_match): Remove. ! (LTI_unwind_resume, LTI_eh_personality): Add. ! (LTI_unwind_sjlj_register, LTI_unwind_sjlj_unregister): Add. ! * final.c (final): Don't call check_exception_handler_labels, ! init_insn_eh_region, or free_insn_eh_region. ! (final_scan_insn): Always emit debug labels for ! NOTE_INSN_EH_REGION notes. ! * flow.c (entry_exit_blocks): Remove eh_beg, eh_end. ! (record_active_eh_regions): Remove. ! (count_basic_blocks): Check all instructions for REG_EH_REGION. ! Use can_throw_internal. ! (find_basic_blocks_1): Likewise. ! (move_stray_eh_region_notes): Remove. ! (find_label_refs): No eh_return_stub_label. ! (make_edges): Likewise. No init/free_eh_nesting_info. Handle RESX. ! (make_eh_edge): No eh_nest_info. Update for reachable_handlers ! changes. ! (delete_unreachable_blocks): Don't track deleted handlers. ! (flow_delete_block): Use maybe_remove_eh_handler. ! (delete_eh_regions): Remove. ! (merge_blocks): Don't check for eh region match. ! (mark_regs_live_at_end): Handle EH_RETURN_DATA_REGNO, ! EH_RETURN_STACKADJ_RTX, EH_RETURN_HANDLER_RTX. ! (init_propagate_block_info): Disable dead frame store optimization ! when current_function_calls_eh_return. ! (dump_bb): Don't print eh_beg, eh_end. ! * function.c (fixup_var_refs): No catch_clauses. ! (expand_function_end): Likewise. Call expand_eh_return before ! the return register use. Call sjlj_emit_function_exit_after. ! (expand_function_start): Force pseudo DECL_RESULT if sjlj exceptions. ! * function.h (struct function): Add calls_eh_return, uses_eh_lsda. ! * ifcvt.c (dead_or_predicable): Remove eh region check. ! * integrate.c (function_cannot_inline_p): Disallow __builtin_eh_return. ! Don't check for EH vs parameters. ! (expand_inline_function_eh_labelmap, eif_eh_map): Remove. ! (expand_inline_function): Call duplicate_eh_regions. ! (copy_insn_list): Don't handle NOTE_INSN_EH_REGION_BEG/END. ! (copy_insn_notes): Remap REG_EH_REGION notes. ! (copy_rtx_and_substitute): Remove SYMBOL_REF_NEED_ADJUST check. ! * jump.c (jump_optimize_1): Don't init/free_insn_eh_region, nor ! check_exception_handler_labels, nor exception_optimize. ! (find_cross_jump): No EH region check. ! * optabs.c (init_optabs): Update for changed eh libfuncs. ! * rtl.def (RESX): New. ! * rtl.h (SYMBOL_REF_NEED_ADJUST): Remove. ! * stmt.c (expand_decl_cleanup): Simplify using_eh_for_cleanups_p ! checks. Update for except.h name changes. ! (expand_cleanups): Likewise. ! (expand_dcc_cleanup, expand_dhc_cleanup): Remove. ! * toplev.c (dump_file_index, dump_file): Add .02.eh dump. ! (compile_file): Call init_eh before init_optabs. Don't ! output_exception_table here. ! (rest_of_compilation): Call convert_from_eh_region_ranges, ! convert_to_eh_region_ranges, output_function_exception_table. ! Don't emit_eh_context. ! * tree.def (POPDHC_EXPR, POPDCC_EXPR): Remove. ! (EXC_PTR_EXPR): New. ! * md.texi (eh_epilogue): Remove. ! (eh_return): Document. ! * tm.texi (EH_RETURN_DATA_REGNO): Document. ! (EH_RETURN_STACKADJ_RTX, EH_RETURN_HANDLER_RTX): Document. ! * eh-common.h: Remove file. ! * frame-dwarf2.c, frame.c, frame.h: Remove files. ! * libgcc2.c (L_eh): Remove. ! * unwind-dw2-fde.c: New file, largely copied from frame.c. ! * unwind-dw2-fde.h: New file. ! * unwind-dw2.c: New file, largely cribbed from frame-dwarf2.c. ! * unwind-sjlj.c, unwind.h, unwind.inc: New files. ! * libgcc-std.ver: Update for eh symbols. ! * config/alpha/alpha.c (alpha_sa_mask): Add EH_RETURN_DATA_REGNOs. ! (alpha_mark_machine_status): No eh_epilogue_sp_ofs ... ! (alpha_expand_epilogue): ... use EH_RETURN_STACKADJ_RTX instead. ! * config/alpha/alpha.h (machine_function): Remove eh_epilogue_sp_ofs. ! (EH_RETURN_DATA_REGNO): New. ! (EH_RETURN_STACKADJ_RTX, EH_RETURN_HANDLER_RTX): New. ! * config/alpha/alpha.md (eh_epilogue): Remove. ! (exception_receiver): Use $26 for ldgp input. ! * config/alpha/linux.h (MD_FALLBACK_FRAME_STATE_FOR): New. ! * config/i386/i386.c (general_no_elim_operand): Disallow virtual regs. ! (ix86_save_reg): If maybe_eh_return, true for EH_RETURN_DATA_REGNOs. ! True for pic register if current_function_calls_eh_return. ! (ix86_expand_epilogue): Change "emit_return" argument into "style". ! Handle eh_return requirements. ! * config/i386/i386.h (EH_RETURN_DATA_REGNO): New. ! (EH_RETURN_STACKADJ_RTX): New. ! * config/i386/i386.md (exception_receiver): Remove. ! (eh_return, eh_return_1): New. ! * config/i386/linux.h (MD_FALLBACK_FRAME_STATE_FOR): New. ! * config/rs6000/rs6000.c (rs6000_stack_info): Allocate space ! for eh_return data registers. ! (rs6000_emit_prologue): Save eh_return data registers. ! (rs6000_emit_epilogue): Force inline restores if eh_return. ! Restore eh_return data registers. Mind EH_RETURN_STACKADJ_RTX. ! * config/rs6000/rs6000.h (rs6000_stack_t): Add ehrd_offset. ! (EH_RETURN_DATA_REGNO, EH_RETURN_STACKADJ_RTX): New. ! (EPILOGUE_USES): True for TOC_REGISTER if calls_eh_return and ! the target uses one. ! * config/rs6000/rs6000.md (eh_epilogue, eh_reg_restore): Remove. ! (return_eh_si, return_eh_di): Remove. ! (eh_return): New, from corpse of eh_epilogue. ! (eh_set_lr_si, eh_set_lr_di): New. ! * config/sparc/sparc.c (eligible_for_epilogue_delay): False if ! current_function_calls_eh_return. ! (output_function_epilogue): Handle eh_return. ! * config/sparc/sparc.h (DOESNT_NEED_UNWINDER): Remove. ! (EH_RETURN_DATA_REGNO): New. ! (EH_RETURN_STACKADJ_RTX): New. ! (EH_RETURN_HANDLER_RTX): New. ! * config/sparc/sparc.md (call/short branch peepholes): Check ! can_throw_internal instead of in_same_eh_region. ! 2001-03-17 Richard Henderson ! * dwarf2out.c (queue_reg_save): New. ! (flush_queued_reg_saves, clobbers_queued_reg_save): New. ! (dwarf2out_frame_debug_expr): Call queue_reg_save instead of ! dwarf2out_reg_save. ! (dwarf2out_frame_debug): Call flush_queued_reg_saves when needed. ! (cfa, cfa_store, cfa_temp): Make static. ! * final.c (final_scan_insn): Always call dwarf2out_frame_debug. ! 2001-03-16 Richard Henderson ! * dwarf2asm.c (dw2_asm_output_data): Mask data to the output size. ! (dw2_asm_output_data_uleb128): Use space not tab after .uleb128. ! (dw2_asm_output_delta_uleb128): Likewise. ! (dw2_asm_output_delta_sleb128): Similarly. ! (dw2_asm_output_data_sleb128): Similarly. Print number in decimal. ! 2001-03-15 Richard Henderson ! * dwarf2asm.c (dw2_asm_output_offset): Use ASM_OUTPUT_DWARF_OFFSET ! if provided by the target. ! (dw2_asm_output_pcrel): Likewise with ASM_OUTPUT_DWARF_PCREL. ! (dw2_asm_output_addr): New. ! * dwarf2asm.h (dw2_asm_output_addr): Declare. ! * dwarf2out.c (output_cfi): Use it for program addresses. ! (output_call_frame_info, output_die): Likewise. ! (output_aranges, output_line_info): Likewise. ! 2001-03-06 Krister Walfridsson ! * dwarf2asm.c (dw2_asm_output_delta): Fix smallest_mode_for_size call. ! 2001-03-02 Richard Henderson ! * Makefile.in (OBJS): Add dwarf2asm.o. ! * dwarf2asm.c, dwarf2asm.h: New files. ! * dwarf2out.c (*): Use them. ! (size_of_uleb128, size_of_sleb128): Remove. ! (output_uleb128, output_sleb128): Remove. ! (UNALIGNED_SHORT_ASM_OP, UNALIGNED_INT_ASM_OP): Remove. ! (UNALIGNED_DOUBLE_INT_ASM_OP, ASM_BYTE_OP): Remove. ! (UNALIGNED_OFFSET_ASM_OP, UNALIGNED_WORD_ASM_OP): Remove. ! (FDE_LABEL, LINE_NUMBER_BEGIN_LABEL, LINE_NUMBER_END_LABEL): New. ! (ASM_OUTPUT_DWARF_DATA1, ASM_OUTPUT_DWARF_DELTA1): Remove. ! (ASM_OUTPUT_DWARF_DATA2, ASM_OUTPUT_DWARF_DELTA2): Remove. ! (ASM_OUTPUT_DWARF_DATA4, ASM_OUTPUT_DWARF_DELTA4): Remove. ! (ASM_OUTPUT_DWARF_DATA, ASM_OUTPUT_DWARF_DELTA): Remove. ! (ASM_OUTPUT_DWARF_ADDR, ASM_OUTPUT_DWARF_ADDR_DATA): Remove. ! (ASM_OUTPUT_DWARF_ADDR_DELTA, ASM_OUTPUT_DWARF_ADDR_CONST): Remove. ! (ASM_OUTPUT_DWARF_OFFSET4, ASM_OUTPUT_DWARF_OFFSET): Remove. ! (ASM_OUTPUT_DWARF_CONST_DOUBLE): Remove. ! (ASM_OUTPUT_DWARF_NSTRING, ASM_OUTPUT_DWARF_STRING): Remove. ! (dwarf2out_frame_debug): Remove unused variables. ! (output_loc_operands): Don't abort on 8 byte constants if ! host integers are wide enough. ! (output_symbolic_ref): Remove. ! (size_of_die): Don't assume 4 byte host integers. ! (output_line_info): Use ASM_GENERATE_INTERNAL_LABEL for begin ! and end labels. ! (add_const_value_attribute) [CONST_INT]: Verify we're not doing ! something stupid with HOST_WIDE_INT to long truncation. ! [CONST_DOUBLE]: Likewise. ! * config/arm/conix-elf.h (UNALIGNED_WORD_ASM_OP): Remove. ! (ASM_OUTPUT_DWARF2_ADDR_CONST, ASM_OUTPUT_DWARF_ADDR_CONST): Remove. ! * config/arm/unknown-elf.h: Likewise. ! * config/rs6000/aix.h (UNALIGNED_SHORT_ASM_OP): New. ! (UNALIGNED_INT_ASM_OP, UNALIGNED_DOUBLE_INT_ASM_OP): New. ! (ASM_OUTPUT_DWARF_ADDR_VAR, ASM_OUTPUT_DWARF_DELTA_VAR): Remove. ! (ASM_OUTPUT_DWARF_DELTA2, ASM_OUTPUT_DWARF_DELTA4): Remove. ! (ASM_OUTPUT_DWARF_DELTA, ASM_OUTPUT_DWARF_ADDR_DELTA): Remove. ! (ASM_OUTPUT_DWARF_ADDR, ASM_OUTPUT_DWARF_DATA4): Remove. ! (ASM_OUTPUT_DWARF_DATA2, ASM_OUTPUT_DWARF_OFFSET4): Remove. ! (ASM_OUTPUT_DWARF_OFFSET): Remove. ! * config/rs6000/sysv4.h (ASM_OUTPUT_DWARF_ADDR): Remove. ! * config/sparc/sp64-elf.h (UNALIGNED_DOUBLE_INT_ASM_OP): New. ! (UNALIGNED_LONGLONG_ASM_OP, ASM_OUTPUT_DWARF_ADDR): Remove. ! (ASM_OUTPUT_DWARF_ADDR_CONST, ASM_OUTPUT_DWARF_REF): Remove. ! Sat Feb 24 03:32:50 CET 2001 Jan Hubicka ! * i386.c (ix86_frame): New structure. ! (ix86_compute_frame_size): Kill. ! (ix86_compute_frame_layout): New. ! (ix86_save_reg): New. ! (ix86_can_use_return_insn_p): Use frame layout stuff. ! (ix86_expand_prologue): Likewise. ! (ix86_expand_epilogue): Likewise. ! (ix86_initial_elimination_offset): Likewise. ! (ix86_nsaved_regs): Use ix86_save_reg. ! (ix86_emit_save_regs): Likewise. ! 2001-05-12 Richard Henderson ! EH merge from mainline, parts 5 - 16. ! * regmove.c (perhaps_ends_bb_p): Use can_throw_internal to ! reduce false positives. ! (regmove_optimize): Disable if flag_non_call_exceptions. ! * stmt.c (expand_return): Remove always true predicate. ! (expand_decl_cleanup_no_eh): Remove dead code. ! * sched-deps.c (sched_analyze_insn): Consolidate scheduling ! barrier code. Add a scheduling barrier if a non-call insn ! can throw internally. ! * rtlanal.c (rtx_addr_can_trap_p): Virtual registers cannot trap. ! Auto-inc addresses trap only if their base register does. ! * except.c (can_throw_internal): Rename from can_throw. ! * except.h, resource.c: Update references. ! * integrate.c (copy_insn_list): Use returnjump_p. ! (copy_insn_notes): Recurse for CALL_PLACEHOLDER. ! * integrate.h (struct inline_remap): Add local_return_label. ! * integrate.c (expand_inline_function): Initialize it and emit ! it after copy_insn_notes. ! (copy_insn_list): Don't store local_return_label here. ! (copy_insn_notes): New function split out from copy_insn_list. ! * function.h (struct function): Move all boolean valued fields ! to single bit fields at the end of the struct. ! * flow.c (cleanup_cfg): Take no argument. ! * output.h, sibcall.c, toplev.c: Update all calls. ! * flow.c (tidy_fallthru_edges): Don't combine complex edges. ! (calculate_global_regs_live): Kill call-clobbered registers ! across exception edges. ! * reg-stack.c (convert_regs_1): Kill the entire target stack ! across non-call exception edges. ! * flags.h (flag_new_exceptions): Remove. ! * toplev.c: Don't set it. ! * final.c: Don't check it. ! * except.c: Provide stub definition. ! * combine.c (distribute_notes) [REG_EH_REGION]: If non-call ! exceptions, put the note on the trapping instruction. ! * Makefile.in (cs-tconfig.h): Copy USING_SJLJ_EXCEPTIONS ! value to target configuration header. ! * configure.in (CONFIG_SJLJ_EXCEPTIONS): New. ! * config.in, configure: Rebuild. ! * except.h (USING_SJLJ_EXCEPTIONS): New. Define based on ! configuration and target defines. ! (exceptions_via_longjmp): Remove. ! * dwarf2out.c, except.c, final.c, toplev.c, config/ia64/ia64.c: ! Use USING_SJLJ_EXCEPTIONS instead of exceptions_via_longjmp. ! 2001-05-12 Richard Henderson ! 2001-03-25 Kaveh R. Ghazi ! * mkconfig.sh (DEFINES): Handle entries with '='. ! 2001-03-22 Zack Weinberg ! * mkconfig.sh: Use a subshell with redirected stdout, ! instead of closing stdout and confusing commands that run ! afterward. Throw away output of cmp. ! 2001-03-22 Richard Henderson ! * mkconfig.sh: Include insn-flags.h. ! * Makefile.in (CONFIG_H): Include insn-flags.h. ! (lots of objects): Remove insn-codes.h and insn-flags.h. ! * alias.c, bb-reorder.c, calls.c, do-loop.c, flow.c, haifa-sched.c, ! integrate.c, jump.c, loop.c, predict.c, profile.c, reg-stack.c, ! regmove.c, reorg.c, a29k/a29k.c, alpha/alpha.c, arc/arc.c, arm/arm.c, ! avr/avr.c, clipper/clipper.c, convex/convex.c, d30v/d30v.c, ! dsp16xx/dsp16xx.c, fr30/fr30.c, h8300/h8300.c, i370/i370.c, ! i386/i386.c, i860/i860.c, ia64/ia64.c, m32r/m32r.c, m68hc11/m68hc11.c, ! m68k/m68k.c, m88k/m88k.c, mcore/mcore.c, mn10200/mn10200.c, ! mn10300/mn10300.c, ns32k/ns32k.c, pa/pa.c, pdp11/pdp11.c, ! pj/pj.c, romp/romp.c, rs6000/rs6000.c, sh/sh.c, sparc/sparc.c, ! v850/v850.c, vax/vax.c: ! Don't include insn-flags.h. ! * diagnostic.c, expr.h, reload.c, toplev.c: ! Don't include insn-codes.h. ! * builtins.c, combine.c, except.c, explow.c, expmed.c, expr.c, ! final.c, function.c, optabs.c, recog.c, reload1.c, stmt.c, ! c4x/c4x.c, i960/i960.c, mips/mips.c: ! Don't include insn-codes.h or insn-flags.h. ! * genemit.c, genopinit.c, genoutput.c: Don't include insn-codes.h ! or insn-flags.h in the generated code. ! * genflags.c (gen_proto): Use "struct rtx_def *" instead of "rtx". ! (main): Forward declare struct rtx_def. ! 2001-03-09 Zack Weinberg : ! * configure.in: Prune nonexistent files from build_xm_file, ! xm_file, and host_xm_file lists. Warn unless they're ! $cpu/xm-$cpu.h. ! Don't generate *config.h here. ! AC_SUBST all variables needed to generate *config.h. ! * mkconfig.sh: New helper script, from code removed from ! configure.in. ! * Makefile.in: Substitute in variables needed to generate *config.h. ! Stop lying about the dependencies contained in CONFIG_H and ! GCONFIG_H. ! (HCONFIG_H, TCONFIG_H, TM_P_H): New variables. ! (config.h, hconfig.h, tconfig.h, tm_p.h, cs-config.h, ! cs-hconfig.h, cs-tconfig.h, cs-tm_p.h): New rules. ! (all .o): Add dependencies on $(HCONFIG_H), $(TCONFIG_H), ! $(TM_P_H), etc. as appropriate. ! 2001-05-12 Richard Henderson ! EH merge from mainline, parts 1 - 4. ! * gthr-single.h (UNUSED): New. Distinguish between how C ! and C++ mark unused function arguments. Use throughout. ! * bb-reorder.c, dwarf2out.c, except.c, except.h, flow.c, ! jump.c, toplev.c: ! Rename asynchronous_exceptions to flag_non_call_exceptions. ! * except.h (flag_non_call_exceptions): Move ... ! * flags.h: ... here. ! * rtl.h (LCT_NORETURN): New. ! * calls.c (emit_library_call_value_1): Handle it. ! * function.c (expand_function_start): Set DECL_REGISTER on ! a pseudo used for DECL_RESULT. ! 2001-05-12 Neil Booth ! * cpplex.c (_cpp_lex_token): Ensure we warn at most once ! about files not ending in newlines. ! 2001-05-12 Alexandre Oliva ! * defaults.h (TARGET_PTRMEMFUNC_VBIT_LOCATION): Define. ! * tm.texi (TARGET_PRTMEMFUNC_VBIT_LOCATION): Document. ! 2001-05-11 Richard Henderson ! * config/ia64/ia64.c (group_barrier_needed_p): Don't allow ! calls and jumps to be bundled together. ! (ia64_reorg): Emit a break after a noreturn call that ends ! a function. ! * config/ia64/ia64.md (break_f): New. ! 2001-05-11 Jakub Jelinek ! * regmove.c (regmove_optimize): Suppress the optimization for ! unchanging destination register. Add comment above function. ! 2001-05-11 Mark Mitchell ! * loop.h (struct movables): Remove `num'. ! * loop.c (scan_loop): Don't set it. Use count_insns_in_loop. ! Adjust call to strength_reduce. ! (num_unmoved_movables): New function. ! (move_movables): Don't set movables->num. ! (strength_reduce): Compute the number of instructions in the loop ! here, rather than in the caller. ! (check_dbra_loop): Always clear reversible_mem_store if there ! are any memory sets. ! (loop_regs_scan): Don't count instructions here. ! (count_insn_in_loop): New function. ! * optabs.c (emit_libcall_block): Don't mark calls as CONST_CALL_P. ! 2001-05-10 David Edelsohn ! * expr.c (emit_push_insn): Convert PUSH_ROUNDING argument to ! bytes. Reported by Kazu Hirata . ! Thu May 10 18:23:11 2001 Jeffrey A Law (law@cygnus.com) ! * cse.c (cse_insn): Mostly remove first hunk of code which collapsed ! a computed jump into an unconditional jump. ! In second hunk of code for collapsing computed and conditional jumps ! into unconditional jumps, reemit the jump in additional cases. ! 2001-05-10 David Edelsohn ! * expr.c (emit_group_load): extract_bit_field requires a REG or ! MEM as an argument. ! 2001-05-10 Toon Moene ! * dwarf2out.c (mem_loc_descriptor): Do not pass constant pool ! contents for a SYMBOL_REF in case of floating point constants. ! 2001-05-09 Zack Weinberg ! * cppinit.c (cpp_post_options): Shut off macro expansion if ! -fpreprocessed. ! * cpplib.c (_cpp_handle_directive): If -fpreprocessed, accept ! IN_I directives only if the # is in column 1 and the directive ! name begins in column 2. ! * cppmain.c (scan_buffer): Insert a space between # and an ! identifier, when that identifier is a directive name. ! * tradcpp.c (struct file_buf): Add a pointer to the next entry ! in the header search path. ! (enum node_type): Add T_INCLUDE_NEXT. ! (directive_table): Add entry for include_next. ! (do_include_next): New function. ! (process_include): New routine, broken out of do_include. ! (finclude): Insert 'nhd' argument, to be copied into ! next_header_dir of the new buffer. ! (main): Adjust to match. ! * gsyslimits.h, limity.h: Un-indent #include_next. ! 2001-05-09 Joseph S. Myers ! * objc.texi: Move from ../libobjc/objc-features.texi. Adjust for ! inclusion as a chapter of the GCC manual. ! * gcc.texi: Include objc.texi. ! * fdl.texi: Use @unnumberedsec for the addendum. ! * Makefile.in ($(srcdir)/gcc.info, gcc.dvi): Update dependencies. ! 2001-05-07 John David Anglin ! * pa.md (interspace_jump): Revise comment. ! (builtin_longjmp): Block initial setup insns from delay slot of ! interspace branch. ! (builtin_setjmp_receiver): New expander to save and restore PIC ! register. ! * som.h (NM_FLAGS): Remove `-n' sort option. Revise comment. ! 2001-05-07 Mark Mitchell ! * gcc.texi: Remove references to CHILL. ! * invoke.texi: Likewise. ! * install.texi: Likewise. ! 2001-05-06 Zack Weinberg ! * Makefile.in (tradcpp0): Correct typo in dependency list. ! 2001-05-06 Andreas Jaeger ! * invoke.texi (Option Summary): Add -momit-leaf-frame-pointer ! (i386 Options): Document -momit-leaf-frame-pointer. ! Sun May 6 10:54:20 2001 Jim Wilson ! * dwarf2out.c (output_line_info): Fix typo. ! 2001-05-05 Richard Henderson ! * integrate.c (copy_insn_list): Substitute NOTE_EXPECTED_VALUE. ! 2001-05-05 Stephane Carrez ! * config/m68hc11/m68hc11.c (m68hc11_gen_movhi): Optimize moves ! between X and Y by using sequences of xgdx and xgdy. ! 2001-05-05 Stephane Carrez ! * config/m68hc11/m68hc11.md ("*logicalsi3_silshr16"): Use '?' instead ! of '!' for the 'D' alternative ('!' is too strong). ! ("*logicalsi3_silshl16"): Likewise. ! ("movstricthi"): Accept 'A' when 'd' constraint, remove spurious '+'. ! ("movstrictsi"): Remove spurious '+'. ! ("movstrictqi"): Don't accept 'A' and remove spurious '+'. ! ("tstqi_1", "*lshrqi3_const1"): Put 'm' constraint before 'd'. ! ("subqi3"): Disparage with '!' the 'x' and 'y' registers to avoid ! a reload to them. ! 2001-05-04 David Edelsohn ! * calls.c (store_one_arg): Don't divide align by BITS_PER_UNIT. ! 2001-05-04 Franz Sirl ! * config/rs6000/rs6000.md (ashldi3 splits): Guard with TARGET_POWERPC64. ! 2001-05-04 Stephane Carrez ! * config/m68hc11/m68hc11.md (lshrhi3_const1): Fix shift of ! soft register, use ror instead of rol. ! 2001-05-04 Stephane Carrez ! * config/m68hc11/m68hc11.c (m68hc11_check_z_replacement): Take ! into account pre/post increment decrement for 68HC12. ! Fix other problems in replacement and fix call to reg_mentioned_p. ! 2001-05-04 Stephane Carrez ! * config/m68hc11/larith.asm (L_regs_frame): New for _.frame. ! Put the soft registers in bss for 68HC12. ! (L_regs_d3_4): New for _.d3 and _.d4. ! (L_regs_d5_6): Likewise. ! (L_regs_d1_2): Likewise. ! * config/m68hc11/t-m68hc11-gas (T_CPPFLAGS): Compile new parts. ! 2001-05-04 Stephane Carrez ! * config/m68hc11/m68hc11.h (CPP_SPEC): Pass -D__HAVE_SHORT_DOUBLE__ ! to the pre-processor when -fshort-double is specified. ! * config/m68hc11/m68hc11.2 (CPP_SPEC): Likewise. ! 2001-05-04 Stephane Carrez ! * config/m68hc11/larith.asm (divmodhi4): Empty for 68HC12. ! (__mulsi3): Rewrite for 68HC12. ! * config/m68hc11/m68hc11.md (divmodhi4): Use idivs for 68HC12. ! Mark 'x' constraint with earlyclobber to prevent a ! RELOAD_FOR_OTHER_ADDRESS to go in it. ! (mulhi3_m68hc12): New pattern. ! (mulhi3_m68hc11): Rename of mulhi3. ! (mulhi3): New expand for 68HC12 optimisation. ! (umulhisi3, mulhisi3): New patterns for 68HC12. ! 2001-05-04 Stephane Carrez ! * config/m68hc11/m68hc11.md (*tbne, *tbeq): New patterns for 68HC12. ! (extendqisi2, extendqihi2, extendhisi2): Use sex for 68HC12. ! (uminqi3, umaxqi3, uminhi3, umaxhi3): New pattern for 68HC12. ! 2001-05-04 Stephane Carrez ! * config/m68hc11/m68hc11.h (CONST_COSTS): Make the cost of ! constants cheap after reload. ! * config/m68hc11/m68hc11.c (m68hc11_shift_cost): Shift by 16 and 32 ! are cheap. ! (m68hc11_rtx_costs): Cost of multiplication by 65536 is expensive ! so that gcc prefers a shift by 16. ! (m6811_cost, m6812_cost): Make the shift cheap compared to an add. ! 2001-05-04 Mark Elbrecht ! * config/i386/djgpp.h (CPP_PREDEFINES): Define __GO32__. ! (CPP_SPEC): Conditionally define MSDOS and GO32. ! (SUBTARGET_SWITCHES): Ignore -mbnu210 and -mno-bnu210. ! (SUBTARGET_OVERRIDE_OPTIONS): Warn that -mbnu210 and -mno-bnu210 are ! ignored. ! (SUPPORTS_WEAK, SUPPORTS_ONE_ONLY): Remove. ! 2001-05-04 Kaveh R. Ghazi ! * hash.c (hash_lookup): Likewise. ! * hash.h (hash_lookup): Likewise. ! * tlink.c (symbol_hash_lookup, demangled_hash_lookup): Likewise. ! 2001-05-03 David O'Brien ! * config/t-freebsd: Don't install "assert.h" in gcc. Compile ! crtbeginS.o and crtendS.o with PIC. ! 2001-05-03 Stephane Carrez ! * config/m68hc11/m68hc11.md ("bitcmpqi"): New pattern for bitb ! instruction. ! ("bitcmpqi2"): New pattern for bit-extract and test. ! ("bitcmphi"): New pattern for bitb/bita instructions. ! 2001-05-03 Stephane Carrez ! * config/m68hc11/m68hc11.h (STATIC_CHAIN_REGNUM): Use soft z register ! instead of _.d1. ! (INITIALIZE_TRAMPOLINE): Call it. ! (TRAMPOLINE_SIZE): Define according to 68HC11/68HC12. ! (TRAMPOLINE_TEMPLATE): Remove. ! * config/m68hc11/m68hc11.c (m68hc11_initialize_trampoline): New. ! * config/m68hc11/m68hc11-protos.h (m68hc11_initialize_trampoline): ! Declare. ! 2001-05-03 Joseph S. Myers ! * gccbug.in: Use a temporary directory when the mktemp command is ! not available. ! 2001-05-03 David Edelsohn ! * config/rs6000/aix51.h: Remove duplicate header file inclusion as ! reported by David O'Brien . ! 2001-05-03 Mark Mitchell ! * integrate.h (struct inline_remap): Add leaf_reg_map table. ! * integrate.c (expand_inline_function): Use xcalloc to allocate ! memory. ! (copy_rtx_and_substitute): Use the leaf_reg_map for leaf ! registers. ! 2001-05-02 Geoff Keating ! * config/rs6000/rs6000.md (ctrsi_internal1, ctrsi_internal2, ! ctrsi_internal3, ctrsi_internal4, ctrsi_internal5, ! ctrsi_internal6, ctrdi_internal1, ctrdi_internal2, ! ctrdi_internal3, ctrdi_internal4, ctrdi_internal5, ! ctrdi_internal6): In the short-branch case, this insn is only 4 ! bytes long. Reported by Reza Yazdani . ! * config/rs6000/rs6000.c (rs6000_float_const): Remove warning. ! (setup_incoming_varargs): Remove warning. ! * config/rs6000/rs6000.c (validate_condition_mode): When ! flag_fast_math, allow floating-point conditionals to be reversed. ! (rs6000_generate_compare): When flag_fast_math, don't generate ! cror operations for FP conditionals. ! 2001-05-02 Dale Johannesen ! * config/rs6000/rs6000.h (RS6000_ARG_SIZE): Remove unused NAMED ! parameter. ! (STRICT_ARGUMENT_NAMING): Define. ! * config/rs6000/rs6000.c (function_arg_advance, function_arg, ! function_arg_partial_nregs, setup_incoming_varargs): Remove ! args logic which depends on "named" now that STRICT_ARGUMENT_NAMING ! is defined. ! Wed May 2 13:09:36 2001 Richard Kenner ! * function.c (fixup_var_regs_1, case SUBREG): Use promoted mode ! for replacement. ! * expr.c (store_field): Do nothing except elaborate side-effects if ! zero-bit field. ! 2001-05-02 Nick Clifton ! * dwarf2out.c (mem_loc_descriptor): If a SYMBOL_REF is in the ! constant pool, use the pool's SYMBOL_REF instead. ! 2001-05-01 Per Bothner ! * expr.c (expand_expr): When compiling LABELED_BLOCK_EXPR, ! call do_pending_stack_adjust before emiting label. ! 2001-05-01 Mark Mitchell ! * extend.texi: Fix typo. ! 2001-05-01 Stan Shebs ! * objc/objc-act.c (build_module_descriptor): Clear DECL_CONTEXT ! of UOBJC_MODULES_decl. ! (generate_strings): Clear DECL_CONTEXT of new decl nodes. ! (generate_descriptor_table): Ditto. ! (generate_protocols): Ditto. ! (generate_protocol_list): Ditto. ! (generate_classref_translation_entry): Ditto. ! 2001-05-01 Jeffrey Oldham ! * ChangeLog (2001-02-21): Remove erroneous entry. ! * gcc.c (cc1_options): Add "-param". ! (DEFAULT_WORD_SWITCH_TAKES_ARG): Likewise. ! (option_map): Likewise. ! (display_help): Add "--param" to 'other' options. ! * invoke.texi (Optimize Options): Add documentation for `--param ! max-delay-slot-insn-search' and `--param ! max-delay-slot-live-search' and reorder --param section. ! * params.def: Modify initial comment. ! * params.h (param_info): Add `help' member. ! * toplev.c (lang_independent_params): Include `help' description. ! (display_help): Print --param parameters. ! (independent_decode_option): Fix typographical error. ! 2001-05-01 Nathan Sidwell ! * c-tree.texi (USING_STMT): Document. ! 2001-04-30 Mark Mitchell ! Richard Henderson ! * extend.texi: Improve documentation of volatile asms. ! 2001-04-30 Mark Mitchell ! * c-tree.texi: Fix thinko. ! * gcc.texi: Likewise. ! 2001-04-30 Richard Henderson ! * c-common.c (c_promoting_integer_type_p): New function, from the ! corpse of old macro. Properly promote too-small enumerations and ! booleans. Adjust all callers. ! * c-common.h (C_PROMOTING_INTEGER_TYPE_P): Remove. ! (c_promoting_integer_type_p): Declare. ! * c-decl.c: Adjust C_PROMOTING_INTEGER_TYPE_P invocations. ! * c-typeck.c: Likewise. ! (default_conversion): Remove now redundant boolean check. ! 2001-04-30 Jan Hubicka ! Richard Henderson ! * regmove.c (try_apply_stack_adjustment): Remove now redundant ! sanity checks. ! (combine_stack_adjustments_for_block): Don't combine stack ! allocation followed by deallocations. Handle grow-up stacks. ! 2001-04-30 Mark Mitchell ! * fdl.texi: New file. ! * c-tree.texi: Use the GFDL. ! * gcc.texi: Likewise. ! 2001-04-30 Stan Shebs ! * invoke.texi: Add a section documenting Objective-C options. ! 2001-04-30 Mark Mitchell ! * regmove.c (record_stack_memrefs): Catch all references to the ! stack pointer. ! 2001-04-30 John David Anglin ! * pa.c (hppa_init_pic_save): Update last_parm_insn after emitting ! pic save insn. ! 2001-04-30 Mark Mitchell ! * extend.texi (extended asm): Fix typo. ! Sat Apr 28 10:32:26 2001 Jeffrey A Law (law@cygnus.com) ! * flow.c (propagate_block_delete_insn): Handle deletion of ADDR_VEC ! and ADDR_DIFF_VEC insns when the proceeding CODE_LABEL was put ! into the constant pool. ! * jump.c (jump_optimize_1): Remove barrier successors after all ! the LABEL_NUSES counds have been computed. ! (delete_barrier_successors): When deleting a tablejump insn, also ! delete the jump table it uses. ! * varasm.c (force_const_mem): Set LABEL_PRESERVE_P when forcing a ! label into memory. ! 2001-04-28 Andreas Jaeger ! * invoke.texi: Use XX-bit instead of XXbit or XX bit where ! appropriate. ! * extend.texi: Likewise. ! 2001-04-28 Andreas Jaeger ! * md.texi: Use XX-bit instead of XXbit or XX bit where ! appropriate. ! 2001-04-28 Andreas Jaeger ! Richard Henderson ! * md.texi (Machine Constraints): Fix description of "A" for ! i386. ! 2001-04-27 Jeffrey Oldham ! * collect2.c (main): Add `-L' case to remove duplicate entries. ! (is_in_args): New function to check for a duplicate argument. ! * defaults.h (LINK_ELIMINATE_DUPLICATE_LDIRECTORIES): New macro. ! * tm.texi (LINK_ELIMINATE_DUPLICATE_LDIRECTORIES): New documentation. ! * config/mips/iris6.h (LINK_ELIMINATE_DUPLICATE_LDIRECTORIES): ! Define to be nonzero. ! Fri Apr 27 10:41:06 2001 Jeffrey A Law (law@cygnus.com) ! * tm.texi (TARGET_MEM_FUNCTIONS): Update text. ! 2001-04-26 Geoffrey Keating ! * config/sparc/sparc.md (movsf_no_f_insn): Add more alternatives ! common to other movsf patterns. Move up so that in future ! people who change the other patterns will change it too. ! (movsf_lo_sum): Allow even for soft-float; add appropriate ! constraints. ! (movsf_high): Likewise. ! (movsf_high+1): Allow even for soft-float. ! 2001-04-26 Mark Mitchell ! * invoke.texi: Document more C++ command-line options. ! 2001-04-26 H.J. Lu (hjl@gnu.org) ! * config.gcc (mips*-*-linux*): Add elfos.h to tm_file. ! * config/mips/ecoff.h (STARTFILE_SPEC): Undefine before ! define. ! * config/mips/elf64.h (MAX_OFILE_ALIGNMENT): Likewise. ! (ASM_OUTPUT_SECTION_NAME): Likewise. ! (ASM_WEAKEN_LABEL): Likewise. ! (UNIQUE_SECTION): Likewise. ! (ASM_OUTPUT_CONSTRUCTOR): Likewise. ! (ASM_OUTPUT_DESTRUCTOR): Likewise. ! * config/mips/elf.h (MAX_OFILE_ALIGNMENT): Likewise. ! (ASM_OUTPUT_SECTION_NAME): Likewise. ! (ASM_WEAKEN_LABEL): Likewise. ! (UNIQUE_SECTION): Likewise. ! (ASM_OUTPUT_CONSTRUCTOR): Likewise. ! (ASM_OUTPUT_DESTRUCTOR): Likewise. ! * config/mips/linux.h (HANDLE_SYSV_PRAGMA): Likewise. ! * config/mips/mips.h (DBX_CONTIN_LENGTH): Likewise. ! (ASM_FILE_START): Likewise. ! (ASM_OUTPUT_SOURCE_LINE): Likewise. ! (ASM_DECLARE_OBJECT_NAME): Likewise. ! (ASM_FILE_END): Likewise. ! (ASM_DECLARE_FUNCTION_NAME): Likewise. ! (ASM_OUTPUT_INTERNAL_LABEL): Likewise. ! (ASM_GENERATE_INTERNAL_LABEL): Likewise. ! (ASM_OUTPUT_CASE_LABEL): Likewise. ! (ASM_OUTPUT_SKIP): Likewise. ! (ASM_OUTPUT_ASCII): Likewise. ! (ASM_OUTPUT_IDENT): Likewise. ! (READONLY_DATA_SECTION): Likewise. ! (EXTRA_SECTIONS): Likewise. ! (EXTRA_SECTION_FUNCTIONS): Likewise. ! (SELECT_RTX_SECTION): Likewise. ! (SELECT_SECTION): Likewise. ! * config/mips/linux.h (INVOKE__main): Undefine. ! (CTOR_LIST_BEGIN): Likewise. ! (CTOR_LIST_END): Likewise. ! (DTOR_LIST_BEGIN): Likewise. ! (DTOR_LIST_END): Likewise. ! (SET_ASM_OP): Defined it to ".dummy". ! (ASM_OUTPUT_DEF): Defined. ! (ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL): Defined. ! 2001-04-26 Nathan Sidwell ! * c-lex.c (c_lex): Remove # from %o diagnostic formatting. ! 2001-04-26 Jakub Jelinek ! * config/i386/i386.h (CC1_CPU_SPEC): Fix deprecation warnings for ! -m386 and -m486. ! 2001-04-26 Alexandre Oliva ! * configure.in (configargs.h): Define thread_model. ! * configure: Rebuilt. ! * gcc.c (main): Print it with -v. ! 2001-04-25 Joseph S. Myers ! * invoke.texi: Document -Wmissing-braces, -dumpspecs, ! -dumpmachine, -dumpversion, -fmem-report and -ftime-report. ! * gcc.1: Regenerate. ! 2001-04-25 Rainer Orth ! * dwarfout.c (is_pseudo_reg, type_main_variant, is_tagged_type, ! is_redundant_typedef): Use static inline instead of inline static. ! Wed Apr 25 18:21:01 2001 Christopher Faylor ! * config/i386/cygwin.h: Move W32API search to LINK_SPEC to ensure that ! this directory is always searched. ! 2001-04-25 Jason Merrill ! * loop.c (try_swap_copy_prop): Go back to checking insn. ! 2001-04-25 Jakub Jelinek ! * config/i386/i386.c (ix86_expand_int_movcc): If overlap between ! out and comparison sequence has been detected, put result into ! proper temporary pseudo. ! 2001-04-24 Mark Mitchell ! * dwarf2out.c (dwarf2out_finish): Forcibly return to the data ! section after emitting information. ! 2001-04-24 Zack Weinberg ! * Makefile.in (LIB2FUNCS): Remove _varargs and __dummy. ! * libgcc-std.ver: Remove __builtin_saveregs, __dummy, and __empty. ! * libgcc2.c: Remove __dummy and __empty functions, and all ! code for __builtin_saveregs. ! * libgcc2.h: Don't prototype __builtin_saveregs, __dummy, or __empty. ! * config/i860/varargs.asm: New file - preserve i860 __builtin_saveregs ! for future reference. ! 2001-04-23 Joseph S. Myers ! * c-convert.c (convert): When converting to a BOOLEAN_TYPE, avoid ! passing nested NOP_EXPRs to fold. ! 2001-04-23 Mark Mitchell ! * dwarf2out.c (rtl_for_decl_location): Add comments. Abort ! if the decl is abstract. ! (add_bound_info): Don't try to get the location of an abstract ! declaration. ! 2001-04-22 Mark Mitchell ! * loop.c (loop_delete_insns): Add prototype. ! 2001-04-21 Mark Mitchell ! * flow.c (proagate_one_insn): Remove useless assignment. ! * jump.c (delete_insn): Tidy. ! * loop.c (try_copy_prop): When deleting an instruction with a ! REG_RETVAL note, delete the entire libcall sequence. ! (loop_delete_insns): New function. ! * unroll.c (initial_reg_note_copy): Copy INSN_LIST notes, even if ! we're not substituting into them yet. ! 2001-04-21 Kazu Hirata ! * config/h8300/h8300.c (general_operand_src): Fix a comment typo. ! * config/sparc/sparc.c (sparc_flat_eligible_for_epilogue_delay): ! Fix a comment typo. ! * config/i960/i960.c (signed_arith_operand): Likewise. ! * calls.c (expand_call): Fix a comment typo. ! Fri Apr 20 12:22:15 2001 Jeffrey A Law (law@cygnus.com) ! * config/pa/som.h (NM_FLAGS): Define. ! 2001-04-20 Bernd Schmidt ! * ia64.c (ia64_flag_schedule_insns2): New variable. ! (ia64_override_options): Initialize it. Clear ! flag_schedule_insns_after_reload. ! (ia64_reorg): Only do scheduling if ia64_flag_schedule_insns2. ! Thu Apr 19 19:12:57 2001 Jeffrey A Law (law@cygnus.com) ! * config/pa/pa-linux.h (CPLUSPLUS_CPP_SPEC): Undefine. ! * config/pa/pa.h (CPLUSPLuS_CPP_SPEC): Define. ! * config/pa/som.h (ASM_OUTPUT_FUNCTION_PREFIX): Truncate subspace ! name at 32 total characters. ! (ASM_OUTPUT_SECTION_NAME): Similarly. Also, only support placing ! functions in named sections -- data items can still go into unique ! sections, but they have normal names (ie $LIT$ and $DATA$). ! * config/pa/som.h (SUPPORTS_INIT_PRIORITY): SOM does not support ! INIT_PRIORITY. ! 2001-04-19 Mark Mitchell ! * toplev.h (struct lang_hooks): Allow decode_option to indicate ! that language-independent processing should not be done. ! * toplev.c (main): Adjust accordingly. ! * rtl.texi (jump_insn): Expand on JUMP_LABEL documentation. ! * loop.c (load_mems): Handle a NULL JUMP_LABEL for a JUMP_INSN. ! * mips.md (reload_outputdi): Require that operand0 be a ! general_operand. ! 2001-04-19 Jakub Jelinek ! * invoke.texi (-Wshadow): Clarify. ! 2001-04-18 Mark Mitchell - * loop.c (load_mems): Examine all the instructions in the loop - before concluding that all jumps branch to the first instruction - after the loop. ! Wed Apr 18 20:32:03 2001 Christopher Faylor ! * config/i386/xm-cygwin.h (CPP_SPEC): Fix typo. ! 2001-04-18 Jakub Jelinek ! * cpp.texi (-Wwhite-space): Remove. ! (-Wall): -Wall does not imply -Wwhite-space. ! 2001-04-17 Zack Weinberg ! * dbxout.c (dbxout_init): If DBX_OUTPUT_GCC_MARKER is defined, ! use it instead of blindly generating a .stabs. ! * xcoffout.h: Define DBX_OUTPUT_GCC_MARKER so we put the type ! in the right place. ! * xcoffout.c: Don't bother defining default for N_CATCH. ! (UNKNOWN_STAB): Use internal_error. ! (stab_to_sclass): Remove now-unnecessary aborts. ! Remove #if 0'ed case N_BROWS. Add #ifdef N_OPT block. ! Tue Apr 17 21:39:12 2001 Jeffrey A Law (law@cygnus.com) ! * jump.c (mark_all_labels): Canonicalize the tail recursion ! label attached to CALL_PLACEHOLDER insns. ! 2001-04-17 Loren J. Rittle ! * dbxout.c (N_OPT): Define if not available from ! 2001-04-17 John David Anglin ! * vax.h (PROMOTE_PROTOTYPES): Define for compatibility with system ! libraries and native K&R compilers. ! 2001-04-16 Kaveh R. Ghazi ! * c-typeck.c (convert_arguments): Don't check for width changes ! with -Wtraditional. ! * invoke.texi (-Wtraditional): Update documentation. ! 2001-04-16 Zack Weinberg ! * toplev.c (output_lang_identify): Delete. ! (compile_file): Don't call ASM_IDENTIFY_GCC or ASM_IDENTIFY_LANGUAGE. ! Don't generate gcc2_compiled. label. Don't emit a nop if profiling. ! If IDENT_ASM_OP is defined, emit an .ident "GCC (GNU) " ! after calling ASM_FILE_END. ! * dbxout.c (dbxout_init): Don't call ASM_IDENTIFY_GCC_AFTER_SOURCE. ! Instead, unconditionally emit an N_OPT stab with string equal ! to STABS_GCC_MARKER, which defaults to "gcc2_compiled." ! * defaults.h: Don't provide default for ASM_IDENTIFY_LANGUAGE. ! * config/dbxelf.h, config/freebsd.h, config/nextstep.h, ! config/psos.h, config/ptx4.h, config/1750a/1750a.h, ! config/alpha/alpha.h, config/alpha/elf.h, config/arc/arc.h, ! config/arm/aof.h, config/arm/coff.h, config/arm/elf.h, ! config/arm/linux-elf.h, config/avr/avr.h, config/d30v/d30v.h, ! config/dsp16xx/dsp16xx.h, config/h8300/h8300.h, ! config/i370/i370.h, config/i386/beos-elf.h, ! config/i386/osf1elf.h, config/i386/osfrose.h, ! config/ia64/sysv4.h, config/m68k/3b1.h, config/m68k/auxgas.h, ! config/m68k/crds.h, config/m68k/hp320.h, config/m68k/m68kv4.h, ! config/m68k/mot3300.h, config/m68k/news.h, config/m68k/sgs.h, ! config/m68k/tower-as.h, config/mcore/mcore-elf.h, ! config/mips/iris6.h, config/mips/osfrose.h, ! config/mips/sni-svr4.h, config/pa/som.h, config/pdp11/pdp11.h, ! config/sparc/sp64-elf.h: ! Delete definitions of any or all of: ASM_IDENTIFY_GCC, ! ASM_IDENTIFY_GCC_AFTER_SOURCE, and ASM_IDENTIFY_LANGUAGE. ! * config/elfos.h, config/freebsd.h, config/linux.h, ! config/alpha/elf.h, config/arm/linux-elf.h, config/i386/i386elf.h, ! config/i386/ptx4-i.h, config/mips/gnu.h, config/mips/linux.h, ! config/sparc/linux.h, config/sparc/linux64.h: Delete definitions ! of ASM_FILE_START which merely emit a .version directive. Delete ! definitions of ASM_FILE_END which merely emit an .ident directive. ! * config/avr/avr.h, config/vax/vax.h: Delete definition of ! ASM_IDENTIFY_GCC and move part of its logic into ! ASM_FILE_START. ! * config/i386/att.h, config/i386/gas.h, config/i386/linux.h, ! config/sparc/linux-aout.h: Don't emit .version directive in ! ASM_FILE_START. ! * config/i386/dgux.c, config/m88k/m88k.c, config/sh/sh.c ! (output_file_start): Correct comment. ! * config/i386/osfrose.h: Don't emit trailing .ident directive. ! * config/m68k/mot3300.h: Override STABS_GCC_MARKER to "gcc2_compiled%" ! to match gdb. ! * config/pa/lib2funcs.asm: Delete gcc_compiled. label. ! * config/rs6000/aix.h: Correct comment. ! * config/i386/i386afe.h: Delete. ! * config.gcc: Remove references to i386afe.h. ! * tm.texi: Delete documentation of ASM_IDENTIFY_GCC. The ! other macros deleted by this patch were undocumented. ! Mon Apr 16 08:02:14 2001 Jeffrey A Law (law@cygnus.com) ! * pa.md (reload_outdi): Operand 0 must be a non hard register. ! * pa.c (secondary_reload_class): SAR<->FP copies require a ! secondary register. ! * install.texi (mips-mips-bsd): Update list of functions ! required to include memmove. ! * tm.texi (TARGET_MEM_FUNCTIONS): Update list of implicitly ! used functions to include memmove. ! 2001-04-15 Mark Mitchell ! * c-dump.c (dequeue_and_dump): Don't look at DECL_ASSEMBLER_NAME ! if it is not set. ! 2001-04-15 Jim Wilson ! * function.c (expand_function_end): Handle PARALLEL real_decl_rtl. ! 2001-04-13 Jim Wilson ! * config/ia64/ia64.c (ia64_expand_epilogue): Emit alloc if sibcall_p. ! (first_instruction): New static variable. ! (rtx_needs_barrier): Return 1 for alloc. ! (init_insn_group_barriers): Set first_instruction. ! (rws_sum): Delete duplicate definition. ! (group_barrier_needed_p): Return 0 when first_instruction true. ! (safe_group_barrier_needed_p): Save and restore first_instruction ! around group_barrier_needed_p call. ! Fri Apr 13 21:33:59 2001 Loren J. Rittle ! * expr.h (enum libfunc_index): Add LTI_memmove. ! (memmove_libfunc): Define macro. ! * optabs.c (init_optabs): Initialize memmove_libfunc. ! * expr.c (expand_assignment): Use memmove_libfunc instead of ! memcpy_libfunc. ! 2001-04-13 Alan Modra ! * pa.h (GO_IF_LEGITIMATE_ADDRESS): Disallow PIC LO_SUM ! fp mode addresses. ! 2001-04-13 Franz Sirl ! * Makefile.in (CFLAGS, BOOT_CFLAGS): Partly revert 2000-10-27 patch. ! (stage1_build): Instead pass down STAGE1_CFLAGS here. Pass down ! MAKEINFO and MAKEINFOFLAGS too. ! (stage4_build): Correctly order -B flags. ! 2001-04-12 Jim Wilson ! * config/ia64/ia64.md (extendsfdf2, extendsftf2, extenddftf2): Simplify ! to just emit an fnorm. ! 2001-04-12 Mark Mitchell ! * invoke.texi: Document --param max-gcse-memory. ! 2001-04-12 kaz Kojima ! * sh.md (builtin_setjmp_receiver): New expander. ! 2001-04-12 Kelley Cook ! * config-lang.in (lang_dirs): Add in zlib. ! 2001-04-11 Mark Mitchell ! * dwarf2out.c (modified_type_die): Don't create new types here. ! * tree.h (get_qualified_type): New function. ! (build_qualified_type): Adjust comment. ! * tree.c (get_qualified_type): New function. ! (build_qualified_type): Use it. ! 2001-04-11 Kaveh R. Ghazi ! * cpp.texi (-Wtraditional): Update description. ! * invoke.texi (-Wtraditional): Likewise. ! 2001-04-11 Jim Wilson ! * config/ia64/ia64.h (FUNCTION_ARG_BOUNDARY): Return 128 if argument ! requires more than 64 bits of alignment. ! 2001-04-11 Neil Booth ! * cpplib.c (do_line): Sanity check iff enable checking. ! 2001-04-11 Mark Mitchell ! * Makefile.in (gcse.o): Depend on params.h. ! * gcse.c: Include params.h. ! (gcse_main): Don't do GCSE if doing so will take inordinate ! amounts of memory. ! * params.def (PARAM_MAX_GCSE_MEMORY): New parameter. ! * params.h (MAX_GCSE_MEMORY): New macro. ! 2001-04-11 Kaveh R. Ghazi ! * c-typeck.c (convert_arguments): -Wtraditional now activates ! -Wconversion warnings, except for changes in signed-ness. ! Detect complex<->int & int<->complex conversions as well. ! * invoke.texi (-Wtraditional): Document it. ! Wed Apr 4 00:28:23 2001 Rainer Orth ! * sparc/sol2-sld-64.h (STARTFILE_SPEC): Added missing blank. ! 2001-04-11 Jason Merrill ! * collect2.c (is_ctor_dtor): Always use '_' in the file fn names, ! not '.' or '$'. ! * tree.c (FILE_FUNCTION_FORMAT): Likewise. ! * varasm.c (CHKR_PREFIX): Likewise. ! 2001-04-11 Jakub Jelinek ! * cpplex.c (_cpp_lex_token): Only warn if -Wcomment. ! 2001-04-09 Franz Sirl ! * Makefile.in (LIB2FUNCS_STATIC_EXTRA): New macro. ! (LIB2ADD_ST): New macro, pass it to mklibgcc. ! * mklibgcc.in (libgcc2_st_objs): New variable, set it from LIB2ADD_ST. ! (libgcc_st_objs): New, set from libgcc2_st_objs. Use it for libgcc.a. ! * config/rs6000/t-ppccomm (LIB2FUNCS_STATIC_EXTRA): New macro. ! 2001-04-09 Neil Booth ! * configure.in: Add check for lstat. ! * configure, config.in: Regenerate. ! * cppinit.c (append_include_chain): Make empty path ".". ! * cpplib.c (do_line): Don't simplify #line paths. ! * cppfiles.c (remove_component_p): New function. ! (find_or_create_entry): Acknowledge stat () errors during ! path simplification. ! (handle_missing_header): Don't simplify paths. ! (_cpp_simplify_pathname): Don't simplify VMS paths. Return ! the empty path untouched. Don't leave a trailing '/'. ! Sun Apr 8 22:50:49 2001 Christopher Faylor ! * config/i386/xm-cygwin.h (GET_ENV_PATH_LIST): Eliminate obsolete ! function. Remove include of sys/cygwin.h. ! Sun Apr 8 22:20:27 2001 Christopher Faylor ! * config/i386/cygwin.h (STARTFILE_SPEC): search */lib/w32api by default. ! (CPP_SPEC): Always search */include/w32api for header files. ! (ASM_OUTPUT_SECTION_NAME): Avoid testing NULL DECL. ! (LINK_SPEC): Add "cyg" to the library search prefixes. ! 2001-04-08 Philip Blundell ! * config/arm/arm.h (ASM_OUTPUT_LABELREF): Use asm_fprintf. ! 2001-04-08 Neil Booth ! * cpperror.c (print_location): Don't special case . ! (_cpp_begin_message): Handle WARNING_SYSHDR the same as ! WARNING, but we don't check if we're in system headers. ! * cpphash.h (enum error_type): WARNING_SYSHDR: New. ! * cpplib.c (do_warning): Warn in system headers. ! (cpp_push_buffer): Give stdin buffers the name . ! 2001-04-07 Mumit Khan ! * mbchar.c: Include config.h first. ! 2001-04-07 Herman A.J. ten Brugge ! * c4x.h (HARD_REGNO_NREGS): HCmode mode uses 2 regs not 4. ! 2001-04-05 Benjamin Kosnik ! * cppdefault.c (GPLUSPLUS_BACKWARD_INCLUDE_DIR): Add. ! * Makefile.in (-DGPLUSPLUS_BACKWARD_INCLUDE_DIR): Add. ! 2001-04-05 Bernd Schmidt ! * config/ia64/ia64.c (rtx_needs_barrier): PARALLELs can contain ! ASM_OPERANDS. ! 2001-04-05 Herman A.J. ten Brugge ! * emit-rtl.c (mark_label_nuses) Increment the label uses for ! all labels present in rtx. ! (try_split) Call new function for all split insns. ! 2001-04-05 Neil Booth ! * cppfiles.c (open_file): Fail directories silently, but ! with an errno of NOENT set. ! (read_include_file): Move the common exit code to the sole ! caller. Return an int indicating success or failure. Let ! open_file handle directories. ! (stack_include_file): If read_include_file fails, ! push a "null" buffer. ! 2001-04-04 Diego Novillo ! * simplify-rtx.c (simplify_binary_operation): Check for overflow ! when folding integer division and modulo operations. ! 2001-04-04 Jakub Jelinek ! * gcse.c (delete_null_pointer_checks_1): Add delete_list argument, ! push insns to delete to it instead of deleting them. ! (delete_null_pointer_checks): Delete insns from delete_list after ! all delete_null_pointer_checks_1 passes are done. ! 2001-04-03 Alexandre Oliva ! * configure.in (target_subdir): Use target_alias, not target. ! * configure: Rebuilt. ! * config/sh/crtn.asm (init, fini): Restore r15 from r14, not the ! other way round. ! * config/sh/crti.asm: Fix typos in comments. ! 2001-04-03 Alan Modra ! * dwarf2out.c (dwarf2out_frame_debug_expr): Move errant HIGH and ! LO_SUM cases to where they belong. ! 2001-04-02 Jakub Jelinek ! * ifcvt.c (noce_emit_move_insn): New. ! (noce_try_store_flag, noce_try_store_flag_constants, ! noce_try_store_flag_inc, noce_try_store_flag_mask, ! noce_try_cmove, noce_try_cmove_arith): Use it. ! (noce_process_if_block): Likewise. ! For STRICT_LOW_PART, take mode from its SUBREG. ! 2001-04-02 Jakub Jelinek ! * fold-const.c (fold): Before optimizing unsigned comparison with ! 0x7fffffffU, make sure arg0 is integral type. ! 2001-04-02 Joseph S. Myers ! * c-tree.texi: Document representation of wide strings. ! 2001-03-31 Marek Michalkiewicz ! * config/avr/libgcc.S (__mulhi3): Correct tests to exit the loop ! when multiplier or multiplicand is zero. ! 2001-03-30 Bernd Schmidt ! * loop.c (load_mems): When generating a load from a pseudo, update ! REGNO_LAST_UID. ! * config/ia64/ia64.c (update_set_flags): New function, broken out of ! rtx_needs_barrier. ! (set_src_needs_barrier): Likewise. ! (rtx_needs_barrier): For SET case, use these two functions. Rework ! PARALLEL case to handle all inputs before all outputs. ! (emit_insn_group_barriers): Call init_insn_group_barriers only if we ! saw a label and no stop bit since then. ! (maybe_rotate, process_epilogue): Add prototypes. ! 2001-03-28 Jim Wilson ! * config/ia64/ia64.md (movtf): Change DImode to TFmode in calls to ! operand_subword. ! 2001-03-28 DJ Delorie ! * Makefile.in (stage1_build): Revert CFLAGS patch. ! 2001-03-28 John David Anglin ! * reload1.c (eliminate_regs): Don't abort on MEM USEs. ! 2001-03-27 Jim Wilson ! * final.c (final_scan_insn, case NOTE_INSN_BASIC_BLOCK): Call ! IA64_UNWIND_EMIT. ! * config/ia64/ia64.c (block_num, need_copy_state): New static vars. ! (process_epilogue): New static function. ! (process_set): Call process_epilogue instead of emitting .restore ! directly. ! (process_for_unwind_directive): Handle NOTE_INSN_BASIC_BLOCK. ! * flow.c (struct reg_cond_life_info): New fields orig_condition ! and stores. ! (init_propagate_block_info): Set new fields. ! (mark_regno_cond_dead): Set and use new fields. ! (flush_reg_cond_reg_1): Likewise. ! (and_reg_cond, case AND): Check for redundant AND conditions. ! (mark_used_reg): Delete unnecessary clears before freeing splay trees. ! Set new fields. ! 2001-03-27 Neil Booth ! * cppmacro.c (stringify_arg): Null terminate strings. ! 2001-03-27 Neil Booth ! * cppfiles.c: Update comments. ! (struct include_file): Remove "defined" memeber. ! (find_or_create_entry): Make a copy of the file name, and ! simplify it. ! (open_file): Update to ensure we use the simplified filename. ! (stack_include_file): Don't set search_from. ! (cpp_included): Don't simplify the path name here. ! (find_include_file): New prototype. Call search_from to ! get the start of the "" include chain. Don't simplify the ! filenames here. ! (_cpp_execute_include): New prototype. Move diagnostics to ! do_include_common. Update. ! (_cpp_pop_file_buffer): Don't set defined. ! (search_from): New prototype. Use the preprocessor's cwd ! for files included from the command line. ! (read_name_map): Don't simplify the pathname here. ! (stack_include_file): Only increase the include ! count if we actually process the file properly, as opposed ! to treating it as length zero. Only call read_include_file ! if not DO_NOT_REREAD. Handle the -H include file output here. ! (read_include_file): Remove now redundant DO_NOT_REREAD check. ! (cpp_included, find_include_file): Simplify pathnames after ! remapping them. If remapping, don't use the remapped file ! name's buffer as our scratch buffer. ! (cpp_pop_file_buffer): Replace the multiple include macro ! only if it isn't yet set. ! (read_name_map): Simplify remapped names when reading in. ! (remap_filename): Move code to code path that uses it. ! (_cpp_simplify_pathname): Return the input pointer. ! ! (NO_INCLUDE_PATH): New macro. ! (find_include_file): Decide here which part of the include ! chain to start the search. Complain about an empty include ! chain in all cases apart from an abolsute file name. ! (_cpp_execute_include): Don't choose the search chain here. ! Don't call handle_missing_include in the case of an empty ! include chain. ! (_cpp_compare_file_date): Don't choose the search chain here. ! ! (destroy_include_file_node): Rename destroy_node. ! (find_or_create_entry): New function. ! (open_file, _cpp_fake_include): Use it. ! (handle_missing_header): New function, broken out of ! _cpp_execute include. Don't segfault if there is no ! system or quoted path. ! (_cpp_execute_include): Use handle_missing_header. ! ! (INCLUDE_LEN_FUDGE, ENOMEM): Delete. ! (cpp_included, find_include_file): Update. ! (search_from): Use lbasename. ! (_cpp_execute_include): Don't make a null-terminated ! copy of the filename. Don't use CPP_PREV_BUFFER. Don't call ! strlen or strcpy; we already know the length. ! (_cpp_compare_file_date): Similarly. ! ! * cpphash.h: Update comments. ! (enum include_type): New. ! (struct buffer): Delete search from. New search_cached. ! (_cpp_execute_include): Update prototype. ! (struct cpp_reader): Delete done_initialising. ! (_cpp_simplify_pathname): Update prototype. ! (struct cpp_buffer): Delete actual_dir. New members ! search_from and dir. ! (struct cpp_reader): Remove actual_dirs. ! ! (struct include_file): Update. ! (stack_include_file): Use search_from. ! (cpp_included, find_include_file): Update. ! (cpp_execute_include): Update. ptr->name may not be ! null terminated. Use the new search_from member variable ! of cpp_buffer. ! (_cpp_compare_file_date): Similarly. ! (search_from): New function, similiar to actual_directory. ! (actual_directory): Delete. ! (remap_filename): Update. loc->name may not be null terminated. ! (struct file_name_list): Rename search_path. Update. ! ! * cppinit.c (do_includes): Use _cpp_execute_include. ! (cpp_start_read): Don't set done_initialising. ! (struct cpp_pending): Update for renamed objects. ! (append_include_chain, remove_dup_dir, remove_dup_dirs, ! merge_include_chains, cpp_destroy, cpp_start_read): Similarly. ! ! * cpplib.c (do_include_common): New function. ! (do_include, do_include_next, do_import): Use it. ! (do_include_next): Move the in-main-file diagnostic ! here from _cpp_execute_include. Behave like #include if ! we're in the main file. ! (_cpp_compare_file_date): Make else unconditional. ! (CPP_PREV_BUFFER): Delete. ! (glue_header_name): Null-terminate. ! (do_line): Don't leak memory. ! ! * cpplex.c (parse_string): Guarantee null-termination. ! (_cpp_equiv_toklists): Remove. ! ! * cpplib.h (BT_WEAK): Delete. ! (struct cpp_options): Update. ! ! * cppmain.c (cb_ident): Strings are now null-terminated. ! ! * mkdeps.c (deps_add_default_target): Use lbasename. ! ! 2001-03-27 Alan Modra ! ! * c-typeck.c (digest_init): Fold init expression. ! ! * except.c (eh_regs): Save results of build_pointer_type to a temp ! as FUNCTION_VALUE macro may evaluate its args multiple times. ! ! 2001-03-26 Mark Mitchell ! ! * c-common.h (DECL_NUM_STMTS): New macro. ! * c-decl.c (duplicate_decls): Copy DECL_NUM_STMTS, not ! DECL_FRAME_SIZE. ! (pushdecl): Likewise. ! * c-semantics.c (add_stmt): Update DECL_NUM_STMTS. ! * integrate.c (expand_inline_function): Don't check ! DECL_FRAME_SIZE. ! * print-tree.c (print_node): Don't print it. ! * toplev.c (rest_of_compilation): Don't try to inline when ! flag_no_inline is on. ! * tree.h (DECL_FRAME_SIZE): Remove. ! (tree_decl): Adjust accordingly. ! ! Mon Mar 26 15:59:57 CEST 2001 Jan Hubicka ! ! * i386.md (truncdfsf2_3, trunctfsf2_2): Change predicate to memory_operand. ! ! 2001-03-26 Jakub Jelinek ! ! * varasm.c (make_decl_rtl): Don't append var_labelno discriminator ! to variable names where DECL_NAME is different from ! DECL_ASSEMBLER_NAME. ! ! 2001-03-26 Jakub Jelinek ! ! * reg-stack.c (stack_result): Re-add 2001-03-14 changes which were ! lost during the 2001-03-14 lazy DECL_RTL commit. ! ! 2001-03-21 Jason Merrill ! ! * collect2.c (is_ctor_dtor): Always use '_' in the file fn names, ! not '.' or '$'. ! * tree.c (FILE_FUNCTION_FORMAT): Likewise. ! * varasm.c (CHKR_PREFIX): Likewise. ! ! 2001-03-25 Kazu Hirata ! ! * config/h8300/h8300.md (umodqi3): Output a tab instead of a ! space. ! (modqi3): Likewise. ! (umodhi3): Likewise. ! (modhi3): Likewise. ! ! 2001-03-23 Richard Henderson ! ! * config/mips/iris4.h (ASM_OUTPUT_ASCII): Rename local variables ! to avoid shadowing arguments. ! ! 2001-03-23 Jim Wilson ! ! * varasm.c (make_decl_rtl): Add TREE_PUBLIC check to abort test. ! (assemble_alias): Call make_decl_rtl. ! ! 2001-03-23 Bryce McKinlay ! ! * extend.texi: Document the "java_interface" attribute. ! ! 2001-03-22 Gordon Sadler ! ! * Makefile.in (stage1_build): Pass CFLAGS to stage1_build. ! ! 2001-03-22 Zack Weinberg ! ! * gcc.c, objc/lang-specs.h: Add zero initializer for cpp_spec field to ! all array elements. ! ! 2001-03-22 Brad Lucier ! ! * Makefile.in: Have splay-tree.o depend on $(GCONFIG_H). ! ! 2001-03-22 Joseph S. Myers ! ! * gcc.texi: Remove more obsolete documentation of bugs and ! installation problems. ! ! 2001-03-21 Kazu Hirata ! ! * config/h8300/h8300.md (movsi_h8300hs): Split the 2nd alternative ! into two parts. ! ! Wed Mar 21 14:27:11 2001 Richard Kenner ! ! * cse.c (find_comparison_args): Remove previous change. ! * ifcvt.c (noce_process_if_block): When moving an insn, remove any ! REG_EQUAL notes. ! ! * sdbout.c: #include ggc.h. ! (sdbout_init): Move to end of file. ! Call ggc_add_tree_root for anonymous_types. ! (sdbout_symbol): Use DECL_NAME for local, not DECL_ASSEMBLER_NAME. ! (sdbout_one_type): Use DECL_NAME for field name. ! * Makefile.in (sdbout.o): Show includes ggc.h. ! ! 2001-03-21 Jakub Jelinek ! ! * crtstuff.c (init_dummy): Use CRT_END_INIT_DUMMY if defined. ! Remove ia32 linux PIC kludge and move it... ! * config/i386/linux.h (CRT_END_INIT_DUMMY): ...here. ! ! 2001-03-20 DJ Delorie ! ! * Makefile.in (install-libgcc): Pass complete list of variables. ! (install-multilib): Ditto. ! ! 2001-03-20 Mark Mitchell ! ! * tree.c (set_decl_assembler_name): Set DECL_ASSEMBLER_NAME for ! variables that are TREE_PUBLIC, even if not TREE_STATIC. ! ! 2001-03-19 Mark Mitchell ! ! Compute DECL_ASSEMBLER_NAME lazily. ! * tree.h (DECL_ASSEMBLER_NAME): Compute it lazily. ! (DECL_ASSEMBLER_NAME_SET_P): New macro. ! (SET_DECL_ASSEMBLER_NAME): Likewise. ! (COPY_DECL_ASSEMBLER_NAME): Likewise. ! (set_decl_assembler_name): Declare. ! (lang_set_decl_assembler_name): Likewise. ! * tree.c (lang_set_decl_assembler_name): New variab.e ! (set_decl_assembler_name): New function. ! (init_obstacks): Set lang_set_decl_assembler_name. ! (build_decl): Don't set DECL_ASSEMBLER_NAME. ! * c-decl.c (duplicate_decls): Use SET_DECL_ASSEMBLER_NAME, ! COPY_DECL_ASSEMBLER_NAME, etc. Don't set DECL_ASSEMBLER_NAME ! where it's not necessary. ! (builtin_function): Likewise. ! (finish_decl): Likewise. ! * dbxout.c (dbxout_type_methods): Likewise. ! * ggc-common.c (ggc_mark_trees): Likewise. ! * profile.c (output_func_start_profiler): Likewise. ! * varasm.c (make_decl_rtl): Likewise. ! ! * cse.c (find_comparison_args): Update documentation. Fix ! mishandling of COMPARE operations. ! ! * tree.def (ABS_EXPR): Add documentation. ! * fold-const.c (fold): Improve folding of ABS_EXPRs. ! ! 2001-03-20 Tom Tromey ! ! * libgcc-std.ver: Added __fixunssfsi and __fixunsdfsi. ! ! 2001-03-20 David Billinghurst ! ! * config/i386/cygwin.h: Declare ctor_section, dtor_section ! drectve_section, switch_to_section. ! ! * winnt.c: Declare functions associated_type, gen_stdcall_suffix, ! i386_pe_dllexport_p, i386_pe_dllimport_p, i386_pe_mark_dllexport, ! i386_pe_mark_dllimport. ! ! 2001-03-20 David Billinghurst ! ! * config/i386/cygwin.h: Include Declare and constify ! functions i386_pe_*. ! ! * config/i386/winnt.c: Include "tm_p.h" and "toplev.h" Constify ! i386_pe_* functions with char * arguments. ! ! 2001-03-20 Alexandre Oliva ! ! * config/sh/sh.md (movsf_ie): Fix output patterns for fpul load ! and store. ! (movsi_ie): Introduce fpul store. ! ! 2001-03-20 Alan Modra ! ! * Makefile.in (OBJS): Remove hashtab.o. ! ! 2001-03-19 Tom Tromey ! ! * gcc.c (init_gcc_specs): Fix comment. ! ! 2001-03-19 Mark Mitchell ! ! * cse.c (find_comparison_args): Update documentation. Fix ! mishandling of COMPARE operations. ! ! * tree.def (ABS_EXPR): Add documentation. ! * fold-const.c (fold): Improve folding of ABS_EXPRs. ! ! 2001-03-16 Andrew Haley ! ! * config/ia64/libgcc-ia64.ver: Add __ia64_backtrace. ! ! 2001-03-19 Gerald Pfeifer ! ! * README.X11: Remove obsolete file. ! ! 2001-03-18 Anthony Green ! ! * config/pj/pj.h: Remove some trailing commas. ! (ASM_SPEC): Use -EB and -EL, not -mb and -ml. ! ! 2001-03-17 Anthony Green ! ! * config/pj/lib1funcs.S: Fix broken comment. ! * config/pj/pj.h (LOCAL_LABEL_PREFIX): Prefix internal ! labels with '.'. ! ! 2001-03-18 Joseph S. Myers ! ! * gcc.texi: Remove obsolete information relating to build and ! installation problems with enquire or the Pyramid C compiler. ! ! 2001-03-16 Philip Blundell ! ! * config.gcc: Remove obsolete targets "arm*-*-linuxoldld" and ! "armv2-*-linux". ! * config/arm/linux-elf.h: Remove historical relics related to ! above configurations. ! * config/arm/linux-oldld.h: Delete. ! * config/arm/linux-elf26.h: Delete. ! ! 2001-03-17 Richard Henderson ! * dwarf2out.c (lookup_filename): Emit .file if the assembler ! is generating .debug_line. ! (dwarf2out_init): Add main_input_filename to the file table first. ! * configure.in (as_dwarf2_debug_line): Test with file number 1 ! instead of file number 0. ! * dwarf2out.c: Revert most of 2000-11-25 and 2001-01-24 changes. ! (LN_PROLOG_AS_LABEL, LN_PROLOG_END_LABEL): New. ! (size_of_line_prolog): Remove. ! (output_line_info): Compute prologue size via label difference. ! (lookup_filename): Return "unspecified" for and . ! * configure.in (HAVE_AS_DWARF2_DEBUG_LINE): Require that the ! assembler error when redefining file numbers. ! * config.in, configure: Rebuild. ! 2001-03-17 David Billinghurst ! * config/i386/xm-cygwin.h: Include ! * config/ia64/ia64.c (ia64_compute_frame_size): If reg_fp is zero, ! then set it to LOC_REG (79) instead of aborting. ! 2001-03-16 Laurynas Biveinis ! * fixinc/Makefile.in: Set SHELL. ! 2001-03-16 Laurynas Biveinis ! * fixinc/fixincl.c (fix_with_system): Quote file names before ! passing them to shell. ! 2001-03-16 Laurynas Biveinis ! * Makefile.in: Use fix-header$(build_exeext) instead ! of fix-header. ! Fri Mar 16 11:26:01 2001 Christopher Faylor ! * config/i386/cygwin.h: Revert previously misapplied patch which ! eliminated TARGET_SUBTARGET_DEFAULT. ! 2001-03-16 Alexandre Oliva ! * config/sh/sh.c (sh_expand_prologue): Insns that set up the PIC ! register may be dead. ! 2001-03-15 Mark Mitchell ! * dwarf2out.c (rtl_for_decl_location): Use DECL_RTL_IF_SET. ! 2001-03-16 Brad Lucier ! * Makefile.in (hash.o): Depend on CONFIG_H. ! 2001-03-16 Alexandre Oliva ! * cppfiles.c (stack_include_file): Use MAX of sysp. ! 2001-03-15 Steve Ellcey ! * config.gcc (ia64*-*-hpux*): New case. ! * config/ia64/hpux.h: New file for HP-UX support. ! * config/ia64/t-hpux: New file for HP-UX support. ! 2001-03-16 Bruce Korb , Alexandre Oliva ! * fixinc/inclhack.def (irix_stdio_va_list): New. ! * fixinc/fixincl.x: Rebuilt. ! 2001-03-15 Bruce Korb ! * gcc.c(main): make more rigorous ! * collect2.c(main): guard against ignoring SIGCHLD ! * protoize.c(main): ditto ! * gcc/fixinc/fixincl.c(initialize): ditto ! 2001-03-15 Mark Mitchell ! * sdbout.c (sdbout_symbol): Use DECL_RTL_SET_P, SET_DECL_RTL. ! (sdbout_parms): Likewise. ! Thu Mar 15 12:51:00 2001 Jeffrey A Law (law@cygnus.com) ! * reload1.c (reload_cse_simplify_set): For LOAD_EXTEND_OP, do not ! "widen" a destination that is already wider than a word. Also do ! not widen if LOAD_EXTEND_OP is NIL for the given mode. ! 2001-03-15 Zack Weinberg ! * config/xm-lynx.h, config/xm-std32.h, config/a29k/xm-a29k.h, ! config/a29k/xm-unix.h, config/alpha/xm-alpha.h, ! config/arc/xm-arc.h, config/arm/xm-arm.h, config/c4x/xm-c4x.h, ! config/clipper/xm-clix.h, config/convex/xm-convex.h, ! config/d30v/xm-d30v.h, config/dsp16xx/xm-dsp16xx.h, ! config/elxsi/xm-elxsi.h, config/fr30/xm-fr30.h, ! config/h8300/xm-h8300.h, config/i370/xm-i370.h, ! config/i370/xm-linux.h, config/i370/xm-mvs.h, ! config/i370/xm-oe.h, config/i386/xm-aix.h, ! config/i386/xm-i386.h, config/i386/xm-osf.h, ! config/i860/xm-i860.h, config/i960/xm-i960.h, ! config/ia64/xm-ia64.h, config/m32r/xm-m32r.h, ! config/m68k/xm-m68k.h, config/m88k/xm-m88k.h, ! config/mcore/xm-mcore.h, config/mips/xm-mips.h, ! config/mn10200/xm-mn10200.h, config/mn10300/xm-mn10300.h, ! config/ns32k/xm-ns32k.h, config/pa/xm-linux.h, ! config/pa/xm-pa.h, config/pa/xm-pa64hpux.h, ! config/pa/xm-pahpux.h, config/pa/xm-papro.h, ! config/pj/xm-pj.h, config/romp/xm-romp.h, ! config/rs6000/xm-beos.h, config/rs6000/xm-rs6000.h, ! config/rs6000/xm-sysv4.h, config/sh/xm-sh.h, ! config/sparc/xm-sparc.h, config/sparc/xm-sysv4.h, ! config/v850/xm-v850.h, config/vax/xm-vax.h, ! config/vax/xm-vms.h, config/we32k/xm-we32k.h: ! Do not define TRUE or FALSE. ! * config/i386/xm-aix.h, config/i386/xm-osf.h: Delete; made ! empty by above change. ! * config.gcc: Remove references to these files. ! * configure.in: Detect stdbool.h. ! * configure, config.in: Regenerate. ! * system.h: Include stddef.h here if available. Set ! HAVE__BOOL based on GCC_VERSION and __STDC_VERSION__. Then ! set up a sensible boolean type at the very end. ! * combine.c, cse.c, expr.c, fold-const.c, gensupport.c, ! config/mcore/mcore.c: Rename variables named 'true' ! and/or 'false'. ! * hash.h: Delete 'boolean' typedef and related #undefs. ! * function.c, ggc-common.c, hash.h, hash.c, tlink.c, ! Replace all uses of 'boolean' with 'bool'. ! 2001-03-15 Neil Booth ! David Billinghurst ! * config/mips/iris5.h: Change WCHAR_TYPE to int. ! 2001-03-15 Bernd Schmidt ! * simplify-rtx.c (hash_rtx): For REG and MEM, just use value of ! expression without adding in rtx code and mode. ! * alias.c (init_alias_analysis): Don't use any rtx whose value ! varies as a known value. ! Delete a superfluous test. ! 2001-03-15 Mark Mitchell ! * varasm.c (assemble_variable): Use DECL_RTL_SET_P. ! 2001-03-14 Mark Mitchell ! * varasm.c (assemble_alias): Use DECL_ASSEMBLER_NAME, not the ! contents of the RTL, to determine the name of the object. ! 2001-03-14 Laurynas Biveinis ! * configure.in: Use $gcc_cv_as instead of $as. ! * configure: Regenerated. ! Wed Mar 14 13:17:44 2001 Richard Kenner ! * alias.c (handled_component_p, can_address_p): New functions. ! (get_alias_set): Use them. ! 2001-03-14 Mark Mitchell ! * expr.c (expand_expr): Revove bogus conditional. ! 2001-03-14 Mark Mitchell ! * tree.h (DECL_RTL): Allocate RTL lazily. ! (SET_DECL_RTL): New macro. ! (DECL_RTL_SET_P): Likewise. ! (COPY_DECL_RTL): Likewise. ! (DECL_RTL_IF_SET): Likewise. ! * varasm.c (make_decl_rtl): Add assertions about the kind of ! declaration we are processing. ! * c-decl.c (duplicate_decls): Use COPY_DECL_RTL, DECL_RTL_SET_P, etc. ! (start_decl): Likewise. ! (finish_decl): Likewise. ! * c-semantics.c (emit_local_var): Likewise. ! * calls.c (expand_call): Likewise. ! * dbxout.c (dbxout_symbol): Likewise. ! * emit-rtl.c (unshare_all_rtl): Likewise. ! (unshare_all_decls): Likewise. ! (reset_used_decls): Likewise. ! * expr.c (store_constructor): Likewise. ! (safe_from_p): Likewise. ! (expand_expr): Likewise. ! * function.c (put_var_into_stack): Likewise. ! (instantiate_decls_1): Likewise. ! (assign_parms): Likewise. ! (expand_function_start): Likewise. ! (expand_function_end): Likewise. ! * ggc-common.c (gcc_mark_trees): Likewise. ! * integrate.c (function_cannot_inline_p): Likewise. ! (copy_decl_for_inlining): Likewise. ! (expand_inline_function): Likewise. ! (integrate_parm_decls): Likewise. ! (integrate_decl_tree): Likewise. ! * print-tree.c (print_node): Likewise. ! * reg-stack.c (stack_result): Likewise. ! * stmt.c (label_rtx): Likewise. ! (expand_return): Likewise. ! (expand_decl): Likewise. ! (expand_decl_cleanup): Likewise. ! (expand_anon_union_decl): Likewise. ! * toplev.c (check_global_declarations): Likewise. ! (rest_of_decl_compilation): Likewise. ! * tree.c (simple_cst_equal): Likewise. ! * objc/objc-act.c (generate_static_references): Likewise. ! 2001-03-14 Jakub Jelinek ! * reg-stack.c (stack_result): Unconditionally use ! FUNCTION_OUTGOING_VALUE resp. FUNCTION_VALUE. ! 2001-03-13 Jim Wilson ! * config/ia64/ia64.c (find_gr_spill): Subtract frame_pointer_needed ! from 80 in try_locals code. ! (ia64_expand_prologue): Add comment pointing to find_gr_spill change. ! 2001-03-13 Kaveh R. Ghazi ! * cpp.texi (poison): Explain the macro expansion exception. ! 2001-03-12 Neil Booth ! * cppinternals.texi: Update for file handling. ! Mon Mar 12 14:05:32 2001 Richard Kenner ! * flow.c (insn_dead_p): Don't consider two memrefs equivalent ! unless anti_dependence says they are. ! * alias.c (objects_must_conflict): If neither has a type specified, ! they must conflict. ! 2001-03-12 Aldy Hernandez ! * reload1.c (reload_cse_simplify): Call reload_cse_simplify_set ! before reload_cse_noop_set_p. ! Sat Mar 10 23:21:34 2001 kaz Kojima ! * config/sh/sh.h (LEGITIMATE_PIC_OPERAND_P): Defined. ! Sat Mar 10 23:16:16 2001 Toshiyasu Morita ! * config/sh/sh.md (umulhisi3_i, mulhisi3_i): Fix mnemonics. ! * config/sh/lib1funcs.asm (mulsi3): Convert mulu to mulu.w. ! Sat Mar 10 23:03:25 2001 Alexandre Oliva ! * tree.c (build_common_tree_nodes_2): Don't copy va_list_type_node ! if it's a record type. ! Sat Mar 10 17:52:54 2001 Christopher Faylor ! * config/i386/cygwin.h: Make ../w32api a system directory. Reorganize ! mingw includes slightly. ! Fri Mar 9 18:33:50 2001 Jeffrey A Law (law@cygnus.com) ! * pa.md (builtin_longjmp): Rework slightly to work for PA64 too. ! 2001-03-09 Nicola Pero ! * configure: Rebuilt. ! * configure.in: Only use `lang_requires' for languages athat are ! actually enabled. ! Thu Mar 8 23:34:42 2001 Jeffrey A Law (law@cygnus.com) ! * config/pa/som.h (MAKE_DECL_ONE_ONLY, ASM_WEAKEN_LABEL): Disable. ! Thu Mar 8 23:22:26 2001 John Wehle (john@feith.com) ! * rtlanal.c (rtx_varies_p): Check operand 0 of a ! LO_SUM unless for_alias is set. ! 2001-03-08 Bruce Korb ! gcc.c(main): ensure SIGCHLD handling is set to SIG_DFL so that ! wait4() can receive the signal. ! Thu Mar 8 21:09:10 2001 Rainer Orth ! * fixinc/inclhack.def (AAB_dgux_int_varargs): Don't use HTML ! entities. ! * fixinc/fixincl.x: Regenerate. ! Thu Mar 8 21:09:10 2001 Rainer Orth ! * fixinc/inclhack.def (AAA_standards): Undo breakage ! on Tru64 UNIX. ! * fixinc/fixincl.x: Regenerate. ! Thu Mar 8 19:42:08 CET 2001 Jan Hubicka ! * reg-stack.c (move_for_stack_reg): Avoid non-popint fst for ! TFmode too. ! Thu Mar 8 06:32:50 2001 Richard Kenner ! * config/i386/i386.md (clrstrsi): Call ix86_set_move_mem_attrs. ! 2001-03-08 Alexandre Oliva ! * configure.in (enable_shared): Support per-package shared-library ! enabling. ! * configure: Rebuilt. ! 2001-03-07 David Edelsohn ! * rs6000.md (cr logic): Add original POWER mnemonic alternative ! for crnot. Set operands[5] in splitter. ! 2001-03-07 Tom Tromey ! * configure: Rebuilt. ! * configure.in: Allow config-lang.in to set `lang_requires' to list ! of other required languages. ! 2001-03-07 Richard Henderson ! * config/alpha/alpha.md (call_osf_1_noreturn): New pattern. ! 2001-03-07 Laurynas Biveinis ! * fixinc/inclhack.def (djgpp_wchar_h): New test. ! * fixinc/fixincl.x: Regenerated. ! 2001-03-06 Richard Kenner ! * Restore change that patch misapplied. ! * config/i386/i386.c (ix86_set_move_mem_attrs): New function. ! (ix86_set_move_mem_attrs_1): Likewise. ! * config/i386/i386-protos.h (ix86_set_move_mem_attrs): New declaration. ! * config/i386/i386.md (movstrsi): Call it. ! 2001-03-06 Stephen L Moshier ! * config/m68k/m68k.c (const_uint32_operand): Accept any ! const_int on a 32-bit host. ! 2001-03-06 Zack Weinberg ! * c-parse.in (yylexname): New function, split out of _yylex. ! (objc_rid_sans_at): New table. ! (init_reswords): Initialize it. ! (_yylex): Give labels clearer names. Handle CPP_ATSIGN by ! retrieving the next token and checking it for significance as ! an ObjC keyword or string constant. ! * cpplex.c (_cpp_lex_token): Just return CPP_ATSIGN for '@'. ! * cpplib.h (TTYPE_TABLE): Add CPP_ATSIGN, drop CPP_OSTRING. ! * c-lex.c, c-parse.in, cppmacro.c, cpplex.c: Remove references ! to CPP_OSTRING. ! 2001-03-06 Nicola Pero ! * objc/objc-act.c (init_objc): Set save_lang_status, ! restore_lang_status, and mark_lang_status. ! 2001-03-06 Neil Booth ! * cppinternals.texi: Update. ! 2001-03-05 Brad Lucier ! * invoke.texi: Document __FAST_MATH__. ! 2001-03-04 John David Anglin ! * function.c (purge_addressof_1): Change type of function ! purge_addressof_1 from boolean to int. Change local variable ! `result' to int, and false and true to 0 and 1, respectively. ! 2001-03-04 Stephane Carrez ! * config/m68hc11/larith.asm (__mulqi3): Fix multiplication of two ! negative numbers. ! (___subdi3, ___adddi3): Use x instead of y as index register. ! (__init_bss_section, __map_data_section): Optimize for 68HC12. ! (__memset, __memcpy): Likewise. ! (regs): Put the soft registers in bss for 68HC12. ! (abort): Use trap to abort for 68hc12. ! (__mulhi3, __mulhi32): Use emul for 68hc12. ! (__mulsi3): Avoid to use the tmp soft register for 68hc12. ! 2001-03-04 Stephane Carrez ! * config/m68hc11/m68hc11.h (LIMIT_RELOAD_CLASS): Don't define. ! * config/m68hc11/m68hc11-protos.h (limit_reload_class): Remove. ! * config/m68hc11/m68hc11.c (limit_reload_class): Remove. ! (m68hc11_override_options): Remove setting of flag_no_nonansi_builtin. ! Set 68HC12 min offset to -65536. ! (print_operand): Put parenthesis arround the operand if it refers ! to a symbol having the same name as a register. ! (m68hc11_z_replacement): When z register is replaced by its ! equivalent soft register, force the insn to be re-recognized. ! (m68hc11_check_z_replacement): Fix the test when destination is ! the index register and z dies in the insn. ! (m68hc11_reorg): Remove the REG_DEAD notes beforce recomputing them. ! 2001-03-04 Stephane Carrez ! * config/m68hc11/m68hc11.c (m68hc11_override_options): Initialize ! costs according to processor variant. ! (m68hc11_shift_cost): New function to compute shift costs. ! (m68hc11_rtx_costs): Define costs according to processor variant. ! (m6811_cost): Costs for 68HC11. ! (m6812_cost): Costs for 68HC12. ! (COSTS_N_INSNS): Remove. ! * config/m68hc11/m68hc11.h (RTX_COSTS): New. ! (DEFAULT_RTX_COSTS): Remove. ! (CONST_COSTS): Define costs according to OUTER_CODE. ! (processor_costs): New struct to define costs. ! (m68hc11_cost): Pointer to current costs. ! 2001-03-04 Stephane Carrez ! * config/m68hc11/m68hc11.md (*addhi3_68hc12): Fix generation ! and use m68hc11_notice_keep_cc when using leax/leay. ! (addhi3 split): Reject split if the insn is handled by ! leax/leay above. ! * config/m68hc11/m68hc11.c (m68hc11_split_move): For 68HC12 the ! push must be handled in a special way if the source operand uses ! sp as index register. ! (m68hc11_notice_keep_cc): New function. ! (m68hc11_gen_movhi): Use it when an insn changes a register but ! not the flags. ! (m68hc11_gen_movqi): Fix move for 68HC12. ! * config/m68hc11/m68hc11-protos.h (m68hc11_notice_keep_cc): Declare. ! 2001-03-04 Stephane Carrez ! * config/m68hc11/m68hc11.c (m68hc11_emit_libcall): Use LCT_CONST ! and don't pass operands[0] to emit_library_call_value. ! 2001-03-04 Stephane Carrez ! * config/m68hc11/m68hc11.md (tsthi_1): Use cpd for 68HC12. ! (zero_extendsi split): Simplify and use (zero_extendhi). ! (*addhi3): Remove 'w' constraint since stack pointer is handled ! by (addhi3_sp). ! (*ashlhi3_2): Operand 2 is clobbered use '+' for its constraint. ! (*ashlhi3, *ashrhi3, *lshrhi3): Likewise. ! (*ashrhi3_const): Fix shift by 7. ! (*lshrsi3_const16): Fix template. ! (call, call_value): Fix constraint and predicate. ! 2001-03-04 Stephane Carrez ! * config/m68hc11/m68hc11.md (X_REGNUM, D_REGNUM): New constant. ! (Y_REGNUM, SP_REGNUM, PC_REGNUM, A_REGNUM, B_REGNUM): Likewise. ! (CC_REGNUM): Likewise. ! (*unnamed splits): Use above constants instead of hard coded numbers. ! (*adcq, *subcq, *addsi_carry, *rotlqi3_with_carry): Likewise. ! (*rotlhi3_with_carry, *rotrhi3_with_carry): Likewise. ! (*return_16bit, *unnamed peepholes): Likewise. ! 2001-03-03 Laurynas Biveinis ! * gcc.c (convert_filename): Append executable suffix ! if NO_AUTO_EXE_SUFFIX is not defined. ! * gcc.texi: Document NO_AUTO_EXE_SUFFIX. ! * config/i386/djgpp.h: Define NO_AUTO_EXE_SUFFIX. ! 2001-03-03 David O'Brien ! from 2000-09-06 Zack Weinberg ! * c-parse.gperf, c-gperf.h: Delete. ! (c-gperf.h was accidently re-added to the CVS repo in the rev 1.16 commit ! by tromey) ! 2001-03-03 John David Anglin ! * fixinc/fixlib.h (t_bool): Add identifier `t_bool' in typedef. ! * fixinc/server.c (read_pipe_timeout): Use enum t_bool instead of ! t_bool in declaration because pcc can't combine volatile with typedef ! types. ! 2001-03-03 Neil Booth ! * longlong.h (umul_ppmm): Don't use a multiline string. ! 2001-03-03 Neil Booth ! * cpplex.c (_cpp_lex_token): Don't warn about directives in ! macro arguments when looking for the '('. ! * cppmacro.c (funlike_invocation_p): Set parsing_args to ! 2 when really parsing arguments; 1 when looking for '('. ! Always restore the lexer position. ! 2001-03-03 Neil Booth ! * cpplex.c (parse_string): Unconditionally pedwarn. ! 2001-03-03 Neil Booth ! * cpp.texi: Update. ! * cppexp.c (parse_number): Update. ! * cpplex.c (parse_string): Pedwarn if multiline string does not ! result from a system header's macro. ! * cpplib.h (sys_objmacro_p): Rename sys_macro_p. ! * cppmacro.c (sys_objmacro_p): Rename sys_macro_p. Return true ! for function-like macros too. ! 2001-03-02 John David Anglin ! * print-rtl.c (print_rtx): Cast enums to int for comparison. ! * c-decl.c (grokdeclarator): Cast enums to int for comparison and ! shifts. ! * c-format.c (C_STD_VER): Cast to int for comparisons. ! (check_function_format): Cast various enums to int for &. ! (maybe_read_dollar_number): Likewise. ! (check_format_info): Likewise. ! (check_format_info_main): Likewise. ! * expr.c (emit_move_insn_1): Cast enums to unsigned int for comparison. ! (safe_from_p): Likewise. ! * varasm.c (const_hash): Cast enum to int for %. ! * emit-rtl.c (init_emit_once): Use int loop variable to work around ! pcc enum problems with < and ++ operators. ! * regclass.c (init_reg_sets_1): Cast enums for comparison. ! (choose_hard_reg_mode): Use unsigned int to iterate over CCmodes. ! (regclass_init): Change enum class to int to iterate over reg_classes. ! * genrecog.c (merge_trees): Cast enums for comparison. ! * rtl.h (GET_CODE): Cast to enum rtx_code. ! (PUT_CODE): Cast to ENUM_BITFIELD(rtx_code). ! (GET_MODE): Cast to enum machine_mode. ! (PUT_MODE): Cast to ENUM_BITFIELD(machine_mode). ! (GET_NOTE_INSN_NAME): Cast enum to int. ! * tree.h (TREE_CODE): Cast to enum tree_code. ! (TREE_SET_CODE): Cast VALUE to ENUM_BITFIELD(tree_code). ! * simplify-rtx.c (hash_rtx): Cast enums to unsigned unt. ! * timevar.c (timevar_print): Change loop variable id from enum to ! unsigned int. ! * fixinc/fixincl.c (VLEVEL): Cast enums in comparison to unsigned int. ! * config/i386/i386.md: Use PUT_MODE for mode assignment. ! * toplev.c (compile_file): Cast enum DFI to int. ! (decode_d_option): Likewise. ! Fri Mar 2 12:18:13 2001 Christopher Faylor ! * cppinit.c (append_include_chain): Mark "after" include file name list ! as a system directory. ! * cpp.texi: Document new behavior. ! 2001-03-01 Zack Weinberg ! * cpphash.h (struct cpp_reader): Add print_version field. ! * cppinit.c (cpp_handle_option): For -v, -version, and --version, ! just set print_version and other flags as appropriate. ! (cpp_post_options): Print version here if print_version is set. ! * toplev.c (exit_after_options): New flag. ! (independent_decode_option): Don't exit here; just set ! exit_after_options. ! (main): Exit after calling lang_hooks.post_options if ! exit_after_options is true. ! * cppinit.c (append_include_chain): Drop never-used case QUOTE. ! (merge_include_chains): Adjust comment to match code. ! 2001-03-01 Zack Weinberg ! * stringpool.c (set_identifier): New function. ! * tree.h: Prototype it. ! * c-parse.in: Kill D_YES. If compiled for objc, call ! save_and_forget_protocol_qualifiers from init_reswords. ! * objc/objc-act.c (remember_protocol_qualifiers, ! forget_protocol_qualifiers): Don't diddle C_IS_RESERVED_WORD. ! Swap out the non-keyword IDENTIFIER_NODEs for keyword ones, or ! vice versa. ! (save_and_forget_protocol_qualifiers): New function. ! * c-lex.h: Prototype save_and_forget_protocol_qualifiers. ! 2001-03-01 John David Anglin ! * cpplib.c (_cpp_init_stacks): Cast enum for comparison. ! * cppexp.c (lex): Cast enums for comparison. ! * cppinit.c (parse_option): Cast enum for comparison. ! * cpplex.c (cpp_spell_token): Cast enums to int for minus. ! (cpp_output_token): Likewise. ! (cpp_can_paste): Cast enums for comparsion and plus/minus. ! (cpp_avoid_paste): Cast enums for minus and comparison. ! 2001-02-23 Jeffrey Oldham ! * Makefile.in (resource.o): Add params.h dependence. ! * params.def (MAX_DELAY_SLOT_LIVE_SEARCH): New parameter. ! * params.h (MAX_DELAY_SLOT_LIVE_SEARCH): Likewise. ! * resource.c: Add dependence on params.h. ! (current_live_regs): Fix explanatory comment. ! (find_basic_block): Add new parameter to permit limiting search ! for a BARRIER. ! (mark_target_live_regs): Add new argument to find_basic_block call. ! (incr_ticks_for_insn): Likewise. ! 2001-02-21 Jeffrey Oldham ! * Makefile.in (reorg.o): Add params.h dependence. ! * params.def: Fix typographical error in comment. ! (MAX_DELAY_SLOT_INSN_SEARCH): New parameter. ! * params.h: Modify introductory comment. ! (MAX_DELAY_SLOT_INSN_SEARCH): New parameter. ! * reorg.c: Add dependence on params.h. ! (redundant_insn): Add parameterized throttle for search. ! (fill_simple_delay_slots): Add a comment explaining a variable. ! Move conditional out of loop, simplifying code. ! (fill_eager_delay_slots): Fix typographical error in comment. ! 2001-02-14 Jeffrey Oldham ! * Makefile.in (OBJS): Add params.o. ! 2001-02-14 Mark Mitchell ! * Makefile.in (toplev.o): Depend on params.h. ! (intergate.o): Likewise. ! (params.o): New target. ! * flags.h (inline_max_insns): Remove. ! * integrate.c: Include params.h. ! Use MAX_INLINE_INSNS instead of inline_max_insns. ! * params.c: New file. ! * params.h: Likewise. ! * params.def: Likewise. ! * toplev.c: Include params.h. ! (lang_independent_params): New variable. ! (decode_f_option): Use the param machinery instead of setting ! max_inline_insns. ! (independent_decode_option): Handle "--param name=value". ! (main): Register language-independent parameters. ! Thu Mar 1 09:44:15 2001 Jeffrey A Law (law@cygnus.com) ! * config/pa/som.h (ASM_IDENTIFY_GCC): Define. ! (ASM_IDENTIFY_GCC_AFTER_SOURCE): Likewise. ! * pa.c (emit_move_sequence): Verify operand0 is a hard register ! before determining its register class. ! 2001-03-01 Bernd Schmidt ! * config/ia64/ia64.c (ia64_hard_regno_rename_ok): Disallow renaming ! from reg 4 if current_function_calls_setjmp. ! (ia64_sched_reorder): Move code that rotates bundles up a bit. ! * reload1.c (eliminate_regs_in_insn): Restrict the special case ! code not to try to optimize adds with anything but a REG destination. ! * sched-int.h (struct haifa_insn_data): Add new member priority_known. ! (INSN_PRIORITY_KNOWN): New accessor macro. ! * haifa-sched.c (priority): Use it instead of testing priority against ! zero. ! 2001-02-28 Neil Booth ! * cppinit.c (builtin_array): Update. ! (init_builtins): Flag builtins to warn if redefined or ! undefined. Define __GXX_WEAK as a normal macro. ! * cpplib.c (do_undef): Warn if flagged NODE_WARN. ! * cpplib.h (NODE_WARN): New flag. ! * cppmacro.c (builtin_macro): Remove handling of __GXX_WEAK__. ! Handle __STDC__ as a builtin only on Solaris. ! (warn_of_redefinition): Renamed from check_macro_definition. ! Reverse sense of test. Always warn if NODE_WARN. ! (_cpp_create_definition): Use warn_of_redefinition. Flag ! any macro beginning with "__STDC_" to require a mandatory ! warning if redefined or undefined. ! * cppinit.c (set_lang): Move builtin handling to... ! (init_builtins): ...here. ! (_cpp_create_reader): Move call to set_lang. ! * cppfiles.c (stack_include_file): Generate dependencies ! here, and manage include_count here too. ! (PRINT_THIS_DEP): Delete. ! (_cpp_execute_include): Do not generate dependencies here, ! apart from the case of a missing header. Do not manage ! include_count. ! (_cpp_read_file): Leave dependency generation to ! stack_include_file. ! * cppexp.c (parse_number): Similarly. ! * cpplib.h (NODE_SYSHDR, cpp_sys_objmacro_p): New. ! * cppmacro.c (struct cpp_macro): New member node. ! (parse_args): Only warn about missing rest args if not ! a system macro. ! (funlike_invocation_p): Similarly for uninvoked funlike macros. ! (cpp_sys_objmacro_p): New. ! (_cpp_create_definition): Store the node with the macro defn. ! Remember if the macro is defined in a system header. ! 2001-02-28 Nathan Sidwell ! * extend.texi (Deprecated Features): Deprecate float and ! complex template constant parms. ! Tue Feb 27 16:45:00 2001 Jeffrey A Law (law@cygnus.com) ! * pa.c (override_options): Promote -fpic to -fPIC. ! (legitimize_pic_address): Simplify due to removal of ! small PIC as a code generation option. ! (secondary_reload_class): Similarly. ! * pa.h (GO_IF_LEGITIMATE_ADDRESS): Similarly. ! (PRINT_OPERAND_ADDRESS): Similarly. ! * pa.md (various patterns): Similarly. ! (small pic lo_sum pattern): Remove. ! 2001-02-27 Andreas Jaeger ! * configure.in: Document that --disable-checking is default. ! * configure: Regenerated. ! 2001-02-27 Mark Mitchell ! * configure.in: Make --disable-checking the default. ! * configure: Regenerated. ! 2001-02-26 Mark Mitchell ! Revert the two previous changes. ! Sun Feb 25 08:34:23 2001 Richard Kenner ! * config/i386/i386-protos.h (ix86_set_move_mem_attrs): Move decl. ! * config/i386/i386.c (ix86_set_move_mem_attrs_1): Fix typo. ! * config/i386/i386.md (movstrsi): Handle FAIL case. ! Sat Feb 24 20:25:29 2001 Richard Kenner ! * config/i386/i386.c (ix86_set_move_mem_attrs): New function. ! (ix86_set_move_mem_attrs_1): Likewise. ! * config/i386/i386-protos.h (ix86_set_move_mem_attrs): New declaration. ! * config/i386/i386.md (movstrsi): Call it. ! 2001-02-24 Franz Sirl ! * loop.c (check_dbra_loop): A biv has uses besides counting if it is ! used to set another biv. ! Sat Feb 24 06:45:21 2001 Richard Kenner ! * errors.c (internal_error, trim_filename): New functions. ! (fancy_abort): Call internal_error. ! * errors.h (internal_error, trim_filename): New declarations. ! 2001-02-24 Alexandre Oliva ! * config/mn10300/mn10300.h (DBX_REGISTER_NUMBER): Reverted ! 2000-08-26's patch. ! (EXTRA_CONSTRAINT): Formatting changes. ! 2001-02-23 Kaveh R. Ghazi ! * rtl.c (rtl_check_failed_code2): Fix typo in last change. ! 2001-02-23 Per Bothner ! * gcc.c (record_temp_file, pfatal_with_name, error): Make non-static, ! so they can be called from java/jvspec.c. ! * gcc.h (record_temp_file, pfatal_with_name, error): Declare. ! Fri Feb 23 15:28:39 2001 Richard Kenner ! * diagnostic.c (trim_filename): No longer static. ! * toplev.h (trim_filename): Declare. ! * rtl.c (rtl_check_failed_bounds): Call internal_error. ! (rtl_check_failed_type1, rtl_check_failed_type2): Likewise. ! (rtl_check_failed_code1, rtl_check_failed_code2): Likewise. ! (rtvec_check_failed_bounds): Likewise. ! * tree.c (tree_check_failed, tree_class_check_failed): Likewise. ! * convert.c (convert_to_integer): Don't do unsigned unless result or ! both inputs are unsigned. ! * fold-const.c (fold_convert): Don't call size_int_type_wide if ! input overflows. ! * c-decl.c (set_block): Set NAMES and BLOCKS from BLOCK. ! * varasm.c (output_constant): Recompute CODE after lang-specific fn. ! 2001-02-23 Jakub Jelinek ! * fold-const.c (extract_muldiv) [case PLUS_EXPR]: If not MULT_EXPR, ! check if either operand is divisible by C. ! (multiple_of_p): Handle LSHIFT_EXPR with small constant shift. ! If type is signed, consider negative numbers as well. ! 2001-02-22 Richard Henderson ! * config/ia64/crtbegin.asm (.fini): Use pc-relative relocs to ! reach .text instead of gp-relative relocs. ! * config/ia64/crtend.asm (.init): Likewise. ! 2001-02-22 Andreas Jaeger ! * extend.texi (C++ Attributes): Fix typo. ! 2001-02-21 David Mosberger ! * config/ia64/ia64.c (ia64_epilogue_uses): For syscall_linkage ! functions, drop current_function_args_info.words test. ! (ia64_compute_frame_size): Mark syscall_linkage functions as ! using eight input registers. ! 2001-02-21 Loren J. Rittle ! Bruce Korb ! * fixinc/inclhack.def (freebsd_gcc3_breakage): new fix ! * fixinc/README: Document how to convert sed substitutions ! to format style c_fix-es. ! * fixinc/fixincl.x: regen ! 2001-02-21 Bruce Korb ! Rodney Brown ! * fixinc/mkfixinc.sh: Use C fixincludes for UnixWare 7. ! * fixinc/inclhack.def: Add fixinc.svr4 patterns with matching ! machine restrictions ! * fixinc/fixincl.x: regen ! 2001-02-21 Neil Booth ! * cppfiles.c: Update comments. ! (_cpp_read_file): Don't check for NULL filenames any more. ! * cppinit.c (cpp_start_read): Don't do canonicalization of ! in_fname and out_fname. Use the passed file name exclusively. ! (_cpp_handle_options): Don't treat "-" as a command line option, ! but as a normal filename. ! (_cpp_post_options): Canonicalize in_fname and out_fname. ! * cppmain.c (printer_init): Don't check out_fname for NULL. ! * c-lex.c (orig_filename): Rename cpp_filename for clarity. ! (init_c_lex): Update, and use "" to represent stdin to CPP. ! (yyparse): Update. ! 2001-02-21 Kazu Hirata ! * config/h8300/h8300.md (iorsi3): Do not output an extra newline ! character. ! (xorsi3): Likewise. ! Wed Feb 21 19:16:26 CET 2001 Jan Hubicka ! * i386.md (mmx_lshrdi3, mmx_ashldi3): Guard by unspec. ! 2001-02-21 Jason Merrill ! * tree.h (DECL_UNINLINABLE): Move from C++ frontend. ! (struct tree_decl): Add uninlinable bitfield. ! * c-decl.c (duplicate_decls): Set it. ! * integrate.c (function_cannot_inline_p): Check it. ! * dwarf2out.c (add_name_and_src_coords_attributes): Don't add ! DW_AT_MIPS_linkage_name to abstract methods. ! (dwarf2out_abstract_function): Emit class context before calling ! set_decl_abstract_flags. Don't clear DECL_ABSTRACT. ! (gen_subprogram_die): Remove obsolete code. ! (gen_member_die): Don't include clones in the member list. ! (gen_decl_die): Emit abstract info for clone origin. ! * dwarfout.c (output_type): Don't include clones in the member list. ! * dbxout.c (dbxout_type_methods): Ignore abstract methods. ! * toplev.c (note_deferral_of_defined_inline_function): Don't clear ! DECL_ABSTRACT on a function that already has it set. ! * dwarf2out.c (gen_formal_types_die): Also accept a FUNCTION_DECL. ! (get_subprogram_die): Pass it in. ! 2001-02-21 Richard Earnshaw ! * flow.c (mark_set_1): Make not_dead unsigned long. For ! non-pseudos, use it as a bitmask of the hard regs that ! don't die. ! 2001-02-20 Will Cohen ! * config/pa/quadlib.c (_U_Qfcnvfxt_quad_to_usgl): New function. ! * config/pa/long_double.h (FIXUNS_TRUNCTFSI2_LIBCALL): Added. ! (INIT_TARGET_OPTABS): Use FIXUNS_TRUNCTFSI2_LIBCALL for ! fixunstfsi_libfunc. ! 2001-02-20 Mark Mitchell ! * stmt.c (expand_return): If an attempt is made to return the ! error_mar_node, treat the return like a return without a value. ! Mon Feb 19 20:24:50 2001 Jeffrey A Law (law@cygnus.com) ! * pa.c (move_operand): Accept code to load the address of a ! symbol out of the DLT as a valid move operand. ! (print_operand, case 'A'): New to handle generating a DLT ! reference for a LO_SUM expression. ! * pa.h (EXTRA_CONSTRAINT): Handle 'A' for DLT LO_SUM references. ! * pa.md (movsi, movdi patterns): Allow DLT LO_SUM references. ! 2001-02-19 Joseph S. Myers ! * README, cpp.texi, gcc.texi: Update version number to 3.0. ! * cpp.1, gcov.1, gcc.1: Regenerate. ! 2001-02-19 Richard Henderson ! * ifcvt.c (dead_or_predicable): Don't move code if eh regions ! would be disrupted. ! Mon Feb 19 10:11:53 2001 Jeffrey A Law (law@cygnus.com) ! * config.gcc (hppa*64*-*-hpux11*): Add MASK_GAS to ! target_cpu_default. Remove dead assignment to ! target_cpu_default. ! Mon Feb 19 16:46:56 CET 2001 Jan Hubicka ! * regclass.c (contains_reg_of_mode): Make global. ! (init_reg_sets): Remove contains_reg_of_mode; take into account ! CLASS_MAX_NREGS when looking for the proper mode. ! (dump_regclass): Dump only classes considered for the pseudo. ! (regclass): Use contains_reg_of_mode. ! Mon Feb 19 16:40:45 CET 2001 Jan Hubicka ! * gcc.c (do_spec_1): 'n' for printing notices. ! * i386.h (CC1_CPU_SPEC): Notice deprecated options as deprecated. ! Mon Feb 19 16:20:04 CET 2001 Jan Hubicka ! * reg-stack.c (next_flags_user): Use current_block->end ! (swap_rtx_condition): Look for next user if flags don't die; ! give up on CALL_INSNs; use current_block->end. ! 2001-02-17 Mark Mitchell ! * invoke.texi (-fsquangle): Remove documentation. ! (-fname-mangling-version): Likewise. ! 2001-02-18 Kazu Hirata ! * config/h8300/h8300.md: Update copyright. ! (andsi3): Do not output an extra newline character. ! Sun Feb 18 17:03:06 2001 Jeffrey A Law (law@cygnus.com) ! * Makefile.in (rtlanal.o): Depend on hard-reg-set.h. ! ($HOST_PREFIX_1)rtlanal.o: Remove rules for building ! (mostlyclean): Corresponding changes. ! * rtlanal.c (hard-reg-set.h): Include. ! (rtx_unstable_p): Do not treat the argument pointer specially ! if it is not a fixed register. ! (rtx_varies_p, rtx_addr_can_trap_p): Similarly. ! Sun Feb 18 15:45:17 2001 Richard Kenner ! * config/sparc/sparc.c (eligible_for_epilogue_delay): Don't put ! assignments from FP constants sonce 'Y' output code can't handle it. ! (eligible_for_sibcall_delay): Likewise. ! * invoke.texi (-I): Add note avoiding use for system header files. ! * final.c (output_operand_lossage): Use internal_error, not error. ! 2001-02-18 Shane Nay ! * mips.c (mips_expand_prologue) Add REG_MAYBE_DEAD to ! structure shift insns. ! 2001-02-18 Richard Henderson ! * config/alpha/alpha.md (movsi_fix): Fix typo in pattern name. ! * reload1.c (reload_cse_simplify_set): Fix typo. ! Sun Feb 18 09:30:09 2001 Richard Kenner ! * diagnostic.c (_fatal_insn): Decrement errorcount. ! 2001-02-18 Alan Modra ! * pa.c (hppa_expand_prologue): Simplify code storing return ! pointer. For large (>=8k) frames with a post_store, adjust stack ! pointer by 8k-64 first rather than by 64. When testing with ! VAL_14_BITS_P, always use the actual value rather than the value ! negated. Add blockage to prevent scheduling of spills before ! stack frame has been created. ! (hppa_expand_epilogue): Simplify code loading return pointer. ! Allow a slightly larger range for merge_sp_adjust_with_load case. ! When testing with VAL_14_BITS_P, always use the actual value. ! * pa.c (pa_adjust_insn_length): Check that block move ! pattern is a set before looking at operands. ! 2001-02-17 Mark Mitchell ! * fold-const.c (fold_binary_op_with_conditional_arg): New ! function, split out from ... ! (fold): ... here. ! * tree.def (COND_EXPR): Document the use of VOID_TYPE for ! conditional arms that throw exceptions. ! * print-tree.c (print_node): Do not use BLOCK_CHAIN when we're not ! looking at a BLOCK. ! 2001-02-18 Kaveh R. Ghazi ! * aclocal.m4 (gcc_AC_CHECK_DECL): Before attempting the test, ! define HAVE_DECL_* to 1 to mask potential backup declarations. ! * configure: Regenerated. ! 2001-02-17 Richard Henderson ! * reload1.c (reload_cse_simplify_set): Respect LOAD_EXTEND_OP ! when replacing a memory load with a register. ! 2001-02-17 Joseph S. Myers ! * gcc.texi, invoke.texi: Link to GCC 3.0 version of ! c99status.html. ! 2001-02-16 Richard Henderson ! DJ Delorie ! * jump.c (jump_optimize_1): When we delete a conditional jump ! preceeding a non-conditional jump to effectively the same place, ! make sure that the combined jump skips any clobber insns between ! the two labels. ! 2001-02-16 Jason Merrill ! * dwarf2out.c (add_bound_info): Don't crash if SAVE_EXPR_RTL is ! NULL. ! (gen_subprogram_die): Don't abort on seeing a second definition if ! the previous one was abstract. Don't replace an abstract instance ! in the lookup table. ! * dwarf2out.c (dwarf2out_abstract_function): Rename from ! gen_abstract_function. ! * dwarf2out.h: Declare it. ! * toplev.c (note_outlining_of_inline_function): New fn. ! * toplev.h: Declare it. ! * integrate.c (output_inline_function): Call it. ! * c-decl.c (duplicate_decls): Call it when redefining an extern ! inline. Don't inline the new defn. ! * tree.h (BLOCK_CHAIN): Use BLOCK_CHECK. ! 2001-02-16 Jakub Jelinek ! * objc/objc-act.c (start_class): Register implemented_classes with ! GC. ! 2001-02-16 Neil Booth ! * cppfiles.c (_cpp_make_system_header): Generate a file ! change callback. ! Thu Feb 15 21:30:26 2001 Richard Kenner ! * flow.c (tidy_fallthru_edge): Never end block on line number NOTE. ! * function.c (assign_parms): Set RTX_UNCHANGING_P in pseudo when we ! do in memory. ! 2001-02-15 Gerald Pfeifer ! * version.c: Bump to "3.0 20010215 (prerelease)". ! Thu Feb 15 15:15:29 2001 Alexandre Oliva ! * config/sh/sh.h (BOOL_TYPE_SIZE): Don't define. ! Thu Feb 15 00:20:31 CET 2001 Jan Hubicka ! * i386.h (RETURN_IN_MEMORY): Fix formating; reject TFmodes ! * invoke.texi (-mreg-alloc): Deprecate. ! 2001-02-14 Richard Henderson ! * toplev.c (f_options): Clarify -fschedule-insns2 documentation. ! Wed Feb 14 23:35:57 CET 2001 Jan Hubicka ! * regclass.c (init_reg_sets_1): Reinstall the optimization ! together with Matt Kraai's fix. ! 2001-02-14 Jeffrey Oldham ! * gcc.c (do_spec_1): Fix off-by-one error for '%M' case. ! 2001-02-14 Richard Henderson ! * regclass.c (init_reg_sets_1): Revert last change. ! 2001-02-14 Nathan Sidwell ! * extend.texi (Deprecated): Deprecate new initializer lists. ! 2001-02-14 Nathan Sidwell ! * mkdeps.c (deps_add_default_target): Robustify. Add ! basename component only. ! * cpp.texi (-M): Describe how default target is generated. ! * invoke.texi (-M): Likewise. ! 2001-02-13 Zack Weinberg ! * ggc-common.c (ggc_mark_rtx_children): No need to mark 'S' or ! 's' slots in RTXen. ! * ggc-page.c, ggc-simple.c (ggc_mark_if_gcable): Delete function. ! * ggc.h (ggc_mark_if_gcable): Delete prototype. ! Wed Feb 14 01:03:14 CET 2001 Jan Hubicka ! * regclass.c (init_reg_sets_1): Optimize calculation of move_cost ! arrays. ! Tue Feb 13 07:52:04 2001 Richard Kenner ! * config/sparc/sparc.c (function_value): Treat all non-record ! aggregate types like used to treat UNION_TYPE. ! 2001-02-13 Alexandre Oliva ! * combine.c (UWIDE_SHIFT_LEFT_BY_BITS_PER_WORD): New macro. ! (try_combine): Use it. ! 2001-02-13 Richard Henderson ! * sparc.md (cmp_cc_arith_op_set): Don't use match_dup on the ! entire operator; replicate that and match_dup the operands. ! (cmp_ccx_arith_op_set): Likewise. ! (cmp_cc_arith_op_not_set): Likewise. ! (cmp_ccx_arith_op_not_set): Likewise. ! 2001-02-12 Jakub Jelinek ! * c-common.c (constant_fits_type_p): New function. ! (convert_and_check): Use it. ! 2001-02-11 Mark Mitchell ! * Makefile.in (GXX_ABI_FLAG): Don't define. ! * configure.in (--enable-new-gxx-abi): Remove option. ! * config.in: Regenerated. ! * configure: Likewise. ! 2001-02-12 Alexandre Oliva ! * lcm.c (compute_earliest): Let EXIT_BLOCK be handled as a regular ! basic block. ! (optimize_mode_switching) [NORMAL_MODE]: Set up EXIT_BLOCK as a ! regular basic block, and arrange for all edges into it to switch ! to normal mode. ! 2001-02-11 Gerald Pfeifer ! * Makefile.in (distclean): Do not remove .gdbinit. ! 2001-02-11 Mark Mitchell ! * Makefile.in (gcc.o): Fix typos. ! (protize.o): Likewise. ! (unprotoize.o): Likewise. ! 2001-02-11 Richard Henderson ! * tree.c (build1): Check for null operand in last change. ! 2001-02-11 Richard Henderson ! * fold-const.c (split_tree): Don't assume a constant isn't splittable. ! (fold): Don't assume a constant isn't foldable. ! * tree.c (build): Set TREE_CONSTANT for an expression with no ! side-effects and constant operands. ! (build1): Likewise. ! 2001-02-10 Richard Henderson ! * jump.c (squeeze_notes): Revert 2000-05-12 change. ! 2001-02-10 Anthony Green ! * cpp.texi (Standard Predefined): Add documentation for ! __OPTIMIZE_SIZE__. ! * c-common.c (combine_strings): Improve warning message. ! 2001-02-10 Geoffrey Keating ! * config/rs6000/sysv4.h (LINK_TARGET_SPEC): Use two dashes for ! --oformat. ! * config/rs6000/sysv4le.h (LINK_TARGET_SPEC): Likewise. ! Fri Feb 9 15:05:27 2001 Christopher Faylor ! * config/i386/t-cygwin (T_CPPFLAGS): Use correct location for ! CYGWIN_CROSS_DIR. ! 2001-02-09 Alexandre Oliva ! * config/sh/sh.md (sibcalli, sibcalli_pcrel, sibcalli): Set ! fp_mode attribute. ! 2001-02-09 Nick Clifton ! * config/arm/arm.md: Change output contraint on post inc ! load/store multiple patterns to be a read/write contraint. ! 2001-02-09 Neil Booth ! * gcc.c (cpp_options): Delete .d files on error. Don't delete ! .o files when using the -M options. ! 2001-02-08 Franz Sirl ! David Edelsohn ! * config/rs6000/rs6000.c (output_toc): Allow 32-bit targets to ! handle DImode constants. Use one TOC entry for SImode and smaller ! constants, aligned properly. ! 2001-02-08 Jason Merrill ! * config/arm/arm.c (arm_expand_prologue): Do tell the dwarf2 backend ! about the SP adjustment for saving the static chain pointer. ! * dwarf2out.c (dwarf2out_frame_debug_expr): Use the specified ! offset when setting a temporary CFA register. ! 2001-02-08 Chandrakala Chavva ! * config.gcc : New targets, i386-*-chorusos*, sparc-*-chorusos*, ! powerpc-*-chorusos* . ! * config/rs6000/chorus.h : New file. ! * config/i386/chorus.h : New file. ! * config/sparc/chorus.h : New file. ! * config/sparc/t-chorus-elf : New file. ! 2001-02-08 David Edelsohn ! * config/rs6000/rs6000.h (ASM_OUTPUT_SYMBOL_REF): Move from here ... ! * config/rs6000/aix.h (ASM_OUTPUT_SYMBOL_REF): ... to here. ! * config/rs6000/aix51.h (CPLUSCPLUS_CPP_SPEC): Define it. ! (__WCHAR_TYPE__): Correct macro name. ! 2001-02-08 Richard Henderson ! * config/i386/i386.c (ix86_frame_pointer_required): New. ! (ix86_setup_frame_addresses): New. ! (struct machine_funciton): Add accesses_prev_frame. ! * config/i386/i386.h (FRAME_POINTER_REQUIRED): Call ! ix86_frame_pointer_required. ! (SUBTARGET_FRAME_POINTER_REQUIRED): New. ! (SETUP_FRAME_ADDRESSES): New. ! * config/i386/i386-protos.h: Update. ! * config/i386/sco5.h (SUBTARGET_FRAME_POINTER_REQUIRED): Rename ! from FRAME_POINTER_REQUIRED. ! * config/i386/svr3gas.h: Likewise. ! * config/i386/sysv3.h: Likewise. ! * config/i386/v3gas.h: Likewise. ! 2001-02-08 Richard Henderson ! * config/sparc/sparc.c (function_arg_record_value_3): Fix ! calculation of the number of integer registers required. ! (function_arg_record_value): Likewise. ! 2001-02-08 Jason Merrill ! * diagnostic.c (internal_error): Say "confused" after 1 error, not ! two. Print file and line with "confused" message. ! * dwarf2out.c (dwarf2out_line): Include filename in -dA output. ! Thu Feb 8 11:21:28 2001 Richard Kenner ! * rtlanal.c (remove_node_from_expr_list): Correctly update PREV. ! 2001-02-08 Bernd Schmidt ! * final.c (cleanup_subreg_operands): The address of a MEM can ! contain SUBREGs. ! * config/ia64/ia64.c (ia64_variable_issue): Call group_barrier_needed_p ! for asms, too. ! 2001-02-08 Joseph S. Myers ! * gcc.texi (Incompatibilities): Update documentation of ! preprocessing numbers. ! 2001-02-07 Jakub Jelinek ! * c-decl.c (finish_enum): Revert part of 2000-01-05 change. ! 2001-02-07 Mark Mitchell ! * config/rs6000/aix43.h (CPLUSCPLUS_CPP_SPEC): Define it. ! * defaults.h (CPLUSPLUS_CPP_SPEC): New macro. ! * gcc.c (struct compiler): Add cpp_spec field. ! (input_file_compiler): New variable. ! (do_spec_1): Allow a particular compiler to handle `%C' ! specially. ! (main): Store the current compiler in input_file_compiler. ! * tm.texi (CPLUSPLUS_CPP_SPEC): Document. ! 2001-02-07 Zack Weinberg ! * cpphash.h (struct spec_nodes): Add n_true and n_false. ! * cppinit.c (cpp_create_reader): Initialize them. ! (append_include_chain): cxx_aware arg might be unused. ! * cppexp.c (lex): In C++ mode, recognize 'true' and 'false' ! keywords and give them their phase 7 meaning. Pedwarn about ! this unless '__bool_true_false_are_defined' is defined. ! 2001-02-07 Alexandre Oliva ! * lcm.c (optimize_mode_switching): Emit mode_set before the ! JUMP_INSN of an abnormal edge. ! 2001-02-07 Bernd Schmidt ! * builtins.c (expand_builtin_setjmp_receiver): Emit an ASM_INPUT as ! a scheduling barrier at the end. ! * tm.texi (MD_INIT_BUILTINS, MD_EXPAND_BUILTIN): Document. ! 2001-02-07 Alexandre Oliva ! * config/sh/sh.md (reload_outsf): Removed. ! (movsf_ie): Introduce constraints for FPUL loads and stores. ! (reload_insf): Broaden the output constraint. ! * config/elfos.h (INT_ASM_OP): Don't define it if it's already defined. - * config/sh/sh.h (INT_ASM_OP, ASM_OUTPUT_CONSTRUCTOR, - ASM_OUTPUT_DESTRUCTOR): Copy definitions from config/elfos.h. - - 2001-02-06 Chandrakala Chavva - - * final.c: Revert my previous changes. - * output.h: Make profile_label_no extern. - * config/rs6000/rs6000.c (output_profile_hook): Use standard functions - for generating label. - - 2001-02-06 Laurynas Biveinis - - * config/i386/djgpp.h: Add comments about standard paths. - (MD_EXEC_PREFIX): Undefine before defining. - (MD_STARTFILE_PREFIX): New. - - 2001-01-30 Bruce Korb - - fixinc/fixincl.c(process): Emit error message only if appropriate :) - (load_file): do not rely on load_file_data() to close file pointer - fixinc/fixlib.c(load_file_data): do not close passed in file pointer - fixinc/inclhack.def(irix_limits_const): add test_text ! 2001-02-06 Neil Booth ! ! * cppexp.c (parse_defined): Improve diagnostics for invalid ! syntax. ! ! 2001-02-06 Neil Booth ! ! * cppmacro.c (cpp_get_token): Avoid pasting after a builtin. ! ! 2001-02-06 Mark Mitchell ! ! * config/rs6000/rs6000.h (ASM_OUTPUT_SYMBOL_REF): Define. ! * config/rs6000/rs6000-protos.h (rs6000_output_symbol_ref): Declare. ! * config/rs6000/rs6000.c (VTABLE_NAME_P): New macro. ! (rs6000_output_symbol_ref): New function. ! (output_toc): Use VTABLE_NAME_P. ! ! Tue Feb 6 07:54:51 2001 Richard Kenner ! * print-tree.c (print_node, case PARM_DECL): ! Print DECL_ARG_TYPE and DECL_ARG_TYPE_AS_WRITTEN. ! * stor-layout.c (reference_types_internal): New variable. ! (internal_reference_types): New function. ! (layout_type, case REFERENCE_TYPE): Make Pmode if internal. ! * tree.h (internal_reference_types): New declaration. ! * cse.c (find_best_addr): Fix typo in computing cost. ! Mon Feb 5 21:56:16 2001 Richard Kenner ! * combine.c (nonzero_bits, case PLUS): If pointers extend unsigned ! and this is the sum of a pointer and a constant, we know the result ! did not overflow. ! (num_sign_bit_copies, case PLUS): Likewise. ! * explow.c (convert_memory_address): Remove opposite SUBREG. ! * function.c (instantiate_new_reg): New function (from common code). ! (instantiate_virtual_regs_1): Call it. ! For PLUS, handle if (plus (subreg (virt-reg) (const_int)) ! if pointers sign- or zero-extend. ! * simplify-rtx.c (simplify_unary_operation, case ZERO_EXTEND): ! If pointers extend unsigned, use inside of SUBREG. ! (simplify_unary_operation, case SIGN_EXTEND): Likewise, if sign extend. ! 2001-02-05 Benjamin Kosnik ! * Makefile.in (-DGPLUSPLUS_TOOL_INCLUDE_DIR): Change to target ! subdir of gcc_gxx_include_dir. ! (gcc_gxx_target_include_dir): Remove. ! 2001-02-05 Jeffrey Oldham ! * dwarf2out.c: Revise DWARF2 Abbreviation Glossary comments. ! (dwarf2out_frame_debug_expr): Revise introductory comments to add ! a high-level description. ! 2001-02-05 Chandrakala Chavva ! * final.c: Move the declaration of profile_label_no to ... ! * output.h: ... here. ! * function.c (expand_function_start): Call PROFILE_HOOK. ! * config/rs6000/aix.h: Define PROFILE_HOOK. ! * config/rs6000/rs6000-protos.h: output_profile_hook new. ! * config/rs6000/rs6000.c (output_profile_hook): Define. ! (output_prolog): Do nothing for ABI_AIX as it is taken care by ! output_profile_hook. ! tm.texi : Explain new macro PROFILE_HOOK. ! 2001-02-06 Hans-Peter Nilsson ! * extend.texi (Extended Asm): Do not say that semicolon is always ! a valid line-breaking character for GNU assemblers. Use ! newline-tab as the most commonly supported syntax. Use ! newline-tab rather than semicolon in multi-insn examples. ! 2001-02-05 Franz Sirl ! * Makefile.in (gcc_gxx_target_include_dir): Use $(target_alias). ! 2001-02-05 Franz Sirl ! David Edelsohn ! * config/rs6000/rs6000.c (rs6000_return_addr): Use PIC ! code for AIX, even without flag_pic. ! 2001-02-05 Jakub Jelinek ! * c-typeck.c (common_type): push and pop binding level around ! calling common_type on function parameters. ! Mon Feb 5 14:30:37 2001 Christopher Faylor ! * config/i386/cygwin.h (CPP_SPEC): Add missing space after -idirafter. ! Mon Feb 5 11:23:16 2001 Richard Kenner ! * config/mips/mips.c (override_options): Fix typo in last change. ! (mips_make_temp_file): Call fatal_io_error, not pfatal_with_name. ! (mips_asm_file_end): Likewise; also pass more args to fatal_io_error. ! 2001-02-05 Nathan Sidwell ! * invoke.texi (-fdump-class-layout): Document. ! (-fdump-translation-unit): Use `=' as filename separator. ! 2001-02-05 Mark Mitchell ! * Makefile.in (s-mlib): Don't build multilibs if ! --disable-multilib. ! (DRIVER_DEFINES): Adjust accordingly. ! (gcc.o): Likewise. ! (protoize.o): Likewise. ! (unprotoize.o): Likewise. ! * configure.in: Recognize --enable-multilib. ! 2001-02-04 Mark Mitchell ! * Makefile.in (DRIVER_DEFINES): Fix quoting. ! * Makefile.in (site.exp): Always set HAVE_LIBSTDCXX_V3. ! * configure.in: Remove --enable-libstdcxx_v3 support. * configure: Regenerated. ! Sun Feb 4 15:52:44 2001 Richard Kenner ! ! * config/avr/avr.h (ASM_OUTPUT_REG_PUSH, ASM_OUTPUT_REG_POP): ! Call abort instead of fatal. ! (TRAMPOLINE_TEMPLATE): Call internal_error instead of fatal. ! * config/dsp16xx/dsp16xx.h (FUNCTION_PROFILER): Likewise. ! (FUNCTION_BLOCK_PROFILER, BLOCK_PROFILER): Likewise. ! (TRAMPOLINE_TEMPLATE, INITIALIZE_TRAMPOLINE): Likewise. ! (ASM_OUTPUT_REG_PUSH, ASM_OUTPUT_REG_POP): Likewise. ! * config/rs6000/rs6000.h (RETURN_ADDRESS_OFFSET): Likewise. ! ! * diagnostic.h (set_internal_error_function): Renamed. ! * toplev.h (internal_error): Renamed from fatal. ! (pfatal_with_name): Deleted. ! (fatal_io_error): Now has printf-style arguments. ! * diagnostic.c (pfatal_with_name): Deleted. ! (fatal_io_error): Rework to have args in printf-style. ! (set_internal_error_function): Renamed from set_fatal_function. ! (internal_error): Renamed from fatal. ! (error_recursion, fancy_abort): Call internal_error instead of fatal. ! * dwarf2out.c (get_cfa_from_loc_descr): Likewise. ! * emit-rtl.c (gen_realpart, gen_imagpart): Likewise. ! * expr.c (check_max_integer_computation_mode, expand_expr): Likewise. ! * flow.c (verify_flow_info): Likewise. ! * config/arm/arm.c (thumb_unexpanded_epilogue): Likewise. ! * config/mips/mips.c (save_restore_insns): Likewise. ! ! * except.c (duplicate_eh_handlers): Call abort instead of fatal. ! * flow.c (verify_flow_info): Likewise. ! * config/arm/arm.c (thumb_load_double_from_address): Likewise. ! * config/avr/avr.c (pttreg_to_str, unique_section): Likewise. ! (avr_normalize_condition): Likewise. ! * config/c4x/c4x.c (c4x_emit_libcall, c4x_valid_operands): Likewise. ! * config/dsp16xx/dsp16xx.c (dsp16xx_reg_class_from_letter): Likewise. ! (limit_reload_class, double_reg_to_memory): Likewise. ! (print_operand_address, emit_1600_code_shift): Likewise. ! (gen_tst_reg, gen_compare_reg): Likewise. ! * config/m68hc11/m68hc11.c (m68hc11_emit_libcall): Likewise. ! * config/dsp16xx/dsp16xx.c (dsp16xx_invalid_register_for_compare): ! Deleted. ! * config/dsp16xx/dsp16xx.md (unnamed cmphi): Call abort instead of it. ! ! * c-parse.in (methoddef): Call fatal_error instead of fatal. ! * objc/objc-act.c (build_ivar_chain): Likewise. ! * dwarfout.c (dwarfout_init): Call fatal_io_error instead of ! pfatal_with_name. ! * graph.c (clean_graph_dump_file): Likewise. ! * profile.c (init_branch_prob): Likewise. ! * objc/objc-act.c (objc_init): Likewise. ! ! * config/arm/arm.c (arm_override_options): Make errors non-fatal. ! * config/avr/avr.c (avr_override_options): Likewise. ! * config/c4x/c4x.c (c4x_expand_prologue): Likewise. ! * config/dsp16xx/dsp16xx.c (function_prologue): Likewise. ! * config/h8300/h8300.c (h8300_init_once): Likewise. ! * config/mips/mips.c (override_options): Likewise. ! * config/i386/i386.c (override_options): Likewise, rework. ! * config/m68k/m68k.c (override_options): Likewise. ! ! * config/dsp16xx/dsp16xx.c (print_operand): Call output_operand_lossage ! instead of fatal. ! * config/mips/mips.c (print_operand): Likewise. ! * hash.c (hash_allocate): Don't check for failure returns from ! obstack functions that can't fail. ! (hash_table_init_n, hash_table_init): Likewise; also now return void. ! * hash.h (hash_table_init_n, hash_table_init): Now return void. ! * objc/objc_act.c (objc_check_decl): Remove unneeded fatal call. ! (get_object_reference): Likewise. ! ! 2001-02-04 Nick Clifton ! ! * config/arm/arm.c (all_cores): Add 710T, 720T, 740T, 940T, 9e, ! StrongARM1110, 10TDMI, and 1020T. ! ! 2001-02-04 Kaveh R. Ghazi ! ! * mips.h (MULTILIB_ISA_DEFAULT): Don't use #elif. ! ! 2001-02-04 Alexandre Oliva ! ! * config/sh/sh.md (movdf load split): Pass register number to ! FP_OR_XD_REGISTER_P. ! ! 2001-02-04 Mark Mitchell ! ! * cppinit.c (BC): New macro. ! (builtin_array): Add __GXX_WEAK__. ! * cpplib.h (builtin_type): Add BT_WEAK. ! * cppmacro.c (builtin_macro): Handle BT_WEAK. ! * defaults.h (SUPPORTS_ONE_ONLY): Define. ! * varasm.c (SUPPORTS_ONE_ONLY): Do not define. ! ! 2001-02-03 Jakub Jelinek ! ! * cppinit.c (append_include_chain): Honor NO_IMPLICIT_EXTERN_C. ! ! 2001-02-03 Neil Booth ! ! * cpphash.h: Rename _ALIGN POOL_ALIGN. ! * cpplex.c (new_chunk, _cpp_pool_reserve): Update. ! ! 2001-02-03 Neil Booth ! ! * cpphash.h: Rename ALIGN _ALIGN. ! * cpplex.c (new_chunk, _cpp_pool_reserve): Update. ! ! Fri Feb 2 23:15:29 2001 Christopher Faylor ! ! * config/i386/cygwin.h (CPP_SPEC): Reorganize YA to better handle cross ! compilation environment. ! * config/i386/t-cygwin (T_CPPFLAGS): Define CYGWIN_CROSS_DIR to allow ! control over location of cygwin includes and libs. ! ! 2001-02-03 Michael Hayes ! ! * md.texi (Standard Names): remove reference to spur.md. ! ! 2001-02-03 Michael Hayes ! ! * c4x.c (group1_reg_operand, group1_mem_operand, arx_reg_operand, ! c4x_arn_reg_operand, c4x_arn_mem_operand): Do not check register ! number before reload. ! (c4x_adjust_cost): Return zero before reload. ! * c4x.md (load_immed_address+1, load_immed_address+2): Do not ! split before reload. ! ! 2001-02-03 Herman A.J. ten Brugge ! ! * c4x.c (c4x_hard_regno_rename_ok): New. ! * c4x-protos.h (c4x_hard_regno_rename_ok): New. ! * c4x.h (HARD_REGNO_RENAME_OK): Define. ! ! Fri Feb 2 20:03:50 2001 Richard Kenner ! ! * diagnostic.h: Add missing "extern" in all declarations. ! ! 2001-02-02 Alex Samuel ! ! * Makefile.in (gcc_gxx_target_include_dir): Generate dynamically ! as for gcc_gxx_include_dir. ! ! 2001-02-02 Neil Booth ! ! * cpp.texi, invoke.texi: Update -Wtraditional documentation. ! ! 2001-02-02 Alexandre Oliva ! ! * config/sh/sh.c (output_far_jump): Don't use braf on SH1. Emit ! label before alignment to be used as the braf base address. ! * config/sh/sh.md (length): Use longer lengths for SH1 PIC far ! branches. ! (casesi_jump_2): Require at least TARGET_SH2. ! ! * config/float-sh.h (LDBL_EPSILON, LDBL_MIN, LDBL_MAX): Prevent ! truncation to 32-bit doubles on -m3e and -m4-single-only. ! ! 2001-02-02 Mark Mitchell ! ! * gcc.c (init_gcc_specs): New function. Make -shared-libgcc ! the default when building a shared object. ! (init_spec): Use it. ! * testsuite/lib/g++.exp: Include the directory where libgcc ! is located to the LD_LIBRARY_PATH list. ! * invoke.texi (-shared-libgcc): Document the cases in which ! GCC defaults to using the shared libgcc. ! ! 2001-02-02 Alexandre Oliva ! ! * config/fp-bit.h (MAX_USI_INT, MAX_SI_INT): Don't assume ! unsigned is wide enough. ! (BITS_PER_SI): New. ! * config/fp-bit.c (_fpmul_parts): Don't assume 32-bits SI. ! (si_to_float): Likewise. ! (float_to_si, float_to_usi): Use BITS_PER_SI. ! ! 2001-02-01 Jeffrey Oldham ! ! * dwarf2out.c: Added explanation of abbreviations. ! (def_cfa_1): Added comments listing DWARF2 instructions. ! (cfa_temp_reg): Removed in favor of cfa_temp. ! (cfa_temp_value): Removed in favor of cfa_temp. ! (cfa_temp): New global variable. ! (dwarf2out_frame_debug_expr): Added extensive introductory ! comments explaining the function's transformations. Revised to ! use cfa_temp. Added some rtx checking. Generalize IOR case. ! (dwarf2out_frame_debug): Revised to use cfa_temp. ! (output_aranges): Cast as "unsigned" to avoid warning. ! * rtl.texi (RTX_FRAME_RELATED_P): Revise entry to emphasize better ! explain which instructions must be marked. ! ! 2001-02-01 Richard Henderson ! ! * local-alloc.c (update_equiv_regs): Copy INSN_CODE to the ! new instruction. ! ! 2001-02-01 Alexandre Oliva ! ! * config/sh/crt1.asm (main_k): Modified so that start calls ! ___setup_argv_and_call_main. ! 2001-02-01 Neil Booth ! * cpphash.h (struct cpp_buffer): Move saved_flags from cpp_reader. ! * cpplex.c (_cpp_lex_token): New token picks up the saved flags, ! and AVOID_LPASTE is cleared on meeting an unescaped newline. ! * cppmacro.c (builtin_macro): Set builtin flags here. ! (paste_all_tokens): Preserve AVOID_LPASTE on pasted token. ! (replace_args): Clarify intent. ! (cpp_get_token): Macro expansion tokens get the saved flags. ! Update. ! * cppmain.c (scan_buffer): Remove now-redundant print.printed ! check. ! 2001-02-01 Jeffrey Oldham ! * config/mips/iris6.h (SUPPORTS_INIT_PRIORITY): Reverse change of ! 2001-Jan-29. ! Thu Feb 1 07:22:41 2001 Richard Kenner ! * builtins.c (expand_builtin_alloca): allocate_dynamic_stack_space ! returns Pmode pseudo, but we need ptr_mode. ! * explow.c (allocate_dynamic_stack_space): Use plus_constant. ! Remove bogus conversions; use HOST_WIDE_INT for size. ! Don't use TARGET if wrong mode. ! * config/i386/i386.c (ix86_compute_frame_size): Allow ! stack_alignment_needed to be non-default even if size is zero. ! 2001-01-31 Alan Modra ! * (hppa_init_pic_save): Emit the pic offset table ! reg save after last_parm_insn. ! * pa.c (hppa_init_pic_save): New function. ! * pa.h (hppa_init_pic_save): Declare. ! * pa.md (call, call_value, sibcall, sibcall_value): Use ! the above instead of duplicated code. ! * pa.c (hppa_encode_label): Correct size of alloca buffer ! so we don't overrun it. Correct leading `*' case. ! * pa.h (STRIP_NAME_ENCODING): Simplify now that we don't ! need to handle `*@'. ! (FUNCTION_NAME_P): Likewise. ! 2001-01-31 Richard Henderson ! * config.gcc (alpha-osf5): Use float-i128.h. ! * config/float-i128.h (FLT_EVAL_METHOD, DECIMAL_DIG): Define. ! * config/float-i32.h: Likewise. ! * config/float-i64.h: Likewise. ! * config/float-sh.h: Likewise. ! * config/float-sparc.h: Likewise. ! 2001-01-31 DJ Delorie ! * expmed.c (extract_bit_field): allow non-integral modes if we ! want to extract a whole register from itself. ! 2001-01-31 Jakub Jelinek ! * c-typeck.c (set_init_index): If first is equal to last, assume as ! if it was not a range at all. ! 2001-01-31 Alexandre Oliva ! * config/fp-bit.c: Include tm.h. ! (float_to_si): Don't assume SImode is 32-bits wide. ! (float_to_usi): Likewise. ! 2001-01-31 Joseph S. Myers ! * c-parse.in (structsp): Pedwarn when "enum foo" refers to an ! incomplete type. ! (typename): Call pending_xref_error after parsing typed_typespecs. ! * c-decl.c (lookup_tag): Give error immediately rather than ! leaving it pending if the tag of the wrong type is in the same ! binding level. ! (xref_tag): Don't pedwarn for forward declarations of enum types ! here. ! * gcc.texi (Actual Bugs): Remove entry for misuse of struct, union ! and enum tags. ! 2001-01-31 Alexandre Oliva ! * config/float-sparc.h (LDBL_MAX) [sparc32]: Fix typo. ! 2001-01-31 Neil Booth ! * cpplib.c (T_ELIF): Move to STDC89, not that it matters. ! (_cpp_handle_directive): Suggest not using #elif with -Wtraditional. ! 2001-01-31 Neil Booth ! * cpphash.h (struct cpp_reader): New saved_flags. ! * cppmacro.c (cpp_get_token): Use saved_flags to remember ! to avoid a paste after a pasted token. ! 2001-01-31 Alexandre Oliva ! * libgcc2.h (Wtype_MAX, Wtype_MIN): Define. ! * libgcc2.c (__fixunssfSI, __fixunsdfSI, __fixunsxfSI): Use ! Wtype_MIN instead of LONG_MIN. ! 2001-01-30 Jeffrey Oldham ! * fixinc/fixincl.tpl: Add 2001 to copyright. Change name of ! README file. ! * fixinc/fixincl.x: Regenerated. ! * fixinc/inclhack.def (irix_limits_const): New definition to ! convert "const" to "__const" in limits.h. ! 2001-01-30 Jeffrey Oldham ! * fixinc/genfixes (AG): Fix "autogen4" thinko. ! 2001-01-30 Herman A.J. ten Brugge ! * regmove.c (try_auto_increment): Change REG_DEAD into REG_UNUSED ! when register dies in the insn. ! 2001-01-30 Neil Booth ! * diagnostic.c (fatal): Fix word wrap. ! 2001-01-30 Alexandre Oliva ! * combine.c (try_combine): Fix SUBREG setting for ! HOST_BITS_PER_WIDE_INT >= 2 * BITS_PER_WORD. ! 2001-01-30 Franz Sirl ! * jump.c (comparison_dominates_p): Don't try to handle UNKNOWN ! comparison codes. ! 2001-01-30 Neil Booth ! * c-decl.c (c_expand_body): Check TYPE_SIZE_UNIT (ret_type) ! is not NULL. ! * toplev.c (decode_W_option): Update warn_larger_than ! unconditionally for each processed switch. ! 2001-01-30 John David Anglin ! * pa.c (pa_init_machine_status): Initialize pic_offset_table_save_rtx ! to NULL_RTX. ! (hppa_expand_prologue): Delete code to save pic offset table register ! in the function prologue. ! * pa.h (PIC_OFFSET_TABLE_SAVE_RTX): Correct type in comment. ! * pa.md (call, call_value, sibcall, sibcall_value): Save the pic offset ! table register at the beginning of the function after the prologue. ! 2001-01-29 lars brinkhoff ! * tm.texi (PUSH_ROUNDING): Remove duplicate lines. ! 2001-01-29 John David Anglin ! Jeff Law ! * pa.md (return): Revise comment for trivial return. ! (return_internal): Non-trivial return pattern for non-PIC code. ! (return_internal_pic): Non-trivial return pattern for PIC code. ! It uses the PIC register to ensure it is restored after ! function calls. ! (epilogue): Generate appropriate return for PIC and non-PIC code. ! Mon Jan 29 23:53:14 2001 Christopher Faylor ! * config/i386/cygwin.h: Fix -mno-cygwin search path for link. ! 2001-01-29 DJ Delorie ! * combine.c (if_then_else_cond): Pass the correct mode to ! operand_subword() for constants. ! Mon Jan 29 20:38:19 2001 Christopher Faylor ! * config/i386/cygwin.h: Add w32api to include search. Search different ! directories in a cross-build environment. ! 2001-11-29 Tim Josling ! * tree.h (TYPE_STUB_DECL): Add documentation. ! 2001-11-29 Laurynas Biveinis ! * sdbout.c (sdbout_one_type): Skip types with indeterminate size. ! (sdbout_field_types): Likwise. Fix use of host_integerp. ! 2001-01-29 Thomas Pfaff ! * mingw32.h: Override STARTFILE_SPEC and LINK_SPEC declared in ! cygwin.h. ! 2001-01-29 Jeffrey Oldham ! * config/mips/iris6.h (SUPPORTS_INIT_PRIORITY): Revise definition ! to use flag_gnu_linker. ! 2001-01-29 Neil Booth ! * cpplib.c (T_BAD_DIRECTIVE): Remove. ! (_cpp_init_stacks): Loop from 0 to N_DIRECTIVES - 1. ! 2001-01-29 Joseph S. Myers ! * tree.c, tree.h (build_parse_node): Remove; was identical to ! build_nt. ! * c-lang.c (start_cdtor), objc/objc-act.c ! (build_module_descriptor): Use build_nt instead of ! build_parse_node. ! 2001-01-29 Jakub Jelinek ! * config/i386/i386.md (addqi_1_lea): Fix mode (QI instead of HI). ! (testqi_1, andqi_2): If widening to SImode, make sure CONST_INT does ! not have any upper bits set. ! 2001-01-29 Phil Edwards ! * COPYING.LIB: Update to LGPL 2.1 from the FSF. ! 2001-01-28 Kaveh R. Ghazi ! * stmt.c (estimate_case_costs): Use integer_minus_one_node. ! * tree.c (build_common_tree_nodes_2): Set integer_minus_one_node. ! * tree.h (tree_index): Add new element TI_INTEGER_MINUS_ONE. ! (integer_minus_one_node): Define. ! 2001-01-28 Alexandre Oliva ! * Makefile.in (bootstrap2-lean): Fix typo. ! 2001-01-28 Neil Booth ! * cpphash.c (_cpp_cleanup_hashtable, _cpp_lookup_with_hash) ! : Don't set fe_value. ! * cpplib.h (AVOID_LPASTE): New flag. ! (struct cpp_hashnode): Remove fe_value. ! * cpplex.c (cpp_avoid_paste): Don't paste '.' with a number. ! * cppmacro.c (builtin_macro): Don't set flags here. ! (replace_args): Set AVOID_LPASTE flag on first token of an ! argument, and the token following it. ! (cpp_get_token): Set AVOID_LPASTE flag on first token of a ! macro expansion, and on the token following it. Do it for ! builtins too. ! * cppmain.c (scan_buffer): Avoid pasting only flagged tokens. ! 2001-01-27 Richard Henderson ! * config/alpha/t-ieee: Remove multilibbing. ! (TARGET_LIBGCC2_CFLAGS): Add -mieee. ! 2001-01-27 Kaveh R. Ghazi ! * configure.in: Arrange to include defaults.h in [ht]config.h/tm.h. ! * Makefile.in: Remove all dependencies on defaults.h. ! * builtins.c: Don't include defaults.h. ! * c-common.c: Likewise. ! * c-decl.c: Likewise. ! * c-pragma.c: Likewise. ! * c-typeck.c: Likewise. * combine.c: Likewise. ! * i386.c: Likewise. ! * frame-ia64.c: Likewise. ! * cppexp.c: Likewise. ! * crtstuff.c: Likewise. ! * dbxout.c: Likewise. * dwarf2out.c: Likewise. ! * dwarfout.c: Likewise. ! * emit-rtl.c: Likewise. ! * except.c: Likewise. ! * expr.c: Likewise. ! * final.c: Likewise. ! * frame-dwarf2.c: Likewise. ! * libgcc2.c: Likewise. ! * optabs.c: Likewise. ! * profile.c: Likewise. ! * sdbout.c: Likewise. ! * toplev.c: Likewise. ! * tradcif.y: Likewise. ! * tree.c: Likewise. ! * varasm.c: Likewise. ! ! 2001-01-27 Kaveh R. Ghazi ! ! * builtins.c (expand_builtin_fputs): Use size_one_node when ! transforming into fwrite. ! ! 2001-01-27 Joseph S. Myers ! ! * extend.texi (Attribute Syntax): New section. ! ! 2001-01-27 Michael Sokolov ! ! * fixproto: Correctly install synthesised unistd.h and stdlib.h when ! they didn't need fixing. ! ! 2001-01-27 Janis Johnson ! ! * config.gcc (i[34567]86-sequent-{ptx4*,sysv4*}): Use usegas.h ! if appropriate. ! * config/ptx4.h: Several fixes to build on DYNIX/ptx v4.[456], and ! to remove macro definitions that are duplicated from elfos.h. ! ! 2001-01-27 Richard Henderson ! ! * config/i386/sco5gas.h: Move ... ! * config/usegas.h: ... here. ! * config.gcc (i[34567]86-*-sco3.2v5) [tm_file]: Update. ! ! 2001-01-27 Jakub Jelinek ! ! * c-typeck.c (struct constructor_stack): Add range_stack member. ! (really_start_incremental_init): Clear it. ! (push_init_level): Save constructor_range_stack and clear it if ! pushing explicit braces. ! (pop_init_level): abort if constructor_range_stack is non-zero at ! explicit closing brace. Restore saved constructor_range_stack if ! not implicit. ! ! 2001-01-27 Alexandre Oliva ! ! * expr.c (emit_move_insn): Add REG_EQUAL note when constant loaded ! into register was forced into memory. ! ! 2001-01-27 Alexandre Oliva ! ! * Makefile.in: Remove uses of + before $(MAKE). ! ! 2001-01-26 Richard Henderson ! ! * stmt.c (cost_table): Remove. ! (COST_TABLE, cost_table_initialized): New. ! (estimate_case_costs): Use the later instead of the former. ! (balance_case_nodes): Likewise. ! ! 2001-01-26 Richard Henderson ! ! * alias.c (objects_must_conflict_p): Read-only slots may not ! conflict despite having the same type. ! ! 2001-01-27 Michael Hayes ! ! * loop.c (loop_giv_reduce_benefit): Copy mode size into ! int variable. ! (check_ext_dependant_givs): Initialise u_start_val and ! u_end_val. ! (load_mems): Make last_max_reg unsigned. ! (try_swap_copy_prop): Use INSN_P and initialise set. ! ! Fri Jan 26 23:22:58 2001 Denis Chertykov ! ! * README.AVR : Removed. ! ! Fri Jan 26 11:37:26 2001 Jeffrey A Law (law@cygnus.com) ! ! * pa-64.h (text_section): Remove declaration. ! ! * pa.md (return_internal): Remove mode on PIC register use. ! ! 2001-01-25 lars brinkhoff ! ! * tm.texi (DATA_ALIGNMENT, LOCAL_ALIGNMENT, ASM_OPEN_PAREN, ! ASM_CLOSE_PAREN): fix typos. ! ! 2001-01-25 Mark Mitchell ! ! * acconfig.h: Define `const' to the empty string if neither ! __STDC__ nor __cplusplus is defined. ! * config.in: Regenerated. ! ! 2001-01-25 David Edelsohn ! ! * config.gcc (rs6000-ibm-aix[5-9]*): Change to aix51.h. ! * collect2.c (main): Delete importf. Add ".obj" file extension. ! (GCC_CHECK_HDR): Handle AIX V5 new magic number. ! (aix_std_libs): Add additional AIX libraries to skip. ! * config/rs6000/aix.h (MY_ISCOFF): Add AIX V5 new magic number. ! * config/rs6000/aix51.h: New file. ! ! 2001-01-25 Michael Hayes ! ! * loop.c (loop_call_insn_emit_before, loop_call_insn_hoist): New. ! (loop_insn_emit_before): No longer static. ! (move_movables): Replace emit_insn_after with loop_insn_emit_after. ! (loop_givs_rescan, load_mems): Likewise. ! (check_dbra_loop): Replace emit_insn_before with loop_insn_emit_before. ! (maybe_eliminate_biv_1): ! (move_movables): Replace emit_call_insn_before with ! loop_call_insn_hoist. ! * loop.h (loop_insn_emit_before): Add. ! * unroll.c (copy_loop_body): Replace emit_insn_before with ! loop_insn_emit_before. ! ! 2001-01-25 Neil Booth ! ! * diagnostic.c (fatal): Request preprocessed source. ! ! Thu Jan 25 02:01:16 2001 J"orn Rennecke ! ! * c-decl.c (duplicate_decls): If different_binding_level is nonzero, ! olddecl has argument types and newdecl has none, use the argument ! types from olddecl. ! ! 2001-01-24 Ulrich Drepper ! ! * dwarf2out.c (prefix_of): New function. Determine longest common ! prefix of the two arguments. The units are whole path components. ! (output_file_names): When adding a new directory find the one entry ! with the longest common prefix already in the list. Artificially ! generate entry if there is none for this prefix. ! Fix test to check whether the zeroth directory entry is used. ! ! Wed Jan 24 23:51:55 2001 J"orn Rennecke ! ! * reload1.c (reload_reg_free_for_value_p): New parameter start_regno. ! Changed all callers. Take it into account when deciding if a ! previously loaded value matches. ! ! 2001-01-24 Richard Henderson ! ! * reload.c (find_reloads_subreg_address): Fail the substitution ! if the resulting address is insufficiently aligned. ! ! 2001-01-24 DJ Delorie ! ! * combine.c (combine_simplify_rtx): If the modes are all VOIDmode, ! check the original operand's mode also. ! * simplify-rtx.c (simplify_ternary_operation): Ditto. ! ! 2001-01-24 Joseph S. Myers ! ! * c-parse.in (cast_expr): Move compound literals from here ... ! (primary): ... to here. Use standard terminology "compound ! literal" instead of "constructor expression". ! ! 2001-01-24 Joseph S. Myers ! ! * gcc.1, cpp.1: Regenerate. ! ! 2001-01-24 Alexandre Oliva ! ! * calls.c (emit_library_call_value_1): Memory slot for ! pass-by-reference argument should have the mode of the argument, ! not of the pointer to it. ! ! 2001-01-24 Tom Tromey ! ! * gcc.texi (G++ and GCC): Mention gcj manual. ! (Standards): Link to section of manual mentioning gcj/Java ! compatibility. ! ! 2001-01-24 Jakub Jelinek ! ! * cppfiles.c (_cpp_read_file): Add to dependencies if requested. ! * cppinit.c (cpp_start_read): Remove deps_add_dep call. ! * tradcpp.c (main): Add -imacros or -include'd dependencies ! for -M*. ! * cpp.texi (-M, -MM): Document -M -include behaviour. ! ! 2001-01-24 Roger Collins ! ! * config/i386/xm-i386.h: Make __i386__ a boolean macro. ! ! 2001-01-24 Will Cohen ! ! * config/mips/abi64.h (RETURN_IN_MEMORY): Always take into account ! whether registers are 32 bits or 64 bits in size. ! ! 2001-01-24 Ben Elliston ! ! * config/m32r/m32r.h (PREDICATE_CODES): Remove m32r_not_same_reg. ! ! 2001-01-24 Richard Henderson ! ! * config/alpha/alpha.md (builtin_longjmp_internal): New. ! (builtin_longjmp): Use it instead of emit_indirect_jump. ! ! 2001-01-23 John David Anglin ! ! * bb-reorder.c (make_reorder_chain_1): Handle case where ! jump edge goes to the same block as the fallthru edge. ! ! 2001-01-23 Jim Wilson ! ! * dwarf2out.c (dwarf2out_line): Make last_file_num be unsigned. ! * frame.h (__ia64_personality_v1): Add prototype. ! * libgcc2.c (ia64_throw_helper): Change personality declaration to ! prototype form. Add void * cast to first argument to personality ! call. ! * real.c (e113toe): Surround with INTEL_EXTENDED_IEEE_FORMAT ifdefs. ! (asctoe113): Likewise. ! * config/ia64/frame-ia64.c: Include eh-common.h. ! * config/ia64/ia64-protos.h (sdata_section, sbbs_section): Add ! prototypes. ! * config/ia64/ia64.c (emit_insn_group_barriers): Add ATTRIBUTE_UNUSED ! to dump parameter. ! (itanium_split_issue): Add prototype. ! (gen_nop_type): Ifdef out. ! (find_best_packet): Initialize best_packet. ! (ia64_encode_section_info): New local string. Use for ggc_alloc_string ! result. ! * config/ia64/ia64.h (ASM_OUTPUT_LONG_DOUBLE): Use 0L not 0. ! * config/ia64/ia64.md (bsp_value): Add explicit stop bit at start. ! (flushrs): Add explicit stop bit at end. ! * config/ia64/lib1funcs.asm (__ia64_restore_stack_nonlocal): Change ! trailing \ to >. ! ! 2001-01-23 Chris Demetriou ! ! * libgcc-std.ver (GCC_3.0): Add __terminate_func_set to list ! of EH symbols. ! * libgcc2.c (__terminate_func): Make variable static. ! (__terminate_set_func): New function to set __terminate_func. ! * libgcc2.h (__terminate_func_ptr): New typedef. ! (__terminate_set_func): New function. ! ! 2001-01-23 Richard Henderson ! ! * flow.c (init_propagate_block_info): Don't consider unchanging ! memories for dead frame store elimination. ! ! 2001-01-23 Richard Henderson ! ! * varasm.c (UNIQUE_SECTION): Move default implementation ... ! * defaults.h: ... here. ! ! 2001-01-24 Michael Hayes ! ! * c4x.h (TARGET_LOAD_DIRECT_MEMS): Define. ! ! 2001-01-23 Neil Booth ! ! * c-lex.c (lex_charconst): Fix typo: s/p/str. ! ! 2001-01-23 Franz Sirl ! ! * rs6000.h (rs6000_return_addr): Move prototype from here... ! * rs6000-protos.h (rs6000_return_addr): ...to here. ! (rs6000_init_expanders): Delete prototype. ! 2001-01-23 Nick Clifton ! * invoke.texi: Replace , with \, inside @gccoptlist macros. ! (Spec Files): Document %B and %j and %. and %v3 and %M and ! %{S*&T} spec switches. ! 2001-01-24 Herman A.J. ten Brugge ! * c4x.c (c4x_r11_set_p): Calculate rtx code correctly. ! 2001-01-23 Chris Demetriou ! Neil Booth ! * cpperror.c: Merge handlers of PEDWARN and WARNING. ! Have -Werror make pedantic warnings errors, like the ! rest of GCC. ! 2001-01-23 Phil Edwards ! * c-tree.texi (IDENTIFIER_LENGTH): Fix typo. ! 2001-01-23 Jakub Jelinek ! * integrate.h (struct inline_remap): Add compare_src, compare_mode. ! * integrate.c (expand_inline_function): Initialize them. ! (subst_constants): If changing COMPARE so that both its arguments ! will be VOIDmode and the comparison mode will be lost, note ! compare_mode. Use the recorded compare_mode to optimize ! IF_THEN_ELSE. ! 2001-01-23 Jason Merrill ! * dwarf2out.c (new_die): Use xcalloc. ! (output_die): Abort rather than emit a local reference to offset 0. ! 2001-01-17 Andrew Haley ! * libgcc2.c (get_reg_addr): Don't abort if we haven't got a copy ! of a saved register; return NULL instead. ! (copy_reg): Take a pointer to a source register rather than a ! frame_state. ! (next_stack_level): Remember the address in the stack frame of all ! saved registers. ! Use the saved register pointer array as the source of the CFA. ! (throw_helper): Rewrite. Unwind once rather than twice and keep ! track of saved registers as we go. ! 2001-01-23 Herman A.J. ten Brugge ! * c4x-protos.h (c4x_legitimize_reload_address): Remove. ! * c4x.c (c4x_legitimize_reload_address): Remove. ! * c4x.h (LEGITIMIZE_RELOAD_ADDRESS): Rewrite to generate correct ! reload address for ldp(k) insn. ! Mon Jan 22 20:53:47 2001 Jeffrey A Law (law@cygnus.com) ! * pa.md (return_internal): Add a USE of the PIC register to ensure ! it is restored after each call. ! (return expander): Corresponding changes. ! 2001-01-22 Franz Sirl ! * rs6000.h (INIT_EXPANDERS): Delete. ! (RETURN_ADDR_RTX): Call rs6000_return_addr(). ! * rs6000.c (rs6000_override_options): Call *_machine_status from ! here... ! (rs6000_init_expanders): ...instead of here. Delete. ! (rs6000_mark_machine_status): New function. ! (rs6000_init_machine_status): Use xcalloc. ! (rs6000_return_addr): Generate RTX for the return address. ! (rs6000_ra_ever_killed): New, check if LR was ever destroyed. ! (rs6000_stack_info): Use it. ! 2001-01-22 Thomas Pfaff ! * gthr-win32.h: Include errno.h to get a declaration for ! EINVAL and _mingw.h if the target is mingw32. ! 2001-01-22 Andres Felipe Vargas ! * cpp.texi: Correct typos. ! Mon Jan 22 13:59:09 2001 Richard Kenner ! * explow.c (probe_stack_range): Ensure value passed to ! stack_check_libfunc is ptr_mode, not Pmode. ! Mon Jan 22 16:53:06 2001 J"orn Rennecke ! * recog.c (validate_replace_rtx_1): In ZERO_EXTEND / SIGN_EXTEND ! case, don't use operand_subword to calculate a SUBREG that is ! wider than a word. ! * rtl.texi: Comparisons yield 0 or STORE_FLAG_VALUE. ! 2001-01-22 Herman A.J. ten Brugge ! * c4x.c (c4x_valid_rptb_p, c4x_label_ref_used_p): New functions. ! (c4x_rptb_insert): Call c4x_valid_rptb_p to check if repeat block is ! valid. If not replace it by equivalent insns. ! 2001-01-22 Herman A.J. ten Brugge ! * c4x.c (c4x_check_legit_addr): Only check CONST. Not if CONST ! contains SYMBOL_REF, LABEL_REF and CONST_INT. ! (c4x_U_constraint, symbolic_address_operand): Likewise. ! (c4x_immed_float_constant): Do not check if CONST_DOUBLE is in ! memory. ! (c4x_r11_set_p, c4x_check_laj_p): New functions. ! * c4x-protos.h (c4x_check_laj_p): Add prototype. ! * c4x.md (in_annul_slot_3): Do not allow auto-increment in last ! anulling slot because of silicon bug. ! (laj, lajv): Call c4x_check_laj_p to check for silicon bug. ! 2001-01-22 Alan Modra ! * cppexp.c (parse_charconst): Change `mask' type to agree ! with parse_escape. ! 2001-01-21 Richard Henderson ! * config/i386/i386.c (ix86_asm_file_end): Disable putting ! pic_label_name in a linkonce section. ! 2001-01-17 Philipp Thomas ! * aclocal.m4 (AM_WITH_NLS): Add -lintl to LIBS if gettext was ! found in libintl. ! * configure: Regenerate. ! Sun Jan 21 02:38:56 2001 J"orn Rennecke ! * expmed.c (synth_mult, expand_mult_highpart, expand_divmod): Guard ! uses of shift_cost, shiftadd_cost and shiftsub_cost with bound checks. ! Sun Jan 21 09:44:17 2001 Denis Chertykov ! * config/avr/avr.c (ret_cond_branch): New argument (reverse) added. ! If REVERSE nonzero then condition code in X must be reversed. ! (encode_section_info): Optimise if/else. ! (avr_function_value): Fix formatting. ! * config/avr/avr.md (branch): Call to ret_cond_branch changed. ! (difficult_branch): Likewise. ! (rvbranch): Likewise. ! (difficult_rvbranch): Likewise. ! * config/avr/avr-protos.h (ret_cond_branch): Prototype changed. ! * config/avr/libgcc.S: Fix comment. ! 2001-01-20 Michael Sokolov ! * sdbout.c (PUT_SDB_DEF): Fix after last bogus change. ! 2001-01-20 Michael Sokolov ! * cppinit.c (INO_T_EQ): Don't use #elif, fix formatting. ! 2001-01-20 Michael Sokolov ! * aclocal.m4 (gcc_AC_FUNC_STRSTR): New macro. ! * configure.in (gcc_AC_FUNC_STRSTR): Add invokation. ! * configure, config.in: Regenerate. ! * Makefile.in (STRSTR, HOST_STRSTR, USE_HOST_STRSTR): New variables. ! (LIBDEPS, HOST_LIBDEPS, LIBS, HOST_LIBS): Add strstr handling. ! (strstr.o, $(HOST_PREFIX_1)strstr.o): New rules. ! (doprint.o): New rule. ! 2001-01-20 Joseph S. Myers ! * c-typeck.c (digest_init): Handle boolean types as scalars. ! Sat Jan 20 12:46:57 2001 Richard Kenner ! * stmt.c (expand_return): Don't return anything if size is zero. ! Delete redundant assignment to BYTES. ! * expr.c (move_block_from_reg): Do nothing if NREGS is zero. ! 2001-01-20 Marek Michalkiewicz ! * config/avr/avr.h (INIT_TARGET_OPTABS): Remove most of it, was ! the same as the default library function names. ! * config/avr/avr.md: Document special characters after '%'. ! (mulqi3, mulhi3, mulsi3): Call libgcc.S functions ourselves, ! knowing which of the call-used registers are really clobbered. ! (divmodqi4, udivmodqi4, divmodhi4, udivmodhi4, divmodsi4, udivmodsi4): ! New. Both quotient and remainder from one libgcc.S call. ! * config/avr/libgcc.S: Optimize mul/divmod for the new insns above, ! clobber as few registers as possible. ! * config/avr/t-avr (LIB1ASMFUNCS): Adjust for the above changes. ! 2001-01-20 Neil Booth ! * cppmacro.c (funlike_invocation_p): Don't move back up to the ! context of the top of the stack. ! 2001-01-20 Jakub Jelinek ! * function.c (fixup_var_refs): Move CALL_PLACEHOLDER handling... ! (fixup_var_refs_insns): ...here. ! 2001-01-20 Zack Weinberg ! * function.c (fixup_var_refs_insns): Break up into ! fixup_var_refs_insn [body of loop], fixup_var_refs_insns ! [loop over entire insn list], and fixup_var_refs_insns_with_hash ! [loop over hash table entries]. ! (fixup_var_refs): Adjust calls to fixup_var_refs_insns and/or ! fixup_var_refs_insns_with_hash, to match above changes. ! 2001-01-19 John David Anglin ! * Makefile.in (ORDINARY_FLAGS_TO_PASS): Add MAKEOVERRIDES variable. ! (libgcc.a): Likewise. ! (stmp-multilib): Likewise. ! (STAGE2_FLAGS_TO_PASS): Likewise. ! 2001-01-19 Alexandre Oliva ! * config/sh/sh.c (prepare_move_operands) [PIC]: Use operands[0] as ! temporary if no_new_pseudos. ! 2001-01-19 Neil Booth ! * cppinternals.texi: Update. ! 2001-01-19 Richard Earnshaw ! * arm.c (arm_init_builtins): Re-enable builtins. ! Fri Jan 19 13:02:56 2001 Richard Kenner ! * rtl.texi (SET, CLOBBER): Document PARALLEL as SET_DEST possibility. ! * flow.c (mark_set_1, case PARALLEL): Don't require BLKmode, allow ! element to be null, and always expect an EXPR_LIST. ! * rtlanal.c (reg_overlap_mentioned_p, note_stores): Likewise. ! * sched-deps.c (sched_analyze_1): Likewise. ! * sched-rgn.c (check_live_1, update_live_1): Likewise. ! * regclass.c (max_set_parallel): New variable. ! (reg_scan): Take it into account in computation of max_parallel. ! (reg_scan_mark_refs, case SET): Compute it. ! * alias.c (rtx_equal_for_memref_p, case ADDRESSOF): Don't assume ! args are REG. ! * expr.c (store_constructor): Don't look at MEM_ALIAS_SET unless MEM. ! * function.c (assign_parms): Use INTVAL for a CONST_INT. ! 2001-01-19 Jason Merrill ! * dwarf2out.c (gen_subprogram_die): Don't reuse the in-class decl ! for the abstract instance of an inline function. ! Fri Jan 19 14:31:35 2001 Alexandre Oliva ! J"orn Rennecke ! * reload1.c (move2add_note_store): Treat all registers directly or ! indirectly derived from a base register as members of the same set ! of values. ! (reload_cse_move2add): Adjust accordingly. Take mode and offset ! of base register into account. ! Fri Jan 19 09:18:42 2001 J"orn Rennecke ! * alias.c (find_base_value): Recognize TRUNCATE. ! (record_set): In PLUS case, invalidate if other summand is also a ! base value. ! Thu Jan 18 06:43:04 2001 Richard Kenner ! * flow.c (mark_set_1, case PARALLEL): New case; rework to allow ! entry to be EXPR_LIST. ! * rtlanal.c (reg_overlap_mentioned_p): Allow PARALLEL in SET to ! be an EXPR_LIST (but not null, which other code doesn't allow). ! (note_stores): Properly handle PARALLEL in SET. ! Recursively call for top-level PARALLEL. ! * sched-deps.c (sched_analyze_1): Handle EXPR_LIST in PARALLEL in SET. ! * sched-rgn.c (check_live_1, update_live_1): Likewise. ! * config.gcc (rs6000-ibm-aix*, rs6000-bull-bosx): Add rs6000/aix.h. ! 2001-01-18 Neil Booth ! * cpplib.c (_cpp_handle_directive): Use buffer->was_skipping, ! not pfile->skipping (== 0). ! 2001-01-17 Nick Clifton ! * config/rs6000/rs6000.c: Add prototypes for {init|free}_ ! machine_status. ! 2001-01-17 Jim Wilson ! * invoke.texi (IA-64 options): Improve. ! 2001-01-17 Tom Tromey ! * invoke.texi (Optimize Options): Use `{}' to around @samp ! argument. ! 2001-01-17 Aldy Hernandez ! * invoke.texi (-fno-guess-branch-probability): New option. ! Wed Jan 17 13:26:34 2001 Richard Kenner ! * combine.c (try_combine): Don't set i3_subst_into_i2 for ! case of making new double-word constant. ! Revert last change: instead just test i3_subst_into_i2. ! 2001-01-17 Jakub Jelinek ! * config/i386/i386.md (cmpqi_minus_1): Use {b} for QImode operation. ! Use q constraints instead of r. ! Tue Jan 16 22:23:04 2001 Alan Modra (alan@linuxcare.com.au) ! * config/pa/pa.h (PIC_OFFSET_TABLE_REGNUM_SAVED): Remove. ! (machine_function): Define. ! (PIC_OFFSET_TABLE_SAVE_RTX) : Define. ! * config/pa/pa.c (pa_init_machine_status, pa_mark_machine_status, ! pa_free_machine_status): New functions. ! (override_options): Set {init,mark,free}_machine_status to above. ! (hppa_expand_prologue): Use PIC_OFFSET_TABLE_SAVE_RTX instead of ! PIC_OFFSET_TABLE_REGNUM_SAVED. ! * config/pa/pa.md: Use PIC_OFFSET_TABLE_SAVE_RTX instead of ! PIC_OFFSET_TABLE_REGNUM_SAVED throughout. ! * config/pa/pa32-regs.h (CONDITIONAL_REGISTER_USAGE): Remove ! references to PIC_OFFSET_TABLE_REGNUM_SAVED. ! * config/pa/pa64-regs.h (CONDITIONAL_REGISTER_USAGE): Likewise. ! 2001-01-15 DJ Delorie ! * Makefile.in (gcov.1): Protect against texi2pod/pod2man failing. ! (cpp.1): Ditto. ! (gcc.1): Ditto. ! Tue Jan 16 17:20:43 2001 Richard Kenner ! * flow.c (propagate_on_insn): Make trying to delete a prologue ! or epilogue insn an ICE, not a warning. Allow doing this if ! the current function returns with stack pointer depressed. ! * combine.c (try_combine): If i3_subst_into_i2, properly check for ! I3 having more than one SET. ! 2001-01-16 Jim Wilson ! * invoke.texi: Document IA-64 options. ! * config/ia64/ia64.c (ia64_print_operand_address): Delete 'B' support. ! (fixup_errata): Delete TARGET_A_STEP use. ! * config/ia64/ia64.h (MASK_A_STEP, TARGET_A_STEP): Delete. ! (TARGET_SWITCHES): Delete -ma-step option. ! * config/ia64/ia64.md (all FP patterns): Delete %B0. ! (movqicc_astep, movqi_internal_astep, movhicc_astep, ! movhi_internal_astep, movsicc_astep, movsi_internal_astep, movdi+1, ! movdi_internal_astep, movsfcc_astep, movsf_internal_astep, ! movdfcc_astep, movdf_internal_astep, movtfcc_astep, ! movtf_internal_astep, cmovdi_internal_astep, cmovsi_internal_astep): ! Delete. ! (movqi_internal, movhi_internal, movsi_internal, movdi_internal, ! movsf_internal, movdf_internal, movtf_internal, cmovdi_internal, ! cmovsi_internal): Delete ! TARGET_A_STEP check. ! 2001-01-16 Gerald Pfeifer ! * gcc.texi (Bug Lists): Do not mention newsgroups nor the ! possibility to report bugs via postal mail. Change a URL and ! merge in a nearly duplicate statement... ! (Bug Reporting): ...from here. ! (Service): Refer to the Bug Reporting section instead of ! duplicating an URL. ! (Contributing): Remove trivial explanations concerning snapshots. ! 2001-01-16 Alan Modra ! * cppmain.c (general_init): Don't use ANSI prototype. ! 2001-01-16 Tom Tromey ! * gcc.c (cpp_options): Added `*' to specs for -MF, -MQ, and -MT. ! 2001-01-16 Richard Henderson ! * config/i386/i386.h: Fix comment typo. ! * config/i386/i386.md (shift+compare pattern names): s/cmpno/cmp/ ! (ashr+compare patterns): Match CCGOCmode not CCNOmode. ! 2001-01-16 Phil Edwards ! * gcc.c: Revert previous -fsyntax-only-related change; move ! to cp/g++spec.c. ! 2001-01-16 Jakub Jelinek ! * config/i386/i386.c (fcmov_comparison_operator): Only initialize ! inmode after checking GET_CODE (op). ! 2001-01-16 Richard Henderson ! * flow.c (struct propagate_block_info): Add mem_set_list_len. ! (MAX_MEM_SET_LIST_LEN): New. ! (propagate_one_insn): Update mem_set_list_len. ! (invalidate_mems_from_autoinc): Likewise. ! (invalidate_mems_from_set): Likewise. ! (mark_used_regs): Likewise. ! (init_propagate_block_info): Likewise. Stop collecting memories ! when we reach MAX_MEM_SET_LIST_LEN. ! (mark_set_1): Likewise. ! 2001-01-16 Richard Henderson ! * unroll.c (precondition_loop_p): Fail if no iteration ! variable found. ! 2001-01-16 Phil Edwards ! * gcc.c: When -fsyntax-only is given, do not complain about ! unused libraries. ! 2001-01-15 Richard Henderson ! * config/i386/i386.c (asm_output_function_prefix): Remove. ! (ix86_asm_file_end): New. ! (load_pic_register): Generate pic_label_name into a ! staticly allocated buffer. ! * config/i386/i386-protos.h: Update. ! * config/i386/i386.h (ASM_OUTPUT_FUNCTION_PREFIX): Remove. ! (ASM_FILE_END): New. ! * config/i386/i386afe.h: New file. ! * config.gcc (i?86-*-elf) [tm_file]: Use it. ! (i?86-*-{freebsd,linux*,moss*}): Likewise. ! * config/elfos.h (ASM_FILE_END): Undef before redefinition. ! * config/i386/cygwin.h (ASM_FILE_END): Likewise. ! * config/i386/osfrose.h (ASM_FILE_END): Invoke ix86_asm_file_end. ! * config/i386/sco5.h (ASM_FILE_END): Likewise. ! * config/i386/winnt.c (i386_pe_asm_file_end): Likewise. ! 2001-01-15 Joseph S. Myers ! * Makefile.in (install-man): Remove explicit dependency on ! $(srcdir)/gcc.1. ! * configure.in, configure: Revert previous patch requiring perl ! 5.6.0. ! 2001-01-12 Aldy Hernandez ! * toplev.c (flag_guess_branch_prob): New. ! (f_options): Add guess-branch-probability option. ! (rest_of_decl_compilation): Only estimate branch probability if ! flag set. ! (main): set flag_guess_branch_prob. ! * flags.h (flag_guess_branch_prob): New. ! 2001-01-15 DJ Delorie ! * gcc.texi (Makefile): Add documentation for Makefile targets. ! 2001-01-15 Philip Blundell ! * config/arm/arm.c (arm_finalize_pic): New arg "prologue". ! (is_pic): Delete. ! * config/arm/arm-protos.h (arm_finalize_pic): Update prototype. ! (is_pic): Delete declaration. ! * config/arm/arm.h (FINALIZE_PIC): Update call to arm_finalize_pic. ! (OUTPUT_INT_ADDR_CONST): Remove special handling of PIC address. ! * config/arm/arm.md (builtin_setjmp_receiver): New. ! 2001-01-15 Richard Earnshaw ! * arm.c (use_return_insn): Don't try to determine the function type ! until after reload has completed. ! (arm_output_epilogue): Don't adjust the sp value recovered from the ! stack. ! (emit_multi_reg_push): Don't record dwarf information for the pc. ! * arm.md (eh_epilogue): The function type may have changed, so it ! needs to be recalculated. ! * arm/netbsd.h (DWARF2_UNWIND_INFO): Delete. Can now use dwarf2 ! unwind tables on arm/netbsd. ! 2001-01-15 Richard Earnshaw ! * arm.md (cbranchsi4): Correct calculation of branch ranges. ! (negated_cbranchsi4): Likewise. ! 2001-01-15 Richard Earnshaw ! * config/arm/semi.h (SUBTARGET_EXTRA_SPECS): Define. ! (SUBTARGET_EXTRA_ASM_SPEC): Define to empty string. ! (ASM_SPEC): Call subtarget_extra_asm_spec. Don't ! pass -mapcs-* options to assembler. ! * config/arm/elf.h (SUBTARGET_EXTRA_SPECS): Define. ! (SUBTARGET_EXTRA_ASM_SPEC): Define to empty string. ! (ASM_SPEC): Call subtarget_extra_asm_spec. ! 2001-01-15 Andreas Jaeger ! * config/i386/i386.c (ix86_init_builtins): Make i size_t to remove ! warnings. (ix86_expand_builtin): Likewise. ! * gencodes.c (output_predicate_decls): Make i size_t to avoid ! warning about comparison between signed and unsigned. ! ! 2001-01-14 Geoffrey Keating ! ! * expr.c (do_jump): Treat VOIDmode CONST_DOUBLEs like CONST_INTs. ! ! 2001-01-14 Ralf Baechle ! ! * config/mips/linux.h (SUBTARGET_CPP_SPEC): Default ABI is 32; change ! SUBTARGET_CPP_SPEC apropriatly. ! ! 2001-01-12 Mark Mitchell ! ! * varasm.c (make_decl_rtl): Fix typo in last change. ! ! 2001-01-14 Jeffrey Oldham ! ! * defaults.h (SUPPORTS_INIT_PRIORITY): New macro to indicate the ! linker supports the init_priority C++ attribute. ! * tm.texi (SUPPORTS_INIT_PRIORITY): Documentation for new macro. ! * config/mips/iris6.h (SUPPORTS_INIT_PRIORITY): Indicate Irix ! linker does not support init_priority C++ attribute. ! ! Sun Jan 14 22:31:30 2001 J"orn Rennecke ! ! * Makefile.in (libgcc1-test.o): Depends on stmp-int-hdrs. ! ! 2001-01-14 Neil Booth ! ! * c-parse.in (finish_parse): Add comment about cpp_destroy. ! * cp/lex.c (finish_parse): Similarly. ! * cppinit.c (cpp_cleanup): Rename cpp_destroy for clarity. ! Return the number of errors encountered. ! * cpplib.h (cpp_cleanup): Rename cpp_destroy, return int. ! * cppmain.c (main): Don't call cpp_destroy. ! ! 2001-01-14 Joseph S. Myers ! ! * configure.in: Require at least perl 5.6.0 to regenerate ! manpages. ! * configure: Regenerate. ! ! 2001-01-14 Richard Henderson ! ! * genrecog.c (DT_veclen_ge): New. ! (add_to_sequence) [MATCH_PARALLEL]: Generate one. ! (maybe_both_true_2): Simplify DT_veclen vs DT_veclen_ge. ! (nodes_identical_1): Handle DT_veclen_ge. ! (write_cond, debug_decision_2): Likewise. ! ! 2001-01-14 Richard Earnshaw ! ! * arm.md (ldmsi_postinc, ldmsi, stmsi_postinc, smsi): Delete. Replace ! with ... ! (ldmsi_postinc[432], ldmsi[432], stmsi_postinc[432], stmsi[432]): New. ! ! 2001-01-14 Neil Booth ! ! * cppmain.c (do_preprocessing): New function; most of the old ! main. ! (main): Call it to do most of the work. ! (cb): Move from global scope to set_callbacks (). ! (setup_callbacks): Get the callback pointer. ! (general_init, printer_init): Clean up code and comments. ! ! 2001-01-14 Richard Earnshaw ! ! * config/arm/semi.h (ASM_SPEC): Pass -k to the assembler when ! compiling PIC. ! ! 2001-01-14 Kazu Hirata ! ! * config/h8300/h8300.c (get_shift_alg): Update comments. ! ! Sun Jan 14 06:20:49 2001 Richard Kenner ! ! * ggc-page.c (alloc_annon): Call perror and correctly call exit. ! (alloc_page, ggc_alloc): Add casts to remove warnings. ! ! 2001-01-14 Geoffrey Keating ! ! * combine.c (simplify_comparison): Don't change `code' when ! can't reverse comparison. ! ! 2001-01-14 Richard Henderson ! ! * rtlanal.c (computed_jump_p_1): Rename from jmp_uses_reg_or_mem; ! update all call sites. Return true for all non-label constants. ! ! Sun Jan 14 10:09:48 MET 2001 Jan hubicka ! ! * i386.c (ix86_expand_compare): Add bypass_test and second_test ! parameters. ! (ix86_expand_branch): Update. ! (ix86_expand_setcc): Update to handle multiple test conditions. ! (expand_int_movcc): Likewise. ! (expand_fp_movcc): Likewise. ! * i386-protos.h (ix86_expand_compare): New. ! * i386.md (andqi_?_slp, orqi_?_slp): New. ! (conditional trap expander): Update call to ix86_expand_compare. ! ! 2001-01-14 Richard Henderson ! ! * config/vax/vax.md: Use nonimmediate_operand instead of ! general_operand in destinations. ! ! * config/vax/vax.md (indirect_jump): Use register_operand. ! ! * config/vax/vax.h (RETURN_POPS_ARGS): Max at 255 arguments. ! * config/vax/vax.md (call_pop): Turn into an expander. ! (call_value_pop): Likewise. ! (call, call_value): New. ! ! 2001-01-14 Andreas Jaeger ! ! * config/i386/i386.c (ix86_split_fp_branch): Remove unused ! variables. ! (ix86_fp_compare_mode): Add unused attribute. ! (ix86_expand_fp_movcc): Remove unused variable. ! (ix86_expand_builtin): Make fcode unsigned. ! ! * expr.c (MOVE_BY_PIECES_P): Cast MOVE_RATIO to unsigned. ! (expand_expr): Add cast to avoid signed warning. ! (store_field): Likewise. ! (store_constructor_field): Likewise. ! (store_constructor): Likewise. ! (store_expr): Likewise. ! (clear_storage): Likewise. ! (emit_group_store): Likewise. ! (emit_group_load): Likewise. ! ! 2001-01-13 Joseph S. Myers ! ! * c-common.c: Move format checking code to ... ! * c-format.c: ... here. New file. Reorder some functions and ! declarations. ! (decl_handle_format_attribute, decl_handle_format_arg_attribute): ! New functions. ! * c-common.h (decl_handle_format_attribute, ! decl_handle_format_arg_attribute): Declare. ! * Makefile.in (C_AND_OBJC_OBJS): Add c-format.o. ! (c-common.o): Adjust dependencies. ! (c-format.o): New list of dependencies. ! ! 2001-01-13 Jakub Jelinek ! ! * unroll.c (loop_iterations): If we cannot prove iteration variable ! is set once in each iteration, punt. ! ! Sun Jan 14 00:23:15 2001 Denis Chertykov ! ! * config/avr/avr.md ("strlenhi"): Remove clobber of input address. ! (*strlenhi): Remove clobber (which was buggy) of output address. ! ! 2001-01-13 Joseph S. Myers ! ! * Makefile.in (generated-manpages): Add gcc.1 ! ($(srcdir)/gcc.1): New target. ! (maintainer-clean): Delete $(srcdir)/gcc.1. ! * gcc.texi: Add macros @gccoptlist and @gol. ! * invoke.texi: Include option summary in manpage. Mark up option ! summary with @gccoptlist and @gol. Use @r in one place where ! appropriate. ! * texinfo.tex: Update to version 2000-12-11.07 from ftp.gnu.org. ! * gcc.1: Generate from invoke.texi. ! ! 2001-01-13 Richard Henderson ! ! * ggc-page.c (USING_MALLOC_PAGE_GROUPS): New; set if not using mmap. ! (struct page_entry): Add group member. ! (struct page_group): New. ! (struct globals): Add page_groups member. ! (alloc_anon): Only define for using mmap; remove valloc call. ! (page_group_index): New. ! (set_page_group_in_use): New. ! (clear_page_group_in_use): New. ! (alloc_page): Implement USING_MALLOC_PAGE_GROUPS. ! (free_page, release_pages): Likewise. ! * configure.in (with-gc): Default to ggc-page always. ! ! 2001-01-13 Alexandre Oliva ! ! * reload1.c (replace_pseudos_in_call_usage): Use ! reg_equiv_constant and reg_equiv_address, and don't try ! regno_reg_rtx first. ! ! 2001-01-13 Richard Henderson ! ! * ggc-page.c (alloc_page): Round up allocation size to one page. ! Set e->order on extra pages. ! ! 2001-01-13 Richard Henderson ! ! * genrecog.c (nodes_identical): Expand commentary. ! (write_switch): Watch out for identical nodes. ! ! 2001-01-13 Neil Booth ! ! * cppfiles.c (_cpp_fake_include): New function. ! * cpphash.h (_cpp_fake_include): New. ! * cpplib.c (do_line): Call _cpp_fake_include when entering ! header files in preprocessed input. ! * cppmain.c (cb_pragma_implementation): Remove handling. ! (setup_callbacks): Don't register pragmas. ! ! 2001-01-13 Neil Booth ! ! * extend.texi: Udate for CPP. ! ! 2001-01-13 Andreas Jaeger ! ! * reload1.c: Add prototype for replace_pseudos_in_call_usage. ! ! * regmove.c: Add prototype for replace_in_call_usage. ! ! 2001-01-13 Neil Booth ! ! * cpplib.h (cpp_pool, mi_state, mi_ind, struct cpp_macro, ! struct cpp_chunk, struct htab, struct toklist, ! struct cpp_context, CPP_STACK_MAX, struct lexer_state, ! struct spec_nodes, struct cpp_reader, CPP_OPTION, CPP_BUFFER, ! CPP_BUF_LINE, CPP_BUF_COL, CPP_BUF_COLUMN, U, ustrcmp, ustrncmp, ! ustrlen, uxstrdup, ustrchr, ufputs): Move to cpphash.h. ! (struct macro_args): Delete. ! * cpphash.h: See above. ! ! 2001-01-13 Neil Booth ! ! * cppmain.c (struct printer): Remove no_line_dirs. ! (options, cb): New. ! (main, setup_callbacks, scan_buffer, printer_init, cb_define) ! : Use options rather than CPP_OPTION. ! (setup_callbacks): Use cb rather than pfile->cb. ! (main): No need to check for a buffer. Use cpp_errors. ! (printer_init): Don't set no_line_dirs. ! (maybe_print_line): Use options not no_line_dirs. ! (cb_file_change): Don't call print_line if -P. ! ! 2001-01-13 Neil Booth ! ! * c-lex.c (init_c_lex): Use cpp_get_callbacks to set ! callbacks. ! * c-parse.in (finish_parse): Use cpp_errors. ! (__yylex): Use return value of cpp_pop_buffer. ! * cp/lex.c (finish_parse): Use cpp_errors. ! * cp/spew.c (read_token): Use return value of cpp_pop_buffer. ! ! Sat Jan 13 16:57:40 2001 Denis Chertykov ! ! * README.AVR: URLs corrected. ! ! Sat Jan 13 07:30:02 2001 Richard Kenner ! ! * c-decl.c (start_function): Don't warn if old prototype is builtin ! that's not in C's namespace. ! * libgcc2.c (_varargs): Update definition of __builtin_saveregs. ! (_bb): Add prototype for ctime. ! * config/alpha/osf.h (TRANSFER_FROM_TRAMPOLINE): Add missing protos. ! ! Sat Jan 13 09:53:32 MET 2001 Jan Hubicka ! ! * i386.c (ix86_fp_comparison_arithmetics_cost, ! ix86_fp_comparison_fcomi_cost, ix86_fp_comparison_sahf_cost, ! ix86_fp_comparison_cost): New functions. ! (ix86_expand_fp_compare): Use the costs to choose best bethod; add ! two new parameters SECOND_TEST and BYPASS_TEST; allow generating ! two-branch sequences; make static. ! (ix86_use_fcomi_compare): Do decision according to the costs. ! (split_fp_branch): New. ! * i386.md (compare-and-branch patterns): Use split_fp_branch. ! * i386-protos.h (ix86_expand_fp_compare): Remove ! (ix86_split_fp_branch): Declare. ! ! * i386.h (PREDICATE_CODES): Update codes from fcmov_comparison_operand ! and ix86_comparison_operator. ! ! * i386.c (ix86_prepare_fp_compare_args): Try to rearange the comparison ! to make it cheaper. ! ! * i386.c (put_condition_code): Output properly the unordered/ordered ! compares in fp case. ! (ix86_expand_fp_movcc): Use ix86_expand_compare infrastructure. ! ! * tm.texi (REVERSE_CONDITION): Document. ! * i386.c (ix86_fp_compare_mode): Simplify; return always CCFPmode ! in -ffast-math mode. ! * i386.h (REVERSE_CONDITION, REVERSIBLE_CC_MODE): New macro. ! ! 2001-01-13 Alexandre Oliva ! ! * config/sh/sh.c (sh_expand_epilogue): Use PR explicitly. ! ! * config/sh/sh.c (sh_expand_prologue): Let the second toggle_sz be ! optimized away. ! ! * config/sh/sh.c (mova_p): Fix test for mova_const. ! ! 2001-01-13 Neil Booth ! ! * fix-header.c (read_scan_file): Use cpp_get_callbacks and ! cpp_get_options rather than dereferencing pfile and using ! CPP_OPTION. ! * scan-decls.c (scan_decls): Use return value of ! cpp_pop_buffer rather than CPP_BUFFER. ! ! 2001-01-13 Neil Booth ! ! * cppinit.c (cpp_handle_option): help_only is now part of the ! cpp_options structure. ! * cpplib.c (cpp_errors, cpp_get_options, cpp_get_callbacks, ! cpp_set_callbacks): New functions. ! * cpplib.h (cpp_callbacks): Break out as a named structure. ! (cpp_options): Move help_only here from cpp_reader. ! (CPP_FATAL_ERRORS): Update to use cpp_errors. ! (cpp_errors, cpp_get_options, cpp_get_callbacks, ! cpp_set_callbacks): New prototypes. ! * cppmain.c (main): Update for help_only. ! ! 2001-01-13 Joseph S. Myers ! ! * Makefile.in (info, maintainer-clean, install-info, uninstall): ! Also build and remove and install and uninstall c-tree.info and ! cppinternals.info. ! ($(srcdir)/gcc.info): Add dependency on contrib.texi. ! ($(srcdir)/cppinternals.info): New target. ! * c-tree.texi: Change file name used when makeinfo used without -o ! from ir.info to c-tree.info. Add info directory entry. ! * cppinternals.texi: Add info directory entry. ! * .cvsignore: Update. ! ! 2001-01-12 Jakub Jelinek ! ! * c-typeck.c (store_init_value): Don't require constant initializer ! elements with -pedantic -std=c99. ! (digest_init): Change error about non-constant initializer elements ! into pedwarn. ! (constructor_range_end): Remove. ! (constructor_incremental, designator_depth, ! designator_errorneous): New variables. ! (struct constructor_stack): Remove range_end, add incremental. ! (struct constructor_range_stack, constructor_range_stack): New. ! (struct initializer_stack): Add constructor_range_stack. ! (finish_init): Set it. ! (start_init): Likewise. require_constant_elements for non-static ! trees only if not flag_isoc99. ! (really_start_incremental_init): Remove constructor_range_end, add ! constructor_incremental. ! (pop_init_level): Likewise. ! (push_init_level): Likewise. If implicit and the subobject had some ! value set already, preinitialize the level with it. ! Warn about missing braces only if not pushing due to designators. ! (set_designator, push_range_stack): New functions. ! (set_init_label): Use them. ! (set_init_index): Likewise. Remove constructor_range_end. ! Error if designator index is outside of array bounds. ! (add_pending_init): Compare values of purpose index trees, not the ! trees themselves. Allow overwriting of already initialized element. ! Issue a warning if it had side-effects. ! (set_nonincremental_init, set_nonincremental_init_from_string): New ! functions. ! (pending_init_member): Rename to... ! (find_init_member): ...this function. Call set_nonincremental_init ! if necessary. Compare values of purpose index trees, not the trees ! themselves. Return the actual value, not just non-zero if something ! is found. ! (output_init_element): Remove checks for duplicates. ! If field has zero size, only check the initializer for correctness. ! Call set_nonincremental_init if necessary. Push RECORD/ARRAY into AVL ! if constructor_incremental is zero. Change error about initializers ! not computable at load time into pedwarn. ! (output_pending_init_elements): Compare bit positions, not ! FIELD_DECLs to take into account zero-sized fields. ! (process_init_element): Use constructor_range_stack to fill all ! ranges in the designator lists from current level up. ! * extend.texi: Update documentation for labeled elements. ! ! 2001-01-12 Alexandre Oliva ! ! * calls.c (emit_library_call_value_1): Add USEs and CLOBBERs ! to function usage for arguments passed by reference. Optimize ! callee-copied arguments. ! * regmove.c (replace_in_call_usage): New function. ! (fixup_match_1): Call it. ! * cse.c (cse_insn): Canonicalize registers in function usage. ! * reload1.c (replace_pseudos_in_call_usage): New function. ! (reload): Call it. ! ! * Makefile.in: Reverted yesterday's wrong patch. Installed the ! right version. ! ! 2001-01-12 Jakub Jelinek ! ! * config/alpha/alpha.c (alpha_expand_block_move): GET_MODE of tmp, ! not XEXP (tmp, 0). ! ! 2001-01-12 DJ Delorie ! ! * Makefile.in (bootstrap): rename stages to be mnemonic. Add ! restageN, unstageN, bubblestrap, quickstrap, and cleanstrap ! targets. ! ! 2001-01-12 Joseph S. Myers ! ! * cpp.texi, extend.texi, gcc.texi, install.texi, invoke.texi, ! tm.texi: Consistently refer to ISO C instead of ANSI C. Refer to ! -std options alongside references to -ansi. Update some ! documentation for C99. ! * cpp.1: Regenerate. ! ! 2001-01-12 Andreas Jaeger ! ! * haifa-sched.c (restore_line_notes): Remove argument block B ! since it's unused. ! * sched-ebb.c (schedule_ebb): Change caller. ! * sched-rgn.c (schedule_region): Likewise. ! * sched-int.h (restore_line_notes): Adjust prototype. ! ! * loop.h: Remove wrong declaration of doloop_condition_get. ! ! 2001-01-12 Phil Edwards ! ! * extend.texi: Move C++-extension-related node from the C section ! into the C++ section. ! ! 2001-01-12 Joseph S. Myers ! ! * extend.texi: Refer to an array of pointers to functions instead ! of one of functions. ! ! Fri Jan 12 12:08:12 MET 2001 Andreas Jaeger ! Jan Hubicka ! ! * combine.c (reversed_comparison): Fix typo in last patch. ! Check X for NULL. ! (combine_reversed_comparison_code): Make static to follow ! prototype declaration. ! ! 2001-01-12 Phil Edwards ! ! * install.texi: Remove misplaced duplicate entry. ! ! 2001-01-11 Ulrich Drepper ! ! * config/float-i386.h: Define FLT_EVAL_METHOD and DECIMAL_DIG for C99. ! ! Thu Jan 11 17:06:30 EST 2001 John Wehle (john@feith.com) ! ! * final.c: (leaf_function_p): Fix typo. ! ! 2001-01-11 Zack Weinberg ! ! * aclocal.m4 (AC_FUNC_MMAP_ANYWHERE): Completely rewritten. ! Now defines HAVE_MMAP_DEV_ZERO and/or HAVE_MMAP_ANON depending ! which you have. ! (AC_FUNC_MMAP_FILE): Don't AC_REQUIRE AC_FUNC_MMAP_ANYWHERE. ! * configure.in: Set GGC to ggc-page if any of mmap_dev_zero, ! mmap_anon, and valloc is available. ! * ggc-page.c: Restructure ifdef logic to match new autoconf ! spec. Don't throw away the test page in init_ggc. ! ! * configure, config.in: Regenerate. ! ! 2001-01-12 Michael Hayes ! ! * loop.h (total_biv_increment): Constify iv_class pointer. ! (struct induction): Replace `mem_mode' with `mem' rtx. ! * unroll.c (total_biv_increment): Constify iv_class pointer. ! * loop.c (loop_giv_reduce_benefit): Derive mem mode from mem rtx. ! (find_mem_givs, combine_givs_p): Likewise. ! (debug_ivs, debug_iv_class, loop_ivs_dump, loop_iv_class_dump): New. ! ! 2001-01-10 Thomas Pfaff ! ! * gthr-win32.h (__gthread_objc_thread_get_data): Save and restore Win32 ! LastError. ! (__gthread_getspecific): Ditto. ! ! Fri Jan 12 00:04:00 MET 2001 Jan Hubicka ! * i386.c (ix86_comparison_operator, fcmov_comparison_operator, ! put_condition_code): Convert fp comparison codes to integer ! before handling. ! (ix86_expand_fp_compare): Postnote the fp comparison code converison ! to final. ! * i386.c (unsigned_comparison, no_comparison_operator): Kill. ! * i386-protos.h (no_comparison_operator): Kill. ! * i386.c (ix86_expand_fp_compare): Fix ordered/unordered confussion. ! * combine.c (REVERSIBLE_CC_MODE): Remove. ! (reversible_comparison_p): Remove. ! (combine_reversed_comparison_code): New. ! (reversed_comparison): New. ! (combine_simplify_rtx): Use ! combine_reversed_comparison_code/reversed_comparison instead ! of reversible_comparison_p. ! (simplify_if_then_else): Likewise. ! (simplify_set): Likewise. ! (simplify_logical): Likewise. ! (if_then_else_cond): Likewise. ! (known_cond): Likewise. ! (simplify_comparison): Likewise. ! 2001-01-11 Alan Lehotsky ! * builtins.c (std_expand_builtin_va_start): Handle varargs when ! sizeof (int) is larger than sizeof(__word__). ! 2001-01-11 Neil Booth ! * cppinit.c (do_includes): Fix typo. ! 2001-01-11 Stephane Carrez ! * config/m68hc11/m68hc11.md (cmphi_1): Make sure reloading ! in S_REGS does not occur because not all sources are possible ! when a S_REGS is a destination (sometimes needs a clobber). ! (movqi_const0, zero_extendhisi2, zero_extendqisi2): Likewise. ! (zero_extendhidi2, extendqisi2, extendqihi2, extendhisi2): Likewise. ! (anddi3, iordi3, xordi3, negqi2, one_cmplhi2, one_cmplqi2: Likewise. ! (ashldi3_const32, ashldi3_const1, ashlsi3_const16): Likewise. ! (ashlsi3_const1, ashlhi3_2, ashlqi3_const1, ashrhi3): Likewise. ! (ashrqi3_const1, lshrdi3_const32, lshrdi3_const63): Likewise. ! (lshrdi_const1, lshrsi3_const16): Likewise. ! (*addhi3, lshrsi3_const1, lshrqi3_const1): Likewise. ! (*movhi_68hc12, *movqi_68hc12): Likewise. ! (movstrictqi): Make sure reloading in D_REGS as a destination ! does not happen. ! 2001-01-11 Neil Booth ! * cppspec.c (DEFAULT_WORD_SWITCH_TAKES_ARG): Add -MQ. ! 2001-01-11 Neil Booth ! * cppinit.c (cpp_start_read): If -fpreprocessed, ignore ! -D, -U and -A, and don't initialize the builtins. ! (do_includes): Error if -include or -imacros with -fpreprocessed. ! * cppmain.c (cb_define, cb_undef): Unconditionally process ! the callback. ! * tradcpp.c (main): Fix typo. ! 2000-01-11 Mark Elbrecht ! * cppfiles.c (cpp_included, find_include_file, _cpp_execute_include) ! (read_name_map): Use IS_ABSOLUTE_PATH. ! * tradcpp.c (get_filename): Likewise. ! 2001-01-11 Stephane Carrez ! * config/m68hc11/m68hc11.md (*adcq, *subcq): Fix operand numbers. ! (*ashlsi3_const16_zexthi, *ashlsi3_const1): Likewise. ! (*lshrsi3_const, *lshrsi3_const1, *lshrsi3_const16): Likewise. ! (*ashrsi3, *ashrsi3_const, *ashlsi3, *ashlsi3_const): Likewise. ! (*ashlsi3_const1, *lshrsi3, *ashlsi3_const16): Likewise. ! (cmphi_z_used): Don't use '@' for the output. ! (tstqi_z_used): Likewise. ! (cmpqi_z_used): Likewise. ! (one_cmplsi2): Likewise. ! 2001-01-11 Alexandre Oliva ! * config/sh/sh.c (barrier_align): Recognize branch around far ! branch and redundant insn. ! 2001-01-11 Neil Booth ! * invoke.texi: Restore documentation of the drivers' switches -MD ! and -MMD. ! 2001-01-11 Alexandre Oliva ! * config/sh/sh.h (LABEL_ALIGN): Use UNSPECV_ALIGN instead of 1. ! * Makefile.in (check-gcc//%, check-g++//%, check-g77//%, ! check-objc//%): Support parallel testing of multilibs. ! (TESTSUITEDIR): Set to testsuite by default, but override for ! parallel testing. ! (check-gcc, check-g++, check-g77, check-objc): Enter ! $(TESTSUITEDIR). ! 2001-01-11 Bernd Schmidt ! * alias.c (throughout): Use REGNO, rather than ORIGINAL_REGNO. ! * sched-deps.c (deps_may_trap_p): Likewise. ! * basic-block.h: Remove a comment. ! * flow.c (PROP_POSTRELOAD): Remove. ! (update_life_info): Don't add it to prop_flags. ! (mark_set_1): Lose the code that was enabled by it. ! 2001-01-11 Michael Hayes ! * flow.c (flow_call_edges_add): New. ! * basic_block.h (flow_call_edges_add): New. ! 2001-01-11 J"orn Rennecke ! * reload1.c (move2add_note_store): Update reg_set_luid even if ! base reg remains the same. ! 2001-01-10 Nick Clifton ! * config/d30v/d30v.c (d30v_init_machine_status): Initialise ! machine_function structure to zero. ! Add prototypes for machine_status functions. ! 2001-01-10 Mark Mitchell ! * c-common.h (CTI_VOID_LIST): Remove. ! (void_list_node): Likewise. ! * tree.h (TI_VOID_LIST_NODE): New enumeral. ! (void_list_node): New macro. ! * config/arm/arm.c (arm_init_builtins): Use void_list_node. ! * config/i386/i386.c (ix86_init_builtins): Likewise. ! * config/ia64a/ia64.c (ia64_init_builtins): Likewise. ! 2001-01-10 Neil Booth ! * Makefile.in (tradcpp0): Depend on mkdeps.h. Link mkdeps.o ! * cppinit.c (cpp_start_read): Update comment, remove unneeded ! if statement. ! * tradcpp.c: Include mkdeps.h. ! (deps, print_deps_phony_targets, deps_append, output_deps, ! init_dependency_output, output_deps): New. ! (deps_buffer, deps_allocated_size, deps_size, deps_column, ! deps_output): Delete. ! (print_deps_missing_files): Rename deps_missing_files. ! (inhibit_output): Make global. ! (main): Delete inhibit_output, deps_stream, deps_target. ! Use mkdeps functionality in the same way as cpplib. Remove ! -g3 handling. Handle -MF, -MP, -MQ, -MT. Update handling of ! -M and -MM. Remove old handling of deps via deps_out, and ! old reading of environment variables. ! (get_filename): Update to use deps_add_dep. ! 2001-01-10 Mark Mitchell ! * output.h (make_function_rtl): Remove prototype. ! (make_decl_rtl): Likewise. ! * varasm.c (make_function_rtl): Remove. ! (make_decl_rtl): Determine top-levelness from DECL_CONTEXT, rather ! than from a third parameter. ! * tree.h (make_decl_rtl): Remove last parameter. ! * c-decl.c (builtin_function): Remove last argument in call to ! make_decl_rtl; use make_function_rtl instead of make_decl_rtl. ! (start_function): Likewise. ! * except.c (call_get_eh_context): Likewise. ! * expr.c (emit_block_move): Likewise. ! (clear_storage): Likewise. ! * profile.c (output_func_start_profiler): Likewise. ! * toplev.c (rest_of_decl_compilation): Likewise. ! * objc/objc-act.c (create_builtin_decl): Likewise. ! (synth_module_prologue): Likewise. ! (generate_static_reference): Likewise. ! (build_selector_reference_decl): Likewise. ! (build_class_reference_decl): Likewise. ! (build_objc_string_decl): Likewise. ! (build_protocol_reference): Likewise. ! 2001-01-10 Richard Henderson ! * hwint.h: Revert yesterday's change. ! 2001-01-10 Nick Clifton ! * function.h (save_machine_status): Delete. ! (restore_machine_status): Delete. ! Amend comment describing {init|mark|free}_machine_status. ! * function.c (save_machine_status): Delete. ! (restore_machine_status): Delete. ! Amend comment describing {init|mark|free}_machine_status. ! (push_function_context_to): Remove invocation of ! save_machine_status. ! (pop_function_context_from): Remove invocation of ! restore_machine_status. ! * emit-rtl.c (init_emit_once): Amend comment describing ! {init|mark|free}_machine_status. ! * tm.texi (Per-Function Data): New node. Describe the ! INIT_EXPANDERS macro and the {init|mark|free}_machine_status ! function pointers. ! 2001-01-10 Neil Booth ! * cppinit.c (OPT_g): Remove. ! (cpp_handle_option): Update for removed -g3. ! (print_help): Update. ! * cpplib.h (struct cpp_options): Remove debug_output. ! * cppmain.c (setup_callbacks, cb_define): Update. ! * gcc.c (cpp_options): Translate -g3 to -dD. ! 2001-01-10 Aldy Hernandez ! * config/i960/i960.md: Change modifier to + on the zero_extract ! pattern after the (rotate -2 reg) canonicalization pattern. ! 2001-01-10 Richard Henderson ! * config/alpha/alpha.c (alpha_free_machine_status): New. ! (override_options): Install it. ! (alpha_mark_machine_status): Verify machine non-null. ! * config/i386/i386.c (ix86_free_machine_status): New. ! (override_options): Install it. ! (ix86_init_machine_status): Use xcalloc. ! (ix86_mark_machine_status): Verify machine non-null. ! * config/ia64/ia64.c (ia64_free_machine_status): New. ! (ia64_override_options): Install it. ! (ia64_mark_machine_status): Verify machine non-null. ! Wed Jan 10 11:34:39 2001 Jeffrey A Law (law@cygnus.com) ! * function.c (instantiate_virtual_regs): Instantiate virtual ! registers found in CALL_INSN_FUNCTION_USAGE. ! 2001-01-10 Joseph S. Myers ! * i386.h (CPP_CPU_SPEC): Allow for -std=c* and -std=i* as ! equivalent to -ansi in disabling -Di386. ! Wed Jan 10 16:38:31 MET 2001 Jan Hubicka ! * i386.c (ix86_fp_compare_code_to_integer, ix86_fp_comparison_codes): ! new functions. ! (ix86_expand_fp_compare): Make trivial use of new infrastructure. ! 2001-01-10 Richard Earnshaw ! * arm.c (arm_init_builtins): Temporarily disable xscale builtins. ! 2001-01-10 Joseph S. Myers ! * invoke.texi: Document that -fcond-mismatch isn't supported for ! C++. ! 2001-01-10 Joseph S. Myers ! * gcc.texi: Define macro gcctabopt. ! * invoke.texi: Add manpage sections BUGS and AUTHOR. Use ! @command, @env and @option in some places where appropriate. Use ! @gcctabopt where appropriate. Put URLs and email addresses inside ! @w. ! 2001-01-10 Nathan Sidwell ! * gcc.c (cpp_options): Set MD file name from output ! filename, if specified. ! (suffix_subst): New static variable. ! (do_spec): Clear it. ! (do_spec_1, case '.'): Handle new `%.suffix' spec. ! Clear it. ! (give_switch): Handle suffix_subst. ! 2001-01-10 Phil Edwards ! * invoke.texi: Fix another typo. ! 2001-01-10 Phil Edwards ! * invoke.texi: Fix typo. ! 2001-01-10 Neil Booth ! * c-lang.c (lang_hooks): Update. ! (lang_decode_option): Remove. ! (lang_init_options): Rename c_init_options. ! * toplev.c (main): Use lang_hooks for lang_init_options ! and lang_decode_option. ! * toplev.h (lang_hooks): Add 2 new hooks. ! * tree.h: Remove lang_init_options and lang_decode_option. ! * cp/cp-tree.h (lang_decode_option): Rename cxx_decode_option. ! * cp/decl2.c: Similarly. ! * cp/lex.c (lang_init_options): Rename cxx_init_options. ! (lang_hooks): Update. ! * f/com.c (f_init, f_finish): Rename ffe_init, ffe_finish ! for consistency. ! (lang_init_options): Rename ffe_init_options. ! (lang_hooks): Update. ! (lang_decode_option): Remove. ! * java/lang.c (lang_init_options): Rename java_init_options. ! (lang_decode_option): Rename java_decode_option. ! (lang_hooks): Update. ! * objc/objc-act.c (lang_init_options): Rename objc_init_options. ! (lang_decode_option): Rename objc_decode_option. ! (lang_hooks): Update. ! 2001-01-09 Nick Clifton ! * config/d30v/d30v.c (d30v_eh_epilogue_sp_ofs): Delete. ! (d30v_return_addr_rtx): Delete. ! (d30v_expand_epilogue): Use eh_epilogue_sp_ofs field in the ! cfun->machine structure. ! (struct machine_function): Move to d30v.h ! (d30v_save_machine_status): Delete. ! (d30v_restore_machine_status): Delete. ! (d30v_init_machine_status): New Function. ! (d30v_mark_machine_status): New Function. ! (d30v_free_machine_status): New Function. ! (d30v_init_expanders): Use new functions. ! (d30v_return_addr): Use ra_rtx field in cfun->machine. ! (d30v_add_gc_roots): Remove d30v_eh_epilogue_sp_ofs and ! d30v_return_addr_rtx. ! * config/d30v/d30v.h (struct_machine): Move here. ! Add eh_epilogue_sp_ofs field. ! *config/d30v/d30v.md (epilogue): Initialise eh_epilogue_sp_ofs ! field in cfun->machine structure. ! Tue Jan 9 21:34:57 2001 John David Anglin ! * pa32-regs.h (CONDITIONAL_REGISTER_USAGE): When generating pic code, ! PIC_OFFSET_TABLE_REGNUM_SAVED is a call_used register. ! * pa64-regs.h (CONDITIONAL_REGISTER_USAGE): Likewise. ! Tue Jan 9 21:25:19 2001 Jeffrey A Law (law@cygnus.com) ! * objc/lang-options.h: Remove bogus reference to ! Java trademark. ! 2001-01-09 Kazu Hirata ! * config/h8300/h8300.c (get_shift_alg): Use a struct shift_info to ! return the result. ! 2001-01-09 Alan Lehotsky ! * reload.c (find_reloads_address): Check for eliminable registers ! when substituting a constant expression for a pseudo. ! 2001-01-09 Joseph S. Myers ! * c-common.c (enum format_type): Add format_type_error. ! (decode_format_type): New function. ! (decl_attributes): Use it. ! (format_kind_info): Adjust comment. ! 2001-01-09 David O'Brien ! * config.gcc (*-*-gnu*, i[34567]86-*-elf*, i[34567]86-*-linux*libc1, ! i[34567]86-*-linux*, i[34567]86-*-moss*): Specify needed platform specific ! files in tm_file. ! * config/i386/gnu.h: Don't include required platform specific .h files, ! tm.h will do it instead. ! * config/i386/i386elf.h: Likewise. ! * config/i386/linux.h: Likewise. ! * config/i386/moss.h: Likewise. ! * config/mips/gnu.h: Likewise. ! 2001-01-09 Franz Sirl ! * config.gcc (powerpc-*-beos*): Include ${tm_file} and rs6000/aix.h. ! (rs6000-ibm-aix3.[01]*): Likewise. ! (rs6000-ibm-aix3.2.[456789]*, powerpc-ibm-aix3.2.[456789]*): Likewise. ! (rs6000-ibm-aix4.[12]*, powerpc-ibm-aix4.[12]*): Likewise. ! (rs6000-ibm-aix4.[3456789]*, powerpc-ibm-aix4.[3456789]*): Likewise. ! (rs6000-ibm-aix[56789].*, powerpc-ibm-aix[56789].*): Likewise. ! (powerpc-*-sysv*): Include {tm_file}. svr4.h and rs6000/sysv4.h. ! (powerpc-*-eabiaix*): Likewise. ! (powerpc-*-eabisim*): Likewise. ! (powerpc-*-elf*): Likewise. ! (powerpc-*-eabi*): Likewise. ! (powerpc-*-rtems*): Likewise. ! (powerpc-*-linux*libc1): Likewise. ! (powerpc-*-linux*): Likewise. ! (powerpc-wrs-vxworks*): Likewise. ! (powerpcle-wrs-vxworks*): Likewise. ! (powerpcle-*-sysv*): Likewise. ! (powerpcle-*-elf*): Likewise. ! (powerpcle-*-eabisim*): Likewise. ! (powerpcle-*-eabi*): Likewise. ! (powerpcle-*-solaris2*): Likewise. ! * config/rs6000/aix31.h: Delete includes. ! * config/rs6000/aix3newas.h: Likewise. ! * config/rs6000/aix41.h: Likewise. ! * config/rs6000/aix43.h: Likewise. ! * config/rs6000/beos.h: Likewise. ! * config/rs6000/rtems.h: Likewise. ! * config/rs6000/sysv4.h: Likewise. ! 2001-01-09 Kazu Hirata ! * config/h8300/h8300.c (get_shift_alg): Remove an argument cpu. ! Change an argument mode of machine_mode to shift_mode of ! shift_mode. Remove an extra error check. ! (emit_a_shift): Adopt to the new calling prototype of ! get_shift_alg. ! (function_prologue): Fix code for a monitor ! function. Support H8/S. ! (function_epilogue): Do not output pop for a monitor function. ! 2001-01-09 Nick Clifton ! * config/rs6000/rs6000.c (rs6000_sysv_varargs_p): Delete. ! (setup_incoming_varargs): Use sysv_varargs_p field of the ! cfun->machine structure. ! (struct machine_function): Move to rs6000.h ! (rs6000_save_machine_status): Delete. ! (rs6000_restore_machine_status): Delete. ! (rs6000_init_machine_status): New Function. ! (rs6000_free_machine_status): New Function. ! (rs6000_init_expanders): Use new functions. ! * config/rs6000/rs6000.h (rs6000_sysv_varargs_p): Delete ! export. ! (struct machine_function): Move here. ! * config/rs6000/sysv4.h (RS6000_VARARGS_AREA): Use ! sysv_varargs_p field of the cfun->machine structure. ! * config/rs6000/rs6000-protos.h (rs6000_save_machine_status): ! Remove prototype. ! (rs6000_restore_machine_status): Remove prototype. ! 2001-01-09 Richard Henderson ! * sched-int.h (struct deps): Add max_reg, reg_last_in_use; merge ! reg_last_uses, reg_last_sets, reg_last_clobbers into struct deps_reg. ! * sched-deps.c (sched_analyze_1): Update uses of struct deps. ! (sched_analyze_2, sched_analyze_insn): Likewise. ! (sched_analyze, init_deps): Likewise. ! (free_deps): Likewise. Iterate with EXECUTE_IF_SET_IN_REG_SET. ! * sched-rgn.c (propagate_deps): Likewise. Remove max_reg argument. ! (compute_block_backward_dependences): Update propagate_deps call. ! 2001-01-09 Mark Elbrecht ! * gcc.c (process_command): Set switches[n_switches].ordering to 0. ! 2001-01-09 Neil Booth ! * cppinit.c (OPT_MD, OPT_MMD): Restore. ! (cpp_handle_option): Handle them. ! (cpp_post_options): Ensure one of -M or -MM is specified with ! any other -M? option. ! (init_dependency_output): Suppress output with -MG. ! 2001-01-09 Neil Booth ! * cpp.texi: Update. ! * invoke.texi: Update. ! 2001-01-09 Bernd Schmidt ! * sh.md (reload_outsf): Generate recognizable patterns for ! TARGET_SH3E. ! 2001-01-09 Neil Booth ! * c-lang.c (lang_hooks): Update. ! (lang_init): Rename c_init. ! (lang_finish): Remove. ! * toplev.c (compile_file): Use lang_hooks for lang_init () ! and lang_finish (). ! * toplev.h (lang_hooks): Add init () and finish (). ! * tree.h (lang_init, lang_finish): Remove. ! * cp/tree.h (lang_init, lang_finish): Remove. ! * cp/decl2.c (cxx_post_options, lang_hooks): Move to cp/lex.c. ! * cp/lex.c (cxx_init, cxx_finish, cxx_post_options, ! lang_hooks): New. ! (lang_init, lang_finish): Remove. ! * f/com.c (lang_init, lang_finish): Rename f_init, f_finish. ! (lang_hooks): Update. ! * java/lang.c (lang_init): Rename java_init. ! (lang_finish): Remove. ! (lang_hooks): Update. ! * objc/objc-act.c (lang_init): Rename objc_init. ! (lang_finish): Remove. ! (lang_hoooks): Update. ! 20001-01-09 Graham Stott ! * cppfiles.c (_cpp_execute_include): Move `len` initialisation ! after `ptr` is initialised. ! 2001-01-09 Alexandre Oliva ! * config/sh/sh.h (STATIC_CHAIN_REGNUM): Change from r13 to r3. ! (INITIALIZE_TRAMPOLINE): Adjust accordingly. ! * config/sh/sh.c (sh_expand_prologue): Use r1 as temporary for ! stack adjusts, instead of r3. ! 2001-01-09 Michael Hayes ! * flow.c (flow_loop_scan): Break out of ... ! (flow_loops_find) ... here. ! * basic-block.h (flow_loop_scan): New. ! (LOOP_ENTRY_EDGES, LOOP_EXIT_EDGES): Add. ! (LOOP_EDGES, LOOP_EXITS_DOMS, LOOP_ALL): Redefine. ! 2001-01-09 Alexandre Oliva ! * cppinit.c (cpp_cleanup): NULLify macro_buffer and zero ! macro_buffer_len. ! * cppmacro.c (cpp_macro_definition): Reset macro_buffer_len when ! realloc()ing macro_buffer. ! * hwint.h (HOST_BITS_PER_WIDE_INT, HOST_WIDE_INT): Use long long ! if it's wider than long and the target's long is wider than the ! host's. ! 2001-01-09 Mark Mitchell ! Remove support for using UWIN as a host machine. ! * configure.in: Issue an error message. ! * configure: Regenerated. ! * config.gcc: Remove xm_* UWIN configury. ! * config/i386/xm-uwin.h: Remove. ! 2001-01-08 Nick Clifton ! * config/v850/v850.c (ra_rtx): Delete. ! (v850_save_machine_status): Delete. ! (v850_restore_machine_status): Delete. ! (v850_init_machine_status): New function. ! (v850_mark_machine_status): New function. ! (v850_free_machine_status): New function. ! (v850_return_addr): Use ra_rtx field in machine structure. ! (v850_init_expanders): Use new functions. ! * config/v850/v850-protos.h: Fix prototypes for v850_output_* ! * config/v850/v850.c: Change arguments to v850_output+* functions ! to take a const char *, to avoid compile time warning. ! * config/v850/v850.h (ASM_OUTPUT_LABELREF): Undefine, not needed. ! (USER_LABEL_PREFIX): Redefine. ! 2000-01-08 Jim Wilson ! * sched-rgn.c (BITSET_ADD, BITSET_REMOVE, bitset_member): Cast ! 1 to unsigned HOST_WIDE_INT before left shift. ! 2001-01-08 Nick Clifton ! * config/arm/arm.c (arm_mark_machine_status): Check to see if ! the machine structure has been allocated. ! (arm_free_machine_status): New function: Free the machine ! specific function structure. ! 2001-01-08 Richard Henderson ! * jump.c (simplejump_p): Revert last change. ! 2001-01-08 Neil Booth ! * cppinit.c (init): Rename init_library. ! (cpp_create_reader): Update. ! * gcc.c (cpp_options): If -o given, use it as the target of ! any -M options. ! 2001-01-08 Richard Earnshaw ! * arm.c (arm_arch5e): New variable. ! (all_cores): XScale is a 5TE device. ! (arm_override_options): Set arm_arch5e. ! (arm_init_builtins): __builtin_prefetch is in arch5e. ! * arm.h (arm_arch5e): Declare it. ! * arm.h (PREDICATE_CODES): Add arm_hard_register_operand. ! * arm.md (define_constants): Add defines for UNSPEC and ! UNSPEC_VOLATILE insns. Update all users. ! (define_constants): Add constants for IP_REGNUM, SP_REGNUM, PC_REGNUM. ! * arm.c (multi_register_push, note_invalid_constants) ! (emit_multi_reg_push, emit_sfm, expand_prologue): Use constants. ! * arm.h (SP_REGNUM, IP_REGNUM, PC_REGNUM): Delete defines. ! (STACK_POINTER_REGNUM): Define in terms of SP_REGNUM. ! Mon Jan 8 16:14:56 MET 2001 Jan Hubicka ! * jump.c (jump_optimize_1): Use reversed_comparison_code ! instead of can_reverse_comparison_p. ! (jump_back_p): Likewise. ! (invert_exp_1): Likewise. ! (thread_jumps): Likewise. ! * simplify-rtx.c (simplify_unary_operation): Likewise. ! (simplify_ternary_operation): Likewise. ! * cse.c (find_comparison_args): Convert to use ! can_reverse_comparison_p. ! (record_jump_equiv): Likewise. ! 2001-01-08 Richard Earnshaw ! * arm.h (HARD_REGNO_RENAME_OK): Delete. ! (EPILOGUE_USES): Define. ! (INITIAL_ELIMINATION_OFFSET): Current prologue code does not ! automatically stack the LR if it isn't live. ! Mon Jan 8 13:46:02 MET 2001 Jan Hubicka ! * i386.c (ix86_expand_int_movcc): Take care to reverse fp conditions ! properly. ! Sun Jan 7 18:37:43 2001 Mark P Mitchell ! * ggc-page.c (max_alignment): New structure. ! (MAX_ALIGNMENT): New macro. ! (init_ggc): Use it to round up the sizes in the ! extra_order_size_table. ! 2001-01-07 Franz Sirl ! * config/rs6000/rs6000.h (EPILOGUE_USES): New, mark link register ! after reload. ! 2001-01-07 Kaveh R. Ghazi ! * builtins.def (BUILT_IN_FPRINTF): New entry. ! * c-common.c (c_expand_builtin_fprintf): New function. ! (init_function_format_info): Handle __builtin_fprintf. ! (c_common_nodes_and_builtins): Declare fprintf/__builtin_fprintf. ! (c_expand_builtin): Handle BUILT_IN_FPRINTF. ! * c-decl.c (duplicate_decls): Adjust comment. ! * extend.texi (fprintf): Document new builtin. ! 2001-01-07 Richard Henderson ! * jump.c (simplejump_p): Recognize any single_set jump ! of the proper form. ! 2001-01-07 Richard Henderson ! * configure.in (slibdir): Accept an --with-slibdir option. ! Use "test" not "[" in configure. Default to $(libdir). ! * config/t-linux (SHLIB_INSTALL): Double quote slibdir; ! fix typo in rm -f. ! * config/t-aix43 (SHLIB_INSTALL): Likewise. ! * config/alpha/t-osf4 (SHLIB_INSTALL): Likewise. ! (SHLIB_LINK): Create links for the soname. ! * config/mips/t-iris6: Likewise. ! * config/sparc/t-slibgcc: Likewise. ! * config/sparc/t-slibgcc-sld: Likewise. ! 2001-01-07 Jakub Jelinek ! * config/i386/i386.c (constant_call_address_operand): Accept ! (const (plus (symbol_ref) (const_int))). ! * config/i386/i386.h (PREDICATE_CODES): Add CONST for ! constant_call_address_operand. ! 2001-01-08 Michael Hayes ! * libgcc2.h (W_TYPE_SIZE): Fix case where MIN_UNITS_PER_WORD == 1 ! and LONG_LONG_TYPE_SIZE > 32. ! 2001-01-07 Gerald Pfeifer ! * jump.c (reversed_comparison_code_parts): Fix typo introduced by ! the previous change. ! Sun Jan 7 19:37:48 MET 2001 Jan Hubicka ! * jump.c (reversed_comparison_code_parts, reversed_comparison_code): ! New. ! (can_reverse_comparison_p): Rewrite to use reversed_comparison_code. ! (reverse_condition_maybe_unordered): Abort on unsigned comparisons. ! * rtl.h (reversed_comparison_code_parts, reversed_comparison_code): ! Declare. ! 2001-01-07 Neil Booth ! * fix-header.c (read_scan_file): s/pfile/scan_in/. ! 2001-01-07 Neil Booth ! * c-lang.c (c_post_options): Call cpp_post_options. ! * objc/objc-act.c (objc_post_options): Similarly. ! * cppmain.c (main): Similarly. ! * fix-header.c (read_scan_file): Similarly. ! * cppinit.c (cpp_start_read): Move option consistency checks ! to cpp_post_options. Don't call init_dependency_output. ! If needed, add default target and main file dependency. ! (OPT_MD, OPT_MMD): Remove. ! (OPT_MF): New. ! (cpp_handle_option): Update for OPT_* changes. ! (cpp_post_options): New. ! (init_dependency_output): Command line -MF overrides environment ! variables. Don't set default target etc. Suppress output ! if dependencies are going to stdout. ! (print_help): Update. ! * cpplib.h (cpp_post_options): New. ! * gcc.c (cpp_options): Update for -MD, -MMD, -MF. ! Sun Jan 7 14:44:19 MET 2001 Jan Hubicka ! * jump.c (comparison_dominates_p): Support unordered compares. ! Sun Jan 7 14:39:07 MET 2001 Jan Hubicka ! * simplify-rtx.c (simplify_relational_operation): Always simplify ! ORDERED and UNORDERED when FLAG_FAST_MATH. Handle properly UNLE ! and UNGE. ! Sun Jan 7 14:35:13 MET 2001 Jan Hubicka ! * combine.c (combine_simplify_rtx): Recognize the unordered compares. ! (nonzero_bits): Likewise. ! (simplify_comparison): Likewise. ! (num_sign_bit_copies): Likewise; return more sane value depending ! on STORE_FLAG_VALUE. ! (known_cond): Do not assume EQ to be always true for equivalent ! operands. ! Sun Jan 7 14:31:57 MET 2001 Jan Hubicka ! * cse.c (fold_rtx): Handle unordered comparisons. ! Sun Jan 7 13:49:19 MET 2001 Jan Hubicka ! * rtlanal.c (set_of_1): New static function. ! (reg_set_last_1, reg_set_p_1, reg_set_reg, reg_set_flag, ! reg_set_last_unknown, reg_set_last_value, reg_set_last_first_regno, ! reg_set_last_last_regno): Remove. ! (set_of): New global function. ! (set_of_data): New structure. ! (reg_set_p, reg_set_last): Revamp for set_of. ! * rtl.h (set_of): New. ! 2001-01-07 Joseph S. Myers ! * c-common.c (c_common_nodes_and_builtins): Add _Exit builtin. ! * extend.texi: Document _Exit builtin. ! 2001-01-07 Neil Booth ! * (initialize, initialize_builtins, ! initialize_dependency_output, initialize_standard_includes): ! Rename s/initialize/init. Update. ! (init_dependency_output): Move to after ! cpp_handle_options, the correct location temporally at least. ! (opt_comp): Move next to init (), its caller. Fix prototype. ! (init): Make "initialized" local scope. ! (cpp_create_reader): Always call init (). ! (cpp_start_read): Update. ! (output_deps): New function, broken out of cpp_finish. ! (cpp_finish): Break out output_deps. ! 2001-01-07 Richard Henderson ! * collect2.c (COFF specific stuff): Revert 12-06 patch ! to prototype system functions. ! 2001-01-07 Michael Hayes ! * hard-reg-set.h: Add multiple include guard. ! * basic-block.h (struct loop): Add `sink' field. ! * loop.h: Include sbitmap.h, hard-reg-set.h, and basic-block.h. ! (emit_iv_add_mult): Delete. ! (loop_iv_add_mult_hoist, loop_iv_add_mult_sink): Define. ! (loop_iv_add_mult_emit_before, loop_insn_sink): Define. ! (unroll_loop): Remove end_insert_before argument. ! * loop.c (loop_givs_rescan): Remove end_insert_before argument. ! (maybe_eliminate_biv_1): Likewise. ! (emit_iv_add_mult): Delete. ! (gen_add_mult, loop_regs_update): New. ! (loop_insn_emit_after, loop_insn_emit_before): New. ! (loop_insn_sink, loop_insn_sink_or_swim): New. ! (emit_iv_add_mult): Delete. ! (scan_loop): Set loop->sink. ! (loop_givs_reduce): Use loop_insn_sink and its ilk. ! (loop_givs_rescan, strength_reduce, check_dbra_loop): Likewise. ! (maybe_eliminate_biv_1): Likewise. ! (maybe_eliminate_biv_1): Add basic block argument. ! * unroll.c (unroll_loop): Remove end_insert_before argument. ! (find_splittable_regs): Likewise. ! (find_splittable_regs): Use loop_insn_sink and its ilk. ! (find_splittable_givs, final_biv_value, final_giv_value): Likewise. ! 2001-01-07 Michael Hayes ! * loop.h (loop_insn_hoist): New prototype. ! * loop.c (loop_insn_hoist, loop_insn_emit_before): New. ! (move_movables, loop_givs_rescan): Use loop_insn_hoist. ! (check_dbra_loop, load_mems): Likewise. ! * unroll.c (unroll_loop, find_splittable_regs): Likewise. ! (find_splittable_givs): Likewise. ! 2001-01-07 Michael Hayes ! * loop.c (emit_iv_add_mult): Use single_set to examine new insn. ! 2001-01-07 Richard Henderson ! * sched-rgn.c (is_cfg_nonregular): Fix thinko's last change. ! 2001-01-07 Richard Henderson ! * Makefile.in (DRIVER_DEFINES): Define ENABLE_SHARED_LIBGCC and ! NO_SHARED_LIBGCC_MULTILIB as required for the target. ! * gcc.c (init_spec): Massage the existing libgcc_spec into a ! variant that handles a shared libgcc. ! (process_command): Always validate -{static,shared}-libgcc. ! (do_spec_1): New 'M' case. ! * invoke.text (Link Options): Document -{static,shared}-libgcc. ! 2001-01-07 Richard Henderson ! * Makefile.in (slibdir): New variable. ! (libgcc.mk): Pass SHLIB_INSTALL to mklibgcc. ! (installdirs): Create slibdir. ! (install-libgcc, install-multilib): Defer to libgcc.mk. ! * configure.in (slibdir): Substitute. ! * mklibgcc.in (install): New target. ! * config/t-linux (SHLIB_LINK): Create links for the soname. ! (SHLIB_INSTALL): New. ! * config/alpha/t-osf4 (SHLIB_INSTALL): New. ! * config/mips/t-iris6 (SHLIB_INSTALL): New. ! * config/rs6000/t-aix43 (SHLIB_INSTALL): New. ! * config/sparc/t-slibgcc (SHLIB_INSTALL): New. ! * config/sparc/t-slibgcc-sld (SHLIB_INSTALL): New. ! 2001-01-07 Richard Henderson ! * config/rs6000/aix.h (LINK_LIBGCC_SPECIAL_1): New. ! * config/rs6000/rs6000.h (LIBGCC_SPEC): Remove. ! * config/rs6000/sysv4.h (LIBGCC_SPEC): Remove. ! 2001-01-07 Michael Hayes ! * loop.c (count_loop_regs_set): Delete. ! (load_mems_and_recount_loop_regs_set): Delete. ! (loop_regs_scan): Merge common code from count_loop_regs_set, ! scan_loop, and load_mems_and_recount_loop_regs_set. ! (scan_loop): Call load_mems directly and loop_regs_scan ! again if new registers created. ! 2001-01-07 Neil Booth ! * toplev.c (main): Call the front-end specific post_options ! hook if one is given. ! * toplev.h (struct_lang_hooks, lang_hooks): New. ! * c-lang.c (c_post_options, lang_hooks): Implement lang_hooks ! for the C front end. ! * cp/decl2.c (cxx_post_options, lang_hooks): Implement ! lang_hooks for the C++ front end. ! * objc/objc-act.c (objc_post_options, lang_hooks): Implement ! lang_hooks for the ObjC front end. ! * f/com.c (lang_hooks): Hooks for the Fortran front end. ! * java/lang.c (lang_hooks): Hooks for the Java front end. ! 2001-01-07 Neil Booth ! * c-lex.c (init_c_lex): Request #define / #undef callbacks ! for verbose DWARF[2] debugging. ! (cb_define, cb_undef): The new callbacks. ! * toplev.h (debug_define, debug_undef): Make const correct. ! * toplev.c (debug_define, debug_undef): Similarly. Do not ! perform the verbosity tests here anymore. ! 2001-01-07 Alexandre Oliva ! * reload.c (subst_reloads): Take INSN argument. When ! replacing a LABEL_REF in a JUMP_INSN, add a REG_LABEL note. ! * reload.h (subst_reloads): Adjust prototype. ! * reload1.c (reload_as_needed): Pass INSN to subst_reloads. ! * jump.c (mark_all_labels): Canonicalize any REG_LABEL notes ! present in JUMP_INSNs and copy them to JUMP_LABEL. ! * flow.c (find_label_refs, find_basic_blocks_1): Skip ! JUMP_INSNs and insns with REG_LABELs that are followed by ! JUMP_INSNs with the same REG_LABEL. ! * sched-rgn.c (is_cfg_nonregular): Likewise. ! * rtlanal.c (computed_jump_p): Make it false if a REG_LABEL ! note is available. ! * unroll.c (unroll_loop): Look for REG_LABEL notes in ! JUMP_INSNs too. ! * rtl.texi (REG_LABEL): Document usage in JUMP_INSNs. ! 2001-01-06 Richard Henderson ! * loop.c (scan_loop): Use xcalloc for the regs array. ! (load_mems_and_recount_loop_regs_set): Zero the new memory ! received from xrealloc. ! 2001-01-06 Neil Booth ! * mkdeps.c (deps_add_dep): Fix vector re-allocation. ! Sat Jan 6 00:09:34 2001 J"orn Rennecke ! * integrate.c (copy_rtx_and_substitute): When copying ! an ignored return value, strip REG_FUNCTION_VALUE_P. ! 2001-01-06 Michael Hayes ! * loop.c (debug_biv, debug_giv): New. ! (loop_biv_dump): Break out from ... ! (record_biv): ... here. ! (loop_giv_dump): Break out from ... ! (record_giv): ... here. ! (loop_bivs_check): Use print_simple_rtl. ! * unroll.c (loop_iterations): Use print_simple_rtl. ! 2000-01-05 John David Anglin ! * pa.md (return, return_internal): Modify patterns to prevent regrename ! mucking with the return pointer. ! 2001-01-05 Richard Henderson ! * dwarf2out.c (mem_loc_descriptor) [case MEM]: Revert 10-31 change. ! Fri Jan 5 16:34:18 2001 Nick Clifton ! * config/v850/lib1funcs.asm: Replace __mulsi3 routine with faster ! version supplied by Matteo Frigo. ! 2001-01-05 Neil Booth ! * cpp.texi: Update for -MQ. ! * cppinit.c (cpp_create_reader): Always create pfile->deps. ! (cpp_cleanup): Always free pfile->deps. ! (initialize_dependency_output): Don't create pfile->deps. ! (cpp_handle_option): Similarly. ! (OPT_MQ): New. ! * gcc.c (cpp_options): Handle -MQ. ! (DEFAULT_WORD_SWITCH_TAKES_ARG): Add -MQ. ! * mkdeps.c (base_name): Remove. ! (deps_init): Don't allocate vector space until it's needed. ! (deps_free): Only free vectors if allocated. ! (deps_add_target, deps_add_dep): Update for initial allocation. ! (deps_add_default_target): Don't strip to the base_name. ! 2001-01-05 DJ Delorie ! * config/v850/v850.h (RETURN_ADDR_RTX): Define. ! (INIT_EXPANDERS): Define. ! * config/v850/v850.c (struct machine_function): Define. ! (v850_save_machine_status): New function. ! (v850_restore_machine_status): New function. ! (v850_return_addr): New function. ! (v850_init_expanders): New function. ! * config/v850/v850-protos.h: Add prototypes for v850_return_addr ! and v850_init_expanders. ! 2001-01-05 Zack Weinberg ! * cpplib.h (struct cpp_reader): Add help_only field. ! * cppinit.c (COMMAND_LINE_OPTIONS): Add OPT_version. ! (cpp_handle_option): Set pfile->help_only if we see -h, ! --help, -target-help, or --version. Print version string but ! do not set help_only if we see -v or -version. Make text ! printed by -v match that printed by (-)-version. ! * cppmain.c (main): Exit after option parsing if ! pfile->help_only is true. ! * toplev.c (independent_decode_option): Call print_version, ! then exit, if we see --version (but not -version). ! (print_version): Split lengthy message into two lines. ! 2001-01-05 Nick Clifton ! * config/v850/v850.c (v850_encode_data_area): Use alloca to create ! temporary string for initialisation before calling ggc_alloc_string. ! 2001-01-06 Michael Hayes ! * rtl.h (print_simple_rtl): New. ! * print-rtl.c (print_simple_rtl): New. ! (flag_simple): New. ! (print_rtx): Disable printing of flags and modes, etc., ! if `flag_simple` nonzero. ! 2001-01-05 Zack Weinberg ! * function.c (fixup_var_refs): Use push_to_full_sequence where ! possible. ! 2001-01-05 Michael Meissner ! * flags.h (flag_reorder_blocks): Add declaration. ! (flag_rename_block): Ditto. ! 2001-01-05 DJ Delorie ! * function.c (reorder_blocks): Make sure the flags are all reset ! before using them to mark blocks, else a second invocation will ! corrupt the block chain. ! (reorder_blocks_0): New, resets the flags. ! Fri Jan 5 20:34:06 2001 J"orn Rennecke ! * cse.c (find_comparison_args): Stop if the argument is known to ! be constant. ! 2001-01-05 Alexandre Oliva ! * config/sh/sh.md (movdf): When splitting load into pair of ! registers, don't clobber the register used in the address too ! early. ! 2001-01-05 Jeffrey Oldham ! * varasm.c (mark_constant_pool): Improve initial comments. ! (mark_constants): Move marking of constants to mark_constant. ! (mark_constant): New function to recursively mark all constants ! referred to by a constant. ! 2001-01-05 Catherine Moore ! * dbxout.c ((dbxout_parms): Handle invisible ref where decl is a REG. ! 2001-01-05 Phil Edwards ! * cp/lang-options.h: Bring comment in line with reality. ! * f/lang-options.h: Likewise. ! * java/lang-options.h: Likewise. ! * objc/lang-options.h: Likewise. ! * ch/lang-options.h: Likewise. ! * f/g77.texi: And update the manual. ! 2001-01-05 Marek Michalkiewicz ! Denis Chertykov ! * config/avr/avr-protos.h (avr_peep2_scratch_safe): Prototype. ! * config/avr/avr.c (avr_peep2_scratch_safe): New function. ! * config/avr/avr.md (all peepholes that request a scratch register): ! Call it, FAIL the peephole if not safe (in interrupt functions). ! 2001-01-05 Mark Mitchell ! * ggc-page.c (NUM_EXTRA_ORDERS): Hardwire to zero for now. ! 2001-01-05 Joseph S. Myers ! * builtins.def (BUILT_IN_CONJ, BUILT_IN_CREAL, BUILT_IN_CIMAG): ! Define. ! * builtins.c (expand_builtin): Abort on BUILT_IN_CONJ, ! BUILT_IN_CREAL and BUILT_IN_CIMAG. ! * c-common.c (c_common_nodes_and_builtins): Create builtin conjf, ! conj, conjl, crealf, creal, creall, cimagf, cimag and cimagl. ! (expand_tree_builtin): Handle BUILT_IN_CONJ, BUILT_IN_CREAL and ! BUILT_IN_CIMAG. ! * extend.texi: Document these builtins. ! 2001-01-05 Daniel Berlin ! * c-common.c (lang_get_alias_set): Say we know nothing of ! VECTOR_TYPE aliasing. ! * dwarf2out.c (is_base_type): Handle VECTOR_TYPE properly. ! 2001-01-05 Bruce Korb ! * fixinc/mkfixinc.sh(vax-*-bsd): convert exit and atexit calls to ! their x* equivalent versions for atexit-less systems ! * fixinc/fixincl.c(main): do not return from main() on atexit-less ! systems (or any other system any more). ! 2001-01-05 Richard Earnshaw ! * arm.md (ldmsi_postinc): Avoid use of match_dup between input and ! output operands. Use arm_hard_register_operand for operand 4. ! (stmsi_postinc): Similarly. ! (ldmsi): Use arm_hard_register_operand for opernand 2. ! (stmsi): Similarly. ! * arm.c (arm_hard_register_operand): New function. ! * arm-protos.h (arm_hard_register_operand): Prototype it. ! * arm.h (HARD_REGNO_RENAME_OK): Define. ! Fri Jan 5 16:29:49 MET 2001 Jan Hubicka ! * simplify-rtx.c (cfc_args): add "unordered" field. ! (check_fold_consts): Set unordered field. ! (simplify_relational_operation): Simplify the unordered ! comparisons. ! * reg-stack.c (swap_rtx_condition): Ensure that the transformation ! is valid. ! * emit-rtl.c (try_split): Fix code to mark labels. ! * jump.c (mark_jump_label): Make global. ! * rtl.h (mark_jump_label): Declare. ! * predict.c (estimate_probability): Handle unordred comparisons. ! 2001-01-05 Neil Booth ! * cpp.texi: Update for -MP. Clarify behaviour of -MT. ! * cppinit.c (initialize_dependency_output): Update. ! (cpp_finish): Output dummy targets for -MP. ! (OPT_MP): New. ! (cpp_handle_option): Handle -MP. Don't quote -MT options. ! * cpplib.h (struct cpp_options): Add deps_phony_targets. ! * gcc.c (cpp_options): Update to handle -MP. ! * mkdeps.c (deps_add_target, deps_add_default_target): Update ! to quote only the default target. ! (deps_phony_targets): Insert a preceding newline. Rename from ! deps_dummy_targets for consistency. ! * mkdeps.h: Update ! 2001-01-05 Alexandre Oliva ! * calls.c (emit_library_call_value_1): Support ! INIT_CUMULATIVE_LIBCALL_ARGS. ! * tm.texi (INIT_CUMULATIVE_LIBCALL_ARGS): Document it. ! 2001-01-04 Richard Henderson ! * c-decl.c (finish_struct): Detect flexible array members ! used in an inappropriate context. ! * c-typeck.c (really_start_incremental_init): Special case ! constructor_max_index for zero length arrays. ! (pop_init_level): Allow initialization of flexible array ! members. Deprecate initialization of zero length arrays. ! Don't issue missing initializer warning for flexible array ! members or zero length arrays. ! (process_init_element): Don't dereference null DECL_SIZE. ! * varasm.c (array_size_for_constructor): Return a HOST_WIDE_INT. ! Don't abort for empty constructors. Use size_binop ! (output_constructor): Add commentary regarding zero length ! array futures. Abort if we try to initialize an array of ! unspecified length with a non-empty constructor in the middle ! of a structure. ! * extend.texi (Zero Length): Update and clarify documentation ! on static initialization. ! 2001-01-05 Michael Hayes ! * config/c4x/c4x.c (c4x_expand_prologue): Don't compile an ISR ! with more than 32767 words of local storage. ! 2001-01-05 Michael Hayes ! * config/c4x/c4x.c (c4x_init_builtins): Remove builtin support ! for 'abs', 'labs', and 'fabs'. ! (c4x_expand_builtin): Likewise. ! * config/c4x/c4x.h (enum c4x_builtins): Likewise. ! 2001-01-05 Alexandre Oliva ! * config/sh/sh.md (prget, prset): New insn types. ! (return delay slot): Dont' allow prset. ! (call, sfunc delay slot): Don't allow prget. ! (movsi_i, movsi_ie, movsi_i_lowpart): Create separate alternatives ! for prset and prget. ! 2001-01-05 Michael Hayes ! * loop.h (struct loop_reg): New. ! (struct loop_regs): Change to use array of `struct loop_reg'. ! * loop.c: Replace assortment of varrays with single regs array. ! (count_one_set): Delete may_not_move array argument ! and use regs array instead. All caller's changed. ! (count_loop_regs_set): Delete may_not_move and single_usage ! arguments and use regs array instead. All caller's changed. ! (find_single_use_in_loop): Replace usage array argument with pointer ! to regs structure. All caller's changed. ! (loop_optimize): Delete `moved_once' array. ! 2001-01-05 Michael Hayes ! * loop.c (prescan_loop): Set loop_info->has_nonconst_call. ! Use it instead of loop_info->has_call for scanning loop mems. ! (check_dbra_loop): Replace loop_info->has_call test with ! loop_info->has_nonconst_call. ! 2000-01-04 Matthew Hiller ! * config/sh/sh.h (EPILOGUE_USES): Recognize fpscr as epilogue-used ! for TARGET_SH3E. ! 2001-01-04 Joseph S. Myers ! * fold-const.c (fold): When folding a CONJ_EXPR of a COMPLEX_CST, ! use TREE_REALPART and TREE_IMAGPART instead of TREE_OPERAND. ! 2001-01-04 Joseph S. Myers ! * c-common.c (SIZE_TYPE, WCHAR_TYPE): Define. ! (flag_short_double, flag_short_wchar): Define. ! (c_common_nodes_and_builtins): Create many tree nodes shared ! between C and C++ here instead of in cp/decl.c and ... ! * c-decl.c (init_decl_processing): ... here. ! (SIZE_TYPE, WCHAR_TYPE): Don't define. ! (flag_short_double, flag_short_wchar): Don't define. ! (record_builtin_type): New function. ! (build_void_list_node): New function. ! * c-common.h (flag_short_double, flag_short_wchar, ! record_builtin_type, build_void_list_node): Declare. ! Thu Jan 4 21:09:47 2001 J"orn Rennecke ! * integrate.c (expand_inline_function): Don't put a virtual ! register into the reg map. ! * function.c (fixup_var_refs_1): If force_operand didn't put ! the address into the target, move it there. ! 2001-01-04 Mark Mitchell ! Special-case tree_decl/tree_list allocations. ! * ggc-page.c (OBJECT_PER_PAGE): Reimplement. ! (OBJECT_SIZE): New macro. ! (NUM_EXTRA_ORDER): Likewise. ! (extra_order_size_table): New variable. ! (NUM_ORDERS): New macro. ! (objects_per_page_table): New variable. ! (object_size_table): New variable. ! (G.pages): Use NUM_ORDERS to bound the array. ! (G.page_tails): Likewise. ! (DIV_ROUND_UP): Remove. ! (BITMAP_SIZE): Use CEIL, instead of DIV_ROUND_UP. ! (alloc_page): Use OBJECT_SIZE. ! (size_lookup): Don't make it const. ! (ggc_alloc): Use OBJECT_SIZE. ! (ggc_set_mark): Likewise. ! (ggc_get_size): Likewise. ! (init_ggc): Set up the object_size_table, objects_per_page_table, ! and adjust size_lookup. ! (ggc_recalculate_in_use_p): Use CEIL, not DIV_ROUND_UP. ! (ggc_pop_context): Use NUM_ORDERS. ! (clear_marks): Likewise. ! (sweep_pages): Likewise. ! (poison_pages): Likewise. ! (ggc_print_statistics): Use OBJECT_SIZE. ! Thu Jan 4 15:54:05 2001 Richard Kenner ! * varasm.c (output_constructor): Use HOST_WIDE_INT for sizes. ! Only call array_size_for_constructor if last field and array type ! with no upper bound. ! 2001-01-04 Philip Blundell ! * config/arm/arm.c (arm_gen_constant): Prefer to emit constants ! from bit 31 downwards, if this requires no more insns. ! (count_insns_for_constant): New helper function for above. ! 2001-01-04 Alexandre Oliva ! * gencodes.c (output_predicate_decls): Remove empty initializer. ! 2001-01-04 Mark Mitchell ! * tree.c (copy_node): Remove documentation about obstacks. ! (buidl1): Check that nobody tries to build 2-argument nodes this ! way. ! 2001-01-04 Kaveh R. Ghazi ! * sparc.h (PREDICATE_CODES): Delete fp_sethi_p, fp_mov_p and ! fp_high_losum_p. ! * gencodes.c (output_predicate_decls): Fill empty initializer ! braces. ! 2001-01-04 Jakub Jelinek ! * tradcpp.c (deps_file, print_deps_missing_files): New variables. ! (main): Handle -MG, -MD, -MMD. Bail out if -MG is given without -M ! or -MM. ! (do_include): Handle missing headers like cpp0. ! * cppfiles.c (_cpp_execute_include): Don't prefix absolute header ! paths with first include pathname. Don't strcat to uninitialized ! string. ! 2001-01-04 Bernd Schmidt ! * regrename.c (regrename_optimize): Don't rename from frame pointer ! if frame_pointer_needed. ! (do_replace): Don't set ORIGINAL_REGNO to a hard register number. ! * config/ia64/ia64.c (emit_all_group_insn_barriers): New function. ! (ia64_reorg): Use it instead of scheduling if ! optimize. ! (errata_emit_nops): Properly call asm_noperands. ! (ia64_sched_reorder): Finish cycle if we see an asm. ! (ia64_variable_issue): Clear scheduling state after asms. ! 2001-01-04 Neil Booth ! * cpp.texi: Update for -MT. ! * cppinit.c (initialize_dependency_output): Add a default ! target if none has been given already. ! (no_tgt, OPT_MT): New. ! (cpp_handle_option): Handle -MT. Update -M etc. ! * cpplib.h (struct cpp_options): Remove deps_target. ! * gcc.c (cpp_options): Handle -MT. ! * mkdeps.c (struct deps): Move from mkdeps.h. ! (deps_calc_target): Rename deps_add_default_target. Add a ! default target if none has been specified already. ! * mkdeps.h (struct deps): Move to mkdeps.c. ! (deps_calc_target): Rename deps_add_default_target. ! 2000-01-03 Richard Henderson ! * c-decl.c (grokdeclarator): Give zero-length arrays size zero. ! Remove dead code. ! * c-typeck.c (push_init_level): Move checks for flexible array ! members and zero length arrays ... ! (pop_init_level): ... here. Silently discard empty initializations. ! Remove dead code. ! * varasm.c (output_constructor): Update for sizeof change to ! zero-length arrays. ! * extend.texi (Zero Length): Clarify semantics. ! 2001-01-03 Alexandre Oliva ! * configure.in (tm.h): Include isns-codes.h last. ! * configure: Rebuilt. ! 2001-01-03 Richard Henderson ! * config/alpha/alpha.md (addvsi3, addvdi3): New. ! (negvsi2, negvdi2, subvsi3, subvdi3, mulvsi3, mulvdi3): New. ! 2001-01-03 Franz Sirl ! * tradcpp.c (main): Make sure finclude() is called with a valid ! indepth value while handling -include. ! 2001-01-03 Alexandre Oliva ! * gencodes.c (output_predicate_decls): New function. ! (main): Call it. ! * machmode.h (GET_MODE_MASK): Arrange for it to be defined ! even if it is not the first time machmode.h is #included. ! * config/sh/sh.c (fpul_operand): Declare MODE argument. ! * tm.texi (PREDICATE_CODES): Document predicate declarations. ! * gcc.texi (Copyright): Added 2001. ! 2001-01-03 Joseph S. Myers ! * c-common.c (c_common_lang_init): New function. Warn if format ! warning options which only have effects when used with -Wformat ! are used without -Wformat. ! * c-common.h (c_common_lang_init): Declare. ! * c-lang.c (lang_init): Call c_common_lang_init. ! * objc/objc-act.c (lang_init): Call c_common_lang_init. ! 2001-01-03 Joseph S. Myers ! * configure.in: Check for the mktemp command. * configure: Regenerate. ! * gccbug.in: Use a separate temporary file $TEMP0 for one use of ! $TEMP. Create temporary files with mktemp, if available at ! configure time; otherwise use set -C. Remove temporary files ! before exit. ! ! 2001-01-03 Joseph S. Myers ! ! * configure.in: Require at least texinfo 4.0. Check for whether ! Pod::Man is sufficiently recent to regenerate GCC manpages. ! * configure: Regenerate. ! * Makefile.in (TEXI2POD): Call perl explicitly rather than relying ! on #!. ! (GENERATED_MANPAGES): Define. ! (generated-manpages): New target. Depend on cpp.1 as well as ! gcov.1. ! (install-man): Depend on $(GENERATED_MANPAGES) (defined by ! configure to generated-manpages or empty) rather than on the ! manpages directly. Remove execute permission from installed ! gcov.1 as well as cpp.1. ! * cpp.1, gcov.1: Regenerate. ! ! 2001-01-03 Kaveh R. Ghazi ! ! * builtins.c (expand_builtin_strncmp): Use host_integerp and ! tree_low_cst. Allow using cmpstrsi in more cases. ! ! Wed Jan 3 10:48:43 2001 Richard Kenner ! ! * config/sparc/sparc.h (RETURN_IN_MEMORY): Return 0 for variable ! sized types. ! ! Wed Jan 3 12:22:32 2001 Alexandre Oliva ! ! * build-make (HOST_CFLAGS): Added `-DGENERATOR_FILE'. ! * Makefile.in (HOST_CFLAGS): Mention build-make. ! ! Wed Jan 3 08:53:50 2001 Richard Kenner ! ! * config/sparc/sparc.md (nonlocal_goto): Emit goto_handler_and_restore ! as JUMP_INSN. ! ! 2001-01-01 Bernd Schmidt ! ! * builtins.c (expand_builtin_return_addr): Don't use MEM_ALIAS_SET on ! a REG rtx. ! ! * cse.c (cse_rtx_varies_p): Accept additional FROM_ALIAS arg. All ! callers changed. ! ! * alias.c (throughout): Use ORIGINAL_REGNO when accessing ! reg_base_value and reg_known_value arrays. ! (init_alias_analysis): Add more cases to detect known values. ! * sched-deps.c (deps_may_trap_p): New function. ! (sched_analyze_2): Use it. ! ! 2001-01-03 Alexandre Oliva ! ! * combine.c (simplify_shift_const): Even if we're sign-extracting, ! don't discard an ASHIFTRT if we're shifting in a wider mode. ! ! 2000-01-02 John David Anglin ! ! * toplev.c (rest_of_compilation): Don't print basic block information ! when CFG isn't up to date. ! ! 2001-01-02 Mark Elbrecht ! ! * config/i386/djgpp.h (DWARF2_DEBUGGING_INFO): Define. ! (UNALIGNED_INT_ASM_OP, UNALIGNED_DOUBLE_ASM_OP): Define. ! (UNALIGNED_SHORT_ASM_OP): Define. ! (CPP_PREDEFINES): Remove defines for GO32 and DJGPP. ! ! 2001-01-02 Mark Mitchell ! ! * fold-const.c (fold_convert): Fix typo. ! ! 2001-01-02 Richard Henderson ! ! * c-common.h (ASM_INPUT_P): New. ! * c-parse.in (asm): Set it when needed. ! * c-semantics.c (genrtl_asm_stmt): Test it instead of the ! existance of an operand. ! ! Tue Jan 2 20:27:07 MET 2001 Jan Hubicka ! ! * dwarf2out.c (stack_adjust_offset): Handle PRE_MODIFY. ! (dwarf2out_frame_debug_expr): Likewise. ! (mem_loc_descriptor): Handle PRE and POST_MODIFY. ! ! Tue Jan 2 20:21:31 MET 2001 Jan Hubicka ! ! * i386.c (ix86_split_to_parts): Return number of part required; ! handle TFmodes. ! (print_operand, ix86_expand_branch, ix86_expand_fp_movcc): Handle ! TFmodes. ! (ix86_split_long_move): Use number of part returned ! by ix86_split_to_parts ! * i386.h (MASK_128BIT_LONG_DOUBLE, TARGET_128BIT_LONG_DOUBLE): ! New macros. ! (TARGET_SWITCHES): Add 128bit-long-double and 96bit-long-double ! (LONG_DOUBLE_TYPE_SIZE): Change from constant. ! (MAX_LONG_DOUBLE_TYPE_SIZE): New macro. ! (INTEL_EXTENDED_IEEE_FORMAT): Likewise. ! (ALIGN_MODE_128): Add TFmode. ! (IS_STACK_MODE): Likewise. ! (HARD_REGNO_NREGS): TFmode needs 3 registers. ! (HARD_REGNO_OK): Support TFmodes. ! (ASM_OUTPUT_LONG_DOUBLE): Handle TFmodes. ! * i386.md (scheduler definitions): Use memory operand to determine ! fst/fld instructions; use mode attribute to determine real mode of ! the instruction. ! (*tf): New patterns, expanders and splitters; based on XFmode patterns. ! * invoke.texi (128bit-long-double, 96bit-long-double): Document. ! ! 2001-01-02 Mark Mitchell ! ! * tree.def (TRUTH_NOT_EXPR): Improve documentation. ! ! Tue Jan 2 10:47:38 2001 Richard Kenner ! ! * config/mips/mips.c (function_arg): Don't pass NULL_TREE to ! host_integerp. ! ! 2001-01-02 Jeffrey Oldham ! ! * tm.texi (FUNCTION_ARG): Document that @var{type} can be an ! incomplete type. ! ! Tue Jan 2 10:47:38 2001 Richard Kenner ! ! * tsystem.h: Define HAVE_DECL_GETOPT. ! ! 2001-01-02 Philip Blundell ! ! * config/arm/linux-gas.h (CLEAR_INSN_CACHE): Avoid illegal clobber ! of input operand. ! ! 2001-01-02 Richard Henderson ! ! * alpha.md (*ze_and_ne): Duplicate insn condition to split. ! ! 2001-01-02 Andreas Jaeger ! ! * c-decl.c (c_decode_option): Remove support of ! -Wmissing-noreturn. ! ! * toplev.c (documented_lang_options): Remove -Wmissing-noreturn. ! (W_options): Add -Wmissing-noreturn here. ! ! * flow.c: Define lang_missing_noreturn_ok_p. ! (check_function_return_warnings): Use it. ! ! * c-common.h: Declare lang_missing_noreturn_ok_p. ! ! * c-lang.c (c_missing_noreturn_ok_p): New function. ! (lang_init): Set lang_missing_noreturn_ok_p. ! ! * invoke.texi (Warning Options): Document this. ! ! 2000-12-27 Phil Edwards ! ! * extend.texi (C++ Extensions): New node for C++ attributes; ! describe init_priority and com_interface. ! * invoke.texi: Remove -finit-priority as it now has zero effect. ! * install.texi: Fix xref syntax. ! * md.texi: Likewise. ! ! Mon Jan 1 21:28:29 2001 Richard Kenner ! ! * config.gcc (sparc64-wrs-vxworks*): New case. ! * config/sparc/vxsparc64.h, config/sparc/t-vxsparc64: New files. ! ! * config/sparc/sparc.c (sparc_override_options): Do support different ! pointer and architecture size. ! * config/sparc/sparc.h (MIN_UNITS_PER_WORD): Always 4. ! (POINTERS_EXTEND_UNSIGNED): Define. ! (Pmode): Test TARGET_ARCH64, not TARGET_PTR64. ! (FUNCTION_MODE): Define to be Pmode. ! * config/sparc/sparc.md (64-bit call patterns): FUNCTION_MODE now DI. ! ! * function.c (expand_function_end): Properly handle DECL_RESULT ! and copy when ptr_mode != Pmode. ! * expmed.c (make_tree): Convert X from Pmode to ptr_mode, if needed. ! ! 2001-01-01 Kaveh R. Ghazi ! ! * c-common.c (c_common_nodes_and_builtins): Set prototype ! parameters for __builtin_fputs, __builtin_fputc and ! __builtin_fwrite. Don't declare plain fputc as a builtin. ! ! 2001-01-01 John David Anglin ! ! * loop.c (add_label_notes): Increment the label usage count when ! a note is added to an insn which refers to a CODE_LABEL. ! * gcse.c (add_label_notes): Likewise. ! ! 2001-01-01 Andreas Jaeger ! ! * loop.c (scan_loop): Use xmalloc to allocate movables. ! ! 2001-01-01 Alexandre Oliva ! ! * tm.texi (REGISTER_MOVE_COST): Add a mode argument. ! * reload.c (REGISTER_MOVE_COST): Likewise. Adjust all callers. ! * reload1.c (REGISTER_MOVE_COST): Likewise. ! * regclass.c (REGISTER_MOVE_COST): Likewise. ! (move_cost, may_move_in_cost, may_move_out_cost): Add mode ! dimension. Adjust all users. ! (init_reg_sets_1): Iterate on all modes. ! * config/1750a/1750a.h (REGISTER_MOVE_COST): Adjust. ! * config/a29k/a29k.h (REGISTER_MOVE_COST): Adjust. ! * config/alpha/alpha.h (REGISTER_MOVE_COST): Adjust. ! * config/arc/arc.h (REGISTER_MOVE_COST): Adjust. ! * config/arm/arm.h (REGISTER_MOVE_COST): Adjust. ! * config/avr/avr.h (REGISTER_MOVE_COST): Adjust. ! * config/c4x/c4x.h (REGISTER_MOVE_COST): Adjust. ! * config/d30v/d30v.h (REGISTER_MOVE_COST): Adjust. ! * config/dsp16xx/dsp16xx.h (REGISTER_MOVE_COST): Adjust. ! * config/h8300/h8300.h (REGISTER_MOVE_COST): Adjust. ! * config/i386/i386.h (REGISTER_MOVE_COST): Adjust. ! * config/ia64/ia64.h (REGISTER_MOVE_COST): Adjust. ! * config/m32r/m32r.h (REGISTER_MOVE_COST): Adjust. ! * config/m68hc11/m68hc11.h (REGISTER_MOVE_COST): Adjust. ! * config/m68k/m68k.h (REGISTER_MOVE_COST): Adjust. ! * config/mcore/mcore.h (REGISTER_MOVE_COST): Adjust. ! * config/mips/mips.h (REGISTER_MOVE_COST): Adjust. ! * config/mn10200/mn10200.h (REGISTER_MOVE_COST): Adjust. ! * config/mn10300/mn10300.h (REGISTER_MOVE_COST): Adjust. ! * config/ns32k/ns32k.h (REGISTER_MOVE_COST): Adjust. ! * config/pa/pa.h (REGISTER_MOVE_COST): Adjust. ! * config/pdp11/pdp11.h (REGISTER_MOVE_COST): Adjust. ! * config/pj/pj.h (REGISTER_MOVE_COST): Adjust. ! * config/romp/romp.h (REGISTER_MOVE_COST): Adjust. ! * config/rs6000/rs6000.h (REGISTER_MOVE_COST): Adjust. ! * config/sh/sh.h (REGISTER_MOVE_COST): Adjust. ! * config/sparc/sparc.h (REGISTER_MOVE_COST): Adjust. ! ! 2001-01-01 Bernd Schmidt ! ! * alias.c (fixed_scalar_and_varying_struct): Adjust prototype of ! arg VARIES_P. Call it with extra arg. ! (true_dependence): Likewise. ! * rtl.h (rtx_addr_can_trap_p): Declare. ! (rtx_varies_p, rtx_addr_varies_p, true_dependence): Update ! prototypes. ! * rtlanal.c (rtx_addr_can_trap_p): No longer static. ! (rtx_varies_p): Accept extra arg FOR_ALIAS; only disallow ! pic offset table register if it's zero. All callers changed. ! (rtx_addr_varies_p): Accept extra arg FOR_ALIAS; all callers changed. ! ! Mon Jan 1 07:38:33 2001 Richard Kenner ! ! * explow.c (convert_memory_address, case SYMBOL_REF): Copy ! STRING_POOL_ADDRESS_P. ! ! * config/sparc/sparc.c (input_operand): Properly test for short op. ! ! * config.gcc (sparc-*-elf): Include sparc/sol2.h. ! (sparc-*-rtems*): Include sparc/sol2.h and sparc/elf.h. ! (sparclite-*-elf*, sparc86x-*-elf*): Likewise. ! * config/sparc/elf.h: No longer include sol2.h. ! * config/sparc/lifeelf.h: No longer include sparc/elf.h. ! * config/sparc/rtemself.h, config/sparc/sp86x-elf.h: Likewise. ! ! * config/sparc/sparc.md: Test TARGET_ARCH64 instead of TARGET_PTR64. ! ! 2001-01-01 Michael Hayes ! ! * loop.c (check_insn_for_bivs): Use ivs->n_regs to check array bounds. ! (find_mem_givs, record_biv, maybe_eliminate_biv): Likewise. ! (record_initial): Likewise. ! * unroll.c (copy_loop_body, loop_iterations): Likewise. ! (remap_split_bivs): Likewise. ! ! 2001-01-01 Michael Hayes ! * loop.c (loop_ivs_free): New function. ! (strength_reduce): Break out from... ! 2001-01-01 Michael Hayes ! * loop.h (struct iv): New. ! (REG_IV_TYPE, REG_IV_CLASS, REG_INFO): Modify to use 'struct iv'. ! (struct loop_ivs): Replace 'reg_iv_type', 'reg_iv_info', ! 'reg_biv_class' fields with 'regs' and 'n_regs'. ! (struct ivs): Rename 'loop_iv_list' field to 'list'. ! * loop.c (loop_bivs_find, strength_reduce): Use ivs->regs array. ! * unroll.c (loop_iterations): Check array bounds with ivs->n_regs. ! 2000-12-31 Alexandre Oliva ! * resource.c (mark_referenced_resources): Abort() before ! attempting to mark a pseudo register. ! (mark_set_resources): Likewise. ! 2001-01-01 Michael Hayes ! * loop.h (REG_IV_CLASS): New accessor macro. ! * loop.c (REG_IV_CLASS): Use it instead of reg_iv_class array. ! * unroll.c (REG_IV_CLASS): Likewise. ! See ChangeLog.4 for earlier changes. --- 1,9495 ---- ! 2002-05-14 Release Manager ! * GCC 3.1 Released. ! 2002-05-14 Release Manager ! * GCC 3.1 Released. ! 2002-05-10 Rainer Orth ! * config/mips/t-iris6 (SHLIB_SLIBDIR_SUFFIXES): Use mabi=64 and ! . as N64/N32 libgcc_s.so subdirs. ! 2002-05-09 Mark Mitchell ! * config/rs6000/rs6000.h: Revert previous patch. ! 2002-05-09 Joel Sherrill ! * config/rs6000/rs6000.h CPP_CPU_SPEC): Correct ! 403 and 405 arguments for binutils 2.12. ! Thu May 9 12:21:48 2002 Jeffrey A Law (law@redhat.com) ! * pa.c (hppa_profile_hook): Use force_reg to get the address ! of the profile hook into an appropriate pseudo register. ! 2002-05-09 Jakub Jelinek ! * mklibgcc.in: Set shlib_slibdir_qual to empty string if ! SHLIB_SLIBDIR_SUFFIXES is empty. ! 2002-05-09 Rainer Orth ! * config/mips/t-iris6 (SHLIB_SLIBDIR_SUFFIXES): Define. ! (SHLIB_LINK, SHLIB_INSTALL): Adjust. ! 2002-05-09 Jakub Jelinek ! * config/sparc/t-linux64 (SHLIB_MAPFILES): Set. ! * config/sparc/libgcc-sparc-glibc.ver: New file. ! * config/i386/t-linux64 (SHLIB_MAPFILES): Add libgcc-x86_64-glibc.ver. ! * config/i386/libgcc-x86_64-glibc.ver: New file. ! * config/cris/t-linux (SHLIB_MAPFILES): Remove. ! * mklibgcc.in: Preprocess SHLIB_MAPFILES with ml flags. ! 2002-05-09 Jakub Jelinek ! PR target/6429 ! * Makefile.in (libgcc.mk): Pass SHLIB_SLIBDIR_SUFFIXES to mklibgcc. ! * mklibgcc.in: If SHLIB_SLIBDIR_SUFFIXES is defined, put libgcc_s ! shared libraries into multilib dirs, with SONAME libgcc_s.so.1 for ! base multilibs. ! * config/t-slibgcc-elf-ver (SHLIB_LINK): Adjust for the above. ! * config/t-slibgcc-sld (SHLIB_LINK): Likewise. ! * config/i386/t-linux64 (SHLIB_SLIBDIR_SUFFIXES): Define. ! * config/sparc/t-linux64 (SHLIB_SLIBDIR_SUFFIXES): Define. ! * config/sparc/t-sol2-64 (SHLIB_SLIBDIR_SUFFIXES): Define. ! 2002-05-08 Mark Mitchell ! PR c/6569. ! * varasm.c (mark_weak): New function. ! (merge_weak): Use it. Do not call declare_weak. ! (declare_weak): Use merge_weak. ! 2002-05-07 Geoffrey Keating ! * configure.in: Don't pass -Wno-long-long to a ADA compiler ! that doesn't support it. ! * configure: Regenerate. ! 2002-05-07 Jason Merrill ! * dwarf2out.c (rtl_for_decl_location): Don't try to extract a ! constant value from DECL_INITIAL. ! 2002-05-07 Richard Henderson ! PR c++/6212 ! * expr.c (highest_pow2_factor_for_type): New. ! (expand_assignment): Use it. ! 2002-05-07 Jakub Jelinek ! * configure.in: If as or ld segfaults, don't clutter with it stdout. ! * configure: Rebuilt. ! 2002-05-05 Jakub Jelinek ! PR target/6561 ! * config/sparc/sparc.md (muldi3_v8plus): Handle %1 equal to %2. ! 2002-05-05 Franz Sirl ! * doc/install.texi (powerpc-*-linux-gnu*): Update build requirements. ! 2002-05-04 David Edelsohn ! PR c/6543 ! * config/rs6000/rs6000.md (sCC pattern and splitter): Remove ! clobber and use result as temporary value. ! 2002-05-03 Jakub Jelinek ! PR target/6542 ! * config/sparc/sparc.h (leaf_reg_remap): Remove const. ! (CONDITIONAL_REGISTER_USAGE): For TARGET_FLAT make ! fill leaf_reg_remap with identity. ! * config/sparc/sparc.c (leaf_reg_remap): Remove const. ! 2002-05-03 Jakub Jelinek ! PR target/6522 ! * dwarf2out.c (simple_decl_align_in_bits): Renamed to... ! (simple_field_decl_align_in_bits): this. Apply ! BIGGEST_FIELD_ALIGNMENT and ADJUST_FIELD_ALIGN if defined. ! 2002-05-03 Richard Henderson ! PR opt/6534 ! * ifcvt.c (noce_try_store_flag, noce_try_store_flag_constants, ! noce_try_store_flag_inc, noce_try_store_flag_mask, noce_try_cmove, ! noce_try_cmove_arith, noce_try_minmax, noce_try_abs): Insert new ! code before JUMP, not EARLIEST. ! 2002-05-03 Jakub Jelinek ! PR preprocessor/6489 ! * tradcpp.c (fixup_newlines): New. ! (main, finclude): Use it. ! 2002-05-03 Rainer Orth ! * doc/install.texi (Installing): Mention GCC 3.1 buildstats. ! (Specific): Removed buildstats references. ! (Specific, hppa*-hp-hpux11): Adjust for GCC versions > 3.0. ! (Specific, sparc-sun-solaris2*): Update 64-bit hints for GCC 3.1. ! Accomodate Solaris versions beyond 8. ! (Specific, sparc-sun-solaris2.7): Update as path for GCC 3.1. ! (Specific, *-*-solaris2.8): Removed, obsolete. ! 2002-05-02 Jason Merrill ! * defaults.h (BOOL_TYPE_SIZE): Move default here from cp/decl.c. ! * c-decl.c (c_init_decl_processing): Use it. ! * config/rs6000/darwin.h (BOOL_TYPE_SIZE): Define to INT_TYPE_SIZE. ! * config/i960/i960.h (BOOL_TYPE_SIZE): Don't define. ! * config/mcore/mcore.h (BOOL_TYPE_SIZE): Don't define. ! 2002-05-02 Loren J. Rittle ! * doc/install.texi (*-*-freebsd*): Update to latest status. ! 2002-05-02 Jakub Jelinek ! PR target/6540 ! * config.gcc (sparc*-*-solaris2*): Set float_format to i128. ! * config/float-sparc.h: Assume 128-bit long double if ! __LONG_DOUBLE_128__ is defined. ! PR target/6512, PR target/5628 ! * config/sparc/sparc.md (movdf_insn_v9only_novis): Don't allow >= %f32 ! when memory is not aligned. ! (movdf_insn_v9only_vis): Likewise. ! * config/sparc/sparc.h (SECONDARY_INPUT_RELOAD_CLASS): Request a FP_REGS ! temporary for EXTRA_FP_REGS DFmode load from unaligned memory. ! (SECONDARY_OUTPUT_RELOAD_CLASS): Similarly. ! 2002-05-02 Joseph S. Myers ! * doc/install.texi: State GNAT version requirements. ! 2002-05-01 Jeff Law ! * pa.h (EXTRA_CONSTRAINT): Don't accept PIC addresses for the ! 'T' constraint. ! 2002-05-01 Joel Brobecker ! * dbxout.c (dbxout_type): Emit size information for range types, ! as well, but only when using GDB extensions. ! 2002-05-01 Richard Henderson ! * configure.in (HAVE_GAS_HIDDEN): Replace SPARC feature test with ! target-independent gnu binutils date test. ! 2002-05-01 Jakub Jelinek ! * cppinit.c (cpp_handle_option) [-dM]: Don't set no_output here... ! (cpp_post_options): ...but here. Disable -dD, -dN and -dI when ! -M -or -MM is in effect. ! 2002-05-01 Zack Weinberg ! * config.gcc: Correct test of --enable-obsolete. Obsolete all ! A29k configurations. ! * doc/install.texi: Update to match. ! 2002-05-01 Franz Sirl ! PR bootstrap/6514 ! * varasm.c (globalize_decl): Compare DECL_ASSEMBLER_NAME to check ! for duplicates. Always loop over whole list. ! Wed May 1 10:32:37 2002 Richard Kenner ! * reload.c (find_reloads, case 'p'): Set BADOP to 0. ! 2002-05-01 Joel Sherrill ! * config/sparc/t-elf (sparc-rtems, sparc-elf): Build assembly ! support routines. ! 2002-05-01 Joseph S. Myers ! * doc/install.texi: Update Texinfo version requirement ! documentation. ! 2002-04-30 Richard Henderson ! * config/sparc/sol27-sld.h: Rename from sol26-sld.h. ! (PREFERRED_DEBUGGING_TYPE, ASM_DEBUG_SPEC): Undef. ! * config.gcc (sparc-solaris): Adjust test for native ld bug. ! Add it after the biarch headers. ! 2002-04-30 Richard Henderson ! PR opt/6516 ! * toplev.c (rest_of_compilation): Don't run cross-jump before ! bb-reorder. ! 2002-04-30 Joel Sherrill ! * config/arm/rtems-elf.h: Add #undef TARGET_VERSION to prevent warning. ! 2002-04-30 Richard Henderson ! * config/sparc/sparc.c (emit_soft_tfmode_libcall, ! emit_soft_tfmode_binop, emit_soft_tfmode_unop, emit_soft_tfmode_cvt, ! emit_hard_tfmode_operation, emit_tfmode_binop, emit_tfmode_unop, ! emit_tfmode_cvt): New. ! * config/sparc/sparc.md (extendsftf2, extenddftf2, trunctfsf2, ! trunctfdf2, floatsitf2, floatunssitf2, floatditf2, floatunsditf2, ! fix_trunctfsi2, fixuns_trunctfsi2, fix_trunctfdi2, fixuns_trunctfdi2, ! addtf3, subtf3, multf3, divtf3, sqrttf2): Use them. ! * config/sparc/sparc-protos.h: Update. ! 2002-04-30 John David Anglin ! * config.gcc (hppa1.1-*-pro*, hppa1.1-*-osf*, hppa1.1-*-rtems*, ! hppa1.0-*-osf*, hppa1.1-*-bsd*, hppa1.1-*-hpux10*, hppa2*-*-hpux10*, ! hppa1.0-*-hpux10*, hppa*64*-*-hpux11*, hppa1.1-*-hpux11*, ! hppa2*-*-hpux11*, hppa1.0-*-hpux11*, hppa*-*-lites*): Define xmake_file. ! * ada/Make-lang.in (ADA_FLAGS_TO_PASS): Don't pass ADA_CFLAGS. ! * pa/t-linux, pa/t-pa, pa/t-pa64, t-pro (T_ADAFLAGS): Delete. ! * pa/x-ada: New file. Define ADA_CFLAGS. ! 2002-04-30 Janis Johnson ! * doc/install.texi (Final install): Add to the list of info to include ! in a report of a successful bootstrap, and add link to 3.1 list. ! 2002-04-30 Jakub Jelinek ! PR c++/6396 ! * toplev.c (rest_of_compilation): Only run regrename and copy ! propagation if optimizing. ! 2002-04-30 Gerald Pfeifer ! * doc/contrib.texi (Contributors): Use MIPS instead of Mips and ! mips. Add two missing commas. ! 2002-04-30 Paolo Carlini ! * doc/contrib.texi (Contributors): Update Paolo Carlini's ! and Benjamin Kosnik's entries. ! 2002-04-29 Franz Sirl ! * combine.c (find_split_point): Use trunc_int_for_mode. ! Mon Apr 29 17:19:10 2002 Richard Kenner ! * reload1.c (eliminate_regs, case SUBREG): Fix typo in ! adjust_address_nv call. ! 2002-04-29 Janis Johnson ! * doc/install.texi (Testing): Provide additional information, and ! a stronger encouragement, for running the testsuites. ! 2002-04-29 Rainer Orth ! * fixinc/inclhack.def (solaris_widec): Include in ! Solaris 2 if missing. * fixinc/fixincl.x: Regenerate. ! * fixinc/tests/base/widec.h: New file. ! 2002-04-29 Jakub Jelinek ! PR target/6476 ! * configure.in: Check whether linker eh_frame optimizations work ! properly. * configure: Rebuilt. ! Mon Apr 29 17:08:09 CEST 2002 Jan Hubicka ! * i386.c (dbx64_register_map): Fix typo. ! Mon Apr 29 14:48:33 CEST 2002 Jan Hubicka ! * i386.md (sse_mov?fcc*): Revert patch of Apr 18th. ! 2002-04-29 Gerald Pfeifer ! * doc/contrib.texi (Contributors): Add Paolo Carlini and ! Janis Johnson. ! Update Richard Henderson, Jakub Jelinek, and Mark Mitchell. ! Refer to Objective-C instead of ObjC, SPARC instead of sparc, ! and CPU instead of cpu. ! 2002-04-29 Alexandre Oliva ! * config.gcc: Revert i386 changes inadvertently brought in ! from mainline along with 2002-04-04's change. ! 2002-04-28 David S. Miller ! PR target/6496 ! * config/sparc/sparc.md (call followed by jump peephole): Do not ! match for TARGET_V9, kill TARGET_ARCH64 variants. ! PR target/6500 ! * config/sparc/sparc.md (prefetch): Emit properly for 32-bit vs. ! 64-bit TARGET_V9. Do not use prefetch page, use prefetch for ! several {reads,writes} instead. ! * config/sparc/sparc.h (PREFETCH_BLOCK, SIMULTANEOUS_PREFETCHES): ! Define. ! 2002-04-27 David S. Miller ! PR target/6494 ! * config/sparc/linux64.h (MD_FALLBACK_FRAME_STATE_FOR): Be mindful ! of the stack bias. ! * config/sparc/linux.h, config/sparc/linux64.h: Don't bother ! including signal.h and sys/ucontext.h, not needed. ! 2002-04-28 Richard Henderson ! PR c/5154 ! * ggc-common.c (ggc_mark_rtx_children_1): Rename from... ! (ggc_mark_rtx_children): New. ! 2002-04-28 Franz Sirl ! PR c/6497 ! * config/rs6000/rs6000.md (sCC patterns): Remove clobber and use ! result as temporary value. ! 2002-04-28 Jakub Jelinek ! PR optimization/6475 ! * reload1.c (alter_reg): Only call set_mem_expr if I is home pseudo ! register of REGNO_DECL (i). ! * Makefile.in (reload1.o): Add $(TREE_H). ! 2002-04-28 Bruce Korb ! * fixinc/check.tpl (set-writable): verify that it exists before ! invoking. ! 2002-04-28 Franz Sirl ! PR c/6343 ! * c-decl.c (duplicate_decls): Call merge_weak. ! * c-pragma.c (apply_pragma_weak): Warn about misuse. ! * output.h (merge_weak): Prototype merge_weak. ! * varasm.c (merge_weak): New function. ! (declare_weak): Make sure we don't give an error on VAR_DECLs. ! Mark RTL with SYMBOL_REF_WEAK. ! 2002-04-25 David S. Miller ! PR target/6422 ! * reorg.c (optimize_skip): Do not allow exception causing ! instructions to be considered for delay slots. ! (fill_simply_delay_slots, fill_slots_from_thread): Likewise. ! (relax_delay_slots): Do not try to consider exception causing ! instructions as redundant. ! 2002-04-26 Alexandre Oliva ! * tree.c (tree_int_cst_lt): Compare constants whose types differ ! in unsigned-ness correctly. ! 2002-04-26 Chris Demetriou ! * config/mips/mips.h (SUBTARGET_CPP_SIZE_SPEC): Get closer to ! correct for MEABI (used by mipsisa32-elf). ! 2002-04-26 Mark Mitchell ! PR bootstrap/6445 ! * config/i386/i386.md (untyped_call): Return the value in a float ! register if TARGET_FLOAT_RETURNS_IN_80387, not just if ! TARGET_80387. ! 2002-04-26 Ulrich Weigand ! * config/s390/linux.h: Revert 2002-04-22 change. ! 2002-04-26 John David Anglin ! * pa.h (FUNCTION_OK_FOR_SIBCALL): Don't do sibcalls when using the ! portable runtime model. ! 2002-04-26 David Edelsohn ! Richard Henderson ! * config/rs6000/rs6000.md (sCC pattern): Remove clobber and use ! result as temporary value. ! 2002-04-26 Richard Henderson ! PR c/3581 ! * c-common.c (combine_strings): Use xmalloc, not alloca. ! * c-common.c (combine_strings): Tweak __FUNCTION__ warning text. ! 2002-04-26 Bo Thorsen ! * config/i386/linux64.h (MD_FALLBACK_FRAME_STATE_FOR): Define for ! x86-64. ! 2002-04-25 David S. Miller ! * config/sparc/sparc.h (FUNCTION_OK_FOR_SIBCALL): Add back check ! for DECL being NULL. ! 2002-04-25 Eric Botcazou ! * c-decl.c (grokdeclarator): Remove outdated ??? note ! on invalid declaration of flexible array members. ! 2002-04-25 Richard Henderson ! * doc/invoke.texi: Document -gdwarf{,-2} vs debug level. ! 2002-04-25 Ulrich Weigand ! * config/s390/s390.c (s390_emit_epilogue): Always restore registers ! needed by the compiler, even if they are used as global regs. ! 2002-04-25 Steven Bosscher ! * doc/c-tree.texi: Fix typo in introduction. ! 2002-04-24 Richard Henderson ! * configure.in (HAVE_GAS_HIDDEN): Detect sparc binutils 2.12 ! linker bug. ! 2002-04-24 Jason Merrill ! * dwarf2.h (enum dwarf_attribute): Add DW_AT_GNU_vector. ! * dwarf2out.c (dwarf_attr_name): Support it. ! (gen_array_type_die): Emit it. ! (lookup_type_die): No special handling for VECTOR_TYPE. ! (gen_type_die): Hand VECTOR_TYPE off to gen_array_type_die. ! 2002-04-24 Richard Henderson ! * config/mips/mips.md (movdi_usd): Renumber. ! 2002-04-24 Robert Lipe ! * config/i386/sco5.h(i386.h, att.h): Eliminate double inclusion. ! 2002-04-24 David S. Miller ! * config/sparc/sparc.h (FUNCTION_OK_FOR_SIBCALL): Return false if ! 32-bit Sparc and current_function_returns_struct is true. ! 2002-04-24 Aldy Hernandez ! * config/rs6000/altivec.h: Cleanup file. Add non individual ! variants. ! (vec_vaddubm): New. ! (vec_vadduhm): New. ! (vec_vadduwm): New. ! (vec_vaddfp): New. ! (vec_vaddcuw): New. ! (vec_vaddubs): New. ! (vec_vaddsbs): New. ! (vec_vadduhs): New. ! (vec_vadduws): New. ! (vec_vaddsws): New. ! (vec_vand): New. ! (vec_vandc): New. ! (vec_vavgub): New. ! (vec_vavgsb): New. ! (vec_vavguh): New. ! (vec_vavgsh): New. ! (vec_vavguw): New. ! (vec_vavgsw): New. ! (vec_vrfip): New. ! (vec_vcmpbfp): New. ! (vec_vcmpequb): New. ! (vec_vcmpequh): New. ! (vec_vcmpequw): New. ! (vec_vcmpeqfp): New. ! (vec_vcmpgefp): New. ! (vec_vcmpgtub): New. ! (vec_vcmpgtsb): New. ! (vec_vcmpgtuh): New. ! (vec_vcmpgtsh): New. ! (vec_vcmpgtuw): New. ! (vec_vcmpgtsw): New. ! (vec_vcmpgtfp): New. ! (vec_vcmpgefp): New. ! (vec_vcfux): New. ! (vec_vcfsx): New. ! (vec_vctsxs): New. ! (vec_vctuxs): New. ! (vec_vexptefp): New. ! (vec_vrfim): New. ! (vec_lvx): New. ! (vec_lvebx): New. ! (vec_lvehx): New. ! (vec_lde): Add vector float variant. ! (vec_lvewx): New. ! (vec_lvxl): New. ! (vec_vlogefp): New. ! (vec_vmaddfp): New. ! (vec_vmhaddshs): New. ! (vec_vmaxub): New. ! (vec_vmaxsb): New. ! (vec_vmaxuh): New. ! (vec_vmaxsh): New. ! (vec_vmaxuw): New. ! (vec_vmaxsw): New. ! (vec_vmaxsw): New. ! (vec_vmaxfp): New. ! (vec_vmrghb): New. ! (vec_vmrghh): New. ! (vec_vmrghw): New. ! (vec_vmrglb): New. ! (vec_vmrglh): New. ! (vec_vmrglw): New. ! (vec_vminub): New. ! (vec_vminsb): New. ! (vec_vminuh): New. ! (vec_vminsh): New. ! (vec_vminuw): New. ! (vec_vminsw): New. ! (vec_vminfp): New. ! (vec_vmladduhm): New. ! (vec_vmhraddshs): New. ! (vec_msumubm): New. ! (vec_vmsummbm): New. ! (vec_vmsumuhm): New. ! (vec_vmsumshm): New. ! (vec_vmsumuhs): New. ! (vec_vmsumshs): New. ! (vec_vmuleub): New. ! (vec_vmulesb): New. ! (vec_vmuleuh): New. ! (vec_vmulesh): New. ! (vec_vmuloub): New. ! (vec_mulosb): New. ! (vec_vmulouh): New. ! (vec_vmulosh): New. ! (vec_vnmsubfp): New. ! (vec_vnor): New. ! (vec_vor): New. ! (vec_vpkuhum): New. ! (vec_vpkuwum): New. ! (vec_vpkpx): New. ! (vec_vpkuhus): New. ! (vec_vpkshss): New. ! (vec_vpkuwus): New. ! (vec_vpkswss): New. ! (vec_vpkshus): New. ! (vec_vpkswus): New. ! (vec_vperm): New. ! (vec_vrefp): New. ! (vec_vrlb): New. ! (vec_vrlh): New. ! (vec_vrlw): New. ! (vec_vrfin): New. ! (vec_vrsqrtefp): New. ! (vec_vsel): New. ! (vec_vslb): New. ! (vec_vslh): New. ! (vec_vslw): New. ! (vec_vsldoi): New. ! (vec_vsl): New. ! (vec_vslo): New. ! (vec_vspltb): New. ! (vec_vsplth): New. ! (vec_vspltw): New. ! (vec_vspltisb): New. ! (vec_vspltish): New. ! (vec_vspltisw): New. ! (vec_vsrb): New. ! (vec_vsrh): New. ! (vec_vsrw): New. ! (vec_vsrab): New. ! (vec_vsrah): New. ! (vec_vsraw): New. ! (vec_vsr): New. ! (vec_vsro): New. ! (vec_stvx): New. ! (vec_stvebx): New. ! (vec_stvehx): New. ! (vec_stvewx): New. ! (vec_stvxl): New. ! (vec_vsububm): New. ! (vec_vsubuhm): New. ! (vec_vsubuwm): New. ! (vec_vsubfp): New. ! (vec_vsubcuw): New. ! (vec_vsububs): New. ! (vec_vsubsbs): New. ! (vec_vsubuhs): New. ! (vec_vsubshs): New. ! (vec_vsubuws): New. ! (vec_vsubsws): New. ! (vec_vsum4ubs): New. ! (vec_vsum4sbs): New. ! (vec_vsum4shs): New. ! (vec_vsum2sws): New. ! (vec_vsumsws): New. ! (vec_vrfiz): New. ! (vec_vupkhsb): New. ! (vec_vupkhpx): New. ! (vec_vupkhsh): New. ! (vec_vupklsb): New. ! (vec_vupklpx): New. ! (vec_vupklsh): New. ! (vec_vxor): New. ! 2002-04-23 Zack Weinberg ! * doc/install.texi: Clarify which versions of alpha*-dec-osf* ! are obsoleted. ! 2002-04-23 Eric Botcazou ! PR c/5430 ! * fold-const.c (split_tree): Add MINUS_LITP parameter; separate ! added literals from substracted literals. ! (associate_trees): Don't convert MINUS_EXPR into PLUS_EXPR. ! (fold) [associate]: Preserve MINUS_EXPR if needed. ! 2002-04-23 Tom Tromey ! * gcc.c: Added --resource. For PR java/6314. ! 2002-04-23 David O'Brien ! * config/freebsd.h(OBJECT_FORMAT_ELF): Define. ! 2002-04-23 David O'Brien ! * cp/g++spec.c: Use profiled libstdc++ and libm with -p/-pg. ! * config/freebsd.h (MATH_LIBRARY_PROFILE): Use the _p verions of ! these libraries. ! 2002-04-23 Alan Modra ! PR target/6413 ! * function.h: (struct function): Add profile_label_no field. ! (current_function_profile_label_no): Define. ! * function.c: (profile_label_no): New static var. ! (expand_function_start): Increment it, and copy to ! current_function_profile_label_no. ! * output.h (profile_label_no): Delete. ! * final.c (profile_label_no): Delete. ! (profile_function): Use current_function_profile_label_no. ! (final_end_function): Don't increment profile_label_no here. ! * config/i386/i386.c (ix86_osf_output_function_prologue): Replace ! profile_label_no with current_function_profile_label_no. ! * config/pa/pa.c (current_function_number): Delete. ! (pa_output_function_prologue): Don't output profile label here. ! (hppa_profile_hook): Use label_no param rather than ! current_function_number. ! (FUNC_BEGIN_PROLOG_LABEL): Move to .. ! * config/pa/pa.h: .. here. ! (FUNCTION_PROFILER): Output profile label here. ! 2002-04-23 Aldy Hernandez ! * config/rs6000/altivec.h (vec_step): Remove extraneous ! parentheses. ! (vec_ctu): Cast return. ! 2002-04-22 Aldy Hernandez ! * config/rs6000/rs6000.md ("*movv4si_internal"): Change 'm' ! constraint to 'o' for m=r and r=m alternatives. ! ("*movv8hi_internal1"): Same. ! ("*movv16qi_internal1"): Same. ! ("*movv4sf_internal1"): Same. ! 2002-04-22 Zack Weinberg ! * c-lex.c (lex_charconst): Call convert to get constant in ! proper type; don't just smash the type field. ! Fixes PR c/6300. ! * config.gcc: Add list of obsolete configurations. Disallow ! building these without --enable-obsolete. ! * doc/install.texi: Document --enable-obsolete and obsoletion ! policy. Mention obsoletion of individual targets in ! appropriate places. ! 2002-04-22 Richard Henderson ! * config/sparc/sol2-bi.h (ASM_DEBUG_SPEC): New. ! 2002-04-22 Mark Mitchell ! PR f/6138. ! * function.c (fixup_memory_subreg): Add promoted_mode parameter. ! (walk_fixup_memory_subreg): Likewise. ! (fixup_var_refs_insn): Adjust accordingly. ! (fixup_var_refs_1): Likewise. ! 2002-04-22 Joel Sherrill ! * gthr-rtems.h: Correct prototypes to remove warnings. ! 2002-04-22 Richard Henderson ! PR c/6344 ! * alias.c (canon_true_dependence): Special case (mem:blk (scratch)). ! * gcse.c (free_insn_expr_list_list): New. ! (clear_modify_mem_tables): Use it. Fix bit set usage. ! (canon_list_insert): Use EXPR_LISTs for expressions. ! (record_last_mem_set_info): Factor BLOCK_NUM (insn). ! 2002-04-22 Ulrich Weigand ! * config/s390/linux.h: (LIBPATH_SPEC, LIBPATH_ARCH31_SPEC, ! LIBPATH_ARCH64_SPEC): Define. ! (EXTRA_SPECS): Add libpath, libpath_arch31, libpath_arch64. ! (STARTFILE_SPEC, ENDFILE_SPEC): Define; use libpath. ! (LINK_ARCH31_SPEC): Add libpath_arch31 to search path. ! (LINK_ARCH64_SPEC): Add libpath_arch64 to search path. ! 2002-04-22 Aldy Hernandez ! * config/rs6000/altivec.h (vec_xor): Add variant for both args ! being vector signed int. ! (vec_andc): Same. ! (vec_xor): Add variant for both args being vector signed char. ! Remove redundant variant. ! (vec_andc): Same. ! 2002-04-21 David S. Miller ! * config/sparc/sparc.md (set then compare DI mode peephole2): Fix ! compare mode in output RTL. ! 2002-04-22 David Edelsohn ! * config/rs6000/rs6000.c (rs6000_override_options): Correct ! style and formatting of previous patch. ! 2002-04-22 Alan Modra ! * config/rs6000/rs6000.c (rs6000_override_options): Always clear ! flag_pic for ABI_AIX. ! 2002-04-21 Neil Booth ! * cppmacro.c (funlike_invocation_p): Don't step back ! over CPP_EOF. ! 2002-04-21 David Edelsohn ! * config/rs6000/rs6000.c (output_profile_hook): Do not increment ! labelno. ! 2002-04-20 Joseph S. Myers ! * doc/invoke.texi: Remove Chill references. ! * doc/gcc.texi: Update last modified date. ! 2002-04-19 David S. Miller ! * config/sparc/linux.h (MD_FALLBACK_FRAME_STATE_FOR): Define. ! * config/sparc/linux64.h (MD_FALLBACK_FRAME_STATE_FOR): Likewise. ! Sat Apr 20 02:17:38 CEST 2002 Jan Hubicka ! * i386.md (movsi_1, movhi_1): Force reload to use more flexible ! alternative. ! 2002-04-19 Jakub Jelinek ! PR c/6358 ! * function.c: Reapply patch for c/6358. ! (expand_function_end): Copy decl_rtl's mode, not ! current_function_return_rtx mode. ! 2002-04-19 Joel Sherrill ! * config/rtems.h (STARTFILE_SPEC, ENDFILE_SPEC): Fix for non-ELF ! targets. ! 2002-04-19 Tom Tromey ! * doc/install.texi (Specific): Update status of Solaris 2.8. ! For PR libgcj/6158. ! 2002-04-19 Dan Nicolaescu Gerald Pfeifer ! * doc/install.texi (Specific, sparc-sun-solaris2*): Mention that ! binutils 2.11.2 and higher generate smaller binaries than Sun's ! native tools. ! 2002-04-19 Mark Mitchell ! PR c++/6352 ! * toplev.c (rest_of_compilation): Do not defer functions for which ! TREE_SYMBOL_REFERENCED has already been set. ! 2002-04-18 Richard Henderson ! * function.c: Revert patch for c/6358. ! 2002-04-18 Richard Henderson ! * ifcvt.c (find_cond_trap): Handle cases with no proper THEN or JOIN ! blocks. Handle multiple references to the TRAP block. Handle ! non-adjacent THEN and OTHER blocks. ! 2002-04-18 Richard Henderson ! * config/ia64/ia64.c (ia64_function_arg_pass_by_reference): Don't ! crash with no type for by-mode libcalls. ! * config/ia64/ia64.md (conditional_trap): Fix predicate polarity. ! 2002-04-18 David S. Miller ! * config/sparc/sparc.h (BRANCH_COST): Define. ! * fold-const.c (BRANCH_COST): Don't provide default here, expr.h ! does it. ! 2002-04-18 Richard Henderson ! * config/ia64/ia64.c (ia64_function_arg_pass_by_reference): New. ! (ia64_va_arg): Expect variable sized types by reference. ! * config/ia64/ia64-protos.h: Update. ! * config/ia64/ia64.h (FUNCTION_ARG_PASS_BY_REFERENCE): Use ! ia64_function_arg_pass_by_reference. ! 2002-04-18 Hans-Peter Nilsson ! * flow.c (update_life_info): Ignore return value of cleanup_cfg. ! Mask out PROP_SCAN_DEAD_CODE | PROP_KILL_DEAD_CODE in ! propagate_block calls after relaxation loop using new variable ! stabilized_prop_flags. ! 2002-04-18 Richard Henderson ! * ifcvt.c: Include except.h. ! (block_has_only_trap): Break out from find_cond_trap. ! (find_cond_trap): Use it. Always delete the trap block. ! (merge_if_block): Allow then block null. Be less simplistic about ! what insns can end a block. ! * Makefile.in (ifcvt.o): Depend on except.h. ! * config/ia64/ia64.md (trap, conditional_trap): New. ! 2002-04-18 Jakub Jelinek ! PR c/6358 ! * function.c (assign_parms): Assign hard current_function_return_rtx ! register here... ! (expand_function_end): ...not here. ! 2002-04-18 Gerald Pfeifer ! * doc/install.texi (Downloading the source): Do not mention Chill ! any longer, but mention Ada. ! (Configuration): Do not mention Chill any longer. ! 2002-04-18 Hans-Peter Nilsson ! * config/cris/cris.h (TARGET_VERSION): Remove local version number. ! Thu Apr 18 15:49:12 CEST 2002 Jan Hubicka ! * i386.h (SSE_FLOAT_MODE_P): Kill bogus TARGET_SSE_MATH check. ! * i386.md (sse_mov?fcc*): Swap operands for cases they will be swapped ! later. ! 2002-04-18 Jakub Jelinek ! PR middle-end/6205 ! * config/i386/i386.md (movsf_1): Use pxor only if TARGET_SSE2, ! otherwise xorps. ! 2002-04-18 Loren J. Rittle ! Revert this change: ! * doc/install.texi (Installing GCC: Configuration): Clarify ! the only supported ways to configure gcc. ! 2002-04-17 Dale Johannesen ! * config/rs6000/rs6000.c (rs6000_emit_cmove): Fail if modes of ! comparison operands do not match each other or if modes of ! conditions do not match result. ! (rs6000_output_function_prologue): Compute instruction addresses. ! (rs6000_output_function_epilogue): Likewise. ! 2002-04-17 Ulrich Weigand ! * config/s390/s390.c (legitimize_pic_address): Do not generate ! illegal address constant without CONST. ! 2002-04-17 Kaveh R. Ghazi ! * sparc/linux64.h (CC1_SPEC): Error for -m32 and -m64. ! * sparc/netbsd-elf.h (CC1_SPEC32, CC1_SPEC64): Likewise. ! 2002-04-17 Ulrich Weigand ! PR optimization/6305 ! * config/s390/s390.c (s390_expand_plus_operand): Use find_replacement ! to make sure previous reloads are taken into account. Generate ! better code if one operand is an in-range immediate constant. ! 2002-04-16 Andrew Haley ! * doc/install.texi (Building): libgcj requires GNU make. ! 2002-04-17 Jakub Jelinek ! PR bootstrap/6315 ! * config/sparc/sparc.md (movtf reg<-reg split): Allow spliting ! even if hard quad and register is not floating. ! (movtf reg<-mem split): Disallow splitting if hard quad and ! register is floating. ! (movtf mem<-reg split): Likewise. ! * config/sparc/sparc.c (fp_register_operand): New predicate. ! * config/sparc/sparc.h (PREDICATE_CODES): Add fp_register_operand. ! 2002-04-17 Zack Weinberg ! * Makefile.in (PROTO_OBJS): Add cppdefault.o. ! (protoize.o): Take $(PREPROCESSOR_DEFINES) off command line. ! (unprotoize.o): Ditto. Build from protoize.c. Define ! UNPROTOIZE on command line. ! * protoize.c: Include cppdefault.h. Delete include_defaults. ! (in_system_include_dir): Use cpp_include_defaults (defined in ! cppdefault.o). ! * unprotoize.c: Delete file. ! 2002-04-17 Aldy Hernandez ! * config/rs6000/altivec.h (vec_ld): Add array variants. ! (vec_lde): Same. ! (vec_ldl): Same. ! 2002-04-17 Alan Matsuoka ! Aldy Hernandez ! * config/rs6000/altivec.h: Define __ALTIVEC__. ! (bool): New. ! (__pixel): New. ! (pixel): New. ! (vec_cfux): New. ! (vec_vmaddfp): New. ! (vec_vsldoi): New. ! Add parentheses to all macro arguments. ! 2002-04-16 Richard Henderson ! PR c++/6320 ! * except.c (remove_eh_handler): Insert inner regions at beginning ! of sibling chain. Refactor expressions. ! 2002-04-16 Mark Mitchell ! * c-common.h (STMT_EXPR_NO_SCOPE): New macro. ! * c-common.c (c_expand_expr): Respect STMT_EXPR_NO_SCOPE. ! * tree.h (expand_start_stmt_expr): Update prototype. ! * stmt.c (expand_start_stmt_expr): Add has_scope parameter. ! * tree-inline.c (expand_call_inline): Set STMT_EXPR_NO_SCOPE ! on the STMT_EXPR created for the inline function. ! ! 2002-04-16 Richard Henderson ! * config/sparc/sol2-bi.h (AS_SPARC64_FLAG): New. ! * config/sparc/sol2-gas-bi.h: New file. ! * config.gcc (sparc*-solaris): Add it as needed. ! * configure.in (AS_SPARC64_FLAG): Remove check. ! * config.in, configure: Regenerate. ! * config/sparc/sol2-bi.h (CC1_SPEC): Error for -m32 and -m64. ! 2002-04-16 Richard Henderson ! * config/mips/mips.c (override_options): Don't override N32 for ! a 64-bit ISA. ! PR c/6202 ! * config/mips/mips.md (can_delay): Split out of existing define_delays. ! (HILO_delay): Set can_delay false. ! 2002-04-16 Paolo Carlini ! * c-parse.in (poplevel, compstmt_start, compstmt_primary_start): ! Add ending ';', in accordance with POSIX. ! 2002-04-16 Richard Henderson ! * config.gcc (sparcv9-solaris): Configure for 64-bit default. ! Adjust tm_file order to get TARGET_DEFAULT set properly. ! (sparc-solaris): Configure 2.[78] for 64-bit multilibs. ! * doc/install.texi (sparc-solaris): Update. ! 2002-04-16 Hartmut Penner ! PR target/6305 ! * config/s390/s390.md (mulsidi3): Set both subregs of the ! multiword register. ! 2002-04-16 Aldy Hernandez ! * config/rs6000/altivec.h (vec_addc): Type check. ! 2002-04-16 Jakub Jelinek ! PR middle-end/6279 ! * expr.c (store_expr): Don't copy if DECL_RTL (exp) == target. ! * expr.c (safe_from_p): Cleanup: use DECL_RTL_IF_SET. ! 2002-04-15 Richard Henderson ! * config/mips/abi64.h (SUBTARGET_CONDITIONAL_REGISTER_USAGE): Set ! call_really_used_regs too. ! 2002-04-15 David S. Miller ! * rtlanal.c (note_stores): Don't present PARALLEL SET_DESTs ! as being CLOBBERed. ! 2002-04-16 Jakub Jelinek ! PR c/6290 ! * config/rs6000/rs6000.c (easy_vector_constant): Return 1 if the ! CONST_VECTOR is { 0, ... 0 }. ! 2002-04-15 Loren J. Rittle ! * doc/install.texi (Installing GCC: Configuration): Clarify ! the only supported ways to configure gcc. ! 2002-04-15 Richard Henderson ! * config/alpha/linux.h, config/arm/linux-elf.h, config/i370/linux.h, ! config/i386/linux-aout.h, config/i386/linux-oldld.h, ! config/i386/linux.h, config/i386/linux64.h, config/ia64/linux.h, ! config/m68k/linux-aout.h, config/m68k/linux.h, config/mips/linux.h, ! config/pa/pa-linux.h, config/pj/linux.h, config/s390/linux.h, ! config/sh/linux.h, config/sparc/linux-aout.h, config/sparc/linux.h, ! config/sparc/linux64.h, config/xtensa/linux.h (CPP_PREDEFINES): ! Define __gnu_linux__, not gnu_linux. ! * config/rs6000/sysv4.h (CPP_OS_GNU_SPEC): Likewise for gnu_hurd. ! 2002-04-15 Mark Mitchell ! Remove Chill front end. ! * gcc.c (default_compilers): Remove Chill entries. ! * ch: Remove directory. ! * doc/frontends.texi: Remove information about Chill. ! * doc/sourcebuild.texi: Likewise. ! * doc/standards.texi: Likewise. ! ! 2002-04-15 Douglas B Rupp ! * config/alpha/vms.h (INCLUDE_DEFAULTS): Add /gnu/lib/gcc-lib/include. ! (LONGLONG_STANDALONE): Define. ! 2002-04-15 David S. Miller ! * config/sparc/sparc.c (sparc_emit_float_lib_cmp): ! Call emit_library_call with LCT_NORMAL. ! (sparc_initialize_trampoline): Use LCT_foo instead of ! magic constant in emit_library_call invocations. ! (sparc64_initialize_trampoline): Likewise. ! (sparc_profile_hook): Likewise. ! * config/sparc/sparc.md: Likewise. ! ! * config/sparc/sparc.c (sparc_extra_constraint_check): ! Fix type of argument 'c'. ! * config/sparc/sparc-protos.h (sparc_extra_constraint_check): ! Likewise. ! 2002-04-14 Andreas Schwab ! * config/ia64/linux.h (CPP_PREDEFINES): Fix missing backslash. ! 2002-04-14 Jeroen Dobbelaere ! * config/arm/linux-elf.h (CPLUSPLUS_CPP_SPEC): Define. ! 2002-04-13 Mark Mitchell ! * config/alpha/linux.h (CPP_PREDEFINES): Fix typo. ! * config/i386/gnu.h (CPP_PREDEFINES): Define __gnu_hurd__, ! not gnu_hurd. ! 2002-04-13 Hans-Peter Nilsson ! * config/cris/linux.h (CRIS_CPP_SUBTARGET_SPEC): Fix typo. ! 2002-04-13 Joel Sherrill ! * config/sparc/t-elf: Enable v8 multilibs. Impacts ! sparc-elf and sparc-rtems targets. ! 2002-04-13 Mark Mitchell ! * alpha/linux.h: Define __gnu_linux__ wherever __linux__ is ! defined, and __gnu_hurd__ wherever __GNU__ is defined. ! * arm/linux-elf.h: Likewise. ! * cris/aout.h: Likewise. ! * cris/linux.h: Likewise. ! * i370/linux.h: Likewise. ! * i386/gnu.h: Likewise. ! * i386/linux-aout.h: Likewise. ! * i386/linux-oldld.h: Likewise. ! * i386/linux.h: Likewise. ! * i386/linux64.h: Likewise. ! * ia64/linux.h: Likewise. ! * m68k/linux-aout.h: Likewise. ! * m68k/linux.h: Likewise. ! * mips/linux.h: Likewise. ! * pa/pa-linux.h: Likewise. ! * pj/linux.h: Likewise. ! * rs6000/sysv4.h: Likewise. ! * s390/linux.h: Likewise. ! * sh/linux.h: Likewise. ! * sparc/linux-aout.h: Likewise. ! * sparc/linux.h: Likewise. ! * sparc/linux64.h: Likewise. ! * xtensa/linux.h: Likewise. ! 2002-04-13 Andreas Schwab ! * config/ia64/ia64.h (CPP_SPEC): Include %(cpp_cpu). ! 2002-04-12 Mark Mitchell ! Revert these changes: ! 2002-04-06 Mark Mitchell ! PR c++/5571 ! * stor-layout.c (layout_decl): Reset the RTL for the decl. ! 2002-03-15 Mark Mitchell ! * expr.c (expand_expr): Tidy. ! 2002-04-12 Richard Henderson ! * config.gcc (sparcv9-*-solaris2): Default to 32-bit code. ! (sparc*-*-solaris): Clean up header files. ! * configure.in (AS_SPARC64_FLAG): Error out if can't find it ! and plan on generating 64-bit code. ! * toplev.c (decode_g_option): Remove LINKER_DOES_NOT_WORK_WITH_DWARF2. ! * config/sparc/sol2-64.h: Delete and reuse for default 64-bit code. ! * config/sparc/sol2-sld-64.h: Rename ... ! * config/sparc/sol2-bi.h: ... here. Remove the bits that checked ! for AS_SPARC64_FLAG not defined. ! * config/sparc/sol2-gld-bi.h: New. ! * config/sparc/sol2-sld.h: Remove. ! * config/sparc/sol26-sld.h: New. ! * config/sparc/sol2.h: Tidy comments. ! * doc/install.texi: Document sparc-solaris configury changes. ! 2002-04-12 Richard Henderson ! * recog.c (offsettable_address_p): Match the logic in adjust_address. ! * config/sparc/sparc.h (LEGITIMIZE_RELOAD_ADDRESS): Handle TFmode ! in 64-bit mode only. Use only for 32-bit or MEDLOW. ! 2002-04-12 Rainer Orth ! * config/alpha/osf.h (LINK_SPEC): Pass -S to silence ld warnings. ! Fri Apr 12 15:42:59 2002 Jeffrey A Law (law@redhat.com) ! * pa.c (pa_can_combine_p): Call extract_insn before calling ! constrain_operands. ! 2002-04-12 Douglas B Rupp ! * hwint.h (HAVE___INT64): Correct spelling. ! * config/i386/i386-interix.h (EH_FRAME_IN_DATA_SECTION): Define. ! (TARGET_ASM_NAMED_SECTION, RETURN_IN_MEMORY) Define. ! (DEFAULT_PCC_STRUCT_RETURN): Define as 0. ! (CPP_PREDEFINES): Handle __declspec. ! * config/i386/t-interix (USER_H): Remove. ! 2002-04-12 DJ Delorie ! * integrate.c (compare_blocks): Make comparisons safe for when ! sizeof(int) < sizeof(char *). ! (find_block): Likewise. ! 2002-04-12 Andreas Schwab ! * config/ia64/ia64.h (ASM_SPEC): Moved from here ... ! * config/ia64/sysv4.h (ASM_SPEC): ... to here, so that it ! overrides the definition in config/svr4.h. ! ! 2002-04-12 Eric Norum ! * config/rtems.h, config/a29k/rtems.h, config/arm/rtems-elf.h, ! config/c4x/rtems.h, config/h8300/rtems.h, config/i386/rtems.h, ! config/i386/rtemself.h, config/i960/rtems.h, config/m68k/rtems.h, ! config/m68k/rtemself.h, config/mips/rtems.h, config/mips/rtems64.h, ! config/pa/rtems.h, config/rs6000/rtems.h, config/sh/rtems.h, ! config/sh/rtemself.h, config/sparc/rtems.h, config/sparc/rtemself.h, ! config/v850/rtems.h (*-rtems*): Cleanup pass to move common ! definitions to config/rtems.h and make the targets more similar. ! Fri Apr 12 08:06:54 2002 Richard Kenner ! * expr.c (expand_assigment): Remove duplicate conversions #ifdef ! POINTERS_EXTEND_UNSIGNED. ! (store_constructor, expand_expr, case COMPONENT_REF): Likewise. ! (store_expr): Use TYPE_MODE (sizetype), not ptr_mode. ! * emit-rtl.c (widen_memory_access): Don't do anything if MEMOFFSET ! not specified. ! 2002-04-12 Hans-Peter Nilsson ! * function.c (fixup_var_refs_1) : ! For paradoxical (subreg VAR), replace VAR, don't try the subreg. ! 2002-04-12 Andreas Schwab ! * config/ia64/ia64.h (EXTRA_SPECS): Fix missing backslash. ! 2002-04-12 Richard Henderson ! PR bootstrap/4191 ! * config/d30v/d30v.h (INIT_SECTION_ASM_OP): Don't undef. ! * flow.c (mark_used_reg): Manage reg_cond_dead properly for ! modes spanning multiple hard regs. ! * recog.c (peephole2_optimize): Rebuild jump labels as needed. ! 2002-04-11 John David Anglin ! * pa.c (output_millicode_call): Check attribute type as well as length ! when length is 28. ! 2002-04-11 David O'Brien ! * config/freebsd.h (NO_IMPLICIT_EXTERN_C, SCCS_DIRECTIVE): Give value. ! (DEFAULT_PCC_STRUCT_RETURN) Do not redefine. ! (USER_LABEL_PREFIX, HANDLE_SYSV_PRAGMA, IDENT_ASM_OP, ! DWARF2_DEBUGGING_INFO, DBX_DEBUGGING_INFO, PREFERRED_DEBUGGING_TYPE): ! elfos.h and dbxelf.h values are fine now. ! * config/i386/freebsd.h, config/alpha/freebsd.h ! (DEFAULT_PCC_STRUCT_RETURN): Define to 0. ! 2002-04-11 David O'Brien ! * config/ia64/aix.h (CPP_PREDEFINES): Do not define _LP64/__LP64__ ! or set Acpu or Amachine. Reformat. ! (ASM_SPEC, DONT_USE_BUILTIN_SETJMP, PROFILE_BEFORE_PROLOGUE): Do not ! define. ! (LINK_SPEC): Do not need to undef. ! * config/ia64/elf.h (ASM_EXTRA_SPEC): Define. ! * config/ia64/freebsd.h (LINK_SPEC): Do not need to undef. ! (ASM_SPEC, DONT_USE_BUILTIN_SETJMP, PROFILE_BEFORE_PROLOGUE): Do not ! define. ! * config/ia64/hpux.h (ASM_EXTRA_SPEC): Define. ! (ASM_SPEC): Do not define, use ASM_EXTRA_SPEC instead. ! (LINK_SPEC): Do not need to undef. ! (DONT_USE_BUILTIN_SETJMP): Do not define. ! * config/ia64/ia64.h (ASM_SPEC, ASM_EXTRA_SPEC): Add. ! (CPP_CPU_SPEC): Define _LP64, set Acpu and Amachine. Remove -Dia64. ! (DONT_USE_BUILTIN_SETJMP, PROFILE_BEFORE_PROLOGUE): Define. ! Remove trailing spaces. ! * config/ia64/linux.h (CPP_PREDEFINES): Do not define _LP64/__LP64__, ! __ELF__, or set Acpu or Amachine. Reformat. ! (ASM_SPEC, DONT_USE_BUILTIN_SETJMP, PROFILE_BEFORE_PROLOGUE): Do not ! define. ! 2002-04-11 David O'Brien ! * config.gcc (ia64-*-freebsd*): Fix ordering of tm_files to match ! all other *-*-freebsd* targets. ! 2002-04-11 Richard Sandiford ! * doc/extend.texi: Remove old claim that typedefs cannot have ! an alignment attribute. ! 2002-04-11 Jakub Jelinek ! PR optimization/6177 ! * expr.c (expand_expr) [COMPONENT_REF]: Handle op0 CONCAT if ! bitpos is 0 and bitsize CONCAT size. ! 2002-04-11 Jakub Jelinek ! PR c/6223 ! * combine.c (if_then_else_cond): Use trunc_int_for_mode on nz. ! 2002-04-11 David O'Brien ! * config/alpha/freebsd.h: Minor reformatting. ! (CPP_SPEC): Define ELF and add cpp_subtarget. ! (ASM_SPEC): No longer needed. ! 2002-04-11 Richard Henderson ! * config/sparc/sparc.md (movdi_insn_sp32): Add o/J alternative. ! (movdi_insn_sp32_v9): Likewise. Only allow stx with aligned memory. ! (dimode mem/zero splitter): New. ! 2002-04-11 Hans-Peter Nilsson ! * config/cris/cris.c (cris_override_options): Tweak error message ! for PIC not implemented. ! * config/cris/cris.h: Tweak comments related to parameter-passing. ! * config/cris/t-cris (TARGET_LIBGCC2_CFLAGS): Don't -Dinhibit_libc here. ! * config/cris/cris.c (cris_target_asm_function_prologue): Cast ! uses of PIC_OFFSET_TABLE_REGNUM to int to silence warnings. ! (cris_target_asm_function_epilogue): Ditto. ! (cris_initial_frame_pointer_offset): Ditto. ! (cris_simple_epilogue): Ditto. ! (cris_expand_builtin_va_arg): Variable-size types come in ! by-reference. ! 2002-04-10 Richard Henderson ! * except.c (add_ehl_entry): Allow duplicates after landing pad ! creation. ! 2002-04-10 David Edelsohn ! * config/rs6000/t-aix43 (SHLIB_NM_FLAGS): Add -X32_64. ! 2002-04-10 Ulrich Weigand ! * reload1.c (choose_reload_regs): HARD_FRAME_POINTER_REGNUM ! is only used as frame pointer when frame_pointer_needed is true. ! 2002-04-10 Richard Earnshaw ! PR target/817 ! * arm.md (arm_movdi): Adjust neg_pool_range attribute to allow ! for the fact that the pool entry uses two words. ! (movdf_hard_insn): Similarly. Also, ADR instruction can span ! 1k bytes. ! (movdf_soft_insn): Similarly. ! (movxf_hard_insn): Adjust neg_pool_range attribute to allow ! for the fact that the pool entry uses three words. ! 2002-04-10 Richard Henderson ! * expr.c (expand_expr) [INTEGER_CST]: Don't force into registers ! if EXPAND_INITIALIZER. ! 2002-04-10 Alan Modra ! PR optimization/6233 ! * rtlanal.c (pure_call_p): New function. ! * rtl.h (pure_call_p): Declare. ! * loop.c (prescan_loop): Use it to set has_nonconst_call. ! * gcse.c (store_killed_in_insn): Use pure_call_p here too. ! 2002-04-09 Richard Henderson ! * config/alpha/alpha.md (movdi_er_maybe_g): New. ! * config/alpha/alpha.c (alpha_expand_mov): Use it. ! 2002-04-09 Richard Henderson ! PR c/5078 ! * expr.c (expand_expr) [INTEGER_CST]: Force overflows into registers. ! 2002-04-09 Andrew MacLeod ! * expr.c (expand_expr): A RESULT_DECL is part of a call. ! 2002-04-09 Richard Henderson ! * cfg.c (expunge_block): Decrement num_elements here ... ! (expunge_block_nocompact): ... not here. ! * cfgcleanup.c (delete_unreachable_blocks): Set num_elements. ! 2002-04-09 Richard Henderson ! * basic-block.h (flow_delete_block_noexpunge): Declare. ! (expunge_block_nocompact): Declare. ! * cfg.c (expunge_block_nocompact): Split out from ... ! (expunge_block): ... here. ! * cfgrtl.c (can_delete_label_p): Don't use exception_handler_labels. ! (flow_delete_block_noexpunge): Split out from ... ! (flow_delete_block): ... here. ! * cfgcleanup.c (delete_unreachable_blocks): Compact while ! removing dead blocks. ! * except.c (exception_handler_labels): Remove. ! (exception_handler_label_map): New. ! (struct eh_region): Add aka member. ! (mark_ehl_map_entry, mark_ehl_map, free_region): New. ! (ehl_hash, ehl_eq, ehl_free, add_ehl_entry): New. ! (for_each_eh_label, for_each_eh_label_1): New. ! (init_eh): Register exception_handler_label_map. ! (free_eh_status): Use free_region. ! (find_exception_handler_labels): Use the map, not the list. ! (remove_exception_handler_label): Likewise. ! (maybe_remove_eh_handler): Likewise. ! (remove_eh_handler): Use the region aka bitmap. ! * except.h (exception_handler_labels): Remove. ! (for_each_eh_label): Declare. ! * jump.c (rebuild_jump_labels): Don't check exception_handler_labels. ! * loop.c (invalidate_loops_containing_label): New. ! (find_and_verify_loops): Use it. Use for_each_eh_label. ! * sched-rgn.c (is_cfg_nonregular): Use ! current_function_has_exception_handlers. ! 2002-04-08 Richard Henderson ! * reorg.c (get_branch_condition): Use reversed_comparison_code. ! 2002-04-08 Stephane Carrez ! * config/m68hc11/larith.asm (__map_data_section): Fix condition ! and optimize for size. ! (__do_global_ctors): Fix pointer comparison. ! (__do_global_dtors): Likewise. ! 2002-04-09 David S. Miller ! * config/sparc/sparc.c (sparc_extra_constraint_check): New ! function, implementing EXTRA_CONSTRAINTS. For memory constraints, ! allow reloading pseudos. ! * config/sparc/sparc.h (EXTRA_CONSTRAINTS): Use it. ! * config/sparc/sparc-protos.h: Declare it. ! * config/sparc/sparc.c (const64_is_2insns): Kill signed vs. ! unsigned comparison warning. ! (output_restore_regs): Mark leaf_function as unused. ! Tue Apr 9 09:35:45 2002 Richard Kenner ! * expr.c (is_aligning_offset): New function. ! (expand_expr, case COMPONENT_EXPR): Call it. ! 2002-04-09 Alan Modra ! * configure.in (auto-build.h): Use target_alias and build_alias ! when running configure. ! (gcc_cv_as): Use $target_alias in directory searchs rather than ! $target. Heed program_prefix and program_transform_name. Search ! for gas in cross-compiler case too. "test -x" rather than "test -f". ! (gcc_cv_ld): Likewise. ! (gcc_cv_nm): Set for cross compilers too. Heed program_prefix and ! program_transform_name. ! (gcc_cv_objdump): Likewise. ! * configure: Regenerate. ! 2002-04-08 Hans-Peter Nilsson ! * config/mmix/t-mmix (TARGET_LIBGCC2_CFLAGS): Don't -Dinhibit_libc ! here. ! * config/mmix/mmix.h (INITIAL_ELIMINATION_OFFSET): Remove spurious ! semicolon. ! * config/mmix/mmix.c (mmix_expand_builtin_va_arg): Variable-size ! types come in by-reference. Fix typo in comment. ! 2002-04-08 Richard Henderson ! PR opt/6007 ! * toplev.c (rest_of_compilation): Disable cross-jumping for ! highly connected graphs. ! 2002-04-08 David S. Miller ! PR target/6082 ! * config/sparc/freebsd.h (SPARC_DEFAULT_CMODEL): Set to CM_MEDLOW ! Make init_priority work on Sparc when using GNU ld. ! * config/sparc/linux.h, config/sparc/linux64.h, ! config/sparc/netbsd-elf.h, config/sparc/freebsd.h ! (CTORS_SECTION_ASM_OP, DTORS_SECTION_ASM_OP): Undefine. ! * config/sparc/sol2-gld.h: New file to do the same. ! * config.gcc (sparc*-*-solaris2*): If gnu_ld=yes add ! sparc/sol2-gld.h to tm_file. ! PR optimization/4328 ! * config/sparc/sparc.h (EXTRA_CONSTRAINT): Add new constraint 'W'. ! * doc/md.texi: Document it. ! * config/sparc/sparc.md (movdi_insn_sp64_novis, ! movdi_insn_sp64_vis, movdf_insn_sp32, movdf_insn_v9only_novis, ! movdf_insn_v9only_vis, movdf_insn_sp64_novis, ! movdf_insn_sp64_vis): Use it as MEM constraing with 'e' registers. ! * config/sparc/sparc.c (mem_min_alignment): Fix comment. ! 2002-04-08 Gerald Pfeifer ! * doc/contrib.texi (Contributors): Add John David Anglin and Loren ! J. Rittle (the latter also to Testers). Update David O'Brien's entry. ! 2002-04-07 David S. Miller ! * config.gcc (sparc64-*-linux*): Add t-crtfm to tmake_file. ! 2002-04-07 John David Anglin ! PR 5933 ! * pa.h (ASM_OUTPUT_MI_THUNK): Use indirect jump to target function when ! generating 32-bit pic code. ! 2002-04-07 Franz Sirl ! * config/rs6000/rs6000.h (RS6000_PIC_OFFSET_TABLE_REGNUM): New. ! (PIC_OFFSET_TABLE_REGNUM): Use it and return INVALID_REGNUM if ! !flag_pic. ! (CONDITIONAL_REGISTER_USAGE): Adjust accordingly. ! * config/rs6000/rs6000.h: Use RS6000_PIC_OFFSET_TABLE_REGNUM instead ! of PIC_OFFSET_TABLE_REGNUM thruout. ! * config/rs6000/rs6000.md: Likewise. ! * config/rs6000/darwin.h: Likewise. ! 2002-04-06 John David Anglin ! * reorg.c (dbr_schedule): Don't reposition prologue and epilogue notes. ! 2002-04-06 Mark Mitchell ! PR c++/5571 ! * stor-layout.c (layout_decl): Reset the RTL for the decl. ! PR opt/5120 ! * sibcall.c (optimize_sibling_and_tail_recursive_call): Clear ! RTX_UNCHANGING_P for the functions arguments when a tail call ! is made. ! 2002-04-06 Jason Merrill ! * toplev.c (flag_no_inline, flag_really_no_inline): Default to 2. ! (parse_options_and_default_flags): Set them appropriately. ! * c-common.c (c_common_post_options): Don't set flag_really_no_inline. ! Sat Apr 6 18:26:32 CEST 2002 Jan Hubicka ! * ifcvt.c (if_convert): Clear aux fields of blocks. ! 2002-04-05 David S. Miller ! * config/sparc/freebsd.h (ENDFILE_SPEC): Add crtfastmath bits. ! * config.gcc (sparc64-wrs-vxworks, sparc-*-chorusos, ! sparc-*-rtems*, sparclite-*-elf* sparc86x-*-elf*, sparc64-*-elf*, ! {sparc64,ultrasparc}-*-freebsd*): Add sparc/t-crtfm to tmake_file. ! 2002-04-05 Jan Hubicka ! * optabs.c (emit_no_conflict_block, emit_libcall_block): Avoid nesting ! of libcall regions. ! 2002-04-05 David S. Miller ! * config/sparc/sparc.c (sparc_nonflat_function_epilogue): If we ! are not going to emit return instructions, emit at least a nop ! for the sake of sane backtraces. ! 2002-04-05 Jakub Jelinek ! * mklibgcc.in: Use separate libgcc.map for each multilib. ! * Makefile.in (distclean): Don't remove libgcc.map here. ! 2002-04-05 Jakub Jelinek ! * Makefile.in (s-mlib): Handle --disable-multilib by separate ! genmultilib invocation. ! 2002-04-04 David S. Miller ! * config/sparc/crtfastmath.c: New file. ! * config/sparc/t-crtfm: New file. ! * config/sparc/linux.h (ENDFILE_SPEC): Use crtfastmath.o ! * config/sparc/linux64.h (ENDFILE_SPEC): Likewise. ! * config/sparc/sol2.h (ENDFILE_SPEC): Likewise. ! * config/sparc/sp64-elf.h (ENDFILE_SPEC): Likewise. ! * config/sparc/elf.h (ENDFILE_SPEC): Likewise. ! * config.gcc (sparc*-*-{elf*,linux*,solaris2*}): Add ! sparc/t-crtfm to tmake_file. ! 2002-04-05 Alan Modra ! * config/rs6000/t-linux64 (EXTRA_MULTILIB_PARTS): Add crtsavres.o ! Add rules to make null object file. ! 2002-04-04 David S. Miller ! * calls.c (store_one_arg): If ECF_SIBCALL, use tail_call_reg. ! 2002-04-04 Richard Henderson ! PR opt/6165 ! * alias.c (true_dependence): Force (mem:blk (scratch)) to conflict. ! (write_dependence_p): Likewise. ! 2002-04-04 Richard Henderson ! * predict.c (estimate_bb_frequencies): Do frequency calculation ! with a volatile temporary. ! 2002-04-04 Ulrich Weigand ! * config/s390/linux.h (LOCAL_LABEL_PREFIX): Define. ! 2002-04-04 Jakub Jelinek ! PR c++/6119 ! * final.c (final_start_function): Don't bump profile_label_no here... ! (final_end_function): ...but here. ! 2002-04-04 Jakub Jelinek ! * config/sparc/sparc.md (pic): New attribute. ! (do_builtin_setjmp_setup): Save %fp, %i7 and %l7 for TARGET_V9 ! into stack slots. ! (split after do_builtin_setjmp_setup): New. ! 2002-04-04 Jakub Jelinek ! PR fortran/6106 ! * config/sparc/sparc.h (MIN_UNITS_PER_WORD): Backout 2001-01-01 ! change. ! 2002-04-04 Jakub Jelinek ! * config/sparc/sparc.c (sparc_va_arg): Adjust va_list by ! UNITS_PER_WORD for zero sized aggregates. ! 2002-04-04 Gerald Pfeifer ! * doc/contrib.texi (Contributors): Add David O'Brien. ! 2002-04-03 David S. Miller ! * gcc.c (LINK_GCC_C_SEQUENCE_SPEC): No need for a new ! one-character spec for this, just use %(link_gcc_c_sequence). ! 2002-04-04 Alan Modra ! * config/rs6000/t-linux64 (EXTRA_MULTILIB_PARTS): Define. ! 2002-04-03 David S. Miller ! * gcc.c (LINK_GCC_C_SEQUENCE_SPEC): New spec to override the gcc/c ! library sequence passed to the linker. ! (LINK_COMMAND_SPEC): Use it. ! * doc/tm.texi: Document it, and mention from LINK_COMMAND_SPEC as ! a macro a target can use to avoid overriding LINK_COMMAND_SPEC. ! * config/sparc/sparc.h (LINK_GCC_C_SEQUENCE_SPEC): Define. ! 2002-04-03 Jason Merrill ! PR c++/5636 ! * tree.h (CLEANUP_EH_ONLY): New macro. ! * stmt.c (expand_decl_cleanup_eh): New fn. ! (expand_cleanups): Check CLEANUP_EH_ONLY. ! * c-semantics.c (genrtl_decl_cleanup): Just take the CLEANUP_STMT. ! Use expand_decl_cleanup_eh. ! (expand_stmt): Adjust. ! * c-common.h: Adjust prototype. ! 2002-04-03 Jakub Jelinek ! * configure.in (HAVE_SPARC_UA_PCREL_HIDDEN): Test whether %r_disp32() ! works properly with .hidden symbols. ! * configure: Rebuilt. ! * config.in: Rebuilt. ! * config/sparc/sparc.h (ASM_PREFERRED_EH_DATA_FORMAT): Use ! DW_EH_PE_absptr for flag_pic && GLOBAL if %r_disp32() doesn't work ! properly with .hidden symbols. ! 2002-04-03 Jakub Jelinek ! PR middle-end/6102 ! * df.c (df_insn_refs_record): Use XEXP not SET_DEST to access ! USE argument. ! 2002-04-03 Richard Henderson ! PR opt/4120 ! * sched-rgn.c (sets_likely_spilled): New. ! (sets_likely_spilled_1): New. ! (add_branch_dependences): Use it. ! 2002-04-02 Richard Henderson ! PR opt/4311 ! * loop.h (LOOP_FIRST_PASS): New. ! * loop.c (strength_reduce): Mind it when deciding to unroll. ! * toplev.c (rest_of_compilation): Set it. ! 2002-04-02 David S. Miller ! * config/sparc/sparc.md (ldd peephole2s): Fix final arg to ! mems_ok_for_ldd_peep when the order of the loads being examined ! is reversed. ! * config/sparc/sparc.c (mems_ok_for_ldd_peep): Expand upon ! existing comment to increase comprehension of this situation. ! 2002-04-02 Richard Henderson ! * libgcc2.c (__bb_exit_func): Revert 03-31 change. ! 2002-04-02 Eric Botcazou ! Richard Henderson ! PR c/5484 ! * function.c (assign_temp): Accept either type or decl argument. ! Detect variables whose size is too large to fit into an integer. ! * stmt.c (expand_decl): Pass the decl, not the type. ! 2002-04-02 David O'Brien ! * protoize.c: Match include directory usage with cppdefault.c. ! 2002-04-03 Jeffrey A Law (law@redhat.com) ! Hans-Peter Nilsson ! * combine.c (simplify_comparison): Avoid narrowing a comparison ! with a paradoxical subreg when doing so would drop signficant bits. ! 2002-04-02 David Edelsohn ! * config/rs6000/rs6000.h (WIDEST_HARDWARE_FP_SIZE): Define. ! 2002-04-02 Alan Modra ! * config/rs6000/rs6000.md (ctrdi*): Add FPR constraint and ! associated splitter. Remove MQ constraint. ! (ctrdi_internal4): Correct CCmode clobber. ! 2002-04-03 Hans-Peter Nilsson ! * config/mmix/mmix.md (define_constants): Remove misleading ! FIXME. Add MMIX_fp_rO_OFFSET. ! ("nonlocal_goto_receiver"): Don't have stack-frame address of ! saved rO as part of the pattern. Remove FIXME. ! ("*nonlocal_goto_receiver_expanded"): Similar. Generate address ! here, at output-time. ! * config/mmix/crti.asm (_init): Register _fini with atexit. ! * config/mmix/crtn.asm (_fini): Add omitted "POP 0,0". ! * config/mmix/mmix.c (mmix_target_asm_function_prologue): Correct ! unwind information when frame_pointer_needed. ! (mmix_assemble_integer): Tweak wording in comment. ! 2002-04-02 Richard Henderson ! PR opt/3967 ! * local-alloc.c (contains_replace_regs): LO_SUM may contain ! replace regs. ! 2002-04-02 Richard Henderson ! * doc/standards.texi: Document required freestanding libc entry points. ! 2002-04-02 Alexandre Oliva ! * config/mips/mips.c (mips_va_arg): Apply big-endianness address ! offset before loading address of argument passed by transparent ! reference. ! 2002-04-02 Richard Henderson ! * fixinc/inclhack.def (AAB_solaris_sys_varargs_h): Move and ! rename solaris_sys_varargs_h. ! Tue Apr 2 06:47:40 2002 Richard Kenner ! * stor-layout.c (layout_type, case ARRAY_TYPE): Give one-element array ! the same mode as its component. ! 2002-04-02 Richard Henderson ! PR opt/420 ! * config/m68k/m68k.md (dbcc peepholes): Match four forms of dbra. ! 2002-04-01 Richard Henderson ! PR target/1538 ! * fixinc/inclhack.def (solaris_sys_varargs_h): New. ! * fixinc/fixincl.x: Rebuild. ! 2002-04-01 Richard Henderson ! * config/ia64/unwind-ia64.c: Include ia64intrin.h. ! (atomic_alloc, atomic_free): New. ! (SIZE, MASK_FOR, PTR_IN): New. ! (emergency_reg_state, emergency_reg_state_free): New. ! (emergency_labeled_state, emergency_labeled_state_free): New. ! (reg_state_alloced, labeled_state_alloced): New. ! (alloc_reg_state, free_reg_state): New. ! (alloc_label_state, free_label_state, free_label_states): New. ! (push, pop, dup_state_stack, free_state_stack): Use them. ! (desc_label_state): Likewise. ! (uw_frame_state_for): Free label states and state stack. ! (uw_update_reg_address): Eliminate warnings. ! 2002-04-01 Loren J. Rittle ! * doc/install.texi (*-*-freebsd*): Update. ! 2002-04-01 Phil Edwards ! * version.c: Fix misplaced leading blanks on first line. ! 2002-04-01 Vladimir Makarov ! * config/pa/pa-pro-end.h (ASM_OUTPUT_ALIGNED_COMMON, ! ASM_OUTPUT_ALIGNED_LOCAL): Redefine them. ! 2002-04-01 Jim Blandy ! * cppmacro.c (cpp_macro_definition): Do not emit spaces after ! macro formal parameter names. ! 2002-04-01 Bob Wilson ! * config/xtensa/xtensa.c (xtensa_va_arg): Fix compiler warning ! in previous change. ! 2002-04-01 Bob Wilson ! * config/xtensa/xtensa.c (xtensa_va_arg): Fix to handle arguments ! for which MUST_PASS_IN_STACK is true (e.g., variable-sized types). ! 2002-03-31 Richard Henderson ! * config/ia64/unwind-ia64.c (alloc_spill_area): Fix offset. ! (desc_frgr_mem): Fix reference to f16-f31. ! Sun Mar 31 14:43:24 2002 Richard Kenner ! * emit-rtl.c (adjust_address_1, offset_address): Cast value to ! unsigned HOST_WIDE_INT, not unsigned int. ! 2002-03-31 Jakub Jelinek ! PR middle-end/6096, middle-end/6098, middle-end/6099 ! * reorg.c (emit_delay_sequence): Only increment LABEL_NUSES for ! CODE_LABELs. ! (fill_slots_from_thread): Likewise. ! 2002-03-31 Jakub Jelinek ! * config/sparc/sparc.c (function_arg_record_value_1): Pass complex ! floating fields in float regs. ! (function_arg_record_value_2): Likewise. ! 2002-03-31 Jakub Jelinek ! PR middle-end/6100 ! * config/sparc/sparc.c (output_cbranch): Use REG_BR_PROB, not ! REG_BR_PRED. ! (output_v9branch): Likewise. ! 2002-03-31 Alexandre Oliva ! * gcc.c: Revert previous patch for now. ! * config/i386/djgpp.h: Likewise. ! 2002-03-31 Richard Henderson ! PR target/3997 ! * config/alpha/elf.h (ASM_OUTPUT_DEF): Tidy. ! (ASM_OUTPUT_DEF_FROM_DECLS): New. ! 2002-03-31 Richard Henderson ! * libgcc2.c (__bb_exit_func): Make static. ! * config/alpha/alpha.md (trap): New. ! 2002-03-31 Alexandre Oliva ! * gcc.c (LIBGCC_SPEC): Folded %L and duplicate %G here... ! (LINK_COMMAND_SPEC): ... from here. ! (init_gcc_specs): Duplicate it here too, omitting ! shared_name in the second copy. ! (init_spec): Test for duplicate ! * config/i386/djgpp.h (LINK_COMMAND_SPEC): Remove `%L %G'. ! 2002-03-31 Richard Henderson ! * builtins.c (expand_builtin_va_arg): Give warnings not errors for ! promoted argument types; build trap. ! (expand_builtin_trap): New. ! (expand_builtin): Use it. ! * stmt.c (expand_nl_goto_receivers): Likewise. ! * expr.h (expand_builtin_trap): Declare. ! * libfuncs.h (LTI_abort, abort_libfunc): New. ! * optabs.c (init_optabs): Init abort_libfunc. ! 2002-03-30 David S. Miller ! * config/sparc/linux.h (HANDLE_PRAGMA_PACK_PUSH_POP): Define. ! * config/sparc/linux64.h (HANDLE_PRAGMA_PACK_PUSH_POP): Likewise. ! 2002-03-30 Roger Sayle ! Richard Henderson ! * regmove.c (combine_stack_adjustments_for_block): Avoid ! emitting a stack adjustment of zero bytes. Let delete_insn ! update bb->head. ! 2002-03-30 Richard Henderson ! * config/sparc/sparc.c: Remove all references to TARGET_EPILOGUE. ! (sparc_emitting_epilogue): New. ! (leaf_label, output_return, sparc_return_peephole_ok): Remove. ! * config/sparc/sparc-protos.h: Update. ! * config/sparc/sparc.h (MASK_EPILOGUE, TARGET_EPILOGUE): Remove. ! (TARGET_SWITCHES): Update. ! * config/sparc/sparc.md (return): Remove. ! (return_*): Use sparc_emitting_epilogue, not !TARGET_EPILOGUE. ! * config/sparc/freebsd.h, config/sparc/linux64.h, config/sparc/lite.h, ! config/sparc/liteelf.h, config/sparc/netbsd-elf.h, ! config/sparc/sol2-sld-64.h, config/sparc/sol2.h, ! config/sparc/sp64-aout.h, config/sparc/sp64-elf.h, ! config/sparc/sp86x-aout.h, config/sparc/sp86x-elf.h, ! config/sparc/splet.h, config/sparc/vxsparc64.h (TARGET_DEFAULT): ! Remove MASK_EPILOGUE. ! * doc/invoke.texi: Update. ! 2002-03-30 Daniel Berlin ! * dwarf2out.c (dwarf2out_define): Remove start_source_file call, ! CPP will start the file for us. ! 2002-03-30 Richard Henderson ! PR target/5446 ! * config/ia64/ia64.c (group_barrier_needed_p): Special case ! prologue_allocate_stack. ! (ia64_single_set): Use insn codes for recognition of special ! cases, not rtl matching. ! * config/ia64/ia64.md (prologue_allocate_stack): Op 3 is in-out. ! 2002-03-30 Richard Henderson ! PR target/6032 ! * config/sparc/sparc.h (OVERRIDE_OPTIONS): Don't override -fpic ! or -fomit-frame-pointer with profiling. ! (SUBTARGET_OVERRIDE_OPTIONS): Remove. ! (FUNCTION_PROFILER): Do nothing. ! (PROFILE_HOOK): New. ! * config/sparc/sparc.c (sparc_override_options): Don't check ! code models for profiling. ! (sparc_function_profiler): Remove. ! (sparc_profile_hook): New. ! * config/sparc/sparc-protos.h: Update. ! 2002-03-30 Jakub Jelinek ! PR optimization/6086 ! * combine.c (combine_simplify_rtx): If simplify_rtx failed because ! of SUBREG of volatile MEM or because the MEM was mode dependent, ! return CLOBBER instead of unmodified SUBREG. ! 2002-03-30 David O'Brien ! * config/i370/linux.h: Update copyright. ! 2002-03-30 Alexandre Oliva ! * config/mips/mips.c (function_arg_pass_by_reference): Force to 0 ! in o32 and o64 ABIs. ! * config/mips/abi64.h (MUST_PASS_IN_STACK): Define as in expr.h, ! but getting fixed-size structs passed in registers regardless of ! padding in o32 and o64 ABIs. ! 2002-03-29 Richard Henderson ! PR target/5672 ! * expr.c (expand_expr): Pass along EXPAND_INITIALIZER one more place. ! 2002-03-29 Franz Sirl ! * config/rs6000/rs6000.c (rs6000_va_arg): Correctly set register count ! for aggregate and TFmode types. ! 2002-03-29 Richard Henderson ! PR target/5886 ! * config/ia64/aix.h (CPP_PREDEFINES): Add -D_LP64. ! * config/ia64/hpux.h, config/ia64/linux.h: Likewise. ! 2002-03-29 Loren J. Rittle ! * doc/install.texi (*-*-freebsd*): Fix last commit. ! 2002-03-29 Richard Henderson ! PR target/6041 ! * config/i386/i386.c (x86_arch_always_fancy_math_387): New. ! (override_options): Disable NO_FANCY_MATH_387 if the arch allows. ! * config/i386/i386.h (x86_arch_always_fancy_math_387): New. ! * config/i386/i386.md (sqrtxf2, sqrtextendsfxf2, sinxf2): Fix ! conditional. ! * docs/invoke.texi: Update -mno-fancy-math-387 docs. ! 2002-03-29 Loren J. Rittle ! * config.gcc (*-*-freebsd*): Enable creation of libgcc_s.so. ! * config/t-slibgcc-elf-ver (SHLIB_LC): Add macro and use it. ! No functional change except ... ! * config/t-slibgcc-nolc-override (SHLIB_LC): Override it. New file. ! * doc/install.texi (*-*-freebsd*): Document port configuration. ! 2002-03-29 Jakub Jelinek ! PR c++/5964 ! * config/sparc/sparc.md (empty_delay_slot, branch_type): New ! attributes. ! (length): Compute variable length for branches/calls/jumps here. ! (branch, inverted_branch, normal_fp_branch, inverted_fp_branch, ! normal_fpe_branch, inverted_fpe_branch): Remove length attribute, ! define branch_type attribute. ! (divsi3_sp32): Maximum length is 6 not 7. ! (call_address_struct_value_sp32, call_symbolic_struct_value_sp32, ! call_address_untyped_struct_value_sp32, ! call_symbolic_untyped_struct_value_sp32): Set length to 3 not 2. ! * config/sparc/sparc.c (empty_delay_slot): New function. ! * config/sparc/sparc.h (ADJUST_INSN_LENGTH): Remove. ! * config/sparc/sparc-protos.h (empty_delay_slot): Add prototype. ! 2002-03-29 Jakub Jelinek ! * combine.c (set_nonzero_bits_and_sign_copies): Don't call ! nonzero_bits if not needed. ! (nonzero_bits) [XOR]: Likewise. ! (nonzero_bits) [REG]: Use reg_last_set_nonzero_bits even if ! reg_last_set_mode and mode are both MODE_INT, but not equal. ! (record_value_for_reg): Compute reg_last_set_nonzero_bits ! in nonzero_bits_mode for MODE_INT modes. ! 2002-03-28 Richard Henderson ! PR target/5715 ! * config/alpha/osf.h (ASM_SPEC): Don't pass any special options ! to GAS. Correct drift between alternatives. ! 2002-03-28 Richard Henderson ! PR target/6087 ! * reload1.c (fixup_abnormal_edges): Move insn to edge via sequence. ! 2002-03-28 Alexandre Oliva ! * config/i386/freebsd.h (LINK_SPEC): Don't pass default ! emulation to the linker. ! 2002-03-28 Loren J. Rittle ! * config/alpha/freebsd.h (LINK_SPEC): Likewise. ! * config/sparc/freebsd.h (LINK_SPEC): Likewise. ! 2002-03-28 John David Anglin ! * pa-linux.h (LOCAL_LABEL_PREFIX): Define. ! Thu Mar 28 16:33:13 2002 Jeffrey A Law (law@redhat.com) ! * combine.c (simplify_and_const_int): Make sure to apply mask ! when force_to_mode returns a constant integer. PR3311. ! 2002-03-28 Gerald Pfeifer ! * doc/invoke.texi (Warning Options): Refer to C++ Dialect Options ! and Objective-C Dialect Options. ! 2002-03-28 Richard Henderson ! * config/alpha/alpha.c (alpha_emit_conditional_branch): TFmode NE ! comparison should be done vs !=0 not >0 return code. Tidy cases. ! 2002-03-28 Richard Henderson ! * c-decl.c (finish_function): New arg can_defer_p. Pass it ! on to c_expand_body. ! * c-tree.h (finish_function): Update decl. ! * c-objc-common.c, c-parse.in, objc/objc-act.c: Update calls. ! 2002-03-27 Andreas Schwab ! * config/i386/i386.c (classify_argument): Also check for ! QUAL_UNION_TYPE. ! 2002-03-27 Rainer Orth ! * doc/install.texi (alpha*-dec-osf*): Don't need --enable-libgcj ! any more. ! Wed Mar 27 22:52:02 CET 2002 Zdenek Dvorak ! * cfgrtl.c (merge_blocks_nomove): Use set_block_for_insn instead of ! assigning to BLOCK_FOR_INSN directly. ! Wed Mar 27 22:46:04 CET 2002 Jan Hubicka ! * i386.c (ix86_output_addr_diff_elt): Remove binutils bug workaround. ! 2002-03-27 Richard Henderson ! * toplev.c (rest_of_compilation): Don't compile if we've had errors. ! 2002-03-27 Richard Henderson ! * config/sparc/freebsd.h, config/sparc/linux.h, config/sparc/linux64.h, ! config/sparc/netbsd-elf.h, config/sparc/pbd.h, config/sparc/sol2.h, ! config/sparc/vxsim.h (LOCAL_LABEL_PREFIX): Define. ! 2002-03-27 Richard Henderson ! PR target/6054 ! * config/ia64/ia64.c (ia64_expand_call): Use pic patterns for ! TARGET_CONST_GP. Simplify conditions. ! 2002-03-26 Vladimir Makarov ! * pa/pa-pro-end.h (CPP_PREDEFINES): Add -D__pro__. ! * pa/lib2funcs.asm: Don't use .SPACE and .SUBSPACE if __pro__ ! or __rtems_ is defined. ! 2002-03-26 Richard Henderson ! * config/alpha/alpha.c (alpha_emit_set_const): Add a REG_EQUAL note ! if a non-trivial load was emitted. ! (alpha_emit_set_const_1): Remove obsolete extension. Fix thinko ! in high+extra+low case. ! 2002-03-26 Richard Henderson ! * config.gcc (sparc*-solaris): Use float_format=sparc. ! 2002-03-26 Richard Henderson ! * config/sparc/sparc.h (MAX_WCHAR_TYPE_SIZE): Don't define. ! * config/sparc/linux-aout.h (MAX_WCHAR_TYPE_SIZE): Don't undef. ! * config/sparc/linux.h, config/sparc/linux64.h: Likewise. ! * config/sparc/sol2.h (WCHAR_TYPE, WCHAR_TYPE_SIZE): Redefine. ! (WINT_TYPE_SIZE): Fix at 32. ! 2002-03-26 Richard Henderson ! * toplev.c (rest_of_compilation): Delay emit_initial_value_sets ! until after eh landing pad generation. ! * config/alpha/alpha.c (alpha_gp_save_rtx): Use gen_mem_addressof. ! * config/alpha/alpha.md (exception_receiver_2): Only accept MEMs. ! 2002-03-26 Richard Henderson ! * expr.h (ADD_PARM_SIZE): One more convert for INC. ! 2002-03-26 David Edelsohn ! * config/rs6000/aix51.h (WCHAR_TYPE): Define. ! 2002-03-26 Hans Boehm ! * config/ia64/linux.h (MD_FALLBACK_FRAME_STATE_FOR): ! Restore more of the signal context. Set no_reg_stack_frame. ! * config/ia64/unwind-ia64.c (unw_state_record): ! Add no_reg_stack_frame, comments. ! (uw_frame_state_for): Initialize when field to UNW_WHEN_NEVER. ! (uw_update_context): Adjust bsp when unwinding from leaf, ! but not signal frame. ! 2002-03-26 Bob Wilson ! * config/xtensa/xtensa.c (xtensa_va_arg): Handle variable-sized types. ! 2002-03-26 Richard Earnshaw ! PR target/5621 ! * arm.md (define_asm_attributes): Reapply patch of Thu Sep 9, 1999: ! "Add a pool_range attribute", which was lost during the ARM/Thumb ! merge. ! 2002-03-26 Bob Wilson ! * config/xtensa/xtensa.c (xtensa_valid_move): Allow move from ! a register into the MAC16 accumulator. ! 2002-03-26 Hartmut Penner ! * config/s390/s390.c (s390_emit_epilogue): Change epilogue ! code to not restoring global registers. ! 2002-03-26 Richard Henderson ! * expr.h (ADD_PARM_SIZE): Cast INC to ssizetype. ! (SUB_PARM_SIZE): Cast DEC to ssizetype. ! * config/alpha/alpha.c (alpha_va_arg): Read MUST_PASS_IN_STACK ! types from the normal argument frame. ! * config/sparc/sparc.c (function_arg_pass_by_reference): Pass ! variable sized objects by reference. ! (sparc_va_arg): Receive them by reference too. ! 2002-03-25 Bruce Korb ! * Makefile.in(check-fixinc): run "$(MAKE) check" in the fixinc ! directory when autogen is detected. ! 2002-03-25 Richard Henderson ! * recog.c (peephole2_optimize): Distribute EH_REGION -1 notes ! anywhere in the block. Don't refer to insns that have been ! removed from the chain. Iterate backward through the new insns. ! Don't refer to edges that have been removed. ! 2002-03-26 Alan Modra ! * combine.c (simplify_comparison ): Correct ! test for overflow of constant. ! 2002-03-25 Richard Earnshaw ! PR target/2623 ! * arm.md (loadhi_preinc, loadhi_predec, loadhi_shiftpreinc) ! (loadhi_shiftpredec, loadhi-with-writeback peephole): Don't use ! these patterns on arm_archv4. ! 2002-03-22 Nick Clifton ! * config/mcore/mcore.h (CC1_SPEC): Define only if not already ! defined. Do not disable exceptions or rtti. ! * config/mcore/mcore-pe.h (CC1_SPEC): Define before including ! mcore.h. Disable exceptions and rtti, since they are not ! supported by EPOC. ! 2002-03-25 Jakub Jelinek ! * regrename.c (build_def_use): Move recog_memoized ! before extract_insn. ! 2002-03-25 Jakub Jelinek ! PR target/6043 ! * expr.c (emit_group_store): Handle storing into CONCAT. ! 2002-03-25 Jakub Jelinek ! * regrename.c (build_def_use): Share RTL between MATCH_OPERATOR and ! corresponding MATCH_DUP. ! 2002-03-24 Richard Henderson ! * unroll.c (unroll_loop): Zero label_map. ! * gcse.c: Include except.h. ! * Makefile.in (gcse.o): Update. ! 2002-03-24 Richard Henderson ! * varasm.c (asm_emit_uninitialised): Revert 2002-03-14 change. ! Do resolve_unique_section before shared data clause. ! 2002-03-24 Richard Henderson ! * config/alpha/elf.h (STARTFILE_SPEC): Use crtbeginT with -static. ! 2002-03-24 Richard Henderson ! * recog.c (peephole2_optimize): Split blocks when EH insns are ! generated in the middle of a block. Do global life update if ! zapped EH edges. ! 2002-03-24 Richard Henderson ! * mips.c (mips_function_value): Only promote_mode for non-libcalls. ! 2002-03-24 Neil Booth ! preprocessor/3951 ! * gcc.c (cpp_options): Pass -MD through as -MD not -M -MF. ! * cppinit.c (cpp_handle_option): Set no_ouput if -MD or -MMD. ! (init_dependency_output): Don't make no_output decision here. ! 2002-03-24 Stephane Carrez ! * config/m68hc11/m68hc11.c (m68hc11_autoinc_compatible_p): New function. ! (m68hc11_split_move): Call it to see if the source and destination ! operands use the same direction auto inc/dec mode, otherwise make the ! source an offsetable memory operand and generate an add. ! 2002-03-24 Stephane Carrez ! * config/m68hc11/m68hc11.md ("*subsi3_zero_extendhi"): Allow address ! register for operand 2. ! ("*subsi3_zero_extendqi"): Likewise. ! ("*iorhi3_gen"): Do the operation on the upper bits and then lower ! bits so that it is compatible with a pop. ! ("*andhi3_gen"): Likewise. ! ("xorhi3"): Likewise. ! 2002-03-24 Richard Henderson ! PR optimization/5742 ! * machmode.def: Add inner mode field to complex modes. ! * config/mips/mips.c (mips_function_value): Always define. Add ! new argument to handle libcalls. ! * config/mips/mips.h (LIBCALL_VALUE): Use mips_function_value. ! (FUNCTION_VALUE): Likewise. ! * config/mips/abi64.h (FUNCTION_VALUE): Remove. ! * config/mips/mips-protos.h: Update. ! 2002-03-23 Richard Henderson ! * config/sparc/sparc.c (sparc_emit_floatunsdi): New. ! * config/sparc/sparc-protos.h: Update. ! * config/sparc/sparc.md (floatunsdisf2, floatunsdidf2): New. ! 2002-03-23 Richard Henderson ! * config/sparc/gmon-sol2.c (internal_mcount): Assume either ! _start or _init begins the text segment. ! 2002-03-23 Alan Modra ! * combine.c (simplify_comparison): When widening modes, ignore ! sign extension on CONST_INTs. ! 2002-03-22 Bob Wilson ! * config/xtensa/xtensa.c (print_operand): Fix incorrect mode ! passed to adjust_address. Fix comment formatting. ! 2002-03-22 Alexandre Oliva ! * config/mips/mips.h (MASK_RETURN_ADDR): Define. ! (TARGET_PTRMEMFUNC_VBIT_LOCATION): Define. ! 2002-03-22 Richard Henderson ! * c-pragma.c (maybe_apply_renaming_pragma): New. ! (handle_pragma_redefine_extname, pending_redefine_extname): New. ! (handle_pragma_extern_prefix, pragma_extern_prefix): New. ! (init_pragma): Register them. ! * c-pragma.h (maybe_apply_renaming_pragma): Declare. ! * c-decl.c (finish_decl): Call it. ! * cp/decl.c (cp_finish_decl): Likewise. ! * doc/extend.texi: Document the new pragmas. ! ! * config/alpha/osf.h (CPP_SUBTARGET_SPEC): Add __EXTERN_PREFIX. ! (HANDLE_PRAGMA_EXTERN_PREFIX): New. ! ! * config/i386/sol2.h (CPP_PREDEFINES): Add __PRAGMA_REDEFINE_EXTNAME. ! (HANDLE_PRAGMA_REDEFINE_EXTNAME): New. ! * config/sparc/sol2.h: Likewise. ! 2002-03-22 Bob Wilson ! * config/xtensa/xtensa-protos.h (non_acc_reg_operand): Remove. ! (xtensa_valid_move, xtensa_preferred_reload_class): Define. ! * config/xtensa/xtensa.c (non_acc_reg_operand): Remove. ! (xtensa_valid_move, xtensa_preferred_reload_class): Define to ! prevent use of sp as a reload register. ! (xtensa_emit_move_sequence): Use xtensa_valid_move instead of ! non_acc_reg_operand. ! * config/xtensa/xtensa.h (PREDICATE_CODES): Remove non_acc_reg_operand. ! (PREFERRED_RELOAD_CLASS): Move code to xtensa_preferred_reload_class. ! * config/xtensa/xtensa.md (movsi_internal, movhi_internal, ! movqi_internal): Use xtensa_valid_move instead of non_acc_reg_operand. ! ! 2002-03-22 Jakub Jelinek ! PR optimization/5854 ! * config/m68hc11/m68hc11.h (CONST_OK_FOR_LETTER_VALUE_P): Use K for 0. ! Shut up warnings. ! (CONST_DOUBLE_OK_FOR_LETTER_P): Use G for 0.0. ! (EXTRA_CONSTRAINT): Use S for non-push memory operand. ! * config/m68hc11/m68hc11.c (m68hc11_split_move): Handle setting from ! const0 if scratch register was not allocated. ! (m68hc11_reload_operands, m68hc11_gen_lowpart, m68hc11_gen_highpart, ! m68hc11_z_replacement): Replace gen_rtx (CONST_INT, VOIDmode, ...) ! with GEN_INT (...). ! (m68hc11_reorg): Compute BLOCK_FOR_INSN before reload_cse_regs. ! * config/m68hc11/m68hc11.md: Replace gen_rtx (CONST_INT, VOIDmode, ...) ! with GEN_INT (...) everywhere. Remove constraints in define_split ! patterns. ! (movdi_internal, movdf_internal, movsi_internal, movsf_internal): Don't ! require scratch register for setting 0 into regs/non-pushable memory. ! 2002-03-22 Alexandre Oliva ! * flow.c (calculate_global_regs_live): Clear aux fields of ! ENTRY and EXIT. ! 2002-03-22 Jakub Jelinek ! * config/v850/v850.c (v850_reorg): Only call alter_subreg on ! REG or MEM subregs, pass rtx * instead of rtx to it. ! * config/i860/i860.c (output_delayed_branch, output_delay_insn): Pass ! rtx * instead of rtx to alter_subreg. ! * config/m32r/m32r.c (gen_split_move_double): Likewise. ! * config/pj/pj.c (pj_output_rval): Likewise. ! 2002-03-22 Richard Henderson ! PR target/3177 ! * config/ia64/ia64.h (CUMULATIVE_ARGS): Add int_regs. ! (INIT_CUMULATIVE_ARGS, INIT_CUMULATIVE_INCOMING_ARGS): Update. ! * config/ia64/ia64.c (ia64_function_arg_advance): Set int_regs. ! (ia64_expand_prologue): Look at int_regs, not words, for number ! of incomming int regs. ! Fri Mar 22 16:00:06 CET 2002 Jan Hubicka ! * cfgcleanup.c (outgoing_edges_math): Fix condition; relax ! frequencies match; avoid match on different loop depths. ! (try_crossjump_to_bb): Kill tests that no longer brings time ! savings. ! * cfgrtl.c (force_nonfallthru_and_redirect): Fix loop_depth ! updating code. ! (split_edge): Likewise. ! 2002-03-21 Richard Henderson ! PR target/5996 ! * fixinc/inclhack.def (solaris_stdio_tag): New. ! * fixinc/fixincl.x: Regenerate. ! 2002-03-21 Eric Botcazou ! PR c/5597 ! * c-typeck.c (process_init_element): Flag non-static ! initialization of a flexible array member as illegal. ! 2002-03-22 Alan Modra ! * config/rs6000/t-linux64: New. ! * config.gcc (powerpc64-*-linux* ): Drop t-ppcos and ! t-ppccomm. Use t-rs6000 and t-linux64. ! (powerpc64-*-gnu* ): Likewise. ! * mklibgcc.in (SHLIB_MKMAP_OPTS): New variable. ! * mkmap-symver.awk (dotsyms): If set, output .foo as well as foo. ! * Makefile.in (SHLIB_MKMAP_OPTS): Pass to mklibgcc. ! 2002-03-21 Aldy Hernandez ! * langhooks.c (lhd_tree_inlining_cannot_inline_tree_fn): Check ! flag_really_no_inline instead of optimize == 0. ! * c-objc-common.c (c_cannot_inline_tree_fn): Same. ! * cp/tree.c (cp_cannot_inline_tree_fn): Same. ! * flags.h (flag_really_no_inline): New. ! * c-common.c (c_common_post_options): Initialzie ! flag_really_no_inline. ! * toplev.c (flag_really_no_inline): New. ! 2002-03-21 Jakub Jelinek ! * config/avr/avr.md (length): Fix length computation for ! conditional branches. ! 2002-03-21 Richard Henderson ! * config/rs6000/rs6000.c (rs6000_select_rtx_section): Put symbolic ! constants in .data when -fpic. ! 2002-03-21 Tom Tromey ! * config/i386/sol2.h (ASM_QUAD): Undef. Fixes PR bootstrap/5948. ! 2002-03-21 Gerald Pfeifer ! * doc/contrib.texi (Contributors): Use GNU/Linux instead of Linux ! where appropriate. ! Thu Mar 21 09:50:48 2002 Richard Kenner ! * config/ia64/ia64.c (hfa_element_mode, case ARRAY_TYPE): Recurse. ! * expr.c (emit_group_store): Don't copy const0_rtx to a CONCAT. ! 2002-03-21 Eric Botcazou ! Richard Henderson ! PR c/5354: ! * c-common.c (c_expand_expr): Preserve result of a statement ! expression if needed. ! 2002-03-21 Jakub Jelinek ! PR bootstrap/4195 ! * genrecog.c (maybe_both_true_mode): Remove. ! (maybe_both_true_2, write_switch): Revert 2001-07-17 changes. ! * machmode.def (Pmode): Likewise. ! 2002-03-21 Rainer Orth ! * fixinc/inclhack.def (alpha_assert): Fix assert macro in Tru64 ! UNIX assert.h. ! * fixinc/fixincl.x: Regenerate. ! 2002-03-20 Jason Merrill ! * config/i386/cygwin.h (DWARF2_UNWIND_INFO): Define to 0. ! 2002-03-20 Bob Wilson ! * config/xtensa/xtensa.h (ASM_OUTPUT_POOL_PROLOGUE): Emit a ! ".literal_position" directive before the constant pool. ! 2002-03-20 Gerald Pfeifer ! * doc/contrib.texi (Contributors): Update Geoffrey Keating. ! Add Craig Rodrigues. ! Add Brad Lucier to testers. ! 2002-03-20 Jakub Jelinek ! PR target/4792 ! * config/arc/arc.md (movsicc, movdicc, movsfcc, movdfcc): Add mode ! to if_then_else. ! (movsicc_insn, movdicc_insn, movsfcc_insn, movdfcc_insn): Likewise. ! * config/arc/arc.c (arc_final_prescan_insn): Use extract_insn_cached ! instead of insn_extract. ! 2002-03-20 Jakub Jelinek ! PR bootstrap/4192 ! * config/fr30/fr30.md (jump): Remove clobber of fixed register. ! * genemit.c (output_added_clobbers_hard_reg_p): Only output return ! stmt if some case has been output. ! 2002-03-20 Jakub Jelinek ! PR c/5972 ! * config/i386/i386.md (movdicc_c_rex64, movsicc_noc, movhicc_noc, ! movsfcc_1, movdfcc_1): Add %O2. ! * config/i386/i386.c (print_operand): Handle %ON. ! Print . before float condition codes in Sun as cmov syntax. ! * config/i386/sol2.h (CMOV_SUN_AS_SYNTAX): Define for Sun as. ! * config.gcc (i[34567]86-*-solaris2*): Remove comment which is ! no longer true. ! 2002-03-20 Philip Blundell ! * config/arm/arm.c (arm_output_epilogue): Don't generate separate ! return instruction if PC was popped. ! 2002-03-20 Hans-Peter Nilsson ! * config/mmix/mmix.md ("fixuns_truncdfdi2"): Use (unsigned_fix:DI ! (unsigned_fix:DF op1)), not (unsigned_fix:DI (fix:DF op1)). ! ("truncdfsf2"): Correct operator is float_truncate, not fix. ! ("*truncdfsf2_real"): Ditto. ! ("*nonlocal_goto_receiver_expanded"): Fix output template formatting. ! * config/mmix/mmix.h (WCHAR_TYPE, WCHAR_TYPE_SIZE): Don't define. ! 2002-03-19 Jim Blandy ! * c-lex.c (cb_file_change): Pass the #inclusion's line number to ! the start_source_file debug hook, not the current line number. ! * cppmacro.c (cpp_macro_definition): Emit a space after the macro ! name, even if the replacement list contains no tokens, as required ! by Dwarf. ! 2002-03-19 David Edelsohn ! * config/rs6000/rs6000.c (rs6000_override_options): Only warn ! about -fpic/-fPIC if extra_warnings set. ! 2002-03-19 Richard Henderson ! * flow.c (EH_USES): Provide default. ! (calculate_global_regs_live): Use it for EH edges and noreturn calls. ! * doc/tm.texi (EH_USES): New. ! * config/ia64/ia64.c (ia64_eh_uses): New. ! * config/ia64/ia64-protos.h: Update. ! * config/ia64/ia64.h (EH_USES): New. ! 2002-03-20 Alan Modra ! * defaults.h (SUPPORTS_WEAK): Set if ASM_WEAKEN_DECL. ! * varasm.c (assemble_alias): Use ASM_WEAKEN_DECL. ! * doc/tm.texi (ASM_WEAKEN_DECL): Document. ! (ASM_WEAKEN_LABEL): Mention ASM_WEAKEN_DECL. ! (SUPPORTS_WEAK): Likewise. ! 2002-03-19 Richard Henderson ! PR 5879 ! * except.c (current_function_has_exception_handlers): New. ! * except.h: Declare it. ! * sibcall.c (optimize_sibling_and_tail_recursive_call): Use it. ! Combine tests that disable all sibcalls for the function. ! 2002-03-19 Richard Henderson ! PR 5977, 5991 ! * config/ia64/ia64.c: Revert 2002-03-01 patch. ! * config/ia64/ia64.h (INIT_EXPANDERS): New. ! 2002-03-19 Olivier Hainque ! * varasm.c (output_constant_def): Don't call ENCODE_SECTION_INFO ! for INTEGER_CST. ! 2002-03-19 Jason Merrill ! * varasm.c (globalize_decl): Get the name from the RTL, not ! DECL_ASSEMBLER_NAME. ! * Makefile.in (LIBGCC2_DEBUG_CFLAGS): Set to -g. ! 2002-03-19 Dale Johannesen ! PR optimization/5999, middle-end/5731 ! * expr.c (expand_expr) [RDIV_EXPR]: Only convert real divisions into ! multiplications by reciprocals. ! 2002-03-19 Bob Wilson ! * config/xtensa/xtensa.md (adddi3, adddi_carry, subdi3, ! subdi_carry): Define. ! Tue Mar 19 14:12:32 2002 Richard Kenner ! * config/sparc/sparc.h (CAN_ELMINIATE): Can only eliminate FP ! in favor of SP if FRAME_POINTER_REQUIRED is false. ! 2002-03-19 Jakub Jelinek ! PR c/5656 ! * langhooks.h (struct lang_hooks_for_tree_inlining): Add ! convert_parm_for_inlining. ! * c-lang.c (LANG_HOOKS_TREE_INLINING_CONVERT_PARM_FOR_INLINING): ! Define. ! * langhooks-def.h: Likewise. ! * objc/objc-lang.c: Likewise. ! * langhooks.c (lhd_tree_inlining_convert_parm_for_inlining): New ! function. ! * tree-inline.c (initialize_inlined_parameters): ! Call convert_parm_for_inlining lang hook if needed. ! * c-typeck.c (c_convert_parm_for_inlining): New function. ! * c-tree.h (c_convert_parm_for_inlining): Add prototype. ! 2002-03-18 Kaveh R. Ghazi ! * gcse.c (insert_insn_end_bb): Fix typo in last change. ! 2002-03-18 Mark Mitchell ! * calls.c (precompute_arguments): Do not assume that temporaries ! can be destroyed after expanding the argument. ! (expand_call): Likewise. ! 2002-03-18 Ashif Harji ! * gcc.c (struct compiler default_compilers): Add ! -no-integrated-cpp flag to invoke an external cpp. ! (struct option_map option_map[]): Likewise. ! * objc/lang-specs.h (struct compiler default_compilers): Add ! -no-integrated-cpp flag to invoke an external cpp. ! * doc/invoke.texi: Document -no-integrated-cpp flag. ! 2002-03-18 Alan Modra ! David Edelsohn ! * c-pragma.h (HANDLE_PRAGMA_WEAK): Define if ASM_WEAKEN_DECL too. ! * config/rs6000/linux64.h (ASM_DECLARE_FUNCTION_NAME): Don't emit ! .weak for code sym. Do emit .size for descriptor sym. ! (ASM_DECLARE_FUNCTION_SIZE): Define. ! * config/rs6000/rs6000.h (ASM_WEAKEN_DECL): Define. ! (ASM_OUTPUT_DEF_FROM_DECLS): Don't emit .weak here. Don't output ! .lglobl unless TARGET_XCOFF. Formatting fixes. ! (PREDICATE_CODES): Add any_operand and zero_constant. ! (HANDLE_PRAGMA_PACK): Delete. ! * config/rs6000/xcoff.h (ASM_DECLARE_FUNCTION_NAME): Don't emit ! .weak for code sym. ! (HANDLE_PRAGMA_WEAK): Remove. ! (ASM_WEAKEN_LABEL): Remove. ! (COLLECT_EXPORT_LIST): Delete. ! * config/rs6000/aix.h (HANDLE_SYSV_PRAGMA): Define. ! * config/rs6000/darwin.h (HANDLE_SYSV_PRAGMA): Define. ! ! 2002-03-18 Bob Wilson ! * config/xtensa/xtensa.h (GO_IF_MODE_DEPENDENT_ADDRESS): Treat ! constant-pool addresses as "mode-dependent". ! Mon Mar 18 18:12:48 CET 2002 Jan Hubicka ! * i386.c (override_options): Disallow preferred_stack_boundary to be ! less than 16 bytes ! (construct_container): Fix end of array check. ! (ix86_va_start): Force alignemnt to be 16 bytes. ! * linux64.h (MULTILIB_DEFAULTS): Set to "m64". ! (t-linux64): Add multilibing ! * i386.h (PROMOTE_PROTOTYPES): Set to 0 for x86_64. ! * gcse.c (hash_scan_set): Refuse instructions with EH edges. ! * basic-block.h (fixup_abnormal_edges): Declare. ! * reload1.c (fixup_abnormal_edges): Make global. ! * reg-stack.c (convert_regs): Use it. ! * gcse.c (insert_insn_end_bb): Handle trapping insns. ! * reload1.c (reload_cse_delete_noop_set): Purge dead edges. ! * recog.c (peephole2_optimize): Re-distribute EH edges. ! 2002-03-18 Jason Merrill ! * configure.in: Disable checking by default on release branch. ! 2002-03-18 Jakub Jelinek ! PR target/5740 ! * expr.c (emit_group_load): Use extract_bit_field if ! needed for CONCAT arguments. ! 2002-03-18 Richard Earnshaw ! PR target/4863 ! * arm.md (tablejump): Make this a define_expand. For PIC add the ! offset to the base of the table. ! (thumb_tablejump): Matcher for Thumb tablejump insn. ! * config/arm/aout.h (ASM_OUTPUT_ADDR_DIFF_ELT): Output thumb entries ! as the difference of two labels. ! * config/arm/aof.h (ASM_OUTPUT_ADDR_DIFF_ELT): Likewise. ! * config/arm/elf.h (JUMP_TABLES_IN_TEXT_SECTION): Only put ARM jump ! tables in the code. ! * config/arm/coff.h (JUMP_TABLES_IN_TEXT_SECTION): Likewise. ! * arm.c (get_jump_table_size): If the table is not in the text ! section, return zero. ! ! 2002-03-17 Richard Henderson ! * config/alpha/alpha.c (alpha_emit_set_const_1): Build add insns ! explicitly. ! 2002-03-17 Kaveh R. Ghazi ! * ifcvt.c (dead_or_predicable): Fix uninitialized variable. ! 2002-03-17 David Edelsohn ! * expr.c (expand_expr): Sign-extend CONST_INT generated from ! TREE_STRING_POINTER. ! 2002-03-16 Richard Henderson ! * config/ia64/ia64.c (ia64_attribute_table): Move before ! targetm definition. Make static. ! 2002-03-16 Neil Booth ! * cppinit.c (print_help): Display -MD and -MMD. ! Don't display usage string. Update assertion syntax and ! typo. ! 2002-03-16 Stephane Carrez ! * config/m68hc11/m68hc11.c (m68hc11_override_options): Don't use ! soft registers by default for 68HC12. ! (m68hc11_conditional_register_usage): Don't use Z register for 68HC12 ! when compiling with -fomit-frame-pointer. ! (expand_prologue): Use push/pop to allocate 4-bytes of locals on 68HC12. ! (expand_epilogue): Likewise. ! (m68hc11_gen_rotate): Use exg when rotating by 8. ! 2002-03-16 Stephane Carrez ! * config/m68hc11/m68hc11-protos.h (ix_reg): Declare. ! * config/m68hc11/m68hc11.md ("addsi3"): Use general_operand for sources. ! (splits): Remove unused add splits. ! ("*addhi3_68hc12"): Tune constraints. ! ("addhi_sp"): Try to use X instead of Y in all cases and if the ! constant fits in 8-bits and D is dead use abx/aby instructions. ! ("*addhi3"): Remove extern declaration of ix_reg. ! ("*subsi3"): Optimize and provide new split. ! ("subhi3"): Cleanup. ! ("*subhi3_sp"): Avoid saving X if we know it is dead. ! (arith splits): For 68hc12 save the address register on the stack ! and do the arithmetic operation with a pop. ! 2002-03-16 Stephane Carrez ! * config/m68hc11/m68hc11.md ("*movqi_68hc12"): Fix constraints, avoid ! allocating QImode in address registers. ! ("*movqi_m68hc11"): Likewise. ! 2002-03-15 Mark Mitchell ! * expr.c (expand_expr): Revert previous change. ! * c-common.c (statement_code_p): Handle CLEANUP_STMT. ! * c-common.def (CLEANUP_STMT): New tree node. ! * c-common.h (CLEANUP_DECL): New macro. ! (CLEANUP_EXPR): Likewise. ! * c-semantics.c (expand_stmt): Handle CLEANUP_STMT. ! * expr.c (expand_expr): Tidy. ! * tree-dump.c (dequeue_and_dump): Handle CLEANUP_STMT. ! * tree-inline.c (initialize_inlined_parameters): Clean up ! new local variables. ! 2002-03-15 Richard Henderson ! * c-decl.c: Include c-pragma.h. ! (start_decl, start_function): Invoke maybe_apply_pragma_weak. ! (finish_function): Tidy. ! * c-pragma.c: Include c-common.h. ! (pending_weaks, apply_pragma_weak, maybe_apply_pragma_weak): New. ! (handle_pragma_weak): Use them. ! (init_pragma): Register pending_weaks. ! * c-pragma.h (maybe_apply_pragma_weak): Declare. ! * print-tree.c (print_node): Print DECL_WEAK. ! * varasm.c (mark_weak_decls): Remove. ! (remove_from_pending_weak_list): Remove. ! (add_weak): Remove. ! (asm_emit_uninitialised): Call globalize_decl for weak commons. ! (weak_decls): Make a tree_list. ! (declare_weak): Cons weak_decls directly. ! (globalize_decl): Remove weak_decls elements directly. ! (weak_finish): Simplify weak_decls walk. Don't weaken unused ! symbols. Don't pretend to handle aliases. ! (init_varasm_once): Update weak_decls registry. ! * Makefile.in: Update dependencies. ! 2002-03-15 Richard Henderson ! * config/alpha/alpha.c (alpha_va_arg): Manipulate the type ! size as a tree. ! 2002-03-15 Stephane Carrez ! * config/m68hc11/m68hc11.md ("tstqi_1"): Try to use ldab instead of tst. ! ("tstqi" split): Avoid using memory for tstqi on address register. ! (splits): Remove constraints. ! ("cmphi_1_hc12"): New from "cmphi_1" and tuned for 68HC12. ! ("cmpdf", "cmpsf"): Remove since not used. ! ("*tbeq", "*tbne", "*tbeq8", "*tbne8"): Also look in cc_status.value2. ! (peephole2): New peepholes to optimize tstqi and pre inc/dec addressing. ! 2002-03-15 Stephane Carrez ! * config/m68hc11/m68hc11.md ("negsi2"): Optimize inline case. ! ("neghi2"): Tighten constraints. ! ("one_cmplsi2"): Optimize and simplify split. ! * config/m68hc11/larith.asm (__negsi2): Likewise for library. ! 2002-03-15 Stephane Carrez ! * config/m68hc11/m68hc11.md ("logicalsi3_zexthi"): Fix constraints ! and split of AND operation to clear the upper bits. ! ("*logicalsi3_zextqi"): Likewise. ! ("*logicallhi3_zexthi_ashift8"): Likewise. ! ("*logicalsi3_silshr16"): Likewise. ! ("logicalsi3_silshl16"): Likewise. ! ("anddi3", "iordi3", "xordi3" splits): Remove constraints. ! 2002-03-15 Stephane Carrez ! * config/m68hc11/m68hc11.c (m68hc11_symbolic_p): New function. ! (m68hc11_indirect_p): New function. ! (m68hc11_override_options): Must set MASK_NO_DIRECT_MODE for 68HC12. ! (m68hc11_gen_highpart): Use TARGET_NO_DIRECT_MODE instead of ! TARGET_M6812. ! (asm_print_register): Likewise. ! * config/m68hc11/m68hc11-protos.h (m68hc11_symbolic_p): Declare. ! (m68hc11_indirect_p): Declare. ! * config/m68hc11/m68hc11.h (EXTRA_CONSTRAINT): New constraint 'R', 'Q'. ! (TARGET_NO_DIRECT_MODE, TARGET_RELAX): New. ! (TARGET_SWITCHES): New option -mrelax. ! * config/m68hc11/m68hc11.md ("andsi3"): Allow soft register for ! destination. ! ("iorsi3", "xorsi3"): Likewise. ! ("andhi3", "andqi3", "iorhi3", "iorqi3"): Use a define_expand. ! ("*andhi3_mem"): New to handle destination in memory with bclr ! and a scratch register. ! ("*andqi3_mem", "*iorhi3_mem", "*iorqi3_mem"): Likewise. ! ("*andhi3_const"): New when operand2 is constant. ! ("*andqi3_const", "*iorhi3_const", "*iorqi3_const"): Likewise. ! ("*andhi3_gen"): Cleanup of the old "andhi3". ! ("*andqi3_gen", "*iorhi3_gen", "*iorqi3_gen"): Likewise. ! ("xorqi3"): Update constraints. ! 2002-03-15 Stephane Carrez ! * config/m68hc11/m68hc11.c (m68hc11_small_indexed_indirect_p): Look ! for reg_equiv_memory_loc when the operand is a register that does ! not get a hard register (stack location). ! (tst_operand): After reload, accept all memory operand. ! (symbolic_memory_operand): Fix detection of symbolic references. ! * config/m68hc11/m68hc11.h (VALID_CONSTANT_OFFSET_P): For 68HC12 ! accept symbols and any constant. ! 2002-03-15 Stephane Carrez ! * config/m68hc11/m68hc11.c (emit_move_after_reload): Add a REG_INC ! note on the insn that sets the soft frame register. ! (must_parenthesize): ix and iy are also reserved names. ! (print_operand_address): One more place where parenthesis are required ! to avoid confusion with register names. ! (m68hc11_gen_movhi): Allow push of stack pointer. ! (m68hc11_check_z_replacement): Fix handling of parallel with a ! clobber. ! (m68hc11_z_replacement): Must update the REG_INC notes to tell what ! the replacement register is. ! * config/m68hc11/m68hc11.h (REG_CLASS_CONTENTS): Switch Z_REGS ! and D8_REGS classes. ! (MODES_TIEABLE_P): All modes are tieable except QImode. ! 2002-03-15 Stephane Carrez ! * config/m68hc11/larith.asm (___adddi3): Optimize saving of result. ! (___subdi3): Likewise. ! (__mulsi3, __mulhi32): Avoid using _.tmp scratch location. ! (__map_data_section): Optimize 68hc11 case. ! 2002-03-15 Stephane Carrez ! * config/m68hc11/m68hc11.c (m6812_cost): Make cost of add higher ! than a shift to avoid adding a register with itself. ! (m68hc11_memory_move_cost): Take into account NO_REGS. ! (m68hc11_register_move_cost): Update and use memory move cost ! for soft registers. ! (m68hc11_address_cost): Make cost of valid offset not 0 so that ! it gives more opportunities to cse to optimize. ! * config/m68hc11/m68hc11.h (REGISTER_MOVE_COST): Pass the mode. ! * config/m68hc11/m68hc11-protos.h (m68hc11_register_move_cost): Update. ! 2002-03-15 Jason Merrill ! * varasm.c (globalize_decl): New fn. ! (assemble_start_function): Use it. ! (asm_emit_uninitialized): Use it. ! (assemble_alias): Use it. ! (assemble_variable): Use it. ! 2002-03-15 Jason Merrill ! * varasm.c (assemble_variable): Use zeros for a decl with DECL_INITIAL ! of error_mark_node. ! 2002-03-15 Jakub Jelinek ! PR bootstrap/4128 ! * config/sparc/sparc.c (gen_v9_scc): Move early clobber test ! before movrXX only, use reg_overlap_mentioned_p. ! Only special case NE if just one insn can be generated. ! 2002-03-15 Richard Earnshaw ! PR target/5712 ! * arm.md (movaddr, movaddr_insn): Delete. ! 2002-03-15 Jason Merrill ! * toplev.c (wrapup_global_declarations): Clarify variable handling. ! -fkeep-static-consts doesn't apply to comdats. ! 2002-03-14 Richard Henderson ! PR target/5312 ! * config/ia64/ia64.c: Include tm_p.h last. ! (gen_nop_type): Remove duplicate definition. ! (cycle_end_fill_slots): Set sched_data for second L slot. ! (maybe_rotate): Call cycle_end_fill_slots to fill in nop slots. ! (nop_cycles_until): Fix typos. ! 2002-03-15 Jakub Jelinek ! PR optimization/5891 ! * unroll.c (copy_loop_body) [CALL_INSN]: Copy SIBLING_CALL_P flag. ! 2002-03-14 David Mosberger , Hans Boehm ! * config/ia64/unwind-ia64.c: Handle copy_state and label_state ! descriptors correctly. ! 2002-03-14 Zack Weinberg ! * cpphash.h (struct lexer_state): Remove line_extension member. ! * cpplib.c (dequote_string, do_linemarker): New functions. ! (linemarker_dir): New data object. ! (DIRECTIVE_TABLE): No longer need to interpret #line in ! preprocessed source. Delete obsolete comment about return ! values of handlers. ! (end_directive, directive_diagnostics, _cpp_handle_directive): ! Don't muck with line_extension. ! (directive_diagnostics): No need to issue warnings for ! linemarkers here. ! (_cpp_handle_directive): Issue warnings for linemarkers here, ! when appropriate. Dispatch linemarkers to do_linemarker, not ! do_line. ! (do_line): Code to handle linemarkers split out to do_linemarker. ! Convert escape sequences in filename argument, both places. ! * cppmacro.c (quote_string): Rename cpp_quote_string and ! export. All callers changed. ! * cpplib.h (cpp_quote_string): Prototype. ! * cppmain.c (print_line): Call cpp_quote_string on to_file ! before printing it. ! * doc/cpp.texi: Document that escapes are now interpreted in ! #line and in linemarkers, and that non-printing characters are ! converted to octal escapes when linemarkers are generated. ! 2002-03-14 Richard Earnshaw ! Jeroen Dobbelaere ! PR target/5828 ! * arm.c (arm_output_epilogue): Fix floating-point register save ! adjustment when using a frame pointer. ! 2002-03-13 Hans-Peter Nilsson ! * config/mmix/mmix.c: Improve comments. ! (mmix_target_asm_function_prologue): Drop variable ! empty_stack_frame. Don't allocate unused slot above fp. ! (mmix_target_asm_function_epilogue): Mirror prologue changes. ! (mmix_expand_builtin_va_arg): Do all computations on trees. ! * config/mmix/mmix.h (MMIX_GNU_ABI_REG_ALLOC_ORDER): Don't have ! brace in first column. ! (enum reg_class): Ditto. ! (FIRST_PARM_OFFSET): Now 0. ! (USER_LABEL_PREFIX): Remove #if 0:d definition. ! (LINK_SPEC): Don't defsym __.MMIX.start..text if linking ! relocatably. Always produce ELF, not mmo if linking relocatably. ! 2002-03-13 David Edelsohn ! * config/rs6000/rs6000.h (PAD_VARARGS_DOWN): Define. ! * config/rs6000/rs6000.c (rs6000_va_arg): Use ! std_expand_builtin_va_arg if not ABI_V4. ! 2002-03-13 Jakub Jelinek ! PR target/5626 ! * config/sparc/sparc.md (normal_branch, inverted_branch, ! normal_fp_branch, inverted_fp_branch, normal_fpe_branch, ! inverted_fp_branch): Adjust calls to output_cbranch. ! Set length attribute. ! (normal_int_branch_sp64, inverted_int_branch_sp64): Adjust calls to ! output_v9branch. Set length attribute. ! * config/sparc/sparc.c (fcc0_reg_operand, noov_compare64_op): New ! predicates. ! (noov_compare_op): Handle CCX_NOOVmode the same way as CC_NOOVmode. ! (output_cbranch): Likewise. Handle far branches. ! (output_v9branch): Handle far branches. ! * config/sparc/sparc-protos.h (output_cbranch, output_v9branch): ! Adjust prototypes. ! * config/sparc/sparc.h (PREDICATE_CODES): Add fcc0_reg_operand and ! noov_compare64_op predicates. ! 2002-03-13 Jason Merrill ! * gthr-posix.h (__gthread_active_p): Move __gthread_active_ptr ! into the function and constify it. ! * gthr-dce.h, gthr-solaris.h: Likewise. ! 2002-03-12 Hans-Peter Nilsson ! * config/cris/cris.c (cris_print_operand): Avoid ! traditional-warning for 0xffffffff. ! (cris_expand_builtin_va_arg): Do all computations on trees. ! 2002-03-13 Ulrich Weigand ! * expr.c (expand_expr, case NE_EXPR): Do not call copy_to_reg with ! VOIDmode operand. Add compile-time optimization for constant results. ! 2002-03-13 Hartmut Penner ! * config/s390/s390.h (PROFILE_BEFORE_PROLOGUE): Emit profile code ! before prologue, to avoid scheduling problems. ! 2002-03-13 Jakub Jelinek ! * config/sparc/sparc.h (INITIAL_FRAME_POINTER_OFFSET): Remove. ! (ELIMINABLE_REGS): Add sfp->sp. ! (INITIAL_ELIMINATION_OFFSET): Compute sfp->sp offset too. ! 2002-03-13 Jakub Jelinek ! PR optimization/5892 ! * config/ia64/ia64.c (rotate_one_bundle): Update current packet. ! 2002-03-13 Jakub Jelinek ! * loop.c (basic_induction_var): Don't call convert_modes if mode ! classes are different. ! 2002-03-12 Richard Henderson ! PR optimization/5901 ! * function.c (reposition_prologue_and_epilogue_notes): Position ! the markers after/before the last/first insn not deleted. ! 2002-03-12 Richard Henderson ! PR optimization/5878 ! * config/arc/arc.h, config/cris/cris.h, config/i386/i386.h, ! config/m68k/m68k.h, config/s390/s390.h, config/sparc/sparc.h ! (PIC_OFFSET_TABLE_REGNUM): Conditionalize on flag_pic. ! * config/arm/arm.h config/i386/i386.h, config/m68k/m68k.h, ! config/sparc/sparc.h (CONDITIONAL_REGISTER_USAGE): Set ! PIC_OFFSET_TABLE_REGNUM based on INVALID_REGNUM not flag_pic. ! * config/arc/arc.h (CONDITIONAL_REGISTER_USAGE): New. ! * config/arm/arm.c (arm_pic_register): Init to INVALID_REGNUM. ! (arm_override_options): Set arm_pic_register if TARGET_APCS_STACK ! also. Don't set it if not flag_pic. ! * config/i386/i386.c (ix86_save_reg): Trust PIC_OFFSET_TABLE_REGNUM ! to be INVALID_REGNUM when not used. ! 2002-03-13 Aldy Hernandez ! * expmed.c (store_bit_field): Reset alias set for memory. ! (extract_bit_field): Same. ! 2002-03-12 Chris Meyer ! * genflags.c (gen_insn): Use IS_VSPACE. ! * genoutput.c (output_insn_data): Likewise. ! (process_template): Likewise. ! 2002-03-12 Bob Wilson ! * config/xtensa/xtensa.c (xtensa_expand_block_move): Use ! validize_mem() instead of change_address to avoid clobbering ! memory attributes. ! 2002-03-12 Jakub Jelinek ! * c-lex.c (cb_ident, c_lex): Remove unnecessary cast. ! (lex_string): Use unsigned char pointers. ! 2002-03-12 Ulrich Weigand ! * reload1.c (reload): Ignore MEM REG_EQUIV notes if the equivalent ! is not a valid memory_operand. ! 2002-03-12 Bob Wilson ! * config/xtensa/xtensa-config.h: Define XCHAL_HAVE_LOOPS. ! * config/xtensa/lib1funcs.asm: Fix copyright to include ! special case for libgcc files. ! (__udivsi3): Avoid loop instructions when XCHAL_HAVE_LOOPS is 0. ! (__divsi3): Likewise. ! (__umodsi3): Likewise. ! (__modsi3): Likewise. ! * config/xtensa/lib2funcs.S: Fix copyright to include ! special case for libgcc files. ! 2002-03-12 Michael Matz ! * config/rs6000/rs6000.md (ne0+4): Add extra CLOBBER. ! (ne0+5): Use new clobber to generate proper shift pattern. ! 2002-03-12 Bob Wilson ! * config/xtensa/t-xtensa (CRTSTUFF_T_CFLAGS_S): Define. ! 2002-03-12 Bob Wilson ! * config/xtensa/xtensa.h (ASM_OUTPUT_POOL_PROLOGUE): Switch ! to function_section before writing out the constant pool. ! 2002-03-12 Zack Weinberg ! * Makefile.in: Give texi2pod its input file as a command ! line argument, not on stdin. ! 2002-03-12 Andrew MacLeod ! * config/sparc/sparc.h (RETURN_ADDR_RTX): Include v9 stack bias in ! address calculation. ! 2002-03-12 Ulrich Weigand ! * config/s390/s390.md (reload_insi, reload_indi): Change mode of ! scratch register to DImode / TImode. ! config/s390/s390.c (s390_expand_plus_operand): Make sure scratch ! register used does not overlap the target. ! 2002-03-11 Neil Booth ! * Makefile.in: Update. ! doc: ! * cppenv.texi, cppopts.texi: Split out of cpp.texi and gcc.texi. ! Update documentation. ! * gcc.texi: Include cppopts.texi and cppenv.texi. ! * cpp.texi: Include cppopts.texi and cppenv.texi. ! 2002-03-11 Ulrich Weigand ! * config/s390/s390.h (REG_ALLOC_ORDER): Add missing register. ! 2002-03-11 Douglas B Rupp ! * toplev.c (vms_fopen): Remove, not needed. ! * vmsdbgout.c (lookup_filename): Adjust creation date for GMT. ! * config/alpha/xm-vms.h (__UNIX_FWRITE): Define. ! * config/alpha/alpha.c (alpha_sa_size, VMS): Don't reserve space ! for FP, already done later. ! * toplev.c (debug_args): Add entry for VMS_DEBUG. ! * vmsdbgout.c (vmsdbgout_init): Fix typo in call to xmalloc. ! 2002-03-10 Richard Henderson ! PR 5693 ! * reload.c (copy_replacements_1): New. ! (copy_replacements): Use it to recurse through the rtx. ! 2002-03-10 Richard Henderson ! * sched-rgn.c (add_branch_dependences): Don't allow insns that throw ! to move away from the end of the block. ! 2002-03-10 Neil Booth ! PR preprocessor/5899 ! * cppinit.c (init_dependency_output): Don't ignore -dM etc. ! 2002-03-10 Kaveh R. Ghazi ! * combine.c (make_extraction): Fix error in last change. ! 2002-03-09 Jakub Jelinek ! PR optimization/5172, optimization/5200 ! * gcse.c (gcse_main): Disable store_motion. ! 2002-03-09 Andreas Schwab ! * gcc.c (validate_all_switches): Also handle `%W{...}'. ! 2002-03-09 Jakub Jelinek ! PR middle-end/5877 ! * expr.c (highest_pow2_factor): Check TREE_INT_CST_LOW ! even for non-representable constants. ! Sat Mar 9 07:20:01 2002 Richard Kenner ! * emit-rtl.c (copy_most_rtx): Accept EXPR_LIST for may_share. ! * function.c (fixup_var_refs): Add MAY_SHARE parameter. ! (fixup_var_refs_insns, fixup_var_refs_insns_with_has): Likewise. ! (fixup_var_refs_insn, fixup_var_refs_1): Likewise. ! (pop_function_context): Compute MAY_SHARE parameter for ! fixup_var_refs. ! (fixup_var_refs_1, case MEM): Pass MAY_SHARE to copy_most_rtx, not VAR. ! (gen_mem_addressof): Call fixup_var_refs with new parm. ! * combine.c (make_extraction): Don't make extension of CONST_INT. ! 2002-03-08 Kaveh R. Ghazi ! * sparc.c (arith_4096_operand): Fix error in last change. ! 2002-03-08 Aldy Hernandez ! * config/rs6000/rs6000.c (rs6000_va_arg): Fix alignment for ! vectors. ! 2002-03-08 Aldy Hernandez ! * config/rs6000/sysv4.h (BIGGEST_ALIGNMENT): Change for altivec. ! 2002-03-08 Craig Rodrigues ! * doc/install.texi (--with-libiconv-prefix): Document. ! 2002-03-08 Michael Y. Brukman ! * doc/sourcebuild.texi: Fix typo. ! 2002-03-08 Jakub Jelinek ! PR c/3711 ! * builtins.c (std_expand_builtin_va_arg): Do all computations on ! trees. ! Fri Mar 8 06:48:45 2002 Richard Kenner ! * rtl.c (copy_most_rtx): Move from here ... ! * emit-rtl.c (copy_most_rtx): ... to here. ! 2002-03-08 Richard Earnshaw ! * combine.c (simplify_comparison): If simplifying a logical shift ! right and compare with constant, force the comparison to unsigned. ! 2002-03-07 Ulrich Weigand ! * genextract.c (walk_rtx): Recurse into MATCH_PAR_DUP. ! genoutput.c (scan_operands): Recurse into MATCH_PAR_DUP ! and MATCH_OP_DUP. ! 2002-03-07 Aldy Hernandez ! * doc/invoke.texi: Add documentation for -mabi=no-altivec. ! * config/rs6000/rs6000.c (rs6000_parse_abi_options): Add ! -mabi=no-altivec ! (alt_reg_names): Remove % for vrsave. ! 2002-03-06 Jeffrey A Law (law@redhat.com) ! * ssa-ccp.c (ssa_fast_dce): Update the DF def-use chains ! after completing fast dead code elimination. ! 2002-03-06 Richard Henderson ! PR optimization/5844 ! * genemit.c (gen_exp): New argument used. Invoke copy_rtx ! if used indicates we've already emitted one copy of an operand. ! (gen_insn, gen_expand, output_add_clobbers): Supply a null used. ! (gen_split): Supply a non-null used. ! 2002-03-06 Ulrich Weigand ! * simplify-rtx.c (simplify_plus_minus): Do not abort, ! but simply fail if the expression is too complex to simplify. ! (simplify_gen_binary): Handle simplify_plus_minus failures. ! 2002-03-06 Ulrich Weigand ! * reload1.c (reload): Unshare all rtl after reload is done. ! 2002-03-06 Jakub Jelinek ! * ssa-ccp.c (ssa_ccp_substitute_constants): Backout 2002-03-05 ! patch. ! 2002-03-05 Zack Weinberg ! * cppmain.c (setup_callbacks): Disable #pragma and #ident ! callbacks when processing assembly language. ! 2002-03-06 John David Anglin ! * pa.h (ASM_FILE_END): Define. ! * som.h (ASM_FILE_END): Delete. ! * pa.c (function_arg): Don't pass floats in general registers in ! indirect calls if TARGET_ELF32. ! 2002-03-05 Richard Henderson ! * config/i386/i386.md (floatsidf2): Conditionalize on hard-float. ! 2002-03-05 Jakub Jelinek ! * mklibgcc.in: Prepend a tab before .hidden, add $flags to gcc ! -r command line. Don't hide any symbols if not building ! shared libgcc. ! 2002-03-05 Jakub Jelinek ! * expmed.c (emit_store_flag): Don't test BITS_PER_WORD * 2 ! wide volatile memory by parts. ! 2002-03-05 Jakub Jelinek ! * ssa-ccp.c (ssa_ccp_substitute_constants): Don't crash if def ! is NULL. ! 2002-03-05 Richard Henderson ! * config/rs6000/rs6000.h (TOTAL_ALTIVEC_REGS): Fix off-by-one error. ! 2002-03-04 Krister Walfridsson ! * config.gcc (*-*-netbsd*): Add t-slibgcc-elf-ver to tmake_file. ! 2002-03-05 Joseph S. Myers ! * configure.in: Increase required makeinfo version to 4.1. * configure: Regenerate. ! 2002-03-04 Joseph S. Myers ! * doc/include/texinfo.tex: Update to version 2002-03-01.06. ! * doc/invoke.texi: Fix @math uses. ! 2002-03-02 Per Bothner ! * gcc.c (option_map): Suport new --bootclasspath option. ! --CLASSPATH is now just an alias for --classpath. ! Sat Mar 2 06:30:14 2002 Richard Kenner ! * config/sparc/sparc.c (sparc_initialize_trampoline): Use ! trunc_int_for_mode. ! * emit-rtl.c (offset_address): Call update_temp_slot_address. ! 2002-03-01 Richard Henderson ! * config/ia64/ia64.c (ia64_initial_elimination_offset): Do not ! adjust argument_pointer by pretend_args_size. ! (ia64_va_start): Adjust va_start address by -pretend_args_size. ! 2002-03-01 Zack Weinberg ! * doc/cpp.texi: Clarify documentation of relationship between ! #line and #include. ! 2002-02-28 Richard Henderson ! * expmed.c (store_bit_field): Prevent generation of CONCATs; ! pun complex values as integers; use gen_lowpart instead of ! gen_rtx_SUBREG. ! (extract_bit_field): Likewise. ! 2002-02-28 David O'Brien ! * config.gcc (sparc64-*-freebsd): Explicitly accept a cpu specification ! of "ultrasparc". ! * config/sparc/freebsd.h: Do not use MASK_FASTER_STRUCTS. It appears ! to be broken. ! 2002-02-28 Alexandre Oliva ! * gcc.c (init_gcc_specs): Get -static and -static-libgcc to ! override -shared and -shared-libgcc. ! 2002-02-28 Andrew MacLeod ! * dwarf2out.c (stack_adjust_offset): Add support for POST_INC, ! POST_DEC, and POST_MODIFY. ! 2002-02-28 Joseph S. Myers ! * doc/invoke.texi, doc/standards.texi: Link to ! gcc-3.1/c99status.html. ! 2002-02-28 Richard Henderson ! * config/ia64/ia64.c (ia64_adjust_cost): All non-MM consumers have ! 4 cycle latency from MM producers. ! (ia64_internal_sched_reorder): Likewise with pipeline flush. ! 2002-02-28 Jakub Jelinek ! * mklibgcc.in: Don't use GNU make extension. ! 2002-02-28 Richard Henderson ! * haifa-sched.c (sched_emit_insn): New. ! (schedule_block): Use last_scheduled_insn to track last insn. ! * sched-int.h (sched_emit_insn): Prototype. ! * config/ia64/ia64.c (last_issued): Remove. ! (ia64_variable_issue): Don't set it. ! (nop_cycles_until): Use sched_emit_insn. ! 2002-02-28 Bo Thorsen ! * config/i386/linux64.h (LINK_SPEC): Fix 32/64 bit compilation. ! (STARTFILE_SPEC): Add 64 bit files. ! (ENDFILE_SPEC): Likewise. ! Don Feb 28 16:41:19 CET 2002 Jan Hubicka ! * cfgrtl.c (purge_dead_edges): Fix handling of EH edges. ! * i386.h (CONDITIONAL_REGISTER_USAGE): Do not write to ! PIC_OFFSET_TABLE_REGNUM when it is INVALID_REGNUM ! * x86-64.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Always define. ! 2002-02-28 David Edelsohn ! * config/rs6000/aix43.h (THREAD_MODEL_SPEC): Delete. ! * config/rs6000/aix51.h (THREAD_MODEL_SPEC): Delete. ! 2002-02-28 Alan Modra ! * config/rs6000/rs6000.md (load_toc_aix_di): Handle TARGET_RELOCATABLE. ! 2002-02-28 Jason Merrill ! * c-decl.c (finish_function): Only warn about missing return ! statement with -Wreturn-type. ! 2002-02-27 Zack Weinberg ! * mklibgcc.in: Don't use \n in a line subject to ! interpretation by echo. ! 2002-02-27 Ulrich Weigand ! * config/s390/s390.c (s390_chunkify_pool): Do not confuse ! insn UIDs with insn addresses. ! 2002-02-27 Graham Stott ! * config/rs6000/rs6000.h (ASM_OUTPUT_DEF_FROM_DECL): ! Constify NAME. ! * loop.c (prescan_loop): Handle PARALLEL. ! * unroll.c (loop_iterations): Return 0 if the add_val for ! a BIV is REG. ! * final.c (output_operand_lossage): Constify PFX_STR. ! * df.c (df_insn_refs_record): Use XEXP (x, 0) for USE. ! 2002-02-26 Richard Henderson ! * config/alpha/alpha.md (ashldi_se): Re-enable. ! 2002-02-26 Kelley Cook ! * config/i386/i386.c (print_operand): Don't append ATT-style ! length suffixs to x87 opcodes when in Intel mode. ! 2002-02-26 Ryan T. Sammartino ! * emit-rtl.c (gen_const_vector_0): Remove TYPE argument. ! (init_emit_once): Update calls. ! * fixinc/gnu-regex.c (_GNU_SOURCE): Remove. ! (init_syntax_once): Prototype. ! 2002-02-26 John David Anglin ! * pa-linux.h (LIB_SPEC): Update definition. ! * pa32-linux.h (LINK_COMMAND_SPEC): Delete. ! 2002-02-26 Alexandre Oliva ! * dwarf2out.c (gen_inlined_subroutine_die): If block is abstract, ! generate a die for the lexical block. ! 2002-02-26 Richard Henderson ! * expr.c (expand_expr) [MULT_EXPR]: Do not apply distributive law ! in EXPAND_SUM case. Use host_integerp/tree_low_cst. ! 2002-02-26 Richard Henderson ! * config/ia64/ia64.c (nop_cycles_until): Do init_insn_group_barriers ! if we emitted a stop bit. ! 2002-02-26 Jakub Jelinek ! * configure.in (libgcc_visibility): Substitute. ! * configure: Rebuilt. ! * mklibgcc.in: If libgcc_visibility = yes, make libgcc.a global ! defined symbols .hidden. ! 2002-02-26 Jakub Jelinek ! PR debug/5770 ! * dwarf2out.c (rtl_for_decl_location): Return CONST_STRING for ! STRING_CST initializer spanning the whole variable without ! embedded zeros. ! If expand_expr returned MEM, don't use it. ! 2002-02-25 Jakub Jelinek ! PR target/5755 ! * config/i386/i386.c (ix86_return_pops_args): Only pop ! fake structure return argument if it was passed on the stack. ! 2002-02-25 Jason Merrill ! * attribs.c (decl_attributes): Also re-layout PARM_DECL and ! RESULT_DECL. ! 2002-02-25 Alexandre Oliva ! * gcc.c (init_gcc_specs): Get -shared-libgcc along with -shared to ! link with shared_name only. ! * doc/invoke.texi (Link Options): Document new behavior. ! 2002-02-25 Aldy Hernandez ! * c-typeck.c (push_init_level): Handle vectors. ! 2002-02-25 Alexandre Oliva ! * config/sparc/sparc.c (const64_high_operand): Zero-extend ! operands of SPARC_SETHI_P. ! (input_operand): Likewise. ! (sparc_emit_set_const32): Likewise. ! * config/sparc/sparc.h (SPARC_SETHI_P): Disregard TARGET_ARCH64. ! (SPARC_SETHI32_P): Zero-extend operand from 32 bits. ! (CONST_OK_FOR_LETTER_P): Use SETHI32 for `K'. Add `N' as SETHI. ! * config/sparc/sparc.md (movdi_insn_sp64_novis): Use `N'. ! (movdi_insn_sp64_vis): Likewise. ! (movdi split, movdf split): Use SETHI32. ! * doc/md.texi: Document SPARC constraints L, M and N. ! 2002-02-25 Aldy Hernandez ! * config/rs6000/rs6000.md ("get_vrsave_internal"): New. ! ("*set_vrsave_internal"): use mfspr for Darwin. ! * config/rs6000/rs6000.c (rs6000_emit_prologue): Call ! gen_get_vrsave_internal. ! Sun Feb 24 16:38:56 2002 Richard Kenner ! * optabs.c (widen_operand): Properly handle CONST_INT for NO_EXTEND. ! 2002-02-24 Neil Booth ! * cpplex.c (cpp_interpret_charconst): Get signedness or ! otherwise of wide character constants correct. ! * cppexp.c (lex): Get signedness of wide charconsts correct. ! Sun Feb 24 07:41:31 2002 Richard Kenner ! * optabs.c (widen_operand): Only call convert_modes for ! promoted SUBREG if signedness matches. ! * config/alpha/alpha.md (*addsi_se2, *subsi_se2): New patterns. ! 2002-02-23 Neil Booth ! * cpplib.c (glue_header_name): Use local buffer to build up ! header name. ! 2002-02-23 Neil Booth ! * doc/cpp.texi, doc/invoke.texi: Update documentation for -MM. ! 2002-02-23 Kazu Hirata ! * config/h8300/h8300.c (output_simode_bld): Handle H8/300 and ! H8/300[HS] separately. ! * config/h8300/h8300.md: Remove the early clobber constraint ! from bit field patterns. ! 2002-02-23 Kazu Hirata ! * config/h8300/h8300.md (mulqihi3): Tighten predicates to ! register_operand. ! (mulhisi3): Likewise. ! (umulqisi3): Likewise. ! (umulhisi3): Likewise. ! 2002-02-23 Neil Booth ! * cppinit.c (output_deps): Correct test for stdout output. ! (init_dependency_output): Cure warning. ! Sat Feb 23 08:42:47 2002 Richard Kenner ! * expr.c (store_expr): When converting expression to promoted ! equivalent type, allow using SUBREG_REG of TARGET as the target ! of the expansion of EXP. ! * loop.c (basic_induction_var, case SUBREG): Always look inside. ! * config/alpha/alpha.c (rtx_equiv_function_matters): Delete decl. ! (alpha_emit_set_const): Handle SImode when can't make new pseudos. ! (alpha_emit_set_const_1, alpha_sa_mask): Use no_new_pseudos. ! * config/alpha/alpha.md (addsi3, subsi3): Don't use if optimizing. ! 2002-02-23 Joseph S. Myers ! * doc/contribute.texi, doc/extend.texi, doc/install.texi, ! doc/invoke.texi, doc/md.texi, doc/passes.texi, doc/rtl.texi, ! doc/standards.texi, doc/tm.texi: Remove trailing whitespace. ! 2002-02-23 Jakub Jelinek ! PR optimization/5747 ! * loop.c (scan_loop): Update reg info if move_movables created new ! pseudos. ! 2002-02-23 David Edelsohn ! * gcc.c (init_gcc_spec): Revert last change. ! 2002-02-23 David Edelsohn ! * config/rs6000/rs6000.md (load_toc_aix_{si,di}): Use ! gpc_reg_operand constraint. ! 2002-02-23 Alan Modra ! * config/rs6000/rs6000.c (num_insns_constant): Fix formatting. ! Simplify comparison of `low'. ! (add_operand): Fix formatting. ! (non_add_cint_operand): Use CONST_OK_FOR_LETTER_P. ! (mask_operand): Disallow mask to wrap in 64-bit mode. ! (rs6000_stack_info): Remove redundant test setting push_p. ! (output_toc): Fix formatting. ! * config/rs6000/rs6000.md (boolsi3, boolcsi3 splitters): Use ! cc_reg_not_cr0_operand constraint. ! (booldi3, boolcdi3 splitters): Same. ! 2002-02-23 Aldy Hernandez ! * config/rs6000/altivec.h: Add extra level of parentheses on casts. ! 2002-02-22 David Edelsohn ! * gcc.c (init_gcc_spec): Do not link with static libgcc.a if ! gcc invoked with -shared-libgcc. ! 2002-02-22 Jakub Jelinek ! PR c++/5748 ! * stmt.c (expand_anon_union_decl): Set TREE_USED on the anon union ! decl if any of elements was TREE_USED. ! 2002-02-22 Alexandre Oliva ! * config/sparc/sol2.h: Don't include sys/mman.h. ! * config/sparc/sparc.c (arith_operand): Use SMALL_INT32. ! (arith_4096_operand): Don't throw high bits away. ! (const64_operand): Take sign extension of CONST_INTs into account. ! (const64_high_operand, sparc_emit_set_const32): Likewise. ! (GEN_HIGHINT64): Likewise. ! (sparc_emit_set_const64_quick1): Likewise. ! (const64_is_2insns): Likewise. ! (print_operand): Use trunc_int_for_mode for sign extension. ! * config/sparc/sparc.h (SMALL_INT32): Likewise. ! * config/sparc/sparc.md (movqi): Sign-extend CONST_DOUBLE ! chars. Assume CONST_INT is already properly sign-extended. ! (movdi split): Sign-extend each SImode part. ! (andsi3 split): Don't mask high bits off, so that result ! remains properly sign-extend. ! (iorsi3 split): Likewise. ! (xorsi3 split): Likewise. ! 2002-02-22 Richard Sandiford ! * fold-const.c (fold): Fix typo in comments. ! 2002-02-21 Diego Novillo ! * Makefile.in (langhooks.o): Update dependencies. ! 2002-02-21 Diego Novillo ! * langhooks.c: Include flags.h. ! 2002-02-21 Aldy Hernandez ! * testsuite/gcc.dg/attr-alwaysinline.c: New. ! * c-common.c (c_common_post_options): Set inline trees by ! default. ! * doc/extend.texi (Function Attributes): Document always_inline ! attribute. ! Update documentation about inlining when not optimizing. ! * cp/decl.c (duplicate_decls): Merge always_inline attribute. ! * cp/tree.c (cp_cannot_inline_tree_fn): Do not inline at -O0 ! unless DECL_ALWAYS_INLINE. ! * c-objc-common.c (c_cannot_inline_tree_fn): Do not inline at -O0 ! unless DECL_ALWAYS_INLINE. ! (c_disregard_inline_limits): Disregard if always_inline set. ! * langhooks.c (lhd_tree_inlining_disregard_inline_limits): ! Disregard if always_inline set. ! (lhd_tree_inlining_cannot_inline_tree_fn): Do not inline at -O0 ! unless DECL_ALWAYS_INLINE. ! * attribs.c (handle_always_inline_attribute): New. ! (c_common_attribute_table): Add always_inline. ! * config/rs6000/altivec.h: Add prototypes for builtins ! requiring the always_inline attribute. ! 2002-02-21 Eric Christopher ! * expmed.c (store_bit_field): Try to simplify the subreg ! before generating a new one when when the mode size of ! value is less than maxmode. ! 2002-02-21 Richard Henderson ! * emit-rtl.c (offset_address): Use simplify_gen_binary rather ! than gen_rtx_PLUS to form the sum. ! * explow.c (force_reg): Rearrange to not allocate new pseudo ! when force_operand returns a register. ! * expr.c (expand_assignment): Allow offset_rtx expansion to ! return a sum. Do not force addresses into registers. ! (expand_expr): Likewise. ! * simplify-rtx.c (simplify_gen_binary): Use simplify_plus_minus ! to canonicalize arithmetic that didn't simpify. ! (simplify_plus_minus): New argument force; update ! all callers. Don't split CONST unless we can do something with it, ! and wouldn't lose the constness of the operands. ! * config/i386/i386.c (legitimize_pic_address): Recognize UNSPECs ! that we generated earlier. ! 2002-02-21 Tom Tromey ! * dwarf2out.c (DWARF_LINE_MIN_INSTR_LENGTH): Removed. ! (output_line_info): Use constant `1', with a long explanatory ! comment. ! * system.h (DWARF_LINE_MIN_INSTR_LENGTH): Poison. ! Thu Feb 21 22:43:44 2002 J"orn Rennecke ! * jump.c (redirect_jump): If old label has no UID, don't try to ! delete it. ! Thu Feb 21 21:17:21 2002 J"orn Rennecke ! * sh.md (insv): Provide byte offsets for gen_rtx_SUBREG. ! If input is constant, do shifts at compile time. ! 2002-02-21 Joseph S. Myers ! * doc/extend.texi: Fix some more overfull hboxes. ! 2002-02-21 Jakub Jelinek ! PR optimization/4994 ! * config/i386/i386.md (movsi_1, movsf_1): Support MMX -> MMX ! register moves. ! 2002-02-21 Jakub Jelinek ! PR c++/4574 ! * expr.h (expand_and): Add mode argument. ! * expmed.c (expand_and): Add mode argument. ! (expand_mult_highpart_adjust, emit_store_flag): Adjust callers. ! * expr.c (store_field, expand_expr, do_store_flag): Likewise. ! * except.c (expand_builtin_extract_return_addr): Likewise. ! * config/alpha/alpha.c (alpha_initialize_trampoline): Likewise. ! * config/sparc/sparc.c (sparc_initialize_trampoline): Likewise. ! * config/c4x/c4x.h (INITIALIZE_TRAMPOLINE): Likewise. ! Use GEN_INT (x) instead of gen_rtx (CONST_INT, VOIDmode, x). ! * config/c4x/c4x.md: Use GEN_INT (x) instead of ! gen_rtx (CONST_INT, VOIDmode, x). ! 2002-02-21 Jakub Jelinek ! PR c/4697: ! * stmt.c (warn_if_unused_value): Move side effects test once more. ! 2002-02-20 Torbjorn Granlund ! * config/avr/avr.md: Add more patterns for mized-mode add and subtract ! (addsi3_zero_extend, subhi3_zero_extend1, subsi3_zero_extend). ! Thu Feb 21 16:20:46 2002 Alexandre Oliva ! * rtlanal.c (replace_rtx): Don't make a CONST_INT the operand of ! SUBREG or ZERO_EXTEND. ! Thu Feb 21 15:35:46 2002 J"orn Rennecke ! * sh.h (current_function_anonymous_args): Remove. ! (SETUP_INCOMING_VARARGS): Don't set it - just check that one ! of current_function_varargs and current_function_stdarg is set. ! * sh.c (sh_expand_prologue): Check current_function_varargs / ! current_function_stdarg / TARGET_SH5 instead of ! current_function_anonymous_args. ! * sh64.h (TARGET_VERSION): Define. ! 2002-02-20 David Edelsohn ! * config/rs6000/rs6000.h (EPILOGUE_USES): Conditionalize ! VRSAVE_REGNO on TARGET_ALTIVEC. ! 2002-02-20 Alan Modra ! * config/rs6000/rs6000.c (includes_lshift_p): Mask irrelevant ! bits of SImode const_int. ! (includes_rshift_p): Likewise. ! (print_operand): Call mask_operand and mask64_operand with correct ! mode. ! (rs6000_output_function_epilogue): Pad traceback table to word. ! * config/rs6000/rs6000.h (MASK_64BIT): Correct comment. ! (EXTRA_CONSTRAINT, 'S' and 'T'): Call mask_operand and ! mask64_operand with correct mode. ! (FUNCTION_ARG_REGNO_P): Correct parentheses. ! 2002-02-20 Jakub Jelinek ! PR debug/4461 ! * varasm.c (get_pool_constant_mark): New. ! * rtl.h (get_pool_constant_mark): Add prototype. ! * dwarf2out.c (mem_loc_descriptor): A pool constant cannot ! be represented if it has not been output. ! 2002-02-20 Alexandre Oliva ! * combine.c (do_SUBST): Sanity check substitutions of ! CONST_INTs, and reject them in SUBREGs and ZERO_EXTENDs. ! (subst): Simplify SUBREG or ZERO_EXTEND instead of SUBSTing a ! CONST_INT into its operand. ! (known_cond): Likewise, for ZERO_EXTEND. ! * simplify-rtx.c (simplify_unary_operation): Fix condition to ! allow for simplification of wide modes. Reject CONST_INTs in ! ZERO_EXTEND when their actual mode is not given. ! 2002-02-20 Alexandre Oliva ! * c-decl.c (pushdecl): If no global declaration is found for an ! extern declaration in block scope, try a limbo one. ! 2002-02-20 Jakub Jelinek ! PR c++/4401 ! * c-common.c (pointer_int_sum): Moved from... ! * c-typeck.c (pointer_int_sum): ...here. ! * c-common.h (pointer_int_sum): Add prototype. ! 2002-02-20 Jakub Jelinek ! PR c++/5713 ! * c-decl.c (duplicate_decls): Return 0 if issued error about ! redeclaration. ! 2002-02-20 Roger Sayle ! Jakub Jelinek ! PR c/4389 ! * tree.c (host_integerp): Ensure that the constant integer is ! representable in a HOST_WIDE_INT or an unsigned HOST_WIDE_INT ! when pos is zero or non-zero respectively. Clarify comment. ! * c-format.c (check_format_info_recurse): Fix host_integerp ! usage; the pos argument should be zero when assigning to a ! signed HOST_WIDE_INT. ! 2002-02-20 Richard Henderson ! * config/i386/i386.c (ix86_expand_vector_move): Use the mode ! of the operand, rather than assuming TImode. ! (ix86_expand_binop_builtin): Cope with commutative patterns ! using nonimmediate_operand for both operands. ! (ix86_expand_timode_binop_builtin): Likewise. ! (ix86_expand_store_builtin): Validate operand 1. ! (ix86_expand_unop1_builtin): Likewise. ! 2002-02-20 Philip Blundell ! PR 5705 ! * config/arm/arm.h (HARD_REGNO_RENAME_OK): New macro. ! 2002-02-20 Richard Henderson ! PR c/5615 ! * expr.h (ARGS_SIZE_TREE): Convert size.var to ssizetype. ! 2002-02-20 Tom Tromey ! * config/fr30/fr30.h (DWARF_LINE_MIN_INSTR_LENGTH): Removed. ! * config/sh/sh.h (DWARF_LINE_MIN_INSTR_LENGTH): Removed. ! * config/pj/pj.h (DWARF_LINE_MIN_INSTR_LENGTH): Removed. ! * config/cris/cris.h (DWARF_LINE_MIN_INSTR_LENGTH): Removed. ! * dwarf2out.c (DWARF_LINE_MIN_INSTR_LENGTH): Define ! unconditionally. ! Wed Feb 20 00:03:25 EST 2002 Alan Matsuoka ! * config/rs6000/rs6000.h (LEGITIMATE_OFFSET_ADDRESS_P): Look ! for (const_int 0) in X not just INTVAL. ! 2002-02-20 Joseph S. Myers ! * doc/extend.texi: Avoid or reduce overfull hboxes. ! 2002-02-20 Diego Novillo ! * expmed.c (store_bit_field): Do not store bit fields using SUBREG ! operations if the field does not start at a mode boundary. ! 2001-02-20 Joel Sherrill ! * config/a29k/rtems.h, config/arm/rtems-elf.h, config/h8300/rtems.h, ! config/mips/rtems.h: Use new style of -Asystem= rather than -Asystem(). ! Also done for -Acpu and -Amachine. ! 2002-02-20 Neil Booth ! * cppinit.c (init_dependency_output): Take deps output file ! from -o if none given with -MF. Suppress normal output. ! * gcc.c (cpp_unique_options): Have -M and -MM imply -E. ! * doc/cpp.texi, doc/invoke.texi: Update. ! 2002-02-19 Zack Weinberg ! * toplev.c (output_quoted_string): Write unprintable ! characters with octal escapes. ! 2002-02-19 David Edelsohn ! * config/rs6000/rs6000.h (CONDITIONAL_REGISTER_USAGE): Set ! really_call_used[VRSAVE_REGNO] if not Altivec. ! 2002-02-19 Alan Modra ! * config/rs6000/rs6000.c (u_short_cint_operand): Mask op with ! MODE_MASK. ! (constant_pool_expr_1): Fix formatting. ! (rs6000_legitimize_reload_address): Likewise. ! Tue Feb 19 20:13:57 2002 Richard Kenner ! * config/sparc/sparc.md (nonlocal_goto): Use hard_frame_pointer_rtx ! now that we have one. ! 2002-02-19 Zack Weinberg ! * tree.h (struct tree_common): Remove aux. Add unused_0 at ! end of first block of bitfields (which was only seven bits); ! rename dummy to unused_1; remove comment which is no longer true. ! 2002-02-19 Gaute B Strokkenes ! * doc/c-tree.texi (Classes, TYPE_BINFO): Fix typo. ! 2002-02-19 Philip Blundell ! PR 5399 ! * config/arm/arm.h (THUMB_LEGITIMATE_CONSTANT_P): Accept anything ! if generating PIC. ! PR 5054 ! * config/arm/arm.md (call_insn) [TARGET_THUMB]: Use ! arm_is_longcall_p rather than inspecting call-type cookie ! directly. ! (call_value_insn) [TARGET_THUMB]: Likewise. ! 2002-02-19 Graham Stott ! * config/i386/i386.c (ix86_expand_builtin): Fix typo. ! 2002-02-19 David Edelsohn ! * config/rs6000/linux64.h (LINK_OS_LINUX_SPEC): Look in /lib64. ! ({STARTFILE,ENDFILE}_LINUX_SPEC): Define. ! (FP_SAVE_INLINE): Delete. ! * config/rs6000/sysv4.h (ENDFILE_SPEC): Add crtsaveres.o. ! * config/rs6000/eabi.asm: Remove ABI save restore routines. ! * config/rs6000/t-ppccomm: Build crtsavres.o. ! * config/rs6000/crtsavres.asm: New file. ! 2002-02-19 Philip Blundell ! * config/arm/arm.c (use_return_insn): Don't reject interrupt ! functions. ! (arm_compute_save_reg_mask): Save LR for interrupt functions too. ! (output_return_instruction): Allow interrupt functions to return with ! ldmfd sp!, {... pc}^. Use LDR to restore any single register. ! (arm_expand_prologue): Subtract 4 before stacking LR in an ! interrupt function. ! 2002-02-19 Philip Blundell ! * config/arm/arm.c (arm_encode_call_attribute): Operate on any ! decl, not just FUNCTION_DECL. ! (legitimize_pic_address): Handle local SYMBOL_REF like LABEL_REF. ! (arm_assemble_integer): Likewise. ! * config/arm/arm.h (ARM_ENCODE_CALL_TYPE): Allow any decl to be ! marked local. ! 2002-02-19 matthew green ! * config.gcc (sparc-*-netbsdelf*): Enable target. ! (sparc64-*-netbsd*): New target. ! * config/sparc/netbsd-elf.h: New file. ! * config/sparc/t-netbsd64: New file. ! 2002-02-19 Gaute B Strokkenes ! * doc/rtl.texi (Flags, MEM_SCALAR_P): Fix typo. ! 2002-02-19 Ryan T. Sammartino ! * doc/invoke.texi: explicitly list the style guidelines that ! -Weffc++ checks for. ! Tue Feb 19 12:37:23 CET 2002 Jan Hubicka ! * regmove.c (regmove_optimize): Avoid increasing of register pressure. ! 2002-02-19 Neil Booth ! PR other/5718 ! * gcc.c (cpp_unique_options): Treat -o as indicating object file ! only if not -E. If -E, pass -o through to the preprocessor. ! 2002-02-19 Kazu Hirata ! * config/h8300/h8300.h (REGNO_REG_CLASS): Replace a literal ! register number with an appropriate macro. ! 2002-02-19 Bryce McKinlay ! * doc/rtl.texi (Constants): Close @code tag. ! 2002-02-19 Aldy Hernandez ! * config/i386/i386.md ("mmx_uavgv8qi3"): Use const_vector. ! ("mmx_uavgv4hi3"): Same. ! ("pmulhrwv4hi3"): Same. ! * tree-inline.c (walk_tree): Handle vectors. ! * c-common.c (constant_expression_warning): Handle vectors. ! (overflow_warning): Same. ! * sched-deps.c (sched_analyze_2): Handle vectors. ! * rtlanal.c (rtx_unstable_p): Handle vectors. ! (rtx_varies_p): Same. ! (count_occurrences): Same. ! (regs_set_between_p): Same. ! (modified_between_p): Same. ! (modified_in_p): Same. ! (volatile_insn_p): Same. ! (volatile_refs_p): Same. ! (side_effects_p): Same. ! (may_trap_p): Same. ! (inequality_comparisons_p): Same. ! (replace_regs): Same. ! (computed_jump_p_1): Same. ! * rtl.c (DEF_MACHMODE): Change all definitions to accept 8th ! argument. ! (inner_mode_array): New. ! (copy_rtx): Handle vectors. ! (copy_most_rtx): Same. ! (rtx_equal_p): Same. ! (get_mode_alignment): Adjust for vectors. ! * resource.c (mark_referenced_resources): Handle vectors. ! (mark_set_resources): Same. ! * reload1.c (eliminate_regs): Handle vectors. ! (elimination_effects): Same. ! (scan_paradoxical_subregs): Same. ! * reload.c (subst_reg_equivs): Handle vectors. ! * regrename.c (scan_rtx): Handle vectors. ! * regclass.c (reg_scan_mark_refs): Handle vectors. ! * recog.c (find_single_use_1): Handle vectors. ! * local-alloc.c (equiv_init_varies_p): Handle vectors. ! (contains_replace_regs): Same. ! (memref_referenced_p): Same. ! * integrate.c (copy_rtx_and_substitute): Handle vectors. ! (subst_constants): Same. ! * genattrtab.c (attr_copy_rtx): Handle vectors. ! (encode_units_mask): Same. ! (clear_struct_flag): Same. ! (count_sub_rtxs): Same. ! * gcse.c (want_to_gcse_p): Handle vectors. ! (oprs_unchanged_p): Same. ! (hash_expr_1): Same. ! (oprs_not_set_p): Same. ! (expr_killed_p): Same. ! (compute_transp): Same. ! (store_ops_ok): Same. ! * function.c (purge_addressof_1): Do not allow paradoxical subregs ! of vectors. ! (fixup_var_refs_1): Same. ! (instantiate_virtual_regs_1): Same. ! * fold-const.c (operand_equal_p): Handle vectors. ! (fold): Same. ! (rtl_expr_nonnegative_p): Same. ! * flow.c (mark_used_regs): Handle vectors. ! * df.c (df_uses_record): Handle vectors. ! * cselib.c (cselib_subst_to_values): Handle vectors. ! (cselib_mem_conflict_p): Same. ! (hash_rtx): Same. ! * cse.c (canon_reg): Handle vectors. ! (fold_rt): Same. ! (cse_process_notes): Same. ! (count_reg_usage): Same. ! (canon_hash): Same. ! * alias.c (nonlocal_mentioned_p): Add case for CONST_VECTOR. ! * combine.c (mark_used_regs_combine): Add case for CONST_VECTOR. ! * emit-rtl.c (init_emit_once): Generate const0_rtx for vectors. ! (gen_rtx): Handle CONST_VECTOR. ! (gen_const_vector_0): New. ! (copy_rtx_if_shared): CONST_VECTORs can be shared. ! (reset_used_flags): Same. ! (copy_insn_1): Same. ! (initializer_constant_valid_p): Handle VECTOR_CST. ! * doc/c-tree.texi (Expression trees): Document VECTOR_CST. ! * doc/rtl.texi (Constants): Document const_vector. ! (CONST0_RTX): Update for vectors. ! (RTL sharing): Same. ! * print-tree.c (print_node): Add case for VECTOR_CST. ! * tree.h (TREE_VECTOR_CST_ELTS): New. ! (struct tree_vector): New. ! (union tree_node): Add vector node. ! (build_vector): Add prototype. ! * tree.def (VECTOR_CST): New. ! * tree.c (build_vector): New. ! * expmed.c (make_tree): Handle CONST_VECTOR. ! * rtl.h (CONSTANT_P): CONST_VECTORs are constants too. ! (CONST_VECTOR_ELT): New. ! (CONST_VECTOR_NUNITS): New. ! * machmode.h (GET_MODE_INNER): New. ! (DEF_MACHMODE): Accept 8th arg. ! * machmode.def: Add 8th argument for vector inner mode. ! Add inner vector modes for vectors. ! * rtl.def (VEC_CONST): Remove. ! (CONST_VECTOR): New. ! * expr.c (clear_storage): Allow vectors. ! (is_zeros_p): Handle VECTOR_CST. ! * varasm.c (output_constant_pool): Handle vectors. ! (rtx_const): Add veclo and vechi fields. ! (kind): Add RTX_VECTOR. ! (decode_rtx_const): Add case for vector. ! * config/rs6000/rs6000-protos.h: Add zero_constant. ! * config/rs6000/rs6000.c (rs6000_emit_move): Handle vector ! constants. Force easy vector constants into memory. ! (easy_vector_constant): New. ! (emit_easy_vector_constant): New. ! (rs6000_legitimize_reload_address): Do not generate bad reloads on ! darwin. ! * config/rs6000/rs6000.md ("altivec_lvx"): Reflect what ! instruction does. ! ("altivec_lvxl"): Same. ! (altivec_lvebx): Same. ! (altivec_lvehx): Same. ! (altivec_lvewx): Same. ! ("*movv4si_const0"): New. ! ("*movv4sf_const0"): New. ! ("*movv8hi_const0"): New. ! ("*movv16qi_const0"): New. ! 2002-02-18 Kazu Hirata ! * config/h8300/h8300.c (notice_update_cc): Use ! cc_status.value2. ! 2002-02-18 Kazu Hirata ! * config/h8300/h8300.md (divmod patterns): Change the ! constraints for operands[1] to register_operand. ! 2002-02-18 Kazu Hirata ! * config/h8300/h8300-protos.h: Remove the prototype for ! p_operand. ! * config/h8300/h8300.c (p_operand): Remove. ! * config/h8300/h8300.md: Replace p_operand with ! const_int_operand. ! 2002-02-18 Philip Blundell ! * config/arm/arm.c (arm_compute_save_reg_mask): Fix typo in ! comment. ! (output_return_instruction): Allow use of LDR to unstack ! return addresss even for interrupt handlers or when ! interworking. If compiling for ARMv5, use interworking-safe ! return instructions by default. Remove duplicated code and ! lengthy "strcat" sequences. ! 2002-02-18 Franz Sirl ! * config/rs6000/sysv4.h (STARTFILE_SPEC): Use crtbeginT.o for -static. ! (LINK_EH_SPEC): Define. ! * config/rs6000/t-ppccomm (EXTRA_MULTILIB_PARTS): Add crtbeginT.o. ! 2002-02-18 Ulrich Weigand ! * config/s390/s390.c (s390_emit_prologue): Do not set the ! frame_related flag for call-clobbered registers. ! Mon Feb 18 15:07:35 CET 2002 Jan Hubicka ! * i386.c (classify_argument): Properly classify SSE/MMX modes and VOIDmode. ! (construct_container): Fix handling of SSE operands. ! (ix86_expand_builtin): Fix handling of 64bit pointers. ! (mmx_maskmovq_rex): New pattern. ! Mon Feb 18 11:55:55 CET 2002 Jan Hubicka ! * regrename.c (kill_set_value): Handle subregs properly. ! 2002-02-18 David Billinghurst ! * objc/objc-act.c (handle_impent): Remove leading '*' ! from objc_class_name. ! 2002-02-17 Richard Henderson ! * config/alpha/alpha.c (some_small_symbolic_operand, ! some_small_symbolic_operand_1, split_small_symbolic_operand, ! split_small_symbolic_operand_1): Rename from *symbolic_mem_op*. ! Handle small SYMBOL_REFs anywhere, not just inside memories. ! * config/alpha/alpha-protos.h: Update. ! * config/alpha/alpha.h (PREDICATE_CODES): Update. ! * config/alpha/alpha.md (small symbolic operand splitter): Update. ! 2002-02-17 Roland McGrath ! * config.gcc (powerpc-*-gnu-gnualtivec*, ! powerpc-*-gnu*, powerpc64-*-gnu*): New configurations. ! * config/rs6000/gnu.h: New file. ! * config/rs6000/sysv4.h (SUBTARGET_OVERRIDE_OPTIONS): ! Grok "gnu" in rs6000_abi_name. ! (ASM_SPEC, CC1_SPEC, LINK_START_SPEC, LINK_OS_SPEC, ! CPP_ENDIAN_SPEC, CPP_SPEC, STARTFILE_SPEC, LIB_SPEC, ENDFILE_SPEC): ! Grok -mcall-gnu analogous to -mcall-linux et al. ! (LIB_GNU_SPEC, STARTFILE_GNU_SPEC, ENDFILE_GNU_SPEC, ! LINK_START_GNU_SPEC, LINK_OS_GNU_SPEC, CPP_OS_GNU_SPEC): New macros. ! (SUBTARGET_EXTRA_SPECS): Add *_os_gnu specs using them. ! 2002-02-17 Jakub Jelinek ! PR c/3444: ! * c-typeck.c (build_binary_op) [BIT_XOR_EXPR]: Remove explicit ! shortening. ! 2002-02-17 Philipp Thomas ! * config/cris/cris.h: Undefine STARTFILE_SPEC and ! ENDFILE_SPEC before (re)defining them. ! 2002-02-17 Kazu Hirata ! * config/h8300/h8300.c: Fix formatting. ! * config/h8300/h8300.h: Likewise. ! 2002-02-17 Philipp Thomas ! * doc/tm.texi: Explain why empty strings should not be ! marked for translation. ! 2002-02-17 Philipp Thomas ! * final.c (output_operand_lossage): Changed to accept ! printf style arguments. Change calls where necessary. ! * output.h (output_operand_lossage): Change declaration ! accordingly. Update copyright. ! * config/arc/arc.c config/fr30/fr30.c config/m32r/m32r.c ! config/m88k/m88k.c : Adapt all calls to output_operand_lossage. ! Update copyright date where necessary. ! * config/i386/i386.c (print_operand): Likewise. Remove use of ! sprintf. ! * config/cris/cris.c (cris_operand_lossage): Likewise. ! Rename parameter so that exgettext recognizes it as ! translatable message. ! (LOSE_AND_RETURN): Rename parameter to msgid. ! 2002-02-17 Kazu Hirata ! * config/h8300/h8300.h (CONDITIONAL_REGISTER_USAGE): Replace a ! hard coded register number with an appropriate macro. ! (HARD_REGNO_MODE_OK): Likewise. ! (ARG_POINTER_REGNUM): Likewise. ! (STATIC_CHAIN_REGNUM): Likewise. ! (RETURN_ADDRESS_POINTER_REGNUM): Likewise. ! * config/h8300/h8300.md (define_constants): Define more ! register numbers. ! 2002-02-17 Philipp Thomas ! * config/i386/i386.h: Don't mark empty strings for translation. ! 2002-02-16 H.J. Lu ! * config/mips/linux.h (ASM_PREFERRED_EH_DATA_FORMAT): New. ! 2002-02-16 Zack Weinberg ! * cppinit.c (merge_include_chains): Check for brack being ! NULL before attempting to merge it with qtail. ! 2002-02-16 Andrew Cagney ! * config/rs6000/netbsd.h (PREFERRED_DEBUGGING_TYPE): Set to ! DBX_DEBUG. ! 2002-02-16 John David Anglin ! * pa/t-pa, pa/t-pro, som.h: Revert last patch. ! 2002-02-16 John David Anglin ! * pa/t-pa (LIB2FUNCS_EXTRA): Don't build lib2funcs.asm. ! * pa/t-pro (LIB2FUNCS_EXTRA): Likewise. ! * som.h (DO_GLOBAL_DTORS_BODY): Delete define. ! Sat Feb 16 13:48:50 2002 Richard Kenner ! * config/alpha/alpha.md (*movsi_nt_vms_nofix): Was *movsi_nt_vms; ! now only if !TARGET_FIX. ! (*movsi_nt_vms_fix): New pattern. ! 2002-02-16 Douglas B Rupp ! * config/alpha/alpha.c: Implement null frame procedure types on VMS. ! (alpha_procedure_type): Replaces alpha_is_stack_procedure. ! (alpha_sa_mask, alpha_sa_size): Reflect above change. ! (alpha_pv_save_size, alpha_expand_prologue): Likewise. ! (alpha_start_function, alpha_expand_epilogue): Likewise. ! (unicosmk_gen_dsib): Likewise. ! Sat Feb 16 13:39:09 2002 Richard Kenner ! * expr.c (store_constructor): Handle target REG case for ARRAY_TYPE. ! 2002-02-16 Ulrich Weigand ! * config/s390/s390.c (pool_stop_uid, other_chunk, far_away, ! check_and_change_labels, s390_final_chunkify): Delete. ! (s390_split_branches, s390_chunkify_pool): New functions. ! (s390_function_prologue): Call them. ! * config/s390/s390.h (S390_REL_MAX): Delete. ! (S390_CHUNK_MAX, S390_CHUNK_OV): Adjust values. ! * config/s390/s390.md (cjump, icjump, jump): Fix length ! attribute calculation. ! 2002-02-15 David Edelsohn ! * config/rs6000/linux64.h (STRIP_NAME_ENCODING): Delete. ! * config/rs6000/ppc-asm.h (JUMP_TARGET): Define for powerpc64. ! 2002-02-15 John David Anglin ! * gcc.c (init_gcc_specs): Revert patch from 2002-02-15. ! * config/pa/pa-linux.h (LIB_SPEC): Likewise. ! * config/pa/pa32-linux.h (LINK_COMMAND_SPEC): Likewise. ! 2002-02-15 Richard Sandiford ! * c-decl.c (grokdeclarator): Prevent a segfault on unnamed decls. ! 2002-02-15 Richard Sandiford ! * reload.c (find_dummy_reload): Check that an output register ! is valid for its mode. ! 2002-02-14 Alexandre Oliva ! * combine.c (known_cond): After replacing the REG of a SUBREG, try ! to simplify it. ! * function.c (assign_parms): Demote promoted argument passed by ! transparent reference. ! 2001-02-14 Joel Sherrill ! * config/arm/rtems-elf.h, config/h8300/rtems.h: Removed redundant ! -Acpu() and -Amachine() to eliminate warnings. ! 2002-02-14 Ulrich Weigand ! * config/s390/linux.h (ASM_OUTPUT_ALIGNED_BSS): New. ! 2002-02-14 Kazu Hirata ! * config/h8300/h8300-protos.h: Update the prototype for ! const_costs. ! * config/h8300/h8300.c (const_costs): Treat SET as a little ! more expensive operation. ! * config/h8300/h8300.h (DEFAULT_RTX_COSTS): Update the ! reference to const_costs. ! 2002-02-14 Hans-Peter Nilsson ! * config.gcc (c4x-*-rtems*): Fix typo in tm_file setting. ! 2002-02-14 Jakub Jelinek ! PR c/5503: ! * c-decl.c (duplicate_decls): If builtin type has TYPE_ARG_TYPES NULL, ! use arguments from newtype. ! 2002-02-13 Eric Christopher ! * config/mips/mips.c (override_options): Add check for march/mipsX ! on the same command line. Fix error message in cpu processing. ! Remove architecture and ISA checks. ! 2002-02-14 Aldy Hernandez ! * config/rs6000/darwin.h (ROUND_TYPE_ALIGN): Adjust for vectors. ! * config/rs6000/sysv4.h (ROUND_TYPE_ALIGN): Add MAX. ! 2002-02-14 Aldy Hernandez ! * config/rs6000/rs6000.md ("*movv4si_internal"): Add m<-r and r<-r ! alternatives. ! ("*movv8hi_internal1"): Same. ! ("*movv16qi_internal1"): Same. ! ("*movv4sf_internal1"): Same. ! * config/rs6000/rs6000.c (rs6000_legitimize_reload_address): Do ! not push_reload for altivec modes. ! 2002-02-13 Joel Sherrill ! * config.gcc (a29k-*-rtems), config/a29k/rtems.h: General cleanup across ! all RTEMS targets including removal of #includes from config/*/rtems*.h ! file and adding them to tm_file setting. Added xm_defines=POSIX to ! many targets. ! * config.gcc (c4x-*-rtems), config/c4x/rtems.h: Ditto. ! * config.gcc (h8300-*-rtems), config/h8300/rtems.h: Ditto. ! * config.gcc (hppa1.1-*-rtems), config/pa/rtems.h: Ditto. ! * config.gcc (i960-*-rtems), config/i960/rtems.h: Ditto. ! * config.gcc (m68k-*-rtems*), config/m68k/rtems.h, ! config/m68k/rtemself.h: Ditto. ! * config.gcc (mips*-*-rtems*), config/mips/rtems.h, ! config/mips/rtems64.h: Ditto. ! * config.gcc (powerpc-*-rtems*), config/rs6000/rtems.h: Ditto. ! * config.gcc (sh-*-rtems*), config/sh/rtems.h, config/sh/rtemself.h: ! Ditto. ! * config.gcc (sparc-*-rtems*), config/sparc/rtems.h, ! config/sparc/rtemself.h: Ditto. ! * config.gcc (v850-*-rtems*), config/v850/rtems.h: Ditto. ! * config.gcc (arm-rtems), config/arm/rtems-elf.h: Ditto plus moved ! arm-rtems stanza closer to other arm-elf targets and made arm-rtems ! more like arm-elf. ! * config.gcc (i[34567]86-*-rtems*), config/i386/djgpp-rtems.h, ! config/i386/rtems.h, config/i386/rtemself.h: Ditto plus i386-rtemself ! target made more similar to i386-elf. ! * config/i386/t-rtems-i386: Added soft float support and multilibs. ! * config/m68k/t-m68kbare: Add 68040 and 68060 as multilib alternatives to ! be similar to config/m68k/t-m68kelf. ! * gthr-rtems.h: Encapsulate with extern "C" for C++. ! Wed Feb 13 23:41:15 CET 2002 Jan Hubicka ! * regmove.c (kill_value): Handle subregs. ! Wed Feb 13 23:34:30 CET 2002 Jan Hubicka ! * i386.md (mul patterns): Allow memory operand to be first; ! add expanders where needed; fix constraints. ! (min?f_nonieee, max?f_nonieee, SSE TImode patterns): ! Allow memory operand to be the first. ! * i386.c (ix86_prepare_fp_compare_args): Fix condition for swapping ! operands. ! 2002-02-13 Jakub Jelinek ! PR c/5681: ! * expr.c (safe_from_p): Pass VOIDmode to true_dependence instead of ! GET_MODE (x). ! 2002-02-13 Jakub Jelinek ! PR optimization/5547: ! * config/i386/i386.c (i386_simplify_dwarf_addr): Simplify ! all valid IA-32 address modes involving non-scaled %ebx and ! GOT/GOTOFF as displacement. ! 2002-02-13 Ulrich Weigand ! * config/s390/s390.c (s390_final_chunkify): Re-run shorten_branches ! after emitting ltorg insns. ! * config/s390/s390.md (*cmpdf_ccs_0, *cmpdf_ccs, *cmpsf_ccs_0, ! *cmpsf_ccs, truncdfsf2_ieee, *adddf3, *addsf3, *subdf3, *subsf3, ! *muldf3, *mulsf3, *divdf3, *divsf3, *negdf2, *negsf2, *absdf2, ! *abssf2): Fix "op_type" attribute. ! 2002-02-13 Douglas B Rupp ! * mkconfig.sh: Avoid using a subshell redirect. ! ($output.T): Change to $(output)T. ! (ENABLE_NLS): Remove unneeded undef. ! * config/alpha/vms.h (MD_EXEC_PREFIX, MD_STARTFILE_PREFIX): Define. ! * config/alpha/x-vms (libsubdir): Define. ! * config/alpha/vms.h (MD_FALLBACK_FRAME_STATE_FOR): Handle ! register frame procedures. Optimize retrieving context. ! * config/alpha/t-vms (MULTILIB_OPTIONS): Define. ! (MULTILIB_DIRNAME, LIBGCC, INSTALL_LIBGCC): Likewise. ! * config/alpha/vms.h (ASM_FILE_START): Write .arch directive. ! Wed Feb 13 09:45:08 2002 Richard Kenner ! * alias.c (find_base_term, case ZERO_EXTEND, case SIGN_EXTEND): ! Make same change as for find_base_value. ! 2002-02-13 Kazu Hirata ! * config/h8300/h8300.h (MODES_TIEABLE_P): Accept a combination ! of QImode and SImode. ! 2002-02-13 Kazu Hirata ! * config/h8300/h8300.c (h8300_adjust_insn_length): Correct the ! length computation of movsi. ! * config/h8300/h8300.md (movsi_h8300hs): Correct the length. ! 2002-02-13 Kazu Hirata ! * config/h8300/h8300.md (subqi3): Tighten the predicate for ! operands[2] to register_operand. ! Wed Feb 13 10:35:56 CET 2002 Jan Hubicka ! * i386.md (fop_*_comm_*): allow nonimmediate in the first operand. ! 2002-02-12 Aldy Hernandez ! * config/rs6000/rs6000.md: Use predicate altivec_register_operand ! for altivec_lvx* and altivec_stvx*. ! ("*movv4si_internal"): Add constraint for loading from GPRs. ! ("*movv8hi_internal1"): Same. ! ("*movv16qi_internal1"): Same. ! ("*movv4sf_internal1"): Same. ! * config/rs6000/rs6000.c (altivec_register_operand): New. ! * config/rs6000/rs6000.h (PREDICATE_CODES): Add ! altivec_register_operand. ! 2002-02-13 Hans-Peter Nilsson ! * config/mmix/mmix.c (mmix_assemble_integer) : Don't ! handle SYMBOL_REF. ! 2002-02-13 Stan Shebs ! * c-typeck.c (digest_init): Handle vectors. ! (really_start_incremental_init): Same. ! (pop_init_level): Same. ! (process_init_element): Same. ! * varasm.c (output_constant): Same. ! * expr.c (clear_storage): Same. ! (store_constructor): Same. ! 2002-02-12 Eric Christopher ! * explow.c (hard_function_value): Add comment explaining ! signed/unsigned comparison. ! 2002-02-12 Jakub Jelinek ! * jump.c (never_reached_warning): Add finish argument. ! If finish is NULL, stop on CODE_LABEL, otherwise stop before first ! real insn after end. ! * rtl.h (never_reached_warning): Adjust prototype. ! * cse.c (cse_insn): Pass NULL as finish to never_reached_warning. ! * cfgrtl.c (flow_delete_block): Pass b->end as finish to ! never_reached_warning. ! 2002-02-12 Graham Stott ! * config/hp/pa.h (GO_IF_LEGITIMATE_ADDRESS): Fix typos. ! 2002-02-12 Kazu Hirata ! * config/h8300/h8300.c (shift_alg_hi): Improve the 15-bit ! logical shifts on H8/300. ! (shift_alg_si): Improve several shifts on H8/300. ! (get_shift_alg): Likewise. ! 2002-02-12 Graham Stott ! * config/pa/pa.c (compute_movstrsi_length): Fix typos. ! Tue Feb 12 10:12:56 2002 Richard Kenner ! * alias.c (find_base_value, case ZERO_EXTEND, case SIGN_EXTEND): ! Handle #ifdef POINTERS_EXTEND_UNSIGNED. ! 2002-02-11 Hans-Peter Nilsson ! * config/mmix/mmix.c (mmix_assemble_integer) : Handle ! non-CONST_INT through default_assemble_integer. ! : Likewise, for non-CONST_INT, non-SYMBOL_REF. ! : Abort for CONST_DOUBLE. ! 2002-02-11 John David Anglin ! * gcc.c (init_gcc_specs): Add static libgcc to link when "-shared" ! is specified. ! * config/pa/pa-linux.h (LIB_SPEC): Delete. ! * config/pa/pa32-linux.h (LINK_COMMAND_SPEC): Delete. ! 2002-02-11 Andrew Haley ! * config/stormy16/stormy16.md (zero_extendqihi2): New. ! 2002-02-11 Alexandre Oliva ! * regrename.c (regrename_optimize): Don't accept a ! part-clobbered register if the replaced register is not part ! clobbered. ! * calls.c (store_one_arg): In the non-BLKmode non-partial case, ! take padding into account when computing the argument value. ! * config/sh/sh.h (FUNCTION_ARG_REGNO_P): Fix parenthesizing error. ! * combine.c (try_combine): Apply substitutions in ! CALL_INSN_FUNCTION_USAGE too. ! 2002-02-11 Aldy Hernandez ! * config/rs6000/rs6000.c (altivec_init_builtins): Handle ! __builtin_altivec_abs*. ! (bdesc_abs): New. ! * config/rs6000/rs6000.h (rs6000_builtins): Add ! ALTIVEC_BUILTIN_ABS*. ! * config/rs6000/altivec.h: Use const char for builtins expecting ! literals. ! (vec_abs): New versions for C and C++. ! (vec_abss): Same. ! 2002-02-10 Kazu Hirata ! * config/h8300/h8300.h (INITIALIZE_TRAMPOLINE): Simplify by ! using Pmode. ! 2002-02-10 Kazu Hirata ! * config/h8300/h8300.h (STACK_POINTER_REGNUM): Use the ! constant definition from h8300.md. ! (FRAME_POINTER_REGNUM): Likewise. ! * config/h8300/h8300.md (define_constants): Add FP_REG. ! 2002-02-10 Kazu Hirata ! * config/h8300/h8300.c (print_operand): Remove redundant code. ! 2002-02-10 Kazu Hirata ! * config/h8300/h8300-protos.h: Remove the prototype for byte_reg. ! * config/h8300/h8300.c (byte_reg): Make it static. ! 2002-02-10 Richard Henderson ! PR c/5623 ! * c-typeck.c (incomplete_type_error): Handle flexible array members. ! 2002-02-10 Richard Henderson ! PR c++/5624 ! * tree.c (append_random_chars): Don't abort if main_input_filename ! does not exist. ! 2002-02-10 Hans-Peter Nilsson ! * config/mmix/t-mmix (MULTILIB_EXTRA_OPTS): Disable. ! 2002-02-10 Kazu Hirata ! * config/h8300/h8300.md (pushhi1_h8300): Correct the mode used. ! (pushhi1): Likewise. ! 2002-02-10 John David Anglin ! * pa.c (reg_before_reload_operand): Don't accept a SUBREG operand. ! * pa.h (PREDICATE_CODES): Adjust codes for reg_before_reload_operand. ! 2002-02-09 David O'Brien ! * config/sparc/freebsd.h(TARGET_DEFAULT): Add MASK_EPILOGUE setting and ! remove MASK_VIS. ! (ASM_CPU_DEFAULT_SPEC): Remove. Default setting is fine. ! 2002-02-09 Kazu Hirata ! * config/h8300/h8300.c (output_logical_op): Use sub.w to clear ! a half of an SImode register on H8/300. ! Sat Feb 9 18:28:02 CET 2002 Jan Hubicka ! * i386.md (movdi_2): Add missing '!'. ! 2002-02-09 Kazu Hirata ! * config/h8300/h8300.h: Fix formatting. Remove commented-out ! definitions. ! 2002-02-09 Kazu Hirata ! * config/h8300/h8300.md (length): Correct the distance valid ! for the short branch. ! 2002-02-09 Kazu Hirata ! * config/h8300/h8300.md (iorhi3): Tighten the predicates. ! 2002-02-09 Alexandre Oliva ! * config/sh/sh.h (REGISTER_NATURAL_MODE): Save part-clobbered ! registers in SImode. ! (HARD_REGNO_CALL_PART_CLOBBERED) [TARGET_SHMEDIA32]: Set r18 as ! part-clobbered. ! * config/sh/sh.c (expand_prologue): Fix mis-applied 2001-11-09's ! patch. ! Contribute sh64-elf. ! 2002-02-09 Alexandre Oliva ! * config/sh/sh.c (TARGET_CANNOT_MODIFY_JUMPS_P): Define to... ! (sh_cannot_modify_jumps_p): New function. ! 2002-02-05 Alexandre Oliva ! * config/sh/sh.c (TARGET_MS_BITFIELD_LAYOUT_P): Define to... ! (sh_ms_bitfield_layout_p): New function. ! 2002-02-04 Alexandre Oliva ! Zack Weinberg ! * config/sh/sh.h (TRAMPOLINE_ADJUST_ADDRESS): Use ! expand_simple_binop instead of expand_binop. ! 2002-02-03 Alexandre Oliva ! * config/sh/sh.h (OVERRIDE_OPTIONS) [! TARGET_SH5]: Disable ! use of .quad and .uaquad. ! * config/sh/sh.c (TARGET_ASM_UNALIGNED_DI_OP, ! TARGET_ASM_ALIGNED_DI_OP): Add comment pointing to the above. ! 2002-01-24 Alexandre Oliva ! * config/sh/sh.md (movdi_const, movdi_const_32bit, ! movdi_const_16bit): Make sure all CONSTs have modes. ! (sym2PIC): Ditto, but by adjusting all callers. ! * config/sh/sh.c (calc_live_regs) [TARGET_SHCOMPACT]: Set pr_live ! if the prologue calls the SHmedia argument decoder or register ! saver. ! 2002-01-24 Alexandre Oliva ! * config/sh/sh.c (TARGET_ASM_UNALIGNED_DI_OP): Define. ! (TARGET_ASM_ALIGNED_DI_OP): Likewise. ! (sh_expand_epilogue): Don't emit USE of return target register. ! (prepare_move_operands): Legitimize DImode PIC addresses. ! (sh_media_register_for_return): Skip tr0, used to initialize the ! PIC register. ! (sh_expand_prologue): Remove explicit USE of return register. ! (nonpic_symbol_mentioned_p): PC is non-PIC. Don't recurse in ! CONST_DOUBLEs. UNSPEC_GOTPLT is PIC. ! * config/sh/sh.h (ASM_OUTPUT_DOUBLE_INT): Removed, obsolete. ! (OVERRIDE_OPTIONS): Don't disable PIC on SH5. ! (EXTRA_CONSTRAINT_S): Use MOVI_SHORI_BASE_OPERAND_P instead of ! EXTRA_CONSTRAINT_T. ! (GOT_ENTRY_P, GOTPLT_ENTRY_P, GOTOFF_P, PIC_ADDR_P): New. ! (MOVI_SHORI_BASE_OPERAND_P): New. ! (NON_PIC_REFERENCE_P, PIC_REFERENCE_P): New. ! (EXTRA_CONSTRAINT_T): Define in terms of them. ! (OUTPUT_ADDR_CONST_EXTRA): Handle UNSPEC_GOTPLT. ! * config/sh/sh.md (movsi_media, movsi_media_nofpu, ! movdi_media, movdi_media_nofpu): Add SIBCALL_REGS class to ! alternatives supporting TARGET_REGS. ! (UNSPEC_GOTPLT): New constant. ! (movdi split): Move incrementing of LABEL_NUSES... ! (movdi_const, movdi_const_32bit): Here. Use ! MOVI_SHORI_BASE_OPERAND_P instead of EXTRA_CONSTRAINT_T. ! (movdi_const_16bit): New. ! (call, call_value) [flag_pic]: Use GOTPLT. ! (call_pop, call_value_pop): New expands. ! (call_pop_compact, call_pop_rettramp): New insns. ! (call_value_pop_compact, call_value_pop_rettramp): New insns. ! (sibcall) [flag_pic]: Use GOT. ! (builtint_setjmp_receiver): Remove bogus, unused expand. ! (GOTaddr2picreg): Implement for SHcompact and SHmedia. ! (*pt, *ptb, ptrel): New insns. ! (sym2GOT): Handle DImode GOT. ! (sym2GOTPLT, symGOTPLT2reg): New expands. ! (sym2PIC): New expand. ! (shcompact_return_tramp): Use GOTPLT to return trampoline. ! (shcompact_return_tramp_i): Use return register explicitly. ! * config/sh/sh.h (OVERRIDE_OPTIONS) [TARGET_SHMEDIA]: Don't ! disable flag_reorder_blocks. ! 2002-01-19 Alexandre Oliva ! * config/sh/sh.md (sibcall_compact): Reorder return, uses and ! clobbers, for clarity. ! (sibcall_epilogue) [TARGET_SHCOMPACT]: Mark saving and ! restoring of r0 in macl as MAYBE_DEAD. ! 2002-01-18 Alexandre Oliva ! * config/sh/sh.h (LONG_DOUBLE_TYPE_SIZE): Define. ! * config/sh/sh.md (movv4sf_i, movv16sf_i): Fix uses of ! alter_subreg all over. ! (jump) [TARGET_SHMEDIA]: FAIL to create new jumps after ! reload, instead of emitting instructions that would require ! reloading. ! (casesi_load_media): Add missing modes. ! 2001-11-09 Alexandre Oliva ! * config/sh/sh.c (sh_expand_prologue): Mark the PIC register ! as used if the argument decoder is called. ! 2001-08-28 Alexandre Oliva ! * config/sh/sh.md (udivsi3, divsi3): Load libcall symbol name in ! Pmode, then extend it to DImode if necessary. ! 2001-08-28 Stephen Clarke ! * config/sh/sh.h (LEGITIMATE_CONSTANT_P): Don't accept DFmode ! constants in FPU-enabled SHmedia, let them be loaded from memory. ! 2001-08-28 Alexandre Oliva ! * config/sh/sh.md (cmpeqdi_media, cmpgtdi_media, cmpgtudi_media): ! Adjust whitespace in assembly output templates. ! 2001-08-28 Stephen Clarke ! * config/sh/sh.md (movdicc_false, movdicc_true, movdicc): Adjust ! mode of if_then_else. ! 2001-08-04 Alexandre Oliva ! * config/sh/sh64.h (CPP_DEFAULT_CPU_SPEC): Override definition in ! sh.h. ! 2001-07-26 Andrew Haley ! Joern Rennecke ! * config/sh/sh64.h (CPP_DEFAULT_CPU_SPEC): New. ! (SUBTARGET_CPP_PTR_SPEC): New. ! (SUBTARGET_CPP_SPEC): Remove. ! 2001-07-06 Chandrakala Chavva ! * config/sh/sh.md (movsf_media_nofpu+1, movdf_media_nofpu+1): ! Fix typo in previous checkin. ! 2001-07-11 Chandrakala Chavva ! * config/sh/sh.h (MODES_TIEABLE_P): Fix redact indentations. ! 2001-07-10 Chandrakala Chavva ! Alexandre Oliva ! * config/sh/sh.h (MODES_TIEABLE_P): Don't tie modes wider than ! what single FP register can hold for SHmedia target. ! 2001-07-06 Chandrakala Chavva ! Alexandre Oliva ! * config/sh/sh.md (movsf_media_nofpu+1, movdf_media_nofpu+1): ! Do not split into SUBREG. ! 2001-06-14 Alexandre Oliva ! * config/sh/ushmedia.h, config/sh/sshmedia.h: Updated signatures ! and added new functions as specified in SH5 ABI r9. ! 2001-06-04 Alexandre Oliva ! * config/sh/lib1funcs.asm (GCC_nested_trampoline): Align to an ! 8-byte boundary. ! 2001-06-03 Alexandre Oliva ! * config/sh/sh.c (dump_table): Add const0_rtx in calls of ! gen_consttable_4 and gen_consttable_8. Emit multiple labels ! and consttable_window_ends. ! 2001-06-03 Graham Stott ! * config/sh/sh.md (movdi split): Remove unused variable last_insn. ! 2001-05-16 Alexandre Oliva ! * config/sh/sh.c (print_operand): Handle floating-point pair, ! vector and matrix registers. ! * config/sh/sh.h (REGISTER_MOVE_COST): Take floating-pointer ! vector modes into account. ! * config/sh/sh.md (movv2sf): Split move between registers into ! movdf. ! (movv4sf, movv16sf): Introduce insns that get split only after ! reload. ! * config/sh/shmedia.h: Fix Copyright dates. ! * config/sh/ushmedia.h: Likewise. Move loop counter ! declarations into conditionals that uses them. ! (sh_media_FVADD_S, sh_media_FVSUB_S): Fix off-by-one error in ! loop boundary. ! * config/sh/sshmedia.h: Fix Copyright dates. ! (sh_media_PUTCFG): Fix constraints. ! 2001-05-12 Alexandre Oliva ! * config/sh/sh.h (TARGET_PTRMEMFUNC_VBIT_LOCATION): Define to ! ptrmemfunc_vbit_in_delta for SH5. ! 2001-05-08 Alexandre Oliva ! * config/sh/sh.h (TARGET_SWITCHES): Document -m5-*. ! * invoke.texi: Likewise. ! 2001-04-14 Alexandre Oliva ! * config/sh/lib1funcs.asm (GCC_push_shmedia_regs, ! GCC_push_shmedia_regs_nofpu, GCC_pop_shmedia_regs, ! GCC_pop_shmedia_regs_nofpu): New global symbols. ! * config/sh/t-sh64 (LIB1ASMFUNCS): Add them. ! * config/sh/sh.h (SHMEDIA_REGS_STACK_ADJUST): New macro. ! * config/sh/sh.c (calc_live_regs): Account for PR's saving in ! compact function with nonlocal labels. ! (sh_expand_prologue) [SHcompact]: Push SHmedia regs if needed. ! (sh_expand_epilogue) [SHcompact]: Pop them when appropriate. ! (initial_elimination_offset): Account for their stack space. ! * config/sh/sh.md (shmedia_save_restore_regs_compact): New insn. ! * config/sh/sh.md (movsi_media, movsi_media_nofpu, movqi_media, ! movhi_media, movdi_media, movdi_media_nofpu, movdf_media, ! movdf_media_nofpu, movsf_media, movsf_media_nofpu): Require at ! least one of the operands to be a register. ! (movv2sf): Likewise. Renamed to movv2sf_i. ! (movdi, movdf, movv2sf, movv4sf, movv16sf, movsf): ! prepare_move_operands() before emitting SHmedia insns. ! 2001-04-03 Alexandre Oliva ! * config/sh/crti.asm (init, fini) [__SH5__ && ! __SHMEDIA__]: ! Don't save nor initialize r12. Don't mis-align the stack. ! Pad the code with a nop. ! * config/sh/crti.asm: Don't restore r12. Don't mis-align the ! stack. ! 2001-03-13 Alexandre Oliva ! * gcc/longlong.h (__umulsidi3, count_leading_zeros) ! [__SHMEDIA__]: Implement. ! 2001-03-11 Alexandre Oliva ! * config/sh/sh.md: Set latency of `pt' closer to reality. ! (movsi_media, movsi_media_nofpu, movdi_media, movdi_media_nofpu, ! movdf_media, movdf_media_nofpu, movsf_media, movsf_media_nofpu): ! Set move, load and store type attributes. ! * config/sh/sh.c (sh_loop_align) [TARGET_SH5]: Set to 3. ! * config/sh/sh.h (OVERRIDE_OPTIONS) [TARGET_SH5]: Disable ! profiling. ! * config/sh/sh.h (PROMOTE_MODE): Sign-extend SImode to DImode. ! * config/sh/sh-protos.h (sh_media_register_for_return): Declare. ! * config/sh/sh.c (sh_media_register_for_return): New function. ! (sh_expand_prologue) [TARGET_SHMEDIA]: Copy r18 to an available ! branch-target register. ! (sh_expand_epilogue) [TARGET_SHMEDIA]: Explicitly USE it. ! * config/sh/sh.md (return_media_i): Use any call-clobbered ! branch-target register. ! (return_media): If r18 wasn't copied in the prologue, copy it here. ! * config/sh/sh.h (CONDITIONAL_REGISTER_USAGE) [TARGET_SHMEDIA]: ! Clear class FP0_REGS. ! * config/sh/sh64.h (LINK_SPEC): Removed incorrect default copied ! from elf.h. ! 2001-03-08 DJ Delorie ! * config/sh/sh.h (OVERRIDE_OPTIONS): Disable relaxing for SHMEDIA. ! 2001-02-09 Alexandre Oliva ! * config/sh/sh.md (sibcall_compact): Set fp_mode to single. ! 2001-02-07 Alexandre Oliva ! * config/sh/sh.h (INT_ASM_OP) [SHMEDIA64]: Use `.quad'. ! 2001-02-03 Alexandre Oliva ! * config/sh/sh.h (INIT_CUMULATIVE_ARGS): Compute size of BLKmode ! return value correctly for call_cookie. ! 2001-02-01 Alexandre Oliva ! * config/sh/crt1.asm (start): Modified so as to call ! ___setup_argv_and_call_main. ! 2001-01-26 Alexandre Oliva ! * config/sh/sh.h (FUNCTION_ARG_ADVANCE): Don't count stack_regs in ! SHmedia mode. ! 2001-01-20 Alexandre Oliva ! * config/sh/sh.h (STRIP_DATALABEL_ENCODING): New macro. ! (STRIP_NAME_ENCODING): Use it. ! (ASM_OUTPUT_LABELREF): Likewise. Don't call assemble_name(). ! 2001-01-19 Alexandre Oliva ! * config/sh/sh.md (sgeu) [! SHMEDIA]: Fix invocation of ! prepare_scc_operands(). ! * config/sh/sh.h (SH_DATALABEL_ENCODING): Change to "#"... ! (DATALABEL_SYMNAME_P): ... so that we don't need memcmp here. ! 2001-01-17 Alexandre Oliva ! * config/sh/sh.h (STRIP_NAME_ENCODING): Strip leading `*'. ! 2001-01-13 Alexandre Oliva ! * config/sh/sh.md (shcompact_incoming_args): Use R0_REG. ! * config/sh/sh.md (R7_REG, R8_REG, R9_REG): Define as constants, ! used in shcompact_incoming_args. ! * config/sh/sh.c (sh_expand_epilogue): Fix thinko in previous ! change. ! * config/sh/crt1.asm (start) [SH5]: Switch to single-precision ! mode. ! * config/sh/lib1funcs.asm (sdivsi3_i4, udivsi3_i4, set_fpscr): ! Adjust accordingly. ! * config/sh/sh.c (sh_expand_prologue, sh_expand_epilogue): ! Simplify. Adjust. Add sanity check. ! * config/sh/sh.h (TARGET_SWITCHES) [5-compact]: Set ! FPU_SINGLE_BIT. ! * config/sh/sh.md (udivsi3_i4_single, divsi3_i4_single): Match ! TARGET_SHCOMPACT. ! (udivsi3, divsi3): Use them. ! (force_mode_for_call): New insn. ! (call, call_value, sibcall_value): Emit it before SHcompact ! calls. ! 2001-01-11 Alexandre Oliva ! * config/sh/sh.md (call, call_value, sibcall): Make sure the ! call cookie is non-NULL before taking its value. ! 2001-01-10 Alexandre Oliva ! * config.gcc (sh64): Set target_requires_64bit_host_wide_int. ! 2001-01-09 Alexandre Oliva ! * config/sh/sh.md (shcompact_incoming_args): Set argument memory ! block. ! * config/sh/sh.h (STATIC_CHAIN_REGNUM) [SH5]: Use r1. ! * config/sh/sh.c (sh_expand_prologue) [SH5]: Use r0 as ! temporary for stack adjusts. Use MACL and MACH to pass ! arguments to shcompact_incoming_args. ! * config/sh/sh.md (shcompact_incoming_args): Adjust. Don't ! clobber r1. ! * config/sh/lib1funcs.asm (shcompact_incoming_args): Likewise. ! (nested_trampoline): Load static chain address into r1. ! * config/sh/sh.md (movdi_media splits): Fix sign-extension. ! 2001-01-07 Alexandre Oliva ! * config/sh/sh.md (casesi): Sign-extend the first two operands, ! and use signed compares for them. ! * config/sh/sh.c (dump_table): Don't emit 8-byte constants after ! 4-byte ones. Instead, inter-leave them, maintaining the 8-byte ! ones properly aligned. ! (find_barrier): Account for extra alignment needed for 8-byte wide ! constants. ! (machine_dependent_reorg): Require a label for the second 4-byte ! constant after an 8-byte one. ! * config/sh/lib1funcs.asm (sdivsi3): Fix typo in yesterday's ! change. ! 2001-01-05 Alexandre Oliva ! * config/sh/sh.c (machine_dependent_reorg) [SHCOMPACT]: Reset ! last_float when switching float modes. ! * config/sh/sh.md (movdf) [SH5]: Don't use stack-pointer ! auto-increment for general-purpose registers. ! * config/sh/lib1funcs.asm (sdivsi3) [SHMEDIA]: Sign-extend the ! result. ! * config/sh/sh.c (sh_expand_prologue) [SH5]: Use r1 as temporary ! for stack adjust. ! * config/sh/sh.c (sh_builtin_saveregs): Support using all ! registers for varargs. ! 2001-01-01 Alexandre Oliva ! * config/sh/sh.h (FUNCTION_ARG_ADVANCE): Simplify. ! * config/sh/sh.h (CALL_COOKIE_STACKSEQ, ! CALL_COOKIE_STACKSEQ_SHIFT, CALL_COOKIE_STACKSEQ_GET): New macros. ! (CALL_COOKIE_INT_REG_SHIFT): Adjust. ! (FUNCTION_ARG_ADVANCE): Use SHCOMPACT_FORCE_ON_STACK. Adjust ! call_cookie accordingly. ! (FUNCTION_ARG): Test SHCOMPACT_FORCE_ON_STACK. ! (SHCOMPACT_BYREF): Likewise. ! (SHCOMPACT_FORCE_ON_STACK): New macro. ! * config/sh/sh.c (sh_expand_prologue): Use new call_cookie format. ! (sh_builtin_saveregs): Likewise. ! * config/sh/lib1funcs.asm (shcompact_call_trampoline, ! shcompact_incoming_args): Use new shift values. Support ! sequences of consecutive and non-consecutive pushes/pops. ! * config/sh/sh.md (return): Don't explicitly use PR_REG. ! 2001-01-05 Hans-Peter Nilsson ! * config/sh/sh.h (TEXT_SECTION): Define. ! * config/sh/elf.h (ASM_FILE_START): Output TEXT_SECTION_ASM_OP. ! 2001-01-05 Alexandre Oliva ! * config/sh/sh.h (INIT_CUMULATIVE_LIBCALL_ARGS): New macro. ! * config/sh/sh.h (BASE_RETURN_VALUE_REG): Use FP regs for ! return values on FPU-enabled SHmedia. ! (FUNCTION_VALUE_REGNO_P): Mark FIRST_FP_RET_REG as used on ! FPU-enabled SHmedia. ! (INIT_CUMULATIVE_ARGS): Set up return trampoline only if ! value is returned in a non-FP reg and is not returned by ! reference. ! * config/sh/sh.md (shcompact_return_tramp_i): Change type to ! jump_ind. ! 2000-01-04 Alexandre Oliva ! * config/sh/sh.h (SH_MIN_ALIGN_FOR_CALLEE_COPY): New. ! (FUNCTION_ARG_CALLEE_COPIES): Require argument to be ! quad-aligned to be passed by callee-copy reference. ! 2001-01-03 Alexandre Oliva ! * config/sh/elf.h (MAX_WCHAR_TYPE_SIZE): Define. ! * config/sh/sh64.h (MAX_WCHAR_TYPE_SIZE): Undefine. ! 2001-01-02 Alexandre Oliva ! * config/sh/lib1funcs.asm (shcompact_call_trampoline): Fix error in ! copying low-numbered FP regs to r7 and r8. ! * config/sh/sh.h (FUNCTION_ARG_ADVANCE): Don't request copying of ! FP regs to general-purpose regs only if the copy was passed on the ! stack. ! * config/sh/lib1funcs.asm (shcompact_call_trampoline): Fix typo in ! copying FP reg to r9. ! * config/sh/sh.h (FUNCTION_ARG_ADVANCE): Use trampoline to ! copy FP regs to general-purpose regs only in outgoing calls. ! * config/sh/sh.md (movdf_media, movsf_media): Revert incorrect ! change from 2000-10-30. Adjust for 64-bit (or 32-bit) ! HOST_WIDE_INT. ! * config/sh/sh.h (struct sh_args): Document all fields. ! (FUNCTION_OK_FOR_SIBCALL): Functions that receive arguments ! passed partially on the stack should not consider making ! sibcalls. ! * config/sh/sh.h (FUNCTION_ARG_ADVANCE): Add byref regs to ! stack_regs only for incoming calls. When passing FP args, ! make sure there are FP regs available before modifying ! call_cookie. ! (SHCOMPACT_BYREF): Pass double args in general-purpose ! registers by reference. ! 2000-12-30 Alexandre Oliva ! * config/sh/sh.h (FUNCTION_OK_FOR_SIBCALL) [SHCOMPACT]: Don't ! attempt to generate sibcalls if the caller got any arguments ! by reference. ! * config/sh/lib1funcs.asm (set_fpscr) [SH5]: Default to double. ! * config/sh/sh.c (dump_table) [SHCOMPACT]: Align DImode and DFmode ! to 8-byte boundaries. ! * config/sh/sh.md (shcompact_preserve_incoming_args): New insn. ! * config/sh/sh.h (CALL_COOKIE_INT_REG_GET): New macro. ! * config/sh/sh.c (sh_expand_prologue): Preserve args that will be ! stored in the stack. ! * config/sh/lib1funcs.asm (ct_main_table, ia_main_table): Arrange ! for the offsets to have the ISA bit set. ! (shcompact_call_trampoline): Document. Swap r0 and r1, to match ! invocation. Use beq instead of bgt to mark end of sequence of ! loads. ! (shcompact_incoming_args): Fix store of r2. Use beq instead of ! bgt to mark end of sequence of stores. ! * config/sh/sh.c (arith_operand): Don't check whether ! CONST_OK_FOR_J for now. ! * config/sh/sh.md (movdf_media, movsf_media): Use HOST_WIDE_INT ! instead of long for conversion. ! 2000-12-29 Alexandre Oliva ! * config/sh/sh.c (print_operand_address): Convert INTVAL to int ! before passing it to fprintf. ! 2000-12-28 Alexandre Oliva ! * config/sh/crt1.asm (start): Reset SR.FD, to enable the FP unit. ! Call set_fpscr before reading/writing SR. ! * config/sh/crt1.asm (start): Set SR.SZ and SR.PR, but not SR.FR. ! Call set_fpscr. ! * config/sh/lib1funcs.asm: Add `.align 2' directives before ! SHmedia code. ! (FMOVD_WORKS): Define on SH5 with FPU. ! (set_fpscr): Define on SH5. Remove separate _fpscr_values ! setting. ! * config/sh/t-sh64 (LIB1ASMFUNCS): Add _set_fpscr instead of ! _fpscr_values. ! 2000-12-28 Hans-Peter Nilsson ! * config/sh/lib1funcs.asm (ct_main_table): Align contents to even ! address. ! (ia_main_table): Ditto. ! 2000-12-27 Alexandre Oliva ! * config/sh/sh.h (MAX_WCHAR_TYPE_SIZE): Don't define. ! * config/sh/sh64.h (WCHAR_TYPE, WCHAR_TYPE_SIZE): Reinstate ! the definitions from sh.h. ! * config/sh/sh.h (PTRDIFF_TYPE): Define as conditional on ! TARGET_SH5. ! (SUBTARGET_CPP_SPEC): Arrange for __PTRDIFF_TYPE__ to be defined. ! * config/sh/elf.h (PTRDIFF_TYPE): Likewise. ! * config/sh/sh64.h (SUBTARGET_CPP_SPEC): Likewise. ! 2000-12-26 Alexandre Oliva ! * config/sh/sh.md (movdi_media split): Don't add REG_LABEL notes. ! Increment LABEL_NUSES. ! * config/sh/sh.h (SIZE_TYPE): Define as conditional on ! TARGET_SH5. ! (SUBTARGET_CPP_SPEC): Arrange for __SIZE_TYPE__ to be always ! defined. ! * config/sh/elf.h (SIZE_TYPE): Likewise. ! * config/sh/sh64.h (SUBTARGET_CPP_SPEC): Likewise. ! * config/sh/lib1funcs.asm (shcompact_call_trampoline, ! shcompact_incoming_args): Load switch table addresses using ! datalabel. ! * config/sh/sh.h (SUBTARGET_CPP_SPEC): Define __SIZE_TYPE__. ! (NO_BUILTIN_SIZE_TYPE): Define. ! (SIZE_TYPE): Don't define. ! * config/sh/sh64.h (SUBTARGET_CPP_SPEC): Define __SIZE_TYPE__. ! * config/sh/sh.h (CPP_SPEC): Fixed typo that prevented the ! definition of __SH5__=32 for -m5-compact-nofpu. ! * config/sh/sh.c (barrier_align): Ensure 32-bit alignment after ! ADDR_DIFF_VEC. ! 2000-12-24 Alexandre Oliva ! * config/sh/sh.h (FUNCTION_ARG_PADDING): Removed. ! 2000-12-23 Alexandre Oliva ! * config/sh/sh.h (TARGET_CACHE32): Enable on SH5. ! (FUNCTION_BOUNDARY): Ensure 32-bit alignment for SHmedia. ! (INSN_LENGTH_ALIGNMENT): Likewise. ! 2000-12-22 Alexandre Oliva ! * config/sh/sh.md (call, call_value, sibcall): Simplify ! copying of non-branch-target register. ! 2000-12-22 Alexandre Oliva ! * glimits.h (__LONG_MAX__): Revert 2000-12-13's patch. ! * config/sh/sh.h (CPP_SPEC): Define it here for 64-bit SHmedia. ! 2000-12-22 Alexandre Oliva ! * config/sh/sh.h (GET_SH_ARG_CLASS): Handle complex ! floating-point values as structs. ! (FUNCTION_ARG): Use SH5_PROTOTYPED_FLOAT_ARG. ! (SH5_PROTOTYPELESS_FLOAT_ARG): List FP registers before ! general-purpose register. ! (SH5_PROTOTYPED_FLOAT_ARG): New macro. ! 2000-12-20 Alexandre Oliva ! * config/sh/sh.md (addsi3): Force operand1 to reg for SHmedia. ! * config/sh/sh.md (movsi_media): Split CONST_DOUBLE loads too. ! * config/sh/sh.h (DATALABEL_REF_P): Don't require the CONST. ! (ENCODE_SECTION_INFO): Enclose variables and constants in ! DATALABEL unspecs. ! (SH_DATALABEL_ENCODING, DATALABEL_SYMNAME_P): Define. ! (STRIP_NAME_ENCODING): Strip SH_DATALABEL_ENCODING off. ! (ASM_OUTPUT_LABELREF, AMS_OUTPUT_SYMBOL_REF): Define. ! * config/sh/sh.c (gen_datalabel_ref): Use UNSPEC_DATALABEL ! only for LABEL_REFs. For SYMBOL_REFs, prepend ! SH_DATALABEL_ENCODING to the symbol name. ! * config/sh/sh.md (indirect_jump): Use SUBREG instead of ! convert_mode(). ! 2000-12-20 Alexandre Oliva ! * config/sh/sh.md (casesi): Enclose ADDR_DIFF_VEC address in ! UNSPEC_DATALABEL. ! * config/sh/sh.c (gen_datalabel_ref): Accept LABEL_REFs. ! * config/sh/sh.h (DATALABEL_REF_NO_CONST_P): Likewise. ! (DATALABEL_REF_P): Don't require CONST. ! (ASM_OUTPUT_ADDR_DIFF_ELT): On SH5, output datalabel before ! REL label. ! 2000-12-19 Alexandre Oliva ! * config/sh/sh.md (extendhidi2, extendqidi2): Use arithmetic shift ! right. ! 2000-12-18 Alexandre Oliva ! * config/sh/sh.md (movsi_media, call, call_value, sibcall): ! Use shallow_copy_rtx and PUT_MODE to change the mode of ! SYMBOL_REFs, LABEL_REFs, CONSTs, etc. ! * config/sh/sh.h (PREFERRED_RELOAD_CLASS): Reload SYMBOL_REFs ! on SHmedia using GENERAL_REGs. ! * config/sh/sh.md (ble_media_i, blt_media_i, bleu_media_i, ! bltu_media_i): Fix reversion of conditions. ! 2000-12-18 Alexandre Oliva ! * config/sh/sh.md (zero_extendhidi2): Use logical shift right. ! * config/sh/sh.c (output_far_jump): Save r13 in macl. ! 2000-12-17 Alexandre Oliva ! * config/sh/sh.c (gen_datalabel_ref): Fix mode of the UNSPEC. ! 2000-12-16 Alexandre Oliva ! * config/sh/lib1funcs.asm (ic_invalidate): Define for SH5. ! (GCC_nested_trampoline): Likewise. ! * config/sh/sh-protos.h (gen_datalabel_ref): Declare. ! * config/sh/sh.c (gen_datalabel_ref): Define. ! * config/sh/sh.h (TRAMPOLINE_SIZE): Adjust for SH5. ! (INITIALIZE_TRAMPOLINE): Likewise. ! (TRAMPOLINE_ADJUST_ADDRESS): Define. ! (DATALABEL_REF_NO_CONST_P, DATALABEL_REF_P): Define. ! (EXTRA_CONSTRAINT_T): Match DATALABEL unspecs. ! (OUTPUT_ADDR_CONST_EXTRA): Handle DATALABEL unspecs. ! * config/sh/sh.md (UNSPEC_DATALABEL): New constant. ! (ic_invalidate): Adjust for SH5. ! (ic_invalidate_line_media, ic_invalidate_line_compact): New insns. ! * config/sh/t-sh64 (LIB1ASMFUNCS): Added _ic_invalidate and ! _nested_trampoline. ! 2000-12-15 Alexandre Oliva ! * config/sh/sh.h (MOVE_MAX): Set to 8 for SHmedia, 4 elsewhere. ! (MOVE_MAX_PIECES): Set to 8 on SHmedia too. ! 2000-12-14 Alexandre Oliva ! * config/sh/sh.h (DBX_REGISTER_NUMBER): Adjust for sh64-elf-gdb. ! * config/sh/elf.h (DBX_REGISTER_NUMBER): Likewise. ! 2000-12-14 Alexandre Oliva ! * config/sh/sh.c (target_reg_operand): Match only target-branch ! registers and pseudos that aren't virtual registers. ! * config/sh/sh.md (call, call_value, sibcall) [TARGET_SHMEDIA]: ! Copy operands that don't match target_reg_operand to pseudos. ! (call_media, call_value_media, sibcall_media): Use ! target_reg_operand instead of target_operand. ! 2000-12-13 Alexandre Oliva ! * glimits.h (__LONG_MAX__) [SH5 == 64]: Adjust for 64 bits. ! * config/sh/sh.c (target_reg_operand): Match hardware registers ! other than branch-target registers. ! * config/sh/sh.md (zero_extendqidi2): Input operand is %1. ! * config/sh/lib1funcs.asm (sdivsi3) [SH5]: Make it global. ! (fpscr_values) [SH5 == 32]: Define. ! * config/sh/t-sh64 (LIB1ASMFUNCS): Add fpscr_values. ! * config/sh/sh.md (call, call_value, sibcall) [TARGET_SHMEDIA]: ! Handle function addresses coming in SUBREGs. ! 2000-12-12 Alexandre Oliva ! * config/sh/lib1funcs.asm (shcompact_call_trampoline, ! shcompact_return_trampoline): Use datalabel where appropriate. ! 2000-12-09 Alexandre Oliva ! * config/sh/sh.h (SECONDARY_OUTPUT_RELOAD_CLASS): Use a ! general-purpose register to copy one branch-target register to ! another. ! 2000-12-06 Alexandre Oliva ! * config/sh/sh.c (target_operand): Accept LABEL_REFs and ! SYMBOL_REFs with VOIDmode. ! * config/sh/sh.md (ble_media_i, blt_media_i, bleu_media_i, ! bltu_media_i): New insns. ! 2000-12-06 Alexandre Oliva ! * config/sh/sh.h (RETURN_IN_MEMORY): Adjust for SH5 ABI. ! (INIT_CUMULATIVE_ARGS): Likewise. ! 2000-12-01 Alexandre Oliva ! * machmode.def (V16SFmode): New mode. ! * c-common.c (type_for_mode): Support V2SF and V16SF. ! * tree.c (build_common_tree_nodes_2): Likewise. ! * tree.h (tree_index): Likewise. ! * calls.c (emit_call_1): Take args_so_far. Adjust all ! callers. Introduce CALL_POPS_ARGS. ! * tm.texi (CALL_POPS_ARGS): Document. ! * config/sh/crt1.asm: Implement in SHmedia mode. ! * config/sh/crti.asm, config/sh/crtn.asm: Likewise ! * config/sh/elf.h (ASM_SPEC, LINK_SPEC): Support SH5 flags. ! (DBX_REGISTER_NUMBER): Renumber registers for SH5. ! * config/sh/lib1funcs.asm: Disable functions unused in SH5. ! Implement divsi and udivsi in SHmedia mode. Introduce ! SHcompact trampolines. ! * config/sh/sh.c (GEN_MOV, GEN_ADD3, GEN_SUB3): Use DImode ! only in SHmedia64. ! (regno_reg_class): Rewrite. ! (fp_reg_names): Remove. ! (sh_register_names, sh_additional_register_names): New. ! (print_operand): Added `u'. Support SUBREGs in addresses. ! Add parentheses around shifted CONSTs. ! (output_file_start): Output .mode and .abi directives. ! (shiftcosts, addsubcosts, multcosts): Adjust. ! (output_stack_adjust): Compute alignment. Sanity-check SIZE. ! (push_regs): Take array of HOST_WIDE_INTs. Adjust callers. ! (calc_live_regs): Output to array of HOST_WIDE_INTs. Count ! bytes, not registers. Take into account the need for the ! SHcompact incoming args trampoline. Adjust all callers. ! (sh_expand_prologue): Take stack_regs into account. Call ! incoming args trampoline. Keep stack aligned as per SH5 ABI. ! (sh_expand_epilogue): Take stack_regs into accoutn. Keep ! stack aligned as per SH5 ABI. ! (sh_builtin_saveregs): Support SH5 ABI. ! (sh_build_va_list, sh_va_start): Likewise. ! (initial_elimination_offset): Take alignment into account. ! Compute location of PR according to the SH5 stack frame. ! (arith_reg_operand): Reject branch-target registers. ! (shmedia_6bit_operand): New. ! (logical_operand): Use CONST_OK_FOR_P on SHmedia. ! (target_reg_operand): Match DImode only. Accept SUBREGs. ! (target_operand): New. ! * config/sh/sh.h (CPP_SPEC, SUBTARGET_CPP_SPEC): Support SH5 flags. ! (CONDITIONAL_REGISTER_USAGE): Implement SH5 ABI. Initialize ! SIBCALL_REGS for SHmedia. ! (TARGET_SH3E, TARGET_SH4): Only if SH1_BIT is set too. ! (TARGET_FPU_DOUBLE, TARGET_FPU_ANY): New. ! (TARGET_SHMEDIA32, TARGET_SHMEDIA64): New. ! (TARGET_SWITCHES): New SH5 flags. ! (OVERRIDE_OPTIONS): Set SH5-specific options. Use ! VALID_REGISTER_P to disable unsupported registers. ! (LONG_TYPE_SIZE, LONG_LONG_TYPE_SIZE): Set. ! (POINTER_SIZE, PARM_BOUNDARY): Adjust. ! (FUNCTION_ARG_PADDING): Define. ! (FASTEST_ALIGNMENT): Adjust. ! (SH_REGISTER_NAMES_INITIALIZER): New. ! (sh_register_names): Declare. ! (DEBUG_REGISTER_NAMES): Define. ! (REGISTER_NAMES): Define based on sh_register_names. ! (SH_ADDITIONAL_REGISTER_NAMES_INITIALIZER): New. ! (sh_additional_register_names): Declare. ! (LAST_GENERAL_REG, LAST_FP_REG, LAST_XD_REG): Adjust for SHmedia. ! (FIRST_TARGET_REG, LAST_TARGET_REG): Define. ! (TARGET_REGISTER_P, SHMEDIA_REGISTER_P, VALID_REGISTER_P): Define. ! (REGISTER_NATURAL_MODE): Define. ! (FIRST_PSEUDO_REGISTER): Adjust. ! (FIXED_REGISTERS, CALL_USED_REGISTERS): Adjust. ! (HARD_REGNO_CALL_PART_CLOBBERED): Define. ! (HARD_REGNO_NREGS, HARD_REGNO_MODE_OK): Adjust. ! (VECTOR_MODE_SUPPORTED_P): Define. ! (REG_CLASS_CONTENTS): Adjust. ! (SMALL_REGISTER_CLASSES): Adjust. ! (REG_ALLOC_ORDER): Adjust. ! (INDEX_REG_CLASS): Adjust. ! (CONST_OK_FOR_O, CONST_OK_FOR_P): New. ! (CONST_OK_FOR_LETTER_P): Adjust. ! (PREFERRED_RELOAD_CLASS): Adjust. ! (SECONDARY_OUTPUT_RELOAD_CLASS): Adjust. ! (SECONDARY_INPUT_RELOAD_CLASS): Adjust. ! (NPARM_REGS, FIRST_PARM_REG, FIRST_RET_REG): Adjust. ! (FIRST_FP_PARM_REG): Adjust. ! (CALL_POPS_ARGS): Define. ! (FUNCTION_ARG_REGNO_P): Adjust. ! (struct sh_args): New fields. ! (GET_SH_ARG_CLASS): Adjust. ! (INIT_CUMULATIVE_ARGS): Adjust. ! (INIT_CUMULATIVE_INCOMING_ARGS): Define. ! (FUNCTION_ARG_ADVANCE): Adjust. ! (FUNCTION_ARG): Adjust. ! (FUNCTION_ARG_PASS_BY_REFERENCE, SHCOMPACT_BYREF): Define. ! (FUNCTION_ARG_CALLEE_COPIES): Define. ! (SH5_PROTOTYPELESS_FLOAT_ARG): Define. ! (STRICT_ARGUMENT_NAMING): Define. ! (PRETEND_OUTGOING_VARARGS_NAMED): Adjust. ! (FUNCTION_ARG_PARTIAL_NREGS): Adjust. ! (SH5_WOULD_BE_PARTIAL_NREGS): Define. ! (SETUP_INCOMING_VARARGS): Adjust. ! (HAVE_POST_INCREMENT, HAVE_PRE_DECREMENT): Adjust. ! (USE_LOAD_POST_INCREMENT, USE_STORE_PRE_DECREMENT): Adjust. ! (REGNO_OK_FOR_INDEX_P, REG_OK_FOR_INDEX_P): Adjust. ! (SUBREG_OK_FOR_INDEX_P): Adjust. ! (EXTRA_CONSTRAINT_S): Update. ! (EXTRA_CONSTRAINT_T): New. ! (EXTRA_CONSTRAINT): Adjust. ! (GO_IF_LEGITIMATE_INDEX): Adjust. ! (GO_IF_LEGITIMATE_ADDRESS): Adjust. ! (LEGITIMIZE_ADDRESS, LEGITIMIZE_RELOAD_ADDRESS): Adjust. ! (MOVE_MAX): Adjust. ! (MAX_MOVE_MAX): Define. ! (Pmode): Adjust. ! (CONST_COSTS): Adjust. ! (REGISTER_MOVE_COST): Adjust. ! (BRANCH_COST): Adjust. ! (TEXT_SECTION_ASM_OP): Adjust. ! (DBX_REGISTER_NUMBER): Adjust. ! (ASM_OUTPUT_DOUBLE_INT): New. ! (UNALIGNED_DOUBLE_INT_ASM_OP): New. ! (PREDICATE_CODES): Adjust. ! (PROMOTE_MODE): Adjust. ! (CRT_CALL_STATIC_FUNCTION): Do not define for SHmedia. ! * config/sh/sh.md (AP_REG, PR_REG, T_REG, GBR_REG): Renumber. ! (MACH_REG, MACL_REG, FPUL_REG, RAP_REG, FPSCR_REG): Renumber. ! (PR_MEDIA_REG, T_MEDIA_REG, R10_REG): New. ! (DR0_REG, DR2_REG, DR4_REG): Renumber. ! (TR0_REG, TR1_REG, TR2_REG): New. ! (XD0_REG): Renumber. ! (UNSPEC_COMPACT_ARGS): New. ! (type): Added pt and ptabs. ! (length): Default to 4 on SHmedia. Default pt length to 12 ! and 20 on SHmedia32 and SHmedia64, respectively. ! (pt): New function unit. ! (movdi, movsi): Add types pt and ptabs. Don't increment LABEL_NUSES. ! Add whitespace between operands of SHmedia instructions. ! (movdicc): Fix. ! (adddi3_media, addsi3_media): Adjust constraints. ! (subsi3) [SHmedia]: Force operand 1 into a register. ! (udivsi3_i1_media, udivsi3_i4_media): New. ! (udivsi3): Support SHmedia. ! (divsi3_i1_media, divsi3_i4_media): New. ! (divsi3): Support SHmedia. ! (anddi3, iordi3, xordi3): Adjust constraints. ! (zero_extendhidi2, zero_extendqidi2): New. ! (extendsidi2, extendhidi2, extendqidi2): New. ! (push, pop, push_e, push_fpul, push_4): Disable on SH5. ! (pop_e, pop_fpul, pop_4): Likewise. ! (movsi_media): Support FP and BT registers. ! (movsi_media_nofpu): New. Adjust splits to DImode. ! (lduw, ldub): Renamed to zero_extend* above. ! (movqi_media): Fix typo. ! (movdi_media): Support FP and BT registers. ! (movdi_media_nofpu): New. Adjust splits for SHmedia32. ! (movdi_const_32bit): New. ! (shori_media): Require immediate operand. Use `u' for output. ! (movdf_media, movsf_media): Simplified. ! (movdf_media_nofpu, movsf_media_nofpu): New. ! (movdf, movsf): Adjust ! (movv2sf, movv2sf, movv16sf): New. ! (beq_media, beq_media_i): Adjust constraints. Don't use ! scratch BT register. ! (bne_media, bne_media_i): Likewise. ! (bgt_media, bgt_media_i): Likewise. ! (bge_media, bge_media_i): Likewise. ! (bgtu_media, bgtu_media_i): Likewise. ! (bgeu_media, bgeu_media_i): Likewise. ! (beq, bne, bgt, blt, ble, bge, bgtu, bltu, bgeu, bleu, ! bunordered): Emit jump insn. Force operands to registers when ! needed. ! (jump_media, jump): Simplify. ! (call_compact, call_compact_rettramp): New. ! (call_value_compact, call_value_compact_rettramp): New. ! (call_media, call_value_media): Simplify. ! (sibcall_compact, sibcall_media): New. ! (call, call_value): Adjust for SHmedia and SHcompact. ! (sibcall, sibcall_value, untyped_call): Likewise. ! (sibcall_epilogue): Preserve r0 across epilogue for SHcompact. ! (indirect_jump): Adjust for SHmedia. ! (casesi_jump_media): New. ! (nop): Re-enable for SHmedia. ! (call_site): Restrict to SH1. ! (casesi): Adjust for SHmedia. ! (casesi_shift_media, casesi_load_media): New. ! (return): Explicitly use PR register. Call return trampoline ! on SHcompact. ! (return_i): Explicitly use PR register. ! (shcompact_return_tramp, shcompact_return_tramp_i): New. ! (return_media): Adjust. ! (shcompact_incoming_args): New. ! (epilogue): Adjust. ! (seq, slt, sle, sgt, sge, sgtu, sltu, sleu, sgeu, sne): Adjust. ! (movstrsi): Disable on SH5. ! (fpu_switch0, fpu_switch1, movpsi): Enable on SH4. ! (addsf3, addsf3_media): Test TARGET_SHMEDIA_FPU. ! (subsf3, subsf3_media): Likewise. ! (mulsf3, mulsf3_media, mac_media): Likewise. ! (divsf3, divsf3_media): Likewise. ! (floatdisf2, floatsisf2_media): Likewise. Adjust constraints. ! (floatsisf2, fux_truncsfsi2): Likewise. ! (fix_truncsfdi2, fix_truncsfsi2_media): Likewise. Adjust ! constraints. ! (cmpeqsf_media, cmpgtsf_media, cmpgesf_media): Likewise. ! (cmpunsf_media, cmpsf): Likewise. ! (negsf2, negsf2_media, sqrtsf2, sqrtsf2_media): Likewise. ! (abssf2, abssf2_media): Likewise. ! (adddf3, adddf3_media, subdf3, subdf3_media): Likewise. ! (muldf3, muldf3_media, divdf3, divdf3_media): Likewise. ! (floatdidf2, floatsidf2_media): Likewise. Adjust constraints. ! (floatsidf2, fix_truncdfsi2): Likewise. ! (fix_truncdfdi2, fix_truncdfsi2_media): Likewise. Adjust ! constraints. ! (cmpeqdf_media, cmpgtdf_media): Likewise. ! (cmpgedf_media, cmpundf_media, cmpdf): Likewise. ! (negdf2, negdf2_media, sqrtdf2, sqrtdf2_media): Likewise. ! (absdf2, absdf2_media): Likewise. ! (extendsfdf2, extendsfdf2_media): Likewise. ! (truncsfdf2, truncsfdf2_media): Likewise. ! * config/sh/sh64.h: New file. ! * config/sh/t-sh64: New file. ! * config/sh/shmedia.h: New file. ! * config/sh/ushmedia.h: New file. ! * config/sh/sshmedia.h: New file. ! * configure.in: Added sh64-*-elf. ! * configure: Rebuilt. ! 2000-10-10 Alexandre Oliva ! * config/sh/sh.c (GEN_MOV, GEN_ADD3, GEN_SUB3): New macros. ! (reg_class_from_letter): Use `b' for TARGET_REGS. ! (print_operand): Support `%M', `%m', `AND' and ! `ASHIFTRT'. Do not precede constants with `#' on SHmedia. ! (andcosts): Adjust for SHmedia. ! (output_stack_adjust, sh_expand_prologue, sh_expand_epilogue): ! Likewise. ! (target_reg_operand): New function. ! * config/sh/sh-protos.h (target_reg_operand): Declare. ! * config/sh/sh.h (CONDITIONAL_REGISTER_USAGE): Don't disable ! FP registers on SH5. ! (HARD_REGNO_MODE_OK): Accept them whenever they're acceptable ! on SH4. ! (TARGET_REGISTER_P): New macro. ! (reg_class, REG_CLASS_NAMES, REG_CLASS_CONTENTS): Added TARGET_REGS. ! (FUNCTION_VALUE): Use DImode for promoted types on SHmedia. ! (EXTRA_CONSTRAINT_S): New macro. ! (EXTRA_CONSTRAINT): Adjust. ! (FLOAT_TYPE_SIZE): Define to 32. ! (Pmode): DImode on SHmedia. ! (CONST_COSTS): Adjust for SHmedia literals. ! (PREDICATE_CODES): Added target_reg_operand. ! (PROMOTE_MODE): Promote signed types to DImode on SHmedia. ! * config/sh/sh.md: Remove all attrs from SHmedia insns. ! (cmpeqdi_media, cmpgtdi_media, cmpgtudi_media): New insns. ! (cmpdi): Accept SHmedia. ! (movdicc_false, movdicc_true): New insns. ! (movdicc): New expand. ! (adddi3): Accept arith_operand for op2, but FAIL on SH1 if ! no_new_pseudos. ! (addsi3_media): Match `S' constraint. ! (anddi3, andcdi3, iordi3, xordi3, negdi_media): New insns. ! (negdi2): Expand for SHmedia. ! (one_cmpldi2): New expand. ! (zero_extendsidi2): Change from expand to insn. ! (extendsidi2): Add constraints. ! (movdi_media, movsi_media): Change `%x' to `%M'. Use `%m' for ! LD/ST address. Fix SI immediate loading split. ! (movhi_media, movqi_media, lduw, ldub): New insns. ! (movhi, movqi): Accept SHmedia. ! (shori_media, movdi_media): Relax input constraints. Split ! symbolic constants. ! (movdf_media, movsf_media): New insn. New split to movdi. ! (movdf, movsf): Match on SHmedia. ! (beq_media, bne_media, bgt_media, bge_media, bgtu_media, ! bgeu_media): New insns and splits. New insns with `_i' suffix. ! (beq, bne, bgt, blt, ble, bge, bgtu, bltu, bgeu, bleu): Adjust. ! (bunordered): New expand. ! (jump_compact): Renamed from `jump'. ! (jump_media): New insn. ! (jump): New expand. ! (call_media, call_value_media): New insns. ! (call, call_value): Adjust. ! (indirect_jump_compact): Renamed from `indirect_jump'. ! (indirect_jump_media): New insn. ! (indirect_jump): New expand. ! (untyped_call, return): Accept SHmedia. ! (return_media): New insn. ! (prologue, epilogue, blockage): Accept SHmedia. ! (seq, slt, sle, sgt, sge, sgtu, sltu, sleu, sgeu, sne): Adjust. ! (sunordered): New expand. ! (addsf3, subsf3, mulsf3, divsf3, floatsisf2, fix_truncsfsi2, ! cmpsf, negsf2, sqrtsf2, abssf2): Adjust for SHmedia. ! (addsf3_media, subsf3_media, mulsf3_media, mac_media, ! divsf3_media, floatdisf2, floatsisf2_media, fix_truncsfdi2, ! fix_truncsfsi2_media, cmpeqsf_media, cmpgtsf_media, ! cmpgesf_media, cmpunsf_media, negsf2_media, sqrtsf2_media, ! abssf2_media): New insns. ! (adddf3, subdf3, muldf3, divdf3, floatsidf2, fix_truncdfsi2, ! cmpdf, negdf2, sqrtdf2, absdf2): Adjust for SHmedia. ! (adddf3_media, subdf3_media, muldf3_media, divdf3_media, ! floatdidf2, floatsidf2_media, fix_truncdfdi2, ! fix_truncdfsi2_media, cmpeqdf_media, cmpgtdf_media, ! cmpgedf_media, cmpundf_media, negdf2_media, sqrtdf2_media, ! absdf2_media): New insns. ! (extendsfdf2, truncdfsf2): Adjust for SHmedia. ! (extendsfdf2_media, truncdfsf2_media): New insns. ! 2000-09-14 Alexandre Oliva ! * config/sh/sh.c (machine_dependent_reorg): On shmedia, skip for now. ! * config/sh/sh.h (CONST_OK_FOR_J): Document. ! (LEGITIMATE_CONSTANT_P): Accept CONST_DOUBLEs on shmedia. ! * config/sh/sh.md (adddi3): New expand. ! (adddi3_media, adddi3z_media): New insns. ! (adddi3_compact): Renamed from adddi3. ! (addsi3_media): Use add.l r63 to add constant zero. ! (subdi3): New expand. ! (subdi3_media): New insn. ! (subdi3_compact): Renamed from subdi3. ! (mulsidi3): New expand. ! (mulsidi3_media): New insn. ! (mulsidi3_compact): Renamed from mulsidi3. ! (umulsidi3): New expand. ! (umulsidi3_media): New insn. ! (umulsidi3_compact): Renamed from umulsidi3. ! (ashlsi3_media, ashrsi3_media, lshrsi3_media): New insns. ! (ashlsi3, ashrsi3, lshrsi3): Use them. ! (ashldi3_media, ashrdi3_media, lshrdi3_media): New insns. ! (ashldi3, ashrdi3, lshrdi3): Use them. ! (zero_extendsidi2): New expand. ! (extendsidi2): New insn. ! (movsi_media): New insn. Split to movdi to load constants. ! (movsi): Enable for shmedia. ! (movdi_media): New insn. Use shori_media to load wide constants. ! (short_media): New insn. ! (movdi): Enable for shmedia. ! 2000-09-08 Alexandre Oliva ! * config/sh/sh.h (CPP_SPEC): Added `m5'. ! (SUBTARGET_CPP_SPEC): Added `!m5'. ! (SH5_BIT, TARGET_SH5, TARGET_SHMEDIA, TARGET_SHCOMPACT): New macros. ! (TARGET_SWITCHES): Added `5' and `5-compact'. Added SH1_BIT ! to all other SH variants. ! (TARGET_DEFAULT): Set to SH1_BIT. ! (OVERRIDE_OPTIONS): Recognize sh5 CPU. ! (BITS_PER_WORD): Raise to 64 on shmedia. ! (MAX_BITS_PER_WORD): Change to 64. ! (MAX_LONG_TYPE_SIZE, MAX_WCHAR_TYPE_SIZE): Set to MAX_BITS_PER_WORD. ! (INT_TYPE_SIZE): Keep as 32. ! (UNITS_PER_WORD): Raise to 8 on shmedia. ! (MIN_UNITS_PER_WORD): Keep as 4. ! (POINTER_SIZE): Raise to 64 on shmedia. ! (CONST_OK_FOR_J): New macro. ! (CONST_OK_FOR_LETTER_P): Use it. ! (processor_type): Add PROCESSOR_SH5. ! * config/sh/sh.md: Conditionalize all expands, insns and ! splits to TARGET_SH1. ! (cpu): Added sh5. ! (addsi3_compact): Renamed from... ! (addsi3): Now an expand. ! (addsi3_media, subsi3_media): New insns. ! (subsi3): Don't negate constants with SHmedia. ! * hooks.c: New file. ! * hooks.h: New file. ! * Makefile.in (HOOKS_H): New. ! (TARGET_DEF_H): Added $(HOOKS_H). ! (OBJS): Added hooks.o. ! (cfgcleanup.o, bb-reorder.o): Added target.h. ! (hooks.o): Added dependencies. ! * target-def.h (TARGET_CANNOT_MODIFY_JUMPS_P): New, added to... ! (TARGET_INITIALIZER): this. ! * doc/tm.texi (TARGET_CANNOT_MODIFY_JUMPS_P): Document. ! * target.h (struct gcc_target): Added cannot_modify_jumps_p. ! * bb-reorder.c: Include target.h. ! (reorder_basic_blocks): Skip if cannot modify jumps. ! * cfgcleanup.c: Include target.h. ! (try_optimize_cfg): Skip merge blocking if cannot modify jumps. ! 2002-02-08 Chris Demetriou ! * config/mips/mips.md (casesi_internal, casesi_internal_di): ! Protect jump delay slot instructions with .set noreorder and ! .set nomacro. ! 2002-02-08 Chris Demetriou ! * config/mips/mips.md (casesi_internal_di): Calculate ! the index into the target offset table correctly. ! 2002-02-08 Richard Henderson ! * expr.c (expand_expr): Mind EXPAND_INITIALIZER for truncation also. ! * final.c (output_addr_const): Accept and discard SUBREG. ! * varasm.c (decode_addr_const): Don't abort on unknown expressions -- ! mark them unknown instead. ! (simplify_subtraction): Handle RTX_UNKNOWN. ! (initializer_constant_valid_p): Strip NOP_EXPRs that narrow the mode. ! 2002-02-08 David Edelsohn ! * doc/invoke.texi (RS/6000 and PowerPC Options): Fix typo. ! 2002-02-08 Richard Henderson ! * config/alpha/elf.h (ASM_OUTPUT_ALIGNED_BSS): New. ! 2002-02-08 Andreas Jaeger ! * config.gcc (x86_64-*-linux): Add t-linux64 makefile fragment. ! * config/i386/t-linux64: New file. ! 2002-02-08 Jakub Jelinek ! * c-common.c (c_expand_expr): Revert 2002-02-06 patch. ! * c-parse.in (compstmt): Clear last_expr_type. ! 2002-02-07 Richard Henderson ! * loop.c (strength_reduce): Sink final_value when not ! eliminating a biv. ! 2002-02-07 David O'Brien ! * config/sparc/freebsd.h: Fix mismatched spec {. ! 2002-02-07 Richard Henderson ! * cfgrtl.c: Include recog.h and insn-config.h. ! (keep_with_call_p): Fix general_operand invocation. ! * Makefile.in (cfgrtl.o): Update dependencies. ! 2002-02-07 Kazu Hirata ! * config/h8300/h8300.c (two_insn_adds_subs_operand): Revise a ! comment. Accept HImode only if TARGET_H8300. ! 2002-02-07 Eric Christopher ! * config/mips/crtn.asm: Cleanup #ifdefs. ! 2002-02-07 Eric Christopher ! * config/mips/crti.asm: Add changes for mips16. mips16 uses ! register 7 as RA instead of $31. ! * config/mips/crtn.asm: Ditto. ! * config/mips/mips.c (mips_move_2words): Add case for ! TARGET_MIPS16 when HOST_BITS_PER_WIDE_INT >= 64. ! (compute_frame_size): Fix typo. ! (save_restore_insns): Ditto. Make documentation about using ! register $7 as return register more precise. ! (mips_expand_epilogue): Fix comment. Add code to work around not ! being able to add to the stack pointer directly. ! * config/mips/mips.h (EH_RETURN_DATA_REGNO): Change register number ! to 2 for TARGET_MIPS16 as we need 6 and 7 as clobbers in the ! epilogue. ! 2002-02-07 Tom Rix ! * config/rs6000/rs6000.c (reg_or_aligned_short_operand): New. For ! immediates in ldu and stdu DS opcode field. ! * config/rs6000/rs6000.md (movdi_update, movdi_update1): Use. ! * config/rs6000/rs6000-protos.h: Add reg_or_aligned_short_operand. ! * config/rs6000/rs6000.h (PREDICATE_CODES): Same. ! 2002-02-07 Jeff Sturm ! * config/sparc/sparc.c (compute_frame_size): Don't correct frame ! offset for stack bias. ! 2002-02-07 H.J. Lu ! * config/mips/linux.h (SUBTARGET_ASM_DEBUGGING_SPEC): Defined. ! 2002-02-07 Ulrich Weigand ! * testsuite/gcc.dg/cpp/charconst-2.c: Add -fsigned-char option. ! Thu Feb 7 12:14:17 CET 2002 Jan Hubicka ! * i386-protos.h (x86_order_regs_for_local_alloc): Declare ! * i386.c (x86_order_regs_for_local_alloc): New global function. ! * i386.h (REG_ALLOC_ORDER): CLeanup. ! (ORDER_REGS_FOR_LOCAL_ALLOC): New. ! 2002-02-07 Richard Henderson ! PR optimization/2463 ! * alias.c (find_base_value): Recall base values for fixed hard regs. ! * loop.c (loop_regs_update): Don't use single_set on non-insns. ! 2002-02-07 Alexandre Oliva ! * config/mips/mips.md (define_delay) [mips16]: Adjust required ! length. ! 2002-02-06 Richard Henderson ! PR c/5609 ! * stmt.c (resolve_operand_name_1): Take more care with mixed ! named and unnamed operands. ! 2002-02-06 Janis Johnson ! Jan Hubicka ! * loop.c (remove_constant_addition): Avoid clobbering a shared ! CONST expression. ! 2002-02-06 Ulrich Weigand ! * config.gcc (s390x-*-linux*): Add t-linux64 makefile fragment. ! * config/s390/t-linux64: New file. ! * config/s390/libgcc-glibc.ver: New file. ! 2002-02-06 Ulrich Weigand ! * config/s390/linux64.h: Delete file. ! * config/s390/s390x.h: New file. ! * config.gcc (s390x-*-linux*): Use s390x.h instead of linux64.h ! as target header file. ! * config/s390/linux.h (TARGET_VERSION): Define depending on ! DEFAULT_TARGET_64BIT. ! (CPP_SPEC, ASM_SPEC, LINK_SPEC): Likewise. ! (SIZE_TYPE, PTRDIFF_TYPE): Likewise. ! (NO_BUILTIN_SIZE_TYPE, NO_BUILTIN_PTRDIFF_TYPE): Define. ! (CPP_ARCH31_SPEC, CPP_ARCH64_SPEC): New defines. ! (LINK_ARCH31_SPEC, LINK_ARCH64_SPEC): New defines. ! (EXTRA_SPEC): New define. ! * config/s390/s390.h (TARGET_VERSION): Define depending on ! DEFAULT_TARGET_64BIT. ! (MASK_RETURN_ADDR): Add run-time check for TARGET_64BIT. ! 2002-02-06 Jason Merrill ! * c-decl.c (finish_function): Warn about a non-void function with ! no return statement and no abnormal exit. ! (current_function_returns_abnormally): New variable. ! (start_function): Clear it. ! (struct c_language_function): Add returns_abnormally. ! (push_c_function_context): Save it. ! (pop_c_function_context): Restore it. ! (builtin_function): Set TREE_THIS_VOLATILE on return fns. ! (grokdeclarator): Set C_FUNCTION_IMPLICIT_INT on functions without ! an explicit return type. ! * c-tree.h: Declare current_function_returns_abnormally. ! (C_FUNCTION_IMPLICIT_INT): New macro. ! * c-typeck.c (build_function_call): Set it. ! (c_expand_return): Set current_function_returns_value even if the ! value is erroneous. ! 2002-02-06 Jakub Jelinek ! PR c/5420: ! * c-common.c (c_unsafe_for_reeval): Make COMPOUND_LITERAL_EXPR ! unsafe for reevaluation. ! 2002-02-06 Jakub Jelinek ! PR c/5482: ! * c-common.c (c_expand_expr) [STMT_EXPR]: If last expression is not ! EXPR_STMT, but COMPOUND_STMT, recurse into it. ! 2002-02-06 Richard Henderson ! * cfganal.c (keep_with_call_p): Source for fixed_reg dest must ! be a general_operand. Dest for function value must be a pseudo. ! 2002-02-06 Nick Clifton ! * dbxout.c (dbxout_symbol_location): Accept LABEL_REFs as well ! as SYMBOL_REFs from the constant pool. ! 2002-02-06 Alexandre Oliva ! * dbxout.c (dbxout_parms): Apply DEBUGGER_ARG_OFFSET to parameters ! passed by invisible reference. ! 2002-02-05 Richard Henderson ! * config/sparc/sparc.h (ARG_POINTER_CFA_OFFSET): No stack bias. ! 2002-02-06 Hans-Peter Nilsson ! Implement using "base addresses" in insn operands as default. ! * config/mmix/mmix.c (mmix_conditional_register_usage): if ! -mabi=gnu, modify fixed_regs to fit the GNU ABI. ! (mmix_extra_constraint): Use 'R' to indicate that GETA should be ! used to read the rtx value. ! (mmix_target_asm_function_epilogue): Fix spacing. ! (mmix_constant_address_p): Handle TARGET_BASE_ADDRESSES. ! (mmix_legitimate_address): Ditto. ! (mmix_encode_section_info): Set SYMBOL_REF_FLAG on rtx:es that ! should be loaded with a GETA insn. Don't allocate needless extra ! char for nul termination and fix misleading comment. ! (mmix_print_operand_address): Handle constants if ! TARGET_BASE_ADDRESSES. ! (mmix_output_register_setting): Use base addressing if ! TARGET_BASE_ADDRESSES and the number of insns is 3. ! * config/mmix/t-mmix (MULTILIB_EXTRA_OPTS): New. ! * config/mmix/mmix.md ("movdi"): Change the alternative with GETA ! to use R as constraint, add LDA to match s. ! * config/mmix/mmix.h (TARGET_BASE_ADDRESSES): New. ! (TARGET_DEFAULT): Add TARGET_MASK_BASE_ADDRESSES. ! (TARGET_SWITCHES): Add -mbase-addresses, -mno-base-addresses. ! (FIXED_REGISTERS): Make registers $231..$246 fixed by default. ! (MMIX_MMIXWARE_ABI_REG_ALLOC_ORDER): Move $231..$246 last, in ! order with other fixed registers. ! (MMIX_GNU_ABI_REG_ALLOC_ORDER): Put forward $231, in order with ! other parameter/call-clobbered registers. ! * doc/invoke.texi (Option Summary) : Add ! -mbase-addresses, -mno-base-addresses. ! (MMIX Options): Ditto. ! 2002-02-05 John David Anglin ! * pa.h (PREDICATE_CODES): Add reg_before_reload_operand. ! 2002-02-06 Aldy Hernandez ! * config/rs6000/altivec.h: Change elem to _S_elem. ! 2002-02-05 Jason Thorpe ! * config/netbsd.h (WCHAR_TYPE): Define. ! (WCHAR_TYPE_SIZE): Ditto. ! (WINT_TYPE): Ditto. ! * config/alpha/netbsd.h (WCHAR_TYPE): Remove. ! (WCHAR_UNSIGNED): Ditto. ! (WCHAR_TYPE_SIZE): Ditto. ! (WINT_TYPE): Ditto. ! * config/arm/netbsd.h: Likewise. ! * config/i386/netbsd-elf.h: Likewise. ! * config/i386/netbsd.h: Likewise. ! * config/m68k/netbsd-elf.h: Likewise. ! * config/m68k/netbsd.h: Likewise. ! * config/ns32k/netbsd.h: Likewise. ! * config/sparc/netbsd.h: Likewise. ! * config/vax/netbsd.: Likewise. ! 2002-02-05 Alexandre Oliva ! * target.h (struct gcc_target): Added ms_bitfield_layout_p. ! * target-def.h (TARGET_MS_BITFIELD_LAYOUT_P): New. Added to... ! (TARGET_INITIALIZER): this. ! * doc/tm.texi (TARGET_MS_BITFIELD_LAYOUT_P): Document. ! (BITFIELD_NBYTES_LIMITED): Markup fix. ! * tree.h (default_ms_bitfield_layout_p): Declare. ! (record_layout_info): Added prev_field. ! * tree.c (default_ms_bitfield_layout_p): New fn. ! * c-decl.c (finish_struct): Disregard EMPTY_FIELD_BOUNDARY and ! PCC_BITFIELD_TYPE_MATTERS for MS bit-field layout. ! * stor-layout.c: Include target.h. ! (start_record_layout): Initialize prev_field. ! (place_field): Handle MS bit-field layout, and disregard ! EMPTY_FIELD_BOUNDARY, BITFIELD_NBYTES_LIMITED and ! PCC_BITFIELD_TYPE_MATTERS in this case. Update prev_field. ! * Makefile.in (stor-layout.o): Adjust dependencies. ! 2002-02-05 Jason Merrill ! * collect2.c (dump_file): Pass DMGL_VERBOSE to cplus_demangle. ! 2002-02-05 Andreas Jaeger ! * crtstuff.c: Fix comments. ! 2002-02-05 Richard Henderson ! PR fortran/3393 ! * loop.c (loop_iv_add_mult_emit_before): Copy multiplier as well. ! (loop_iv_add_mult_sink, loop_iv_add_mult_hoist): Likewise. ! PR fortran/3392 ! * config/mips/mips.c (function_arg): Handle TImode. ! (function_arg_advance): Likewise. ! 2002-02-05 Aldy Hernandez ! * config/rs6000/altivec.h (vec_step_help): Rename to ! __vec_step_help. ! 2002-02-05 Aldy Hernandez ! * config/rs6000/altivec.h: Fix typos. ! 2002-02-05 Jason Thorpe ! * config/arm/netbsd.h: Correct a comment. ! 2002-02-05 Aldy Hernandez ! * config/rs6000/rs6000.c (altivec_init_builtins): Fix typo ! building void typed builtins. ! * config/rs6000/altivec.h (vec_ld*): Fix typos. ! (vec_step): Implement for C++. ! Mon Feb 4 19:23:19 2002 Richard Kenner ! * final.c (final_scan_insn): Add case for NOTE_INSN_LOOP_END_TOP_COND. ! 2002-02-04 Richard Henderson ! * combine.c (nonzero_bits): Re-introduce special case for ! sp/fp/ap wrt REGNO_POINTER_ALIGN. ! 2002-02-05 Aldy Hernandez ! * doc/extend.texi: Warn about unsupported usage of altivec ! builtins. ! * config/rs6000/rs6000.md (altivec_vcmp*_p): Remove. ! (altivec_predicate_*): New. ! * config/rs6000/altivec.h: Rewrite predicates to use new builtins. ! Add C++ version of vec_*() functions. ! * config/rs6000/rs6000.c (bdesc_altivec_preds): New. ! (bdesc_2arg): Remove altivec predicates. ! (altivec_expand_builtin): Handle predicates. ! (altivec_init_builtins): Handle predicates. ! (altivec_expand_predicate_builtin): New. ! 2002-02-04 John David Anglin ! * pa.c (DO_FRAME_NOTES): Move forward. ! (store_reg): Revise handling of frame notes. ! (load_reg): Likewise. ! (set_reg_plus_d): Likewise. ! (hppa_expand_prologue): Likewise. ! (hppa_expand_epilogue): Likewise. ! 2002-02-04 John David Anglin ! * unwind-dw2-fde-glibc.c: Define _GNU_SOURCE if not defined. ! 2002-02-04 Jakub Jelinek ! PR c/4475, c++/3780: ! * c-common.def (SWITCH_STMT): Add SWITCH_TYPE operand. ! * c-common.h (SWITCH_TYPE): Define. ! * c-typeck.c (c_start_case): Set SWITCH_TYPE. ! * stmt.c (all_cases_count): Set lastval to thisval at end of loop. ! Rename spareness variable to sparseness. ! (expand_end_case_type): Renamed from expand_end_case, use orig_type ! if non-NULL instead of TREE_TYPE (orig_index). ! * tree.h (expand_end_case_type): Renamed from expand_end_case. ! (expand_end_case): Define using expand_end_case_type. ! * c-semantics.c (genrtl_switch_stmt): Pass SWITCH_TYPE ! to expand_end_case_type. ! * doc/c-tree.texi (SWITCH_STMT): Document SWITCH_TYPE. ! 2002-02-04 John David Anglin ! * pa.h (PREFERRED_STACK_BOUNDARY): Define to match standard rounding. ! (BIGGEST_ALIGNMENT): Change to 128. ! 2002-02-04 John David Anglin ! * pa32-linux.h (LINK_COMMAND_SPEC): Define. ! 2002-02-04 John David Anglin ! * pa.md (call_internal_reg_64bit): Remove unused variable. ! 2002-02-04 Nick Clifton ! * config/arm/arm.h (machine_function): Add uses_anonymous_args ! field. ! (SETUP_INCOMING_VARARGS): Set uses_anonymous_args. ! * config/arm/arm.c (current_function_anonymous_args): Delete, ! replace uses with cfun->machine->uses_anonymous_args. ! (arm_reorg): Do not reset uses_anonymous_args. ! * config/arm/arm.c (arm_hard_regno_mode_ok): Allow any value in ! any geenral register. ! 2001-02-04 Bernd Schmidt ! * cfgrtl.c (force_nonfallthru_and_redirect): Don't try to redirect ! the entry block. ! 2002-02-04 Richard Henderson ! * combine.c (force_to_mode): Remove STACK_BIAS code. ! (nonzero_bits): Likewise. Replace sp/fp special case with ! REGNO_POINTER_ALIGN. ! * config/sparc/sparc.h (FRAME_POINTER_REGNUM): Change to SFP. ! (HARD_FRAME_POINTER_REGNUM): New. ! (FIRST_PSEUDO_REGISTER, REG_CLASS_CONTENTS): Update. ! (FIXED_REGS, CALL_USED_REGS): Update. ! (REG_ALLOC_ORDER, REGISTER_NAMES): Update. ! (CONDITIONAL_REGISTER_USAGE): Update for HFP. ! (HARD_REGNO_NREGS): Update for SFP. ! (STACK_POINTER_OFFSET): Include bias here ... ! (FIRST_PARM_OFFSET): ... not here. ! (STACK_BIAS): Remove. ! (INIT_EXPANDERS): New. ! (STARTING_FRAME_OFFSET): Do not include bias. ! (ELIMINABLE_REGS, CAN_ELIMINATE, INITIAL_ELIMINATION_OFFSET): New. ! (REGNO_OK_FOR_INDEX_P, REGNO_OK_FOR_BASE_P): Update for SFP. ! (REG_OK_FOR_INDEX_P, REG_OK_FOR_BASE_P): Likewise. ! * config/sparc/aout.h (DBX_REGISTER_NUMBER): Update for HFP. ! * config/sparc/litecoff.h, config/sparc/sol2.h: Likewise. ! * config/sparc/sparc.c (mem_min_alignment): Update for HFP. ! (sparc_nonflat_function_prologue, epilogue_renumber): Likewise. ! (MUST_SAVE_REGISTER): Likewise. ! (sparc_flat_function_prologue): Likewise. ! (sparc_flat_function_epilogue): Likewise. ! (HARD_FRAME_POINTER_MASK): Rename from FRAME_POINTER_MASK. ! (sparc_init_modes): SFP is GENERAL_REGS. ! (sparc_builtin_saveregs): SFP does not have bias applied. ! 2002-02-04 Richard Henderson ! * config/alpha/alpha.c (current_function_is_thunk): Don't check ! current_function_is_thunk. ! (alpha_sa_mask): Distinguish between current_function_is_thunk ! called from ASM_OUTPUT_MI_THUNK and not. ! (alpha_does_function_need_gp): Thunks always need gp. ! (alpha_start_function, alpha_output_function_end_prologue): Likewise. ! (alpha_output_mi_thunk_osf): New. ! * config/alpha/alpha-protos.h: Update. ! * config/alpha/alpha.h (ASM_OUTPUT_MI_THUNK): New. ! 2002-02-04 Richard Sandiford ! * c-typeck.c (build_c_cast): Warn when qualifiers are added to ! function types, not when they're taken away. ! Mon Feb 4 09:05:58 2002 Jeffrey A Law (law@redhat.com) ! * cfgrtl.c (try_redirect_by_replacing_jump): Remove associated ! CODE_LABEL and jump table when replacing a table jump with a ! simple jump. ! 2002-02-04 Ulrich Weigand ! * config/s390/s390-protos.h (legitimize_la_operand, ! s390_secondary_input_reload_class, s390_plus_operand, ! s390_expand_plus_operand): Add prototypes. ! config/s390/s390.c (s390_secondary_input_reload_class, ! s390_plus_operand, s390_expand_plus_operand): New functions. ! (struct s390_address): New member 'pointer'. ! (s390_decompose_address): Compute it. ! (legitimate_la_operand_p): Use it. ! (legitimize_la_operand): New function. ! (movti, movdi, movdf splitters): Call it. ! config/s390/s390.h (SECONDARY_INPUT_RELOAD_CLASS): Define. ! (PREDICATE_CODES): Add s390_plus_operand. ! config/s390/s390.md (adddi3_inv_64, addaddr_ccclobber): Delete. ! (la_ccclobber): Allow GENERAL_REGS as output operand. ! (reload_load_address, *reload_load_address_reg_0, *la, *do_la_reg_0, ! *reload_la_64, *reload_la_31 and splitters): Delete, replace by ... ! (*la_64, *la_31, reload_indi, reload_insi): ... these. ! 2002-02-04 Ulrich Weigand ! * gcc/config/s390/s390.h (CRT_CALL_STATIC_FUNCTION): Fixed ! register names for regular asm () construct. ! 2002-02-04 Jakub Jelinek ! * config/i386/i386.md (movsf_1): Allow moving SF values in MMX ! registers. ! 2002-02-04 Jakub Jelinek + * combine.c (recog_for_combine): Create a dummy insn with PATTERN + pat for recog. ! 2002-02-04 Hartmut Penner ! * varasm.c (decode_rtx_const): Allow unspec (symbol_ref) in ! constant pool to be identical by string address and index. ! 2002-02-04 Anthony Green ! * output.h (SECTION_OVERRIDE): Define. ! * varasm.c (named_section): Obey SECTION_OVERRIDE. ! 2002-02-03 Jason Thorpe ! * config.gcc (arm*-*-netbsdelf*): Placeholder to prevent match ! by existing arm*-*-netbsd* (a.out) target. ! (ns32k-*-netbsdelf*): Likewise. ! (sparc-*-netbsdelf*): Likewise. ! (vax-*-netbsdelf*): Likewise. ! 2002-02-03 Danny Smith ! * gthr-win32.h: Protect against conflicting typedef for BOOL in windows ! headers and libobjc headers. ! 2002-02-03 Mumit Khan ! * gthr-win32.h (__mingwthr_key_dtor): Use extern "C" linkage for C++. ! (_mingw.h): Remove duplicate include. ! 2002-02-03 Jason Thorpe ! * config.gcc: Set cpu_type to m68k for 68010, as well. ! (m68010-*-netbsdelf*): New... ! (m68k*-*-netbsdelf*): ...targets. ! * config/m68k/netbsd-elf.h: New file. ! 2002-02-02 Kazu Hirata ! * config/h8300/h8300.c (hand_list): Move inside function_arg. ! 2002-02-02 Kazu Hirata ! * config/h8300/h8300.c (h8_push_ops): Move inside ! h8300_init_once. ! (h8_pop_ops): Likewise. ! (h8_move_ops): Likewise. ! 2002-02-02 Kazu Hirata ! * config/h8300/h8300.c (os_task): Make it static. ! (monitor): Likewise. ! (pragma_saveall): Likewise. ! 2002-02-02 Alexandre Oliva ! * config/sh/sh.md (ic_invalidate_line): Make sure the immediate ! constant is a valid sign-extension for Pmode. ! 2002-02-02 Kazu Hirata ! * config/h8300/h8300.c: Fix formatting. ! 2002-02-02 Kazu Hirata ! * config/h8300/h8300.md: Fix formatting. ! 2002-02-02 Kazu Hirata ! * config/h8300/h8300.md (one_cmpl patterns): Tighten the ! predicates of operands[1]. Split the patterns for each ! processor variant. ! 2002-02-02 Kazu Hirata ! * config/h8300/h8300.md (xor patterns): Tighten the predicates ! of operands[1] to register_operand. ! 2002-02-02 Neil Booth ! * cpphash.h (struct spec_nodes): Remove n__CHAR_UNSIGNED__. ! * cpphash.c (_cpp_init_hashtable): Similarly. ! * cppinit.c (cpp_create_reader): Default the signed_char flag. ! (init_builtins): Define __CHAR_UNSIGNED__ appropriately. ! (COMMAND_LINE_OPTIONS): Recognise -f{un,}signed-char. ! (cpp_handle_option): Handle the new options. ! * cpplex.c (cpp_interpret_charconst): Use new flag. ! * cpplib.h (struct cpp_options): New member signed_char. ! * gcc.c (cpp_unique_options): Remove %c spec and documentation. ! (cpp_options): Handle -fsigned-char and -funsigned-char. ! (static_specs): Remove signed_char_spec. ! (do_spec1): Don't handle %c. ! * system.h: Poison SIGNED_CHAR_SPEC. ! * tradcif.y (yylex): Use flag_signed_char. ! * tradcpp.h (flag_signed_char): New. ! * tradcpp.c (flag_signed_char): New. ! (main): Handle new command-line options. ! (initialize_builtins): Define __CHAR_UNSIGNED__ if appropriate. ! config: ! * alpha/alpha.h (SIGNED_CHAR_SPEC): Remove. ! * avr/avr.h: Remove old comments. ! * i960/i960.h (CPP_SPEC): Pass -fsigned-char if -mic*. ! (CC1_SPEC): Pass -fsigned-char if -mic*. ! (SIGNED_CHAR_SPEC): Remove. ! doc: ! * tm.texi (SIGNED_CHAR_SPEC): Remove documentation. ! 2002-02-01 Eric Christopher ! From Daniel Jacobowitz ! * config/mips/mips.h (FUNCTION_PROFILER): Fix function profiling. ! * config/mips/linux.h (ASM_OUTPUT_REG_PUSH): Undefine. ! (ASM_OUTPUT_REG_POP): Ditto. ! 2002-02-02 Neil Booth ! * c-decl.c, tree.c, tree.h, objc/objc-act.c: Revert bitfield ! patch. ! 2002-02-02 Jakub Jelinek ! * config/i386/i386.h (CPP_CPUCOMMON_SPEC): Add missing | separators. ! 2002-02-02 Jakub Jelinek ! PR c/5304: ! * expmed.c (expand_mult_highpart): Use immed_double_const for wide_op1 ! unconditionally. ! 2002-02-01 Janis Johnson ! * cfganal.c: Include tm_p.h. ! (keep_with_call_p): Fix the test that determines if a register holds ! the return value of a call. ! 2002-02-01 DJ Delorie ! * config/sparc/sparc.c (sparc_emit_set_symbolic_const64): If ! we are given conflicting registers, switch to the other one we ! had allocated for us. ! * config/sparc/sparc.md (reload_indi, reload_outdi): Pass op[2] ! as TImode so we know when the "other" register is available. ! 2002-02-01 David O'Brien ! * config/sparc/sol2-sld-64.h: Include sparc/biarch64.h rather than ! sparc/sparc_bi.h. ! 2002-02-01 Janis Johnson ! * cfganal.c (keep_with_call_p): New function. ! (flow_call_edges_add): Prevent splitting a block between a call and ! a single-set instruction that should be kept in the same block. ! 2002-02-01 Craig Rodrigues ! * doc/install.texi (avr): Update outdated URL. ! 2002-01-30 Andrew Haley ! * config/stormy16/stormy16.md (pushqi): New. ! (popqi): New. ! (pushhi): New. ! (pophi): New. ! (movhi): Remove stack operands. ! (movqi): Likewise. ! * config/stormy16/stormy16.h (PREDICATE_CODES): Add ! nonimmediate_nonstack_operand. ! * config/stormy16/stormy16.c (nonimmediate_nonstack_operand): ! New. ! * config/stormy16/stormy16-protos.h (nonimmediate_nonstack_operand) ! New. ! 2002-01-31 Jason Merrill ! * Makefile.in (c-parse.c): Handle .output file. ! * objc/Make-lang.in (objc-parse.c): Likewise. ! 2002-02-01 Alexandre Oliva ! * config/mips/mips.h (ENDIAN_SPEC): Output the endianness flag if ! the -me[lb] option is given. Don't output the default flag ! twice. ! 2002-01-31 Zack Weinberg ! * c-lex.c (yyparse): Call debug_hooks->start_source_file for ! the primary source file; this has not been done yet. ! * c-decl.c (c_expand_body): Reset input_filename from ! DECL_SOURCE_FILE (fndecl) before calling init_function_start. ! 2002-01-31 Kazu Hirata ! * rtlanal.c (subreg_regno_offset): Do not use ! SUBREG_REGNO_OFFSET. ! * system.h: Add SUBREG_REGNO_OFFSET to the GCC poison list. ! * doc/tm.texi (SUBREG_REGNO_OFFSET): Remove. ! 2002-01-31 Joseph S. Myers ! * gccbug.in: Follow GNU Coding Standards for --version. Use GCC ! version rather than GNATS version in --version output. ! 2002-01-31 Richard Sandiford ! * ifcvt.c (noce_process_if_block): Make a copy of the destination ! when copying back from a temporary. ! 2002-01-30 Richard Henderson ! * ifcvt.c (dead_or_predicable): Handling merging when other_bb ! and new_dest are the same. ! 2002-01-30 Richard Henderson ! PR opt/5076 ! * rtl.h (NOTE_INSN_LOOP_END_TOP_COND): New. ! * rtl.c (note_insn_name): Update. ! * emit-rtl.c (remove_unnecessary_notes): Kill it. ! * stmt.c (expand_end_loop): Kill jump opt code. Use LOOP_END_TOP_COND ! to perform loop rotation. ! (expand_exit_loop_top_cond): New. ! * tree.h (expand_exit_loop_top_cond): Declare it. ! * c-semantics.c (genrtl_while_stmt): Use it. ! (genrtl_for_stmt): Likewise. ! 2002-01-30 Alexandre Oliva ! * config/mips/mips.h (PARM_BOUNDARY): Guarantee alignment of ! arguments to 64-bit boundaries on 64-bit ABIs. ! 2002-01-30 Steve Ellcey ! * loop.c (loop_invariant_p): Special case pic_offset_table_rtx. ! 2002-01-31 Joseph S. Myers ! * c-decl.c (grokdeclarator): Handle type being a typedef for an ! invalid type. ! 2002-01-30 David O'Brien ! * config.gcc: Include sparc/biarch64.h rather than sparc/sparc_bi.h. ! * config/sparc/sparc_bi.h: Remove file. ! * config/sparc/biarch64.h: New file (rename of sparc_bi.h). ! 2002-01-30 Richard Henderson ! * sched-deps.c (sched_analyze): Make a call read the frame pointer. ! 2002-01-30 Zack Weinberg ! * expmed.c (emit_store_flag): Call protect_from_queue on op0 and op1. ! 2002-01-30 Jason Merrill ! * dwarf2out.c (dwarf_cfi_name): Add other DWARF 3 codes. ! (output_cfi): Likewise. Disable DW_CFA_GNU_negative_offset_extended. ! (reg_save): Use DW_CFA_offset_extended_sf instead. ! * dwarf2out.c (dwarf2out_finish): Don't abort if there were errors. ! 2002-01-29 Jakub Jelinek ! * cselib.c (cselib_record_sets): Use IF_THEN_ELSE result ! in cselib_lookup. ! 2002-01-29 Aldy Hernandez ! * rs6000.md ("*call_value_local32"): Remove constraints. ! ("*call_value_local64"): Same. ! ("*call_value_indirect_nonlocal_aix32"): Same. ! ("*call_value_nonlocal_aix32"): Same. ! ("*call_value_indirect_nonlocal_aix64"): Same. ! ("*call_value_nonlocal_aix64"): Same. ! ("*call_value_nonlocal_sysv"): Same. ! 2002-01-29 Richard Henderson ! * config/alpha/elf.h (SDB_DEBUGGING_INFO): Undef. ! 2002-01-29 Richard Henderson ! * expr.c (force_operand): Ignore flag_pic for detecting pic ! address loads. ! * regclass.c (init_reg_sets_1): Test fixed_regs not flag_pic ! for determining if PIC_OFFSET_TABLE_REGNUM is call-clobbered. ! * resource.c (mark_target_live_regs): Use regs_invalidated_by_call ! instead of open-coded loop. ! * doc/tm.texi (PIC_OFFSET_TABLE_REGNUM): Clarify that it must ! be fixed when in use. ! 2002-01-29 Richard Henderson ! * sched-int.h (struct deps_reg): Add uses_length, clobbers_length. ! * sched-rgn.c (propagate_deps): Update them. ! * sched-deps.c (sched_analyze_insn): Update them. Flush the ! clobbers list when either gets too long. ! 2002-01-29 Jakub Jelinek ! * config/i386/i386.h (LIMIT_RELOAD_CLASS): Handle LEGACY_REGS ! and INDEX_REGS the same as GENERAL_REGS. ! (SECONDARY_OUTPUT_RELOAD_CLASS): Likewise. ! 2002-01-29 Neil Booth ! * tree.c (build_nonstandard_integer_type): Correct prototype. ! 2002-01-29 Ulrich Weigand ! * config/s390/s390.md (movstrsico, movstrdix_64, ! movstrsix_31): Remove, replace by ... ! (movstrdi_short, movstrsi_short, movstrdi_long, ! movstrsi_long): ... these. New. ! (movstrdi, movstrsi): Adapt. ! (rotldi3, rotlsi3, ashldi3, *ashldi3_31, *ashldi3_64, ! ashlsi3, lshrdi3, *lshrdi3_31, *lshrdi3_64, lshrsi3): ! Remove unnecessary CC clobber. ! (*ashrdi3_cc_31, *ashrdi3_cconly_31, *ashrdi3_cc_64, ! *ashrdi3_cconly_64, *ashrsi3_cc, *ashrsi3_cconly): New. ! (divmoddi4): Don't partially initialize TImode register. ! 2002-01-29 Geoffrey Keating ! * doc/sourcebuild.texi (C Tests): Document gcc.dg/debug directory. ! 2002-01-29 Richard Henderson ! * flow.c (print_rtl_and_abort): Remove. ! (print_rtl_and_abort_fcn): Remove. ! (verify_local_live_at_start): Use dump_bb instead. ! (verify_wide_reg): Likewise. Take a basic_block, not rtl endpoints. ! (verify_wide_reg_1): Return 2 on mode test failure. ! 2002-01-29 Neil Booth ! PR c/3325, c/3326, c/2511, c/3347 ! * c-decl.c (enum_decl_context): Remove BITFIELD. ! (grokdeclarator): Take bitfield width as an input. ! Ensure bitfields are given the correct type. Perform ! bitfield width validation with build_bitfield_integer_type ! rather than waiting for finish_struct. ! (grok_typename, grok_typename_in_parm_context, start_decl, ! push_parmdecl, grokfield, start_function): Update calls to ! grokdeclarator. ! (build_bitfield_integer_type): New function. ! (finish_struct): Move bitfield validation to grokdeclarator ! and build_bitfield_integer_type. ! * tree.c (build_nonstandard_integer_type): New function. ! * tree.h (build_nonstandard_integer_type): New prototype. ! objc: ! * objc-act.c (objc_copy_list): Remove DECL_INITIAL kludge. ! 2002-01-29 Jakub Jelinek ! PR other/1502: ! * cppinit.c (cpp_handle_option): Add ignore argument, if it is zero, ! don't ignore unrecognized -W* options. ! (cpp_handle_options): Pass 1 as last argument to cpp_handle_option. ! * cpplib.h (cpp_handle_option): Adjust prototype. ! * c-decl.c (c_decode_options): Pass 0 as last argument to ! cpp_handle_option. ! PR c/2896: ! * gcc.c (cpp_unique_options): Split from cpp_options. ! (cpp_options): Source cpp_unique_options. ! (default_compilers): Use cpp_unique_options instead of cpp_options ! when used together with cc1_options. ! (static_specs): Add cpp_unique_options. ! * objc/lang-specs.h: Use cpp_unique_options instead of cpp_options ! when used together with cc1_options. ! 2002-01-29 Kazu Hirata ! * config/h8300/h8300-protos.h: Update the prototype of ! output_a_shift. ! * config/h8300/h8300.c (output_a_shift): Remove an unused ! argument 'insn'. Remove redundant code. ! * config/h8300/h8300.md: Adust to the new prototype of ! output_a_shift. ! 2002-01-29 Kazu Hirata ! * config/h8300/h8300-protos.h: Update the prototypes of ! emit_a_rotate and expand_a_rotate. ! * config/h8300/h8300.c (emit_a_rotate): Change the type of the ! first argument to 'enum rtx_code'. ! (expand_a_rotate): Likewise. ! 2002-01-28 Kazu Hirata ! * config/h8300/h8300-protos.h: Update the prototype of ! output_simode_bld. ! * config/h8300/h8300.c (output_simode_bld): Remove an argumen ! 'log2'. ! * config/h8300/h8300.md: Adjust to the new prototype. ! 2002-01-28 Kazu Hirata ! * conifg/h8300/h8300.c (h8300_adjust_insn_length): Remove ! redundant code. ! 2002-01-28 John David Anglin ! * emit-rtl.c (gen_rtx_REG): Check that the PIC_OFFSET_TABLE_REGNUM ! is a fixed register before returning pic_offset_table_rtx. ! * loop.c (scan_loop): Don't hoist insns that set pic_offset_table_rtx ! when PIC_OFFSET_TABLE_REG_CALL_CLOBBERED is defined. ! 2002-01-28 Jason Merrill ! * dwarf2.h: Sync with src version. ! 2002-01-28 Paul Koning ! * builtin-types.def (BT_FN_VOID_CONST_PTR_VAR): Replace ! BT_FN_VOID_PTR_VAR. ! * builtins.def (BUILT_IN_PREFETCH): Change first argument to be const. ! * doc/extend.texi (__builtin_prefetch): Update documentation: ! first argument is now const void ptr. ! 2002-01-28 Kazu Hirata ! * config/h8300/h8300-protos.h: Remove an unused prototype. ! 2002-01-28 Roman Zippel ! * toplev.c (lang_independent_init): Round up identifier size. ! 2002-01-28 Richard Earnshaw ! * config.gcc: Revert previous change. ! 2002-01-28 Andris Pavenis ! * config/i386/djgpp.h: Use STRIP_NAME_ENCODING in macro UNIQUE_SECTION ! 2002-01-28 Richard Earnshaw ! * config.gcc (*-*-netbsdelf*): Set up generic parameters. ! (*-*-netbsd*): Always use collect2. Remove collect2 settings from ! other non-elf netbsd config frags. ! * config/netbsd-aout.h (STARTFILE_SPEC): Don't pull in c++rt0 since ! collect2 will does that. ! * config/netbsd.h (LIBGCC_SPEC): Add white space before -lgcc, so that ! shared-lib frobbing will work. ! 2002-01-28 Kazu Hirata ! * config/h8300/h8300.h: Fix formatting. ! * config/h8300/h8300.md: Likewise. ! 2002-01-28 Loren J. Rittle ! * fixinc/inclhack.def (strict_ansi_not): Add a bypass based on ! the old, removed AAA_standards fix. ! * fixinc/fixincl.x: Rebuilt. ! 2002-01-28 Hans-Peter Nilsson ! * config/cris/cris.h (CRT_CALL_STATIC_FUNCTION): Change to emit ! atexit call in crtbegin, hooked in after call to frame_dummy; ! register EH before registering __fini__start. ! 2002-01-28 Aldy Hernandez ! * config/rs6000/altivec.h: Remove spurious semicolons. ! 2002-01-27 Kazu Hirata ! * config/h8300/h8300.md: Replace dead bit extraction patterns ! with ones that work. ! Sun Jan 27 13:23:40 2002 Richard Kenner ! * emit-rtl.c (get_mem_attrs): Don't default alignment for non-BLKmode ! if not STRICT_ALIGNMENT. ! * rtl.h (MEM_ALIGN): Likewise. ! 2002-01-27 Craig Rodrigues ! * doc/invoke.texi (-fdump-translation-unit): Revert this ! patch: 2001-10-21 Craig Rodrigues ! 2002-01-27 Kazu Hirata ! * config/h8300/h8300.md (define_constants): New. ! (anonymous patterns) Use defined constants appropriately. ! 2002-01-27 Kazu Hirata ! * config/h8300/h8300.c (function_arg): Remove redundant code. ! 2002-01-26 Richard Henderson ! * sched-deps.c (reg_pending_uses_head): New. ! (reg_pending_barrier): Rename from reg_pending_sets_all. ! (find_insn_list): Don't mark inline. ! (find_insn_mem_list): Remove. ! (add_dependence_list, add_dependence_list_and_free): New. ! (flush_pending_lists): Replace only_write param with separate ! for_read and for_write parameters. Update all callers. Use ! add_dependence_list_and_free. ! (sched_analyze_1): Do not add reg dependencies here; just set ! the pending bits. Use add_dependence_list. ! (sched_analyze_2): Likewise. ! (sched_analyze_insn): Replace schedule_barrier_found with ! reg_pending_barrier. Add all dependencies for pending reg ! uses, sets, and clobbers. ! (sched_analyze): Don't add reg dependencies for calls, just ! set pending bits. Use regs_invalidated_by_call. Treat ! sched_before_next_call as a normal list, not a fake insn. ! (init_deps): No funny init for sched_before_next_call. ! (free_deps): Free pending mems lists. Don't zero reg_last. ! (init_deps_global): Init reg_pending_uses. ! (finish_deps_global): Free it. ! * sched-int.h (deps): Make in_post_call_group_p boolean. Update docs. ! (find_insn_mem_list): Remove. ! * sched-rgn.c (concat_INSN_LIST, concat_insn_mem_list): New. ! (propagate_deps): Use them. Zero temp mem lists. ! 2002-01-26 Richard Henderson ! * Makefile.in (CRTSTUFF_CFLAGS): New. ! (crtbegin.o, crtend.o, crtbeginS.o, crtendS.o, crtbeginT.o): Use it. ! * config.gcc (alpha-linux, alpha-freebsd, alpha-netbsd): Use plain ! crtstuff.c instead of alpha assembly version. ! * crtstuff.c (CRT_CALL_STATIC_FUNCTION): Rewrite to assume the ! entire dummy function sequence. Use FORCE_CODE_SECTION_ALIGN ! not FORCE_{INIT,FINI}_SECTION_ALIGN. ! (__do_global_dtors_aux): Mark used. ! (frame_dummy, __do_global_ctors_aux): Mark used. ! (fini_dummy, init_dummy): Remove. ! * config/alpha/crtbegin.asm: Remove file. ! * config/alpha/crtend.asm: Remove file. ! * config/alpha/t-crtbe: Remove file. ! * config/alpha/elf.h (CRT_CALL_STATIC_FUNCTION): New. ! (LINK_EH_SPEC): New. ! * config/cris/cris.h (CRT_CALL_STATIC_FUNCTION): Rewrite old ! FORCE_INIT_SECTION_ALIGN hack. Register __fini_start before ! calling constructors. ! * config/cris/linux.h (CRT_CALL_STATIC_FUNCTION): Undef. ! * config/i386/i386.h (CRT_CALL_STATIC_FUNCTION): New. ! * config/i386/linux.h (CRT_CALL_STATIC_FUNCTION): Replace old ! CRT_END_INIT_DUMMY hack. ! * config/i386/sol2.h (FORCE_CODE_SECTION_ALIGN): Replace ! FORCE_{INIT,FINI}_SECTION_ALIGN. ! * config/mcore/mcore-elf.h (FORCE_CODE_SECTION_ALIGN): Replace ! FORCE_{INIT,FINI}_SECTION_ALIGN. ! * config/s390/s390.h (CRT_CALL_STATIC_FUNCTION): Update for new ! invocation sequence. ! * config/sh/sh.h (CRT_CALL_STATIC_FUNCTION): Likewise. ! * doc/tm.texi (CRT_CALL_STATIC_FUNCTION): Update. ! (FORCE_CODE_SECTION_ALIGN): New. ! 2002-01-26 Richard Henderson ! * config/cris/cris.c (cris_print_operand): Handle 64-bit CONST_INT. ! 2002-01-26 Richard Henderson ! * config/alpha/alpha.c (alpha_sa_mask): Mark RA for unicos here too. ! (alpha_sa_size): Use alpha_sa_mask to compute size of saved regs. ! 2002-01-26 Kazu Hirata ! * config/h8300/h8300.md: Remove bit extraction patterns that ! cannot be triggered. ! Restrict each bit extraction pattern to a variant on which the ! pattern is tested. ! 2002-01-26 Joseph S. Myers ! * doc/include/texinfo.tex: Update to version 2002-01-04.07. ! 2002-01-26 Kazu Hirata ! * config/h8300/h8300.md: Remove bit test patterns that cannot ! be triggered. ! Restrict each bit test pattern to a variant on which the ! pattern is tested. ! 2002-01-26 Kaveh R. Ghazi ! * builtins.c (expand_builtin_strncat): Remove redundant check for ! INTEGER_CST. ! 2002-01-25 David O'Brien ! * config/i386/x86-64.h (DEFAULT_PCC_STRUCT_RETURN): Do not overide ! default setting. ! * config/i386/freebsd64.h (DEFAULT_PCC_STRUCT_RETURN): Do not override ! existing setting. ! 2002-01-25 Geoffrey Keating ! * dbxout.c (dbxout_init): Use assemble_name rather than just ! stripping off the first character. ! (dbxout_source_file): Likewise. ! 2002-01-25 DJ Delorie ! * config/sparc/sparc.c (sparc_emit_set_symbolic_const64): Compare ! using rtx_equal_p, not by comparing pointers. ! 2002-01-25 Steve Ellcey ! * emit-rtl.c (gen_rtx_REG): Always return the same rtx ! for PIC_OFFSET_TABLE_REGNUM. ! (init_emit_once): Use gen_raw_REG to initialize pic_offset_table_rtx. ! 2002-01-25 David O'Brien ! * config.gcc (x86_64-*-freebsd*): New target. ! (x86_64-*-netbsd*,x86_64-*-linux*): Use ${tm_file} rather than its ! value. ! (i[34567]86-*-freebsd*): Don't include svr4.h. ! * config/i386/freebsd64.h: New file. ! 2002-01-25 Douglas B Rupp ! * config/alpha/x-vms (version): Make static. ! * config/alpha/vms.h (MD_FALLBACK_FRAME_STATE_FOR): Fix error ! in previous checkin. ! * Makefile.in (install-headers-cp): New target. ! * config.gcc (alpha-dec-*vms*): Install headers with ! install-headers-cp ! Fri Jan 25 22:42:49 CET 2002 Jan Hubicka ! * unroll.c (unroll_loop): Lower final_value to nonmemory operand; ! avoid it's copies. ! Fri Jan 25 08:26:19 2002 Richard Kenner ! * builtins.c (expand_builtin_strncpy): Use integer_zerop instead ! of compare_tree_int. ! (expand_builtin_strncat): Likewise. ! * c-decl.c (finish_struct): Use tree_low_cst. ! * tree.h (compare_tree_int): Arg is unsigned HOST_WIDE_INT. ! * tree.c (compare_tree_int): Likewise. ! 2002-01-25 Ulrich Weigand ! * reload1.c (eliminate_regs_in_insn): Recognize frame pointer ! adjustments even if they are implemented by more than two insns. ! Fri Jan 25 20:43:56 CET 2002 Jan Hubicka ! * df.c (df_ref_create, df_ref_record_1, df_ref_record): Kill BB arg. ! * df.h (struct ref): Kill B. ! (DF_REF_BB, DF_REF_BBNO): Use BLOCK_FOR_INSN. ! * basic-block.h (PROP_EQUAL_NOTES): New flag. ! * flow.c (propagate_one_insn): Use it. ! (mark_used_regs): Handle NIL. ! 2002-01-25 Geoffrey Keating ! * config/stormy16/stormy16.md (tablejump_pcrel): Use a MEM ! to help folding. ! 2002-01-25 David Edelsohn ! * rs6000.md (prefetch): Make address V4SI mode so that the address ! is restricted to legitimate form for instruction. ! 2002-01-25 Bob Wilson ! * doc/install.texi (xtensa-*-elf): New target. ! (xtensa-*-linux*): New target. ! * doc/contrib.texi: Add myself. ! 2002-01-25 Nick Clifton ! * config/arm/arm.c (arm_hard_regno_mode_ok): Allow any general ! purpose register to hold an SImode (or smaller) value. ! 2002-01-25 Jakub Jelinek ! * unwind-dw2-fde-glibc.c: If inhibit_libc, use __register_frame* ! registry only. ! * crtstuff.c: Likewise. ! 2002-01-25 Kazu Hirata ! * config/h8300/h8300.md (negation patterns): Tighten ! predicates to register_operand. ! 2002-01-24 Aldy Hernandez ! * loop.c (emit_prefetch_instructions): Use the prefetch insn's ! mode, not Pmode. ! * builtins.c (expand_builtin_prefetch): Same. ! 2002-01-24 Alexandre Oliva ! * config/sh/sh.md (sym_label2reg): Make sure all CONSTs have ! modes. ! 2002-01-24 Kazu Hirata ! * config/h8300/h8300.c (print_operand): Remove support for ! operand character 'A'. ! * config/h8300/h8300.md (three anonymous patterns): Replace ! operand character 'A' with either 'T' or 'S'. ! 2002-01-24 Kazu Hirata ! * config/h8300/h8300.c (print_operand): Remove support for ! operand character 'U'. ! 2002-01-24 Andris Pavenis ! * config/i386/t-djgpp: Use NATIVE_SYSTEM_HEADER_DIR. ! 2002-01-24 Nick Clifton ! * config/arm/arm.c (arm_hard_regno_mode_ok): Allow SImode ! values to be assigned to the stack pointer. ! 2002-01-14 Hartmut Penner ! * emit_rtl.c (gen_lowpart_common): Conversion from const_int ! to const_double needs to be done right for big-endian systems. ! 2002-01-24 Jason Merrill ! PR c++/2432 ! * config/sparc/sparc.md (call-jump peepholes): Pass the right insn ! to can_throw_internal. ! 2002-01-23 Richard Henderson ! * fold-const.c (fold): Change UINT_MAX test to check vs precision ! rather than TYPE_MAX_VALUE. Fix indentation and a bogus negation. ! 2002-01-24 Alexandre Oliva ! * config/sh/sh.md (symGOT_load, sym2GOT, sym2GOTOFF): New expands. ! (symGOT2reg): Use them, then set as GOT value as unchanging. ! (symGOTOFF2reg): Set REG_EQUAL note. Use a different pseudo ! as a temporary, if possible. ! (symPLT_label2reg): Enclose (pc) in UNSPEC_PIC. Emit ! sym@PLT-(.LPCS#+2-.) instead of sym@PLT+.-(.LPCS#+2). ! 2002-01-23 Kazu Hirata ! * config/h8300/h8300.md: Fix xorqi and xorqi so that they will ! accept to accept 0x80 as operands[2]. ! 2002-01-24 Alexandre Oliva ! * config/sparc/sparc.md (fix_trunctfdi2): Correct typo in mode. ! 2002-01-23 Richard Henderson ! * config/alpha/alpha.md (call_value_osf_1_er peepholes): Fix typo. ! 2002-01-23 Aldy Hernandez ! * c-parse.in (parmlist_or_identifiers): Add maybe_attribute. ! (parmlist_or_identifiers_1): Verify that only a parmlist follows ! an attribute. ! 2002-01-23 Richard Henderson ! * expr.c (move_by_pieces_1): Extend size before negation. ! * config/m68k/t-m68kbare (MULTILIB_OPTIONS): Add 68040 and 68060. ! (MULTILIB_MATCHES): Remove 68040 and 68060 aliases. ! (MULTILIB_EXCEPTIONS): Ignore 68881 and soft-float for 68040 and 68060. ! * config/m68k/t-m68kelf: Likewise. ! 2002-01-23 Bob Wilson ! * config/xtensa/elf.h: New file. ! * config/xtensa/lib1funcs.asm: New file. ! * config/xtensa/lib2funcs.S: New file. ! * config/xtensa/linux.h: New file. ! * config/xtensa/t-xtensa: New file. ! * config/xtensa/xtensa-config.h: New file. ! * config/xtensa/xtensa-protos.h: New file. ! * config/xtensa/xtensa.c: New file. ! * config/xtensa/xtensa.h: New file. ! * config/xtensa/xtensa.md: New file. ! * config.gcc (xtensa-*-elf*): New target. ! (xtensa-*-linux*): New target. ! * cse.c (canon_hash): Compare rtx pointers instead of register ! numbers. This is required for the Xtensa port. ! * integrate.c (copy_insn_list): Handle case where the static ! chain is in memory and the memory address has to be copied to ! a register. ! * doc/invoke.texi (Option Summary): Add Xtensa options. ! (Xtensa Options): New node. ! * doc/md.texi (Machine Constraints): Add Xtensa machine constraints. ! 2002-01-23 Zack Weinberg ! * diagnostic.c (internal_error): Do ICE suppression only ! when ENABLE_CHECKING is not defined. ! * c-typeck.c (require_complete_type): Return error_mark_node ! if type is error_mark_node. ! 2002-01-23 Janis Johnson ! * toplev.c (process_options): Disable -fprefetch-loop-arrays with ! -Os and issue a warning. ! 2002-01-23 Zack Weinberg ! * doc/fragments.texi, doc/hostconfig.texi: Update to reflect ! current (lack of) need for host configuration by hand. ! * doc/gccint.texi, doc/rtl.texi, doc/tm.texi: Adjust cross ! references. Documentation of some target macros moved from ! hostconfig.texi to tm.texi. ! 2002-01-23 Will Cohen ! * config/arm/arm.h (THUMB_FUNCTION_PROFILER): Define if not currently defined. ! 2002-01-23 Kazu Hirata ! * config/h8300/h8300.md (*andorhi3): Accept 0x8000 as an ! operand[3]. ! 2002-01-23 Jason Merrill ! * tree.c (build1): Don't set TREE_READONLY on INDIRECT_REF. ! * function.c (assign_parms): Don't put args of inline functions ! into registers when not optimizing. ! 2002-01-23 Nick Clifton ! * config/arm/arm.md (UNSPEC_PROLOGUE_USE): New unspec constant. ! (prologue_use): New pattern. ! * config/arm/arm.c (expand_prologue): Use gen_prologue_use in ! preference to gen_rtx_USE. ! (thumb_expand_prologue): Use gen_prologue_use in preference to ! gen_rtx_USE. ! (thumb_expand_epilogue): Use gen_prologue_use in preference to ! gen_rtx_USE. ! 2002-01-23 Hans-Peter Nilsson ! * loop.c [!HAVE_prefetch] (CODE_FOR_prefetch): Define to 0. ! 2002-01-23 Neil Booth ! PR c/3504 ! * doc/extend.texi: Correct documentation of __alignof__. ! 2002-01-22 Zack Weinberg ! * params.h: Rename arguments of DEFPARAM so that it will be ! recognized as a translation keyword. ! 2002-01-22 Aldy Hernandez ! * extend.texi: Document altivec functions. ! Fix N-bit adjectives in X86 builtin documentation. ! 2002-01-22 Alexandre Oliva ! * reload.c (reg_overlap_mentioned_for_reload_p): Handle PLUS and ! auto_inc_dec values. ! 2002-01-22 Richard Earnshaw ! * config/netbsd-aout.h (SWITCH_TAKES_ARG): Remove bogus white space ! after backslash. ! (ASM_DECLARE_OBJECT_NAME): Add missing backslash before final line. ! 2002-01-22 Alexandre Oliva ! * config/i386/freebsd-aout.h (ASM_QUAD): Undefine. ! 2002-01-22 Richard Henderson ! * config/alpha/alpha.c (split_small_symbolic_mem_operand): Use ! copy_insn not copy_rtx. ! 2002-01-23 Alan Modra ! * combine.c (simplify_and_const_int): Don't trunc_int_for_mode ! "nonzero" as that might add "1" bits. Ensure "constop" is ! properly sign extened. ! (force_to_mode): Tweak for sign extended constop. ! 2002-01-22 Richard Henderson ! * config/alpha/alpha.c (some_small_symbolic_mem_operand) Use ! for_each_rtx instead of assuming we're already looking at the MEM. ! (split_small_symbolic_mem_operand): Likewise. ! * config/alpha/alpha.h (PREDICATE_CODES): Update. ! * config/alpha/alpha.md (small symbolic memory splitters): Update. ! 2002-01-22 Richard Henderson ! * config/alpha/alpha.md (divmodsi_internal_er): Generate lituse ! sequence number for the literal. ! (divmoddi_internal_er): Likewise. ! 2002-01-22 Craig Rodrigues ! PR java/4972 ! * aclocal.m4 (AM_ICONV): Put linking flags for libiconv ! in LIBICONV variable. * configure: Regenerated. ! 2002-01-22 Krister Walfridsson ! * dependence.c (build_def_use): Remove array_idx. ! * dwarfout.c (last_filename): Remove. ! (output_compile_unit_die): Remove last_filename. ! 2002-01-22 Roger Sayle ! Richard Henderson ! PR opt/3640 ! * fold-const.c (fold): Optimize unsigned comparisons against ! UINT_MAX (and similar unsigned constants). ! 2002-01-22 Janis Johnson ! * Makefile.in (loop.o): Depend on OPTABS_H. ! * loop.c (emit_prefetch_instructions): Check the prefetch operand ! against the predicate. ! PR target/5379 ! * config/i386/i386.md (prefetch_sse): Specify "p" as a constraint ! for the address operand. ! 2002-01-22 Richard Henderson ! * config/alpha/freebsd.h (FUNCTION_PROFILER): Remove. ! 2002-01-22 Craig Rodrigues ! PR other/5450 ! * config/i386/sysv4.h (CPP_SPEC): Define, and add CPU ! preprocessor flags. ! 2002-01-22 Jason Thorpe ! * config.gcc (x86_64-*-netbsd*): New target. ! * config/i386/netbsd64.h: New file. ! 2002-01-22 Aldy Hernandez ! * regrename.c (kill_value): Fix typo. ! 2002-01-22 Aldy Hernandez ! * doc/tm.texi: Remove STARTING_FRAME_PHASE. ! * config/rs6000/rs6000.h: Same. ! * function.c (instantiate_virtual_regs): Remove ! STARTING_FRAME_PHASE. ! (assign_stack_local_1): Same. ! Calculate frame phase. ! 2002-01-22 Nick Clifton ! * config/arm/arm.h (CONDITIONAL_REGISTER_USAGE): Move 'regno' ! variable declaration to outer scope in order to simplify ! future extensions. ! (HARD_REGNO_MODE_OK): Replace macro body with a with a call to ! arm_hard_regno_mode_ok. ! * config/arm/arm-protos.h: Add a prototype for ! arm_hard_regno_mode_ok. ! * config/arm/arm.c (soft_df_operand): Remove now redundant ! check for DImode values using IP_REGNUM. ! (nonimmediate_soft_df_operand): Remove now redundant check for ! DImode values using IP_REGNUM. ! (arm_hard_regno_mode_ok): New function. New check: make sure ! that DImode values are not stored in IP_REGNUM. ! * config/arm/arm.c (arm_expand_prologue): Replace REG_MAYBE_DEAD ! note with a USE. ! (thumb_expand_prologue): Replace REG_MAYBE_DEAD note with a USE. ! 2002-01-22 Jason Merrill ! * c-semantics.c (genrtl_compound_stmt): Only check nesting ! consistency if this COMPOUND_STMT is scoped. ! 2002-01-22 Kazu Hirata ! * predict.c: Fix formatting. ! * print-tree.c: Likewise. ! * protoize.c: Likewise. ! * real.h: Likewise. ! * rtl.h: Likewise. ! * sbitmap.h: Likewise. ! * scan.c: Likewise. ! * sched-deps.c: Likewise. ! * sched-vis.c: Likewise. ! * sdbout.c: Likewise. ! * sibcall.c: Likewise. ! * ssa.c: Likewise. ! * ssa-ccp.c: Likewise. ! * ssa-dce.c: Likewise. ! * stmt.c: Likewise. ! * stor-layout.c: Likewise. ! * system.h: Likewise. ! Tue Jan 22 06:26:33 2002 Richard Kenner ! * tree.c (int_fits_type_p): If bounds of a subtype are variable, see ! if fits in bounds of base type. ! * dwarf2out.c (equate_decl_number_to_die): Add "int" to decls. ! (loc_descriptor_from_tree, case CALL_EXPR, case ADDR_EXPR): New. ! (add_bound_info, default): If can't find a context, make a ! SAVE_EXPR. ! (dwarf2out_finish): Check for SAVE_EXPR in node->created_for. ! 2002-01-22 Hans-Peter Nilsson ! * c-typeck.c (parser_build_binary_op): If result from ! build_binary_op is ERROR_MARK just return error_mark_node without ! further processing. ! 2002-01-21 Jason Thorpe ! * config/netbsd.h (TARGET_HAS_F_SETLKW): define. ! Split a.out-specific bits into... ! * config/netbsd-aout.h: ...this. ! * config/netbsd-elf.h: New file. ! * config/alpha/netbsd-elf.h: Remove. ! * config/alpha/netbsd.h: Rewrite for a NetBSD/alpha ELF target. ! * config/i386/netbsd-elf.h (LIB_SPEC): Remove. ! (STARTFILE_SPEC): Remove redundant definition. ! (ENDFILE_SPEC): Likewise. ! (LINK_SPEC): Likewise. ! (CPP_SPEC): Likewise. ! (ASM_SPEC): Likewise. ! (LIB_SPEC): Likewise. ! (SWITCH_TAKES_ARG): Likewise. ! (TARGET_MEM_FUNCTIONS): Likewise. ! (CPP_PREDEFINES): Redefine. ! (ASM_FINAL_SPEC): Remove redefinition. ! (ASM_COMMENT_START): Redefine. ! (FUNCTION_PROFILER): Define. ! (TARGET_VERSION): Redefine. ! Comment and formatting cleanup. ! * config/i386/netbsd.h: Include . ! * config/m68k/netbsd.h: Include . ! * config/mips/netbsd.h: Rewrite for NetBSD/mips ELF target, ! big- or little-endian. ! * config/ns32k/netbsd.h: Include . ! * config.gcc (*-*-netbsd*): Add definitions common to all ! NetBSD configs. ! (alpha*-*-netbsd*): Remove redundant xm_defines, gas, and ! gnu_ld definitions. Add netbsd-elf.h to and remove ! alpha/netbsd-elf.h from tm_file. Remove alpha/t-crtfm from ! tmake_file, and don't lose previous tmake_file contents. ! (arm*-*-netbsd*): Add netbsd-aout.h to tm_file. ! (i[34567]86-*-netbsdelf*): Remove redundant xm_defines, gas, and ! gnu_ld definitions. Add netbsd-elf.h to tm_file. ! (mips-dec-netbsd*): Remove as alias for mipsel-*-netbsd*. ! (mipsel-*-netbsd*): Rename this to... ! (mips*-*-netbsd*): ...this. Add elfos.h to tm_file. Add ! mips/little.h to tm_file for mips*el-*. ! (powerpc-*-netbsd*): Remove redundant xm_defines definition. ! (sparc-*-netbsd*): Add netbsd-aout.h to tm_file. ! (vax-*-netbsd*): Add netbsd-aout.h to tm_file. ! 2002-01-21 John David Anglin ! * pa-protos.h (reg_before_reload_operand): New function prototype. ! * pa.c (reg_before_reload_operand): New function implementation. ! * pa.md (decrement_and_branch_until_zero, movb): Use it. Change "!*m" ! contraints to "*m". ! 2002-01-21 Franz Sirl ! * combine.c (simplify_and_const_int): Properly sign-extend CONSTOP. ! 2002-01-21 John David Anglin ! * pa64-hpux.h (MD_EXEC_PREFIX): Set to "/usr/ccs/bin". ! (MD_STARTFILE_PREFIX): Set to "/usr/ccs/lib/pa20_64/". ! (MD_STARTFILE_PREFIX_1): Set to "/opt/langtools/lib/pa20_64/". ! (EH_FRAME_IN_DATA_SECTION): Define and update comment on init sections. ! (ENDFILE_SPEC): Undefine. ! (STARTFILE_SPEC): Redefine for PA. ! 2002-01-21 Franz Sirl ! * config/rs6000/t-ppccomm (CRTSTUFF_T_CFLAGS_S): Re-add -fPIC. ! 2002-01-21 Daniel Jacobowitz ! * config.gcc: Add entries to supported PowerPC --with-cpu ! types. ! 2002-01-21 Jakub Jelinek ! * config/i386/i386.c (ix86_function_arg_regno_p): Never return ! true for 64-bit mode only SSE registers in 32-bit mode. ! 2002-01-21 Kazu Hirata ! * unwind-dw2.c: Fix formatting. ! * unwind-dw2-fde.c: Likewise. ! * unwind-dw2-fde.h: Likewise. ! * unwind-pe.h: Likewise. ! * varasm.c: Likewise. ! * varray.h: Likewise. ! 2002-01-21 Hans-Peter Nilsson ! Remove workaround for register stack overwrite bug in mmix. ! * config/mmix/mmix.c (mmix_target_asm_function_prologue): Remove ! support for TARGET_REG_STACK_FILL_BUG. ! * config/mmix/mmix.h: Remove member has_call_without_parameters. ! (TARGET_MASK_REG_STACK_FILL_BUG, TARGET_REG_STACK_FILL_BUG): ! Delete. ! (TARGET_DEFAULT): Remove TARGET_MASK_REG_STACK_FILL_BUG. ! (TARGET_SWITCHES): Remove -mreg-stack-fill-bug-workaround and ! -mno-reg-stack-fill-bug-workaround. ! * config/mmix/mmix.md ("call", "call_value"): Don't set struct ! machine member has_call_without_parameters. ! * doc/invoke.texi (Option Summary) : Remove ! -mreg-stack-fill-bug-workaround and ! -mno-reg-stack-fill-bug-workaround. ! (MMIX Options): Ditto. ! 2002-01-21 Kazu Hirata ! * config/h8300/h8300.c (function_arg): Replace 0 with NULL_RTX ! as appropriate. ! Remove redundant code. ! 2002-01-21 Joseph S. Myers ! * config/alpha/alpha.h, config/arc/arc.h, config/avr/avr.h, ! config/c4x/c4x.h, config/d30v/d30v.h, config/dsp16xx/dsp16xx.h, ! config/fr30/fr30.h, config/ia64/ia64.h, config/m68hc11/m68hc11.h, ! config/mips/mips.h, config/rs6000/rs6000.h, config/sparc/sparc.h, ! config/stormy16/stormy16.h, config/v850/v850.h: Remove commented ! out target macro definitions and non-target-specific comments ! mostly taken from old versions of the manual. ! 2002-01-20 Kazu Hirata ! * config/h8300/h8300.h: Fix comment formatting. ! * config/ia64/aix.h: Likewise. ! * config/ia64/ia64-protos.h: Likewise. ! * config/ia64/ia64.c: Likewise. ! * config/ia64/ia64.h: Likewise. ! * config/ia64/ia64intrin.h: Likewise. ! * config/ia64/linux.h: Likewise. ! * config/ia64/unwind-aix.c: Likewise. ! * config/ia64/unwind-ia64.c: Likewise. ! 2002-01-20 Kazu Hirata ! * config/h8300/h8300.c: Revise comments about shift code. ! 2002-01-20 Kazu Hirata ! * config/h8300/h8300.c (function_arg): Update a comment. ! 2002-01-20 Kazu Hirata ! * config/h8300/h8300.md: Update the comments at the beginning ! of the file. ! 2002-01-20 Kazu Hirata ! * config/i370/i370.c: Fix comment formatting. ! * config/i370/i370.h: Likewise. ! * config/i370/i370.md: Likewise. ! * config/i370/linux.h: Likewise. ! Sun Jan 20 18:40:14 2002 Richard Kenner ! * reg-stack.c (subst_stack_regs): Properly check for deleted insn. ! * dwarf2out.c (loc_descriptor_from_tree): Add TRUTH_*_EXPR cases. ! (gen_struct_or_union_type_die): Don't SIGSEGV if no TYPE_STUB_DECL ! in incomplete case. ! 2002-01-20 Graham Stott ! * cfgloop.c (flow_loop_preheader_scan): Fix typo. ! 2002-01-19 John David Anglin ! * config.gcc (hppa*64*-*-hpux11*): Fix tmake_file. ! 2002-01-19 Tom Rix ! * config/rs6000/rs6000.md: Fix DF split for 64 bit hosts. ! 2002-01-18 Aldy Hernandez ! * doc/tm.texi (STARTING_FRAME_PHASE): Document. ! * function.c (assign_stack_local_1): Adjust x_frame_offset with ! STARTING_FRAME_PHASE. ! (STARTING_FRAME_PHASE): New. ! (instantiate_virtual_regs): Check saneness of ! STARTING_FRAME_PHASE. ! * config/rs6000/rs6000.h (STARTING_FRAME_PHASE): New. ! 2002-01-19 Alexandre Oliva ! * config/sh/sh.md (movdf_i4 split): Fix alter_subreg calls. ! 2002-01-18 Craig Rodrigues ! * doc/install.texi (hppa*-hp-hpux11): Clarify that GCC 2.95.x cannot ! be used for bootstrapping GCC 3.0. ! 2002-01-18 Kazu Hirata ! * config/h8300/h8300.md: Fix an insn length. ! 2002-01-18 Kazu Hirata ! * bitmap.h: Fix comment formatting. * combine.c: Likewise. ! * cppfiles.c: Likewise. ! * c-pragma.h: Likewise. ! * c-typeck.c: Likewise. ! * df.c: Likewise. * dwarf2out.c: Likewise. ! * function.c: Likewise. ! * gcc.c: Likewise. ! * genattrtab.c: Likewise. ! * gthr-win32.h: Likewise. ! * haifa-sched.c: Likewise. ! * predict.c: Likewise. ! * rtlanal.c: Likewise. ! * rtl.h: Likewise. ! * unwind-dw2-fde.h: Likewise. ! * unwind-pe.h: Likewise. ! * vmsdbgout.c: Likewise. ! Thu Jan 17 15:28:26 2002 Richard Kenner ! * attribs.c (decl_attributes): Clear ATTR_FLAG_TYPE_IN_PLACE ! if type_required and passed decl. ! 2002-01-17 Aldy Hernandez ! * config.gcc (cpu_type): Include altivec.h in powerpc ! extra_headers. ! Same for darwin. ! * config/rs6000/altivec.h: New. ! 2002-01-17 David Edelsohn ! * doc/install.texi (*-ibm-aix*): Update assembler and exception ! handling information. ! * doc/trouble.texi (Interoperation): Add libstdc++ information ! for AIX. ! (Misunderstandings): Add template instantiation and static template ! member information for AIX. ! 2002-01-17 Jason Merrill ! * dbxout.c (dbxout_type): Support const and volatile. ! * except.c (add_partial_entry): Remove backwards compatibility code. ! (end_protect_partials): Likewise. ! 2002-01-17 Jakub Jelinek ! * config/ia64/ia64.md (prologue_use): New. ! * config/ia64/ia64.c (ia64_expand_prologue): Use ! gen_prologue_use instead of gen_rtx_USE. ! (group_barrier_needed_p): Handle CODE_FOR_prologue_use the same way ! as CODE_FOR_pred_rel_mutex. ! (ia64_sched_reorder2): Likewise. ! 2002-01-16 Eric Christopher ! * config/mips/r3900.h: Reformat. ! (SUBTARGET_CPP_SIZE_SPEC): Remove. ! * config/mips/isa3264.h (SUBTARGET_CPP_SIZE_SPEC): Ditto. ! * config/mips/mips.h (ABI_GAS_ASM_SPEC): Default to "". ! (SUBTARGET_CPP_SIZE_SPEC): Rewrite. ! * config/mips/t-elf: Remove mips3 multilib. ! 2002-01-16 H.J. Lu ! * config/mips/linux.h: Include "mips/abi64.h". ! 2002-01-16 H.J. Lu ! * config/mips/t-linux: New. ! * config.gcc: Add mips/t-linux to tmake_file for mips*-*-linux*. ! * config/mips/linux.h: Don't include "gofast.h". ! (INIT_SUBTARGET_OPTABS): Removed. ! 2002-01-16 Kazu Hirata ! * config/h8300/h8300-protos.h: Replace emit_a_shift with ! output_a_shift. ! * config/h8300/h8300.c: Likewise. ! * config/h8300/h8300.md: Likewise. ! 2002-01-16 Kazu Hirata ! * config/h8300/h8300.md (pushqi1_h8300): Use a tab instead of ! spaces after an opcode name. ! (pushqi1_h8300hs): Likewise. ! (pushhi1_h8300hs): Likewise. ! 2002-01-16 Kazu Hirata ! * doc/extend.texi: Replace "option" with "attribute" ! appropriately. ! 2002-01-16 Jakub Jelinek ! * config/alpha/alpha.c (some_small_symbolic_mem_operand): Look into ! (and:DI () (const_int -8)). ! (split_small_symbolic_mem_operand): Split ! (mem (and:DI () (const_int -8)). ! 2002-01-16 Jakub Jelinek ! PR target/5309: ! * config/sparc/sparc.c (ultrasparc_adjust_cost): Handle TYPE_IDIV the ! same way as TYPE_IMUL. ! (ultrasparc_sched_reorder): Likewise. ! * config/sparc/sparc.md (type): Add comment to update ! ultrasparc_sched_reorder when making changes. ! 2002-01-16 Kazu Hirata ! * doc/invoke.texi: Change the dump file name of block ! reordering pass from 28.bbro to 29.bbro. ! Mention -dk option. ! Wed Jan 16 17:54:22 CET 2002 Jan Hubicka ! * i386.md (minsf splitter): Fix pasto. ! 2002-01-16 Nick Clifton ! * config/arm/arm.c (arm_expand_prologue): Add REG_MAYBE_DEAD note ! to frame pointer initialisation instruction. ! (thumb_expand_prologue): Add REG_MAYBE_DEAD note to frame pointer ! initialisation instruction. ! (soft_df_operand): Do not accept the IP register. ! (nonimmediate_soft_df_operand): Do not accept the IP register. ! 2002-01-16 Jakub Jelinek ! PR target/5357: ! * config/sparc/sparc.c (sparc_override_options): Avoid MASK_V9 and ! MASK_V8 being both set. ! 2002-01-16 Ulrich Weigand ! * config/s390/s390.c (s390_emit_prologue): Do not emit USE ! insn for GOT register; add REG_MAYBE_DEAD notes instead. ! config/s390/s390.md (call, call_value): Add GOT register to ! CALL_INSN_FUNCTION_USAGE where needed. ! (call_exp, call_value_exp): New. ! 2002-01-16 Nick Clifton ! * config/arm/arm.c: General formatting tidy up. ! 2002-01-16 Graham Stott ! * calls.c (try_to_integrate): Use "(size_t)" intermediate ! cast and when casting an integer literal to "rtx" pointer. ! (expand_call): Likewise. ! * flow.c (try_pre_increment): Likewise. ! (find_use_as_address): Likewise. ! * integrate.c (expand_iline_function): Likewise. ! * regmove.c (try_auto_increment): Likewise. ! 2002-01-16 Graham Stott ! * sched-rgn.c (passed): Use sbitmap_free. ! (header): Likewise. ! (inner): Likewise. ! (in_queue): Likewise. ! (in_stack): Likewise. ! 2002-01-15 Eric Christopher ! * flow.c (propagate_one_insn): Change to use fatal_insn. ! 2002-01-15 Kazu Hirata ! * expmed.c (extract_fixed_bit_field): Remove unused code. ! * system.h: Poison SLOW_ZERO_EXTEND. ! * doc/tm.texi: Remove. ! * config/1750a/1750a.h (SLOW_ZERO_EXTEND): Remove. ! * config/arm/arm.h: Likewise. ! * config/avr/avr.h: Likewise. ! * config/clipper/clipper.h: Likewise. ! * config/convex/convex.h: Likewise. ! * config/d30v/d30v.h: Likewise. ! * config/dsp16xx/dsp16xx.h: Likewise. ! * config/elxsi/elxsi.h: Likewise. ! * config/fr30/fr30.h: Likewise. ! * config/h8300/h8300.h: Likewise. ! * config/i370/i370.h: Likewise. ! * config/i386/i386.h: Likewise. ! * config/m68k/m68k.h: Likewise. ! * config/mips/mips.h: Likewise. ! * config/ns32k/ns32k.h: Likewise. ! * config/pdp11/pdp11.h: Likewise. ! * config/pj/pj.h: Likewise. ! * config/s390/s390.h: Likewise. ! * config/sh/sh.h: Likewise. ! * config/stormy16/stormy16.h: Likewise. ! * config/v850/v850.h: Likewise. ! * config/vax/vax.h: Likewise. ! * config/we32k/we32k.h: Likewise. ! 2002-01-15 Aldy Hernandez ! * config/rs6000/rs6000.md (altivec_stvx): Add parallels to stvx. ! (altivec_lvsl): Change constraint to b. ! (altivec_lvsr): Same. ! (altivec_lvebx): Same. ! (altivec_lvehx): Same. ! (altivec_lvewx): Same. ! (altivec_lvxl): Same. ! (altivec_lvx): Same. ! (altivec_stvx): Add parallel. ! (altivec_stvxl): Same. ! (altivec_stvehx): Same. ! (altivec_stvebx): Same. ! (altivec_stvebx): Same. ! 2002-01-15 Aldy Hernandez ! * config.gcc: Change altivec.h to altivec-defs.h. ! * config/rs6000/altivec.h: Delete. ! * config/rs6000/altivec-defs.h: Add. ! 2002-01-15 John David Anglin ! * vax.c (vax_rtx_cost): Return MAX_COST for unsupported MULT, UDIV ! and UMOD modes. ! * vax.h (INDEX_TERM_P): Restrict indexing to modes which have a size ! less than or equal to eight bytes. ! * vax.md (andsi3): Remove constraints and change SET destination ! operand type to nonimmediate_operand. ! (andhi3, andqi3): Likewise. Don't clear high order bits of operand 1 ! when it is a CONST_INT. ! 2002-01-15 Jason Merrill ! * c-common.def (FILE_STMT): New code. ! * c-common.c (statement_code_p): It's a statement. ! * c-common.h (stmt_tree_s): Add x_last_filename. ! (FILE_STMT_FILENAME_NODE, FILE_STMT_FILENAME): New macros. ! (last_expr_filename): New macro. ! * c-semantics.c (begin_stmt_tree): Initialize it. ! (add_stmt): If the filename changed, also insert a ! FILE_STMT. ! (expand_stmt): Handle seeing one. ! 2002-01-15 Eric Christopher ! * flow.c (propagate_one_insn): Add error message and print out ! insn for debugging. ! 2002-01-15 Joseph S. Myers ! * system.h (ASM_IDENTIFY_GCC, STDC_VALUE, TRAMPOLINE_ALIGN, ! ASM_IDENTIFY_GCC_AFTER_SOURCE): Poison. ! * config/pdp11/pdp11.h (TRAMPOLINE_ALIGN): Rename to ! TRAMPOLINE_ALIGNMENT. ! * config/arm/arm.h, config/mcore/mcore.h: Likewise. Change value ! to be in bits. ! * config/i386/cygwin.h (PCC_BITFIELDS_TYPE_MATTERS): Rename to ! PCC_BITFIELD_TYPE_MATTERS. ! * config/interix.h (STDC_VALUE): Remove. Use ! STDC_0_IN_SYSTEM_HEADERS. ! * config/darwin.h (ASM_IDENTIFY_GCC), config/dsp16xx/dsp16xx.h ! (ASM_IDENTIFY_GCC), config/stormy16/stormy16.h (ASM_IDENTIFY_GCC, ! ASM_IDENTIFY_GCC_AFTER_SOURCE): Remove. ! 2002-01-15 Craig Rodrigues ! * doc/install.texi (hppa*-hp-hpux11): --enable-threads does ! not work on this platform currently. ! 2002-01-15 Joseph S. Myers ! * c-typeck.c (build_unary_op): Don't wrap msgid argument of ! readonly_warning in _(). ! 2002-01-15 Douglas B Rupp ! * gcc.c (delete_if_ordinary): Backout previous change. ! 2002-01-15 Kazu Hirata ! * config/h8300/h8300.c (print_operand): Remove support for ! unused operand characters. ! * read-rtl.c: Fix formatting. ! * real.c: Likewise. ! * recog.c: Likewise. ! * regclass.c: Likewise. ! * regmove.c: Likewise. ! * reg-stack.c: Likewise. ! * reload1.c: Likewise. ! * rtlanal.c: Likewise. ! 2002-01-15 Kazu Hirata ! * config/i386/i386.c: Fix formatting. ! 2002-01-15 Jakub Jelinek ! * c-typeck.c (process_init_element): Don't save_expr ! COMPOUND_LITERAL_EXPR if just its initializer will be used. ! 2002-01-15 David Edelsohn ! * config/rs6000/rs6000.c (rs6000_output_function_epilogue): Do not ! emit optional traceback table if optimize_size or TARGET_ELF. ! * config/rs6000/rs6000.md (prefetch): New. ! 2002-01-15 Andreas Jaeger ! * config.gcc (x86_64-*-*): Install mmintrin.h and xmmintrin.h. ! 2002-01-15 Kazu Hirata ! * mips-tfile.c: Fix formatting. ! Tue Jan 15 00:56:11 CET 2002 Jan Hubicka ! * unroll.c (final_reg_note_copy): Fix previous commit. ! 2002-01-14 Kazu Hirata ! * config/h8300/h8300-protos.h: Remove the prototype for ! eq_operator. ! * config/h8300/h8300.c (eq_operator): Remove. ! 2002-01-14 Richard Henderson ! * config/i386/i386.md (prefetch): Tidy. ! (prefetch_3dnow): Fix locality operand. ! 2002-01-14 Richard Henderson ! * config/mips/mips.h (HI_AND_FP_REGS): New register class. ! (CLASS_CANNOT_CHANGE_MODE): Disallow HI in little-endian mode. ! 2002-01-14 Hans-Peter Nilsson ! * reload1.c (reload_combine): Pass reg_sum replacement through ! copy_rtx in loop performing multiple changes. ! 2002-01-14 Jakub Jelinek ! * except.c (remove_unreachable_regions): New. ! (free_eh_status): Clear exception_handler_labels. ! (convert_from_eh_region_ranges): Call remove_unreachable_regions. ! (find_exception_handler_labels): Don't add the same label more than ! once. ! (remove_exception_handler_label): Don't die if ! find_exception_handler_labels hasn't been called for the current ! function yet. ! Mon Jan 14 21:26:13 CET 2002 Jan Hubicka ! * toplev.c (rest_of_compilation): Rebuild jump labels after ! gcse. ! 2002-01-14 Joseph S. Myers ! * doc/extend.texi: Move documentation of X86 built-in functions ! here. ! * doc/invoke.texi: From here. ! * doc/sourcebuild.texi: Document location of documentation for ! machine built-in functions. ! 2002-01-13 Christopher Faylor ! * cppfiles.c (TEST_THRESHOLD): New macro. ! (SHOULD_MMAP): Ditto. ! (read_include_file): Use SHOULD_MMAP macro to decide when mmap should ! be used. ! Mon Jan 14 20:23:34 CET 2002 Jan Hubicka ! * unroll.c (final_reg_note_copy): Properly handle ! REG_LABEL ! (unroll_loops): Fix LOOP_CONDITION heuristics. ! 2002-01-14 Geoffrey Keating ! * doc/invoke.texi (Xstormy16 Options): Add xstormy16 option. ! * doc/md.texi (Machine Constraints): Use @minus{} where appropriate. ! Mon Jan 14 20:18:19 CET 2002 Jan Hubicka ! * cfgcleanup.c (try_forward_edges): Avoid infinite loop at infinite ! threaded loop. ! 2002-01-14 Tom Rix ! * config/rs6000/rs6000.md: Fix typo with sradi. ! 2002-01-14 Ulrich Weigand ! * config/s390/s390.md (movstrdix_64, movstrsix_31, movstrdi_64, ! movstrsi_31, clrstrsi_64, clrstrsi_31): Improve RTL templates. ! (clrstrdi, clrstrsi): Adapt callers. ! (extendsidi2, zero_extendsidi2): Remove no-conflict blocks. ! (movti splitter): Never use register 0 as base register. ! 2002-01-14 Hartmut Penner ! * combine.c (simplify_shift_const): Always generate new rtx ! for shift expression instead of reusing given expression. ! Mon Jan 14 07:08:55 2002 Richard Kenner ! * config/alpha/alpha.c (alpha_expand_mov): Don't call ! alpha_legitimize_address unless mode is Pmode. ! 2002-01-13 Geoffrey Keating ! * doc/md.texi (Modifiers): Document the '*' constraint for the ! user. ! * doc/md.texi (Machine Constraints): Add constraints for xstormy16. ! * doc/extend.texi (Function Attributes): 'interrupt' is valid ! for xstormy16 too. ! 2002-01-13 Richard Henderson ! * reload.c (find_reloads): Use a hard reg destination as reload reg ! for an input reload of the source. ! 2002-01-13 Gerald Pfeifer ! * doc/install.texi (Binaries): Make link to ftp.writtenword.com ! more generic. ! Sun Jan 13 07:23:01 2002 Douglas B Rupp ! * Makefile.in (LIB2FUNCS): Split into LIB2FUNCS_1 and LIB2FUNCS_2. ! * mklibgcc.in (LIB2FUNCS): Split into LIB2FUNCS_1 and LIB2FUNCS_2. ! * config/alpha/x-vms (USE_COLLECT2): Set to empty. ! Sun Jan 13 06:55:31 2002 Richard Kenner ! * dwarf2out.c (mem_loc_descriptor, case ADDRESSOF): New case. ! 2002-01-12 Tom Rix ! * config/rs6000/rs6000.c (rs6000_emit_set_long_const): Use ior for ! TARGET_POWERPC64. ! 2002-01-12 Richard Henderson ! * config/i386/i386.c (bdesc_2arg): Mark psadbw MASK_3DNOW_A. ! * doc/invoke.texi: Update Alpha options. ! * doc/invoke.texi: Update i386 built-in function lists. ! Sat Jan 12 17:38:11 CET 2002 Jan Hubicka ! * unroll.c (final_reg_note_copy): Avoid crash on REG_LABEL note ! referencing outside. ! Sat Jan 12 08:54:51 2002 Richard Kenner ! * diagnostic.c (warn_deprecated_use): Rework to lower indentation. ! * expr.c (emit_move_insn_1): Remove warning, use HOST_WIDE_INT for ! offsets, and change line folding. ! * optabs.c (expand_binop): Remove warnings. ! * sdbout.c (sdbout_record_type_name): Constify NAME to avoid warning. ! 2002-01-12 Graham Stott ! * attribs.c (handle_deprecated_attribute): constify WHAT. ! * diagnostic.c (warn_deprecated_use): Add braces, fixes ! dangling else warning and constify WHAT. ! * except.h (struct function, struct inline_remap): Move ! struct tag forward defs before all prototypes. ! (duplicate_eh_regions): Whitespace. ! 2002-01-12 Nick Clifton ! * config/arm/arm.h (ARM_LEGITIMIZE_RELOAD_ADDRESS): Use ! MODE_BASE_REG_CLASS. ! (THUMB_LEGITIMIZE_RELOAD_ADDRESS): Use MODE_BASE_REG_CLASS. ! 2002-01-12 Richard Henderson ! * config/i386/i386.c (override_options): If SSE, enable sse prefetch. ! (ix86_expand_vector_move): New. ! (bdesc_2arg): Remove andps, andnps, orps, xorps. ! (ix86_init_mmx_sse_builtins): Make static. Remove composite builtins. ! Remove old prefetch builtins. Special case the logicals removed above. (ix86_expand_builtin): Likewise. + (safe_vector_operand): Use V4SFmode, not TImode. + (ix86_expand_store_builtin): Remove shuffle arg. Update callers. + (ix86_expand_timode_binop_builtin): New. + * config/i386/i386-protos.h: Update. + * config/i386/i386.h (enum ix86_builtins): Update. + * config/i386/i386.md: Correct predicates on MMX/SSE patterns. + Use ix86_expand_vector_move in vector move expanders. + (movti_internal, movti_rex64): Add xorps alternative. + (sse_clrv4sf): Rename and adjust from sse_clrti. + (prefetch): Don't work so hard. + (prefetch_sse, prefetch_3dnow): Use PREFETCH rtx, not UNSPEC. + * config/i386/xmmintrin.h (__m128): Use V4SFmode. + (_mm_getcsr, _mm_setcsr): Fix typo in builtin name. ! 2002-01-11 Richard Henderson ! * config/i386/mmintrin.h: New file. ! * config/i386/xmmintrin.h: New file. ! * config.gcc (i?86-*-*): Add extra_headers. ! * simplify-rtx.c (simplify_unary_operation): Handle saturating ! truncation codes. ! (simplify_binary_operation): Handle saturating arithmetic codes. ! * config/i386/i386.c (ix86_expand_sse_comi): Return the full result, ! not the lowpart subreg. ! (ix86_expand_builtin): Return a TImode dummy register instead of 0 ! on error. ! * config/i386/i386.md (mmx_clrdi): Override memory attribute. ! 2002-01-12 Michael Hayes ! * conflict.c (conflict_graph_compute): Free regsets when finished. ! * ssa.c (compute_coalesced_reg_partition): Likewise. ! 2002-01-12 Herman A.J. ten Brugge ! * global.c (find_reg): Check for HARD_REGNO_CALL_PART_CLOBBERED ! every where we allocate a register. ! 2002-01-12 Michael Hayes ! * gcse.c (compute_pre_data, pre_gcse): Use sbitmap_free. ! * lcm.c (compute_earliest, compute_farthest): Likewise. ! 2002-01-11 Janis Johnson ! * expr.c (expand_assignment): Fix misuse of MEM_KEEP_ALIAS_SET. ! 2002-01-11 Janis Johnson ! * doc/rtl.texi (Insns): Fix 2 typos. ! 2002-01-11 Joseph S. Myers ! * doc/invoke.texi: Avoid overfull hboxes. Add summary of D30V ! options. Use @table @gcctabopt for MMIX options. Add index ! entries for MMIX options. Start new paragraph with first ! heading of the machine-dependent options. ! 2002-01-11 Craig Rodrigues ! PR other/5299 ! * config/ns32k/ns32k.md: Fix spelling mistake of "than" in comments. ! * combine.c (force_to_mode): Same. ! * reload1.c (clear_reload_reg_in_use): Same. ! 2002-01-11 Nick Clifton ! * config/arm/arm.c (arm_gen_constant): Correct test of 'remainder' ! and 'subtargets'. ! 2002-01-11 Andreas Jaeger , ! Brad Lucier ! * config/i386/i386.h (CPP_CPUCOMMON_SPEC): Remove wrong ! mcpu. ! Fri Jan 11 07:35:12 2002 Douglas B Rupp ! * config/alpha/vms.h: (MD_FALLBACK_FRAME_STATE_FOR): Fix errors. ! Protect with IN_LIBGCC. ! (LINK_EH_SPEC): Add required trailing space. ! Fri Jan 11 09:25:05 2002 Nicola Pero ! * c-tree.h: Move function declarations so that they are listed ! under the filename which contains them. ! (check_identifier, finish_decl_top_level, ! lookup_name_current_level_global, shadow_record_fields): Remove. ! 2002-01-11 Andreas Jaeger ! * config/i386/i386.h (CPP_CPUCOMMON_SPEC): Remove duplicated ! march. ! 2002-01-10 Richard Henderson ! * config/alpha/alpha.c (print_operand): Add 'J'. ! * config/alpha/alpha.md (call_osf_1_er, call_value_osf_1_er): Take a ! new operand with the sequence number for the lituse. When splitting ! the insns, use gen_movdi_er_high_g and generate a sequence number. ! (gen_movdi_er_high_g): Print the sequence number if non-zero. ! 2002-01-10 Aldy Hernandez ! * config/rs6000/rs6000.c (altivec_init_builtins): Add support for ! lvebx, lvehx, lvewx, lvxl, lvx, stvx, stvebx, stvehx, stvewx, ! stvxl. ! (altivec_expand_builtin): Same. ! (altivec_expand_stv_builtin): New. ! * config/rs6000/rs6000.h (rs6000_builtins): Same. ! * config/rs6000/rs6000.md ("altivec_lvebx"): New. ! ("altivec_lvehx"): New. ! ("altivec_lvewx"): New. ! ("altivec_lvxl"): New. ! ("altivec_lvx"): New. ! ("altivec_stvx"): New. ! ("altivec_stvebx"): New. ! ("altivec_stvehx"): New. ! ("altivec_stvewx"): New. ! ("altivec_stvxl"): New. ! 2002-01-10 Richard Henderson ! * cfgrtl.c (delete_insn): Assert insn hasn't been deleted yet. ! * reload1.c (delete_output_reload): Zap spill_reg_store. Take ! care not to delete instructions twice. ! 2002-01-10 Zack Weinberg ! * toplev.c: Don't declare environ (it's not used anywhere). ! * configure.in: Don't check for declaration of environ. ! * config/i386/xm-mingw32.h: Don't #define environ. ! * config.in, configure: Regenerate. ! 2002-01-10 Zack Weinberg ! * configure.in: Set stage1_cflags for powerpc-*-darwin*. ! * configure: Regenerate. ! * config/interix.h: Set DO_GLOBAL_CTORS_BODY and ! DO_GLOBAL_DTORS_BODY here, not in xm-interix.h. ! * config/alpha/vms.h: Set INCLUDE_DEFAULTS here, not in ! alpha/xm-vms.h. ! * config/m68k/t-next: Set OTHER_FIXINCLUDES_DIRS and ! LIMITS_H_TEST here, not in m68k/x-next. ! * config/rs6000/beos.h: Set STANDARD_INCLUDE_DIR and ! SYSTEM_INCLUDE_DIR here, not in rs6000/xm-beos.h. ! * config/x-interix: Don't set RANLIB, RANLIB_TEST, SHELL, ! LIBGCC2_INCLUDES, or SYSTEM_HEADER_DIR. ! * config/alpha/x-vms: Don't set USE_COLLECT2. Add comments. ! * config/i386/x-djgpp: Renamed i386/t-djgpp. ! * config/m88k/x-dolph: Renamed m88k/t-dolph. ! * config/m88k/x-texXD88: Renamed m88k/t-texXD88. ! * config/pa/x-pa-mpeix: Renamed pa/t-mpeix. Update for ! replacement of quadlib.asm with quadlib.c. ! * config/x-interix3, config/xm-interix.h, config/i386/x-beos, ! config/i386/xm-osf1elf.h, config/rs6000/x-darwin, ! config/rs6000/xm-beos.h: Delete file. ! * config.gcc: Update to match above changes. ! 2002-01-10 Kazu Hirata ! * config/h8300/h8300.h: Fix comment typos. ! * config/h8300/h8300.md: Likewise. ! * config/h8300/lib1funcs.asm: Likewise. ! 2002-01-10 Dale Johannesen ! PR optimization/5269 ! * unroll.c (precondition_loop_p): Make *increment be the correct ! sign when n_iterations known, to avoid confusing caller. ! 2002-01-10 Kazu Hirata ! * doc/extend.texi (deprecated): Fix a typo. ! Thu Jan 10 22:35:54 CET 2002 Jan Hubicka ! * basic-block.h (update_br_prob_note): Declare. ! * cfgcleanup.c (try_simplify_condjump): Call update_br_prob_note. ! (try_forward_edges): Care negative frequencies and update note. ! (outgoing_edges_match): Tweek conditional merging heuristics. ! (try_crossjump_to_edge): use update_br_prob_note. ! * cfglayout.c (fixup_reorder_chain): Likewise. ! * cfrtl.c (update_br_prob_note): New. ! * ifcvt.c (dead_or_predicable): Call update_br_prob_note. ! * i386.c (ix86_decompose_address): Return -1 if address contains ! shift. ! (legitimate_address_p): Require ix86_decompose_address to return 1. ! * gcse.c (hash_scan_set): Use CONSTANT_INSN_P. ! (cprop_insn): Likewise. ! 2002-01-10 Kazu Hirata ! * toplev.c: Fix formatting. ! * tree.c: Likewise. ! * tree-dump.c: Likewise. ! * unroll.c: Likewise. ! * unwind-dw2.c: Likewise. ! * unwind-dw2-fde.c: Likewise. ! * unwind-dw2-fde-glibc.c: Likewise. ! * unwind-sjlj.c: Likewise. ! 2002-01-10 Joseph S. Myers ! * doc/invoke.texi: Document PDP-11 options. ! 2002-01-10 Kazu Hirata ! * config/h8300/h8300.h: Fix formatting. ! 2002-01-10 Ira Ruben ! Add __attribute__ ((deprecated)). ! * extend.texi: Document __attribute__ ((deprecated)). ! * invoke.texi: Document -Wno-deprecated-declarations. ! * testsuite/g++.dg/other/deprecated.C: New C++ test. ! * testsuite/gcc.dg/deprecated.c: New C test. ! * attribs.c (enum attrs): Declare handle_deprecated_attribute(). ! (c_common_attribute_table): Add "deprecated" entry. ! (handle_deprecated_attribute): New function. ! * c-decl.c (deprecated_states): New enum. ! deprecated_state: State of "deprecated" handling. ! (start_decl): Set deprecated_state based on attributes. ! (grokdeclarator): Test for deprecated uses, propagate attribute. ! * c-typeck.c (build_component_ref): Test for deprecated fields. ! (build_external_ref): Test for deprecated primaries. ! * diagnostic.c (warn_deprecated_use) New function to issue ! warnings about __attribute__ ((depricated)) references. ! * flags.h (warn_deprecated_decl): Extern declared for ! -W[no-]deprecated-declarations option. ! * print-tree.c (print_node): Show deprecated flag status. ! * toplev.c (warn_deprecated_decl): Defined. ! (W_options): Added "deprecated-declaration". ! * toplev.h (warn_deprecated_use): Extern declared. ! * tree.h (struct tree_common): Define deprecated_flag. ! (TREE_DEPRECATED): New macro to access flag. ! * cp/call.c (build_call): Test for deprecated calls. ! * cp/class.c (add_implicitly_declared_members): Set global ! flag to tell grokdeclarator to not issue deprecated warnings. ! * cp/cp-tree.h: Add extern for adding_implicit_members. ! * cp/decl.c (deprecated_states): New enum. ! (start_decl): Set deprecated_state based on attributes. ! (grokdeclarator): Test for deprecated uses, propagate attribute. ! * cp/lex.c (do_identifier): Test for deprecated primaries. ! * cp/typeck.c (build_component_ref): Test for deprecated fields. ! 2002-01-10 Ira Ruben ! Fix to assign attributes to inline member functions. ! * cp/decl.c (start_method): Handle attrlist. ! 2002-01-10 Kazu Hirata ! * combine.c (expand_field_assignment): Use subreg_lsb(). ! 2002-01-10 David Edelsohn ! * alias.c (find_base_value): Add cases for HIGH, PRE_INC, PRE_DEC, ! POST_INC, POST_DEC, PRE_MODIFY, and POST_MODIFY. ! (find_base_term): Add cases for TRUNCATE, PRE_MODIFY, and POST_MODIFY. ! Recurse for any operand of AND as long as constant is non-zero. ! 2002-01-10 Kazu Hirata ! * config/h8300/h8300.md: Remove constraints from expanders. ! 2002-01-10 Kazu Hirata ! * varasm.c: Fix formatting. ! * varray.c: Likewise. ! * vmsdbgout.c: Likewise. ! * xcoffout.c: Likewise. ! Thu Jan 10 17:19:12 CET 2002 Jan Hubicka ! * cfgcleanup.c (try_forward_edges): Properly initialize nthreaded_edges; ! update edge probabilities to match. ! 2002-01-10 Joseph S. Myers ! * Makefile.in ($(docdir)/gccint.info, gccint.dvi): Add additional ! dependencies. ! * doc/languages.texi, doc/sourcebuild.texi: New files. ! * doc/configfiles.texi: Make a subsubsection. Update. ! * doc/configterms.texi: Add @node. Remove warning that this isn't ! instructions for building GCC. ! * doc/makefile.texi: Make a subsection. ! * doc/gccint.texi: Update. ! Thu Jan 10 16:39:58 CET 2002 Jan Hubicka ! * i386.md (sse_mov?fcc_const0_?): Fix constraints. ! Thu Jan 10 12:45:50 2002 Nicola Pero ! * doc/cpp.texi: Document the __OBJC__ preprocessor macro. ! Thu Jan 10 11:19:18 CET 2002 Jan Hubicka ! * optabs.c (expand_fix): Look for wider integer modes first. ! * i386.md (mov?f): Avoid the fake const double trick for medium ! memory model. ! (min?f*/max?f*): Prohibit memory operands for i387 variant. ! (fop_df_4): Disable for SSE compilation. ! 2002-01-10 Graham Stott ! * dwarf2out.c (indirect_string_alloc, output_indirect_string): ! Move prototype into DWARF2_DEBUGGING_INFO conditional block. ! 2002-01-10 Richard Henderson ! * config/alpha/alpha.md (extendsidi2_fix): Penalize f/f alternative. ! 2002-01-10 Richard Henderson ! * regrename.c (find_oldest_value_reg): Fix typo in mode change check. ! (copyprop_hardreg_forward_1): Likewise. Use mode_change_ok. ! 2002-01-10 Kazu Hirata ! * combine.c (can_combine_p): Fix a comment typo. ! 2002-01-09 Zack Weinberg ! * Makefile.in (s-gencheck, s-options, s-specs): Handle an ! empty list correctly. Change loop index $t to $f for ! consistency with rest of Makefile. ! 2002-01-08 Aldy Hernandez ! * testuite/gcc.dg/altivec-4.c: Add test for mtvscr, dssall, ! mfvscr, dss, lvsl, lvsr, dstt, dstst, dststt, dst. ! * config/rs6000/rs6000.c (altivec_expand_builtin): Add support for ! mtvscr, dssall, mfvscr, dss, lvsl, lvsr, dstt, dst, dstst, dststt. ! (altivec_init_builtins): Same. ! (altivec_expand_unop_builtin): Return NULL_RTX on error. ! (altivec_expand_binop_builtin): Same. ! (altivec_expand_ternop_builtin): Same. ! (bdesc_dst): New. ! * config/rs6000/rs6000.md ("altivec_mtvscr"): New. ! ("altivec_vctuxs"): Fix typo. ! ("altivec_vnmsubfp"): Same. ! ("altivec_dssall"): New. ! ("altivec_mfvscr"): New. ! ("altivec_dss"): New. ! ("altivec_lvsl"): New. ! ("altivec_lvsr"): New. ! ("altivec_dstt"): New. ! ("altivec_dstst"): New. ! ("altivec_dststt"): New. ! ("altivec_dst"): New. ! * config/rs6000/rs6000.h (rs6000_builtins): Add mtvscr, dssall, ! mfvscr, dss, lvsl, lvsr, dstt, dstst, dststt, dst. ! 2002-01-09 Richard Henderson ! * config/alpha/alpha.md (prologue_mcount): Remove lituse_jsr reloc. ! 2002-01-10 Hans-Peter Nilsson ! * config/mmix/mmix.c (mmix_asm_identify_gcc): Remove unused ! function. ! * config/mmix/mmix-protos.h (mmix_asm_identify_gcc): Don't ! prototype. ! * config/mmix/mmix.h (ASM_IDENTIFY_GCC): Remove unused macro. ! 2002-01-09 Kazu Hirata ! * read-rtl.c: Fix formatting. ! * real.c: Likewise. ! * regclass.c: Likewise. ! * regrename.c: Likewise. ! * reg-stack.c: Likewise. ! * reload1.c: Likewise. ! * reload.c: Likewise. ! * rtl.c: Likewise. ! 2002-01-09 Kazu Hirata ! * rtlanal.c (find_reg_fusage): Use XEXP instead of SET_DEST ! to extract items in the expr_list chain. ! 2002-01-09 Richard Henderson ! * config/vax/vax.c (vax_rtx_cost): Never abort. ! * config/vax/vax.h (REAL_ARITHMETIC): Define. ! 2002-01-09 Jan Hubicka ! * gcse.c (cprop_jump): Delete insn if simplified jump is no-op. ! 2002-01-09 Richard Henderson ! * config/arm/arm.c (arm_gen_constant): Use trunc_int_for_mode. ! Unify code from various alternatives. ! 2002-01-09 Richard Henderson ! * regrename.c (copy_value): Ignore the copy if the source register ! is present in the value chain with a narrower mode. ! 2002-01-09 Herman A.J. ten Brugge ! * real.c (c4xtoe, toc4x): Do some special conversion on long doubles ! for the c4x target. Also improve layout. ! 2002-01-09 Richard Henderson ! * config/m32r/m32r.c (move_src_operand): Fix 32-bit int test. ! * config/m32r/m32r.md (and ior xor splitters): Swap operands ! to match insn patterns. ! 2002-01-09 Richard Henderson ! * regrename.c (find_oldest_value_reg): Use gen_rtx_raw_REG. ! (copyprop_hardreg_forward_1): Likewise. ! 2002-01-09 John David Anglin ! * pa.md (decrement_and_branch_until_zero): Change predicate for ! operand 0 from register_operand to reg_or_nonsymb_mem_operand. ! 2002-01-09 Bryce McKinlay ! * ginclude/stddef.h: Define _BSD_WCHAR_T_DEFINED_ if _BSD_WCHAR_T_ ! gets undefined. For Darwin. ! 2002-01-09 Herman A.J. ten Brugge ! * config/c4x/c4x.h: Use PUSH_ARGS and PUSH_ROUNDING for stack passing. ! 2002-01-09 Michael Hayes ! * config/c4x/c4x/md: Remove extraneous constraints from define_splits. ! 2002-01-08 Richard Henderson ! * regrename.c (copy_value): Ignore overlapping copies. ! 2002-01-08 Richard Henderson ! * config/alpha/alpha.c (alpha_split_conditional_move): Call copy_rtx ! as needed to avoid shared structure. ! 2002-01-08 Kazu Hirata ! * config/h8300/h8300.c (get_shift_alg): Fix 15-bit LSHIFTRT on ! H8/300H and H8/S. ! 2002-01-08 Joseph S. Myers ! * doc/tm.texi (EASY_DIV_EXPR, IMPLICIT_FIX_EXPR, ! LONGJMP_RESTORE_FROM_STACK, MAX_INT_TYPE_SIZE): Remove ! documentation of obsolete macros. ! * system.h: Poison these macros. ! * config/1750a/1750a.h, config/a29k/a29k.h, config/alpha/alpha.h, ! config/arc/arc.h, config/arm/arm.h, config/avr/avr.h, ! config/c4x/c4x.h, config/clipper/clipper.h, ! config/convex/convex.h, config/cris/cris.h, config/d30v/d30v.h, ! config/dsp16xx/dsp16xx.h, config/elxsi/elxsi.h, ! config/fr30/fr30.h, config/h8300/h8300.h, config/i370/i370.h, ! config/i386/i386.h, config/i860/i860.h, config/i960/i960.h, ! config/ia64/ia64.h, config/m32r/m32r.h, config/m68hc11/m68hc11.h, ! config/m68k/m68k.h, config/m88k/m88k.h, config/mcore/mcore.h, ! config/mips/mips.h, config/mmix/mmix.h, config/mn10200/mn10200.h, ! config/mn10300/mn10300.h, config/ns32k/ns32k.h, config/pa/pa.h, ! config/pdp11/pdp11.h, config/pj/pj.h, config/romp/romp.h, ! config/rs6000/rs6000.h, config/s390/s390.h, config/sh/sh.h, ! config/sparc/sparc.h, config/stormy16/stormy16.h, ! config/v850/v850.h, config/vax/vax.h, config/we32k/we32k.h: Remove ! definitions and commented out definitions of obsolete macros. ! * config/mips/iris5.h (MAX_WCHAR_TYPE_SIZE): Don't define in terms ! of MAX_INT_TYPE_SIZE. ! 2002-01-08 Ulrich Weigand ! * config/s390/s390.c (s390_preferred_reload_class): Never ! return ADDR_REGS if it isn't a subset of the given class. ! * config/s390/s390.h (REGISTER_MOVE_COST): Penalize not just ! FP_REGS, but all superclasses as well. ! * config/s390/s390.c (s390_function_profiler): Fix thinko. ! * config/s390/s390.md (cmpdi_ccu_mem, cmpsi_ccu_mem, ! cmphi_ccu_mem, cmpqi_ccu_mem): First operand of compare ! must not be a const_int. ! 2002-01-08 Richard Henderson ! * Makefile.in (toplev.o): Depend on options.h. ! (gcc.o): Depend on specs.h. ! 2002-01-08 Jakub Jelinek ! * expr.c (store_expr): Convert VOIDmode constants back to target's ! mode. ! 2002-01-08 Gerald Pfeifer ! * doc/invoke.texi: Markup gcc as @command. Refer to ! http://gcc.gnu.org/onlinedocs/gcc/Contributors.html instead ! of http://gcc.gnu.org/thanks.html. ! 2002-01-08 Dale Johannesen ! * config/rs6000/rs6000.md: Add missing int register ! target case to movdf_low. ! 2002-01-08 Zack Weinberg ! * Makefile.in (cs-tconfig.h): Don't depend on $(CONFIG_H) or ! except.h. Remove commands to define USING_SJLJ_EXCEPTIONS. ! (cppinit.o): Depend on except.h. ! (gencheck.h, options.h, specs.h, s-gencheck, s-options, ! s-specs): New rules. ! * configure.in: Don't AC_DEFINE_UNQUOTED PACKAGE or VERSION. ! Don't create specs.h/options.h/gencheck.h here. Remove ! unnecessary variable settings from last argument of AC_OUTPUT. ! * config.in, configure: Regenerate. ! * intl.c: Hardcode package name as "gcc". ! * cppinit.c: Include except.h. ! (builtin_array): Define __USING_SJLJ_EXCEPTIONS__ when ! appropriate. ! * unwind-dw2.c, unwind-sjlj.c, config/ia64/unwind-ia64.c: ! Use #if(n)def __USING_SJLJ_EXCEPTIONS, not #if ! (!)USING_SJLJ_EXCEPTIONS. ! * doc/cpp.texi: Document __USING_SJLJ_EXCEPTIONS__. ! 2002-01-08 Joseph S. Myers ! * doc/tm.texi (ASM_OUTPUT_EH_REGION_BEG, ASM_OUTPUT_EH_REGION_END, ! ASM_OUTPUT_LABELREF_AS_INT, DOESNT_NEED_UNWINDER, EH_TABLE_LOOKUP, ! OBJC_SELECTORS_WITHOUT_LABELS, OMIT_EH_TABLE): Remove ! documentation of obsolete macros. ! * system.h: Poison these macros. ! * config/d30v/d30v.h, config/ns32k/encore.h, ! config/stormy16/stormy16.h: Remove definitions and commented out ! definitions of obsolete macros. ! Tue Jan 8 15:56:41 2002 Nicola Pero ! * objc/objc-act.c (handle_class_ref): Mark the declaration of ! %sobjc_class_ref_%s as used - to prevent unwanted compiler ! warnings. ! 2002-01-08 Ulrich Weigand ! * config/s390/linux.h (ASM_OUTPUT_LABELREF): Remove. ! * config/s390/s390.c (s390_emit_epilog): Add REG_FRAME_RELATED_EXPR ! to insn adjusting stack/frame pointer. ! * config/s390/s390.md (reload_la_64, reload_la_31): Do not ! accept operands that cause the insn to be non-splittable. ! 2002-01-08 Graham Stott ! * c-tree.h (C_TYPE_FIELDS_READONLY): Uppercase macro parameter. ! (C_TYPE_FIELDS_VOLATILE): Likewise. ! (C_TYPE_BEING_DEFINED): Likewise. ! (C_IS_RESERVED_WORD): Likewise. ! (C_TYPE_VARIABLE_SIZE): Likewise. ! (C_DECL_VARIABLE_SIZE): Likewise. ! (C_MISSING_PROTOTYPE_WARNED): Likewise. ! (C_SET_EXP_ORIGINAL_CODE): Likewise. ! (C_TYPEDEF_EXPLICITLY_SIGNED): Uppercase macro parameter and remove ! parenthesis. ! (C_DECL_ANTICIPATED): Likewise. ! (c_build_type_variant): Add parenthesis. ! 2002-01-08 Joseph S. Myers ! * gcc.c (option_map): Remove --version. ! (process_command): Handle -fversion following the GNU Coding ! Standards. Partially addresses PR other/704. ! 2002-01-08 Graham Stott ! * combine.c (combine_instructions): Fix typo. ! 2002-01-08 Graham Stott ! * debug.h: Use "tree" and "rtx" throughout. ! * debug.c: Likewise. ! 2002-01-08 Nick Clifton ! * dbxout.c (dbxout_symbol_location): If a symbol ref is in the ! constant pool, use the pool's version of the symbol instead. ! 2002-01-07 Richard Henderson ! * regrename.c (find_oldest_value_reg): Ignore the value chain if ! the original register was copied in a mode with a fewer number of ! hard registers than the desired mode. ! (copyprop_hardreg_forward_1): Likewise. ! (debug_value_data): Fix loop test. ! * toplev.c (parse_options_and_default_flags): Reenable ! -fcprop-registers at -O1. ! 2002-01-07 Aldy Hernandez ! * config/rs6000/rs6000.c (bdesc_2arg): Add altivec predicates. ! (altivec_init_builtins): New node v4si_ftype_v16qi_v16qi. ! * config/rs6000/rs6000.h (rs6000_builtins): Add enums for altivec ! predicates. ! * config/rs6000/rs6000.md: Add altivec predicate patterns. ! 2002-01-07 John David Anglin ! * pa.c (FUNC_BEGIN_PROLOG_LABEL, current_function_number): Define. ! (pa_output_function_prologue): Output local label at the beginning of ! the prologue when profiling. ! (hppa_profile_hook): Use the local label rather than the function label. ! * pa.h (PROFILE_BEFORE_PROLOGUE): Define. ! 2002-01-07 Aldy Hernandez ! * config/rs6000/rs6000.c (print_operand): Remove extra space. ! (altivec_expand_unop_builtin): Fix thinko. ! (altivec_expand_binop_builtin): Same. ! (altivec_expand_ternop_builtin): Same. ! (altivec_expand_builtin): Same. ! 2002-01-07 Richard Henderson ! * config/rs6000/xcoff.h (ASM_FILE_START): Reverted to profile_flag. ! 2002-01-07 Jason Merrill ! * unwind-dw2.c (execute_cfa_program): Use < again. ! 2002-01-07 Jakub Jelinek ! * predict.c (combine_predictions_for_insn): Avoid division by zero. ! 2002-01-07 Jakub Jelinek ! * simplify-rtx.c (simplify_plus_minus): Bump n_ops for NOT. ! Don't allow -1 - x -> ~x simplifications in the first pass. ! 2002-01-07 Aldy Hernandez ! * rs6000.c (altivec_expand_ternop_builtin): Don't die on invalid ! arguments. ! (altivec_expand_binop_builtin): Same. ! (altivec_expand_unop_builtin): Same. ! (print_operand): Fix typo. ! (bdesc_1arg): Add vupk* variants. ! * rs6000.h (rs6000_builtins): Add vupk* enums. ! * rs6000.md: Add altivec_vupk* variants. ! 2002-01-07 Joseph S. Myers ! * doc/gcc.texi, doc/gccint.texi, doc/cppinternals.texi, ! doc/install.texi, doc/invoke.texi, doc/rtl.texi: Update copyright ! and last update dates. ! 2002-01-07 Janis Johnson ! * doc/rtl.texi (Flags): Clean up documentation of RTL flags ! 2002-01-07 Marek Michalkiewicz ! * config/avr/avr.c (avr_mcu_types): Add new MCU types. ! * config/avr/avr.h (CPP_SPEC): Likewise. ! (LINK_SPEC): Likewise. ! (CRT_BINUTILS_SPECS): Likewise. ! * config/avr/t-avr (MULTILIB_MATCHES): Likewise. ! * doc/invoke.texi (AVR Options): Document them. ! Mon Jan 7 11:59:34 CET 2002 Jan Hubicka ! * unroll.c (copy_loop_body): Always properly update JUMP_LABEL and ! LABEL_NUSES. ! 2002-01-07 Graham Stott ! * config/i386/i386.h: Update copyright date. ! (HALF_PIC_PTR): Add parenthesis. ! (OPTIMIZATION_OPTIONS): Whitespace, add parenthesis and wrap. ! (CONSTANT_ALIGNMENT): Add parenthesis. ! (DATA_ALIGNMENT): Likewise. ! (LOCAL_ALIGNMENT): Likewise. ! (FUNCTION_ARG_BOUNDARY): Whitespace, add parenthesis and wrap. ! (IS_STACK_MODE): Uppercase macro parameter, add parenthesis and wrap. ! (CONDITIONAL_REGISTER_USAGE): Wrap in do {...} while (0). ! (HARD_REGNO_NREGS): Add paranethesis. ! (VALID_SSE_REG_MODE): Whitespace. ! (VALID_MMX_REG_MODE): Whitespace. ! (VALID_FP_MODE_P): Uppercase macros parameter and whitespace. ! (ix86_hard_regno_mode_ok): Add parenthesis. ! (HARD_REGNO_CALLER_SAVE_MODE): Whitespace. ! (RETURN_IN_MEMORY): Whitespace. ! (N_REG_CLASSES): Add parenthesis. ! (INTEGER_CLASS_P): Add parenthesis and wrap. ! (FLOAT_CLASS_P): Likewise. ! (SSE_CLASS_P): Likewise. ! (MMX_CLASS_P): Likewise. ! (MAYBE_INTEGER_CLASS_P): Likewise. ! (MAYBE_FLOAT_CLASS_P): Likewise. ! (MAYBE_SSE_CLASS_P): Likewise. ! (MAYBE_MMX_CLASS_P): Likewise. ! (Q_CLASS_P): Likewise. ! (GENERAL_REGNO_P): Uppercase macro parameter. ! (REX_INT_REGNO_P): Uppercase macro parameter and wrap. ! (FP_REGNO_P): Likewise. ! (ANY_FP_REGNO_P): Uppercase macro parameter. ! (SSE_REGNO_P): Likewise. ! (SSE_REGNO): Likewise. ! (SSE_REG_P): Likewise. ! (SSE_FLOAT_MODE_P): Likewise. ! (MMX_REGNO_P): Likewise. ! (MMX_REG_P):Likewise. ! (STACK_REG_P): Likewise. ! (NON_STACK_REG_P): Likewise. ! (STACK_TOP_P): Likewise. ! (CONVERT_HARD_REGISTER_TO_SSA_P): Add parenthesis. ! (PREFERRED_RELOAD_CLASS): Add parenthesis and whitespace. ! (SECONDARY_MEMORY_NEEDED): Likewise. ! (SECONDARY_OUTPUT_RELOAD_CLASS): Whitespace. ! (MD_ASM_CLOBBERS): Whitespace and wrap. ! (MUST_PASS_IN_STACK): Whitespace and wrap. ! (RETURN_POPS_ARGS): Add parenthesis. ! (INIT_CUMULATIVE_ARGS): Likewise. ! (FUNCTION_ARG): Likewise. ! (FUNCTION_OK_FOR_SIBCALL): Add parenthesis and whitespace. ! (SETUP_INCOMING_VARARGS): Likewise. ! (BUILD_VA_LIST_TYPE): Add parenthesis. ! (EXPAND_BUILTIN_VA_START): Uppercase macro paremeters and add ! parenthsis. ! (EXPAND_BUILTIN_VA_ARG): Likewise. ! (FUNCTION_PROFILER): Wrap in do { ... } while (0) and add parenthesis. ! (INITIALIZE_TRAMPOLINE): Add parenthesis. ! (INITIAL_ELIMINATION_OFFSET): Likewise. ! (REGNO_OK_FOR_INDEX_P): Add parenthesis. ! (REGNO_OK_FOR_BASE_P): Likewise. ! (REGNO_OK_FOR_SIREG_P): Add parenthesis and wrap. ! (REGNO_OK_FOR_DIREG_P): Likewise. ! (REG_OK_FOR_INDEX_P): Whitespace. ! (REG_OK_FOR_BASE_P): Whitespace. ! (GO_IF_LEGITIMATE_ADDRESS): Wrap in do { ... } while (0) and add ! parenthesis. ! (FIND_BASE_TERM): Fix typo. ! (LEGITIMIZE_ADDRESS): Wrap in { .. } while (0) and add parenthesis. ! (REWRITE_ADDRESS): Uppercase macro parameter and whitespace. ! (SYMBOLIC_CONST; Whitespace. ! (GO_IF_MODE_DEPENDENT_ADDRESS):Wrap in { .. } while (0) and wrap. ! (ENCODE_SECTION_INFO): Whitespace. ! (FINALIZE_PIC): Remove do { ... } while (0). ! (PROMOTE_MODE): Wrap in do { ... } while (0). ! (CONST_COSTS): Whitespace. ! (RTX_COSTS): Add paramethesis, whitespace and wrap. ! (REGISTER_MOVE_COST): Add parenthesis. ! (MEMORY_MOVE_COST): Likewise. ! (EXTRA_CC_MODES): Whitespace. ! (SELECT_CC_MODE): Add parenthesis and whitespace. ! (DBX_REGISTER_NUMBER): Uppercase macro parameter and add parenthsis. ! (ASM_PREFERRED_EH_DATA_FORMAT): Add parenthesis and whitespace. ! (ASM_OUTPUT_LABEL): Add paramethesis. ! (ASM_OUTPUT_REG_PUSH): Add parenthesis and whitespace. ! (ASM_OUTPUT_REG_POP): Likewise. ! (ASM_OUTPUT_ADDR_VEC_ELT): Add parenthesis. ! (ASM_OUTPUT_ADDR_DIFF_ELT): Likewise. ! * config/i386/i386.c: Update copyright. ! (CHECK_STACK_LIMIT): Add parenthesis. ! (AT_BP): Uppercase macro parameter. ! (x86_64_int_parameter_registers): Constify. ! (x86_64_int_return_registers): Likewise. ! (ix86_compare_op0): Use rtx. ! (construct_container): Constify INTREG parameter. ! (function_arg): Use rtx. ! * diagnostic.h: Update copyright date. ! (output_buffer_state): Add parenthesis. ! (output_buffer_format_args): Likewise. ! * combine.c (combine_instructions): Replace XEXP (links, 0) ! with link. ! 2002-01-06 H.J. Lu ! * cfgcleanup.c (thread_jump): Fix 2 typos. ! 2002-01-06 Aldy Hernandez ! * config.gcc: Add support for --enable-altivec. ! 2002-01-06 Craig Rodrigues ! * emit-rtl.c (gen_highpart): Add check for NULL_RTX. ! 2002-01-06 Jakub Jelinek ! * objc/objc-act.c (handle_impent): Use assemble_variable to emit ! __objc_class_name_*. ! 2002-01-06 Craig Rodrigues ! * doc/install.texi (sparcv9-*-solaris2*): Add documentation. ! 2002-01-06 Richard Henderson ! * reorg.c (emit_delay_sequence): Remove death notes, not merely ! nop them out. Increment label reference count for REG_LABEL. ! (fill_slots_from_thread): Frob label reference count around ! delete_related_insns. ! 2002-01-05 Richard Henderson ! * cfgcleanup.c (try_forward_edges): Detect infinite loops while ! jump threading. ! 2002-01-05 Richard Henderson ! * c-decl.c (c_expand_body): Don't call outlining_inline_function. ! * integrate.c (output_inline_function): Likewise. ! * toplev.c (rest_of_compilation): Do it here instead. Move call ! to remove_unnecessary_notes after emitting abstract instance. ! Force an emitted nested function to have its parent emited as well. ! * dwarf2out.c (loc_descriptor_from_tree): Read mode after checking ! for null. ! (rtl_for_decl_location): Do not look at reload data structures ! before reload has run. ! 2002-01-05 Kazu Hirata ! * cse.c: Fix formatting. ! * dwarf2asm.c: Likewise. ! * dwarf2out.c: Likewise. ! * explow.c: Likewise. ! * expmed.c: Likewise. ! * function.c: Likewise. ! * gcov.c: Likewise. ! * gencheck.c: Likewise. ! * genrecog.c: Likewise. ! * ggc-common.c: Likewise. ! * ggc-page.c: Likewise. ! * global.c: Likewise. ! 2002-01-05 Kazu Hirata ! * combine.c: Fix formatting. ! 2002-01-05 Craig Rodrigues ! PR middle-end/1557 ! * config/ia64/ia64.h (RENAME_EXTENDED_BLOCKS): Remove. ! 2002-01-05 David Edelsohn ! * config/rs6000/rs6000.h (TARGET_POWERPC): For IN_LIBGCC2, define ! as 1 for __powerpc64__ as well. ! * config/rs6000/t-aix43 (T_ADAFLAGS): Define. ! * alias.c (find_base_value, PLUS/MINUS): If we found a base, ! return it. ! 2002-01-05 Daniel Berlin ! * lcm.c: Revert change, due to performance regression it causes on ! SPEC because it's slightly more conservative (sigh, I hate ! edge-based LCM). ! Sat Jan 5 11:52:05 CET 2002 Jan Hubicka ! * cfgcleanup.c (try_forward_edges): Allow multiple jump threading. ! 2002-01-05 Neil Booth ! * doc/cppinternals.texi: Update. ! 2002-01-05 Hans-Peter Nilsson ! * doc/invoke.texi (Option Summary) : Document ! -mbranch-predict, -mreg-stack-fill-bug-workaround and their ! negatives. ! (MMIX Options): Ditto. Fix item/itemx typo for -mno-zero-extend. ! * config/mmix/mmix.c (mmix_target_asm_function_prologue): Rework ! kludge for pre-october-14th mmix versions to handle new-found bug ! with PUSHJ/PUSHGO and the register stack. ! * config/mmix/mmix.h (struct machine_function): Rename member ! has_call_value_without_parameters to has_call_without_parameters. ! All referers changed. ! (TARGET_MASK_REG_STACK_FILL_BUG, TARGET_DEFAULT ! TARGET_MASK_BRANCH_PREDICT): New macros. ! (TARGET_SWITCHES): New options -mreg-stack-fill-bug-workaround, ! -mno-reg-stack-fill-bug-workaround. ! * config/mmix/mmix.md ("call"): Set struct machine member ! has_call_without_parameters. ! Sat Jan 5 02:20:22 CET 2002 Jan Hubicka ! * cfgcleanup.c (thread_jump): Fix handling of reversed branches. ! Sat Jan 5 01:35:29 CET 2002 Jan Hubicka ! * cfgcleanup.c: Include tm_p.h ! (mark_effect): Fix handling of hard register; fix handling of SET ! 2002-01-04 Kazu Hirata ! * config/h8300/h8300.md (anonymous patterns): Check that ! operands are registers before using REGNO on them. ! 2002-01-03 Roland McGrath ! * doc/invoke.texi (RS/6000 and PowerPC Options): Add -mcall-gnu. ! 2002-01-04 Jakub Jelinek ! * tree.h (expand_expr_stmt_value): Add maybe_last argument. ! * c-common.h (genrtl_expr_stmt_value): Likewise. ! * stmt.c (expand_expr_stmt): Pass 1 as maybe_last. ! (expand_expr_stmt_value): Add maybe_last argument. ! Don't warn about statement with no effect if it is the last statement ! in expression statement. ! * c-semantics.c (genrtl_expr_stmt): Pass 1 as maybe_last. ! (genrtl_expr_stmt_value): Add maybe_last argument, pass it down to ! expand_expr_stmt_value. ! (expand_stmt) [EXPR_STMT]: Pass 1 as maybe_last to ! genrtl_expr_stmt_value if t is the last EXPR_STMT in its scope. ! * expr.c (expand_expr) [LABELED_BLOCK_EXPR, LOOP_EXPR]: Pass 1 ! as maybe_last to expand_expr_stmt_value. ! Fri Jan 4 11:45:05 2002 Jeffrey A Law (law@redhat.com) ! * c-common.c (c_expand_start_cond): Expect the IF_STMT node to ! be passed in, do not build it. ! (c_begin_if_stmt): New function. ! (c_begin_while_stmt, c_finish_while_stmt_cond): Likewise. ! * c-common.h (c_expand_start_cond): Update prototype. ! (c_begin_if_stmt): Prototype new function. ! (c_begin_while_stmt, c_finish_while_stmt_cond): Likewise. ! * c-parse.in (if_prefix): Use c_begin_if_stmt, ! c_begin_while_stmt and c_finish_while_stmt_cond. ! 2002-01-04 William Cohen ! * config/pa/elf.h (ASM_FILE_START): Reverted to profile_flag. ! * config/pa/pa-linux.h (ASM_FILE_START): Likewise. ! * config/pa/pa64-hpux.h (ASM_FILE_START): Likewise. ! * config/pa/som.h (ASM_FILE_START): Likewise. ! 2002-01-04 Daniel Berlin ! * lcm.c: Include df.h. ! Add available_transfer_function prototype. ! (compute_available): Rework to use iterative dataflow framework. ! (struct bb_info): s/bb_info/lcm_bb_info/g to avoid conflict ! with bb_info in df.h ! (available_transfer_function): New function. ! * Makefile.in (lcm.o): add df.h to dependencies. ! 2002-01-04 Richard Henderson ! * config/alpha/alpha.c (some_operand): Accept HIGH. ! (input_operand): Likewise; accept simple references to globals. ! (alpha_const_ok_for_letter_p): New, outlined from alpha.h. ! (alpha_const_double_ok_for_letter_p): Likewise. ! (alpha_extra_constraint): Likewise. ! (alpha_preferred_reload_class): Likewise. Do not force ! symbolic constants to memory. ! (alpha_legitimate_address_p): Accept simple references ! to small_symbolic_operand. ! (alpha_legitimize_address): New arg scratch. Be prepared to be ! called when no_new_pseudos. Emit simple symbolic references. ! Split integers into low, high, and rest. ! (alpha_expand_mov): Use alpha_legitimize_address. ! (some_small_symbolic_mem_operand): New. ! (split_small_symbolic_mem_operand): New. ! * config/alpha/alpha-protos.h: Update. ! * config/alpha/alpha.h (CONST_OK_FOR_LETTER_P): Out-line. ! (CONST_DOUBLE_OK_FOR_LETTER_P): Likewise. ! (EXTRA_CONSTRAINT): Likewise. ! (PREFERRED_RELOAD_CLASS): Likewise. ! (LEGITIMIZE_ADDRESS): Update for alpha_legitimize_address change. ! (PREDICATE_CODES): Update. ! * config/alpha/alpha.md: New post-reload splitters to convert ! simplfied symbolic operands to the form that references $29. ! (divide expanders): Use emit_move_insn, not gen_movdi_er_high_g. ! (movdi_er_nofix, movdi_er_fix): Accept any symbolic operand. ! 2002-01-03 Richard Henderson ! * local-alloc.c (function_invariant_p): Update commentary. ! 2002-01-04 H.J. Lu ! * toplev.c (rest_of_compilation): Fix a typo when calling ! cleanup_cfg. ! 2002-01-03 Kazu Hirata ! * c-common.c: Fix formatting. ! * diagnostic.c: Likewise. ! * doloop.c: Likewise. ! * dwarf2out.c: Likewise. ! 2002-01-03 Kazu Hirata ! * config/h8300/h8300.c (output_logical_op): Use 'not.w' instead ! of 'neg.w' when xoring with 0x0000ffff or 0xffff0000. ! 2002-01-03 Neil Booth ! * cpperror.c: Update comments and copyright. ! * cppexp.c, cppfiles.c, cpphash.c, cpphash.h, cppinit.c, ! cpplex.c, cpplib.c, cpplib.h, cppmacro.c, cppmain.c: Similarly. ! 2002-01-03 John David Anglin ! * collect2.c (main): Use strcmp when testing for "-shared". ! 2002-01-03 Neil Booth ! * cppmacro.c: Don't include intl.h. Update comments. ! (new_number_token): Allocate enough buffer for 64-bit unsigned ! integers; update prototype. ! * cppmain.c: Update comments. ! 2002-01-03 William Cohen ! * function.h (struct function): Add profile. ! (current_function_profile): New. ! doc/extend.texi: Update documentation. ! * final.c (final_start_function): Use current_function_profile ! instead of profile_flag. ! (profile_after_prologue): Likewise. ! * function.c (expand_function_start): Likewise. ! (expand_function_start): Likewise. ! * config/alpha/alpha.c (direct_call_operand): ! (alpha_does_function_need_gp): Likewise. ! (alpha_expand_prologue): Likewise. ! * config/arm/arm.c (arm_expand_prologue): Likewise. ! thumb_expand_prologue: Likewise. ! * config/d30v/d30v.c (d30v_stack_info): Likewise. ! * config/fr30/fr30.c (MUST_SAVE_RETURN_POINTER): Likewise. ! (fr30_expand_prologue): Likewise. ! * config/i386/cygwin.h (SUBTARGET_PROLOGUE): Likewise. ! * config/i386/i386.c (ix86_osf_output_function_prologue): Likewise. ! * config/i386/i386.h (FINALIZE_PIC): Likewise. ! * config/i386/win32.h (SUBTARGET_PROLOGUE): Likewise. ! * config/i960/i960.c (i960_output_function_prologue): Likewise. ! * config/ia64/ia64.c (ia64_compute_frame_size): Likewise. ! * config/m32r/m32r.c (MUST_SAVE_RETURN_ADDR): Likewise. ! (m32r_expand_prologue): Likewise. ! * config/m88k/m88k.c (m88k_layout_frame): Likewise. ! (m88k_expand_prologue): Likewise. ! * config/m88k/m88k.h (ADJUST_INSN_LENGTH): Likewise. ! * config/mips/mips.c (compute_frame_size): Likewise. ! (mips_expand_prologue): Likewise. ! (mips_can_use_return_insn): Likewise. ! * config/pa/elf.h (ASM_FILE_START): Likewise. ! * config/pa/pa-linux.h (ASM_FILE_START): Likewise. ! * config/pa/pa64-hpux.h (ASM_FILE_START): Likewise. ! * config/pa/som.h (ASM_FILE_START): Likewise. ! * config/romp/romp.c (romp_using_r14): Likewise. ! * config/rs6000/rs6000.c (first_reg_to_save): Likewise. ! (rs6000_stack_info): Likewise. ! * config/rs6000/sysv4.h (ASM_DECLARE_FUNCTION_NAME): Likewise. ! * config/rs6000/xcoff.h (ASM_FILE_START): Likewise. ! * config/v850/v850.c (compute_register_save_size): Likewise. ! 2002-01-03 Jakub Jelinek ! * simplify-rtx.c (simplify_binary_operation) [DIV]: If ! gen_lowpart_common fails, use gen_lowpart_SUBREG. ! 2002-01-03 Turly O'Connor ! * darwin.c (machopic_output_possible_stub_label): Don't generate ! stub routines for pseudo-stubs which we've just defined. ! 2002-01-03 Kazu Hirata ! * builtins.c: Fix formatting. ! * c-typeck.c: Likewise. ! * combine.c: Likewise. ! * expr.c: Likewise. ! * loop.c: Likewise. ! 2002-01-03 Andreas Schwab ! * cppfiles.c (_cpp_pop_file_buffer): Change return type to bool ! and return true if _cpp_push_next_buffer pushed a new include ! file. ! * cpplib.c (_cpp_pop_buffer): Only call obstack_free if ! _cpp_pop_file_buffer did not push a new file. ! * cpphash.h (_cpp_pop_file_buffer): Update declaration. ! 2002-01-02 Eric Christopher ! * final.c (final_scan_insn): Change 0 -> NULL_RTX in ! FIND_REG_INC_NOTE call. Update copyright. ! * loop.c (canonicalize_condition): Ditto. ! * reorg.c (delete_scheduled_jump): Ditto. ! 2002-01-03 Kazu Hirata ! * gcse.c: Fix formatting. ! 2002-01-03 Graham Stott ! * mkconfig.sh: Output to config.h, hconfig.h and tconfig.h ! forward defs for struct tags rtx_def, union_tree, rtvec_def ! also output corresponding typedefs for rtx, tree, and rtvec. ! * system.h: Move forward defs for struct tags rtx_def, union_tree, ! rtvec_def along with corresponding typedefs for rtx, tree, and ! rtvec to config.h, hconfig.h, tconfig.h. ! 2002-01-03 Graham Stott ! * tree.h: Update copyright date. ! (IS_EXPR_CODE_CLASS): Add parenthesis. ! (TREE_SET_CODE): Add whitespace. ! (TREE_CHECK): Add parenthesis. ! (TREE_CLASS_CODE): Add parenthesis and wrap long line. ! (CST_OR_CONSTRUCTOR_CHECK): ! (EXPR_CHECK): Add parenthis, whitespace and wrap line. ! (TREE_SYMBOL_REFERENCED): Whitespace. ! (INT_CST_LT): Likewise. ! (INT_CST_LT_UNSIGNED): Likewise. ! (tree_real_cst): Unwrap comment. ! (tree_string): Likewise. ! (tree_complex): Likewise. ! (IDENTIFIER_POINTER): correct cast. ! (SAVE_EXPR_CONTEXT): Whitespace. ! (EXPR_WFL_FILENAME_NODE): Likewise. ! (EXPR_WFL_FILENAME): Remove parenthesis. ! (DECL_ORIGIN): Add parenthesis. ! (DECL_FROM_INLINE): Use NULL_TREE. ! (build_int_2): Whitespace. ! (build_type_variant): Add parenthesis. ! * gcc/jcf-parse.c: Update copyright date. ! (yyparse): Constify resource_filename. ! 2002-01-03 Graham Stott ! * rtl.h: Update copyright date. ! (RTL_CHECK1): Wrap long line. ! (RTL_CHECK2): Likewise. ! (RTL_CHECKC1): Wrap long line and whitespace. ! (RTL_CHECKC2): Likewise. ! (XWINT): Whitespace. ! (XINT): Likewise. ! (XSTR): Likewise. ! (XEXP): Likewise. ! (XVEC): Likewise. ! (XMODE): Likewise. ! (XBITMAP): Likewise. ! (XTREE): Likewise. ! (XBBDEF): Likewise. ! (XTMPL): Likewise. ! (X0WINT): Likewise. ! (X0INT):Likewise. ! (X0UINT): Likewise. ! (X0STR): Likewise. ! (X0EXP): Likewise. ! (X0VEC): Likewise. ! (X0MODE): Likewise. ! (X0BITMAP): Likewise. ! (X0TREE): Likewise. ! (X0BBDEF): Likewise. ! (X0ADVFLAGS): Likewise. ! (X0CSELIB): Likewise. ! (X0MEMATTR): Likewise. ! (XCWINT): Likewise. ! (XCINT): Likewise. ! (XCUINT): Likewise. ! (XCSTR): Likewise. ! (XCEXP): Likewise. ! (XCVEC): Likewise. ! (XCMODE): Likewise. ! (XCBITMAP): Likewise. ! (XCTREE): Likewise. ! (XCBBDEF): Likewise. ! (XCADVFLAGS): Likewise. ! (XCCSELIB): Likewise. ! (XC2EXP): Likewise. ! (INSN_UID): Likewise. ! (PREV_INSN): Likewise. ! (PATTERN): Likewise. ! (INSN_CODE): Likewise. ! (PUT_REG_NOTE_KIND): Likewise. ! (CODE_LABEL_NUMBER): Likewise. ! (NOTE_SOURCE_FILE): Likewise. ! (NOTE_BLOCK): Likewise. ! (NOTE_EH_HANDLER): Likewise. ! (NOTE_RANGE_INFO): Likewise. ! (NOTE_LIVE_INFO): Likewise. ! (NOTE_BASIC_BLOCK): Likewise. ! (NOTE_EXPECTED_VALUE): Likewise. ! (NOTE_LINE_NUMBER): Likewise. ! (LABEL_NAME): Likewise. ! (LABEL_NUSES): Likewise. ! (LABEL_ALTERNATE_NAME): Likewise. ! (ADDRESSOF_DECL): Likewise. ! (JUMP_LABEL): Likewise. ! (LABEL_NEXTREF): Likewise. ! (REGNO): Likewise. ! (ORIGINAL_REGNO: Likewise. ! (HARD_REGISTER_NUM_P): Add parenthesis. ! (SUBREG_REG): Whitespace. ! (SUBREG_BYTE): Likewise. ! (ASM_OPERANDS_TEMPLATE): Remove parenthesis. ! (ASM_OPERANDS_OUTPUT_CONSTRAINT): Likewise. ! (ASM_OPERANDS_OUTPUT_IDX): Likewise. ! (ASM_OPERANDS_INPUT_VEC): Likewise. ! (ASM_OPERANDS_INPUT_CONSTRAINT_VEC): Likewise. ! (ASM_OPERANDS_INPUT): Likewise. ! (ASM_OPERANDS_INPUT_LENGTH): Likewise. ! (ASM_OPERANDS_INPUT_CONSTRAINT_EXP): Likewise. ! (ASM_OPERANDS_INPUT_CONSTRAINT): Likewise. ! (ASM_OPERANDS_INPUT_MODE): Likewise. ! (ASM_OPERANDS_SOURCE_FILE): Likewise. ! (ASM_OPERANDS_SOURCE_LINE): Likewise. ! (MEM_SET_IN_STRUCT_P): Minor reformat. ! (TRAP_CONDITION): Whitespace. ! (TRAP_CODE): Likewise. ! (COND_EXEC_TEST): Likewise. ! (COND_EXEC_CODE): Likewise. ! (FIND_REG_INC_NOTE): Uppercase macro args and add parenthesis. ! (PHI_NODE_P): Add parenthesis. ! (plus_constant): Whitespace and add parenthesis. ! 2002-01-03 Kazu Hirata ! * config/avr/avr.c: Fix comment typos. ! * config/c4x/c4x.md: Likewise. ! * config/dsp16xx/dsp16xx.h: Likewise. ! * config/dsp16xx/dsp16xx.md: Likewise. ! * config/i386/i386.md: Likewise. ! * config/ia64/ia64.c: Likewise. ! * config/m32r/m32r.h: Likewise. ! * config/m68hc11/m68hc11.md: Likewise. ! * config/mmix/mmix.c: Likewise. ! * config/mn10200/mn10200.c: Likewise. ! * config/romp/romp.c: Likewise. ! * config/sh/sh.c: Likewise. ! * config/stormy16/stormy16.c: Likewise. ! * config/stormy16/stormy16.h: Likewise. ! * config/stormy16/stormy16.md: Likewise. ! 2002-01-03 Graham Stott ! * loop.h: Update copyright date. ! (LOOP_MOVABLES): Fix typo. ! (LOOP_REGS): Likewise. ! (LOOP_IVS): Likewise. ! 2002-01-03 Graham Stott ! * cppinit.c: Update copyright date. ! Don't include output.h ! * Makefile.in: Update copyright date. ! Update dependency. ! 2002-01-02 Craig Rodrigues ! PR c/5226 ! * invoke.texi (-mthreads): Remove from documented RS/6000 options. ! (-pthread) Add to RS/6000 options. ! 2002-01-02 Kazu Hirata ! * except.c: Fix comment typos. ! * loop.c: Likewise. ! * varasm.c: Likewise. ! * doc/tm.texi: Fix a typo. ! 2002-01-02 Jakub Jelinek ! * c-typeck.c (output_init_element): Allow initializing static storage ! duration objects with compound literals. ! 2002-01-02 Richard Henderson ! * objc/objc-act.c (hack_method_prototype): Clear current_function_decl ! after abusing it. ! 2002-01-02 Kaveh R. Ghazi ! * gcc.c (default_compilers): Const-ify. ! * mips-tdump.c (stab_names): Likewise. ! * mips-tfile.c (map_coff_types, map_coff_storage, ! map_coff_sym_type, map_coff_derived_type, stabs_symbol, ! pseudo_ops_t, pseudo_ops): Likewise. ! * protoize.c (default_include): Likewise ! * real.c (GET_REAL, PUT_REAL): Don't cast away const-ness. ! (ezero, ehalf, eone, etwo, e32, elog2, esqrt2, epi): Const-ify. ! Add array size in declaration. ! (endian, emov, eisneg, eisinf, eisnan, eiisnan, eiisneg, emovi, ! emovo, emovz, eiisinf, ecmpm, eaddm, esubm, m16m, edivm, emulm, ! esub, eadd, eadd1, ediv, emul, e53toe, e64toe, e113toe, e24toe, ! etoe113, etoe64, etoe53, etoe24, ecmp, eround, ltoe, ultoe, ! eifrac, euifrac, e24toasc, e53toasc, e64toasc, e113toasc, etoasc, ! efloor, efrexp, eldexp, eremain, dectoe, etodec, ibmtoe, etoibm, ! c4xtoe, etoc4x, uditoe, ditoe, etoudi, etodi, esqrt, etens, ! emtens, make_nan): Const-ify. ! (TFbignan, TFlittlenan, XFbignan, XFlittlenan, DFbignan, ! DFlittlenan, SFbignan, SFlittlenan): Make static and const-ify. ! 2002-01-02 Joseph S. Myers ! * config.gcc (ia64-*-*): Set extra_headers. ! (alpha*-dec-osf*): Likewise. Don't use alpha/t-osf. ! * config/alpha/t-osf: Remove. ! * config/ia64/t-ia64 (EXTRA_HEADERS): Remove. ! 2002-01-02 David Edelsohn ! * config/rs6000/t-aix43: Revert previous change. ! 2002-01-02 Jason Merrill ! * c-decl.c (c_expand_body): Call outlining_inline_function when ! emitting an inline function out of line. ! 2002-01-02 Richard Henderson ! * dwarf2out.c (limbo_die_node): Add created_for member. ! (new_die): New argument created_for. Update all callers. ! (mark_limbo_die_list): New. ! (dwarf2out_init): Register limbo_die_list as a root. ! (dwarf2out_finish): Force insert limbo dies into their function ! context. ! 2002-01-02 Nathan Sidwell ! PR c++/5089 ! * doc/invoke.texi (-Wold-style-cast): Only warn about non-void casts. ! 2002-01-02 Kazu Hirata ! * config/h8300/fixunssfsi.c: Update copyright. ! Fix comment typos. ! Fix formatting. ! * config/h8300/h8300.c: Update copyright. ! Eliminate warnings. ! 2002-01-02 Kazu Hirata ! * config/romp/romp.c: Fix comment formatting. ! * config/romp/romp.h: Likewise. ! * config/romp/romp.md: Likewise. ! * config/s390/s390.c: Likewise. ! * config/stormy16/stormy16.c: Likewise. ! * config/stormy16/stormy16.h: Likewise. ! 2002-01-02 Alexandre Oliva ! * c-common.h (genrtl_expr_stmt_value): Declare. ! * c-semantics.c (genrtl_goto_stmt): Redirect to... ! (genrtl_goto_stmt_value): ... this new function. Pass new ! argument down to expand_expr_stmt_value, taking ! TREE_ADDRESSABLE into account. ! * c-common.c (c_expand_expr): Mark the last EXPR_STMT of a ! STMT_EXPR as addressable, i.e., one whose result we want. ! * expr.c (expand_expr): Don't save expression statement value ! of labeled_blocks or loop_exprs. ! * stmt.c (expand_expr_stmt): Redirect to... ! (expand_expr_stmt_value): ... this new function. Use new ! argument to tell whether to save expression value. ! (expand_end_stmt_expr): Reset last_expr_type and ! last_expr_value if we don't have either. ! * tree-inline.c (declare_return_variable): Mark its use ! statement as addressable. ! * tree.h: Document new use of TREE_ADDRESSABLE. ! (expand_expr_stmt_value): Declare. ! 2002-01-01 Tom Rix ! * config/rs6000/rs6000.c (rs6000_emit_set_long_const): Fix for use by ! rs6000_emit_allocate_stack. ! 2002-01-01 Joseph S. Myers ! * configure.in: Prepend ${srcdir}/config/${cpu_type}/ instead of ! ${srcdir}/ginclude/ to every entry in extra_headers. * configure: Regenerate. ! * ginclude/math-3300.h: Rename to config/m68k/math-3300.h. ! * ginclude/math-68881.h: Rename to config/m68k/math-68881.h. ! * ginclude/ppc-asm.h: Rename to config/rs6000/ppc-asm.h. ! * ginclude/proto.h: Rename to config/convex/proto.h. ! Tue Jan 1 17:12:56 2002 Richard Kenner ! * attribs.c (handle_vector_size_attribute): Use host_integerp ! and tree_int_cst; remove warnings. ! * caller-save.c (insert_restore): Add cast to get rid of warning. ! (insert_save): Likewise. ! * emit-rtl.c (adjust_address_1, offset_address): Likewise. ! * regmove.c (find_matches): Add temporary var to kill a warning. ! 2002-01-01 Douglas B Rupp ! * config/alpha/vms.h (DWARF2_UNWIND_INFO, EH_RETURN_HANDLER_RTX, ! LINK_EH_SPEC, MD_FALLBACK_FRAME_STATE_FOR): Define. ! * config/alpha/t-vms (EXTRA_PARTS): Add vms-dwarf2eh.o ! (vms-dwarf2eh.o): Add Makefile rule. ! * config/alpha/vms-ld.c (main): Handle vms-dwarf2eh.o. ! * config/alpha/vms-dwarf2eh.asm: New file. ! * gcc.c (delete_if_ordinary): Delete all versions. ! 2002-01-01 Hans-Peter Nilsson ! * config/mmix/mmix.md: Update FIXME to not mention ! define_constants. ! (MMIX_rJ_REGNUM): New define_constants constant. ! ("movqi", "movsi", "movdi", "*movdicc_real_foldable", ! "*movdicc_real"): Adjust contraints formatting. ! ("*bCC_foldable"): Add %+ for P in output format and delete FIXME ! for branch prediction. ! ("*bCC", "*bCC_inverted_foldable", "*bCC_inverted"): Add %+ in ! output template. ! ("*call_real", "*call_value_real", "nonlocal_goto_receiver", ! "*nonlocal_goto_receiver_expanded"): Use MMIX_rJ_REGNUM instead of ! number. Delete related FIXMEs. ! * config/mmix/mmix.h (MMIX_INCOMING_RETURN_ADDRESS_REGNUM): Change ! from number to MMIX_rJ_REGNUM. ! (TARGET_MASK_BRANCH_PREDICT): New. ! (TARGET_DEFAULT): Change to TARGET_MASK_BRANCH_PREDICT. ! (TARGET_SWITCHES): Update comment. Correct -mno-toplevel-symbols ! value. Add -mbranch-predict and -mno-branch-predict. ! (TARGET_VERSION): Drop date. ! (ADDITIONAL_REGISTER_NAMES): Use MMIX_rJ_REGNUM, not number. ! * config/mmix/mmix.c (mmix_encode_section_info): Correct condition ! for finding out global symbols. ! (mmix_asm_output_labelref): Revert condition for global symbol. ! (mmix_print_operand): : Emit P for a likely branch. ! (mmix_print_operand_punct_valid_p): A '+' is valid. ! See ChangeLog.6 for earlier changes. diff -Nrc3pad gcc-3.0.4/gcc/ChangeLog.0 gcc-3.1/gcc/ChangeLog.0 *** gcc-3.0.4/gcc/ChangeLog.0 Tue Apr 13 22:45:42 1999 --- gcc-3.1/gcc/ChangeLog.0 Fri Nov 23 02:05:05 2001 *************** Thu Jun 25 15:08:16 1998 Mark Mitchell *** 1185,1191 **** * c-common.c (c_get_alias_set): New function. * c-decl.c (init_decl_processing): Set lang_get_alias_set. ! * expr.c (protect_from_queue): Propogage alias sets. (expand_assignment): Calculate alias set for new MEMs. (expand_expr): Likewise. * function.c (put_var_into_stack): Likewise. --- 1185,1191 ---- * c-common.c (c_get_alias_set): New function. * c-decl.c (init_decl_processing): Set lang_get_alias_set. ! * expr.c (protect_from_queue): Propagate alias sets. (expand_assignment): Calculate alias set for new MEMs. (expand_expr): Likewise. * function.c (put_var_into_stack): Likewise. *************** Thu May 14 16:30:47 1998 Andrew MacLeod *** 3651,3657 **** now that we don't automatically know what the labels might be. Let scan_region() remove unreferenced EH BEGIN/END labels. * integrate.c (get_label_from_map): Put inlined labels onto the ! permanent obstack since we dont know which ones might be exception labels. (save_for_inline_copying): Make new copies of all the handlers. (expand_inline_function): Make new copies of all the handlers. --- 3651,3657 ---- now that we don't automatically know what the labels might be. Let scan_region() remove unreferenced EH BEGIN/END labels. * integrate.c (get_label_from_map): Put inlined labels onto the ! permanent obstack since we don't know which ones might be exception labels. (save_for_inline_copying): Make new copies of all the handlers. (expand_inline_function): Make new copies of all the handlers. *************** Wed Apr 15 01:21:21 1998 Jeffrey A Law *** 5188,5194 **** Tue Apr 14 23:39:13 1998 Richard Henderson ! * alpha.md: Revert Oct 27 change, as it is superceded by Kenner's Nov 8 find_replacement change. Move decls of get_unaligned_address * alpha.h: ... here. --- 5188,5194 ---- Tue Apr 14 23:39:13 1998 Richard Henderson ! * alpha.md: Revert Oct 27 change, as it is superseded by Kenner's Nov 8 find_replacement change. Move decls of get_unaligned_address * alpha.h: ... here. *************** Wed Apr 8 12:51:19 1998 Jeffrey A Law *** 5370,5376 **** * invoke.texi: Add ARC options. ! * gcc.c (proces_command): Improve error message for -o with either -c or -S. * i386/x-cygwin32 (CLIB): Link in advapi32. --- 5370,5376 ---- * invoke.texi: Add ARC options. ! * gcc.c (process_command): Improve error message for -o with either -c or -S. * i386/x-cygwin32 (CLIB): Link in advapi32. diff -Nrc3pad gcc-3.0.4/gcc/ChangeLog.1 gcc-3.1/gcc/ChangeLog.1 *** gcc-3.0.4/gcc/ChangeLog.1 Sat Mar 3 19:30:57 2001 --- gcc-3.1/gcc/ChangeLog.1 Sun Oct 28 20:08:50 2001 *************** Mon May 3 22:38:41 1999 David Edelsohn *** 448,454 **** Mon May 3 14:45:23 1999 Jeffrey A Law (law@cygnus.com) ! * mn10200.md (btst insns): btst does not leave cc0 in a useable state for redundant tst eliminatino. * mn10300.md (btst insns): Likewise. --- 448,454 ---- Mon May 3 14:45:23 1999 Jeffrey A Law (law@cygnus.com) ! * mn10200.md (btst insns): btst does not leave cc0 in a usable state for redundant tst eliminatino. * mn10300.md (btst insns): Likewise. *************** Fri Apr 12 15:00:52 1999 Stan Cox --- 821,827 ---- * regclass.c (record_reg_classes): Do not do the copying preferrencing when source does not die. ! * regclass.c (record_reg_classes): Handle INOUT operands properly. 1999-12-14 Jakub Jelinek *************** Tue Nov 9 14:55:44 1999 Nick Clifton *** 2889,2895 **** (reg_or_cmp_int16_operand): New predicate function. (extend_operand): New predicate function. (m32r_adjust_code): New scheduling function. ! (m32r_adjust_priorty): New scheduling function. (m32r_sched_init): New scheduling function. (m32r_sched_reorder): New scheduling function. (m32r_sched_variable_issue): New scheduling function. --- 2889,2895 ---- (reg_or_cmp_int16_operand): New predicate function. (extend_operand): New predicate function. (m32r_adjust_code): New scheduling function. ! (m32r_adjust_priority): New scheduling function. (m32r_sched_init): New scheduling function. (m32r_sched_reorder): New scheduling function. (m32r_sched_variable_issue): New scheduling function. *************** Wed Nov 3 14:51:59 1999 Mark P. Mitche *** 3199,3207 **** * rtl.h (renumber_insns): New function. (remove_unnecessary_notes): Likewise. * emit-rtl.c (renumber_insns): Define. ! (remove_unncessary_notes): Likewise. * toplev.c (rest_of_compilation): Remove dead code. ! Use renumber_insns and remove_unncessary_notes. * gcse.c (struct null_pointer_info): New type. (get_bitmap_width): New function. --- 3199,3207 ---- * rtl.h (renumber_insns): New function. (remove_unnecessary_notes): Likewise. * emit-rtl.c (renumber_insns): Define. ! (remove_unnecessary_notes): Likewise. * toplev.c (rest_of_compilation): Remove dead code. ! Use renumber_insns and remove_unnecessary_notes. * gcse.c (struct null_pointer_info): New type. (get_bitmap_width): New function. *************** Sun Oct 31 20:42:17 1999 Kaveh R. Ghazi *** 3491,3497 **** Sun Oct 31 13:32:15 CET 1999 Marc Lehmann ! * toplev.c (rest_of_compilation): Seperate the setjmp/vfork clobber warning from -Wuninitialized and put it under -W. * function.c (uninitialized_vars_warning): Warn only when the corresponding flag is set. --- 3491,3497 ---- Sun Oct 31 13:32:15 CET 1999 Marc Lehmann ! * toplev.c (rest_of_compilation): Separate the setjmp/vfork clobber warning from -Wuninitialized and put it under -W. * function.c (uninitialized_vars_warning): Warn only when the corresponding flag is set. *************** Wed Oct 27 15:21:46 1999 Richard Hender *** 4049,4056 **** Wed Oct 27 12:33:40 1999 Mark Mitchell ! * rtl.h (note_stores): Add additional paramter. ! * rtlanal.c (reg_set_p_1): Take additional paramter. (reg_set_last_1): Likewise. (reg_set_p): Adjust call to note_stores. (reg_set_last): Likewise. --- 4049,4056 ---- Wed Oct 27 12:33:40 1999 Mark Mitchell ! * rtl.h (note_stores): Add additional parameter. ! * rtlanal.c (reg_set_p_1): Take additional parameter. (reg_set_last_1): Likewise. (reg_set_p): Adjust call to note_stores. (reg_set_last): Likewise. *************** Wed Oct 27 12:33:40 1999 Mark Mitchell *** 4110,4116 **** (prescan_loop): Adjust calls to note_stores. (strength_reduce): Likewise. (check_dbra_loop): Likewise. ! * regmove.c (flags_set_1): Take additional paramter. (mark_flags_life_zones): Adjust calls to note_stores. * reload1.c (mark_not_eliminable): Take additional parameter. (forget_old_reloads_1): Likewise. --- 4110,4116 ---- (prescan_loop): Adjust calls to note_stores. (strength_reduce): Likewise. (check_dbra_loop): Likewise. ! * regmove.c (flags_set_1): Take additional parameter. (mark_flags_life_zones): Adjust calls to note_stores. * reload1.c (mark_not_eliminable): Take additional parameter. (forget_old_reloads_1): Likewise. *************** Wed Oct 27 12:33:40 1999 Mark Mitchell *** 4124,4130 **** (reload_cse_regs_1): Likewise. (reload_cse_record_set): Adjust calls to reload_cse_invalidate_rtx. (reload_combine): Adjust calls to note_stores. ! * resource.c (update_live_status): Take additional paramter. (mark_target_live_regs): Adjust calls to note_stores. * stupid.c (find_clobbered_regs): Take additional parameter. (stupid_life_analysis): Adjust calls to note_stores. --- 4124,4130 ---- (reload_cse_regs_1): Likewise. (reload_cse_record_set): Adjust calls to reload_cse_invalidate_rtx. (reload_combine): Adjust calls to note_stores. ! * resource.c (update_live_status): Take additional parameter. (mark_target_live_regs): Adjust calls to note_stores. * stupid.c (find_clobbered_regs): Take additional parameter. (stupid_life_analysis): Adjust calls to note_stores. *************** Tue Oct 26 18:23:38 1999 Jan Hubicka < *** 4248,4254 **** (record_reg_life_pat, record_reg_life, find_blocks): Remove. (nan): New. (goto_block_pat, print_blocks, dump_stack_info): Remove. ! (reg_to_stack): Simplified test for existance of fp code. Use flow.c code. Call shorten_branches after cross-jump opt. (check_asm_stack_operands): Renamed from record_asm_reg_life. Return false if the asm doesn't use stack regs. Don't do life --- 4248,4254 ---- (record_reg_life_pat, record_reg_life, find_blocks): Remove. (nan): New. (goto_block_pat, print_blocks, dump_stack_info): Remove. ! (reg_to_stack): Simplified test for existence of fp code. Use flow.c code. Call shorten_branches after cross-jump opt. (check_asm_stack_operands): Renamed from record_asm_reg_life. Return false if the asm doesn't use stack regs. Don't do life *************** Thu Oct 14 01:49:54 1999 Richard Hender *** 5307,5313 **** (NUM_SPECIAL_MODE_PREDS): New. (find_operand): New. (validate_pattern): New argument `insn'. Warn for assignment to ! any predicate accepting non-lvalues. Conditionaly warn for match_operand without a mode. Try much harder to match source and destination modes on a set. * tm.texi (SPECIAL_MODE_PREDICATES): Document. --- 5307,5313 ---- (NUM_SPECIAL_MODE_PREDS): New. (find_operand): New. (validate_pattern): New argument `insn'. Warn for assignment to ! any predicate accepting non-lvalues. Conditionally warn for match_operand without a mode. Try much harder to match source and destination modes on a set. * tm.texi (SPECIAL_MODE_PREDICATES): Document. *************** Sat Oct 9 12:18:16 1999 Richard Hender *** 5729,5735 **** (life_analysis): Give life_analysis_1 PROP flags. (verify_wide_reg_1, verify_wide_reg): New. (verify_local_live_at_start): New. ! (update_life_info): Rewrite to call into propogate_block. (mark_reg): New. (mark_regs_live_at_end): After reload, if epilogue as rtl, always mark stack pointer. Conditionally mark PIC register. --- 5729,5735 ---- (life_analysis): Give life_analysis_1 PROP flags. (verify_wide_reg_1, verify_wide_reg): New. (verify_local_live_at_start): New. ! (update_life_info): Rewrite to call into propagate_block. (mark_reg): New. (mark_regs_live_at_end): After reload, if epilogue as rtl, always mark stack pointer. Conditionally mark PIC register. *************** Thu Oct 7 23:06:50 1999 Richard Hender *** 5833,5839 **** Thu Oct 7 22:53:00 1999 Franz Sirl Mark Mitchell ! * tree.c (make_lang_type_fn): New funtion pointer. (make_lang_type): Call it. * tree.h (make_lang_type): Declare. (make_lang_type_fn): Likewise. --- 5833,5839 ---- Thu Oct 7 22:53:00 1999 Franz Sirl Mark Mitchell ! * tree.c (make_lang_type_fn): New function pointer. (make_lang_type): Call it. * tree.h (make_lang_type): Declare. (make_lang_type_fn): Likewise. *************** Tue Sep 7 00:47:52 1999 Mark Mitchell *** 8622,8628 **** * except.c (mark_func_eh_entry): New function. (mark_eh_node): Mark false_label and rethrow_label. (init_eh): Add more GC roots. ! * function.c (free_after_compilation): Take decl as a paramter. Call free_stmt_status. (mark_function_state): Don't assume x_parm_reg_stack_loc is non-NULL. --- 8622,8628 ---- * except.c (mark_func_eh_entry): New function. (mark_eh_node): Mark false_label and rethrow_label. (init_eh): Add more GC roots. ! * function.c (free_after_compilation): Take decl as a parameter. Call free_stmt_status. (mark_function_state): Don't assume x_parm_reg_stack_loc is non-NULL. *************** Thu Aug 26 19:33:23 1999 Jim Wilson --- 9963,9969 ---- * dwarf2out.c (DWARF2_ASM_LINE_DEBUG_INFO): Add default definition. (debug_dwarf): Add DWARF2_ASM_LINE_DEBUG_INFO support. (dwarf2out_line, dwarf2out_finish): Likewise. ! * tm.texi (DWARF2_ASM_LINE_DEBUG_INFO): Add documentation. Thu Aug 26 16:10:56 1999 Gavin Romig-Koch *************** Wed Aug 25 13:41:47 EDT 1999 Andrew Mac *** 10124,10130 **** prototypes. * toplev.c (rest_of_compilation): Initialize node cache. * Makefile.in (OBJS): Add lists.o to list of object files. ! (lists.o): Add dependancies. Wed Aug 25 17:31:56 1999 Nick Clifton --- 10124,10130 ---- prototypes. * toplev.c (rest_of_compilation): Initialize node cache. * Makefile.in (OBJS): Add lists.o to list of object files. ! (lists.o): Add dependencies. Wed Aug 25 17:31:56 1999 Nick Clifton *************** Fri Aug 20 22:32:17 1999 Michael Hayes *** 10720,10726 **** Thu Aug 19 14:42:38 1999 Mike Stump Mark Mitchell ! * c-common.c (c_get_alias_set): Fix support for poitners and references. Thu Aug 19 11:51:22 EDT 1999 John Wehle (john@feith.com) --- 10720,10726 ---- Thu Aug 19 14:42:38 1999 Mike Stump Mark Mitchell ! * c-common.c (c_get_alias_set): Fix support for pointers and references. Thu Aug 19 11:51:22 EDT 1999 John Wehle (john@feith.com) *************** Tue Aug 10 17:19:02 1999 Jim Wilson ! * except.h (eh_nesting_info): Add new structure defintion. (init_eh_nesting_info, free_eh_nesting_info): Add function prototypes. (reachable_handlers, update_rethrow_references): Add function prototypes. --- 10985,10991 ---- Tue Aug 10 10:47:42 EDT 1999 Andrew MacLeod ! * except.h (eh_nesting_info): Add new structure definition. (init_eh_nesting_info, free_eh_nesting_info): Add function prototypes. (reachable_handlers, update_rethrow_references): Add function prototypes. *************** Tue Aug 10 10:47:42 EDT 1999 Andrew Mac *** 10993,10999 **** a rethrow symbol instead of an integer exception region number. * flow.c (Make_edges): Use new exception nesting routines to determine which handlers are reachable from a CALL or asynchronous insn. ! Dont add an edge for calls with a REG_EH_REGION of -1 to non-local goto receivers. (delete_eh_regions): Update rethrow labels, and don't delete regions which are the target of a rethrow. --- 10993,10999 ---- a rethrow symbol instead of an integer exception region number. * flow.c (Make_edges): Use new exception nesting routines to determine which handlers are reachable from a CALL or asynchronous insn. ! Don't add an edge for calls with a REG_EH_REGION of -1 to non-local goto receivers. (delete_eh_regions): Update rethrow labels, and don't delete regions which are the target of a rethrow. *************** Mon Jul 26 22:52:47 1999 Richard Hender *** 12356,12362 **** * i960.h (BUILD_VA_LIST_TYPE): New. (EXPAND_BUILTIN_VA_START): New. (EXPAND_BUILTIN_VA_ARG): New. ! * i960.md (store_multiple): Use change_address on individul mems. Mon Jul 26 22:43:12 1999 Richard Henderson --- 12356,12362 ---- * i960.h (BUILD_VA_LIST_TYPE): New. (EXPAND_BUILTIN_VA_START): New. (EXPAND_BUILTIN_VA_ARG): New. ! * i960.md (store_multiple): Use change_address on individual mems. Mon Jul 26 22:43:12 1999 Richard Henderson *************** Thu Jul 8 12:55:12 1999 Jeffrey A Law *** 13070,13076 **** Thu Jul 8 18:03:19 1999 J"orn Rennecke ! * reload1.c (choose_reload_regs): Never call remove_adress_replacements when reload_out equals reload_in. Thu Jul 8 16:50:14 1999 Nick Clifton --- 13070,13076 ---- Thu Jul 8 18:03:19 1999 J"orn Rennecke ! * reload1.c (choose_reload_regs): Never call remove_address_replacements when reload_out equals reload_in. Thu Jul 8 16:50:14 1999 Nick Clifton *************** Fri Jun 4 03:20:40 1999 J"orn Rennecke *** 14051,14057 **** * sh.h (PREDICATE_CODES): Remove braf_label_ref_operand. * sh.md (casesi_jump_2): Operand1 is now the inside of a label_ref, and has no predicate. ! The patten has a predicate to guard against invalid substitutions. (dummy_jump): Delete. (casesi): Update use of casesi_jump_2. --- 14051,14057 ---- * sh.h (PREDICATE_CODES): Remove braf_label_ref_operand. * sh.md (casesi_jump_2): Operand1 is now the inside of a label_ref, and has no predicate. ! The pattern has a predicate to guard against invalid substitutions. (dummy_jump): Delete. (casesi): Update use of casesi_jump_2. *************** Thu May 20 10:00:42 1999 Stephen L Mosh *** 14401,14407 **** Thu May 20 09:58:57 1999 Jan Hubicka ! * function.c (assign_stack_local): Align stack slot propertly. (assign_outer_stack_local): Likewise. Thu May 20 10:38:43 1999 Mark Mitchell --- 14401,14407 ---- Thu May 20 09:58:57 1999 Jan Hubicka ! * function.c (assign_stack_local): Align stack slot properly. (assign_outer_stack_local): Likewise. Thu May 20 10:38:43 1999 Mark Mitchell diff -Nrc3pad gcc-3.0.4/gcc/ChangeLog.3 gcc-3.1/gcc/ChangeLog.3 *** gcc-3.0.4/gcc/ChangeLog.3 Sat Mar 3 19:30:58 2001 --- gcc-3.1/gcc/ChangeLog.3 Sun Dec 9 20:13:01 2001 *************** *** 40,46 **** (do_import): Likewise. (do_include_next): Likewise. (gcc_pragmas): Add dependency pragma. ! (do_pragma_dependancy): New pragma. 2000-06-29 Jason Merrill --- 40,46 ---- (do_import): Likewise. (do_include_next): Likewise. (gcc_pragmas): Add dependency pragma. ! (do_pragma_dependency): New pragma. 2000-06-29 Jason Merrill *************** Tue Jun 27 12:14:12 MET DST 2000 Jan Hu *** 220,227 **** (attribute pent_pair): Compute using pent_prefix. (all insn patterns): Set mode,modrm and immediate_length attributes where needed. ! (cmpsi patterns): Compute sizes propertly for test instruction. ! (movsi, movhi patterns): Compute sizes propertly for eax shortcuts. (movstricthi_xor, movstrictqi_xor): New patterns. (andsi/andhi): Use splitters to generate xor instructions. (xorqi_ext_1): New pattern. --- 220,227 ---- (attribute pent_pair): Compute using pent_prefix. (all insn patterns): Set mode,modrm and immediate_length attributes where needed. ! (cmpsi patterns): Compute sizes properly for test instruction. ! (movsi, movhi patterns): Compute sizes properly for eax shortcuts. (movstricthi_xor, movstrictqi_xor): New patterns. (andsi/andhi): Use splitters to generate xor instructions. (xorqi_ext_1): New pattern. *************** Tue Jun 27 12:03:03 MET DST 2000 Jan Hu *** 366,372 **** offset, plus handle DW_CFA_def_cfa_expression. (def_cfa_1): Use to be dwarf2out_def_cfa, only now it uses a cfa_loc record. ! (dwarf2out_def_cfa): Entry point maintained for compatability. (dwarf_cfi_name): Add DW_CFA_def_cfa_expression. (cfa_reg, cfa_offset): Replace with cfa_loc record 'cfa'. (cfa_store_reg, cfa_store_offset): Replace with cfa_loc 'cfa_store'. --- 366,372 ---- offset, plus handle DW_CFA_def_cfa_expression. (def_cfa_1): Use to be dwarf2out_def_cfa, only now it uses a cfa_loc record. ! (dwarf2out_def_cfa): Entry point maintained for compatibility. (dwarf_cfi_name): Add DW_CFA_def_cfa_expression. (cfa_reg, cfa_offset): Replace with cfa_loc record 'cfa'. (cfa_store_reg, cfa_store_offset): Replace with cfa_loc 'cfa_store'. *************** Thu May 25 02:09:10 2000 J"orn Rennecke *** 2667,2673 **** 2000-05-24 Mark Mitchell * calls.c (expand_call): Handle cleanups in tail-recursion ! arguments analagously to cleanups in sibling calls. 2000-05-24 Kaveh R. Ghazi --- 2667,2673 ---- 2000-05-24 Mark Mitchell * calls.c (expand_call): Handle cleanups in tail-recursion ! arguments analogously to cleanups in sibling calls. 2000-05-24 Kaveh R. Ghazi *************** Thu May 25 02:09:10 2000 J"orn Rennecke *** 2684,2690 **** * fold-const.c (extract_muldiv): When constructing a multiplier/divisor, do not expect const_binop to correctly ! determine if overflow has occured, so check explicitly. 2000-05-24 Alexandre Oliva --- 2684,2690 ---- * fold-const.c (extract_muldiv): When constructing a multiplier/divisor, do not expect const_binop to correctly ! determine if overflow has occurred, so check explicitly. 2000-05-24 Alexandre Oliva *************** Wed May 10 21:31:44 2000 Jim Wilson --- 3799,3805 ---- * Makefile.in (libgcc.a, stmp-multilib): Depend on FPBIT and DPBIT. * mklibgcc.in: Rewrite to not use functions. Don't shortcut ! dependencies on FPBIT and DPBIT. 2000-05-10 Nick Clifton *************** Mon May 8 17:16:48 2000 Jim Wilson ! * calls.c (calls_function_1): Propertly handle TREE_LIST expressions; use special_function_p to detect alloca. Fri Apr 28 16:30:33 2000 Marc Espie --- 5186,5192 ---- Sat Apr 29 01:15:27 MET DST 2000 Jan Hubicka ! * calls.c (calls_function_1): Properly handle TREE_LIST expressions; use special_function_p to detect alloca. Fri Apr 28 16:30:33 2000 Marc Espie *************** Sat Apr 22 22:35:38 MET DST 2000 Jan Hu *** 5972,5978 **** (diagnostic.h): #include. (struct output_buffer): Move into diagnostic.h. (get_output_prefix): Rename to output_get_prefix. Export. ! (init_output_buffer): Export. Break out. Ajust intialization. (output_space_left, output_append): Export. (output_newline): Rename to output_add_newline. Export. (output_clear): Nullify additional output_buffer fields. --- 5972,5978 ---- (diagnostic.h): #include. (struct output_buffer): Move into diagnostic.h. (get_output_prefix): Rename to output_get_prefix. Export. ! (init_output_buffer): Export. Break out. Adjust initialization. (output_space_left, output_append): Export. (output_newline): Rename to output_add_newline. Export. (output_clear): Nullify additional output_buffer fields. *************** Sat Apr 22 22:35:38 MET DST 2000 Jan Hu *** 5991,5997 **** (vline_wrapper_message_with_location): Ditto. (v_message_with_decl): Ditto. Adjust call to output_puts and get_output_prefix. ! (default_print_error_function): Adjust buffer intialization. Sat Apr 22 06:45:04 2000 Richard Kenner --- 5991,5997 ---- (vline_wrapper_message_with_location): Ditto. (v_message_with_decl): Ditto. Adjust call to output_puts and get_output_prefix. ! (default_print_error_function): Adjust buffer initialization. Sat Apr 22 06:45:04 2000 Richard Kenner *************** Mon Apr 17 23:35:29 MET DST 2000 Jan Hu *** 6390,6396 **** Mon Apr 17 14:59:36 MET DST 2000 Jan Hubicka ! * cse.c (struct check_depdendence_data): New. (check_dependence): New function. (invalidate): Use check_depdenence. --- 6390,6396 ---- Mon Apr 17 14:59:36 MET DST 2000 Jan Hubicka ! * cse.c (struct check_dependence_data): New. (check_dependence): New function. (invalidate): Use check_depdenence. *************** Mon Apr 17 14:59:36 MET DST 2000 Jan Hu *** 6407,6413 **** message in quotes. Otherwise, IBM's make program treats the '#' as the start of a comment and ignores the remainder of the line. ! * c-lex.c (yylex): Change for EBCDIC, lower case characters preceed upper case. * cccp.c (initialize_char_syntax): Allow for holes in EBCDIC. * cexp.y (initialize_random_junk): Likewise. --- 6407,6413 ---- message in quotes. Otherwise, IBM's make program treats the '#' as the start of a comment and ignores the remainder of the line. ! * c-lex.c (yylex): Change for EBCDIC, lower case characters precede upper case. * cccp.c (initialize_char_syntax): Allow for holes in EBCDIC. * cexp.y (initialize_random_junk): Likewise. *************** Mon Apr 17 14:59:36 MET DST 2000 Jan Hu *** 6420,6426 **** (real_hex_to_f): Use it. * real.c (CHARMASK): New. (etoasc, asctoeg): Use it. ! (asctoeg): EBCDIC lower case characters preceed upper case. * i370.c (mvs_add_label): Change spacing for coding conventions. * i370.h (ASM_OUTPUT_CASE_LABEL): Change to the data CSECT for the --- 6420,6426 ---- (real_hex_to_f): Use it. * real.c (CHARMASK): New. (etoasc, asctoeg): Use it. ! (asctoeg): EBCDIC lower case characters precede upper case. * i370.c (mvs_add_label): Change spacing for coding conventions. * i370.h (ASM_OUTPUT_CASE_LABEL): Change to the data CSECT for the *************** Wed Apr 12 15:54:11 MET DST 2000 Jan Hu *** 6789,6795 **** !HAVE_cmpstrsi, do libcall when gen_strcmpsi fails. * calls.c (expand_call): Do NO_DEFER_POP unconditionally once ! stack is propertly aligned; add sanity checking for aligned stack pointer. (expand_library_call_value_1): Add sanity checking for aligned stack pointer. --- 6789,6795 ---- !HAVE_cmpstrsi, do libcall when gen_strcmpsi fails. * calls.c (expand_call): Do NO_DEFER_POP unconditionally once ! stack is properly aligned; add sanity checking for aligned stack pointer. (expand_library_call_value_1): Add sanity checking for aligned stack pointer. *************** Fri Apr 7 11:50:54 2000 Jim Wilson ! * sh.h (FUNCTION_ARG_PARTIAL_NREGS): Accomodate an unsigned GET_MODE_SIZE. Wed Apr 5 23:17:10 2000 J"orn Rennecke --- 7928,7934 ---- Thu Apr 6 00:30:50 2000 J"orn Rennecke ! * sh.h (FUNCTION_ARG_PARTIAL_NREGS): Accommodate an unsigned GET_MODE_SIZE. Wed Apr 5 23:17:10 2000 J"orn Rennecke *************** Mon Apr 3 00:02:59 2000 Brad Lucier ! * sibcall.c (indentify_call_return_value): Find last call in the chain; Allow stack adjustment after function call. * regmove.c (struct csa_memlist): Make mem field rtx *. --- 8772,8778 ---- Tue Mar 28 08:29:46 2000 Jan Hubicka ! * sibcall.c (identify_call_return_value): Find last call in the chain; Allow stack adjustment after function call. * regmove.c (struct csa_memlist): Make mem field rtx *. *************** Sun Mar 19 13:27:30 2000 Hans-Peter Nil *** 9649,9655 **** 2000-03-18 Mark Mitchell ! * emit-rtl.c (remove_unncessary_notes): Check that all NOTE_INSN_BLOCK_BEG and NOTE_INSN_BLOCK_END notes have an associated NOTE_BLOCK. * function.h (identify_blocks): Update comments. --- 9649,9655 ---- 2000-03-18 Mark Mitchell ! * emit-rtl.c (remove_unnecessary_notes): Check that all NOTE_INSN_BLOCK_BEG and NOTE_INSN_BLOCK_END notes have an associated NOTE_BLOCK. * function.h (identify_blocks): Update comments. *************** Fri Mar 17 08:09:14 2000 Richard Kenner *** 9830,9836 **** (add_pure_or_virtual_attribute, gen_enumeration_type_die): Likewise. * dwarfout.c: Similar changes to dwarf2out.c. * expr.c (expand_expr, case ARRAY_REF): Remove redundant code. ! * genoutput.c (n_occurences): Return -1 for null string. (strip_whitespace): Accept null string and make into function. (scan_operands): Reflect above changes. * sdbout.c (plain_type_1): Use host_integerp and tree_low_cst. --- 9830,9836 ---- (add_pure_or_virtual_attribute, gen_enumeration_type_die): Likewise. * dwarfout.c: Similar changes to dwarf2out.c. * expr.c (expand_expr, case ARRAY_REF): Remove redundant code. ! * genoutput.c (n_occurrences): Return -1 for null string. (strip_whitespace): Accept null string and make into function. (scan_operands): Reflect above changes. * sdbout.c (plain_type_1): Use host_integerp and tree_low_cst. *************** Sat Mar 4 11:32:30 2000 Richard Kenner *** 11942,11948 **** * stmt.c (is_body_block): Move... * dwarfout.c, dwarf2out.c: ...from here. * tree.h: Declare it. ! * emit-rtl.c (remove_unncessary_notes): Don't remove the body block. * final.c (final_start_function): Do call remove_unnecessary_notes when scheduling. --- 11942,11948 ---- * stmt.c (is_body_block): Move... * dwarfout.c, dwarf2out.c: ...from here. * tree.h: Declare it. ! * emit-rtl.c (remove_unnecessary_notes): Don't remove the body block. * final.c (final_start_function): Do call remove_unnecessary_notes when scheduling. *************** Sat Mar 4 11:32:30 2000 Richard Kenner *** 11990,11996 **** remove_unnecessary_notes. (debug_ignore_block): New fn. * toplev.h: Declare it. ! * emit-rtl.c (remove_unncessary_notes): Call it. * dwarf2out.c (dwarf2out_ignore_block): New fn. * dwarf2out.h: Declare it. * final.c (final_start_function): Don't call remove_unnecessary_notes --- 11990,11996 ---- remove_unnecessary_notes. (debug_ignore_block): New fn. * toplev.h: Declare it. ! * emit-rtl.c (remove_unnecessary_notes): Call it. * dwarf2out.c (dwarf2out_ignore_block): New fn. * dwarf2out.h: Declare it. * final.c (final_start_function): Don't call remove_unnecessary_notes *************** Mon Feb 28 11:34:43 2000 J"orn Rennecke *** 12408,12414 **** 2000-02-27 Mark Mitchell ! * emit-rtl.c (remove_unncessary_notes): Remove notes for empty blocks. * final.c (next_block_index): Remove. (max_block_depth): Likewise. --- 12408,12414 ---- 2000-02-27 Mark Mitchell ! * emit-rtl.c (remove_unnecessary_notes): Remove notes for empty blocks. * final.c (next_block_index): Remove. (max_block_depth): Likewise. *************** Fri Feb 18 20:08:57 2000 Richard Kenner *** 12922,12928 **** * function.c (assign_parms): Make thisparm_boundary unsigned. * genrecog.c (write_switch): Cast XWINT result to int. * lcm.c: Many static fcns and vars now #ifdef OPTIMIZE_MODE_SWITCHING. ! * mips-tfile.c (init_file): Make two versions of FDR intializer: one for MIPS and one for Alpha. (get_tag, copy_object): Add casts to avoid warnings. * optabs.c (init_one_libfunc): Cast NAME to (char *). --- 12922,12928 ---- * function.c (assign_parms): Make thisparm_boundary unsigned. * genrecog.c (write_switch): Cast XWINT result to int. * lcm.c: Many static fcns and vars now #ifdef OPTIMIZE_MODE_SWITCHING. ! * mips-tfile.c (init_file): Make two versions of FDR initializer: one for MIPS and one for Alpha. (get_tag, copy_object): Add casts to avoid warnings. * optabs.c (init_one_libfunc): Cast NAME to (char *). *************** Sat Feb 12 01:44:26 MET 2000 Jan Hubick *** 13327,13333 **** * config/arm/arm.c (arm_init_cumulative_args); New function: Initlaise the CUMULATIE_ARGS strcuture for a function ! defintion. (arm_function_arg): New function: Determine where to place a function's argument. Also handles deciding the function's call cookie. --- 13327,13333 ---- * config/arm/arm.c (arm_init_cumulative_args); New function: Initlaise the CUMULATIE_ARGS strcuture for a function ! definition. (arm_function_arg): New function: Determine where to place a function's argument. Also handles deciding the function's call cookie. *************** Sat Feb 12 01:44:26 MET 2000 Jan Hubick *** 13338,13344 **** (arm_valid_type_attribute_p): New function: Return true if the attribute is a valid, arm specific, attribute. (arm_comp_type_attribute): New function: Return true if the ! two types have compatable, arm specific, attributes. * config/arm/arm.h (CUMULATIVE_ARGS): Redefine to be a structure. --- 13338,13344 ---- (arm_valid_type_attribute_p): New function: Return true if the attribute is a valid, arm specific, attribute. (arm_comp_type_attribute): New function: Return true if the ! two types have compatible, arm specific, attributes. * config/arm/arm.h (CUMULATIVE_ARGS): Redefine to be a structure. *************** Tue Feb 8 15:51:50 2000 Richard Kenner *** 13774,13780 **** Tue Feb 8 07:53:55 2000 Jan Hubicka ! * i386.md (addqi3_cc): Fix contraints. Tue Feb 8 01:39:45 2000 Hans-Peter Nilsson --- 13774,13780 ---- Tue Feb 8 07:53:55 2000 Jan Hubicka ! * i386.md (addqi3_cc): Fix constraints. Tue Feb 8 01:39:45 2000 Hans-Peter Nilsson *************** Mon Jan 24 16:56:10 2000 Jim Wilson ! * config/i386/t-cygwin: Accomodate new winsup directory layout when searching for include files. 2000-01-24 Richard Henderson --- 14858,14864 ---- 2000-01-24 Christopher Faylor ! * config/i386/t-cygwin: Accommodate new winsup directory layout when searching for include files. 2000-01-24 Richard Henderson *************** Thu Jan 6 13:44:59 CET 2000 Jan Hubick *** 16497,16503 **** flag_data_sections or UNIQUE_SECTION_P are true. * tm.texi (UNIQUE_SECTION): Document that it can be called for ! unitialised data decls. * config/i386/winnt.c (i386_pe_unique_section): Cope with being called for uninitialised data. --- 16497,16503 ---- flag_data_sections or UNIQUE_SECTION_P are true. * tm.texi (UNIQUE_SECTION): Document that it can be called for ! uninitialized data decls. * config/i386/winnt.c (i386_pe_unique_section): Cope with being called for uninitialised data. diff -Nrc3pad gcc-3.0.4/gcc/ChangeLog.4 gcc-3.1/gcc/ChangeLog.4 *** gcc-3.0.4/gcc/ChangeLog.4 Sat Mar 3 19:30:58 2001 --- gcc-3.1/gcc/ChangeLog.4 Fri Nov 23 02:05:07 2001 *************** Fri Dec 15 14:48:37 MET 2000 Jan Hubick *** 877,883 **** * genrecog.c (add_to_sequence): Remove special case for const_int_operand. (maybe_both_true): Return 1 when falling out of sequence when ! trying to find common possition in the pattern. Fri Dec 15 14:44:51 MET 2000 Jan Hubicka --- 877,883 ---- * genrecog.c (add_to_sequence): Remove special case for const_int_operand. (maybe_both_true): Return 1 when falling out of sequence when ! trying to find common position in the pattern. Fri Dec 15 14:44:51 MET 2000 Jan Hubicka *************** Tue Nov 14 12:34:56 2000 Richard Kenner *** 4017,4023 **** 2000-11-12 Mark Mitchell ! * jump.c (delete_computation): Don't assume that just becuase an instruction sets a register, that register is dead. 2000-11-12 Neil Booth --- 4017,4023 ---- 2000-11-12 Mark Mitchell ! * jump.c (delete_computation): Don't assume that just because an instruction sets a register, that register is dead. 2000-11-12 Neil Booth *************** Sat Nov 11 18:41:20 2000 Mark P Mitchel *** 4104,4110 **** (cpp_get_token): Handle empty macro expansions. Don't worry about CPP_PLACEMARKERs. (_cpp_create_definition): Empty macros are now empty. ! (cpp_macro_defintion): Don't special case empty macros. * scan-decls.c: Don't bother with CPP_PLACEMARKERs. * c-lex.c: Similarly. --- 4104,4110 ---- (cpp_get_token): Handle empty macro expansions. Don't worry about CPP_PLACEMARKERs. (_cpp_create_definition): Empty macros are now empty. ! (cpp_macro_definition): Don't special case empty macros. * scan-decls.c: Don't bother with CPP_PLACEMARKERs. * c-lex.c: Similarly. *************** Tue Oct 31 15:33:27 2000 J"orn Rennecke *** 5361,5367 **** * regrename.c: Rewrite to handle multi-register modes and cond_exec instructions. ! * Makefile.in (regrename.o): Update dependancies. * recog.h (struct operand_alternative): Add is_address. * recog.c (preprocess_constraints) [case 'p']: Set it. --- 5361,5367 ---- * regrename.c: Rewrite to handle multi-register modes and cond_exec instructions. ! * Makefile.in (regrename.o): Update dependencies. * recog.h (struct operand_alternative): Add is_address. * recog.c (preprocess_constraints) [case 'p']: Set it. *************** Tue Oct 10 23:14:33 2000 Denis Chertyko *** 6719,6726 **** 2000-10-07 Will Cohen , Kazu Hirata * config/h8300/h8300.md: Remove the memory alternative and correct ! the insn lengths in the templates for sign extention and zero ! extention. 2000-10-07 Richard Henderson --- 6719,6726 ---- 2000-10-07 Will Cohen , Kazu Hirata * config/h8300/h8300.md: Remove the memory alternative and correct ! the insn lengths in the templates for sign extension and zero ! extension. 2000-10-07 Richard Henderson *************** Sun Sep 17 10:46:17 2000 Richard Kenner *** 8208,8214 **** (struct language_function): Add x_scope_stmt_stack and x_function_name_declared_p. (RECHAIN_STMTS): Move definition. ! (lang_statment_code_p): Likewise. (lang_expand_stmt): Likewise. (lang_expand_decl_stmt): New variable. (lang_expand_function_end): Likewise. --- 8208,8214 ---- (struct language_function): Add x_scope_stmt_stack and x_function_name_declared_p. (RECHAIN_STMTS): Move definition. ! (lang_statement_code_p): Likewise. (lang_expand_stmt): Likewise. (lang_expand_decl_stmt): New variable. (lang_expand_function_end): Likewise. *************** Tue Aug 29 22:29:58 2000 Denis Chertyko *** 10131,10137 **** (adjust_insn_length): Use output_movsisf, output_movqi, output_movhi for insn length adjusting. (reg_unused_after): Use dead_or_set_p. ! (preferred_reload_class): Now havn't any restriction. (reg_was_0): New function. (io_address_p): Likewise. (const_int_pow2_p): Likewise. --- 10131,10137 ---- (adjust_insn_length): Use output_movsisf, output_movqi, output_movhi for insn length adjusting. (reg_unused_after): Use dead_or_set_p. ! (preferred_reload_class): Now haven't any restriction. (reg_was_0): New function. (io_address_p): Likewise. (const_int_pow2_p): Likewise. *************** Mon Aug 21 07:41:12 2000 Jeffrey A Law *** 11026,11032 **** (lang_diagnostic_starter, lang_diagnostic_finalizer): New objects. (error_module_changed, record_last_error_module, error_function_changed, record_last_error_function): New functions. ! (initialize_diagnostics): Default intialize lang_diagnostic_starter, lang_diagnostic_finalizer. (init_output_buffer): Tweak. (file_name_as_prefix): New function. --- 11026,11032 ---- (lang_diagnostic_starter, lang_diagnostic_finalizer): New objects. (error_module_changed, record_last_error_module, error_function_changed, record_last_error_function): New functions. ! (initialize_diagnostics): Default initialize lang_diagnostic_starter, lang_diagnostic_finalizer. (init_output_buffer): Tweak. (file_name_as_prefix): New function. *************** Tue Jul 25 23:08:33 2000 J"orn Rennecke *** 13466,13472 **** 2000-07-24 Nick Clifton * config/arm/arm.c (emit_multi_reg_push): Generate a ! REG_FRAME_RELEATED_NOTE that is compatable with the code in dwarf2out_debug_frame_expr. 2000-07-24 Jason Merrill --- 13466,13472 ---- 2000-07-24 Nick Clifton * config/arm/arm.c (emit_multi_reg_push): Generate a ! REG_FRAME_RELEATED_NOTE that is compatible with the code in dwarf2out_debug_frame_expr. 2000-07-24 Jason Merrill *************** Fri Jul 14 10:25:53 2000 Clinton Popetz *** 14103,14109 **** 2000-07-14 Neil Booth ! * cpplex.c (adjust_column): New funcion. (skip_whitespace): Use it. (skip_block_comment): Use it, and warn about /*/* with -Wcomments. --- 14103,14109 ---- 2000-07-14 Neil Booth ! * cpplex.c (adjust_column): New function. (skip_whitespace): Use it. (skip_block_comment): Use it, and warn about /*/* with -Wcomments. *************** Wed Jul 12 13:15:16 2000 Marc Espie + + * rtl.def (DEFINE_INSN, DEFINE_INSN_AND_SPLIT, DEFINE_PEEPHOLE): + Change output-template slot to format 'T'. + * rtl.h (XTMPL): New. + * read-rtl.c (read_escape): New function. + (read_quoted_string, read_braced_string): Use it. + (read_rtx): Set star_if_braced from the format string. + Use XTMPL where appropriate. + * genoutput.c (gen_insn, gen_peephole): Use XTMPL to get the + template string. + + * rtl.c: Include errors.h for sake of rtl_check_failed* routines. + Document 'T' in rtx format strings. + * Makefile.in (rtl.o, $(HOST_PREFIX_1)rtl.o): Depend on errors.h. + * errors.c (internal_error): Add missing ": " at end of string. + + * i860.md: Change triple backslashes to double backslashes at + ends of lines in output templates. + * ns32k.md: Remove stray backslash-newline in output template. + + 2001-06-29 Nick Clifton + + * gcc.c (process_command): Append a DIR_SEPARATOR to a path + specified by the -B switch, if doing so would create a valid + directory name. + * doc/invoke.texi: Document changed behaviour of -B. + + 2001-06-29 DJ Delorie + + * simplify-rtx.c (simplify_subreg): When simplifying a CONCAT, at + least get rid of the CONCAT if we can't simplify further. + + Fri Jun 29 12:27:24 2001 Jeffrey A Law (law@cygnus.com) + + * simplify-rtx.c (simplify_rtx): Use swap_commutative_operands_p. + + * doc/gcc.texi (Passes): Update due to recent -fdce -> -fssa-dce + changes. Fix documentation for SSA DCE pass. + + * ssa-dce.c (ssa_eliminate_dead_code): Renamed from + eliminate_date_code. + * ssa.h (ssa_eliminate_dead_code): Corresponding changes. + * timevar.def (TV_SSA_DCE): Renamed from TV_DEAD_CODE_ELIM. + * toplev.c (DFI_ssa_dce): Renamed from DFI_dce. + (dump_file_info): Similar changes. + (flag_ssa_dce): Similarly + (f_options): Similar changes. + (rest_of_compilation): Corresponding changes. + * doc/invoke.texi: Update as option is now -fssa-dce instead + of -fdce. Update dump file name. + + * ssa-dce.c (note_inherently_necessary_set): New function. + (find_inherently_necessary): Use it. Do not consider + NOTEs, CODE_LABELs or BARRIERS are necessary. Improve + handling of asms and unspecs. + (delete_insn_bb): Only delete INSNs, CALL_INSNs or JUMP_INSNs. + + 2001-06-29 Joseph S. Myers + + * target.h (struct gcc_target): Add comp_type_attributes and + set_default_type_attributes. + * target-def.h (TARGET_COMP_TYPE_ATTRIBUTES, + TARGET_SET_DEFAULT_TYPE_ATTRIBUTES): Define. + (TARGET_INITIALIZER): Update. + * doc/tm.texi (COMP_TYPE_ATTRIBUTES, TARGET_COMP_TYPE_ATTRIBUTES, + SET_DEFAULT_TYPE_ATTRIBUTES, TARGET_SET_DEFAULT_TYPE_ATTRIBUTES): + Update documentation of old target macros to describe new target + hooks. + * tree.c (make_node): Use target.set_default_type_attributes. + (default_comp_type_attributes, + default_set_default_type_attributes): New functions. + * tree.h (default_comp_type_attributes, + default_set_default_type_attributes): Declare. + * c-typeck.c (COMP_TYPE_ATTRIBUTES): Don't define. + (comptypes): Use target.comp_type_attributes. + * config/arc/arc-protos.h, config/arc/arc.c, config/arc/arc.h + (arc_comp_type_attributes, arc_set_default_type_attributes, + COMP_TYPE_ATTRIBUTES, SET_DEFAULT_TYPE_ATTRIBUTES): Remove + functions and macros with default behaviour. + * config/m32r/m32r-protos.h, config/m32r/m32r.c, + config/m32r/m32r.h (m32r_comp_type_attributes, + m32r_set_default_type_attributes, COMP_TYPE_ATTRIBUTES, + SET_DEFAULT_TYPE_ATTRIBUTES): Likewise. + * config/m68hc11/m68hc11-protos.h, config/m68hc11/m68hc11.c, + config/m68hc11/m68hc11.h (m68hc11_comp_type_attributes, + m68hc11_set_default_type_attributes, COMP_TYPE_ATTRIBUTES, + SET_DEFAULT_TYPE_ATTRIBUTES): Likewise. + * config/ns32k/ns32k-protos.h, config/ns32k/ns32k.c, + config/ns32k/ns32k.h (ns32k_comp_type_attributes, + COMP_TYPE_ATTRIBUTES): Likewise. + * config/rs6000/rs6000-protos.h, config/rs6000/rs6000.c, + config/rs6000/rs6000.h (rs6000_comp_type_attributes, + rs6000_set_default_type_attributes, COMP_TYPE_ATTRIBUTES, + SET_DEFAULT_TYPE_ATTRIBUTES): Likewise. + * config/d30v/d30v.h (COMP_TYPE_ATTRIBUTES, + SET_DEFAULT_TYPE_ATTRIBUTES): Remove commented out macro + definitions. + * config/i386/i386.h (SET_DEFAULT_TYPE_ATTRIBUTES): Likewise. + * config/ns32k/ns32k.h (SET_DEFAULT_TYPE_ATTRIBUTES): Likewise. + * config/arm/arm.c (arm_comp_type_attributes, + arm_set_default_type_attributes): Make static. + (TARGET_COMP_TYPE_ATTRIBUTES, TARGET_SET_DEFAULT_TYPE_ATTRIBUTES): + Define. + * config/arm/arm.h (COMP_TYPE_ATTRIBUTES, + SET_DEFAULT_TYPE_ATTRIBUTES): Don't define. + * config/arm/arm-protos.h (arm_comp_type_attributes, + arm_set_default_type_attributes): Don't declare. + * config/i386/i386.c (ix86_comp_type_attributes): Make static. + (TARGET_COMP_TYPE_ATTRIBUTES): Define. + * config/i386/i386.h (COMP_TYPE_ATTRIBUTES): Don't define. + * config/i386/i386-protos.h (ix86_comp_type_attributes): Don't + declare. + + 2001-06-28 Jan van Male + + * predict.c (dump_prediction): Eliminate fprintf warning. + + 2001-06-28 Diego Novillo + + * flow.c (dump_bb): Remove unused third argument to call + to fprintf when displaying the basic block header. + + 2001-06-28 Michael Hayes + Jeff Law + + * Makefile.in (OBJS): Add df.o + (df.o): Add dependencies. + * basic-block.h (flow_depth_first_order_compute): Declare. + * flow.c (flow_depth_first_order_compute): No longer declare. + Make external. + * df.c, df.h: New files. + + 2001-06-28 Zack Weinberg + + * config/i386/i386.md: Global update to use new string syntax + where it will improve readability. Warning fixes: + (*truncdfsf2_2): Abort if which_alternative is not 0 or 1. + (*adddi_1_rex64, *adddi_2_rex64, *adddi_3_rex64, + *adddi_4_rex64, *adddi_5_rex64): Cast 1 to unsigned int. + + * read-rtl.c: Syntactic sugar for C embedded in strings in + machine descriptions. + (read_string): Break inner loop into separate function. Takes + an int. Dispatch to read_quoted_string or read_braced_string + as appropriate. Automatically insert a leading star on braced + strings if STAR_IF_BRACED is true. + (read_quoted_string, read_braced_string): New functions. + * doc/rtl.texi, doc/md.texi: Document new syntax. Update + examples to match. + + * rtl.c: Split RTL reader (read_rtx, read_skip_spaces, + traverse_md_constants, fatal_with_file_and_line, + fatal_expected_char, read_name, read_string, def_hash, + def_name_eq_p, read_constants, and related data) to its own + file. Weed out now-unnecessary #includes. + * read-rtl.c: New file. + * Makefile.in (HOST_RTL): Add read-rtl.o. + (read-rtl.o): New rule. + (rtl.o, $(HOST_PREFIX_1)rtl.o): Update dependencies. + * doc/gcc.texi (Passes): Talk briefly about the support + library used by genfoo. + * doc/rtl.texi (Reading RTL): read_rtx is not available in the + compiler itself. + + 2001-06-28 Stan Shebs + + * config/darwin.h (REGISTER_TARGET_PRAGMAS): Define. + * config/darwin-c.c: New file. + * config/darwin-protos.h: Declare new functions. + * config/rs6000/t-darwin (darwin-c.o): New rule. + * config.gcc (powerpc-*-darwin*): Define c_target_objs and + cxx_target_objs. + * doc/extend.texi (Pragmas): New section. + + Thu Jun 28 20:13:11 CEST 2001 Jan Hubicka + + * flow.c (try_merge_block): Rename to try_optimize_cfg; + do basic simplifications on the CFG. + (is_forwarder_block_p, can_fallthru, try_redirect_by_replacing_jump, + try_simplify_condjump): New. + (redirect_edge_and_branch): Try replace jump insn. + (flow_delete_insn): Handle deleting of ADDR_VEC insns. + + * basic-block.h (FALLTHRU_EDGE, BRANCH_EDGE): New macros. + + Thu Jun 28 11:19:42 2001 Jeffrey A Law (law@cygnus.com) + + * ssa-dce.c (eliminate_dead_code): Properly handle control + dependencies implied by PHI nodes. + + * ssa-dce.c (eliminate_dead_code): Remove fake edges from the + CFG after dead code elimination is complete. + + 2001-06-28 Rainer Orth + + * gthr-posix.h [LIBOBJC]: Add weak definitions of + sched_get_priority_max, sched_get_priority_min. + + 2001-06-28 Gabriel Dos Reis + + * diagnostic.c (default_print_error_function): Tweak. + (report_error_function): Likewise. + * toplev.h (default_print_error_function): Move to... + * diagnostic.h: ...here. Add a `diagnostic_context *' parameter. + * tree.h (print_error_function): Move to... + * diagnostic.h: ...here. Add a `diagnostic_context *' parameter. + + Thu Jun 28 06:16:45 2001 Richard Kenner + + * expr.c (expand_assignment): When have varying-length object, + make MEM a BLKmode. + (expand_expr, case ADDR_EXPR): Use SAVE_EXPR_RTL after putting + SAVE_EXPR stack in case we had a SUBREG. + + Thu Jun 28 10:31:06 CEST 2001 Jan Hubicka + + * i386.md (cmp?i): Simplify; refuse immediate operand + in alternative 0 + * i386.c (cmpsi_operand): Refuse constants. + + * i386.md (movsi_insv_1, movsi_insv_1_rex64): Allow immediate operand. + + * flow.c (block_label, redirect_edge_and_branch): Split out from .... + (split_edge) .... here; + + 2001-06-28 Neil Booth + + * i386/i386.c (ix86_valid_type_attribute_p): Give external + linkage, move declaration to... + * i386/i386-protos.h: ...here. + + 2001-06-27 H.J. Lu (hjl@gnu.org) + + * build-make (CC): Removed. + (HOST_CC): Set to $(CC_FOR_BUILD). + (HOST_CFLAGS): Replace $(CFLAGS) with $(CFLAGS_FOR_BUILD). + Fix a typo in comments. + + * configure.in: Set CFLAGS to $(CFLAGS_FOR_BUILD) when + generating auto-build.h for canadian cross compile. Set CC + to `"${CC_FOR_BUILD}"' instead of just `${CC_FOR_BUILD}'. + Save/restore CFLAGS. + * configure: Regenerated. + + 2001-06-27 Jim Wilson + + * emit-rtl.c (gen_highpart): Call validize_mem. + + 2001-06-27 Bruce Korb + + * fixinc/inclhack.def(hpux11_cpp_pow_inline): new, but real similar to + hpux10_cpp_pow_inline. Not similar enough. + (solaris_mutex_init): renamed. PTHREAD_*_INITIALIZER is a problem for + all Solaris versions. This fix patches MUTEX and COND initializers, + the RWLOCK one will wait for someone to complain. For now, anyway. + (uw7_byteorder_fix): It was looking for the byteorder.h file in the + wrong directory. + + 2001-06-27 Stan Shebs + + * objc/objc-act.c (handle_impent): Rewrite to be more portable + and to use ASM_DECLARE_CLASS_REFERENCE. + * config/darwin.h (ASM_DECLARE_CLASS_REFERENCE): Rename from + undocumented DECLARE_CLASS_REFERENCE, add file argument. + * doc/tm.texi (ASM_DECLARE_CLASS_REFERENCE): Document. + + Wed Jun 27 18:01:09 2001 Jeffrey A Law (law@cygnus.com) + + * simplify-rtx.c (simplify_rtx): Canonicalize commutative expressions + by putting complex operands first and constants second. + + 2001-06-27 Gabriel Dos Reis + + * diagnostic.h: Add documentation. Make macros polymorphic. + * diagnostic.c (ideal_line_wrap_cutoff): Remove + definition. Replace with diagnostic_line_cutoff. + (prefixing_policy): Remove. Replace with diagnostic_prefixing_rule. + + 2001-06-27 Joseph S. Myers + + * doc/c-tree.texi, doc/contrib.texi, doc/cpp.texi, + doc/cppinternals.texi, doc/extend.texi, doc/gcc.texi, + doc/gcov.texi, doc/install-old.texi, doc/install.texi, + doc/invoke.texi, doc/md.texi, doc/rtl.texi, doc/tm.texi: Replace + . at end of sentences preceded by a capital letter with @.. + + 2001-06-26 Daniel Berlin + + * doc/invoke.texi: Add description of max-gcse-passes param. + + * gcse.c (gcse_main): Use MAX_GCSE_PASSES instead of MAX_PASSES. + (MAX_PASSES): Remove now unneeded macro. + + * params.h (MAX_GCSE_PASSES): New macro, to get parameter value of + max-gcse-passes param. + + * params.def (PARAM_MAX_GCSE_PASSES): New parameter, controlling + maximum number of GCSE passes to run. Defaults to 1 (which is what + MAX_PASSES in gcse.c used to be). + + 2001-06-27 Neil Booth + + * system.h (TARGET_ESC): Move to ... + * defaults.h (TARGET_ESC): ... here. + * target-def.h (TARGET_VALID_DECL_ATTRIBUTE, + TARGET_VALID_TYPE_ATTRIBUTE): Default to a no-op handler. + * tree.c (default_valid_attribute_p): New. + (valid_machine_attribute): Handlers can not be NULL. + * tree.h (default_valid_attribute_p): New. + * doc/tm.texi: Document TARGET_ESC. + * cp/decl2.c (import_export_class): Update. + + 2001-06-26 Bruce Korb + + * gcc/fixinc/fixincl.c(initialize): In very strict ANSI, you cannot + use preprocessing directives inside a string literal. Fixed. + + 2001-06-26 Jim Wilson + + * doc/tm.texi (MAX_LONG_DOUBLE_TYPE_SIZE, INTEL_EXTENDED_IEEE_FORMAT): + Document. + + 2001-06-27 Joseph S. Myers + + * doc/cpp.texi, doc/cppinternals.texi, doc/extend.texi, + doc/gcc.texi, doc/install.texi, doc/invoke.texi, doc/md.texi, + doc/tm.texi: Use @: where necessary when a full stop does not end + a sentence. + + 2001-06-27 Joseph S. Myers + + * doc/gcc.texi, doc/install.texi, doc/invoke.texi: Remove trailing + whitespace. + + 2001-06-26 Joseph S. Myers + + * doc/c-tree.texi, doc/cpp.texi, doc/extend.texi, doc/gcc.texi, + doc/install.texi, doc/invoke.texi, doc/objc.texi, doc/rtl.texi, + doc/tm.texi: Use two spaces after ends of sentences. + + 2001-06-26 Daniel Berlin + + * toplev.c (display_help): Fix param thinko. + * Makefile.in: Fix params.h dependencies. + + 2001-06-26 Gabriel Dos Reis + + * toplev.c (decode_f_option): Adjust setting. + (toplev_main): Call diagnostic_initialize. Remove call to + reshape_diagnostic_buffer._ + + * diagnostic.h (struct output_buffer): Add new field format_decoder. + (diagnostic_format_decoder): New macro. + (diagnostic_prefixing_rule): Likewise. + (diagnostic_line_cutoff): Likewise. + (set_message_prefixing_rule): Remove. + + * diagnostic.c (lang_printer): Remove. + (diagnostic_message_length_per_line): Likewise. + (current_prefixing_rule): Likewise. + (initialize_diagnostics): Rename to... + (diagnostic_initialize): ...this. Tweak. + (default_initialize_buffer): Remove. + (reshape_diagnostic_buffer): Likewise. + (init_output_buffer): Adjust prefixing rule setting. + (output_format): Use format_decoder from the output_buffer. + + * c-lang.c (c_init): Adjust tree formatter setting. + + 2001-06-26 Rainer Orth + + * config/i386/sol2.h (CPP_SPEC): Pass -P for .S files. + + 2001-06-26 Neil Booth + + * Makefile.in (TARGET_H, TARGET_DEF_H): New. + (c-decl.o, tree.o, c-typeck.o, $(out_object_file)): Update. + * c-decl.c (duplicate_decls): Use function pointer. + * c-typeck.c (common_type): Similarly. + * tree.c (valid_machine_attribute): Similarly. + (merge_machine_type_attributes): Rename merge_type_attributes. + (merge_machine_decl_attributes): Rename merge_decl_attributes. + (merge_dllimport_decl_attributes): New function. + * tree.h (merge_machine_type_attributes): Rename merge_type_attributes. + (merge_machine_decl_attributes): Rename merge_decl_attributes. + (merge_dllimport_decl_attributes): New prototype. + * target.h: New. + * target-def.h: New. + + doc: (Joseph Myers) + * doc/gcc.texi, doc/tm.texi: Update documentation. + + cp: Make-lang.in: Update dependencies. + * spew.c: Include target.h. + (duplicate_decls): Call target function. + * decl2.c: include target.h + (import_export_class): Use existence of target function pointer. + * typeck.c: Include target.h. + (qualify_type_recursive): Rename variable. Call target function. + (type_after_usual_arithmetic_conversions): Similarly. + (common_type): Similarly. + + config: * 1750a/1750a.c, a29k/29k.c, alpha/alpha.c, arc/arc.c, arm/arm.c, + avr/avr.c, c4x/c4x.c, clipper/clipper.c, convex/convex.c, + d30v/d30v.c, dsp16xx/dsp16xx.c, elxsi/elxsi.c, fr30/fr30.c, + i370/i370.c, i386/i386.c, i860/i860.c, i960/i960.c, ia64/ia64.c, + m32r/m32r.c, m68hc11/m68hc11.c, m68k/m68k.c, m88k/m88k.c, + mips/mips.c, mn10200/mn10200.c, mn10300/mn10300.c, ns32k/ns32k.c, + pa/pa.c, pdp11/pdp11.c, pj/pj.c, romp/romp.c, rs6000/rs6000.c, + sh/sh.c, sparc/sparc.c, v850/v850.c, vax/vax.c, we32k/we32k.c) + : Include target.h and target-def.h. Define target. + + * arc/arc-protos.h (arc_valid_machine_decl_attribute): Remove. + * arc/arc.c (arc_valid_machine_decl_attribute): Rename + arc_valid_decl_attribute, make static. + * arc/arc.h (VALID_MACHINE_TYPE_ATTRIBUTE): Remove. + * arm/arm-protos.h (arm_valid_machine_decl_attribute, + arm_valid_type_attribute_p, arm_pe_valid_machine_decl_attribute, + arm_pe_merge_machine_decl_attributes): Remove. + * arm/arm.c (arm_valid_machine_decl_attribute_p): Rename + arm_valid_decl_attribute_p, make static. + (arm_pe_valid_decl_attribute_p): Move from pe.c. + * arm/pe.c (arm_pe_valid_machine_decl_attribute_p): Move to arm.c. + (arm_pe_merge_machine_decl_attributes): Move to tree.c. + * arm/arm.h (VALID_MACHINE_TYPE_ATTRIBUTE): Remove. + * arm/coff.h (VALID_MACHINE_DECL_ATTRIBUTE): Remove. + * arm/elf.h (VALID_MACHINE_DECL_ATTRIBUTE): Remove. + * arm/pe.h (TARGET_DLLIMPORT_DECL_ATTRIBUTES): New. + (VALID_MACHINE_TYPE_ATTRIBUTE, VALID_MACHINE_DECL_ATTRIBUTE): Remove. + * avr/avr-protos.h (valid_machine_type_attribute, + valid_machine_decl_attribute): Remove. + * avr/avr.c (valid_machine_type_attribute, + valid_machine_decl_attribute): Rename and make static. + * avr/avr.h (VALID_MACHINE_TYPE_ATTRIBUTE, + VALID_MACHINE_DECL_ATTRIBUTE): Remove. + * c4x/c4x-protos.h (c4x_valid_type_attribute_p): Remove. + * c4x/c4x.c (c4x_valid_type_attribute_p): Make static. + * c4x/c4x.h (VALID_MACHINE_TYPE_ATTRIBUTE): Remove. + * d30v/d30v.h: Remove obsolete comments. + * h8300/h8300-protos.h (h8300_valid_machine_decl_attribute): Remove. + * h8300/h8300.c (h8300_valid_machine_decl_attribute): Rename, make + static. + * h8300/h8300.h (VALID_MACHINE_DECL_ATTRIBUTE): Remove. + * i386/cygwin.h (TARGET_DLLIMPORT_DECL_ATTRIBUTES): Define. + (i386_pe_merge_decl_attributes, MERGE_MACHINE_DECL_ATTRIBUTES, + i386_pe_valid_type_attributes_p): Remove. + * i386/i386-protos.h (ix86_valid_decl_attribute_p, + ix86_valid_type_attribute_p): Remove. + * i386/i386.c (ix86_valid_decl_attribute_p): Remove. + (ix86_valid_type_attribute_p): Make static. + * i386/i386.h (VALID_MACHINE_DECL_ATTRIBUTE, + VALID_MACHINE_TYPE_ATTRIBUTE): Remove. + * i386/winnt.c (i386_pe_merge_decl_attributes): Move to tree.c. + * ia64/ia64-protos.h (ia64_valid_type_attribute): Remove. + * ia64/ia64.c (ia64_valid_type_attribute): Make static. + * ia64/ia64.h (VALID_MACHINE_TYPE_ATTRIBUTE): Remove. + * m32r/m32r-protos.h (m32r_valid_machine_decl_attribute): Remove. + * m32r/m32r.c (m32r_valid_decl_attribute): Make static. + * m32r/m32r.h (VALID_MACHINE_DECL_ATTRIBUTE): Remove. + * m68hc11/m68hc11-protos.h (m68hc11_valid_decl_attribute_p, + m68hc11_valid_type_attribute_p): Remove. + * m68hc11/m68hc11.c (m68hc11_valid_decl_attribute_p): Remove. + (m68hc11_valid_type_attribute_p): Make static. + * m68hc11/m68hc11.h (VALID_MACHINE_DECL_ATTRIBUTE, + VALID_MACHINE_TYPE_ATTRIBUTE): Remove. + * mcore/mcore-protos.h (mcore_valid_machine_decl_attribute, + mcore_merge_machine_decl_attribute): Remove. + * mcore/mcore.c (mcore_valid_machine_decl_attribute): Rename, + make static. + (mcore_merge_machine_decl_attributes): Move to tree.c. + * mcore/mcore.h (VALID_MACHINE_DECL_ATTRIBUTE, + VALID_MACHINE_TYPE_ATTRIBUTE): Remove. + (TARGET_DLLIMPORT_DECL_ATTRIBUTES): Define. + * ns32k/ns32k-protos.h (ns32k_valid_decl_attribute_p, + ns32k_valid_type_attribute_p): Remove. + * ns32k/ns32k.c (ns32k_valid_decl_attribute_p): Remove. + (ns32k_valid_type_attribute_p): Make static. + * ns32k/ns32k.h (VALID_MACHINE_DECL_ATTRIBUTE, + VALID_MACHINE_TYPE_ATTRIBUTE): Remove. + * rs6000/rs6000-protos.h (rs6000_valid_decl_attribute_p, + rs6000_valid_type_attribute_p): Remove. + * rs6000/rs6000.c (rs6000_valid_decl_attribute_p): Remove. + (rs6000_valid_type_attribute_p): Make static. + * rs6000/rs6000.h (VALID_MACHINE_DECL_ATTRIBUTE, + VALID_MACHINE_TYPE_ATTRIBUTE): Remove. + * sh/sh-protos.h (sh_valid_machine_decl_attribute): Remove. + * sh/sh.c (sh_valid_machine_decl_attribute): Rename, make static. + * sh/sh.h (VALID_MACHINE_DECL_ATTRIBUTE): Remove. + * v850/v850-protos.h (v850_valid_machine_decl_attribute): Remove. + * v850/v850.c (v850_valid_machine_decl_attribute): Rename, make static. + * v850/v850.h (VALID_MACHINE_DECL_ATTRIBUTE): Remove. + + 2001-06-26 Vladimir Makarov + + * glimits.h (USHRT_MAX): Use unsigned suffix if int can not hold + it. + + 2001-06-26 Gabriel Dos Reis + + * diagnostic.h (struct diagnostic_context): Add new field. + (lang_diagnostic_starter, lang_diagnostic_finalizer): Remove + declaratons. + (global_dc): Declare. + * diagnostic.c (global_diagnostic_context): New variable. + (global_output_buffer): Remove. + (global_dc): Define. + (lang_diagnostic_starter, lang_diagnostic_finalizer): Remove + definitions. + (initialize_diagnostics): Adjust initialization. + (set_diagnostic_context): Adjust setting. + + 2001-06-26 Rainer Orth + + * config/mips/iris5.h (UNALIGNED_INT_ASM_OP, + UNALIGNED_SHORT_ASM_OP): Define. + * config/mips/iris6.h (UNALIGNED_INT_ASM_OP, + UNALIGNED_SHORT_ASM_OP): Undef. + + Tue Jun 26 12:40:12 CEST 2001 Jan Hubicka + + * i386.md (float_truncate splitter, and to mov splitters): Add + reload_completed; fix operand predicate. + + * haifa-sched.c (sched_init): Do not split insns. + * toplev.c (rest_of_compilation): Call split_all_insns before + sched1 pass; simplify condition of post-reload splitter; + call split_all_insn before sched2 pass. + + 2001-06-26 Gabriel Dos Reis + + * diagnostic.h (diagnostic_prefixing_rule_t): New enum type. + (set_message_prefixing_rule): Adjust prototype. + * diagnostic.c (current_prefixing_rule): Adjust type. + + 2001-06-26 Neil Booth + + * defaults.h: Default escape sequences to ASCII. + * config/i370/i370.h: Adjust for ASCII default. + * config/1750a/1750a.h: Remove escape sequence definitions. + * config/a29k/a29k.h: Similarly. + * config/alpha/alpha.h: Similarly. + * config/arc/arc.h: Similarly. + * config/arm/arm.h: Similarly. + * config/avr/avr.h: Similarly. + * config/c4x/c4x.h: Similarly. + * config/clipper/clipper.h: Similarly. + * config/convex/convex.h: Similarly. + * config/d30v/d30v.h: Similarly. + * config/dsp16xx/dsp16xx.h: Similarly. + * config/elxsi/elxsi.h: Similarly. + * config/fr30/fr30.h: Similarly. + * config/h8300/h8300.h: Similarly. + * config/i386/i386.h: Similarly. + * config/i860/i860.h: Similarly. + * config/i960/i960.h: Similarly. + * config/ia64/ia64.h: Similarly. + * config/m32r/m32r.h: Similarly. + * config/m68hc11/m68hc11.h: Similarly. + * config/m68k/m68k.h: Similarly. + * config/m88k/m88k.h: Similarly. + * config/mcore/mcore.h: Similarly. + * config/mips/mips.h: Similarly. + * config/mn10200/mn10200.h: Similarly. + * config/mn10300/mn10300.h: Similarly. + * config/ns32k/ns32k.h: Similarly. + * config/pa/pa.h: Similarly. + * config/pdp11/pdp11.h: Similarly. + * config/pj/pj.h: Similarly. + * config/romp/romp.h: Similarly. + * config/rs6000/rs6000.h: Similarly. + * config/sh/sh.h: Similarly. + * config/sparc/sparc.h: Similarly. + * config/v850/v850.h: Similarly. + * config/vax/vax.h: Similarly. + * config/we32k/we32k.h: Similarly. + * doc/tm.texi: Update documentation. + + 2001-06-26 Gabriel Dos Reis + + * diagnostic.c (digit_buffer): Remove as global. Move to... + * diagnostic.h (struct output_buffer): ... here. + * diagnostic.c (output_formatted_integer): Adjust use of digit_buffer. + + 2001-06-25 Steve Ellcey + + * config.gcc (ia64*-*-hpux*): Add ia64/hpux_longdouble.h to tm_file. + Define tmake_file to include ia64/t-hpux. + * real.c (INTEL_EXTENDED_IEEE_FORMAT): Test for value instead of + testing to see if it is defined. + * real.h (INTEL_EXTENDED_IEEE_FORMAT): Likewise. Default to 0 if + undefined. + * config/ia64/hpux_longdouble.h: New. + * config/ia64/ia64.c (hfa_element_mode): Add comment about incorrect + handling of long doubles. + (ia64_function_arg, ia64_function_value): Add checks for TFmode + and INTEL_EXTENDED_IEEE_FORMAT. + * config/ia64/ia64.h (INTEL_EXTENDED_IEEE_FORMAT): Define to one. + (HARD_REGNO_NREGS, HARD_REGNO_MODE_OK, LIBCALL_VALUE): Add checks for + TFmode and INTEL_EXTENDED_IEEE_FORMAT. + * config/ia64/ia64.md (all TFmode patterns): Test + INTEL_EXTENDED_IEEE_FORMAT in condition. + (floatdidf2, floatdisf2): New, for !INTEL_EXTENDED_IEEE_FORMAT. + * config/ia64/quadlib.c: New. + * config/ia64/t-hpux: New. + * config/i386/i386.h (INTEL_EXTENDED_IEEE_FORMAT): Define to one. + + 2001-06-25 Jim Wilson + + * config/i960/t-960bare (i960-c.o): Add missing header dependencies. + * config/i960/t-vxworks960: Likewise. + + 2001-06-25 Dale Johannesen + + * bitmap.c (bitmap_last_bit_set): Fix a non-c89 usage (null actual + argument to macro). + + Mon Jun 25 11:10:51 CEST 2001 Jan Hubicka + + * i386.md (movsi_insv_1, movsi_insv_1_rex64): Fix constraints. + + 2001-06-25 Joseph S. Myers + + * doc/c-tree.texi, doc/contrib.texi, doc/extend.texi, + doc/gcc.texi, doc/gcov.texi, doc/install.texi, doc/invoke.texi, + doc/md.texi, doc/rtl.texi, doc/tm.texi: Be more consistent about + the use of "GCC" and related terms. + * doc/gcc.1, doc/gcov.1: Regenerate. + + 2001-06-24 Joseph S. Myers + + * doc/extend.texi, doc/gcc.texi, doc/install-old.texi, + doc/invoke.texi, doc/md.texi, doc/rtl.texi, doc/tm.texi: Remove + uses of @refill. + + Sun Jun 24 21:21:49 CEST 2001 Jan Hubicka + + * (movsi_insv_1, movsi_insv_1_rex64): Allow immediate operand. + + 2001-06-24 Richard Henderson + + * builtins.c (expand_builtin_expect_jump): Disable if the + expression can't be re-evaluated. + + 2001-06-24 Nick Clifton + + * config/arm/arm.c (arm_compute_save_reg_mask): For FIQ interrupt + handlers examine register r0-r7, for other interrupt handlers + examine r0-r12. If the interrupt handler is not a leaf function + save all call clobbered registers. + (arm_output_epilogue): If the prologue has pushed the IP register, + restore it here. + (Arm_expand_prologue): For interrupt functions that need the frame + pointer, push the IP register before it is corrupted. + + * config/arm/arm.h (ARM_SIGN_EXTEND): Fix compile time warnings + about the use of signed and unsigned quantities in a conditional. + + 2001-06-23 Richard Henderson + + * config/alpha/crtfastmath.c: New file. + * config/alpha/t-crtfm: New file. + * config/alpha/elf.h (ENDFILE_SPEC): Use crtfastmath.o. + * config/alpha/osf.h (ENDFILE_SPEC): Likewise. + * config/alpha/t-crtbe (EXTRA_PARTS): Add pieces defined here. + * config.gcc (alpha-{linux,freebsd,netbsd,osf}): Use alpha/t-crtfm; + do not set extra_parts here. + + 2001-06-24 Joseph S. Myers + + * doc/install-old.texi: Remove more documentation of configure + options. + * doc/install.texi: Add it here. + + Sat Jun 23 19:40:05 CEST 2001 Jan Hubicka + + * i386-protos.h (emit_i387_cw_initialization): Declare. + * i386.md (movsi_insv_1): Remove '*'. + (fix_trunc?f?i2): Revamp to use control word parameters. + (fix_trunc?i_1): Likewise; update splitters. + (fix splitter): Remove. + * i386.c (MAX_386_STACK_LOCALS): set to 3. + (emit_i387_cw_initialization): New function. + (output_fix_trunc): Do not initialize control word; + kill dead code; simplify. + + 2001-06-23 Neil Booth + + * cppmacro.c (make_string_token): Avoid warning. + (cpp_macro_definition): Prepend the macro name. Update + comments. + * cppmain.c (cb_define, dump_macro): Update for changes + to cpp_macro_definition. + + Sat Jun 23 10:20:03 CEST 2001 Jan Hubicka + + * flow.c (attempt_auto_inc, try_pre_increment_1): Fix typo. + + Sat Jun 23 01:23:59 CEST 2001 Jan Hubicka + + * flow.c (mark_set_1, attempt_auto_inc, mark_used_reg, + try_pre_increment_1): compute REG_FREQ using bb->frequency. + + * regclass.c (loop_cost): Kill. + (frequency): New global variable. + (record_operand_costs): Replace loop_cost by frequency. + (scan_one_insn): Likewise. + (regclass): Likewise; set frequency according to bb->frequency. + + * flow.c (split_edge): Set frequency. + + Sat Jun 23 01:16:42 CEST 2001 Jan Hubicka + + * predict.c (block_info_def): Add nvisited. + (propagate_freq): Count nvisited; re-queue delayed blocks; handle + irreducible regions. + + * flow.c (dump_edge_info): Dump the probability of edge. + (combine_predictions_for_insn): Dump the basic block. + + 2001-06-22 Joseph S. Myers + + * doc/gcc.texi: Update documentation of source files of C + compiler. + + 2001-06-22 Richard Henderson + + * doc/invoke.texi (-funsafe-math-optimizations): Document its + possible effects at link time. + + 2001-06-22 Diego Novillo + + * basic-block.h (dump_edge_info): Declare. + (clear_edges): Declare. + (mark_critical_edges): Declare. + * flow.c (dump_edge_info): Remove static declaration. + (clear_edges): Ditto. + (mark_critical_edges): Ditto. + (free_basic_block_vars): Only clear edges and free basic block + array if basic_block_info is not NULL. + * ssa.c (compute_dominance_frontiers): Remove static declaration. + * ssa.h (compute_dominance_frontiers): Declare. + + 2001-06-22 Toshiyasu Morita (toshiyasu.morita@hsa.hitachi.com) + + * predict.c: (expected_value_to_br_prob): Check for const_true_rtx + instead of const1_rtx for true case. + + 2001-06-22 David Mosberger + + * config/ia64/crtfastmath.c: New file. + * config/ia64/t-ia64 (EXTRA_PARTS): Include it. + * config/ia64/linux.h (ENDFILE_SPEC): New. + + 2001-06-22 Toshiyasu Morita + + * config/h8300/h8300.c (asm_file_start): Remove reference to + "release F-1". + + 2001-06-22 Joseph S. Myers + + * c-common.c (verify_tree): Check for x being NULL. + * doc/c-tree.texi: Document COMPOUND_BODY of an empty + COMPOUND_STMT. + Fixes PR c/3259. + + 2001-06-22 DJ Delorie + + * config/arm/arm.h (struct machine_function): Remove ra_rtx. + * config/arm/arm.c (arm_mark_machine_status): Remove ra_rtx. + (arm_return_addr): Use get_hard_reg_initial_val et al. + * config/d30v/d30v.h (struct machine_function): Remove ra_rtx. + * config/d30v/d30v.c (d30v_mark_machine_status): Remove ra_rtx. + (d30v_return_addr): Use get_hard_reg_initial_val et al. + * config/rs6000/rs6000.h (struct machine_function): Remove ra_rtx. + * config/rs6000/rs6000.c (rs6000_override_options): Don't set + mark_machine_status. + (rs6000_mark_machine_status): Remove. + (rs6000_return_addr): Use get_hard_reg_initial_val. + (rs6000_ra_ever_killed): Use has_hard_reg_initial_val. + * config/v850/v850.h (INIT_EXPANDERS): Delete. + * config/v850/v850.c (struct machine_function): Delete. + (v850_init_machine_status): Delete. + (v850_mark_machine_status): Delete. + (v850_free_machine_status): Delete. + (v850_return_addr): Use get_hard_reg_initial_val. + (v850_init_expanders): Delete. + + Fri Jun 22 19:20:59 CEST 2001 Jan Hubicka + + * predict.c (estimate_bb_frequencies): Do not handle conditional + jumps jumping to fallthru basic block as conditional jumps. + + Fri Jun 22 19:11:28 CEST 2001 Jan Hubicka + + * regs.h (struct reg_info_def): Add freq field. + (REG_N_REFS): Update comment. + (REG_FREQ): New. + * regclass.c (scan_one_insn): Update REG_FREQ. + * flow.c (mark_set_1): Update REG_FREQ, make REG_N_SETS unweighted. + (attempt_auto_inc): Likewise. + (mark_used_reg): Likewise. + (try_pre_increment_1): Likewise. + * local-alloc.c (struct qty): Add freq field. + (alloc_qty): Set freq. + (update_equiv_regs): Set REG_FREQ. + (QTY_CMP_PRI): Use freq. + (combine_regs): Update qty->freq. + * global.c (struct allocno): Update comment for n_refs; + add freq field. + (local_reg_freq): New array. + (global_alloc): Update freq field; + allocate and initialize local_reg_freq. + (allocno_compare): Use freq field. + (find_reg): Likewise. + * reload1.c (count_pseudo): Use freq isntead of n_refs. + (count_spilled_pseudo): Likewise. + + * tm.texi (GCOV_TYPE_SIZE): Document. + * basic-block.h (gcov_type): Define. + (struct edge_def): Use gcov_type for count field. + (struct basic_block_def): Likewise. + * defaults.h (GCOV_TYPE_SIZE): Define. + * final.c (end_final): Use GCOV_TYPE_SIZE. + * flow.c (dump_edge_info, dump_flow_info, dump_bb): Print count fields + using HOST_WIDEST_INT_PRINT_DEC. + * gcov-io.h (__fetch_gcov_type, __store_gcov_type, __read_gcov_type, + __write_gcov_type): New. + (store_long): Remove. + * gcov.c (gcov_type): Set default. + (struct adj_list): Use gcov_type for arc_count. + (bb_info): Use gcov_type for succ_count, pred_count and exec_count. + (create_program_flow_graph): Read arc_count properly. + (solve_program_flow_graph): 'total' is gcov_type. + (output_data): Line_counts is gcov_type, print it properly. + * libgcc2.c (struct bb): Counts is gcov_type. + (__bb_exit_func): Use __read_gcov_type and __write_gcov_type. + * profile.c (LONG_TYPE_SIZE, LONG_LONG_TYPE_SIZE): Set default. + (GCOV_TYPE_SIZE): Define. + (struct bb_info): succ_count and pred_count is gcov_type. + (compute_branch_probabilities): Use __read_gcov_type, + print read edges to the dump file. + (total): Is gcov_type. + (gen_edge_profiler): Use GCOV_TYPE_SIZE. + + 2001-06-14 Andrew Haley + + * optabs.c (emit_libcall_block): When using non-call exceptions, + don't mark libcalls never throwing. + + 2001-06-21 Stan Shebs + + * objc/objc-act.c (hash_init): Use xcalloc. + + 2001-06-21 Richard Henderson + + * flow.c (entry_exit_blocks): Initialize frequency. + (split_block): Copy it. + (dump_flow_info): Dump it. + + Thu Jun 21 22:15:10 2001 J"orn Rennecke + + * sh.c (barrier_align): Also recognize branch-around-a-jump-sequence + from machine-depedent_reorg for purposes of alignment supression + when no delay slot insn has been added. + + 2001-06-21 Neil Booth + + * cppmacro.c (make_string_token): Null terminate. + + 2001-06-21 DJ Delorie + + * config/alpha/alpha.h (struct machine_function): Remove. + * config/alpha/alpha.c (integrate.h): Include. + (override_options): Don't set up machine_status hooks. + (alpha_init_machine_status): Remove. + (alpha_mark_machine_status): Remove. + (alpha_free_machine_status): Remove. + (alpha_return_addr): Use get_hard_reg_initial_val. + (alpha_gp_save_rtx): Likewise. + (alpha_ra_ever_killed): Use has_hard_reg_initial_val. + + 2001-06-20 Aldy Hernandez + + * config/sh/sh.md (interrupt_function): Use + current_function_interrupt. + (define_delay): Schedule in delay slot if TARGET_SH3, even if it is + an interrupt function. + + * config/sh/sh.h (current_function_interrupt): Define extern. + + * config/sh/sh.c (current_function_interrupt): New global. + (sh_expand_prologue): Set current_function_interrupt. + + 2001-06-21 Phil Edwards + + * doc/install.texi: Add 'c' to list of --enable-languages choices. + + 2001-06-21 DJ Delorie + + * integrate.c (mark_hard_reg_initial_vals): Check for NULL. + + * integrate.c (ggc.h): Include. + (initial_value_pair, initial_value_struct, + setup_initial_hard_reg_value_integration): Add prototypes. + (expand_inline_function): Call + setup_initial_hard_reg_value_integration. + (has_func_hard_reg_initial_val, get_func_hard_reg_initial_val, + get_hard_reg_initial_val, has_hard_reg_initial_val): New functions + to keep track of values present at the start of a function. + (mark_hard_reg_initial_vals): New, for gc. + (setup_initial_hard_reg_value_integration): New. Sets up pseudo + mappings for initial values. + (emit_initial_value_sets): New. Emits code to set initial value + pseudos. + * integrate.h: Add prototypes for new functions. + * function.h (struct function): Add hard_reg_initial_vals field. + * function.c (integrate.h): Include. + (mark_function_status): Call + mark_hard_reg_initial_vals. + * toplev.c (integrate.h): Include. + (rest_of_compilation): Call emit_initial_value_sets. + + 2001-06-21 Stan Shebs + + * doc/contrib.texi, doc/cpp.texi, doc/cppinternals.texi, + doc/extend.texi, doc/gcc.texi, doc/install.texi, doc/invoke.texi, + doc/objc.texi, doc/tm.texi: Use the correct name "Objective-C" + everywhere instead of "Objective C". + + 2001-06-21 Joseph S. Myers + + * doc/c-tree.texi, doc/contrib.texi, doc/extend.texi, + doc/gcc.texi, doc/install-old.texi, doc/install.texi, + doc/invoke.texi, doc/rtl.texi: Consistently use "front end" and + "back end" as nouns and "front-end" and "back-end" as adjectives. + + Wed Jun 20 21:53:35 CEST 2001 Jan Hubicka + + * predict.c (estimate_probability): Fix loop bounds. + + Wed Jun 20 19:10:48 CEST 2001 Jan Hubicka + + * toplev.c (rest_of_compilation): Run mark_constant_function + before profile-arcs. + + Wed Jun 20 19:08:18 CEST 2001 Jan Hubicka + + * predict.c (estimate_loops_at_level, propagate_freq + estimate_bb_frequencies, count_to_freqs): New functions. + (estimate_probability): Call estimate_bb_frequencies. + * basic-block.h (basic_block_def): Add field "freq". + (BB_FREQ_MAX): New constant. + + Wed Jun 20 17:02:50 2001 J"orn Rennecke + + * sh.c (barrier_align): Don't ask for alignment when seeing a + branch-around-a-jump from machine_dependent_reorg. + + Wed Jun 20 08:35:02 2001 Jeffrey A Law (law@cygnus.com) + + * ssa.c (rename_block): Update parameter to remove_phi_alternative + (convert_from_ssa): Do create REG_DEAD and REG_UNUSED notes when + re-running life analysis. + + 2001-06-20 Stan Shebs + + * objc/objc-act.c (hash_init): Assume xmalloc always succeeds, + also use memset to clear the hash tables. + (hash_enter): Assume xmalloc always succeeds. + (hash_add_attr): Ditto. + (continue_class): Ditto. + + 2001-06-20 Michael Meissner + + * builtins.c (predict.h): Include. + (expand_builtin_expect): Update comment. + (expand_builtin_expect_jump): New function to expand + __builtin_expect inside of a conditional jump expansion. + + * expr.c (do_jump): Special case __builtin_expect (, 0) and + __builtin_expect (, 1). + + * Makefile.in (builtins.o): Depend on $(PREDICT_H). + + * rtl.h (expand_builtin_expect_jump): Add prototype. + + 2001-06-19 Geoffrey Keating + + * doc/rtl.texi (Machine Modes): Correct description of + floating-point modes on machines with non-8-bit bytes. + + 2001-06-19 Bernd Schmidt + + * regmove.c (optimize_reg_copy_3): Do nothing if previous insn + carries a REG_EQUIV note. If it carries REG_EQUAL, delete the + note. + + Tue Jun 19 07:53:52 2001 Jeffrey A Law (law@cygnus.com) + + * ssa.c (remove_phi_alternative): Remove declaration. No longer + static. Second argument is a pointer to a basic block structure, + not a basic block index. + (convert_to_ssa): Do not remove dead code. + (convert_from_ssa): Do not remove dead code to create death notes. + * ssa.h (remove_phi_alternative): Declare. + + * flow.c (delete_unreachable_blocks): Fix patch error in + previous change (call to find_unreachable_blocks was lost). + + * ssa.c (ssa_uses): Remove definition. + (apply_delayed_renames): Don't grow ssa_uses. + (rename_block): Remove comment related to ssa_uses. + (rename_registers): Do not initialize ssa_uses. + (convert_from_ssa): Do not free ssa_uses. + + * ssa-dce.c: Renamed from dce.c. + * Makefile.in (OBJS): Replace dce.o with ssa-dce.o + (dependencies): Replace dce.c with ssa-dce.c and dce.o with + ssa-dce.o. + + 2001-06-19 Eric Christopher + + * emit-rtl.c (gen_lowpart_common): Do not assume that SFmode + and DFmode are UNITS_PER_WORD and 2*UNITS_PER_WORD. Use + GET_MODE_BITSIZE instead of GET_MODE_SIZE/UNITS_PER_WORD. + + Tue Jun 19 01:52:27 2001 J"orn Rennecke + + * sh.c (output_branch): Delete bogus code. + + * sh.c (initial_elimination_offset): + Fix FROM == RETURN_ADDRESS_POINTER_REGNUM case. + + Mon Jun 18 12:50:49 2001 Jeffrey A Law (law@cygnus.com) + + * flow.c (find_unreachable_blocks): New function. + (delete_unreachable_blocks): Use find_unreachable_blocks. + * basic-block.h (find_unreachable_blocks): Declare. + + * dce.c (eliminate_dead_code): Fix formatting glitch. + + 2001-06-18 Jason Merrill + + * c-common.h (RETURN_NULLIFIED_P): New macro. + * c-semantics.c (genrtl_return_stmt): Check it. + + * expr.c (clear_storage): Set TREE_NOTHROW on the decl for memset. + (emit_block_move): Likewise. + + Mon Jun 18 17:27:24 CEST 2001 Jan Hubicka + + * unroll.c: Include predict.h. + (unroll_loop): Drop prediction notes on preconditioning. + * predict.def (PRED_LOOP_PRECONDITIONG, PRED_LOOP_CONDITION): + New; add comments on the others. + * Makefile.in: (unroll.o): Add dependency on predict.h. + * loop.c (strength_reduce): Fix branch prediction. + + Mon Jun 18 17:26:56 CEST 2001 Jan Hubicka + + * stmt.c (emit_case_nodes): Optimize test whether index is in given + interval. + + Mon Jun 18 15:43:10 CEST 2001 Jan Hubicka + + * predict.c (estimate_probability): Do not bail out early + when note is present. + (combine_predictions_for_insn): Fix note removal code. + + 2001-06-18 Ben Elliston + + * except.c (resolve_fixup_regions): Initialise "cleanup". + + 2001-06-17 Neil Booth + + * tm.texi: Document STDC_0_IN_SYSTEM_HEADERS. + + Sat Jun 16 20:20:39 2001 Richard Kenner + + * expr.c (expand_expr, case ADDR_EXPR): If taking address of SAVE_EXPR, + use put_var_into_stack. + + 2001-06-16 Franz Sirl + + * gccspec.c (lang_specific_driver): If compiling ObjC, add + -shared-libgcc when necessary. + * Makefile.in (gccspec.o): Compile with DRIVER_DEFINES. + + 2001-06-16 Daniel Berlin + + * bitmap.h: Add dump_bitmap, bitmap_zero, bitmap_union_of_diffs, + bitmap_a_or_b, bitmap_a_and_b, bitmap_first_set_bit, + bitmap_last_set_bit. All for compatibility with sbitmap's. + + *bitmap.c (bitmap_zero): New function. + (bitmap_union_of_diffs): New function. + (bitmap_first_set_bit): New function. + (bitmap_last_set_bit): New function. + + 2001-06-16 Neil Booth + + * cpp.texi, invoke.texi: Update. + * cpp.1, gcc.1: Regenerate. + + Sat Jun 16 12:45:20 CEST 2001 Jan Hubicka + + * i386.md (minsf): Fix splitter. (PR fortran/3191) + + 2001-06-16 Neil Booth + + * doc/cpp.texi: Update. + * doc/cpp.1: Regenerate. + + 2001-06-15 Loren J. Rittle + + * doc/install.texi: Use correct markup hints. + + Fri Jun 15 18:05:22 2001 Richard Kenner + + * function.c (gen_mem_addressof): Handle case where DECL is SAVE_EXPR. + + * explow.c (expr_size): If DECL and size specified, use it. + + 2001-06-15 Zack Weinberg + + * doc/cpp.texi: Formatting corrections. + Correct buggy example of use of __GNUC__ etc. + Clarify $ in identifiers. + * doc/cpp.1: Regenerate. + + Fri Jun 15 19:35:38 CEST 2001 Jan Hubicka + + * optabs.c (expand_twoval_binop): Avoid undefined behaviour. + + 2001-06-15 Rainer Orth + + * doc/install.texi (Specific, alpha*-*-*): Fixed Tru64 UNIX + etc. spelling. + (Specific, alpha-*-osf1): Renamed to alpha*-*-osf*. + Added Tru64 UNIX V5.1 bootstrap hints. + (Specific, alpha*-*-osf*): Removed old section, obsolete. + + 2001-06-15 Andreas Jaeger + + * doc/install.texi (Specific): Mention that glibc cannot be + compiled with GCC 3.0. + + 2001-06-14 Andrew Haley + + * combine.c (nonzero_bits): Don't optimize away division by + zero. + + 2001-06-15 Zack Weinberg + + * doc/cpp.texi: Revised and brought up to date. + * doc/cpp.1: Regenerate. + + 2001-06-15 Loren J. Rittle + + * doc/install.texi: Update --enable-threads to match reality. + + 2001-06-15 Michael Hayes + + * doc/install.texi: Update for C4x. + * README.C4X: Remove. + + 2001-06-14 Joseph S. Myers + + * doc/c-tree.texi, doc/contrib.texi, doc/extend.texi, + doc/gcc.texi, doc/install.texi, doc/invoke.texi, doc/md.texi, + doc/objc.texi, doc/rtl.texi, doc/tm.texi: Fix spelling and typos. + Consistently use "built-in" and "bit-field". Minor logical markup + improvements. + * doc/gcc.1: Regenerate. + + 2001-06-14 Richard Henderson + + * config/mips/mips.md (exception_receiver): New. + + 2001-06-14 Daniel J. Berlin + + * doc/gcc.texi: Update passes documentation to be more in tune + with reality. + + Thu Jun 14 15:38:28 CEST 2001 Jan Hubicka + + * i386.c (ix86_expand_prologue): Fix merging conflict. + + 2001-06-14 Joseph S. Myers + + * doc/c-tree.texi, doc/contrib.texi, doc/extend.texi, + doc/gcc.texi, doc/gcov.texi, doc/install-old.texi, + doc/invoke.texi, doc/md.texi, doc/rtl.texi, doc/tm.texi: Use more + logical markup. Use TeX quotes and dashes. Use @dots{} and + @minus{}. Avoid spaces inside @var. Update last modification + date in gcc.texi. + * doc/gcc.1, doc/gcov.1: Regenerate. + + Thu Jun 14 12:44:15 CEST 2001 Jan Hubicka + + * i386.c (x86_accumulate_outgoing_args, x86_prologue_using_move, + x86_epilogue_using_move): New global variables. + (override_options): Enable ACCUMULATE_OUTGOING_ARGS if preferred. + (ix86_emit_save_regs_using_mov): New static function. + (ix86_expand_prologue, ix86_expand_epilogue): Use moves if preferred. + * i386.h (MASK_MMX, MASK_SSE, MASK_SSE2, MASK_128BIT_LONG_DOUBLE, + MASK_MIX_SSE_I387): Renumber. + (MASK_NO_ACCUMULATE_OUTGOING_ARGS): New. + (x86_accumulate_outgoing_args, x86_prologue_using_move, + x86_epilogue_using_move): Declare. + (TARGET_PROLOGUE_USING_MOVE, TARGET_EPILOGUE_USING_MOVE): New. + + 2001-06-13 John David Anglin + + * inclhack.def (hpux10_cpp_pow_inline): New hack. + + 2001-06-13 Richard Henderson + + * ifcvt.c (dead_or_predicable): Fix return value last patch. + + 2001-06-13 Mark Mitchell + + * NEWS: Remove. + + 2001-06-13 Richard Henderson + + * ifcvt.c (cond_exec_get_condition): Use reversed_comparison_code. + (cond_exec_process_if_block, dead_or_predicable): Likewise. + + 2001-06-13 Rainer Orth + + * mips-tfile.c (copy_object): Always pass indexNil for symbol + table index. + + 2001-06-13 Kazu Hirata + + * config/h8300/h8300.h (OK_FOR_T): Remove. + (EXTRA_CONSTRAINT): Do not use OK_FOR_T. + * config/h8300/h8300.md: Remove alternatives involving inc and dec + in the helper patterns for addhi3 and addsi3. + + 2001-06-13 Phil Edwards + + * doc/contrib.texi: Link to libstdc++'s thanks.html for now. + + 2001-06-13 Zack Weinberg + + * Makefile.in: Move _bb and __gcc_bcmp to LIB2FUNCS_ST. + * libgcc-std.ver: Take out __bb* and __gcc_bcmp. + + * config/t-slibgcc-elf-ver, config/t-slibgcc-sld, + config/alpha/t-osf4, config/mips/t-iris6: Extract all + references to @shlib_map_file@, @shlib_objs@, or + @shlib_base_name@ to Makefile variables. + Bump soname version of libgcc to 1. + + 2001-06-13 Joseph S. Myers + + * doc/install.texi: Use more logical markup. Include @node + commands in the source when generating any non-HTML. + + 2001-06-13 Joseph S. Myers + + * README: Remove. Some of the contents moved to ../README. + + 2001-06-13 Alexandre Oliva + + * doc/install.texi (--enable-shared): List package names + recognized by GCC. + + 2001-06-13 Alexandre Oliva + + * doc/install.texi (ix86-*-solaris*): Removed, outdated. + (*-*-solaris*): Document problem in /bin/sh that affects + configuring libraries. + (sparc-*-solaris*): Recommend GNU binutils 2.11.1 or vendor tools. + (*-sun-solaris2.8): Document linker problem that explains why + libjava is disabled by default. + + 2001-06-09 Mark Mitchell + + Revert this patch: + * toplev.c (rest_of_compilation): Remove dead code before + purge_addressof. + + 2001-06-12 Alexandre Oliva + + Reverted: + 2001-06-07 Nathan Sidwell + * configure.in (sparc*-*-*): Check assembler R_SPARC_UA32 support. + * configure: Rebuilt. + + 2001-06-12 Jim Wilson + + * loop.c (strength_reduce): Move bl->all_reduced set before + check_ext_dependant_givs call. + (check_ext_dependant_givs): Clear bl->all_reduced when ignoring givs. + + 2001-06-12 Alexandre Oliva + + * doc/extend.texi (Function Attributes): Document SH's sp_switch + and trap_exit. + + 2001-06-13 Joseph S. Myers + + * doc/invoke.texi: Use more logical markup. Use TeX quotes, + dashes and @dots{}. + + 2001-06-12 Richard Henderson + + * config/i386/i386.c (ix86_expand_prologue): Always use + gen_pro_epilogue_adjust_stack; update arguments. + (ix86_expand_epilogue): Likewise. + (ix86_emit_epilogue_esp_adjustment): Remove. + (ix86_adjust_cost): Remove pro_epilogue_adjust_stack hack. + * config/i386/i386.md (pro_epilogue_adjust_stack): Use a BLKmode + clobber of scratch memory instead of a modification of EBP as the + barrier. Update all peepholes to match. + + 2001-06-12 Joseph S. Myers + + * doc/gcc.texi: Change the font used for @def... commands to a + fixed width font. + * doc/extend.texi: Use more logical markup. Use "built-in" + instead of "builtin". Use @deftypefn to mark up built-in + functions; specify their types in the @deftypefn and not in the + descriptive text. Use TeX quotes and dashes. Add more index + entries. + + 2001-06-12 lars brinkhoff + + * gcc.texi (HOST_BITS_PER_LONGLONG): Document. + (DIR_SEPARATOR_2): Likewise. + + 2001-06-12 Joseph S. Myers + + * doc/install.texi (--exec-prefix, --bindir, --libdir, + --with-slibdir, --infodir, --mandir, --with-cpp-install-dir): + Document. + (--enable-cpp): Change to document --disable-cpp instead; update + to reflect current default. + (--without-fast-fixincludes): Remove documentation. + (Final install): Document installation directories in more + detail. Document use of make dvi. + + Tue Jun 12 19:01:43 CEST 2001 Jan Hubicka + + * recog.c (validate_replace_rtx_1): Fix previous patch. + + Tue Jun 12 17:25:39 CEST 2001 Jan Hubicka + + * recog.c (validate_replace_rtx_1): Do plus_constant call always. + + Tue Jun 12 17:24:07 CEST 2001 Jan Hubicka + + * simplify-rtx.c (simplify_subreg): Allow volatile memory + to be subregged in case we don't have move instruction. + + Tue Jun 12 12:20:12 CEST 2001 Jan Hubicka + + * loop.c: Include predict.h + (strength_reduce): Drop branch prediction note in case + number of iterations is known. + * predict.def (PRED_LOOP_ITERATIONS): new. + * Makefile.in (loop.o): Add dependency on predict.h + + 2001-06-12 Kaveh R. Ghazi + + * c-decl.c (grokdeclarator): Use INTEGRAL_TYPE_P. + + * c-typeck.c (c_start_case): Likewise. + + 2001-06-12 Mark Mitchell + + * expr.c (store_field): Don't set MEM_ALIAS_SET for a field + in a structure at a variable address. + + 2001-06-12 Joseph S. Myers + + * doc/gcov.texi: Use more logical markup. + + 2001-06-11 Mark Mitchell + + * unroll.c (initial_reg_note_copy): Use PUT_REG_NOTE_KIND and + REG_NOTE_KIND, not PUT_MODE and GET_MODE. + (final_reg_note_copy): Remove REG_WAS_0 notes that are no longer + valid. + + 2001-06-11 Stan Shebs + + * config/darwin.h (ASM_FILE_END): Remove decl of language_string. + + 2001-06-11 Stephane Carrez + + * config/m68hc11/m68hc11.md ("*lshrdi3_const32"): Mark the clobber + as an early clobber to make sure it is not used by reload in + one of the operands. + + 2001-06-11 Mark Mitchell + + * doc/c-tree.texi: Update information about flag_honor_std. + * doc/install.texi: Note that binutils is required on HPUX 11. + * doc/invoke.texi (-fhonor-std): Note that -fno-honor-std is + now the default. + + * config/mips/abi64.h (RETURN_IN_MEMORY): Fix handling of + variable-sized types. + + 2001-06-11 Joseph S. Myers + + * doc/md.texi: Use TeX dashes and quotes. + + 2001-06-11 Joseph S. Myers + + * doc/rtl.texi: Reference manual chapter about trees. + + 2001-06-11 Rainer Orth + + * config/mips/iris6.h (NO_BUILTIN_WINT_TYPE): Define. + (WINT_TYPE): Override. + (WINT_TYPE_SIZE): Likewise. + (SUBTARGET_CPP_SIZE_SPEC): Define __WINT_TYPE__ as appropriate. + + * config/sparc/sol2.h (WINT_TYPE): Define. + (WINT_TYPE_SIZE): Likewise. + + * config/sparc/sol2-sld-64.h (NO_BUILTIN_WINT_TYPE): Define. + (WINT_TYPE): Override. + (WINT_TYPE_SIZE): Likewise. + (CPP_ARCH32_SPEC): Add __WINT_TYPE__ definition. + (CPP_ARCH64_SPEC): Likewise. + + 2001-06-11 Richard Henderson + + * unwind-dw2-fde.c (__deregister_frame_info): Don't play games + with alias attribute. + + * config/linux.h (CPLUSPLUS_CPP_SPEC): Use %(cpp) not $(cpp_cpu). + * config/alpha/linux.h (CPLUSPLUS_CPP_SPEC): Likewise. + + 2001-06-11 Franz Sirl + + * config/rs6000/linux.h (CPLUSPLUS_CPP_SPEC): New. + + 2001-06-11 Stan Shebs + + * config/darwin.c (darwin_encode_section_info): Rewrite to simplify + and fix coding mistakes. + + 2001-06-11 Nick Clifton + + * config/m32r/m32r.md (movstrsi_internal): Do not expect a + return string from m32r_output_block_move. + * config/m32r/m32r-protos.h: Make m32r_output_block_move a + void function. + * config/m32r/m32r.h (INT32_P): Rename to UNIT32_P and remove + integer overflow. + (ROUND_ADVANCE): Remove signed/unsigned conflict. + * config/m32r/m32r.c: Declare prototypes for static functions. + (move_src_operand): Replace INT32_P with UINT32_P. + (function_arg_partial_nregs): Fixed signed/unsigned conflict + in initialisation of 'size'. + (m32r_sched_reord): Remove redundant declarations of 'code'. + (m32r_output_block_move): Change to a void function. + (m32r_encode_section_info): Cast return of + TREE_STRING_POINTER to avoid compile time warning. + + 2001-06-11 Richard Henderson + + * config/alpha/osf5.h (TARGET_LD_BUGGY_LDGP): New. + * config/alpha/alpha.h (TARGET_LD_BUGGY_LDGP): Default. + (struct machine_function): Add gp_save_rtx. + * config/alpha/alpha.c (alpha_mark_machine_status): Mark it. + (alpha_gp_save_rtx): New. + * config/alpha/alpha-protos.h: Declare it. + * config/alpha/alpha.md (exception_receiver): Make an expander. + Use alpha_gp_save_rtx if TARGET_LD_BUGGY_LDGP. + + 2001-06-11 Richard Henderson + + * config/alpha/osf.h (LINK_SPEC): Hide _GLOBAL_* symbols. + + 2001-06-11 Rainer Orth + + * configure.in: Align --help messages. + Remove trailing full stops. + Consistently use lower case. + Fix DWARF 2 spelling. + * configure: Rebuilt. + + 2001-06-11 Rainer Orth + + * config/alpha/alpha.h (CPP_SPEC): Don't define __LANGUAGE_C and + variants for .cpp/.cp/.c++ files. + Move definition of __LANGUAGE_C_PLUS_PLUS ... + (CPLUSPLUS_CPP_SPEC): ... here. + + Mon Jun 11 15:47:45 CEST 2001 Jan Hubicka + + * jump.c (duplicate_loop_exit_test): Fix loop header heuristics. + + 2001-06-11 Joseph S. Myers + + * c-decl.c (store_parm_decls): When comparing types in an + old-style function declaration with those from a previous + prototype, compare the unqualified versions of parameter types. + Fixes PR c/3116. + + 2001-06-11 Joseph S. Myers + + * doc/objc.texi: Use more logical markup. Use TeX dashes. + + 2001-06-11 Joseph S. Myers + + * doc/c-tree.texi: Use more logical markup. + + 2001-06-11 Joseph S. Myers + + * c-decl.c (xref_tag): Don't return previous tags of wrong type. + + 2001-06-11 Aldy Hernandez + + * loop.c (scan_loop): Do not combine asm statements. + + 2001-06-11 Michael Hayes + + * simplify-rtx.c (simplify_subreg): Fix offset calculation + for complex values within a CONCAT. + + 2001-06-11 Joseph S. Myers + + * doc/install.texi: Update details of what components are included + in the GCC distribution. Update default directory for g++ + includes. Update documentation relating to old libio. Adjust + documentation on DejaGnu environment variables. Remove + documentation of --enable-cpplib. + + 2001-06-11 Joseph S. Myers + + * doc/contrib.texi: Fix alphabetical order. Fix typos. Improve + markup. + + 2001-06-10 Richard Henderson + + * ifcvt.c (life_data_ok): New. + (merge_if_block): Use it to determine whether to update + global_live_at_end. + (if_convert): Set it. + + 2001-06-10 Richard Henderson + + * config/alpha/osf5.h (ASM_OLDAS_SPEC): Add -c. + + 2001-06-10 Alexandre Oliva + + * doc/invoke.texi (MN10300 Options): Document -mno-crt0. + (SH Options): Document -mieee. + * doc/install.texi (Final install): Remove obsolete information + about installing cross compilers. + * doc/gcc.1: Rebuilt. + + 2001-06-10 Richard Henderson + + * config/alpha/alpha.c (override_options): Set align_loops, + align_jumps, and align_functions. + * config/alpha/alpha.h (FUNCTION_BOUNDARY): Set to 32 bits. + (LOOP_ALIGN, LABEL_ALIGN_AFTER_BARRIER): Remove. + + 2001-06-11 Michael Hayes + + * emit-rtl.c (gen_lowpart_common): Do not assume that SFmode and DFmode + are one and two words in size. + + 2001-06-10 Richard Henderson + + * doc/invoke.texi (Optimization Options): Document -fpeephole2. + (Code Generation Options): Document -fnon-call-exceptions. + + 2001-06-10 Mark Kettenis + + * config/i386/gnu.h (MD_FALLBACK_FRAME_STATE_FOR): Undefine. + + 2001-06-10 Stephane Carrez + + * m68hc11.md (peepholes): Remove unused and wrong peepholes. + + 2001-06-10 Mark Mitchell + Gabriel Dos Reis + + * Makefile.in (c-parse.o): Depend on diagnostic.h + (dwarf2out.o): Likewise. + + * dwarf2out.c: #include diagnostic.h + + * toplev.h (warningcount, errorcount, sorrycount): Remove + declarations. + + * toplev.c (warningcount, errorcount, sorrycount): Remove + definitions. + + * diagnostic.h (struct output_buffer): Reorder fields. + (diagnostic_kind_count): New macro. + (errorcount, warningcount, sorrycount): Define as macros. + (diagnostic_report_warnings_p): New macro. + (output_state): Add diagnostic_count field. + + * diagnostic.c (warningcount, errorcount, inhibit_warnings): + Remove tentative declaration. + (count_error): Use diagnostic_report_warnings_p. + + * c-parse.in: #include diagnostic.h + + 2001-06-10 Stephane Carrez + + * config/m68hc11/m68hc11.md ("extendhisi2"): Fix constraints to + prefer a memory for operand 1. + ("*addsi3"): Fix constraints, the '!' was too strong. + ("*addsi3_split"): Accept soft register and split accordingly. + + 2001-06-10 Stephane Carrez + + * config/m68hc11/m68hc11-protos.h (m68hc11_initialize_trampoline): + Move definition in the RTX_CODE section. + + 2001-06-10 Stephane Carrez + + * config/m68hc11/m68hc11.h (RETURN_ADDR_RTX): Define the return + address as relative to the argument pointer. + + Sun Jun 10 10:58:53 CEST 2001 Jan Hubicka + + * predict.def (PRED_OPCODE): Place before call and error_return. + + Sun Jun 10 10:00:17 CEST 2001 Jan Hubicka + + * predict.def (PRED_CALL, PRED_ERROR_RETURN): New. + * predict.c (estimate_probability): Calculate dominance + information; improve detection of NORETURN heuristics; + add call/error_return heuiristics; tweak comparison heuristics + to recognize -1. + + 2001-06-09 Alexandre Oliva + + * doc/invoke.texi (C Dialect Options): Document -aux-info. + (Debugging Options): Document -print-multi-directory and + -print-multi-lib. + * doc/gcc.1: Rebuilt. + + * toplev.c (independent_decode_option): Require `=' between + `-aux-info' and filename in the same argument. + * gcc.c: Don't pass -aux-info=filename twice. + + 2001-06-09 Mark Mitchell + + * expr.c (expand_expr, case ARRAY_REF): Do not replace + an array element with the known initializing value if it has + side-effects. + + * toplev.c (rest_of_compilation): Remove dead code before + purge_addressof. + + 2001-06-09 Neil Booth + + * cppinit.c (print_help): Document -fpreprocessed. + * invoke.texi: Similarly. + + Sun Jun 10 00:35:37 CEST 2001 Jan Hubicka + + * predict.def: New file. + * predict.h: New file. + * predict.c: Include predict.h. + (predictor_info): New structure and array. + (predict_edge, predict_insn): Rewrite; make global. + (predict_edge_def, predict_insn_def): New global functions. + (dump_prediction, combine_predictions_for_insns): New + static functions. + (estimate_probability): Change calls to predict_edge + to predict_edge_def and calls to predict_insn to predict_insn_def; + combine probabilities. + (expected_value_to_br_prob): Behave as predictor. + * rtl.h (REG_BR_PRED): Update coment. + (invert_br_probabilities): New. + * jump.c: Include predict.h + (duplicate_loop_exit_test): Drop branch prediction notes. + (invert_jump): Use invert_br_probabilities. + * Makefile.in: Add dependency on predict.h for jump and predict pass. + * ifcvt.c (dead_or_predicable): Use invert_br_probabilities. + * combine.c (distribute_notes): Handle BR_PRED. + + Sat Jun 9 23:29:41 CEST 2001 Jan Hubicka + + * predict.c (predict_insn, predict_edge): New static functions. + (estimate_probability): Revamp to use new functions; + fix loop header heruistics; add loop exist heruistics + + 2001-06-09 Alexandre Oliva + + * config.gcc: Re-enable bi-arch sparc on Solaris 7 and above. + + 2001-06-09 Peter Jakubek + + * config/m68k/m68k.md (ashrdi_const): Fix right shift by 16. + + 2001-06-09 John David Anglin + + * vax.h (NOTICE_UPDATE_CC): Set CC_NO_OVERFLOW in cc_status.flags + for integer operations that don't update C bit. + + 2001-06-09 Nicola Pero + + * gthr-posix.h (__gthread_objc_init_thread_system): If + pthread_key_create fails, it's not clear what the return value is. + This obvious fix makes sure it always returns -1 if a problem + occurs. + + 2001-06-09 Joseph S. Myers + + * doc/gcc.texi: Use @defcodeindex for the index of options. Add + more index entries. Use more logical markup where appropriate. + Use TeX quotes and dashes. + + 2001-06-09 Benjamin Kosnik + + * unwind-pe.h: Conditionally qualify references to abort with + std::. + + 2001-06-09 Julian Foad + + * doc/invoke.texi: Remove superfluous text. + + 2001-06-08 Richard Henderson + + * config/alpha/linux.h (CPLUSPLUS_CPP_SPEC): New. + (LIB_SPEC): Mirror config/linux.h version. + + 2001-06-08 Richard Henderson + + * except.c (get_exception_pointer, get_exception_filter): Take a + struct function. Update all callers. + * except.h (get_exception_pointer): Update declaration. + * expr.c (expand_expr): Update get_exception_pointer call. + * integrate.c (expand_inline_function): Remap the exception pointer + from callee to caller. + + 2001-06-08 Mark Mitchell + + * c-decl.c (grokdeclarator): Make the TREE_TYPE for declarations + accurately reflect its cv-qualification. + * c-typeck.c (type_lists_compatible_p): Ignore the top-levl + cv-qualifiers on function types. + + 2001-06-08 Mark Mitchell + + * basic-block.h: Improve comments. + * except.c (expand_eh_region_end_allowed): Remove redundant call + to do_pending_stack_adjust. + * flow.c (life_analysis): Fix typo in comment. + (calculate_global_regs_live): Add documentation. + (mark_set_1): Likewise. + (debug_regset): Likewise. + * doc/rtl.texi (cond_exec): Document it. + + Fri Jun 8 21:52:51 CEST 2001 Jan Hubicka + + * i386.h (CONST_COSTS): set cost of constants representable in + immediate fields to 0. + + Fri Jun 8 21:34:54 CEST 2001 Jan Hubicka + + * function.c (diddle_return_value): Kill code to determine + return value before expand_function_end. + (expand_function_end): Delay call to clobber_return_register + after fucntion return value is computed. + + Re-install temporary reverted patch: + * toplev.c (rest_of_compilation): Call split_all_insns + before reg-stack and shorten-branches. Do shorten-branches + after reg-stack. + * final.c (shorten_branches): Remove insn splitting code. + + 2001-06-08 Joseph S. Myers + + * doc/gcc.texi, doc/invoke.texi: Add index of command line + options. Use @opindex to index them rather than other indexing + commands. Use @var{...} instead of <...>. Avoid spaces in names + inside @var. Don't use @kindex to index escape sequences in + source code. + + 2001-06-08 Jason Merrill + + * stmt.c (current_nesting_level): New fn. + * tree.h: Declare it. + * c-semantics.c (genrtl_compound_stmt): Use it. + + * dbxout.c (dbxout_symbol): Use DECL_RTL_SET_P. + + 2001-06-08 Jakub Jelinek + + * jump.c (mark_modified_reg): Allow jump threading if condition + codes are represented by a hard register. + + 2001-06-08 Jakub Jelinek + + * config/ia64/ia64.c (ia64_function_arg): Use [SDT]Fmode as gr_mode + for complex floats passed to unprototyped functions. + + 2001-06-08 Mark Mitchell + + * except.c (expand_eh_region_end_allowed): Call + do_pending_stack_adjust as necessary. + + Fri Jun 8 14:16:33 CEST 2001 Jan Hubicka + + * function.c (clobber_return_register): Clobber the pseudo return + register too. + + * sibcall.c (skip_unreturned_value): New function. + (call_ends_block_p): Use it. + + * recog.c (split_insn): Break out from ... + (split_all_insns): ... here; do not use basic block information + when it is broken. + + Thu Jun 7 18:27:53 CEST 2001 Jan Hubicka + + * simplify-rtx.c (simplify_subreg): Fix verification of + combined subreg. + + 2001-06-08 Rainer Orth + + * config/mips/mips.h (CPP_SPEC): Simplify .s/.S handling. + Don't define _LANGUAGE_C and variants for .cpp/.cp/.c++ files. + Move definition of _LANGUAGE_C_PLUS_PLUS ... + (CPLUSPLUS_CPP_SPEC): ... here. + Fixes PRs c++/3047, target/441. + + 2001-06-08 Gerald Pfeifer + + * doc/install.texi2html (MAKEINFO): Keep value if set already. + + 2001-06-08 Joseph S. Myers + + * doc/gcc.texi: Add trailing slash to URL. + + 2001-06-07 Stan Shebs + + * config/darwin.h (ENCODE_SECTION_INFO): Define. + (REDO_SECTION_INFO_P): Ditto. + (STRIP_NAME_ENCODING): Ditto. + (ASM_DECLARE_OBJECT_NAME): Use ENCODE_SECTION_INFO. + (ASM_OUTPUT_ALIGNED_DECL_LOCAL): Ditto. + (ASM_OUTPUT_LABELREF): Use STRIP_NAME_ENCODING. + (GEN_LAZY_PTR_NAME_FOR_SYMBOL): Ditto. + * config/darwin.c: No longer include c-tree.h. + (machopic_classify_ident): Rewrite to use symbol encoding. + (lookup_name_darwin): Remove. + (machopic_non_lazy_ptr_name): Handle encoded symbols. + (machopic_stub_name): Use STRIP_NAME_ENCODING. + (machopic_validate_stub_or_non_lazy_ptr): Ditto. + (machopic_finish): Ditto, remove test of decl. + (update_non_lazy_ptrs): New function. + (darwin_encode_section_info): New function. + * config/darwin-protos.h: Declare it. + * config/rs6000/rs6000.c (machopic_output_stub): Use + STRIP_NAME_ENCODING. + + 2001-06-07 Mark Mitchell + + * tree.h (DECL_SOURCE_FILE): Improve documentation. + (DECL_SOURCE_LINE): Likewise. + + 2001-06-07 Loren J. Rittle + + * config/alpha/elf.h (MAKE_DECL_ONE_ONLY): Copy definition + from config/elfos.h. + + 2001-06-07 Phil Edwards + + * linux.h (CPLUSPLUS_CPP_SPEC): Move -D_GNU_SOURCE to here. + * pa/pa-linux.h: Allow CPLUSPLUS_CPP_SPEC to remain. + + 2001-06-08 Joseph S. Myers + + * doc/contrib.texi: Add copyright notice. + + 2001-06-08 Joseph S. Myers + + * doc/md.texi: Use four digit years in copyright notice. + + 2001-06-08 Joseph S. Myers + + * config.gcc: For $target_alias of athlon-*, set + target_cpu_default2=5. + + Thu Jun 7 16:17:40 2001 Richard Kenner + + * global.c (build_insn_chain): Allow ADDR_VEC or ADDR_DIF_VEC after + end of last block if last real insn is a JUMP_INSN. + + 2001-06-07 Joseph S. Myers + + * NEWS: Regenerate. + + 2001-06-07 Rainer Orth + + * gthr-posix.h (__gthread_objc_thread_detach): Simply cast + pthread_t to objc_thread_t. + (__gthread_objc_thread_id): Likewise. + + 2001-06-07 Rainer Orth + + * alpha/osf5.h (CPP_XFLOAT_SPEC): Override default definition. + (ASM_OLDAS_SPEC): Likewise. + + * alpha/osf.h (CPP_XFLOAT_SPEC): Define. + (CPP_SUBTARGET_SPEC): Use it. + (ASM_OLDAS_SPEC): Define. + (ASM_SPEC): Use it. + (SUBTARGET_EXTRA_SPECS): Define, declare the new specs above. + + 2001-06-07 Rainer Orth + + * config/alpha/alpha.c (alpha_va_arg): Handle TFmode, TCmode args, + passed by reference. + + 2001-06-07 Joseph S. Myers + + * doc/tm.texi (TARGET_SWITCHES, TARGET_OPTIONS): Adjust markup. + Document use of N_(...), and show it in examples. Note that + documentation should be added to invoke.texi. Avoid an overfull + hbox. + + Thu Jun 7 17:09:50 CEST 2001 Jan Hubicka + + * toplev.c (rest_of_compilation): Revert previous patch. + * final.c (shorten_branches): Likewise. + + 2001-06-07 Gerald Pfeifer + + * pself.c, pself1.c, pself2.c, pself3.c, pself4.c, pself5.c: + Remove. + + 2001-06-07 Joseph S. Myers + + * doc/install-old.texi: Remove more obsolete documentation. + + Thu Jun 7 13:20:14 CEST 2001 Jan Hubicka + + * expr.c (copy_blkmode_from_reg): Fix operand_subword_force call. + + Thu Jun 7 12:12:58 CEST 2001 Jan Hubicka + + * toplev.c (rest_of_compilation): Call split_all_insns + before reg-stack and shorten-branches. Do shorten-branches + after reg-stack. + * final.c (shorten_branches): Remove insn splitting code. + + 2001-06-07 Nathan Sidwell + + * configure.in (sparc*-*-*): Check assembler R_SPARC_UA32 support. + * configure: Rebuilt. + + 2001-06-07 Andreas Jaeger + + * emit-rtl.c (operand_subword): Remove unused variable. + + Wed Jun 6 14:51:05 CEST 2001 Jan Hubicka + + * i386.md (floatdi?f): Avoid usinf of SSE instructions + if TARGET_64BIT is false. + (floatdi?f_i386_only): New insn. + (floatdi?f_i386): Disable for !TARGET_64BIT. + + * (min?f, max?f splitters): Handle case where + operands are cross-matched. + + * i386.h (HI_REGISTER_NAMES): Remove redundant definition + (MMX_REGISTER_NAMES): Kill. + (PRINT_OPERAND): Fix comment. + (PRINT_REG): Likewise. + * i386.c (print_reg): Kill support for 'm' CODE; simplify. + (print_operand): Update comment; kill 'm'. + + * i386.c (x86_branch_hints): New global variable + (print_operand): Support outputting of branch prediction hints. + * i386.md (conditional jump patterns): Add branch prediction hints + to the template. + * i386.h (x86_branch_hints): Declare + (TARGET_BRANCH_PREDICTION_HINTS): New macro. + (PRINT_OPERAND_FUNCT_VALID_P): New. + * final.c (final_forward_branch_p): New function. + + 2001-06-06 Richard Henderson + + * flow.c (mark_used_reg): Clean up looping over multiple hard + registers. Do conditional life bits across multiple hard regs. + + 2001-06-05 Jeffrey D. Oldham + + * reload1.c (reload): Revert Schmidt's change so all USEs are not + deleted during reload. + + 2001-06-05 Mark Mitchell + + * c-semantics.c (genrtl_scope_stmt): Write out nested inline + functions here, instead of ... + * c-decl.c (c_expand_body): ... here. + + 2001-06-05 David O'Brien + + * config.gcc, config/sparc/bsd.h: Do not directly include + sparc/sparc.h. Instead do it via tm_file. + + 2001-06-05 Richard Henderson + + * dwarf2.h (DW_EH_PE_aligned): New. + * dwarf2asm.c (eh_data_format_name): Name it. + (dw2_asm_output_encoded_addr_rtx): Align for it. + * dwarf2out.c (output_call_frame_info): Handle it for personality + routine and LSDA pointers. + + * unwind-pe.h (DW_EH_PE_aligned): New. + (base_of_encoded_value): Handle it. + (read_encoded_value_with_base): Likewise. + * unwind-dw2-fde.c (base_from_object): Likewise. + (get_cie_encoding): Likewise. + + * config/alpha/elf.h: Remove ecoff commentary. + * config/alpha/osf.h (ASM_PREFERRED_EH_DATA_FORMAT): New. + + 2001-06-05 David O'Brien + + * config.gcc, config/i386/bsd386.h: Do not directly include + i386/386bsd.h. Instead do it via tm_file. + + 2001-06-05 David O'Brien + + * elfos.h (USING_ELFOS_H): Identify the use of elfos.h in the same + way svr4.h does. + + 2001-06-05 Pascal Obry + + * configure.in: Quote $enable_win32_registry in case the value has + spaces in it. + * configure: Ditto. + + 2001-06-05 Mark Mitchell + + * print-rtl.c (xspaces): Remove. + (print_rtx): Use printf field-width, rather than xpsaces, to + indent. + * toplev.c (main): Disable sibling-call optimization if we are + handling exceptions. + + 2001-06-05 Bernd Schmidt + + * reload1.c (reload): Delete all USEs generated during reload. + + 2001-06-05 scott snyder + + * gccbug.in: Fix typo. + + 2001-06-05 Andreas Jaeger + + * builtins.def: Fix definition of __builtin_cosf, it uses float as + parameter and return value. + + 2001-06-04 Anthony Green + + * config/sparc/elf.h (CPP_PREDEFINES): Don't assert cpu or + machine. This is now done in sparc.h. + + 2001-06-05 Nathan Sidwell + + Correct CVS resurrection of invoke.texi. + * doc/invoke.texi: Document new tree dump flags. + + 2001-06-05 Joseph S. Myers + + * c-typeck.c (build_c_cast): Use TYPE_MAIN_VARIANT when checking + for casting an aggregate to its own type. Fixes PR c/2735. + + 2001-06-05 Joseph S. Myers + + * doc/texinfo.tex: Update to version 2001-05-24.08. + + 2001-06-05 Nathan Sidwell + + * c-common.h (flag_dump_translation_unit): Remove. + (enum tree_dump_index): Define. + (TDF_ADDRESS, TDF_SLIM): New #defines. + (dump_node_to_file): Remove. + (dump_node): Make extern. Add flags. + (dump_flag, dump_enabled_p, dump_begin, dump_end, + dump_switch_p): Prototype. + * c-common.c (flag_dump_translation_unit): Remove. + * c-decl.c (c_decode_option): Remove -fdump-translation-unit + logic. Use dump_switch_p. + * c-dump.h (struct dump_info): Add node and user fields. + (dump_pointer): Declare. + * c-dump.c (dump_node): Make extern. Add flags. + (SOL_COLUMN, EOL_COLUMN, COLUMN_ALIGNMENT): New #defines. + (dump_new_line, dump_maybe_newline): Use them. + (dump_pointer): New function. + (dequeue_and_dump): Check TDF_SLIM before dumping a _DECL's + chain or function's body. Dump address, if TDF_ADDRESS set. + (dump_flag): Define. + (dump_node_to_file): Remove. + (struct dump_file_info): New struct. + (dump_files): New array. + (dump_begin, dump_end, dump_enabled_p, dump_switch_p): Define. + * c-lang.c (finish_file): Adjust dumping. + * toplev.h (dump_base_name): Make extern. + * invoke.texi: Document new flags. + + 2001-06-04 Mark Mitchell + + * c-tree.h (lang_decl): Add pending_sizes fields. + * c-decl.c (store_parm_decls): Save pending_sizes away for nested + functions. + (c_expand_body): Expand them. + (lang_mark_tree): Mark lang_decl:pending_sizes. + * function.c (expand_pending_sizes): New function, broken out + from ... + (expand_function_start): ... here. + * tree.h (expand_pending_sizes): Declare it. + + 2001-06-04 Loren J. Rittle + + * doc/install.texi: Update FreeBSD information. Generalize + and update information for alpha-based platforms using ELF. + + 2001-06-04 John David Anglin + + * c-decl.c (get_parm_info): Use INTEGRAL_TYPE_P. + (store_parm_decls): Likewise. + * c-typeck.c (convert_arguments): Likewise. + + 2001-06-04 Richard Henderson + + * sibcall.c (optimize_sibling_and_tail_recursive_call): Suppress + optimization if current_function_calls_setjmp. + + 2001-06-04 Joseph S. Myers + + * doc/c-tree.texi: Fix documentation of TREE_STRING_LENGTH for + wide strings. + + Mon Jun 4 20:44:25 CEST 2001 Jan Hubicka + + * simplify-rtx.c (simplify_subreg): Fix combining of + paradoxical subregs. + + Mon Jun 4 20:15:25 CEST 2001 Jan Hubicka + + * rtlanal.c (rtx_unsable_p): ADDRESSOF is stable. + (no_labels_between_p): Short circuit case beg==end. + + Mon Jun 4 20:03:05 CEST 2001 Jan Hubicka + + * rtlanal.c (operand_preference): Fix preference for objects. + + Mon Jun 4 20:00:40 CEST 2001 Jan Hubicka + + * gcse.c (handle_avail_expr): Be prepared to handle single_set + parallels. + + Mon Jun 4 19:59:46 CEST 2001 Jan Hubicka + + * combine.c (if_then_else_cond): Use simplify_subreg instead + of operand_subword. + * integreate.c (sub_constants): Likewise. + + Mon Jun 4 19:59:12 CEST 2001 Jan Hubicka + + * emit-rtl.c (constant_subword): Deprecate; remove most of code + and use simplify_gen_subreg. + + Mon Jun 4 19:55:23 CEST 2001 Lars Brinkhoff + + * sibcall.c (skip_copy_to_return_value): recognize the situation + when the called function's return value is copied into an + intermediate pseudo, and then into the calling functions return + value register. + + Mon Jun 4 16:50:33 CEST 2001 Jan Hubicka + + * simplify_rtx.c (simplify_subreg): Keep subregs on return values, + check CLASS_CANNOT_CHANGE_MODE before avoiding subreg on hard reg, + in case register wasn't OK previously, accept it now; allow + subregs of frame pointer if reload completed and frame pointer + is not needed. + + * combine.c (sombine_simplify_rtx): Fix comment; + use subreg_lowpart_offset instead of subreg_lowpart_p + (gen_lowpart_for_combine): Use subreg_lowpart_offset. + * rtl.h (subreg_lowpart_parts_p): Kill. + (subreg_lowpart_offset, subreg_highpart_offset): Declare. + * simplify-rtx.c (simplify_subreg): Use subreg_lowpart_offset. + * emit-rtl.c (gen_lowpart_SUBREG): Use subreg_lowpart_offset; + (gen_lowpart_common): Likewise. + (subreg_lowpart_p): Likewise. + (subreg_lowpart_parts_p): Kill. + (subreg_lowpart_offset, subreg_highpart_offset): New function. + + * emit-rtl.c (gen_lowpart_common): Use simplify_gen_subreg + to simplify SUBREG and REG. + (gen_highpart): Use simplify_gen_subreg for all simplifications. + + * emit-rtl.c (gen_realpart, gen_imagpart): Do not handle + CONCAT specially. + + * rtlanal.c (replace_regs): Use simplify_gen_subreg + + Mon Jun 4 09:21:19 2001 Richard Kenner + + * doc/c-tree.texi (ARRAY_REF): Say what type of expression must be. + (ARRAY_RANGE_REF): Added description. + + * tree.def (ARRAY_RANGE_REF): New code. + * alias.c (handled_component_p, can_address_p): Handle it. + * dwarf2out.c (loc_descriptor_from_tree): Likewise. + * explow.c (set_mem_attributes): Likewise. + * expr.c (expand_assignment, get_inner_reference): Likewise. + (expand_expr, expand_expr_unaligned, do_jump): Likewise. + * fold-const.c (operand_equal_p): Likewise. + * tree.c (staticp, stabilize_reference): Likewise. + * varasm.c (decode_addr_const): Likewise. + + Sun Jun 3 21:59:51 2001 Richard Kenner + + * reload.c (reload_inner_reg_of_subreg): Return 1 for PLUS. + (push_reload): Handle non-REG in reload_inner_reg_of_subreg case. + + 2001-06-03 kaz Kojima + + * gcc/config/sh/sh.c (print_operand_address, print_operand): Call + mark_constant_pool_use before output_addr_const. + (struct pool_node): New field wend. + (add_constant): Note a sequence of constants that are referenced + by a given label. + (pool_window_label, pool_window_last): New variables. + (dump_table): Emit a unspec_volatile representing the end of a + sequence of constants. + (mark_constant_pool_use): New function. + * gcc/config/sh/sh.md (UNSPECV_WINDOW_END): New constant. + (consttable_2): Add the second operand which flags whether + this consttable entry was used or not. + (consttable_4, consttable_8, consttable_sf, consttable_df): + Likewise. + (consttable_window_end): New insn. + + 2001-06-03 Alexandre Oliva + + * insn-addr.h (INSN_ADDRESSES_NEW): Make insn_uid__ unsigned. + Reformat according to coding standards. + + Warning removal. + * config/sh/sh.c (print_operand_address): Cast INTVAL to int. + (shl_and_kind): Cast wide constant. + (gen_far_branch): Define as static, as in declaration. + (barrier_align): Compute cache-line length as unsigned. Add + parentheses in initial credit computation. + (rounded_frame_size): Add parentheses. + (permanent_obstack): Remove declaration. Include ggc.h for + declaration of ggc_add_root_rtx(). + (get_free_reg): Removed declaration of unused variable reg. + (legitimize_pic_address): Mark mode argument as unused. + + 2001-06-03 Igor Shevlyakov + + * config/sh/sh.c (output_branch): Support for insn with lenght + attr 12 & 16 which represents cond branches outside +-4096 range. + + 2001-06-03 Alexandre Oliva + + * config/sh/lib1funcs.asm (ic_invalidate): Align the + cache-mirroring sequence. Add nops. + + 2001-06-03 Joseph S. Myers + + * doc/install-old.texi: Remove more old installation + documentation. + * doc/install.texi: Add relevant parts here. + + 2001-06-03 Gerald Pfeifer + + * doc/install.texi2html: New script. + + 2001-06-03 David Edelsohn + + * doc/install.texi: Update AIX information again. + + 2001-06-02 Joseph S. Myers + + * doc/gcc.texi, doc/install-old.texi: Remove old system-specific + installation documentation. + * doc/install.texi: Move it to here. + + 2001-06-02 Joseph S. Myers + + * doc/install.texi: Clean up Texinfo markup. + + 2001-06-02 Joseph S. Myers + + * doc/cpp.texi, doc/cppinternals.texi, doc/gcc.texi: Move contents + to just after title page. + + 2001-06-02 Joseph S. Myers + + * doc/install-old.texi: Remove documentation of some configuration + options. + * doc/install.texi: Add relevant parts of this documentation here. + + 2001-06-02 Gerald Pfeifer + + * contrib.texi: Updated entries for Mark Mitchell, Joseph S. Myers, + Gerald Pfeifer, Bernd Schmidt, and Dean Wakerley. + + Sat Jun 2 12:23:51 CEST 2001 Jan Hubicka + + * i386.md (all uses of ext_register_operand): Make sure they are + VOIDmode; replace all uses outside zero_extend. + (and?i splitters): Use ext_register_operands. + (test?i peep2): Remove ignored constraints. + * i386.c (ext_register_operand): Check that operand is + either pseudo or hard or 'Q' register. + + Sat Jun 2 06:53:50 2001 Richard Kenner + + * tree.h (struct record_layout_info_s): New field unpadded_align. + (set_lang_adjust_rli): New declaration. + * stor-layout.c (layout_decl): If DECL is packed, but at alignment + it would have if not packed, do not downgrade DECL_ALIGN. + (lang_adjust_rli, set_lang_adjust_rli): New. + (start_record_layout): Initialize new field unpadded_align. + (debug_rli): Display it. + (place_union_field, place_field): Set it. + (layout_type, case RECORD_TYPE): Call via lang_adjust_rli if set. + + * print-tree.c (print_node): Don't print "regdecl" when bit doesn't + mean that; use proper names instead. + Print DECL_NO_STATIC_CHAIN. + + * except.c (expand_builtin_frob_return_addr): Add missing call + to convert_memory_address #ifdef POINTERS_EXTEND_UNSIGNED. + (expand_builtin_eh_return): Likewise. + (expand_eh_return): Clean up ptr_mode != Pmode cases. + + 2001-06-01 Jan van Male + + * doc/invoke.texi: Remove references to papers about sequence points + to readings.html, refer to that page. + + 2001-06-01 Gerald Pfeifer + + * README: Update references to installation instructions. + + 2001-06-01 Laurent Guerby + Gerald Pfeifer + + * doc/install.texi: Define srcdir when sources come from CVS. + Significantly improve markup. Wrap overly long lines + + 2001-06-01 DJ Delorie + + * c-tree.texi, contrib.texi, cpp.texi, cppinternals.texi, + extend.texi, fdl.texi, gcov.texi, invoke.texi, md.texi, + objc.texi, rtl.texi, tm.texi, texinfo.tex, gcc.1, cpp.1, + gcov.1: Move to doc subdirectory. + * install.texi: Move to doc/install-old.texi. + * gcc.texi: Move to doc, refer to install-old.texi. + * Makefile.in: Reflect move of docs to doc/. + * f/Make-lang.in: Ditto. + * java/Make-lang.in: Ditto. + * doc/.cvsignore: New. + + 2001-05-31 Jan van Male + + * invoke.texi: use two spaces between command options, eliminate + some 'overfull hboxes' + + 2001-06-01 Hans-Peter Nilsson + + * Makefile.in (s-mlib): Make backtick-commands always succeed. + (DRIVER_DEFINES): Ditto. + + 2001-05-31 Richard Henderson + + * gcc.c (init_gcc_specs): When linking against libgcc_s.so, + also link against libgcc.a. + + 2001-05-31 Geoff Keating + + * config/mips/mips.h (ASM_OUTPUT_ASCII): Convert to function. + * config/mips/mips.c (mips_output_ascii): New function. + * config/mips/mips-protos.h (mips_output_ascii): Prototype. + + * config/mips/mips.h (DWARF_CIE_DATA_ALIGNMENT): Force to 4. + + Thu May 31 19:09:53 CEST 2001 Jan Hubicka + + * flow.c (set_block_for_new_insns): Remove bogus shortcut. + * i386.c (ix86_expand_int_movcc): Force one of operands to be register. + + 2001-05-31 Rodney Brown + + * install.texi (Configuration): Add html links for --with-gnu-as & + --with-gnu-ld and refer to them from hppa & SCO triplets. + (Specific): Link back to with-gnu-ld for all ELF platfoms. + (Specific): Reword AVR binutils recommendation. + + 2001-05-30 Zack Weinberg + + * ggc-page.c (size_lookup): Increase minimum allocation size + to eight bytes. + (ggc_print_statistics): Report size of each bin in bytes, not + as its order; there is no longer a direct relationship. + + 2001-05-31 Jan van Male + + * extend.texi: Fix formating of examples, eliminate some + 'overfull hboxes'. + * gcc.texi: Eliminate some 'overfull hboxes'. + * invoke.texi: Use two spaces between command options, eliminate + some 'overfull hboxes'. + + 2001-05-30 Richard Henderson + + * dwarf2out.c (dwarf2out_finish): Don't emit DW_AT_stmt_list at -g1. + + 2001-05-30 Tom Tromey + + * gcc.c (do_spec_1): In `%O' case, if we computed saved_suffix, + use it in the new association. + + 2001-05-30 Loren J. Rittle + John David Anglin + + * gthr-posix.h (__gthread_active_ptr): Cast function pointer + to target type to allow ISO C++ compiler to accept it. + * gthr-dce.h (__gthread_active_ptr): Likewise. + * gthr-solaris.h (__gthread_active_ptr): Likewise. + + 2001-05-30 Neil Booth + + * cpplex.c (_cpp_lex_token): Revert patch of 16 May 2001 + so that we do accept comments in preprocessed input. + + 2001-05-30 Neil Booth + + * cpphash.c (alloc_node): Cast allocated pointer. + + 2001-05-30 Gordon Sadler + + * invoke.texi (Option Summary): Remove -isystem-c++ from options. + + 2001-05-29 Stan Shebs + + * gcc.texi: Add links for information about Objective-C. + + 2001-05-29 Nathan Sidwell + + * configure.in (gcc_version): Remove unrequired \ on ". (Solaris + /bin/sed fails on [^\"]). + (configargs.h): Likewise. + + 2001-05-29 Hartmut Schirmer + + * config/sh/sh.h (IDENT_ASM_OP): End with TAB, not LF. + + 2001-05-28 Stan Shebs + + * objc/objc.gperf: Remove, no longer used. + + 2001-05-28 Joseph S. Myers + + * c-tree.texi, contrib.texi, cpp.texi, extend.texi, gcc.texi, + gcov.texi, install.texi, md.texi, objc.texi, rtl.texi, tm.texi: + Remove trailing whitespace. + + 2001-05-28 Gerald Pfeifer + + * doc/install.texi (Specific): http://reality.sgi.com/ariel/freeware/ + became http://freeware.sgi.com/. + + 2001-05-27 Geoffrey Keating + + * local-alloc.c (update_equiv_regs): Don't eliminate constant + expressions at -O0. + + 2001-05-27 Stan Shebs + + * objc/objc-act.c: Add/fix various comments. + (init_selector): Remove, no longer used. + (build_msg_pool_reference): Ditto. + (objc_debug): Ditto. + + 2001-05-27 Neil Booth + + * c-decl.c (init_decl_processing): + Don't call start_identifier_warnings. + * flags.h (warn_id_clash, id_clash_len): Remove. + * stringpool.c: Don't include flags.h. + (scan_for_clashes, do_identifier_warnings, + start_identifier_warnings): Remove. + * toplev.c (warn_id_clash, id_clash_len): Remove. + (display_help): Don't document -Wid-clash. + (decode_W_option): Print warning on -Wid-clash. + * tree.h (start_identifier_warnings): Remove. + * invoke.texi: Remove documentation of -Wid-clash. + + 2001-05-27 Kaveh R. Ghazi + + * fixinc/fixtests.c: Declare entries in ENV_TABLE. + + 2001-05-27 Bruce Korb + + * fixinc/check.tpl(HACK) add and use a Scheme variable + (has no test text): error out if no "test_text" is defined + * fixinc/fixincl.tpl: likewise + (FIXIDX): make it an enumeration so we minimize diffs + * fixinc/inclhack.def: re-alphabetize and add sort instructions + * fixinc/fixincl.x: regenerate + * fixinc/tests/base/stdio.h: test output got moved due to + the alphabetizing + * README-fixinc: rewrite (mostly) + + 2001-05-27 Neil Booth + + * cpplib.c (run_directive): Set pfile->directive. + + 2001-05-23 Theodore Papadopoulo + + * c-tree.texi: Reformat the manual as a single chapter now + included by gcc.texi. + * gcc.texi: Include c-tree.texi. Merge all indexes. + * Makefile.in (dvi): Add generation for the cppinternals + documentation. Added dependencies on fdl.texi and c-tree.texi + where appropriate. Use TEXI2DVI instead of custom tex calls. + (info): Added dependencies on fdl.texi and c-tree.texi where + appropriate. Remove the target c-tree.info. + + 2001-05-27 Lars Brinkhoff + + * combine.c (try_combine): Fix typo in comment. + * expr.c (expand_expr): Likewise. + * config/i370/i370.md (untyped_call): Likewise. + + 2001-05-26 Bruce Korb + + * fixinc/fixtests.c(stdc_0_in_system_headers_test): Must return "FIX" + when fixincl is operating in test mode + * fixinc/inclhack.def(AAB_dgux_int_varargs) : aesthetics + (AAB_ultrix_limits): remove redundant text + (AAB_ultrix_memory): ditto + (AAB_ultrix_string): ditto + (djgpp_wchar_h): fix the test text + (irix_stdio_va_list): add test text + (irix_limits_const): add a testing output file (limits.h is overwritten) + (strict_ansi_not_ctd): put limits.h second in list for same reason + (solaris27_mutex_init): test text needed selection text, too + + * fixinc/fixtests.c(stdc_0_in_system_headers_test): Must return "FIX" + when fixincl is operating in test mode + + 2001-05-26 Philip Blundell + + * config/c4x/c4x-protos.h: Use GCC_C_PRAGMA_H in place of _C_PRAGMA_H. + * config/i960/i960-protos.h: Likewise. + * config/i370/i370-protos.h: Likewise. + * config/h8300/h8300-protos.h: Likewise, + * config/sh/sh-protos.h: Likewise. + * config/v850/v850-protos.h: Likewise. + + 2001-05-26 Philip Blundell + + * config/arm/arm-protos.h: Use GCC_C_PRAGMA_H in place of _C_PRAGMA_H. + + 2001-05-25 Zack Weinberg + + * toplev.c (debug_args, f_options, W_options): Mark + descriptions for translation. + (display_help): Translate descriptions on output. + + * cp/lang-options.h, f/lang-options.h, java/lang-options.h, + objc/lang-options.h: Mark descriptions for translation. + + * aclocal.m4: Quote final argument of patsubst. Use + 3-argument form of AC_DEFINE. Restore quotes to [] while + using AC_FD_CC. + * configure.in: Remove unnecessary changequote calls. + * configure, config.in: Regenerate. + + 2001-05-25 Sam TH + + * basic-block.h: Fix header include guards. + * bitmap.h c-dump.h c-lex.h c-pragma.h c-tree.h collect2.h + cppdefault.h cpphash.h cpplib.h defaults.h diagnostic.h errors.h + except.h flags.h gcc.h gcov-io.h graph.h gstab.h gthr-aix.h + gthr-dce.h gthr-posix.h gthr-rtems.h gthr-single.h gthr-solaris.h + gthr-vxworks.h gthr-win32.h gthr.h hard-reg-set.h hwint.h + insn-addr.h libgcc2.h mbchar.h mkdeps.h params.h prefix.h real.h + rtl.h sbitmap.h system.h timevar.h toplev.h tradcpp.h tsystem.h + varray.h version.h: Likewise. + * config/dbxelf.h config/fp-bit.h config/arm/arm-protos.h + config/arm/arm.h config/c4x/c4x-protos.h + config/h8300/h8300-protos.h config/h8300/h8300.h + config/i370/i370-protos.h config/i370/i370.h + config/i960/i960-protos.h config/mcore/mcore.h + config/mips/mips-protos.h config/sh/sh-protos.h config/sh/sh.h + config/v850/v850-protos.h config/v850/v850.h: Likewise. + * fixinc/fixlib.h fixinc/server.h: Likewise. + + 2001-05-25 Stacey Sheldon + + * config/arc/initfini.c (.init): Fix typo. + + 2001-05-25 Geoffrey Keating + + * config/rs6000/rs6000.md (fseldfsf4): Correct mode of operand 4. + + 2001-05-25 Rainer Orth + + * i386/i386.h (CC1_CPU_SPEC): Clarify -m486 etc deprecation messages. + + 2001-05-25 Richard Henderson + + * libgcc-std.ver: Export XFmode and TFmode versions of symbols. + + 2001-05-25 Richard Henderson + + * config.gcc (all gnu and linux): Use t-slibgcc-elf-ver with t-linux. + (i386-*-solaris2): Use t-slibgcc-elf-ver or t-slibgcc-sld. + (sparc*-*-solaris2): Likewise. + * config/t-linux: Remove shared libgcc macros. + * config/t-slibgcc-elf-ver: Move from sparc/t-slibgcc. + * config/t-slibgcc-sld: Move from sparc/t-slibgcc-sld. + + 2001-05-25 Loren J. Rittle + + * config.gcc (*-*-freebsd*): Report bad configuration. + + 2001-05-25 David Edelsohn + + * xcoffout.h (DBX_OUTPUT_GCC_MARKER): Do not emit any marker. + + * config/rs6000/aix.h (USER_LABEL_PREFIX): AIX symbols do not have + any prefix. + (ASM_OUTPUT_LABELREF): Delete. + + 2001-05-25 Rainer Orth + + * fixinc/inclhack.def (strict_ansi_not, strict_ansi_not_ctd, + strict_ansi_only): Don't run if stdc_0_in_system_headers. + * fixinc/fixincl.x: Regenerate. + * fixinc/fixtests.c (stdc_0_in_system_headers_test): New function. + (FIX_TEST_TABLE): Declare it. + * fixinc/fixlib.h: Include config.h. + + 2001-05-25 Rainer Orth + + * fixinc/inclhack.def (alpha___assert): Change char * args to + const char * on Tru64 UNIX to avoid excessive warnings from + assert.h. + * fixinc/fixincl.x: Regenerate. + + 2001-05-25 Geoff Keating + + * dbxout.c (dbxout_symbol): Invert previous patch, which was + outputting a tag only for variable-size records. + + 2001-05-25 Jeff Knaggs + + * config/alpha/alpha.md (movtf_internal): Use reg_overlap_mentioned_p + instead of rtx_equal_p for early clobber test. + + 2001-05-26 Mark Mitchell + + * builtins.def: Encode additional information, such as names and + types, here. + * builtin-types.def: New file. + * builtins.c (built_in_names): Adjust use of DEF_BUILTIN. + (built_in_decls): Likewise. Don't explicitly initialize global + data to NULL. + (expand_builtin_mathfn): Handle float and long double variants of + math builtins. + (expand_builtin): Likewise. + * c-common.c (c_common_nodes_and_builtins): Make it table-driven. + (expand_tree_builtin): Handle long, long long, float, and long + double variants of math functions. + * c-common.h (c_tree_index): Remove some unused nodes. + (void_ftype): Remove. + (void_type_ptr): Likewise. + (int_ftype_int): Likewise. + (ptr_ftype_sizetype): Likewise. + * c-decl.c (init_decl_processing): Remove creation of DWARF + builtins. + * defaults.h (MD_INIT_BUILTINS): Provide default definition. + * tree.h (built_in_function): Adjust definition of DEF_BUILTIN. + * Makefile.in (c-common.o): Depend on builtin-types.def. + + 2001-05-25 Dale Johannesen + + * config/rs6000/t-darwin: Fix dependencies for darwin.o. + + 2001-05-25 Neil Booth + + * c-parse.in (notype_initdcl): Remove redundant line. + + 2001-05-25 Rainer Orth + + * aclocal.m4: Fixed typo. + (gcc_AC_HEADER_STDBOOL): Define. + (gcc_AC_C__BOOL): Define. + * configure.in: Use them. + (AC_CHECK_HEADERS): Remove stdbool.h + * configure, config.in: Regenerate. + + 2001-05-25 Richard Henderson + + * function.c (expand_function_start): Don't abort on PARALLEL + returns from hard_function_value. + + 2001-05-25 Richard Henderson + + * config/i386/i386.md: Revert previous change. Do not apply + the peephole if the components do not die after the sequence. + + 2001-05-25 Joseph S. Myers + + * c-parse.in (array_declarator): New. Handle C99 constructs. + Don't restrict [*] declarators to C only. + (after_type_declarator, parm_declarator_starttypename, + parm_declarator_nostarttypename, notype_declarator, + direct_absdcl1): Use it. + * c-decl.c (build_array_declarator, set_array_declarator_type): + New functions. Warn that [*] isn't properly implemented; pedwarn + for [*] outside C99 mode if pedantic rather than giving a hard + error. + (grokdeclarator): Handle static and type qualifiers in parameter + array declarators. + * c-tree.h (build_array_declarator, set_array_declarator_type): + Declare. + * extend.texi (Attribute Syntax): Document attributes in parameter + array declarators. + + 2001-05-25 Mark Mitchell + + * config/i386/i386.md: Make sure cmpstr peepholes do not + affect liveness information. + + 2001-05-24 Mark Mitchell + + * c-typeck.c (digest_init): Issue error messages about + invalid constants, not warnings. + + 2001-05-24 Mark Mitchell + + * invoke.texi (-fno-builtin): Document that this is always on + in C++. + + 2001-05-24 Philip Blundell + + * doc/install.texi (arm*-*-linux-gnu): Say that binutils 2.10 is + required. + + 2001-05-24 Philip Blundell + + * config/arm/arm.c (output_return_instruction): Correctly handle + interworking and interrupt functions. + + 2001-05-24 Philip Blundell + + * config/arm/arm.h (TARGET_SWITCHES): Correct misleading help for + -m{no-}sched-prolog. Fix typos and improve formatting. + + 2001-05-24 Philip Blundell + + * invoke.texi (ARM Options): Improve wording slightly. Add + documentation for more options, including those for Thumb mode. + Don't mention options that don't exist or are unimplemented. + (Thumb Options): Delete; merged into above section. + + 2001-05-24 Geoff Keating + + * config/rs6000/linux.h (SIGNAL_FRAMESIZE): Define. + (MD_FALLBACK_FRAME_STATE_FOR): Use it. + + Thu May 24 19:47:19 CEST 2001 Jan Hubicka + + * simplify-rtx.c (simplify_subreg): Fix CONCAT simplification; + fix hard register simplification. + + Thu May 24 00:15:17 2001 Rainer Orth + + * sparc/sol2.h (CPLUSPLUS_CPP_SPEC): Add all of CPP_SPEC instead + of just copying CPP_CPU_SPEC. + + Thu May 24 15:56:48 CEST 2001 Jan Hubicka + + * i386.c (incdec_operand): Accept only 1 and -1. + + 2001-05-23 Kelley Cook + + * Makefile.in: Move many of the *_H definitions eariler in the + file, so that rules in t-* files that use them for + dependencies will work in a parallel build. + * config/i386/t-cygwin (winnt.o): Depend on $(CONFIG_H). + + 2001-05-23 Richard Henderson + + * integrate.c (expand_inline_function): Handle CONCAT DECL_RESULT. + + 2001-05-23 Neil Booth + + * cpp.texi: Update for handling of charconsts. + * cpplex.c (maybe_read_ucs): Don't accept D800-DFFF. Update + diagnostics. Skip to the end if the UCS is too short. + (cpp_interpret_charconst): Long charconsts issue a warning + not an error. + + 2001-05-23 Richard Henderson + + * doc/install.texi (alpha-linux): Require binutils 2.11. + + 2001-05-23 Neil Booth + + * c-lex.c (read_escape, read_ucs): Delete. + (lex_string): Use cpp_parse_escape. + * cpplex.c (read_ucs): Rename maybe_read_ucs. Do nothing + if not C++ or not C99. Warn if traditional. + (parse_escape): Rename cpp_parse_escape. Make the bitmask + unsigned. Warn for out-of-range escape sequences here. + Update to use maybe_read_ucs. + (cpp_interpret_charconst): Don't warn here. + * cpplib.h (cpp_parse_escape): New exported function. + + 2001-05-23 Joseph S. Myers + + * extend.texi (Attribute Syntax): Clarify application of + attributes to parameters declared as functions or arrays. + + 2001-05-23 Jason Merrill + + * dbxout.c (dbxout_type_methods): Do still group methods by name. + + 2001-05-23 Zack Weinberg + + * diagnostic.c (vnotice): Kill. + (fnotice): Call vfprintf directly. + (diagnostic_for_decl, output_do_verbatim, output_verbatim, + verbatim, set_diagnostic_context): Rename string argument to + indicate that it is run through gettext. + (vbuild_message_string, build_message_string, output_do_printf): + Rename string argument to indicate that it is NOT run through + gettext. + (output_printf, diagnostic_for_decl, fatal_io_error, sorry, + output_do_verbatim, set_diagnostic_context, fnotice, _fatal_insn): + Run msgid argument through gettext. + (default_print_error_function): Run constant strings through + gettext when nothing else will. + (fatal_error, internal_error, error_recursion): Use fnotice. + Present complete sentences to gettext. + + 2001-05-23 Mark Mitchell + + * jump.c (mark_jump_label): Fix thinko in 2001-05-19 change. + + 2001-05-23 Richard Henderson + + * function.c (expand_function_start): Always use a pseudo + for the function result value. + + 2001-05-22 Richard Henderson + + * config/mips/iris6.h (EH_FRAME_SECTION_ASM_OP): Give the + section pointer alignment. + + * doc/install.texi (alpha-linux): Require binutils >= 2.10. + + * unwind-dw2-fde.c (__deregister_frame_info): Stringize use + of __USER_LABEL_PREFIX__. + + 2001-05-22 Richard Henderson + + * unwind-dw2-fde.c (__deregister_frame_info): Stubbify in favour of... + (__deregister_frame_info_bases): New. + * unwind-dw2-fde.h: Declare it. + * libgcc-std.ver: Export it. + * crtstuff.c (__do_global_dtors_aux): Call it if we would have + called __register_frame_info_bases. + + 2001-05-22 Loren J. Rittle + + * config/freebsd.h (FBSD_CPP_PREDEFINES): Use #endif/#if pair + instead of #elif (which is OK for this case but not in general). + + 2001-05-22 Andrew MacLeod + + * builtins.c (expand_builtin_longjmp): A longjmp can be a call too. + * config/ia64/ia64.md (nonlocal_goto): Reverse label and frame pointer + parameters to __ia64_nonlocal_goto. Flag as NO_RETURN. + * config/ia64/ia64.c (ia64_expand_epilogue): Make sure we are issuing + "r2" to the assembly file. Only issue allocs with non-zero parameters. + + 2001-05-22 Loren J. Rittle + David O'Brien + + * config/freebsd.h (LIB_SPEC): Key the exact setting to + configure-time options and target version of FreeBSD. Set-up + to match architectural change in threading support. Correctly + report when -pthread option is not supported by configure-time + options. + (FBSD_CPP_PREDEFINES): Move from architecture-specific files + and extend to encode target version number in run-time setting + of __FreeBSD__ macro to match the system compiler. + (CPP_PREDEFINES): Likewise. + (PREFERRED_DEBUGGING_TYPE): Change to DWARF2_DEBUG. + + * config/alpha/freebsd.h (CPP_PREDEFINES): Moved to common freebsd.h. + * config/i386/freebsd.h (CPP_PREDEFINES): Likewise. + + 2001-05-22 Loren J. Rittle + David O'Brien + + * config.gcc (the unlabeled system switch statement): Add + generic configuration section to handle *-*-freebsd*. Also, + to match the system compiler, default to threading support (it + may be disabled with the standard --disable-threads + configuration-time switch). + (i[34567]86-*-freebsd* in machine-specific section): Use it. + (alpha*-*-freebsd* in machine-specific section): Likewise. + + * config/freebsd3.h: New file to expose FBSD_MAJOR macro (3). + * config/freebsd4.h: New file to expose FBSD_MAJOR macro (4). + * config/freebsd5.h: New file to expose FBSD_MAJOR macro (5). + * config/freebsd6.h: New file to expose FBSD_MAJOR macro (6). + * config/freebsd-nthr.h: New file to expose FBSD_NO_THREADS macro. + + 2001-05-22 Loren J. Rittle + David O'Brien + + * config/t-freebsd (TARGET_LIBGCC2_CFLAGS): Add -fPIC. + * config/t-freebsd-thread (TARGET_LIBGCC2_CFLAGS): Add + -pthread instead setting macro. + + 2001-05-22 Richard Henderson + + * crtstuff.c (__register_frame_info_bases): Declare. + (frame_dummy): Use it, if CRT_GET_RFIB_TEXT or CRT_GET_RFIB_DATA. + (__do_global_dtors_aux, __do_global_dtors): Streamline. + + * config/i386/linux.h (ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX): New. + (CRT_GET_RFIB_DATA): New. + * config/i386/sysv4.h: Likewise. + * config/i386/sco5.h: Likewise. + (ASM_PREFERRED_EH_DATA_FORMAT): New. + + 2001-05-22 Richard Henderson + + * rtl.c (read_string): Break out from ... + (read_rtx): ... here. + + 2001-05-22 Gerald Pfeifer + + * doc/install.texi (Specific): Remove a bogus and duplicate part + copied from the end of the document. + + 2001-05-22 Bernd Schmidt + + * Makefile.in (LIBGCC_DEPS): Correct LIB1ASMSRC dependency. + + 2001-05-22 Gerald Pfeifer + + * install.texi: Remove obsolete information on SunOS as well as + i386-sun-sunos4, i860-intel-osf1, and powerpcle-*-solaris2*. + (Installing GNU CC on the Sun): Remove section. + + 2001-05-22 Alexandre Oliva + + * cppfiles.c (remove_component_p): Don't assume lstat/stat will + keep errno unchanged on success. + + 2001-05-22 Joseph S. Myers + + * c-lex.c (lex_number): If pedantic and not C99, pedwarn exactly + once for hexadecimal floats, whether or not they contain a decimal + point. Don't let the setting of pedantic otherwise affect the + parsing of hexadecimal floats. + + 2001-05-22 Gerald Pfeifer + + * README.ACORN: Remove obsolete file. + + 2001-05-22 Jan Hubicka + + * combine.c (gen_binary): Use swap_commutative_operands_p + (simplify_comparison): Likewise. + * expmed.c (emit_store_flag): Likewise. + * expr.c (compare_from_rtx): Likewise. + (do_compare_rtx_and_jump): Likewise. + * optabs.c (emit_cmp_and_jump_insn): Revert last patch; abort + if not emitting a branch and operands want swapping. + + 2001-05-22 Neil Booth + + * c-lex.c (c_lex): Just cast cpp's hashnode to gcc's one. + * stringpool.c: (IS_FE_IDENT, make_identifier): Delete. + (maybe_get_identifier): Update. + * tree.h (make_identifier): Delete. + + 2001-05-21 Richard Henderson + + * combine.c (subst): Do not substitute for a register as + a destination subreg/strict_low_part/zero_extract. + + * combine.c (simplify_comparison): Update op1 after constant + extension. + * recog.c (const_int_operand): Accept only constants valid + for the given mode. + * genrecog.c: Update comments wrt const_int_operand. + + * emit-rtl.c (init_emit_once): Zero unused memory in a + CONST_DOUBLE. + + 2001-05-21 Mark Mitchell + + * tree.h (type_num_arguments): Declare it. + * tree.c (type_num_arguments): New function. + + 2001-05-21 Richard Henderson + + * dwarf2out.c (current_funcdef_number): Move outside dwarf2 + conditional ifdef. + + 2001-05-21 Geoff Keating + + * config/rs6000/rs6000.md (maxsf3): Use rs6000_emit_minmax. + (maxsf3+1): Delete. + (minsf3): Use rs6000_emit_minmax. + (minsf3+1): Generalize to handle both SMIN and SMAX. Use + rs6000_emit_minmax. + (movsfcc): Use rs6000_emit_cmove. + (fselsfsf4): Don't compare a CONST_INT with a floating-point value. + Don't generate emit_fselsfsf4. + (fseldfsf4): Likewise. + (maxdf3): Use rs6000_emit_minmax. + (maxdf3+1): Delete. + (mindf3): Use rs6000_emit_minmax. + (mindf3+1): Generalize to handle both SMIN and SMAX. Use + rs6000_emit_minmax. + (movdfcc): Use rs6000_emit_cmove. + (fseldfdf4): Don't compare a CONST_INT with a floating-point value. + Don't generate emit_fselsfsf4. + (fselsfdf4): Likewise. + * config/rs6000/rs6000.c (zero_fp_constant): New predicate. + (min_max_operator): New predicate. + (rs6000_emit_cmove): New function. + (rs6000_emit_minmax): New function. + * config/rs6000/rs6000-protos.h: Prototype new functions. + * config/rs6000/rs6000.h (PREDICATE_CODES): Add zero_fp_constant + and min_max_operator. + + * config/rs6000/rs6000.c (output_cbranch): Handle all + conditional types in the switch statement. + + 2001-05-21 Mark Mitchell + + * c-decl.c (finish_decl): Don't set DECL_C_HARD_REGISTER for + non-register variables. + * extend.texi: Document that asm-specifications do not make sense + for non-static local variables. + + 2001-05-21 Jason Merrill + + * dbxout.c (MINIMAL_DEBUG, flag_minimal_debug): Lose. + (dbxout_type_fields): Lose minimal_debug support. + (dbxout_type_methods, dbxout_type): Likewise. + + 2001-05-17 Andrew Haley + + * config/rs6000/linux.h (MD_FALLBACK_FRAME_STATE_FOR): New. + + 2001-05-21 Richard Henderson + + * dwarf2out.c (DEBUG_FRAME_SECTION): Rename from FRAME_SECTION. + Update all users. + + 2001-05-20 Richard Henderson + + * dwarf2out.c (DEBUG_ABBREV_SECTION, DEBUG_ARANGES_SECTION, + DEBUG_MACINFO_SECTION, DEBUG_LOC_SECTION, DEBUG_PUBNAMES_SECTION, + DEBUG_STR_SECTION): Rename from s/DEBUG_//. Update all users. + * dwarfout.c (DEBUG_SFNAMES_SECTION, DEBUG_SRCINFO_SECTION, + DEBUG_MACINFO_SECTION, DEBUG_PUBNAMES_SECTION, DEBUG_ARANGES_SECTION): + Likewise. + * config/mips/iris6.h (DEBUG_SFNAMES_SECTION, DEBUG_SRCINFO_SECTION, + DEBUG_MACINFO_SECTION, DEBUG_PUBNAMES_SECTION, DEBUG_ARANGES_SECTION, + DEBUG_FRAME_SECTION, DEBUG_ABBREV_SECTION): Rename as above. + (DEBUG_LOC_SECTION, DEBUG_STR_SECTION): New. + * config/ia64/ia64.h (DEBUG_ABBREV_SECTION, DEBUG_ARANGES_SECTION, + DEBUG_PUBNAMES_SECTION): Rename as above. + (DEBUG_MACINFO_SECTION, DEBUG_LOC_SECTION, DEBUG_STR_SECTION): New. + + 2001-05-20 Richard Henderson + + * optabs.c (emit_cmp_and_jump_insns): Don't swap commutative + operands unless the operation is commutative. + + 2001-05-20 Kaveh R. Ghazi + + * fold-const.c (tree_expr_nonnegative_p): Detect more non-negative + cases. + + 2001-05-21 Joseph S. Myers + + * extend.texi: Clarify documentation of extensions included in ISO + C99. Prefer C99 terminology and syntax to old GNU terminology and + syntax. Add more index entries. Document mixed declarations and + code as an extension in C89 mode. Warn about future changes to + semantics of inline functions. Fixes PR other/930. + + Sun May 20 16:39:24 2001 Richard Kenner + + * expr.c (expand_expr, case ARRAY_REF): Don't fold constant + access if EXPAND_CONST_ADDRESS or EXPAND_INITIALIZER. + (expand_expr, case COMPONENT_REF): Do copy if misaligned even + if EXPAND_CONST_ADDRESS or EXPAND_INITIALIZER. + + * stmt.c (expand_decl): Set mode, alignment, and sizes for CONST_DECL. + + 2001-05-20 Richard Henderson + + * sched-deps.c (sched_analyze_insn): Force volatile memory reads + to be output before a branch. + + 2001-05-20 Richard Henderson + + * Makefile.in (dwarf2asm.o): Depend on $(TREE_H). + + 2001-05-20 Richard Henderson + + * config/i386/att.h (ASM_SHORT, ASM_LONG): Add trailing \t. + (ASM_DOUBLE): Remove. + * config/i386/bsd.h, config/i386/sco5.h: Likewise. + * config/i386/sun386.h: Likewise. + + * config/i386/i386.h (UNALIGNED_SHORT_ASM_OP): New. + (UNALIGNED_INT_ASM_OP, INT_ASM_OP): New. + + * config/i386/cygwin.h (INT_ASM_OP): Remove. + * config/i386/freebsd-aout.h, config/i386/i386-aout.h: Likewise. + * config/i386/i386-coff.h, config/i386/i386-interix.h: Likewise. + * config/i386/netbsd.h, config/i386/openbsd.h: Likewise. + + * config/i386/cygwin.h: Adjust uses of ASM_LONG for trailing \t. + * config/i386/djgpp.h, config/i386/i386.h: Likewise. + * config/i386/i386elf.h, config/i386/ptx4-i.h: Likewise. + * config/i386/sco5.h, config/i386/svr3gas.h: Likewise. + * config/i386/sysv4.h, config/i386/vsta.h: Likewise. + * config/i386/win32.h: Likewise. + + 2001-05-20 Joseph S. Myers + + * invoke.texi: Add more options to summary list. + + 2001-05-20 Joseph S. Myers + + * invoke.texi: Document meaning of -pedantic when -std=gnu* is + used. Fixes PR c/2291. + * gcc.1: Regenerate. + + 2001-05-20 Stephane Carrez + + * config/m68hc11/m68hc11.c (m68hc11_override_options): Ignore + the -fpic and -fPIC options, clear flag_pic. + + 2001-05-20 Neil Booth + + * hashtable.c (calc_hash): Fix HASHSTEP definition. + * stringpool.c (make_identifier): No statistics here anymore. + * objc-act.c (steup_string_decl): Remove redundant check. + + 2001-05-20 Neil Booth + + * Makefile.in (OBJS, LIBCPP_OBJS, LIBCPP_DEPS, + cpplib.o, cpphash.o, fix-header): Update. + (hashtable.o): New target. + * c-common.h: Include cpplib.h. Define C_RID_CODE and + struct c_common_identifier here. + * c-lang.c (c_init_options): Update. Call set_identifier_size. + * c-lex.c (c_lex): Update. + * c-pragma.h: Update. + * c-tree.h (struct lang_identifier): Contain c_common_identifier. + Delete rid_code. + (C_RID_CODE): Delete. + * cpphash.c: Rewrite to use hashtable.c. + * cpphash.h: Update include guards. + (struct cpp_reader): Remove hashtab. + hash_ob and buffer_ob are no longer pointers. Add hash_table + and our_hashtable. + (HASHSTEP, _cpp_init_hashtable, _cpp_lookup_with_hash): Delete. + (_cpp_cleanup_hashtable): Rename _cpp_destroy_hashtable. + (_cpp_cleanup_stacks): Rename _cpp_init_directives. + * cppinit.c (cpp_create_reader): Update. + * cpplex.c (cpp_ideq, parse_identifier, cpp_output_token): Update. + (cpp_interpret_charconst): Eliminate warning. + * cpplib.c (do_pragma, do_endif, push_conditional, + cpp_push_buffer, cpp_pop_buffer): Update. + (_cpp_init_stacks): Rename cpp_init_directives. + (_cpp_cleanup_stacks): Remove. + * cpplib.h: Update include guards. Include tree-core.h and c-rid.h. + (cpp_hashnode, cpp_token, NODE_LEN, NODE_NAME, + cpp_forall_identifiers, cpp_create_reader): Update. + (C_RID_CODE, cpp_make_node): New. + (c_common_identifier): New identifier node for C front ends. + * cppmain.c (main): Update. + * fix-header.c (read_scan_file): Update. + * flags.h (id_clash_len): Make unsigned. + * ggc.h (ggc_mark_nonnull_tree): New. + * hashtable.c: New. + * hashtable.h: New. + * stringpool.c: Update comments and copyright. Update to use + hashtable.c. + * toplev.c (approx_sqrt): Move to hashtable.c. + (id_clash_len): Make unsigned. + * toplev.h (ident_hash): New. + * tree.c (gcc_obstack_init): Move to hashtable.c. + * tree.h: Include hashtable.h. + (IDENTIFIER_POINTER, IDENTIFIER_LENGTH): Update. + (GCC_IDENT_TO_HT_IDENT, HT_IDENT_TO_GCC_IDENT): New. + (struct tree_identifier): Update. + (make_identifier): New. + cp: + * cp-tree.h (struct lang_identifier, C_RID_YYCODE): Update. + (C_RID_CODE): Remove. + * lex.c (cxx_init_options): Call set_identifier_size. Update. + (init_parse): Don't do it here. + objc: + * objc-act.c (objc_init_options): Call set_identifier_size. Update. + + Sat May 19 18:23:04 2001 Richard Henderson + + * except.c (dw2_build_landing_pads): Use word_mode, not Pmode, + as ncessary. + (expand_eh_return): Convert between word_mode and Pmode. + * unwind-dw2.c (extract_cie_info): Do not assume words and pointers + are the same size. + (execute_stack_op): Likewise. + (execute_cfa_program): Likewise. + (uw_frame_state_for): Likewise. + (uw_update_context_1): Likewise. + * unwind.inc (_Unwind_Reason_Code): Likewise. + * config/mips/mips.h (EH_RETURN_DATA_REGNO): Define. + (EH_RETURN_STACKADJ_RTX): Likewise. + * config/mips/mips.c (compute_frame_size): Make space for saving + EH return registers. + (mips_expand_epilogue): Handle EH stack adjustments. + * config/mips/mips.md (eh_return): New pattern. + (eh_set_lr_si): Likewise. + (eh_set_lr_di): Likewise. + Add splitter to perform EH return after reload. + + 2001-05-19 Mark Mitchell + + * jump.c (mark_jump_label): Tidy previous change. + + 2001-05-19 Bruce Korb + + * fixinc/genfixes: no need for two warnings + * fixinc/Makefile.in: open stdin for those building with a closed one. + + 2001-05-19 Mark Mitchell + + * jump.c (jump_optimize_1): Tidy. + (mark_jump_label): When changing the label in a LABEL_REF, change + update any REG_EQUAL notes as well. + + 2001-05-19 Joseph S. Myers + + * c-parse.in (parm_declarator): Split into + parm_declarator_starttypename and parm_declarator_nostarttypename. + (parm_declarator_starttypename, parm_declarator_nostarttypename): + New. Allow parenthesised sub-declarators which don't begin with a + TYPENAME. Fixes PR c/166. + + 2001-05-19 Mark Mitchell + + * defaults.h (TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER): New + macro. + * tm.texi (TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER): + Document it. + * toplev.c (main): If the target does not allow profiling without + a frame pointer, issue an error message. + * config/i386/linux.h (TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER): + Define it to false. + + Sat May 19 07:53:42 2001 Richard Kenner + + * recog.c (general_operand): Modify last change to allow it if reload + has completed. + + Sat May 19 10:23:54 CEST 2001 Jan Hubicka + + * recog.c (general_operand): Prohibit nonzero subreg bytes on + subregs containing mem. + + Sat May 19 09:40:45 2001 Denis Chertykov + + * regrename.c (regrename_optimize): frame pointer register can + use a few hardregs. + + 2001-05-18 Jason Merrill + + * README.DWARF: Move into dwarfout.c. + + 2001-05-18 Dale Johannesen + + * config/rs6000/rs6000.c (secondary_reload_class): Fix Darwin + specific misuse of r0 as a reload address. + + Fri May 18 22:42:04 CEST 2001 Jan Hubicka + + * combine.c (combine_simplify_rtx): Clear op0_mode if simplification + succeeded. + + Fri May 18 07:26:34 2001 Richard Kenner + + * genrecog.c (enum decision_type): Add DT_elt_zero-wide_safe. + (add_to_sequence): Make that decision type. + (maybe_both_true_2, nodes_identical_1, factor_tests): Use it. + (write_switch, write_cond, debug_decision_2): Likewise. + + * dbxout.c (dbxout_type): Use host_integerp and fix typo in testing + for INTEGER_TYPE. + (dbxout_symbol, case TYPE_DECL): Don't generate tag for records of + variable size. + + 2001-05-18 Stan Shebs + + * configure.in (gcc_cv_as_eh_frame): Cope with old assemblers. + * configure: Regenerate. + + 2001-05-18 Per Bothner + + Changes needed for java/jvspec.c + * gcc.h (n_infiles, outfiles): Add declarations. + * gcc.c (n_infiles, outfiles): Mske no longer static. + + Fri May 18 10:14:42 2001 Jeffrey A Law (law@cygnus.com) + + * config/pa/som.h (EXCEPTION_SECTION): Define. + + 2001-05-18 Daniel Berlin + + * dwarf2out.c: Add dw_loc_list_ref, a reference to a location + list. + Add have_location_lists, a variable to determine whether we need a + .debug_loc section or not. + (enum dw_val_class): Add dw_val_class_loc_list. + (dw_val_struct): Add val_loc_list. + (dw_loc_list_struct): New structure, represents location lists. + (new_loc_list): New function, return a new location list, given + the range and location expression. + (add_loc_descr_to_loc_list): New function, add a location + expression to a location list, given the expression and range. + (output_loc_list): New function, output a location list. + (gen_internal_sym): Modified to take symbol prefix, so we can + reuse it for location list symbols. + (add_AT_loc_list): New function, add a location list to a DIE at + the named attribute. + (AT_loc_list): New function, return the location list reference + for a given attribute, if it's a location list. + (print_die): Handle dw_val_class_loc_list. + (size_of_die): Ditto. + (value_format): Ditto. + (output_die): Ditto. + (output_location_lists): New function, output all of the location + lists for a DIE and it's children. + (dwarf2out_finish): Call output_location_lists if we have location + lists. + + + Fri May 18 15:39:16 CEST 2001 Jan Hubicka + + * gcse.c (try_replace_reg): First try global replace, later try to + simplify the expression. + + * gcse.c (find_used_regs): Change calling convention; work via + note_uses. + (cprop_insn): Update call of find_used_regs; work for CALL_INSNs too. + + 2001-05-18 Bernd Schmidt + + Revert + 2001-02-09 Nick Clifton + * config/arm/arm.md: Change output constraint on post inc + load/store multiple patterns to be a read/write constraint. + + 2001-05-18 Mark Mitchell + + * basic-block.h (struct basic_block_def): Add documentation about + what a basic block is, and what the various fields are used for. + * flow.c (calculate_globlal_regs_live): Add documentation about + how the algorithm works, and how we know that it will terminate. + Check that the the inductive assumption that guarantees + termination actually holds. + (mark_used_regs): Treat conditionally set registers as used. + (debug_regset): Add comment. + * rtl.texi (cond_exec): Add documentation. + + * function.c (expand_function_start): Avoid creating BLKmode + pseudos. + + 2001-05-17 Mark Mitchell + + * dwarf2out.c (output_comp_unit): Always output a compilation-unit + DIE, even if it has no children. + (dwarf2out_finish): Always output the line-number table, even if + it has no content. + + 2001-05-18 David Edelsohn + + * rs6000.md (movsfcc,movdfcc): Remove NE case. + + 2001-05-17 Bruce Korb + + * fixinc/fixincl.tpl: rewritten as an AutoGen version 5 template + * fixinc/genfixes: emit a warning if AutoGen is out of date + + 2001-05-17 Brendan Conoboy + Bruce Korb + + * fixinc/fixincl.sh(FIXINC): accept local directory if fixincl not + found in fixinc directory. Facilitates binary distributions. + + 2001-05-17 Jeffrey Oldham + + * dbxout.c (dbxout_symbol_location): For CONCAT, skip types not + COMPLEX_TYPE. + + Thu May 17 19:42:39 2001 Mark Kettenis + + * dwarf2out.c (modified_type_die): Equate qualified type to die. + + Thu May 17 23:19:46 CEST 2001 Jan Hubicka + + * integrate.c (copy_rtx_and_substitute): Use simplify_gen_subreg. + (simplify_subreg): Handle complex types represented as CONCAT. + + * recog.c (validate_replace_rtx_1): Properly canonicalize expression + * rtl.h (swap_commutative_operands_p): Declare. + * rtlanal.c (swap_commutative_operands_p): New. + (operand_preference): New static function. + + * combine.c (combine_simplify_rtx): Use swap_commutative_operands_p. + (gen_binary): Likewise. + * optabs.c (emit_cmp_and_jump_insns, emit_conditional_move): Likewise. + * simplify-rtx.c (simplify_gen_binary, + simplify_gen_relational): Likewise. + + Thu May 17 20:43:36 CEST 2001 Jan Hubicka + + * cse.c (fold_rtx): Use simplify_subreg. + + * simplify-rtx.c (simplify_replace_rtx): Use simplify_gen_subreg. + (simplify_gen_subreg): New. + (simplify_rtx): Use simplify_subreg. + * rtl.h (simplify_gen_subreg): Declare. + + 2001-05-17 Mark Mitchell + + * doc/install.texi: Update Solaris information. + + * except.h (protect_cleanup_actions): Remove it. + (lang_protect_cleanup_actions): Declare it. + * except.c (protect_cleanup_actions): Remove it. + (lang_protect_cleanup_actions): New variable. + (init_eh): Don't make protect_cleanup_actions a GC root. + (expand_eh_region_and_cleanup): Call + lang_protect_cleanup_actions. + (output_function_exception_table): Remove unused `align' + variable. + * varasm.c (assemble_external): Abort if we have not yet + opened the assembly output file. + + Thu May 17 11:54:50 2001 Jeffrey A Law (law@cygnus.com) + + * except.c (sjlj_emit_function_enter): Call assemble_external_libcall + for eh_personality_libfunc. + + Thu May 17 19:48:00 CEST 2001 Jan Hubicka + + * recog.c (validate_replace_rtx_1): Use "TO" mode if not VOIDmode + when calling simplify_subreg. This is needed to allow replacing + of expression of one mode by expression of different mode. + + Thu May 17 19:40:03 CEST 2001 Jan Hubicka + + * simplify-rtx.c (simplify_subreg): Avoid creating of incorrect subregs. + + 2001-05-17 Bernd Schmidt + + * expr.c (protect_from_queue): Protect against subsequent calls to + emit_queue. + (expand_expr, case ADDR_EXPR): Prevent protect_from_queue from being + too clever. + + Thu May 17 18:17:34 CEST 2001 Jan Hubicka + + * simplify_rtx.c (simplify_subreg): Fix simplification of nested subregs. + + 2001-05-17 Gerald Pfeifer + + * gccbug.in (CATEGORIES): Add "bootstrap". + + Thu May 17 16:59:41 CEST 2001 Jan Hubicka + + * simplify-rtx.c (simplify_subreg): Break out from ... + * combine.c (combine_splify_rtx) ... here and ... + * recog.c (validate_replace_rtx_1): ... here; + * rtl.h (subreg_lowpart_parts_p, simplify_subreg): Declare. + * emit-rtl.c (subreg_lowpart_parts_p): Break out from ... + (subreg_lowpart_p): ... here. + + 2001-05-17 Bernd Schmidt + + * stmt.c (expand_asm_operands): For inout operands, make sure + the substitution of '=' for '+' makes it into the rtl. + + * reload1.c (delete_output_reload): Call eliminate_regs on substed. + (reload_as_needed): Call update_eliminable_offsets a bit later. + + 2001-05-17 Gerald Pfeifer + + * gcc.texi (gccbug): Refer to the web pages for detailed information + on GNATS. + + 2001-05-16 Zack Weinberg + + * libgcc1-test.c, libgcc1.c, config/i386/perform.h: Delete file. + + * Makefile.in: Delete variables: OLDCC, CCLIBFLAGS, OLDAR, + OLDAR_FLAGS, LIBGCC1, LIBGCC1_TEST, CROSS_LIBGCC1, + LIB1FUNCS, and LIB1FUNCS_EXTRA. Delete rules: libgcc1-test, + libgcc1-test.o. Clarify commentary now that libgcc1 no longer exists. + * cross-make: Don't set LIBGCC1. + * mklibgcc.in: Delete all code for building from libgcc1.c. + Always honor LIB1ASMFUNCS if set. + + * crtstuff.c, floatlib.c, longlong.h, config/fp-bit.c, + config/arc/lib1funcs.asm, config/arm/lib1funcs.asm, + config/d30v/libgcc1.asm, config/fr30/lib1funcs.asm, + config/h8300/lib1funcs.asm, config/i386/cygwin.asm, + config/i386/uwin.asm, config/m68hc11/larith.asm, + config/m68k/lb1sf68.asm, config/mcore/lib1.asm, + config/mn10200/lib1funcs.asm, config/sh/lib1funcs.asm, + config/sparc/lb1spc.asm, config/sparc/lb1spl.asm, + config/v850/lib1funcs.asm, config/c4x/libgcc.S: + Delete or update references to libgcc1 in commentary. + + * config/t-libc-ok, config/t-linux, config/t-linux-aout, + config/t-netbsd, config/a29k/t-a29kbare, config/a29k/t-vx29k, + config/alpha/t-interix, config/alpha/t-osf, config/alpha/t-vms, + config/arc/t-arc, config/arm/t-arm-aout, config/arm/t-arm-coff, + config/arm/t-arm-elf, config/arm/t-linux, config/arm/t-pe, + config/arm/t-semi, config/arm/t-strongarm-coff, + config/arm/t-strongarm-elf, config/arm/t-strongarm-pe, + config/arm/t-xscale-coff, config/arm/t-xscale-elf, config/avr/t-avr, + config/c4x/t-c4x, config/d30v/t-d30v, config/fr30/t-fr30, + config/h8300/t-h8300, config/i386/t-beos, config/i386/t-cygwin, + config/i386/t-i386elf, config/i386/t-interix, config/i386/t-netware, + config/i386/t-next, config/i386/t-rtems-i386, config/i386/t-sol2, + config/i960/t-960bare, config/i960/t-vxworks960, config/ia64/t-ia64, + config/m32r/t-m32r, config/m68hc11/t-m68hc11-gas, config/m68k/t-lynx, + config/m68k/t-m68kbare, config/m68k/t-m68kelf, + config/m68k/t-mot3300-gald, config/m68k/t-mot3300-gas, + config/m68k/t-next, config/m68k/t-vxworks68, config/m88k/t-bug, + config/m88k/t-dgux, config/m88k/t-dgux-gas, config/m88k/t-dguxbcs, + config/m88k/t-luna, config/m88k/t-luna-gas, config/m88k/t-m88k, + config/m88k/t-m88k-gas, config/m88k/t-sysv4, config/mcore/t-mcore, + config/mcore/t-mcore-pe, config/mips/t-bsd, config/mips/t-bsd-gas, + config/mips/t-cross64, config/mips/t-ecoff, config/mips/t-elf, + config/mips/t-iris6, config/mips/t-r3900, config/mips/t-svr3, + config/mips/t-svr3-gas, config/mips/t-svr4, config/mips/t-svr4-gas, + config/mips/t-ultrix, config/mn10200/t-mn10200, + config/mn10300/t-mn10300, config/pa/t-linux, config/pa/t-linux64, + config/pa/t-pa, config/pa/t-pa64, config/pa/t-pro, + config/pdp11/t-pdp11, config/pj/t-pj, config/rs6000/t-aix43, + config/rs6000/t-beos, config/rs6000/t-darwin, config/rs6000/t-newas, + config/rs6000/t-ppccomm, config/rs6000/t-rs6000, config/sh/t-linux, + config/sh/t-sh, config/sparc/t-chorus-elf, config/sparc/t-elf, + config/sparc/t-sol2, config/sparc/t-sp86x, config/sparc/t-sparcbare, + config/sparc/t-sparclite, config/sparc/t-splet, + config/sparc/t-sunos41, config/sparc/t-vxsparc, + config/sparc/t-vxsparc64, config/v850/t-v850: + Don't set any of LIBGCC1, CROSS_LIBGCC1, or LIBGCC1_TEST. + + * config/alpha/alpha.h, config/i386/i386.h, config/i860/i860.h: + Don't set FLOAT_VALUE_TYPE, FLOAT_ARG_TYPE, INTIFY, or FLOATIFY. + * config/d30v/d30v.h: Don't mention LIBGCC_NEEDS_DOUBLE, + FLOAT_VALUE_TYPE, FLOAT_ARG_TYPE, FLOATIFY, INTIFY, + nongcc_SI_type, nongcc_word_type, or perform_* + * config/i860/fx2800: Don't define perform_umodsi3 or perform_modsi3. + + * config/i386/386bsd.h, config/i386/beos-elf.h, + config/i386/linux-aout.h, config/i386/linux-oldld.h, + config/i386/linux.h, config/i386/mach.h, config/i386/netbsd.h, + config/i386/openbsd.h, config/i386/osfrose.h, config/i386/rtemself.h: + Don't include i386/perform.h. + + * config/a29k/t-a29k, config/arm/t-semiaof, config/i370/t-i370, + config/i370/t-linux, config/i370/t-mvs, config/i370/t-oe, + config/i386/t-djgpp, config/i386/t-i386bare, config/i386/t-vsta, + config/ia64/t-hpux, config/mips/t-mips, config/mips/t-mips-gas, + config/mips/t-osfrose, config/sparc/t-sp64, config/sparc/t-sunos40, + config/vax/t-openbsd, config/vax/t-vax: Delete. + + * config.gcc: Remove references to deleted files. + (arm-semi-aof): Use arm/t-semi for tmake_file. + + * gcc.texi, install.texi, invoke.texi, tm.texi: + Delete or rewrite text which is no longer relevant now that + libgcc1 no longer exists. + + * config/t-openbsd, config/alpha/t-interix, config/i386/t-interix: + No need to set INSTALL_ASSERT_H. (Missed in previous sweep.) + + 2001-05-16 Wolfgang Bangerth + Bruce Korb + + * fixinc/inclhack.def(solaris27_mutex_init): Fix broken mutex + initializer + + 2001-05-16 Zack Weinberg + + * i386.md: Add two peepholes to clean up code generated by + cmpstr* expanders. + + 2001-05-16 Richard Henderson + + * dwarf2asm.c (eh_data_format_name): Add names for "pointer size" + variants of non-absolute encodings. + + * config/i386/i386.h (ASM_PREFERRED_EH_DATA_FORMAT): New. + + * libgcc-std.ver (_Unwind_Find_FDE, __register_frame_info_bases, + __register_frame_info_table_bases): Export. + + 2001-05-16 Richard Henderson + + * except.c (eh_data_format_name): Move to ... + * dwarf2asm.c: ... here. Use designated initializers if available. + (dw2_asm_output_encoded_addr_rtx): Accept varargs commentary. + * dwarf2asm.h: Update declarations. + * dwarf2out.c (output_cfi) [DW_CFA_set_loc]: If for_eh, mind + ASM_PREFERRED_EH_DATA_FORMAT. + (output_call_frame_info): Likewise. Use 'L' augmentation for + the LSDA encoding. + + * unwind-dw2-fde.h (struct fde_vector): New. + (struct old_object): Rename from struct object. + (struct object): New. + (__register_frame_info_bases): Declare. + (__register_frame_info_table_bases): Declare. + (struct dwarf_fde): Remove explicit pc_begin/pc_range members. + * unwind-dw2-fde.c (objects): Remove. + (unseen_objects, seen_objects): New. + (__register_frame_info_bases): New. + (__register_frame_info): Use it. + (__register_frame_info_table_bases): New. + (__register_frame_info_table): Use it. + (__deregister_frame_info): Rewrite for changed object struct. + (base_from_object, get_cie_encoding, get_fde_encoding): New. + (fde_unencoded_compare): Rename from fde_compare; uninline. + (fde_single_encoding_compare, fde_mixed_encoding_compare): New. + (start_fde_sort): Adjust for new definition of fde_vector. + (fde_insert): Likewise. + (end_fde_sort): Likewise. Select comparison function based + on properties of the object. + (fde_split): Take object and fde_compare_t arguments. + (frame_heapsort, fde_merge): Likewise. + (classify_object_over_fdes): Rename from count_fdes. Handle + encoded pointers. Collect encoding, mixed_encoding, and pc_begin + for the object. + (add_fdes): Handle encoded pointers. + (init_object): Rename from frame_init. Update for new struct object. + (linear_search_fdes): Rename from search_fdes. Handle encoded + pointers. + (binary_search_unencoded_fdes): Broken out from _Unwind_Find_FDE. + (binary_search_single_encoding_fdes): New. + (binary_search_mixed_encoding_fdes): New. + (search_object): New. + (_Unwind_Find_FDE): Update for new struct object. Fill in + the dwarf_eh_bases. + * unwind-dw2.c: Include unwind-pe.h. Constify all pointers + iterating over EH data. + (_Unwind_FrameState): Remove saw_lsda, addr_encoding. Add + fde_encoding, lsda_encoding. + (read_uleb128, read_sleb128): Remove. + (read_encoded_pointer): Remove. All callers use read_encoded_value. + (extract_cie_info): Set lsda_encoding from 'L' augmentation. + (uw_frame_state_for): Don't set bases.func. Handle encoded fde + pointers. + * unwind-pe.h: Add "struct" to _Unwind_Context references. + + 2001-05-16 Neil Booth + + * cppexp.c (lex): Use NODE_NAME and NODE_LEN. + * cpphash.c (_cpp_lookup_with_hash): Similarly. + * cpplex.c (cpp_ideq, parse_identifier, cpp_token_len, + cpp_spell_token, cpp_output_token): Similarly. + * cpplib.c (lex_macro_node, do_undef, do_pragma, + do_pragma_poison, parse_assertion, do_assert): Similarly. + * cppmacro.c (builtin_macro, parse_args, funlike_invocation_p, + save_parameter, _cpp_create_definition, check_trad_stringification, + cpp_macro_definition): Similarly. + * cppmain.c (cb_define, cb_undef, dump_macro): Similarly. + * c-lex.c (cb_undef, c_lex): Similarly. + * fix-header.c (recognized_function): Similarly. + * cpplib.h (NODE_LEN, NODE_NAME): New. + (cpp_hashnode): Rename length len. + + Wed May 16 13:41:10 2001 Jeffrey A Law (law@cygnus.com) + + * pa32-regs.h (HARD_REGNO_MODE_OK): Allow TI/TFmode values in + GPRs. + + 2001-05-16 Andreas Jaeger + + * Makefile.in (toplev.o): Add dependency on dwarf2asm.h. + + * toplev.c: Include dwarf2asm.h for prototype of + dw2_output_indirect_constants. + + Wed May 16 19:53:53 CEST 2001 Jan Hubicka + + * stmt.c (expand_asm_operands): Be able to offload addressof + expression to memory. (PR optimization/185) + + Wed May 16 18:53:23 CEST 2001 Jan Hubicka + + * combine.c (combine_simplify_rtx): Set op0_mode to VOIDmode after + applying distributive law. + + 2001-05-16 John David Anglin + + * pa-hpux10.h (THREAD_MODEL_SPEC): Define. + + * gthr-dce.h (UNUSED): Attribute unused macro. + (__gthread_key_dtor): Make arguments UNUSED. + (__gthread_key_delete): Revise for compatibility with DRAFT4 + implementation. + + 2001-05-16 David Edelsohn + + * doc/install.texi: Update AIX information. + * README.RS6000: Remove obsolete file. + + 2001-05-16 Jakub Jelinek + Nathan Sidwell + + * gcc.c (give_switch): Don't write before start of string. + Always append suffix. + + 2001-05-16 Nathan Sidwell + + * cpplex.c (_cpp_lex_token, '/' case): Comments can't appear + after stage3. + + 2001-05-16 Gerald Pfeifer + + * README.ALTOS: Remove obsolete file. + + 2001-05-16 Neil Booth + + * c-lex.h (save_and_forget_protocol_qualifiers, + forget_protocol_qualifiers, remember_protocol_qualifiers): + Remove deleted functions' prototypes. + + 2001-05-16 Neil Booth + + * c-parse.in (methodtype): New production. + (methoddef, methodproto): Collapse separate '-' and '+' + handlers into 1. + + 2001-05-16 Neil Booth + + * c-common.h (RID_FIRST_PQ): New. + * c-parse.in (objc_pq_context): New. + (objc parser): Set objc_pq_context rather than calling + remember_protocol_qualifiers and forget_protocol_qualifiers. + Don't call save_and_forget_protocol_qualifiers. + (yylexname): Handle objc protocol qualifiers here. + * stringpool.c (struct str_header): Replace with sp_hashnode. + (SP_EMPTY, SP_LEN, SP_TREE, SP_STR, SP_VALID): New. + (alloc_string): Rename alloc_ident. Use the SP_ accessors. + Allocate an IDENTIFIER_NODE for each identifier. + (FORALL_STRINGS, set_identifier): Delete. + (FORALL_IDS, expand_string_table, stringpool_statistics): Update. + (ggc_alloc_string): Use an obstack. + (get_identifier, maybe_get_identifier, mark_string_hash): Update. + * tree.h: Update comments. + (set_identifier): Delete. + * objc/objc-act.c (N_PQ, saved_pq, saved_not_pq, + save_and_forget_protocol_qualifiers, forget_protocol_qualifiers, + remember_protocol_qualifiers): Delete. + + Tue May 15 22:14:09 2001 Jeffrey A Law (law@cygnus.com) + + * flow.c (life_analysis): After life analysis is complete, do + an optional scan over insns looking for REG_LABEL notes that + reference a deleted label. + (propagate_block_delete_insn): Verify INOTE is a CODE_LABEL + before peeking at LABEL_NUSES. + + 2001-05-15 Richard Henderson + + * unwind-sjlj.c (_Unwind_GetDataRelBase): New. + (_Unwind_GetTextRelBase): New. + + 2001-05-15 Mark Mitchell + + * config/sparc/sol2.h (CPLUSPLUS_CPP_SPEC): Define. + + 2001-05-15 Geoffrey Keating + + * objc/objc-act.c (handle_class_ref): Use rest_of_decl_compilation + so that CHOOSE_SECTION gets used. + + * config/rs6000/sysv4.h (ASM_PREFERRED_EH_DATA_FORMAT): Treat + TARGET_RELOCATABLE like flag_pic for now. + + 2001-05-15 David Edelsohn + + * rs6000.md (movdi splitter): Sign extend more efficiently. + * rs6000.c (reg_or_arith_cint_operand): Redefine 64-bit constant + to "long long" valid on 32-bit and 64-bit hosts. + (logical_operand): Cast trunc_int_for_mode return value. + (rs6000_emit_move): Shift macro to encapsulate variable. + (rs6000_va_start): Use HOST_WIDE_INT_PRINT_DEC. + (rs6000_emit_{prologue,epilogue}): EH regno is unsigned but + plus_constant requires signed argument. + + 2001-05-15 Loren J. Rittle + + * gthr-posix.h: Make additional pthread-* functions weak. + + Tue May 15 13:51:32 CEST 2001 Jan Hubicka + + * recog.c (apply_change_group): Avoid unneeded validating. + + 2001-05-14 David Edelsohn + + * rs6000.c (num_insns_constant_wide): Constants are sign-extended. + (num_insns_constant): CONST_INT can be 64-bits. + + 2001-05-14 Stan Shebs + + * config/darwin.h (LIB_SPEC): Just use -lSystem. + (LIBGCC_SPEC): Don't define. + + 2001-05-14 Richard Henderson + + * configure.in (gcc_cv_as_eh_frame): New test. + * config.in, configure: Rebuild. + * gcc.c (init_spec): Honor USE_AS_TRADITIONAL_FORMAT. + + 2001-05-14 Andrew MacLeod + + * config/ia64/lib1funcs.asm (__divtf3): Fix incorrect bits in + extended precision divide. + + 2001-05-14 Andrew MacLeod + + * config/ia64/ia64.c (rtx_needs_barrier): Call rtx_needs_barrier + for RETURNS as well. + + Mon May 14 17:34:48 CEST 2001 Jan Hubicka + + * i386.h (TARGET_64BIT): Define to constant if !TARGET_BI_ARCH + (CPP_CPU??_SIZE_TYPE): New. + (CPP_CPU??_SPEC, CPP_CPUCOMMON_SPEC): Break out from... + (CPP_CPU_SPEC): ... here; support choosing of CPU. + (EXTRA_SPECS): Add cpp_cpu??, cpp_cpu??sizet, cpp_cpucommon. + (MAX_LONG_TYPE_SIZE, MAX_BITS_PER_WORD): Define to 32 for 32bit-only + compiler. + * i386.c (override_options): Add sorry about not suported modes. + + Mon May 14 08:56:47 2001 Jeffrey A Law (law@cygnus.com) + + * config/pa/som.h (NM_FLAGS): Remove. + (ASM_OUTPUT_FUNCTION_PREFIX): No longer truncate subspace names. + (ASM_OUTPUT_SECTION_NAME): Remove. + (MAKE_DECL_ONE_ONLY, ASM_WEAKEN_LABEL): Likewise. + + 2001-05-14 Mark Mitchell + + * regrename.c (regrename_optimize): Do not rename registers to + leaf registers. + + 2001-05-14 Alexandre Oliva + + * rtl.texi (CALL_INSN_FUNCTION_USAGE): Note that (and when) it may + contain MEMs. Remove useless distinction about clobbering + registers. + + 2001-05-13 Geoff Keating + + * config/rs6000/rs6000.h (EXCEPTION_SECTION): Move to... + * config/rs6000/aix.h (EXCEPTION_SECTION): ... here. + * config/rs6000/sysv4.h (CONST_SECTION_ASM_OP): Delete. + (ASM_PREFERRED_EH_DATA_FORMAT): Define. + (EXCEPTION_SECTION): Define. + + 2001-05-13 Zack Weinberg + + * libgcc2.c, libgcc2.h: Restore __eprintf. Label as used for + binary backward compat only. + * Makefile.in (LIB2FUNCS_ST): New. Put _eprintf here, not + in LIB2FUNCS. Pass it to mklibgcc. + * mklibgcc.in: Handle LIB2FUNCS_ST. + + * Makefile.in (installdirs): Don't create $(gcc_tooldir). + + 2001-05-13 Alexandre Oliva + + * tm.texi (THREAD_MODEL_SPEC): Document it. + * gcc.c (main): Use it. + * config/rs6000/aix43.h (THREAD_MODEL_SPEC): Define it. + * config/rs6000/aix51.h (THREAD_MODEL_SPEC): Likewise. + + 2001-05-13 Franz Sirl + + * rtl.h (SYMBOL_REF_WEAK): New macro. + * rtlanal.h (rtx_addr_can_trap): Use it, a weak SYMBOL_REF can trap. + * varasm.c (make_decl_rtl): Mark SYMBOL_REF weak if necessary. + * rtl.texi (SYMBOL_REF_WEAK): Document it. + * gcc.texi: Remove wrong description. + + 2001-05-13 Mark Mitchell + + * Makefile.in (STAMP): New macro. + Replace all uses of `touch' with $(STAMP). + * fixinc/Makefile.in: Likewise. + + Sun May 13 07:26:34 2001 Richard Kenner + + * configure.in: ldopen is never in -lexc, so don't test for it. + Add test for exc_resume in -lexc for Ada. + * configure: Regenerated. + + 2001-05-12 Richard Henderson + + * dwarf2asm.c (size_of_encoded_value): New function. + * dwarf2asm.h: Declare it. + * except.c (output_function_exception_table): Align the TType + array only as wide as the encoding. + + 2001-05-12 Zack Weinberg + + * extend.texi: Document #pragma GCC java_exceptions. + + 2001-05-12 Neil Booth + + * c-parse.in (bison parser, init_reswords): Remove uses of + doing_objc_thang. + * c-tree.h (doing_objc_thang): Remove. + + 2001-05-12 Neil Booth + + * cpplex.c (_cpp_lex_token): Ensure we warn at most once + about files not ending in newlines. + + 2001-05-12 Neil Booth + + * dwarfout.c (dwarfout_init): Add cast. + * sched-deps.c (sched_analyze_insn): Remove unused vars. + * unwind-dw2-fde.c (_Unwind_Find_FDE): Flag unused parameter so. + cp: + * method.c (build_mangled_C99_name): Remove unused prototype. + + 2001-05-12 Alexandre Oliva + + * config/arm/arm.h (TARGET_PTRMEMFUNC_VBIT_LOCATION): Use delta. + + 2001-05-12 Alexandre Oliva + + * defaults.h (TARGET_PTRMEMFUNC_VBIT_LOCATION): Define. + * tm.texi (TARGET_PRTMEMFUNC_VBIT_LOCATION): Document. + + 2001-05-11 Richard Henderson + + * defaults.h (ASM_PREFERRED_EH_DATA_FORMAT): New. + * dwarf2asm.c (dw2_force_const_mem, dw2_output_indirect_constant_1, + dw2_output_indirect_constants, dw2_asm_output_encoded_addr_rtx): New. + * dwarf2asm.h (dw2_asm_output_encoded_addr_rtx): Prototype. + (dw2_output_indirect_constants): Prototype. + * dwarf2out.c (dwarf2out_begin_prologue): Generate + current_function_func_begin_label if we'll need it for EH. Exit + early for IA64_UNWIND_INFO. + * except.c: Get DW_EH_PE_* defines from dwarf2.h. + (eh_data_format_name): Update for indirect references. + (output_function_exception_table): Care for IA64_UNWIND_INFO. + Handle ASM_PREFERRED_EH_DATA_FORMAT. + * except.h (MUST_USE_SJLJ_EXCEPTIONS): IA64_UNWIND_INFO needn't + define HAVE_eh_return etc. + * final.c (final_start_function): Always call dwarf2out_begin_prologue. + (final_end_function): Don't call output_function_exception_table. + * toplev.c (compile_file): Call dw2_output_indirect_constants. + (rest_of_compilation): Invoke output_function_exception_table + for ia64 before assemble_end_function. + * tm.texi (ASM_PREFERRED_EH_DATA_FORMAT): Document. + (ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX): Document. + + * unwind-dw2.c (_Unwind_GetTextRelBase, _Unwind_GetDataRelBase): New. + * unwind.h: Declare them. + * libgcc-std.ver: Export them. + * unwind-pe.h: New file. + + * config/alpha/elf.h (ASM_PREFERRED_EH_DATA_FORMAT): New. + + * config/ia64/fde-glibc.c: Use "struct unw_table_entry" + instead of "fde". + (find_fde_for_dso): Extract DT_PLTGOT. + (_Unwind_FindTableEntry): Rename from __ia64_find_fde; return + the segment and gp as well. + * config/ia64/frame-ia64.c: Remove file. + * config/ia64/frame-ia64.h: Remove file. + * config/ia64/unwind-ia64.c: New file. + * config/ia64/unwind-ia64.h: New file. + * config/ia64/ia64.h (ASM_OUTPUT_EH_CHAR): Remove. + (ASM_OUTPUT_EH_SHORT, ASM_OUTPUT_EH_INT): Remove. + (ASM_OUTPUT_EH_DOUBLE_INT): Remove. + (ASM_PREFERRED_EH_DATA_FORMAT): New. + (ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX): New. + (IA64_UNWIND_INFO): Re-enable. + (HANDLER_SECTION): Remove. + (EH_RETURN_DATA_REGNO): New. + * config/ia64/ia64.md (exception_receiver): Remove. + * config/ia64/t-glibc (LIB2ADDEH): Re-enable. + * config/ia64/t-ia64 (LIB2ADDEH): Re-enable. + + 2001-05-11 Richard Henderson + + * config/ia64/ia64.c (group_barrier_needed_p): Don't allow + calls and jumps to be bundled together. + (ia64_reorg): Emit a break after a noreturn call that ends + a function. + * config/ia64/ia64.md (break_f): New. + + 2001-05-12 Neil Booth + + * c-lex.c (lex_charconst): Convert into a simple wrapper + around cpp_interpret_charconst, to which most of the code + body is moved. + * cppexp.c (MAX_CHAR_TYPE_SIZE, MAX_WCHAR_TYPE_SIZE, + MAX_LONG_TYPE_SIZE, MAX_INT_TYPE_SIZE, MAX_CHAR_TYPE_MASK, + MAX_WCHAR_TYPE_MASK, parse_escape, parse_charconst): Remove. + (lex): Use cpp_interpret_charconst. + * cpplex.c (parse_escape, read_ucs, cpp_interpret_charconst, + hex_digit_value): New functions. + (MAX_CHAR_TYPE_SIZE, MAX_WCHAR_TYPE_SIZE): New macros. + * cpplib.h (cpp_interpret_charconst): New prototype. + * Makefile.in: Update. + + 2001-05-12 Dean Wakerley + + * doc/install.texi: New file. Converted to texinfo from the HTML + documentation in wwwdocs/htdocs/install. + + Fri May 11 15:50:13 2001 Jeffrey A Law (law@cygnus.com) + + * gcse.c (insert_insn_end_bb): Do not search for assignments to + non-argumment registers that are mentioned in CALL_INSN_FUNCTION_USAGE. + + * toplev.c (compile_file): Move comment for opening output + file to just before the code that opens the output file. + + 2001-05-11 Jakub Jelinek + + * regmove.c (regmove_optimize): Suppress the optimization for + unchanging destination register. Add comment above function. + + 2001-05-11 Zack Weinberg + + * Makefile.in: Exterminate all references to assert.h. + * cross-make: Likewise. + * assert.h: Delete. + * configure.in: Correct commentary. + * configure: Regenerate. + + * libgcc-std.ver, libgcc2.c, libgcc2.h, sys-protos.h: + Remove __eprintf. + + * config/t-freebsd, config/t-linux, config/t-linux-aout, + config/t-netbsd, config/t-rtems, config/x-linux, + config/i386/t-beos, config/mcore/t-mcore, config/mcore/t-mcore-pe: + No need to override INSTALL_ASSERT_H. + + * fixinc/fixinc.dgux, fixinc/fixinc.interix, fixinc/fixinc.ptx, + fixinc/fixinc.svr4, fixinc/fixinc.winnt, fixinc/fixinc.wrap, + fixinc/fixincl.sh: Don't install assert.h into objdir/include. + + 2001-05-11 Graham Stott + + * combine.c (simplify_comparison): Fix typo. + + 2001-05-11 Mark Mitchell + + * loop.h (struct movables): Remove `num'. + * loop.c (scan_loop): Don't set it. Use count_insns_in_loop. + Adjust call to strength_reduce. + (num_unmoved_movables): New function. + (move_movables): Don't set movables->num. + (strength_reduce): Compute the number of instructions in the loop + here, rather than in the caller. + (check_dbra_loop): Always clear reversible_mem_store if there + are any memory sets. + (loop_regs_scan): Don't count instructions here. + (count_insn_in_loop): New function. + + 2001-05-11 Mark Mitchell + + * optabs.c (emit_libcall_block): Don't mark calls as CONST_CALL_P. + + 2001-05-11 Neil Booth + + * c-common.c (finish_label_expr): New function, lifted from + from cp/semantics.c. + * c-common.h (finish_label_expr, lookup_label): New prototypes. + * c-parse.in: Move 3 blocks of parser code into new functions. + * c-typeck.c (simple_asm_stmt, c_cast_expr): New functions. + * c-tree.h (simple_asm_stmt, c_cast_expr): New prototypes. + (lookup_label): Remove. + + 2001-05-11 Alexandre Oliva + + * config/mn10300/t-mn10300 (dp-bit.c, fp-bit.c): Don't define + FLOAT_BIT_ORDER_MISMATCH. + + 2001-05-10 David Edelsohn + + * expr.c (emit_push_insn): Convert PUSH_ROUNDING argument to + bytes. Reported by Kazu Hirata . + + 2001-05-10 David Edelsohn + + * expr.c (emit_group_load): extract_bit_field requires a REG or + MEM as an argument. + + Thu May 10 14:45:44 2001 Jeffrey A Law (law@cygnus.com) + + * cse.c (cse_insn): Mostly remove first hunk of code which collapsed + a computed jump into an unconditional jump. + In second hunk of code for collapsing computed and conditional jumps + into unconditional jumps, reemit the jump in additional cases. + + * jump.c (jump_optimize_1): Do not wrap the new jump target + inside a LABEL_REF; gen_jump will do that automatically. + + 2001-05-10 Toon Moene + + * dwarf2out.c (mem_loc_descriptor): Do not pass constant pool + contents for a SYMBOL_REF in case of floating point constants. + + 2001-05-10 DJ Delorie + + * c-common.c (combine_strings): Widen strings in a + host-endian-independent way. + + 2001-05-10 Joseph S. Myers + + * c-parse.in: Remove many shift/reduce conflicts. Update + %expect values. + (declspecs_nosc_nots_nosa_noea, declspecs_nosc_nots_nosa_ea, + declspecs_nosc_nots_sa_noea, declspecs_nosc_nots_sa_ea, + declspecs_nosc_ts_nosa_noea, declspecs_nosc_ts_nosa_ea, + declspecs_nosc_ts_sa_noea, declspecs_nosc_ts_sa_ea, + declspecs_sc_nots_nosa_noea, declspecs_sc_nots_nosa_ea, + declspecs_sc_nots_sa_noea, declspecs_sc_nots_sa_ea, + declspecs_sc_ts_nosa_noea, declspecs_sc_ts_nosa_ea, + declspecs_sc_ts_sa_noea, declspecs_sc_ts_sa_ea, declspecs_ts, + declspecs_nots, declspecs_ts_nosa, declspecs_nots_nosa, + declspecs_nosc_ts, declspecs_nosc_nots, declspecs_nosc, declspecs, + maybe_type_quals_setattrs, typespec_nonattr, typespec_attr, + typespec_reserved_nonattr, typespec_reserved_attr, + typespec_nonreserved_nonattr, maybe_setattrs, structsp_attr, + structsp_nonattr, components_notype, component_notype_declarator, + absdcl1_ea, absdcl1_noea, direct_absdcl1, absdcl_maybe_attribute, + firstparm, setspecs_fp): New + (typed_declspecs, reserved_declspecs, typed_typespecs, + reserved_typespecquals, declmods, typespec, typespecqual_reserved, + typed_declspecs_no_prefix_attr reserved_declspecs_no_prefix_attr + declmods_no_prefix_attr, nonempty_type_quals, structsp, + type_quals): Remove. Users updated. + (initdecls, notype_initdecls, after_type_declarator, + parm_declarator, notype_declarator, absdcl1, components, ivars): + Don't allow attributes at the start of a declarator; include them + in the production containing the declarator instead. Always + require type specifiers before trying to redeclare a typedef name. + (typename): Allow for attributes but warn that they are ignored. + (parmlist, firstparm, setspecs_fp): Include attributes in + parmlist; suck them off the parser stack in firstparm using + setspecs_fp. + + Thu May 10 09:17:42 2001 Jeffrey A Law (law@cygnus.com) + + * ifcvt.c (merge_if_block): Use any_uncondjump_p, not simplejump_p + to determine if a block has an unconditional jump at its end. + + * jump.c (jump_optimize_1): When converting a conditional jump + to an unconditional jump, build the jump using gen_jump instead + of just modify operands in-place. + + 2001-05-09 Zack Weinberg + + * cppinit.c (cpp_post_options): Shut off macro expansion if + -fpreprocessed. + * cpplib.c (_cpp_handle_directive): If -fpreprocessed, accept + IN_I directives only if the # is in column 1 and the directive + name begins in column 2. + * cppmain.c (scan_buffer): Insert a space between # and an + identifier, when that identifier is a directive name. + + * tradcpp.c (struct file_buf): Add a pointer to the next entry + in the header search path. + (enum node_type): Add T_INCLUDE_NEXT. + (directive_table): Add entry for include_next. + (do_include_next): New function. + (process_include): New routine, broken out of do_include. + (finclude): Insert 'nhd' argument, to be copied into + next_header_dir of the new buffer. + (main): Adjust to match. + * gsyslimits.h, limity.h: Un-indent #include_next. + + 2001-05-09 Joseph S. Myers + + * objc.texi: Move from ../libobjc/objc-features.texi. Adjust for + inclusion as a chapter of the GCC manual. + * gcc.texi: Include objc.texi. + * fdl.texi: Use @unnumberedsec for the addendum. + * Makefile.in ($(srcdir)/gcc.info, gcc.dvi): Update dependencies. + + Wed May 9 16:01:41 CEST 2001 Jan Hubicka + + * i386.md (DImode move splitters): Use !MMX and !SSE for the condition. + + Wed May 9 10:40:25 2001 Alexandre Oliva + + * regclass.c (scan_one_insn): Update REG_N_REFS when optimizing + handling of two-address insns. + + Wed May 9 10:36:18 2001 Alexandre Oliva + + * Makefile.in (NM_FOR_TARGET): Look for ./nm, then + ../binutils/nm-new instead of ../binutils/nm. + + Wed May 9 12:15:46 CEST 2001 Jan Hubicka + + * i386.md (movdi splitter): Fix the splitting condition + (float_extenddftf splitter): Fix mode. + + Wed May 9 12:05:39 CEST 2001 Jan Hubicka + + * genrecog.c (write_switch): Avoid outputting of switch for + types wider than int. + + 2001-05-03 Andrew Haley + + * reload1.c (copy_eh_notes): New function. + (emit_input_reload_insns): Call it. + (emit_output_reload_insns): Call it. + + 2001-05-07 Zack Weinberg + + * config.gcc (i[34567]86-*-sco3.2v4*, i[34567]86-*-sco*): + Delete stanzas. + * config/i386/sco.h, config/i386/sco4.h, config/i386/scodbx.h, + config/i386/sco4dbx.h, config/i386/x-sco4: Delete file. + + * optabs.c: Delete #ifdef BROKEN_LDEXP block. + + 2001-05-07 John David Anglin + + * pa.md (interspace_jump): Revise comment. + (builtin_longjmp): Block initial setup insns from delay slot of + interspace branch. + (builtin_setjmp_receiver): New expander to save and restore PIC + register. + + * som.h (NM_FLAGS): Remove `-n' sort option. Revise comment. + + Mon May 7 09:30:14 2001 Jeffrey A Law (law@cygnus.com) + + * toplev.c (compile_file): Set up the output file before we call + the various initializers for the compiler. + + * except.c (sjlj_mark_call_sites): Do not search for assignments to + non-argumment registers that are mentioned in CALL_INSN_FUNCTION_USAGE. + + * pa.h (MAX_LONG_TYPE_SIZE): Should be 32, not 64. + * pa-64.h (*_TYPE_SIZE): Undefine before redefining. + + 2001-05-06 Zack Weinberg + + * Makefile.in (tradcpp0): Correct typo in dependency list. + + 2001-05-06 Geoff Keating + + * config/rs6000/rs6000.c (rs6000_emit_prologue): Don't save + the link register if we're not going to use it. + + * config/rs6000/rs6000.c (output_profile_hook): Fix a warning. + (output_function_profiler): Likewise. + + 2001-05-07 Alan Modra + + * pa.c (compute_frame_size): 64-bit frame marker is 16 bytes. + + 2001-05-06 Alexandre Oliva + + * unroll.c (loop_iterations): Don't sign-extend abs_diff; + zero-extend it. Make abs_inc unsigned. + + * optabs.c (expand_binop): Sign-extend xop0 and xop1 from the + widest mode in narrowing and widening operations. + + * config/mips/mips.md: Sign extend CONST_INTs. + + 2001-05-06 Andreas Jaeger + + * invoke.texi (Option Summary): Add -momit-leaf-frame-pointer + (i386 Options): Document -momit-leaf-frame-pointer. + + 2001-05-06 Neil Booth + + * c-typeck.c (internal_build_compound_expr): Check for + array to pointer conversion just once. + + 2001-05-05 Richard Henderson + + * integrate.c (copy_insn_list): Substitute NOTE_EXPECTED_VALUE. + + 2001-05-05 Richard Henderson + + * except.c (remove_fixup_regions): Adjust REG_EH_REGION notes + to the parent of the fixup region. + + 2001-05-05 Jakub Jelinek + + * gcc.c (cpp_options): Define __NO_INLINE__ unless we are honoring + "inline" keyword. + * cpp.texi (__NO_INLINE): Document it. + + 2001-05-05 Neil Booth + + * cppfiles.c (struct include_file): New member err_no. + (find_or_create_entry): Set it. + (open_file): Don't set fds to -2. Instead, use err_no to + remember previous errors, if any. + + 2001-05-05 Stephane Carrez + + * config/m68hc11/m68hc11.c (m68hc11_gen_movhi): Optimize moves + between X and Y by using sequences of xgdx and xgdy. + + 2001-05-05 Stephane Carrez + + * config/m68hc11/m68hc11.md ("*logicalsi3_silshr16"): Use '?' instead + of '!' for the 'D' alternative ('!' is too strong). + ("*logicalsi3_silshl16"): Likewise. + ("movstricthi"): Accept 'A' when 'd' constraint, remove spurious '+'. + ("movstrictsi"): Remove spurious '+'. + ("movstrictqi"): Don't accept 'A' and remove spurious '+'. + ("tstqi_1", "*lshrqi3_const1"): Put 'm' constraint before 'd'. + ("subqi3"): Disparage with '!' the 'x' and 'y' registers to avoid + a reload to them. + + 2001-05-04 David Edelsohn + + * calls.c (store_one_arg): Don't divide align by BITS_PER_UNIT. + + 2001-05-04 Lars Brinkhoff + + * simplify-rtx.c (simplify_binary_operation): Simplify ~a + 1 + into -a. + + 2001-05-04 Franz Sirl + + * config/rs6000/rs6000.md (ashldi3 splits): Guard with + TARGET_POWERPC64. + + 2001-05-04 Stephane Carrez + + * config/m68hc11/m68hc11.md (lshrhi3_const1): Fix shift of + soft register, use ror instead of rol. + + 2001-05-04 Stephane Carrez + + * config/m68hc11/m68hc11.c (m68hc11_check_z_replacement): Take + into account pre/post increment decrement for 68HC12. + Fix other problems in replacement and fix call to reg_mentioned_p. + + 2001-05-04 Stephane Carrez + + * config/m68hc11/larith.asm (L_regs_frame): New for _.frame. + Put the soft registers in bss for 68HC12. + (L_regs_d3_4): New for _.d3 and _.d4. + (L_regs_d5_6): Likewise. + (L_regs_d1_2): Likewise. + * config/m68hc11/t-m68hc11-gas (T_CPPFLAGS): Compile new parts. + + 2001-05-04 Stephane Carrez + + * config/m68hc11/m68hc11.h (CPP_SPEC): Pass -D__HAVE_SHORT_DOUBLE__ + to the pre-processor when -fshort-double is specified. + * config/m68hc11/m68hc11.2 (CPP_SPEC): Likewise. + + 2001-05-04 Stephane Carrez + + * config/m68hc11/larith.asm (divmodhi4): Empty for 68HC12. + (__mulsi3): Rewrite for 68HC12. + * config/m68hc11/m68hc11.md (divmodhi4): Use idivs for 68HC12. + Mark 'x' constraint with earlyclobber to prevent a + RELOAD_FOR_OTHER_ADDRESS to go in it. + (mulhi3_m68hc12): New pattern. + (mulhi3_m68hc11): Rename of mulhi3. + (mulhi3): New expand for 68HC12 optimisation. + (umulhisi3, mulhisi3): New patterns for 68HC12. + + 2001-05-04 Stephane Carrez + + * config/m68hc11/m68hc11.md (*tbne, *tbeq): New patterns for 68HC12. + (extendqisi2, extendqihi2, extendhisi2): Use sex for 68HC12. + (uminqi3, umaxqi3, uminhi3, umaxhi3): New pattern for 68HC12. + + 2001-05-04 Stephane Carrez + + * config/m68hc11/m68hc11.h (CONST_COSTS): Make the cost of + constants cheap after reload. + * config/m68hc11/m68hc11.c (m68hc11_shift_cost): Shift by 16 and 32 + are cheap. + (m68hc11_rtx_costs): Cost of multiplication by 65536 is expensive + so that gcc prefers a shift by 16. + (m6811_cost, m6812_cost): Make the shift cheap compared to an add. + + 2001-05-04 Nick Clifton + + * config/arm/elf.h (ASM_OUTPUT_ALIGNED_COMMON): Define. + + 2001-05-04 Kaveh R. Ghazi + + * alpha.h: NULL_PTR -> NULL. + * arm.c: Likewise. + * arm.h: Likewise. + * avr.h: Likewise. + * c4x.c: Likewise. + * c4x.h: Likewise. + * i386.c: Likewise. + * i386.md: Likewise. + * i860.c: Likewise. + * ia64.c: Likewise. + * m68hc11.h: Likewise. + * rs6000.h: Likewise. + * sh.c: Likewise. + * sh.h: Likewise. + * sparc.h: Likewise. + * v850.c: Likewise. + + * expr.c: Likewise. + * final.c: Likewise. + * gcc.c: Likewise. + * recog.c: Likewise. + + 2001-05-04 Kaveh R. Ghazi + + * i386.c (ix86_emit_restore_regs_using_mov, ix86_save_reg): Change + `bool' parameter to `int'. + + * hash.c (hash_lookup): Likewise. + + * hash.h (hash_lookup): Likewise. + + * tlink.c (symbol_hash_lookup, demangled_hash_lookup): Likewise. + + Fri May 4 13:10:03 CEST 2001 Jan Hubicka + + * i386.c (x86_initialize_trampoline): Fix mode of constant. + + 2001-05-03 Geoff Keating + + * invoke.texi (i386 Options): Delete references to -malign-jumps, + -malign-loops, -malign-functions. + * i386.c (ix86_align_funcs): Delete. + (ix86_align_loops): Delete. + (ix86_align_jumps): Delete. + (override_options): Mark -malign-* as obsolete. Emulate their + behaviour with the -falign-* options. Default -falign-* from + the processor table. + * i386.h (FUNCTION_BOUNDARY): Define to 16; revert Richard Kenner's + patch of Wed May 2 13:09:36 2001. + (LOOP_ALIGN): Delete. + (LOOP_ALIGN_MAX_SKIP): Delete. + (LABEL_ALIGN_AFTER_BARRIER): Delete. + (LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP): Delete. + + 2001-05-04 Andreas Jaeger + + * except.h: Add prototype declaration for + expand_builtin_init_dwarf_reg_sizes. + + 2001-05-03 Geoffrey Keating + + * Makefile.in (site.exp): Set TESTING_IN_BUILD_TREE. + + 2001-05-03 Stephane Carrez + + * config/m68hc11/m68hc11.md ("bitcmpqi"): New pattern for bitb + instruction. + ("bitcmpqi2"): New pattern for bit-extract and test. + ("bitcmphi"): New pattern for bitb/bita instructions. + + 2001-05-03 Joseph S. Myers + + * gccbug.in: Use a temporary directory when the mktemp command is + not available. + + 2001-05-03 Stephane Carrez + + * config/m68hc11/m68hc11.h (STATIC_CHAIN_REGNUM): Use soft z register + instead of _.d1. + (INITIALIZE_TRAMPOLINE): Call it. + (TRAMPOLINE_SIZE): Define according to 68HC11/68HC12. + (TRAMPOLINE_TEMPLATE): Remove. + * config/m68hc11/m68hc11.c (m68hc11_initialize_trampoline): New. + * config/m68hc11/m68hc11-protos.h (m68hc11_initialize_trampoline): + Declare. + + 2001-05-03 David O'Brien + + * config/t-freebsd: Don't install "assert.h" in gcc. Compile crtbeginS.o + and crtendS.o with PIC. + + 2001-05-03 Stephane Carrez + + * config/m68hc11/larith.asm (__mulqi3): Fix multiplication of two + negative numbers. + (___subdi3, ___adddi3): Use x instead of y as index register. + (__init_bss_section, __map_data_section): Optimize for 68HC12. + (__memset, __memcpy): Likewise. + (regs): Put the soft registers in bss for 68HC12. + (abort): Use trap to abort for 68hc12. + (__mulhi3, __mulhi32): Use emul for 68hc12. + (__mulsi3): Avoid to use the tmp soft register for 68hc12. + + 2001-05-03 Stephane Carrez + + * config/m68hc11/m68hc11.h (LIMIT_RELOAD_CLASS): Don't define. + * config/m68hc11/m68hc11-protos.h (limit_reload_class): Remove. + * config/m68hc11/m68hc11.c (limit_reload_class): Remove. + (m68hc11_override_options): Remove setting of flag_no_nonansi_builtin. + Set 68HC12 min offset to -65536. + (print_operand): Put parenthesis arround the operand if it refers + to a symbol having the same name as a register. + (m68hc11_z_replacement): When z register is replaced by its + equivalent soft register, force the insn to be re-recognized. + (m68hc11_check_z_replacement): Fix the test when destination is + the index register and z dies in the insn. + (m68hc11_reorg): Remove the REG_DEAD notes beforce recomputing them. + + 2001-05-03 Stephane Carrez + + * config/m68hc11/m68hc11.c (m68hc11_override_options): Initialize + costs according to processor variant. + (m68hc11_shift_cost): New function to compute shift costs. + (m68hc11_rtx_costs): Define costs according to processor variant. + (m6811_cost): Costs for 68HC11. + (m6812_cost): Costs for 68HC12. + (COSTS_N_INSNS): Remove. + + * config/m68hc11/m68hc11.h (RTX_COSTS): New. + (DEFAULT_RTX_COSTS): Remove. + (CONST_COSTS): Define costs according to OUTER_CODE. + (processor_costs): New struct to define costs. + (m68hc11_cost): Pointer to current costs. + + 2001-05-03 Stephane Carrez + + * config/m68hc11/m68hc11.md (*addhi3_68hc12): Fix generation + and use m68hc11_notice_keep_cc when using leax/leay. + (addhi3 split): Reject split if the insn is handled by + leax/leay above. + * config/m68hc11/m68hc11.c (m68hc11_split_move): For 68HC12 the + push must be handled in a special way if the source operand uses + sp as index register. + (m68hc11_notice_keep_cc): New function. + (m68hc11_gen_movhi): Use it when an insn changes a register but + not the flags. + (m68hc11_gen_movqi): Fix move for 68HC12. + * config/m68hc11/m68hc11-protos.h (m68hc11_notice_keep_cc): Declare. + + 2001-05-03 Stephane Carrez + + * config/m68hc11/m68hc11.c (m68hc11_emit_libcall): Use LCT_CONST + and don't pass operands[0] to emit_library_call_value. + + 2001-05-03 Stephane Carrez + + * config/m68hc11/m68hc11.md (tsthi_1): Use cpd for 68HC12. + (zero_extendsi split): Simplify and use (zero_extendhi). + (*addhi3): Remove 'w' constraint since stack pointer is handled + by (addhi3_sp). + (*ashlhi3_2): Operand 2 is clobbered use '+' for its constraint. + (*ashlhi3, *ashrhi3, *lshrhi3): Likewise. + (*ashrhi3_const): Fix shift by 7. + (*lshrsi3_const16): Fix template. + (call, call_value): Fix constraint and predicate. + + 2001-05-03 Stephane Carrez + + * config/m68hc11/m68hc11.md (X_REGNUM, D_REGNUM): New constant. + (Y_REGNUM, SP_REGNUM, PC_REGNUM, A_REGNUM, B_REGNUM): Likewise. + (CC_REGNUM): Likewise. + (*unnamed splits): Use above constants instead of hard coded numbers. + (*adcq, *subcq, *addsi_carry, *rotlqi3_with_carry): Likewise. + (*rotlhi3_with_carry, *rotrhi3_with_carry): Likewise. + (*return_16bit, *unnamed peepholes): Likewise. + + 2001-05-03 David O'Brien + + * config.gcc(rs6000-ibm-aix|powerpc-ibm-aix): Do not include + rs6000/rs6000.h twice. + + 2001-05-03 Mark Elbrecht + + * config/i386/djgpp.h (CPP_PREDEFINES): Define __GO32__. + (CPP_SPEC): Conditionally define MSDOS and GO32. + (SUBTARGET_SWITCHES): Ignore -mbnu210 and -mno-bnu210. + (SUBTARGET_OVERRIDE_OPTIONS): Warn that -mbnu210 and -mno-bnu210 are + ignored. + (SUPPORTS_WEAK, SUPPORTS_ONE_ONLY): Remove. + + 2001-05-03 Alexandre Oliva + + * config/mn10300/mn10300.md: Sign-extend GEN_INT operands. + + 2001-05-03 Mark Mitchell + + * integrate.h (struct inline_remap): Add leaf_reg_map table. + * integrate.c (expand_inline_function): Use xcalloc to allocate + memory. + (copy_rtx_and_substitute): Use the leaf_reg_map for leaf + registers. + + 2001-05-03 Mark Mitchell + + * c-dump.c (dequeue_and_dump): Don't look at DECL_ASSEMBLER_NAME + if it is not set. + + 2001-05-03 Alexandre Oliva + + * config/mn10300/mn10300.h (LINK_SPEC): Pass --relax to the + linker if -mrelax is given. + (TARGET_SWITCHES): Document -mrelax. + + Re-installed 2001-01-09's patch: + * hwint.h (HOST_BITS_PER_WIDE_INT, HOST_WIDE_INT): Use long long + if it's wider than long and the target's long is wider than the + host's. + + 2001-05-02 David O'Brien + + * config.gcc, config/rs6000/aix51.h, config/rs6000/mach.h: Do not + directly include rs6000/rs6000.h. Instead do it in tm.h. + + 2001-05-02 Stan Shebs + + * objc/objc-act.c (STRING_OBJECT_CLASS_NAME): Default to + NSConstantString for NeXT-style runtimes. + (STRING_OBJECT_GLOBAL_NAME): New macro. + (enum objc_tree_index): Add values OCTI_CNST_STR_GLOB_ID and + OCTI_STRING_CLASS_DECL. + (constant_string_global_id): New macro. + (string_class_decl): Ditto. + (setup_string_decl): New function. + (build_objc_string_object): Use it to build a NeXT runtime + compatible string initializer. + + 2001-05-02 Jakub Jelinek + + * tradcpp.c (do_define): Make sure we don't walk past limit. + + 2000-05-01 Franz Sirl + + * config/rs6000/rs6000.c (rs6000_legitimate_address): Allow any stack + offsets if not REG_OK_STRICT. + + * config/rs6000/rs6000.h (REG_OK_STRICT_FLAG): New macro. + (INT_REG_OK_FOR_INDEX_P): Likewise. + (INT_REG_OK_FOR_BASE_P): Likewise. + (REG_OK_FOR_INDEX_P): Use INT_REG_OK_FOR_INDEX_P. + (REG_OK_FOR_BASE_P): Use INT_REG_OK_FOR_BASE_P. + (LEGITIMATE_OFFSET_ADDRESS_P): Use INT_REG_OK_FOR_INDEX_P and + INT_REG_OK_FOR_BASE_P instead of REG_OK_FOR_INDEX_P and + REG_OK_FOR_BASE_P. Take an additional parameter. + (LEGITIMATE_INDEXED_ADDRESS_P): Likeewise. + (LEGITIMATE_INDIRECT_ADDRESS_P): Likewise. + (LEGITIMATE_LO_SUM_ADDRESS_P): Likewise. + (GO_IF_LEGITIMATE_ADDRESS): Move code into new function + rs6000_legitimate_address() and use it. + * config/rs6000/rs6000.c: Update all callers. + (rs6000_legitimate_address): New function. + + 2001-05-02 David Edelsohn + + * config/rs6000/rs6000.c (rs6000_emit_move): Merge + special_constant conditional blocks together. + + 2001-05-02 Dale Johannesen + + * config/rs6000/rs6000.h (RS6000_ARG_SIZE): Remove unused NAMED + parameter. + (STRICT_ARGUMENT_NAMING): Define. + * config/rs6000/rs6000.c (function_arg_advance, function_arg, + function_arg_partial_nregs, setup_incoming_varargs): Remove + args logic which depends on "named" now that STRICT_ARGUMENT_NAMING + is defined. + + Wed May 2 13:09:36 2001 Richard Kenner + + * config/i386/i386.h (FUNCTION_BOUNDARY): Result is unsigned. + + * function.c (fixup_var_regs_1, case SUBREG): Use promoted mode + for replacement. + + * expr.c (store_field): Do nothing except elaborate side-effects if + zero-bit field. + + 2001-05-02 Kaveh R. Ghazi + + * c-lex.c: NULL_PTR -> NULL. + * cse.c: Likewise. + * emit-rtl.c: Likewise. + * gcse.c: Likewise. + * genpeep.c: Likewise. + * jump.c: Likewise. + * mips-tdump.c: Likewise. + * reload1.c: Likewise. + * rtlanal.c: Likewise. + * stmt.c: Likewise. + * stor-layout.c: Likewise. + * toplev.c: Likewise. + + 2001-05-01 Per Bothner + + * expr.c (expand_expr): When compiling LABELED_BLOCK_EXPR, + call do_pending_stack_adjust before emiting label. + + 2001-05-01 Mark Mitchell + + * extend.texi: Fix typo. + + 2001-05-01 Stan Shebs + + * objc/objc-act.c (build_module_descriptor): Clear DECL_CONTEXT + of UOBJC_MODULES_decl. + (generate_strings): Clear DECL_CONTEXT of new decl nodes. + (generate_descriptor_table): Ditto. + (generate_protocols): Ditto. + (generate_protocol_list): Ditto. + (generate_classref_translation_entry): Ditto. + + 2001-05-01 Jeffrey Oldham + + * invoke.texi (Optimize Options): Add documentation for `--param + max-delay-slot-insn-search' and `--param + max-delay-slot-live-search' and reorder --param section. + * params.def: Modify initial comment. + * params.h (param_info): Add `help' member. + * toplev.c (lang_independent_params): Include `help' description. + (display_help): Print --param parameters. + + 2001-05-01 Zack Weinberg + + * config.gcc: Don't default xmake_file to ${cpu_type}/x-${cpu_type}. + Remove references to deleted files. + (*-*-openbsd): No need to override xmake_file. + (*-*-sysv4): Treat like *-*-sysv. + + * configure.in: Probe for ldopen in various places, and set up + collect2 to be linked with them if found. + Don't dink with Windows registry stuff unless $host_os is a + Win32 os name. Check to see if we need -ladvapi32. + * configure: Regenerate. + + * Makefile: Get rid of CLIB and HOST_CLIB. + Substitute in COLLECT2_LIBS and link collect2 against its contents. + * build-make: Get rid of HOST_CLIB. + + * config/a29k/x-unix, config/alpha/x-osf, config/i386/x-aix, + config/i386/x-osfrose, config/m68k/x-dpx2, config/mips/x-iris3, + config/mips/x-mips, config/mips/x-osfrose, config/mips/x-sony, + config/mips/x-sysv, config/rs6000/x-aix31, config/rs6000/x-aix41, + config/rs6000/x-rs6000: Delete. + + * config/i386/x-cygwin, config/m68k/t-aux, config/mips/x-iris: + Don't set CLIB. + + 24 x-host fragments remain, 0 x-cpu, 3 top level. + + 2001-05-01 Zack Weinberg + + * aclocal.m4 (gcc_AC_C_CHAR_BIT): Correct test program. + * configure: Regenerate. + + 2001-05-01 Angela Marie Thomas + + * Makefile.in (install-headers): Remove redundant dependency. + + 2001-05-01 Nathan Sidwell + + * c-tree.texi (USING_STMT): Document. + + 2001-05-01 Kaveh R. Ghazi + + * bitmap.c: Change NULL_PTR to NULL or "(rtx*)0". + * c-common.c: Likewise. + * c-decl.c: Likewise. + * combine.c: Likewise. + * rs6000.c: Likewise. + * except.c: Likewise. + * explow.c: Likewise. + * expr.c: Likewise. + * fold-const.c: Likewise. + * function.c: Likewise. + * gcc.c: Likewise. + * gcse.c: Likewise. + * integrate.c: Likewise. + * loop.c: Likewise. + * objc/objc-act.c: Likewise. + * recog.c: Likewise. + * reg-stack.c: Likewise. + * reload.c: Likewise. + * reload1.c: Likewise. + * simplify-rtx.c: Likewise. + * stmt.c: Likewise. + * varasm.c: Likewise. + + 2001-05-01 Gabriel Dos Reis + + * diagnostic.def: New file. + * diagnostic.h (diagnostic_t): New enum. + * Makefile.in (diagnostic.o): Depend on diagnostic.def + + 2001-04-30 Zack Weinberg + + * tsystem.h: Test only POSIX for availability of string.h + and time.h. + * config.gcc (all systems): If USG appeared in xm_defines, + change it to POSIX. If both USG and POSIX appeared, just + delete USG. Remove unnecessary quotes around xm_defines + settings. + (m68k-crds-unos*): Don't #define unos - tested nowhere. + (m68k-apple-aux*): Don't #define AUX - tested nowhere. + (alpha*-*-linux*ecoff*, powerpc-*-linux*libc1, + powerpc-*-linux*): No need to set xm_defines - handled by + global settings for *-*-linux*. + + 2001-04-30 Zack Weinberg + + * dbxout.c, mips-tfile.c, config/mips/mips.c, xcoffout.c: + Always include gstab.h, not system stab.h. Don't provide + default definitions of N_CATCH or N_OPT. Always use the + gstab.h variant of STAB_CODE_TYPE. + * final.c: Don't include stab.h/gstab.h at all, or provide + defaults for N_SLINE and N_SOL. + + * xcoffout.c: Can assume N_MAIN, N_DSLINE, N_BSLINE, N_BINCL, + N_EINCL, N_EXCL, N_M2C, N_SCOPE, N_CATCH, and N_OPT are + available. + * sdbout.c: Always include gsyms.h instead of system syms.h. + + * configure.in: No need to check for stab.h. + * configure, config.in: Regenerate. + * Makefile.in (final.o): Don't depend on gstab.h. + + 2001-04-30 Mark Mitchell + Richard Henderson + + * extend.texi: Improve documentation of volatile asms. + + 2001-04-30 Mark Mitchell + + * c-tree.texi: Fix thinko. + * gcc.texi: Likewise. + + 2001-04-30 Richard Henderson + + * c-common.c (c_promoting_integer_type_p): New function, from the + corpse of old macro. Properly promote too-small enumerations and + booleans. Adjust all callers. + * c-common.h (C_PROMOTING_INTEGER_TYPE_P): Remove. + (c_promoting_integer_type_p): Declare. + * c-decl.c: Adjust C_PROMOTING_INTEGER_TYPE_P invocations. + * c-typeck.c: Likewise. + (default_conversion): Remove now redundant boolean check. + + 2001-04-30 Jan Hubicka + Richard Henderson + + * regmove.c (try_apply_stack_adjustment): Remove now redundant + sanity checks. + (combine_stack_adjustments_for_block): Don't combine stack + allocation followed by deallocations. Handle grow-up stacks. + + 2001-04-30 Mark Mitchell + + * fdl.texi: New file. + * c-tree.texi: Use the GFDL. + * gcc.texi: Likewise. + + 2001-04-30 Stan Shebs + + * invoke.texi: Add a section documenting Objective-C options. + + 2001-04-27 Andrew Haley + + * emit-rtl.c (try_split): Copy EH notes to sequence. + + 2001-04-30 Mark Mitchell + + * regmove.c (record_stack_memrefs): Catch all references to the + stack pointer. + + 2001-04-29 Toomas Rosin + + * Makefile.in (stmp-fixinc): quote shell assignment values + + 2001-04-29 Kaveh R. Ghazi + + * c-aux-info.c: NULL_PTR->NULL in calls to `concat'. + + * gcc.c: Likewise. + + * prefix.c: Likewise. + + 2001-04-28 Stan Shebs + + * objc/objc-act.c (handle_class_ref): Rewrite to flush target + specific code and use new macro ASM_DECLARE_UNRESOLVED_REFERENCE. + * config/darwin.h (ASM_DECLARE_UNRESOLVED_REFERENCE): Define. + * tm.texi (ASM_DECLARE_UNRESOLVED_REFERENCE): Document. + + * config/darwin.h (STANDARD_EXEC_PREFIX): Don't define. + (NEXT_OBJC_RUNTIME): Define. + + Sat Apr 28 21:02:58 CEST 2001 Jan Hubicka + + * rtl.h (simplify_gen_relational): Add cmp_mode parameter. + * simplify-rtx.c (simplify_gen_relational): Likewise. + + * simplify-rtx.c (simplify_replace_rtx): Handle relationals and MEMs. + + * i386.h (VALID_SSE_REG_MODE): Accept MMX modes if SSE2 + * i386.md (movsi_1, movdi2, movdi_1_rex64): Handle SSE2 moves. + + * i386.md (negsf2, negdf2, abssf2, absdf2): Force operands to + registers in SSE case; fix handling of the immediates. + (negsf2_ifs, abssf2_ifs): Tweak constraints; require + operands to be in regsiters before reload. + (negdf2_ifs, absdf2_ifs): Likewise; disable for 64bit + (negdf2_ifs_rex64, absdf2_ifs_rtx64): New. + (abstf,absxf,negtf,negxf splitters): Compute + properly the regnum for x86_64. + (avsdf2_if_rex64): New. + + Sat Apr 28 10:36:23 2001 Jeffrey A Law (law@cygnus.com) + + * flow.c (propagate_block_delete_insn): Handle deletion of ADDR_VEC + and ADDR_DIFF_VEC insns when the proceeding CODE_LABEL was put + into the constant pool. + * jump.c (jump_optimize_1): Remove barrier successors after all + the LABEL_NUSES counds have been computed. + (delete_barrier_successors): When deleting a tablejump insn, also + delete the jump table it uses. + * varasm.c (force_const_mem): Set LABEL_PRESERVE_P when forcing a + label into memory. + + 2001-04-28 Martin Kalen + + * pa.c (FRP): Remove erroneous white space in macro definition. + + 2001-04-28 Andreas Jaeger + + * invoke.texi: Use XX-bit instead of XXbit or XX bit where + appropriate. + * extend.texi: Likewise. + * tm.texi: Likewise. + + 2001-04-28 Andreas Jaeger + + * md.texi: Use XX-bit instead of XXbit or XX bit where + appropriate. + + 2001-04-28 Jens Schweikhardt + + * gcc.c (process_command): Allow -l lib in addition to -llib + for POSIX compliance. This fixes PR c/2347. + + * invoke.texi: Update section on Link Options accordingly. + + 2001-04-27 Zack Weinberg + + * function.c (purge_addressof_1): Remove the duplicate + if (code == SET) block. Fold the two if (code == ADDRESSOF) + blocks together. + + 2001-04-28 Jason Merrill + + * except.c (expand_eh_region_start): Don't start a new block. + (expand_eh_region_end): Don't end a block. + * stmt.c (expand_end_bindings): Don't end EH blocks. + (expand_decl_cleanup): Starting an EH region won't change the block. + (mark_block_as_eh_region, mark_block_as_not_eh_region): Lose. + (is_eh_region): Lose. + * tree.h: Adjust. + + 2001-04-27 Jeffrey Oldham + + * except.c (expand_eh_region_end_cleanup): word_mode, not Pmode. + + * collect2.c (main): Add `-L' case to remove duplicate entries. + (is_in_args): New function to check for a duplicate argument. + * defaults.h (LINK_ELIMINATE_DUPLICATE_LDIRECTORIES): New macro. + * tm.texi (LINK_ELIMINATE_DUPLICATE_LDIRECTORIES): New documentation. + * config/mips/iris6.h (LINK_ELIMINATE_DUPLICATE_LDIRECTORIES): + Define to be nonzero. + + 2001-04-27 Andreas Jaeger + Richard Henderson + + * md.texi (Machine Constraints): Document additional i386 + constraints and fix description of "A". + + Fri Apr 27 10:43:49 2001 Jeffrey A Law (law@cygnus.com) + + * tm.texi (TARGET_MEM_FUNCTIONS): Update text. + + 2001-04-27 Jason Merrill + + * except.c (get_exception_filter): word_mode, not Pmode. + + 2001-04-26 Geoffrey Keating + + * config/sparc/sparc.md (movsf_no_f_insn): Add more alternatives + common to other movsf patterns. Move up so that in future + people who change the other patterns will change it too. + (movsf_lo_sum): Allow even for soft-float; add appropriate + constraints. + (movsf_high): Likewise. + (movsf_high+1): Allow even for soft-float. + + * function.c (expand_function_end): Always clobber the + return registers, even if there is no return label. + + Thu Apr 26 20:28:21 CEST 2001 Jan Hubicka + + * (ix86_expand_fp_movcc): Re-enable SSE conditional move generation. + + Thu Apr 26 19:20:28 CEST 2001 Jan Hubicka + + * i386.md (abs/neg splitter): Fix calculation of sign bit for TFmodes + (pushqi2_rex64, pushhi2_rex64): Add. + + 2001-04-26 Andrew Haley + + * except.c (expand_eh_region_end_cleanup): Force pending stack + adjust before emitting label that branches around cleanup code. + + 2001-04-26 H.J. Lu (hjl@gnu.org) + + * config.gcc (mips*-*-linux*): Add elfos.h to tm_file. + + * config/mips/ecoff.h (STARTFILE_SPEC): Undefine before + define. + * config/mips/elf64.h (MAX_OFILE_ALIGNMENT): Likewise. + (ASM_OUTPUT_SECTION_NAME): Likewise. + (ASM_WEAKEN_LABEL): Likewise. + (UNIQUE_SECTION): Likewise. + (ASM_OUTPUT_CONSTRUCTOR): Likewise. + (ASM_OUTPUT_DESTRUCTOR): Likewise. + * config/mips/elf.h (MAX_OFILE_ALIGNMENT): Likewise. + (ASM_OUTPUT_SECTION_NAME): Likewise. + (ASM_WEAKEN_LABEL): Likewise. + (UNIQUE_SECTION): Likewise. + (ASM_OUTPUT_CONSTRUCTOR): Likewise. + (ASM_OUTPUT_DESTRUCTOR): Likewise. + * config/mips/linux.h (HANDLE_SYSV_PRAGMA): Likewise. + * config/mips/mips.h (DBX_CONTIN_LENGTH): Likewise. + (ASM_FILE_START): Likewise. + (ASM_OUTPUT_SOURCE_LINE): Likewise. + (ASM_DECLARE_OBJECT_NAME): Likewise. + (ASM_FILE_END): Likewise. + (ASM_DECLARE_FUNCTION_NAME): Likewise. + (ASM_OUTPUT_INTERNAL_LABEL): Likewise. + (ASM_GENERATE_INTERNAL_LABEL): Likewise. + (ASM_OUTPUT_CASE_LABEL): Likewise. + (ASM_OUTPUT_SKIP): Likewise. + (ASM_OUTPUT_ASCII): Likewise. + (ASM_OUTPUT_IDENT): Likewise. + (READONLY_DATA_SECTION): Likewise. + (EXTRA_SECTIONS): Likewise. + (EXTRA_SECTION_FUNCTIONS): Likewise. + (SELECT_RTX_SECTION): Likewise. + (SELECT_SECTION): Likewise. + + * config/mips/linux.h (INVOKE__main): Undefine. + (CTOR_LIST_BEGIN): Likewise. + (CTOR_LIST_END): Likewise. + (DTOR_LIST_BEGIN): Likewise. + (DTOR_LIST_END): Likewise. + (SET_ASM_OP): Defined it to ".dummy". + (ASM_OUTPUT_DEF): Defined. + (ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL): Defined. + + 2001-04-26 Nick Clifton + + * config/arm/arm.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Define, if the + assembler supports .p2align. + + 2001-04-26 Nathan Sidwell + + * c-lex.c (c_lex): Remove # from %o diagnostic formatting. + + 2001-04-26 Jakub Jelinek + + * integrate.c (expand_inline_function): Check for error_mark_node + in actual argument. + + 2001-04-26 Jakub Jelinek + + * config/i386/i386.h (CC1_CPU_SPEC): Fix deprecation warnings for + -m386 and -m486. + + 2001-04-26 Alexandre Oliva + + * configure.in (configargs.h): Define thread_model. + * configure: Rebuilt. + * gcc.c (main): Print it with -v. + + 2001-04-25 Joseph S. Myers + + * invoke.texi: Document -Wmissing-braces, -dumpspecs, + -dumpmachine, -dumpversion, -fmem-report and -ftime-report. + * gcc.1: Regenerate. + + 2001-04-25 Rainer Orth + + * dwarfout.c (is_pseudo_reg, type_main_variant, is_tagged_type, + is_redundant_typedef): Use static inline instead of inline static. + + Wed Apr 25 18:21:01 2001 Christopher Faylor + + * config/i386/cygwin.h: Move W32API search to LINK_SPEC to ensure that + this directory is always searched. + + 2001-04-25 Richard Henderson + + * config/i386/i386.c (ix86_expand_epilogue): Properly compute size + of registers to restore along non eh_return path. + + 2001-04-25 Jakub Jelinek + + * c-format.c (check_format_info_recurse): Handle + PLUS_EXPR for format string. + + 2001-04-25 Jakub Jelinek + + * config/ia64/ia64.h (CC1_SPEC): Define. + * config/ia64/linux.h (CC1_SPEC): Define. + + Wed Apr 25 17:09:50 2001 J"orn Rennecke + + * emit-rtl.c (constant_subword): Also do sign extension in + BITS_PER_WORD == 16 case. + + 2001-04-25 Jason Merrill + + * loop.c (try_swap_copy_prop): Go back to checking insn. + + 2001-04-25 Jakub Jelinek + + * emit-rtl.c (subreg_hard_regno): Only do HARD_REGNO_MODE_OK check + if check_mode is non-zero. + + 2001-04-25 Jakub Jelinek + + * config/i386/i386.c (ix86_expand_int_movcc): If overlap between + out and comparison sequence has been detected, put result into + proper temporary pseudo. + + 2001-04-24 Zack Weinberg + + * Makefile.in (LIB2FUNCS): Remove _varargs and __dummy. + * libgcc-std.ver: Remove __builtin_saveregs, __dummy, and __empty. + * libgcc2.c: Remove __dummy and __builtin_saveregs. + * libgcc2.h: Don't prototype __builtin_saveregs or __dummy. + * config/i860/varargs.asm: New file - preserve i860 __builtin_saveregs + for future reference. + + 2001-04-24 Jason Merrill + + * except.c (reachable_handlers): Step out one level from a RESX. + + * except.c (struct eh_region): Rename 'last' to 'resume'. + (mark_eh_region, duplicate_eh_region_1): Adjust. + (expand_eh_region_end_cleanup): Remember the jump, not the barrier. + (build_post_landing_pads): Likewise. + (expand_end_catch, expand_eh_region_end_allowed): Don't set it. + (expand_eh_region_end_must_not_throw): Likewise. + (connect_post_landing_pads): Thread (only) regions with non-deleted + resume insns. + + * except.c (expand_eh_region_end_cleanup): Save the EH return data + registers around the cleanup. + (get_exception_filter): New fn. + (finish_eh_generation): Use it. + + 2001-04-24 Nathan Sidwell + + * c-semantics.c (add_scope_stmt): Don't call + current_scope_stmt_stack multiple times. + + 2001-04-24 Zack Weinberg + Nathan Sidwell + + Lazy __FUNCTION__ generation. + * c-common.h (RID_FUNCTION_NAME, RID_PRETTY_FUNCTION_NAME, + RID_C99_FUNCTION_NAME): New _RIDs. + (CTI_FUNCTION_ID, CTI_PRETTY_FUNCTION_ID, CTI_FUNC_ID): Remove. + (CTI_FUNCTION_NAME_DECL, CTI_PRETTY_FUNCTION_NAME_DECL, + CTI_C99_FUNCTION_NAME_DECL, CTI_SAVED_FUNCTION_NAME_DECLS): New + global tree slots. + (function_id_node, pretty_function_id_node, func_id_node): Remove. + (c99_function_name_decl_node, function_name_decl_node, + pretty_function_name_decl_node, saved_function_name_decls): + Declare. + (struct language_function): Remove x_function_name_declared_p. + (make_fname_decl): Remove a parameter. + (declare_function_names): Remove prototype. + (start_fname_decls, finish_fname_decls): Prototype. + (fname_as_string): Likewise. + (fname_string, fname_decl): Likewise. + * c-common.c (make_fname_decl): Adjust. + (struct fname_var_t): New struct. + (fname_vars): New static array. + (declare_function_name): Remove. + (start_fname_decls, finish_fname_decls): New functions. + (fname_as_string): New function from remnants of + declare_function_name. + (fname_string, fname_decl): New functions. + + * c-decl.c (c_function_name_declared_p): Remove. + (init_decl_processing): Don't generate __FUNCTION__ et al ids, + don't call declare_function_name. Call start_fname_decls. + (c_make_fname_decl): Adjust parameters. Generate the name. Don't + clobber the line number. Call finish_decl. + (start_function): Call start_fname_decls. + (finish_function): Call finish_fname_decls. + Remove c_function_name_declared_p. + (push_c_function_context): Don't push c_function_name_declared_p. + (pop_c_function_context): Don't pop c_function_name_declared_p. + (c_begin_compound_stmt): Don't check c_function_name_declared_p. + * c-parse.in (STRING_FUNC_NAME, VAR_FUNC_NAME): New tokens. + (program): Call finish_fname_decls for C. + (primary): Add VAR_FUNC_NAME. + (reswords): Add slots for __FUNCTION__ et al. + (rid_to_yy): Add mappings for __FUNCTION__ et al. + (yylexname): If it's a STRING_FUNC_NAME generate the function name + now. Don't look for VAR_DECLs containing __FUNCTION__ et al. + * c-semantics.c (prune_unused_decls): Remove. + (finish_stmt_tree): Don't call prune_unused_decls. + (genrtl_decl_stmt): Don't prune unused decls here. + + 2001-04-24 Nick Clifton + + * dwarf2out.c (mem_loc_descriptor): If a SYMBOL_REF is in the + constant pool, use the pool's SYMBOL_REF instead. + + * config/v850/v850.h (STRICT_ALIGNMENT): Always set, even for the + v850e. + + 2001-04-23 Joseph S. Myers + + * c-convert.c (convert): When converting to a BOOLEAN_TYPE, avoid + passing nested NOP_EXPRs to fold. + + Mon Apr 23 14:32:12 CEST 2001 Jan Hubicka + + * reg-stack.c (emit_swap_insn): Do not get pass CALL_INSNs. + + 2001-04-22 Mark Mitchell + + * loop.c (loop_delete_insns): Add prototype. + + 2001-04-23 Phil Edwards + + * configure.in: Remove ENABLE_STD_NAMESPACE. + * config.in: Regenerated. + * configure: Regenerated. + + 2001-04-22 Stan Shebs + + * config.gcc (powerpc-*-darwin*): Move the flag in xm-darwin.h + into xm_defines. + * config/rs6000/xm-darwin.h: Remove file. + + 2001-04-22 Kaveh R. Ghazi + + * collect2.c (main): Use concat in lieu of xmalloc/sprintf. + (write_c_file_stat): Likewise. + + * dbxout.c (dbxout_init): Likewise. + + * profile.c (output_func_start_profiler): Likewise. + + 2001-04-22 Philipp Thomas + + * ABOUT-GCC-NLS: Now that gettext 0.10.37 is out, + require it instead of the CVS version. + * cpperror.c (v_message): Put a blank before the macro + body to not confuse exgettext. + + 2001-04-21 Mark Mitchell + + * flow.c (proagate_one_insn): Remove useless assignment. + * jump.c (delete_insn): Tidy. + * loop.c (try_copy_prop): When deleting an instruction with a + REG_RETVAL note, delete the entire libcall sequence. + (loop_delete_insns): New function. + * unroll.c (initial_reg_note_copy): Copy INSN_LIST notes, even if + we're not substituting into them yet. + + 2001-04-21 Kazu Hirata + + * config/h8300/h8300.c (general_operand_src): Fix a comment typo. + + * config/sparc/sparc.c (sparc_flat_eligible_for_epilogue_delay): + Fix a comment typo. + * config/i960/i960.c (signed_arith_operand): Likewise. + + * calls.c (expand_call): Fix a comment typo. + + 2001-04-20 Zack Weinberg + + * configure.in: Probe for times, clock, struct tms, and clock_t. + * configure, config.in: Regenerate. + * timevar.c: Replace ifdef forest in get_time with (relatively) + straightforward series of checks based on autoconf's probes. + + Fri Apr 20 12:24:50 2001 Jeffrey A Law (law@cygnus.com) + + * config/pa/som.h (NM_FLAGS): Define. + + 2001-04-20 Bernd Schmidt + + * ia64.h (MD_SCHED_REORDER, MD_SCHED_REORDER2): Pass CLOCK to called + function. + * ia64-protos.h (ia64_sched_reorder): Additional arg for clock. + * ia64.c (nop_cycles_until): New function. + (prev_cycle, prev_first, last_issued): New static variables. + (ia64_sched_reorder): Additional arg for clock. + On final scheduling pass, emit extra NOPs as needed. + Set prev_first and prev_cycle. + (ia64_sched_reorder2): Pass clock arg down to ia64_sched_reorder. + (ia64_variable_issue): Set last_issued. + + 2001-04-20 Alexandre Oliva + + * config/i386/i386.c (ix86_expand_int_movcc, + ix86_expand_strlensi_unroll_1): Sign-extend CONST_INTs. + + 2001-04-20 Geoff Keating + + * config/rs6000/rs6000.md (ctrsi_internal1, ctrsi_internal2, + ctrsi_internal3, ctrsi_internal4, ctrsi_internal5, + ctrsi_internal6, ctrdi_internal1, ctrdi_internal2, + ctrdi_internal3, ctrdi_internal4, ctrdi_internal5, + ctrdi_internal6): In the short-branch case, this insn is only 4 + bytes long. Reported by Reza Yazdani . + + 2001-04-20 Jakub Jelinek + + * reg-stack.c (check_asm_stack_operands): Issue error if "=t" resp. + "=u" is used together with "st" resp. "st(1)" clobber. + + 2001-04-20 Jakub Jelinek + + * gcse.c (gcse_main): Fix comment typo. + (delete_null_pointer_check): Likewise. + (hash_scan_set): Don't consider sets with REG_EQUIV MEM notes. + * cse.c (cse_insn): Likewise. + * function.c (fixup_var_refs_insns_with_hash): The sequence is + toplevel. + + 2001-04-19 Zack Weinberg + + * toplev.c: Excise all code for the undocumented -dm option. + (float_signal): Call signal just once, unconditionally. + + 2001-04-19 Geoff Keating + + * fold-const.c (fold): Use first_rtl_op rather than + TREE_CODE_LENGTH when looping over parameters of a tree. + Correct strange grouping in test for evaluated SAVE_EXPR. + + Thu Apr 19 19:15:26 2001 Jeffrey A Law (law@cygnus.com) + + * config/pa/pa-linux.h (CPLUSPLUS_CPP_SPEC): Undefine. + * config/pa/pa.h (CPLUSPLuS_CPP_SPEC): Define. + + * config/pa/som.h (ASM_OUTPUT_FUNCTION_PREFIX): Truncate subspace + name at 32 total characters. + (ASM_OUTPUT_SECTION_NAME): Similarly. Also, only support placing + functions in named sections -- data items can still go into unique + sections, but they have normal names (ie $LIT$ and $DATA$). + + * config/pa/som.h (SUPPORTS_INIT_PRIORITY): SOM does not support + INIT_PRIORITY. + + 2001-04-19 DJ Delorie + + * config/alpha/vms.h: Change OBJECT_SUFFIX and EXECUTABLE_SUFFIX + to TARGET_OBJECT_SUFFIX and TARGET_EXECUTABLE_SUFFIX. + * config/i386/cygwin.h: Likewise. + * config/i386/mingw32.h: Likewise. + * config/vax/vms.h: Likewise. + * config/i386/djgpp.h: Remove NO_AUTO_EXE_SUFFIX. + + * config/alpha/xm-vms.h: Change OBJECT_SUFFIX and EXECUTABLE_SUFFIX + to HOST_OBJECT_SUFFIX and HOST_EXECUTABLE_SUFFIX. + * config/i386/xm-cygwin.h: Likewise. + * config/i386/xm-djgpp.h: Likewise. + * config/i386/xm-mingw32.h: Likewise. + * config/vax/xm-vms.h: Likewise. + + * mkdeps.c (deps_add_default_target): Use TARGET_OBJECT_SUFFIX + instead of OBJECT_SUFFIX. + * collect2.c (find_a_file): Look for files matching the extension + HOST_EXECUTABLE_SUFFIX instead of EXECUTABLE_SUFFIX. + * gcc.c (DEFAULT_SWITCH_CURTAILS_COMPILATION): Depend on + TARGET_EXECUTABLE_SUFFIX. + (find_a_file): Use HOST_EXECUTABLE_SUFFIX. + (make_relative_prefix): Likewise. + (convert_filename): Use TARGET_ suffixes throughout. Remove + NO_AUTO_EXE_SUFFIX. + (process_command): Likewise. + (do_spec_1): Likewise. + * java/lang.c (init_parse): Likewise. + + * gcc.texi : Document four new options matching the pattern + (HOST|TARGET)_(OBJECT|EXECUTABLE)_SUFFIX. Remove documentation + for deleted macros OBJECT_SUFFIX and EXECUTABLE_SUFFIX. Remove + documentation for NO_AUTO_EXE_SUFFIX. + + 2001-04-19 Mark Mitchell + + * toplev.h (struct lang_hooks): Allow decode_option to indicate + that language-independent processing should not be done. + * toplev.c (main): Adjust accordingly. + + * rtl.texi (jump_insn): Expand on JUMP_LABEL documentation. + * loop.c (load_mems): Handle a NULL JUMP_LABEL for a JUMP_INSN. + + * mips.md (reload_outputdi): Require that operand0 be a + general_operand. + + 2001-04-19 Jakub Jelinek + + * invoke.texi (-Wshadow): Clarify. + + 2001-04-18 Mark Mitchell + + * loop.c (load_mems): Examine all the instructions in the loop + before concluding that all jumps branch to the first instruction + after the loop. + + Wed Apr 18 20:32:03 2001 Christopher Faylor + + * config/i386/xm-cygwin.h (CPP_SPEC): Fix typo. + + 2001-04-18 Jakub Jelinek + + * cpp.texi (-Wwhite-space): Remove. + (-Wall): -Wall does not imply -Wwhite-space. + + 2001-04-17 Zack Weinberg + + * dbxout.c (dbxout_init): If DBX_OUTPUT_GCC_MARKER is defined, + use it instead of blindly generating a .stabs. + * xcoffout.h: Define DBX_OUTPUT_GCC_MARKER so we put the type + in the right place. + * xcoffout.c: Don't bother defining default for N_CATCH. + (UNKNOWN_STAB): Use internal_error. + (stab_to_sclass): Remove now-unnecessary aborts. + Remove #if 0'ed case N_BROWS. Add #ifdef N_OPT block. + + Tue Apr 17 21:41:11 2001 Jeffrey A Law (law@cygnus.com) + + * jump.c (mark_all_labels): Canonicalize the tail recursion + label attached to CALL_PLACEHOLDER insns. + + 2001-04-17 Kaveh R. Ghazi + + * output.h (dump_flow_info, free_basic_block_vars, + which_alternative): Delete redundant prototypes. + + * rtl.h (bss_section): Likewise. + + 2001-04-17 Loren J. Rittle + + * dbxout.c (N_OPT): Define if not available from + + 2001-04-17 John David Anglin + + * vax.h (PROMOTE_PROTOTYPES): Define for compatibility with system + libraries and native K&R compilers. + + 2001-04-16 Kaveh R. Ghazi + + * c-typeck.c (convert_arguments): Don't check for width changes + with -Wtraditional. + + * invoke.texi (-Wtraditional): Update documentation. + + 2001-04-16 Zack Weinberg + + * toplev.c (output_lang_identify): Delete. + (compile_file): Don't call ASM_IDENTIFY_GCC or ASM_IDENTIFY_LANGUAGE. + Don't generate gcc2_compiled. label. Don't emit a nop if profiling. + If IDENT_ASM_OP is defined, emit an .ident "GCC (GNU) " + after calling ASM_FILE_END. + + * dbxout.c (dbxout_init): Don't call ASM_IDENTIFY_GCC_AFTER_SOURCE. + Instead, unconditionally emit an N_OPT stab with string equal + to STABS_GCC_MARKER, which defaults to "gcc2_compiled." + + * defaults.h: Don't provide default for ASM_IDENTIFY_LANGUAGE. + + * config/dbxelf.h, config/freebsd.h, config/nextstep.h, + config/psos.h, config/ptx4.h, config/1750a/1750a.h, + config/alpha/alpha.h, config/alpha/elf.h, config/arc/arc.h, + config/arm/aof.h, config/arm/coff.h, config/arm/elf.h, + config/arm/linux-elf.h, config/avr/avr.h, config/d30v/d30v.h, + config/dsp16xx/dsp16xx.h, config/h8300/h8300.h, + config/i370/i370.h, config/i386/beos-elf.h, + config/i386/osf1elf.h, config/i386/osfrose.h, + config/ia64/sysv4.h, config/m68k/3b1.h, config/m68k/auxgas.h, + config/m68k/crds.h, config/m68k/hp320.h, config/m68k/m68kv4.h, + config/m68k/mot3300.h, config/m68k/news.h, config/m68k/sgs.h, + config/m68k/tower-as.h, config/mcore/mcore-elf.h, + config/mips/iris6.h, config/mips/osfrose.h, + config/mips/sni-svr4.h, config/pa/som.h, config/pdp11/pdp11.h, + config/sparc/sp64-elf.h: + Delete definitions of any or all of: ASM_IDENTIFY_GCC, + ASM_IDENTIFY_GCC_AFTER_SOURCE, and ASM_IDENTIFY_LANGUAGE. + + * config/elfos.h, config/freebsd.h, config/linux.h, + config/alpha/elf.h, config/arm/linux-elf.h, config/i386/i386elf.h, + config/i386/ptx4-i.h, config/mips/gnu.h, config/mips/linux.h, + config/sparc/linux.h, config/sparc/linux64.h: Delete definitions + of ASM_FILE_START which merely emit a .version directive. Delete + definitions of ASM_FILE_END which merely emit an .ident directive. + + * config/avr/avr.h, config/vax/vax.h: Delete definition of + ASM_IDENTIFY_GCC and move part of its logic into + ASM_FILE_START. + + * config/i386/att.h, config/i386/gas.h, config/i386/linux.h, + config/sparc/linux-aout.h: Don't emit .version directive in + ASM_FILE_START. + + * config/i386/dgux.c, config/m88k/m88k.c, config/sh/sh.c + (output_file_start): Correct comment. + + * config/i386/osfrose.h: Don't emit trailing .ident directive. + * config/m68k/mot3300.h: Override STABS_GCC_MARKER to "gcc2_compiled%" + to match gdb. + * config/pa/lib2funcs.asm: Delete gcc_compiled. label. + * config/rs6000/aix.h: Correct comment. + + * config/i386/i386afe.h: Delete. + * config.gcc: Remove references to i386afe.h. + + * tm.texi: Delete documentation of ASM_IDENTIFY_GCC. The + other macros deleted by this patch were undocumented. + + Mon Apr 16 08:03:48 2001 Jeffrey A Law (law@cygnus.com) + + * pa.md (reload_outdi): Operand 0 must be a non hard register. + + * pa.c (secondary_reload_class): SAR<->FP copies require a + secondary register. + + * install.texi (mips-mips-bsd): Update list of functions + required to include memmove. + * tm.texi (TARGET_MEM_FUNCTIONS): Update list of implicitly + used functions to include memmove. + + 2001-04-15 Toon Moene + + * i386.md (sqrtdf2): SFmode should be DFmode. + + 2001-04-15 Alexandre Oliva + + * gcse.c (compute_ld_motion_mems): ASM outputs aren't moveable. + (find_moveable_store): Likewise. + + 2001-04-15 Jim Wilson + + * function.c (expand_function_end): Handle PARALLEL real_decl_rtl. + + Sat Apr 14 16:24:19 CEST 2001 Jan Hubicka + + * i386.md (ashldi3_1_rex64): Add 'J' to the constraints + (ashrdi3_1_rex64): Change 'n' constraint to 'J'. + + 2001-04-14 Alexandre Oliva + + * config/mn10300/mn10300.md (cmpsi): Tell reload to disregard the + first alternative. + + 2001-04-14 Alan Modra + + * pa.c (force_mode): New function. + (emit_move_sequence): Use it instead of generating new rtx_REGs. + + 2001-04-13 Jim Wilson + + * config/ia64/ia64.c (ia64_expand_epilogue): Emit alloc if sibcall_p. + (first_instruction): New static variable. + (rtx_needs_barrier): Return 1 for alloc. + (init_insn_group_barriers): Set first_instruction. + (rws_sum): Delete duplicate definition. + (group_barrier_needed_p): Return 0 when first_instruction true. + (safe_group_barrier_needed_p): Save and restore first_instruction + around group_barrier_needed_p call. + + Fri Apr 13 21:40:28 2001 Loren J. Rittle + + * expr.h (enum libfunc_index): Add LTI_memmove. + (memmove_libfunc): Define macro. + * optabs.c (init_optabs): Initialize memmove_libfunc. + * expr.c (expand_assignment): Use memmove_libfunc instead of + memcpy_libfunc. + + 2001-04-13 Alan Modra + + * pa.h (GO_IF_LEGITIMATE_ADDRESS): Disallow PIC LO_SUM + fp mode addresses. + + 2001-04-13 Kaveh R. Ghazi + + * Makefile.in (reg-stack.o): Depend on reload.h. + (insn-attrtab.o): Depend on flags.h. + + * genattrtab (main): Include flags.h in insn-attrtab.c. + + * reg-stack.c: Include reload.h. + + * sparc.h (flag_pic): Delete redundant declaration. + + * output.h (flag_pic): Likewise. + + * tree.h (pedantic): Likewise. + + 2001-04-13 Kaveh R. Ghazi + + * Makefile.in (toplev.o, jump.o, regmove.o): Depend on reload.h + + * jump.c, regmove.c, toplev.c: Include reload.h. + + * reload.h (reload_cse_regs): Declare. + + * rtl.h (find_equiv_reg, operands_match_p, safe_from_earlyclobber, + reload_cse_regs, init_reload, mark_home_live, reload, + init_caller_save): Delete redundant prototypes. + + 2001-04-13 Kaveh R. Ghazi + + * Makefile.in (ssa.o, regclass.o): Depend on $(EXPR_H). + + * regclass.c, ssa.c: Include expr.h. + + * rtl.h (memory_address, force_reg, emit_queue, emit_move_insn, + gen_move_insn): Delete redundant declarations. + + 2001-04-13 Franz Sirl + + * Makefile.in (CFLAGS, BOOT_CFLAGS): Partly revert 2000-10-27 patch. + (stage1_build): Instead pass down STAGE1_CFLAGS here. Pass down + MAKEINFO and MAKEINFOFLAGS too. + (stage4_build): Correctly order -B flags. + + 2001-04-13 Alan Modra + + * pa.c (hppa_init_pic_save): Set rtx_unchanging for + PIC_OFFSET_TABLE_SAVE_RTX. + (zdepi_cint_p): Describe zdepi insn. + Formatting and white space fixes throughout file. + + * pa.c (uint32_operand): Don't use long constant >= 2^32. + (emit_move_sequence): Use HOST_WIDE_INT constants. Don't worry + about 32->64 bit sign extension if 32 bit HOST_WIDE_INTs. + (compute_movstrsi_length): Make `align' unsigned to avoid warning. + (output_64bit_and): Use plain `int's for shift counts. + (output_64bit_ior): Likewise. + (function_arg_partial_nregs): Use unsigned vars to avoid warnings. + * pa.h (CONST_OK_FOR_LETTER_P): Use HOST_WIDE_INT constants for case + `N', and simplify. + + * pa-hpux10.h (NEW_HP_ASSEMBLER): Define to 1. + * pa-hpux11.h (NEW_HP_ASSEMBLER): Likewise. + * pa.h (LEGITIMATE_CONSTANT_P) Collapse two defines depending on + NEW_HP_ASSEMBLER into one. Kill warnings. + + * pa-gas.h: Delete file. + * config.gcc: Match `parisc' as well as `hppa' for cpu_type=pa. + Add new targets hppa*64*-*-linux* and parisc*64*-*-linux*. Update + hppa*-*-linux*. For all pa targets, remove pa/gas.h from tm_file, + instead setting MASK_GAS | MASK_JUMP_IN_DELAY in target_cpu_default2. + + * config/pa/mill32.S: New file. + * config/pa/mill64.S: New file. + * config/pa/t-linux (LIBGCC1, CROSS_LIBGCC1, LIB1ASMFUNCS, + LIB1ASMSRC, CRTSTUFF_T_CFLAGS_S, TARGET_LIBGCC2_CFLAGS): Define. + * config/pa/t-linux64: New file. + * config/pa/t-pa64 (CROSS_LIBGCC1): Change to libgcc1-asm.a + (LIB1ASMFUNCS, LIB1ASMSRC): Define. + (TARGET_LIBGCC2_CFLAGS): Add -Dpa64=1 -DELF=1. + + * elfos.h (SELECT_SECTION): Undef before defining. + * pa-linux.h (LINUX_DEFAULT_ELF, PTRDIFF_TYPE, CPP_SPEC): Remove. + (LIB_SPEC): Remove -lmilli. + (DBX_REGISTER_NUMBER): Remove. + (PREFERRED_DEBUGGING_TYPE, DWARF2_ASM_LINE_DEBUG_INFO, + (DWARF2_UNWIND_INFO, ASM_SPEC, LINK_SPEC, FUNCTION_OK_FOR_SIBCALL, + NO_PROFILE_COUNTERS, SELECT_RTX_SECTION, INCOMING_RETURN_ADDR_RTX, + DWARF_FRAME_RETURN_COLUMN, STRING_ASM_OP, TEXT_SECTION_ASM_OP, + DATA_SECTION_ASM_OP, BSS_SECTION_ASM_OP, ASM_FILE_START, + ASM_OUTPUT_DEF, ASM_OUTPUT_ADDR_VEC_ELT, ASM_OUTPUT_ADDR_DIFF_ELT, + ASM_OUTPUT_LABEL, ASM_GLOBALIZE_LABEL, ASM_DECLARE_FUNCTION_NAME, + TARGET_GAS): Define. + * pa.c (output_arg_descriptor): Disable for TARGET_ELF32. + (function_arg): If TARGET_ELF32, pass fp args in both general and fp + regs if we don't have a prototype. + * pa.md (canonicalize_funcptr_for_compare): Not for TARGET_ELF32. + * pa.h (TARGET_ELF32): Default to 0 if undefined. + (EH_RETURN_DATA_REGNO, EH_RETURN_STACKADJ_RTX, + EH_RETURN_HANDLER_RTX): Define. + * pa32-regs.h (DBX_REGISTER_NUMBER): Remove unnecessary test. + (DWARF_FRAME_REGNUM): Define. + * pa64-regs.h (DWARF_FRAME_REGNUM): Define. + * pa32-linux.h: New file. + * pa64-linux.h: New file. + + * pa-64.h (WCHAR_TYPE, WCHAR_TYPE_SIZE): Define. + (ASM_OUTPUT_DOUBLE_INT): Format, protect macro with do..while. + (LINK_SPEC, LIB_SPEC, MD_EXEC_PREFIX, MD_STARTFILE_PREFIX, + NEW_HP_ASSEMBLER, ASM_FILE_START, OBJECT_FORMAT_ELF, + DWARF2_DEBUGGING_INFO, PREFERRED_DEBUGGING_FORMAT, + DWARF2_ASM_LINE_DEBUG_INFO, USE_CONST_SECTION, CONST_SECTION_ASM_OP, + CTORS_SECTION_ASM_OP, DTORS_SECTION_ASM_OP, INIT_SECTION_ASM_OP, + FINI_SECTION_ASM_OP, EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS, + READONLY_DATA_SECTION, CONST_SECTION_FUNCTION, CTORS_SECTION_FUNCTION, + DTORS_SECTION_FUNCTION, ASM_OUTPUT_SECTION_NAME, MAKE_DECL_ONE_ONLY, + UNIQUE_SECTION_P, UNIQUE_SECTION, INT_ASM_OP, ASM_OUTPUT_CONSTRUCTOR, + ASM_OUTPUT_DESTRUCTOR, TYPE_ASM_OP, SIZE_ASM_OP, ASM_WEAKEN_LABEL, + TYPE_OPERAND_FMT, ASM_DECLARE_RESULT): Move to.. + * pa64-hpux.h: New file. + (ASM_FILE_START): Correct typo. + (PREFERRED_DEBUGGING_FORMAT): Rename to PREFERRED_DEBUGGING_TYPE. + * config.gcc: Modify for above. + + Fri Apr 13 00:09:22 EDT 2001 John Wehle (john@feith.com) + + * jump.c (jump_optimize_1): Don't delete dead stores here. + * toplev.c (rest_of_compilation): Call delete_trivially_dead_insns + prior to running jump optimize before cse2. + + 2001-04-12 Richard Henderson + + * Makefile.in (regmove.o): Depend on except.h. + * regmove.c: Include it. + + 2001-04-12 Stan Shebs + + * objc/objc-act.c: Remove all code ifdefed with the never-used + macro OBJC_INT_SELECTORS. + * config/d30v/d30v.h: Remove commented-out ref to OBJC_INT_SELECTORS. + * tm.texi: Remove doc for OBJC_INT_SELECTORS. + + Thu Apr 12 18:13:37 2001 Rodney Brown + + * config/pa/quadlib.c: Add prototypes. + + 2001-04-12 Kaveh R. Ghazi + + * bitmap.h (debug_bitmap): Delete redundant prototype. + + * rtl.h (get_frame_size): Likewise. + + 2001-04-12 Jim Wilson + + * config/ia64/ia64.md (extendsfdf2, extendsftf2, extenddftf2): Simplify + to just emit an fnorm. + + 2001-04-12 Kaveh R. Ghazi + + * c-common.h (truthvalue_conversion, type_for_mode, + type_for_size): Delete redundant declarations. + + * c-lex.h (is_class_name): Likewise. + + * c-tree.h (pedantic, convert, getdecls, gettags, + global_bindings_p, init_decl_processing, insert_block, + maybe_build_cleanup, poplevel, print_lang_decl, + print_lang_identifier, print_lang_type, pushdecl, pushlevel, + set_block, incomplete_type_error, build_function_call, + lvalue_or_else, mark_addressable): Likewise. + + * expr.h (expand_tree_builtin): Likewise. + + 2001-04-12 Mark Mitchell + + * invoke.texi: Document --param max-gcse-memory. + + 2001-04-12 Kaveh R. Ghazi + + * configure.in (errno): Check for declaration. + * configure, config.in: Regenerated. + + * system.h (errno): Only declare if not already done. + + 2001-04-12 Alexandre Oliva + + * recog.c (general_operand, immediate_operand, + nonmemory_operand): Require CONST_INTs to be sign-extended + values for their modes. + + 2001-04-12 Alexandre Oliva + + * expmed.c (store_bit_field): Truncate CONST_INTs. + (expand_mult_highpart, expand_divmod): Likewise. + * expr.c (convert_modes, store_field): Likewise. + * integrate.c (expand_inline_function): Use promote_mode() to + determine whether to convert_modes() an argument as signed + or unsigned. + * optabs.c (expand_binop): Get CONST_INT operands + sign-extended for their appropriate modes. + * stmt.c (emit_case_nodes): Convert node values to the + appropriate mode. + (expand_end_case): Convert minval and range to the appropriate + mode. + * unroll.c (loop_iterations): Truncate abs_diff to the mode of + the iteration variable. + * varasm.c (immed_double_const): Don't require words to be + narrower than host wide ints to properly sign-extend + CONST_INTs. + + 2001-04-12 kaz Kojima + + * sh.md (builtin_setjmp_receiver): New expander. + + 2001-04-12 David Edelsohn + + * config/rs6000/rs6000.c (rs6000_emit_move): Do not + special-case HOST_BITS_PER_WIDE_INT != 32. Use same criteria + for generating CONST_INT and CONST_DOUBLE. + + 2001-04-12 Alexandre Oliva + + * config/rs6000/rs6000.c (logical_operand): CONST_INTs are + already sign-extended. + (rs6000_emit_prologue): Make register iterator signed. + (rs6000_emit_epilogue): Likewise. + * config/rs6000/rs6000.md (addsi3, adddi3): Sign-extend high + and low. + (movsf split, movdf split): Sign-extend CONST_INTs. + (movdi splits): Likewise. + + 2001-04-12 Kelley Cook + + * config-lang.in (lang_dirs): Add in zlib. + + 2001-04-11 Alexandre Oliva + + * config/i386/i386.md: Apply trunc_int_for_mode() to GEN_INT + operands that make it to RTL. + + 2001-04-11 Stan Shebs + + Add Darwin (Mac OS X kernel) native support. + * config.gcc (powerpc-*-darwin*): Add native bits. + * config/darwin.c: New file, generic Darwin support functions. + * config/darwin.h: New file, generic Darwin definitions. + * config/darwin-protos.h: New file, generic Darwin prototypes. + * rs6000/darwin.h: New file, Darwin for PowerPC. + * rs6000/t-darwin: New file, Darwin makefile fragment. + * rs6000/rs6000.h (OBJECT_MACHO): New macro. + (TARGET_MACHO): Ditto. + (rs6000_abi): Add ABI_DARWIN. + (RS6000_REG_SAVE): Add ABI_DARWIN case. + (RS6000_SAVE_AREA): Ditto. + (FP_ARG_MAX_REG): Ditto. + (RETURN_ADDRESS_OFFSET): Ditto. + * rs6000/rs6000.c (rs6000_legitimize_address): Add TARGET_MACHO + cases. + (rs6000_emit_move): Add ABI_DARWIN cases. + (print_operand): Ditto. + (first_reg_to_save): Ditto. + (rs6000_stack_info): Ditto, also align stack by 16 instead of 8. + (debug_stack_info): Ditto. + (rs6000_emit_prologue): Ditto. + (rs6000_emit_epilogue): Ditto. + (output_profiler_hook): Ditto. + (output_function_profiler): Ditto. + (rs6000_add_gc_roots): Call machopic_add_gc_roots if TARGET_MACHO. + (output_mi_thunk): Add TARGET_MACHO case. + (add_compiler_stub): Ditto. + (output_compiler_stub): Ditto. + (no_previous_def): Ditto. + (output_call): Ditto. + (machopic_output_stub): Ditto. + (rs6000_machopic_legitimize_pic_address): Ditto. + (toc_section): Ditto. + * rs6000/rs6000.md (addsi3_high): New TARGET_MACHO pattern. + (macho_high): Ditto. + (macho_low): Ditto. + (movsi_low): Ditto. + (load_macho_picbase): Ditto. + (call): Add TARGET_MACHO case to modify function. + (call_value): Ditto. + (call_nonlocal_sysv): Add ABI_DARWIN case. + (call_value_nonlocal_sysv): Ditto. + * rs6000/rs6000-protos.h (rs6000_machopic_legitimize_pic_address): + Add prototype. + (machopic_output_stub): Ditto. + * ginclude/stddef.h: Test _BSD_WCHAR_T_DEFINED_. + + 2001-04-11 Mark Mitchell + + * dwarf2out.c (modified_type_die): Don't create new types here. + * tree.h (get_qualified_type): New function. + (build_qualified_type): Adjust comment. + * tree.c (get_qualified_type): New function. + (build_qualified_type): Use it. + + 2001-04-11 Kaveh R. Ghazi + + * cpp.texi (-Wtraditional): Update description. + + * invoke.texi (-Wtraditional): Likewise. + + 2001-04-11 Jim Wilson + + * config/ia64/ia64.h (FUNCTION_ARG_BOUNDARY): Return 128 if argument + requires more than 64 bits of alignment. + + 2001-04-11 Neil Booth + + * cpplib.c (do_line): Sanity check iff enable checking. + + 2001-04-11 Richard Henderson + + * Makefile.in (insn-recog.o): Depend on toplev.h. + (insn-emit.o, doloop.o): Likewise. + * genrecog.c, genemit.c: Include toplev.h in generated file. + * doloop.c: Include toplev.h. + + 2001-04-11 Mark Mitchell + + * Makefile.in (gcse.o): Depend on params.h. + * gcse.c: Include params.h. + (gcse_main): Don't do GCSE if doing so will take inordinate + amounts of memory. + * params.def (PARAM_MAX_GCSE_MEMORY): New parameter. + * params.h (MAX_GCSE_MEMORY): New macro. + + 2001-04-11 Kaveh R. Ghazi + + * Makefile.in (insn-output.o): Depend on $(EXPR_H). + + * genoutput.c (output_prologue): Include expr.h in insn-output.c. + + 2001-04-11 Kaveh R. Ghazi + + * output.h (assemble_real): Declare if REAL_VALUE_TYPE is defined. + + * real.h (ereal_atof, real_value_truncate, target_isnan, + target_isinf, target_negative, assemble_real, debug_real): Delete + redundant prototypes. + + * Makefile.in (ifcvt.o): Depend on toplev.h. + + * c-semantics.c: Include expr.h. + + * ifcvt.c: Include toplev.h. + + * expr.h (rtx_equal_p): Delete prototype. + + * rtl.h (exact_log2_wide, floor_log2_wide, permalloc, + protect_from_queue, gen_jump, gen_beq, gen_bge, gen_ble, + eliminate_constant_term, expand_complex_abs, find_single_use, + make_tree, init_expr_once, init_optabs, supports_one_only): + Likewise. + + * tree.h (exact_log2_wide, floor_log2_wide, expand_null_return, + rest_of_type_compilation, emit_queue, do_pending_stack_adjust, + expand_assignment, store_expr, emit_line_note_after, + emit_line_note_force, split_specs_attrs, label_rtx): Likewise. + + * toplev.h (exact_log2_wide, floor_log2_wide): Add prototype. + + * sparc-protos.h: Delete redundant prototypes. + + 2001-04-11 Vladimir Makarov + + * reload.c (push_reload): Add condition missed in SUBREG byte + offset patch. + + Wed Apr 4 00:28:23 2001 Rainer Orth + + * sparc/sol2-sld-64.h (STARTFILE_SPEC): Added missing blank. + + Wed Apr 11 14:06:10 CEST 2001 Jan Hubicka + + * i386.md (floatsisf_sse): Fix output template + * i386.c (ix86_expand_fp_movcc) + + * reg-stack.c (emit_pop_insn): Handle complex modes. + (move_for_stack_reg): Emit proper move mode. + (subst_stack_regs_pat): Handle complex modes. + + 2001-04-11 Jakub Jelinek + + * cpplex.c (_cpp_lex_token): Only warn if -Wcomment. + + 2001-04-10 Richard Henderson + + * libgcc2.h (__terminate_func_ptr): Remove typedef. + (__pure_virtual, __terminate, __terminate_set_func, + __default_terminate, __throw_type_match, __empty, + __get_eh_context, __get_eh_info, __get_dynamic_handler_chain, + __eh_rtime_match, __unwinding_cleanup, __rethrow, + __sjthrow, __sjpopnthrow, __eh_alloc, __eh_free): + Remove prototypes of deleted functions. + + 2001-04-10 Kaveh R. Ghazi + + * c-typeck.c (convert_arguments): -Wtraditional now activates + -Wconversion warnings, except for changes in signed-ness. + Detect complex<->int & int<->complex conversions as well. + + * invoke.texi (-Wtraditional): Document it. + + Tue Apr 10 17:45:50 2001 Richard Kenner + + * gcse.c (update_ld_motion_stores): Don't use variable I for an insn. + * flow.c (set_block_for_new_insns): Remove needless cast and + properly check for unset block number. + + 2001-04-10 Andrew MacLeod + + * function.c (purge_single_hard_subreg_set): Only check REGNO if + the subreg was a hard register. Pseudos are left as subregs. + + 2001-04-09 Franz Sirl + + * Makefile.in (LIB2FUNCS_STATIC_EXTRA): New macro. + (LIB2ADD_ST): New macro, pass it to mklibgcc. + * mklibgcc.in (libgcc2_st_objs): New variable, set it from LIB2ADD_ST. + (libgcc_st_objs): New, set from libgcc2_st_objs. Use it for libgcc.a. + * config/rs6000/t-ppccomm (LIB2FUNCS_STATIC_EXTRA): New macro. + + 2001-04-09 Bo Thorsen + + * config/i386/i386.md: "TARGET_64BIT && TARGET_64BIT": Removed one. + + 2001-04-09 Andrew MacLeod + + * output.h (set_block_num): Missed it earlier, remove deprecated + prototype. + + 2001-04-09 Andrew MacLeod + + * gcse.c (oprs_unchanged_p): Pass basic_block to load_killed_in_block_p. + (load_killed_in_block_p): Change bb parameter from int to basic_block. + (oprs_not_set_p): Pass basic_blocks instead of ints as parameters. + (handle_rd_kill_set): Change bb parameter from int to basic_block. + (compute_kill_rd): Pass basic_blocks instead of ints as parameters. + (expr_killed_p): Change bb parameter from int to basic_block, pass + basic_blocks instead of ints as parameters. + (compute_ae_kill): Pass basic_blocks instead of ints as parameters. + (expr_reaches_here_p_work, expr_reaches_here_p): Change bb parameter + from int to basic_block, pass basic_blocks instead of ints as parms. + (pre_expr_reaches_here_p_work, pre_expr_reaches_here_p): Change bb + parameter from int to basic_block, pass basic_blocks instead of ints. + (process_insert_insn): Pass basic_blocks instead of ints as parameters. + (insert_insn_end_bb): Change bb parameter from int to basic_block, + pass basic_blocks instead of ints. + (pre_edge_insert, pre_insert_copy_insn, pre_insert_copies): Pass + basic_blocks instead of ints as parameters. + (pre_delete): Pass basic_blocks instead of ints as parameters. + (hoist_expr_reaches_here_p): Change bb parameter from int to + basic_block, pass basic_blocks instead of ints. + (hoist_code): Pass basic_blocks instead of ints as parameters. + (reg_set_info, store_ops_ok, store_killed_after, store_killed_before): + Change bb parameter from int to basic_block. + (build_store_vectors): Pass basic_blocks instead of ints as parameters. + (insert_insn_start_bb): Change bb parameter from int to basic_block, + pass basic_blocks instead of ints. + (insert_store): Pass basic_blocks instead of ints as parameters. + (replace_store_insn, delete_store): Change bb parameter from int to + basic_block, pass basic_blocks instead of ints. + (store_motion): Pass basic_blocks instead of ints as parameters. + + 2001-04-09 Andrew MacLeod + + * basic-block.h (set_new_block_for_insns): New Prototype. + (set_block_num): Delete prototype. + * flow.c (set_block_num): Remove obsolete function. + (set_block_for_new_insns): Set BB for single or multiple insns. + * gcse.c (handle_avail_expr): Use set_block_for_new_insns. + (process_insn_end_bb): Use set_block_for_new_insns or + set_block_for_insn instead of set_block_num. + (pre_insert_copy_insn): Use set_block_for_new_insns. + (update_ld_motion_stores): Use set_block_for_new_insns. + (insert_insn_start_bb): Use set_block_for_new_insns. + (replace_store_insn): Use set_block_for_new_insns. + + 2001-04-09 Andrew MacLeod + Jeff Law + + * alias.c (get_addr): Externalize. + (canon_true_dependence): New function. Behaves like true_dependance + except it already assumes a MEM has been canonicalized. + * flags.h (flag_gcse_lm, flag_gcse_sm): New optimization flags. + * gcse.c (struct ls_expr): Add load/store expressions structure. + (modify_mem_list, canon_modify_mem_list): New variable. + (gcse_main): Initialize & finalize alias analysis. Use enhanced + load motion and store motion if requested. + (alloc_gcse_mem): Allocate space for modify_mem_list array. + (free_gcse_mem): Free the modify_mem_list array. + (oprs_unchanged_p): Use load_killed_in_block_p. + (gcse_mems_conflict_p, gcse_mem_operand): New variables. + (mems_conflict_for_gcse_p): New function. Don't kill loads + with stores to themselves if its in the load/store expression list. + (load_killed_in_block_p): New function. + (canon_list_insert): New Function. + (record_last_mem_set_info): Keep a list of all instructions which + can modify memory for each basic block. + (compute_hash_table, reset_opr_set_tables): Clear modify_mem_list. + (oprs_not_set_p): Use load_killed_in_block_p. + (mark_call, mark_set, mark_clobber): Use record_last_mem_set_info. + (expr_killed_p): Use load_killed_in_block_p. + (compute_transp): Do not pessimize memory references. + (pre_edge_insert): Update stores for a load motion expression. + (one_pre_gcse_pass): Check loads/stores for extra load motion. + (ldst_entry): Find or create a ldst_expr structure. + (free_ldst_entry): Free memory for an individual item. + (free_ldst_mems): Free entire load/store expression list. + (print_ldst_list): Print debug info. + (find_rtx_in_ldst): Try to find an rtx expression in the ldst list. + (enumerate_ldsts): Assign integer values to each entry in list. + (first_ls_expr): First expression in the list. + (next_ls_expr): Next expression in the list. + (simple_mem): Check if expression qualifies for ld/st expression list. + (invalidate_any_buried_refs): Remove from expression list if its + used in some other way we don't understand. + (compute_ld_motion_mems): Find all potential enhanced load motion + expression. + (trim_ld_motion_mems): Remove any expressions which are invalid. + (update_ld_motion_stores): Copy store values to registers for loads + which have been moved. + (regvec, st_antloc, num_store): New global statics. + (reg_set_info): Marks registers as set. + (store_ops_ok): Verfies registers expressions are valid in a block. + (find_moveable_store): Look for moveable stores in a pattern. + (compute_store_table): Find stores in a function worth moving, maybe. + (load_kills_store): Check dependence of a load and store. + (find_loads): Find any loads in a pattern. + (store_killed_in_insn): Check if a store is killed in an insn. + (store_killed_after): Check is store killed after an insn in a block. + (store_killed_before): Check is store killed before an insn in a block. + (build_store_vectors): Generate the antic and avail vectors. + (insert_insn_start_bb): Insert at the start of a BB, update BLOCK_HEAD. + (insert_store): Add a store to an edge. + (replace_store_insn): Replace a store with a SET insn. + (delete_store): Delete a store insn. + (free_store_memory): Free memory. + (store_motion): Perform store motion. + * invoke.texi: Add documentation for -fcse-lm and -fgcse-sm. + * rtl.h (get_addr, canon_true_dependence): Add prototypes. + * toplev.c (flag_gcse_lm, flag_gcse_sm): New Variables. + (f_options): Add gcse-lm and gcse-sm. + + Mon Apr 9 16:18:03 CEST 2001 Jan Hubicka + + * i386.c (expand_fp_movcc): Fix condition reversal code. + + * i386.c (ix86_register_move_cost): Fix handling of reformating penalty + * i386.h (INTEGER_CLASS_P, MAYBE_INTEGER_CLASS_P): New. + (CLASS_MAX_NREGS): Use it. + + * i386.h (HARD_REGNO_NREGS): Handle properly TF and TCmodes on 64bit; + handle properly complex values. + (CLASS_MAX_NREGS): Likewise; update comment. + + 2001-04-05 Bernd Schmidt + + * ia64.c (ia64_flag_schedule_insns2): New variable. + (ia64_override_options): Initialize it. Clear + flag_schedule_insns_after_reload. + (ia64_reorg): Only do scheduling if ia64_flag_schedule_insns2. + + Mon Apr 9 15:09:13 CEST 2001 Jan Hubicka + + * i386.md (truncdfsf2_*): Add i387->int/sse reg alternatives; + Do not require source to match destination anymore; + Add abort to the nontrivial cases that should be handled by split. + (fix_trunc?fdi): Add SSE case for x86_64. + (floatdi?f): Likewise. + (floatdi?f_sse): New. + (fix_trunc?fdi_sse): New. + + 2001-04-09 Richard Sandiford + + * dwarfout.c (DEBUG_ARANGES_BEGIN_LABEL): New label. + (DEBUG_ARANGES_END_LABEL): Ditto. + (dwarfout_init): Generate length and version fields at the start + of the .debug_aranges info. Insert DEBUG_ARANGES_BEGIN_LABEL + after the length field. + (dwarfout_finish): Insert DEBUG_ARANGED_END_LABEL at the end of + the .debug_aranges info. + + Sun Apr 8 00:43:27 CEST 2001 Jan Hubicka + + * i386.c (call, call_value): Make sure that resulting call_insn + does have proper second operand. + + Sun Apr 8 22:50:49 2001 Christopher Faylor + + * config/i386/xm-cygwin.h (GET_ENV_PATH_LIST): Eliminate obsolete + function. Remove include of sys/cygwin.h. + + Sun Apr 8 22:20:27 2001 Christopher Faylor + + * config/i386/cygwin.h (STARTFILE_SPEC): search */lib/w32api by default. + (CPP_SPEC): Always search */include/w32api for header files. + (ASM_OUTPUT_SECTION_NAME): Avoid testing NULL DECL. + (LINK_SPEC): Add "cyg" to the library search prefixes. + + 2001-04-08 Philip Blundell + + * config/arm/arm.h (ASM_OUTPUT_LABELREF): Use asm_fprintf. + + 2001-04-08 Neil Booth + + * cpperror.c (print_location): Don't special case . + (_cpp_begin_message): Handle WARNING_SYSHDR the same as + WARNING, but we don't check if we're in system headers. + * cpplib.h (enum error_type): WARNING_SYSHDR: New. + * cpplib.c (do_warning): Warn in system headers. + + 2001-04-07 Mumit Khan + + * mbchar.c: Include config.h first. + + 2001-04-07 Zack Weinberg + + * config.gcc: Set default for xmake_file at top, not bottom. + Change places that set xmake_file to "none" to set to the + empty string instead, or remove them entirely if there is no + default xmake_file for this cpu_type. Remove references to + deleted files. + + * config/x-lynx, config/convex/x-convex, config/elxsi/x-elxsi, + config/i386/x-isc, config/i386/x-isc3, config/i386/x-ncr3000, + config/i386/x-next, config/i386/x-sco, config/i386/x-sysv3, + config/i386/x-vsta, config/i860/x-sysv4, config/m68k/x-amix, + config/m68k/x-apollo68, config/m68k/x-ccur, config/m68k/x-crds, + config/m68k/x-hp2bsd, config/m68k/x-mot3300, config/m68k/x-mot3300-gas, + config/m68k/x-tower, config/m88k/x-sysv4, config/mips/x-dec-osf1, + config/mips/x-sni-svr4, config/mips/x-ultrix, config/romp/x-mach, + config/romp/x-romp, config/rs6000/x-beos, config/rs6000/x-lynx, + config/rs6000/x-mach, config/rs6000/x-sysv4, config/sparc/x-sysv4: + Delete. + + * config/a29k/x-unix, config/i386/x-aix, config/i386/x-osf1elf, + config/i386/x-osfrose, config/m68k/x-dpx2, config/mips/x-iris3, + config/mips/x-mips, config/mips/x-osfrose, config/mips/x-sony, + config/mips/x-sysv, config/rs6000/x-aix31: + Just set CLIB to -lld or -lmld, as appropriate. + + * config/arm/x-riscix, config/i370/x-oe, config/i386/x-dgux, + config/i386/x-sco4, config/i386/x-sco5, config/m68k/x-hp320, + config/m68k/x-hp320g, config/m68k/x-next, config/m88k/x-dgux, + config/mips/x-iris, config/pa/x-pa: + Just set (some of) FIXPROTO_DEFINES, STMP_FIXPROTO, + OTHER_FIXINCLUDES_DIRS. + + * config/i386/x-djgpp: Don't set LN or LN_S. + * config/m88k/x-dolph: Don't define __m88k__. + * config/m88k/x-tekXD88: Don't set AR_FLAGS. + * config/pa/x-pa-mpeix: Just set up quadlib.asm. + * config/i860/fx2800.h: No need to #undef SVR4. + + 38 x-host fragments remain, 2 x-cpu. + + 2001-04-07 Herman A.J. ten Brugge + + * c4x.h (HARD_REGNO_NREGS): HCmode mode uses 2 regs not 4. + + 2001-04-06 Neil Booth + + * cpplib.c (cpp_push_buffer): Give stdin buffers the name . + + 2001-04-06 Neil Booth + + * configure.in: Add check for lstat. + * configure, config.in: Regenerate. + * cppinit.c (append_include_chain): Make empty path ".". + * cpplib.c (do_line): Don't simplify #line paths. + * cppfiles.c (remove_component_p): New function. + (find_or_create_entry): Acknowledge stat () errors during + path simplification. + (handle_missing_header): Don't simplify paths. + (_cpp_simplify_pathname): Don't simplify VMS paths. Return + the empty path untouched. Don't leave a trailing '/'. + + 2001-04-06 Benjamin Kosnik + + * cppdefault.c (GPLUSPLUS_BACKWARD_INCLUDE_DIR): Add. + * Makefile.in (-DGPLUSPLUS_BACKWARD_INCLUDE_DIR): Add. + + 2001-04-06 Neil Booth + + * cppfiles.c (open_file): Fail directories silently, but + with an errno of NOENT set. + (read_include_file): Move the common exit code to the sole + caller. Return an int indicating success or failure. Let + open_file handle directories. + (stack_include_file): If read_include_file fails, + push a "null" buffer. + + 2001-04-05 DJ Delorie + + * function.h (virtuals_instantiated): Declare. + * function.c: (virtuals_instantiated): Make global. + * calls.c (emit_library_call_value_1): Use + virtual_outgoing_args_rtx only if it hasn't been instantiated. + Otherwise, use the stack pointer directly. + + Thu Apr 5 19:13:33 CEST 2001 Jan Hubicka + + * i386.c (x86_initialize_trampoline): New global function. + * i386.h (TRAMPOLINE_SIZE): Size is 23 for x86_64. + (INITIALIZE_TRAMPOLINE): Move offline. + * i386-protos.h (x86_initialize_trampoline): Declare. + + Thu Apr 5 19:02:15 CEST 2001 Jan Hubicka + + * i386.md (movdi_1_rex64): Allow SSE->SSE reg move. + (lea_0): Rename to lea_1. + (lea_1_zext, lea_1_rex64, lea_2_rex64): New patterns. + (lea_general_?): Allow SImodes on TARGET_64BIT + (lea_general_?_zext): New patterns. + (call_1, call_1_rex64): Fix. + + Thu Apr 5 19:00:15 CEST 2001 Jan Hubicka + + * i386.c (ix86_split_long_move): Use PUT_MODE instead of change_address. + + Thu Apr 5 18:25:56 CEST 2001 Jan Hubicka + + * i386.c (function_arg): Return constm1_rtx for last argument. + (ix86_expand_prologue): Update gen_call calls. + * i386.h (FUNCTION_BLOCK_PROFILER_EXIT): Likewise. + * i386.md (call_pop): Likewise. + (call): Second operand is VOIDmode. + (call_0): Likewise; Support 64bits. + (call_exp): New expander. + (call_1): Get to the sync. + (call_1_exp): New pattern. + (call_value): Support 64bit. + (call_value_exp): New pattern. + (untyped_call): Update gen_call call. + (call_value_pop): Disable for 64bit. + (call_value_0_rex64): New pattern. + (call_value_1_rex64): Likewise. + + 2001-04-05 Bo Thorsen + + * i386.md: Don't allow "builtin_setjmp_receiver" for TARGET_64BIT. + + Thu Apr 5 13:44:17 2001 J"orn Rennecke + + * i386.md (*andsi_1+3): If used after reload, make sure the operand + satisfies ANY_QI_REG_P. + + 2001-04-05 Bernd Schmidt + + * config/ia64/ia64.c (rtx_needs_barrier): A PARALLEL can contain + ASM_OPERAND. + + * sched-deps.c (sched_analyze_insn): Revert more of the March 27 + change. + + 2001-04-04 Zack Weinberg + + * config.gcc: Remove default for xm_file. Clean up local + machine type handling. Remove settings of xm_file to + something that doesn't exist. In the big switch, set xm_file, + don't append to it (the value before the big switch is always + null). Don't force build_xm_file or host_xm_file to have a value. + * configure.in: Remove default for xm_file. Do not special + case $cpu/xm-$cpu.h not existing. + * configure: Regenerate. + + 2001-04-04 Diego Novillo + + * simplify-rtx.c (simplify_binary_operation): Check for overflow + when folding integer division and modulo operations. + + 2001-04-04 Andrew MacLeod + + * dwarf2out.c (output_cfi): Add 'for_eh' parameter, use PTR_SIZE + instead of DWARF2_ADDR_SIZE for EH addresses. + (output_call_frame_info): Use PTR_SIZE instead of DWARF2_ADDR_SIZE for + EH addresses. + + 2001-04-04 Richard Henderson + + * config/ia64/ia64.h (IA64_UNWIND_INFO): Disable. + * config/ia64/t-glibc (LIB2ADDEH): Disable. + * config/ia64/t-ia64 (LIB2ADDEH): Disable. + + 2001-04-04 Richard Henderson + + * configure.in (gcc_cv_as_leb128): Escape "." in regexp. + * configure: Rebuilt. + + 2001-04-04 Jakub Jelinek + + * gcse.c (delete_null_pointer_checks_1): Add delete_list argument, + push insns to delete to it instead of deleting them. + (delete_null_pointer_checks): Delete insns from delete_list after + all delete_null_pointer_checks_1 passes are done. + + 2001-04-04 Richard Henderson + + * configure.in (gcc_cv_as_leb128): Tweek minor number extraction. + * configure: Rebuilt. + + 2001-04-04 Zack Weinberg + + * expr.h: Remove #ifdef FUNCTION_CONVERSION_BUG logic. + * config/romp/xm-romp.h: Delete. + + 2001-04-04 Bernd Schmidt + + * sched-deps.c (sched_analyze_insn): Partially revert March 27 + change. + + 2001-04-04 Herman A.J. ten Brugge + + * emit-rtl.c (mark_label_nuses) Increment the label uses for + all labels present in rtx. + (try_split) Call new function for all split insns. + + 2001-04-04 Jakub Jelinek + + * recog.c (validate_replace_rtx_1): Instead of aborting just make + sure the change won't be validated. + + Wed Apr 4 00:45:38 EDT 2001 John Wehle (john@feith.com) + + * rtl.h (set_noop_p): Declare. + * flow.c (set_noop_p): Move from here ... + * rtlanal.c (set_noop_p): ... to here and enhance. + * cse.c (delete_trivially_dead_insns): Use it. + * gcse.c (hash_scan_set): Likewise. + * jump.c (delete_noop_moves): Likewise. + * recog.c (split_all_insns): Likewise. + + 2001-04-04 Alan Modra + + * dwarf2out.c (dwarf2out_frame_debug_expr): Support adjusting + stack pointer via a LO_SUM. Ditto for setting a temp register + used to save to the stack. Set cfa_temp when setting fp, and + allow matches to cfa_temp in addition to cfa_store when saving + regs. Handle POST_INC and LO_SUM register stores. Document the + changes and errors in rule 12 doco. + + * pa.c (set_reg_plus_d, store_reg, load_reg): Return last insn. + (actual_fsize, local_fsize, save_fregs): Move for store_reg to see. + (load_reg): Move closer to epilogue code. + (DO_FRAME_NOTES): Define to control the following.. + (FRP): Define to set RTX_FRAME_RELATED_P on insns. + (hppa_expand_prologue): Use FRP and REG_FRAME_RELATED_EXPR + notes as necessary. + (hppa_expand_epilogue): Likewise. + + 2001-04-03 Richard Henderson + + * configure.in (gcc_cv_as_leb128): Reject gas before 2.11. + * configure: Rebuild. + + 2001-04-03 Richard Henderson + + * rtl.h (LCT_THROW): New. + * calls.c (emit_library_call_value_1): Handle it. + * except.c (connect_post_landing_pads): Use it. + + 2001-04-03 Zack Weinberg + + * gansidecl.h: Delete file. + * configure.in: Change all refs to gansidecl.h to use + ansidecl.h. Adjust *_file_list so they know where ansidecl.h + lives. + * configure: Regenerate. + + * Makefile.in (intl.o): Don't depend on gansidecl.h. + * defaults.h: s/gansidecl.h/ansidecl.h/ in comment. + * ggc.h, config/fr30/fr30.h, config/mcore/mcore.c: + Don't include gansidecl.h. + * intl.c, main.c, version.c, fixinc/fixlib.h, + fixinc/procopen.c, fixinc/server.c: Include ansidecl.h not + gansidecl.h. + + Tue Apr 3 19:41:21 CEST 2001 Jan Hubicka + + * i386.c (ix86_force_to_memory, ix86_free_from_memory): + Update for 64bit. + + 2001-04-03 Zack Weinberg + + * config/i386/xm-beos.h, config/i386/xm-isc.h, + config/i386/xm-next.h, config/i386/xm-sco.h, + config/i386/xm-sco5.h, config/m68k/xm-plexus.h, + config/m88k/xm-m88k.h: Delete. + + * config/i386/xm-djgpp.h: Don't define __MSDOS__. + * config/romp/xm-romp.h: Don't define bcopy. + * config/rs6000/xm-beos.h: Don't define bcopy, HAVE_VPRINTF, + HAVE_PUTENV, HAVE_RENAME, or USE_C_ALLOCA. + + * config.gcc: Remove references to deleted files. + + 14 xm-host.h remain, 1 xm-cpu.h. + + 2001-04-03 Jakub Jelinek + David S. Miller + Andrew MacLeod + + Use byte offsets in SUBREGs instead of words. + + * alias.c (nonlocal_mentioned_p): Use subreg_regno function. + * caller-save.c (mark_set_regs): Change callers of subreg_hard_regno + to pass new argument. + (add_stored_regs): Use subreg_regno_offset function. + * calls.c (expand_call): For non-paradoxical SUBREG take endianess + into account. + (precompute_arguments): Use gen_lowpart_SUBREG. + * combine.c (try_combine): Replace explicit XEXP with SUBREG_REG. + (combine_simplify_rtx): Rework to use SUBREG_BYTE. + (simplify_set): Rework to use SUBREG_BYTE. + (expand_field_assignment): Use SUBREG_BYTE. + (make_extraction): Use SUBREG_BYTE. + (if_then_else_cond): Use SUBREG_BYTE. + (apply_distributive_law): Use SUBREG_BYTE and fixup subreg comments. + (gen_lowpart_for_combine): Compute full byte offset. + * cse.c (mention_regs): Use SUBREG_BYTE. + (remove_invalid_subreg_refs): Rework to use SUBREG_BYTE. + (canon_hash): Use SUBREG_BYTE. + (fold_rtx): Pass SUBREG_BYTE div UNITS_PER_WORD to operand_subword. + (gen_lowpart_if_possible): Formatting. + * dbxout.c (dbxout_symbol_location): Compute SUBREG hard regnos + correctly. + * dwarf2out.c (is_pseudo_reg): Fixup explicit XEXP into SUBREG_REG + (mem_loc_descriptor): Fixup explicit XEXP into SUBREG_REG + (loc_descriptor): Fixup explicit XEXP into SUBREG_REG + * dwarfout.c (is_pseudo_reg): Fixup explicit XEXP into SUBREG_REG + (output_mem_loc_descriptor): Fixup explicit XEXP into SUBREG_REG + (output_loc_descriptor): Fixup explicit XEXP into SUBREG_REG + * emit-rtl.c (gen_rtx_SUBREG): New function, used to verify + certain invariants about SUBREGs the compiler creates. + (gen_lowpart_SUBREG): New function. + (subreg_hard_regno): New function to get the final register number. + (gen_lowpart_common): Use SUBREG_BYTE. + (gen_imagpart): Spacing nits. + (subreg_realpart_p): Use SUBREG_BYTE. + (gen_highpart): Use SUBREG_BYTE. + (subreg_lowpart_p): Always compute endian corrected goal offset, + even at the byte level, then compare against that. + (constant_subword): New function, pulled out all constant cases + from operand_subword and changed second argument name to offset. + (operand_subword): Detect non REG/SUBREG/CONCAT/MEM cases early + and call constant_subword to do the work. Return const0_rtx if + looking for a word outside of OP. + (operand_subword_force): Change second arg name to offset. + * expmed.c (store_bit_field): Use SUBREG_BYTE. + (store_split_bit_field): Use SUBREG_BYTE. + (extract_bit_field): Use SUBREG_BYTE. + (extract_split_bit_field): Use SUBREG_BYTE. + (expand_shift): Use SUBREG_BYTE. + * expr.c (store_expr, expand_expr): Use gen_lowpart_SUBREG. + * final.c (alter_subreg) Use subreg_hard_regno and SUBREG_BYTE. + * flow.c (set_noop_p): Use SUBREG_BYTE. + (mark_set_1): Remove ALTER_HARD_SUBREG. Use subreg_regno_offset instead. + * function.c (fixup_var_refs_1): Fixup explicit XEXP into a SUBREG_REG. + (fixup_memory_subreg): Use SUBREG_BYTE and remove byte endian + correction code. + (optimize_bit_field): Use SUBREG_BYTE. + (purge_addressof_1): Use SUBREG_BYTE. + (purge_single_hard_subreg_set): Use subreg_regno_offset function. + (assign_params): Mark arguments SUBREG_PROMOTED_VAR_P if they are + actually promoted by the caller and PROMOTE_FOR_CALLS_ONLY is true. + * gengenrtl.c (special_rtx): Add SUBREG. + * global.c (mark_reg_store): Use SUBREG_BYTE. + (set_preference): Rework to use subreg_regno_offset and SUBREG_BYTE. + * ifcvt (noce_emit_move_insn): Use SUBREG_BYTE. + * integrate.c (copy_rtx_and_substitute): Use SUBREG_BYTE and make sure + final byte offset is congruent to subreg's mode size. + (subst_constants): Use SUBREG_BYTE. + (mark_stores): Use subreg_regno_offset function. + * jump.c (rtx_renumbered_equal_p, true_regnum): Use subreg_regno_offset + function and SUBREG_BYTE. + * local-alloc.c (combine_regs): Use subreg_regno_offset function. + (reg_is_born): Use subreg_hard_regno. + * recog.c (valid_replace_rtx_1): Use SUBREG_BYTE and remove byte + endian correction code. Don't combine subregs unless resulting + offset aligns with type. Fix subreg constant extraction for DImode. + Simplify SUBREG of VOIDmode CONST_DOUBLE. + (general_operand): Remove dead mode_altering_drug code. + (indirect_operand): Use SUBREG_BYTE. + (constrain_operands): Use subreg_regno_offset function. + * reg-stack.c (get_true_reg): Use subreg_regno_offset function. + * regmove.c (regmove_optimize): Use SUBREG_BYTE. + (optimize_reg_copy_3): Use gen_lowpart_SUBREG. + * regs.h (REG_SIZE): Allow target to override. + (REGMODE_NATURAL_SIZE): New macro which target can override. + * reload.c (reload_inner_reg_of_subreg): subreg_regno should be used + on the entire subreg rtx. + (push_reload): Use SUBREG_BYTE in comments and code. + (find_dummy_reload): Use subreg_regno_offset. Only adjust offsets + for hard registers inside subregs. + (operands_match_p): Use subreg_regno_offset. + (find_reloads): Use SUBREG_BYTE and only advance offset for subregs + containing hard regs. + (find_reload_toplev): Use SUBREG_BYTE. Remove byte endian + corrections when fixing up MEM subregs. + (find_reloads_address_1): Use SUBREG_BYTE, subreg_regno, and + subreg_regno_offset where appropriate. + (find_reloads_subreg_address): Use SUBREG_BYTE. Remove + byte endian corrections when fixing up MEM subregs. + (subst_reloads): When combining two subregs, make sure final + offset is congruent to subreg's mode size. + (find_replacement): Use SUBREG_BYTE and subreg_regno_offset. + (refers_to_regno_for_reload_p): Use subreg_regno. + (reg_overlap_mentioned_for_reload_p): Use subreg_regno_offset. + * reload1.c (eliminate_regs) Use SUBREG_BYTE. Remove byte endian + correction code for memory subreg fixups. + (forget_old_reload_1): Use subreg_regno_offset. + (choose_reload_regs): Use subreg_regno. + (emit_input_reload_insns): Use SUBREG_BYTE. + (reload_combine_note_store): Use subreg_regno_offset. + (move2add_note_store): Use subreg_regno_offset. + * resource.c (update_live_status, mark_referenced_resources): Use + subreg_regno function. + (mark_set_resources): Use subreg_regno function. + * rtl.h (SUBREG_WORD): Rename to SUBREG_BYTE. + (subreg_regno_offset, subreg_regno): Define prototypes. + (subreg_hard_regno, constant_subword, gen_rtx_SUBREG): Newi functions. + (gen_lowpart_SUBREG): Add prototype. + * rtl.texi (subreg): Update to reflect new byte offset representation. + Add mentioning of the effect that BYTES_BIG_ENDIAN has on subregs now. + * rtlanal.c (refers_to_regno_p): Use subreg_regno. + (reg_overlap_mentioned_p): Use subreg_regno. + (replace_regs); Make sure final offset of combined subreg is + congruent to size of subreg's mode. + (subreg_regno_offset): New function. + (subreg_regno): New function. + * sched-vis.c (print_value): Change SUBREG_WORD to SUBREG_BYTE. + * sdbout.c (sdbout_symbol): Compute offset using alter_subreg. + * stmt.c (expand_anon_union_decl): Use gen_lowpart_SUBREG. + * tm.texi (ALTER_HARD_SUBREG): Remove, it is now dead. + (SUBREG_REGNO_OFFSET): Describe SUBREG_REGNO_OFFSET overrides. + * config/a29k/a29k.c (gpc_reg_operand): Use subreg_regno. + (a29k_get_reloaded_address): Use SUBREG_BYTE. + (print_operand): Use SUBREG_BYTE. + * config/alpha/alpha.c (print_operand_address): Use SUBREG_BYTE. + * config/arm/arm.c (arm_reload_in_hi): Use SUBREG_BYTE. + (arm_reload_out_hi): Use SUBREG_BYTE. + * config/d30v/d30v.c (d30v_split_double): Use subreg_regno_offset + instead of SUBREG_WORD. + (d30v_print_operand_memory_reference): Use subreg_regno_offset. + * config/dsp16xx/dsp16xx.md (extendqihi2, zero_extendqihi2): Fix + SUBREG creation to use byte offset. + * config/h8300/h8300.md (Unnamed HImode zero extraction and 16bit + inverted load insns): Fix explicit rtl subregs to use byte + offsets. + * config/i370/i370.md (cmpstrsi, movstrsi, mulsi3, divsi3, + udivsi3, umodsi3): Generate SUBREGs with byte offsets. + * config/i860/i860.c (single_insn_src_p): Use SUBREG_BYTE. + * config/i860/i860.md (mulsi3_big): Fixup explicit SUBREGs in rtl + to use byte offsets. + (unnamed fmlow.dd insn): Fixup SUBREGS to use byte offsets. + * config/i960/i960.md (extendhisi2): Generate SUBREGs with byte + offsets, also make sure it is congruent to SUBREG's mode size. + (extendqisi2, extendqihi2, zero_extendhisi2, zero_extendqisi2, + unnamed ldob insn): Generate SUBREGs with byte offset. + (zero_extendqihi2): SUBREG's are byte offsets. + * config/m68hc11/m68hc11.c (m68hc11_gen_lowpart): Use SUBREG_BYTE. + (m68hc11_gen_highpart): Use SUBREG_BYTE. + * config/m68k/m68k.md (zero_extendhisi2, zero_extendqihi2, + zero-extendqisi2): Generate SUBREGs with byte offset. + (umulsidi3, mulsidi3, subreghi1ashrdi_const32, + subregsi1ashrdi_const32, subreg1lshrdi_const32): Fixup explicit + subregs in rtl to use byte offsets. + * config/m88k/m88k.md (extendsidi2): fixup subregs to use byte offset. + * config/mips/mips.c (mips_move_1word): Use subreg_regno_offset. + (mips_move_2words): Use subreg_regno_offset. + (mips_secondary_reload_class): Use subreg_regno_offset. + * config/mips/mips.md (DImode plus, minus, move, and logical op + splits): Fixup explicit subregs in rtl to use byte offsets. + * config/mn10200/mn10200.c (print_operand): Use subreg_regno function. + * config/mn10300/mn10300.c (print_operand): Use subreg_regno function. + * config/ns32k/ns32k.md (udivmoddisi4): Fix explicit subregs in + rtl to use byte offsets. + * config/pa/pa.c (emit_move_sequence): Use SUBREG_BYTE. + * config/pa/pa.md (floatunssisf2, floatunssidf2, mulsi3): fix explicit + subregs to use byte offsets. + * config/pdp11/pdp11.md (zero_extendhisi2, modhi3, modhi3+1): + Fixup explicit subregs in rtl to use byte offsets. + * config/romp/romp.c (memory_offset_in_range_p): Use SUBREG_BYTE + and remove byte endian correction code. + * config/sh/sh.c (output_movedouble): Use subreg_regno. + (gen_ashift_hi): Use SUBREG_BYTE. + (regs_used): Use subreg_regno_offset. + (machine_dependent_reorg): Use subreg_regno_offset. + * config/sh/sh.h (INDEX_REGISTER_RTX_P): Use SUBREG_BYTE. + * config/sh/sh.md (DImode and DFmode move splits): Use subreg_regno. + (movdf_i4): Subregs are byte offsets now. + * config/sparc/sparc.c (ultra_find_type): Use SUBREG_BYTE. + * config/sparc/sparc.h (ALTER_HARD_SUBREG): Removed. + (REGMODE_NATURAL_SIZE): Override. + (REG_SIZE): For SUBREG check float mode on SUBREG_REG's mode. + * config/sparc/sparc.md (TFmode move splits): Generate SUBREGs + with byte offsets. + (zero_extendhisi2, zero_extendqidi2_insn, extendhisi2, + extendqihi2, sign_extendqihi2_insn, sign_extendqisi2_insn, + extendqidi2): Generate SUBREGs with byte offsets, also make sure + it is congruent to SUBREG's mode size. + (smulsi3_highpart_v8plus): Fix explicit subregs in rtl to use byte + offsets. + (cmp_siqi_trunc, cmp_siqi_trunc_set, cmp_diqi_trunc, + cmp_diqi_trunc_set, lshrdi3_v8plus+1, lshrdi3_v8plus+2, + lshrdi3_v8plus+3, lshrdi3_v8plus+4): Use proper + SUBREG_BYTE offset for non-paradoxical subregs in patterns. + * config/v850/v850.c (print_operand, output_move_double): Use + subreg_regno function. + + 2001-04-03 Alexandre Oliva + + * configure.in (target_subdir): Use target_alias, not target. + * configure: Rebuilt. + + * config/sh/crtn.asm (init, fini): Restore r15 from r14, not the + other way round. + * config/sh/crti.asm: Fix typos in comments. + + 2001-04-03 Alan Modra + + * pa.h: Revise comments for TARGET_NO_SPACE_REGS and + TARGET_FAST_INDIRECT_CALLS. + * pa.c (override_options): TARGET_NO_SPACE_REGS is now OK with + -fPIC. Don't warn. + (return_addr_rtx): Short circuit export stub matching when + TARGET_NO_SPACE_REGS. + (output_millicode_call): For out of range calls, make -fPIC + take precedence, then TARGET_PORTABLE_RUNTIME, then ble. Don't + return before delay slot checks when TARGET_PORTABLE_RUNTIME. + * pa.md: Modify length attr calculation of all millicode insns to + match above. + + 2001-04-02 Geoffrey Keating + + * configure.in (gcc_cv_as_leb128): Correct name of cache variable. + Require at least 2.11 in the version test. Specifically check + for and reject GAS version 2.10.90. + * configure: regenerate. + + 2001-04-03 Alan Modra + + * pa.c (override_options): Remove PIC profiling warning. + (hp_profile_labelno): Delete. + (hp_profile_label_rtx): Delete. + (hp_profile_label_name): Delete. + (pa_add_gc_roots): Remove reference to hp_profile_label_rtx. + (output_function_prologue): Remove profiling code and all tests on + profile_flag. Move store of PIC_OFFSET_TABLE_REGNUM now that + merge_sp_adjust_with_store can work for PIC and profiling. + (hppa_expand_epilogue): Remove profile_flag test. + (hppa_can_use_return_insn_p): Likewise. + (hppa_init_pic_save): Emit before tail_recursion_reentry, and + cater for PROFILE_HOOK. + (hppa_profile_hook): New function. + * pa.h (FUNCTION_PROFILER): Now does nothing. + (PROFILE_HOOK): Define. + (hppa_profile_hook): Declare. + (PROFILE_BEFORE_PROLOGUE): Delete. + (ASM_OUTPUT_REG_PUSH): Delete. + (ASM_OUTPUT_REG_POP): Delete. + * pa.md (call_profiler): Turn it into a call insn, and don't `use' + r24. Accept function name operand, and use this and a locally + generated label to calculate pc-rel offset to func start. + + 2001-04-02 Kaveh R. Ghazi + + * $(HOST_PREFIX_1)errors.o, $(HOST_PREFIX_1)ggc-none.o, + ggc-common.o, ggc-simple.o, ggc-page.o, ggc-none.o: Depend on + $(SYSTEM_H). + + 2001-04-03 Alan Modra + + * dwarf2out.c (dwarf2out_frame_debug_expr): Move errant HIGH and + LO_SUM cases to where they belong. + + 2001-04-02 Richard Henderson + + * except.h (lang_eh_type_covers): Mark extern. + (lang_eh_runtime_type): Likewise. + + 2001-04-02 Zack Weinberg + + * genattr.c, gencheck.c, gencodes.c, genconfig.c, genflags.c, + gengenrtl.c: Wrap generated header in multiple-include guard. + Improve error checking. + + 2001-04-02 Kaveh R. Ghazi + + * configure.in: Don't check for putenv. + * configure: Regenerate. + * gcc.c (putenv): Don't define. + * vax/xm-vms.h: Handle putenv. + + 2001-04-02 Jakub Jelinek + + * ifcvt.c (noce_emit_move_insn): New. + (noce_try_store_flag, noce_try_store_flag_constants, + noce_try_store_flag_inc, noce_try_store_flag_mask, + noce_try_cmove, noce_try_cmove_arith, noce_try_minmax, + noce_try_abs): Use it. + (noce_process_if_block): Likewise. + For STRICT_LOW_PART, take mode from its SUBREG. + + 2001-04-02 Jakub Jelinek + + * fold-const.c (fold): Before optimizing unsigned comparison with + 0x7fffffffU, make sure arg0 is integral type. + + 2001-04-02 Joseph S. Myers + + * c-tree.texi: Document representation of wide strings. + + 2001-04-01 Richard Henderson + + * except.h (expand_builtin_dwarf_fp_regnum): Declare. + + Sun Apr 1 11:49:05 CEST 2001 Jan Hubicka + + * i386.md: remove obsoleted comments. + (adddi_?): Rename to adddi_?_rex64; disable for 32bit. + (x86_movsicc_0_m1_rex64): Rename to x86_movdicc_0_m1_rex64; + fix output template. + + 2001-03-31 Marek Michalkiewicz + + * config/avr/libgcc.S (__mulhi3): Optimize previous change. + + 2001-03-30 Bernd Schmidt + + * loop.c (load_mems): When generating a load from a pseudo, update + REGNO_LAST_UID. + + Fri Mar 30 17:36:43 CEST 2001 Jan Hubicka + + * i386.c (ix86_split_long_move): Use change address to compensate + stack pointer change in push instruction. + + Fri Mar 30 00:31:00 CEST 2001 Jan Hubicka + + * i386.md (sse_movdfcc_eq): Fix constraint (sse_mov?fcc splitter): Use operands_match_p + instead of rtx_equal_p; fix the output template. + + Fri Mar 30 00:21:41 CEST 2001 Jan Hubicka + + * i386.c (ix86_expand_setcc): Support 64bit. + (ix86_expand_int_movcc): Likewise. + * i386.md (movdicc_rex64, x86_movsicc_0_m1_rex64, movdicc_c_rex64): + New patterns. + + * i386.md (allocate_stack_worker): Turn to expander. + (allocate_stack_worker_1, allocate_stack_worker_rex64): New insns. + + * i386.c (print_reg): Do not print x86_64 style regs on IA-32 + + 2001-03-29 Richard Henderson + + * libgcc2.c [L__main]: Include unwind-dw2-fde.h instead of frame.h. + + 2001-03-28 Matthew Hiller + + * config/mn10300/mn10300.md (cmpsi): Fix first alternative's + output template. + + * MAINTAINERS: Added self. + + 2001-03-28 Richard Henderson + + * Makefile.in (cs-tconfig.h): Depend on CONFIG_H, not GCONFIG_H. + Use ALL_CFLAGS not HOST_CFLAGS for sjlj detection. + + 2001-03-28 Jim Wilson + + * config/ia64/ia64.md (movtf): Change DImode to TFmode in calls to + operand_subword. + + 2001-03-28 Kaveh R. Ghazi + + * toplev.h (fatal_error): Add ATTRIBUTE_NORETURN. + + * tradcif.y (yyerror): Likewise. Add format specifier in call to + `error'. + + * tradcpp.c (macroexpand): Likewise for call to `error_with_line'. + + 2001-03-28 DJ Delorie + + * Makefile.in (stage1_build): Revert CFLAGS patch. + + 2001-03-28 Marek Michalkiewicz + + * config/avr/libgcc.S (__mulhi3): Correct tests to exit the loop + when multiplier or multiplicand is zero. + + 2001-03-28 Bernd Schmidt + + * cselib.c (hash_rtx): Don't do tail recursion elimination by hand. + + * config/ia64/ia64.c (update_set_flags): New function, broken out of + rtx_needs_barrier. + (set_src_needs_barrier): Likewise. + (rtx_needs_barrier): For SET case, use these two functions. Rework + PARALLEL case to handle all inputs before all outputs. + (emit_insn_group_barriers): Call init_insn_group_barriers only if we + saw a label and no stop bit since then. + (maybe_rotate, process_epilogue): Add prototypes. + + 2001-03-28 Richard Henderson + + * config/rs6000/rs6000.h (EPILOGUE_USES): Use TARGET_AIX, + not TARGET_TOC for special toc restore handling. + * config/rs6000/rs6000.md (eh_return): Likewise. + + 2001-03-28 Richard Henderson + + * config/sparc/sparc.c (eligible_for_epilogue_delay): False if + current_function_calls_eh_return. + (output_function_epilogue): Handle eh_return. + * config/sparc/sparc.h (DOESNT_NEED_UNWINDER): Remove. + (EH_RETURN_DATA_REGNO): New. + (EH_RETURN_STACKADJ_RTX): New. + (EH_RETURN_HANDLER_RTX): New. + * config/sparc/sparc.md (call/short branch peepholes): Check + can_throw_internal instead of in_same_eh_region. + + * config/rs6000/rs6000.c (rs6000_stack_info): Allocate space + for eh_return data registers. + (rs6000_emit_prologue): Save eh_return data registers. + (rs6000_emit_epilogue): Force inline restores if eh_return. + Restore eh_return data registers. Mind EH_RETURN_STACKADJ_RTX. + * config/rs6000/rs6000.h (rs6000_stack_t): Add ehrd_offset. + (EH_RETURN_DATA_REGNO, EH_RETURN_STACKADJ_RTX): New. + (EPILOGUE_USES): True for TOC_REGISTER if calls_eh_return and + the target uses one. + * config/rs6000/rs6000.md (eh_epilogue, eh_reg_restore): Remove. + (return_eh_si, return_eh_di): Remove. + (eh_return): New, from corpse of eh_epilogue. + (eh_set_lr_si, eh_set_lr_di): New. + + * config/i386/i386.c (general_no_elim_operand): Disallow virtual regs. + (ix86_save_reg): If maybe_eh_return, true for EH_RETURN_DATA_REGNOs. + True for pic register if current_function_calls_eh_return. + (ix86_expand_epilogue): Change "emit_return" argument into "style". + Handle eh_return requirements. + * config/i386/i386.h (EH_RETURN_DATA_REGNO): New. + (EH_RETURN_STACKADJ_RTX): New. + * config/i386/i386.md (exception_receiver): Remove. + (eh_return, eh_return_1): New. + * config/i386/linux.h (MD_FALLBACK_FRAME_STATE_FOR): New. + + * config/alpha/alpha.c (alpha_sa_mask): Add EH_RETURN_DATA_REGNOs. + (alpha_mark_machine_status): No eh_epilogue_sp_ofs ... + (alpha_expand_epilogue): ... use EH_RETURN_STACKADJ_RTX instead. + * config/alpha/alpha.h (machine_function): Remove eh_epilogue_sp_ofs. + (EH_RETURN_DATA_REGNO): New. + (EH_RETURN_STACKADJ_RTX, EH_RETURN_HANDLER_RTX): New. + * config/alpha/alpha.md (eh_epilogue): Remove. + (exception_receiver): Use $26 for ldgp input. + * config/alpha/linux.h (MD_FALLBACK_FRAME_STATE_FOR): New. + + 2001-03-28 Richard Henderson + + * except.c: Rewrite entirely for IA-64 ABI exception handling. + * except.h: Likewise. + + * Makefile.in (LIB2ADDEH): Mention unwind-dw2*.c + (LIB2ADDEHDEP): New. + (LIB2FUNCS_EH): Remove. + (LIB2ADD): Remove LIB2ADDEH. + (libgcc.mk): Pass LIB2ADDEHDEP, don't pass LIB2FUNCS_EH. + (LIBGCC_DEPS): Use LIB2ADDEHDEP. + (crt{begin,end}[S].o): Likewise. + (except.o): Update includes. + * mklibgcc.in: Remove LIB2FUNCS_EH, add LIB2ADDEH, LIB2ADDEHDEP. + (libgcc2_c_dep): Use LIB2ADDEHDEP. + + * basic-block.h (struct basic_block_def): Remove eh_beg, eh_end. + * bb-reorder.c (reorder_basic_blocks): Don't disable for EH. + * builtins.def (BUILT_IN_EH_RETURN_DATA_REGNO): New. + * builtins.c (expand_builtin): Implement it. + [BUILT_IN_EH_RETURN]: Update for nr arguments change. + * c-common.c (c_common_nodes_and_builtins): Declare it. + * c-decl.c (init_decl_processing): Update __builtin_eh_return. + * calls.c (libfunc_nothrow): Remove. + (emit_library_call_value_1): Don't call it. + * crtstuff.c: Include unwind-dw2-fde.h instead of frame.h. + * dwarf2.h (dwarf_call_frame_info): Add dwarf2.1 elements. + (DW_EH_PE_*): New defines for pointer encoding in .eh_frame. + * dwarf2out.c (struct dw_fde_struct): Add uses_eh_lsda, funcdef_number. + (current_funcdef_number): Globalize. + (output_call_frame_info): Emit frame data if an lsda is needed. + Generate augmentation for personality routine. Don't play with + difference symbols. + (dwarf2out_begin_prologue): Record funcdef_number. + * dwarf2out.h (current_funcdef_number): Declare. + * expr.c (expand_expr): Update for except.h name changes. + Remove POPDCC_EXPR, POPDHC_EXPR. Add EXC_PTR_EXPR. + * expr.h (LTI_throw, LTI_rethrow): Remove. + (LTI_sjthrow, LTI_sjpopnthrow, LTI_terminate): Remove. + (LTI_eh_rtime_match): Remove. + (LTI_unwind_resume, LTI_eh_personality): Add. + (LTI_unwind_sjlj_register, LTI_unwind_sjlj_unregister): Add. + * final.c (final): Don't call check_exception_handler_labels, + init_insn_eh_region, or free_insn_eh_region. + (final_scan_insn): Always emit debug labels for + NOTE_INSN_EH_REGION notes. + * flags.h (flag_new_exceptions): Remove. + * flow.c (entry_exit_blocks): Remove eh_beg, eh_end. + (record_active_eh_regions): Remove. + (count_basic_blocks): Check all instructions for REG_EH_REGION. + Use can_throw_internal. + (find_basic_blocks_1): Likewise. + (move_stray_eh_region_notes): Remove. + (find_label_refs): No eh_return_stub_label. + (make_edges): Likewise. No init/free_eh_nesting_info. Handle RESX. + (make_eh_edge): No eh_nest_info. Update for reachable_handlers + changes. + (delete_unreachable_blocks): Don't track deleted handlers. + (flow_delete_block): Use maybe_remove_eh_handler. + (delete_eh_regions): Remove. + (merge_blocks): Don't check for eh region match. + (mark_regs_live_at_end): Handle EH_RETURN_DATA_REGNO, + EH_RETURN_STACKADJ_RTX, EH_RETURN_HANDLER_RTX. + (init_propagate_block_info): Disable dead frame store optimization + when current_function_calls_eh_return. + (dump_bb): Don't print eh_beg, eh_end. + * function.c (fixup_var_refs): No catch_clauses. + (expand_function_end): Likewise. Call expand_eh_return before + the return register use. Call sjlj_emit_function_exit_after. + (expand_function_start): Force pseudo DECL_RESULT if sjlj exceptions. + * function.h (struct function): Add calls_eh_return, uses_eh_lsda. + * ifcvt.c (dead_or_predicable): Remove eh region check. + * integrate.c (function_cannot_inline_p): Disallow __builtin_eh_return. + Don't check for EH vs parameters. + (expand_inline_function_eh_labelmap, eif_eh_map): Remove. + (expand_inline_function): Call duplicate_eh_regions. + (copy_insn_list): Don't handle NOTE_INSN_EH_REGION_BEG/END. + (copy_insn_notes): Remap REG_EH_REGION notes. + (copy_rtx_and_substitute): Remove SYMBOL_REF_NEED_ADJUST check. + * integrate.h (struct inline_remap): Add local_return_label. + * jump.c (jump_optimize_1): Don't init/free_insn_eh_region, nor + check_exception_handler_labels, nor exception_optimize. + (find_cross_jump): No EH region check. + * optabs.c (init_optabs): Update for changed eh libfuncs. + * rtl.def (RESX): New. + * rtl.h (SYMBOL_REF_NEED_ADJUST): Remove. + * stmt.c (expand_decl_cleanup): Simplify using_eh_for_cleanups_p + checks. Update for except.h name changes. + (expand_cleanups): Likewise. + (expand_dcc_cleanup, expand_dhc_cleanup): Remove. + * toplev.c (dump_file_index, dump_file): Add .02.eh dump. + (compile_file): Call init_eh before init_optabs. Don't + output_exception_table here. + (rest_of_compilation): Call convert_from_eh_region_ranges, + convert_to_eh_region_ranges, output_function_exception_table. + Don't emit_eh_context. + * tree.def (POPDHC_EXPR, POPDCC_EXPR): Remove. + (EXC_PTR_EXPR): New. + + * md.texi (eh_epilogue): Remove. + (eh_return): Document. + * tm.texi (EH_RETURN_DATA_REGNO): Document. + (EH_RETURN_STACKADJ_RTX, EH_RETURN_HANDLER_RTX): Document. + + * eh-common.h: Remove file. + * frame-dwarf2.c, frame.c, frame.h: Remove files. + * libgcc2.c (L_eh): Remove. + + * unwind-dw2-fde.c: New file, largely copied from frame.c. + * unwind-dw2-fde.h: New file. + * unwind-dw2.c: New file, largely cribbed from frame-dwarf2.c. + * unwind-sjlj.c, unwind.h, unwind.inc: New files. + * libgcc-std.ver: Update for eh symbols. + + 2001-03-27 Richard Henderson + + * regmove.c (perhaps_ends_bb_p): Use can_throw_internal to + reduce false positives. + (regmove_optimize): Disable if flag_non_call_exceptions. + + * stmt.c (expand_return): Remove always true predicate. + (expand_decl_cleanup_no_eh): Remove dead code. + + * sched-deps.c (sched_analyze_insn): Consolidate scheduling + barrier code. Add a scheduling barrier if a non-call insn + can throw internally. + + * rtlanal.c (rtx_addr_can_trap_p): Virtual registers cannot trap. + Auto-inc addresses trap only if their base register does. + + * except.c (can_throw_internal): Rename from can_throw. + * except.h, resource.c: Update references. + + * integrate.c (copy_insn_list): Use returnjump_p. + (copy_insn_notes): Recurse for CALL_PLACEHOLDER. + + * function.h (struct function): Move all boolean valued fields + to single bit fields at the end of the struct. + + * bb-reorder.c, dwarf2out.c, except.c, except.h, flow.c, + jump.c, toplev.c: + Rename asynchronous_exceptions to flag_non_call_exceptions. + + * gthr-single.h (UNUSED): New. Distinguish between how C + and C++ mark unused function arguments. Use throughout. + + * Makefile.in (cs-tconfig.h): Copy USING_SJLJ_EXCEPTIONS + value to target configuration header. + * configure.in (CONFIG_SJLJ_EXCEPTIONS): New. + * config.in, configure: Rebuild. + * except.h (USING_SJLJ_EXCEPTIONS): New. Define based on + configuration and target defines. + (exceptions_via_longjmp): Remove. + * dwarf2out.c, except.c, final.c, toplev.c, config/ia64/ia64.c: + Use USING_SJLJ_EXCEPTIONS instead of exceptions_via_longjmp. + + * except.h (flag_non_call_exceptions): Move ... + * flags.h: ... here. + + * combine.c (distribute_notes) [REG_EH_REGION]: If non-call + exceptions, put the note on the trapping instruction. + + * flags.h (flag_new_exceptions): Remove. + * toplev.c: Don't set it. + * final.c: Don't check it. + * except.c: Provide stub definition. + + * flow.c (tidy_fallthru_edges): Don't combine complex edges. + (calculate_global_regs_live): Kill call-clobbered registers + across exception edges. + * reg-stack.c (convert_regs_1): Kill the entire target stack + across non-call exception edges. + + * flow.c (cleanup_cfg): Take no argument. + * output.h, sibcall.c, toplev.c: Update all calls. + + 2001-03-27 Kaveh R. Ghazi + + * configure.in: Don't check for bcopy. + * configure, config.in: Regenerate. + + * system.h: Don't define or prototype bcopy, instead poison it. + + 2001-03-27 Richard Henderson + + * function.c (expand_function_start): Set DECL_REGISTER on + a pseudo used for DECL_RESULT. + + * rtl.h (LCT_NORETURN): New. + * calls.c (emit_library_call_value_1): Handle it. + + 2001-03-27 Stan Shebs + + * objc/objc-act.c (objc_init): Use dump_base_name. + (gen_declaration): Clear the buffer arg. + (gen_declaration_1): New function, body of gen_declaration. + (adorn_decl): Call gen_declaration_1 instead of gen_declaration. + (gen_method_decl): Ditto, plus always clear buffer arg. + (error_with_ivar): Simplify. + (warn_with_method): Ditto. + (build_message_expr): Don't clear buffers. + (dump_interface): Ditto. + (objc_debug): Ditto. + (build_keyword_selector): Clear the buffer by only zeroing + the first element. + (objc_implementation_context): Declare. + (start_class): Warn about missing @end. + (finish_objc): Ditto. + + 2001-03-28 John David Anglin + + * reload1.c (eliminate_regs): Don't abort on MEM USEs. + + 2001-03-27 Kaveh R. Ghazi + + * Makefile.in (SYSTEM_H): Define. + Depend on $(SYSTEM_H), not system.h. + + * objc/Make-lang.in: Depend on $(SYSTEM_H), not system.h. + + 2001-03-27 Jim Wilson + + * final.c (final_scan_insn, case NOTE_INSN_BASIC_BLOCK): Call + IA64_UNWIND_EMIT. + * config/ia64/ia64.c (block_num, need_copy_state): New static vars. + (process_epilogue): New static function. + (process_set): Call process_epilogue instead of emitting .restore + directly. + (process_for_unwind_directive): Handle NOTE_INSN_BASIC_BLOCK. + + * flow.c (struct reg_cond_life_info): New fields orig_condition + and stores. + (init_propagate_block_info): Set new fields. + (mark_regno_cond_dead): Set and use new fields. + (flush_reg_cond_reg_1): Likewise. + (and_reg_cond, case AND): Check for redundant AND conditions. + (mark_used_reg): Delete unnecessary clears before freeing splay trees. + Set new fields. + + 2001-03-27 Neil Booth + + * cppmacro.c (stringify_arg): Null terminate strings. + + 2001-03-27 Zack Weinberg + + * config.gcc (m68hc11-*-*, m68hc12-*-*): Convert to new tm.h + inclusion style. xm-m68hc11.h no longer exists. + * config/m68hc11/xm-m68hc11.h: Delete file. + * config/m68hc11/m68hc12.h: Convert to new tm.h inclusion style. + + * config/m68hc11/m68hc11.h: Convert to new tm.h inclusion style. + Don't define GCC_VERSION, N_, or PARAMS; don't include + gansidecl.h or stdio.h. Define inhibit_libc here. + Make code conditioned on #if GCC_VERSION > 2095 unconditional. + Delete code conditioned on #if GCC_VERSION == 2095. + + * config/m68hc11/m68hc11-protos.h, config/m68hc11/m68hc11.c: + Make code conditioned on #if GCC_VERSION > 2095 unconditional. + Delete code conditioned on #if GCC_VERSION == 2095. + + 2001-03-27 Kaveh R. Ghazi + + * system.h: Include symcat.h. + (STRINGIFY): Don't define. + + * configure.in: Adjust comment. + + * builtins.c: Use STRINGX, not STRINGIFY. + * gencheck.c: Likewise. + * gengenrtl.c: Likewise. + * protoize.c: Likewise. + + * cpplex.c: Don't include symcat.h. + * cpplib.c: Likewise. + + * gansidecl.h (HAVE_STRINGIZE): Don't define. + + 2001-03-27 Alan Modra + + * c-typeck.c (digest_init): Fold init expression. + + 2001-03-26 Kaveh R. Ghazi + + * sbitmap.c (sbitmap_copy): Call memcpy, not bcopy. + + 2001-03-27 Alan Modra + + * except.c (eh_regs): Save results of build_pointer_type to a temp + as FUNCTION_VALUE macro may evaluate its args multiple times. + + 2001-03-26 Mark Mitchell + + * c-common.h (DECL_NUM_STMTS): New macro. + * c-decl.c (duplicate_decls): Copy DECL_NUM_STMTS, not + DECL_FRAME_SIZE. + (pushdecl): Likewise. + * c-semantics.c (add_stmt): Update DECL_NUM_STMTS. + * integrate.c (expand_inline_function): Don't check + DECL_FRAME_SIZE. + * print-tree.c (print_node): Don't print it. + * toplev.c (rest_of_compilation): Don't try to inline when + flag_no_inline is on. + * tree.h (DECL_FRAME_SIZE): Remove. + (tree_decl): Adjust accordingly. + + 2001-03-26 Kaveh R. Ghazi + + * combine.c (try_combine): Use memcpy, not bcopy. + + * genattrtab.c (expand_units): Likewise. + + Mon Mar 26 15:55:08 CEST 2001 Jan Hubicka + + * i386.md (push mem DI peep2): New. + (mov 0, mov -1 peep2): Handle 64bit. + (lea to arithmetics peep2): Handle 64bit leas. + (rsp arithmetics to push/pop peep2s): New. + + * i386.md (truncdfsf2_3, trunctfsf2_2): Change predicate to memory_operand. + + Mon Mar 26 14:35:18 CEST 2001 Jan Hubicka + + * i386.c (struct machine_function): Add save_varrargs_registers. + (ix86_save_varrargs_registers): New macro. + (ix86_frame_layout): Support 64bit; support red zones and varrargs area. + (ix86_expand_prologue): Likewise. + (ix86_emit_epilogue_esp_adjustement): Likewise. + (ix86_expand_epilogue): Likewise. + * i386.md (pro_epilogue_adjust_stack): Turn to expander; support 64bit. + (pro_epilogue_adjust_stack_1): New insn. + (pro_epilogue_adjust_stack_rex64): Likewise. + * i386.h (MASK_NO_RED_ZONE): New constant. + (TARGET_RED_ZONE): New macro. + (TARGET_OPTIONS): Add "red-zone" and "no-red-zone" + (RED_ZONE_SIZE): New constant. + (RED_ZONE_RESERVE): New constant. + + 2001-03-25 Kaveh R. Ghazi + + * toplev.c (set_float_handler): Use memcpy, not bcopy. + + 2001-03-25 Kazu Hirata + + * config/h8300/h8300.md (umodqi3): Output a tab instead of a + space. + (modqi3): Likewise. + (umodhi3): Likewise. + (modhi3): Likewise. + + 2001-03-25 Kaveh R. Ghazi + + * mkconfig.sh (DEFINES): Handle entries with '='. + + * config.gcc: Don't use i370/xm-mvs.h or ns32k/xm-pc532-min.h. + Set xm_defines to MACRO=value instead. + + * i370/xm-mvs.h: Delete. + + * ns32k/xm-pc532-min.h: Likewise. + + Sun Mar 25 15:01:40 CEST 2001 Jan Hubicka + + * i386.md (ashldi3, ashrdi3, lshrdi3): Change predicates to + shiftdi_operand; + use ix86_expand_binary_operator + (?sh??i_?): Disable for 64bit. + * i386.h (PREDICATE_CODES): Add shiftdi_operand. + * i386.c (shiftdi_operand): New predicate. + + * (ashldi3_1_rex64, ashldi3_cmp_rex64, ashlsi3_1_zext, ashlsi3_cmp_zext, + ashrdi3_63_rex64, ashrdi3_1_one_bit_rex64, ashrdi3_1_rex64, + ashrdi3_one_bit_cmp_rex64, ashrdi3_cmp_rex64, ashrsi3_31_zext, + ashrsi3_1_one_bit_zext, ashrsi3_1_zext, ashrsi3_one_bit_cmp_zext, + ashrsi3_cmp_zext, lshrdi3_1_one_bit_rex64, lshrdi3_1_rex64, + lshrdi3_cmp_one_bit_rex64, lshrdi3_cmp_rex64, lshrsi3_1_one_bit_zext, + lshrsi3_1_zext, lshrsi3_cmp_one_bit_zext, lshrsi3_cmp_zext, + rotlsi3_1_one_bit_rex64, rotldi3_1_rex64, + rotlsi3_1_one_bit_zext, rotlsi3_1_zext, rotrdi3_1_one_bit_rex64, + rotrdi3_1_rex64, rotrsi3_1_one_bit_zext, rotrsi3_1_zext): New patterns. + (rotldi3, rotrdi3): New expanders. + + Sun Mar 25 14:25:33 CEST 2001 Jan Hubicka + + * i386.md (movstrsi): Move offline. + (movstrdi): New. + (strmovdi_rex64): New. + (strmov?i): Accept 64bit. + (strmov?i_rex64): New. + (strmov?i_rex_1): New. + (strmov?i_1): Disable for 64bit. + (rep_mov?i_rex64): New. + (rep_mov?i): Disable for 64bit. + (clrstrsi): Move offline. + (strset?i_rex64): New. + (strset?i: Accept 64bit. + (rep_stos?i): Disable for 64bit. + (rep_stos?i_rex64): New. + (strset?i_rex_1): New. + (strset?i_1): Disable for 64bit. + (cmpstrsi): Accept 64bit. + (cmpstrsi_nz_1): Rename to cmpstrqi_nz_1; Disable for 64bit. + (cmpstrqi_nz_rex_1): New. + (cmpstrsi_1): Rename to cmpstrqi_1; Disable for 64bit. + (strlensi): Move offline. + (strlendi): New. + (strlenqi_1): Disable for 64bit; fix constraints. + (strlenqi_rex_1): New. + * i386.c (ix86_adjust_counter): New static function. + (ix86_zero_extend_to_Pmode): Likewise. + (ix86_expand_aligntest): Likweise. + (ix86_expand_strlensi_unroll_1): Make static; update for 64bit. + (ix86_expand_movstr): New global function. + (ix86_expand_clrstr): New global function. + (ix86_expand_strlen): New global function. + * i386-protos.h (ix86_expand_movstr, ix86_expand_clrstr, + ix86_expand_strlen): Declare. + (ix86_expand_strlensi_unroll_1): Delete. + + Sat Mar 24 23:15:19 CET 2001 Jan Hubicka + + * i386.md (cmpdi): Fix operand predicates. + (cmpdi_ccno_1_rex64, cmpdi_minus_1_rex64, cmpdi_1_rex64, + cmpdi_1_insn_rex64): New patterns. + (adddi3): Turn to expander. + (adddi3_1, adddi3_carry_rex64, adddi3_cc_rex64): New patterns. + (addsi3_carry_zext): New pattern. + (adddi_?_rex64): New patterns and splitters. + (addsi_?_zext): New patterns. + (subsi3_carry_zext): New pattern. + (subdi_?_rex64): New patterns and splitters. + (iorsi_?_zext): New patterns. + (iordi_?_rex64): New patterns and splitters. + (iorsi_?_zext): New patterns. + (iorsi_?_zext_imm): New patterns. + (xorsi_?_zext): New patterns. + (xordi_?_rex64): New patterns and splitters. + (xorsi_?_zext): New patterns. + (negdi*): New patterns. + (one_cmpldi*): Likewise. + (one_cmplsi*_zext, negsi*_zext): Likewise. + (testqi_ext_3_rex64): New pattern. + + Sat Mar 24 21:13:28 CET 2001 Jan Hubicka + + * i386-protos.h (ix86_split_long_move): Return void. + * i386.c (ix86_split_to_parts): Handle 64bit target. + (ix86_split_long_move): Likewise. + * i386.md (all calls to ix86_split_long_move): Update. + + 2001-03-23 Richard Henderson + + * config/mips/iris4.h (ASM_OUTPUT_ASCII): Rename local variables + to avoid shadowing arguments. + + 2001-03-23 Jakub Jelinek + + * varasm.c (make_decl_rtl): Don't append var_labelno discriminator + to variable names where DECL_NAME is different from + DECL_ASSEMBLER_NAME. + + 2001-03-23 Jim Wilson + + * varasm.c (make_decl_rtl): Add TREE_PUBLIC check to abort test. + (assemble_alias): Call make_decl_rtl. + + Fri Mar 23 16:59:08 2001 J"orn Rennecke + + * stor-layout.c (layout_type): Give OFFSET_TYPE a MODE_INT type. + + 2001-03-23 Bryce McKinlay + + * extend.texi: Document the "java_interface" attribute. + + 2001-03-22 Zack Weinberg + + * mkconfig.sh: Use a subshell with redirected stdout, + instead of closing stdout and confusing commands that run + afterward. Throw away output of cmp. + + 2001-03-22 Gordon Sadler + + * Makefile.in (stage1_build): Pass CFLAGS to stage1_build. + + Thu Mar 22 22:15:59 CET 2001 Jan Hubicka + + * i386.md (zero_extendsidi2_32): Break out from ... + (zero_extendsidi2): ... here ; turn to expander. + (zero_extendsidi2_rex64): New. + (extendsidi2_32): Break out from ... + (extendsidi2): ... here ; turn to expander. + (extendsidi2_rex64): New. + (zero_extendhidi2, zero_extendqidi2, extendhidi2, extendqidi2): New. + (trunc?f?f splitters): Add 64bit versions. + + Thu Mar 22 21:41:16 CET 2001 Jan Hubicka + + * i386.md (pushsi, pushsi2_prologue): Disable. + (pushsi2_rex64): New. + (movabs?i_1_rex64, movabs?i_2_rex64): New. + (movqi_ext_1): Disable for 64bit. + (movqi_ext_1_rex64): New. + (pushdi2_rex64): New pattern, peep2s and splitter. + (pushdi2_prologue_rex64): New pattern. + (popdi1_epilogue_rex64, popdi1, movdi_xor_rex64, movdi_or_rex64): + Likewise. + (movdi splitters): Disable for 64bit. + (movdi_1_rex64): New pattern, peep2s and splitters. + (swapdi): New pattern. + (pushsf): Disable for 64bit. + (pushsf_rex64): New pattern and splitter. + (pushdf_nointeger): Disable for 64bit. + (pushdf_integer): Handle the 64bit case. + (pushtf): Likewise; update splitters. + + 2001-03-22 Richard Henderson + + * mkconfig.sh: Include insn-flags.h. + * Makefile.in (CONFIG_H): Include insn-flags.h. + (lots of objects): Remove insn-codes.h and insn-flags.h. + + * alias.c, bb-reorder.c, calls.c, do-loop.c, flow.c, haifa-sched.c, + integrate.c, jump.c, loop.c, predict.c, profile.c, reg-stack.c, + regmove.c, reorg.c, a29k/a29k.c, alpha/alpha.c, arc/arc.c, arm/arm.c, + avr/avr.c, clipper/clipper.c, convex/convex.c, d30v/d30v.c, + dsp16xx/dsp16xx.c, fr30/fr30.c, h8300/h8300.c, i370/i370.c, + i386/i386.c, i860/i860.c, ia64/ia64.c, m32r/m32r.c, m68hc11/m68hc11.c, + m68k/m68k.c, m88k/m88k.c, mcore/mcore.c, mn10200/mn10200.c, + mn10300/mn10300.c, ns32k/ns32k.c, pa/pa.c, pdp11/pdp11.c, + pj/pj.c, romp/romp.c, rs6000/rs6000.c, sh/sh.c, sparc/sparc.c, + v850/v850.c, vax/vax.c: + Don't include insn-flags.h. + + * diagnostic.c, expr.h, reload.c, toplev.c: + Don't include insn-codes.h. + + * builtins.c, combine.c, except.c, explow.c, expmed.c, expr.c, + final.c, function.c, optabs.c, recog.c, reload1.c, stmt.c, + c4x/c4x.c, i960/i960.c, mips/mips.c: + Don't include insn-codes.h or insn-flags.h. + + * genemit.c, genopinit.c, genoutput.c: Don't include insn-codes.h + or insn-flags.h in the generated code. + * genflags.c (gen_proto): Use "struct rtx_def *" instead of "rtx". + (main): Forward declare struct rtx_def. + + 2001-03-22 Joseph S. Myers + + * invoke.texi (-ffast-math): Remove duplicate line about + __FAST_MATH__. + + * gcc.texi: Remove more obsolete documentation of bugs and + installation problems. + + 2001-03-21 Kazu Hirata + + * config/h8300/h8300.md (movsi_h8300hs): Split the 2nd alternative + into two parts. + + 2001-03-20 Jason Merrill + + * collect2.c (is_ctor_dtor): Always use '_' in the file fn names, + not '.' or '$'. + * tree.c (FILE_FUNCTION_FORMAT): Likewise. + * varasm.c (CHKR_PREFIX): Likewise. + + Wed Mar 21 14:27:11 2001 Richard Kenner + + * gcse.c (hash_scan_set): An expression is not anticipatible if it + is part of a multi-SET insn. + + * cse.c (find_comparison_args): Remove previous change. + * ifcvt.c (noce_process_if_block): When moving an insn, remove any + REG_EQUAL notes. + + * config/i386/i386.md (conditional_trap): Remove warning. + + * recog.c (push_operand): Fix error in last change that caused + undefined symbol on many targets. + + * sdbout.c: #include ggc.h. + (sdbout_init): Move to end of file. + Call ggc_add_tree_root for anonymous_types. + (sdbout_symbol): Use DECL_NAME for local, not DECL_ASSEMBLER_NAME. + (sdbout_one_type): Use DECL_NAME for field name. + * Makefile.in (sdbout.o): Show includes ggc.h. + + Wed Mar 21 20:33:26 CET 2001 Jan Hubicka + + * i386.c (override_options): Default ix86_regparm to REGPARM_MAX. + (override_options): Use properlimits for preferred_stack_boundary. + (ix86_valid_type_attribute_p): Disable stdcall and cdecl attributes + on x86_64. + (ext_register_operand): Accept DImode. + (load_pic_register): Abort on 64bit. + (gen_push): Use Pmode instead of SImode. + (ix86_save_reg): Pic reg is never used on 64bit. + (ix86_expand_prologue): Likewise. + (ix86_emit_save_regs): Use Pmode instead of SImode. + (legitimate_address_p): Check displacement for 64bit. + (print_operand): Avoid outputting of (%rip) on 64bit. + (print_operand_address): Output (%rip) where possible. + (split_di): Abort on 64bit registers. + (ix86_expand_branch): DImode comparison is simple for x86_64. + (memory_address_length): Recognize memory addresses formed using + PRE/POST modify. + (ix86_data_alignment, ix86_local_alignment): Align arrays to 16 bytes + for x86_64. + * i386.h (TARGET_USE_SAHF): Disable for 64bit. + + Wed Mar 21 18:51:19 CET 2001 Jan Hubicka + + * recog.c (push_operand): Recognize new format of push instructions. + + Wed Mar 21 10:53:57 CET 2001 Jan Hubicka + + * i386.md (pushqi1): New. + * i386-protos.h (x86_64_general_operand, x86_64_szext_general_operand, + x86_64_nonmemory_operand, x86_64_szext_nonmemory_operand, + x86_64_immediate_operand, x86_64_immediate_operand, + x86_64_zext_immediate_operand): Declare. + * i386.c (x86_64_general_operand, x86_64_szext_general_operand, + x86_64_nonmemory_operand, x86_64_szext_nonmemory_operand, + x86_64_immediate_operand, x86_64_immediate_operand, + x86_64_zext_immediate_operand): define. + * i386.h (PREDICATE_CODES): Add new predicates. + + Wed Mar 21 10:25:13 CET 2001 Jan Hubicka + + * i386.md (pophi1, popqi1, pushqi1): Remove. + + * expr.c (emit_single_push_insn): New function. + (move_by_pieces): Accept NULL as destination for push instructions. + (gen_push_operand): Kill. + (emit_push_insn): Pass NULL when pushing; avoid updating of + stack_pointer_delta. + * expr.h (gen_push_operand): Kill. + + Tue Mar 20 20:15:06 2001 Richard Kenner + + * rtl.texi (COMPARE): Clarify documentation and reference section + on comparisons. + + 2001-03-20 Stan Shebs + + * objc/objc-act.c (get_static_reference): Use NULL_TREE. + (get_object_reference): Ditto. + (error_with_ivar): Use error_with_file_and_line. + (warn_with_method): Use warning_with_file_and_line. + + 2001-03-20 Tom Tromey + + * libgcc-std.ver: Added __fixunssfsi and __fixunsdfsi. + + 2001-03-20 Mark Mitchell + + * tree.c (set_decl_assembler_name): Set DECL_ASSEMBLER_NAME for + variables that are TREE_PUBLIC, even if not TREE_STATIC. + + 2001-03-20 DJ Delorie + + * Makefile.in (install-libgcc): Pass complete list of variables. + (install-multilib): Ditto. + + 2001-03-20 David Billinghurst + + * config/i386/cygwin.h: Declare ctor_section, dtor_section + drectve_section, switch_to_section. + + * winnt.c: Declare functions associated_type, gen_stdcall_suffix, + i386_pe_dllexport_p, i386_pe_dllimport_p, i386_pe_mark_dllexport, + i386_pe_mark_dllimport. + + 2001-03-20 David Billinghurst + + * config/i386/cygwin.h: Include Declare and constify + functions i386_pe_*. + + * config/i386/winnt.c: Include "tm_p.h" and "toplev.h" Constify + i386_pe_* functions with char * arguments. + + 2001-03-20 Alexandre Oliva + + * config/sh/sh.md (movsf_ie): Fix output patterns for fpul load + and store. + (movsi_ie): Introduce fpul store. + + 2001-03-20 Alan Modra + + * Makefile.in (OBJS): Remove hashtab.o. + + 2001-03-19 Stan Shebs + + * objc/objc-act.c (maybe_objc_method_name): Remove, never called. + * c-lang.c (maybe_objc_method_name): Ditto. + * c-tree.h (maybe_objc_method_name): Remove decl. + + 2001-03-19 Tom Tromey + + * gcc.c (init_gcc_specs): Fix comment. + + 2001-03-19 Mark Mitchell + + Compute DECL_ASSEMBLER_NAME lazily. + * tree.h (DECL_ASSEMBLER_NAME): Compute it lazily. + (DECL_ASSEMBLER_NAME_SET_P): New macro. + (SET_DECL_ASSEMBLER_NAME): Likewise. + (COPY_DECL_ASSEMBLER_NAME): Likewise. + (set_decl_assembler_name): Declare. + (lang_set_decl_assembler_name): Likewise. + * tree.c (lang_set_decl_assembler_name): New variab.e + (set_decl_assembler_name): New function. + (init_obstacks): Set lang_set_decl_assembler_name. + (build_decl): Don't set DECL_ASSEMBLER_NAME. + * c-decl.c (duplicate_decls): Use SET_DECL_ASSEMBLER_NAME, + COPY_DECL_ASSEMBLER_NAME, etc. Don't set DECL_ASSEMBLER_NAME + where it's not necessary. + (builtin_function): Likewise. + (finish_decl): Likewise. + * dbxout.c (dbxout_type_methods): Likewise. + * ggc-common.c (ggc_mark_trees): Likewise. + * profile.c (output_func_start_profiler): Likewise. + * varasm.c (make_decl_rtl): Likewise. + + * cse.c (find_comparison_args): Update documentation. Fix + mishandling of COMPARE operations. + + * tree.def (ABS_EXPR): Add documentation. + * fold-const.c (fold): Improve folding of ABS_EXPRs. + + 2001-03-19 Zack Weinberg + + * Makefile.in (hash.o): Depend on $(GCONFIG_H), not $(CONFIG_H). + + 2001-03-19 Jakub Jelinek + + * crtstuff.c (init_dummy): Use CRT_END_INIT_DUMMY if defined. + Remove ia32 linux PIC kludge and move it... + * config/i386/linux.h (CRT_END_INIT_DUMMY): ...here. + + Mon Mar 19 18:53:54 CET 2001 Jan Hubicka + + * i386.md (absdf2 expander): Fix 64bit case. + + 2001-03-19 Brad Lucier + + * Makefile.in: Have splay-tree.o depend on $(GCONFIG_H). + + 2001-03-16 Andrew Haley + + * config/ia64/libgcc-ia64.ver: Add __ia64_backtrace. + + 2001-03-19 Gerald Pfeifer + + * README.X11: Remove obsolete file. + + 2001-03-18 Anthony Green + + * config/pj/pj.h: Remove some trailing commas. + (ASM_SPEC): Use -EB and -EL, not -mb and -ml. + + 2001-03-18 Richard Henderson + + * defaults.h (ACCUMULATE_OUTGOING_ARGS, PUSH_ARGS): Move from ... + * calls.c: ... here. + * combine.c, expr.c, final.c, function.c toplev.c: Don't provide + defaults for them here. + + 2001-03-17 Anthony Green + + * config/pj/lib1funcs.S: Fix broken comment. + * config/pj/pj.h (LOCAL_LABEL_PREFIX): Prefix internal + labels with '.'. + + 2001-03-18 Joseph S. Myers + + * gcc.texi: Remove obsolete information relating to build and + installation problems with enquire or the Pyramid C compiler. + + 2001-03-17 Richard Henderson + + * dwarf2out.c (queue_reg_save): New. + (flush_queued_reg_saves, clobbers_queued_reg_save): New. + (dwarf2out_frame_debug_expr): Call queue_reg_save instead of + dwarf2out_reg_save. + (dwarf2out_frame_debug): Call flush_queued_reg_saves when needed. + (cfa, cfa_store, cfa_temp): Make static. + * final.c (final_scan_insn): Always call dwarf2out_frame_debug. + + 2001-03-17 Richard Henderson + + * integrate.h (struct inline_remap): Add local_return_label. + * integrate.c (expand_inline_function): Initialize it and emit + it after copy_insn_notes. + (copy_insn_list): Don't store local_return_label here. + (copy_insn_notes): New function split out from copy_insn_list. + + 2001-03-17 Richard Henderson + + * dwarf2out.c (lookup_filename): Emit .file if the assembler + is generating .debug_line. + (dwarf2out_init): Add main_input_filename to the file table first. + * configure.in (as_dwarf2_debug_line): Test with file number 1 + instead of file number 0. + + Sat Mar 17 11:52:34 2001 Richard Kenner + + * combine.c (undobuf): Remove field previous_undos; all refs deleted. + (gen_rtx_combine): Deleted; all references changed as appropriate. + (gen_unary): Deleted; all refs changed to call simplify_gen_unary. + + * print-tree.c (print_node): Print DECL_NONADDRESSABLE_P. + + 2001-03-17 David Billinghurst + + * config/i386/xm-cygwin.h: Include + + * config/ia64/ia64.c (ia64_compute_frame_size): If reg_fp is zero, + then set it to LOC_REG (79) instead of aborting. + + 2001-03-16 Phil Edwards + + * gccbug.in: Remove high priority. + + 2001-03-16 Richard Henerson + + * aclocal.m4 (gcc_AC_EXAMINE_OBJECT): Substitute leading od + output with a space instead of deleting it. + * configure: Regenerate. + + 2001-03-16 Zack Weinberg + + * aclocal.m4 (gcc_AC_EXAMINE_OBJECT): New utility macro which + handles the gory details of converting an object file into + something that's safe to grep. + (gcc_AC_C_COMPILE_BIGENDIAN): Rename to + gcc_AC_C_COMPILE_ENDIAN. Use gcc_AC_EXAMINE_OBJECT. Put + newlines at either end of the string we're looking for. + Make 'checking ...' message less stilted. + (gcc_AC_C_FLOAT_FORMAT): Use gcc_AC_EXAMINE_OBJECT. Handle + ARM in-memory layout and its hypothetical converse. Don't + define HOST_FLOAT_WORDS_BIG_ENDIAN unless it's different from + HOST_WORDS_BIG_ENDIAN. + + * configure.in: Adjust for renamed macro. Move + gcc_AC_C_FLOAT_FORMAT below gcc_AC_C_COMPILE_ENDIAN. + * configure, config.in: Regenerate. + + 2001-03-16 Laurynas Biveinis + + * fixinc/Makefile.in: Set SHELL. + + 2001-03-16 Laurynas Biveinis + + * fixinc/fixincl.c (fix_with_system): Quote file names before + passing them to shell. + + 2001-03-16 Laurynas Biveinis + + * Makefile.in: Use fix-header$(build_exeext) instead + of fix-header. + + 2001-03-16 Richard Henderson + + * dwarf2out.c: Revert most of 2000-11-25 and 2001-01-24 changes. + (LN_PROLOG_AS_LABEL, LN_PROLOG_END_LABEL): New. + (size_of_line_prolog): Remove. + (output_line_info): Compute prologue size via label difference. + (lookup_filename): Return "unspecified" for and . + + * configure.in (HAVE_AS_DWARF2_DEBUG_LINE): Require that the + assembler error when redefining file numbers. + * config.in, configure: Rebuild. + + * dwarf2asm.c (dw2_asm_output_data): Mask data to the output size. + (dw2_asm_output_data_uleb128): Use space not tab after .uleb128. + (dw2_asm_output_delta_uleb128): Likewise. + (dw2_asm_output_delta_sleb128): Similarly. + (dw2_asm_output_data_sleb128): Similarly. Print number in decimal. + + 2001-03-16 Michael Meissner + + * mips.h (BITMASK_HIGH): Replacement for 0x80000000 that avoids + warnings. + (BITMASK_UPPER16): Replacement for 0xffff0000 that avoids + warnings. + (BITMASK_LOWER16): Replacement for 0x0000ffff. + + * mips.c (save_restore_insns): Use BITMASK_UPPER16/BITMASK_LOWER16 + instead of 0xffff0000/0x0000ffff to avoid warnings about constants + being unsigned in ISO C and signed in traditional. + (expand_prologue): Ditto. + (RA_MASK): Use BITMASK_HIGH to avoid warnings. + + * mips.md (divmodsi4,divmodsi4): Use BITMASK_HIGH to avoid + warnings. + (divsi3,divdi3): Ditto. + (modsi3,moddi3): Ditto. + (fix_truncdfsi2,fix_truncdfdi2): Ditto. + (fix_truncsfsi2,fix_truncsfdi2): Ditto. + (movsi split): Use BITMASK_UPPER16/BITMASK_LOWER16 to avoid + warnings. + + Fri Mar 16 14:47:57 CET 2001 Jan Hubicka + + * i386.c (ix86_expand_fp_movcc): Do not attempt to construct + SSE based conditional moves on LTGT/UNEQ conditions; + Canonicalize EQ to NE. + * i386.md (sse_mov?fcc): Disallow EQ and NE in IEEE mode. + (sse_mov?fcc_ne): New. + + * i386-protos.h (sign_extended_value, zero_extended_value): Declare. + + 2001-03-16 Alexandre Oliva + + * config/sh/sh.c (sh_expand_prologue): Insns that set up the PIC + register may be dead. + + 2001-03-16 Brad Lucier + + * Makefile.in (hash.o): Depend on CONFIG_H. + + 2001-03-15 Mark Mitchell + + * dwarf2out.c (rtl_for_decl_location): Use DECL_RTL_IF_SET. + + 2001-03-15 Richard Henderson + + * config/ia64/ia64.h (ASM_OUTPUT_DWARF_OFFSET): New. + (ASM_OUTPUT_DWARF_PCREL): New. + * config/ia64/hpux.h (ASM_OUTPUT_DWARF_OFFSET): Remove. + + 2001-03-16 Alexandre Oliva + + * cppfiles.c (stack_include_file): Use MAX of sysp. + + 2001-03-15 Steve Ellcey + + * config.gcc (ia64*-*-hpux*): New case. + * config/ia64/hpux.h: New file for HP-UX support. + * config/ia64/t-hpux: New file for HP-UX support. + + 2001-03-16 Bruce Korb , Alexandre Oliva + + * fixinc/inclhack.def (irix_stdio_va_list): New. + * fixinc/fixincl.x: Rebuilt. + + 2001-03-15 Richard Henderson + + * dwarf2asm.c (dw2_asm_output_offset): Use ASM_OUTPUT_DWARF_OFFSET + if provided by the target. + (dw2_asm_output_pcrel): Likewise with ASM_OUTPUT_DWARF_PCREL. + (dw2_asm_output_addr): New. + * dwarf2asm.h (dw2_asm_output_addr): Declare. + * dwarf2out.c (output_cfi): Use it for program addresses. + (output_call_frame_info, output_die): Likewise. + (output_aranges, output_line_info): Likewise. + + 2001-03-15 Bruce Korb + + * gcc.c(main): make more rigorous + * collect2.c(main): guard against ignoring SIGCHLD + * protoize.c(main): ditto + * gcc/fixinc/fixincl.c(initialize): ditto + + 2001-03-15 Mark Mitchell + + * sdbout.c (sdbout_symbol): Use DECL_RTL_SET_P, SET_DECL_RTL. + (sdbout_parms): Likewise. + + Thu Mar 15 12:57:14 2001 Jeffrey A Law (law@cygnus.com) + + * reload1.c (reload_cse_simplify_set): For LOAD_EXTEND_OP, do not + "widen" a destination that is already wider than a word. Also do + not widen if LOAD_EXTEND_OP is NIL for the given mode. + + 2001-03-15 Bernd Schmidt + + * config/ia64/ia64.c (ia64_sched_reorder): Remove debugging aids. + + Thu Mar 15 11:30:31 EST 2001 John Wehle (john@feith.com) + + * i960.h (ROUND_TYPE_SIZE_UNIT): Fix typo. + + Thu Mar 15 11:24:29 EST 2001 John Wehle (john@feith.com) + + * i960.h (i960_maxbitalignment, + i960_last_maxbitalignment): Declare. + * i960.c (i960_maxbitalignment, + i960_last_maxbitalignment): Make global. + (process_pragma): Delete. + (i960_pr_align, i960_pr_noalign): Move from here ... + * i960-c.c: ... to this new file. + * t-960bare (i960-c.o): New rule. + * t-vxworks960 (i960-c.o): Likewise. + * config.gcc (i960-*-*): Define c_target_objs and + cxx_target_objs. + + 2001-03-15 Bernd Schmidt + + * cselib.c (hash_rtx): For REG and MEM, just use value of expression + without adding in rtx code and mode. + + * alias.c (init_alias_analysis): Don't use any rtx whose value + varies as a known value. + Delete a superfluous test. + + * config/ia64/ia64.c (maybe_rotate): New function, broken out of + ia64_sched_reorder. + (ia64_sched_reorder): Call maybe_rotate; also rotate after + scheduling a stop bit. + (ia64_emit_nops): Correctly handle ASMs. + + 2001-03-15 Mark Mitchell + + * varasm.c (assemble_variable): Use DECL_RTL_SET_P. + + 2001-03-15 Neil Booth + + * cpp.texi: Update documentation for -include and -imacros. + * cppfiles.c (struct include_file): Remove "defined" memeber. + (find_or_create_entry): Make a copy of the file name, and + simplify it. + (open_file): Update to ensure we use the simplified filename. + (stack_include_file): Don't set search_from. + (cpp_included): Don't simplify the path name here. + (find_include_file): New prototype. Call search_from to + get the start of the "" include chain. Don't simplify the + filenames here. + (_cpp_execute_include): New prototype. Move diagnostics to + do_include_common. Update. + (_cpp_pop_file_buffer): Don't set defined. + (search_from): New prototype. Use the preprocessor's cwd + for files included from the command line. + (read_name_map): Don't simplify the pathname here. + * cpphash.h (enum include_type): New. + (struct buffer): Delete search from. New search_cached. + (_cpp_execute_include): Update prototype. + * cppinit.c (do_includes): Use _cpp_execute_include. + * cpplib.c (do_include_common): New function. + (do_include, do_include_next, do_import): Use it. + + 2001-03-14 Mark Mitchell + + * varasm.c (assemble_alias): Use DECL_ASSEMBLER_NAME, not the + contents of the RTL, to determine the name of the object. + + 2001-03-14 Mark Mitchell + + * tree.h (DECL_RTL): Allocate RTL lazily. + (SET_DECL_RTL): New macro. + (DECL_RTL_SET_P): Likewise. + (COPY_DECL_RTL): Likewise. + (DECL_RTL_IF_SET): Likewise. + * varasm.c (make_decl_rtl): Add assertions about the kind of + declaration we are processing. + * c-decl.c (duplicate_decls): Use COPY_DECL_RTL, DECL_RTL_SET_P, etc. + (start_decl): Likewise. + (finish_decl): Likewise. + * c-semantics.c (emit_local_var): Likewise. + * calls.c (expand_call): Likewise. + * dbxout.c (dbxout_symbol): Likewise. + * emit-rtl.c (unshare_all_rtl): Likewise. + (unshare_all_decls): Likewise. + (reset_used_decls): Likewise. + * expr.c (store_constructor): Likewise. + (safe_from_p): Likewise. + (expand_expr): Likewise. + * function.c (put_var_into_stack): Likewise. + (instantiate_decls_1): Likewise. + (assign_parms): Likewise. + (expand_function_start): Likewise. + (expand_function_end): Likewise. + * ggc-common.c (gcc_mark_trees): Likewise. + * integrate.c (function_cannot_inline_p): Likewise. + (copy_decl_for_inlining): Likewise. + (expand_inline_function): Likewise. + (integrate_parm_decls): Likewise. + (integrate_decl_tree): Likewise. + * print-tree.c (print_node): Likewise. + * reg-stack.c (stack_result): Likewise. + * stmt.c (label_rtx): Likewise. + (expand_return): Likewise. + (expand_decl): Likewise. + (expand_decl_cleanup): Likewise. + (expand_anon_union_decl): Likewise. + * toplev.c (check_global_declarations): Likewise. + (rest_of_decl_compilation): Likewise. + * tree.c (simple_cst_equal): Likewise. + * objc/objc-act.c (generate_static_references): Likewise. + + 2001-03-14 Zack Weinberg + + * aclocal.m4 (gcc_AC_C_CHARSET, gcc_AC_C_COMPILE_BIGENDIAN, + gcc_AC_C_FLOAT_FORMAT): New macros. + * configure.in: Add AC_PROG_CPP after CC tests; + gcc_AC_C_CHARSET and gcc_AC_C_FLOAT_FORMAT after the sizeof + tests; and gcc_AC_C_COMPILE_BIGENDIAN after gcc_AC_C_CHAR_BIT. + * configure, config.in: Regenerate. + + * config/a29k/xm-a29k.h, config/arc/xm-arc.h, + config/arm/xm-arm.h, config/c4x/xm-c4x.h, + config/convex/xm-convex.h, config/d30v/xm-d30v.h, + config/i370/xm-linux.h, config/i370/xm-oe.h, + config/ia64/xm-ia64.h, config/m32r/xm-m32r.h, + config/m68k/xm-m68k.h, config/mips/xm-mips.h, + config/pa/xm-linux.h, config/pa/xm-pa.h, + config/rs6000/xm-lynx.h, config/rs6000/xm-mach.h, + config/rs6000/xm-rs6000.h, config/rs6000/xm-sysv4.h, + config/sparc/xm-sparc.h, config/vax/xm-vax.h, + config/we32k/xm-we32k.h: Delete. + + * config/i370/xm-mvs.h, config/m88k/m88k.h, + config/romp/xm-romp.h, config/rs6000/xm-beos.h, + config/vax/xm-vms.h: Don't define any of: + HOST_FLOAT_FORMAT, HOST_EBCDIC, HOST_WORDS_BIG_ENDIAN + + * config/rs6000/aix.h: Define COLLECT_EXPORT_LIST here. + + * config.gcc: Remove references to deleted files. + (i370-*-opened*): Use i370/xm-mvs.h (which now defines only + FATAL_EXIT_CODE, which is the same between oe and mvs). + + 2001-03-14 DJ Delorie + Vladimir Makarov + + * config/i960/i960.c (i960_function_prologue): Compute size of + frame according to number of registers actually saved there. + + 2001-03-14 Richard Henderson + + * expr.c (emit_move_insn_1): Fix else if around #endif. + + Wed Mar 14 22:39:12 CET 2001 Jan Hubicka + Vojtech Pavlik + + * md.texi (machine constraints): Document 'Q', 'R', 'e' and 'Z' + constraints. + + Wed Mar 14 22:26:10 CET 2001 Jan Hubicka + + * i386.c (ix86_cmodel_string, ix86_cmodel): Define. + (override_options): Parse cmodel string. + (x86_64_sign_extended_value, x86_64_zero_extended_value): New. + * i386.h (TARGET_OPTIONS): Add "cmodel". + (EXTRA_CONSTRAINT): Recognize 'e' and 'Z'. + (enum cmodel): New. + (ix86_cmodel_string, ix86_cmodel): Declare. + + Wed Mar 14 22:26:54 CET 2001 Jan Hubicka + + Spot by Matt Kraai: + * i386.h (GENERAL_REG_P): Add missing REG_P. + + 2001-03-14 Laurynas Biveinis + + * configure.in: Use $gcc_cv_as instead of $as. + * configure: Regenerated. + + 2001-03-14 Neil Booth + + * cppfiles.c (stack_include_file): Only increase the include + count if we actually process the file properly, as opposed + to treating it as length zero. Only call read_include_file + if not DO_NOT_REREAD. Handle the -H include file output + here. + (read_include_file): Remove now redundant DO_NOT_REREAD check. + (cpp_included, find_include_file): Simplify pathnames after + remapping them. If remapping, don't use the remapped file + name's buffer as our scratch buffer. + (cpp_pop_file_buffer): Replace the multiple include macro + only if it isn't yet set. + (read_name_map): Simplify remapped names when reading in. + (remap_filename): Move code to code path that uses it. + (_cpp_simplify_pathname): Return the input pointer. + * cpphash.h (_cpp_simplify_pathname): Update prototype. + + 2001-03-14 Mark Mitchell + + * expr.c (expand_expr): Revove bogus conditional. + + Wed Mar 14 19:29:50 CET 2001 Jan Hubicka + + * expr.c (emit_move_insn_1): Guard PUSH_ROUNDING use by ifdef. + + 2001-03-14 Jakub Jelinek + + * reg-stack.c (stack_result): Unconditionally use + FUNCTION_OUTGOING_VALUE resp. FUNCTION_VALUE. + + Wed Mar 14 16:36:25 CET 2001 Jan Hubicka + + * expr.c (emit_move_insn_1): Split push of complex value when + no suitable push instruction exist. + + * i386.md (QImode move/add/shift patterns): Use ANY_QI_REG_P + instead of QI_REG_P. + + Tue Mar 13 22:22:04 2001 Richard Kenner + + * alias.c (handled_component_p, can_address_p): New functions. + (get_alias_set): Use them. + + 2001-03-13 Jim Wilson + + * config/ia64/ia64.c (find_gr_spill): Subtract frame_pointer_needed + from 80 in try_locals code. + (ia64_expand_prologue): Add comment pointing to find_gr_spill change. + + 2001-03-13 Zack Weinberg + + * aclocal.m4 (gcc_AC_COMPILE_CHECK_SIZEOF, gcc_AC_C_CHAR_BIT, + gcc_AC_C_LONG_LONG): New. + * configure.in: Use them. Probe the size of short, int, long, + and long long/__int64 if we have them. Move all the AC_C_* + checks together, except gcc_AC_C_CHAR_BIT which has to go + after AC_CHECK_HEADERS(limits.h). + Take hwint.h out of host_xm_file and build_xm_file. + + * hwint.h: Unconditionally define HOST_BITS_PER_CHAR, + HOST_BITS_PER_SHORT, HOST_BITS_PER_INT, HOST_BITS_PER_LONG, + and HOST_BITS_PER_LONGLONG in terms of SIZEOF_* and CHAR_BIT. + Move the HOST_WIDEST_INT setup logic here from system.h. + Provide HOST_WIDEST_INT even if HOST_BITS_PER_LONGLONG is not + defined. + * system.h: Include hwint.h after limits.h. HOST_WIDEST_INT + is now handled by hwint.h. + + * config/alpha/xm-alpha-interix.h, config/alpha/xm-vms.h, + config/c4x/xm-c4x.h, config/i370/xm-oe.h, + config/ia64/xm-ia64.h: Don't define any of: + HOST_BITS_PER_LONG, HOST_BITS_PER_CHAR, HOST_BITS_PER_SHORT, + HOST_BITS_PER_LONGLONG. + + * config/alpha/xm-alpha.h, config/dsp16xx/xm-dsp16xx.h, + config/h8300/xm-h8300.h, config/mips/iris6.h, + config/mn10200/xm-mn10200.h, config/pa/xm-pa64hpux.h, + config/sparc/xm-sp64.h: Delete. + * config.gcc: Remove references to deleted files. + + * config/arm/xm-arm.h, config/mips/xm-mips.h: Don't define + HOST_FLOAT_FORMAT to IEEE_FLOAT_FORMAT. + * config/i370/xm-linux.h: Clarify floating-point situation in + a comment. + + 2001-03-13 Neil Booth + + * cppfiles.c (NO_INCLUDE_PATH): New macro. + (find_include_file): Decide here which part of the include + chain to start the search. Complain about an empty include + chain in all cases apart from an abolsute file name. + (_cpp_execute_include): Don't choose the search chain here. + Don't call handle_missing_include in the case of an empty + include chain. + (_cpp_compare_file_date): Don't choose the search chain here. + * cpplib.c (do_include_next): Move the in-main-file diagnostic + here from _cpp_execute_include. Behave like #include if + we're in the main file. + + 2001-03-13 Kaveh R. Ghazi + + * system.h (malloc, realloc, calloc, strdup): Only poison these + tokens when IN_GCC is defined. + + Tue Mar 13 14:38:44 CET 2001 Jan Hubicka + + * i386.md (abs?f expander): Support SSE case. + (abd?f_if): Add new "USE"; add splitters. + + 2001-03-13 Kaveh R. Ghazi + + * cpp.texi (poison): Explain the macro expansion exception. + + 2001-03-13 Jakub Jelinek + + * expr.c (store_expr): Add dont_store_target. If temp is already in + target before copying to reg, don't store it into target again. + + 2001-03-12 Neil Booth + + * cppinternals.texi: Update for file handling. + + 2001-03-12 Jeffrey Oldham + + * emit-rtl.c (remove_unnecessary_notes): Reverse Richard Kenner's + 2001-02-24 which broke building the Java library. + * function.c (identify_blocks): Likewise. + (all_blocks): Likewise. + * integrate.c (integrate_decl_tree): Likewise. + * print-tree.c (print_node): Likewise. + * tree.h (BLOCK_NUMBER): Likewise. + (struct tree_block): Likewise. + + 2001-03-12 David Edelsohn + + * rs6000/aix51.h (CPP_SPEC, CPLUSPLUS_CPP_SPEC): Fix typo in + __WCHAR_TYPE__ definition. + (WCHAR_TYPE_SIZE): #undef before #define. + + 2001-03-12 Neil Booth + + * cppfiles.c: Update comments. + (destroy_include_file_node): Rename destroy_node. + (find_or_create_entry): New function. + (open_file, _cpp_fake_include): Use it. + (handle_missing_header): New function, broken out of + _cpp_execute include. Don't segfault if there is no + system or quoted path. + (_cpp_execute_include): Use handle_missing_header. + + 2001-03-12 Jeffrey Oldham + + * jump.c (reversed_comparison_code_parts): Reverse Jan Hubricka's + 2001-02-28 patch because it breaks arm-linux and mips-sgi-irix6.5. + + Mon Mar 12 14:05:32 2001 Richard Kenner + + * flow.c (insn_dead_p): Don't consider two memrefs equivalent + unless anti_dependence says they are. + * alias.c (objects_must_conflict): If neither has a type specified, + they must conflict. + + 2001-03-12 Neil Booth + David Billinghurst + + * config/mips/iris5.h: Change WCHAR_TYPE to int. + + Mon Mar 12 16:32:21 CET 2001 Jan Hubicka + + * i386.md (trunctfdf2_2): Rename missnamed pattern. + (*_one_bit): Remove type on the match_operand in attributes. + + Mon Mar 12 16:27:56 CET 2001 Jan Hubicka + + * i386.c: Commit forgotten hunk in previous patch. + (regclass_map): Add extended registers. + (dbx_register_map): Add missing frame register. + + Mon Mar 12 15:41:08 CET 2001 Jan Hubicka + + * i386.md (all XFmode patterns except swapxf): Disable for 64bit. + + * i386.md (x86_sahf_1): Disable for 64bit. + (popsi*, pophi*): Likewise. + (pushqi, pushhi): Likewise. + (movdi, pushdi): Likewise. + (zero extend DImode splitter): Likewise. + (adddi, minusdi splitter): Likewise. + (umulsidi): Likewise. + (umulsi): New. + (mulsidi): Disable for 64bit + (lshift:DI/ashift:DI): Disable for 64bit. + (loop patterns): Likewise. + (call_pop, call_value_pop expanders and patterns): Likewise. + (prologue_get_pc): Likewise. + (leave): Likewise. + (fcmovDI pattern and splitter): Likewise. + (movdfcc_1_rex64): New. + + Mon Mar 12 15:16:36 CET 2001 Jan Hubicka + + * i386.h (VALID_FP_MODE_P): XFmode is invalid on x86_64. + (MODES_TIEABLE_P): QImodes and DImodes are tiable on x86_64. + (HARD_REGNO_CALLER_SAVE_MODE): Save QImodes as QImodes for x86_64. + (STATIC_CHAIN_REGNUM): Set to r10 for x86_64. + (PIC_OFFSET_TABLE_REGNUM): Set to INVALID_REGNUM for x86_64. + (LIMIT_RELOAD_CLASS): Avoid limiting of QImodes on x86_64. + (SECONDARY_OUTPUT_RELOAD_CLASS): No need to QImodes. + (PUSH_ROUNDING): x86_64 rounds to 64bits. + (CONSTANT_ADDRESS_P): Accept CONST_DOUBLE. + (REGPARM_MAX): Set to 6 for x86_64. + (SSE_REGPARM_MAX): Set to 16 for x86_64. + * i386.c (hard_regno_mode_ok): QImodes can be in all general purpose + registers. + + * (patterns that does use upper halves): Update constraints + 'q' to 'Q' and 'r' to 'R'. + (cmpqi_ext_1): Disable for 64bit. + (cmpqi_ext_3_insn): Likewise. + (movqi_extzv_1): Likewsie. + (addqi_ext_1): Liekwsie + (testqi_ext_1): Liekwsie + (andqi_ext_1): Liekwsie + (xorqi_ext_1): Liekwsie + (cmpqi_ext_1_rex64): New. + (cmpqi_ext_3_insn_rex64): Likewise. + (movqi_extzv_1_rex64): Likewsie. + (addqi_ext_1_rex64): Liekwsie + (testqi_ext_1_rex64): Liekwsie + (andqi_ext_1_rex64): Liekwsie + (xorqi_ext_1_rex64): Liekwsie + + 2001-03-11 Zack Weinberg + + * configure.in: Move check for unsigned enumerated bitfields + to macro in aclocal.m4. Disable it for now. + * configure, config.in: Regenerate. + * system.h: Don't do anything with ONLY_INT_FIELDS. Use the + unsigned-int form of ENUM_BITFIELD() unless being compiled by GCC. + * varasm.c (struct rtx_const): Use ENUM_BITFIELD(). Move enum + kind above its first use. + + * config/xm-interix.h, config/alpha/xm-alpha.h, + config/i370/xm-linux.h, config/i386/xm-beos.h, + config/i386/xm-mingw32.h, config/mips/xm-mips.h, + config/pa/xm-pa.h, config/pa/xm-pa64hpux.h, + config/rs6000/xm-beos.h, config/rs6000/xm-sysv4.h, + Don't define ONLY_INT_FIELDS under any circumstances. + + * config/pa/xm-pa.h: Don't define __BSD_NET2__. + + * config/pa/xm-pahpux.h, config/pa/xm-papro.h, + config/sparc/xm-sysv4.h: Delete - now identical with some + other xm header. + * config.gcc (hppa targets): Replace xm-pahpux.h and + xm-papro.h with implicit xm-pa.h. + (sparc targets): Replace xm-sysv4.h with implicit or explicit + xm-sparc.h. + + 2001-03-12 Aldy Hernandez + + * reload1.c (reload_cse_simplify): Call reload_cse_simplify_set + before reload_cse_noop_set_p. + + 2001-03-11 Zack Weinberg + + * config.gcc: Where xm-host.h used to include another + xm-host.h, list the nested header directly in xm_file. Remove + references to deleted files. Can now use sparc/xm-sp64.h for + sparcv9-*-solaris*. + + * config/xm-linux.h, config/arm/xm-linux.h, + config/i386/xm-dos.h, config/i386/xm-gnu.h, + config/i386/xm-linux.h, config/i386/xm-openbsd.h, + config/i860/xm-fx2800.h, config/m68k/xm-atari.h, + config/m68k/xm-linux.h, config/m68k/xm-sun3.h, + config/sparc/xm-linux.h, config/sparc/xm-sysv4-64.h: + Delete. + + * config/alpha/xm-alpha-interix.h: Don't include alpha/xm-alpha.h. + * config/mips/xm-iris5.h: Don't include mips/xm-mips.h. Don't + bother to wrap #undef in #ifdef. + * config/pa/xm-linux.h, config/rs6000/xm-sysv4.h: + Don't include xm-linux.h. + * config/sparc/xm-sp64.h: Don't include sparc/xm-sparc.h. + + * configure.in: Wrap regexps using [] in changequote block. + Use expr : not echo | grep. Simplify regexps. + * configure: Regenerate. + + 56 xm-files remain, 22 xm-arch. + + 2001-03-11 Kaveh R. Ghazi + + * mips-tfile.c: Cast arg to PTR when specifier is HOST_PTR_PRINTF. + (__proto, PTR_T, CPTR_T): Delete, use PARAMS/PTR instead. + (local_index, local_rindex): Delete, use strchr/strrchr instead. + (copy_object): Fix format specifier vs argument mismatch. + + * mips-tdump.c: Make local functions static. + (rindex): Don't #undef. + (__proto, PTR_T, CPTR_T): Delete, use PARAMS/PTR instead. + (fatal, fancy_abort): Delete. + (read_seek): Avoid signed/unsigned compare. + + Sun Mar 11 17:01:41 2001 Richard Kenner + + * combine.c (try_combine): Fix error in change to try original + register. + (gen_rtx_combine): Do same as gen_rtx for now. + + 2001-03-11 Zack Weinberg + + * configure.in: AC_SUBST xm_defines. + * configure: Regenerate. + * Makefile.in: Set DEFINES=$(xm_defines) when building + tconfig.h. + + 2001-03-11 Neil Booth + + * cppfiles.c (INCLUDE_LEN_FUDGE, ENOMEM): Delete. + (cpp_included, find_include_file): Update. + (_cpp_compare_file_date): Make else unconditional. + + 2001-03-10 kaz Kojima + + * config/sh/sh.h (LEGITIMATE_PIC_OPERAND_P): Defined. + + 2001-03-10 Toshiyasu Morita + + * config/sh/sh.md (umulhisi3_i, mulhisi3_i): Fix mnemonics. + * config/sh/lib1funcs.asm (mulsi3): Convert mulu to mulu.w. + + Sat Mar 10 22:42:05 2001 Alexandre Oliva + + * tree.c (build_common_tree_nodes_2): Don't copy va_list_type_node + if it's a record type. + + Sat Mar 10 17:52:54 2001 Christopher Faylor + + * config/i386/cygwin.h: Make ../w32api a system directory. Reorganize + mingw includes slightly. + + 2001-03-10 Kaveh R. Ghazi + + * system.h (malloc, realloc, calloc, strdup, bzero, bcmp, rindex): + #undef token before poisoning it. + + 2001-03-10 Kaveh R. Ghazi + + * alpha.c (check_float_value): Use memcpy, not bcopy. + + * m32r.c (m32r_sched_reorder): Likewise. + + * vax.c (check_float_value): Likewise. + + 2001-03-10 Neil Booth + + * toplev.c (file_name_nondirectory): Remove. + * toplev.h: Similarly. + * dwarf2out.c (compute_section_prefix): Use lbasename instead + of file_name_nondirectory. + + Sat Mar 10 10:36:45 2001 Richard Kenner + + * mips-tdump.c (read_seek): Call xmalloc, not malloc. + * mips-tfile.c: Don't #undef rindex; not used. + + Sat Mar 10 14:34:59 CET 2001 Jan Hubicka + + * i386.h (DBX_REGISTER_NUMBER): Return proper values for 64bits. + (dbx64_register_map): Declare. + (RETURN_ADDR_RTX): Fix for 64bit. + (DWARF_FRAME_RETURN_COLUMN): Set to 16 for 64bit. + (INCOMING_FRAME_SP_OFFSET): Set to 8. + * i386.c (dbx64_register_map): New global array. + * beos-elf.h, freebsd.h, i386-interix.h, i386elf.h, + linux.h (DBX_REGISTER_REGNUMBER): Use dbx64_register_map + for 64bits. + + 2001-03-10 Neil Booth + + * cppfiles.c (search_from): Use lbasename. + * mkdeps.c (deps_add_default_target): Use lbasename. + + 2001-03-09 Kaveh R. Ghazi + + * fixinc/server.c (load_data, run_shell): Use xmalloc, xrealloc & + xcalloc in lieu of malloc, realloc & calloc. + + * gencheck.c (xmalloc): Use really_call_malloc, not malloc. + + * gengenrtl.c (xmalloc): Likewise. + + * gensupport.c (xcalloc, xrealloc, xmalloc): Use the + really_call_* memory allocation routines. + + * stmt.c (check_for_full_enumeration_handling): Use + really_call_calloc, not calloc. + + * system.h (really_call_malloc, really_call_calloc, + really_call_realloc): Define. + (malloc, realloc, calloc, strdup, bzero, bcmp, rindex): Poison. + + Fri Mar 9 18:39:19 2001 Jeffrey A Law (law@cygnus.com) + + * pa.md (builtin_longjmp): Rework slightly to work for PA64 too. + + 2001-03-09 Nicola Pero + + * configure: Rebuilt. + * configure.in: Only use `lang_requires' for languages athat are + actually enabled. + + 2001-03-09 Joseph S. Myers + + * invoke.texi: Fix typo. + * gcc.1: Regenerate. + + 2001-03-09 Zack Weinberg + + * configure.in: Prune nonexistent files from build_xm_file, + xm_file, and host_xm_file lists. Warn unless they're + $cpu/xm-$cpu.h. + Don't generate *config.h here. + AC_SUBST all variables needed to generate *config.h. + * configure: Regenerate. + * mkconfig.sh: New helper script, from code removed from + configure.in. + * Makefile.in: Zap all MALLOC variables - no longer used + anywhere, and malloc.c doesn't exist. + Substitute in variables needed to generate *config.h. + Stop lying about the dependencies contained in CONFIG_H and + GCONFIG_H. + (HCONFIG_H, TCONFIG_H, TM_P_H): New variables. + (config.h, hconfig.h, tconfig.h, tm_p.h, cs-config.h, + cs-hconfig.h, cs-tconfig.h, cs-tm_p.h): New rules. + (all .o): Add dependencies on $(HCONFIG_H), $(TCONFIG_H), + $(TM_P_H), etc. as appropriate. + + * config.gcc: Zap references to deleted files. + * ggc-none.c: Don't include rtl.h or tm_p.h. + + * config/i386/xm-beos.h, config/i386/xm-dgux.h, + config/i386/xm-djgpp.h, config/i386/xm-dos.h, + config/i386/xm-gnu.h, config/i386/xm-i386-interix.h, + config/i386/xm-linux.h, config/i386/xm-linux.h, + config/i386/xm-next.h, config/i386/xm-openbsd.h, + config/i386/xm-sun.h, config/i386/xm-sysv3.h: + Don't include i386/xm-i386.h. + + * config/elxsi/xm-elxsi.h, config/i386/xm-bsd386.h, + config/i386/xm-i386.h, config/i860/xm-i860.h, + config/i960/xm-i960.h, config/mcore/xm-mcore.h, + config/mn10300/xm-mn10300.h, config/ns32k/xm-ns32k.h, + config/pj/xm-pj.h, config/sh/xm-sh.h, config/v850/xm-v850.h: + Delete (empty except comments, #includes of other deleted + files, and macros used nowhere). + + Fri Mar 9 20:05:27 CET 2001 Jan Hubicka + + * i386.h (MAX_WCHAR_TYPE_SIZE): New constant to keep tradcpp + independent on TARGET_FLAGS. + + Fri Mar 9 19:52:52 CET 2001 Jan Hubicka + + * i386.h (FIRST_PSEUDO_REGISTER): Set to 53. + + (FIXED_REGISTERS, CALL_USED_REGISTERS, REG_ALLOC_ONES): Add + extended ones. + (CONDITIONAL_REGISTER_USAGE): Set proper values according to + TARGET_64BIT. + (FIRST_REX_INT_REG, LAST_REX_INT_REG, FIRST_REX_SSE_REG, + LAST_REX_SSE_REG): define. + (enum reg_class): Add 'LEGACY_REGS' + (REG_CLASS_CONTENTS): Likewise; add extended registers. + (SSE_REGNO_P): Recognize extended registers. + (ANY_QI_REG_P, REX_INT_REGNO_P, REX_INT_REG_P): New. + (REG_CLASS_FROM_LETTER): Add 'R' and 'Q'. + (REGNO_OK_FOR_INDEX_P, REGNO_OK_FOR_BASE_P, + REG_OK_FOR_BASE_NONSTRICT_P): Recognize REX registers. + (REG_OK_FOR_STRREG_NONSTRICT_P, REG_OK_FOR_STRREG_STRICT_P, + REG_OK_FOR_STRREG_P): Remove. + (HI_REGISTER_NAMES): Add extended registers. + (ADDITIONAL_REGISTER_NAMES): Likewise. + (QI_REGISTER_NAMES): Add 8bit extended registers. + (DEBUG_REG): Support extended registers. + * i386.c (regclass_map): Add extended registers. + (dbx_register-map): Likewise. + (svr4_dbx_register_map): Likewise. + (print_reg): Support extended registers. + (print_operand): Support 64bit operands. + + Fri Mar 9 19:37:46 CET 2001 Jan Hubicka + + * i386.h (LIBGCC2_LONG_DOUBLE_TYPE_SIZE): Set to 128bit for x86_64 + (BOOL_TYPE_SIZE, SHORT_TYPE_SIZE, INT_TYPE_SIZE, + FLOAT_TYPE_SIZE, LONG_TYPE_SIZE, MAX_LONG_TYPE_SIZE, + DOUBLE_TYPE_SIZE, LONG_LONG_TYPE_SIZE): New constants. + (BITS_PER_WORD, UNITS_PER_WORD, POINTER_SIZE, PARM_BOUNDARY, + STACK_BOUNDARY): Set properly for 64bits. + (MAX_BITS_PER_WORD, MIN_UNITS_PER_WORD): New constants. + (EMPTY_FIELD_BOUNDARY): Define using BITS_PER_WORD. + (BIGGEST_FIELD_ALIGNMENT): Set to 128 for 64bits. + (MOVE_MAX): Set to 16. + (MOVE_MAX_PIECES): 8 for 64bit. + (Pmode): Set to SImode. + + Fri Mar 9 09:00:36 2001 Mike Stump + + * cselib.c (hash_rtx): Ensure that hash isn't zero upon return. + + Fri Mar 9 17:38:08 CET 2001 Jan Hubicka + + * i386.h (mask_64bit): New constant. + (target_64bit): New macro. + (target_options): Add '64'/'32' + (target_default): Define. + * cygwin.h freebsd-aout.h i386-interix.h i386.h i386elf.h isc.h + isccoff.h netbsd.h next.h openbsd.h p sco.h sco5.h scodbx.h sequent.h + unix.h win32.h (TARGET_DEFAULT): Rename to TARGET_SUBTARGET_DEFAULT. + + Thu Mar 8 23:36:56 2001 Jeffrey A Law (law@cygnus.com) + + * config/pa/som.h (MAKE_DECL_ONE_ONLY, ASM_WEAKEN_LABEL): Disable. + + Thu Mar 8 23:29:37 2001 John Wehle (john@feith.com) + + * rtlanal.c (rtx_varies_p): Check operand 0 of a + LO_SUM unless for_alias is set. + + 2001-03-08 Stan Shebs + + * objc/objc-act.c: Fix old typos in comments, add comments for + various functions. + (hash_init): Fix file name in error message. + (hash_enter): Ditto. + (hash_add_attr): Ditto. + (continue_class): Ditto. + + 2001-03-08 Bruce Korb + + gcc.c(main): ensure SIGCHLD handling is set to SIG_DFL so that + wait4() can receive the signal. + + Thu Mar 8 21:09:10 2001 Rainer Orth + + * fixinc/inclhack.def (AAB_dgux_int_varargs): Don't use HTML + entities. + * fixinc/fixincl.x: Regenerate. + + Thu Mar 8 21:09:10 2001 Rainer Orth + + * fixinc/inclhack.def (AAA_standards): Undo breakage + on Tru64 UNIX. + * fixinc/fixincl.x: Regenerate. + + 2001-03-08 Richard Henderson + + * configure.in (HAVE_AS_LEB128): New assembler check. + * configure, config.in: Rebuilt. + + Thu Mar 8 19:54:04 CET 2001 Jan Hubicka + + * reg-stack.c (move_for_stack_reg): Avoid non-poping fst for + TFmode too. + + 2001-03-08 Kaveh R. Ghazi + + * config/ns32k/xm-pc532-min.h, config/we32k/xm-we32k.h: Delete + references to the MAXPATHLEN macro. + + * config/alpha/xm-alpha.h, config/arm/xm-arm.h, + config/i386/xm-cygwin.h, config/xm-linux.h: Delete references to + the POSIX macro. + + * config/i386/xm-gnu.h, config/xm-gnu.h, + config/alpha/xm-openbsd.h, config/i386/xm-openbsd.h, + config/m68k/xm-openbsd.h, config/mips/xm-openbsd.h, + config/sparc/xm-openbsd.h, config/xm-openbsd.h: Delete empty + and/or unused files. + + * config.gcc: Define POSIX in xm_defines as appropriate in lieu of + doing so in various xm-*.h files. + + Thu Mar 8 06:32:50 2001 Richard Kenner + + * config/i386/i386.md (clrstrsi): Call ix86_set_move_mem_attrs. + + 2001-03-08 Alexandre Oliva + + * configure.in (enable_shared): Support per-package shared-library + enabling. + * configure: Rebuilt. + + 2001-03-07 David Edelsohn + + * rs6000.md (cr logic): Add original POWER mnemonic alternative + for crnot. Set operands[5] in splitter. + + 2001-03-07 Kaveh R. Ghazi + + * config/i370/xm-mvs.h, config/i370/xm-oe.h, + config/i386/xm-beos.h, config/i386/xm-mingw32.h, + config/m88k/xm-m88k.h, config/mips/xm-iris6.h, + config/mips/xm-openbsd.h, config/pa/xm-pa64hpux.h, + config/pa/xm-pahpux.h, config/rs6000/xm-beos.h, + config/rs6000/xm-darwin.h, config/rs6000/xm-mach.h, + config/rs6000/xm-rs6000.h, config/xm-interix.h: Delete references + to the USG macro. + + * config/vax/xm-vaxv.h, config/a29k/xm-unix.h, + config/i370/xm-i370.h, config/i386/xm-dgux.h, + config/i386/xm-sun.h, config/i386/xm-sysv3.h, + config/m68k/xm-tower.h, config/m68k/xm-aux.h, + config/m68k/xm-hp320.h, config/m68k/xm-amix.h, + config/m68k/xm-altos3068.h, config/m68k/xm-mot3300.h, + config/m68k/xm-m68kv.h, config/m88k/xm-openbsd.h, + config/mips/xm-nws3250v4.h, config/mips/xm-sysv.h, + config/mips/xm-iris3.h, config/mips/xm-iris4.h, config/xm-svr3.h, + config/xm-svr4.h, config/sparc/xm-pbd.h, config/clipper/xm-clix.h: + Delete unused and/or empty files. + + * config.gcc: Define USG in xm_defines as appropriate. Define + POSIX in lieu of xm-svr4.h. Delete all references to the SVR3 + macro. Remove deleted xm-* files from $xm_files variable. + + 2001-03-07 Tom Tromey + + * configure: Rebuilt. + * configure.in: Allow config-lang.in to set `lang_requires' to list + of other required languages. + + 2001-03-07 Andrew MacLeod + + * config/a29k/a29k.c (print_operand): Free a29k_last_prologue_insn + after its emitted. + (output_prologue): Use xmalloc not oballoc. + (output_epilog): Free a29k_first_epilogue_insn when finished. + * confif/a29k/a29k.h (PREDICATE_CODES): Remove shift_constant_operand. + + 2001-03-07 Brad Lucier + + * builtins.c (expand_builtin_mathfn): Check + flag_unsafe_math_optimizations, not flag_fast_math. + (expand_builtin): Likewise + * combine.c (combine_simplify_rtx): Likewise. + (simplify_if_then_else): Likewise. + * cse.c (fold_rtx): Likewise. + * flags.h: Remove flag_fast_math. Add + flag_unsafe_math_optimizations and flag_trapping_math. + * fold-const.c (negate_expr): Check + flag_unsafe_math_optimizations, not flag_fast_math. + (invert_truthvalue): Likewise. + (fold): Likewise. Before associating operands, check that + code == MULT_EXPR, not code != MULT_EXPR. + * ifcvt.c (noce_try_minmax): Check + flag_unsafe_math_optimizations, not flag_fast_math. + (noce_operand_ok): Check flag_trapping_math, not flag_fast_math. + * invoke.texi: Document -funsafe-math-optimizations and + -fno-trapping-math. Change documentation for -ffast-math. + * jump.c (reversed_comparison_code_parts): Likewise. + (rtx_equal_for_thread_p): Likewise. + * optabs.c (emit_conditional_move): Likewise. + * simplify-rtx.c (simplify_binary_operation): Likewise. + (simplify_relational_operation): Likewise. + (simplify_ternary_operation): Likewise. + * toplev.c: Remove flag_fast_math. Add flag_trapping_math and + flag_unsafe_math_optimizations. Remove fast-math entry from f_options. + Add trapping-math and unsafe-math-optimizations entries to f_options. + (set_fast_math_flags): New, sets flags for -ffast-math. + (set_no_fast_math_flags): New, sets flags for -fno-fast-math. + (decode_f_option): Add code to handle -ffast-math and -fno-fast-math. + * toplev.h: Declare set_fast_math_flags and set_no_fast_math_flags. + + * config/alpha/alpha.c (alpha_emit_conditional_branch): Likewise. + (alpha_emit_conditional_move): Initialize local_fast_math to + flag_unsafe_math_optimizations, not flat_fast_math. + * config/c4x/c4x.c (c4x_override_options): Call set_fast_math_flags + instead of setting flag_fast_math to 1. + * config/convex/convex.md: Check flag_unsafe_math_optimizations, + not flag_fast_math. + * config/i386/i386.c (override_options): Likewise + * config/i386/i386.md: Likewise. + * config/m68k/m68k.md: Likewise. + * config/mips/mips.md: Likewise. + * config/rs6000/rs6000.c (validate_condition_mode): Likewise. + (rs6000_generate_compare): Likewise. + + 2001-03-07 Laurynas Biveinis + + * Makefile.in: Set RANLIB to @RANLIB@. + Remove RANLIB_TEST. + + 2001-03-07 Laurynas Biveinis + + * fixinc/inclhack.def (djgpp_wchar_h): New test. + * fixinc/fixincl.x: Regenerated. + + 2001-03-07 Richard Henderson + + * config/alpha/alpha.md (call_osf_1_noreturn): New pattern. + + 2001-03-07 Richard Henderson + + * emit-rtl.c (remove_unnecessary_notes): Verify proper nesting + of block notes and exception handling notes. + + * lists.c (init_EXPR_INSN_LIST_cache): Don't check initialized. + * toplev.c (rest_of_compilation): Call init_EXPR_INSN_LIST_cache ... + (compile_file): ... here. + + 2001-03-06 Kaveh R. Ghazi + + * fixinc/Makefile.in (FIXINC_DEFS): Add -DHAVE_CONFIG_H. + + * fixinc/gnu-regex.c: Don't include auto-host.h since we get + config.h now. Include libiberty.h to handle alloca. + + 2001-03-06 Zack Weinberg + + * c-parse.in (yylexname): New function, split out of _yylex. + (objc_rid_sans_at): New table. + (init_reswords): Initialize it. + (_yylex): Give labels clearer names. Handle CPP_ATSIGN by + retrieving the next token and checking it for significance as + an ObjC keyword or string constant. + + * cpplex.c (_cpp_lex_token): Just return CPP_ATSIGN for '@'. + * cpplib.h (TTYPE_TABLE): Add CPP_ATSIGN, drop CPP_OSTRING. + + * c-lex.c, c-parse.in, cppmacro.c, cpplex.c: Remove references + to CPP_OSTRING. + + 2001-03-06 Stephen L Moshier + + * config/m68k/m68k.c (const_uint32_operand): Accept any + const_int on a 32-bit host. + + 2001-03-06 Nicola Pero + + * objc/objc-act.c (init_objc): Set save_lang_status, + restore_lang_status, and mark_lang_status. + + 2001-03-06 Krister Walfridsson + + * dwarf2asm.c (dw2_asm_output_delta): Fix smallest_mode_for_size call. + + 2001-03-06 Neil Booth + + * cppinternals.texi: Update. + + 2001-03-06 Kaveh R. Ghazi + + * config/a29k/xm-a29k.h, config/a29k/xm-unix.h, + config/alpha/xm-alpha.h, config/arc/xm-arc.h, config/arm/xm-arm.h, + config/c4x/xm-c4x.h, config/clipper/xm-clix.h, + config/convex/xm-convex.h, config/d30v/xm-d30v.h, + config/dsp16xx/xm-dsp16xx.h, config/elxsi/xm-elxsi.h, + config/h8300/xm-h8300.h, config/i370/xm-i370.h, + config/i370/xm-linux.h, config/i370/xm-mvs.h, config/i370/xm-oe.h, + config/i386/xm-i386.h, config/i860/xm-i860.h, + config/i960/xm-i960.h, config/ia64/xm-ia64.h, + config/m32r/xm-m32r.h, config/m68k/xm-m68k.h, + config/m88k/xm-m88k.h, config/mcore/xm-mcore.h, + config/mips/xm-mips.h, config/mn10200/xm-mn10200.h, + config/mn10300/xm-mn10300.h, config/ns32k/xm-ns32k.h, + config/pa/xm-linux.h, config/pa/xm-pa.h, config/pa/xm-pa64hpux.h, + config/pa/xm-pahpux.h, config/pa/xm-papro.h, config/pj/xm-pj.h, + config/romp/xm-romp.h, config/rs6000/xm-beos.h, + config/rs6000/xm-lynx.h, config/rs6000/xm-rs6000.h, + config/rs6000/xm-sysv4.h, config/sh/xm-sh.h, + config/sparc/xm-sparc.h, config/sparc/xm-sysv4.h, + config/v850/xm-v850.h, config/vax/xm-vax.h, config/vax/xm-vms.h, + config/we32k/xm-we32k.h: Delete HOST_BITS_PER_* definitions which + match the defaults provided in hwint.h. + + * config/i386/xm-lynx.h, config/m68k/xm-lynx.h, + config/sparc/xm-lynx.h, config/xm-std32.h: Delete files. + + * config.gcc (xm_file): Don't set to files which are deleted. + + * hwint.h: Provide default values for HOST_BITS_PER_*. No longer + guard this file against these macros being undefined. + + 2001-03-06 Zack Weinberg + + * objc/objc-act.c (objc_add_static_instance): Set DECL_INITIAL + and DECL_DEFER_OUTPUT on the decl we create, before calling + rest_of_decl_compilation. + + 2001-03-06 Zack Weinberg + + * aclocal.m4 (AM_GNU_GETTEXT): Don't AC_REQUIRE + AC_FUNC_ALLOCA. + * configure, config.in: Regenerate. + * config.gcc: Remove references to deleted files. + + * genattr.c, genattrtab.c, genextract.c, genoutput.c, + genrecog.c, rtl.c: Do not use alloca anywhere. + + * Makefile.in, build-make, system.h, config/x-interix, + config/x-svr4, config/xm-interix.h, config/xm-openbsd.h, + config/alpha/xm-alpha.h, config/alpha/xm-vms.h, + config/arc/xm-arc.h, config/arm/xm-arm.h, + config/d30v/xm-d30v.h, config/dsp16xx/xm-dsp16xx.h, + config/h8300/xm-h8300.h, config/i370/x-oe, + config/i370/xm-linux.h, config/i386/x-aix, config/i386/x-beos, + config/i386/x-ncr3000, config/i386/x-sco5, + config/i386/xm-dgux.h, config/i860/x-sysv4, + config/i960/xm-i960.h, config/m32r/xm-m32r.h, + config/m68k/x-crds, config/m68k/x-dpx2, config/m68k/x-hp320, + config/m68k/x-hp320g, config/m69k/x-mot3300, + config/m68k/x-mot3300-gas, config/m68k/xm-amix.h, + config/m68k/xm-hp320.h, config/m68k/xm-m68kv.h, + config/m68k/xm-mot3300.h, config/m88k/x-dolph, + config/m88k/x-sysv4, config/m88k/x-tekXD88, + config/m88k/xm-m88k.h, config/mcore/xm-mcore.h, + config/mips/x-iris, config/mips/x-iris3, + config/mips/x-sni-svr4, config/mips/x-sysv, + config/mips/xm-iris6.h, config/mips/xm-mips.h, + config/mips/xm-nws3250v4.h, config/pa/x-hpux, + config/pa/x-pa-mpeix, config/pa/xm-pa.h, + config/pa/xm-pa64hpux.h, config/pa/xm-pahpux.h, + config/pa/xm-papro.h, config/romp/xm-romp.h, + config/rs6000/x-aix31, config/rs6000/x-aix41, + config/rs6000/x-beos, config/rs6000/x-lynx, + config/rs6000/x-mach, config/rs6000/x-rs6000, + config/rs6000/x-sysv4, config/rs6000/xm-rs6000.h, + config/rs6000/xm-sysv4.h, config/sh/xm-sh.h, + config/sparc/x-sysv4, config/sparc/xm-linux.h, + config/sparc/xm-pbd.h, config/sparc/xm-sparc.h, + config/vax/xm-vms.h: Eradicate all references to alloca and + related stuff. + + * config/xm-alloca.h, config/clipper/x-clix, + config/i386/xm-sysv4.h, config/i860/x-fx2800, + config/i860/x-sysv3, config/m88k/x-sysv3, + config/sparc/xm-sol2.h, config/we32k/x-we32k: Delete + (contained only alloca related hacks). + + * config/i386/xm-beos.h, config/rs6000/xm-beos.h: Just define + USE_C_ALLOCA. + + 2001-03-05 Brad Lucier + + * invoke.texi: Document __FAST_MATH__. + + 2001-03-05 Kaveh R. Ghazi + + * crtstuff.c: Restore include of auto-host.h. + + 2001-03-05 Fergus Henderson + + Put main() in a separate file, so that the language + front-end can use a different main(). + + * main.c: New. + * toplev.c: (main): Rename as toplev_main. + * toplev.h: Declare toplev_main. + * Makefile.in (OBJS): add toplev.o. + (BACKEND): remove toplev.o, add main.o. + + 2001-03-04 Neil Booth + + * cppfiles.c (search_from): Special case the empty string. + + 2001-03-04 Neil Booth + + * cppfiles.c (_cpp_execute_include): Don't make a null-terminated + copy of the filename. Don't use CPP_PREV_BUFFER. Don't call + strlen or strcpy; we already know the length. + (_cpp_compare_file_date): Similarly. + * cpphash.h (struct cpp_reader): Delete done_initialising. + (CPP_PREV_BUFFER): Delete. + * cppinit.c (cpp_start_read): Don't set done_initialising. + * cpplex.c (parse_string): Guarantee null-termination. + (_cpp_equiv_toklists): Remove. + * cpplib.c (glue_header_name): Null-terminate. + (do_line): Don't leak memory. + * cpplib.h (BT_WEAK): Delete. + * cppmain.c (cb_ident): Strings are now null-terminated. + + 2001-03-04 Laurynas Biveinis + + * gcc.c (convert_filename): Append executable suffix + if NO_AUTO_EXE_SUFFIX is not defined. + * gcc.texi: Document NO_AUTO_EXE_SUFFIX. + * config/i386/djgpp.h: Define NO_AUTO_EXE_SUFFIX. + + 2001-03-03 David O'Brien + + from 2000-09-06 Zack Weinberg + * c-parse.gperf, c-gperf.h: Delete. + (c-gperf.h was accidently re-added to the CVS repo in the rev + 1.16 commit by tromey) + + 2001-03-03 Neil Booth + + * cpplex.c (_cpp_lex_token): Don't warn about directives in + macro arguments when looking for the '('. + * cppmacro.c (funlike_invocation_p): Set parsing_args to + 2 when really parsing arguments; 1 when looking for '('. + Always restore the lexer position. + + 2001-03-03 Neil Booth + + * longlong.h (umul_ppmm): Don't use a multiline string. + + 2001-03-03 John David Anglin + + * fixinc/fixlib.h (t_bool): Add identifier `t_bool' in typedef. + * fixinc/server.c (read_pipe_timeout): Use enum t_bool instead of + t_bool in declaration because pcc can't combine volatile with typedef + types. + + Sat Mar 3 19:47:13 CET 2001 Jan Hubicka + + * i386.c (ix86_expand_fp_compare): Delay creating of scratch register + until when it is really needed. + (ix86_expand_compare): Update call of ix86_expand_fp_compare. + * i386.h (PREDICATE_CODES): Add all codes for sse_comparison_operator + * i386.md (float?i?f splitter): Don't force source operand to memory + for SSE. + (sse_movdfcc): Fix constraint. + (sse_movdfcc splitter): Handle properly the second alternative. + + 2001-03-03 Neil Booth + + * cpplex.c (parse_string): Unconditionally pedwarn. + + 2001-03-03 Neil Booth + + * cpp.texi: Update. + * cppexp.c (parse_number): Update. + * cpplex.c (parse_string): Pedwarn if multiline string does not + result from a system header's macro. + * cpplib.h (sys_objmacro_p): Rename sys_macro_p. + * cppmacro.c (sys_objmacro_p): Rename sys_macro_p. Return true + for function-like macros too. + * c-lex.c (lex_number): Update. + + 2001-03-03 Richard Henderson + + * dwarf2out.c (output_call_frame_info): Fix augmentation length. + + Sat Mar 3 04:17:17 2001 J"orn Rennecke + + * combine.c (try_combine): If split with mode-changed scratch + register didn't work, try the original mode. + + Sat Mar 3 03:46:47 2001 J"orn Rennecke + + * tm.texi: Change STRUCT_FORCE_BLK to MEMBER_TYPE_FORCES_BLK. + * config/c4x/c4x.h: Likewise. + * stor-layout.c (compute_record_mode): Likewise. + (layout_type, case ARRAY_TYPE): Use MEMBER_TYPE_FORCES_BLK. + + 2001-03-02 Zack Weinberg + + * configure.in: Kill tm.h. Include the files in the $tm_file + list in all three of config.h, hconfig.h, tconfig.h, after the + relevant set of xm_files. Put TARGET_CPU_DEFAULT in all + three, include insn-codes.h in all three (#ifndef GENERATOR_FILE). + * configure: Regenerate. + * Makefile.in (clean): Don't delete tm.h. + + * system.h: If SUCCESS_EXIT_CODE and FATAL_EXIT_CODE are not + defined, set them from EXIT_SUCCESS and EXIT_FAILURE. If + those are not defined, set SEC and FEC to 0 and 1. + * gcc.texi: Update to match. + + * crtstuff.c: Include tconfig.h, not auto-host.h and tm.h. + * config/fp-bit.c, config/m68k/aux-crt2.asm, + config/m68k/aux-crtn.asm, config/m68k/aux-mcount.c: + Include tconfig.h, not tm.h. + + * config/xm-lynx.h, config/xm-std32.h, + config/a29k/xm-a29k.h, config/a29k/xm-unix.h, + config/alpha/xm-alpha.h, config/arc/xm-arc.h, + config/avr/xm-avr.h, config/c4x/xm-c4x.h, + config/clipper/xm-clix.h, config/convex/xm-convex.h, + config/d30v/xm-d30v.h, config/dsp16xx/xm-dsp16xx.h, + config/elxsi/xm-elxsi.h, config/fr30/xm-fr30.h, + config/h8300/xm-h8300.h, config/i370/xm-linux.h, + config/i386/xm-i386.h, config/i860/xm-i860.h, + config/i960/xm-i960.h, config/ia64/xm-ia64.h, + config/m32r/xm-m32r.h, config/m68hc11/xm-m68hc11.h, + config/m88k/xm-m88k.h, config/mcore/xm-mcore.h, + config/mips/xm-mips.h, config/mn10200/xm-mn10200.h, + config/mn10300/xm-mn10300.h, config/ns32k/xm-ns32k.h, + config/pa/xm-linux.h, config/pa/xm-pa.h, + config/pa/xm-pa64hpux.h, config/pa/xm-pahpux.h, + config/pa/xm-papro.h, config/pdp11/xm-pdp11.h, + config/pj/xm-pj.h, config/romp/xm-romp.h, + config/rs6000/xm-beos.h, config/rs6000/xm-rs6000.h, + config/rs6000/xm-sysv4.h, config/sh/xm-sh.h, + config/sparc/xm-sparc.h, config/sparc/xm-sysv4.h, + config/v850/xm-v850.h, config/vax/xm-vax.h, + config/we32k/xm-we32k.h: + Don't include tm.h. + Don't define SUCCESS_EXIT_CODE or FATAL_EXIT_CODE. + + * config/i370/xm-i370.h, config/i370/xm-mvs.h, + config/i370/xm-oe.h: Don't include tm.h. Don't define + SUCCESS_EXIT_CODE. + * config/vax/xm-vms.h: Don't include tm.h. + + * config/xm-lynx.h, config/avr/xm-avr.h, + config/fr30/xm-fr30.h, config/pdp11/xm-pdp11.h, + Delete; made empty by above changes. + * config/i386/xm-lynx.h, config/m68k/xm-lynx.h, + config/rs6000/xm-lynx.h, config/sparc/xm-lynx.h: + Don't include config/xm-lynx.h or tm.h. + + * config/xm-gnu.h: Don't include fcntl.h. + * config/sparc/xm-lynx.h: Don't include sys/types.h and + sys/wait.h. + * config/clipper/xm-clix.h, config/vax/xm-vax.h: Don't define isinf. + + 2001-03-02 Richard Henderson + + * tm.texi (File Framework): Document UNALIGNED_SHORT_ASM_OP, + UNALIGNED_INT_ASM_OP, and UNALIGNED_DOUBLE_INT_ASM_OP. + + 2001-03-02 Richard Henderson + + * Makefile.in (OBJS): Add dwarf2asm.o. + * dwarf2asm.c, dwarf2asm.h: New files. + * dwarf2out.c (*): Use them. + (size_of_uleb128, size_of_sleb128): Remove. + (output_uleb128, output_sleb128): Remove. + (UNALIGNED_SHORT_ASM_OP, UNALIGNED_INT_ASM_OP): Remove. + (UNALIGNED_DOUBLE_INT_ASM_OP, ASM_BYTE_OP): Remove. + (UNALIGNED_OFFSET_ASM_OP, UNALIGNED_WORD_ASM_OP): Remove. + (FDE_LABEL, LINE_NUMBER_BEGIN_LABEL, LINE_NUMBER_END_LABEL): New. + (ASM_OUTPUT_DWARF_DATA1, ASM_OUTPUT_DWARF_DELTA1): Remove. + (ASM_OUTPUT_DWARF_DATA2, ASM_OUTPUT_DWARF_DELTA2): Remove. + (ASM_OUTPUT_DWARF_DATA4, ASM_OUTPUT_DWARF_DELTA4): Remove. + (ASM_OUTPUT_DWARF_DATA, ASM_OUTPUT_DWARF_DELTA): Remove. + (ASM_OUTPUT_DWARF_ADDR, ASM_OUTPUT_DWARF_ADDR_DATA): Remove. + (ASM_OUTPUT_DWARF_ADDR_DELTA, ASM_OUTPUT_DWARF_ADDR_CONST): Remove. + (ASM_OUTPUT_DWARF_OFFSET4, ASM_OUTPUT_DWARF_OFFSET): Remove. + (ASM_OUTPUT_DWARF_CONST_DOUBLE): Remove. + (ASM_OUTPUT_DWARF_NSTRING, ASM_OUTPUT_DWARF_STRING): Remove. + (dwarf2out_frame_debug): Remove unused variables. + (output_loc_operands): Don't abort on 8 byte constants if + host integers are wide enough. + (output_symbolic_ref): Remove. + (size_of_die): Don't assume 4 byte host integers. + (output_line_info): Use ASM_GENERATE_INTERNAL_LABEL for begin + and end labels. + (add_const_value_attribute) [CONST_INT]: Verify we're not doing + something stupid with HOST_WIDE_INT to long truncation. + [CONST_DOUBLE]: Likewise. + + * config/arm/conix-elf.h (UNALIGNED_WORD_ASM_OP): Remove. + (ASM_OUTPUT_DWARF2_ADDR_CONST, ASM_OUTPUT_DWARF_ADDR_CONST): Remove. + * config/arm/unknown-elf.h: Likewise. + * config/rs6000/aix.h (UNALIGNED_SHORT_ASM_OP): New. + (UNALIGNED_INT_ASM_OP, UNALIGNED_DOUBLE_INT_ASM_OP): New. + (ASM_OUTPUT_DWARF_ADDR_VAR, ASM_OUTPUT_DWARF_DELTA_VAR): Remove. + (ASM_OUTPUT_DWARF_DELTA2, ASM_OUTPUT_DWARF_DELTA4): Remove. + (ASM_OUTPUT_DWARF_DELTA, ASM_OUTPUT_DWARF_ADDR_DELTA): Remove. + (ASM_OUTPUT_DWARF_ADDR, ASM_OUTPUT_DWARF_DATA4): Remove. + (ASM_OUTPUT_DWARF_DATA2, ASM_OUTPUT_DWARF_OFFSET4): Remove. + (ASM_OUTPUT_DWARF_OFFSET): Remove. + * config/rs6000/sysv4.h (ASM_OUTPUT_DWARF_ADDR): Remove. + * config/sparc/sp64-elf.h (UNALIGNED_DOUBLE_INT_ASM_OP): New. + (UNALIGNED_LONGLONG_ASM_OP, ASM_OUTPUT_DWARF_ADDR): Remove. + (ASM_OUTPUT_DWARF_ADDR_CONST, ASM_OUTPUT_DWARF_REF): Remove. + + 2001-03-02 John David Anglin + + * cselib.c (hash_rtx): Cast enums to unsigned int. + + 2001-03-02 John David Anglin + + * print-rtl.c (print_rtx): Cast enums to int for comparison. + * c-decl.c (grokdeclarator): Cast enums to int for comparison and + shifts. + * c-format.c (C_STD_VER): Cast to int for comparisons. + (check_function_format): Cast various enums to int for &. + (maybe_read_dollar_number): Likewise. + (check_format_info): Likewise. + (check_format_info_main): Likewise. + * expr.c (emit_move_insn_1): Cast enums to unsigned int for comparison. + (safe_from_p): Likewise. + * varasm.c (const_hash): Cast enum to int for %. + * emit-rtl.c (init_emit_once): Use int loop variable to work around + pcc enum problems with < and ++ operators. + * regclass.c (init_reg_sets_1): Cast enums for comparison. + (choose_hard_reg_mode): Use unsigned int to iterate over CCmodes. + (regclass_init): Change enum class to int to iterate over reg_classes. + * genrecog.c (merge_trees): Cast enums for comparison. + * rtl.h (GET_CODE): Cast to enum rtx_code. + (PUT_CODE): Cast to ENUM_BITFIELD(rtx_code). + (GET_MODE): Cast to enum machine_mode. + (PUT_MODE): Cast to ENUM_BITFIELD(machine_mode). + (GET_NOTE_INSN_NAME): Cast enum to int. + * tree.h (TREE_CODE): Cast to enum tree_code. + (TREE_SET_CODE): Cast VALUE to ENUM_BITFIELD(tree_code). + * timevar.c (timevar_print): Change loop variable id from enum to + unsigned int. + * fixinc/fixincl.c (VLEVEL): Cast enums in comparison to unsigned int. + * config/i386/i386.md: Use PUT_MODE for mode assignment. + * toplev.c (compile_file): Cast enum DFI to int. + (decode_d_option): Likewise. + + Fri Mar 2 12:18:13 2001 Christopher Faylor + + * cppinit.c (append_include_chain): Mark "after" include file name list + as a system directory. + * cpp.texi: Document new behavior. + + Fri Mar 2 11:59:43 CET 2001 Jan Hubicka + + * ifcvt.c (noce_operand_ok): Handle properly unarry operations. + + 2001-03-02 Neil Booth + + * cppfiles.c (struct include_file): Update. + (stack_include_file): Use search_from. + (cpp_included, find_include_file): Update. + (cpp_execute_include): Update. ptr->name may not be + null terminated. Use the new search_from member variable + of cpp_buffer. + (_cpp_compare_file_date): Similarly. + (search_from): New function, similar to actual_directory. + (actual_directory): Delete. + (remap_filename): Update. loc->name may not be null terminated. + (struct file_name_list): Rename search_path. Update. + * cpphash.h (struct cpp_buffer): Delete actual_dir. New members + search_from and dir. + (struct cpp_reader): Remove actual_dirs. + * cppinit.c (struct cpp_pending): Update for renamed objects. + (append_include_chain, remove_dup_dir, remove_dup_dirs, + merge_include_chains, cpp_destroy, cpp_start_read): Similarly. + * cpplib.h (struct cpp_options): Similarly. + + 2001-03-01 Zack Weinberg + + * config/xm-lynx.h, config/xm-std32.h, config/a29k/xm-a29k.h, + config/a29k/xm-unix.h, config/alpha/xm-alpha.h, + config/arc/xm-arc.h, config/arm/xm-arm.h, config/c4x/xm-c4x.h, + config/clipper/xm-clix.h, config/convex/xm-convex.h, + config/d30v/xm-d30v.h, config/dsp16xx/xm-dsp16xx.h, + config/elxsi/xm-elxsi.h, config/fr30/xm-fr30.h, + config/h8300/xm-h8300.h, config/i370/xm-i370.h, + config/i370/xm-linux.h, config/i370/xm-mvs.h, + config/i370/xm-oe.h, config/i386/xm-aix.h, + config/i386/xm-i386.h, config/i386/xm-osf.h, + config/i860/xm-i860.h, config/i960/xm-i960.h, + config/ia64/xm-ia64.h, config/m32r/xm-m32r.h, + config/m68k/xm-m68k.h, config/m88k/xm-m88k.h, + config/mcore/xm-mcore.h, config/mips/xm-mips.h, + config/mn10200/xm-mn10200.h, config/mn10300/xm-mn10300.h, + config/ns32k/xm-ns32k.h, config/pa/xm-linux.h, + config/pa/xm-pa.h, config/pa/xm-pa64hpux.h, + config/pa/xm-pahpux.h, config/pa/xm-papro.h, + config/pj/xm-pj.h, config/romp/xm-romp.h, + config/rs6000/xm-beos.h, config/rs6000/xm-rs6000.h, + config/rs6000/xm-sysv4.h, config/sh/xm-sh.h, + config/sparc/xm-sparc.h, config/sparc/xm-sysv4.h, + config/v850/xm-v850.h, config/vax/xm-vax.h, + config/vax/xm-vms.h, config/we32k/xm-we32k.h: + Do not define TRUE or FALSE. + + * config/i386/xm-aix.h, config/i386/xm-osf.h: Delete; made + empty by above change. + * config.gcc: Remove references to these files. + + * configure.in: Detect stdbool.h. + * configure, config.in: Regenerate. + * system.h: Include stddef.h here if available. + Set HAVE__BOOL based on GCC_VERSION and __STDC_VERSION__. + Then set up a sensible boolean type at the very end. + + * combine.c, cse.c, expr.c, fold-const.c, gensupport.c, + config/mcore/mcore.c: Rename variables named 'true' and/or 'false'. + + * hash.h: Delete 'boolean' typedef and related #undefs. + + * function.c, ggc-common.c, hash.h, hash.c, tlink.c: Replace + all uses of 'boolean' with 'bool'. + + 2001-03-01 John David Anglin + + * cpplib.c (_cpp_init_stacks): Cast enum for comparison. + * cppexp.c (lex): Cast enums for comparison. + * cppinit.c (parse_option): Cast enum for comparison. + * cpplex.c (cpp_spell_token): Cast enums to int for minus. + (cpp_output_token): Likewise. + (cpp_can_paste): Cast enums for comparsion and plus/minus. + (cpp_avoid_paste): Cast enums for minus and comparison. + + 2001-03-01 Zack Weinberg + + * gcc.c, objc/lang-specs.h: Add zero initializer for cpp_spec + field to all array elements. + + 2001-03-01 Zack Weinberg + + * cpphash.h (struct cpp_reader): Add print_version field. + * cppinit.c (cpp_handle_option): For -v, -version, and --version, + just set print_version and other flags as appropriate. + (cpp_post_options): Print version here if print_version is set. + + * toplev.c (exit_after_options): New flag. + (independent_decode_option): Don't exit here; just set + exit_after_options. + (main): Exit after calling lang_hooks.post_options if + exit_after_options is true. + + * cppinit.c (append_include_chain): Drop never-used case QUOTE. + (merge_include_chains): Adjust comment to match code. + + 2001-03-01 Zack Weinberg + + * stringpool.c (set_identifier): New function. + * tree.h: Prototype it. + + * c-parse.in: Kill D_YES. If compiled for objc, call + save_and_forget_protocol_qualifiers from init_reswords. + * objc/objc-act.c (remember_protocol_qualifiers, + forget_protocol_qualifiers): Don't diddle C_IS_RESERVED_WORD. + Swap out the non-keyword IDENTIFIER_NODEs for keyword ones, or + vice versa. + (save_and_forget_protocol_qualifiers): New function. + * c-lex.h: Prototype save_and_forget_protocol_qualifiers. + + 2001-03-01 Diego Novillo + + * c-semantics.c (prune_unused_decls): Return error_mark_node + instead of (tree) 1 to stop traversing the tree chain. + + 2001-03-01 Bernd Schmidt + + Fix a problem introduced by Kenner's Feb 18 change. + * toplev.c (rest_of_compilation): Disable flag_cse_follow_jumps and + flag_cse_skip_blocks only temporarily, not for ever. + + Thu Mar 1 09:49:58 2001 Jeffrey A Law (law@cygnus.com) + + * config/pa/som.h (ASM_IDENTIFY_GCC): Define. + (ASM_IDENTIFY_GCC_AFTER_SOURCE): Likewise. + + * pa.c (emit_move_sequence): Verify operand0 is a hard register + before determining its register class. + + 2001-03-01 Bernd Schmidt + + * config/ia64/ia64.c (ia64_hard_regno_rename_ok): Disallow renaming + from reg 4 if current_function_calls_setjmp. + (gen_nop_type): New function. + (ia64_emit_nops): New function. + (ia64_reorg): Call it. + (ia64_sched_reorder): Move code that rotates bundles up a bit. + + * reload1.c (eliminate_regs_in_insn): Restrict the special case + code not to try to optimize adds with anything but a REG destination. + + * sched-int.h (struct haifa_insn_data): Add new member priority_known. + (INSN_PRIORITY_KNOWN): New accessor macro. + * haifa-sched.c (priority): Use it instead of testing priority against + zero. + + 2001-02-28 DJ Delorie + + * config/m68k/m68k.h (MOVE_BY_PIECES_P): Avoid pushing bytes, + since that doesn't work the way gcc wants on a generic m68k. + + 2001-02-28 Richard Henderson + + * caller-save.c (save_call_clobbered_regs): Fix typo in + comparison last change. + + Wed Feb 28 19:31:42 CET 2001 Jan Hubicka + + * i386.c (pentium4_cost): New. + (m_PENT4): New macro. + (x86_push_memory, x86_movx,x86_cmove, x86_deep_branch, x86_use_sahf + x86_sub_esp_4, x86_sub_esp_8, x86_add_esp_4, x86_add_esp_8 + x86_integer_DFmode_moves, x86_partial_reg_dependency, + x86_memory_mismatch_stall): Add Pentium4 + (x86_use_q_reg, x86_use_any_reg): Kill. + (override_options): Add pentium4. + (incdec_operand): Return 0 for pentium4. + (ix86_issue_rate): Add PROCESSOR_PENTIUM4 and PROCESSOR_ATHLON. + * i386.h (x86_use_q_reg, x86_use_any_reg): Kill. + (TARGET_PENTIUM4): Define. + (enum processor_type): Add PROCESSOR_PENTIUM4. + (CPP_CPU_DEFAULT_SPEC): Add pentium4 support. + * i386.md (attribute "cpu"): Add pentium4. + * invoke.texi (march): Add pentium4. + + Wed Feb 28 19:28:06 CET 2001 Jan Hubicka + + * i386.md (sse_mov?fcc*): New patterns and splitters. + * i386.c (ix86_expand_movcc): Work post-reload; recognize + the SSE based conditional moves. + + Wed Feb 28 19:18:23 CET 2001 Jan Hubicka + + * i386.md (attribute mode): Add "TI". + (movsf_1): Add pxor support; remove constant propagation splitter. + (movdf_integer): Likewise. + (movdf_nointeger): Likewise. + (movxf constant prop splitter): Handle all modes; update for SSE. + * i386.h (CONST_DOUBLE_OK_FOR_LETTER): Add 'H' for SSE constants. + * i386.c (standard_80387_constant_p): Rewrite. + (standard_sse_constant_p): New. + * i386-protos.h (standard_sse_constant_p): New. + + Wed Feb 28 19:05:37 CET 2001 Jan Hubicka + + * i386.md (sse_setccsf, sse_setccdf): New. + (sse_cmp* patterns): Use '%D' instead of outputtting condition + flag directly. + * i386.c (sse_comparison_operator): Accept the supported unordered + comparses; be ready for fast_math. + (print_operand): Support 'D'. + + Wed Feb 28 18:54:51 CET 2001 Jan Hubicka + + * jump.c (reversed_comparison_code): Kill. + + Wed Feb 28 18:50:15 CET 2001 Jan Hubicka + + * toplev.c (rest_of_compilation): Do post-reload splitting unconditionally + for STACK_REGS + + Wed Feb 28 18:47:37 CET 2001 Jan Hubicka + + * i386.md (sse_andti3, sse_nandti_3, sse_xorti3): Add SSE2 versions; + add missing '%' in constraints. + + Wed Feb 28 17:24:24 CET 2001 Jan Hubicka + + * c-common.c (build_common_tree_nodes): Build intTI_type_nodes + for HOST_BITS_PER_WIDE_INT == 32 too. + + Wed Feb 28 17:22:35 CET 2001 Jan Hubicka + + * caller-save.c (reg_save_code, reg_restore_code): Index by mode, not + NREGS. + (insert_save, insert_restore): New parameter save_mode. + (init_caller_save): Update initialization of reg_save_code + and reg_restore_code. + (save_call_clobbered_regs): Compute save_modes and update calls to + reg_save_code and reg_restore_code. + (insert_restore): Unsignetize numbers; use save_modes to choose mode + of spill; update use of reg_restore_code. + (insert_save): Likewise. + * i386.h (HARD_REGNO_CALLER_SAVE_MODE): Update. + * c4x.h (HARD_REGNO_CALLER_SAVE_MODE): Update. + * regs.h (HARD_REGNO_CALLER_SAVE_MODE): Likewise. + + Wed Feb 28 17:19:28 CET 2001 Jan Hubicka + + * ifcvt.c (noce_emit_store_flag, noce_try_store_flag_constants, + noce_try_store_flag_inc, noce_try_store_flag_mask, + noce_try_cmove_arith): + Use reversed_comparison_code instead of reverse_comparison and + can_reverse_comparison_p. + + Wed Feb 28 17:17:29 CET 2001 Jan Hubicka + + * jump.c (reversed_comparison_code_parts): Allow reversal of + unordered compares in -ffast-math mode; reverse ordered compares + for FP even w/o -ffast-math. + + 2001-02-27 Richard Henderson + + * print-rtl.c (print_rtx) [i]: Don't print field five on + NOTEs other than NOTE_INSN_DELETED_LABEL. + + 2001-02-27 Zack Weinberg + + * mips/xm-iris4.h: Delete #if 0 block (there since before 1997). + * pa/xm-linux.h, pa/xm-pa.h, pa/xm-papro.h: Don't declare errno. + + 2001-02-27 Diego Novillo + + * c-common.c (walk_stmt_tree): Visit the chain of the current tree + even if walk_subtrees is 0. + * c-semantics.c (prune_unused_decls): Return a non-null value to + stop traversing the tree chain. + + 2001-02-27 DJ Delorie + + * config/m68k/m68k.c (output_function_prologue): Save the new CFA + register, *then* define it as the new CFA. + + Tue Feb 27 16:49:13 2001 Jeffrey A Law (law@cygnus.com) + + * pa.c (override_options): Promote -fpic to -fPIC. + (legitimize_pic_address): Simplify due to removal of + small PIC as a code generation option. + (secondary_reload_class): Similarly. + * pa.h (GO_IF_LEGITIMATE_ADDRESS): Similarly. + (PRINT_OPERAND_ADDRESS): Similarly. + * pa.md (various patterns): Similarly. + (small pic lo_sum pattern): Remove. + + Tue Feb 27 16:01:13 CET 2001 Jan Hubicka + Fergus Henderson + + * md.texi (min, max): Document + + Tue Feb 27 15:51:35 CET 2001 Jan Hubicka + + * i386.md (movsf, movdf): Use movaps for reg-reg moves if + TARGET_PARTIAL_REG_DEPENDENCY. + (truncdfsf2_1_sse, truncdfsf2_2): Penalize the fpreg->mem case. + + Tue Feb 27 15:36:48 CET 2001 Jan Hubicka + + * i386.md (mins*, maxs*): New patterns, expanders and splitters. + + 2001-02-26 Jeffrey Oldham + + * mips.c (mips_make_temp_file): Fix thinko in last change. + + 2001-02-26 Jason Eckhardt + + * combine.c (known_cond): Do not reverse the condition when + SMAX/UMAX is being considered and the condition is for equality + or inequality. + + * testsuite/gcc.c-torture/execute/20010221-1.c: New test. + + 2001-02-26 Philip Blundell + + * config.gcc: Remove obsolete targets "arm*-*-linuxoldld" and + "armv2-*-linux". + * config/arm/linux-elf.h: Remove historical relics related to + above configurations. + * config/arm/linux-oldld.h: Delete. + * config/arm/linux-elf26.h: Delete. + + 2001-02-26 Jason Merrill + + * c-decl.c (finish_decl): Set DECL_DEFER_OUTPUT on tentative file-scope + definitions. + * toplev.c (rest_of_decl_compilation): Check DECL_DEFER_OUTPUT to + recognize a tentative definition. Lose obsolete code. + + * toplev.c (wrapup_global_declarations): Don't emit DECL_COMDAT + variables unless necessary, either. + + 2001-02-25 Richard Henderson + + * ifcvt.c (struct noce_if_info): Add test_bb. + (noce_get_alt_condition): New. + (noce_try_minmax, noce_try_abs): New. + (noce_operand_ok): New. + (noce_process_if_block): Use them. + * rtlanal.c (may_trap_p): NEG and ABS can never trap. + + Sun Feb 25 14:26:17 2001 Christopher Faylor + + * config/i386/cygwin.h (CPP_SPEC): Add missing space before w32api + include. + + 2001-02-25 Zack Weinberg + + * config.gcc: Put back pa/t-openbsd and rs6000/t-openbsd. + * config/mips/mips.c (mips_make_temp_file): Set temp_filename + properly. + (mips_asm_file_end): Free temp_filename here. + + Sun Feb 25 08:34:23 2001 Richard Kenner + + * config/i386/i386-protos.h (ix86_set_move_mem_attrs): Move decl. + * config/i386/i386.c (ix86_set_move_mem_attrs_1): Fix typo. + + * config/i386/i386.md (movstrsi): Handle FAIL case. + + 2001-02-25 Neil Booth + + * cppinit.c (builtin_array): Update. + (init_builtins): Flag builtins to warn if redefined or + undefined. Define __GXX_WEAK as a normal macro. + * cpplib.c (do_undef): Warn if flagged NODE_WARN. + * cpplib.h (NODE_WARN): New flag. + * cppmacro.c (builtin_macro): Remove handling of __GXX_WEAK__. + Handle __STDC__ as a builtin only on Solaris. + (warn_of_redefinition): Renamed from check_macro_definition. + Reverse sense of test. Always warn if NODE_WARN. + (_cpp_create_definition): Use warn_of_redefinition. Flag + any macro beginning with "__STDC_" to require a mandatory + warning if redefined or undefined. + + 2001-02-24 Zack Weinberg + + * xm-interix.h, xm-lynx.h, alpha/xm-vms.h, convex/xm-convex.h, + i370/xm-i370.h, i370/xm-linux.h, i370/xm-mvs.h, i370/xm-oe.h, + i386/xm-beos.h, i386/xm-dos.h, i386/xm-mingw32.h, + i860/xm-i860.h, m68k/xm-3b1.h, m68k/xm-amix.h, m68k/xm-aux.h, + m68k/xm-crds.h, m68k/xm-mot3300.h, m88k/xm-sysv3.h, + mips/xm-mips.h, rs6000/xm-beos.h, vax/xm-vms.h: + Don't define any of: + USE_PROTOTYPES, vfork, mktemp, SVR3, NO_SYS_PARAMS_H, + P_tmpdir, MVS, NO_DBX_FORMAT, USE_STDARGS, STDC_HEADERS, + NO_PRECOMPILES, i860, __PTR_TO_INT, __INT_TO_PTR, rindex, + index, FULL_PROTOTYPES, AUX, R_OK, W_OK, X_OK, F_OK, + STACK_DIRECTION, MIPS, MAX_READ_LEN, MAX_WRITE_LEN. + + * alpha/xm-alpha.h, clipper/xm-clix.h, d30v/xm-d30v.h, + fr30/xm-fr30.h, i370/xm-linux.h: Remove commented-out macro + definitions. + + * m68k/xm-3b1.h, m68k/xm-crds.h, m88k/xm-sysv3.h: + Delete now-empty file. + + * alpha/vms.h: Define NEED_ATEXIT here... + * alpha/xm-vms.h: ...not here. + + * i386/cygwin.h: Don't define PARAMS. + * mips/mips.c: Don't prototype mktemp. Don't define + P_tmpdir. Use make_temp_file to create temporary files. + Don't be clever and delete temporary files early. + * config.gcc: Drop references to deleted files. Don't define + FULL_PROTOTYPES. + * gcc.texi: Don't mention USE_PROTOTYPES. + + Sat Feb 24 20:25:29 2001 Richard Kenner + + * config/i386/i386.c (ix86_set_move_mem_attrs): New function. + (ix86_set_move_mem_attrs_1): Likewise. + * config/i386/i386-protos.h (ix86_set_move_mem_attrs): New declaration. + * config/i386/i386.md (movstrsi): Call it. + + 2001-02-24 Zack Weinberg + + * config.gcc: Expunge references to alpha/t-pe, pa/t-openbsd, + x-linux-aout, i386/t-go32, t-osf, m68k/x-m68kv, + ns32k/xm-netbsd.h, rs6000/t-openbsd, rs6000/t-xnewas, + rs6000/x-aix41-gld. These are nonexistent, empty, or obsolete. + + (i750a-*-*): Error here if hosting on i750a. + (alpha*-*-winnt*, ix86-*-winnt3*): Remove stanzas entirely. + + * x-linux-aout, xm-freebsd.h, i386/beos-pe.h, ns32k/xm-netbsd.h: + Remove (empty modulo comments). + + * 1750a/xm-1750a.h, alpha/config-nt.sed, alpha/win-nt.h, + alpha/xm-winnt.h, i386/config-nt.sed, i386/os2.h, + i386/t-winnt, i386/win-nt.h, i386/xm-freebsd.h, i386/xm-os2.h, + i386/xm-winnt.h, m68k/x-alloca-c, m88k/x-dguxbcs, + mips/x-netbsd, mips/x-nws3250v4, rs6000/t-xnewas, + rs6000/t-xrs6000, rs6000/xm-cygwin.h: Remove (obsolete) + + * i386/crtdll.h, i386/cygwin.h, i386/mingw32.h: + Remove reference to winnt.h in comment. + * rs6000/t-newas, rs6000/t-rs6000: Override LIBGCC1_TEST to null. + + 2001-02-24 Franz Sirl + + * loop.c (check_dbra_loop): A biv has uses besides counting if it is + used to set another biv. + + Sat Feb 24 06:45:21 2001 Richard Kenner + + * tree.h (BLOCK_DEAD): New macro. + (struct tree_block): New flag, dead_flag. + * print-tree.c (print_node, case 'b'): Print missing fields. + * emit-rtl.c (remove_unnecessary_notes): Set BLOCK_DEAD. + * function.c (identify_blocks): Enable test for misplaced notes. + (all_blocks): Skip BLOCK_DEAD blocks. + * integrate.c (integrate_decl_tree): Likewise. + + * errors.c (internal_error, trim_filename): New functions. + (fancy_abort): Call internal_error. + * errors.h (internal_error, trim_filename): New declarations. + + 2001-02-24 Alexandre Oliva + + * config/mn10300/mn10300.h (DBX_REGISTER_NUMBER): Reverted + 2000-08-26's patch. + (EXTRA_CONSTRAINT): Formatting changes. + + 2001-02-23 Kaveh R. Ghazi + + * rtl.c (rtl_check_failed_code2): Fix typo in last change. + + 2001-02-23 Per Bothner + + * gcc.c (record_temp_file, pfatal_with_name, error): Make non-static, + so they can be called from java/jvspec.c. + * gcc.h (record_temp_file, pfatal_with_name, error): Declare. + + Sat Feb 24 03:32:50 CET 2001 Jan Hubicka + + * i386.c (ix86_frame): New structure. + (ix86_compute_frame_size): Kill. + (ix86_compute_frame_layout): New. + (ix86_save_reg): New. + (ix86_can_use_return_insn_p): Use frame layout stuff. + (ix86_expand_prologue): Likewise. + (ix86_expand_epilogue): Likewise. + (ix86_initial_elimination_offset): Likewise. + (ix86_nsaved_regs): Use ix86_save_reg. + (ix86_emit_save_regs): Likewise. + + Sat Feb 24 03:30:38 CET 2001 Jan Hubicka + + * flow.c (find_sub_basic_blocks): New function. + (split_block): Be ready for basic block introduced by CODE_LABEL. + (commit_one_edge_insertion): Call find_sub_basic_block. + + * flow.c (make_edges): Add edge from entry for blocks starting with + label having ALTERNATE_NAME + + Sat Feb 24 03:19:42 CET 2001 Jan Hubicka + + * function.c (epilogue_done): Be ready for first basic block not + containing PROLOGUE_END note. + (reposition_prologue_and_epilogue_notes): Avoid placing + PROLOGUE_END note between BASIC_BLOCK. + + Sat Feb 24 03:17:09 CET 2001 Jan Hubicka + + * loop.c (canonicalize_condition): Move to reversed_comparison_code. + + 2001-02-21 DJ Delorie + + * config/i960/i960.h (FRAME_POINTER_REQUIRED): Revert removal of + check for current_function_has_nonlocal_goto from 1999-11-12. + + Fri Feb 23 15:28:39 2001 Richard Kenner + + * diagnostic.c (trim_filename): No longer static. + * toplev.h (trim_filename): Declare. + * rtl.c (rtl_check_failed_bounds): Call internal_error. + (rtl_check_failed_type1, rtl_check_failed_type2): Likewise. + (rtl_check_failed_code1, rtl_check_failed_code2): Likewise. + (rtvec_check_failed_bounds): Likewise. + * tree.c (tree_check_failed, tree_class_check_failed): Likewise. + + * convert.c (convert_to_integer): Don't do unsigned unless result or + both inputs are unsigned. + + * fold-const.c (fold_convert): Don't call size_int_type_wide if + input overflows. + + * c-decl.c (set_block): Set NAMES and BLOCKS from BLOCK. + + * varasm.c (output_constant): Recompute CODE after lang-specific fn. + + 2001-02-23 Jeffrey Oldham + + * Makefile.in (resource.o): Add params.h dependence. + * params.def (MAX_DELAY_SLOT_LIVE_SEARCH): New parameter. + * params.h (MAX_DELAY_SLOT_LIVE_SEARCH): Likewise. + * resource.c: Add dependence on params.h. + (current_live_regs): Fix explanatory comment. + (find_basic_block): Add new parameter to permit limiting search + for a BARRIER. + (mark_target_live_regs): Add new argument to find_basic_block call. + (incr_ticks_for_insn): Likewise. + + 2001-02-23 Gabriel Dos Reis + + * diagnostic.c (output_to_stream): Rename to + output_buffer_to_stream. Loses the stream parameter. + (init_output_buffer): Set diagnosic_buffer's stream. + (flush_diagnostic_buffer): Adjust. + (default_print_error_function): Likewise. + (finish_diagnostic): Likewise. + (verbatim): Likewise. + + * diagnostic.h (struct output_buffer): Add `stream' field. + (output_buffer_attached_stream): New macro. + + 2001-02-23 Jakub Jelinek + + * fold-const.c (extract_muldiv) [case PLUS_EXPR]: If not MULT_EXPR, + check if either operand is divisible by C. + (multiple_of_p): Handle LSHIFT_EXPR with small constant shift. + If type is signed, consider negative numbers as well. + + 2001-02-22 Richard Henderson + + * config/ia64/crtbegin.asm (.fini): Use pc-relative relocs to + reach .text instead of gp-relative relocs. + * config/ia64/crtend.asm (.init): Likewise. + + 2001-02-22 Andreas Jaeger + + * extend.texi (C++ Attributes): Fix typo. + + 2001-02-21 David Mosberger + + * config/ia64/ia64.c (ia64_epilogue_uses): For syscall_linkage + functions, drop current_function_args_info.words test. + (ia64_compute_frame_size): Mark syscall_linkage functions as + using eight input registers. + + 2001-02-21 Loren J. Rittle + Bruce Korb + + * fixinc/inclhack.def (freebsd_gcc3_breakage): new fix + * fixinc/README: Document how to convert sed substitutions + to format style c_fix-es. + * fixinc/fixincl.x: regen + + 2001-02-21 Jeffrey D. Oldham + + * gcc.c: Add comment explaining how to add a command-line option. + Add title to specs language comment. + + 2001-02-21 Jeffrey Oldham + + * gcc.c (cc1_options): Add "-param". + (DEFAULT_WORD_SWITCH_TAKES_ARG): Likewise. + (option_map): Likewise. + * toplev.c (display_help): Add entry for "--param". + (independent_decode_option): Fix typographical error. + + Wed Feb 21 18:57:28 CET 2001 Catherine Moore + Bernd Schmidt + Jan Hubicka + + * i386.c (function_arg_advance): Pass SSE arguments in registers. + (function_arg): Likewise. + + Wed Feb 21 18:12:41 CET 2001 Jan Hubicka + + * i386.md (mmx_lshrdi3, mmx_ashldi3): Guard by unspec. + + 2001-02-21 Kazu Hirata + + * config/h8300/h8300.md (iorsi3): Do not output an extra newline + character. + (xorsi3): Likewise. + + Wed Feb 21 17:35:24 CET 2001 Jan Hubicka + + * flow.c (init_propagate_block_info): Canon address and use single_set + for killing dead memory stores. + + 2001-02-21 Jeffrey Oldham + + * Makefile.in (reorg.o): Add params.h dependence. + * params.def: Fix typographical error in comment. + (MAX_DELAY_SLOT_INSN_SEARCH): New parameter. + * params.h: Modify introductory comment. + (MAX_DELAY_SLOT_INSN_SEARCH): New parameter. + * reorg.c: Add dependence on params.h. + (redundant_insn): Add parameterized throttle for search. + (fill_simple_delay_slots): Add a comment explaining a variable. + Move conditional out of loop, simplifying code. + (fill_eager_delay_slots): Fix typographical error in comment. + + 2001-02-20 Aldy Hernandez + + * tm.texi (REVERSE_CONDEXEC_PREDICATES_P): New macro documentation. + + * flow.c (ior_reg_cond): Use REVERSE_CONDEXEC_PREDICATES_P macro. + (REVERSE_CONDEXEC_PREDICATES_P): Define macro. + + 2001-02-21 Jason Merrill + + * tree.h (DECL_UNINLINABLE): Move from C++ frontend. + (struct tree_decl): Add uninlinable bitfield. + * c-decl.c (duplicate_decls): Set it. + * integrate.c (function_cannot_inline_p): Check it. + + * dwarf2out.c (add_name_and_src_coords_attributes): Don't add + DW_AT_MIPS_linkage_name to abstract methods. + (dwarf2out_abstract_function): Emit class context before calling + set_decl_abstract_flags. Don't clear DECL_ABSTRACT. + (gen_subprogram_die): Remove obsolete code. + (gen_member_die): Don't include clones in the member list. + (gen_decl_die): Emit abstract info for clone origin. + * dwarfout.c (output_type): Don't include clones in the member list. + * dbxout.c (dbxout_type_methods): Ignore abstract methods. + * toplev.c (note_deferral_of_defined_inline_function): Don't clear + DECL_ABSTRACT on a function that already has it set. + + * dwarf2out.c (gen_formal_types_die): Also accept a FUNCTION_DECL. + (get_subprogram_die): Pass it in. + + 2001-02-21 Richard Earnshaw + + * flow.c (mark_set_1): Make not_dead unsigned long. For + non-pseudos, use it as a bitmask of the hard regs that + don't die. + + 2001-02-21 Neil Booth + + * cppfiles.c: Update comments. + (_cpp_read_file): Don't check for NULL filenames any more. + * cppinit.c (cpp_start_read): Don't do canonicalization of + in_fname and out_fname. Use the passed file name exclusively. + (_cpp_handle_options): Don't treat "-" as a command line option, + but as a normal filename. + (_cpp_post_options): Canonicalize in_fname and out_fname. + * cppmain.c (printer_init): Don't check out_fname for NULL. + * c-lex.c (orig_filename): Rename cpp_filename for clarity. + (init_c_lex): Update, and use "" to represent stdin to CPP. + (yyparse): Update. + + 2001-02-20 Will Cohen + + * config/pa/quadlib.c (_U_Qfcnvfxt_quad_to_usgl): New function. + * config/pa/long_double.h (FIXUNS_TRUNCTFSI2_LIBCALL): Added. + (INIT_TARGET_OPTABS): Use FIXUNS_TRUNCTFSI2_LIBCALL for + fixunstfsi_libfunc. + + 2001-02-20 Stan Shebs + + * config/rs6000/rs6000.c (output_cbranch): Output branches + on separate lines instead of using ';' to separate. + + 2001-02-20 Neil Booth + + * cppinit.c (set_lang): Move builtin handling to... + (init_builtins): ...here. + (_cpp_create_reader): Move call to set_lang. + + 2001-02-20 Mark Mitchell + + * stmt.c (expand_return): If an attempt is made to return the + error_mar_node, treat the return like a return without a value. + + 2001-02-19 Zack Weinberg + + * sibcall.c (skip_copy_to_return_value): Call + identify_call_return_value here, and return orig_insn if it + returns zero. Hardret and softret arguments now unnecessary. + (call_ends_block_p): Don't call identify_call_return_value here. + + * ggc-common.c (ggc_mark_rtx_children): No need to mark 'S' or + 's' slots in RTXen. + * ggc-page.c, ggc-simple.c (ggc_mark_if_gcable): Delete function. + * ggc.h (ggc_mark_if_gcable): Delete prototype. + + Mon Feb 19 20:30:16 2001 Jeffrey A Law (law@cygnus.com) + + * pa.c (move_operand): Accept code to load the address of a + symbol out of the DLT as a valid move operand. + (print_operand, case 'A'): New to handle generating a DLT + reference for a LO_SUM expression. + * pa.h (EXTRA_CONSTRAINT): Handle 'A' for DLT LO_SUM references. + * pa.md (movsi, movdi patterns): Allow DLT LO_SUM references. + + 2001-02-19 Joseph S. Myers + + * README, cpp.texi, gcc.texi, version.c: Update version number to + 3.1. + * cpp.1, gcov.1, gcc.1: Regenerate. + + 2001-02-19 Neil Booth + + * cppfiles.c (stack_include_file): Generate dependencies + here, and manage include_count here too. + (PRINT_THIS_DEP): Delete. + (_cpp_execute_include): Do not generate dependencies here, + apart from the case of a missing header. Do not manage + include_count. + (_cpp_read_file): Leave dependency generation to + stack_include_file. + + Mon Feb 19 10:17:47 2001 Jeffrey A Law (law@cygnus.com) + + * config.gcc (hppa*64*-*-hpux11*): Add MASK_GAS to + target_cpu_default. Remove dead assignment to + target_cpu_default. + + Mon Feb 19 16:47:39 CET 2001 Jan Hubicka + + * regclass.c (contains_reg_of_mode): Make global. + (init_reg_sets): Remove contains_reg_of_mode; take into account + CLASS_MAX_NREGS when looking for the proper mode. + (dump_regclass): Dump only classes considered for the pseudo. + (regclass): Use contains_reg_of_mode. + + Mon Feb 19 16:45:42 CET 2001 Jan Hubicka + + * gcc.c (do_spec_1): 'n' for printing notices. + * i386.h (CC1_CPU_SPEC): Notice deprecated options as deprecated. + + Mon Feb 19 15:51:30 CET 2001 Jan Hubicka + + * reg-stack.c (next_flags_user): Use current_block->end + (swap_rtx_condition): Look for next user if flags don't die; + give up on CALL_INSNs; use current_block->end. + + Mon Feb 19 08:27:21 2001 Richard Kenner + + * sibcall.c (call_ends_block_p): New function. + (optimize_sibling_and_tail_recursive_call): Use it. + + 2001-02-18 Kazu Hirata + + * config/h8300/h8300.md: Update copyright. + (andsi3): Do not output an extra newline character. + + Sun Feb 18 15:45:17 2001 Richard Kenner + + * toplev.c (note_deferral_of_defined_inlined_function): Argument + FNDECL may be unused. + + * toplev.c (rest_of_compilation): Don't have CSE skip blocks or + follow jumps after first run. + If -fexpensive-optimizations rerun CSE after GCSE and iterate until + it doesn't change any jumps. + + Sun Feb 18 17:05:50 2001 Jeffrey A Law (law@cygnus.com) + + * Makefile.in (rtlanal.o): Depend on hard-reg-set.h. + ($HOST_PREFIX_1)rtlanal.o: Remove rules for building + (mostlyclean): Corresponding changes. + * rtlanal.c (hard-reg-set.h): Include. + (rtx_unstable_p): Do not treat the argument pointer specially + if it is not a fixed register. + (rtx_varies_p, rtx_addr_can_trap_p): Similarly. + + Sun Feb 18 15:45:17 2001 Richard Kenner + + * sibcall.c (optimize_sibling_and_tail_recursive_call): Compare + against last real insn in basic block. + Rework to avoid gotos. + + * Makefile.in (gcse.o): Now includes ggc.h. + * gcse.c: Include ggc.h. + (want_to_gcse_p): Verify expression can be in SET as valid insn. + (try_replace_reg): Remove warning of uninitialize variable. + (process_insert_insn): Call invalid_insn_p to validate insn. + * recog.c (insn_invalid_p): Now global. + See if can make valid by adding CLOBBERs of SCRATCH only and do if so. + * recog.h (insn_invalid_p): New declaration. + + * jump.c (jump_optimize_1): Only define reversed_code #ifdef HAVE_trap. + + * config/sparc/sparc.c (eligible_for_epilogue_delay): Don't put + assignments from FP constants since 'Y' output code can't handle it. + (eligible_for_sibcall_delay): Likewise. + + * flow.c (print_rtl_and_abort_fcn): Renamed from print_rtl_and_abort. + Call fancy_abort directly, passing args. + (print_rtl_and_abort): Now a macro, like fancy_abort. + + * final.c (output_operand_lossage): Use internal_error, not error. + + 2001-02-18 Shane Nay + + * mips.c (mips_expand_prologue) Add REG_MAYBE_DEAD to + structure shift insns. + + 2001-02-18 Mark Mitchell + + * invoke.texi (-fsquangle): Remove documentation. + (-fname-mangling-version): Likewise. + + 2001-02-18 Lars Brinkhoff + + * optabs.c (expand_abs): Remove reference to + HAVE_contitional_arithmetic. + * combine.c (simplify_set): Likewise. + + 2001-02-18 Richard Henderson + + * ifcvt.c (dead_or_predicable): Don't move code if eh regions + would be disrupted. + + 2001-02-18 Richard Henderson + + * config/ns32k/ns32k.h (ADJSP): Upcase arguments. + + * config/alpha/alpha.md (movsi_fix): Fix typo in pattern name. + + * reload1.c (reload_cse_simplify_set): Fix typo. + + Sun Feb 18 09:30:09 2001 Richard Kenner + + * diagnostic.c (_fatal_insn): Decrement errorcount. + + * invoke.texi (-I): Add note avoiding use for system header files. + + * rtl.h (add_clobbers): Remove duplicate declaration. + * recog.h (added_clobbers_hard_reg_p): New declaration. + * genemit.c (struct clobber_pat): New field has_hard_reg. + (gen_insn): Record if added clobbers clobber hard reg. + (gen_split): Avoid unused warning if number of operands is 0. + (output_added_clobbers_hard_reg_p): New function. + (main): Call it. + + 2001-02-18 Alan Modra + + * pa.c (hppa_expand_prologue): Simplify code storing return + pointer. For large (>=8k) frames with a post_store, adjust stack + pointer by 8k-64 first rather than by 64. When testing with + VAL_14_BITS_P, always use the actual value rather than the value + negated. Add blockage to prevent scheduling of spills before + stack frame has been created. + (hppa_expand_epilogue): Simplify code loading return pointer. + Allow a slightly larger range for merge_sp_adjust_with_load case. + When testing with VAL_14_BITS_P, always use the actual value. + + * pa.c (pa_adjust_insn_length): Check that block move + pattern is a set before looking at operands. + + 2001-02-17 Mark Mitchell + + * fold-const.c (fold_binary_op_with_conditional_arg): New + function, split out from ... + (fold): ... here. + * tree.def (COND_EXPR): Document the use of VOID_TYPE for + conditional arms that throw exceptions. + + * print-tree.c (print_node): Do not use BLOCK_CHAIN when we're not + looking at a BLOCK. + + 2001-02-17 Kaveh R. Ghazi + + * aclocal.m4 (gcc_AC_CHECK_DECL): Before attempting the test, + define HAVE_DECL_* to 1 to mask potential backup declarations. + * configure: Regenerated. + + 2001-02-17 Mark Mitchell + + * invoke.texi (-Woverloaded-virtual): Clarify documentation. + + 2001-02-17 Richard Henderson + + * reload1.c (reload_cse_simplify_set): Respect LOAD_EXTEND_OP + when replacing a memory load with a register. + + Sat Feb 17 14:48:30 2001 Richard Kenner + Jan Hubicka + + * recog.c (validate_replace_src_1): New. + (validate_replace_src_data): Likewise. + (validate_replace_src): Use note_uses. + * rtl.h (note_uses): Declare. + * rtlanal.c (note_uses): New. + + Sat Feb 17 10:52:34 CET 2001 Jan Hubicka + + * reg-stack.c (stack_def): Make field reg unsigned. + (remove_regno_note): Unsignetize parameter. + + 2001-02-16 Jes Sorensen + + * ia64.c (errata_emit_nops): Add VOIDmode as second argument to + shladd_operand() call. + + 2001-02-16 Bruce Korb + Rodney Brown + + * fixinc/mkfixinc.sh: Use C fixincludes for UnixWare 7. + * fixinc/inclhack.def: Add fixinc.svr4 patterns with matching + machine restrictions + * fixinc/fixincl.x: regen + + Fri Feb 16 12:41:30 2001 Richard Kenner + + * gcse.c (hash_scan_set): If cprop, see if REG_EQUAL or REG_EQUIV. + Don't CSE a nop. + (hash_scan_insn): Clean up calls to hash_scan_set. + (compute_kill_rd): REGNO now unsigned. + (try_replace_reg): Rework to use simplify_replace_rtx. + (cprop_jump, cprop_cc0_jump): Likewise. + (cprop_insn): Call find_reg_equal_equiv_note. + Reflect changes to cprop_jump and cprop_cc0_jump. + + * recog.c (validate_replace_src): Replace in operands of + ZERO_EXTRACT in SET_DEST. + + * cse.c (new_label_ref): New variable. + (insert): Set it instead of recorded_label_ref. + (cse_basic_block): Set recorded_label_ref if new_label_ref use, has + CODE_LABEL for this function, and not already in REG_LABEL note. + + 2001-02-16 Jeffrey Oldham + + * resource.c (mark_referenced_resources): Fix typo in introductory + comment. + * config/mips/abi64.h (SUBTARGET_TARGET_OPTIONS): Fix typo in + string constant. + + 2001-02-16 Jason Merrill + + * dwarf2out.c (add_bound_info): Don't crash if SAVE_EXPR_RTL is + NULL. + (gen_subprogram_die): Don't abort on seeing a second definition if + the previous one was abstract. Don't replace an abstract instance + in the lookup table. + + * dwarf2out.c (dwarf2out_abstract_function): Rename from + gen_abstract_function. + * dwarf2out.h: Declare it. + * toplev.c (note_outlining_of_inline_function): New fn. + * toplev.h: Declare it. + * integrate.c (output_inline_function): Call it. + * c-decl.c (duplicate_decls): Call it when redefining an extern + inline. Don't inline the new defn. + + * tree.h (BLOCK_CHAIN): Use BLOCK_CHECK. + + 2001-02-16 Gerald Pfeifer + + * .gdbinit: Rename to gdbinit.in. + * gdbinit.in: New file, + * configure.in: Generate .gdbinit from gdbinit.in. + * configure: Regenerated. + * Makefile.in (distclean): Always remove .gdbinit. + + 2001-02-16 Jakub Jelinek + + * objc/objc-act.c (start_class): Register implemented_classes with + GC. + + 2001-02-16 Neil Booth + + * cppfiles.c (_cpp_make_system_header): Generate a file + change callback. + + 2001-02-15 Jim Meyering + + * Makefile.in (install-common): Don't depend on installdirs here. + Instead, make each of the lang.install-common targets (e.g., + c++.install-common in cp/Make-lang.in) depend on it. + (install-driver): Depend on installdirs. + + Thu Feb 15 21:30:26 2001 Richard Kenner + + * flow.c (tidy_fallthru_edge): Never end block on line number NOTE. + + * function.c (assign_parms): Set RTX_UNCHANGING_P in pseudo when we + do in memory. + + 2001-02-15 Mark Mitchell + + * invoke.texi (--param): Document. + + Thu Feb 15 15:16:38 2001 Alexandre Oliva + + * config/sh/sh.h (BOOL_TYPE_SIZE): Don't define. + + Thu Feb 15 10:52:31 CET 2001 Jan Hubicka + + * i386.md (extendsfdf2_2): Fix constraints. + + Thu Feb 15 09:46:21 CET 2001 Jan Hubicka + + * i386.md (fop_df_3 splitter): Fix operand number. + + Wed Feb 14 12:37:37 CET 2001 Jan Hubicka + + * invoke.texi (-mreg-alloc): Nuke. + * i386.c (ix86_reg_alloc_order, regs_allocated, + order_regs_for_local_alloc): Nuke. + (override_options): Kill reg_alloc code. + * i386.h (TARGET_OPTIONS): Kill reg-alloc. + (REG_ALLOC_ORDER): SSE goes before I387. + (ORDER_REGS_FOR_LOCAL_ALLOC): Kill. + (ix86_reg_alloc_order): Likewise. + * i386-protos.h (ix86_reg_alloc_order): Kill. + + 2001-02-14 Richard Henderson + + * toplev.c (f_options): Clarify -fschedule-insns2 documentation. + + Wed Feb 14 11:59:58 CET 2001 Jan Hubicka + + * i386.h (RETURN_IN_MEMORY): Fix formating; reject TFmodes + + Wed Feb 14 11:12:38 CET 2001 Jan Hubicka + + * i386-protos.h (ix86_memory_move_cost): Move offline. + * i386.c (ix86_register_move_cost): Compute properly cost of + SSE, MMX and i387 instructions. + (*_cost): Add costs of SSE/MMX moves. + (ix86_memory_move_cost): Move offline from ....; Likewise. + * i386.h (MEMORY_MOVE_COST): .... here; + (struct processor costs): Add new fields to represent costs + of SSE/MMX moves. + + Wed Feb 14 10:08:26 CET 2001 Jan Hubicka + + * regclass.c (init_reg_sets_1): Reinstall the optimization of + move_cost together with Matt Kraai's fix. + + 2001-02-14 Jeffrey Oldham + + * Makefile.in (OBJS): Add params.o. + + 2001-02-14 Richard Henderson + DJ Delorie + + * jump.c (jump_optimize_1): When we delete a conditional jump + preceding a non-conditional jump to effectively the same place, + make sure that the combined jump skips any clobber insns between + the two labels. + + 2001-02-14 Jeffrey Oldham + + * gcc.c (do_spec_1): Fix off-by-one error for '%M' case. + + 2001-02-14 Mark Mitchell + + * Makefile.in (toplev.o): Depend on params.h. + (intergate.o): Likewise. + (params.o): New target. + * flags.h (inline_max_insns): Remove. + * integrate.c: Include params.h. + Use MAX_INLINE_INSNS instead of inline_max_insns. + * params.c: New file. + * params.h: Likewise. + * params.def: Likewise. + * toplev.c: Include params.h. + (lang_independent_params): New variable. + (decode_f_option): Use the param machinery instead of setting + max_inline_insns. + (independent_decode_option): Handle "--param name=value". + (main): Register language-independent parameters. + + Wed Feb 14 11:13:45 CET 2001 Jan Hubicka + + * i386.md (pushsf, pushdf_nointeger): Fix constraint. + + 2001-02-14 Richard Henderson + + * regclass.c (init_reg_sets_1): Revert last two changes. + + 2001-02-14 Jakub Jelinek + + * stor-layout.c (is_pending_size, put_pending_size): New functions. + (variable_size): Call put_pending_size. + * tree.h (is_pending_size, put_pending_size): Add prototypes. + * fold-const.c (extract_muldiv): If SAVE_EXPR is on the pending + sizes list, put newly created SAVE_EXPR there as well. + + 2001-02-14 Jakub Jelinek + + * config/ia64/ia64.c (last_group): Only 2 entries are needed. + (errata_find_address_regs): load_group has only 2 entries. + (errata_emit_nops): Likewise. shladd is not problematic. + Clear last_group if nop was emitted. + (fixup_errata): load_group has only 2 entries. + Optimize. + + 2001-02-14 Neil Booth + + * c-lex.c (lex_number): Only warn traditionally for U suffix + outside system macros. + * cppexp.c (parse_number): Similarly. + * cpplib.h (NODE_SYSHDR, cpp_sys_objmacro_p): New. + * cppmacro.c (struct cpp_macro): New member node. + (parse_args): Only warn about missing rest args if not + a system macro. + (funlike_invocation_p): Similarly for uninvoked funlike macros. + (cpp_sys_objmacro_p): New. + (_cpp_create_definition): Store the node with the macro defn. + Remember if the macro is defined in a system header. + + 2001-02-13 DJ Delorie + + * configure.in (check_languages): determine languages to check + * Makefile.in (check-c++): alias for check-g++ + (check-f77): alias for check-g77 + (CHECK_TARGETS): depend on configured languages + + Wed Feb 14 01:13:59 CET 2001 Jan Hubicka + + * i386.md (fixsfsi2, fixdfdi2): Fix previous patch again. + (sqrtsf2): Use TARGET_SSE instead of TARGET_SSE2) + (sqrtsf2 patterns): Use 'x' instead of 'Y'. + (sqrtextendsfdf2): Disable for SSE2. + + Wed Feb 14 00:19:28 CET 2001 Jan Hubicka + + * i386.md (fixsfsi2, fixdfdi2): Fix previous patch again. + (sqrtsf2): Use TARGET_SSE instead of TARGET_SSE2) + (sqrtsf2 patterns): Use 'x' instead of 'Y'. + (sqrtextendsfdf2): Disable for SSE2. + + Wed Feb 14 00:11:20 CET 2001 Jan Hubicka + + * i386.md (movsfcc_1): Support integer cmove instruction. + (movdfcc_1): Likewise; new splitter. + + Tue Feb 13 23:19:27 CET 2001 Jan Hubicka + + * i386.c (output_fp_compare): Support SSE. + (prepare_fp_compare_args): SSE comparisons always support memory. + * i386.h (TARGET_CMOVE): SSE imply cmove. + * i386.md (cmp?f2): Enable for SSE too. + (cmpfp_i*): Support SSE. + (cmpfp_i_sse): New. + (cmpfp_i_sse_only): New. + (s*, b* fp expanters): Enable for SSE too. + (fp_jcc_1_sse, fp_jcc_1_sse_only, fp_jcc_2_sse, fp_jcc_2_sse_only): + New patterns. + + Tue Feb 13 23:05:42 CET 2001 Jan Hubicka + + * regclass.c (init_reg_sets_1): Silence warning. + + Tue Feb 13 22:03:07 CET 2001 Jan Hubicka + + * i386.md (sqrt?f2): Change to expander. + (sqrt?f2_1, sqrt?f2_sse_only, sqrt?f2_i387): New. + + Tue Feb 13 15:42:05 2001 Richard Kenner + + * rtlanal.c (find_reg_equal_equiv_note): New function. + * simplify-rtx.c (simplify_gen_unary, simplify_gen_ternary): New fns. + (simplify_gen_relational, simplify_replace_rtx): Likewise. + * rtl.h: Add declarations for above functions. + + Tue Feb 13 21:09:11 CET 2001 Jan Hubicka + + * cse.c (cse_main): Converts ifdefs on PIC_OFFSET_TABLE_REGNUM to + conditionals. + * defaults.h (PIC_OFFSET_TABLE_REGNUM): Default to INVALID_REGNUM. + * emit-rtl.c (init_emit_once): Convert ifdefs to conditionals. + * flow.c (mark_regs_live_at_end): Likewise. + (calculate_global_regs_live): Likewise. + * gcse.c (compute_hash_table): Likewise. + (compute_kill_rd): Likewise. + * resource.c (mark_target_live_regs): Likewise. + * rtl.h (INVALID_REGNUM): New macro. + + Tue Feb 13 20:59:22 CET 2001 Jan Hubicka + + * i386.md (fixsfsi2, fixdfdi2): Fix previous patch. + + Tue Feb 13 16:32:20 CET 2001 Jan Hubicka + + * i386.md (fixsfsi2, fixdfdi2): Force operand to register + for SSE. + + Tue Feb 13 14:53:16 CET 2001 Jan Hubicka + + * i386.md (add?f3, sub?f3, mul?f3, dif?f3): Enable for TARGET_SSE(2) + too. + (fop_sf_comm, fop_df_comm, fop_sf_1, fop_df_1): Support SSE. + (fop_sf_comm_sse, fop_df_comm_sse): New patterns. + (fop_sf_1_sse, fop_df_1_sse): New patterns + (fop_*): Disable float_extend and float patterns for SSE compilation. + * i386.c (output_387_binary_op): Support SSE. + + Tue Feb 13 14:16:34 CET 2001 Jan Hubicka + + * i386.md (dummy_extendsfdf2): Support SSE2 + (extendsfdf2): Enable if 80387 or SSE2. + (extendsfdf2_1): Support SSE2. Disable if SSE2 is avialble + and no MIX_I387_SSE2 + (extendsfdf2_1_sse_only): New pattern. + (truncdfsf2): Enable if SSE2 or 80387; Always use SSE only version + of SSE. + (truncdfsf2_1): Support SSE. + (truncdfsf2_2): Support SSE. + (truncdfsf2_2_1_sse): New pattern. + (fixtruncsfsi2): Always use SSE if available. + (fix_truncsfsi_sse): New pattern. + (fix_truncdfsi_sse): New pattern. + (floatsis?f2): Support SSE. + (floatsidf2_i387): New pattern. + (floatsidf2_sse): Likewise. + + Tue Feb 13 07:52:04 2001 Richard Kenner + + * configure.in: Use "have_gnat" variable, not "gnat". + * configure: Regenerated. + + * config/sparc/sparc.c (function_value): Treat all non-record + aggregate types like used to treat UNION_TYPE. + + Tue Feb 13 13:31:33 CET 2001 Jan Hubicka + + * i386.c (print_reg): Use ANY_FP_REG instead of FP_REG + * i386.h (MASK_128BIT_LONG_DOUBLE): Renumber + (MASK_SSE2): New. + (MASK_MIX_SSE_I387): New. + (TARGET_SSE): SSE2 imply SSE. + (TARGET_SSE2, TARGET_MIX_SSE_I387): New. + (TARGET_SWITCHES): Add "sse2", "mix-sse-i387". + (enum reg_class): Add new classes. + (REG_CLASS_NAMES): Likewise. + (REG_CLASS_CONTENTS): Likewise. + (ANY_FP_REG_P, ANY_FP_REGNO_P, SSE_REG_P, SSE_FLOAT_MODE): New macros. + (REG_CLASS_FROM_LETTER): 'x' and 'y' is SSE_REGS only when SSE is + supported. Add 'Y' to be SSE_REGS when SSE2 is supported. + (CLASS_MAX_NREGS): Use new macros. + (REGISTER_MOVE_COST): Rewrite using SECONDARY_MEMORY_MAYBE_NEEDED. + * i386.md (pushsf, movsf): Support SSE. + (pushdf_nointeger, pushdf_integer, pushdf): Support SSE, update + splitters to use ANY_FP_REGNO_P. + (movdf_nointeger, movdf_integer): Likewise. + + 2001-02-13 Alexandre Oliva + + * combine.c (UWIDE_SHIFT_LEFT_BY_BITS_PER_WORD): New macro. + (try_combine): Use it. + + Tue Feb 13 11:37:06 CET 2001 Jan Hubicka + + * i386.h (SSE_CLASS_P, MMX_CLASS_P, MAYBE_FLOAT_CLASS_P, + MAYBE_SSE_CLASS_P, MAYBE_MMX_CLASS_P): New macros. + (PREFERRED_RELOAD_CLASS, SECONDARY_MEMORY_NEEDED): Move offline. + (REGISTER_MOVE_COST): Likewise. + * i386-protos.h (ix86_secondary_memory_needed, + ix86_preferred_reload_class, ix86_register_move_cost): Declare. + * i386.c (ix86_secondary_memory_needed, + ix86_preferred_reload_class, ix86_register_move_cost): New function. + + Die Feb 13 11:04:25 CET 2001 Jan Hubicka + + * i386.h (VALID_FP_MODE_P, VALID_INT_MODE_P): New. + (HARD_REGNO_MODE_OK): Move offline to .... + * i386.c (ix86_hard_regno_mode_ok) ... here; + refuse all incorrect modes. + * i386-protos.h (ix86_hard_regno_mode_ok): Declare. + + 2001-02-13 Richard Henderson + + * sparc.md (cmp_cc_arith_op_set): Don't use match_dup on the + entire operator; replicate that and match_dup the operands. + (cmp_ccx_arith_op_set): Likewise. + (cmp_cc_arith_op_not_set): Likewise. + (cmp_ccx_arith_op_not_set): Likewise. + + 2001-02-13 Alexandre Oliva + + * explow.c (trunc_int_for_mode): Sign-extend value to mode. + + 2001-02-12 Geoffrey Keating + + * config/rs6000/sysv4.h (MASK_NO_BITFIELD_WORD): New macro. + (TARGET_NO_BITFIELD_WORD): New macro. + (SUBTARGET_SWITCHES): Add -mbit-word, -mno-bit-word options. + (BITFIELD_NBYTES_LIMITED): Define based on TARGET_NO_BITFIELD_WORD. + + Mon Feb 12 18:13:26 2001 Richard Kenner + + * cselib.c: New file, from simplify-rtx.c. + * simplify-rtx.c: Remove cselib parts. + * Makefile.in: Add cselib.o. + + 2001-02-12 Geoffrey Keating + + * config/rs6000/rs6000.c (rs6000_float_const): Remove warning. + (setup_incoming_varargs): Remove warning. + + * config/rs6000/rs6000.c (validate_condition_mode): When + flag_fast_math, allow floating-point conditionals to be reversed. + (rs6000_generate_compare): When flag_fast_math, don't generate + cror operations for FP conditionals. + + * config/rs6000/sysv4.h (SUBTARGET_OVERRIDE_OPTIONS): Handle + -mcall-i960. + (ASM_SPEC): Likewise. + (CC1_ENDIAN_LITTLE_SPEC): Likewise. + (CC1_SPEC): Likewise. + (LINK_TARGET_SPEC): Likewise. + (CPP_ENDIAN_SPEC): Likewise. + * Makefile.in (check-consistency): New target. + + 2001-02-12 Joseph S. Myers + + * c-decl.c (grokdeclarator): In C99 mode, give the more specific + "return type defaults" warning for functions with return type + defaulting to int. + * c-lang.c (c_init): In C99 mode, enable warnings for implicit + function declarations by default rather than only when pedantic. + + Mon Feb 12 17:28:48 CET 2001 Jan Hubicka + + * regclass.c (init_reg_sets_1): Optimize calculation of move_cost + arrays. + + 2001-02-12 Nathan Sidwell + + * extend.texi (Deprecated): Deprecate new initializer lists. + + 2001-02-12 Nathan Sidwell + + * mkdeps.c (deps_add_default_target): Robustify. Add + basename component only. + * cpp.texi (-M): Describe how default target is generated. + * invoke.texi (-M): Likewise. + + 2001-02-12 Kazu Hirata + + * toplev.c (push_float_handler): Remove. + (pop_float_handler): Remove. + * toplev.h: Remove prototypes for the above functions. + + 2001-02-12 Jakub Jelinek + + * c-common.c (constant_fits_type_p): New function. + (convert_and_check): Use it. + + 2001-02-11 Mark Mitchell + + * Makefile.in (GXX_ABI_FLAG): Don't define. + * configure.in (--enable-new-gxx-abi): Remove option. + * config.in: Regenerated. + * configure: Likewise. + + 2001-02-12 Alexandre Oliva + + * lcm.c (compute_earliest): Let EXIT_BLOCK be handled as a regular + basic block. + (optimize_mode_switching) [NORMAL_MODE]: Set up EXIT_BLOCK as a + regular basic block, and arrange for all edges into it to switch + to normal mode. + + 2001-02-11 Gerald Pfeifer + + * Makefile.in (distclean): Do not remove .gdbinit. + + 2001-02-11 Mark Mitchell + + * Makefile.in (gcc.o): Fix typos. + (protize.o): Likewise. + (unprotoize.o): Likewise. + + 2001-02-11 Richard Henderson + + * tree.c (build1): Check for null operand in last change. + + 2001-02-11 Richard Henderson + + * fold-const.c (split_tree): Don't assume a constant isn't splittable. + (fold): Don't assume a constant isn't foldable. + * tree.c (build): Set TREE_CONSTANT for an expression with no + side-effects and constant operands. + (build1): Likewise. + + 2001-02-10 Richard Henderson + + * jump.c (squeeze_notes): Revert 2000-05-12 change. + + 2001-02-10 Anthony Green + + * cpp.texi (Standard Predefined): Add documentation for + __OPTIMIZE_SIZE__. + + * c-common.c (combine_strings): Improve warning message. + + 2001-02-10 Geoffrey Keating + + * config/rs6000/sysv4.h (LINK_TARGET_SPEC): Use two dashes for + --oformat. + * config/rs6000/sysv4le.h (LINK_TARGET_SPEC): Likewise. + + Fri Feb 9 15:05:27 2001 Christopher Faylor + + * config/i386/t-cygwin (T_CPPFLAGS): Use correct location for + CYGWIN_CROSS_DIR. + + 2001-02-09 Alexandre Oliva + + * config/sh/sh.md (sibcalli, sibcalli_pcrel, sibcalli): Set + fp_mode attribute. + + 2001-02-09 Nick Clifton + + * config/arm/arm.md: Change output contraint on post inc + load/store multiple patterns to be a read/write contraint. + + 2001-02-09 Neil Booth + + * gcc.c (cpp_options): Delete .d files on error. Don't delete + .o files when using the -M options. + + 2001-02-08 Franz Sirl + David Edelsohn + + * config/rs6000/rs6000.c (output_toc): Allow 32-bit targets to + handle DImode constants. Use one TOC entry for SImode and smaller + constants, aligned properly. + + 2001-02-08 Jason Merrill + + * config/arm/arm.c (arm_expand_prologue): Do tell the dwarf2 backend + about the SP adjustment for saving the static chain pointer. + * dwarf2out.c (dwarf2out_frame_debug_expr): Use the specified + offset when setting a temporary CFA register. + + 2001-02-08 Chandrakala Chavva + + * config.gcc : New targets, i386-*-chorusos*, sparc-*-chorusos*, + powerpc-*-chorusos* . + * config/rs6000/chorus.h : New file. + * config/i386/chorus.h : New file. + * config/sparc/chorus.h : New file. + * config/sparc/t-chorus-elf : New file. + + 2001-02-08 David Edelsohn + + * config/rs6000/rs6000.h (ASM_OUTPUT_SYMBOL_REF): Move from here ... + * config/rs6000/aix.h (ASM_OUTPUT_SYMBOL_REF): ... to here. + * config/rs6000/aix51.h (CPLUSCPLUS_CPP_SPEC): Define it. + (__WCHAR_TYPE__): Correct macro name. + + 2001-02-08 Richard Henderson + + * config/i386/i386.c (ix86_frame_pointer_required): New. + (ix86_setup_frame_addresses): New. + (struct machine_funciton): Add accesses_prev_frame. + * config/i386/i386.h (FRAME_POINTER_REQUIRED): Call + ix86_frame_pointer_required. + (SUBTARGET_FRAME_POINTER_REQUIRED): New. + (SETUP_FRAME_ADDRESSES): New. + * config/i386/i386-protos.h: Update. + * config/i386/sco5.h (SUBTARGET_FRAME_POINTER_REQUIRED): Rename + from FRAME_POINTER_REQUIRED. + * config/i386/svr3gas.h: Likewise. + * config/i386/sysv3.h: Likewise. + * config/i386/v3gas.h: Likewise. + + 2001-02-08 Richard Henderson + + * config/sparc/sparc.c (function_arg_record_value_3): Fix + calculation of the number of integer registers required. + (function_arg_record_value): Likewise. + + 2001-02-08 Jason Merrill + + * diagnostic.c (internal_error): Say "confused" after 1 error, not + two. Print file and line with "confused" message. + + * dwarf2out.c (dwarf2out_line): Include filename in -dA output. + + Thu Feb 8 11:21:28 2001 Richard Kenner + + * rtlanal.c (remove_node_from_expr_list): Correctly update PREV. + + 2001-02-08 Bernd Schmidt + + * final.c (cleanup_subreg_operands): The address of a MEM can + contain SUBREGs. + + * config/ia64/ia64.c (ia64_variable_issue): Call group_barrier_needed_p + for asms, too. + + 2001-02-08 Joseph S. Myers + + * gcc.texi (Incompatibilities): Update documentation of + preprocessing numbers. + + 2001-02-07 Jakub Jelinek + + * c-decl.c (finish_enum): Revert part of 2000-01-05 change. + + 2001-02-07 Mark Mitchell + + * config/rs6000/aix43.h (CPLUSCPLUS_CPP_SPEC): Define it. + + * defaults.h (CPLUSPLUS_CPP_SPEC): New macro. + * gcc.c (struct compiler): Add cpp_spec field. + (input_file_compiler): New variable. + (do_spec_1): Allow a particular compiler to handle `%C' + specially. + (main): Store the current compiler in input_file_compiler. + * tm.texi (CPLUSPLUS_CPP_SPEC): Document. + + 2001-02-07 Zack Weinberg + + * cpphash.h (struct spec_nodes): Add n_true and n_false. + * cppinit.c (cpp_create_reader): Initialize them. + (append_include_chain): cxx_aware arg might be unused. + * cppexp.c (lex): In C++ mode, recognize 'true' and 'false' + keywords and give them their phase 7 meaning. Pedwarn about + this unless '__bool_true_false_are_defined' is defined. + + 2001-02-07 Alexandre Oliva + + * lcm.c (optimize_mode_switching): Emit mode_set before the + JUMP_INSN of an abnormal edge. + + 2001-02-07 Bernd Schmidt + + * builtins.c (expand_builtin_setjmp_receiver): Emit an ASM_INPUT as + a scheduling barrier at the end. + + * tm.texi (MD_INIT_BUILTINS, MD_EXPAND_BUILTIN): Document. + + 2001-02-07 Alexandre Oliva + + * config/sh/sh.md (reload_outsf): Removed. + (movsf_ie): Introduce constraints for FPUL loads and stores. + (reload_insf): Broaden the output constraint. + + * config/elfos.h (INT_ASM_OP): Don't define it if it's already + defined. + * config/sh/sh.h (INT_ASM_OP, ASM_OUTPUT_CONSTRUCTOR, + ASM_OUTPUT_DESTRUCTOR): Copy definitions from config/elfos.h. + + 2001-02-06 Chandrakala Chavva + + * final.c: Revert my previous changes. + * output.h: Make profile_label_no extern. + * config/rs6000/rs6000.c (output_profile_hook): Use standard functions + for generating label. + + 2001-02-06 Laurynas Biveinis + + * config/i386/djgpp.h: Add comments about standard paths. + (MD_EXEC_PREFIX): Undefine before defining. + (MD_STARTFILE_PREFIX): New. + + 2001-01-30 Bruce Korb + + fixinc/fixincl.c(process): Emit error message only if appropriate :) + (load_file): do not rely on load_file_data() to close file pointer + fixinc/fixlib.c(load_file_data): do not close passed in file pointer + fixinc/inclhack.def(irix_limits_const): add test_text + + 2001-02-06 Neil Booth + + * cppexp.c (parse_defined): Improve diagnostics for invalid + syntax. + + 2001-02-06 Neil Booth + + * cppmacro.c (cpp_get_token): Avoid pasting after a builtin. + + 2001-02-06 Mark Mitchell + + * config/rs6000/rs6000.h (ASM_OUTPUT_SYMBOL_REF): Define. + * config/rs6000/rs6000-protos.h (rs6000_output_symbol_ref): Declare. + * config/rs6000/rs6000.c (VTABLE_NAME_P): New macro. + (rs6000_output_symbol_ref): New function. + (output_toc): Use VTABLE_NAME_P. + + Tue Feb 6 07:54:51 2001 Richard Kenner + + * print-tree.c (print_node, case PARM_DECL): + Print DECL_ARG_TYPE and DECL_ARG_TYPE_AS_WRITTEN. + + * stor-layout.c (reference_types_internal): New variable. + (internal_reference_types): New function. + (layout_type, case REFERENCE_TYPE): Make Pmode if internal. + * tree.h (internal_reference_types): New declaration. + + * cse.c (find_best_addr): Fix typo in computing cost. + + Mon Feb 5 21:56:16 2001 Richard Kenner + + * combine.c (nonzero_bits, case PLUS): If pointers extend unsigned + and this is the sum of a pointer and a constant, we know the result + did not overflow. + (num_sign_bit_copies, case PLUS): Likewise. + * explow.c (convert_memory_address): Remove opposite SUBREG. + * function.c (instantiate_new_reg): New function (from common code). + (instantiate_virtual_regs_1): Call it. + For PLUS, handle if (plus (subreg (virt-reg) (const_int)) + if pointers sign- or zero-extend. + * simplify-rtx.c (simplify_unary_operation, case ZERO_EXTEND): + If pointers extend unsigned, use inside of SUBREG. + (simplify_unary_operation, case SIGN_EXTEND): Likewise, if sign extend. + + 2001-02-05 Benjamin Kosnik + + * Makefile.in (-DGPLUSPLUS_TOOL_INCLUDE_DIR): Change to target + subdir of gcc_gxx_include_dir. + (gcc_gxx_target_include_dir): Remove. + + 2001-02-05 Jeffrey Oldham + + * dwarf2out.c: Revise DWARF2 Abbreviation Glossary comments. + (dwarf2out_frame_debug_expr): Revise introductory comments to add + a high-level description. + + 2001-02-05 Chandrakala Chavva + + * final.c: Move the declaration of profile_label_no to ... + * output.h: ... here. + * function.c (expand_function_start): Call PROFILE_HOOK. + * config/rs6000/aix.h: Define PROFILE_HOOK. + * config/rs6000/rs6000-protos.h: output_profile_hook new. + * config/rs6000/rs6000.c (output_profile_hook): Define. + (output_prolog): Do nothing for ABI_AIX as it is taken care by + output_profile_hook. + tm.texi : Explain new macro PROFILE_HOOK. + + 2001-02-06 Hans-Peter Nilsson + + * extend.texi (Extended Asm): Do not say that semicolon is always + a valid line-breaking character for GNU assemblers. Use + newline-tab as the most commonly supported syntax. Use + newline-tab rather than semicolon in multi-insn examples. + + 2001-02-05 Franz Sirl + + * Makefile.in (gcc_gxx_target_include_dir): Use $(target_alias). + + 2001-02-05 Franz Sirl + David Edelsohn + + * config/rs6000/rs6000.c (rs6000_return_addr): Use PIC + code for AIX, even without flag_pic. + + 2001-02-05 Jakub Jelinek + + * c-typeck.c (common_type): push and pop binding level around + calling common_type on function parameters. + + Mon Feb 5 14:30:37 2001 Christopher Faylor + + * config/i386/cygwin.h (CPP_SPEC): Add missing space after -idirafter. + + Mon Feb 5 11:23:16 2001 Richard Kenner + + * config/mips/mips.c (override_options): Fix typo in last change. + (mips_make_temp_file): Call fatal_io_error, not pfatal_with_name. + (mips_asm_file_end): Likewise; also pass more args to fatal_io_error. + + 2001-02-05 Nathan Sidwell + + * invoke.texi (-fdump-class-layout): Document. + (-fdump-translation-unit): Use `=' as filename separator. + + 2001-02-05 Mark Mitchell + + * Makefile.in (s-mlib): Don't build multilibs if + --disable-multilib. + (DRIVER_DEFINES): Adjust accordingly. + (gcc.o): Likewise. + (protoize.o): Likewise. + (unprotoize.o): Likewise. + * configure.in: Recognize --enable-multilib. + + 2001-02-04 Mark Mitchell + + * Makefile.in (DRIVER_DEFINES): Fix quoting. + + * Makefile.in (site.exp): Always set HAVE_LIBSTDCXX_V3. + * configure.in: Remove --enable-libstdcxx_v3 support. + * configure: Regenerated. + + Sun Feb 4 15:52:44 2001 Richard Kenner + + * config/avr/avr.h (ASM_OUTPUT_REG_PUSH, ASM_OUTPUT_REG_POP): + Call abort instead of fatal. + (TRAMPOLINE_TEMPLATE): Call internal_error instead of fatal. + * config/dsp16xx/dsp16xx.h (FUNCTION_PROFILER): Likewise. + (FUNCTION_BLOCK_PROFILER, BLOCK_PROFILER): Likewise. + (TRAMPOLINE_TEMPLATE, INITIALIZE_TRAMPOLINE): Likewise. + (ASM_OUTPUT_REG_PUSH, ASM_OUTPUT_REG_POP): Likewise. + * config/rs6000/rs6000.h (RETURN_ADDRESS_OFFSET): Likewise. + + * diagnostic.h (set_internal_error_function): Renamed. + * toplev.h (internal_error): Renamed from fatal. + (pfatal_with_name): Deleted. + (fatal_io_error): Now has printf-style arguments. + * diagnostic.c (pfatal_with_name): Deleted. + (fatal_io_error): Rework to have args in printf-style. + (set_internal_error_function): Renamed from set_fatal_function. + (internal_error): Renamed from fatal. + (error_recursion, fancy_abort): Call internal_error instead of fatal. + * dwarf2out.c (get_cfa_from_loc_descr): Likewise. + * emit-rtl.c (gen_realpart, gen_imagpart): Likewise. + * expr.c (check_max_integer_computation_mode, expand_expr): Likewise. + * flow.c (verify_flow_info): Likewise. + * config/arm/arm.c (thumb_unexpanded_epilogue): Likewise. + * config/mips/mips.c (save_restore_insns): Likewise. + + * except.c (duplicate_eh_handlers): Call abort instead of fatal. + * flow.c (verify_flow_info): Likewise. + * config/arm/arm.c (thumb_load_double_from_address): Likewise. + * config/avr/avr.c (pttreg_to_str, unique_section): Likewise. + (avr_normalize_condition): Likewise. + * config/c4x/c4x.c (c4x_emit_libcall, c4x_valid_operands): Likewise. + * config/dsp16xx/dsp16xx.c (dsp16xx_reg_class_from_letter): Likewise. + (limit_reload_class, double_reg_to_memory): Likewise. + (print_operand_address, emit_1600_code_shift): Likewise. + (gen_tst_reg, gen_compare_reg): Likewise. + * config/m68hc11/m68hc11.c (m68hc11_emit_libcall): Likewise. + * config/dsp16xx/dsp16xx.c (dsp16xx_invalid_register_for_compare): + Deleted. + * config/dsp16xx/dsp16xx.md (unnamed cmphi): Call abort instead of it. + + * c-parse.in (methoddef): Call fatal_error instead of fatal. + * objc/objc-act.c (build_ivar_chain): Likewise. + * dwarfout.c (dwarfout_init): Call fatal_io_error instead of + pfatal_with_name. + * graph.c (clean_graph_dump_file): Likewise. + * profile.c (init_branch_prob): Likewise. + * objc/objc-act.c (objc_init): Likewise. + + * config/arm/arm.c (arm_override_options): Make errors non-fatal. + * config/avr/avr.c (avr_override_options): Likewise. + * config/c4x/c4x.c (c4x_expand_prologue): Likewise. + * config/dsp16xx/dsp16xx.c (function_prologue): Likewise. + * config/h8300/h8300.c (h8300_init_once): Likewise. + * config/mips/mips.c (override_options): Likewise. + * config/i386/i386.c (override_options): Likewise, rework. + * config/m68k/m68k.c (override_options): Likewise. + + * config/dsp16xx/dsp16xx.c (print_operand): Call output_operand_lossage + instead of fatal. + * config/mips/mips.c (print_operand): Likewise. + * hash.c (hash_allocate): Don't check for failure returns from + obstack functions that can't fail. + (hash_table_init_n, hash_table_init): Likewise; also now return void. + * hash.h (hash_table_init_n, hash_table_init): Now return void. + * objc/objc_act.c (objc_check_decl): Remove unneeded fatal call. + (get_object_reference): Likewise. + + 2001-02-04 Nick Clifton + + * config/arm/arm.c (all_cores): Add 710T, 720T, 740T, 940T, 9e, + StrongARM1110, 10TDMI, and 1020T. + + 2001-02-04 Kaveh R. Ghazi + + * mips.h (MULTILIB_ISA_DEFAULT): Don't use #elif. + + 2001-02-04 Alexandre Oliva + + * config/sh/sh.md (movdf load split): Pass register number to + FP_OR_XD_REGISTER_P. + + 2001-02-04 Mark Mitchell + + * cppinit.c (BC): New macro. + (builtin_array): Add __GXX_WEAK__. + * cpplib.h (builtin_type): Add BT_WEAK. + * cppmacro.c (builtin_macro): Handle BT_WEAK. + * defaults.h (SUPPORTS_ONE_ONLY): Define. + * varasm.c (SUPPORTS_ONE_ONLY): Do not define. + + 2001-02-03 Jakub Jelinek + + * cppinit.c (append_include_chain): Honor NO_IMPLICIT_EXTERN_C. + + 2001-02-03 Neil Booth + + * cpphash.h: Rename _ALIGN POOL_ALIGN. + * cpplex.c (new_chunk, _cpp_pool_reserve): Update. + + 2001-02-03 Neil Booth + + * cpphash.h: Rename ALIGN _ALIGN. + * cpplex.c (new_chunk, _cpp_pool_reserve): Update. + + Fri Feb 2 23:15:29 2001 Christopher Faylor + + * config/i386/cygwin.h (CPP_SPEC): Reorganize YA to better handle cross + compilation environment. + * config/i386/t-cygwin (T_CPPFLAGS): Define CYGWIN_CROSS_DIR to allow + control over location of cygwin includes and libs. + + 2001-02-03 Michael Hayes + + * md.texi (Standard Names): remove reference to spur.md. + + 2001-02-03 Michael Hayes + + * c4x.c (group1_reg_operand, group1_mem_operand, arx_reg_operand, + c4x_arn_reg_operand, c4x_arn_mem_operand): Do not check register + number before reload. + (c4x_adjust_cost): Return zero before reload. + * c4x.md (load_immed_address+1, load_immed_address+2): Do not + split before reload. + + 2001-02-03 Herman A.J. ten Brugge + + * c4x.c (c4x_hard_regno_rename_ok): New. + * c4x-protos.h (c4x_hard_regno_rename_ok): New. + * c4x.h (HARD_REGNO_RENAME_OK): Define. + + Fri Feb 2 20:03:50 2001 Richard Kenner + + * diagnostic.h: Add missing "extern" in all declarations. + + 2001-02-02 Alex Samuel + + * Makefile.in (gcc_gxx_target_include_dir): Generate dynamically + as for gcc_gxx_include_dir. + + 2001-02-02 Neil Booth + + * cpp.texi, invoke.texi: Update -Wtraditional documentation. + + 2001-02-02 Alexandre Oliva + + * config/sh/sh.c (output_far_jump): Don't use braf on SH1. Emit + label before alignment to be used as the braf base address. + * config/sh/sh.md (length): Use longer lengths for SH1 PIC far + branches. + (casesi_jump_2): Require at least TARGET_SH2. + + * config/float-sh.h (LDBL_EPSILON, LDBL_MIN, LDBL_MAX): Prevent + truncation to 32-bit doubles on -m3e and -m4-single-only. + + 2001-02-02 Mark Mitchell + + * gcc.c (init_gcc_specs): New function. Make -shared-libgcc + the default when building a shared object. + (init_spec): Use it. + * testsuite/lib/g++.exp: Include the directory where libgcc + is located to the LD_LIBRARY_PATH list. + * invoke.texi (-shared-libgcc): Document the cases in which + GCC defaults to using the shared libgcc. + + 2001-02-02 Alexandre Oliva + + * config/fp-bit.h (MAX_USI_INT, MAX_SI_INT): Don't assume + unsigned is wide enough. + (BITS_PER_SI): New. + * config/fp-bit.c (_fpmul_parts): Don't assume 32-bits SI. + (si_to_float): Likewise. + (float_to_si, float_to_usi): Use BITS_PER_SI. + + 2001-02-01 Jeffrey Oldham + + * dwarf2out.c: Added explanation of abbreviations. + (def_cfa_1): Added comments listing DWARF2 instructions. + (cfa_temp_reg): Removed in favor of cfa_temp. + (cfa_temp_value): Removed in favor of cfa_temp. + (cfa_temp): New global variable. + (dwarf2out_frame_debug_expr): Added extensive introductory + comments explaining the function's transformations. Revised to + use cfa_temp. Added some rtx checking. Generalize IOR case. + (dwarf2out_frame_debug): Revised to use cfa_temp. + (output_aranges): Cast as "unsigned" to avoid warning. + * rtl.texi (RTX_FRAME_RELATED_P): Revise entry to emphasize better + explain which instructions must be marked. + + 2001-02-01 Richard Henderson + + * local-alloc.c (update_equiv_regs): Copy INSN_CODE to the + new instruction. + + 2001-02-01 Alexandre Oliva + + * config/sh/crt1.asm (main_k): Modified so that start calls + ___setup_argv_and_call_main. + + 2001-02-01 Neil Booth + + * cpphash.h (struct cpp_buffer): Move saved_flags from cpp_reader. + * cpplex.c (_cpp_lex_token): New token picks up the saved flags, + and AVOID_LPASTE is cleared on meeting an unescaped newline. + * cppmacro.c (builtin_macro): Set builtin flags here. + (paste_all_tokens): Preserve AVOID_LPASTE on pasted token. + (replace_args): Clarify intent. + (cpp_get_token): Macro expansion tokens get the saved flags. + Update. + * cppmain.c (scan_buffer): Remove now-redundant print.printed + check. + + 2001-02-01 Jeffrey Oldham + + * config/mips/iris6.h (SUPPORTS_INIT_PRIORITY): Reverse change of + 2001-Jan-29. + + Thu Feb 1 07:22:41 2001 Richard Kenner + + * builtins.c (expand_builtin_alloca): allocate_dynamic_stack_space + returns Pmode pseudo, but we need ptr_mode. + * explow.c (allocate_dynamic_stack_space): Use plus_constant. + Remove bogus conversions; use HOST_WIDE_INT for size. + Don't use TARGET if wrong mode. + + * config/i386/i386.c (ix86_compute_frame_size): Allow + stack_alignment_needed to be non-default even if size is zero. + + 2001-01-31 Alan Modra + + * pa.c (hppa_init_pic_save): New function. + * pa.h (hppa_init_pic_save): Declare. + * pa.md (call, call_value, sibcall, sibcall_value): Use + the above instead of duplicated code. + + * pa.c (hppa_encode_label): Correct size of alloca buffer + so we don't overrun it. Correct leading `*' case. + * pa.h (STRIP_NAME_ENCODING): Simplify now that we don't + need to handle `*@'. + (FUNCTION_NAME_P): Likewise. + + 2001-01-31 Richard Henderson + + * config.gcc (alpha-osf5): Use float-i128.h. + + * config/float-i128.h (FLT_EVAL_METHOD, DECIMAL_DIG): Define. + * config/float-i32.h: Likewise. + * config/float-i64.h: Likewise. + * config/float-sh.h: Likewise. + * config/float-sparc.h: Likewise. + + 2001-01-31 DJ Delorie + + * expmed.c (extract_bit_field): allow non-integral modes if we + want to extract a whole register from itself. + + 2001-01-31 Jakub Jelinek + + * c-typeck.c (set_init_index): If first is equal to last, assume as + if it was not a range at all. + + 2001-01-31 Alexandre Oliva + + * config/fp-bit.c: Include tm.h. + (float_to_si): Don't assume SImode is 32-bits wide. + (float_to_usi): Likewise. + + 2001-01-31 Joseph S. Myers + + * c-parse.in (structsp): Pedwarn when "enum foo" refers to an + incomplete type. + (typename): Call pending_xref_error after parsing typed_typespecs. + * c-decl.c (lookup_tag): Give error immediately rather than + leaving it pending if the tag of the wrong type is in the same + binding level. + (xref_tag): Don't pedwarn for forward declarations of enum types + here. + * gcc.texi (Actual Bugs): Remove entry for misuse of struct, union + and enum tags. + + 2001-01-31 Alexandre Oliva + + * config/float-sparc.h (LDBL_MAX) [sparc32]: Fix typo. + + 2001-01-31 Neil Booth + + * cpplib.c (T_ELIF): Move to STDC89, not that it matters. + (_cpp_handle_directive): Suggest not using #elif with -Wtraditional. + + 2001-01-31 Neil Booth + + * cpphash.h (struct cpp_reader): New saved_flags. + * cppmacro.c (cpp_get_token): Use saved_flags to remember + to avoid a paste after a pasted token. + + 2001-01-31 Alexandre Oliva + + * libgcc2.h (Wtype_MAX, Wtype_MIN): Define. + * libgcc2.c (__fixunssfSI, __fixunsdfSI, __fixunsxfSI): Use + Wtype_MIN instead of LONG_MIN. + + 2001-01-30 Jeffrey Oldham + + * fixinc/fixincl.tpl: Add 2001 to copyright. Change name of + README file. + * fixinc/fixincl.x: Regenerated. + * fixinc/inclhack.def (irix_limits_const): New definition to + convert "const" to "__const" in limits.h. + + 2001-01-30 Jeffrey Oldham + + * fixinc/genfixes (AG): Fix "autogen4" thinko. + + 2001-01-30 Herman A.J. ten Brugge + + * regmove.c (try_auto_increment): Change REG_DEAD into REG_UNUSED + when register dies in the insn. + + 2001-01-30 Neil Booth + + * diagnostic.c (fatal): Fix word wrap. + + 2001-01-30 Alexandre Oliva + + * combine.c (try_combine): Fix SUBREG setting for + HOST_BITS_PER_WIDE_INT >= 2 * BITS_PER_WORD. + + 2001-01-30 Franz Sirl + + * jump.c (comparison_dominates_p): Don't try to handle UNKNOWN + comparison codes. + + 2001-01-30 Neil Booth + + * c-decl.c (c_expand_body): Check TYPE_SIZE_UNIT (ret_type) + is not NULL. + * toplev.c (decode_W_option): Update warn_larger_than + unconditionally for each processed switch. + + 2001-01-30 John David Anglin + + * pa.c (pa_init_machine_status): Initialize pic_offset_table_save_rtx + to NULL_RTX. + (hppa_expand_prologue): Delete code to save pic offset table register + in the function prologue. + * pa.h (PIC_OFFSET_TABLE_SAVE_RTX): Correct type in comment. + * pa.md (call, call_value, sibcall, sibcall_value): Save the pic offset + table register at the beginning of the function after the prologue. + + 2001-01-29 lars brinkhoff + + * tm.texi (PUSH_ROUNDING): Remove duplicate lines. + + 2001-01-29 John David Anglin + Jeff Law + + * pa.md (return): Revise comment for trivial return. + (return_internal): Non-trivial return pattern for non-PIC code. + (return_internal_pic): Non-trivial return pattern for PIC code. + It uses the PIC register to ensure it is restored after + function calls. + (epilogue): Generate appropriate return for PIC and non-PIC code. + + Mon Jan 29 23:53:14 2001 Christopher Faylor + + * config/i386/cygwin.h: Fix -mno-cygwin search path for link. + + 2001-01-29 DJ Delorie + + * combine.c (if_then_else_cond): Pass the correct mode to + operand_subword() for constants. + + Mon Jan 29 20:38:19 2001 Christopher Faylor + + * config/i386/cygwin.h: Add w32api to include search. Search different + directories in a cross-build environment. + + 2001-11-29 Tim Josling + + * tree.h (TYPE_STUB_DECL): Add documentation. + + 2001-11-29 Laurynas Biveinis + + * sdbout.c (sdbout_one_type): Skip types with indeterminate size. + (sdbout_field_types): Likwise. Fix use of host_integerp. + + 2001-01-29 Thomas Pfaff + + * mingw32.h: Override STARTFILE_SPEC and LINK_SPEC declared in + cygwin.h. + + 2001-01-29 Jeffrey Oldham + + * config/mips/iris6.h (SUPPORTS_INIT_PRIORITY): Revise definition + to use flag_gnu_linker. + + 2001-01-29 Neil Booth + + * cpplib.c (T_BAD_DIRECTIVE): Remove. + (_cpp_init_stacks): Loop from 0 to N_DIRECTIVES - 1. + + 2001-01-29 Joseph S. Myers + + * tree.c, tree.h (build_parse_node): Remove; was identical to + build_nt. + * c-lang.c (start_cdtor), objc/objc-act.c + (build_module_descriptor): Use build_nt instead of + build_parse_node. + + 2001-01-29 Jakub Jelinek + + * config/i386/i386.md (addqi_1_lea): Fix mode (QI instead of HI). + (testqi_1, andqi_2): If widening to SImode, make sure CONST_INT does + not have any upper bits set. + + 2001-01-29 Phil Edwards + + * COPYING.LIB: Update to LGPL 2.1 from the FSF. + + 2001-01-28 Kaveh R. Ghazi + + * stmt.c (estimate_case_costs): Use integer_minus_one_node. + + * tree.c (build_common_tree_nodes_2): Set integer_minus_one_node. + + * tree.h (tree_index): Add new element TI_INTEGER_MINUS_ONE. + (integer_minus_one_node): Define. + + 2001-01-28 Alexandre Oliva + + * Makefile.in (bootstrap2-lean): Fix typo. + + 2001-01-28 Neil Booth + + * cpphash.c (_cpp_cleanup_hashtable, _cpp_lookup_with_hash) + : Don't set fe_value. + * cpplib.h (AVOID_LPASTE): New flag. + (struct cpp_hashnode): Remove fe_value. + * cpplex.c (cpp_avoid_paste): Don't paste '.' with a number. + * cppmacro.c (builtin_macro): Don't set flags here. + (replace_args): Set AVOID_LPASTE flag on first token of an + argument, and the token following it. + (cpp_get_token): Set AVOID_LPASTE flag on first token of a + macro expansion, and on the token following it. Do it for + builtins too. + * cppmain.c (scan_buffer): Avoid pasting only flagged tokens. + + 2001-01-27 Richard Henderson + + * config/alpha/t-ieee: Remove multilibbing. + (TARGET_LIBGCC2_CFLAGS): Add -mieee. + + 2001-01-27 Kaveh R. Ghazi + + * configure.in: Arrange to include defaults.h in [ht]config.h/tm.h. + + * Makefile.in: Remove all dependencies on defaults.h. + * builtins.c: Don't include defaults.h. + * c-common.c: Likewise. + * c-decl.c: Likewise. + * c-pragma.c: Likewise. + * c-typeck.c: Likewise. + * combine.c: Likewise. + * i386.c: Likewise. + * frame-ia64.c: Likewise. + * cppexp.c: Likewise. + * crtstuff.c: Likewise. + * dbxout.c: Likewise. + * dwarf2out.c: Likewise. + * dwarfout.c: Likewise. + * emit-rtl.c: Likewise. + * except.c: Likewise. + * expr.c: Likewise. + * final.c: Likewise. + * frame-dwarf2.c: Likewise. + * libgcc2.c: Likewise. + * optabs.c: Likewise. + * profile.c: Likewise. + * sdbout.c: Likewise. + * toplev.c: Likewise. + * tradcif.y: Likewise. + * tree.c: Likewise. + * varasm.c: Likewise. + + 2001-01-27 Kaveh R. Ghazi + + * builtins.c (expand_builtin_fputs): Use size_one_node when + transforming into fwrite. + + 2001-01-27 Joseph S. Myers + + * extend.texi (Attribute Syntax): New section. + + 2001-01-27 Michael Sokolov + + * fixproto: Correctly install synthesised unistd.h and stdlib.h when + they didn't need fixing. + + 2001-01-27 Janis Johnson + + * config.gcc (i[34567]86-sequent-{ptx4*,sysv4*}): Use usegas.h + if appropriate. + * config/ptx4.h: Several fixes to build on DYNIX/ptx v4.[456], and + to remove macro definitions that are duplicated from elfos.h. + + 2001-01-27 Richard Henderson + + * config/i386/sco5gas.h: Move ... + * config/usegas.h: ... here. + * config.gcc (i[34567]86-*-sco3.2v5) [tm_file]: Update. + + 2001-01-27 Jakub Jelinek + + * c-typeck.c (struct constructor_stack): Add range_stack member. + (really_start_incremental_init): Clear it. + (push_init_level): Save constructor_range_stack and clear it if + pushing explicit braces. + (pop_init_level): abort if constructor_range_stack is non-zero at + explicit closing brace. Restore saved constructor_range_stack if + not implicit. + + 2001-01-27 Alexandre Oliva + + * expr.c (emit_move_insn): Add REG_EQUAL note when constant loaded + into register was forced into memory. + + 2001-01-27 Alexandre Oliva + + * Makefile.in: Remove uses of + before $(MAKE). + + 2001-01-26 Richard Henderson + + * stmt.c (cost_table): Remove. + (COST_TABLE, cost_table_initialized): New. + (estimate_case_costs): Use the later instead of the former. + (balance_case_nodes): Likewise. + + 2001-01-26 Richard Henderson + + * alias.c (objects_must_conflict_p): Read-only slots may not + conflict despite having the same type. + + 2001-01-27 Michael Hayes + + * loop.c (loop_giv_reduce_benefit): Copy mode size into + int variable. + (check_ext_dependant_givs): Initialise u_start_val and + u_end_val. + (load_mems): Make last_max_reg unsigned. + (try_swap_copy_prop): Use INSN_P and initialise set. + + Fri Jan 26 23:22:58 2001 Denis Chertykov + + * README.AVR : Removed. + + Fri Jan 26 11:37:26 2001 Jeffrey A Law (law@cygnus.com) + + * pa-64.h (text_section): Remove declaration. + + * pa.md (return_internal): Remove mode on PIC register use. + + 2001-01-25 lars brinkhoff + + * tm.texi (DATA_ALIGNMENT, LOCAL_ALIGNMENT, ASM_OPEN_PAREN, + ASM_CLOSE_PAREN): fix typos. + + 2001-01-25 Mark Mitchell + + * acconfig.h: Define `const' to the empty string if neither + __STDC__ nor __cplusplus is defined. + * config.in: Regenerated. + + 2001-01-25 David Edelsohn + + * config.gcc (rs6000-ibm-aix[5-9]*): Change to aix51.h. + * collect2.c (main): Delete importf. Add ".obj" file extension. + (GCC_CHECK_HDR): Handle AIX V5 new magic number. + (aix_std_libs): Add additional AIX libraries to skip. + * config/rs6000/aix.h (MY_ISCOFF): Add AIX V5 new magic number. + * config/rs6000/aix51.h: New file. + + 2001-01-25 Michael Hayes + + * loop.c (loop_call_insn_emit_before, loop_call_insn_hoist): New. + (loop_insn_emit_before): No longer static. + (move_movables): Replace emit_insn_after with loop_insn_emit_after. + (loop_givs_rescan, load_mems): Likewise. + (check_dbra_loop): Replace emit_insn_before with loop_insn_emit_before. + (maybe_eliminate_biv_1): + (move_movables): Replace emit_call_insn_before with + loop_call_insn_hoist. + * loop.h (loop_insn_emit_before): Add. + * unroll.c (copy_loop_body): Replace emit_insn_before with + loop_insn_emit_before. + + 2001-01-25 Neil Booth + + * diagnostic.c (fatal): Request preprocessed source. + + Thu Jan 25 02:01:16 2001 J"orn Rennecke + + * c-decl.c (duplicate_decls): If different_binding_level is nonzero, + olddecl has argument types and newdecl has none, use the argument + types from olddecl. + + 2001-01-24 Ulrich Drepper + + * dwarf2out.c (prefix_of): New function. Determine longest common + prefix of the two arguments. The units are whole path components. + (output_file_names): When adding a new directory find the one entry + with the longest common prefix already in the list. Artificially + generate entry if there is none for this prefix. + Fix test to check whether the zeroth directory entry is used. + + Wed Jan 24 23:51:55 2001 J"orn Rennecke + + * reload1.c (reload_reg_free_for_value_p): New parameter start_regno. + Changed all callers. Take it into account when deciding if a + previously loaded value matches. + + 2001-01-24 Richard Henderson + + * reload.c (find_reloads_subreg_address): Fail the substitution + if the resulting address is insufficiently aligned. + + 2001-01-24 DJ Delorie + + * combine.c (combine_simplify_rtx): If the modes are all VOIDmode, + check the original operand's mode also. + * simplify-rtx.c (simplify_ternary_operation): Ditto. + + 2001-01-24 Joseph S. Myers + + * c-parse.in (cast_expr): Move compound literals from here ... + (primary): ... to here. Use standard terminology "compound + literal" instead of "constructor expression". + + 2001-01-24 Joseph S. Myers + + * gcc.1, cpp.1: Regenerate. + + 2001-01-24 Alexandre Oliva + + * calls.c (emit_library_call_value_1): Memory slot for + pass-by-reference argument should have the mode of the argument, + not of the pointer to it. + + 2001-01-24 Tom Tromey + + * gcc.texi (G++ and GCC): Mention gcj manual. + (Standards): Link to section of manual mentioning gcj/Java + compatibility. + + 2001-01-24 Jakub Jelinek + + * cppfiles.c (_cpp_read_file): Add to dependencies if requested. + * cppinit.c (cpp_start_read): Remove deps_add_dep call. + * tradcpp.c (main): Add -imacros or -include'd dependencies + for -M*. + * cpp.texi (-M, -MM): Document -M -include behaviour. + + 2001-01-24 Roger Collins + + * config/i386/xm-i386.h: Make __i386__ a boolean macro. + + 2001-01-24 Will Cohen + + * config/mips/abi64.h (RETURN_IN_MEMORY): Always take into account + whether registers are 32 bits or 64 bits in size. + + 2001-01-24 Ben Elliston + + * config/m32r/m32r.h (PREDICATE_CODES): Remove m32r_not_same_reg. + + 2001-01-24 Richard Henderson + + * config/alpha/alpha.md (builtin_longjmp_internal): New. + (builtin_longjmp): Use it instead of emit_indirect_jump. + + 2001-01-23 John David Anglin + + * bb-reorder.c (make_reorder_chain_1): Handle case where + jump edge goes to the same block as the fallthru edge. + + 2001-01-23 Jim Wilson + + * dwarf2out.c (dwarf2out_line): Make last_file_num be unsigned. + * frame.h (__ia64_personality_v1): Add prototype. + * libgcc2.c (ia64_throw_helper): Change personality declaration to + prototype form. Add void * cast to first argument to personality + call. + * real.c (e113toe): Surround with INTEL_EXTENDED_IEEE_FORMAT ifdefs. + (asctoe113): Likewise. + * config/ia64/frame-ia64.c: Include eh-common.h. + * config/ia64/ia64-protos.h (sdata_section, sbbs_section): Add + prototypes. + * config/ia64/ia64.c (emit_insn_group_barriers): Add ATTRIBUTE_UNUSED + to dump parameter. + (itanium_split_issue): Add prototype. + (gen_nop_type): Ifdef out. + (find_best_packet): Initialize best_packet. + (ia64_encode_section_info): New local string. Use for ggc_alloc_string + result. + * config/ia64/ia64.h (ASM_OUTPUT_LONG_DOUBLE): Use 0L not 0. + * config/ia64/ia64.md (bsp_value): Add explicit stop bit at start. + (flushrs): Add explicit stop bit at end. + * config/ia64/lib1funcs.asm (__ia64_restore_stack_nonlocal): Change + trailing \ to >. + + 2001-01-23 Chris Demetriou + + * libgcc-std.ver (GCC_3.0): Add __terminate_func_set to list + of EH symbols. + * libgcc2.c (__terminate_func): Make variable static. + (__terminate_set_func): New function to set __terminate_func. + * libgcc2.h (__terminate_func_ptr): New typedef. + (__terminate_set_func): New function. + + 2001-01-23 Richard Henderson + + * flow.c (init_propagate_block_info): Don't consider unchanging + memories for dead frame store elimination. + + 2001-01-23 Richard Henderson + + * varasm.c (UNIQUE_SECTION): Move default implementation ... + * defaults.h: ... here. + + 2001-01-24 Michael Hayes + + * c4x.h (TARGET_LOAD_DIRECT_MEMS): Define. + + 2001-01-23 Neil Booth + + * c-lex.c (lex_charconst): Fix typo: s/p/str. + + 2001-01-23 Franz Sirl + + * rs6000.h (rs6000_return_addr): Move prototype from here... + * rs6000-protos.h (rs6000_return_addr): ...to here. + (rs6000_init_expanders): Delete prototype. + + 2001-01-23 Nick Clifton + + * invoke.texi: Replace , with \, inside @gccoptlist macros. + (Spec Files): Document %B and %j and %. and %v3 and %M and + %{S*&T} spec switches. + + 2001-01-24 Herman A.J. ten Brugge + + * c4x.c (c4x_r11_set_p): Calculate rtx code correctly. + + 2001-01-23 Chris Demetriou + Neil Booth + + * cpperror.c: Merge handlers of PEDWARN and WARNING. + Have -Werror make pedantic warnings errors, like the + rest of GCC. + + 2001-01-23 Phil Edwards + + * c-tree.texi (IDENTIFIER_LENGTH): Fix typo. + + 2001-01-23 Jakub Jelinek + + * integrate.h (struct inline_remap): Add compare_src, compare_mode. + * integrate.c (expand_inline_function): Initialize them. + (subst_constants): If changing COMPARE so that both its arguments + will be VOIDmode and the comparison mode will be lost, note + compare_mode. Use the recorded compare_mode to optimize + IF_THEN_ELSE. + + 2001-01-23 Jason Merrill + + * dwarf2out.c (new_die): Use xcalloc. + (output_die): Abort rather than emit a local reference to offset 0. + + 2001-01-17 Andrew Haley + + * libgcc2.c (get_reg_addr): Don't abort if we haven't got a copy + of a saved register; return NULL instead. + (copy_reg): Take a pointer to a source register rather than a + frame_state. + (next_stack_level): Remember the address in the stack frame of all + saved registers. + Use the saved register pointer array as the source of the CFA. + (throw_helper): Rewrite. Unwind once rather than twice and keep + track of saved registers as we go. + + 2001-01-23 Herman A.J. ten Brugge + + * c4x-protos.h (c4x_legitimize_reload_address): Remove. + * c4x.c (c4x_legitimize_reload_address): Remove. + * c4x.h (LEGITIMIZE_RELOAD_ADDRESS): Rewrite to generate correct + reload address for ldp(k) insn. + + Mon Jan 22 20:53:47 2001 Jeffrey A Law (law@cygnus.com) + + * pa.md (return_internal): Add a USE of the PIC register to ensure + it is restored after each call. + (return expander): Corresponding changes. + + 2001-01-22 Franz Sirl + + * rs6000.h (INIT_EXPANDERS): Delete. + (RETURN_ADDR_RTX): Call rs6000_return_addr(). + * rs6000.c (rs6000_override_options): Call *_machine_status from + here... + (rs6000_init_expanders): ...instead of here. Delete. + (rs6000_mark_machine_status): New function. + (rs6000_init_machine_status): Use xcalloc. + (rs6000_return_addr): Generate RTX for the return address. + (rs6000_ra_ever_killed): New, check if LR was ever destroyed. + (rs6000_stack_info): Use it. + + 2001-01-22 Thomas Pfaff + + * gthr-win32.h: Include errno.h to get a declaration for + EINVAL and _mingw.h if the target is mingw32. + + 2001-01-22 Andres Felipe Vargas + + * cpp.texi: Correct typos. + + Mon Jan 22 13:59:09 2001 Richard Kenner + + * explow.c (probe_stack_range): Ensure value passed to + stack_check_libfunc is ptr_mode, not Pmode. + + Mon Jan 22 16:53:06 2001 J"orn Rennecke + + * recog.c (validate_replace_rtx_1): In ZERO_EXTEND / SIGN_EXTEND + case, don't use operand_subword to calculate a SUBREG that is + wider than a word. + + * rtl.texi: Comparisons yield 0 or STORE_FLAG_VALUE. + + 2001-01-22 Herman A.J. ten Brugge + + * c4x.c (c4x_valid_rptb_p, c4x_label_ref_used_p): New functions. + (c4x_rptb_insert): Call c4x_valid_rptb_p to check if repeat block is + valid. If not replace it by equivalent insns. + + 2001-01-22 Herman A.J. ten Brugge + + * c4x.c (c4x_check_legit_addr): Only check CONST. Not if CONST + contains SYMBOL_REF, LABEL_REF and CONST_INT. + (c4x_U_constraint, symbolic_address_operand): Likewise. + (c4x_immed_float_constant): Do not check if CONST_DOUBLE is in + memory. + (c4x_r11_set_p, c4x_check_laj_p): New functions. + * c4x-protos.h (c4x_check_laj_p): Add prototype. + * c4x.md (in_annul_slot_3): Do not allow auto-increment in last + anulling slot because of silicon bug. + (laj, lajv): Call c4x_check_laj_p to check for silicon bug. + + 2001-01-22 Alan Modra + + * cppexp.c (parse_charconst): Change `mask' type to agree + with parse_escape. + + 2001-01-21 Richard Henderson + + * config/i386/i386.c (ix86_asm_file_end): Disable putting + pic_label_name in a linkonce section. + + 2001-01-17 Philipp Thomas + + * aclocal.m4 (AM_WITH_NLS): Add -lintl to LIBS if gettext was + found in libintl. + * configure: Regenerate. + + Sun Jan 21 02:38:56 2001 J"orn Rennecke + + * expmed.c (synth_mult, expand_mult_highpart, expand_divmod): Guard + uses of shift_cost, shiftadd_cost and shiftsub_cost with bound checks. + + Sun Jan 21 09:44:17 2001 Denis Chertykov + + * config/avr/avr.c (ret_cond_branch): New argument (reverse) added. + If REVERSE nonzero then condition code in X must be reversed. + (encode_section_info): Optimise if/else. + (avr_function_value): Fix formatting. + + * config/avr/avr.md (branch): Call to ret_cond_branch changed. + (difficult_branch): Likewise. + (rvbranch): Likewise. + (difficult_rvbranch): Likewise. + + * config/avr/avr-protos.h (ret_cond_branch): Prototype changed. + + * config/avr/libgcc.S: Fix comment. + + 2001-01-20 Michael Sokolov + + * sdbout.c (PUT_SDB_DEF): Fix after last bogus change. + + 2001-01-20 Michael Sokolov + + * cppinit.c (INO_T_EQ): Don't use #elif, fix formatting. + + 2001-01-20 Michael Sokolov + + * aclocal.m4 (gcc_AC_FUNC_STRSTR): New macro. + * configure.in (gcc_AC_FUNC_STRSTR): Add invokation. + * configure, config.in: Regenerate. + * Makefile.in (STRSTR, HOST_STRSTR, USE_HOST_STRSTR): New variables. + (LIBDEPS, HOST_LIBDEPS, LIBS, HOST_LIBS): Add strstr handling. + (strstr.o, $(HOST_PREFIX_1)strstr.o): New rules. + (doprint.o): New rule. + + 2001-01-20 Joseph S. Myers + + * c-typeck.c (digest_init): Handle boolean types as scalars. + + Sat Jan 20 12:46:57 2001 Richard Kenner + + * stmt.c (expand_return): Don't return anything if size is zero. + Delete redundant assignment to BYTES. + * expr.c (move_block_from_reg): Do nothing if NREGS is zero. + + 2001-01-20 Marek Michalkiewicz + + * config/avr/avr.h (INIT_TARGET_OPTABS): Remove most of it, was + the same as the default library function names. + * config/avr/avr.md: Document special characters after '%'. + (mulqi3, mulhi3, mulsi3): Call libgcc.S functions ourselves, + knowing which of the call-used registers are really clobbered. + (divmodqi4, udivmodqi4, divmodhi4, udivmodhi4, divmodsi4, udivmodsi4): + New. Both quotient and remainder from one libgcc.S call. + * config/avr/libgcc.S: Optimize mul/divmod for the new insns above, + clobber as few registers as possible. + * config/avr/t-avr (LIB1ASMFUNCS): Adjust for the above changes. + + 2001-01-20 Neil Booth + + * cppmacro.c (funlike_invocation_p): Don't move back up to the + context of the top of the stack. + + 2001-01-20 Jakub Jelinek + + * function.c (fixup_var_refs): Move CALL_PLACEHOLDER handling... + (fixup_var_refs_insns): ...here. + + 2001-01-20 Zack Weinberg + + * function.c (fixup_var_refs_insns): Break up into + fixup_var_refs_insn [body of loop], fixup_var_refs_insns + [loop over entire insn list], and fixup_var_refs_insns_with_hash + [loop over hash table entries]. + (fixup_var_refs): Adjust calls to fixup_var_refs_insns and/or + fixup_var_refs_insns_with_hash, to match above changes. + + 2001-01-19 John David Anglin + + * Makefile.in (ORDINARY_FLAGS_TO_PASS): Add MAKEOVERRIDES variable. + (libgcc.a): Likewise. + (stmp-multilib): Likewise. + (STAGE2_FLAGS_TO_PASS): Likewise. + + 2001-01-19 Alexandre Oliva + + * config/sh/sh.c (prepare_move_operands) [PIC]: Use operands[0] as + temporary if no_new_pseudos. + + 2001-01-19 Neil Booth + + * cppinternals.texi: Update. + + 2001-01-19 Richard Earnshaw + + * arm.c (arm_init_builtins): Re-enable builtins. + + Fri Jan 19 13:02:56 2001 Richard Kenner + + * rtl.texi (SET, CLOBBER): Document PARALLEL as SET_DEST possibility. + * flow.c (mark_set_1, case PARALLEL): Don't require BLKmode, allow + element to be null, and always expect an EXPR_LIST. + * rtlanal.c (reg_overlap_mentioned_p, note_stores): Likewise. + * sched-deps.c (sched_analyze_1): Likewise. + * sched-rgn.c (check_live_1, update_live_1): Likewise. + + * regclass.c (max_set_parallel): New variable. + (reg_scan): Take it into account in computation of max_parallel. + (reg_scan_mark_refs, case SET): Compute it. + + * alias.c (rtx_equal_for_memref_p, case ADDRESSOF): Don't assume + args are REG. + * expr.c (store_constructor): Don't look at MEM_ALIAS_SET unless MEM. + * function.c (assign_parms): Use INTVAL for a CONST_INT. + + 2001-01-19 Jason Merrill + + * dwarf2out.c (gen_subprogram_die): Don't reuse the in-class decl + for the abstract instance of an inline function. + + Fri Jan 19 14:31:35 2001 Alexandre Oliva + J"orn Rennecke + + * reload1.c (move2add_note_store): Treat all registers directly or + indirectly derived from a base register as members of the same set + of values. + (reload_cse_move2add): Adjust accordingly. Take mode and offset + of base register into account. + + Fri Jan 19 09:18:42 2001 J"orn Rennecke + + * alias.c (find_base_value): Recognize TRUNCATE. + (record_set): In PLUS case, invalidate if other summand is also a + base value. + + Thu Jan 18 06:43:04 2001 Richard Kenner + + * flow.c (mark_set_1, case PARALLEL): New case; rework to allow + entry to be EXPR_LIST. + * rtlanal.c (reg_overlap_mentioned_p): Allow PARALLEL in SET to + be an EXPR_LIST (but not null, which other code doesn't allow). + (note_stores): Properly handle PARALLEL in SET. + Recursively call for top-level PARALLEL. + * sched-deps.c (sched_analyze_1): Handle EXPR_LIST in PARALLEL in SET. + * sched-rgn.c (check_live_1, update_live_1): Likewise. + + * config.gcc (rs6000-ibm-aix*, rs6000-bull-bosx): Add rs6000/aix.h. + + 2001-01-18 Neil Booth + + * cpplib.c (_cpp_handle_directive): Use buffer->was_skipping, + not pfile->skipping (== 0). + + 2001-01-17 Nick Clifton + + * config/rs6000/rs6000.c: Add prototypes for {init|free}_ + machine_status. + + 2001-01-17 Jim Wilson + + * invoke.texi (IA-64 options): Improve. + + 2001-01-17 Tom Tromey + + * invoke.texi (Optimize Options): Use `{}' to around @samp + argument. + + 2001-01-17 Aldy Hernandez + + * invoke.texi (-fno-guess-branch-probability): New option. + + Wed Jan 17 13:26:34 2001 Richard Kenner + + * combine.c (try_combine): Don't set i3_subst_into_i2 for + case of making new double-word constant. + Revert last change: instead just test i3_subst_into_i2. + + 2001-01-17 Jakub Jelinek + + * config/i386/i386.md (cmpqi_minus_1): Use {b} for QImode operation. + Use q constraints instead of r. + + Tue Jan 16 22:23:04 2001 Alan Modra (alan@linuxcare.com.au) + + * config/pa/pa.h (PIC_OFFSET_TABLE_REGNUM_SAVED): Remove. + (machine_function): Define. + (PIC_OFFSET_TABLE_SAVE_RTX) : Define. + * config/pa/pa.c (pa_init_machine_status, pa_mark_machine_status, + pa_free_machine_status): New functions. + (override_options): Set {init,mark,free}_machine_status to above. + (hppa_expand_prologue): Use PIC_OFFSET_TABLE_SAVE_RTX instead of + PIC_OFFSET_TABLE_REGNUM_SAVED. + * config/pa/pa.md: Use PIC_OFFSET_TABLE_SAVE_RTX instead of + PIC_OFFSET_TABLE_REGNUM_SAVED throughout. + * config/pa/pa32-regs.h (CONDITIONAL_REGISTER_USAGE): Remove + references to PIC_OFFSET_TABLE_REGNUM_SAVED. + * config/pa/pa64-regs.h (CONDITIONAL_REGISTER_USAGE): Likewise. + + 2001-01-15 DJ Delorie + + * Makefile.in (gcov.1): Protect against texi2pod/pod2man failing. + (cpp.1): Ditto. + (gcc.1): Ditto. + + Tue Jan 16 17:20:43 2001 Richard Kenner + + * flow.c (propagate_one_insn): Make trying to delete a prologue + or epilogue insn an ICE, not a warning. Allow doing this if + the current function returns with stack pointer depressed. + + * combine.c (try_combine): If i3_subst_into_i2, properly check for + I3 having more than one SET. + + 2001-01-16 Jim Wilson + + * invoke.texi: Document IA-64 options. + + * config/ia64/ia64.c (ia64_print_operand_address): Delete 'B' support. + (fixup_errata): Delete TARGET_A_STEP use. + * config/ia64/ia64.h (MASK_A_STEP, TARGET_A_STEP): Delete. + (TARGET_SWITCHES): Delete -ma-step option. + * config/ia64/ia64.md (all FP patterns): Delete %B0. + (movqicc_astep, movqi_internal_astep, movhicc_astep, + movhi_internal_astep, movsicc_astep, movsi_internal_astep, movdi+1, + movdi_internal_astep, movsfcc_astep, movsf_internal_astep, + movdfcc_astep, movdf_internal_astep, movtfcc_astep, + movtf_internal_astep, cmovdi_internal_astep, cmovsi_internal_astep): + Delete. + (movqi_internal, movhi_internal, movsi_internal, movdi_internal, + movsf_internal, movdf_internal, movtf_internal, cmovdi_internal, + cmovsi_internal): Delete ! TARGET_A_STEP check. + + 2001-01-16 Gerald Pfeifer + + * gcc.texi (Bug Lists): Do not mention newsgroups nor the + possibility to report bugs via postal mail. Change a URL and + merge in a nearly duplicate statement... + (Bug Reporting): ...from here. + (Service): Refer to the Bug Reporting section instead of + duplicating an URL. + (Contributing): Remove trivial explanations concerning snapshots. + + 2001-01-16 Alan Modra + + * cppmain.c (general_init): Don't use ANSI prototype. + + 2001-01-16 Tom Tromey + + * gcc.c (cpp_options): Added `*' to specs for -MF, -MQ, and -MT. + + 2001-01-16 Richard Henderson + + * config/i386/i386.h: Fix comment typo. + * config/i386/i386.md (shift+compare pattern names): s/cmpno/cmp/ + (ashr+compare patterns): Match CCGOCmode not CCNOmode. + + 2001-01-16 Phil Edwards + + * gcc.c: Revert previous -fsyntax-only-related change; move + to cp/g++spec.c. + + 2001-01-16 Jakub Jelinek + + * config/i386/i386.c (fcmov_comparison_operator): Only initialize + inmode after checking GET_CODE (op). + + 2001-01-16 Richard Henderson + + * flow.c (struct propagate_block_info): Add mem_set_list_len. + (MAX_MEM_SET_LIST_LEN): New. + (propagate_one_insn): Update mem_set_list_len. + (invalidate_mems_from_autoinc): Likewise. + (invalidate_mems_from_set): Likewise. + (mark_used_regs): Likewise. + (init_propagate_block_info): Likewise. Stop collecting memories + when we reach MAX_MEM_SET_LIST_LEN. + (mark_set_1): Likewise. + + 2001-01-16 Richard Henderson + + * unroll.c (precondition_loop_p): Fail if no iteration + variable found. + + 2001-01-16 Phil Edwards + + * gcc.c: When -fsyntax-only is given, do not complain about + unused libraries. + + 2001-01-15 Richard Henderson + + * config/i386/i386.c (asm_output_function_prefix): Remove. + (ix86_asm_file_end): New. + (load_pic_register): Generate pic_label_name into a + statically allocated buffer. + * config/i386/i386-protos.h: Update. + * config/i386/i386.h (ASM_OUTPUT_FUNCTION_PREFIX): Remove. + (ASM_FILE_END): New. + * config/i386/i386afe.h: New file. + * config.gcc (i?86-*-elf) [tm_file]: Use it. + (i?86-*-{freebsd,linux*,moss*}): Likewise. + * config/elfos.h (ASM_FILE_END): Undef before redefinition. + * config/i386/cygwin.h (ASM_FILE_END): Likewise. + * config/i386/osfrose.h (ASM_FILE_END): Invoke ix86_asm_file_end. + * config/i386/sco5.h (ASM_FILE_END): Likewise. + * config/i386/winnt.c (i386_pe_asm_file_end): Likewise. + + 2001-01-15 Joseph S. Myers + + * Makefile.in (install-man): Remove explicit dependency on + $(srcdir)/gcc.1. + + * configure.in, configure: Revert previous patch requiring perl + 5.6.0. + + 2001-01-12 Aldy Hernandez + + * toplev.c (flag_guess_branch_prob): New. + (f_options): Add guess-branch-probability option. + (rest_of_decl_compilation): Only estimate branch probability if + flag set. + (main): set flag_guess_branch_prob. + + * flags.h (flag_guess_branch_prob): New. + + 2001-01-15 DJ Delorie + + * gcc.texi (Makefile): Add documentation for Makefile targets. + + 2001-01-15 Philip Blundell + + * config/arm/arm.c (arm_finalize_pic): New arg "prologue". + (is_pic): Delete. + * config/arm/arm-protos.h (arm_finalize_pic): Update prototype. + (is_pic): Delete declaration. + * config/arm/arm.h (FINALIZE_PIC): Update call to arm_finalize_pic. + (OUTPUT_INT_ADDR_CONST): Remove special handling of PIC address. + * config/arm/arm.md (builtin_setjmp_receiver): New. + + 2001-01-15 Richard Earnshaw + + * arm.c (use_return_insn): Don't try to determine the function type + until after reload has completed. + (arm_output_epilogue): Don't adjust the sp value recovered from the + stack. + (emit_multi_reg_push): Don't record dwarf information for the pc. + * arm.md (eh_epilogue): The function type may have changed, so it + needs to be recalculated. + * arm/netbsd.h (DWARF2_UNWIND_INFO): Delete. Can now use dwarf2 + unwind tables on arm/netbsd. + + 2001-01-15 Richard Earnshaw + + * arm.md (cbranchsi4): Correct calculation of branch ranges. + (negated_cbranchsi4): Likewise. + + 2001-01-15 Richard Earnshaw + + * config/arm/semi.h (SUBTARGET_EXTRA_SPECS): Define. + (SUBTARGET_EXTRA_ASM_SPEC): Define to empty string. + (ASM_SPEC): Call subtarget_extra_asm_spec. Don't + pass -mapcs-* options to assembler. + * config/arm/elf.h (SUBTARGET_EXTRA_SPECS): Define. + (SUBTARGET_EXTRA_ASM_SPEC): Define to empty string. + (ASM_SPEC): Call subtarget_extra_asm_spec. + + 2001-01-15 Andreas Jaeger + + * config/i386/i386.c (ix86_init_builtins): Make i size_t to remove + warnings. + (ix86_expand_builtin): Likewise. + + * gencodes.c (output_predicate_decls): Make i size_t to avoid + warning about comparison between signed and unsigned. + + 2001-01-14 Geoffrey Keating + + * expr.c (do_jump): Treat VOIDmode CONST_DOUBLEs like CONST_INTs. + + 2001-01-14 Ralf Baechle + + * config/mips/linux.h (SUBTARGET_CPP_SPEC): Default ABI is 32; change + SUBTARGET_CPP_SPEC appropriately. + + 2001-01-12 Mark Mitchell + + * varasm.c (make_decl_rtl): Fix typo in last change. + + 2001-01-14 Jeffrey Oldham + + * defaults.h (SUPPORTS_INIT_PRIORITY): New macro to indicate the + linker supports the init_priority C++ attribute. + * tm.texi (SUPPORTS_INIT_PRIORITY): Documentation for new macro. + * config/mips/iris6.h (SUPPORTS_INIT_PRIORITY): Indicate Irix + linker does not support init_priority C++ attribute. + + Sun Jan 14 22:31:30 2001 J"orn Rennecke + + * Makefile.in (libgcc1-test.o): Depends on stmp-int-hdrs. + + 2001-01-14 Neil Booth + + * c-parse.in (finish_parse): Add comment about cpp_destroy. + * cp/lex.c (finish_parse): Similarly. + * cppinit.c (cpp_cleanup): Rename cpp_destroy for clarity. + Return the number of errors encountered. + * cpplib.h (cpp_cleanup): Rename cpp_destroy, return int. + * cppmain.c (main): Don't call cpp_destroy. + + 2001-01-14 Joseph S. Myers + + * configure.in: Require at least perl 5.6.0 to regenerate + manpages. + * configure: Regenerate. + + 2001-01-14 Richard Henderson + + * genrecog.c (DT_veclen_ge): New. + (add_to_sequence) [MATCH_PARALLEL]: Generate one. + (maybe_both_true_2): Simplify DT_veclen vs DT_veclen_ge. + (nodes_identical_1): Handle DT_veclen_ge. + (write_cond, debug_decision_2): Likewise. + + 2001-01-14 Richard Earnshaw + + * arm.md (ldmsi_postinc, ldmsi, stmsi_postinc, smsi): Delete. Replace + with ... + (ldmsi_postinc[432], ldmsi[432], stmsi_postinc[432], stmsi[432]): New. + + 2001-01-14 Neil Booth + + * cppmain.c (do_preprocessing): New function; most of the old + main. + (main): Call it to do most of the work. + (cb): Move from global scope to set_callbacks (). + (setup_callbacks): Get the callback pointer. + (general_init, printer_init): Clean up code and comments. + + 2001-01-14 Richard Earnshaw + + * config/arm/semi.h (ASM_SPEC): Pass -k to the assembler when + compiling PIC. + + 2001-01-14 Kazu Hirata + + * config/h8300/h8300.c (get_shift_alg): Update comments. + + Sun Jan 14 06:20:49 2001 Richard Kenner + + * ggc-page.c (alloc_annon): Call perror and correctly call exit. + (alloc_page, ggc_alloc): Add casts to remove warnings. + + 2001-01-14 Geoffrey Keating + + * combine.c (simplify_comparison): Don't change `code' when + can't reverse comparison. + + 2001-01-14 Richard Henderson + + * rtlanal.c (computed_jump_p_1): Rename from jmp_uses_reg_or_mem; + update all call sites. Return true for all non-label constants. + + Sun Jan 14 10:09:48 MET 2001 Jan hubicka + + * i386.c (ix86_expand_compare): Add bypass_test and second_test + parameters. + (ix86_expand_branch): Update. + (ix86_expand_setcc): Update to handle multiple test conditions. + (expand_int_movcc): Likewise. + (expand_fp_movcc): Likewise. + * i386-protos.h (ix86_expand_compare): New. + * i386.md (andqi_?_slp, orqi_?_slp): New. + (conditional trap expander): Update call to ix86_expand_compare. + + 2001-01-14 Richard Henderson + + * config/vax/vax.md: Use nonimmediate_operand instead of + general_operand in destinations. + + * config/vax/vax.md (indirect_jump): Use register_operand. + + * config/vax/vax.h (RETURN_POPS_ARGS): Max at 255 arguments. + * config/vax/vax.md (call_pop): Turn into an expander. + (call_value_pop): Likewise. + (call, call_value): New. + + 2001-01-14 Andreas Jaeger + + * config/i386/i386.c (ix86_split_fp_branch): Remove unused + variables. + (ix86_fp_compare_mode): Add unused attribute. + (ix86_expand_fp_movcc): Remove unused variable. + (ix86_expand_builtin): Make fcode unsigned. + + * expr.c (MOVE_BY_PIECES_P): Cast MOVE_RATIO to unsigned. + (expand_expr): Add cast to avoid signed warning. + (store_field): Likewise. + (store_constructor_field): Likewise. + (store_constructor): Likewise. + (store_expr): Likewise. + (clear_storage): Likewise. + (emit_group_store): Likewise. + (emit_group_load): Likewise. + + 2001-01-13 Joseph S. Myers + + * c-common.c: Move format checking code to ... + * c-format.c: ... here. New file. Reorder some functions and + declarations. + (decl_handle_format_attribute, decl_handle_format_arg_attribute): + New functions. + * c-common.h (decl_handle_format_attribute, + decl_handle_format_arg_attribute): Declare. + * Makefile.in (C_AND_OBJC_OBJS): Add c-format.o. + (c-common.o): Adjust dependencies. + (c-format.o): New list of dependencies. + + 2001-01-13 Jakub Jelinek + + * unroll.c (loop_iterations): If we cannot prove iteration variable + is set once in each iteration, punt. + + Sun Jan 14 00:23:15 2001 Denis Chertykov + + * config/avr/avr.md ("strlenhi"): Remove clobber of input address. + (*strlenhi): Remove clobber (which was buggy) of output address. + + 2001-01-13 Joseph S. Myers + + * Makefile.in (generated-manpages): Add gcc.1 + ($(srcdir)/gcc.1): New target. + (maintainer-clean): Delete $(srcdir)/gcc.1. + * gcc.texi: Add macros @gccoptlist and @gol. + * invoke.texi: Include option summary in manpage. Mark up option + summary with @gccoptlist and @gol. Use @r in one place where + appropriate. + * texinfo.tex: Update to version 2000-12-11.07 from ftp.gnu.org. + * gcc.1: Generate from invoke.texi. + + 2001-01-13 Richard Henderson + + * ggc-page.c (USING_MALLOC_PAGE_GROUPS): New; set if not using mmap. + (struct page_entry): Add group member. + (struct page_group): New. + (struct globals): Add page_groups member. + (alloc_anon): Only define for using mmap; remove valloc call. + (page_group_index): New. + (set_page_group_in_use): New. + (clear_page_group_in_use): New. + (alloc_page): Implement USING_MALLOC_PAGE_GROUPS. + (free_page, release_pages): Likewise. + * configure.in (with-gc): Default to ggc-page always. + + 2001-01-13 Alexandre Oliva + + * reload1.c (replace_pseudos_in_call_usage): Use + reg_equiv_constant and reg_equiv_address, and don't try + regno_reg_rtx first. + + 2001-01-13 Richard Henderson + + * ggc-page.c (alloc_page): Round up allocation size to one page. + Set e->order on extra pages. + + 2001-01-13 Richard Henderson + + * genrecog.c (nodes_identical): Expand commentary. + (write_switch): Watch out for identical nodes. + + 2001-01-13 Neil Booth + + * cppfiles.c (_cpp_fake_include): New function. + * cpphash.h (_cpp_fake_include): New. + * cpplib.c (do_line): Call _cpp_fake_include when entering + header files in preprocessed input. + * cppmain.c (cb_pragma_implementation): Remove handling. + (setup_callbacks): Don't register pragmas. + + 2001-01-13 Neil Booth + + * extend.texi: Udate for CPP. + + 2001-01-13 Andreas Jaeger + + * reload1.c: Add prototype for replace_pseudos_in_call_usage. + + * regmove.c: Add prototype for replace_in_call_usage. + + 2001-01-13 Neil Booth + + * cpplib.h (cpp_pool, mi_state, mi_ind, struct cpp_macro, + struct cpp_chunk, struct htab, struct toklist, + struct cpp_context, CPP_STACK_MAX, struct lexer_state, + struct spec_nodes, struct cpp_reader, CPP_OPTION, CPP_BUFFER, + CPP_BUF_LINE, CPP_BUF_COL, CPP_BUF_COLUMN, U, ustrcmp, ustrncmp, + ustrlen, uxstrdup, ustrchr, ufputs): Move to cpphash.h. + (struct macro_args): Delete. + * cpphash.h: See above. + + 2001-01-13 Neil Booth + + * cppmain.c (struct printer): Remove no_line_dirs. + (options, cb): New. + (main, setup_callbacks, scan_buffer, printer_init, cb_define) + : Use options rather than CPP_OPTION. + (setup_callbacks): Use cb rather than pfile->cb. + (main): No need to check for a buffer. Use cpp_errors. + (printer_init): Don't set no_line_dirs. + (maybe_print_line): Use options not no_line_dirs. + (cb_file_change): Don't call print_line if -P. + + 2001-01-13 Neil Booth + + * c-lex.c (init_c_lex): Use cpp_get_callbacks to set + callbacks. + * c-parse.in (finish_parse): Use cpp_errors. + (__yylex): Use return value of cpp_pop_buffer. + * cp/lex.c (finish_parse): Use cpp_errors. + * cp/spew.c (read_token): Use return value of cpp_pop_buffer. + + Sat Jan 13 16:57:40 2001 Denis Chertykov + + * README.AVR: URLs corrected. + + Sat Jan 13 07:30:02 2001 Richard Kenner + + * c-decl.c (start_function): Don't warn if old prototype is builtin + that's not in C's namespace. + * libgcc2.c (_varargs): Update definition of __builtin_saveregs. + (_bb): Add prototype for ctime. + * config/alpha/osf.h (TRANSFER_FROM_TRAMPOLINE): Add missing protos. + + Sat Jan 13 09:53:32 MET 2001 Jan Hubicka + + * i386.c (ix86_fp_comparison_arithmetics_cost, + ix86_fp_comparison_fcomi_cost, ix86_fp_comparison_sahf_cost, + ix86_fp_comparison_cost): New functions. + (ix86_expand_fp_compare): Use the costs to choose best bethod; add + two new parameters SECOND_TEST and BYPASS_TEST; allow generating + two-branch sequences; make static. + (ix86_use_fcomi_compare): Do decision according to the costs. + (split_fp_branch): New. + * i386.md (compare-and-branch patterns): Use split_fp_branch. + * i386-protos.h (ix86_expand_fp_compare): Remove + (ix86_split_fp_branch): Declare. + + * i386.h (PREDICATE_CODES): Update codes from fcmov_comparison_operand + and ix86_comparison_operator. + + * i386.c (ix86_prepare_fp_compare_args): Try to rearange the comparison + to make it cheaper. + + * i386.c (put_condition_code): Output properly the unordered/ordered + compares in fp case. + (ix86_expand_fp_movcc): Use ix86_expand_compare infrastructure. + + * tm.texi (REVERSE_CONDITION): Document. + * i386.c (ix86_fp_compare_mode): Simplify; return always CCFPmode + in -ffast-math mode. + * i386.h (REVERSE_CONDITION, REVERSIBLE_CC_MODE): New macro. + + 2001-01-13 Alexandre Oliva + + * config/sh/sh.c (sh_expand_epilogue): Use PR explicitly. + + * config/sh/sh.c (sh_expand_prologue): Let the second toggle_sz be + optimized away. + + * config/sh/sh.c (mova_p): Fix test for mova_const. + + 2001-01-13 Neil Booth + + * fix-header.c (read_scan_file): Use cpp_get_callbacks and + cpp_get_options rather than dereferencing pfile and using + CPP_OPTION. + * scan-decls.c (scan_decls): Use return value of + cpp_pop_buffer rather than CPP_BUFFER. + + 2001-01-13 Neil Booth + + * cppinit.c (cpp_handle_option): help_only is now part of the + cpp_options structure. + * cpplib.c (cpp_errors, cpp_get_options, cpp_get_callbacks, + cpp_set_callbacks): New functions. + * cpplib.h (cpp_callbacks): Break out as a named structure. + (cpp_options): Move help_only here from cpp_reader. + (CPP_FATAL_ERRORS): Update to use cpp_errors. + (cpp_errors, cpp_get_options, cpp_get_callbacks, + cpp_set_callbacks): New prototypes. + * cppmain.c (main): Update for help_only. + + 2001-01-13 Joseph S. Myers + + * Makefile.in (info, maintainer-clean, install-info, uninstall): + Also build and remove and install and uninstall c-tree.info and + cppinternals.info. + ($(srcdir)/gcc.info): Add dependency on contrib.texi. + ($(srcdir)/cppinternals.info): New target. + * c-tree.texi: Change file name used when makeinfo used without -o + from ir.info to c-tree.info. Add info directory entry. + * cppinternals.texi: Add info directory entry. + * .cvsignore: Update. + + 2001-01-12 Jakub Jelinek + + * c-typeck.c (store_init_value): Don't require constant initializer + elements with -pedantic -std=c99. + (digest_init): Change error about non-constant initializer elements + into pedwarn. + (constructor_range_end): Remove. + (constructor_incremental, designator_depth, + designator_errorneous): New variables. + (struct constructor_stack): Remove range_end, add incremental. + (struct constructor_range_stack, constructor_range_stack): New. + (struct initializer_stack): Add constructor_range_stack. + (finish_init): Set it. + (start_init): Likewise. require_constant_elements for non-static + trees only if not flag_isoc99. + (really_start_incremental_init): Remove constructor_range_end, add + constructor_incremental. + (pop_init_level): Likewise. + (push_init_level): Likewise. If implicit and the subobject had some + value set already, preinitialize the level with it. + Warn about missing braces only if not pushing due to designators. + (set_designator, push_range_stack): New functions. + (set_init_label): Use them. + (set_init_index): Likewise. Remove constructor_range_end. + Error if designator index is outside of array bounds. + (add_pending_init): Compare values of purpose index trees, not the + trees themselves. Allow overwriting of already initialized element. + Issue a warning if it had side-effects. + (set_nonincremental_init, set_nonincremental_init_from_string): New + functions. + (pending_init_member): Rename to... + (find_init_member): ...this function. Call set_nonincremental_init + if necessary. Compare values of purpose index trees, not the trees + themselves. Return the actual value, not just non-zero if something + is found. + (output_init_element): Remove checks for duplicates. + If field has zero size, only check the initializer for correctness. + Call set_nonincremental_init if necessary. Push RECORD/ARRAY into AVL + if constructor_incremental is zero. Change error about initializers + not computable at load time into pedwarn. + (output_pending_init_elements): Compare bit positions, not + FIELD_DECLs to take into account zero-sized fields. + (process_init_element): Use constructor_range_stack to fill all + ranges in the designator lists from current level up. + * extend.texi: Update documentation for labeled elements. + + 2001-01-12 Alexandre Oliva + + * calls.c (emit_library_call_value_1): Add USEs and CLOBBERs + to function usage for arguments passed by reference. Optimize + callee-copied arguments. + * regmove.c (replace_in_call_usage): New function. + (fixup_match_1): Call it. + * cse.c (cse_insn): Canonicalize registers in function usage. + * reload1.c (replace_pseudos_in_call_usage): New function. + (reload): Call it. + + * Makefile.in: Reverted yesterday's wrong patch. Installed the + right version. + + 2001-01-12 Jakub Jelinek + + * config/alpha/alpha.c (alpha_expand_block_move): GET_MODE of tmp, + not XEXP (tmp, 0). + + 2001-01-12 DJ Delorie + + * Makefile.in (bootstrap): rename stages to be mnemonic. Add + restageN, unstageN, bubblestrap, quickstrap, and cleanstrap + targets. + + 2001-01-12 Joseph S. Myers + + * cpp.texi, extend.texi, gcc.texi, install.texi, invoke.texi, + tm.texi: Consistently refer to ISO C instead of ANSI C. Refer to + -std options alongside references to -ansi. Update some + documentation for C99. + * cpp.1: Regenerate. + + 2001-01-12 Andreas Jaeger + + * haifa-sched.c (restore_line_notes): Remove argument block B + since it's unused. + * sched-ebb.c (schedule_ebb): Change caller. + * sched-rgn.c (schedule_region): Likewise. + * sched-int.h (restore_line_notes): Adjust prototype. + + * loop.h: Remove wrong declaration of doloop_condition_get. + + 2001-01-12 Phil Edwards + + * extend.texi: Move C++-extension-related node from the C section + into the C++ section. + + 2001-01-12 Joseph S. Myers + + * extend.texi: Refer to an array of pointers to functions instead + of one of functions. + + Fri Jan 12 12:08:12 MET 2001 Andreas Jaeger + Jan Hubicka + + * combine.c (reversed_comparison): Fix typo in last patch. + Check X for NULL. + (combine_reversed_comparison_code): Make static to follow + prototype declaration. + + 2001-01-12 Phil Edwards + + * install.texi: Remove misplaced duplicate entry. + + 2001-01-11 Ulrich Drepper + + * config/float-i386.h: Define FLT_EVAL_METHOD and DECIMAL_DIG for C99. + + Thu Jan 11 17:06:30 EST 2001 John Wehle (john@feith.com) + + * final.c: (leaf_function_p): Fix typo. + + 2001-01-11 Zack Weinberg + + * aclocal.m4 (AC_FUNC_MMAP_ANYWHERE): Completely rewritten. + Now defines HAVE_MMAP_DEV_ZERO and/or HAVE_MMAP_ANON depending + which you have. + (AC_FUNC_MMAP_FILE): Don't AC_REQUIRE AC_FUNC_MMAP_ANYWHERE. + * configure.in: Set GGC to ggc-page if any of mmap_dev_zero, + mmap_anon, and valloc is available. + * ggc-page.c: Restructure ifdef logic to match new autoconf + spec. Don't throw away the test page in init_ggc. + + * configure, config.in: Regenerate. + + 2001-01-12 Michael Hayes + + * loop.h (total_biv_increment): Constify iv_class pointer. + (struct induction): Replace `mem_mode' with `mem' rtx. + * unroll.c (total_biv_increment): Constify iv_class pointer. + * loop.c (loop_giv_reduce_benefit): Derive mem mode from mem rtx. + (find_mem_givs, combine_givs_p): Likewise. + (debug_ivs, debug_iv_class, loop_ivs_dump, loop_iv_class_dump): New. + + 2001-01-10 Thomas Pfaff + + * gthr-win32.h (__gthread_objc_thread_get_data): Save and restore Win32 + LastError. + (__gthread_getspecific): Ditto. + + Fri Jan 12 00:04:00 MET 2001 Jan Hubicka + + * i386.c (ix86_comparison_operator, fcmov_comparison_operator, + put_condition_code): Convert fp comparison codes to integer + before handling. + (ix86_expand_fp_compare): Postnote the fp comparison code conversion + to final. + + * i386.c (unsigned_comparison, no_comparison_operator): Kill. + * i386-protos.h (no_comparison_operator): Kill. + + * i386.c (ix86_expand_fp_compare): Fix ordered/unordered confussion. + + * combine.c (REVERSIBLE_CC_MODE): Remove. + (reversible_comparison_p): Remove. + (combine_reversed_comparison_code): New. + (reversed_comparison): New. + (combine_simplify_rtx): Use + combine_reversed_comparison_code/reversed_comparison instead + of reversible_comparison_p. + (simplify_if_then_else): Likewise. + (simplify_set): Likewise. + (simplify_logical): Likewise. + (if_then_else_cond): Likewise. + (known_cond): Likewise. + (simplify_comparison): Likewise. + + 2001-01-11 Alan Lehotsky + + * builtins.c (std_expand_builtin_va_start): Handle varargs when + sizeof (int) is larger than sizeof(__word__). + + 2001-01-11 Neil Booth + + * cppinit.c (do_includes): Fix typo. + + 2001-01-11 Stephane Carrez + + * config/m68hc11/m68hc11.md (cmphi_1): Make sure reloading + in S_REGS does not occur because not all sources are possible + when a S_REGS is a destination (sometimes needs a clobber). + (movqi_const0, zero_extendhisi2, zero_extendqisi2): Likewise. + (zero_extendhidi2, extendqisi2, extendqihi2, extendhisi2): Likewise. + (anddi3, iordi3, xordi3, negqi2, one_cmplhi2, one_cmplqi2: Likewise. + (ashldi3_const32, ashldi3_const1, ashlsi3_const16): Likewise. + (ashlsi3_const1, ashlhi3_2, ashlqi3_const1, ashrhi3): Likewise. + (ashrqi3_const1, lshrdi3_const32, lshrdi3_const63): Likewise. + (lshrdi_const1, lshrsi3_const16): Likewise. + (*addhi3, lshrsi3_const1, lshrqi3_const1): Likewise. + (*movhi_68hc12, *movqi_68hc12): Likewise. + (movstrictqi): Make sure reloading in D_REGS as a destination + does not happen. + + 2001-01-11 Neil Booth + + * cppspec.c (DEFAULT_WORD_SWITCH_TAKES_ARG): Add -MQ. + + 2001-01-11 Neil Booth + + * cppinit.c (cpp_start_read): If -fpreprocessed, ignore + -D, -U and -A, and don't initialize the builtins. + (do_includes): Error if -include or -imacros with -fpreprocessed. + * cppmain.c (cb_define, cb_undef): Unconditionally process + the callback. + * tradcpp.c (main): Fix typo. + + 2000-01-11 Mark Elbrecht + + * cppfiles.c (cpp_included, find_include_file, _cpp_execute_include) + (read_name_map): Use IS_ABSOLUTE_PATH. + * tradcpp.c (get_filename): Likewise. + + 2001-01-11 Stephane Carrez + + * config/m68hc11/m68hc11.md (*adcq, *subcq): Fix operand numbers. + (*ashlsi3_const16_zexthi, *ashlsi3_const1): Likewise. + (*lshrsi3_const, *lshrsi3_const1, *lshrsi3_const16): Likewise. + (*ashrsi3, *ashrsi3_const, *ashlsi3, *ashlsi3_const): Likewise. + (*ashlsi3_const1, *lshrsi3, *ashlsi3_const16): Likewise. + (cmphi_z_used): Don't use '@' for the output. + (tstqi_z_used): Likewise. + (cmpqi_z_used): Likewise. + (one_cmplsi2): Likewise. + + 2001-01-11 Alexandre Oliva + + * config/sh/sh.c (barrier_align): Recognize branch around far + branch and redundant insn. + + 2001-01-11 Neil Booth + + * invoke.texi: Restore documentation of the drivers' switches -MD + and -MMD. + + 2001-01-11 Alexandre Oliva + + * config/sh/sh.h (LABEL_ALIGN): Use UNSPECV_ALIGN instead of 1. + + * Makefile.in (check-gcc//%, check-g++//%, check-g77//%, + check-objc//%): Support parallel testing of multilibs. + (TESTSUITEDIR): Set to testsuite by default, but override for + parallel testing. + (check-gcc, check-g++, check-g77, check-objc): Enter + $(TESTSUITEDIR). + + 2001-01-11 Bernd Schmidt + + * alias.c (throughout): Use REGNO, rather than ORIGINAL_REGNO. + * sched-deps.c (deps_may_trap_p): Likewise. + * basic-block.h: Remove a comment. + * flow.c (PROP_POSTRELOAD): Remove. + (update_life_info): Don't add it to prop_flags. + (mark_set_1): Lose the code that was enabled by it. + + 2001-01-11 Michael Hayes + + * flow.c (flow_call_edges_add): New. + * basic_block.h (flow_call_edges_add): New. + + 2001-01-11 J"orn Rennecke + + * reload1.c (move2add_note_store): Update reg_set_luid even if + base reg remains the same. + + 2001-01-10 Nick Clifton + + * config/d30v/d30v.c (d30v_init_machine_status): Initialise + machine_function structure to zero. + Add prototypes for machine_status functions. + + 2001-01-10 Mark Mitchell + + * c-common.h (CTI_VOID_LIST): Remove. + (void_list_node): Likewise. + * tree.h (TI_VOID_LIST_NODE): New enumeral. + (void_list_node): New macro. + * config/arm/arm.c (arm_init_builtins): Use void_list_node. + * config/i386/i386.c (ix86_init_builtins): Likewise. + * config/ia64a/ia64.c (ia64_init_builtins): Likewise. + + 2001-01-10 Neil Booth + + * Makefile.in (tradcpp0): Depend on mkdeps.h. Link mkdeps.o + * cppinit.c (cpp_start_read): Update comment, remove unneeded + if statement. + * tradcpp.c: Include mkdeps.h. + (deps, print_deps_phony_targets, deps_append, output_deps, + init_dependency_output, output_deps): New. + (deps_buffer, deps_allocated_size, deps_size, deps_column, + deps_output): Delete. + (print_deps_missing_files): Rename deps_missing_files. + (inhibit_output): Make global. + (main): Delete inhibit_output, deps_stream, deps_target. + Use mkdeps functionality in the same way as cpplib. Remove + -g3 handling. Handle -MF, -MP, -MQ, -MT. Update handling of + -M and -MM. Remove old handling of deps via deps_out, and + old reading of environment variables. + (get_filename): Update to use deps_add_dep. + + 2001-01-10 Mark Mitchell + + * output.h (make_function_rtl): Remove prototype. + (make_decl_rtl): Likewise. + * varasm.c (make_function_rtl): Remove. + (make_decl_rtl): Determine top-levelness from DECL_CONTEXT, rather + than from a third parameter. + * tree.h (make_decl_rtl): Remove last parameter. + * c-decl.c (builtin_function): Remove last argument in call to + make_decl_rtl; use make_function_rtl instead of make_decl_rtl. + (start_function): Likewise. + * except.c (call_get_eh_context): Likewise. + * expr.c (emit_block_move): Likewise. + (clear_storage): Likewise. + * profile.c (output_func_start_profiler): Likewise. + * toplev.c (rest_of_decl_compilation): Likewise. + * objc/objc-act.c (create_builtin_decl): Likewise. + (synth_module_prologue): Likewise. + (generate_static_reference): Likewise. + (build_selector_reference_decl): Likewise. + (build_class_reference_decl): Likewise. + (build_objc_string_decl): Likewise. + (build_protocol_reference): Likewise. + + 2001-01-10 Richard Henderson + + * hwint.h: Revert yesterday's change. + + 2001-01-10 Nick Clifton + + * function.h (save_machine_status): Delete. + (restore_machine_status): Delete. + Amend comment describing {init|mark|free}_machine_status. + + * function.c (save_machine_status): Delete. + (restore_machine_status): Delete. + Amend comment describing {init|mark|free}_machine_status. + (push_function_context_to): Remove invocation of + save_machine_status. + (pop_function_context_from): Remove invocation of + restore_machine_status. + + * emit-rtl.c (init_emit_once): Amend comment describing + {init|mark|free}_machine_status. + + * tm.texi (Per-Function Data): New node. Describe the + INIT_EXPANDERS macro and the {init|mark|free}_machine_status + function pointers. + + 2001-01-10 Neil Booth + + * cppinit.c (OPT_g): Remove. + (cpp_handle_option): Update for removed -g3. + (print_help): Update. + * cpplib.h (struct cpp_options): Remove debug_output. + * cppmain.c (setup_callbacks, cb_define): Update. + * gcc.c (cpp_options): Translate -g3 to -dD. + + 2001-01-10 Aldy Hernandez + + * config/i960/i960.md: Change modifier to + on the zero_extract + pattern after the (rotate -2 reg) canonicalization pattern. + + 2001-01-10 Richard Henderson + + * config/alpha/alpha.c (alpha_free_machine_status): New. + (override_options): Install it. + (alpha_mark_machine_status): Verify machine non-null. + * config/i386/i386.c (ix86_free_machine_status): New. + (override_options): Install it. + (ix86_init_machine_status): Use xcalloc. + (ix86_mark_machine_status): Verify machine non-null. + * config/ia64/ia64.c (ia64_free_machine_status): New. + (ia64_override_options): Install it. + (ia64_mark_machine_status): Verify machine non-null. + + Wed Jan 10 11:34:39 2001 Jeffrey A Law (law@cygnus.com) + + * function.c (instantiate_virtual_regs): Instantiate virtual + registers found in CALL_INSN_FUNCTION_USAGE. + + 2001-01-10 Joseph S. Myers + + * i386.h (CPP_CPU_SPEC): Allow for -std=c* and -std=i* as + equivalent to -ansi in disabling -Di386. + + Wed Jan 10 16:38:31 MET 2001 Jan Hubicka + + * i386.c (ix86_fp_compare_code_to_integer, ix86_fp_comparison_codes): + new functions. + (ix86_expand_fp_compare): Make trivial use of new infrastructure. + + 2001-01-10 Richard Earnshaw + + * arm.c (arm_init_builtins): Temporarily disable xscale builtins. + + 2001-01-10 Joseph S. Myers + + * invoke.texi: Document that -fcond-mismatch isn't supported for + C++. + + 2001-01-10 Joseph S. Myers + + * gcc.texi: Define macro gcctabopt. + * invoke.texi: Add manpage sections BUGS and AUTHOR. Use + @command, @env and @option in some places where appropriate. Use + @gcctabopt where appropriate. Put URLs and email addresses inside + @w. + + 2001-01-10 Nathan Sidwell + + * gcc.c (cpp_options): Set MD file name from output + filename, if specified. + (suffix_subst): New static variable. + (do_spec): Clear it. + (do_spec_1, case '.'): Handle new `%.suffix' spec. + Clear it. + (give_switch): Handle suffix_subst. + + 2001-01-10 Phil Edwards + + * invoke.texi: Fix another typo. + + 2001-01-10 Phil Edwards + + * invoke.texi: Fix typo. + + 2001-01-10 Neil Booth + + * c-lang.c (lang_hooks): Update. + (lang_decode_option): Remove. + (lang_init_options): Rename c_init_options. + * toplev.c (main): Use lang_hooks for lang_init_options + and lang_decode_option. + * toplev.h (lang_hooks): Add 2 new hooks. + * tree.h: Remove lang_init_options and lang_decode_option. + * cp/cp-tree.h (lang_decode_option): Rename cxx_decode_option. + * cp/decl2.c: Similarly. + * cp/lex.c (lang_init_options): Rename cxx_init_options. + (lang_hooks): Update. + * f/com.c (f_init, f_finish): Rename ffe_init, ffe_finish + for consistency. + (lang_init_options): Rename ffe_init_options. + (lang_hooks): Update. + (lang_decode_option): Remove. + * java/lang.c (lang_init_options): Rename java_init_options. + (lang_decode_option): Rename java_decode_option. + (lang_hooks): Update. + * objc/objc-act.c (lang_init_options): Rename objc_init_options. + (lang_decode_option): Rename objc_decode_option. + (lang_hooks): Update. + + 2001-01-09 Nick Clifton + + * config/d30v/d30v.c (d30v_eh_epilogue_sp_ofs): Delete. + (d30v_return_addr_rtx): Delete. + (d30v_expand_epilogue): Use eh_epilogue_sp_ofs field in the + cfun->machine structure. + (struct machine_function): Move to d30v.h + (d30v_save_machine_status): Delete. + (d30v_restore_machine_status): Delete. + (d30v_init_machine_status): New Function. + (d30v_mark_machine_status): New Function. + (d30v_free_machine_status): New Function. + (d30v_init_expanders): Use new functions. + (d30v_return_addr): Use ra_rtx field in cfun->machine. + (d30v_add_gc_roots): Remove d30v_eh_epilogue_sp_ofs and + d30v_return_addr_rtx. + + * config/d30v/d30v.h (struct_machine): Move here. + Add eh_epilogue_sp_ofs field. + + *config/d30v/d30v.md (epilogue): Initialise eh_epilogue_sp_ofs + field in cfun->machine structure. + + Tue Jan 9 21:34:57 2001 John David Anglin + + * pa32-regs.h (CONDITIONAL_REGISTER_USAGE): When generating pic code, + PIC_OFFSET_TABLE_REGNUM_SAVED is a call_used register. + * pa64-regs.h (CONDITIONAL_REGISTER_USAGE): Likewise. + + Tue Jan 9 21:25:19 2001 Jeffrey A Law (law@cygnus.com) + + * objc/lang-options.h: Remove bogus reference to + Java trademark. + + 2001-01-09 Kazu Hirata + + * config/h8300/h8300.c (get_shift_alg): Use a struct shift_info to + return the result. + + 2001-01-09 Alan Lehotsky + + * reload.c (find_reloads_address): Check for eliminable registers + when substituting a constant expression for a pseudo. + + 2001-01-09 Joseph S. Myers + + * c-common.c (enum format_type): Add format_type_error. + (decode_format_type): New function. + (decl_attributes): Use it. + (format_kind_info): Adjust comment. + + 2001-01-09 David O'Brien + + * config.gcc (*-*-gnu*, i[34567]86-*-elf*, i[34567]86-*-linux*libc1, + i[34567]86-*-linux*, i[34567]86-*-moss*): Specify needed platform specific + files in tm_file. + * config/i386/gnu.h: Don't include required platform specific .h files, + tm.h will do it instead. + * config/i386/i386elf.h: Likewise. + * config/i386/linux.h: Likewise. + * config/i386/moss.h: Likewise. + * config/mips/gnu.h: Likewise. + + 2001-01-09 Franz Sirl + + * config.gcc (powerpc-*-beos*): Include ${tm_file} and rs6000/aix.h. + (rs6000-ibm-aix3.[01]*): Likewise. + (rs6000-ibm-aix3.2.[456789]*, powerpc-ibm-aix3.2.[456789]*): Likewise. + (rs6000-ibm-aix4.[12]*, powerpc-ibm-aix4.[12]*): Likewise. + (rs6000-ibm-aix4.[3456789]*, powerpc-ibm-aix4.[3456789]*): Likewise. + (rs6000-ibm-aix[56789].*, powerpc-ibm-aix[56789].*): Likewise. + (powerpc-*-sysv*): Include {tm_file}. svr4.h and rs6000/sysv4.h. + (powerpc-*-eabiaix*): Likewise. + (powerpc-*-eabisim*): Likewise. + (powerpc-*-elf*): Likewise. + (powerpc-*-eabi*): Likewise. + (powerpc-*-rtems*): Likewise. + (powerpc-*-linux*libc1): Likewise. + (powerpc-*-linux*): Likewise. + (powerpc-wrs-vxworks*): Likewise. + (powerpcle-wrs-vxworks*): Likewise. + (powerpcle-*-sysv*): Likewise. + (powerpcle-*-elf*): Likewise. + (powerpcle-*-eabisim*): Likewise. + (powerpcle-*-eabi*): Likewise. + (powerpcle-*-solaris2*): Likewise. + * config/rs6000/aix31.h: Delete includes. + * config/rs6000/aix3newas.h: Likewise. + * config/rs6000/aix41.h: Likewise. + * config/rs6000/aix43.h: Likewise. + * config/rs6000/beos.h: Likewise. + * config/rs6000/rtems.h: Likewise. + * config/rs6000/sysv4.h: Likewise. + + 2001-01-09 Kazu Hirata + + * config/h8300/h8300.c (get_shift_alg): Remove an argument cpu. + Change an argument mode of machine_mode to shift_mode of + shift_mode. Remove an extra error check. + (emit_a_shift): Adopt to the new calling prototype of + get_shift_alg. + (function_prologue): Fix code for a monitor + function. Support H8/S. + (function_epilogue): Do not output pop for a monitor function. + + 2001-01-09 Nick Clifton + + * config/rs6000/rs6000.c (rs6000_sysv_varargs_p): Delete. + (setup_incoming_varargs): Use sysv_varargs_p field of the + cfun->machine structure. + (struct machine_function): Move to rs6000.h + (rs6000_save_machine_status): Delete. + (rs6000_restore_machine_status): Delete. + (rs6000_init_machine_status): New Function. + (rs6000_free_machine_status): New Function. + (rs6000_init_expanders): Use new functions. + + * config/rs6000/rs6000.h (rs6000_sysv_varargs_p): Delete + export. + (struct machine_function): Move here. + + * config/rs6000/sysv4.h (RS6000_VARARGS_AREA): Use + sysv_varargs_p field of the cfun->machine structure. + + * config/rs6000/rs6000-protos.h (rs6000_save_machine_status): + Remove prototype. + (rs6000_restore_machine_status): Remove prototype. + + 2001-01-09 Richard Henderson + + * sched-int.h (struct deps): Add max_reg, reg_last_in_use; merge + reg_last_uses, reg_last_sets, reg_last_clobbers into struct deps_reg. + * sched-deps.c (sched_analyze_1): Update uses of struct deps. + (sched_analyze_2, sched_analyze_insn): Likewise. + (sched_analyze, init_deps): Likewise. + (free_deps): Likewise. Iterate with EXECUTE_IF_SET_IN_REG_SET. + * sched-rgn.c (propagate_deps): Likewise. Remove max_reg argument. + (compute_block_backward_dependences): Update propagate_deps call. + + 2001-01-09 Mark Elbrecht + + * gcc.c (process_command): Set switches[n_switches].ordering to 0. + + 2001-01-09 Neil Booth + + * cppinit.c (OPT_MD, OPT_MMD): Restore. + (cpp_handle_option): Handle them. + (cpp_post_options): Ensure one of -M or -MM is specified with + any other -M? option. + (init_dependency_output): Suppress output with -MG. + + 2001-01-09 Neil Booth + + * cpp.texi: Update. + * invoke.texi: Update. + + 2001-01-09 Bernd Schmidt + + * sh.md (reload_outsf): Generate recognizable patterns for + TARGET_SH3E. + + 2001-01-09 Neil Booth + + * c-lang.c (lang_hooks): Update. + (lang_init): Rename c_init. + (lang_finish): Remove. + * toplev.c (compile_file): Use lang_hooks for lang_init () + and lang_finish (). + * toplev.h (lang_hooks): Add init () and finish (). + * tree.h (lang_init, lang_finish): Remove. + * cp/tree.h (lang_init, lang_finish): Remove. + * cp/decl2.c (cxx_post_options, lang_hooks): Move to cp/lex.c. + * cp/lex.c (cxx_init, cxx_finish, cxx_post_options, + lang_hooks): New. + (lang_init, lang_finish): Remove. + * f/com.c (lang_init, lang_finish): Rename f_init, f_finish. + (lang_hooks): Update. + * java/lang.c (lang_init): Rename java_init. + (lang_finish): Remove. + (lang_hooks): Update. + * objc/objc-act.c (lang_init): Rename objc_init. + (lang_finish): Remove. + (lang_hoooks): Update. + + 20001-01-09 Graham Stott + + * cppfiles.c (_cpp_execute_include): Move `len` initialisation + after `ptr` is initialised. + + 2001-01-09 Alexandre Oliva + + * config/sh/sh.h (STATIC_CHAIN_REGNUM): Change from r13 to r3. + (INITIALIZE_TRAMPOLINE): Adjust accordingly. + * config/sh/sh.c (sh_expand_prologue): Use r1 as temporary for + stack adjusts, instead of r3. + + 2001-01-09 Michael Hayes + + * flow.c (flow_loop_scan): Break out of ... + (flow_loops_find) ... here. + * basic-block.h (flow_loop_scan): New. + (LOOP_ENTRY_EDGES, LOOP_EXIT_EDGES): Add. + (LOOP_EDGES, LOOP_EXITS_DOMS, LOOP_ALL): Redefine. + + 2001-01-09 Alexandre Oliva + + * cppinit.c (cpp_cleanup): NULLify macro_buffer and zero + macro_buffer_len. + * cppmacro.c (cpp_macro_definition): Reset macro_buffer_len when + realloc()ing macro_buffer. + + * hwint.h (HOST_BITS_PER_WIDE_INT, HOST_WIDE_INT): Use long long + if it's wider than long and the target's long is wider than the + host's. + + 2001-01-09 Mark Mitchell + + Remove support for using UWIN as a host machine. + * configure.in: Issue an error message. + * configure: Regenerated. + * config.gcc: Remove xm_* UWIN configury. + * config/i386/xm-uwin.h: Remove. + + 2001-01-08 Nick Clifton + + * config/v850/v850.c (ra_rtx): Delete. + (v850_save_machine_status): Delete. + (v850_restore_machine_status): Delete. + (v850_init_machine_status): New function. + (v850_mark_machine_status): New function. + (v850_free_machine_status): New function. + (v850_return_addr): Use ra_rtx field in machine structure. + (v850_init_expanders): Use new functions. + + * config/v850/v850-protos.h: Fix prototypes for v850_output_* + * config/v850/v850.c: Change arguments to v850_output+* functions + to take a const char *, to avoid compile time warning. + * config/v850/v850.h (ASM_OUTPUT_LABELREF): Undefine, not needed. + (USER_LABEL_PREFIX): Redefine. + + 2000-01-08 Jim Wilson + + * sched-rgn.c (BITSET_ADD, BITSET_REMOVE, bitset_member): Cast + 1 to unsigned HOST_WIDE_INT before left shift. + + 2001-01-08 Nick Clifton + + * config/arm/arm.c (arm_mark_machine_status): Check to see if + the machine structure has been allocated. + (arm_free_machine_status): New function: Free the machine + specific function structure. + + 2001-01-08 Richard Henderson + + * jump.c (simplejump_p): Revert last change. + + 2001-01-08 Neil Booth + + * cppinit.c (init): Rename init_library. + (cpp_create_reader): Update. + * gcc.c (cpp_options): If -o given, use it as the target of + any -M options. + + 2001-01-08 Richard Earnshaw + + * arm.c (arm_arch5e): New variable. + (all_cores): XScale is a 5TE device. + (arm_override_options): Set arm_arch5e. + (arm_init_builtins): __builtin_prefetch is in arch5e. + * arm.h (arm_arch5e): Declare it. + + * arm.h (PREDICATE_CODES): Add arm_hard_register_operand. + + * arm.md (define_constants): Add defines for UNSPEC and + UNSPEC_VOLATILE insns. Update all users. + (define_constants): Add constants for IP_REGNUM, SP_REGNUM, PC_REGNUM. + * arm.c (multi_register_push, note_invalid_constants) + (emit_multi_reg_push, emit_sfm, expand_prologue): Use constants. + * arm.h (SP_REGNUM, IP_REGNUM, PC_REGNUM): Delete defines. + (STACK_POINTER_REGNUM): Define in terms of SP_REGNUM. + + Mon Jan 8 16:14:56 MET 2001 Jan Hubicka + + * jump.c (jump_optimize_1): Use reversed_comparison_code + instead of can_reverse_comparison_p. + (jump_back_p): Likewise. + (invert_exp_1): Likewise. + (thread_jumps): Likewise. + * simplify-rtx.c (simplify_unary_operation): Likewise. + (simplify_ternary_operation): Likewise. + * cse.c (find_comparison_args): Convert to use + can_reverse_comparison_p. + (record_jump_equiv): Likewise. + + 2001-01-08 Richard Earnshaw + + * arm.h (HARD_REGNO_RENAME_OK): Delete. + (EPILOGUE_USES): Define. + (INITIAL_ELIMINATION_OFFSET): Current prologue code does not + automatically stack the LR if it isn't live. + + Mon Jan 8 13:46:02 MET 2001 Jan Hubicka + + * i386.c (ix86_expand_int_movcc): Take care to reverse fp conditions + properly. + + Sun Jan 7 18:37:43 2001 Mark P Mitchell + + * ggc-page.c (max_alignment): New structure. + (MAX_ALIGNMENT): New macro. + (init_ggc): Use it to round up the sizes in the + extra_order_size_table. + + 2001-01-07 Franz Sirl + + * config/rs6000/rs6000.h (EPILOGUE_USES): New, mark link register + after reload. + + 2001-01-07 Kaveh R. Ghazi + + * builtins.def (BUILT_IN_FPRINTF): New entry. + + * c-common.c (c_expand_builtin_fprintf): New function. + (init_function_format_info): Handle __builtin_fprintf. + (c_common_nodes_and_builtins): Declare fprintf/__builtin_fprintf. + (c_expand_builtin): Handle BUILT_IN_FPRINTF. + + * c-decl.c (duplicate_decls): Adjust comment. + + * extend.texi (fprintf): Document new builtin. + + 2001-01-07 Richard Henderson + + * jump.c (simplejump_p): Recognize any single_set jump + of the proper form. + + 2001-01-07 Richard Henderson + + * configure.in (slibdir): Accept an --with-slibdir option. + Use "test" not "[" in configure. Default to $(libdir). + + * config/t-linux (SHLIB_INSTALL): Double quote slibdir; + fix typo in rm -f. + * config/t-aix43 (SHLIB_INSTALL): Likewise. + * config/alpha/t-osf4 (SHLIB_INSTALL): Likewise. + (SHLIB_LINK): Create links for the soname. + * config/mips/t-iris6: Likewise. + * config/sparc/t-slibgcc: Likewise. + * config/sparc/t-slibgcc-sld: Likewise. + + 2001-01-07 Jakub Jelinek + + * config/i386/i386.c (constant_call_address_operand): Accept + (const (plus (symbol_ref) (const_int))). + * config/i386/i386.h (PREDICATE_CODES): Add CONST for + constant_call_address_operand. + + 2001-01-08 Michael Hayes + + * libgcc2.h (W_TYPE_SIZE): Fix case where MIN_UNITS_PER_WORD == 1 + and LONG_LONG_TYPE_SIZE > 32. + + 2001-01-07 Gerald Pfeifer + + * jump.c (reversed_comparison_code_parts): Fix typo introduced by + the previous change. + + Sun Jan 7 19:37:48 MET 2001 Jan Hubicka + + * jump.c (reversed_comparison_code_parts, reversed_comparison_code): + New. + (can_reverse_comparison_p): Rewrite to use reversed_comparison_code. + (reverse_condition_maybe_unordered): Abort on unsigned comparisons. + * rtl.h (reversed_comparison_code_parts, reversed_comparison_code): + Declare. + + 2001-01-07 Neil Booth + + * fix-header.c (read_scan_file): s/pfile/scan_in/. + + 2001-01-07 Neil Booth + + * c-lang.c (c_post_options): Call cpp_post_options. + * objc/objc-act.c (objc_post_options): Similarly. + * cppmain.c (main): Similarly. + * fix-header.c (read_scan_file): Similarly. + * cppinit.c (cpp_start_read): Move option consistency checks + to cpp_post_options. Don't call init_dependency_output. + If needed, add default target and main file dependency. + (OPT_MD, OPT_MMD): Remove. + (OPT_MF): New. + (cpp_handle_option): Update for OPT_* changes. + (cpp_post_options): New. + (init_dependency_output): Command line -MF overrides environment + variables. Don't set default target etc. Suppress output + if dependencies are going to stdout. + (print_help): Update. + * cpplib.h (cpp_post_options): New. + * gcc.c (cpp_options): Update for -MD, -MMD, -MF. + + Sun Jan 7 14:44:19 MET 2001 Jan Hubicka + + * jump.c (comparison_dominates_p): Support unordered compares. + + Sun Jan 7 14:39:07 MET 2001 Jan Hubicka + + * simplify-rtx.c (simplify_relational_operation): Always simplify + ORDERED and UNORDERED when FLAG_FAST_MATH. Handle properly UNLE + and UNGE. + + Sun Jan 7 14:35:13 MET 2001 Jan Hubicka + + * combine.c (combine_simplify_rtx): Recognize the unordered compares. + (nonzero_bits): Likewise. + (simplify_comparison): Likewise. + (num_sign_bit_copies): Likewise; return more sane value depending + on STORE_FLAG_VALUE. + (known_cond): Do not assume EQ to be always true for equivalent + operands. + + Sun Jan 7 14:31:57 MET 2001 Jan Hubicka + + * cse.c (fold_rtx): Handle unordered comparisons. + + Sun Jan 7 13:49:19 MET 2001 Jan Hubicka + + * rtlanal.c (set_of_1): New static function. + (reg_set_last_1, reg_set_p_1, reg_set_reg, reg_set_flag, + reg_set_last_unknown, reg_set_last_value, reg_set_last_first_regno, + reg_set_last_last_regno): Remove. + (set_of): New global function. + (set_of_data): New structure. + (reg_set_p, reg_set_last): Revamp for set_of. + * rtl.h (set_of): New. + + 2001-01-07 Joseph S. Myers + + * c-common.c (c_common_nodes_and_builtins): Add _Exit builtin. + * extend.texi: Document _Exit builtin. + + 2001-01-07 Neil Booth + + * (initialize, initialize_builtins, + initialize_dependency_output, initialize_standard_includes): + Rename s/initialize/init. Update. + (init_dependency_output): Move to after + cpp_handle_options, the correct location temporally at least. + (opt_comp): Move next to init (), its caller. Fix prototype. + (init): Make "initialized" local scope. + (cpp_create_reader): Always call init (). + (cpp_start_read): Update. + (output_deps): New function, broken out of cpp_finish. + (cpp_finish): Break out output_deps. + + 2001-01-07 Richard Henderson + + * collect2.c (COFF specific stuff): Revert 12-06 patch + to prototype system functions. + + 2001-01-07 Michael Hayes + + * hard-reg-set.h: Add multiple include guard. + * basic-block.h (struct loop): Add `sink' field. + * loop.h: Include sbitmap.h, hard-reg-set.h, and basic-block.h. + (emit_iv_add_mult): Delete. + (loop_iv_add_mult_hoist, loop_iv_add_mult_sink): Define. + (loop_iv_add_mult_emit_before, loop_insn_sink): Define. + (unroll_loop): Remove end_insert_before argument. + * loop.c (loop_givs_rescan): Remove end_insert_before argument. + (maybe_eliminate_biv_1): Likewise. + (emit_iv_add_mult): Delete. + (gen_add_mult, loop_regs_update): New. + (loop_insn_emit_after, loop_insn_emit_before): New. + (loop_insn_sink, loop_insn_sink_or_swim): New. + (emit_iv_add_mult): Delete. + (scan_loop): Set loop->sink. + (loop_givs_reduce): Use loop_insn_sink and its ilk. + (loop_givs_rescan, strength_reduce, check_dbra_loop): Likewise. + (maybe_eliminate_biv_1): Likewise. + (maybe_eliminate_biv_1): Add basic block argument. + * unroll.c (unroll_loop): Remove end_insert_before argument. + (find_splittable_regs): Likewise. + (find_splittable_regs): Use loop_insn_sink and its ilk. + (find_splittable_givs, final_biv_value, final_giv_value): Likewise. + + 2001-01-07 Michael Hayes + + * loop.h (loop_insn_hoist): New prototype. + * loop.c (loop_insn_hoist, loop_insn_emit_before): New. + (move_movables, loop_givs_rescan): Use loop_insn_hoist. + (check_dbra_loop, load_mems): Likewise. + * unroll.c (unroll_loop, find_splittable_regs): Likewise. + (find_splittable_givs): Likewise. + + 2001-01-07 Michael Hayes + + * loop.c (emit_iv_add_mult): Use single_set to examine new insn. + + 2001-01-07 Richard Henderson + + * sched-rgn.c (is_cfg_nonregular): Fix thinko's last change. + + 2001-01-07 Richard Henderson + + * Makefile.in (DRIVER_DEFINES): Define ENABLE_SHARED_LIBGCC and + NO_SHARED_LIBGCC_MULTILIB as required for the target. + * gcc.c (init_spec): Massage the existing libgcc_spec into a + variant that handles a shared libgcc. + (process_command): Always validate -{static,shared}-libgcc. + (do_spec_1): New 'M' case. + * invoke.text (Link Options): Document -{static,shared}-libgcc. + + 2001-01-07 Richard Henderson + + * Makefile.in (slibdir): New variable. + (libgcc.mk): Pass SHLIB_INSTALL to mklibgcc. + (installdirs): Create slibdir. + (install-libgcc, install-multilib): Defer to libgcc.mk. + * configure.in (slibdir): Substitute. + * mklibgcc.in (install): New target. + + * config/t-linux (SHLIB_LINK): Create links for the soname. + (SHLIB_INSTALL): New. + * config/alpha/t-osf4 (SHLIB_INSTALL): New. + * config/mips/t-iris6 (SHLIB_INSTALL): New. + * config/rs6000/t-aix43 (SHLIB_INSTALL): New. + * config/sparc/t-slibgcc (SHLIB_INSTALL): New. + * config/sparc/t-slibgcc-sld (SHLIB_INSTALL): New. + + 2001-01-07 Richard Henderson + + * config/rs6000/aix.h (LINK_LIBGCC_SPECIAL_1): New. + * config/rs6000/rs6000.h (LIBGCC_SPEC): Remove. + * config/rs6000/sysv4.h (LIBGCC_SPEC): Remove. + + 2001-01-07 Michael Hayes + + * loop.c (count_loop_regs_set): Delete. + (load_mems_and_recount_loop_regs_set): Delete. + (loop_regs_scan): Merge common code from count_loop_regs_set, + scan_loop, and load_mems_and_recount_loop_regs_set. + (scan_loop): Call load_mems directly and loop_regs_scan + again if new registers created. + + 2001-01-07 Neil Booth + + * toplev.c (main): Call the front-end specific post_options + hook if one is given. + * toplev.h (struct_lang_hooks, lang_hooks): New. + * c-lang.c (c_post_options, lang_hooks): Implement lang_hooks + for the C front end. + * cp/decl2.c (cxx_post_options, lang_hooks): Implement + lang_hooks for the C++ front end. + * objc/objc-act.c (objc_post_options, lang_hooks): Implement + lang_hooks for the ObjC front end. + * f/com.c (lang_hooks): Hooks for the Fortran front end. + * java/lang.c (lang_hooks): Hooks for the Java front end. + + 2001-01-07 Neil Booth + + * c-lex.c (init_c_lex): Request #define / #undef callbacks + for verbose DWARF[2] debugging. + (cb_define, cb_undef): The new callbacks. + * toplev.h (debug_define, debug_undef): Make const correct. + * toplev.c (debug_define, debug_undef): Similarly. Do not + perform the verbosity tests here anymore. + + 2001-01-07 Alexandre Oliva + + * reload.c (subst_reloads): Take INSN argument. When + replacing a LABEL_REF in a JUMP_INSN, add a REG_LABEL note. + * reload.h (subst_reloads): Adjust prototype. + * reload1.c (reload_as_needed): Pass INSN to subst_reloads. + * jump.c (mark_all_labels): Canonicalize any REG_LABEL notes + present in JUMP_INSNs and copy them to JUMP_LABEL. + * flow.c (find_label_refs, find_basic_blocks_1): Skip + JUMP_INSNs and insns with REG_LABELs that are followed by + JUMP_INSNs with the same REG_LABEL. + * sched-rgn.c (is_cfg_nonregular): Likewise. + * rtlanal.c (computed_jump_p): Make it false if a REG_LABEL + note is available. + * unroll.c (unroll_loop): Look for REG_LABEL notes in + JUMP_INSNs too. + * rtl.texi (REG_LABEL): Document usage in JUMP_INSNs. + + 2001-01-06 Richard Henderson + + * loop.c (scan_loop): Use xcalloc for the regs array. + (load_mems_and_recount_loop_regs_set): Zero the new memory + received from xrealloc. + + 2001-01-06 Neil Booth + + * mkdeps.c (deps_add_dep): Fix vector re-allocation. + + Sat Jan 6 00:09:34 2001 J"orn Rennecke + + * integrate.c (copy_rtx_and_substitute): When copying + an ignored return value, strip REG_FUNCTION_VALUE_P. + + 2001-01-06 Michael Hayes + + * loop.c (debug_biv, debug_giv): New. + (loop_biv_dump): Break out from ... + (record_biv): ... here. + (loop_giv_dump): Break out from ... + (record_giv): ... here. + (loop_bivs_check): Use print_simple_rtl. + * unroll.c (loop_iterations): Use print_simple_rtl. + + 2000-01-05 John David Anglin + + * pa.md (return, return_internal): Modify patterns to prevent regrename + mucking with the return pointer. + + 2001-01-05 Richard Henderson + + * dwarf2out.c (mem_loc_descriptor) [case MEM]: Revert 10-31 change. + + Fri Jan 5 16:34:18 2001 Nick Clifton + + * config/v850/lib1funcs.asm: Replace __mulsi3 routine with faster + version supplied by Matteo Frigo. + + 2001-01-05 Neil Booth + + * cpp.texi: Update for -MQ. + * cppinit.c (cpp_create_reader): Always create pfile->deps. + (cpp_cleanup): Always free pfile->deps. + (initialize_dependency_output): Don't create pfile->deps. + (cpp_handle_option): Similarly. + (OPT_MQ): New. + * gcc.c (cpp_options): Handle -MQ. + (DEFAULT_WORD_SWITCH_TAKES_ARG): Add -MQ. + * mkdeps.c (base_name): Remove. + (deps_init): Don't allocate vector space until it's needed. + (deps_free): Only free vectors if allocated. + (deps_add_target, deps_add_dep): Update for initial allocation. + (deps_add_default_target): Don't strip to the base_name. + + 2001-01-05 DJ Delorie + + * config/v850/v850.h (RETURN_ADDR_RTX): Define. + (INIT_EXPANDERS): Define. + + * config/v850/v850.c (struct machine_function): Define. + (v850_save_machine_status): New function. + (v850_restore_machine_status): New function. + (v850_return_addr): New function. + (v850_init_expanders): New function. + + * config/v850/v850-protos.h: Add prototypes for v850_return_addr + and v850_init_expanders. + + 2001-01-05 Zack Weinberg + + * cpplib.h (struct cpp_reader): Add help_only field. + * cppinit.c (COMMAND_LINE_OPTIONS): Add OPT_version. + (cpp_handle_option): Set pfile->help_only if we see -h, + --help, -target-help, or --version. Print version string but + do not set help_only if we see -v or -version. Make text + printed by -v match that printed by (-)-version. + + * cppmain.c (main): Exit after option parsing if + pfile->help_only is true. + + * toplev.c (independent_decode_option): Call print_version, + then exit, if we see --version (but not -version). + (print_version): Split lengthy message into two lines. + + 2001-01-05 Nick Clifton + + * config/v850/v850.c (v850_encode_data_area): Use alloca to create + temporary string for initialisation before calling ggc_alloc_string. + + 2001-01-06 Michael Hayes + + * rtl.h (print_simple_rtl): New. + * print-rtl.c (print_simple_rtl): New. + (flag_simple): New. + (print_rtx): Disable printing of flags and modes, etc., + if `flag_simple` nonzero. + + 2001-01-05 Zack Weinberg + + * function.c (fixup_var_refs): Use push_to_full_sequence where + possible. + + 2001-01-05 Michael Meissner + + * flags.h (flag_reorder_blocks): Add declaration. + (flag_rename_block): Ditto. + + 2001-01-05 DJ Delorie + + * function.c (reorder_blocks): Make sure the flags are all reset + before using them to mark blocks, else a second invocation will + corrupt the block chain. + (reorder_blocks_0): New, resets the flags. + + Fri Jan 5 20:34:06 2001 J"orn Rennecke + + * cse.c (find_comparison_args): Stop if the argument is known to + be constant. + + 2001-01-05 Alexandre Oliva + + * config/sh/sh.md (movdf): When splitting load into pair of + registers, don't clobber the register used in the address too + early. + + 2001-01-05 Jeffrey Oldham + + * varasm.c (mark_constant_pool): Improve initial comments. + (mark_constants): Move marking of constants to mark_constant. + (mark_constant): New function to recursively mark all constants + referred to by a constant. + + 2001-01-05 Catherine Moore + + * dbxout.c ((dbxout_parms): Handle invisible ref where decl is a REG. + + 2001-01-05 Phil Edwards + + * cp/lang-options.h: Bring comment in line with reality. + * f/lang-options.h: Likewise. + * java/lang-options.h: Likewise. + * objc/lang-options.h: Likewise. + * ch/lang-options.h: Likewise. + * f/g77.texi: And update the manual. + + 2001-01-05 Marek Michalkiewicz + Denis Chertykov + + * config/avr/avr-protos.h (avr_peep2_scratch_safe): Prototype. + * config/avr/avr.c (avr_peep2_scratch_safe): New function. + * config/avr/avr.md (all peepholes that request a scratch register): + Call it, FAIL the peephole if not safe (in interrupt functions). + + 2001-01-05 Mark Mitchell + + * ggc-page.c (NUM_EXTRA_ORDERS): Hardwire to zero for now. + + 2001-01-05 Joseph S. Myers + + * builtins.def (BUILT_IN_CONJ, BUILT_IN_CREAL, BUILT_IN_CIMAG): + Define. + * builtins.c (expand_builtin): Abort on BUILT_IN_CONJ, + BUILT_IN_CREAL and BUILT_IN_CIMAG. + * c-common.c (c_common_nodes_and_builtins): Create builtin conjf, + conj, conjl, crealf, creal, creall, cimagf, cimag and cimagl. + (expand_tree_builtin): Handle BUILT_IN_CONJ, BUILT_IN_CREAL and + BUILT_IN_CIMAG. + * extend.texi: Document these builtins. + + 2001-01-05 Daniel Berlin + + * c-common.c (lang_get_alias_set): Say we know nothing of + VECTOR_TYPE aliasing. + + * dwarf2out.c (is_base_type): Handle VECTOR_TYPE properly. + + 2001-01-05 Bruce Korb + + * fixinc/mkfixinc.sh(vax-*-bsd): convert exit and atexit calls to + their x* equivalent versions for atexit-less systems + * fixinc/fixincl.c(main): do not return from main() on atexit-less + systems (or any other system any more). + + 2001-01-05 Richard Earnshaw + + * arm.md (ldmsi_postinc): Avoid use of match_dup between input and + output operands. Use arm_hard_register_operand for operand 4. + (stmsi_postinc): Similarly. + (ldmsi): Use arm_hard_register_operand for opernand 2. + (stmsi): Similarly. + * arm.c (arm_hard_register_operand): New function. + * arm-protos.h (arm_hard_register_operand): Prototype it. + + * arm.h (HARD_REGNO_RENAME_OK): Define. + + Fri Jan 5 16:29:49 MET 2001 Jan Hubicka + + * simplify-rtx.c (cfc_args): add "unordered" field. + (check_fold_consts): Set unordered field. + (simplify_relational_operation): Simplify the unordered + comparisons. + + * reg-stack.c (swap_rtx_condition): Ensure that the transformation + is valid. + + * emit-rtl.c (try_split): Fix code to mark labels. + * jump.c (mark_jump_label): Make global. + * rtl.h (mark_jump_label): Declare. + + * predict.c (estimate_probability): Handle unordred comparisons. + + 2001-01-05 Neil Booth + + * cpp.texi: Update for -MP. Clarify behaviour of -MT. + * cppinit.c (initialize_dependency_output): Update. + (cpp_finish): Output dummy targets for -MP. + (OPT_MP): New. + (cpp_handle_option): Handle -MP. Don't quote -MT options. + * cpplib.h (struct cpp_options): Add deps_phony_targets. + * gcc.c (cpp_options): Update to handle -MP. + * mkdeps.c (deps_add_target, deps_add_default_target): Update + to quote only the default target. + (deps_phony_targets): Insert a preceding newline. Rename from + deps_dummy_targets for consistency. + * mkdeps.h: Update + + 2001-01-05 Alexandre Oliva + + * calls.c (emit_library_call_value_1): Support + INIT_CUMULATIVE_LIBCALL_ARGS. + * tm.texi (INIT_CUMULATIVE_LIBCALL_ARGS): Document it. + + 2001-01-04 Richard Henderson + + * c-decl.c (finish_struct): Detect flexible array members + used in an inappropriate context. + * c-typeck.c (really_start_incremental_init): Special case + constructor_max_index for zero length arrays. + (pop_init_level): Allow initialization of flexible array + members. Deprecate initialization of zero length arrays. + Don't issue missing initializer warning for flexible array + members or zero length arrays. + (process_init_element): Don't dereference null DECL_SIZE. + * varasm.c (array_size_for_constructor): Return a HOST_WIDE_INT. + Don't abort for empty constructors. Use size_binop + (output_constructor): Add commentary regarding zero length + array futures. Abort if we try to initialize an array of + unspecified length with a non-empty constructor in the middle + of a structure. + + * extend.texi (Zero Length): Update and clarify documentation + on static initialization. + + 2001-01-05 Michael Hayes + + * config/c4x/c4x.c (c4x_expand_prologue): Don't compile an ISR + with more than 32767 words of local storage. + + 2001-01-05 Michael Hayes + + * config/c4x/c4x.c (c4x_init_builtins): Remove builtin support + for 'abs', 'labs', and 'fabs'. + (c4x_expand_builtin): Likewise. + * config/c4x/c4x.h (enum c4x_builtins): Likewise. + + 2001-01-05 Alexandre Oliva + + * config/sh/sh.md (prget, prset): New insn types. + (return delay slot): Don't allow prset. + (call, sfunc delay slot): Don't allow prget. + (movsi_i, movsi_ie, movsi_i_lowpart): Create separate alternatives + for prset and prget. + + 2001-01-05 Michael Hayes + + * loop.h (struct loop_reg): New. + (struct loop_regs): Change to use array of `struct loop_reg'. + * loop.c: Replace assortment of varrays with single regs array. + (count_one_set): Delete may_not_move array argument + and use regs array instead. All caller's changed. + (count_loop_regs_set): Delete may_not_move and single_usage + arguments and use regs array instead. All caller's changed. + (find_single_use_in_loop): Replace usage array argument with pointer + to regs structure. All caller's changed. + (loop_optimize): Delete `moved_once' array. + + 2001-01-05 Michael Hayes + + * loop.c (prescan_loop): Set loop_info->has_nonconst_call. + Use it instead of loop_info->has_call for scanning loop mems. + (check_dbra_loop): Replace loop_info->has_call test with + loop_info->has_nonconst_call. + + 2000-01-04 Matthew Hiller + + * config/sh/sh.h (EPILOGUE_USES): Recognize fpscr as epilogue-used + for TARGET_SH3E. + + 2001-01-04 Joseph S. Myers + + * fold-const.c (fold): When folding a CONJ_EXPR of a COMPLEX_CST, + use TREE_REALPART and TREE_IMAGPART instead of TREE_OPERAND. + + 2001-01-04 Joseph S. Myers + + * c-common.c (SIZE_TYPE, WCHAR_TYPE): Define. + (flag_short_double, flag_short_wchar): Define. + (c_common_nodes_and_builtins): Create many tree nodes shared + between C and C++ here instead of in cp/decl.c and ... + * c-decl.c (init_decl_processing): ... here. + (SIZE_TYPE, WCHAR_TYPE): Don't define. + (flag_short_double, flag_short_wchar): Don't define. + (record_builtin_type): New function. + (build_void_list_node): New function. + * c-common.h (flag_short_double, flag_short_wchar, + record_builtin_type, build_void_list_node): Declare. + + Thu Jan 4 21:09:47 2001 J"orn Rennecke + + * integrate.c (expand_inline_function): Don't put a virtual + register into the reg map. + + * function.c (fixup_var_refs_1): If force_operand didn't put + the address into the target, move it there. + + 2001-01-04 Mark Mitchell + + Special-case tree_decl/tree_list allocations. + * ggc-page.c (OBJECT_PER_PAGE): Reimplement. + (OBJECT_SIZE): New macro. + (NUM_EXTRA_ORDER): Likewise. + (extra_order_size_table): New variable. + (NUM_ORDERS): New macro. + (objects_per_page_table): New variable. + (object_size_table): New variable. + (G.pages): Use NUM_ORDERS to bound the array. + (G.page_tails): Likewise. + (DIV_ROUND_UP): Remove. + (BITMAP_SIZE): Use CEIL, instead of DIV_ROUND_UP. + (alloc_page): Use OBJECT_SIZE. + (size_lookup): Don't make it const. + (ggc_alloc): Use OBJECT_SIZE. + (ggc_set_mark): Likewise. + (ggc_get_size): Likewise. + (init_ggc): Set up the object_size_table, objects_per_page_table, + and adjust size_lookup. + (ggc_recalculate_in_use_p): Use CEIL, not DIV_ROUND_UP. + (ggc_pop_context): Use NUM_ORDERS. + (clear_marks): Likewise. + (sweep_pages): Likewise. + (poison_pages): Likewise. + (ggc_print_statistics): Use OBJECT_SIZE. + + Thu Jan 4 15:54:05 2001 Richard Kenner + + * varasm.c (output_constructor): Use HOST_WIDE_INT for sizes. + Only call array_size_for_constructor if last field and array type + with no upper bound. + + 2001-01-04 Philip Blundell + + * config/arm/arm.c (arm_gen_constant): Prefer to emit constants + from bit 31 downwards, if this requires no more insns. + (count_insns_for_constant): New helper function for above. + + 2001-01-04 Alexandre Oliva + + * gencodes.c (output_predicate_decls): Remove empty initializer. + + 2001-01-04 Mark Mitchell + + * tree.c (copy_node): Remove documentation about obstacks. + (buidl1): Check that nobody tries to build 2-argument nodes this + way. + + 2001-01-04 Kaveh R. Ghazi + + * sparc.h (PREDICATE_CODES): Delete fp_sethi_p, fp_mov_p and + fp_high_losum_p. + + * gencodes.c (output_predicate_decls): Fill empty initializer + braces. + + 2001-01-04 Jakub Jelinek + + * tradcpp.c (deps_file, print_deps_missing_files): New variables. + (main): Handle -MG, -MD, -MMD. Bail out if -MG is given without -M + or -MM. + (do_include): Handle missing headers like cpp0. + * cppfiles.c (_cpp_execute_include): Don't prefix absolute header + paths with first include pathname. Don't strcat to uninitialized + string. + + 2001-01-04 Bernd Schmidt + + * regrename.c (regrename_optimize): Don't rename from frame pointer + if frame_pointer_needed. + (do_replace): Don't set ORIGINAL_REGNO to a hard register number. + * config/ia64/ia64.c (emit_all_group_insn_barriers): New function. + (ia64_reorg): Use it instead of scheduling if ! optimize. + (errata_emit_nops): Properly call asm_noperands. + (ia64_sched_reorder): Finish cycle if we see an asm. + (ia64_variable_issue): Clear scheduling state after asms. + + 2001-01-04 Neil Booth + + * cpp.texi: Update for -MT. + * cppinit.c (initialize_dependency_output): Add a default + target if none has been given already. + (no_tgt, OPT_MT): New. + (cpp_handle_option): Handle -MT. Update -M etc. + * cpplib.h (struct cpp_options): Remove deps_target. + * gcc.c (cpp_options): Handle -MT. + * mkdeps.c (struct deps): Move from mkdeps.h. + (deps_calc_target): Rename deps_add_default_target. Add a + default target if none has been specified already. + * mkdeps.h (struct deps): Move to mkdeps.c. + (deps_calc_target): Rename deps_add_default_target. + + 2000-01-03 Richard Henderson + + * c-decl.c (grokdeclarator): Give zero-length arrays size zero. + Remove dead code. + * c-typeck.c (push_init_level): Move checks for flexible array + members and zero length arrays ... + (pop_init_level): ... here. Silently discard empty initializations. + Remove dead code. + * varasm.c (output_constructor): Update for sizeof change to + zero-length arrays. + + * extend.texi (Zero Length): Clarify semantics. + + 2001-01-03 Alexandre Oliva + + * configure.in (tm.h): Include isns-codes.h last. + * configure: Rebuilt. + + 2001-01-03 Richard Henderson + + * config/alpha/alpha.md (addvsi3, addvdi3): New. + (negvsi2, negvdi2, subvsi3, subvdi3, mulvsi3, mulvdi3): New. + + 2001-01-03 Franz Sirl + + * tradcpp.c (main): Make sure finclude() is called with a valid + indepth value while handling -include. + + 2001-01-03 Alexandre Oliva + + * gencodes.c (output_predicate_decls): New function. + (main): Call it. + * machmode.h (GET_MODE_MASK): Arrange for it to be defined + even if it is not the first time machmode.h is #included. + * config/sh/sh.c (fpul_operand): Declare MODE argument. + * tm.texi (PREDICATE_CODES): Document predicate declarations. + * gcc.texi (Copyright): Added 2001. + + 2001-01-03 Joseph S. Myers + + * c-common.c (c_common_lang_init): New function. Warn if format + warning options which only have effects when used with -Wformat + are used without -Wformat. + * c-common.h (c_common_lang_init): Declare. + * c-lang.c (lang_init): Call c_common_lang_init. + * objc/objc-act.c (lang_init): Call c_common_lang_init. + + 2001-01-03 Joseph S. Myers + + * configure.in: Check for the mktemp command. + * configure: Regenerate. + * gccbug.in: Use a separate temporary file $TEMP0 for one use of + $TEMP. Create temporary files with mktemp, if available at + configure time; otherwise use set -C. Remove temporary files + before exit. + + 2001-01-03 Joseph S. Myers + + * configure.in: Require at least texinfo 4.0. Check for whether + Pod::Man is sufficiently recent to regenerate GCC manpages. + * configure: Regenerate. + * Makefile.in (TEXI2POD): Call perl explicitly rather than relying + on #!. + (GENERATED_MANPAGES): Define. + (generated-manpages): New target. Depend on cpp.1 as well as + gcov.1. + (install-man): Depend on $(GENERATED_MANPAGES) (defined by + configure to generated-manpages or empty) rather than on the + manpages directly. Remove execute permission from installed + gcov.1 as well as cpp.1. + * cpp.1, gcov.1: Regenerate. + + 2001-01-03 Kaveh R. Ghazi + + * builtins.c (expand_builtin_strncmp): Use host_integerp and + tree_low_cst. Allow using cmpstrsi in more cases. + + Wed Jan 3 10:48:43 2001 Richard Kenner + + * config/sparc/sparc.h (RETURN_IN_MEMORY): Return 0 for variable + sized types. + + Wed Jan 3 12:22:32 2001 Alexandre Oliva + + * build-make (HOST_CFLAGS): Added `-DGENERATOR_FILE'. + * Makefile.in (HOST_CFLAGS): Mention build-make. + + Wed Jan 3 08:53:50 2001 Richard Kenner + + * config/sparc/sparc.md (nonlocal_goto): Emit goto_handler_and_restore + as JUMP_INSN. + + 2001-01-01 Bernd Schmidt + + * builtins.c (expand_builtin_return_addr): Don't use MEM_ALIAS_SET on + a REG rtx. + + * cse.c (cse_rtx_varies_p): Accept additional FROM_ALIAS arg. All + callers changed. + + * alias.c (throughout): Use ORIGINAL_REGNO when accessing + reg_base_value and reg_known_value arrays. + (init_alias_analysis): Add more cases to detect known values. + * sched-deps.c (deps_may_trap_p): New function. + (sched_analyze_2): Use it. + + 2001-01-03 Alexandre Oliva + + * combine.c (simplify_shift_const): Even if we're sign-extracting, + don't discard an ASHIFTRT if we're shifting in a wider mode. + + 2000-01-02 John David Anglin + + * toplev.c (rest_of_compilation): Don't print basic block information + when CFG isn't up to date. + + 2001-01-02 Mark Elbrecht + + * config/i386/djgpp.h (DWARF2_DEBUGGING_INFO): Define. + (UNALIGNED_INT_ASM_OP, UNALIGNED_DOUBLE_ASM_OP): Define. + (UNALIGNED_SHORT_ASM_OP): Define. + (CPP_PREDEFINES): Remove defines for GO32 and DJGPP. + + 2001-01-02 Mark Mitchell + + * fold-const.c (fold_convert): Fix typo. + + 2001-01-02 Richard Henderson + + * c-common.h (ASM_INPUT_P): New. + * c-parse.in (asm): Set it when needed. + * c-semantics.c (genrtl_asm_stmt): Test it instead of the + existence of an operand. + + Tue Jan 2 20:27:07 MET 2001 Jan Hubicka + + * dwarf2out.c (stack_adjust_offset): Handle PRE_MODIFY. + (dwarf2out_frame_debug_expr): Likewise. + (mem_loc_descriptor): Handle PRE and POST_MODIFY. + + Tue Jan 2 20:21:31 MET 2001 Jan Hubicka + + * i386.c (ix86_split_to_parts): Return number of part required; + handle TFmodes. + (print_operand, ix86_expand_branch, ix86_expand_fp_movcc): Handle + TFmodes. + (ix86_split_long_move): Use number of part returned + by ix86_split_to_parts + * i386.h (MASK_128BIT_LONG_DOUBLE, TARGET_128BIT_LONG_DOUBLE): + New macros. + (TARGET_SWITCHES): Add 128bit-long-double and 96bit-long-double + (LONG_DOUBLE_TYPE_SIZE): Change from constant. + (MAX_LONG_DOUBLE_TYPE_SIZE): New macro. + (INTEL_EXTENDED_IEEE_FORMAT): Likewise. + (ALIGN_MODE_128): Add TFmode. + (IS_STACK_MODE): Likewise. + (HARD_REGNO_NREGS): TFmode needs 3 registers. + (HARD_REGNO_OK): Support TFmodes. + (ASM_OUTPUT_LONG_DOUBLE): Handle TFmodes. + * i386.md (scheduler definitions): Use memory operand to determine + fst/fld instructions; use mode attribute to determine real mode of + the instruction. + (*tf): New patterns, expanders and splitters; based on XFmode patterns. + * invoke.texi (128bit-long-double, 96bit-long-double): Document. + + 2001-01-02 Mark Mitchell + + * tree.def (TRUTH_NOT_EXPR): Improve documentation. + + Tue Jan 2 10:47:38 2001 Richard Kenner + + * config/mips/mips.c (function_arg): Don't pass NULL_TREE to + host_integerp. + + 2001-01-02 Jeffrey Oldham + + * tm.texi (FUNCTION_ARG): Document that @var{type} can be an + incomplete type. + + Tue Jan 2 10:47:38 2001 Richard Kenner + + * tsystem.h: Define HAVE_DECL_GETOPT. + + 2001-01-02 Philip Blundell + + * config/arm/linux-gas.h (CLEAR_INSN_CACHE): Avoid illegal clobber + of input operand. + + 2001-01-02 Richard Henderson + + * alpha.md (*ze_and_ne): Duplicate insn condition to split. + + 2001-01-02 Andreas Jaeger + + * c-decl.c (c_decode_option): Remove support of + -Wmissing-noreturn. + + * toplev.c (documented_lang_options): Remove -Wmissing-noreturn. + (W_options): Add -Wmissing-noreturn here. + + * flow.c: Define lang_missing_noreturn_ok_p. + (check_function_return_warnings): Use it. + + * c-common.h: Declare lang_missing_noreturn_ok_p. + + * c-lang.c (c_missing_noreturn_ok_p): New function. + (lang_init): Set lang_missing_noreturn_ok_p. + + * invoke.texi (Warning Options): Document this. + + 2000-12-27 Phil Edwards + + * extend.texi (C++ Extensions): New node for C++ attributes; + describe init_priority and com_interface. + * invoke.texi: Remove -finit-priority as it now has zero effect. + * install.texi: Fix xref syntax. + * md.texi: Likewise. + + Mon Jan 1 21:28:29 2001 Richard Kenner + + * config.gcc (sparc64-wrs-vxworks*): New case. + * config/sparc/vxsparc64.h, config/sparc/t-vxsparc64: New files. + + * config/sparc/sparc.c (sparc_override_options): Do support different + pointer and architecture size. + * config/sparc/sparc.h (MIN_UNITS_PER_WORD): Always 4. + (POINTERS_EXTEND_UNSIGNED): Define. + (Pmode): Test TARGET_ARCH64, not TARGET_PTR64. + (FUNCTION_MODE): Define to be Pmode. + * config/sparc/sparc.md (64-bit call patterns): FUNCTION_MODE now DI. + + * function.c (expand_function_end): Properly handle DECL_RESULT + and copy when ptr_mode != Pmode. + * expmed.c (make_tree): Convert X from Pmode to ptr_mode, if needed. + + 2001-01-01 Kaveh R. Ghazi + + * c-common.c (c_common_nodes_and_builtins): Set prototype + parameters for __builtin_fputs, __builtin_fputc and + __builtin_fwrite. Don't declare plain fputc as a builtin. + + 2001-01-01 John David Anglin + + * loop.c (add_label_notes): Increment the label usage count when + a note is added to an insn which refers to a CODE_LABEL. + * gcse.c (add_label_notes): Likewise. + + 2001-01-01 Andreas Jaeger + + * loop.c (scan_loop): Use xmalloc to allocate movables. + + 2001-01-01 Alexandre Oliva + + * tm.texi (REGISTER_MOVE_COST): Add a mode argument. + * reload.c (REGISTER_MOVE_COST): Likewise. Adjust all callers. + * reload1.c (REGISTER_MOVE_COST): Likewise. + * regclass.c (REGISTER_MOVE_COST): Likewise. + (move_cost, may_move_in_cost, may_move_out_cost): Add mode + dimension. Adjust all users. + (init_reg_sets_1): Iterate on all modes. + * config/1750a/1750a.h (REGISTER_MOVE_COST): Adjust. + * config/a29k/a29k.h (REGISTER_MOVE_COST): Adjust. + * config/alpha/alpha.h (REGISTER_MOVE_COST): Adjust. + * config/arc/arc.h (REGISTER_MOVE_COST): Adjust. + * config/arm/arm.h (REGISTER_MOVE_COST): Adjust. + * config/avr/avr.h (REGISTER_MOVE_COST): Adjust. + * config/c4x/c4x.h (REGISTER_MOVE_COST): Adjust. + * config/d30v/d30v.h (REGISTER_MOVE_COST): Adjust. + * config/dsp16xx/dsp16xx.h (REGISTER_MOVE_COST): Adjust. + * config/h8300/h8300.h (REGISTER_MOVE_COST): Adjust. + * config/i386/i386.h (REGISTER_MOVE_COST): Adjust. + * config/ia64/ia64.h (REGISTER_MOVE_COST): Adjust. + * config/m32r/m32r.h (REGISTER_MOVE_COST): Adjust. + * config/m68hc11/m68hc11.h (REGISTER_MOVE_COST): Adjust. + * config/m68k/m68k.h (REGISTER_MOVE_COST): Adjust. + * config/mcore/mcore.h (REGISTER_MOVE_COST): Adjust. + * config/mips/mips.h (REGISTER_MOVE_COST): Adjust. + * config/mn10200/mn10200.h (REGISTER_MOVE_COST): Adjust. + * config/mn10300/mn10300.h (REGISTER_MOVE_COST): Adjust. + * config/ns32k/ns32k.h (REGISTER_MOVE_COST): Adjust. + * config/pa/pa.h (REGISTER_MOVE_COST): Adjust. + * config/pdp11/pdp11.h (REGISTER_MOVE_COST): Adjust. + * config/pj/pj.h (REGISTER_MOVE_COST): Adjust. + * config/romp/romp.h (REGISTER_MOVE_COST): Adjust. + * config/rs6000/rs6000.h (REGISTER_MOVE_COST): Adjust. + * config/sh/sh.h (REGISTER_MOVE_COST): Adjust. + * config/sparc/sparc.h (REGISTER_MOVE_COST): Adjust. + + 2001-01-01 Bernd Schmidt + + * alias.c (fixed_scalar_and_varying_struct): Adjust prototype of + arg VARIES_P. Call it with extra arg. + (true_dependence): Likewise. + * rtl.h (rtx_addr_can_trap_p): Declare. + (rtx_varies_p, rtx_addr_varies_p, true_dependence): Update + prototypes. + * rtlanal.c (rtx_addr_can_trap_p): No longer static. + (rtx_varies_p): Accept extra arg FOR_ALIAS; only disallow + pic offset table register if it's zero. All callers changed. + (rtx_addr_varies_p): Accept extra arg FOR_ALIAS; all callers changed. + + Mon Jan 1 07:38:33 2001 Richard Kenner + + * explow.c (convert_memory_address, case SYMBOL_REF): Copy + STRING_POOL_ADDRESS_P. + + * config/sparc/sparc.c (input_operand): Properly test for short op. + + * config.gcc (sparc-*-elf): Include sparc/sol2.h. + (sparc-*-rtems*): Include sparc/sol2.h and sparc/elf.h. + (sparclite-*-elf*, sparc86x-*-elf*): Likewise. + * config/sparc/elf.h: No longer include sol2.h. + * config/sparc/lifeelf.h: No longer include sparc/elf.h. + * config/sparc/rtemself.h, config/sparc/sp86x-elf.h: Likewise. + + * config/sparc/sparc.md: Test TARGET_ARCH64 instead of TARGET_PTR64. + + 2001-01-01 Michael Hayes + + * loop.c (check_insn_for_bivs): Use ivs->n_regs to check array bounds. + (find_mem_givs, record_biv, maybe_eliminate_biv): Likewise. + (record_initial): Likewise. + * unroll.c (copy_loop_body, loop_iterations): Likewise. + (remap_split_bivs): Likewise. + + 2001-01-01 Michael Hayes + + * loop.c (loop_ivs_free): New function. + (strength_reduce): Break out from... + + 2001-01-01 Michael Hayes + + * loop.h (struct iv): New. + (REG_IV_TYPE, REG_IV_CLASS, REG_INFO): Modify to use 'struct iv'. + (struct loop_ivs): Replace 'reg_iv_type', 'reg_iv_info', + 'reg_biv_class' fields with 'regs' and 'n_regs'. + (struct ivs): Rename 'loop_iv_list' field to 'list'. + * loop.c (loop_bivs_find, strength_reduce): Use ivs->regs array. + * unroll.c (loop_iterations): Check array bounds with ivs->n_regs. + + 2000-12-31 Alexandre Oliva + + * resource.c (mark_referenced_resources): Abort() before + attempting to mark a pseudo register. + (mark_set_resources): Likewise. + + 2001-01-01 Michael Hayes + + * loop.h (REG_IV_CLASS): New accessor macro. + * loop.c (REG_IV_CLASS): Use it instead of reg_iv_class array. + * unroll.c (REG_IV_CLASS): Likewise. + + See ChangeLog.4 for earlier changes. diff -Nrc3pad gcc-3.0.4/gcc/ChangeLog.6 gcc-3.1/gcc/ChangeLog.6 *** gcc-3.0.4/gcc/ChangeLog.6 Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/ChangeLog.6 Fri Jan 4 00:19:27 2002 *************** *** 0 **** --- 1,19208 ---- + 2001-12-31 Richard Henderson + + * config/ia64/ia64.c (mark_reg_gr_used_mask): Mind HARD_REGNO_NREGS. + + 2001-12-31 Richard Henderson + + * regrename.c (build_def_use): Don't rename asm operands that + were originally hard registers. + (copyprop_hardreg_forward_1): Likewise. + (find_oldest_value_reg): Copy ORIGINAL_REGNO from source. + * varasm.c (make_decl_rtl): Use gen_rtx_raw_REG. Set ORIGINAL_REGNO. + + 2001-12-31 Douglas B Rupp + + * config/alpha/vms.h (HAS_INIT_SECTION, NEED_ATEXIT): Remove. + (NAME__MAIN, SYMBOL__MAIN): Define. + + 2001-12-31 Richard Henderson + + * cfgrtl.c (delete_insn): Check for not NOTE_INSN_DELETED_LABEL + before decrementing LABEL_NUSES from a jump table. + + * final.c (alter_subreg): Assign REGNO after changing the rtx code. + + * config/alpha/alpha.c (reg_no_subreg_operand): Reject all + non-registers. + + 2001-12-31 Graham Stott + + * halfpic.h: Remove foward defs of tree_node and rtx_def. + + * toplev.h: Remove forward def of tree_node, rtx_def. + + * except.h: Remove forward def of tree_node, rtx_def and + define of tree, rtx. Also remove undefs. + + * basic-block.h: Remove forward def of tree_node and + define of tree. + + 2001-12-30 Richard Henderson + + * cfglayout.c (scope_def, scope_forest_info, forest, + relate_bbs_with_scopes, make_new_scope, build_scope_forest, + remove_scope_notes, insert_intra_before_1, insert_intra_1, + insert_intra_bb_scope_notes, insert_inter_bb_scope_notes, + rebuild_scope_notes, free_scope_forest_1, dump_scope_forest, + dump_scope_forest_1, get_next_bb_note, get_prev_bb_note): Remove. + (fixup_reorder_chain): Don't set scope for bb. + (insn_scopes, scope_to_insns_initialize, set_block_levels, + change_scope, scope_to_insns_finalize): New. + (cfg_layout_initialize, cfg_layout_finalize): Update to match. + * cfglayout.h (scope_def, scope): Remove. + (reorder_block_def): Remove scope member. + (scope_to_insns_initialize, scope_to_insns_finalize): Declare. + * haifa-sched.c: Revert reemit_other_notes change. + * sched-ebb.c (schedule_ebbs): Don't call remove_unnecessary_notes. + Use scope_to_insns_initialize and scope_to_insns_finalize. + * sched-rgn.c (schedule_insns): Likewise. + + 2001-12-31 Graham Stott + + * c-lex.c: Include tree.h before expr.h + + * c-typeck.c: Include rtl.h earlier. + + * tree.h (STRIP_NOPS): Remove extraneous semicolon. + (STRIP_SIGN_NOPS): Likewise. + (STRIP_TYPE_NOPS): Likewise. + (COMPLETE_OR_UNBOUND_ARRAY_TYPE_P): Add Parenthesis around + macro paramater. + + * final.c (struct bb_list): Delete. + (struct bb_str): Likewise. + + * cfgloop.c (flow_loop_entry_edges_find): Fix typo. + (flow_loop_exit_edges_find): Likewise. + + * gcse.c (gcse_main): Fix typos. + (alloc_gcse_mem): Likewise. + + * function.h: Remove undefs for rtx and tree. + + 2001-12-30 Richard Henderson + + * loop.c (check_dbra_loop): Fix last change: examine both + has_multiple_exit_targets and exit_count. + + 2001-12-30 Richard Henderson + + * integrate.c (copy_rtx_and_substitute): Fix error last change: + we need to unconditionally create a new mem. + + 2001-12-30 Hans-Peter Nilsson + + * config/mmix/mmix.md ("*call_real"): Fix typo in comment. + * config/mmix/mmix.h (EXTRA_CONSTRAINT): Pass MMIX_REG_OK_STRICT + to mmix_extra_constraint. + * config/mmix/mmix.c (mmix_secondary_reload_class): Only handle + non-global register classes. Mark now unused parameters as such. + (mmix_extra_constraint, 'U'): Use new parameter strict and call + calling memory_operand_p or strict_memory_address_p, not + address_operand. + * config/mmix/mmix-protos.h (mmix_extra_constraint): Add parameter. + + 2001-12-30 Kaveh R. Ghazi + + * unroll.c: Move include files above first use of `const'. + + 2001-12-30 Jakub Jelinek + + * cfgrtl.c (try_redirect_by_replacing_jump): Allow redirect_jump + to fail if target is EXIT_BLOCK_PTR, die otherwise. + (redirect_edge_and_branch): Likewise. + * cfgcleanup.c (try_forward_edge): Don't force jump redirecting + if target is EXIT_BLOCK_PTR. + + 2001-12-29 David Edelsohn + + * gcc.c (init_gcc_spec): Do not link with static libgcc.a if + gcc invoked with -shared. + + 2001-12-29 Graham Stott + + * config/i386/i386.c (ix86_asm_dialect): Fix enum type. + + (override_options): Delete abs macro unused. + + (output_pic_addr_const): Use ASM_ATT/ASM_INTEL enumerations + when testing ASSEMBLER_DIALECT. + + (print_reg): Likewise. + (print_operand): Likewise. + (print_operand_address): Likewise. + (print_operand): abort if ASSEMBLER_DIALECT is unknown dialect. + + * config/i386/i386.h (ix86_asm_dialect): Fix enum type. + + (FIND_BASE_TERM): Fix typo. + + Sat Dec 29 15:48:54 2001 Richard Kenner + + * expr.c (store_field): Use adjust_address, not PUT_MODE. + (expand_expr, case VIEW_CONVERT_EXPR): Likewise. + * reload1.c (eliminate_regs, case SUBREG): Likewise, but use + adjust_address_nv. + * varasm.c (make_decl_rtl): Likewise. + * integrate.c (copy_rtx_and_substitute, case MEM): Likewise, but use + replace_equiv_address_nv. + + * varasm.c (decode_addr_const, case INTEGER_CST): Call + output_constant_def instead of looking at TREE_CST_RTL. + + * expr.c (convert_move): If -fforce-mem, force FROM to not be memory. + + * stor-layout.c (layout_decl): Don't misalign field of variable size + for packed record. + + * dwarf2out.c (compute_section_prefix): Avoid cast warning. + (gen_decl_die): Only check DECL_IGNORED_P on decls. + (dwarf2out_decl): Check for DECL_IGNORED_P only when needed. + + 2001-12-29 Jakub Jelinek + + * cfglayout.c (insert_intra_before_1): New. + (insert_inter_bb_scope_notes): Emit sibling block notes which don't + span multiple basic blocks. + + 2001-12-29 Richard Henderson + + * loop.c (prescan_loop): Set has_multiple_exit_targets for exception + edges. Rearrange jump interpretation code to use pc_set. + (check_dbra_loop): Examine has_multiple_exit_targets not exit_count. + + * sched-deps.c (sched_analyze_insn): Set scheduling barrier for + all insns that can throw, not just if flag_non_call_exceptions. + + 2001-12-29 Stan Shebs + + * objc/objc-act.c (STRING_OBJECT_CLASS_NAME): Remove. + (default_constant_string_class_name): New global. + (objc_init): Set it. + (synth_module_prologue): Use it. + + * objc/objc-act.c: Apply various cosmetic and formatting changes. + + 2001-12-29 Kazu Hirata + + * config/rs6000/darwin-tramp.asm: Fix comment formatting. + * config/rs6000/freebsd.h: Likewise. + * config/rs6000/rs6000.c: Likewise. + * config/sh/sh.c: Likewise. + * config/sh/sh.h: Likewise. + + 2001-12-28 Stan Shebs + + * objc/objc-act.c (build_module_descriptor): Make sure the init + function is not deferred. + (build_dispatch_table_initializer): Compute the method encoding if + not already done. + + 2001-12-28 Kazu Hirata + + * doc/md.texi: Add @findex define_insn_and_split. + + 2001-12-28 Hans Bohem + + * config/ia64/linux.h (MD_FALLBACK_FRAME_STATE_FOR): New. + * config/ia64/unwind-ia64.c (uw_init_context_1): Redo sp, psp, + bsp setup. Set pri_unat_loc to something reasonable. + (uw_install_context): Add missing cast. + (unw_access_gr): Fix off-by-1 indexing error. + + 2001-12-28 Kazu Hirata + + * except.c: Fix comment formatting. + * flags.h: Likewise. + * flow.c: Likewise. + * predict.c: Likewise. + * simplify-rtx.c: Likewise. + * system.h: Likewise. + * vmsdbg.h: Likewise. + * vmsdbgout.c: Likewise. + + 2001-12-28 Kazu Hirata + + * config/h8300/h8300.md: Fix formatting. + + 2001-12-28 Geoff Keating + + * varasm.c (record_constant_1): Correct parameter to recursive + call in default case. + + 2001-12-28 Jakub Jelinek + + * config/sparc/sparc.h (ASM_PREFERRED_EH_DATA_FORMAT, + ASM_OUTPUT_DWARF_PCREL): Define. + * config/sparc/sol2.h (ASM_PREFERRED_EH_DATA_FORMAT): Define. + * configure.in (HAVE_AS_SPARC_UA_PCREL): Check whether as supports + .uaword %r_disp32() and linker handles it correctly. + * configure, config.in: Rebuilt. + + 2001-12-28 Jakub Jelinek + + * c-typeck.c (store_init_value): If initializing object with array + type of unknown size by a compound literal, set object's size from + compound literal size. + * doc/extend.texi (Compound Literals): Adjust documentation. + + 2001-12-28 Richard Henderson + + * real.c (etoe113, toe113): Ifndef INTEL_EXTENDED_IEEE_FORMAT. + (endian): Clear word 3 for INTEL_EXTENDED_IEEE_FORMAT. + (etartdouble): Invoke etoe64 for INTEL_EXTENDED_IEEE_FORMAT. + * real.h (REAL_VALUE_TO_TARGET_LONG_DOUBLE): Don't special case + INTEL_EXTENDED_IEEE_FORMAT. + + 2001-12-27 Geoff Keating + + * combine.c (try_combine): Mask off sign bits when combining + stores to the low and high parts of a two-word value. + + * expr.c (expand_expr): Don't mark memory for non-constants as + constant. + + Thu Dec 27 20:39:55 2001 Richard Kenner + + * integrate.c (copy_rtx_and_substitute, case MEM): If inlining + and not for LHS, clear RTX_UNCHANGING_P. + + 2001-12-28 Philipp Thomas + + * cppfiles.c (stack_include_file): Don't translate . + + 2001-12-27 Roger Sayle + + * builtins.c (expand_builtin_memcmp): Optimize memcmp built-in + when all arguments are known constant. Fixes PR opt/3508. + + 2001-12-27 Kazu Hirata + + * config/h8300/h8300.md (two anonymous patterns): Remove. + + 2001-12-27 Richard Henderson + + * haifa-sched.c (reemit_other_notes): New. + (schedule_block): Use it. + * sched-ebb.c (schedule_ebbs): Call remove_unnecessary_notes. + * sched-rgn.c (schedule_insns): Likewise. + * cfglayout.c (remove_scope_notes): Handle removing note at + the end of the insn chain. + * function.c (debug_find_var_in_block_tree): New. + + 2001-12-27 Alan Modra + David Edelsohn + + * config/rs6000/linux64.h (ASM_DECLARE_FUNCTION_NAME): Simplify. + + 2001-12-27 Jakub Jelinek + + * toplev.c (independent_decode_option): Re-add -aux-info option + handling. + + Thu Dec 27 09:50:44 2001 Richard Kenner + + * integrate.c (copy_insn_notes): Don't adjust REG_EH_REGION note + if special value. + + 2001-12-26 Kaveh R. Ghazi + + * collect2.c (is_ctor_dtor): Const-ify. + * m88k-protos.h (output_file_start): Likewise. + * m88k.c (m88k_lang_independent_options, output_options, + output_file_start): Likewise. + * fix-header.c (files_to_ignore, std_include_entry, include_entry, + std_include_table, main): Likewise. + * protoize.c (longopts): Likewise. + * regclass.c (int_reg_class_contents): Likewise. + * toplev.c (dump_file, f_options, W_options): Make static. + (lang_independent_options, f_options, W_options): Const-ify. + * tree-dump.c (dump_file_info): Likewise. + * unroll.c (_factor): Make static. + + Wed Dec 26 17:55:50 2001 Richard Kenner + + * config/alpha/alpha.c (alpha_align_insns): Remove warning. + + * config/sparc/sparc.md (call struct patterns): Show starting + at two words long. + + 2001-12-26 David Edelsohn + + * rs6000.h (ASM_CPU_SPEC, CPP_CPU_SPEC): Add mcpu=405. + * sysv4.h (CPP_SYSV_SPEC, CPP_OS_VXWORKS_SPEC): Add mcpu=405. + + 2001-12-26 DJ Delorie + + * function.c (expand_main_function): Make sure stack adjustments + happen before sjlj exception setup. + + 2001-12-26 David Edelsohn + + * rs6000.md (indirect_jump): Prefer CTR over LR. + * xcoff.h (ASM_DECLARE_FUNCTION_NAME): Handle weak function. + + Tue Dec 25 12:04:47 2001 Richard Kenner + + * dwarf2out.c: Reformatting and minor code rearrangement. + + 2001-12-24 Douglas B. Rupp (rupp@gnat.com) + + * configure.in (quoted_stage_prefix_set_by_configure): Generate. + * configure: Regenerated. + * Makefile.in (SUBDIR_FLAGS_TO_PASS): Use + quoted_stage_prefix_set_by_configure. + + Mon Dec 24 10:24:59 2001 Richard Kenner + + * rtl.h (in_expr_list_p): New declaration. + * rtlanal.c (in_expr_list_p): New function. + * cfgcleanup.c: Reformatting and minor code rearrangement. + * cfglayout.c, cfgloop.c, cfgrtl.c: Likewise. + + 2001-12-23 Richard Henderson + + PR c/5163: + * c-decl.c (duplicate_decls): As needed, set DECL_INLINE when + we have a function body associated. Minor cleanups. + (grokdeclarator): Do not set DECL_INLINE without a function body. + + 2001-12-23 Richard Henderson + + * stmt.c (resolve_operand_names): Handle operand modifiers. + + 2001-12-23 Richard Henderson + + * stmt.c (parse_input_constraint): Break out from ... + (expand_asm_operands): ... here. Loop over the operands twice, + the first time only calling mark_addressable. Correct and simplify + the conditions for spilling an output operand to memory. + + 2001-12-23 Richard Henderson + + * config/alpha/alpha.c (call_operand) [OSF]: Disallow virtual regs. + + * config/alpha/alpha.md (UNSPEC_SIBCALL): New. + (sibcall, sibcall_value, sibcall_osf_1_er, sibcall_osf_1): Use it. + (sibcall_value_osf_1_er, sibcall_value_osf_1): Likewise. + + 2001-12-23 Joseph S. Myers + + * c-typeck.c (c_start_case): Don't strip conversions from the + controlling expression. Partially fixes PR c/2454. + + 2001-12-23 Joseph S. Myers + + * Makefile.in (USER_H): Remove proto.h. + * config.gcc (c*-convex-*): Set extra_headers=proto.h. + + 2001-12-23 Kaveh R. Ghazi + + * arc.c (arc_hard_regno_mode_ok): Const-ify. + * arc.h (arc_hard_regno_mode_ok): Likewise. + * i386.c (x86_64_reg_class_name): Make static. + * m68k.c (regno_reg_class): Const-ify. + * m68k.h (regno_reg_class): Likewise. + * mcore.c (reg_class_from_letter): Likewise. + * mcore.h (reg_class_from_letter): Likewise. + * sh.c (reg_class_from_letter, ashiftrt_insns, shift_insns, + ext_shift_insns, ext_shift_amounts): Likewise. + * sh.h (reg_class_from_letter): Likewise. + * sparc.c (hard_regno_mode_classes, hard_32bit_mode_classes, + hard_64bit_mode_classes): Likewise. + * sparc.h (hard_regno_mode_classes): Likewise. + + * gcc.c (modify_target): Make static. + * gengenrtl.c (defs, formats): Likewise. + * reload1.c (elim_table_1, init_elim_table): Const-ify. + * tradcpp.c (directive, directive_table, handle_directive, + skip_if_group, run_directive): Likewise. + + 2001-12-23 Richard Henderson + + * calls.c (expand_call): Don't turn off ECF_LIBCALL_BLOCK for + an invalid result register; do end the sequence properly. + (emit_library_call_value_1): Likewise. + + 2001-12-22 Aldy Hernandez + + * config/rs6000/rs6000.h (rs6000_builtins): Add vsldoi variants. + + * config/rs6000/rs6000.md ("altivec_vsldoi_*"): Same. + + * config/rs6000/rs6000.c: Clean up some spacing and indentation. + (altivec_init_builtins): Add tree types for builtins with 4 bit + literals. + (bdesc_3arg): Add vsldoi variants. + + 2001-12-22 Kaveh R. Ghazi + + * 1750a.h (datalbl, jmplbl): Declare array size explicitly. + * a29k.h (a29k_debug_reg_map): Likewise. + * arc.h (arc_regno_reg_class): Likewise. + * c4x-protos.h (c4x_regclass_map, c4x_caller_save_map): Likewise. + * convex.h (regno_reg_class, reg_class_from_letter): Likewise. + * d30v.h (regno_reg_class, reg_class_from_letter): Likewise. + * i386.h (regclass_map): Likewise. + * m32r.h (m32r_hard_regno_mode_ok, m32r_punct_chars): Likewise. + * mcore.h (regno_reg_class): Likewise. + * mips.h (mips_print_operand_punct, mips_char_to_class): + Likewise. + * ns32k.h (regclass_map): Likewise. + * pj.h (pj_debugreg_renumber_vec): Likewise. + * s390.h (regclass_map): Likewise. + * sh.h (regno_reg_class): Likewise. + * sparc.h (sparc_regno_reg_class): Likewise. + + * hard-reg-set.h (reg_class_contents): Likewise. + * machmode.h (class_narrowest_mode): Likewise. + + 2001-12-22 David Edelsohn + + * loop.c (scan_loop, move_movables, count_one_set): Do not + overlook hard registers when computing statistics. + + Sun Dec 23 00:49:37 CET 2001 Jan Hubicka + + * calls.c (ECF_LIBCALL_BLOCK): New constant. + (emit_call_1, initialize_argument_information, + precompute_arguments, expand_call, + emit_library_call_value_1): Use ECF_LIBCALL_BLOCK + instead of ECF_PURE | ECF_CONST. Honnor LCT_CONST/LCT_PURE. + + 2001-12-22 Joseph S. Myers + + * config.gcc (extra_headers): Move settings to math-68881.h and + ppc-asm.h to common code for CPU types. Use math-68881.h on all + m68k targets. + (header_files): Remove unused setting. + + 2001-12-22 Kaveh R. Ghazi + + * elxsi.c: Include "hard-reg-set.h" and/or don't declare + `call_used_regs' explicitly. + * i860.c: Likewise. + * m68k.c: Likewise. + * ns32k.c: Likewise. + * pa.c: Likewise. + * vax.c: Likewise. + * we32k.c: Likewise. + + Fri Dec 21 23:30:14 CET 2001 Jan Hubicka + + * i386.h (TARGET_CPU_DEFAULT_pentium_mmx): New. + (TARGET_CPU_DEFAULT_*): Renumber. + + Sat Dec 22 12:20:20 EST 2001 John Wehle (john@feith.com) + + * rtl.h (subreg_lsb): Declare. + * rtlanal.c (subreg_lsb): Implement. + + Sat Dec 22 08:59:50 2001 Richard Kenner + + * predict.c: Reformatting and minor cleanups. + * cfg.c, cfganal.c, cfgbuild.c: Likewise. + + * expr.c (expand_expr, case ADDR_EXPR): Handling taking address of + SAVE_EXPR. + * function.c (gen_mem_addressof): Add missing tests for SAVE_EXPR. + (put_addressof_into_stack): Clarify code in setting of used_p. + + * calls.c (flags_from_decl_or_type): Move ECF_SP_DEPRESSED here. + (expand_call): Delete from here. + Do pending stack adjustments if ECF_SP_DEPRESSED. + + * dwarf2out.c (save_rtx): Deleted. + (mem_loc_descriptor): Do equivalent operation. + (add_const_value_attribute, case CONST): Likewise. + (add_name_and_src_coords_attributes): Likewise. + + 2001-12-21 Kazu Hirata + + * config/h8300/h8300.h: Fix comment formatting. + + Fri Dec 21 17:30:15 2001 Jeffrey A Law (law@redhat.com) + + * pa.h (CPP_SPEC): If not in ANSI mode, define _INCLUDE_LONGLONG. + (CPLUSPLUS_CPP_SPEC): Define _INCLUDE_LONGLONG. + + 2001-12-21 Robert Lipe + + * system.h (PREFETCH): Explictly undefine. + + 2001-12-21 Richard Henderson + + * c-parse.in (SAVE_WARN_FLAGS): Save warn_traditional. + (RESTORE_WARN_FLAGS): Restore it. + (extension): Zero warn_traditional. + + 2001-12-21 Kazu Hirata + + * doc/passes.texi: Fix a typo. + + 2001-12-21 Kazu Hirata + + * config/h8300/h8300.h: Fix a comment typo. + + 2001-12-21 Jakub Jelinek + + * combine.c (nonzero_bits): If using reg_nonzero_bits, + we don't know anything about bits outside of X mode. + (num_sign_bit_copies): Likewise. + + 2001-12-21 Nick Clifton + + * config/arm/arm.md (prefetch): Use 'a' operand code. + + 2001-12-20 Kaveh R. Ghazi + + * aclocal.m4 (gcc_AC_PROG_GNAT): Run prospective ada drivers in + subshells. + * configure.in: Likewise for perl Pod::Man. + + * configure: Regenerated. + + 2001-12-20 Kaveh R. Ghazi + + * builtin-attrs.def (__builtin_printf_unlocked, + __builtin_fprintf_unlocked, printf_unlocked, fprintf_unlocked): + Mark with the __printf__ attribute. + + * builtins.c (expand_builtin_fputs): Add an `unlocked' parameter + and set the replacement function depending on it. + (expand_builtin): Skip BUILT_IN_*_UNLOCKED when not optimizing. + Handle BUILT_IN_*_UNLOCKED when optimizing. + + * builtins.def (DEF_EXT_FALLBACK_BUILTIN, + DEF_EXT_FRONT_END_LIB_BUILTIN): New macros. + Declare the "unlocked" stdio functions. + + * c-common.c (c_expand_builtin_printf, c_expand_builtin_fprintf): + Add an `unlocked' parameter and set the replacement function + depending on it. + (c_expand_builtin): Handle BUILT_IN_PRINTF_UNLOCKED and + BUILT_IN_FPRINTF_UNLOCKED. + + * doc/extend.texi (printf_unlocked, fprintf_unlocked, + fputs_unlocked): Document. + + 2001-12-20 Josef Zlomek + + * cfgloop.c (flow_loops_find): Use the information of the depth + first search order of the CFG correctly when finding natural loops. + + 2001-12-20 Richard Henderson + + * config/alpha/alpha.md (prologue_mcount): Update for explicit relocs. + + 2001-12-20 Richard Henderson + + * config/alpha/alpha.c (call_operand) [OSF]: Accept pseudos. + * config/alpha/alpha.md (call_osf, call_value_osf): Don't force + operand into $27. + + 2001-12-20 Joseph S. Myers + + * configure.in (all_headers, all_lib2funcs): Remove. + * configure: Regenerate. + * Makefile.in (LANG_EXTRA_HEADERS): Remove. + (USER_H): Don't include $(LANG_EXTRA_HEADERS). + * config/alpha/t-interix (USER_H): Don't include + $(LANG_EXTRA_HEADERS). + * config/i386/t-interix: Likewise. + * config/t-openbsd: Likewise. + + 2001-12-20 Andreas Jaeger + + * libgcc2.c (__bb_exit_func): Remove unused variable. + (num_digits): Remove unused function. + + 2001-12-20 Alan Shieh + + * config/arm/arm.c (arm_output_epilogue): Changed IP restore + to use ldmfd instead of ldmea. + * config/arm/arm.c (arm_compute_initial_elimination_offset): + Modified to reflect behavior of arm_expand_prologue when generating + interrupt handlers + + 2001-12-20 Nick Clifton + + * config/arm/arm.c (arm_compute_save_reg0_reg12_mask): New + function. Compute which of registers r0 through r12 should be + saved onto the stack during a function's prologue. + (arm_compute_save_reg_mask): Use + arm_compute_save_reg0_reg12_mask. + (arm_compute_initial_elimination_offset): Use + arm_compute_save_reg0_reg12_mask. + + (arm_expand_prologue): Do not mark as save of the IP register + for an interrupt handler as being part of the frame creation + code. + + 2001-12-20 Richard Henderson + + * varasm.c (assemble_real): Use REAL_VALUE_TO_x and assemble_integer + to emit floating point values. + (assemble_real_1): Remove. + + * 1750a/1750a.c (real_value_to_target_single): New. + (real_value_to_target_double): New. + * 1750a/1750a.h (TARGET_FLOAT_FORMAT): New. + (REAL_VALUE_TO_TARGET_SINGLE): New. + (REAL_VALUE_TO_TARGET_DOUBLE): New. + * 1750a/1750a-protos.h: Update. + + * 1750a/1750a.h, a29k/a29k.h, alpha/alpha.h, alpha/unicosmk.h, + alpha/vms.h, arc/arc.h, arm/aof.h, arm/aout.h, avr/avr.c, + avr/avr.h, c4x/c4x.h, clipper/clix.h, convex/convex.h, cris/cris.h, + d30v/d30v.h, dsp16xx/dsp16xx.c, dsp16xx/dsp16xx.h, elxsi/elxsi.h, + fr30/fr30.h, h8300/h8300.h, i370/i370.h, i386/i386.h, i386/i386elf.h, + i386/next.h, i386/ptx4-i.h, i386/sysv4.h, i860/fx2800.h, i860/i860.h, + i860/paragon.h, i860/sysv4.h, i960/i960-protos.h, i960/i960.c, + i960/i960.h, ia64/ia64.h, m32r/m32r.h, m68hc11/m68hc11.c, + m68hc11/m68hc11.h, m68k/3b1.h, m68k/altos3068.h, m68k/crds.h, + m68k/dpx2.h, m68k/hp320.h, m68k/m68k.h, m68k/mot3300.h, m68k/news.h, + m68k/next.h, m68k/next21.h, m68k/sgs.h, m68k/sun2o4.h, m68k/sun3.h, + m68k/tower-as.h, m88k/m88k.h, mcore/mcore.h, mips/mips-protos.h, + mips/mips.c, mips/mips.h, mmix/mmix-protos.h, mmix/mmix.c, + mmix/mmix.h, mn10200/mn10200.h, mn10300/mn10300.h, ns32k/encore.h, + ns32k/ns32k.h, pa/long_double.h, pa/pa.h, pdp11/pdp11.h, pj/pj.h, + romp/romp.c, romp/romp.h, rs6000/rs6000.h, s390/linux.h, sh/sh.h, + sparc/sparc.h, stormy16/stormy16.h, v850/v850.h, vax/vax.h, + vax/vaxv.h, we32k/we32k.h, doc/tm.texi: Remove ASM_OUTPUT_FLOAT, + ASM_OUTPUT_DOUBLE, ASM_OUTPUT_LONG_DOUBLE, ASM_OUTPUT_BYTE_FLOAT, + ASM_OUTPUT_SHORT_FLOAT, ASM_OUTPUT_THREE_QUARTER_FLOAT, and all + associated support routines. + + Thu Dec 20 16:58:46 CET 2001 Jan Hubicka + + * cfgcleanup.c (flow_find_cross_jump): Avoid incrementing of ninsns + if one of block does not contain jump. + (outgoing_edge_math): Revert last path; require edges to be noncomplex + nonfake to match single exit edge; require conditional jumps to not + have side effect. + + 2001-12-20 Turly O'Connor + + * tm.texi (ASM_OUTPUT_OPERAND): Change documentation references to + "recog_operand" to "recog_data.operand". + * rtl.def: Likewise. + + 2001-12-20 Jakub Jelinek + + * simplify-rtx.c (simplifi_binary_operation) [DIV]: If DIV has + narrower mode than op0, only return the bits in DIV's mode. + + 2001-12-20 Jakub Jelinek + + * combine.c (distribute_notes): Avoid adding REG_LABEL notes + to JUMP_INSNs with JUMP_LABEL. + + 2001-12-19 Aldy Hernandez + + * doc/install.texi: Add documentation for --enable-altivec. + + * config.gcc: Add support for --enable-altivec. + + * config/rs6000/altivec.h: New. + + * config/rs6000/linuxaltivec.h (SUBSUBTARGET_OVERRIDE_OPTIONS): + Define. Fix typo. + + * config/rs6000/rs6000.c (vrsave_operation): Change unspec to + unspec_volatile. + (generate_set_vrsave): Generate the unspec here instead of calling + an .md pattern. + (generate_set_vrsave): Use gen_rtvec. + (rs6000_emit_prologue): Replace call to gen_get_vrsave with + gen_rtx_SET. + + * config/rs6000/rs6000.md ("*movsi_internal1"): Add constraints + for setting special registers. + ("*set_vrsave_internal"): Use unspec_volatile. + ("set_vrsave"): Remove. + ("get_vrsave"): Remove. + + * config/rs6000/rs6000.h (REG_CLASS_CONTENTS): Add vrsave to + SPECIAL_REGS. + + 2001-12-19 Bruce Korb + + * gcc/fixinc/inclhack.def: Remove all the fix suppression "fixes". + (strict_ansi_not_ctd): accommodate __STDC__ == 0 tests in UW 2.1.2 + * gcc/fixinc/mkfixinc.sh(i?86-*-sysv4.2uw2*): now uses fixincl program + * gcc/fixinc/base/...: adjust for changes in fixes + + 2001-12-20 Joseph S. Myers + + * po/gcc.pot: Regenerate. + + * configure.in (all_diff_excludes, diff_excludes): Remove. + * configure: Regenerate. + * Makefile.in (LANG_DIFF_EXCLUDES): Remove. + * objc/config-lang.in (diff_excludes): Remove. + + 2001-12-19 Dan Nicolaescu + + * config/sparc/sparc.md (ldd peephole2s): For load peepholes pass + the destination register as a parameter to mems_ok_for_ldd_peep. + For store peepholes pass NULL_RTX. Move all volatile checks ... + * config/sparc/sparc.c (mems_ok_for_ldd_peep): ... here. Add a + register parameter, check it's not the same as base for an address. + * config/sparc/sparc-protos.h (mems_ok_for_ldd_peep): Update. + + 2001-12-19 Jakub Jelinek + + * config/ia64/ia64.c (ia64_single_set): Return first set for + prologue_allocate_stack and epilogue_deallocate_stack instructions. + + 2001-12-19 Dale Johannesen + + * config/rs6000/rs6000.h: LEGITIMIZE_RELOAD_ADDRESS: + redefine in terms of rs6000_legitimize_reload_address(). + * config/rs6000/rs6000-protos.h: Add this function. + * config/rs6000/rs6000.c: Add this function. Includes + handling for Darwin FP constants. + + Wed Dec 19 11:01:21 2001 Jeffrey A Law (law@redhat.com) + + * config/pa/t-hpux-shlib: New file. + * config.gcc (hpux10, hpux11): Include t-hpux-shlib in tmake_file + for 32bit hpux10 & hpux11 configurations. + + 2001-12-19 Nick Clifton + + * config/arm/xscale-elf.h (SUBTARGET_EXTRA_ASM_SPEC): Pass + -mno-fpu onto gas unless -mhard-float is specified. + (MULTILIB_DEFAULTS): Include msoft-float. + + * config/arm/t-xscale-coff (EXTRA_MULTILIB_PARTS): Remove definition. + + * config/arm/coff.h (SUPPORTS_INIT_PRIORITY): Define (to false). + * config/arm/elf.h (SUPPORTS_INIT_PRIORITY): Define (to true). + + Wed Dec 19 06:12:34 2001 Douglas B. Rupp + + * dwarf2out.c (add_name_and_src_coords_attributes): Fix VMS procedure + descriptor output. + + 2001-12-18 Stan Shebs + + * rs6000.h (LOCAL_ALIGNMENT): Fix parens. + + Tue Dec 18 17:02:06 2001 Richard Kenner + + * emit-rtl.c (widen_memory_access): Only call compare_tree_int + on an INTEGER_CST. + + 2001-12-18 David Edelsohn + + * rs6000.c (rs6000_override_options): Only use DI ops when + TARGET_64BIT. Fix typo. + + Tue Dec 18 16:39:46 CET 2001 Jan Hubicka + + * att.h (ASM_FILE_START): Use asm_dialect. + * linux.h (ASM_FILE_START): Likewise. + * gas.h (ASM_FILE_START): Likewise. + * i386.c (ix86_debug_arg_string, ix86_debug_addr_string, + ix86_asm_string, ix86_asm_dialect): New. + (override_options): Set asm_dialect. + * i386.h (MASK_MIX_SSE_I387, MASK_INTEL_SYNTAX, MASK_DEBUG_ARG, + MASK_DEBUG_ADDR): Kill. + (MASK_64BIT, MASK_NO_RED_ZONE): renumber. + (TARGET_DEBUG_ADDR, TARGET_DEBUG_ARG): Use string. + (ASSEMBLER_DIALECT): Use asm_dialect. + (TARGET_SWITCHES): Undocument deprecated items; deprecate intel-syntax; + remove debug-addr and debug-arg. + (TARGET_OPTIONS): Add debug-arg, debug-addr, asm. + (asm_dialect): New enum. + (ix86_debug_arg_string, ix86_debug_addr_string, + ix86_asm_string, ix86_asm_dialect): Declare. + * invoke.texi (-mintel-syntax): Remove. + (-masm): Document. + + Tue Dec 18 16:37:42 CET 2001 Jan Hubicka + + * libgcc2.c (__bb_exit_func): Kill -ax dumping code. + + 2001-12-18 Jason Merrill + + C++ ABI change: destroy value arguments in caller. + * calls.c (initialize_argument_information): Pass the address of + the TARGET_EXPR temporary rather than storing it into another. + + Tue Dec 18 07:09:06 2001 Douglas B. Rupp + + * config/alpha/xm-vms.h (INCLUDE_DEFAULTS): Add /gnu/include. + * config/alpha/vms.h (STACK_CHECK_BUILTIN): #define 0 for VMS. + + 2001-12-18 Jakub Jelinek + + * config/linux.h (PREFERRED_DEBUGGING_TYPE): Remove. + * config/sparc/linux.h (PREFERRED_DEBUGGING_TYPE): Remove. + * config/sparc/linux64.h (PREFERRED_DEBUGGING_TYPE): Remove. + (CC1_SPEC): Don't default to -gstabs+ if -m32. + + 2001-12-05 David O'Brien + + * elfos.h (PREFERRED_DEBUGGING_TYPE): Change to DWARF2_DEBUG. + + 2001-12-18 Joseph S. Myers + + * po/gcc.pot: Regenerate. + + 2001-12-18 Kazu Hirata + + * config/h8300/h8300.c: Fix comment typos. + * config/h8300/h8300.h: Fix comment formatting. + + 2001-12-17 Kaveh R. Ghazi + + * machmode.h (mode_name, mode_class, mode_size, mode_unit_size, + mode_bitsize, mode_mask_array, mode_wider_mode): Set array size in + declaration to NUM_MACHINE_MODES. + (mode_size, mode_unit_size): Set array type to unsigned char. + (mode_bitsize): Set array type to unsigned short. + + * rtl.c (rtx_length): Set array type to unsigned char. + (rtx_length, rtx_name, rtx_format, rtx_class): Set array size to + NUM_RTX_CODE. + (mode_bitsize): Set array type to unsigned short. + (mode_size, mode_unit_size): Set array type to unsigned char. + (mode_name, mode_class, mode_bitsize, mode_size, mode_unit_size, + mode_wider_mode, mode_mask_array): Set array size to + NUM_MACHINE_MODES. + + * rtl.h (rtx_length, rtx_name, rtx_format, rtx_class): Set array + size in declaration to NUM_RTX_CODE. + + 2001-12-17 Richard Henderson + + * config/alpha/alpha.md (unop): Encode RB as $sp. + + 2001-12-17 Neil Booth + + * Makefile.in: Update dependencies. + * c-lang.c: Remove unnecessary includes. + (deferred_fns, start_cdtor, finish_cdtor, defer_fn): Move to + c-objc-common.c. + (finish_file): Move body to c_common_finish_file. + * c-objc-common.c: Include varray.h and ggc.h. + (deferred_fns, start_cdtor, finish_cdtor, defer_fn, + expand_deferred_fns, c_objc_common_finish_file): Moved from c-lang.c. + (c_objc_common_init): Initialize deferred function array. + * c-tree.h (c_objc_common_finish_file, + static_ctors, static_dtors): New. + objc: + * Make-lang.in: Update dependencies. + * objc/objc-act.c: Don't include varray.h. + (defer_fn, deferred_fns): Move to c-objc-common.c. + (objc_init): Similarly for initialization of it. + (finish_file): Move some to c-objc-common.c, use + c_objc_common_finish_file. + + 2001-12-17 Aldy Hernandez + + * config/rs6000/rs6000.c: Remove is_gpr_return_reg prototype. + + 2001-12-17 Neil Booth + + * doc/cppinternals.texi: Update. + + Mon Dec 17 14:21:21 2001 Jeffrey A Law (law@redhat.com) + + * expmed.c (emit_store_flag): Extract updated comparison code + from the return value of compare_from_rtx. + * expr.c (do_store_flag): Similarly. + + 2001-12-17 Nick Clifton + + * caller-save.c (init_caller_save): Use MODE_BASE_REG_CLASS in + preference to BASE_REG_CLASS. + * recog.c (preprocess_constraints): Ditto. + * regclass.c (record_operand_costs, scan_one_insn, regclass, + record_reg_classes, record_address_regs): Ditto. + * regrename.c (scan_rtx_address, scan_rtx, + replace_oldest_value_addr, replace_oldest_value_mem): Ditto. + * reload.c (find_reloads, find_reloads_address, + find_reloads_address_1): Ditto. + * reload1.c (maybe_fix_stack_asms): Ditto. + * defaults.h (MODE_BASE_REG_CLASS): Provide default + definition. + * doc/tm.texi: Document MODE_BASE_REG_CLASS. + + * config/arm/arm.h (MODE_BASE_REG_CLASS): Define. + + 2001-12-17 Joseph S. Myers + + * doc/install.texi2html: Use -I $SOURCEDIR. + + Separate user and internals manuals. + * Makefile.in (info, $(docdir)/gcc.info, dvi, gcc.dvi): Update + dependencies. + ($(docdir)/gccint.info, gccint.dvi): New targets. + (maintainer-clean, install-info, uninstall): Update. + * doc/.cvsignore: Add gccint.info*. + * doc/include/gcc-common.texi: New file. + * doc/gcc.texi: Use it. Adjust to be a user-only manual. Put + copyright notice in a macro. Don't include ISBN unless FSFPRINT + is defined. + * doc/gccint.texi: New file. + * doc/configfiles.texi, doc/extend.texi, doc/invoke.texi, + doc/md.texi, doc/passes.texi, doc/tm.texi, doc/trouble.texi: + Update for separate user and internals manuals. + + 2001-12-17 Dale Johannesen + + * config/rs6000/rs6000.h: CPP_CPU_SPEC: add mcpu=7400. + ASM_CPU_SPEC: Ditto. + RTX_COSTS: Fix timing info for 7450 multiply. + * config/rs6000/rs6000.md: Fix timing info for 7450 imul. + Allow floats to be kept in int regs in movsf_low, + movsf_low_st (Darwin only) + + 2001-12-17 Aldy Hernandez + + * config/rs6000/rs6000.c (vrsave_operation): Recognize SETs in + parallel. + (is_gpr_return_reg): New. + (rs6000_emit_prologue): Call generate_set_vrsave with additional + argument. Save only registers in the mask. Attach + REG_FRAME_RELATED_EXPR note to altivec offsets. Do not call + rs6000_frame_related when saving VRSAVE. + (rs6000_emit_epilogue): Call generate_set_vrsave with additional + argument. Restore only registers in the mask. Restore altivec + registers after we restore CR. + (generate_set_vrsave): New parameter epiloguep. Generate unspec + sets instead of clobbers for call saved registers. + (altivec_frame_fixup): New. + + 2001-12-17 Richard Henderson + + * config/sparc/sparc.md (movdi_zero): Remove. + (movdi_insn_sp32_v9): New. + + 2001-12-17 Richard Henderson + + * cfgcleanup.c (outgoing_edges_match): Check for insn match with + a single outgoing edge too. + + Mon Dec 17 18:27:52 CET 2001 Jan Hubicka + + * cfgrtl.c (redirect_edge_and_branch): Do simplify abnormal + edges resulting from computed jump + + Mon Dec 17 17:57:05 CET 2001 Jan Hubicka + + * Makefile.in (cfgcleanup.o): Add cselib.h dependancy. + * basic-block.h (CLEANUP_THREADING): New constant. + * cfgcleanup.c: Include cselib.h + (thread_jump, mark_effect): New functions. + (try_forward_edges): Do jump threading when asked for. + * jump.c (mark_modified_reg, save_regs, num_same_regs, modified_regs, + modified_mem, thread_jumps, rtx_equal_for-thread_p): Kill. + * rtl.h (thread_jumps, rtx_equal_for_thread_p): Kill. + * toplev.c (rest_of_compilation): Do now call thread_jumps; use + CLEANUP_THREAD instead. + + 2001-12-17 Kaveh R. Ghazi + + * sparc/linux.h (STARTFILE_SPEC): Fix typo in last change. + + 2001-12-17 Tom Rix + + * config/rs6000/rs6000.c (expand_block_move): Fix limits on max size + of bytes. + + 2001-12-17 Richard Sandiford + + * target.h (asm_out.byte_op, asm_out.aligned_op, asm_out.unaligned_op, + asm_out.integer): New fields. + * target-def.h (TARGET_ASM_BYTE_OP, TARGET_ASM_ALIGNED_[HSDT]I_OP, + TARGET_ASM_UNALIGNED_[HSDT]I_OP, TARGET_ASM_INTEGER): New initialisers. + (TARGET_ASM_ALIGNED_INT_OP, TARGET_ASM_UNALIGNED_INT_OP): Collect + the individual initialisers together. + (TARGET_ASM_OUT): Add the new initialisers. + * output.h (assemble_integer): Return bool. + (integer_asm_op): Declare. + (default_assemble_integer): Declare. + (assemble_aligned_integer): New interface to assemble_integer. + * varasm.c (integer_asm_op): New function to select pseudo-op. + (default_assemble_integer): Default implementation of asm_out.integer. + (assemble_integer): Use the new target hook. Split objects into + words or bytes if the target hook fails. Return bool. + * doc/tm.texi (ASM_OUTPUT_CHAR, ASM_OUTPUT_BYTE, ASM_OUTPUT_SHORT, + ASM_OUTPUT_INT, ASM_OUTPUT_DOUBLE_INT, ASM_OUTPUT_QUADRUPLE_INT, + UNALIGNED_SHORT_ASM_OP, UNALIGNED_INT_ASM_OP, + UNALIGNED_DOUBLE_INT_ASM_OP): Undocument. + Document new target hooks. + + * defaults.h (ASM_OUTPUT_ADDR_VEC_ELT): Use integer_asm_op. + * dwarf2asm.c (unaligned_integer_asm_op): Remove. + (dw2_assemble_integer): New. + (dw2_asm_output_data, dw2_asm_output_delta, dw2_asm_output_offset, + dw2_asm_output_pcrel, dw2_asm_output_addr, dw2_asm_output_addr_rtx, + dw2_asm_output_encoded_addr_rtx): Use it. + (dw2_asm_output_nstring): Use assemble_integer for the null terminator. + (dw2_asm_output_data_uleb128, dw2_asm_output_data_sleb128): Use + integer_asm_op to get the byte pseudo-op. Use assemble_integer + if it returns NULL. + * dwarf2asm.h (dw2_assemble_integer): Declare. + * dwarfout.c: Include dwarf2asm.h. Use dwarf2 functions for the + default implementation of most macros. + (output_unsigned_leb128): Use dw2_asm_output_data. + (output_signed_leb128, dwarfout_source_line): Likewise. + (output_reg_number): Use dw2_assemble_integer. + (generate_macinfo_entry): Separate the type and offset arguments. + Use assemble_integer to write the value. + (dwarfout_start_source_file): Update generate_macinfo_entry usage. + (dwarfout_end_source_file, dwarfout_define, dwarfout_undef): Likewise. + * final.c (output_addr_const): Don't put brackets round a subtracted + symbol value or ".". + * halfpic.c (half_pic_finish): Use assemble_aligned_integer. + + * config/1750a/1750a.c (assemble_integer_1750a): New, + * config/alpha/alpha.h (literal_section): Avoid ASM_OUTPUT_INT. + * config/arc/arc.c (arc_assemble_integer): New. + * config/arc/arc.h (TRAMPOLINE_TEMPLATE): Avoid ASM_OUTPUT_INT. + * config/arm/arm.c (arm_poke_function_name): Likewise. + (arm_assemble_integer): New, extracted from... + * config/arm/arm.h (OUTPUT_INT_ADDR_CONST): ...here, now removed. + (ARM_TRAMPOLINE_TEMPLATE, ARM_FUNCTION_PROFILER): Avoid ASM_OUTPUT_INT. + (ARM_FUNCTION_PROFILER): Likewise. + * config/avr/avr-protos.h (asm_output_byte): Remove. + (asm_output_char, asm_output_short): Remove. + * config/avr/avr.c (avr_assemble_integer): New. + (asm_output_byte, asm_output_char, asm_output_short): Remove. + * config/clipper/clipper.h (ASM_LONG): Remove. + * config/dsp16xx/dsp16xx-protos.h (asm_output_long): Remove. + * config/dsp16xx/dsp16xx.c (asm_output_long): Remove. + * config/elxsi/elxsi.c (elxsi_assemble_integer): New. + * config/i370/i370.c (i370_hlasm_assemble_integer): New. + * config/i370/i370.h (TRAMPOLINE_TEMPLATE): Avoid ASM_OUTPUT_SHORT. + (ASM_BYTE, ASM_SHORT, ASM_LONG): Delete. + * config/i386/att.h, (ASM_OUTPUT_ASCII): Avoid ASM_BYTE_OP. + * config/i386/linux.h (ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX): Use + ASM_LONG instead of UNALIGNED_INT_ASM_OP. + * config/i386/sco5.h (ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX): Likewise. + (ASM_OUTPUT_ASCII): Avoid ASM_BYTE_OP. + * config/i386/sysv4.h (ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX): Use + ASM_LONG instead of UNALIGNED_INT_ASM_OP. + * config/i860/fx2800.h (ASM_FILE_END): Avoid ASM_LONG. + * config/i860/i860.c (i860_output_function_epilogue): Likewise. + * config/i860/i860.h (TRAMPOLINE_TEMPLATE): Avoid ASM_OUTPUT_INT. + (ASM_SHORT, ASM_LONG): Undefine. + * config/i860/paragon.h (ASM_OUTPUT_ASCII): Avoid ASM_BYTE_OP. + * config/i860/sysv3.h (ASM_OUTPUT_ASCII): Likewise. + * config/i960/i960.h (TRAMPOLINE_TEMPLATE): Avoid ASM_OUTPUT_INT. + * config/ia64/ia64.c (ia64_assemble_integer): New. + * config/ia64/ia64.h (ASM_OUTPUT_DWARF_OFFSET): Use integer_asm_op. + (ASM_OUTPUT_DWARF_PCREL): Likewise. + * config/m68hc11/m68hc11.h (ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT, + ASM_OUTPUT_ADDR_DIFF_ELT, ASM_OUTPUT_ADDR_VEC_ELT): Avoid ASM_LONG. + (ASM_SHORT, ASM_LONG): Remove. + * config/m68k/m68k.h (INT_OP_GROUP): New macro. + (INT_OP_STANDARD, INT_OP_DOT_WORD, INT_OP_NO_DOT, INT_OP_DC): New + macros, the allowed values for INT_OP_GROUP. + * config/m68k/amix.h (ASM_OUTPUT_ASCII): Avoid ASM_BYTE_OP + * config/m68k/atari.h (ASM_OUTPUT_ASCII): Likewise + * config/m68k/m68kelf.h (ASM_OUTPUT_ASCII): Likewise + * config/m68k/auxas.h (BYTE_ASM_OP, WORD_ASM_OP, LONG_ASM_OP): Remove. + (INT_OP_GROUP): Define to INT_OP_NO_DOT. + * config/m68k/dpx2.h (ASM_LONG): Undefine. + (INT_OP_GROUP): Define to INT_OP_DC. + * config/m68k/dpx2g.h (ASM_LONG): Undefine. + * config/m68k/hp320.h (INT_OP_GROUP): Define to INT_OP_NO_DOT. + * config/m68k/lynx.h (ASM_LONG): Undefine. + * config/m68k/dpx2g.h (ASM_LONG): Undefine. + * config/m68k/m68kelf.h (ASM_OUTPUT_ASCII): Avoid ASM_BYTE_OP. + * config/m68k/m68kv4.h (ASM_OUTPUT_ASCII): Likewise. + (TRAMPOLINE_TEMPLATE): Avoid ASM_OUTPUT_*. + * config/m68k/mot3300.h (INT_OP_GROUP): Define to INT_OP_STANDARD + for GAS and INT_OP_NO_DOT otherwise. + (ASM_CHAR, ASM_BYTE, ASM_SHORT, ASM_LONG): Remove. + (ASM_OUTPUT_LONG_DOUBLE, ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT, + ASM_OUTPUT_ADDR_VEC_ELT, ASM_OUTPUT_ADDR_DIFF_ELT): Avoid ASM_LONG. + (ASM_OUTPUT_ASCII): Avoid ASM_BYTE_OP. + * config/m68k/sgs.h (BYTE_ASM_OP, WORD_ASM_OP, LONG_ASM_OP): Remove. + (INT_OP_GROUP): Define to INT_OP_STANDARD. + (ASM_OUTPUT_LONG_DOUBLE, ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT, + ASM_OUTPUT_ADDR_VEC_ELT, ASM_OUTPUT_ADDR_DIFF_ELT): Avoid LONG_ASM_OP. + (ASM_OUTPUT_ASCII): Avoid BYTE_ASM_OP. + * config/m68k/tower-as.h (ASM_LONG): Remove. + (INT_OP_GROUP): Define to INT_OP_NO_DOT. + * config/m88k/m88k.c (output_tdesc): Avoid ASM_LONG. + * config/m88k/m88k.h (TRAMPOLINE_TEMPLATE): Avoid ASM_OUTPUT_INT. + (ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT): Avoid ASM_LONG. + * config/mips/iris5.h (TARGET_IRIX5): Define. + * config/mips/mips.c (mips_assemble_integer): New. + * config/mips/sni-svr4.h (ASM_LONG): Undefine. + * config/mmix/mmix-protos.h (mmix_asm_output_double_int): Remove. + * config/mmix/mmix.c (mmix_assemble_integer): New. + (mmix_asm_output_double_int): Remove. + (mmix_print_operand): Call mmix_output_octa directly. + * config/mmix/mmix.h (ASM_LONG): Remove. + * config/ns32k/ns32k.h (TRAMPOLINE_TEMPLATE): Avoid ASM_OUTPUT_INT. + * config/pa/pa.c (pa_assemble_integer): New. + (pa_override_options): Only use aligned DI ops on 64-bit targets. + Only use the unaligned ops if TARGET_GAS. + * config/pdp11/pdp11.c (pdp11_assemble_integer): New. + * config/pdp11/pdp11.h (TRAMPOLINE_TEMPLATE): Avoid ASM_OUTPUT_SHORT. + * config/pj/pj.h (ASM_LONG): Undefine. + * config/rs6000/linux64.h (RELOCATABLE_NEEDS_FIXUP): Undefine. + * config/rs6000/rs6000.c (rs6000_assemble_integer): New, mostly + extracted from ASM_OUTPUT_INT in sysv4.h. Use in_text_section() + and in_toc_section() rather than the in_section variable. + (rs6000_override_options): Only use DI ops when TARGET_POWERPC64. + * config/rs6000/sysv4.h (TOC_SECTION_FUNCTION): Add in_toc_section(). + (RELOCATABLE_NEEDS_FIXUP): Define. + * config/rs6000/xcoff.h (DOUBLE_INT_ASM_OP): Change space to tab. + * config/s390/linux.h (ASM_SHORT, ASM_LONG, ASM_QUAD): Remove. + (ASM_OUTPUT_ADDR_VEC_ELT, ASM_OUTPUT_ADDR_DIFF_ELT): Use integer_asm_op + to get the word directive. + (ASM_OUTPUT_ASCII): Avoid ASM_BYTE_OP. + * config/s390/s390.c (s390_assemble_integer): New. + * config/s390/s390.h (ASM_OUTPUT_SPECIAL_POOL_ENTRY): Use + integer_asm_op to get the word directive. + * config/sparc/sol2.h (ASM_SHORT, ASM_LONG): Remove. + * config/sparc/sparc-protos.h (output_double_int): Remove. + * config/sparc/sparc.c (output_double_int): Move to... + (sparc_assemble_integer): ...this new function. + (sparc_override_options): Only use .uaxword if TARGET_ARCH64. + * config/sparc/sparc.h (ASM_SHORT, ASM_LONG, ASM_LONGLONG): Remove. + * config/sparc/sysv4.h (ASM_LONG): Remove. + (ASM_OUTPUT_LONG_DOUBLE, ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT): Avoid + ASM_LONG. + * config/vax/vax.h (TRAMPOLINE_TEMPLATE): Use assemble_aligned_integer. + * config/we32k/we32k.h (TRAMPOLINE_TEMPLATE): Likewise. + + * config/1750a/1750a.c, config/a29k/a29k.c, config/alpha/alpha.c, + config/arc/arc.c, config/arm/arm.c, config/avr/avr.c, config/c4x/c4x.c, + config/clipper/clipper.c, config/convex/convex.c, config/cris/cris.c, + config/d30v/d30v.c, config/dsp16xx/dsp16xx.c, config/elxsi/elxsi.c, + config/fr30/fr30.c, config/h8300/h8300.c, config/i370/i370.c, + config/i386/i386.c, config/i860/i860.c, config/i960/i960.c, + config/ia64/ia64.c, config/m32r/m32r.c, config/m68hc11/m68hc11.c, + config/m68k/m68k.c, config/m88k/m88k.c, config/mips/mips.c, + config/mmix/mmix.c, config/mn10200/mn10200.c, config/mn10300/mn10300.c, + config/ns32k/ns32k.c, config/pa/pa.c, config/pdp11/pdp11.c, + config/sh/sh.c, config/sparc/sparc.c, config/stormy16/stormy16.c, + config/v850/v850.c, config/vax/vax.c, config/we32k/we32k.c + (TARGET_ASM_BYTE_OP, TARGET_ASM_ALIGNED_HI_OP, + TARGET_ASM_ALIGNED_SI_OP, TARGET_ASM_ALIGNED_DI_OP, + TARGET_ASM_UNALIGNED_HI_OP, TARGET_ASM_UNALIGNED_SI_OP, + TARGET_ASM_UNALIGNED_DI_OP, TARGET_ASM_INTEGER): Redefine as + appropriate. + + * config/defaults.h, config/darwin.h, config/elfos.h, config/svr3.h, + config/1750a/1750a.h, config/a29k/a29k.h, config/alpha/alpha.h, + config/arc/arc.h, config/arm/arm.h, config/avr/avr.h, config/c4x/c4x.h, + config/clipper/clipper.h, config/convex/convex.h, config/cris/cris.h, + config/d30v/d30v.h, config/dsp16xx/dsp16xx.h, config/elxsi/elxsi.h, + config/fr30/fr30.h, config/h8300/h8300.h, config/i370/i370.h, + config/i386/bsd.h, config/i386/djgpp.h, config/i386/i386.h, + config/i386/sco5.h, config/i386/sol2.h, config/i386/sun386.h, + config/i860/i860.h, config/i960/i960.h, config/ia64/ia64.h, + config/m32r/m32r.h, config/m68hc11/m68hc11.h, config/m68k/auxas.h, + config/m68k/dpx2.h, config/m68k/hp320.h, config/m68k/m68k.h, + config/m68k/mot3300.h, config/m68k/sgs.h, config/m68k/tower-as.h, + config/m88k/m88k.h, config/mcore/mcore-elf.h, config/mcore/mcore.h, + config/mips/iris5.h, config/mips/iris6.h, config/mips/mips.h, + config/mmix/mmix.h, config/mn10200/mn10200.h, config/mn10300/mn10300.h + config/ns32k/encore.h, config/ns32k/ns32k.h, config/pa/pa-64.h, + config/pa/pa.h, config/pdp11/pdp11.h, config/pj/pj.h, + config/romp/romp.h, config/rs6000/linux64.h, config/rs6000/rs6000.h, + config/rs6000/sysv4.h, config/rs6000/xcoff.h, config/s390/linux.h, + config/sh/sh.h, config/sparc/linux64.h, config/sparc/sol2.h, + config/sparc/sp64-elf.h, config/sparc/sparc.h, config/sparc/sysv4.h, + config/stormy16/stormy16.h, config/v850/v850.h, config/vax/vax.h, + config/we32k/we32k.h (ASM_OUTPUT_CHAR, ASM_OUTPUT_BYTE, ASM_BYTE_OP, + ASM_BYTE, ASM_OUTPUT_SHORT, ASM_OUTPUT_INT, ASM_OUTPUT_DOUBLE_INT, + UNALIGNED_SHORT_ASM_OP, UNALIGNED_INT_ASM_OP, + UNALIGNED_DOUBLE_INT_ASM_OP): Undefine, where defined. + + 2001-12-17 Stan Shebs + + * config/rs6000/darwin.h (SUBTARGET_OVERRIDE_OPTIONS): Define. + (STACK_BOUNDARY): Remove definition. + (CPP_PREDEFINES): Define __POWERPC__. + + 2001-12-17 Gerald Pfeifer + + * doc/c-tree.texi (Trees): Only refer to GCC. + + 2001-12-17 Andreas Jaeger + + * c-common.def: Fix typo in comment. + + 2001-12-16 David O'Brien + + * config.gcc (sparc64-*-freebsd*): Add target. + * config/sparc/freebsd.h: New file. + * config/sparc/sparc.h (LIB_SPEC, LINK_SPEC): Don't define. + * config/sparc/sunos4.h (LIB_SPEC, LINK_SPEC): Define. + * config/sparc/sysv4.h (CPP_PREDEFINES): Undefine before defining. + + 2001-12-16 Aldy Hernandez + + * config/rs6000/rs6000.c (rs6000_legitimize_address): Force both + PLUS operands into registers for altivec mode. + + 2001-12-16 Aldy Hernandez + + * builtins.c (apply_args_size): Change regno to unsigned. + + 2001-12-16 Aldy Hernandez + + * config/rs6000/rs6000.h (FUNCTION_ARG_REGNO_P): Change + ALTIVEC_ARG_MAX_REG to ALTIVEC_ARG_NUM_REG. + + 2001-12-16 Zack Weinberg + + * c-typeck.c (error_init, pedwarn_init, warning_init): Call + gettext on argument before printing. + + * fold-const.c (negate_expr): Always call fold on new + NEGATE_EXPR. + + 2001-12-17 Joseph S. Myers + + * c-common.def (COMPOUND_LITERAL_EXPR): Contain a DECL_STMT, not + a DECL directly. + * c-common.h (COMPOUND_LITERAL_EXPR_DECL_STMT): New. + (COMPOUND_LITERAL_EXPR_DECL): Adjust definition. + * c-decl.c (build_compound_literal): Put the decl inside a + DECL_STMT. + * doc/c-tree.texi (COMPOUND_LITERAL_EXPR): Update documentation. + Fixes PR c/5105. + + 2001-12-16 Aldy Hernandez + + * config.gcc: Add powerpc-*-eabisimaltivec*. + + 2001-12-16 Neil Booth + + * c-common.c, c-common.h (back_end_hook): Remove. + * c-lang.c (finish_file): Remove back_end_hook. + + Sun Dec 16 13:13:01 2001 Richard Kenner + + * expr.c (highest_pow2_factor, case INTEGER_CST): Fix error in + last change. + + 2001-12-16 Richard Henderson + + * toplev.c (parse_options_and_default_flags): Don't enable + flag_cprop_registers at -O1. + + 2001-12-16 Kaveh R. Ghazi + + * avr.c (avr_simplify_comparision_p, adjust_insn_length, + mask_one_bit_p, output_reload_insisf): Don't use the 'U' suffix. + * avr.h (reg_class): Likewise. + * avr.md: Likewise. + * mcore.c (try_constant_tricks, mcore_byte_offset, + mcore_halfword_offset): Likewise. + * sh.c (shl_sext_kind, gen_block_redirect, split_branches): Likewise. + * v850.c (not_power_of_two_operand): Likewise. + + * clipper/clix.h (ASM_OUTPUT_ASCII): Avoid signed/unsigned + warnings. + * convex.h (ASM_OUTPUT_ASCII): Likewise. + * i370.h (ASM_OUTPUT_ASCII): Likewise. + * i386/att.h (ASM_OUTPUT_ASCII): Likewise. + * i386/i386-interix.h (ASM_OUTPUT_ASCII): Likewise. + * i386/i386elf.h (ASM_OUTPUT_ASCII): Likewise. + * i386/ptx4-i.h (ASM_OUTPUT_ASCII): Likewise. + * i386/sco5.h (ASM_OUTPUT_ASCII): Likewise. + * i386/sun386.h (ASM_OUTPUT_ASCII): Likewise. + * i386/sysv4.h (ASM_OUTPUT_ASCII): Likewise. + * i860/bsd.h (ASM_OUTPUT_ASCII): Likewise. + * m68k/3b1.h (ASM_OUTPUT_ASCII): Likewise. + * m68k/amix.h (ASM_OUTPUT_ASCII): Likewise. + * m68k/atari.h (ASM_OUTPUT_ASCII): Likewise. + * m68k/crds.h (ASM_OUTPUT_ASCII): Likewise. + * m68k/hp320.h (ASM_OUTPUT_ASCII): Likewise. + * m68k/m68kv4.h (ASM_OUTPUT_ASCII): Likewise. + * m68k/mot3300.h (ASM_OUTPUT_ASCII): Likewise. + * m68k/sgs.h (ASM_OUTPUT_ASCII): Likewise. + * m68k/tower-as.h (ASM_OUTPUT_ASCII): Likewise. + * mips/bsd-5.h (ASM_OUTPUT_ASCII): Likewise. + * mips/mips-5.h (ASM_OUTPUT_ASCII): Likewise. + * mips/svr3-5.h (ASM_OUTPUT_ASCII): Likewise. + * mips/svr4-5.h (ASM_OUTPUT_ASCII): Likewise. + * ns32k/encore.h (ASM_OUTPUT_ASCII): Likewise. + * vax/vaxv.h (ASM_OUTPUT_ASCII): Likewise. + * we32k/we32k.h (ASM_OUTPUT_ASCII): Likewise. + + * i386/uwin.h (MD_STARTFILE_PREFIX): Avoid redefinition warnings. + * interix.h (TARGET_MEM_FUNCTIONS): Likewise. + * psos.h (CPP_PREDEFINES): Likewise. + * rs6000/linux64.h (ROUND_TYPE_ALIGN): Likewise. + * rs6000/xcoff.h (RS6000_MCOUNT, RS6000_ITRUNC, RS6000_UITRUNC, + ASM_OUTPUT_EXTERNAL): Likewise. + * sparc/liteelf.h (DWARF_DEBUGGING_INFO, DWARF2_DEBUGGING_INFO): + Likewise. + * sparc/sp64-elf.h (UNALIGNED_DOUBLE_INT_ASM_OP): Likewise. + * sparc/sp86x-elf.h (DWARF_DEBUGGING_INFO, DWARF2_DEBUGGING_INFO): + Likewise. + * sparc/sunos4.h (SUNOS4_SHARED_LIBRARIES): Likewise. + + * c-lex.c (lex_number): Use ISXDIGIT/hex_value. + * vax/xm-vms.h (FILE_NAME_NONDIRECTORY): Use ISUPPER/TOLOWER. + * fold-const.c (real_hex_to_f): Use hex_value. + * real.c (asctoeg): Use hex_value & ISXDIGIT. + * toplev.c (toplev_main): Call hex_init. + * tradcpp.c (main): Call hex_init. + + * nextstep-protos.h: New file. + * nextstep.c: Include "rtl.h", "output.h" & "tm_p.h". + * nextstep.h (INCLUDE_DEFAULTS): Delete LOCAL_INCLUDE_DIR and + STANDARD_INCLUDE_DIR from the CROSS_COMPILE clause. + (nextstep_asm_out_constructor, nextstep_asm_out_destructor, + handle_pragma): Move prototypes to nextstep-protos.h. + * config.gcc (i[34567]86-next-*, m68k-next-nextstep2*, + m68k-next-nextstep[34]*): Append nextstep-protos.h to tm_p_file. + + 2001-12-16 Craig Rodrigues + + PR other/3725 + * configure.in: Add AC_SUBST(target_alias). + * configure: Regenerated. + + 2001-12-15 Richard Henderson + + * config/alpha/alpha.md (sibcall_osf_1_er): New. + (sibcall_value_osf_1_er): New. + + 2001-12-15 Dan Nicolaescu + + * config/sparc/sparc.c (mems_ok_for_ldd_peep): Rename from + addrs_ok_for_ldd_peep_withmem; take MEMs as parameters, not + addrs; eliminate restriction of only using fp and sp as base + registers. + * config/sparc/sparc-protos.h: Update. + * config/sparc/sparc.md (movdi): Use TARGET_V9 not TARGET_ARCH64. + (*cmp_cc_set, *cmp_ccx_set64, *movdi_zero): New insns derived + from old define_peepholes. + Convert all the ldd/std peepholes to peephole2. + + 2001-12-15 Ulrich Weigand + + * s390.md (prologue, epilogue, *return_si, *return_di): New. + s390.c (find_unused_clobbered_reg, s390_frame_info, + save_fpr, restore_fpr, s390_emit_prologue, s390_emit_epilogue): New. + s390-protos.h (s390_emit_prologue, s390_emit_epilogue): Declare. + s390.c (s390_arg_frame_offset): Use s390_frame_info. + (leaf_function_flag, cur_is_leaf_function, + save_fprs, restore_fprs, force_const_mem_late): Remove. + (s390_function_prologue, s390_function_epilogue): Mostly remove. + s390.md (lit): New. Uses ... + s390.c (s390_output_constant_pool): ... this, so adapt and make global. + s390-protos.h (s390_output_constant_pool): Declare. + s390.md (load_multiple, store_multiple): Allow use after reload. + s390.c (load_multiple_operation, store_multiple_operation): Likewise. + s390.h (INCOMING_FRAME_SP_OFFSET): Define. + s390.h (CALL_REALLY_USED_REGISTERS): Define. + config/s390/linux64.h (CALL_USED_REGISTERS): Remove, now handled ... + s390.h (CONDITIONAL_REGISTER_USAGE): ... here. + s390.c (s390_sr_alias_set): New global variable, initialized ... + (override_options): ... here. New. + s390-protos.h (override_options): Declare. + s390.h (OVERRIDE_OPTIONS): Call it. + s390.c (s390_function_profiler): New. + s390-protos.h (s390_function_profiler): Declare. + s390.h (FUNCTION_PROFILER): Call it. + s390.c (s390_profile): Remove. + + * s390.c (reg_used_in_mem_p): PC reload counts as memory access. + (addr_generation_dependency_p): Consider literal pool register loads. + (s390_adjust_priority): Do not schedule load_multiple. + s390.md (attribute "type"): Define some additional types. + (function_unit "integer"): Adapt. + (many insns): Adapt "type" attribute setting. + + * s390.c (general_s_operand, s_imm_operand): New. + (s_operand): Remove old definition, call general_s_operand instead. + s390-protos.h (s_imm_operand): Declare. + s390.c (base_n_index_p, r_or_s_operand, r_or_s_or_im8_operand, + r_or_x_or_im16_operand, r_or_im8_operand): Remove. + s390-protos.h (r_or_s_operand, r_or_s_or_im8_operand, + r_or_x_or_im16_operand, r_or_im8_operand): Likewise. + s390.h (PREDICATE_CODES): Add s_imm_operand, remove r_or_s*_operand. + s390.md (many insns): Rework insn predicates. + + * s390.c (legitimate_pic_operand_p, legitimate_constant_p): Accept all + non-symbolic constants. Reload will force them because of ... + (s390_preferred_reload_class): ... this. New. + s390-protos.h (s390_preferred_reload_class): Declare. + s390.h (PREFERRED_RELOAD_CLASS): Call it. + s390.md (movdi, movsi, movdf, movsf, *reload_la_64 splitters, + *reload_la_31 splitters): Handle constants after reload. + (many insns): no longer force all constants immediately. + s390.c (legitimate_reload_constant_p): New helper routine. + s390-protos.h (legitimate_reload_constant_p): Declare. + s390.c (print_operand): Clean up CONST_INT case, add CONST_DOUBLE case. + + * s390.h (FIRST_PSEUDO_REGISTER, FRAME_POINTER_REGNUM, + HARD_FRAME_POINTER_REGNUM, REGISTER_NAMES): Add virtual frame pointer. + (CALL_USED_REGISTERS, CALL_REALLY_USED_REGISTERS): Update. + (ELIMINABLE_REGS, INITIAL_ELIMINATION_OFFSET): Likewise. + (REGNO_OK_FOR_INDEX_P, REG_OK_FOR_INDEX_NONSTRICT_P): Likewise. + (DWARF_FRAME_REGISTERS): Define. + s390.c (regclass_map): Add virtual frame pointer. + (legitimate_la_operand_p): Allow use of virtual frame pointer. + s390.md (*la_ccclobber, *addaddr_ccclobber): New. + (addaddr, addsi_64): Delete. + + * s390.h (HARD_REGNO_MODE_OK): Allow SImode and DImode values in + floating point registers. + (CLASS_CANNOT_CHANGE_MODE, CLASS_CANNOT_CHANGE_MODE_P): Define. + (ADDR_FP_REGS, GENERAL_FP_REGS): New register classes. + (REG_CLASS_NAMES, REG_CLASS_CONTENTS): Update. + + * s390.md (movti): Replace multi-insn output with splitters. + (movdi_31, movdf_31): Likewise. + (movti_ss, movdi_ss, movsi_ss, movdf_ss, movsf_ss): New. + (movdi_lhi, movdi_lli, movdi_larl, movsi_lhi, movsi_lli): New. + (movdi_64, movdi_31, movsi, movdf_64, movdf_31): Adapt. + (movdf_soft_64, movdf_soft_31, movsf_soft): Remove. + (movsf_64, movsf_31): Remove, replace by ... + (movsf): ... this. + (movqi_64): Use lhi instead of llill. + (*movstrictqi, *movstricthi): Don't use (strict_low_part (mem)). + + * s390.md (extendsidi2, *extendsidi2, extendhidi2, *extendhidi2, + extendqidi2, extendhisi2, *extendhisi2, extendqisi2, + extendqihi2 and associated splitters): Reworked. + (zero_extendsidi2, zero_extendsidi2, *zero_extendsidi2, + zero_extendhidi2, *zero_extendhidi2, zero_extendqidi2, + zero_extendqidi2, *zero_extendqidi2, zero_extendhisi2, + *zero_extendhisi2_64, zero_extendhisi2_31, zero_extendqisi2, + *zero_extendqisi2_64, *zero_extendqisi2_mem_31, + zero_extendqisi2_reg_31, zero_extendqihi2, *zero_extendqisi2_64, + zero_extendqihi2, zero_extendqihi2_64, zero_extendqihi2_31, + and associated splitters): Likewise. + (*sethighqisi, *sethighhisi, *sethighqidi_64, *sethighqidi_31 + and associated splitters): New. + (truncdisi2, truncdihi2, truncdiqi2, truncsihi2, do_truncsihi2, + *truncsihi2_64, truncsiqi2, trunchiqi2): Remove. + (ashlhi3, ashrhi3, lshrhi3, abshi3): Remove. + s390.h (PROMOTE_PROTOTYPES): Remove. + config/s390/linux64.h (PROMOTE_PROTOTYPES): Likewise. + + * s390.md (muldi3): Delete, use instead ... + (mulsidi3): ... this. + (*muldi3_64): Rename to muldi3. + (mulsi_6432): Fix template. + (divdi3, moddi3): Delete, replace by ... + (divmoddi4): ... this. + (divmodtidi3): Fix template. + (divmodtisi3): New. + (udivdi3, umoddi3): Delete, replace by ... + (udivmoddi4): ... this. + (udivmodtidi3): Fix template. + (divsi3, modsi3): Delete, replace by ... + (divmodsi4): ... this. + (divmoddisi3): Fix template. + (udivsi3, umodsi3): Adapt. + + * s390.md (anddi3): Remove SS alternative, use instead ... + (anddi3_ss, anddi3_ss_inv): ... these. + (anddi3_ni): New. + (andsi3*, andhi3*, andqi3*): Likewise. + (iordi3): Remove SS alternative, use instead ... + (iordi3_ss, iordi3_ss_inv): ... these. + (iordi3_oi): New. + (iorsi3*, iorhi3*, iorqi3*): Likewise. + (iordi3_cc, iordi3_cconly, iorsi3_cc, iorsi3_cconly): New. + (xordi3): Remove SS alternative, use instead ... + (xordi3_ss, xordi3_ss_inv): ... these. + (xordi3_oi): New. + (xorsi3*, xorhi3*, xorqi3*): Likewise. + (xordi3_cc, xordi3_cconly, xorsi3_cc, xorsi3_cconly): New. + (one_cmpldi2, one_cmplsi2, one_cmplhi2, one_cmplqi2): + Expand to XOR with -1. + (*one_cmpldi2, *one_cmplsi2, *one_cmplhi2): Remove. + (cmpdi_tm): Delete, replace by ... + (cmpdi_tm_reg, cmpdi_tm_mem): ... these. + (cmpsi_cct): Delete, replace by ... + (cmpsi_tm_reg, cmpsi_tm_mem): ... these. + (cmpdi_tm2, cmpsi_tm2): Improve. + (cmphi_tm_sub, cmpqi_tm_sub, cmpqi_tm2, cmpqi_tm): New. + s390.c (s390_single_hi, s390_extract_hi, + s390_single_qi, s390_extract_qi): New helper routines. + s390-protos.h (s390_single_hi, s390_extract_hi, + s390_single_qi, s390_extract_qi): Declare. + s390.c (tmxx_operand, const1_operand): Remove. + s390-protos.h (tmxx_operand, const1_operand): Likewise. + s390.h (PREDICATE_CODES): Likewise. + + * s390.md (sqrtdf2, sqrtsf2): New. + + * s390.h (CRT_CALL_STATIC_FUNCTION): Define. + (check_and_change_labels): Remove section-change special case. + + * s390.h (RETURN_ADDR_RTX): Fix use of __builtin_return_address + in leaf functions. Needs ... + (DYNAMIC_CHAIN_RTX): ... this. New. + + * s390.c (emit_pic_move): Don't generate pseudos if no_new_pseudos. + + * s390.md (movstrdix_64, movstrsix_31, movstrdi_64, movstrsi_31, + clrstrsi_64, clrstrsi_31, cmpstr_64, cmpstr_31): Do not clobber + input operands using a match_dup clause. + (movstrdi, movstrsi, clrstrdi, clrstrsi, cmpstrdi, cmpstrsi): Adapt. + + * s390.md (floatdidf2, floatdisf2, floatsidf2, floatsidf2_ieee, + floatsisf2, floatsisf2_ieee): Add missing CC clobber. + + * s390.md (floatsidf2_ibm): Use correct operand. + + * s390.md (fixuns_truncdfdi2, fixuns_truncdfsi2, fix_truncdfsi2, + fixuns_truncsfdi2, fixuns_truncsfsi2, floatsidf2): Remove use of + non-portable constants. + s390.c (s390_gen_rtx_const_DI): New helper routine. + s390-protos.h (s390_gen_rtx_const_DI): Declare. + + * s390.h (ASM_OUTPUT_SPECIAL_POOL_ENTRY): Fix alignment. + + * config/s390/linux.h (ASM_OUTPUT_SHORT, ASM_OUTPUT_CHAR, + ASM_OUTPUT_BYTE): Clean up assembly output. + (ASM_OUTPUT_SKIP, ASM_OUTPUT_ALIGN): Remove duplicate definitions. + (ASM_OUTPUT_ASCII): Remove. + + * config/s390/t-linux (CRTSTUFF_T_CFLAGS_S): Define. + + 2001-12-15 Zack Weinberg + + * unwind-dw2-fde-glibc.c: #define _Unwind_Find_FDE to itself + before including unwind-dw2-fde.c, if we are not using the + special code in this file. + + 2001-12-15 Richard Henderson + + * config/alpha/alpha.h (TARGET_SWITCHES): Turn on + MASK_EXPLICIT_RELOCS if the assembler supports it. + * configure.in (HAVE_AS_EXPLICIT_RELOCS): New. + * configure, config.in: Rebuild. + + Sat Dec 15 17:53:03 2001 Richard Kenner + + * calls.c (emit_call_1): If ECF_SP_DEPRESSED, pretend have adjusted + for rounded_stack_size. + + 2001-12-15 Joseph S. Myers + + * c-typeck.c, config/i386/i386.h, config/mcore/mcore.h, + config/ns32k/ns32k.h, config/rs6000/sysv4.h, fold-const.c, + toplev.c, cppinit.c, cppmacro.c, gcc.c: Use "built-in" and + "bit-field" spellings in messages. + * po/gcc.pot: Regenerate. + + 2001-12-15 Joseph S. Myers + + * gcc.c, config/fr30/fr30.c, config/v850/v850-c.c, toplev.c: Use + American spelling in messages. + * po/gcc.pot: Regenerate. + + 2001-12-15 Kazu Hirata + + * config/h8300/h8300.md: Adjust whitespacing. Remove + constraints from expanders. Replace \@ with @. + + 2001-12-15 Richard Earnshaw + + * arm/unknown-elf.h (CPP_PREDEFINES): Add a suitable default. + + 2001-12-15 Ulrich Weigand + + * regrename.c (copyprop_hardreg_forward): Do not keep register + value data live across abnormal call or eh egdes. + + Sat Dec 15 08:29:45 2001 Richard Kenner + + * expr.c (highest_pow2_factor, case INTEGER_CST): Return + BIGGEST_ALIGNMENT for 0. + + Sat Dec 15 14:13:03 CET 2001 Jan Hubicka + + * predict.def (PRED_NORETURN): Make probabilities match reality. + (PRED_OPCODE_POSITIVE, PRED_OPCODE_NONEQUAL, PRED_ERROR_RETURN): + Likewise. + + 2001-12-15 Jakub Jelinek + + * configure.in: Check for ld. + (HAVE_LD_EH_FRAME_HDR): Define if ld supports --eh-frame-hdr option. + * configure, config.in: Rebuilt. + * config.gcc: Add crtbeginT.o to extra_parts where needed. + * config/t-linux (LIB2ADDEH, LIB2ADDEHDEP): Use unwind-dw2-fde-glibc + frame unwinding on Linux. + * config/t-linux-gnulibc1 (LIB2ADDEH, LIB2ADDEHDEP): Use unwind-dw2-fde + frame unwinding. + * config/linux.h (STARTFILE_SPEC): Use crtbeginT.o for -static. + (LINK_EH_SPEC): Define. + * config/i386/gnu.h (STARTFILE_SPEC): Use crtbeginT.o for -static. + * config/ia64/linux.h (STARTFILE_SPEC, LINK_EH_SPEC): Define. + * config/ia64/fde-glibc.c (_Unwind_IteratePhdrCallback): Don't + iterate further if pc falls into current library, but fde was not + found. + * config/sparc/linux.h (STARTFILE_SPEC): Use crtbeginT.o for -static + if using glibc. + (LINK_EH_SPEC): Define. + * config/sparc/linux64.h (STARTFILE_SPEC32, STARTFILE_SPEC64): + Use crtbeginT.o for -static. + (LINK_EH_SPEC): Define. + * config/sparc/t-linux64 (EXTRA_MULTILIB_PARTS): Add crtbeginT.o. + * Makefile.in (crtbeginT.o): Add rule. + * gcc.c (init_gcc_specs): For -static-libgcc, use -lgcc -lgcc_eh. + If neither -static-libgcc nor -shared-libgcc is passed and -shared, + use -lgcc if LINK_EH_SPEC is defined and -lgcc_s -lgcc if not. + If none of the above switches are passed, use -lgcc -lgcc_eh. + (init_spec): If LINK_EH_SPEC is defined, prepend it to link_spec. + * mklibgcc.in: Don't include LIB2ADDEH objects into libgcc.a if + creating libgcc_s.so, put them into separate libgcc_eh.a instead. + * unwind-dw2-fde.c: Don't include any headers if this file + is included from other .c file. + * unwind-dw2-fde-glibc.c: New file. + * crtstuff.c (USE_PT_GNU_EH_FRAME, USE_EH_FRAME_REGISTRY): Define. + Use it instead of EH_FRAME_SECTION_NAME where appropriate. + + 2001-12-14 Kaveh R. Ghazi + + * builtins.c (expand_builtin_memcmp): Mark parameter with + ATTRIBUTE_UNUSED. + * cfgcleanup.c (insns_match_p): Likewise. + * regrename.c (mode_change_ok): Likewise. + * gcc.c (execute): Const-ify. + + 2001-12-14 Aldy Hernandez + + * c-parse.in (typename): Do not split attributes. + Remove unsupported attributes warning. + + * c-decl.c (groktypename): Apply attributes. + + 2001-12-14 Richard Henderson + + * config/ia64/ia64.c (spill_restore_mem): Mark iterator + initialization as possibly dead. + + 2001-12-14 Richard Henderson + + * regrename.c (mode_change_ok): New. + (find_oldest_value_reg): Use it. + + 2001-12-14 Richard Henderson + + * regrename.c (struct value_data): Add max_value_regs. + (init_value_data): Initialize it. + (kill_value): Kill values that overlap the dying register. + (set_value_regno): New. + (kill_set_value, kill_autoinc_value, copy_value): Use it. + (copyprop_hardreg_forward_1): Kill earlyclobber operands + before looking at inputs. + + 2001-12-14 David Edelsohn + + * config/rs6000/rs6000.h (ASM_OUTPUT_DEF_FROM_DECLS): Handle + DECL_WEAK for function descriptors. + * config/rs6000/xcoff.h (HANDLE_PRAGMA_WEAK): Define if assembler + weak support present. + (ASM_WEAKEN_LABEL): Same. + + 2001-12-14 Kazu Hirata + + * config/h8300/h8300.md (anonymous pattern): Add a missing + mode. + + 2001-12-14 Kazu Hirata + + * config/h8300/h8300.c (h8300_adjust_insn_length): Fix a + comment typo. + + 2001-12-14 Kazu Hirata + + * config/h8300/h8300.c (h8300_handle_eightbit_data_attribute): + Remove the initialization requierment. + (h8300_handle_tiny_data_attribute): Likewise. + + 2001-12-14 Kazu Hirata + + * config/h8300/h8300.md (udivqi3): Remove. + (divqi3): Likewise. + (udivhi3): Likewise. + (divhi3): Likewise. + (umodqi3): Likewise. + (modqi3): Likewise. + (umodhi3): Likewise. + (modhi3): Likewise. + (udivmodqi3): New. + (divmodqi3): Likewise. + (udivmodhi3): Likewise. + (divmodhi3): Likewise. + + Sat Dec 15 01:39:12 CET 2001 Jan Hubicka + + * cfgcleanup.c (flow_find_cross_jump): Replace tests for note + by active_insn_p; count conditional jump as instruction. + + 2001-12-14 DJ Delorie + Danny Smith + + * config/i386/cygwin.h (I386_PE_STRIP_ENCODING): Handle '*' + at SYM_NAME[0] or SYM_NAME[3]. + (STRIP_NAME_ENCODING): Don't check for leading '*'. + + 2001-12-14 Ira Ruben + + Add -### option (displays driver-generated commands without + executing and quotes all arguments). + * doc/invoke.texi: Add -###. + * gcc.c (verbose_only_flag) - New flag. + * (execute): If -### write quoted arguments and return. + * (display_help): Print meaning of -###. + * (process_command): Handle -###. + + 2001-12-14 Ira Ruben + + Fix to no allow -save-temps to clobber user's source file. + * gcc.c: Add static globals input_stat and input_stat_set. + (do_spec_1): For 'g', 'u', 'U' case with save_temps_flag + set, check that user's input file is not overwritten. + (set_input): Reset input_stat_set for each new file. + + Fri Dec 14 22:14:44 CET 2001 Jan Hubicka + + * predict.c (estimate_probability): Fix LOOP_EXIT heuristic. + + 2001-12-14 Zack Weinberg + + * combine.c (record_dead_and_set_regs): Use + regs_invalidated_by_call. Don't note stores for CALL_INSNs. + + 2001-12-14 Roger Sayle + + * builtins.def: Rename BUILT_IN_FSQRT to BUILT_IN_SQRT and + __builtin_fsqrt to __builtin_sqrt. + + * builtins.c (expand_builtin_mathfn,expand_builtin): Same. + * doc/extend.texi: Simplify documentation to match patch. + + Fri Dec 14 21:23:54 CET 2001 Jan Hubicka + + * config.gcc: Revamp target_cpu_default2 to strings; + support new x86 variants. + * i386.c (override_options): Default x86_cpu_string and x86_arch_string + properly; set prefetch_sse. + * i386.h (x86_prefetch_sse): Declare. + (TARGET_PREFETCH_SSE): New. + (CPP_CPU_DEFAULT_SPEC): Define according to the new macros. + (TARGET_CPU_DEFAULT_*): New. + + Thu Dec 13 21:57:13 CET 2001 Janis Johnson + Jan Hubicka + + * config/i386/i386.h (struct processor_costs): Add new members + prefetch_block and simultaneous_prefetches. + (PREFETCH_BLOCK, SIMULTANEOUS_PREFETCHES): New. + * config/i386/i386.c (processor_costs structs): Add values for + prefetch_block and simultaneous_prefetches. + * config/i386/i386.md (unspec values): Remove values for prefetch + operations, which now use the PREFETCH rtx code. + (prefetch_sse, prefetch_3dnow, prefetchw): Combine to use new + unified prefetch support. + + 2001-12-14 Jason Merrill + + * diagnostic.c (sorry): Increment sorrycount before saving the + buffer state. + + Fri Dec 14 19:53:23 CET 2001 Jan Hubicka + + * i386.md (sqrt?f): Fix conditionals. + + Fri Dec 14 07:29:52 2001 Douglas B. Rupp + + * config.gcc (alpha64-dec-*vms*): New case. + * config/alpha/t-vms64, config/alpha/vms-crt0-64.c: New files. + * config/alpha/vms-psxcrt0-64.c, config/alpha/vms64.h: Likewise. + * config/alpha/xm-vms64.h: Likewise. + + * config/alpha/alpha.c (vms_attribute_table): Add new attributes. + (alpha_write_linkage): Test for null alpha_links. + (SECTION_VMS_GLOBAL, SECTION_VMS_INITIALIZE): New section attributes. + (vms_section_type_flags, vms_asm_named_section): Handle them. + + Fri Dec 14 12:05:14 CET 2001 Jan Hubicka + + * i386.c (ix86_fpmath, ix86_fpmath_string): New. + (override_option): Set ix86_fpmath. + * i386.h (MASK_MIX_SSE_I387): Remove. + (TARGET_SSE_MATH): New. + (TARGET_MIX_SSE_I387): Use ix86_fpmath. + (TARGET_SWITCHES): Remove "mix-sse-i387". + (fpmath_unit): New enum. + (ix86_fpmath, ix86_fpmath_string): Declare. + * i386.md (swapsf): Fix condition. + (add?f, sub?f, mul?f, div?f, sqrt?f, min?f): Use TARGET_SSE_MATH. + (fp_?f_*_nosse): New. + (fp_*): Use TARGET_SSE_MATH. + * invoke.texi (-mfpmath): Document. + (-msse2): Add. + + 2001-12-14 Jason Merrill + + * dwarf2out.c (output_die): Print the string in the comment for + a DW_FORM_strp. + + 2001-12-14 Richard Earnshaw + + * netbsd.h (COLLECT_SHARED_INIT_FUNC) + (COLLECT_SHARD_FINI_FUNC): Remove redundant semicolon. + * doc/tm.texi (COLLECT_SHARED_INIT_FUNC) + (COLLECT_SHARD_FINI_FUNC): Use @code where appropriate. + + 2001-12-13 Richard Henderson + + * regrename.c (kill_value_regno): Simplify chain removal. + (kill_value): Kill all of HARD_REGNO_NREGS. + (kill_set_value): Use kill_value not kill_value_regno. + (kill_autoinc_value): Likewise. + (copyprop_hardreg_forward): Don't collect refresh_blocks. + Call delete_noop_moves. + + 2001-12-13 Aldy Hernandez + + * attribs.c (c_common_attribute_table): Swap decl_req and type_req + for the mode attribute. + (handle_mode_attribute): Handle types, not decls. + + 2001-12-13 Jason Merrill + + * c-common.h (COMPOUND_STMT_BODY_BLOCK): New macro. + + 2001-12-13 Aldy Hernandez + + * config/rs6000/rs6000.md (eh_set_lr_di): Change scratch + constraint to base register. + (eh_set_lr_si): Same. + + 2001-12-13 Hans-Peter Nilsson + + * expr.c (expand_expr, case ADDR_EXPR): Don't honor + flag_force_addr for modifier != EXPAND_CONST_ADDRESS, + modifier != EXPAND_INITIALIZER and modifier != EXPAND_SUM. + + Thu Dec 13 20:30:08 2001 Richard Kenner + + * expr.c (copy_blkmode_from_reg): Add missing braces to eliminate + warning and reformat comments. + (expand_assignment): Don't pass EXPAND_WRITE if LHS is component. + (highest_pow2_factor, case INTEGER_CST): Return BIGGEST_ALIGNMENT + if overflow. + + 2001-12-12 Aldy Hernandez + + * config/rs6000/rs6000.c (rs6000_override_options): Add + SUBSUBTARGET_OVERRIDE_OPTIONS. + + * config/rs6000/eabialtivec.h: New file. + + * config/rs6000/linuxaltivec.h: New file. + + * config.gcc: Add powerpc-*-eabialtivec and + powerpc-*-linux-gnualtivec. + + 2001-12-13 Neil Booth + + * toplev.c (process_options, parse_options_and_default_flags): + Set flag_no_inline before the post_options hook. + + 2001-12-13 Richard Henderson + + * emit-rtl.c (adjust_address_1): Don't adjust address if adjust + is false. + + 2001-12-13 Richard Earnshaw + + * collect2.c (COLLECT_SHARED_INIT_FUNC) + (COLLECT_SHARD_FINI_FUNC): Define default values. + (write_c_file_stat): Use them to call construtor and destructor + functions in shared libraries. + * doc/tm.texi (COLLECT_SHARED_INIT_FUNC) + (COLLECT_SHARD_FINI_FUNC): Document them. + * config/netbsd.h (COLLECT_SHARED_INIT_FUNC) + (COLLECT_SHARD_FINI_FUNC): Define. + + * config/netbsd.h (LINK_SPEC): Don't pull in estart if creating a + shared library. Pass -shared through to the linker. + * config/arm/netbsd.h (LINK_SPEC): Likewise. + + * config/arm/t-netbsd (TARGET_LIBGCC2_CFLAGS): Add -fpic. + (SHLIB_EXT, SHLIB_NAME, SHLIB_SONAME, SHLIB_OBJS, SHLIB_LINK) + (SHLIB_INSTALL): Define. + + 2001-12-13 Richard Earnshaw + + * arm.c (legitimize_pic_address): Handle LABEL_REFs in substantially + the same way as we handle SYMBOL_REFS. + + Thu Dec 13 07:47:24 2001 Richard Kenner + + * loop.c (remove_constant_addition): Fix prototype and whitespace. + (emit_prefetch_instructions): Remove warnings and whitespace + changes. + + Thu Dec 13 06:48:38 2001 Douglas B. Rupp + + * config/alpha/vms-cc.c (preprocess_args): Fix forward + declaration. + + Thu Dec 13 12:31:07 CET 2001 Jan Hubicka + + * predict.c (estimate_probability): Reorganize opcode heuristics. + * predict.def (PRED_OPCODE_POSITIVE, PRED_OPCODE_NONEQUAL, + PRED_FPOPCODE): New. + + * i386.c (override_options): Recognize various CPU variants and set + SSE/MMX/3dNOW flags accordingly. + * i386.h (MASK_MMX_SET, MASK_SSE_SET, MASK_SSE2_SET, MASK_3DNOW_SET, + MASK_3DNOW_A_SET): New. + (MASK_ACCUMULATE_OUTGOING_ARGS_SET): New. + (MASK_NO_ACCUMULATE_OUTGOING_ARGS): Delete. + (MASK_*): Renumber. + (TARGET_FLAGS): Use new masks. + (CPP_CPU_SPECS): Recognize new CPU variants. + * invoke.texi (-mcpu): Update documentation. + + * flags.h (flag_prefetch_loop_arrays): Declare. + * loop.h (LOOP_PREFETCH): Define new constant. + * loop.c (strength_reduce): Call emit_prefetch_instructions. + (MAX_PREFETCHES, PREFETCH_BLOCKS_BEFORE_LOOP_MAX, + PREFETCH_BLOCKS_BEFORE_LOOP_MIN, PREFETCH_BLOCKS_IN_LOOP_MIN): New + constants. + (check_store_data): New structure. + (check_store, emit_prefetch_instructions, rtx_equal_for_prefetch_p): + New functions. + * toplev.c: Include insn-flags.h. + (flag_prefetch_loop_arrays): New global variable. + (lang_independent_option): Add -fprefetch-loop-arrays. + (rest_of_compilation) Pass LOOP_PREFETCH when flag_prefetch_loop_arrays + is set. + * Makefile.in (toplev.c): Depend on insn-flags.h. + * invoke.texi (-fprefetch-loop-arrays): Document. + + * predict.c (estimate_probability): Distribute the loop exit + probability according to number of exit edges. + + * cfgcleanup.c (insns_match_p): Break out from ...; + (flow_find_cross_jump): ... here; + (outgoing_edges_match): Add parameter MODE; attempt to match everything + except for tablejumps. + (try_crossjump_to_edge): Accept complex edges. + (try_crossjump_bb): Likewise. + + 2001-11-29 Corey Minyard + + * recog.c (validate_replace_rtx_1): Use simplify_gen_binary + instead of plus_constant. + * simplify-rtx.c (neg_const_int): New. + (simplify_gen_binary, simplify_plus_minus): Use it. + + 2001-12-12 Roger Sayle + + * builtins.c (expand_builtin_memset, expand_builtin_memcpy, + expand_builtin_strcpy): Additional arguments TARGET and MODE. + (expand_builtin_bzero, expand_builtin_strcpy, + expand_builtin_strncpy, expand_builtin_bzero): Pass additional + TARGET and MODE parameters to the above functions. + (expand_builtin_memset, expand_builtin_memcpy): Optimize the + case where the LEN parameter is constant zero. + (expand_builtin_memcmp): No longer conditional on + HAVE_cmpstrsi. Take an additional mode parameter. Optimize + the cases where len is either constant zero or one. + Optimize to call to memcpy, even if the memcpy isn't inlined. + (expand_builtin_strncpy): Optimize to call memcpy, even if the + memcpy isn't inlined. + (expand_builtin_strcmp, expand_builtin_strncmp): Always attempt + to optimize to a call to memcmp. + (expand_builtin): expand_builtin_memcmp can always be called, + and pass the required parameters to expand_builtin_memcmp, + expand_builtin_memset, expand_builtin_memcpy and + expand_builtin_strcpy. + + 2001-12-12 David O'Brien + + * config.gcc (arm-*-freebsd*): Add target. + * config/arm/freebsd.h: New file. + * config/arm/arm.h (CPP_PREDEFINES): Do not define. + (CPP_SPEC): #undef before defining. + (CPP_CPU_ARCH_SPEC): Add -Acpu=arm -Amachine=arm. + * config/arm/conix-elf.h (CPP_PREDEFINES): Remove -Acpu=arm + -Amachine=arm. + * config/arm/linux-elf.h: Likewise. + * config/arm/netbsd.h: Likewise. + * config/arm/riscix.h: Likewise. + * config/arm/riscix1-1.h: Likewise. + * config/arm/semiaof.h: Likewise. + + 2001-12-12 Richard Henderson + + * regrename.c (copyprop_hardreg_forward): New optimization. + (kill_value_regno, kill_value, init_value_data, kill_clobbered_value, + kill_set_value, kill_autoinc_value, copy_value, find_oldest_value_reg, + replace_oldest_value_reg, replace_oldest_value_addr, + replace_oldest_value_mem, copyprop_hardreg_forward_1, + debug_value_data, validate_value_data): New. + * rtl.h (copyprop_hardreg_forward): Declare. + * toplev.c (flag_cprop_registers): New. + (f_options): Add -fcprop-registers + (rest_of_compilation): Invoke it. + (parse_options_and_default_flags): Set it at -O1. + * doc/invoke.texi: Document it. + + 2001-12-12 Jakub Jelinek + + * dwarf2out.c (dw_val_class): Add dw_val_class_range_list. + (DEBUG_RANGES_SECTION_LABEL): Define. + (ranges_section_label): Add. + (add_AT_range_list): New. + (print_die, sizeof_die, value_format): Handle dw_val_class_range_list. + (output_loc_list): Location expression length is always 2-byte. + (output_die): Handle dw_val_class_range_list. + (gen_lexical_block_die): Call add_AT_range_list. + (dwarf2out_init): Initialize ranges_section_label. + (dwarf2out_finish): Emit ranges_section_label. + + 2001-12-12 Jakub Jelinek + + * c-typeck.c (digest_init): Allow initializing + static storage duration objects with compound literals. + * doc/extend.texi (Compound literals): Document the extension. + + 2001-12-12 Richard Henderson + + * emit-rtl.c (adjust_address_1): Always copy address to avoid + shared rtl. + + Wed Dec 12 07:37:52 2001 Olivier Hainque + + * stmt.c (expand_end_case): Do subtraction of lower bound as trees + to avoid overflow. + + Wed Dec 12 07:35:24 2001 Douglas B. Rupp + + * cppfiles.c (read_include_file): Set buffer size properly when + file is shorter than expected. + + Wed Dec 12 08:35:33 2001 Nicola Pero + + * objc/objc-act.c (encode_complete_bitfield): Fixed encoding + enumeral types - encode them using 'i'. + + 2001-12-12 Nathan Sidwell + + * doc/extend.texi (Deprecated Features): Deprecate implicit + typename. Document that named return and initializer lists are now + removed. + + 2001-12-11 Roger Sayle + + * except.c (reachable_next_level): Handle ERT_UNKNOWN to avoid + compiler warning about enumeration values not being handled. + + 2001-12-11 Momchil Velikov + + * config/fp-bit.c (pack_d): Cast to ``fractype'' for long long + shifts. + + 2001-12-11 Richard Henderson + + * config/alpha/alpha.h (TARGET_FIXUP_EV5_PREFETCH): New. + * config/alpha/linux.h (TARGET_FIXUP_EV5_PREFETCH): New. + * config/alpha/alpha.md (prefetch): New. + + 2001-12-11 Richard Henderson + + * combine.c (simplify_and_const_int): Simplify (AND (PLUS X Y) C) + if C has only low bits set and doesn't intersect with X or Y. + + Tue Dec 11 23:58:39 EST 2001 John Wehle (john@feith.com) + + * basic-block.h (flow_preorder_transversal_compute): Declare. + * cfganal.c (flow_preorder_transversal_compute): Implement. + + Tue Dec 11 23:54:27 EST 2001 John Wehle (john@feith.com) + + * cfganal.c (flow_depth_first_order_compute): Always + increment dfsnum. + + 2001-11-30 Alan Matsuoka + + * combine.c (combine_simplify_rtx) : Can't simplify + cases that use mode class MODE_CC. + + 2001-12-11 Richard Henderson + + * expmed.c (expand_divmod): Ignore sdiv_pow2_cheap for modes in + which there is no divide expander. + + 2001-12-11 Richard Henderson + + * except.c (sjlj_find_directly_reachable_regions): Don't + consider RNL_BLOCKED a directly reachable region. + (sjlj_assign_call_site_values): Trust directly_reachable. + (sjlj_emit_dispatch_table): Likewise. + + 2001-12-11 Richard Henderson + + * config/alpha/alpha.md (divmodsi_internal_er): Split, so that + we represent the address load's dependency on the gp. + (divmoddi_internal_er): Likewise. + (divmodsi_internal_er_1, divmoddi_internal_er_1): New. + + 2001-12-11 Richard Henderson + + * emit-rtl.c (widen_memory_access): New. + * expr.h (widen_memory_access): Declare it. + * config/alpha/alpha.c (get_aligned_mem): Use it. + + 2001-12-11 Richard Henderson + + * combine.c (simplify_shift_const): Move SHIFT_COUNT_TRUNCATED + simplification above out of range check. + + 2001-12-11 Dan Nicolaescu + + * config/sparc/sparc.md (prefetch): New. + + 2001-12-11 Aldy Hernandez + + * output.h (regno_uninitialized): Make argument unsigned. + + * flow.c (regno_uninitialized): Make regno unsigned. + + 2001-12-11 David O'Brien + + * elfos.h (ENDFILE_SPEC, STARTFILE_SPEC): Do not define. + * config/cris/cris.h (ENDFILE_SPEC): Define. + * config/i386/i386elf.h ((ENDFILE_SPEC, STARTFILE_SPEC): Define. + * config/pa/elf.h: Likewise. + + 2001-12-11 Richard Henderson + + * objc/objc-act.c (build_string_class_template): New. + (build_objc_string_object): Call it. + + 2001-12-11 Steve Ellcey + + * doc/tm.texi (FUNCTION_ARG_REG_LITTLE_ENDIAN): New. + * defaults.h (FUNCTION_ARG_REG_LITTLE_ENDIAN): New. + * calls.c (store_unaligned_arguments_into_pseudos): Check + FUNCTION_ARG_REG_LITTLE_ENDIAN to see how structures + are passed/returned. + * expr.c (move_block_from_reg): Ditto. + (move_block_from_reg): Ditto. + (copy_blkmode_from_reg): Ditto. + * stmt.c (expand_return): Ditto. + * stor-layout.c (compute_record_mode): If + FUNCTION_ARG_REG_LITTLE_ENDIAN is set then check + MEMBER_TYPE_FORCES_BLK even if mode == VOIDmode. + * config/ia64/hpux.h (MEMBER_TYPE_FORCES_BLK): Set to true + so that Structures of one field are still treated as structures. + (FUNCTION_ARG_REG_LITTLE_ENDIAN): New, set it to true. + (FUNCTION_ARG_PADDING): Set to ia64_hpux_function_arg_padding(). + (PAD_VARARGS_DOWN): Modify from default to not pad structures down. + * config/ia64/ia64-protos.h (ia64_hpux_function_arg_padding): New. + * config/ia64/ia64.c (ia64_hpux_function_arg_padding): New function + to special case handling of structure padding. + + 2001-12-11 Daniel Berlin + + * sched-rgn.c (CONST_BASED_ADDRESS_P): CONST_INT -> CONSTANT_P. + (may_trap_exp): Stores only are risk if they trap, too, not just + if code == MEM. + + 2001-12-11 Aldy Hernandez + + * flow.c (find_regno_partial): Indent properly. Add a default to + switch. + + 2001-12-11 Neil Booth + + * c-common.c (combine_strings): Complain if concatenating + __FUNCTION__. + * c-parse.in (yylexname): Flag artificial strings. + * tree.h (TREE_ARTIFICIAL_STRING_P): New. + doc: + * extend.texi: Update. + + 2001-12-11 Aldy Hernandez + + * c-common.c (type_for_mode): Handle unsigned vectors. + (type_for_mode): Remove redundant calls to TYPE_MODE. + + * tree.c (make_vector): New. + (build_common_tree_nodes_2): Use make_vector for vector types. + Add unsigned vector types. + + * tree.h (tree_index): Add unsigned types for vectors. + (unsigned_V16QI_type_node): New. + (unsigned_V4SI_type_node): New. + (unsigned_V8QI_type_node): New. + (unsigned_V8HI_type_node): New. + (unsigned_V4HI_type_node): New. + (unsigned_V2SI_type_node): New. + + 2001-12-11 Stan Shebs + + * objc/objc-act.c (finish_message_expr): Fix misplaced parens in a + test of class names. + + 2001-12-11 David O'Brien + + * config.gcc (m68020-*-elf*): Expand tm_file to include all needed + cpu configuration headers. + * config/h8300/elf.h: Include dbxelf.h. + * config/m68k/linux.h: Likewise. + * config/m68k/m68020-elf.h: Likewise. + * config/m68k/m68kv4.h: Likewise. + * config/sh/elf.h: Likewise. + * config/m68k/m68kemb.h: Add comment about the its purpose. + + 2001-12-11 Richard Henderson + + * objc/objc-act.c (build_constructor): Cast initializer values + to the proper field types. + + 2001-12-11 Jakub Jelinek + + * unwind-dw2.c (execute_cfa_program): Fix DW_CFA_restore handling. + + 2001-12-10 Roger Sayle + + * builtins.c (expand_builtin): Use a switch statement to list + those functions not expanded without optimizations, instead of a + series of equality tests. + + Tue Dec 11 07:08:57 2001 Douglas B. Rupp + + * config/alpha/vms.h (LIB_SPEC): Define. + * config/alpha/xm-vms.h (INCLUDE_DEFAULTS): Don't set component field. + + * libgcc2.c (_bb): Remove ctime declaration. + + * Makefile.in (stage[1234]-start): $(LN_S) utilities in a manner + that works if LN_S = cp. + + * config/alpha/x-vms (version): Change "." to "_". + + * configure.in: Hardcode that vfork works on VMS host. + * configure: Regenerated. + + Mon Dec 10 18:37:31 2001 Douglas B. Rupp + + * gcc.c (convert_filename): Add do_obj parameter. Don't convert + unless do_obj true. + (process_command): Modify calls to convert_filename. + + 2001-12-11 Rainer Orth + + * config/sparc/sol2-sld-64.h: Include dbxelf.h again. + + Mon Dec 10 15:54:27 2001 Jeffrey A Law (law@cygnus.com) + + * combine.c (known_cond): Check mode of each operand to determine + if COND is comparing floating point values. + + 2001-12-10 David Edelsohn + + * rs6000.h (processor_type): Add PPC405. + (RTX_COSTS): Add PPC405. Correct rs64 and ppc630 multiply costs. + * rs6000.md: Add PPC405 information. Utilize imul2 and imul3 for + rios1, rs64, and ppc630 processors. + * rs6000.c (processor_target_table): Add PPC405. + + 2001-12-10 Richard Henderson + + * config/alpha/alpha.md (unaligned_extendhidi): Call gen_lowpart + instead of hardcoding subregs into the _be and _le patterns. + + 2001-12-10 Neil Booth + + * c-lex.c, c-parse.in, c-typeck.c: Revert concatenation changes. + + Mon Dec 10 09:19:11 2001 Richard Kenner + + * config/i386/i386.md (leave, leave_rex64): Adjust pattern to match + what insn does. + + 2001-12-10 Joseph S. Myers + + * doc/cpp.texi: Don't condition menus on @ifinfo. Condition the + copyright notice formerly conditioned on @ifinfo on @ifnottex + instead. + + Mon Dec 10 06:15:44 2001 Richard Kenner + + * vmsdbgout.c (lookup_filename): Remove warning. + + Mon Dec 10 06:09:57 2001 Douglas B. Rupp + + * Makefile.in: Add $(OUTPUT_OPTION) to compilation rules. + + * config.gcc (alpha*-dec-vms*): Change to alpha*-dec-*vms* + (exeext, target_alias, prefix, local_prefix): Define. + * config/alpha/x-vms (USE_COLLECT2): Make empty. + * config/alpha/xm-vms.h (INCLUDE_DEFAULTS): Use Unix style + file specifications. Remove ".". + (GCC_INCLUDE_DIR): Remove redefinition (redundant). + * fixinc/mkfixinc.sh (alpha*-dec-vms*): Change to alpha*-dec-*vms* + + 2001-12-09 Nathan Sidwell + + * Makefile.in (.po.gmo): Use POSIXLY_CORRECT argument ordering. + + Sun Dec 9 21:57:24 2001 Douglas B. Rupp + + * config/alpha/t-vms (EXTRA_PARTS): Append $(VMS_EXTRA_PARTS) + Add rules for building [vp]crt0.o + * config/alpha/vms.h (START_FILE_SPEC): Define. + * config/alpha/x-vms (VMS_EXTRA_PARTS): Define + * config/alpha/vms-crt0.c, config/alpha/vms-psxcrt0.c: New files. + * doc/invoke.texi: Document special Alpha/VMS options. + + Sun Dec 9 20:25:17 2001 Richard Kenner + + * hwint.h (HOST_BITS_PER_LONGLONG): Deal with __int64 type. + * vmsdbg.h (DST_SRC_COMMAND): Test for type of long long or __int64, + not GNUC. + + Sun Dec 9 20:19:32 2001 Richard Kenner + Douglas B. Rupp + + * tree.c (append_random_char): Conditionalize INO for VMS. + + 2001-12-09 Richard Henderson + + * cfgcleanup.c (label_is_jump_target_p): New function. + (try_optimize_cfg): Use label_is_jump_target_p to check if label is + target of a JUMP_INSN from the preceding block. + + Sun Dec 9 18:40:07 2001 Douglas B. Rupp + + * vmsdbgout.c (lookup_filename): Assign null string instead + of null pointer to fnam. + + 2001-12-09 Richard Henderson + + * config/alpha/alpha.c (alpha_align_insns): Suppress realignment + immediately after a call; insert nops before a call. + + 2001-12-09 Richard Henderson + + * config/alpha/alpha.c (alpha_align_insns): Use align_functions, + not FUNCTION_BOUNDARY. + * config/alpha/alpha.h (TRAMPOLINE_ALIGNMENT): New. + * config/alpha/alpha32.h, config/alpha/vms.h: Likewise. + * config/alpha/unicosmk.h (FUNCTION_BOUNDARY): Remove. + + 2001-12-09 Hans-Peter Nilsson + + * config/mmix/mmix.c (mmix_function_block_profiler, + mmix_block_profiler, mmix_function_block_profiler_exit): Delete + unused functions. + * config/mmix/mmix-protos.h (mmix_function_block_profiler, + mmix_block_profiler, mmix_function_block_profiler_exit): Delete + prototypes. + + * config/cris/cris.h (FUNCTION_BLOCK_PROFILER, BLOCK_PROFILER): + Delete obsoleted macros. + + 2001-12-09 Joseph S. Myers + + * doc/cpp.texi, doc/cppinternals.texi, doc/invoke.texi, + doc/md.texi, doc/rtl.texi, doc/tm.texi: Use American spelling. + + * ChangeLog.2, ChangeLog.3, ChangeLog.5, ChangeLog, alias.c, + cfgbuild.c, expmed.c, expr.c, final.c, flow.c, fold-const.c, + function.c, config/alpha/alpha.md, config/alpha/vms-ld.c, + config/arm/arm.c, config/arm/arm.h, config/c4x/libgcc.S, + config/i370/i370.c, config/i386/i386.c, + config/i386/i386-interix.h, config/i386/i386.md, + config/i386/i386.h, config/i386/netbsd-elf.h, config/ia64/ia64.c, + config/m32r/m32r-protos.h, config/mcore/mcore.h, + config/rs6000/rs6000.h, config/sparc/linux64.h, + config/sparc/sparc.c, config/v850/v850-protos.h, + config/cris/cris.h, config/s390/s390.md, config/elfos.h: Fix + spelling errors. + + 2001-12-09 Daniel Berlin + + * config/rs6000/rs6000.h (enum rs6000_builtins): Add remaining + altivec builtins (VCF?X, VCT?XS, VSEL, V*EFP, VRFI*). + + * config/rs6000/rs6000.c: Ditto. + + * config/rs6000/rs6000.md: Ditto. + + 2001-12-09 Kaveh R. Ghazi + + * 1750a.md: Add default case in switch. + * alpha/vms.h (INITIAL_ELIMINATION_OFFSET): Add abort clause in + if-else statement. + * dsp16xx.c (print_operand_address): Likewise. + * i386/osf1elf.h (FUNCTION_PROFILER): Const-ify. + * ia64.md: Add missing braces. + * rs6000-protos.h (s8bit_cint_operand): Prototype. + * s390.h (INITIAL_ELIMINATION_OFFSET): Add abort clause in + if-else statement. + * stormy16.h (REG_CLASS_CONTENTS): Add missing braces. + * v850.h (OUTPUT_ADDR_CONST_EXTRA): Don't issue a `return'. + * dbxout.c (dbxout_source_file): Move a variable into the scope + where it is used. + * final.c (profile_function): Mark parameter with + ATTRIBUTE_UNUSED. + * genemit.c (gen_expand): Likewise for generated file. + * insn-addr.h (INSN_ADDRESSES_NEW): Avoid undefined behavior. + + * vmsdbg.h: Delete spurious close-comment. + (DST_HEADER): Fix typo in ENUM_BITFIELD parameter. + * vmsdbgout.c (write_modbeg): Define return type. + + * m68k/3b1.h (ASM_OUTPUT_ALIGN): Wrap in do-while(0). + * m68k/amix.h (ASM_GENERATE_INTERNAL_LABEL): Likewise. + * m68k/atari.h (ASM_GENERATE_INTERNAL_LABEL): Likewise. + * m68k/hp320.h (ASM_OUTPUT_ALIGN): Likewise. + * m68k/m68kelf.h (ASM_OUTPUT_ALIGN): Likewise. + * m68k/sgs.h (ASM_OUTPUT_ALIGN): Likewise. + * m68k/tower-as.h (ASM_OUTPUT_ALIGN): Likewise. + + 2001-12-08 Tom Rix + + * config/rs6000/aix43.h (NON_POWERPC_MASKS): Delete MASK_STRING. + * config/rs6000/aix51.h (NON_POWERPC_MASKS): Same. + * config/rs6000/rs6000.md (load_multiple, store_multiple): Do not use + for powerpc64. + * config/rs6000/rs6000.md (movstrsi_8reg, movstrsi_6reg, + movstrsi_4reg, movstrsi_1_reg): Add powerpc64. + * config/rs6000/rs6000.c (expand_block_move): Do not use + gen_movstrsi_2reg and powerpc64. + + 2001-10-08 Aldy Hernandez + + * c-common.h (rid): Add RID_CHOOSE_EXPR and + RID_TYPES_COMPATIBLE_P. + + * c-parse.in (reswords): Add __builtin_choose_expr. + Add __builtin_types_compatible_p. + Add CHOOSE_EXPR token. + Add TYPES_COMPATIBLE_P token. + Add production for CHOOSE_EXPR. + Add production for TYPES_COMPATIBLE_P. + + * doc/extend.texi (__builtin_choose_expr): Add documentation. + (__builtin_types_compatible_p): Likewise. + + 2001-12-08 David Edelsohn + + * stor-layout.c (place_union_field): Apply ADJUST_FIELD_ALIGN + to unions. + + 2001-12-08 Neil Booth + + * c-parse.in: Take string literals in assembler constructs, + not expressions. + * c-typeck.c (build_asm_stmt, simple_asm_stmt): No need to + check the strings are STRING_CSTs. + + 2001-12-08 Neil Booth + + * c-lex.c (c_lex): Peek a token ahead for a string to concatenate, + using combine_strings to do the concatenation. + * c-parse.in: Replace uses of the string non-terminal with STRING. + Don't attempt string concatenation. + (OBJC_STRING): New terminal. + (string): Remove non-terminal. + (_yylex): Call combine_strings on function names. Generate + OBJC_STRING terminals; don't pass '@' on to yacc. + * c-typeck.c (simple_asm_stmt): Don't concatenate strings here. + (build_asm_stmt): Similarly. + + 2001-12-08 Kaveh R. Ghazi + + * rtlanal.c (get_jump_table_offset): Delete unused variable. + + 2001-12-08 Richard Earnshaw + + * arm.md (VUNSPEC_PREFETCH): Delete constant definition. + (prefetch): Rewrite using PREFETCH RTL primitive. + * arm.h (arm_builtins): Delete ARM_BUILTIN_PREFETCH). + * arm.c (arm_init_builtins): Don't initialize a builtin for + __builtin_prefetch here. + (arm_expand_builtin): Don't expand __builtin_prefetch here. + + 2001-12-08 Richard Earnshaw + + * final.c (cleanup_subreg_operands): Use recog_data.operand_loc + in test for a subreg. + + 2001-12-08 John David Anglin + + * rtl.c (rtx_equal_p): Check for null pointers when comparing rtx + strings. + + 2001-12-07 Richard Henderson + + * doc/extend.texi: Fix typo last change. + + * c-decl.c (c_language): Remove duplicate. + + 2001-12-07 Dale Johannesen + + * config/rs6000/darwin.h: Set MAX_LONG_TYPE_SIZE to 32. + * config/rs6000/rs6000.c (rs6000_emit_move): In Darwin- + specific codegen, eliminate a register copy. + (print_operand_address): Add support for Darwin's lo16(constant) + syntax. + (rs6000_machopic_legitimize_pic_address): Fix darwin-specific + generation of addresses within very large data objects. + (s8bit_cint_operand): New. + * config/rs6000/rs6000.md: Remove "iu" reference for 750/7400. + Move "mtjmpr" to correct functional unit for 750/7400/7450. + Add imul2 and imul3 insn types for multiplication by 16- and + 8-bit constants. + Change tablejump patterns to strongly discourage using LR + rather than CTR. + Add %lo16 patterns for Darwin loads and stores. + + 2001-12-07 Kaveh R. Ghazi + + * alpha.md: Use (HOST_WIDE_INT)1<<63 in lieu of 0x8000000000000000. + + 2001-12-07 Stephane Carrez + + * config/sparc/sparc.c (epilogue_renumber): Do not replace %fp + with %sp because it can cause the delayed instruction to load + below the stack. + + 2001-12-07 Kaveh R. Ghazi + + * alpha.c (alpha_expand_unaligned_store, + alpha_expand_unaligned_store_words): Use constm1_rtx in place of + call to immed_double_const. + + 2001-12-07 Aldy Hernandez + + * doc/extend.texi (Variable Attributes): Document vector_size. + + * attribs.c (c_common_attribute_table): Add vector_size. + (handle_vector_size_attribute): New. + (vector_size_helper): New. + (decl_attributes): Relayout the decl after calculating attribs. + + 2001-12-07 Joseph S. Myers + + * doc/gcc.texi: Don't include install-old.texi. Adjust menu + description for Trouble section. + * doc/install-old.texi: Adjust for inclusion as chapter of new + installation manual. + * doc/install.texi, doc/include/fdl.texi, doc/install.texi2html: + Adjust to include old installation chapter as chapter of new + installation manual. + + Fri Dec 7 11:07:35 EST 2001 John Wehle (john@feith.com) + + * rtl.h (get_jump_table_offset): Declare. + * rtlanal.c (get_jump_table_offset): Implement. + + Fri Dec 7 07:06:17 2001 Richard Kenner + + * final.c (bb_head, bb_tail, bb_file_label_num, bb_func_label_num): + Deleted; were used only by BB profiler code. + (sbb_head, sbb_tail, sbb_label_num): Likewise. + (end_final): Delete now-unused vars I, PTR, and SPTR. + + * expr.c (store_field): Remove warning. + (expand_expr, case COMPONENT_REF, case VIEW_CONVERT_EXPR): Likewise. + (highest_pow2_factor, case MIN_EXPR, case MAX_EXPR): Add cases. + (highest_pow2_factor, case *_DIV_EXPR): Only can do something if + divisor constant power of 2. + (highest_pow2_factor, case COMPOUND_EXPR): Look at operand 1. + + 2001-12-07 Kaveh R. Ghazi + + * alpha.c (function_arg): Cast value to HOST_WIDE_INT before + shifting. + + 2001-12-06 Aldy Hernandez + + * rs6000.h (PRE_GCC3_DWARF_FRAME_REGISTERS): New. + (DWARF_FRAME_REGISTERS): Delete. + + 2001-12-06 Janis Johnson + + * builtin-types.def (BT_FN_VOID_PTR_VAR): New. + * builtins.def (BUILT_IN_PREFETCH): Change arguments. + * builtins.c (expand_builtin_prefetch): Two arguments are now optional, + with defaults for read prefetch with high degree of locality. + * doc/extend.texi (__builtin_prefetch): Update documentation. + * doc/md.texi (prefetch): Add documentation. + + 2001-12-06 Rainer Orth + + * fixinc/inclhack.def (stdio_va_list): Handle __VA_LIST__ in Tru64 + UNIX V5.1A stdio.h. + * fixinc/fixincl.x: Regenerate. + Fixes PR libf2c/4826. + + 2001-12-06 Aldy Hernandez + Richard Henderson + + * doc/tm.texi (DWARF_FRAME_REGISTERS): Add documentation. + (PRE_GCC3_DWARF_FRAME_REGISTERS): Same. + + * unwind-dw2.c (__frame_state_for): Change DWARF_FRAME_REGISTERS + to PRE_GCC3_DWARF_FRAME_REGISTERS. + (frame_state): Same. + (PRE_GCC3_DWARF_FRAME_REGISTERS): Define if not already defined. + + 2001-12-06 Kaveh R. Ghazi + + * langhooks.c (lhd_staticp): Mark parameter with + ATTRIBUTE_UNUSED. + + 2001-12-06 H.J. Lu + + * Makefile.in (.po.gmo): Use "-test -d po || mkdir po" to + reduce noise. + (.po.pox): Likewise. + (o/$(PACKAGE).pot): Likewise. + + 2001-12-06 Alexandre Oliva + + * tree.c (get_callee_fndecl): Move DECL_ABSTRACT_ORIGIN-following... + * tree-inline.c (expand_call_inline): ... here. + + 2001-12-06 H.J. Lu + + * Makefile.in (.po.gmo): Use "-mkdir po" for parallel build. + (.po.pox): Likewise. + (o/$(PACKAGE).pot): Likewise. + + 2001-12-06 David O'Brien + + * config.gcc: Include dbxelf.h before elfos.h. + * elfos.h: Don't include dbxelf.h, let config.gcc handle it. + + 2001-12-06 Zack Weinberg + + * cppfiles.c (open_file): If we've opened a directory by + mistake, close it. + (find_include_file): Avoid turning / into // or // into ///. + + 2001-12-06 Nick Clifton + + * config/arm/arm.h (STRUCT_VALUE): Suppress definition. + (STRUCT_VALUE_REGNUM): Restore definition. + + 2001-12-06 Andrew MacLeod + + * flow.c (find_regno_partial): Return register, not the expression + the register is in. + + Thu Dec 6 09:24:12 2001 Richard Kenner + + * function.c (handle_epilogue_set): Check for FP setting case when + SP is set from FP in same insn. + + 2001-12-06 Nick Clifton + + * config/arm/arm.c (load_multiple_sequence): Pass pointer to + RTX when calling alter_subreg(). + (store_multiple_sequence): Pass pointer to RTX when calling + alter_subreg(). + + Thu Dec 6 06:55:13 2001 Richard Kenner + + * function.c (assing_parms): Fix typo in last change. + * config/clipper.c (clipper_builtin_saveregs): Remove Checker code. + * config/m88k/m88k.c (m88k_builtin_saveregs): Likewise. + * config/pa/pa.c (hppa_builtin_saveregs): Likewise. + * config/sparc/sparc.c (sparc_builtin_saveregs): Likewise. + + 2001-12-06 Alan Modra + + * config/rs6000/rs6000.c (rs6000_unique_section): Simplify and + correct code selecting section. + + Thu Dec 6 12:45:33 CET 2001 Jan Hubicka + + * final.c (count_basic_block, add_bb, add_bb_string): + Kill. + (end_final, final_start_function, final, final_scan_insn, + leaf_function_p): Kill BB profiler related code. + * flags.h (profile_block_flag): Kill. + * libgcc2.c (MACHINE_STATE_SAVE, MACHINE_STATE_RESTORE, + BB_BUCKETS, BBINBUFSIZE, bb_edge, bb_func_mode, bb_func, + __bb, bb_src, bb_dst, bb_tracefile, bb_hashbuckets, + bb_func_head, bb_callcount, bb_mode, bb_stack, bb_stacksize + reported, GOPENDECOMPRESS, GOPENCOMPRESS, gopen, gclose, + __bb_exit_trace_func, __bb_init_prg, __bb_trace_func, + __bb_trace_func_ret, __bb_init_file, __bb_trace_ret, + __bb_init_trace_func): Kill. + * toplev.c (profile_block_flag): Kill. + (indepdendent_decode_option, process_options): Kill -a related code. + * alpha.c (direct_call_operand): Likewise. + * arm.c (arm_expand_prologue, thumb_expand_prologue, + thumb_expand_epilogue): Likewise. + * c4x.c (c4x_expand_prologue, c4x_null_epilogue_p): Likewise. + * c4x.h (FUNCTION_BLOCK_PROFILER, BLOCK_PROFILER, + FUNCTION_BLOCK_PROFILER_EXIT, MACHINE_STATE_SAVE, + MACHINE_STATE_RESTORE): Kill. + * d30v.h (FUNCTION_BLOCK_PROFILER, BLOCK_PROFILER, + FUNCTION_BLOCK_PROFILER_EXIT, MACHINE_STATE_SAVE, + MACHINE_STATE_RESTORE): Kill. + * fr30.c (fr30_expand_prologue): Kill BB profiler related code. + * i386.c (ix86_can_use_return_insn_p, ix86_expand_prologue, + ix86_expand_epilogue, ix86_expand_epilogue): Kill BB profiler related + code. + (ix86_output_function_block_profiler, ix86_output_block_profiler): Kill. + * i386.h (FUNCTION_BLOCK_PROFILER, BLOCK_PROFILER, + FUNCTION_BLOCK_PROFILER_EXIT, MACHINE_STATE_SAVE, + MACHINE_STATE_RESTORE): Kill. + * fr30.c (fr30_expand_prologue): Kill BB profiler related code. + * i960.c (i960_output_function_prologue): Kill BB profiler related + code. + * ia64.c (ia64_compute_frame_size): Likewise. + * ia64.h (FUNCTION_BLOCK_PROFILER, BLOCK_PROFILER, + FUNCTION_BLOCK_PROFILER_EXIT, MACHINE_STATE_SAVE, + MACHINE_STATE_RESTORE): Kill. + * m32r.c (m32r_expand_prolofue): Kill BB profiler related code. + * m68hc11.h (FUNCTION_BLOCK_PROFILER, BLOCK_PROFILER, + FUNCTION_BLOCK_PROFILER_EXIT, MACHINE_STATE_SAVE, + MACHINE_STATE_RESTORE): Kill. + * m68k.c (m68k_output_function_epilogue): Kill BB profiler related code. + * m68k.h (FUNCTION_BLOCK_PROFILER, BLOCK_PROFILER, + FUNCTION_BLOCK_PROFILER_EXIT, MACHINE_STATE_SAVE, + MACHINE_STATE_RESTORE): Kill. + * m88k.c (output_options, m88k_layout_frame, m88k_expand_prologue): + Kill BB profiler related code. + * m88k.h (FUNCTION_BLOCK_PROFILER, BLOCK_PROFILER, + FUNCTION_BLOCK_PROFILER_EXIT, MACHINE_STATE_SAVE, + MACHINE_STATE_RESTORE): Kill. + * mips.c (mips_expand_prologue): Kill BB profiler related code. + * mmix.h (FUNCTION_BLOCK_PROFILER, BLOCK_PROFILER, + FUNCTION_BLOCK_PROFILER_EXIT, MACHINE_STATE_SAVE, + MACHINE_STATE_RESTORE): Kill. + * rs6000.c (rs6000_override_options): Kill BB profiler related code. + * s960.c (s390_function_prologue): Kill BB profiler related code. + * s960.h (FUNCTION_BLOCK_PROFILER, BLOCK_PROFILER, + FUNCTION_BLOCK_PROFILER_EXIT, MACHINE_STATE_SAVE, + MACHINE_STATE_RESTORE): Kill. + * linux-aout.h (MACHINE_STATE_SAVE, MACHINE_STATE_RESTORE): Kill. + * linux.h (MACHINE_STATE_SAVE, MACHINE_STATE_RESTORE): Kill. + * linux64.h (MACHINE_STATE_SAVE, MACHINE_STATE_RESTORE): Kill. + * sol2.h (MACHINE_STATE_SAVE, MACHINE_STATE_RESTORE): Kill. + * sparc.c (sparc_override_options, eligible_for_sibcall_delay, + sparc_nonflat_function_epilogue): Kill BB profiler related code. + (sparc_function_block_profiler, sparc_block_profiler, + sparc_function_block_profiler_exit): Kill. + * sparc.h (OVERRIDE_OPTIONS): Kill BB profiler related code. + (FUNCTION_BLOCK_PROFILER, BLOCK_PROFILER, + FUNCTION_BLOCK_PROFILER_EXIT, MACHINE_STATE_SAVE, + MACHINE_STATE_RESTORE): Kill. + * sun4o3.h (MACHINE_STATE_SAVE, MACHINE_STATE_RESTORE): Kill. + * sunos4.h (MACHINE_STATE_SAVE, MACHINE_STATE_RESTORE): Kill. + * stormy16.h (FUNCTION_BLOCK_PROFILER, BLOCK_PROFILER, + FUNCTION_BLOCK_PROFILER_EXIT, MACHINE_STATE_SAVE, + MACHINE_STATE_RESTORE): Kill. + * doc/invoke.texi: Kill documentation of -a and -ax. + * tm.texi (FUNCTION_BLOCK_PROFILER, BLOCK_PROFILER, + FUNCTION_BLOCK_PROFILER_EXIT, MACHINE_STATE_SAVE, + MACHINE_STATE_RESTORE): Kill. + + 2001-10-26 Steve Christiansen + + * doc/rtl.texi: Use a table to display RTL format characters. + + 2001-12-06 Bo Thorsen + + * config/i386/linux64.h (LINK_SPEC): Correct name of dynamic linker. + + Wed Dec 5 19:18:53 2001 Richard Kenner + + * function.c (keep_stack_depressed): Check global_live_at_start + of EXIT_BLOCK for temp register and verify it isn't in equiv_reg_src. + + 2001-12-05 David O'Brien + + * config.gcc (powerpc-*-freebsd*): Use the proper tmake_file files, + as set by the generic FreeBSD configure framework. + + 2001-12-04 Jason Merrill + + * langhooks.h (struct lang_hooks_for_tree_inlining): Add + start_inlining, end_inlining. + * tree-inline.c (expand_call_inline): Call them. + * langhooks-def.h (LANG_HOOKS_TREE_INLINING_START_INLINING): Define. + (LANG_HOOKS_TREE_INLINING_END_INLINING): Define. + (LANG_HOOKS_TREE_INLINING_INITIALIZER): Add them. + * langhooks.c (lhd_tree_inlining_start_inlining): New fn. + (lhd_tree_inlining_end_inlining): New fn. + + 2001-12-05 Neil Booth + + * c-common.c (shadow_warning): New function, moved from cp/decl.c. + * c-common.h (shadow_warning): New. + * c-decl.c: Include c-common.h. + (warn_if_shadowing): New, broken out of pushdecl. + (pushdecl): Use warn_if_shadowing. + (store_parm_decls): Prevent duplicate -Wshadow warnings. + + Wed Dec 5 17:59:19 2001 Douglas B. Rupp + + * config/alpha/vms.h (SIZE_TYPE, PTRDIFF_TYPE): Remove, were disabled. + (DOLLARS_IN_IDENTIFIERS, LINK_SPEC): Remove duplicate. + (LIB_SPEC): Remove. + + Wed Dec 5 16:03:04 2001 Richard Kenner + + * doc/c-tree.texi (RECORD_TYPE, UNION_TYPE): Expand on definition. + (QUAL_UNION_TYPE): New type. + + * varasm.c (output_constant, case ERROR_MARK): New case. + + * attribs.c (handle_no_check_memory_usage_atribute): Deleted. + (c_com): Delete its reference. + * builtins.c: Delete memory checking code. + * calls.c, expr.c, function.c, stmt.c: Likewise. + * builtins.c (expand_builtin_arg_info): Remove reference to + EXPAND_MEMORY_USE_* modifiers. + * explow.c (expr_size): Likewise. + * expr.c (expand_expr, expand_increment): Likewise. + * expr.h (ARGS_SIZE_RTX): Likewise. + * function.c (assign_parms, expand_pending_sizeso): Likewise. + * c-decl.c (duplicate_decls): Don't handle DECL_NO_CHECK_MEMORY_USAGE. + * expr.c (in_check_memory_usage): Delete. + (get_push_address, get_memory_usage_from_modifier): Delete. + (expand_assigment): Use EXPAND_WRITE on destination. + (expand_expr): Delete ro_modifier. + * expr.h (expand_modifier): Delete EXPAND_MEMORY_* entries and + add EXPAND_WRITE. + (memory_use_mode): Delete. + * flags.h (flag_check_memory_usage): Deleted. + (flag_prefix_function_name): Likewise. + * function.c (expand_function_start): Don't set + current_function_check_memory_usage. + * function.h (check_memory_usage): Delete. + * libfuncs.h, optabs.c: Delete chkr_* stuff. + * stmt.c (expand_asm_opernd): Change EXPAND_MEMORY_USE_WO to + EXPAND_WRITE. + * toplev.c (flag_check_memory_usage): Deleted. + (flag_prefix_function_name): Likewise. + (f_options, process_options): Delete references to above. + * tree.h (DECL_NO_CHECK_MEMORY_USAGE): Deleted. + * varasm.c (CHKR_PREFIX): Deleted. + (make_decl_rtl): Remove flag_prefix_function_name handling. + (assemble_name): Likewise. + * doc/extend.texi: Remove no_check_memory_usage attribute. + * doc/invoke.texi: Remove -fcheck-memory-usage + and -fprefix-function-name. + + 2001-12-05 Andreas Schwab + + * Makefile.in (STMP_FIXPROTO, STMP_FIXINC): Use substituted values + from autoconf. + + 2001-12-05 Nick Clifton + + * config.gcc: Include arm/xscale-coff.h before arm/arm.h. + + 2001-12-05 William Cohen + + * config/arm/arm.h (THUMB_FUNCTION_PROFILER): Correct typo in + instruction. + + 2001-12-05 Daniel Berlin + + * config/rs6000/rs6000.h (enum rs6000_builtins): Add more altivec + builtins. + + * config/rs6000/rs6000.md: Modeling of 7450 altivec changed to + better reflect reality (change from Apple's tree). + Add more of altivec instructions. + Add ftruncv4sf2 pattern. + Remove more unspecs (vector merge instructions, etc). + + * config/rs6000/rs6000.c (bdesc_3arg): New, for 3 argument altivec + builtins. + (bdesc_1arg): New, for 1 argument altivec builtins. + (altivec_expand_builtin): Handle unary and ternary ops. + (altivec_init_builtins): Ditto. + + Wed Dec 5 09:33:39 2001 Richard Kenner + + * config/alpha/vms.h (ADA_LONG_TYPE_SIZE): New macro. + * doc/tm.texi (ADA_LONG_TYPE_SIZE): Document it. + + 2001-12-05 Jakub Jelinek + + * gcse.c (store_killed_in_insn): Consider pure calls + as potential store killers in addition to normal calls. + + 2001-12-05 Jakub Jelinek + + * expr.c (expand_expr): When checking promoted value, use + DECL_MODE (exp) and not mode. + + 2001-12-05 Jakub Jelinek + + * c-typeck.c (output_init_element): Call digest_init + just once, not in each if branch and check its return value for + error_mark_node. + + 2001-12-05 Jakub Jelinek + + * c-decl.c (pushdecl): Only increase n_incomplete if pushed decl's + type is RECORD_TYPE, UNION_TYPE or ARRAY_TYPE thereof. + (finish_struct): Break the loop if n_incomplete went to 0. + For ARRAY_TYPE, if it is not TYPE_DECL, layout the decl too. + + Wed Dec 5 07:41:13 2001 Douglas B. Rupp + + * config/alpha/alpha.c (alpha_va_start): Update VMS case. + + Wed Dec 5 07:27:42 2001 Richard Kenner + Douglas B. Rupp + + * vmsdbg.h, vmsdbgout.c: Add documentation and minor cleanups. + * doc/invoke.texi: Add -gvms. + * doc/passes.texi: Add mention of vmsdbgout.c. + * doc/tm.texi: Document VMS debugging output. + + Wed Dec 5 06:26:27 2001 Richard Kenner + + * function.h (tree, rtx): Remove no-longer-needed definitions. + + * function.c (keep_stack_depressed): Refine check for register + clobbered over call. + + * expr.c (store_expr): When copying string constant into array, + use functions that update memrefs instead of computations on + addresses to better track MEMs. Also properly handle 32/64 pointers. + (expand_expr): Use TARGET even if not reg for multi-word CONSTRUCTOR. + (expand_expr, case CONSTRUCTOR): Fix errors in parms to assign_temp. + + * emit-rtl.c (component_ref_for_mem_expr): Try harder to find decl + underneath COMPONENT_REFs. + (set_mem_attributes): Also strip VIEW_CONVERT_EXPR. + + 2001-12-05 Neil Booth + + * toplev.c (display_target_options): Don't print twice. + + Wed Dec 5 00:42:16 EST 2001 John Wehle (john@feith.com) + + * emit-rtl.c (set_unique_reg_note): Don't set + a REG_EQUAL or REG_EQUIV note if multiple sets + are present. + + 2001-12-04 John David Anglin + + * cfgrtl.c (verify_flow_info): Allow jump table data in fallthru if + CASE_DROPS_THROUGH. + + 2001-12-04 Andrew MacLeod + + * rtl.h (initialize_uninitialized_subregs): New prototype. + * toplev.c (rest_of_compilation): Call initialize_uninitialized_subregs + when optimization is on. + * flow.c (find_regno_partial): Find subregs within an expression. + (initialize_uninitialized_subregs): Initialize live on entry registers + which are used in subreg expressions. + + 2001-12-04 Phil Edwards + + * Makefile.in: Add INSTALL_SCRIPT using INSTALL definition. + + 2001-12-04 DJ Delorie + + * fixinc/fixincl.c (initialize): Avoid problemsome macro + parameter names (PR 3388). + + 2001-12-05 Alan Modra + + * config/rs6000/rs6000.c (rs6000_legitimize_address): Fix typo. + * config/rs6000/rs6000.h (LEGITIMATE_LO_SUM_ADDRESS_P): Here too. + + 2001-12-04 Joseph S. Myers + + * c-common.def (COMPOUND_LITERAL_EXPR): New. + * c-common.c (c_expand_expr): Handle COMPOUND_LITERAL_EXPR. + (c_staticp): New function. + * c-common.h (COMPOUND_LITERAL_EXPR_DECL): New. + (c_staticp): Declare. + * c-typeck.c (default_function_array_conversion, build_unary_op): + Don't handle CONSTRUCTOR specially. + (lvalue_p, mark_addressable): Handle COMPOUND_LITERAL_EXPR. + * c-decl.c (build_compound_literal): New function. + * c-tree.h (build_compound_literal): Declare. + * c-parse.in (primary): Use build_compound_literal. + * c-lang.c (LANG_HOOKS_STATICP): Define. + * objc/objc-lang.c (LANG_HOOKS_STATICP): Likewise. + * doc/c-tree.texi: Document COMPOUND_LITERAL_EXPR. + * doc/extend.texi: Update documentation of compound literals. + Fixes PR c/4787. + + 2001-12-04 Joseph S. Myers + + * langhooks.h (struct lang_hooks): Add staticp. + * langhooks-def.h (lhd_staticp, LANG_HOOKS_STATICP): New. + (LANG_HOOKS_INITIALIZER): Add LANG_HOOKS_STATICP. + * langhooks.c (lhd_staticp): New function. + * tree.c (staticp): Call lang_hooks.staticp for language-specific + tree codes. + + 2001-12-04 Neil Booth + + * cppspec.c (lang_specific_driver): Set is_cpp_driver. + * gcc.c (process_command): Ensure the cpp driver sees + --help and --target-help, and that the help is printed + exactly once. + + 2001-12-04 David Edelsohn + + * config/elfos.h (ASM_OUTPUT_INTERNAL_LABEL): Display count unsigned. + + 2001-12-04 Hans-Peter Nilsson + + * config/cris/cris.h (OPTIMIZATION_OPTIONS): Don't unset + flag_strict_aliasing. Use separate assignment statements. + + 2001-12-04 Zack Weinberg + + * build-make, cross-make: Delete file. + * configure.in: Set and substitute CROSS, ALL, + SYSTEM_HEADER_DIR, HOST_PREFIX, HOST_PREFIX_1, HOST_CC, + HOST_CFLAGS, STMP_FIXINC, and STMP_FIXPROTO depending on + whether build == host and host == target. Do not + AC_SUBST_FILE build_overrides or cross_overrides. Do not + AC_SUBST cross_defines or extra_c_flags. + * Makefile.in (NATIVE_SYSTEM_HEADER_DIR): New. + (SYSTEM_HEADER_DIR, HOST_PREFIX, HOST_CC, HOST_PREFIX, + HOST_PREFIX_1, HOST_CFLAGS, ALL, INTERNAL_CFLAGS): Set + partially or completely with autoconf-substituted @variable@ + notation. + (INSTALL_TARGET, @cross_defines@, @cross_overrides@, + @build_overrides@, @extra_c_flags@, all.build, install-build, + install-cross-rest, install-float-h-cross): Deleted. + (install-normal): Rename to install. Delete old "install" + indirection rule. + + 2001-12-04 Andrew MacLeod + + * stmt.c (expand_return): Clear destination instead of clobbering it + when setting a return value via bitsets. + + 2001-12-04 Alexandre Oliva + + * tree.c (get_callee_fndecl): Only use DECL_ABSTRACT_ORIGIN if + it has DECL_SAVED_TREE. + + * c-decl.c (duplicate_decls): Revert rth's patch. If newdecl + is in a different binding level, get its abstract origin to be + olddecl. + * tree-inline.c (expand_call_inline): Move DECL_INITIAL sanity + check earlier. + * tree.c (get_callee_fndecl): Follow DECL_ABSTRACT_ORIGIN if + DECL_INITIAL is NULL. + + 2001-12-04 Jakub Jelinek + + * flow.c (ior_reg_cond): Return NULL if ! add and rtx wasn't optimized. + Return correct value if one of the subexpressions was optimized to + 0 resp. 1. Optimize (x | A) | x and (x & A) | x. + (and_reg_cond): Similarly. + + 2001-12-04 Jakub Jelinek + + * function.c (assign_parms): Set last_named only for last named + argument. + + 2001-12-04 Joseph S. Myers + + * doc/install.texi: Use the GFDL. Include years from old install + manual in copyright notice. Include copyright and GFDL notice on + HTML index page. Include usual footer on testing.html. + * doc/install.texi2html: Build gfdl.html. Use -I + $SOURCEDIR/include. + * doc/include/fdl.texi: Adapt for use in the install manual. + + 2001-12-04 Joseph S. Myers + + * doc/install.texi: Document that installed native compiler for + building cross compilers should be GCC 2.95 or later. + + 2001-12-03 Eric Christopher + + * config/mips/mips.h (CALL_REALLY_USED_REGISTERS): New macro. + * config/mips/mips.md: Check TARGET_DEBUG_D_MODE before split + patterns. + + 2001-12-03 Janis Johnson + + * rtl.def (PREFETCH): New rtx code. + * doc/rtl.texi (PREFETCH): Add documentation. + * function.c (instantiate_virtual_regs_1): Handle PREFETCH rtx. + * rtlanal.c (reg_referenced_p): Ditto. + * sched-vis.c (print_exp): Ditto. + * ssa-dce.c (find_inherently_necessary): Ditto. + + * config/ia64/ia64.h (SIMULTANEOUS PREFETCHES): Define. + (PREFETCH_BLOCK): Define. + * config/ia64/ia64.md (itanium_class): Add lfetch. + (prefetch, prefetch_internal): New. + + * builtin-types.def (BT_FN_VOID_PTR_INT_INT): New. + * builtins.def (BUILT_IN_PREFETCH): New. + * builtins.c (expand_builtin_expect): New. + (expand_builtin): Call it. + * doc/extend.texi: Document __builtin_prefetch. + + * config/i386/i386.md (prefetch): Rename as prefetch_sse to avoid + conflicts with new generic prefetch functionality. + * config/i386/i386.c (ix86_expand_builtin): Use new name for + prefetch_sse. + + 2001-12-02 Ziemowit Laski + + * objc/Make-lang.in: Update copyright. + (OBJC_OBJS): Add objc-lang.o. + (objc-lang.o): New rule. + * objc/config-lang.in: Fix file description and update + copyright. + * objc/objc-act.c: Do not include langhooks.h and + langhooks-def.h + (lang_hooks): Move (along with LANG_HOOKS...) to objc-lang.c. + (objc_post_options): Move to objc-lang.c. + (objc_init_options): Move to objc-lang.c. + (objc_init): Make non-static. + (objc_decode_option): Make non-static. + (HASHFUNCTION): Remove macro. + (hash_func): New function. + (hash_enter): Replace HASHFUNCTION with hash_func. + (hash_lookup): Replace HASHFUNCTION with hash_func. + (maybe_objc_tree_codes): New function. + (init_objc): Move ObjC tree code initialization to + maybe_objc_tree_codes(). + * objc/objc-act.h (GCC_OBJC_ACT_H): New include guard. + (objc_init): New public prototype. + (objc_decode_option): New public prototype. + (maybe_add_objc_tree_codes): New public prototype. + * objc/objc-lang.c: New file. + (lang_hooks): Moved from objc-act.c. + (objc_post_options): Moved from objc-act.c. + (objc_init_options): Moved from objc-act.c. + + 2001-12-03 Geoff Keating + + * emit-rtl.c (gen_lowpart_common): Avoid unwanted sign-extension + of array elements. + + 2001-12-03 Neil Booth + + PR c/4988 + * gcc.c (process_command): Don't add a preprocessor option for + --help and --target-help; cc1 is enough. + + 2001-12-03 Neil Booth + + * c-decl.c (grokdeclarator): Use ISO word. + * cppinit.c: Remove leading capital from diagnostic messages, as + per GNU coding standards. + * emit-rtl.c: Similarly. + * final.c: Similarly. + * gcc.c: Similarly. + * tradcpp.c: Similarly. + * config/arm/arm.c: Similarly. + * config/arm/arm.h: Similarly. + * config/avr/avr.c: Similarly. + * config/avr/avr.h: Similarly. + * config/c4x/c4x.c: Similarly. + * config/cris/cris.c: Similarly. + * config/cris/cris.h: Similarly. + * config/d30v/d30v.c: Similarly. + * config/dsp16xx/dsp16xx.c: Similarly. + * config/dsp16xx/dsp16xx.h: Similarly. + * config/h8300/h8300.c: Similarly. + * config/i386/i386.c: Similarly. + * config/i386/xm-djgpp.h: Similarly. + * config/i960/i960.h: Similarly. + * config/m32r/m32r.c: Similarly. + * config/m68hc11/m68hc11.c: Similarly. + * config/m88k/m88k.c: Similarly. + * config/m88k/m88k.h: Similarly. + * config/mcore/mcore.c: Similarly. + * config/mcore/mcore.h: Similarly. + * config/mips/mips.c: Similarly. + * config/mmix/mmix.c: Similarly. + * config/pa/pa.c: Similarly. + * config/rs6000/rs6000.c: Similarly. + * config/rs6000/sysv4.h: Similarly. + * config/s390/s390.c: Similarly. + * config/sparc/sparc.c: Similarly. + * config/v850/v850-c.c: Similarly. + * config/v850/v850.c: Similarly. + + 2001-12-03 Zack Weinberg + + * rs6000.h (RETURN_IN_MEMORY): Cast result of + int_size_in_bytes to unsigned HOST_WIDEST_INT so that -1 > 8. + + Mon Dec 3 09:18:34 2001 Jeffrey A Law (law@cygnus.com) + + * mn10200.md (negsf2): Use -0x8000 instead of 0x8000 for + bit twiddling constant. + + Mon Dec 3 16:16:37 CET 2001 Jan Hubicka + + * gcse.c (delete_null_pointer_checks_1): Do not use delete_list; + call purge_dead_edges after removing. + (delete_null_pointer_checks): Do not handle delete_list. + + * cfgbuild.c (inside_basic_block_p, control_flow_insn_p): Break out from ... + (count_basic_blocks): ... here. + (find_basic_blocks, find_bb_boundaries): Cleanup. + + * stor-layout.c (fixup_signed_type, fixup_unsigned_type): Avoid + overflow for types greater then 2 * HOST_WIDE_INT. + + * reload.c (find_reloads): Update the duplicates after swapingg. + + Mon Dec 3 13:52:19 CET 2001 Jan Hubicka + + * i386.md (movabsqi*): Use 'b' prefix instead of 'q'. + + 2001-12-02 Zack Weinberg + + * config/rs6000/rs6000.h (MASK_ALTIVEC_ABI, + MASK_LONG_DOUBLE_128): Delete. + (MASK_AIX_STRUCT_RET, MASK_AIX_STRUCT_RET_SET, + TARGET_AIX_STRUCT_RET): New flags. + (TARGET_SWITCHES): Remove entries for -mlong-double-128 and + -mlong-double-64. Add entries for -m(no-)aix-struct-return + and -m(no-)svr4-struct-return. + (TARGET_OPTIONS): Add entry for -mlong-double-. + (rs6000_long_double_size_string, rs6000_long_double_type_size, + rs6000_altivec_abi): Declare. + (TARGET_LONG_DOUBLE_128, TARGET_ALTIVEC_ABI, + LONG_DOUBLE_TYPE_SIZE): Change definitions to match. + (RETURN_IN_MEMORY): If !TARGET_AIX_STRUCT_RET, return + structures of size <= 8 bytes in registers. + (PRINT_OPERAND_PUNCT_VALID_P): Take out '$' and '*'. + + * config/rs6000/rs6000.c (rs6000_long_double_size_string, + rs6000_long_double_type_size, rs6000_altivec_abi): New + globals. + (rs6000_override_options): Set rs6000_long_double_type_size + from rs6000_long_double_size_string, if nonzero. Set the + MASK_AIX_STRUCT_RET bit in target_flags from DEFAULT_ABI, if + not already set. + (rs6000_parse_abi_options): Set rs6000_altivec_abi, not a + target_flags bit. + (rs6000_init_builtins): This hook now takes no arguments. + + * config/rs6000/netbsd.h, config/rs6000/linux.h: Define + DRAFT_V4_STRUCT_RET to 1. + + 2001-12-03 Joseph S. Myers + + * c-typeck.c (really_start_incremental_init, push_init_level): + Avoid constructor_max_index being other than an INTEGER_CST. + + 2001-12-02 David Edelsohn + + * config/rs6000/xcoff.h (ASM_OUTPUT_INTERNAL_LABEL): Display count + unsigned. + (ASM_GENERATE_INTERNAL_LABEL): Same. + (UNIQUE_SECTION): Fix typo. + + 2001-12-02 Richard Henderson + + * c-decl.c (duplicate_decls): Conditionalize DECL_SAVED_TREE copy. + + 2001-12-02 Richard Henderson + + * rtl.h (mem_attrs): Rename decl to expr; adjust all users. + (MEM_EXPR): Rename from MEM_DECL; adjust all users. + * emit-rtl.c (set_mem_expr): Rename from set_mem_decl. + * expr.h, final.c, reload1.c: Adjust users. + + * alias.c (nonoverlapping_component_refs_p): New. + (decl_for_component_ref, adjust_offset_for_component_ref): New. + (nonoverlapping_memrefs_p): Use them. + * emit-rtl.c (component_ref_for_mem_expr): New. + (set_mem_attributes): Use it. + (set_mem_offset): New. + * expr.c (expand_assignment): Call set_mem_attributes for + inner references; adjust the memory offset as needed. + * print-rtl.c (print_mem_expr): New. + (print_rtx): Use it. + + Sun Dec 2 09:22:25 2001 Douglas B. Rupp + + * config/x-interix3 (SYSTEM_HEADER_DIR): Put back default. + + * config/alpha/vms.h (VMS_DEBUGGING_INFO): New macro. + (PREFERRED_DEBUGGING_TYPE): Define as VMS_AND_DWARF2_DEBUG. + (ASM_SPEC): Don't redefine. + (OPTIMIZATION_OPTIONS, OVERRIDE_OPTIONS, LINK_SPEC): Define. + * config/alpha/t-vms (EXTRA_PARTS): Use; add rule for vms-dwarf2.asm. + * config/alpha/vms-dwarf2.asm: New file. + + * Makefile.in (OBJS): Add vmsdbgout.c and its rule. + * c-lex.c (init_c_lex): Test for VMS_AND_DWARF2_DEBUG. + * debug.h (gcc_debug_hooks): Add vmsdbg_debug_hooks. + (vmsdbgout_after_prologue): New declaration. + * defaults.h (VMS_DEBUGGING_INFO): Add to PREFERRED_DEBUGGING_TYPE. + * dwarf2.h (dwarf_attribute): New DW_AT_VMS_rtnbeg_pd_address. + * dwarf2out.c (dwarf2out_do_frame): Test for VMS_AND_DWARF2_DEBUG. + (dwarf2out_frame_finish): Test for VMS_AND_DWARF2_DEBUG. + (dwarf_attr_name): Use DW_AT_VMS_rtnbeg_pd_address. + (add_name_and_src_coords_attributes): Test VMS_DEBUGGING_INFO + * final.c (final_start_function): Test for VMS_AND_DWARF2_DEBUG. + Test VMS_DEBUGGING_INFO. + (final_end_function): Test for VMS_AND_DWARF2_DEBUG. + (final_scan_insn): Test for VMS_AND_DWARF2_DEBUG and VMS_DEBUG. + * flags.h (debug_info_type): Add VMS_DEBUG and VMS_AND_DWARF2_DEBUG. + * toplev.c (compile_file): Test VMS_DEBUGGING_INFO, VMS_DEBUG, and + VMS_AND_DWARF2_DEBUG. + (rest_of_type_compilation): Test for VMS_AND_DWARF2_DEBUG. + (decode_g_option): Add "vms" to debug_type_names. + (process_options): Set vmsdbg_debug_hooks if -gvms. + (lang_independent_init): Emit line number for VMS unless -g0. + * tree.c: (build_complex_type): Test for VMS_AND_DWARF2_DEBUG. + * vmsdbg.h, vmsdbgout.c: New files. + + Sun Dec 2 09:03:06 2001 Richard Kenner + + * cfgbuild.c (SET_STATE): Add cast to eliminate warning.a + + 2001-12-02 Kaveh R. Ghazi + + * cfgrtl.c (purge_all_dead_edges): Initialize variable. + * dwarf2out.c (is_cxx): Prototype. + * local-alloc.c (block_alloc): Avoid 'unsigned>=0 is always true' + warning. + * objc/objc-act.c (defer_fn): Avoid signed/unsigned warning. + + Sun Dec 2 07:12:30 2001 Richard Kenner + + * libgcc2.c (__bb_exit_func): Fix line wrap problems. + + 2001-12-02 Geoff Keating + + * config/rs6000/rs6000.h (SLOW_UNALIGNED_ACCESS): Simplify. + * config/rs6000/rs6000.c (rs6000_emit_move): Use adjust_address + rather than simplify_subreg. Check for volatile-ness. Check that + we're not splitting one slow operation into two slow operations. + + 2001-12-02 David Edelsohn + + * emit-rtl.c (gen_lowpart_common): Cast array element to HOST_WIDE_INT + before shifting. + + 2001-12-02 Neil Booth + + * c-decl.c (duplicate_decls, push_parm_decl): Remove leading + capital from diagnostics. + * c-lex.c (cb_file_change): Similarly. + * c-parse.in : Similarly. + * cfgrtl.c (verify_flow_info): Similarly. + * collect2.c: Similarly. + * cppfiles.c (find_include_file): Similarly. + * cppinit.c (cpp_handle_option): Similarly. + * cpplex.c (cpp_spell_token): Similarly. + * cppmain.c (do_preprocessing): Similarly. + * gcc.c (translate_options, process_command, do_spec1, + main, pfatal_execute): Similarly. + * genattr.c (main): Similarly. + * genattrtab.c (check_attr_test, operate_exp, simplify_test_exp, + write_test_expr, main): Similarly. + * gencodes.c (main): Similarly. + * genconfig.c (main): Similarly. + * genconstants.c (main): Similarly. + * genemit.c (main): Similarly. + * genextract.c (main): Similarly. + * genflags.c (main): Similarly. + * genopinit.c (main): Similarly. + * genoutput.c (process_template, main): Similarly. + * genpeep.c (main): Similarly. + * genrecog.c (main): Similarly. + * gensupport.c (is_predicable, identify_predicable_attribute, + alter_predicate_for_insn, init_md_reader_args, main): Similarly. + * ggc-page.c (alloc_anon): Similarly. + * mips-tfile.c (add_string, add_procedure, add_file, read_line, + parse_begin, parse_bend, parse_def, parse_end, parse_file, + parse_stabs_common, parse_stabs, write_varray, write_object, + read_seek, copy_object, main, error): Similarly. + * profile.c (compute_branch_probabilities): Similarly. + * reg-stack.c (check_asm_stack_operands): Similarly. + * reload.c (find_reloads): Similarly. + * reload1.c (spill_failure, failed_reload): Similarly. + * rtl-error.c (_fatal_insn_not_found): Similarly. + * toplev.c (read_integral_parameter, crash_signal, + decode_f_option, set_target_switch, parse_options_and_default_flags) + : Similarly. + * tradcif.y (parse_number, yylex): Similarly. + * tradcpp.c (main, fancy_abort): Similarly. + * tree.c (tree_check_failed): Similarly. + * varray.c (varray_check_failed): Similarly. + * xcoffout.c (xcoff_output_standard_types): Similarly. + objc: + * objc-act.c (get_object_ref, lookup_and_install_protocols, + build_objc_string_object, objc_declare_alias, build_ivar_chain, + finish_message_expr, build_protocol_expr, is_public, + start_class): Similarly. + + 2001-12-01 Neil Booth + + * c-decl.c (duplicate_decls, parmlist_tags_warning): Remove + trailing period from diagnostics. + * c-lex.c (cb_file_change): Similarly. + * cppmacro.c (check_trad_stringification): Similarly. + * gcc.c (do_spec_1): Similarly. + * genattr.c (main): Similarly. + * genattrtab.c (main, operate_exp, make_length_attrs): Similarly. + * gencodes.c (main): Similarly. + * genconfig.c (main): Similarly. + * genconstants.c (main): Similarly. + * genemit.c (main): Similarly. + * genextract.c (main): Similarly. + * genopinit.c (main): Similarly. + * genoutput.c (main): Similarly. + * genpeep.c (main): Similarly. + * genrecog.c (main): Similarly. + * mips-tfile.c (add_file, error): Similarly. + * profile.c (init_branch_prob): Similarly. + * reload1.c (spill_failure): Similarly. + * stmt.c (parse_output_constraint): Similarly. + * varasm.c (assemble_variable): Similarly. + + 2001-12-01 Kaveh R. Ghazi + + * m68k.c (init_FPA_table): Provide static prototype. + * mips/abi64.h (mips_function_value): Move prototype to ... + * mips-protos.h (mips_function_value): ... here. + * mips.c: Include halfpic.h. + * output.h (rdata_section): Prototype. + + * h8300.c (h8300_asm_named_section): Wrap with !OBJECT_FORMAT_ELF. + * m88k.c (m88k_svr3_asm_out_constructor, + m88k_svr3_asm_out_destructor): Wrap with CTOR_LIST_BEGIN && + !OBJECT_FORMAT_ELF. + * mcore.c (mcore_asm_named_section): Wrap with OBJECT_FORMAT_ELF. + * sh.c (sh_asm_named_section): Wrap with !OBJECT_FORMAT_ELF. + * sparc.c (sparc_elf_asm_named_section): Wrap with OBJECT_FORMAT_ELF. + + 2001-12-01 Geoff Keating + + * config/rs6000/rs6000.h (LEGITIMATE_LO_SUM_ADDRESS_P): Complex + LO_SUM addresses less than word size are not legitimate, + because they lead to invalid SUBREGs. + * config/rs6000/rs6000.c (rs6000_legitimize_address): Likewise. + + 2001-12-01 Olivier Hainque + + * unroll.c (loop_iterations): Give up on jumps with null JUMP_LABEL + while scanning for multiple back edges. + + 2001-12-01 Franz Sirl + + * ginclude/ppc-asm.h (JUMP_TARGET): New macro. + * config/rs6000/tramp.asm: Use it. + + 2001-12-01 Zack Weinberg + + * gencheck.c, gengenrtl.c: Don't define xmalloc. + * gensupport.c: Don't define xstrdup, xcalloc, xrealloc, + xmalloc. + + 2001-11-30 John David Anglin + + * pa.c (output_ascii): Cast `p' to unsigned char. + + 2001-11-30 Daniel Berlin + + * config/rs6000/rs6000.c (altivec_expand_builtin): add + ALTIVEC_BUILTIN_LD_INTERNAL_4sf and ALTIVEC_BUILTIN_ST_INTERNAL_4sf, + *_16qi,_8hi, rename existing V4SI ones to *_4si. + (altivec_init_builtins): Ditto. + (bdesc_2arg): Rename CODE_FOR_* to match changes in MD file. + + * config/rs6000/rs6000.md: Add attribute types vecsimple, + veccomplex, vecfloat, and vecperm, for altivec instructions. + Modify altivec patterns to use appropriate attribute type. + Modify altivec patterns to match RTL operations where appropriate + (IE no unspec where we can avoid it). + Add vector unit scheduling for ppc7450. + Rename patterns to what they are where appropriate + (altivec_vaddfp->addv4sf3, etc) + + * config/rs6000/rs6000.h (enum rs6000_builtins): Change VRS->VSR. + Pass -mppc, and define _ARCH_PPC, if -mcpu=7450 is used. + + * config/rs6000/sysv4.h: Add -mcpu=7450. + + * testsuite/gcc.dg/altivec-1.c: Update test to take into account renamed + _builtin_altivec_ld_interal function. + + 2001-11-30 Kaveh R. Ghazi + + * configure.in (AC_CHECK_FUNCS): Delete strtoul, bsearch, popen, + strchr, strrchr, isascii, gettimeofday. + * config.in, configure: Regenerate. + + 2001-11-30 Zoltan Hidvegi + + * unroll.c (unroll_loop): Correct special exit cases. + + 2001-11-30 Stephane Carrez + + * config/sparc/sparc.c (DF_MODES_NO_S): Fix pr/3623, define to + accept DFmode and DImode only. + + 2001-11-30 Aldy Hernandez + + * config/rs6000/rs6000.h (STARTING_FRAME_OFFSET): Adjust for altivec. + (STACK_DYNAMIC_OFFSET): Same. + + 2001-11-30 Richard Henderson + + * c-decl.c (duplicate_decls): Copy DECL_SAVED_TREE. + + 2001-11-30 Aldy Hernandez + + * config/rs6000/rs6000.h (CALL_REALLY_USED_REGISTERS): New. + (CONDITIONAL_REGISTER_USAGE): Set call_really_used_registers to + the values in call_used_registers. + + Fri Nov 30 12:48:26 2001 Jeffrey A Law (law@cygnus.com) + + * gthr-dce.h: If _DCE_THREADS is not defined, then just include + gthr-single. + + 2001-11-30 Jason Merrill + + * dwarf2out.c (is_cxx): New fn. + (add_data_member_location_attribute): Check it. + * dbxout.c (dbxout_type): Only look at BINFO_VPTR_FIELD for C++. + + Fri Nov 30 08:26:57 2001 Richard Kenner + + * dwarf2asm.c (dw2_asm_output_encoded_addr_rtx): Handle const1_rtx. + + 2001-11-30 Daniel Berlin + + * genopinit.c (gen_insn): Handle MODE_VECTOR_INT and + MODE_VECTOR_FLOAT as allowed. + + 2001-11-29 Zack Weinberg + + Purge cruft now we have build libiberty. + + * Makefile.in (OBSTACK, VFPRINTF, DOPRINT, STRSTR, + HOST_OBSTACK, HOST_VFPRINTF, HOST_DOPRINT, HOST_STRSTR, + USE_HOST_OBSTACK, USE_HOST_VFPRINTF, USE_HOST_DOPRINT, + USE_HOST_STRSTR): Delete variables. + (vfprintf.o, doprint.o, strstr.o, splay-tree.o, obstack.o, + hashtab.o, safe-ctype.o, $(HOST_PREFIX_1)obstack.o, + $(HOST_PREFIX_1)vfprintf.o, $(HOST_PREFIX_1)doprint.o, + $(HOST_PREFIX_1)strstr.o), $(HOST_PREFIX_1)): Delete rules. + (LIBIBERTY, BUILD_LIBIBERTY): New variables. + (LIBDEPS): Now just $(INTLDEPS) $(LIBIBERTY). + (LIBS): Now just $(INTLLIBS) @LIBS@ $(LIBIBERTY). + (HOST_LIBDEPS): Now just $(BUILD_LIBIBERTY). + (HOST_LIBS): Ditto. + (HOST_RTL): Remove hashtab.o safe-ctype.o. + (OBJS): Remove splay-tree.o. + (gen-protos): Depend on $(HOST_LIBS), not ../libiberty/libiberty.a. + (distclean): No need to delete splay-tree.c obstack.c + hashtab.c safe-ctype.c. + (mostlyclean): Delete build copies of print-rtl.c bitmap.c + errors.c ggc-none.c (all prefixed with $(HOST_PREFIX_1). + * aclocal.m4 (gcc_AC_FUNC_VFPRINTF_DOPRNT, gcc_AC_FUNC_STRSTR): + Delete. + * configure.in: Don't use them. + Set and substitute @FORBUILD@. + * config.in, configure: Regenerate. + * doprint.c: Move to libiberty/_doprnt.c. + * doc/configterms.texi: Document that libiberty is now built + up to three times. Fix typo. + + 2001-11-30 Jason Merrill + + * dwarf2out.c (add_data_member_location_attribute): Do the + right thing for virtual bases. + * dbxout.c (dbxout_type): For a virtual base, print the offset + within the vtable. + + 2001-11-29 Zoltan Hidvegi + + * doloop.c (doloop_valid_p): Check for LTU and GTU as well. + + 2001-11-29 Aldy Hernandez + + * config/rs6000/rs6000.c (function_arg): Unnamed vector arguments + go in memory. + Remove unused attribute for named. + + 2001-11-29 Kaveh R. Ghazi + + * genattrtab.c (attr_rtx_1): New function containing the + majority of `attr_rtx'. Move variable declarations into the + scope where they are used. Eliminate unnecessary gotos. + (attr_rtx): Now just a wrapper for `attr_rtx_1' using VA_OPEN, + VA_FIXEDARG, and VA_CLOSE. + + 2001-11-30 Hans-Peter Nilsson + + * config/cris/cris.c (cris_notice_update_cc): Check first + destination also against overlap with cc_status.value2 and second + destination against overlap with cc_status.value1. For overlaps, + clear overlapped value, don't just CC_STATUS_INIT. + + * config/cris/cris.h (EXTRA_CONSTRAINT_T): Fix spacing and FIXME. + Fix typo in comment. + (LINK_SPEC): Remove whitespace at end of line. + + 2001-11-29 Jakub Jelinek + + * c-lex.c (init_c_lex): Canonicalize "-" filename to "". + + 2001-11-29 Jakub Jelinek + + * gcc.c (ASM_DEBUG_SPEC): Only check HAVE_AS_G*_DEBUG_FLAG + macros for the supported debugging types. + + 2001-11-29 Craig Rodrigues + + PR other/4932 + * config/i386/i386.c (print_operand): Verify that the + argument to %c is a constant and not a conditional which + needs to be reversed. + + Thu Nov 29 11:12:59 2001 Geoffrey Keating (geoffk@redhat.com) + + * emit-rtl.c (gen_lowpart_common): Fix conversion of + REAL_VALUE_TYPEs to an array of target integers. Fix extraction + of low part of those arrays for 32bit and 64bit hosts. + + 2001-11-29 Kaveh R. Ghazi + + * Makefile.in (insn-output.o): Depend on insn-codes.h. + + 2001-11-29 Joseph S. Myers + + * configure.in (target_list): Add generated-manpages. + * configure: Regenerate. + * Makefile.in (generated-manpages): Depend on + lang.generated-manpages. + * objc/Make-lang.in (objc.generated-manpages): New dummy target. + + 2001-11-29 Nick Clifton + + * config/arm/crti.asm (_init): Add .thumb_func if compiled + with -mthumb. + (_fini): Add .thumb_func if compiled with -mthumb. + + 2001-11-28 Eric Christopher + + * config/mips/mips.c (override_options): Fix thinko in mips_tune + for mips32/mips64. Remove MASK_SOFT_FLOAT configuration bits. + + Thu Nov 29 00:24:15 EST 2001 John Wehle (john@feith.com) + + * alpha.md (tablejump): Use pic_offset_table_rtx + instead of gen_rtx_REG. + + Wed Nov 28 15:36:13 2001 Jeffrey A Law (law@cygnus.com) + + * expr.c (store_expr): When copying a string constant into an + array, reset the known alignment of the MEM for the section to + be cleared to BITS_PER_UNIT. + + 2001-11-28 Hans-Peter Nilsson + + * config/cris/cris.c: Remove whitespace at end of line. + + Wed Nov 28 14:51:23 2001 Douglas B. Rupp + + * config.gcc (i[34567]86-*-interix3*): New case. + * config/x-interix3, config/interix3.h, config/i386/i386-interix3.h: + New files. + + 2001-11-28 Richard Henderson + + * config/alpha/alpha.md (sibcall_osf_1, sibcall_value_osf_1): Use + symbolic_operand as the predicate. + + 2001-11-28 Richard Henderson + + * doloop.c (doloop_modify_runtime): Properly select induction + variable; skip late entry test if biv initializer created by loop. + + Wed Nov 28 08:21:47 2001 Richard Kenner + + * tree.h (EXPR_WFL_LINECOL): Used by Java in node other than + EXPR_WITH_FILE_LOCATION, so change checks and documentation. + + * tree.h (TREE_VIA_PROTECTED): Update to show can be in TREE_VEC. + + * tree.h: Add missing checks on some macros; make formatting more + consistent. + + * stor-layout.c (put_pending_size): Look for SAVE_EXPR if not at top + level; only add to pending_sizes if find it. + + * langhooks.c (lhd_safe_from_p): Add ATTRIBUTE_UNUSED. + + * df.c (iterate_dataflow_sbitmap, iterate_dataflow_bitmap): + Add casts to remove warnings. + + * Makefile.in (OBJS): Sort alphabetically. + + * print-rtl.c (print_rtx): If RTX code is bad, just say so. + Also minor cleanups. + + Wed Nov 28 06:52:27 2001 Arnaud Charlet + + * Makefile.in (ORDINARY_FLAGS_TO_PASS): Remove STAGE_PREFIX. + (FLAGS_TO_PASS): Add STAGE_PREFIX. + (SUBDIR_FLAGS_TO_PASS): Apply PREPEND_DOTDOT_TO_RELATIVE_PATH + to STAGE_PREFIX. + + Wed Nov 28 10:42:19 CET 2001 Jan Hubicka + + * cse.c (true_dependence_in_rtx): New function. + (invalidate): Use it. + + * c-common.h (GOTO_FAKE_P): New macro. + * tree-inline.c (GOTO_FAKE_P): Set. + * c-tree.texi (GOTO_FAKE_P): Document. + + * varasm.c (assemble_variable): Set reloc to 3 for error_mark + containing pointers. + (output_addressed_constants): Check for local/external relocations. + * elfos.h (SELECT_SECTION): Classify data section. + * tm.texi (SELECT_SECTION): Update documentation. + + * cfganal.c (flow_dfs_compute_reverse_add_bb): set visited bit. + (flow_dfs_compute_reverse_execute): Add only unvisited blocks. + + 2001-11-27 Kaveh R. Ghazi + + * defaults.h (UNALIGNED_SHORT_ASM_OP, UNALIGNED_INT_ASM_OP, + UNALIGNED_DOUBLE_INT_ASM_OP): Also provide defaults when we have + OBJECT_FORMAT_ROSE. + + 2001-11-28 Hans-Peter Nilsson + + * config/cris/cris.c: Tweak spacing for prototypes. + (LOSE_AND_RETURN): New macro. + (cris_operand_lossage): New function. + (cris_print_index, cris_print_base): Use cris_operand_lossage + rather than fatal_insn. + (cris_print_operand, cris_print_operand_address): Use + LOSE_AND_RETURN rather than fatal_insn and internal_error. + (cris_output_addr_const): Use LOSE_AND_RETURN and + output_operand_lossage rather than fatal_insn and internal_error + for valid but unexpected rtx expressions. + + * config/cris/cris.c (cris_split_movdx): Don't call alter_subreg + for a SUBREG in src or dest, abort instead. + + 2001-11-28 Bryce McKinlay + + * doc/passes.texi: Remove reference to c-dump.c. Update tree inlining + doc. + + 2001-11-27 Jakub Jelinek + + * gcc.c (ASM_DEBUG_SPEC): Use conditional expression rather than + preprocessor define. If only DBX_DEBUGGING_INFO or only + DWARF2_DEBUGGING_INFO is supported for the target, provide + appropriate definitions. + + 2001-11-27 Neil Booth + + * Makefile.in: Update, and add c-objc-common.o dependencies. + * c-lang.c: Remove unnecessary includes. + (c_init): Move bulk of code to c_objc_common_init, and call it. + (c_tree_printer, c_missing_noreturn_ok_p, c_disregard_inline_limits, + inline_forbidden_p, c_cannot_inline_tree_fn): Move to + c-objc-common.c. + * c-objc-common.c: New. Mostly pulled from c-lang.c. + * c-tree.h (c_disregard_inline_limits, c_cannot_inline_fn, + c_objc_common_init, c_missing_noreturn_ok_p): New. + * toplev.c: Update comment. + * doc/passes.texi: Update. + objc: + * objc-act.c (LANG_HOOKS_TREE_INLINING_CANNOT_INLINE_TREE_FN, + LANG_HOOKS_TREE_INLINING_DISREGARD_INLINE_LIMITS, + LANG_HOOKS_TREE_INLINING_ANON_AGGR_TYPE_P): Override. + (objc_init): Update to use c_objc_common_init. + + 2001-11-27 Neil Booth + + * cpphash.c (_cpp_init_hashtable): Update. + * cpphash.h (struct spec_nodes): Remove n_L. + * cpplex.c (_cpp_lex_direct): Check for prefix L separately. + + 2001-11-17 Richard Henderson + + * unroll.c (loop_iterations): Move last change ... + * doloop.c (doloop_modify_runtime): ... here. + + 2001-11-17 Corey Minyard + Richard Henderson + + * unroll.c (loop_iterations): Detect one situation in which we + overestimate the number of iterations. + + 2001-11-27 Rainer Orth + + * gcc.c (set_input): Export. + Move declaration ... + gcc.h (set_input): ... here. + + 2001-11-27 Rainer Orth + + * gcc.c (set_collect_gcc_options): New function, split out from + main. + Ignore elided switches. + (do_spec): Invoke before executing command. + (do_spec_1): Likewise. + Fixes PR other/3968. + + 2001-11-27 Hans-Peter Nilsson + + * config/cris/cris.h (INT_ASM_OP): Remove. + + 2001-11-27 Rainer Orth + + * config/i386/sol2.h (WINT_TYPE): Redefine. + (WINT_TYPE_SIZE): Likewise. + + 2001-11-27 Kaveh R. Ghazi + + * collect2.c: Check HAVE_DUP2 instead of NO_DUP2. + (dup2): Make static and add prototype. + * m68k/plexus.h: Don't define NO_DUP2. + * configure.in (AC_CHECK_FUNCS): Add dup2. + * config.in, configure: Regenerate. + + * ia64/aix.h (REG_SIZE): Don't #undef. + * sparc.h (REG_SIZE): Delete. + * flow.c (mark_used_regs): Don't use REG_SIZE. + * regs.h (REG_SIZE): Delete. + + 2001-11-27 Andreas Schwab + + * gcc.c: Fix typo PREFERRED_DEBUGGING_FORMAT -> + PREFERRED_DEBUGGING_TYPE. + + Tue Nov 27 08:21:47 2001 Richard Kenner + + * Makefile.in (c-lang.o): Depends on langhooks-def.h. + (expr.o, varasm.o): Depends on langhooks.h. + * c-common.c (c_safe_from_p): Always declare. + (c_expand_expr): Refine when declared. + * c-lang.c (c-common.h): Now include. + (LANG_HOOKS_SAFE_FROM_P): Define new hook. + (c_init): Don't set lang_safe_from_expr. + * expr.c (langhooks.h): Now include. + (lang_safe_from_p): No longer define. + (safe_from_p): Use lang hook. + (expand_expr): Set IGNORE if VOID_TYPE result of VIEW_CONVERT_EXPR too. + (expand_expr, case VIEW_CONVERT_EXPR): Pass ro_modifier down. + * expr.h (lang_expand_constant, lang_safe_from_p): Delete. + * langhooks-def.h (lhd_return_tree, lhd_safe_from_p): New decls. + (LANG_HOOKS_EXPAND_CONSTANT, LANG_HOOKS_SAFE_FROM_P): New hooks. + * langhooks.c (lhd_return_tree, lhd_safe_from_p): New functions. + * langhooks.h (struct lang_hooks): New fields expand_constant + and safe_from_p. + * output.h (output_constant): Size arg is HOST_WIDE_INT. + * stmt.c (expand_decl_init): No longer need to expand constant + for CONST_DECL. + * stor-layout.c (put_pending_size): Don't check for SAVE_EXPR. + * toplev.c (lang_expand_constant): Delete var. + * tree.c (save_expr): Don't put another SAVE_EXPR around simple + operations on SAVE_EXPR. + * varasm.c (langhooks.h): Now include. + (compare_constant_1): Use lang_hooks, not lang_expand_constant. + (record_constant_1, output_addressed_constants): Likewise. + (initializer_constant_valid_p, output_constant): Likewise. + (output_constant_def): Process no-defer of string constant. + (output_addressed_constants, case ADDR_EXPR): Use handled_component_p. + (output_constant): Strip more conversions. + Track our size and pad for the rest. + (array_size_for_constructor): Remove code for non-byte STRING_CST. + (output_constructor): SIZE now HOST_WIDE_INT. + + 2001-11-27 Richard Henderson + + * ifcvt.c (noce_try_store_flag_constants): Test for overflow + in computing DIFF. + + 2001-11-27 Zack Weinberg + + * cppfiles.c (read_include_file): Add comment. + + 2001-11-26 Richard Henderson + + * toplev.c (rest_of_compilation): Call free_bb_for_insn before exit. + + 2001-11-26 Richard Henderson + + * config/ia64/sysv4.h (DBX_DEBUGGING_INFO): Undef. + * config/ia64/aix.h (PREFERRED_DEBUGGING_TYPE): Remove + commented out override. + + 2001-11-26 Neil Booth + + * cppfiles.c (stack_include_file): Don't optimize zero-length + files. + (read_include_file): NUL-terminate read files. + * cpplex.c (handle_newline, skip_escaped_newlines, + get_effective_char, skip_whitespace, parse_identifier, + parse_identifier_slow, parse_number, parse_string, + _cpp_lex_direct): Optimize for the fact that buffers are guaranteed + NUL-terminated. + * cpplib.c (destringize_and_run, cpp_define, handle_assertion): + Be sure buffers are NUL terminated. + * cppmacro.c (warn_of_redefinition): Kill compile warning. + + 2001-11-26 Neil Booth + + * c-common.c: Include tree-inline.h. + (c_language): Move separate definitions here. + (c_common_init_options, c_common_post_options): New. + (c_common_lang_init): Rename c_common_init. + * c-common.h (c_common_lang_init): Similarly. + (c_common_init_options, c_common_post_options): New. + * c-lang.c (c_post_options): Move body to c_common_post_options. + (c_init_options): Use c_common_init_options. + (c_init): Update. + * langhooks.def: Rearrange. + * langhooks.h: Rearrange, and improve comments. + * toplev.c (do_compile): New function. + (toplev_main): Use it. + (lang_independent_f_options, parse_options_and_default_flags, + process_options): Remove trailing periods. + * Makefile.in: Update. + objc: * objc-act.c (objc_post_options, objc_init_options): Use c-common.c + functions. + (ojbc_init): Update. + + 2001-11-26 Richard Henderson + + * config/alpha/alpha.md (unop): Add 0 offset for some gas versions. + + 2001-11-26 DJ Delorie + + * expr.c (store_constructor): Actually use the value computed + if WORD_REGISTER_OPERATIONS. + + 2001-11-26 Richard Henderson + + * config/elfos.h (SELECT_SECTION): Don't check TREE_READONLY + for CONSTRUCTOR. + + 2001-11-26 David Edelsohn + + * rs6000.c (output_mi_thunk): Handle minimal-toc and call + correct function on AIX. + + 2001-11-26 Alexandre Oliva + + * toplev.c (process_options): Don't force + flag_optimize_sibling_calls to zero just because exceptions are + enabled. + + Mon Nov 26 12:37:05 2001 Jeffrey A Law (law@cygnus.com) + + * df.h (transfer_function_sbitmap): Use PARAMS around argument + list in function prototypes. + (transfer_function_bitmap): Likewise. + + 2001-11-26 Loren J. Rittle + + * config/stormy16/stormy16.h: Remove DEFAULT_VTABLE_THUNKS. + * config/i386/netbsd-elf.h: Likewise. + + 2001-11-26 David Edelsohn + + * doc/trouble.texi: Remove outdated RS/6000 comments. + + Mon Nov 26 13:49:41 CET 2001 Jan Hubicka + + * final.c (walk_alter_subreg): Fix return value. + + Mon Nov 26 11:36:20 CET 2001 Jan Hubicka + + * sparc.c (sparc_absnegfloat_split_legitimate): Do not call + alter_subreg. + * sparc.md (post-reload splitters): Do not call alter_subreg. + * cfgrtl.c (purge_dead_edges): Fix typo in previous fix. + + 2001-11-25 Aldy Hernandez + + * regclass.c (choose_hard_reg_mode): Handle vector arguments. + + 2001-11-26 Alan Modra + + * final.c: (insn_lengths): Make it an int *, so that large jump + tables don't overflow. + + 2001-11-25 Joseph S. Myers + + * c-format.c (FMT_FLAG_DOLLAR_GAP_POINTER_OK): New. + (format_types): Use it for scanf. + (dollar_arguments_pointer_p): New. + (init_dollar_format_checking): Store details of which arguments + are pointers. + (maybe_read_dollar_number): Reallocate dollar_arguments_pointer_p. + (finish_dollar_format_checking): Take extra parameter + pointer_gap_ok. Treat unused arguments differently if + pointer_gap_ok and the unused arguments are pointers. + (check_format_info_main): Pass extra argument to + finish_dollar_format_checking. + * doc/invoke.texi (-Wno-format-extra-args): Document behavior when + unused arguments are present between used arguments with operand + numbers. + + 2001-11-25 Daniel Berlin + + * df.c: Add prototypes for hybrid_search_bitmap and + hybrid_search_sbitmap. + (hybrid_search_bitmap): New function. + (hybrid_search_sbitmap): New function. + (iterative_dataflow_sbitmap): Change to use hybrid_search_sbitmap. + (iterative_dataflow_bitmap): Ditto. + + 2001-11-25 Stephane Carrez + + * config/m68hc11/m68hc11.md (peephole2): New peephole2 to optimize + address computations. + + 2001-11-25 Stephane Carrez + + * config/m68hc11/m68hc11.c (d_register_operand): Must accept + register b (low part of d). + + 2001-11-25 Stephane Carrez + + * config/m68hc11/m68hc11.h (FUNCTION_PROFILER): Fix label name + passed to mcount. + + Sun Nov 25 06:22:09 2001 Douglas B. Rupp + + * config/alpha/vms-ld.c, config/alpha/vms-cc.c: New files. + * config/alpha/x-vms: New file, to compile the above. + * config.gcc (alpha*-dec-vms*): Add x-vms. + + 2001-11-24 Hans-Peter Nilsson + + * genextract.c (main): Set ro_loc for peepholes. + + Sat Nov 24 17:04:10 2001 Douglas B. Rupp + + * fix-header.c (main): Move inf_buffer termination and inf_limit + calculation to after read. + + * config/alpha/xm-vms.h (FILE_TYPE): Remove undef and baggage. + (__UNIX_FOPEN): Define. + + Sat Nov 24 16:11:00 2001 Richard Kenner + + * function.c (assign_stack_temp_for_type): Clear alias set before + setting new one. + + 2001-11-23 David Edelsohn + + * rs6000.c (print_operand, case 'v'): Use HOST_WIDE_INT_PRINT_HEX + format. + * rs6000.md (cmptf): Fix typo. + + 2001-11-23 Richard Sandiford + + * final.c (output_addr_const): Output PC as '.' even if !flag_pic. + * varasm.c (output_constructor): Use assemble_integer rather + than ASM_OUTPUT_BYTE. + + 2001-11-23 Andreas Jaeger + + * cpplex.c (cpp_interpret_charconst): Use HOST_WIDE_INT for sign + extension. + + 2001-11-23 Nick Clifton + + * config/arm/xscale-coff.h (SUBTARGET_CPU_DEFAULT): Override + default definition. + (SUBTARGET_EXTRA_ASM_SPEC): Remove previous definition. + (MULTILIB_DEFAULTS): Remove previous definition. + + 2001-11-23 Neil Booth + + * cppmacro.c (warn_of_redefinition): Warn regardless of -pedantic. + * gcc.dg/cpp/mi6.c, gcc.dg/cpp/redef2.c: Update. + + 2001-11-22 Kaveh R. Ghazi + + * cris.h: Revert thinko in last patch. + + 2001-11-23 Joseph S. Myers + + * ChangeLog.0, ChangeLog.2, ChangeLog.3, ChangeLog.4, ChangeLog, + FSFChangeLog.10, c-decl.c, cppfiles.c, cppinit.c, cpplex.c, + cpplib.c, cppmain.c, cse.c, df.c, diagnostic.c, dominance.c, + dwarf2out.c, dwarfout.c, emit-rtl.c, errors.c, except.c, except.h, + explow.c, function.c, gcse.c, genrecog.c, predict.c, regmove.c, + sched-rgn.c, ssa-ccp.c, stmt.c, toplev.c: Fix spelling errors. + + * predict.c, reg-stack.c: Fix spelling errors. + + 2001-10-09 Andrew Haley + + * calls.c (check_sibcall_argument_overlap): Use slot_offset for + start of stack slot. + + 2001-11-22 Graham Stott + + * cfgrtl.c (try_redirect_by_replacing_jump): Fix typo, emit + replacement jump after original jump. + + (verify_flow_info): Remove redundent initialisation. + Handle reaching end of insn list before finding a BARRIER. + Only issue one missing barrier diagnostic. + + 2001-11-22 Graham Stott + + * local-alloc.c (combine_regs): Handle SUBREG_REG being a MEM. + + Thu Nov 22 06:49:14 2001 Richard Kenner + + * config/i386/i386.md (leave, leave_rex64): Have RTL reflect what + insn actually does. + + 2001-11-22 Nick Clifton + + * doc/invoke.texi (M32R/D Option Summary): Document -m32r switch. + Fix typo -mm32rx=> -m32rx. + + * config/arm/arm.c (arm_elf_asm_named_section): Only build for elf + targets. + + * config.gcc (xscale-coff): Add necessary header files to + tm_file variable. + + 2001-11-20 Zack Weinberg + + * rs6000.c (output_cbranch): Use $, not %$, in output template. + + 2001-11-21 Bryce McKinlay + + * tree-dump.c: Rename from c-dump.c. Include c-tree.h, not c-common.h. + (lang_type_quals): Declare. + (dequeue_and_dump): Use lang_hooks.tree_dump.type_quals function to + retrieve language-specific qualifiers for a type node, instead of + C_TYPE_QUALS. Likewise for lang_hooks.tree_dump.dump_tree instead of + lang_dump_tree. + * tree-dump.h: Rename from c-dump.h. + * c-common.h (C_TYPE_QUALS): Removed. + Move declarations for tree-dump.c interface to... + * tree.h: ... here. Remove lang_dump_tree. + * langhooks.h (struct lang_hooks_for_tree_dump): New. + (struct lang_hooks): Add tree_dump hooks. + * langhooks.c (lhd_tree_dump_dump_tree): New function. + (lhd_tree_dump_type_quals): New function. + * langhooks-def.h (lhd_tree_dump_dump_tree, lhd_tree_dump_type_quals): + Declare. + (LANG_HOOKS_INITIALIZER): Add tree_dump hooks. + * Makefile.in: Move tree-dump.o to language-independent back-end. + + 2001-11-21 Kaveh R. Ghazi + + * 1750a.h (DBX_REGISTER_NUMBER): Don't define. + * alpha.h (DBX_REGISTER_NUMBER): Likewise. + * arc.h (DBX_REGISTER_NUMBER): Likewise. + * arm/aout.h (DBX_REGISTER_NUMBER): Likewise. + * avr.h (DBX_REGISTER_NUMBER): Likewise. + * c4x.h (DBX_REGISTER_NUMBER): Likewise. + * clipper.h (DBX_REGISTER_NUMBER): Likewise. + * convex.h (DBX_REGISTER_NUMBER): Likewise. + * cris.h (DBX_REGISTER_NUMBER): Likewise. + * dsp16xx.h (DBX_REGISTER_NUMBER): Likewise. + * elxsi.h (DBX_REGISTER_NUMBER): Likewise. + * fr30.h (DBX_REGISTER_NUMBER): Likewise. + * h8300.h (DBX_REGISTER_NUMBER): Likewise. + * i370.h (DBX_REGISTER_NUMBER): Likewise. + * i860.h (DBX_REGISTER_NUMBER): Likewise. + * i860/paragon.h (DBX_REGISTER_NUMBER): Likewise. + * i860/sysv3.h (DBX_REGISTER_NUMBER): Likewise. + * i860/sysv4.h (DBX_REGISTER_NUMBER): Likewise. + * m32r.h (DBX_REGISTER_NUMBER): Likewise. + * m68hc11.h (DBX_REGISTER_NUMBER): Likewise. + * m88k.h (DBX_REGISTER_NUMBER): Likewise. + * mcore/mcore-elf.h (DBX_REGISTER_NUMBER): Likewise. + * mcore.h (DBX_REGISTER_NUMBER): Likewise. + * mn10200.h (DBX_REGISTER_NUMBER): Likewise. + * mn10300.h (DBX_REGISTER_NUMBER): Likewise. + * pdp11.h (DBX_REGISTER_NUMBER): Likewise. + * romp.h (DBX_REGISTER_NUMBER): Likewise. + * rs6000.h (DBX_REGISTER_NUMBER): Likewise. + * rs6000/sysv4.h (DBX_REGISTER_NUMBER): Likewise. + * s390/linux.h (DBX_REGISTER_NUMBER): Likewise. + * stormy16.h (DBX_REGISTER_NUMBER): Likewise. + * v850.h (DBX_REGISTER_NUMBER): Likewise. + * vax.h (DBX_REGISTER_NUMBER): Likewise. + * we32k.h (DBX_REGISTER_NUMBER): Likewise. + + * defaults.h (DBX_REGISTER_NUMBER): Provide a default. + * doc/tm.texi (DBX_REGISTER_NUMBER): Update. + + 2001-11-21 H.J. Lu + + * config/rs6000/sysv4.h (LIB_SPEC): Fix a typo. + + 2001-11-21 Kaveh R. Ghazi + + * s390.c (s390_va_arg): Eliminate ALIGN parameter in call to + emit_cmp_and_jump_insns. + + * stormy16.c (xstormy16_expand_builtin_va_arg, + xstormy16_expand_casesi): Likewise. + + Wed Nov 21 17:37:16 2001 Richard Kenner + + * function.c (keep_stack_depressed): Major rework. + (handle_epilogue_set, emit_equiv_load): New functions. + (thread_prologue_and_epilogue_insns): keep_stack_depressed now + has return value. + * jump.c (returnjump_p_1): Also return 1 if SET with SET_IS_RETURN_P. + * rtl.h (SET_IS_RETURN_P): New macro. + + * expr.c (expand_expr, case VIEW_CONVERT_EXPR): Refine slightly + and also support TREE_ADDRESSABLE. + * tree.def (VIEW_CONVERT_EXPR): Document TREE_ADDRESSABLE. + + 2001-11-21 David Edelsohn + + * rs6000.md (cmptf_internal1): Replace %$ with $. + + Wed Nov 21 16:44:01 2001 Douglas B. Rupp + + * cppfiles.c (STAT_SIZE_TOO_BIG): Define. + (read_include_file): Use STAT_SIZE_TOO_BIG. + + * cppinit.c (INO_T_COPY): Define. + (INO_T_EQ): Uppercase parameters. + (append_include_chain): Use INO_T_COPY. + + 2001-11-21 Richard Sandiford + + * cfg.c: Fix typos and formatting in the introductory comment. + + Wed Nov 21 12:38:37 CET 2001 Jan Hubicka + + * profile.c (compute_branch_probabilites): Compute probabilities + for entry/exit edges; estimate probabilities for zero counts. + + 2001-11-21 Jakub Jelinek + + * explow.c (probe_stack_range): Use LCT_NORMAL as second argument + to emit_library_call. + * function.c (expand_main_function, expand_function_start, + expand_function_end): Likewise. + * profile.c (output_func_start_profiler): Likewise. + * stmt.c (expand_nl_goto_receivers): Use LCT_NORETURN as + second argument to emit_library_call. + * optabs.c (prepare_cmp_insn): Use LCT_CONST_MAKE_BLOCK + as second argument to emit_library_call. + * calls.c (emit_library_call): Update fn_type description. + + 2001-11-21 Jakub Jelinek + + * c-decl.c (c_expand_deferred_function): Only call c_expand_body + if fndecl is still DECL_INLINE and has DECL_RESULT. + + 2001-11-20 Kaveh R. Ghazi + + * clipper.c (clipper_movstr): Avoid uninitialized warning. + * i960.c (is_mask, legitimize_address): Likewise. + * m88k.c (m88k_expand_prologue): Likewise. + * m88k.md: Likewise. + * mcore.c (emit_new_cond_insn): Likewise. + * stormy16.c (xstormy16_emit_cbranch): Likewise. + + 2001-11-20 Zack Weinberg + + * config.gcc: Delete powerpcle-*-solaris2* stanza. + * config/rs6000/eabi.asm, config/rs6000/rs6000.c, + config/rs6000/rs6000.h, config/rs6000/rs6000.md, + config/rs6000/sol-ci.asm, config/rs6000/sol-cn.asm, + config/rs6000/sysv4.h, config/rs6000/t-ppccomm, + config/rs6000/t-ppcos: Expunge all references to Solaris. + + * config/rs6000/sol-c0.c, config/rs6000/sol2.h: Delete. + + * config/rs6000/rs6000.md: Replace '%$' with '$' in all + output templates. + * config/rs6000/rs6000.h: Define DEFAULT_PCC_STRUCT_RETURN to 0, + and change RETURN_IN_MEMORY to just check AGGREGATE_TYPE_P. + + 2001-11-20 Kaveh R. Ghazi + + * sh.md: Avoid uninitialized warnings. + * vax.c (vax_rtx_cost): Likewise. + + 2001-11-15 Aldy Hernandez + + * rs6000.c (direct_return): Check if we are saving altivec + registers. + (first_altivec_reg_to_save): New. + Updated stack frame layout comments. + (rs6000_stack_info): Calculate altivec register save size. + Save link register if we saved some altivec registers. + (rs6000_stack_info): Align save size to 16 if altivec abi or + abi_darwin. + (rs6000_stack_info): Calculate altivec register offsets. + (rs6000_stack_info): Add altivec info to save_size. + (debug_stack_info): Add altivec debug info. + (rs6000_emit_prologue): Save altivec registers and vrsave. + (compute_vrsave_mask): New. + (altivec_expand_builtin): Remove unused variables. + (rs6000_parse_abi_options): Add static qualifier. + (rs6000_expand_builtin): Remove unused parameters. + (altivec_expand_builtin): Cast bdesc_2arg to get rid of warning. + (altivec_init_builtins): Same. + (is_altivec_return_reg): New. + (vrsave_operation): New. + (ALTIVEC_REG_BIT): New. + (generate_set_vrsave): New. + + * rs6000.md (get_vrsave): New. + (set_vrsave): New. + (*set_vrsave_internal): New. + + * rs6000.h (rs6000_stack): Add first_altivec_reg_save, + altivec_save_offset, vrsave_save_offset, altive_size, vrsave_size, + altivec_padding_size, vrsave_mask. + (TOTAL_ALTIVEC_REGS): New. + (EPILOGUE_USES): Add VRSAVE_REGNO. + + 2001-11-20 Jeff Law + + * unroll.c (copy_loop_body): Update LABEL_NUSES for the + exit label as necessary. + + 2001-11-20 Brad Kaiser + + * reload1.c (elimination_effects): Use function_invariant_p + instead of CONSTANT_P when considering register equivalences. + + 2001-11-20 David O'Brien + + * config.gcc: Add FreeBSD/PowerPC target. + (powerpc64-*-linux*, powerpc-*-sysv*, powerpc-*-netbsd*, + powerpc-*-chorusos*, powerpc-*-eabiaix*, powerpc-*-eabisim*, + powerpc-*-elf*, powerpc-*-eabi*, powerpc-*-rtems*, + powerpc-*-linux*libc1, powerpc-*-linux*, powerpc-wrs-vxworks*, + powerpcle-wrs-vxworks*, powerpcle-*-sysv*, powerpcle-*-elf*, + powerpcle-*-eabisim*, powerpcle-*-eabi*, powerpcle-*-solaris2*): Add + freebsd-spec.h to tm_file. + (rs6000-*-lynxos*): Add lynx.h to tm_file. + * config/freebsd.h: Tidy up. + (USING_CONFIG_FREEBSD): Define. + (FBSD_SWITCH_TAKES_ARG, FBSD_WORD_SWITCH_TAKES_ARG, + FBSD_CPP_PREDEFINES, FBSD_CPP_SPEC, FBSD_STARTFILE_SPEC, + FBSD_ENDFILE_SPEC, FBSD_LIB_SPEC): Remove (moved to freebsd-spec.h). + (TARGET_HAS_F_SETLKW): Define. + (ASM_OUTPUT_IDENT): Delete, the elfos.h definition is fine. + * config/freebsd-spec.h: New file. + * config/rs6000/freebsd.h: New file. + * config/rs6000/rs6000.h (TARGET_VERSION): Do not define. + * config/rs6000/rs6000.c: Test for USING_ELFOS_H rather than + USING_SVR4_H to know when to turn on ELF support. + * config/rs6000/sysv4.h (TARGET_VERSION, CPP_PREDEFINES): Don't undef, + define only if not already defined. + Add FreeBSD support. + * config/rs6000/aix.h (TARGET_VERSION): Define. + * config/rs6000/beos.h: Likewise. + * config/rs6000/darwin.h: Likewise. + * config/rs6000/mach.h: Likewise. + * config/rs6000/lynx.h (TARGET_VERSION): Likewise. + Don't include lynx.h directly. + + 2001-11-20 Graham Stott + + * unwind-dw2-fde.c (__deregister_frame_info_bases): + Fix lossage in last change return OB. + + Tue Nov 20 11:56:12 2001 Douglas B. Rupp + + * config/alpha/xm-vms.h (_POSIX_EXIT): Define. + Remove unneeded exit related macros. + + 2001-11-20 David Edelsohn + + * rs6000.c (rs6000_emit_eh_toc_restore): Remove ALIGN parm. + + * rs6000.c (rs6000_emit_move): Add TFmode case. + * sysv4.h (MASK_LONG_DOUBLE_128, TARGET_LONG_DOUBLE_128, + LONG_DOUBLE_TYPE_SIZE, MAX_LONG_DOUBLE_TYPE_SIZE, + LIBGCC2_LONG_DOUBLE_TYPE_SIZE): Move from here... + * rs6000.h: ... to here. + * rs6000.md (movtf, extenddftf2, extendsftf2, trunctfdf2, + trunctfsf2, floatditf2, floatsitf2, fix_trunctfdi2, + fix_trunctfsi2, negtf2, abstf2, nabstf2, cmptf): New patterns. + + Tue Nov 20 06:41:38 2001 Richard Kenner + + * emit-rtl.c (get_mem_attrs): Fix typo. + + 2001-11-20 Jakub Jelinek + + * c-lang.c (finish_file): Backout 2001-11-16 + changes, instead set DECL_DEFER_OUTPUT for static inline functions + before calling c_expand_deferred_function. + + 2001-11-20 Jakub Jelinek + + * unwind-dw2-fde.c (__register_frame_info_bases, __register_frame): + Don't register empty .eh_frame sections. + (__deregister_frame_info_bases, __deregister_frame): Don't + unregister them either. + + 2001-11-19 Geoffrey Keating + + * configure.in (HAVE_AS_GDWARF2_DEBUG_FLAG): Define. + (HAVE_AS_GSTABS_DEBUG_FLAG): Define. + * configure: Regenerate. + * config.in: Add dummy definitions of new flags. + * toplev.c (PREFERRED_DEBUGGING_TYPE): Move definition to... + * defaults.h (PREFERRED_DEBUGGING_TYPE): ... here. + * gcc.c (ASM_DEBUG_SPEC): New macro. + (asm_debug): New static variable. + (default_compilers): Add asm_debug when assembling from + user input. + (static_specs): Add asm_debug. + + 2001-11-20 Loren J. Rittle + + * config.gcc (*-*-freebsd*): Remove configuration block. + + 2001-11-19 Loren J. Rittle + + bootstrap/4422 + * configure.in: Setup ability to run ./stage[1234]/xgcc in + fixinc *as if* it were a proper lang subdirectory. + * configure: Rebuilt. + + 2001-11-19 Loren J. Rittle + + * config/freebsd.h: Remove DEFAULT_VTABLE_THUNKS (again). + + 2001-11-19 Kaveh R. Ghazi + + * 1750a.md: Don't use hex format for a const_int. + + 2001-11-19 Geoffrey Keating + + * expmed.c (extract_bit_field): Don't create invalid SUBREGs. + + 2001-11-19 Zack Weinberg + + * mkconfig.sh: Undefine ENABLE_NLS if GENERATOR_FILE is + defined (prevents link errors when gettext isn't in the system + library). + + 2001-11-19 DJ Delorie + + * read-rtl.c (ISDIGIT, ISSPACE): Make sure we have these. + (validate_const_int): New. + (read_rtx): Validate constant integers. + * config/i386/i386.md (pmulhrwv4hi3): Use decimal constants. + + 2001-11-19 Jakub Jelinek + + * doc/hostconfig.texi (DUMPFILE_FORMAT): Move into the table. + + Mon Nov 19 16:57:44 2001 Douglas B. Rupp + + * toplev.c (DUMPFILE_FORMAT): Define default. + (open_dump_file): Use DUMPFILE_FORMAT in sprintf. + (close_dump_file, compile_file): Likewise. + * config/alpha/xm-vms.h (DUMPFILE_FORMAT): Define. + * doc/hostconfig.texi (DUMPFILE_FORMAT): Document + + 2001-11-19 Jeff Law + + * gcse.c (cprop_jump): Clear JUMP_LABEL field when we create + a nop-jump. + + 2000-11-19 Neil Booth + + * cppmacro.c (_cpp_backup_tokens): Revert previous check-in. + Don't fall off the base token run. + + 2001-11-19 Jason Wilkins + + * Makefile.in: Use INSTALL_SCRIPT not INSTALL_PROGRAM. + + Mon Nov 19 15:13:43 2001 Richard Kenner + + * tree.def (VIEW_CONVERT_EXPR): New tree code. + * tree.h (handled_component_p): New declaration. + * alias.c (handled_component_p): Move function from here ... + * expr.c (handled_component_p): ... to here and non longer static. + (is_zeros_p, case VIEW_CONVERT_EXPR): New case. + (store_field): Remove unneeded MEM_COPY_ATTRIBUTES call. + (get_inner_reference): Handle VIEW_CONVERT_EXPR. + (expand_expr, case VAR_DECL): Clean up handling of re-layout case. + (expand_expr, case VIEW_CONVERT_EXPR): New case. + (expand_expr, cse ADDR_EXPR): No need to copy if already + BIGGEST_ALIGNMENT. + * fold-const.c (fold, case VIEW_CONVERT_EXPR): New case. + * varasm.c (initializer_constant_value_p, case VIEW_CONVERT_EXPR): New. + (output_constant): Handle VIEW_CONVERT_EXPR. + * dwarf2out.c (loc-descriptor_from_tree, add_bound_info): + Add new case for VIEW_CONVERT_EXPR. + + 2001-11-19 Kaveh R. Ghazi + + * a29k/unix.h (ASM_FILE_START): Const-ify. + * i386/beos-elf.h (INCLUDE_DEFAULTS): Remove semi-colon. + * i386/isc.h (ASM_FILE_START): Const-ify. + * i386/sun386.h (ASM_FILE_START): Likewise. + * m32r.md: Likewise. + * m68k/auxas.h (ADDITIONAL_REGISTER_NAMES): Add missing brackets. + * m68k/auxgas.h ADDITIONAL_REGISTER_NAMES): Likewise. + * m68k/tower.h (REGISTER_NAMES): Remove semi-colon. + * mn10200.md: Initialize variable. + + Mon Nov 19 18:06:21 CET 2001 Jan Hubicka + + * gcse.c (try_replace_reg): Copy RTX before creating note. + + * df.h (df_ref_flags): New uenum. + (DF_REF_FLAGS): New macro. + (struct ref): Add field "flags". + * df.c (HANDLE_SUBREG): Remove. + (df_ref_create): Likewise; set flags field of ref. + (df_def_record_1): Strip down read_write subreg; remove + commented out code; set READ_WRITE flag. + (read_modify_subreg_p): New static function. + (df_uses_record): Cleanup SET handling; set READ_WRITE flag; + new argument "flags". + (df_insn_refs_record): Update call of df_uses_record. + (df_insn_modify): Avoid #if 0 around comment. + (df_dump): Dump the read/write flag. + + * predict.c (propagate_freq): Make cyclic_probability and frequency + volatile + + * i386.c (ix86_cc_mode): Accept USE. + + * cfgrtl.c (purge_dead_edges): Cleanup EDGE_ABNORMAL flag if computed + jump is turned into simplejump. + + 2001-11-19 Joseph S. Myers + + * doc/fragments.texi, doc/trouble.texi: Remove links to old + installation chapter. + * doc/gcc.texi: Don't claim that this manual documents + installation. Mark Installation menu entry as being out of date. + + Mon Nov 19 07:21:35 2001 Douglas B. Rupp + + * config/alpha/xm-vms.h: Don't define macros that autoconf handles. + (SUCCESS_EXIT_CODE, FATAL_EXIT_CODE): Define for posix compatibility. + * gcc.c (exit): Remove definition for VMS; moved to xm-vms.h. + + 2001-11-19 Jason Merrill + + * cppmacro.c (_cpp_backup_tokens): Pop cur_run before decrementing + cur_token, not after. + + * config/clipper/clix.h, config/h8300/elf.h, config/mips/linux.h: + Lose ASM_OUTPUT_CONSTRUCTOR. + * system.h: Poison it and INT_ASM_OP. + * c-lang.c (finish_file): Don't check for it. + * libgcc2.c (L_ctors): Check TARGET_ASM_CONSTRUCTOR instead. + + 2001-11-18 Kaveh R. Ghazi + + * mmix.c (mmix_cc1_ignored_option): Const-ify. + (mmix_init_machine_status): Make static to match declaration. + (mmix_unique_section): Const-ify. + (mmix_output_quoted_string): Avoid automatic aggregate + initialization. + (mmix_output_register_setting): Likewise. + (mmix_output_shiftvalue_op_from_str): Likewise. + + * mmix.h (mmix_cc1_ignored_option): Const-ify. + (ASM_OUTPUT_BYTE): Fix format specifier warning. + (ASM_GENERATE_INTERNAL_LABEL): Likewise. + + 2001-11-18 Craig Rodrigues + + PR c/4448 + * gthr-win32.h: (__gthread_objc_thread_exit): Fix variable + name __objc_thread_exit_status so that it matches the + variable defined in objc/thr.h. + + 2001-11-18 Craig Rodrigues + + PR bootstrap/4020 + * mklibgcc.in: Add missing semi-colons. + * Makefile.in: Same. + + Sun Nov 18 16:47:00 2001 Richard Kenner + + * expr.c (expand_expr, case VAR_DECL): Update alignment of DECL_RTL + after re-laying out decl in incomplete case. + (expand_expr, case ADDR_EXPR): Fix typo in copy case. + + 2001-11-18 Joseph S. Myers + + * doc/install-old.texi: Move some sections out to ... + * doc/collect2.texi, doc/configfiles.texi, doc/headerdirs.texi: + ... here. New files. Make into chapters rather than sections. + * doc/gcc.texi: Include the new files and add menu entries for + them. + * Makefile.in ($(docdir)/gcc.info, gcc.dvi): Update dependencies. + + Sun Nov 18 14:13:52 2001 Richard Kenner + + * tree.h (TYPE_ALIGN_OK): New flag. + * emit-rtl.c (set_mem_attributes): Handle it. + * expr.c (emit_single_push_insn): Only set to alias set 0 if + doing sibcall optimization. + (expand_expr, case COMPONENT_REF): Call set_mem_attributes on case + when make temporary. + (expand_expr, case CONVERT_EXPR): Simplify convert-to-union case. + (expand_expr, case ADDR_EXPR): Abort if TYPE_ALIGN_OK and need copy. + + * sdbout.c (sdbout_symbol): Avoid warning due to &DECL_RTL. + + 2001-11-18 Joseph S. Myers + + * c-decl.c (c_decode_option): Give deprecation warning for + -traditional. + * doc/invoke.texi (-traditional): Note that this option is + deprecated. + + Sun Nov 18 07:40:07 2001 Douglas B. Rupp + + * config/alpha/alpha.c (alpha_start_function, VMS): Cast shift + arg to HOST_WIDE_INT, not long. + + * config/alpha/vms.h (DIR_SEPARATOR, PREFIX). Don't define. + (HAS_INIT_SECTION): Define. + (REAL_ARITHMETIC): Don't undefine. + + 2001-11-18 Egor Duda + + * config/i386/cygwin.h: Strip leading '*' from name, if any. + + 2001-11-18 Neil Booth + + * Makefile.in (c-parse.o, c-common.o): Update dependencies. + * c-common.c: Include diagnostic.h. + (c_common_finish): New. + * c-common.h (c_common_finish): New. + * c-lang.c (LANG_HOOKS_FINISH): Override. + * c-parse.in: Don't include diagnostic.h. + (finish_parse): Remove. + * langhooks.h: Update comments. + * toplev.c (lang_dependent_init): New prototype. + (finalize): New. + (compile_file): Split cleanup code out to finalize. + (lang_dependent_init): Stop if lang_hooks.init fails. + (toplev_main): Update. + * tree.h (finish_parse): Remove. + objc: + * objc-act.c (LANG_HOOKS_FINISH): Override. + + Sat Nov 17 23:30:44 2001 Douglas B. Rupp + + * config/alpha/t-vms (LIB2FUNCS_EXTRA): Add vms_tramp.asm. + * config/alpha/vms_tramp.asm: New file. + * config/alpha/vms-tramp.asm: Removed. + + 2001-11-18 Joseph S. Myers + + * c-common.c (struct disabled_builtin, disabled_builtins, + disable_builtin_function, builtin_function_disabled_p): New. + (builtin_function_2): Check for disabled built-in functions. + * c-common.h (disable_builtin_function): Declare. + * c-decl.c (c_decode_option): Handle -fno-builtin-FUNCTION. + * doc/invoke.texi: Document -fno-builtin-FUNCTION. + * doc/extend.texi: Mention -fno-builtin-FUNCTION. + + 2001-11-17 Craig Rodrigues + + PR target/4606 + * config.gcc: Remove reference to va-clipper.h. + + 2001-11-17 Stan Shebs + + * config/rs6000/rs6000.h (REG_CLASS_CONTENTS): Fix the + AltiVec-related bitfields. + + Sat Nov 17 12:06:31 2001 Richard Kenner + + * except.c (enum eh_region_type): Add ERT_UNKNOWN. + (mark_eh_region, case ERT_UKNONW): New case. + + 2001-11-17 Christopher Faylor + Corinna Vinschen + + * config/i386/cygwin.h: Search target specific include directory for + w32api stuff, if appropriate. + + Sat Nov 17 08:20:44 2001 Douglas Rupp + + * config/alpha/vms.h (REG_ALLOC_ORDER): Redefine. + + 2001-11-16 Aldy Hernandez + + * config/rs6000/rs6000.md: Change all ldvx to lvx. + + 2001-11-16 Alexandre Oliva + + * gensupport.c (process_rtx): Don't assume filename is the first + argument of any rtl. + + 2001-11-16 John David Anglin + + * vax-protos.h (reg_was_0_p): New prototype. + * vax.md (movsi, movhi, movqi): Use reg_was_0_p. + * vax.c (follows_p, reg_was_0_p): New functions. + + 2001-11-16 John David Anglin + + * vax.md (casesi): Swap arguments in "(plus:SI (pc) (mult))". Reformat. + (casesi1): Likewise. Define new pattern which arises by simplification + when operand 1 is a constant int. Correct pattern which arises by + simplification when operand 1 is zero. + + 2001-11-16 David O'Brien + + * config.gcc (arm*-*-rtems*, arm-*-coff*, armel-*-coff*, + arm-*-vxworks*, arm-*-riscix1.[01]*, arm-*-riscix*, + arm-semi-aout, armel-semi-aout, arm-semi-aof, armel-semi-aof, + arm*-*-netbsd*, arm*-*-linux*, arm*-*-uclinux*, arm*-*-aout, + arm*-*-ecos-elf, arm*-*-elf, arm*-*-conix*, arm*-*-oabi, + arm-*-pe*, strongarm-*-elf*, strongarm-*-coff*, strongarm-*-pe, + xscale-*-elf, xscale-*-coff: Include various CPU headers via tm_file. + * config/arm/aof.h: Don't include arm.h. + * config/arm/aout.h: Likewise. + * config/arm/coff.h: Don't include semi.h and aout.h. + * config/arm/elf.h: Don't include aout.h. + * config/arm/netbsd.h: Don't include netbsd.h and aout.h. + (TARGET_VERSION): Undef before defining. + (ARM_OS_NAME): Likewise + (TARGET_DEFAULT): Likewise + (TARGET_MEM_FUNCTIONS): Do not need to undefine now. + * config/arm/pe.h: Don't include arm/coff.h. + * config/arm/riscix.h (CPP_SPEC, SUBTARGET_CPP_SPEC): Use + SUBTARGET_CPP_SPEC rather than overiding the arm.h CPP_SPEC definition. + * config/arm/riscix1-1.h: Likewise. + * config/arm/rix-gas.h: Don't include riscix.h. + (DBX_CONTIN_LENGTH): Undef before defining. + * config/arm/semi.h: Don't include aout.h. + * config/arm/semiaof.h: Don't include aof.h. + * config/arm/strongarm-coff.h: Don't include coff.h. + * config/arm/strongarm-pe.h: Don't include strongarm-coff.h and pe.h. + * config/arm/vxarm.h: Don't include arm/coff.h. + * config/arm/xscale-coff.h: Don't include coff.h. + + Fri Nov 16 15:22:35 2001 Richard Kenner + + * config/pa/pa.c: Reflect changes in calling sequences of alter_reg and + emit_cmp_insn. + + 2001-11-16 Andreas Jaeger + + * cfglayout.c (fixup_fallthru_exit_predecesor): Make void, rename + to .... + (fixup_fallthru_exit_predecessor): ... this. + Change callers and prototype. + + 2001-11-16 Bernd Schmidt + + * config/i386/i386.c (ix86_expand_sse_comi): Generate setcc by + hand; don't use gen_setcc_2. + (ix86_expand_builtin): Fix pshufw. + * config/i386/i386.md (maskncmpv4sf3, vmmmaskncmpv4sf3): Special + case UNORDERED to emit the right assembler instruction. + (mmx_pshufw): Lose operand 2. + (cvtsi2ss): Fix representation. + From Graham Stott: + (mmx_clrdi, sse_clrti, stmxcsr, ldmxcsr): Set memory attribute. + + 2001-11-16 Joseph S. Myers + + * doc/include/linux-and-gnu.texi: Remove. + * doc/gnu.texi: New. + * doc/gcc.texi: Include gnu.texi instead of linux-and-gnu.texi. + * Makefile.in ($(docdir)/gcc.info, gcc.dvi): Update dependencies. + + 2001-11-16 Kazu Hirata + + * config/a29k/a29k.c: Fix comment formatting. + * config/a29k/a29k.h: Likewise. + * config/arc/arc.c: Likewise. + * config/arc/arc.h: Likewise. + * config/vax/vax.c: Likewise. + * config/vax/vax.h: Likewise. + * config/we32k/we32k.c: Likewise. + * config/we32k/we32k.h: Likewise. + + 2001-11-16 Jeff Law + + * unroll.c (copy_loop_body): Initialize JUMP_LABEL field after + creating a new jump insn. + + Fri Nov 13 09:06:25 2001 Richard Kenner + + * expr.c (expand_expr, case ADDR_EXPR): Refine test for when to + copy misaligned data. + * varasm.c (assemble_variable): Set alignment into MEM when changed. + + 2001-11-16 Graham Stott + + * optabs.c (prepare_cmp_insn): Correct lossage in last change fix + OPALIGN type. + + 2001-11-16 Olivier Hainque + + * except.c: Support for catching a list of types with a single handler + (struct eh_region): Change type and filter to lists for catch regions. + (mark_eh_region): Mark the filter list for GC also. + (expand_start_catch): Always build a list if argument not NULL and + register each type of the list through add_type_for_runtime. + (duplicate_eh_region_1): Change type into type_list for catch regions. + (assign_filter_values): Assign a filter to each type associated with a + catch region. Assign filter for NULL types in a unique entry in the + filter list. + (build_post_landing_pads): Emit compare and jump for each filter of + the list associated with a catch region. + (reachable_next_level): When the type thrown is known, stop the search + as soon as one type within a catch list matches. Also, a handler is + potentially reachable only if at least one of the types it catches + has not been previously caught. + (collect_one_action_chain): Retrieve the filter for a NULL type list + from the first filter list entry. For non NULL type lists, add an + action record for every filter assigned. + * except.h: Reflect changes in comment before expand_start_catch. + + Fri Nov 16 07:12:51 2001 Richard Kenner + + * expr.c (expand_expr, case ADDR_EXPR): Only copy for misaligned if + BLKmode. + + Fri Nov 16 06:37:05 2001 Andreas Tobler + + * config/sparc/sparc.c: Remove ALIGN arg from emit_cmp_insn. + + 2001-11-16 Jakub Jelinek + + * c-lang.c (finish_file): Don't emit static inline functions if + they weren't referenced. + + 2001-11-15 Stan Shebs + + * expr.c (expand_expr, case COMPONENT_REF): Fix variable ref. + + 2001-11-16 Bryce McKinlay + + * config/s390/s390.md: Remove ALIGN arg from emit_cmp_and_jump_insns + call. + * config/i386/i386.md: Likewise. + + Thu Nov 15 21:40:16 2001 Richard Kenner + + * timevar.c (rtl.h): Include so get fancy abort. + + 2001-11-15 Dale Johannesen + + * config/darwin.h (SELECT_RTX_SECTION): Force address + initializers into 'const' section + * config/rs6000/rs6000.c (rs6000_emit_cmove): Fix mode of + if_then_else to match result, not operands + + Thu Nov 15 17:57:48 2001 Richard Kenner + + * alias.c (nonoverlapping_memrefs): Use REGNO_PTR_FRAME_P. + * emit-rtl.c (change_address): Fix typo in default alignment. + (adjust_address_1): Use mode of NEW, not MODE, when setting size. + * expr.c (highest_pow2_factor, case WITH_RECORD_EXPR): New case. + * rtl.h (REGNO_PTR_FRAME_P): New macro. + + * expr.c (store_field): Pass tree instead of max size; callers changed. + Change handling of alignment. + Only copy to_rtx if is TARGET. + (expand_expr_unaligned): Delete; callers now use expand_expr. + (emit_cmp_insn): No longer take ALIGN parm; all callers changed. + (expand_assignment): Change handling of alignment. + Only copy to_rtx if was original. + (get_inner_reference): No longer return alginment; callers changed. + (expand_expr, case COMPONENT_REF): Change handling of alignment. + (expand_expr, case ADDR_EXPR): Make copy if not sufficiently aligned. + (compare_from_rtx): Delete ALIGN parm; all callers changed. + (do_compare_rtx_and_jump): Likewise. + * expr.h: Reflect above changes. + * tree.h: Likewise. + * dwarf2out.c (loc_descriptor_from_tree): Remove ALIGN parameter + to get_inner_reference. + * builtins.c: Remove ALIGN parm in call to emit_cmp_and_jump_insns. + * doloop.c, except.c, explow.c, loop.c, stmt.c, unroll.c: Likewise. + * optabs.c: Likewise. + (prepare_cmp_insn): Now static; remove ALIGN parm. Callers changed. + (emit_cmp_and_jump_insns): Remove ALIGN parm; all callers changed. + * expmed.c: Remove ALIGN arg from calls to compare_from_rtx, + compare_rtx_and_jump, and emit_cmp_jump_insns. + * fold-const.c: Remove PALIGN in calls to get_inner_reference. + * function.c (assign_stack_temp_for_type): No longer static. + * optabs.h (emit_cmp_insn): Remove ALIGN parm. + (prepare_cmp_insn): Delete declaration. + * rtl.h (assign_stack_temp_for_type): Add declaration. + * config/alpha/alpha.c, config/d30v/d30v.c: Reflect above changes. + * config/clipper/clipper.c, config/h8300/h8300.c: Likewise. + * config/i386/i386.c,config/mips/mips.c: Likewise. + * config/i860/i860.c, config/ia64/ia64.c: Likewise. + * config/rs6000/rs6000.c, config/sh/sh.c: Likewise. + + 2001-11-15 Stan Shebs + + * config/rs6000/rs6000.h: Fix a comment typo. + (RTX_COSTS): Sort processor versions better. + + 2001-11-15 Kazu Hirata + + * config/h8300/h8300.md: Fix insn length of bit insns. + + 2001-11-15 Jason Merrill + + * dwarf2out.c (dwarf2out_finish): Don't abort because of orphan + DIEs if there were errors in the source. + + * config/alpha/alpha-interix.h, config/alpha/elf.h, + config/arm/coff.h, config/i386/djgpp.h, config/i386/i386.c, + config/i386/i386.h, config/i386/sco5.h, config/i960/i960-coff.h, + config/m68k/coff.h, config/m88k/m88k.h, config/m88k/m88k.c, + config/pa/pa64-hpux.h, config/sh/sh.h, config/sparc/litecoff.h, + config/elfos.h, config/lynx.h, config/netware.h, + config/m68hc11/m68hc11.h, config/mcore/mcore-pe.h, + config/s390/linux64.h: Remove definitions of INT_ASM_OP, change + uses to use ASM_LONG. + + 2001-11-15 Alan Matsuoka + + * gensupport.c process_include : Change call to alloca to + xmalloc. + + 2001-11-15 Aldy Hernandez + + * config/rs6000/rs6000.md: Use spaces instead of tabs in output + templates. + + Thu Nov 15 08:36:39 2001 Richard Kenner + + * final.c (alter_subreg): If simplify_subreg can't do anything, + handle REG ourselves and abort for others. + + 2001-11-15 Richard Hodson + + * config/h8300/h8300.c (dosize): Avoid corrupting R3 in interrupt + routines. + + 2001-11-15 Neil Booth + + * fix-header.c (read_scan_file): Update. + + Thu Nov 15 08:36:39 2001 Richard Kenner + + * toplev.c (toplev_main): Don't start timing until after + command-line options are parsed. + + 2001-11-15 Andreas Schwab + + * config.gcc: Set STMP_FIXPROTO and FIXPROTO_DEFINES in target + makefile frag, not host makefile frag. + (m88k-dg-dguxbcs*): Add m88k/t-dgux to tmake_file. + (hppa*): Add pa/t-bsd to tmake_file where no special xmake_file is + used. + (hppa*-*-openbsd*): Don't use nonexitent pa/t-openbsd. + * config/m88k/t-dguxbcs: Remove definitions already in t-dgux. + * config/m88k/t-dgux (STMP_FIXPROTO): Define. + * config/i386/t-cygwin (STMP_FIXPROTO): Define. + * config/i386/t-dgux (STMP_FIXPROTO): Define. + * config/x-interix: Don't define STMP_FIXPROTO and + FIXPROTO_DEFINES. + * config/t-interix: New file, define STMP_FIXPROTO. + * config/i386/x-beos (STMP_FIXPROTO): Don't define here. + * config/i386/t-beos (STMP_FIXPROTO): Define here instead. + * config/t-svr4 (FIXPROTO_DEFINES): Define. + * config/arm/t-riscix (FIXPROTO_DEFINES): Define. + * config/i386/t-sco5 (FIXPROTO_DEFINES): Define. + * config/i386/t-sco5gas (FIXPROTO_DEFINES): Define. + * config/m68k/t-hp3200: Renamed from x-hp3200. + * config/i370/t-oe: Renamed from x-oe. + * config/mips/t-iris: Renamed from x-iris. + * config/pa/t-bsd: Renamed from x-pa. + * config/pa/t-pa-hpux: Renamed from x-pa-hpux. + * config/x-linux, config/i386/x-cygwin, config/i386/x-dgux, + config/m88k/x-dgux, config/x-svr4, config/arm/x-riscix, + config/i386/x-sco5, config/m68k/x-hp320g, config/mips/x-iris6, + config/rs6000/x-cygwin: Remove files. + + * configure.in: Check for target objdump and use that in eh_frame + optimization test. + * configure: Regenerated. + + 2001-11-15 Jakub Jelinek + + * jump.c (squeeze_notes): Return true if no real insns were found. + * rtl.h (squeeze_notes): Adjust prototype. + * cfgcleanup.c (merge_blocks_move_predecessor_nojumps): If + squeeze_notes finds no real instructions, abort. + (merge_blocks_move_successor_nojumps): Likewise. + * loop.c (find_and_verify_loops): Likewise. + * stmt.c (expand_end_case): Likewise. + * ifcvt.c (dead_or_predicable): Return TRUE if squeeze_notes doesn't + find any real instructions. + + * config/ia64/ia64.c (ia64_adjust_cost): Handle SUBREGs. + + * cfgcleanup.c (try_optimize_cfg): If try_simplify_condjump optimized + conditional jump, request updating life into for the block + containing it. Fix a typo which prevented life info update. + Clear blocks bitmap before using it. + + 2001-11-15 Neil Booth + + * c-common.c: Include c-lex.h. + (c_common_lang_init): Change prototype. Call init_c_lex and + init_pragma from here. + * c-common.h (c_common_lang_init): Change prototype. + * c-decl.c (init_decl_processing): Rename. Call c_parse_init. + * c-lang.c (c_init): Change prototype. Update. + (c_init_options): Update. + * c-lex.c (cpp_filename): Remove. + (init_c_lex): Update. Read the main file, and get the original + file name. + (yyparse): Finish the command line options. + * c-parse.in (c_parse_init): Call init_reswords here. + (init_parse): Remove. + * c-tree.h (c_init_decl_processing): New. + * cpphash.c (_cpp_init_hashtable): After initializing the hash + table, populate it. + * cppinit.c (read_original_filename, cpp_finish_options): New. + (cpp_create_reader): New prototype. Defer hash table initialization. + (cpp_start_read): Rename cpp_read_main_file. Initialize the + hash table. Get the original filename. + * cpplib.h (cpp_create_reader): Update. + (cpp_start_read): Remove. + (cpp_read_main_file, cpp_finish_options): New. + * cppmain.c (main, do_preprocessing): Update. + * langhooks.h (struct langhooks): Update init prototype. + * toplev.c (general_init, parse_options_and_default_flags, + process_options, lang_indpendent_init, lang_dependent_init, + init_asm_output): New; perform the bulk of initialization. + (compile_file): Move most of initialization to above functions. + (debug_hooks): Initialize statically. + (set_Wunused): Relocate. + (toplev_main): Move most of initialization to other init functions. + Have a clear logic flow. + * tree.h (init_parse, init_decl_processing): Remove. + objc: + * objc-act.c (objc_init): Update prototype, combine with old + init_parse. + (objc_init_options): Update. + + + 2001-11-15 Andreas Jaeger + + * cfgrtl.c (purge_all_dead_edges): Use int as argument for + portability. + * basic-block.h: Adjust prototype. + + 2001-11-15 Kazu Hirata + + * config/rs6000/aix31.h: Fix comment formatting. + * config/rs6000/beos.h: Likewise. + * config/rs6000/darwin.h: Likewise. + * config/rs6000/eabi.asm: Likewise. + * config/rs6000/linux.h: Likewise. + * config/rs6000/linux64.h: Likewise. + * config/rs6000/lynx.h: Likewise. + * config/rs6000/netbsd.h: Likewise. + * config/rs6000/rs6000.c: Likewise. + * config/rs6000/rs6000.h: Likewise. + * config/rs6000/rs6000.md: Likewise. + * config/rs6000/sol2.h: Likewise. + * config/rs6000/tramp.asm: Likewise. + * config/rs6000/xcoff.h: Likewise. + * config/rs6000/xm-beos.h: Likewise. + + 2001-11-14 Alan Matsuoka + + * rtl.def (INCLUDE) : Define. + * gensupport.c (init_include_reader, process_include, + save_string) : New functions to implement an include facility + in .md files. + * gensupport.h : Add prototype for init_md_reader_args. + * genattr.c genattrtab.c gencodes.c genconfig.c genemit.c + genextract.c genflags.c genopinit.c genoutput.c + genpeep.c genrecog.c: Change call to init_md_reader to + init_md_reader_args. + * md.texi: Document (include "path") and -I directives for RTL + generation tools. + + 2001-11-14 DJ Delorie + + * integrate.c (get_hard_reg_initial_reg): New. + * integrate.h (get_hard_reg_initial_reg): Prototype. + * local-alloc.c (block_alloc): Don't tie pseudos that + represent call-saved hard regs' initial values. + + 2001-11-14 Kaveh R. Ghazi + + * m68k/linux.h: Include not "linux.h" to avoid infinite + recursion. + + 2001-11-14 Roger Sayle + + * fold-const.c (fold): Optimize strlen comparisons against zero. + + 2001-11-14 David O'Brien + + * config.gcc (sparc64-wrs-vxworks*, sparc-*-netbsd*, sparc-*-openbsd*, + sparc-*-chorusos*, sparc-*-elf*, sparc-*-linux*aout*, + sparc-*-linux*libc1*, sparc-*-linux*, sparc-*-lynxos*, sparc-*-rtems*, + sparc-*-rtemself*, sparc-hal-solaris2*, sparc-*-solaris2*, + sparc-*-sunos4.0*, sparc-*-sunos4*, sparc-*-sunos3*, sparc-*-sysv4*, + sparc-*-vxsim*, sparclite-*-aout*, sparclite-*-elf*, sparc86x-*-aout*, + sparc86x-*-elf*, sparc64-*-aout*, sparc64-*-elf*, sparc64-*-linux*): + Include various CPU headers via tm_file. a.out based platforms now + properly include sparc/aout.h. sol2.h usage now implies including + elfos.h, svr4.h, and sparc/sysv4.h. + * config/netbsd.h (TARGET_MEM_FUNCTIONS): Undef before defining it. + Also define to '1'. + * sparc/sparc.h (CPP_PREDEFINES, TARGET_VERSION, WORD_SWITCH_TAKES_ARG, + SELECT_SECTION, ASM_DECLARE_FUNCTION_NAME, TEXT_SECTION_ASM_OP, + DATA_SECTION_ASM_OP, DBX_REGISTER_NUMBER, ASM_OUTPUT_SOURCE_LINE): + Remove. They are a.out specific and belong in sparc/aout.h. + * sparc/aout.h (TARGET_VERSION, WORD_SWITCH_TAKES_ARG, SELECT_SECTION, + ASM_DECLARE_FUNCTION_NAME, TEXT_SECTION_ASM_OP, DATA_SECTION_ASM_OP, + DBX_REGISTER_NUMBER, ASM_OUTPUT_SOURCE_LINE): Define. Moved here from + sparc/sparc.h. + * sparc/litecoff.h (WORD_SWITCH_TAKES_ARG, ASM_DECLARE_FUNCTION_NAME, + TEXT_SECTION_ASM_OP, DATA_SECTION_ASM_OP, DBX_REGISTER_NUMBER): Define. + Moved here from sparc/sparc.h. + * config/sparc/linux-aout.h (DEFAULT_PCC_STRUCT_RETURN): Undef before + defining. + * config/sparc/linux64.h (UNALIGNED_DOUBLE_INT_ASM_OP): Undef before + * config/sparc/lynx.h: Don't include lynx.h. + (SELECT_SECTION): Do not undef. + * config/sparc/openbsd.h: Don't include sparc/sparc.h. + * config/sparc/sol2-sld-64.h: Include sparc/sparc.h, elfos.h, svr4.h, + and sparc/sysv4.h. + * config/sparc/sol2.h: Don't include sparc/sparc.h and sparc/sysv4.h. + * config/sparc/sp64-aout.h (CPP_PREDEFINES): Don't define. Get from + sparc/aout.h now. + * config/sparc/sp64-elf.h (DWARF_DEBUGGING_INFO, DWARF2_DEBUGGING_INFO): + Don't undef, there is no need. + * config/sparc/splet.h (CPP_PREDEFINES): Define. + * config/sparc/sun4o3.h (CPP_PREDEFINES): Likewise. + * config/sparc/sunos4.h (CPP_PREDEFINES): Likewise. + Don't include sparc/sparc.h. + * config/sparc/sysv4.h (WORD_SWITCH_TAKES_ARG, ASM_OUTPUT_SOURCE_LINE, + SELECT_SECTION, ASM_DECLARE_FUNCTION_NAME, TEXT_SECTION_ASM_OP, + DATA_SECTION_ASM_OP): Don't undef, there is no need now. Don't include + elfos.h and svr4.h. + (TARGET_VERSION): Define. + * config/sparc/vxsim.h (TARGET_VERSION): Define. + + Wed Nov 14 19:46:08 CET 2001 Jan Hubicka + + * cfglayout.c (fixup_fallthru_exit_predecesor): New static function. + (cfg_layout_finalize): Use it. + * bb-reorder.c (HAVE_epilogue): Remove. + (make_reorder_chain): Do not care special placement of + last basic block. + + * predict.c (expected_value_to_br_prob): Delete the note + once transformed. + + * c-decl.c (c_expand_body): Fix TV_EXPAND nesting problem; + measure integration time separately. + + Wed Nov 14 12:30:57 2001 Richard Kenner + + * function.c (struct temp_slot): ALIGN now unsigned. + + 2001-11-14 Kazu Hirata + + * config/dsp16xx/dsp16xx.c: Fix comment formatting. + * config/dsp16xx/dsp16xx.h: Likewise. + * config/dsp16xx/dsp16xx.md: Likewise. + + 2001-11-14 Kazu Hirata + + * config/h8300/h8300.c (get_shift_alg): Reorganize the code + that deals with 7-bit shifts in HImode. + + Wed Nov 14 14:17:05 CET 2001 Jan Hubicka + + * dbxout.c (dbxout_symbol_location): Update call of alter_subreg. + * final.c (walk_alter_subreg): Take pointer; update call of alter_subreg. + (final_scan_insn): Update call of alter_subreg. + (cleanup_subreg_operands): Likewise. + (alter_subreg): Rewrite using simplify_subreg. + (output_address, output_operand): Update call of alter_subreg. + * output.h (alter_subreg): Update prototype. + * sdbout.c (sdbout_symbol): Update call of alter_subreg. + * simplify-rtx.c (simplify_subreg): Copy ORIGINAL_REGNO. + * Makefile.in (final.o): Add dependency on expr.h + + Wed Nov 14 06:37:54 2001 Richard Kenner + + * c-lang.c (finish_file): Make I unsigned to eliminate warning. + + 2001-11-13 Jeff Sturm + + * doc/install.texi (sparc-*-linux*): Mention requirements for + binutils and glibc. + + 2001-11-14 Joseph S. Myers + + * Makefile.in (POD2MAN): Don't include --section=1. + (manext): Rename to man1ext. All users changed. + (man7ext): New. + (man7dir): New. + (generated-manpages): Also depend on $(docdir)/gfdl.7, + $(docdir)/gpl.7, and $(docdir)/fsf-funding.7. + ($(docdir)/gcov.1, $(docdir)/cpp.1, $(docdir)/gcc.1): Include + --section=1 in calls to $(POD2MAN). + ($(docdir)/gfdl.7, $(docdir)/gpl.7, $(docdir)/fsf-funding.7): New. + (maintainer-clean, install, uninstall): Handle the new man pages. + ($(docdir)/cpp.info, cpp.dvi): Depend on fdl.texi. + (installdirs): Create man7dir. + * doc/cpp.texi: Include GFDL in this manual. In the man page, + refer to gfdl(7) for the GFDL. Apply Front Cover and Back Cover + texts to man page. Include gpl(7), gfdl(7) and fsf-funding(7) in + the SEE ALSO man page section. + * doc/gcov.texi: Apply GFDL to man page. Include gpl(7), gfdl(7) + and fsf-funding(7) in the SEE ALSO man page section. + * doc/invoke.texi: Apply GFDL to man page. Include gpl(7), + gfdl(7) and fsf-funding(7) in the SEE ALSO man page section. + * doc/include/fdl.texi, doc/include/funding.texi, + doc/include/gpl.texi: Adjust for conversion by texi2pod.pl. + * doc/.cvsignore: Add gfdl.7, gpl.7 and fsf-funding.7. + + 2001-11-13 Richard Henderson + + * dwarf2asm.c (dw2_force_const_mem): Set PUBLIC or STATIC + as appropriate for the artificial decl. + + 2001-11-13 Richard Henderson + + * loop.c (combine_movables): Turn off combination until + move_movables validation bugs are fixed. + + 2001-11-13 DJ Delorie + + * config.gcc (powerpc|rs6000): Set default cpp options based + on --with-cpu settings. + * config/rs6000/softfloat.h: New. + + 2001-11-13 Kazu Hirata + + * config/h8300/h8300.c (shift_alg_si): Use special code for + 25-bit shifts on H8/S. + (get_shift_alg): Generate special code for 25-bit shifts on + H8/S. + + 2001-11-13 Jakub Jelinek + + * emit-rtl.c (adjust_address_1): Add ADJUST argument. + (adjust_automodify_address_1): New. + * expr.h (adjust_address, adjust_address_nv): Adjust. + (adjust_automodify_address, adjust_automodify_address_nv): Define. + (adjust_address_1): Update prototype. + (adjust_automodify_address_1): Add prototype. + * expr.c (move_by_pieces_1): Use adjust_automodify_address. + (store_by_pieces_2): Likewise. + + Tue Nov 13 05:45:40 2001 Richard Kenner + + * Makefile.in (explow.o): Now depends on ggc.h. + * explow.c (ggc.h): Include. + (set_stack_check_libfunc): Mark stack_check_libfunc as ggc root. + + * Makefile.in (expr.o): Depends on insn-attr.h. + * expr.c (insn-attr.h): New include. + (force_operand): If INSN_SCHEDULING, deal with paradoxical SUBREG + of MEM. + (highest_pow2_factor, case INTEGER_CST): Handle negative values. + (expand_expr): Remove unneeded mark_temp_addr_taken calls and + clean up related usage in ADDR_EXPR. + (expand_expr_unaligned): Likewise. + + * emit-rtl.c (change_address): Fix typo in alias setting. + + 2001-11-13 Kaveh R. Ghazi + + * Makefile.in (cfgcleanup.o): Depend on insn-config.h + + 2001-11-12 Craig Rodrigues + + PR bootstrap/3451 + * c-pragma.c: Rename macros BAD, BAD2, BAD_ACTION to + GCC_BAD, GCC_BAD2, GCC_BAD_ACTION. + + 2001-11-12 David O'Brien + + * config.gcc (sparc-tti-*, sparc64-wrs-vxworks*, sparc-wrs-vxworks*, + sparclite-wrs-vxworks*, sparc-*-aout*, sparc-*-netbsd*, + sparc-*-chorusos*, sparc-*-linux*aout*, sparc-*-linux*libc1*, + sparc-*-linux*, sparc-*-lynxos*, sparc-*-rtemsaout*, sparc-*-rtems*, + sparc-*-rtemself*, sparc-*-solaris2*, sparc-*-sunos3*, sparc-*-sysv4*, + sparc-*-vxsim*, sparclet-*-aout*, sparclite-*-coff*, sparclite-*-aout*, + sparc86x-*-aout*, sparc86x-*-elf*, sparc64-*-aout*, sparc64-*-elf*, + sparc64-*-linux*): Include various CPU headers via tm_file. + * config/svr3.h (ASM_OUTPUT_IDENT): Undef before defining it. + (SELECT_SECTION): Likewise. + (SELECT_RTX_SECTION): Likewise. + * config/sparc/sparc_bi.h: New file. + * config/sparc/aout.h: Don't include sparc/sparc.h and aoutos.h. + * config/sparc/linux-aout.h: Likewise. + * config/sparc/linux.h: Don't include sparc/sysv4.h. + * config/sparc/linux64.h: Likewise. + (SPARC_BI_ARCH): Don't define. sparc_bi.h will do it instead. + * config/sparc/lite.h: Don't include sparc/sparc.h and gofast.h. + * config/sparc/litecoff.h: Don't include sparc/lite.h, svr3.h, + and dbxcoff.h + (ASM_OUTPUT_IDENT): Do not #undef. + (SELECT_SECTION): Likewise. + (SELECT_RTX_SECTION): Likewise. + * config/sparc/liteelf.h: Don't include gofast.h. + * config/sparc/lynx-ng.h: Don't include sparc/sparc.h and lynx-ng.h. + * config/sparc/lynx.h: Don't include sparc/sparc.h. + * config/sparc/pbd.h: Likewise. + * config/sparc/netbsd.h: Don't include sparc/sparc.h and netbsd.h. + * config/sparc/rtems.h: Don't include sparc/aout.h and rtems.h. + * config/sparc/rtemself.h: Don't include rtems.h. + * config/sparc/sol2-64.h: Don't include sparc/sol2-sld-64.h. + * config/sparc/sol2-sld-64.h (SPARC_BI_ARCH): Don't define, include + sparc_bi.h instead. + * config/sparc/sol2-sld.h: Don't include sparc/sol2.h. + * config/sparc/sol2.h: Include sparc/sparc.h directly. + * config/sparc/sp64-aout.h: Don't include sparc/sparc.h and aoutos.h. + * config/sparc/sp64-elf.h: Don't include sparc/sol2.h. + * config/sparc/sp86x-aout.h: Don't include sparc/sparc.h and gofast.h. + * config/sparc/sp86x-elf.h: Don't include gofast.h. + * config/sparc/splet.h: Don't include sparc/aout.h. + * config/sparc/sun4o3.h: Don't include sparc/sparc.h. + * config/sparc/sysv4.h: Don't include sparc/sparc.h directly. + * config/sparc/vxsim.h: Don't include sparc/sysv4.h. + * config/sparc/vxsparc.h: Don't include sparc/aout.h and gofast.h. + * config/sparc/vxsparc64.h: Don't include gofast.h. + (SPARC_BI_ARCH): Don't define. sparc_bi.h will do it instead. + + 2001-11-12 Joseph S. Myers + + * doc/standards.texi: Mention C99 TC1. + + 2001-11-12 Kaveh R. Ghazi + + * mips-protos.h (mips_output_conditional_branch): Const-ify. + * mips.c (mips_output_conditional_branch): Likewise. + + 2001-11-12 Kazu Hirata + + * config/h8300/h8300.c (shift_alg_si): Use special code for + 15-bit logical shifts and 31-bit logical shifts. + (get_shift_alg): Generate special code for 15-bit and 31-bit + logical shifts. + + 2001-11-12 Kazu Hirata + + * config/h8300/h8300.c (shift_alg_qi): Use rotations when + doing 6-bit logical shifts on H8/S. + (shift_alg_qi): Use special code for 21-bit shifts on H8/S. + (get_shift_alg): Generate special code for 21-bit shifts on + H8/S. + + 2001-11-12 Kazu Hirata + + * config/h8300/h8300.c (get_shift_alg): Remove a redundant + label. + + Mon Nov 12 11:58:26 2001 Richard Kenner + + * alias.c (nonoverlapping_memrefs_p): Only update size from memref + if both size and offset known. + + 2001-11-12 David O'Brien + + * config/ia64/freebsd.h: Fix misspelling. + + 2001-11-12 Joseph S. Myers + + * doc/gcc.texi: Move several chapters out to ... + * doc/configterms.texi, doc/fragments.texi, doc/hostconfig.texi, + doc/include/linux-and-gnu.texi, doc/interface.texi, + doc/makefile.texi, doc/passes.texi, doc/portability.texi: + ... here. New files. + * doc/gcc.texi, doc/contrib.texi: Move section headings into + contrib.texi. + * Makefile.in ($(docdir)/gcc.info, gcc.dvi): Update dependencies. + + 2001-11-12 Kazu Hirata + + * config/alpha/alpha-interix.h: Fix comment formatting. + * config/alpha/alpha.c: Likewise. + * config/alpha/alpha.h: Likewise. + * config/alpha/alpha32.h: Likewise. + * config/alpha/freebsd.h: Likewise. + * config/alpha/unicosmk.h: Likewise. + * config/alpha/vms.h: Likewise. + + 2001-11-12 Kazu Hirata + + * config/h8300/h8300.c (get_shift_alg): Remove redundant code. + + 2001-11-12 Jakub Jelinek + + * dbxout.c (dbxout_symbol_location): Avoid emitting invalid register + numbers. + + Mon Nov 12 05:18:42 2001 Richard Kenner + + * emit-rtl.c (set_mem_attributes): If making object, can set alignment + from type. + (replace_equiv_address): Call update_temp_slot_address. + + * dwarf2out.c (loc_descriptor_from_tree, case COMPOUND_EXPR): New case. + + * alias.c (nonoverlapping_memrefs_p): Handle DECL_RTL being a CONCAT. + + 2001-11-12 Kazu Hirata + + * config/h8300/h8300.c (shift_alg_qi): New. + (shift_alg_hi): Likewise. + (shift_alg_si): Likewise. + (get_shift_alg): Change the type of count to unsigned int. + Use the tables. + + 2001-11-11 Alexandre Oliva + + * Makefile.in (c-lang.o): Depend on $(VARRAY_H). + * c-decl.c (c_expand_body): Take argument can_defer_p. Use it + to decide whether to defer a function. + (finish_function): Adjust. + (c_expand_deferred_function): New function. + * c-lang.c (deferred_fns): New variable. + (c_init): Initialize it, and mark it as a root. + (defer_fn): New function. + (finish_file): Expand all deferred functions. + * c-tree.h (defer_fn): Declare. + (c_expand_deferred_function): Likewise. + * objc/Make-lang.in (objc-act.o): Depend on $(VARRAY_H). + * objc-act.c (deferred_fns): New variable. + (objc_init): Initialize it, and mark it as a root. + (defer_fn): New function. + (finish_file): Expand all deferred functions. + + 2001-11-11 Kaveh R. Ghazi + + * alpha.c (unicosmk_special_name): Prototype. + (unicosmk_ssib_name): Delete unused variable. + * alpha/unicosmk.h (common_section, ssib_section): Prototype. + * alpha/vms.h (PREFIX): Undef before defining. + * arm/pe.h (SUBTARGET_NAME_ENCODING_LENGTHS): Likewise. + * i370/i370.c (mvs_hash_alias): Prototype. Wrap with macro + controlling usage. Const-ify. + (alias_number): Delete unused variable. + * m32r/m32r.c (m32r_sched_init): Add missing argument. + (m32r_expand_block_move): Fix uninitialized warnings. + * mn10300/mn10300.h (REGNO_IN_RANGE_P): Fix 'unsigned >=0 is + always true' warnings. + * openbsd.h (TARGET_MEM_FUNCTIONS): Don't redefine. + * sh/sh.c: Include "integrate.h". + (output_far_jump): Fix uninitialized warning. + * final.c (shorten_branches): Avoid automatic aggregate + initialization. + * integrate.c (subst_constants): Likewise. + + 2001-11-11 Kazu Hirata + + * config/h8300/h8300.c (shift_alg): Remove SHIFT_MAX. + (get_shift_alg): Remove redundant code. + + 2001-11-11 Kazu Hirata + + * config/pa/milli64.S: Fix comment formatting. + * config/pa/pa-64.h: Likewise. + * config/pa/pa-linux.h: Likewise. + * config/pa/pa-protos.h: Likewise. + * config/pa/pa.c: Likewise. + * config/pa/pa.h: Likewise. + * config/pa/pa32-linux.h: Likewise. + * config/pa/pa32-regs.h: Likewise. + * config/pa/pa64-hpux.h: Likewise. + * config/pa/pa64-regs.h: Likewise. + * config/pa/som.h: Likewise. + + 2001-11-11 Joseph S. Myers + + * doc/gcc.texi: Move several chapters out to ... + * doc/bugreport.texi, doc/contribute.texi, doc/frontends.texi, + doc/service.texi, doc/standards.texi, doc/trouble.texi, + doc/vms.texi: ... here. New files. + * Makefile.in ($(docdir)/gcc.info, gcc.dvi): Update dependencies. + + 2001-11-11 Joseph S. Myers + + * ChangeLog.2, ChangeLog.3, ChangeLog.4, ChangeLog.5, ChangeLog, + cfg.c, cfganal.c, cfgcleanup.c, cfglayout.c, cfgloop.c, cfgrtl.c, + collect2.c, combine.c, config.in, configure, configure.in, + conflict.c, dwarf2out.c, dwarfout.c, except.c, final.c, flow.c, + genattrtab.c, ggc-page.c, jump.c, lcm.c, predict.c, reg-stack.c, + reload1.c, rtlanal.c, sched-rgn.c, toplev.c, unwind-dw2-fde.h: Fix + spelling errors. + + Sun Nov 11 05:56:01 2001 Richard Kenner + + * config/rs6000/rs6000.c (rs6000_hash_constant, toc_hash_eq): + Adjust operand number in CONST_DOUBLE. + + * expmed.c (extract_bit_field): No longer pass in alignment. + (extract_fixed_bit_field, extract_split_bit_field): Likewise. + (store_bit_field, store_fixed_bit_field, store_split_bit_field): + Likewise. + * expr.c (store_constructor, store_constructor_field): Likewise. + (store_field, emit_group_load, emit_group_store): Likewise. + * expr.h (emit_group_load, emit_group_store): Delete ALIGN parm. + (store_bit_field, extract_bit_field): Likewise. + * calls.c, expr.c, function.c: Change calls to above functions. + * ifcvt.c, stmt.c: Likewise. + + * alias.c (nonoverlapping_memrefs_p): Not overlapping if one base is + constant and one is on frame. + If know memref offset, adjust size from decl. + + 2001-11-11 Kaveh R. Ghazi + + * alpha/unicosmk.h (ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT): Fix + format specifier warning. + * convex.h (ASM_OUTPUT_BYTE): Likewise. + * elfos.h (ALIGN_ASM_OP): Undef before defining. + * i386/att.h (ASM_GENERATE_INTERNAL_LABEL): Fix format specifier + warning. + * i386/bsd.h (ASM_GENERATE_INTERNAL_LABEL): Likewise. + * i386/gas.h (ASM_GENERATE_INTERNAL_LABEL): Likewise. + * i386-interix.h (gen_stdcall_suffix): Prototype. + * i386.h (ASM_OUTPUT_BYTE): Fix format specifier warning. + * i386elf.h (ASM_OUTPUT_FLOAT, ASM_OUTPUT_DOUBLE, + ASM_OUTPUT_LONG_DOUBLE): Likewise. + * i386/interix.c (gen_stdcall_suffix): Const-ify. + * i386/next.h (ASM_OUTPUT_LONG_DOUBLE, ASM_OUTPUT_DOUBLE, + ASM_OUTPUT_FLOAT, ASM_GENERATE_INTERNAL_LABEL): Fix format + specifier warnings. + * i386/osfrose.h (ASM_GENERATE_INTERNAL_LABEL): Likewise. + * i386/ptx4-i.h (ASM_OUTPUT_FLOAT, ASM_OUTPUT_DOUBLE, + ASM_OUTPUT_LONG_DOUBLE): Likewise. + * i386/sco5.h (ASM_GENERATE_INTERNAL_LABEL): Likewise. + * i386/sequent.h (ASM_GENERATE_INTERNAL_LABEL): Likewise. + * i386/sun386.h (ASM_GENERATE_INTERNAL_LABEL): Likewise. + * i386/svr3dbx.h (ASM_GENERATE_INTERNAL_LABEL): Likewise. + * m68k/3b1.h (ASM_OUTPUT_DOUBLE, ASM_OUTPUT_LONG_DOUBLE, + ASM_OUTPUT_FLOAT, ASM_GENERATE_INTERNAL_LABEL): Likewise. + * m68k/altos3068.h (ASM_OUTPUT_FLOAT_OPERAND): Likewise. + * m68k/amix.h (ASM_OUTPUT_ASCII, ASM_GENERATE_INTERNAL_LABEL): + Likewise. + * m68k/atari.h (ASM_OUTPUT_ASCII, ASM_GENERATE_INTERNAL_LABEL): + Likewise. + * m68k/crds.h (ASM_OUTPUT_DOUBLE, PRINT_OPERAND): Likewise. + * m68k/dpx2.h (ASM_OUTPUT_LONG_DOUBLE, ASM_OUTPUT_DOUBLE, + ASM_OUTPUT_FLOAT, ASM_OUTPUT_BYTE, ASM_OUTPUT_FLOAT_OPERAND): + Likewise. + * m68k/hp320.h (ASM_OUTPUT_LONG_DOUBLE, ASM_OUTPUT_BYTE): + Likewise. + * m68k.h (ASM_GENERATE_INTERNAL_LABEL, ASM_OUTPUT_BYTE): + Likewise. + * m68k/m68kv4.h (ASM_OUTPUT_ASCII): Delete unused variable. + * m68k/mot3300.h (ASM_OUTPUT_BYTE): Fix format specifier warning. + * m68k/news.h (PRINT_OPERAND): Likewise. + * m68k/next.h (ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT, + ASM_OUTPUT_FLOAT_OPERAND, ASM_OUTPUT_DOUBLE_OPERAND): Likewise. + * m68k/next21.h (ASM_OUTPUT_FLOAT_OPERAND): Likewise. + * m68k/plexus.h (ASM_SPEC): Insert space between macro name and + definition. + * m68k/sgs.h (ASM_OUTPUT_LONG_DOUBLE, ASM_OUTPUT_DOUBLE, + ASM_OUTPUT_FLOAT, ASM_OUTPUT_ASCII, ASM_OUTPUT_FLOAT_OPERAND, + ASM_OUTPUT_DOUBLE_OPERAND): Fix format specifier warnings. + * m68k/sun3.h (ASM_OUTPUT_FLOAT_OPERAND): Likewise. + * m68k/tower-as.h (ASM_GENERATE_INTERNAL_LABEL, ASM_OUTPUT_DOUBLE, + ASM_OUTPUT_LONG_DOUBLE, ASM_OUTPUT_FLOAT, ASM_OUTPUT_BYTE, + PRINT_OPERAND): Likewise. + * m88k/m88k.h (ASM_GENERATE_INTERNAL_LABEL, ASM_OUTPUT_BYTE): + Likewise. + * mips/elf.h (PUT_SDB_SIZE, ASM_DECLARE_OBJECT_NAME): Likewise. + * mips/elf64.h (PUT_SDB_SIZE, ASM_DECLARE_OBJECT_NAME): Likewise. + * mips/iris5gas.h (PUT_SDB_SIZE): Likewise. + * mips/linux.h (ASM_DECLARE_OBJECT_NAME): Likewise. + * mips.c (mips_output_external_libcall): Mark parameter with + ATTRIBUTE_UNUSED. + (mips_asm_file_start): Move variable into the scope where it's + used. + * mips.h (PUT_SDB_INT_VAL, PUT_SDB_SIZE): Likewise. + * mips/netbsd.h (ASM_DECLARE_OBJECT_NAME): Likewise. + * mips/sni-gas.h (PUT_SDB_SIZE): Likewise. + * ns32k/encore.h (ASM_GENERATE_INTERNAL_LABEL): Likewise. + * ns32k.c (print_operand): Likewise. + * pa.c (print_operand, output_div_insn): Likewise. + * pa.h (ASM_OUTPUT_MI_THUNK, ASM_GENERATE_INTERNAL_LABEL, + ASM_OUTPUT_BYTE, PRINT_OPERAND_ADDRESS): Likewise. + * pa/pa64-hpux.h (UNIQUE_SECTION): Const-ify. + * sparc/linux.h (ASM_GENERATE_INTERNAL_LABEL): Fix format + specifier warnings. + * sparc/linux64.h (ASM_GENERATE_INTERNAL_LABEL): Likewise. + * sparc/pbd.h (ASM_GENERATE_INTERNAL_LABEL): Likewise. + (ASM_OUTPUT_SOURCE_LINE): Don't list macro arguments in undef. + * sparc/vxsim.h (ASM_GENERATE_INTERNAL_LABEL): Fix format + specifier warnings. + * svr3.h (ASM_GENERATE_INTERNAL_LABEL): Likewise. + + * sdbout.c (sdbout_end_epilogue): Mark parameter with + ATTRIBUTE_UNUSED. + * varasm.c (assemble_global): Likewise. + + 2001-11-11 H.J. Lu + + * config.gcc: Add "elfos.h svr4.h" to $tm_file for Linux/mips. + + Sun Nov 11 01:26:00 CET 2001 Jan Hubicka + + * final.c (*_MAX_SKIP): Use *_max_skip variables. + * flags.h (align_loops_max_skip, align_jumps_max_skip, + align_labels_max_skip): New global variables. + * toplev.c (align_loops_max_skip, align_jumps_max_skip, + align_labels_max_skip): New global variables. + (toplev_main): Set new variables. + * i386.c (override_options): Set max_skip values. + + 2001-11-10 Geoffrey Keating + + * doc/tm.texi (Label Output): Document ASM_OUTPUT_LABEL_REF. + * final.c (output_addr_const): Use ASM_OUTPUT_LABEL_REF. + * config/stormy16/stormy16.c (xstormy16_print_operand): For '%C', + don't print an @fptr for labels either. + (xstormy16_output_addr_vec): Don't print @fptr here. + * config/stormy16/stormy16.h (ASM_OUTPUT_LABEL_REF): New macro. + + Sat Nov 10 08:50:50 2001 Jeffrey A Law (law@cygnus.com) + + * ssa-ccp.c (examine_flow_edges): Use old-style definition, not + an ANSI/ISO definitino. + (ssa_const_prop): Likewise. + + 2001-11-10 Aldy Hernandez + + * config/rs6000/rs6000.c (rs6000_reg_names): Remove leading "v" or + altivec registers. + + 2001-11-09 Kaveh R. Ghazi + + * cppexp.c (parse_number): Use ISXDIGIT/hex_value. + * cpplex.c (hex_digit_value): Use hex_p/hex_value. + * cppmain.c (general_init): Call hex_init. + * tradcif.y (parse_number): Use TOLOWER/ISXDIGIT/hex_value/hex_p. + + * config.gcc (i[34567]86-dg-dgux*): Don't set `out_file'. + + * i386/dgux.h (ASM_FILE_START): Set to the meaningful portions + of dgux.c:output_file_start(). + + * i386/dgux.c: Delete file. + + 2001-11-09 Richard Henderson + + * config/alpha/alpha.c (decl_in_text_section): New. + (current_file_function_operand): Use it. + (alpha_encode_section_info, alpha_end_function): Likewise. + + 2001-11-07 David O'Brien + + * config.gcc: Add FreeBSD/IA-64 target. Expand config/i64/elf.h headers. + * config/i64/ia64.h (TARGET_VERSION,ASM_SPEC,LINK_SPEC): Remove, + they are OS specific. Use CPP_CPU_SPEC rather than CPP_PREDEFINES, + so OS specific files and use CPP_PREDEFINES for their needs. + * config/i64/elf.h (TARGET_VERSION): Add. Also, move inclusion of + target headers to tm_file. + * config/ia64/aix.h (TARGET_VERSION): Likewise. + * config/ia64/hpux.h (TARGET_VERSION): Likewise. + * config/ia64/linux.h (TARGET_VERSION): Likewise. + (FUNCTION_PROFILER): Remove. + * config/ia64/ia64.h (FUNCTION_PROFILER): Update definition using the + version in config/ia64/linux.h. + * config/ia64/freebsd.h: New file. + * config/freebsd.h: Tidy up. + (_USING_CONFIG_FREEBSD): Define. + (FBSD_CPP_PREDEFINES): Add __KPRINTF_ATTRIBUTE__. + (FBSD_CPP_SPEC): Define generic FreeBSD spec. + (FBSD_STARTFILE_SPEC): Likewise. + (FBSD_ENDFILE_SPEC): Likewise. + (FBSD_LIB_SPEC): Likewise. + (WCHAR_UNSIGNED): Undefine, FreeBSD's wchars are signed. + (USER_LABEL_PREFIX): Define to ELF compatible value as some CPU headers + set an ELF-improper one. + + 2001-11-09 John David Anglin + + * pa.c (emit_move_sequence): Use cint_ok_for_move to check whether a + constant can be loaded in a single instruction to a register. When + loading immediate constants, use PLUS instead of HIGH/LO_SUM. Use + depdi for insertion of most significant 32-bits on 64-bit hosts. + * pa.h (LEGITIMATE_CONSTANT_P): Accept constants that can be built + with ldil/ldo/depdi instruction sequence on 64-bit hosts. + * pa.md: New addmove pattern for adding constant_int to HImode + register and moving result to HImode register. Remove HImode HIGH + and LO_SUM patterns. + + 2001-11-09 Neil Booth + + * Makefile.in: Update. + * c-decl.c (print_lang_decl, print_lang_type): Remove. + (print_lang_identifier): Rename c_print_identifier. + * c-lang.c (LANG_HOOKS_PRINT_IDENTIFIER, LANG_HOOKS_SET_YYDEBUG): New. + (print_lang_statistics, lang_print_xnode): Remove. + * c-parse.in (set_yydebug): Rename c_set_yydebug. + * c-tree.h (c_set_yydebug, c_print_identifier): New. + * langhooks-def.h (lhd_print_tree_nothing, lhd_set_yydebug): New. + LANG_HOOKS_PRINT_STATISTICS, LANG_HOOKS_PRINT_XNODE, + LANG_HOOKS_PRINT_DECL, LANG_HOOKS_PRINT_TYPE, + LANG_HOOKS_PRINT_IDENTIFIER, LANG_HOOKS_SET_YYDEBUG): New. + (LANG_HOOKS_INITIALIZER): Update. + * langhooks.h (struct lang_hooks): New members. + (lang_print_tree_hook): New. + * langhooks.c (lhd_print_tree_nothing, lhd_set_yydebug): New. + * print-tree.c: Include langhooks.h. + (print_node): Update. + * toplev.c (decode_d_option): Update. + * tree.c: Include langhooks.h. + (dump_tree_statistics): Update. + * tree.h (print_lang_statistics, print_lang_decl, print_lang_type, + print_lang_identifier, set_yydebug, lang_print_xnode): Remove. + objc: + * objc-act.c (LANG_HOOKS_PRINT_IDENTIFIER, + LANG_HOOKS_SET_YYDEBUG): Override. + (lang_print_xnode, print_lang_statistics): Remove. + + 2001-11-09 Richard Henderson + + * dwarf2asm.c (dw2_force_const_mem): Invoke STRIP_NAME_ENCODING + on the symbol string. + + 2001-11-09 Kaveh R. Ghazi + + * pa/elf.h (ASM_DECLARE_FUNCTION_NAME, + ASM_OUTPUT_EXTERNAL_LIBCALL): Undef before defining. + * config.gcc (hppa1.1-*-rtems*): Remove duplicate clause. + + * clipper.h (ASM_OUTPUT_REG_POP): Fix typo. + + * tlink.c (recompile_files): Copy strings passed to `putenv'. + + 2001-11-09 Geoffrey Keating + + * tree.h (TYPE_VOLATILE): Trap use not on TYPEs. + (TYPE_READONLY): Likewise. + + * flow.c (insn_dead_p): Allow for AUTO_INC notes all the time. + + * config/stormy16/stormy16.h (ASM_SPEC): Revert last change, + don't pass --gdwarf2 to the assembler if the compiler will also + provide debug info. + + * config/stormy16/stormy16.c (xstormy16_expand_casesi): + Don't change INDEX. + + Fri Nov 9 17:51:09 2001 Richard Kenner + + * alias.c (nonoverlapping_memrefs_p): New function. + (true_dependence, canon_true_depenence, write_dependence_p): Call it. + + * emit-rtl.c (set_mem_attributes): Get alignments for constants. + + 2001-11-09 Aldy Hernandez + + * rs6000.h (REG_CLASS_CONTENTS): Add VRSAVE bit to ALL_REGS. + (CONDITIONAL_REGISTER_USAGE): Disable AltiVec registers unless + generating altivec code. + (FIXED_REGISTERS): VRSAVE is fixed. + (CALL_USED_REGISTERS): VRSAVE is call used. + + 2001-11-09 Jason Eckhardt + + * config/mips/mips.c (mips_output_conditional_branch): Do not hard + code the branch target as ".+16/.+12", but rather use labels. + + Fri Nov 9 11:27:42 2001 Jeffrey A Law (law@cygnus.com) + + * config/pa/milli64.S: Use %r25 and %r0 instead of arg1 and r0 + to work around limitations of certain versions of GAS. + + * pa.md (mulsi3): Remove PA64 hack to work around SUBREG issues. + (muldi3): Update due to SUBREG_BYTE changes. + (casesi): Similarly. + + 2001-11-09 Zack Weinberg + + * doc/invoke.texi: Remove comment referring to -xf77-version. + + 2001-11-09 Kazu Hirata + + * config/convex/convex.c: Fix comment formatting. + * config/convex/convex.h: Likewise. + + 2001-11-08 Zack Weinberg + + * Makefile.in (.po.pox): Look both in srcdir and builddir + for $(PACKAGE).pot. + (po/$(PACKAGE).pot): Don't move-if-change the new potfile over + to the source directory. + + 2001-11-09 Ben Elliston + Michael Meissner + Andrew MacLeod + Richard Henderson + Nick Clifton + Catherine Moore + + * m32r.c: Add support for m32rx processor. + * m32r.h: Ditto. + * m32r.md: Ditto. + * t-m32r: Ditto. + * m32r-protos.h: Add prototypes for m32rx functions. + * doc/invoke.texi: Document -m32rx option. + + 2001-11-09 Jakub Jelinek + + * config/sparc/sparc.md (movdf): Avoid calling validize_mem during + or after reload. + + 2001-11-09 Gerald Pfeifer + + * doc/install.texi2html: Use $MAKEINFO --no-split. + + 2001-11-09 Andreas Schwab + + * Makefile.in ($(HOST_PREFIX_1)rtl.o, + $(HOST_PREFIX_1)print-rtl.o, $(HOST_PREFIX_1)bitmap.o, + $(HOST_PREFIX_1)vfprintf.o, $(HOST_PREFIX_1)doprint.o, + $(HOST_PREFIX_1)strstr.o, $(HOST_PREFIX_1)errors.o, + $(HOST_PREFIX_1)ggc-none.o): Update dependencies. + + 2001-11-09 H.J. Lu + + * config/mips/mips.c (mips_output_function_prologues): Cast + `tsize' to long for output. + + 2001-11-09 Neil Booth + + * c-lang.c (LANG_HOOKS_NAME): New. + (lang_hooks): Constify. + (c_init_options): Update. + (lang_identify): Remove. + * c-parse.in (language_string): Remove. + * dbxout.c: Include langhooks.h. + (dbxout_symbol_location): Update. + * dwarf2out.c: Include langhooks.h. + (gen_compile_unit_die): Update. + * dwarfout.c: Include langhooks.h. + (prototyped_attribute, output_compile_unit_die): Update. + * langhooks-def.h (LANG_HOOKS_NAME, LANG_HOOKS_IDENTIFIER_SIZE): New. + (LANG_HOOKS_INITIALIZER): Update. + * langhooks.h (struct lang_hooks): New members. Constify. + * stringpool.c: Don't include toplev.h. + (set_identifier_size): Remove. + * toplev.c (toplev_main): Initialize identifier size. + (print_version): Update. + * tree.h (language_string, init_lex, lang_identify, + set_identifier_size): Remove. + * Makefile.in: Update dependencies. + * config/darwin.c: Include langhooks.h. + (func_name_maybe_scoped): Update. + * config/darwin.h (ASM_END_FILE): Update. + * config/nextstep.h (ASM_END_FILE): Update. + * config/nextstep21.h (ASM_END_FILE): Update. + * config/i386/sun386.h (ASM_END_FILE): Update. + * config/rs6000/rs6000.c (ASM_END_FILE): Include langhooks.h. + (rs6000_output_function_epilogue): Update. + objc: + * objc-act.c (LANG_HOOKS_NAME): Override. + (struct lang_hooks): Constify. + (objc_init_options): Update. + (lang_identify): Remove. + + Fri Nov 9 00:25:18 EST 2001 John Wehle (john@feith.com) + + * fold-const.c (lshift_double): Honor PREC. + (rshift_double): Likewise. + + 2001-11-08 Kazu Hirata + + * config/1750a/1750a.c: Fix comment formatting. + * config/1750a/1750a.h: Likewise. + + 2001-11-08 Phil Edwards + + * configure.in (--enable-languages): Be more permissive about + syntax. Check for empty lists better. Warn about $LANGUAGES. + * configure: Regenerated. + + 2001-11-08 Richard Henderson + + * dwarf2asm.c (dw2_force_const_mem): Fix typo. + + 2001-11-08 Geoffrey Keating + + * config.gcc: Rename stormy16 to xstormy16. + * config/stormy16/stormy-abi: Likewise. + * config/stormy16/stormy16-protos.h: Likewise. + * config/stormy16/stormy16.c: Likewise. + * config/stormy16/stormy16.h: Likewise. + * config/stormy16/stormy16.md: Likewise. + + 2001-11-06 Geoffrey Keating + + * tree.h (TYPE_VOLATILE): Add enable-checking code. + (TYPE_READONLY): Likewise. + + Thu Nov 8 18:00:55 2001 Richard Kenner + + * reload1.c (reload): Don't delete equiv insn if can throw. + + * expr.c (emit_block_move): If X is readonly emit CLOBBER for it. + (clear_storage): Likewise, for OBJECT. + + Thu Nov 8 16:23:51 2001 Jeffrey A Law (law@cygnus.com) + + * pa.c (emit_move_sequence): Fix SUBREG expression to + use proper byte offset when extending a constant from + SImode to DImode. + + 2001-11-09 Jakub Jelinek + + * cfgrtl.c (purge_dead_edges): Remove REG_EH_REGION note for insns + which cannot throw. + + Thu Nov 8 18:00:55 2001 Richard Kenner + + * explow.c (convert_memory_address, case SUBREG): Only return + inner object if SUBREG_PROMOTED_VAR_P or known to be pointer. + + 2001-11-08 Richard Henderson + + * Makefile.in (GCC_FOR_TARGET): Add build_tooldir/sys-include. + (CROSS_SYSTEM_HEADER_DIR): Use build_tooldir not tooldir. + (ORDINARY_FLAGS_TO_PASS, stmp-fixinc): Likewise. + + 2001-11-08 Aldy Hernandez + + * config/rs6000/rs6000.h (ASM_CPU_SPEC): Add -maltivec. + + 2001-11-08 Jakub Jelinek + + * dwarf2out.c (debug_str_hash): New. + (struct indirect_string_node): New. + (struct dw_val_struct): Change type of val_str to it. + (DEBUG_STR_SECTION_FLAGS): Define. + (add_AT_string): Push string into hashtable, increment reference + counter. + (AT_string): Return string from ht_identifier. + (AT_string_form): New. + (free_AT): For dw_val_class_str, just decrement reference counter. + (size_of_string): Remove. + (size_of_die): Use AT_string_form to decide what size the string + occupies in DIE. + (size_of_pubnames): Use strlen instead of size_of_string. + (value_format): Use AT_string_form for dw_val_class_str. + (output_die): Output DW_FORM_strp strings using + dw2_asm_output_offset. + (indirect_string_alloc, output_indirect_string): New. + (dwarf2out_finish): Emit .debug_str strings if there are any. + + 2001-11-08 Andreas Franck + + * configure.in: Add AC_ARG_PROGRAM to support program name + transformation with --program-prefix, --program-suffix and + --program-transform-name. + * configure: Regenerated. + * Makefile.in (GCC_INSTALL_NAME, CPP_INSTALL_NAME, + PROTOIZE_INSTALL_NAME, UNPROTOIZE_INSTALL_NAME, GCOV_INSTALL_NAME, + GCCBUG_INSTALL_NAME, GCC_CROSS_NAME, CPP_CROSS_NAME, + PROTOIZE_CROSS_NAME, UNPROTOIZE_CROSS_NAME): Handle + program_transform_name the way suggested by autoconf. + (GCC_TARGET_INSTALL_NAME): Define. + (install-driver): Use the transformed target alias name. + + 2001-11-08 Richard Henderson + + * config/mips/mips.c (save_restore_insns): Remove GP from the + restore registers mask early instead of special casing it inside + the loop. + + 2001-11-08 Neil Booth + + * cp/decl.c (shadow_warning): New function. + (pushdecl): Improve -Wshadow warnings. Don't give both a warning + and an error when a block scope decl shadows a parameter. + + 2001-11-08 Richard Henderson + + * config/fp-bit.h (usi_to_float): Define for US_SOFTWARE_GOFAST + case as well. + + 2001-11-08 John David Anglin + + * pa.md (negdf2, negsf2): Use multiplication rather than subtraction + to implement floating negation on processors prior to PA 2.0. + + 2001-11-08 Jakub Jelinek + + * dwarf2asm.c (mark_indirect_pool_entry, mark_indirect_pool): New. + (USE_LINKONCE_INDIRECT): Define. + (dw2_output_indirect_constant_1): Try to output indirect constants + into linkonce sections if possible. + (dw2_force_const_mem): Likewise. Register indirect_pool with GGC. + (dw2_output_indirect_constants): Likewise. + + 2001-11-07 Aldy Hernandez + + * config/rs6000/rs6000.h (REG_ALLOC_ORDER): Add vrsave. + + 2001-11-07 Neil Booth + + * c-decl.c (pushdecl): Remove file and line. + * c-typeck.c (pop_init_level): Remove size. + + 2001-11-07 Aldy Hernandez + + * doc/invoke.texi: Add -maltivec, -mno-altivec, and -mabi=altivec + for rs6000. + + * config/rs6000/rs6000.h (MASK_ALTIVEC): New. + (TARGET_ALTIVEC): New. + (TARGET_SWITCHES): Add altivec. + (FIRST_PSEUDO_REGISTER): Change to 109. + (CALL_USED_REGISTERS): Same. + (FIRST_ALTIVEC_REGNO): New. + (LAST_ALTIVEC_REGNO): New. + (ALTIVEC_REGNO_P): New. + (UNITS_PER_ALTIVEC_WORD): New. + (ALTIVEC_VECTOR_MODE): New. + (FIXED_REGISTERS): Add altivec registers. + (REG_ALLOC_ORDER): Same. + (HARD_REGNO_NREGS): Adjust for altivec registers. + (HARD_REGNO_MODE_OK): Same. + (MODES_TIEABLE_P): Same. + (REGISTER_MOVE_COST): Same. + (REGNO_REG_CLASS): Same. + (reg_class): Add ALTIVEC_REGS. + (REG_CLASS_NAMES): Same. + (REG_CLASS_CONTENTS): Same. + (REG_CLASS_FROM_LETTER): Add 'v' constraint for ALTIVEC_REGS. + (ALTIVEC_ARG_RETURN): New. + (FUNCTION_VALUE): Handle VECTOR_TYPE. + (LIBCALL_VALUE): Handle altivec vector modes. + (VECTOR_MODE_SUPPORTED_P): New. + (ALTIVEC_ARG_MIN_REG): New. + (ALTIVEC_ARG_MAX_REG): New. + (ALTIVEC_ARG_NUM_REG): New. + (FUNCTION_VALUE_REGNO_P): Return true for altivec return register. + (FUNCTION_ARG_REGNO_P): Support passing args in altivec registers. + (REGISTER_NAMES): Add altivec regs. + (DEBUG_REGISTER_NAMES): Same. + (ADDITIONAL_REGISTER_NAMES): Same. + (rs6000_builtins): New. + (MD_EXPAND_BUILTIN): New. + (MD_INIT_BUILTINS): New. + (LEGITIMATE_OFFSET_ADDRESS_P): This addressing mode is not valid + for AltiVec instructions. + (LEGITIMATE_LO_SUM_ADDRESS_P): Same. + (HARD_REGNO_MODE_OK): Altivec modes can only go in altivec + registers. + (SECONDARY_MEMORY_NEEDED): We need memory to copy vector modes. + (TARGET_SWITCHES): Add no-altivec. + (DATA_ALIGNMENT): Align vectors to 128 bits. + (TARGET_OPTIONS): Add abi= option. + Add rs6000_abi_string extern. + (LOCAL_ALIGNMENT): New. + (CPP_CPU_SPEC): Define __ALTIVEC__ when -maltivec. + (MASK_ALTIVEC_ABI): New. + (TARGET_ALTIVEC_ABI): New. + (CONDITIONAL_REGISTER_USAGE): Set first 20 AltiVec registers to + call-saved. + (STACK_BOUNDARY): Adjust for altivec. + (BIGGEST_ALIGNMENT): Same. + (rs6000_args): Add vregno. + (USE_ALTIVEC_FOR_ARG_P): New. + (FIXED_REGISTERS): Add vrsave register. + (CALL_USED_REGISTERS): Same. + (CONDITIONAL_REGISTER_USAGE): Set VRSAVE info. + (VRSAVE_REGNO): New. + (reg_class): Add VRSAVE_REGS. + (REG_CLASS_NAMES): Same. + (REG_CLASS_CONTENTS): Same. + (REGNO_REG_CLASS): Same. + + * config/rs6000/sysv4.h (STACK_BOUNDARY): Adjust for altivec. + (ABI_STACK_BOUNDARY): Same. + (BIGGEST_ALIGNMENT): Same. + (ADJUST_FIELD_ALIGN): Remove undef. Define anew. + (ROUND_TYPE_ALIGN): Same. + + * config/rs6000/aix.h (ROUND_TYPE_ALIGN): Change BIGGEST_ALIGNMENT + to 64. + + * config/rs6000/darwin.h (ROUND_TYPE_ALIGN): Change BIGGEST_ALIGNMENT + to 64. + + * config/rs6000/darwin.h (ROUND_TYPE_ALIGN): Change BIGGEST_ALIGNMENT + to 64. + + * config/rs6000/rs6000.c (rs6000_expand_builtin): New. + (altivec_expand_builtin): New. + (altivec_init_builtins): New. + (TARGET_EXPAND_BUILTIN): New. + (TARGET_INIT_BUILTINS): New. + (rs6000_init_builtins): New. + (struct builtin_description): New. + (bdesc_2arg): New. + (rs6000_reg_names): Add altivec registers. + (alt_reg_names): Same. + (secondary_reload_class): Altivec regs can hold altivec regs and + memory. + (rs6000_emit_move): Force constants into memory for AltiVec moves. + (print_operand): Add 'y' case for printing altivec memory + operands. + (rs6000_legitimize_address): Legitimize vector addresses into + [REG+REG] or [REG]. + (altivec_expand_binop_builtin): New. + New string rs6000_current_abi. + (rs6000_override_options): Call rs6000_parse_abi_options. + (rs6000_parse_abi_options): New. + (function_arg_boundary): Vector arguments must be 16 + byte aligned. + (function_arg_advance): Handle vector arguments. + (function_arg_partial_nregs): Same. + (init_cumulative_args): Same. + (function_arg): Same. + + * config/rs6000/rs6000.md (altivec_lvx): New. + (type): Add altivec attribute. + (movv4si): New. + (*movv4si_internal): New. + (movv16qi): New. + (*movv16qi_internal): New. + (movv8hi): New. + (*movv8hi_internal1): New. + (movv4sf): New. + (*movv4sf_internal1): New. + (altivec_stvx): New. + (vaddubm): New. + (vadduhm): New. + (vadduwm): New. + (vaddfp): New. + (vaddcuw): New. + (vaddubs): New. + (vaddsbs): New. + (vadduhs): New. + (vaddshs): New. + (vadduws): New. + (vaddsws): New. + (vand): New. + (vandc): New. + (vavgub): New. + (vavgsb): New. + (vavguh): New. + (vavgsh): New. + (vavguw): New. + (vavgsw): New. + (vcmpbfp): New. + (vcmpequb): New. + (vcmpequh): New. + (vcmpequw): New. + (vcmpeqfp): New. + (vcmpgefp): New. + (vcmpgtub): New. + (vcmpgtsb): New. + (vcmpgtuh): New. + (vcmpgtsh): New. + (vcmpgtuw): New. + (vcmpgtsw): New. + (vcmpgtfp): New. + (vcmpgefp): New. + (vcmpgtub): New. + (vcmpgtsb): New. + (vcmpgtuh): New. + (vcmpgtsh): New. + (vcmpgtuw): New. + (vcmpgtsw): New. + (vcmpgtfp): New. + (vmaxub): New. + (vmaxsb): New. + (vmaxuh): New. + (vmaxsh): New. + (vmaxuw): New. + (vmaxsw): New. + (vmaxfp): New. + (vmrghb): New. + (vmrghh): New. + (vmrghw): New. + (vmrglb): New. + (vmrglh): New. + (vmrglw): New. + (vminub): New. + (vminsb): New. + (vminuh): New. + (vminsh): New. + (vminuw): New. + (vminsw): New. + (vminfp): New. + (vmuleub): New. + (vmulesb): New. + (vmuleuh): New. + (vmulesh): New. + (vmuloub): New. + (vmulosb): New. + (vmulouh): New. + (vmulosh): New. + (vnor): New. + (vor): New. + (vpkuhum): New. + (vpkuwum): New. + (vpkpx): New. + (vpkuhss): New. + (vpkshss): New. + (vpkuwss): New. + (vpkswss): New. + (vpkuhus): New. + (vpkshus): New. + (vpkuwus): New. + (vpkswus): New. + (vrlb): New. + (vrlh): New. + (vrlw): New. + (vslb): New. + (vslh): New. + (vslw): New. + (vsl): New. + (vslo): New. + (vsrb): New. + (vrsh): New. + (vrsw): New. + (vsrab): New. + (vsrah): New. + (vsraw): New. + (vsr): New. + (vsro): New. + (vsububm): New. + (vsubuhm): New. + (vsubuwm): New. + (vsubfp): New. + (vsubcuw): New. + (vsububs): New. + (vsubsbs): New. + (vsubuhs): New. + (vsubshs): New. + (vsubuws): New. + (vsubsws): New. + (vsum4ubs): New. + (vsum4sbs): New. + (vsum4shs): New. + (vsum2sws): New. + (vsumsws): New. + (vxor): New. + + 2001-11-07 Daniel Berlin + + * Makefile.in (df.o): Add fibheap.h to dependencies. + + * df.h: Add prototypes for transfer functions, iterative_dataflow + functions. + (enum df_flow_dir): New enum. + (enum df_confluence_op): New enum. + (struct df): Add inverse_rts_map. + + * df.c: Add sbitmap.h to the list of includes. + (df_rd_global_compute): Removed. + (df_ru_global_compute): Removed. + (df_lr_global_compute): Removed. + (df_rd_transfer_function): New function. + (df_ru_transfer_function): New function. + (df_lr_transfer_function): New function. + (df_analyse_1): allocate/compute/free df->inverse_rts_map. + Use iterative_dataflow_bitmap instead of df_*_global_compute. + (iterative_dataflow_sbitmap): New function. + (iterative_dataflow_bitmap): New function. + + 2001-11-07 Joseph S. Myers + + * doc/gcc.texi: Move terminology and spelling conventions to + htdocs/codingconventions.html. + + 2001-11-07 Graham Stott + + * cse.c (cse_insn): Emit BARRIER after unconditional jump. + + Wed Nov 7 13:33:34 CET 2001 Jan Hubicka + + * expmed.c (expand_mult): Force operand to register before computing + cost. + * i386.c (x86_decompose_lea): New global vairable. + * i386.h (x86_decompose_lea): Declare. + (TARGET_DECOMPOSE_LEA): New macro. + (RTX_COST): Handle leas properly. + + 2001-11-06 Richard Henderson + + * config/alpha/elf.h (DO_SELECT_SECTION): TREE_READONLY is not + defined for a CONSTRUCTOR; don't check it. + + 2001-11-06 Danny Smith + + * gcov.c (output_data): Use IS_ABSOLUTE_PATHNAME to + test for absolute pathnames. + + 2001-11-06 Olivier Hainque + + * unwind-dw2.c (execute_cfa_program): Evaluate call frame + instructions up to the target pc inclusive. + + 2001-11-06 Steve Christiansen + + * loop.c (loop_regs_scan): Don't invalidate PIC register. + + 2001-11-06 Eric Christopher + + * config/mips/mips.md(movdf_internal2): Add constraints for float + to general register move. + * config/mips/elf64.h: Add default ABI. + + 2001-11-06 Neil Booth + + * alias.c:: Include langhooks.h. + * emit-rtl.c: Similarly. + * toplev.c: Similarly. + * tree-inline.c: Similarly. + * langhooks-def.h: New, the old langhooks.h. Give the default + hooks a common prefix. + * langhooks.h: Contents extracted from toplev.h. + * toplev.h: Move langhook stuff to langhooks.h. + * langhooks.c: Give default hooks a common prefix. + + * c-lang.c: Include langhooks-def.h. + * objc/objc-act.c: Similarly. + * Makefile.in: Update. + * objc/Make-lang.in: Update. + + 2001-11-06 Joseph S. Myers + + * doc/install.texi: Document that configure options not listed in + this file are unsupported. Document --with-system-zlib. + + Tue Nov 6 09:21:34 2001 Richard Kenner + + * rtl.h (mem_for_const_double): New declaration. + * varasm.c (mem_for_const_double): New function. + * config/convex/convex.md (movdf): Use it. + * config/m68k/hp320.h (LEGITIMATE_PIC_OPERAND_P): Likewise. + * config/m68k/linux.h, config/m68k/m68k.h: Likewise. + * config/m68k/m68kv4.h: Likewise. + + * config/alpha/alpha.h (SECONDARY_MEMORY_NEEDED): Adjust for addition + of new GP reg classes. + + * expr.c (store_field): When making temp object for unaligned + component, set it to alias set 0. + + 2001-11-06 Joseph S. Myers + + * c-common.c (c_expand_expr_stmt): Apply default conversions to + non-lvalue arrays if C99. + * c-typeck.c (default_conversion): Split out code handling + array-to-pointer and function-to-pointer conversions into a + separate default_function_array_conversion function. + (default_function_array_conversion): New function. Keep track of + whether any NON_LVALUE_EXPRs were stripped. Return non-lvalue + arrays unchanged outside C99 mode instead of giving an error for + them. + (build_component_ref): Use pedantic_non_lvalue when handling + COMPOUND_EXPR. Don't handle COND_EXPR specially. + (convert_arguments): Use default_function_array_conversion. + (build_unary_op): For ADDR_EXPR, take a flag indicating whether + non-lvalues are OK. + (unary_complex_lvalue): Likewise. + (internal_build_compound_expr): Use + default_function_array_conversion. Apply default conversions to + function in compound expression. + (build_c_cast, build_modify_expr, digest_init, build_asm_stmt): + Use default_function_array_conversion. + * doc/extend.texi: Update documentation of subscripting non-lvalue + arrays. + Fixes PR c/461. + + 2001-11-05 Zack Weinberg + + * aclocal.m4: (AM_WITH_NLS): Don't look at ALL_LINGUAS. + (AM_GNU_GETTEXT): Set CATALOGS to a list of .gmo files + corresponding to the complete set of .po and .gmo files in + the source directory's po subdir, modified by LINGUAS. Don't + look at ALL_LINGUAS. + * configure.in: Don't set ALL_LINGUAS. + * configure: Regenerate. + + * Makefile.in (.po.gmo): Don't move into source directory. + (.po.pox): Clarify comments. + (install-po): Look for .gmo files in both srcdir and objdir; + don't fail if a file is totally missing. + (distclean): rmdir ada subdirectory too. + + 2001-11-05 Geoffrey Keating + + * config/rs6000/rs6000.c (rs6000_select_section): Handle + CONSTRUCTORs _correctly_. + + 2001-11-05 Neil Booth + + * c-decl.c (delete_block): Remove. + * c-tree.h (delete_block): Remove. + + 2001-11-05 Neil Booth + + * cppexp.c (lex, parse_defined): Update warning about defined. + + 2001-11-05 Geoffrey Keating + + * config/rs6000/rs6000.c (rs6000_select_section): Handle + CONSTRUCTORs too. + + 2001-11-05 Nick Clifton + + * config/arm/arm.c (arm_return_in_memory): Cope with + int_size_in_bytes returning -1. + + * config/arm/unknown-elf.h (ASM_OUTPUT_ALIGNED_DECL_LOCAL): Handle + DECL being NULL. + + Mon Nov 5 16:15:25 CET 2001 Jan Hubicka + + * Makefile.in (bb-reorder.o): Add dependency on cfglayout.h; + remove unneeded dependencies; + (cfglayout.o): New. + * cfglayout.c, cfglayout.h: New files; break out from ... + * bb-reorder.c: ... here; Remove unneeded includes; + + 2001-11-04 Alan Modra + + * config/rs6000/rs6000.md (load_toc_aix_{si,di}): Mark r2 as used. + + 2001-11-04 David Edelsohn + + * config/rs6000/rs6000.c (rs6000_emit_move): Handle 64-bit + mode as well. Do not explicitly create intermediate regs. + + 2001-11-04 Kaveh R. Ghazi + + * arm/aof.h (aof_text_section, aof_data_section): Don't declare. + (common_section): Delete unused variable. + (ASM_OUTPUT_ASCII): Fix signed/unsigned warnings. + (ASM_GENERATE_INTERNAL_LABEL): Fix format specifier warning. + * arm-protos.h (arm_poke_function_name, aof_add_import, + aof_delete_import): Const-ify. + * arm.c (legitimize_pic_address): Wrap variables in the macro + controlling their usage. + (arm_finalize_pic): Mark variable with ATTRIBUTE_UNUSED. + (arm_poke_function_name, pic_chain, import, aof_add_import, + aof_delete_import): Const-ify. + * i386.c (ix86_osf_output_function_prologue): Const-ify. + * i386/sysv4.h (ASM_OUTPUT_FLOAT, ASM_OUTPUT_DOUBLE, + ASM_OUTPUT_LONG_DOUBLE): Fix format specifier warnings. + * i860/fx2800.h (DBX_OUTPUT_STANDARD_TYPES): Const-ify. + * i860/sysv3.h: Add missing comment closure. + * m68k/apollo68.h (ASM_RETURN_CASE_JUMP): Add missing semi-colon. + * m88k/dgux.h (SELECT_RTX_SECTION): Add missing argument in call + to symbolic_operand. + + * config.gcc (m680[02]0-*-*): Rename case from m68000-*-*. + (i960-*-*): Set tmake_file. + (sparc86x-*-elf*): Fix typo in header name. + + * sched-rgn.c (schedule_insns): Delete unused variable. + + 2001-11-04 Neil Booth + + PR c/2820 + * c-typeck.c (lookup_field): Rework to return a chain down to + the looked-up field. + (build_component_ref): Use the new lookup_field to handle + nested anonymous entities correctly. + + Sun Nov 4 11:53:31 2001 Richard Kenner + + * config/sparc/sparc.c (sparc_emit_set_const32, GEN_HIGHINT64): + Change parameters to gen_rtx_CONST_DOUBLE. + (GEN_INT64, sparc_emit_set_const64): Likewise. + * config/sparc/sparc.md (movdf split): Likewise. + + 2001-11-03 Geoffrey Keating + + * unroll.c (calculate_giv_inc): Use find_last_value rather + than just hoping the last instruction is the right SET. + [Fixes 990604-1.c on stormy16.] + + * config/stormy16/stormy16.h (LIB_SPEC): Don't supply any libgloss + library at all if -T is used. + + * config/stormy16/stormy16.c (stormy16_print_operand): Avoid + some uses of uninitialized variables in error cases. + + * config/stormy16/stormy16.c (stormy16_output_shift): Don't + look at 'temp' if we won't be using it. + + * config/stormy16/stormy16.h (CONST_COSTS): Define. + (RTX_COSTS): Define. + (ADDRESS_COST): Define. + (MEMORY_MOVE_COST): Allow for memory_move_secondary_cost. + + * config/stormy16/stormy16.h (ASM_SPEC): Pass -g to the assembler. + + * config/stormy16/stormy16.h (ASM_OUTPUT_MI_THUNK): Call + stormy16_asm_output_mi_thunk. + * config/stormy16/stormy16.c (stormy16_asm_output_mi_thunk): New + function. + * config/stormy16/stormy16-protos.h + (stormy16_asm_output_mi_thunk): New prototype. + + 2001-11-04 Joseph S. Myers + + * ChangeLog.2, ChangeLog.4, ChangeLog.5, ChangeLog, + FSFChangeLog.10, FSFChangeLog.11, alias.c, attribs.c, + caller-save.c, calls.c, cfg.c, cfganal.c, cfgcleanup.c, cfgrtl.c, + cppmacro.c, fold-const.c, ifcvt.c, local-alloc.c, profile.c, + sched-int.h, toplev.c, config/alpha/alpha.c, + config/alpha/alpha.md, config/c4x/c4x.h, config/cris/cris.h, + config/cris/cris.md, config/i370/i370.md, config/i386/i386.c, + config/i386/i386.h, config/i386/i386.md, config/i386/xm-djgpp.h, + config/ia64/ia64.c, config/m68hc11/m68hc11.c, config/m68k/m68k.md, + config/mcore/mcore.h, config/mmix/mmix.c, config/ns32k/ns32k.h, + config/ns32k/ns32k.md, config/rs6000/rs6000.c, + config/rs6000/sysv4.h, config/sh/sh.md: Fix spelling errors. + + 2001-11-03 Kaveh R. Ghazi + + * Makefile.in (dbxout.o): Depend on function.h. + * collect2.c (is_in_list): Hide unused function. + * dbxout.c: Include function.h. + (source_label_number, dbxout_source_line, dbxout_source_file, + dbxout_function_end, dbxout_begin_function): Wrap/move inside + macros controlling usage. + * gcc.c (TARGET_EXECUTABLE_SUFFIX): Undef before defining. + * output.h (exports_section): Prototype. + + * convex.c (convex_output_function_prologue): Fix format specifier + warning. + (asm_declare_function_name): Fix signed/unsigned warning. + (print_operand): Fix format specifier warning. + * convex.h (S_REGNO_P, A_REGNO_P): Fix signed/unsigned warning. + * dsp16xx-protos.h (uns_comparison_operator, + num_1600_core_shifts): Prototype. + * dsp16xx.c: Include tm_p.h, not dsp16xx-protos.h. + (frame_size, frame_pointer_offset): Delete. + (dsp16xx_output_function_prologue, dsp16xx_output_function_epilogue): + Make static. Fix format specifier warnings. + * dsp16xx.h (IS_ACCUM_REG): Fix unsigned>=0 warning. + (EXTRA_SECTION_FUNCTIONS): Prototype const_section. + * dsp16xx.md: Add default case in switches. + * fr30.h (IN_RANGE): Delete. + * ia64.h (ASM_OUTPUT_MI_THUNK): Fix format specifier warnings. + * mcore-protos.h (mcore_output_cmov): Const-ify. + * mcore.c (mcore_output_cmov): Likewise. + * mcore.h (switch_to_section): Make static and prototype. + * mn10200.h (REGNO_OK_FOR_INDEX_P, REG_OK_FOR_INDEX_P): Fix + unsigned>=0 warnings. + * mn10300.h (REGNO_IN_RANGE_P): Likewise. + * rs6000-protos.h (read_only_data_section, + read_only_private_data_section): Prototype. + * rs6000.h (ASM_OUTPUT_BYTE): Fix format specifier warning. + * sh.c (sh_adjust_cost): Mark parameter with ATTRIBUTE_UNUSED. + * sh.h (GENERAL_REGISTER_P): Fix unsigned>=0 warning. + + 2001-11-03 Kaveh R. Ghazi + + * dwarf2asm.c (dw2_asm_output_pcrel): Mark parameters with + ATTRIBUTE_UNUSED. + * final.c (final_scan_insn): Add brackets around body of if-stmt. + * gcc.c (convert_filename): Add static prototype. Const-ify. + Wrap variable in macros controlling its use. + * output.h (sdata_section): Add prototype. + + * 1750a.h (EXTRA_SECTION_FUNCTIONS): Add prototype. + (ASM_OUTPUT_ASCII): Avoid signed/unsigned warning. + * c4x.h (INIT_SECTION_FUNCTION): Add prototype. + (ASM_FILE_START): Const-ify. + (ASM_OUTPUT_BYTE_FLOAT, ASM_OUTPUT_SHORT_FLOAT): Fix format + specifier warning. + * c4x.md: Don't use the 'U' integer suffix. + * clipper.md (clipper_movstr): Delete declaration. + * d30v-protos.h (d30v_move_2words): Const-ify. + (debug_stack_info): Add prototype. + * d30v.c: Include "integrate.h". + (d30v_function_arg_boundary, d30v_function_arg, + d30v_function_arg_partial_nregs, d30v_function_arg_advance): Avoid + signed/unsigned warnings. + (d30v_print_operand_memory_reference, d30v_move_2words): + Const-ify. + * d30v.h (REG_CLASS_FROM_LETTER): Use unsigned array subscript. + * fr30.c (fr30_pass_by_reference, fr30_pass_by_value): Prototype. + * fr30.md: Const-ify. + * h8300.h (EXTRA_SECTION_FUNCTIONS): Add prototype. + * i370.c (i370_label_scan, mvs_get_label): Make definition static. + (mvs_get_label_page): Hide unused static function. + * i860.c (current_function_original_name): Const-ify. + * i860/sysv3.h (current_function_original_name): Likewise. + * i860/sysv4.h (current_function_original_name): Likewise. + * i960.md: Add default case in switches. Remove unused variable. + * i960/vx960-coff.h (MULTILIB_DEFAULTS): Undef before defining. + * m32r.md: Const-ify. + * m68hc11-protos.h (m68hc11_asm_file_start): Const-ify. + * m68hc11.c: Include "reload.h". + (static_chain_reg, print_options, m68hc11_asm_file_start): + Const-ify. + * m68hc11.md: Delete unused variable. Const-ify. Add parens + around & in comparison. + * mcore.h (TARGET_ASM_NAMED_SECTION): Undef before defining. + * mn10200.c (shift_mode): Remove trailing comma. + * mn10300-protos.h (output_tst): Const-ify. + * mn10300.c (output_tst): Likewise. + * pa/long_double.h (ASM_OUTPUT_LONG_DOUBLE): Fix format specifier + warnings. + * pa-protos.h (output_ascii): Use regular char *, not unsigned. + * pa.c (output_ascii): Likewise. + * pa/som.h (EXTRA_SECTION_FUNCTIONS): Add prototype. + * pdp11.md (expand_unop): Delete declarations. + * pj-protos.h (pj_output_addsi3): Const-ify. + * pj.c (pj_output_push_int, pj_output_load, pj_output_inc, + pj_output_cnv_op, mode_to_char, pj_output_varidx, pj_print_cond, + unique_src_operand): Add prototypes. + (pj_output_store_into_lval): Make definition static. + (pj_function_incoming_arg): Don't use unary plus. + (pj_output_addsi3): Const-ify. + * romp.md (get_symref): Delete declarations. + * v850-c.c (mark_current_function_as_interrupt): Don't return + value from void function. + * v850.c: Include "integrate.h". + * v850.h (ASM_OUTPUT_LABELREF): Const-ify. + * vax-protos.h (const_section): Add prototype. + + 2001-11-03 Aldy Hernandez + + * machmode.def: Add documentation for the seventh argument in + vector modes. + + 2001-11-04 Hans-Peter Nilsson + + * doc/invoke.texi (MMIX Options) <-mno-knuthdiv>: Say remainder + consistently. + <-mno-toplevel-symbols>: Change @code{:} to @samp{:}. + <-melf>: Don't have markup for ELF acronym. + + 2001-11-03 Hans-Peter Nilsson + + * config.gcc (mmix-*-*): New target. + * doc/invoke.texi: Document MMIX options. + * doc/contrib.texi: Add note about MMIX port to my entry. + * config/mmix/t-mmix: New file. + * config/mmix/mmix.h: New file. + * config/mmix/mmix-protos.h: New file. + * config/mmix/mmix.c: New file. + * config/mmix/mmix.md: New file. + * config/mmix/crti.asm: New file. + * config/mmix/crtn.asm: New file. + + 2001-11-03 Kazu Hirata + + * config/sparc/linux-aout.h: Fix comment formatting. + * config/sparc/linux.h: Likewise. + * config/sparc/linux64.h: Likewise. + * config/sparc/lynx.h: Likewise. + * config/sparc/pbd.h: Likewise. + * config/sparc/sol2-sld-64.h: Likewise. + * config/sparc/sol2.h: Likewise. + * config/sparc/sparc.c: Likewise. + * config/sparc/sparc.h: Likewise. + * config/sparc/sparc.md: Likewise. + * config/sparc/sunos4.h: Likewise. + * config/sparc/vxsim.h: Likewise. + * config/sparc/vxsparc.h: Likewise. + * config/sparc/vxsparc64.h: Likewise. + + Sat Nov 3 10:37:56 2001 Richard Kenner + + * cselib.c (cselib_subst_to_values, case CONST_DOUBLE): Remove + reference to CONST_DOUBLE_MEM in comment. + * emit-rtl.c (gen_rtx_CONST_DOUBLE): Remove one operand. + (gen_rtx, case CONST_DOUBLE): Call it with one less operand. + (init_emit_once): Don't clear CONST_DOUBLE_MEM. + * function.c (pop_function_context_from): Don't call + restore_varasm_status. + * function.h (restore_varasm_status): Delete declaration. + * gengenrtl.c (CONST_DOUBLE_FORMAT): Delete CONST_DOUBLE_MEM slot. + * rtl.c: Likewise. + * rtl.def (CONST_DOUBLE): Update comment. + * rtl.h (CONST_DOUBLE_HIGH, CONST_DOUBLE_LOW): Update operand number. + (CONST_DOUBLE_CHAIN): Likewise. + (CONST_DOUBLE_MEM): Delete. + (gen_rtx_CONST_DOUBLE): Update parameters. + * varasm.c (struct varasm_status): x_pool_offset now HOST_WIDE_INT. + Remove reference to CONST_DOUBLE_MEM. + (const_alias_set): New variable. + (immed_double_const): Change call to gen_rtx_CONST_DOUBLE. + (immed_real_const_1): Adjust tests for 0, 1, and 2. + Don't set CONST_DOUBLE_MEM. + (clear_const_double_mem): Don't do anything with const_tiny_rtx. + (output_constant_def): Don't look at TREE_CST_RTL if INTEGER_CST. + Put constant in const_alias_set. + (struct pool_constant): ALIGN now unsigned. + OFFSET now HOST_WIDE_INT. + Delete LABEL. + (restore_varasm_status): Deleted. + (mark_pool_constant): Mark desc->rtl. + (force_const_mem): Rework to store rtl in hash table, + not CONST_DOUBLE_MEM. + Put constant in const_alias_set. + (find_pool_constant): Check desc->rtl. + (mark_constants, mark_constant): Don't special-case CONST_DOUBLE. + (init_varasm_once): Initialize const_alias_set. + + * expr.c (expand_expr, case ADDDR_EXPR): If at top level, don't call + force_const_mem. + + * reload.c (combine_reloads): Don't combine an output reload if there + are other reloads around for part of the output. + + * emit-rtl.c (set_mem_attributes): Set RTX_UNCHANGINGP_P if T is a + constant expression. + (set_mem_decl): New function. + * expr.h (set_mem_decl): New declaration. + * final.c (get_decl_from_op): Don't use ORIGINAL_REGNO if not pseudo. + (output_asm_operand_names): Add tab. + * reload1.c (alter_reg): Set decl of MEM from REG_DECL. + + * builtins.c (get_memory_rtx): Properly set MEM alias set and + attributes. + + 2001-11-03 Joseph S. Myers + + * doc/extend.texi, doc/gcc.texi, doc/install.texi, doc/tm.texi: + Use "invalid" instead of "illegal". Use @r in comments in + examples. + + 2001-11-02 Neil Booth + + * c-decl.c (pushdecl): Move block inside if conditional to remove + possibility of a segfault. Lookup block-level extern + variables in enclosing scopes correctly. + + * testsuite/gcc.c-torture/compile/20001018-1.x: Remove XFAIL. + + 2001-11-02 Aldy Hernandez + + * expmed.c (store_bit_field): Use simplify_gen_subreg to make + SUBREG so we avoid SUBREGing memory. + + * expmed.c (store_bit_field): Same. + + 2001-11-02 DJ Delorie + + * config/rs6000/rs6000.c (rs6000_emit_move): Make sure that + using FP registers for DImode mem-mem moves is acceptable. + + 2001-11-02 Aldy Hernandez + + * builtins.c (apply_args_size): Handle vector arguments. + (apply_result_size): Same. + + * machmode.def: Set WIDER mode field for all vector entries. + + 2001-11-02 Graham Stott + + * recog.c (decode_asm_operands): Check that the SRC is ASM_OPERANDS. + + 2001-11-01 Eric Christopher + + * config.gcc: Revert part of earlier patch. + * config/mips/linux.h: Ditto. + * df.c: Include tm_p.h to avoid warnings. + * config/mips/mips.h (ABI_GAS_ASM_SPEC): Add defaults. Adjust + #if/#endif. + * config/mips/mips.c: Define mips_abi regardless. + (mips_output_function_prologues): Add long casts for .frame + output. + (override_options): Allow use of ABI_32. + + 2001-11-01 Kazu Hirata + + * config/m68hc11/m68hc11.c: Fix comment formatting. + * config/m68hc11/m68hc11.h: Likewise. + * config/m68hc11/m68hc11.md: Likewise. + + 2001-11-01 Neil Booth + + * c-typeck.c (default_conversion): Retain the original expression + codes. + * gcc.dg/Wparentheses.c: New tests. + + 2001-11-01 David S. Miller + + * doc/install.texi (Specific, sparc-sun-solaris2*): Bring + 64-bit Sparc description more in line with reality. + + 2001-11-01 Joseph S. Myers + + * Makefile.in (GCOV_OBJS): Add version.o. + * gcov.c: Include "version.h" and . + (gcov_version_string): Remove. + (print_usage): Take a parameter to determine whether this is a + call from --help or an error message. Give fuller output that + follows the GNU Coding Standards for --help. + (print_version): New function. + (options): New. + (process_args): Use getopt_long. Support long options. Follow + GNU Coding Standards for --help and --version. + * doc/gcov.texi: Document long options. + Addresses part of PR other/704. + + 2001-11-01 John David Anglin + + * pa.c (output_move_double): Fix typo in double load. + + 2001-11-01 Kazu Hirata + + * config/h8300/h8300.c (h8300_encode_label): Compute a string + before passing it to ggc_alloc_string. + + 2001-11-01 Kazu Hirata + + * config/m68k/3b1.h: Fix comment formatting. + * config/m68k/3b1g.h: Likewise. + * config/m68k/a-ux.h: Likewise. + * config/m68k/amix.h: Likewise. + * config/m68k/apollo68.h: Likewise. + * config/m68k/atari.h: Likewise. + * config/m68k/aux-exit.c: Likewise. + * config/m68k/ccur-GAS.h: Likewise. + * config/m68k/crds.h: Likewise. + * config/m68k/dpx2.h: Likewise. + * config/m68k/dpx2g.h: Likewise. + * config/m68k/hp310.h: Likewise. + * config/m68k/hp320.h: Likewise. + * config/m68k/isi.h: Likewise. + * config/m68k/linux.h: Likewise. + * config/m68k/lynx.h: Likewise. + * config/m68k/m68k-psos.h: Likewise. + * config/m68k/m68k.c: Likewise. + * config/m68k/m68k.h: Likewise. + * config/m68k/m68k.md: Likewise. + * config/m68k/m68kelf.h: Likewise. + * config/m68k/m68kv4.h: Likewise. + * config/m68k/mot3300.h: Likewise. + * config/m68k/news.h: Likewise. + * config/m68k/next.h: Likewise. + * config/m68k/pbb.h: Likewise. + * config/m68k/plexus.h: Likewise. + * config/m68k/sgs.h: Likewise. + * config/m68k/sun3.h: Likewise. + * config/m68k/tower.h: Likewise. + * config/m68k/vxm68k.h: Likewise. + + 2001-10-31 DJ Delorie + + * config/mips/mips.h (mips_cache_flush_func): Prototype. + (TARGET_OPTIONS): Support -mflush-func= and -mno-flush-func. + (INITIALIZE_TRAMPOLINE): Use mips_cache_flush_func if nonzero. + * config/mips/mips.c (mips_cache_flush_func): New. + * doc/invoke.texi: Document the new options. + + 2001-10-31 Hans-Peter Nilsson + + * config.gcc (cris-*-linux*, tm_file): Rearrange order. + * config/cris/linux.h (LIB_SPEC, STARTFILE_SPEC): Don't redefine. + + * config/cris/cris.h (EH_RETURN_DATA_REGNO): Fix formatting. + + * config/cris/cris.c: Include output.h after tree.h but before + target.h. + + 2001-10-31 Zack Weinberg + + * Makefile.in (INTL_TARGETS, POSUB): Delete all references. + (INTL_SUBDIRS): Just intl. + (.SUFFIXES): Add .gmo .po .pox. + (native): Also depend on build-@POSUB@. + (intl.all, intl.install): Depend on config.h and things it includes. + (po-generated): New target; depend on c-parse.c and tradcif.c. + (install-normal): Also depend on install-@POSUB@. + (XGETTEXT, GMSGFMT, MSGMERGE, PACKAGE, CATALOGS): New variables. + (build-, install-, build-po, update-po, install-po, + .po.gmo, .po.pox, $(PACKAGE).pot, po/$(PACKAGE).pot): New rules. + + * aclocal.m4: Prefix each entry in CATALOGS with "po/" + * configure.in: Don't munge XGETTEXT. Don't generate + po/Makefile.in. + * configure: Regenerate. + + * exgettext: Delete. + * config/m68k/m68k.h: Add doc strings for -msky and -mnosky. + * objc/Make-lang.in: Replace $(INTL_TARGETS) with po-generated. + + 2001-10-31 Kazu Hirata + + * config/h8300/h8300.md (two anonymous patterns): New. + + 2001-10-31 Aldy Hernandez + + * tree.h (tree_index): Add support for V16QI and V8HI. + (V8HI_type_node): New. + (V16QI_type_node): New. + + * tree.c (build_common_tree_nodes_2): Same. + + * c-common.c (type_for_mode): Same. + + 2001-10-31 Kazu Hirata + + * config/i386/att.h: Fix comment formatting. + * config/i386/beos-elf.h: Likewise. + * config/i386/bsd.h: Likewise. + * config/i386/bsd386.h: Likewise. + * config/i386/crtdll.h: Likewise. + * config/i386/cygwin.asm: Likewise. + * config/i386/cygwin.h: Likewise. + * config/i386/djgpp.h: Likewise. + * config/i386/freebsd-aout.h: Likewise. + * config/i386/freebsd.h: Likewise. + * config/i386/gas.h: Likewise. + * config/i386/i386-interix.h: Likewise. + * config/i386/i386-protos.h: Likewise. + * config/i386/i386.c: Likewise. + * config/i386/i386.h: Likewise. + * config/i386/i386.md: Likewise. + * config/i386/i386elf.h: Likewise. + * config/i386/interix.c: Likewise. + * config/i386/isc.h: Likewise. + * config/i386/isccoff.h: Likewise. + * config/i386/iscdbx.h: Likewise. + * config/i386/linux.h: Likewise. + * config/i386/lynx.h: Likewise. + * config/i386/mingw32.h: Likewise. + * config/i386/netbsd-elf.h: Likewise. + * config/i386/next.h: Likewise. + * config/i386/osf1elf.h: Likewise. + * config/i386/osfrose.h: Likewise. + * config/i386/sco5.h: Likewise. + * config/i386/seq-gas.h: Likewise. + * config/i386/seq-sysv3.h: Likewise. + * config/i386/sequent.h: Likewise. + * config/i386/sol2.h: Likewise. + * config/i386/sun386.h: Likewise. + * config/i386/uwin.asm: Likewise. + * config/i386/uwin.h: Likewise. + * config/i386/vxi386.h: Likewise. + * config/i386/win32.h: Likewise. + * config/i386/winnt.c: Likewise. + * config/i386/xm-cygwin.h: Likewise. + * config/i386/xm-mingw32.h: Likewise. + + 2001-10-31 Kazu Hirata + + * builtins.def: Fix comment typos. + * config/alpha.c: Likewise. + * config/arm/arm.c: Likewise. + * config/avr/avr.h: Likewise. + * config/d30v/d30v.c: Likewise. + * config/d30v/d30v.h: Likewise. + * config/d30v/d30v.md: Likewise. + * config/dsp16xx/dsp16xx.c: Likewise. + * config/fr30/fr30.c: Likewise. + * config/fr30/fr30.md: Likewise. + * config/i386/i386.c: Likewise. + * config/i860/i860.c: Likewise. + * config/i960/i960.c: Likewise. + * config/ia64/ia64.c: Likewise. + * config/mips/mips.c: Likewise. + * config/pa/pa.c: Likewise. + * config/rs6000/rs6000.c: Likewise. + * config/s390/s390.c: Likewise. + * config/sparc/sparc.c: Likewise. + + 2001-10-30 Kazu Hirata + + * config/mips/elf.h: Fix comment formatting. + * config/mips/elf64.h: Likewise. + * config/mips/iris5.h: Likewise. + * config/mips/iris5gas.h: Likewise. + * config/mips/iris6.h: Likewise. + * config/mips/isa3264.h: Likewise. + * config/mips/linux.h: Likewise. + * config/mips/mips.c: Likewise. + * config/mips/mips.h: Likewise. + * config/mips/mips.md: Likewise. + * config/mips/mips16.S: Likewise. + * config/mips/netbsd.h: Likewise. + * config/mips/osfrose.h: Likewise. + * config/mips/r3900.h: Likewise. + * config/mips/sni-svr4.h: Likewise. + * config/mips/svr4-t.h: Likewise. + * config/mips/ultrix.h: Likewise. + + 2001-10-30 Daniel Berlin + + * bitmap.c (bitmap_element_free): Don't forget to update head->indx + when we update head->current. + + 2001-10-30 Neil Booth + + * tree.c (id_string_size): Remove. + (dump_tree_statistics): Update. + * toplev.c (compile_file): If dumping stats, dump tree stats too. + + Tue Oct 30 19:00:43 CET 2001 Jan Hubicka + + * sched-rgn.c (schedule_insns): Fix comment. + + 2001-10-30 Zack Weinberg + + * configure.in: Correct previous change: don't assume that + gas's version number _isn't_ the last thing on the line, or + isn't the only number on the line, either. + * configure: Regenerate. + + 2001-10-30 Kazu Hirata + + * cfgcleanup.c: Fix a comment typo. + + 2001-10-30 Kazu Hirata + + * alias.c: Fix comment formatting. + * recog.c: Likewise. + * config/cris/cris.c: Likewise. + * config/cris/cris.h: Likewise. + * config/i960/i960.c: Likewise. + * config/i960/i960.h: Likewise. + + 2001-10-30 Kazu Hirata + + * config/arm/arm.c: Fix a comment typo. + * config/arm/arm.h: Likewise. + * config/ia64/ia64.c: Likewise. + + 2001-10-30 Jakub Jelinek + + * emit-rtl.c (set_unique_reg_note): Don't create REG_EQUAL or + REG_EQUIV notes for ASM_OPERANDS. Return the new note (if any). + * rtl.h (set_unique_reg_note): Change return value. + * gcse.c (try_replace_reg): Use set_unique_reg_note. + * cse.c (cse_insn): Likewise. + * expr.c (emit_move_insn): Likewise. + * explow.c (force_reg): Likewise. + * local-alloc (update_equiv_regs): Likewise. + * loop.c (move_moveables, load_mems): Likewise. + * reload (find_reloads): Likewise. + + 2001-10-30 Paolo Bonzini + + Localization fixes. + * c-decl.c (parmlist_tags_warning, start_struct, + check_for_loop_decls): Separate messages for struct, union and + enum cases to allow for languages in which they have different + genders. + * c-format.c (scanf_flag_specs): Separate short and long name of + the assignment suppression feature. + (check_format_types): Localize "pointer" and "different types" + strings. + * c-lex.c (lex_number): Localize "an unsigned long int" and + related strings. + (lex_string) [MULTIBYTE_CHARS]: Use initial lowercase letter on + warning message. + * c-typeck.c (build_unary_up): Separate messages for increment and + decrement cases to allow for languages in which they use different + articles. Localize the strings "increment" and "decrement" in one + case. + + Tue Oct 30 11:08:11 CET 2001 Jan Hubicka + + * lcm.c (optimize_mode_switching): Do not rebuild liveness information + when no changes has been made. + + * gcse.c (reg_set_bitmap): Turn into reg_set. + (modify_mem_list_set, canon_modify_mem_list_set) + (clear_modify_mem_tables, free_modify_mem_tables): New. + (gcse_main); Use free_modify_mem_tables. + (free_gcse_mem): Likewise; free the bitmaps. + (alloc_gcse_main): Initialize the bitmaps. + (canon_list_insert): Set canon_modify_mem_list_set. + (record_last_mem_set_info): Likewise; set modify_mem_list_set. + (compute_hash_table): Use clear_modify_mem_tables. + (reset_opr_set_tables): Likewise. + (oprs_not_set_p): reg_set_bitmap is regset. + (mark_set, mark_clobber): Likewise. + + * df.h (DF_EQUIV_NOTES): New constant. + (df_insn_refs_record): Record uses inside or REG_EQUIV/EQUAL notes + when asked for. + + * sched-rgn.c (CHECK_DEAD_NOTES): New constant. + (init_regions, schedule_insns): Conditionalize the checking + code by CHECK_DEAD_NOTES; avoid multiple calls to update_life_info. + + Tue Oct 30 11:02:31 CET 2001 Jan Hubicka + + * i386.md (movti_rex64 splitter): Fix condition. + + 2001-10-29 Zack Weinberg + + * configure.in: Do not assume that gas's version number is the + last thing on the first line of as --version output. + * configure: Regenerate. + + * tradcpp.c: Include intl.h. Rename WARNING, ERROR, FATAL to + MT_WARNING, MT_ERROR, MT_FATAL. + (main): Call gcc_init_libintl. + (v_message): Call gettext on msgid and "warning: " + * tradcif.y: Include intl.h. + (yyerror): Make parameter definition consistent with + prototype. Call gettext on msgid argument. + + 2001-10-29 Kaveh R. Ghazi + + * combine.c (num_sign_bit_copies): Avoid signed/unsigned + warnings. + + * sparc/sol2.h: Include when L_trampoline is defined. + + Mon Oct 29 19:22:07 2001 Richard Kenner + + * reload1.c (eliminate_regs): Test for reg_renumber being allocated + before referencing it. + + 2001-10-26 DJ Delorie + + * config/rs6000/sysv4.h (LINK_SPEC): Allow -msdata=none to + override -G, and force -G0. + + 2001-10-29 Joseph S. Myers + + * ChangeLog.2, ChangeLog.3, ChangeLog.4, FSFChangeLog.10, + FSFChangeLog.11, c-common.c, c-common.def, c-common.h, c-decl.c, + c-dump.c, c-typeck.c, except.c, sdbout.c, simplify-rtx.c, + timevar.h, tree.h, varasm.c: Fix spelling errors and typos. + + * loop.h (struct induction): Rename ext_dependant to + ext_dependent. + * loop.c: Change all uses. + (check_ext_dependant_givs): Rename to check_ext_dependent_givs. + All callers changed. + * timevar.c (DEFTIMEVAR): Fix spelling of identifier__ parameter. + + 2001-10-29 Joseph S. Myers + + * c-parse.in (expr_no_commas, primary), c-typeck.c + (parser_build_binary_op): Use IS_EXPR_CODE_CLASS. + + 2001-10-29 David Edelsohn + + Undo assemble_name change in earlier patch. + + Mon Oct 29 21:11:40 2001 Nicola Pero + + * objc/objc-act.c (finish_message_expr): For the GNU runtime: when + determining the type of the receiver, do not check that TREE_CODE + of receiver is CALL_EXPR before calling receiver_is_class_object(). + (receiver_is_class_object): For the GNU runtime: recognize + the case that the receiver is self in a class method context. + Check that TREE_CODE of receiver is CALL_EXPR when checking that + the receiver is a call to objc_get_class. + + 2001-10-29 John David Anglin + + * pa.md (floatunssisf2): Set subreg 0 of operand 2 to zero. + + Mon Oct 29 07:23:33 2001 Richard Kenner + + * Makefile.in (OBJS): Put all files in alphabetical order. + + * dwarf2out.c (add_const_value_attribute): Fix error in last + change. + + Mon Oct 29 12:43:06 CET 2001 Jan Hubicka + + * basic-block.h (purge_all_dead_edges): Add update_life_p argument. + * cfgcleanup.c (merge_blocks): Update the life flag after merging; + fix warning. + * cfgrtl.c (purge_all_dead_edges): Allow updating of liveness. + (life_analysis): call purge_all_dead_edges after deleting noops. + (delete_noop_move): Do not purge CFG. + * toplev.c (rest_of_compilation): Update purge_all_dead_edges call. + + 2001-10-28 David Edelsohn + + * config/rs6000/aix31.h (ASM_OUTPUT_EXTERNAL): Use assemble_name. + * config/rs6000/darwin.h (RS6000_OUTPUT_BASENAME): Delete. + (ASM_GLOBALIZE_LABEL): Use assemble_name. + (ASM_OUTPUT_COMMON): Likewise. + * config/rs6000/rs6000.c (print_operand): Use assemble_name. + (rs6000_output_function_epilogue): Likewise. + (output_mi_thunk): Fix typo. + (rs6000_output_symbol_ref): Use assemble_name. + (output_toc): Likewise. + * config/rs6000/sysv4.h (RS6000_OUTPUT_BASENAME): Delete. + * config/rs6000/xcoff.h (RS6000_OUTPUT_BASENAME): Delete; + assemble_name calls STRIP_NAME_ENCODING. + (ASM_OUTPUT_LABEL): Use assemble_name. + (ASM_GLOBALIZE_LABEL): Likewise. + (ASM_DECLARE_FUNCTION_NAME): Likewise. + (ASM_OUTPUT_ALIGNED_COMMON): Indent pseudo-op. Use assemble_name. + (ASM_OUTPUT_LOCAL): Likewise. + + Sun Oct 28 15:45:16 2001 Richard Kenner + + * builtins.c (get_memory_rtx): Handle POINTERS_EXTEND_UNSIGNED case. + (expand_builtin_apply, expand_builtin_return): Likewise. + (expand_builtin_va_arg, expand_builtin_va_copy): Likewise. + + 2001-10-28 Joseph S. Myers + + * ChangeLog.0, ChangeLog.1, ChangeLog.2, ChangeLog.3, ChangeLog.4, + ChangeLog.5, ChangeLog, FSFChangeLog.10, FSFChangeLog.11, + c-common.c, c-common.h, c-parse.in, c-typeck.c, cfg.c, config.gcc, + configure, configure.in, except.c, except.h, flow.c, function.c, + gcc.c, gcse.c, genrecog.c, libgcc2.c, loop.c, loop.h, params.def, + predict.def, predict.h, reg-stack.c, regmove.c, sched-deps.c, + sched-int.h, sibcall.c, ssa.c, stringpool.c, toplev.c, tree.c, + unroll.c: Fix spelling errors. + + * doc/extend.texi, doc/invoke.texi: Fix spelling. + + * doc/gcc.texi: Document use of "dependent" and American spelling. + + Sun Oct 28 17:05:36 CET 2001 Jan Hubicka + + * expr.c (emit_group_load): Support CONCATs by storing them to memory + and reloading. + + Sun Oct 28 09:59:54 2001 Richard Kenner + + * expr.c (store_constructor_field): Only call adjust_address on MEM. + + Sun Oct 28 16:48:09 CET 2001 Jan Hubicka + + * genrecog.c (write_switch): Output if before switch for + DT_elt_zero_wide_safe. + + 2001-10-28 Kaveh R. Ghazi + + * Makefile.in (toplev.o, halfpic.o): Depend on halfpic.h + * i386/osfrose.h (SUBTARGET_SWITCHES): Add missing comma. + (FUNCTION_PROFILER): Const-ify. + * halfpic.c: Include "expr.h", "output.h" and "halfpic.h". + (eliminate_constant_term, assemble_name, output_addr_const): + Remove declarations. + (ptr_half_pic_address_p, half_pic_hash): Prototype. + (all_refs, half_pic_prefix, half_pic_hash, half_pic_declare, + half_pic_external, half_pic_address_p, half_pic_ptr): Const-ify. + * halfpic.h (ptr_half_pic_address_p, half_pic_finish): Prototype. + (half_pic_declare, half_pic_external): Const-ify. + * toplev.c: Include "halfpic.h". + + 2001-10-28 Joseph S. Myers + + * config/alpha/alpha.md, config/arm/arm.c, config/arm/arm.h, + config/d30v/d30v.h, config/fr30/fr30.c, config/i370/x-oe, + config/i386/i386.c, config/i386/i386-interix.h, + config/i386/i386.md, config/i386/i386.h, config/i386/sco5.h, + config/i860/i860.h, config/i860/i860.md, config/m68k/aux-exit.c, + config/m68k/m68k.c, config/mcore/mcore.c, config/mips/mips.md, + config/ns32k/ns32k.h, config/pa/pa.c, config/rs6000/rs6000.c, + config/sparc/sparc.c, config/m68hc11/m68hc11.c, + config/cris/cris.c, config/cris/cris.h, config/s390/s390.c, + config/s390/s390.h, config/stormy16/stormy16.h, doc/tm.texi: Fix + spelling errors. + + * ChangeLog.0, ChangeLog.1, ChangeLog.2, ChangeLog.3, ChangeLog.4, + ChangeLog.5, ChangeLog, ChangeLog.lib, FSFChangeLog.10, ONEWS, + c-common.c, caller-save.c, cfg.c, cfgcleanup.c, cfgrtl.c, + collect2.c, df.h, diagnostic.h, final.c, gcse.c, gthr.h, + haifa-sched.c, jump.c, local-alloc.c, profile.c, protoize.c, + regmove.c, reload1.c, rtlanal.c, sched-vis.c, ssa.c, stmt.c, + system.h, toplev.c: Fix spelling errors. + + Sat Oct 27 17:32:04 2001 Richard Kenner + + * gcse.c (insert_insn_end_bb): Don't assume PAT is a SET. + + * dwarf2out.c (reg_number): Abort if pseudo. + (reg_loc_descriptor): Return 0 if pseudo. + (is_based_loc): Return 0 if pseudo. + (mem_loc_descriptor): Return 0 for pseudo and handle 0 return from + recursive calls. + (concat_loc_descriptor): Return 0 if either part's descriptor is 0. + (loc_descriptor): Return 0 if can't find location and handle 0 + return from recursive calls. + (loc_descriptor_from_tree): Likewise. + Fix handling of indirect. + Also return 0 for PLACEHOLDER_EXPR. + Clean up COMPONENT_REF cases. + (add_AT_location_descriptor): Simplify, but handle 0 return from + loc_descriptor. + (add_const_value_attribute): Avoid shift count warning. + (add_bound_info): Remove test for PLACEHOLDER_EXPR here. + Set comp_unit_die as context if not in function. + + * config/mips/mips-protos.h: Break up long lines. + Remove needless #ifdef/#endif blocks. + Don't declare functions declared in file made by genpreds or recog.h. + * config/mips/mips.c (mips_output_function_prologue): TSIZE + is now HOST_WIDE_INT; delete unneeded casts. + * config/mips/mips.h: Don't use #elif. + + * expr.c (stor_constructor_field): Always call adjust_address. + Copy TARGET before changing its alias set. + (store_field): Likewise, for TO_RTX. + (get_inner_reference): Stop at PLACEHOLDER_EXPR if can't find + replacement. + (safe_from_p, case ADDR_EXPR): Properly check for conflict. + (find_placeholder): Return 0 if can't find object. + (expand_expr, case PLACEHOLDER_EXPR): Abort if find_placeholder + returns 0. + + Sat Oct 27 16:31:23 CEST 2001 Jan Hubicka + + * ifcvt.c (if_convert): Call clear_aux_for_blocks. + + Sat Oct 27 12:12:09 CEST 2001 Jan Hubicka + + * cfgcleanup.c (merge_blocks_move_predecessor_nojumps, + merge_blocks_move_successors_nojumps): Set BB_UPDATE_LIFE. + (merge_blocks): Properly udpate life after making edge nonfallthru. + * cfgrtl.c (merge_blocks_nomove): Update global_live_at_end. + + 2001-10-26 Kazu Hirata + + * config/h8300/h8300.c (get_shift_alg): Remove redundant code. + + 2001-10-26 Neil Booth + + * c-typeck.c (convert_arguments): When comparing for enumeral + type equality, use TYPE_MAIN_VARIANT. + * gcc.dg/Wconversion.c: New tests. + + 2001-10-26 Kazu Hirata + + * s390/s390.c: Fix comment typos. + * s390/s390.h: Likewise. + * s390/s390.md: Likewise. + + 2001-10-26 Alexandre Oliva + + * tree-inline.c (WALK_SUBTREE_TAIL): New macro. + (walk_tree): Use it for tail calls where appropriate. + + 2001-10-26 Alexandre Oliva + + * cse.c (check_for_label_ref): Don't require REG_LABEL notes for + non-local label_refs. + + 2001-10-26 Kazu Hirata + + * config/h8300/h8300.md (4 anonymous patterns): New. + + 2001-10-26 Kazu Hirata + + * config/h8300/h8300.c (get_shift_alg): Clean up. Return the + algorithm through the shift_info structure. + (emit_a_shift): Update the use of get_shift_alg. + + 2001-10-27 Daniel Berlin + + * sched-rgn.c: Remove bitset typedef. + Change bitset to sbitmap in prototypes / variable types. + Remove bbset_size. + Remove edgeset_bits. + Remove edgeset_size. + s/BITSET_ADD/SET_BIT/g + s/BITSET_INVERT/sbitmap_ones/g + s/BITSET_INTER/sbitmap_a_and_b/g + s/BITSET_UNION/sbitmap_a_or_b/g + s/BITSET_DIFFER/sbitmap_difference/g + s/bitset_member/TEST_BIT/g + (BITSET_*): Removed. + (bitset_member): Removed. + (extract_bitlst): Rewrite, now that we have sbitmaps, we can use + EXECUTE_IF_SET_IN_SBITMAP. + (split_edges): Rewrite, use sbitmap functions instead of bitset + operations. + (schedule_region): Allocate/free sbitmaps, rather than bitsets. + + 2001-10-26 Andreas Schwab + + * reload1.c (emit_input_reload_insns): Fix parens in last + (undocumented) change that was supposed to change only whitespace. + + Fri Oct 26 07:18:08 2001 Richard Kenner + + * cfgcleanup.c (BB_SET_FLAG, BB_CLEAR_FLAG): Add cast to avoid warning. + + * local-alloc.c (update_equiv_regs): Don't make REG_EQUAL note for + ASM_OPERANDS. + + 2001-10-26 Andreas Jaeger + + * flow.c (clear_log_links): Remove unused variable. + * cfgcleanup.c (cleanup_cfg): Likewise. + + 2001-10-26 Alexandre Oliva + + * tree-inline.c (remap_decl): Don't copy size and size_unit here. + (remap_save_expr): Map a remapped SAVE_EXPR to error_mark_node. + + 2001-10-26 Richard Henderson + + * config/alpha/alpha.h (enum reg_class): Add R24_REG, R25_REG; + rename PV_REG to R27_REG. + (REG_CLASS_CONTENTS, REGNO_REG_CLASS): Update. + (REG_CLASS_FROM_LETTER): Update. + (PREFERRED_RELOAD_CLASS): Don't widen a reg class. + * config/alpha/alpha.md (divsi3): Don't hard-code r24, r25, r27. + (udivsi3, modsi3, umodsi3): Likewise. + (divdi3, udivdi3, moddi3, umoddi3): Likewise. + + 2001-10-26 Richard Henderson + + * cfg.c (clear_aux_for_blocks): Split out of ... + (free_aux_for_blocks): here. + (clear_aux_for_edges): Split from ... + (free_aux_for_edges): here. + * basic-block.h: Declare them. + * lcm.c (compute_antinout_edge): Use them. + (compute_laterin, compute_available, compute_nearerout): Likewise. + (optimize_mode_switching): Likewise. + + 2001-10-26 Richard Henderson + + * Makefile.in (unstage*): Remove as, ld, collect-ld before + moving everything back to the main build directory. + + 2001-10-26 Christopher Faylor + + * config/i386/cygwin.h: Search target specific include directory, if + appropriate. + + 2001-10-25 Kaveh R. Ghazi + + * dwarf2out.c (PTR_SIZE, default_eh_frame_section): Move outside + of macro guards. Fix #endif comment. + + * output.h (default_exception_section, default_eh_frame_section): + Move prototypes outside of macro guard. + + * crtstuff.c: Fix #endif comment. + + Thu Oct 25 12:21:58 2001 Jeffrey A Law (law@cygnus.com) + + * doc/md.texi (movMM): Clarify semantics of storing into a + non-paradoxical SUBREG. + + 2001-10-25 Zack Weinberg + + * langhooks.c (lang_hook_default_clear_binding_stack): New. + (lang_hook_default_get_alias_set): Move next to other alias + hooks. + * langhooks.h: Prototype lang_hook_default_clear_binding_stack. + (LANG_HOOKS_CLEAR_BINDING_STACK): New macro. + (LANG_HOOKS_INITIALIZER): Add it. + * toplev.h (struct lang_hooks): Add clear_binding_stack. + * toplev.c (compile_file): Call lang_hooks.clear_binding_stack + instead of a loop calling poplevel. + + 2001-10-25 Nick Clifton + + * config/mips/isa3264.h (SUBTARGET_CPP_SIZE_SPEC): Replace + occurrences of #elif with #if...#endif. + + 2001-10-25 Kaveh R. Ghazi + + * cris.h (EH_RETURN_DATA_REGNO): Fix unsigned>=0 warning. + + Thu Oct 25 08:46:06 2001 Richard Kenner + + * alias.c (can_address_p): No longer static. + * emit-rtl.c (get_mem_attrs): New parameter, MODE; all callers changed. + Return 0 if all parameters are default values. + (set_mem_attributes): Set MEM_KEEP_ALIAS_SET_P. + (adjust_address_1): Try harder to compute a size. + * expr.c (expand_assignment, store_constructor): If can't address, + set MEM_KEEP_ALIAS_SET_P. + (store_constructor_field): Don't change set if MEM_KEEP_ALIAS_SET_P. + (store_field): Likewise. + (store_constructor): Simplify call to store_constructor_field. + * expr.h (can_address_p): New declaration. + * gensupport.c (gen_rtx_CONST_INT): New function. + * rtl.h (MEM_KEEP_ALIAS_SET_P): New macro. + (MEM_SIZE): Get size from mode, if not set and not BLKmode. + (MEM_COPY_ATTRIBUTES): Copy MEM_KEEP_ALIAS_SET_P. + + * stmt.c (expand_end_case): Remove orig_minval and use tree_low_cst. + + 2001-10-24 Christopher Faylor + + * config/i386/cygwin.h: Use proper path for mingw crt files when + -mno-cygwin. + + Wed Oct 24 18:43:42 2001 Richard Kenner + + * dwarf2out.c (file_info_cmp): Always return consistent results. + + 2001-10-24 Roger Sayle + + * stmt.c (expand_end_case): Index jumptables from zero for + suitably small values of minval. + + 2001-10-24 Jakub Jelinek + + * stor-layout.c (place_union_field): If any field was aligned with + attribute aligned, set record type's TYPE_USER_ALIGN. + (place_field): Likewise. + (finalize_record_size): Don't clear TYPE_USER_ALIGN. + (layout_type) [ARRAY_TYPE]: Copy element's TYPE_USER_ALIGN. + + 2001-10-24 Zack Weinberg + + * c-common.h (struct c_common_identifier): Remove rid_code field. + (C_RID_CODE): Use ->node.rid_code instead of ->rid_code. + + * c-typeck.c (constructor_designated): New local flag. + (struct constructor_stack): Add "designated" field to match. + (start_init): Clear it. + (really_start_incremental_init, push_init_level): Push and + clear it. + (pop_init_level): Pop it. + (set_designator): Set it. + + (pop_init_level): Suppress "missing initializer" warnings if + constructor_designated is true. + (process_init_element): Suppress warning about union + initialization under traditional C, if constructor_designated + is true. + + Wed Oct 24 15:35:38 2001 Richard Kenner + + * integrate.c (copy_rtx_and_substitute, case CALL): Fix error in last + change. + + Wed Oct 24 13:26:12 2001 Jeffrey A Law (law@cygnus.com) + + * h8300.h (RETURN_ADDR_RTX): Remove old, incorrect definition. + + 2001-10-24 Dan Nicolaescu + + * ssa-ccp.c (ssa_ccp_substitute_constants): Don't do anything if + the node was already a set to a constant. + + Wed Oct 24 12:41:19 2001 Richard Kenner + + * emit-rtl.c (set_mem_attributes): Fix typo in last change. + * print-rtl.c (print_rtx, case MEM): Improve display of MEM_DECL. + + 2001-10-24 Kaveh R. Ghazi + + * s390/linux.h (ASM_OUTPUT_BYTE): Fix format specifier warnings. + (ASM_OUTPUT_ASCII): Const-ify. Fix signed/unsigned warning. + (ASM_OUTPUT_MI_THUNK): Fix format specifier warnings. + * s390.c (s390_final_chunkify): Don't use string concatenation. + (s390_function_prologue, s390_function_epilogue): Const-ify. + * s390.h (FUNCTION_PROFILER): Remove unused variable. + + 2001-10-24 Jakub Jelinek + + * c-decl.c (finish_decl): Don't add DECL_STMTs for nested function + prototypes. + + 2001-10-23 Stan Shebs + + * config/rs6000/x-darwin: Use -no-cpp-precomp instead of + -traditional-cpp in first-stage compilation. + + Tue Oct 23 21:45:40 2001 Richard Kenner + + * gensupport.c (target_flags): Add. + + Tue Oct 23 13:05:53 2001 Richard Kenner + + * darwin-protos.h (constructor_section, destructor_section, + mod_init_section, mod_term_section): Prototype. + * darwin.c (machopic_finish, update_non_lazy_ptrs, update_stubs): + Const-ify. + * darwin.h (ASM_DECLARE_OBJECT_NAME, ASM_DECLARE_FUNCTION_NAME): + Likewise. + (SECTION_FUNCTION): Prototype `FUNCTION'. Delete + objc_section_init declaration. + (EXTRA_SECTION_FUNCTIONS): Prototype objc_section_init. + (objc_section_init, try_section_alias): Make static. + (alias_section): Make static and hide unused function. + (ASM_GENERATE_INTERNAL_LABEL): Fix format specifier warning. + + Tue Oct 23 13:05:53 2001 Richard Kenner + + * alias.c (can_address_p): Compnonents are not addressable if + the containing type has alias set 0. + (get_alias_set): Rework to use STRIP_NOPS. + Only call front-end routine on object, type, or object with + NOPs stripped, not inner values. + Use language hook to call front-end routine. + * builtins.c (get_memory_rtx): Always call set_mem_attributes. + (expand_builtin_apply): Call set_mem_align on MEMs we make. + Don't pass alignment to emit_block_move. + (expand_builtin_memcpy, expand_builtin_va_copy): Likewise. + (expand_builtin_memset): Likewise, but for clear_storage. + * c-common.c (lang_get_alias_set): Renamed to c_common_alias_set + and remove C++ specific parts. + * c-common.h (c_common_get_alias_set): Add declaration. + * c-lang.c (LANG_HOOKS_GET_ALIAS_SET): New macro. + * calls.c (emit_call_1): Fix typo in sibcall_pop case. + (save_fixed_argument_area): Call set_mem_align. + Remove alignment in call to emit_block_move. + (emit_library_call_value_1, store_one_arg): Likewise. + (target_for_arg): Remove; disabled long ago. + * emit-rtl.c (set_mem_attributes): Rework to only call get_mem_attrs + once and similar cleanups. + (offset_address): Use proper introductory comment. + * expr.c (emit_block_move): Use alignment from that of MEM args, not + from explicit operand; all callers changed. + (clear_storage): Likewise. + (expand_assignment): Don't call set_mem_alias_set on to_rtx. + (store_field): Remove kludge on alias set used for to_rtx. + (highest_pow2_factor, case *_DIV_EXPR): Never return 0. + (expand_expr_unaligned): Call set_mem_attributes instead of + set_mem_alias_set. + * expr.h (emit_block_move, clear_storage): Remove ALIGN argument. + * function.c (assign_stack_temp_for_type): Set MEM alignment. + (expand_function_end): Track MEM attributes of trampolines. + * ifcvt.c (noce_try_cmove_arith): Set alignment of new MEM. + * integrate.c (copy_rtx_and_substitute, case CALL): Copy memory + attributes from original. + * langhooks.c (lang_hook_default_get_alias_set): New function. + (hook_get_alias_set_0): New function. + * langhooks.h (hook_get_alias_set_0): New declaration. + (lang_hook_default_get_alias_set): Likewise. + (LANG_HOOKS_GET_ALIAS_SET): New macro; add to initializer. + * reload1.c (alter_reg): Use adjust_address_nv. + * rtl.c (get_mode_alignment): Moved to here. + * rtl.h (MEM_ALIGN): Take default from mode, if not BLKmode, and + change default if unknown from 1 to BITS_PER_UNIT. + * stor-layout.c (get_mode_alignment): Remove from here. + * toplev.h (struct lang_hoks): Add get_alias_set field. + * tree.h (lang_get_alias_set): Delete declaration. + * config/arc/arc.c (arc_setup_incoming_varags): Set MEM alignment. + * config/i386/i386.c (ix86_setup_incoming_varargs): Likewise. + (ix86_va_arg): Likewise. + * config/i960/i960.c (i960_setup_incoming_varargs): Likewise. + * config/pa/pa.c (hppa_builtin_saveregs): Likewise. + * config/sparc/sparc.c (sparc_va_arg): Likewise. + * config/rs6000/rs6000.c (setup_incoming_varargs): Likewise. + (expand_block_move_mem): Remove dead code. + + 2001-10-22 Neil Booth + + * c-common.c (warn_div_by_zero): New. + * c-common.h (warn_div_by_zero): New. + * c-decl.c (c_decode_option): Take it on the command line. + * c-typeck.c (build_binary_op): Warn about division by zero. + * doc/invoke.texi: Document the new command line option, fix + documentation of -Wmultichar. + * testsuite/gcc.dg/divbyzero.c: New tests. + * testsuite/gcc.dg/noncompile/20010524-1.c: Update. + + Tue Oct 23 15:30:23 CEST 2001 Jan Hubicka + + * i386.c (ix86_expand_int_movcc): Cleanup; use expand_simple_*op. + + * toplev.c (rest_of_compilation): Use CLEANUP_UPDATE_LIFE + to avoid update_life_info call. + * basic-block.h (CLEANUP_UPATE_LIFE): Define. + * cfgcleanup.c (bb_flags): New enum. + (BB_FLAGS, BB_SET_FLAG, BB_CLEAR_FLAG, FORWARDER_BLOCK_P): New macros. + (notice_new_block, update_forwarder_flag): New functions. + (try_simplify_condjump): Use FORWARDER_BLOCK_P. + (try_forward_edges): Likewise; update flags. + (merge_blocks): Likewise. + (outgoing_edges_match): Likewise. + (try_crossjump_to_edge): Likewise. + (try_optimize_cfg): Likewise; initialize and clear the flags; + recompute life info if needed. + (cleanup_cfg): No need to clear aux pointers. + + 2001-10-23 Alexandre Oliva + + * config/i386/i386.c (override_options): Default to minimum + stack alignment when optimizing for code size. + * doc/invoke.texi (-mpreferred-stack-boundary): Document the + change. + + * config/i386/i386.c (override_options): Set upper limit of + -mpreferred-stack-boundary to 12. + + 2001-10-22 Zack Weinberg + + * recog.c (peephole2_optimize): Add default case to switch. + + 2001-10-23 Joseph S. Myers + + * doc/gcc.texi (Sending Patches): Remove. + + 2001-10-22 Hans-Peter Nilsson + + * unwind-dw2-fde.c (fde_unencoded_compare): Derefer pc_begin + fields when comparing. + + 2001-10-22 Kaveh R. Ghazi + + * arm.h (HOST_INT, HOST_UINT): Delete. Remove all uses. + * arm.c (HOST_INT, HOST_UINT): Likewise. + + 2001-10-22 Stan Shebs + + * config/darwin-protos.h (darwin_exception_section): Declare. + (darwin_eh_frame_section): Declare. + + Mon Oct 22 18:21:25 CEST 2001 Jan Hubicka + + * i386.md (movti_rex64): Fix mode. + + 2001-10-22 Stan Shebs + + * target.h (struct gcc_target): Add asm_out.exception_section, + asm_out.eh_frame_section. + * target-def.h (TARGET_ASM_EXCEPTION_SECTION): New macro. + (TARGET_ASM_EH_FRAME_SECTION): New. + (TARGET_INITIALIZER): Update. + * output.h (default_exception_section): Declare. + (default_eh_frame_section): Declare. + * dwarf2out.c: Include target.h. + (output_call_frame_info): Call target hook for eh frames. + (default_eh_frame_section): New function. + * except.c: Include target.h. + (output_function_exception_table): Call target hook for exception + section. + * varasm.c (default_exception_section): Rename from + exception_section, remove EXCEPTION_SECTION macro. + + * config/darwin.h (darwin_eh_frame_section): New function. + (EXCEPTION_SECTION): Remove. + (TARGET_ASM_EXCEPTION_SECTION): Define. + * config/nextstep.h (EH_FRAME_SECTION_ASM_OP): Remove. + (nextstep_exception_section): New function. + (nextstep_eh_frame_section): New function. + (TARGET_ASM_EXCEPTION_SECTION): Define. + (TARGET_ASM_EH_FRAME_SECTION): Define. + + * config/pa/som.h (EXCEPTION_SECTION): Remove. + (TARGET_ASM_EXCEPTION_SECTION): Define. + * config/rs6000/sysv4.h, config/rs6000/xcoff.h + (EXCEPTION_SECTION): Remove. + (TARGET_ASM_EXCEPTION_SECTION): Define. + * config/stormy16/stormy16.h: Remove comments referencing + EXCEPTION_SECTION and EH_FRAME_SECTION_ASM_OP. + + * doc/tm.texi: Document TARGET_ASM_EXCEPTION_SECTION and + TARGET_ASM_EH_FRAME_SECTION. + + 2001-10-22 Nick Clifton + + * config/mips/mips.md (mul_acc_si): Fix precedence of conditional + terms. + + * c-format.c: Fix spelling typo in comment. + + * sched-int.h: Fix typo in GCC preamble. + + 2001-10-21 Craig Rodrigues + + PR debug/4252 + * doc/invoke.texi: Remove references to -fdump-translation-unit. + + 2001-10-22 Richard Henderson + + * config/i386/i386.c (ix86_expand_clear): New. + * config/i386/i386-protos.h: Declare it. + * config/i386/i386.md (setcc peep2s): Use it. + (movsi_xor): Unexport. + + 2001-10-22 Richard Henderson + + * flow.c (clear_log_links): Use free_INSN_LIST_list, not + free_EXPR_LIST_list for LOG_LINKS. + + 2001-10-21 Robert Lipe + + * config/i386/i386.c (sco_asm_named_section): Delete. + (sco_asm_out_constructor): Delete. + * config/i386/sco5.h (ASM_QUAD): Undo damage from att.h. + (ASM_OUTPUT_DOUBLE_INT): Likewise. + (TARGET_ASM_CONSTRUCTOR): Delete. Use default. + (TARGET_ASM_NAMED_SECTION): Use default for ELF. + (EXCEPTION_SECTION): Delete EH scn renaming hack. + + 2001-10-21 Kaveh R. Ghazi + + * c-format.c (maybe_read_dollar_number): Use safe-ctype macros + and/or fold extra calls into fewer ones. + * collect2.c (dump_file): Likewise. + * cppexp.c (parse_number): Likewise. + * cpplex.c (_cpp_lex_direct): Likewise. + * final.c (output_asm_insn, asm_fprintf): Likewise. + * fix-header.c (inf_scan_ident, main): Likewise. + * fixinc/fixfixes.c (char_macro_use_fix, char_macro_def_fix): + Likewise. + * fold-const.c (real_hex_to_f): Likewise. + * gen-protos.c (parse_fn_proto): Likewise. + * genattrtab.c (check_attr_test, check_attr_value): Likewise. + * genrecog.c (change_state, write_action): Likewise. + * gensupport.c (shift_output_template): Likewise. + * local-alloc.c (requires_inout): Likewise. + * mips-tfile.c (IS_ASM_IDENT): Likewise. + * protoize.c (is_id_char, main): Likewise. + * real.c (asctoeg): Likewise. + * recog.c (asm_operand_ok): Likewise. + * reload.c (find_reloads): Likewise. + * scan.c (scan_identget_token): Likewise. + * sched-vis.c (print_value): Likewise. + * stringpool.c (ggc_alloc_string): Likewise. + * toplev.c (read_integral_parameter, decode_g_option): Likewise. + * tradcif.y (parse_number, yylex, parse_escape): Likewise. + * tradcpp.c (rescan): Likewise. + * tree.c (clean_symbol_name): Likewise. + * varasm.c (decode_reg_name): Likewise. + + * alpha.h (ASM_OUTPUT_ASCII): Likewise. + * darwin.c (name_needs_quotes, func_name_maybe_scoped): Likewise. + * dsp16xx.h (ASM_OUTPUT_ASCII): Likewise. + * m88k.c (output_ascii): Likewise. + * m88k.h (OVERRIDE_OPTIONS): Likewise. + * mcore.h (REG_CLASS_FROM_LETTER): Likewise. + * ns32k/encore.h (ASM_OUTPUT_ASCII): Likewise. + * sh.h (REG_CLASS_FROM_LETTER): Likewise. + + 2001-10-21 Neil Booth + + * langhooks.c (lang_hook_default_do_nothing, + lang_hook_default_decode_option): New defaults. + * langhooks.h: Make hooks unconditional and non-NULL. + * toplev.c (compile_file, toplev_main): Update. + * toplev.h: Update comments. + * objc/objc-act.c (lang_hooks): Update to new paradigm. + + 2001-10-21 Kaveh R. Ghazi + + * arm.h (FUNCTION_ARG_REGNO_P): Use IN_RANGE. + + * system.h (IN_RANGE): New macro. + + 2001-10-21 Zack Weinberg + + * aclocal.m4 (AM_WITH_NLS): Also create and substitute + INTLDEPS variable, which does not include $LIBICONV. + * Makefile.in: Use INTLDEPS in LIBDEPS. + * configure: Regenerate. + + 2001-10-21 Neil Booth + + * cpphash.h (struct cpp_buffer): Delete read_ahead and extra_char. + * cpplex.c (lex_percent, lex_dot): Remove. + (get_effective_char, skip_block_comment, skip_line_comment, + parse_identifier_slow, parse_number, parse_string, save_comment, + _cpp_lex_direct): Update to do lookback freely. + (IF_NEXT_IS, BACKUP): New macros. + * cpplib.c (cpp_push_buffer): Don't set read_ahead and extra_char. + * cppmacro.c (paste_tokens): Update. + + 2001-10-20 Nick Clifton + + * doc/invoke.texi (i386 and x86-64 Options): Fix typo. + + 2001-10-20 Hans-Peter Nilsson + + * reload1.c (reload): Check CONSTANT_P before calling + LEGITIMATE_PIC_OPERAND_P. + * config/cris/cris.c (cris_legitimate_pic_operand): Revert + workaround of 2001-10-13. + + Sat Oct 20 15:16:10 CEST 2001 Jan Hubicka + + * i386.c (split_di): Handle splitting of DFmode. + + Sat Oct 20 07:27:14 2001 Richard Kenner + + * emit-rtl.c (set_mem_attributes): Alignment is in bits. + (adjust_address_1, offset_address): Likewise. + + * final.c (output_asm_operand_names): New fcn, from output_asm_insn. + (output_asm_insn): Call it for each line output. + Don't record an operand more than once. + + * toplev.h (struct lang_hooks): HONOR_READONLY now bool. + * main.c: Include config.h and system.h, but not ansidecl.h. + * Makefile.in (main.o): Update accordingly. + + Sat Oct 20 12:05:31 CEST 2001 Jan Hubicka + + * i386.h (SSE_REGPARM_MAX): Set to 8 for x86_64. + + Sat Oct 20 12:01:07 CEST 2001 Jan Hubicka + + * basic-block.h (find_sub_basic_blocks): Use sbitmap parameter. + * cfgbuild.c (find_bb_boundaries, compute_outgoing_frequencies): + Break out from ... + (find_sub_basic_blocks): ... here; + (find_many_sub_basic_blocks): New. + * recog.c (split_all_insns): Update find_sub_basic_blocks call. + + * i386.h (ASM_PREFERRED_EH_DATA_FORMAT): Define sdata4. + + * i386.c (ix86_va_arg): Kill indirect_p handling; fix aliasing issues.: + + * i386.c (split_di, split_ti): Revamp to use simplify_subreg. + + * timevar.def (TV_LIFE, TV_LIFE_UPDATE, TV_MODE_SWITCH): new. + * flow.c (update_life_info): Measure time. + * c-decl.c: Include timevar.h + (c_expand_body): Measure time. + * toplev.c (rest_of_compilation): Measure time of mode switching + separately. + * Makefile.in (c-decl.o, cfgcleanup.o): Add dependency. + + * toplev.c (flag_asynchronous_unwind_tables): New global variable. + (lang_independent_options): Add asynchronous-unwind-tables + (toplev_main): flag_asynchronous_unwind_tables implies + flag_unwind_tables. + * flags.h (flag_asynchronous_unwind_tables): Declare. + * dwarf2out.c (dwarf2out_stack_adjust): Take into account + flag_asynchronous_unwind_tables. + (output_call_frame_info): Likewise. + * invoke.texi (-fasynchronous-unwind-tables): Document. + * i386.c (optimization_options): Enable + flag_asynchronous_unwind_tables. + + * i386.c (ix86_expand_setcc): Always expect target to be QImode. + * i386.md (s* expanders): Destination is QImode. + + * toplev.c (rest_of_compilation): Do not call clear_log_links. + * rtl.h (clear_log_links): Kill. + * flow.c (clear_log_links): Make static; accept blocks parameter; + do no clear life info. + (update_life_info): Call clear_log_links. + + * cfganal.c (forwarder_block_p): Avoid active_insn_p calls. + + 2001-10-20 Neil Booth + + * cpplex.c (handle_newline, skip_escaped_newlines, + get_effective_char, skip_block_comment, skip_line_comment, + parse_identifier_slow, parse_number, parse_string, + _cpp_lex_direct): Update to do more stepping back. + (trigraph_ok): Similarly. Rename trigraph_p. + (SAVE_STATE, RESTORE_STATE): Remove. + (BUFF_SIZE_UPPER_BOUND): Tweak. Add sanity check. + + * cpplib.c (destringize): Rename destringize_and_run, and + call run_directive directly. + (_cpp_do__Pragma): Simplify. + + 2001-10-19 Kaveh R. Ghazi + + * pe.c (arm_pe_unique_section): Const-ify. + * pe.h (TARGET_ASM_NAMED_SECTION): Undef before defining. + (switch_to_section): Add static prototype. + + * output.h (drectve_section): Prototype. + + 2001-10-19 Franz Sirl + + * config.gcc (i[34567]86-*-gnu*, arc-*-elf*, d30v-*, + fr30-*-elf, hppa*64*-*-linux*, parisc*64*-*-linux*, hppa*-*-linux*, + parisc*-*-linux*, i370-*-linux*, i[34567]86-*-chorusos*, + i[34567]86-*-elf*, i[34567]86-ncr-sysv4*, i[34567]86-*-netware, + i[34567]86-sequent-ptx4*, i[34567]86-sequent-sysv4*, + i[34567]86-*-beoself*, i[34567]86-*-beos*, i[34567]86-*-freebsd*, + i[34567]86-*-netbsdelf*, i[34567]86-*-linux*libc1, + i[34567]86-*-linux*, i[34567]86-moss-msdos*, i[34567]86-*-moss*, + i[34567]86-go32-rtems*, i[34567]86-*-rtems*, i[34567]86-*-rtemself*, + i[34567]86-*-solaris2*, i[34567]86-*-sysv5*, i[34567]86-*-sysv4*, + i[34567]86-*-udk*, i[34567]86-*-osf1*, i[34567]86-dg-dgux*, + i860-alliant-*, i860-*-sysv4*, ia64*-*-aix*, ia64*-*-linux*, + ia64*-*-hpux*, m32r-*-elf*, m88k-dg-dgux*, m88k-*-sysv4*, mcore-*-elf, + mips*-*-linux*, mn10200-*-*, mn10300-*-*, pj*-linux*, pjl-*, + powerpc64-*-linux*, powerpc-*-sysv*, powerpc-*-netbsd*, + powerpc-*-chorusos*, powerpc-*-eabiaix*, powerpc-*-eabisim*, + powerpc-*-elf*, powerpc-*-eabi*, powerpc-*-rtems*, + powerpc-*-linux*libc1, powerpc-*-linux*, powerpc-wrs-vxworks*, + powerpcle-wrs-vxworks*, powerpcle-*-sysv*, powerpcle-*-elf*, + powerpcle-*-eabisim*, powerpcle-*-eabi*, powerpcle-*-solaris2*, + rs6000-*-mach*, s390-*-linux*, s390x-*-linux*, sh-*-elf*, + sh-*-rtemself*, sh-*-rtems*, sh-*-linux*, stormy16-*-elf, + v850-*-rtems*, v850-*-*, x86_64-*-linux*), cris-*-aout, cris-*-elf, + cris-*-none, cris-*-linux*: Update ${tmfile} list. + (c4x-*-rtems*, c4x-*, i[34567]86-go32-rtems*, i[34567]86-*-rtemscoff*, + i[34567]86-*-rtems*, i[34567]86-*-rtemself*, i[34567]86-*-osf1*, + mn10200-*-*, mn10300-*-*, powerpc-*-beos*, powerpc-*-darwin*, + powerpc-wrs-vxworks*, powerpcle-wrs-vxworks*, v850-*-rtems*, + v850-*-*): Delete superflous ${cpu_type} setting. + * config/linux.h: Delete svr4.h include. + (SET_ASM_OP): Delete. + * config/netware.h (INT_ASM_OP): Undef before define. + * config/ptx4.h: Delete elfos.h include. + (PREFERRED_DEBUGGING_TYPE): Undef instead of wrapping. + * config/svr4.h: Delete elfos.h include. Update commentary. + * config/arc/arc.h, config/d30v/d30v.h, config/fr30/fr30.h, + config/m32r/m32r.h, config/m88k/sysv4.h, config/mn10200/mn10200.h, + config/mn10200/mn10300.h, config/stormy16/stormy16.h, + config/v850/v850.h: Delete svr4.h include. + * config/i370/linux.h, config/i386/osf1elf.h, config/m68k/linux.h, + config/m68k/m68kv4.h, config/m88k/sysv4.h, + config/sparc/sysv4.h: Update includes. + * config/i386/beos-elf.h, config/i386/netware.h, config/i386/ptx4-i.h, + config/i386/rtemself.h, config/i386/sol2.h, config/i386/sysv4.h, + config/i386/sysv5.h, config/i386/udk.h, config/ia64/linux.h, + config/m88k/dguxbcs.h: Delete includes. + * config/i386/dgux.h, config/i386/osf1elfgdb.h: Delete include. + (PREFERRED_DEBUGGING_TYPE): Undef before defining it. + * config/i860/fx2800.h (ASM_OUTPUT_SOURCE_LINE): Undef before defining + it. + * config/m88k/dgux.h: Delete include. + (SDB_DEBUGGING_INFO, PREFERRED_DEBUGGING_TYPE): Undef before + defining it. + * config/pj/pj.h (ASM_GENERATE_INTERNAL_LABEL, + ASM_OUTPUT_INTERNAL_LABEL, ASM_OUTPUT_SKIP): Undef before defining it. + * config/sh/elf.h: Update include. + (SDB_DEBUGGING_INFO, DWARF2_DEBUGGING_INFO, PREFERRED_DEBUGGING_TYPE, + DWARF2_ASM_LINE_DEBUG_INFO): Move behind includes. + + 2001-10-19 Catherine Moore + + * config/stormy16/stormy-abi: Updates to varargs descriptions. + * config/stormy16/stormy16.c (stormy16_build_va_list): Reverse + base and count fields. + (stormy16_expand_builtin_va_start): last_reg_count changed to + size_of_reg_args. Use count + size in first comparison. + + Fri Oct 19 15:24:39 2001 Richard Kenner + + * langhooks.h (LANG_HOOKS_HONOR_READONLY): New macro. + * toplev.h (struct lang_hooks): New field HONOR_READONLY. + * emit-rtl.c (set_mem_attributes): Set RTX_UNCHANGING_P from + TREE_READONLY and TYPE_READONLY if lang_hooks.honor_readonly. + Set alignment from type if INDIRECT_REF. + (adjust_address_1, offset_address): Simplify alignment compuitation. + * expr.c (expand_expr, case INDIRECT_REF): Don't set RTX_UNCHANGING_P + here; done by set_mem_attributes. + + 2001-10-19 Kaveh R. Ghazi + + * Makefile.in (rtlanal.o): Depend on $(TM_P_H). + * arm-protos.h (rdata_section, zero_init_section, common_section): + Prototype. + * arm.h (ASM_OUTPUT_DEF_FROM_DECLS): Const-ify. + * avr.h (ASM_OUTPUT_SKIP): Rename macro parameter to avoid + traditional mode stringification. + * function.c (thread_prologue_and_epilogue_insns): Wrap variable + in macros controling its use. + * rtlanal.c: Include tm_p.h. + * varasm.c (asm_output_aligned_bss): Mark parameter with + ATTRIBUTE_UNUSED. + (assemble_constant_align, assemble_start_function, assemble_align, + assemble_variable, assemble_trampoline_template, + output_constant_def_contents): Wrap potentially empty if-stmt body + in brackets. + + 2001-10-19 Kaveh R. Ghazi + + * a29k-protos.h (literal_section): Prototype. + * a29k.h (ASM_FILE_START): Don't discard pointer qualifier. + * a29k.md: Ensure function pointers are prototyped. + * genattrtab.c (write_eligible_delay): Mark parameter with + ATTRIBUTE_UNUSED. + + 2001-10-19 Kaveh R. Ghazi + + * calls.c (emit_call_1): Mark parameter with ATTRIBUTE_UNUSED. + * 1750a.c (print_operand): Fix format specifier warning. + * 1750a.h (ASM_FILE_START): Don't discard pointer qualifier. + * 1750a.md: Likewise. + * gcc.c (init_gcc_specs): Wrap with ENABLE_SHARED_LIBGCC. + * genemit.c (output_add_clobbers): Mark parameter with + ATTRIBUTE_UNUSED. + * genrecog.c (write_subroutine): Likewise. + * integrate.c (expand_inline_function): Delete unused variable. + * varasm.c (remove_from_pending_weak_list): Wrap with + ASM_WEAKEN_LABEL. + + 2001-10-19 Jakub Jelinek + + * simplify-rtx.c (simplify_plus_minus): Negate constant iff its neg + field is different to previous argument's neg field. + + * config/alpha/alpha.c (summarize_insn): Don't abort on ASM_INPUT. + + Fri Oct 19 15:24:39 2001 Richard Kenner + + * final.c (get_decl_from_op): New function. + (output_asm_insn): Call it; write "*" when item with decl is address. + + 2001-10-19 Janis Johnson + + * doc/install.texi (Specific, sparc-sun-solaris2*) Copy documentation + about 64-bit support from the 3.0_branch version. + + 2001-10-19 Zack Weinberg + + * aclocal.m4 (AM_WITH_NLS): AC_DEFINE HAVE_LIBINTL_H and + USE_INCLUDED_LIBINTL when appropriate. + * configure, config.in: Regenerate. + * Makefile.in (datadir): Set to @datadir@. + (intl.o): Also depend on $(CONFIG_H) and system.h. + + * intl.c: Factor out common gettext initialization sequence. + (gcc_init_libintl): New function. + * intl.h: Include intl/libgnuintl.h if USE_INCLUDED_LIBINTL; + otherwise include libintl.h if HAVE_LIBINTL_H; otherwise turn + off NLS. Add multiple include guard. No need to #ifdef-guard + an #undef. Prototype gcc_init_libintl here. + + * collect2.c (main), cppmain.c (general_init), gcc.c (main), + gcov.c (main), protoize.c (main), toplev.c (toplev_main): + Use gcc_init_libintl. + + 2001-10-19 Catherine Moore + + * config/stormy16/stormy16.h (ASM_COMMENT_START): Define. + + * config/stormy16/stormy16.c (stormy16_split_move): Make + sure that REG_INC notes are present for auto_inc operands. + + 2001-10-19 Andreas Jaeger + + * configure: Regenerated. + * configure.in: Add x86_64 to switch statements. + + 2001-10-18 Richard Henderson + + * config/alpha/alpha.md (sibcall_osf_1): Load destination + address into $27 explicitly. + (sibcall_value_osf_1): Likewise. + + Thu Oct 18 16:07:39 2001 Richard Kenner + + * emit-rtl.c (gen_reg_rtx): Also reallocate reg_decl array. + (offset_address): New function. + (free_emit_status): Free regno_decl. + (init_emit): Pass proper number of elements to xcalloc. + Allocate regno_decl. + (mark_emit_status): Mark regno_decl values. + * expr.c (highest_pow2_factor): New function. + (expand_assigment): Use it and offset_address. + Properly handle ptr_mode vs. Pmode in offset calculation. + (store_constructor, expand_expr_unaligned): Likewise. + (expand_expr, case COMPONENT_EXPR): Likewise. + * expr.h (offset_address): New decl. + * function.h (struct emit_status): Add regno_decl. + (REGNO_DECL): New macro. + * final.c (output_asm_name): Move in file and don't conditionalize + on flag_print_asm_name. + (output_asm_insn): Only call output_asm_name if flag_print_asm_name. + Output names of operands, if known. + * function.c (assign_parms): Set REGNO_DECL. + * integrate.c (integrate_decl_tree): Likewise. + * stmt.c (expand_decl): Likewise. + * regclass.c (reg_scan_mark_refs): Propagate REGNO_DECL for copies. + + 2001-10-18 Alexandre Oliva + + * attribs.c (handle_noinline_attribute): New function. + (handle_used_attribute): Likewise. + (c_common_attribute_table): Added noinline and used. + * doc/extend.texi (Function Attributes): Document them. + * c-decl.c (duplicate_decls): Propagate DECL_UNINLINABLE. + Warn when merging inline with attribute noinline. + (start_decl, start_function): Warn if inline and attribute + noinline appear in the same declaration. + + 2001-10-17 Neil Booth + + * config.gcc: Update c4x and i370 for C front end-specific + dependencies. + * config/c4x/c4x-c.c: New. + * config/c4x/c4x-protos.h (c4x_handle_pragma): Remove. + (code_tree, data_tree, pure_tree, noreturn_tree, interrupt_tree): + New declarations. + * config/c4x/c4x.c: Don't include c-lex.h or c-pragma.h. + (code_tree, data_tree, pure_tree, noreturn_tree, interrupt_tree): + Make extern. + (c4x_init_pragma): Remove. + (c4x_parse_pragma, c4x_pr_CODE_SECTION, c4x_pr_DATA_SECTION, + c4x_pr_FUNC_IS_PURE, c4x_pr_FUNC_NEVER_RETURNS, c4x_pr_INTERRUPT, + c4x_pr_ignored): Move to c4x-c.c. + * config/c4x/c4x.h (REGISTER_TARGET_PRAGMAS): Update. + * config/c4x/t-c4x: Update. + * config/i370/i370-c.c: New. + * config/i370/i370.c: Don't include c-lex.h or c-pragma.h. + (i370_pr_map): Move to i370-c.c. + * config/i370/t-i370: New. + + * doc/tm.texi: Update. + + 2001-10-17 Stan Shebs + + * config/rs6000/rs6000.c: Make assorted mechanical formatting and + typo fixes throughout. + (machopic_output_stub): Remove some dead code. + + 2001-10-17 Richard Earnshaw + + * cpplex.c (_cpp_get_buff): Fix off-by-one error that caused memory + leak. + + Wed Oct 17 05:26:39 2001 Richard Kenner + + * Makefile.in (print-rtl.o): Depend on TREE_H. + * alias.c (get_alias_set): Make two passes over objects to first + see if inner object is access via restricted pointer. + Defer allocating alias set for restricted pointer until here. + Call find_placeholder with second arg nonzero. + Minor cleanups. + * c-common.c (c_apply_type_quals_to_decl): Defer getting alias + set for restricted pointer types. + * emit-rtl.c (set_mem_attributes): Set more attributes. + (set_mem_align, change_address, adjust_address_1): New functions. + (change_address_1): Now static. + (adjust_address, adjust_address_nv): Deleted. + (replace_equiv_address): Call change_address_1. + * expr.c (get_inner_reference): Handle PLACEHOLDER_EXPR. + (find_placeholder): Get starting point from PLIST arg. + (expand_expr, case PLACEHOLDER_EXPR): Initialize find_placeholder arg. + * expr.h (set_mem_align, change_address, adjust_address_1): New decls. + (adjust_address, adjust_address_nv): New macros. + * print-rtl.c (tree.h): New include. + (print_rtx, case MEM): Print all memory attributes. + + 2001-10-17 Richard Henderson + + * config/alpha/alpha.c (direct_call_operand): Don't fall off end. + + 2001-10-16 Matt Kraai + + * c-tree.texi: Eliminate duplicated word. + * cpp.texi: Likewise. + * install.texi: Likewise. + * invoke.texi: Likewise. + * tm.texi: Likewise. + + 2001-10-17 Michael Collison + + * dsp16xx.c: Fix comment formatting to match GNU standards. + (dsp16xx_output_function_prologue): Change type of 'size' + parameter from 'int' to HOST_WIDE_INT. + (dsp16xx_output_function_epilogue): Change type of 'size' + parameter from 'int' to HOST_WIDE_INT. + + 2001-10-16 Richard Henderson + + * configure.in (HAVE_AS_GOTOFF_IN_DATA): New x86 check. + * configure, config.in: Rebuild. + + * config/i386/i386.c (ix86_output_addr_vec_elt): New. + (ix86_output_addr_diff_elt): New. + * config/i386/i386.h (ASM_OUTPUT_ADDR_VEC_ELT): Use them. + (ASM_OUTPUT_ADDR_DIFF_ELT): Likewise. + (JUMP_TABLES_IN_TEXT_SECTION): New. + * config/i386/i386.md (tablejump): Handle HAVE_AS_GOTOFF_IN_DATA. + * config/i386/i386-protos.h: Update. + + * config/i386/386bsd.h, config/i386/beos-elf.h, + config/i386/freebsd-aout.h, config/i386/freebsd.h, + config/i386/i386-interix.h, config/i386/i386elf.h, + config/i386/linux.h, config/i386/netbsd-elf.h, + config/i386/netbsd.h, config/i386/openbsd.h, + config/i386/ptx4-i.h, config/i386/rtemself.h, + config/i386/sco5.h, config/i386/sysv4.h, config/i386/x86-64.h + (ASM_OUTPUT_ADDR_DIFF_ELT, JUMP_TABLES_IN_TEXT_SECTION): Remove. + + 2001-10-16 Florian Weimer + + * stmt.c (expand_asm_operands): Update commentary. + + 2001-10-16 Stan Shebs + + * config/darwin.h (GCC_NAME): Remove, no longer used. + (NO_MATH_LIBRARY): Ditto. + (MATH_LIBRARY): Define to emptiness. + (DWARF2_DEBUGGING_INFO): Define. + (PREFERRED_DEBUGGING_TYPE): Define. + (EXTRA_SECTION_FUNCTIONS): Add darwin_exception_section. + (EXCEPTION_SECTION): Define. + (ASM_PREFERRED_EH_DATA_FORMAT): Define. + * config/darwin.c (darwin_encode_section_info): Handle case of + DECL_INITIAL being error_mark_node. + + 2001-10-16 Richard Henderson + + * alpha.c (current_file_function_operand): Don't fail for profiling. + (direct_call_operand): New. + * alpha-protos.h: Declare it. + * alpha.h (EXTRA_CONSTRAINT): Use it. + (PREDICATE_CODES): Add it. + (ASM_OUTPUT_MI_THUNK): Remove. + * alpha32.h (ASM_OUTPUT_MI_THUNK): Remove. + * alpha.md (sibcall_osf_1, sibcall_value_osf_1): Add 's' alternative. + + 2001-10-16 Krister Walfridsson + + * config/i386/netbsd-elf.h (ASM_OUTPUT_ADDR_DIFF_ELT): Define. + (JUMP_TABLES_IN_TEXT_SECTION): Define. + + Wed Oct 17 00:21:31 CEST 2001 Jan Hubicka + + * cfg.c (free_edge): Break out from .... + (remove_edge): ... here. + (clear_edges): Use free_edge. + + * att.h (ASM_QUAD): Add comment. + * bsd.h, sco5.h, sun386.h (ASM_QUAD): Define. + + Wed Oct 17 00:01:02 CEST 2001 Jan Hubicka + + * i386.c (split_ti): New function. + (ix86_split_to_parts): Support TImodes. + * i386.h (VALID_INT_MODE_P): Add TImode. + * i386.md (movdi splitter): Fix. + (movti): Support 64bit integer registers. + (movti_rex64): New function and splitter. + + * i386.c (*_cost): Add movsx/movzx cost. + * i386.h (struct processor_costs): Add movsx/movzx fields. + (RTX_COSTS): Handle zero/sign extend + avoid believing that + 64bit operations require split on 64bit machine. + (CONST_COST): Make large 64bit constants expensive on 64bit compilation. + + * i386.c (ix86_setup_incoming_varargs): Fix mode of PLUS. + (ix86_expand_move): Avoid pushes of memory if size does not match; + move long constants to register. + (x86_initialize_trampoline): Fix mode. + * i386.h (ASM_OUTPUT_ADDR_VEC_ELT, ASM_OUTPUT_ADDR_DIFF_ELT): + Use ASM_QUAD on 64bit. + * i386.md (test pattern): Disallow impossible constants. + (tablejump PIC expander): Fix emitting of sum. + (movdicc_rex64): Rename to movdicc. + * linux64.h (LINK_SPEC): Add missing '%'. + + 2001-10-16 Alexandre Oliva + + * tree-inline.c (inlinable_function_p): Leave it up to the + front-end to turn -finline-functions into DECL_INLINE set for all + functions. + + 2001-10-16 Stan Shebs + + * config/rs6000/darwin.h (ASM_COMMENT_START): Define. + + 2001-10-16 Alan Modra + + * recog.c: Formatting and comment typo fixes. + + * configure.in (gcc_cv_as_bfd_srcdir): New. Use it to find gas + version in single tree build. + * configure: Regenerate. + + 2001-10-15 David Edelsohn + + * config/rs6000/rs6000.md (cr_logical): Swap order of CODE and + MODE arguments to gen_rtx and compare operand with const0_rtx. + + 2001-10-15 Neil Booth + + * system.h: Poison old unused target macros. + * config/dsp16xx.h (ASM_OPEN_PAREN, ASM_CLOSE_PAREN): Remove. + * config/stormy16/stormy16.c: Update references to obsolete macros. + * config/stormy16/stormy16.h: Similarly. + * config/stormy16/stormy16.md: Similarly. + * config/cris/cris.h: Similarly. + + 2001-10-15 Neil Booth + + * cpplib.c (struct pragma_entry): Store the name as a hashnode. + (lookup_pragma_entry, insert_pragma_entry, do_pragma, + cpp_register_pragma): Update accordingly. + + 2001-10-14 Neil Booth + + * c-pragma.h (cpp_register_pragma_space): Remove. + * cpplib.h (cpp_register_pragma_space): Remove. + * cpplib.c (lookup_pragma_entry, insert_pragma_entry): New. + (cpp_register_pragma_space): Remove. + (cpp_register_pragma): Simplify using lookup_pragma_entry, + add sanity checks. + (do_pragma): Similarly. + (_cpp_init_internal_pragmas): Don't register namespaces. + + * config/v850/v850.h (REGISTER_TARGET_PRAGMAS): + Don't register namespaces. + * cp/lex.c (init_cp_pragma): Similarly. + * doc/tm.texi: Update. + + 2001-10-10 Craig Rodrigues + + PR c/4157 + * config/i386/cygwin.h: Add missing space to MINGW_INCLUDES + + 2001-10-13 Michael Collison + + * config/dsp16xx/dsp16xx.md: Rewrite for more efficient code and + add scheduling support. + * config/dsp16xx/dsp16xx.h: Rewrite for more efficient code. + * config/dsp16xx/dsp16xx.c: Rewrite for more efficient code. + * config/dsp16xx/dsp16xx-protos.h: Add new function prototypes. + + + 2001-10-13 Hans-Peter Nilsson + + * config/cris/cris.c (cris_legitimate_pic_operand): Kludge around + missing CONSTANT_P test in core GCC. + + 2001-10-12 Neil Booth + + * cppmain.c (struct printer): New member source. + (scan_translation_unit): Fix spacing at start of lines. + (cb_line_change): Update. + + * gcc.dg/cpp/spacing2.c: New test. + + 2001-10-12 Hans-Peter Nilsson + + * config/cris/arit.c: Use __builtin_labs, not abs. + + * config/cris/cris.h (SET_STRIPPABLE_EXECUTABLE): Don't define. + + * config/cris/cris.c (cris_target_asm_function_epilogue): Move + misplaced sprintf and fprintf argument. + + 2001-10-12 Zack Weinberg + + * ABOUT-NLS, aclocal.m4: Update i18n framework from gettext 0.10.40. + * configure.in, Makefile.in: Take out obsolete check-po logic. + * configure, config.in: Regenerate. + + 2001-10-12 Ziemowit Laski + + * objc/objc-act.c (finish_objc): Correct precondition for emitting + symtab declarations. + + 2001-10-12 Stan Shebs + + * config/rs6000/rs6000.c: Remove uses of "register" specifier in + declarations of arguments and local variables. + + 2001-10-12 Christopher Faylor + + * config/i386/cygwin.h: Revert erroneous checkin of crtbegin and + ENDFILE_SPEC definition. + + 2001-10-12 Kazu Hirata + + * gthr-dce.h: Fix comment formatting. + * gthr-posix.h: Likewise. + * gthr-single.h: Likewise. + * gthr-solaris.h: Likewise. + * gthr-vxworks.h: Likewise. + * gthr-win32.h: Likewise. + + 2001-10-12 Jakub Jelinek + + * final.c (output_asm_insn): Make sure assembly dialects are + terminated, not nested. Output `|' and `}' characters if they + don't appear inside assembly dialect selection. + * config/i386/i386.md (rep_movdi_rex64, rep_movsi, rep_movsi_rex64, + rep_movqi, rep_movqi_rex64, rep_stosdi_rex64, rep_stossi, + rep_stossi_rex64, rep_stosqi, rep_stosqi_rex64, strsetsi_1, + strsetsi_rex_1): Add {} braces. + + 2001-10-11 Zack Weinberg + + * toplev.c (compile_file): Ignore return value from yyparse. + Always pop any nested binding levels after yyparse returns. + + 2001-10-11 Richard Henderson + + * doc/c-tree.texi (Expression trees): Add VTABLE_REF. + + 2001-10-11 Richard Henderson + + * dwarf2out.c (add_const_value_attribute): If long < HOST_WIDE_INT, + fall back to add_AT_long_long for large CONST_INT. + + 2001-10-11 Richard Henderson + + * config/i386/i386.md (setcc splitters): Add four splitters to + simplify compound compares that simplify_comparison can't handle. + + 2001-10-11 Zack Weinberg + + * cpplex.c (digraph_spellings, token_spellings): Make static. + + 2001-10-11 Franz Sirl + + * unroll.c (loop_iterations): Fixup last patch. + + 2001-10-11 Richard Henderson + + * rtl.h (REG_VTABLE_REF): New. + * rtl.c (reg_note_name): Add it. + * combine.c (distribute_notes): Handle it. + * final.c (final_scan_insn): Handle it. + * tree.def (VTABLE_REF): New. + * expr.c (expand_expr): Handle it. + * varasm.c (assemble_vtable_entry, assemble_vtable_inherit): New. + * output.h: Declare them. + + 2001-10-11 Richard Henderson + + * dwarf2out.c (rtl_for_decl_location): If no DECL_RTL, look + for a DECL_INITIAL. + + 2001-10-11 David Edelsohn + + * config/rs6000/xcoff.h (UNALIGNED_DOUBLE_INT_ASM_OP): Only + available in 64-bit mode. + + 2001-10-11 Hans-Peter Nilsson + + * config.gcc: Add cris-*-aout, cris-*-elf, cris-*-none, + cris-*-linux* cases. + * config/cris/cris-protos.h: New file. + * config/cris/cris.c: New file. + * config/cris/cris.h: New file. + * config/cris/cris.md: New file. + * config/cris/linux.h: New file. + * config/cris/aout.h: New file. + * config/cris/arit.c: New file. + * config/cris/cris_abi_symbol.c: New file. + * config/cris/mulsi3.asm: New file. + * config/cris/t-aout: New file. + * config/cris/t-cris: New file. + * config/cris/t-elfmulti: New file. + * config/cris/t-linux: New file. + * doc/invoke.texi: Add CRIS options. + * doc/install.texi (Specific): Add blurb for CRIS. + + 2001-10-10 Hartmut Schirmer + + * config/float-i128.h: Make sure __STDC__VERSION__ is defined + before using it. + * config/float/i32.h: Likewise. + * config/float-i386.h: Likewise. + * config/float-i64.h: Likewise. + * config/float-m68k.h: Likewise. + * config/float-sh.h: Likewise. + * config/float-sparc.h: Likewise. + + 2001-10-11 Hans-Peter Nilsson + + * doc/contrib.texi: Add note about CRIS port to my entry. + + 2001-10-11 Kazu Hirata + + * basic-block.h: Fix formatting. + * bitmap.h: Likewise. + * cpplib.h: Likewise. + * c-tree.h: Likewise. + * diagnostic.h: Likewise. + * flags.h: Likewise. + * ggc.h: Likewise. + * longlong.h: Likewise. + * real.h: Likewise. + * reload.h: Likewise. + * rtl.h: Likewise. + * tree.h: Likewise. + + 2001-10-10 Richard Henderson + + * c-parse.in (asm_operand): Allow named operands. + * genconfig.c (max_recog_operands): Set to 29. + * local-alloc.c (requires_inout): Skip multiple digits. + * recog.c (asm_operand_ok): Likewise. + (preprocess_constraints): Use strtoul for matching constraints. + (constrain_operands): Likewise. + * regmove.c (find_matches): Likewise. + * reload.c (find_reloads): Likewise. + * stmt.c (parse_output_constraint): Don't reject in-out + constraint on operands > 9. Reject '[' in constraint. + (expand_asm_operands): Handle named operands. Use strtoul + for matching constraints. + (check_operand_nalternatives): Split out from expand_asm_operands. + (check_unique_operand_names): New. + (resolve_operand_names, resolve_operand_name_1): New. + + * doc/extend.texi (Extended Asm): Document named operands. + * doc/md.texi (Simple Constraints): Document matching constraints + on operands > 9. + + 2001-10-10 Richard Henderson + + * combine.c (try_combine): Handle a SEQUENCE of one insn. + + * i386.c (test splitter): Narrow tests vs paradoxical subregs. + (jcc splitters): Add two splitters to simplify compound compares + that simplify_comparison can't handle. + + 2001-10-10 Richard Henderson + + * langhooks.c: Include langhooks.h. + * Makefile.in (langhooks.o): Depend on it. + + Wed Oct 10 23:49:06 EDT 2001 John Wehle (john@feith.com) + + * rtlanal.c (noop_move_p): Insns with a REG_RETVAL note + should not be considered as a no-op. + * flow.c (delete_noop_moves): Handle REG_LIBCALL notes. + + 2001-10-10 Stan Shebs + + * alias.c: Remove uses of "register" specifier in declarations + of arguments and local variables. + * c-common.c: Ditto. + * c-convert.c: Ditto. + * c-decl.c: Ditto. + * c-format.c: Ditto. + * c-semantics.c: Ditto. + * c-typeck.c: Ditto. + * caller-save.c: Ditto. + * calls.c: Ditto. + * cfg.c: Ditto. + * cfgbuild.c: Ditto. + * cfgrtl.c: Ditto. + * collect2.c: Ditto. + * combine.c: Ditto. + * convert.c: Ditto. + * cppexp.c: Ditto. + * cppfiles.c: Ditto. + * cse.c: Ditto. + * dbxout.c: Ditto. + * defaults.h: Ditto. + * df.c: Ditto. + * dwarf2out.c: Ditto. + * dwarfout.c: Ditto. + * emit-rtl.c: Ditto. + * explow.c: Ditto. + * expmed.c: Ditto. + * expr.c: Ditto. + * final.c: Ditto. + * fix-header.c: Ditto. + * floatlib.c: Ditto. + * flow.c: Ditto. + * fold-const.c: Ditto. + * function.c: Ditto. + * gcc.c: Ditto. + * gcse.c: Ditto. + * gen-protos.c: Ditto. + * genattrtab.c: Ditto. + * gencheck.c: Ditto. + * genconfig.c: Ditto. + * genemit.c: Ditto. + * genextract.c: Ditto. + * genflags.c: Ditto. + * gengenrtl.c: Ditto. + * genoutput.c: Ditto. + * genpeep.c: Ditto. + * genrecog.c: Ditto. + * gensupport.c: Ditto. + * global.c: Ditto. + * gmon.c: Ditto. + * graph.c: Ditto. + * haifa-sched.c: Ditto. + * hard-reg-set.h: Ditto. + * hash.c: Ditto. + * integrate.c: Ditto. + * jump.c: Ditto. + * lists.c: Ditto. + * local-alloc.c: Ditto. + * loop.c: Ditto. + * mips-tdump.c: Ditto. + * mips-tfile.c: Ditto. + * optabs.c: Ditto. + * prefix.c: Ditto. + * print-rtl.c: Ditto. + * read-rtl.c: Ditto. + * real.c: Ditto. + * recog.c: Ditto. + * reg-stack.c: Ditto. + * regclass.c: Ditto. + * regmove.c: Ditto. + * reload.c: Ditto. + * reload1.c: Ditto. + * reorg.c: Ditto. + * resource.c: Ditto. + * rtl.c: Ditto. + * rtlanal.c: Ditto. + * scan.c: Ditto. + * sched-deps.c: Ditto. + * sched-rgn.c: Ditto. + * sdbout.c: Ditto. + * simplify-rtx.c: Ditto. + * stmt.c: Ditto. + * stor-layout.c: Ditto. + * toplev.c: Ditto. + * tradcif.y: Ditto. + * tradcpp.c: Ditto. + * tree.c: Ditto. + * unroll.c: Ditto. + * varasm.c: Ditto. + * xcoffout.c: Ditto. + + 2001-10-10 Richard Henderson + + * rtl.h (can_reverse_comparison_p): Remove. + + 2001-10-10 Christopher Faylor + + * config/i386/cygwin.h: Avoid adding include files if -nostdinc is + used. + + 2001-10-10 Danny Smith + + * config/i386/mingw32.h (WIN32_NO_ABSOLUTE_INST_DIRS): New define. + (Thanks to Chris Faylor for suggesting macro name). + (CPP_PREDEFINES): Define __MINGW32__ but don't set value; add more + WIN32 defines. + (STANDARD_INCLUDE_DIR): Remove i386- from directory name. + (STANDARD_INCLUDE_COMPONENT): Change to MINGW. + (MATH_LIBRARY): Undef before definition. + (OUTPUT_QUOTED_STRING): Likewise. + * config/i386/cygwin.h: Use WIN32_NO_ABSOLUTE_INST_DIRS. + + 2001-10-10 Richard Henderson + + * unwind-dw2-fde.c (fde_compare_t): Change return type to int. + (fde_unencoded_compare): Likewise. Don't use subtraction to get + a tristate comparison value. + (fde_single_encoding_compare, fde_mixed_encoding_compare): Likewise. + + 2001-10-10 Franz Sirl + + PR c++/4512 + * unroll.c (loop_iterations): Ignore insns generated by loop + unrolling. + + * config.gcc (mips*-*-gnu*): Delete support. + * config/mips/gnu.h: Remove. + + 2001-10-10 Kazu Hirata + + * calls.c: Fix formatting. + * c-decl.c: Likewise. + * cfgcleanup.c: Likewise. + * combine.c: Likewise. + * cppfiles.c: Likewise. + * cpplib.c: Likewise. + * cppmacro.c: Likewise. + * crtstuff.c: Likewise. + * cse.c: Likewise. + * dwarf2out.c: Likewise. + * expmed.c: Likewise. + * expr.c: Likewise. + * fold-const.c: Likewise. + * function.c: Likewise. + * gcse.c: Likewise. + * genattrtab.c: Likewise. + * ggc-page.c: Likewise. + * integrate.c: Likewise. + * libgcc2.c: Likewise. + * loop.c: Likewise. + * optabs.c: Likewise. + * profile.c: Likewise. + * protoize.c: Likewise. + * real.c: Likewise. + * recog.c: Likewise. + * reload1.c: Likewise. + * reload.c: Likewise. + * reorg.c: Likewise. + * resource.c: Likewise. + * sched-rgn.c: Likewise. + * sdbout.c: Likewise. + * stmt.c: Likewise. + * toplev.c: Likewise. + * varasm.c: Likewise. + + 2001-10-10 Janis Johnson , Alexandre Oliva + + * langhooks.c: Include rtl.h, insn-config.h and integrate.h. + * Makefile.in (langhooks.o): Add dependencies. + + Wed Oct 10 00:41:29 EDT 2001 John Wehle (john@feith.com) + + * rs6000.c (rs6000_emit_load_toc_table): Don't + strdup the toc label. + (create_TOC_reference): Likewise. + + 2001-10-09 Danny Smith + + * config.gcc (i[34567]86-*-mingw32*): Make msvcrt-dependent + version default. + + 2001-10-09 Danny Smith + + * config/i386/i386.c (ix86_attribute_table): Correct + min_len, max_len fields for dllimport, dllexport and shared. + + 2001-10-10 Joseph S. Myers + + * doc/c-tree.texi, doc/cppinternals.texi, doc/extend.texi, + doc/install.texi, doc/md.texi, doc/rtl.texi, doc/tm.texi: + Consistently use "nonzero" instead of "non-zero". + + 2001-10-09 Kazu Hirata + + * acconfig.h: Fix comment formatting. + * c-dump.h: Likewise. + * c-tree.h: Likewise. + * conditions.h: Likewise. + * expr.h: Likewise. + * function.h: Likewise. + * gthr.h: Likewise. + * hwint.h: Likewise. + * integrate.h: Likewise. + * intl.h: Likewise. + * loop.h: Likewise. + * optabs.h: Likewise. + + 2001-10-09 Kazu Hirata + + * c-common.h: Fix comment formatting. + * c-dump.c: Likewise. + * cfg.c: Likewise. + * diagnostic.h: Likewise. + * except.c: Likewise. + * gcc.h: Likewise. + * gcov-io.h: Likewise. + * genattrtab.c: Likewise. + * output.h: Likewise. + * predict.h: Likewise. + * reload1.c: Likewise. + * reload.h: Likewise. + * resource.h: Likewise. + * scan.h: Likewise. + * system.h: Likewise. + * tree.h: Likewise. + * tree-inline.c: Likewise. + * tsystem.h: Likewise. + * varasm.c: Likewise. + * xcoffout.h: Likewise. + + 2001-10-09 Joseph S. Myers + + * doc/gcc.texi: Document preference for "nonzero" over "non-zero". + + 2001-10-09 Joseph S. Myers + + * config/alpha/freebsd.h, config/alpha/lib1funcs.asm, + config/i386/i386elf.h, config/i386/netbsd-elf.h, + config/i386/netware.h, config/mcore/gfloat.h, + config/mcore/mcore.c, config/mcore/mcore.h, config/mcore/mcore.md, + config/netware.h, gccbug.in: Update FSF address. + + 2001-10-09 Kazu Hirata + + * c-common.c: Fix comment typos. + * cfgrtl.c: Likewise. + * collect2.c: Likewise. + * cpplex.c: Likewise. + * doloop.c: Likewise. + * dwarf2out.c: Likewise. + * dwarfout.c: Likewise. + * expr.c: Likewise. + * fold-const.c: Likewise. + * gcc.c: Likewise. + * gcov.c: Likewise. + * gcse.c: Likewise. + * global.c: Likewise. + * ifcvt.c: Likewise. + * loop.c: Likewise. + * optabs.c: Likewise. + * protoize.c: Likewise. + * regclass.c: Likewise. + * reorg.c: Likewise. + * rtl.h: Likewise. + * stmt.c: Likewise. + * tree.h: Likewise. + * doc/cpp.texi: Likewise. + * doc/c-tree.texi: Likewise. + * doc/extend.texi: Likewise. + * doc/invoke.texi: Likewise. + * doc/objc.texi: Likewise. + * doc/tm.texi: Likewise. + + 2001-10-08 Richard Henderson + + * varasm.c (set_named_section_flags): Initialize "declared". + + 2001-10-08 Robert Lipe + + * varasm.c (struct in_named_entry): Add declared. + (named_section_first_declaration): New function. + (default_elf_asm_named_section): Use it. + * output.h (named_section_first_declaration): New. + + 2001-10-08 Richard Henderson + + * i386.md (movsi_xor): Export. + (setcc peep2): Use it when available; add an alternative to + match zero_extendhisi2_and. + + 2001-10-08 Kaveh R. Ghazi + + * romp-protos.h (romp_initialize_trampoline): New function. + * romp.c (romp_initialize_trampoline): Likewise. + * romp.h (INITIALIZE_TRAMPOLINE): Define in terms of + romp_initialize_trampoline. + + 2001-10-08 Kaveh R. Ghazi + + * m68k/3b1.h (ASM_OUTPUT_SOURCE_LINE): Don't reference `last_linenum'. + * m68k/auxas.h (ASM_OUTPUT_SOURCE_LINE): Likewise. + * m68k/crds.h (ASM_OUTPUT_SOURCE_LINE): Likewise. + * m68k/mot3300.h (ASM_OUTPUT_SOURCE_LINE): Likewise. + + 2001-10-08 Franz Sirl + + * unroll.c (loop_iterations): Extend check for multiple back edges. + + 2001-10-08 Alexandre Oliva + + * langhooks.h: New file. + * Makefile.in (OBJS): Added langhooks.o. + (c-lang.o): Depend on langhooks.h. + (c-common.o): Don't depend on tree-inline.h. + (tree-inline.o): Depend on toplev.h. + (langhooks.o): New rule. + * c-common.c: Don't include tree-inline.h. + (c_mark_lang_decl): Mark argument c as unused. + (c_common_lang_init): Don't initialize hooks here. + * c-lang.c: Include langhooks.h, then override some macros. + (lang_hooks): Initialize with macros in langhooks.h. + (c_init): Don't initialize hooks here. + * toplev.c (struct lang_hooks_for_tree_inlining): New struct. + (struct lang_hooks): Add tree_inlining. Refer to langhooks.h. + * tree-inline.c: Include toplev.h. Don't define hook variables. + * tree-inline.h: Don't define hook types nor declare hook + variables. Move macros to... + * langhooks.c: ... new file, as functions. Adjust all callers. + + 2001-10-08 Jeffrey A Law + + * sibcall.c (optimize_sibling_and_tail_recursive_calls): Call + purge_mem_unchanging_flag on all instructions, not just on those + before NOTE_INSN_FUNCTION_BEG. + + 2001-10-08 Neil Booth + + * cppmacro.c (_cpp_create_definition): Leave comments off. + + * doc/cpp.texi: Update. + + 2001-10-08 DJ Delorie + + * c-decl.c (grokfield): Make sure the only unnamed fields + we're allowing are either structs or unions. + * doc/extend.texi: Add documentation for the unnamed field + extension. + + 2001-10-08 Zack Weinberg + + * aclocal.m4 (gcc_AC_PROG_GNAT): New. + * configure.in: Use it. + * configure: Regenerated. + * config/pa/t-linux, config/pa/t-pa, config/pa/t-pa64, + config/pa/t-pro: Set T_ADAFLAGS, not ADA_CFLAGS. + + 2001-10-08 Neil Booth + + * cppfiles.c (open_file): Don't mark zero-length files + never-reread here. Don't output diagnostics here either. + (stack_include_file): Mark them never-reread here. + (_cpp_read_file): Update. + + 2001-10-08 Richard Henderson + + * config/i386/sol2.h (UNALIGNED_DOUBLE_INT_ASM_OP): New. + + 2001-10-08 Richard Henderson + + * expr.c (store_expr): When converting a CONST_INT for storage + in a SUBREG, convert it to both SUBREG modes before stripping + the SUBREG. + + 2001-10-08 Richard Henderson + + * varasm.c (restore_varasm_status): New. + * function.h: Declare it. + * function.c (pop_function_context_from): Call it. + + 2001-10-08 Richard Henderson + + * c-common.h (struct c_lang_decl): Add declared_inline. + * c-tree.h (DECL_DECLARED_INLINE_P): New. + * c-lang.c (c_disregard_inline_limits): Use it. + * c-decl.c (duplicate_decls): Likewise. + (pushdecl, redeclaration_error_message): Likewise. + (pushdecl): Allocate DECL_LANG_SPECIFIC if needed. + (grokdeclarator): Likewise. Set DECL_DECLARED_INLINE_P. + Set DECL_INLINE if -finline-functions. + (store_parm_decls): Don't allocate DECL_LANG_SPECIFIC here. + + 2001-10-08 Neil Booth + + * cppmacro.c (funlike_invocation_p): Move some logic to caller + in enter_macro_context. Create a padding token in its own context + if necessary when the search for '(' fails. + (enter_macro_context): Update. + + 2001-10-07 Joseph S. Myers + + * ChangeLog.2, c-decl.c, config/i386/i386.md, doc/gcc.texi, gcc.c, + genmultilib, toplev.c: Fix spelling errors of "separate" as + "seperate", and corresponding spelling errors of related words. + + 2001-10-07 Kaveh R. Ghazi + + * builtins.c (expand_builtin_setjmp_receiver): Const-ify. + * c-common.c (fname_var_t, c_tree_code_type, c_tree_code_length): + Likewise. + * c-dump.c (dump_option_value_info): Likewise. + * c-format.c (format_length_info, format_char_info, + format_flag_spec, format_flag_pair, format_kind_info): Likewise. + * collect2.c (names): Likewise. + * cppdefault.h (default_include): Likewise. + * cppexp.c (suffix, vsuf_1, vsuf_2, vsuf_3): Likewise. + * flow.c (life_analysis): Likewise. + * gcc.c (dir_separator_str, modify_target, option_map, + target_option_translations, spec_list_1, extra_specs_1, + init_spec): Likewise. + * gcov.c (gcov_version_string): Likewise. + * genattr.c (write_units): Likewise. + * genattrtab.c (make_length_attrs, write_function_unit_info): Likewise. + * gengenrtl.c (rtx_definition, defs): Likewise. + * genrecog.c (pred_table): Likewise. + * global.c (global_alloc): Likewise. + * lcm.c (optimize_mode_switching): Likewise. + * local-alloc.c (find_free_reg): Likewise. + * params.h (param_info): Likewise. + * predict.c (predictor_info): Likewise. + * protoize.c (unexpansion_struct): Likewise. + * real.c (bmask): Likewise. + * recog.h (insn_operand_data, insn_data): Likewise. + * regclass.c (initial_fixed_regs, initial_call_used_regs): Likewise. + * stmt.c (expand_nl_goto_receiver): Likewise. + * toplev.c (da, debug_args, lang_opt, documented_lang_options, + target_switches, target_options): Likewise. + * tradcif.y (token, tokentab2, yylex): Likewise. + * tree.h (attribute_spec): Likewise. + + * alpha.c (override_options, alpha_lookup_xfloating_lib_func): + Likewise. + * arc.c (arc_output_function_epilogue): Likewise. + * arm.c (processors, all_cores, all_architectures, + arm_override_options, isr_attribute_arg, isr_attribute_args, + arm_isr_value): Likewise. + * avr.c (mcu_type_s, reg_class_tab, order_regs_for_local_alloc): + Likewise. + * c4x.c (c4x_int_reglist): Likewise. + * d30v.c (override_options): Likewise. + * h8300.c (shift_insn): Likewise. + * i386.c (size_cost, i386_cost, i486_cost, pentium_cost, + pentiumpro_cost, k6_cost, athlon_cost, pentium4_cost, ix86_cost, + ix86_expand_sse_comi, ix86_expand_sse_compare, override_options, + builtin_description, bdesc_comi, bdesc_2arg, bdesc_1arg, + ix86_init_mmx_sse_builtins, ix86_expand_builtin): Likewise. + * i386.h (processor_costs, ix86_cost): Likewise. + * m68hc11.c (m68hc11_cost, m6811_cost, m6812_cost): Likewise. + * m68hc11.h (processor_costs, m68hc11_cost): Likewise. + * m68k.c (codes_68881, codes_FPA): Likewise. + * m88k.c (mode_from_align, max_from_align, all_from_align, + best_from_align, m_options): Likewise. + * m88k.h (ORDER_REGS_FOR_LOCAL_ALLOC): Likewise. + * mcore.c (mode_from_align): Likewise. + * mips/elf64.h (UNIQUE_SECTION): Likewise. + * mips/iris6gld.h (UNIQUE_SECTION): Likewise. + * mips.c (mips_sw_reg_names, mips_regno_to_class): Likewise. + * mips.h (mips_regno_to_class): Likewise. + * ns32k.c (scales): Likewise. + * pa.c (import_string, magic_milli): Likewise. + * rs6000.c (alt_reg_names, rs6000_override_options): Likewise. + * sparc.c (leaf_reg_remap, sparc_override_options, + reg_leaf_alloc_order, reg_nonleaf_alloc_order, reg_alloc_orders): + Likewise. + * sparc.h (sparc_cpu_select, leaf_reg_remap): Likewise. + + 2001-10-07 Dale Johannesen + + * reload1.c (reload_reg_free_p): Teach register interference + checking that multiple output reloads are emitted in + reverse order. + reload1.c (reload_reg_reaches_end_p): Ditto. + reload1.c (reloads_conflict): Ditto. + + 2001-10-07 Joseph S. Myers + + * doc/c-tree.texi, doc/tm.texi: Consistently put NULL and + NULL_TREE inside @code. + + 2001-10-07 Joseph S. Myers + + * doc/gcc.texi: Document consistent style of "32-bit", + "Objective-C", and "@code{NULL}". + + 2001-10-06 Zack Weinberg + + * cpplex.c (enum spell_type): Add SPELL_NUMBER. + (cpp_token_len, cpp_spell_token, cpp_output_token, + _cpp_equiv_tokens): Handle it. + * cpplib.h (TTYPE_TABLE): Use SPELL_NUMBER for CPP_NUMBER and + CPP_COMMENT, SPELL_NONE for CPP_PADDING and CPP_EOF. + * cppexp.c (_cpp_parse_expr): Use the correct operator code in + error messages. + + Sat Oct 6 07:42:39 2001 Richard Kenner + + * gcc.c (default_compilers): Remove .ada. + + 2001-10-06 Neil Booth + + * doc/cppinternals.texi: Update. + + 2001-10-06 Zack Weinberg + + * gcc.c (main): Set this_file_error if the appropriate + compiler for a language has not been installed. + + 2001-10-06 Ulrich Weigand + + * config/s390/s390.c (s390_va_arg): Use set_mem_alias_set. + + 2001-10-05 Joseph S. Myers + + * gccbug.in (CATEGORIES): Add ada. + + 2001-10-05 Catherine Moore + + * config/stormy16/stormy-abi: Document abi changes. + * config/stormy16/stormy16.h (REG_ALLOC_ORDER): Redefine. + (ICALL_REGS): New register class. + (NUM_ARGUMENT_REGISTERS): Now 6. + (DEFAULT_PCC_STRUCT_RETURN): Don't try to return structs + in registers. + (REG_CLASS_FROM_LETTER): Map 'z' to ICALL_REGS. + * config/stormy16.md (call_internal, call_value_internal, + indirect_jump): Use new 'z' constraint. + + 2001-10-05 Neil Booth + + * doc/cppinternals.texi: Update. + + 2001-10-05 Richard Henderson + + * dwarf2out.c (FRAME_BEGIN_LABEL): New. + (output_call_frame_info): Use it instead of __FRAME_BEGIN__ and + the gas section-name-as-label feature. + + 2001-10-05 Neil Booth + + * doc/cppinternals.texi: Update. + + Fri Oct 5 08:17:46 2001 Richard Kenner + + * config/i386/i386.c (ix86_split_to_parts): Use trunc_int_for_mode + to ensure valid SImode constants. + + 2001-10-05 Alexandre Oliva + + * Makefile.in (c-decl.o): Depend on tree-inline.h. + (c-lang.o): Likewise, as well as insn-config.h and integrate.h. + * c-decl.c: Include tree-inline.h. + (c_expand_body): Call optimize_inline_calls. Determine whether + a function is inlinable upfront, and only clear + DECL_SAVED_TREE, DECL_INITIAL and DECL_ARGUMENTS if it isn't. + * c-lang.c: Include tree-inline.h, insn-config.h and integrate.h. + (c_disregard_inline_limits): New function. + (inline_forbidden_p, c_cannot_inline_tree_fn): Likewise. + (c_post_options): Enable tree inlining if inlining is enabled. + Don't inline trees when instrumenting functions. + (c_init): Initialize lang_disregard_inline_limits and + lang_cannot_inline_tree_fn. + * tree-inline.c (initialize_inlined_parameters): Handle calls + with fewer arguments than declared parameters, and fewer + parameters than passed arguments. Don't assume value is a + DECL. + (declare_return_variable): Convert return value back to the + original type, if it was promoted. + (tree_inlinable_function_p): New function. + (inlinable_function_p): Don't look at DECL_INLINE if we're + inlining all functions. Make it work with a NULL id. + Re-check DECL_UNINLINABLE after language-specific checks. + * tree-inline.h (tree_inlinable_function_p): Declare it. + * integrate.c (save_for_inline): Don't bother to prepare argvec + when not inlining. + * cse.c (check_for_label_ref): Don't check deleted labels. + + * Makefile.in (tree-inline.o): Depend on newly-included headers. + * tree-inline.c: Include headers needed for the functions moved in. + (struct inline_data, INSNS_PER_STMT): Moved from cp/optimize.c. + (remap_decl, remap_block, copy_scopy_stmt, copy_body_r): Likewise. + (copy_body, initialize_inlined_parameters): Likewise. + (declare_return_variable, inlinable_function_p): Likewise. + (expand_call_inline, expand_calls_inline): Likewise. + (optimize_inline_calls, clone_body): Likewise. + (walk_tree, walk_tree_without_duplicates): Moved from cp/tree.c. + (copy_tree_r, remap_save_expr): Likewise. + + 2001-10-04 Alexandre Oliva + + * Makefile.in (OBJS): Added tree-inline.o. + (c-common.o): Depend on tree-inline.h. + (tree-inline.o): New target. + * c-common.c: Include tree-inline.h. + (c_mark_lang_decl): Don't mark saved_tree. + (c_common_lang_init): Set lang_anon_aggr_type_p. + * c-common.h (walk_tree_fn, DECL_SAVED_TREE): Moved to tree.h. + (struct c_lang_decl): Moved saved_tree to tree_decl. + * ggc-common.c: Mark saved_tree and inlined_fns of FUNCTION_DECLs. + * integrate.h (function_attribute_inlinable_p): Declare it. + * integrate.c (function_attribute_inlinable_p): Export it. + * tree-inline.c: New file. Define variables declared in... + * tree-inline.h: New file. Declare functions to be moved to + tree-inline.c. Define macros and declare types and hooks for + language-specific tree inlining. + (flag_inline_trees): Moved definition from cp/decl2.c. + * tree.h (walk_tree_fn, DECL_SAVED_TREE): Moved from c-common.h. + (TREE_READONLY_DECL_P, DECL_INLINED_FNS): Moved from cp/cp-tree.h. + (struct tree_decl): Moved saved_tree from c_lang_decl and + inlined_fns from C++'s lang_decl. + + 2001-10-04 Loren J. Rittle + + * Makefile.in (STAGE2_FLAGS_TO_PASS): Remove patches which + propagated HOST_CC, HOST_CFLAGS, HOST_LDFLAGS and HOST_CPPFLAGS. + + 2001-10-04 Neil Booth + + * doc/cppinternals.texi: Update. + + 2001-10-04 Eric Christopher + + * config/mips/mips.c (init_cumulative_args): Remember to set + cum->prototype. + * config.gcc: Redo linux configuration. Add target_cpu_default + of soft-float to all mipsisa32 combinations and tx39. + * config/mips/linux.h: Remove include of mips.h. + + 2001-10-03 Loren J. Rittle + + * Makefile.in (STAGE2_FLAGS_TO_PASS): Propagate HOST_CFLAGS, + HOST_LDFLAGS and HOST_CPPFLAGS. + + 2001-10-03 Ziemowit Laski + + * c-parse.in (objc_inherit_code, objc_pq_context, + objc_public_flag): Make static. + (objc_interface_context, objc_implementation_context, + objc_method_context, objc_ivar_chain, objc_ivar_context): Move to + global tree array in objc/objc-act.[ch]. + (methoddef): Remove unnecessary code. + + * objc/objc-act.c: (hashed_attribute, hashed_entry, imp_entry): + Hoist struct definitions to objc-act.h. + (nst_method_hash_list, cls_method_hash_list, imp_list, imp_count, + cat_count): Place declaration in objc-act.h. + (objc_tree_index): Move enumeration to objc-act.h. + (objc_global_trees): Place declaration and macro accessors in + objc-act.h. + (implementation_context): Remove duplicate; use + objc_implementation_context instead: + (method_context): Remove duplicate; use objc_method_context + instead. + (objc_ellipsis_node, objc_method_prototype_template, + implemented_classes, function_type): Move global vars to + objc_global_trees. + (init_objc): Use LAST_BASE_TREE_CODE instead of LAST_CODE. + (build_message_expr): Move actual construction of ObjC message + send nodes to finish_message_expr. + (finish_message_expr): New routine, contains code formerly in + build_message_expr. + * objc/objc-act.h (finish_message_expr): New prototype. + (objc_ivar_chain, objc_method_context, objc_ellipsis_node): Remove + declarations; these vars are now part of objc_global_trees. + (objc_tree_index, objc_global_trees): Move definitions from + objc-act.c. + * objc/objc-tree.def: Update copyright info. + + Wed Oct 3 12:22:11 EDT 2001 John Wehle (john@feith.com) + + * dwarf2asm.c (unaligned_integer_asm_op): Abort if + op is NULL. + * sparc/sysv4.h (UNALIGNED_DOUBLE_INT_ASM_OP): Use + only if TARGET_ARCH64. + + 2001-10-02 Bernd Schmidt + + * doc/extend.texi: Fix some problems with previous checkin. + * doc/invoke.texi: Likewise. + + 2001-10-02 Neil Booth + + * cpphash.h: Update comments. + (cpp_context): Update. + (spec_nodes): Remove n__Pragma. + * cppinit.c (cpp_create_reader): Update. + (builtin_array): Add _Pragma. + * cpplib.h: Update comments. + (NODE_DISABLED, BT_PRAGMA): New. + (cpp_start_lookahead, cpp_stop_lookahead): Remove prototypes. + * cppmacro.c (struct cpp_macro): Remove disabled. + (builtin_macro): Return int, handle _Pragma, push the new token + on the context stack. + (funlike_invocation_p): Unconstify, update. + (enter_macro_context): Handle builtins here. + (replace_args, push_token_context, push_ptoken_context): + Update for prototype changes. + (_cpp_pop_context): Update. + (cpp_get_token): Don't handle buitins, nor _Pragma here. + (cpp_sys_macro_p): Update. + (_cpp_free_definition): Clear disabled flag. + (_cpp_create_definition): Upate. + * cppmain.c: Update comments. + + Tue Oct 2 12:46:01 CEST 2001 Bo Thorsen , + Andreas Jaeger , + Jan Hubicka + + * doc/invoke.texi (i386 Options): Document x86-64 options. + (i386 and x86-64 Options): Rename i386 options section. + + * config/i386/i386.h (TARGET_UNWIND_INFO): New. + (TARGET_SWITCHES): Add -munwind-info. + (MASK_NO_UNWIND_INFO): New. + (NO_BUILTIN_SIZE_TYPE, NO_BUILTIN_PTRDIFF_TYPE): Define for + biarch compilation. + (ASM_OUTPUT_DOUBLE_INT): New. + + * config/i386/linux64.h: New spec file for Linux x86-64 support. + * config.gcc: Fix tm_file settings for x86-64. + * config/i386/x86-64.h: New file with OS independent x86-64 + definitions. + * config/i386/biarch64.h: New file used to configure compiler + to biarch/64bit compilation. + + * config/i386/i386.c: (override_options): Set flags default + for 64bit compilation. + + Tue Oct 2 12:46:01 CEST 2001 Jan Hubicka + + * i386.c (legitimize_pic_address): Add missing bits of 64bit support. + (ix86_expand_int_movcc): Optimize DImode conditional moves with + constants on x86_64. + (ix86_attr_length_immediate_default): Support MODE_DI. + * i386.md (fixdi splitter): Add missing "&& 1" in splitter + condition. + (indirect_jump, tablejump): Turn into expander. + + 2001-10-02 Joseph S. Myers + + * c-common.c (c_format_attribute_table): Make format and + format_arg attributes apply to function types rather than to + decls. + (is_valid_printf_arglist): Construct an attribute list and pass + that to check_function_format rather than a name. + * c-common.h (check_function_format): Adjust prototype. + * c-decl.c (duplicate_decls): Preserve attributes from type of + built-in decl when allowing for harmless conflict in types. + * c-format.c (record_function_format, + record_international_format, function_format_list, + international_format_info, international_format_list): Remove. + (function_format_info): Remove next, name and assembler_name. + Make format_num and first_arg_num be unsigned HOST_WIDE_INT. + (decode_format_attr): New. + (handle_format_attribute): Handle receiving a type rather than a + decl. Call decode_format_attr. Store format information in a + function_format_info. + (handle_format_arg_attribute): Correct comment. Handle receiving + a type rather than a decl. Use unsigned HOST_WIDE_INT for + arg_num. + (check_format_info_recurse, check_format_info_main): Take argument + numbers as unsigned HOST_WIDE_INT. + (check_function_format): Take a list of attributes from the + function type rather than a name or assembler name. Check for + format attributes in that list and the attributes on the type of + the current function rather than looking through + function_format_list. + (check_format_info): Use unsigned HOST_WIDE_INT for argument + numbers. + (check_format_info_recurse): Take format_arg attributes from the + type of the function calls rather than using + international_format_list. Allow for multiple format_arg + attributes. + * c-typeck.c (build_function_call): Pass type attributes to + check_function_format rather than name or assembler name. Don't + require there to be a name or assembler name to check formats. + + 2001-10-02 Joseph S. Myers + + * attribs.c (decl_attributes): Possibly call + insert_default_attributes to insert default attributes on + functions in a lazy manner. + * builtin-attrs.def: New file; define the default format and + format_arg attributes. + * c-common.c (c_format_attribute_table): Move to earlier in the + file. + (c_common_nodes_and_builtins): Initialize format_attribute_table. + (enum built_in_attribute, built_in_attributes, + c_attrs_initialized, c_init_attributes, + c_common_insert_default_attributes): New. + (c_common_lang_init): Don't initialize format_attribute_table. Do + call c_init_attributes. + * Makefile.in (c-common.o): Depend on builtin-attrs.def. + * c-common.h (init_function_format_info): Don't declare. + (c_common_insert_default_attributes): Declare. + * c-decl.c (implicitly_declare, builtin_function): Call + decl_attributes. + (init_decl_processing): Don't call init_function_format_info. + (insert_default_attributes): New. + * c-format.c (handle_format_attribute, + handle_format_arg_attribute): Be quiet about inappropriate + declaration when applying default attributes. + (init_function_format_info): Remove. + * tree.h (enum attribute_flags): Add ATTR_FLAG_BUILT_IN. + (insert_default_attributes): Declare. + + 2001-10-02 Joseph S. Myers + + * c-format.c (CPLUSPLUS_STD_VER): Define to STD_C94. + + 2001-10-01 Jim Wilson + + * sched-deps.c (add_dependence): When elide conditional dependence, + check that insn doesn't modify cond2. + + 2001-10-01 Dale Johannesen + + * config/rs6000/rs6000.h (enum processor_type): Add support + for 7400 (G4) and 7450. + (RTX_COSTS): Ditto. + * config/rs6000/rs6000.c (rs6000_override_options): Ditto. + (rs6000_issue_rate): Ditto. + (rs6000_adjust_cost): Fix cycle counts for compares. + (debug_stack_info): Fix an obvious typo. + * config/rs6000/rs6000.md: Add functional units for 7400 and 7450. + * doc/invoke.texi: Document. + * config/rs6000/darwin.h (TARGET_DEFAULT): Set to be reasonable + for Darwin. + (PROCESSOR_DEFAULT): Ditto. + + 2001-10-01 Loren J. Rittle + + * Makefile.in (STAGE2_FLAGS_TO_PASS): Propagate HOST_CC. + (fixinc.sh): Map CC, CFLAGS and LDFLAGS to HOST_* versions for + later recursive make invocation. + + 2001-10-01 Hans Boehm + + * optabs.c (emit_libcall_block): When using non-call exceptions, + don't add REG_LIBCALL reg notes to trapping calls. + + 2001-10-01 David Billinghurst + + * flow.c (propagate_block_delete_libcall): Remove unused first arg + (propagate_one_insn): Update for above change + + 2001-10-01 David Billinghurst + + * unwind-sjlj.c (_Unwind_GetRegionStart, _Unwind_GetDataRelBase, + _Unwind_GetTextRelBase): Argument is unused. + + Mon Oct 1 19:20:57 2001 Richard Kenner + + * alias.c (get_alias_set): Try to replace PLACEHOLDER_EXPR. + Loop through NOPs, placeholders, and components. + Don't go through NOPs if change mode. + (record_alias_subset): Do nothing if SUBSET and SET are the same. + * emit-rtl.c (set_mem_alias_set): Enable check. + * expr.c (find_placeholder): New function. + (expand_expr, case PLACEHOLDER_EXPR): Use it. + (expand_expr, case COMPONENT_EXPR): Always copy OP0 when we need + to modify it and avoid unneeded copies. + * expr.h (expand_expr): Always define. + (find_placeholder): New declaration. + + 2001-10-01 Stephane Carrez + + * config/m68hc11/m68hc11.md ("add-split"): Fix add split when + operand 2 is the stack pointer. + ("addr-peephole"): Fix address computation peephole when operand 2 + is the stack pointer. + + Mon Oct 1 09:26:41 2001 Richard Kenner + + * config/i386/i386.c (ix86_va_arg): Call set_mem_alias_set. + (ix86_setup_incoming_varargs): Likewise. + + 2001-10-01 Jason Merrill + + * stor-layout.c (layout_type): Don't complain about too-large + array here. + + Mon Oct 1 06:43:41 2001 Richard Kenner + + * function.c (keep_stack_depressed): Don't use delete_insn. + + * expr.h (set_mem_alias_set): Move decl to here. + * rtl.h (mem_attrs): New typedef and struct. + (union rtunion_def): Add field for mem_attrs. + (X0MEMATTR, MEM_ATTRS): New macros. + (MEM_ALIAS_SET): Use MEM_ATTRS. + (MEM_DECL, MEM_OFFSET, MEM_SIZE, MEM_ALIGN): New macros. + (MEM_COPY_ATTRIBUTES): Copy MEM_ATTRS. + (set_mem_alias_set): Delete decl from here. + + * alias.c (set_mem_alias_set): Delete from here. + * emit-rtl.c (mem_attrs_htab): New variable. + (rtx_htab_mark, rtx_htab_mark_1): Deleted. + (mem_attrs_htab_hash, mem_attrs_htab_eq): New functions. + (mem_attrs_mark, get_mem_attrs): Likewise. + (gen_rtx_MEM): Clear MEM_ATTRS. + (set_mem_attributes): Move to here. + (set_mem_alias_set): Likewise, and call get_mem_attrs. + (init_emit_once): const_int_htab now deletable htab. + Initialize mem_attrs_htab. + * explow.c (set_mem_attributes): Delete from here. + * function.c (put_var_into_stack): Clear MEM_ATTRS. + (gen_mem_addressof): Likewise; rework to use set_mem_attributes. + * ggc-common.c (ggc_mark_rtx_children, case MEM): New case. + * reload1.c (reload): Rework changing REG to MEM. + + 2001-09-30 H.J. Lu + + * acconfig.h (PREFIX_INCLUDE_DIR): New variable. + * config.in: Rebuild. + + 2001-09-30 Stephane Carrez + + * config/m68hc11/m68hc11.md ("cmpqi_1"): Fix constraints. + ("tsthi_1"): Avoid allocation in register y. + ("*movqi_68hc12"): Reorganize and fix constraints. + ("zero_extendqisi2"): Prefer d over x and y for operand 1. + ("addqi3"): Likewise. + ("addhi3"): Fix constraints. + ("*logicalhi3_zexthi"): Disparage soft registers. + + 2001-09-30 Stephane Carrez + + * config/m68hc11/m68hc11.c (m68hc11_gen_movhi): Fix move of sp + to tmp reg. + + 2001-09-30 Stephane Carrez + + * config/m68hc11/m68hc11.h(INCOMING_RETURN_ADDR_RTX): Remove so + that we use setjmp/longjmp exceptions. + + 2001-09-30 Neil Booth + + * cpphash.h (POOL_ALIGN, POOL_FRONT, POOL_LIMIT, POOL_BASE, + POOL_SIZE, POOL_ROOM, POOL_COMMIT, struct cpp_chunk, + struct cpp_pool, _cpp_init_pool, _cpp_free_pool, _cpp_pool_reserve, + _cpp_pool_alloc, _cpp_next_chunk): Remove. + (_cpp_extend_buff, BUFF_ROOM): Update. + (_cpp_append_extend_buff): New. + (struct cpp_reader): Remove macro_pool, add a_buff. + * cppinit.c (cpp_create_reader): Initialize a_buff, instead of + macro_pool. + (cpp_destroy): Free a_buff instead of macro_pool. + * cpplex.c (new_chunk, chunk_suitable, _cpp_next_chunk, + new_chunk, _cpp_init_pool, _cpp_free_pool, _cpp_pool_reserve, + _cpp_pool_alloc, ): Remove. + (parse_number, parse_string): Update use of _cpp_extend_buff. + (_cpp_extend_buff): Update. + (_cpp_append_extend_buff, cpp_aligned_alloc): New. + * cpplib.c (glue_header_name, parse_answer): + Update use of _cpp_extend_buff. + (cpp_register_pragma, cpp_register_pragma_space): Use + _cpp_aligned_alloc. + (do_assert, do_unassert): Check for EOL, update. + * cppmacro.c (stringify_arg, collect_args): Update to use + _cpp_extend_buff and _cpp_append_extend_buff. + (save_parameter, parse_params, alloc_expansion_token, + _cpp_create_definition): Rework memory management. + + 2001-09-29 Andris Pavenis + + * config/i386/xm-djgpp.h (GCC_DRIVER_HOST_INITIALIZATION): Don't + update md_exec_prefix. + (UPDATE_PATH_HOST_CANONICALIZE): Don't free PATH as it can point + to string constant. + + 2001-09-30 Ulrich Weigand + + * config/s390/s390.h (EXTRA_CC_MODES): Add CCLmode. + (SELECT_CC_MODE): Use s390_select_ccmode. + * config/s390/s390-protos.h (s390_select_ccmode): Add. + * config/s390/s390.c (s390_select_ccmode): New. + (s390_match_ccmode): Add CCLmode. + (s390_branch_condition_mask, s390_branch_condition_mnemonic): New. + (output_branch_condition, output_inverse_branch_condition): Removed. + (print_operand): Use s390_branch_condition_mnemonic. + * config/s390/s390.md (addsi3_cc, addsi3_cconly, addsi3_cconly2, + subsi3_cc, subsi3_cconly): Use logical instructions and CCLmode. + (bunordered, bordered, buneq, bungt, bunlt, bnuge, bunle, bltgt): New. + + * config/s390/s390.c (check_and_change_labels): Preserve CC mode + when converting conditional branches to far branches. + * config/s390/s390.md (cmpstr_const, cmpstr_64, cmpstr_31, cmpint_si, + cmpint_di): Use CCSmode instead of CCUmode. + + * config/s390/s390.c (legitimate_la_operand_p): New. + * config/s390/s390-protos.h (legitimate_la_operand_p): Add. + * config/s390/s390.md (movsi): Convert load address patterns to + arithmetic operations when necessary. + (addaddr_picR, addaddr_picL, addaddr_picN): Removed. + (do_la): Renamed to *do_la and use legitimate_la_operand_p. + (*do_la_reg_0): Don't use before reload. + + * config/s390/s390.c (legitimize_address): Make more efficient + use of two-register addressing mode. + + * config/s390/s390.c (s390_function_prologue): Fix incorrect prolog + with -mno-backchain in some corner cases. + + * config/s390/s390.md (cmpsi_cct): Operands 0 and 1 do not commute. + + 2001-09-29 Alexandre Oliva + + * reload.c (find_reloads): Mark new USE insns with QImode. + (find_reloads_toplev, find_reloads_address, subst_reg_equivs, + find_reloads_subreg_address): Likewise. + * regrename.c (note_sets, clear_dead_regs): Abort if pseudos are + encountered. + * reload1.c (reload_combine_note_use): Likewise, inside USEs and + CLOBBERs. + (reload): Make sure there are no USEs with mode other than + VOIDmode. At the end, remove those marked with QImode. + + 2001-09-29 Per Bothner + + * cppdefault.c (cpp_include_defaults): Also search PREFIX_INCLUDE_DIR. + * Makefile.in (includedir): Rename to local_includedir. + (includedir): Define as $(prefix)/include. + * config.in (PREFIX_INCLUDE_DIR): New variable. + * configure.in (PREFIX_INCLUDE_DIR): Test for new variable. + + 2001-09-29 Bernd Schmidt + + * config/i386/i386.c (init_mmx_sse_builtins): Fix type of storelps and + storehps builtins. + * doc/extend.texi (Vector Extensions): New node. + * doc/invoke.texi (Machine Dependent Options): Add documentation for + i386 -mmmx, -msse, -m3dnow. + + Sat Sep 29 15:08:16 CEST 2001 Jan Hubicka + + * doc/invoke.texi (Optimize Options): Revert an accidental checkin. + + 2001-09-29 Hans-Peter Nilsson + + * cse.c (cse_insn) [HAVE_cc0]: Fix typo delete-insn -> delete_insn. + + * doc/invoke.texi (Optimize Options): Delete spurious @table. + + 2001-09-28 Richard Henderson + + * varasm.c (assemble_integer): Bound alignment check by + BIGGEST_ALIGNMENT. + + * cfgrtl.c (redirect_edge_and_branch): Abort if redirect_jump fails. + + 2001-09-28 Rainer Orth + + * config/i386/sol2.h (CPLUSPLUS_CPP_SPEC): Define. + + 2001-09-25 Bernd Schmidt + + Mostly from Graham Stott + * c-common.c (type_for_mode): Add support for V2SFmode. + * tree.c (build_common_tree_nodes_2): Likewise. + * tree.h (enum tree_index, global_trees): Likewise. + * config/i386/i386.c (x86_3dnow_a): New variable. + (override_options): Support 3Dnow extensions. + (bdesc_2arg, bdesc_1arg): Some SSE instructions are also part of + Athlon's version of 3Dnow. + (ix86_init_mmx_sse_builtins): Create 3Dnow builtins. + (ix86_expand_builtin): Handle them. + (ix86_hard_regno_mode_ok): Support V2SFmode if using 3Dnow. + * config/i386/i386.h (MASK_3DNOW, MASK_3DNOW_A, TARGET_3DNOW, + TARGET_3DNOW_A): New macros. + (TARGET_SWITCHES): Add 3Dnow switches. + (VALID_MMX_REG_MODE_3DNOW): New macro. + (VECTOR_MODE_SUPPORTED_P): Use it. + (enum ix86_builtins): Add entries for 3Dnow builtins. + * config/i386/i386.md (movv2sf_internal, movv2sf, pushv2sf, pf2id, + pf2iw, addv2sf3, subv2sf3, subrv2sf3, gtv2sf3, gev2sf3, eqv2sf3, + pfmaxv23sf3, pfminv2sf3, mulv2sf3, femms, prefetch_3dnow, prefetchw, + pfacc, pfnacc, pfpnacc, pi2fw, floatv2si2, pavgusb, pfrcpv2sf2, + pfrcpit1v2sf3, pfrcpit2v2sf3, pfrsqrtv2sf2, pfrsqit1v2sf3, + pmulhrwvhi3, pswapdv2si2, pswapdv2sf2): New patterns. + (mmx_pmovmskb, mmx_maskmovq, sse_movntdi, umulv4hi3_highpart, + mmx_uavgv8qi3, mmx_uavgv4hi3, mmx_psadbw, mmx_pinsrw, mmx_pextrw, + mmx_pshufw, umaxv8qi3, smaxv4hi3, uminv8qi3, sminv4hi3, sfence, + sfence_insn, prefetch): Make these available if TARGET_SSE or + TARGET_3DNOW_A. + + Fri Sep 28 19:18:40 CEST 2001 Jan Hubicka + + * i386-protos.h (ix86_setup_incoming_varargs, ix86_va_arg, + ix86_va_start, ix86_build_va_list): Declare. + * i386.c (ix86_setup_incoming_varargs, ix86_va_arg, + ix86_va_start, ix86_build_va_list): New global functions. + * i386.md (sse_prologue_save_insn): New insn. + (sse_prologue_save): New expander. + * i386.h (EXPAND_BUILTIN_VA_ARG, EXPAND_BUILTIN_VA_START, + BUILD_VA_LIST_TYPE, SETUP_INCOMING_VARARGS): New macros. + + 2001-09-28 Neil Booth + + * cpplex.c (new_buff, _cpp_get_buff, _cpp_extend_buff): + Use size_t everywhere, make definitions consistent with + prototypes. + + Fri Sep 28 14:59:34 CEST 2001 Jan Hubicka + + * gcse.c (replace_store_insn): Use delete_insn. + * loop.c (move_movables): Likewise; avoid delete_insn + from clobbering notes moved elsewhere. + (check_dbra_loop): Use delete_insn. + * ssa.c (convert_from_ssa): Likewise. + * cse.c (cse_insn): Use delete_insn. + + 2001-09-28 Neil Booth + + * cpphash.h (struct cpp_buff): Make unsigned. + (_cpp_get_buff): Take length of size_t. + (_cpp_unaligned_alloc): New. + (BUFF_ROOM, BUFF_FRONT, BUFF_LIMIT): New. + (struct cpp_reader): Remove ident_pool. Add u_buff. + * cppinit.c (cpp_create_reader): Initialize u_buff, not ident_pool. + (cpp_destroy): Destroy u_buff, not ident_pool. + * cpplex.c (parse_number, parse_string, save_comment, + cpp_token_as_text): Update to use the unaligned buffer. + (new_buff): Make unsigned. + (_cpp_unaligned_alloc): New. + * cpplib.c (glue_header_name): Update to use the unaligned buffer. + * cppmacro.c (new_number_token, builtin_macro, stringify_arg): + Similarly. + (collect_args): Make unsigned. + + 2001-09-27 Zack Weinberg + + * cpplex.c (cpp_output_token): Use a putc loop for + SPELL_OPERATOR, and fwrite for SPELL_IDENT. + + * configure.in: Detect fwrite_unlocked and fprintf_unlocked. + * configure, config.in: Regenerate. + * system.h: Replace fwrite and fprintf with their unlocked + variants if available. + + 2001-09-27 Richard Henderson + + * dwarf2out.c (dwarf2out_frame_finish): Never elide .debug_frame + in favour of .eh_frame. + + 2001-09-27 Aldy Hernandez + + * config/rs6000/rs6000.h (FUNCTION_VALUE): Change hardcoded 33 and 3 + to macros. + (LIBCALL_VALUE): Likewise. + + 2001-09-27 Neil Booth + + * cpphash.h: Update comment. + * cpplex.c: Update comments. + (_cpp_can_paste): Remove. + * cpplib.h (_cpp_can_paste): Remove. + * cppmacro.c (paste_tokens, paste_all_tokens): Update to use the + lexer rather than _cpp_can_paste. + + 2001-09-27 Neil Booth + + * doc/cppinternals.texi: Update. + + 2001-09-26 Neil Booth + + * cpphash.h (struct cpp_pool): Remove locks and locked. + (struct cpp_context): Add member buff. + (struct cpp_reader): Remove member argument_pool. + (_cpp_lock_pool, _cpp_unlock_pool): Remove. + * cppinit.c (cpp_create_reader, cpp_destroy): Argument_pool is dead. + * cpplex.c (chunk_suitable): Remove pool argument. + (MIN_BUFF_SIZE, BUFF_SIZE_UPPER_BOUND, EXTENDED_BUFF_SIZE): New. + (new_buff, _cpp_extend_buff): Update. + (_cpp_get_buff): Fix silly pointer bug. Be more selective about + which buffer is returned. + (_cpp_next_chunk, _cpp_init_pool): Pool locking removed. + (_cpp_lock_pool, _cpp_unlock_pool): Remove. + * cppmacro.c (lock_pools, unlock_pools): Remove. + (push_ptoken_context): Take a _cpp_buff. + (enter_macro_context): Pool locking removed. + (replace_args): Use a _cpp_buff for the replacement list with + arguments replaced. + (push_token_context): Clear buff. + (expand_arg): Use _cpp_pop_context. + (_cpp_pop_context): Free a context's buffer, if any. + + 2001-09-26 DJ Delorie + + * c-typeck.c (digest_init): Check for sizeless arrays. + + 2001-09-26 Richard Henderson + + * optabs.c (init_one_libfunc): Create a dummy function type + instead of using error_mark_node. + + 2001-09-26 Neil Booth + + * cpphash.h (struct _cpp_buff, _cpp_get_buff, _cpp_release_buff, + _cpp_extend_buff, _cpp_free_buff): New. + (struct cpp_reader): New member free_buffs. + * cppinit.c (cpp_destroy): Free buffers. + * cpplex.c (new_buff, _cpp_release_buff, _cpp_get_buff, + _cpp_extend_buff, _cpp_free_buff): New. + * cpplib.h (struct cpp_options): Remove unused member. + * cppmacro.c (collect_args): New. Combines the old parse_arg + and parse_args. Use _cpp_buff for memory allocation. + (funlike_invocation_p, replace_args): Update. + + Wed Sep 26 13:20:51 CEST 2001 Jan Hubicka + + * final.c (final_scan_insn): Use delete_insn instead of delete_note. + + 2001-09-25 Andrew Haley + + * except.c (sjlj_mark_call_sites): Change address inside sequence. + + 2001-09-24 Andrew Haley + + * config/sh/linux.h (LINK_SPEC): Set dynamic-linker to agree with + glibc. + + 2001-09-25 Janis Johnson + Jim Wilson + + * doc/install.texi (Specific, ia64-*-linux): Document. + + Tue Sep 25 17:13:56 CEST 2001 Jan Hubicka + + * Makefile.in (cfgrtl.o): Add. + * basic-block.h (alloc_block, alloc_aux_for_block, alloc_aux_for_blocks, + free_aux_for_block, alloc_aux_for_edge, alloc_aux_for_edges, + free_aux_for_edge): Declare. + * cfg.c + (HAVE_return): Undefine. + * basic-block.h (alloc_block, alloc_aux_for_block, alloc_aux_for_blocks, + free_aux_for_block, alloc_aux_for_edge, alloc_aux_for_edges, + free_aux_for_edge): New global functions. + (first_delete_block): New static variable. + (init_flow): Clear first_delete_block. + (basic_block_for_insn, label_value_list, tail_recursion_label_list, + can_delete_note_p, can_delete_label_p, commit_one_edge_insertion, + try_redirect_by_replacing_jump, last_loop_beg_note, + back_edge_of_syntactic_loop_p, force_nonfallthru_and_redirect, + delete_insn, delete_insn_chain, create_basic_block_structure, + create_basic_block, flow_delete_block, compute_bb_for_insn, + free_bb_for_insn, update_bb_for_insn, set_block_for_insn, + set_block_for_new_insns, split_block, merge_blocks_nomove, + block_label, try_redirect_by_replacing_jump, last_loop_beg_note, + redirect_edge_and_branch, force_nonfallthru_and_redirect, + force_nonfallthru, redirect_edge_and_branch_force, tidy_fallthru_edge, + tidy_fallthru_edges, split_edge, insert_insn_on_edge, + commit_one_edge_insertion, commit_edge_insertions, dump_bb, debug_bb, + debug_bb_n, print_rtl_with_bb, verify_flow_info, purge_dead_edges, + purge_all_dead_edges): Move to .... + * cfgrtl.c: New file; .... Here. + + * bb-reorder.c (fixup_reorder_chain): Use alloc_aux_for_block. + (reroder_basic_block): Use alloc_aux_for_blocks. + * predict.c (estimate_bb_frequencies): Likewise; use + alloc_aux_for_edges. + * profile.c (compute_branch_probabilities): Likewise. + (branch_prob): Likewise. + * reg-stack.c (reg_to_stack): Likewise. + + * emit-rtl.c (emit_insns_after): Never return NULL. + + * basic-block.h (set_block_for_new_insns): Delete. + * cfgrtl.c (set_block_for_new_insns): Delete. + + * cfgcleanup.c (try_optimize_cfg): Add fake exit edges for noreturn + calls when crossjumping. + + * cfgcleanup.c (try_simplify_condjump): Cleanup invert_jump call. + * unroll.c (copy_loop_body): Use delete_insn. + + * final.c (final, final_scan_insn): Use delete_insn/delete_note. + * function.c (fixup_var_refs_insn, fixup_var_refs_1, + keep_stack_depressed): Likewise. + * gcse.c (cprop_cc0_jump): Likewise. + * local-alloc.c (update_equiv_regs): Likewise. + * loop.c (scan_loop, loop_delete_insns): Likewise. + * regmove.c (try_auto_increment, fixup_match_1): Likewise. + * reload1.c (reload, calculate_needs_all_insns, reload_as_needed, + delete_output_reload, delete_address_reloads_1, + reload_cse_delete_noop_set, reload_combine, reload_cse_move2add): + Likewise. + * sibcall.c (replace_call_placeholder): Likewise. + * cse.c (cse_insn): Likewise. + + 2001-09-25 Bernd Schmidt + + From Graham Stott + (def_builtin): Only define builtins appropriate for target_flags. All + callers changed. + (builtin_decsription): Add new field mask which is used to determine + when to define the builtin via the macro def_builtin. + + (bdesc_comi): Initialise new mask fields. + (bdesc_2srg): Likewise. + (bdesc_1arg): Likewise. + + * config/i386/i386.c (ix86_init_builtins): Correct return type + building v4hi_ftype_v4hi_int_int tree node. + (ix86_expand_sse_comi): Fix typo swapping operands. + Don't swap comparision condition, it is already swapped. + (ix86_expand_sse_compare): Before swapping operands + move operand 1 into new rtx and not the target rtx. + Don't swap comparison condition, it is already swapped. + Always check whether we need to create a new TARGET. + + * config/i386/i386.md: (sse_comi) Fix typos. + (sse_ucomi): Likewise. + (cvtss2si): Fix operand 0 contraint. + (cvttss2si): Likewise. + (sse_unpckhps): Fix mode for operand 2. + (sse_unpcklps): Likewise. + + 2001-09-25 Graham Stott + + * sibcall.c (skip_copy_to_return_value): Tighten return value + copy check. + + 2001-09-24 David Edelsohn + + * rs6000.c (lwa_operand): Address must be word aligned. + + Mon Sep 24 18:57:59 2001 Richard Kenner + + * tree.c (type_hash_marked_p): Consider as marked if debug symbol + number has been set. + (type_hash_mark): Mark type itself. + + 2001-09-24 Neil Booth + + * c-lex.c (cb_def_pragma): Update. + (c_lex): Update, and skip padding. + * cppexp.c (lex, parse_defined): Update, remove unused variable. + * cpphash.h (struct toklist): Delete. + (union utoken): New. + (struct cpp_context): Update. + (struct cpp_reader): New members eof, avoid_paste. + (_cpp_temp_token): New. + * cppinit.c (cpp_create_reader): Update. + * cpplex.c (_cpp_temp_token): New. + (_cpp_lex_direct): Add PREV_WHITE when parsing args. + (cpp_output_token): Don't print leading whitespace. + (cpp_output_line): Update. + * cpplib.c (glue_header_name, parse_include, get__Pragma_string, + do_include_common, do_line, do_ident, do_pragma, + do_pragma_dependency, _cpp_do__Pragma, parse_answer, + parse_assertion): Update. + (get_token_no_padding): New. + * cpplib.h (CPP_PADDING): New. + (AVOID_LPASTE): Delete. + (struct cpp_token): New union member source. + (cpp_get_token): Update. + * cppmacro.c (macro_arg): Convert to use pointers to const tokens. + (builtin_macro, paste_all_tokens, paste_tokens, funlike_invocation_p, + replace_args, quote_string, stringify_arg, parse_arg, next_context, + enter_macro_context, expand_arg, _cpp_pop_context, cpp_scan_nooutput, + _cpp_backup_tokens, _cpp_create_definition): Update. + (push_arg_context): Delete. + (padding_token, push_token_context, push_ptoken_context): New. + (make_string_token, make_number_token): Update, rename. + (cpp_get_token): Update to handle tokens as pointers to const, + and insert padding appropriately. + * cppmain.c (struct printer): New member prev. + (check_multiline_token): Constify. + (do_preprocessing, cb_line_change): Update. + (scan_translation_unit): Update to handle spacing. + * scan-decls.c (get_a_token): New. + (skip_to_closing_brace, scan_decls): Update. + * fix-header.c (read_scan_file): Update. + + * doc/cpp.texi: Update. + + 2001-09-24 Kaveh R. Ghazi + + * c-aux-info.c (affix_data_type): Use ATTRIBUTE_MALLOC. Avoid + leak by passing malloc'ed pointer to reconcat, not concat. + + 2001-09-24 DJ Delorie + + * varasm.c (array_size_for_constructor): Handle STRING_CSTs also. + + 2001-09-24 Ulrich Weigand : + + * flow.c (delete_dead_jumptables): Delete jumptable if the only + reference is from the literal pool. + + 2001-09-24 Janis Johnson + + * doc/install.texi (Final install): Request additional information + in mail about successful builds. + + 2001-09-24 John David Anglin + + * pa.c (return_addr_rtx): Return NULL_RTX if count is not zero. Use + initial value of return pointer register instead of value in frame-20. + Revise comments. + + 2001-09-24 John David Anglin + + * som.h (ASM_OUTPUT_EXTERNAL): Improve formatting. + (ASM_OUTPUT_EXTERNAL_LIBCALL): Only generate a .IMPORT statement for + the libcall if there isn't a referenced identifier for the symbol. + + 2001-09-24 John David Anglin + + * pa.h (TRAMPOLINE_TEMPLATE): Add two words to the template for + non 64-bit machines. Use these as a plabel for the trampoline. + (TRAMPOLINE_SIZE): Adjust size for new words. + (INITIALIZE_TRAMPOLINE): Initialize new words. + (TRAMPOLINE_ADJUST_ADDRESS): New. Adjust address to make it a + pointer to the plabel in the trampoline. + + 2001-09-24 John David Anglin + + * pa.c (function_arg): Pass floating arguments in both general and + floating registers in indirect (dynamic) calls when generating code + for the 32 bit ABI and the HP assembler. + + 2001-09-24 Rainer Orth + + * doc/install.texi: Markup fixes. + Use Solaris 2, SunOS 4 as appropriate. + (Specific, *-*-solaris2*): Explain this. + Unconditionally warn against /usr/ucb tools. + Remove Sun as warning, obsolete. + Move X11 header bug workaround here, update patches. + (Specific, sparc-sun-solaris2*): Detail Sun as fix status. + (Specific, sparc-sun-solaris2.7): Update patch 106950 status. + + 2001-09-23 Zack Weinberg + + * errors.h (warning, error, fatal, internal_error): Don't mark + with ATTRIBUTE_PRINTF_n. + * toplev.h (internal_error, fatal_io_error, warning, error, + pedwarn, pedwarn_with_file_and_line, warning_with_file_and_line, + error_with_file_and_line, sorry, error_for_asm, warning_for_asm): + Likewise. + + Sun Sep 23 18:19:48 2001 Richard Kenner + + * function.c (pop_function_context_from): var_refs_queue + and temp slots now in GC memory. + (mark_function_status, free_after_compilation): Likewise; + also struct function now in GC memory. + (assign_stack_temp_for_type): struct temp_slot now in GC memory. + (combine_temp_slots): Likewise. + (schedule_fixup_var_refs): var_refs_queue now in GC memory. + (prepare_function_start): Use GC memory for struct function. + (mark_temp_slot): Deleted. + (gcc_mark_struct_function): struct function now in GC memory. + + * fold-const.c (extract_muldiv, case PLUS_EXPR): Only adjust + code for division, not modulus. + + * rtl.def (MEM): Remove obsolete part of comment. + + 2001-09-22 Joseph S. Myers + + * c-format.c (init_function_format_info): Check __builtin_printf + and __builtin_fprintf even if -ffreestanding. Check C99 functions + in gnu89 mode. + + Sat Sep 22 09:09:32 2001 Richard Kenner + + * c-common.c (format_attribute_table): Remove decl. + * tree.h (format_attribute_table, lang_attribute_table): New decls. + (lang_attribute_common): Likewise. + + * function.c (fix_lexical_address): Use set_mem_alias_set. + (expand_function_start): Likewise. + * config/alpha/alpha.h (SETUP_INCOMING_VARARGS): Likewise. + + * varasm.c (output_constant): Fix unused variable warning. + + * attribs.c: New file, from c-common.c. + (attribute_tables): Now four elements. + (format_attribute_table, lang_attribute_common): New variables. + (init_attributes): Reflect above changes. + (handle_mode_attribute): Delete check for wider than uintmax. + * c-common.c: Delete parts moved to attribs.c. + (enum attrs): Deleted; unused. + (c_format_attribute_table): New variable. + (c_common_lang_init): Initialize format_attribute_table with it. + * c-common.h (decl_attributes): Remove decl. + * tree.h (decl_attribute): Move it to here. + * Makefile.in (C_AND_OBJS_OBJS): Add attribs.o. + (attribs.o): New rule. + + 2001-09-22 Andreas Jaeger + + * builtins.c (c_getstr): Remove unused variable. + + 2001-09-21 Richard Henderson + + * reload1.c (reload): Use delete_insn instead of splatting + NOTE_INSN_DELETED. + + 2001-09-21 Richard Henderson + + * reload.c (push_secondary_reload): Don't check for "=" in output + constraint after ""->ALL_REGS check. + + 2001-09-21 Richard Henderson + + * predict.c (expected_value_to_br_prob): Use pc_set. + + * optabs.c (init_one_libfunc): Gen a FUNCTION_DECL for use by + ENCODE_SECTION_INFO; get SYMBOL_REF from make_decl_rtl. + + 2001-09-21 Richard Henderson + + * rtl.h (LCT_RETURNS_TWICE): New. + * calls.c (emit_call_1): Set current_function_calls_setjmp for + ECF_RETURNS_TWICE. + (emit_library_call_value_1): Map LCT_RETURNS_TWICE + to ECF_RETURNS_TWICE. + * except.c (sjlj_emit_function_enter): Use LCT_RETURNS_TWICE for + call to setjmp. + + * unwind-sjlj.c: Invent the setjmp.h declarations if inhibit_libc. + + * config/stormy16/stormy16.h (DONT_USE_BUILTIN_SETJMP): New. + (JMP_BUF_SIZE): New. + + 2001-09-21 Richard Henderson + + * config/stormy16/stormy16.h (REG_CLASS_FROM_LETTER): Map 'd' + to R8_REGS. + + 2001-09-21 Richard Henderson + + * tree.def (FDESC_EXPR): New. + * expr.c (expand_expr): Handle it. + * varasm.c (initializer_constant_valid_p): Likewise. + (output_constant): Likewise. + * defaults.h (TARGET_VTABLE_USES_DESCRIPTORS): New. + * config/ia64/ia64.h (TARGET_VTABLE_USES_DESCRIPTORS): New. + (ASM_OUTPUT_FDESC): New. + * doc/tm.texi: Document the new macros. + + 21-09-2001 Richard Earnshaw (reanrsha@arm.com) + + * cfgcleanup.c (merge_blocks_move_successor_nojumps): Don't leave + ADDR_VEC or ADDR_DIFF_VEC jump insns as part of the basic block + once merging is complete. + + Fri Sep 21 11:20:12 2001 Richard Kenner + + * integrate.c (allocate_initial_values): Eliminate unused arg warning. + + 21-09-2001 Richard Earnshaw (reanrsha@arm.com) + + * cfgcleanup.c (flow_find_cross_jump): Delete any REG_EQUAL notes + that would be invalid after a merge. + + Fri Sep 21 14:24:29 CEST 2001 Jan Hubicka + + * basic-block.h (flow_delete_insn, flow_delete_insn_chain): Kill. + * cfg.c (delete_insn): Rename from ....; use remove_insn; do not + remove some labels. + (flow_delete_insn): This one. + (delete_insn_chain): Rename from ...; do not care labels. + (flow_delete_insn_chain): ... this one. + (flow_delete_block): Remove the insns one BB has been expunged. + (merge_blocks_nomove): Likewise. + (try_redirect_by_replacing_jump): Use delete_insn[_chain]; do not care + updating BB boundaries. + (tidy_fallthru_edge): Likewise. + (commit_one_edge_insertion): Likewise. + * cfgbuild.c (find_basic_block): Likewise. + (find_basic_blocks_1): Likewise. + * cfgcleanup.c (merge_blocks_move_predecessor_nojumps): Likewise. + (try_crossjump_to_edge): Likewise. + (try_optimize_cfg): Likewise. + * cse.c (delete_trivially_dead_insns): Likewise. + * df.c (df_insn_delete): Likewise. + * doloop.c (doloop_modify): Use delete_related_insns. + * emit-rtl.c (try_split): Likewise. + (remove_insn): Update BB boundaries. + * expect.c (connect_post_landing_pads): Use delete_related_insns. + * flow.c (delete_dead_jumptables): Use delete_insn[_chain]; do not care + updating BB boundaries. + (propagate_block_delete_insn): Likewise. + (propagate_block_delete_libcall): Likewise. + * function.c (delete_handlers): Use delete_related_insns. + (thread_prologue_and_epilogue_insns): Likewise. + * gcse.c (delete_null_pointer_checks): Use delete_related_insns. + * genpeep.c (gen_peephole): Use delete_related_insns. + * ifcvt.c (noce_process_if_block): Use delete_insn; do not care updating + BB boundaries. + (find_cond_trap): Likewise. + * integrate.c (save_for_inline): Use delete_related_insns. + (copy_insn_list): Likewise. + * jump.c (pruge_linie_number_notes): Likewise. + (duplicate_loop_exit_test): Likewise. + (delete_computation): Likewise. + (delete_related_insn): Rename from ...; use delete_insn + (delete_insn): ... this one. + (redirect_jump): Use delete_related_insns. + * loop.c (scan_loop): Likewise. + (move_movables): Likewise. + (find_and_verify_loops): Likewise. + (check_dbra_loop): Likewise. + * recog.c (peephole2_optimize): Likewise. + * reg-stack.c (delete_insn_for_stacker): Remove. + (move_for_stack_reg): Use delete_insn. + * regmove.c (combine_stack_adjustments_for_block): Likewise. + * reload1.c (delete_address_reloads): Use delete_related_insns. + (fixup_abnormal_edges): Use delete_insn. + * recog.c (emit_delay_sequence): Use delete_related_insns. + (delete_from-delay_slot): Likewise. + (delete_scheduled_jump): likewise. + (optimize_skip): Likewise. + (try_merge_delay_insns): Likewise. + (full_simple_delay_slots): Likewise. + (fill_slots_from_thread): Likewise. + (relax_delay_slots): Likewise. + (make_return_insns): Likewise. + (dbr_schedule): Likewise. + * rtl.h (delete_insn): Rename to delete_related_insns. + (delete_insn, delete_insn_chain): New prototypes. + * ssa-ccp (sse_fast_dce): Remove deleting of DEF, as it is done + by df_insn_delete already. + * ssa-dce.c (delete_insn_bb): Use delete_insn. + * ssa.c (convert_from_ssa): Use delete_related_insns. + * unroll.c (unroll_loop): Likewise. + (calculate_giv_inc): Likewise. + (copy_loop_body): Likewise. + + * i386-protos.h (ix86_libcall_value, ix86_function_value, + ix86_function_arg_regno_p, ix86_function_arg_boundary, + ix86_return_in_memory, ix86_function_value): Declare. + * i386.c (x86_64_int_parameter_registers, x86_64_int_return_registers): + new static valurables. + (x86_64_reg_class): New enum + (x86_64_reg_class_name): New array. + (classify_argument, examine_argument, construct_container, + merge_classes): New static functions. + (optimization_options): Enable flag_omit_frame_pointer and disable + flag_pcc_struct_return on 64bit. + (ix86_libcall_value, ix86_function_value, + ix86_function_arg_regno_p, ix86_function_arg_boundary, + ix86_return_in_memory, ix86_function_value): New global functions. + (init_cumulative_args): Refuse regparm on x86_64, set maybe_vaarg. + (function_arg_advance): Handle x86_64 passing conventions. + (function_arg): Likewise. + * i386.h (FUNCTION_ARG_BOUNDARY): New macro. + (RETURN_IN_MEMORY): Move offline. + (FUNCTION_VALUE, LIBCALL_VALUE): Likewise. + (FUNCTION_VALUE_REGNO_P): New macro. + (FUNCTION_ARG_REGNO_P): Move offline. + (struct ix86_args): Add maybe_vaarg. + * next.h (FUNCTION_VALUE_REGNO_P): Delete. + * unix.h (FUNCTION_VALUE_REGNO_P): Delete. + + 2001-09-21 Hartmut Penner + + * s390.md: Changed attributes for scheduling. + * s390.c: (s390_adjust_cost, s390_adjust_priority) + Changed scheduling + + 2001-09-21 Joseph S. Myers + + Table-driven attributes. + * c-decl.c, config/alpha/alpha.c, config/arc/arc.c, + config/arm/arm.c, config/arm/pe.c, config/avr/avr.c, + config/avr/avr.h, config/d30v/d30v.h, config/fr30/fr30.h, + config/h8300/h8300.c, config/i386/cygwin.h, config/i386/winnt.c, + config/m32r/m32r.c, config/mcore/mcore.c, config/sh/sh.c, + config/stormy16/stormy16.h, config/v850/v850.c, doc/c-tree.texi, + doc/tm.texi, ggc-common.c, integrate.c, print-tree.c, tree.c, + tree.h: Rename DECL_MACHINE_ATTRIBUTES to DECL_ATTRIBUTES. + * tree.h (struct tree_decl): Change machine_attributes to + attributes. + * doc/c-tree.texi: Document that all attributes are now attached + to decls and types. + * c-common.c (add_attribute, attrtab, attrtab_idx, + default_valid_lang_attribute, valid_lang_attribute): Remove. + (attribute_tables, attributes_initialized, + c_common_attribute_table, default_lang_attribute_table): New + variables. + (handle_packed_attribute, handle_nocommon_attribute, + handle_common_attribute, handle_noreturn_attribute, + handle_unused_attribute, handle_const_attribute, + handle_transparent_union_attribute, handle_constructor_attribute, + handle_destructor_attribute, handle_mode_attribute, + handle_section_attribute, handle_aligned_attribute, + handle_weak_attribute, handle_alias_attribute, + handle_no_instrument_function_attribute, + handle_no_check_memory_usage_attribute, handle_malloc_attribute, + handle_no_limit_stack_attribute, handle_pure_attribute): New + functions. + (init_attributes, decl_attributes): Rewrite to implement + table-driven attributes. + * c-common.h (enum attribute_flags): Move to tree.h. + * c-format.c (decl_handle_format_attribute, + decl_handle_format_arg_attribute): Rename to + handle_format_attribute and handle_format_arg_attribute. Update + for table-driven attributes. + * c-common.h (decl_handle_format_attribute, + decl_handle_format_arg_attribute): Remove prototypes. + (handle_format_attribute, handle_format_arg_attribute): Add + prototypes. + * c-decl.c (grokdeclarator): Handle attributes nested inside + declarators. + * c-parse.in (setattrs, maybe_setattrs): Remove. + (maybe_type_quals_setattrs): Rename to maybe_type_quals_attrs. + Update to handle nested attributes properly. + (maybe_resetattrs, after_type_declarator, + parm_declarator_nostarttypename, notype_declarator, absdcl1_noea, + absdcl1_ea, direct_absdcl1): Update to handle nested attributes + properly. + (make_pointer_declarator): Update to handle nested attributes + properly. + * doc/extend.texi: Update documentation of limits of attributes + syntax. Warn about problems with attribute semantics in C++. + * target.h (struct target): Remove valid_decl_attribute and + valid_type_attribute. Add attribute_table and + function_attribute_inlinable_p. + * target-def.h (TARGET_VALID_DECL_ATTRIBUTE, + TARGET_VALID_TYPE_ATTRIBUTE): Remove. + (TARGET_ATTRIBUTE_TABLE, TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P): + Add. + (TARGET_INITIALIZER): Update. + * integrate.c (FUNCTION_ATTRIBUTE_INLINABLE_P): Remove default + definition. + (function_attribute_inlinable_p): New function. Check for the + presence of any machine attributes before using + targetm.function_attribute_inlinable_p. + (function_cannot_inline_p): Update. + * Makefile.in (integrate.o): Update dependencies. + * doc/tm.texi: Update documentation of target attributes and + example definition of TARGET_VALID_TYPE_ATTRIBUTE. + * tree.c (default_valid_attribute_p, valid_machine_attribute): + Remove. + (default_target_attribute_table, + default_function_attribute_inlinable_p): New. + (lookup_attribute): Update comment to clarify handling of multiple + attributes with the same name. + (merge_attributes, attribute_list_contained): Allow multiple + attributes with the same name but different arguments to appear in + the same attribute list. + * tree.h (default_valid_attribute_p): Remove prototype. + (struct attribute_spec): New. + (default_target_attribute_table): Declare. + (enum attribute_flags): Move from c-common.h. Add + ATTR_FLAG_TYPE_IN_PLACE. + (default_function_attribute_inlinable_p): Declare. + * config/alpha/alpha.c (vms_valid_decl_attribute_p): Remove. + (TARGET_VALID_DECL_ATTRIBUTE): Don't define. + (TARGET_ATTRIBUTE_TABLE): Define. + (vms_attribute_table): New. + * config/arc/arc.c (arc_valid_decl_attribute): Remove. + (TARGET_VALID_DECL_ATTRIBUTE): Don't define. + (TARGET_ATTRIBUTE_TABLE): Define. + (arc_attribute_table, arc_handle_interrupt_attribute): New. + * config/arm/arm.c (arm_valid_type_attribute_p, + arm_valid_decl_attribute_p, arm_pe_valid_decl_attribute_p): + Remove. + (TARGET_VALID_TYPE_ATTRIBUTE, TARGET_VALID_DECL_ATTRIBUTE): Don't + define. + (TARGET_ATTRIBUTE_TABLE): Define. + (arm_attribute_table, arm_handle_fndecl_attribute, + arm_handle_isr_attribute): New. + * config/avr/avr.c (avr_valid_type_attribute, + avr_valid_decl_attribute): Remove. + (TARGET_VALID_DECL_ATTRIBUTE, TARGET_VALID_TYPE_ATTRIBUTE): Don't + define. + (TARGET_ATTRIBUTE_TABLE): Define. + (avr_attribute_table, avr_handle_progmem_attribute, + avr_handle_fndecl_attribute): New. + * config/c4x/c4x.c (c4x_valid_type_attribute_p): Remove. + (TARGET_VALID_TYPE_ATTRIBUTE): Don't define. + (TARGET_ATTRIBUTE_TABLE): Define. + (c4x_attribute_table, c4x_handle_fntype_attribute): New. + * config/h8300/h8300.c (h8300_valid_decl_attribute): Remove. + (TARGET_VALID_DECL_ATTRIBUTE): Don't define. + (TARGET_ATTRIBUTE_TABLE): Define. + (h8300_attribute_table, h8300_handle_fndecl_attribute, + h8300_handle_eightbit_data_attribute, + h8300_handle_tiny_data_attribute): New. + * config/i386/i386-protos.h (ix86_valid_type_attribute_p, + i386_pe_valid_decl_attribute_p, i386_pe_valid_type_attribute_p): + Remove prototypes. + (ix86_handle_dll_attribute, ix86_handle_shared_attribute): New + declarations. + * config/i386/i386.c (ix86_valid_type_attribute_p: Remove. + (TARGET_VALID_TYPE_ATTRIBUTE, TARGET_VALID_DECL_ATTRIBUTE): Don't + define. + (TARGET_ATTRIBUTE_TABLE): Define. + (ix86_attribute_table, ix86_handle_cdecl_attribute, + ix86_handle_regparm_attribute): New. + * config/i386/winnt.c (i386_pe_valid_decl_attribute_p, + i386_pe_valid_type_attribute_p): Remove. + (ix86_handle_dll_attribute, ix86_handle_shared_attribute): New. + * config/ia64/ia64.c (ia64_valid_type_attribute): Remove. + (TARGET_VALID_TYPE_ATTRIBUTE): Don't define. + (TARGET_ATTRIBUTE_TABLE): Define. + (ia64_attribute_table): New. + * config/m32r/m32r.c (m32r_valid_decl_attribute, interrupt_ident1, + interrupt_ident2, model_ident1, model_ident2): Remove. + (TARGET_VALID_DECL_ATTRIBUTE): Don't define. + (TARGET_ATTRIBUTE_TABLE): Define. + (init_idents): Update. + (m32r_attribute_table, m32r_handle_model_attribute): New. + * config/m68hc11/m68hc11.c (m68hc11_valid_type_attribute_p): + Remove. + (TARGET_VALID_TYPE_ATTRIBUTE): Don't define. + (TARGET_ATTRIBUTE_TABLE): Define. + (m68hc11_attribute_table, m68hc11_handle_fntype_attribute): New. + * config/mcore/mcore.c (mcore_valid_decl_attribute): Remove. + (TARGET_VALID_DECL_ATTRIBUTE): Don't define. + (TARGET_ATTRIBUTE_TABLE): Define. + (mcore_attribute_table, mcore_handle_naked_attribute): New. + * config/ns32k/ns32k.c (ns32k_valid_type_attribute_p): Remove. + (TARGET_VALID_TYPE_ATTRIBUTE): Don't define. + (TARGET_ATTRIBUTE_TABLE): Define. + (ns32k_attribute_table, ns32k_handle_fntype_attribute): New. + * config/rs6000/rs6000.c (rs6000_valid_type_attribute_p): Remove. + (TARGET_VALID_TYPE_ATTRIBUTE): Don't define. + (TARGET_ATTRIBUTE_TABLE): Define. + (rs6000_attribute_table, rs6000_handle_longcall_attribute): New. + * config/sh/sh.c (sh_valid_decl_attribute): Remove. + (TARGET_VALID_DECL_ATTRIBUTE): Don't define. + (TARGET_ATTRIBUTE_TABLE): Define. + (sh_attribute_table, sh_handle_interrupt_handler_attribute, + sh_handle_sp_switch_attribute, sh_handle_trap_exit_attribute): + New. + * config/stormy16/stormy16.c (stormy16_valid_type_attribute): + Remove. + (TARGET_VALID_TYPE_ATTRIBUTE): Don't define + (TARGET_ATTRIBUTE_TABLE): Define. + (stormy16_attribute_table, stormy16_handle_interrupt_attribute): + New. + * config/v850/v850.c (v850_valid_decl_attribute): Remove. + (TARGET_VALID_DECL_ATTRIBUTE): Don't define. + (TARGET_ATTRIBUTE_TABLE): Define. + (v850_attribute_table, v850_handle_interrupt_attribute, + v850_handle_data_area_attribute): New. + * config/v850/v850-c.c (mark_current_function_as_interrupt): + Return void. Call decl_attributes instead of + valid_machine_attribute. + + Fri Sep 21 01:49:41 2001 J"orn Rennecke + + * sh-protos.h (sh_pr_n_sets): Declare. + * sh.c (calc_live_regs): If the initial value for PR has been copied, + look at the copy to determine if PR needs to be saved. + sh_pr_n_sets: New function. + * sh.h (RETURN_ADDR_RTX): Use get_hard_reg_initial_val. + (ALLOCATE_INITIAL_VALUE): Define. + + * sh.c (initial_elimination_offset): + Fix RETURN_ADDRESS_POINTER_REGNUM case. + + Fri Sep 21 01:13:56 2001 J"orn Rennecke + + * integrate.c (allocate_initial_values): New function. + * integrate.h (allocate_initial_values): Declare. + * local-alloc.c (local_alloc): Move call to allocate_reg_info from + here... + * reload1.c (reload): And initialization of reg_equiv_memory_loc + from here... + * toplev.c (rest_of_compilation): To here. + Call allocate_initial_values. + * tm.texi: add description for ALLOCATE_INITIAL_VALUE. + + Thu Sep 20 09:00:27 2001 Richard Kenner + + * ggc-page.c (ggc_marked_p): Properly convert return to boolean. + + 2001-09-20 DJ Delorie + + * c-typeck.c (really_start_incremental_init): Discriminate + between zero-length arrays and flexible arrays. + (push_init_level): Detect zero-length arrays and handle them + like fixed-sized arrays. + * expr.c (store_constructor): Handle zero-length arrays and + flexible arrays correctly. + * doc/extend.texi: Update zero-length array notes. + + 2001-09-20 Jim Wilson + + * config/ia64/ia64.c (itanium_split_issue): Allow max 2 FP per cycle. + (insn_matches_slot): Handle TYPE_L and TYPE_X slots when checking + for issue port conflicts. + (cycle_end_fill_slots): TYPE_L instructions take two slots. + + 2001-09-20 Andrew MacLeod + + * testsuite/gcc.c-torture/execute/990208-1.x: New. XFAIL at -O3 + on ia64. + + Thu Sep 20 09:00:27 2001 Richard Kenner + + * fold-const.c (hashtab.h): Include. + (int_const_binop): Remove FORSIZE arg and compute from type; all + callers changed. + Call size_int_type_wide for all single-word constants. + (size_htab_hash, size_htab_eq): New functions. + (size_int_type_wide): Rework to use hash table. + * ggc-common.c (hashtab.h): Include. + (struct d_htab_root): New struct. + (d_htab_roots): New variable. + (ggc_add_deletable_htab, ggc_htab_delete): New functions + (ggc_mark_roots): Handle deletable htabs. + * ggc-page.c (ggc_marked_p): New function. + * ggc-simple.c (ggc_marked_p): Likewise. + * ggc.h: Reformatting throughout. + (ggc_marked_p, ggc_add_deletable_htab): New declarations. + * tree.c (init_obstacks): Make type_hash_table a deletable root. + (type_hash_add): Allocate struct type_hash from GC memory. + (mark_hash_entry, mark_type_hash): Deleted. + (type_hash_marked_p, type_hash_mark): New functions. + * Makefile.in (ggc-common.o, fold-const.o): Include hashtab.h. + + Thu Sep 20 12:49:34 2001 J"orn Rennecke + + * sh.c (shiftcosts): Don't use shiftcosts array for modes wider + than SImode. + + Thu Sep 20 09:00:27 2001 Richard Kenner + + * stor-layout.c (layout_type, case ARRAY_TYPE): Kludge to disable + array-too-large test for signed sizetype. + + Thu Sep 20 12:19:36 CEST 2001 Jan Hubicka + + * i386.md (indirect_jump): Allow Pmode operand. + (tablejump): LIkewise; perform expansion to 64bit mode. + * i386.c (symbolic_operand): Allow 64bit PIC references. + (pic_symbolic_operand): Likewise. + (ix86_find_base_term): Strip the 64bit PIC references. + (legitimate_pic_address_disp_p): Handle 64bit PIC. + (legitimize_pic_address): Likewise. + (i386_simplify_dwarf_addr): Strip down the 64bit PIC references. + * i386.h (CASE_VECTOR_MODE): Set to SImode for 64bit PIC compilation. + + 2001-09-19 Alexandre Petit-Bianco + + * stringpool.c (get_identifier_with_length): New function. + * tree.h (get_identifier_with_length): New prototype. + + 2001-09-19 Alan Modra + David Edelsohn + + Revert: + * config/rs6000/rs6000.c (logical_operand): CONST_INTs are + already sign-extended. + + * config/rs6000/aix.h (INIT_TARGET_OPTABS): Define TFmode handlers. + * config/rs6000/rs6000.c (logical_operand): Always compare op as + HOST_WIDE_INT. + (rs6000_emit_set_long_const): Avoid unnecessary shift. + (output_profile_hook): Declare label_name const. + * config/rs6000/rs6000.md (boolcsi3, boolcdi3): Change predicates + to match constraints. + + 2001-09-19 Stan Shebs + + * alias.c: Fix typos in comments. + * sched-rgn.c (init_ready_list): Ditto. + * unwind-dw2.c (uw_frame_state_for): Ditto. + * unwind-dw2-fde.c (_Unwind_Find_FDE): Ditto. + * unwind.inc (_Unwind_RaiseException_Phase2): Ditto. + * config/rs6000/rs6000.c (rs6000_adjust_priority): Ditto. + + 2001-09-19 Richard Henderson + + * cfg.c (force_nonfallthru_and_redirect): Handle redirecting + to the exit block. + * Makefile.in (cfg.o): Depend on TM_P_H. + + 2001-09-19 Richard Henderson + + * config/alpha/alpha.c (local_symbol_p): Split out from ... + (local_symbolic_operand): ... here. + (small_symbolic_operand): Check mode. + (global_symbolic_operand): New. + (input_operand): Reject symbolics if explicit relocs. + (call_operand): Tidy. + (alpha_legitimize_address): Use movdi_er_high_g. + (alpha_expand_mov): Likewise. + * config/alpha/alpha-protos.h: Update. + * config/alpha/alpha.h (PREDICATE_CODES): Update. + * config/alpha/alpha.md (UNSPEC_LITERAL, UNSPEC_LITUSE): New. + (UNSPEC_LDGP2, UNSPECV_PLDGP2): New. + (UNSPECV_LDGP2): Remove. + (all call patterns): Use 's' not 'i' for symbolic constraint. + (call_osf call_value_osf): Use call_operand. + (all osf call patterns): Use $gp. New peepholes for explicit relocs. + (movdi_er_nofix, movdi_er_fix): Remove symbolic alternative. + (prologue_ldgp_1_er): Remove. + (ldgp_er_1, ldgp_er_2, prologue_ldgp_er_2): New. + (builtin_setjmp_receiver_er patterns): Use them. + (exception_receiver_er): Likewise. + + 2001-09-19 Richard Henderson + + * cfgbuild.c (find_sub_basic_blocks): Handle insns that can throw. + + * emit-rtl.c (try_split): Copy NORETURN, SETJMP, ALWAYS_RETURN + and NON_LOCAL_GOTO notes. + * recog.c (peephole2_optimize): Likewise. Handle EH_REGION; + copy over CALL_INSN_FUNCTION_USAGE. + + 2001-09-18 Catherine Moore + + * config/stormy16/stormy16.h (DEFAULT_PCC_STRUCT_RETURN): + Define as 0. + + 2001-09-18 Ulrich Weigand : + + * config.gcc (s390-*-linux-*, s390x-*-linux*): Switch to + new-style tm_file specification. Specify correct tm_p_file, + md_file, and out_file for s390x. + + * config/s390/linux.h, linux64.h: Don't include other target + macro header files. Now handled via tm_file. + + * config/s390/linux.h, s390.h: (IEEE_FLOAT, TARGET_IEEE_FLOAT, + TARGET_IBM_FLOAT): Move from linux.h to s390.h to ensure they + are defined before use. + + Tue Sep 18 09:51:11 2001 Eric Christopher + + * config/mips/mips.c (mips_asm_file_start): Conditionalize Elf + code generation only for Gnu assembler. + + 2001-09-18 Catherine Moore + + * config/stormy16 (LIB_SPEC): Remove -lnosys. + + 2001-09-18 Richard Sandiford + + * config/mips/mips.c (mips_frame_set): New. + (mips_emit_frame_related_store): When storing two 32-bit FPRs, use + a parallel frame-related expression with a set for each register. + + 2001-09-18 Philip Blundell + + * config/arm/lib1funcs.asm (L_dvmd_lnx): Don't rely on kernel + header files. + + 2001-09-17 Dale Johannesen + + * config/rs6000/rs6000.h (FIXED_REGISTERS): Use FIXED_R2. + * config/rs6000/aix.h (FIXED_R2): Define. + * config/rs6000/darwin.h (FIXED_R2): Define. + * config/rs6000/sysv4.h (FIXED_R2): Define. + + 2001-09-17 Jeff Sturm + + * except.c (dw2_build_landing_pads): New local + clobbers_hard_regs. Emit an ASM_INPUT as a scheduling + barrier after clobbers. Fixes c++/4012. + + 2001-09-17 Kaveh R. Ghazi + + * gcc.c (find_file): Use ACONCAT in lieu of alloca/strcpy/strcat. + + 2001-09-17 Joseph S. Myers + + * dostage2, dostage3, listing, make-l2.com, makefile.vms, + patch-apollo-includes, vmsconfig.com: Remove obsolete files. + + 2001-09-17 Kaveh R. Ghazi + + * c-aux-info.c (affix_data_type): Use ASTRDUP in lieu of + alloca/strcpy. + + 2001-09-17 Neil Booth + + * cpphash.h (_cpp_lex_direct): New. + * cpplex.c (_cpp_lex_token): Update. + (lex_token): Rename _cpp_lex_direct; lex into pfile->cur_token, + and increment that pointer. + * cppmacro.c (alloc_expansion_token): New. + (lex_expansion_token): Lex macro expansion directly into + macro storage. + + 2001-09-16 Brad Lucier + + * Makefile.in: Make rtl-error.o depend on $(CONFIG_H). + + Sun Sep 16 21:59:46 CEST 2001 Jan hubicka + + * basic-block.h (free_bb_for_insn): Declare. + * bb-reorder.c (label_for_bb): Use block_label. + (emit_jump_to_block_after): Remove. + (insert_intra_1): Do not update block_for_insn. + (insert_inter_bb_scope_notes): Likewise; update bb->end + * cfg.c (free_bb_for_insn): New. + (try_rediret_by_replacing_jump): Avoid set_block_for_new_insns call. + (force_nonfallthru_and_redirect): Likewise; do not update BB boundaries. + (commit_one_edge_insertion): Likewise. + (commit_one_edge_insertion): Do not update BB boundary. + (commit_edge_insertions): Do not call compute_bb_for_insn. + * cfgbuild.c (find_basic_blocks): Do not free basic_block_for_insn. + * cfgcleanup.c (merge_blocks_move_predecessor): Use reorder_insns_nobb. + (merge_blocks_move_successor_nojumps): Likewise. + (try_crossjump_to_edge): Do not update block_for_insn. + * combine.c (combine_instructions): Remove compute_bb_for_insn call. + * df.c (df_pattern_emit_later): Do not update BB boundary. + (df_jump_pattern_emit_after): Likewise. + (df_insn_move_before): Use emit_insn_before. + * emit-rtl.c (try_split): Emit after trial to get bb boundary updated + properly. + (add_insn_after, add_insn_before, emit_insns_after): Update BB + boundaries and basic_block_for_insn. + (reorder_insns_nobb): Rename from reorder_insns. + (reorder_insns): New. + (emit_block_insn_before, emit_block_insn_after): Kill. + * flow.c (check_function_return_warnings): Do not call + compute_bb_for_insn; Do not free basic_block_for_insn. + (attempt_auto_inc): Do not update basic_block_for_insn. + * function.c (emit_return_into_block): Likewise; + do not update BB boundaries. + * gcse.c (handle_avail_expr): Do not update basic_block_for_insn. + (insert_insn_end_bb): Use emit_insn_before; Likewise. + (pre_insert_copy_insn): Likewise. + (update_ld_motion_notes): Likewise. + (insert_insn_start_bb): Likewise. + (replace_store_insn): Likewise. + * ifcvt.c (noce_process_if_block): Likewise. + (if_convert): Do not call compute_bb_for_insn. + * lcm.c (optimize_mode_switching): Do not update BB boundaries. + Use emit_insn_before and emit_insn_after. + * recog.c (split_all_insns): Do not update BB boundaries; + Do not call compute_bb_for_insn. + (peephole2_optimize): Do not update BB boundaries. + * reg-stack.c (emit_pop_insn): Use emit_insn_after and + emit_insn_before. + (emit_swap_insn): Likewise. + (convert_regs_1): Likewise. + * reload1.c (reload): Call compute_bb_for_insn. + * rtl.h (reorder_insns_nobb): Declare. + * ssa.c (rename_equivalent_regs): Use emit_insn_before. + * toplev.c (rest_of_compilation): Call free_bb_for_insn + at places CFG is invalidated; do not call compute_bb_for_insn. + + * cfg.c (expunge_block): Invalidate BB structure. + + * (merge_blocks_nomove): Update properly BLOCK_FOR_INSN + array. + + * cfg.c (verify_flow_info): Verify the basic_block_for_insn array. + + 2001-09-16 Neil Booth + + * cpphash.h (_cpp_lex_token): Update prototype. + * cpplex.c (_cpp_lex_token): New prototype. + * cpplib.c (skip_rest_of_line, check_eol, _cpp_handle_directive, + lex_macro_node, read_flag, do_pragma_poison): Update. + * cppmacro.c (cpp_get_token, parse_params, + lex_expansion_token): Update. + + 2001-09-16 Neil Booth + + * cppmain.c (scan_translation_unit): Don't worry about + putting a space after hashes. + * cpplib.c (directive_diagnostics): New. + (_cpp_handle_directive): Update to use directive_diagnostics. + (run_directive): Don't toggle prevent_expansion. + (do_line): Backup in case of the line extension. + * cpplib.h (cpp_lexer_pos): Remove. + * cppmacro.c (_cpp_create_definition): Precede a leading # + with whitespace. + + 2001-09-15 Richard Henderson + + * c-typeck.c (comptypes): Handle zero-length arrays properly. + + 2001-09-15 Roman Lechtchinsky + + * c-common.c (c_promoting_integer_type_p): Handle ?Imode types. + + 2001-09-15 Neil Booth + + PR preprocessor/3571 + * tradcpp.c (handle_directive): Skip non-vertical space. + + 2001-09-15 Neil Booth + + * cppmain.c (setup_callbacks): Set line callback only + if outputting preprocessed source. + + 2001-09-15 Kaveh R. Ghazi + + * collect2.c (main): Const-ification. + * gcc.c (translate_options, process_command): Use xstrdup in + lieu of xmalloc/strcpy. + (main): Use concat in lieu of xmalloc/strcpy/strcat. + + 2001-09-14 Roman Lechtchinsky + + * doc/install.texi (Specific, alphaev5-cray-unicosmk*): Fix + example. + + 2001-09-15 Neil Booth + + * scan-decls.c (scan_decls): Fix typo. + + 2001-09-15 Neil Booth + + * cpphash.h (struct cpp_reader): Remove lexer_pos, directive_pos. + Split mlstring_pos into mls_line and mls_col. + * cppinit.c (cpp_create_reader): Initialize line to 1. + (cpp_destroy): Free tokenruns. + (push_include): Don't update lexer_pos. + * cpplex.c (unterminated, parse_string): Update. + (lex_token): Don't update lexer_pos, update. + * cpplib.c (if_stack): Save line instead of line + col. + (start_directive, _cpp_do__Pragma, do_else, do_elif, + push_conditional, _cpp_pop_buffer): Update. + * cppmacro.c (funlike_invocation_p): Don't save lexer_pos. + (_cpp_create_definition): Update. + + 2001-09-15 Eric Christopher + + * config/mips/abi64.h: Add support for MEABI. + + 2001-09-15 Eric Christopher + + * config/mips/mips.md: Add unspec #2. + (reload_indi): Use. + (reload_outdi): Ditto. + (reload_outsi): Ditto. + (HILO_delay): New. + + 2001-09-15 Eric Christopher + Jason Eckhardt + + * config.gcc: Add mipsisa32 target and mipsisa32-linux target. + * config/mips/isa32-linux.h: New file. + * config/mips/isa3264.h: Ditto. + * config/mips/mips-protos.h: Add mips_hard_regno_nregs. + * config/mips/mips.c (mips_hard_regno_nregs): Move here from mips.h. + (output_block_mode): Support MEABI. + (function_arg): Ditto. Fix floating point arg passing. + (mips_va_start): Ditto. + (override_options): Add isas 32 and 64, meabi, mips32 and mips64 + processors. + (mips_asm_file_start): Add new section to pass abi to gdb. + (function_arg_pass_by_reference): Support MEABI. + (mips_parse_cpu): Support mips32 and mips64 processors. + * config/mips/mips.h: Support ABI_MEABI, TARGET_MIPS4KC, + TARGET_MIPS5KC. Support isa32 and isa64. + (processor_type): Add r4kc, r5kc, r20kc. + (GENERATE_MULT3_SI): New. + (GENERATE_MULT3_DI): Ditto. + (GENERATE_MULT3): Remove. + (ISA_HAS_64BIT_REGS): Add isa == 64. + (ISA_HAS_8CC): Add mips_isa = 32 and 64. + (ISA_HAS_MADD_MSUB): New. + (ISA_HAS_CLZ_CLO): Ditto. + (ISA_HAS_DCLZ_DCLO): Ditto. + (ABI_GAS_ASM_SPEC): New. + (GAS_ASM_SPEC): Use. Add support for mips32, mips64. + (ASM_SPEC): Ditto. + (LINK_SPEC): Ditto. + (SUBTARGET_CC1_SPEC): Ditto. + (SUBTARGET_CPP_SIZE_SPEC): Ditto. + (PAD_VARARGS_DOWN): Support MEABI. + (HARD_REGNO_NREGS): Move to mips.c. + (ASM_OUTPUT_IDENT): Add #undef. + * config/mips/mips.md: Add r4kc, r5kc, r20kc. + (mulsi3): Use GENERATE_MULT3_SI. + (mulsi3_mult3): Ditto. Support mips32, mips64. + (mul_acc_si): Use ISA_HAS_MADD_MSUB. + (mul_sub_si): New pattern. + (unnamed splitters): New. + (muldi3): Use GENERATE_MULT3_DI. + (muldi3_internal2): Ditto. + (movdicc): Support mips32. + * config/mips/t-isa3264: New file. + + 2001-09-15 Hans-Peter Nilsson + + * rtl.h (FIND_REG_INC_NOTE) [HAVE_PRE_INCREMENT + || HAVE_PRE_DECREMENT || HAVE_POST_INCREMENT + || HAVE_POST_DECREMENT]: Call find_regno_note for REGs. + + * reorg.c (fill_slots_from_thread): After call to + steal_delay_list_from_target, update own_thread as new_thread may + have branched. + + 2001-09-14 Neil Booth + + * cpperror.c (print_location): Take line and column, for + default positioning use the previously lexed token. + (_cpp_begin_message): Take line and column. + (cpp_ice, cpp_fatal, cpp_error, cpp_error_with_line, cpp_warning, + cpp_warning_with_line, cpp_pedwarn, cpp_pedwarn_with_line): Update. + * cpphash.h (_cpp_begin_message): Update prototype. + * cppinit.c (push_include): Don't set output line. + * cpplex.c (_cpp_lex_token): Callback for start of new output lines. + * cpplib.c (do_diagnostic, _cpp_pop_buffer): Update. + (do_pragma): Kludge for front ends. Don't expand macros at all. + * cpplib.h (cpp_lookahead, cpp_token_with_pos, cpp_get_line): Remove. + (struct cpp_token): Remove output_line. + (struct cpp_callbacks): New member line_change. + * cppmacro.c (builtin_macro, paste_all_tokens, replace_args, + cpp_get_token): Preserve BOL flag. + (cpp_get_line): Remove. + (_cpp_backup_tokens): Remove useless abort(). + * cppmain.c (cb_line_change): New. + (scan_translation_unit): Don't worry about starting new lines here. + * scan-decls.c (scan_decls): Update. + * c-lex.c (c_lex, init_c_lex): Update. + (cb_line_change, src_lineno): New. + + Fri Sep 14 13:54:50 EDT 2001 John Wehle (john@feith.com) + + * tree.c (append_random_chars): Generate the random + characters in a reproducable fashion. + + 2001-09-14 Richard Henderson + + * config/i386/i386.c (internal_label_prefix): New. + (internal_label_prefix_len): New. + (override_options): Set them. + (local_symbolic_operand): New. + (legitimate_pic_address_disp_p): Use it. + (legitimize_pic_address): Likewise. + + 2001-09-14 Marc Espie + + * config/i386/unix.h (ASM_OUTPUT_MI_THUNK): Generate reference to GOT + correctly. + + 2001-09-14 Roman Lechtchinsky + + * config/alpha/alpha.md (unaligned_extendhidi_be): Fix. + * config/alpha/unicosmk.h (INIT_TARGET_OPTABS): New. + + 2001-09-14 Nick Clifton + + * rtlanal.c (subreg_regno_offset): Add semicolon to end of + invocation of SUBREG_REGNO_OFFSET. + + * haifa-sched.c: Fix typo in FSF copyright statement. + * sched-deps.c: Fix typo in FSF copyright statement. + * sched-ebb.c: Fix typo in FSF copyright statement. + * sched-rgn.c: Fix typo in FSF copyright statement. + * sched-vis.c: Fix typo in FSF copyright statement. + + * config.gcc: Move inclusion of arm elf specific header files + from the files themselves into the tm_file variable. Make + sure that elfos.h is included before target specific elf + headers. + * config/arm/aout.h (NO_DOLLAR_IN_LABEL): Only define if not + already defined. + (ASM_OUTPUT_ASCII, ASM_OUTPUT_SKIP): Protect definition. + * config/arm.arm.h (TARGET_MEM_FUNCTIONS, + ASM_OUTPUT_CASE_LABEL): Protect definition. + (CC1_SPEC, FP_DEFAULT, ARM_FUNCTION_PROFILE): Only define if + not already defined. + * config/arm/conix-elf.h: (USER_LABEL_PREFIX, + LOCAL_LABEL_PREFIX, MAKE_DECL_ONE_ONLY, UNIQUE_SECTION): + Remove duplicate definition. + (READONLY_DATA_SECTION, SUBTARGET_EXTRA_SECTION, + (SUBTARGET_EXTRA_SECTION_FUNCTION, RDATA_SECTION_ASM_OP, + (RDATA_SECTION_FUNCTION): Remove redundant definition. + (STARTFILE_SPEC, ENDFILE_SPEC): Protect definition. + Remove inclusion of arm/elf.h. + * config/arm/unknown-elf.h: as for conix-elf.h. + (STARTFILE_SPEC): Include crti.o and crtn.o. + * config/arm/linux-elf.h: as for conix-elf.h. + * config/arm/ecos-elf.h: Remove inclusion of unknown-elf.h. + * config/arm/strongarm-elf.h: Remove inclusion of + unknown-elf.h. + * config/arm/xscale-elf.h: Remove inclusion of unknown-elf.h. + * config/arm/unknown-elf-oabi.h: Remove inclusion of + unknown-elf.h and elf.h. + * config/arm/uclinux-elf.h: Remove inclusion of linux-elf.h. + * config/arm/linux-gas.h (DBX_DEBUGGING_INFO, + ASM_WEAKEN_LABEL): Remove redundant definition. + * config/arm/elf.h: Test for inclusion of elfos.h + (USER_LABEL_PREFIX, ASM_DECLARE_RESULT, ASM_DECLARE_RESULT, + ASM_DECLARE_OBJECT_NAME, ASM_FINISH_DECLARE_OBJECT_NAME, + SUBTARGET_EXTRA_SECTION, SUBTARGET_EXTRA_SECTION_FUNCTION, + EXTRA_SECTIONS, INT_ASM_OP, ASM_WEAKEN_LABEL): Remove + redundant definition. + (TYPE_OPERAND_FMT, ASM_DECLARE_FUNCTION_NAME, + ASM_DECLARE_FUNCTION_SIZE, ASM_OUTPUT_INTERNAL_LABEL, + ASM_OUTPUT_ALIGNED_COMMON): Protect definition. + * t-arm-elf (EXTRA_MULTILIB_PARTS): Add crti.o and crtn.o. + Add rules to build crti.o and crtn.o + * crti.asm: New file. + * crtn.asm: New file. + + 2001-09-13 Neil Booth + + * c-parse.in (_yylex): Use _cpp_backup_tokens. + * cpphash.h (struct tokenrun): Add prev. + (struct lexer_state): Remove bol. + (struct cpp_reader): Remove old lookahead stuff, add lookaheads. + (_cpp_free_lookaheads, _cpp_release_lookahead, _cpp_push_token) + : Remove. + * cppinit.c (cpp_create_reader): Don't set bol. + (cpp_destroy): Don't free lookaheads. + * cpplex.c (lex_directive): Remove. + (next_tokenrun): Update. + (_cpp_lex_token): Clean up logic. + (lex_token): Update to return a pointer to lexed token, since it + can move to the start of the buffer. Simpify newline handling. + * cpplib.c (SEEN_EOL): Update. + (skip_rest_of_line): Remove lookahead stuff. + (end_directive): Line numbers are already incremented. Revert + to start of lexed token buffer if we can. + (_cpp_handle_directive, do_pragma, do_pragma_dependency, + parse_answer): Use _cpp_backup_tokens. + (run_directive, cpp_pop_buffer): Don't set bol, set saved_flags + instead. Don't check for EOL. + (do_include_common, do_line, do_pragma_system_header): Use + skip_rest_of_line. + * cpplib.h (BOL, _cpp_backup_tokens): New. + * cppmacro.c (save_lookahead_token, take_lookahead_token, + alloc_lookahead, free_lookahead, _cpp_free_lookaheads, + cpp_start_lookahead, cpp_stop_lookahead, _cpp_push_token): Remove. + (builtin_macro): Don't use cpp_get_line. + (cpp_get_line): Short term kludge. + (parse_arg): Handle directives in arguments here. Back up when + appropriate. Store EOF at end of argument list. + (funlike_invocation_p): Use _cpp_backup_tokens. + (push_arg_context): Account for EOF at end of list. + (cpp_get_token): Remove lookahead stuff. Update. + + 2001-09-13 Kaveh R. Ghazi + + * c-parse.in (yyerror): Const-ification and/or static-ization. + * c-typeck.c (push_member_name): Likewise. + * collect2.c (main): Likewise. + * dbxout.c (dbxout_parms): Likewise. + * diagnostic.c (format_with_decl): Likewise. + * dwarf2out.c (output_ranges): Likewise. + * dwarfout.c (fundamental_type_code): Likewise. + * except.c (dw2_output_call_site_table): Likewise. + * gcc.c (do_spec_1): Likewise. + * genopinit.c (optabs): Likewise. + * objc/objc-act.c (synth_id_with_class_suffix, start_class, + gen_declaration_1, handle_impent): Likewise. + * protoize.c (default_include, in_system_include_dir, abspath): + Likewise. + * sched-vis.c (visualize_stall_cycles): Likewise. + * sdbout.c (plain_type_1, sdbout_end_function, + sdbout_end_epilogue): Likewise. + * varasm.c (decode_reg_name): Likewise. + + * 1750a.c (mod_regno_adjust): Likewise. + * alpha.c (alpha_write_one_linkage, + unicosmk_output_default_externs): Likewise. + * arm.c (arm_condition_codes): Likewise. + * arm.h (arm_condition_codes): Likewise. + * avr.c (output_movsisf, encode_section_info): Likewise. + * darwin.h (GEN_BINDER_NAME_FOR_STUB, GEN_SYMBOL_NAME_FOR_SYMBOL): + Likewise. + * i386.c (hi_reg_name, qi_reg_name, qi_high_reg_name): Likewise. + * i386.h (hi_reg_name, qi_reg_name, qi_high_reg_name): Likewise. + * m88k.c (output_function_profiler): Likewise. + * mips.c (mips_output_conditional_branch): Likewise. + * ns32k.c (ns32k_out_reg_names): Likewise. + * ns32k.h (ns32k_out_reg_names): Likewise. + * pj.c (pj_output_rval): Likewise. + * rs6000.c (GEN_LOCAL_LABEL_FOR_SYMBOL): Likewise. + * sparc.c (sparc_flat_function_prologue, + sparc_flat_function_epilogue): Likewise. + + 2001-09-13 Markus Werle + Gerald Pfeifer + + * doc/install.texi (Binaries): Add "Binaries for HP-UX 11.00 at + Aachen University of Technology". + + 2001-09-13 Andreas Schwab + + * config/float-m68k.h: Define DECIMAL_DIG and FLT_EVAL_METHOD for + C99. + + 2001-09-13 Richard Henderson + + * config/alpha/alpha.c (small_symbolic_operand): New. + (override_options): Set MASK_SMALL_DATA based on pic/PIC. + (some_operand, input_operand): Don't handle HIGH. + (alpha_legitimize_address): Use it. Emit HIGH with PLUS gp. + (alpha_expand_mov): Likewise. + (print_operand) [H]: Just print HIGH symbol. + (print_operand_address): Handle small data. + * config/alpha/alpha.h (MASK_SMALL_DATA, TARGET_SMALL_DATA): New. + (TARGET_SWITCHES): Add -msmall-data/large-data. + (PIC_OFFSET_TABLE_REGNUM): New. + (PREFERRED_RELOAD_CLASS): Don't handle HIGH. + (PREDICATE_COES): Update. + * config/alpha/alpha.md (adddi_er_high): New. + (adddi_er_low): Handle small data. + * config/alpha/elf.h (DO_SELECT_SECTION): If SMALL_DATA, + prefer .sdata to .rodata. + (SELECT_RTX_SECTION): Likewise. + + 2001-09-12 Josh Martin + + * fixinc/inclhack.def(hpux11_size_t): Keep HP-UX headers from + defining __size_t and leaving size_t undefined. + + 2001-09-12 Diego Novillo + + * basic-block.h (expunge_block): Declare. + * cfg.c (expunge_block): Remove static declaration. + + 2001-09-12 Richard Henderson + + * integrate.c (copy_insn_list): Copy label name from + NOTE_INSN_DELETED_LABEL. + + 2001-09-12 Kaveh R. Ghazi + + * c-common.c (c_tree_code_name): Const-ification. + * c-decl.c (c_decode_option): Likewise. + * c-typeck.c (warn_for_assignment): Likewise. + * collect2.c (libexts, is_ctor_dtor, main, ignore_library): + Likewise. + * cppinit.c (output_deps): Likewise. + * dependence.c (dependence_string, direction_string): Likewise. + * dwarf2out.c (output_ranges): Likewise. + * fixinc/fixfixes.c (emit_gnu_type): Likewise. + * fixinc/gnu-regex.c (re_error_msgid): Likewise. + * gcc.c (standard_exec_prefix, standard_exec_prefix_1, + standard_startfile_prefix, standard_startfile_prefix_1, + standard_startfile_prefix_2, tooldir_base_prefix, + standard_bindir_prefix, find_a_file): Likewise. + * genattrtab.c (make_length_attrs): Likewise. + * gencheck.c (tree_codes): Likewise. + * genemit.c (gen_split): Likewise. + * genrecog.c (special_mode_pred_table): Likewise. + * graph.c (graph_ext): Likewise. + * protoize (default_include): Likewise. + * reload.c (reload_when_needed_name): Likewise. + * sched-vis.c (visualize_stall_cycles): Likewise. + * tlink.c (recompile_files): Likewise. + * toplev.c (decode_g_option): Likewise. + * tradcpp.c (output_deps): Likewise. + * varasm.c (decode_reg_name): Likewise. + + * arm.c (arm_condition_codes, strings_fpa, thumb_condition_code): + Const-ification. + * arm.md: Likewise. + * avr.c (avr_regnames, encode_section_info): Likewise. + * c4x.c (float_reg_names): Likewise. + * darwin.h (ASM_GLOBALIZE_LABEL): Likewise. + * elfos.h (const_section): Likewise. + * i386.c (ix86_comp_type_attributes): Likewise. + * i386/win32.h (STRIP_NAME_ENCODING): Likewise. + * ia64/aix.h (UNIQUE_SECTION): Likewise. + * ia64.c (type_names): Likewise. + * m68hc11.c (reg_class_names): Likewise. + * m88k.c (m_options): Likewise. + * mips.c (mips_output_conditional_branch, mips_unique_section): + Likewise. + * rs6000/sysv4.h (ASM_DECLARE_FUNCTION_NAME): Likewise. + * sparc.c (sparc_flat_function_prologue, sparc_flat_function_epilogue, + ultra_code_names): Likewise. + * sparc.h (OVERRIDE_OPTIONS): Likewise. + + 2001-09-12 Jakub Jelinek + + * configure.in (gcc_cv_as_shf_merge): Fix a typo. + Use --fatal-warnings option for gas. + * configure: Rebuilt. + + 2001-09-12 Roman Lechtchinsky + + * doc/install.texi (Specific, alphaev5-cray-unicosmk*): Document. + + 2001-09-11 Jim Wilson + + * alias.c (clear_reg_alias_info): Only handle pseudo registers. + + 2001-10-11 Matt Kraai + + * builtins.c (c_strlen): Treat an offset too large for a + HOST_WIDE_INT as out of range. + + Tue Sep 11 18:57:47 CEST 2001 Jan Hubicka + + * basic-block.h (EDGE_CRITICAL): Remove; renumber other flags. + (EDGE_CRITICAL_P): New predicate. + * cfg.c (force_nonfallthru_and_redirect, split_edge): Kill EDGE_CRITICAL + handling. + (insert_insn_on_edge): Use EDGE_CRITICAL_P. + (dump_edge_info): Remove "crit". + * cfganal.c (mark_critical_edges): Kill. + * cfgbuild.c (find_basic_blocks): Remove mark_critical_edges call. + * cfgcleanup.c (cleanup_cfg): Likewise. + * profile.c (instrument_edges): Use EDGE_CRITICAL_P. + (find_spanning_tree): Likewise. + * reg-stack.c (convert_regs_1): Likewise. + * ssa.c (mark_regs_equivalent_over_bad_edges): Likewise. + + * basic-block.h (create_basic_block_structure): New. + (create_basic_block): Update prototype. + (force_nonfallthru): New. + * bb-reorder.c (fixup_reorder_chain): Fixup use force_nonfallthru. + * cfg.c (create_basic_block_structure): Rename from create_basic_block; + handle updating of block_for_insn, creating of empty BBs and BBs at + the end of INSN chain. + (create_basic_block): New function. + (split_block): Use create_basic_block. + (force_nonfallthru_and_redirect): Break out from ...; cleanup + (redirect_edge_and_branch_force): ... here. + (force_nonfallthru): New. + (split_edge): Rewrite to use force_nonfallthru and create_block. + * cfgbuild.c (find_basic_blocks_1): Use create_basic_block_structure. + (find_basic_blocks): Free basic_block_for_insn. + * cfgcleanup.c (merge_blocks): Use force_nonfallthru. + + * cfg.c: Fix formating. + * cfgcleanup.c: Fix formating. + (merge_blocks, tail_recursion_label_p): Return bool. + (merge_blocks_move_predecessor_nojumps, + merge_blocks_move_successor_nojumps): Return void. + + 2001-09-11 Jakub Jelinek + + * configure.in: Check whether assembler supports section merging. + * config.in: Rebuilt. + * configure: Rebuilt. + * varasm.c (variable_section, output_constant_pool): Pass alignment + to SELECT_SECTION and SELECT_RTX_SECTION. + (mergeable_string_section): New. + (mergeable_constant_section): New. + (default_elf_asm_named_section): Output SECTION_MERGE and + SECTION_STRINGS flags plus SECTION_ENTSIZE entity size. + * output.h (mergeable_string_section): New. + (mergeable_constant_section): New. + (SECTION_MERGE, SECTION_STRINGS, SECTION_ENTSIZE): Define. + * toplev.c (flag_merge_constants): New. + (f_options): Add -fmerge-constants and -fmerge-all-constants + options. + (toplev_main): Default to -fno-merge-constants if not optimizing. + * flags.h (flag_merge_constants): Add extern. + * invoke.texi (-fmerge-constants, -fmerge-all-constants): Document. + * tm.texi (SELECT_SECTION, SELECT_RTX_SECTION): Document added third + argument. + * config/elfos.h (ASM_SECTION_START_OP, ASM_OUTPUT_SECTION_START): + Define if assembler has working .subsection -1 support. + (SELECT_RTX_SECTION, SELECT_SECTION): Add third macro argument. + Put constant into special SHF_MERGE sections if the linker should + attempt to merge duplicates. + * config/ia64/sysv4.h (SELECT_RTX_SECTION, SELECT_SECTION): Add third + macro argument. + Put constant into special SHF_MERGE sections if the linker should + attempt to merge duplicates. + * config/alpha/elf.h: Likewise. + (ASM_SECTION_START_OP, ASM_OUTPUT_SECTION_START): Define if assembler + has working .subsection -1 support. + * config/nextstep.h: Add third argument to SELECT_RTX_SECTION and + SELECT_SECTION. + * config/svr3.h: Likewise. + * config/darwin.h: Likewise. + * config/arm/aof.h: Likewise. + * config/arm/linux-elf.h: Likewise. + * config/avr/avr.h: Likewise. + * config/c4x/c4x.h: Likewise. + * config/d30v/d30v.h: Likewise. + * config/i386/dgux.h: Likewise. + * config/i386/osfrose.h: Likewise. + * config/i386/sco5.h: Likewise. + * config/i386/svr3gas.h: Likewise. + * config/ia64/aix.h: Likewise. + * config/m32r/m32r.h: Likewise. + * config/m68k/m68k.h: Likewise. + * config/m88k/dgux.h: Likewise. + * config/m88k/m88k.h: Likewise. + * config/mcore/mcore-pe.h: Likewise. + * config/mips/mips.h: Likewise. + * config/pa/pa.h: Likewise. + * config/pa/pa-linux.h: Likewise. + * config/romp/romp.h: Likewise. + * config/rs6000/sysv4.h: Likewise. + * config/rs6000/xcoff.h: Likewise. + * config/s390/linux.h: Likewise. + * config/sparc/sparc.h: Likewise. + * config/sparc/sysv4.h: Likewise. + * config/stormy16/stormy16.h: Likewise. + * config/v850/v850.h: Likewise. + * config/vax/vms.h: Likewise. + * config/arm/arm.c (arm_elf_asm_named_section): Output SECTION_MERGE + and SECTION_STRINGS flags plus SECTION_ENTSIZE entity size. + * config/sparc/sparc.c (sparc_elf_asm_named_section): Use + default_elf_asm_named_section for SHF_MERGE sections. + + Tue Sep 11 17:55:54 CEST 2001 Jan Hubicka + + * bb-reorder.c (fixup_reorder_chain): Fallthru edge to exit block + is OK. + + 2001-09-11 Joseph S. Myers + + * c-common.c (split_specs_attrs): Allow for empty attributes with + empty TREE_PURPOSE. Fixes PR c/4294. + + Tue Sep 11 11:37:52 CEST 2001 Jan Hubicka + + * basic-block.h (cached_make_edge, make_single_succ): New. + (make_edge): Remove first parameter. + * bb-reroder.c (fixup_reorder_chain): Use make_single_succ_edge. + * cfg.c (cached_make_edge): Rename from make_edge; return newly + created edge; use obstack allocation. + (make_edge, make_single_succ_edge): New. + (first_removed_edge): New static variable. + (init_flow): Initialize first_removed_edge and n_edges. + (clear_edges): Use remove_edge. + (flow_delete_block): Likewise. + (remove_edge): Add removed edges to the removed edges list. + (split_block, redirect_edge_and_branch_force, split_edge): + Use make_edge. + * cfganal.c (flow_call_edges_add): Updaet make_edge call. + (add_noreturn_fake_exit_edges): Likewise. + (connect_infinite_loops_to_exit): Liekwise. + * cfgbuild.c (make_label_edge, make_edges, find_sub_basic_blocks): + Use cached_make_edge. + * cfgcleanup.c (try_crossjump_to_edge): Use make_single_succ_edge. + * profile.c (branch_prob): Update make_edge call. + * ssa-dce.c (ssa_eliminate_dead_code): Likewise. + + 2001-09-11 Richard Henderson + + * config/alpha/alpha.c: Tidy formatting. + (local_symbolic_operand): Verify mode. + (alpha_sa_mask): Ignore unicos for eh_return. + (alpha_expand_epilogue): Handle sp_adj2 zero, not NULL. + * config/alpha/alpha.md (umk divsi patterns): Remove. + (extendsfdf2): Remove unicos check. + (tablejump): Merge vms and unicos code; always use direct set + plus label_ref use. + + 2001-09-11 Roman Lechtchinsky + + * config.gcc (alpha*-*-unicosmk*): New target. + + * config/alpha/alpha-protos.h (symbolic_operand, + unicosmk_add_call_info_word, unicosmk_add_extern, + unicosmk_defer_case_vector, unicosmk_unique_section, + unicosmk_output_align, unicosmk_text_section, unicosmk_data_section, + unicosmk_asm_file_start, unicosmk_asm_file_end, + unicosmk_output_common): Declare. + + * config/alpha/alpha.c (NUM_ARGS, override_options, call_operand, + direct_return, function_arg, alpha_va_start, alpha_va_arg, + alpha_does_function_need_gp, alpha_end_function): Support Cray + Unicos/Mk. + (alpha_init_machine_status, alpha_mark_machine_status, + alpha_free_machine_status, unicosmk_output_deferred_case_vectors, + unicosmk_gen_dsib, unicosmk_output_ssib, unicosmk_need_dex, + unicosmk_asm_named_section, unicosmk_insert_attributes, + unicosmk_section_type_flags, symbolic_operand, + unicosmk_output_module_name, unicosmk_output_default_externs, + unicosmk_output_dex, unicosmk_output_externs, + unicosmk_output_addr_vec, unicosmk_ssib_name, + unicosmk_initial_elimination_offset, unicosmk_asm_file_start, + unicosmk_asm_file_end, unicosmk_output_common, + unicosmk_section_type_flags, unicosmk_unique_section, + unicosmk_add_call_info_word, unicosmk_text_section, + unicosmk_data_section, unicosmk_extern_list, unicosmk_extern_head, + unicosmk_add_extern, unicosmk_dex, unicosmk_dex_list, + unicosmk_dex_count, unicosmk_special_name): New. + (TARGET_INSERT_ATTRIBUTES, TARGET_SECTION_TYPE_FLAGS): Define for + TARGET_ABI_UNICOSMK. + (get_aligned_mem, alpha_expand_unaligned_load, + alpha_expand_unaligned_store, alpha_expand_unaligned_load_words, + alpha_expand_unaligned_store_words): Support big-endian mode. + (print_operand): Likewise. New format specifier 't'. Use + TARGET_AS_SLASH_BEFORE_SUFFIX. + (alpha_is_stack_procedure): Rename from vms_is_stack_procedure. + (alpha_pv_save_size): Update with above change. + (alpha_sa_mask, alpha_sa_size, alpha_expand_prologue, + alpha_start_function, alpha_expand_epilogue): Likewise. Support Cray + Unicos/Mk. + + * config/alpha/alpha.h (TARGET_ABI_UNICOSMK): New. + (TARGET_ABI_OSF): Exclude TARGET_ABI_UNICOSMK. + (TARGET_AS_SLASH_BEFORE_SUFFIX): New. + (EXTRA_CONSTRAINT): New constraint 'U'. + (PREDICATE_CODES): Add symbolic_operand. + + * config/alpha/alpha.md (UNSPEC_UMK_LAUM, UNSPEC_UMK_LALM, + UNSPEC_UMK_LAL, UNSPEC_UMK_LOAD_CIW): New constants. + (mulsi3, *mulsi_se, mulvsi3): Disable for TARGET_ABI_UNICOSMK. + (integer division and modulus patterns): Split in default and + Unicos/Mk versions. + (*divmodsi_internal, *divmoddi_internal): Disable for + TARGET_ABI_UNICOSMK. + (unaligned_extend?idi, unaligned_load?i, unaligned_store?i): Split in + little-endian and big-endian versions. + (ext, ins, msk): Likewise. + (extv, extzv, insv): Support big-endian mode. + (call, call_value, tablejump): Support TARGET_ABI_UNICOSMK. + (call_umk, call_value_umk, *call_umk, tablejump_umk, + *tablejump_umk_internal, *call_value_umk): New. + (*movdi_nofix): Add pattern for loading an address into a register on + TARGET_ABI_UNICOSMK. + (umk_laum, umk_lal, umk_lalm, *umk_load_ciw): New. + (umk_mismatch_args, arg_home_umk): New. + (various insns): Don't use mov, fmov, nop, fnop and unop. + (realign): Support TARGET_ABI_UNICOSMK. + + * config/alpha/unicosmk.h: New file. + * config/alpha/t-unicosmk: New file. + + * fixinc/inclhack.def (unicosmk_restrict): New. + * fixinc/fixincl.x: Regenerate. + + * ginclude/stddef.h (size_t): Check for and define __SIZE_T__. + (wchar_t): Check for and define __WCHAR_T__. + + 2001-09-11 Richard Sandiford + + * combine.c (simplify_shift_const): Treat shifts by the mode + size as undefined. + + 2001-09-11 Neil Booth + + * cpphash.h (struct tokenrun): New. + (struct cpp_context): New member bol. + (struct cpp_reader): New members. + (_cpp_init_tokenrun): New. + * cppinit.c (cpp_create_reader): Set up the token runs. + * cpplex.c (lex_directive, lex_token, next_tokenrun): New. + (lex_token): New internalised version of _cpp_lex_token. Don't + handle directives or the multiple include optimization here any + more. Simply lex a token. + * cpplib.c (run_directive): Clear bol. + (_cpp_pop_buffer): Set bol. + * cppmacro.c (funlike_invocation_p): Keep tokens whilst parsing + arguments. + + 2001-09-11 Michael Meissner + + * config/mips/mips.h (CC1_SPEC): If -mgp32 default to -mfp32, and + give an error if the user uses -mfp32. + (CPP_FPR_SPEC): Define __mips_fpr to be 32 or 64 depending on the + default options. + (CPP_SPEC): Define __mips_fpr to be 32 or 64, depending on the + floating point register size. + (EXTRA_SPECS): Add CPP_FPR_SPEC. + + * config/mips/netbsd.h (ASM_FINISH_DECLARE_OBJECT): Use + HOST_WIDE_INT_PRINT_DEC to properly print the result of + int_size_in_bytes. + * config/mips/elf.h (ASM_FINISH_DECLARE_OBJECT): Ditto. + * config/mips/elf64.h (ASM_FINISH_DECLARE_OBJECT): Ditto. + + 2001-09-11 Hans-Peter Nilsson + + * dbxout.c (dbxout_parms): Fix typo in comment. + * unroll.c (loop_find_equiv_value): Ditto. + * toplev.c (rest_of_compilation): Ditto. + * loop.c (scan_loop): Ditto. + * dwarf2out.c (struct dw_fde_struct): Ditto. + + 2001-09-10 Zack Weinberg + + * cpplex.c (parse_identifier): Fast-path optimize. Avoid + copying identifier when we're just going to throw it away. + (parse_identifier_slow): New routine to handle abnormal cases. + (_cpp_lex_token): Update call site. + + * hashtable.c (ht_lookup): Don't assume that the string we've + been given is NUL-terminated. + * system.h: #define __builtin_expect(a, b) to (a) if not + GCC >=3.0. + + 2001-09-10 Michael Meissner + + * config.gcc (sparc64-*-solaris2): Add alias to be compatible with + binutils, gdb. + + 2001-09-10 David Edelsohn + + * config/rs6000/t-aix43 (SHLIB_INSTALL): Use mode 751 (a+x,r-o). + + Mon Sep 10 16:26:44 2001 Richard Kenner + + * builtins.c (c_getstr): Correct thinko in last change and further + cleanup. + + 2001-09-10 Tim Freeman + + * dwarf2out.c (incomplete_types, decl_scope_table): Make them + into varray's and register them as roots with the garbage + collector so they are not collected too soon. + + Mon Sep 10 14:21:26 CEST 2001 Jan Hubicka + + * Makefile.in (cfg.o, cfganal.o, cfgloop.o, cfgbuild.o, cfgcleanup.o): + New. + * basic-block.h (flow_obstack, label_value_list, + tail_recursion_label_list): Declare + (tidy_fallthru_edges): Declare. + (expunge_block, last_loop_beg_note): Delete. + (can_fallthru, flow_nodes_print, flow_edge_list_print): Declare. + * cfg.c: New file + (basic_block_for_insn, label_value_list): Move from flow.c; make global. + (n_basic_blocks, n_edges, basic_block_info, entry_exit_blocks, + init_flow, clear_edges, can_delete_note_p, can_delete_label_p, + flow_delete_insn, flow_delete_insn_chain, create_basic_block, + expunge_block, flow_delete_block, compute_bb_for_insn, + update_bb_for_insn, set_block_for_insn, set_block_for_new_insns, + make_edge, remove_edge, redirect_edge_succ, redirect_edge_succ_nodup, + redirect_edge_pred, split_block, marge_blocks_nomove, block_label, + try_redirect_by_replacing_jump, last_loop_beg_note, + redirect_edge_and_branch, redirect_edge_and_branch_force, + tidy_fallthru_edge, tidy_fallthru_edges, back_edge_of_syntactic_loop_p, + split_edge, insert_insn_on_edge, commit_one_edge_insertion, + commit_edge_insertions, dump_flow_info, debug_flow_info, + dump_edge_info, dump_bb, debug_bb, debug_bb_n, print_rtl_with_bb, + verify_flow_info, purge_dead_edges, purge_all_dead_edges): + Move here from flow.c + * cfganal.c: New file. + (forwarder_block_p, can_fallthru, mark_critical_edges, + mark_dfs_back_edges, need_fake_edge_p, flow_call_edges_add, + find_unreachable_blocks, create_edge_list, free_edge_list, + print_edge_list, verify_edge_list, find_edge_index, flow_nodes_print, + flow_edge_list_print, remove_fake_successors, remove_fake_edges, + add_noreturn_fake_exit_edges, connect_infinite_loops_to_exit, + flow_reverse_top_sort_order_compute, flow_depth_first_order_compute, + flow_dfs_compute_reverse_init, flow_dfs-compute_reverse_add_bb, + flow_dfs-compute_reverse_execute, flow_dfs_compute_reverse_finish); + Move here from flow.c + * cfgbuild.c: New file + (count_basic_blocks, find_label_refs, make_label_edge, make_eh_edge, + make_edges, find_basic_blocks_1, find_basic_blocks, + find_sub_basic_blocks): Move here from flow.c + * cfgcleanup.c: New file. + (try_simplify_condjump, try_forward_edges, tail_recursion_label_p, + merge_blocks_move_predecessor_nojumps, + merge_blocks_move_successor_nojumps, merge_blocks, + flow_find_cross_jump, outgoing_edges_match, try_crossjump_to_edge, + try_crossjump_bb, try_optimize_cfg): Move here from flow.c + (delete_unreachable_blocks, cleanup_cfg): Likewise; return true + if succeeded. + * cfgloop.c: New file + (flow_loops_cfg_dump, flow_loop_nested_p, flow_loop_dump, + flow_loops_dump, flow_loops_free, flow_loop_entry_edges_find, + flow_loop_exit_edges_find, flow_loop_nodes_find, + flow_loop_pre_header_scan, flow_loop_pre_header_find, + flow_loop_tree_node_add, flow_loops_tree_build, + flow_loop_level_compute, flow_loops_level_compute, flow_loop_scan, + flow_loops_find, flow_loops_update, flow_loop_outside_edge_p): + Move here from flow.c + * flow.c: Remove everything moved elsewhere + * output.h (cleanup_cfg): Return bool. + + * bb-reorder.c (reorder_block_def): Remove 'index'. + (insert_intra_1): Add argument BB, set block for new note. + (make_reorder_chain): Do not depdent on BB indexes. + (make_reorder_chain_1): Do not use BB indexes. + (label_for_bb): Likewise; set BB for new insn. + (emit_jump_to_block_after): Likewise. + (fixup_reorder_chain): Sanity check that all basic blocks + are chained; verify newly created insn chain; remove + undocnitional jump simplifying; Do not use BB indexes; + properly initialize count and frequency information; + dump reordered sequence. + (insert_intra_bb_scope_notes): update call of insert_intra_1. + (insert_inter_bb_scope_notes): Set block for new insn. + (reorder_basic_blocks): Dump flow info before reoredering. + + Mon Sep 10 06:47:35 2001 Richard Kenner + + * alias.c (clear_reg_alias_info): Use K&R format definition. + Avoid unsigned warning. + * builtins.c: Use "unsigned int", not "unsigned". + (target_char_cast): Use host_integerp and tree_low_cst. + (expand_builtin_args_info, expand_builtin_frame_address): Likewise. + (c_strlen): Likewise; OFFSET now HOST_WIDE_INT. + (c_getstr): Likewise. + (std_expand_builtin_va_arg): Use int_size_in_bytes. + (builtin_memcpy_read_str): Avoid unsigned warning. + (expand_builtin_memcpy): Alignments are unsigned. + (expand_builtin_strncpy, expand_builtin_memset): Likewise. + (expand_builtin_expect_jump): Use integer_zerop and integer_onep. + * predict.c (expensive_function_p): LIMIT now unsigned. + * resource.c (mark_target_live_regs): Make some vars unsigned. + * sdbout.c: Use "unsigned int", not "unsigned". + (MAKE_LINE_SAFE): Add cast to avoid unsigned warning. + (sdbout_source_line): Likewise. + (sdbout_record_type_name): Remove "const" for NAME declaration. + * config/alpha/alpha.c (alpha_expand_block_move): Whitespace fixes. + + 2001-09-10 Richard Sandiford + + * calls.c (store_one_arg): Expand comment. + + 2001-09-10 Roman Lechtchinsky + + * calls.c (store_one_arg): Make sure that the entire argument is + pushed if STACK_PARMS_IN_REG_PARM_AREA is defined. + + 2001-09-09 Richard Henderson + + * emit-rtl.c (adjust_address): Fix mode for LO_SUM. + + Sun Sep 9 10:43:17 CEST 2001 Jan Hubicka + + * loop.c (combine_givs): Fix computing of benefit once giv is combined. + + 2001-09-09 Richard Henderson + + * config/alpha/alpha.c (alpha_next_sequence_number): New. + (alpha_this_literal_sequence_number): New. + (alpha_this_gpdisp_sequence_number): New. + (some_operand, input_operand): Add HIGH. + (local_symbolic_operand): New. + (alpha_encode_section_info): New. + (alpha_legitimate_address_p): Allow LO_SUM. + (alpha_legitimize_address): Generate HIGH+LO_SUM. + (alpha_expand_mov): Likewise. + (secondary_reload_class): Check memory_operand not general_operand + for FP_REGS test. + (alpha_expand_unaligned_load): Force LO_SUM addresses into a register. + (alpha_expand_unaligned_store): Likewise. + (alpha_expand_unaligned_load_words): Likewise. + (alpha_expand_unaligned_store_words): Likewise. + (alpha_expand_block_clear): Likewise. + (print_operand): Handle %#, %*, %H. + (print_operand_address): Handle LO_SUM. + (find_lo_sum): New. + (alpha_does_function_need_gp): Use it. + (alpha_expand_block_move): Fix signed compare warnings. + (alpha_sa_mask, alpha_align_insns): Likewise. + * config/alpha/alpha-protos.h: Update. + * config/alpha/alpha.h (TARGET_EXPLICIT_RELOCS): New. + (MASK_EXPLICIT_RELOCS): New. + (TARGET_SWITCHES): Add -mexplicit-relocs. + (EXTRA_CONSTRAINT): Add 'T'. + (PREFERRED_RELOAD_CLASS): HIGH goes in GENERAL_REGS. + (ASM_APP_ON, ASM_APP_OFF): Turn on and off asm macro expansion. + (ENCODE_SECTION_INFO): Out line. + (REDO_SECTION_INFO_P): New. + (STRIP_NAME_ENCODING): New. + (ASM_OUTPUT_LABELREF): New. + (PRINT_OPERAND_PUNCT_VALID_P): Add #, *. + (PREDICATE_CODES): Update. + * config/alpha/alpha.md (divmodsi_internal_er, divmoddi_internal_er, + call_osf_1_er_noreturn, call_osf_1_er, movdi_er_low, movdi_er_nofix, + movdi_er_fix, prologue_ldgp_1_er, builtin_setjmp_receiver_sub_label_er, + builtin_setjmp_receiver_er, exception_receiver_1_er, + call_value_osf_1_er): New patterns. + (sibcall_osf_1, sibcall_value_osf_1): Remove register alternative. + (movqi, movhi, movsi): Add explicit $31 base register to lda. + * config/alpha/elf.h (ASM_FILE_START): Set nomacro if explicit relocs. + (FINAL_PRESCAN_INSN): New. + + Sat Sep 8 22:00:55 CEST 2001 Jan Hubicka + + * reg-stack.c (subst_stack_regs_pat): Fix fcmov reversal code. + + 2001-09-08 Andreas Jaeger + + * i386.h (TARGET_SWITCHES): Fix description. + + 2001-09-07 David Edelsohn + + * rs6000.c (num_insns_constant): Compute number of instructions + more accurately. + + * doc/install.texi: Explain AIX exception handling work-around. + Update URL for AIX fixes. + + 2001-09-07 Jim Wilson + + * alias.c (clear_reg_alias_info): New. + * flow.c (attempt_auto_inc): Call clear_reg_alias_info. + * rtl.h (clear_reg_alias_info): Declare. + + 2001-09-07 Roman Lechtchinsky + + * real.c (EMUSHORT,EMUSHORT_SIZE): Use HImode if no 16-bit type is + available. + (UEMUSHORT): New. Use instead of unsigned EMUSHORT. + (m16m,edivm,emulm): Change declaration to match definition. + + 2001-09-07 Roman Lechtchinsky + + * reload.c (push_reload): Check for subreg_lowpart_p instead of + SUBREG_BYTE being 0 when determining if the inner part of a subreg + can be reloaded. + + 2001-09-07 Roman Lechtchinsky + + * c-common.c (signed_or_unsigned_type): Handle machine mode types + which have no corresponding C type. + * fold_const.c (target_isinf,target_isnan,target_negative): Update + the representation of 64-bit doubles to work with 64-bit ints. + + 2001-09-07 Aldy Hernandez + + * config/mips/mips.c (override_options): Do not override ISA when ABI + specified if MIPS_CPU_STRING_DEFAULT was specified. + + 2001-09-07 Richard Henderson + + * loop.c (record_giv): Avoid simplifying MULT to ASHIFT. + (express_from_1): Wrap lines. + * rtlanal.c (commutative_operand_precedence): Rename from + operand_preference; export. + * rtl.h: Declare it. + * simplify-rtx.c (simplify_gen_binary): Tidy +/- const_int handling. + (simplify_binary_operation): Invoke simplify_plus_minus on + (CONST (PLUS ...)) as well. + (struct simplify_plus_minus_op_data): New. + (simplify_plus_minus_op_data_cmp): New. + (simplify_plus_minus): Use them. Avoid infinite recursion with + simplify_binary_operation wrt CONST. + + Fri Sep 7 11:52:30 2001 Kazu Hirata + + * h8300-protos.h (general_operand_dst_push): Remove. + * h8300.c (general_operand_dst_push): Likewise. + * h8300.h (OK_FOR_T): Likewise. + (EXTRA_CONSTRAINTS): Do not use OK_FOR_T. + * h8300.md (pushqi_h8300): New. + (pushqi_h8300hs): Likewise. + (pushqi): Likewise. + (pushhi_h8300): Likewise. + (pushhi_h8300hs): Likewise. + (pushhi): Likewise. + + Fri Sep 7 12:56:26 2001 Richard Kenner + + * genattrtab.c (attr_printf): First arg is unsigned. + Clean up formatting of callers. + + 2001-09-06 Aldy Hernandez + + * config/mips/mips.c (override_options): Allow abi32 with 64 bit + registers. + + 2001-09-07 Andreas Jaeger + + * i386.h (TARGET_SWITCHES): Fix descriptions. + + 2001-09-07 Matt Kraai + + * stor-layout.c (compute_record_mode): Check DECL_SIZE is set. + + 2001-09-06 Ira Ruben + + Remove OP_IDENTIFIER. + * tree.def (OP_IDENTIFIER): Remove. + * tree.c (tree_node_kind enum): Remove op_id_kind. + (tree_node_kind_names): Remove "op_identifiers". + (make_node): Remove OP_IDENTIFIER test. + (build_op_identifier): Removed because it isn't being used. + * print-tree.c (print_node): Remove OP_IDENTIFIER case. + * cp/pt.c (tsubst): Remove OP_IDENTIFIER case. + + 2001-09-06 Richard Henderson + + * simplify-rtx.c (simplify_binary_operation): Revert last change. + + 2001-09-06 Richard Henderson + + * simplify-rtx.c (simplify_binary_operation): Simplify contents + of CONST. + + 2001-09-06 Franz Sirl + + * config/rs6000/rs6000.c (rs6000_emit_prologue): Fix DWARF2 register + number used for CR register. + + Thu Sep 6 11:16:35 2001 Jeffrey A Law (law@cygnus.com) + Joern Rennecke (amylaar@cygnus.com) + + * h8300-protos.h (h8300_return_addr_rtx): New prototype. + * h8300.c (initial_offset): Handle offset between RP and FP. + (h8300_return_addr_rtx): New function. + * h8300.h (FIRST_PSEUDO_REGISTER): Bump now that we have a + return register. + (FIXED_REGISTERS, CALL_USED_REGISTERS): Corresponding changes. + (REG_ALLOC_ORDER, RETURN_ADDRESS_POINTER_REGNUM): Likewise. + (REG_CLASS_CONTENTS, ELIMINABLE_REGS): Likewise. + (CAN_ELIMINATE, REGISTER_NAMES): + (RETURN_ADDR_RTX): Call h8300_return_addr_rtx. + + 2001-09-06 Nathan Sidwell + + Remove TYPE_NONCOPIED_PARTS. + * tree.h (TYPE_NONCOPIED_PARTS): Remove. + (struct tree_type): Remove noncopied_parts. + * c-tree.h (TYPE_ACTUAL_ARG_TYPES): Map onto TYPE_BINFO. + * expr.c (save_noncopied_parts, init_noncopied_parts): Remove. + (fixed_type_p): Remove. + (expand_expr, INIT_EXPR): Don't deal with noncopied parts. + (expand_expr, MODIFY_EXPR): Likewise. + * ggc-common.c (ggc_mark_trees): Remove TYPE_NONCOPIED_PARTS. + * doc/c-tree.texi: Remove TYPE_NONCOPIED_PARTS FIXME. + + 2001-09-06 Alan Modra + + * config/rs6000/rs6000.c (mask_operand): Use signed vars to avoid + compiler warnings. + (mask64_operand): Likewise. + (includes_rldic_lshift_p): Likewise. + (includes_rldicr_lshift_p): Likewise. + + 2001-09-05 Ziemowit Laski + + * objc/objc-act.c (build_message_expr): If a class method cannot + be found, do not issue a warning if a corresponding instance + method exists in the root class. + + 2001-09-05 Richard Henderson + + * config/alpha/alpha.c (alpha_expand_mov): Initialize temp. + + 2001-09-05 Zack Weinberg + + * function.c (ggc_mark_struct_function): Mark f->outer. + * toplev.c (rest_of_compilation): Clear DECL_SAVED_INSNS here... + * integrate.c (output_inline_function): ... not here. + + Wed Sep 5 17:28:49 CEST 2001 Jan Hubicka + + * profile.c (branch_prob): Call add_noreturn_fake_exit_edges. + + * i386.c (size_cost): New static variable. + (override_function): Use size_cost when -Os is specified. + + * i386.c (ix86_expand_prologue): Set use_fast_prologue_epilogue + properly; Use current_function_calls_eh_return. + (ix86_expand_epilogue): Avoid dummy optimize_size tests; + use leave to avoid dependency chain. + + * local-alloc.c (update_equiv_regs): Use CFG to iterate over INSN stream; + get BB loop_depth instead of computing it from LOOP notes. + + * reg-stack.c (subst_stack_reg_pat): Handle reversal of conditional moves. + + 2001-09-05 John David Anglin + + * som.h (ASM_PREFERRED_EH_DATA_FORMAT): Define. + * pa.h (UNALIGNED_SHORT_ASM_OP, UNALIGNED_INT_ASM_OP, + UNALIGNED_DOUBLE_INT_ASM_OP): Define + + 2001-09-05 Jeffrey A Law (law@cygnus.com) + Jason Merrill (jason@redhat.com) + + * stor-layout.c (layout_type): Complain if an array's size can + not be represented in a size_t. + + * config/h8300/elf.h (ENDFILE_SPEC, STARTFILE_SPEC): Define. + + 2001-09-05 David Billinghurst + + * gcc.c: (process_command) Add parentheses around assignment + used as truth value. + + 2001-09-05 Richard Sandiford + + * config/mips/mips.c (save_restore_insns): Don't mark any register + save slots as unchanging if current_function_calls_eh_return. + + 2001-09-05 Richard Henderson + + * config/alpha/alpha.c (alpha_legitimate_address_p): New. + * config/alpha/alpha-protos.h: Declare it. + * config/alpha/alpha.h (GO_IF_LEGITIMATE_ADDRESS): Move to c file. + (NONSTRICT_REG_OK_FOR_BASE_P): Rename from non-strict macro. + (NONSTRICT_REG_OK_FP_BASE_P): Likewise. + (STRICT_REG_OK_FOR_BASE_P): Rename from strict macro. + (REG_OK_FOR_BASE_P): Select one of the above. + + 2001-09-05 Richard Sandiford + + * config/mips/t-elf (EXTRA_PARTS): Use EXTRA_MULTILIB_PARTS instead. + (crti.o): Prefix name of object file with $(T). + (crtn.o): Likewise. + + 2001-09-05 David S. Miller + + * config/sparc/linux.h: Set CPLUSPLUS_CPP_SPEC. + * config/sparc/linux64.h: Likewise. + + 2001-09-05 Andreas Jaeger + + * doc/invoke.texi (i386 Options): -mwide-multiply is not + available anymore, remove the documentation. + (i386 Options): Fix typo, cleanup index entries. + + * prefix.c (concat): Remove, we can use the version from liberty. + + 2001-09-05 Richard Henderson + + * config/alpha/alpha.c (alpha_expand_mov, alpha_expand_mov_nobwx): + New functions split out of md file expanders. + * config/alpha/alpha-protos.h: Declare them. + * config/alpha/alpha.md (movqi, movhi, movsi, movdi): Use them. + + 2001-09-05 Neil Booth + + * cppmacro.c (funlike_invocation_p): No need to restore context. + + 2001-09-04 Richard Henderson + + * reload.c (push_reload): Export. + * reload.h (push_reload): Declare it. + + * config/alpha/alpha.h (LEGITIMIZE_ADDRESS): Move out o' line. + (LEGITIMIZE_RELOAD_ADDRESS): Likewise. + * config/alpha/alpha.c (alpha_legitimize_address): New. + (alpha_legitimize_reload_address): Likewise. + * config/alpha/alpha-protos.h: Declare them. + + 2001-09-04 Stan Shebs + + * config/darwin.h (ASM_DECLARE_FUNCTION_NAME): Define. + * config/darwin.c (machopic_stub_name): Account for internally + generated lib calls such as memcpy. + + 2001-09-04 Richard Henderson + + * unwind.h (_UA_END_OF_STACK): New flag. + * unwind.inc (_Unwind_ForcedUnwind_Phase2): Set it. + + Tue Sep 4 11:16:35 2001 Jeffrey A Law (law@cygnus.com) + + * h8300/elf.h (LINK_SPEC): Redefine appropriately for the H8. + + 2001-09-04 Richard Sandiford + + * config/mips/mips.c (save_restore_insns): Change base_offset to + fp_offset in second call to mips_emit_frame_related_store. + + 2001-09-04 Hans-Peter Nilsson + + * doc/rtl.texi: Mention that besides as a CODE_LABEL, a label can + sometimes be represented as a NOTE of type + NOTE_INSN_DELETED_LABEL. + (Insns): Document NOTE_INSN_DELETED_LABEL. + + 2001-09-04 Nathan Sidwell + + * c-common.h (tree_dump_index): Add more comments. + * c-dump.c (dump_files): Name flags `tree' rather than `ast'. + (dump_option_value_info): New struct. + (dump_options): New array. + (dump_switch_p): Parse switch options symbolically. + * doc/invoke.texi (-fdump-ast): Rename to ... + (-fdump-tree): ... here. Document that options are symbolic, and + not all are applicable. + + 2001-09-04 David S. Miller + + * config/sparc/sparc.md (define_splits): Kill constraints. + + Cleanup redundant and unused insn attributes. + * config/sparc/sparc.md (define_attr "insn"): Kill address, unary, + binary, and move. Mark ialu as default. + (commented out define_function_unit "alu"): Kill. + (define_attr "use_clobbered"): Kill. + (whole file): Kill address insn type references. Replace + all unary/binary/move references with ialu. + * config/sparc/sparc.c (whole file): Kill TYPE_ADDRESS + references. Replace TYPE_{UNARY,BINARY,MOVE} references with + TYPE_IALU. + + Simplify length insn attribute and make more judicious use + of insn attribute defaulting. + * config/sparc/sparc.md (all insns with length > one): Mark as + insn type multi if real instructions, else use default if + it is a forced splitter. + (all insns with length == one): Use default insn length. + (all insns of type ialu): Use default insn type. + + Fix erroneous insn attribute settings. + (addx): Set insn type to misc. + (mulsidi3_sp64, const_mulsidi3_sp64, umulsidi3_sp64, + const_umulsidi3_sp64): Set insn type to imul. + + Track SFmode vs DFmode insns according to UltraSPARC + scheduling rules. + * config/sparc/sparc.md ("fptype"): New attribute, default + to "single". + (all DFmode single insns): Mark as fptype "double". + + 2001-09-03 Jakub Jelinek + + * loop.c (express_from_1): Fix CONSTANT_P(a) case. + + 2001-09-03 Richard Henderson + + * function.h (struct function): Add arg_pointer_save_area_init. + * function.c (expand_function_end): Init arg_pointer_save_area. + (get_arg_pointer_save_area): Do not init arg_pointer_save_area + when called from a nested function. + + 2001-09-02 Angela Marie Thomas + + * fixinc/Makefile.in: Regenerate fixincl.x only if maintainer-mode + is enabled. + + Sun Sep 2 18:37:54 CEST 2001 Jan Hubicka + + * reload1.c (fixup_abnormal_edges): Allow NOTEs in the sequence. + + 2001-09-01 Geoffrey Keating + + * expr.c (push_block): Make sane use of STACK_GROWS_DOWNWARD. + (emit_push_insn): Use specified padding direction when + STACK_PUSH_CODE is POST_INC. + + * config/stormy16/stormy16.h (DWARF2_UNWIND_INFO): Define to 0. + + 2001-09-01 Kaveh R. Ghazi + + * mips.h (INITIAL_ELIMINATION_OFFSET): Add missing `else abort'. + + 2001-09-01 Neil Booth + + * cppinit.c (cpp_start_read): Free the imacros list as we + traverse it. Don't free the chains before returning. + (_cpp_push_next_buffer): Only try pushing buffers if we've + completed -imacros handling. + + 2001-08-31 Eric Christopher + + * gcc.c (handle_braces): Add explaination for abort. + + 2001-08-30 Roman Zippel + + * expmed.c (store_bit_field): Update to patch from 2001-08-27: + move adjustment of bitpos instead. + + 2001-08-31 Zack Weinberg + + * function.c: Remove all_functions. Make outer_function_chain + static. + (init_function_start): Don't add new function structure to + all_functions. + (find_function_data, push_function_context_to, + pop_function_context_from, put_var_into_stack, + trampoline_address): Update for changed structure element names. + (push_function_context_to): Disentangle. + (free_after_compilation): Also free F. + (expand_dummy_function_end): Don't free cfun here. + (put_var_into_stack): Comment why we can't use find_function_data here. + (fix_lexical_addr, trampoline_address, ): Use find_function_data. + (mark_function_chain): Split into maybe_mark_struct_function and + ggc_mark_struct_function. Export the latter. + (init_function_once): Mark from cfun and outer_function_chain; + not all_functions. + + * function.h (struct function): Kill next_global. Rename next + to outer. All users updated to match. + (all_functions, outer_function_chain): Don't declare. + + * ggc-common.c (ggc_mark_trees): Mark DECL_SAVED_INSNS. + * integrate.c (output_inline_function): Clear DECL_SAVED_INSNS, + don't touch f->inlinable, after calling rest_of_compilation. + + * tree.h: Forward-declare struct function. Prototype + ggc_mark_struct_function. + + 2001-08-31 Kazu Hirata + + * config/h8300/h8300.md (*andorhi3): Fix typos. + + 2001-08-31 Kaveh R. Ghazi + + * calls.c (emit_library_call_value): Don't use a fixed + argument after VA_CLOSE, i.e. out of scope in traditional C. + + * emit-rtl.c (gen_rtvec): Likewise. + + 2001-08-31 Kaveh R. Ghazi + + * Makefile.in (c-pragma.o): Depend on output.h. + (reorg.o): Depend on except.h. + + * c-pragma.c: Include output.h. + + * reorg.c: Include except.h. + + * unwind-dw2.c: Call __builtin_alloca, not alloca. + + 2001-08-31 Richard Henderson + + * sched-deps.c (add_dependence): Don't elide dependency if the + conditional used by insn is modified in elem. + + 2001-08-31 Nick Clifton + + * config/v850/v850.h (OUTPUT_ADDR_CONST_EXTRA): Define. + + 2001-08-31 Diego Novillo + + * c-decl.c (c_decode_option): Skip '-f' prefix before calling + dump_switch_p. + + 2001-08-31 Geoffrey Keating + + * config/stormy16/stormy16.c (stormy16_asm_out_destructor): New + function. + (stormy16_asm_out_constructor): New function. + (TARGET_ASM_CONSTRUCTOR): Define. + (TARGET_ASM_DESTRUCTOR): Define. + + 2001-08-31 Andreas Jaeger + + * gcse.c (add_label_notes): REG_LABEL is an INSN_LIST. + * loop.c (add_label_notes): Likewise. + * reload.c (find_reloads): Likewise. + * config/sh/sh.c (machine_dependent_reorg): Likewise. + + 2001-08-31 Jason Merrill + + * unwind-pe.h (read_uleb128, read_sleb128): Move actual reading + code here. Take _Unwind_{W,Sw}ord*. + (read_encoded_value_with_base): Use them. + * unwind-dw2.c (_Unwind_FrameState): Make cfa_offset and cfa_reg + words. + (extract_cie_info): Simplify read_?leb128 handling. + (execute_stack_op, execute_cfa_program): Likewise. + * unwind-dw2-fde.c (get_cie_encoding): Likewise. + + 2001-08-31 Geoffrey Keating + + * config/stormy16/stormy16.c (stormy16_expand_epilogue): Use + the frame pointer to pop the stack if convenient. + + * config/stormy16/stormy16.c (stormy16_initialize_trampoline): + Don't use post-increment before combine. + * config/stormy16/stormy16.h (STATIC_CHAIN_REGNUM): Don't use + a call-saved register. + + 2001-08-31 Andreas Jaeger + + * jump.c (mark_jump_label): Revert patch from 2001-08-28, the + code was correct. + + 2001-08-30 Geoffrey Keating + + * config/stormy16/stormy16.md (udivmodhi4): Express using UDIV/UMOD, + not DIV/MOD, of course. + + 2001-08-30 Vladimir Makarov + + * rtl.def: Undo my patch commited 2001-08-27. + + * genattrtab.c: Ditto. + + * rtl.h: Ditto. + + * sched-int.h: Ditto. + + * target-def.h: Ditto. + + * target.h: Ditto. + + * haifa-sched.c: Ditto. + + * sched-rgn.c: Ditto. + + * sched-vis.c: Ditto. + + * Makefile.in: Ditto. + + * doc/md.texi: Ditto. + + * doc/tm.texi: Ditto. + + * doc/contrib.texi: Ditto. + + * doc/gcc.texi: Ditto. + + * genattrtab.h: Remove it. + + * genautomata.c: Remove it. + + * genattr.c: Undo my patch and Richard Henderson's patch commited + 2001-08-27. + + Thu Aug 30 19:22:15 2001 J"orn Rennecke + + * config.gcc (h8300-*-elf*): New case. + * h8300.h (CPP_SPEC): Add subtarget_cpp_spec. + (SUBTARGET_CPP_SPEC): Define. + (EXTRA_SPECS): Define. + (SUBTARGET_EXTRA_SPECS): Define. + * config/h8300/crti.asm, config/h8300/crtn.asm: New files. + * config/h8300/elf.h, config/h8300/t-elf: Likewise. + + Thu Aug 30 18:50:37 2001 J"orn Rennecke + + * t-h8300 (LIB1ASMFUNCS): Add _fixunssfdi and _fixunssfsi_asm. + (LIB2FUNCS_EXTRA): Define. + config/h8300/lib1funcs.asm: New part: L_fixunssfsi_asm . + config/h8300/fixunssfsi.c: New file. + + 2001-08-30 Kazu Hirata + + * config/h8300/h8300.md (zero_extendqihi2): Changes to + define_expand to accommodate target-specific attributes. + (anonymous zero_extendqihi2 patterns): New. + + Thu Aug 30 18:10:56 2001 J"orn Rennecke + + * h8300.md (*andorhi3): New pattern. + + Thu Aug 30 16:00:31 2001 J"orn Rennecke + + * h8300.c (dosize): Fix test for "sub". + + Thu Aug 30 10:21:43 2001 J"orn Rennecke + + * c-typeck.c (pointer_diff): Try to eliminate common term before + doing conversions. + + 2001-08-30 Nick Clifton + + * config/arm/arm.c (arm_compute_initial_elimination_offset): + Account for the saves of the FP registers. + + * config/arm/unknown-elf.h (TEXT_SECTION): Delete. + (TEXT_SECTION_ASM_OP): Define. + (INIT_SECTION_ASM_OP): Define. + (FINI_SECTION_ASM_OP): Define. + (SUBTARGET_EXTRA_SECTIONS): Remove trailing comma. + (RDATA_SECTION_FUNCITON): Provide prototype. + + 2001-08-29 Geoffrey Keating + + * reload1.c (move2add_note_store): Correct typo checking for + argument pushes. + + 2001-08-29 Andrew MacLeod + + * gcse.c (compute_hash_table): The SRC part of an insn with a RETVAL + note should not be considered outside the libcall block. + + 2001-08-29 Kaveh R. Ghazi + + * genattrtab.c (attr_printf): Use VA_OPEN/VA_FIXEDARG/VA_CLOSE. + + 2001-08-29 Kazu Hirata + + * config/h8300/h8300.md (movsi_h8300hs): Make it 64-bit safe. + + 2001-08-29 Kazu Hirata + + * config/h8300/h8300-protos.h: Add a prototype for + emit_logical_op. + * config/h8300/h8300.c (emit_logical_op): New. + * config/h8300/h8300.md (andhi3): Use emit_logical_op. + (andsi3): Likewise. + (iorhi3): Likewise. + (iorsi3): Likewise. + (xorhi3): Likewise. + (xorsi3): Likewise. + + 2001-08-29 John David Anglin + + * pa.c (move_operand): Cast GET_MODE_SIZE results to HOST_WIDE_INT for + comparison with rtx INTVAL. + (pa_output_function_prologue): Don't mix signed and unsigned in `?' + expression. + * pa.h (FUNCTION_ARG_SIZE): Likewise. + + 2001-08-29 Kazu Hirata + + * config/h8300/lib1funcs.asm: Update the copyright. Fix + comment typos. + + 2001-08-29 Kazu Hirata + + * config/h8300/h8300.md (anonymous movhi pattern): Don't move + (reg n) to (mem (pre_dec (reg n)) + (anonymous movsi pattern): Likewise. + + 2001-08-29 Kazu Hirata + + * config/h8300/h8300.h (RETURN_ADDR_RTX): New. + + 2001-08-29 Kazu Hirata + + * config/h8300/h8300.md (movsi_h8300hs): Optimize loading of + several special constants. + + 2001-08-29 Kazu Hirata + + * config/h8300/lib1funcs.asm: Fix comment typos. + + 2001-08-29 Kaveh R. Ghazi + + * iris6.h (ASM_DECLARE_OBJECT_NAME, ASM_FINISH_DECLARE_OBJECT): + Fix format specifier warnings. + + * irix6-libc-compat.c (inet_ntoa, inet_lnaof, inet_netof, + inet_makeaddr, semctl): Prototype. + + * mips.c (compute_frame_size): Fix signed/unsigned warnings. + (save_restore_insns): Use base_offset, not gp_offset. + + * mips.h (GP_REG_OR_PSEUDO_STRICT_P): Fix signed/unsigned warning. + (ASM_OUTPUT_BYTE): Fix format specifier warning. + + 2001-08-29 Richard Henderson + + * bb-reorder.c (function_tail_eff_head): New. + (record_effective_endpoints): Set it. + (fixup_reorder_chain): Use it. + + 2001-08-28 Kaveh R. Ghazi + + * dwarf2asm.c (dw2_asm_output_nstring): Fix typo in previous change. + + 2001-08-28 Dale Johannesen + + * config/darwin.c (machopic_function_base_name): Add const + qualifier to a string. + (darwin_encode_section_info): Ditto. + + 2001-08-28 Kaveh R. Ghazi + + * tree.c (default_valid_attribute_p): Don't use PARAMS on a + function definition. + + 2001-08-28 Daniel Berlin + + * df.h (struct df): Add rts_order variable. + + * df.c (df_visit_next_rts): New function. + (df_visit_next): Renamed to df_visit_next_rc + (df_analyse_1): Allocate/compute/free rts_order as well. + (df_rd_global_compute): Use df_visit_next_rc instead of + df_visit_next. + (df_ru_global_compute): Use df_visit_next_rts instead of + df_visit_next. + + * flow.c (flow_reverse_top_sort_order_compute): New function. + + * basic-block.h: Add prototype. + + 2001-08-28 Daniel Berlin + + * ssa-ccp.c (ssa_ccp_df_delete_unreachable_insns): For unreachable + blocks, the BB_REACHABLE is now set, rather than aux being + non-NULL. Update the test to reflect this. + + 2001-08-28 Eric Christopher + + * config/mips/crtn.asm: Add comment explaining 16 byte alignment. + config/mips/crti.asm: Ditto. + + 2001-08-28 Eric Christopher + Richard Henderson + + * c-pragma.h (add_weak): Move prototype from here... + * output.h (add_weak): ... to here. + * varasm.c (add_weak): Fix typo. + * config/mips/crti.asm: New file. + * config/mips/crtn.asm: Ditto. + * config/mips/elf.h (SBSS_SECTION_ASM_OP) Add #undef. + (CTOR_LISTS_DEFINED_EXTERNALLY): Remove. + (INVOKE__main): Ditto. + (INIT_SECTION_ASM_OP): New. + (FINI_SECTION_ASM_OP): Ditto. + (STARTFILE_SPEC): Add crti. + (ENDFILE_SPEC): Add crtn. + * config/mips/elf64.h: Same. + * config/mips/rtems64.h (INVOKE__main, NAME__MAIN, SYMBOL__MAIN): + Remove. + * config/mips/vxworks.h: Ditto. + * config/mips/t-elf: Support crti and crtn. + + 2001-08-28 Alexandre Oliva + + * jump.c (mark_jump_label): Fix typo: REG_LABEL is EXPR_LIST, not + INSN_LIST. + + 2001-08-28 Richard Henderson + + * config/ia64/ia64.md (andcmbi3, iorcmbi3): Fix typos. + (one_cmplbi2 splitter): Remove redundant test. + + 2001-08-28 Dale Johannesen + + * config/rs6000/darwin.h (DEFAULT_SIGNED_CHAR): Define. + + 2001-08-28 Danny Smith + + * config/i386/cygwin.h (BIGGEST_FIELD_ALIGNMENT): Set to 64. + + 2001-08-28 Stan Shebs + + * config/darwin.h (ASM_OUTPUT_LABELREF): Handle '*' names. + (UNALIGNED_SHORT_ASM_OP): Define. + (UNALIGNED_INT_ASM_OP): Define. + + 2001-08-28 Will Cohen + + * config/rs6000/rs6000.md (store_multiple): Correct RTL + generation for first set. + + 2001-08-27 Roman Zippel + + * flow.c (redirect_edge_succ_nodup): Return new edge. + (try_simplify_condjump): Use new edge. + * basic-block.h (redirect_edge_succ_nodup): Update prototype. + + * cse.c (cse_basic_block): Skip note instructions. + + 2001-08-27 Richard Henderson + + * combine.c (combine_simplify_rtx): Don't reverse condition + if there is no reverse for the condition. + (simplify_comparison): Don't simplify subregs from INT to FP. + + * config/m68k/m68k.md (sordered, sordered_1, sunordered, sunordered_1, + suneq, suneq_1, sunge, sunge_1, sungt, sungt_1, sunle, sunle_1, + sunlt, sunlt_1, sltgt, sltgt_1, fsogt_1, fsoge_1, fsolt_1, fsole_1, + bordered, bunordered, buneq, bunge, bungt, bunle, bunlt, bltgt, + bordered_rev, bunordered_rev, buneq_rev, bunge_rev, bungt_rev, + bunle_rev, bunlt_rev, bltgt_rev): New patterns. + + 2001-08-27 Roman Zippel + + * config/m68k/m68k.md (subreghi1ashrdi_const32, bsetmemqi, + bsetmemqi+1, strict_low_part peephole): Fix SUBREG_BYTE offset. + (pushqi1): New. + (adddi_dilshr32, adddi_dishl32): Only data register can be + source for mem destination. + + * expmed.c (store_bit_field): Ignore adjustment to bitpos + and use bitnum to decide about register move. + + 2001-08-27 Richard Henderson + + * genattr.c (main): Emit state_t even when not doing scheduling. + + 2001-08-27 Roman Zippel + Richard Henderson + + * gcse.c (reg_first_set, reg_last_set): Replace with ... + (reg_avail_info, current_bb): ... these. + (oprs_unchanged_p, record_last_reg_set_info): Use them. + (compute_hash_table): Likewise. + + 2001-08-27 Roman Zippel + + * flow.c (verify_flow_info): Use checksums to verify edges. + + 2001-08-27 Richard Henderson + + * genautomata.c (expand_automata): Always create a description. + + 2001-08-27 Geoffrey Keating + + * optabs.c (expand_binop): Correctly handle the carry in multiword + add/subtract operations. + + 2001-08-27 Fred Fish + + * ginclude/stddef.h: Fix typo, __SIZE__TYPE__ should be + __SIZE_TYPE__. + + 2001-08-27 Geoffrey Keating + + * reload.c (find_reloads_toplev): Back out this change: + + Wed Jul 26 19:44:05 2000 Hans-Peter Nilsson + + * reload.c (find_reloads_toplev): Reload a paradoxical subreg of a + mem if the address is a mode_dependent_address_p. + + 2001-08-27 Vladimir Makarov + + * rtl.def (DEFINE_CPU_UNIT, DEFINE_QUERY_CPU_UNIT, EXCLUSION_SET, + PRESENCE_SET, ABSENCE_SET, DEFINE_BYPASS, DEFINE_AUTOMATON, + AUTOMATA_OPTION, DEFINE_RESERVATION, DEFINE_INSN_RESERVATION): New + RTL constructions. + + * genattr.c (main): New variable num_insn_reservations. Increase + it if there is DEFINE_INSN_RESERVATION. Output automaton based + pipeline hazard recognizer interface. + + * genattrtab.h: New file. + + * genattrtab.c: Include genattrtab.h. + (attr_printf, check_attr_test, make_internal_attr, + make_numeric_value): Move protypes into genattrtab.h. Define them + as external. + (num_dfa_decls): New global variable. + (main): Process DEFINE_CPU_UNIT, DEFINE_QUERY_CPU_UNIT, + DEFINE_BYPASS, EXCLUSION_SET, PRESENCE_SET, ABSENCE_SET, + DEFINE_AUTOMATON, AUTOMATA_OPTION, DEFINE_RESERVATION, + DEFINE_INSN_RESERVATION. Call expand_automata and write_automata. + + * genautomata.c: New file. + + * rtl.h (LINK_COST_ZERO, LINK_COST_FREE): Remove them. + + * sched-int.h: (curr_state): Add the external definition for + automaton pipeline interface. + (haifa_insn_data): Add comments for members blockage and units. + + * target-def.h (TARGET_SCHED_USE_DFA_PIPELINE_INTERFACE, + TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN, + TARGET_SCHED_DFA_PRE_CYCLE_INSN, + TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN, + TARGET_SCHED_DFA_POST_CYCLE_INSN, + TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD, + TARGET_SCHED_INIT_DFA_BUBBLES, TARGET_SCHED_DFA_BUBBLE): New + macros. + (TARGET_SCHED): Use the new macros. + + * target.h (use_dfa_pipeline_interface, init_dfa_pre_cycle_insn, + dfa_pre_cycle_insn, init_dfa_post_cycle_insn, dfa_post_cycle_insn, + first_cycle_multipass_dfa_lookahead, init_dfa_bubbles, + dfa_bubble): New members in gcc_target.sched. + + * haifa-sched.c (insert_schedule_bubbles_p): New variable. + (MAX_INSN_QUEUE_INDEX): New macro for automaton interface. + (insn_queue): Redefine it as pointer to array. + (NEXT_Q, NEXT_Q_AFTER): Use MAX_INSN_QUEUE_INDEX instead of + INSN_QUEUE_SIZE. + (max_insn_queue_index_macro_value): New variable. + (curr_state, dfa_state_size, ready_try): New varaibles for + automaton interface. + (ready_element, ready_remove, max_issue): New function prototypes + for automaton interface. + (choose_ready): New function prototype. + (insn_unit, blockage_range): Add comments. + (unit_last_insn, unit_tick, unit_n_insns): Define them for case + FUNCTION_UNITS_SIZE == 0. + (insn_issue_delay, actual_hazard_this_instance, schedule_unit, + actual_hazard, potential_hazard): Add comments. + (insn_cost): Use cost -1 as undefined value. Remove + LINK_COST_ZERO and LINK_COST_FREE. Add new code for automaton + pipeline interface. + (ready_element, ready_remove): New functions for automaton + interface. + (schedule_insn): Add new code for automaton pipeline interface. + (queue_to_ready): Add new code for automaton pipeline interface. + Use MAX_INSN_QUEUE_INDEX instead of INSN_QUEUE_SIZE. + (debug_ready_list): Print newline when the queue is empty. + (max_issue): New function for automaton pipeline interface. + (choose_ready): New function. + (schedule_block): Add new code for automaton pipeline interface. + Print ready list before scheduling each insn. + (sched_init): Add new code for automaton pipeline interface. + Initiate insn cost by -1. + (sched_finish): Free the current automaton state and finalize + automaton pipeline interface. + + * sched-rgn.c: Include target.h. + (init_ready_list, new_ready, debug_dependencies): Add new code for + automaton pipeline interface. + + * sched-vis.c: Include target.h. + (get_visual_tbl_length): Add code for automaton interface. + (target_units, print_block_visualization): Add comments. + + * Makefile.in (GETRUNTIME, HASHTAB, HOST_GETRUNTIME, HOST_HASHTAB, + USE_HOST_GETRUNTIME, USE_HOST_HASHTAB, HOST_VARRAY): New variables. + (sched-rgn.o, sched-vis.o): Add new dependency file target.h. + (getruntime.o, genautomata.o): New entries. + (genattrtab.o): Add new dependency file genattrtab.h. + (genattrtab): Add new dependencies. Link it with `libm.a'. + (getruntime.o, hashtab.o): New entries for canadian cross. + + * doc/md.texi: Description of automaton based model. + + * doc/tm.texi (TARGET_SCHED_ISSUE_RATE, TARGET_SCHED_ADJUST_COST): + Add comments. + (TARGET_SCHED_USE_DFA_PIPELINE_INTERFACE, + TARGET_SCHED_DFA_PRE_CYCLE_INSN, + TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN, + TARGET_SCHED_DFA_POST_CYCLE_INSN, + TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN, + TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD, + TARGET_SCHED_INIT_DFA_BUBBLES, TARGET_SCHED_DFA_BUBBLE): The new + hook descriptions. + (TRADITIONAL_PIPELINE_INTERFACE, DFA_PIPELINE_INTERFACE, + MAX_DFA_ISSUE_RATE): New macro descriptions. + + * doc/contrib.texi: Add dfa based scheduler contribution. + + * doc/gcc.texi: Add more information about genattrtab. + + 2001-08-27 Diego Novillo + + * flow.c (flow_loop_dump): Do not display insn UIDs if this is not + an RTL basic block. + + 2001-08-27 Richard Henderson + + * function.c (expand_function_end): Don't init arg_pointer_save_area. + (get_arg_pointer_save_area): New. Create an init it here. + (fix_lexical_addr): Use it. + * function.h: Declare it. + * builtins.c (expand_builtin_setjmp_receiver): Use it. + * stmt.c (expand_nl_goto_receiver): Use it. + + 2001-08-27 Richard Henderson + + * final.c (final_scan_insn): Don't enter APP_ON mode for + empty asm strings. + + * dwarf2asm.c (dw2_asm_output_encoded_addr_rtx): Use proper + alignment for assemble_integer for DW_EH_PE_aligned. + * except.c (output_function_exception_table): Likewise. + + 2001-08-26 Andreas Jaeger + + * c-tree.h: Add prototyp for c_sizeof_nowarn. + + 2001-08-25 Dan Nicolaescu + + * ssa-ccp.c (ssa_const_prop): Free ssa_edges. + + 2001-08-27 Alan Modra + + * config/rs6000/rs6000.c (mask_operand): Rewrite without + bit-shifting loop. + (mask64_operand): Likewise. + (rldic_operand): Delete. + (includes_lshift64_p): Delete. + (includes_rldic_lshift_p): New function. + (includes_rldicr_lshift_p): New function. + (print_operand): Don't call rldic_operand in case 'W'. + * config/rs6000/rs6000-protos.h (rldic_operand): Remove. + (includes_lshift64_p): Remove. + (includes_rldic_lshift_p): Declare. + (includes_rldicr_lshift_p): Declare. + * config/rs6000/rs6000.h (PREDICATE_CODES): Remove rldic_operand. + * config/rs6000/rs6000.md : + Replace match_operand rldic_operand predicate with + const_int_operand. Replace includes_lshift64_p condition with + includes_rldic_lshift_p. + : New. + + 2001-08-27 Andreas Jaeger + + * emit-rtl.c: Use VA_OPEN/VA_CLOSE/VA_FIXEDARG throughout. + * errors.c: Likewise. + * final.c: Likewise. + * dwarf2asm.c: Likewise. + * doprint.c (checkit): Likewise. + * diagnostic.c: Likewise. + * collect2.c: Likewise. + * calls.c: Likewise. + * c-semantics.c (build_stmt): Likewise. + * c-format.c (status_warning): Likewise. + * c-errors.c (pedwarn_c99): Likewise. + * builtins.c (validate_arglist): Likewise. + * config/pj/pj.c (pj_printf): Likewise. + * fix-header.c: Likewise. + * gcc.c: Likewise. + * gcov.c (fnotice): Likewise. + * gensupport.c (message_with_line): Likewise. + * mips-tfile.c: Likewise. + * protoize.c (notice): Likewise. + * read-rtl.c (fatal_with_file_and_line): Likewise. + * rtl-error.c: Likewise. + * tradcpp.c: Likewise. + * tree.c: Likewise. + * cp/tree.c (build_min_nt): Likewise. + (build_min): Likewise. + * cp/lex.c: Likewise. + * cp/errfn.c: Likewise. + * cp/rtti.c (create_pseudo_type_info): Likewise. + + Sun Aug 26 20:25:44 2001 Denis Chertykov + + * df.c (df_uses_record): Return after recording all uses + in ASM_OPERANDS. + + 2001-08-26 Daniel Berlin + + * df.c (df_insn_modify): Realloc the INSN table here, if + necessary, here, too. + + 2001-08-26 Aldy Hernandez + + * config/mips/mips.c (mips_function_value): Handle complex return + values. + + 2001-08-25 Hans-Peter Nilsson + + * reload1.c (reload): Make all entries in reg_equiv_memory_loc + unshared. + * reload.c (make_memloc): Copy result if it is still + reg_equiv_memory_loc[regno] on return. + (subst_reloads) [ENABLE_CHECKING]: Check that none of + reg_equiv_constant, reg_equiv_memory_loc, reg_equiv_address and + reg_equiv_mem are modified by the substitutions. + + Sat Aug 25 23:07:35 CEST 2001 Jan Hubicka + + * predict.c (expensive_function_p): New. + * rtl.h (expensive_function_p): Declare. + * i386.c (FAST_PROLOGUE_INSN_COUNT): New constant. + (use_fast_prologue_epilogue): New static variable. + (expand_prologue): Set it; emit short prologues if unset. + (expand_epilogue): Likewise. + + 2001-08-22 Geoffrey Keating + + * config.gcc: Add stormy16-*-elf case. + * config/stormy16/stormy-abi: New file. + * config/stormy16/stormy16-lib2.c: New file. + * config/stormy16/stormy16-protos.h: New file. + * config/stormy16/stormy16.c: New file. + * config/stormy16/stormy16.h: New file. + * config/stormy16/stormy16.md: New file. + * config/stormy16/t-stormy16: New file. + + Sat Aug 25 15:46:51 CEST 2001 Jan Hubicka + + * i386.h (no-accumulate-outgoing-args): Use proper mask. + + 2001-08-24 David Edelsohn + + * config/rs6000/rs6000.c (rs6000_initialize_trampoline): Function + descriptor members are pointer size, not constant 4. + * config/rs6000/rs6000.md (define_splits): Remove more unused + constraints. + + 2001-08-24 Kaveh R. Ghazi + + * sparc.h (ASM_OUTPUT_BYTE): Fix format specifier warning. + + 2001-08-24 Andreas Jaeger , rkl@connect.org.uk + + * cp/rtti.c (VPARAMS): Fix parameter. + + 2001-08-24 Zack Weinberg + + * expmed.c: Default-#define HAVE_insv, HAVE_extv, and HAVE_extzv + to zero. + (mode_for_extraction): No need for #ifdefs. Add default-case abort + to switch. + (store_bit_field): Eliminate insv_bitsize variable. Put HAVE_insv + in if controlling use of insv. + (extract_bit_field): Likewise, for extv and extzv. + + Fri Aug 24 17:27:46 CEST 2001 Jan Hubicka + + * i386.md (movcc peep2): Fix load of 0. + + 2001-08-24 Kaveh R. Ghazi + + * fold-const.c (tree_expr_nonnegative_p): Handle *_DIV_EXPR, + *_MOD_EXPR, SAVE_EXPR and NON_LVALUE_EXPR. + + 2001-08-23 Jason Merrill + + * c-pragma.h: Move weak_syms and weak_decls... + * varasm.c: ...here. Now static. + (declare_weak, weak_finish, remove_from_pending_weak_list): Don't + depend on HANDLE_PRAGMA_WEAK. + + * c-common.c (c_alignof, c_alignof_expr): Move here... + * c-typeck.c: ...from here. + * c-tree.h, c-common.h: Adjust. + + 2001-08-23 Bernd Schmidt + + * config/ia64/ia64.c (rws_update): If !pred, set write_count + instead of incrementing it. + + * config/ia64/ia64.c (ia64_sched_reorder): When there's more than one + asm ready, don't try to move them all into the same array element. + + Thu Aug 23 17:21:43 CEST 2001 Jan Hubicka + + * function.c (thread_prologue_and_epilogue_insns): Avoid + fallthru flag on edge to exit. + + * i386.md (trunc?fsi splitter): Conditionionize for non-sse. + + * flow.c (delete_noop_moves, propagate_block_delete_insn): Purge + dead edges. + + 2001-08-23 Lars Brinkhoff + + * config/mcore/mcore.h (MACHINE_DEPENDENT_SIMPLIFY): Remove. + * config/mcore/mcore.c (mcore_dependent_simplify_rtx): Likewise. + * config/mcore/mcore-protos.h (mcore_dependent_simplify_rtx): + Remove prototype. + + 2001-08-23 Lars Brinkhoff + + * genconstants.c, genpreds.c, libfuncs.h, optabs.h, rtl-error.h: + replace "GNU CC" with "GCC". + + 2001-08-23 Richard Henderson + + * config/ia64/ia64.c (ia64_register_move_cost): Add mode arguemnt. + Reorganize. Handle ADDL like GR, add GR_AND_BR. Handle TFmode. + (ia64_secondary_reload_class): Need GR between AR/BR and anything. + Need GR between FR and not GR_AND_FR. + * config/ia64/ia64-protos.h (ia64_register_move_cost): Update. + * config/ia64/ia64.h (reg_class): Add GR_AND_BR_REGS, move + AR regs before GR regs. + (REG_CLASS_NAMES, REG_CLASS_CONTENTS): Update. + (PREFERRED_RELOAD_CLASS): Tweak for reordered classes. + (REGISTER_MOVE_COST): Update. + (MEMORY_MOVE_COST): Add GR_AND_FR_REGS. + + 2001-08-23 Richard Henderson + + * regclass.c (init_reg_sets_1): Don't assume cost 2 within + a register class. + + 2001-08-22 Geoffrey Keating + + * reload1.c (emit_reload_insns): Don't look for notes + on a NULL store_insn. + + 2001-08-22 Kaveh R. Ghazi + + * sparc.c (uns_small_int): Don't reference a constant >32-bit. + (addrs_ok_for_ldd_peep): Fix signed/unsigned warning. + (sparc_flat_function_prologue, sparc_flat_function_epilogue): Fix + format specifier warnings. + (sparc_sched_reorder): Mark parameter with ATTRIBUTE_UNUSED. + + 2001-08-22 David Billinghurst + + * config/i386/i386-protos.h: Correct declaration of + i386_pe_asm_named_section. + + 2001-08-22 John David Anglin + + * pa32-regs.h (CONDITIONAL_REGISTER_USAGE): Add declaration for + variable i. + * pa64-regs.h (CONDITIONAL_REGISTER_USAGE): Likewise. + + 2001-08-22 Neil Booth + + * cpperror.c (print_location): Don't show _Pragma. + * cppfiles.c (_cpp_pop_file_buffer): Handle -include file pushing + and file change callback generation here. + (stack_include_file): Update use of cpp_push_buffer. + * cpphash.h (_cpp_pop_file_buffer): Update prototype. + (struct cpp_buffer): Remove type, pfile members. + * cppinit.c (cpp_handle_option): Use free_chain. + * cpplex.c (_cpp_lex_token): Don't do -include file pushing here. + (skip_escaped_newlines, get_effective_char, lex_percent): Take + a cpp_reader rather than a cpp_buffer. + (skip_escaped_newlines, get_effective_char, skip_block_comment, + skip_line_comment, parse_string, lex_percent, lex_dot, + _cpp_lex_token): Update accordingly. + * cpplib.c (_cpp_pop_buffer): Don't do file change callback + generation here. + (cpp_push_buffer): Update prototype. + (run_directive): Update use of cpp_push_buffer. + (_cpp_do__Pragma, cpp_define, cpp_define_builtin, cpp_undef, + handle_assertion): Update use of run_directive. + * cpplib.h (enum cpp_buffer_type): Remove. + (cpp_push_buffer): Update prototype. + * fix-header.c (read_scan_file): Update. + + 2001-08-22 Matt Kraai + + * gcc.c (struct prefix_list): Change prefix to const char *. + + 2001-08-22 Matt Kraai + + * final.c (final_scan_insn): Call ADDR_VEC_ALIGN on next insn. + + 2001-08-22 Jason Merrill + + * explow.c (set_mem_attributes): Avoid returning a bogus alias set + from a new MEM. + + * jump.c (squeeze_notes): Take parms by reference. Handle END being + a squeezable note. + * rtl.h: Adjust. + * ifcvt.c (dead_or_predicable): Adjust. + * loop.c (find_and_verify_loops): Adjust. + * stmt.c (expand_end_case): Adjust. + * flow.c (merge_blocks_move_successor_nojumps): Adjust. Modify the + head and end insn pointers in the basic block, not just local copies. + (merge_blocks_move_predecessor_nojumps): Likewise. + + 2001-08-22 Lars Brinkhoff + + * Makefile.in, alias.c, basic-block.h, bb-reorder.c, bitmap.c, + bitmap.h, builtin-types.def, builtins.c, builtins.def, + c-aux-info.c, c-common.c, c-common.def, c-common.h, + c-convert.c, c-decl.c, c-dump.c, c-dump.h, c-errors.c, + c-format.c, c-lang.c, c-lex.c, c-lex.h, c-parse.in, + c-pragma.c, c-pragma.h, c-semantics.c, c-tree.h, c-typeck.c, + caller-save.c, calls.c, collect2.c, collect2.h, combine.c, + conditions.h, config.gcc, configure.frag, configure.in, + conflict.c, convert.c, convert.h, cppspec.c, crtstuff.c, + cse.c, cselib.c, cselib.h, dbxout.c, dbxout.h, defaults.h, + dependence.c, df.c, df.h, diagnostic.c, diagnostic.h, + doloop.c, dominance.c, dwarf.h, dwarf2.h, dwarf2asm.c, + dwarf2asm.h, dwarf2out.c, dwarf2out.h, dwarfout.c, + emit-rtl.c, errors.c, errors.h, except.c, except.h, + exgettext, explow.c, expmed.c, expr.c, expr.h, final.c, + fixproto, flags.h, flow.c, fold-const.c, fp-test.c, + function.c, function.h, gbl-ctors.h, gcc.c, gcc.h, gcc.hlp, + gccspec.c, gcov-io.h, gcse.c, genattr.c, genattrtab.c, + gencheck.c, gencodes.c, genconfig.c, genemit.c, + genextract.c, genflags.c, gengenrtl.c, genmultilib, + genopinit.c, genoutput.c, genpeep.c, genrecog.c, + gensupport.c, gensupport.h, ggc-callbacks.c, ggc-common.c, + ggc-none.c, ggc-page.c, ggc-simple.c, ggc.h, global.c, + graph.c, graph.h, gthr-aix.h, gthr-dce.h, gthr-posix.h, + gthr-rtems.h, gthr-single.h, gthr-solaris.h, gthr-vxworks.h, + gthr-win32.h, gthr.h, haifa-sched.c, halfpic.c, halfpic.h, + hard-reg-set.h, hwint.h, ifcvt.c, input.h, insn-addr.h, + integrate.c, integrate.h, jump.c, lcm.c, libgcc2.c, + libgcc2.h, lists.c, local-alloc.c, loop.c, loop.h, + machmode.def, machmode.h, main.c, mbchar.c, mbchar.h, + mips-tdump.c, mips-tfile.c, mklibgcc.in, mkmap-flat.awk, + mkmap-symver.awk, optabs.c, output.h, params.c, params.def, + params.h, predict.c, predict.def, predict.h, prefix.c, + prefix.h, print-rtl.c, print-tree.c, profile.c, protoize.c, + read-rtl.c, real.c, real.h, recog.c, recog.h, reg-stack.c, + regclass.c, regmove.c, regrename.c, regs.h, reload.c, + reload.h, reload1.c, reorg.c, resource.c, resource.h, rtl.c, + rtl.def, rtl.h, rtlanal.c, sbitmap.c, sbitmap.h, + sched-deps.c, sched-ebb.c, sched-int.h, sched-rgn.c, + sched-vis.c, sdbout.c, sdbout.h, sibcall.c, simplify-rtx.c, + ssa-ccp.c, ssa-dce.c, ssa.c, ssa.h, stmt.c, stor-layout.c, + stringpool.c, system.h, timevar.c, timevar.def, timevar.h, + tlink.c, toplev.c, toplev.h, tree.c, tree.def, tree.h, + tsystem.h, unroll.c, unwind-dw2-fde.c, unwind-dw2-fde.h, + unwind-dw2.c, unwind-pe.h, unwind-sjlj.c, unwind.h, + unwind.inc, varasm.c, varray.c, varray.h, xcoffout.c, + xcoffout.h: replace "GNU CC" with "GCC". + + 2001-08-21 Richard Henderson + + * final.c (LABEL_ALIGN_AFTER_BARRIER): Default to no alignment. + (final_scan_insn): Consider jump tables data even if we have no + independent text section if !JUMP_TABLES_IN_TEXT_SECTION. Use + ADDR_VEC_ALIGN. + * config/ia64/ia64.h (JUMP_TABLES_IN_TEXT_SECTION): Remove. + (ASM_OUTPUT_CASE_END): Remove. + (ASM_OUTPUT_ADDR_DIFF_ELT): Emit pc-relative references. + * config/ia64/ia64.md (tablejump): Decode pc-relative references. + * config/ia64/sysv4.h (ASM_OUTPUT_BEFORE_CASE_LABEL): Remove. + + 2001-08-21 Richard Henderson + + * config/ia64/ia64.c (emit_all_insn_group_barriers): Flush state + at barrier insns. Emit stop bits before barriers. + + * flow.c (flow_find_cross_jump): Don't consider unconditional + return insns for commoning. + + * final.c (compute_alignments): Fix typo. + + * expmed.c (CODE_FOR_insv, gen_insv): Provide defaults. + (CODE_FOR_extv, gen_extv, CODE_FOR_extzv, gen_extzv): Likewise. + (store_bit_field): Use mode_for_extraction more places. + (extract_bit_field): Likewise. + + 2001-08-21 Zack Weinberg + + * caller-save.c: Don't include insn-codes.h. + (reg_save_code, reg_restore_code): Make arrays of int. + All uses updated to match. + (insert_save, insert_restore): No need to initialize "code" + variable upon declaration. + * Makefile.in: update dependencies; fix typo in clean rule. + + 2001-08-21 Richard Henderson + + * ifcvt.c (find_if_block): Allow join_bb as EXIT. + (merge_if_block): Handle fallout from same. + + 2001-08-21 Kaveh R. Ghazi + + * builtins.c (type_to_class): Fix typo in last change. + + 2001-08-21 Richard Henderson + + * config/ia64/sysv4.h (ASM_OUTPUT_LABELREF): Don't emit '#' if + ia64_asm_output_label. + + * config/ia64/crtbegin.asm (__do_global_dtors_aux): Use saved + copy of gp while the real gp register contains garbage. + + 2001-08-21 Zack Weinberg + + * expmed.c (mode_for_extraction): New function. + (store_bit_field, extract_bit_field): Use it. + * expr.h: Prototype it and provide an enum for its first argument. + + * combine.c, function.c, recog.c: Don't include insn-codes.h. + Use mode_for_extraction rather than testing HAVE_insv/extv/extzv + and digging through the insn_data tables. + * Makefile.in: Update dependencies. + + 2001-08-22 Neil Booth + + * cppfiles.c (stack_include_file): line-map.c now handles include + depth. + (handle_missing_handler): Similarly. + (_cpp_execute_include): Similarly. + (_cpp_pop_file_buffer): Similarly. + * cpphash.h (struct cpp_reader): Remove system_include_depth, + buffer_stack_depth and include_depth. + * cpplib.c (do_include_common): line-map.c now handles include depth. + (cpp_push_buffer): Similarly. + (_cpp_pop_buffer): Similarly. + * cppmacro.c (builtin_macro): Update. + * line-map.c (init_line_maps): Set depth. + (add_line_map): Increment "used" earlier. Update and use the + include depth. + (trace_include): Use the include depth. + * line-map.h (struct line_maps): New member depth. + + 2001-08-21 Neil Booth + + * cppfiles.c (stack_include_file): Don't handle -H here. + * cppinit.c (cpp_start_read): Set include tracing after + cpp_post_options and after stacking the main file. + * line-map.c (trace_include): New. + (init_line_maps, add_line_map): Update. + * line-map.h (struct line_maps): New member trace_includes. + + 2001-08-21 Neil Booth + + * cppfiles.c (stack_include_file): Harmonize system headerness tests. + * cppfiles.c (stack_include_file): Only stack a file if there + is something to do. Return a boolean indicating whether a + buffer was stacked or not. + (_cpp_execute_include): Similarly. + (_cpp_read_file): Similarly. + * cpphash.h (_cpp_read_file, _cpp_execute_include): Update prototypes. + + 2001-08-21 Sam Steingold + + * tradcpp.c (rescan): define obufp_before_macroname before RECACHE + (RECACHE): keep obufp_before_macroname up to date + + 2001-08-21 Zack Weinberg + + * stmt.c: Don't include insn-codes.h. + (expand_end_case): Machine specific logic moved to expr.c. + No need to worry about __builtin_classify_type. + (check_for_full_enumeration_handling, emit_case_nodes): + Kill #if 0 blocks. + + * builtins.o (expand_builtin_classify_type): Split up so code + can be shared with fold_builtin_classify_type. + (type_to_class, fold_builtin_classify_type): New functions. + (fold_builtins): Handle __builtin_classify_type. + + * expr.c (do_tablejump): Now static. + (case_values_threshold, try_casesi, try_tablejump): New; + code mostly from stmt.c (expand_end_case). + (expr.h): Update prototypes. + + * Makefile.in (stmt.o): Update dependencies. + + 2001-08-21 Will Cohen + + * configure/alpha/alpha.h (CONDITIONAL_REGISTER_USAGE): Added local + declaration of variable i. + * configure/rs6000/rs6000.h (CONDITIONAL_REGISTER_USAGE): Added local + declaration of variable i. + + 2001-08-21 Richard Henderson + + * crtstuff.c: Fix thinko last change. Move list tails to start + of CRT_END section. Tidy ifdefs. + (__EH_FRAME_BEGIN__): Always static for ELF. + (__do_global_ctors_1): Rename from __frame_dummy. + * config/mips/iris6.h (LINK_SPEC): Update for __do_global_ctors_1 + name change; don't hide __EH_FRAME_BEGIN__. + + 2001-08-21 Richard Henderson + + * gdbinit.in: Move break on exit after break on fancy_abort. + + * config/ia64/ia64.c (ia64_return_in_memory): True for variable + sized types. + + 2001-08-21 Neil Booth + + * cpphash.h (_cpp_push_next_buffer): New. + * cppinit.c (do_includes): Remove. + (push_include, free_chain, _cpp_push_next_buffer): New. + (cpp_start_read): Use them to rework command line option handling. + (cpp_handle_option): Combine handling of -include and -imacros. + * cpplex.c (_cpp_lex_token): Push a new -include buffer if + appropriate. Always insert missing \n at EOF. + * cpplib.c (start_directive): Get the directive position right. + * cppmain.c (cb_file_change): Always print the first line, unless + preprocessed. + + 2001-08-20 Andreas Jaeger + + * profile.c (compute_branch_probabilities): Remove extra new-line + in error message. + * flow.c (verify_flow_info): Likewise. + + 2001-08-20 Diego Novillo + + * basic-block.h (basic_block): Add new field 'flags'. + (BB_REACHABLE): Define. + (expunge_block): Declare. + * flow.c (ENTRY_BLOCK_PTR): Initialize field 'flags'. + (EXIT_BLOCK_PTR): Ditto. + (expunge_block): Remove static declaration. + (cleanup_cfg): Clear bb->aux on every basic block. + (find_unreachable_blocks): Set BB_REACHABLE bit in bb->flags when + computing reachability. + (delete_unreachable_blocks): Delete block b if b->flags has + BB_REACHABLE unset. + + 2001-08-20 Diego Novillo + + * doc/invoke.texi: Replace references to -fdump-tree with -fdump-ast. + + 2001-08-20 Kaveh R. Ghazi + + * sparc.c (sparc_variable_issue): Fix typo in last change. + + 2001-08-20 Richard Henderson + + * varasm.c (assemble_integer): Document ppc-eabi -mrelocatable losage. + + 2001-08-20 John David Anglin + + * pa.h (RETURN_IN_MEMORY): Improve comment. + + 2001-08-20 Janis Johnson + + * doc/invoke.texi (Profiling options): Clarify the interactions + between -fprofile-arcs and -ftest-coverage, -fprofile-arcs. + + 2001-08-20 Jeffrey Oldham + + * crtstuff.c (__do_global_ctors): Fix typo in preprocessing + command. + + 2001-08-20 Matt Kraai + + * gcc.c (make_relative_prefix): Allocate a sufficiently large + buffer. + + 2001-08-20 Richard Henderson + + * final.c (end_final): Fix typo last change. + + 2001-08-20 Neil Booth + + * cppinit.c (init_standard_includes): The returned buffer + is already malloc-ed. + * gcc.c (add_prefix): Similarly. + * prefix.c (translate_name): Update to support clear buffer + ownership rules. + (update_path): Similarly. Be sure to free any newly allocated + key. UPDATE_PATH_HOST_CANONICALIZE takes only one argument. + (tr): New function. + * prefix.h (update_path): Update prototype and document. + * config/i386/xm-djgpp.h (UPDATE_PATH_HOST_CANONICALIZE): Clean + up and update to new buffer ownership rules. + * doc/gcc.texi (UPDATE_PATH_HOST_CANONICALIZE): Update. + + Mon Aug 20 01:44:50 CEST 2001 Jan Hubicka + + * final.c (compute_alignments): New function. + (init_insn_lengths): Do not care label_align. + (LABEL_ALIGN_AFTER_BARRIER): Default to 1. + (LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP): Default to 0. + (JUMP_ALIGN, JUMP_ALIGN_MAX_SKIP): New. + (shorted_branches): Realloc label_align array; do + not call init_insn_lengths; Do not care about loop alignments. + * output.h (compute_alignments): Declare. + * toplev.c (rest_of_compilation): Call compute_alignments. + * tm.texi (JUMP_ALIGN, JUMP_ALIGN_MAX_SKIP): Document. + + * predict.c (block_info_def): Add npredecesors, remove nvisited; + change visited to tovisit. + (propagate_freq): Use faster traversing algorithm. + (estimate_loops_at_level, estimate_bb_frequencies): Change visited + to tovisit; reverse meaning. + + * predict.c (struct block_info_def): Remove nvisited. + (propagate_freq): Use EDGE_DFS_BACK to detect irreducible regions. + (estimate_bb_frequencies): Call mark_dfs_back_edges. + + 2001-08-19 Geoffrey Keating + + * doc/invoke.texi (MIPS Options): Document -mfused-madd. + * config/mips/mips.h (MASK_NO_FUSED_MADD): New. + (TARGET_FUSED_MADD): New. + (TARGET_SWITCHES): Add -mfused-madd, -mno-fused-madd. + * config/mips/mips.md: Add TARGET_FUSED_MADD as condition to + the multiply-add instructions. + + 2001-08-19 Richard Henderson + + * dwarf2asm.c (dw2_output_indirect_constant_1): The symbol ref + is aligned to pointer size. + + 2001-08-19 Richard Henderson + + * config/ia64/ia64.c (ia64_cycle_display): Only emit cycle + display markers during final schedule. + + 2001-08-19 Richard Henderson + + * function.c (gen_mem_addressof): Don't call get_alias_set if no decl. + + 2001-08-19 Richard Henderson + + * config/ia64/ia64.h (STRIP_NAME_ENCODING): Handle @ and * + in the same string. + (ASM_NAME_TO_STRING): Remove. + * config/ia64/sysv4.h (ASM_OUTPUT_LABELREF): Handle @ and * + in the same string. Remove support for expressions. + + 2001-08-19 Richard Henderson + + * config/i386/i386.md (tablejump): Make an expander; handle + pic relative addressing here. + (tablejump_1): Rename from tablejump_pic. + (casesi): Remove. + + 2001-08-19 Richard Henderson + + * regclass.c (fix_register): Fix typo. + + 2001-08-18 Richard Henderson + + * config/ia64/unwind-ia64.c (UNW_REG_B0): New. + (struct _Unwind_Context): Expand br_loc to hold it. + (uw_frame_state_for): Handle leaf functions better. + (uw_update_reg_address): Update for br_loc change. + + 2001-08-18 Richard Henderson + + * crtstuff.c: Move list heads before code that uses them. + (__JCR_LIST__): Remove initial null. + (frame_dummy, __frame_dummy): Do java registration here ... + (__do_global_ctors_aux): ... not here. + + * config/ia64/crtbegin.asm (dtor_ptr): Make gp-relative. + (__do_global_dtors_aux): Update to match. + (__JCR_LIST__, __do_jv_register_classes): New. + (.init): Call it. + * config/ia64/crtend.asm (__JCR_END__): New. + (__do_global_ctors_aux): Use a GPREL64I reloc to __CTOR_END__ + instead of an indirect LTOFF22 reloc. + + 2001-08-18 Richard Henderson + + * flow.c (mark_regs_live_at_end): Use regs_invalidated_by_call. + * regclass.c (init_reg_sets_1): Fix typo. + * config/ia64/ia64.c (ar_pfs_reg_operand): New. + (ia64_expand_call): Pass ar.pfs to sibcall expanders. + (ia64_compute_frame_size): Make ar.unat live when in use. + (ia64_epilogue_uses): Reformat; do not check current_function_is_leaf + for ar.pfs; remove ar.unat handling. + * config/ia64/ia64.h (CALL_REALLY_USED_REGISTERS): ar.unat is + call-saved. + (PREDICATE_CODES): Add ar_pfs_reg_operand. + * config/ia64/ia64-protos.h: Update decls. + * config/ia64/ia64.md (sibcall_nopic): Use ar.pfs. + (sibcall_pic): Likewise. + + 2001-08-18 Richard Henderson + + * config/ia64/ia64.c (ia64_sched_reorder2): Also skip past + pred_rel_mutex when searching for insn_group_barrier. + * config/ia64/ia64.md (cycle_display): Combine the expander + and insn patterns. + + * config/ia64/ia64.c (ia64_internal_sched_reorder): Emit stop + bit before asm as needed. + + 2001-08-18 Richard Henderson + + * timevar.def (TV_MACH_DEP): New. + * toplev.c (rest_of_compilation): Use it. + * config/ia64/ia64.c (ia64_reorg): Push to TV_SCHED2. + + 2001-08-18 Zack Weinberg + + * unwind-dw2.c (execute_stack_op): Add default aborts to + the inner switches to prevent warnings. + + 2001-08-18 Richard Henderson + + * timevar.h (struct timevar_time_def): Change element type to float. + (ticks_to_msec, clocks_to_msec): Likewise. + (TICKS_TO_MSEC, CLOCKS_TO_MSEC): Rescale to seconds; use type float. + (get_time): Likewise. + (timevar_print): Adjust zero check and printing to match. + + 2001-08-18 Zack Weinberg + + * doc/extend.texi, doc/gcc.texi, doc/install-old.texi, + doc/invoke.texi, doc/md.texi, doc/rtl.texi, doc/include/gpl.texi: + Eliminate overfull or underfull hboxes. + + 2001-08-18 Zack Weinberg + + * cpperror.c: Use VA_OPEN/VA_CLOSE/VA_FIXEDARG throughout. + + 2001-08-18 Zack Weinberg + + * haifa-sched.c: Convert to target hooks. Macros replaced + are ISSUE_RATE, ADJUST_COST, ADJUST_PRIORITY, MD_SCHED_INIT, + MD_SCHED_REORDER, MD_SCHED_REORDER2, MD_SCHED_VARIABLE_ISSUE, + MD_SCHED_FINISH, and HAVE_cycle_display. + * target-def.h (TARGET_SCHED_ADJUST_COST, + TARGET_SCHED_ADJUST_PRIORITY, TARGET_SCHED_ISSUE_RATE, + TARGET_SCHED_VARIABLE_ISSUE, TARGET_SCHED_INIT, + TARGET_SCHED_FINISH, TARGET_SCHED_REORDER, + TARGET_SCHED_REORDER2, TARGET_SCHED_CYCLE_DISPLAY): + New hook #defines to be overridden. + (TARGET_SCHED): Bring them all together. + (TARGET_INITIALIZER): Update. + * target.h: Don't forward declare struct rtx_def. Use 'rtx' + instead of 'struct rtx_def *' throughout. + (struct sched): New set of hooks for the scheduler. + * Makefile.in (haifa-sched.o): Depend on target.h. + * doc/tm.texi: Document the new scheduler hooks, together in + their own section, instead of scattered around. + Fix a bunch of underfull/overfull hboxes. + + * a29k.h, alpha.h, arm.h, c4x.h, convex.h, d30v.h, i386.h, + ia64.h, m32r.h, m88k.h, mips.h, pa.h, rs6000.h, s390.h, sh.h, + sparc.h: Don't define any of the old scheduler macros. + + * a29k.c, alpha.c, arm.c, c4x.c, convex.c, d30v.c, i386.c, + ia64.c, m32r.c, m88k.c, mips.c, pa.c, rs6000.c, s390.c, sh.c, + sparc.c: Create hook functions from code extracted from + corresponding target header, or make existing hooks static, as + appropriate. Set the appropriate entries in targetm. + + * alpha-protos.h, arm-protos.h, c4x-protos.h, d30v-protos.h, + i386-protos.h, ia64-protos.h, m32r-protos.h, pa-protos.h, + rs6000-protos.h, s390-protos.h, sparc-protos.h: + Remove prototypes for functions which are now static. + + * d30v.h, d30v.c, m32r.h, m32r.c: Remove #ifdef HAIFA and + related gunk; the Haifa scheduler is now the only choice. + + 2001-08-18 Zack Weinberg + + * optabs.h (OTI_flodiv, flodiv_optab): Kill. + * genopinit.c: Put floating point divide insns in sdiv_optab. + * expr.c (expand_expr): Use sdiv_optab, not flodiv_optab. + * config/gofast.h, config/c4x/c4x.h, + config/ia64/hpux_longdouble.h, config/mips/mips.h, + config/pa/long_double.h, config/rs6000/sysv4.h, + config/sparc/sparc.h: Put floating point divide libcalls in sdiv_optab. + * optabs.c (init_optab): Break into new_optab, init_optab, init_optabv. + (init_optabs): Use init_optabv for overflow-trapping optabs. + Don't init flodiv_optab. Give mov_optab, movstrict_optab, and + cmp_optab RTX codes so have_insn_for can find them. + + * optabs.c (expand_simple_binop, expand_simple_unop, + have_insn_for, gen_sub3_insn): New interfaces. + * expr.h: Prototype new functions. + (enum optab_methods): Move here from optabs.h. + + * builtins.c, combine.c, doloop.c, function.c, ifcvt.c, + loop.c, profile.c, simplify-rtx.c, stmt.c, unroll.c: + Use new functions instead of working directly with optabs. + * doloop.c, ifcvt.c, loop.c, profile.c, simplify-rtx.c, + unroll.c: Don't include optabs.h. + * caller-save.c, combine.c, function.c, stmt.c: Just include + insn-codes.h, not optabs.h. + * Makefile.in: Update dependencies. + + * combine.c (make_compound_operation, simplify_comparison): + Fix typos testing for this or that instruction. + + 2001-08-18 Herman A.J. ten Brugge + + * mklibgcc.in: Prefer LIB1ASMFUNCS over LIB2_DIVMOD_FUNCS when + generating libgcc.a. + + 2001-08-18 Kaveh R. Ghazi + + * except.c (TYPE_HASH): Delete. + + * objc/objc-act.c (HASHFUNCTION): Cast to size_t, not + HOST_WIDE_INT. + + * tree.c (TYPE_HASH): Delete. + + * tree.h (TYPE_HASH): Define. + + 2001-08-18 Graham Stott + + * config/mips/mips.md (adddi3_internal_2+1): Remove constraints from + define_split. + (adddi3_internal_2+2): Likewise. + (eh_set_lr_di+1): Likewise. + + 2001-08-17 Richard Henderson + + * defaults.h (UNALIGNED_SHORT_ASM_OP, UNALIGNED_INT_ASM_OP, + UNALIGNED_DOUBLE_INT_ASM_OP, ASM_BYTE_OP): Move from ... + * dwarf2asm.c: ... here. + * dwarfout.c: Remove them. + + * varasm.c (assemble_integer): Add align parameter. + (assemble_real, output_constant, output_constructor): Likewise. + * output.h: Update decls. + * dwarf2asm.c, final.c, varasm.c, config/darwin.c, config/nextstep.c, + config/alpha/alpha.c, config/arm/arm.md, config/clipper/clipper.c, + config/m88k/m88k.c, config/mcore/mcore.md, config/mips/mips.h, + config/mips/mips.md, config/pa/pa.c, config/rs6000/rs6000.c, + config/rs6000/rs6000.h, config/s390/s390.h, config/sh/sh.md: + Update all callers. + + * final.c (end_final): Abort profile block generation if we + haven't layed it out properly. + * output.h (assemble_eh_integer): Remove stale decl. + * varasm.c (assemble_zeros): Tidy; use assemble_integer. + (min_align): New. + (assemble_integer): Handle unaligned data. + (assemble_real): Abort on unaligned data. + (output_constructor): Don't assume ASM_OUTPUT_ALIGN 0 does + anything useful. + (default_dtor_section_asm_out_destructor): Use assemble_align. + (default_named_section_asm_out_constructor): Likewise. + (default_ctor_section_asm_out_constructor): Likewise. + * config/darwin.c (machopic_asm_out_constructor): Likewise. + (machopic_asm_out_destructor): Likewise. + * config/nextstep.c (nextstep_asm_out_constructor): Likewise. + (nextstep_asm_out_destructor): Likewise. + * config/alpha/alpha.c (vms_asm_out_constructor): Likewise. + (vms_asm_out_destructor): Likewise. + + 2001-08-17 Richard Henderson + + * config/mips/iris6.h (TARGET_IRIX6): New. + (current_section_name, current_section_flags): New. + (ASM_OUTPUT_ALIGN, ASM_FILE_START, ASM_FILE_END): New. + (MAX_OFILE_ALIGNMENT): New. + (ASM_OUTPUT_ALIGNED_LOCAL): Use bss_section. + * config/mips/mips.c (mips_make_temp_file, temp_filename): Remove. + (copy_file_data): Split out from + (mips_asm_file_end): ... here. + (mips_asm_file_start): Remove extra .section directive. Use + tmpfile instead of mips_make_temp_file. + (mips_unique_section): Use const char * as needed for warnings. + (iris6_asm_named_section_1): Renamed from iris6_asm_named_section; + re-add align parameter. + (iris6_asm_named_section): New. + (iris_section_align_entry_eq, iris_section_align_entry_hash): New. + (iris6_asm_output_align, iris6_section_align_1): New. + (iris6_asm_file_start, iris6_asm_file_end): New. + * config/mips/mips-protos.h: Update decls. + + 2001-08-17 Janis Johnson + + * doc/install.texi (Install GCC): Add links to build status pages. + (Specific): Ditto. + (Final install): Ditto; request updates for specific info + + 2001-08-17 Neil Booth + + * cpperror.c (print_location): Don't take a file name; use the + line map instead. + (_cpp_begin_message): Similarly. + (cpp_ice, cpp_fatal, cpp_error, cpp_error_with_line, cpp_warning, + cpp_warning_with_line, cpp_pedwarn, cpp_pedwarn_with_line): Update. + (cpp_pedwarn_with_file_and_line): Remove. + * cppfiles.c (stack_include_file): Update; set filename to stdin + here when appropriate. + * cpphash.h (struct cpp_buffer): Remove nominal_fname. + (_cpp_begin_message): Don't take a file name. + * cppinit.c: Add comment. + * cpplex.c: Fix end-of-directive indicator. + * cpplib.c: Don't include intl.h. + (run_directive, do_diagnostic): Update. + (do_line): Update to not use nominal_fname. + (cpp_push_buffer): Don't take a filename. + * cpplib.h (struct ht): Remove. + (cpp_push_buffer): Don't take a filename. + (cpp_pedwarn_with_file_and_line): Remove. + * cppmacro.c (struct cpp_macro): Remove file. + (builtin_macro): Update. + (_cpp_create_definition): Update. + * cppmain.c: Correct comment. + * fix-header.c (read_scan_file): Update. + + 2001-08-17 Kazu Hirata + + * sbitmap.c: Fix comment formatting. + * sched-deps.c: Likewise. + * sibcall.c: Likewise. + * simplify-rtx.c: Likewise. + * ssa.c: Likewise. + * ssa-ccp.c: Likewise. + * stor-layout.c: Likewise. + * timevar.c: Likewise. + * toplev.c: Likewise. + * unwind-dw2.c: Likewise. + * unwind-dw2-fde.c: Likewise. + * varasm.c: Likewise. + + 2001-08-17 John David Anglin + + * pa.h (RETURN_IN_MEMORY): Return types with a size that is varable + or larger than an integer in memory. + + 2001-08-17 Zack Weinberg + + * system.h: Forward-declare struct rtx_def, struct rtvec_def, + and union tree_node. Typedef rtx, rtvec, and tree. Fix comment. + * rtl.h: Don't forward-declare union tree_node here. Don't + typedef rtx or rtvec here. Change all uses of struct rtx_def *, + struct rtvec_def *, or union tree_node * to use rtx, rtvec, + and tree respectively. + * tree.h: Don't forward-declare struct rtx_def here. Don't + typedef tree here. Change all uses of struct rtx_def *, + struct rtvec_def *, or union tree_node * to use rtx, rtvec, + and tree respectively. + + 2001-08-17 Richard Henderson + + * config/mips/elf.h, config/mips/elf64.h, config/mips/netbsd.h, + config/mips/openbsd.h: Fix typos last change. + + 2001-08-17 Gerald Pfeifer + + * doc/invoke.texi (Optimize Options): The default for + -finline-limit is 600. + + 2001-08-17 Richard Henderson + + * varasm.c (text_section): Allow TEXT_SECTION to override the + printing of TEXT_SECTION_ASM_OP. + * dwarf2out.c (TEXT_SECTION_NAME): Rename from TEXT_SECTION. + (DATA_SECTION, BSS_SECTION): Remove. + * dwarfout.c (TEXT_SECTION_NAME, DATA_SECTION_NAME, DATA1_SECTION_NAME, + RODATA_SECTION_NAME, RODATA1_SECTION_NAME, BSS_SECTION_NAME): + Rename from s/_NAME//. + * config/mips/mips.h (TARGET_FILE_SWITCHING): Add !TARGET_MIPS16. + (ASM_DECLARE_FUNCTION_NAME): Move file switching ... + (TEXT_SECTION): ... here. New. + * config/mips/elf.h (TEXT_SECTION): New; no file switching. + * config/mips/elf64.h, config/mips/netbsd.h: Likewise. + * config/mips/openbsd.h: Likewise. + * config/mips/mips.c (mips_asm_file_start): Tidy file switching test. + (mips_asm_file_end): Likewise test. + (mips_output_function_epilogue): Likewise. Switch back to data + section after emitting the function. + + * doc/tm.texi (Sections): Document TEXT_SECTION. + + 2001-08-17 Richard Henderson + + * dwarf2out.c (dwarf2out_init): Don't emit .debug_loc label here. + (dwarf2out_finish): Do it here. Emit .debug_loc before .debug_info. + + 2001-08-17 Richard Henderson + + * varasm.c (assemble_variable): Don't overalign if DECL_USER_ALIGN. + * crtstuff.c (__CTOR_LIST__, __DTOR_LIST__, __EH_FRAME_BEGIN__, + __JCR_LIST__, __CTOR_END__, __DTOR_END__, __FRAME_END__,__JCR_END__): + Add aligned attribute. + + 2001-08-17 Andrew Haley + + * config/sh/sh.md: Add modes to unspecs in first insn to match + those in the second. + + * Makefile.in: Fix collect2 copy for Cygwin. + + Fri Aug 17 15:48:57 CEST 2001 Jan Hubicka + + Install the proper patch. + * function.c (put_var_into_stack): Temporarily clear DECL_RTL. + (assign_params): Avoid setting DECL_RTL to unfinished RTX. + (expand_function_start): Likewise. + * stmt.c (expand_decl): Likewise. + * varasm.c (make_decl_rtx): Likewise. + + Fri Aug 17 15:41:35 CEST 2001 Jan Hubicka + + * final.c: Undo my previous accidental checkin. + * output.h: Likewise. + * tm.texi: Likewise. + + 2001-08-16 Richard Henderson + + * varasm.c (named_section_flags): Remove align parameter. + * varasm.c, dwarf2out.c: Update all callers. + * output.h: Update prototypes. + + * target.h (target.asm_out.named_section): Remove align parameter. + * varasm.c, config/a29k/a29k.c, config/alpha/alpha.c, + config/arm/arm.c, config/c4x/c4x.c, config/h8300/h8300.c, + config/i386/i386.c, config/i386/winnt.c, config/m68k/m68k.c, + config/mcore/mcore.c, config/mips/mips.c, config/rs6000/rs6000.c, + config/sh/sh.c, config/sparc/sparc.c: Update implementations to match. + + * varasm.c (in_named_entry_eq, in_named_entry_hash): New. + (get_named_section_flags, set_named_section_flags): New. + (named_section_flags): Use them. + (named_section): Do decl vs section flags check here... + (default_section_type_flags): ... not here. + (init_varasm_once): Create in_named_htab. + (resolve_unique_section): Mark reloc unused. + + 2001-08-16 Richard Henderson + + * varasm.c (force_const_mem): Keep pool alignment in bits. + (output_constant_pool): Use assemble_align. + + 2001-08-16 Zack Weinberg + + * doc/tm.texi: Remove extra @table command. + + 2001-08-16 Zack Weinberg + + * final.c (shorten_branches): Clear the end of the label_align + array only if we made it larger. Break up messy expressions + for clarity. + + * diagnostic.c (internal_error): Check for error recursion + before doing ICE suppression. + + * timevar.c: Timing variables now count in milliseconds. + (init_timevar): Set up ticks_to_msec and clocks_to_msec here. + (get_time): Not here. + (timevar_print): Don't print any timer whose user, cpu, and + wall times are all zero as displayed. + * timevar.h: Update comment aboout units. Make timevar + counters unsigned. + + Thu Aug 16 17:39:45 CEST 2001 Jan Hubicka + + * function.c (put_var_into_stack): Temporarily clear DECL_RTL. + (assign_params): Avoid setting DECL_RTL to unfinished RTX. + (expand_function_start): Likewise. + * stmt.c (expand_decl): Likewise. + * varasm.c (make_decl_rtx): Likewise. + + 2001-08-16 Jason Merrill + + * stor-layout.c (layout_decl): Don't set DECL_USER_ALIGN. + (finalize_record_size): Don't set TYPE_USER_ALIGN. + + 2001-08-16 Matt Kraai + + * config/i386/i386.c (ix86_init_mmx_sse_builtins): Remove unused + variables. + + 2001-08-16 Andreas Jaeger + + * config/s390/s390.c: Include "debug.h" for dwarf2out_do_frame + prototype. + + Wed Aug 15 15:22:52 EDT 2001 John Wehle (john@feith.com) + + * rtl.h (only_sets_cc0_p): New prototype. + * jump.c (sets_cc0_p): Handle INSN. + (only_sets_cc0_p): New function. + * flow.c (merge_blocks_nomove): Use only_sets_cc0_p. + (tidy_fallthru_edge): Likewise. + * integrate.c (copy_insn_list): Likewise. + * unroll.c (unroll_loop): Likewise. + (copy_loop_body): Likewise. + + 2001-08-15 Jason Eckhardt + + * config/i960/i960.md (trap): Change "faulteq.t" to "faulte.t". + + Wed Aug 15 14:24:22 CEST 2001 Jan Hubicka + + * predict.c (struct block_info_def): Remove nvisited. + (propagate_freq): Use EDGE_DFS_BACK to detect irreducible regions. + (estimate_bb_frequencies): Call mark_dfs_back_edges. + + * i386.c (ix86_agi_dependant): Lea causes AGI only on the Pentium + (ix86_adjust_cost): Teach scheduler that latency to load operand can + be masked. + + Wed Aug 15 12:41:32 CEST 2001 Jan Hubicka + + * predict.def: Update hitrates. + + 2001-08-15 Richard Henderson + + * except.c (TYPE_HASH): Cast to size_t, not HOST_WIDE_INT. + + Tue Aug 14 17:30:59 2001 Jeffrey A Law (law@cygnus.com) + + * flow.c (commit_one_edge_insertion): Don't separate a LOOP_BEG + note from its associated jump. + + 2001-08-14 Ulrich Weigand + + * config/s390/linux64.h (CPP_PREDEFINES): Define __s390__ + also on 64-bit s390x targets. + + 2001-08-14 Nick Clifton + + * config/arm/arm.c (arm_compute_initial_elimination_offset): New + function. + (arm_expand_prologue): Handled nested functions which take a + variable argument list. + * config/arm/arm.h (ARM_INITIAL_ELIMINATION_OFFSET): Replace + macro with an invocation of + arm_compute_initial_elimination_offset. + * config/arm/arm-protos.h: Prototype + arm_compute_initial_elimination_offset. + + 2001-08-14 Gerald Pfeifer + + * doc/install.texi (Specific, avr): Fix markup. + (Specific, c4x): Ditto. + + 2001-08-14 Matt Kraai + + * predict.c (dump_prediction): Change `bool' parameter to `int'. + + 2001-08-14 Gabriel Dos Reis + + * Makefile.in (OBJS): Add rtl-error.o + (rtl-error.o): New rule. + (diagnostic.o): Adjust dependency. + diagnostic.c (file_and_line_for_asm, diagnostic_for_asm, + error_for_asm, _fatal_insn, _fatal_insn_not_found, + warning_for_asm): Move to... + rtl-error.c: ...here. New file. + + 2001-08-14 Richard Henderson + + * dwarf2out.c (dwarf2out_frame_finish): Never emit .eh_frame + if USING_SJLJ_EXCEPTIONS. + + 2001-08-14 Steve Ellcey + + * tlink.c (scan_linker_output): Check string for unsatisfied in + addition to undefined and unresolved. + + 2001-08-14 Graham Stott + + * libgcc2.c (*): Replace EH_FRAME_SECTION with + EH_FRAME_SECTION_NAME. + + Tue Aug 14 14:57:07 CEST 2001 Jan Hubicka + + * genattrtab.c (simplify_test_exp_in_temp): New function. + (simplify_test_exp): Avoid explicit use of temporary obstack. + (simplify_cond, insert_right_side, evaluate_eq_attr, + simplify_and_tree, simplify_or_tree, eliminate_known_true): + Use simplify_test_exp_in_temp. + (optimize_attrs): Iterate until expression stabilizes. + + 2001-08-13 Ulrich Weigand : + + * glimits.h: Remove the __LONG_MAX__ special case for s390x. + * config/s390/linux64.h: Define __LONG_MAX__ in CPP_PREDEFINES. + + 2001-08-13 Richard Henderson + + * config/arm/unknown-elf.h (CTOR_LIST_BEGIN, CTOR_LIST_END): Remove. + (DTOR_LIST_BEGIN, DTOR_LIST_END): Remove. + * config/arm/conix-elf.h: Likewise. + + 2001-08-13 Geoffrey Keating + + * config/svr4.h (LINK_SPEC): Don't do -Wl, here, it is done + in gcc.c. + * config/rs6000/sysv4.h (LINK_SPEC): Likewise. + + * gcse.c (hash_scan_set): Expressions that are set as part of + jump instructions are not available. + + 2001-08-13 Ulrich Weigand + + * config/s390/s390.c (print_operand, s390_function_prologue, + s390_va_start): Fixed HOST_WIDE_INT type mismatch. + + 2001-08-13 Richard Henderson + + * config/rs6000/xcoff.h (EH_FRAME_IN_DATA_SECTION): New. + * defaults.h (EH_FRAME_SECTION_NAME): Respect it. + * doc/tm.texi (Exception Region Output): Document it. + + 2001-08-13 Geoffrey Keating + + * config/rs6000/sysv4.h (PREFERRED_DEBUGGING_TYPE): Use + DWARF2 instead of stabs by default. + + 2001-08-13 David Edelsohn + + * config/rs6000/rs6000.c: Include optabs.h. + + 2001-08-13 David Edelsohn + + * config/rs6000/eabi.asm: Define 64-bit versions of FPR + save/restore routines. + * ginclude/ppc-asm.h: Define 64-bit FUNC_* macros. + + 2001-08-13 Andreas Jaeger + + * gcc.c (init_spec): Revert last patch by Theodore Papadopoulo, + the english is correct. + + 2001-08-13 Zack Weinberg + + * expr.h: Split out optab- and libfunc-related code to... + * optabs.h, libfuncs.h: ... these new headers. + + * Makefile.in (CONFIG_H, EXPR_H): Take out insn-codes.h. + (OPTABS_H): New. + (various .o rules): Add $(OPTABS_H) and/or libfuncs.h to + dependencies. + * mkconfig.sh: Don't include insn-codes.h from config.h. + + * reload.h: Use #ifdef GCC_INSN_CODES_H to decide whether + enum insn_code is available. Move reload_in_optab and + reload_out_optab array declarations to optabs.h. + * regmove.c (gen_add3_insn): Move to optabs.c, export from + there, prototype in expr.h. + * gencodes.c: Cleanup: zap global variables, don't use + printf where puts will do, don't bother defining MAX_INSN_CODE + which nothing uses, let CODE_FOR_nothing get its value implicitly. + + * genemit.c, genopinit.c: Include optabs.h in generated file. + * genoutput.c: Include insn-codes.h in generated file. + * builtins.c, caller-save.c, combine.c, doloop.c, explow.c, + expmed.c, expr.c, function.c, ifcvt.c, loop.c, optabs.c, profile.c, + reload1.c, simplify-rtx.c, stmt.c, unroll.c, config/alpha/alpha.c, + config/arm/arm.c, config/c4x/c4x.c, config/clipper/clipper.c, + config/i386/i386.c, config/ia64/ia64.c, config/mn10300/mn10300.c, + config/pj/pj.c, config/sh/sh.c, config/sparc/sparc.c: + Include optabs.h. + * builtins.c, calls.c, dwarf2out.c, except.c, expr.c, function.c, + optabs.c, stmt.c, config/c4x/c4x.c, config/clipper/clipper.c, + config/m88k/m88k.c, config/sparc/sparc.c: + Include libfuncs.h. + * reload.c: Include expr.h and optabs.h before reload.h. + * config/alpha/alpha.c: Include tree.h before reload.h. + * config/pa/pa.c: Include expr.h, optabs.h, libfuncs.h, + and reload.h in that order. + * config/sparc/sparc.c: Include debug.h. + * recog.c: Include insn-codes.h. + + 2001-08-13 Andreas Jaeger + + * config.gcc: Use t-slibgcc-elf to build shared libgcc_s on + s390*linux. + + 2000-08-13 Theodore Papadopoulo + + * dwarf2out.c (output_cfa_loc): Fix typo in comment. + * gcc.c (init_spec): Fix typo in comment. + * varasm.c (data_section): Fix typo in comment. + + Mon Aug 13 02:27:39 CEST 2001 Jan Hubicka + + * predict.c (dump_prediction): New argument "USED". + (combine_predictions_for_insn): Determine the used heuristics, + output the case no heuristic applied. + * predict.def (PRED_DS_THEORY, PRED_NO_HEURISTIC): New. + + 2001-08-13 Andreas Jaeger + + * config/i386/unix.h (ASM_OUTPUT_MI_THUNK): Don't capitalize + register %rip. + + 2001-08-13 Kazu Hirata + + * jump.c: Fix formatting. + + 2001-08-13 Kazu Hirata + + * config/h8300/h8300.md (zero_extendqihi2): Correct the insn + length. + + 2001-08-12 Geoffrey Keating + + * loop.c (check_dbra_loop): Use condjump_label to compute + jump_label. + + * rtl.h: Move prototypes of rtx_alloc and rtvec_alloc around + to better document the files they're in. + + 2001-08-12 Zack Weinberg + + * recog.h (struct insn_operand_data): Shrink 'mode' field + to 16 bits. + + 2001-08-12 Kazu Hirata + + * gcc.c: Fix comment formatting. + * gccspec.c: Likewise. + * gcov.c: Likewise. + * gcse.c: Likewise. + * genemit.c: Likewise. + * gengenrtl.c: Likewise. + * genrecog.c: Likewise. + * gensupport.c: Likewise. + * ggc-page.c: Likewise. + * global.c: Likewise. + * graph.c: Likewise. + * ifcvt.c: Likewise. + * integrate.c: Likewise. + * lcm.c: Likewise. + * libgcc2.c: Likewise. + * loop.c: Likewise. + * mbchar.c: Likewise. + * optabs.c: Likewise. + * predict.c: Likewise. + * prefix.c: Likewise. + * profile.c: Likewise. + * protoize.c: Likewise. + * real.c: Likewise. + * recog.c: Likewise. + * regclass.c: Likewise. + * regmove.c: Likewise. + * reg-stack.c: Likewise. + * reload1.c: Likewise. + * resource.c: Likewise. + * rtlanal.c: Likewise. + * rtl.c: Likewise. + + 2001-08-12 Kazu Hirata + + * doc/tm.texi (ENCODE_SECTION_INFO): Add documentation on how + a tree representing a constant is passed to the macro. + + 2001-08-12 Richard Henderson + + * config/rs6000/rs6000.c (rs6000_elf_asm_out_constructor): New. + (rs6000_elf_asm_out_destructor): New. + * config/rs6000/sysv4.h (CTORS_SECTION_ASM_OP): Remove. + (DTORS_SECTION_ASM_OP): Remove. + (TARGET_ASM_CONSTRUCTOR, TARGET_ASM_DESTRUCTOR): New. + (ASM_OUTPUT_INT): Don't hack TARGET_RELOCATABLE for constructors. + + 2001-08-12 David Edelsohn + + Revert: + 2001-08-02 Rainer Orth + * gcc.c (set_collect_gcc_options): New function, split out from + main. + Ignore elided switches. + (do_spec_1): Invoke before executing command. + (set_input): Export. + Move declaration ... + * gcc.h (set_input): ... here. + * config/alpha/osf.h (ASM_FINAL_SPEC): Use %U.s to refer to input + file. + + 2001-08-12 Richard Henderson + + * config/rs6000/rs6000.c (rs6000_elf_section_type_flags): Fix + thinko wrt TARGET_RELOCATABLE. + + 2001-08-12 Neil Booth + + * fix-header.c (cb_file_change): Update prototype. + + 2001-08-11 Zack Weinberg + + * toplev.c (set_float_handler): Make static. + * toplev.h: Don't prototype set_float_handler. + + * simplify-rtx.c: Don't include setjmp.h. + (simplify_unary_real, simplify_binary_real, simplify_binary_is2orm1): + New functions. + (simplify_unary_operation, simplify_binary_operation): Use them, + via do_float_handler. + + * fold-const.c: Don't include setjmp.h. + (exact_real_inverse_1): New function. + (exact_real_inverse): Use it, via do_float_handler. + + * varasm.c: Don't include setjmp.h. + (assemble_real_1): New function. + (assemble_real): Use it, via do_float_handler. + Call internal_error if we get a trap here. + + * c-parse.in, cse.c, cselib.c, config/i386/i386.c, + config/pj/pj.c, config/s390/s390.c: Don't include setjmp.h. + + 2001-08-11 Zack Weinberg + + * defaults.h: Define PREFERRED_STACK_BOUNDARY to + STACK_BOUNDARY if not already defined. + + * calls.c, function.c, reload1.c, explow.c: Don't default + PREFERRED_STACK_BOUNDARY. Remove all #if/#ifdef on + PREFERRRED_STACK_BOUNDARY and/or STACK_BOUNDARY. + + * explow.c (allocate_dynamic_stack_space): Change unsafe #if + to run-time test. + + * doc/tm.texi: Document that STACK_BOUNDARY is required; + clarify difference between it and PREFERRED_STACK_BOUNDARY. + + 2001-08-11 Neil Booth + + * cppmacro.c (enter_macro_context): Push macro expansions even + if empty. + + 2001-08-11 Franz Sirl + + * config/rs6000/rs6000.c: Include integrate.h to silence warning. + (rs6000_elf_section_type_flags): Actually return a value. + + 2001-08-11 Ulrich Weigand + + * s390.c, s390.h, s390.md, s390-protos.h, linux.h, t-linux: + Clean up code: add missing comments and prototypes, fix warnings, + remove obsolete code, fix spacing to conform to coding style. + + 2001-08-11 Ulrich Weigand + + * config/s390/s390.c (targetm): Define TARGET_ASM_OPEN_PAREN + and TARGET_ASM_CLOSE_PAREN. + (regclass_map): CC register belongs to class NO_REGS. + (legitimize_pic_address): Don't generate unnecessary moves + (to avoid confusing loop optimization). + (check_and_change_labels): Replace jump_long by indirect_jump. + (s390_final_chunkify): Don't start a new literal pool on section + switch in 64-bit code. + (s390_va_start, s390_va_arg): Fixed incorrect sizes for 64-bit. + + * config/s390/s390.h (TARGET_SWITCHES): Renamed debug_arg to debug. + (MAX_BITS_PER_WORD, MAX_LONG_TYPE_SIZE): Set to 64 (for 64-bit). + (HARD_REGNO_MODE_OK, RETURN_IN_MEMORY): Support complex integer + modes correctly. + (reg_class, REG_CLASS_NAMES, REG_CLASS_CONTENTS): Remove CC_REGS. + (EH_RETURN_HANDLER_RTX): Fixed incorrect offset for 64-bit. + (CONST_COSTS): Fixed incorrect costs. + + * config/s390/s390.md (fixuns_trunc[sd]f[sd]i2, udivsi3, umodsi3): + Use emit_jump instead of emit_jump_insn (gen_jump). + (divsi3, modsi3): Clobber low word of divmoddisi3 before shifting + (to avoid confusing flow analysis). + (tablejump, tablejump1, tablejump2): Removed. Replaced by casesi. + (casesi, casesi_jump): New. + (jump_long): Removed. Functionality merged into indirect_jump. + (indirect_jump): Accept address_operand, not just register_operand. + (cjump_long, icjump_long): Use same logic as indirect_jump. + (builtin_setjmp_setup, builtin_setjmp_receiver, builtin_longjmp): + Fixed broken setjmp/longjmp handling. + (do_builtin_setjmp_setup): Removed. + + * config/s390/linux.h (ASM_OUTPUT_DOUBLE_INT): Work around + broken GNU as versions that don't accept .quad with large + negative values. Use hexadecimal output instead. + (ASM_OUTPUT_ADDR_DIFF_ELT): Adapt to new casesi insn. + (ASM_OPEN_PAREN, ASM_CLOSE_PAREN, FUNCTION_PROLOGUE, + FUNCTION_EPILOGUE): Removed. Now in targetm. + + * config/s390/linux64.h (CALL_USED_REGISTERS): Add CC register. + + * config/s390/fixdfdi.h: Add missing copyright statement. + Fix type conflicts on 64-bit. Add missing SFmode routines. + + * s390.c, s390.h, s390.md, linux.h, linux64.h: Fixed incorrect + email address. + + 2001-08-11 Richard Henderson + + * rtl.h (REG_EH_RETHROW): Remove. + * rtl.c (reg_note_name): Update. + * combine.c (distribute_notes): Don't check for it. + + 2001-08-11 Richard Henderson + + * combine.c (distribute_notes): Place REG_SETJMP. + + 2001-08-11 Richard Henderson + + * doc/extend.texi (Arrays and pointers implementation): Discourage + relying on sign-extension of pointers. + + 2001-08-11 H.J. Lu + + * config/mips/linux.h (EXTRA_SECTIONS): Remove in_ctors and + in_dtors. + (EXTRA_SECTION_FUNCTIONS): Remove DTORS_SECTION_ASM_OP and + RDATA_SECTION_ASM_OP. + + 2001-08-11 Gerald Pfeifer + + * doc/install.texi (Specific, c4x): Fix cross-reference to the + main manual to work both for info and HTML versions. + + 2001-08-11 Neil Booth + Matt Kraai + + * cpphash.c (_cpp_destroy_hashtable): Use ht_destroy. + * cpphash.h (CPP_IN_SYSTEM_HEADER): Fix. + (struct cpp_pool): New member first. + * cppinit.c (append_include_chain): Plug memory leaks. + * cpplib.c (cpp_register_pragma, cpp_register_pragma_space): + Allocate pragma structures from the (aligned) macro pool to + avoid leaking memory. + * cpplex.c (_cpp_init_pool, _cpp_free_pool): Use pool->first + so we don't leak memory. + * hashtable.c (ht_destroy): New. + * hashtable.h (ht_destroy): New. + + 2001-08-11 Neil Booth + Franz Sirl + + * c-lex.c (map): Make const. + (cb_file_change): Update for callback passing a line map. + Don't assume we have a previous map. Remove sanity check + about popping too many files. + * cpperror.c (print_location): Make map const. + * cppfiles.c (stack_include_file): Update; line maps now hold sysp. + (cpp_make_system_header): Similarly. + (search_from): Similarly. + (_cpp_execute_include): Don't remember where we came from. + * cpphash.h (struct cpp_buffer): Remove return_to_line, sysp. + (struct cpp_reader): Make map const. + (CPP_IN_SYSTEM_HEADER, _cpp_do_file_change): Update. + * cpplib.c (do_line): Update; line maps now hold sysp. + (cpp_push_buffer): Similarly. + (_cpp_do_file_change): Similarly; callback with map instead. + (cpp_get_line_maps): Constify return value. + (_cpp_pop_buffer): Update. + * cpplib.h (struct cpp_file_change): Remove. + (struct cpp_callbacks): Update. + (cpp_get_line_maps): Constify return value. + * cppmacro.c (_cpp_create_definition): Update. + * cppmain.c (struct printer): Constify map. + (maybe_print_line): Similarly. + (print_line): Similarly. Deduce flags 1 and 2 here. + (cb_file_change): Update. + * line-map.c (free_line_maps): Warn regardless. + (add_line_map): Return pointer to const. When passed NULL to_file + with LC_LEAVE, use the obvious values for the return point so the + caller doesn't have to figure them out. + (lookup_line): Return pointer to const. + (print_containing_files): Take pointer to const. + * line-map.h (struct line_map): New members reason, sysp. + (add_line_map): Return pointer to const. + (lookup_line): Similarly. + (print_containing_files): Take pointer to const. + + 2001-08-10 Roman Zippel + Richard Henderson + + * regmove.c (regmove_optimize): Avoid setting a register twice in + a parallel set. + + 2001-08-10 Richard Henderson + + * doc/extend.texi (Arrays and pointers implementation): Document + behavior of pointer/integer conversion. + + 2001-08-10 Ulrich Weigand + + * glimits.h (__LONG_MAX__): Add s390x as 64-bit architecture. + + 2001-08-10 Richard Henderson + + * doc/extend.texi (C Implementation): New chapter. + * doc/gcc.texi (Top): Link it in. + + 2001-08-10 Andrew Cagney + + * doc/install.texi (Specific): Fix CVS merge botch. + + 2001-08-10 Richard Henderson + + * config/m68k/m68k.c (m68k_svr3_asm_out_constructor): Protect with + ifdef CTOR_LIST_BEGIN instead of INIT_SECTION_ASM_OP. + + 2001-08-10 Zack Weinberg + + * calls.c, function.c: Always define PREFERRED_STACK_BOUNDARY + if not already defined. Remove all #ifdefs on STACK_BOUNDARY; + this macro is now required. + + * cselib.c (cselib_process_insn), flow.c (propagate_block), + loop.c (find_and_verify_loops), reload.c (reload): Check + for rtx code of CALL_INSN, not CALL, when deciding if we + need to check for REG_SETJMP note. + + * gcse.c (compute_hash_table, compute_store_table): Update + the #ifdef NON_SAVING_SETJMP code to the new REG_SETJMP + logic. + + * config/avr/avr.c: Fix typo. + * config/convex/convex.c (expand_movstr): Use adjust_address. + * config/dsp16xx/dsp16xx.c: Define dsp16xx_compare_gen + variable. + * config/dsp16xx/dsp16xx.md: Correct calls to replace_equiv_address. + * config/elxsi/elxsi.c: Include tree.h, expr.h, regs.h, and flags.h. + Fix typo. + * config/elxsi/elxsi.h: Don't define Rmode (typo for Pmode?) + Do define STACK_BOUNDARY. + * config/i370/i370.c: Include expr.h. + * config/i860/sysv3.h, config/i860/sysv4.h, config/m32r/m32r.h, + config/pa/som.h, config/v850/v850.h: Take in_ctors and + in_dtors out of EXTRA_SECTIONS; take CTORS_SECTION_FUNCTION + and DTORS_SECTION_FUNCTION out of EXTRA_SECTION_FUNCTIONS. + * config/m88k/m88k.c: Include c-tree.h after expr.h. + * config/pdp11/pdp11.c: Include expr.h and toplev.h. + * config/romp/romp.c: Include expr.h after tree.h. + Include toplev.h. + (output_fpop): Use xmalloc, not oballoc. + * config/we32k/we32k.c: Include expr.h. + + 2001-08-10 Kazu Hirata + + * config/h8300/h8300.h: Fix formatting. + + 2001-08-08 Jason Merrill + + * c-common.h (RETURN_NULLIFIED_P): Lose. + * c-semantics.c (genrtl_return_stmt): Don't check it. + + 2001-08-10 Richard Sandiford + + * config/mips/mips.c (mips_add_large_offset_to_sp): New function. + (mips_annotate_frame_insn): New function. + (mips_emit_frame_related_store): New function. + (save_restore_insns): Don't mark instructions that set up the base + registers as frame-related. Add REG_FRAME_RELATED_EXPR notes to + the store instructions instead. + (mips_expand_prologue): If the stack size is moved into a temporary + register, do not mark that move as frame-related. Add a + REG_FRAME_RELATED_EXPR note to the stack adjustment instruction. + + 2001-08-10 Richard Sandiford + + * config/mips/mips.c (save_restore_insns): Don't mark the RA's + stack slot as unchanging if current_function_calls_eh_return. + + 2001-08-10 Richard Sandiford + + * config/mips/mips.md (reload_incc): Use HARD_REGNO_NREGS to + access the second half of the TFmode scratch operand. + + 2001-08-10 Anthony Green + + * java/class.c (emit_register_classes): Conditionalize code on + JCR_SECTION_NAME. + + 2001-08-10 Gerald Pfeifer + + * doc/install.texi (Specific, avr): Fix cross-reference to the + main manual to work both for info and HTML versions. + + 2001-08-09 John David Anglin + + * stmt.c (expand_null_return_1): Remove code to generate simple returns + and "use_goto" argument. + (expand_null_return, expand_value_return): Update all callers. + * function.c (expand_function_end): Remove code to generate simple + return. + * config/vax/vax.md (epilogue): New expander for function return. + * doc/md.texi (epilogue): Remove "if defined". + + 2001-08-09 Zack Weinberg + + * Makefile.in: Partially revert my previous change: + put -DGENERATOR_FILE back in HOST_CFLAGS, take it out + of the hashtab.o and safe-ctype.o rules. + + 2001-08-09 Richard Henderson + + * Makefile.in (MAYBE_USE_COLLECT2): Remove; purge all uses. + (USE_COLLECT2): Remove duplicate definition. + * config.gcc (a29k-udi, a29k-wrs-vxworks) [tm_file]: Remove a29k/udi.h. + (use_collect2): Remove dead code. + * configure.in (use_collect2): Remove will_use_collect2 and + maybe_use_collect2; add USE_COLLECT2 to host_xm_defines and xm_defines. + * configure: Rebuild. + + * target.h (targetm.asm_out.constructor): New. + (targetm.asm_out.destructor, targetm.have_ctors_dtors): New. + * target-def.h (TARGET_ASM_CONSTRUCTOR): New. + (TARGET_ASM_DESTRUCTOR, TARGET_HAVE_CTORS_DTORS): New. + * varasm.c (in_ctors, in_dtors): New. + (assemble_constructor, assemble_destructor): Remove. + (default_stabs_asm_out_destructor): New. + (default_named_section_asm_out_destructor): New. + (dtors_section, default_dtor_section_asm_out_destructor): New. + (default_stabs_asm_out_constructor): New. + (default_named_section_asm_out_constructor): New. + (ctors_section, default_ctor_section_asm_out_constructor): New. + * output.h: Update declarations. + * c-decl.c (c_expand_body): Use target hooks instead of + assemble_constructor and assemble_destructor. + * profile.c (output_func_start_profiler): Likewise. + * objc/objc-act.c (finish_objc): Likewise. + (build_module_descriptor): Tidy. Set TREE_PUBLIC properly + for the constructor. + * objc/Make-lang.in (objc-act.o): Depend on TARGET_H. + + * crtstuff.c (CTORS_SECTION_ASM_OP): Don't define. + (DTORS_SECTION_ASM_OP): Likewise. + (__CTOR_LIST__): Use attribute section when possible. + (__DTOR_LIST__, __CTOR_END__, __DTOR_END__): Likewise. + + * defaults.h (EH_FRAME_SECTION_NAME): Don't depend on + ASM_OUTPUT_CONSTRUCTOR. + + * config/darwin.c (machopic_asm_out_constructor): New. + (machopic_asm_out_destructor): New. + * config/darwin-protos.h: Update declarations. + * config/darwin.h (ASM_OUTPUT_CONSTRUCTOR): Remove. + (ASM_OUTPUT_DESTRUCTOR): Remove. + (TARGET_ASM_CONSTRUCTOR, TARGET_ASM_DESTRUCTOR): New. + * config/nextstep.c (nextstep_asm_out_constructor): New. + (nextstep_asm_out_destructor): New. + * config/nextstep.h (ASM_OUTPUT_CONSTRUCTOR): Remove. + (ASM_OUTPUT_DESTRUCTOR): Remove. + (TARGET_ASM_CONSTRUCTOR, TARGET_ASM_DESTRUCTOR): New. + * config/nextstep21.h: Undef TARGET_ASM_*STRUCTOR instead of + ASM_OUTPUT_*STRUCTOR. + * config/i386/aix386ng.h: Likewise. + + * config/elfos.h (CTORS_SECTION_ASM_OP, DTORS_SECTION_ASM_OP): Remove. + (EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS): No ctors/dtors. + (CTORS_SECTION_FUNCTION, DTORS_SECTION_FUNCTION): Remove. + (ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR): Remove. + * config/lynx.h: Likewise. + * config/netware.h: Likewise. + * config/psos.h: Likewise. + * config/alpha/alpha-interix.h: Likewise. + * config/alpha/elf.h: Likewise. + * config/arc/arc.h: Likewise. + * config/arm/aof.h: Likewise. + * config/arm/coff.h: Likewise. + * config/arm/elf.h: Likewise. + * config/c4x/c4x.h: Likewise. + * config/h8300/h8300.h: Likewise. + * config/i386/cygwin.h: Likewise. + * config/i386/djgpp.h: Likewise. + * config/i386/i386-coff.h: Likewise. + * config/i386/i386-interix.h: Likewise. + * config/i386/sco5.h: Likewise. + * config/i386/vsta.h: Likewise. + * config/i386/win32.h: Likewise. + * config/i960/i960-coff.h: Likewise. + * config/ia64/sysv4.h: Likewise. + * config/m68hc11/m68hc11.h: Likewise. + * config/m68k/coff.h: Likewise. + * config/m68k/mot3300.h: Likewise. + * config/m88k/m88k.h: Likewise. + * config/mcore/mcore-pe.h: Likewise. + * config/mcore/mcore.h: Likewise. + * config/mips/elf.h: Likewise. + * config/mips/elf64.h: Likewise. + * config/mips/iris6.h: Likewise. + * config/pa/pa64-hpux.h: Likewise. + * config/rs6000/sysv4.h: Likewise. + * config/sh/sh.h: Likewise. + * config/sparc/litecoff.h: Likewise. + + * config/svr3.h (CTORS_SECTION_ASM_OP): Remove. + (CTORS_SECTION_FUNCTION, DTORS_SECTION_FUNCTION): Remove. + (ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR): Remove. + * config/1750a/1750a.h (ASM_OUTPUT_CONSTRUCTOR): Remove. + (ASM_OUTPUT_DESTRUCTOR): Remove. + * config/a29k/a29k.c: Move include of tree.h. + * config/a29k/udi.h: Delete file. + * config/alpha/alpha.c (vms_asm_out_constructor): New. + (vms_asm_out_destructor): New. + * config/alpha/vms.h (EXTRA_SECTIONS): No ctors/dtors. + (EXTRA_SECTION_FUNCTIONS): Likewise. + (ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR): Remove. + (TARGET_ASM_CONSTRUCTOR, TARGET_ASM_DESTRUCTOR): New. + * config/c4x/c4x.c: Move include of tree.h. + * config/clipper/clipper.c (clix_asm_out_constructor): New. + (clix_asm_out_destructor): New. + * config/clipper/clix.h (ASM_OUTPUT_CONSTRUCTOR): Remove. + (ASM_OUTPUT_DESTRUCTOR): Remove. + (TARGET_ASM_CONSTRUCTOR, TARGET_ASM_DESTRUCTOR): New. + * config/i386/aix386.h (ASM_OUTPUT_CONSTRUCTOR): Remove. + (TARGET_ASM_CONSTRUCTOR): New. + * config/i386/i386.c (ix86_svr3_asm_out_constructor): New. + (sco_asm_out_constructor): New. + * config/i386/sco5.h (TARGET_ASM_CONSTRUCTOR): New. + * config/i386/svr3gas.h: Remove stack grows up code. + Remove code duplicated from i386/sysv3.h. + (TARGET_ASM_CONSTRUCTOR): New. + (ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR): Remove. + (DTORS_SECTION_FUNCTION, CTORS_SECTION_FUNCTION): Remove. + * config/i386/sysv3.h (ASM_OUTPUT_CONSTRUCTOR): Remove. + (TARGET_ASM_CONSTRUCTOR): New. + * config/m68hc11/m68hc11.c (m68hc11_asm_out_constructor): New. + (m68hc11_asm_out_destructor): New. + * config/m68hc11/m68hc11.h (TARGET_ASM_CONSTRUCTOR): New. + (TARGET_ASM_DESTRUCTOR): New. + * config/m68k/auxgas.h: Don't undef ASM_OUTPUT_*STRUCTOR. + * config/m68k/dpx2.h: Properly undef all the bits inherited from + config/svr3.h pertaining to section manipulation. + * config/m68k/dpx2g.h: Remove #if 0 code. + * config/m68k/m68k.c (m68k_svr3_asm_out_constructor): New. + * config/m68k/tower-as.h (ASM_OUTPUT_SOURCE_LINE): Fix typo. + (ASM_OUTPUT_CONSTRUCTOR): Remove. + (TARGET_ASM_CONSTRUCTOR): New. + * config/m88k/m88k.c (m88k_layout_frame): Don't use assign_stack_local. + (m88k_svr3_asm_out_constructor): New. + (m88k_svr3_asm_out_destructor): New. + * config/m88k/sysv3.h (ASM_OUTPUT_CONSTRUCTOR): Remove. + (ASM_OUTPUT_DESTRUCTOR): Remove. + (TARGET_ASM_CONSTRUCTOR, TARGET_ASM_DESTRUCTOR): New. + * config/mips/mips.h: Remove #if 0 ASM_OUTPUT_*STRUCTOR code. + * config/rs6000/aix.h: Likewise. + * config/mips/rtems64.h: Don't undef removed constructor related bits. + * config/mips/vxworks.h: Likewise. + * config/rs6000/lynx.h: Likewise. + * config/sh/elf.h: Likewise. + * config/rs6000/sysv4.h (CTORS_SECTION_ASM_OP): New. + (DTORS_SECTION_ASM_OP): New. + * config/sparc/linux64.h (ASM_OUTPUT_CONSTRUCTOR): Remove. + (ASM_OUTPUT_DESTRUCTOR): Remove. + * config/sparc/sol2-sld-64.h: Likewise. + * config/vax/vax.c (vms_asm_out_constructor): New. + (vms_asm_out_destructor): New. + * config/vax/vms.h (ASM_OUTPUT_CONSTRUCTOR): Remove. + (ASM_OUTPUT_DESTRUCTOR): Remove. + (TARGET_ASM_CONSTRUCTOR, TARGET_ASM_DESTRUCTOR): New. + + * doc/tm.texi (@node Initialization): Update. + + 2001-08-09 Richard Henderson + + * config/alpha/crtbegin.asm (__JCR_LIST__): New. + (__do_global_dtors_aux): Use gp-relative static data to avoid + one dynamic relocation. + (__do_frame_setup): Register Java classes. + * config/alpha/crtend.asm (__JCR_END__): New. + + 2001-08-09 Zack Weinberg + + * Makefile.in (HOST_CFLAGS): Take out -DGENERATOR_FILE. + (CONFIG_H, TCONFIG_H, TM_P_H): Update. + (GEN, STAGESTUFF): Add new files. + (insn-constants.h, s-constants, tm-preds.h, s-preds, + genconstants, genpreds, genconstants.o, genpreds.o): New rules. + (hashtab.o, safe-ctype.o): Add -DGENERATOR_FILE. + * mkconfig.sh: Include tm-preds.h in tm_p.h; insn-constants.h + as well as insn-codes.h and insn-flags.h in config.h; and no + extra headers in tconfig.h and hconfig.h. + + * gencodes.c: Eliminate code to generate predicate declarations + or #defines for md-file constants. + * genconstants.c, genpreds.c: New files. + + * i386.md: Re-order guard expressions such that TARGET_64BIT + comes first, when this permits better optimization. Add + TARGET_64BIT to more x86-64 patterns. Add comment explaining + why this is desirable. + + 2001-08-09 Jakub Jelinek + + * config/ia64/fde-glibc.c: Require glibc 2.2.4+ headers. + (find_fde_for_dso): Remove. + (_Unwind_IteratePhdrCallback): New. + (_Unwind_FindTableEntry): Use dl_iterate_phdr. + * config/ia64/crtbegin.asm (__ia64_app_header): Remove. + + Thu Aug 9 11:30:20 2001 Richard Kenner + + * expr.c (emit_single_push_insn): Only exists ifdef PUSH_ROUNDING. + (move_by_pieces_1): If would call it, abort if no PUSH_ROUNDING. + + 2001-08-09 Graham Stott + + * sched-vis.c (MAX_VISUAL_NO_UNIT): Define. + (vis_no_unit): Use it. + (visualize_no_unit): Add the insn only if room exists. + + 2001-08-09 Graham Stott + + * predict.c (estimate_probability): Replace magic numbers with + appropriate enumeration. + + 2001-08-09 Graham Stott + + * cppexp.c (EXTRACT_PRIO): Uppercase and parenthsize macro + parameter. + (EXTRACT_FLAGS): Likewise. + + 2001-08-09 Aldy Hernandez + + * config/mips/mips.c (mips_legitimate_address_p): Check for + CONST_INT in last patch. + + 2001-08-08 Anthony Green + + * java/class.c (emit_register_classes): Use assemble_jcr if + possible. Keep the original mechanism as a fallback. + * defaults.h (JCR_SECTION_NAME): Define if we have named section + and weak symbol support. + * crtstuff.c (__JCR_LIST__): Define. + (__JCR_END__): Define. + (_Jv_RegiserClasses): Define weak symbol if possible. + (__do_global_ctors_aux): Register classes for ELF targets with + weak symbol support. + + 2001-08-08 Kazu Hirata + + * dbxout.c: Fix comment formatting. + * dependence.c: Likewise. + * df.c: Likewise. + * diagnostic.c: Likewise. + * dominance.c: Likewise. + * doprint.c: Likewise. + * dwarf2out.c: Likewise. + * dwarfout.c: Likewise. + * emit-rtl.c: Likewise. + * except.c: Likewise. + * explow.c: Likewise. + * expmed.c: Likewise. + * expr.c: Likewise. + * flow.c: Likewise. + * fold-const.c: Likewise. + * function.c: Likewise. + + 2001-08-08 Franz Sirl + + * global.c (retry_global_alloc): Avoid shadowing allocno. + + 2001-08-08 Mark Mitchell + + * except.c (remove_fixup_regions): Fix typo. + + 2001-08-08 Jan van Male + + * emit-rtl.c (adjust_address, adjust_address_nv): Cast offset to + unsigned HOST_WIDE_INT to avoid warning. + * final.c (final): Cast INSN_UID to unsigned to avoid warning. + * flow.c (set_block_for_new_insns): Likewise. + + Wed Aug 8 21:08:14 CEST 2001 Jan Hubicka + + * sibcall.c (return_value_pseudo): New static variable. + (skip_copy_to_return_value): Handle return_value_pseudo. + (call_ends_block_p): Ensure that return_value_pseudo is set. + (optimize_sibling_and_tail_recursive_call): Discover the + load of pseudo return value in alternate exit block. + + Wed Aug 8 21:06:43 CEST 2001 Jan Hubicka + + * calls.c (ECF_ALWAYS_RETURN): New constant. + (emit_call_1): Add REG_ALWAYS_RETURN note if needed. + (expand_call): Use LCF_ALWAYS_RETURN for __bb_fork_func. + (emit_library_call_value_1): Handle LCT_ALWAYS_RETRUN. + * flow.c (need_fake_edge_p): Handle REG_ALWAYS_RETURN. + * rtl.c (reg_note_name): New name. + * rtl.h (enum reg_note): Add REG_ALWAYS_RETURN. + + 2001-08-07 Aldy Hernandez + + * config/mips/mips.c (mips_legitimate_address_p): Limit "la" addresses. + + 2001-08-08 Jason Merrill + + * alias.c (get_alias_set): Return a previously calculated + alias set for a VAR_DECL. + * function.c (gen_mem_addressof): Calculate the alias set before + touching the RTL. + + Wed Aug 8 18:44:37 CEST 2001 Jan Hubicka + + * predict.def: Set hitrates according our experimental run. + + Wed Aug 8 18:01:58 CEST 2001 Jan Hubicka + + * i386.h (HARD_REGNO_RENAME_OK): New macro. + + 2001-08-08 H.J. Lu + + * config/mips/mips.c (mips_unique_section): New. Copied from + config/mips/elf.h. + + * config/mips/mips-protos.h (mips_unique_section): New + prototype. + + * config/mips/elf.h (UNIQUE_SECTION): Use mips_unique_section. + + * config/mips/little.h: New. Generic little endian mips + targets. Only mips*-*-linux* is converted to use it so far. + + * config/mips/linux.h: Include "gofast.h" and "mips/mips.h". + (WCHAR_TYPE): Defined + (WCHAR_TYPE_SIZE): Likewise. + (INIT_SUBTARGET_OPTABS): Likewise. + (BSS_SECTION_ASM_OP): Likewise. + (SBSS_SECTION_ASM_OP): Likewise. + (ASM_OUTPUT_ALIGNED_BSS): Likewise. + (ASM_DECLARE_OBJECT_NAME): Likewise. + (UNIQUE_SECTION): Likewise. + (EXTRA_SECTIONS): Likewise. + (ASM_OUTPUT_CONSTRUCTOR): Likewise. + (ASM_OUTPUT_DESTRUCTOR): Likewise. + (ASM_OUTPUT_DEF): Likewise. + (HANDLE_SYSV_PRAGMA): Removed. + (NO_IMPLICIT_EXTERN_C): Likewise. + (TARGET_MEM_FUNCTIONS): Likewise. + (STARTFILE_SPEC): Likewise. + (ENDFILE_SPEC): Likewise. + (LIB_SPEC): Likewise. + (INVOKE__main): Likewise. + (CTOR_LIST_BEGIN): Likewise. + (CTOR_LIST_END): Likewise. + (DTOR_LIST_BEGIN): Likewise. + (DTOR_LIST_END): Likewise. + (SET_ASM_OP): Likewise. + (ASM_OUTPUT_SOURCE_LINE): Likewise. + (ASM_OUTPUT_DEF): Likewise. + (ASM_OUTPUT_IDENT): Likewise. + + * config/mips/mips.h (ASM_SPEC): Undefine before define. + (CPLUSPLUS_CPP_SPEC): Likewise. + (ASM_APP_ON) Redefine only if not defined. + (ASM_APP_OFF): Likewise. + (ASM_OUTPUT_SOURCE_LINE): Likewise. + (ASM_OUTPUT_IDENT): Likewise. + + * config.gcc: Update tm_file for Linux/mips. + + 2001-08-08 Bernd Schmidt + + * cselib.c (cselib_record_sets): If insn is predicated, turn + sources into IF_THEN_ELSEs. + + * config/ia64/ia64.md (cond_opsi2_internal, cond_opsi2_internal_b): + Turn into define_insn_and_split. + + * sched-deps.c: Include "cselib.h". + (add_insn_mem_dependence, sched_analyze_1, sched_analyze_2): + Use cselib to turn memory addresses into VALUEs. + (sched_analyze): Call cselib_init/cselib_finish if necessary. + * sched-int.h (struct sched_info): New member USE_CSELIB. + * sched-ebb.c (ebb_sched_info): Initialize it. + * sched-rgn.c (rgn_sched_info): Likewise. + * Makefile.in (sched-deps.o): Update dependencies. + + * cselib.h (cselib_subst_to_values): Declare. + * cselib.c (cselib_subst_to_values): No longer static. Allow MEMs + that have no value and autoincs to be handled by generating a new + dummy value. + + 2001-08-08 Graham Stott + + * final.c (shorten_branches): Update the INSN_ADDRESSES of insns + within fixed length SEQUENCE. + + 2001-08-08 Graham Stott + + * diagnostic.h (diagnostic_format_decoder): Parenthesize macro parameter. + (diagnostic_prefixing_rule): Likewise. + (diagnostic_line_cutoff): Likewise. + (diagnostic_kind_count): Likewise. + + 2001-08-08 Graham Stott + + * alias.c (find_base_decl): Delete redundent assignment. + + 2001-08-08 Graham Stott + + * dependence.c (INDEX_LIMIT_CHECK): Uppercase macro parameter. + (abs): Uppercase and paranthesize macro parameter. + (MEM_DEPENDENCY): Add whitespace. + + 2001-08-08 Graham Stott + + * config/mips/mips.c (mips_legitimate_address_p): Fix enable checking + failure check for CONST_INT + + 2001-08-08 Graham Stott + + * flow.c (back_edge_of_syntactic_loop_p): Add whitespace. + (libcall_dead_p): Likewise. + + (mark_used_regs): Constify fmt. + (find_use_as_address): Likewise. + + 2001-08-08 Graham Stott + + * c-typeck.c (RESTORE_SPELLING_DEPTH): Uppercase and parenthesize macro + parameter. + + 2001-08-08 Graham Stott + + * combine.c (combine_simplify_rtx): Update comment and + remove erroneous test. + + 2001-08-07 Neil Booth + + * cppinit.c (cpp_finish): Pop the final buffer without comment. + * cpplex.c (_cpp_lex_token): Don't pop the final buffer; and + take care to avoid multiple no-newline at EOF warnings in that + case. + + Tue Aug 7 22:18:06 CEST 2001 Jan Hubicka + + * calls.c (expand_call): Do not emit INSN_SETJMP note. + (emit_library_call_value_1): Likewise. + (emit_call_1): Emit REG_SETJMP note. + * cse.c (cse_end_of_basic_block): Use REG_SETJMP instead + of INSN_SETJMP + * cselib.c (cselib_process_insn): Likewise. + * flow.c (propagate_block): Likewise. + * loop.c (find_and_verify_loops): Likewise. + * reload.c (find_equiv_regs): Likewise. + * reload1.c (reload): Likewise. + * resource.c (mark_referenced_resources, + mark_set_resources): Likewise. + * sched-deps (sched_analyze_insn, sched_analyze): Likewise. + * final.c (final_scan_insn): Remove NOTE_INSN_SETJMP. + * haifa-sched.c (unlink_other_notes): Likewise. + (reemit_notes): Likewise. + * sched-ebb.c (sched_ebb): Likewise. + * sched-rgc.c (sched_region): Likewise. + * rtl.c (note_insn_name): Likewise. + (reg_note_name): Add REG_SETJMP + * rtl.h (reg_note): Add REG_SETJMP. + (insn_note): Remove NOTE_INSN_SETJMP. + + * profile.c (branch_prob): Add fake edges for setjmp. + + 2001-08-07 Daniel Jacobowitz + + * config.gcc: Quote target_cpu_default2 correctly for + powerpc*-*-* targets. + + 2001-08-07 Neil Booth + + * cpplib.h, line-map.h: Update comments. + * cppmain.c (printer_init): Move inline. + (maybe_print_line, print_line): Take a map pointer. + (cb_ident, cb_define, cb_undef, cb_include, cb_def_pragma): Update. + (cb_file_change): Don't use prior value of print.map. + + 2001-08-07 David Edelsohn + + * doc/install.texi: Document fine-grained multilib configuration. + + Tue Aug 7 16:52:54 CEST 2001 Jan Hubicka + + * rtlanal.c (find_first_parameter_load): Call note_stores + only on the instructions. + + Tue Aug 7 14:56:16 CEST 2001 Jan Hubicka + + * alias.c (nonlocal_mentioned_p): + Rename CONST_CALL_P to CONST_OR_PURE_CALL_P + * calls.c (emit_call_1): Likewise. + * cse.c (cse_insn, invalidate_skipped_block): Likewise. + * cselib.c (cselib_process_insn): Likewise. + * df.c (df_insns_modify): Likewise. + * flow.c (need_fake_edge_p): Likewise. + (propagate_one_insn): Likewise. + * haifa-sched.c (reemit_notes): Likewise. + * integrate.c (copy_insn_list): Likewise. + * jump.c (delete_prior_computation): Likewise. + * local-alloc.c (validate_equiv_mem): Likewise. + * loop.c (scan_loop): Likewise. + * predict.c (estimate_probability): Likewise. + * reload.c (reload): Likewise. + * sched-deps (sched_analyze): Likewise. + * rtl.h (CONST_CALL_P): rename to CONST_OR_PURE_CALL_P. + * gcse.c (compute_hash_table): Likewise. + (mark_call): Likewise. + (store_killed_in_insn): Likewise. + + 2001-08-07 Jason Merrill + + * c-semantics.c (make_rtl_for_local_static): Use DECL_RTL_SET_P. + + 2001-08-06 Richard Henderson + + * varasm.c (assemble_gc_entry): Remove. + * output.h: Likewise. + + 2001-08-06 Richard Henderson + + * varasm.c (assemble_constructor): Take a symbol_ref and a + priority instead of a bare string. Move priority handling + here from cp/decl2.c. + * output.h: Update decls. + + * c-decl.c (c_expand_body): Update calls to assemble_constructor + and assemble_destructor. + * profile.c (output_func_start_profiler): Likewise. + * objc/objc-act.c (finish_objc): Likewise. + (build_module_descriptor): Return the symbol not the symbol name. + + 2001-08-06 David Edelsohn + + * config/rs6000/darwin.h (DOUBLE_INT_ASM_OP): Add whitespace. + * config/rs6000/linux64.h (RS6000_MCOUNT): Define. + ({SAVE,RESTORE}_FP_{PREFFIX,SUFFIX}): Define. + * config/rs6000/rs6000.h (ASM_OUTPUT_DOUBLE_INT): Remove whitespace. + * config/rs6000/sysv4.h (DOUBLE_INT_ASM_OP): Add whitespace. + * config/rs6000/xcoff.h (DOUBLE_INT_ASM_OP): Add whitespace. + + 2001-08-06 Neil Booth + + * cpperror.c (print_containing_files): Moved to line-map.c. + (print_location): line-map.c handles re-listing or otherwise. + * cpphash.h (struct lexer_state): Remove next_bol. + (struct cpp_buffer): Remove include_stack_listed. + * cpplib.c (do_line, cpp_push_buffer, _cpp_pop_buffer): + Remove faked buffer handling. + (_cpp_do_file_change): Tweak. + * cpplib.h (enum cpp_buffer_type): Remove BUF_FAKE. + * cppmain.c (struct printer): Remove filename. + (print_line, cb_file_change): Update accordingly. + * line-map.c: Include intl.h. + (init_line_maps): Initialize last_listed. + (free_line_maps): Sanity check, warn if ENABLED_CHECKING. + (add_line_map): Sanity check inputs, warn if ENABLED_CHECKING. + (print_containing_files): New. + * line-map.h (struct line_maps): New member last_listed. + (print_containing_files, INCLUDED_FROM): New. + * Makefile.in: Update. + * po/POTFILES.in: Add line-map.c. + + 2001-08-06 Richard Henderson + + * except.c (convert_from_eh_region_ranges_1): Never mark + USE or CLOBBER insns as throwing. + + * expr.c (store_constructor): Don't clobber memory targets. + + 2001-08-06 Andreas Jaeger + + * profile.c (branch_prob): Remove unused variable insn. + + * Makefile.in (local-alloc.o): Add dependency on except.h. + + * local-alloc.c: Include except.h for can_throw_internal prototype. + + 2001-08-06 Richard Henderson + + * config/i386/i386.h (FORCE_PREFERRED_STACK_BOUNDARY_IN_MAIN): New. + * function.c (expand_main_function): Implement it. + * doc/tm.texi: Document it. + + 2001-08-06 Stan Shebs + + * doc/install.texi: Document powerpc-*-darwin* details. + + 2001-08-06 Daniel Berlin + + * config/rs6000/aix.h (CPP_CPU_SPEC): Move back to rs6000.h + (ASM_CPU_SPEC): Move back to rs6000.h + #undef CPP_DEFAULT_SPEC and ASM_DEFAULT_SPEC before redefining them. + + * config/rs6000/darwin.h (DOUBLE_INT_ASM_OP): New macro. + + * config/rs6000/linux.h: Remove vtable thunks stuff we accidently + readded. + + * config/rs6000/linux64.h: Ditto. + + * config/rs6000/rs6000.h: Move CPP_CPU_SPEC and ASM_CPU_SPEC back + to here. Define default ASM_DEFAULT_SPEC and CPP_DEFAULT SPEC to + nothing. + + Remove accidently readded definitions of FUNCTION_PROLOGUE, + FUNCTION_EPILOGUE, ASM_OPEN_PAREN, ASM_CLOSE_PAREN + + * config/rs6000/sysv4.h: Move CPP_CPU_SPEC and ASM_CPU_SPEC back + to rs6000.h + + 2001-08-05 Richard Henderson + + * local-alloc.c (update_equiv_regs): Do not move insns that + can throw. + + 2001-08-05 Jan Hubicka + + * Makefile.in (reload1.o): Add dedendancy on except.h + * basic-block.h (purge_all_dead_edges, purge_dead_edges): Update + prototypes. + * flow.c (purge_dead_edges, purge_all_dead_edges): Return bool + indicating wehther edges has been cleaned up. + * reload1.c: Inlucde except.h + (fixup_abnormal_edges): Accept deleted insns. + * toplev.c (rest_of_compilation): Purge dead edges unconditionally + after combine. + + 2001-08-06 Neil Booth + + * cpplib.c (do_line): Correct line number after pop_buffer. + + 2001-08-05 Neil Booth + + PR preprocessor/3824 + * line-map.c: Update comments. + * line-map.h: Update comments. + * tradcif.y: Don't consider large numbers unsigned. + + 2001-08-05 Neil Booth + + PR preprocessor/3081 + * c-lex.c (map): New. + (cb_file_change): Update map and use it. + (cb_def_pragma, cb_define, cb_undef): Use map and line. + (c_lex): Update to use map. + * cpperror.c (print_location): Move to using logical line numbers. + * cppfiles.c (stack_include_file): Update for new _cpp_do_file_change. + (cpp_make_system_header): Similarly. + (_cpp_execute_include): Stop line numbering hacks. Store the + line we will return to. + * cpphash.h (CPP_BUF_LINE): Remove. + (struct cpp_buffer): Remove lineno and pseudo_newlines. + Add map and return_to_line. + (_cpp_do_file_change): Update. + * cppinit.c (cpp_start_read): Update line kludge. + * cpplex.c (handle_newline): Don't update lineno and pseudo_newlines. + (trigraph_ok): Use logical line numbers for diagnostics. + (skip_block_comment): Likewise. + (skip_whitespace): Likewise. + (skip_line_comment): Use pfile->line instead. + (_cpp_lex_token): Update to use logical line numbering exclusively. + Handle BOL locally. Accept new lines in directives, but keep + pfile->line decremented. Diagnostics use logical lines. Update + directive handling. + * cpplib.c (SEEN_EOL): New. + (skip_rest_of_line, check_eol): Use it. + (end_directive): Increase line number when accepting the newline + at the end of a directive. + (run_directive): Simplify. + (do_line): Bad LC_LEAVEs become LC_RENAMEs. Update. + (_cpp_do_file_change): Update to take buffer line number as an + argument, and store the current map in the cpp_reader. Remove + line number kludges. + (_cpp_do__Pragma): Restore output position after a _Pragma. + (cpp_push_buffer): Don't set output line or lineno. + (_cpp_pop_buffer): Transfer more info from a faked buffer. + Remove line kludge. Set output_line. + * cppmacro.c (builtin_macro): Update handling of __LINE__. + (parse_arg): Use logical lines. + (save_lookahead_token): Save EOFs too now. + * cppmain.c (struct printer): Fix comments. + (printer_init): Simplify, let caller do errors. + (scan_translation_unit, check_multiline_token, dump_macro): Update. + (maybe_print_line): Simplify. + (print_line): Don't print a linemarker if -P. + (cb_define, cb_undef, cb_def_pragma, cb_ident, cb_include): Update. + (cb_file_change): Simplify. + * line-map.h (LAST_SOURCE_LINE): Fix. + (CURRENT_LINE_MAP): New. + + 2001-08-05 Bernd Schmidt + + * doloop.c (doloop_modify_runtime): Properly compute number of + iterations if loop was unrolled. + + * alias.c (rtx_equal_for_memref_p): VALUEs are only identical + if their CSELIB_VAL_PTRs are. + + * config/ia64/ia64.c (struct spill_fill_data): New member prev_insn. + (setup_spill_pointers): Initialize it. + (spill_restore_mem): Set it. + (do_spill, do_restore): Use it to add REG_INC note. + * config/ia64/ia64.md (movti_internal): Add REG_INC notes as needed. + + * config/ia64/ia64.c (ia64_sched_reorder): Defer scheduling of + asms if other insns are available. + + * config/ia64/ia64.c (condop_operator): New predicate. + * config/ia64/ia64.h (PREDICATE_CODES): Add it. + * config/ia64/ia64.md (cond_opsi2_internal and splitters): New + patterns. + + * expr.c (expand_expr, case COND_EXPR): Prefer working with a + temporary register than directly using a MEM. + + 2001-08-04 Hans-Peter Nilsson + + * config/sh/sh.c (sh_asm_named_section): Fix typo in align + parameter in last change. + + 2001-08-04 Zack Weinberg + + * sparc.md: Don't use #if inside C test expression. + + 2001-08-04 Richard Henderson + + * i386.c: Revert 07-30 ix86_output_main_function_alignment_hack. + + 2001-08-04 Neil Booth + + * cpphash.h (struct cpp_reader): New member directive_line. + * cpplib.h (struct cpp_callbacks): Update prototypes of callbacks. + * cpplib.c (do_define, do_undef, do_ident, do_include_common, + do_pragma): Pass line to callbacks. + (start_directive): Record line of directive. + * cppmain.c (cb_ident, cb_define, cb_undef, cb_def_pragma, + cb_include): Similarly. + * c-lex.c (cb_ident, cb_define, cb_undef, cb_def_pragma): + Similarly. + + 2001-08-04 Hans-Peter Nilsson + + * config/d30v/d30v.h: Fix typo in start of UNIQUE_SECTION + comment. + + Sat Aug 4 13:51:36 CEST 2001 Jan Hubicka + + * loop.c (try_copy_prop); Kill invalidated REG_EQUAL notes. + + * reload1.c (fixup_abnormal_edges): New static function. + (reload): Use it. + + * flow.c (need_fake_edge_p): New function. + (flow_call_edges_add): Fix handling of noreturn and sibling calls; + avoid call insn to be very last insn in the insn stream. + + * profile.c (branch_prob): Call flow_call_edges_add instead of + doing that by hand; cleanup cfg to re-merge basic blocks once + we are done. + + 2001-08-04 Neil Booth + + * Makefile.in (CPPLIB_H): New, so that dependencies on cpplib.h + are also on line-map.h. + * cppfiles.c (stack_include_file): Update. + * cpphash.h (struct cpp_buffer): New member return_at_eof. + (_cpp_pop_buffer): New. + * cppinit.c (cpp_destroy, cpp_finish): Update. + (do_includes): Mark each buffer to return at EOF. + * cpplex.c (_cpp_lex_token): Pop buffers at EOF. Continue or + return as requested. + * cpplib.c (run_directive, do_line, cpp_push_buffer): Update. + (cpp_pop_buffer): Rename _cpp_pop_buffer. Stop skipping. + * cpplib.h (cpp_pop_buffer): Remove. + (cpp_scan_buffer_nooutput): Rename cpp_scan_nooutput. + * cppmacro.c (cpp_scan_buffer_nooutput): Similarly. No need to pop + buffers. + * cppmain.c (scan_buffer): Rename scan_translation_unit. No need + to pop buffers. + (do_preprocessing): Update. + * fix-header.c (read_scan_file): Update. No need to pop buffers. + * c-parse.in (_yylex): Similarly. + * scan-decls.c (scan_decls): Similarly. + * line-map.h: Update comments. + + * objc/Make-lang.in (objc-act.o): Update dependencies. + + 2001-08-04 Stephane Carrez + + * config/m68hc11/m68hc11.md ("cmphi_1", "cmpqi_1"): Allow memory + and soft register for operand 0. + ("cmphi_z_used", "cmpqi_z_used"): Allow memory for operand 0. + + 2001-08-04 Stephane Carrez + + * config/m68hc11/m68hc11.md ("bitcmpqi"): Allow memory and soft + register for operand 0. + ("bitcmpqi_z_used"): Allow memory for operand 0. + (split "bitcmpqi"): New split to handle address reg as operand 1. + + 2001-08-04 Andreas Jaeger + + * gcse.c: Revert Daniel's last patch. + + 2001-08-03 Zack Weinberg + + * sparc-protos.h: Add prototypes for fp_zero_operand and + reg_or_0_operand. + * sh-protos.h: Add prototype for fpul_operand. + + 2001-08-04 Hans-Peter Nilsson + + * doc/extend.texi (Other Builtins): Fix typo in last change. + + 2001-08-03 Richard Henderson + + * target.h (gcc_target): Add asm_out.named_section, + section_type_flags, have_named_sections. + * target-def.h (TARGET_ASM_NAMED_SECTION): New. + (TARGET_HAVE_NAMED_SECTIONS): New. + (TARGET_SECTION_TYPE_FLAGS): New. + + * Makefile.in (toplev.o): Depend on TARGET_H. + (varasm.o, dbxout.o): Likewise. + * c-common.c (decl_attributes): Check targetm.have_named_sections + instead of ifdef ASM_OUTPUT_SECTION_NAME. + * dbxout.c (dbxout_function_decl): Likewise. + (dbxout_function_end): Likewise. + * toplev.c (compile_file): Likewise. + * varasm.c (exception_section): Likewise. + * cp/decl2.c (finish_objects): Likewise. + + * defaults.h (EH_FRAME_SECTION): Remove. + (EH_FRAME_SECTION_ASM_OP): Remove. + (EH_FRAME_SECTION_NAME): New. + (UNIQUE_SECTION): Don't depend on ASM_OUTPUT_SECTION_NAME. + (UNIQUE_SECTION_P): Remove. + * dwarf2out.c (SECTION_FORMAT): Remove. + (ASM_OUTPUT_SECTION): Remove. + (output_call_frame_info): Use named_section_flags. + (output_comp_unit, dwarf2out_start_source_file): Likewise. + (dwarf2out_end_source_file, dwarf2out_define): Likewise. + (dwarf2out_undef, dwarf2out_init, dwarf2out_finish): Likewise. + * varasm.c (in_eh_frame, eh_frame_section): Remove. + (named_section_flags): New. + (named_section): Use it and targetm.section_type_flags. + (resolve_unique_section): New. + (assemble_start_function): Use it. + (asm_emit_uninitialised, assemble_variable): Likewise. + (default_section_type_flags): New. + (default_no_named_section, default_elf_asm_named_section): New. + (default_coff_asm_named_section, default_pe_asm_named_section): New. + * output.h: Update varasm.c decls. + (SECTION_*): New flags. + + * crtstuff.c: Check EH_FRAME_SECTION_NAME not EH_FRAME_SECTION_ASM_OP. + (__EH_FRAME_BEGIN__, __FRAME_END__): Use attribute section. + + * config/elfos.h (UNIQUE_SECTION_P): Remove. + * config/alpha/elf.h, config/arm/linux-elf.h: Likewise. + * config/arm/pe.h, config/arm/unknown-elf.h: Likewise. + * config/i386/cygwin.h, config/i386/djgpp.h: Likewise. + * config/i386/i386-interix.h, config/i386/win32.h: Likewise. + * config/ia64/sysv4.h, config/mcore/mcore-pe.h: Likewise. + * config/mips/elf.h, config/mips/elf64.h: Likewise. + * config/mips/iris6gld.h, config/mips/mips.h: Likewise. + * config/pa/pa64-hpux.h, + + * config/elfos.h (ASM_OUTPUT_SECTION_NAME): Remove. + (TARGET_ASM_NAMED_SECTION): New. + * config/psos.h, config/a29k/a29k.h, config/alpha/elf.h: Likewise. + * config/alpha/vms.h, config/arm/coff.h: Likewise. + * config/arm/conix-elf.h, config/arm/elf.h: Likewise. + * config/arm/linux-elf.h, config/arm/pe.h: Likewise. + * config/arm/unknown-elf.h, config/avr/avr.h: Likewise. + * config/c4x/c4x.h, config/h8300/h8300.h: Likewise. + * config/i386/cygwin.h, config/i386/djgpp.h: Likewise. + * config/i386/i386-interix.h, config/i386/i386elf.h : Likewise. + * config/i386/sco5.h, config/i386/win32.h: Likewise. + * config/m68k/coff.h, config/mcore/mcore-pe.h: Likewise. + * config/mcore/mcore.h, config/mips/elf.h: Likewise. + * config/mips/elf64.h, config/mips/iris6.h: Likewise. + * config/mips/netbsd.h, config/mips/openbsd.h: Likewise. + * config/pa/pa64-hpux.h, config/rs6000/sysv4.h: Likewise. + * config/rs6000/xcoff.h, config/sh/sh.h: Likewise. + * config/sparc/sysv4.h: Likewise. + + * config/nextstep.h: Error until named sections implemented. + + * config/a29k/a29k.c (a29k_asm_named_section): New. + * config/alpha/alpha.c (SECTION_VMS_OVERLAY): New. + (vms_section_type_flags, vms_asm_named_section): New. + * config/arm/arm.c (arm_elf_asm_named_section): New. + * config/avr/avr.c (asm_output_section_name): Remove. + * config/avr/avr-protos.h: Update. + * config/c4x/c4x.c (c4x_asm_named_section): New. + * config/h8300/h8300.c (h8300_asm_named_section): New. + * config/i386/i386.c (sco_asm_named_section): New. + * config/i386/winnt.c (SECTION_PE_SHARED): New. + (i386_pe_section_type_flags): New. + (i386_pe_asm_named_section): New. + * config/i386/i386-protos.h: Update. + * config/m68k/m68k.c (m68k_coff_asm_named_section): New. + * config/mcore/mcore.c (mcore_asm_named_section): New. + * config/mips/mips.c (iris6_asm_named_section): New. + * config/mips/mips.h (ENCODE_SECTION_INFO): Use DECL_ONE_ONLY + instead of UNIQUE_SECTION_P. + * config/rs6000/rs6000.c (rs6000_elf_section_type_flags): New. + (xcoff_asm_named_section): New. + * config/sh/sh.c (sh_asm_named_section): New. + * config/sparc/sparc.c (sparc_elf_asm_named_section): New. + + * config/i386/djgpp.h (EH_FRAME_SECTION_ASM_OP): Remove. + * config/i386/sco5.h (EH_FRAME_SECTION_ASM_OP*): Remove. + (EH_FRAME_SECTION_NAME): New. + (EXCEPTION_SECTION): New. + * config/ia64/ia64.h (EH_FRAME_SECTION_ASM_OP): Remove. + (DEBUG_*_SECTION): Remove. + * config/m68k/rtemself.h (EH_FRAME_SECTION_ASM_OP): Remove. + * config/mips/iris6.h (DEBUG_*_SECTION): Remove. + (EH_FRAME_SECTION_ASM_OP): Remove. + + * doc/tm.texi (UNIQUE_SECTION_P): Remove. + (ASM_OUTPUT_SECTION_NAME): Remove. + (TARGET_ASM_NAMED_SECTION): New. + (TARGET_HAVE_NAMED_SECTIONS): New. + (TARGET_SECTION_TYPE_FLAGS): New. + (EH_FRAME_SECTION_ASM_OP): Remove. + (EH_FRAME_SECTION_NAME): New. + + 2001-08-03 Zack Weinberg + + * builtins.c (fold_builtin_constant_p): Return integer_zero_node + for complex expressions when cfun == 0. + * doc/extend.texi: Document that __builtin_constant_p can be + used in data initializers as well as functions. + + 2001-08-03 Alexandre Oliva + + * config/mn10300/mn10300.h (CONDITIONAL_REGISTER_USAGE): Declare + variable I locally, instead of expecting a declaration in the + calling context. + + 2001-08-03 Richard Henderson + + * except.c (collect_one_action_chain): Add an explicit cleanup + action if regions surrounding a catch were encoded entirely + within the call-site entry. + + 2001-08-03 Richard Henderson + + * dbxout.c (dbxout_symbol_location): Flatten subregs first; + don't take REGNO of a non-register. + + 2001-08-03 John David Anglin + + * gthr-dce.h (__GTHREAD_MUTEX_INIT_FUNCTION and + __GTHREAD_MUTEX_INIT_DEFAULT): New macros for mutex initialization. + (__gthread_key_delete): Remove code for __PTHREAD_LIBRARY_VERSION_1 >= 1 + (__gthread_mutex_init_function): New function for mutex initialization. + + 2001-08-03 Daniel Berlin + + * Makefile.in: Revert screwed up commit. + + 2001-08-03 Stephane Carrez + + * config/m68hc11/t-m68hc11-gas (T_CPPFLAGS): Add _ctor and _dtor. + * config/m68hc11/larith.asm (_exit): Split in several sub-sections + merged by linker script to get a final _exit(). + (__do_global_dtors): New for destructor handling in specific exit + section. + (__do_global_ctors): New for constructors in specific install section. + (__map_data_section): Map data sections before running constructors. + * config/m68hc11/m68hc11.h (INT_ASM_OP): Define to use .word. + (CTORS_SECTION_ASM_OP): Define to put in readonly section. + (DTORS_SECTION_ASM_OP): Likewise. + (CTORS_SECTION_FUNCTION): Define to force a reference to + __do_global_ctors. + (DTORS_SECTION_FUNCTION): Likewise for __do_global_dtors. + + 2001-08-03 Daniel Berlin + + * ChangeLog: Fix date on previous ChangeLog entry for GCSE. + + * Makefile.in: Add df.h to gcse.c dependencies. + + 2001-08-03 John David Anglin + + * varasm.c (output_constant_def_contents): Use for the length of a + string constant either its TREE_STRING_LENGTH or its int_size_in_bytes + depending on which is larger. + + 2001-08-03 Daniel Berlin + + * gcse.c: Include df.h for use as a dataflow analyzer. + Remove regvec. + Declaration of reg_set_info: gone. + New df_analyzer variable used by store motion. + (reg_set_info): Deleted. + (mark_mem_regs): New function, analyze regs used by a mem. + (store_ops_ok): Use dataflow analyzer results to determine if + necessary regs are changed in the block. + (find_moveable_store): Remove check for symbol ref, we can handle + much more complex expressions now. + (compute_store_table): Remove most of the code, it's unnecessary + now that the dataflow analyzer records the info for us. + (store_killed_after): Add parameter to say whether to do the + store_ops_okay test, used to speed up testing when we already know + the answer, and just want to know if the store itself was killed. + (build_store_vector): Largely rewritten to calculate the various + vectors properly, and somewhat optimized. + (store_motion): Init the df_analyzer, get REG_DEF chains. + Also handle trapping expressions (since mems almost always trap) + (simple_mem): Redefine what a simple mem is. + + 2001-08-03 DJ Delorie + + * ifcvt.c (noce_get_alt_condition): Don't make an auxiliary + set from a constant part of the condition. + + 2001-08-01 Andrew Cagney + + * mkdeps.c (deps_add_default_target): Make local variable + ``start'' a const char pointer. + * dwarf2out.c (compute_section_prefix): Localize use of ``p''. + + 2001-08-03 Rainer Orth + + * doc/install.texi (Configuration): Fix markup. + (Specific, i?86-*-udk): Likewise. + (Specific, alpha*-dec-osf*): Warn against --with-gnu-as, + --with-gnu-ld. + Document --enable-threads and --enable-libgcj status. + (Specific, mips-sgi-irix*): Canonicalize triples. + (Specific, mips-sgi-irix5): Warn about problems with this config. + Mention required GNU as patch. + Native assembler problems are fixed. + (Specific, mips-sgi-irix6): Update O32 ABI support status. + Document --enable-threads and --enable-libgcj status. + + 2001-08-02 Nick Clifton + + * Makefile.in, mklibgcc.in: Restore changes with fixed invocation + of mkinstalldirs. + + 2001-08-03 Richard Henderson + + * config/ia64/sysv4.h (ASM_OUTPUT_LABELREF): Don't write to + constant data. + + 2001-08-03 Richard Henderson + + * rtlanal.c (find_first_parameter_load): Stop if we + reach a CODE_LABEL at BOUNDARY. + + 2001-08-03 Richard Henderson + + * config/alpha/alpha.md (force_movdi): New insn. + * config/alpha/alpha.c (alpha_expand_prologue): Use it. + Tweek FRP marking of VMS prologue insns. + * config/alpha/vms.h (EPILOGUE_USES): New. + + 2001-08-02 Richard Henderson + + * Makefile.in, mklibgcc.in: Revert mkinstalldirs change. + + 2001-08-02 Lars Brinkhoff + + * combine.c, config.gcc, cse.c, defaults.h, real.c, reload.c, + simplify-rtx.c, config/alpha/alpha.h, config/avr/avr.h, + config/convex/convex.h, config/d30v/d30v.c, + config/d30v/d30v.h, config/dsp16xx/dsp16xx.h, + config/elxsi/elxsi.h, config/fr30/fr30.h, config/m88k/m88k.c, + config/mips/mips.h, config/mn10200/mn10200.h, + config/mn10300/mn10300.h, config/pdp11/pdp11.md, + config/v850/v850.h, config/vax/openbsd.h, + config/vax/openbsd1.h, config/vax/ultrix.h, + config/vax/vax-protos.h, config/vax/vax.c, config/vax/vax.h, + config/vax/vax.md, config/vax/vaxv.h, config/vax/xm-vms.h, + cp/decl2.c, doc/contrib.texi, doc/cpp.texi, doc/gcc.texi, + doc/install.texi, doc/invoke.texi, doc/md.texi, doc/rtl.texi, + doc/tm.texi: consistently use "VAX", "VAXen", and "MicroVAX" + in comments and documentation. + + 2001-08-03 Neil Booth + + * line-map.c: New. + * line-map.h: New. + * Makefile.in (line-map.o): New. + (LIBCPP_OBJS, LIBCPP_DEPS): Update. + * c-lex.c (cb_file_change): Update for new cpp_file_change structure. + * cpperror.c (print_containing_files): Similarly. + (print_location): Update. Don't output a space before _Pragma. + * cppfiles.c (stack_include_file): Set to line 1 immediately. + (stack_include_filee, cpp_make_system_header): Update. + (_cpp_execute_include): Get logical line number right for calling + as-yet-unterminated #include. + * cpphash.h (struct cpp_reader): Add line_maps. + (_cpp_do_file_change): Update. + * cppinit.c (cpp_create_reader): Initialize line maps. + (cpp_destroy): Destroy line maps. + (cpp_start_read): Get logical line number right. + * cpplex.c (parse_string): Only warn once for multi-line strings. + Use boolean variable for null warning. + * cpplib.c (_cpp_handle_directive): End the directive if it isn't + already. + (do_include_common): End the directive early. + (do_line): Don't warn about out-of-range lines in preprocessed + source. Update. Remove unused variables. + (_cpp_do_file_change): Update for new line mapping. + (pragma_cb): New typedef. + (cpp_register_pragma): Stop looking ahead before calling the + handler. Clean up. + (do_pragma_system_header): End directive early. + (cpp_get_line_maps): New. + (cpp_pop_buffer): Fudge logical line. Update. + * cpplib.h: Include line-map.h + (enum cpp_fc_reason): Remove. + (struct cpp_file_change): Update. + (cpp_get_line_maps): New. + * cppmain.c (struct_printer): New member map. + (cb_file_change): Update for new mappings. + * fix-header.c (cb_file_change): Similarly. + + 2001-08-02 Nick Clifton + + * Makefile.in (libgcc.mk): Define mkinstalldirs. + * mklibgcc.in: Use mkinstalldirs instead of mkdir. + + 2001-08-02 Lars Brinkhoff + + * config/vax/vax.c: include expr.h. + + 2001-08-02 Nick Clifton + + * Makefile.in ($(srcdir)/configure): Only rebuild in + maintainer mode. + ($(srcdir)/config.in): Only define in maintainer mode. + ($(srcdir)/cstamp-h.in): Only define in maintainer mode. + + 2001-08-02 David Edelsohn + + * doc/install.texi (Install GCC: Binaries): Update Bull info. + + 2001-08-02 Rainer Orth + + * gcc.c (set_collect_gcc_options): New function, split out from + main. + Ignore elided switches. + (do_spec_1): Invoke before executing command. + (set_input): Export. + Move declaration ... + * gcc.h (set_input): ... here. + * config/alpha/osf.h (ASM_FINAL_SPEC): Use %U.s to refer to input + file. + + 2001-08-02 Nathan Sidwell + + Kill -fhonor-std. + * doc/c-tree.texi (Namespaces): Remove std & -fhonor-std + interaction. + * doc/invoke.texi (C++ Dialect Options): Remove -fno-honor-std. + + 2001-08-02 Richard Sandiford + + * mips.md (movdicc): Make conditional on TARGET_64BIT. Likewise + for the unnamed instructions it expands to. + + 2001-08-02 Richard Henderson + + * regclass.c (call_really_used_regs): Conditionally define. + (init_reg_sets_1): Don't use it if not defined. + (fix_register): Similarly, don't set it. + + 2001-08-01 Gerald Pfeifer + + * params.def (PARAM_MAX_INLINE_INSNS): Change default to 600. + Correct comment that had been missed in the previous change. + + 2001-08-01 Stan Shebs + + * config/darwin.c (machopic_stub_name): Try matching by name. + (update_stubs): New function. + (darwin_encode_section_info): Call it and update_non_lazy_ptrs + unconditionally. + + 2001-08-01 Richard Henderson + + * except.c (output_function_exception_table): Use assemble_align. + * varasm.c (assemble_eh_label): Remove. + (assemble_eh_align, assemble_eh_integer): Remove. + + 2001-08-01 Robert Lipe + + * dwarfout.c: Remove reference to README.DWARF. + + 2001-08-01 Andrew MacLeod + + * regclass.c (call_really_used_regs): New array for registers which + are actually used by a call. + (init_reg_sets_1): Initialize regs_invalidated_by_call with the + new array. + (fix_register): Set call_really_used too. + * config/ia64/ia64.h (CALL_REALLY_USED_REGISTERS): Initialize. + * doc/tm.texi (CALL_REALLY_USED_REGISTERS): Document. + + 2001-08-01 Richard Henderson + + * read-rtl.c (read_name): Consider \r whitespace. + + 2001-07-11 Andrew Cagney + + * config.gcc: Recognize powerpc-*-netbsd*. + + * doc/install.texi (Host/target specific installation notes for + GCC): Mention powerpc-*-netbsd*. + + * config/rs6000/netbsd.h: New file. + (STANDARD_STARTFILE_PREFIX, LINK_SHLIB_SPEC): Redefine. + (LIB_DEFAULT_SPEC, STARTFILE_DEFAULT_SPEC): Redefine. + (ENDFILE_DEFAULT_SPEC, LINK_START_DEFAULT_SPEC): Redefine. + (LINK_OS_DEFAULT_SPEC, CPP_OS_DEFAULT_SPEC): Redefine. + (TARGET_VERSION): Redefine. + + * config/rs6000/t-ppccomm (MULTILIB_MATCHES_SYSV): Recognize + mcall-netbsd as a match for mcall-sysv. + (EXTRA_MULTILIB_PARTS): Add ncrti$(objext) and ncrtn$(objext). + (ncrti.S, ncrtn.S): New targets. + ($(T)ncrti$(objext), $(T)ncrtn$(objext)): New targets. + + * config/rs6000/sysv4.h (SUBTARGET_OVERRIDE_OPTIONS): Recognize + "netbsd' as a V4 ABI. + (ASM_SPEC): Check for -mcall-netbsd. + (CC1_SPEC, CC1_SPEC, LINK_START_SPEC, LINK_OS_SPEC): Ditto. + (CPP_ENDIAN_SPEC, CPP_SPEC, STARTFILE_SPEC): Ditto. + (LIB_SPEC, ENDFILE_SPEC): Ditto. + (LIB_NETBSD_SPEC, STARTFILE_NETBSD_SPEC): Define. + (ENDFILE_NETBSD_SPEC, LINK_START_NETBSD_SPEC): Define. + (LINK_OS_NETBSD_SPEC, CPP_OS_NETBSD_SPEC): Define. + (SUBTARGET_EXTRA_SPECS): Add NetBSD specs. + + * doc/invoke.texi (Option Summary): Add -mcall-netbsd. + (RS/6000 and PowerPC Options): Mention -mcall-netbsd. + + 2001-08-01 Mark Kettenis + + * unwind-pe.h (base_of_encoded_value, read_encoded_value): Define + only if NO_BASE_OF_ENCODED_VALUE isn't defined. + * unwind-dw2-fde.c (NO_BASE_OF_ENCODED_VALUE): Define before + including "unwind-pe.h". + + Wed Aug 1 20:01:42 CEST 2001 Jan Hubicka + + * rs6000.md (define_splits): Kill unused constraints. + + Wed Aug 1 20:02:12 CEST 2001 Graham Stott + Jan Hubicka + + * function.c (thread_prologue_and_epilogue_insns): Kill code + dealing with non-existent CFG. + + 2001-08-01 Kazu Hirata + + * alias.c: Fix comment formatting. + * bitmap.c: Likewise. + * builtins.c: Likewise. + * calls.c: Likewise. + * c-common.c: Likewise. + * c-decl.c: Likewise. + * c-dump.c: Likewise. + * c-lex.c: Likewise. + * collect2.c: Likewise. + * combine.c: Likewise. + * conflict.c: Likewise. + * cppfiles.c: Likewise. + * cppinit.c: Likewise. + * cpplex.c: Likewise. + * cpplib.c: Likewise. + * cppmacro.c: Likewise. + * cppspec.c: Likewise. + * c-pragma.c: Likewise. + * crtstuff.c: Likewise. + * cse.c: Likewise. + * cselib.c: Likewise. + * c-semantics.c: Likewise. + * c-typeck.c: Likewise. + + 2001-08-01 H.J. Lu + + * config/mips/linux.h (ASM_OUTPUT_IDENT): Defined. + + 2001-08-01 H.J. Lu + + * gcc/config/mips/linux.h (ASM_OUTPUT_SOURCE_LINE): Defined. + + 2001-08-01 Ziemowit Laski + + * c-parse.in (OBJC_NEED_RAW_IDENTIFIER): Define macro and flag for + contextualizing Objective-C class name lookup by the lexer. + (typespec_reserved_nonattr): Disable ObjC class name lookup after + seeing a TYPESPEC. + (protocoldef): Add support for forward @protocol declarations. + (yylexname): Suppress ObjC class name lookup in certain contexts; + re-enable after lookup is complete. + (_yylex): Re-enable ObjC class name lookup when certain + punctuation marks are seen. + + * objc/objc-act.c (check_protocol_recursively): New function used + for finding circular dependencies in protocols. + (objc_declare_protocols): New function for handling forward + @protocol declarations. + (receiver_is_class_object): Detect the case when 'self' is used + inside of a class method. + (build_message_expr): Issue a warning if class method is desired + but instance method is found instead. + (conforms_to_protocol): Streamline. + (objc_comptypes): Detect the fact that 'Bar foo' conforms to + protocol Foo, even if 'Bar foo' does not. + (check_protocols): Streamline. + (start_protocol): Add checks for circular and duplicate protocol + definitions. + (encode_aggregate_within): For typedefs of structs, encode the + underlying struct. + * objc/objc-act.h (PROTOCOL_DEFINED): New tree accessor. + (objc_declare_protocols): New prototype. + + 2001-08-01 Neil Booth + + * cpphash.h (struct cpp_reader): New members line, pseudo_newlines. + * cpplex.c (handle_newline): Update prototype. Maintain logical + line number. + (skip_escaped_newlines, skip_block_comment, parse_string): + Update accordingly. + (_cpp_lex_token): Update, and store token position within the token. + * cpplib.h (struct cpp_token): Add line and column entries. + * cppmacro.c (replace_args): Position stringified tokens correctly. + + 2001-08-01 Andreas Jaeger + + * basic-block.h: Add prototype for last_loop_beg_note. + + 2001-07-31 Alexandre Petit-Bianco + + * expr.c (safe_from_p): Use WITH_CLEANUP_EXPR_RTL instead of + RTL_EXPR_RTL while handling WITH_CLEANUP_EXPR nodes. Fixed typo in + comment. + (expand_expr): Use WITH_CLEANUP_EXPR_RTL instead of RTL_EXPR_RTL + while handling WITH_CLEANUP_EXPR node. Use second operand calling + expand_decl_cleanup. + * tree.c (firt_rtl_op): The third operand of WITH_CLEANUP_EXPR is + the first RTX. + (simple_cst_equal): WITH_CLEANUP_EXPR node to use its second + operand while calling simple_cst_equal. + * tree.def (WITH_CLEANUP_EXPR): Switched operands: the second + operand is the cleanup expression, the third is the RTL_EXPR. + * tree.h (WITH_CLEANUP_EXPR_RTL): New macro. + + 2001-07-31 Jeff Sturm + + * except.c (duplicate_eh_regions): Test n_array[i] for NULL. + + 2001-07-31 matthew green + + * config.gcc (i386-*-netbsdelf): New description. + * config/i386/netbsd-elf.h: New file. + + 2001-07-30 Geoffrey Keating + + * loop.c (check_dbra_loop): Use single_set to compute + jump_label. + + 2001-07-31 Daniel Berlin + + PowerPC reorg and support for powerpc64-*-linux*. + + Also fixes emitting of constants on 32 bit and 64 bit + platforms. + + * config.gcc: powerpc64-*-linux* is a new target. + Things that needed aix.h now also include xcoff.h + + * config/rs6000/rs6000.h: Split XCOFF specific stuff into + xcoff.h. + Move AIX specific stuff into aix.h. + (TARGET_AIX): Renamed to TARGET_XCOFF, since the AIX ABI is used + with more than just XCOFF now. + (SET_ASM_OP): Remove, now defined where needed. + (FUNCTION_PROLOGUE): New macro definition. + (FUNCTION_EPILOGUE): New macro definition. + (ASM_OPEN_PAREN, ASM_CLOSE_PAREN): New macro definition. + + * config/rs6000/xcoff.h: New file. + + * config/rs6000/linux64.h: New file. + + * config/rs6000/darwin.h: Copy needed AIX alignment definitions. + + 2001-07-31 Alan Modra + + * rs6000.c (print_operand_address): Handle ELF syntax. + (output_toc): Simplify. Use DOUBLE_INT_ASM_OP. + * rs6000.md (load_toc_aix_di): Handle ELF syntax. + * rs6000.h (ASM_OUTPUT_DOUBLE_INT, ASM_LONG): Use DOUBLE_INT_ASM_OP. + + 2001-07-31 David Edelsohn + + * rs6000.c (rs6000_override_options): Only disable + flag_function_sections for XCOFF. + (exact_log2_cint_operand): New predicate. + (reg_or_{add,sub}_cint64_operand): New predicates. + (add_operand): Compare CONST_INT with fewer function calls. + (rs6000_emit_set_const, rs6000_emit_set_long_const): New functions. + (print_operand, case 'p'): Ensure positive operand. + (rs6000_emit_load_toc_table): No load_toc_v4_pic_di. + * rs6000.h (CONST_OK_FOR_LETTER_P, case 'N'): Ensure positive value. + (PREDICATE_CODES): Add new predicates. + * rs6000.md (addsi3): Split 32-bit constants more correctly. + (divsi3, modsi3): Ensure positive power-of-2. + (adddi3): Use new predicate. Split 32-bit constants more + correctly. Re-arrange splitter to handle any constant. + (subdi3): Use new predicate. + (divdi3, moddi3): Ensure positive power-of-2. + (movdi): Use rs6000_emit_set_const. + (load_toc_v4_pic_di): Delete. + + 2001-07-31 Graham Stott + + * function.c (pad_below): Revert 2001-07-26 patch. + + Tue Jul 31 15:37:35 CEST 2001 Jan Hubicka + + * reg-stack (convert_regs_1): Fix best edge condition. + + Tue Jul 31 15:33:27 CEST 2001 Jan Hubicka + + * jump.c (duplicate_loop_exit_test): Better test for jumps + entering the loop; create loop pre_header. + + 2001-07-31 Hartmut Penner + + * doc/install.texi: Add s390 and s390x as new targets. + * doc/invoke.texi: Add documentation of S/390 and zSeries + target options. + * doc/md.texi: Add documentation of S/390 and zSeries constraints. + + 2001-07-30 Roman Zippel + + * config/m68k/m68k.md: Replace all general_operand with + nonimmediate_operand for all destinations. + * config/m68k/m68k.c (not_sp_operand): Likewise. + + Mon Jul 30 23:20:34 EDT 2001 John Wehle (john@feith.com) + + * flow.c (merge_blocks): Return 1 if an extra jump is inserted. + + 2001-07-30 Richard Henderson + + * config/ia64/ia64.h (DEBUG_RANGES_SECTION): New. + * config/mips/iris6.h (DEBUG_RANGES_SECTION): New. + + 2001-07-30 Roman Zippel + + * config/m68k/m68k.h (TARGET_SWITCHES/TARGET_OPTIONS): + Add missing doc strings + * config/m68k/linux-aout.h (SUBTARGET_SWITCHES): Likewise + * config/m68k/linux.h (SUBTARGET_SWITCHES): Likewise + + Mon Jul 30 22:16:08 CEST 2001 Jan Hubicka + + * i386.c (ix86_output_main_function_alignment_hack): New function. + (TARGET_ASM_FUNCTION_PROLOGUE): Default to it. + + * flow.c (mark_dfs_back_edges): Move from loop_p ; mark back + edges by EDGE_DFS_BACK flag. + (dump_edge_info): Add dfs_back flag. + * basic-block.h (EDGE_DFS_BACK): New constant. + (mark_dfs_back_edges): Declare. + * alias.c (loop_p): Remove. + (mark_constant_function): Use mark_dfs_back_edges. + + * reg-stack.c (block_info_def): Add predecessors counter and stack_out. + (reg_to_stack): Call mark_dfs_back_edges; count the predecessors. + (compensate_edge): Break out from ... + (convert_regs_1): ... here; do smart choosing of stack_out to copy. + (convert_regs_2): Set block_done once block is really done; + Do updating of the predecessors counts. + + * toplev.c (rest_of_compilation): Recompute block_for_insn + before post-reload cfg_cleanup. + * function.c (thread_prologue_epilogue_insns): + Call set_block_for_new_insns when emitting prologue directly. + + 2001-07-30 Andreas Jaeger + + * jump.c: Add prototype for mark_modified_reg. + + * cse.c (set_live_p): Add unused attribute. + + * gcov.c (calculate_branch_probs): Use gcov_type to avoid + overflow. + (scan_for_source_files): Use long for count to avoid overflow. + (output_data): Likewise. + (output_data): Don't use string concatatenation to silence gcc + -traditional. + + * predict.c: Fix typos and grammar. + + * gcse.c (insert_insn_end_bb): Remove unused variables. + + Mon Jul 30 21:54:53 CEST 2001 Jan Hubicka + + * flow.c (mark_set_1): Use REG_FREQ_FROM_BB. + (attempt_auto_inc): LIkewise. + (mark_used_reg): Likewise. + (try_pre_increment_1): Likewise. + * regclass.c (regclass): Likewise. + * global.c (allocno_compare): Update comment; change scaling factor. + * local-alloc.c (QTY_CMP_PRI): Likewise. + * regs.h (REG_FREQ_FROM_BB): New. + (REG_FREQ_MAX): Likewise. + + 2001-07-30 H.J. Lu + + * config/mips/linux.h (CPLUSPLUS_CPP_SPEC): Add + -D_GNU_SOURCE. + + 2001-07-30 H.J. Lu (hjl@gnu.org) + + * config/mips/linux.h (ASM_DECLARE_FUNCTION_NAME): Defined. + (ASM_DECLARE_FUNCTION_SIZE): Likewise. + (FUNCTION_NAME_ALREADY_DECLARED): Likewise. + + 2001-07-30 Nick Clifton + + * config/arm/t-arm-elf (MULTILIB_EXCEPTIONS): Skip -mthumb as well + as -mthumb-interwork when -mcpu=arm7 is specified. + + Mon Jul 30 17:44:43 CEST 2001 Jan Hubicka + + * predict.def (noreturn, loop branch, loop exit): Mark as first + match heuristics. + + Mon Jul 30 12:52:11 CEST 2001 Jan Hubicka + + * combine.c (try_combine): Avoid barrier after noop jumps. + + 2001-07-29 Neil Booth + + * cpphash.h (struct cpp_reader): Remove import_warning. + * cpplib.c (skip_rest_of_line): Don't bother turning off + macro expansion. + (parse_include): Move include handling to... + (do_include_common): ... here. Move import warning from... + (do_import): ... here. + (do_pragma_poison): Don't do a callback for poison identifiers. + * cpplib.h (struct cpp_callbacks): Don't do poison callbacks. + * cppmain.c (setup_callbacks): Similarly. + + Sun Jul 29 23:26:50 CEST 2001 Jan Hubicka + + * rtlanal.c (parms_set, find_first_parameter_load): Break out from...; + handle multiple sets. + * except.c (sjlj_mark_call_sites): .... here. + * gcse.c (insert_insn_end_bb): Use find_first_parameter_load. + + Sun Jul 29 21:38:45 CEST 2001 Jan Hubicka + + Suggested by Richard Henderson and Richard Kenner: + * combine.c (recog_for_combine): Use the fake recog + only if instruction does not match. + * rtl.h (NOOP_MOVE_INSN_CODE): New. + * rtlanal.c (noop_move_p): Always return 1 for NOOP_MOVE_INSN_CODE. + + * combine.c (try_combine): Discover noop jump as direct jump. + + 2001-07-29 Daniel Berlin + + * df.c (df_rd_global_compute): Add successors to worklist, not + current item. + (df_ru_global_compute): Ditto. + + 2001-07-27 Daniel Berlin + + * regclass.c (reg_scan_mark_refs): Increment REG_N_REFS when we + increment REG_N_SETS. + + 2001-07-26 Daniel Berlin + + * sbitmap.h: New prototype for sbitmap_a_xor_b. + + * sbitmap.c (sbitmap_a_xor_b): New function. + ifdef the basic block stuff on IN_GCC. + + 2001-07-29 Neil Booth + + * cppexp.c (parse_defined): Always record the macro name. + (lex): Don't worry about identifiers, or special-case + CPP_NOT here. + (_cpp_parse_expr): Figure out at the end of the routine + whether we saw a valid !defined() expression. + * cppfiles.c (stack_include_file): Update for mi_valid. + (_cpp_pop_file_buffer): Similarly. + * cpplex.c (_cpp_lex_token): Similarly. + * cpphash.h (enum mi_state, enum mi_ind, mi_state, + mi_if_not_defined, mi_lexed): Remove. + (mi_valid): New. + * cpplib.c (do_if): Simplify. + (do_endif, push_conditional, _cpp_handle_directive): Update + for renaming of mi_state to mi_valid. + doc: + * cpp.texi: Add index entries for digraphs, and add comment + that C++ refers to them as alternative tokens. + + Sun Jul 29 18:59:13 CEST 2001 Jan Hubicka + + * basic-block.h (CLEANUP_PRE_LOOP): New. + * except.c (finish_eh_generation): Update call of cleanup_cfg. + * sibcall.c (optimize_sibling_calls): Likewise. + * toplev.c (rest_of_compilation): Likewise. + * flow.c (try_forward_edges): Take argument MODE; + do not forward over loop pre-headers if CLEANUP_PRE_LOOP. + (try_optimize_cfg): Update call of try_forward_edges. + + Sun Jul 29 18:59:56 CEST 2001 Roman Zippel + Jan Hubicka + + * (validate_replace_rtx_1): Fix simplification of MINUS. + + 2001-07-29 Neil Booth + + PR preprocessor/3669 + * cppinit.c (init_dependency_output): Turn off dump requests + if sending dependencies to stdout. + + 2001-07-28 Richard Henderson + + * flow.c (life_analysis): Elide PROP_ALLOW_CFG_CHANGES if + not optimizing. + + 2001-07-28 Golubev I. N. + + * config/i386/sco5.h (DWARF2_DEBUGGING_INFO): Define. + + 2001-07-28 Kazu Hirata + + * config/h8300/h8300.h (ENCODE_SECTION_INFO): Check to see if DECL + is VAR_DECL first to prevent an ICE. + + 2001-07-28 Richard Henderson + + * varasm.c (immed_real_const_1): Don't elide special cases for + nested functions. + (clear_const_double_mem): Clear const_tiny_rtx too. + + 2001-07-28 Richard Henderson + + * dwarf2out.c (dw_val_class_offset): New. + (struct dw_ranges_struct, dw_ranges_ref): New. + (ranges_table, ranges_table_allocated): New. + (ranges_table_in_use, RANGES_TABLE_INCREMENT): New. + (add_AT_offset, add_ranges, output_ranges): New. + (print_die, output_die): Handle dw_val_class_offset. + (attr_checksum, size_of_die, value_format): Likewise. + (gen_lexical_block_die): Handle non-contiguous blocks. + (gen_block_die): Likewise. + (dwarf2out_finish): Add a DW_AT_entry_pc to the compilation unit + if needed. Dump the ranges table. + * final.c (final_start_function): Remove unnecessary notes and + rebuild the block tree before numbering the blocks. + * function.c (reorder_blocks_0): Walk the existing block tree + to unmark all blocks. + (reorder_blocks_1): Create block fragments when duplicate block + notes are seen. + (reorder_fix_fragments): New. + (reorder_blocks): Call it. + * tree.h (BLOCK_FRAGMENT_ORIGIN, BLOCK_FRAGMENT_CHAIN): New. + + 2001-07-28 Richard Henderson + + * emit-rtl.c (adjust_address): Make a copy of the memory address. + + 2001-07-28 Richard Henderson + + * flow.c (add_to_mem_set_list): New function. + (init_propagate_block_info): Use it. + (mark_set_1): Likewise. + (insn_dead_p): Canonicalize memory address for dead store + comparison. Allow wider mode stores to kill narrower mode stores. + (invalidate_mems_from_autoinc): Use invalidate_mems_from_set. + (invalidate_mems_from_set): Don't handle MEMs. + + 2001-07-28 Kazu Hirata + + * config/h8300/h8300.h: Fix formatting. + + Sat Jul 28 23:35:22 CEST 2001 Jan Hubicka + + * basic-block.h (EDGE_FREQUENCY): New macro. + * bb-reorder (fixup_reorder_chain): Set counts and frequencies + for new BB/edges. + * flow.c (find_sub_basic_blocks): Likewise. + (try_crossjump_to_edge): Likewise; use EDGE_FREQUENCY + (redirect_edge_and_branch): Use EDGE_FREQUENCY. + + * predict.c (DEF_PREDICTOR): New argument FLAGS. + (HITRATE): New macro. + (PRED_FLAG_FIRST_MATCH): New constant. + (predictor_info): New field flgags. + (combine_predictions_for_insn): Use DS theory to combine + probabilities; set the edge probabilities when finished. + (estimate_probability): Avoid duplicated matches + of LOOP_BRANCH heuristics for nested loops; update comment. + * predict.def: Add flags for each prediction, set probabilities + according to B&L paper. + * predict.h (DEF_PREDICTOR): New argument FLAGS. + + * profile.c (compute_branch_probabilities): Cleanup way the edge + probabilities are computed and REG_BR_PROB notes are dropped; if + values does not match, emit error. + (init_branch_prob): Do error instead of warning when profile driven + feedback is missing or corrupt. + + 2001-07-27 DJ Delorie + + * ifcvt.c (noce_get_alt_condition): If the condition is a compare + against a constant, try to adjust the compare to have the desired + constant in it so that min/max optimizations happen more often. + + Fri Jul 27 17:53:00 CEST 2001 Jan Hubicka + + * flow.c (last_loop_beg_note): New function. + (redirect_edge_and_branch): Use it. + (split_edge): Likewise. + + * alias.c (loop_p): Avoid uninitialized memory access. + + * flow.c (try_forward_edges): Avoid accessing freed memory. + + * flow.c (backward_edge_of_syntactic_loop_p): Avoid uninitialized + variable access. + + 2001-07-26 Andrew Haley + Joern Rennecke + + * config/sh/linux.h (CPP_DEFAULT_CPU_SPEC): New. + (SUBTARGET_CPP_ENDIAN_SPEC): New. + (SUBTARGET_CPP_SPEC): New. + (CPP_SPEC): Remove. + * config/sh/sh.h (SUBTARGET_CPP_ENDIAN_SPEC): New. + (SUBTARGET_CPP_PTR_SPEC): New. + (CPP_DEFAULT_CPU_SPEC): New. + (EXTRA_SPECS): Add SUBTARGET_CPP_ENDIAN_SPEC, + SUBTARGET_CPP_PTR_SPEC, and CPP_DEFAULT_CPU_SPEC. + (CPP_SPEC): Break out parts into SUBTARGET_CPP_ENDIAN_SPEC, + SUBTARGET_CPP_PTR_SPEC, and CPP_DEFAULT_CPU_SPEC. + (SUBTARGET_CPP_SPEC): Define as an empty string. + + 2001-07-27 Gerald Pfeifer + + * doc/install.texi (Configuration): Properly link the host + specific instructions also when generating HTML. + + Fri Jul 27 00:33:35 EDT 2001 John Wehle (john@feith.com) + + * flow.c (redirect_edge_and_branch_force): Test + target->global_live_at_start. + + 2001-07-26 Richard Henderson + + * simplify-rtx.c (avoid_constant_pool_reference): Export. + * rtl.h (avoid_constant_pool_reference): Declare it. + * dwarf2out.c (add_location_or_const_value_attribute): Use it. + (add_const_value_attribute): Use add_AT_unsigned for unsigned values. + + Thu Jul 26 22:30:22 CEST 2001 Jan Hubicka + + * rtl.h (cleanup_barriers): Declare. + * jump.c (cleanup_barriers): New function. + * toplev.c (rest_of_compilation): Call cleanup_barriers + before loop optimizer and after bb_reorder. + + * flow.c (back_edge_of_syntactic_loop_p): New. + (split_edge): Use it. + + 2001-07-26 Rainer Orth + + * glimits.h (_MACH_MACHLIMITS_H_): Delete. + + Thu Jul 26 22:22:21 2001 Denis Chertykov + + * cse.c (cse_process_notes): Replace any registers if the address + remains valid. + + Thu Jul 26 14:04:03 EDT 2001 John Wehle (john@feith.com) + + * basic-block.h (PROP_ALLOW_CFG_CHANGES): Define. + (PROP_FINAL): Include PROP_ALLOW_CFG_CHANGES. + (propagate_block): Update prototype. + * flow.c (update_life_info): Simplify the CFG and + recalculate the global regs which are alive when + removing dead code during a global update. + (propagate_block): Return non-zero if an INSN is + deleted. + + 2001-07-26 Rainer Orth + + * Makefile.in (LIBICONV): Define. + + 2001-07-26 Catherine Moore + + * config/v850/v850.h (ENCODE_SECTION_INFO): Change order + of conditional to avoid tree checking errors. + + 2001-07-26 Kazu Hirata + + * regmove.c (regmove_optimize): Don't replace a reg with + another reg of a different mode. + + 2001-07-26 Andrew MacLeod + + * params.def (PARAM_MAX_PENDING_LIST_LENGTH): Add parameter to + limit length of dependency flush list. + * params.h (MAX_PENDING_LIST_LENGTH): Define. + * sched-int.h (struct deps): Add pending_flush_length field. + * sched-deps.c (flush_pending_lists): Last_pending_memory_flush now + has 1 element in it. + (sched_analyze_1): Use MAX_PENDING_LIST_LENGTH. + (sched_analyze): After a jump, if the pending memory flush list is too + large, flush the pending lists. + (init_deps): Initialize pending_flush_length to 0. + * doc/invoke.texi (max_pending_list_length): Document parameter. + + 2001-07-26 Neil Booth + + * toplev.c, varasm.c, final.c: Include xcoffout.h if appropriate. + * dbxout.c (dbxout_global_decl): Move outside #ifdef. + * Makefile.in (varasm.o, final.o, toplev.o): Update dependencies. + + 2001-07-26 Neil Booth + + * cpphash.h (struct_lexer_state): Delete was_skipping. + Move skipping here from struct cpp_reader. + * cpplex.c (parse_identifier): Update. + (_cpp_lex_token): Don't skip tokens in a directive. + * cpplib.c (struct if_stack): Update. + (start_directive, end_directive): Don't change skipping state. + (_cpp_handle_directive): Update. + (do_ifdef, do_ifndef, do_if, do_elif): Similarly. + (do_else, do_endif): Update; only check for excess tokens if not + in a skipped conditional block. + (push_conditional): Update for new struct if_stack. + + 2001-07-26 Graham Stott + + * function.c (locate_and_pad_parm): Also pad initial offset + so that the total argument size also includes the padding. + + 2001-07-26 Graham Stott + + * gensupport.c (alter_output_for_insn): Correct enable checking failure + change XSTR to XTMPL. + + (process_one_cond_exec): Likewise + + 2001-07-25 Richard Henderson + + * varasm.c (assemble_variable): Create DECL_RTL before setting + TREE_ASM_WRITTEN. + + Thu Jul 26 00:19:30 CEST 2001 Jan Hubicka + + * predict.c (estimate_probability): Avoid duplicated predictions. + + * loop.c (find_and_verify_loops): Grok multiple barriers. + + Wed Jul 25 18:00:05 2001 Richard Kenner + + * config/alpha/alpha.c (print_operand, case '/'): Don't write '/'. + + * dbxout.c: Consistently use putc instead of fputc. + (print_wide_int): New function; call instead of direct fprintf. + (dbxout_type_index): Adjust calls of CHARS to be more accurate. + (dbxout_type_fields, dbxout_type_method_1): Likewise. + (dbxout_type_methods, dbxout_range_type, dbxout_type): Likewise. + (print_int_cst_octal): Likewise. + (print_octal): Show we wrote characters. + (dbxout_type): Set have_used_extensions in more places. + + 2001-07-25 Catherine Moore + + * config/v850/v850.c (v850_va_arg): Use addr + instead of valist to build incr. + + Wed Jul 25 22:48:59 CEST 2001 Jan Hubicka + + * flow.c (delete_dead_jumptables): New function. + (life_analyzis): Call it. + * bb-reorder.c (skip_insns_after_block): Handle contradictory + sequences. + + 2001-07-25 Richard Henderson + + * except.c (reachable_handlers): Handle a region being removed + out from under a RESX. + + 2001-07-25 Richard Henderson + + * config/alpha/alpha.c (alpha_emit_conditional_move): Always + swap GE/GT if it is an fp comparison. + + 2001-07-25 Andrew Haley + + * alias.c (rtx_equal_for_memref_p): Allow strings as types in + operands. + + Wed Jul 25 08:25:01 2001 Jeffrey A Law (law@cygnus.com) + + * ssa.c (rename_insn_1): Do not wrap an assignment to a + paradoxical SUBREG inside a SEQUENCE. Fix minor formatting + glitch. + + * ssa-ccp.c (visit_expression): Handle CALL_INSNs that can + throw an exception. + (visit_expression): When attempting to simplify an expression, + retrieve any modes for arguments before they are simplified + to constants. + + 2001-07-25 Andrew MacLeod + Janis Johnson + + * stmt.c (expand_goto): A nonlocal goto can be a call too. + * builtins.c (expand_builtin_longjmp): Reverse label and static chain + pointer parameters to match documented usage of nonlocal_goto. + * config/ia64/ia64.md (nonlocal_goto): Revert label and static chain + parameters to their correct order. + * config/sparc/sparc.md (nonlocal_goto): Revert label and static chain + parameters to their correct order. + + 2001-07-25 Andrew MacLeod + + * config/ia64/ia64.h (STRIP_NAME_ENCODING): Strip out '*' as well. + + 2001-07-25 Jan Hubicka + Richard Henderson + + * flow.c (find_sub_basic_blocks): Fix handling of the last BB in + the sequence. + (make_edges): New argument update_p; populate the edge cache if set. + (find_basic_blocks): Update make_edges invocation. + + 2001-07-24 Joel Sherrill + + * config/i960/i960.h (CPP_SPEC): Define _SOFT_FLOAT for -msoft-float. + + 2001-07-24 Joel Sherrill + + * config/sparc/rtems.h (CPP_PREDEFINES): Remove redundant + -Acpu and -Amachine.h. + * config/sparc/rtemself.h (CPP_PREDEFINES): Likewise. + Corrected header to say ELF not a.out. + * config/sparc/sparc.h (CPP_CPU_SPEC): Define _SOFT_FLOAT + when given -msoft-float. + + 2001-07-24 Joel Sherrill + + * config.gcc (arm*-*-rtems*): Include crtinit.o and crtfini.o as + extra multilib parts like arm-elf. + (i960-*-coff*, i960-*-rtems): Should not use collect2. + (m68020-*-elf*, m68k-*-elf*, m68k-*-rtems*): Include crtinit.o and + crtfini.o as extra multilib parts. + + 2001-07-24 Joel Sherrill + + * configure.in: Add rtems as a supported thread model. + * gthr-rtems.h: Add missing entry point __gthread_active_p. + * configure: Rebuilt. + + 2001-07-24 Lars Brinkhoff + + * stor-layout.c (get_mode_alignment): make it work when + BITS_PER_UNIT is not a power of two. + * builtins.c (get_pointer_alignment): Likewise. + + 2001-07-24 Richard Henderson + + * simplify-rtx.c (avoid_constant_pool_reference): Coerce + the retrieved constant into the expected mode. + + Wed Jul 25 01:41:27 CEST 2001 Jan Hubicka + + * flow.c (try_simplify_condjump): Avoid duplicated edges. + (verify_flow_info): Check for duplicated edges; clarify + error reporting. + + * flow.c (block_label): Update basic_block_for_insn. + (commit_edge_insertions): Call compute_bb_for_insn. + + * flow.c (purge_dead_edges): Handle conditional jumps and conditional + returns too. + + * flow.c (redirect_edge_and_branch, + try_optimize_cfg): Use redirect_edge_succ_nodup + (redirect_edge_succ_nodup): New. + * basic_block.h (redirect_edge_succ_nodup): Declare. + + * toplev.c (rest_of_compilation): Rebuild CFG before cfg_cleanup + after gcse. + + Wed Jul 25 00:32:49 CEST 2001 Jan Hubicka + + * flow.c (try_forward_edges): Accept fallthru edge; Update comment. + (try_crossjump_to_edge): Update commetns. + (try_crossjump_bb): Likewise. + + 2001-07-24 Richard Henderson + + * combine.c (distribute_notes): Move set of need_refresh + for noop_move_p down to catch all cases. + + Tue Jul 24 20:32:44 CEST 2001 Jan Hubicka + + * recog.c (split_all_insns_noflow): New. + * rtl.h (split_all_insns_noflow): Declare. + * ia64.c (ia64_reorg): Use split_all_insns_noflow. + * m68hc11.c (m68hc11_reorg): Likewise. + * sh.c (machine_dependent_reorg): Likewise. + * toplev.c (rest_of_compilation): Likewise for last split_all_insns + call. + + 2001-07-18 Andrew Haley + + * config/sh/sh.md (ashlsi3_std splitter): Split only after reload. + (ashlsi3_n splitter): Likewise. + (lshrsi3_n splitter): Likewise. + + (GOTaddr2picreg): Make const SImode. + (sym_label2reg): Likewise. + (symGOT2reg): Likewise. + (symGOTOFF2reg) Likewise. + + (casesi_worker_0): Make unspec SImode. + + 2001-07-18 Andrew Haley + + * config/sh/sh.c (barrier_align): Check that an operand really is + an insn before extracting its INSN_CODE. + + 2001-07-24 Andrew Haley + + * config/sh/sh.h (OVERRIDE_OPTIONS): Add braces to get rid of + dangling else. + + * config/sh/sh.h (INITIALIZE_TRAMPOLINE): Truncate operands + for SImode to prevent overflow. + + 2001-07-24 Rainer Orth + + * config/mips/irix6-libc-compat.c: New file. + * config/mips/t-iris6 (LIB2FUNCS_STATIC_EXTRA): Use it. + * doc/install.texi (Specific, mips*-sgi-irix6): Mention structure + passing workaround. + + 2001-07-24 lars brinkhoff + + * rtl.texi (REG_POINTER): Document. + (Machine Modes): Document BImode, OImode, PQImode, PHImode, + QFmode, HFmode, TQFmode, QCmode, and HCmode. + + Tue Jul 24 10:49:40 CEST 2001 Jan Hubicka + + * flow.c (delete_noop_moves): Do not confuse libcall regions. + + 2001-07-23 Richard Henderson + + * flow.c (try_simplify_condjump): Use tidy_fallthru_edge. + + 2001-07-23 Kazu Hirata + + * config/h8300/h8300-protos.h: Add a prototype for + general_operand_dst_push. + * config/h8300/h8300.c (general_operand_dst_push): New. + * config/h8300/h8300.h (OK_FOR_T): New. + (EXTRA_CONSTRAINT): Use it. + * config/h8300/h8300.md (movqi_push): Remove and integrate into + the existing movqi pattern. + (movhi_push): Likewise. + + * reload.c: Fix comment typos. + + Mon Jul 23 23:34:07 CEST 2001 Jan Hubicka + + * gcse.c (cprop_insn): Update call of cprop_cc0_jump. + + 2001-07-23 H.J. Lu (hjl@gnu.org) + + * doc/extend.texi: Update __builtin_return_address and + __builtin_frame_address. + + 2001-07-23 Richard Henderson + + * config/i386/i386.c (ix86_expand_setcc): Don't use method 0 + before CSE. + * config/i386/i386.md: New setcc+movzbl peephole2. + + 2001-07-23 Neil Booth + + * objc/Make-lang.in (objc-act.o): Depend on debug.h. + * objc/objc-act.c: Include debug.h. + (synth_module_prologue): Save and restore debug hooks too. + + 2001-07-23 lars brinkhoff + + * tm.texi (TARGET_FLOAT_FORMAT): Document IBM_FLOAT_FORMAT + and C4X_FLOAT_FORMAT. + (BOOL_TYPE_SIZE): Document. + + Mon Jul 23 11:54:23 2001 Clinton Popetz + + * unroll.c (loop_iterations): Fix miscalculation of initial + giv offset. + + 2001-07-13 Andrew Haley + + * doc/tm.texi (MD_CAN_REDIRECT_BRANCH): New macro. + * config/sh/sh.h (MD_CAN_REDIRECT_BRANCH): New macro. + * config/sh/sh.c (sh_can_redirect_branch): New function. + * config/sh/sh-protos.h (sh_can_redirect_branch): Declare. + * reorg.c (steal_delay_list_from_target): Use + MD_CAN_REDIRECT_BRANCH to see if redirection is possible. + + Mon Jul 23 17:20:18 CEST 2001 Jan Hubicka + + * flow.c (try_simplify_condjump): Unlink insn chain on + fallthru edge; use can_fallthru. + + Mon Jul 23 16:03:19 CEST 2001 Jan Hubicka + + * basic-block.h (find_sub_basic_block): Declare. + * flow.c (make_edges): New arguments MIN and MAX; + (find_sub_basic_blocks): Revamp to use make_edges + and purge_dead_edges. + (find_basic_blocks): Update call of find_sub_basic_block. + + * recog.c (split_all_insns): Always expect CFG to be consistent; + call find_sub_basic_blocks in case something has changed. + * toplev.c (rest_of_compilation): Always call split_all_insns once CFG + has been built. + + * basic-block.h (delete_noop_moves): Declare. + * combine.c (combine_instructions): Call it. + (recog_for_combine): Tolerate noop moves + (distribute_notes): Force refresh when register dies at noop move. + * flow.c (delete_noop_moves): Use BB structure; delete JUMP insns + too. + (life_analysis): Update delete_noop_moves call. + (set_noop_p): Move too ... + * rtlanal.c (noop_move_p): ... here. + * rtl.h (noop_move_p): Declare. + + * basic-block.h (purge_all_dead_edges, purge_dead_edges): New functions. + * toplev.c (rest_of_compilation): Conditionally call purge_all_dead_edges + after combine. + * gcse.c (cprop_cc0_jump, cprop_insn): New argument "basic_block". + (cprop_jump): Likewise; call purge_dead_edges if substitution succeeded. + + 2001-07-23 Hans-Peter Nilsson + + * reload.c (push_reload): Fix typo in comment. + (find_reloads_address): Ditto. + (reg_overlap_mentioned_for_reload_p): Ditto in head comment. + + 2001-07-22 Richard Henderson + + * flow.c: Grammar check and clarify a lot of comments. + (try_simplify_condjump): Rename variables to be clearer. + (try_forward_edges): Skip complex and fallthru edges. + Rearrange tests to avoid duplicate checks. + (flow_find_cross_jump): Likewise. + (outgoing_edges_match): Allow match if neither branch has + probability data. Loosen probability match to 5%. + (try_crossjump_to_edge): Hoist repeated indirection into + local variables. + (try_crossjump_bb): Don't check complex edges. Eliminate + redundant crossjump tests. + (try_optimize_cfg): Fix use of bool. Reorganize cheaper + checks before more expensive checks. + + 2001-07-22 Richard Henderson + + * fold-const.c (fold): Test vs FLOAT_TYPE_P instead of + INTEGRAL_TYPE_P when folding comparisons with operand_equal_p + arguments. + + 2001-07-22 Richard Henderson + + * m68k.c (const_uint32_operand): Abort if mode is <= 32 bits. + (const_sint32_operand): Likewise. + * m68k.md (anon mulsi pattern): Use const_int_operand not + const_sint32_operand. + (umulsi3_highpart): Zero extend a constant input. + (smulsi3_highpart): Don't bother checking SImode constant. + (const_umulsi3_highpart): Give op3 DImode. + (const_smulsi3_highpart): Likewise. + + 2001-07-22 Richard Henderson + + * flow.c (split_block): Make sure bb_note is included in the + new block when splitting before a label. + + Sun Jul 22 23:28:56 CEST 2001 Jan Hubicka + + * basic-block.h (redirect_edge_and_branch_force, + redirect_edge_and_branch, block_label, forwarder_block_p): Declare. + * flow.c (redirect_edge_and_branch_force, + redirect_edge_and_branch, block_label, forwarder_block_p): Make global. + (redirect_edge_and_branch_force): Fix copying of lifeness information. + (block_label): Handle EXIT_BLOCK_PTR by returning NULL. + * ifcvt.c (dead_or_predictable): Take BB as an new destination + instead of label; update CFG after transformation. + (find_if_case_1): Update call, use redirect_edge_and_branch_force + for finishing the transformation; handle even case where ELSE + does not follow THEN. + (find_if_case_2): Update call of dead_or_predictable; simplify + CFG update. + + * emit-rtl.c (split_branch_probability): New global variable. + (try_split): Take care to set split_branch_probability and + create REG_BR_PROB note for new jump insns. + * md.texi (define_split): Document new feature. + + * i386.c (ix86_split_fp_branch): Redistribute branch probability notes. + + 2001-07-22 Neil Booth + + * varasm.c: Don't inlcude dbxout.h, sdbout.h or xcoffout.h. + (asm_out_file): Remove redundant declaration. + (assemble_asm): Remove old #if 0 block. + (assemble_variable): Remove end of function; debug output is + now handled with global_decl. Remove old #if 0 block. Update. + Remove saved_in_section and associated no-op code. + * Makefile.in (varasm.o): Correct dependencies. + + Sun Jul 22 17:55:11 2001 Alexandre Oliva + + * config/i386/freebsd-aout.h (ASM_PREFERRED_EH_DATA_FORMAT): Use + the definition in defaults.h. + + Sun Jul 22 21:31:04 CEST 2001 Jan Hubicka + + * jump.c: Update comments. + (delete_barrier_successors, delete_unreferenced_labels, + delete_noop_moves, tension_vector_labels, delete_from_jump_chain, + delete_labelref_insn, redirect_tablejump, jump_optimize_1, + jump_optimize, jump_optimize_minimal): Kill. + (rebuild_jump_labels): Move code from jump_optimize_1. + (purge_line_number_notes): Likewise. + (copy_loop_headers): Likewise. + * reg-stack.c: Update comment. + * stmt.c: Likewise. + * rtl.h (jump_optimize, jump_optimize_1, JUMP_NOOP_MOVES, + JUMP_AFTER_REGSCAN): Kill. + * toplev.c (rest_of_compilation): Use cleanup_cfg, call + purge_line_number_notes and copy_loop_headers. + + 2001-07-22 Neil Booth + Richard Henderson + + * dbxout.c (dbxout_global_decl): New. + (xcoff_debug_hooks, dbx_debug_hooks): Use it. + * sdbout.c (sdbout_finish): New. + (sdbout_debug_hooks): Use it, add comments. + (sdbout_global_decl): Defer initialised public vars to + sdbout_finish. + * varasm.c (assemble_variable): Don't output debug information + for file-scope variables. + + 2001-07-22 Richard Henderson + + * config/alpha/alpha.c (get_trap_mode_suffix): New. + (get_round_mode_suffix): New. + (print_operand): Use them for [/]. Remove support for [&'`()+]. + * config/alpha/alpha.h (PRINT_OPERAND_PUNCT_VALID_P): Update. + * config/alpha/alpha.md (attr round_suffix): New. + (attr trap_suffix): New. + (all insns): Set them appropriately. Use %/ instead of the + myriad punctuators. + + 2001-07-22 Neil Booth + + * dbxout.c, sdbout.c, varasm.c: Revert most recent debug patch. + + 2001-07-22 Richard Henderson + + * regrename.c (regrename_optimize): Compute nregs for each + potential target register. + + 2001-07-21 Neil Booth + Richard Henderson + + * dbxout.c (dbxout_global_decl): New. + (xcoff_debug_hooks, dbx_debug_hooks): Use it. + * sdbout.c (sdbout_finish): New. + (sdbout_debug_hooks): Use it, add comments. + (sdbout_global_decl): Defer initialised public vars to + sdbout_finish. + * varasm.c (assemble_variable): Don't output debug information + for file-scope variables. + + 2001-07-21 H.J. Lu (hjl@gnu.org) + + * config/mips/mips.c (mips_cpu): Moved into ... + (override_options): Here. + + * config/mips/mips.h (mips_cpu_attr): Replace mips_cpu with + mips_tune. + (mips_cpu): Removed. + + 2001-07-21 Stephane Carrez + + * config/m68hc11/m68hc11.md ("andqi3"): Accept d as second operand. + ("iorqi3"): Likewise. + ("xorqi3"): Likewise. + ("*addhi3"): Fix constraint to avoid reloading in a soft register. + ("*subhi3_sp): Likewise. + ("*subhi3"): Likewise. + ("extendhisi2"): Accept D, X and Y as source operand to avoid + reload problems. + + 2001-07-21 Nathan Sidwell + + * doc/tm.texi: Remove DEFAULT_VTABLE_THUNKS. + * config/freebsd.h: Likewise. + * config/linux.h: Likewise. + * config/openbsd.h: Likewise. + * config/alpha/linux-elf.h: Likewise. + * config/arm/linux-elf.h: Likewise. + * config/d30v/d30v.h: Likewise. + * config/fr30/fr30.h: Likewise. + * config/ia64/aix.h: Likewise. + * config/ia64/ia64.h: Likewise. + * config/mips/linux.h: Likewise. + * config/pj/pj.h: Likewise. + * config/rs6000/linux.h: Likewise. + * config/sparc/linux.h: Likewise. + * config/sparc/linux64.h: Likewise. + + 2001-07-20 Bruce Korb + + * fixinc/fixincl.c(test_for_changes): force unsigned char comparisons + because getc() and char* may disagree on signedness. + + 2001-07-20 Richard Henderson + + * doc/rtl.texi (REG_DEAD): Update for current semantics. + + * flow.c (try_redirect_by_replacing_jump): Correctly compute which + insns to delete in the presence of cc0 in a jump insn. + + Fri Jul 20 22:14:49 CEST 2001 Roman Zippel + Jan Hubicka + + * m68k.md (zero_extend?i?i2 expander): Use gen_lowpart instead + of doing the change by hand. + + Fri Jul 20 21:59:42 CEST 2001 Jan Hubicka + + * rtlanal.c (set_noop_p): Return true for noop jumps. + + * expr.c (emit_single_push_insn): Add call to push expander. + * expr.h (optab_index): Add OTI_push + (push_optab): New constant. + * genopinit.c (optabs): Add push_optab. + * optabs.c (init_optab): Init push optab. + * md.texi (push??1): Document + + 2001-07-20 Stephane Carrez + + * config/m68hc11/m68hc11.md ("movdi", "movdi_internal"): Use an + expand to emit the pattern; put a REG_INC note for push/pop + instructions. + ("movdf", "movdf_internal"): Likewise. + ("movsi", "movsi_internal"): Likewise. + ("movsf", "movsf_internal"): Likewise. + ("movhi", "movqi"): Emit a REG_INC note for push/pop instructions. + + 2001-07-20 Stephane Carrez + + * config/m68hc11/m68hc11.c (m68hc11_gen_highpart): Don't use + gen_highpart. + + 2001-07-20 Daniel Berlin + + * params.def: Change default max inline insns to 100. + + 2001-07-20 Diego Novillo + + * combine.c (combine_simplify_rtx): Generate a new shift operation + when simplifying the first operand of a (neg (ashift)) expression. + + 2001-07-20 Roman Lechtchinsky + + * regclass.c (N_REG_INTS): Use only 32 bits per element. + + 2001-07-20 Kelley Cook + + * doc/install.texi (sparc-sun-solaris*): Add in 4.x assembler bug + information. Move rest into ... + (*-*-solaris): ... here. Eliminate redundant information and + reword necessary packages section. Delete 4.x assembler bug info. + (sparc-sun-*): Merge into ... + (sparc-sun-sunos*): here. + + 2001-07-20 Catherine Moore + + * config/v850/v850.md (casesi): Generate LABEL_REF + with Pmode. + + Fri Jul 20 14:12:57 CEST 2001 Jan Hubicka + + * i386-protos.h (ix86_zero_extend_to_Pmode): Declare. + * i386.c (ix86_zero_extend_to_Pmode): Make global. + * i386.md (strclrsi expander): Use it. + + Fri Jul 20 13:24:16 CEST 2001 Jan Hubicka + + * integrate.c (copy_insn_list): handle + NOTE_INSN_DELETED_LABEL, as if it were CODE_LABEL. + (copy_rtx_and_substitute): Likewise; behave to NOTE_INSN_DELETED_LABEL + identically as to CODE_LABEL. + + * fold-const (fold): Convert A/B/C to A/(B*C) and + A/(B/C) to (A/B)*C + + * except.c (connect_post_landing_pads): Delete the RESX insns. + + 2001-07-20 Aldy Hernandez + + * config/mips/mips.h (ISA_HAS_NMADD_NMSUB): New macro. + + * config/mips/mips.md (nmadd/nmsub): Use macro. + + 2001-07-20 Nathan Sidwell + + * cppinit.c (remove_dup_dir): Make static. + (remove_dup_dirs): Make static. Only warn about preempting a + system directory with a non-system directory. + + 2001-07-19 Geoffrey Keating + + * ifcvt.c (noce_try_store_flag_constants): Correct order + of parameters to trunc_int_for_mode. + + 2001-07-19 Mark Mitchell + + * reorg.c (fill_simple_delay_slots): If an instruction might throw + an exception that will be caught within this function, do not fill + its delay slot with any subsequent instruction. + + 2001-07-19 Steve Ellcey + + * tm.texi (POINTERS_EXTEND_UNSIGNED) Modify definition. + * optabs.c (can_extend_p) Check HAVE_ptr_extend for a specialized + pointer extension instruction. + * combine.c (nonzero_bits,num_sign_bit_copies) Likewise. + * simplify-rtx.c (simplify_unary_operation) Likewise. + * explow.c (convert_memory_address) Check value of + POINTERS_EXTEND_UNSIGNED to avoid some conversions when + less than zero. + * config/ia64/t-hpux (LIBGCC, INSTALL_LIBGCC, MULTILIB_OPTIONS, + MULTILIB_DIRNAMES, MULTILIB_MATCHES) Add multilib support. + * config/ia64/hpux.h (CPP_SPEC, ASM_SPEC, SUBTARGET_SWITCHES) + Add Multilib Support. + (POINTERS_EXTEND_UNSIGNED) Define for ILP32 support. + * config/ia64/ia64.h (MASK_ILP32, TARGET_ILP32, SUBTARGET_SWITCHES) + Add Multilib Support. + (POINTER_SIZE, LONG_TYPE_SIZE, MAX_LONG_TYPE_SIZE) Modify for ILP32 + support. + * config/ia64/ia64.c (rtx_needs_barrier) Add support for addp4. + * config/ia64/ia64.md (ptr_extend) New instruction to "swizzle" + a 32 bit HP-UX pointer into a 64 bit HP-UX pointer. + + 2001-07-19 Alexandre Oliva + + * simplify-rtx.c (simplify_replace_rtx): Try to obtain mode from + old and new operands in `<', `3' and `b'. + + 2001-07-19 Neil Booth + + * Makefile.in (emit-rtl.o, c-decl.o): Depend on debug.h. + (final.o): Don't depend on xcoffout.h, dbxout.h or sdbout.h. + (toplev.o): Don't depend on xcoffout.h. + * c-decl.c: Include debug.h + (duplicate_decls): Use debug hook. + * dbxout.c (dbxout_source_file, dbxout_args): Make static. + (dbx_debug_hooks, xcoff_debug_hooks): Update. + (dbxout_types): Remove. + * dbxout.h (dbxout_source_file, dbxout_types, dbxout_args): Remove. + * debug.c (do_nothing_debug_hooks): Update. + (debug_true_tree, debug_nothing_rtx): New. + * debug.h (struct rtx_def): New. + (struct gcc_debug_hooks): New hooks ignore_block, + outlining_inline_function and label. + (debug_true_tree, debug_nothing_rtx, dwarf2out_frame_init, + dwarf2out_frame_finish): New. + * dwarf2out.c (dwarf2out_ignore_block, dwarf2out_abstract_function): + Make static, update prototype. + (dwarf2_debug_hooks): Update. + * dwarf2out.h (dwarf2out_ignore_block, dwarf2out_abstract_function, + dwarf2out_frame_init, dwarf2out_frame_finish): Remove. + * dwarfout.c (dwarf_debug_hooks): Update. + * emit-rtl.c: Include debug.h. + (remove_unnecessary_notes): Use debug hook. + * final.c: Don't include dbxout.h, xcoffout.h or sdbout.h. + (final_scan_insn): Use debug hook. + * integrate.c (output_inline_function): Use debug hook. + * sdbout.c (sdbout_toplevel_data, sdbout_label): Make static. + (sdb_debug_hooks): Update. + * sdbout.h (sdbout_label, sdbout_toplevel_data): Remove. + * toplev.c: Don't include xcoffout.h. + (note_outlining_of_inline_function, debug_ignore_block): Remove. + * toplev.h (note_outlining_of_inline_function, debug_ignore_block): + Remove. + * tree.h (dwarf2out_do_frame): Remove. + + 2001-07-19 Catherine Moore + + * config/v850/v850.h (ASM_OUTPUT_LABELREF): Restore. + + 2001-07-19 Geoffrey Keating + + * reload1.c (eliminate_regs_in_insn): When updating a set + to the frame pointer to the hardware frame pointer, perform + the update always not just when REPLACE is set. + + * reload1.c (choose_reload_regs): Don't inherit a reload + that crosses multiple registers if registers past the first + don't fit in the desired class. + + * ifcvt.c (noce_try_store_flag_constants): Use trunc_int_for_mode + when negating constants. + + 2001-07-19 Toon Moene + + * tree.def: Document restriction on {L|R}SHIFT_EXPR's second argument. + * doc/tree.texi: Ditto. + + 2001-07-19 Mark Kettenis + Jakub Jelinek + + * unwind-dw2.c (_Unwind_FrameState): Add eh_ptr. + (extract_cie_info): Handle "eh" augmentation properly, + remember eh_ptr. + (struct frame_state, __frame_state_for): New. + + 2001-07-19 Rainer Orth + + * config/alpha/osf.h (ASM_OUTPUT_WEAK_ALIAS, ASM_WEAKEN_LABEL, + HANDLE_SYSV_PRAGMA): Define. + * mips-tfile.c (add_ext_symbol): Pass complete symbol ptr, inline + previous args. + (copy_object): Caller changed. + + 2001-07-19 Andreas Schwab + + * configure.in (assembler dwarf2 debug_line support): Define nop + insn for m68k. + * configure: Regenerated. + + 2001-07-19 Neil Booth + + * Makefile.in (toplev.o, dwarfout.o, final.o): Don't depend on + dwarfout.h. + * dbxout.c (dbxout_function): Rename dbxout_funciton_decl, move + to conditionally compiled block. + (dbx_debug_hooks, xcoff_debug_hooks): Update. + * dbxout.h (dbxout_function): Remove. + * debug.c (do_nothing_debug_hooks): Update. + * debug.h (struct gcc_debug_hooks): New hooks function_decl, + global_decl, deferred_inline_function. + * dwarf2out.c (dwarf2_debug_hooks): Update. + (dwarf2out_global_decl): New. + * dwarfout.c: Don't include dwarfout.h. + (dwarfout_global_decl, dwarfout_function_decl, + dwarfout_deferred_inline_function): New. + (dwarf_debug_hooks): Update. + * dwarfout.h: Remove. + * final.c: Don't include dwarfout.h. + * sdbout.c (sdbout_global_decl): New. + (sdbout_debug_hooks): Update. + * toplev.c: Don't include dwarfout.h. + (check_global_declarations, rest_of_compilation): Use new debug hooks. + (note_deferral_of_defined_inline_function): Remove. + * toplev.h (note_deferral_of_defined_inline_function): Remove. + * ch/Makefile.in (lex.o): No dependence on dwarfout.h. + * ch/lex.c: Don't include dwarfout.h. + * cp/Make-lang.in (decl2.o): No dependence on dwarfout.h, dwarf2out.h. + (semantics.o, optimize.o): Depend on debug.h not dwarfout.h. + * cp/decl2.c: Don't include dwarfout.h and dwarf2out.h. + * cp/optimize.c: Include debug.h. + (maybe_clone_body): Use debug hook. + * cp/semantics.c: Include debug.h. + (expand_body): Use debug hook. + * po/POTFILES.in: Remove dwarfout.h. + + 2001-07-19 Neil Booth + + * c-lex.c (c_lex): Remove CPP_INT, CPP_FLOAT cases. + * c-parse.in (yyerror, _yylex): Similarly. + * cppexp.c (parse_number, parse_defined, lex, _cpp_parse_expr): + Don't use CPP_INT, CPP_FLOAT; CPP_NUMBER is enough. + Update comments. + * cpplib.h (CPP_INT, CPP_FLOAT): Remove. + * cp/spew.c (read_token, yyerror): Remove CPP_INT, CPP_FLOAT cases. + + 2001-07-18 Jeff Sturm + + * dwarf2out.c (dwarf2out_abstract_function): Don't emit + in-class declaration at -g1. Fixes c++/2814. + + 2001-07-18 Richard Henderson + + * doc/md.texi (reload_in/out): Document restrictions in predicates + and constraints for these patterns. Document empty string matching + ALL_REGS. + + 2001-07-18 Rainer Orth + + * defaults.h (ASM_OUTPUT_WEAK_ALIAS): Check for ASM_WEAKEN_LABEL. + + Wed Jul 18 20:47:36 CEST 2001 Jan Hubicka + + * cse.c: Undo my previous patch. + + 2001-07-18 Tom Tromey + + For PR java/2812: + * configure: Rebuilt. + * configure.in: Don't check for iconv.h or iconv(); use AM_ICONV + instead. + * aclocal.m4 (AM_ICONV): New macro from Bruno Haible. + + Wed Jul 18 18:46:30 CEST 2001 Richard Henderson + Jan Hubicka + + * flow.c (redirect_edge_and_branch): Bail out on complex edges. + (try_optimize_cfg): Do not remove tail recursive labels before sibcall. + * jump.c (mark_jump_label): Do not forward branches. + + Wed Jul 18 18:35:01 CEST 2001 Jan Hubicka + + * cse.c (delete_trivially_dead_insns): Delete the libcall block + when return value is unused. + + Wed Jul 18 18:28:16 CEST 2001 Jan Hubicka + + * gcse.c (pre_insert_copy_insn): Call update_ld_motion_stores. + + Wed Jul 18 12:05:29 2001 Nicola Pero + + * gthr-posix.h (__gthread_objc_mutex_trylock): Fixed return value + on error. We can't blindly return the result of + pthread_mutex_trylock because it returns a positive number on + error, while we must return -1 on error. + (__gthread_objc_mutex_lock, __gthread_objc_mutex_unlock): Similar + fixes. + Reported by Stephen Brandon . + + 2001-07-18 Andreas Jaeger + + * integrate.c (output_inline_function): Correct type of debug_hooks. + + 2001-07-18 Toon Moene + + * combine.c (combine_simplify_rtx): DIV can be treated + associatively for floats if unsafe math optimisations are enabled. + + 2001-07-17 Richard Henderson + + * reload.c (push_secondary_reload): Accept empty-string for ALL_REGS. + + 2001-07-17 Richard Henderson + + * calls.c (prepare_call_address): New parameter SIBCALLP. If true, + don't force the function address into a register. + (expand_call, emit_library_call_value_1): Update callers. + * builtins.c (expand_builtin_apply): Likewise. + * expr.h (prepare_call_address): Update decl. + + 2001-07-17 Chandrakala Chavva + + * config.gcc: For *-*-chorusos triplet, get chorus.h file from + config directory. + * config/i386/chorus.h: Move up. + * config/sparc/chorus.h: Likewise. + * config/rs6000/chorus.h: Likewise. + * config/chorus.h: Moved here. + + 2001-07-17 Andreas Schwab + + * configure.in (assembler eh_frame optimization): Handle big + endian. + * configure: Regenerated. + + Tue Jul 17 23:43:31 CEST 2001 Jan Hubicka + + * expr.c (epxand_expr): Convert divisions into multiplications by + reciprocals if -ffast-math. + + 2001-07-17 Neil Booth + + * dbxout.c (dbxout_really_begin_function): Rename to + dbxout_begin_function. + (dbx_debug_hooks, xcoff_debug_hooks): Update. + (dbxout_begin_function): Remove. + (dbxout_function): Update. + (dbxout_source_line): Update prototype. + * dbxout.h (dbxout_begin_function): Remove. + * debug.c (do_nothing_debug_hooks): Update. + (debug_nothing_tree): Update. + (debug_nothing_charstar_rtx): Remove. + * debug.h (union tree_node): Declare. + (struct rtx_def): Remove. + (gcc_debug_hooks): New hooks begin_prologue, end_prologue, + begin_function. Change source_line prototype. + (debug_nothing_tree): New. + (debug_nothing_charstar_rtx): Delete. + (dwarf2out_begin_prologue): Moved from ... + * tree.h: ... here. + * dwarf2out.c (dwarf2_debug_hooks): Update. + (dwarf2out_begin_prologue): Update prototype. If genuine dwarf2 + debug info, call dwarf2out_source_line. + (dwarf2out_souce_line): Update prototype. + * dwarfout.c (dwarfout_begin_function): Rename dwarfout_end_prologue. + Change prototype, make static. + (dwarfout_source_line): Update prototype. + (dwarf_debug_hooks): Update. + * dwarfout.h (dwarfout_begin_function): Remove. + * final.c (final_start_function, final_scan_insn): Use appropriate + debug hooks, update to use notice_source_line. + (output_source_line): Rename notice_source_line. Don't call the + source_line debug hook. + * sdbout.c (sdbout_begin_function): Rename sdbout_begin_prologue, + make static, update prototype. + (sdbout_mark_begin_function): Rename sdbout_begin_function, update + prototype. + (sdbout_end_prologue): New. + (sdbout_source_line): Update prototype. + (sdbout_debug_hooks): Update. + (sdbout_symbol): Remove unused var. + * sdbout.h (sdbout_begin_function, sdbout_mark_begin_function): + Delete. + * varasm.c: Include debug.h. + (assemble_start_function): Use begin_function debug_hook. + * xcoffout.c (xcoffout_begin_prologue): Rename xcoffout_begin_function, + update with prototype. + (xcoffout_source_line): Update prototype. + * xcoffout.h (xcoffout_begin_prologue): Rename xcoffout_begin_function, + update prototype. + (xcoffout_source_line): Update prototype. + + 2001-07-17 Richard Henderson + + * c-typeck.c (build_binary_op): Do not shorten unsigned + right shift after sign extension. + + Tue Jul 17 16:56:05 CEST 2001 Jan Hubicka + + * combine.c (combine_simplify_rtx): Attempt to simplify + a*(b/c) as (a*b)/c for floats in unsafe_math mode. + + * simplify-rtx.c (avoid_constatn_pool_reference): New static function. + (simplify_binary_operation, simplify_unary_operation, + simplify_relational_operation): Use it. + + * combine.c (combine_simplify_rtx): Don't do associative law + on divisions; allow associative law on floats. + + 2001-07-17 H.J. Lu + Rainer Orth + + * c-pragma.h (HANDLE_PRAGMA_WEAK): Define iff ASM_WEAKEN_LABEL and + ASM_OUTPUT_WEAK_ALIAS are defined. + * defaults.h (ASM_OUTPUT_WEAK_ALIAS): Define if possible. + * config/mips/iris6.h (ASM_OUTPUT_WEAK_ALIAS, ASM_WEAKEN_LABEL): + Moved ... + * config/mips/iris5.h: ... here. + (HANDLE_SYSV_PRAGMA): Defined as 1. + * varasm.c (weak_finish): Use ASM_OUTPUT_WEAK_ALIAS. + * doc/tm.texi (ASM_OUTPUT_WEAK_ALIAS): Support the undefined weak + symbol. + + 2001-07-17 Joseph S. Myers + + * c-parse.in (all_prefix_attributes): New variable. + (PUSH_DECLSPEC_STACK, POP_DECLSPEC_STACK): New macros. + (maybe_resetattrs): New production. + (c_parse_init, datadef, fndef, datadecl, setspecs, setattrs, decl, + maybe_type_quals_setattrs, initdecls, notype_initdecls, initdcl, + notype_initdcl, nested_function, notype_nested_function, + component_decl, components, components_notype, + component_declarator, component_notype_declarator, + absdcl_maybe_attribute, parm, firstparm, setspecs_fp, ivar_decl, + ivars, mydecl, myparm): Update. Avoid prefix attributes just + after a comma being applied to more than one declarator. + * doc/extend.texi (Attribute Syntax): Update. Remove + documentation of bugs that are no longer present. + + 2001-07-13 Eric Christopher + + * config/mips/mips.h: Change TUNE_MIPS* options to use + mips_tune. + (EXTRA_SPECS): Add cc1_cpu_spec. + * config/mips/mips.md (muldf3): Fix typo. + + 2001-07-16 Richard Henderson + + * config/m68k/m68k.c: Include expr.h and reload.h. + (print_operand_address) [16 bit int]: Cast INTVAL to int for %d. + [general int]: Use HOST_WIDE_INT_PRINT_DEC. + + 2001-07-16 Daniel Berlin + Richard Henderson + + * cse.c (set_live_p): Take INSN argument for cc0; update callers. + (insn_live_p): Fix fall off end of function. + (dead_libcall_p): Remove COUNTS argument; update callers. + (delete_trivially_dead_insns): Remove unused variables. + + 2001-07-17 Andreas Jaeger + + * config/i386/unix.h (ASM_OUTPUT_MI_THUNK): Fix output format for + x86-64 pic support. + + * lcm.c (optimize_mode_switching): Avoid warning for unused + variable if !NORMAL_MODE. + + * flow.c (try_crossjump_to_edge): Remove unused variable. + + 2001-07-16 John David Anglin + + * inclhack.def (ultrix_atexit_param): New hack to fix ultrix 4.3 + atexit declaration in stdlib.h. + + 2001-07-16 Richard Begg + + * fixinc/inclhack.def(hpux_vsnprintf): brokenness in stdio.h + + Mon Jul 16 22:48:00 CEST 2001 Jan Hubicka + + * basic-block.h (CLEANUP_PRE_SIBCALL): New constant. + * except.c (finish_eh_generation): Update call of cleanup_cfg; + do rebuild_jump_labels instead of jump_optimize + * sibcall.c (optimize_sibling_and_tail_recursive_call): Likewise. + * toplev.c (rest_of_compulation): Likewise for -Wreturn_type. + * flow.c (try_optimize_cfg): Remove unneeded code_labels. + + * flow.c: Include timevar.h + (find_basic_block): Push/pop timevar; + (cleanup_cfg): Likewise. + * timevar.def (TV_CFG, TV_CLEANUP_CFG): New. + * Makefile: Add dependencies on timevar.h + + * integrate.c (save_for_inline): Kill all BASIC_BLOCK notes. + (copy_insn_list): Avoid killing of BASIC_BLOCK notes. + + * rtl.h (delete_trivially_dead_insns): Add new parameter. + * toplev.c (rest_of_compilation): Update calls. + * cse.c (set_live_p, insn_live_p, dead_libcall_p): Break out from ... + (delete_trivially_dead_insns): ... here; accept new argument + preserve_basic_blocks; preserve basic blocks if set. + + * reg-stack.c (stack_regs_mentioned): Return 0 if + stack_regs_mentioned_data is not initialized. + (reg_to_stack): Make stack_regs_mentioned survive after the + reg-stack is completted; do not call cleanup_cfg. + * toplev.c (rest_of_compilation): Do cleanup_cfg before bb-reorder; + make cleanup_cfg after bb-reorder to output to debug file. + + 2001-07-16 Richard Henderson + + * regclass.c (init_reg_sets): Use only 32 bits per initializer + from int_reg_class_contents. + + 2001-07-16 Richard Henderson + + * hard-reg-set.h (regs_invalidated_by_call): Declare. + * regclass.c (regs_invalidated_by_call): Move from cse.c. + (init_reg_sets_1): Move initialization from cse_main. + * cse.c (regs_invalidated_by_call): Move to regclass.c. + (cse_main): Move its initialization also. + * df.c (df_insn_refs_record): Use regs_invalidated_by_call. + * flow.c (propagate_one_insn): Likewise. + * gcse.c (compute_hash_table): Likewise. + (compute_kill_rd, compute_store_table): Likewise. + * sched-deps.c (sched_analyze_1): Likewise. + + Mon Jul 16 18:07:07 2001 J"orn Rennecke + + * gcse.c (pre_insert_copy_insn): Use gen_move_insn instead of + gen_rtx_SET. + + 2001-07-16 Steve Ellcey + + * dominance.c (calc_dfs_tree_nonrec): Reverse order of tests + in if statement so we don't access undefined memory. + + 2001-07-16 Daniel Berlin + + * gcse.c: Update comment at top. + Update comment on mem handling. + mem_last_set, mem_first_set, mem_set_in_block: gone. + Declaration of reg_set_info: gone. + (oprs_unchanged_p): Don't use mem_*set_* anymore. They are + pointless with load_killed_in_block_p (they are *more* + conservative then it, not less, and less accurate). + (oprs_not_set_p): Ditto. + (alloc_gcse_mem): Don't allocate mem_set_in_block + (free_gcse_mem): Don't free it, either. + (record_last_mem_set_info): Update comment in front, remove + mem_*set_* stuff. Note the reason we don't handle stores directly + here. + (compute_hash_table): Update comments to reflect reality. Remove + mem_*set_* references. + (reset_opr_set_tables): Remove mem_*set_* references. + (mark_call): Ditto. + (mark_set): Ditto. Also remove double sets of bitmaps for REG's. + (mark_clobber): Ditto (on both parts, we double set here too). + (expr_killed_p): Remove mem_set_in_block test. + (compute_transp): Remove mem_set_in_block test. + + * ssa-ccp.c: (optimize_unexecutable_edges): Add note about removal + of edge, and removal of phi alternative to dump file. + (ssa_ccp_substitute_constants): Add note about register now being + constant, and which uses were replaced in what insns to dump file. + + 2001-07-16 Andreas Jaeger + + * gcov.c (output_data): Use HOST_WIDEST_INT_PRINT_DEC to output + variables of type HOST_WIDEST_INT. + + * libgcc2.c (__bb_exit_func): Handle gcov_type as long long. + (__bb_exit_func): Correct type of count_max to avoid overflow. + (num_digits): Handle long long argument. + + * combine.c (gen_lowpart_for_combine): Remove unused variable. + + 2001-07-16 Neil Booth + + * output.h (sdb_begin_function_line): Restore as an extern + variable. + * sdbout.c (sdb_begin_function_line): Make extern. + + 2001-07-15 Richard Henderson + + * machmode.def (Pmode): Redefine if GENERATOR_FILE. + * genrecog.c (maybe_both_true_mode): New. + (maybe_both_true_2): Use it. + (write_switch): Don't put Pmode in a switch. + * rtl.c (mode arrays): Don't explicitly size them. + + Sun Jul 15 14:07:36 CEST 2001 Jan Hubicka + + * toplev.c (rest_of_compilation): Fix register_life_up_to_date + handling; move unconditional splitting before mode switching. + + * i386.md (type): Add fistp type. + (i387, length_attr, scheduling definitions): Handle this type. + (fix_trunc?f?i2): Revamp to use mode switching. + (fix_trunct?f?i_nonmemory, fix_trunc?f?i_memory): New patterns. + * i386.h (fp_cw_mode): New enum + (OPTIMIZE_MODE_SWITCHING, NUM_MODES_FOR_MODE_SWITCHING, MODE_NEEDED, + MODE_PRIORITY_TO_MODE, ENUM_MODE_SET): New macros. + + Sun Jul 15 12:53:51 2001 Richard Kenner + + * Makefile.in (integrate.o): Add debug.h. + * integrate.c (debug.h): Add. + (output_inline_function): Save, reset, and restore debug_hooks. + + 2001-07-15 Richard Henderson + + * config/alpha/alpha.c (alpha_emit_xfloating_compare): Use CCmode + instead of COMPARE for the EQUIV expression. + + 2001-07-15 Richard Henderson + + * flow.c (redirect_edge_and_branch_force): Initialize + global_live_at_start and global_live_at_end. + (allocate_bb_life_data): Export. + * basic-block.h (allocate_bb_life_data): Declare. + * toplev.c (rest_of_compilation): Call it. + + 2001-07-15 Richard Henderson + + * config/alpha/alpha.c (alpha_tablejump_addr_vec): New. + (alpha_tablejump_best_label): New. + * config/alpha/alpha-protos.h: Declare them. + * config/alpha/alpha.md: Use braced strings for code blocks. + (tablejump_osf): Break out add with r29. + (tablejump_osf_internal): Remove. + (tablejump_osf_nt_internal): Rename from tablejump_nt_internal, + use alpha_tablejump_addr_vec and alpha_tablejump_best_label. + + Sun Jul 15 00:53:35 CEST 2001 Jan Hubicka + + * loop.c (scan_loop): Add USEs inside PARALLELs into dependencies + of the movable. + + * toplev.c (rest_of_compilation): Allow new pseudoes for mode switching. + + * i386-protos.h (ix86_split_fp_branch): Update prototype. + (ix86_fp_jump_nontrivial_p): New. + * i386.md (fp_jcc_?): Update call of split_fp_branch; + use ix86_fp_jump_nontrivial_p. + * i386.c (ix86_fp_jump_nontrivial_p): New. + (ix86_split_fp_branch): Accept code instead of rtx. + (ix86_expand_compare): Expand comparison early in case + doing so is resonably cheap. + + 2001-07-15 Nick Clifton + + * config/rs6000/sysv4.h (CPP_ENDIAN_BIG_SPEC): Assert 'endian' + not 'machine'. + (CPP_ENDIAN_LITTLE_SPEC): Assert 'endian' not 'machine'. + (CPP_ENDIAN_SOLARIS_SPEC): Assert 'endian' not 'machine'. + + 2001-07-15 Neil Booth + + * dbxout.c (dbxout_source_line): Make static, update prototype. + (dbx_debug_hooks, xcoff_debug_hooks): Add new hooks. + (dbxout_init, dbxout_finish, dbxout_source_line, + dbxout_begin_block, dbxout_end_block): Update for new prototypes. + * dbxout.h (dbxout_source_line): Delete. + * debug.c (debug_nothing_file, debug_nothing_file_int, + debug_nothing_file_charstar_rtx): New. + (do_nothing_debug_hooks): Update. + (debug_nothing_void, debug_nothing_charstar_rtx, + dwarf2out_end_epilogue): New. + (debug_nothing_file_charstar, debug_nothing_file_int_int): Rename. + * debug.h (struct rtx_def): Declare. + (gcc_debug_hooks): New hooks source_line, end_epilogue + and end_function. + (debug_nothing_void, debug_nothing_charstar_rtx, + dwarf2out_end_epilogue): New. + (debug_nothing_file_charstar, debug_nothing_file_int_int): Rename. + * dwarf2out.c (dwarf2out_source_line): Make static, update prototype. + (dwarf2_debug_hooks): Update. + (dwarf2out_init, dwarf2out_finish, dwarf2out_source_line, + dwarf2out_begin_block, dwarf2out_end_block): Update for new prototypes. + * dwarf2out.h (dwarf2out_source_line): Remove. + * dwarfout.c (dwarfout_end_epilogue, dwarfout_end_function): + Make static, update prototype. + (dwarfout_init, dwarfout_finish, dwarfout_source_line, + dwarfout_begin_block, dwarfout_end_block): Update for new prototypes. + (dwarf_debug_hooks): Update. + * dwarfout.h (dwarfout_end_epilogue, dwarfout_source_line, + dwarfout_end_function): Remove. + * final.c (profile_function): Use debug hooks for ending functions + and epilogues. + (output_source_line, final_end_function): Update prototype, + use debug hooks. + (final_start_function, final_scan_insn): Update. + * output.h (sdb_begin_function_line): Remove. + (final_end_function): Update prototype. + * sdbout.c (sdb_begin_function_line): Make static. + (PUT_SDB_EPILOGUE_END): Move to sdbout_end_epilogue. + (sdbout_source_line): New. + (sdbout_end_epilogue, sdbout_end_function): Make static, update + prototypes. + (sdb_debug_hooks): Update. + (sdbout_init, sdbout_source_line, + sdbout_begin_block, sdbout_end_block): Update for new prototypes. + * sdbout.h (sdbout_end_epilogue, sdbout_end_function): Remove. + * toplev.c (compile_file, rest_of_compilation): Update. + * tree.h (dwarf2out_end_epilogue): Move to debug.h. + * xcoffout.c (xcoffout_source_line, xcoffout_begin_block, + xcoffout_end_block, xcoffout_end_epilogue, xcoffout_end_function): + Update for prototype changes. + * xcoffout.h (xcoffout_source_line, xcoffout_begin_block, + xcoffout_end_block, xcoffout_end_epilogue): Update prototypes. + + 2001-07-15 Richard Henderson + + * config/alpha/alpha.h (TARGET_ABI_OSF): New. + (TARGET_ABI_WINDOWS_NT, TARGET_ABI_OPEN_VMS): Rename; update users. + * config/alpha/alpha-protos.h: Update TARGET_ABI_* users. + * config/alpha/alpha.c: Likewise. + * config/alpha/alpha.md: Likewise. + * config/alpha/alpha32.h: Likewise. + * config/alpha/vms.h: Likewise. + (OPEN_VMS): Remove. + + 2001-07-14 Richard Henderson + + * config/alpha/alpha.md: Use define_constants for unspec values. + Substitute throughout. + + 2001-07-14 Tim Josling + + * tree.def (EXPON_EXPR) remove. Never supported anyway. + + 2001-07-14 John David Anglin + + * pa.md: Remove unused constraints from define_split's. + + 2001-04-14 Richard Henderson + + * ifcvt.c (find_cond_trap): Test for exit block. + + Sun Jul 15 00:50:20 CEST 2001 Jan Hubicka + + Re-install recently reverted patch. + * emit-rtl.c (try_split): Update mark_jump_label call. + * flow.c (find_sub_basic_blocks): Likewise. + * jump.c (cross_jump_death_matters, find_cross_jump, do_cross_jump, + jump_back_p): Kill. + (mark_all_labels): Kill second parameter. + (jump_optimize, jump_optimize_1): Kill cross_jump parameter. + (rebuild_jump_labels, jump_optimize_minimal): Update call + of jump_optimize_1. + (jump_optimize_1): Kill crossjumping code. + (mark_jump_label): Kill cross_jump parameter. + * rtl.h (mark_jump_label, jump_optimize): Update prototypes. + (JUMP_CROSS_JUMP, JUMP_CROSS_JUMP_DEATH_MATTERS): Kill. + * reg-stack.c (reg_to_stack): Do not rebuild if not needed; do + splitting. + * toplev.c (enum dump_file_index): Kill DFI_jump2; put DFI_stack before + DFI_bpro. + (dump_file_info): Likewise. + (rest_of_compilation): Update calls to jump_optimize; kill jump2 pass; + reorganize passes to do reg-stack first, bb-reorder second. + * invoke.texi (-d letters doc): Remove the jump2 pass. + + 2001-07-14 Richard Henderson + + * ifcvt.c (find_cond_trap): New. + (find_if_header): Call it. + (merge_if_block): Relax existing jump sanity check. + * jump.c (jump_optimize_1): Remove conditional trap handling. + + 2001-07-14 Alan Modra + + * config/pa/pa.c (emit_hpdiv_const): Return reg is r2 for 64-bit + millicode. + (insn_refs_are_delayed): Correct comment. + * config/pa/pa.h (INSN_REFERENCES_ARE_DELAYED): Likewise. + * config/pa/pa.md (mulsi3): If TARGET_64BIT, clobber r2 + instead of r31. Make associated insn !TARGET_64BIT, and + provide an additional 64-bit insn that clobbers r2. + (divsi3): Likewise. + (udivsi3): Likewise. + (modsi3): Likewise. + (umodsi3): Likewise. + + Sat Jul 14 02:58:38 CEST 2001 Jan Hubicka + + * bb-reorder.c (skip_insn_after_block): Get past the line number notes. + + * flow.c (redirect_edge_and_branch_force, split_edge, + try_crossjump_to_edge): Use set_block_for_new_insns. + * bb-reorder.c (emit_jump_to_block_after): Call set_block_for_new_insns. + + 2001-07-13 H.J. Lu (hjl@gnu.org) + + * config/elfos.h (UNIQUE_SECTION): Enable .bss section with + the correct patch. + + 2001-07-13 Geoffrey Keating + + Revert H.J. Lu's UNIQUE_SECTION patch of 2001-07-13. + + 2001-07-13 Joseph S. Myers + + * c-common.c (decl_attributes): Take a pointer to the node to + which attributes are to be attached, and a flags argument. + * c-common.h (enum attribute_flags): New. + (decl_attributes): Update prototype. + * c-decl.c (start_decl, push_parm_decl, finish_struct, + finish_enum, start_function): Update calls to decl_attributes. + * c-parse.in (component_declarator, component_notype_declarator, + label): Update calls to decl_attributes. + + Fri Jul 13 23:04:00 2001 Denis Chertykov + + * config/avr/avr.md (strlenhi): PARALLEL keyword removed. + * config/avr/avr.c (legitimate_address_p): Return value changed + from letter to register classes. For better debugging. + + 2001-07-13 Kazu Hirata + + * jump.c (reversed_comparison_code_parts): Fix comment typos. + + 2001-07-13 H.J. Lu (hjl@gnu.org) + + * config/elfos.h (UNIQUE_SECTION): Enable .bss section. + + 2001-07-13 Marc Espie + + * config.gcc (*-*-openbsd*): Add fragment to compile libgcc + correctly for shared configurations. + * config/t-libgcc-pic: New. + * config/{i386,m68k,sparc}/t-openbsd: New. + * config/openbsd.h: Include cpu_spec in cpp_spec where needed. + Support -shared. Support debugging libraries with -g. + * config/i386/openbsd.h: Correct ASM_COMMENT_START. Ensure dwarf2 + frame information does not emit pointer diffs. + * config/sparc/openbsd.h: Ensure dwarf2 frame information does not + emit pointer diffs. + + 2001-07-13 Geoffrey Keating + + Revert Jan Hubicka's patch of Fri Jul 13 14:46:21 CEST 2001. + + 2001-07-13 David Edelsohn + + * combine.c (try_combine): Ensure const_int pow2 is positive. + + 2001-07-13 Hartmut Penner + + * config.gcc: Add configuration for s/390. + * config/s390/s390.c: New. Subroutines for code generation. + * config/s390/s390.h: New. Definitions for s/390. + * config/s390/s390-protos.h: New. Prototypes. + * config/s390/linux.h: New. Definitions for linux for s/390. + * config/s390/linux64.h: New. Definitions for linux for zSeries. + * config/s390/t-linux: New. Makefile fragment. + * config/s390/s390.md: New. Machine description for s/390 and zSeries. + * config/s390/fixdfdi.h: New. Fix L_fix*di. + + Fri Jul 13 14:46:21 CEST 2001 Jan Hubicka + + * emit-rtl.c (try_split): Update mark_jump_label call. + * flow.c (find_sub_basic_blocks): Likewise. + * jump.c (cross_jump_death_matters, find_cross_jump, do_cross_jump, + jump_back_p): Kill. + (mark_all_labels): Kill second parameter. + (jump_optimize, jump_optimize_1): Kill cross_jump parameter. + (rebuild_jump_labels, jump_optimize_minimal): Update call + of jump_optimize_1. + (jump_optimize_1): Kill crossjumping code. + (mark_jump_label): Kill cross_jump parameter. + * rtl.h (mark_jump_label, jump_optimize): Update prototypes. + (JUMP_CROSS_JUMP, JUMP_CROSS_JUMP_DEATH_MATTERS): Kill. + * reg-stack.c (reg_to_stack): Do not rebuild if not needed; do + splitting. + * toplev.c (enum dump_file_index): Kill DFI_jump2; put DFI_stack before + DFI_bpro. + (rest_of_compilation): Update calls to jump_optimize; kill jump2 pass; + reorganize passes to do reg-stack first, bb-reorder second. + * invoke.texi (-d letters doc): Remove the jump2 pass. + + 2001-07-12 Steve Ellcey + + * toplev.c (compile_file): Put call of ASM_FILE_START inside ifdef. + + Thu Jul 12 17:57:16 CEST 2001 Jan Hubicka + + * flow.c (try_optimize_cfg): Delete whole chain of trivially dead + basic blocks. + (verify_flow_info): Make diagnostics prettier. + + Thu Jul 12 16:48:54 CEST 2001 Jan Hubicka + + * flow.c (find_basic_blocks_1): Do not emit NOP after call. + + * flow.c (outgoing_edges_match): Return early if condition reversal + failed. + + 2001-07-06 Richard Sandiford + + * config/mips/mips.c (print_operand): Extend '%D' to memory operands. + (mips_move_2words): When splitting a move into two instructions, + prefix the second address operand with '%D'. + + 2001-07-12 Neil Booth + + * Makefile.in (final.o): Depend on debug.h. + * dbxout.c (dbxout_begin_block, dbxout_end_block): New. + (dbx_debug_hooks): Add new hooks. + (xcoff_debug_hooks): New. + * debug.c (debug_nothing_file_int_int): New. + (do_nothing_debug_hooks): Update. + * debug.h (gcc_debug_hooks): New hooks begin_block and end_block. + (debug_nothing_file_int_int): New. + * dwarf2out.c (dwarf2out_begin_block, dwarf2out_end_block): Make + static, update prototype. + (dwarf2_debug_hooks): Update. + * dwarf2out.h (dwarf2out_begin_block, dwarf2out_end_block): Remove. + * dwarfout.c (dwarfout_begin_block, dwarfout_end_block): Make + static, update prototype. + (dwarf_debug_hooks): Update. + * dwarfout.h (dwarfout_begin_block, dwarfout_end_block): Remove. + * final.c: Include debug.h. + (final_scan_insn): Use debug hooks when beginning and ending blocks. + * sdbout.c (sdbout_begin_block, sdbout_end_block): Make + static, update prototype. + (sdb_debug_hooks): Update. + * sdbout.h (sdbout_begin_block, sdbout_end_block): Remove. + * toplev.c: Distinguish between xcoff and dbx. + + * f/lex.c (ffelex_file_pop_, ffelex_file_push_, ffelex_hash_): + Call all debug hooks, not just dwarf ones. + + 2001-07-11 Timothy Wall + + * config.gcc: Add configuration for AIX5/IA64. + * config/ia64/aix.h: New. AIX5/IA64-specific configuration. + * config/ia64/crt[in].asm: New. Generic static ctor/dtor + support prefix/suffix code. + * config/ia64/t-aix: New. Makefile fragment. + * config/ia64/unwind-aix.c: New. Unwind table entry lookup. + + 2001-07-11 Kazu Hirata + + * recog.c (validate_change): Fix a comment typo. + + 2001-07-11 Neil Booth + + * Makefile.in (c-lex.o): Wrap long lines. Depend on debug.h. + * c-lex.c (cb_file_change, cb_define, cb_undef): Use debug + hooks directly. + * dbxout.c (dbx_debug_hooks): Add new hooks. + (dbxout_start_new_source_file): Rename dbxout_start_source_file, + make static. + (dbxout_resume_previous_source_file): Rename dbxout_end_source_file, + make static. + * dbxout.h (dbxout_start_new_source_file, + dbxout_resume_previous_source_file): Delete. + * debug.c (do_nothing_debug_hooks): Add new hooks. + (debug_nothing_init_finish): Rename debug_nothing_file_charstar. + (debug_nothing_int_charstar, debug_nothing_int): New. + * debug.h (gcc_debug_hooks): New hooks define, undef, + start_source_file and end_source_file. + (debug_nothing_init_finish): Rename debug_nothing_file_charstar. + (debug_nothing_int_charstar, debug_nothing_int): New. + * dwarf2out.c (dwarf2_debug_hooks): Add new hooks. Move into + the conditionally compiled section. + (dwarf2out_start_source_file, dwarf2out_end_source_file, + dwarf2out_define, dwarf2out_undef): Make static. + * dwarf2out.h (dwarf2out_start_source_file, dwarf2out_end_source_file, + dwarf2out_define, dwarf2out_undef): Remove. + * dwarfout.c (dwarf_debug_hooks): Add new hooks. + (dwarfout_start_source_file, dwarfout_end_source_file, + dwarfout_define, dwarfout_undef): Make static. + (dwarfout_start_source_file_check, + dwarfout_end_source_file_check): New. + (dwarfout_define, dwarfout_finish): Update. + * dwarfout.h (dwarfout_start_new_source_file, + dwarfout_resume_previous_source_file, dwarfout_define, + dwarfout_undef): Remove. + * sdbout.c (sdb_debug_hooks): Add new hooks. + (sdbout_start_new_source_file): Rename sdbout_start_source_file, + make static. + (sdbout_resume_previous_source_file): Rename sdbout_end_source_file, + make static, take an arg. + * sdbout.h (sdbout_start_new_source_file, + sdbout_resume_previous_source_file): Delete. + * toplev.c (debug_start_source_file, debug_end_source_file, + debug_define, debug_undef): Delete. + * toplev.h (debug_start_source_file, debug_end_source_file, + debug_define, debug_undef): Delete. + + * java/jcf-parse.c: Include debug.h. + (parse_class_file): Update to use debug hooks directly. + * java/Make-lang.in (jcf-parse.o): Depend on debug.h. + + Wed Jul 11 10:07:18 2001 Richard Kenner + + * alias.c (set_mem_alias_set): New function. + * rtl.h (set_mem_alias_set): Declare it. + * builtins.c (expand_builtin_return_addr): Call it instead of + using MEM_ALIAS_SET accessor. + (expand_builtin_setjmp_setup, expand_builtin_longjmp): Likewise. + (get_memory_rtx, expand_builtin_va_arg): Likewise. + (expand_builtin_va_copy):Likewise. + * caller-save.c (setup_save_areas): Likewise. + * calls.c (compute_argument_addresses): Likewise. + * explow.c (set_mem_attributes): Likewise. + * expr.c (emit_single_push_insn, emit_push_insn): Likewise. + (expand_assignment, store_constructor_field, store_field): Likewise. + (expand_expr_unaligned): Likewise. + * function.c (assign_stack_temp_for_type): Likewise. + (put_reg_into_stack, gen_mem_addressof): Likewise. + * ifcvt.c (noce_try_cmove_arith): Likewise. + * reload1.c (reload, alter_reg): Likewise. + * config/alpha/alpha.c (get_aligned_mem): Likewise. + (alpha_set_memflags_1, alpha_expand_unaligned_load): Likewise. + (alpha_expand_unaligned_store): Likewise + (alpha_expand_unaligned_load_words): Likewise. + (alpha_expand_unaligned_store_words): Likewise. + (alpha_expand_block_clear, alpha_expand_prologue): Likewise. + (alpha_expand_epilogue): Likewise. + * config/arc/arc.c (arc_setup_incoming_varargs): Likewise. + * config/clipper/clipper.c (clipper_builtin_saveregs): Likewise. + * config/i386/i386.c (legitimize_pic_address): Likewise. + * config/i960/i960.c (setup_incoming_varargs): Likewise. + * config/ia64/ia64.c (spill_restore_mem): Likewise. + * config/m32r/m32r.c (m32r_setup_incoming_varargs): Likewise. + * config/m8k/m88k.c (m88k_builtin_saveregs): Likewise. + * config/mips/mips.c (mips_va_arg): Likewise. + * config/mn10300/mn10300.c (mn10300_builtin_saveregs): Likewise. + * config/pa/pa.c (hppa_builtin_saveregs): Likewise. + * config/rs6000/rs6000.c (rs6000_emit_move): Likewise. + (setup_incoming_varargs, rs6000_va_arg): Likewise. + (rs6000_emit_eh_toc_restore, rs6000_emit_prologue): Likewise. + (rs6000_emit_epilogue): Likewise. + * config/sh/sh.c (sh_builtin_saveregs): Likewise. + * config/sparc/sparc.c (sparc_va_arg): Likewise. + * config/v850/v850.c (v850_va_arg): Likewise. + + Wed Jul 11 21:27:25 CEST 2001 Jan Hubicka + + * flow.c (merge_blocks_move_successor_nojumps): Do not crash + when fallthru edge is present. + (mege_blocks): Handle case where creation of jump insn + is required. + + * basic-block.h (CLEANUP_EXPENSIVE, CLEANUP_CROSSJUMP, + CLEANUP_POST_REGSTACK): New constants. + * except.c (finish_eh_generation): Update call of cleanup_cfg, + * jump.c (rtx_renumbered_equal_p): Handle 't' fields. + * output.h (cleanup_cfg): Update prototype. + * reg-stack.c (reg_to_stack): Use cleanup_cfg instead of jump_optimize + * sibcall.c (optimize_sibling_and_tail_recursive_call): Update + cleanup_cfg call; kill missleading comment. + * toplev.c (rest_of_compilation): Update all cleanup_cfg calls. + * flow.c (merge_blocks, try_optimize_cfg, cleanup_cfg): Accept mode + parameter; control optimizations performed using it. + (flow_find_cross_jump, outgoing_edges_match, try_crossjump_to_edge, + try_crossjump_bb): New functions. + + 2001-07-11 John David Anglin + + * pa.c (pa_output_function_prologue): Delete prototype. Make function + extern. + * pa.h (ASM_OUTPUT_MI_THUNK): Rename output_function_prologue to + pa_output_function_prologue. + * pa-protos.h (pa_output_function_prologue): New prototype. + + 2001-07-11 John David Anglin + + * stmt.c (emit_case_nodes): Widen high and low instead of new_bound + and low to get correct sign extension in low+high test. + + 2001-07-11 Janis Johnson + + * gcov.c (arcdata): Use gcov_type to fix branch percentage + for large hit count. + + * profile.c (branch_prob): Fix .bbg info for computed gotos + and C++ EH code. + + 2001-07-11 Mark Mitchell + + * stmt.c (parse_output_constraint): New function, split out + from ... + (expand_asm_operands): ... here. Use parse_output_constraint. + * tree.h (parse_output_constraint): Declare it. + + 2001-07-11 Richard Henderson + + * bitmap.c: Comment some functions; fiddle whitespace. + (bitmap_free): Don't export. + (bitmap_element_allocate): Use memset. + * bitmap.h (bitmap_free): Don't declare. + + 2001-07-11 Daniel Berlin + + * gcse.c, lcm.c, sched-deps.c: + s/free on sbitmap vectors/sbitmap_vector_free on sbitmap vectors/g + + * flow.c (flow_loops_find): Free dom if we found no loops, since + we aren't going to save it. + + * lcm.c (pre_edge_rev_lcm): Free st_antin, st_antout when we are + done. + + Wed Jul 11 09:00:48 2001 Jeffrey A Law (law@cygnus.com) + + * ssa-ccp.c (ssa_fast_dce): Free worklist when completed. + + Wed Jul 11 10:07:18 2001 Richard Kenner + + * dwarf2out.c (dwarf2out_init, dwarf2out_finish): Add dummy version + #ifndef DWARF2_DEBUGGING_INFO. + + 2001-07-11 Richard Sandiford + + * simplify-rtx.c (simplify_gen_subreg): Return null for QUEUED rtxes. + + 2001-07-11 Richard Sandiford + + * config/mips/mips.c (gen_int_relational): Tell the caller not to + reverse a branch if a NE comparison is implemented with GTU. + + 2001-07-11 Richard Sandiford + H.J. Lu + + * mips.md (call_internal1): Use CONSTANT_ADDRESS_P to check for + constant addresses. + (call_internal2): Likewise. + (call_value_internal1): Likewise. + (call_value_internal2): Likewise. + (call_value_multiple_internal1): Likewise. + (call_value_multiple_internal2): Likewise. + + 2001-07-10 Kazu Hirata + + * calls.c (emit_library_call_value_1): Fix a comment typo. + * dwarf2out.c (mem_loc_descriptor): Likewise. + * config/i386/i386.c (ix86_expand_aligntest): Likewise. + + 2001-07-11 David Billinghurst + + * simplify-rtx.c (simplify_subreg): Fix typo in comment + + Tue Jul 10 07:27:53 2001 Richard Kenner + + * recog.c (offsettable_address_p): Handle LO_SUM case. + * config/mips/mips.c (double_memory_operand): Use adjust_address_nv + instead of plus_constant. + + 2001-07-10 Stephane Carrez + + * reload1.c (merge_assigned_reloads): After a RELOAD_OTHER merge, + fix setting of the reloads of that reload to RELOAD_FOR_OTHER_ADDRESS. + + Tue Jul 10 07:27:53 2001 Richard Kenner + + * config/rs6000/rs6000.c (print_operand, case 'L', 'Y', 'Z'): Use + adjust_address_nv instead of plus_constant. + + 2001-07-10 Neil Booth + + * Makefile.in (toplev.o, sdbout.o, dbxout.o, dwarfout.o, + dwarf2out.o): Depend on debug.h, wrap long lines. + * dbxout.c: Include debug.h. + (dbx_debug_hooks): New. + (dbxout_init): Make static, take just 2 args. + (dbxout_finish): Make static. + * dbxout.h (dbxout_init, dbxout_finish): Delete. + * debug.c: New file. + * debug.h: New file. + * dwarf2out.c: Include debug.h. + (dwarf2_debug_hooks): New. + (dwarf2out_init): Make static. + (dwarf2out_finish): Make static, take 2 args. + * dwarf2out.h (dwarf2out_init, dwarf2out_finish): Delete. + * dwarfout.c: Include debug.h. + (dwarf_debug_hooks): New. + (dwarfout_init): Make static. + (dwarfout_finish): Make static, take 2 args. + * dwarfout.h (dwarfout_init, dwarfout_finish): Delete. + * sdbout.c: Include debug.h. + (sdb_debug_hooks): New. + (sdbout_init): Make static, take 2 args. + * sdbout.h (sdbout_init): Delete. + * toplev.c: Include debug.h. + (debug_hooks): New. + (compile_file): Set deubg_hooks based on command line options. + Use the hooks unconditionally rather than conditional compilation. + + Tue Jul 10 09:04:45 2001 Jeffrey A Law (law@cygnus.com) + + * ssa-ccp.c (first_phi_node): Remove. Replace uses with calls to + first_insn_after_basic_block_note instead. + + * df.c (df_bb_refs_unlink): #if 0 out for now. + + 2001-07-10 David Billinghurst + + * diagnostic.c (finish_diagnostic): Rename to + diagnostic_finish. Make it take an 'output_buffer *'. Adjust + calls thourghout. + + 2001-07-10 Jason Merrill + + * dwarf2out.c (dwarf2out_line): Emit -dA comment even when we have + .loc support. + + * collect2.c (main): Set COLLECT_NO_DEMANGLE for subprocesses. + (dump_file): Only pad the demangled name with spaces if the + mangled name was padded with spaces. + + 2001-07-10 Bernd Schmidt + + * bb-reorder.c (make_reorder_chain_1): Correct branch/fallthru + edge detection. + + Tue Jul 10 07:27:53 2001 Richard Kenner + + * expr.c (expand_expr, case COMPONENT_REF): Don't force using bitfield + extraction if no direct load if either EXPAND_CONST_ADDRESS or + EXPAND_INITIALIZER. + + * emit-rtl.c (adjust_address, adjust_address_nv): Change criteria for + whether can put offset inside LO_SUM to check mode alignment, not size. + + 2001-07-10 Gabriel Dos Reis + + * doc/tm.texi (Misc): Fix thinko. + + 2001-07-10 Jan van Male + + * regmove.c (replace_in_call_usage): Fix warnings. + * sched-deps.c (add_dependence): Fix warnings. + * simplify-rtx.c (simplify_subreg): Likewise. + Return NULL_RTX instead of NULL. + + * reg-stack.c (emit_swap_insn): Eliminate warnings. + (subst_asm_stack_regs): Likewise. + + * combine.c (num_sign_bit_copies): Cast bitwidth to int to avoid + warnings. + + * dwarf2out.c (output_call_frame_info): Declare i as int. + (build_abbrev_table): Declare n_alloc as int. + (dwarf2out_finish): Initialize die. + * except.c: Declare sjlj_funcdef_number as unsigned. + (connect_post_landing_pads): Declare j as unsigned. + (convert_to_eh_region_ranges): Initialize call_site. + (output_function_exception_table): Initialize tt_format_size. + * expr.c (move_by_pieces_1): Initialize to1. + (store_constructor): Initialize minelt and maxelt. + * flow.c (mark_regs_live_at_end): Declare i as unsigned. + * function.c (instantiate_decls): Avoid signed/unsigned warning. + + * c-decl.c (combine_parm_decls): Unused, remove. + * c-tree.h: Remove prototype for combine_parm_decls. + + * reload.c (push_reload): Fix warning. + (regno_clobbered_p): Likewise. + * reload1.c (replace_pseudos_in_call_usage): Likewise. + (reload_combine): Likewise. + + * bitmap.c: Rename bitmap_zero to bitmap_zero_bits to fix warnings. + * bitmap.h: Rename bitmap_zero to bitmap_zero_bits to fix + warnings. + * bitmap.c (bitmap_operation): Change user. + * bitmap.h (EXECUTE_IF_AND_COMPL_IN_BITMAP): Likewise. + + 2001-07-10 Eric Christopher + + * config/mips/mips.c (override_options): Fix typo. + + 2001-07-09 Stan Shebs + + * target.h (struct gcc_target): New fields init_builtins and + expand_builtin. + * target-def.h (TARGET_INIT_BUILTINS): New macro. + (TARGET_EXPAND_BUILTIN): New macro. + (TARGET_INITIALIZER): Add them. + * builtins.c: Include target.h. + (expand_builtin): Use targetm.expand_builtin. + (default_init_builtins): New function. + (default_expand_builtin): New function. + * expr.h (default_init_builtins): Declare. + (default_expand_builtin): Declare. + * c-common.c (c_common_nodes_and_builtins): Use + targetm.init_builtins. + * defaults.h (MD_INIT_BUILTINS): Remove. + * Makefile.in (builtins.o): Depend on target.h. + + * config/arm/arm.c (TARGET_INIT_BUILTINS): Define. + (TARGET_EXPAND_BUILTIN): Define. + * config/arm/arm.h (MD_INIT_BUILTINS): Remove. + (MD_EXPAND_BUILTIN): Remove. + + * config/c4x/c4x.c (TARGET_INIT_BUILTINS): Define. + (TARGET_EXPAND_BUILTIN): Define. + (c4x_init_builtins): Make endlink arg a local. + (c4x_print_operand): Fix typos in adjust_address usages. + * config/c4x/c4x-protos.h (c4x_init_builtins): Update decl. + * config/c4x/c4x.h (MD_INIT_BUILTINS): Remove. + (MD_EXPAND_BUILTIN): Remove. + + * config/i386/i386.c (TARGET_INIT_BUILTINS): Define. + (TARGET_EXPAND_BUILTIN): Define. + (ix86_init_mmx_sse_builtins): New function, was ix86_init_builtins. + (ix86_init_builtins): Call new function only if TARGET_MMX. + * config/i386/i386-protos.h (ix86_init_mmx_sse_builtins): Declare. + * config/i386/i386.h (MD_INIT_BUILTINS): Remove. + (MD_EXPAND_BUILTIN): Remove. + + * config/ia64/ia64.c (TARGET_INIT_BUILTINS): Define. + (TARGET_EXPAND_BUILTIN): Define. + * config/ia64/ia64.h (MD_INIT_BUILTINS): Remove. + (MD_EXPAND_BUILTIN): Remove. + + * doc/tm.texi: Document these changes. + + 2001-07-09 Diego Novillo + + * basic-block.h (tree_node): Forward declare if needed. + (struct basic_block_def): Add fields 'head_tree' and 'end_tree'. + (BLOCK_HEAD_TREE): Define. + (BLOCK_END_TREE): Define. + (struct loops): Rename field 'tree' to 'tree_root'. + * flow.c (entry_exit_blocks): Add initializers for 'head_tree' and + 'end_tree'. + (flow_loops_tree_build): Rename reference to field 'tree' to + 'tree_root'. + (flow_loops_level_compute): Ditto. + * predict.c (estimate_bb_frequencies): Ditto. + * tree.h (struct tree_common): Add field 'aux'. + + 2001-07-09 Stan Shebs + + * config/darwin.c (darwin_encode_section_info): Don't mark any + DECL_EXTERNAL node as defined. + + 2001-07-09 John David Anglin + + * pa.c (pa_init_machine_status, pa_mark_machine_status, + pa_free_machine_status, hppa_init_pic_save): Delete. + (hppa_pic_save_rtx): New. Use get_hard_reg_initial_val. + (hppa_profile_hook): Use hppa_pic_save_rtx. + * pa.h (struct machine_function, PIC_OFFSET_TABLE_SAVE_RTX, + hppa_init_pic_save): Delete. + (hppa_pic_save_rtx): Declare. + * pa.md (call, call_value, sibcall, sibcall_value, + builtin_setjmp_receiver): Use hppa_pic_save_rtx. + + 2001-07-09 Kazu Hirata + + * config/h8300/t-h8300 (LIB1ASMFUNCS): Add _floatdisf and _fixsfdi. + * config/mn10200/t-mn10200 (LIB1ASMFUNCS): Likewise. + + 2001-07-09 Andreas Jaeger + + * output.h: Add declaration of final_forward_branch_p. + + * config/i386/i386.c (output_fix_trunc): Remove unused variable. + + * varray.c: Include errors.h for internal_error and trim_filename + declarations. + + * Makefile.in (varray.o): Add errors.h. + + 2001-07-09 Toon Moene + + * expr.h: Adjust prototypes for have_add2_insn, have_sub2_insn. + * optabs.c (have_add2_insn): Check whether the add insn chosen + really accepts the operands. (have_sub2_insn): Ditto for sub insn. + * reload1.c (reload_cse_move2add): Adjust calls of have_add2_insn. + + Mon Jul 9 13:26:40 2001 Jeffrey A Law (law@cygnus.com) + + * Makefile.in (OBJS): Add ssa-ccp.o + (ssa-ccp.o): Add dependencies. + * toplev.c (DFI_ssa_ccp): New dump file enum. + (dump_file): Add entry for dumping after SSA CCP. + (flag_ssa_ccp): New flag variable. + (f_options): Add -fssa-ccp. + (rest_of_compilation): Run SSA CCP if requested. + * timevar.def (TV_SSA_CCP): New timevar. + * ssa.c (mark_phi_and_copy_regs): Handle deleted PHI nodes. + * doc/gcc.texi (Passes): Add documentation for SSA CCP pass. + Fix minor typo in SSA DCE documentation. + * doc/invoke.texi: Add documentation for new flag -fssa-ccp. + Add documentation for new dump option. Renumber dump files + appropriately. + + Mon Jul 9 21:36:00 CEST 2001 Jan Hubicka + + * emit-rtl.c (gen_highpart_mode): New. + * rtl.h (gen_highpart_mode): Declare. + * sparc.md (insn splitters): Use gen_highpart_mode, whenever the + operand can be VOIDmode constant. + + Mon Jul 9 17:23:10 CEST 2001 Jan Hubicka + + * flow.c (redirect_edge_and_branch_force): New. + (can_fallthru): Ensure that basic blocks are succeeding. + (try_optimize_cfg): Do not delete basic block if it is the last one. + + * flow.c (try_redirect_by_replacing_jump): Do not remove + jumps with side effects, unlink chain on fallthru edge; + set block for new jump instruction; avoid basic block to + over by line number note. + + * flow.c (try_simplify_condjump): Verify that the condjump + is not always falling through. + + Re-install patch: + * flow.c (try_redirect_by_replacing_jump): Remove cc0 setter. + + * flow.c (forwarder_block_p): Fix for fallthru blocks. + (try_redirect_by_replacing_jump): Update properly the count + and frequency information. + + Mon Jul 9 06:41:07 2001 Richard Kenner + + * emit-rtl.c (adjust_address, adjust_address_nv): Handle an + address that is a LO_SUM specially. + * explow.c (plus_constant_wide, case LO_SUM): Deleted. + + * c-lang.c (start_cdtor): Remove extra parameter from start_function. + + * emit-rtl.c (adjust_address_nv, replace_equiv_address_nv): New fcns. + (operand_subword): Use them. + (change_address_1): Renamed from change_address; new arg VALIDATE. + * expr.h: Reflect above changes; change_address now macro. + * alias.c (canon_rtx): Use replace_equiv_address_nv instead of + making MEM. + * cselib.c (add_mem_for_addr): Likewise. + * expr.c (protect_from_queue, emit_move_insn_1): Likewise. + * regmove.c (try_apply_stack_adjustment): Likewise. + * reload.c (push_reload, make_memloc): Likewise. + * reload1.c (eliminate_regs): Likewise. + * simplify-rtx.c (simplify_replace_rtx): Likewise. + * caller-save.c (setup_save_areas): Use adjust_address_nv instead of + adjust_addess. + * combine.c (make_extraction, simplify_shift_const): Likewise. + (gen_lowpart_for_combine): Likewise. + * cse.c (gen_lowpart_if_possible): Likewise. + * function.c (fixup_var_refs_1, purge_addressof_1): Likewise. + * expr.c (expand_expr, case COMPONENT_REF): Likewise. + * optabs.c (gen_move_insn): Likewise. + * reload1.c (alter_reg): Likewise. + * simplify-rtx.c (simplify_subreg): Likewise. + * stmt.c (expand_anon_union_decl): Likewise. + * recog.c (validate_replace_rtx_1): Likewise. + (expr.h): Include. + * Makefile.in (recog.o): Add $(EXPR_H). + * explow.c (stabilize): Call replace_equiv_address. + * expr.c (move_by_pieces_1, store_by_pieces_2): Likewise. + * final.c (alter_subreg): OFFSET is HOST_WIDE_INT. + + 2001-07-03 Andrew Haley + + * expmed.c (store_fixed_bit_field): Don't use a mode bigger than + the mode of the memory location. + + 2001-07-09 Bo Thorsen + + * config/i386/unix.h (ASM_OUTPUT_MI_THUNK): Fix x86-64 vtable support. + + 2001-07-09 Neil Booth + + * final.c (output_addr_const): Use target opening and + closing parentheses. + * target-def.h: Define TARGET_ASM_OPEN_PAREN, TARGET_ASM_CLOSE_PAREN + defaults, add to TARGET_ASM_OUT. + * target.h (struct gcc_target): Add open_paren and close_paren. + * doc/md.texi: Update. + * doc/tm.texi: Document TARGET_ASM_FUNCTION_END_PROLOGUE, + TARGET_ASM_FUNCTION_BEGIN_EPILOGUE, TARGET_ASM_OPEN_PAREN and + TARGET_ASM_CLOSE_PAREN. + * config/i386/i386.c (TARGET_ASM_OPEN_PAREN, TARGET_ASM_CLOSE_PAREN): + Override. + * config/pdp11/pdp11.c (TARGET_ASM_OPEN_PAREN, TARGET_ASM_CLOSE_PAREN): + Override. + * config/1750a/1750a.h (ASM_OPEN_PAREN, ASM_CLOSE_PAREN): Remove. + * config/a29k/a29k.h: Similarly. + * config/alpha/alpha.h: Similarly. + * config/arc/arc.h: Similarly. + * config/arm/aof.h: Similarly. + * config/arm/aout.h: Similarly. + * config/avr/avr.h: Similarly. + * config/c4x/c4x.h: Similarly. + * config/clipper/clipper.h: Similarly. + * config/convex/convex.h: Similarly. + * config/d30v/d30v.h: Similarly. + * config/dsp16xx/dsp16xx.h: Similarly. + * config/elxsi/elxsi.h: Similarly. + * config/fr30/fr30.h: Similarly. + * config/h8300/h8300.h: Similarly. + * config/i370/i370.h: Similarly. + * config/i386/i386.h: Similarly. + * config/i860/i860.h: Similarly. + * config/i960/i960.h: Similarly. + * config/ia64/ia64.h: Similarly. + * config/m32r/m32r.h: Similarly. + * config/m68hc11/m68hc11.h: Similarly. + * config/m68k/m68k.h: Similarly. + * config/m88k/m88k.h: Similarly. + * config/mcore/mcore.h: Similarly. + * config/mips/mips.h: Similarly. + * config/mn10200/mn10200.h: Similarly. + * config/mn10300/mn10300.h: Similarly. + * config/ns32k/ns32k.h: Similarly. + * config/pa/pa.h: Similarly. + * config/pdp11/pdp11.h: Similarly. + * config/pj/pj.h: Similarly. + * config/romp/romp.h: Similarly. + * config/rs6000/rs6000.h: Similarly. + * config/sh/sh.h: Similarly. + * config/sparc/sparc.h: Similarly. + * config/v850/v850.h: Similarly. + * config/vax/vax.h: Similarly. + * config/we32k/we32k.h: Similarly. + + 2001-07-09 Joseph S. Myers + + * doc/c-tree.texi: Document representation of attributes. + + 2001-07-08 Joseph S. Myers + + * doc/tm.texi: Update some places for the rename of target to + targetm. Fix typo. + + 2001-07-08 Joseph S. Myers + + * target.h (struct gcc_target): Add insert_attributes. + * target-def.h (TARGET_INSERT_ATTRIBUTES): Define. + (TARGET_INITIALIZER): Update. + * tree.c, tree.h (default_insert_attributes): New function. + Update comments on other default functions to refer to targetm, + not target. + * doc/tm.texi (INSERT_ATTRIBUTES): Update to document + TARGET_INSERT_ATTRIBUTES. + (SET_DEFAULT_DECL_ATTRIBUTES): Remove. + * c-common.c (decl_attributes): Use targetm.insert_attributes. + Don't use PRAGMA_INSERT_ATTRIBUTES. + * Makefile.in (c-common.o): Depend on $(TARGET_H). + * c-decl.c (start_decl, start_function): Don't call + SET_DEFAULT_DECL_ATTRIBUTES. + * config/c4x/c4x.h (SET_DEFAULT_DECL_ATTRIBUTES): Don't define. + * config/c4x/c4x-protos.h (c4x_set_default_attributes): Don't + declare. + * config/c4x/c4x.c (TARGET_INSERT_ATTRIBUTES): Define. + (c4x_check_attribute): Avoid modifying attribute list itself. + (c4x_set_default_attributes): Rename to c4x_insert_attributes. + Make static. + * config/sh/sh.h (PRAGMA_INSERT_ATTRIBUTES): Don't define. + * config/sh/sh-protos.h (sh_pragma_insert_attributes): Don't + declare. + * config/sh/sh.c (TARGET_INSERT_ATTRIBUTES): Define. + (sh_pragma_insert_attributes): Rename to sh_insert_attributes. + Make static. + * config/v850/v850.h (SET_DEFAULT_DECL_ATTRIBUTES): Don't define. + * config/v850/v850-protos.h (v850_set_default_decl_attr): Don't + declare. + * config/v850/v850.c (TARGET_INSERT_ATTRIBUTES): Define. + (v850_set_default_decl_attr): Rename to v850_insert_attributes. + Adjust parameters. Make static. + + 2001-07-08 Joseph S. Myers + + * c-common.c (decl_attributes): Only take a single attributes + parameter. + * c-common.h (decl_attributes): Update prototype. + * c-decl.c (start_decl, start_function): Only take a single + attributes parameter. Update calls to decl_attributes. + (finish_struct, finish_enum): Update calls to decl_attributes. + (push_parm_decl): Expect unified list of attributes. Update call + to decl_attributes. + * c-parse.in (fndef, initdcl, notype_initdcl, nested_function, + notype_nested_function, component_declarator, + component_notype_declarator, label): Update calls to + decl_attributes. + (absdcl_maybe_attribute, parm, firstparm, myparm): Unify attribute + lists that are passed to push_parm_decl. + * c-tree.h (start_function, start_decl): Update prototypes. + * config/sh/sh-protos.h, config/sh/sh.c + (sh_pragma_insert_attributes): Only take a single attributes + parameter. + * config/sh/sh.h (PRAGMA_INSERT_ATTRIBUTES): Likewise. + * doc/tm.texi (INSERT_ATTRIBUTES): Update. + * objc/objc-act.c (define_decl, generate_objc_symtab_decl, + build_module_descriptor, generate_static_references, + generate_strings, build_selector_translation_table, + generate_descriptor_table, generate_protocols, + generate_ivars_list, generate_dispatch_table, + generate_protocol_list, generate_category, + generate_shared_structures, really_start_method, add_objc_decls, + generate_classref_translation_entry): Update calls to start_decl + and start_function. + (build_tmp_function_decl, start_method_def): Unify attribute lists + that are passed to push_parm_decl. + + 2001-07-08 Neil Booth + + * final.c (no_asm_to_stream): New. + (final_scan_insn): Use target structures for prologue ends + and epilogue starts. + * output.h (no_asm_to_stream): New. + * target-def.h (TARGET_ASM_FUNCTION_END_PROLOGUE, + TARGET_ASM_FUNCTION_BEGIN_EPILOGUE): New. + (TARGET_ASM_OUT): Update. + * target.h (struct gcc_target): New members function_end_prologue + and function_begin_epilogue. + * config/1750/1750.h (ASM_OUTPUT_FUNNAM): Delete as unused. + * config/alpha/alpha-protos.h (output_end_prologue): Delete. + * config/alpha/alpha.c (output_end_prologue): Rename to + alpha_output_function_end_prologue. Use in target struct + and make static. + * config/alpha/alpha.h (FUNCTION_END_PROLOGUE): Delete. + * config/ia64/ia64-protos.h (ia64_output_end_prologue): Delete. + * config/ia64/ia64.c (ia64_output_end_prologue): Rename to + ia64_output_function_end_prologue. Use in target struct + and make static. + (ia64_function_prologue, ia64_funciton_epilogue): Rename + mistyped prototypes. + * config/ia64/ia64.h (FUNCTION_END_PROLOGUE): Delete. + * config/m88k/m88k-protos.h (m88k_end_prologue, m88k_begin_epilogue): + Delete. + * config/m88k/m88k.c (m88k_end_prologue, m88k_begin_epilogue): Rename + an use in target struct, make static. + * config/ia64/ia64.h (FUNCTION_END_PROLOGUE, FUNCTION_BEGIN_EPILOGUE): + Delete. + + 2001-07-08 Richard Henderson + + * stmt.c (emit_case_nodes): Convert modes properly in low+high test. + + 2001-07-08 Richard Henderson + + * config/i386/i386.md: Remove constraints strings from define_split + and define_peephole2 patterns. + (eh_return_si, eh_return_di): Split eh_return_1 for modes. + (eh_return): Use them. + + 2001-07-08 Richard Henderson + + * doc/tm.texi (Exception Handling): New subnode of Stack and Calling. + Document MD_FALLBACK_FRAME_STATE_FOR. + + 2001-07-07 Stephane Carrez + + * config/m68hc11/m68hc11.c (m68hc11_initial_elimination_offset): + Take into account m68hc11_sp_correction for FRAME_POINTER_REGNUM + elimination. + * config/m68hc11/m68hc11.h (STARTING_FRAME_OFFSET): Use 0. + + 2001-07-07 Nick Clifton + + * config/ia64/sysv4.h (ASM_OUTPUT_LABELREF): Append # to end + of the label inside NAME as opposed to just the end of NAME. + + 2001-07-07 Neil Booth + + * config/alpha/alpha-protos.h (vms_valid_decl_attribute_p): Delete. + * config/alpha/alpha.c (alpha_init_machine_status, + alpha_mark_machine_status, alpha_free_machine_status): Delete. + (TARGET_VALID_DECL_ATTRIBUTE): Define for VMS. + (vms_valid_decl_attribute_p): Make static, conditionally compile. + * config/alpha/alpha.h (VALID_MACHINE_DECL_ATTRIBUTE): Delete. + + 2001-07-06 Stan Shebs + + * target.h (targetm): Rename global from "target", so as not to + conflict with local variables. + * c-decl.c: Ditto. + * c-typeck.c: Ditto. + * final.c: Ditto. + * tree.c: Ditto. + * cp/decl.c: Ditto. + * cp/decl2.c: Ditto. + * cp/typeck.c: Ditto. + * 1750a/1750a.c: Ditto. + * a29k/a29k.c: Ditto. + * arc/arc.c: Ditto. + * arm/arm.c: Ditto. + * avr/avr.c: Ditto. + * clipper/clipper.c: Ditto. + * convex/convex.c: Ditto. + * d30v/d30v.c: Ditto. + * dsp16xx/dsp16xx.c: Ditto. + * elxsi/elxsi.c: Ditto. + * fr30/fr30.c: Ditto. + * h8300/h8300.c: Ditto. + * i370/i370.c: Ditto. + * i386/i386.c: Ditto. + * i860/i860.c: Ditto. + * i960/i960.c: Ditto. + * ia64/ia64.c: Ditto. + * m32r/m32r.c: Ditto. + * m68hc11/m68hc11.c: Ditto. + * m68k/m68k.c: Ditto. + * m88k/m88k.c: Ditto. + * mips/mips.c: Ditto. + * ns32k/ns32k.c: Ditto. + * pa/pa.c: Ditto. + * pdp11/pdp11.c: Ditto. + * romp/romp.c: Ditto. + * rs6000/rs6000.c: Ditto. + * sh/sh.c: Ditto. + * sparc/sparc.c: Ditto. + * vax/vax.c: Ditto. + * we32k/we32k.c: Ditto. + * doc/tm.texi: Update the manual to match. + + 2001-07-06 Richard Henderson + + * except.h (MUST_USE_SJLJ_EXCEPTIONS): Examine the value of + DWARF2_UNWIND_INFO not just whether it is defined. + + 2001-07-06 Diego Novillo + + * combine.c (combine_simplify_rtx): Also recompute 'mode' if the + call to simplify_binary_operation returns a new pattern. + + 2001-07-06 Roman Lechtchinsky + + * glimits.h (__SHRT_MAX__): New. + (SHRT_MIN, USHRT_MAX): Define in terms of SHRT_MAX. + (SHRT_MAX): Define in terms of __SHRT_MAX__. + + 2001-07-06 Jan van Male + + * alias.c (base_alias_check): Cast GET_MODE_UNIT_SIZE to int to + avoid warnings. + + 2001-07-06 Richard Henderson + + * bitmap.c (bitmap_release_memory): Move adjacent to the + allocation functions. + (bitmap_first_set_bit, bitmap_last_set_bit): Streamline knowing + the implementation. Binary search for the set bit. + (bitmap_union_of_diff): Allocate the temporary on the stack + instead of using xmalloc. + + 2001-07-06 Richard Henderson + + * genrecog.c (validate_pattern): Warn for constraints in + define_{expand,split,peephole2}. Remove strict_low_part + before looking up match_dup. + + 2001-07-06 DJ Delorie + + * doc/gcc.texi (Makefile): Rename to be a more general purpose + chapter about various build hints and history. Add section + talking about the various types of native and cross builds. + + 2001-07-06 Neil Booth + + * Makefile.in (final.o): Depend on target.h. + * final.c: Include target.h. + (default_function_pro_epilogue): New. + (final_start_function): Use target structure for function prologues. + (final_end_function): Use target structure for function epilogues. + * fold-const.c (real_hex_to_f): Constify s and p. + * output.h (default_function_pro_epilogue): New. + * real.h (real_hex_to_f): Update prototype. + * target-def.h (TARGET_ASM_FUNCTION_PROLOGUE, + TARGET_ASM_FUNCTION_EPILOGUE, TARGET_ASM_OUT): New. + (TARGET_INITIALIZER): Update. + * target.h (gcc_target): Add struct asm_out. + * doc/tm.texi: Update. + + config: + Update each arch to use TARGET_ASM_FUNCTION_PROLOGUE and + TARGET_ASM_FUNCTION_EPILOGUE. Move macro code to functions + in cpu/cpu.c, or rename old functions consistently. Take + a HOST_WIDE INT not an int as the SIZE parameter. Remove now + redundant macros and prototypes. Make new functions static. + + * 1750a/1750a.c: Similarly. + * 1750a/1750a.h: Similarly. + * a29k/a29k-protos.h: Similarly. + * a29k/a29k.c: Similarly. + * a29k/a29k.h: Similarly. + * arc/arc-protos.h: Similarly. + * arc/arc.c: Similarly. + * arc/arc.h: Similarly. + * arm/arm-protos.h: Similarly. + * arm/arm.c: Similarly. + * arm/arm.h: Similarly. + * avr/avr-protos.h: Similarly. + * avr/avr.c: Similarly. + * avr/avr.h: Similarly. + * clipper/clipper-protos.h: Similarly. + * clipper/clipper.c: Similarly. + * clipper/clipper.h: Similarly. + * convex/convex.c: Similarly. + * convex/convex.h: Similarly. + * d30v/d30v-protos.h: Similarly. + * d30v/d30v.c: Similarly. + * d30v/d30v.h: Similarly. + * d30v/d30v.md: Similarly. + * dsp16xx/dsp16xx-protos.h: Similarly. + * dsp16xx/dsp16xx.c: Similarly. + * dsp16xx/dsp16xx.h: Similarly. + * elxsi/elxsi.c: Similarly. + * elxsi/elxsi.h: Similarly. + * fr30/fr30.c: Similarly. + * fr30/fr30.md: Similarly. + * h8300/h8300-protos.h: Similarly. + * h8300/h8300.c: Similarly. + * h8300/h8300.h: Similarly. + * i370/i370-protos.h: Similarly. + * i370/i370.c: Similarly. + * i370/i370.h: Similarly. + * i386/i386.c: Similarly. + * i386/osf1elf.h: Similarly. + * i386/osfrose.h: Similarly. + * i860/i860-protos.h: Similarly. + * i860/i860.c: Similarly. + * i860/i860.h: Similarly. + * i960/i960-protos.h: Similarly. + * i960/i960.c: Similarly. + * i960/i960.h: Similarly. + * ia64/ia64-protos.h: Similarly. + * ia64/ia64.c: Similarly. + * ia64/ia64.h: Similarly. + * m32r/m32r-protos.h: Similarly. + * m32r/m32r.c: Similarly. + * m32r/m32r.h: Similarly. + * m68hc11/m68hc11-protos.h: Similarly. + * m68hc11/m68hc11.c: Similarly. + * m68hc11/m68hc11.h: Similarly. + * m68k/crds.h: Similarly. + * m68k/dpx2.h: Similarly. + * m68k/m68k-protos.h: Similarly. + * m68k/m68k.c: Similarly. + * m68k/m68k.h: Similarly. + * m68k/news.h: Similarly. + * m88k/m88k-protos.h: Similarly. + * m88k/m88k.c: Similarly. + * m88k/m88k.h: Similarly. + * mips/mips-protos.h: Similarly. + * mips/mips.c: Similarly. + * mips/mips.h: Similarly. + * ns32k/merlin.h: Similarly. + * ns32k/ns32k.c: Similarly. + * ns32k/ns32k.h: Similarly. + * ns32k/tek6000.h: Similarly. + * pa/pa-protos.h: Similarly. + * pa/pa.c: Similarly. + * pa/pa.h: Similarly. + * pdp11/2bsd.h: Similarly. + * pdp11/pdp11-protos.h: Similarly. + * pdp11/pdp11.c: Similarly. + * pdp11/pdp11.h: Similarly. + * romp/romp-protos.h: Similarly. + * romp/romp.c: Similarly. + * romp/romp.h: Similarly. + * rs6000/rs6000-protos.h: Similarly. + * rs6000/rs6000.c: Similarly. + * rs6000/rs6000.h: Similarly. + * rs6000/sysv4.h: Similarly. + * sh/sh-protos.h: Similarly. + * sh/sh.c: Similarly. + * sh/sh.h: Similarly. + * sparc/sparc-protos.h: Similarly. + * sparc/sparc.c: Similarly. + * sparc/sparc.h: Similarly. + * vax/vax.c: Similarly. + * vax/vax.h: Similarly. + * vax/vms.h: Similarly. + * we32k/we32k.c: Similarly. + * we32k/we32k.h: Similarly. + + Fri Jul 6 11:47:59 2001 Jeffrey A Law (law@cygnus.com) + + * basic-block.h (first_insn_after_basic_block_note): Declare. + * flow.c (first_insn_after_basic_block_note): Define. Moved + from... + * ssa.c (first_insn_after_basic_block_note): Remove. + * ssa-dce.c (find_inherently_necessary): Consider BARRIERs + necessary. + (ssa_eliminate_dead_code): Properly update the CFG and PHI + nodes when we find a dead conditional branch. Insert BARRIERs + after any blocks with no successors, but which do not have + any BARRIERs. + + 2001-07-06 Zack Weinberg + + * varray.c (varray_check_failed): Use internal_error. + + 2001-07-05 Andrew Haley + + * Makefile.in (LIB2_DIVMOD_FUNCS): New. + (LIB2FUNCS): Move divmod functions to LIB2_DIVMOD_FUNCS. + * mklibgcc.in: Compile LIB2_DIVMOD_FUNCS. + + 2001-07-02 Jason Merrill + + * dwarf2out.c (mem_loc_descriptor): Only look through a constant pool + reference if the target constant is also a SYMBOL_REF. + + 2001-07-05 Eric Christopher + + * config/mips/mips.h (MASK_MIPS3900): Remove. + (MASK_MIPS16,MASK_NO_CHECK_ZERO_DIV,MASK_CHECK_RANGE_DIV, + MASK_UNINIT_CONST_IN_RODATA): Change for 3900 mask removal. + (TARGET_MIPS3900): Change to use mips_arch. + (TARGET_MIPS4000): New. + (TARGET_MIPS4100): New. + (TARGET_MIPS4300): New. + (TARGET_SWITCHES): Change 3900 and 4650 options to NULL. + (SUBTARGET_TARGET_OPTIONS): Add -march. Change help text + for -mipsX. + (GENERATE_BRANCHLIKELY): Move TARGET_MIPS3900. + (ISA_HAS_BRANCHLIKELY): To here. + (CC1_CPU_SPEC): New. + (CC1_SPEC): Use here. Remove 4650 and 3900 options. + (mips_arch_string): Declare. + (mips_arch): Declare. + (TARGET_OPTIONS): Add -march and -mtune. + + * config/mips/mips.c (mips_arch_string): New. + (mips_arch): New. + (override_options): Handle -march for codegen and -mtune + for scheduling. Use mips_arch. Move tx39 target default here. + (mips_parse_cpu): Move error message to override_options. + + * config/mips/r3900.h (TARGET_DEFAULT): Remove. + + * config/mips/mips.md: Use TARGET_MIPS4000 and TARGET_MIPS4300. + + * doc/invoke.texi (Option Summary): Add -march and -mtune entries. + (MIPS Options): Ditto. Change mcpu entry to historical text. + + 2001-07-05 H.J. Lu (hjl@gnu.org) + + * config/mips/mips.c (mips_parse_cpu): New function to parse + -march=*/-mcpu=*. + + 2001-07-05 Jim Wilson + + * config/ia64/lib1funcs.asm: Revert 2001-07-02 change. + * config/ia64/t-ia64: Likewise. + (LIB1ASMFUNCS): Update comment. + + 2001-07-05 David Edelsohn + + * doc/install.texi (Install GCC: Binaries): Fix typo. + + 2001-07-04 Stephane Carrez + + * config/m68hc11/m68hc11.md ("*ashlsi3"): Operand 1 can be a memory + reference using the stack pointer, adjust it since we push Y + temporarily. + ("*ashrsi3"): Likewise. + ("*lshrsi3"): Likewise. + + 2001-07-05 Stephane Carrez + + * config/m68hc11/m68hc11.h (RETURN_ADDR_RTX): Fix return address + when -fomit-frame-pointer is used. + + 2001-07-05 Jeffrey Oldham + + * flow.c: Reverse Jan Hubicka's patch of 02July2001. + (try_redirect_by_replacing_jump): Reverse updating properly the + count and frequency information. Reverse removing cc0 setter. + (forwarder_block_p): Reverse fixing for fallthru blocks. + + 2001-07-05 DJ Delorie + + * gcc.c (TARGET_OPTION_TRANSLATE_TABLE): New. + (translate_options): If the above is defined, use it to map + given options to new options. + * doc/tm.texi: Document it. + + 2001-07-05 Brad Lucier + Gerald Pfeifer + + * doc/invoke.texi (Optimize Options): Document that -fgcse may + cause programs using computed gotos to run more slowly. + + 2001-07-05 Rainer Orth + + * doc/install.texi (Specific): Markup, spelling and typo fixes. + Fixed sorting. + Consistently require binutils 2.11.2, not prereleases. + (Specific, decstation-*): Canonicalize as mips-dec-*. + (Specific, i?86-*-sco3.2v5*): Remove make bootstrap requirement, + always necessary. + (Specific, m68k-altos): Removed reference to README.altos, deleted. + (Specific, mips-*): Reword MIPS C compiler requirements. + (Specific, powerpc*-*-*): New, mention --with-cpu once. + (Specific, sunv5): Removed, obsolete. + + 2001-07-05 Nathan Sidwell + + * dwarf2out.c (output_loc_list): Use an all ones mask for + .text asm output and don't rely on long long + literals. Reformat some long lines. + + 2001-07-05 Andreas Jaeger + + * doc/gcc.texi (GNU/Linux): Remove accidental re-add of GPL + section. + + 2001-07-04 Daniel Berlin + + * dwarf2out.c (dwarf2out_define): Update comment. + (dwarf2out_undef): Ditto. + (dwarf2out_start_source_file): Ditto. + (dwarf2out_end_source_file): Ditto. + (dwarf2out_finish): Output DW_MACINFO_end_file for primary file, + since we never call the start/end debug hook for the primary file. + + 2001-07-04 Kazu Hirata + + * config/h8300/h8300.c (get_shift_alg): Remove an extra operand + from shll. + + 2001-07-04 Nathan Sidwell + + * cppinit.c (remove_dup_dirs): Inform if a system include + directory is being reordered. + * doc/invoke.texi (Directory Options): GCC warns if you hide a + system include. + * doc/cpp.texi (Search Paths): Likewise. + * doc/gcc.texi (Interoperation): Remove information about + -I/usr/include. + + 2001-07-04 Nathan Sidwell + + * varray.h (VARRAY_TOP_GENERIC_PTR): Remove spurious parameter. + (VARRAY_TOP_CHAR_PTR): Likewise. + + 2001-07-04 Kaveh R. Ghazi + + * gcc.c (process_command): Don't assign elements of a const char*. + + Wed Jul 4 13:40:02 2001 Richard Kenner + + * emit-rtl.c (change_address): Don't abort if invalid address while + reload is in progress. + + 2001-07-04 Daniel Berlin + + * c-lex.c (cb_file_change): Pass line number to + debug_start_source_file. + (cb_undefine): Pass correct line number to debug_undef. + + * toplev.c (debug_start_source_file): Add line number to + parameters. Pass it along to dwarf2out_start_source_file. + (decode_g_option): Stop resetting debug level back to normal when + we change debug formats, unless the current level is + none. (Before, -g3 -gdwarf-2 would use debug level 2, rather than + 3). + + * toplev.h (debug_start_source_file): Add line number to + parameters. + + * dwarf2out.h (dwarf2out_start_source_file): Add line number to + parameters. + + * dwarf2out.c (dwarf2out_start_source_file): Add line number to + parameters. + Output debug_macinfo data for starting file if requested. + (dwarf2out_end_source_file): Output debug_macinfo data for ending + file if requested. + (dwarf2out_define): Output debug_macinfo data for defining a macro + if requested. + (dwarf2out_undef): Output debug_macinfo data for undefining a + macro if requested. + (DEBUG_MACINFO_SECTION): New. DWARF2 macro info section name. + (DEBUG_MACINFO_SECTION_LABEL): New. DWARF2 macro info section label. + (macinfo_section_label): New. DWARF2 macro info section label. + (dwarf2out_init): If we want macro info, output the start label + for the section. + (dwarf2out_finish): If we want macro info, add a DW_AT_macro_info + attribute to the compilation unit die pointing to the macro info. + + 2001-07-04 Daniel Berlin + + * dwarf2out.c (new_loc_list): Move to inside #ifdef + DWARF2_DEBUGGING_INFO. + (add_loc_descr_to_loc_list): Ditto. + (output_loc_list): Ditto. + Also, fix thinko in curr not being initialized. + (gen_internal_sym): Ditto. + + Wed Jul 4 13:40:02 2001 Richard Kenner + + * emit-rtl.c (replace_equiv_address): New function. + * expr.h (replace_equiv_address): New declaration. + * explow.c (validize_mem): Call it instead of change_address and + also call if -fforce-addr and address is constant. + * expr.c: Replace more calls to change_address with adjust_address + and/or replace_equiv_address or to validize_mem. + * function.c, regmove.c, config/alpha/alpha.c: Likewise. + * config/arm/arm.md, config/clipper/clipper.md: Likewise. + * config/dsp16xx/dsp16xx.md, config/fr30/fr30.c: Likewise. + * config/i370/i370.md, config/i860/i860.md: Likewise. + * config/i960/i960.md, config/mips/mips.c: Likewise. + * config/mips/mips.md, config/pa/pa.md: Likewise. + * config/pdp11/pdp11.md, config/rs6000/rs6000.c: Likewise. + * config/rs6000/rs6000.md, config/sh/sh.md: Likewise. + + 2001-07-04 Kaveh R. Ghazi + + * bitmap.c (bitmap_union_of_diff): Don't use BITMAP_ALLOCA. + + * bitmap.h (BITMAP_ALLOCA): Don't pass alloca as an argument to a + function. + + 2001-07-04 Joseph S. Myers + + * doc/include: New directory. + * doc/fdl.texi: Move to doc/include/fdl.texi. + * doc/texinfo.tex: Move to doc/include/texinfo.tex. + * doc/include/funding.texi, doc/include/gpl.texi: New files. + * doc/gcc.texi: Use funding.texi and gpl.texi. + * Makefile.in ($(docdir)/cpp.info, $(docdir)/gcc.info, + $(docdir)/cppinternals.info, cpp.dvi. gcc.dvi. cppinternals.dvi): + Update dependencies and use -I $(docdir)/include. + + 2001-07-04 Anthony Green + + * config/v850/t-v850 (v850-c.o): Add missing dependencies. + + 2001-07-04 Gerald Pfeifer + + * doc/install.texi (sparc64-*-*): Remove garbage. + + Wed Jul 4 09:07:44 2001 Jan van Male + + * i386.c (ix86_expand_builtin, case IX86_BUILTIN_SETPS): + Fix typo in last change to use adjust_address. + + 2001-07-04 Gerald Pfeifer + + * doc/install.texi (Specific): Update information for *-*-solaris*. + + Tue Jul 3 22:33:15 2001 Richard Kenner + + * explow.c (plus_constant_wide): Reinitialize Y for restart. + + 2001-07-03 Stan Shebs + + * config/darwin.h (SECTION_FUNCTION): Remove WAS_TEXT argument, remove + case for flag_no_mach_text_sections. + (EXTRA_SECTION_FUNCTIONS): Remove arg from uses of SECTION_FUNCTION. + * config/darwin.c (flag_no_mach_text_sections): Remove. + * config/darwin-protos.h (darwin_init_pragma): Remove decl. + + Tue Jul 3 15:35:52 2001 Richard Kenner + + * explow.c (plus_constant_wide, case PLUS): Call find_constant_term + and avoid checking for constant as first operand. + * recog.c (find_constant_term_loc): No longer static. + (adj_offettable_operand): Delete. + * rtl.h (adj_offsettable_operand): Delete declaration. + (find_constant_term): Add declaration. + * caller-save.c: Replace calls to adj_offsettable_operand with calls + to adjust_address. + * config/arm/arm.c, config/c4x/c4x.c: Likewise. + * config/clipper/clipper.md, config/h8300/h8300.c: Likewise. + * config/i386/i386.c, config/i386/i386.md: Likewise. + * config/i860/i860.c, config/i960/i960.c: Likewise. + * config/i960/i960.md, config/m68hc11/m68hc11.c: Likewise. + * config/m68k/m68k.c, config/m68k/m68k.md: Likewise. + * config/m88k/m88k.md, config/mcore/mcore.c: Likewise. + * config/mips/mips.c, config/mips/mips.md: Likewise. + * config/mn10200/mn10200.c, config/mn10300/mn10300.c: Likewise. + * config/ns32k/ns32k.c, config/ns32k/ns32k.md: Likewise. + * config/pa/pa.c, config/pdp11/pdp11.c: Likewise. + * config/pdp11/pdp11.md, config/sh/sh.c, config/v850/v850.c: Likewise. + * config/vax/vax.md, config/ns32k/ns32k.c: Likewise. + * config/ns32k/ns32k.md: Likewise. + + 2001-07-03 Zack Weinberg + + * rtl.c (copy_rtx): Handle 'T' format letter. + * gensupport.c (collect_insn_data): Likewise. + * print-rtl.c (print_rtx): Print 'T' slots like 's'. + + 2001-07-03 Nick Clifton + + * doc/invoke.texi (Directory Options): Specifiy range for in + -B option. Use 'dir' not 'foo' as example directory name. + + 2001-07-03 Rainer Orth + + * config/i386/sol2.h (ASM_PREFERRED_EH_DATA_FORMAT): Define. + Fixes PRs bootstrap/3067, bootstrap/3249, bootstrap/3275. + + 2001-07-03 Joseph S. Myers + + * doc/cppinternals.texi: Improve formatting and logical markup. + + 2001-07-03 Andreas Jaeger + + * Makefile.in (insn-recog.o): Add dependency on reload.h. + + * genrecog.c (write_header): Include reload.h for prototypes in + insn-recog.c. + + 2001-07-03 Neil Booth + + config: + * i386/cygwin.h (VALID_MACHINE_DECL_ATTRIBUTE, + VALID_MACHINE_TYPE_ATTRIBUTE): Remove. + * i386/i386-protos.h (i386_pe_valid_decl_attribute_p, + i386_pe_valid_type_attribute_p): Add. + * i386/i386.c (TARGET_INITIALIZER): Override for cygwin targets. + * i386/winnt.c (i386_valid_decl_attribute_p): Return directly. + + Mon Jul 2 21:52:19 2001 Richard Kenner + + * explow.c (plus_constant_wide, case LO_SUM): New case. + (plus_constant_for_output_wide): Delete. + * rtl.h (plus_constant_for_output): Delete. + * alias.c (canon_rtx, init_alias_analysis): Call plus_constant + instead of plus_constant_for_output. + * recog.c (offsettable_address_p, adj_offsettable_operand): Likewise. + * config/darwin.c, config/arm/arm.c, config/m68k/m68k.c: Likewise. + * config/m88k/m88k.c, config/mips/mips.c, config/pa/pa.c: Likewise. + * config/rs6000/rs6000.c, config/sparc/sparc.c: Likewise. + * config/sparc/sparc.md: Likewise. + Convert some change_address calls to adjust_address. + + 2001-07-03 Joseph S. Myers + + * doc/extend.texi, doc/gcc.texi, doc/invoke.texi, doc/md.texi, + doc/rtl.texi, doc/tm.texi: Improve formatting. Improve + documentation of -std and -Wwrite-strings. + + 2001-07-02 Geoffrey Keating + + * cse.c (canon_hash): Don't register registers in very small + register classes, as extending their lifetime might cause + reload to fail. + + Mon Jul 2 23:14:00 CEST 2001 Jan Hubicka + + * flow.c (try_redirect_by_replacing_jump): Remove cc0 setter. + + * flow.c (forwarder_block_p): Fix for fallthru blocks. + (try_redirect_by_replacing_jump): Update properly the count + and frequency information. + + Mon Jul 2 14:20:13 2001 Jeffrey A Law (law@cygnus.com) + + * toplev.c (dump_file_index): Move SSA dumps just after first + jump dump. + (dump_file): Corresponding changes. + (rest_of_compilation): Move SSA path to just after the first + jump pass. + * doc/gcc.texi (Passes): Update due to movement of SSA path. + * doc/invoke.texi: Update dump file #s as they were completely + out of date with reality. + + 2001-07-02 Geoffrey Keating + + * doc/tm.texi (Frame Layout): Document STACK_PUSH_CODE. + + * expr.c (emit_move_insn_1): Deal with non-default + STACK_PUSH_CODE. + + * expr.c (emit_single_push_insn): Fix warning. + + 2001-07-02 Toshiyasu Morita + + * expr.c (emit_move_insn_1): Avoid modifying + cfun->expr->x_stack_pointer when PUSH_ROUNDING is defined. + + Mon Jul 2 15:33:31 2001 Richard Kenner + + * emit-rtl.c (adjust_address): New function. + * expr.h (adjust_address): Add declaration. + * builtins.c: Replace some calls to change_address with calls to it + or to validize_mem. + * caller-save.c, dwarf2out.c, except.c, expmed.c, expr.c: Likewise. + * function.c, config/a29k/a29k.md, config/alpha/alpha.c: Likewise. + * config/arm/arm.c, config/convex/convex.c: Likewise. + * config/dsp16xx/dsp16xx.md, config/fr30/fr30.c: Likewise. + * config/i386/i386.c, config/i386/i386.md: Likewise. + * config/ia64/ia64.c, config/ia64/ia64.md: Likewise. + * config/m32r/m32r.c, config/m68k/m68k.md: Likewise. + * config/m88k/m88k.c, config/mips/mips.md: Likewise. + * config/ns32k/ns32k.c, config/rs6000/rs6000.c: Likewise. + * config/sh/sh.c, config/sparc/sparc.md: Likewise. + + 2001-07-02 Jim Wilson + + * config/ia64/ia64.h: Delete obsolete lib1funcs.asm comment. + + 2001-07-02 Steve Ellcey + + * config/ia64/t-ia64: Change LIB1ASMFUNCS to use single underscore. + * config/ia64/lib1funcs.asm: Change macro names to match t-ia64. + + 2001-07-02 Zack Weinberg + + * cppinit.c (lang_defaults): New table. + (set_lang): Just read from lang_defaults into the live options + structure. + + 2001-07-02 Zack Weinberg + + * Makefile.in (doc): Depend on $(GENERATED_MANPAGES). + * doc/.cvsignore: Add gcc.1, cpp.1, gcov.1. + * doc/gcc.1, doc/cpp.1, doc/gcov.1: Removed. + + 2001-07-02 Rainer Orth + + * doc/install.texi: Various spelling and markup fixes. + (Installing GCC): Component specific installation instructions are + gone. + Fix reference. + Warn about removing old install dir in the presence of shared libs. + (Configuration): Invoke with options target to match configure + --help. + Consistently refer to gas, gld pathnames. + Invert --enable-multilib documentation. + Remove references to old compiler versions. + + Mon Jul 2 12:50:51 2001 Richard Kenner + + * flow.c (try_simplify_condjump): Fix typo in updating fallthru flags. + + 2001-07-02 Rainer Orth + + * doc/install.texi (Specific, mips*-sgi-irix4): Split from IRIX 5 + section. + (Specific, mips*-sgi-irix5): Note IDO download. + Reworded MIPS C hints. + Use GNU as instead of GAS. + Markup fixes. + Removed SGI Freeware reference, IRIX 6 only. + (Specific, mips*-sgi-irix6): Removed ranlib caveats, obsolete. + Note N64 library requirement/workaround. + Update O32 hints. + Complete list of structure passing bug victims. + + 2001-07-02 Gerald Pfeifer + + * doc/install.texi: Remove CVS Id. + + 2001-07-02 Andreas Jaeger + + * ssa-dce.c (note_inherently_necessary_set): Add unused attribute. + (find_inherently_necessary): Remove unused variable. + + 2001-07-02 Nathan Sidwell + + * c-common.h (TDI_inlined): New ast dump phase. + (dump_flag_name): New function. + * c-dump.c (dump_files): Add inlined phase. + (dump_flag_name): Define. + * doc/invoke.texi (-fdump-ast-inlined): Document. + + Mon Jul 2 06:29:36 2001 Richard Kenner + + * stor-layout.c (layout_decl): Revert change to handling of alignment + in packed types. + + Sun Jul 1 11:53:52 2001 Richard Kenner + + * c-common.c (decl_attributes, case A_MODE): Don't call layout_decl + for FIELD_DECL. + + 2001-07-01 Geoffrey Keating + + * doc/tm.texi (FUNCTION_ARG): Document that the last call + is special. + + 2001-07-01 Nathan Sidwell + + * tlink.c (recompile_files): Remove COMPILER_PATH and + LIBRARY_PATH from the environment. + + 2001-07-01 Zack Weinberg + + * c-common.h (enum rid): Add RID_FIRST_AT, RID_LAST_AT, + RID_LAST_PQ. Move RID_FIRST_PQ down with the other FIRST/LAST + enumerators. + (OBJC_IS_AT_KEYWORD, OBJC_IS_PQ_KEYWORD): New macros. + + * c-parse.in (OBJC_STRING): Kill. + (objc_string): Decompose to [objc_string] '@' STRING. + (reswords): Take the leading '@' off all the Objective C keywords. + (objc_rid_sans_at): Kill. + (init_reswords): Don't initialize it. + (yylexname): Use OBJC_IS_AT_KEYWORD and OBJC_IS_PQ_KEYWORD. + (_yylex): Kill reconsider label. Look ahead one token after + an '@'; if we get an identifier, check whether it's an + Objective C @-keyword. If so, return the keyword. Otherwise, + put back the token and return the '@' as a terminal. + + * cpplib.c (lex_macro_node): Remove unnecessary check for + leading '@' on identifier. Clarify control flow and commentary. + + Sun Jul 1 11:53:52 2001 Richard Kenner + + * cse.c (new_label_ref): Variable deleted. + (insert): Remove set of new_label_ref. + (check_for_label_ref): New function. + (cse_basic_block): Don't check new_label_ref; call check_for_label_ref. + + See ChangeLog.5 for earlier changes. diff -Nrc3pad gcc-3.0.4/gcc/ChangeLog.lib gcc-3.1/gcc/ChangeLog.lib *** gcc-3.0.4/gcc/ChangeLog.lib Sat Mar 3 19:30:59 2001 --- gcc-3.1/gcc/ChangeLog.lib Sun Oct 28 12:41:59 2001 *************** Mon Sep 29 12:27:59 1997 Ian Lance Tayl *** 43,49 **** Wed Sep 10 15:14:20 1997 Jeffrey A Law (law@cygnus.com) * config.sub: Use "amigaos" instread of "amigados". Still ! recognize "amigados" for backward compatability. Tue Sep 9 18:23:57 1997 Doug Evans --- 43,49 ---- Wed Sep 10 15:14:20 1997 Jeffrey A Law (law@cygnus.com) * config.sub: Use "amigaos" instread of "amigados". Still ! recognize "amigados" for backward compatibility. Tue Sep 9 18:23:57 1997 Doug Evans diff -Nrc3pad gcc-3.0.4/gcc/FSFChangeLog.10 gcc-3.1/gcc/FSFChangeLog.10 *** gcc-3.0.4/gcc/FSFChangeLog.10 Wed Jan 27 01:41:34 1999 --- gcc-3.1/gcc/FSFChangeLog.10 Fri Nov 23 02:05:08 2001 *************** Tue Mar 5 02:27:35 1996 Jeffrey A. Law *** 807,813 **** (hppa_expand_prologue): If optimizing for space, emit an out of line prologue. (hppa_expand_epilogue): Similarly. ! (override_options): Optimizing for space is not compatable with either profiling or PIC code generation. * pa.md (outline_prologue_call): New pattern. (outline_epilogue_call): Likewise. --- 807,813 ---- (hppa_expand_prologue): If optimizing for space, emit an out of line prologue. (hppa_expand_epilogue): Similarly. ! (override_options): Optimizing for space is not compatible with either profiling or PIC code generation. * pa.md (outline_prologue_call): New pattern. (outline_epilogue_call): Likewise. *************** Wed Dec 6 06:58:23 1995 Richard Earnsh *** 3880,3886 **** using prog_mode attribute. (function units "write_buf", "write_blockage"): Model the write buffer as two function units, so that conflicts are avoided more often. ! (funcion unit "core"): New function unit, so that elapsed cycles can be more accurately determined. (all anonymous patterns): Add names. (mulsidi3, umulsidi3): New patterns available with fast multiply --- 3880,3886 ---- using prog_mode attribute. (function units "write_buf", "write_blockage"): Model the write buffer as two function units, so that conflicts are avoided more often. ! (function unit "core"): New function unit, so that elapsed cycles can be more accurately determined. (all anonymous patterns): Add names. (mulsidi3, umulsidi3): New patterns available with fast multiply *************** Thu Nov 30 12:27:22 1995 Michael Meissn *** 4184,4190 **** (ASM_SPEC): Pass appropriate -mxxx switches to the assembler based on the -mcpu=xxx options. (ASM_OUTPUT_INT): Move here from eabi.h. ! (ENCODE_SECTION_INFO): If -mcall-{nt,aixdesc} add approriate magic so function name has two or one leading periods. (ASM_OUTPUT_SOURCE_LINE): Delete, use version in svr4.h. (trampoline macros): Call trampoline functions in rs6000.c. --- 4184,4190 ---- (ASM_SPEC): Pass appropriate -mxxx switches to the assembler based on the -mcpu=xxx options. (ASM_OUTPUT_INT): Move here from eabi.h. ! (ENCODE_SECTION_INFO): If -mcall-{nt,aixdesc} add appropriate magic so function name has two or one leading periods. (ASM_OUTPUT_SOURCE_LINE): Delete, use version in svr4.h. (trampoline macros): Call trampoline functions in rs6000.c. *************** Wed Nov 29 14:06:13 1995 Jim Wilson =3 to #ifdef __mips64. * mips/abi64.h (CPP_SPEC): Output -D__mips64 when -mips3, or -mips4, or -mgp64. Output -U__mips64 when -mgp32. --- 5807,5813 ---- (xcoffout_begin_function): Call dbxout_parms and ASM_OUTPUT_SOURCE_LINE. ! * va-mips.h: Change every occurrence of #if __mips>=3 to #ifdef __mips64. * mips/abi64.h (CPP_SPEC): Output -D__mips64 when -mips3, or -mips4, or -mgp64. Output -U__mips64 when -mgp32. *************** Tue May 9 18:25:34 1995 Richard Kenner *** 7968,7974 **** Tue May 9 15:52:05 1995 Michael Meissner ! * config.sub: Recognize powerpcle as the little endian varient of the PowerPC. Recgonize ppc as a PowerPC variant, and ppcle as a powerpcle variant. Convert pentium into i586, not i486. Add p5 alias for i586. Map new x86 variants p6, k5, nexgen into i586 --- 7968,7974 ---- Tue May 9 15:52:05 1995 Michael Meissner ! * config.sub: Recognize powerpcle as the little endian variant of the PowerPC. Recgonize ppc as a PowerPC variant, and ppcle as a powerpcle variant. Convert pentium into i586, not i486. Add p5 alias for i586. Map new x86 variants p6, k5, nexgen into i586 *************** Fri Mar 10 05:50:11 1995 Oliver Kellogg *** 9913,9919 **** * 1750a.c (sectname): Reverse Init and Normal. (print_operand_address, case PLUS): Add case for LABEL_REF. ! (print_operand_address, case LABEL_REF): Split fom SYMBOL_REF. (print_operand_address, case CODE_LABEL): New case. (ASM_FILE_END): Delete. * 1750a.h (FUNCTION_EPILOGUE): Restore stack before freeing local vars. --- 9913,9919 ---- * 1750a.c (sectname): Reverse Init and Normal. (print_operand_address, case PLUS): Add case for LABEL_REF. ! (print_operand_address, case LABEL_REF): Split from SYMBOL_REF. (print_operand_address, case CODE_LABEL): New case. (ASM_FILE_END): Delete. * 1750a.h (FUNCTION_EPILOGUE): Restore stack before freeing local vars. diff -Nrc3pad gcc-3.0.4/gcc/FSFChangeLog.11 gcc-3.1/gcc/FSFChangeLog.11 *** gcc-3.0.4/gcc/FSFChangeLog.11 Wed Jan 27 01:41:36 1999 --- gcc-3.1/gcc/FSFChangeLog.11 Sun Nov 4 02:51:20 2001 *************** Fri Nov 28 12:34:03 1997 Scott Christle *** 492,498 **** * objc/Make-lang.in (runtime-info.h): Add comment in file. ! * objc/selector.c: Replace all occurences of sarray_get with sarray_get_safe. * objc/sendmsg.c: Likewise. --- 492,498 ---- * objc/Make-lang.in (runtime-info.h): Add comment in file. ! * objc/selector.c: Replace all occurrences of sarray_get with sarray_get_safe. * objc/sendmsg.c: Likewise. *************** Sat Aug 2 13:25:33 1997 Tristan Gingol *** 4070,4076 **** * stmt.c (expand_computed_goto): If -fcheck-memory-usage, check that computed address of a goto is executable. (expand_asm, expand_asm_operands): If -fcheck-memory-usage, ! disallow asm statments. * toplev.c (flag_check_memory_usage, flag_prefix_function_name): New variable. (f_options): Add `check-memory-usage' and `prefix_function_name'. --- 4070,4076 ---- * stmt.c (expand_computed_goto): If -fcheck-memory-usage, check that computed address of a goto is executable. (expand_asm, expand_asm_operands): If -fcheck-memory-usage, ! disallow asm statements. * toplev.c (flag_check_memory_usage, flag_prefix_function_name): New variable. (f_options): Add `check-memory-usage' and `prefix_function_name'. *************** Thu Jun 5 13:40:33 1997 Mike Meissner *** 5434,5440 **** (life_analysis): Don't allocate the space to hold to vector of regsets here. (init_regset_vector): Add pointer parameter and delete space ! paramter. Use OBSTACK_ALLOC_REG_SET to allocate. Change callers. (propagate_block): Use ALLOCA_REG_SET instead of bare alloca. * sched.c (schedule_block): Fix typo in yesterday's changes. --- 5434,5440 ---- (life_analysis): Don't allocate the space to hold to vector of regsets here. (init_regset_vector): Add pointer parameter and delete space ! parameter. Use OBSTACK_ALLOC_REG_SET to allocate. Change callers. (propagate_block): Use ALLOCA_REG_SET instead of bare alloca. * sched.c (schedule_block): Fix typo in yesterday's changes. *************** Sun Feb 2 19:43:17 1997 Scott Christle *** 7666,7672 **** (__alpha__): Remove unneeded code. (objc_error): Allow user specified error handler function to trap and handle the objc error. Added an error code parameter ! which indicates the specific error that occured. (objc_malloc, objc_atomic_malloc): Replace call to objc_fatal function with call to objc_error function. (objc_valloc, objc_realloc, objc_calloc): Likewise. --- 7666,7672 ---- (__alpha__): Remove unneeded code. (objc_error): Allow user specified error handler function to trap and handle the objc error. Added an error code parameter ! which indicates the specific error that occurred. (objc_malloc, objc_atomic_malloc): Replace call to objc_fatal function with call to objc_error function. (objc_valloc, objc_realloc, objc_calloc): Likewise. *************** Sun Nov 24 17:06:58 1996 Bernd Schmidt *** 8809,8815 **** Sun Nov 24 16:37:18 1996 Dave Love * configure (objc_thread_file): Set conditionally in each case so ! may be overidden with `--enable-objcthreads=posix'. Change GNU/Linux default to `single'. Fri Nov 22 17:53:15 1996 Jason Merrill --- 8809,8815 ---- Sun Nov 24 16:37:18 1996 Dave Love * configure (objc_thread_file): Set conditionally in each case so ! may be overridden with `--enable-objcthreads=posix'. Change GNU/Linux default to `single'. Fri Nov 22 17:53:15 1996 Jason Merrill *************** Sat Oct 26 14:04:09 1996 Ben Harris *** 152,193 **** ZLIB = @zlibdir@ -lz ZLIBINC = @zlibinc@ - # How to invoke ranlib. - RANLIB = ranlib - # Test to use to see whether ranlib exists on the system. - RANLIB_TEST = \ - [ -f $(RANLIB) ] \ - || [ -f /usr/bin/ranlib -o -f /bin/ranlib ] - # Substitution type for target's getgroups 2nd arg. TARGET_GETGROUPS_T = @TARGET_GETGROUPS_T@ - # Compiler to use for compiling libgcc1.a. - # OLDCC should not be the GNU C compiler, - # since that would compile typical libgcc1.a functions such as mulsi3 - # into infinite recursions. - OLDCC = cc - - # CFLAGS for use with OLDCC, for compiling libgcc1.a. - # NOTE: -O does not work on some Unix systems! - CCLIBFLAGS = -O - - # Version of ar to use when compiling libgcc1.a. - OLDAR = ar - OLDAR_FLAGS = qc - # Target to use when installing include directory. Either ! # install-headers-tar or install-headers-cpio. INSTALL_HEADERS_DIR = @build_install_headers_dir@ # Header files that are made available under the same name # to programs compiled with GCC. USER_H = $(srcdir)/ginclude/stdarg.h $(srcdir)/ginclude/stddef.h \ ! $(srcdir)/ginclude/varargs.h $(srcdir)/ginclude/proto.h \ $(srcdir)/ginclude/stdbool.h $(srcdir)/ginclude/iso646.h \ ! $(EXTRA_HEADERS) $(LANG_EXTRA_HEADERS) ! # The GCC to use for compiling libgcc.a, enquire, and libgcc1-test. # Usually the one we just built. # Don't use this as a dependency--use $(GCC_PASSES) or $(GCC_PARTS). GCC_FOR_TARGET = ./xgcc -B./ -B$(build_tooldir)/bin/ -isystem $(build_tooldir)/include -isystem $(build_tooldir)/sys-include --- 145,165 ---- ZLIB = @zlibdir@ -lz ZLIBINC = @zlibinc@ # Substitution type for target's getgroups 2nd arg. TARGET_GETGROUPS_T = @TARGET_GETGROUPS_T@ # Target to use when installing include directory. Either ! # install-headers-tar, install-headers-cpio or install-headers-cp. INSTALL_HEADERS_DIR = @build_install_headers_dir@ # Header files that are made available under the same name # to programs compiled with GCC. USER_H = $(srcdir)/ginclude/stdarg.h $(srcdir)/ginclude/stddef.h \ ! $(srcdir)/ginclude/varargs.h \ $(srcdir)/ginclude/stdbool.h $(srcdir)/ginclude/iso646.h \ ! $(EXTRA_HEADERS) ! # The GCC to use for compiling libgcc.a, enquire, and crt*.o. # Usually the one we just built. # Don't use this as a dependency--use $(GCC_PASSES) or $(GCC_PARTS). GCC_FOR_TARGET = ./xgcc -B./ -B$(build_tooldir)/bin/ -isystem $(build_tooldir)/include -isystem $(build_tooldir)/sys-include *************** RANLIB_TEST_FOR_TARGET = \ *** 241,247 **** || ( [ "$(host_canonical)" = "$(target)" ] \ && [ -f /usr/bin/ranlib -o -f /bin/ranlib ] ) NM_FOR_TARGET = ` \ ! if [ -f $(objdir)/../binutils/nm-new ] ; then \ echo $(objdir)/../binutils/nm-new ; \ else \ if [ "$(host_canonical)" = "$(target)" ] ; then \ --- 213,221 ---- || ( [ "$(host_canonical)" = "$(target)" ] \ && [ -f /usr/bin/ranlib -o -f /bin/ranlib ] ) NM_FOR_TARGET = ` \ ! if [ -f ./nm ] ; then \ ! echo ./nm ; \ ! elif [ -f $(objdir)/../binutils/nm-new ] ; then \ echo $(objdir)/../binutils/nm-new ; \ else \ if [ "$(host_canonical)" = "$(target)" ] ; then \ *************** NM_FOR_TARGET = ` \ *** 251,270 **** fi; \ fi` - # Dir to search for system headers. Overridden by cross-make. - SYSTEM_HEADER_DIR = /usr/include - # Where to find some libiberty headers. HASHTAB_H = $(srcdir)/../include/hashtab.h OBSTACK_H = $(srcdir)/../include/obstack.h SPLAY_TREE_H= $(srcdir)/../include/splay-tree.h # Default cross SYSTEM_HEADER_DIR, to be overridden by targets. CROSS_SYSTEM_HEADER_DIR = $(build_tooldir)/sys-include # Control whether to run fixproto and fixincludes. ! STMP_FIXPROTO = stmp-fixproto ! STMP_FIXINC = stmp-fixinc # Test to see whether exists in the system header files. LIMITS_H_TEST = [ -f $(SYSTEM_HEADER_DIR)/limits.h ] --- 225,247 ---- fi; \ fi` # Where to find some libiberty headers. HASHTAB_H = $(srcdir)/../include/hashtab.h OBSTACK_H = $(srcdir)/../include/obstack.h SPLAY_TREE_H= $(srcdir)/../include/splay-tree.h + FIBHEAP_H = $(srcdir)/../include/fibheap.h + # Default native SYSTEM_HEADER_DIR, to be overridden by targets. + NATIVE_SYSTEM_HEADER_DIR = /usr/include # Default cross SYSTEM_HEADER_DIR, to be overridden by targets. CROSS_SYSTEM_HEADER_DIR = $(build_tooldir)/sys-include + # autoconf sets SYSTEM_HEADER_DIR to one of the above. + SYSTEM_HEADER_DIR = @SYSTEM_HEADER_DIR@ + # Control whether to run fixproto and fixincludes. ! STMP_FIXPROTO = @STMP_FIXPROTO@ ! STMP_FIXINC = @STMP_FIXINC@ # Test to see whether exists in the system header files. LIMITS_H_TEST = [ -f $(SYSTEM_HEADER_DIR)/limits.h ] *************** tmake_file=@dep_tmake_file@ *** 276,283 **** out_file=$(srcdir)/config/@out_file@ out_object_file=@out_object_file@ md_file=$(srcdir)/config/@md_file@ - tm_file_list=@tm_file_list@ - tm_file=@tm_file@ tm_p_file_list=@tm_p_file_list@ tm_p_file=@tm_p_file@ build_xm_file_list=@build_xm_file_list@ --- 253,258 ---- *************** infodir = @infodir@ *** 337,343 **** # Where cpp should go besides $prefix/bin if necessary cpp_install_dir = @cpp_install_dir@ # where the locale files go ! datadir = $(prefix)/@DATADIRNAME@ localedir = $(datadir)/locale # Extension (if any) to put in installed man-page filename. man1ext = .1 --- 312,318 ---- # Where cpp should go besides $prefix/bin if necessary cpp_install_dir = @cpp_install_dir@ # where the locale files go ! datadir = @datadir@ localedir = $(datadir)/locale # Extension (if any) to put in installed man-page filename. man1ext = .1 *************** USE_NLS = @USE_NLS@ *** 361,380 **** # Internationalization library. INTLLIBS = @INTLLIBS@ # Character encoding conversion library. LIBICONV = @LIBICONV@ # List of internationalization subdirectories. ! POSUB = @POSUB@ ! INTL_SUBDIRS = intl $(POSUB) ! ! # Additional system libraries to link with. ! CLIB= ! ! # Change this to a null string if obstacks are installed in the ! # system library. ! OBSTACK=obstack.o # The GC method to be used on this system. GGC=@GGC@.o --- 336,348 ---- # Internationalization library. INTLLIBS = @INTLLIBS@ + INTLDEPS = @INTLDEPS@ # Character encoding conversion library. LIBICONV = @LIBICONV@ # List of internationalization subdirectories. ! INTL_SUBDIRS = intl # The GC method to be used on this system. GGC=@GGC@.o *************** GGC=@GGC@.o *** 382,412 **** # If a supplementary library is being used for the GC. GGC_LIB= ! # Configure will set these if you need vfprintf and possibly _doprnt support. ! VFPRINTF=@vfprintf@ ! DOPRINT=@doprint@ ! STRSTR=@strstr@ ! ! # Specify the rule for actually making libgcc.a, LIBGCC = libgcc.a - # and the rule for installing it. INSTALL_LIBGCC = install-libgcc - # Specify the rule for actually making libgcc1.a. - # The value may be empty; that means to do absolutely nothing - # with or for libgcc1.a. - LIBGCC1 = libgcc1.a - - # Specify the rule for making libgcc1.a for a cross-compiler. - # The default rule assumes that libgcc1.a is supplied by the user. - CROSS_LIBGCC1 = libgcc1.cross - # Options to use when compiling libgcc2.a. - # -g1 causes output of debug info only for file-scope entities. - # we use this here because that should be enough, and also - # so that -g1 will be tested. # ! LIBGCC2_DEBUG_CFLAGS = -g1 LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(TARGET_LIBGCC2_CFLAGS) $(LIBGCC2_DEBUG_CFLAGS) $(GTHREAD_FLAGS) -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED @inhibit_libc@ # Additional options to use when compiling libgcc2.a. --- 350,363 ---- # If a supplementary library is being used for the GC. GGC_LIB= ! # libgcc.a may be built directly or via stmp-multilib, ! # and installed likewise. Overridden by t-fragment. LIBGCC = libgcc.a INSTALL_LIBGCC = install-libgcc # Options to use when compiling libgcc2.a. # ! LIBGCC2_DEBUG_CFLAGS = -g LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(TARGET_LIBGCC2_CFLAGS) $(LIBGCC2_DEBUG_CFLAGS) $(GTHREAD_FLAGS) -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED @inhibit_libc@ # Additional options to use when compiling libgcc2.a. *************** LIBGCC2_INCLUDES = *** 416,429 **** # Additional target-dependent options for compiling libgcc2.a. TARGET_LIBGCC2_CFLAGS = # Additional sources to handle exceptions; overridden on ia64. LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde.c \ $(srcdir)/unwind-sjlj.c LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h - # libgcc1-test target (must also be overridable for a target) - LIBGCC1_TEST = libgcc1-test - # nm flags to list global symbols in libgcc object files. SHLIB_NM_FLAGS = -pg --- 367,381 ---- # Additional target-dependent options for compiling libgcc2.a. TARGET_LIBGCC2_CFLAGS = + # Options to use when compiling crtbegin/end. + CRTSTUFF_CFLAGS = -O2 $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \ + -finhibit-size-directive -fno-inline-functions -fno-exceptions + # Additional sources to handle exceptions; overridden on ia64. LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde.c \ $(srcdir)/unwind-sjlj.c LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h # nm flags to list global symbols in libgcc object files. SHLIB_NM_FLAGS = -pg *************** EXTRA_GCC_OBJS =@host_extra_gcc_objs@ *** 451,470 **** # Often this is edited directly by `configure'. EXTRA_HEADERS =@extra_headers_list@ - # Set this to `collect2' to enable use of collect2. - USE_COLLECT2 = @will_use_collect2@ - # If we might be using collect2, then this variable will be set to - # -DUSE_COLLECT2. toplev.c, collect2.c and libgcc2.c all need to - # if we may be using collect2. - MAYBE_USE_COLLECT2 = @maybe_use_collect2@ # It is convenient for configure to add the assignment at the beginning, # so don't override it here. USE_COLLECT2 = collect2$(exeext) - # List of extra C and assembler files to add to libgcc1.a. - # Assembler files should have names ending in `.asm'. - LIB1FUNCS_EXTRA = - # List of extra C and assembler files to add to static and shared libgcc2. # Assembler files should have names ending in `.asm'. LIB2FUNCS_EXTRA = --- 403,412 ---- *************** DIR = ../gcc *** 519,563 **** # Flags to use when cross-building GCC. # Prefix to apply to names of object files when using them # to run on the machine we are compiling on. ! HOST_PREFIX= # Prefix to apply to names of object files when compiling them # to run on the machine we are compiling on. # The default for this variable is chosen to keep these rules # out of the way of the other rules for compiling the same source files. ! HOST_PREFIX_1=loser- ! HOST_CC=$(CC) ! # If you change any of the following variables, check whether a ! # similar change is needed in build-make. ! HOST_CFLAGS=$(ALL_CFLAGS) -DGENERATOR_FILE ! HOST_CLIB=$(CLIB) HOST_LDFLAGS=$(LDFLAGS) HOST_CPPFLAGS=$(ALL_CPPFLAGS) - HOST_ALLOCA=$(ALLOCA) - HOST_MALLOC=$(MALLOC) - HOST_OBSTACK=$(OBSTACK) - HOST_VFPRINTF=$(VFPRINTF) - HOST_DOPRINT=$(DOPRINT) - HOST_STRSTR=$(STRSTR) # Actual name to use when installing a native compiler. ! GCC_INSTALL_NAME = `t='$(program_transform_name)'; echo gcc | sed -e $$t` ! CPP_INSTALL_NAME = `t='$(program_transform_name)'; echo cpp | sed -e $$t` ! PROTOIZE_INSTALL_NAME = `t='$(program_transform_name)'; echo protoize | sed -e $$t` ! UNPROTOIZE_INSTALL_NAME = `t='$(program_transform_name)'; echo unprotoize | sed -e $$t` ! GCOV_INSTALL_NAME = `t='$(program_transform_name)'; echo gcov | sed -e $$t` ! GCCBUG_INSTALL_NAME = `t='$(program_transform_name)'; echo gccbug | sed -e $$t` # Actual name to use when installing a cross-compiler. ! GCC_CROSS_NAME = `t='$(program_transform_cross_name)'; echo gcc | sed -e $$t` ! CPP_CROSS_NAME = `t='$(program_transform_cross_name)'; echo cpp | sed -e $$t` ! PROTOIZE_CROSS_NAME = `t='$(program_transform_cross_name)'; echo protoize | sed -e $$t` ! UNPROTOIZE_CROSS_NAME = `t='$(program_transform_cross_name)'; echo unprotoize | sed -e $$t` ! ! # Choose the real default target. ! ALL=all.internal ! # Choose the real install target. ! INSTALL_TARGET=install-normal # Setup the testing framework, if you have one EXPECT = `if [ -f $${rootme}/../expect/expect ] ; then \ --- 461,498 ---- # Flags to use when cross-building GCC. # Prefix to apply to names of object files when using them # to run on the machine we are compiling on. ! HOST_PREFIX = @HOST_PREFIX@ # Prefix to apply to names of object files when compiling them # to run on the machine we are compiling on. # The default for this variable is chosen to keep these rules # out of the way of the other rules for compiling the same source files. ! HOST_PREFIX_1 = @HOST_PREFIX_1@ ! # Native compiler for the build machine and its switches. ! HOST_CC = @HOST_CC@ ! HOST_CFLAGS= @HOST_CFLAGS@ -DGENERATOR_FILE ! ! # Native linker and preprocessor flags. For x-fragment overrides. HOST_LDFLAGS=$(LDFLAGS) HOST_CPPFLAGS=$(ALL_CPPFLAGS) # Actual name to use when installing a native compiler. ! GCC_INSTALL_NAME = `echo gcc|sed '$(program_transform_name)'` ! GCC_TARGET_INSTALL_NAME = $(target_alias)-`echo gcc|sed '$(program_transform_name)'` ! CPP_INSTALL_NAME = `echo cpp|sed '$(program_transform_name)'` ! PROTOIZE_INSTALL_NAME = `echo protoize|sed '$(program_transform_name)'` ! UNPROTOIZE_INSTALL_NAME = `echo unprotoize|sed '$(program_transform_name)'` ! GCOV_INSTALL_NAME = `echo gcov|sed '$(program_transform_name)'` ! GCCBUG_INSTALL_NAME = `echo gccbug|sed '$(program_transform_name)'` # Actual name to use when installing a cross-compiler. ! GCC_CROSS_NAME = `echo gcc|sed '$(program_transform_cross_name)'` ! CPP_CROSS_NAME = `echo cpp|sed '$(program_transform_cross_name)'` ! PROTOIZE_CROSS_NAME = `echo protoize|sed '$(program_transform_cross_name)'` ! UNPROTOIZE_CROSS_NAME = `echo unprotoize|sed '$(program_transform_cross_name)'` ! # Set by autoconf to "all.internal" for a native build, or ! # "all.cross" to build a cross compiler. ! ALL = @ALL@ # Setup the testing framework, if you have one EXPECT = `if [ -f $${rootme}/../expect/expect ] ; then \ *************** all: all.indirect *** 599,611 **** # GCONFIG_H lists the config files that the generator files depend on, while # CONFIG_H lists the the ones ordinary gcc files depend on, which includes ! # a file generated by gencodes. GCONFIG_H = config.h $(host_xm_file_list) HCONFIG_H = hconfig.h $(build_xm_file_list) ! CONFIG_H = $(GCONFIG_H) $(TM_H) insn-codes.h insn-flags.h ! TCONFIG_H = tconfig.h $(xm_file_list) insn-codes.h insn-flags.h ! TM_H = tm.h $(tm_file_list) ! TM_P_H = tm_p.h $(tm_p_file_list) insn-codes.h insn-flags.h MACHMODE_H = machmode.h machmode.def RTL_BASE_H = rtl.h rtl.def $(MACHMODE_H) --- 534,548 ---- # GCONFIG_H lists the config files that the generator files depend on, while # CONFIG_H lists the the ones ordinary gcc files depend on, which includes ! # several files generated by those generators. GCONFIG_H = config.h $(host_xm_file_list) HCONFIG_H = hconfig.h $(build_xm_file_list) ! CONFIG_H = $(GCONFIG_H) insn-constants.h insn-flags.h ! TCONFIG_H = tconfig.h $(xm_file_list) ! TARGET_H = target.h ! HOOKS_H = hooks.h ! TARGET_DEF_H = target-def.h $(HOOKS_H) ! TM_P_H = tm_p.h $(tm_p_file_list) tm-preds.h MACHMODE_H = machmode.h machmode.def RTL_BASE_H = rtl.h rtl.def $(MACHMODE_H) *************** BASIC_BLOCK_H = basic-block.h bitmap.h s *** 616,621 **** --- 553,559 ---- DEMANGLE_H = $(srcdir)/../include/demangle.h RECOG_H = recog.h EXPR_H = expr.h + OPTABS_H = optabs.h insn-codes.h REGS_H = regs.h varray.h $(MACHMODE_H) INTEGRATE_H = integrate.h varray.h LOOP_H = loop.h varray.h bitmap.h *************** TIMEVAR_H = timevar.h timevar.def *** 625,630 **** --- 563,571 ---- INSN_ATTR_H = insn-attr.h $(srcdir)/insn-addr.h $(srcdir)/varray.h C_COMMON_H = c-common.h $(SPLAY_TREE_H) C_TREE_H = c-tree.h $(C_COMMON_H) + SYSTEM_H = system.h hwint.h $(srcdir)/../include/libiberty.h + PREDICT_H = predict.h predict.def + CPPLIB_H = cpplib.h line-map.h # sed inserts variable overrides after the following line. ####target overrides *************** C_TREE_H = c-tree.h $(C_COMMON_H) *** 632,651 **** ####host overrides @host_overrides@ - - ####cross overrides - @cross_defines@ - @cross_overrides@ - - ####build overrides - @build_overrides@ # # Now figure out from those variables how to compile and link. all.indirect: $(ALL) ! # IN_GCC tells various files that system.h, toplev.c, etc are available. ! INTERNAL_CFLAGS = $(CROSS) -DIN_GCC @extra_c_flags@ # This is the variable actually used when we compile. # If you change this line, you probably also need to change the definition --- 573,587 ---- ####host overrides @host_overrides@ # # Now figure out from those variables how to compile and link. all.indirect: $(ALL) ! # IN_GCC distinguishes between code compiled into GCC itself and other ! # programs built during a bootstrap. ! # autoconf inserts -DCROSS_COMPILE if we are building a cross compiler. ! INTERNAL_CFLAGS = -DIN_GCC @CROSS@ # This is the variable actually used when we compile. # If you change this line, you probably also need to change the definition *************** ALL_CFLAGS = $(INTERNAL_CFLAGS) $(X_CFLA *** 656,699 **** # Likewise. ALL_CPPFLAGS = $(CPPFLAGS) $(X_CPPFLAGS) $(T_CPPFLAGS) ! # Even if ALLOCA is set, don't use it if compiling with GCC. ! USE_ALLOCA= ${ALLOCA} ! USE_HOST_ALLOCA= ` case "${HOST_ALLOCA}" in ?*) echo ${HOST_PREFIX}${HOST_ALLOCA} ;; esac ` ! USE_HOST_MALLOC= ` case "${HOST_MALLOC}" in ?*) echo ${HOST_PREFIX}${HOST_MALLOC} ;; esac ` ! USE_HOST_OBSTACK= ` case "${HOST_OBSTACK}" in ?*) echo ${HOST_PREFIX}${HOST_OBSTACK} ;; esac ` ! USE_HOST_VFPRINTF= ` case "${HOST_VFPRINTF}" in ?*) echo ${HOST_PREFIX}${HOST_VFPRINTF} ;; esac ` ! USE_HOST_DOPRINT= ` case "${HOST_DOPRINT}" in ?*) echo ${HOST_PREFIX}${HOST_DOPRINT} ;; esac ` ! USE_HOST_STRSTR= ` case "${HOST_STRSTR}" in ?*) echo ${HOST_PREFIX}${HOST_STRSTR} ;; esac ` ! # Dependency on obstack, alloca, malloc or whatever library facilities ! # are not installed in the system libraries. ! # We don't use USE_ALLOCA because backquote expansion doesn't work in deps. ! LIBDEPS= $(INTLLIBS) $(OBSTACK) $(ALLOCA) $(MALLOC) $(VFPRINTF) $(DOPRINT) $(STRSTR) # Likewise, for use in the tools that must run on this machine # even if we are cross-building GCC. ! # We don't use USE_ALLOCA because backquote expansion doesn't work in deps. ! HOST_LIBDEPS= $(HOST_PREFIX)$(HOST_OBSTACK) $(HOST_PREFIX)$(HOST_ALLOCA) $(HOST_PREFIX)$(HOST_MALLOC) $(HOST_PREFIX)$(HOST_VFPRINTF) $(HOST_PREFIX)$(HOST_DOPRINT) $(HOST_PREFIX)$(HOST_STRSTR) # How to link with both our special library facilities # and the system's installed libraries. ! LIBS = $(OBSTACK) $(USE_ALLOCA) $(MALLOC) $(INTLLIBS) @LIBS@ $(VFPRINTF) $(DOPRINT) $(STRSTR) $(CLIB) ../libiberty/libiberty.a # Likewise, for use in the tools that must run on this machine # even if we are cross-building GCC. ! HOST_LIBS = $(USE_HOST_OBSTACK) $(USE_HOST_ALLOCA) $(USE_HOST_MALLOC) \ ! $(USE_HOST_VFPRINTF) $(USE_HOST_DOPRINT) $(USE_HOST_STRSTR) \ ! $(HOST_CLIB) ! HOST_RTL = $(HOST_PREFIX)rtl.o $(HOST_PREFIX)bitmap.o \ ! $(HOST_PREFIX)ggc-none.o gensupport.o hashtab.o safe-ctype.o HOST_PRINT = $(HOST_PREFIX)print-rtl.o HOST_ERRORS = $(HOST_PREFIX)errors.o # Specify the directories to be searched for header files. # Both . and srcdir are used, in that order, ! # so that tm.h and config.h will be found in the compilation # subdirectory rather than in the source directory. # -I$(@D) and -I$(srcdir)/$(@D) cause the subdirectory of the file # currently being compiled, in both source trees, to be examined as well. --- 592,626 ---- # Likewise. ALL_CPPFLAGS = $(CPPFLAGS) $(X_CPPFLAGS) $(T_CPPFLAGS) ! # Build and host support libraries. FORBUILD is either ! # .. or ../$(build_alias) depending on whether host != build. ! LIBIBERTY = ../libiberty/libiberty.a ! BUILD_LIBIBERTY = @FORBUILD@/libiberty/libiberty.a ! # Dependencies on the intl and portability libraries. ! LIBDEPS= $(INTLDEPS) $(LIBIBERTY) # Likewise, for use in the tools that must run on this machine # even if we are cross-building GCC. ! HOST_LIBDEPS= $(BUILD_LIBIBERTY) # How to link with both our special library facilities # and the system's installed libraries. ! LIBS = $(INTLLIBS) @LIBS@ $(LIBIBERTY) # Likewise, for use in the tools that must run on this machine # even if we are cross-building GCC. ! HOST_LIBS = $(BUILD_LIBIBERTY) ! HOST_RTL = $(HOST_PREFIX)rtl.o read-rtl.o $(HOST_PREFIX)bitmap.o \ ! $(HOST_PREFIX)ggc-none.o gensupport.o HOST_PRINT = $(HOST_PREFIX)print-rtl.o HOST_ERRORS = $(HOST_PREFIX)errors.o # Specify the directories to be searched for header files. # Both . and srcdir are used, in that order, ! # so that *config.h will be found in the compilation # subdirectory rather than in the source directory. # -I$(@D) and -I$(srcdir)/$(@D) cause the subdirectory of the file # currently being compiled, in both source trees, to be examined as well. *************** INCLUDES = -I. -I$(@D) -I$(srcdir) -I$(s *** 714,721 **** # These next lines are overridden by configure. LANG_MAKEFILES = @all_lang_makefiles@ LANG_STAGESTUFF = @all_stagestuff@ - LANG_DIFF_EXCLUDES = @all_diff_excludes@ - LANG_EXTRA_HEADERS = @all_headers@ # Flags to pass to recursive makes. # CC is set by configure. Hosts without symlinks need special handling --- 641,646 ---- *************** ORDINARY_FLAGS_TO_PASS = \ *** 730,736 **** "BISON=$(BISON)" \ "BISONFLAGS=$(BISONFLAGS)" \ "CFLAGS=$(CFLAGS) $(WARN_CFLAGS)" \ - "CLIB=$(CLIB)" \ "GCC_FOR_TARGET=$(GCC_FOR_TARGET)" \ "LDFLAGS=$(LDFLAGS)" \ "FLEX=$(FLEX)" \ --- 655,660 ---- *************** ORDINARY_FLAGS_TO_PASS = \ *** 743,749 **** "RANLIB_FOR_TARGET=$(RANLIB_FOR_TARGET)" \ "RANLIB_TEST_FOR_TARGET=$(RANLIB_TEST_FOR_TARGET)" \ "SHELL=$(SHELL)" \ - "STAGE_PREFIX=@stage_prefix_set_by_configure@" \ "exeext=$(exeext)" \ "build_exeext=$(build_exeext)" \ "objext=$(objext)" \ --- 667,672 ---- *************** ORDINARY_FLAGS_TO_PASS = \ *** 757,763 **** "libsubdir=$(libsubdir)" \ "datadir=$(datadir)" \ "localedir=$(localedir)" ! FLAGS_TO_PASS = $(ORDINARY_FLAGS_TO_PASS) "CC=@cc_set_by_configure@" PREPEND_DOTDOT_TO_RELATIVE_PATHS = sed \ -e 's|^ *[^ /][^ /]*/|%&|' \ -e 's| -B| -B%|g' \ --- 680,687 ---- "libsubdir=$(libsubdir)" \ "datadir=$(datadir)" \ "localedir=$(localedir)" ! FLAGS_TO_PASS = $(ORDINARY_FLAGS_TO_PASS) "CC=@cc_set_by_configure@" \ ! "STAGE_PREFIX=@stage_prefix_set_by_configure@" PREPEND_DOTDOT_TO_RELATIVE_PATHS = sed \ -e 's|^ *[^ /][^ /]*/|%&|' \ -e 's| -B| -B%|g' \ *************** PREPEND_DOTDOT_TO_RELATIVE_PATHS = sed \ *** 765,771 **** -e 's|%% *|../|g' \ -e 's|%||g' SUBDIR_FLAGS_TO_PASS = $(ORDINARY_FLAGS_TO_PASS) \ ! "CC=`echo @quoted_cc_set_by_configure@ | $(PREPEND_DOTDOT_TO_RELATIVE_PATHS)`" # # Lists of files for various purposes. --- 689,696 ---- -e 's|%% *|../|g' \ -e 's|%||g' SUBDIR_FLAGS_TO_PASS = $(ORDINARY_FLAGS_TO_PASS) \ ! "CC=`echo @quoted_cc_set_by_configure@ | $(PREPEND_DOTDOT_TO_RELATIVE_PATHS)`" \ ! "STAGE_PREFIX=`echo @quoted_stage_prefix_set_by_configure@ | $(PREPEND_DOTDOT_TO_RELATIVE_PATHS)`" # # Lists of files for various purposes. *************** C_TARGET_OBJS=@c_target_objs@ *** 776,805 **** CXX_TARGET_OBJS=@cxx_target_objs@ # Language-specific object files for C and Objective C. ! C_AND_OBJC_OBJS = c-errors.o c-lex.o c-pragma.o c-decl.o c-typeck.o \ ! c-convert.o c-aux-info.o c-common.o c-format.o c-semantics.o c-dump.o \ ! libcpp.a $(C_TARGET_OBJS) # Language-specific object files for C. C_OBJS = c-parse.o c-lang.o $(C_AND_OBJC_OBJS) # Language-independent object files. ! OBJS = diagnostic.o version.o tree.o print-tree.o stor-layout.o fold-const.o \ ! function.o stmt.o except.o expr.o calls.o expmed.o explow.o optabs.o real.o \ ! builtins.o intl.o varasm.o rtl.o print-rtl.o rtlanal.o emit-rtl.o genrtl.o \ ! dbxout.o sdbout.o dwarfout.o dwarf2asm.o dwarf2out.o xcoffout.o bitmap.o \ ! alias.o gcse.o integrate.o jump.o cse.o loop.o doloop.o unroll.o flow.o \ ! combine.o varray.o regclass.o regmove.o local-alloc.o global.o reload.o \ ! reload1.o caller-save.o insn-peep.o reorg.o haifa-sched.o final.o recog.o \ ! reg-stack.o regrename.o insn-opinit.o insn-recog.o insn-extract.o \ ! insn-output.o insn-emit.o lcm.o profile.o insn-attrtab.o $(out_object_file) \ ! $(EXTRA_OBJS) convert.o mbchar.o splay-tree.o graph.o sbitmap.o resource.o \ ! hash.o predict.o lists.o ggc-common.o $(GGC) stringpool.o simplify-rtx.o \ ! ssa.o bb-reorder.o sibcall.o conflict.o timevar.o ifcvt.o dominance.o \ ! dependence.o dce.o sched-vis.o sched-deps.o sched-rgn.o sched-ebb.o params.o ! BACKEND = toplev.o libbackend.a # GEN files are listed separately, so they can be built before doing parallel # makes for cc1 or cc1plus. Otherwise sequent parallel make attempts to load --- 701,734 ---- CXX_TARGET_OBJS=@cxx_target_objs@ # Language-specific object files for C and Objective C. ! C_AND_OBJC_OBJS = attribs.o c-errors.o c-lex.o c-pragma.o c-decl.o c-typeck.o \ ! c-convert.o c-aux-info.o c-common.o c-format.o c-semantics.o \ ! c-objc-common.o libcpp.a $(C_TARGET_OBJS) # Language-specific object files for C. C_OBJS = c-parse.o c-lang.o $(C_AND_OBJC_OBJS) # Language-independent object files. ! OBJS = alias.o bb-reorder.o bitmap.o builtins.o caller-save.o calls.o \ ! cfg.o cfganal.o cfgbuild.o cfgcleanup.o cfglayout.o cfgloop.o cfgrtl.o \ ! combine.o conflict.o convert.o cse.o cselib.o dbxout.o debug.o dependence.o \ ! df.o diagnostic.o doloop.o dominance.o dwarf2asm.o dwarf2out.o dwarfout.o \ ! emit-rtl.o except.o explow.o expmed.o expr.o final.o flow.o \ ! fold-const.o function.o gcse.o genrtl.o ggc-common.o global.o graph.o \ ! haifa-sched.o hash.o hashtable.o hooks.o ifcvt.o insn-attrtab.o insn-emit.o \ ! insn-extract.o insn-opinit.o insn-output.o insn-peep.o insn-recog.o \ ! integrate.o intl.o jump.o langhooks.o lcm.o lists.o local-alloc.o \ ! loop.o mbchar.o optabs.o params.o predict.o print-rtl.o print-tree.o \ ! profile.o real.o recog.o reg-stack.o regclass.o regmove.o regrename.o \ ! reload.o reload1.o reorg.o resource.o rtl.o rtlanal.o rtl-error.o \ ! sbitmap.o sched-deps.o sched-ebb.o sched-rgn.o sched-vis.o sdbout.o \ ! sibcall.o simplify-rtx.o ssa.o ssa-ccp.o ssa-dce.o stmt.o \ ! stor-layout.o stringpool.o timevar.o toplev.o tree.o tree-dump.o \ ! tree-inline.o unroll.o varasm.o varray.o version.o vmsdbgout.o xcoffout.o \ ! $(GGC) $(out_object_file) $(EXTRA_OBJS) ! BACKEND = main.o libbackend.a # GEN files are listed separately, so they can be built before doing parallel # makes for cc1 or cc1plus. Otherwise sequent parallel make attempts to load *************** BACKEND = toplev.o libbackend.a *** 807,826 **** GEN= genemit$(build_exeext) genoutput$(build_exeext) genrecog$(build_exeext) \ genextract$(build_exeext) genflags$(build_exeext) gencodes$(build_exeext) \ genconfig$(build_exeext) genpeep$(build_exeext) gengenrtl$(build_exeext) \ ! gencheck$(build_exeext) # Files to be copied away after each stage in building. STAGESTUFF = *$(objext) insn-flags.h insn-config.h insn-codes.h \ insn-output.c insn-recog.c insn-emit.c insn-extract.c insn-peep.c \ ! insn-attr.h insn-attrtab.c insn-opinit.c tree-check.h \ s-flags s-config s-codes s-mlib s-under s-genrtl \ s-output s-recog s-emit s-extract s-peep s-check \ ! s-attr s-attrtab s-opinit s-crt0 \ genemit$(build_exeext) genoutput$(build_exeext) genrecog$(build_exeext) \ genextract$(build_exeext) genflags$(build_exeext) gencodes$(build_exeext) \ genconfig$(build_exeext) genpeep$(build_exeext) genattrtab$(build_exeext) \ genattr$(build_exeext) genopinit$(build_exeext) gengenrtl$(build_exeext) \ ! gencheck$(build_exeext) genrtl.c genrtl.h \ xgcc$(exeext) cpp$(exeext) cc1$(exeext) cpp0$(exeext) $(EXTRA_PASSES) \ $(EXTRA_PARTS) $(EXTRA_PROGRAMS) gcc-cross$(exeext) cc1obj$(exeext) \ enquire$(exeext) protoize$(exeext) unprotoize$(exeext) \ --- 736,757 ---- GEN= genemit$(build_exeext) genoutput$(build_exeext) genrecog$(build_exeext) \ genextract$(build_exeext) genflags$(build_exeext) gencodes$(build_exeext) \ genconfig$(build_exeext) genpeep$(build_exeext) gengenrtl$(build_exeext) \ ! gencheck$(build_exeext) genpreds$(build_exeext) genconstants$(build_exeext) # Files to be copied away after each stage in building. STAGESTUFF = *$(objext) insn-flags.h insn-config.h insn-codes.h \ insn-output.c insn-recog.c insn-emit.c insn-extract.c insn-peep.c \ ! insn-attr.h insn-attrtab.c insn-opinit.c insn-constants.h tm-preds.h \ ! tree-check.h \ s-flags s-config s-codes s-mlib s-under s-genrtl \ s-output s-recog s-emit s-extract s-peep s-check \ ! s-attr s-attrtab s-opinit s-preds s-constants s-crt0 \ genemit$(build_exeext) genoutput$(build_exeext) genrecog$(build_exeext) \ genextract$(build_exeext) genflags$(build_exeext) gencodes$(build_exeext) \ genconfig$(build_exeext) genpeep$(build_exeext) genattrtab$(build_exeext) \ genattr$(build_exeext) genopinit$(build_exeext) gengenrtl$(build_exeext) \ ! gencheck$(build_exeext) genpreds$(build_exeext) genconstants$(build_exeext) \ ! genrtl.c genrtl.h \ xgcc$(exeext) cpp$(exeext) cc1$(exeext) cpp0$(exeext) $(EXTRA_PASSES) \ $(EXTRA_PARTS) $(EXTRA_PROGRAMS) gcc-cross$(exeext) cc1obj$(exeext) \ enquire$(exeext) protoize$(exeext) unprotoize$(exeext) \ *************** STAGESTUFF = *$(objext) insn-flags.h ins *** 828,856 **** gcov$(exeext) *.[0-9][0-9].* *.[si] libcpp.a libbackend.a libgcc.mk \ $(LANG_STAGESTUFF) - # Members of libgcc1.a. - LIB1FUNCS = _mulsi3 _udivsi3 _divsi3 _umodsi3 _modsi3 \ - _lshrsi3 _ashrsi3 _ashlsi3 \ - _divdf3 _muldf3 _negdf2 _adddf3 _subdf3 \ - _fixdfsi _fixsfsi _floatsidf _floatsisf _truncdfsf2 _extendsfdf2 \ - _addsf3 _negsf2 _subsf3 _mulsf3 _divsf3 \ - _eqdf2 _nedf2 _gtdf2 _gedf2 _ltdf2 _ledf2 \ - _eqsf2 _nesf2 _gtsf2 _gesf2 _ltsf2 _lesf2 - # Library members defined in libgcc2.c. ! LIB2FUNCS = _muldi3 _divdi3 _moddi3 _udivdi3 _umoddi3 _negdi2 \ ! _lshrdi3 _ashldi3 _ashrdi3 _ffsdi2 _clz \ ! _udiv_w_sdiv _udivmoddi4 _cmpdi2 _ucmpdi2 _floatdidf _floatdisf \ ! _fixunsdfsi _fixunssfsi _fixunsdfdi _fixdfdi _fixunssfdi _fixsfdi \ ! _fixxfdi _fixunsxfdi _floatdixf _fixunsxfsi \ ! _fixtfdi _fixunstfdi _floatditf \ ! _clear_cache _trampoline __main _exit \ ! _absvsi2 _absvdi2 _addvsi3 _addvdi3 _subvsi3 _subvdi3 \ ! _mulvsi3 _mulvdi3 _negvsi2 _negvdi2 \ ! _ctors # Defined in libgcc2.c, included only in the static library. ! LIB2FUNCS_ST = _eprintf _bb __gcc_bcmp FPBIT_FUNCS = _pack_sf _unpack_sf _addsub_sf _mul_sf _div_sf \ _fpcmp_parts_sf _compare_sf _eq_sf _ne_sf _gt_sf _ge_sf \ --- 759,776 ---- gcov$(exeext) *.[0-9][0-9].* *.[si] libcpp.a libbackend.a libgcc.mk \ $(LANG_STAGESTUFF) # Library members defined in libgcc2.c. ! # Variable length limited to 255 charactes when passed to a shell script. ! LIB2FUNCS_1 = _muldi3 _negdi2 _lshrdi3 _ashldi3 _ashrdi3 _ffsdi2 _clz \ ! _cmpdi2 _ucmpdi2 _floatdidf _floatdisf _fixunsdfsi _fixunssfsi \ ! _fixunsdfdi _fixdfdi _fixunssfdi _fixsfdi _fixxfdi _fixunsxfdi ! ! LIB2FUNCS_2 = _floatdixf _fixunsxfsi _fixtfdi _fixunstfdi _floatditf \ ! _clear_cache _trampoline __main _exit _absvsi2 _absvdi2 _addvsi3 \ ! _addvdi3 _subvsi3 _subvdi3 _mulvsi3 _mulvdi3 _negvsi2 _negvdi2 _ctors # Defined in libgcc2.c, included only in the static library. ! LIB2FUNCS_ST = _eprintf _bb __gcc_bcmp FPBIT_FUNCS = _pack_sf _unpack_sf _addsub_sf _mul_sf _div_sf \ _fpcmp_parts_sf _compare_sf _eq_sf _ne_sf _gt_sf _ge_sf \ *************** DPBIT_FUNCS = _pack_df _unpack_df _addsu *** 862,873 **** _lt_df _le_df _unord_df _si_to_df _df_to_si _negate_df _make_df \ _df_to_sf _thenan_df _df_to_usi _usi_to_df # # Language makefile fragments. # The following targets define the interface between us and the languages. # ! # all.build, all.cross, start.encap, rest.encap, # info, dvi, # install-normal, install-common, install-info, install-man, # uninstall, --- 782,797 ---- _lt_df _le_df _unord_df _si_to_df _df_to_si _negate_df _make_df \ _df_to_sf _thenan_df _df_to_usi _usi_to_df + # These might cause a divide overflow trap and so are compiled with + # unwinder info. + LIB2_DIVMOD_FUNCS = _divdi3 _moddi3 _udivdi3 _umoddi3 _udiv_w_sdiv _udivmoddi4 + # # Language makefile fragments. # The following targets define the interface between us and the languages. # ! # all.cross, start.encap, rest.encap, # info, dvi, # install-normal, install-common, install-info, install-man, # uninstall, *************** DPBIT_FUNCS = _pack_df _unpack_df _addsu *** 889,896 **** # # The only suffixes we want for implicit rules are .c and .o, so clear # the list and add them. This speeds up GNU Make, and allows -r to work. .SUFFIXES: ! .SUFFIXES: .c .o Makefile: $(srcdir)/Makefile.in config.status $(srcdir)/version.c \ $(xmake_file) $(tmake_file) $(LANG_MAKEFILES) --- 813,821 ---- # # The only suffixes we want for implicit rules are .c and .o, so clear # the list and add them. This speeds up GNU Make, and allows -r to work. + # For i18n support, we also need .gmo, .po, .pox. .SUFFIXES: ! .SUFFIXES: .c .o .po .pox .gmo Makefile: $(srcdir)/Makefile.in config.status $(srcdir)/version.c \ $(xmake_file) $(tmake_file) $(LANG_MAKEFILES) *************** Makefile: $(srcdir)/Makefile.in config.s *** 903,909 **** config.h: cs-config.h ; @true hconfig.h: cs-hconfig.h ; @true tconfig.h: cs-tconfig.h ; @true - tm.h: cs-tm.h ; @true tm_p.h: cs-tm_p.h ; @true cs-config.h: Makefile --- 828,833 ---- *************** cs-hconfig.h: Makefile *** 916,945 **** TARGET_CPU_DEFAULT="$(target_cpu_default)" \ $(SHELL) $(srcdir)/mkconfig.sh hconfig.h ! cs-tconfig.h: Makefile $(CONFIG_H) except.h HEADERS="$(xm_file)" DEFINES="$(xm_defines)" \ TARGET_CPU_DEFAULT="" \ $(SHELL) $(srcdir)/mkconfig.sh tconfig.h - # ??? Need extra help to get this definition copied to where libgcc can - # see it. It shouldn't matter which compiler we use to get there. - echo '#include "config.h"' > conftest.c - echo '#include "except.h"' >> conftest.c - echo 'xyzzy USING_SJLJ_EXCEPTIONS' >> conftest.c - $(HOST_CC) -E conftest.c $(ALL_CFLAGS) $(INCLUDES) > conftest.out - sed -e 's/xyzzy/#define USING_SJLJ_EXCEPTIONS/' -e '/#define/p' \ - -e d conftest.out >> tconfig.h - rm conftest.* - - cs-tm.h: Makefile - HEADERS="$(tm_file)" DEFINES="" TARGET_CPU_DEFAULT="" \ - TARGET_CPU_DEFAULT="$(target_cpu_default)" \ - $(SHELL) $(srcdir)/mkconfig.sh tm.h cs-tm_p.h: Makefile HEADERS="$(tm_p_file)" DEFINES="" TARGET_CPU_DEFAULT="" \ $(SHELL) $(srcdir)/mkconfig.sh tm_p.h ! $(srcdir)/configure: $(srcdir)/configure.in (cd $(srcdir) && autoconf) gccbug: $(srcdir)/gccbug.in --- 840,860 ---- TARGET_CPU_DEFAULT="$(target_cpu_default)" \ $(SHELL) $(srcdir)/mkconfig.sh hconfig.h ! cs-tconfig.h: Makefile HEADERS="$(xm_file)" DEFINES="$(xm_defines)" \ TARGET_CPU_DEFAULT="" \ $(SHELL) $(srcdir)/mkconfig.sh tconfig.h cs-tm_p.h: Makefile HEADERS="$(tm_p_file)" DEFINES="" TARGET_CPU_DEFAULT="" \ $(SHELL) $(srcdir)/mkconfig.sh tm_p.h ! # Don't automatically run autoconf, since configure.in might be accidentally ! # newer than configure. Also, this writes into the source directory which ! # might be on a read-only file system. If configured for maintainer mode ! # then do allow autoconf to be run. ! ! $(srcdir)/configure: @MAINT@ $(srcdir)/configure.in (cd $(srcdir) && autoconf) gccbug: $(srcdir)/gccbug.in *************** mklibgcc: $(srcdir)/mklibgcc.in *** 957,967 **** # "echo timestamp" is used instead of touch to be consistent with other # packages that use autoconf (??? perhaps also to avoid problems with patch?). # ??? Newer versions have a maintainer mode that may be useful here. ! $(srcdir)/config.in: $(srcdir)/cstamp-h.in ! $(srcdir)/cstamp-h.in: $(srcdir)/configure.in $(srcdir)/acconfig.h ! (cd $(srcdir) && autoheader) ! @rm -f $(srcdir)/cstamp-h.in ! echo timestamp > $(srcdir)/cstamp-h.in auto-host.h: cstamp-h ; @true cstamp-h: config.in config.status CONFIG_HEADERS=auto-host.h:config.in LANGUAGES="$(CONFIG_LANGUAGES)" $(SHELL) config.status --- 872,885 ---- # "echo timestamp" is used instead of touch to be consistent with other # packages that use autoconf (??? perhaps also to avoid problems with patch?). # ??? Newer versions have a maintainer mode that may be useful here. ! ! # Don't run autoheader automatically either. ! # Only run it if maintainer mode is enabled. ! @MAINT@ $(srcdir)/config.in: $(srcdir)/cstamp-h.in ! @MAINT@ $(srcdir)/cstamp-h.in: $(srcdir)/configure.in $(srcdir)/acconfig.h ! @MAINT@ (cd $(srcdir) && autoheader) ! @MAINT@ @rm -f $(srcdir)/cstamp-h.in ! @MAINT@ echo timestamp > $(srcdir)/cstamp-h.in auto-host.h: cstamp-h ; @true cstamp-h: config.in config.status CONFIG_HEADERS=auto-host.h:config.in LANGUAGES="$(CONFIG_LANGUAGES)" $(SHELL) config.status *************** all.internal: start.encap rest.encap doc *** 982,990 **** # Note that we can compile enquire using the cross-compiler just built, # although we can't run it on this machine. all.cross: native gcc-cross cpp$(exeext) specs \ ! $(LIBGCC) $(LIBGCC1_TEST) $(EXTRA_PARTS) lang.all.cross doc ! # This is what to compile if making gcc with a cross-compiler. ! all.build: native xgcc$(exeext) cpp$(exeext) $(EXTRA_PARTS) lang.all.build # This is what must be made before installing GCC and converting libraries. start.encap: native xgcc$(exeext) cpp$(exeext) specs \ xlimits.h lang.start.encap --- 900,906 ---- # Note that we can compile enquire using the cross-compiler just built, # although we can't run it on this machine. all.cross: native gcc-cross cpp$(exeext) specs \ ! $(LIBGCC) $(EXTRA_PARTS) lang.all.cross doc # This is what must be made before installing GCC and converting libraries. start.encap: native xgcc$(exeext) cpp$(exeext) specs \ xlimits.h lang.start.encap *************** start.encap: native xgcc$(exeext) cpp$(e *** 992,998 **** rest.encap: $(STMP_FIXPROTO) $(LIBGCC) $(EXTRA_PARTS) lang.rest.encap # This is what is made with the host's compiler # whether making a cross compiler or not. ! native: config.status auto-host.h intl.all $(LANGUAGES) \ $(EXTRA_PASSES) $(EXTRA_PROGRAMS) $(USE_COLLECT2) # Define the names for selecting languages in LANGUAGES. --- 908,914 ---- rest.encap: $(STMP_FIXPROTO) $(LIBGCC) $(EXTRA_PARTS) lang.rest.encap # This is what is made with the host's compiler # whether making a cross compiler or not. ! native: config.status auto-host.h intl.all build-@POSUB@ $(LANGUAGES) \ $(EXTRA_PASSES) $(EXTRA_PROGRAMS) $(USE_COLLECT2) # Define the names for selecting languages in LANGUAGES. *************** PROTO: proto *** 1006,1020 **** # This does the things that can't be done on the host machine. rest.cross: $(LIBGCC) specs - # Verify that it works to compile and link libgcc1-test. - # If it does, then there are sufficient replacements for libgcc1.a. - libgcc1-test: libgcc1-test.o native $(GCC_PARTS) - @echo "Testing libgcc1. Ignore linker warning messages." - $(GCC_FOR_TARGET) $(GCC_CFLAGS) libgcc1-test.o -o libgcc1-test \ - -nostartfiles -nostdlib `$(GCC_FOR_TARGET) --print-libgcc-file-name` - libgcc1-test.o: libgcc1-test.c native xgcc$(exeext) stmp-int-hdrs - $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(ALL_CPPFLAGS) -c $(srcdir)/libgcc1-test.c - # Recompile all the language-independent object files. # This is used only if the user explicitly asks for it. compilations: $(BACKEND) --- 922,927 ---- *************** compilations: $(BACKEND) *** 1023,1029 **** libbackend.a: $(OBJS) -rm -rf libbackend.a $(AR) $(AR_FLAGS) libbackend.a $(OBJS) ! if $(RANLIB_TEST) ; then $(RANLIB) libbackend.a ; else true ; fi # We call this executable `xgcc' rather than `gcc' # to avoid confusion if the current directory is in the path --- 930,936 ---- libbackend.a: $(OBJS) -rm -rf libbackend.a $(AR) $(AR_FLAGS) libbackend.a $(OBJS) ! -$(RANLIB) libbackend.a # We call this executable `xgcc' rather than `gcc' # to avoid confusion if the current directory is in the path *************** LIB2ADD_ST = $(LIB2FUNCS_STATIC_EXTRA) *** 1072,1090 **** libgcc.mk: config.status Makefile mklibgcc $(LIB2ADD) $(LIB2ADD_ST) xgcc$(exeext) objext='$(objext)' \ - OLDCC='$(OLDCC)' \ - LIBGCC1='$(LIBGCC1)' \ - LIB1FUNCS='$(LIB1FUNCS)' \ LIB1ASMFUNCS='$(LIB1ASMFUNCS)' \ ! LIB1FUNCS_EXTRA='$(LIB1FUNCS_EXTRA)' \ ! LIB2FUNCS='$(LIB2FUNCS)' \ LIB2FUNCS_ST='$(LIB2FUNCS_ST)' \ LIB2ADD='$(LIB2ADD)' \ LIB2ADDEH='$(LIB2ADDEH)' \ LIB2ADDEHDEP='$(LIB2ADDEHDEP)' \ - LIB2ADD_ST='$(LIB2ADD_ST)' \ FPBIT='$(FPBIT)' \ FPBIT_FUNCS='$(FPBIT_FUNCS)' \ DPBIT='$(DPBIT)' \ DPBIT_FUNCS='$(DPBIT_FUNCS)' \ MULTILIBS=`$(GCC_FOR_TARGET) --print-multi-lib` \ --- 979,995 ---- libgcc.mk: config.status Makefile mklibgcc $(LIB2ADD) $(LIB2ADD_ST) xgcc$(exeext) objext='$(objext)' \ LIB1ASMFUNCS='$(LIB1ASMFUNCS)' \ ! LIB2FUNCS_1='$(LIB2FUNCS_1)' \ ! LIB2FUNCS_2='$(LIB2FUNCS_2)' \ LIB2FUNCS_ST='$(LIB2FUNCS_ST)' \ LIB2ADD='$(LIB2ADD)' \ + LIB2ADD_ST='$(LIB2ADD_ST)' \ LIB2ADDEH='$(LIB2ADDEH)' \ LIB2ADDEHDEP='$(LIB2ADDEHDEP)' \ FPBIT='$(FPBIT)' \ FPBIT_FUNCS='$(FPBIT_FUNCS)' \ + LIB2_DIVMOD_FUNCS='$(LIB2_DIVMOD_FUNCS)' \ DPBIT='$(DPBIT)' \ DPBIT_FUNCS='$(DPBIT_FUNCS)' \ MULTILIBS=`$(GCC_FOR_TARGET) --print-multi-lib` \ *************** libgcc.mk: config.status Makefile mklibg *** 1094,1110 **** SHLIB_EXT='$(SHLIB_EXT)' \ SHLIB_MULTILIB='$(SHLIB_MULTILIB)' \ SHLIB_MKMAP='$(SHLIB_MKMAP)' \ SHLIB_MAPFILES='$(SHLIB_MAPFILES)' \ SHLIB_NM_FLAGS='$(SHLIB_NM_FLAGS)' \ $(SHELL) mklibgcc > tmp-libgcc.mk mv tmp-libgcc.mk libgcc.mk # All the things that might cause us to want to recompile bits of libgcc. LIBGCC_DEPS = $(GCC_PASSES) $(LANGUAGES) stmp-int-hdrs $(STMP_FIXPROTO) \ ! libgcc.mk $(srcdir)/libgcc1.c $(srcdir)/libgcc2.c $(TCONFIG_H) \ $(MACHMODE_H) longlong.h gbl-ctors.h config.status stmp-int-hdrs \ ! tsystem.h $(FPBIT) $(DPBIT) $(LIB2ADD) $(LIB2ADDEH) $(LIB2ADDEHDEP) \ ! $(LIB2ADD_ST) $(EXTRA_PARTS) libgcc.a: $(LIBGCC_DEPS) $(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \ --- 999,1018 ---- SHLIB_EXT='$(SHLIB_EXT)' \ SHLIB_MULTILIB='$(SHLIB_MULTILIB)' \ SHLIB_MKMAP='$(SHLIB_MKMAP)' \ + SHLIB_MKMAP_OPTS='$(SHLIB_MKMAP_OPTS)' \ SHLIB_MAPFILES='$(SHLIB_MAPFILES)' \ SHLIB_NM_FLAGS='$(SHLIB_NM_FLAGS)' \ + SHLIB_SLIBDIR_SUFFIXES='$(SHLIB_SLIBDIR_SUFFIXES)' \ + mkinstalldirs='$(SHELL) $(srcdir)/mkinstalldirs' \ $(SHELL) mklibgcc > tmp-libgcc.mk mv tmp-libgcc.mk libgcc.mk # All the things that might cause us to want to recompile bits of libgcc. LIBGCC_DEPS = $(GCC_PASSES) $(LANGUAGES) stmp-int-hdrs $(STMP_FIXPROTO) \ ! libgcc.mk $(srcdir)/libgcc2.c $(TCONFIG_H) \ $(MACHMODE_H) longlong.h gbl-ctors.h config.status stmp-int-hdrs \ ! tsystem.h $(FPBIT) $(DPBIT) $(LIB2ADD) $(LIB2ADD_ST) $(LIB2ADDEH) \ ! $(LIB2ADDEHDEP) $(EXTRA_PARTS) $(srcdir)/config/$(LIB1ASMSRC) libgcc.a: $(LIBGCC_DEPS) $(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \ *************** libgcc.a: $(LIBGCC_DEPS) *** 1112,1124 **** AR_FOR_TARGET="$(AR_FOR_TARGET)" \ AR_CREATE_FOR_TARGET="$(AR_CREATE_FOR_TARGET)" \ AR_FLAGS_FOR_TARGET="$(AR_FLAGS_FOR_TARGET)" \ - OLDCC="$(OLDCC)" CCLIBFLAGS="$(CCLIBFLAGS)" \ CFLAGS="$(CFLAGS) $(WARN_CFLAGS)" \ RANLIB_FOR_TARGET="$(RANLIB_FOR_TARGET)" \ RANLIB_TEST_FOR_TARGET="$(RANLIB_TEST_FOR_TARGET)" \ NM_FOR_TARGET="$(NM_FOR_TARGET)" AWK="$(AWK)" \ LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS)" \ ! INCLUDES="$(INCLUDES)" MAYBE_USE_COLLECT2="$(MAYBE_USE_COLLECT2)" \ CONFIG_H="$(TCONFIG_H)" MACHMODE_H="$(MACHMODE_H)" \ LIB1ASMSRC='$(LIB1ASMSRC)' \ MAKEOVERRIDES= \ --- 1020,1031 ---- AR_FOR_TARGET="$(AR_FOR_TARGET)" \ AR_CREATE_FOR_TARGET="$(AR_CREATE_FOR_TARGET)" \ AR_FLAGS_FOR_TARGET="$(AR_FLAGS_FOR_TARGET)" \ CFLAGS="$(CFLAGS) $(WARN_CFLAGS)" \ RANLIB_FOR_TARGET="$(RANLIB_FOR_TARGET)" \ RANLIB_TEST_FOR_TARGET="$(RANLIB_TEST_FOR_TARGET)" \ NM_FOR_TARGET="$(NM_FOR_TARGET)" AWK="$(AWK)" \ LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS)" \ ! INCLUDES="$(INCLUDES)" \ CONFIG_H="$(TCONFIG_H)" MACHMODE_H="$(MACHMODE_H)" \ LIB1ASMSRC='$(LIB1ASMSRC)' \ MAKEOVERRIDES= \ *************** libgcc.a: $(LIBGCC_DEPS) *** 1129,1142 **** # switches. multilib.h: s-mlib; @true s-mlib: $(srcdir)/genmultilib Makefile ! $(SHELL) $(srcdir)/genmultilib \ ! "`test @enable_multilib@ != yes || echo $(MULTILIB_OPTIONS)`" \ ! "`test @enable_multilib@ != yes || echo $(MULTILIB_DIRNAMES)`" \ ! "`test @enable_multilib@ != yes || echo $(MULTILIB_MATCHES)`" \ ! "`test @enable_multilib@ != yes || echo $(MULTILIB_EXCEPTIONS)`" \ ! "`test @enable_multilib@ != yes || echo $(MULTILIB_EXTRA_OPTS)`" \ ! "`test @enable_multilib@ != yes || echo $(MULTILIB_EXCLUSIONS)`" \ ! > tmp-mlib.h $(SHELL) $(srcdir)/move-if-change tmp-mlib.h multilib.h $(STAMP) s-mlib --- 1036,1053 ---- # switches. multilib.h: s-mlib; @true s-mlib: $(srcdir)/genmultilib Makefile ! if test @enable_multilib@ = yes; then \ ! $(SHELL) $(srcdir)/genmultilib \ ! "$(MULTILIB_OPTIONS)" \ ! "$(MULTILIB_DIRNAMES)" \ ! "$(MULTILIB_MATCHES)" \ ! "$(MULTILIB_EXCEPTIONS)" \ ! "$(MULTILIB_EXTRA_OPTS)" \ ! "$(MULTILIB_EXCLUSIONS)" \ ! > tmp-mlib.h; \ ! else \ ! $(SHELL) $(srcdir)/genmultilib '' '' '' '' '' '' > tmp-mlib.h; \ ! fi $(SHELL) $(srcdir)/move-if-change tmp-mlib.h multilib.h $(STAMP) s-mlib *************** stmp-multilib: $(LIBGCC_DEPS) *** 1147,1159 **** AR_FOR_TARGET="$(AR_FOR_TARGET)" \ AR_CREATE_FOR_TARGET="$(AR_CREATE_FOR_TARGET)" \ AR_FLAGS_FOR_TARGET="$(AR_FLAGS_FOR_TARGET)" \ - OLDCC="$(OLDCC)" CCLIBFLAGS="$(CCLIBFLAGS)" \ CFLAGS="$(CFLAGS) $(WARN_CFLAGS)" \ RANLIB_FOR_TARGET="$(RANLIB_FOR_TARGET)" \ RANLIB_TEST_FOR_TARGET="$(RANLIB_TEST_FOR_TARGET)" \ NM_FOR_TARGET="$(NM_FOR_TARGET)" AWK="$(AWK)" \ LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS)" \ ! INCLUDES="$(INCLUDES)" MAYBE_USE_COLLECT2="$(MAYBE_USE_COLLECT2)" \ CONFIG_H="$(CONFIG_H)" MACHMODE_H="$(MACHMODE_H)" \ LIB1ASMSRC='$(LIB1ASMSRC)' \ MAKEOVERRIDES= \ --- 1058,1069 ---- AR_FOR_TARGET="$(AR_FOR_TARGET)" \ AR_CREATE_FOR_TARGET="$(AR_CREATE_FOR_TARGET)" \ AR_FLAGS_FOR_TARGET="$(AR_FLAGS_FOR_TARGET)" \ CFLAGS="$(CFLAGS) $(WARN_CFLAGS)" \ RANLIB_FOR_TARGET="$(RANLIB_FOR_TARGET)" \ RANLIB_TEST_FOR_TARGET="$(RANLIB_TEST_FOR_TARGET)" \ NM_FOR_TARGET="$(NM_FOR_TARGET)" AWK="$(AWK)" \ LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS)" \ ! INCLUDES="$(INCLUDES)" \ CONFIG_H="$(CONFIG_H)" MACHMODE_H="$(MACHMODE_H)" \ LIB1ASMSRC='$(LIB1ASMSRC)' \ MAKEOVERRIDES= \ *************** stmp-multilib: $(LIBGCC_DEPS) *** 1163,1199 **** # Compile two additional files that are linked with every program # linked using GCC on systems using COFF or ELF, for the sake of C++ # constructors. ! $(T)crtbegin.o: crtstuff.c $(GCC_PASSES) $(TCONFIG_H) \ gbl-ctors.h stmp-int-hdrs tsystem.h ! $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \ ! -finhibit-size-directive -fno-inline-functions \ ! -fno-exceptions $(CRTSTUFF_T_CFLAGS) @inhibit_libc@ \ ! -c $(srcdir)/crtstuff.c -DCRT_BEGIN -o $(T)crtbegin$(objext) ! $(T)crtend.o: crtstuff.c $(GCC_PASSES) $(TCONFIG_H) \ gbl-ctors.h stmp-int-hdrs tsystem.h ! $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \ ! -finhibit-size-directive -fno-inline-functions \ ! -fno-exceptions $(CRTSTUFF_T_CFLAGS) @inhibit_libc@ \ ! -c $(srcdir)/crtstuff.c -DCRT_END -o $(T)crtend$(objext) # These are versions of crtbegin and crtend for shared libraries. ! $(T)crtbeginS.o: crtstuff.c $(GCC_PASSES) $(TCONFIG_H) \ gbl-ctors.h stmp-int-hdrs tsystem.h ! $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \ ! -finhibit-size-directive -fno-inline-functions \ ! -fno-exceptions $(CRTSTUFF_T_CFLAGS_S) @inhibit_libc@ \ ! -c $(srcdir)/crtstuff.c -DCRT_BEGIN -DCRTSTUFFS_O \ -o $(T)crtbeginS$(objext) ! $(T)crtendS.o: crtstuff.c $(GCC_PASSES) $(TCONFIG_H) \ gbl-ctors.h stmp-int-hdrs tsystem.h ! $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \ ! -finhibit-size-directive -fno-inline-functions \ ! -fno-exceptions $(CRTSTUFF_T_CFLAGS_S) @inhibit_libc@ \ ! -c $(srcdir)/crtstuff.c -DCRT_END -DCRTSTUFFS_O \ -o $(T)crtendS$(objext) # Compile the start modules crt0.o and mcrt0.o that are linked with # every program crt0.o: s-crt0 ; @true --- 1073,1110 ---- # Compile two additional files that are linked with every program # linked using GCC on systems using COFF or ELF, for the sake of C++ # constructors. ! $(T)crtbegin.o: crtstuff.c $(GCC_PASSES) $(TCONFIG_H) auto-host.h \ gbl-ctors.h stmp-int-hdrs tsystem.h ! $(GCC_FOR_TARGET) $(CRTSTUFF_CFLAGS) $(CRTSTUFF_T_CFLAGS) \ ! @inhibit_libc@ -c $(srcdir)/crtstuff.c -DCRT_BEGIN \ ! -o $(T)crtbegin$(objext) ! $(T)crtend.o: crtstuff.c $(GCC_PASSES) $(TCONFIG_H) auto-host.h \ gbl-ctors.h stmp-int-hdrs tsystem.h ! $(GCC_FOR_TARGET) $(CRTSTUFF_CFLAGS) $(CRTSTUFF_T_CFLAGS) \ ! @inhibit_libc@ -c $(srcdir)/crtstuff.c -DCRT_END \ ! -o $(T)crtend$(objext) # These are versions of crtbegin and crtend for shared libraries. ! $(T)crtbeginS.o: crtstuff.c $(GCC_PASSES) $(TCONFIG_H) auto-host.h \ gbl-ctors.h stmp-int-hdrs tsystem.h ! $(GCC_FOR_TARGET) $(CRTSTUFF_CFLAGS) $(CRTSTUFF_T_CFLAGS_S) \ ! @inhibit_libc@ -c $(srcdir)/crtstuff.c -DCRT_BEGIN -DCRTSTUFFS_O \ -o $(T)crtbeginS$(objext) ! $(T)crtendS.o: crtstuff.c $(GCC_PASSES) $(TCONFIG_H) auto-host.h \ gbl-ctors.h stmp-int-hdrs tsystem.h ! $(GCC_FOR_TARGET) $(CRTSTUFF_CFLAGS) $(CRTSTUFF_T_CFLAGS_S) \ ! @inhibit_libc@ -c $(srcdir)/crtstuff.c -DCRT_END -DCRTSTUFFS_O \ -o $(T)crtendS$(objext) + # This is a version of crtbegin for -static links. + $(T)crtbeginT.o: crtstuff.c $(GCC_PASSES) $(TCONFIG_H) auto-host.h \ + gbl-ctors.h stmp-int-hdrs tsystem.h + $(GCC_FOR_TARGET) $(CRTSTUFF_CFLAGS) $(CRTSTUFF_T_CFLAGS) \ + @inhibit_libc@ -c $(srcdir)/crtstuff.c -DCRT_BEGIN -DCRTSTUFFT_O \ + -o $(T)crtbeginT$(objext) + # Compile the start modules crt0.o and mcrt0.o that are linked with # every program crt0.o: s-crt0 ; @true *************** s-crt0: $(CRT0_S) $(MCRT0_S) $(GCC_PASSE *** 1213,1227 **** # C language specific files. ! c-errors.o: c-errors.c $(CONFIG_H) system.h $(TREE_H) $(C_TREE_H) flags.h \ diagnostic.h $(TM_P_H) c-parse.o : $(srcdir)/c-parse.c $(CONFIG_H) $(TREE_H) c-lex.h $(GGC_H) intl.h \ ! $(C_TREE_H) input.h flags.h system.h toplev.h output.h cpplib.h ! $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c $(srcdir)/c-parse.c $(srcdir)/c-parse.c: $(srcdir)/c-parse.y ! (cd $(srcdir) && $(BISON) $(BISONFLAGS) -o c-p$$$$.c c-parse.y && \ ! mv -f c-p$$$$.c c-parse.c) $(srcdir)/c-parse.y: c-parse.in echo '/*WARNING: This file is automatically generated!*/' >tmp-c-parse.y sed -e "/^ifobjc$$/,/^end ifobjc$$/d" \ --- 1124,1146 ---- # C language specific files. ! c-errors.o: c-errors.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) flags.h \ diagnostic.h $(TM_P_H) c-parse.o : $(srcdir)/c-parse.c $(CONFIG_H) $(TREE_H) c-lex.h $(GGC_H) intl.h \ ! $(C_TREE_H) input.h flags.h $(SYSTEM_H) toplev.h output.h $(CPPLIB_H) ! $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ ! -c $(srcdir)/c-parse.c $(OUTPUT_OPTION) $(srcdir)/c-parse.c: $(srcdir)/c-parse.y ! cd $(srcdir) && \ ! if $(BISON) $(BISONFLAGS) -o c-p$$$$.c c-parse.y; then \ ! test -f c-p$$$$.output && mv -f c-p$$$$.output c-parse.output ; \ ! mv -f c-p$$$$.c c-parse.c ; \ ! else \ ! rm -f c-p$$$$.* ; \ ! false ; \ ! fi ! $(srcdir)/c-parse.y: c-parse.in echo '/*WARNING: This file is automatically generated!*/' >tmp-c-parse.y sed -e "/^ifobjc$$/,/^end ifobjc$$/d" \ *************** $(srcdir)/c-parse.y: c-parse.in *** 1229,1295 **** $(srcdir)/c-parse.in >>tmp-c-parse.y $(SHELL) $(srcdir)/move-if-change tmp-c-parse.y $(srcdir)/c-parse.y ! c-decl.o : c-decl.c $(CONFIG_H) system.h $(TREE_H) $(RTL_H) $(C_TREE_H) \ ! $(GGC_H) c-lex.h flags.h function.h output.h $(EXPR_H) \ ! toplev.h intl.h $(TM_P_H) ! c-typeck.o : c-typeck.c $(CONFIG_H) system.h $(TREE_H) $(C_TREE_H) \ ! flags.h intl.h output.h $(EXPR_H) $(RTL_H) toplev.h $(TM_P_H) ! c-lang.o : c-lang.c $(CONFIG_H) system.h $(TREE_H) $(C_TREE_H) \ ! $(GGC_H) c-lex.h toplev.h diagnostic.h output.h function.h \ ! $(RTL_H) $(EXPR_H) ! c-lex.o : c-lex.c $(CONFIG_H) system.h $(TREE_H) $(RTL_H) c-lex.h $(C_TREE_H) \ c-pragma.h input.h intl.h flags.h toplev.h output.h \ ! mbchar.h cpplib.h $(EXPR_H) $(TM_P_H) ! c-aux-info.o : c-aux-info.c $(CONFIG_H) system.h $(TREE_H) $(C_TREE_H) \ flags.h toplev.h ! c-convert.o : c-convert.c $(CONFIG_H) system.h $(TREE_H) flags.h toplev.h ! c-pragma.o: c-pragma.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) function.h \ ! c-pragma.h toplev.h $(GGC_H) $(TM_P_H) ! mbchar.o: mbchar.c $(CONFIG_H) system.h mbchar.h ! graph.o: graph.c $(CONFIG_H) system.h toplev.h flags.h output.h $(RTL_H) \ function.h hard-reg-set.h $(BASIC_BLOCK_H) graph.h ! sbitmap.o: sbitmap.c $(CONFIG_H) system.h $(RTL_H) flags.h hard-reg-set.h \ $(BASIC_BLOCK_H) COLLECT2_OBJS = collect2.o tlink.o hash.o intl.o underscore.o version.o collect2$(exeext): $(COLLECT2_OBJS) $(LIBDEPS) # Don't try modifying collect2 (aka ld) in place--it might be linking this. ! -rm -f collect2$(exeext) ! $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(COLLECT2_OBJS) $(LIBS) ! collect2.o : collect2.c $(CONFIG_H) system.h gstab.h intl.h \ $(OBSTACK_H) $(DEMANGLE_H) collect2.h version.h $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ ! -DTARGET_MACHINE=\"$(target_alias)\" $(MAYBE_USE_COLLECT2) \ ! -c $(srcdir)/collect2.c ! tlink.o: tlink.c $(DEMANGLE_H) hash.h $(CONFIG_H) system.h collect2.h intl.h ! hash.o: hash.c hash.h system.h toplev.h $(CONFIG_H) $(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) - vfprintf.o: $(srcdir)/../libiberty/vfprintf.c $(GCONFIG_H) system.h - rm -f vfprintf.c - $(LN_S) $(srcdir)/../libiberty/vfprintf.c vfprintf.c - $(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) \ - vfprintf.c $(OUTPUT_OPTION) - - doprint.o: $(srcdir)/doprint.c $(GCONFIG_H) system.h - $(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) \ - $(srcdir)/doprint.c $(OUTPUT_OPTION) - - strstr.o: $(srcdir)/../libiberty/strstr.c $(GCONFIG_H) system.h - rm -f strstr.c - $(LN_S) $(srcdir)/../libiberty/strstr.c strstr.c - $(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) \ - strstr.c $(OUTPUT_OPTION) - - splay-tree.o: $(srcdir)/../libiberty/splay-tree.c $(GCONFIG_H) \ - $(srcdir)/../include/splay-tree.h $(srcdir)/../include/libiberty.h - rm -f splay-tree.c - $(LN_S) $(srcdir)/../libiberty/splay-tree.c splay-tree.c - $(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) \ - splay-tree.c $(OUTPUT_OPTION) - underscore.c: s-under ; @true s-under: $(GCC_PASSES) --- 1148,1197 ---- $(srcdir)/c-parse.in >>tmp-c-parse.y $(SHELL) $(srcdir)/move-if-change tmp-c-parse.y $(srcdir)/c-parse.y ! c-decl.o : c-decl.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) $(C_TREE_H) \ ! $(GGC_H) $(TARGET_H) c-lex.h flags.h function.h output.h $(EXPR_H) \ ! debug.h toplev.h intl.h $(TM_P_H) tree-inline.h $(TIMEVAR_H) c-pragma.h ! c-typeck.o : c-typeck.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) \ ! $(TARGET_H) flags.h intl.h output.h $(EXPR_H) $(RTL_H) toplev.h $(TM_P_H) ! c-lang.o : c-lang.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) \ ! langhooks.h langhooks-def.h ! c-lex.o : c-lex.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) c-lex.h \ ! debug.h $(C_TREE_H) \ c-pragma.h input.h intl.h flags.h toplev.h output.h \ ! mbchar.h $(CPPLIB_H) $(EXPR_H) $(TM_P_H) ! c-objc-common.o : c-objc-common.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) \ ! $(C_TREE_H) $(RTL_H) insn-config.h integrate.h $(EXPR_H) $(C_TREE_H) \ ! flags.h toplev.h tree-inline.h diagnostic.h integrate.h $(VARRAY_H) \ ! $(GGC_H) ! c-aux-info.o : c-aux-info.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) \ flags.h toplev.h ! c-convert.o : c-convert.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) flags.h toplev.h ! c-pragma.o: c-pragma.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) function.h \ ! c-pragma.h toplev.h output.h $(GGC_H) $(TM_P_H) $(C_COMMON_H) ! mbchar.o: mbchar.c $(CONFIG_H) $(SYSTEM_H) mbchar.h ! graph.o: graph.c $(CONFIG_H) $(SYSTEM_H) toplev.h flags.h output.h $(RTL_H) \ function.h hard-reg-set.h $(BASIC_BLOCK_H) graph.h ! sbitmap.o: sbitmap.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h hard-reg-set.h \ $(BASIC_BLOCK_H) COLLECT2_OBJS = collect2.o tlink.o hash.o intl.o underscore.o version.o + COLLECT2_LIBS = @COLLECT2_LIBS@ collect2$(exeext): $(COLLECT2_OBJS) $(LIBDEPS) # Don't try modifying collect2 (aka ld) in place--it might be linking this. ! $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o T$@ \ ! $(COLLECT2_OBJS) $(LIBS) $(COLLECT2_LIBS) ! mv -f T$@ $@ ! collect2.o : collect2.c $(CONFIG_H) $(SYSTEM_H) gstab.h intl.h \ $(OBSTACK_H) $(DEMANGLE_H) collect2.h version.h $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ ! -DTARGET_MACHINE=\"$(target_alias)\" \ ! -c $(srcdir)/collect2.c $(OUTPUT_OPTION) ! tlink.o: tlink.c $(DEMANGLE_H) hash.h $(CONFIG_H) $(SYSTEM_H) collect2.h intl.h ! hash.o: hash.c hash.h $(SYSTEM_H) toplev.h $(GCONFIG_H) $(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) underscore.c: s-under ; @true s-under: $(GCC_PASSES) *************** s-under: $(GCC_PASSES) *** 1307,1327 **** # A file used by all variants of C. ! c-common.o : c-common.c $(CONFIG_H) system.h $(TREE_H) $(OBSTACK_H) \ $(C_COMMON_H) flags.h toplev.h output.h c-pragma.h $(RTL_H) $(GGC_H) \ ! $(EXPR_H) $(TM_P_H) ! c-format.o : c-format.c $(CONFIG_H) system.h $(TREE_H) \ $(C_COMMON_H) flags.h toplev.h intl.h diagnostic.h ! c-semantics.o : c-semantics.c $(CONFIG_H) system.h $(TREE_H) $(C_TREE_H) \ c-lex.h flags.h toplev.h output.h c-pragma.h $(RTL_H) $(GGC_H) \ $(EXPR_H) - c-dump.o: c-dump.c $(CONFIG_H) system.h $(TREE_H) $(C_TREE_H) \ - c-lex.h flags.h toplev.h output.h c-pragma.h $(RTL_H) $(GGC_H) \ - $(EXPR_H) $(SPLAY_TREE_H) c-dump.h - # Language-independent files. DRIVER_DEFINES = \ --- 1209,1232 ---- # A file used by all variants of C. ! c-common.o : c-common.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(OBSTACK_H) \ $(C_COMMON_H) flags.h toplev.h output.h c-pragma.h $(RTL_H) $(GGC_H) \ ! $(EXPR_H) $(TM_P_H) builtin-types.def builtin-attrs.def $(TARGET_H) \ ! diagnostic.h tree-inline.h ! # A file used by all variants of C and some other languages. ! ! attribs.o : attribs.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(OBSTACK_H) flags.h \ ! toplev.h output.h c-pragma.h $(RTL_H) $(GGC_H) $(EXPR_H) $(TM_P_H) \ ! builtin-types.def $(TARGET_H) ! ! c-format.o : c-format.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) \ $(C_COMMON_H) flags.h toplev.h intl.h diagnostic.h ! c-semantics.o : c-semantics.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) \ c-lex.h flags.h toplev.h output.h c-pragma.h $(RTL_H) $(GGC_H) \ $(EXPR_H) # Language-independent files. DRIVER_DEFINES = \ *************** DRIVER_DEFINES = \ *** 1334,1355 **** `test "X$${SHLIB_LINK}" = "X" || test "@enable_shared@" != "yes" || echo "-DENABLE_SHARED_LIBGCC"` \ `test "X$${SHLIB_MULTILIB}" = "X" || echo "-DNO_SHARED_LIBGCC_MULTILIB"` ! gcc.o: gcc.c $(CONFIG_H) system.h intl.h multilib.h \ ! Makefile $(lang_specs_files) prefix.h $(GCC_H) (SHLIB_LINK='$(SHLIB_LINK)' \ SHLIB_MULTILIB='$(SHLIB_MULTILIB)'; \ $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ $(DRIVER_DEFINES) \ ! -c $(srcdir)/gcc.c) ! gccspec.o: gccspec.c $(CONFIG_H) system.h $(GCC_H) (SHLIB_LINK='$(SHLIB_LINK)' \ SHLIB_MULTILIB='$(SHLIB_MULTILIB)'; \ $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ $(DRIVER_DEFINES) \ ! -c $(srcdir)/gccspec.c) ! cppspec.o: cppspec.c $(CONFIG_H) system.h $(GCC_H) tree-check.h: s-check ; @true s-check : gencheck$(build_exeext) $(srcdir)/move-if-change --- 1239,1260 ---- `test "X$${SHLIB_LINK}" = "X" || test "@enable_shared@" != "yes" || echo "-DENABLE_SHARED_LIBGCC"` \ `test "X$${SHLIB_MULTILIB}" = "X" || echo "-DNO_SHARED_LIBGCC_MULTILIB"` ! gcc.o: gcc.c $(CONFIG_H) $(SYSTEM_H) intl.h multilib.h \ ! Makefile $(lang_specs_files) specs.h prefix.h $(GCC_H) (SHLIB_LINK='$(SHLIB_LINK)' \ SHLIB_MULTILIB='$(SHLIB_MULTILIB)'; \ $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ $(DRIVER_DEFINES) \ ! -c $(srcdir)/gcc.c $(OUTPUT_OPTION)) ! gccspec.o: gccspec.c $(CONFIG_H) $(SYSTEM_H) $(GCC_H) (SHLIB_LINK='$(SHLIB_LINK)' \ SHLIB_MULTILIB='$(SHLIB_MULTILIB)'; \ $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ $(DRIVER_DEFINES) \ ! -c $(srcdir)/gccspec.c $(OUTPUT_OPTION)) ! cppspec.o: cppspec.c $(CONFIG_H) $(SYSTEM_H) $(GCC_H) tree-check.h: s-check ; @true s-check : gencheck$(build_exeext) $(srcdir)/move-if-change *************** gencheck$(build_exeext) : gencheck.o $(H *** 1361,1616 **** $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \ gencheck.o $(HOST_LIBS) ! gencheck.o : gencheck.c gencheck.h tree.def $(HCONFIG_H) hconfig.h system.h \ $(lang_tree_files) $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) \ ! $(srcdir)/gencheck.c dumpvers: dumpvers.c version.o: version.c version.h ! ggc-common.o: ggc-common.c $(CONFIG_H) $(RTL_H) $(TREE_H) \ ! flags.h $(GGC_H) varray.h hash.h $(TM_P_H) ! ggc-simple.o: ggc-simple.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h \ $(GGC_H) varray.h $(TIMEVAR_H) $(TM_P_H) ! ggc-page.o: ggc-page.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h toplev.h \ ! $(GGC_H) varray.h $(TIMEVAR_H) $(TM_P_H) ! stringpool.o: stringpool.c $(CONFIG_H) system.h $(TREE_H) $(OBSTACK_H) \ flags.h toplev.h ! ggc-none.o: ggc-none.c $(GCONFIG_H) $(GGC_H) ! $(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) ! obstack.o: $(srcdir)/../libiberty/obstack.c $(GCONFIG_H) ! rm -f obstack.c ! $(LN_S) $(srcdir)/../libiberty/obstack.c obstack.c ! $(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) \ ! obstack.c $(OUTPUT_OPTION) ! prefix.o: prefix.c $(CONFIG_H) system.h Makefile prefix.h $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ -DPREFIX=\"$(prefix)\" \ ! -c $(srcdir)/prefix.c ! convert.o: convert.c $(CONFIG_H) system.h $(TREE_H) flags.h convert.h toplev.h ! tree.o : tree.c $(CONFIG_H) system.h $(TREE_H) flags.h function.h toplev.h \ ! $(GGC_H) $(HASHTAB_H) output.h $(TM_P_H) ! print-tree.o : print-tree.c $(CONFIG_H) system.h $(TREE_H) $(GGC_H) ! stor-layout.o : stor-layout.c $(CONFIG_H) system.h $(TREE_H) flags.h \ ! function.h $(EXPR_H) $(RTL_H) toplev.h $(GGC_H) $(TM_P_H) ! fold-const.o : fold-const.c $(CONFIG_H) system.h $(TREE_H) flags.h toplev.h \ ! $(EXPR_H) $(RTL_H) $(GGC_H) $(TM_P_H) ! diagnostic.o : diagnostic.c diagnostic.h \ ! $(CONFIG_H) system.h $(TREE_H) $(RTL_H) $(TM_P_H) flags.h \ ! $(GGC_H) input.h $(INSN_ATTR_H) insn-config.h toplev.h intl.h ! toplev.o : toplev.c $(CONFIG_H) system.h $(TREE_H) $(RTL_H) function.h \ ! flags.h input.h $(INSN_ATTR_H) xcoffout.h output.h diagnostic.h \ ! insn-config.h intl.h $(RECOG_H) Makefile toplev.h dwarfout.h \ dwarf2out.h sdbout.h dbxout.h $(EXPR_H) hard-reg-set.h $(BASIC_BLOCK_H) \ graph.h $(LOOP_H) except.h $(REGS_H) $(TIMEVAR_H) $(lang_options_files) \ ! ssa.h $(PARAMS_H) $(TM_P_H) dwarf2asm.h ! $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(MAYBE_USE_COLLECT2) \ -DTARGET_NAME=\"$(target_alias)\" \ ! -c $(srcdir)/toplev.c ! rtl.o : rtl.c $(GCONFIG_H) system.h $(RTL_H) bitmap.h $(GGC_H) toplev.h $(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) ! print-rtl.o : print-rtl.c $(GCONFIG_H) system.h $(RTL_H) hard-reg-set.h \ ! $(BASIC_BLOCK_H) $(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) ! rtlanal.o : rtlanal.c $(CONFIG_H) system.h toplev.h $(RTL_H) hard-reg-set.h ! errors.o : errors.c $(GCONFIG_H) system.h errors.h $(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) ! varasm.o : varasm.c $(CONFIG_H) system.h $(TREE_H) $(RTL_H) flags.h \ ! function.h $(EXPR_H) hard-reg-set.h $(REGS_H) \ ! xcoffout.h output.h c-pragma.h toplev.h dbxout.h sdbout.h $(GGC_H) $(TM_P_H) ! function.o : function.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h \ ! function.h $(EXPR_H) $(REGS_H) hard-reg-set.h \ insn-config.h $(RECOG_H) output.h toplev.h except.h hash.h $(GGC_H) $(TM_P_H) ! stmt.o : stmt.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h function.h \ ! insn-config.h hard-reg-set.h $(EXPR_H) except.h \ $(LOOP_H) $(RECOG_H) toplev.h output.h varray.h $(GGC_H) $(TM_P_H) ! except.o : except.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h \ ! except.h function.h $(EXPR_H) integrate.h \ insn-config.h hard-reg-set.h $(BASIC_BLOCK_H) output.h \ dwarf2asm.h dwarf2out.h toplev.h $(HASHTAB_H) intl.h $(GGC_H) ! expr.o : expr.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h function.h \ ! $(REGS_H) $(EXPR_H) insn-config.h $(RECOG_H) \ ! output.h typeclass.h hard-reg-set.h toplev.h hard-reg-set.h except.h \ ! reload.h $(GGC_H) intl.h $(TM_P_H) ! builtins.o : builtins.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h \ ! function.h $(REGS_H) $(EXPR_H) insn-config.h \ $(RECOG_H) output.h typeclass.h hard-reg-set.h toplev.h hard-reg-set.h \ ! except.h $(TM_P_H) ! calls.o : calls.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h $(EXPR_H) \ ! $(REGS_H) toplev.h output.h function.h $(TIMEVAR_H) $(TM_P_H) ! expmed.o : expmed.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h \ ! insn-config.h $(EXPR_H) $(RECOG_H) real.h \ toplev.h $(TM_P_H) ! explow.o : explow.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h \ ! hard-reg-set.h insn-config.h $(EXPR_H) $(RECOG_H) \ ! toplev.h function.h $(TM_P_H) ! optabs.o : optabs.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h \ ! insn-config.h $(EXPR_H) $(RECOG_H) reload.h \ ! toplev.h $(GGC_H) real.h $(TM_P_H) ! dbxout.o : dbxout.c $(CONFIG_H) system.h $(TREE_H) $(RTL_H) flags.h $(REGS_H) \ ! insn-config.h reload.h gstab.h xcoffout.h output.h dbxout.h toplev.h \ ! $(TM_P_H) ! sdbout.o : sdbout.c $(CONFIG_H) system.h $(TREE_H) $(RTL_H) flags.h except.h \ function.h $(EXPR_H) output.h hard-reg-set.h $(REGS_H) real.h \ insn-config.h $(OBSTACK_H) xcoffout.h c-pragma.h ggc.h \ ! sdbout.h toplev.h $(TM_P_H) ! dwarfout.o : dwarfout.c $(CONFIG_H) system.h $(TREE_H) $(RTL_H) dwarf.h \ ! flags.h insn-config.h reload.h output.h toplev.h dwarfout.h $(TM_P_H) ! dwarf2out.o : dwarf2out.c $(CONFIG_H) system.h $(TREE_H) $(RTL_H) dwarf2.h \ ! flags.h insn-config.h reload.h output.h \ ! hard-reg-set.h $(REGS_H) $(EXPR_H) toplev.h dwarf2out.h varray.h \ ! $(GGC_H) except.h dwarf2asm.h $(TM_P_H) ! dwarf2asm.o : dwarf2asm.c $(CONFIG_H) $(SYSTEM_H) flags.h $(TREE_H) $(RTL_H) \ output.h dwarf2asm.h $(TM_P_H) ! xcoffout.o : xcoffout.c $(CONFIG_H) system.h $(TREE_H) $(RTL_H) xcoffout.h \ ! flags.h toplev.h output.h dbxout.h $(GGC_H) $(TM_P_H) ! emit-rtl.o : emit-rtl.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h \ function.h $(REGS_H) insn-config.h $(RECOG_H) real.h $(GGC_H) \ $(EXPR_H) $(srcdir)/../include/obstack.h hard-reg-set.h bitmap.h toplev.h \ ! $(HASHTAB_H) $(TM_P_H) ! real.o : real.c $(CONFIG_H) system.h $(TREE_H) toplev.h $(TM_P_H) ! integrate.o : integrate.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h \ ! $(INTEGRATE_H) insn-config.h $(EXPR_H) real.h $(REGS_H) \ intl.h function.h output.h $(RECOG_H) except.h toplev.h $(LOOP_H) \ ! $(PARAMS_H) $(TM_P_H) ! jump.o : jump.c $(CONFIG_H) system.h $(RTL_H) flags.h hard-reg-set.h $(REGS_H) \ insn-config.h $(RECOG_H) $(EXPR_H) real.h except.h function.h \ ! toplev.h $(INSN_ATTR_H) $(TM_P_H) ! simplify-rtx.o : simplify-rtx.c $(CONFIG_H) system.h $(RTL_H) $(REGS_H) \ hard-reg-set.h flags.h real.h insn-config.h $(RECOG_H) $(EXPR_H) toplev.h \ output.h function.h cselib.h $(GGC_H) $(OBSTACK_H) $(TM_P_H) ! cse.o : cse.c $(CONFIG_H) system.h $(RTL_H) $(REGS_H) hard-reg-set.h flags.h \ real.h insn-config.h $(RECOG_H) $(EXPR_H) toplev.h output.h function.h \ $(BASIC_BLOCK_H) $(GGC_H) $(TM_P_H) ! gcse.o : gcse.c $(CONFIG_H) system.h $(RTL_H) $(REGS_H) hard-reg-set.h \ ! flags.h real.h insn-config.h $(RECOG_H) $(EXPR_H) $(BASIC_BLOCK_H) \ ! function.h output.h toplev.h $(PARAMS_H) $(TM_P_H) ! sibcall.o : sibcall.c $(CONFIG_H) system.h $(RTL_H) $(REGS_H) function.h \ hard-reg-set.h flags.h insn-config.h $(RECOG_H) $(BASIC_BLOCK_H) ! resource.o : resource.c $(CONFIG_H) $(RTL_H) hard-reg-set.h system.h \ $(BASIC_BLOCK_H) $(REGS_H) flags.h output.h resource.h function.h toplev.h \ $(INSN_ATTR_H) except.h $(PARAMS_H) $(TM_P_H) ! lcm.o : lcm.c $(CONFIG_H) system.h $(RTL_H) $(REGS_H) hard-reg-set.h flags.h \ real.h insn-config.h $(INSN_ATTR_H) $(RECOG_H) $(EXPR_H) $(BASIC_BLOCK_H) \ ! $(TM_P_H) ! ssa.o : ssa.c $(CONFIG_H) system.h $(REGS_H) varray.h \ hard-reg-set.h flags.h function.h real.h insn-config.h $(RECOG_H) \ $(BASIC_BLOCK_H) output.h ssa.h ! dce.o : dce.c $(CONFIG_H) system.h $(RTL_H) hard-reg-set.h $(BASIC_BLOCK_H) \ ! ssa.h insn-config.h $(RECOG_H) output.h ! conflict.o : conflict.c $(CONFIG_H) system.h $(OBSTACK_H) $(HASHTAB_H) \ $(RTL_H) hard-reg-set.h $(BASIC_BLOCK_H) ! profile.o : profile.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h \ insn-config.h output.h $(REGS_H) $(EXPR_H) function.h \ ! gcov-io.h toplev.h $(GGC_H) hard-reg-set.h $(BASIC_BLOCK_H) ! loop.o : loop.c $(CONFIG_H) system.h $(RTL_H) flags.h $(LOOP_H) insn-config.h \ ! $(REGS_H) hard-reg-set.h $(RECOG_H) $(EXPR_H) real.h \ ! $(BASIC_BLOCK_H) function.h toplev.h varray.h except.h cselib.h $(TM_P_H) ! doloop.o : doloop.c $(CONFIG_H) system.h $(RTL_H) flags.h $(LOOP_H) \ ! $(EXPR_H) hard-reg-set.h $(BASIC_BLOCK_H) $(TM_P_H) ! unroll.o : unroll.c $(CONFIG_H) system.h $(RTL_H) insn-config.h function.h \ $(INTEGRATE_H) $(REGS_H) $(RECOG_H) flags.h $(EXPR_H) $(LOOP_H) toplev.h \ ! hard-reg-set.h varray.h $(BASIC_BLOCK_H) $(TM_P_H) ! flow.o : flow.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h insn-config.h \ $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h $(RECOG_H) \ function.h except.h $(EXPR_H) ssa.h $(GGC_H) $(TM_P_H) ! dominance.o : dominance.c $(CONFIG_H) system.h $(RTL_H) hard-reg-set.h \ $(BASIC_BLOCK_H) ! combine.o : combine.c $(CONFIG_H) system.h $(RTL_H) flags.h function.h \ insn-config.h $(INSN_ATTR_H) $(REGS_H) $(EXPR_H) \ $(BASIC_BLOCK_H) $(RECOG_H) real.h hard-reg-set.h toplev.h $(TM_P_H) ! regclass.o : regclass.c $(CONFIG_H) system.h $(RTL_H) hard-reg-set.h flags.h \ $(BASIC_BLOCK_H) $(REGS_H) insn-config.h $(RECOG_H) reload.h real.h \ ! toplev.h function.h output.h $(GGC_H) $(TM_P_H) ! local-alloc.o : local-alloc.c $(CONFIG_H) system.h $(RTL_H) flags.h \ $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h insn-config.h $(RECOG_H) \ ! output.h function.h $(INSN_ATTR_H) toplev.h $(TM_P_H) ! bitmap.o : bitmap.c $(GCONFIG_H) system.h $(RTL_H) flags.h $(BASIC_BLOCK_H) \ $(REGS_H) $(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) ! global.o : global.c $(CONFIG_H) system.h $(RTL_H) flags.h reload.h function.h \ $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h insn-config.h output.h toplev.h \ $(TM_P_H) ! varray.o : varray.c $(CONFIG_H) system.h varray.h $(RTL_H) $(TREE_H) bitmap.h ! reload.o : reload.c $(CONFIG_H) system.h $(RTL_H) flags.h output.h $(EXPR_H) \ ! reload.h $(RECOG_H) hard-reg-set.h insn-config.h $(REGS_H) \ ! function.h real.h toplev.h $(TM_P_H) ! reload1.o : reload1.c $(CONFIG_H) system.h $(RTL_H) real.h flags.h $(EXPR_H) \ ! reload.h $(REGS_H) hard-reg-set.h insn-config.h \ ! $(BASIC_BLOCK_H) $(RECOG_H) output.h function.h toplev.h cselib.h $(TM_P_H) ! caller-save.o : caller-save.c $(CONFIG_H) system.h $(RTL_H) flags.h \ $(REGS_H) hard-reg-set.h insn-config.h $(BASIC_BLOCK_H) function.h \ $(RECOG_H) reload.h $(EXPR_H) toplev.h $(TM_P_H) ! reorg.o : reorg.c $(CONFIG_H) system.h $(RTL_H) conditions.h hard-reg-set.h \ ! $(BASIC_BLOCK_H) $(REGS_H) insn-config.h $(INSN_ATTR_H) \ $(RECOG_H) function.h flags.h output.h $(EXPR_H) toplev.h $(PARAMS_H) $(TM_P_H) ! alias.o : alias.c $(CONFIG_H) system.h $(RTL_H) flags.h hard-reg-set.h \ $(BASIC_BLOCK_H) $(REGS_H) toplev.h output.h $(EXPR_H) \ ! $(GGC_H) function.h cselib.h $(TREE_H) $(TM_P_H) ! regmove.o : regmove.c $(CONFIG_H) system.h $(RTL_H) insn-config.h \ $(RECOG_H) output.h $(REGS_H) hard-reg-set.h flags.h function.h \ ! $(EXPR_H) $(BASIC_BLOCK_H) toplev.h $(TM_P_H) except.h ! haifa-sched.o : haifa-sched.c $(CONFIG_H) system.h $(RTL_H) sched-int.h \ $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h flags.h insn-config.h function.h \ ! $(INSN_ATTR_H) toplev.h $(RECOG_H) except.h $(TM_P_H) ! sched-deps.o : sched-deps.c $(CONFIG_H) system.h $(RTL_H) sched-int.h \ $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h flags.h insn-config.h function.h \ ! $(INSN_ATTR_H) toplev.h $(RECOG_H) except.h $(TM_P_H) ! sched-rgn.o : sched-rgn.c $(CONFIG_H) system.h $(RTL_H) sched-int.h \ $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h flags.h insn-config.h function.h \ $(INSN_ATTR_H) toplev.h $(RECOG_H) except.h $(TM_P_H) ! sched-ebb.o : sched-ebb.c $(CONFIG_H) system.h $(RTL_H) sched-int.h \ $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h flags.h insn-config.h function.h \ $(INSN_ATTR_H) toplev.h $(RECOG_H) except.h $(TM_P_H) ! sched-vis.o : sched-vis.c $(CONFIG_H) system.h $(RTL_H) sched-int.h \ hard-reg-set.h $(BASIC_BLOCK_H) $(INSN_ATTR_H) $(REGS_H) $(TM_P_H) ! final.o : final.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h intl.h \ $(REGS_H) $(RECOG_H) conditions.h insn-config.h $(INSN_ATTR_H) function.h \ ! real.h output.h hard-reg-set.h gstab.h except.h \ ! xcoffout.h toplev.h reload.h dwarfout.h dwarf2out.h sdbout.h \ ! dbxout.h $(BASIC_BLOCK_H) $(TM_P_H) ! recog.o : recog.c $(CONFIG_H) system.h $(RTL_H) function.h $(BASIC_BLOCK_H) \ ! $(REGS_H) $(RECOG_H) hard-reg-set.h flags.h insn-config.h $(INSN_ATTR_H) \ ! real.h toplev.h output.h reload.h $(TM_P_H) ! reg-stack.o : reg-stack.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) $(RECOG_H) \ ! $(REGS_H) hard-reg-set.h flags.h insn-config.h toplev.h \ varray.h function.h $(TM_P_H) ! predict.o: predict.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h \ ! insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h \ ! $(RECOG_H) function.h except.h $(EXPR_H) $(TM_P_H) ! lists.o: lists.c $(CONFIG_H) system.h toplev.h $(RTL_H) $(GGC_H) ! bb-reorder.o : bb-reorder.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h \ insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h \ ! $(RECOG_H) function.h except.h $(EXPR_H) $(TM_P_H) ! timevar.o : timevar.c $(CONFIG_H) system.h $(TIMEVAR_H) flags.h intl.h ! regrename.o : regrename.c $(CONFIG_H) system.h $(RTL_H) insn-config.h \ $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h $(RECOG_H) function.h \ resource.h $(OBSTACK_H) flags.h $(TM_P_H) ! ifcvt.o : ifcvt.c $(CONFIG_H) system.h $(RTL_H) $(REGS_H) \ flags.h insn-config.h function.h $(RECOG_H) $(BASIC_BLOCK_H) $(EXPR_H) \ ! output.h $(TM_P_H) ! dependence.o : dependence.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) \ $(C_COMMON_H) flags.h varray.h $(EXPR_H) ! params.o : params.c $(CONFIG_H) system.h $(PARAMS_H) toplev.h $(out_object_file): $(out_file) $(CONFIG_H) $(TREE_H) $(GGC_H) \ $(RTL_H) $(REGS_H) hard-reg-set.h real.h insn-config.h conditions.h \ ! output.h $(INSN_ATTR_H) system.h toplev.h \ ! function.h sched-int.h $(TM_P_H) $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ $(out_file) $(OUTPUT_OPTION) --- 1266,1596 ---- $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \ gencheck.o $(HOST_LIBS) ! gencheck.o : gencheck.c gencheck.h tree.def $(HCONFIG_H) $(SYSTEM_H) \ $(lang_tree_files) $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) \ ! $(srcdir)/gencheck.c $(OUTPUT_OPTION) ! ! gencheck.h : s-gencheck ; @true ! s-gencheck : Makefile ! ltf="$(lang_tree_files)"; for f in $$ltf; do \ ! echo "#include \"$$f\""; \ ! done | sed 's|$(srcdir)/||' > tmp-gencheck.h ! $(SHELL) $(srcdir)/move-if-change tmp-gencheck.h gencheck.h ! $(STAMP) s-gencheck ! ! options.h : s-options ; @true ! s-options : Makefile ! lof="$(lang_options_files)"; for f in $$lof; do \ ! echo "#include \"$$f\""; \ ! done | sed 's|$(srcdir)/||' > tmp-options.h ! $(SHELL) $(srcdir)/move-if-change tmp-options.h options.h ! $(STAMP) s-options ! ! specs.h : s-specs ; @true ! s-specs : Makefile ! lsf="$(lang_specs_files)"; for f in $$lsf; do \ ! echo "#include \"$$f\""; \ ! done | sed 's|$(srcdir)/||' > tmp-specs.h ! $(SHELL) $(srcdir)/move-if-change tmp-specs.h specs.h ! $(STAMP) s-specs dumpvers: dumpvers.c version.o: version.c version.h ! ggc-common.o: ggc-common.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) \ ! flags.h $(GGC_H) varray.h hash.h $(HASHTAB_H) $(TM_P_H) ! ggc-simple.o: ggc-simple.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \ $(GGC_H) varray.h $(TIMEVAR_H) $(TM_P_H) ! ggc-page.o: ggc-page.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \ ! toplev.h $(GGC_H) varray.h $(TIMEVAR_H) $(TM_P_H) ! stringpool.o: stringpool.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(OBSTACK_H) \ flags.h toplev.h ! hashtable.o: hashtable.c hashtable.h $(CONFIG_H) $(SYSTEM_H) $(OBSTACK_H) ! line-map.o: line-map.c line-map.h intl.h $(CONFIG_H) $(SYSTEM_H) ! ggc-none.o: ggc-none.c $(GCONFIG_H) $(SYSTEM_H) $(GGC_H) ! $(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) ! ! prefix.o: prefix.c $(CONFIG_H) $(SYSTEM_H) Makefile prefix.h $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ -DPREFIX=\"$(prefix)\" \ ! -c $(srcdir)/prefix.c $(OUTPUT_OPTION) ! convert.o: convert.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) flags.h convert.h toplev.h ! langhooks.o : langhooks.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) toplev.h \ ! tree-inline.h $(RTL_H) insn-config.h integrate.h langhooks.h \ ! langhooks-def.h flags.h ! tree.o : tree.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) flags.h function.h toplev.h \ ! $(GGC_H) $(HASHTAB_H) $(TARGET_H) output.h $(TM_P_H) langhooks.h ! tree-dump.o: tree-dump.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) \ ! flags.h langhooks.h toplev.h output.h c-pragma.h $(RTL_H) $(GGC_H) \ ! $(EXPR_H) $(SPLAY_TREE_H) tree-dump.h ! tree-inline.o : tree-inline.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) \ ! expr.h flags.h params.h input.h insn-config.h $(INTEGRATE_H) \ ! $(VARRAY_H) $(HASHTAB_H) $(SPLAY_TREE_H) toplev.h langhooks.h \ ! $(C_COMMON_H) tree-inline.h ! print-tree.o : print-tree.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(GGC_H) \ ! langhooks.h ! stor-layout.o : stor-layout.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) flags.h \ ! function.h $(EXPR_H) $(RTL_H) toplev.h $(GGC_H) $(TM_P_H) $(TARGET_H) ! fold-const.o : fold-const.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) flags.h \ ! toplev.h $(HASHTAB_H) $(EXPR_H) $(RTL_H) $(GGC_H) $(TM_P_H) ! diagnostic.o : diagnostic.c diagnostic.h real.h diagnostic.def \ ! $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(TM_P_H) flags.h $(GGC_H) \ ! input.h toplev.h intl.h ! toplev.o : toplev.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) function.h \ ! flags.h xcoffout.h input.h $(INSN_ATTR_H) output.h diagnostic.h \ ! debug.h insn-config.h intl.h $(RECOG_H) Makefile toplev.h \ dwarf2out.h sdbout.h dbxout.h $(EXPR_H) hard-reg-set.h $(BASIC_BLOCK_H) \ graph.h $(LOOP_H) except.h $(REGS_H) $(TIMEVAR_H) $(lang_options_files) \ ! ssa.h $(PARAMS_H) $(TM_P_H) reload.h dwarf2asm.h $(TARGET_H) halfpic.h \ ! langhooks.h insn-flags.h options.h ! $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ -DTARGET_NAME=\"$(target_alias)\" \ ! -c $(srcdir)/toplev.c $(OUTPUT_OPTION) ! main.o : main.c $(CONFIG_H) $(SYSTEM_H) toplev.h ! rtl-error.o: rtl-error.c system.h $(RTL_H) $(INSN_ATTR_H) insn-config.h \ ! input.h toplev.h intl.h diagnostic.h $(CONFIG_H) ! ! rtl.o : rtl.c $(GCONFIG_H) $(SYSTEM_H) $(RTL_H) real.h $(GGC_H) errors.h $(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) ! print-rtl.o : print-rtl.c $(GCONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) \ ! hard-reg-set.h $(BASIC_BLOCK_H) $(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) ! ! rtlanal.o : rtlanal.c $(CONFIG_H) $(SYSTEM_H) toplev.h $(RTL_H) hard-reg-set.h $(TM_P_H) ! errors.o : errors.c $(GCONFIG_H) $(SYSTEM_H) errors.h $(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) ! varasm.o : varasm.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) flags.h \ ! function.h $(EXPR_H) hard-reg-set.h $(REGS_H) $(OBSTACK_H) \ ! output.h c-pragma.h toplev.h xcoffout.h debug.h $(GGC_H) $(TM_P_H) \ ! $(HASHTAB_H) $(TARGET_H) langhooks.h ! function.o : function.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \ ! function.h $(EXPR_H) libfuncs.h $(REGS_H) hard-reg-set.h \ insn-config.h $(RECOG_H) output.h toplev.h except.h hash.h $(GGC_H) $(TM_P_H) ! stmt.o : stmt.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h function.h \ ! insn-config.h hard-reg-set.h $(EXPR_H) libfuncs.h except.h \ $(LOOP_H) $(RECOG_H) toplev.h output.h varray.h $(GGC_H) $(TM_P_H) ! except.o : except.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \ ! except.h function.h $(EXPR_H) libfuncs.h integrate.h \ insn-config.h hard-reg-set.h $(BASIC_BLOCK_H) output.h \ dwarf2asm.h dwarf2out.h toplev.h $(HASHTAB_H) intl.h $(GGC_H) ! expr.o : expr.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h function.h \ ! $(REGS_H) $(EXPR_H) $(OPTABS_H) libfuncs.h insn-attr.h insn-config.h \ $(RECOG_H) output.h typeclass.h hard-reg-set.h toplev.h hard-reg-set.h \ ! except.h reload.h $(GGC_H) langhooks.h intl.h $(TM_P_H) ! builtins.o : builtins.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \ ! $(TARGET_H) function.h $(REGS_H) $(EXPR_H) $(OPTABS_H) insn-config.h \ ! $(RECOG_H) output.h typeclass.h hard-reg-set.h toplev.h hard-reg-set.h \ ! except.h $(TM_P_H) $(PREDICT_H) libfuncs.h ! calls.o : calls.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h $(EXPR_H) \ ! libfuncs.h $(REGS_H) toplev.h output.h function.h $(TIMEVAR_H) $(TM_P_H) ! expmed.o : expmed.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \ ! insn-config.h $(EXPR_H) $(OPTABS_H) $(RECOG_H) real.h \ toplev.h $(TM_P_H) ! explow.o : explow.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \ ! hard-reg-set.h insn-config.h $(EXPR_H) $(OPTABS_H) $(RECOG_H) \ ! toplev.h function.h ggc.h $(TM_P_H) ! optabs.o : optabs.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \ ! insn-config.h $(EXPR_H) $(OPTABS_H) libfuncs.h $(RECOG_H) reload.h \ ! toplev.h $(GGC_H) real.h $(TM_P_H) except.h ! dbxout.o : dbxout.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) flags.h \ ! $(REGS_H) debug.h $(TM_P_H) $(TARGET_H) function.h langhooks.h \ ! insn-config.h reload.h gstab.h xcoffout.h output.h dbxout.h toplev.h ! debug.o : debug.c $(CONFIG_H) $(SYSTEM_H) ! sdbout.o : sdbout.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) flags.h \ function.h $(EXPR_H) output.h hard-reg-set.h $(REGS_H) real.h \ insn-config.h $(OBSTACK_H) xcoffout.h c-pragma.h ggc.h \ ! sdbout.h toplev.h $(TM_P_H) except.h debug.h ! dwarfout.o : dwarfout.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) dwarf.h \ ! flags.h insn-config.h reload.h output.h toplev.h $(TM_P_H) \ ! debug.h langhooks.h ! dwarf2out.o : dwarf2out.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) dwarf2.h \ ! debug.h flags.h insn-config.h reload.h output.h diagnostic.h \ ! hard-reg-set.h $(REGS_H) $(EXPR_H) libfuncs.h toplev.h dwarf2out.h varray.h \ ! $(GGC_H) except.h dwarf2asm.h $(TM_P_H) langhooks.h ! dwarf2asm.o : dwarf2asm.c $(CONFIG_H) $(SYSTEM_H) flags.h $(RTL_H) $(TREE_H) \ output.h dwarf2asm.h $(TM_P_H) ! vmsdbgout.o : vmsdbgout.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) flags.h \ ! output.h vmsdbg.h debug.h langhooks.h ! xcoffout.o : xcoffout.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) xcoffout.h \ ! flags.h toplev.h output.h dbxout.h $(GGC_H) ! emit-rtl.o : emit-rtl.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \ function.h $(REGS_H) insn-config.h $(RECOG_H) real.h $(GGC_H) \ $(EXPR_H) $(srcdir)/../include/obstack.h hard-reg-set.h bitmap.h toplev.h \ ! $(HASHTAB_H) $(TM_P_H) debug.h langhooks.h ! real.o : real.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) toplev.h $(TM_P_H) ! integrate.o : integrate.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \ ! debug.h $(INTEGRATE_H) insn-config.h $(EXPR_H) real.h $(REGS_H) \ intl.h function.h output.h $(RECOG_H) except.h toplev.h $(LOOP_H) \ ! $(PARAMS_H) $(TM_P_H) $(TARGET_H) ! jump.o : jump.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h hard-reg-set.h $(REGS_H) \ insn-config.h $(RECOG_H) $(EXPR_H) real.h except.h function.h \ ! toplev.h $(INSN_ATTR_H) $(TM_P_H) reload.h $(PREDICT_H) ! simplify-rtx.o : simplify-rtx.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(REGS_H) \ ! hard-reg-set.h flags.h real.h insn-config.h $(RECOG_H) $(EXPR_H) toplev.h \ ! output.h function.h $(GGC_H) $(OBSTACK_H) $(TM_P_H) ! cselib.o : cselib.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(REGS_H) \ hard-reg-set.h flags.h real.h insn-config.h $(RECOG_H) $(EXPR_H) toplev.h \ output.h function.h cselib.h $(GGC_H) $(OBSTACK_H) $(TM_P_H) ! cse.o : cse.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(REGS_H) hard-reg-set.h flags.h \ real.h insn-config.h $(RECOG_H) $(EXPR_H) toplev.h output.h function.h \ $(BASIC_BLOCK_H) $(GGC_H) $(TM_P_H) ! gcse.o : gcse.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(REGS_H) hard-reg-set.h \ ! flags.h real.h insn-config.h ggc.h $(RECOG_H) $(EXPR_H) $(BASIC_BLOCK_H) \ ! function.h output.h toplev.h $(TM_P_H) $(PARAMS_H) except.h ! sibcall.o : sibcall.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(REGS_H) function.h \ hard-reg-set.h flags.h insn-config.h $(RECOG_H) $(BASIC_BLOCK_H) ! resource.o : resource.c $(CONFIG_H) $(RTL_H) hard-reg-set.h $(SYSTEM_H) \ $(BASIC_BLOCK_H) $(REGS_H) flags.h output.h resource.h function.h toplev.h \ $(INSN_ATTR_H) except.h $(PARAMS_H) $(TM_P_H) ! lcm.o : lcm.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(REGS_H) hard-reg-set.h flags.h \ real.h insn-config.h $(INSN_ATTR_H) $(RECOG_H) $(EXPR_H) $(BASIC_BLOCK_H) \ ! $(TM_P_H) df.h ! ssa.o : ssa.c $(CONFIG_H) $(SYSTEM_H) $(REGS_H) varray.h $(EXPR_H) \ hard-reg-set.h flags.h function.h real.h insn-config.h $(RECOG_H) \ $(BASIC_BLOCK_H) output.h ssa.h ! ssa-dce.o : ssa-dce.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) hard-reg-set.h \ ! $(BASIC_BLOCK_H) ssa.h insn-config.h $(RECOG_H) output.h ! ssa-ccp.o : ssa-ccp.c $(CONFIG_H) system.h $(RTL_H) hard-reg-set.h \ ! $(BASIC_BLOCK_H) ssa.h insn-config.h $(RECOG_H) output.h \ ! errors.h $(GGC_H) df.h function.h ! df.o : df.c $(CONFIG_H) system.h $(RTL_H) insn-config.h $(RECOG_H) \ ! function.h $(REGS_H) $(OBSTACK_H) hard-reg-set.h $(BASIC_BLOCK_H) df.h \ ! $(FIBHEAP_H) ! conflict.o : conflict.c $(CONFIG_H) $(SYSTEM_H) $(OBSTACK_H) $(HASHTAB_H) \ $(RTL_H) hard-reg-set.h $(BASIC_BLOCK_H) ! profile.o : profile.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \ insn-config.h output.h $(REGS_H) $(EXPR_H) function.h \ ! gcov-io.h toplev.h $(GGC_H) hard-reg-set.h $(BASIC_BLOCK_H) $(TARGET_H) ! loop.o : loop.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h $(LOOP_H) \ ! insn-config.h $(REGS_H) hard-reg-set.h $(RECOG_H) $(EXPR_H) \ ! real.h $(PREDICT_H) $(BASIC_BLOCK_H) function.h \ ! toplev.h varray.h except.h cselib.h $(OPTABS_H) $(TM_P_H) ! doloop.o : doloop.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h $(LOOP_H) \ ! $(EXPR_H) hard-reg-set.h $(BASIC_BLOCK_H) $(TM_P_H) toplev.h ! unroll.o : unroll.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) insn-config.h function.h \ $(INTEGRATE_H) $(REGS_H) $(RECOG_H) flags.h $(EXPR_H) $(LOOP_H) toplev.h \ ! hard-reg-set.h varray.h $(BASIC_BLOCK_H) $(TM_P_H) $(PREDICT_H) ! flow.o : flow.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h insn-config.h \ $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h $(RECOG_H) \ function.h except.h $(EXPR_H) ssa.h $(GGC_H) $(TM_P_H) ! cfg.o : cfg.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h insn-config.h \ ! $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h $(RECOG_H) \ ! function.h except.h $(GGC_H) $(TM_P_H) ! cfgrtl.o : cfgrtl.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h insn-config.h \ ! $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h $(RECOG_H) \ ! function.h except.h $(GGC_H) $(TM_P_H) ! cfganal.o : cfganal.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(BASIC_BLOCK_H) \ ! hard-reg-set.h insn-config.h $(RECOG_H) $(GGC_H) $(TM_P_H) ! cfgbuild.o : cfgbuild.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h insn-config.h \ ! $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h $(RECOG_H) \ ! function.h except.h $(GGC_H) ! cfgcleanup.o : cfgcleanup.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TIMEVAR_H)\ ! $(BASIC_BLOCK_H) hard-reg-set.h output.h flags.h $(RECOG_H) toplev.h \ ! $(GGC_H) insn-config.h cselib.h $(TARGET_H) $(TM_P_H) ! cfgloop.o : cfgloop.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) \ ! $(BASIC_BLOCK_H) hard-reg-set.h ! dominance.o : dominance.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) hard-reg-set.h \ $(BASIC_BLOCK_H) ! combine.o : combine.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h function.h \ insn-config.h $(INSN_ATTR_H) $(REGS_H) $(EXPR_H) \ $(BASIC_BLOCK_H) $(RECOG_H) real.h hard-reg-set.h toplev.h $(TM_P_H) ! regclass.o : regclass.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) hard-reg-set.h flags.h \ $(BASIC_BLOCK_H) $(REGS_H) insn-config.h $(RECOG_H) reload.h real.h \ ! toplev.h function.h output.h $(GGC_H) $(TM_P_H) $(EXPR_H) ! local-alloc.o : local-alloc.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h \ $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h insn-config.h $(RECOG_H) \ ! output.h function.h $(INSN_ATTR_H) toplev.h except.h $(TM_P_H) ! bitmap.o : bitmap.c $(GCONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h $(BASIC_BLOCK_H) \ $(REGS_H) $(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) ! global.o : global.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h reload.h function.h \ $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h insn-config.h output.h toplev.h \ $(TM_P_H) ! varray.o : varray.c $(CONFIG_H) $(SYSTEM_H) varray.h $(RTL_H) $(TREE_H) bitmap.h \ ! errors.h ! reload.o : reload.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h output.h \ ! $(EXPR_H) $(OPTABS_H) reload.h $(RECOG_H) hard-reg-set.h insn-config.h \ ! $(REGS_H) function.h real.h toplev.h $(TM_P_H) ! reload1.o : reload1.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) real.h flags.h \ ! $(EXPR_H) $(OPTABS_H) reload.h $(REGS_H) hard-reg-set.h insn-config.h \ ! $(BASIC_BLOCK_H) $(RECOG_H) output.h function.h toplev.h cselib.h $(TM_P_H) \ ! except.h $(TREE_H) ! caller-save.o : caller-save.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h \ $(REGS_H) hard-reg-set.h insn-config.h $(BASIC_BLOCK_H) function.h \ $(RECOG_H) reload.h $(EXPR_H) toplev.h $(TM_P_H) ! reorg.o : reorg.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) conditions.h hard-reg-set.h \ ! $(BASIC_BLOCK_H) $(REGS_H) insn-config.h $(INSN_ATTR_H) except.h \ $(RECOG_H) function.h flags.h output.h $(EXPR_H) toplev.h $(PARAMS_H) $(TM_P_H) ! alias.o : alias.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h hard-reg-set.h \ $(BASIC_BLOCK_H) $(REGS_H) toplev.h output.h $(EXPR_H) \ ! $(GGC_H) function.h cselib.h $(TREE_H) $(TM_P_H) langhooks.h ! regmove.o : regmove.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) insn-config.h \ $(RECOG_H) output.h $(REGS_H) hard-reg-set.h flags.h function.h \ ! $(EXPR_H) $(BASIC_BLOCK_H) toplev.h $(TM_P_H) except.h reload.h ! haifa-sched.o : haifa-sched.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) sched-int.h \ $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h flags.h insn-config.h function.h \ ! $(INSN_ATTR_H) toplev.h $(RECOG_H) except.h $(TM_P_H) $(TARGET_H) ! sched-deps.o : sched-deps.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) sched-int.h \ $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h flags.h insn-config.h function.h \ ! $(INSN_ATTR_H) toplev.h $(RECOG_H) except.h cselib.h $(PARAMS_H) $(TM_P_H) ! sched-rgn.o : sched-rgn.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) sched-int.h \ $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h flags.h insn-config.h function.h \ $(INSN_ATTR_H) toplev.h $(RECOG_H) except.h $(TM_P_H) ! sched-ebb.o : sched-ebb.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) sched-int.h \ $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h flags.h insn-config.h function.h \ $(INSN_ATTR_H) toplev.h $(RECOG_H) except.h $(TM_P_H) ! sched-vis.o : sched-vis.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) sched-int.h \ hard-reg-set.h $(BASIC_BLOCK_H) $(INSN_ATTR_H) $(REGS_H) $(TM_P_H) ! final.o : final.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h intl.h \ $(REGS_H) $(RECOG_H) conditions.h insn-config.h $(INSN_ATTR_H) function.h \ ! real.h output.h hard-reg-set.h except.h debug.h xcoffout.h \ ! toplev.h reload.h dwarf2out.h $(BASIC_BLOCK_H) $(TM_P_H) $(TARGET_H) $(EXPR_H) ! recog.o : recog.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) function.h $(BASIC_BLOCK_H) \ ! $(REGS_H) $(RECOG_H) $(EXPR_H) hard-reg-set.h flags.h insn-config.h \ ! $(INSN_ATTR_H) real.h toplev.h output.h reload.h $(TM_P_H) ! reg-stack.o : reg-stack.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) $(RECOG_H) \ ! $(REGS_H) hard-reg-set.h flags.h insn-config.h toplev.h reload.h \ varray.h function.h $(TM_P_H) ! predict.o: predict.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \ insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h \ ! $(RECOG_H) function.h except.h $(EXPR_H) $(TM_P_H) $(PREDICT_H) ! lists.o: lists.c $(CONFIG_H) $(SYSTEM_H) toplev.h $(RTL_H) $(GGC_H) ! bb-reorder.o : bb-reorder.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) \ ! flags.h $(BASIC_BLOCK_H) hard-reg-set.h output.h cfglayout.h $(TARGET_H) ! cfglayout.o : cfglayout.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) \ ! insn-config.h $(BASIC_BLOCK_H) hard-reg-set.h output.h function.h \ ! cfglayout.h ! timevar.o : timevar.c $(CONFIG_H) $(SYSTEM_H) $(TIMEVAR_H) flags.h intl.h ! regrename.o : regrename.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) insn-config.h \ $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h $(RECOG_H) function.h \ resource.h $(OBSTACK_H) flags.h $(TM_P_H) ! ifcvt.o : ifcvt.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(REGS_H) toplev.h \ flags.h insn-config.h function.h $(RECOG_H) $(BASIC_BLOCK_H) $(EXPR_H) \ ! output.h except.h $(TM_P_H) ! dependence.o : dependence.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) \ $(C_COMMON_H) flags.h varray.h $(EXPR_H) ! params.o : params.c $(CONFIG_H) $(SYSTEM_H) $(PARAMS_H) toplev.h ! hooks.o: hooks.c $(CONFIG_H) $(SYSTEM_H) $(HOOKS_H) $(out_object_file): $(out_file) $(CONFIG_H) $(TREE_H) $(GGC_H) \ $(RTL_H) $(REGS_H) hard-reg-set.h real.h insn-config.h conditions.h \ ! output.h $(INSN_ATTR_H) $(SYSTEM_H) toplev.h $(TARGET_H) libfuncs.h \ ! $(TARGET_DEF_H) function.h sched-int.h $(TM_P_H) $(EXPR_H) $(OPTABS_H) \ ! langhooks.h $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ $(out_file) $(OUTPUT_OPTION) *************** $(out_object_file): $(out_file) $(CONFIG *** 1618,1646 **** mips-tfile: mips-tfile.o version.o $(LIBDEPS) $(CC) $(CFLAGS) $(LDFLAGS) -o $@ mips-tfile.o version.o $(LIBS) ! mips-tfile.o : mips-tfile.c $(CONFIG_H) $(RTL_H) system.h version.h mips-tdump: mips-tdump.o version.o $(LIBDEPS) $(CC) $(CFLAGS) $(LDFLAGS) -o $@ mips-tdump.o version.o $(LIBS) ! mips-tdump.o : mips-tdump.c $(CONFIG_H) $(RTL_H) system.h # Build file to support OSF/rose half-pic format. ! halfpic.o: halfpic.c $(CONFIG_H) $(RTL_H) $(TREE_H) system.h - # Normally this target is not used; but it is used if you - # define ALLOCA=alloca.o. - alloca.o: $(srcdir)/../libiberty/alloca.c $(GCONFIG_H) - rm -f alloca.c - $(LN_S) $(srcdir)/../libiberty/alloca.c alloca.c - $(CC) $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) \ - $(ALLOCA_FLAGS) -c alloca.c - $(ALLOCA_FINISH) # # Generate header and source files from the machine description, # and compile them. ! .PRECIOUS: insn-config.h insn-flags.h insn-codes.h \ insn-emit.c insn-recog.c insn-extract.c insn-output.c insn-peep.c \ insn-attr.h insn-attrtab.c --- 1598,1618 ---- mips-tfile: mips-tfile.o version.o $(LIBDEPS) $(CC) $(CFLAGS) $(LDFLAGS) -o $@ mips-tfile.o version.o $(LIBS) ! mips-tfile.o : mips-tfile.c $(CONFIG_H) $(RTL_H) $(SYSTEM_H) version.h mips-tdump: mips-tdump.o version.o $(LIBDEPS) $(CC) $(CFLAGS) $(LDFLAGS) -o $@ mips-tdump.o version.o $(LIBS) ! mips-tdump.o : mips-tdump.c $(CONFIG_H) $(RTL_H) $(SYSTEM_H) # Build file to support OSF/rose half-pic format. ! halfpic.o: halfpic.c $(CONFIG_H) $(RTL_H) $(TREE_H) $(SYSTEM_H) halfpic.h # # Generate header and source files from the machine description, # and compile them. ! .PRECIOUS: insn-config.h insn-flags.h insn-codes.h insn-constants.h \ insn-emit.c insn-recog.c insn-extract.c insn-output.c insn-peep.c \ insn-attr.h insn-attrtab.c *************** s-codes : $(md_file) gencodes$(build_exe *** 1681,1690 **** $(SHELL) $(srcdir)/move-if-change tmp-codes.h insn-codes.h $(STAMP) s-codes insn-emit.o : insn-emit.c $(CONFIG_H) $(RTL_H) $(EXPR_H) real.h output.h \ ! insn-config.h system.h reload.h $(RECOG_H) \ function.h flags.h hard-reg-set.h resource.h $(TM_P_H) ! $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-emit.c insn-emit.c: s-emit ; @true s-emit : $(md_file) genemit$(build_exeext) $(srcdir)/move-if-change --- 1653,1669 ---- $(SHELL) $(srcdir)/move-if-change tmp-codes.h insn-codes.h $(STAMP) s-codes + insn-constants.h: s-constants ; @true + s-constants : $(md_file) genconstants$(build_exeext) $(srcdir)/move-if-change + ./genconstants$(build_exeext) $(md_file) > tmp-constants.h + $(SHELL) $(srcdir)/move-if-change tmp-constants.h insn-constants.h + $(STAMP) s-constants + insn-emit.o : insn-emit.c $(CONFIG_H) $(RTL_H) $(EXPR_H) real.h output.h \ ! insn-config.h $(OPTABS_H) $(SYSTEM_H) reload.h $(RECOG_H) toplev.h \ function.h flags.h hard-reg-set.h resource.h $(TM_P_H) ! $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-emit.c \ ! $(OUTPUT_OPTION) insn-emit.c: s-emit ; @true s-emit : $(md_file) genemit$(build_exeext) $(srcdir)/move-if-change *************** s-emit : $(md_file) genemit$(build_exeex *** 1693,1701 **** $(STAMP) s-emit insn-recog.o : insn-recog.c $(CONFIG_H) $(RTL_H) insn-config.h $(RECOG_H) \ ! real.h output.h flags.h system.h function.h hard-reg-set.h resource.h \ ! $(TM_P_H) ! $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-recog.c insn-recog.c: s-recog ; @true s-recog : $(md_file) genrecog$(build_exeext) $(srcdir)/move-if-change --- 1672,1681 ---- $(STAMP) s-emit insn-recog.o : insn-recog.c $(CONFIG_H) $(RTL_H) insn-config.h $(RECOG_H) \ ! real.h output.h flags.h $(SYSTEM_H) function.h hard-reg-set.h resource.h \ ! $(TM_P_H) toplev.h reload.h ! $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-recog.c \ ! $(OUTPUT_OPTION) insn-recog.c: s-recog ; @true s-recog : $(md_file) genrecog$(build_exeext) $(srcdir)/move-if-change *************** s-recog : $(md_file) genrecog$(build_exe *** 1704,1711 **** $(STAMP) s-recog insn-opinit.o : insn-opinit.c $(CONFIG_H) $(RTL_H) \ ! insn-config.h flags.h $(RECOG_H) $(EXPR_H) reload.h system.h ! $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-opinit.c insn-opinit.c: s-opinit ; @true s-opinit : $(md_file) genopinit$(build_exeext) $(srcdir)/move-if-change --- 1684,1692 ---- $(STAMP) s-recog insn-opinit.o : insn-opinit.c $(CONFIG_H) $(RTL_H) \ ! insn-config.h flags.h $(RECOG_H) $(EXPR_H) $(OPTABS_H) reload.h $(SYSTEM_H) ! $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-opinit.c \ ! $(OUTPUT_OPTION) insn-opinit.c: s-opinit ; @true s-opinit : $(md_file) genopinit$(build_exeext) $(srcdir)/move-if-change *************** s-opinit : $(md_file) genopinit$(build_e *** 1713,1721 **** $(SHELL) $(srcdir)/move-if-change tmp-opinit.c insn-opinit.c $(STAMP) s-opinit ! insn-extract.o : insn-extract.c $(CONFIG_H) $(RTL_H) system.h toplev.h \ insn-config.h $(RECOG_H) ! $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-extract.c insn-extract.c: s-extract ; @true s-extract : $(md_file) genextract$(build_exeext) $(srcdir)/move-if-change --- 1694,1703 ---- $(SHELL) $(srcdir)/move-if-change tmp-opinit.c insn-opinit.c $(STAMP) s-opinit ! insn-extract.o : insn-extract.c $(CONFIG_H) $(RTL_H) $(SYSTEM_H) toplev.h \ insn-config.h $(RECOG_H) ! $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-extract.c \ ! $(OUTPUT_OPTION) insn-extract.c: s-extract ; @true s-extract : $(md_file) genextract$(build_exeext) $(srcdir)/move-if-change *************** s-extract : $(md_file) genextract$(build *** 1724,1731 **** $(STAMP) s-extract insn-peep.o : insn-peep.c $(CONFIG_H) $(RTL_H) $(REGS_H) output.h real.h \ ! system.h insn-config.h $(RECOG_H) except.h function.h $(TM_P_H) ! $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-peep.c insn-peep.c: s-peep ; @true s-peep : $(md_file) genpeep$(build_exeext) $(srcdir)/move-if-change --- 1706,1714 ---- $(STAMP) s-extract insn-peep.o : insn-peep.c $(CONFIG_H) $(RTL_H) $(REGS_H) output.h real.h \ ! $(SYSTEM_H) insn-config.h $(RECOG_H) except.h function.h $(TM_P_H) ! $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-peep.c \ ! $(OUTPUT_OPTION) insn-peep.c: s-peep ; @true s-peep : $(md_file) genpeep$(build_exeext) $(srcdir)/move-if-change *************** s-peep : $(md_file) genpeep$(build_exeex *** 1734,1741 **** $(STAMP) s-peep insn-attrtab.o : insn-attrtab.c $(CONFIG_H) $(RTL_H) $(REGS_H) real.h \ ! output.h $(INSN_ATTR_H) insn-config.h system.h toplev.h $(RECOG_H) $(TM_P_H) ! $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-attrtab.c insn-attr.h: s-attr ; @true s-attr : $(md_file) genattr$(build_exeext) $(srcdir)/move-if-change --- 1717,1726 ---- $(STAMP) s-peep insn-attrtab.o : insn-attrtab.c $(CONFIG_H) $(RTL_H) $(REGS_H) real.h \ ! output.h $(INSN_ATTR_H) insn-config.h $(SYSTEM_H) toplev.h $(RECOG_H) \ ! $(TM_P_H) flags.h ! $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-attrtab.c \ ! $(OUTPUT_OPTION) insn-attr.h: s-attr ; @true s-attr : $(md_file) genattr$(build_exeext) $(srcdir)/move-if-change *************** s-attrtab : $(md_file) genattrtab$(build *** 1750,1759 **** $(STAMP) s-attrtab insn-output.o : insn-output.c $(CONFIG_H) $(RTL_H) $(GGC_H) $(REGS_H) real.h \ ! conditions.h hard-reg-set.h insn-config.h $(INSN_ATTR_H) \ ! output.h $(RECOG_H) function.h system.h toplev.h flags.h \ ! $(TM_P_H) ! $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-output.c insn-output.c: s-output ; @true s-output : $(md_file) genoutput$(build_exeext) $(srcdir)/move-if-change --- 1735,1745 ---- $(STAMP) s-attrtab insn-output.o : insn-output.c $(CONFIG_H) $(RTL_H) $(GGC_H) $(REGS_H) real.h \ ! conditions.h hard-reg-set.h insn-config.h $(INSN_ATTR_H) $(EXPR_H) \ ! output.h $(RECOG_H) function.h $(SYSTEM_H) toplev.h flags.h \ ! insn-codes.h $(TM_P_H) ! $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-output.c \ ! $(OUTPUT_OPTION) insn-output.c: s-output ; @true s-output : $(md_file) genoutput$(build_exeext) $(srcdir)/move-if-change *************** s-output : $(md_file) genoutput$(build_e *** 1761,1776 **** $(SHELL) $(srcdir)/move-if-change tmp-output.c insn-output.c $(STAMP) s-output ! genrtl.o : genrtl.c $(CONFIG_H) $(RTL_H) system.h $(GGC_H) genrtl.c genrtl.h : s-genrtl @true # force gnu make to recheck modification times. s-genrtl: gengenrtl$(build_exeext) $(srcdir)/move-if-change $(RTL_BASE_H) ! ./gengenrtl$(build_exeext) -h >tmp-genrtl.h $(SHELL) $(srcdir)/move-if-change tmp-genrtl.h genrtl.h ! ./gengenrtl$(build_exeext) >tmp-genrtl.c $(SHELL) $(srcdir)/move-if-change tmp-genrtl.c genrtl.c $(STAMP) s-genrtl # # Compile the programs that generate insn-* from the machine description. # They are compiled with $(HOST_CC), and associated libraries, --- 1747,1770 ---- $(SHELL) $(srcdir)/move-if-change tmp-output.c insn-output.c $(STAMP) s-output ! genrtl.o : genrtl.c $(CONFIG_H) $(RTL_H) $(SYSTEM_H) $(GGC_H) genrtl.c genrtl.h : s-genrtl @true # force gnu make to recheck modification times. s-genrtl: gengenrtl$(build_exeext) $(srcdir)/move-if-change $(RTL_BASE_H) ! ./gengenrtl$(build_exeext) -h > tmp-genrtl.h $(SHELL) $(srcdir)/move-if-change tmp-genrtl.h genrtl.h ! ./gengenrtl$(build_exeext) > tmp-genrtl.c $(SHELL) $(srcdir)/move-if-change tmp-genrtl.c genrtl.c $(STAMP) s-genrtl + + tm-preds.h: s-preds; @true + + s-preds: genpreds$(build_exeext) $(srcdir)/move-if-change + ./genpreds$(build_exeext) > tmp-preds.h + $(SHELL) $(srcdir)/move-if-change tmp-preds.h tm-preds.h + $(STAMP) s-preds + # # Compile the programs that generate insn-* from the machine description. # They are compiled with $(HOST_CC), and associated libraries, *************** s-genrtl: gengenrtl$(build_exeext) $(src *** 1782,1973 **** # about the target machine. They do depend on config.h itself, # since that describes the host machine. ! gensupport.o: gensupport.c $(RTL_H) $(OBSTACK_H) system.h errors.h gensupport.h ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/gensupport.c ! ! hashtab.o: $(srcdir)/../libiberty/hashtab.c $(GCONFIG_H) ! rm -f hashtab.c ! $(LN_S) $(srcdir)/../libiberty/hashtab.c hashtab.c ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) hashtab.c ! safe-ctype.o: $(srcdir)/../libiberty/safe-ctype.c $(GCONFIG_H) ! rm -f safe-ctype.c ! $(LN_S) $(srcdir)/../libiberty/safe-ctype.c safe-ctype.c ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) safe-ctype.c genconfig$(build_exeext) : genconfig.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS) $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \ genconfig.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS) genconfig.o : genconfig.c $(RTL_H) $(HCONFIG_H) \ ! system.h errors.h gensupport.h ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genconfig.c genflags$(build_exeext) : genflags.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS) $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \ genflags.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS) genflags.o : genflags.c $(RTL_H) $(OBSTACK_H) $(HCONFIG_H) \ ! system.h errors.h gensupport.h ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genflags.c gencodes$(build_exeext) : gencodes.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS) $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \ gencodes.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS) gencodes.o : gencodes.c $(RTL_H) $(HCONFIG_H) \ ! system.h errors.h gensupport.h ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/gencodes.c genemit$(build_exeext) : genemit.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS) $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \ genemit.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS) ! genemit.o : genemit.c $(RTL_H) $(HCONFIG_H) system.h errors.h gensupport.h ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genemit.c genopinit$(build_exeext) : genopinit.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS) $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \ genopinit.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS) genopinit.o : genopinit.c $(RTL_H) $(HCONFIG_H) \ ! system.h errors.h gensupport.h ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genopinit.c genrecog$(build_exeext) : genrecog.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS) $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \ genrecog.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS) genrecog.o : genrecog.c $(RTL_H) $(HCONFIG_H) \ ! system.h errors.h gensupport.h ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genrecog.c genextract$(build_exeext) : genextract.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS) $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \ genextract.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS) genextract.o : genextract.c $(RTL_H) $(HCONFIG_H) \ ! system.h insn-config.h errors.h gensupport.h ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genextract.c genpeep$(build_exeext) : genpeep.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS) $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \ genpeep.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS) ! genpeep.o : genpeep.c $(RTL_H) $(HCONFIG_H) system.h errors.h gensupport.h ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genpeep.c genattr$(build_exeext) : genattr.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS) $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \ genattr.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS) ! genattr.o : genattr.c $(RTL_H) $(HCONFIG_H) system.h errors.h gensupport.h ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genattr.c genattrtab$(build_exeext) : genattrtab.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS) $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \ genattrtab.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS) genattrtab.o : genattrtab.c $(RTL_H) $(OBSTACK_H) $(HCONFIG_H) \ ! system.h errors.h $(GGC_H) gensupport.h ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genattrtab.c genoutput$(build_exeext) : genoutput.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS) $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \ genoutput.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS) genoutput.o : genoutput.c $(RTL_H) $(HCONFIG_H) \ ! system.h errors.h gensupport.h ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genoutput.c gengenrtl$(build_exeext) : gengenrtl.o $(HOST_LIBDEPS) $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \ gengenrtl.o $(HOST_LIBS) ! gengenrtl.o : gengenrtl.c $(RTL_BASE_H) $(HCONFIG_H) system.h real.h ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/gengenrtl.c # # Compile the libraries to be used by gen*. # If we are not cross-building, gen* use the same .o's that cc1 will use, ! # and HOST_PREFIX_1 is `foobar', just to ensure these rules don't conflict ! # with the rules for rtl.o, alloca.o, etc. ! $(HOST_PREFIX_1)rtl.o: $(srcdir)/rtl.c $(HCONFIG_H) system.h $(RTL_H) \ ! bitmap.h $(GGC_H) toplev.h $(HASHTAB_H) rm -f $(HOST_PREFIX)rtl.c sed -e 's/config[.]h/hconfig.h/' $(srcdir)/rtl.c > $(HOST_PREFIX)rtl.c ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)rtl.c $(HOST_PREFIX_1)print-rtl.o: $(srcdir)/print-rtl.c $(HCONFIG_H) \ ! $(RTL_H) $(BASIC_BLOCK_H) system.h rm -f $(HOST_PREFIX)print-rtl.c sed -e 's/config[.]h/hconfig.h/' $(srcdir)/print-rtl.c > $(HOST_PREFIX)print-rtl.c ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)print-rtl.c ! $(HOST_PREFIX_1)bitmap.o: $(srcdir)/bitmap.c $(HCONFIG_H) system.h $(RTL_H) \ ! flags.h bitmap.h rm -f $(HOST_PREFIX)bitmap.c sed -e 's/config[.]h/hconfig.h/' $(srcdir)/bitmap.c > $(HOST_PREFIX)bitmap.c ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)bitmap.c ! ! $(HOST_PREFIX_1)alloca.o: $(srcdir)/../libiberty/alloca.c $(HCONFIG_H) ! rm -f $(HOST_PREFIX)alloca.c ! sed -e 's/config[.]h/hconfig.h/' $(srcdir)/../libiberty/alloca.c > $(HOST_PREFIX)alloca.c ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)alloca.c ! ! $(HOST_PREFIX_1)obstack.o: $(srcdir)/../libiberty/obstack.c $(HCONFIG_H) ! rm -f $(HOST_PREFIX)obstack.c ! sed -e 's/config[.]h/hconfig.h/' $(srcdir)/../libiberty/obstack.c > $(HOST_PREFIX)obstack.c ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)obstack.c ! ! $(HOST_PREFIX_1)vfprintf.o: $(srcdir)/../libiberty/vfprintf.c $(HCONFIG_H) ! rm -f $(HOST_PREFIX)vfprintf.c ! sed -e 's/config[.]h/hconfig.h/' $(srcdir)/../libiberty/vfprintf.c > $(HOST_PREFIX)vfprintf.c ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)vfprintf.c ! ! $(HOST_PREFIX_1)doprint.o: doprint.c $(HCONFIG_H) ! rm -f $(HOST_PREFIX)doprint.c ! sed -e 's/config[.]h/hconfig.h/' $(srcdir)/doprint.c > $(HOST_PREFIX)doprint.c ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)doprint.c ! ! $(HOST_PREFIX_1)strstr.o: $(srcdir)/../libiberty/strstr.c $(HCONFIG_H) ! rm -f $(HOST_PREFIX)strstr.c ! sed -e 's/config[.]h/hconfig.h/' $(srcdir)/../libiberty/strstr.c > $(HOST_PREFIX)strstr.c ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)strstr.c ! ! $(HOST_PREFIX_1)malloc.o: malloc.c $(HCONFIG_H) ! rm -f $(HOST_PREFIX)malloc.c ! sed -e 's/config[.]h/hconfig.h/' $(srcdir)/malloc.c > $(HOST_PREFIX)malloc.c ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)malloc.c ! $(HOST_PREFIX_1)errors.o: errors.c $(HCONFIG_H) rm -f $(HOST_PREFIX)errors.c sed -e 's/config[.]h/hconfig.h/' $(srcdir)/errors.c > $(HOST_PREFIX)errors.c ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)errors.c ! ! ! # This satisfies the dependency that we get if you cross-compile a compiler ! # that does not need to compile alloca, malloc or whatever. ! $(HOST_PREFIX_1): ! $(STAMP) $(HOST_PREFIX_1) ! $(HOST_PREFIX_1)ggc-none.o: ggc-none.c $(HCONFIG_H) rm -f $(HOST_PREFIX)ggc-none.c sed -e 's/config[.]h/hconfig.h/' $(srcdir)/ggc-none.c > $(HOST_PREFIX)ggc-none.c ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)ggc-none.c # # Remake internationalization support. ! ! intl.o: intl.c intl.h gansidecl.h Makefile $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ -DLOCALEDIR=\"$(localedir)\" \ ! -c $(srcdir)/intl.c $(top_builddir)/intl/libintl.a: intl.all - # Make sure all the headers are there for xgettext to scan. - $(INTL_TARGETS): $(CONFIG_H) $(srcdir)/c-parse.c - intl.all intl.install intl.uninstall \ intl.mostlyclean intl.clean intl.distclean intl.maintainer-clean: @for d in $(INTL_SUBDIRS); do \ --- 1776,1936 ---- # about the target machine. They do depend on config.h itself, # since that describes the host machine. ! read-rtl.o: read-rtl.c $(HCONFIG_H) $(SYSTEM_H) $(RTL_H) \ ! $(OBSTACK_H) $(HASHTAB_H) ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/read-rtl.c $(OUTPUT_OPTION) ! gensupport.o: gensupport.c $(RTL_H) $(OBSTACK_H) $(SYSTEM_H) errors.h gensupport.h ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/gensupport.c $(OUTPUT_OPTION) genconfig$(build_exeext) : genconfig.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS) $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \ genconfig.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS) genconfig.o : genconfig.c $(RTL_H) $(HCONFIG_H) \ ! $(SYSTEM_H) errors.h gensupport.h ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genconfig.c $(OUTPUT_OPTION) genflags$(build_exeext) : genflags.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS) $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \ genflags.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS) genflags.o : genflags.c $(RTL_H) $(OBSTACK_H) $(HCONFIG_H) \ ! $(SYSTEM_H) errors.h gensupport.h ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genflags.c $(OUTPUT_OPTION) gencodes$(build_exeext) : gencodes.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS) $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \ gencodes.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS) gencodes.o : gencodes.c $(RTL_H) $(HCONFIG_H) \ ! $(SYSTEM_H) errors.h gensupport.h ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/gencodes.c $(OUTPUT_OPTION) ! ! genconstants$(build_exeext) : genconstants.o $(HOST_RTL) $(HOST_ERRORS) $(HOST_LIBDEPS) ! $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \ ! genconstants.o $(HOST_RTL) $(HOST_ERRORS) $(HOST_LIBS) ! ! genconstants.o : genconstants.c $(RTL_H) $(HCONFIG_H) $(SYSTEM_H) errors.h ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genconstants.c $(OUTPUT_OPTION) genemit$(build_exeext) : genemit.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS) $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \ genemit.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS) ! genemit.o : genemit.c $(RTL_H) $(HCONFIG_H) $(SYSTEM_H) errors.h gensupport.h ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genemit.c $(OUTPUT_OPTION) genopinit$(build_exeext) : genopinit.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS) $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \ genopinit.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS) genopinit.o : genopinit.c $(RTL_H) $(HCONFIG_H) \ ! $(SYSTEM_H) errors.h gensupport.h ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genopinit.c $(OUTPUT_OPTION) genrecog$(build_exeext) : genrecog.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS) $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \ genrecog.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS) genrecog.o : genrecog.c $(RTL_H) $(HCONFIG_H) \ ! $(SYSTEM_H) errors.h gensupport.h ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genrecog.c $(OUTPUT_OPTION) genextract$(build_exeext) : genextract.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS) $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \ genextract.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS) genextract.o : genextract.c $(RTL_H) $(HCONFIG_H) \ ! $(SYSTEM_H) insn-config.h errors.h gensupport.h ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genextract.c $(OUTPUT_OPTION) genpeep$(build_exeext) : genpeep.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS) $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \ genpeep.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS) ! genpeep.o : genpeep.c $(RTL_H) $(HCONFIG_H) $(SYSTEM_H) errors.h gensupport.h ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genpeep.c $(OUTPUT_OPTION) genattr$(build_exeext) : genattr.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS) $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \ genattr.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS) ! genattr.o : genattr.c $(RTL_H) $(HCONFIG_H) $(SYSTEM_H) errors.h gensupport.h ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genattr.c $(OUTPUT_OPTION) genattrtab$(build_exeext) : genattrtab.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS) $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \ genattrtab.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS) genattrtab.o : genattrtab.c $(RTL_H) $(OBSTACK_H) $(HCONFIG_H) \ ! $(SYSTEM_H) errors.h $(GGC_H) gensupport.h ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genattrtab.c $(OUTPUT_OPTION) genoutput$(build_exeext) : genoutput.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS) $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \ genoutput.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBS) genoutput.o : genoutput.c $(RTL_H) $(HCONFIG_H) \ ! $(SYSTEM_H) errors.h gensupport.h ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genoutput.c $(OUTPUT_OPTION) gengenrtl$(build_exeext) : gengenrtl.o $(HOST_LIBDEPS) $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \ gengenrtl.o $(HOST_LIBS) ! gengenrtl.o : gengenrtl.c $(RTL_BASE_H) $(HCONFIG_H) $(SYSTEM_H) real.h ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/gengenrtl.c $(OUTPUT_OPTION) ! ! genpreds$(build_exeext) : genpreds.o $(HOST_LIBDEPS) ! $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \ ! genpreds.o $(HOST_LIBS) ! ! genpreds.o : genpreds.c $(RTL_BASE_H) $(HCONFIG_H) $(SYSTEM_H) ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genpreds.c $(OUTPUT_OPTION) ! # # Compile the libraries to be used by gen*. # If we are not cross-building, gen* use the same .o's that cc1 will use, ! # and HOST_PREFIX_1 is `loser-', just to ensure these rules don't conflict ! # with the rules for rtl.o, etc. ! $(HOST_PREFIX_1)rtl.o: $(srcdir)/rtl.c $(HCONFIG_H) $(SYSTEM_H) $(RTL_H) \ ! real.h $(GGC_H) errors.h rm -f $(HOST_PREFIX)rtl.c sed -e 's/config[.]h/hconfig.h/' $(srcdir)/rtl.c > $(HOST_PREFIX)rtl.c ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)rtl.c $(OUTPUT_OPTION) $(HOST_PREFIX_1)print-rtl.o: $(srcdir)/print-rtl.c $(HCONFIG_H) \ ! $(RTL_H) $(TREE_H) hard-reg-set.h $(BASIC_BLOCK_H) rm -f $(HOST_PREFIX)print-rtl.c sed -e 's/config[.]h/hconfig.h/' $(srcdir)/print-rtl.c > $(HOST_PREFIX)print-rtl.c ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)print-rtl.c $(OUTPUT_OPTION) ! $(HOST_PREFIX_1)bitmap.o: $(srcdir)/bitmap.c $(HCONFIG_H) $(SYSTEM_H) $(RTL_H) \ ! flags.h $(BASIC_BLOCK_H) $(REGS_H) rm -f $(HOST_PREFIX)bitmap.c sed -e 's/config[.]h/hconfig.h/' $(srcdir)/bitmap.c > $(HOST_PREFIX)bitmap.c ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)bitmap.c $(OUTPUT_OPTION) ! $(HOST_PREFIX_1)errors.o: errors.c $(HCONFIG_H) $(SYSTEM_H) errors.h rm -f $(HOST_PREFIX)errors.c sed -e 's/config[.]h/hconfig.h/' $(srcdir)/errors.c > $(HOST_PREFIX)errors.c ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)errors.c $(OUTPUT_OPTION) ! $(HOST_PREFIX_1)ggc-none.o: ggc-none.c $(HCONFIG_H) $(SYSTEM_H) $(GCC_H) rm -f $(HOST_PREFIX)ggc-none.c sed -e 's/config[.]h/hconfig.h/' $(srcdir)/ggc-none.c > $(HOST_PREFIX)ggc-none.c ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)ggc-none.c $(OUTPUT_OPTION) # # Remake internationalization support. ! intl.o: intl.c $(CONFIG_H) system.h intl.h Makefile $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ -DLOCALEDIR=\"$(localedir)\" \ ! -c $(srcdir)/intl.c $(OUTPUT_OPTION) $(top_builddir)/intl/libintl.a: intl.all intl.all intl.install intl.uninstall \ intl.mostlyclean intl.clean intl.distclean intl.maintainer-clean: @for d in $(INTL_SUBDIRS); do \ *************** intl.all intl.install intl.uninstall \ *** 1977,1982 **** --- 1940,1953 ---- if [ $$? -eq 0 ] ; then true ; else exit 1 ; fi ; \ done + # intl.all and intl.install need config.h to exist, and the files it includes. + # (FIXME: intl/*.c shouldn't need to see insn-foo.h!) + intl.all intl.install: config.h insn-flags.h insn-constants.h + + # Make-lang.in should add dependencies of po-generated on any generated + # files which need to be scanned by gettext (usually Yacc-generated parsers). + po-generated: c-parse.c tradcif.c + # # Remake cpp and protoize. *************** PREPROCESSOR_DEFINES = \ *** 1991,2029 **** LIBCPP_OBJS = cpplib.o cpplex.o cppmacro.o cppexp.o cppfiles.o \ cpphash.o cpperror.o cppinit.o cppdefault.o \ ! mkdeps.o prefix.o version.o mbchar.o ! LIBCPP_DEPS = cpplib.h cpphash.h intl.h system.h # Most of the other archives built/used by this makefile are for # targets. This one is strictly for the host. libcpp.a: $(LIBCPP_OBJS) -rm -rf libcpp.a $(AR) $(AR_FLAGS) libcpp.a $(LIBCPP_OBJS) ! if $(RANLIB_TEST) ; then $(RANLIB) libcpp.a ; else true ; fi cpp0$(exeext): cppmain.o intl.o libcpp.a $(LIBDEPS) $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o cpp0$(exeext) cppmain.o \ intl.o libcpp.a $(LIBS) ! cppmain.o: cppmain.c $(CONFIG_H) cpplib.h intl.h system.h cpperror.o: cpperror.c $(CONFIG_H) $(LIBCPP_DEPS) cppexp.o: cppexp.c $(CONFIG_H) $(LIBCPP_DEPS) ! cpplex.o: cpplex.c $(CONFIG_H) $(LIBCPP_DEPS) cppmacro.o: cppmacro.c $(CONFIG_H) $(LIBCPP_DEPS) ! cpplib.o: cpplib.c $(CONFIG_H) $(LIBCPP_DEPS) $(OBSTACK_H) ! cpphash.o: cpphash.c $(CONFIG_H) $(LIBCPP_DEPS) $(OBSTACK_H) cppfiles.o: cppfiles.c $(CONFIG_H) $(LIBCPP_DEPS) $(SPLAY_TREE_H) mkdeps.h cppinit.o: cppinit.c $(CONFIG_H) $(LIBCPP_DEPS) cppdefault.h \ ! mkdeps.h prefix.h output.h version.h ! cppdefault.o: cppdefault.c $(CONFIG_H) system.h cppdefault.h Makefile $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ $(PREPROCESSOR_DEFINES) \ ! -c $(srcdir)/cppdefault.c ! mkdeps.o: mkdeps.c $(CONFIG_H) system.h mkdeps.h # The traditional mode preprocessor, a separate program for ease of # maintenance. Some code is shared with the ISO-C cpp. --- 1962,2001 ---- LIBCPP_OBJS = cpplib.o cpplex.o cppmacro.o cppexp.o cppfiles.o \ cpphash.o cpperror.o cppinit.o cppdefault.o \ ! hashtable.o line-map.o mkdeps.o prefix.o version.o mbchar.o ! LIBCPP_DEPS = $(CPPLIB_H) cpphash.h line-map.h hashtable.h intl.h \ ! $(OBSTACK_H) $(SYSTEM_H) # Most of the other archives built/used by this makefile are for # targets. This one is strictly for the host. libcpp.a: $(LIBCPP_OBJS) -rm -rf libcpp.a $(AR) $(AR_FLAGS) libcpp.a $(LIBCPP_OBJS) ! -$(RANLIB) libcpp.a cpp0$(exeext): cppmain.o intl.o libcpp.a $(LIBDEPS) $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o cpp0$(exeext) cppmain.o \ intl.o libcpp.a $(LIBS) ! cppmain.o: cppmain.c $(CONFIG_H) $(CPPLIB_H) intl.h $(SYSTEM_H) cpperror.o: cpperror.c $(CONFIG_H) $(LIBCPP_DEPS) cppexp.o: cppexp.c $(CONFIG_H) $(LIBCPP_DEPS) ! cpplex.o: cpplex.c $(CONFIG_H) $(LIBCPP_DEPS) mbchar.h cppmacro.o: cppmacro.c $(CONFIG_H) $(LIBCPP_DEPS) ! cpplib.o: cpplib.c $(CONFIG_H) $(LIBCPP_DEPS) ! cpphash.o: cpphash.c $(CONFIG_H) $(LIBCPP_DEPS) cppfiles.o: cppfiles.c $(CONFIG_H) $(LIBCPP_DEPS) $(SPLAY_TREE_H) mkdeps.h cppinit.o: cppinit.c $(CONFIG_H) $(LIBCPP_DEPS) cppdefault.h \ ! mkdeps.h prefix.h version.h except.h ! cppdefault.o: cppdefault.c $(CONFIG_H) $(SYSTEM_H) cppdefault.h Makefile $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ $(PREPROCESSOR_DEFINES) \ ! -c $(srcdir)/cppdefault.c $(OUTPUT_OPTION) ! mkdeps.o: mkdeps.c $(CONFIG_H) $(SYSTEM_H) mkdeps.h # The traditional mode preprocessor, a separate program for ease of # maintenance. Some code is shared with the ISO-C cpp. *************** tradcpp0$(exeext): tradcpp.o tradcif.o c *** 2032,2039 **** $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o tradcpp0$(exeext) \ tradcpp.o tradcif.o mkdeps.o cppdefault.o version.o intl.o $(LIBS) ! tradcpp.o: tradcpp.c $(CONFIG_H) system.h version.h cppdefault.h tradcpp.h ! tradcif.o: $(srcdir)/tradcif.c $(CONFIG_H) system.h tradcpp.h $(srcdir)/tradcif.c: $(srcdir)/tradcif.y (cd $(srcdir) && $(BISON) $(BISONFLAGS) -o tr$$$$.c tradcif.y && \ --- 2004,2011 ---- $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o tradcpp0$(exeext) \ tradcpp.o tradcif.o mkdeps.o cppdefault.o version.o intl.o $(LIBS) ! tradcpp.o: tradcpp.c $(CONFIG_H) $(SYSTEM_H) version.h cppdefault.h tradcpp.h ! tradcif.o: $(srcdir)/tradcif.c $(CONFIG_H) $(SYSTEM_H) tradcpp.h $(srcdir)/tradcif.c: $(srcdir)/tradcif.y (cd $(srcdir) && $(BISON) $(BISONFLAGS) -o tr$$$$.c tradcif.y && \ *************** $(srcdir)/tradcif.c: $(srcdir)/tradcif.y *** 2044,2050 **** proto: config.status protoize$(exeext) unprotoize$(exeext) SYSCALLS.c.X ! PROTO_OBJS = intl.o version.o protoize$(exeext): protoize.o $(PROTO_OBJS) $(LIBDEPS) $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ protoize.o $(PROTO_OBJS) $(LIBS) --- 2016,2022 ---- proto: config.status protoize$(exeext) unprotoize$(exeext) SYSCALLS.c.X ! PROTO_OBJS = intl.o version.o cppdefault.o protoize$(exeext): protoize.o $(PROTO_OBJS) $(LIBDEPS) $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ protoize.o $(PROTO_OBJS) $(LIBS) *************** protoize$(exeext): protoize.o $(PROTO_OB *** 2052,2072 **** unprotoize$(exeext): unprotoize.o $(PROTO_OBJS) $(LIBDEPS) $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ unprotoize.o $(PROTO_OBJS) $(LIBS) ! protoize.o: protoize.c $(srcdir)/../include/getopt.h $(CONFIG_H) system.h \ Makefile version.h (SHLIB_LINK='$(SHLIB_LINK)' \ SHLIB_MULTILIB='$(SHLIB_MULTILIB)'; \ $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ ! $(DRIVER_DEFINES) $(PREPROCESSOR_DEFINES) \ $(srcdir)/protoize.c $(OUTPUT_OPTION)) ! unprotoize.o: unprotoize.c protoize.c $(srcdir)/../include/getopt.h \ ! $(CONFIG_H) system.h Makefile version.h (SHLIB_LINK='$(SHLIB_LINK)' \ SHLIB_MULTILIB='$(SHLIB_MULTILIB)'; \ ! $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ ! $(DRIVER_DEFINES) $(PREPROCESSOR_DEFINES) \ ! $(srcdir)/unprotoize.c $(OUTPUT_OPTION)) # This info describes the target machine, so compile with GCC just built. SYSCALLS.c.X: $(srcdir)/sys-types.h $(srcdir)/sys-protos.h $(GCC_PASSES) \ --- 2024,2044 ---- unprotoize$(exeext): unprotoize.o $(PROTO_OBJS) $(LIBDEPS) $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ unprotoize.o $(PROTO_OBJS) $(LIBS) ! protoize.o: protoize.c $(srcdir)/../include/getopt.h $(CONFIG_H) $(SYSTEM_H) \ Makefile version.h (SHLIB_LINK='$(SHLIB_LINK)' \ SHLIB_MULTILIB='$(SHLIB_MULTILIB)'; \ $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ ! $(DRIVER_DEFINES) \ $(srcdir)/protoize.c $(OUTPUT_OPTION)) ! unprotoize.o: protoize.c $(srcdir)/../include/getopt.h \ ! $(CONFIG_H) $(SYSTEM_H) Makefile version.h (SHLIB_LINK='$(SHLIB_LINK)' \ SHLIB_MULTILIB='$(SHLIB_MULTILIB)'; \ ! $(CC) -c -DUNPROTOIZE $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ ! $(DRIVER_DEFINES) \ ! $(srcdir)/protoize.c $(OUTPUT_OPTION)) # This info describes the target machine, so compile with GCC just built. SYSCALLS.c.X: $(srcdir)/sys-types.h $(srcdir)/sys-protos.h $(GCC_PASSES) \ *************** test-protoize-simple: ./protoize ./unpro *** 2108,2118 **** diff $(srcdir)/protoize.c tmp-proto.c | cat -rm -f tmp-proto.[cs] tmp-proto$(objext) ! gcov.o: gcov.c gcov-io.h intl.h system.h $(CONFIG_H) # Only one of 'gcov' or 'gcov.exe' is actually built, depending # upon whether $(exeext) is empty or not. ! GCOV_OBJS = gcov.o intl.o gcov$(exeext): $(GCOV_OBJS) $(LIBDEPS) $(CC) $(ALL_CFLAGS) $(LDFLAGS) $(GCOV_OBJS) $(LIBS) -o $@ # --- 2080,2090 ---- diff $(srcdir)/protoize.c tmp-proto.c | cat -rm -f tmp-proto.[cs] tmp-proto$(objext) ! gcov.o: gcov.c gcov-io.h intl.h $(SYSTEM_H) $(CONFIG_H) # Only one of 'gcov' or 'gcov.exe' is actually built, depending # upon whether $(exeext) is empty or not. ! GCOV_OBJS = gcov.o intl.o version.o gcov$(exeext): $(GCOV_OBJS) $(LIBDEPS) $(CC) $(ALL_CFLAGS) $(LDFLAGS) $(GCOV_OBJS) $(LIBS) -o $@ # *************** fixinc.sh: $(FIXINCSRCDIR)/mkfixinc.sh $ *** 2177,2184 **** stmp-fixinc: fixinc.sh gsyslimits.h rm -rf include; mkdir include -chmod a+rx include ! (TARGET_MACHINE=$(target); srcdir=`cd $(srcdir); pwd`; \ ! SHELL=$(SHELL) ;\ export TARGET_MACHINE srcdir SHELL ; \ $(SHELL) ./fixinc.sh `pwd`/include $(SYSTEM_HEADER_DIR) $(OTHER_FIXINCLUDES_DIRS); \ rm -f include/syslimits.h; \ --- 2149,2156 ---- stmp-fixinc: fixinc.sh gsyslimits.h rm -rf include; mkdir include -chmod a+rx include ! (TARGET_MACHINE='$(target)'; srcdir=`cd $(srcdir); pwd`; \ ! SHELL='$(SHELL)' ;\ export TARGET_MACHINE srcdir SHELL ; \ $(SHELL) ./fixinc.sh `pwd`/include $(SYSTEM_HEADER_DIR) $(OTHER_FIXINCLUDES_DIRS); \ rm -f include/syslimits.h; \ *************** deduced.h: $(GCC_PASSES) $(srcdir)/scan- *** 2223,2235 **** GEN_PROTOS_OBJS = gen-protos.o scan.o gen-protos$(build_exeext): $(GEN_PROTOS_OBJS) ${HOST_CC} $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \ ! $(GEN_PROTOS_OBJS) ../libiberty/libiberty.a ! gen-protos.o: gen-protos.c scan.h $(HCONFIG_H) system.h ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/gen-protos.c ! scan.o: scan.c scan.h $(HCONFIG_H) system.h ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/scan.c xsys-protos.h: $(GCC_PASSES) $(srcdir)/sys-protos.h deduced.h gen-protos$(build_exeext) Makefile sed -e s/TARGET_GETGROUPS_T/$(TARGET_GETGROUPS_T)/ \ --- 2195,2207 ---- GEN_PROTOS_OBJS = gen-protos.o scan.o gen-protos$(build_exeext): $(GEN_PROTOS_OBJS) ${HOST_CC} $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \ ! $(GEN_PROTOS_OBJS) $(HOST_LIBS) ! gen-protos.o: gen-protos.c scan.h $(HCONFIG_H) $(SYSTEM_H) ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/gen-protos.c $(OUTPUT_OPTION) ! scan.o: scan.c scan.h $(HCONFIG_H) $(SYSTEM_H) ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/scan.c $(OUTPUT_OPTION) xsys-protos.h: $(GCC_PASSES) $(srcdir)/sys-protos.h deduced.h gen-protos$(build_exeext) Makefile sed -e s/TARGET_GETGROUPS_T/$(TARGET_GETGROUPS_T)/ \ *************** fix-header$(build_exeext): fix-header.o *** 2249,2259 **** scan-decls.o scan.o libcpp.a $(LIBS) fix-header.o: fix-header.c $(OBSTACK_H) scan.h \ ! xsys-protos.h $(HCONFIG_H) system.h cpplib.h ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/fix-header.c ! scan-decls.o: scan-decls.c scan.h cpplib.h $(HCONFIG_H) system.h ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/scan-decls.c # stmp-fixproto depends on this, not on fix-header directly. # The idea is to make sure fix-header gets built, --- 2221,2231 ---- scan-decls.o scan.o libcpp.a $(LIBS) fix-header.o: fix-header.c $(OBSTACK_H) scan.h \ ! xsys-protos.h $(HCONFIG_H) $(SYSTEM_H) $(CPPLIB_H) ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/fix-header.c $(OUTPUT_OPTION) ! scan-decls.o: scan-decls.c scan.h $(CPPLIB_H) $(HCONFIG_H) $(SYSTEM_H) ! $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/scan-decls.c $(OUTPUT_OPTION) # stmp-fixproto depends on this, not on fix-header directly. # The idea is to make sure fix-header gets built, *************** stmp-fixproto: fixhdr.ready fixproto stm *** 2288,2350 **** docdir = $(srcdir)/doc ! doc: $(BUILD_INFO) gccbug ! info: $(docdir)/cpp.info $(docdir)/gcc.info lang.info $(docdir)/cppinternals.info ! $(docdir)/cpp.info: $(docdir)/cpp.texi $(docdir)/include/fdl.texi cd $(srcdir) && $(MAKEINFO) $(MAKEINFOFLAGS) -I doc -I doc/include -o doc/cpp.info doc/cpp.texi ! $(docdir)/gcc.info: $(docdir)/gcc.texi $(docdir)/extend.texi \ ! $(docdir)/install-old.texi $(docdir)/invoke.texi $(docdir)/md.texi \ ! $(docdir)/c-tree.texi $(docdir)/rtl.texi $(docdir)/tm.texi \ ! $(docdir)/gcov.texi $(docdir)/contrib.texi $(docdir)/objc.texi \ ! $(docdir)/include/fdl.texi $(docdir)/include/gpl.texi \ ! $(docdir)/include/funding.texi cd $(srcdir) && $(MAKEINFO) $(MAKEINFOFLAGS) -I doc -I doc/include -o doc/gcc.info doc/gcc.texi $(docdir)/cppinternals.info: $(docdir)/cppinternals.texi cd $(srcdir) && $(MAKEINFO) $(MAKEINFOFLAGS) -I doc -I doc/include -o doc/cppinternals.info \ doc/cppinternals.texi ! dvi: gcc.dvi cpp.dvi lang.dvi cppinternals.dvi # This works with GNU Make's default rule. ! cpp.dvi: $(docdir)/cpp.texi $(docdir)/include/fdl.texi $(TEXI2DVI) -I $(docdir) -I $(docdir)/include $(docdir)/cpp.texi ! gcc.dvi: $(docdir)/gcc.texi $(docdir)/extend.texi $(docdir)/install-old.texi \ ! $(docdir)/invoke.texi $(docdir)/md.texi $(docdir)/c-tree.texi \ ! $(docdir)/rtl.texi $(docdir)/tm.texi $(docdir)/gcov.texi \ ! $(docdir)/contrib.texi $(docdir)/objc.texi \ ! $(docdir)/include/fdl.texi $(docdir)/include/gpl.texi \ ! $(docdir)/include/funding.texi $(TEXI2DVI) -I $(docdir) -I $(docdir)/include $(docdir)/gcc.texi cppinternals.dvi: $(docdir)/cppinternals.texi $(TEXI2DVI) -I $(docdir) -I $(docdir)/include $(docdir)/cppinternals.texi generated-manpages: $(docdir)/gcov.1 $(docdir)/cpp.1 $(docdir)/gcc.1 \ ! $(docdir)/gfdl.7 $(docdir)/gpl.7 $(docdir)/fsf-funding.7 $(docdir)/gcov.1: $(docdir)/gcov.texi $(STAMP) $(docdir)/gcov.1 ! -$(TEXI2POD) < $(docdir)/gcov.texi > gcov.pod -($(POD2MAN) --section=1 gcov.pod > $(docdir)/gcov.1.T$$$$ && \ mv -f $(docdir)/gcov.1.T$$$$ $(docdir)/gcov.1) || \ (rm -f $(docdir)/gcov.1.T$$$$ && exit 1) -rm -f gcov.pod ! $(docdir)/cpp.1: $(docdir)/cpp.texi $(STAMP) $(docdir)/cpp.1 ! -$(TEXI2POD) < $(docdir)/cpp.texi > cpp.pod -($(POD2MAN) --section=1 cpp.pod > $(docdir)/cpp.1.T$$$$ && \ mv -f $(docdir)/cpp.1.T$$$$ $(docdir)/cpp.1) || \ (rm -f $(docdir)/cpp.1.T$$$$ && exit 1) -rm -f cpp.pod ! $(docdir)/gcc.1: $(docdir)/invoke.texi $(STAMP) $(docdir)/gcc.1 ! -$(TEXI2POD) < $(docdir)/invoke.texi > gcc.pod -($(POD2MAN) --section=1 gcc.pod > $(docdir)/gcc.1.T$$$$ && \ mv -f $(docdir)/gcc.1.T$$$$ $(docdir)/gcc.1) || \ (rm -f $(docdir)/gcc.1.T$$$$ && exit 1) --- 2260,2361 ---- docdir = $(srcdir)/doc ! doc: $(BUILD_INFO) $(GENERATED_MANPAGES) gccbug ! info: $(docdir)/cpp.info $(docdir)/gcc.info $(docdir)/gccint.info lang.info $(docdir)/cppinternals.info ! $(docdir)/cpp.info: $(docdir)/cpp.texi $(docdir)/include/fdl.texi \ ! $(docdir)/cppenv.texi $(docdir)/cppopts.texi cd $(srcdir) && $(MAKEINFO) $(MAKEINFOFLAGS) -I doc -I doc/include -o doc/cpp.info doc/cpp.texi ! $(docdir)/gcc.info: $(docdir)/gcc.texi $(docdir)/include/gcc-common.texi \ ! $(docdir)/frontends.texi $(docdir)/standards.texi \ ! $(docdir)/invoke.texi $(docdir)/extend.texi $(docdir)/md.texi \ ! $(docdir)/objc.texi $(docdir)/gcov.texi $(docdir)/trouble.texi \ ! $(docdir)/bugreport.texi $(docdir)/service.texi \ ! $(docdir)/contribute.texi $(docdir)/vms.texi \ ! $(docdir)/include/funding.texi $(docdir)/gnu.texi \ ! $(docdir)/include/gpl.texi $(docdir)/include/fdl.texi \ ! $(docdir)/contrib.texi $(docdir)/cppenv.texi $(docdir)/cppopts.texi cd $(srcdir) && $(MAKEINFO) $(MAKEINFOFLAGS) -I doc -I doc/include -o doc/gcc.info doc/gcc.texi + $(docdir)/gccint.info: $(docdir)/gccint.texi \ + $(docdir)/include/gcc-common.texi $(docdir)/contribute.texi \ + $(docdir)/makefile.texi $(docdir)/configterms.texi \ + $(docdir)/portability.texi $(docdir)/interface.texi \ + $(docdir)/passes.texi $(docdir)/c-tree.texi \ + $(docdir)/rtl.texi $(docdir)/md.texi $(docdir)/tm.texi \ + $(docdir)/hostconfig.texi $(docdir)/fragments.texi \ + $(docdir)/configfiles.texi $(docdir)/collect2.texi \ + $(docdir)/headerdirs.texi $(docdir)/include/funding.texi \ + $(docdir)/gnu.texi $(docdir)/include/gpl.texi \ + $(docdir)/include/fdl.texi $(docdir)/contrib.texi \ + $(docdir)/languages.texi $(docdir)/sourcebuild.texi + cd $(srcdir) && $(MAKEINFO) $(MAKEINFOFLAGS) -I doc -I doc/include -o doc/gccint.info doc/gccint.texi + $(docdir)/cppinternals.info: $(docdir)/cppinternals.texi cd $(srcdir) && $(MAKEINFO) $(MAKEINFOFLAGS) -I doc -I doc/include -o doc/cppinternals.info \ doc/cppinternals.texi ! dvi: gcc.dvi gccint.dvi cpp.dvi lang.dvi cppinternals.dvi # This works with GNU Make's default rule. ! cpp.dvi: $(docdir)/cpp.texi $(docdir)/include/fdl.texi \ ! $(docdir)/cppenv.texi $(docdir)/cppopts.texi $(TEXI2DVI) -I $(docdir) -I $(docdir)/include $(docdir)/cpp.texi ! gcc.dvi: $(docdir)/gcc.texi $(docdir)/include/gcc-common.texi \ ! $(docdir)/frontends.texi $(docdir)/standards.texi \ ! $(docdir)/invoke.texi $(docdir)/extend.texi $(docdir)/md.texi \ ! $(docdir)/objc.texi $(docdir)/gcov.texi $(docdir)/trouble.texi \ ! $(docdir)/bugreport.texi $(docdir)/service.texi \ ! $(docdir)/contribute.texi $(docdir)/vms.texi \ ! $(docdir)/include/funding.texi $(docdir)/gnu.texi \ ! $(docdir)/include/gpl.texi $(docdir)/include/fdl.texi \ ! $(docdir)/contrib.texi $(docdir)/cppenv.texi $(docdir)/cppopts.texi $(TEXI2DVI) -I $(docdir) -I $(docdir)/include $(docdir)/gcc.texi + gccint.dvi: $(docdir)/gccint.texi \ + $(docdir)/include/gcc-common.texi $(docdir)/contribute.texi \ + $(docdir)/makefile.texi $(docdir)/configterms.texi \ + $(docdir)/portability.texi $(docdir)/interface.texi \ + $(docdir)/passes.texi $(docdir)/c-tree.texi \ + $(docdir)/rtl.texi $(docdir)/md.texi $(docdir)/tm.texi \ + $(docdir)/hostconfig.texi $(docdir)/fragments.texi \ + $(docdir)/configfiles.texi $(docdir)/collect2.texi \ + $(docdir)/headerdirs.texi $(docdir)/include/funding.texi \ + $(docdir)/gnu.texi $(docdir)/include/gpl.texi \ + $(docdir)/include/fdl.texi $(docdir)/contrib.texi \ + $(docdir)/languages.texi $(docdir)/sourcebuild.texi + $(TEXI2DVI) -I $(docdir) -I $(docdir)/include $(docdir)/gccint.texi + cppinternals.dvi: $(docdir)/cppinternals.texi $(TEXI2DVI) -I $(docdir) -I $(docdir)/include $(docdir)/cppinternals.texi generated-manpages: $(docdir)/gcov.1 $(docdir)/cpp.1 $(docdir)/gcc.1 \ ! $(docdir)/gfdl.7 $(docdir)/gpl.7 $(docdir)/fsf-funding.7 \ ! lang.generated-manpages $(docdir)/gcov.1: $(docdir)/gcov.texi $(STAMP) $(docdir)/gcov.1 ! -$(TEXI2POD) $(docdir)/gcov.texi > gcov.pod -($(POD2MAN) --section=1 gcov.pod > $(docdir)/gcov.1.T$$$$ && \ mv -f $(docdir)/gcov.1.T$$$$ $(docdir)/gcov.1) || \ (rm -f $(docdir)/gcov.1.T$$$$ && exit 1) -rm -f gcov.pod ! $(docdir)/cpp.1: $(docdir)/cpp.texi $(docdir)/cppenv.texi \ ! $(docdir)/cppopts.texi $(STAMP) $(docdir)/cpp.1 ! -$(TEXI2POD) $(docdir)/cpp.texi > cpp.pod -($(POD2MAN) --section=1 cpp.pod > $(docdir)/cpp.1.T$$$$ && \ mv -f $(docdir)/cpp.1.T$$$$ $(docdir)/cpp.1) || \ (rm -f $(docdir)/cpp.1.T$$$$ && exit 1) -rm -f cpp.pod ! $(docdir)/gcc.1: $(docdir)/invoke.texi $(docdir)/cppenv.texi \ ! $(docdir)/cppopts.texi $(STAMP) $(docdir)/gcc.1 ! -$(TEXI2POD) $(docdir)/invoke.texi > gcc.pod -($(POD2MAN) --section=1 gcc.pod > $(docdir)/gcc.1.T$$$$ && \ mv -f $(docdir)/gcc.1.T$$$$ $(docdir)/gcc.1) || \ (rm -f $(docdir)/gcc.1.T$$$$ && exit 1) *************** $(docdir)/gcc.1: $(docdir)/invoke.texi *** 2352,2358 **** $(docdir)/gfdl.7: $(docdir)/include/fdl.texi $(STAMP) $(docdir)/gfdl.7 ! -$(TEXI2POD) < $(docdir)/include/fdl.texi > gfdl.pod -($(POD2MAN) --section=7 gfdl.pod > $(docdir)/gfdl.7.T$$$$ && \ mv -f $(docdir)/gfdl.7.T$$$$ $(docdir)/gfdl.7) || \ (rm -f $(docdir)/gfdl.7.T$$$$ && exit 1) --- 2363,2369 ---- $(docdir)/gfdl.7: $(docdir)/include/fdl.texi $(STAMP) $(docdir)/gfdl.7 ! -$(TEXI2POD) $(docdir)/include/fdl.texi > gfdl.pod -($(POD2MAN) --section=7 gfdl.pod > $(docdir)/gfdl.7.T$$$$ && \ mv -f $(docdir)/gfdl.7.T$$$$ $(docdir)/gfdl.7) || \ (rm -f $(docdir)/gfdl.7.T$$$$ && exit 1) *************** $(docdir)/gfdl.7: $(docdir)/include/fdl. *** 2360,2366 **** $(docdir)/gpl.7: $(docdir)/include/gpl.texi $(STAMP) $(docdir)/gpl.7 ! -$(TEXI2POD) < $(docdir)/include/gpl.texi > gpl.pod -($(POD2MAN) --section=7 gpl.pod > $(docdir)/gpl.7.T$$$$ && \ mv -f $(docdir)/gpl.7.T$$$$ $(docdir)/gpl.7) || \ (rm -f $(docdir)/gpl.7.T$$$$ && exit 1) --- 2371,2377 ---- $(docdir)/gpl.7: $(docdir)/include/gpl.texi $(STAMP) $(docdir)/gpl.7 ! -$(TEXI2POD) $(docdir)/include/gpl.texi > gpl.pod -($(POD2MAN) --section=7 gpl.pod > $(docdir)/gpl.7.T$$$$ && \ mv -f $(docdir)/gpl.7.T$$$$ $(docdir)/gpl.7) || \ (rm -f $(docdir)/gpl.7.T$$$$ && exit 1) *************** $(docdir)/gpl.7: $(docdir)/include/gpl.t *** 2368,2374 **** $(docdir)/fsf-funding.7: $(docdir)/include/funding.texi $(STAMP) $(docdir)/fsf-funding.7 ! -$(TEXI2POD) < $(docdir)/include/funding.texi > fsf-funding.pod -($(POD2MAN) --section=7 fsf-funding.pod \ > $(docdir)/fsf-funding.7.T$$$$ && \ mv -f $(docdir)/fsf-funding.7.T$$$$ $(docdir)/fsf-funding.7) || \ --- 2379,2385 ---- $(docdir)/fsf-funding.7: $(docdir)/include/funding.texi $(STAMP) $(docdir)/fsf-funding.7 ! -$(TEXI2POD) $(docdir)/include/funding.texi > fsf-funding.pod -($(POD2MAN) --section=7 fsf-funding.pod \ > $(docdir)/fsf-funding.7.T$$$$ && \ mv -f $(docdir)/fsf-funding.7.T$$$$ $(docdir)/fsf-funding.7) || \ *************** mostlyclean: $(INTL_MOSTLYCLEAN) lang.mo *** 2394,2405 **** -rm -f $(STAGESTUFF) -rm -rf libgcc # Delete the temporary source copies for cross compilation. ! -rm -f $(HOST_PREFIX_1)rtl.c ! -rm -f $(HOST_PREFIX_1)alloca.c $(HOST_PREFIX_1)malloc.c ! -rm -f $(HOST_PREFIX_1)obstack.c # Delete the temp files made in the course of building libgcc.a. ! -rm -f xlimits.h libgcc1-test ! for name in $(LIB1FUNCS); do rm -f $${name}.c; done # Delete other built files. -rm -f t-float.h-cross xsys-protos.hT # Delete the stamp and temporary files. --- 2405,2415 ---- -rm -f $(STAGESTUFF) -rm -rf libgcc # Delete the temporary source copies for cross compilation. ! -rm -f $(HOST_PREFIX_1)rtl.c $(HOST_PREFIX_1)print-rtl.c ! -rm -f $(HOST_PREFIX_1)bitmap.c $(HOST_PREFIX_1)errors.c ! -rm -f $(HOST_PREFIX_1)ggc-none.c # Delete the temp files made in the course of building libgcc.a. ! -rm -f xlimits.h # Delete other built files. -rm -f t-float.h-cross xsys-protos.hT # Delete the stamp and temporary files. *************** mostlyclean: $(INTL_MOSTLYCLEAN) lang.mo *** 2409,2415 **** -rm -f *.[0-9][0-9].* */*.[0-9][0-9].* # Delete some files made during installation. -rm -f specs float.h-* enquire SYSCALLS.c.X SYSCALLS.c ! -rm -f collect collect2 mips-tfile mips-tdump alloca.s # Delete files generated for fixproto -rm -rf fix-header$(build_exeext) xsys-protos.h deduced.h tmp-deduced.h \ gen-protos$(build_exeext) fixproto.list fixtmp.* fixhdr.ready --- 2419,2425 ---- -rm -f *.[0-9][0-9].* */*.[0-9][0-9].* # Delete some files made during installation. -rm -f specs float.h-* enquire SYSCALLS.c.X SYSCALLS.c ! -rm -f collect collect2 mips-tfile mips-tdump # Delete files generated for fixproto -rm -rf fix-header$(build_exeext) xsys-protos.h deduced.h tmp-deduced.h \ gen-protos$(build_exeext) fixproto.list fixtmp.* fixhdr.ready *************** mostlyclean: $(INTL_MOSTLYCLEAN) lang.mo *** 2428,2434 **** # that don't exist in the distribution. INTL_CLEAN = intl.clean clean: mostlyclean $(INTL_CLEAN) lang.clean ! -rm -f libgcc.a libgcc_s$(SHLIB_EXT) -rm -f config.h tconfig.h hconfig.h tm_p.h -rm -f cs-* -rm -rf libgcc --- 2438,2444 ---- # that don't exist in the distribution. INTL_CLEAN = intl.clean clean: mostlyclean $(INTL_CLEAN) lang.clean ! -rm -f libgcc.a libgcc_eh.a libgcc_s$(SHLIB_EXT) libgcc_s$(SHLIB_EXT).1 -rm -f config.h tconfig.h hconfig.h tm_p.h -rm -f cs-* -rm -rf libgcc *************** distclean: clean $(INTL_DISTCLEAN) lang. *** 2466,2476 **** -rm -f site.exp site.bak testsuite/site.exp testsuite/site.bak -rm -f testsuite/{gcc,g++}.{log,sum} -rm -f intl/libintl.h libintl.h ! -rm -f cxxmain.c splay-tree.c obstack.c alloca.c hashtab.c safe-ctype.c ! -rm -f mklibgcc libgcc.map gccbug configargs.h -rm -f gcov.pod -rm -f fixinc/Makefile ! -rmdir cp f java objc fixinc intl po 2>/dev/null # Delete anything likely to be found in the source directory # that shouldn't be in the distribution. --- 2476,2486 ---- -rm -f site.exp site.bak testsuite/site.exp testsuite/site.bak -rm -f testsuite/{gcc,g++}.{log,sum} -rm -f intl/libintl.h libintl.h ! -rm -f cxxmain.c ! -rm -f mklibgcc gccbug .gdbinit configargs.h -rm -f gcov.pod -rm -f fixinc/Makefile ! -rmdir ada cp f java objc fixinc intl po 2>/dev/null # Delete anything likely to be found in the source directory # that shouldn't be in the distribution. *************** maintainer-clean: *** 2503,2509 **** -rm -f c-parse.y c-parse.c c-parse.output TAGS -rm -f cpp.??s cpp.*aux -rm -f gcc.??s gcc.*aux ! -rm -f $(docdir)/cpp.info* $(docdir)/gcc.info* -rm -f $(docdir)/cppinternals.info* -rm -f $(docdir)/gcov.1 $(docdir)/cpp.1 $(docdir)/gcc.1 -rm -f $(docdir)/fsf-funding.7 $(docdir)/gfdl.7 $(docdir)/gpl.7 --- 2513,2519 ---- -rm -f c-parse.y c-parse.c c-parse.output TAGS -rm -f cpp.??s cpp.*aux -rm -f gcc.??s gcc.*aux ! -rm -f $(docdir)/cpp.info* $(docdir)/gcc.info* $(docdir)/gccint.info* -rm -f $(docdir)/cppinternals.info* -rm -f $(docdir)/gcov.1 $(docdir)/cpp.1 $(docdir)/gcc.1 -rm -f $(docdir)/fsf-funding.7 $(docdir)/gfdl.7 $(docdir)/gpl.7 *************** maintainer-clean: *** 2511,2539 **** # Entry points `install' and `uninstall'. # Also use `install-collect2' to install collect2 when the config files don't. - # The semicolon is to prevent the install.sh -> install default rule - # from doing anything. Having it run true helps avoid problems and - # noise from versions of make which don't like to have null commands. - install: $(INSTALL_TARGET) ; @true - # Copy the compiler files into directories where they will be run. # Install the driver last so that the window when things are # broken is small. ! install-normal: install-common $(INSTALL_HEADERS) $(INSTALL_LIBGCC) \ ! $(INSTALL_CPP) install-man install-info intl.install \ lang.install-normal install-driver - # Do nothing while making gcc with a cross-compiler. The person who - # makes gcc for the target machine has to know how to put a complete - # gcc together by hand. - install-build: force - @echo You have to install gcc on your target machine by hand. - - # Run this on the target machine - # to finish installation of cross compiler. - # This is not used anymore now that float.h does not depend on enquire. - install-cross-rest: install-float-h-cross - # Handle cpp installation. install-cpp: cpp$(exeext) -if [ -f gcc-cross$(exeext) ] ; then \ --- 2521,2533 ---- # Entry points `install' and `uninstall'. # Also use `install-collect2' to install collect2 when the config files don't. # Copy the compiler files into directories where they will be run. # Install the driver last so that the window when things are # broken is small. ! install: install-common $(INSTALL_HEADERS) $(INSTALL_LIBGCC) \ ! $(INSTALL_CPP) install-man install-info intl.install install-@POSUB@ \ lang.install-normal install-driver # Handle cpp installation. install-cpp: cpp$(exeext) -if [ -f gcc-cross$(exeext) ] ; then \ *************** uninstall-cpp: *** 2560,2577 **** rm -f $(prefix)/$(cpp_install_dir)/$(CPP_CROSS_NAME)$(exeext); \ else true; fi - # Install float.h for cross compiler. - # Run this on the target machine! - # This is not used anymore now that float.h does not depend on enquire. - install-float-h-cross: installdirs - # if [ -f enquire ] ; then true; else false; fi - # Note: don't use -. We should fail right away if enquire was not made. - ./enquire -f > $(tmpdir)/float.h - -rm -f $(libsubdir)/include/float.h - $(INSTALL_DATA) $(tmpdir)/float.h $(libsubdir)/include/float.h - -rm -f $(tmpdir)/float.h - chmod a-x $(libsubdir)/include/float.h - # Create the installation directories. installdirs: -if [ -d $(prefix) ] ; then true ; else mkdir $(prefix) ; chmod a+rx $(prefix) ; fi --- 2554,2559 ---- *************** installdirs: *** 2597,2603 **** -if [ -d $(man7dir) ] ; then true ; else mkdir $(man7dir) ; chmod a+rx $(man7dir) ; fi # Install the compiler executables built during cross compilation. ! install-common: native installdirs $(EXTRA_PARTS) lang.install-common for file in $(COMPILERS); do \ if [ -f $$file ] ; then \ rm -f $(libsubdir)/$$file; \ --- 2579,2585 ---- -if [ -d $(man7dir) ] ; then true ; else mkdir $(man7dir) ; chmod a+rx $(man7dir) ; fi # Install the compiler executables built during cross compilation. ! install-common: native $(EXTRA_PARTS) lang.install-common for file in $(COMPILERS); do \ if [ -f $$file ] ; then \ rm -f $(libsubdir)/$$file; \ *************** install-common: native installdirs $(EXT *** 2652,2662 **** rm -f $(bindir)/gcov$(exeext); \ $(INSTALL_PROGRAM) gcov$(exeext) $(bindir)/$(GCOV_INSTALL_NAME)$(exeext); \ fi ! $(INSTALL_PROGRAM) gccbug $(bindir)/$(GCCBUG_INSTALL_NAME) # Install the driver program as $(target_alias)-gcc # and also as either gcc (if native) or $(gcc_tooldir)/bin/gcc. ! install-driver: xgcc$(exeext) -if [ -f gcc-cross$(exeext) ] ; then \ rm -f $(bindir)/$(GCC_CROSS_NAME)$(exeext); \ $(INSTALL_PROGRAM) gcc-cross$(exeext) $(bindir)/$(GCC_CROSS_NAME)$(exeext); \ --- 2634,2644 ---- rm -f $(bindir)/gcov$(exeext); \ $(INSTALL_PROGRAM) gcov$(exeext) $(bindir)/$(GCOV_INSTALL_NAME)$(exeext); \ fi ! $(INSTALL_SCRIPT) gccbug $(bindir)/$(GCCBUG_INSTALL_NAME) # Install the driver program as $(target_alias)-gcc # and also as either gcc (if native) or $(gcc_tooldir)/bin/gcc. ! install-driver: installdirs xgcc$(exeext) -if [ -f gcc-cross$(exeext) ] ; then \ rm -f $(bindir)/$(GCC_CROSS_NAME)$(exeext); \ $(INSTALL_PROGRAM) gcc-cross$(exeext) $(bindir)/$(GCC_CROSS_NAME)$(exeext); \ *************** install-driver: xgcc$(exeext) *** 2669,2675 **** $(INSTALL_PROGRAM) xgcc$(exeext) $(bindir)/$(GCC_INSTALL_NAME)$(exeext); \ rm -f $(bindir)/$(target_alias)-gcc-1$(exeext); \ $(LN) $(bindir)/$(GCC_INSTALL_NAME)$(exeext) $(bindir)/$(target_alias)-gcc-1$(exeext); \ ! mv $(bindir)/$(target_alias)-gcc-1$(exeext) $(bindir)/$(target_alias)-gcc$(exeext); \ fi # Install the info files. --- 2651,2657 ---- $(INSTALL_PROGRAM) xgcc$(exeext) $(bindir)/$(GCC_INSTALL_NAME)$(exeext); \ rm -f $(bindir)/$(target_alias)-gcc-1$(exeext); \ $(LN) $(bindir)/$(GCC_INSTALL_NAME)$(exeext) $(bindir)/$(target_alias)-gcc-1$(exeext); \ ! mv $(bindir)/$(target_alias)-gcc-1$(exeext) $(bindir)/$(GCC_TARGET_INSTALL_NAME)$(exeext); \ fi # Install the info files. *************** install-driver: xgcc$(exeext) *** 2677,2693 **** # to do the install. install-info: doc installdirs lang.install-info -rm -f $(infodir)/cpp.info* $(infodir)/gcc.info* ! -rm -f $(infodir)/cppinternals.info* if [ -f $(docdir)/gcc.info ]; then \ for f in $(docdir)/cpp.info* $(docdir)/gcc.info* \ ! $(docdir)/cppinternals.info*; do \ realfile=`echo $$f | sed -e 's|.*/\([^/]*\)$$|\1|'`; \ $(INSTALL_DATA) $$f $(infodir)/$$realfile; \ done; \ else true; fi -if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \ if [ -f $(infodir)/dir ] ; then \ ! for f in cpp.info gcc.info cppinternals.info; do \ if [ -f $(infodir)/$$f ]; then \ install-info --dir-file=$(infodir)/dir $(infodir)/$$f; \ else true; fi; \ --- 2659,2675 ---- # to do the install. install-info: doc installdirs lang.install-info -rm -f $(infodir)/cpp.info* $(infodir)/gcc.info* ! -rm -f $(infodir)/cppinternals.info* $(infodir)/gccint.info* if [ -f $(docdir)/gcc.info ]; then \ for f in $(docdir)/cpp.info* $(docdir)/gcc.info* \ ! $(docdir)/cppinternals.info* $(docdir)/gccint.info*; do \ realfile=`echo $$f | sed -e 's|.*/\([^/]*\)$$|\1|'`; \ $(INSTALL_DATA) $$f $(infodir)/$$realfile; \ done; \ else true; fi -if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \ if [ -f $(infodir)/dir ] ; then \ ! for f in cpp.info gcc.info gccint.info cppinternals.info; do \ if [ -f $(infodir)/$$f ]; then \ install-info --dir-file=$(infodir)/dir $(infodir)/$$f; \ else true; fi; \ *************** install-info: doc installdirs lang.insta *** 2695,2701 **** else true; fi; \ else true; fi; -chmod a-x $(infodir)/cpp.info* $(infodir)/gcc.info* ! -chmod a-x $(infodir)/cppinternals.info* # Install the man pages. install-man: installdirs $(GENERATED_MANPAGES) lang.install-man --- 2677,2683 ---- else true; fi; \ else true; fi; -chmod a-x $(infodir)/cpp.info* $(infodir)/gcc.info* ! -chmod a-x $(infodir)/cppinternals.info* $(infodir)/gccint.info* # Install the man pages. install-man: installdirs $(GENERATED_MANPAGES) lang.install-man *************** install-libgcc: libgcc.mk libgcc.a insta *** 2736,2747 **** AR_FOR_TARGET="$(AR_FOR_TARGET)" \ AR_CREATE_FOR_TARGET="$(AR_CREATE_FOR_TARGET)" \ AR_FLAGS_FOR_TARGET="$(AR_FLAGS_FOR_TARGET)" \ - OLDCC="$(OLDCC)" CCLIBFLAGS="$(CCLIBFLAGS)" \ CFLAGS="$(CFLAGS) $(WARN_CFLAGS)" \ RANLIB_TEST_FOR_TARGET="$(RANLIB_TEST_FOR_TARGET)" \ NM_FOR_TARGET="$(NM_FOR_TARGET)" AWK="$(AWK)" \ LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS)" \ ! INCLUDES="$(INCLUDES)" MAYBE_USE_COLLECT2="$(MAYBE_USE_COLLECT2)" \ CONFIG_H="$(TCONFIG_H)" MACHMODE_H="$(MACHMODE_H)" \ LIB1ASMSRC='$(LIB1ASMSRC)' \ MAKEOVERRIDES= \ --- 2718,2728 ---- AR_FOR_TARGET="$(AR_FOR_TARGET)" \ AR_CREATE_FOR_TARGET="$(AR_CREATE_FOR_TARGET)" \ AR_FLAGS_FOR_TARGET="$(AR_FLAGS_FOR_TARGET)" \ CFLAGS="$(CFLAGS) $(WARN_CFLAGS)" \ RANLIB_TEST_FOR_TARGET="$(RANLIB_TEST_FOR_TARGET)" \ NM_FOR_TARGET="$(NM_FOR_TARGET)" AWK="$(AWK)" \ LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS)" \ ! INCLUDES="$(INCLUDES)" \ CONFIG_H="$(TCONFIG_H)" MACHMODE_H="$(MACHMODE_H)" \ LIB1ASMSRC='$(LIB1ASMSRC)' \ MAKEOVERRIDES= \ *************** install-multilib: stmp-multilib installd *** 2763,2774 **** AR_FOR_TARGET="$(AR_FOR_TARGET)" \ AR_CREATE_FOR_TARGET="$(AR_CREATE_FOR_TARGET)" \ AR_FLAGS_FOR_TARGET="$(AR_FLAGS_FOR_TARGET)" \ - OLDCC="$(OLDCC)" CCLIBFLAGS="$(CCLIBFLAGS)" \ CFLAGS="$(CFLAGS) $(WARN_CFLAGS)" \ RANLIB_TEST_FOR_TARGET="$(RANLIB_TEST_FOR_TARGET)" \ NM_FOR_TARGET="$(NM_FOR_TARGET)" AWK="$(AWK)" \ LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS)" \ ! INCLUDES="$(INCLUDES)" MAYBE_USE_COLLECT2="$(MAYBE_USE_COLLECT2)" \ CONFIG_H="$(CONFIG_H)" MACHMODE_H="$(MACHMODE_H)" \ LIB1ASMSRC='$(LIB1ASMSRC)' \ MAKEOVERRIDES= \ --- 2744,2754 ---- AR_FOR_TARGET="$(AR_FOR_TARGET)" \ AR_CREATE_FOR_TARGET="$(AR_CREATE_FOR_TARGET)" \ AR_FLAGS_FOR_TARGET="$(AR_FLAGS_FOR_TARGET)" \ CFLAGS="$(CFLAGS) $(WARN_CFLAGS)" \ RANLIB_TEST_FOR_TARGET="$(RANLIB_TEST_FOR_TARGET)" \ NM_FOR_TARGET="$(NM_FOR_TARGET)" AWK="$(AWK)" \ LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS)" \ ! INCLUDES="$(INCLUDES)" \ CONFIG_H="$(CONFIG_H)" MACHMODE_H="$(MACHMODE_H)" \ LIB1ASMSRC='$(LIB1ASMSRC)' \ MAKEOVERRIDES= \ *************** install-multilib: stmp-multilib installd *** 2779,2785 **** -f libgcc.mk install # Install all the header files built in the include subdirectory. ! install-headers: install-include-dir $(INSTALL_HEADERS_DIR) # Fix symlinks to absolute paths in the installed include directory to # point to the installed directory, not the build directory. # Don't need to use LN_S here since we really do need ln -s and no substitutes. --- 2759,2765 ---- -f libgcc.mk install # Install all the header files built in the include subdirectory. ! install-headers: $(INSTALL_HEADERS_DIR) # Fix symlinks to absolute paths in the installed include directory to # point to the installed directory, not the build directory. # Don't need to use LN_S here since we really do need ln -s and no substitutes. *************** install-headers-cpio: stmp-int-hdrs $(ST *** 2819,2824 **** --- 2799,2808 ---- cd `pwd`/include ; \ find . -print | cpio -pdum $(libsubdir)/include + # Install the include directory using cp. + install-headers-cp: stmp-int-hdrs $(STMP_FIXPROTO) install-include-dir + cp -p -r include $(libsubdir) + # Use this target to install the program `collect2' under the name `collect2'. install-collect2: collect2 installdirs $(INSTALL_PROGRAM) collect2$(exeext) $(libsubdir)/collect2$(exeext) *************** uninstall: intl.uninstall lang.uninstall *** 2841,2847 **** -rm -rf $(man1dir)/protoize$(man1ext) -rm -rf $(man1dir)/unprotoize$(man1ext) -rm -f $(infodir)/cpp.info* $(infodir)/gcc.info* ! -rm -f $(infodir)/cppinternals.info* # # These targets are for the dejagnu testsuites. The file site.exp # contains global variables that all the testsuites will use. --- 2825,2831 ---- -rm -rf $(man1dir)/protoize$(man1ext) -rm -rf $(man1dir)/unprotoize$(man1ext) -rm -f $(infodir)/cpp.info* $(infodir)/gcc.info* ! -rm -f $(infodir)/cppinternals.info* $(infodir)/gccint.info* # # These targets are for the dejagnu testsuites. The file site.exp # contains global variables that all the testsuites will use. *************** site.exp: ./config.status Makefile *** 2866,2871 **** --- 2850,2856 ---- # CFLAGS is set even though it's empty to show we reserve the right to set it. @echo "set CFLAGS \"\"" >> ./tmp0 @echo "set CXXFLAGS \"-I$(objdir)/../$(target_subdir)libio -I\$$srcdir/../libg++/src -I\$$srcdir/../libio -I\$$srcdir/../libstdc++ -I\$$srcdir/../libstdc++/stl -L$(objdir)/../$(target_subdir)libg++ -L$(objdir)/../$(target_subdir)libstdc++\"" >> ./tmp0 + @echo "set TESTING_IN_BUILD_TREE 1" >> ./tmp0 @echo "set HAVE_LIBSTDCXX_V3 1" >> ./tmp0 # If newlib has been configured, we need to pass -B to gcc so it can find # newlib's crt0.o if it exists. This will cause a "path prefix not used" *************** site.exp: ./config.status Makefile *** 2896,2902 **** -e '1,/^## All variables above are.*##/ d' >> site.exp -@rm -f ./tmp? ! CHECK_TARGETS = check-gcc check-g++ check-g77 check-objc @CHECK_PO@ check: $(CHECK_TARGETS) --- 2881,2896 ---- -e '1,/^## All variables above are.*##/ d' >> site.exp -@rm -f ./tmp? ! CHECK_TARGETS = check-gcc check-fixinc @check_languages@ ! ! check-c++ : check-g++ ! check-f77 : check-g77 ! check-java : ! ! check-fixinc : ! if (autogen --ver=v) > /dev/null 2>&1 ; \ ! then cd fixinc && $(MAKE) check ; \ ! else true ; fi check: $(CHECK_TARGETS) *************** check-objc: $(TESTSUITEDIR)/site.exp *** 2960,2970 **** export TCL_LIBRARY ; fi ; \ $(RUNTEST) --tool objc $(RUNTESTFLAGS)) ! check-po: ! if test -f cp/Makefile && test -f f/Makefile && \ ! test -f java/Makefile && test -f objc/Makefile; then \ ! $(MAKE) -C po check-po; \ ! fi # These exist for maintenance purposes. --- 2954,2968 ---- export TCL_LIBRARY ; fi ; \ $(RUNTEST) --tool objc $(RUNTESTFLAGS)) ! check-consistency: testsuite/site.exp ! -rootme=`pwd`; export rootme; \ ! srcdir=`cd ${srcdir}; pwd` ; export srcdir ; \ ! cd testsuite; \ ! EXPECT=${EXPECT} ; export EXPECT ; \ ! if [ -f $${rootme}/../expect/expect ] ; then \ ! TCL_LIBRARY=`cd .. ; cd ${srcdir}/../tcl/library ; pwd` ; \ ! export TCL_LIBRARY ; fi ; \ ! $(RUNTEST) --tool consistency $(RUNTESTFLAGS) # These exist for maintenance purposes. *************** stage1_copy: stage1_build *** 3010,3020 **** $(STAMP) stage1_copy echo stage2_build > stage_last - # This used to define ALLOCA as empty, but that would lead to bad results - # for a subsequent `make install' since that would not have ALLOCA empty. - # To prevent `make install' from compiling alloca.o and then relinking cc1 - # because alloca.o is newer, we permit these recursive makes to compile - # alloca.o. Then cc1 is newer, so it won't have to be relinked. stage2_build: stage1_copy $(MAKE) CC="stage1/xgcc$(exeext) -Bstage1/ -B$(build_tooldir)/bin/" \ STAGE_PREFIX=stage1/ \ --- 3008,3013 ---- *************** bootstrap4 bootstrap4-lean: stage4_build *** 3079,3084 **** --- 3072,3080 ---- unstage1 unstage2 unstage3 unstage4: -set -vx; stage=`echo $@ | sed -e 's/un//'`; \ + rm -f $$stage/as$(exeext); \ + rm -f $$stage/ld$(exeext); \ + rm -f $$stage/collect-ld$(exeext); \ if test -d $$stage; then \ mv $$stage/* . 2>/dev/null; \ for i in `cd $$stage; echo *` ; do \ *************** stage1-start: *** 3204,3217 **** -mv intl/*$(objext) stage1/intl # Copy as/ld if they exist to stage dir, so that running xgcc from the stage # dir will work properly. ! -if [ -f as$(exeext) ] ; then $(LN_S) ../as$(exeext) stage1 ; else true ; fi ! -if [ -f ld$(exeext) ] ; then $(LN_S) ../ld$(exeext) stage1 ; else true ; fi ! -if [ -f collect-ld$(exeext) ] ; then $(LN_S) ../collect-ld$(exeext) stage1 ; else true ; fi ! -rm -f stage1/libgcc.a -cp libgcc.a stage1 -if $(RANLIB_TEST_FOR_TARGET) ; then \ $(RANLIB_FOR_TARGET) stage1/libgcc.a; \ else true; fi -for f in .. $(EXTRA_MULTILIB_PARTS); do if [ x$${f} != x.. ]; then \ cp stage1/$${f} . ; \ else true; \ --- 3200,3217 ---- -mv intl/*$(objext) stage1/intl # Copy as/ld if they exist to stage dir, so that running xgcc from the stage # dir will work properly. ! -if [ -f as$(exeext) ] ; then (cd stage1 && $(LN_S) ../as$(exeext) .) ; else true ; fi ! -if [ -f ld$(exeext) ] ; then (cd stage1 && $(LN_S) ../ld$(exeext) .) ; else true ; fi ! -if [ -f collect-ld$(exeext) ] ; then (cd stage1 && $(LN_S) ../collect-ld$(exeext) .) ; else true ; fi ! -rm -f stage1/libgcc.a stage1/libgcc_eh.a -cp libgcc.a stage1 -if $(RANLIB_TEST_FOR_TARGET) ; then \ $(RANLIB_FOR_TARGET) stage1/libgcc.a; \ else true; fi + -if [ -f libgcc_eh.a ] ; then cp libgcc_eh.a stage1; \ + if $(RANLIB_TEST_FOR_TARGET) ; then \ + $(RANLIB_FOR_TARGET) stage1/libgcc_eh.a; \ + else true; fi; fi -for f in .. $(EXTRA_MULTILIB_PARTS); do if [ x$${f} != x.. ]; then \ cp stage1/$${f} . ; \ else true; \ *************** stage2-start: *** 3229,3242 **** -mv intl/*$(objext) stage2/intl # Copy as/ld if they exist to stage dir, so that running xgcc from the stage # dir will work properly. ! -if [ -f as$(exeext) ] ; then $(LN_S) ../as$(exeext) stage2 ; else true ; fi ! -if [ -f ld$(exeext) ] ; then $(LN_S) ../ld$(exeext) stage2 ; else true ; fi ! -if [ -f collect-ld ] ; then $(LN_S) ../collect-ld$(exeext) stage2 ; else true ; fi ! -rm -f stage2/libgcc.a -cp libgcc.a stage2 -if $(RANLIB_TEST_FOR_TARGET) ; then \ $(RANLIB_FOR_TARGET) stage2/libgcc.a; \ else true; fi -for f in .. $(EXTRA_MULTILIB_PARTS); do if [ x$${f} != x.. ]; then \ cp stage2/$${f} . ; \ else true; \ --- 3229,3246 ---- -mv intl/*$(objext) stage2/intl # Copy as/ld if they exist to stage dir, so that running xgcc from the stage # dir will work properly. ! -if [ -f as$(exeext) ] ; then (cd stage2 && $(LN_S) ../as$(exeext) .) ; else true ; fi ! -if [ -f ld$(exeext) ] ; then (cd stage2 && $(LN_S) ../ld$(exeext) .) ; else true ; fi ! -if [ -f collect-ld$(exeext) ] ; then (cd stage2 && $(LN_S) ../collect-ld$(exeext) .) ; else true ; fi ! -rm -f stage2/libgcc.a stage2/libgcc_eh.a -cp libgcc.a stage2 -if $(RANLIB_TEST_FOR_TARGET) ; then \ $(RANLIB_FOR_TARGET) stage2/libgcc.a; \ else true; fi + -if [ -f libgcc_eh.a ] ; then cp libgcc_eh.a stage2; \ + if $(RANLIB_TEST_FOR_TARGET) ; then \ + $(RANLIB_FOR_TARGET) stage2/libgcc_eh.a; \ + else true; fi; fi -for f in .. $(EXTRA_MULTILIB_PARTS); do if [ x$${f} != x.. ]; then \ cp stage2/$${f} . ; \ else true; \ *************** stage3-start: *** 3254,3267 **** -mv intl/*$(objext) stage3/intl # Copy as/ld if they exist to stage dir, so that running xgcc from the stage # dir will work properly. ! -if [ -f as$(exeext) ] ; then $(LN_S) ../as$(exeext) stage3 ; else true ; fi ! -if [ -f ld$(exeext) ] ; then $(LN_S) ../ld$(exeext) stage3 ; else true ; fi ! -if [ -f collect-ld$(exeext) ] ; then $(LN_S) ../collect-ld$(exeext) stage3 ; else true ; fi ! -rm -f stage3/libgcc.a -cp libgcc.a stage3 -if $(RANLIB_TEST_FOR_TARGET) ; then \ $(RANLIB_FOR_TARGET) stage3/libgcc.a; \ else true; fi -for f in .. $(EXTRA_MULTILIB_PARTS); do if [ x$${f} != x.. ]; then \ cp stage3/$${f} . ; \ else true; \ --- 3258,3275 ---- -mv intl/*$(objext) stage3/intl # Copy as/ld if they exist to stage dir, so that running xgcc from the stage # dir will work properly. ! -if [ -f as$(exeext) ] ; then (cd stage3 && $(LN_S) ../as$(exeext) .) ; else true ; fi ! -if [ -f ld$(exeext) ] ; then (cd stage3 && $(LN_S) ../ld$(exeext) .) ; else true ; fi ! -if [ -f collect-ld$(exeext) ] ; then (cd stage3 && $(LN_S) ../collect-ld$(exeext) .) ; else true ; fi ! -rm -f stage3/libgcc.a stage3/libgcc_eh.a -cp libgcc.a stage3 -if $(RANLIB_TEST_FOR_TARGET) ; then \ $(RANLIB_FOR_TARGET) stage3/libgcc.a; \ else true; fi + -if [ -f libgcc_eh.a ] ; then cp libgcc_eh.a stage3; \ + if $(RANLIB_TEST_FOR_TARGET) ; then \ + $(RANLIB_FOR_TARGET) stage3/libgcc_eh.a; \ + else true; fi; fi -for f in .. $(EXTRA_MULTILIB_PARTS); do if [ x$${f} != x.. ]; then \ cp stage3/$${f} . ; \ else true; \ *************** stage4-start: *** 3279,3292 **** -mv intl/*$(objext) stage4/intl # Copy as/ld if they exist to stage dir, so that running xgcc from the stage # dir will work properly. ! -if [ -f as$(exeext) ] ; then $(LN_S) ../as$(exeext) stage4 ; else true ; fi ! -if [ -f ld$(exeext) ] ; then $(LN_S) ../ld$(exeext) stage4 ; else true ; fi ! -if [ -f collect-ld$(exeext) ] ; then $(LN_S) ../collect-ld$(exeext) stage4 ; else true ; fi ! -rm -f stage4/libgcc.a -cp libgcc.a stage4 -if $(RANLIB_TEST_FOR_TARGET) ; then \ $(RANLIB_FOR_TARGET) stage4/libgcc.a; \ else true; fi -for f in .. $(EXTRA_MULTILIB_PARTS); do if [ x$${f} != x.. ]; then \ cp stage4/$${f} . ; \ else true; \ --- 3287,3304 ---- -mv intl/*$(objext) stage4/intl # Copy as/ld if they exist to stage dir, so that running xgcc from the stage # dir will work properly. ! -if [ -f as$(exeext) ] ; then (cd stage4 && $(LN_S) ../as$(exeext) .) ; else true ; fi ! -if [ -f ld$(exeext) ] ; then (cd stage4 && $(LN_S) ../ld$(exeext) .) ; else true ; fi ! -if [ -f collect-ld$(exeext) ] ; then (cd stage4 && $(LN_S) ../collect-ld$(exeext) .) ; else true ; fi ! -rm -f stage4/libgcc.a stage4/libgcc_eh.a -cp libgcc.a stage4 -if $(RANLIB_TEST_FOR_TARGET) ; then \ $(RANLIB_FOR_TARGET) stage4/libgcc.a; \ else true; fi + -if [ -f libgcc_eh.a ] ; then cp libgcc_eh.a stage4; \ + if $(RANLIB_TEST_FOR_TARGET) ; then \ + $(RANLIB_FOR_TARGET) stage4/libgcc_eh.a; \ + else true; fi; fi -for f in .. $(EXTRA_MULTILIB_PARTS); do if [ x$${f} != x.. ]; then \ cp stage4/$${f} . ; \ else true; \ *************** enquire.o: $(srcdir)/enquire.c $(GCC_PAS *** 3349,3355 **** fi; \ $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(ALL_CPPFLAGS) $(ENQUIRE_CFLAGS) \ -DSYS_FLOAT_H_WRAP=$$SYS_FLOAT_H_WRAP \ ! -I. -c $(srcdir)/enquire.c # Create float.h source for the native machine. # Make it empty if we can use the system float.h without changes. --- 3361,3367 ---- fi; \ $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(ALL_CPPFLAGS) $(ENQUIRE_CFLAGS) \ -DSYS_FLOAT_H_WRAP=$$SYS_FLOAT_H_WRAP \ ! -I. -c $(srcdir)/enquire.c $(OUTPUT_OPTION) # Create float.h source for the native machine. # Make it empty if we can use the system float.h without changes. *************** float.h-cross: *** 3366,3368 **** --- 3378,3452 ---- echo "#error float.h values not known for cross-compiler" >> t-float.h-cross echo "#endif" >> t-float.h-cross mv t-float.h-cross float.h-cross + + # Rules for generating translated message descriptions. + # Disabled by autoconf if the tools are not available. + + XGETTEXT = @XGETTEXT@ + GMSGFMT = @GMSGFMT@ + MSGMERGE = msgmerge + + PACKAGE = @PACKAGE@ + CATALOGS = @CATALOGS@ + + .PHONY: build- install- build-po install-po update-po + + # Dummy rules to deal with dependencies produced by use of + # "build-@POSUB@" and "install-@POSUB@" above, when NLS is disabled. + build-: ; @true + install-: ; @true + + build-po: $(CATALOGS) + + # This notation should be acceptable to all Make implementations used + # by people who are interested in updating .po files. + update-po: $(CATALOGS:.gmo=.pox) + + # N.B. We do not attempt to copy these into $(srcdir). The snapshot + # script does that. + .po.gmo: + -test -d po || mkdir po + $(GMSGFMT) --statistics -o $@ $< + + # The new .po has to be gone over by hand, so we deposit it into + # build/po with a different extension. + # If build/po/$(PACKAGE).pot exists, use it (it was just created), + # else use the one in srcdir. + .po.pox: + -test -d po || mkdir po + $(MSGMERGE) $< `if test -f po/$(PACKAGE).pot; \ + then echo po/$(PACKAGE).pot; \ + else echo $(srcdir)/po/$(PACKAGE).pot; fi` -o $@ + + # This rule has to look for .gmo modules in both srcdir and + # the cwd, and has to check that we actually have a catalog + # for each language, in case they weren't built or included + # with the distribution. + install-po: + $(SHELL) $(srcdir)/mkinstalldirs $(DESTDIR)$(datadir) + for cat in $(CATALOGS); do \ + lang=`basename $$cat | sed 's/\.gmo$$//'`; \ + if [ -f $$cat ]; then :; \ + elif [ -f $(srcdir)/$$cat ]; then cat=$(srcdir)/$$cat; \ + else continue; \ + fi; \ + dir=$(localedir)/$$lang/LC_MESSAGES; \ + echo $(SHELL) $(srcdir)/mkinstalldirs $(DESTDIR)$$dir; \ + $(SHELL) $(srcdir)/mkinstalldirs $(DESTDIR)$$dir || exit 1; \ + echo $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \ + $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \ + done + + # Rule for regenerating the message template (gcc.pot). + # Instead of forcing everyone to edit POTFILES.in, which proved impractical, + # this rule has no dependencies and always regenerates gcc.pot. This is + # relatively harmless since the .po files do not directly depend on it. + # Note that exgettext has an awk script embedded in it which requires a + # fairly modern (POSIX-compliant) awk. + # The .pot file is left in the build directory. + $(PACKAGE).pot: po/$(PACKAGE).pot + po/$(PACKAGE).pot: force + -test -d po || mkdir po + $(MAKE) po-generated + AWK=$(AWK) $(SHELL) $(srcdir)/po/exgettext \ + $(XGETTEXT) $(PACKAGE) $(srcdir) diff -Nrc3pad gcc-3.0.4/gcc/NEWS gcc-3.1/gcc/NEWS *** gcc-3.0.4/gcc/NEWS Wed Feb 20 19:41:14 2002 --- gcc-3.1/gcc/NEWS Wed May 15 02:40:30 2002 *************** on the line of development that led to G *** 7,22 **** ====================================================================== http://gcc.gnu.org/gcc-3.0/gcc-3.0.html - June 18, 2001: GCC 3.0 has been released. - August 20, 2001: GCC 3.0.1 has been released. - October 25, 2001: GCC 3.0.2 has been released. - December 20, 2001: GCC 3.0.3 has been released. - February 20, 2002: GCC 3.0.4 has been released. - _________________________________________________________________ - GCC 3.0.4 ! February 20, 2001 The [1]GNU project and the GCC developers are pleased to announce the release of GCC 3.0.4, which is a bug-fix release for the GCC 3.0 --- 7,15 ---- ====================================================================== http://gcc.gnu.org/gcc-3.0/gcc-3.0.html GCC 3.0.4 ! February 20, 2002 The [1]GNU project and the GCC developers are pleased to announce the release of GCC 3.0.4, which is a bug-fix release for the GCC 3.0 *************** http://gcc.gnu.org/gcc-3.0/gcc-3.0.html *** 47,59 **** sites, or [10]our CVS server. _________________________________________________________________ Please send FSF & GNU inquiries & questions to [11]gnu@gnu.org. There are also [12]other ways to contact the FSF. These pages are maintained by [13]The GCC team. ! Please send comments on these web pages and GCC to [14]gcc@gnu.org or ! [15]gcc@gcc.gnu.org, send other questions to [16]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. --- 40,61 ---- sites, or [10]our CVS server. _________________________________________________________________ + Previous 3.0.x Releases + + December 20, 2001: GCC 3.0.3 has been released. + October 25, 2001: GCC 3.0.2 has been released. + August 20, 2001: GCC 3.0.1 has been released. + June 18, 2001: GCC 3.0 has been released. + _________________________________________________________________ + Please send FSF & GNU inquiries & questions to [11]gnu@gnu.org. There are also [12]other ways to contact the FSF. These pages are maintained by [13]The GCC team. ! ! Please send comments on these web pages and GCC to [14]gcc@gnu.org ! or [15]gcc@gcc.gnu.org, send other questions to [16]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. *************** http://gcc.gnu.org/gcc-3.0/gcc-3.0.html *** 61,67 **** Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2002-02-20. References --- 63,69 ---- Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2002-05-05 [17]Valid XHTML 1.0 References *************** References *** 81,241 **** 14. mailto:gcc@gnu.org 15. mailto:gcc@gcc.gnu.org 16. mailto:gnu@gnu.org ====================================================================== http://gcc.gnu.org/gcc-3.0/features.html GCC 3.0 New Features ! * General Optimizer Improvements: ! + [1]Basic block reordering pass. ! + New if-conversion pass with support for conditional ! (predicated) execution. ! + New tail call and sibling call elimination optimizations. ! + New register renaming pass. ! + New (experimental) [2]static single assignment (SSA) ! representation support. ! + New dead-code elimination pass implemented using the SSA ! representation. ! + [3]Global null pointer test elimination. ! + [4]Global code hoisting/unification. ! + More builtins and optimizations for stdio.h, string.h and old ! BSD functions, as well as for ISO C99 functions. ! + New builtin __builtin_expect for giving hints to the branch ! predictor. ! * New Languages and Language specific improvements: ! + The GNU Compiler for the Java(TM) language (GCJ) is now ! integrated and supported, including the run-time library ! containing most common non-GUI Java classes, a bytecode ! interpreter, and the Boehm conservative garbage collector. ! Many bugs have been fixed. GCJ can compile Java source or ! Java bytecodes to either native code or Java class files, and ! supports native methods written in either the standard JNI or ! the more efficient and convenient CNI. ! + Here is a [5]partial list of C++ improvements, both new ! features and those no longer supported. ! + New C++ ABI. On the IA-64 platform GCC is capable of ! inter-operating with other IA-64 compilers. ! + The new ABI also significantly reduces the size of symbol and ! debug information. ! + New [6]C++ support library and many C++ bug fixes, vastly ! improving our conformance to the ISO C++ standard. ! + New [7]inliner for C++. ! + Rewritten C preprocessor, integrated into the C, C++ and ! Objective C compilers, with very many improvements including ! ISO C99 support and [8]improvements to dependency generation. ! + Support for more [9]ISO C99 features. ! + Many improvements to support for checking calls to format ! functions such as printf and scanf, including support for ISO ! C99 format features, extensions from the Single Unix ! Specification and GNU libc 2.2, checking of strfmon formats ! and features to assist in auditing for format string security ! bugs. ! + New warnings for C code that may have undefined semantics ! because of violations of sequence point rules in the C ! standard (such as a = a++;, a[n] = b[n++]; and a[i++] = i;), ! included in -Wall. ! + Additional warning option -Wfloat-equal. ! + Improvements to -Wtraditional. ! + Fortran improvements are listed in [10]the Fortran ! documentation. ! * New Targets and Target Specific Improvements: ! + New x86 back-end, generating much improved code. ! + Support for a generic i386-elf target contributed. ! + New option to emit x86 assembly code using Intel style syntax ! (-mintel-syntax). ! + HPUX 11 support contributed. ! + Improved PowerPC code generation, including scheduled ! prologue and epilogue. ! + Port of GCC to Intel's IA-64 processor contributed. ! + Port of GCC to Motorola's MCore 210 and 340 contributed. ! + New unified back-end for Arm, Thumb and StrongArm ! contributed. ! + Port of GCC to Intel's XScale processor contributed. ! + Port of GCC to Atmel's AVR microcontrollers contributed. ! + Port of GCC to Mitsubishi's D30V processor contributed. ! + Port of GCC to Matsushita's AM33 processor (a member of the ! MN10300 processor family) contributed. ! + Port of GCC to Fujitsu's FR30 processor contributed. ! + Port of GCC to Motorola's 68HC11 and 68HC12 processors ! contributed. ! + Port of GCC to Sun's picoJava processor core contributed. ! * Documentation improvements: ! + Substantially rewritten and improved C preprocessor manual. ! + Many improvements to other documentation. ! + Manpages for gcc, cpp and gcov are now generated ! automatically from the master Texinfo manual, eliminating the ! problem of manpages being out of date. (The generated ! manpages are only extracts from the full manual, which is ! provided in Texinfo form, from which info, HTML, other ! formats and a printed manual can be generated.) ! + Generated info files are included in the release tarballs ! alongside their Texinfo sources, avoiding problems on some ! platforms with building makeinfo as part of the GCC ! distribution. ! * Other significant improvements: ! + Garbage collection used internally by the compiler for most ! memory allocation instead of obstacks. ! + Lengauer and Tarjan algorithm used for computing dominators ! in the CFG. This algorithm can be significantly faster and ! more space efficient than our older algorithm. ! + gccbug script provided to assist in submitting bug reports to ! the GCC GNATS bug tracking database. (Bug reports previously ! submitted directly to the GCC mailing lists, for which no ! GNATS bug tracking number has been received, should be ! submitted again to the bug tracking database using gccbug if ! you can reproduce the problem with GCC 3.0.) ! + The internal libgcc library is [11]built as a shared library ! on systems that support it. ! + Extensive testsuite included with GCC, with many new tests. ! In addition to tests for GCC bugs that have been fixed, many ! tests have been added for language features, compiler ! warnings and builtin functions. ! + Additional language-independent warning options -Wpacked, ! -Wpadded, -Wunreachable-code and -Wdisabled-optimization. ! + Target-independent options -falign-functions, -falign-loops ! and -falign-jumps. ! * Plus a great many bugfixes and almost all the [12]features found ! in GCC 2.95. ! * Additional changes in GCC 3.0.1 ! + C++ fixes for incorrect code-generation. ! + Improved cross-compiling support for the C++ standard ! library. ! + Fixes for some embedded targets that worked in GCC 2.95.3, ! but not in GCC 3.0. ! + Fixes for various exception-handling bugs. ! + A port to the S/390 architecture. ! * Additional changes in GCC 3.0.2 ! + Fixes for bad code generation during loop unrolling. ! + Fixes for bad code generation by the sibling call ! optimization. ! + Minor improvements to x86 code generation. ! + Implemenation of function descriptors in C++ vtables for ! IA64. ! + Numerous minor bug-fixes. ! * Additional changes in GCC 3.0.3 ! + A fix to correct an accidental change to the PowerPC ABI. ! + Fixes for bad code generation on a variety of architectures. ! + Improvements to the debugging information generated for C++ ! classes. ! + Fixes for bad code generation in C++. ! + A fix to avoid crashes in the C++ demangler. ! + A fix to the C++ standard library to avoid buffer overflows. ! + Miscellaneous improvements for a variety of architectures. ! * Additional changes in GCC 3.0.4 ! + GCC 3.0 now supports newer versions of the [13]NetBSD ! operating system, which use the ELF object file format, on ! x86 processors. ! + Correct debugging information is generated from functions ! that have lines from multiple files (e.g. yacc output). ! + A fix for whitespace handling in the -traditional ! preprocessor, which can affect Fortran. ! + Fixes to the exception handling runtime. ! + More fixes for bad code generation in C++. ! + A fix for shared library generation under AIX 4.3. ! + Documentation updates. ! + Port of GCC to Tensilica's Xtensa processor contributed. ! + A fix for compiling the PPC Linux kernel (FAT fs wouldn't ! link). _________________________________________________________________ Please send FSF & GNU inquiries & questions to [14]gnu@gnu.org. There --- 83,251 ---- 14. mailto:gcc@gnu.org 15. mailto:gcc@gcc.gnu.org 16. mailto:gnu@gnu.org + 17. http://validator.w3.org/check/referer ====================================================================== http://gcc.gnu.org/gcc-3.0/features.html GCC 3.0 New Features ! General Optimizer Improvements ! ! * [1]Basic block reordering pass. ! * New if-conversion pass with support for conditional (predicated) ! execution. ! * New tail call and sibling call elimination optimizations. ! * New register renaming pass. ! * New (experimental) [2]static single assignment (SSA) ! representation support. ! * New dead-code elimination pass implemented using the SSA ! representation. ! * [3]Global null pointer test elimination. ! * [4]Global code hoisting/unification. ! * More builtins and optimizations for stdio.h, string.h and old BSD ! functions, as well as for ISO C99 functions. ! * New builtin __builtin_expect for giving hints to the branch ! predictor. ! ! New Languages and Language specific improvements ! ! * The GNU Compiler for the Java(TM) language (GCJ) is now integrated ! and supported, including the run-time library containing most ! common non-GUI Java classes, a bytecode interpreter, and the Boehm ! conservative garbage collector. Many bugs have been fixed. GCJ can ! compile Java source or Java bytecodes to either native code or ! Java class files, and supports native methods written in either ! the standard JNI or the more efficient and convenient CNI. ! * Here is a [5]partial list of C++ improvements, both new features ! and those no longer supported. ! * New C++ ABI. On the IA-64 platform GCC is capable of ! inter-operating with other IA-64 compilers. ! * The new ABI also significantly reduces the size of symbol and ! debug information. ! * New [6]C++ support library and many C++ bug fixes, vastly ! improving our conformance to the ISO C++ standard. ! * New [7]inliner for C++. ! * Rewritten C preprocessor, integrated into the C, C++ and Objective ! C compilers, with very many improvements including ISO C99 support ! and [8]improvements to dependency generation. ! * Support for more [9]ISO C99 features. ! * Many improvements to support for checking calls to format ! functions such as printf and scanf, including support for ISO C99 ! format features, extensions from the Single Unix Specification and ! GNU libc 2.2, checking of strfmon formats and features to assist ! in auditing for format string security bugs. ! * New warnings for C code that may have undefined semantics because ! of violations of sequence point rules in the C standard (such as a ! = a++;, a[n] = b[n++]; and a[i++] = i;), included in -Wall. ! * Additional warning option -Wfloat-equal. ! * Improvements to -Wtraditional. ! * Fortran improvements are listed in [10]the Fortran documentation. ! ! New Targets and Target Specific Improvements ! ! * New x86 back-end, generating much improved code. ! * Support for a generic i386-elf target contributed. ! * New option to emit x86 assembly code using Intel style syntax ! (-mintel-syntax). ! * HPUX 11 support contributed. ! * Improved PowerPC code generation, including scheduled prologue and ! epilogue. ! * Port of GCC to Intel's IA-64 processor contributed. ! * Port of GCC to Motorola's MCore 210 and 340 contributed. ! * New unified back-end for Arm, Thumb and StrongArm contributed. ! * Port of GCC to Intel's XScale processor contributed. ! * Port of GCC to Atmel's AVR microcontrollers contributed. ! * Port of GCC to Mitsubishi's D30V processor contributed. ! * Port of GCC to Matsushita's AM33 processor (a member of the ! MN10300 processor family) contributed. ! * Port of GCC to Fujitsu's FR30 processor contributed. ! * Port of GCC to Motorola's 68HC11 and 68HC12 processors ! contributed. ! * Port of GCC to Sun's picoJava processor core contributed. ! ! Documentation improvements ! ! * Substantially rewritten and improved C preprocessor manual. ! * Many improvements to other documentation. ! * Manpages for gcc, cpp and gcov are now generated automatically ! from the master Texinfo manual, eliminating the problem of ! manpages being out of date. (The generated manpages are only ! extracts from the full manual, which is provided in Texinfo form, ! from which info, HTML, other formats and a printed manual can be ! generated.) ! * Generated info files are included in the release tarballs ! alongside their Texinfo sources, avoiding problems on some ! platforms with building makeinfo as part of the GCC distribution. ! ! Other significant improvements ! ! * Garbage collection used internally by the compiler for most memory ! allocation instead of obstacks. ! * Lengauer and Tarjan algorithm used for computing dominators in the ! CFG. This algorithm can be significantly faster and more space ! efficient than our older algorithm. ! * gccbug script provided to assist in submitting bug reports to the ! GCC GNATS bug tracking database. (Bug reports previously submitted ! directly to the GCC mailing lists, for which no GNATS bug tracking ! number has been received, should be submitted again to the bug ! tracking database using gccbug if you can reproduce the problem ! with GCC 3.0.) ! * The internal libgcc library is [11]built as a shared library on ! systems that support it. ! * Extensive testsuite included with GCC, with many new tests. In ! addition to tests for GCC bugs that have been fixed, many tests ! have been added for language features, compiler warnings and ! builtin functions. ! * Additional language-independent warning options -Wpacked, ! -Wpadded, -Wunreachable-code and -Wdisabled-optimization. ! * Target-independent options -falign-functions, -falign-loops and ! -falign-jumps. ! ! Plus a great many bugfixes and almost all the [12]features found in ! GCC 2.95. ! ! Additional changes in GCC 3.0.1 ! ! * C++ fixes for incorrect code-generation. ! * Improved cross-compiling support for the C++ standard library. ! * Fixes for some embedded targets that worked in GCC 2.95.3, but not ! in GCC 3.0. ! * Fixes for various exception-handling bugs. ! * A port to the S/390 architecture. ! ! Additional changes in GCC 3.0.2 ! ! * Fixes for bad code generation during loop unrolling. ! * Fixes for bad code generation by the sibling call optimization. ! * Minor improvements to x86 code generation. ! * Implemenation of function descriptors in C++ vtables for IA64. ! * Numerous minor bug-fixes. ! ! Additional changes in GCC 3.0.3 ! ! * A fix to correct an accidental change to the PowerPC ABI. ! * Fixes for bad code generation on a variety of architectures. ! * Improvements to the debugging information generated for C++ ! classes. ! * Fixes for bad code generation in C++. ! * A fix to avoid crashes in the C++ demangler. ! * A fix to the C++ standard library to avoid buffer overflows. ! * Miscellaneous improvements for a variety of architectures. ! ! Additional changes in GCC 3.0.4 ! ! * GCC 3.0 now supports newer versions of the [13]NetBSD operating ! system, which use the ELF object file format, on x86 processors. ! * Correct debugging information is generated from functions that ! have lines from multiple files (e.g. yacc output). ! * A fix for whitespace handling in the -traditional preprocessor, ! which can affect Fortran. ! * Fixes to the exception handling runtime. ! * More fixes for bad code generation in C++. ! * A fix for shared library generation under AIX 4.3. ! * Documentation updates. ! * Port of GCC to Tensilica's Xtensa processor contributed. ! * A fix for compiling the PPC Linux kernel (FAT fs wouldn't link). _________________________________________________________________ Please send FSF & GNU inquiries & questions to [14]gnu@gnu.org. There *************** http://gcc.gnu.org/gcc-3.0/features.html *** 243,250 **** These pages are maintained by [16]The GCC team. ! Please send comments on these web pages and GCC to [17]gcc@gnu.org or ! [18]gcc@gcc.gnu.org, send other questions to [19]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. --- 253,261 ---- These pages are maintained by [16]The GCC team. ! ! Please send comments on these web pages and GCC to [17]gcc@gnu.org ! or [18]gcc@gcc.gnu.org, send other questions to [19]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. *************** http://gcc.gnu.org/gcc-3.0/features.html *** 252,258 **** Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2002-02-03. References --- 263,269 ---- Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2002-04-02. [20]Valid XHTML 1.0 References *************** References *** 275,280 **** --- 286,292 ---- 17. mailto:gcc@gnu.org 18. mailto:gcc@gcc.gnu.org 19. mailto:gnu@gnu.org + 20. http://validator.w3.org/check/referer ====================================================================== http://gcc.gnu.org/gcc-3.0/caveats.html *************** http://gcc.gnu.org/gcc-3.0/caveats.html *** 314,321 **** These pages are maintained by [6]The GCC team. ! Please send comments on these web pages and GCC to [7]gcc@gnu.org or ! [8]gcc@gcc.gnu.org, send other questions to [9]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. --- 326,334 ---- These pages are maintained by [6]The GCC team. ! ! Please send comments on these web pages and GCC to [7]gcc@gnu.org or ! [8]gcc@gcc.gnu.org, send other questions to [9]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. *************** http://gcc.gnu.org/gcc-3.0/caveats.html *** 323,329 **** Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2002-01-20. References --- 336,342 ---- Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2002-04-02. [10]Valid XHTML 1.0 References *************** References *** 336,341 **** --- 349,355 ---- 7. mailto:gcc@gnu.org 8. mailto:gcc@gcc.gnu.org 9. mailto:gnu@gnu.org + 10. http://validator.w3.org/check/referer ====================================================================== http://gcc.gnu.org/gcc-2.95/index.html *************** http://gcc.gnu.org/gcc-2.95/index.html *** 390,397 **** These pages are maintained by [15]The GCC team. ! Please send comments on these web pages and GCC to [16]gcc@gnu.org or ! [17]gcc@gcc.gnu.org, send other questions to [18]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. --- 404,412 ---- These pages are maintained by [15]The GCC team. ! ! Please send comments on these web pages and GCC to [16]gcc@gnu.org ! or [17]gcc@gcc.gnu.org, send other questions to [18]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. *************** http://gcc.gnu.org/gcc-2.95/index.html *** 399,405 **** Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2002-01-25. References --- 414,420 ---- Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2002-04-02. [19]Valid XHTML 1.0 References *************** References *** 421,426 **** --- 436,442 ---- 16. mailto:gcc@gnu.org 17. mailto:gcc@gcc.gnu.org 18. mailto:gnu@gnu.org + 19. http://validator.w3.org/check/referer ====================================================================== http://gcc.gnu.org/gcc-2.95/features.html *************** Additional Changes in GCC 2.95.3 *** 661,668 **** These pages are maintained by [20]The GCC team. ! Please send comments on these web pages and GCC to [21]gcc@gnu.org or ! [22]gcc@gcc.gnu.org, send other questions to [23]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. --- 677,685 ---- These pages are maintained by [20]The GCC team. ! ! Please send comments on these web pages and GCC to [21]gcc@gnu.org ! or [22]gcc@gcc.gnu.org, send other questions to [23]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. *************** Additional Changes in GCC 2.95.3 *** 670,676 **** Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2002-01-26. References --- 687,693 ---- Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2002-04-02. [24]Valid XHTML 1.0 References *************** References *** 697,702 **** --- 714,720 ---- 21. mailto:gcc@gnu.org 22. mailto:gcc@gcc.gnu.org 23. mailto:gnu@gnu.org + 24. http://validator.w3.org/check/referer ====================================================================== http://gcc.gnu.org/gcc-2.95/caveats.html *************** http://gcc.gnu.org/gcc-2.95/caveats.html *** 748,755 **** These pages are maintained by [6]The GCC team. ! Please send comments on these web pages and GCC to [7]gcc@gnu.org or ! [8]gcc@gcc.gnu.org, send other questions to [9]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. --- 766,774 ---- These pages are maintained by [6]The GCC team. ! ! Please send comments on these web pages and GCC to [7]gcc@gnu.org or ! [8]gcc@gcc.gnu.org, send other questions to [9]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. *************** http://gcc.gnu.org/gcc-2.95/caveats.html *** 757,763 **** Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2002-01-26. References --- 776,782 ---- Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2002-04-02. [10]Valid XHTML 1.0 References *************** References *** 770,775 **** --- 789,795 ---- 7. mailto:gcc@gnu.org 8. mailto:gcc@gcc.gnu.org 9. mailto:gnu@gnu.org + 10. http://validator.w3.org/check/referer ====================================================================== http://gcc.gnu.org/egcs-1.1/index.html *************** http://gcc.gnu.org/egcs-1.1/index.html *** 974,981 **** These pages are maintained by [13]The GCC team. ! Please send comments on these web pages and GCC to [14]gcc@gnu.org or ! [15]gcc@gcc.gnu.org, send other questions to [16]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. --- 994,1002 ---- These pages are maintained by [13]The GCC team. ! ! Please send comments on these web pages and GCC to [14]gcc@gnu.org ! or [15]gcc@gcc.gnu.org, send other questions to [16]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. *************** http://gcc.gnu.org/egcs-1.1/index.html *** 983,989 **** Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2002-02-19. References --- 1004,1010 ---- Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2002-04-02. [17]Valid XHTML 1.0 References *************** References *** 1003,1008 **** --- 1024,1030 ---- 14. mailto:gcc@gnu.org 15. mailto:gcc@gcc.gnu.org 16. mailto:gnu@gnu.org + 17. http://validator.w3.org/check/referer ====================================================================== http://gcc.gnu.org/egcs-1.1/features.html *************** http://gcc.gnu.org/egcs-1.1/features.htm *** 1078,1085 **** These pages are maintained by [8]The GCC team. ! Please send comments on these web pages and GCC to [9]gcc@gnu.org or ! [10]gcc@gcc.gnu.org, send other questions to [11]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. --- 1100,1108 ---- These pages are maintained by [8]The GCC team. ! ! Please send comments on these web pages and GCC to [9]gcc@gnu.org or ! [10]gcc@gcc.gnu.org, send other questions to [11]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. *************** http://gcc.gnu.org/egcs-1.1/features.htm *** 1087,1093 **** Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2002-02-11. References --- 1110,1116 ---- Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2002-04-02. [12]Valid XHTML 1.0 References *************** References *** 1102,1107 **** --- 1125,1131 ---- 9. mailto:gcc@gnu.org 10. mailto:gcc@gcc.gnu.org 11. mailto:gnu@gnu.org + 12. http://validator.w3.org/check/referer ====================================================================== http://gcc.gnu.org/egcs-1.1/caveats.html *************** http://gcc.gnu.org/egcs-1.1/caveats.html *** 1136,1143 **** These pages are maintained by [4]The GCC team. ! Please send comments on these web pages and GCC to [5]gcc@gnu.org or ! [6]gcc@gcc.gnu.org, send other questions to [7]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. --- 1160,1168 ---- These pages are maintained by [4]The GCC team. ! ! Please send comments on these web pages and GCC to [5]gcc@gnu.org or ! [6]gcc@gcc.gnu.org, send other questions to [7]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. *************** http://gcc.gnu.org/egcs-1.1/caveats.html *** 1145,1151 **** Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2002-02-11. References --- 1170,1176 ---- Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2002-04-02. [8]Valid XHTML 1.0 References *************** References *** 1156,1161 **** --- 1181,1187 ---- 5. mailto:gcc@gnu.org 6. mailto:gcc@gcc.gnu.org 7. mailto:gnu@gnu.org + 8. http://validator.w3.org/check/referer ====================================================================== http://gcc.gnu.org/egcs-1.0/egcs-1.0.3.html *************** http://gcc.gnu.org/egcs-1.0/egcs-1.0.3.h *** 1238,1245 **** These pages are maintained by [8]The GCC team. ! Please send comments on these web pages and GCC to [9]gcc@gnu.org or ! [10]gcc@gcc.gnu.org, send other questions to [11]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. --- 1264,1272 ---- These pages are maintained by [8]The GCC team. ! ! Please send comments on these web pages and GCC to [9]gcc@gnu.org or ! [10]gcc@gcc.gnu.org, send other questions to [11]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. *************** http://gcc.gnu.org/egcs-1.0/egcs-1.0.3.h *** 1247,1258 **** Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2002-02-10. References 1. http://gcc.gnu.org/egcs-1.0/features.html ! 2. http://gcc.gnu.org/install/index.html 3. http://gcc.gnu.org/egcs-1.0/buildstat.html 4. http://gcc.gnu.org/egcs-1.0/caveats.html 5. http://gcc.gnu.org/mirrors.html --- 1274,1285 ---- Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2002-04-02. [12]Valid XHTML 1.0 References 1. http://gcc.gnu.org/egcs-1.0/features.html ! 2. http://gcc.gnu.org/install/ 3. http://gcc.gnu.org/egcs-1.0/buildstat.html 4. http://gcc.gnu.org/egcs-1.0/caveats.html 5. http://gcc.gnu.org/mirrors.html *************** References *** 1262,1267 **** --- 1289,1295 ---- 9. mailto:gcc@gnu.org 10. mailto:gcc@gcc.gnu.org 11. mailto:gnu@gnu.org + 12. http://validator.w3.org/check/referer ====================================================================== http://gcc.gnu.org/egcs-1.0/egcs-1.0.2.html *************** http://gcc.gnu.org/egcs-1.0/egcs-1.0.2.h *** 1375,1382 **** These pages are maintained by [8]The GCC team. ! Please send comments on these web pages and GCC to [9]gcc@gnu.org or ! [10]gcc@gcc.gnu.org, send other questions to [11]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. --- 1403,1411 ---- These pages are maintained by [8]The GCC team. ! ! Please send comments on these web pages and GCC to [9]gcc@gnu.org or ! [10]gcc@gcc.gnu.org, send other questions to [11]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. *************** http://gcc.gnu.org/egcs-1.0/egcs-1.0.2.h *** 1384,1390 **** Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2002-02-10. References --- 1413,1419 ---- Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2002-04-02. [12]Valid XHTML 1.0 References *************** References *** 1399,1404 **** --- 1428,1434 ---- 9. mailto:gcc@gnu.org 10. mailto:gcc@gcc.gnu.org 11. mailto:gnu@gnu.org + 12. http://validator.w3.org/check/referer ====================================================================== http://gcc.gnu.org/egcs-1.0/egcs-1.0.1.html *************** http://gcc.gnu.org/egcs-1.0/egcs-1.0.1.h *** 1512,1519 **** These pages are maintained by [8]The GCC team. ! Please send comments on these web pages and GCC to [9]gcc@gnu.org or ! [10]gcc@gcc.gnu.org, send other questions to [11]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. --- 1542,1550 ---- These pages are maintained by [8]The GCC team. ! ! Please send comments on these web pages and GCC to [9]gcc@gnu.org or ! [10]gcc@gcc.gnu.org, send other questions to [11]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. *************** http://gcc.gnu.org/egcs-1.0/egcs-1.0.1.h *** 1521,1527 **** Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2002-02-10. References --- 1552,1558 ---- Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2002-04-02. [12]Valid XHTML 1.0 References *************** References *** 1536,1541 **** --- 1567,1573 ---- 9. mailto:gcc@gnu.org 10. mailto:gcc@gcc.gnu.org 11. mailto:gnu@gnu.org + 12. http://validator.w3.org/check/referer ====================================================================== http://gcc.gnu.org/egcs-1.0/egcs-1.0.html *************** http://gcc.gnu.org/egcs-1.0/egcs-1.0.htm *** 1606,1613 **** These pages are maintained by [8]The GCC team. ! Please send comments on these web pages and GCC to [9]gcc@gnu.org or ! [10]gcc@gcc.gnu.org, send other questions to [11]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. --- 1638,1646 ---- These pages are maintained by [8]The GCC team. ! ! Please send comments on these web pages and GCC to [9]gcc@gnu.org or ! [10]gcc@gcc.gnu.org, send other questions to [11]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. *************** http://gcc.gnu.org/egcs-1.0/egcs-1.0.htm *** 1615,1621 **** Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2002-02-10. References --- 1648,1654 ---- Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2002-04-02. [12]Valid XHTML 1.0 References *************** References *** 1630,1635 **** --- 1663,1669 ---- 9. mailto:gcc@gnu.org 10. mailto:gcc@gcc.gnu.org 11. mailto:gnu@gnu.org + 12. http://validator.w3.org/check/referer ====================================================================== http://gcc.gnu.org/egcs-1.0/features.html *************** http://gcc.gnu.org/egcs-1.0/features.htm *** 1677,1684 **** These pages are maintained by [5]The GCC team. ! Please send comments on these web pages and GCC to [6]gcc@gnu.org or ! [7]gcc@gcc.gnu.org, send other questions to [8]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. --- 1711,1719 ---- These pages are maintained by [5]The GCC team. ! ! Please send comments on these web pages and GCC to [6]gcc@gnu.org or ! [7]gcc@gcc.gnu.org, send other questions to [8]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. *************** http://gcc.gnu.org/egcs-1.0/features.htm *** 1686,1692 **** Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2002-02-10. References --- 1721,1727 ---- Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2002-04-02. [9]Valid XHTML 1.0 References *************** References *** 1698,1703 **** --- 1733,1739 ---- 6. mailto:gcc@gnu.org 7. mailto:gcc@gcc.gnu.org 8. mailto:gnu@gnu.org + 9. http://validator.w3.org/check/referer ====================================================================== http://gcc.gnu.org/egcs-1.0/caveats.html *************** http://gcc.gnu.org/egcs-1.0/caveats.html *** 1734,1741 **** These pages are maintained by [4]The GCC team. ! Please send comments on these web pages and GCC to [5]gcc@gnu.org or ! [6]gcc@gcc.gnu.org, send other questions to [7]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. --- 1770,1778 ---- These pages are maintained by [4]The GCC team. ! ! Please send comments on these web pages and GCC to [5]gcc@gnu.org or ! [6]gcc@gcc.gnu.org, send other questions to [7]gnu@gnu.org. Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. *************** http://gcc.gnu.org/egcs-1.0/caveats.html *** 1743,1749 **** Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2002-02-10. References --- 1780,1786 ---- Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! Last modified 2002-04-02. [8]Valid XHTML 1.0 References *************** References *** 1754,1757 **** --- 1791,1795 ---- 5. mailto:gcc@gnu.org 6. mailto:gcc@gcc.gnu.org 7. mailto:gnu@gnu.org + 8. http://validator.w3.org/check/referer ====================================================================== diff -Nrc3pad gcc-3.0.4/gcc/ONEWS gcc-3.1/gcc/ONEWS *** gcc-3.0.4/gcc/ONEWS Mon Dec 4 23:03:07 2000 --- gcc-3.1/gcc/ONEWS Sun Oct 28 12:41:59 2001 *************** do not have integer mul/div or floating *** 57,63 **** GCC now supports a "--help" option to print detailed help information. ! cpplib has been greatly improved. It is probably useable for some sites now (major missing feature is trigraphs). Memory footprint for the compiler has been significantly reduced for certain --- 57,63 ---- GCC now supports a "--help" option to print detailed help information. ! cpplib has been greatly improved. It is probably usable for some sites now (major missing feature is trigraphs). Memory footprint for the compiler has been significantly reduced for certain diff -Nrc3pad gcc-3.0.4/gcc/README-fixinc gcc-3.1/gcc/README-fixinc *** gcc-3.0.4/gcc/README-fixinc Wed Dec 16 20:53:09 1998 --- gcc-3.1/gcc/README-fixinc Sun May 27 18:21:04 2001 *************** *** 1,9 **** This README file is copied into the directory for GCC-only header files when fixincludes is run by the makefile for GCC. ! Many of the files in this directory were made from the standard system ! header files of this system by the shell script `fixincludes'. ! They are system-specific, and will not work on any other kind of system. ! They are also not part of GCC. The reason for making the files here ! is to fix the places in the header files which use constructs ! that are incompatible with ANSI C. --- 1,14 ---- This README file is copied into the directory for GCC-only header files when fixincludes is run by the makefile for GCC. ! Many of the files in this directory were automatically edited from the ! standard system header files by the fixincludes process. They are ! system-specific, and will not work on any other kind of system. They ! are also not part of GCC. The reason we have to do this is because ! GCC requires ANSI C headers and many vendors supply ANSI-incompatible ! headers. ! ! Because this is an automated process, sometimes headers get "fixed" ! that do not, strictly speaking, need a fix. As long as nothing is broken ! by the process, it is just an unfortunate collateral inconvenience. ! We would like to rectify it, if it is not "too inconvenient". diff -Nrc3pad gcc-3.0.4/gcc/acconfig.h gcc-3.1/gcc/acconfig.h *** gcc-3.0.4/gcc/acconfig.h Wed Nov 7 18:42:04 2001 --- gcc-3.1/gcc/acconfig.h Tue Oct 9 22:40:11 2001 *************** *** 14,20 **** #undef HAVE_STPCPY /* Define if your assembler supports specifying the maximum number ! of bytes to skip when using the GAS .p2align command. */ #undef HAVE_GAS_MAX_SKIP_P2ALIGN /* Define if your assembler supports .balign and .p2align. */ --- 14,20 ---- #undef HAVE_STPCPY /* Define if your assembler supports specifying the maximum number ! of bytes to skip when using the GAS .p2align command. */ #undef HAVE_GAS_MAX_SKIP_P2ALIGN /* Define if your assembler supports .balign and .p2align. */ *************** *** 26,32 **** /* Define to `int' if doesn't define. */ #undef ssize_t ! /* Define if cpp should also search $prefix/include. */ #undef PREFIX_INCLUDE_DIR @BOTTOM@ --- 26,32 ---- /* Define to `int' if doesn't define. */ #undef ssize_t ! /* Define if cpp should also search $prefix/include. */ #undef PREFIX_INCLUDE_DIR @BOTTOM@ diff -Nrc3pad gcc-3.0.4/gcc/aclocal.m4 gcc-3.1/gcc/aclocal.m4 *** gcc-3.0.4/gcc/aclocal.m4 Tue Jan 22 22:53:29 2002 --- gcc-3.1/gcc/aclocal.m4 Tue Jan 22 22:48:45 2002 *************** if test x = y ; then *** 75,101 **** fi ]) - dnl Check if we have vprintf and possibly _doprnt. - dnl Note autoconf checks for vprintf even though we care about vfprintf. - AC_DEFUN(gcc_AC_FUNC_VFPRINTF_DOPRNT, - [AC_FUNC_VPRINTF - vfprintf= - doprint= - if test $ac_cv_func_vprintf != yes ; then - vfprintf=vfprintf.o - if test $ac_cv_func__doprnt != yes ; then - doprint=doprint.o - fi - fi - AC_SUBST(vfprintf) - AC_SUBST(doprint) - ]) - - dnl Check if we have strstr. - AC_DEFUN([gcc_AC_FUNC_STRSTR], - [AC_CHECK_FUNCS([strstr], [strstr=], [strstr=strstr.o]) - AC_SUBST([strstr])]) - dnl See if the printf functions in libc support %p in format strings. AC_DEFUN(gcc_AC_FUNC_PRINTF_PTR, [AC_CACHE_CHECK(whether the printf functions support %p, --- 75,80 ---- *************** test -z "$INSTALL_DATA" && INSTALL_DATA= *** 308,313 **** --- 287,343 ---- AC_SUBST(INSTALL_DATA)dnl ]) + dnl Test for GNAT. + dnl We require the gnatbind program, and a compiler driver that + dnl understands Ada. The user may set the driver name explicitly + dnl with ADAC; also, the user's CC setting is tried. Failing that, + dnl we try gcc and cc, then a sampling of names known to be used for + dnl the Ada driver on various systems. + dnl + dnl Sets the shell variable have_gnat to yes or no as appropriate, and + dnl substitutes GNATBIND and ADAC. + AC_DEFUN([gcc_AC_PROG_GNAT], + [AC_REQUIRE([AC_CHECK_TOOL_PREFIX]) + AC_CHECK_TOOL(GNATBIND, gnatbind, no) + AC_CACHE_CHECK([for compiler driver that understands Ada], + gcc_cv_prog_adac, + [cat >conftest.adb <&1 || echo failure` + if test x"$errors" = x; then + gcc_cv_prog_adac=$cand + break + fi + done + rm -f conftest.*]) + ADAC=$gcc_cv_prog_adac + AC_SUBST(ADAC) + + if test x$GNATBIND != xno && test x$ADAC != xno; then + have_gnat=yes + else + have_gnat=no + fi + ]) + #serial 1 dnl This test replaces the one in autoconf. dnl Currently this macro should have the same name as the autoconf macro *************** fi *** 369,783 **** AC_SUBST($1)dnl ]) - - - # Macro to add for using GNU gettext. - # Ulrich Drepper , 1995. - # - # This file can be copied and used freely without restrictions. It can - # be used in projects which are not available under the GNU Public License - # but which still want to provide support for the GNU gettext functionality. - # Please note that the actual code is *not* freely available. - - # serial 5 - - AC_DEFUN(AM_WITH_NLS, - [AC_MSG_CHECKING([whether NLS is requested]) - dnl Default is enabled NLS - AC_ARG_ENABLE(nls, - [ --disable-nls do not use Native Language Support], - USE_NLS=$enableval, USE_NLS=yes) - AC_MSG_RESULT($USE_NLS) - AC_SUBST(USE_NLS) - - USE_INCLUDED_LIBINTL=no - - dnl If we use NLS figure out what method - if test "$USE_NLS" = "yes"; then - AC_DEFINE(ENABLE_NLS) - AC_MSG_CHECKING([whether included gettext is requested]) - AC_ARG_WITH(included-gettext, - [ --with-included-gettext use the GNU gettext library included here], - nls_cv_force_use_gnu_gettext=$withval, - nls_cv_force_use_gnu_gettext=no) - AC_MSG_RESULT($nls_cv_force_use_gnu_gettext) - - nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" - if test "$nls_cv_force_use_gnu_gettext" != "yes"; then - dnl User does not insist on using GNU NLS library. Figure out what - dnl to use. If gettext or catgets are available (in this order) we - dnl use this. Else we have to fall back to GNU NLS library. - dnl catgets is only used if permitted by option --with-catgets. - nls_cv_header_intl= - nls_cv_header_libgt= - CATOBJEXT=NONE - - AC_CHECK_HEADER(libintl.h, - [AC_CACHE_CHECK([for gettext in libc], gt_cv_func_gettext_libc, - [AC_TRY_LINK([#include ], [return (int) gettext ("")], - gt_cv_func_gettext_libc=yes, gt_cv_func_gettext_libc=no)]) - - if test "$gt_cv_func_gettext_libc" != "yes"; then - AC_CHECK_LIB(intl, bindtextdomain, - [AC_CACHE_CHECK([for gettext in libintl], - gt_cv_func_gettext_libintl, - [AC_CHECK_LIB(intl, gettext, - gt_cv_func_gettext_libintl=yes, - gt_cv_func_gettext_libintl=no)], - gt_cv_func_gettext_libintl=no)]) - fi - - if test "$gt_cv_func_gettext_libintl" = "yes"; then - LIBS="-lintl $LIBS" - fi - - if test "$gt_cv_func_gettext_libc" = "yes" \ - || test "$gt_cv_func_gettext_libintl" = "yes"; then - AC_DEFINE(HAVE_GETTEXT) - GCC_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, - [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl - if test "$MSGFMT" != "no"; then - AC_CHECK_FUNCS(dcgettext) - GCC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) - GCC_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, - [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) - AC_TRY_LINK(, [extern int _nl_msg_cat_cntr; - return _nl_msg_cat_cntr], - [CATOBJEXT=.gmo - DATADIRNAME=share], - [CATOBJEXT=.mo - DATADIRNAME=lib]) - INSTOBJEXT=.mo - else - create_catalogs="no" - fi - fi - ]) - - if test "$CATOBJEXT" = "NONE"; then - AC_MSG_CHECKING([whether catgets can be used]) - AC_ARG_WITH(catgets, - [ --with-catgets use catgets functions if available], - nls_cv_use_catgets=$withval, nls_cv_use_catgets=no) - AC_MSG_RESULT($nls_cv_use_catgets) - - if test "$nls_cv_use_catgets" = "yes"; then - dnl No gettext in C library. Try catgets next. - AC_CHECK_LIB(i, main) - AC_CHECK_FUNC(catgets, - [AC_DEFINE(HAVE_CATGETS) - INTLOBJS="\$(CATOBJS)" - GCC_PATH_PROG(GENCAT, gencat, no)dnl - if test "$GENCAT" != "no"; then - GCC_PATH_PROG(GMSGFMT, gmsgfmt, no) - if test "$GMSGFMT" = "no"; then - GCC_PATH_PROG_WITH_TEST(GMSGFMT, msgfmt, - [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], msgfmt) - if test "$GMSGFMT" = "msgfmt"; then - create_catalogs="no" - fi - fi - GCC_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, - [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) - USE_INCLUDED_LIBINTL=yes - CATOBJEXT=.cat - INSTOBJEXT=.cat - DATADIRNAME=lib - INTLDEPS='$(top_builddir)/intl/libintl.a' - INTLLIBS=$INTLDEPS - LIBS=`echo $LIBS | sed -e 's/-lintl//'` - nls_cv_header_intl=intl/libintl.h - nls_cv_header_libgt=intl/libgettext.h - fi]) - fi - fi - - if test "$CATOBJEXT" = "NONE"; then - dnl Neither gettext nor catgets in included in the C library. - dnl Fall back on GNU gettext library. - nls_cv_use_gnu_gettext=yes - fi - fi - - if test "$nls_cv_use_gnu_gettext" = "yes"; then - dnl Mark actions used to generate GNU NLS library. - INTLOBJS="\$(GETTOBJS)" - GCC_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, - [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], msgfmt) - GCC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) - dnl If we didn't find either msgfmt or gmsgfmt, don't try to - dnl create a catalog. - if test "$MSGFMT" = "msgfmt" && test "$GMSGFMT" = "msgfmt"; then - create_catalogs="no" - fi - GCC_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, - [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) - AC_SUBST(MSGFMT) - USE_INCLUDED_LIBINTL=yes - CATOBJEXT=.gmo - INSTOBJEXT=.mo - DATADIRNAME=share - INTLDEPS='$(top_builddir)/intl/libintl.a' - INTLLIBS=$INTLDEPS - LIBS=`echo $LIBS | sed -e 's/-lintl//'` - nls_cv_header_intl=intl/libintl.h - nls_cv_header_libgt=intl/libgettext.h - fi - - dnl Test whether we really found GNU xgettext. - if test "$XGETTEXT" != ":"; then - dnl If it is no GNU xgettext we define it as : so that the - dnl Makefiles still can work. - if $XGETTEXT --omit-header /dev/null 2> /dev/null; then - : ; - else - AC_MSG_RESULT( - [found xgettext program is not GNU xgettext; ignore it]) - XGETTEXT=":" - fi - fi - - - - # We need to process the po/ directory. - POSUB=po - else - DATADIRNAME=share - nls_cv_header_intl=intl/libintl.h - nls_cv_header_libgt=intl/libgettext.h - fi - AC_LINK_FILES($nls_cv_header_libgt, $nls_cv_header_intl) - AC_OUTPUT_COMMANDS( - [case "$CONFIG_FILES" in *po/Makefile.in*) - sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile - esac]) - - - # If this is used in GNU gettext we have to set USE_NLS to `yes' - # because some of the sources are only built for this goal. - if test "$PACKAGE" = gettext; then - USE_NLS=yes - USE_INCLUDED_LIBINTL=yes - fi - - dnl These rules are solely for the distribution goal. While doing this - dnl we only have to keep exactly one list of the available catalogs - dnl in configure.in. - for lang in $ALL_LINGUAS; do - GMOFILES="$GMOFILES $lang.gmo" - POFILES="$POFILES $lang.po" - done - - dnl Make all variables we use known to autoconf. - AC_SUBST(USE_INCLUDED_LIBINTL) - AC_SUBST(CATALOGS) - AC_SUBST(CATOBJEXT) - AC_SUBST(DATADIRNAME) - AC_SUBST(GMOFILES) - AC_SUBST(INSTOBJEXT) - AC_SUBST(INTLDEPS) - AC_SUBST(INTLLIBS) - AC_SUBST(INTLOBJS) - AC_SUBST(POFILES) - AC_SUBST(POSUB) - ]) - - AC_DEFUN(AM_GNU_GETTEXT, - [AC_REQUIRE([AC_PROG_MAKE_SET])dnl - AC_REQUIRE([AC_PROG_CC])dnl - AC_REQUIRE([AC_PROG_RANLIB])dnl - AC_REQUIRE([AC_ISC_POSIX])dnl - AC_REQUIRE([AC_HEADER_STDC])dnl - AC_REQUIRE([AC_C_CONST])dnl - AC_REQUIRE([AC_C_INLINE])dnl - AC_REQUIRE([AC_TYPE_OFF_T])dnl - AC_REQUIRE([AC_TYPE_SIZE_T])dnl - AC_REQUIRE([AC_FUNC_ALLOCA])dnl - - AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h string.h \ - unistd.h sys/param.h]) - AC_CHECK_FUNCS([getcwd munmap putenv setenv setlocale strchr strcasecmp \ - strdup __argz_count __argz_stringify __argz_next]) - - if test "${ac_cv_func_stpcpy+set}" != "set"; then - AC_CHECK_FUNCS(stpcpy) - fi - if test "${ac_cv_func_stpcpy}" = "yes"; then - AC_DEFINE(HAVE_STPCPY) - fi - - AM_LC_MESSAGES - AM_WITH_NLS - - if test "x$create_catalogs" = "xno"; then - AC_MSG_WARN([No program for building catalogs found -> building disabled]) - fi - - if test "x$CATOBJEXT" != "x" && test "x$create_catalogs" != "xno" ; then - if test "x$ALL_LINGUAS" = "x"; then - LINGUAS= - else - AC_MSG_CHECKING(for catalogs to be installed) - if test "x$LINGUAS" = "x"; then - LINGUAS=$ALL_LINGUAS - else - NEW_LINGUAS= - for lang in $ALL_LINGUAS; do - case " $LINGUAS " in - *" $lang "*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;; - esac - done - LINGUAS=$NEW_LINGUAS - fi - AC_MSG_RESULT($LINGUAS) - fi - - dnl Construct list of names of catalog files to be constructed. - if test -n "$LINGUAS"; then - for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done - fi - fi - - dnl The reference to in the installed file - dnl must be resolved because we cannot expect the users of this - dnl to define HAVE_LOCALE_H. - if test $ac_cv_header_locale_h = yes; then - INCLUDE_LOCALE_H="#include " - else - INCLUDE_LOCALE_H="\ - /* The system does not provide the header . Take care yourself. */" - fi - AC_SUBST(INCLUDE_LOCALE_H) - - dnl Determine which catalog format we have (if any is needed) - dnl For now we know about two different formats: - dnl Linux libc-5 and the normal X/Open format - test -d intl || mkdir intl - if test "$CATOBJEXT" = ".cat"; then - AC_CHECK_HEADER(linux/version.h, msgformat=linux, msgformat=xopen) - - dnl Transform the SED scripts while copying because some dumb SEDs - dnl cannot handle comments. - sed -e '/^#/d' $srcdir/intl/$msgformat-msg.sed > intl/po2msg.sed - fi - dnl po2tbl.sed is always needed. - sed -e '/^#.*[^\\]$/d' -e '/^#$/d' \ - $srcdir/intl/po2tbl.sed.in > intl/po2tbl.sed - - dnl In the intl/Makefile.in we have a special dependency which makes - dnl only sense for gettext. We comment this out for non-gettext - dnl packages. - if test "$PACKAGE" = "gettext"; then - GT_NO="#NO#" - GT_YES= - else - GT_NO= - GT_YES="#YES#" - fi - AC_SUBST(GT_NO) - AC_SUBST(GT_YES) - - dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly - dnl find the mkinstalldirs script in another subdir but ($top_srcdir). - dnl Try to locate is. - MKINSTALLDIRS= - if test -n "$ac_aux_dir"; then - MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" - fi - if test -z "$MKINSTALLDIRS"; then - MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" - fi - AC_SUBST(MKINSTALLDIRS) - - dnl *** For now the libtool support in intl/Makefile is not for real. - l= - AC_SUBST(l) - - dnl Generate list of files to be processed by xgettext which will - dnl be included in po/Makefile. - test -d po || mkdir po - if test "x$srcdir" != "x."; then - if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then - posrcprefix="$srcdir/" - else - posrcprefix="../$srcdir/" - fi - else - posrcprefix="../" - fi - rm -f po/POTFILES - sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ - < $srcdir/po/POTFILES.in > po/POTFILES - ]) - - # Check whether LC_MESSAGES is available in . - # Ulrich Drepper , 1995. - # - # This file can be copied and used freely without restrictions. It can - # be used in projects which are not available under the GNU Public License - # but which still want to provide support for the GNU gettext functionality. - # Please note that the actual code is *not* freely available. - - # serial 1 - - AC_DEFUN(AM_LC_MESSAGES, - [if test $ac_cv_header_locale_h = yes; then - AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, - [AC_TRY_LINK([#include ], [return LC_MESSAGES], - am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) - if test $am_cv_val_LC_MESSAGES = yes; then - AC_DEFINE(HAVE_LC_MESSAGES) - fi - fi]) - - # Search path for a program which passes the given test. - # Ulrich Drepper , 1996. - # - # This file can be copied and used freely without restrictions. It can - # be used in projects which are not available under the GNU Public License - # but which still want to provide support for the GNU gettext functionality. - # Please note that the actual code is *not* freely available. - - # serial 1 - - dnl GCC_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, - dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) - AC_DEFUN(GCC_PATH_PROG_WITH_TEST, - [# Extract the first word of "$2", so it can be a program name with args. - set dummy $2; ac_word=[$]2 - AC_MSG_CHECKING([for $ac_word]) - AC_CACHE_VAL(gcc_cv_path_$1, - [case "[$]$1" in - /*) - gcc_cv_path_$1="[$]$1" # Let the user override the test with a path. - ;; - *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in ifelse([$5], , $PATH, [$5]); do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - if [$3]; then - gcc_cv_path_$1="$ac_dir/$ac_word" - break - fi - fi - done - IFS="$ac_save_ifs" - dnl If no 4th arg is given, leave the cache variable unset, - dnl so GCC_PATH_PROGS will keep looking. - ifelse([$4], , , [ test -z "[$]gcc_cv_path_$1" && gcc_cv_path_$1="$4" - ])dnl - ;; - esac])dnl - $1="$gcc_cv_path_$1" - if test -n "[$]$1"; then - AC_MSG_RESULT([$]$1) - else - AC_MSG_RESULT(no) - fi - AC_SUBST($1)dnl - ]) - # Check whether mmap can map an arbitrary page from /dev/zero or with # MAP_ANONYMOUS, without MAP_FIXED. AC_DEFUN([AC_FUNC_MMAP_ANYWHERE], --- 399,404 ---- *************** else *** 1153,1158 **** --- 774,1097 ---- fi ]) + dnl Determine if enumerated bitfields are unsigned. ISO C says they can + dnl be either signed or unsigned. + dnl + AC_DEFUN(gcc_AC_C_ENUM_BF_UNSIGNED, + [AC_CACHE_CHECK(for unsigned enumerated bitfields, gcc_cv_enum_bf_unsigned, + [AC_TRY_RUN(#include + enum t { BLAH = 128 } ; + struct s_t { enum t member : 8; } s ; + int main(void) + { + s.member = BLAH; + if (s.member < 0) exit(1); + exit(0); + + }, gcc_cv_enum_bf_unsigned=yes, gcc_cv_enum_bf_unsigned=no, gcc_cv_enum_bf_unsigned=yes)]) + if test $gcc_cv_enum_bf_unsigned = yes; then + AC_DEFINE(ENUM_BITFIELDS_ARE_UNSIGNED, 1, + [Define if enumerated bitfields are treated as unsigned values.]) + fi]) + + dnl Host type sizes probe. + dnl By Kaveh R. Ghazi. One typo fixed since. + dnl + AC_DEFUN([gcc_AC_COMPILE_CHECK_SIZEOF], + [changequote(<<, >>)dnl + dnl The name to #define. + define(<>, translit(sizeof_$1, [a-z *], [A-Z_P]))dnl + dnl The cache variable name. + define(<>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl + changequote([, ])dnl + AC_MSG_CHECKING(size of $1) + AC_CACHE_VAL(AC_CV_NAME, + [for ac_size in 4 8 1 2 16 $3 ; do # List sizes in rough order of prevalence. + AC_TRY_COMPILE([#include "confdefs.h" + #include + $2 + ], [switch (0) case 0: case (sizeof ($1) == $ac_size):;], AC_CV_NAME=$ac_size) + if test x$AC_CV_NAME != x ; then break; fi + done + ]) + if test x$AC_CV_NAME = x ; then + AC_MSG_ERROR([cannot determine a size for $1]) + fi + AC_MSG_RESULT($AC_CV_NAME) + AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME, [The number of bytes in type $1]) + undefine([AC_TYPE_NAME])dnl + undefine([AC_CV_NAME])dnl + ]) + + dnl Probe number of bits in a byte. + dnl Note C89 requires CHAR_BIT >= 8. + dnl + AC_DEFUN(gcc_AC_C_CHAR_BIT, + [AC_CACHE_CHECK(for CHAR_BIT, gcc_cv_decl_char_bit, + [AC_EGREP_CPP(found, + [#ifdef HAVE_LIMITS_H + #include + #endif + #ifdef CHAR_BIT + found + #endif], gcc_cv_decl_char_bit=yes, gcc_cv_decl_char_bit=no) + ]) + if test $gcc_cv_decl_char_bit = no; then + AC_CACHE_CHECK(number of bits in a byte, gcc_cv_c_nbby, + [i=8 + gcc_cv_c_nbby= + while test $i -lt 65; do + AC_TRY_COMPILE(, + [switch(0) { + case (unsigned char)((unsigned long)1 << $i) == ((unsigned long)1 << $i): + case (unsigned char)((unsigned long)1<<($i-1)) == ((unsigned long)1<<($i-1)): + ; }], + [gcc_cv_c_nbby=$i; break]) + i=`expr $i + 1` + done + test -z "$gcc_cv_c_nbby" && gcc_cv_c_nbby=failed + ]) + if test $gcc_cv_c_nbby = failed; then + AC_MSG_ERROR(cannot determine number of bits in a byte) + else + AC_DEFINE_UNQUOTED(CHAR_BIT, $gcc_cv_c_nbby, + [Define as the number of bits in a byte, if \`limits.h' doesn't.]) + fi + fi]) + + dnl Checking for long long. + dnl By Caolan McNamara + dnl Added check for __int64, Zack Weinberg + dnl + AC_DEFUN([gcc_AC_C_LONG_LONG], + [AC_CACHE_CHECK(for long long int, ac_cv_c_long_long, + [AC_TRY_COMPILE(,[long long int i;], + ac_cv_c_long_long=yes, + ac_cv_c_long_long=no)]) + if test $ac_cv_c_long_long = yes; then + AC_DEFINE(HAVE_LONG_LONG, 1, + [Define if your compiler supports the \`long long' type.]) + fi + AC_CACHE_CHECK(for __int64, ac_cv_c___int64, + [AC_TRY_COMPILE(,[__int64 i;], + ac_cv_c___int64=yes, + ac_cv_c___int64=no)]) + if test $ac_cv_c___int64 = yes; then + AC_DEFINE(HAVE___INT64, 1, + [Define if your compiler supports the \`__int64' type.]) + fi + ]) + + dnl Host character set probe. + dnl The EBCDIC values match the table in config/i370/i370.c; + dnl there are other versions of EBCDIC but GCC won't work with them. + dnl + AC_DEFUN([gcc_AC_C_CHARSET], + [AC_CACHE_CHECK(execution character set, ac_cv_c_charset, + [AC_EGREP_CPP(ASCII, + [#if '\n' == 0x0A && ' ' == 0x20 && '0' == 0x30 \ + && 'A' == 0x41 && 'a' == 0x61 && '!' == 0x21 + ASCII + #endif], ac_cv_c_charset=ASCII) + if test x${ac_cv_c_charset+set} != xset; then + AC_EGREP_CPP(EBCDIC, + [#if '\n' == 0x15 && ' ' == 0x40 && '0' == 0xF0 \ + && 'A' == 0xC1 && 'a' == 0x81 && '!' == 0x5A + EBCDIC + #endif], ac_cv_c_charset=EBCDIC) + fi + if test x${ac_cv_c_charset+set} != xset; then + ac_cv_c_charset=unknown + fi]) + if test $ac_cv_c_charset = unknown; then + AC_MSG_ERROR([*** Cannot determine host character set.]) + elif test $ac_cv_c_charset = EBCDIC; then + AC_DEFINE(HOST_EBCDIC, 1, + [Define if the host execution character set is EBCDIC.]) + fi]) + + dnl Utility macro used by next two tests. + dnl AC_EXAMINE_OBJECT(C source code, + dnl commands examining object file, + dnl [commands to run if compile failed]): + dnl + dnl Compile the source code to an object file; then convert it into a + dnl printable representation. All unprintable characters and + dnl asterisks (*) are replaced by dots (.). All white space is + dnl deleted. Newlines (ASCII 0x10) in the input are preserved in the + dnl output, but runs of newlines are compressed to a single newline. + dnl Finally, line breaks are forcibly inserted so that no line is + dnl longer than 80 columns and the file ends with a newline. The + dnl result of all this processing is in the file conftest.dmp, which + dnl may be examined by the commands in the second argument. + dnl + AC_DEFUN([gcc_AC_EXAMINE_OBJECT], + [AC_LANG_SAVE + AC_LANG_C + dnl Next bit cribbed from AC_TRY_COMPILE. + cat > conftest.$ac_ext < conftest.dmp + $2 + ifelse($3, , , else + $3 + )dnl + fi + rm -rf conftest* + AC_LANG_RESTORE]) + + dnl Host endianness probe. + dnl This tests byte-within-word endianness. GCC actually needs + dnl to know word-within-larger-object endianness. They are the + dnl same on all presently supported hosts. + dnl Differs from AC_C_BIGENDIAN in that it does not require + dnl running a program on the host, and it defines the macro we + dnl want to see. + dnl + AC_DEFUN([gcc_AC_C_COMPILE_ENDIAN], + [AC_CACHE_CHECK(byte ordering, ac_cv_c_compile_endian, + [ac_cv_c_compile_endian=unknown + gcc_AC_EXAMINE_OBJECT([ + #ifdef HAVE_LIMITS_H + # include + #endif + /* This structure must have no internal padding. */ + struct { + char prefix[sizeof "\nendian:" - 1]; + short word; + char postfix[2]; + } tester = { + "\nendian:", + #if SIZEOF_SHORT == 4 + ('A' << (CHAR_BIT * 3)) | ('B' << (CHAR_BIT * 2)) | + #endif + ('A' << CHAR_BIT) | 'B', + 'X', '\n' + };], + [if grep 'endian:AB' conftest.dmp >/dev/null 2>&1; then + ac_cv_c_compile_endian=big-endian + elif grep 'endian:BA' conftest.dmp >/dev/null 2>&1; then + ac_cv_c_compile_endian=little-endian + fi]) + ]) + if test $ac_cv_c_compile_endian = unknown; then + AC_MSG_ERROR([*** unable to determine endianness]) + elif test $ac_cv_c_compile_endian = big-endian; then + AC_DEFINE(HOST_WORDS_BIG_ENDIAN, 1, + [Define if the host machine stores words of multi-word integers in + big-endian order.]) + fi + ]) + + dnl Floating point format probe. + dnl The basic concept is the same as the above: grep the object + dnl file for an interesting string. We have to watch out for + dnl rounding changing the values in the object, however; this is + dnl handled by ignoring the least significant byte of the float. + dnl + dnl Does not know about VAX G-float or C4x idiosyncratic format. + dnl It does know about PDP-10 idiosyncratic format, but this is + dnl not presently supported by GCC. S/390 "binary floating point" + dnl is in fact IEEE (but maybe we should have that in EBCDIC as well + dnl as ASCII?) + dnl + AC_DEFUN([gcc_AC_C_FLOAT_FORMAT], + [AC_CACHE_CHECK(floating point format, ac_cv_c_float_format, + [gcc_AC_EXAMINE_OBJECT( + [/* This will not work unless sizeof(double) == 8. */ + extern char sizeof_double_must_be_8 [sizeof(double) == 8 ? 1 : -1]; + + /* This structure must have no internal padding. */ + struct possibility { + char prefix[8]; + double candidate; + char postfix[8]; + }; + + #define C(cand) { "\nformat:", cand, ":tamrof\n" } + struct possibility table [] = + { + C( 3.25724264705901305206e+01), /* @@IEEEFP - IEEE 754 */ + C( 3.53802595280598432000e+18), /* D__float - VAX */ + C( 5.32201830133125317057e-19), /* D.PDP-10 - PDP-10 - the dot is 0x13a */ + C( 1.77977764695171661377e+10), /* IBMHEXFP - s/390 format, ascii */ + C(-5.22995989424860458374e+10) /* IBMHEXFP - s/390 format, EBCDIC */ + };], + [if grep 'format:.@IEEEF.:tamrof' conftest.dmp >/dev/null 2>&1; then + ac_cv_c_float_format='IEEE (big-endian)' + elif grep 'format:.I@@PFE.:tamrof' conftest.dmp >/dev/null 2>&1; then + ac_cv_c_float_format='IEEE (big-endian)' + elif grep 'format:.FEEEI@.:tamrof' conftest.dmp >/dev/null 2>&1; then + ac_cv_c_float_format='IEEE (little-endian)' + elif grep 'format:.EFP@@I.:tamrof' conftest.dmp >/dev/null 2>&1; then + ac_cv_c_float_format='IEEE (little-endian)' + elif grep 'format:.__floa.:tamrof' conftest.dmp >/dev/null 2>&1; then + ac_cv_c_float_format='VAX D-float' + elif grep 'format:..PDP-1.:tamrof' conftest.dmp >/dev/null 2>&1; then + ac_cv_c_float_format='PDP-10' + elif grep 'format:.BMHEXF.:tamrof' conftest.dmp >/dev/null 2>&1; then + ac_cv_c_float_format='IBM 370 hex' + else + AC_MSG_ERROR(Unknown floating point format) + fi], + [AC_MSG_ERROR(compile failed)]) + ]) + # IEEE is the default format. If the float endianness isn't the same + # as the integer endianness, we have to set FLOAT_WORDS_BIG_ENDIAN + # (which is a tristate: yes, no, default). This is only an issue with + # IEEE; the other formats are only supported by a few machines each, + # all with the same endianness. + format= + fbigend= + case $ac_cv_c_float_format in + 'IEEE (big-endian)' ) + if test $ac_cv_c_compile_endian = little-endian; then + fbigend=1 + fi + ;; + 'IEEE (little-endian)' ) + if test $ac_cv_c_compile_endian = big-endian; then + fbigend=0 + fi + ;; + 'VAX D-float' ) + format=VAX_FLOAT_FORMAT + ;; + 'PDP-10' ) + format=PDP10_FLOAT_FORMAT + ;; + 'IBM 370 hex' ) + format=IBM_FLOAT_FORMAT + ;; + esac + if test -n "$format"; then + AC_DEFINE_UNQUOTED(HOST_FLOAT_FORMAT, $format, + [Define to the floating point format of the host machine, if not IEEE.]) + fi + if test -n "$fbigend"; then + AC_DEFINE_UNQUOTED(HOST_FLOAT_WORDS_BIG_ENDIAN, $fbigend, + [Define to 1 if the host machine stores floating point numbers in + memory with the word containing the sign bit at the lowest address, + or to 0 if it does it the other way around. + + This macro should not be defined if the ordering is the same as for + multi-word integers.]) + fi + ]) + #serial AM2 dnl From Bruno Haible. *************** size_t iconv(); *** 1223,1225 **** --- 1162,1692 ---- fi AC_SUBST(LIBICONV) ]) + + ### Gettext macros begin here. + ### Changes for GCC marked by 'dnl GCC LOCAL'. + ### Note iconv.m4 appears above, as it's used for other reasons. + + #serial AM1 + + dnl From Bruno Haible. + + AC_DEFUN([AM_LANGINFO_CODESET], + [ + AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset, + [AC_TRY_LINK([#include ], + [char* cs = nl_langinfo(CODESET);], + am_cv_langinfo_codeset=yes, + am_cv_langinfo_codeset=no) + ]) + if test $am_cv_langinfo_codeset = yes; then + AC_DEFINE(HAVE_LANGINFO_CODESET, 1, + [Define if you have and nl_langinfo(CODESET).]) + fi + ]) + + #serial 1 + # This test replaces the one in autoconf. + # Currently this macro should have the same name as the autoconf macro + # because gettext's gettext.m4 (distributed in the automake package) + # still uses it. Otherwise, the use in gettext.m4 makes autoheader + # give these diagnostics: + # configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX + # configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX + + undefine([AC_ISC_POSIX]) + + AC_DEFUN([AC_ISC_POSIX], + [ + dnl This test replaces the obsolescent AC_ISC_POSIX kludge. + dnl GCC LOCAL: Use AC_SEARCH_LIBS. + AC_SEARCH_LIBS(strerror, cposix) + ] + ) + + #serial 2 + + # Test for the GNU C Library, version 2.1 or newer. + # From Bruno Haible. + + AC_DEFUN([jm_GLIBC21], + [ + AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer, + ac_cv_gnu_library_2_1, + [AC_EGREP_CPP([Lucky GNU user], + [ + #include + #ifdef __GNU_LIBRARY__ + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) + Lucky GNU user + #endif + #endif + ], + ac_cv_gnu_library_2_1=yes, + ac_cv_gnu_library_2_1=no) + ] + ) + AC_SUBST(GLIBC21) + GLIBC21="$ac_cv_gnu_library_2_1" + ] + ) + + # Check whether LC_MESSAGES is available in . + # Ulrich Drepper , 1995. + # + # This file can be copied and used freely without restrictions. It can + # be used in projects which are not available under the GNU General Public + # License or the GNU Library General Public License but which still want + # to provide support for the GNU gettext functionality. + # Please note that the actual code of the GNU gettext library is covered + # by the GNU Library General Public License, and the rest of the GNU + # gettext package package is covered by the GNU General Public License. + # They are *not* in the public domain. + + # serial 2 + + AC_DEFUN([AM_LC_MESSAGES], + [if test $ac_cv_header_locale_h = yes; then + AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, + [AC_TRY_LINK([#include ], [return LC_MESSAGES], + am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) + if test $am_cv_val_LC_MESSAGES = yes; then + AC_DEFINE(HAVE_LC_MESSAGES, 1, + [Define if your file defines LC_MESSAGES.]) + fi + fi]) + + # Search path for a program which passes the given test. + # Ulrich Drepper , 1996. + # + # This file can be copied and used freely without restrictions. It can + # be used in projects which are not available under the GNU General Public + # License or the GNU Library General Public License but which still want + # to provide support for the GNU gettext functionality. + # Please note that the actual code of the GNU gettext library is covered + # by the GNU Library General Public License, and the rest of the GNU + # gettext package package is covered by the GNU General Public License. + # They are *not* in the public domain. + + # serial 2 + + dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, + dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) + AC_DEFUN([AM_PATH_PROG_WITH_TEST], + [# Extract the first word of "$2", so it can be a program name with args. + set dummy $2; ac_word=[$]2 + AC_MSG_CHECKING([for $ac_word]) + AC_CACHE_VAL(ac_cv_path_$1, + [case "[$]$1" in + /*) + ac_cv_path_$1="[$]$1" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in ifelse([$5], , $PATH, [$5]); do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if [$3]; then + ac_cv_path_$1="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" + dnl If no 4th arg is given, leave the cache variable unset, + dnl so AC_PATH_PROGS will keep looking. + ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" + ])dnl + ;; + esac])dnl + $1="$ac_cv_path_$1" + if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then + AC_MSG_RESULT([$]$1) + else + AC_MSG_RESULT(no) + fi + AC_SUBST($1)dnl + ]) + + # Macro to add for using GNU gettext. + # Ulrich Drepper , 1995. + # + # This file can be copied and used freely without restrictions. It can + # be used in projects which are not available under the GNU General Public + # License or the GNU Library General Public License but which still want + # to provide support for the GNU gettext functionality. + # Please note that the actual code of the GNU gettext library is covered + # by the GNU Library General Public License, and the rest of the GNU + # gettext package package is covered by the GNU General Public License. + # They are *not* in the public domain. + + # serial 10 + + dnl Usage: AM_WITH_NLS([TOOLSYMBOL], [NEEDSYMBOL], [LIBDIR]). + dnl If TOOLSYMBOL is specified and is 'use-libtool', then a libtool library + dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, + dnl depending on --{enable,disable}-{shared,static} and on the presence of + dnl AM-DISABLE-SHARED). Otherwise, a static library + dnl $(top_builddir)/intl/libintl.a will be created. + dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext + dnl implementations (in libc or libintl) without the ngettext() function + dnl will be ignored. + dnl LIBDIR is used to find the intl libraries. If empty, + dnl the value `$(top_builddir)/intl/' is used. + dnl + dnl The result of the configuration is one of three cases: + dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled + dnl and used. + dnl Catalog format: GNU --> install in $(datadir) + dnl Catalog extension: .mo after installation, .gmo in source tree + dnl 2) GNU gettext has been found in the system's C library. + dnl Catalog format: GNU --> install in $(datadir) + dnl Catalog extension: .mo after installation, .gmo in source tree + dnl 3) No internationalization, always use English msgid. + dnl Catalog format: none + dnl Catalog extension: none + dnl The use of .gmo is historical (it was needed to avoid overwriting the + dnl GNU format catalogs when building on a platform with an X/Open gettext), + dnl but we keep it in order not to force irrelevant filename changes on the + dnl maintainers. + dnl + AC_DEFUN([AM_WITH_NLS], + [AC_MSG_CHECKING([whether NLS is requested]) + dnl Default is enabled NLS + AC_ARG_ENABLE(nls, + [ --disable-nls do not use Native Language Support], + USE_NLS=$enableval, USE_NLS=yes) + AC_MSG_RESULT($USE_NLS) + AC_SUBST(USE_NLS) + + BUILD_INCLUDED_LIBINTL=no + USE_INCLUDED_LIBINTL=no + dnl GCC LOCAL: Separate concept of link command line from dependencies. + INTLLIBS= + INTLDEPS= + + dnl If we use NLS figure out what method + if test "$USE_NLS" = "yes"; then + AC_DEFINE(ENABLE_NLS, 1, + [Define to 1 if translation of program messages to the user's native language + is requested.]) + AC_MSG_CHECKING([whether included gettext is requested]) + AC_ARG_WITH(included-gettext, + [ --with-included-gettext use the GNU gettext library included here], + nls_cv_force_use_gnu_gettext=$withval, + nls_cv_force_use_gnu_gettext=no) + AC_MSG_RESULT($nls_cv_force_use_gnu_gettext) + + nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" + if test "$nls_cv_force_use_gnu_gettext" != "yes"; then + dnl User does not insist on using GNU NLS library. Figure out what + dnl to use. If GNU gettext is available we use this. Else we have + dnl to fall back to GNU NLS library. + CATOBJEXT=NONE + + dnl Add a version number to the cache macros. + define(gt_cv_func_gnugettext_libc, [gt_cv_func_gnugettext]ifelse([$2], need-ngettext, 2, 1)[_libc]) + define(gt_cv_func_gnugettext_libintl, [gt_cv_func_gnugettext]ifelse([$2], need-ngettext, 2, 1)[_libintl]) + + dnl GCC LOCAL: Expose presence of libintl.h to C code. + AC_CHECK_HEADER(libintl.h, + [AC_DEFINE([HAVE_LIBINTL_H], 1, + [Define if you have the header file.]) + AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc, + [AC_TRY_LINK([#include + extern int _nl_msg_cat_cntr;], + [bindtextdomain ("", ""); + return (int) gettext ("")]ifelse([$2], need-ngettext, [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr], + gt_cv_func_gnugettext_libc=yes, + gt_cv_func_gnugettext_libc=no)]) + + if test "$gt_cv_func_gnugettext_libc" != "yes"; then + AC_CACHE_CHECK([for GNU gettext in libintl], + gt_cv_func_gnugettext_libintl, + [gt_save_LIBS="$LIBS" + LIBS="$LIBS -lintl $LIBICONV" + AC_TRY_LINK([#include + extern int _nl_msg_cat_cntr;], + [bindtextdomain ("", ""); + return (int) gettext ("")]ifelse([$2], need-ngettext, [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr], + gt_cv_func_gnugettext_libintl=yes, + gt_cv_func_gnugettext_libintl=no) + LIBS="$gt_save_LIBS"]) + fi + + dnl If an already present or preinstalled GNU gettext() is found, + dnl use it. But if this macro is used in GNU gettext, and GNU + dnl gettext is already preinstalled in libintl, we update this + dnl libintl. (Cf. the install rule in intl/Makefile.in.) + if test "$gt_cv_func_gnugettext_libc" = "yes" \ + || { test "$gt_cv_func_gnugettext_libintl" = "yes" \ + && test "$PACKAGE" != gettext; }; then + AC_DEFINE(HAVE_GETTEXT, 1, + [Define if the GNU gettext() function is already present or preinstalled.]) + + if test "$gt_cv_func_gnugettext_libintl" = "yes"; then + dnl If iconv() is in a separate libiconv library, then anyone + dnl linking with libintl{.a,.so} also needs to link with + dnl libiconv. + INTLLIBS="-lintl $LIBICONV" + fi + + gt_save_LIBS="$LIBS" + LIBS="$LIBS $INTLLIBS" + AC_CHECK_FUNCS(dcgettext) + LIBS="$gt_save_LIBS" + + dnl Search for GNU msgfmt in the PATH. + AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, + [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1], :) + AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) + + dnl Search for GNU xgettext in the PATH. + AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [$ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1], :) + + CATOBJEXT=.gmo + fi + ]) + + if test "$CATOBJEXT" = "NONE"; then + dnl GNU gettext is not found in the C library. + dnl Fall back on GNU gettext library. + nls_cv_use_gnu_gettext=yes + fi + fi + + if test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Mark actions used to generate GNU NLS library. + INTLOBJS="\$(GETTOBJS)" + AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, + [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1], :) + AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) + AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [$ac_dir/$ac_word --omit-header /dev/null >/dev/null 2>&1], :) + AC_SUBST(MSGFMT) + BUILD_INCLUDED_LIBINTL=yes + USE_INCLUDED_LIBINTL=yes + CATOBJEXT=.gmo + INTLLIBS="ifelse([$3],[],\$(top_builddir)/intl,[$3])/libintl.ifelse([$1], use-libtool, [l], [])a $LIBICONV" + INTLDEPS="ifelse([$3],[],\$(top_builddir)/intl,[$3])/libintl.ifelse([$1], use-libtool, [l], [])a" + LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` + fi + + dnl This could go away some day; the PATH_PROG_WITH_TEST already does it. + dnl Test whether we really found GNU msgfmt. + if test "$GMSGFMT" != ":"; then + dnl If it is no GNU msgfmt we define it as : so that the + dnl Makefiles still can work. + if $GMSGFMT --statistics /dev/null >/dev/null 2>&1; then + : ; + else + AC_MSG_RESULT( + [found msgfmt program is not GNU msgfmt; ignore it]) + GMSGFMT=":" + fi + fi + + dnl This could go away some day; the PATH_PROG_WITH_TEST already does it. + dnl Test whether we really found GNU xgettext. + if test "$XGETTEXT" != ":"; then + dnl If it is no GNU xgettext we define it as : so that the + dnl Makefiles still can work. + if $XGETTEXT --omit-header /dev/null >/dev/null 2>&1; then + : ; + else + AC_MSG_RESULT( + [found xgettext program is not GNU xgettext; ignore it]) + XGETTEXT=":" + fi + fi + + dnl We need to process the po/ directory. + POSUB=po + fi + AC_OUTPUT_COMMANDS( + [for ac_file in $CONFIG_FILES; do + # Support "outfile[:infile[:infile...]]" + case "$ac_file" in + *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + esac + # PO directories have a Makefile.in generated from Makefile.in.in. + case "$ac_file" in */Makefile.in) + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then + rm -f "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" + sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," -e "\$s/\(.*\) \\\\/\1/" < "$ac_given_srcdir/$ac_dir/POTFILES.in" > "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" + sed -e "/POTFILES =/r $ac_dir/POTFILES" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" + fi + ;; + esac + done]) + + + dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL + dnl to 'yes' because some of the testsuite requires it. + if test "$PACKAGE" = gettext; then + BUILD_INCLUDED_LIBINTL=yes + fi + + dnl intl/plural.c is generated from intl/plural.y. It requires bison, + dnl because plural.y uses bison specific features. It requires at least + dnl bison-1.26 because earlier versions generate a plural.c that doesn't + dnl compile. + dnl bison is only needed for the maintainer (who touches plural.y). But in + dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put + dnl the rule in general Makefile. Now, some people carelessly touch the + dnl files or have a broken "make" program, hence the plural.c rule will + dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not + dnl present or too old. + AC_CHECK_PROGS([INTLBISON], [bison]) + if test -z "$INTLBISON"; then + ac_verc_fail=yes + else + dnl Found it, now check the version. + AC_MSG_CHECKING([version of bison]) + changequote(<<,>>)dnl + ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` + case $ac_prog_version in + '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; + 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) + changequote([,])dnl + ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; + *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; + esac + AC_MSG_RESULT([$ac_prog_version]) + fi + if test $ac_verc_fail = yes; then + INTLBISON=: + fi + + dnl GCC LOCAL: GMOFILES/POFILES removed as unnecessary. + + dnl Make all variables we use known to autoconf. + AC_SUBST(BUILD_INCLUDED_LIBINTL) + AC_SUBST(USE_INCLUDED_LIBINTL) + AC_SUBST(CATALOGS) + AC_SUBST(CATOBJEXT) + AC_SUBST(INTLLIBS) + AC_SUBST(INTLDEPS) + AC_SUBST(INTLOBJS) + AC_SUBST(POSUB) + dnl GCC LOCAL: Make USE_INCLUDED_LIBINTL visible to C code. + if test $USE_INCLUDED_LIBINTL = yes; then + AC_DEFINE([USE_INCLUDED_LIBINTL], 1, + [Define to use the libintl included with this package instead of any + version in the system libraries.]) + fi + + dnl For backward compatibility. Some configure.ins may be using this. + nls_cv_header_intl= + nls_cv_header_libgt= + + dnl For backward compatibility. Some Makefiles may be using this. + DATADIRNAME=share + AC_SUBST(DATADIRNAME) + + dnl For backward compatibility. Some Makefiles may be using this. + INSTOBJEXT=.mo + AC_SUBST(INSTOBJEXT) + + dnl For backward compatibility. Some Makefiles may be using this. + GENCAT=gencat + AC_SUBST(GENCAT) + ]) + + dnl Usage: Just like AM_WITH_NLS, which see. + AC_DEFUN([AM_GNU_GETTEXT], + [AC_REQUIRE([AC_PROG_MAKE_SET])dnl + AC_REQUIRE([AC_PROG_CC])dnl + AC_REQUIRE([AC_CANONICAL_HOST])dnl + AC_REQUIRE([AC_PROG_RANLIB])dnl + AC_REQUIRE([AC_ISC_POSIX])dnl + AC_REQUIRE([AC_HEADER_STDC])dnl + AC_REQUIRE([AC_C_CONST])dnl + AC_REQUIRE([AC_C_INLINE])dnl + AC_REQUIRE([AC_TYPE_OFF_T])dnl + AC_REQUIRE([AC_TYPE_SIZE_T])dnl + AC_REQUIRE([AC_FUNC_ALLOCA])dnl + dnl GCC LOCAL: Do not refer to AC_FUNC_MMAP, we have special needs. + dnl AC_REQUIRE([AC_FUNC_MMAP])dnl + AC_REQUIRE([jm_GLIBC21])dnl + + AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \ + stdlib.h string.h unistd.h sys/param.h]) + AC_CHECK_FUNCS([feof_unlocked fgets_unlocked getcwd getegid geteuid \ + getgid getuid mempcpy munmap putenv setenv setlocale stpcpy strchr strcasecmp \ + strdup strtoul tsearch __argz_count __argz_stringify __argz_next]) + + AM_ICONV + AM_LANGINFO_CODESET + AM_LC_MESSAGES + AM_WITH_NLS([$1],[$2],[$3]) + + dnl GCC LOCAL: The LINGUAS/ALL_LINGUAS/CATALOGS mess that was here + dnl has been torn out and replaced with this more sensible scheme. + if test "x$CATOBJEXT" != x; then + AC_MSG_CHECKING(for catalogs to be installed) + # Look for .po and .gmo files in the source directory. + CATALOGS= + XLINGUAS= + for cat in $srcdir/po/*$CATOBJEXT $srcdir/po/*.po; do + # If there aren't any .gmo files the shell will give us the + # literal string "../path/to/srcdir/po/*.gmo" which has to be + # weeded out. + case "$cat" in *\**) + continue;; + esac + # The quadruple backslash is collapsed to a double backslash + # by the backticks, then collapsed again by the double quotes, + # leaving us with one backslash in the sed expression (right + # before the dot that mustn't act as a wildcard). The dot to + # be escaped in the second expression is hiding inside CATOBJEXT. + cat=`echo $cat | sed -e "s!$srcdir/!!" -e "s!\\\\.po!$CATOBJEXT!"` + lang=`echo $cat | sed -e 's!po/!!' -e "s!\\\\$CATOBJEXT!!"` + # The user is allowed to set LINGUAS to a list of languages to + # install catalogs for. If it's empty that means "all of them." + if test "x$LINGUAS" = x; then + CATALOGS="$CATALOGS $cat" + XLINGUAS="$XLINGUAS $lang" + else + case "$LINGUAS" in *$lang*) + CATALOGS="$CATALOGS $cat" + XLINGUAS="$XLINGUAS $lang" + ;; + esac + fi + done + LINGUAS="$XLINGUAS" + AC_MSG_RESULT($LINGUAS) + fi + + dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly + dnl find the mkinstalldirs script in another subdir but $(top_srcdir). + dnl Try to locate is. + MKINSTALLDIRS= + if test -n "$ac_aux_dir"; then + MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" + fi + if test -z "$MKINSTALLDIRS"; then + MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" + fi + AC_SUBST(MKINSTALLDIRS) + + dnl Enable libtool support if the surrounding package wishes it. + INTL_LIBTOOL_SUFFIX_PREFIX=ifelse([$1], use-libtool, [l], []) + AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX) + ]) diff -Nrc3pad gcc-3.0.4/gcc/alias.c gcc-3.1/gcc/alias.c *** gcc-3.0.4/gcc/alias.c Sun Nov 18 08:16:38 2001 --- gcc-3.1/gcc/alias.c Mon Apr 22 18:14:28 2002 *************** *** 1,23 **** /* Alias analysis for GNU C ! Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. Contributed by John Carr (jfc@mit.edu). ! 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 "config.h" #include "system.h" --- 1,23 ---- /* Alias analysis for GNU C ! Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by John Carr (jfc@mit.edu). ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" #include "system.h" *************** Boston, MA 02111-1307, USA. */ *** 35,40 **** --- 35,41 ---- #include "cselib.h" #include "splay-tree.h" #include "ggc.h" + #include "langhooks.h" /* The alias sets assigned to MEMs assist the back-end in determining which MEMs can alias which other MEMs. In general, two MEMs in *************** Boston, MA 02111-1307, USA. */ *** 59,65 **** To see whether two alias sets can point to the same memory, we must see if either alias set is a subset of the other. We need not trace ! past immediate decendents, however, since we propagate all grandchildren up one level. Alias set zero is implicitly a superset of all other alias sets. --- 60,66 ---- To see whether two alias sets can point to the same memory, we must see if either alias set is a subset of the other. We need not trace ! past immediate descendents, however, since we propagate all grandchildren up one level. Alias set zero is implicitly a superset of all other alias sets. *************** typedef struct alias_set_entry *** 72,78 **** HOST_WIDE_INT alias_set; /* The children of the alias set. These are not just the immediate ! children, but, in fact, all decendents. So, if we have: struct T { struct S s; float f; } --- 73,79 ---- HOST_WIDE_INT alias_set; /* The children of the alias set. These are not just the immediate ! children, but, in fact, all descendents. So, if we have: struct T { struct S s; float f; } *************** typedef struct alias_set_entry *** 87,114 **** static int rtx_equal_for_memref_p PARAMS ((rtx, rtx)); static rtx find_symbolic_term PARAMS ((rtx)); ! static rtx get_addr PARAMS ((rtx)); static int memrefs_conflict_p PARAMS ((int, rtx, int, rtx, HOST_WIDE_INT)); static void record_set PARAMS ((rtx, rtx, void *)); static rtx find_base_term PARAMS ((rtx)); static int base_alias_check PARAMS ((rtx, rtx, enum machine_mode, enum machine_mode)); - static int handled_component_p PARAMS ((tree)); - static int can_address_p PARAMS ((tree)); static rtx find_base_value PARAMS ((rtx)); static int mems_in_disjoint_alias_sets_p PARAMS ((rtx, rtx)); static int insert_subset_children PARAMS ((splay_tree_node, void*)); ! static tree find_base_decl PARAMS ((tree)); static alias_set_entry get_alias_set_entry PARAMS ((HOST_WIDE_INT)); static rtx fixed_scalar_and_varying_struct_p PARAMS ((rtx, rtx, rtx, rtx, int (*) (rtx, int))); static int aliases_everything_p PARAMS ((rtx)); static int write_dependence_p PARAMS ((rtx, rtx, int)); static int nonlocal_mentioned_p PARAMS ((rtx)); - static int loop_p PARAMS ((void)); - /* Set up all info needed to perform alias analysis on memory references. */ /* Returns the size in bytes of the mode of X. */ --- 88,115 ---- static int rtx_equal_for_memref_p PARAMS ((rtx, rtx)); static rtx find_symbolic_term PARAMS ((rtx)); ! rtx get_addr PARAMS ((rtx)); static int memrefs_conflict_p PARAMS ((int, rtx, int, rtx, HOST_WIDE_INT)); static void record_set PARAMS ((rtx, rtx, void *)); static rtx find_base_term PARAMS ((rtx)); static int base_alias_check PARAMS ((rtx, rtx, enum machine_mode, enum machine_mode)); static rtx find_base_value PARAMS ((rtx)); static int mems_in_disjoint_alias_sets_p PARAMS ((rtx, rtx)); static int insert_subset_children PARAMS ((splay_tree_node, void*)); ! static tree find_base_decl PARAMS ((tree)); static alias_set_entry get_alias_set_entry PARAMS ((HOST_WIDE_INT)); static rtx fixed_scalar_and_varying_struct_p PARAMS ((rtx, rtx, rtx, rtx, int (*) (rtx, int))); static int aliases_everything_p PARAMS ((rtx)); + static bool nonoverlapping_component_refs_p PARAMS ((tree, tree)); + static tree decl_for_component_ref PARAMS ((tree)); + static rtx adjust_offset_for_component_ref PARAMS ((tree, rtx)); + static int nonoverlapping_memrefs_p PARAMS ((rtx, rtx)); static int write_dependence_p PARAMS ((rtx, rtx, int)); static int nonlocal_mentioned_p PARAMS ((rtx)); /* Set up all info needed to perform alias analysis on memory references. */ /* Returns the size in bytes of the mode of X. */ *************** objects_must_conflict_p (t1, t2) *** 336,342 **** != (t2 != 0 && AGGREGATE_TYPE_P (t2))) return 0; ! /* Otherwise they conflict only if the alias sets conflict. */ return alias_sets_conflict_p (t1 ? get_alias_set (t1) : 0, t2 ? get_alias_set (t2) : 0); } --- 337,343 ---- != (t2 != 0 && AGGREGATE_TYPE_P (t2))) return 0; ! /* Otherwise they conflict only if the alias sets conflict. */ return alias_sets_conflict_p (t1 ? get_alias_set (t1) : 0, t2 ? get_alias_set (t2) : 0); } *************** objects_must_conflict_p (t1, t2) *** 344,350 **** /* T is an expression with pointer type. Find the DECL on which this expression is based. (For example, in `a[i]' this would be `a'.) If there is no such DECL, or a unique decl cannot be determined, ! NULL_TREE is retured. */ static tree find_base_decl (t) --- 345,351 ---- /* T is an expression with pointer type. Find the DECL on which this expression is based. (For example, in `a[i]' this would be `a'.) If there is no such DECL, or a unique decl cannot be determined, ! NULL_TREE is returned. */ static tree find_base_decl (t) *************** find_base_decl (t) *** 383,389 **** case '3': d0 = find_base_decl (TREE_OPERAND (t, 0)); d1 = find_base_decl (TREE_OPERAND (t, 1)); - d0 = find_base_decl (TREE_OPERAND (t, 0)); d2 = find_base_decl (TREE_OPERAND (t, 2)); /* Set any nonzero values from the last, then from the first. */ --- 384,389 ---- *************** find_base_decl (t) *** 401,434 **** } } - /* Return 1 if T is an expression that get_inner_reference handles. */ - - static int - handled_component_p (t) - tree t; - { - switch (TREE_CODE (t)) - { - case BIT_FIELD_REF: - case COMPONENT_REF: - case ARRAY_REF: - case NON_LVALUE_EXPR: - return 1; - - case NOP_EXPR: - case CONVERT_EXPR: - return (TYPE_MODE (TREE_TYPE (t)) - == TYPE_MODE (TREE_TYPE (TREE_OPERAND (t, 0)))); - - default: - return 0; - } - } - /* Return 1 if all the nested component references handled by get_inner_reference in T are such that we can address the object in T. */ ! static int can_address_p (t) tree t; { --- 401,410 ---- } } /* Return 1 if all the nested component references handled by get_inner_reference in T are such that we can address the object in T. */ ! int can_address_p (t) tree t; { *************** can_address_p (t) *** 440,452 **** else if (TREE_CODE (t) == BIT_FIELD_REF) return 0; else if (TREE_CODE (t) == COMPONENT_REF && ! DECL_NONADDRESSABLE_P (TREE_OPERAND (t, 1)) && can_address_p (TREE_OPERAND (t, 0))) return 1; ! else if (TREE_CODE (t) == ARRAY_REF && ! TYPE_NONALIASED_COMPONENT (TREE_TYPE (TREE_OPERAND (t, 0))) && can_address_p (TREE_OPERAND (t, 0))) return 1; --- 416,433 ---- else if (TREE_CODE (t) == BIT_FIELD_REF) return 0; + /* Fields are addressable unless they are marked as nonaddressable or + the containing type has alias set 0. */ else if (TREE_CODE (t) == COMPONENT_REF && ! DECL_NONADDRESSABLE_P (TREE_OPERAND (t, 1)) + && get_alias_set (TREE_TYPE (TREE_OPERAND (t, 0))) != 0 && can_address_p (TREE_OPERAND (t, 0))) return 1; ! /* Likewise for arrays. */ ! else if ((TREE_CODE (t) == ARRAY_REF || TREE_CODE (t) == ARRAY_RANGE_REF) && ! TYPE_NONALIASED_COMPONENT (TREE_TYPE (TREE_OPERAND (t, 0))) + && get_alias_set (TREE_TYPE (TREE_OPERAND (t, 0))) != 0 && can_address_p (TREE_OPERAND (t, 0))) return 1; *************** HOST_WIDE_INT *** 460,466 **** get_alias_set (t) tree t; { - tree orig_t; HOST_WIDE_INT set; /* If we're not doing any alias analysis, just assume everything --- 441,446 ---- *************** get_alias_set (t) *** 472,519 **** return 0; /* We can be passed either an expression or a type. This and the ! language-specific routine may make mutually-recursive calls to ! each other to figure out what to do. At each juncture, we see if ! this is a tree that the language may need to handle specially. ! First handle things that aren't types and start by removing nops ! since we care only about the actual object. */ if (! TYPE_P (t)) { ! while (TREE_CODE (t) == NOP_EXPR || TREE_CODE (t) == CONVERT_EXPR ! || TREE_CODE (t) == NON_LVALUE_EXPR) ! t = TREE_OPERAND (t, 0); ! /* Now give the language a chance to do something but record what we ! gave it this time. */ ! orig_t = t; ! if ((set = lang_get_alias_set (t)) != -1) return set; ! /* Now loop the same way as get_inner_reference and get the alias ! set to use. Pick up the outermost object that we could have ! a pointer to. */ ! while (handled_component_p (t) && ! can_address_p (t)) ! t = TREE_OPERAND (t, 0); ! if (TREE_CODE (t) == INDIRECT_REF) { ! /* Check for accesses through restrict-qualified pointers. */ ! tree decl = find_base_decl (TREE_OPERAND (t, 0)); if (decl && DECL_POINTER_ALIAS_SET_KNOWN_P (decl)) ! /* We use the alias set indicated in the declaration. */ ! return DECL_POINTER_ALIAS_SET (decl); /* If we have an INDIRECT_REF via a void pointer, we don't know anything about what that might alias. */ ! if (TREE_CODE (TREE_TYPE (t)) == VOID_TYPE) return 0; } ! /* Give the language another chance to do something special. */ ! if (orig_t != t ! && (set = lang_get_alias_set (t)) != -1) ! return set; /* Now all we care about is the type. */ t = TREE_TYPE (t); --- 452,548 ---- return 0; /* We can be passed either an expression or a type. This and the ! language-specific routine may make mutually-recursive calls to each other ! to figure out what to do. At each juncture, we see if this is a tree ! that the language may need to handle specially. First handle things that ! aren't types. */ if (! TYPE_P (t)) { ! tree inner = t; ! tree placeholder_ptr = 0; ! /* Remove any nops, then give the language a chance to do ! something with this tree before we look at it. */ ! STRIP_NOPS (t); ! set = (*lang_hooks.get_alias_set) (t); ! if (set != -1) return set; ! /* First see if the actual object referenced is an INDIRECT_REF from a ! restrict-qualified pointer or a "void *". Replace ! PLACEHOLDER_EXPRs. */ ! while (TREE_CODE (inner) == PLACEHOLDER_EXPR ! || handled_component_p (inner)) ! { ! if (TREE_CODE (inner) == PLACEHOLDER_EXPR) ! inner = find_placeholder (inner, &placeholder_ptr); ! else ! inner = TREE_OPERAND (inner, 0); ! STRIP_NOPS (inner); ! } ! ! /* Check for accesses through restrict-qualified pointers. */ ! if (TREE_CODE (inner) == INDIRECT_REF) { ! tree decl = find_base_decl (TREE_OPERAND (inner, 0)); if (decl && DECL_POINTER_ALIAS_SET_KNOWN_P (decl)) ! { ! /* If we haven't computed the actual alias set, do it now. */ ! if (DECL_POINTER_ALIAS_SET (decl) == -2) ! { ! /* No two restricted pointers can point at the same thing. ! However, a restricted pointer can point at the same thing ! as an unrestricted pointer, if that unrestricted pointer ! is based on the restricted pointer. So, we make the ! alias set for the restricted pointer a subset of the ! alias set for the type pointed to by the type of the ! decl. */ ! HOST_WIDE_INT pointed_to_alias_set ! = get_alias_set (TREE_TYPE (TREE_TYPE (decl))); ! ! if (pointed_to_alias_set == 0) ! /* It's not legal to make a subset of alias set zero. */ ! ; ! else ! { ! DECL_POINTER_ALIAS_SET (decl) = new_alias_set (); ! record_alias_subset (pointed_to_alias_set, ! DECL_POINTER_ALIAS_SET (decl)); ! } ! } ! ! /* We use the alias set indicated in the declaration. */ ! return DECL_POINTER_ALIAS_SET (decl); ! } /* If we have an INDIRECT_REF via a void pointer, we don't know anything about what that might alias. */ ! else if (TREE_CODE (TREE_TYPE (inner)) == VOID_TYPE) return 0; } ! /* Otherwise, pick up the outermost object that we could have a pointer ! to, processing conversion and PLACEHOLDER_EXPR as above. */ ! placeholder_ptr = 0; ! while (TREE_CODE (t) == PLACEHOLDER_EXPR ! || (handled_component_p (t) && ! can_address_p (t))) ! { ! if (TREE_CODE (t) == PLACEHOLDER_EXPR) ! t = find_placeholder (t, &placeholder_ptr); ! else ! t = TREE_OPERAND (t, 0); ! ! STRIP_NOPS (t); ! } ! ! /* If we've already determined the alias set for a decl, just return ! it. This is necessary for C++ anonymous unions, whose component ! variables don't look like union members (boo!). */ ! if (TREE_CODE (t) == VAR_DECL ! && DECL_RTL_SET_P (t) && GET_CODE (DECL_RTL (t)) == MEM) ! return MEM_ALIAS_SET (DECL_RTL (t)); /* Now all we care about is the type. */ t = TREE_TYPE (t); *************** get_alias_set (t) *** 522,537 **** /* Variant qualifiers don't affect the alias set, so get the main variant. If this is a type with a known alias set, return it. */ t = TYPE_MAIN_VARIANT (t); ! if (TYPE_P (t) && TYPE_ALIAS_SET_KNOWN_P (t)) return TYPE_ALIAS_SET (t); /* See if the language has special handling for this type. */ ! if ((set = lang_get_alias_set (t)) != -1) ! { ! /* If the alias set is now known, we are done. */ ! if (TYPE_ALIAS_SET_KNOWN_P (t)) ! return TYPE_ALIAS_SET (t); ! } /* There are no objects of FUNCTION_TYPE, so there's no point in using up an alias set for them. (There are, of course, pointers --- 551,563 ---- /* Variant qualifiers don't affect the alias set, so get the main variant. If this is a type with a known alias set, return it. */ t = TYPE_MAIN_VARIANT (t); ! if (TYPE_ALIAS_SET_KNOWN_P (t)) return TYPE_ALIAS_SET (t); /* See if the language has special handling for this type. */ ! set = (*lang_hooks.get_alias_set) (t); ! if (set != -1) ! return set; /* There are no objects of FUNCTION_TYPE, so there's no point in using up an alias set for them. (There are, of course, pointers *************** record_alias_subset (superset, subset) *** 582,587 **** --- 608,618 ---- alias_set_entry superset_entry; alias_set_entry subset_entry; + /* It is possible in complex type situations for both sets to be the same, + in which case we can ignore this operation. */ + if (superset == subset) + return; + if (superset == 0) abort (); *************** get_frame_alias_set () *** 694,702 **** static rtx find_base_value (src) ! register rtx src; { unsigned int regno; switch (GET_CODE (src)) { case SYMBOL_REF: --- 725,734 ---- static rtx find_base_value (src) ! rtx src; { unsigned int regno; + switch (GET_CODE (src)) { case SYMBOL_REF: *************** find_base_value (src) *** 713,724 **** return new_reg_base_value[regno]; /* If a pseudo has a known base value, return it. Do not do this ! for hard regs since it can result in a circular dependency ! chain for registers which have values at function entry. The test above is not sufficient because the scheduler may move a copy out of an arg reg past the NOTE_INSN_FUNCTION_BEGIN. */ ! if (regno >= FIRST_PSEUDO_REGISTER && regno < reg_base_value_size && reg_base_value[regno]) return reg_base_value[regno]; --- 745,756 ---- return new_reg_base_value[regno]; /* If a pseudo has a known base value, return it. Do not do this ! for non-fixed hard regs since it can result in a circular ! dependency chain for registers which have values at function entry. The test above is not sufficient because the scheduler may move a copy out of an arg reg past the NOTE_INSN_FUNCTION_BEGIN. */ ! if ((regno >= FIRST_PSEUDO_REGISTER || fixed_regs[regno]) && regno < reg_base_value_size && reg_base_value[regno]) return reg_base_value[regno]; *************** find_base_value (src) *** 741,769 **** if (GET_CODE (src) != PLUS && GET_CODE (src) != MINUS) break; ! /* ... fall through ... */ case PLUS: case MINUS: { rtx temp, src_0 = XEXP (src, 0), src_1 = XEXP (src, 1); /* If either operand is a REG, then see if we already have a known value for it. */ ! if (GET_CODE (src_0) == REG) { temp = find_base_value (src_0); if (temp != 0) src_0 = temp; } ! if (GET_CODE (src_1) == REG) { temp = find_base_value (src_1); if (temp!= 0) src_1 = temp; } /* Guess which operand is the base address: If either operand is a symbol, then it is the base. If either operand is a CONST_INT, then the other is the base. */ --- 773,825 ---- if (GET_CODE (src) != PLUS && GET_CODE (src) != MINUS) break; ! /* ... fall through ... */ case PLUS: case MINUS: { rtx temp, src_0 = XEXP (src, 0), src_1 = XEXP (src, 1); + /* If either operand is a REG that is a known pointer, then it + is the base. */ + if (REG_P (src_0) && REG_POINTER (src_0)) + return find_base_value (src_0); + if (REG_P (src_1) && REG_POINTER (src_1)) + return find_base_value (src_1); + /* If either operand is a REG, then see if we already have a known value for it. */ ! if (REG_P (src_0)) { temp = find_base_value (src_0); if (temp != 0) src_0 = temp; } ! if (REG_P (src_1)) { temp = find_base_value (src_1); if (temp!= 0) src_1 = temp; } + /* If either base is named object or a special address + (like an argument or stack reference), then use it for the + base term. */ + if (src_0 != 0 + && (GET_CODE (src_0) == SYMBOL_REF + || GET_CODE (src_0) == LABEL_REF + || (GET_CODE (src_0) == ADDRESS + && GET_MODE (src_0) != VOIDmode))) + return src_0; + + if (src_1 != 0 + && (GET_CODE (src_1) == SYMBOL_REF + || GET_CODE (src_1) == LABEL_REF + || (GET_CODE (src_1) == ADDRESS + && GET_MODE (src_1) != VOIDmode))) + return src_1; + /* Guess which operand is the base address: If either operand is a symbol, then it is the base. If either operand is a CONST_INT, then the other is the base. */ *************** find_base_value (src) *** 772,785 **** else if (GET_CODE (src_0) == CONST_INT || CONSTANT_P (src_1)) return find_base_value (src_1); - /* This might not be necessary anymore: - If either operand is a REG that is a known pointer, then it - is the base. */ - else if (GET_CODE (src_0) == REG && REG_POINTER (src_0)) - return find_base_value (src_0); - else if (GET_CODE (src_1) == REG && REG_POINTER (src_1)) - return find_base_value (src_1); - return 0; } --- 828,833 ---- *************** find_base_value (src) *** 790,796 **** case AND: /* If the second operand is constant set the base ! address to the first operand. */ if (GET_CODE (XEXP (src, 1)) == CONST_INT && INTVAL (XEXP (src, 1)) != 0) return find_base_value (XEXP (src, 0)); return 0; --- 838,844 ---- case AND: /* If the second operand is constant set the base ! address to the first operand. */ if (GET_CODE (XEXP (src, 1)) == CONST_INT && INTVAL (XEXP (src, 1)) != 0) return find_base_value (XEXP (src, 0)); return 0; *************** find_base_value (src) *** 799,809 **** if (GET_MODE_SIZE (GET_MODE (src)) < GET_MODE_SIZE (Pmode)) break; /* Fall through. */ - case ZERO_EXTEND: - case SIGN_EXTEND: /* used for NT/Alpha pointers */ case HIGH: return find_base_value (XEXP (src, 0)); default: break; } --- 847,874 ---- if (GET_MODE_SIZE (GET_MODE (src)) < GET_MODE_SIZE (Pmode)) break; /* Fall through. */ case HIGH: + case PRE_INC: + case PRE_DEC: + case POST_INC: + case POST_DEC: + case PRE_MODIFY: + case POST_MODIFY: return find_base_value (XEXP (src, 0)); + case ZERO_EXTEND: + case SIGN_EXTEND: /* used for NT/Alpha pointers */ + { + rtx temp = find_base_value (XEXP (src, 0)); + + #ifdef POINTERS_EXTEND_UNSIGNED + if (temp != 0 && CONSTANT_P (temp) && GET_MODE (temp) != Pmode) + temp = convert_memory_address (Pmode, temp); + #endif + + return temp; + } + default: break; } *************** record_set (dest, set, data) *** 826,832 **** rtx dest, set; void *data ATTRIBUTE_UNUSED; { ! register unsigned regno; rtx src; if (GET_CODE (dest) != REG) --- 891,897 ---- rtx dest, set; void *data ATTRIBUTE_UNUSED; { ! unsigned regno; rtx src; if (GET_CODE (dest) != REG) *************** canon_rtx (x) *** 973,984 **** if (x0 != XEXP (x, 0) || x1 != XEXP (x, 1)) { - /* We can tolerate LO_SUMs being offset here; these - rtl are used for nothing other than comparisons. */ if (GET_CODE (x0) == CONST_INT) ! return plus_constant_for_output (x1, INTVAL (x0)); else if (GET_CODE (x1) == CONST_INT) ! return plus_constant_for_output (x0, INTVAL (x1)); return gen_rtx_PLUS (GET_MODE (x), x0, x1); } } --- 1038,1047 ---- if (x0 != XEXP (x, 0) || x1 != XEXP (x, 1)) { if (GET_CODE (x0) == CONST_INT) ! return plus_constant (x1, INTVAL (x0)); else if (GET_CODE (x1) == CONST_INT) ! return plus_constant (x0, INTVAL (x1)); return gen_rtx_PLUS (GET_MODE (x), x0, x1); } } *************** canon_rtx (x) *** 988,1004 **** MEM alone, but need to return the canonicalized MEM with all the flags with their original values. */ else if (GET_CODE (x) == MEM) ! { ! rtx addr = canon_rtx (XEXP (x, 0)); ! ! if (addr != XEXP (x, 0)) ! { ! rtx new = gen_rtx_MEM (GET_MODE (x), addr); - MEM_COPY_ATTRIBUTES (new, x); - x = new; - } - } return x; } --- 1051,1058 ---- MEM alone, but need to return the canonicalized MEM with all the flags with their original values. */ else if (GET_CODE (x) == MEM) ! x = replace_equiv_address_nv (x, canon_rtx (XEXP (x, 0))); return x; } *************** static int *** 1011,1020 **** rtx_equal_for_memref_p (x, y) rtx x, y; { ! register int i; ! register int j; ! register enum rtx_code code; ! register const char *fmt; if (x == 0 && y == 0) return 1; --- 1065,1074 ---- rtx_equal_for_memref_p (x, y) rtx x, y; { ! int i; ! int j; ! enum rtx_code code; ! const char *fmt; if (x == 0 && y == 0) return 1; *************** rtx_equal_for_memref_p (x, y) *** 1042,1048 **** switch (code) { case VALUE: ! return CSELIB_VAL_PTR (x) == CSELIB_VAL_PTR (y); case REG: return REGNO (x) == REGNO (y); --- 1096,1102 ---- switch (code) { case VALUE: ! return CSELIB_VAL_PTR (x) == CSELIB_VAL_PTR (y); case REG: return REGNO (x) == REGNO (y); *************** rtx_equal_for_memref_p (x, y) *** 1117,1123 **** case 's': if (strcmp (XSTR (x, i), XSTR (y, i))) return 0; ! break; /* This can happen for an asm which clobbers memory. */ case '0': --- 1171,1177 ---- case 's': if (strcmp (XSTR (x, i), XSTR (y, i))) return 0; ! break; /* This can happen for an asm which clobbers memory. */ case '0': *************** static rtx *** 1140,1148 **** find_symbolic_term (x) rtx x; { ! register int i; ! register enum rtx_code code; ! register const char *fmt; code = GET_CODE (x); if (code == SYMBOL_REF || code == LABEL_REF) --- 1194,1202 ---- find_symbolic_term (x) rtx x; { ! int i; ! enum rtx_code code; ! const char *fmt; code = GET_CODE (x); if (code == SYMBOL_REF || code == LABEL_REF) *************** find_symbolic_term (x) *** 1169,1175 **** static rtx find_base_term (x) ! register rtx x; { cselib_val *val; struct elt_loc_list *l; --- 1223,1229 ---- static rtx find_base_term (x) ! rtx x; { cselib_val *val; struct elt_loc_list *l; *************** find_base_term (x) *** 1184,1198 **** case REG: return REG_BASE_VALUE (x); ! case ZERO_EXTEND: ! case SIGN_EXTEND: /* Used for Alpha/NT pointers */ case HIGH: case PRE_INC: case PRE_DEC: case POST_INC: case POST_DEC: return find_base_term (XEXP (x, 0)); case VALUE: val = CSELIB_VAL_PTR (x); for (l = val->locs; l; l = l->next) --- 1238,1269 ---- case REG: return REG_BASE_VALUE (x); ! case TRUNCATE: ! if (GET_MODE_SIZE (GET_MODE (x)) < GET_MODE_SIZE (Pmode)) ! return 0; ! /* Fall through. */ case HIGH: case PRE_INC: case PRE_DEC: case POST_INC: case POST_DEC: + case PRE_MODIFY: + case POST_MODIFY: return find_base_term (XEXP (x, 0)); + case ZERO_EXTEND: + case SIGN_EXTEND: /* Used for Alpha/NT pointers */ + { + rtx temp = find_base_term (XEXP (x, 0)); + + #ifdef POINTERS_EXTEND_UNSIGNED + if (temp != 0 && CONSTANT_P (temp) && GET_MODE (temp) != Pmode) + temp = convert_memory_address (Pmode, temp); + #endif + + return temp; + } + case VALUE: val = CSELIB_VAL_PTR (x); for (l = val->locs; l; l = l->next) *************** find_base_term (x) *** 1212,1218 **** rtx tmp1 = XEXP (x, 0); rtx tmp2 = XEXP (x, 1); ! /* This is a litle bit tricky since we have to determine which of the two operands represents the real base address. Otherwise this routine may return the index register instead of the base register. --- 1283,1289 ---- rtx tmp1 = XEXP (x, 0); rtx tmp2 = XEXP (x, 1); ! /* This is a little bit tricky since we have to determine which of the two operands represents the real base address. Otherwise this routine may return the index register instead of the base register. *************** find_base_term (x) *** 1264,1271 **** } case AND: ! if (GET_CODE (XEXP (x, 0)) == REG && GET_CODE (XEXP (x, 1)) == CONST_INT) ! return REG_BASE_VALUE (XEXP (x, 0)); return 0; case SYMBOL_REF: --- 1335,1342 ---- } case AND: ! if (GET_CODE (XEXP (x, 1)) == CONST_INT && INTVAL (XEXP (x, 1)) != 0) ! return find_base_term (XEXP (x, 0)); return 0; case SYMBOL_REF: *************** base_alias_check (x, y, x_mode, y_mode) *** 1332,1342 **** return 1; if (GET_CODE (x) == AND && (GET_CODE (XEXP (x, 1)) != CONST_INT ! || GET_MODE_UNIT_SIZE (y_mode) < -INTVAL (XEXP (x, 1)))) return 1; if (GET_CODE (y) == AND && (GET_CODE (XEXP (y, 1)) != CONST_INT ! || GET_MODE_UNIT_SIZE (x_mode) < -INTVAL (XEXP (y, 1)))) return 1; /* Differing symbols never alias. */ return 0; --- 1403,1413 ---- return 1; if (GET_CODE (x) == AND && (GET_CODE (XEXP (x, 1)) != CONST_INT ! || (int) GET_MODE_UNIT_SIZE (y_mode) < -INTVAL (XEXP (x, 1)))) return 1; if (GET_CODE (y) == AND && (GET_CODE (XEXP (y, 1)) != CONST_INT ! || (int) GET_MODE_UNIT_SIZE (x_mode) < -INTVAL (XEXP (y, 1)))) return 1; /* Differing symbols never alias. */ return 0; *************** base_alias_check (x, y, x_mode, y_mode) *** 1356,1362 **** if (flag_argument_noalias > 1) return 0; ! /* Weak noalias assertion (arguments are distinct, but may match globals). */ return ! (GET_MODE (x_base) == VOIDmode && GET_MODE (y_base) == VOIDmode); } --- 1427,1433 ---- if (flag_argument_noalias > 1) return 0; ! /* Weak noalias assertion (arguments are distinct, but may match globals). */ return ! (GET_MODE (x_base) == VOIDmode && GET_MODE (y_base) == VOIDmode); } *************** base_alias_check (x, y, x_mode, y_mode) *** 1364,1370 **** it unchanged unless it is a value; in the latter case we call cselib to get a more useful rtx. */ ! static rtx get_addr (x) rtx x; { --- 1435,1441 ---- it unchanged unless it is a value; in the latter case we call cselib to get a more useful rtx. */ ! rtx get_addr (x) rtx x; { *************** addr_side_effect_eval (addr, size, n_ref *** 1443,1449 **** static int memrefs_conflict_p (xsize, x, ysize, y, c) ! register rtx x, y; int xsize, ysize; HOST_WIDE_INT c; { --- 1514,1520 ---- static int memrefs_conflict_p (xsize, x, ysize, y, c) ! rtx x, y; int xsize, ysize; HOST_WIDE_INT c; { *************** aliases_everything_p (mem) *** 1719,1724 **** --- 1790,2012 ---- return 0; } + /* Return true if we can determine that the fields referenced cannot + overlap for any pair of objects. */ + + static bool + nonoverlapping_component_refs_p (x, y) + tree x, y; + { + tree fieldx, fieldy, typex, typey, orig_y; + + do + { + /* The comparison has to be done at a common type, since we don't + know how the inheritance hierarchy works. */ + orig_y = y; + do + { + fieldx = TREE_OPERAND (x, 1); + typex = DECL_FIELD_CONTEXT (fieldx); + + y = orig_y; + do + { + fieldy = TREE_OPERAND (y, 1); + typey = DECL_FIELD_CONTEXT (fieldy); + + if (typex == typey) + goto found; + + y = TREE_OPERAND (y, 0); + } + while (y && TREE_CODE (y) == COMPONENT_REF); + + x = TREE_OPERAND (x, 0); + } + while (x && TREE_CODE (x) == COMPONENT_REF); + + /* Never found a common type. */ + return false; + + found: + /* If we're left with accessing different fields of a structure, + then no overlap. */ + if (TREE_CODE (typex) == RECORD_TYPE + && fieldx != fieldy) + return true; + + /* The comparison on the current field failed. If we're accessing + a very nested structure, look at the next outer level. */ + x = TREE_OPERAND (x, 0); + y = TREE_OPERAND (y, 0); + } + while (x && y + && TREE_CODE (x) == COMPONENT_REF + && TREE_CODE (y) == COMPONENT_REF); + + return false; + } + + /* Look at the bottom of the COMPONENT_REF list for a DECL, and return it. */ + + static tree + decl_for_component_ref (x) + tree x; + { + do + { + x = TREE_OPERAND (x, 0); + } + while (x && TREE_CODE (x) == COMPONENT_REF); + + return x && DECL_P (x) ? x : NULL_TREE; + } + + /* Walk up the COMPONENT_REF list and adjust OFFSET to compensate for the + offset of the field reference. */ + + static rtx + adjust_offset_for_component_ref (x, offset) + tree x; + rtx offset; + { + HOST_WIDE_INT ioffset; + + if (! offset) + return NULL_RTX; + + ioffset = INTVAL (offset); + do + { + tree field = TREE_OPERAND (x, 1); + + if (! host_integerp (DECL_FIELD_OFFSET (field), 1)) + return NULL_RTX; + ioffset += (tree_low_cst (DECL_FIELD_OFFSET (field), 1) + + (tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1) + / BITS_PER_UNIT)); + + x = TREE_OPERAND (x, 0); + } + while (x && TREE_CODE (x) == COMPONENT_REF); + + return GEN_INT (ioffset); + } + + /* Return nonzero if we can deterimine the exprs corresponding to memrefs + X and Y and they do not overlap. */ + + static int + nonoverlapping_memrefs_p (x, y) + rtx x, y; + { + tree exprx = MEM_EXPR (x), expry = MEM_EXPR (y); + rtx rtlx, rtly; + rtx basex, basey; + rtx moffsetx, moffsety; + HOST_WIDE_INT offsetx = 0, offsety = 0, sizex, sizey, tem; + + /* Unless both have exprs, we can't tell anything. */ + if (exprx == 0 || expry == 0) + return 0; + + /* If both are field references, we may be able to determine something. */ + if (TREE_CODE (exprx) == COMPONENT_REF + && TREE_CODE (expry) == COMPONENT_REF + && nonoverlapping_component_refs_p (exprx, expry)) + return 1; + + /* If the field reference test failed, look at the DECLs involved. */ + moffsetx = MEM_OFFSET (x); + if (TREE_CODE (exprx) == COMPONENT_REF) + { + tree t = decl_for_component_ref (exprx); + if (! t) + return 0; + moffsetx = adjust_offset_for_component_ref (exprx, moffsetx); + exprx = t; + } + moffsety = MEM_OFFSET (y); + if (TREE_CODE (expry) == COMPONENT_REF) + { + tree t = decl_for_component_ref (expry); + if (! t) + return 0; + moffsety = adjust_offset_for_component_ref (expry, moffsety); + expry = t; + } + + if (! DECL_P (exprx) || ! DECL_P (expry)) + return 0; + + rtlx = DECL_RTL (exprx); + rtly = DECL_RTL (expry); + + /* If either RTL is not a MEM, it must be a REG or CONCAT, meaning they + can't overlap unless they are the same because we never reuse that part + of the stack frame used for locals for spilled pseudos. */ + if ((GET_CODE (rtlx) != MEM || GET_CODE (rtly) != MEM) + && ! rtx_equal_p (rtlx, rtly)) + return 1; + + /* Get the base and offsets of both decls. If either is a register, we + know both are and are the same, so use that as the base. The only + we can avoid overlap is if we can deduce that they are nonoverlapping + pieces of that decl, which is very rare. */ + basex = GET_CODE (rtlx) == MEM ? XEXP (rtlx, 0) : rtlx; + if (GET_CODE (basex) == PLUS && GET_CODE (XEXP (basex, 1)) == CONST_INT) + offsetx = INTVAL (XEXP (basex, 1)), basex = XEXP (basex, 0); + + basey = GET_CODE (rtly) == MEM ? XEXP (rtly, 0) : rtly; + if (GET_CODE (basey) == PLUS && GET_CODE (XEXP (basey, 1)) == CONST_INT) + offsety = INTVAL (XEXP (basey, 1)), basey = XEXP (basey, 0); + + /* If the bases are different, we know they do not overlap if both + are constants or if one is a constant and the other a pointer into the + stack frame. Otherwise a different base means we can't tell if they + overlap or not. */ + if (! rtx_equal_p (basex, basey)) + return ((CONSTANT_P (basex) && CONSTANT_P (basey)) + || (CONSTANT_P (basex) && REG_P (basey) + && REGNO_PTR_FRAME_P (REGNO (basey))) + || (CONSTANT_P (basey) && REG_P (basex) + && REGNO_PTR_FRAME_P (REGNO (basex)))); + + sizex = (GET_CODE (rtlx) != MEM ? (int) GET_MODE_SIZE (GET_MODE (rtlx)) + : MEM_SIZE (rtlx) ? INTVAL (MEM_SIZE (rtlx)) + : -1); + sizey = (GET_CODE (rtly) != MEM ? (int) GET_MODE_SIZE (GET_MODE (rtly)) + : MEM_SIZE (rtly) ? INTVAL (MEM_SIZE (rtly)) : + -1); + + /* If we have an offset for either memref, it can update the values computed + above. */ + if (moffsetx) + offsetx += INTVAL (moffsetx), sizex -= INTVAL (moffsetx); + if (moffsety) + offsety += INTVAL (moffsety), sizey -= INTVAL (moffsety); + + /* If a memref has both a size and an offset, we can use the smaller size. + We can't do this if the offset isn't known because we must view this + memref as being anywhere inside the DECL's MEM. */ + if (MEM_SIZE (x) && moffsetx) + sizex = INTVAL (MEM_SIZE (x)); + if (MEM_SIZE (y) && moffsety) + sizey = INTVAL (MEM_SIZE (y)); + + /* Put the values of the memref with the lower offset in X's values. */ + if (offsetx > offsety) + { + tem = offsetx, offsetx = offsety, offsety = tem; + tem = sizex, sizex = sizey, sizey = tem; + } + + /* If we don't know the size of the lower-offset value, we can't tell + if they conflict. Otherwise, we do the test. */ + return sizex >= 0 && offsety > offsetx + sizex; + } + /* True dependence: X is read after store in MEM takes place. */ int *************** true_dependence (mem, mem_mode, x, varie *** 1728,1739 **** rtx x; int (*varies) PARAMS ((rtx, int)); { ! register rtx x_addr, mem_addr; rtx base; if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem)) return 1; if (DIFFERENT_ALIAS_SETS_P (x, mem)) return 0; --- 2016,2034 ---- rtx x; int (*varies) PARAMS ((rtx, int)); { ! rtx x_addr, mem_addr; rtx base; if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem)) return 1; + /* (mem:BLK (scratch)) is a special mechanism to conflict with everything. + This is used in epilogue deallocation functions. */ + if (GET_MODE (x) == BLKmode && GET_CODE (XEXP (x, 0)) == SCRATCH) + return 1; + if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH) + return 1; + if (DIFFERENT_ALIAS_SETS_P (x, mem)) return 0; *************** true_dependence (mem, mem_mode, x, varie *** 1750,1755 **** --- 2045,2053 ---- if (RTX_UNCHANGING_P (x) && ! RTX_UNCHANGING_P (mem)) return 0; + if (nonoverlapping_memrefs_p (mem, x)) + return 0; + if (mem_mode == VOIDmode) mem_mode = GET_MODE (mem); *************** true_dependence (mem, mem_mode, x, varie *** 1775,1781 **** if (aliases_everything_p (x)) return 1; ! /* We cannot use aliases_everyting_p to test MEM, since we must look at MEM_MODE, rather than GET_MODE (MEM). */ if (mem_mode == QImode || GET_CODE (mem_addr) == AND) return 1; --- 2073,2146 ---- if (aliases_everything_p (x)) return 1; ! /* We cannot use aliases_everything_p to test MEM, since we must look ! at MEM_MODE, rather than GET_MODE (MEM). */ ! if (mem_mode == QImode || GET_CODE (mem_addr) == AND) ! return 1; ! ! /* In true_dependence we also allow BLKmode to alias anything. Why ! don't we do this in anti_dependence and output_dependence? */ ! if (mem_mode == BLKmode || GET_MODE (x) == BLKmode) ! return 1; ! ! return ! fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr, ! varies); ! } ! ! /* Canonical true dependence: X is read after store in MEM takes place. ! Variant of true_dependence which assumes MEM has already been ! canonicalized (hence we no longer do that here). ! The mem_addr argument has been added, since true_dependence computed ! this value prior to canonicalizing. */ ! ! int ! canon_true_dependence (mem, mem_mode, mem_addr, x, varies) ! rtx mem, mem_addr, x; ! enum machine_mode mem_mode; ! int (*varies) PARAMS ((rtx, int)); ! { ! rtx x_addr; ! ! if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem)) ! return 1; ! ! /* (mem:BLK (scratch)) is a special mechanism to conflict with everything. ! This is used in epilogue deallocation functions. */ ! if (GET_MODE (x) == BLKmode && GET_CODE (XEXP (x, 0)) == SCRATCH) ! return 1; ! if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH) ! return 1; ! ! if (DIFFERENT_ALIAS_SETS_P (x, mem)) ! return 0; ! ! /* If X is an unchanging read, then it can't possibly conflict with any ! non-unchanging store. It may conflict with an unchanging write though, ! because there may be a single store to this address to initialize it. ! Just fall through to the code below to resolve the case where we have ! both an unchanging read and an unchanging write. This won't handle all ! cases optimally, but the possible performance loss should be ! negligible. */ ! if (RTX_UNCHANGING_P (x) && ! RTX_UNCHANGING_P (mem)) ! return 0; ! ! if (nonoverlapping_memrefs_p (x, mem)) ! return 0; ! ! x_addr = get_addr (XEXP (x, 0)); ! ! if (! base_alias_check (x_addr, mem_addr, GET_MODE (x), mem_mode)) ! return 0; ! ! x_addr = canon_rtx (x_addr); ! if (! memrefs_conflict_p (GET_MODE_SIZE (mem_mode), mem_addr, ! SIZE_FOR_MODE (x), x_addr, 0)) ! return 0; ! ! if (aliases_everything_p (x)) ! return 1; ! ! /* We cannot use aliases_everything_p to test MEM, since we must look at MEM_MODE, rather than GET_MODE (MEM). */ if (mem_mode == QImode || GET_CODE (mem_addr) == AND) return 1; *************** write_dependence_p (mem, x, writep) *** 1805,1810 **** --- 2170,2182 ---- if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem)) return 1; + /* (mem:BLK (scratch)) is a special mechanism to conflict with everything. + This is used in epilogue deallocation functions. */ + if (GET_MODE (x) == BLKmode && GET_CODE (XEXP (x, 0)) == SCRATCH) + return 1; + if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH) + return 1; + if (DIFFERENT_ALIAS_SETS_P (x, mem)) return 0; *************** write_dependence_p (mem, x, writep) *** 1818,1823 **** --- 2190,2198 ---- if (! writep && RTX_UNCHANGING_P (mem)) return 0; + if (nonoverlapping_memrefs_p (x, mem)) + return 0; + x_addr = get_addr (XEXP (x, 0)); mem_addr = get_addr (XEXP (mem, 0)); *************** anti_dependence (mem, x) *** 1863,1870 **** int output_dependence (mem, x) ! register rtx mem; ! register rtx x; { return write_dependence_p (mem, x, /*writep=*/1); } --- 2238,2245 ---- int output_dependence (mem, x) ! rtx mem; ! rtx x; { return write_dependence_p (mem, x, /*writep=*/1); } *************** nonlocal_mentioned_p (x) *** 1877,1883 **** rtx x; { rtx base; ! register RTX_CODE code; int regno; code = GET_CODE (x); --- 2252,2258 ---- rtx x; { rtx base; ! RTX_CODE code; int regno; code = GET_CODE (x); *************** nonlocal_mentioned_p (x) *** 1886,1892 **** { /* Constant functions can be constant if they don't use scratch memory used to mark function w/o side effects. */ ! if (code == CALL_INSN && CONST_CALL_P (x)) { x = CALL_INSN_FUNCTION_USAGE (x); if (x == 0) --- 2261,2267 ---- { /* Constant functions can be constant if they don't use scratch memory used to mark function w/o side effects. */ ! if (code == CALL_INSN && CONST_OR_PURE_CALL_P (x)) { x = CALL_INSN_FUNCTION_USAGE (x); if (x == 0) *************** nonlocal_mentioned_p (x) *** 1904,1910 **** { /* Global registers are not local. */ if (REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER ! && global_regs[REGNO (SUBREG_REG (x)) + SUBREG_WORD (x)]) return 1; return 0; } --- 2279,2285 ---- { /* Global registers are not local. */ if (REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER ! && global_regs[subreg_regno (x)]) return 1; return 0; } *************** nonlocal_mentioned_p (x) *** 1922,1927 **** --- 2297,2303 ---- case CC0: case CONST_INT: case CONST_DOUBLE: + case CONST_VECTOR: case CONST: case LABEL_REF: return 0; *************** nonlocal_mentioned_p (x) *** 1981,1988 **** /* Recursively scan the operands of this expression. */ { ! register const char *fmt = GET_RTX_FORMAT (code); ! register int i; for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) { --- 2357,2364 ---- /* Recursively scan the operands of this expression. */ { ! const char *fmt = GET_RTX_FORMAT (code); ! int i; for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) { *************** nonlocal_mentioned_p (x) *** 1993,1999 **** } else if (fmt[i] == 'E') { ! register int j; for (j = 0; j < XVECLEN (x, i); j++) if (nonlocal_mentioned_p (XVECEXP (x, i, j))) return 1; --- 2369,2375 ---- } else if (fmt[i] == 'E') { ! int j; for (j = 0; j < XVECLEN (x, i); j++) if (nonlocal_mentioned_p (XVECEXP (x, i, j))) return 1; *************** nonlocal_mentioned_p (x) *** 2004,2099 **** return 0; } - /* Return non-zero if a loop (natural or otherwise) is present. - Inspired by Depth_First_Search_PP described in: - - Advanced Compiler Design and Implementation - Steven Muchnick - Morgan Kaufmann, 1997 - - and heavily borrowed from flow_depth_first_order_compute. */ - - static int - loop_p () - { - edge *stack; - int *pre; - int *post; - int sp; - int prenum = 1; - int postnum = 1; - sbitmap visited; - - /* Allocate the preorder and postorder number arrays. */ - pre = (int *) xcalloc (n_basic_blocks, sizeof (int)); - post = (int *) xcalloc (n_basic_blocks, sizeof (int)); - - /* Allocate stack for back-tracking up CFG. */ - stack = (edge *) xmalloc ((n_basic_blocks + 1) * sizeof (edge)); - sp = 0; - - /* Allocate bitmap to track nodes that have been visited. */ - visited = sbitmap_alloc (n_basic_blocks); - - /* None of the nodes in the CFG have been visited yet. */ - sbitmap_zero (visited); - - /* Push the first edge on to the stack. */ - stack[sp++] = ENTRY_BLOCK_PTR->succ; - - while (sp) - { - edge e; - basic_block src; - basic_block dest; - - /* Look at the edge on the top of the stack. */ - e = stack[sp - 1]; - src = e->src; - dest = e->dest; - - /* Check if the edge destination has been visited yet. */ - if (dest != EXIT_BLOCK_PTR && ! TEST_BIT (visited, dest->index)) - { - /* Mark that we have visited the destination. */ - SET_BIT (visited, dest->index); - - pre[dest->index] = prenum++; - - if (dest->succ) - { - /* Since the DEST node has been visited for the first - time, check its successors. */ - stack[sp++] = dest->succ; - } - else - post[dest->index] = postnum++; - } - else - { - if (dest != EXIT_BLOCK_PTR - && pre[src->index] >= pre[dest->index] - && post[dest->index] == 0) - break; - - if (! e->succ_next && src != ENTRY_BLOCK_PTR) - post[src->index] = postnum++; - - if (e->succ_next) - stack[sp - 1] = e->succ_next; - else - sp--; - } - } - - free (pre); - free (post); - free (stack); - sbitmap_free (visited); - - return sp; - } - /* Mark the function if it is constant. */ void --- 2380,2385 ---- *************** mark_constant_function () *** 2110,2116 **** return; /* A loop might not return which counts as a side effect. */ ! if (loop_p ()) return; nonlocal_mentioned = 0; --- 2396,2402 ---- return; /* A loop might not return which counts as a side effect. */ ! if (mark_dfs_back_edges ()) return; nonlocal_mentioned = 0; *************** static HARD_REG_SET argument_registers; *** 2140,2146 **** void init_alias_once () { ! register int i; #ifndef OUTGOING_REGNO #define OUTGOING_REGNO(N) N --- 2426,2432 ---- void init_alias_once () { ! int i; #ifndef OUTGOING_REGNO #define OUTGOING_REGNO(N) N *************** init_alias_once () *** 2148,2154 **** for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) /* Check whether this register can hold an incoming pointer argument. FUNCTION_ARG_REGNO_P tests outgoing register ! numbers, so translate if necessary due to register windows. */ if (FUNCTION_ARG_REGNO_P (OUTGOING_REGNO (i)) && HARD_REGNO_MODE_OK (i, Pmode)) SET_HARD_REG_BIT (argument_registers, i); --- 2434,2440 ---- for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) /* Check whether this register can hold an incoming pointer argument. FUNCTION_ARG_REGNO_P tests outgoing register ! numbers, so translate if necessary due to register windows. */ if (FUNCTION_ARG_REGNO_P (OUTGOING_REGNO (i)) && HARD_REGNO_MODE_OK (i, Pmode)) SET_HARD_REG_BIT (argument_registers, i); *************** init_alias_analysis () *** 2164,2172 **** { int maxreg = max_reg_num (); int changed, pass; ! register int i; ! register unsigned int ui; ! register rtx insn; reg_known_value_size = maxreg; --- 2450,2458 ---- { int maxreg = max_reg_num (); int changed, pass; ! int i; ! unsigned int ui; ! rtx insn; reg_known_value_size = maxreg; *************** init_alias_analysis () *** 2223,2229 **** start counting from zero each iteration of the loop. */ unique_id = 0; ! /* We're at the start of the funtion each iteration through the loop, so we're copying arguments. */ copying_arguments = 1; --- 2509,2515 ---- start counting from zero each iteration of the loop. */ unique_id = 0; ! /* We're at the start of the function each iteration through the loop, so we're copying arguments. */ copying_arguments = 1; *************** init_alias_analysis () *** 2265,2271 **** rtx note, set; #if defined (HAVE_prologue) || defined (HAVE_epilogue) ! /* The prologue/epilouge insns are not threaded onto the insn chain until after reload has completed. Thus, there is no sense wasting time checking if INSN is in the prologue/epilogue until after reload has completed. */ --- 2551,2557 ---- rtx note, set; #if defined (HAVE_prologue) || defined (HAVE_epilogue) ! /* The prologue/epilogue insns are not threaded onto the insn chain until after reload has completed. Thus, there is no sense wasting time checking if INSN is in the prologue/epilogue until after reload has completed. */ *************** init_alias_analysis () *** 2276,2282 **** /* If this insn has a noalias note, process it, Otherwise, scan for sets. A simple set will have no side effects ! which could change the base value of any other register. */ if (GET_CODE (PATTERN (insn)) == SET && REG_NOTES (insn) != 0 --- 2562,2568 ---- /* If this insn has a noalias note, process it, Otherwise, scan for sets. A simple set will have no side effects ! which could change the base value of any other register. */ if (GET_CODE (PATTERN (insn)) == SET && REG_NOTES (insn) != 0 *************** init_alias_analysis () *** 2315,2322 **** rtx op0 = XEXP (src, 0); op0 = reg_known_value[REGNO (op0)]; reg_known_value[regno] ! = plus_constant_for_output (op0, ! INTVAL (XEXP (src, 1))); reg_known_equiv_p[regno] = 0; } else if (REG_N_SETS (regno) == 1 --- 2601,2607 ---- rtx op0 = XEXP (src, 0); op0 = reg_known_value[REGNO (op0)]; reg_known_value[regno] ! = plus_constant (op0, INTVAL (XEXP (src, 1))); reg_known_equiv_p[regno] = 0; } else if (REG_N_SETS (regno) == 1 diff -Nrc3pad gcc-3.0.4/gcc/attribs.c gcc-3.1/gcc/attribs.c *** gcc-3.0.4/gcc/attribs.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/attribs.c Mon Feb 25 22:38:52 2002 *************** *** 0 **** --- 1,1465 ---- + /* Functions dealing with attribute handling, used by most front ends. + Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, + 2002 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2, or (at your option) any later + version. + + GCC is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to the Free + Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + + #include "config.h" + #include "system.h" + #include "tree.h" + #include "flags.h" + #include "toplev.h" + #include "output.h" + #include "rtl.h" + #include "ggc.h" + #include "expr.h" + #include "tm_p.h" + #include "obstack.h" + #include "cpplib.h" + #include "target.h" + + static void init_attributes PARAMS ((void)); + + /* Table of the tables of attributes (common, format, language, machine) + searched. */ + static const struct attribute_spec *attribute_tables[4]; + + static bool attributes_initialized = false; + + static tree handle_packed_attribute PARAMS ((tree *, tree, tree, int, + bool *)); + static tree handle_nocommon_attribute PARAMS ((tree *, tree, tree, int, + bool *)); + static tree handle_common_attribute PARAMS ((tree *, tree, tree, int, + bool *)); + static tree handle_noreturn_attribute PARAMS ((tree *, tree, tree, int, + bool *)); + static tree handle_noinline_attribute PARAMS ((tree *, tree, tree, int, + bool *)); + static tree handle_always_inline_attribute PARAMS ((tree *, tree, tree, int, + bool *)); + static tree handle_used_attribute PARAMS ((tree *, tree, tree, int, + bool *)); + static tree handle_unused_attribute PARAMS ((tree *, tree, tree, int, + bool *)); + static tree handle_const_attribute PARAMS ((tree *, tree, tree, int, + bool *)); + static tree handle_transparent_union_attribute PARAMS ((tree *, tree, tree, + int, bool *)); + static tree handle_constructor_attribute PARAMS ((tree *, tree, tree, int, + bool *)); + static tree handle_destructor_attribute PARAMS ((tree *, tree, tree, int, + bool *)); + static tree handle_mode_attribute PARAMS ((tree *, tree, tree, int, + bool *)); + static tree handle_section_attribute PARAMS ((tree *, tree, tree, int, + bool *)); + static tree handle_aligned_attribute PARAMS ((tree *, tree, tree, int, + bool *)); + static tree handle_weak_attribute PARAMS ((tree *, tree, tree, int, + bool *)); + static tree handle_alias_attribute PARAMS ((tree *, tree, tree, int, + bool *)); + static tree handle_no_instrument_function_attribute PARAMS ((tree *, tree, + tree, int, + bool *)); + static tree handle_malloc_attribute PARAMS ((tree *, tree, tree, int, + bool *)); + static tree handle_no_limit_stack_attribute PARAMS ((tree *, tree, tree, int, + bool *)); + static tree handle_pure_attribute PARAMS ((tree *, tree, tree, int, + bool *)); + static tree handle_deprecated_attribute PARAMS ((tree *, tree, tree, int, + bool *)); + static tree handle_vector_size_attribute PARAMS ((tree *, tree, tree, int, + bool *)); + static tree vector_size_helper PARAMS ((tree, tree)); + + /* Table of machine-independent attributes common to all C-like languages. */ + static const struct attribute_spec c_common_attribute_table[] = + { + /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */ + { "packed", 0, 0, false, false, false, + handle_packed_attribute }, + { "nocommon", 0, 0, true, false, false, + handle_nocommon_attribute }, + { "common", 0, 0, true, false, false, + handle_common_attribute }, + /* FIXME: logically, noreturn attributes should be listed as + "false, true, true" and apply to function types. But implementing this + would require all the places in the compiler that use TREE_THIS_VOLATILE + on a decl to identify non-returning functions to be located and fixed + to check the function type instead. */ + { "noreturn", 0, 0, true, false, false, + handle_noreturn_attribute }, + { "volatile", 0, 0, true, false, false, + handle_noreturn_attribute }, + { "noinline", 0, 0, true, false, false, + handle_noinline_attribute }, + { "always_inline", 0, 0, true, false, false, + handle_always_inline_attribute }, + { "used", 0, 0, true, false, false, + handle_used_attribute }, + { "unused", 0, 0, false, false, false, + handle_unused_attribute }, + /* The same comments as for noreturn attributes apply to const ones. */ + { "const", 0, 0, true, false, false, + handle_const_attribute }, + { "transparent_union", 0, 0, false, false, false, + handle_transparent_union_attribute }, + { "constructor", 0, 0, true, false, false, + handle_constructor_attribute }, + { "destructor", 0, 0, true, false, false, + handle_destructor_attribute }, + { "mode", 1, 1, false, true, false, + handle_mode_attribute }, + { "section", 1, 1, true, false, false, + handle_section_attribute }, + { "aligned", 0, 1, false, false, false, + handle_aligned_attribute }, + { "weak", 0, 0, true, false, false, + handle_weak_attribute }, + { "alias", 1, 1, true, false, false, + handle_alias_attribute }, + { "no_instrument_function", 0, 0, true, false, false, + handle_no_instrument_function_attribute }, + { "malloc", 0, 0, true, false, false, + handle_malloc_attribute }, + { "no_stack_limit", 0, 0, true, false, false, + handle_no_limit_stack_attribute }, + { "pure", 0, 0, true, false, false, + handle_pure_attribute }, + { "deprecated", 0, 0, false, false, false, + handle_deprecated_attribute }, + { "vector_size", 1, 1, false, true, false, + handle_vector_size_attribute }, + { NULL, 0, 0, false, false, false, NULL } + }; + + /* Default empty table of attributes. */ + static const struct attribute_spec empty_attribute_table[] = + { + { NULL, 0, 0, false, false, false, NULL } + }; + + /* Table of machine-independent attributes for checking formats, if used. */ + const struct attribute_spec *format_attribute_table = empty_attribute_table; + + /* Table of machine-independent attributes for a particular language. */ + const struct attribute_spec *lang_attribute_table = empty_attribute_table; + + /* Flag saying whether common language attributes are to be supported. */ + int lang_attribute_common = 1; + + /* Initialize attribute tables, and make some sanity checks + if --enable-checking. */ + + static void + init_attributes () + { + #ifdef ENABLE_CHECKING + int i; + #endif + + attribute_tables[0] + = lang_attribute_common ? c_common_attribute_table : empty_attribute_table; + attribute_tables[1] = lang_attribute_table; + attribute_tables[2] = format_attribute_table; + attribute_tables[3] = targetm.attribute_table; + + #ifdef ENABLE_CHECKING + /* Make some sanity checks on the attribute tables. */ + for (i = 0; + i < (int) (sizeof (attribute_tables) / sizeof (attribute_tables[0])); + i++) + { + int j; + + for (j = 0; attribute_tables[i][j].name != NULL; j++) + { + /* The name must not begin and end with __. */ + const char *name = attribute_tables[i][j].name; + int len = strlen (name); + if (name[0] == '_' && name[1] == '_' + && name[len - 1] == '_' && name[len - 2] == '_') + abort (); + /* The minimum and maximum lengths must be consistent. */ + if (attribute_tables[i][j].min_length < 0) + abort (); + if (attribute_tables[i][j].max_length != -1 + && (attribute_tables[i][j].max_length + < attribute_tables[i][j].min_length)) + abort (); + /* An attribute cannot require both a DECL and a TYPE. */ + if (attribute_tables[i][j].decl_required + && attribute_tables[i][j].type_required) + abort (); + /* If an attribute requires a function type, in particular + it requires a type. */ + if (attribute_tables[i][j].function_type_required + && !attribute_tables[i][j].type_required) + abort (); + } + } + + /* Check that each name occurs just once in each table. */ + for (i = 0; + i < (int) (sizeof (attribute_tables) / sizeof (attribute_tables[0])); + i++) + { + int j, k; + for (j = 0; attribute_tables[i][j].name != NULL; j++) + for (k = j + 1; attribute_tables[i][k].name != NULL; k++) + if (!strcmp (attribute_tables[i][j].name, + attribute_tables[i][k].name)) + abort (); + } + /* Check that no name occurs in more than one table. */ + for (i = 0; + i < (int) (sizeof (attribute_tables) / sizeof (attribute_tables[0])); + i++) + { + int j, k, l; + + for (j = i + 1; + j < ((int) (sizeof (attribute_tables) + / sizeof (attribute_tables[0]))); + j++) + for (k = 0; attribute_tables[i][k].name != NULL; k++) + for (l = 0; attribute_tables[j][l].name != NULL; l++) + if (!strcmp (attribute_tables[i][k].name, + attribute_tables[j][l].name)) + abort (); + } + #endif + + attributes_initialized = true; + } + + /* Process the attributes listed in ATTRIBUTES and install them in *NODE, + which is either a DECL (including a TYPE_DECL) or a TYPE. If a DECL, + it should be modified in place; if a TYPE, a copy should be created + unless ATTR_FLAG_TYPE_IN_PLACE is set in FLAGS. FLAGS gives further + information, in the form of a bitwise OR of flags in enum attribute_flags + from tree.h. Depending on these flags, some attributes may be + returned to be applied at a later stage (for example, to apply + a decl attribute to the declaration rather than to its type). If + ATTR_FLAG_BUILT_IN is not set and *NODE is a DECL, then also consider + whether there might be some default attributes to apply to this DECL; + if so, decl_attributes will be called recursively with those attributes + and ATTR_FLAG_BUILT_IN set. */ + + tree + decl_attributes (node, attributes, flags) + tree *node, attributes; + int flags; + { + tree a; + tree returned_attrs = NULL_TREE; + + if (!attributes_initialized) + init_attributes (); + + (*targetm.insert_attributes) (*node, &attributes); + + if (DECL_P (*node) && TREE_CODE (*node) == FUNCTION_DECL + && !(flags & (int) ATTR_FLAG_BUILT_IN)) + insert_default_attributes (*node); + + for (a = attributes; a; a = TREE_CHAIN (a)) + { + tree name = TREE_PURPOSE (a); + tree args = TREE_VALUE (a); + tree *anode = node; + const struct attribute_spec *spec = NULL; + bool no_add_attrs = 0; + int i; + + for (i = 0; + i < ((int) (sizeof (attribute_tables) + / sizeof (attribute_tables[0]))); + i++) + { + int j; + + for (j = 0; attribute_tables[i][j].name != NULL; j++) + { + if (is_attribute_p (attribute_tables[i][j].name, name)) + { + spec = &attribute_tables[i][j]; + break; + } + } + if (spec != NULL) + break; + } + + if (spec == NULL) + { + warning ("`%s' attribute directive ignored", + IDENTIFIER_POINTER (name)); + continue; + } + else if (list_length (args) < spec->min_length + || (spec->max_length >= 0 + && list_length (args) > spec->max_length)) + { + error ("wrong number of arguments specified for `%s' attribute", + IDENTIFIER_POINTER (name)); + continue; + } + + if (spec->decl_required && !DECL_P (*anode)) + { + if (flags & ((int) ATTR_FLAG_DECL_NEXT + | (int) ATTR_FLAG_FUNCTION_NEXT + | (int) ATTR_FLAG_ARRAY_NEXT)) + { + /* Pass on this attribute to be tried again. */ + returned_attrs = tree_cons (name, args, returned_attrs); + continue; + } + else + { + warning ("`%s' attribute does not apply to types", + IDENTIFIER_POINTER (name)); + continue; + } + } + + /* If we require a type, but were passed a decl, set up to make a + new type and update the one in the decl. ATTR_FLAG_TYPE_IN_PLACE + would have applied if we'd been passed a type, but we cannot modify + the decl's type in place here. */ + if (spec->type_required && DECL_P (*anode)) + { + anode = &TREE_TYPE (*anode); + flags &= ~(int) ATTR_FLAG_TYPE_IN_PLACE; + } + + if (spec->function_type_required && TREE_CODE (*anode) != FUNCTION_TYPE + && TREE_CODE (*anode) != METHOD_TYPE) + { + if (TREE_CODE (*anode) == POINTER_TYPE + && (TREE_CODE (TREE_TYPE (*anode)) == FUNCTION_TYPE + || TREE_CODE (TREE_TYPE (*anode)) == METHOD_TYPE)) + { + if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE)) + *anode = build_type_copy (*anode); + anode = &TREE_TYPE (*anode); + } + else if (flags & (int) ATTR_FLAG_FUNCTION_NEXT) + { + /* Pass on this attribute to be tried again. */ + returned_attrs = tree_cons (name, args, returned_attrs); + continue; + } + + if (TREE_CODE (*anode) != FUNCTION_TYPE + && TREE_CODE (*anode) != METHOD_TYPE) + { + warning ("`%s' attribute only applies to function types", + IDENTIFIER_POINTER (name)); + continue; + } + } + + if (spec->handler != NULL) + returned_attrs = chainon ((*spec->handler) (anode, name, args, + flags, &no_add_attrs), + returned_attrs); + + /* Layout the decl in case anything changed. */ + if (spec->type_required && DECL_P (*node) + && (TREE_CODE (*node) == VAR_DECL + || TREE_CODE (*node) == PARM_DECL + || TREE_CODE (*node) == RESULT_DECL)) + { + /* Force a recalculation of mode and size. */ + DECL_MODE (*node) = VOIDmode; + DECL_SIZE (*node) = 0; + + layout_decl (*node, 0); + } + + if (!no_add_attrs) + { + tree old_attrs; + tree a; + + if (DECL_P (*anode)) + old_attrs = DECL_ATTRIBUTES (*anode); + else + old_attrs = TYPE_ATTRIBUTES (*anode); + + for (a = lookup_attribute (spec->name, old_attrs); + a != NULL_TREE; + a = lookup_attribute (spec->name, TREE_CHAIN (a))) + { + if (simple_cst_equal (TREE_VALUE (a), args) == 1) + break; + } + + if (a == NULL_TREE) + { + /* This attribute isn't already in the list. */ + if (DECL_P (*anode)) + DECL_ATTRIBUTES (*anode) = tree_cons (name, args, old_attrs); + else if (flags & (int) ATTR_FLAG_TYPE_IN_PLACE) + TYPE_ATTRIBUTES (*anode) = tree_cons (name, args, old_attrs); + else + *anode = build_type_attribute_variant (*anode, + tree_cons (name, args, + old_attrs)); + } + } + } + + return returned_attrs; + } + + /* Handle a "packed" attribute; arguments as in + struct attribute_spec.handler. */ + + static tree + handle_packed_attribute (node, name, args, flags, no_add_attrs) + tree *node; + tree name; + tree args ATTRIBUTE_UNUSED; + int flags; + bool *no_add_attrs; + { + tree *type = NULL; + if (DECL_P (*node)) + { + if (TREE_CODE (*node) == TYPE_DECL) + type = &TREE_TYPE (*node); + } + else + type = node; + + if (type) + { + if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE)) + *type = build_type_copy (*type); + TYPE_PACKED (*type) = 1; + } + else if (TREE_CODE (*node) == FIELD_DECL) + DECL_PACKED (*node) = 1; + /* We can't set DECL_PACKED for a VAR_DECL, because the bit is + used for DECL_REGISTER. It wouldn't mean anything anyway. */ + else + { + warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); + *no_add_attrs = true; + } + + return NULL_TREE; + } + + /* Handle a "nocommon" attribute; arguments as in + struct attribute_spec.handler. */ + + static tree + handle_nocommon_attribute (node, name, args, flags, no_add_attrs) + tree *node; + tree name; + tree args ATTRIBUTE_UNUSED; + int flags ATTRIBUTE_UNUSED; + bool *no_add_attrs; + { + if (TREE_CODE (*node) == VAR_DECL) + DECL_COMMON (*node) = 0; + else + { + warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); + *no_add_attrs = true; + } + + return NULL_TREE; + } + + /* Handle a "common" attribute; arguments as in + struct attribute_spec.handler. */ + + static tree + handle_common_attribute (node, name, args, flags, no_add_attrs) + tree *node; + tree name; + tree args ATTRIBUTE_UNUSED; + int flags ATTRIBUTE_UNUSED; + bool *no_add_attrs; + { + if (TREE_CODE (*node) == VAR_DECL) + DECL_COMMON (*node) = 1; + else + { + warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); + *no_add_attrs = true; + } + + return NULL_TREE; + } + + /* Handle a "noreturn" attribute; arguments as in + struct attribute_spec.handler. */ + + static tree + handle_noreturn_attribute (node, name, args, flags, no_add_attrs) + tree *node; + tree name; + tree args ATTRIBUTE_UNUSED; + int flags ATTRIBUTE_UNUSED; + bool *no_add_attrs; + { + tree type = TREE_TYPE (*node); + + /* See FIXME comment in c_common_attribute_table. */ + if (TREE_CODE (*node) == FUNCTION_DECL) + TREE_THIS_VOLATILE (*node) = 1; + else if (TREE_CODE (type) == POINTER_TYPE + && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE) + TREE_TYPE (*node) + = build_pointer_type + (build_type_variant (TREE_TYPE (type), + TREE_READONLY (TREE_TYPE (type)), 1)); + else + { + warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); + *no_add_attrs = true; + } + + return NULL_TREE; + } + + /* Handle a "noinline" attribute; arguments as in + struct attribute_spec.handler. */ + + static tree + handle_noinline_attribute (node, name, args, flags, no_add_attrs) + tree *node; + tree name; + tree args ATTRIBUTE_UNUSED; + int flags ATTRIBUTE_UNUSED; + bool *no_add_attrs; + { + if (TREE_CODE (*node) == FUNCTION_DECL) + DECL_UNINLINABLE (*node) = 1; + else + { + warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); + *no_add_attrs = true; + } + + return NULL_TREE; + } + + /* Handle a "always_inline" attribute; arguments as in + struct attribute_spec.handler. */ + + static tree + handle_always_inline_attribute (node, name, args, flags, no_add_attrs) + tree *node; + tree name; + tree args ATTRIBUTE_UNUSED; + int flags ATTRIBUTE_UNUSED; + bool *no_add_attrs; + { + if (TREE_CODE (*node) == FUNCTION_DECL) + { + /* Do nothing else, just set the attribute. We'll get at + it later with lookup_attribute. */ + } + else + { + warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); + *no_add_attrs = true; + } + + return NULL_TREE; + } + + /* Handle a "used" attribute; arguments as in + struct attribute_spec.handler. */ + + static tree + handle_used_attribute (node, name, args, flags, no_add_attrs) + tree *node; + tree name; + tree args ATTRIBUTE_UNUSED; + int flags ATTRIBUTE_UNUSED; + bool *no_add_attrs; + { + if (TREE_CODE (*node) == FUNCTION_DECL) + TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (*node)) + = TREE_USED (*node) = 1; + else + { + warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); + *no_add_attrs = true; + } + + return NULL_TREE; + } + + /* Handle a "unused" attribute; arguments as in + struct attribute_spec.handler. */ + + static tree + handle_unused_attribute (node, name, args, flags, no_add_attrs) + tree *node; + tree name; + tree args ATTRIBUTE_UNUSED; + int flags; + bool *no_add_attrs; + { + if (DECL_P (*node)) + { + tree decl = *node; + + if (TREE_CODE (decl) == PARM_DECL + || TREE_CODE (decl) == VAR_DECL + || TREE_CODE (decl) == FUNCTION_DECL + || TREE_CODE (decl) == LABEL_DECL + || TREE_CODE (decl) == TYPE_DECL) + TREE_USED (decl) = 1; + else + { + warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); + *no_add_attrs = true; + } + } + else + { + if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE)) + *node = build_type_copy (*node); + TREE_USED (*node) = 1; + } + + return NULL_TREE; + } + + /* Handle a "const" attribute; arguments as in + struct attribute_spec.handler. */ + + static tree + handle_const_attribute (node, name, args, flags, no_add_attrs) + tree *node; + tree name; + tree args ATTRIBUTE_UNUSED; + int flags ATTRIBUTE_UNUSED; + bool *no_add_attrs; + { + tree type = TREE_TYPE (*node); + + /* See FIXME comment on noreturn in c_common_attribute_table. */ + if (TREE_CODE (*node) == FUNCTION_DECL) + TREE_READONLY (*node) = 1; + else if (TREE_CODE (type) == POINTER_TYPE + && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE) + TREE_TYPE (*node) + = build_pointer_type + (build_type_variant (TREE_TYPE (type), 1, + TREE_THIS_VOLATILE (TREE_TYPE (type)))); + else + { + warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); + *no_add_attrs = true; + } + + return NULL_TREE; + } + + /* Handle a "transparent_union" attribute; arguments as in + struct attribute_spec.handler. */ + + static tree + handle_transparent_union_attribute (node, name, args, flags, no_add_attrs) + tree *node; + tree name; + tree args ATTRIBUTE_UNUSED; + int flags; + bool *no_add_attrs; + { + tree decl = NULL_TREE; + tree *type = NULL; + int is_type = 0; + + if (DECL_P (*node)) + { + decl = *node; + type = &TREE_TYPE (decl); + is_type = TREE_CODE (*node) == TYPE_DECL; + } + else if (TYPE_P (*node)) + type = node, is_type = 1; + + if (is_type + && TREE_CODE (*type) == UNION_TYPE + && (decl == 0 + || (TYPE_FIELDS (*type) != 0 + && TYPE_MODE (*type) == DECL_MODE (TYPE_FIELDS (*type))))) + { + if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE)) + *type = build_type_copy (*type); + TYPE_TRANSPARENT_UNION (*type) = 1; + } + else if (decl != 0 && TREE_CODE (decl) == PARM_DECL + && TREE_CODE (*type) == UNION_TYPE + && TYPE_MODE (*type) == DECL_MODE (TYPE_FIELDS (*type))) + DECL_TRANSPARENT_UNION (decl) = 1; + else + { + warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); + *no_add_attrs = true; + } + + return NULL_TREE; + } + + /* Handle a "constructor" attribute; arguments as in + struct attribute_spec.handler. */ + + static tree + handle_constructor_attribute (node, name, args, flags, no_add_attrs) + tree *node; + tree name; + tree args ATTRIBUTE_UNUSED; + int flags ATTRIBUTE_UNUSED; + bool *no_add_attrs; + { + tree decl = *node; + tree type = TREE_TYPE (decl); + + if (TREE_CODE (decl) == FUNCTION_DECL + && TREE_CODE (type) == FUNCTION_TYPE + && decl_function_context (decl) == 0) + { + DECL_STATIC_CONSTRUCTOR (decl) = 1; + TREE_USED (decl) = 1; + } + else + { + warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); + *no_add_attrs = true; + } + + return NULL_TREE; + } + + /* Handle a "destructor" attribute; arguments as in + struct attribute_spec.handler. */ + + static tree + handle_destructor_attribute (node, name, args, flags, no_add_attrs) + tree *node; + tree name; + tree args ATTRIBUTE_UNUSED; + int flags ATTRIBUTE_UNUSED; + bool *no_add_attrs; + { + tree decl = *node; + tree type = TREE_TYPE (decl); + + if (TREE_CODE (decl) == FUNCTION_DECL + && TREE_CODE (type) == FUNCTION_TYPE + && decl_function_context (decl) == 0) + { + DECL_STATIC_DESTRUCTOR (decl) = 1; + TREE_USED (decl) = 1; + } + else + { + warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); + *no_add_attrs = true; + } + + return NULL_TREE; + } + + /* Handle a "mode" attribute; arguments as in + struct attribute_spec.handler. */ + + static tree + handle_mode_attribute (node, name, args, flags, no_add_attrs) + tree *node; + tree name; + tree args; + int flags ATTRIBUTE_UNUSED; + bool *no_add_attrs; + { + tree type = *node; + + *no_add_attrs = true; + + if (TREE_CODE (TREE_VALUE (args)) != IDENTIFIER_NODE) + warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); + else + { + int j; + const char *p = IDENTIFIER_POINTER (TREE_VALUE (args)); + int len = strlen (p); + enum machine_mode mode = VOIDmode; + tree typefm; + + if (len > 4 && p[0] == '_' && p[1] == '_' + && p[len - 1] == '_' && p[len - 2] == '_') + { + char *newp = (char *) alloca (len - 1); + + strcpy (newp, &p[2]); + newp[len - 4] = '\0'; + p = newp; + } + + /* Change this type to have a type with the specified mode. + First check for the special modes. */ + if (! strcmp (p, "byte")) + mode = byte_mode; + else if (!strcmp (p, "word")) + mode = word_mode; + else if (! strcmp (p, "pointer")) + mode = ptr_mode; + else + for (j = 0; j < NUM_MACHINE_MODES; j++) + if (!strcmp (p, GET_MODE_NAME (j))) + mode = (enum machine_mode) j; + + if (mode == VOIDmode) + error ("unknown machine mode `%s'", p); + else if (0 == (typefm = type_for_mode (mode, + TREE_UNSIGNED (type)))) + error ("no data type for mode `%s'", p); + else + *node = typefm; + /* No need to layout the type here. The caller should do this. */ + } + + return NULL_TREE; + } + + /* Handle a "section" attribute; arguments as in + struct attribute_spec.handler. */ + + static tree + handle_section_attribute (node, name, args, flags, no_add_attrs) + tree *node; + tree name ATTRIBUTE_UNUSED; + tree args; + int flags ATTRIBUTE_UNUSED; + bool *no_add_attrs; + { + tree decl = *node; + + if (targetm.have_named_sections) + { + if ((TREE_CODE (decl) == FUNCTION_DECL + || TREE_CODE (decl) == VAR_DECL) + && TREE_CODE (TREE_VALUE (args)) == STRING_CST) + { + if (TREE_CODE (decl) == VAR_DECL + && current_function_decl != NULL_TREE + && ! TREE_STATIC (decl)) + { + error_with_decl (decl, + "section attribute cannot be specified for local variables"); + *no_add_attrs = true; + } + + /* The decl may have already been given a section attribute + from a previous declaration. Ensure they match. */ + else if (DECL_SECTION_NAME (decl) != NULL_TREE + && strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)), + TREE_STRING_POINTER (TREE_VALUE (args))) != 0) + { + error_with_decl (*node, + "section of `%s' conflicts with previous declaration"); + *no_add_attrs = true; + } + else + DECL_SECTION_NAME (decl) = TREE_VALUE (args); + } + else + { + error_with_decl (*node, + "section attribute not allowed for `%s'"); + *no_add_attrs = true; + } + } + else + { + error_with_decl (*node, + "section attributes are not supported for this target"); + *no_add_attrs = true; + } + + return NULL_TREE; + } + + /* Handle a "aligned" attribute; arguments as in + struct attribute_spec.handler. */ + + static tree + handle_aligned_attribute (node, name, args, flags, no_add_attrs) + tree *node; + tree name ATTRIBUTE_UNUSED; + tree args; + int flags; + bool *no_add_attrs; + { + tree decl = NULL_TREE; + tree *type = NULL; + int is_type = 0; + tree align_expr = (args ? TREE_VALUE (args) + : size_int (BIGGEST_ALIGNMENT / BITS_PER_UNIT)); + int i; + + if (DECL_P (*node)) + { + decl = *node; + type = &TREE_TYPE (decl); + is_type = TREE_CODE (*node) == TYPE_DECL; + } + else if (TYPE_P (*node)) + type = node, is_type = 1; + + /* Strip any NOPs of any kind. */ + while (TREE_CODE (align_expr) == NOP_EXPR + || TREE_CODE (align_expr) == CONVERT_EXPR + || TREE_CODE (align_expr) == NON_LVALUE_EXPR) + align_expr = TREE_OPERAND (align_expr, 0); + + if (TREE_CODE (align_expr) != INTEGER_CST) + { + error ("requested alignment is not a constant"); + *no_add_attrs = true; + } + else if ((i = tree_log2 (align_expr)) == -1) + { + error ("requested alignment is not a power of 2"); + *no_add_attrs = true; + } + else if (i > HOST_BITS_PER_INT - 2) + { + error ("requested alignment is too large"); + *no_add_attrs = true; + } + else if (is_type) + { + /* If we have a TYPE_DECL, then copy the type, so that we + don't accidentally modify a builtin type. See pushdecl. */ + if (decl && TREE_TYPE (decl) != error_mark_node + && DECL_ORIGINAL_TYPE (decl) == NULL_TREE) + { + tree tt = TREE_TYPE (decl); + *type = build_type_copy (*type); + DECL_ORIGINAL_TYPE (decl) = tt; + TYPE_NAME (*type) = decl; + TREE_USED (*type) = TREE_USED (decl); + TREE_TYPE (decl) = *type; + } + else if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE)) + *type = build_type_copy (*type); + + TYPE_ALIGN (*type) = (1 << i) * BITS_PER_UNIT; + TYPE_USER_ALIGN (*type) = 1; + } + else if (TREE_CODE (decl) != VAR_DECL + && TREE_CODE (decl) != FIELD_DECL) + { + error_with_decl (decl, + "alignment may not be specified for `%s'"); + *no_add_attrs = true; + } + else + { + DECL_ALIGN (decl) = (1 << i) * BITS_PER_UNIT; + DECL_USER_ALIGN (decl) = 1; + } + + return NULL_TREE; + } + + /* Handle a "weak" attribute; arguments as in + struct attribute_spec.handler. */ + + static tree + handle_weak_attribute (node, name, args, flags, no_add_attrs) + tree *node; + tree name ATTRIBUTE_UNUSED; + tree args ATTRIBUTE_UNUSED; + int flags ATTRIBUTE_UNUSED; + bool *no_add_attrs ATTRIBUTE_UNUSED; + { + declare_weak (*node); + + return NULL_TREE; + } + + /* Handle an "alias" attribute; arguments as in + struct attribute_spec.handler. */ + + static tree + handle_alias_attribute (node, name, args, flags, no_add_attrs) + tree *node; + tree name; + tree args; + int flags ATTRIBUTE_UNUSED; + bool *no_add_attrs; + { + tree decl = *node; + + if ((TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl)) + || (TREE_CODE (decl) != FUNCTION_DECL && ! DECL_EXTERNAL (decl))) + { + error_with_decl (decl, + "`%s' defined both normally and as an alias"); + *no_add_attrs = true; + } + else if (decl_function_context (decl) == 0) + { + tree id; + + id = TREE_VALUE (args); + if (TREE_CODE (id) != STRING_CST) + { + error ("alias arg not a string"); + *no_add_attrs = true; + return NULL_TREE; + } + id = get_identifier (TREE_STRING_POINTER (id)); + /* This counts as a use of the object pointed to. */ + TREE_USED (id) = 1; + + if (TREE_CODE (decl) == FUNCTION_DECL) + DECL_INITIAL (decl) = error_mark_node; + else + DECL_EXTERNAL (decl) = 0; + assemble_alias (decl, id); + } + else + { + warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); + *no_add_attrs = true; + } + + return NULL_TREE; + } + + /* Handle a "no_instrument_function" attribute; arguments as in + struct attribute_spec.handler. */ + + static tree + handle_no_instrument_function_attribute (node, name, args, flags, no_add_attrs) + tree *node; + tree name; + tree args ATTRIBUTE_UNUSED; + int flags ATTRIBUTE_UNUSED; + bool *no_add_attrs; + { + tree decl = *node; + + if (TREE_CODE (decl) != FUNCTION_DECL) + { + error_with_decl (decl, + "`%s' attribute applies only to functions", + IDENTIFIER_POINTER (name)); + *no_add_attrs = true; + } + else if (DECL_INITIAL (decl)) + { + error_with_decl (decl, + "can't set `%s' attribute after definition", + IDENTIFIER_POINTER (name)); + *no_add_attrs = true; + } + else + DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl) = 1; + + return NULL_TREE; + } + + /* Handle a "malloc" attribute; arguments as in + struct attribute_spec.handler. */ + + static tree + handle_malloc_attribute (node, name, args, flags, no_add_attrs) + tree *node; + tree name; + tree args ATTRIBUTE_UNUSED; + int flags ATTRIBUTE_UNUSED; + bool *no_add_attrs; + { + if (TREE_CODE (*node) == FUNCTION_DECL) + DECL_IS_MALLOC (*node) = 1; + /* ??? TODO: Support types. */ + else + { + warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); + *no_add_attrs = true; + } + + return NULL_TREE; + } + + /* Handle a "no_limit_stack" attribute; arguments as in + struct attribute_spec.handler. */ + + static tree + handle_no_limit_stack_attribute (node, name, args, flags, no_add_attrs) + tree *node; + tree name; + tree args ATTRIBUTE_UNUSED; + int flags ATTRIBUTE_UNUSED; + bool *no_add_attrs; + { + tree decl = *node; + + if (TREE_CODE (decl) != FUNCTION_DECL) + { + error_with_decl (decl, + "`%s' attribute applies only to functions", + IDENTIFIER_POINTER (name)); + *no_add_attrs = true; + } + else if (DECL_INITIAL (decl)) + { + error_with_decl (decl, + "can't set `%s' attribute after definition", + IDENTIFIER_POINTER (name)); + *no_add_attrs = true; + } + else + DECL_NO_LIMIT_STACK (decl) = 1; + + return NULL_TREE; + } + + /* Handle a "pure" attribute; arguments as in + struct attribute_spec.handler. */ + + static tree + handle_pure_attribute (node, name, args, flags, no_add_attrs) + tree *node; + tree name; + tree args ATTRIBUTE_UNUSED; + int flags ATTRIBUTE_UNUSED; + bool *no_add_attrs; + { + if (TREE_CODE (*node) == FUNCTION_DECL) + DECL_IS_PURE (*node) = 1; + /* ??? TODO: Support types. */ + else + { + warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); + *no_add_attrs = true; + } + + return NULL_TREE; + } + + /* Handle a "deprecated" attribute; arguments as in + struct attribute_spec.handler. */ + + static tree + handle_deprecated_attribute (node, name, args, flags, no_add_attrs) + tree *node; + tree name; + tree args ATTRIBUTE_UNUSED; + int flags; + bool *no_add_attrs; + { + tree type = NULL_TREE; + int warn = 0; + const char *what = NULL; + + if (DECL_P (*node)) + { + tree decl = *node; + type = TREE_TYPE (decl); + + if (TREE_CODE (decl) == TYPE_DECL + || TREE_CODE (decl) == PARM_DECL + || TREE_CODE (decl) == VAR_DECL + || TREE_CODE (decl) == FUNCTION_DECL + || TREE_CODE (decl) == FIELD_DECL) + TREE_DEPRECATED (decl) = 1; + else + warn = 1; + } + else if (TYPE_P (*node)) + { + if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE)) + *node = build_type_copy (*node); + TREE_DEPRECATED (*node) = 1; + type = *node; + } + else + warn = 1; + + if (warn) + { + *no_add_attrs = true; + if (type && TYPE_NAME (type)) + { + if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE) + what = IDENTIFIER_POINTER (TYPE_NAME (*node)); + else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL + && DECL_NAME (TYPE_NAME (type))) + what = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))); + } + if (what) + warning ("`%s' attribute ignored for `%s'", + IDENTIFIER_POINTER (name), what); + else + warning ("`%s' attribute ignored", + IDENTIFIER_POINTER (name)); + } + + return NULL_TREE; + } + + /* Handle a "vector_size" attribute; arguments as in + struct attribute_spec.handler. */ + + static tree + handle_vector_size_attribute (node, name, args, flags, no_add_attrs) + tree *node; + tree name; + tree args; + int flags ATTRIBUTE_UNUSED; + bool *no_add_attrs; + { + unsigned HOST_WIDE_INT vecsize, nunits; + enum machine_mode mode, orig_mode, new_mode; + tree type = *node, new_type; + + *no_add_attrs = true; + + if (! host_integerp (TREE_VALUE (args), 1)) + { + warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); + return NULL_TREE; + } + + /* Get the vector size (in bytes). */ + vecsize = tree_low_cst (TREE_VALUE (args), 1); + + /* We need to provide for vector pointers, vector arrays, and + functions returning vectors. For example: + + __attribute__((vector_size(16))) short *foo; + + In this case, the mode is SI, but the type being modified is + HI, so we need to look further. */ + + while (POINTER_TYPE_P (type) + || TREE_CODE (type) == FUNCTION_TYPE + || TREE_CODE (type) == ARRAY_TYPE) + type = TREE_TYPE (type); + + /* Get the mode of the type being modified. */ + orig_mode = TYPE_MODE (type); + + if (TREE_CODE (type) == RECORD_TYPE + || (GET_MODE_CLASS (orig_mode) != MODE_FLOAT + && GET_MODE_CLASS (orig_mode) != MODE_INT) + || ! host_integerp (TYPE_SIZE_UNIT (type), 1)) + { + error ("invalid vector type for attribute `%s'", + IDENTIFIER_POINTER (name)); + return NULL_TREE; + } + + /* Calculate how many units fit in the vector. */ + nunits = vecsize / tree_low_cst (TYPE_SIZE_UNIT (type), 1); + + /* Find a suitably sized vector. */ + new_mode = VOIDmode; + for (mode = GET_CLASS_NARROWEST_MODE (GET_MODE_CLASS (orig_mode) == MODE_INT + ? MODE_VECTOR_INT + : MODE_VECTOR_FLOAT); + mode != VOIDmode; + mode = GET_MODE_WIDER_MODE (mode)) + if (vecsize == GET_MODE_SIZE (mode) + && nunits == (unsigned HOST_WIDE_INT) GET_MODE_NUNITS (mode)) + { + new_mode = mode; + break; + } + + if (new_mode == VOIDmode) + error ("no vector mode with the size and type specified could be found"); + else + { + new_type = type_for_mode (new_mode, TREE_UNSIGNED (type)); + if (!new_type) + error ("no vector mode with the size and type specified could be found"); + else + /* Build back pointers if needed. */ + *node = vector_size_helper (*node, new_type); + } + + return NULL_TREE; + } + + /* HACK. GROSS. This is absolutely disgusting. I wish there was a + better way. + + If we requested a pointer to a vector, build up the pointers that + we stripped off while looking for the inner type. Similarly for + return values from functions. + + The argument "type" is the top of the chain, and "bottom" is the + new type which we will point to. */ + + static tree + vector_size_helper (type, bottom) + tree type, bottom; + { + tree inner, outer; + + if (POINTER_TYPE_P (type)) + { + inner = vector_size_helper (TREE_TYPE (type), bottom); + outer = build_pointer_type (inner); + } + else if (TREE_CODE (type) == ARRAY_TYPE) + { + inner = vector_size_helper (TREE_TYPE (type), bottom); + outer = build_array_type (inner, TYPE_VALUES (type)); + } + else if (TREE_CODE (type) == FUNCTION_TYPE) + { + inner = vector_size_helper (TREE_TYPE (type), bottom); + outer = build_function_type (inner, TYPE_VALUES (type)); + } + else + return bottom; + + TREE_READONLY (outer) = TREE_READONLY (type); + TREE_THIS_VOLATILE (outer) = TREE_THIS_VOLATILE (type); + + return outer; + } + + /* Split SPECS_ATTRS, a list of declspecs and prefix attributes, into two + lists. SPECS_ATTRS may also be just a typespec (eg: RECORD_TYPE). + + The head of the declspec list is stored in DECLSPECS. + The head of the attribute list is stored in PREFIX_ATTRIBUTES. + + Note that attributes in SPECS_ATTRS are stored in the TREE_PURPOSE of + the list elements. We drop the containing TREE_LIST nodes and link the + resulting attributes together the way decl_attributes expects them. */ + + void + split_specs_attrs (specs_attrs, declspecs, prefix_attributes) + tree specs_attrs; + tree *declspecs, *prefix_attributes; + { + tree t, s, a, next, specs, attrs; + + /* This can happen after an __extension__ in pedantic mode. */ + if (specs_attrs != NULL_TREE + && TREE_CODE (specs_attrs) == INTEGER_CST) + { + *declspecs = NULL_TREE; + *prefix_attributes = NULL_TREE; + return; + } + + /* This can happen in c++ (eg: decl: typespec initdecls ';'). */ + if (specs_attrs != NULL_TREE + && TREE_CODE (specs_attrs) != TREE_LIST) + { + *declspecs = specs_attrs; + *prefix_attributes = NULL_TREE; + return; + } + + /* Remember to keep the lists in the same order, element-wise. */ + + specs = s = NULL_TREE; + attrs = a = NULL_TREE; + for (t = specs_attrs; t; t = next) + { + next = TREE_CHAIN (t); + /* Declspecs have a non-NULL TREE_VALUE. */ + if (TREE_VALUE (t) != NULL_TREE) + { + if (specs == NULL_TREE) + specs = s = t; + else + { + TREE_CHAIN (s) = t; + s = t; + } + } + /* The TREE_PURPOSE may also be empty in the case of + __attribute__(()). */ + else if (TREE_PURPOSE (t) != NULL_TREE) + { + if (attrs == NULL_TREE) + attrs = a = TREE_PURPOSE (t); + else + { + TREE_CHAIN (a) = TREE_PURPOSE (t); + a = TREE_PURPOSE (t); + } + /* More attrs can be linked here, move A to the end. */ + while (TREE_CHAIN (a) != NULL_TREE) + a = TREE_CHAIN (a); + } + } + + /* Terminate the lists. */ + if (s != NULL_TREE) + TREE_CHAIN (s) = NULL_TREE; + if (a != NULL_TREE) + TREE_CHAIN (a) = NULL_TREE; + + /* All done. */ + *declspecs = specs; + *prefix_attributes = attrs; + } + + /* Strip attributes from SPECS_ATTRS, a list of declspecs and attributes. + This function is used by the parser when a rule will accept attributes + in a particular position, but we don't want to support that just yet. + + A warning is issued for every ignored attribute. */ + + tree + strip_attrs (specs_attrs) + tree specs_attrs; + { + tree specs, attrs; + + split_specs_attrs (specs_attrs, &specs, &attrs); + + while (attrs) + { + warning ("`%s' attribute ignored", + IDENTIFIER_POINTER (TREE_PURPOSE (attrs))); + attrs = TREE_CHAIN (attrs); + } + + return specs; + } + diff -Nrc3pad gcc-3.0.4/gcc/basic-block.h gcc-3.1/gcc/basic-block.h *** gcc-3.0.4/gcc/basic-block.h Sun May 13 07:09:50 2001 --- gcc-3.1/gcc/basic-block.h Tue Apr 9 20:38:54 2002 *************** *** 1,25 **** /* Define control and data flow tables, and regsets. ! Copyright (C) 1987, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ ! #ifndef _BASIC_BLOCK_H ! #define _BASIC_BLOCK_H 1 #include "bitmap.h" #include "sbitmap.h" --- 1,26 ---- /* Define control and data flow tables, and regsets. ! Copyright (C) 1987, 1997, 1998, 1999, 2000, 2001, 2002 ! Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ ! #ifndef GCC_BASIC_BLOCK_H ! #define GCC_BASIC_BLOCK_H #include "bitmap.h" #include "sbitmap.h" *************** do { \ *** 78,96 **** } while (0) /* Loop over all registers in REGSET, starting with MIN, setting REGNUM to the ! register number and executing CODE for all registers that are set. */ #define EXECUTE_IF_SET_IN_REG_SET(REGSET, MIN, REGNUM, CODE) \ EXECUTE_IF_SET_IN_BITMAP (REGSET, MIN, REGNUM, CODE) /* Loop over all registers in REGSET1 and REGSET2, starting with MIN, setting REGNUM to the register number and executing CODE for all registers that are ! set in the first regset and not set in the second. */ #define EXECUTE_IF_AND_COMPL_IN_REG_SET(REGSET1, REGSET2, MIN, REGNUM, CODE) \ EXECUTE_IF_AND_COMPL_IN_BITMAP (REGSET1, REGSET2, MIN, REGNUM, CODE) /* Loop over all registers in REGSET1 and REGSET2, starting with MIN, setting REGNUM to the register number and executing CODE for all registers that are ! set in both regsets. */ #define EXECUTE_IF_AND_IN_REG_SET(REGSET1, REGSET2, MIN, REGNUM, CODE) \ EXECUTE_IF_AND_IN_BITMAP (REGSET1, REGSET2, MIN, REGNUM, CODE) --- 79,97 ---- } while (0) /* Loop over all registers in REGSET, starting with MIN, setting REGNUM to the ! register number and executing CODE for all registers that are set. */ #define EXECUTE_IF_SET_IN_REG_SET(REGSET, MIN, REGNUM, CODE) \ EXECUTE_IF_SET_IN_BITMAP (REGSET, MIN, REGNUM, CODE) /* Loop over all registers in REGSET1 and REGSET2, starting with MIN, setting REGNUM to the register number and executing CODE for all registers that are ! set in the first regset and not set in the second. */ #define EXECUTE_IF_AND_COMPL_IN_REG_SET(REGSET1, REGSET2, MIN, REGNUM, CODE) \ EXECUTE_IF_AND_COMPL_IN_BITMAP (REGSET1, REGSET2, MIN, REGNUM, CODE) /* Loop over all registers in REGSET1 and REGSET2, starting with MIN, setting REGNUM to the register number and executing CODE for all registers that are ! set in both regsets. */ #define EXECUTE_IF_AND_IN_REG_SET(REGSET1, REGSET2, MIN, REGNUM, CODE) \ EXECUTE_IF_AND_IN_BITMAP (REGSET1, REGSET2, MIN, REGNUM, CODE) *************** do { \ *** 109,115 **** /* Grow any tables needed when the number of registers is calculated or extended. For the linked list allocation, nothing needs to be done, other than zero the statistics on the first allocation. */ ! #define MAX_REGNO_REG_SET(NUM_REGS, NEW_P, RENUMBER_P) /* Control flow edge information. */ typedef struct edge_def { --- 110,119 ---- /* Grow any tables needed when the number of registers is calculated or extended. For the linked list allocation, nothing needs to be done, other than zero the statistics on the first allocation. */ ! #define MAX_REGNO_REG_SET(NUM_REGS, NEW_P, RENUMBER_P) ! ! /* Type we use to hold basic block counters. Should be at least 64bit. */ ! typedef HOST_WIDEST_INT gcov_type; /* Control flow edge information. */ typedef struct edge_def { *************** typedef struct edge_def { *** 127,147 **** int flags; /* see EDGE_* below */ int probability; /* biased by REG_BR_PROB_BASE */ ! int count; /* Expected number of executions calculated in profile.c */ } *edge; #define EDGE_FALLTHRU 1 ! #define EDGE_CRITICAL 2 ! #define EDGE_ABNORMAL 4 ! #define EDGE_ABNORMAL_CALL 8 ! #define EDGE_EH 16 ! #define EDGE_FAKE 32 #define EDGE_COMPLEX (EDGE_ABNORMAL | EDGE_ABNORMAL_CALL | EDGE_EH) ! /* Basic blocks need not start with a label nor end with a jump insn. For example, a previous basic block may just "conditionally fall" into the succeeding basic block, and the last basic block need not end with a jump insn. Block 0 is a descendant of the entry block. --- 131,164 ---- int flags; /* see EDGE_* below */ int probability; /* biased by REG_BR_PROB_BASE */ ! gcov_type count; /* Expected number of executions calculated in profile.c */ } *edge; #define EDGE_FALLTHRU 1 ! #define EDGE_ABNORMAL 2 ! #define EDGE_ABNORMAL_CALL 4 ! #define EDGE_EH 8 ! #define EDGE_FAKE 16 ! #define EDGE_DFS_BACK 32 #define EDGE_COMPLEX (EDGE_ABNORMAL | EDGE_ABNORMAL_CALL | EDGE_EH) ! /* A basic block is a sequence of instructions with only entry and ! only one exit. If any one of the instructions are executed, they ! will all be executed, and in sequence from first to last. ! ! There may be COND_EXEC instructions in the basic block. The ! COND_EXEC *instructions* will be executed -- but if the condition ! is false the conditionally executed *expressions* will of course ! not be executed. We don't consider the conditionally executed ! expression (which might have side-effects) to be in a separate ! basic block because the program counter will always be at the same ! location after the COND_EXEC instruction, regardless of whether the ! condition is true or not. ! ! Basic blocks need not start with a label nor end with a jump insn. For example, a previous basic block may just "conditionally fall" into the succeeding basic block, and the last basic block need not end with a jump insn. Block 0 is a descendant of the entry block. *************** typedef struct basic_block_def { *** 158,172 **** /* The first and last insns of the block. */ rtx head, end; /* The edges into and out of the block. */ edge pred, succ; ! /* Liveness info. Note that in SSA form, global_live_at_start does ! not reflect the use of regs in phi functions, since the liveness ! of these regs may depend on which edge was taken into the block. */ regset local_set; regset cond_local_set; regset global_live_at_start; regset global_live_at_end; /* Auxiliary info specific to a pass. */ --- 175,202 ---- /* The first and last insns of the block. */ rtx head, end; + /* The first and last trees of the block. */ + tree head_tree; + tree end_tree; + /* The edges into and out of the block. */ edge pred, succ; ! /* Liveness info. */ ! ! /* The registers that are modified within this in block. */ regset local_set; + /* The registers that are conditionally modified within this block. + In other words, registers that are set only as part of a + COND_EXEC. */ regset cond_local_set; + /* The registers that are live on entry to this block. + + Note that in SSA form, global_live_at_start does not reflect the + use of regs in phi functions, since the liveness of these regs + may depend on which edge was taken into the block. */ regset global_live_at_start; + /* The registers that are live on exit from this block. */ regset global_live_at_end; /* Auxiliary info specific to a pass. */ *************** typedef struct basic_block_def { *** 179,187 **** int loop_depth; /* Expected number of executions: calculated in profile.c. */ ! int count; } *basic_block; /* Number of basic blocks in the current function. */ extern int n_basic_blocks; --- 209,228 ---- int loop_depth; /* Expected number of executions: calculated in profile.c. */ ! gcov_type count; ! ! /* Expected frequency. Normalized to be in range 0 to BB_FREQ_MAX. */ ! int frequency; ! ! /* Various flags. See BB_* below. */ ! int flags; } *basic_block; + #define BB_FREQ_MAX 10000 + + /* Masks for basic_block.flags. */ + #define BB_REACHABLE 1 + /* Number of basic blocks in the current function. */ extern int n_basic_blocks; *************** extern varray_type basic_block_info; *** 200,205 **** --- 241,252 ---- extern regset regs_live_at_setjmp; + /* Special labels found during CFG build. */ + + extern rtx label_value_list, tail_recursion_label_list; + + extern struct obstack flow_obstack; + /* Indexed by n, gives number of basic block that (REG n) is used in. If the value is REG_BLOCK_GLOBAL (-2), it means (REG n) is used in more than one basic block. *************** extern regset regs_live_at_setjmp; *** 217,227 **** #define BLOCK_HEAD(B) (BASIC_BLOCK (B)->head) #define BLOCK_END(B) (BASIC_BLOCK (B)->end) /* Special block numbers [markers] for entry and exit. */ #define ENTRY_BLOCK (-1) #define EXIT_BLOCK (-2) ! /* Special block number not valid for any block. */ #define INVALID_BLOCK (-3) /* Similarly, block pointers for the edge list. */ --- 264,277 ---- #define BLOCK_HEAD(B) (BASIC_BLOCK (B)->head) #define BLOCK_END(B) (BASIC_BLOCK (B)->end) + #define BLOCK_HEAD_TREE(B) (BASIC_BLOCK (B)->head_tree) + #define BLOCK_END_TREE(B) (BASIC_BLOCK (B)->end_tree) + /* Special block numbers [markers] for entry and exit. */ #define ENTRY_BLOCK (-1) #define EXIT_BLOCK (-2) ! /* Special block number not valid for any block. */ #define INVALID_BLOCK (-3) /* Similarly, block pointers for the edge list. */ *************** extern varray_type basic_block_for_insn; *** 234,242 **** #define BLOCK_NUM(INSN) (BLOCK_FOR_INSN (INSN)->index + 0) extern void compute_bb_for_insn PARAMS ((int)); extern void update_bb_for_insn PARAMS ((basic_block)); extern void set_block_for_insn PARAMS ((rtx, basic_block)); - extern void set_block_num PARAMS ((rtx, int)); extern void free_basic_block_vars PARAMS ((int)); --- 284,292 ---- #define BLOCK_NUM(INSN) (BLOCK_FOR_INSN (INSN)->index + 0) extern void compute_bb_for_insn PARAMS ((int)); + extern void free_bb_for_insn PARAMS ((void)); extern void update_bb_for_insn PARAMS ((basic_block)); extern void set_block_for_insn PARAMS ((rtx, basic_block)); extern void free_basic_block_vars PARAMS ((int)); *************** extern void commit_edge_insertions PARAM *** 247,265 **** extern void remove_fake_edges PARAMS ((void)); extern void add_noreturn_fake_exit_edges PARAMS ((void)); extern void connect_infinite_loops_to_exit PARAMS ((void)); ! extern int flow_call_edges_add PARAMS ((sbitmap)); ! extern rtx flow_delete_insn PARAMS ((rtx)); ! extern void flow_delete_insn_chain PARAMS ((rtx, rtx)); ! extern void make_edge PARAMS ((sbitmap *, basic_block, basic_block, int)); extern void remove_edge PARAMS ((edge)); extern void redirect_edge_succ PARAMS ((edge, basic_block)); extern void redirect_edge_pred PARAMS ((edge, basic_block)); ! extern void create_basic_block PARAMS ((int, rtx, rtx, rtx)); extern int flow_delete_block PARAMS ((basic_block)); extern void merge_blocks_nomove PARAMS ((basic_block, basic_block)); extern void tidy_fallthru_edge PARAMS ((edge, basic_block, basic_block)); /* Structure to hold information for each natural loop. */ struct loop --- 297,328 ---- extern void remove_fake_edges PARAMS ((void)); extern void add_noreturn_fake_exit_edges PARAMS ((void)); extern void connect_infinite_loops_to_exit PARAMS ((void)); ! extern int flow_call_edges_add PARAMS ((sbitmap)); ! extern edge cached_make_edge PARAMS ((sbitmap *, basic_block, ! basic_block, int)); ! extern edge make_edge PARAMS ((basic_block, ! basic_block, int)); ! extern edge make_single_succ_edge PARAMS ((basic_block, basic_block, int)); extern void remove_edge PARAMS ((edge)); extern void redirect_edge_succ PARAMS ((edge, basic_block)); + extern edge redirect_edge_succ_nodup PARAMS ((edge, basic_block)); extern void redirect_edge_pred PARAMS ((edge, basic_block)); ! extern basic_block create_basic_block_structure PARAMS ((int, rtx, rtx, rtx)); ! extern basic_block create_basic_block PARAMS ((int, rtx, rtx)); extern int flow_delete_block PARAMS ((basic_block)); + extern int flow_delete_block_noexpunge PARAMS ((basic_block)); extern void merge_blocks_nomove PARAMS ((basic_block, basic_block)); extern void tidy_fallthru_edge PARAMS ((edge, basic_block, basic_block)); + extern void tidy_fallthru_edges PARAMS ((void)); + extern void flow_reverse_top_sort_order_compute PARAMS ((int *)); + extern int flow_depth_first_order_compute PARAMS ((int *, int *)); + extern void flow_preorder_transversal_compute PARAMS ((int *)); + extern void dump_edge_info PARAMS ((FILE *, edge, int)); + extern void clear_edges PARAMS ((void)); + extern void mark_critical_edges PARAMS ((void)); + extern rtx first_insn_after_basic_block_note PARAMS ((basic_block)); /* Structure to hold information for each natural loop. */ struct loop *************** struct loop *** 276,282 **** /* Basic block of loop pre-header or NULL if it does not exist. */ basic_block pre_header; ! /* Array of edges along the pre-header extended basic block trace. The source of the first edge is the root node of pre-header extended basic block, if it exists. */ edge *pre_header_edges; --- 339,345 ---- /* Basic block of loop pre-header or NULL if it does not exist. */ basic_block pre_header; ! /* Array of edges along the pre-header extended basic block trace. The source of the first edge is the root node of pre-header extended basic block, if it exists. */ edge *pre_header_edges; *************** struct loop *** 370,376 **** /* List of all LABEL_REFs which refer to code labels outside the loop. Used by routines that need to know all loop exits, such as final_biv_value and final_giv_value. ! This does not include loop exits due to return instructions. This is because all bivs and givs are pseudos, and hence must be dead after a return, so the presense of a return does not affect --- 433,439 ---- /* List of all LABEL_REFs which refer to code labels outside the loop. Used by routines that need to know all loop exits, such as final_biv_value and final_giv_value. ! This does not include loop exits due to return instructions. This is because all bivs and givs are pseudos, and hence must be dead after a return, so the presense of a return does not affect *************** struct loops *** 398,404 **** struct loop *array; /* Pointer to root of loop heirachy tree. */ ! struct loop *tree; /* Information derived from the CFG. */ struct cfg --- 461,467 ---- struct loop *array; /* Pointer to root of loop heirachy tree. */ ! struct loop *tree_root; /* Information derived from the CFG. */ struct cfg *************** extern void flow_loop_dump PARAMS ((cons *** 430,436 **** extern int flow_loop_scan PARAMS ((struct loops *, struct loop *, int)); /* This structure maintains an edge list vector. */ ! struct edge_list { int num_blocks; int num_edges; --- 493,499 ---- extern int flow_loop_scan PARAMS ((struct loops *, struct loop *, int)); /* This structure maintains an edge list vector. */ ! struct edge_list { int num_blocks; int num_edges; *************** struct edge_list *** 455,465 **** /* Number of edges in the compressed edge list. */ #define NUM_EDGES(el) ((el)->num_edges) struct edge_list * create_edge_list PARAMS ((void)); void free_edge_list PARAMS ((struct edge_list *)); void print_edge_list PARAMS ((FILE *, struct edge_list *)); void verify_edge_list PARAMS ((FILE *, struct edge_list *)); ! int find_edge_index PARAMS ((struct edge_list *, basic_block, basic_block)); --- 518,546 ---- /* Number of edges in the compressed edge list. */ #define NUM_EDGES(el) ((el)->num_edges) + /* BB is assumed to contain conditional jump. Return the fallthru edge. */ + #define FALLTHRU_EDGE(bb) ((bb)->succ->flags & EDGE_FALLTHRU \ + ? (bb)->succ : (bb)->succ->succ_next) + + /* BB is assumed to contain conditional jump. Return the branch edge. */ + #define BRANCH_EDGE(bb) ((bb)->succ->flags & EDGE_FALLTHRU \ + ? (bb)->succ->succ_next : (bb)->succ) + + /* Return expected execution frequency of the edge E. */ + #define EDGE_FREQUENCY(e) (((e)->src->frequency \ + * (e)->probability \ + + REG_BR_PROB_BASE / 2) \ + / REG_BR_PROB_BASE) + + /* Return nonzero if edge is critical. */ + #define EDGE_CRITICAL_P(e) ((e)->src->succ->succ_next \ + && (e)->dest->pred->pred_next) + struct edge_list * create_edge_list PARAMS ((void)); void free_edge_list PARAMS ((struct edge_list *)); void print_edge_list PARAMS ((FILE *, struct edge_list *)); void verify_edge_list PARAMS ((FILE *, struct edge_list *)); ! int find_edge_index PARAMS ((struct edge_list *, basic_block, basic_block)); *************** enum update_life_extent *** 477,500 **** #define PROP_REG_INFO 4 /* Update regs_ever_live et al. */ #define PROP_KILL_DEAD_CODE 8 /* Remove dead code. */ #define PROP_SCAN_DEAD_CODE 16 /* Scan for dead code. */ ! #define PROP_AUTOINC 32 /* Create autoinc mem references. */ ! #define PROP_FINAL 63 /* All of the above. */ /* Flags for loop discovery. */ ! #define LOOP_TREE 1 /* Build loop hierarchy tree. */ #define LOOP_PRE_HEADER 2 /* Analyse loop pre-header. */ ! #define LOOP_ENTRY_EDGES 4 /* Find entry edges. */ ! #define LOOP_EXIT_EDGES 8 /* Find exit edges. */ #define LOOP_EDGES (LOOP_ENTRY_EDGES | LOOP_EXIT_EDGES) ! #define LOOP_EXITS_DOMS 16 /* Find nodes that dom. all exits. */ ! #define LOOP_ALL 31 /* All of the above */ extern void life_analysis PARAMS ((rtx, FILE *, int)); extern void update_life_info PARAMS ((sbitmap, enum update_life_extent, int)); extern int count_or_remove_death_notes PARAMS ((sbitmap, int)); ! extern void propagate_block PARAMS ((basic_block, regset, regset, regset, int)); struct propagate_block_info; --- 558,595 ---- #define PROP_REG_INFO 4 /* Update regs_ever_live et al. */ #define PROP_KILL_DEAD_CODE 8 /* Remove dead code. */ #define PROP_SCAN_DEAD_CODE 16 /* Scan for dead code. */ ! #define PROP_ALLOW_CFG_CHANGES 32 /* Allow the CFG to be changed ! by dead code removal. */ ! #define PROP_AUTOINC 64 /* Create autoinc mem references. */ ! #define PROP_EQUAL_NOTES 128 /* Take into account REG_EQUAL notes. */ ! #define PROP_FINAL 127 /* All of the above. */ + #define CLEANUP_EXPENSIVE 1 /* Do relativly expensive optimizations + except for edge forwarding */ + #define CLEANUP_CROSSJUMP 2 /* Do crossjumping. */ + #define CLEANUP_POST_REGSTACK 4 /* We run after reg-stack and need + to care REG_DEAD notes. */ + #define CLEANUP_PRE_SIBCALL 8 /* Do not get confused by code hidden + inside call_placeholders.. */ + #define CLEANUP_PRE_LOOP 16 /* Take care to preserve syntactic loop + notes. */ + #define CLEANUP_UPDATE_LIFE 32 /* Keep life information up to date. */ + #define CLEANUP_THREADING 64 /* Do jump threading. */ /* Flags for loop discovery. */ ! #define LOOP_TREE 1 /* Build loop hierarchy tree. */ #define LOOP_PRE_HEADER 2 /* Analyse loop pre-header. */ ! #define LOOP_ENTRY_EDGES 4 /* Find entry edges. */ ! #define LOOP_EXIT_EDGES 8 /* Find exit edges. */ #define LOOP_EDGES (LOOP_ENTRY_EDGES | LOOP_EXIT_EDGES) ! #define LOOP_EXITS_DOMS 16 /* Find nodes that dom. all exits. */ ! #define LOOP_ALL 31 /* All of the above */ extern void life_analysis PARAMS ((rtx, FILE *, int)); extern void update_life_info PARAMS ((sbitmap, enum update_life_extent, int)); extern int count_or_remove_death_notes PARAMS ((sbitmap, int)); ! extern int propagate_block PARAMS ((basic_block, regset, regset, regset, int)); struct propagate_block_info; *************** extern struct propagate_block_info *init *** 504,516 **** extern void free_propagate_block_info PARAMS ((struct propagate_block_info *)); /* In lcm.c */ ! extern struct edge_list *pre_edge_lcm PARAMS ((FILE *, int, sbitmap *, ! sbitmap *, sbitmap *, sbitmap *, sbitmap **, sbitmap **)); extern struct edge_list *pre_edge_rev_lcm PARAMS ((FILE *, int, sbitmap *, ! sbitmap *, sbitmap *, ! sbitmap *, sbitmap **, sbitmap **)); extern void compute_available PARAMS ((sbitmap *, sbitmap *, sbitmap *, sbitmap *)); --- 599,611 ---- extern void free_propagate_block_info PARAMS ((struct propagate_block_info *)); /* In lcm.c */ ! extern struct edge_list *pre_edge_lcm PARAMS ((FILE *, int, sbitmap *, ! sbitmap *, sbitmap *, sbitmap *, sbitmap **, sbitmap **)); extern struct edge_list *pre_edge_rev_lcm PARAMS ((FILE *, int, sbitmap *, ! sbitmap *, sbitmap *, ! sbitmap *, sbitmap **, sbitmap **)); extern void compute_available PARAMS ((sbitmap *, sbitmap *, sbitmap *, sbitmap *)); *************** extern void debug_bb_n PARAMS ((int)); *** 533,542 **** extern void dump_regset PARAMS ((regset, FILE *)); extern void debug_regset PARAMS ((regset)); extern void allocate_reg_life_data PARAMS ((void)); /* This function is always defined so it can be called from the debugger, and it is declared extern so we don't get warnings about ! it being unused. */ extern void verify_flow_info PARAMS ((void)); extern int flow_loop_outside_edge_p PARAMS ((const struct loop *, edge)); --- 628,665 ---- extern void dump_regset PARAMS ((regset, FILE *)); extern void debug_regset PARAMS ((regset)); extern void allocate_reg_life_data PARAMS ((void)); + extern void allocate_bb_life_data PARAMS ((void)); + extern void expunge_block PARAMS ((basic_block)); + extern void expunge_block_nocompact PARAMS ((basic_block)); + extern basic_block alloc_block PARAMS ((void)); + extern void find_unreachable_blocks PARAMS ((void)); + extern void delete_noop_moves PARAMS ((rtx)); + extern basic_block redirect_edge_and_branch_force PARAMS ((edge, basic_block)); + extern basic_block force_nonfallthru PARAMS ((edge)); + extern bool redirect_edge_and_branch PARAMS ((edge, basic_block)); + extern rtx block_label PARAMS ((basic_block)); + extern bool forwarder_block_p PARAMS ((basic_block)); + extern bool purge_all_dead_edges PARAMS ((int)); + extern bool purge_dead_edges PARAMS ((basic_block)); + extern void find_sub_basic_blocks PARAMS ((basic_block)); + extern void find_many_sub_basic_blocks PARAMS ((sbitmap)); + extern bool can_fallthru PARAMS ((basic_block, basic_block)); + extern void flow_nodes_print PARAMS ((const char *, const sbitmap, + FILE *)); + extern void flow_edge_list_print PARAMS ((const char *, const edge *, + int, FILE *)); + extern void alloc_aux_for_block PARAMS ((basic_block, int)); + extern void alloc_aux_for_blocks PARAMS ((int)); + extern void clear_aux_for_blocks PARAMS ((void)); + extern void free_aux_for_blocks PARAMS ((void)); + extern void alloc_aux_for_edge PARAMS ((edge, int)); + extern void alloc_aux_for_edges PARAMS ((int)); + extern void clear_aux_for_edges PARAMS ((void)); + extern void free_aux_for_edges PARAMS ((void)); /* This function is always defined so it can be called from the debugger, and it is declared extern so we don't get warnings about ! it being unused. */ extern void verify_flow_info PARAMS ((void)); extern int flow_loop_outside_edge_p PARAMS ((const struct loop *, edge)); *************** typedef int (*conflict_graph_enum_fn) PA *** 550,571 **** /* Prototypes of operations on conflict graphs. */ ! extern conflict_graph conflict_graph_new PARAMS ((int)); extern void conflict_graph_delete PARAMS ((conflict_graph)); ! extern int conflict_graph_add PARAMS ((conflict_graph, int, int)); ! extern int conflict_graph_conflict_p PARAMS ((conflict_graph, int, int)); ! extern void conflict_graph_enum PARAMS ((conflict_graph, int, ! conflict_graph_enum_fn, void *)); extern void conflict_graph_merge_regs PARAMS ((conflict_graph, int, int)); extern void conflict_graph_print PARAMS ((conflict_graph, FILE*)); ! extern conflict_graph conflict_graph_compute PARAMS ((regset, partition)); /* In dominance.c */ --- 673,697 ---- /* Prototypes of operations on conflict graphs. */ ! extern conflict_graph conflict_graph_new PARAMS ((int)); extern void conflict_graph_delete PARAMS ((conflict_graph)); ! extern int conflict_graph_add PARAMS ((conflict_graph, int, int)); ! extern int conflict_graph_conflict_p PARAMS ((conflict_graph, int, int)); ! extern void conflict_graph_enum PARAMS ((conflict_graph, int, ! conflict_graph_enum_fn, void *)); extern void conflict_graph_merge_regs PARAMS ((conflict_graph, int, int)); extern void conflict_graph_print PARAMS ((conflict_graph, FILE*)); ! extern conflict_graph conflict_graph_compute PARAMS ((regset, partition)); + extern bool mark_dfs_back_edges PARAMS ((void)); + extern void update_br_prob_note PARAMS ((basic_block)); + extern void fixup_abnormal_edges PARAMS ((void)); /* In dominance.c */ *************** enum cdi_direction *** 578,581 **** extern void calculate_dominance_info PARAMS ((int *, sbitmap *, enum cdi_direction)); ! #endif /* _BASIC_BLOCK_H */ --- 704,707 ---- extern void calculate_dominance_info PARAMS ((int *, sbitmap *, enum cdi_direction)); ! #endif /* GCC_BASIC_BLOCK_H */ diff -Nrc3pad gcc-3.0.4/gcc/bb-reorder.c gcc-3.1/gcc/bb-reorder.c *** gcc-3.0.4/gcc/bb-reorder.c Sun May 13 07:09:51 2001 --- gcc-3.1/gcc/bb-reorder.c Sat Feb 9 02:18:11 2002 *************** *** 1,22 **** /* Basic block reordering routines for the GNU compiler. ! Copyright (C) 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* References: --- 1,22 ---- /* Basic block reordering routines for the GNU compiler. ! Copyright (C) 2000, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it ! under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ! ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public ! License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* References: *************** *** 84,310 **** #include "system.h" #include "tree.h" #include "rtl.h" - #include "tm_p.h" #include "hard-reg-set.h" #include "basic-block.h" - #include "insn-config.h" - #include "regs.h" #include "flags.h" #include "output.h" ! #include "function.h" ! #include "toplev.h" ! #include "recog.h" ! #include "expr.h" ! #include "obstack.h" ! ! ! #ifndef HAVE_epilogue ! #define HAVE_epilogue 0 ! #endif ! ! ! /* The contents of the current function definition are allocated ! in this obstack, and all are freed at the end of the function. ! For top-level functions, this is temporary_obstack. ! Separate obstacks are made for nested functions. */ ! ! extern struct obstack flow_obstack; ! ! ! /* Structure to hold information about lexical scopes. */ ! typedef struct scope_def ! { ! int level; ! ! /* The NOTE_INSN_BLOCK_BEG that started this scope. */ ! rtx note_beg; ! ! /* The NOTE_INSN_BLOCK_END that ended this scope. */ ! rtx note_end; ! ! /* The bb containing note_beg (if any). */ ! basic_block bb_beg; ! ! /* The bb containing note_end (if any). */ ! basic_block bb_end; ! ! /* List of basic blocks contained within this scope. */ ! basic_block *bbs; ! ! /* Number of blocks contained within this scope. */ ! int num_bbs; ! ! /* The outer scope or NULL if outermost scope. */ ! struct scope_def *outer; ! ! /* The first inner scope or NULL if innermost scope. */ ! struct scope_def *inner; ! ! /* The last inner scope or NULL if innermost scope. */ ! struct scope_def *inner_last; ! ! /* Link to the next (sibling) scope. */ ! struct scope_def *next; ! } *scope; ! ! ! /* Structure to hold information about the scope forest. */ ! typedef struct ! { ! /* Number of trees in forest. */ ! int num_trees; ! ! /* List of tree roots. */ ! scope *trees; ! } scope_forest_info; ! ! /* Structure to hold information about the blocks during reordering. */ ! typedef struct reorder_block_def ! { ! rtx eff_head; ! rtx eff_end; ! scope scope; ! basic_block next; ! int index; ! int visited; ! } *reorder_block_def; ! ! #define RBI(BB) ((reorder_block_def) (BB)->aux) ! /* Local function prototypes. */ - static rtx skip_insns_after_block PARAMS ((basic_block)); - static void record_effective_endpoints PARAMS ((void)); static void make_reorder_chain PARAMS ((void)); static basic_block make_reorder_chain_1 PARAMS ((basic_block, basic_block)); - static rtx label_for_bb PARAMS ((basic_block)); - static rtx emit_jump_to_block_after PARAMS ((basic_block, rtx)); - static void fixup_reorder_chain PARAMS ((void)); - static void relate_bbs_with_scopes PARAMS ((scope)); - static scope make_new_scope PARAMS ((int, rtx)); - static void build_scope_forest PARAMS ((scope_forest_info *)); - static void remove_scope_notes PARAMS ((void)); - static void insert_intra_1 PARAMS ((scope, rtx *)); - static void insert_intra_bb_scope_notes PARAMS ((basic_block)); - static void insert_inter_bb_scope_notes PARAMS ((basic_block, basic_block)); - static void rebuild_scope_notes PARAMS ((scope_forest_info *)); - static void free_scope_forest_1 PARAMS ((scope)); - static void free_scope_forest PARAMS ((scope_forest_info *)); - void dump_scope_forest PARAMS ((scope_forest_info *)); - static void dump_scope_forest_1 PARAMS ((scope, int)); - static rtx get_next_bb_note PARAMS ((rtx)); - static rtx get_prev_bb_note PARAMS ((rtx)); - - void verify_insn_chain PARAMS ((void)); - /* Skip over inter-block insns occurring after BB which are typically - associated with BB (e.g., barriers). If there are any such insns, - we return the last one. Otherwise, we return the end of BB. */ - - static rtx - skip_insns_after_block (bb) - basic_block bb; - { - rtx insn, last_insn, next_head; - - next_head = NULL_RTX; - if (bb->index + 1 != n_basic_blocks) - next_head = BASIC_BLOCK (bb->index + 1)->head; - - for (last_insn = bb->end; (insn = NEXT_INSN (last_insn)); last_insn = insn) - { - if (insn == next_head) - break; - - switch (GET_CODE (insn)) - { - case BARRIER: - continue; - - case NOTE: - switch (NOTE_LINE_NUMBER (insn)) - { - case NOTE_INSN_LOOP_END: - case NOTE_INSN_BLOCK_END: - case NOTE_INSN_DELETED: - case NOTE_INSN_DELETED_LABEL: - continue; - - default: - break; - } - break; - - case CODE_LABEL: - if (NEXT_INSN (insn) - && GET_CODE (NEXT_INSN (insn)) == JUMP_INSN - && (GET_CODE (PATTERN (NEXT_INSN (insn))) == ADDR_VEC - || GET_CODE (PATTERN (NEXT_INSN (insn))) == ADDR_DIFF_VEC)) - { - insn = NEXT_INSN (insn); - continue; - } - break; - - default: - break; - } - - break; - } - - return last_insn; - } - - - /* Locate the effective beginning and end of the insn chain for each - block, as defined by skip_insns_after_block above. */ - - static void - record_effective_endpoints () - { - rtx next_insn = get_insns (); - int i; - - for (i = 0; i < n_basic_blocks; ++i) - { - basic_block bb = BASIC_BLOCK (i); - rtx end; - - RBI (bb)->eff_head = next_insn; - end = skip_insns_after_block (bb); - RBI (bb)->eff_end = end; - next_insn = NEXT_INSN (end); - } - } - - /* Compute an ordering for a subgraph beginning with block BB. Record the ordering in RBI()->index and chained through RBI()->next. */ static void make_reorder_chain () { - basic_block last_block = NULL; basic_block prev = NULL; int nbb_m1 = n_basic_blocks - 1; ! ! /* If we've not got epilogue in RTL, we must fallthru to the exit. ! Force the last block to be at the end. */ ! /* ??? Some ABIs (e.g. MIPS) require the return insn to be at the ! end of the function for stack unwinding purposes. */ ! if (! HAVE_epilogue) ! { ! last_block = BASIC_BLOCK (nbb_m1); ! RBI (last_block)->visited = 1; ! nbb_m1 -= 1; ! } /* Loop until we've placed every block. */ do { int i; ! basic_block next = NULL; /* Find the next unplaced block. */ /* ??? Get rid of this loop, and track which blocks are not yet --- 84,116 ---- #include "system.h" #include "tree.h" #include "rtl.h" #include "hard-reg-set.h" #include "basic-block.h" #include "flags.h" #include "output.h" ! #include "cfglayout.h" ! #include "target.h" /* Local function prototypes. */ static void make_reorder_chain PARAMS ((void)); static basic_block make_reorder_chain_1 PARAMS ((basic_block, basic_block)); /* Compute an ordering for a subgraph beginning with block BB. Record the ordering in RBI()->index and chained through RBI()->next. */ static void make_reorder_chain () { basic_block prev = NULL; int nbb_m1 = n_basic_blocks - 1; ! basic_block next; /* Loop until we've placed every block. */ do { int i; ! ! next = NULL; /* Find the next unplaced block. */ /* ??? Get rid of this loop, and track which blocks are not yet *************** make_reorder_chain () *** 313,341 **** remove from the list as we place. The head of that list is what we're looking for here. */ ! for (i = 0; i <= nbb_m1; ++i) { basic_block bb = BASIC_BLOCK (i); if (! RBI (bb)->visited) ! { ! next = bb; ! break; ! } } ! if (! next) ! abort (); ! ! prev = make_reorder_chain_1 (next, prev); ! } ! while (RBI (prev)->index < nbb_m1); ! ! /* Terminate the chain. */ ! if (! HAVE_epilogue) ! { ! RBI (prev)->next = last_block; ! RBI (last_block)->index = RBI (prev)->index + 1; ! prev = last_block; } RBI (prev)->next = NULL; } --- 119,134 ---- remove from the list as we place. The head of that list is what we're looking for here. */ ! for (i = 0; i <= nbb_m1 && !next; ++i) { basic_block bb = BASIC_BLOCK (i); if (! RBI (bb)->visited) ! next = bb; } ! if (next) ! prev = make_reorder_chain_1 (next, prev); } + while (next); RBI (prev)->next = NULL; } *************** make_reorder_chain_1 (bb, prev) *** 362,380 **** /* Mark this block visited. */ if (prev) { - int new_index; - restart: RBI (prev)->next = bb; - new_index = RBI (prev)->index + 1; - RBI (bb)->index = new_index; if (rtl_dump_file && prev->index + 1 != bb->index) ! fprintf (rtl_dump_file, "Reordering block %d (%d) after %d (%d)\n", ! bb->index, RBI (bb)->index, prev->index, RBI (prev)->index); } else ! RBI (bb)->index = 0; RBI (bb)->visited = 1; prev = bb; --- 155,172 ---- /* Mark this block visited. */ if (prev) { restart: RBI (prev)->next = bb; if (rtl_dump_file && prev->index + 1 != bb->index) ! fprintf (rtl_dump_file, "Reordering block %d after %d\n", ! bb->index, prev->index); } else ! { ! if (bb->index != 0) ! abort (); ! } RBI (bb)->visited = 1; prev = bb; *************** make_reorder_chain_1 (bb, prev) *** 409,415 **** { if (e->flags & EDGE_FALLTHRU) e_fall = e; ! if (! (e->flags & EDGE_EH)) e_taken = e; } --- 201,207 ---- { if (e->flags & EDGE_FALLTHRU) e_fall = e; ! else if (! (e->flags & EDGE_EH)) e_taken = e; } *************** make_reorder_chain_1 (bb, prev) *** 461,1384 **** return prev; } - - /* Locate or create a label for a given basic block. */ - - static rtx - label_for_bb (bb) - basic_block bb; - { - rtx label = bb->head; - - if (GET_CODE (label) != CODE_LABEL) - { - if (rtl_dump_file) - fprintf (rtl_dump_file, "Emitting label for block %d (%d)\n", - bb->index, RBI (bb)->index); - - label = emit_label_before (gen_label_rtx (), label); - if (bb->head == RBI (bb)->eff_head) - RBI (bb)->eff_head = label; - bb->head = label; - } - - return label; - } - - - /* Emit a jump to BB after insn AFTER. */ - - static rtx - emit_jump_to_block_after (bb, after) - basic_block bb; - rtx after; - { - rtx jump; - - if (bb != EXIT_BLOCK_PTR) - { - rtx label = label_for_bb (bb); - jump = emit_jump_insn_after (gen_jump (label), after); - JUMP_LABEL (jump) = label; - LABEL_NUSES (label) += 1; - - if (rtl_dump_file) - fprintf (rtl_dump_file, "Emitting jump to block %d (%d)\n", - bb->index, RBI (bb)->index); - } - else - { - #ifdef HAVE_return - if (! HAVE_return) - abort (); - jump = emit_jump_insn_after (gen_return (), after); - - if (rtl_dump_file) - fprintf (rtl_dump_file, "Emitting return\n"); - #else - abort (); - #endif - } - - return jump; - } - - - /* Given a reorder chain, rearrange the code to match. */ - - static void - fixup_reorder_chain () - { - basic_block bb, last_bb; - - /* First do the bulk reordering -- rechain the blocks without regard to - the needed changes to jumps and labels. */ - - last_bb = BASIC_BLOCK (0); - bb = RBI (last_bb)->next; - while (bb) - { - rtx last_e = RBI (last_bb)->eff_end; - rtx curr_h = RBI (bb)->eff_head; - - NEXT_INSN (last_e) = curr_h; - PREV_INSN (curr_h) = last_e; - - last_bb = bb; - bb = RBI (bb)->next; - } - NEXT_INSN (RBI (last_bb)->eff_end) = NULL_RTX; - set_last_insn (RBI (last_bb)->eff_end); - - /* Now add jumps and labels as needed to match the blocks new - outgoing edges. */ - - for (bb = BASIC_BLOCK (0); bb ; bb = RBI (bb)->next) - { - edge e_fall, e_taken, e; - rtx jump_insn, barrier_insn, bb_end_insn; - basic_block nb; - - if (bb->succ == NULL) - continue; - - /* Find the old fallthru edge, and another non-EH edge for - a taken jump. */ - e_taken = e_fall = NULL; - for (e = bb->succ; e ; e = e->succ_next) - if (e->flags & EDGE_FALLTHRU) - e_fall = e; - else if (! (e->flags & EDGE_EH)) - e_taken = e; - - bb_end_insn = bb->end; - if (GET_CODE (bb_end_insn) == JUMP_INSN) - { - if (any_uncondjump_p (bb_end_insn)) - { - /* If the destination is still not next, nothing to do. */ - if (RBI (bb)->index + 1 != RBI (e_taken->dest)->index) - continue; - - /* Otherwise, we can remove the jump and cleanup the edge. */ - tidy_fallthru_edge (e_taken, bb, e_taken->dest); - RBI (bb)->eff_end = skip_insns_after_block (bb); - RBI (e_taken->dest)->eff_head = NEXT_INSN (RBI (bb)->eff_end); - - if (rtl_dump_file) - fprintf (rtl_dump_file, "Removing jump in block %d (%d)\n", - bb->index, RBI (bb)->index); - continue; - } - else if (any_condjump_p (bb_end_insn)) - { - /* If the old fallthru is still next, nothing to do. */ - if (RBI (bb)->index + 1 == RBI (e_fall->dest)->index - || (RBI (bb)->index == n_basic_blocks - 1 - && e_fall->dest == EXIT_BLOCK_PTR)) - continue; - - /* There is one special case: if *neither* block is next, - such as happens at the very end of a function, then we'll - need to add a new unconditional jump. Choose the taken - edge based on known or assumed probability. */ - if (RBI (bb)->index + 1 != RBI (e_taken->dest)->index) - { - rtx note = find_reg_note (bb_end_insn, REG_BR_PROB, 0); - if (note - && INTVAL (XEXP (note, 0)) < REG_BR_PROB_BASE / 2 - && invert_jump (bb_end_insn, - label_for_bb (e_fall->dest), 0)) - { - e_fall->flags &= ~EDGE_FALLTHRU; - e_taken->flags |= EDGE_FALLTHRU; - e = e_fall, e_fall = e_taken, e_taken = e; - } - } - - /* Otherwise we can try to invert the jump. This will - basically never fail, however, keep up the pretense. */ - else if (invert_jump (bb_end_insn, - label_for_bb (e_fall->dest), 0)) - { - e_fall->flags &= ~EDGE_FALLTHRU; - e_taken->flags |= EDGE_FALLTHRU; - continue; - } - } - else if (returnjump_p (bb_end_insn)) - continue; - else - { - /* Otherwise we have some switch or computed jump. In the - 99% case, there should not have been a fallthru edge. */ - if (! e_fall) - continue; - #ifdef CASE_DROPS_THROUGH - /* Except for VAX. Since we didn't have predication for the - tablejump, the fallthru block should not have moved. */ - if (RBI (bb)->index + 1 == RBI (e_fall->dest)->index) - continue; - bb_end_insn = skip_insns_after_block (bb); - #else - abort (); - #endif - } - } - else - { - /* No fallthru implies a noreturn function with EH edges, or - something similarly bizarre. In any case, we don't need to - do anything. */ - if (! e_fall) - continue; - - /* If the fallthru block is still next, nothing to do. */ - if (RBI (bb)->index + 1 == RBI (e_fall->dest)->index - || (RBI (bb)->index == n_basic_blocks - 1 - && e_fall->dest == EXIT_BLOCK_PTR)) - continue; - - /* We need a new jump insn. If the block has only one outgoing - edge, then we can stuff the new jump insn in directly. */ - if (bb->succ->succ_next == NULL) - { - e_fall->flags &= ~EDGE_FALLTHRU; - - jump_insn = emit_jump_to_block_after (e_fall->dest, bb_end_insn); - bb->end = jump_insn; - barrier_insn = emit_barrier_after (jump_insn); - RBI (bb)->eff_end = barrier_insn; - continue; - } - } - - /* We got here if we need to add a new jump insn in a new block - across the edge e_fall. */ - - jump_insn = emit_jump_to_block_after (e_fall->dest, bb_end_insn); - barrier_insn = emit_barrier_after (jump_insn); - - VARRAY_GROW (basic_block_info, ++n_basic_blocks); - create_basic_block (n_basic_blocks - 1, jump_insn, jump_insn, NULL); - - nb = BASIC_BLOCK (n_basic_blocks - 1); - nb->global_live_at_start = OBSTACK_ALLOC_REG_SET (&flow_obstack); - nb->global_live_at_end = OBSTACK_ALLOC_REG_SET (&flow_obstack); - nb->local_set = 0; - - COPY_REG_SET (nb->global_live_at_start, bb->global_live_at_start); - COPY_REG_SET (nb->global_live_at_end, bb->global_live_at_start); - - nb->aux = xmalloc (sizeof (struct reorder_block_def)); - RBI (nb)->eff_head = nb->head; - RBI (nb)->eff_end = barrier_insn; - RBI (nb)->scope = RBI (bb)->scope; - RBI (nb)->index = RBI (bb)->index + 1; - RBI (nb)->visited = 1; - RBI (nb)->next = RBI (bb)->next; - RBI (bb)->next = nb; - - /* Link to new block. */ - make_edge (NULL, nb, e_fall->dest, 0); - redirect_edge_succ (e_fall, nb); - - /* Don't process this new block. */ - bb = nb; - - /* Fix subsequent reorder block indices to reflect new block. */ - while ((nb = RBI (nb)->next) != NULL) - RBI (nb)->index += 1; - } - - /* Put basic_block_info in the new order. */ - for (bb = BASIC_BLOCK (0); bb ; bb = RBI (bb)->next) - { - bb->index = RBI (bb)->index; - BASIC_BLOCK (bb->index) = bb; - } - } - - - /* Perform sanity checks on the insn chain. - 1. Check that next/prev pointers are consistent in both the forward and - reverse direction. - 2. Count insns in chain, going both directions, and check if equal. - 3. Check that get_last_insn () returns the actual end of chain. */ - - void - verify_insn_chain () - { - rtx x, - prevx, - nextx; - int insn_cnt1, - insn_cnt2; - - prevx = NULL; - insn_cnt1 = 1; - for (x = get_insns (); x; x = NEXT_INSN (x)) - { - if (PREV_INSN (x) != prevx) - { - fprintf (stderr, "Forward traversal: insn chain corrupt.\n"); - fprintf (stderr, "previous insn:\n"); - debug_rtx (prevx); - fprintf (stderr, "current insn:\n"); - debug_rtx (x); - abort (); - } - ++insn_cnt1; - prevx = x; - } - - if (prevx != get_last_insn ()) - { - fprintf (stderr, "last_insn corrupt.\n"); - abort (); - } - - nextx = NULL; - insn_cnt2 = 1; - for (x = get_last_insn (); x; x = PREV_INSN (x)) - { - if (NEXT_INSN (x) != nextx) - { - fprintf (stderr, "Reverse traversal: insn chain corrupt.\n"); - fprintf (stderr, "current insn:\n"); - debug_rtx (x); - fprintf (stderr, "next insn:\n"); - debug_rtx (nextx); - abort (); - } - ++insn_cnt2; - nextx = x; - } - - if (insn_cnt1 != insn_cnt2) - { - fprintf (stderr, "insn_cnt1 (%d) not equal to insn_cnt2 (%d).\n", - insn_cnt1, insn_cnt2); - abort (); - } - } - - static rtx - get_next_bb_note (x) - rtx x; - { - while (x) - { - if (NOTE_INSN_BASIC_BLOCK_P (x)) - return x; - x = NEXT_INSN (x); - } - return NULL; - } - - - static rtx - get_prev_bb_note (x) - rtx x; - { - while (x) - { - if (NOTE_INSN_BASIC_BLOCK_P (x)) - return x; - x = PREV_INSN (x); - } - return NULL; - } - - - /* Determine and record the relationships between basic blocks and - scopes in scope tree S. */ - - static void - relate_bbs_with_scopes (s) - scope s; - { - scope p; - int i, bbi1, bbi2, bbs_spanned; - rtx bbnote; - - for (p = s->inner; p; p = p->next) - relate_bbs_with_scopes (p); - - bbi1 = bbi2 = -1; - bbs_spanned = 0; - - /* If the begin and end notes are both inside the same basic block, - or if they are both outside of basic blocks, then we know immediately - how they are related. Otherwise, we need to poke around to make the - determination. */ - if (s->bb_beg != s->bb_end) - { - if (s->bb_beg && s->bb_end) - { - /* Both notes are in different bbs. This implies that all the - basic blocks spanned by the pair of notes are contained in - this scope. */ - bbi1 = s->bb_beg->index; - bbi2 = s->bb_end->index; - bbs_spanned = 1; - } - else if (! s->bb_beg) - { - /* First note is outside of a bb. If the scope spans more than - one basic block, then they all are contained within this - scope. Otherwise, this scope is contained within the basic - block. */ - bbnote = get_next_bb_note (s->note_beg); - if (! bbnote) - abort (); - if (NOTE_BASIC_BLOCK (bbnote) == s->bb_end) - { - bbs_spanned = 0; - s->bb_beg = NOTE_BASIC_BLOCK (bbnote); - } - else - { - bbi1 = NOTE_BASIC_BLOCK (bbnote)->index; - bbi2 = s->bb_end->index; - s->bb_end = NULL; - bbs_spanned = 1; - } - } - else /* ! s->bb_end */ - { - /* Second note is outside of a bb. If the scope spans more than - one basic block, then they all are contained within this - scope. Otherwise, this scope is contained within the basic - block. */ - bbnote = get_prev_bb_note (s->note_end); - if (! bbnote) - abort (); - if (NOTE_BASIC_BLOCK (bbnote) == s->bb_beg) - { - bbs_spanned = 0; - s->bb_end = NOTE_BASIC_BLOCK (bbnote); - } - else - { - bbi1 = s->bb_beg->index; - bbi2 = NOTE_BASIC_BLOCK (bbnote)->index; - s->bb_beg = NULL; - bbs_spanned = 1; - } - } - } - else - { - if (s->bb_beg) - /* Both notes are in the same bb, which implies the block - contains this scope. */ - bbs_spanned = 0; - else - { - rtx x1, x2; - /* Both notes are outside of any bbs. This implies that all the - basic blocks spanned by the pair of notes are contained in - this scope. - There is a degenerate case to consider. If the notes do not - span any basic blocks, then it is an empty scope that can - safely be deleted or ignored. Mark these with level = -1. */ - - x1 = get_next_bb_note (s->note_beg); - x2 = get_prev_bb_note (s->note_end); - if (! (x1 && x2)) - { - s->level = -1; - bbs_spanned = 0; - } - else - { - bbi1 = NOTE_BASIC_BLOCK (x1)->index; - bbi2 = NOTE_BASIC_BLOCK (x2)->index; - bbs_spanned = 1; - } - } - } - - /* If the scope spans one or more basic blocks, we record them. We - only record the bbs that are immediately contained within this - scope. Note that if a scope is contained within a bb, we can tell - by checking that bb_beg = bb_end and that they are non-null. */ - if (bbs_spanned) - { - int j = 0; - - s->num_bbs = 0; - for (i = bbi1; i <= bbi2; i++) - if (! RBI (BASIC_BLOCK (i))->scope) - s->num_bbs++; - - s->bbs = xmalloc (s->num_bbs * sizeof (basic_block)); - for (i = bbi1; i <= bbi2; i++) - { - basic_block curr_bb = BASIC_BLOCK (i); - if (! RBI (curr_bb)->scope) - { - s->bbs[j++] = curr_bb; - RBI (curr_bb)->scope = s; - } - } - } - else - s->num_bbs = 0; - } - - - /* Allocate and initialize a new scope structure with scope level LEVEL, - and record the NOTE beginning the scope. */ - - static scope - make_new_scope (level, note) - int level; - rtx note; - { - scope new_scope = xcalloc (1, sizeof (struct scope_def)); - new_scope->level = level; - new_scope->note_beg = note; - return new_scope; - } - - - /* Build a forest representing the scope structure of the function. - Return a pointer to a structure describing the forest. */ - - static void - build_scope_forest (forest) - scope_forest_info *forest; - { - rtx x; - int level, bbi, i; - basic_block curr_bb; - scope root, curr_scope = 0; - - forest->num_trees = 0; - forest->trees = NULL; - level = -1; - root = NULL; - curr_bb = NULL; - bbi = 0; - for (x = get_insns (); x; x = NEXT_INSN (x)) - { - if (bbi < n_basic_blocks && x == BASIC_BLOCK (bbi)->head) - curr_bb = BASIC_BLOCK (bbi); - - if (GET_CODE (x) == NOTE) - { - if (NOTE_LINE_NUMBER (x) == NOTE_INSN_BLOCK_BEG) - { - if (root) - { - scope new_scope; - if (! curr_scope) - abort(); - level++; - new_scope = make_new_scope (level, x); - new_scope->outer = curr_scope; - new_scope->next = NULL; - if (! curr_scope->inner) - { - curr_scope->inner = new_scope; - curr_scope->inner_last = new_scope; - } - else - { - curr_scope->inner_last->next = new_scope; - curr_scope->inner_last = new_scope; - } - curr_scope = curr_scope->inner_last; - } - else - { - int ntrees = forest->num_trees; - level++; - curr_scope = make_new_scope (level, x); - root = curr_scope; - forest->trees = xrealloc (forest->trees, - sizeof (scope) * (ntrees + 1)); - forest->trees[forest->num_trees++] = root; - } - curr_scope->bb_beg = curr_bb; - } - else if (NOTE_LINE_NUMBER (x) == NOTE_INSN_BLOCK_END) - { - curr_scope->bb_end = curr_bb; - curr_scope->note_end = x; - level--; - curr_scope = curr_scope->outer; - if (level == -1) - root = NULL; - } - } /* if note */ - - if (curr_bb && curr_bb->end == x) - { - curr_bb = NULL; - bbi++; - } - - } /* for */ - - for (i = 0; i < forest->num_trees; i++) - relate_bbs_with_scopes (forest->trees[i]); - } - - - /* Remove all the NOTE_INSN_BLOCK_BEG and NOTE_INSN_BLOCK_END notes from - the insn chain. */ - - static void - remove_scope_notes () - { - rtx x, next; - basic_block currbb = NULL; - - for (x = get_insns (); x; x = next) - { - next = NEXT_INSN (x); - if (NOTE_INSN_BASIC_BLOCK_P (x)) - currbb = NOTE_BASIC_BLOCK (x); - - if (GET_CODE (x) == NOTE - && (NOTE_LINE_NUMBER (x) == NOTE_INSN_BLOCK_BEG - || NOTE_LINE_NUMBER (x) == NOTE_INSN_BLOCK_END)) - { - /* Check if the scope note happens to be the end of a bb. */ - if (currbb && x == currbb->end) - currbb->end = PREV_INSN (x); - if (currbb && x == currbb->head) - abort (); - - if (PREV_INSN (x)) - { - NEXT_INSN (PREV_INSN (x)) = next; - PREV_INSN (next) = PREV_INSN (x); - - NEXT_INSN (x) = NULL; - PREV_INSN (x) = NULL; - } - else - abort (); - } - } - } - - - /* Insert scope note pairs for a contained scope tree S after insn IP. */ - - static void - insert_intra_1 (s, ip) - scope s; - rtx *ip; - { - scope p; - - if (NOTE_BLOCK (s->note_beg)) - { - *ip = emit_note_after (NOTE_INSN_BLOCK_BEG, *ip); - NOTE_BLOCK (*ip) = NOTE_BLOCK (s->note_beg); - } - - for (p = s->inner; p; p = p->next) - insert_intra_1 (p, ip); - - if (NOTE_BLOCK (s->note_beg)) - { - *ip = emit_note_after (NOTE_INSN_BLOCK_END, *ip); - NOTE_BLOCK (*ip) = NOTE_BLOCK (s->note_end); - } - } - - - /* Insert NOTE_INSN_BLOCK_END notes and NOTE_INSN_BLOCK_BEG notes for - scopes that are contained within BB. */ - - static void - insert_intra_bb_scope_notes (bb) - basic_block bb; - { - scope s = RBI (bb)->scope; - scope p; - rtx ip; - - if (! s) - return; - - ip = bb->head; - if (GET_CODE (ip) == CODE_LABEL) - ip = NEXT_INSN (ip); - - for (p = s->inner; p; p = p->next) - { - if (p->bb_beg != NULL && p->bb_beg == p->bb_end && p->bb_beg == bb) - insert_intra_1 (p, &ip); - } - } - - - /* Given two consecutive basic blocks BB1 and BB2 with different scopes, - insert NOTE_INSN_BLOCK_END notes after BB1 and NOTE_INSN_BLOCK_BEG - notes before BB2 such that the notes are correctly balanced. If BB1 or - BB2 is NULL, we are inserting scope notes for the first and last basic - blocks, respectively. */ - - static void - insert_inter_bb_scope_notes (bb1, bb2) - basic_block bb1; - basic_block bb2; - { - rtx ip; - scope com; - - /* It is possible that a basic block is not contained in any scope. - In that case, we either open or close a scope but not both. */ - if (bb1 && bb2) - { - scope s1 = RBI (bb1)->scope; - scope s2 = RBI (bb2)->scope; - if (! s1 && ! s2) - return; - if (! s1) - bb1 = NULL; - else if (! s2) - bb2 = NULL; - } - - /* Find common ancestor scope. */ - if (bb1 && bb2) - { - scope s1 = RBI (bb1)->scope; - scope s2 = RBI (bb2)->scope; - while (s1 != s2) - { - if (! (s1 && s2)) - abort (); - if (s1->level > s2->level) - s1 = s1->outer; - else if (s2->level > s1->level) - s2 = s2->outer; - else - { - s1 = s1->outer; - s2 = s2->outer; - } - } - com = s1; - } - else - com = NULL; - - /* Close scopes. */ - if (bb1) - { - scope s = RBI (bb1)->scope; - ip = RBI (bb1)->eff_end; - while (s != com) - { - if (NOTE_BLOCK (s->note_beg)) - { - ip = emit_note_after (NOTE_INSN_BLOCK_END, ip); - NOTE_BLOCK (ip) = NOTE_BLOCK (s->note_end); - } - s = s->outer; - } - } - - /* Open scopes. */ - if (bb2) - { - scope s = RBI (bb2)->scope; - ip = bb2->head; - while (s != com) - { - if (NOTE_BLOCK (s->note_beg)) - { - ip = emit_note_before (NOTE_INSN_BLOCK_BEG, ip); - NOTE_BLOCK (ip) = NOTE_BLOCK (s->note_beg); - } - s = s->outer; - } - } - } - - - /* Rebuild all the NOTE_INSN_BLOCK_BEG and NOTE_INSN_BLOCK_END notes based - on the scope forest and the newly reordered basic blocks. */ - - static void - rebuild_scope_notes (forest) - scope_forest_info *forest; - { - int i; - - if (forest->num_trees == 0) - return; - - /* Start by opening the scopes before the first basic block. */ - insert_inter_bb_scope_notes (NULL, BASIC_BLOCK (0)); - - /* Then, open and close scopes as needed between blocks. */ - for (i = 0; i < n_basic_blocks - 1; i++) - { - basic_block bb1 = BASIC_BLOCK (i); - basic_block bb2 = BASIC_BLOCK (i + 1); - if (RBI (bb1)->scope != RBI (bb2)->scope) - insert_inter_bb_scope_notes (bb1, bb2); - insert_intra_bb_scope_notes (bb1); - } - - /* Finally, close the scopes after the last basic block. */ - insert_inter_bb_scope_notes (BASIC_BLOCK (n_basic_blocks - 1), NULL); - insert_intra_bb_scope_notes (BASIC_BLOCK (n_basic_blocks - 1)); - } - - - /* Free the storage associated with the scope tree at S. */ - - static void - free_scope_forest_1 (s) - scope s; - { - scope p, next; - - for (p = s->inner; p; p = next) - { - next = p->next; - free_scope_forest_1 (p); - } - - if (s->bbs) - free (s->bbs); - free (s); - } - - - /* Free the storage associated with the scope forest. */ - - static void - free_scope_forest (forest) - scope_forest_info *forest; - { - int i; - for (i = 0; i < forest->num_trees; i++) - free_scope_forest_1 (forest->trees[i]); - } - - - /* Visualize the scope forest. */ - - void - dump_scope_forest (forest) - scope_forest_info *forest; - { - if (forest->num_trees == 0) - fprintf (stderr, "\n< Empty scope forest >\n"); - else - { - int i; - fprintf (stderr, "\n< Scope forest >\n"); - for (i = 0; i < forest->num_trees; i++) - dump_scope_forest_1 (forest->trees[i], 0); - } - } - - - /* Recursive portion of dump_scope_forest. */ - - static void - dump_scope_forest_1 (s, indent) - scope s; - int indent; - { - scope p; - int i; - - if (s->bb_beg != NULL && s->bb_beg == s->bb_end - && RBI (s->bb_beg)->scope - && RBI (s->bb_beg)->scope->level + 1 == s->level) - { - fprintf (stderr, "%*s", indent, ""); - fprintf (stderr, "BB%d:\n", s->bb_beg->index); - } - - fprintf (stderr, "%*s", indent, ""); - fprintf (stderr, "{ level %d (block %p)\n", s->level, - (PTR) NOTE_BLOCK (s->note_beg)); - - fprintf (stderr, "%*s%s", indent, "", "bbs:"); - for (i = 0; i < s->num_bbs; i++) - fprintf (stderr, " %d", s->bbs[i]->index); - fprintf (stderr, "\n"); - - for (p = s->inner; p; p = p->next) - dump_scope_forest_1 (p, indent + 2); - - fprintf (stderr, "%*s", indent, ""); - fprintf (stderr, "}\n"); - } - - /* Reorder basic blocks. The main entry point to this file. */ void reorder_basic_blocks () { - scope_forest_info forest; - int i; - if (n_basic_blocks <= 1) return; ! for (i = 0; i < n_basic_blocks; i++) ! BASIC_BLOCK (i)->aux = xcalloc (1, sizeof (struct reorder_block_def)); ! ! EXIT_BLOCK_PTR->aux = xcalloc (1, sizeof (struct reorder_block_def)); ! build_scope_forest (&forest); ! remove_scope_notes (); - record_effective_endpoints (); make_reorder_chain (); - fixup_reorder_chain (); ! #ifdef ENABLE_CHECKING ! verify_insn_chain (); ! #endif ! ! rebuild_scope_notes (&forest); ! free_scope_forest (&forest); ! reorder_blocks (); ! ! for (i = 0; i < n_basic_blocks; i++) ! free (BASIC_BLOCK (i)->aux); ! ! free (EXIT_BLOCK_PTR->aux); ! #ifdef ENABLE_CHECKING ! verify_flow_info (); ! #endif } --- 253,275 ---- return prev; } /* Reorder basic blocks. The main entry point to this file. */ void reorder_basic_blocks () { if (n_basic_blocks <= 1) return; ! if ((* targetm.cannot_modify_jumps_p) ()) ! return; ! cfg_layout_initialize (); make_reorder_chain (); ! if (rtl_dump_file) ! dump_flow_info (rtl_dump_file); ! cfg_layout_finalize (); } diff -Nrc3pad gcc-3.0.4/gcc/bitmap.c gcc-3.1/gcc/bitmap.c *** gcc-3.0.4/gcc/bitmap.c Sun Jul 23 16:25:06 2000 --- gcc-3.1/gcc/bitmap.c Wed Oct 31 03:01:15 2001 *************** *** 1,22 **** /* Functions to support general ended bitmaps. ! Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" #include "system.h" --- 1,22 ---- /* Functions to support general ended bitmaps. ! Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" #include "system.h" *************** static int bitmap_obstack_init = FALSE; *** 38,45 **** #endif /* Global data */ ! bitmap_element bitmap_zero; /* An element of all zero bits. */ ! bitmap_element *bitmap_free; /* Freelist of bitmap elements. */ static void bitmap_element_free PARAMS ((bitmap, bitmap_element *)); static bitmap_element *bitmap_element_allocate PARAMS ((void)); --- 38,45 ---- #endif /* Global data */ ! bitmap_element bitmap_zero_bits; /* An element of all zero bits. */ ! static bitmap_element *bitmap_free; /* Freelist of bitmap elements. */ static void bitmap_element_free PARAMS ((bitmap, bitmap_element *)); static bitmap_element *bitmap_element_allocate PARAMS ((void)); *************** static int bitmap_element_zerop PARAMS *** 47,53 **** static void bitmap_element_link PARAMS ((bitmap, bitmap_element *)); static bitmap_element *bitmap_find_bit PARAMS ((bitmap, unsigned int)); ! /* Free a bitmap element */ static INLINE void bitmap_element_free (head, elt) --- 47,54 ---- static void bitmap_element_link PARAMS ((bitmap, bitmap_element *)); static bitmap_element *bitmap_find_bit PARAMS ((bitmap, unsigned int)); ! /* Free a bitmap element. Since these are allocated off the ! bitmap_obstack, "free" actually means "put onto the freelist". */ static INLINE void bitmap_element_free (head, elt) *************** bitmap_element_free (head, elt) *** 69,75 **** /* Since the first thing we try is to insert before current, make current the next entry in preference to the previous. */ if (head->current == elt) ! head->current = next != 0 ? next : prev; elt->next = bitmap_free; bitmap_free = elt; --- 70,80 ---- /* Since the first thing we try is to insert before current, make current the next entry in preference to the previous. */ if (head->current == elt) ! { ! head->current = next != 0 ? next : prev; ! if (head->current) ! head->indx = head->current->indx; ! } elt->next = bitmap_free; bitmap_free = elt; *************** static INLINE bitmap_element * *** 81,89 **** bitmap_element_allocate () { bitmap_element *element; - #if BITMAP_ELEMENT_WORDS != 2 - int i; - #endif if (bitmap_free != 0) { --- 86,91 ---- *************** bitmap_element_allocate () *** 125,140 **** sizeof (bitmap_element)); } ! #if BITMAP_ELEMENT_WORDS == 2 ! element->bits[0] = element->bits[1] = 0; ! #else ! for (i = 0; i < BITMAP_ELEMENT_WORDS; i++) ! element->bits[i] = 0; ! #endif return element; } /* Return nonzero if all bits in an element are zero. */ static INLINE int --- 127,150 ---- sizeof (bitmap_element)); } ! memset (element->bits, 0, sizeof (element->bits)); return element; } + /* Release any memory allocated by bitmaps. */ + + void + bitmap_release_memory () + { + bitmap_free = 0; + if (bitmap_obstack_init) + { + bitmap_obstack_init = FALSE; + obstack_free (&bitmap_obstack, NULL); + } + } + /* Return nonzero if all bits in an element are zero. */ static INLINE int *************** bitmap_clear (head) *** 229,235 **** head->first = head->current = 0; } ! /* Copy a bitmap to another bitmap */ void bitmap_copy (to, from) --- 239,245 ---- head->first = head->current = 0; } ! /* Copy a bitmap to another bitmap. */ void bitmap_copy (to, from) *************** bitmap_clear_bit (head, bit) *** 337,343 **** } } - /* Set a single bit in a bitmap. */ void --- 347,352 ---- *************** bitmap_set_bit (head, bit) *** 361,367 **** else ptr->bits[word_num] |= bit_val; } ! /* Return whether a bit is set within a bitmap. */ int --- 370,376 ---- else ptr->bits[word_num] |= bit_val; } ! /* Return whether a bit is set within a bitmap. */ int *************** bitmap_bit_p (head, bit) *** 384,389 **** --- 393,504 ---- return (ptr->bits[word_num] >> bit_num) & 1; } + /* Return the bit number of the first set bit in the bitmap, or -1 + if the bitmap is empty. */ + + int + bitmap_first_set_bit (a) + bitmap a; + { + bitmap_element *ptr = a->first; + unsigned HOST_WIDE_INT word; + unsigned word_num, bit_num; + + if (ptr == NULL) + return -1; + + #if BITMAP_ELEMENT_WORDS == 2 + word_num = 0, word = ptr->bits[0]; + if (word == 0) + word_num = 1, word = ptr->bits[1]; + #else + for (word_num = 0; word_num < BITMAP_ELEMENT_WORDS; ++word_num) + if ((word = ptr->bits[word_num]) != 0) + break; + #endif + + /* Binary search for the first set bit. */ + /* ??? It'd be nice to know if ffs or ffsl was available. */ + + bit_num = 0; + word = word & -word; + + #if HOST_BITS_PER_WIDE_INT > 64 + #error "Fill out the table." + #endif + #if HOST_BITS_PER_WIDE_INT > 32 + if ((word & 0xffffffff) == 0) + word >>= 32, bit_num += 32; + #endif + if ((word & 0xffff) == 0) + word >>= 16, bit_num += 16; + if ((word & 0xff) == 0) + word >>= 8, bit_num += 8; + if (word & 0xf0) + bit_num += 4; + if (word & 0xcc) + bit_num += 2; + if (word & 0xaa) + bit_num += 1; + + return (ptr->indx * BITMAP_ELEMENT_ALL_BITS + + word_num * HOST_BITS_PER_WIDE_INT + + bit_num); + } + + /* Return the bit number of the last set bit in the bitmap, or -1 + if the bitmap is empty. */ + + int + bitmap_last_set_bit (a) + bitmap a; + { + bitmap_element *ptr = a->first; + unsigned HOST_WIDE_INT word; + unsigned word_num, bit_num; + + if (ptr == NULL) + return -1; + + while (ptr->next != NULL) + ptr = ptr->next; + + #if BITMAP_ELEMENT_WORDS == 2 + word_num = 1, word = ptr->bits[1]; + if (word == 0) + word_num = 0, word = ptr->bits[0]; + #else + for (word_num = BITMAP_ELEMENT_WORDS; word_num-- > 0; ) + if ((word = ptr->bits[word_num]) != 0) + break; + #endif + + /* Binary search for the last set bit. */ + + bit_num = 0; + #if HOST_BITS_PER_WIDE_INT > 64 + #error "Fill out the table." + #endif + #if HOST_BITS_PER_WIDE_INT > 32 + if (word & ~ (unsigned HOST_WIDE_INT) 0xffffffff) + word >>= 32, bit_num += 32; + #endif + if (word & 0xffff0000) + word >>= 16, bit_num += 16; + if (word & 0xff00) + word >>= 8, bit_num += 8; + if (word & 0xf0) + word >>= 4, bit_num += 4; + if (word & 0xc) + word >>= 2, bit_num += 2; + if (word & 0x2) + bit_num += 1; + + return (ptr->indx * BITMAP_ELEMENT_ALL_BITS + + word_num * HOST_BITS_PER_WIDE_INT + + bit_num); + } + /* Store in bitmap TO the result of combining bitmap FROM1 and FROM2 using a specific bit manipulation. Return true if TO changes. */ *************** bitmap_operation (to, from1, from2, oper *** 458,478 **** { indx = indx1; from1_tmp = from1_ptr; ! from2_tmp = &bitmap_zero; from1_ptr = from1_ptr->next; indx1 = (from1_ptr) ? from1_ptr->indx : HIGHEST_INDEX; } else { indx = indx2; ! from1_tmp = &bitmap_zero; from2_tmp = from2_ptr; from2_ptr = from2_ptr->next; indx2 = (from2_ptr) ? from2_ptr->indx : HIGHEST_INDEX; } /* Find the appropriate element from TO. Begin by discarding ! elements that we've skipped. */ while (to_ptr && to_ptr->indx < indx) { changed = 1; --- 573,593 ---- { indx = indx1; from1_tmp = from1_ptr; ! from2_tmp = &bitmap_zero_bits; from1_ptr = from1_ptr->next; indx1 = (from1_ptr) ? from1_ptr->indx : HIGHEST_INDEX; } else { indx = indx2; ! from1_tmp = &bitmap_zero_bits; from2_tmp = from2_ptr; from2_ptr = from2_ptr->next; indx2 = (from2_ptr) ? from2_ptr->indx : HIGHEST_INDEX; } /* Find the appropriate element from TO. Begin by discarding ! elements that we've skipped. */ while (to_ptr && to_ptr->indx < indx) { changed = 1; *************** bitmap_operation (to, from1, from2, oper *** 507,513 **** case BITMAP_IOR: DOIT (|); break; ! case BITMAP_XOR: DOIT (^); break; --- 622,630 ---- case BITMAP_IOR: DOIT (|); break; ! case BITMAP_IOR_COMPL: ! DOIT (|~); ! break; case BITMAP_XOR: DOIT (^); break; *************** bitmap_equal_p (a, b) *** 558,564 **** } /* Or into bitmap TO bitmap FROM1 and'ed with the complement of ! bitmap FROM2. */ void bitmap_ior_and_compl (to, from1, from2) --- 675,681 ---- } /* Or into bitmap TO bitmap FROM1 and'ed with the complement of ! bitmap FROM2. */ void bitmap_ior_and_compl (to, from1, from2) *************** bitmap_ior_and_compl (to, from1, from2) *** 574,579 **** --- 691,715 ---- bitmap_operation (to, to, &tmp, BITMAP_IOR); bitmap_clear (&tmp); } + + int + bitmap_union_of_diff (dst, a, b, c) + bitmap dst; + bitmap a; + bitmap b; + bitmap c; + { + bitmap_head tmp; + int changed; + + tmp.first = tmp.current = 0; + + bitmap_operation (&tmp, b, c, BITMAP_AND_COMPL); + changed = bitmap_operation (dst, &tmp, a, BITMAP_IOR); + bitmap_clear (&tmp); + + return changed; + } /* Initialize a bitmap header. */ *************** debug_bitmap_file (file, head) *** 631,637 **** fprintf (file, " }\n"); } } ! /* Function to be called from the debugger to print the contents of a bitmap. */ --- 767,773 ---- fprintf (file, " }\n"); } } ! /* Function to be called from the debugger to print the contents of a bitmap. */ *************** debug_bitmap (head) *** 641,647 **** { debug_bitmap_file (stdout, head); } ! /* Function to print out the contents of a bitmap. Unlike debug_bitmap_file, it does not print anything but the bits. */ --- 777,783 ---- { debug_bitmap_file (stdout, head); } ! /* Function to print out the contents of a bitmap. Unlike debug_bitmap_file, it does not print anything but the bits. */ *************** bitmap_print (file, head, prefix, suffix *** 663,678 **** }); fputs (suffix, file); } - - /* Release any memory allocated by bitmaps. */ - - void - bitmap_release_memory () - { - bitmap_free = 0; - if (bitmap_obstack_init) - { - bitmap_obstack_init = FALSE; - obstack_free (&bitmap_obstack, NULL_PTR); - } - } --- 799,801 ---- diff -Nrc3pad gcc-3.0.4/gcc/bitmap.h gcc-3.1/gcc/bitmap.h *** gcc-3.0.4/gcc/bitmap.h Tue Jan 11 23:27:40 2000 --- gcc-3.1/gcc/bitmap.h Fri Jan 18 13:40:27 2002 *************** *** 1,25 **** /* Functions to support general ended bitmaps. ! Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ ! #ifndef _BITMAP_H ! #define _BITMAP_H 1 /* Number of words to use for each element in the linked list. */ --- 1,26 ---- /* Functions to support general ended bitmaps. ! Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 ! Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ ! #ifndef GCC_BITMAP_H ! #define GCC_BITMAP_H /* Number of words to use for each element in the linked list. */ *************** Boston, MA 02111-1307, USA. */ *** 41,57 **** typedef struct bitmap_element_def { ! struct bitmap_element_def *next; /* Next element. */ ! struct bitmap_element_def *prev; /* Previous element. */ ! unsigned int indx; /* regno/BITMAP_ELEMENT_ALL_BITS. */ ! unsigned HOST_WIDE_INT bits[BITMAP_ELEMENT_WORDS]; /* Bits that are set. */ } bitmap_element; /* Head of bitmap linked list. */ typedef struct bitmap_head_def { ! bitmap_element *first; /* First element in linked list. */ ! bitmap_element *current; /* Last element looked at. */ ! unsigned int indx; /* Index of last element looked at. */ } bitmap_head, *bitmap; /* Enumeration giving the various operations we support. */ --- 42,59 ---- typedef struct bitmap_element_def { ! struct bitmap_element_def *next; /* Next element. */ ! struct bitmap_element_def *prev; /* Previous element. */ ! unsigned int indx; /* regno/BITMAP_ELEMENT_ALL_BITS. */ ! unsigned HOST_WIDE_INT bits[BITMAP_ELEMENT_WORDS]; /* Bits that are set. */ } bitmap_element; /* Head of bitmap linked list. */ typedef struct bitmap_head_def { ! bitmap_element *first; /* First element in linked list. */ ! bitmap_element *current; /* Last element looked at. */ ! unsigned int indx; /* Index of last element looked at. */ ! } bitmap_head, *bitmap; /* Enumeration giving the various operations we support. */ *************** enum bitmap_bits { *** 59,75 **** BITMAP_AND, /* TO = FROM1 & FROM2 */ BITMAP_AND_COMPL, /* TO = FROM1 & ~ FROM2 */ BITMAP_IOR, /* TO = FROM1 | FROM2 */ ! BITMAP_XOR /* TO = FROM1 ^ FROM2 */ }; /* Global data */ ! extern bitmap_element *bitmap_free; /* Freelist of bitmap elements */ ! extern bitmap_element bitmap_zero; /* Zero bitmap element */ /* Clear a bitmap by freeing up the linked list. */ extern void bitmap_clear PARAMS ((bitmap)); ! /* Copy a bitmap to another bitmap. */ extern void bitmap_copy PARAMS ((bitmap, bitmap)); /* True if two bitmaps are identical. */ --- 61,77 ---- BITMAP_AND, /* TO = FROM1 & FROM2 */ BITMAP_AND_COMPL, /* TO = FROM1 & ~ FROM2 */ BITMAP_IOR, /* TO = FROM1 | FROM2 */ ! BITMAP_XOR, /* TO = FROM1 ^ FROM2 */ ! BITMAP_IOR_COMPL /* TO = FROM1 | ~FROM2 */ }; /* Global data */ ! extern bitmap_element bitmap_zero_bits; /* Zero bitmap element */ /* Clear a bitmap by freeing up the linked list. */ extern void bitmap_clear PARAMS ((bitmap)); ! /* Copy a bitmap to another bitmap. */ extern void bitmap_copy PARAMS ((bitmap, bitmap)); /* True if two bitmaps are identical. */ *************** extern bitmap bitmap_initialize PARAMS ( *** 104,119 **** /* Release all memory held by bitmaps. */ extern void bitmap_release_memory PARAMS ((void)); ! extern void debug_bitmap PARAMS ((bitmap)); /* Allocate a bitmap with oballoc. */ #define BITMAP_OBSTACK_ALLOC(OBSTACK) \ bitmap_initialize ((bitmap) obstack_alloc (OBSTACK, sizeof (bitmap_head))) ! /* Allocate a bitmap with alloca. */ ! #define BITMAP_ALLOCA() \ ! bitmap_initialize ((bitmap) alloca (sizeof (bitmap_head))) ! /* Allocate a bitmap with xmalloc. */ #define BITMAP_XMALLOC() \ bitmap_initialize ((bitmap) xmalloc (sizeof (bitmap_head))) --- 106,135 ---- /* Release all memory held by bitmaps. */ extern void bitmap_release_memory PARAMS ((void)); ! /* A few compatibility/functions macros for compatibility with sbitmaps */ ! #define dump_bitmap(file, bitmap) bitmap_print (file, bitmap, "", "\n") ! #define bitmap_zero(a) bitmap_clear (a) ! #define bitmap_a_or_b(a,b,c) bitmap_operation (a, b, c, BITMAP_IOR) ! #define bitmap_a_and_b(a,b,c) bitmap_operation (a, b, c, BITMAP_AND) ! extern int bitmap_union_of_diff PARAMS((bitmap, bitmap, bitmap, bitmap)); ! extern int bitmap_first_set_bit PARAMS((bitmap)); ! extern int bitmap_last_set_bit PARAMS((bitmap)); /* Allocate a bitmap with oballoc. */ #define BITMAP_OBSTACK_ALLOC(OBSTACK) \ bitmap_initialize ((bitmap) obstack_alloc (OBSTACK, sizeof (bitmap_head))) ! /* Allocate a bitmap with alloca. Note alloca cannot be passed as an ! argument to a function, so we set a temporary variable to the value ! returned by alloca and pass that variable to bitmap_initialize(). ! PTR is then set to the value returned from bitmap_initialize() to ! avoid having it appear more than once in case it has side effects. */ ! #define BITMAP_ALLOCA(PTR) \ ! do { \ ! bitmap temp_bitmap_ = (bitmap) alloca (sizeof (bitmap_head)); \ ! (PTR) = bitmap_initialize (temp_bitmap_); \ ! } while (0) ! /* Allocate a bitmap with xmalloc. */ #define BITMAP_XMALLOC() \ bitmap_initialize ((bitmap) xmalloc (sizeof (bitmap_head))) *************** do { \ *** 143,149 **** #define BITMAP_INIT_ONCE() /* Loop over all bits in BITMAP, starting with MIN, setting BITNUM to the ! bit number and executing CODE for all bits that are set. */ #define EXECUTE_IF_SET_IN_BITMAP(BITMAP, MIN, BITNUM, CODE) \ do { \ --- 159,165 ---- #define BITMAP_INIT_ONCE() /* Loop over all bits in BITMAP, starting with MIN, setting BITNUM to the ! bit number and executing CODE for all bits that are set. */ #define EXECUTE_IF_SET_IN_BITMAP(BITMAP, MIN, BITNUM, CODE) \ do { \ *************** do { \ *** 200,206 **** /* Loop over all bits in BITMAP1 and BITMAP2, starting with MIN, setting BITNUM to the bit number and executing CODE for all bits that are set in ! the first bitmap and not set in the second. */ #define EXECUTE_IF_AND_COMPL_IN_BITMAP(BITMAP1, BITMAP2, MIN, BITNUM, CODE) \ do { \ --- 216,222 ---- /* Loop over all bits in BITMAP1 and BITMAP2, starting with MIN, setting BITNUM to the bit number and executing CODE for all bits that are set in ! the first bitmap and not set in the second. */ #define EXECUTE_IF_AND_COMPL_IN_BITMAP(BITMAP1, BITMAP2, MIN, BITNUM, CODE) \ do { \ *************** do { \ *** 231,237 **** ptr2_ = ptr2_->next; \ \ tmp2_ = ((ptr2_ != 0 && ptr2_->indx == ptr1_->indx) \ ! ? ptr2_ : &bitmap_zero); \ \ for (; word_num_ < BITMAP_ELEMENT_WORDS; word_num_++) \ { \ --- 247,253 ---- ptr2_ = ptr2_->next; \ \ tmp2_ = ((ptr2_ != 0 && ptr2_->indx == ptr1_->indx) \ ! ? ptr2_ : &bitmap_zero_bits); \ \ for (; word_num_ < BITMAP_ELEMENT_WORDS; word_num_++) \ { \ *************** do { \ *** 267,273 **** /* Loop over all bits in BITMAP1 and BITMAP2, starting with MIN, setting BITNUM to the bit number and executing CODE for all bits that are set in ! the both bitmaps. */ #define EXECUTE_IF_AND_IN_BITMAP(BITMAP1, BITMAP2, MIN, BITNUM, CODE) \ do { \ --- 283,289 ---- /* Loop over all bits in BITMAP1 and BITMAP2, starting with MIN, setting BITNUM to the bit number and executing CODE for all bits that are set in ! the both bitmaps. */ #define EXECUTE_IF_AND_IN_BITMAP(BITMAP1, BITMAP2, MIN, BITNUM, CODE) \ do { \ *************** do { \ *** 296,302 **** \ if (ptr2_ == 0) \ { \ ! /* If there are no more elements in BITMAP2, exit loop now.*/ \ ptr1_ = (bitmap_element *)0; \ break; \ } \ --- 312,318 ---- \ if (ptr2_ == 0) \ { \ ! /* If there are no more elements in BITMAP2, exit loop now. */ \ ptr1_ = (bitmap_element *)0; \ break; \ } \ *************** do { \ *** 338,341 **** } \ } while (0) ! #endif /* _BITMAP_H */ --- 354,357 ---- } \ } while (0) ! #endif /* GCC_BITMAP_H */ diff -Nrc3pad gcc-3.0.4/gcc/build-make gcc-3.1/gcc/build-make *** gcc-3.0.4/gcc/build-make Wed Jan 3 14:23:39 2001 --- gcc-3.1/gcc/build-make Thu Jan 1 00:00:00 1970 *************** *** 1,34 **** - # We have to use the cross-compiler we just built to compile it. - CC = gcc -b $(host) - - # Need those to compile binaries running on host machine. - # It is configured by - # - # configure --host=target_cpu-target_os \ - # --target=host=target_cpu-target_os --build=host_cpu-host_os - # - # That HOST stuff has to be taken care of very carefully. - HOST_PREFIX=l- - HOST_PREFIX_1=$(HOST_PREFIX) - HOST_CC=$(CC) -b $(build) - HOST_CFLAGS=$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS) $(XCFLAGS) \ - -DGENERATOR_FILE - HOST_CLIB= - HOST_LDFLAGS=$(LDFLAGS) - HOST_CPPFLAGS=$(ALL_CPPFLAGS) - HOST_ALLOCA=$(ALLOCA) - HOST_MALLOC=$(MALLOC) - HOST_OBSTACK=$(OBSTACK) - - # To build the native compiler with the cross compiler, the headers - # for the target are already fixed. And /usr/include is for host, not - # target. - STMP_FIXINC = - STMP_FIXPROTO = - - # Cause installation using install-build. We do nothing here. - #INSTALL_TARGET = install-build - - # Don't try to compile the things we can't compile or we have made - # while making gcc with the cross-compiler. - #ALL = all.build --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/builtin-attrs.def gcc-3.1/gcc/builtin-attrs.def *** gcc-3.0.4/gcc/builtin-attrs.def Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/builtin-attrs.def Fri Dec 21 02:36:34 2001 *************** *** 0 **** --- 1,171 ---- + /* Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Joseph Myers . + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2, or (at your option) any later + version. + + GCC is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to the Free + Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + + /* This header provides a declarative way of describing the attributes + that are applied to some functions by default. + + Before including this header, you must define the following macros. + In each case where there is an ENUM, it is an identifier used to + reference the tree in subsequent definitions. + + DEF_ATTR_NULL_TREE (ENUM) + + Constructs a NULL_TREE. + + DEF_ATTR_INT (ENUM, VALUE) + + Constructs an INTEGER_CST with value VALUE (an integer representable + in HOST_WIDE_INT). + + DEF_ATTR_IDENT (ENUM, STRING) + + Constructs an IDENTIFIER_NODE for STRING. + + DEF_ATTR_TREE_LIST (ENUM, PURPOSE, VALUE, CHAIN) + + Constructs a TREE_LIST with given PURPOSE, VALUE and CHAIN (given + as previous ENUM names). + + DEF_FN_ATTR (NAME, ATTRS, PREDICATE) + + Specifies that the function with name NAME (a previous ENUM for an + IDENTIFIER_NODE) has attributes ATTRS (a previous ENUM) if + PREDICATE is true. */ + + DEF_ATTR_NULL_TREE (ATTR_NULL) + + /* Note that below we must avoid whitespace in arguments of CONCAT*. */ + + /* Construct a tree for a given integer and a list containing it. */ + #define DEF_ATTR_FOR_INT(VALUE) \ + DEF_ATTR_INT (CONCAT2 (ATTR_,VALUE), VALUE) \ + DEF_ATTR_TREE_LIST (CONCAT2 (ATTR_LIST_,VALUE), ATTR_NULL, \ + CONCAT2 (ATTR_,VALUE), ATTR_NULL) + DEF_ATTR_FOR_INT (0) + DEF_ATTR_FOR_INT (1) + DEF_ATTR_FOR_INT (2) + DEF_ATTR_FOR_INT (3) + DEF_ATTR_FOR_INT (4) + #undef DEF_ATTR_FOR_INT + + /* Construct a tree for a list of two integers. */ + #define DEF_LIST_INT_INT(VALUE1, VALUE2) \ + DEF_ATTR_TREE_LIST (CONCAT4 (ATTR_LIST_,VALUE1,_,VALUE2), ATTR_NULL, \ + CONCAT2 (ATTR_,VALUE1), CONCAT2 (ATTR_LIST_,VALUE2)) + DEF_LIST_INT_INT (1,0) + DEF_LIST_INT_INT (1,2) + DEF_LIST_INT_INT (2,0) + DEF_LIST_INT_INT (2,3) + DEF_LIST_INT_INT (3,0) + DEF_LIST_INT_INT (3,4) + #undef DEF_LIST_INT_INT + + DEF_ATTR_IDENT (ATTR_PRINTF, "printf") + DEF_ATTR_IDENT (ATTR_SCANF, "scanf") + DEF_ATTR_IDENT (ATTR_STRFTIME, "strftime") + DEF_ATTR_IDENT (ATTR_STRFMON, "strfmon") + + DEF_ATTR_IDENT (ATTR_FORMAT, "format") + DEF_ATTR_IDENT (ATTR_FORMAT_ARG, "format_arg") + + /* Construct a tree for a format attribute. */ + #define DEF_FORMAT_ATTRIBUTE(TYPE, VALUES) \ + DEF_ATTR_TREE_LIST (CONCAT4 (ATTR_,TYPE,_,VALUES), ATTR_NULL, \ + CONCAT2 (ATTR_,TYPE), CONCAT2 (ATTR_LIST_,VALUES)) \ + DEF_ATTR_TREE_LIST (CONCAT4 (ATTR_FORMAT_,TYPE,_,VALUES), ATTR_FORMAT, \ + CONCAT4 (ATTR_,TYPE,_,VALUES), ATTR_NULL) + DEF_FORMAT_ATTRIBUTE(PRINTF,1_0) + DEF_FORMAT_ATTRIBUTE(PRINTF,1_2) + DEF_FORMAT_ATTRIBUTE(PRINTF,2_0) + DEF_FORMAT_ATTRIBUTE(PRINTF,2_3) + DEF_FORMAT_ATTRIBUTE(PRINTF,3_0) + DEF_FORMAT_ATTRIBUTE(PRINTF,3_4) + DEF_FORMAT_ATTRIBUTE(SCANF,1_0) + DEF_FORMAT_ATTRIBUTE(SCANF,1_2) + DEF_FORMAT_ATTRIBUTE(SCANF,2_0) + DEF_FORMAT_ATTRIBUTE(SCANF,2_3) + DEF_FORMAT_ATTRIBUTE(STRFTIME,3_0) + DEF_FORMAT_ATTRIBUTE(STRFMON,3_4) + #undef DEF_FORMAT_ATTRIBUTE + + DEF_ATTR_TREE_LIST (ATTR_FORMAT_ARG_1, ATTR_FORMAT_ARG, ATTR_LIST_1, ATTR_NULL) + DEF_ATTR_TREE_LIST (ATTR_FORMAT_ARG_2, ATTR_FORMAT_ARG, ATTR_LIST_2, ATTR_NULL) + + /* Define an attribute for a function, along with the IDENTIFIER_NODE. */ + #define DEF_FN_ATTR_IDENT(NAME, ATTRS, PREDICATE) \ + DEF_ATTR_IDENT (CONCAT2(ATTR_,NAME), STRINGX(NAME)) \ + DEF_FN_ATTR (CONCAT2(ATTR_,NAME), ATTRS, PREDICATE) + + /* The ISO C functions are always checked (whether is + included or not), since it is common to call printf without + including . There shouldn't be a problem with this, + since ISO C reserves these function names whether you include the + header file or not. In any case, the checking is harmless. With + -ffreestanding, these default attributes are disabled, and must be + specified manually if desired. */ + + /* __builtin functions should be checked unconditionally, even with + -ffreestanding. */ + DEF_FN_ATTR_IDENT (__builtin_printf, ATTR_FORMAT_PRINTF_1_2, true) + DEF_FN_ATTR_IDENT (__builtin_fprintf, ATTR_FORMAT_PRINTF_2_3, true) + DEF_FN_ATTR_IDENT (__builtin_printf_unlocked, ATTR_FORMAT_PRINTF_1_2, true) + DEF_FN_ATTR_IDENT (__builtin_fprintf_unlocked, ATTR_FORMAT_PRINTF_2_3, true) + + /* Functions from ISO/IEC 9899:1990. */ + #define DEF_C89_ATTR(NAME, ATTRS) DEF_FN_ATTR_IDENT (NAME, ATTRS, flag_hosted) + DEF_C89_ATTR (printf, ATTR_FORMAT_PRINTF_1_2) + DEF_C89_ATTR (fprintf, ATTR_FORMAT_PRINTF_2_3) + DEF_C89_ATTR (sprintf, ATTR_FORMAT_PRINTF_2_3) + DEF_C89_ATTR (scanf, ATTR_FORMAT_SCANF_1_2) + DEF_C89_ATTR (fscanf, ATTR_FORMAT_SCANF_2_3) + DEF_C89_ATTR (sscanf, ATTR_FORMAT_SCANF_2_3) + DEF_C89_ATTR (vprintf, ATTR_FORMAT_PRINTF_1_0) + DEF_C89_ATTR (vfprintf, ATTR_FORMAT_PRINTF_2_0) + DEF_C89_ATTR (vsprintf, ATTR_FORMAT_PRINTF_2_0) + DEF_C89_ATTR (strftime, ATTR_FORMAT_STRFTIME_3_0) + #undef DEF_C89_ATTR + + /* ISO C99 adds the snprintf and vscanf family functions. */ + #define DEF_C99_ATTR(NAME, ATTRS) \ + DEF_FN_ATTR_IDENT (NAME, ATTRS, \ + (flag_hosted \ + && (flag_isoc99 || flag_noniso_default_format_attributes))) + DEF_C99_ATTR (snprintf, ATTR_FORMAT_PRINTF_3_4) + DEF_C99_ATTR (vsnprintf, ATTR_FORMAT_PRINTF_3_0) + DEF_C99_ATTR (vscanf, ATTR_FORMAT_SCANF_1_0) + DEF_C99_ATTR (vfscanf, ATTR_FORMAT_SCANF_2_0) + DEF_C99_ATTR (vsscanf, ATTR_FORMAT_SCANF_2_0) + #undef DEF_C99_ATTR + + /* Functions not in any version of ISO C. */ + #define DEF_EXT_ATTR(NAME, ATTRS) \ + DEF_FN_ATTR_IDENT (NAME, ATTRS, \ + flag_hosted && flag_noniso_default_format_attributes) + /* Uniforum/GNU gettext functions. */ + DEF_EXT_ATTR (gettext, ATTR_FORMAT_ARG_1) + DEF_EXT_ATTR (dgettext, ATTR_FORMAT_ARG_2) + DEF_EXT_ATTR (dcgettext, ATTR_FORMAT_ARG_2) + /* X/Open strfmon function. */ + DEF_EXT_ATTR (strfmon, ATTR_FORMAT_STRFMON_3_4) + /* Glibc thread-unsafe stdio functions. */ + DEF_EXT_ATTR (printf_unlocked, ATTR_FORMAT_PRINTF_1_2) + DEF_EXT_ATTR (fprintf_unlocked, ATTR_FORMAT_PRINTF_2_3) + #undef DEF_EXT_ATTR + #undef DEF_FN_ATTR_IDENT diff -Nrc3pad gcc-3.0.4/gcc/builtin-types.def gcc-3.1/gcc/builtin-types.def *** gcc-3.0.4/gcc/builtin-types.def Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/builtin-types.def Mon Jan 28 20:07:00 2002 *************** *** 0 **** --- 1,180 ---- + /* Copyright (C) 2001 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2, or (at your option) any later + version. + + GCC is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to the Free + Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + + /* This header provides a declaritive way of describing the types that + are used when declaring builtin functions. + + Before including this header, you must define the following macros: + + DEF_PRIMITIVE_TYPE (ENUM, TYPE) + + The ENUM is an identifier indicating which type is being defined. + TYPE is an expression for a `tree' that represents the type. + + DEF_FUNCTION_TYPE_0 (ENUM, RETURN) + DEF_FUNCTION_TYPE_1 (ENUM, RETURN, ARG1) + DEF_FUNCTION_TYPE_2 (ENUM, RETURN, ARG1, ARG2) + DEF_FUNCTION_TYPE_3 (ENUM, RETURN, ARG1, ARG2, ARG3) + DEF_FUNCTION_TYPE_4 (ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) + + These macros describe function types. ENUM is as above. The + RETURN type is one of the enumerals already defined. ARG1, ARG2, + and ARG3 give the types of the arguments, similarly. + + DEF_FUNCTION_TYPE_VAR_0 (ENUM, RETURN) + DEF_FUNCTION_TYPE_VAR_1 (ENUM, RETURN, ARG1) + DEF_FUNCTION_TYPE_VAR_2 (ENUM, RETURN, ARG1, ARG2) + + Similar, but for function types that take variable arguments. + For example: + + DEF_FUNCTION_TYPE_1 (BT_INT_DOUBLE, BT_INT, BT_DOUBLE) + + describes the type `int ()(double)', using the enumeral + BT_INT_DOUBLE, whereas: + + DEF_FUNCTION_TYPE_VAR_1 (BT_INT_DOUBLE_VAR, BT_INT, BT_DOUBLE) + + describes the type `int ()(double, ...)'. + + DEF_POINTER_TYPE (ENUM, TYPE) + + This macro describes a pointer type. ENUM is as above; TYPE is + the type pointed to. */ + + DEF_PRIMITIVE_TYPE (BT_VOID, void_type_node) + DEF_PRIMITIVE_TYPE (BT_INT, integer_type_node) + DEF_PRIMITIVE_TYPE (BT_UNSIGNED, unsigned_type_node) + DEF_PRIMITIVE_TYPE (BT_LONG, long_integer_type_node) + DEF_PRIMITIVE_TYPE (BT_LONGLONG, long_long_integer_type_node) + DEF_PRIMITIVE_TYPE (BT_FLOAT, float_type_node) + DEF_PRIMITIVE_TYPE (BT_INTMAX, intmax_type_node) + DEF_PRIMITIVE_TYPE (BT_DOUBLE, double_type_node) + DEF_PRIMITIVE_TYPE (BT_LONG_DOUBLE, long_double_type_node) + DEF_PRIMITIVE_TYPE (BT_COMPLEX_FLOAT, complex_float_type_node) + DEF_PRIMITIVE_TYPE (BT_COMPLEX_DOUBLE, complex_double_type_node) + DEF_PRIMITIVE_TYPE (BT_COMPLEX_LONG_DOUBLE, complex_long_double_type_node) + + DEF_PRIMITIVE_TYPE (BT_PTR, ptr_type_node) + DEF_PRIMITIVE_TYPE (BT_CONST_PTR, const_ptr_type_node) + DEF_PRIMITIVE_TYPE (BT_TRAD_PTR, traditional_ptr_type_node) + DEF_PRIMITIVE_TYPE (BT_TRAD_CONST_PTR, traditional_cptr_type_node) + DEF_PRIMITIVE_TYPE (BT_PTRMODE, type_for_mode (ptr_mode, 0)) + DEF_PRIMITIVE_TYPE (BT_SIZE, c_size_type_node) + DEF_PRIMITIVE_TYPE (BT_STRING, string_type_node) + DEF_PRIMITIVE_TYPE (BT_CONST_STRING, const_string_type_node) + DEF_PRIMITIVE_TYPE (BT_LEN, traditional_len_type_node) + + DEF_PRIMITIVE_TYPE (BT_VALIST_REF, va_list_ref_type_node) + DEF_PRIMITIVE_TYPE (BT_VALIST_ARG, va_list_arg_type_node) + + DEF_FUNCTION_TYPE_0 (BT_FN_VOID, BT_VOID) + DEF_FUNCTION_TYPE_0 (BT_FN_PTR, BT_PTR) + DEF_FUNCTION_TYPE_0 (BT_FN_UNSIGNED, BT_UNSIGNED) + + DEF_FUNCTION_TYPE_1 (BT_FN_LONG_LONG, BT_LONG, BT_LONG) + DEF_FUNCTION_TYPE_1 (BT_FN_LONGLONG_LONGLONG, BT_LONGLONG, BT_LONGLONG) + DEF_FUNCTION_TYPE_1 (BT_FN_INTMAX_INTMAX, BT_INTMAX, BT_INTMAX) + DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT_FLOAT, BT_FLOAT, BT_FLOAT) + DEF_FUNCTION_TYPE_1 (BT_FN_DOUBLE_DOUBLE, BT_DOUBLE, BT_DOUBLE) + DEF_FUNCTION_TYPE_1 (BT_FN_LONG_DOUBLE_LONG_DOUBLE, + BT_LONG_DOUBLE, BT_LONG_DOUBLE) + DEF_FUNCTION_TYPE_1 (BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, + BT_COMPLEX_FLOAT, BT_COMPLEX_FLOAT) + DEF_FUNCTION_TYPE_1 (BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, + BT_COMPLEX_DOUBLE, BT_COMPLEX_DOUBLE) + DEF_FUNCTION_TYPE_1 (BT_FN_COMPLEX_LONG_DOUBLE_COMPLEX_LONG_DOUBLE, + BT_COMPLEX_LONG_DOUBLE, BT_COMPLEX_LONG_DOUBLE) + DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT_COMPLEX_FLOAT, + BT_FLOAT, BT_COMPLEX_FLOAT) + DEF_FUNCTION_TYPE_1 (BT_FN_DOUBLE_COMPLEX_DOUBLE, + BT_DOUBLE, BT_COMPLEX_DOUBLE) + DEF_FUNCTION_TYPE_1 (BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE, + BT_LONG_DOUBLE, BT_COMPLEX_LONG_DOUBLE) + DEF_FUNCTION_TYPE_1 (BT_FN_PTR_UNSIGNED, BT_PTR, BT_UNSIGNED) + DEF_FUNCTION_TYPE_1 (BT_FN_PTR_SIZE, BT_PTR, BT_SIZE) + DEF_FUNCTION_TYPE_1 (BT_FN_INT_INT, BT_INT, BT_INT) + DEF_FUNCTION_TYPE_1 (BT_FN_INT_PTR, BT_INT, BT_PTR) + DEF_FUNCTION_TYPE_1 (BT_FN_VOID_PTR, BT_VOID, BT_PTR) + DEF_FUNCTION_TYPE_1 (BT_FN_LEN_CONST_STRING, BT_LEN, BT_CONST_STRING) + DEF_FUNCTION_TYPE_1 (BT_FN_INT_CONST_STRING, BT_INT, BT_CONST_STRING) + DEF_FUNCTION_TYPE_1 (BT_FN_PTR_PTR, BT_PTR, BT_PTR) + DEF_FUNCTION_TYPE_1 (BT_FN_VOID_VALIST_REF, BT_VOID, BT_VALIST_REF) + DEF_FUNCTION_TYPE_1 (BT_FN_VOID_INT, BT_VOID, BT_INT) + + DEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTR_INT, BT_VOID, BT_PTR, BT_INT) + DEF_FUNCTION_TYPE_2 (BT_FN_STRING_STRING_CONST_STRING, + BT_STRING, BT_STRING, BT_CONST_STRING) + DEF_FUNCTION_TYPE_2 (BT_FN_INT_CONST_STRING_CONST_STRING, + BT_INT, BT_CONST_STRING, BT_CONST_STRING) + DEF_FUNCTION_TYPE_2 (BT_FN_STRING_CONST_STRING_CONST_STRING, + BT_STRING, BT_CONST_STRING, BT_CONST_STRING) + DEF_FUNCTION_TYPE_2 (BT_FN_SIZE_CONST_STRING_CONST_STRING, + BT_SIZE, BT_CONST_STRING, BT_CONST_STRING) + DEF_FUNCTION_TYPE_2 (BT_FN_STRING_CONST_STRING_INT, + BT_STRING, BT_CONST_STRING, BT_INT) + DEF_FUNCTION_TYPE_2 (BT_FN_INT_CONST_STRING_PTR, + BT_INT, BT_CONST_STRING, BT_PTR) + DEF_FUNCTION_TYPE_2 (BT_FN_INT_INT_PTR, + BT_INT, BT_INT, BT_PTR) + DEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTRMODE_PTR, + BT_VOID, BT_PTRMODE, BT_PTR) + DEF_FUNCTION_TYPE_2 (BT_FN_VOID_VALIST_REF_VALIST_ARG, + BT_VOID, BT_VALIST_REF, BT_VALIST_ARG) + DEF_FUNCTION_TYPE_2 (BT_FN_LONG_LONG_LONG, + BT_LONG, BT_LONG, BT_LONG) + DEF_FUNCTION_TYPE_2 (BT_FN_INT_PTR_CONST_STRING, + BT_INT, BT_PTR, BT_CONST_STRING) + DEF_FUNCTION_TYPE_2 (BT_FN_VOID_TRAD_PTR_LEN, + BT_VOID, BT_TRAD_PTR, BT_LEN) + + DEF_FUNCTION_TYPE_3 (BT_FN_STRING_STRING_CONST_STRING_SIZE, + BT_STRING, BT_STRING, BT_CONST_STRING, BT_SIZE) + DEF_FUNCTION_TYPE_3 (BT_FN_INT_CONST_STRING_CONST_STRING_SIZE, + BT_INT, BT_CONST_STRING, BT_CONST_STRING, BT_SIZE) + DEF_FUNCTION_TYPE_3 (BT_FN_TRAD_PTR_PTR_CONST_PTR_SIZE, + BT_TRAD_PTR, BT_PTR, BT_CONST_PTR, BT_SIZE) + DEF_FUNCTION_TYPE_3 (BT_FN_INT_CONST_PTR_CONST_PTR_SIZE, + BT_INT, BT_CONST_PTR, BT_CONST_PTR, BT_SIZE) + DEF_FUNCTION_TYPE_3 (BT_FN_TRAD_PTR_PTR_INT_SIZE, + BT_TRAD_PTR, BT_PTR, BT_INT, BT_SIZE) + DEF_FUNCTION_TYPE_3 (BT_FN_INT_TRAD_CONST_PTR_TRAD_CONST_PTR_LEN, + BT_INT, BT_TRAD_CONST_PTR, BT_TRAD_CONST_PTR, BT_LEN) + DEF_FUNCTION_TYPE_3 (BT_FN_VOID_PTR_INT_INT, BT_VOID, BT_PTR, BT_INT, BT_INT) + + DEF_FUNCTION_TYPE_4 (BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR, + BT_SIZE, BT_CONST_PTR, BT_SIZE, BT_SIZE, BT_PTR) + + DEF_FUNCTION_TYPE_VAR_0 (BT_FN_VOID_VAR, BT_VOID) + DEF_FUNCTION_TYPE_VAR_0 (BT_FN_INT_VAR, BT_INT) + DEF_FUNCTION_TYPE_VAR_0 (BT_FN_PTR_VAR, BT_PTR) + + DEF_FUNCTION_TYPE_VAR_1 (BT_FN_VOID_VALIST_REF_VAR, + BT_VOID, BT_VALIST_REF) + DEF_FUNCTION_TYPE_VAR_1 (BT_FN_VOID_CONST_PTR_VAR, + BT_VOID, BT_CONST_PTR) + DEF_FUNCTION_TYPE_VAR_1 (BT_FN_INT_CONST_STRING_VAR, + BT_INT, BT_CONST_STRING) + + DEF_FUNCTION_TYPE_VAR_2 (BT_FN_INT_PTR_CONST_STRING_VAR, + BT_INT, BT_PTR, BT_CONST_STRING) + + DEF_POINTER_TYPE (BT_PTR_FN_VOID_VAR, BT_FN_VOID_VAR) + DEF_FUNCTION_TYPE_3 (BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE, + BT_PTR, BT_PTR_FN_VOID_VAR, BT_PTR, BT_SIZE) diff -Nrc3pad gcc-3.0.4/gcc/builtins.c gcc-3.1/gcc/builtins.c *** gcc-3.0.4/gcc/builtins.c Sat Aug 4 00:24:13 2001 --- gcc-3.1/gcc/builtins.c Sun Mar 31 09:42:05 2002 *************** *** 1,23 **** /* Expand builtin functions. Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" #include "system.h" --- 1,23 ---- /* Expand builtin functions. Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" #include "system.h" *************** Boston, MA 02111-1307, USA. */ *** 32,42 **** --- 32,46 ---- #include "function.h" #include "insn-config.h" #include "expr.h" + #include "optabs.h" + #include "libfuncs.h" #include "recog.h" #include "output.h" #include "typeclass.h" #include "toplev.h" + #include "predict.h" #include "tm_p.h" + #include "target.h" #define CALLED_AS_BUILT_IN(NODE) \ (!strncmp (IDENTIFIER_POINTER (DECL_NAME (NODE)), "__builtin_", 10)) *************** Boston, MA 02111-1307, USA. */ *** 57,63 **** const char *const built_in_class_names[4] = {"NOT_BUILT_IN", "BUILT_IN_FRONTEND", "BUILT_IN_MD", "BUILT_IN_NORMAL"}; ! #define DEF_BUILTIN(x) STRINGIFY(x), const char *const built_in_names[(int) END_BUILTINS] = { #include "builtins.def" --- 61,67 ---- const char *const built_in_class_names[4] = {"NOT_BUILT_IN", "BUILT_IN_FRONTEND", "BUILT_IN_MD", "BUILT_IN_NORMAL"}; ! #define DEF_BUILTIN(X, N, C, T, LT, B, F, NA) STRINGX(X), const char *const built_in_names[(int) END_BUILTINS] = { #include "builtins.def" *************** const char *const built_in_names[(int) E *** 66,86 **** /* Setup an array of _DECL trees, make sure each element is initialized to NULL_TREE. */ ! #define DEF_BUILTIN(x) NULL_TREE, ! tree built_in_decls[(int) END_BUILTINS] = ! { ! #include "builtins.def" ! }; ! #undef DEF_BUILTIN tree (*lang_type_promotes_to) PARAMS ((tree)); ! static int get_pointer_alignment PARAMS ((tree, unsigned)); static tree c_strlen PARAMS ((tree)); static const char *c_getstr PARAMS ((tree)); static rtx c_readstr PARAMS ((const char *, enum machine_mode)); ! static int target_char_cast PARAMS ((tree, char *)); static rtx get_memory_rtx PARAMS ((tree)); static int apply_args_size PARAMS ((void)); static int apply_result_size PARAMS ((void)); --- 70,85 ---- /* Setup an array of _DECL trees, make sure each element is initialized to NULL_TREE. */ ! tree built_in_decls[(int) END_BUILTINS]; tree (*lang_type_promotes_to) PARAMS ((tree)); ! static int get_pointer_alignment PARAMS ((tree, unsigned int)); static tree c_strlen PARAMS ((tree)); static const char *c_getstr PARAMS ((tree)); static rtx c_readstr PARAMS ((const char *, enum machine_mode)); ! static int target_char_cast PARAMS ((tree, char *)); static rtx get_memory_rtx PARAMS ((tree)); static int apply_args_size PARAMS ((void)); static int apply_result_size PARAMS ((void)); *************** static int apply_result_size PARAMS ((v *** 88,97 **** --- 87,98 ---- static rtx result_vector PARAMS ((int, rtx)); #endif static rtx expand_builtin_setjmp PARAMS ((tree, rtx)); + static void expand_builtin_prefetch PARAMS ((tree)); static rtx expand_builtin_apply_args PARAMS ((void)); static rtx expand_builtin_apply_args_1 PARAMS ((void)); static rtx expand_builtin_apply PARAMS ((rtx, rtx, rtx)); static void expand_builtin_return PARAMS ((rtx)); + static enum type_class type_to_class PARAMS ((tree)); static rtx expand_builtin_classify_type PARAMS ((tree)); static rtx expand_builtin_mathfn PARAMS ((tree, rtx, rtx)); static rtx expand_builtin_constant_p PARAMS ((tree)); *************** static rtx expand_builtin_next_arg PARAM *** 100,108 **** static rtx expand_builtin_va_start PARAMS ((int, tree)); static rtx expand_builtin_va_end PARAMS ((tree)); static rtx expand_builtin_va_copy PARAMS ((tree)); ! #ifdef HAVE_cmpstrsi ! static rtx expand_builtin_memcmp PARAMS ((tree, tree, rtx)); ! #endif static rtx expand_builtin_strcmp PARAMS ((tree, rtx, enum machine_mode)); static rtx expand_builtin_strncmp PARAMS ((tree, rtx, --- 101,108 ---- static rtx expand_builtin_va_start PARAMS ((int, tree)); static rtx expand_builtin_va_end PARAMS ((tree)); static rtx expand_builtin_va_copy PARAMS ((tree)); ! static rtx expand_builtin_memcmp PARAMS ((tree, tree, rtx, ! enum machine_mode)); static rtx expand_builtin_strcmp PARAMS ((tree, rtx, enum machine_mode)); static rtx expand_builtin_strncmp PARAMS ((tree, rtx, *************** static rtx expand_builtin_strspn PARAMS *** 117,131 **** enum machine_mode)); static rtx expand_builtin_strcspn PARAMS ((tree, rtx, enum machine_mode)); ! static rtx expand_builtin_memcpy PARAMS ((tree)); ! static rtx expand_builtin_strcpy PARAMS ((tree)); static rtx builtin_strncpy_read_str PARAMS ((PTR, HOST_WIDE_INT, enum machine_mode)); static rtx expand_builtin_strncpy PARAMS ((tree, rtx, enum machine_mode)); static rtx builtin_memset_read_str PARAMS ((PTR, HOST_WIDE_INT, enum machine_mode)); ! static rtx expand_builtin_memset PARAMS ((tree)); static rtx expand_builtin_bzero PARAMS ((tree)); static rtx expand_builtin_strlen PARAMS ((tree, rtx)); static rtx expand_builtin_strstr PARAMS ((tree, rtx, --- 117,134 ---- enum machine_mode)); static rtx expand_builtin_strcspn PARAMS ((tree, rtx, enum machine_mode)); ! static rtx expand_builtin_memcpy PARAMS ((tree, rtx, ! enum machine_mode)); ! static rtx expand_builtin_strcpy PARAMS ((tree, rtx, ! enum machine_mode)); static rtx builtin_strncpy_read_str PARAMS ((PTR, HOST_WIDE_INT, enum machine_mode)); static rtx expand_builtin_strncpy PARAMS ((tree, rtx, enum machine_mode)); static rtx builtin_memset_read_str PARAMS ((PTR, HOST_WIDE_INT, enum machine_mode)); ! static rtx expand_builtin_memset PARAMS ((tree, rtx, ! enum machine_mode)); static rtx expand_builtin_bzero PARAMS ((tree)); static rtx expand_builtin_strlen PARAMS ((tree, rtx)); static rtx expand_builtin_strstr PARAMS ((tree, rtx, *************** static rtx expand_builtin_strrchr PARAMS *** 139,155 **** static rtx expand_builtin_alloca PARAMS ((tree, rtx)); static rtx expand_builtin_ffs PARAMS ((tree, rtx, rtx)); static rtx expand_builtin_frame_address PARAMS ((tree)); ! static rtx expand_builtin_fputs PARAMS ((tree, int)); static tree stabilize_va_list PARAMS ((tree, int)); static rtx expand_builtin_expect PARAMS ((tree, rtx)); static tree fold_builtin_constant_p PARAMS ((tree)); static tree build_function_call_expr PARAMS ((tree, tree)); static int validate_arglist PARAMS ((tree, ...)); /* Return the alignment in bits of EXP, a pointer valued expression. But don't return more than MAX_ALIGN no matter what. The alignment returned is, by default, the alignment of the thing that ! EXP points to (if it is not a POINTER_TYPE, 0 is returned). Otherwise, look at the expression to see if we can do better, i.e., if the expression is actually pointing at an object whose alignment is tighter. */ --- 142,159 ---- static rtx expand_builtin_alloca PARAMS ((tree, rtx)); static rtx expand_builtin_ffs PARAMS ((tree, rtx, rtx)); static rtx expand_builtin_frame_address PARAMS ((tree)); ! static rtx expand_builtin_fputs PARAMS ((tree, int, int)); static tree stabilize_va_list PARAMS ((tree, int)); static rtx expand_builtin_expect PARAMS ((tree, rtx)); static tree fold_builtin_constant_p PARAMS ((tree)); + static tree fold_builtin_classify_type PARAMS ((tree)); static tree build_function_call_expr PARAMS ((tree, tree)); static int validate_arglist PARAMS ((tree, ...)); /* Return the alignment in bits of EXP, a pointer valued expression. But don't return more than MAX_ALIGN no matter what. The alignment returned is, by default, the alignment of the thing that ! EXP points to. If it is not a POINTER_TYPE, 0 is returned. Otherwise, look at the expression to see if we can do better, i.e., if the expression is actually pointing at an object whose alignment is tighter. */ *************** static int validate_arglist PARAMS ((tr *** 157,165 **** static int get_pointer_alignment (exp, max_align) tree exp; ! unsigned max_align; { ! unsigned align, inner; if (TREE_CODE (TREE_TYPE (exp)) != POINTER_TYPE) return 0; --- 161,169 ---- static int get_pointer_alignment (exp, max_align) tree exp; ! unsigned int max_align; { ! unsigned int align, inner; if (TREE_CODE (TREE_TYPE (exp)) != POINTER_TYPE) return 0; *************** get_pointer_alignment (exp, max_align) *** 189,196 **** if (! host_integerp (TREE_OPERAND (exp, 1), 1)) return align; ! while (((tree_low_cst (TREE_OPERAND (exp, 1), 1) * BITS_PER_UNIT) ! & (max_align - 1)) != 0) max_align >>= 1; --- 193,200 ---- if (! host_integerp (TREE_OPERAND (exp, 1), 1)) return align; ! while (((tree_low_cst (TREE_OPERAND (exp, 1), 1)) ! & (max_align / BITS_PER_UNIT - 1)) != 0) max_align >>= 1; *************** c_strlen (src) *** 230,236 **** tree src; { tree offset_node; ! int offset, max; const char *ptr; src = string_constant (src, &offset_node); --- 234,241 ---- tree src; { tree offset_node; ! HOST_WIDE_INT offset; ! int max; const char *ptr; src = string_constant (src, &offset_node); *************** c_strlen (src) *** 262,277 **** } /* We have a known offset into the string. Start searching there for ! a null character. */ if (offset_node == 0) offset = 0; else ! { ! /* Did we get a long long offset? If so, punt. */ ! if (TREE_INT_CST_HIGH (offset_node) != 0) ! return 0; ! offset = TREE_INT_CST_LOW (offset_node); ! } /* If the offset is known to be out of bounds, warn, and call strlen at runtime. */ --- 267,279 ---- } /* We have a known offset into the string. Start searching there for ! a null character if we can represent it as a single HOST_WIDE_INT. */ if (offset_node == 0) offset = 0; + else if (! host_integerp (offset_node, 0)) + offset = -1; else ! offset = tree_low_cst (offset_node, 0); /* If the offset is known to be out of bounds, warn, and call strlen at runtime. */ *************** c_getstr (src) *** 298,333 **** tree src; { tree offset_node; - int offset, max; - const char *ptr; src = string_constant (src, &offset_node); if (src == 0) return 0; ! max = TREE_STRING_LENGTH (src) - 1; ! ptr = TREE_STRING_POINTER (src); ! ! if (!offset_node) ! offset = 0; ! else if (TREE_CODE (offset_node) != INTEGER_CST) return 0; - else - { - /* Did we get a long long offset? If so, punt. */ - if (TREE_INT_CST_HIGH (offset_node) != 0) - return 0; - offset = TREE_INT_CST_LOW (offset_node); - if (offset < 0 || offset > max) - return 0; - } ! return ptr + offset; } ! /* Return a CONST_INT or CONST_DOUBLE corresponding to target ! reading GET_MODE_BITSIZE (MODE) bits from string constant ! STR. */ static rtx c_readstr (str, mode) --- 300,321 ---- tree src; { tree offset_node; src = string_constant (src, &offset_node); if (src == 0) return 0; ! if (offset_node == 0) ! return TREE_STRING_POINTER (src); ! else if (!host_integerp (offset_node, 1) ! || compare_tree_int (offset_node, TREE_STRING_LENGTH (src) - 1) > 0) return 0; ! return TREE_STRING_POINTER (src) + tree_low_cst (offset_node, 1); } ! /* Return a CONST_INT or CONST_DOUBLE corresponding to target reading ! GET_MODE_BITSIZE (MODE) bits from string constant STR. */ static rtx c_readstr (str, mode) *************** target_char_cast (cst, p) *** 372,382 **** { unsigned HOST_WIDE_INT val, hostval; ! if (TREE_CODE (cst) != INTEGER_CST || CHAR_TYPE_SIZE > HOST_BITS_PER_WIDE_INT) return 1; ! val = TREE_INT_CST_LOW (cst); if (CHAR_TYPE_SIZE < HOST_BITS_PER_WIDE_INT) val &= (((unsigned HOST_WIDE_INT) 1) << CHAR_TYPE_SIZE) - 1; --- 360,370 ---- { unsigned HOST_WIDE_INT val, hostval; ! if (!host_integerp (cst, 1) || CHAR_TYPE_SIZE > HOST_BITS_PER_WIDE_INT) return 1; ! val = tree_low_cst (cst, 1); if (CHAR_TYPE_SIZE < HOST_BITS_PER_WIDE_INT) val &= (((unsigned HOST_WIDE_INT) 1) << CHAR_TYPE_SIZE) - 1; *************** expand_builtin_return_addr (fndecl_code, *** 430,436 **** #endif tem = memory_address (Pmode, tem); tem = gen_rtx_MEM (Pmode, tem); ! MEM_ALIAS_SET (tem) = get_frame_alias_set (); tem = copy_to_reg (tem); } --- 418,424 ---- #endif tem = memory_address (Pmode, tem); tem = gen_rtx_MEM (Pmode, tem); ! set_mem_alias_set (tem, get_frame_alias_set ()); tem = copy_to_reg (tem); } *************** expand_builtin_return_addr (fndecl_code, *** 446,452 **** tem = memory_address (Pmode, plus_constant (tem, GET_MODE_SIZE (Pmode))); tem = gen_rtx_MEM (Pmode, tem); ! MEM_ALIAS_SET (tem) = get_frame_alias_set (); #endif return tem; } --- 434,440 ---- tem = memory_address (Pmode, plus_constant (tem, GET_MODE_SIZE (Pmode))); tem = gen_rtx_MEM (Pmode, tem); ! set_mem_alias_set (tem, get_frame_alias_set ()); #endif return tem; } *************** expand_builtin_setjmp_setup (buf_addr, r *** 471,477 **** setjmp_alias_set = new_alias_set (); #ifdef POINTERS_EXTEND_UNSIGNED ! buf_addr = convert_memory_address (Pmode, buf_addr); #endif buf_addr = force_reg (Pmode, force_operand (buf_addr, NULL_RTX)); --- 459,466 ---- setjmp_alias_set = new_alias_set (); #ifdef POINTERS_EXTEND_UNSIGNED ! if (GET_MODE (buf_addr) != Pmode) ! buf_addr = convert_memory_address (Pmode, buf_addr); #endif buf_addr = force_reg (Pmode, force_operand (buf_addr, NULL_RTX)); *************** expand_builtin_setjmp_setup (buf_addr, r *** 487,497 **** #endif mem = gen_rtx_MEM (Pmode, buf_addr); ! MEM_ALIAS_SET (mem) = setjmp_alias_set; emit_move_insn (mem, BUILTIN_SETJMP_FRAME_VALUE); mem = gen_rtx_MEM (Pmode, plus_constant (buf_addr, GET_MODE_SIZE (Pmode))), ! MEM_ALIAS_SET (mem) = setjmp_alias_set; emit_move_insn (validize_mem (mem), force_reg (Pmode, gen_rtx_LABEL_REF (Pmode, receiver_label))); --- 476,486 ---- #endif mem = gen_rtx_MEM (Pmode, buf_addr); ! set_mem_alias_set (mem, setjmp_alias_set); emit_move_insn (mem, BUILTIN_SETJMP_FRAME_VALUE); mem = gen_rtx_MEM (Pmode, plus_constant (buf_addr, GET_MODE_SIZE (Pmode))), ! set_mem_alias_set (mem, setjmp_alias_set); emit_move_insn (validize_mem (mem), force_reg (Pmode, gen_rtx_LABEL_REF (Pmode, receiver_label))); *************** expand_builtin_setjmp_setup (buf_addr, r *** 499,505 **** stack_save = gen_rtx_MEM (sa_mode, plus_constant (buf_addr, 2 * GET_MODE_SIZE (Pmode))); ! MEM_ALIAS_SET (stack_save) = setjmp_alias_set; emit_stack_save (SAVE_NONLOCAL, &stack_save, NULL_RTX); /* If there is further processing to do, do it. */ --- 488,494 ---- stack_save = gen_rtx_MEM (sa_mode, plus_constant (buf_addr, 2 * GET_MODE_SIZE (Pmode))); ! set_mem_alias_set (stack_save, setjmp_alias_set); emit_stack_save (SAVE_NONLOCAL, &stack_save, NULL_RTX); /* If there is further processing to do, do it. */ *************** expand_builtin_setjmp_setup (buf_addr, r *** 513,519 **** current_function_calls_setjmp = 1; /* Set this so all the registers get saved in our frame; we need to be ! able to copy the saved values for any registers from frames we unwind. */ current_function_has_nonlocal_label = 1; } --- 502,508 ---- current_function_calls_setjmp = 1; /* Set this so all the registers get saved in our frame; we need to be ! able to copy the saved values for any registers from frames we unwind. */ current_function_has_nonlocal_label = 1; } *************** expand_builtin_setjmp_receiver (receiver *** 545,551 **** { #ifdef ELIMINABLE_REGS size_t i; ! static struct elims {int from, to;} elim_regs[] = ELIMINABLE_REGS; for (i = 0; i < ARRAY_SIZE (elim_regs); i++) if (elim_regs[i].from == ARG_POINTER_REGNUM --- 534,540 ---- { #ifdef ELIMINABLE_REGS size_t i; ! static const struct elims {const int from, to;} elim_regs[] = ELIMINABLE_REGS; for (i = 0; i < ARRAY_SIZE (elim_regs); i++) if (elim_regs[i].from == ARG_POINTER_REGNUM *************** expand_builtin_setjmp_receiver (receiver *** 556,569 **** #endif { /* Now restore our arg pointer from the address at which it ! was saved in our stack frame. ! If there hasn't be space allocated for it yet, make ! some now. */ ! if (arg_pointer_save_area == 0) ! arg_pointer_save_area ! = assign_stack_local (Pmode, GET_MODE_SIZE (Pmode), 0); emit_move_insn (virtual_incoming_args_rtx, ! copy_to_reg (arg_pointer_save_area)); } } #endif --- 545,553 ---- #endif { /* Now restore our arg pointer from the address at which it ! was saved in our stack frame. */ emit_move_insn (virtual_incoming_args_rtx, ! copy_to_reg (get_arg_pointer_save_area (cfun))); } } #endif *************** expand_builtin_longjmp (buf_addr, value) *** 662,669 **** setjmp_alias_set = new_alias_set (); #ifdef POINTERS_EXTEND_UNSIGNED ! buf_addr = convert_memory_address (Pmode, buf_addr); #endif buf_addr = force_reg (Pmode, buf_addr); /* We used to store value in static_chain_rtx, but that fails if pointers --- 646,655 ---- setjmp_alias_set = new_alias_set (); #ifdef POINTERS_EXTEND_UNSIGNED ! if (GET_MODE (buf_addr) != Pmode) ! buf_addr = convert_memory_address (Pmode, buf_addr); #endif + buf_addr = force_reg (Pmode, buf_addr); /* We used to store value in static_chain_rtx, but that fails if pointers *************** expand_builtin_longjmp (buf_addr, value) *** 688,695 **** stack = gen_rtx_MEM (sa_mode, plus_constant (buf_addr, 2 * GET_MODE_SIZE (Pmode))); ! MEM_ALIAS_SET (fp) = MEM_ALIAS_SET (lab) = MEM_ALIAS_SET (stack) ! = setjmp_alias_set; /* Pick up FP, label, and SP from the block and jump. This code is from expand_goto in stmt.c; see there for detailed comments. */ --- 674,682 ---- stack = gen_rtx_MEM (sa_mode, plus_constant (buf_addr, 2 * GET_MODE_SIZE (Pmode))); ! set_mem_alias_set (fp, setjmp_alias_set); ! set_mem_alias_set (lab, setjmp_alias_set); ! set_mem_alias_set (stack, setjmp_alias_set); /* Pick up FP, label, and SP from the block and jump. This code is from expand_goto in stmt.c; see there for detailed comments. */ *************** expand_builtin_longjmp (buf_addr, value) *** 731,736 **** --- 718,804 ---- } } + /* Expand a call to __builtin_prefetch. For a target that does not support + data prefetch, evaluate the memory address argument in case it has side + effects. */ + + static void + expand_builtin_prefetch (arglist) + tree arglist; + { + tree arg0, arg1, arg2; + rtx op0, op1, op2; + + if (!validate_arglist (arglist, POINTER_TYPE, 0)) + return; + + arg0 = TREE_VALUE (arglist); + /* Arguments 1 and 2 are optional; argument 1 (read/write) defaults to + zero (read) and argument 2 (locality) defaults to 3 (high degree of + locality). */ + if (TREE_CHAIN (arglist)) + { + arg1 = TREE_VALUE (TREE_CHAIN (arglist)); + if (TREE_CHAIN (TREE_CHAIN (arglist))) + arg2 = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist))); + else + arg2 = build_int_2 (3, 0); + } + else + { + arg1 = integer_zero_node; + arg2 = build_int_2 (3, 0); + } + + /* Argument 0 is an address. */ + op0 = expand_expr (arg0, NULL_RTX, Pmode, EXPAND_NORMAL); + + /* Argument 1 (read/write flag) must be a compile-time constant int. */ + if (TREE_CODE (arg1) != INTEGER_CST) + { + error ("second arg to `__builtin_prefetch' must be a constant"); + arg1 = integer_zero_node; + } + op1 = expand_expr (arg1, NULL_RTX, VOIDmode, 0); + /* Argument 1 must be either zero or one. */ + if (INTVAL (op1) != 0 && INTVAL (op1) != 1) + { + warning ("invalid second arg to __builtin_prefetch; using zero"); + op1 = const0_rtx; + } + + /* Argument 2 (locality) must be a compile-time constant int. */ + if (TREE_CODE (arg2) != INTEGER_CST) + { + error ("third arg to `__builtin_prefetch' must be a constant"); + arg2 = integer_zero_node; + } + op2 = expand_expr (arg2, NULL_RTX, VOIDmode, 0); + /* Argument 2 must be 0, 1, 2, or 3. */ + if (INTVAL (op2) < 0 || INTVAL (op2) > 3) + { + warning ("invalid third arg to __builtin_prefetch; using zero"); + op2 = const0_rtx; + } + + #ifdef HAVE_prefetch + if (HAVE_prefetch) + { + if (! (*insn_data[(int)CODE_FOR_prefetch].operand[0].predicate) + (op0, + insn_data[(int)CODE_FOR_prefetch].operand[0].mode)) + op0 = force_reg (Pmode, op0); + emit_insn (gen_prefetch (op0, op1, op2)); + } + else + #endif + op0 = protect_from_queue (op0, 0); + /* Don't do anything with direct references to volatile memory, but + generate code to handle other side effects. */ + if (GET_CODE (op0) != MEM && side_effects_p (op0)) + emit_insn (op0); + } + /* Get a MEM rtx for expression EXP which is the address of an operand to be used to be used in a string instruction (cmpstrsi, movstrsi, ..). */ *************** static rtx *** 738,747 **** get_memory_rtx (exp) tree exp; { ! rtx mem = gen_rtx_MEM (BLKmode, ! memory_address (BLKmode, ! expand_expr (exp, NULL_RTX, ! ptr_mode, EXPAND_SUM))); /* Get an expression we can use to find the attributes to assign to MEM. If it is an ADDR_EXPR, use the operand. Otherwise, dereference it if --- 806,820 ---- get_memory_rtx (exp) tree exp; { ! rtx addr = expand_expr (exp, NULL_RTX, ptr_mode, EXPAND_SUM); ! rtx mem; ! ! #ifdef POINTERS_EXTEND_UNSIGNED ! if (GET_MODE (addr) != Pmode) ! addr = convert_memory_address (Pmode, addr); ! #endif ! ! mem = gen_rtx_MEM (BLKmode, memory_address (BLKmode, addr)); /* Get an expression we can use to find the attributes to assign to MEM. If it is an ADDR_EXPR, use the operand. Otherwise, dereference it if *************** get_memory_rtx (exp) *** 752,767 **** exp = TREE_OPERAND (exp, 0); if (TREE_CODE (exp) == ADDR_EXPR) ! exp = TREE_OPERAND (exp, 0); else if (POINTER_TYPE_P (TREE_TYPE (exp))) ! exp = build1 (INDIRECT_REF, TREE_TYPE (TREE_TYPE (exp)), exp); ! else ! return mem; ! ! set_mem_attributes (mem, exp, 0); - /* memcpy, memset and other builtin stringops can alias with anything. */ - MEM_ALIAS_SET (mem) = 0; return mem; } --- 825,841 ---- exp = TREE_OPERAND (exp, 0); if (TREE_CODE (exp) == ADDR_EXPR) ! { ! exp = TREE_OPERAND (exp, 0); ! set_mem_attributes (mem, exp, 0); ! } else if (POINTER_TYPE_P (TREE_TYPE (exp))) ! { ! exp = build1 (INDIRECT_REF, TREE_TYPE (TREE_TYPE (exp)), exp); ! /* memcpy, memset and other builtin stringops can alias with anything. */ ! set_mem_alias_set (mem, 0); ! } return mem; } *************** static enum machine_mode apply_result_mo *** 787,797 **** used for calling a function. */ static int apply_args_reg_offset[FIRST_PSEUDO_REGISTER]; ! /* Return the offset of register REGNO into the block returned by __builtin_apply_args. This is not declared static, since it is needed in objc-act.c. */ ! int apply_args_register_offset (regno) int regno; { --- 861,871 ---- used for calling a function. */ static int apply_args_reg_offset[FIRST_PSEUDO_REGISTER]; ! /* Return the offset of register REGNO into the block returned by __builtin_apply_args. This is not declared static, since it is needed in objc-act.c. */ ! int apply_args_register_offset (regno) int regno; { *************** static int *** 812,818 **** apply_args_size () { static int size = -1; ! int align, regno; enum machine_mode mode; /* The values computed by this function never change. */ --- 886,893 ---- apply_args_size () { static int size = -1; ! int align; ! unsigned int regno; enum machine_mode mode; /* The values computed by this function never change. */ *************** apply_args_size () *** 845,852 **** mode != VOIDmode; mode = GET_MODE_WIDER_MODE (mode)) if (HARD_REGNO_MODE_OK (regno, mode) ! && (mov_optab->handlers[(int) mode].insn_code ! != CODE_FOR_nothing)) best_mode = mode; mode = best_mode; --- 920,942 ---- mode != VOIDmode; mode = GET_MODE_WIDER_MODE (mode)) if (HARD_REGNO_MODE_OK (regno, mode) ! && have_insn_for (SET, mode)) ! best_mode = mode; ! ! if (best_mode == VOIDmode) ! for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_FLOAT); ! mode != VOIDmode; ! mode = GET_MODE_WIDER_MODE (mode)) ! if (HARD_REGNO_MODE_OK (regno, mode) ! && have_insn_for (SET, mode)) ! best_mode = mode; ! ! if (best_mode == VOIDmode) ! for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_INT); ! mode != VOIDmode; ! mode = GET_MODE_WIDER_MODE (mode)) ! if (HARD_REGNO_MODE_OK (regno, mode) ! && have_insn_for (SET, mode)) best_mode = mode; mode = best_mode; *************** apply_result_size () *** 902,909 **** mode != VOIDmode; mode = GET_MODE_WIDER_MODE (mode)) if (HARD_REGNO_MODE_OK (regno, mode) ! && (mov_optab->handlers[(int) mode].insn_code ! != CODE_FOR_nothing)) best_mode = mode; mode = best_mode; --- 992,1014 ---- mode != VOIDmode; mode = GET_MODE_WIDER_MODE (mode)) if (HARD_REGNO_MODE_OK (regno, mode) ! && have_insn_for (SET, mode)) ! best_mode = mode; ! ! if (best_mode == VOIDmode) ! for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_FLOAT); ! mode != VOIDmode; ! mode = GET_MODE_WIDER_MODE (mode)) ! if (HARD_REGNO_MODE_OK (regno, mode) ! && have_insn_for (SET, mode)) ! best_mode = mode; ! ! if (best_mode == VOIDmode) ! for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_INT); ! mode != VOIDmode; ! mode = GET_MODE_WIDER_MODE (mode)) ! if (HARD_REGNO_MODE_OK (regno, mode) ! && have_insn_for (SET, mode)) best_mode = mode; mode = best_mode; *************** result_vector (savep, result) *** 942,948 **** enum machine_mode mode; rtx reg, mem; rtx *savevec = (rtx *) alloca (FIRST_PSEUDO_REGISTER * sizeof (rtx)); ! size = nelts = 0; for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) if ((mode = apply_result_mode[regno]) != VOIDmode) --- 1047,1053 ---- enum machine_mode mode; rtx reg, mem; rtx *savevec = (rtx *) alloca (FIRST_PSEUDO_REGISTER * sizeof (rtx)); ! size = nelts = 0; for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) if ((mode = apply_result_mode[regno]) != VOIDmode) *************** result_vector (savep, result) *** 951,958 **** if (size % align != 0) size = CEIL (size, align) * align; reg = gen_rtx_REG (mode, savep ? regno : INCOMING_REGNO (regno)); ! mem = change_address (result, mode, ! plus_constant (XEXP (result, 0), size)); savevec[nelts++] = (savep ? gen_rtx_SET (VOIDmode, mem, reg) : gen_rtx_SET (VOIDmode, reg, mem)); --- 1056,1062 ---- if (size % align != 0) size = CEIL (size, align) * align; reg = gen_rtx_REG (mode, savep ? regno : INCOMING_REGNO (regno)); ! mem = adjust_address (result, mode, size); savevec[nelts++] = (savep ? gen_rtx_SET (VOIDmode, mem, reg) : gen_rtx_SET (VOIDmode, reg, mem)); *************** expand_builtin_apply_args_1 () *** 993,1007 **** tem = gen_rtx_REG (mode, INCOMING_REGNO (regno)); ! emit_move_insn (change_address (registers, mode, ! plus_constant (XEXP (registers, 0), ! size)), ! tem); size += GET_MODE_SIZE (mode); } /* Save the arg pointer to the block. */ ! emit_move_insn (change_address (registers, Pmode, XEXP (registers, 0)), copy_to_reg (virtual_incoming_args_rtx)); size = GET_MODE_SIZE (Pmode); --- 1097,1108 ---- tem = gen_rtx_REG (mode, INCOMING_REGNO (regno)); ! emit_move_insn (adjust_address (registers, mode, size), tem); size += GET_MODE_SIZE (mode); } /* Save the arg pointer to the block. */ ! emit_move_insn (adjust_address (registers, Pmode, 0), copy_to_reg (virtual_incoming_args_rtx)); size = GET_MODE_SIZE (Pmode); *************** expand_builtin_apply_args_1 () *** 1009,1017 **** "invisible" first argument. */ if (struct_value_incoming_rtx) { ! emit_move_insn (change_address (registers, Pmode, ! plus_constant (XEXP (registers, 0), ! size)), copy_to_reg (struct_value_incoming_rtx)); size += GET_MODE_SIZE (Pmode); } --- 1110,1116 ---- "invisible" first argument. */ if (struct_value_incoming_rtx) { ! emit_move_insn (adjust_address (registers, Pmode, size), copy_to_reg (struct_value_incoming_rtx)); size += GET_MODE_SIZE (Pmode); } *************** expand_builtin_apply_args_1 () *** 1026,1031 **** --- 1125,1131 ---- possibly be used in performing a function call. The code is moved to the start of the function so the incoming values are saved. */ + static rtx expand_builtin_apply_args () { *************** expand_builtin_apply (function, argument *** 1067,1086 **** { int size, align, regno; enum machine_mode mode; ! rtx incoming_args, result, reg, dest, call_insn; rtx old_stack_level = 0; rtx call_fusage = 0; /* Create a block where the return registers can be saved. */ result = assign_stack_local (BLKmode, apply_result_size (), -1); /* Fetch the arg pointer from the ARGUMENTS block. */ incoming_args = gen_reg_rtx (Pmode); ! emit_move_insn (incoming_args, ! gen_rtx_MEM (Pmode, arguments)); #ifndef STACK_GROWS_DOWNWARD ! incoming_args = expand_binop (Pmode, sub_optab, incoming_args, argsize, ! incoming_args, 0, OPTAB_LIB_WIDEN); #endif /* Perform postincrements before actually calling the function. */ --- 1167,1190 ---- { int size, align, regno; enum machine_mode mode; ! rtx incoming_args, result, reg, dest, src, call_insn; rtx old_stack_level = 0; rtx call_fusage = 0; + #ifdef POINTERS_EXTEND_UNSIGNED + if (GET_MODE (arguments) != Pmode) + arguments = convert_memory_address (Pmode, arguments); + #endif + /* Create a block where the return registers can be saved. */ result = assign_stack_local (BLKmode, apply_result_size (), -1); /* Fetch the arg pointer from the ARGUMENTS block. */ incoming_args = gen_reg_rtx (Pmode); ! emit_move_insn (incoming_args, gen_rtx_MEM (Pmode, arguments)); #ifndef STACK_GROWS_DOWNWARD ! incoming_args = expand_simple_binop (Pmode, MINUS, incoming_args, argsize, ! incoming_args, 0, OPTAB_LIB_WIDEN); #endif /* Perform postincrements before actually calling the function. */ *************** expand_builtin_apply (function, argument *** 1106,1118 **** but it's likely that the source and/or destination addresses in the block copy will need updating in machine specific ways. */ dest = allocate_dynamic_stack_space (argsize, 0, BITS_PER_UNIT); ! emit_block_move (gen_rtx_MEM (BLKmode, dest), ! gen_rtx_MEM (BLKmode, incoming_args), ! argsize, PARM_BOUNDARY); /* Refer to the argument block. */ apply_args_size (); arguments = gen_rtx_MEM (BLKmode, arguments); /* Walk past the arg-pointer and structure value address. */ size = GET_MODE_SIZE (Pmode); --- 1210,1225 ---- but it's likely that the source and/or destination addresses in the block copy will need updating in machine specific ways. */ dest = allocate_dynamic_stack_space (argsize, 0, BITS_PER_UNIT); ! dest = gen_rtx_MEM (BLKmode, dest); ! set_mem_align (dest, PARM_BOUNDARY); ! src = gen_rtx_MEM (BLKmode, incoming_args); ! set_mem_align (src, PARM_BOUNDARY); ! emit_block_move (dest, src, argsize); /* Refer to the argument block. */ apply_args_size (); arguments = gen_rtx_MEM (BLKmode, arguments); + set_mem_align (arguments, PARM_BOUNDARY); /* Walk past the arg-pointer and structure value address. */ size = GET_MODE_SIZE (Pmode); *************** expand_builtin_apply (function, argument *** 1128,1138 **** if (size % align != 0) size = CEIL (size, align) * align; reg = gen_rtx_REG (mode, regno); ! emit_move_insn (reg, ! change_address (arguments, mode, ! plus_constant (XEXP (arguments, 0), ! size))); ! use_reg (&call_fusage, reg); size += GET_MODE_SIZE (mode); } --- 1235,1241 ---- if (size % align != 0) size = CEIL (size, align) * align; reg = gen_rtx_REG (mode, regno); ! emit_move_insn (reg, adjust_address (arguments, mode, size)); use_reg (&call_fusage, reg); size += GET_MODE_SIZE (mode); } *************** expand_builtin_apply (function, argument *** 1143,1152 **** if (struct_value_rtx) { rtx value = gen_reg_rtx (Pmode); ! emit_move_insn (value, ! change_address (arguments, Pmode, ! plus_constant (XEXP (arguments, 0), ! size))); emit_move_insn (struct_value_rtx, value); if (GET_CODE (struct_value_rtx) == REG) use_reg (&call_fusage, struct_value_rtx); --- 1246,1252 ---- if (struct_value_rtx) { rtx value = gen_reg_rtx (Pmode); ! emit_move_insn (value, adjust_address (arguments, Pmode, size)); emit_move_insn (struct_value_rtx, value); if (GET_CODE (struct_value_rtx) == REG) use_reg (&call_fusage, struct_value_rtx); *************** expand_builtin_apply (function, argument *** 1154,1160 **** } /* All arguments and registers used for the call are set up by now! */ ! function = prepare_call_address (function, NULL_TREE, &call_fusage, 0); /* Ensure address is valid. SYMBOL_REF is already valid, so no need, and we don't want to load it into a register as an optimization, --- 1254,1260 ---- } /* All arguments and registers used for the call are set up by now! */ ! function = prepare_call_address (function, NULL_TREE, &call_fusage, 0, 0); /* Ensure address is valid. SYMBOL_REF is already valid, so no need, and we don't want to load it into a register as an optimization, *************** expand_builtin_apply (function, argument *** 1190,1198 **** gen_rtx_MEM (FUNCTION_MODE, function), const0_rtx, NULL_RTX, const0_rtx)); ! emit_move_insn (change_address (result, GET_MODE (valreg), ! XEXP (result, 0)), ! valreg); } else #endif --- 1290,1296 ---- gen_rtx_MEM (FUNCTION_MODE, function), const0_rtx, NULL_RTX, const0_rtx)); ! emit_move_insn (adjust_address (result, GET_MODE (valreg), 0), valreg); } else #endif *************** expand_builtin_return (result) *** 1247,1252 **** --- 1345,1355 ---- rtx reg; rtx call_fusage = 0; + #ifdef POINTERS_EXTEND_UNSIGNED + if (GET_MODE (result) != Pmode) + result = convert_memory_address (Pmode, result); + #endif + apply_result_size (); result = gen_rtx_MEM (BLKmode, result); *************** expand_builtin_return (result) *** 1268,1277 **** if (size % align != 0) size = CEIL (size, align) * align; reg = gen_rtx_REG (mode, INCOMING_REGNO (regno)); ! emit_move_insn (reg, ! change_address (result, mode, ! plus_constant (XEXP (result, 0), ! size))); push_to_sequence (call_fusage); emit_insn (gen_rtx_USE (VOIDmode, reg)); --- 1371,1377 ---- if (size % align != 0) size = CEIL (size, align) * align; reg = gen_rtx_REG (mode, INCOMING_REGNO (regno)); ! emit_move_insn (reg, adjust_address (result, mode, size)); push_to_sequence (call_fusage); emit_insn (gen_rtx_USE (VOIDmode, reg)); *************** expand_builtin_return (result) *** 1288,1349 **** expand_null_return (); } /* Expand a call to __builtin_classify_type with arguments found in ARGLIST. */ static rtx expand_builtin_classify_type (arglist) tree arglist; { if (arglist != 0) ! { ! tree type = TREE_TYPE (TREE_VALUE (arglist)); ! enum tree_code code = TREE_CODE (type); ! if (code == VOID_TYPE) ! return GEN_INT (void_type_class); ! if (code == INTEGER_TYPE) ! return GEN_INT (integer_type_class); ! if (code == CHAR_TYPE) ! return GEN_INT (char_type_class); ! if (code == ENUMERAL_TYPE) ! return GEN_INT (enumeral_type_class); ! if (code == BOOLEAN_TYPE) ! return GEN_INT (boolean_type_class); ! if (code == POINTER_TYPE) ! return GEN_INT (pointer_type_class); ! if (code == REFERENCE_TYPE) ! return GEN_INT (reference_type_class); ! if (code == OFFSET_TYPE) ! return GEN_INT (offset_type_class); ! if (code == REAL_TYPE) ! return GEN_INT (real_type_class); ! if (code == COMPLEX_TYPE) ! return GEN_INT (complex_type_class); ! if (code == FUNCTION_TYPE) ! return GEN_INT (function_type_class); ! if (code == METHOD_TYPE) ! return GEN_INT (method_type_class); ! if (code == RECORD_TYPE) ! return GEN_INT (record_type_class); ! if (code == UNION_TYPE || code == QUAL_UNION_TYPE) ! return GEN_INT (union_type_class); ! if (code == ARRAY_TYPE) ! { ! if (TYPE_STRING_FLAG (type)) ! return GEN_INT (string_type_class); ! else ! return GEN_INT (array_type_class); ! } ! if (code == SET_TYPE) ! return GEN_INT (set_type_class); ! if (code == FILE_TYPE) ! return GEN_INT (file_type_class); ! if (code == LANG_TYPE) ! return GEN_INT (lang_type_class); ! } return GEN_INT (no_type_class); } /* Expand expression EXP, which is a call to __builtin_constant_p. */ static rtx expand_builtin_constant_p (exp) tree exp; --- 1388,1439 ---- expand_null_return (); } + /* Used by expand_builtin_classify_type and fold_builtin_classify_type. */ + + static enum type_class + type_to_class (type) + tree type; + { + switch (TREE_CODE (type)) + { + case VOID_TYPE: return void_type_class; + case INTEGER_TYPE: return integer_type_class; + case CHAR_TYPE: return char_type_class; + case ENUMERAL_TYPE: return enumeral_type_class; + case BOOLEAN_TYPE: return boolean_type_class; + case POINTER_TYPE: return pointer_type_class; + case REFERENCE_TYPE: return reference_type_class; + case OFFSET_TYPE: return offset_type_class; + case REAL_TYPE: return real_type_class; + case COMPLEX_TYPE: return complex_type_class; + case FUNCTION_TYPE: return function_type_class; + case METHOD_TYPE: return method_type_class; + case RECORD_TYPE: return record_type_class; + case UNION_TYPE: + case QUAL_UNION_TYPE: return union_type_class; + case ARRAY_TYPE: return (TYPE_STRING_FLAG (type) + ? string_type_class : array_type_class); + case SET_TYPE: return set_type_class; + case FILE_TYPE: return file_type_class; + case LANG_TYPE: return lang_type_class; + default: return no_type_class; + } + } + /* Expand a call to __builtin_classify_type with arguments found in ARGLIST. */ + static rtx expand_builtin_classify_type (arglist) tree arglist; { if (arglist != 0) ! return GEN_INT (type_to_class (TREE_TYPE (TREE_VALUE (arglist)))); return GEN_INT (no_type_class); } /* Expand expression EXP, which is a call to __builtin_constant_p. */ + static rtx expand_builtin_constant_p (exp) tree exp; *************** expand_builtin_constant_p (exp) *** 1370,1381 **** function in-line. EXP is the expression that is a call to the builtin function; if convenient, the result should be placed in TARGET. SUBTARGET may be used as the target for computing one of EXP's operands. */ static rtx expand_builtin_mathfn (exp, target, subtarget) tree exp; rtx target, subtarget; { ! optab builtin_optab; rtx op0, insns; tree fndecl = TREE_OPERAND (TREE_OPERAND (exp, 0), 0); tree arglist = TREE_OPERAND (exp, 1); --- 1460,1472 ---- function in-line. EXP is the expression that is a call to the builtin function; if convenient, the result should be placed in TARGET. SUBTARGET may be used as the target for computing one of EXP's operands. */ + static rtx expand_builtin_mathfn (exp, target, subtarget) tree exp; rtx target, subtarget; { ! optab builtin_optab; rtx op0, insns; tree fndecl = TREE_OPERAND (TREE_OPERAND (exp, 0), 0); tree arglist = TREE_OPERAND (exp, 1); *************** expand_builtin_mathfn (exp, target, subt *** 1409,1419 **** switch (DECL_FUNCTION_CODE (fndecl)) { ! case BUILT_IN_SIN: builtin_optab = sin_optab; break; ! case BUILT_IN_COS: builtin_optab = cos_optab; break; ! case BUILT_IN_FSQRT: builtin_optab = sqrt_optab; break; default: abort (); --- 1500,1516 ---- switch (DECL_FUNCTION_CODE (fndecl)) { ! case BUILT_IN_SIN: ! case BUILT_IN_SINF: ! case BUILT_IN_SINL: builtin_optab = sin_optab; break; ! case BUILT_IN_COS: ! case BUILT_IN_COSF: ! case BUILT_IN_COSL: builtin_optab = cos_optab; break; ! case BUILT_IN_SQRT: ! case BUILT_IN_SQRTF: ! case BUILT_IN_SQRTL: builtin_optab = sqrt_optab; break; default: abort (); *************** expand_builtin_mathfn (exp, target, subt *** 1433,1442 **** return 0; } ! /* Check the results by default. But if flag_fast_math is turned on, ! then assume sqrt will always be called with valid arguments. */ ! if (flag_errno_math && ! flag_fast_math) { rtx lab1; --- 1530,1539 ---- return 0; } ! /* If errno must be maintained and if we are not allowing unsafe ! math optimizations, check the result. */ ! if (flag_errno_math && ! flag_unsafe_math_optimizations) { rtx lab1; *************** expand_builtin_mathfn (exp, target, subt *** 1450,1456 **** /* Test the result; if it is NaN, set errno=EDOM because the argument was not in the domain. */ emit_cmp_and_jump_insns (target, target, EQ, 0, GET_MODE (target), ! 0, 0, lab1); #ifdef TARGET_EDOM { --- 1547,1553 ---- /* Test the result; if it is NaN, set errno=EDOM because the argument was not in the domain. */ emit_cmp_and_jump_insns (target, target, EQ, 0, GET_MODE (target), ! 0, lab1); #ifdef TARGET_EDOM { *************** expand_builtin_mathfn (exp, target, subt *** 1478,1484 **** insns = get_insns (); end_sequence (); emit_insns (insns); ! return target; } --- 1575,1581 ---- insns = get_insns (); end_sequence (); emit_insns (insns); ! return target; } *************** expand_builtin_strlen (exp, target) *** 1541,1553 **** source operand later. */ before_strlen = get_last_insn(); - /* Check the string is readable and has an end. */ - if (current_function_check_memory_usage) - emit_library_call (chkr_check_str_libfunc, LCT_CONST_MAKE_BLOCK, - VOIDmode, 2, src_reg, Pmode, - GEN_INT (MEMORY_USE_RO), - TYPE_MODE (integer_type_node)); - char_rtx = const0_rtx; char_mode = insn_data[(int) icode].operand[2].mode; if (! (*insn_data[(int) icode].operand[2].predicate) (char_rtx, --- 1638,1643 ---- *************** expand_builtin_strlen (exp, target) *** 1562,1568 **** /* Now that we are assured of success, expand the source. */ start_sequence (); ! pat = memory_address (BLKmode, expand_expr (src, src_reg, ptr_mode, EXPAND_SUM)); if (pat != src_reg) emit_move_insn (src_reg, pat); --- 1652,1658 ---- /* Now that we are assured of success, expand the source. */ start_sequence (); ! pat = memory_address (BLKmode, expand_expr (src, src_reg, ptr_mode, EXPAND_SUM)); if (pat != src_reg) emit_move_insn (src_reg, pat); *************** expand_builtin_strstr (arglist, target, *** 1596,1603 **** rtx target; enum machine_mode mode; { ! if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE) ! || current_function_check_memory_usage) return 0; else { --- 1686,1692 ---- rtx target; enum machine_mode mode; { ! if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) return 0; else { *************** expand_builtin_strchr (arglist, target, *** 1653,1660 **** rtx target; enum machine_mode mode; { ! if (!validate_arglist (arglist, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE) ! || current_function_check_memory_usage) return 0; else { --- 1742,1748 ---- rtx target; enum machine_mode mode; { ! if (!validate_arglist (arglist, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) return 0; else { *************** expand_builtin_strrchr (arglist, target, *** 1700,1707 **** rtx target; enum machine_mode mode; { ! if (!validate_arglist (arglist, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE) ! || current_function_check_memory_usage) return 0; else { --- 1788,1794 ---- rtx target; enum machine_mode mode; { ! if (!validate_arglist (arglist, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) return 0; else { *************** expand_builtin_strpbrk (arglist, target, *** 1755,1762 **** rtx target; enum machine_mode mode; { ! if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE) ! || current_function_check_memory_usage) return 0; else { --- 1842,1848 ---- rtx target; enum machine_mode mode; { ! if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) return 0; else { *************** builtin_memcpy_read_str (data, offset, m *** 1820,1835 **** { const char *str = (const char *) data; ! if (offset + GET_MODE_SIZE (mode) > strlen (str) + 1) abort (); /* Attempt to read past the end of constant string. */ return c_readstr (str + offset, mode); } ! /* Expand a call to the memcpy builtin, with arguments in ARGLIST. */ static rtx ! expand_builtin_memcpy (arglist) tree arglist; { if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) --- 1906,1929 ---- { const char *str = (const char *) data; ! if (offset < 0 ! || ((unsigned HOST_WIDE_INT) offset + GET_MODE_SIZE (mode) ! > strlen (str) + 1)) abort (); /* Attempt to read past the end of constant string. */ return c_readstr (str + offset, mode); } ! /* Expand a call to the memcpy builtin, with arguments in ARGLIST. ! Return 0 if we failed, the caller should emit a normal call, otherwise ! try to get the result in TARGET, if convenient (and in mode MODE if ! that's convenient). */ ! static rtx ! expand_builtin_memcpy (arglist, target, mode) tree arglist; + rtx target; + enum machine_mode mode; { if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) *************** expand_builtin_memcpy (arglist) *** 1841,1856 **** tree len = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist))); const char *src_str; ! int src_align = get_pointer_alignment (src, BIGGEST_ALIGNMENT); ! int dest_align = get_pointer_alignment (dest, BIGGEST_ALIGNMENT); rtx dest_mem, src_mem, dest_addr, len_rtx; ! /* If either SRC or DEST is not a pointer type, don't do ! this operation in-line. */ ! if (src_align == 0 || dest_align == 0) ! return 0; dest_mem = get_memory_rtx (dest); len_rtx = expand_expr (len, NULL_RTX, VOIDmode, 0); src_str = c_getstr (src); --- 1935,1964 ---- tree len = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist))); const char *src_str; ! unsigned int src_align = get_pointer_alignment (src, BIGGEST_ALIGNMENT); ! unsigned int dest_align ! = get_pointer_alignment (dest, BIGGEST_ALIGNMENT); rtx dest_mem, src_mem, dest_addr, len_rtx; ! /* If DEST is not a pointer type, call the normal function. */ ! if (dest_align == 0) ! return 0; ! ! /* If the LEN parameter is zero, return DEST. */ ! if (host_integerp (len, 1) && tree_low_cst (len, 1) == 0) ! { ! /* Evaluate and ignore SRC in case it has side-effects. */ ! expand_expr (src, const0_rtx, VOIDmode, EXPAND_NORMAL); ! return expand_expr (dest, target, mode, EXPAND_NORMAL); ! } ! ! /* If either SRC is not a pointer type, don't do this ! operation in-line. */ ! if (src_align == 0) ! return 0; dest_mem = get_memory_rtx (dest); + set_mem_align (dest_mem, dest_align); len_rtx = expand_expr (len, NULL_RTX, VOIDmode, 0); src_str = c_getstr (src); *************** expand_builtin_memcpy (arglist) *** 1858,1864 **** by pieces, we can avoid loading the string from memory and only stored the computed constants. */ if (src_str - && !current_function_check_memory_usage && GET_CODE (len_rtx) == CONST_INT && (unsigned HOST_WIDE_INT) INTVAL (len_rtx) <= strlen (src_str) + 1 && can_store_by_pieces (INTVAL (len_rtx), builtin_memcpy_read_str, --- 1966,1971 ---- *************** expand_builtin_memcpy (arglist) *** 1871,1888 **** } src_mem = get_memory_rtx (src); ! ! /* Just copy the rights of SRC to the rights of DEST. */ ! if (current_function_check_memory_usage) ! emit_library_call (chkr_copy_bitmap_libfunc, LCT_CONST_MAKE_BLOCK, ! VOIDmode, 3, XEXP (dest_mem, 0), Pmode, ! XEXP (src_mem, 0), Pmode, ! len_rtx, TYPE_MODE (sizetype)); /* Copy word part most expediently. */ ! dest_addr ! = emit_block_move (dest_mem, src_mem, len_rtx, ! MIN (src_align, dest_align)); if (dest_addr == 0) dest_addr = force_operand (XEXP (dest_mem, 0), NULL_RTX); --- 1978,1987 ---- } src_mem = get_memory_rtx (src); ! set_mem_align (src_mem, src_align); /* Copy word part most expediently. */ ! dest_addr = emit_block_move (dest_mem, src_mem, len_rtx); if (dest_addr == 0) dest_addr = force_operand (XEXP (dest_mem, 0), NULL_RTX); *************** expand_builtin_memcpy (arglist) *** 1892,1924 **** } /* Expand expression EXP, which is a call to the strcpy builtin. Return 0 ! if we failed the caller should emit a normal call. */ static rtx ! expand_builtin_strcpy (exp) tree exp; { tree arglist = TREE_OPERAND (exp, 1); ! rtx result; if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) return 0; - else - { - tree len = c_strlen (TREE_VALUE (TREE_CHAIN (arglist))); - - if (len == 0) - return 0; ! len = size_binop (PLUS_EXPR, len, ssize_int (1)); ! chainon (arglist, build_tree_list (NULL_TREE, len)); ! } ! result = expand_builtin_memcpy (arglist); ! if (! result) ! TREE_CHAIN (TREE_CHAIN (arglist)) = 0; ! return result; } /* Callback routine for store_by_pieces. Read GET_MODE_BITSIZE (MODE) --- 1991,2024 ---- } /* Expand expression EXP, which is a call to the strcpy builtin. Return 0 ! if we failed the caller should emit a normal call, otherwise try to get ! the result in TARGET, if convenient (and in mode MODE if that's ! convenient). */ static rtx ! expand_builtin_strcpy (exp, target, mode) tree exp; + rtx target; + enum machine_mode mode; { tree arglist = TREE_OPERAND (exp, 1); ! tree fn, len; if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) return 0; ! fn = built_in_decls[BUILT_IN_MEMCPY]; ! if (!fn) ! return 0; ! len = c_strlen (TREE_VALUE (TREE_CHAIN (arglist))); ! if (len == 0) ! return 0; ! len = size_binop (PLUS_EXPR, len, ssize_int (1)); ! chainon (arglist, build_tree_list (NULL_TREE, len)); ! return expand_expr (build_function_call_expr (fn, arglist), ! target, mode, EXPAND_NORMAL); } /* Callback routine for store_by_pieces. Read GET_MODE_BITSIZE (MODE) *************** expand_builtin_strncpy (arglist, target, *** 1955,1973 **** { tree slen = c_strlen (TREE_VALUE (TREE_CHAIN (arglist))); tree len = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist))); /* We must be passed a constant len parameter. */ if (TREE_CODE (len) != INTEGER_CST) return 0; /* If the len parameter is zero, return the dst parameter. */ ! if (compare_tree_int (len, 0) == 0) { /* Evaluate and ignore the src argument in case it has side-effects. */ expand_expr (TREE_VALUE (TREE_CHAIN (arglist)), const0_rtx, VOIDmode, EXPAND_NORMAL); ! /* Return the dst parameter. */ return expand_expr (TREE_VALUE (arglist), target, mode, EXPAND_NORMAL); } --- 2055,2074 ---- { tree slen = c_strlen (TREE_VALUE (TREE_CHAIN (arglist))); tree len = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist))); + tree fn; /* We must be passed a constant len parameter. */ if (TREE_CODE (len) != INTEGER_CST) return 0; /* If the len parameter is zero, return the dst parameter. */ ! if (integer_zerop (len)) { /* Evaluate and ignore the src argument in case it has side-effects. */ expand_expr (TREE_VALUE (TREE_CHAIN (arglist)), const0_rtx, VOIDmode, EXPAND_NORMAL); ! /* Return the dst parameter. */ return expand_expr (TREE_VALUE (arglist), target, mode, EXPAND_NORMAL); } *************** expand_builtin_strncpy (arglist, target, *** 1984,2008 **** if (tree_int_cst_lt (slen, len)) { tree dest = TREE_VALUE (arglist); ! int dest_align = get_pointer_alignment (dest, BIGGEST_ALIGNMENT); const char *p = c_getstr (TREE_VALUE (TREE_CHAIN (arglist))); rtx dest_mem; ! if (!p || !dest_align || TREE_INT_CST_HIGH (len) ! || !can_store_by_pieces (TREE_INT_CST_LOW (len), builtin_strncpy_read_str, (PTR) p, dest_align)) return 0; dest_mem = get_memory_rtx (dest); ! store_by_pieces (dest_mem, TREE_INT_CST_LOW (len), builtin_strncpy_read_str, (PTR) p, dest_align); return force_operand (XEXP (dest_mem, 0), NULL_RTX); } ! /* OK transform into builtin memcpy. */ ! return expand_builtin_memcpy (arglist); } } --- 2085,2114 ---- if (tree_int_cst_lt (slen, len)) { tree dest = TREE_VALUE (arglist); ! unsigned int dest_align ! = get_pointer_alignment (dest, BIGGEST_ALIGNMENT); const char *p = c_getstr (TREE_VALUE (TREE_CHAIN (arglist))); rtx dest_mem; ! if (!p || dest_align == 0 || !host_integerp (len, 1) ! || !can_store_by_pieces (tree_low_cst (len, 1), builtin_strncpy_read_str, (PTR) p, dest_align)) return 0; dest_mem = get_memory_rtx (dest); ! store_by_pieces (dest_mem, tree_low_cst (len, 1), builtin_strncpy_read_str, (PTR) p, dest_align); return force_operand (XEXP (dest_mem, 0), NULL_RTX); } ! /* OK transform into builtin memcpy. */ ! fn = built_in_decls[BUILT_IN_MEMCPY]; ! if (!fn) ! return 0; ! return expand_expr (build_function_call_expr (fn, arglist), ! target, mode, EXPAND_NORMAL); } } *************** builtin_memset_read_str (data, offset, m *** 2025,2035 **** } /* Expand expression EXP, which is a call to the memset builtin. Return 0 ! if we failed the caller should emit a normal call. */ static rtx ! expand_builtin_memset (exp) tree exp; { tree arglist = TREE_OPERAND (exp, 1); --- 2131,2145 ---- } /* Expand expression EXP, which is a call to the memset builtin. Return 0 ! if we failed the caller should emit a normal call, otherwise try to get ! the result in TARGET, if convenient (and in mode MODE if that's ! convenient). */ static rtx ! expand_builtin_memset (exp, target, mode) tree exp; + rtx target; + enum machine_mode mode; { tree arglist = TREE_OPERAND (exp, 1); *************** expand_builtin_memset (exp) *** 2043,2056 **** tree len = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist))); char c; ! int dest_align = get_pointer_alignment (dest, BIGGEST_ALIGNMENT); rtx dest_mem, dest_addr, len_rtx; ! /* If DEST is not a pointer type, don't do this operation in-line. */ if (dest_align == 0) return 0; if (TREE_CODE (val) != INTEGER_CST) return 0; --- 2153,2175 ---- tree len = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist))); char c; ! unsigned int dest_align ! = get_pointer_alignment (dest, BIGGEST_ALIGNMENT); rtx dest_mem, dest_addr, len_rtx; ! /* If DEST is not a pointer type, don't do this operation in-line. */ if (dest_align == 0) return 0; + /* If the LEN parameter is zero, return DEST. */ + if (host_integerp (len, 1) && tree_low_cst (len, 1) == 0) + { + /* Evaluate and ignore VAL in case it has side-effects. */ + expand_expr (val, const0_rtx, VOIDmode, EXPAND_NORMAL); + return expand_expr (dest, target, mode, EXPAND_NORMAL); + } + if (TREE_CODE (val) != INTEGER_CST) return 0; *************** expand_builtin_memset (exp) *** 2059,2074 **** if (c) { ! if (TREE_CODE (len) != INTEGER_CST || TREE_INT_CST_HIGH (len)) return 0; ! if (current_function_check_memory_usage ! || !can_store_by_pieces (TREE_INT_CST_LOW (len), ! builtin_memset_read_str, ! (PTR) &c, dest_align)) return 0; dest_mem = get_memory_rtx (dest); ! store_by_pieces (dest_mem, TREE_INT_CST_LOW (len), builtin_memset_read_str, (PTR) &c, dest_align); return force_operand (XEXP (dest_mem, 0), NULL_RTX); --- 2178,2192 ---- if (c) { ! if (!host_integerp (len, 1)) return 0; ! if (!can_store_by_pieces (tree_low_cst (len, 1), ! builtin_memset_read_str, (PTR) &c, ! dest_align)) return 0; dest_mem = get_memory_rtx (dest); ! store_by_pieces (dest_mem, tree_low_cst (len, 1), builtin_memset_read_str, (PTR) &c, dest_align); return force_operand (XEXP (dest_mem, 0), NULL_RTX); *************** expand_builtin_memset (exp) *** 2077,2093 **** len_rtx = expand_expr (len, NULL_RTX, VOIDmode, 0); dest_mem = get_memory_rtx (dest); ! ! /* Just check DST is writable and mark it as readable. */ ! if (current_function_check_memory_usage) ! emit_library_call (chkr_check_addr_libfunc, LCT_CONST_MAKE_BLOCK, ! VOIDmode, 3, XEXP (dest_mem, 0), Pmode, ! len_rtx, TYPE_MODE (sizetype), ! GEN_INT (MEMORY_USE_WO), ! TYPE_MODE (integer_type_node)); ! ! ! dest_addr = clear_storage (dest_mem, len_rtx, dest_align); if (dest_addr == 0) dest_addr = force_operand (XEXP (dest_mem, 0), NULL_RTX); --- 2195,2202 ---- len_rtx = expand_expr (len, NULL_RTX, VOIDmode, 0); dest_mem = get_memory_rtx (dest); ! set_mem_align (dest_mem, dest_align); ! dest_addr = clear_storage (dest_mem, len_rtx); if (dest_addr == 0) dest_addr = force_operand (XEXP (dest_mem, 0), NULL_RTX); *************** expand_builtin_memset (exp) *** 2098,2103 **** --- 2207,2213 ---- /* Expand expression EXP, which is a call to the bzero builtin. Return 0 if we failed the caller should emit a normal call. */ + static rtx expand_builtin_bzero (exp) tree exp; *************** expand_builtin_bzero (exp) *** 2111,2157 **** dest = TREE_VALUE (arglist); size = TREE_VALUE (TREE_CHAIN (arglist)); ! /* New argument list transforming bzero(ptr x, int y) to ! memset(ptr x, int 0, size_t y). */ ! newarglist = build_tree_list (NULL_TREE, convert (sizetype, size)); newarglist = tree_cons (NULL_TREE, integer_zero_node, newarglist); newarglist = tree_cons (NULL_TREE, dest, newarglist); TREE_OPERAND (exp, 1) = newarglist; ! result = expand_builtin_memset(exp); ! /* Always restore the original arguments. */ TREE_OPERAND (exp, 1) = arglist; return result; } - #ifdef HAVE_cmpstrsi /* Expand expression EXP, which is a call to the memcmp or the strcmp builtin. ARGLIST is the argument list for this call. Return 0 if we failed and the caller should emit a normal call, otherwise try to get the result in ! TARGET, if convenient. */ static rtx ! expand_builtin_memcmp (exp, arglist, target) ! tree exp; tree arglist; rtx target; { ! /* If we need to check memory accesses, call the library function. */ ! if (current_function_check_memory_usage) ! return 0; if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) return 0; { - enum machine_mode mode; - tree arg1 = TREE_VALUE (arglist); - tree arg2 = TREE_VALUE (TREE_CHAIN (arglist)); - tree len = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist))); rtx arg1_rtx, arg2_rtx, arg3_rtx; rtx result; rtx insn; --- 2221,2312 ---- dest = TREE_VALUE (arglist); size = TREE_VALUE (TREE_CHAIN (arglist)); ! /* New argument list transforming bzero(ptr x, int y) to ! memset(ptr x, int 0, size_t y). This is done this way ! so that if it isn't expanded inline, we fallback to ! calling bzero instead of memset. */ ! newarglist = build_tree_list (NULL_TREE, convert (sizetype, size)); newarglist = tree_cons (NULL_TREE, integer_zero_node, newarglist); newarglist = tree_cons (NULL_TREE, dest, newarglist); TREE_OPERAND (exp, 1) = newarglist; ! result = expand_builtin_memset (exp, const0_rtx, VOIDmode); ! /* Always restore the original arguments. */ TREE_OPERAND (exp, 1) = arglist; return result; } /* Expand expression EXP, which is a call to the memcmp or the strcmp builtin. ARGLIST is the argument list for this call. Return 0 if we failed and the caller should emit a normal call, otherwise try to get the result in ! TARGET, if convenient (and in mode MODE, if that's convenient). */ ! static rtx ! expand_builtin_memcmp (exp, arglist, target, mode) ! tree exp ATTRIBUTE_UNUSED; tree arglist; rtx target; + enum machine_mode mode; { ! tree arg1, arg2, len; ! const char *p1, *p2; if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) return 0; + arg1 = TREE_VALUE (arglist); + arg2 = TREE_VALUE (TREE_CHAIN (arglist)); + len = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist))); + + /* If the len parameter is zero, return zero. */ + if (host_integerp (len, 1) && tree_low_cst (len, 1) == 0) + { + /* Evaluate and ignore arg1 and arg2 in case they have + side-effects. */ + expand_expr (arg1, const0_rtx, VOIDmode, EXPAND_NORMAL); + expand_expr (arg2, const0_rtx, VOIDmode, EXPAND_NORMAL); + return const0_rtx; + } + + p1 = c_getstr (arg1); + p2 = c_getstr (arg2); + + /* If all arguments are constant, and the value of len is not greater + than the lengths of arg1 and arg2, evaluate at compile-time. */ + if (host_integerp (len, 1) && p1 && p2 + && compare_tree_int (len, strlen (p1) + 1) <= 0 + && compare_tree_int (len, strlen (p2) + 1) <= 0) + { + const int r = memcmp (p1, p2, tree_low_cst (len, 1)); + + return (r < 0 ? constm1_rtx : (r > 0 ? const1_rtx : const0_rtx)); + } + + /* If len parameter is one, return an expression corresponding to + (*(const unsigned char*)arg1 - (const unsigned char*)arg2). */ + if (host_integerp (len, 1) && tree_low_cst (len, 1) == 1) + { + tree cst_uchar_node = build_type_variant (unsigned_char_type_node, 1, 0); + tree cst_uchar_ptr_node = build_pointer_type (cst_uchar_node); + tree ind1 = + fold (build1 (CONVERT_EXPR, integer_type_node, + build1 (INDIRECT_REF, cst_uchar_node, + build1 (NOP_EXPR, cst_uchar_ptr_node, arg1)))); + tree ind2 = + fold (build1 (CONVERT_EXPR, integer_type_node, + build1 (INDIRECT_REF, cst_uchar_node, + build1 (NOP_EXPR, cst_uchar_ptr_node, arg2)))); + tree result = fold (build (MINUS_EXPR, integer_type_node, ind1, ind2)); + return expand_expr (result, target, mode, EXPAND_NORMAL); + } + + #ifdef HAVE_cmpstrsi { rtx arg1_rtx, arg2_rtx, arg3_rtx; rtx result; rtx insn; *************** expand_builtin_memcmp (exp, arglist, tar *** 2206,2214 **** else return convert_to_mode (mode, result, 0); } - } #endif /* Expand expression EXP, which is a call to the strcmp builtin. Return 0 if we failed the caller should emit a normal call, otherwise try to get the result in TARGET, if convenient. */ --- 2361,2371 ---- else return convert_to_mode (mode, result, 0); } #endif + return 0; + } + /* Expand expression EXP, which is a call to the strcmp builtin. Return 0 if we failed the caller should emit a normal call, otherwise try to get the result in TARGET, if convenient. */ *************** expand_builtin_strcmp (exp, target, mode *** 2220,2232 **** enum machine_mode mode; { tree arglist = TREE_OPERAND (exp, 1); ! tree arg1, arg2; const char *p1, *p2; - /* If we need to check memory accesses, call the library function. */ - if (current_function_check_memory_usage) - return 0; - if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) return 0; --- 2377,2385 ---- enum machine_mode mode; { tree arglist = TREE_OPERAND (exp, 1); ! tree arg1, arg2, len, len2, fn; const char *p1, *p2; if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) return 0; *************** expand_builtin_strcmp (exp, target, mode *** 2259,2322 **** tree result = fold (build (MINUS_EXPR, integer_type_node, ind1, ind2)); return expand_expr (result, target, mode, EXPAND_NORMAL); } - - #ifdef HAVE_cmpstrsi - if (! HAVE_cmpstrsi) - return 0; ! { ! tree len = c_strlen (arg1); ! tree len2 = c_strlen (arg2); ! rtx result; ! if (len) ! len = size_binop (PLUS_EXPR, ssize_int (1), len); ! if (len2) ! len2 = size_binop (PLUS_EXPR, ssize_int (1), len2); ! /* If we don't have a constant length for the first, use the length ! of the second, if we know it. We don't require a constant for ! this case; some cost analysis could be done if both are available ! but neither is constant. For now, assume they're equally cheap ! unless one has side effects. ! If both strings have constant lengths, use the smaller. This ! could arise if optimization results in strcpy being called with ! two fixed strings, or if the code was machine-generated. We should ! add some code to the `memcmp' handler below to deal with such ! situations, someday. */ ! if (!len || TREE_CODE (len) != INTEGER_CST) ! { ! if (len2 && !TREE_SIDE_EFFECTS (len2)) ! len = len2; ! else if (len == 0) ! return 0; ! } ! else if (len2 && TREE_CODE (len2) == INTEGER_CST ! && tree_int_cst_lt (len2, len)) ! len = len2; ! /* If both arguments have side effects, we cannot optimize. */ ! if (TREE_SIDE_EFFECTS (len)) ! return 0; ! chainon (arglist, build_tree_list (NULL_TREE, len)); ! result = expand_builtin_memcmp (exp, arglist, target); ! if (! result) ! TREE_CHAIN (TREE_CHAIN (arglist)) = 0; ! return result; ! } ! #else ! return 0; ! #endif } /* Expand expression EXP, which is a call to the strncmp builtin. Return 0 if we failed the caller should emit a normal call, otherwise try to get the result in TARGET, if convenient. */ static rtx expand_builtin_strncmp (exp, target, mode) tree exp; --- 2412,2467 ---- tree result = fold (build (MINUS_EXPR, integer_type_node, ind1, ind2)); return expand_expr (result, target, mode, EXPAND_NORMAL); } ! len = c_strlen (arg1); ! len2 = c_strlen (arg2); ! if (len) ! len = size_binop (PLUS_EXPR, ssize_int (1), len); ! if (len2) ! len2 = size_binop (PLUS_EXPR, ssize_int (1), len2); ! /* If we don't have a constant length for the first, use the length ! of the second, if we know it. We don't require a constant for ! this case; some cost analysis could be done if both are available ! but neither is constant. For now, assume they're equally cheap ! unless one has side effects. ! If both strings have constant lengths, use the smaller. This ! could arise if optimization results in strcpy being called with ! two fixed strings, or if the code was machine-generated. We should ! add some code to the `memcmp' handler below to deal with such ! situations, someday. */ ! if (!len || TREE_CODE (len) != INTEGER_CST) ! { ! if (len2 && !TREE_SIDE_EFFECTS (len2)) ! len = len2; ! else if (len == 0) ! return 0; ! } ! else if (len2 && TREE_CODE (len2) == INTEGER_CST ! && tree_int_cst_lt (len2, len)) ! len = len2; ! /* If both arguments have side effects, we cannot optimize. */ ! if (TREE_SIDE_EFFECTS (len)) ! return 0; ! fn = built_in_decls[BUILT_IN_MEMCMP]; ! if (!fn) ! return 0; ! chainon (arglist, build_tree_list (NULL_TREE, len)); ! return expand_expr (build_function_call_expr (fn, arglist), ! target, mode, EXPAND_NORMAL); } /* Expand expression EXP, which is a call to the strncmp builtin. Return 0 if we failed the caller should emit a normal call, otherwise try to get the result in TARGET, if convenient. */ + static rtx expand_builtin_strncmp (exp, target, mode) tree exp; *************** expand_builtin_strncmp (exp, target, mod *** 2324,2336 **** enum machine_mode mode; { tree arglist = TREE_OPERAND (exp, 1); tree arg1, arg2, arg3; const char *p1, *p2; - /* If we need to check memory accesses, call the library function. */ - if (current_function_check_memory_usage) - return 0; - if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) return 0; --- 2469,2478 ---- enum machine_mode mode; { tree arglist = TREE_OPERAND (exp, 1); + tree fn, newarglist, len = 0; tree arg1, arg2, arg3; const char *p1, *p2; if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) return 0; *************** expand_builtin_strncmp (exp, target, mod *** 2380,2439 **** return expand_expr (result, target, mode, EXPAND_NORMAL); } - #ifdef HAVE_cmpstrsi /* If c_strlen can determine an expression for one of the string lengths, and it doesn't have side effects, then call expand_builtin_memcmp() using length MIN(strlen(string)+1, arg3). */ - if (HAVE_cmpstrsi) - { - tree newarglist, len = 0; ! /* Perhaps one of the strings is really constant, if so prefer ! that constant length over the other string's length. */ ! if (p1) ! len = c_strlen (arg1); ! else if (p2) ! len = c_strlen (arg2); ! /* If we still don't have a len, try either string arg as long ! as they don't have side effects. */ ! if (!len && !TREE_SIDE_EFFECTS (arg1)) ! len = c_strlen (arg1); ! if (!len && !TREE_SIDE_EFFECTS (arg2)) ! len = c_strlen (arg2); ! /* If we still don't have a length, punt. */ ! if (!len) ! return 0; ! ! /* Add one to the string length. */ ! len = fold (size_binop (PLUS_EXPR, len, ssize_int (1))); ! ! /* The actual new length parameter is MIN(len,arg3). */ ! len = fold (build (MIN_EXPR, TREE_TYPE (len), len, arg3)); ! newarglist = build_tree_list (NULL_TREE, len); ! newarglist = tree_cons (NULL_TREE, arg2, newarglist); ! newarglist = tree_cons (NULL_TREE, arg1, newarglist); ! return expand_builtin_memcmp (exp, newarglist, target); ! } ! #endif ! ! return 0; } /* Expand expression EXP, which is a call to the strcat builtin. Return 0 if we failed the caller should emit a normal call, otherwise try to get the result in TARGET, if convenient. */ static rtx expand_builtin_strcat (arglist, target, mode) tree arglist; rtx target; enum machine_mode mode; { - /* If we need to check memory accesses, call the library function. */ - if (current_function_check_memory_usage) - return 0; - if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) return 0; else --- 2522,2575 ---- return expand_expr (result, target, mode, EXPAND_NORMAL); } /* If c_strlen can determine an expression for one of the string lengths, and it doesn't have side effects, then call expand_builtin_memcmp() using length MIN(strlen(string)+1, arg3). */ ! /* Perhaps one of the strings is really constant, if so prefer ! that constant length over the other string's length. */ ! if (p1) ! len = c_strlen (arg1); ! else if (p2) ! len = c_strlen (arg2); ! /* If we still don't have a len, try either string arg as long ! as they don't have side effects. */ ! if (!len && !TREE_SIDE_EFFECTS (arg1)) ! len = c_strlen (arg1); ! if (!len && !TREE_SIDE_EFFECTS (arg2)) ! len = c_strlen (arg2); ! /* If we still don't have a length, punt. */ ! if (!len) ! return 0; ! fn = built_in_decls[BUILT_IN_MEMCMP]; ! if (!fn) ! return 0; ! ! /* Add one to the string length. */ ! len = fold (size_binop (PLUS_EXPR, len, ssize_int (1))); ! ! /* The actual new length parameter is MIN(len,arg3). */ ! len = fold (build (MIN_EXPR, TREE_TYPE (len), len, arg3)); ! ! newarglist = build_tree_list (NULL_TREE, len); ! newarglist = tree_cons (NULL_TREE, arg2, newarglist); ! newarglist = tree_cons (NULL_TREE, arg1, newarglist); ! return expand_expr (build_function_call_expr (fn, newarglist), ! target, mode, EXPAND_NORMAL); } /* Expand expression EXP, which is a call to the strcat builtin. Return 0 if we failed the caller should emit a normal call, otherwise try to get the result in TARGET, if convenient. */ + static rtx expand_builtin_strcat (arglist, target, mode) tree arglist; rtx target; enum machine_mode mode; { if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) return 0; else *************** expand_builtin_strcat (arglist, target, *** 2453,2468 **** /* Expand expression EXP, which is a call to the strncat builtin. Return 0 if we failed the caller should emit a normal call, otherwise try to get the result in TARGET, if convenient. */ static rtx expand_builtin_strncat (arglist, target, mode) tree arglist; rtx target; enum machine_mode mode; { - /* If we need to check memory accesses, call the library function. */ - if (current_function_check_memory_usage) - return 0; - if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) return 0; --- 2589,2601 ---- /* Expand expression EXP, which is a call to the strncat builtin. Return 0 if we failed the caller should emit a normal call, otherwise try to get the result in TARGET, if convenient. */ + static rtx expand_builtin_strncat (arglist, target, mode) tree arglist; rtx target; enum machine_mode mode; { if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) return 0; *************** expand_builtin_strncat (arglist, target, *** 2475,2482 **** /* If the requested length is zero, or the src parameter string length is zero, return the dst parameter. */ ! if ((TREE_CODE (len) == INTEGER_CST && compare_tree_int (len, 0) == 0) ! || (p && *p == '\0')) { /* Evaluate and ignore the src and len parameters in case they have side-effects. */ --- 2608,2614 ---- /* If the requested length is zero, or the src parameter string length is zero, return the dst parameter. */ ! if (integer_zerop (len) || (p && *p == '\0')) { /* Evaluate and ignore the src and len parameters in case they have side-effects. */ *************** expand_builtin_strncat (arglist, target, *** 2490,2501 **** if (TREE_CODE (len) == INTEGER_CST && p && compare_tree_int (len, strlen (p)) >= 0) { ! tree newarglist = ! tree_cons (NULL_TREE, dst, build_tree_list (NULL_TREE, src)), ! fn = built_in_decls[BUILT_IN_STRCAT]; ! /* If the replacement _DECL isn't initialized, don't do the ! transformation. */ if (!fn) return 0; --- 2622,2633 ---- if (TREE_CODE (len) == INTEGER_CST && p && compare_tree_int (len, strlen (p)) >= 0) { ! tree newarglist ! = tree_cons (NULL_TREE, dst, build_tree_list (NULL_TREE, src)); ! tree fn = built_in_decls[BUILT_IN_STRCAT]; ! /* If the replacement _DECL isn't initialized, don't do the ! transformation. */ if (!fn) return 0; *************** expand_builtin_strncat (arglist, target, *** 2509,2538 **** /* Expand expression EXP, which is a call to the strspn builtin. Return 0 if we failed the caller should emit a normal call, otherwise try to get the result in TARGET, if convenient. */ static rtx expand_builtin_strspn (arglist, target, mode) tree arglist; rtx target; enum machine_mode mode; { - /* If we need to check memory accesses, call the library function. */ - if (current_function_check_memory_usage) - return 0; - if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) return 0; else { tree s1 = TREE_VALUE (arglist), s2 = TREE_VALUE (TREE_CHAIN (arglist)); const char *p1 = c_getstr (s1), *p2 = c_getstr (s2); ! /* If both arguments are constants, evaluate at compile-time. */ if (p1 && p2) { const size_t r = strspn (p1, p2); return expand_expr (size_int (r), target, mode, EXPAND_NORMAL); } ! /* If either argument is "", return 0. */ if ((p1 && *p1 == '\0') || (p2 && *p2 == '\0')) { --- 2641,2667 ---- /* Expand expression EXP, which is a call to the strspn builtin. Return 0 if we failed the caller should emit a normal call, otherwise try to get the result in TARGET, if convenient. */ + static rtx expand_builtin_strspn (arglist, target, mode) tree arglist; rtx target; enum machine_mode mode; { if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) return 0; else { tree s1 = TREE_VALUE (arglist), s2 = TREE_VALUE (TREE_CHAIN (arglist)); const char *p1 = c_getstr (s1), *p2 = c_getstr (s2); ! /* If both arguments are constants, evaluate at compile-time. */ if (p1 && p2) { const size_t r = strspn (p1, p2); return expand_expr (size_int (r), target, mode, EXPAND_NORMAL); } ! /* If either argument is "", return 0. */ if ((p1 && *p1 == '\0') || (p2 && *p2 == '\0')) { *************** expand_builtin_strspn (arglist, target, *** 2549,2578 **** /* Expand expression EXP, which is a call to the strcspn builtin. Return 0 if we failed the caller should emit a normal call, otherwise try to get the result in TARGET, if convenient. */ static rtx expand_builtin_strcspn (arglist, target, mode) tree arglist; rtx target; enum machine_mode mode; { - /* If we need to check memory accesses, call the library function. */ - if (current_function_check_memory_usage) - return 0; - if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) return 0; else { tree s1 = TREE_VALUE (arglist), s2 = TREE_VALUE (TREE_CHAIN (arglist)); const char *p1 = c_getstr (s1), *p2 = c_getstr (s2); ! /* If both arguments are constants, evaluate at compile-time. */ if (p1 && p2) { const size_t r = strcspn (p1, p2); return expand_expr (size_int (r), target, mode, EXPAND_NORMAL); } ! /* If the first argument is "", return 0. */ if (p1 && *p1 == '\0') { --- 2678,2704 ---- /* Expand expression EXP, which is a call to the strcspn builtin. Return 0 if we failed the caller should emit a normal call, otherwise try to get the result in TARGET, if convenient. */ + static rtx expand_builtin_strcspn (arglist, target, mode) tree arglist; rtx target; enum machine_mode mode; { if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) return 0; else { tree s1 = TREE_VALUE (arglist), s2 = TREE_VALUE (TREE_CHAIN (arglist)); const char *p1 = c_getstr (s1), *p2 = c_getstr (s2); ! /* If both arguments are constants, evaluate at compile-time. */ if (p1 && p2) { const size_t r = strcspn (p1, p2); return expand_expr (size_int (r), target, mode, EXPAND_NORMAL); } ! /* If the first argument is "", return 0. */ if (p1 && *p1 == '\0') { *************** expand_builtin_strcspn (arglist, target, *** 2587,2595 **** { tree newarglist = build_tree_list (NULL_TREE, s1), fn = built_in_decls[BUILT_IN_STRLEN]; ! /* If the replacement _DECL isn't initialized, don't do the ! transformation. */ if (!fn) return 0; --- 2713,2721 ---- { tree newarglist = build_tree_list (NULL_TREE, s1), fn = built_in_decls[BUILT_IN_STRLEN]; ! /* If the replacement _DECL isn't initialized, don't do the ! transformation. */ if (!fn) return 0; *************** expand_builtin_args_info (exp) *** 2661,2667 **** tree arglist = TREE_OPERAND (exp, 1); int nwords = sizeof (CUMULATIVE_ARGS) / sizeof (int); int *word_ptr = (int *) ¤t_function_args_info; ! #if 0 /* These are used by the code below that is if 0'ed away */ int i; tree type, elts, result; --- 2787,2793 ---- tree arglist = TREE_OPERAND (exp, 1); int nwords = sizeof (CUMULATIVE_ARGS) / sizeof (int); int *word_ptr = (int *) ¤t_function_args_info; ! #if 0 /* These are used by the code below that is if 0'ed away */ int i; tree type, elts, result; *************** expand_builtin_args_info (exp) *** 2672,2685 **** if (arglist != 0) { ! tree arg = TREE_VALUE (arglist); ! if (TREE_CODE (arg) != INTEGER_CST) error ("argument of `__builtin_args_info' must be constant"); else { ! int wordnum = TREE_INT_CST_LOW (arg); ! if (wordnum < 0 || wordnum >= nwords || TREE_INT_CST_HIGH (arg)) error ("argument of `__builtin_args_info' out of range"); else return GEN_INT (word_ptr[wordnum]); --- 2798,2810 ---- if (arglist != 0) { ! if (!host_integerp (TREE_VALUE (arglist), 0)) error ("argument of `__builtin_args_info' must be constant"); else { ! HOST_WIDE_INT wordnum = tree_low_cst (TREE_VALUE (arglist), 0); ! if (wordnum < 0 || wordnum >= nwords) error ("argument of `__builtin_args_info' out of range"); else return GEN_INT (word_ptr[wordnum]); *************** expand_builtin_args_info (exp) *** 2701,2711 **** TREE_STATIC (result) = 1; result = build1 (INDIRECT_REF, build_pointer_type (type), result); TREE_CONSTANT (result) = 1; ! return expand_expr (result, NULL_RTX, VOIDmode, EXPAND_MEMORY_USE_BAD); #endif } /* Expand ARGLIST, from a call to __builtin_next_arg. */ static rtx expand_builtin_next_arg (arglist) tree arglist; --- 2826,2837 ---- TREE_STATIC (result) = 1; result = build1 (INDIRECT_REF, build_pointer_type (type), result); TREE_CONSTANT (result) = 1; ! return expand_expr (result, NULL_RTX, VOIDmode, 0); #endif } /* Expand ARGLIST, from a call to __builtin_next_arg. */ + static rtx expand_builtin_next_arg (arglist) tree arglist; *************** expand_builtin_next_arg (arglist) *** 2727,2733 **** tree arg = TREE_VALUE (arglist); /* Strip off all nops for the sake of the comparison. This ! is not quite the same as STRIP_NOPS. It does more. We must also strip off INDIRECT_EXPR for C++ reference parameters. */ while (TREE_CODE (arg) == NOP_EXPR --- 2853,2859 ---- tree arg = TREE_VALUE (arglist); /* Strip off all nops for the sake of the comparison. This ! is not quite the same as STRIP_NOPS. It does more. We must also strip off INDIRECT_EXPR for C++ reference parameters. */ while (TREE_CODE (arg) == NOP_EXPR *************** stabilize_va_list (valist, needs_lvalue) *** 2768,2777 **** So fix it. */ if (TREE_CODE (TREE_TYPE (valist)) == ARRAY_TYPE) { ! tree p1 = build_pointer_type (TREE_TYPE (va_list_type_node)); ! tree p2 = build_pointer_type (va_list_type_node); ! valist = build1 (ADDR_EXPR, p2, valist); valist = fold (build1 (NOP_EXPR, p1, valist)); } } --- 2894,2903 ---- So fix it. */ if (TREE_CODE (TREE_TYPE (valist)) == ARRAY_TYPE) { ! tree p1 = build_pointer_type (TREE_TYPE (va_list_type_node)); ! tree p2 = build_pointer_type (va_list_type_node); ! valist = build1 (ADDR_EXPR, p2, valist); valist = fold (build1 (NOP_EXPR, p1, valist)); } } *************** stabilize_va_list (valist, needs_lvalue) *** 2783,2789 **** { if (! TREE_SIDE_EFFECTS (valist)) return valist; ! pt = build_pointer_type (va_list_type_node); valist = fold (build1 (ADDR_EXPR, pt, valist)); TREE_SIDE_EFFECTS (valist) = 1; --- 2909,2915 ---- { if (! TREE_SIDE_EFFECTS (valist)) return valist; ! pt = build_pointer_type (va_list_type_node); valist = fold (build1 (ADDR_EXPR, pt, valist)); TREE_SIDE_EFFECTS (valist) = 1; *************** stabilize_va_list (valist, needs_lvalue) *** 2800,2805 **** --- 2926,2932 ---- /* The "standard" implementation of va_start: just assign `nextarg' to the variable. */ + void std_expand_builtin_va_start (stdarg_p, valist, nextarg) int stdarg_p; *************** std_expand_builtin_va_start (stdarg_p, v *** 2829,2834 **** --- 2956,2962 ---- /* Expand ARGLIST, which from a call to __builtin_stdarg_va_start or __builtin_varargs_va_start, depending on STDARG_P. */ + static rtx expand_builtin_va_start (stdarg_p, arglist) int stdarg_p; *************** rtx *** 2863,2901 **** std_expand_builtin_va_arg (valist, type) tree valist, type; { ! tree addr_tree, t; ! HOST_WIDE_INT align; ! HOST_WIDE_INT rounded_size; rtx addr; /* Compute the rounded size of the type. */ ! align = PARM_BOUNDARY / BITS_PER_UNIT; ! rounded_size = (((int_size_in_bytes (type) + align - 1) / align) * align); /* Get AP. */ addr_tree = valist; ! if (PAD_VARARGS_DOWN) { /* Small args are padded downward. */ ! ! HOST_WIDE_INT adj; ! adj = TREE_INT_CST_LOW (TYPE_SIZE (type)) / BITS_PER_UNIT; ! if (rounded_size > align) ! adj = rounded_size; ! ! addr_tree = build (PLUS_EXPR, TREE_TYPE (addr_tree), addr_tree, ! build_int_2 (rounded_size - adj, 0)); } addr = expand_expr (addr_tree, NULL_RTX, Pmode, EXPAND_NORMAL); addr = copy_to_reg (addr); /* Compute new value for AP. */ ! t = build (MODIFY_EXPR, TREE_TYPE (valist), valist, ! build (PLUS_EXPR, TREE_TYPE (valist), valist, ! build_int_2 (rounded_size, 0))); ! TREE_SIDE_EFFECTS (t) = 1; ! expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); return addr; } --- 2991,3044 ---- std_expand_builtin_va_arg (valist, type) tree valist, type; { ! tree addr_tree, t, type_size = NULL; ! tree align, alignm1; ! tree rounded_size; rtx addr; /* Compute the rounded size of the type. */ ! align = size_int (PARM_BOUNDARY / BITS_PER_UNIT); ! alignm1 = size_int (PARM_BOUNDARY / BITS_PER_UNIT - 1); ! if (type == error_mark_node ! || (type_size = TYPE_SIZE_UNIT (TYPE_MAIN_VARIANT (type))) == NULL ! || TREE_OVERFLOW (type_size)) ! rounded_size = size_zero_node; ! else ! rounded_size = fold (build (MULT_EXPR, sizetype, ! fold (build (TRUNC_DIV_EXPR, sizetype, ! fold (build (PLUS_EXPR, sizetype, ! type_size, alignm1)), ! align)), ! align)); /* Get AP. */ addr_tree = valist; ! if (PAD_VARARGS_DOWN && ! integer_zerop (rounded_size)) { /* Small args are padded downward. */ ! addr_tree = fold (build (PLUS_EXPR, TREE_TYPE (addr_tree), addr_tree, ! fold (build (COND_EXPR, sizetype, ! fold (build (GT_EXPR, sizetype, ! rounded_size, ! align)), ! size_zero_node, ! fold (build (MINUS_EXPR, sizetype, ! rounded_size, ! type_size)))))); } addr = expand_expr (addr_tree, NULL_RTX, Pmode, EXPAND_NORMAL); addr = copy_to_reg (addr); /* Compute new value for AP. */ ! if (! integer_zerop (rounded_size)) ! { ! t = build (MODIFY_EXPR, TREE_TYPE (valist), valist, ! build (PLUS_EXPR, TREE_TYPE (valist), valist, ! rounded_size)); ! TREE_SIDE_EFFECTS (t) = 1; ! expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); ! } return addr; } *************** expand_builtin_va_arg (valist, type) *** 2916,2922 **** have_va_type = TREE_TYPE (valist); if (TREE_CODE (want_va_type) == ARRAY_TYPE) { ! /* If va_list is an array type, the argument may have decayed to a pointer type, e.g. by being passed to another function. In that case, unwrap both types so that we can compare the underlying records. */ --- 3059,3065 ---- have_va_type = TREE_TYPE (valist); if (TREE_CODE (want_va_type) == ARRAY_TYPE) { ! /* If va_list is an array type, the argument may have decayed to a pointer type, e.g. by being passed to another function. In that case, unwrap both types so that we can compare the underlying records. */ *************** expand_builtin_va_arg (valist, type) *** 2938,2944 **** else if ((promoted_type = (*lang_type_promotes_to) (type)) != NULL_TREE) { const char *name = "", *pname = 0; ! static int gave_help; if (TYPE_NAME (type)) { --- 3081,3087 ---- else if ((promoted_type = (*lang_type_promotes_to) (type)) != NULL_TREE) { const char *name = "", *pname = 0; ! static bool gave_help; if (TYPE_NAME (type)) { *************** expand_builtin_va_arg (valist, type) *** 2957,2969 **** pname = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (promoted_type))); } ! error ("`%s' is promoted to `%s' when passed through `...'", name, pname); if (! gave_help) { ! gave_help = 1; ! error ("(so you should pass `%s' not `%s' to `va_arg')", pname, name); } addr = const0_rtx; } else --- 3100,3123 ---- pname = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (promoted_type))); } ! /* Unfortunately, this is merely undefined, rather than a constraint ! violation, so we cannot make this an error. If this call is never ! executed, the program is still strictly conforming. */ ! warning ("`%s' is promoted to `%s' when passed through `...'", ! name, pname); if (! gave_help) { ! gave_help = true; ! warning ("(so you should pass `%s' not `%s' to `va_arg')", ! pname, name); } + /* We can, however, treat "undefined" any way we please. + Call abort to encourage the user to fix the program. */ + expand_builtin_trap (); + + /* This is dead code, but go ahead and finish so that the + mode of the result comes out right. */ addr = const0_rtx; } else *************** expand_builtin_va_arg (valist, type) *** 2979,2986 **** #endif } result = gen_rtx_MEM (TYPE_MODE (type), addr); ! MEM_ALIAS_SET (result) = get_varargs_alias_set (); return result; } --- 3133,3145 ---- #endif } + #ifdef POINTERS_EXTEND_UNSIGNED + if (GET_MODE (addr) != Pmode) + addr = convert_memory_address (Pmode, addr); + #endif + result = gen_rtx_MEM (TYPE_MODE (type), addr); ! set_mem_alias_set (result, get_varargs_alias_set ()); return result; } *************** expand_builtin_va_end (arglist) *** 3006,3012 **** return const0_rtx; } ! /* Expand ARGLIST, from a call to __builtin_va_copy. We do this as a builtin rather than just as an assignment in stdarg.h because of the nastiness of array-type va_list types. */ --- 3165,3171 ---- return const0_rtx; } ! /* Expand ARGLIST, from a call to __builtin_va_copy. We do this as a builtin rather than just as an assignment in stdarg.h because of the nastiness of array-type va_list types. */ *************** expand_builtin_va_copy (arglist) *** 3038,3051 **** size = expand_expr (TYPE_SIZE_UNIT (va_list_type_node), NULL_RTX, VOIDmode, EXPAND_NORMAL); /* "Dereference" to BLKmode memories. */ dstb = gen_rtx_MEM (BLKmode, dstb); ! MEM_ALIAS_SET (dstb) = get_alias_set (TREE_TYPE (TREE_TYPE (dst))); srcb = gen_rtx_MEM (BLKmode, srcb); ! MEM_ALIAS_SET (srcb) = get_alias_set (TREE_TYPE (TREE_TYPE (src))); /* Copy. */ ! emit_block_move (dstb, srcb, size, TYPE_ALIGN (va_list_type_node)); } return const0_rtx; --- 3197,3220 ---- size = expand_expr (TYPE_SIZE_UNIT (va_list_type_node), NULL_RTX, VOIDmode, EXPAND_NORMAL); + #ifdef POINTERS_EXTEND_UNSIGNED + if (GET_MODE (dstb) != Pmode) + dstb = convert_memory_address (Pmode, dstb); + + if (GET_MODE (srcb) != Pmode) + srcb = convert_memory_address (Pmode, srcb); + #endif + /* "Dereference" to BLKmode memories. */ dstb = gen_rtx_MEM (BLKmode, dstb); ! set_mem_alias_set (dstb, get_alias_set (TREE_TYPE (TREE_TYPE (dst)))); ! set_mem_align (dstb, TYPE_ALIGN (va_list_type_node)); srcb = gen_rtx_MEM (BLKmode, srcb); ! set_mem_alias_set (srcb, get_alias_set (TREE_TYPE (TREE_TYPE (src)))); ! set_mem_align (srcb, TYPE_ALIGN (va_list_type_node)); /* Copy. */ ! emit_block_move (dstb, srcb, size); } return const0_rtx; *************** expand_builtin_va_copy (arglist) *** 3053,3058 **** --- 3222,3228 ---- /* Expand a call to one of the builtin functions __builtin_frame_address or __builtin_return_address. */ + static rtx expand_builtin_frame_address (exp) tree exp; *************** expand_builtin_frame_address (exp) *** 3066,3073 **** if (arglist == 0) /* Warning about missing arg was already issued. */ return const0_rtx; ! else if (TREE_CODE (TREE_VALUE (arglist)) != INTEGER_CST ! || tree_int_cst_sgn (TREE_VALUE (arglist)) < 0) { if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_FRAME_ADDRESS) error ("invalid arg to `__builtin_frame_address'"); --- 3236,3242 ---- if (arglist == 0) /* Warning about missing arg was already issued. */ return const0_rtx; ! else if (! host_integerp (TREE_VALUE (arglist), 1)) { if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_FRAME_ADDRESS) error ("invalid arg to `__builtin_frame_address'"); *************** expand_builtin_frame_address (exp) *** 3077,3085 **** } else { ! rtx tem = expand_builtin_return_addr (DECL_FUNCTION_CODE (fndecl), ! TREE_INT_CST_LOW (TREE_VALUE (arglist)), ! hard_frame_pointer_rtx); /* Some ports cannot access arbitrary stack frames. */ if (tem == NULL) --- 3246,3255 ---- } else { ! rtx tem ! = expand_builtin_return_addr (DECL_FUNCTION_CODE (fndecl), ! tree_low_cst (TREE_VALUE (arglist), 1), ! hard_frame_pointer_rtx); /* Some ports cannot access arbitrary stack frames. */ if (tem == NULL) *************** expand_builtin_alloca (arglist, target) *** 3124,3130 **** result = allocate_dynamic_stack_space (op0, target, BITS_PER_UNIT); #ifdef POINTERS_EXTEND_UNSIGNED ! result = convert_memory_address (ptr_mode, result); #endif return result; --- 3294,3301 ---- result = allocate_dynamic_stack_space (op0, target, BITS_PER_UNIT); #ifdef POINTERS_EXTEND_UNSIGNED ! if (GET_MODE (result) != ptr_mode) ! result = convert_memory_address (ptr_mode, result); #endif return result; *************** expand_builtin_ffs (arglist, target, sub *** 3156,3179 **** } /* If the string passed to fputs is a constant and is one character ! long, we attempt to transform this call into __builtin_fputc(). */ static rtx ! expand_builtin_fputs (arglist, ignore) tree arglist; int ignore; { ! tree len, fn, fn_fputc = built_in_decls[BUILT_IN_FPUTC], ! fn_fwrite = built_in_decls[BUILT_IN_FWRITE]; /* If the return value is used, or the replacement _DECL isn't ! initialized, don't do the transformation. */ if (!ignore || !fn_fputc || !fn_fwrite) return 0; ! /* Verify the arguments in the original call. */ ! if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE) ! || current_function_check_memory_usage) return 0; /* Get the length of the string passed to fputs. If the length --- 3327,3353 ---- } /* If the string passed to fputs is a constant and is one character ! long, we attempt to transform this call into __builtin_fputc(). */ static rtx ! expand_builtin_fputs (arglist, ignore, unlocked) tree arglist; int ignore; + int unlocked; { ! tree len, fn; ! tree fn_fputc = unlocked ? built_in_decls[BUILT_IN_FPUTC_UNLOCKED] ! : built_in_decls[BUILT_IN_FPUTC]; ! tree fn_fwrite = unlocked ? built_in_decls[BUILT_IN_FWRITE_UNLOCKED] ! : built_in_decls[BUILT_IN_FWRITE]; /* If the return value is used, or the replacement _DECL isn't ! initialized, don't do the transformation. */ if (!ignore || !fn_fputc || !fn_fwrite) return 0; ! /* Verify the arguments in the original call. */ ! if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE)) return 0; /* Get the length of the string passed to fputs. If the length *************** expand_builtin_fputs (arglist, ignore) *** 3197,3203 **** const char *p = c_getstr (TREE_VALUE (arglist)); if (p != NULL) ! { /* New argument list transforming fputs(string, stream) to fputc(string[0], stream). */ arglist = --- 3371,3377 ---- const char *p = c_getstr (TREE_VALUE (arglist)); if (p != NULL) ! { /* New argument list transforming fputs(string, stream) to fputc(string[0], stream). */ arglist = *************** expand_builtin_fputs (arglist, ignore) *** 3212,3218 **** case 1: /* length is greater than 1, call fwrite. */ { tree string_arg = TREE_VALUE (arglist); ! /* New argument list transforming fputs(string, stream) to fwrite(string, 1, len, stream). */ arglist = build_tree_list (NULL_TREE, TREE_VALUE (TREE_CHAIN (arglist))); --- 3386,3392 ---- case 1: /* length is greater than 1, call fwrite. */ { tree string_arg = TREE_VALUE (arglist); ! /* New argument list transforming fputs(string, stream) to fwrite(string, 1, len, stream). */ arglist = build_tree_list (NULL_TREE, TREE_VALUE (TREE_CHAIN (arglist))); *************** expand_builtin_fputs (arglist, ignore) *** 3223,3238 **** break; } default: ! abort(); } ! return expand_expr (build_function_call_expr (fn, arglist), (ignore ? const0_rtx : NULL_RTX), VOIDmode, EXPAND_NORMAL); } ! /* Expand a call to __builtin_expect. We return our argument and ! emit a NOTE_INSN_EXPECTED_VALUE note. */ static rtx expand_builtin_expect (arglist, target) --- 3397,3413 ---- break; } default: ! abort (); } ! return expand_expr (build_function_call_expr (fn, arglist), (ignore ? const0_rtx : NULL_RTX), VOIDmode, EXPAND_NORMAL); } ! /* Expand a call to __builtin_expect. We return our argument and emit a ! NOTE_INSN_EXPECTED_VALUE note. This is the expansion of __builtin_expect in ! a non-jump context. */ static rtx expand_builtin_expect (arglist, target) *************** expand_builtin_expect (arglist, target) *** 3263,3269 **** moderately sure to be able to correctly interpret the branch condition later. */ target = force_reg (GET_MODE (target), target); ! rtx_c = expand_expr (c, NULL_RTX, GET_MODE (target), EXPAND_NORMAL); note = emit_note (NULL, NOTE_INSN_EXPECTED_VALUE); --- 3438,3444 ---- moderately sure to be able to correctly interpret the branch condition later. */ target = force_reg (GET_MODE (target), target); ! rtx_c = expand_expr (c, NULL_RTX, GET_MODE (target), EXPAND_NORMAL); note = emit_note (NULL, NOTE_INSN_EXPECTED_VALUE); *************** expand_builtin_expect (arglist, target) *** 3272,3277 **** --- 3447,3586 ---- return target; } + + /* Like expand_builtin_expect, except do this in a jump context. This is + called from do_jump if the conditional is a __builtin_expect. Return either + a SEQUENCE of insns to emit the jump or NULL if we cannot optimize + __builtin_expect. We need to optimize this at jump time so that machines + like the PowerPC don't turn the test into a SCC operation, and then jump + based on the test being 0/1. */ + + rtx + expand_builtin_expect_jump (exp, if_false_label, if_true_label) + tree exp; + rtx if_false_label; + rtx if_true_label; + { + tree arglist = TREE_OPERAND (exp, 1); + tree arg0 = TREE_VALUE (arglist); + tree arg1 = TREE_VALUE (TREE_CHAIN (arglist)); + rtx ret = NULL_RTX; + + /* Only handle __builtin_expect (test, 0) and + __builtin_expect (test, 1). */ + if (TREE_CODE (TREE_TYPE (arg1)) == INTEGER_TYPE + && (integer_zerop (arg1) || integer_onep (arg1))) + { + int j; + int num_jumps = 0; + + /* If we fail to locate an appropriate conditional jump, we'll + fall back to normal evaluation. Ensure that the expression + can be re-evaluated. */ + switch (unsafe_for_reeval (arg0)) + { + case 0: /* Safe. */ + break; + + case 1: /* Mildly unsafe. */ + arg0 = unsave_expr (arg0); + break; + + case 2: /* Wildly unsafe. */ + return NULL_RTX; + } + + /* Expand the jump insns. */ + start_sequence (); + do_jump (arg0, if_false_label, if_true_label); + ret = gen_sequence (); + end_sequence (); + + /* Now that the __builtin_expect has been validated, go through and add + the expect's to each of the conditional jumps. If we run into an + error, just give up and generate the 'safe' code of doing a SCC + operation and then doing a branch on that. */ + for (j = 0; j < XVECLEN (ret, 0); j++) + { + rtx insn = XVECEXP (ret, 0, j); + rtx pattern; + + if (GET_CODE (insn) == JUMP_INSN && any_condjump_p (insn) + && (pattern = pc_set (insn)) != NULL_RTX) + { + rtx ifelse = SET_SRC (pattern); + rtx label; + int taken; + + if (GET_CODE (ifelse) != IF_THEN_ELSE) + continue; + + if (GET_CODE (XEXP (ifelse, 1)) == LABEL_REF) + { + taken = 1; + label = XEXP (XEXP (ifelse, 1), 0); + } + /* An inverted jump reverses the probabilities. */ + else if (GET_CODE (XEXP (ifelse, 2)) == LABEL_REF) + { + taken = 0; + label = XEXP (XEXP (ifelse, 2), 0); + } + /* We shouldn't have to worry about conditional returns during + the expansion stage, but handle it gracefully anyway. */ + else if (GET_CODE (XEXP (ifelse, 1)) == RETURN) + { + taken = 1; + label = NULL_RTX; + } + /* An inverted return reverses the probabilities. */ + else if (GET_CODE (XEXP (ifelse, 2)) == RETURN) + { + taken = 0; + label = NULL_RTX; + } + else + continue; + + /* If the test is expected to fail, reverse the + probabilities. */ + if (integer_zerop (arg1)) + taken = 1 - taken; + + /* If we are jumping to the false label, reverse the + probabilities. */ + if (label == NULL_RTX) + ; /* conditional return */ + else if (label == if_false_label) + taken = 1 - taken; + else if (label != if_true_label) + continue; + + num_jumps++; + predict_insn_def (insn, PRED_BUILTIN_EXPECT, taken); + } + } + + /* If no jumps were modified, fail and do __builtin_expect the normal + way. */ + if (num_jumps == 0) + ret = NULL_RTX; + } + + return ret; + } + + void + expand_builtin_trap () + { + #ifdef HAVE_trap + if (HAVE_trap) + emit_insn (gen_trap ()); + else + #endif + emit_library_call (abort_libfunc, LCT_NORETURN, VOIDmode, 0); + emit_barrier (); + } /* Expand an expression EXP that calls a built-in function, with result going to TARGET if that's convenient *************** expand_builtin (exp, target, subtarget, *** 3291,3341 **** tree arglist = TREE_OPERAND (exp, 1); enum built_in_function fcode = DECL_FUNCTION_CODE (fndecl); - #ifdef MD_EXPAND_BUILTIN if (DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_MD) ! return MD_EXPAND_BUILTIN (exp, target, subtarget, mode, ignore); ! #endif ! /* When not optimizing, generate calls to library functions for a certain set of builtins. */ ! if (! optimize && ! CALLED_AS_BUILT_IN (fndecl) ! && (fcode == BUILT_IN_SIN || fcode == BUILT_IN_COS ! || fcode == BUILT_IN_FSQRT || fcode == BUILT_IN_MEMSET ! || fcode == BUILT_IN_MEMCPY || fcode == BUILT_IN_MEMCMP ! || fcode == BUILT_IN_BCMP || fcode == BUILT_IN_BZERO ! || fcode == BUILT_IN_INDEX || fcode == BUILT_IN_RINDEX ! || fcode == BUILT_IN_STRCHR || fcode == BUILT_IN_STRRCHR ! || fcode == BUILT_IN_STRLEN || fcode == BUILT_IN_STRCPY ! || fcode == BUILT_IN_STRNCPY || fcode == BUILT_IN_STRNCMP ! || fcode == BUILT_IN_STRSTR || fcode == BUILT_IN_STRPBRK ! || fcode == BUILT_IN_STRCAT || fcode == BUILT_IN_STRNCAT ! || fcode == BUILT_IN_STRSPN || fcode == BUILT_IN_STRCSPN ! || fcode == BUILT_IN_STRCMP || fcode == BUILT_IN_FFS ! || fcode == BUILT_IN_PUTCHAR || fcode == BUILT_IN_PUTS ! || fcode == BUILT_IN_PRINTF || fcode == BUILT_IN_FPUTC ! || fcode == BUILT_IN_FPUTS || fcode == BUILT_IN_FWRITE)) ! return expand_call (exp, target, ignore); switch (fcode) { case BUILT_IN_ABS: case BUILT_IN_FABS: /* build_function_call changes these into ABS_EXPR. */ abort (); case BUILT_IN_CONJ: case BUILT_IN_CREAL: case BUILT_IN_CIMAG: /* expand_tree_builtin changes these into CONJ_EXPR, REALPART_EXPR and IMAGPART_EXPR. */ abort (); case BUILT_IN_SIN: case BUILT_IN_COS: ! /* Treat these like sqrt, but only if the user asks for them. */ ! if (! flag_fast_math) break; ! case BUILT_IN_FSQRT: target = expand_builtin_mathfn (exp, target, subtarget); if (target) return target; --- 3600,3695 ---- tree arglist = TREE_OPERAND (exp, 1); enum built_in_function fcode = DECL_FUNCTION_CODE (fndecl); if (DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_MD) ! return (*targetm.expand_builtin) (exp, target, subtarget, mode, ignore); ! /* When not optimizing, generate calls to library functions for a certain set of builtins. */ ! if (!optimize && !CALLED_AS_BUILT_IN (fndecl)) ! switch (fcode) ! { ! case BUILT_IN_SIN: ! case BUILT_IN_COS: ! case BUILT_IN_SQRT: ! case BUILT_IN_SQRTF: ! case BUILT_IN_SQRTL: ! case BUILT_IN_MEMSET: ! case BUILT_IN_MEMCPY: ! case BUILT_IN_MEMCMP: ! case BUILT_IN_BCMP: ! case BUILT_IN_BZERO: ! case BUILT_IN_INDEX: ! case BUILT_IN_RINDEX: ! case BUILT_IN_STRCHR: ! case BUILT_IN_STRRCHR: ! case BUILT_IN_STRLEN: ! case BUILT_IN_STRCPY: ! case BUILT_IN_STRNCPY: ! case BUILT_IN_STRNCMP: ! case BUILT_IN_STRSTR: ! case BUILT_IN_STRPBRK: ! case BUILT_IN_STRCAT: ! case BUILT_IN_STRNCAT: ! case BUILT_IN_STRSPN: ! case BUILT_IN_STRCSPN: ! case BUILT_IN_STRCMP: ! case BUILT_IN_FFS: ! case BUILT_IN_PUTCHAR: ! case BUILT_IN_PUTS: ! case BUILT_IN_PRINTF: ! case BUILT_IN_FPUTC: ! case BUILT_IN_FPUTS: ! case BUILT_IN_FWRITE: ! case BUILT_IN_PUTCHAR_UNLOCKED: ! case BUILT_IN_PUTS_UNLOCKED: ! case BUILT_IN_PRINTF_UNLOCKED: ! case BUILT_IN_FPUTC_UNLOCKED: ! case BUILT_IN_FPUTS_UNLOCKED: ! case BUILT_IN_FWRITE_UNLOCKED: ! return expand_call (exp, target, ignore); ! ! default: ! break; ! } switch (fcode) { case BUILT_IN_ABS: + case BUILT_IN_LABS: + case BUILT_IN_LLABS: + case BUILT_IN_IMAXABS: case BUILT_IN_FABS: + case BUILT_IN_FABSF: + case BUILT_IN_FABSL: /* build_function_call changes these into ABS_EXPR. */ abort (); case BUILT_IN_CONJ: + case BUILT_IN_CONJF: + case BUILT_IN_CONJL: case BUILT_IN_CREAL: + case BUILT_IN_CREALF: + case BUILT_IN_CREALL: case BUILT_IN_CIMAG: + case BUILT_IN_CIMAGF: + case BUILT_IN_CIMAGL: /* expand_tree_builtin changes these into CONJ_EXPR, REALPART_EXPR and IMAGPART_EXPR. */ abort (); case BUILT_IN_SIN: + case BUILT_IN_SINF: + case BUILT_IN_SINL: case BUILT_IN_COS: ! case BUILT_IN_COSF: ! case BUILT_IN_COSL: ! /* Treat these like sqrt only if unsafe math optimizations are allowed, ! because of possible accuracy problems. */ ! if (! flag_unsafe_math_optimizations) break; ! case BUILT_IN_SQRT: ! case BUILT_IN_SQRTF: ! case BUILT_IN_SQRTL: target = expand_builtin_mathfn (exp, target, subtarget); if (target) return target; *************** expand_builtin (exp, target, subtarget, *** 3433,3485 **** break; case BUILT_IN_STRCPY: ! target = expand_builtin_strcpy (exp); if (target) return target; break; ! case BUILT_IN_STRNCPY: target = expand_builtin_strncpy (arglist, target, mode); if (target) return target; break; ! case BUILT_IN_STRCAT: target = expand_builtin_strcat (arglist, target, mode); if (target) return target; break; ! case BUILT_IN_STRNCAT: target = expand_builtin_strncat (arglist, target, mode); if (target) return target; break; ! case BUILT_IN_STRSPN: target = expand_builtin_strspn (arglist, target, mode); if (target) return target; break; ! case BUILT_IN_STRCSPN: target = expand_builtin_strcspn (arglist, target, mode); if (target) return target; break; ! case BUILT_IN_STRSTR: target = expand_builtin_strstr (arglist, target, mode); if (target) return target; break; ! case BUILT_IN_STRPBRK: target = expand_builtin_strpbrk (arglist, target, mode); if (target) return target; break; ! case BUILT_IN_INDEX: case BUILT_IN_STRCHR: target = expand_builtin_strchr (arglist, target, mode); --- 3787,3839 ---- break; case BUILT_IN_STRCPY: ! target = expand_builtin_strcpy (exp, target, mode); if (target) return target; break; ! case BUILT_IN_STRNCPY: target = expand_builtin_strncpy (arglist, target, mode); if (target) return target; break; ! case BUILT_IN_STRCAT: target = expand_builtin_strcat (arglist, target, mode); if (target) return target; break; ! case BUILT_IN_STRNCAT: target = expand_builtin_strncat (arglist, target, mode); if (target) return target; break; ! case BUILT_IN_STRSPN: target = expand_builtin_strspn (arglist, target, mode); if (target) return target; break; ! case BUILT_IN_STRCSPN: target = expand_builtin_strcspn (arglist, target, mode); if (target) return target; break; ! case BUILT_IN_STRSTR: target = expand_builtin_strstr (arglist, target, mode); if (target) return target; break; ! case BUILT_IN_STRPBRK: target = expand_builtin_strpbrk (arglist, target, mode); if (target) return target; break; ! case BUILT_IN_INDEX: case BUILT_IN_STRCHR: target = expand_builtin_strchr (arglist, target, mode); *************** expand_builtin (exp, target, subtarget, *** 3495,3507 **** break; case BUILT_IN_MEMCPY: ! target = expand_builtin_memcpy (arglist); if (target) return target; break; case BUILT_IN_MEMSET: ! target = expand_builtin_memset (exp); if (target) return target; break; --- 3849,3861 ---- break; case BUILT_IN_MEMCPY: ! target = expand_builtin_memcpy (arglist, target, mode); if (target) return target; break; case BUILT_IN_MEMSET: ! target = expand_builtin_memset (exp, target, mode); if (target) return target; break; *************** expand_builtin (exp, target, subtarget, *** 3524,3544 **** return target; break; - /* These comparison functions need an instruction that returns an actual - index. An ordinary compare that just sets the condition codes - is not enough. */ - #ifdef HAVE_cmpstrsi case BUILT_IN_BCMP: case BUILT_IN_MEMCMP: ! target = expand_builtin_memcmp (exp, arglist, target); if (target) return target; break; - #else - case BUILT_IN_BCMP: - case BUILT_IN_MEMCMP: - break; - #endif case BUILT_IN_SETJMP: target = expand_builtin_setjmp (arglist, target); --- 3878,3889 ---- return target; break; case BUILT_IN_BCMP: case BUILT_IN_MEMCMP: ! target = expand_builtin_memcmp (exp, arglist, target, mode); if (target) return target; break; case BUILT_IN_SETJMP: target = expand_builtin_setjmp (arglist, target); *************** expand_builtin (exp, target, subtarget, *** 3570,3595 **** } case BUILT_IN_TRAP: ! #ifdef HAVE_trap ! if (HAVE_trap) ! emit_insn (gen_trap ()); ! else ! #endif ! error ("__builtin_trap not supported by this target"); ! emit_barrier (); return const0_rtx; case BUILT_IN_PUTCHAR: case BUILT_IN_PUTS: case BUILT_IN_FPUTC: case BUILT_IN_FWRITE: break; case BUILT_IN_FPUTS: ! target = expand_builtin_fputs (arglist, ignore); if (target) return target; break; ! /* Various hooks for the DWARF 2 __throw routine. */ case BUILT_IN_UNWIND_INIT: expand_builtin_unwind_init (); --- 3915,3943 ---- } case BUILT_IN_TRAP: ! expand_builtin_trap (); return const0_rtx; case BUILT_IN_PUTCHAR: case BUILT_IN_PUTS: case BUILT_IN_FPUTC: case BUILT_IN_FWRITE: + case BUILT_IN_PUTCHAR_UNLOCKED: + case BUILT_IN_PUTS_UNLOCKED: + case BUILT_IN_FPUTC_UNLOCKED: + case BUILT_IN_FWRITE_UNLOCKED: break; case BUILT_IN_FPUTS: ! target = expand_builtin_fputs (arglist, ignore,/*unlocked=*/ 0); if (target) return target; break; ! case BUILT_IN_FPUTS_UNLOCKED: ! target = expand_builtin_fputs (arglist, ignore,/*unlocked=*/ 1); ! if (target) ! return target; ! break; ! /* Various hooks for the DWARF 2 __throw routine. */ case BUILT_IN_UNWIND_INIT: expand_builtin_unwind_init (); *************** expand_builtin (exp, target, subtarget, *** 3625,3630 **** --- 3973,3982 ---- return expand_builtin_va_copy (arglist); case BUILT_IN_EXPECT: return expand_builtin_expect (arglist, target); + case BUILT_IN_PREFETCH: + expand_builtin_prefetch (arglist); + return const0_rtx; + default: /* just do library call, if unknown builtin */ error ("built-in function `%s' not currently supported", *************** fold_builtin_constant_p (arglist) *** 3678,3683 **** --- 4030,4047 ---- return 0; } + /* Fold a call to __builtin_classify_type. */ + + static tree + fold_builtin_classify_type (arglist) + tree arglist; + { + if (arglist == 0) + return build_int_2 (no_type_class, 0); + + return build_int_2 (type_to_class (TREE_TYPE (TREE_VALUE (arglist))), 0); + } + /* Used by constant folding to eliminate some builtin calls early. EXP is the CALL_EXPR of a call to a builtin function. */ *************** fold_builtin (exp) *** 3697,3702 **** --- 4061,4069 ---- case BUILT_IN_CONSTANT_P: return fold_builtin_constant_p (arglist); + case BUILT_IN_CLASSIFY_TYPE: + return fold_builtin_classify_type (arglist); + case BUILT_IN_STRLEN: if (validate_arglist (arglist, POINTER_TYPE, VOID_TYPE)) { *************** build_function_call_expr (fn, arglist) *** 3730,3749 **** represented as a tree chain of parameters against a specified list of tree_codes. If the last specifier is a 0, that represents an ellipses, otherwise the last specifier must be a VOID_TYPE. */ static int validate_arglist VPARAMS ((tree arglist, ...)) { - #ifndef ANSI_PROTOTYPES - tree arglist; - #endif enum tree_code code; ! va_list ap; ! ! VA_START (ap, arglist); ! #ifndef ANSI_PROTOTYPES ! arglist = va_arg (ap, tree); ! #endif do { code = va_arg (ap, enum tree_code); --- 4097,4111 ---- represented as a tree chain of parameters against a specified list of tree_codes. If the last specifier is a 0, that represents an ellipses, otherwise the last specifier must be a VOID_TYPE. */ + static int validate_arglist VPARAMS ((tree arglist, ...)) { enum tree_code code; ! int res = 0; ! VA_OPEN (ap, arglist); ! VA_FIXEDARG (ap, tree, arglist); do { code = va_arg (ap, enum tree_code); *************** validate_arglist VPARAMS ((tree arglist, *** 3751,3774 **** { case 0: /* This signifies an ellipses, any further arguments are all ok. */ ! va_end (ap); ! return 1; case VOID_TYPE: /* This signifies an endlink, if no arguments remain, return true, otherwise return false. */ ! va_end (ap); ! return arglist == 0; default: /* If no parameters remain or the parameter's code does not match the specified code, return false. Otherwise continue checking any remaining arguments. */ if (arglist == 0 || code != TREE_CODE (TREE_TYPE (TREE_VALUE (arglist)))) ! { ! va_end (ap); ! return 0; ! } break; } arglist = TREE_CHAIN (arglist); } while (1); } --- 4113,4160 ---- { case 0: /* This signifies an ellipses, any further arguments are all ok. */ ! res = 1; ! goto end; case VOID_TYPE: /* This signifies an endlink, if no arguments remain, return true, otherwise return false. */ ! res = arglist == 0; ! goto end; default: /* If no parameters remain or the parameter's code does not match the specified code, return false. Otherwise continue checking any remaining arguments. */ if (arglist == 0 || code != TREE_CODE (TREE_TYPE (TREE_VALUE (arglist)))) ! goto end; break; } arglist = TREE_CHAIN (arglist); } while (1); + + /* We need gotos here since we can only have one VA_CLOSE in a + function. */ + end: ; + VA_CLOSE (ap); + + return res; + } + + /* Default version of target-specific builtin setup that does nothing. */ + + void + default_init_builtins () + { + } + + /* Default target-specific builtin expander that does nothing. */ + + rtx + default_expand_builtin (exp, target, subtarget, mode, ignore) + tree exp ATTRIBUTE_UNUSED; + rtx target ATTRIBUTE_UNUSED; + rtx subtarget ATTRIBUTE_UNUSED; + enum machine_mode mode ATTRIBUTE_UNUSED; + int ignore ATTRIBUTE_UNUSED; + { + return NULL_RTX; } diff -Nrc3pad gcc-3.0.4/gcc/builtins.def gcc-3.1/gcc/builtins.def *** gcc-3.0.4/gcc/builtins.def Sun May 13 07:09:51 2001 --- gcc-3.1/gcc/builtins.def Mon Jan 28 20:07:00 2002 *************** *** 2,112 **** builtins used in the GNU compiler. Copyright (C) 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ ! DEF_BUILTIN(BUILT_IN_ALLOCA) ! DEF_BUILTIN(BUILT_IN_ABS) ! DEF_BUILTIN(BUILT_IN_FABS) ! DEF_BUILTIN(BUILT_IN_CONJ) ! DEF_BUILTIN(BUILT_IN_CREAL) ! DEF_BUILTIN(BUILT_IN_CIMAG) ! DEF_BUILTIN(BUILT_IN_FFS) ! DEF_BUILTIN(BUILT_IN_DIV) ! DEF_BUILTIN(BUILT_IN_LDIV) ! DEF_BUILTIN(BUILT_IN_FFLOOR) ! DEF_BUILTIN(BUILT_IN_FCEIL) ! DEF_BUILTIN(BUILT_IN_FMOD) ! DEF_BUILTIN(BUILT_IN_FREM) ! DEF_BUILTIN(BUILT_IN_MEMCPY) ! DEF_BUILTIN(BUILT_IN_MEMCMP) ! DEF_BUILTIN(BUILT_IN_MEMSET) ! DEF_BUILTIN(BUILT_IN_BZERO) ! DEF_BUILTIN(BUILT_IN_BCMP) ! DEF_BUILTIN(BUILT_IN_INDEX) ! DEF_BUILTIN(BUILT_IN_RINDEX) ! DEF_BUILTIN(BUILT_IN_STRCAT) ! DEF_BUILTIN(BUILT_IN_STRNCAT) ! DEF_BUILTIN(BUILT_IN_STRCPY) ! DEF_BUILTIN(BUILT_IN_STRNCPY) ! DEF_BUILTIN(BUILT_IN_STRCMP) ! DEF_BUILTIN(BUILT_IN_STRNCMP) ! DEF_BUILTIN(BUILT_IN_STRLEN) ! DEF_BUILTIN(BUILT_IN_STRSTR) ! DEF_BUILTIN(BUILT_IN_STRPBRK) ! DEF_BUILTIN(BUILT_IN_STRSPN) ! DEF_BUILTIN(BUILT_IN_STRCSPN) ! DEF_BUILTIN(BUILT_IN_STRCHR) ! DEF_BUILTIN(BUILT_IN_STRRCHR) ! DEF_BUILTIN(BUILT_IN_FSQRT) ! DEF_BUILTIN(BUILT_IN_SIN) ! DEF_BUILTIN(BUILT_IN_COS) ! DEF_BUILTIN(BUILT_IN_GETEXP) ! DEF_BUILTIN(BUILT_IN_GETMAN) ! DEF_BUILTIN(BUILT_IN_SAVEREGS) ! DEF_BUILTIN(BUILT_IN_CLASSIFY_TYPE) ! DEF_BUILTIN(BUILT_IN_NEXT_ARG) ! DEF_BUILTIN(BUILT_IN_ARGS_INFO) ! DEF_BUILTIN(BUILT_IN_CONSTANT_P) ! DEF_BUILTIN(BUILT_IN_FRAME_ADDRESS) ! DEF_BUILTIN(BUILT_IN_RETURN_ADDRESS) ! DEF_BUILTIN(BUILT_IN_AGGREGATE_INCOMING_ADDRESS) ! DEF_BUILTIN(BUILT_IN_APPLY_ARGS) ! DEF_BUILTIN(BUILT_IN_APPLY) ! DEF_BUILTIN(BUILT_IN_RETURN) ! DEF_BUILTIN(BUILT_IN_SETJMP) ! DEF_BUILTIN(BUILT_IN_LONGJMP) ! DEF_BUILTIN(BUILT_IN_TRAP) ! /* Stdio builtins. */ ! DEF_BUILTIN(BUILT_IN_PUTCHAR) ! DEF_BUILTIN(BUILT_IN_PUTS) ! DEF_BUILTIN(BUILT_IN_PRINTF) ! DEF_BUILTIN(BUILT_IN_FPUTC) ! DEF_BUILTIN(BUILT_IN_FPUTS) ! DEF_BUILTIN(BUILT_IN_FWRITE) ! DEF_BUILTIN(BUILT_IN_FPRINTF) /* ISO C99 floating point unordered comparisons. */ ! DEF_BUILTIN(BUILT_IN_ISGREATER) ! DEF_BUILTIN(BUILT_IN_ISGREATEREQUAL) ! DEF_BUILTIN(BUILT_IN_ISLESS) ! DEF_BUILTIN(BUILT_IN_ISLESSEQUAL) ! DEF_BUILTIN(BUILT_IN_ISLESSGREATER) ! DEF_BUILTIN(BUILT_IN_ISUNORDERED) ! /* Various hooks for the DWARF 2 __throw routine. */ ! DEF_BUILTIN(BUILT_IN_UNWIND_INIT) ! DEF_BUILTIN(BUILT_IN_DWARF_CFA) ! DEF_BUILTIN(BUILT_IN_DWARF_FP_REGNUM) ! DEF_BUILTIN(BUILT_IN_INIT_DWARF_REG_SIZES) ! DEF_BUILTIN(BUILT_IN_FROB_RETURN_ADDR) ! DEF_BUILTIN(BUILT_IN_EXTRACT_RETURN_ADDR) ! DEF_BUILTIN(BUILT_IN_EH_RETURN) ! DEF_BUILTIN(BUILT_IN_EH_RETURN_DATA_REGNO) ! DEF_BUILTIN(BUILT_IN_VARARGS_START) ! DEF_BUILTIN(BUILT_IN_STDARG_START) ! DEF_BUILTIN(BUILT_IN_VA_END) ! DEF_BUILTIN(BUILT_IN_VA_COPY) ! DEF_BUILTIN(BUILT_IN_EXPECT) ! /* C++ extensions */ ! DEF_BUILTIN(BUILT_IN_NEW) ! DEF_BUILTIN(BUILT_IN_VEC_NEW) ! DEF_BUILTIN(BUILT_IN_DELETE) ! DEF_BUILTIN(BUILT_IN_VEC_DELETE) --- 2,488 ---- builtins used in the GNU compiler. Copyright (C) 2000, 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ ! /* Before including this file, you should define a macro: ! DEF_BUILTIN (ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, ! FALLBACK_P, NONANSI_P) ! ! This macro will be called once for each builtin function. The ! ENUM will be of type `enum built_in_function', and will indicate ! which builtin function is being processed. The NAME of the builtin ! function (which will always start with `__builtin_') is a string ! literal. The CLASS is of type `enum built_in_class' and indicates ! what kind of builtin is being processed. ! ! Some builtins are actually two separate functions. For example, ! for `strcmp' there are two builtin functions; `__builtin_strcmp' ! and `strcmp' itself. Both behave identically. Other builtins ! define only the `__builtin' variant. If BOTH_P is TRUE, then this ! builtin has both variants; otherwise, it is has only the first ! variant. ! ! TYPE indicates the type of the function. The symbols correspond to ! enumerals from builtin-types.def. If BOTH_P is true, then LIBTYPE ! is the type of the non-`__builtin_' variant. Otherwise, LIBTYPE ! should be ignored. ! ! If FALLBACK_P is true then, if for some reason, the compiler cannot ! expand the builtin function directly, it will call the ! corresponding library function (which does not have the ! `__builtin_' prefix. ! ! If NONANSI_P is true, then the non-`__builtin_' variant is not an ! ANSI/ISO library function, and so we should pretend it does not ! exist when compiling in ANSI conformant mode. */ ! ! /* A GCC builtin (like __builtin_saveregs) is provided by the ! compiler, but does not correspond to a function in the standard ! library. */ ! #undef DEF_GCC_BUILTIN ! #define DEF_GCC_BUILTIN(ENUM, NAME, TYPE) \ ! DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, BT_LAST, \ ! false, false, false) ! ! ! /* A fallback builtin is a builtin (like __builtin_puts) that falls ! back to the corresopnding library function if necessary -- but ! for which we should not introduce the non-`__builtin' variant of ! the name. */ ! #undef DEF_FALLBACK_BUILTIN ! #define DEF_FALLBACK_BUILTIN(ENUM, NAME, TYPE) \ ! DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \ ! false, true, false) ! ! /* Like DEF_FALLBACK_BUILTIN, except that the function is not one that ! is specified by ANSI/ISO C. So, when we're being fully conformant ! we ignore the version of these builtins that does not begin with ! __builtin. */ ! #undef DEF_EXT_FALLBACK_BUILTIN ! #define DEF_EXT_FALLBACK_BUILTIN(ENUM, NAME, TYPE) \ ! DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \ ! false, true, true) ! ! /* A library builtin (like __builtin_strchr) is a builtin equivalent ! of an ANSI/ISO standard library function. In addition to the ! `__builtin' version, we will create an ordinary version (e.g, ! `strchr') as well. If we cannot compute the answer using the ! builtin function, we will fall back to the standard library ! version. */ ! #undef DEF_LIB_BUILTIN ! #define DEF_LIB_BUILTIN(ENUM, NAME, TYPE) \ ! DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \ ! true, true, false) ! ! /* Like DEF_LIB_BUILTIN, except that a call to the builtin should ! never fall back to the library version. */ ! #undef DEF_LIB_ALWAYS_BUILTIN ! #define DEF_LIB_ALWAYS_BUILTIN(ENUM, NAME, TYPE) \ ! DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \ ! true, false, true) ! ! /* Like DEF_LIB_BUILTIN, except that the function is not one that is ! specified by ANSI/ISO C. So, when we're being fully conformant we ! ignore the version of these builtins that does not begin with ! __builtin. */ ! #undef DEF_EXT_LIB_BUILTIN ! #define DEF_EXT_LIB_BUILTIN(ENUM, NAME, TYPE) \ ! DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \ ! true, true, true) ! ! /* Like DEF_LIB_BUILTIN, except that the function is only a part of ! the standard in C99 or above. */ ! #undef DEF_C99_BUILTIN ! #define DEF_C99_BUILTIN(ENUM, NAME, TYPE) \ ! DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, TYPE, \ ! true, !flag_isoc99, true) ! ! /* Like DEF_LIB_BUILTIN, except that the function is expanded in the ! front-end. */ ! #undef DEF_FRONT_END_LIB_BUILTIN ! #define DEF_FRONT_END_LIB_BUILTIN(ENUM, NAME, TYPE) \ ! DEF_BUILTIN (ENUM, NAME, BUILT_IN_FRONTEND, TYPE, TYPE, \ ! true, true, false) ! ! /* Like DEF_FRONT_END_LIB_BUILTIN, except that the function is not one ! that is specified by ANSI/ISO C. So, when we're being fully ! conformant we ignore the version of these builtins that does not ! begin with __builtin. */ ! #undef DEF_EXT_FRONT_END_LIB_BUILTIN ! #define DEF_EXT_FRONT_END_LIB_BUILTIN(ENUM, NAME, TYPE) \ ! DEF_BUILTIN (ENUM, NAME, BUILT_IN_FRONTEND, TYPE, TYPE, \ ! true, true, true) ! ! /* A built-in that is not currently used. */ ! #undef DEF_UNUSED_BUILTIN ! #define DEF_UNUSED_BUILTIN(X) \ ! DEF_BUILTIN (X, (const char *) NULL, NOT_BUILT_IN, BT_LAST, \ ! BT_LAST, false, false, false) ! ! /* If SMALL_STACK is defined, then `alloca' is only defined in its ! `__builtin' form. */ ! #if SMALL_STACK ! DEF_FALLBACK_BUILTIN(BUILT_IN_ALLOCA, ! "__builtin_alloca", ! BT_FN_PTR_SIZE) ! #else ! DEF_EXT_LIB_BUILTIN(BUILT_IN_ALLOCA, ! "__builtin_alloca", ! BT_FN_PTR_SIZE) ! #endif ! ! DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_ABS, ! "__builtin_abs", ! BT_FN_INT_INT) ! DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_LABS, ! "__builtin_labs", ! BT_FN_LONG_LONG) ! ! DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABS, ! "__builtin_fabs", ! BT_FN_DOUBLE_DOUBLE) ! DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABSF, ! "__builtin_fabsf", ! BT_FN_FLOAT_FLOAT) ! DEF_LIB_ALWAYS_BUILTIN(BUILT_IN_FABSL, ! "__builtin_fabsl", ! BT_FN_LONG_DOUBLE_LONG_DOUBLE) ! ! DEF_C99_BUILTIN(BUILT_IN_LLABS, ! "__builtin_llabs", ! BT_FN_LONGLONG_LONGLONG) ! DEF_C99_BUILTIN(BUILT_IN_IMAXABS, ! "__builtin_imaxabs", ! BT_FN_INTMAX_INTMAX) ! DEF_C99_BUILTIN(BUILT_IN_CONJ, ! "__builtin_conj", ! BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE) ! DEF_C99_BUILTIN(BUILT_IN_CONJF, ! "__builtin_conjf", ! BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT) ! DEF_C99_BUILTIN(BUILT_IN_CONJL, ! "__builtin_conjl", ! BT_FN_COMPLEX_LONG_DOUBLE_COMPLEX_LONG_DOUBLE) ! DEF_C99_BUILTIN(BUILT_IN_CREAL, ! "__builtin_creal", ! BT_FN_DOUBLE_COMPLEX_DOUBLE) ! DEF_C99_BUILTIN(BUILT_IN_CREALF, ! "__builtin_crealf", ! BT_FN_FLOAT_COMPLEX_FLOAT) ! DEF_C99_BUILTIN(BUILT_IN_CREALL, ! "__builtin_creall", ! BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE) ! DEF_C99_BUILTIN(BUILT_IN_CIMAG, ! "__builtin_cimag", ! BT_FN_DOUBLE_COMPLEX_DOUBLE) ! DEF_C99_BUILTIN(BUILT_IN_CIMAGF, ! "__builtin_cimagf", ! BT_FN_FLOAT_COMPLEX_FLOAT) ! DEF_C99_BUILTIN(BUILT_IN_CIMAGL, ! "__builtin_cimagl", ! BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE) ! ! DEF_UNUSED_BUILTIN(BUILT_IN_DIV) ! DEF_UNUSED_BUILTIN(BUILT_IN_LDIV) ! DEF_UNUSED_BUILTIN(BUILT_IN_FFLOOR) ! DEF_UNUSED_BUILTIN(BUILT_IN_FCEIL) ! DEF_UNUSED_BUILTIN(BUILT_IN_FMOD) ! DEF_UNUSED_BUILTIN(BUILT_IN_FREM) ! ! /* The system prototypes for `bzero' and `bcmp' functions have many ! variations, so don't specify parameters to avoid conflicts. The ! expand_* functions check the argument types anyway. */ ! DEF_BUILTIN (BUILT_IN_BZERO, ! "__builtin_bzero", ! BUILT_IN_NORMAL, ! BT_FN_VOID_TRAD_PTR_LEN, ! BT_FN_VOID_VAR, ! true, true, true) ! DEF_BUILTIN (BUILT_IN_BCMP, ! "__builtin_bcmp", ! BUILT_IN_NORMAL, ! BT_FN_INT_TRAD_CONST_PTR_TRAD_CONST_PTR_LEN, ! BT_FN_INT_VAR, ! true, true, true) ! ! DEF_EXT_LIB_BUILTIN(BUILT_IN_FFS, ! "__builtin_ffs", ! BT_FN_INT_INT) ! DEF_EXT_LIB_BUILTIN(BUILT_IN_INDEX, ! "__builtin_index", ! BT_FN_STRING_CONST_STRING_INT) ! DEF_EXT_LIB_BUILTIN(BUILT_IN_RINDEX, ! "__builtin_rindex", ! BT_FN_STRING_CONST_STRING_INT) ! ! DEF_LIB_BUILTIN(BUILT_IN_MEMCPY, ! "__builtin_memcpy", ! BT_FN_TRAD_PTR_PTR_CONST_PTR_SIZE) ! DEF_LIB_BUILTIN(BUILT_IN_MEMCMP, ! "__builtin_memcmp", ! BT_FN_INT_CONST_PTR_CONST_PTR_SIZE) ! DEF_LIB_BUILTIN(BUILT_IN_MEMSET, ! "__builtin_memset", ! BT_FN_TRAD_PTR_PTR_INT_SIZE) ! ! DEF_LIB_BUILTIN(BUILT_IN_STRCAT, ! "__builtin_strcat", ! BT_FN_STRING_STRING_CONST_STRING) ! DEF_LIB_BUILTIN(BUILT_IN_STRNCAT, ! "__builtin_strncat", ! BT_FN_STRING_STRING_CONST_STRING_SIZE) ! DEF_LIB_BUILTIN(BUILT_IN_STRCPY, ! "__builtin_strcpy", ! BT_FN_STRING_STRING_CONST_STRING) ! DEF_LIB_BUILTIN(BUILT_IN_STRNCPY, ! "__builtin_strncpy", ! BT_FN_STRING_STRING_CONST_STRING_SIZE) ! DEF_LIB_BUILTIN(BUILT_IN_STRCMP, ! "__builtin_strcmp", ! BT_FN_INT_CONST_STRING_CONST_STRING) ! DEF_LIB_BUILTIN(BUILT_IN_STRNCMP, ! "__builtin_strncmp", ! BT_FN_INT_CONST_STRING_CONST_STRING_SIZE) ! DEF_LIB_BUILTIN(BUILT_IN_STRLEN, ! "__builtin_strlen", ! BT_FN_LEN_CONST_STRING) ! DEF_LIB_BUILTIN(BUILT_IN_STRSTR, ! "__builtin_strstr", ! BT_FN_STRING_CONST_STRING_CONST_STRING) ! DEF_LIB_BUILTIN(BUILT_IN_STRPBRK, ! "__builtin_strpbrk", ! BT_FN_STRING_CONST_STRING_CONST_STRING) ! DEF_LIB_BUILTIN(BUILT_IN_STRSPN, ! "__builtin_strspn", ! BT_FN_SIZE_CONST_STRING_CONST_STRING) ! DEF_LIB_BUILTIN(BUILT_IN_STRCSPN, ! "__builtin_strcspn", ! BT_FN_SIZE_CONST_STRING_CONST_STRING) ! DEF_LIB_BUILTIN(BUILT_IN_STRCHR, ! "__builtin_strchr", ! BT_FN_STRING_CONST_STRING_INT) ! DEF_LIB_BUILTIN(BUILT_IN_STRRCHR, ! "__builtin_strrchr", ! BT_FN_STRING_CONST_STRING_INT) ! ! DEF_LIB_BUILTIN(BUILT_IN_SQRT, ! "__builtin_sqrt", ! BT_FN_DOUBLE_DOUBLE) ! DEF_LIB_BUILTIN(BUILT_IN_SIN, ! "__builtin_sin", ! BT_FN_DOUBLE_DOUBLE) ! DEF_LIB_BUILTIN(BUILT_IN_COS, ! "__builtin_cos", ! BT_FN_DOUBLE_DOUBLE) ! DEF_LIB_BUILTIN(BUILT_IN_SQRTF, ! "__builtin_sqrtf", ! BT_FN_FLOAT_FLOAT) ! DEF_LIB_BUILTIN(BUILT_IN_SINF, ! "__builtin_sinf", ! BT_FN_FLOAT_FLOAT) ! DEF_LIB_BUILTIN(BUILT_IN_COSF, ! "__builtin_cosf", ! BT_FN_FLOAT_FLOAT) ! DEF_LIB_BUILTIN(BUILT_IN_SQRTL, ! "__builtin_sqrtl", ! BT_FN_LONG_DOUBLE_LONG_DOUBLE) ! DEF_LIB_BUILTIN(BUILT_IN_SINL, ! "__builtin_sinl", ! BT_FN_LONG_DOUBLE_LONG_DOUBLE) ! DEF_LIB_BUILTIN(BUILT_IN_COSL, ! "__builtin_cosl", ! BT_FN_LONG_DOUBLE_LONG_DOUBLE) ! ! DEF_UNUSED_BUILTIN(BUILT_IN_GETEXP) ! DEF_UNUSED_BUILTIN(BUILT_IN_GETMAN) ! ! DEF_GCC_BUILTIN(BUILT_IN_SAVEREGS, ! "__builtin_saveregs", ! BT_FN_PTR_VAR) ! DEF_GCC_BUILTIN(BUILT_IN_CLASSIFY_TYPE, ! "__builtin_classify_type", ! BT_FN_INT_VAR) ! DEF_GCC_BUILTIN(BUILT_IN_NEXT_ARG, ! "__builtin_next_arg", ! BT_FN_PTR_VAR) ! DEF_GCC_BUILTIN(BUILT_IN_ARGS_INFO, ! "__builtin_args_info", ! BT_FN_INT_INT) ! DEF_GCC_BUILTIN(BUILT_IN_CONSTANT_P, ! "__builtin_constant_p", ! BT_FN_INT_VAR) ! DEF_GCC_BUILTIN(BUILT_IN_FRAME_ADDRESS, ! "__builtin_frame_address", ! BT_FN_PTR_UNSIGNED) ! DEF_GCC_BUILTIN(BUILT_IN_RETURN_ADDRESS, ! "__builtin_return_address", ! BT_FN_PTR_UNSIGNED) ! DEF_GCC_BUILTIN(BUILT_IN_AGGREGATE_INCOMING_ADDRESS, ! "__builtin_aggregate_incoming_address", ! BT_FN_PTR_VAR) ! DEF_GCC_BUILTIN(BUILT_IN_APPLY_ARGS, ! "__builtin_apply_args", ! BT_FN_PTR_VAR) ! DEF_GCC_BUILTIN(BUILT_IN_APPLY, ! "__builtin_apply", ! BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE) ! DEF_GCC_BUILTIN(BUILT_IN_RETURN, ! "__builtin_return", ! BT_FN_VOID_PTR) ! DEF_GCC_BUILTIN(BUILT_IN_SETJMP, ! "__builtin_setjmp", ! BT_FN_INT_PTR) ! DEF_GCC_BUILTIN(BUILT_IN_LONGJMP, ! "__builtin_longjmp", ! BT_FN_VOID_PTR_INT) ! DEF_GCC_BUILTIN(BUILT_IN_TRAP, ! "__builtin_trap", ! BT_FN_VOID) ! DEF_GCC_BUILTIN(BUILT_IN_PREFETCH, ! "__builtin_prefetch", ! BT_FN_VOID_CONST_PTR_VAR) ! ! /* Stdio builtins. */ ! DEF_FALLBACK_BUILTIN(BUILT_IN_PUTCHAR, ! "__builtin_putchar", ! BT_FN_INT_INT) ! DEF_FALLBACK_BUILTIN(BUILT_IN_PUTS, ! "__builtin_puts", ! BT_FN_INT_CONST_STRING) ! DEF_FRONT_END_LIB_BUILTIN(BUILT_IN_PRINTF, ! "__builtin_printf", ! BT_FN_INT_CONST_STRING_VAR) ! DEF_FALLBACK_BUILTIN(BUILT_IN_FPUTC, ! "__builtin_fputc", ! BT_FN_INT_INT_PTR) ! /* Declare the __builtin_ style with arguments and the regular style ! without them. We rely on stdio.h to supply the arguments for the ! regular style declaration since we had to use void* instead of ! FILE* in the __builtin_ prototype supplied here. */ ! DEF_BUILTIN (BUILT_IN_FPUTS, ! "__builtin_fputs", ! BUILT_IN_NORMAL, ! BT_FN_INT_CONST_STRING_PTR, ! BT_FN_INT_VAR, ! true, true, false) ! DEF_FALLBACK_BUILTIN(BUILT_IN_FWRITE, ! "__builtin_fwrite", ! BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR) ! DEF_FRONT_END_LIB_BUILTIN(BUILT_IN_FPRINTF, ! "__builtin_fprintf", ! BT_FN_INT_PTR_CONST_STRING_VAR) ! ! /* Stdio unlocked builtins. */ ! ! DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_PUTCHAR_UNLOCKED, ! "__builtin_putchar_unlocked", ! BT_FN_INT_INT) ! DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_PUTS_UNLOCKED, ! "__builtin_puts_unlocked", ! BT_FN_INT_CONST_STRING) ! DEF_EXT_FRONT_END_LIB_BUILTIN(BUILT_IN_PRINTF_UNLOCKED, ! "__builtin_printf_unlocked", ! BT_FN_INT_CONST_STRING_VAR) ! DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_FPUTC_UNLOCKED, ! "__builtin_fputc_unlocked", ! BT_FN_INT_INT_PTR) ! /* Declare the __builtin_ style with arguments and the regular style ! without them. We rely on stdio.h to supply the arguments for the ! regular style declaration since we had to use void* instead of ! FILE* in the __builtin_ prototype supplied here. */ ! DEF_BUILTIN (BUILT_IN_FPUTS_UNLOCKED, ! "__builtin_fputs_unlocked", ! BUILT_IN_NORMAL, ! BT_FN_INT_CONST_STRING_PTR, ! BT_FN_INT_VAR, ! true, true, true) ! DEF_EXT_FALLBACK_BUILTIN(BUILT_IN_FWRITE_UNLOCKED, ! "__builtin_fwrite_unlocked", ! BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR) ! DEF_EXT_FRONT_END_LIB_BUILTIN(BUILT_IN_FPRINTF_UNLOCKED, ! "__builtin_fprintf_unlocked", ! BT_FN_INT_PTR_CONST_STRING_VAR) /* ISO C99 floating point unordered comparisons. */ ! DEF_GCC_BUILTIN(BUILT_IN_ISGREATER, ! "__builtin_isgreater", ! BT_FN_INT_VAR) ! DEF_GCC_BUILTIN(BUILT_IN_ISGREATEREQUAL, ! "__builtin_isgreaterequal", ! BT_FN_INT_VAR) ! DEF_GCC_BUILTIN(BUILT_IN_ISLESS, ! "__builtin_isless", ! BT_FN_INT_VAR) ! DEF_GCC_BUILTIN(BUILT_IN_ISLESSEQUAL, ! "__builtin_islessequal", ! BT_FN_INT_VAR) ! DEF_GCC_BUILTIN(BUILT_IN_ISLESSGREATER, ! "__builtin_islessgreater", ! BT_FN_INT_VAR) ! DEF_GCC_BUILTIN(BUILT_IN_ISUNORDERED, ! "__builtin_isunordered", ! BT_FN_INT_VAR) ! /* Various hooks for the DWARF 2 __throw routine. */ ! DEF_GCC_BUILTIN(BUILT_IN_UNWIND_INIT, ! "__builtin_unwind_init", ! BT_FN_VOID) ! DEF_GCC_BUILTIN(BUILT_IN_DWARF_CFA, ! "__builtin_dwarf_cfa", ! BT_FN_PTR) ! DEF_GCC_BUILTIN(BUILT_IN_DWARF_FP_REGNUM, ! "__builtin_dwarf_fp_regnum", ! BT_FN_UNSIGNED) ! DEF_GCC_BUILTIN(BUILT_IN_INIT_DWARF_REG_SIZES, ! "__builtin_init_dwarf_reg_size_table", ! BT_FN_VOID_PTR) ! DEF_GCC_BUILTIN(BUILT_IN_FROB_RETURN_ADDR, ! "__builtin_frob_return_addr", ! BT_FN_PTR_PTR) ! DEF_GCC_BUILTIN(BUILT_IN_EXTRACT_RETURN_ADDR, ! "__builtin_extract_return_addr", ! BT_FN_PTR_PTR) ! DEF_GCC_BUILTIN(BUILT_IN_EH_RETURN, ! "__builtin_eh_return", ! BT_FN_VOID_PTRMODE_PTR) ! DEF_GCC_BUILTIN(BUILT_IN_EH_RETURN_DATA_REGNO, ! "__builtin_eh_return_data_regno", ! BT_FN_INT_INT) ! DEF_GCC_BUILTIN(BUILT_IN_VARARGS_START, ! "__builtin_varargs_start", ! BT_FN_VOID_VALIST_REF) ! DEF_GCC_BUILTIN(BUILT_IN_STDARG_START, ! "__builtin_stdarg_start", ! BT_FN_VOID_VALIST_REF_VAR) ! DEF_GCC_BUILTIN(BUILT_IN_VA_END, ! "__builtin_va_end", ! BT_FN_VOID_VALIST_REF) ! DEF_GCC_BUILTIN(BUILT_IN_VA_COPY, ! "__builtin_va_copy", ! BT_FN_VOID_VALIST_REF_VALIST_ARG) ! DEF_GCC_BUILTIN(BUILT_IN_EXPECT, ! "__builtin_expect", ! BT_FN_LONG_LONG_LONG) ! /* C++ extensions */ ! DEF_UNUSED_BUILTIN(BUILT_IN_NEW) ! DEF_UNUSED_BUILTIN(BUILT_IN_VEC_NEW) ! DEF_UNUSED_BUILTIN(BUILT_IN_DELETE) ! DEF_UNUSED_BUILTIN(BUILT_IN_VEC_DELETE) diff -Nrc3pad gcc-3.0.4/gcc/c-aux-info.c gcc-3.1/gcc/c-aux-info.c *** gcc-3.0.4/gcc/c-aux-info.c Tue Mar 21 18:10:38 2000 --- gcc-3.1/gcc/c-aux-info.c Mon Sep 24 22:38:22 2001 *************** *** 5,26 **** 1999, 2000 Free Software Foundation, Inc. Contributed by Ron Guilmette (rfg@segfault.us.com). ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" #include "system.h" --- 5,26 ---- 1999, 2000 Free Software Foundation, Inc. Contributed by Ron Guilmette (rfg@segfault.us.com). ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" #include "system.h" *************** typedef enum formals_style_enum formals_ *** 39,45 **** static const char *data_type; ! static char *affix_data_type PARAMS ((const char *)); static const char *gen_formal_list_for_type PARAMS ((tree, formals_style)); static int deserves_ellipsis PARAMS ((tree)); static const char *gen_formal_list_for_func_def PARAMS ((tree, formals_style)); --- 39,45 ---- static const char *data_type; ! static char *affix_data_type PARAMS ((const char *)) ATTRIBUTE_MALLOC; static const char *gen_formal_list_for_type PARAMS ((tree, formals_style)); static int deserves_ellipsis PARAMS ((tree)); static const char *gen_formal_list_for_func_def PARAMS ((tree, formals_style)); *************** static char * *** 64,76 **** affix_data_type (param) const char *param; { ! char *type_or_decl = (char *) alloca (strlen (param) + 1); char *p = type_or_decl; char *qualifiers_then_data_type; char saved; - strcpy (type_or_decl, param); - /* Skip as many leading const's or volatile's as there are. */ for (;;) --- 64,74 ---- affix_data_type (param) const char *param; { ! char *const type_or_decl = ASTRDUP (param); char *p = type_or_decl; char *qualifiers_then_data_type; char saved; /* Skip as many leading const's or volatile's as there are. */ for (;;) *************** affix_data_type (param) *** 92,104 **** add a blank after the data-type of course. */ if (p == type_or_decl) ! return concat (data_type, " ", type_or_decl, NULL_PTR); saved = *p; *p = '\0'; ! qualifiers_then_data_type = concat (type_or_decl, data_type, NULL_PTR); *p = saved; ! return concat (qualifiers_then_data_type, " ", p, NULL_PTR); } /* Given a tree node which represents some "function type", generate the --- 90,103 ---- add a blank after the data-type of course. */ if (p == type_or_decl) ! return concat (data_type, " ", type_or_decl, NULL); saved = *p; *p = '\0'; ! qualifiers_then_data_type = concat (type_or_decl, data_type, NULL); *p = saved; ! return reconcat (qualifiers_then_data_type, ! qualifiers_then_data_type, " ", p, NULL); } /* Given a tree node which represents some "function type", generate the *************** gen_formal_list_for_type (fntype, style) *** 125,137 **** const char *this_type; if (*formal_list) ! formal_list = concat (formal_list, ", ", NULL_PTR); this_type = gen_type ("", TREE_VALUE (formal_type), ansi); formal_list = ((strlen (this_type)) ! ? concat (formal_list, affix_data_type (this_type), NULL_PTR) ! : concat (formal_list, data_type, NULL_PTR)); formal_type = TREE_CHAIN (formal_type); } --- 124,136 ---- const char *this_type; if (*formal_list) ! formal_list = concat (formal_list, ", ", NULL); this_type = gen_type ("", TREE_VALUE (formal_type), ansi); formal_list = ((strlen (this_type)) ! ? concat (formal_list, affix_data_type (this_type), NULL) ! : concat (formal_list, data_type, NULL)); formal_type = TREE_CHAIN (formal_type); } *************** gen_formal_list_for_type (fntype, style) *** 180,189 **** petered out to a NULL (i.e. without being terminated by a void_type_node) then we need to tack on an ellipsis. */ if (!formal_type) ! formal_list = concat (formal_list, ", ...", NULL_PTR); } ! return concat (" (", formal_list, ")", NULL_PTR); } /* For the generation of an ANSI prototype for a function definition, we have --- 179,188 ---- petered out to a NULL (i.e. without being terminated by a void_type_node) then we need to tack on an ellipsis. */ if (!formal_type) ! formal_list = concat (formal_list, ", ...", NULL); } ! return concat (" (", formal_list, ")", NULL); } /* For the generation of an ANSI prototype for a function definition, we have *************** gen_formal_list_for_func_def (fndecl, st *** 242,264 **** const char *this_formal; if (*formal_list && ((style == ansi) || (style == k_and_r_names))) ! formal_list = concat (formal_list, ", ", NULL_PTR); this_formal = gen_decl (formal_decl, 0, style); if (style == k_and_r_decls) ! formal_list = concat (formal_list, this_formal, "; ", NULL_PTR); else ! formal_list = concat (formal_list, this_formal, NULL_PTR); formal_decl = TREE_CHAIN (formal_decl); } if (style == ansi) { if (!DECL_ARGUMENTS (fndecl)) ! formal_list = concat (formal_list, "void", NULL_PTR); if (deserves_ellipsis (TREE_TYPE (fndecl))) ! formal_list = concat (formal_list, ", ...", NULL_PTR); } if ((style == ansi) || (style == k_and_r_names)) ! formal_list = concat (" (", formal_list, ")", NULL_PTR); return formal_list; } --- 241,263 ---- const char *this_formal; if (*formal_list && ((style == ansi) || (style == k_and_r_names))) ! formal_list = concat (formal_list, ", ", NULL); this_formal = gen_decl (formal_decl, 0, style); if (style == k_and_r_decls) ! formal_list = concat (formal_list, this_formal, "; ", NULL); else ! formal_list = concat (formal_list, this_formal, NULL); formal_decl = TREE_CHAIN (formal_decl); } if (style == ansi) { if (!DECL_ARGUMENTS (fndecl)) ! formal_list = concat (formal_list, "void", NULL); if (deserves_ellipsis (TREE_TYPE (fndecl))) ! formal_list = concat (formal_list, ", ...", NULL); } if ((style == ansi) || (style == k_and_r_names)) ! formal_list = concat (" (", formal_list, ")", NULL); return formal_list; } *************** gen_type (ret_val, t, style) *** 320,333 **** { case POINTER_TYPE: if (TYPE_READONLY (t)) ! ret_val = concat ("const ", ret_val, NULL_PTR); if (TYPE_VOLATILE (t)) ! ret_val = concat ("volatile ", ret_val, NULL_PTR); ! ret_val = concat ("*", ret_val, NULL_PTR); if (TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE || TREE_CODE (TREE_TYPE (t)) == FUNCTION_TYPE) ! ret_val = concat ("(", ret_val, ")", NULL_PTR); ret_val = gen_type (ret_val, TREE_TYPE (t), style); --- 319,332 ---- { case POINTER_TYPE: if (TYPE_READONLY (t)) ! ret_val = concat ("const ", ret_val, NULL); if (TYPE_VOLATILE (t)) ! ret_val = concat ("volatile ", ret_val, NULL); ! ret_val = concat ("*", ret_val, NULL); if (TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE || TREE_CODE (TREE_TYPE (t)) == FUNCTION_TYPE) ! ret_val = concat ("(", ret_val, ")", NULL); ret_val = gen_type (ret_val, TREE_TYPE (t), style); *************** gen_type (ret_val, t, style) *** 335,351 **** case ARRAY_TYPE: if (!COMPLETE_TYPE_P (t) || TREE_CODE (TYPE_SIZE (t)) != INTEGER_CST) ! ret_val = gen_type (concat (ret_val, "[]", NULL_PTR), TREE_TYPE (t), style); else if (int_size_in_bytes (t) == 0) ! ret_val = gen_type (concat (ret_val, "[0]", NULL_PTR), TREE_TYPE (t), style); else { int size = (int_size_in_bytes (t) / int_size_in_bytes (TREE_TYPE (t))); char buff[10]; sprintf (buff, "[%d]", size); ! ret_val = gen_type (concat (ret_val, buff, NULL_PTR), TREE_TYPE (t), style); } break; --- 334,350 ---- case ARRAY_TYPE: if (!COMPLETE_TYPE_P (t) || TREE_CODE (TYPE_SIZE (t)) != INTEGER_CST) ! ret_val = gen_type (concat (ret_val, "[]", NULL), TREE_TYPE (t), style); else if (int_size_in_bytes (t) == 0) ! ret_val = gen_type (concat (ret_val, "[0]", NULL), TREE_TYPE (t), style); else { int size = (int_size_in_bytes (t) / int_size_in_bytes (TREE_TYPE (t))); char buff[10]; sprintf (buff, "[%d]", size); ! ret_val = gen_type (concat (ret_val, buff, NULL), TREE_TYPE (t), style); } break; *************** gen_type (ret_val, t, style) *** 353,359 **** case FUNCTION_TYPE: ret_val = gen_type (concat (ret_val, gen_formal_list_for_type (t, style), ! NULL_PTR), TREE_TYPE (t), style); break; --- 352,358 ---- case FUNCTION_TYPE: ret_val = gen_type (concat (ret_val, gen_formal_list_for_type (t, style), ! NULL), TREE_TYPE (t), style); break; *************** gen_type (ret_val, t, style) *** 382,394 **** while (chain_p) { data_type = concat (data_type, gen_decl (chain_p, 0, ansi), ! NULL_PTR); chain_p = TREE_CHAIN (chain_p); ! data_type = concat (data_type, "; ", NULL_PTR); } ! data_type = concat ("{ ", data_type, "}", NULL_PTR); } ! data_type = concat ("struct ", data_type, NULL_PTR); break; case UNION_TYPE: --- 381,393 ---- while (chain_p) { data_type = concat (data_type, gen_decl (chain_p, 0, ansi), ! NULL); chain_p = TREE_CHAIN (chain_p); ! data_type = concat (data_type, "; ", NULL); } ! data_type = concat ("{ ", data_type, "}", NULL); } ! data_type = concat ("struct ", data_type, NULL); break; case UNION_TYPE: *************** gen_type (ret_val, t, style) *** 401,413 **** while (chain_p) { data_type = concat (data_type, gen_decl (chain_p, 0, ansi), ! NULL_PTR); chain_p = TREE_CHAIN (chain_p); ! data_type = concat (data_type, "; ", NULL_PTR); } ! data_type = concat ("{ ", data_type, "}", NULL_PTR); } ! data_type = concat ("union ", data_type, NULL_PTR); break; case ENUMERAL_TYPE: --- 400,412 ---- while (chain_p) { data_type = concat (data_type, gen_decl (chain_p, 0, ansi), ! NULL); chain_p = TREE_CHAIN (chain_p); ! data_type = concat (data_type, "; ", NULL); } ! data_type = concat ("{ ", data_type, "}", NULL); } ! data_type = concat ("union ", data_type, NULL); break; case ENUMERAL_TYPE: *************** gen_type (ret_val, t, style) *** 420,433 **** while (chain_p) { data_type = concat (data_type, ! IDENTIFIER_POINTER (TREE_PURPOSE (chain_p)), NULL_PTR); chain_p = TREE_CHAIN (chain_p); if (chain_p) ! data_type = concat (data_type, ", ", NULL_PTR); } ! data_type = concat ("{ ", data_type, " }", NULL_PTR); } ! data_type = concat ("enum ", data_type, NULL_PTR); break; case TYPE_DECL: --- 419,432 ---- while (chain_p) { data_type = concat (data_type, ! IDENTIFIER_POINTER (TREE_PURPOSE (chain_p)), NULL); chain_p = TREE_CHAIN (chain_p); if (chain_p) ! data_type = concat (data_type, ", ", NULL); } ! data_type = concat ("{ ", data_type, " }", NULL); } ! data_type = concat ("enum ", data_type, NULL); break; case TYPE_DECL: *************** gen_type (ret_val, t, style) *** 439,445 **** /* Normally, `unsigned' is part of the deal. Not so if it comes with a type qualifier. */ if (TREE_UNSIGNED (t) && TYPE_QUALS (t)) ! data_type = concat ("unsigned ", data_type, NULL_PTR); break; case REAL_TYPE: --- 438,444 ---- /* Normally, `unsigned' is part of the deal. Not so if it comes with a type qualifier. */ if (TREE_UNSIGNED (t) && TYPE_QUALS (t)) ! data_type = concat ("unsigned ", data_type, NULL); break; case REAL_TYPE: *************** gen_type (ret_val, t, style) *** 459,469 **** } } if (TYPE_READONLY (t)) ! ret_val = concat ("const ", ret_val, NULL_PTR); if (TYPE_VOLATILE (t)) ! ret_val = concat ("volatile ", ret_val, NULL_PTR); if (TYPE_RESTRICT (t)) ! ret_val = concat ("restrict ", ret_val, NULL_PTR); return ret_val; } --- 458,468 ---- } } if (TYPE_READONLY (t)) ! ret_val = concat ("const ", ret_val, NULL); if (TYPE_VOLATILE (t)) ! ret_val = concat ("volatile ", ret_val, NULL); if (TYPE_RESTRICT (t)) ! ret_val = concat ("restrict ", ret_val, NULL); return ret_val; } *************** gen_decl (decl, is_func_definition, styl *** 505,513 **** generate the qualifiers here. */ if (TREE_THIS_VOLATILE (decl)) ! ret_val = concat ("volatile ", ret_val, NULL_PTR); if (TREE_READONLY (decl)) ! ret_val = concat ("const ", ret_val, NULL_PTR); data_type = ""; --- 504,512 ---- generate the qualifiers here. */ if (TREE_THIS_VOLATILE (decl)) ! ret_val = concat ("volatile ", ret_val, NULL); if (TREE_READONLY (decl)) ! ret_val = concat ("const ", ret_val, NULL); data_type = ""; *************** gen_decl (decl, is_func_definition, styl *** 526,532 **** if (TREE_CODE (decl) == FUNCTION_DECL && is_func_definition) { ret_val = concat (ret_val, gen_formal_list_for_func_def (decl, ansi), ! NULL_PTR); /* Since we have already added in the formals list stuff, here we don't add the whole "type" of the function we are considering (which --- 525,531 ---- if (TREE_CODE (decl) == FUNCTION_DECL && is_func_definition) { ret_val = concat (ret_val, gen_formal_list_for_func_def (decl, ansi), ! NULL); /* Since we have already added in the formals list stuff, here we don't add the whole "type" of the function we are considering (which *************** gen_decl (decl, is_func_definition, styl *** 543,553 **** ret_val = affix_data_type (ret_val); if (TREE_CODE (decl) != FUNCTION_DECL && DECL_REGISTER (decl)) ! ret_val = concat ("register ", ret_val, NULL_PTR); if (TREE_PUBLIC (decl)) ! ret_val = concat ("extern ", ret_val, NULL_PTR); if (TREE_CODE (decl) == FUNCTION_DECL && !TREE_PUBLIC (decl)) ! ret_val = concat ("static ", ret_val, NULL_PTR); return ret_val; } --- 542,552 ---- ret_val = affix_data_type (ret_val); if (TREE_CODE (decl) != FUNCTION_DECL && DECL_REGISTER (decl)) ! ret_val = concat ("register ", ret_val, NULL); if (TREE_PUBLIC (decl)) ! ret_val = concat ("extern ", ret_val, NULL); if (TREE_CODE (decl) == FUNCTION_DECL && !TREE_PUBLIC (decl)) ! ret_val = concat ("static ", ret_val, NULL); return ret_val; } diff -Nrc3pad gcc-3.0.4/gcc/c-common.c gcc-3.1/gcc/c-common.c *** gcc-3.0.4/gcc/c-common.c Fri Feb 1 00:31:52 2002 --- gcc-3.1/gcc/c-common.c Fri Apr 26 18:10:32 2002 *************** *** 1,23 **** /* Subroutines shared by all languages that are variants of C. ! Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 ! Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" #include "system.h" --- 1,23 ---- /* Subroutines shared by all languages that are variants of C. ! Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, ! 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" #include "system.h" *************** Boston, MA 02111-1307, USA. */ *** 30,38 **** --- 30,42 ---- #include "ggc.h" #include "expr.h" #include "c-common.h" + #include "tree-inline.h" + #include "diagnostic.h" #include "tm_p.h" #include "obstack.h" + #include "c-lex.h" #include "cpplib.h" + #include "target.h" cpp_reader *parse_in; /* Declared in c-lex.h. */ #undef WCHAR_TYPE_SIZE *************** cpp_reader *parse_in; /* Declared in c- *** 76,81 **** --- 80,89 ---- : "long long unsigned int")) #endif + /* The variant of the C language being processed. */ + + enum c_language_kind c_language; + /* The following symbols are subsumed in the c_global_trees array, and listed here individually for documentation purposes. *************** cpp_reader *parse_in; /* Declared in c- *** 152,174 **** tree default_function_type; - Function types `int (int)', etc. - - tree int_ftype_int; - tree void_ftype; - tree void_ftype_ptr; - tree int_ftype_int; - tree ptr_ftype_sizetype; - A VOID_TYPE node, packaged in a TREE_LIST. tree void_list_node; ! The identifiers __FUNCTION__, __PRETTY_FUNCTION__, and __func__. ! tree function_id_node; ! tree pretty_function_id_node; ! tree func_id_node; */ --- 160,180 ---- tree default_function_type; A VOID_TYPE node, packaged in a TREE_LIST. tree void_list_node; ! The lazily created VAR_DECLs for __FUNCTION__, __PRETTY_FUNCTION__, ! and __func__. (C doesn't generate __FUNCTION__ and__PRETTY_FUNCTION__ ! VAR_DECLS, but C++ does.) ! tree function_name_decl_node; ! tree pretty_function_name_decl_node; ! tree c99_function_name_decl_node; ! ! Stack of nested function name VAR_DECLs. ! ! tree saved_function_name_decls; */ *************** int flag_short_wchar; *** 195,205 **** int warn_sequence_point; /* The elements of `ridpointers' are identifier nodes for the reserved type names and storage classes. It is indexed by a RID_... value. */ tree *ridpointers; ! tree (*make_fname_decl) PARAMS ((tree, const char *, int)); /* If non-NULL, the address of a language-specific function that returns 1 for language-specific statement codes. */ --- 201,214 ---- int warn_sequence_point; + /* Nonzero means to warn about compile-time division by zero. */ + int warn_div_by_zero = 1; + /* The elements of `ridpointers' are identifier nodes for the reserved type names and storage classes. It is indexed by a RID_... value. */ tree *ridpointers; ! tree (*make_fname_decl) PARAMS ((tree, int)); /* If non-NULL, the address of a language-specific function that returns 1 for language-specific statement codes. */ *************** int (*lang_statement_code_p) P *** 209,232 **** any action required right before expand_function_end is called. */ void (*lang_expand_function_end) PARAMS ((void)); - /* If this variable is defined to a non-NULL value, it will be called - after the file has been completely parsed. */ - void (*back_end_hook) PARAMS ((tree)); - /* Nonzero means the expression being parsed will never be evaluated. This is a count, since unevaluated expressions can nest. */ int skip_evaluation; ! enum attrs {A_PACKED, A_NOCOMMON, A_COMMON, A_NORETURN, A_CONST, A_T_UNION, ! A_NO_CHECK_MEMORY_USAGE, A_NO_INSTRUMENT_FUNCTION, ! A_CONSTRUCTOR, A_DESTRUCTOR, A_MODE, A_SECTION, A_ALIGNED, ! A_UNUSED, A_FORMAT, A_FORMAT_ARG, A_WEAK, A_ALIAS, A_MALLOC, ! A_NO_LIMIT_STACK, A_PURE}; - static void add_attribute PARAMS ((enum attrs, const char *, - int, int, int)); - static void init_attributes PARAMS ((void)); - static int default_valid_lang_attribute PARAMS ((tree, tree, tree, tree)); static int constant_fits_type_p PARAMS ((tree, tree)); /* Keep a stack of if statements. We record the number of compound --- 218,248 ---- any action required right before expand_function_end is called. */ void (*lang_expand_function_end) PARAMS ((void)); /* Nonzero means the expression being parsed will never be evaluated. This is a count, since unevaluated expressions can nest. */ int skip_evaluation; ! /* Information about how a function name is generated. */ ! struct fname_var_t ! { ! tree *const decl; /* pointer to the VAR_DECL. */ ! const unsigned rid; /* RID number for the identifier. */ ! const int pretty; /* How pretty is it? */ ! }; ! ! /* The three ways of getting then name of the current function. */ ! ! const struct fname_var_t fname_vars[] = ! { ! /* C99 compliant __func__, must be first. */ ! {&c99_function_name_decl_node, RID_C99_FUNCTION_NAME, 0}, ! /* GCC __FUNCTION__ compliant. */ ! {&function_name_decl_node, RID_FUNCTION_NAME, 0}, ! /* GCC __PRETTY_FUNCTION__ compliant. */ ! {&pretty_function_name_decl_node, RID_PRETTY_FUNCTION_NAME, 1}, ! {NULL, 0, 0}, ! }; static int constant_fits_type_p PARAMS ((tree, tree)); /* Keep a stack of if statements. We record the number of compound *************** c_expand_start_cond (cond, compstmt_coun *** 270,281 **** if (if_stack_space == 0) { if_stack_space = 10; ! if_stack = (if_elt *)xmalloc (10 * sizeof (if_elt)); } else if (if_stack_space == if_stack_pointer) { if_stack_space += 10; ! if_stack = (if_elt *)xrealloc (if_stack, if_stack_space * sizeof (if_elt)); } IF_COND (if_stmt) = cond; --- 286,297 ---- if (if_stack_space == 0) { if_stack_space = 10; ! if_stack = (if_elt *) xmalloc (10 * sizeof (if_elt)); } else if (if_stack_space == if_stack_pointer) { if_stack_space += 10; ! if_stack = (if_elt *) xrealloc (if_stack, if_stack_space * sizeof (if_elt)); } IF_COND (if_stmt) = cond; *************** c_finish_while_stmt_cond (cond, while_st *** 383,416 **** WHILE_COND (while_stmt) = cond; } ! /* Make bindings for __FUNCTION__, __PRETTY_FUNCTION__, and __func__. */ void ! declare_function_name () { ! const char *name, *printable_name; ! if (current_function_decl == NULL) { ! name = ""; ! printable_name = "top level"; } else { ! /* Allow functions to be nameless (such as artificial ones). */ ! if (DECL_NAME (current_function_decl)) ! name = IDENTIFIER_POINTER (DECL_NAME (current_function_decl)); ! else ! name = ""; ! printable_name = (*decl_printable_name) (current_function_decl, 2); ! /* ISO C99 defines __func__, which is a variable, not a string ! constant, and which is not a defined symbol at file scope. */ ! (*make_fname_decl) (func_id_node, name, 0); } ! (*make_fname_decl) (function_id_node, name, 0); ! (*make_fname_decl) (pretty_function_id_node, printable_name, 1); } /* Given a chain of STRING_CST nodes, --- 399,555 ---- WHILE_COND (while_stmt) = cond; } ! /* Push current bindings for the function name VAR_DECLS. */ void ! start_fname_decls () { ! unsigned ix; ! tree saved = NULL_TREE; ! ! for (ix = 0; fname_vars[ix].decl; ix++) ! { ! tree decl = *fname_vars[ix].decl; ! if (decl) ! { ! saved = tree_cons (decl, build_int_2 (ix, 0), saved); ! *fname_vars[ix].decl = NULL_TREE; ! } ! } ! if (saved || saved_function_name_decls) ! /* Normally they'll have been NULL, so only push if we've got a ! stack, or they are non-NULL. */ ! saved_function_name_decls = tree_cons (saved, NULL_TREE, ! saved_function_name_decls); ! } ! ! /* Finish up the current bindings, adding them into the ! current function's statement tree. This is done by wrapping the ! function's body in a COMPOUND_STMT containing these decls too. This ! must be done _before_ finish_stmt_tree is called. If there is no ! current function, we must be at file scope and no statements are ! involved. Pop the previous bindings. */ ! ! void ! finish_fname_decls () ! { ! unsigned ix; ! tree body = NULL_TREE; ! tree stack = saved_function_name_decls; ! ! for (; stack && TREE_VALUE (stack); stack = TREE_CHAIN (stack)) ! body = chainon (TREE_VALUE (stack), body); ! ! if (body) { ! /* They were called into existence, so add to statement tree. */ ! body = chainon (body, ! TREE_CHAIN (DECL_SAVED_TREE (current_function_decl))); ! body = build_stmt (COMPOUND_STMT, body); ! ! COMPOUND_STMT_NO_SCOPE (body) = 1; ! TREE_CHAIN (DECL_SAVED_TREE (current_function_decl)) = body; } + + for (ix = 0; fname_vars[ix].decl; ix++) + *fname_vars[ix].decl = NULL_TREE; + + if (stack) + { + /* We had saved values, restore them. */ + tree saved; + + for (saved = TREE_PURPOSE (stack); saved; saved = TREE_CHAIN (saved)) + { + tree decl = TREE_PURPOSE (saved); + unsigned ix = TREE_INT_CST_LOW (TREE_VALUE (saved)); + + *fname_vars[ix].decl = decl; + } + stack = TREE_CHAIN (stack); + } + saved_function_name_decls = stack; + } + + /* Return the text name of the current function, suitable prettified + by PRETTY_P. */ + + const char * + fname_as_string (pretty_p) + int pretty_p; + { + const char *name = NULL; + + if (pretty_p) + name = (current_function_decl + ? (*decl_printable_name) (current_function_decl, 2) + : "top level"); + else if (current_function_decl && DECL_NAME (current_function_decl)) + name = IDENTIFIER_POINTER (DECL_NAME (current_function_decl)); else + name = ""; + return name; + } + + /* Return the text name of the current function, formatted as + required by the supplied RID value. */ + + const char * + fname_string (rid) + unsigned rid; + { + unsigned ix; + + for (ix = 0; fname_vars[ix].decl; ix++) + if (fname_vars[ix].rid == rid) + break; + return fname_as_string (fname_vars[ix].pretty); + } + + /* Return the VAR_DECL for a const char array naming the current + function. If the VAR_DECL has not yet been created, create it + now. RID indicates how it should be formatted and IDENTIFIER_NODE + ID is its name (unfortunately C and C++ hold the RID values of + keywords in different places, so we can't derive RID from ID in + this language independent code. */ + + tree + fname_decl (rid, id) + unsigned rid; + tree id; + { + unsigned ix; + tree decl = NULL_TREE; + + for (ix = 0; fname_vars[ix].decl; ix++) + if (fname_vars[ix].rid == rid) + break; + + decl = *fname_vars[ix].decl; + if (!decl) { ! tree saved_last_tree = last_tree; ! ! decl = (*make_fname_decl) (id, fname_vars[ix].pretty); ! if (last_tree != saved_last_tree) ! { ! /* We created some statement tree for the decl. This belongs ! at the start of the function, so remove it now and reinsert ! it after the function is complete. */ ! tree stmts = TREE_CHAIN (saved_last_tree); ! TREE_CHAIN (saved_last_tree) = NULL_TREE; ! last_tree = saved_last_tree; ! saved_function_name_decls = tree_cons (decl, stmts, ! saved_function_name_decls); ! } ! *fname_vars[ix].decl = decl; } + if (!ix && !current_function_decl) + pedwarn_with_decl (decl, "`%s' is not defined outside of function scope"); ! return decl; } /* Given a chain of STRING_CST nodes, *************** tree *** 421,428 **** combine_strings (strings) tree strings; { ! register tree value, t; ! register int length = 1; int wide_length = 0; int wide_flag = 0; int wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT; --- 560,567 ---- combine_strings (strings) tree strings; { ! tree value, t; ! int length = 1; int wide_length = 0; int wide_flag = 0; int wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT; *************** combine_strings (strings) *** 432,438 **** if (TREE_CHAIN (strings)) { /* More than one in the chain, so concatenate. */ ! register char *p, *q; /* Don't include the \0 at the end of each substring, except for the last one. --- 571,577 ---- if (TREE_CHAIN (strings)) { /* More than one in the chain, so concatenate. */ ! char *p, *q; /* Don't include the \0 at the end of each substring, except for the last one. *************** combine_strings (strings) *** 448,454 **** { length += (TREE_STRING_LENGTH (t) - 1); if (C_ARTIFICIAL_STRING_P (t) && !in_system_header) ! warning ("concatenation of string literals with __FUNCTION__ is deprecated. This feature will be removed in future"); } } --- 587,593 ---- { length += (TREE_STRING_LENGTH (t) - 1); if (C_ARTIFICIAL_STRING_P (t) && !in_system_header) ! warning ("concatenation of string literals with __FUNCTION__ is deprecated"); } } *************** combine_strings (strings) *** 457,463 **** if (wide_flag) length = length * wchar_bytes + wide_length; ! p = alloca (length); /* Copy the individual strings into the new combined string. If the combined string is wide, convert the chars to ints --- 596,602 ---- if (wide_flag) length = length * wchar_bytes + wide_length; ! p = xmalloc (length); /* Copy the individual strings into the new combined string. If the combined string is wide, convert the chars to ints *************** combine_strings (strings) *** 476,490 **** } else { ! int i; for (i = 0; i < len; i++) { ! if (WCHAR_TYPE_SIZE == HOST_BITS_PER_SHORT) ! ((short *) q)[i] = TREE_STRING_POINTER (t)[i]; else ! ((int *) q)[i] = TREE_STRING_POINTER (t)[i]; } - q += len * wchar_bytes; } } if (wide_flag) --- 615,636 ---- } else { ! int i, j; for (i = 0; i < len; i++) { ! if (BYTES_BIG_ENDIAN) ! { ! for (j=0; j<(WCHAR_TYPE_SIZE / BITS_PER_UNIT)-1; j++) ! *q++ = 0; ! *q++ = TREE_STRING_POINTER (t)[i]; ! } else ! { ! *q++ = TREE_STRING_POINTER (t)[i]; ! for (j=0; j<(WCHAR_TYPE_SIZE / BITS_PER_UNIT)-1; j++) ! *q++ = 0; ! } } } } if (wide_flag) *************** combine_strings (strings) *** 497,502 **** --- 643,649 ---- *q = 0; value = build_string (length, p); + free (p); } else { *************** combine_strings (strings) *** 538,1167 **** return value; } - /* To speed up processing of attributes, we maintain an array of - IDENTIFIER_NODES and the corresponding attribute types. */ - - /* Array to hold attribute information. */ - - static struct {enum attrs id; tree name; int min, max, decl_req;} attrtab[50]; - - static int attrtab_idx = 0; - - /* Add an entry to the attribute table above. */ - - static void - add_attribute (id, string, min_len, max_len, decl_req) - enum attrs id; - const char *string; - int min_len, max_len; - int decl_req; - { - char buf[100]; - - attrtab[attrtab_idx].id = id; - attrtab[attrtab_idx].name = get_identifier (string); - attrtab[attrtab_idx].min = min_len; - attrtab[attrtab_idx].max = max_len; - attrtab[attrtab_idx++].decl_req = decl_req; - - sprintf (buf, "__%s__", string); - - attrtab[attrtab_idx].id = id; - attrtab[attrtab_idx].name = get_identifier (buf); - attrtab[attrtab_idx].min = min_len; - attrtab[attrtab_idx].max = max_len; - attrtab[attrtab_idx++].decl_req = decl_req; - } - - /* Initialize attribute table. */ - - static void - init_attributes () - { - add_attribute (A_PACKED, "packed", 0, 0, 0); - add_attribute (A_NOCOMMON, "nocommon", 0, 0, 1); - add_attribute (A_COMMON, "common", 0, 0, 1); - add_attribute (A_NORETURN, "noreturn", 0, 0, 1); - add_attribute (A_NORETURN, "volatile", 0, 0, 1); - add_attribute (A_UNUSED, "unused", 0, 0, 0); - add_attribute (A_CONST, "const", 0, 0, 1); - add_attribute (A_T_UNION, "transparent_union", 0, 0, 0); - add_attribute (A_CONSTRUCTOR, "constructor", 0, 0, 1); - add_attribute (A_DESTRUCTOR, "destructor", 0, 0, 1); - add_attribute (A_MODE, "mode", 1, 1, 1); - add_attribute (A_SECTION, "section", 1, 1, 1); - add_attribute (A_ALIGNED, "aligned", 0, 1, 0); - add_attribute (A_FORMAT, "format", 3, 3, 1); - add_attribute (A_FORMAT_ARG, "format_arg", 1, 1, 1); - add_attribute (A_WEAK, "weak", 0, 0, 1); - add_attribute (A_ALIAS, "alias", 1, 1, 1); - add_attribute (A_NO_INSTRUMENT_FUNCTION, "no_instrument_function", 0, 0, 1); - add_attribute (A_NO_CHECK_MEMORY_USAGE, "no_check_memory_usage", 0, 0, 1); - add_attribute (A_MALLOC, "malloc", 0, 0, 1); - add_attribute (A_NO_LIMIT_STACK, "no_stack_limit", 0, 0, 1); - add_attribute (A_PURE, "pure", 0, 0, 1); - } - - /* Default implementation of valid_lang_attribute, below. By default, there - are no language-specific attributes. */ - - static int - default_valid_lang_attribute (attr_name, attr_args, decl, type) - tree attr_name ATTRIBUTE_UNUSED; - tree attr_args ATTRIBUTE_UNUSED; - tree decl ATTRIBUTE_UNUSED; - tree type ATTRIBUTE_UNUSED; - { - return 0; - } - - /* Return a 1 if ATTR_NAME and ATTR_ARGS denote a valid language-specific - attribute for either declaration DECL or type TYPE and 0 otherwise. */ - - int (*valid_lang_attribute) PARAMS ((tree, tree, tree, tree)) - = default_valid_lang_attribute; - - /* Process the attributes listed in ATTRIBUTES and PREFIX_ATTRIBUTES - and install them in NODE, which is either a DECL (including a TYPE_DECL) - or a TYPE. PREFIX_ATTRIBUTES can appear after the declaration specifiers - and declaration modifiers but before the declaration proper. */ - - void - decl_attributes (node, attributes, prefix_attributes) - tree node, attributes, prefix_attributes; - { - tree decl = 0, type = 0; - int is_type = 0; - tree a; - - if (attrtab_idx == 0) - init_attributes (); - - if (DECL_P (node)) - { - decl = node; - type = TREE_TYPE (decl); - is_type = TREE_CODE (node) == TYPE_DECL; - } - else if (TYPE_P (node)) - type = node, is_type = 1; - - #ifdef PRAGMA_INSERT_ATTRIBUTES - /* If the code in c-pragma.c wants to insert some attributes then - allow it to do so. Do this before allowing machine back ends to - insert attributes, so that they have the opportunity to override - anything done here. */ - PRAGMA_INSERT_ATTRIBUTES (node, & attributes, & prefix_attributes); - #endif - - #ifdef INSERT_ATTRIBUTES - INSERT_ATTRIBUTES (node, & attributes, & prefix_attributes); - #endif - - attributes = chainon (prefix_attributes, attributes); - - for (a = attributes; a; a = TREE_CHAIN (a)) - { - tree name = TREE_PURPOSE (a); - tree args = TREE_VALUE (a); - int i; - enum attrs id; - - for (i = 0; i < attrtab_idx; i++) - if (attrtab[i].name == name) - break; - - if (i == attrtab_idx) - { - if (! valid_machine_attribute (name, args, decl, type) - && ! (* valid_lang_attribute) (name, args, decl, type)) - warning ("`%s' attribute directive ignored", - IDENTIFIER_POINTER (name)); - else if (decl != 0) - type = TREE_TYPE (decl); - continue; - } - else if (attrtab[i].decl_req && decl == 0) - { - warning ("`%s' attribute does not apply to types", - IDENTIFIER_POINTER (name)); - continue; - } - else if (list_length (args) < attrtab[i].min - || list_length (args) > attrtab[i].max) - { - error ("wrong number of arguments specified for `%s' attribute", - IDENTIFIER_POINTER (name)); - continue; - } - - id = attrtab[i].id; - switch (id) - { - case A_PACKED: - if (is_type) - TYPE_PACKED (type) = 1; - else if (TREE_CODE (decl) == FIELD_DECL) - DECL_PACKED (decl) = 1; - /* We can't set DECL_PACKED for a VAR_DECL, because the bit is - used for DECL_REGISTER. It wouldn't mean anything anyway. */ - else - warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); - break; - - case A_NOCOMMON: - if (TREE_CODE (decl) == VAR_DECL) - DECL_COMMON (decl) = 0; - else - warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); - break; - - case A_COMMON: - if (TREE_CODE (decl) == VAR_DECL) - DECL_COMMON (decl) = 1; - else - warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); - break; - - case A_NORETURN: - if (TREE_CODE (decl) == FUNCTION_DECL) - TREE_THIS_VOLATILE (decl) = 1; - else if (TREE_CODE (type) == POINTER_TYPE - && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE) - TREE_TYPE (decl) = type - = build_pointer_type - (build_type_variant (TREE_TYPE (type), - TREE_READONLY (TREE_TYPE (type)), 1)); - else - warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); - break; - - case A_MALLOC: - if (TREE_CODE (decl) == FUNCTION_DECL) - DECL_IS_MALLOC (decl) = 1; - /* ??? TODO: Support types. */ - else - warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); - break; - - case A_UNUSED: - if (is_type) - if (decl) - TREE_USED (decl) = 1; - else - TREE_USED (type) = 1; - else if (TREE_CODE (decl) == PARM_DECL - || TREE_CODE (decl) == VAR_DECL - || TREE_CODE (decl) == FUNCTION_DECL - || TREE_CODE (decl) == LABEL_DECL) - TREE_USED (decl) = 1; - else - warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); - break; - - case A_CONST: - if (TREE_CODE (decl) == FUNCTION_DECL) - TREE_READONLY (decl) = 1; - else if (TREE_CODE (type) == POINTER_TYPE - && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE) - TREE_TYPE (decl) = type - = build_pointer_type - (build_type_variant (TREE_TYPE (type), 1, - TREE_THIS_VOLATILE (TREE_TYPE (type)))); - else - warning ( "`%s' attribute ignored", IDENTIFIER_POINTER (name)); - break; - - case A_PURE: - if (TREE_CODE (decl) == FUNCTION_DECL) - DECL_IS_PURE (decl) = 1; - /* ??? TODO: Support types. */ - else - warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); - break; - - - case A_T_UNION: - if (is_type - && TREE_CODE (type) == UNION_TYPE - && (decl == 0 - || (TYPE_FIELDS (type) != 0 - && TYPE_MODE (type) == DECL_MODE (TYPE_FIELDS (type))))) - TYPE_TRANSPARENT_UNION (type) = 1; - else if (decl != 0 && TREE_CODE (decl) == PARM_DECL - && TREE_CODE (type) == UNION_TYPE - && TYPE_MODE (type) == DECL_MODE (TYPE_FIELDS (type))) - DECL_TRANSPARENT_UNION (decl) = 1; - else - warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); - break; - - case A_CONSTRUCTOR: - if (TREE_CODE (decl) == FUNCTION_DECL - && TREE_CODE (type) == FUNCTION_TYPE - && decl_function_context (decl) == 0) - { - DECL_STATIC_CONSTRUCTOR (decl) = 1; - TREE_USED (decl) = 1; - } - else - warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); - break; - - case A_DESTRUCTOR: - if (TREE_CODE (decl) == FUNCTION_DECL - && TREE_CODE (type) == FUNCTION_TYPE - && decl_function_context (decl) == 0) - { - DECL_STATIC_DESTRUCTOR (decl) = 1; - TREE_USED (decl) = 1; - } - else - warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); - break; - - case A_MODE: - if (TREE_CODE (TREE_VALUE (args)) != IDENTIFIER_NODE) - warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); - else - { - int j; - const char *p = IDENTIFIER_POINTER (TREE_VALUE (args)); - int len = strlen (p); - enum machine_mode mode = VOIDmode; - tree typefm; - - if (len > 4 && p[0] == '_' && p[1] == '_' - && p[len - 1] == '_' && p[len - 2] == '_') - { - char *newp = (char *) alloca (len - 1); - - strcpy (newp, &p[2]); - newp[len - 4] = '\0'; - p = newp; - } - - /* Give this decl a type with the specified mode. - First check for the special modes. */ - if (! strcmp (p, "byte")) - mode = byte_mode; - else if (!strcmp (p, "word")) - mode = word_mode; - else if (! strcmp (p, "pointer")) - mode = ptr_mode; - else - for (j = 0; j < NUM_MACHINE_MODES; j++) - if (!strcmp (p, GET_MODE_NAME (j))) - mode = (enum machine_mode) j; - - if (mode == VOIDmode) - error ("unknown machine mode `%s'", p); - else if (0 == (typefm = type_for_mode (mode, - TREE_UNSIGNED (type)))) - error ("no data type for mode `%s'", p); - else - { - if (TYPE_PRECISION (typefm) > (TREE_UNSIGNED (type) - ? TYPE_PRECISION(uintmax_type_node) - : TYPE_PRECISION(intmax_type_node)) - && pedantic) - pedwarn ("type with more precision than %s", - TREE_UNSIGNED (type) ? "uintmax_t" : "intmax_t"); - TREE_TYPE (decl) = type = typefm; - DECL_SIZE (decl) = DECL_SIZE_UNIT (decl) = 0; - layout_decl (decl, 0); - } - } - break; - - case A_SECTION: - #ifdef ASM_OUTPUT_SECTION_NAME - if ((TREE_CODE (decl) == FUNCTION_DECL - || TREE_CODE (decl) == VAR_DECL) - && TREE_CODE (TREE_VALUE (args)) == STRING_CST) - { - if (TREE_CODE (decl) == VAR_DECL - && current_function_decl != NULL_TREE - && ! TREE_STATIC (decl)) - error_with_decl (decl, - "section attribute cannot be specified for local variables"); - /* The decl may have already been given a section attribute from - a previous declaration. Ensure they match. */ - else if (DECL_SECTION_NAME (decl) != NULL_TREE - && strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)), - TREE_STRING_POINTER (TREE_VALUE (args))) != 0) - error_with_decl (node, - "section of `%s' conflicts with previous declaration"); - else - DECL_SECTION_NAME (decl) = TREE_VALUE (args); - } - else - error_with_decl (node, - "section attribute not allowed for `%s'"); - #else - error_with_decl (node, - "section attributes are not supported for this target"); - #endif - break; - - case A_ALIGNED: - { - tree align_expr - = (args ? TREE_VALUE (args) - : size_int (BIGGEST_ALIGNMENT / BITS_PER_UNIT)); - int i; - - /* Strip any NOPs of any kind. */ - while (TREE_CODE (align_expr) == NOP_EXPR - || TREE_CODE (align_expr) == CONVERT_EXPR - || TREE_CODE (align_expr) == NON_LVALUE_EXPR) - align_expr = TREE_OPERAND (align_expr, 0); - - if (TREE_CODE (align_expr) != INTEGER_CST) - { - error ("requested alignment is not a constant"); - continue; - } - - if ((i = tree_log2 (align_expr)) == -1) - error ("requested alignment is not a power of 2"); - else if (i > HOST_BITS_PER_INT - 2) - error ("requested alignment is too large"); - else if (is_type) - { - /* If we have a TYPE_DECL, then copy the type, so that we - don't accidentally modify a builtin type. See pushdecl. */ - if (decl && TREE_TYPE (decl) != error_mark_node - && DECL_ORIGINAL_TYPE (decl) == NULL_TREE) - { - tree tt = TREE_TYPE (decl); - DECL_ORIGINAL_TYPE (decl) = tt; - tt = build_type_copy (tt); - TYPE_NAME (tt) = decl; - TREE_USED (tt) = TREE_USED (decl); - TREE_TYPE (decl) = tt; - type = tt; - } - - TYPE_ALIGN (type) = (1 << i) * BITS_PER_UNIT; - TYPE_USER_ALIGN (type) = 1; - } - else if (TREE_CODE (decl) != VAR_DECL - && TREE_CODE (decl) != FIELD_DECL) - error_with_decl (decl, - "alignment may not be specified for `%s'"); - else - { - DECL_ALIGN (decl) = (1 << i) * BITS_PER_UNIT; - DECL_USER_ALIGN (decl) = 1; - } - } - break; - - case A_FORMAT: - decl_handle_format_attribute (decl, args); - break; - - case A_FORMAT_ARG: - decl_handle_format_arg_attribute (decl, args); - break; - - case A_WEAK: - declare_weak (decl); - break; - - case A_ALIAS: - if ((TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl)) - || (TREE_CODE (decl) != FUNCTION_DECL && ! DECL_EXTERNAL (decl))) - error_with_decl (decl, - "`%s' defined both normally and as an alias"); - else if (decl_function_context (decl) == 0) - { - tree id; - - id = TREE_VALUE (args); - if (TREE_CODE (id) != STRING_CST) - { - error ("alias arg not a string"); - break; - } - id = get_identifier (TREE_STRING_POINTER (id)); - /* This counts as a use of the object pointed to. */ - TREE_USED (id) = 1; - - if (TREE_CODE (decl) == FUNCTION_DECL) - DECL_INITIAL (decl) = error_mark_node; - else - DECL_EXTERNAL (decl) = 0; - assemble_alias (decl, id); - } - else - warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); - break; - - case A_NO_CHECK_MEMORY_USAGE: - if (TREE_CODE (decl) != FUNCTION_DECL) - { - error_with_decl (decl, - "`%s' attribute applies only to functions", - IDENTIFIER_POINTER (name)); - } - else if (DECL_INITIAL (decl)) - { - error_with_decl (decl, - "can't set `%s' attribute after definition", - IDENTIFIER_POINTER (name)); - } - else - DECL_NO_CHECK_MEMORY_USAGE (decl) = 1; - break; - - case A_NO_INSTRUMENT_FUNCTION: - if (TREE_CODE (decl) != FUNCTION_DECL) - { - error_with_decl (decl, - "`%s' attribute applies only to functions", - IDENTIFIER_POINTER (name)); - } - else if (DECL_INITIAL (decl)) - { - error_with_decl (decl, - "can't set `%s' attribute after definition", - IDENTIFIER_POINTER (name)); - } - else - DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl) = 1; - break; - - case A_NO_LIMIT_STACK: - if (TREE_CODE (decl) != FUNCTION_DECL) - { - error_with_decl (decl, - "`%s' attribute applies only to functions", - IDENTIFIER_POINTER (name)); - } - else if (DECL_INITIAL (decl)) - { - error_with_decl (decl, - "can't set `%s' attribute after definition", - IDENTIFIER_POINTER (name)); - } - else - DECL_NO_LIMIT_STACK (decl) = 1; - break; - } - } - } - - /* Split SPECS_ATTRS, a list of declspecs and prefix attributes, into two - lists. SPECS_ATTRS may also be just a typespec (eg: RECORD_TYPE). - - The head of the declspec list is stored in DECLSPECS. - The head of the attribute list is stored in PREFIX_ATTRIBUTES. - - Note that attributes in SPECS_ATTRS are stored in the TREE_PURPOSE of - the list elements. We drop the containing TREE_LIST nodes and link the - resulting attributes together the way decl_attributes expects them. */ - - void - split_specs_attrs (specs_attrs, declspecs, prefix_attributes) - tree specs_attrs; - tree *declspecs, *prefix_attributes; - { - tree t, s, a, next, specs, attrs; - - /* This can happen after an __extension__ in pedantic mode. */ - if (specs_attrs != NULL_TREE - && TREE_CODE (specs_attrs) == INTEGER_CST) - { - *declspecs = NULL_TREE; - *prefix_attributes = NULL_TREE; - return; - } - - /* This can happen in c++ (eg: decl: typespec initdecls ';'). */ - if (specs_attrs != NULL_TREE - && TREE_CODE (specs_attrs) != TREE_LIST) - { - *declspecs = specs_attrs; - *prefix_attributes = NULL_TREE; - return; - } - - /* Remember to keep the lists in the same order, element-wise. */ - - specs = s = NULL_TREE; - attrs = a = NULL_TREE; - for (t = specs_attrs; t; t = next) - { - next = TREE_CHAIN (t); - /* Declspecs have a non-NULL TREE_VALUE. */ - if (TREE_VALUE (t) != NULL_TREE) - { - if (specs == NULL_TREE) - specs = s = t; - else - { - TREE_CHAIN (s) = t; - s = t; - } - } - else - { - if (attrs == NULL_TREE) - attrs = a = TREE_PURPOSE (t); - else - { - TREE_CHAIN (a) = TREE_PURPOSE (t); - a = TREE_PURPOSE (t); - } - /* More attrs can be linked here, move A to the end. */ - while (TREE_CHAIN (a) != NULL_TREE) - a = TREE_CHAIN (a); - } - } - - /* Terminate the lists. */ - if (s != NULL_TREE) - TREE_CHAIN (s) = NULL_TREE; - if (a != NULL_TREE) - TREE_CHAIN (a) = NULL_TREE; - - /* All done. */ - *declspecs = specs; - *prefix_attributes = attrs; - } - - /* Strip attributes from SPECS_ATTRS, a list of declspecs and attributes. - This function is used by the parser when a rule will accept attributes - in a particular position, but we don't want to support that just yet. - - A warning is issued for every ignored attribute. */ - - tree - strip_attrs (specs_attrs) - tree specs_attrs; - { - tree specs, attrs; - - split_specs_attrs (specs_attrs, &specs, &attrs); - - while (attrs) - { - warning ("`%s' attribute ignored", - IDENTIFIER_POINTER (TREE_PURPOSE (attrs))); - attrs = TREE_CHAIN (attrs); - } - - return specs; - } - static int is_valid_printf_arglist PARAMS ((tree)); static rtx c_expand_builtin PARAMS ((tree, rtx, enum machine_mode, enum expand_modifier)); static rtx c_expand_builtin_printf PARAMS ((tree, rtx, enum machine_mode, ! enum expand_modifier, int)); static rtx c_expand_builtin_fprintf PARAMS ((tree, rtx, enum machine_mode, ! enum expand_modifier, int)); /* Print a warning if a constant expression had overflow in folding. Invoke this function on every expression that the language --- 685,696 ---- return value; } static int is_valid_printf_arglist PARAMS ((tree)); static rtx c_expand_builtin PARAMS ((tree, rtx, enum machine_mode, enum expand_modifier)); static rtx c_expand_builtin_printf PARAMS ((tree, rtx, enum machine_mode, ! enum expand_modifier, int, int)); static rtx c_expand_builtin_fprintf PARAMS ((tree, rtx, enum machine_mode, ! enum expand_modifier, int, int)); /* Print a warning if a constant expression had overflow in folding. Invoke this function on every expression that the language *************** constant_expression_warning (value) *** 1174,1179 **** --- 703,709 ---- tree value; { if ((TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST + || TREE_CODE (value) == VECTOR_CST || TREE_CODE (value) == COMPLEX_CST) && TREE_CONSTANT_OVERFLOW (value) && pedantic) pedwarn ("overflow in constant expression"); *************** overflow_warning (value) *** 1208,1213 **** --- 738,749 ---- if (skip_evaluation == 0) warning ("floating point overflow in expression"); } + else if (TREE_CODE (value) == VECTOR_CST && TREE_OVERFLOW (value)) + { + TREE_OVERFLOW (value) = 0; + if (skip_evaluation == 0) + warning ("vector overflow in expression"); + } } /* Print a warning if a large constant is truncated to unsigned, *************** warn_for_collisions (list) *** 1447,1453 **** } } ! /* Return nonzero if X is a tree that can be verified by the sequence poitn warnings. */ static int warning_candidate_p (x) --- 983,989 ---- } } ! /* Return nonzero if X is a tree that can be verified by the sequence point warnings. */ static int warning_candidate_p (x) *************** c_expand_expr_stmt (expr) *** 1704,1710 **** { /* Do default conversion if safe and possibly important, in case within ({...}). */ ! if ((TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE && lvalue_p (expr)) || TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE) expr = default_conversion (expr); --- 1240,1247 ---- { /* Do default conversion if safe and possibly important, in case within ({...}). */ ! if ((TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE ! && (flag_isoc99 || lvalue_p (expr))) || TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE) expr = default_conversion (expr); *************** type_for_mode (mode, unsignedp) *** 1830,1845 **** return unsignedp ? widest_unsigned_literal_type_node : widest_integer_literal_type_node; ! if (mode == TYPE_MODE (intQI_type_node)) return unsignedp ? unsigned_intQI_type_node : intQI_type_node; ! if (mode == TYPE_MODE (intHI_type_node)) return unsignedp ? unsigned_intHI_type_node : intHI_type_node; ! if (mode == TYPE_MODE (intSI_type_node)) return unsignedp ? unsigned_intSI_type_node : intSI_type_node; ! if (mode == TYPE_MODE (intDI_type_node)) return unsignedp ? unsigned_intDI_type_node : intDI_type_node; #if HOST_BITS_PER_WIDE_INT >= 64 --- 1367,1382 ---- return unsignedp ? widest_unsigned_literal_type_node : widest_integer_literal_type_node; ! if (mode == QImode) return unsignedp ? unsigned_intQI_type_node : intQI_type_node; ! if (mode == HImode) return unsignedp ? unsigned_intHI_type_node : intHI_type_node; ! if (mode == SImode) return unsignedp ? unsigned_intSI_type_node : intSI_type_node; ! if (mode == DImode) return unsignedp ? unsigned_intDI_type_node : intDI_type_node; #if HOST_BITS_PER_WIDE_INT >= 64 *************** type_for_mode (mode, unsignedp) *** 1863,1884 **** return build_pointer_type (integer_type_node); #ifdef VECTOR_MODE_SUPPORTED_P ! if (mode == TYPE_MODE (V4SF_type_node) && VECTOR_MODE_SUPPORTED_P (mode)) ! return V4SF_type_node; ! if (mode == TYPE_MODE (V4SI_type_node) && VECTOR_MODE_SUPPORTED_P (mode)) ! return V4SI_type_node; ! if (mode == TYPE_MODE (V2SI_type_node) && VECTOR_MODE_SUPPORTED_P (mode)) ! return V2SI_type_node; ! if (mode == TYPE_MODE (V4HI_type_node) && VECTOR_MODE_SUPPORTED_P (mode)) ! return V4HI_type_node; ! if (mode == TYPE_MODE (V8QI_type_node) && VECTOR_MODE_SUPPORTED_P (mode)) ! return V8QI_type_node; #endif return 0; } ! /* Return an unsigned type the same as TYPE in other respects. */ tree unsigned_type (type) tree type; --- 1400,1437 ---- return build_pointer_type (integer_type_node); #ifdef VECTOR_MODE_SUPPORTED_P ! if (VECTOR_MODE_SUPPORTED_P (mode)) ! { ! switch (mode) ! { ! case V16QImode: ! return unsignedp ? unsigned_V16QI_type_node : V16QI_type_node; ! case V8HImode: ! return unsignedp ? unsigned_V8HI_type_node : V8HI_type_node; ! case V4SImode: ! return unsignedp ? unsigned_V4SI_type_node : V4SI_type_node; ! case V2SImode: ! return unsignedp ? unsigned_V2SI_type_node : V2SI_type_node; ! case V4HImode: ! return unsignedp ? unsigned_V4HI_type_node : V4HI_type_node; ! case V8QImode: ! return unsignedp ? unsigned_V8QI_type_node : V8QI_type_node; ! case V16SFmode: ! return V16SF_type_node; ! case V4SFmode: ! return V4SF_type_node; ! case V2SFmode: ! return V2SF_type_node; ! default: ! break; ! } ! } #endif return 0; } ! /* Return an unsigned type the same as TYPE in other respects. */ tree unsigned_type (type) tree type; *************** signed_or_unsigned_type (unsignedp, type *** 1973,1978 **** --- 1526,1545 ---- if (TYPE_PRECISION (type) == TYPE_PRECISION (widest_integer_literal_type_node)) return (unsignedp ? widest_unsigned_literal_type_node : widest_integer_literal_type_node); + + #if HOST_BITS_PER_WIDE_INT >= 64 + if (TYPE_PRECISION (type) == TYPE_PRECISION (intTI_type_node)) + return unsignedp ? unsigned_intTI_type_node : intTI_type_node; + #endif + if (TYPE_PRECISION (type) == TYPE_PRECISION (intDI_type_node)) + return unsignedp ? unsigned_intDI_type_node : intDI_type_node; + if (TYPE_PRECISION (type) == TYPE_PRECISION (intSI_type_node)) + return unsignedp ? unsigned_intSI_type_node : intSI_type_node; + if (TYPE_PRECISION (type) == TYPE_PRECISION (intHI_type_node)) + return unsignedp ? unsigned_intHI_type_node : intHI_type_node; + if (TYPE_PRECISION (type) == TYPE_PRECISION (intQI_type_node)) + return unsignedp ? unsigned_intQI_type_node : intQI_type_node; + return type; } *************** void *** 2012,2018 **** binary_op_error (code) enum tree_code code; { ! register const char *opname; switch (code) { --- 1579,1585 ---- binary_op_error (code) enum tree_code code; { ! const char *opname; switch (code) { *************** shorten_compare (op0_ptr, op1_ptr, resty *** 2091,2097 **** tree *restype_ptr; enum tree_code *rescode_ptr; { ! register tree type; tree op0 = *op0_ptr; tree op1 = *op1_ptr; int unsignedp0, unsignedp1; --- 1658,1664 ---- tree *restype_ptr; enum tree_code *rescode_ptr; { ! tree type; tree op0 = *op0_ptr; tree op1 = *op1_ptr; int unsignedp0, unsignedp1; *************** shorten_compare (op0_ptr, op1_ptr, resty *** 2124,2131 **** if (TREE_CONSTANT (primop0) && ! integer_zerop (primop1) && ! real_zerop (primop1)) { ! register tree tem = primop0; ! register int temi = unsignedp0; primop0 = primop1; primop1 = tem; tem = op0; --- 1691,1698 ---- if (TREE_CONSTANT (primop0) && ! integer_zerop (primop1) && ! real_zerop (primop1)) { ! tree tem = primop0; ! int temi = unsignedp0; primop0 = primop1; primop1 = tem; tem = op0; *************** shorten_compare (op0_ptr, op1_ptr, resty *** 2416,2421 **** --- 1983,2089 ---- return 0; } + /* Return a tree for the sum or difference (RESULTCODE says which) + of pointer PTROP and integer INTOP. */ + + tree + pointer_int_sum (resultcode, ptrop, intop) + enum tree_code resultcode; + tree ptrop, intop; + { + tree size_exp; + + tree result; + tree folded; + + /* The result is a pointer of the same type that is being added. */ + + tree result_type = TREE_TYPE (ptrop); + + if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE) + { + if (pedantic || warn_pointer_arith) + pedwarn ("pointer of type `void *' used in arithmetic"); + size_exp = integer_one_node; + } + else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE) + { + if (pedantic || warn_pointer_arith) + pedwarn ("pointer to a function used in arithmetic"); + size_exp = integer_one_node; + } + else if (TREE_CODE (TREE_TYPE (result_type)) == METHOD_TYPE) + { + if (pedantic || warn_pointer_arith) + pedwarn ("pointer to member function used in arithmetic"); + size_exp = integer_one_node; + } + else if (TREE_CODE (TREE_TYPE (result_type)) == OFFSET_TYPE) + { + if (pedantic || warn_pointer_arith) + pedwarn ("pointer to a member used in arithmetic"); + size_exp = integer_one_node; + } + else + size_exp = size_in_bytes (TREE_TYPE (result_type)); + + /* If what we are about to multiply by the size of the elements + contains a constant term, apply distributive law + and multiply that constant term separately. + This helps produce common subexpressions. */ + + if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR) + && ! TREE_CONSTANT (intop) + && TREE_CONSTANT (TREE_OPERAND (intop, 1)) + && TREE_CONSTANT (size_exp) + /* If the constant comes from pointer subtraction, + skip this optimization--it would cause an error. */ + && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE + /* If the constant is unsigned, and smaller than the pointer size, + then we must skip this optimization. This is because it could cause + an overflow error if the constant is negative but INTOP is not. */ + && (! TREE_UNSIGNED (TREE_TYPE (intop)) + || (TYPE_PRECISION (TREE_TYPE (intop)) + == TYPE_PRECISION (TREE_TYPE (ptrop))))) + { + enum tree_code subcode = resultcode; + tree int_type = TREE_TYPE (intop); + if (TREE_CODE (intop) == MINUS_EXPR) + subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR); + /* Convert both subexpression types to the type of intop, + because weird cases involving pointer arithmetic + can result in a sum or difference with different type args. */ + ptrop = build_binary_op (subcode, ptrop, + convert (int_type, TREE_OPERAND (intop, 1)), 1); + intop = convert (int_type, TREE_OPERAND (intop, 0)); + } + + /* Convert the integer argument to a type the same size as sizetype + so the multiply won't overflow spuriously. */ + + if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype) + || TREE_UNSIGNED (TREE_TYPE (intop)) != TREE_UNSIGNED (sizetype)) + intop = convert (type_for_size (TYPE_PRECISION (sizetype), + TREE_UNSIGNED (sizetype)), intop); + + /* Replace the integer argument with a suitable product by the object size. + Do this multiplication as signed, then convert to the appropriate + pointer type (actually unsigned integral). */ + + intop = convert (result_type, + build_binary_op (MULT_EXPR, intop, + convert (TREE_TYPE (intop), size_exp), 1)); + + /* Create the sum or difference. */ + + result = build (resultcode, result_type, ptrop, intop); + + folded = fold (result); + if (folded == result) + TREE_CONSTANT (folded) = TREE_CONSTANT (ptrop) & TREE_CONSTANT (intop); + return folded; + } + /* Prepare expr to be an argument of a TRUTH_NOT_EXPR, or validate its data type for an `if' or `while' statement or ?..: exp. *************** truthvalue_conversion (expr) *** 2479,2485 **** return real_zerop (expr) ? boolean_false_node : boolean_true_node; case ADDR_EXPR: ! /* If we are taking the address of a external decl, it might be zero if it is weak, so we cannot optimize. */ if (DECL_P (TREE_OPERAND (expr, 0)) && DECL_EXTERNAL (TREE_OPERAND (expr, 0))) --- 2147,2153 ---- return real_zerop (expr) ? boolean_false_node : boolean_true_node; case ADDR_EXPR: ! /* If we are taking the address of an external decl, it might be zero if it is weak, so we cannot optimize. */ if (DECL_P (TREE_OPERAND (expr, 0)) && DECL_EXTERNAL (TREE_OPERAND (expr, 0))) *************** c_apply_type_quals_to_decl (type_quals, *** 2641,2668 **** || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (TREE_TYPE (decl)))) error ("invalid use of `restrict'"); else if (flag_strict_aliasing) ! { ! /* No two restricted pointers can point at the same thing. ! However, a restricted pointer can point at the same thing ! as an unrestricted pointer, if that unrestricted pointer ! is based on the restricted pointer. So, we make the ! alias set for the restricted pointer a subset of the ! alias set for the type pointed to by the type of the ! decl. */ ! ! HOST_WIDE_INT pointed_to_alias_set ! = get_alias_set (TREE_TYPE (TREE_TYPE (decl))); ! ! if (pointed_to_alias_set == 0) ! /* It's not legal to make a subset of alias set zero. */ ! ; ! else ! { ! DECL_POINTER_ALIAS_SET (decl) = new_alias_set (); ! record_alias_subset (pointed_to_alias_set, ! DECL_POINTER_ALIAS_SET (decl)); ! } ! } } } --- 2309,2318 ---- || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (TREE_TYPE (decl)))) error ("invalid use of `restrict'"); else if (flag_strict_aliasing) ! /* Indicate we need to make a unique alias set for this pointer. ! We can't do it here because it might be pointing to an ! incomplete type. */ ! DECL_POINTER_ALIAS_SET (decl) = -2; } } *************** c_apply_type_quals_to_decl (type_quals, *** 2671,2677 **** or a type. Return -1 if we don't do anything special. */ HOST_WIDE_INT ! lang_get_alias_set (t) tree t; { tree u; --- 2321,2327 ---- or a type. Return -1 if we don't do anything special. */ HOST_WIDE_INT ! c_common_get_alias_set (t) tree t; { tree u; *************** lang_get_alias_set (t) *** 2726,2732 **** Technically, this approach is actually more conservative that it needs to be. In particular, `const int *' and `int *' ! chould be in different alias sets, according to the C and C++ standard, since their types are not the same, and so, technically, an `int **' and `const int **' cannot point at the same thing. --- 2376,2382 ---- Technically, this approach is actually more conservative that it needs to be. In particular, `const int *' and `int *' ! should be in different alias sets, according to the C and C++ standard, since their types are not the same, and so, technically, an `int **' and `const int **' cannot point at the same thing. *************** lang_get_alias_set (t) *** 2736,2742 **** int *ip; int **ipp = &ip; ! const int* const* cipp = &ip; And, it doesn't make sense for that to be legal unless you can dereference IPP and CIPP. So, we ignore cv-qualifiers on --- 2386,2392 ---- int *ip; int **ipp = &ip; ! const int* const* cipp = &ipp; And, it doesn't make sense for that to be legal unless you can dereference IPP and CIPP. So, we ignore cv-qualifiers on *************** lang_get_alias_set (t) *** 2746,2758 **** if (t1 != t) return get_alias_set (t1); } - /* It's not yet safe to use alias sets for classes in C++ because - the TYPE_FIELDs list for a class doesn't mention base classes. */ - else if (c_language == clk_cplusplus && AGGREGATE_TYPE_P (t)) - return 0; return -1; } /* Build tree nodes and builtin functions common to both C and C++ language frontends. */ --- 2396,2497 ---- if (t1 != t) return get_alias_set (t1); } return -1; } + + /* Implement the __alignof keyword: Return the minimum required + alignment of TYPE, measured in bytes. */ + + tree + c_alignof (type) + tree type; + { + enum tree_code code = TREE_CODE (type); + tree t; + + /* In C++, sizeof applies to the referent. Handle alignof the same way. */ + if (code == REFERENCE_TYPE) + { + type = TREE_TYPE (type); + code = TREE_CODE (type); + } + + if (code == FUNCTION_TYPE) + t = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT); + else if (code == VOID_TYPE || code == ERROR_MARK) + t = size_one_node; + else if (!COMPLETE_TYPE_P (type)) + { + error ("__alignof__ applied to an incomplete type"); + t = size_zero_node; + } + else + t = size_int (TYPE_ALIGN (type) / BITS_PER_UNIT); + + return fold (build1 (NOP_EXPR, c_size_type_node, t)); + } + + /* Implement the __alignof keyword: Return the minimum required + alignment of EXPR, measured in bytes. For VAR_DECL's and + FIELD_DECL's return DECL_ALIGN (which can be set from an + "aligned" __attribute__ specification). */ + + tree + c_alignof_expr (expr) + tree expr; + { + tree t; + + if (TREE_CODE (expr) == VAR_DECL) + t = size_int (DECL_ALIGN (expr) / BITS_PER_UNIT); + + else if (TREE_CODE (expr) == COMPONENT_REF + && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1))) + { + error ("`__alignof' applied to a bit-field"); + t = size_one_node; + } + else if (TREE_CODE (expr) == COMPONENT_REF + && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL) + t = size_int (DECL_ALIGN (TREE_OPERAND (expr, 1)) / BITS_PER_UNIT); + + else if (TREE_CODE (expr) == INDIRECT_REF) + { + tree t = TREE_OPERAND (expr, 0); + tree best = t; + int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t))); + + while (TREE_CODE (t) == NOP_EXPR + && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE) + { + int thisalign; + + t = TREE_OPERAND (t, 0); + thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t))); + if (thisalign > bestalign) + best = t, bestalign = thisalign; + } + return c_alignof (TREE_TYPE (TREE_TYPE (best))); + } + else + return c_alignof (TREE_TYPE (expr)); + + return fold (build1 (NOP_EXPR, c_size_type_node, t)); + } + + /* Give the specifications for the format attributes, used by C and all + descendents. */ + + static const struct attribute_spec c_format_attribute_table[] = + { + /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */ + { "format", 3, 3, false, true, true, + handle_format_attribute }, + { "format_arg", 1, 1, false, true, true, + handle_format_arg_attribute }, + { NULL, 0, 0, false, false, false, NULL } + }; /* Build tree nodes and builtin functions common to both C and C++ language frontends. */ *************** lang_get_alias_set (t) *** 2760,2804 **** void c_common_nodes_and_builtins () { int wchar_type_size; tree array_domain_type; - tree temp; - tree memcpy_ftype, memset_ftype, strlen_ftype; - tree bzero_ftype, bcmp_ftype, puts_ftype, printf_ftype; - tree fputs_ftype, fputc_ftype, fwrite_ftype, fprintf_ftype; - tree endlink, int_endlink, double_endlink, unsigned_endlink; - tree cstring_endlink, sizetype_endlink; - tree ptr_ftype, ptr_ftype_unsigned; - tree void_ftype_any, void_ftype_int, int_ftype_any; - tree double_ftype_double, double_ftype_double_double; - tree float_ftype_float, ldouble_ftype_ldouble; - tree cfloat_ftype_cfloat, cdouble_ftype_cdouble, cldouble_ftype_cldouble; - tree float_ftype_cfloat, double_ftype_cdouble, ldouble_ftype_cldouble; - tree int_ftype_cptr_cptr_sizet, sizet_ftype_cstring_cstring; - tree int_ftype_cstring_cstring, string_ftype_string_cstring; - tree string_ftype_cstring_int, string_ftype_cstring_cstring; - tree string_ftype_string_cstring_sizet, int_ftype_cstring_cstring_sizet; - tree long_ftype_long; - tree longlong_ftype_longlong; - tree intmax_ftype_intmax; /* Either char* or void*. */ tree traditional_ptr_type_node; /* Either const char* or const void*. */ tree traditional_cptr_type_node; tree traditional_len_type_node; - tree traditional_len_endlink; tree va_list_ref_type_node; tree va_list_arg_type_node; /* Define `int' and `char' first so that dbx will output them first. */ ! record_builtin_type (RID_INT, NULL_PTR, integer_type_node); record_builtin_type (RID_CHAR, "char", char_type_node); /* `signed' is the same as `int'. FIXME: the declarations of "signed", "unsigned long", "long long unsigned" and "unsigned short" were in C++ but not C. Are the conditionals here needed? */ if (c_language == clk_cplusplus) ! record_builtin_type (RID_SIGNED, NULL_PTR, integer_type_node); record_builtin_type (RID_LONG, "long int", long_integer_type_node); record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node); record_builtin_type (RID_MAX, "long unsigned int", --- 2499,2556 ---- void c_common_nodes_and_builtins () { + enum builtin_type + { + #define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME, + #define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME, + #define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME, + #define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME, + #define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME, + #define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME, + #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME, + #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME, + #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME, + #define DEF_POINTER_TYPE(NAME, TYPE) NAME, + #include "builtin-types.def" + #undef DEF_PRIMITIVE_TYPE + #undef DEF_FUNCTION_TYPE_0 + #undef DEF_FUNCTION_TYPE_1 + #undef DEF_FUNCTION_TYPE_2 + #undef DEF_FUNCTION_TYPE_3 + #undef DEF_FUNCTION_TYPE_4 + #undef DEF_FUNCTION_TYPE_VAR_0 + #undef DEF_FUNCTION_TYPE_VAR_1 + #undef DEF_FUNCTION_TYPE_VAR_2 + #undef DEF_POINTER_TYPE + BT_LAST + }; + + typedef enum builtin_type builtin_type; + + tree builtin_types[(int) BT_LAST]; int wchar_type_size; tree array_domain_type; /* Either char* or void*. */ tree traditional_ptr_type_node; /* Either const char* or const void*. */ tree traditional_cptr_type_node; tree traditional_len_type_node; tree va_list_ref_type_node; tree va_list_arg_type_node; + /* We must initialize this before any builtin functions (which might have + attributes) are declared. (c_common_init is too late.) */ + format_attribute_table = c_format_attribute_table; + /* Define `int' and `char' first so that dbx will output them first. */ ! record_builtin_type (RID_INT, NULL, integer_type_node); record_builtin_type (RID_CHAR, "char", char_type_node); /* `signed' is the same as `int'. FIXME: the declarations of "signed", "unsigned long", "long long unsigned" and "unsigned short" were in C++ but not C. Are the conditionals here needed? */ if (c_language == clk_cplusplus) ! record_builtin_type (RID_SIGNED, NULL, integer_type_node); record_builtin_type (RID_LONG, "long int", long_integer_type_node); record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node); record_builtin_type (RID_MAX, "long unsigned int", *************** c_common_nodes_and_builtins () *** 2862,2869 **** build_common_tree_nodes_2 (flag_short_double); ! record_builtin_type (RID_FLOAT, NULL_PTR, float_type_node); ! record_builtin_type (RID_DOUBLE, NULL_PTR, double_type_node); record_builtin_type (RID_MAX, "long double", long_double_type_node); pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"), --- 2614,2621 ---- build_common_tree_nodes_2 (flag_short_double); ! record_builtin_type (RID_FLOAT, NULL, float_type_node); ! record_builtin_type (RID_DOUBLE, NULL, double_type_node); record_builtin_type (RID_MAX, "long double", long_double_type_node); pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"), *************** c_common_nodes_and_builtins () *** 2875,2881 **** pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"), complex_long_double_type_node)); ! record_builtin_type (RID_VOID, NULL_PTR, void_type_node); void_list_node = build_void_list_node (); --- 2627,2636 ---- pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"), complex_long_double_type_node)); ! record_builtin_type (RID_VOID, NULL, void_type_node); ! ! void_zero_node = build_int_2 (0, 0); ! TREE_TYPE (void_zero_node) = void_type_node; void_list_node = build_void_list_node (); *************** c_common_nodes_and_builtins () *** 2896,2904 **** int_array_type_node = build_array_type (integer_type_node, array_domain_type); ! #ifdef MD_INIT_BUILTINS ! MD_INIT_BUILTINS; ! #endif /* This is special for C++ so functions can be overloaded. */ wchar_type_node = get_identifier (flag_short_wchar --- 2651,2669 ---- int_array_type_node = build_array_type (integer_type_node, array_domain_type); ! string_type_node = build_pointer_type (char_type_node); ! const_string_type_node ! = build_pointer_type (build_qualified_type ! (char_type_node, TYPE_QUAL_CONST)); ! ! traditional_ptr_type_node = ((flag_traditional && ! c_language != clk_cplusplus) ! ? string_type_node : ptr_type_node); ! traditional_cptr_type_node = ((flag_traditional && ! c_language != clk_cplusplus) ! ? const_string_type_node : const_ptr_type_node); ! ! (*targetm.init_builtins) (); /* This is special for C++ so functions can be overloaded. */ wchar_type_node = get_identifier (flag_short_wchar *************** c_common_nodes_and_builtins () *** 2924,2933 **** wchar_array_type_node = build_array_type (wchar_type_node, array_domain_type); - string_type_node = build_pointer_type (char_type_node); - const_string_type_node - = build_pointer_type (build_type_variant (char_type_node, 1, 0)); - wint_type_node = TREE_TYPE (identifier_global_value (get_identifier (WINT_TYPE))); --- 2689,2694 ---- *************** c_common_nodes_and_builtins () *** 2961,3524 **** va_list_ref_type_node = build_reference_type (va_list_type_node); } - endlink = void_list_node; - int_endlink = tree_cons (NULL_TREE, integer_type_node, endlink); - double_endlink = tree_cons (NULL_TREE, double_type_node, endlink); - unsigned_endlink = tree_cons (NULL_TREE, unsigned_type_node, endlink); - cstring_endlink = tree_cons (NULL_TREE, const_string_type_node, endlink); - - ptr_ftype = build_function_type (ptr_type_node, NULL_TREE); - ptr_ftype_unsigned = build_function_type (ptr_type_node, unsigned_endlink); - sizetype_endlink = tree_cons (NULL_TREE, TYPE_DOMAIN (sizetype), endlink); - /* We realloc here because sizetype could be int or unsigned. S'ok. */ - ptr_ftype_sizetype = build_function_type (ptr_type_node, sizetype_endlink); - - int_ftype_any = build_function_type (integer_type_node, NULL_TREE); - void_ftype_any = build_function_type (void_type_node, NULL_TREE); - void_ftype = build_function_type (void_type_node, endlink); - void_ftype_int = build_function_type (void_type_node, int_endlink); - void_ftype_ptr - = build_function_type (void_type_node, - tree_cons (NULL_TREE, ptr_type_node, endlink)); - - float_ftype_float - = build_function_type (float_type_node, - tree_cons (NULL_TREE, float_type_node, endlink)); - - double_ftype_double - = build_function_type (double_type_node, double_endlink); - - ldouble_ftype_ldouble - = build_function_type (long_double_type_node, - tree_cons (NULL_TREE, long_double_type_node, - endlink)); - - double_ftype_double_double - = build_function_type (double_type_node, - tree_cons (NULL_TREE, double_type_node, - double_endlink)); - - cfloat_ftype_cfloat - = build_function_type (complex_float_type_node, - tree_cons (NULL_TREE, complex_float_type_node, - endlink)); - cdouble_ftype_cdouble - = build_function_type (complex_double_type_node, - tree_cons (NULL_TREE, complex_double_type_node, - endlink)); - cldouble_ftype_cldouble - = build_function_type (complex_long_double_type_node, - tree_cons (NULL_TREE, complex_long_double_type_node, - endlink)); - - float_ftype_cfloat - = build_function_type (float_type_node, - tree_cons (NULL_TREE, complex_float_type_node, - endlink)); - double_ftype_cdouble - = build_function_type (double_type_node, - tree_cons (NULL_TREE, complex_double_type_node, - endlink)); - ldouble_ftype_cldouble - = build_function_type (long_double_type_node, - tree_cons (NULL_TREE, complex_long_double_type_node, - endlink)); - - int_ftype_int - = build_function_type (integer_type_node, int_endlink); - - long_ftype_long - = build_function_type (long_integer_type_node, - tree_cons (NULL_TREE, long_integer_type_node, - endlink)); - - longlong_ftype_longlong - = build_function_type (long_long_integer_type_node, - tree_cons (NULL_TREE, long_long_integer_type_node, - endlink)); - - intmax_ftype_intmax - = build_function_type (intmax_type_node, - tree_cons (NULL_TREE, intmax_type_node, - endlink)); - - int_ftype_cptr_cptr_sizet - = build_function_type (integer_type_node, - tree_cons (NULL_TREE, const_ptr_type_node, - tree_cons (NULL_TREE, - const_ptr_type_node, - sizetype_endlink))); - - void_zero_node = build_int_2 (0, 0); - TREE_TYPE (void_zero_node) = void_type_node; - - /* Prototype for strcpy/strcat. */ - string_ftype_string_cstring - = build_function_type (string_type_node, - tree_cons (NULL_TREE, string_type_node, - cstring_endlink)); - - /* Prototype for strncpy/strncat. */ - string_ftype_string_cstring_sizet - = build_function_type (string_type_node, - tree_cons (NULL_TREE, string_type_node, - tree_cons (NULL_TREE, - const_string_type_node, - sizetype_endlink))); - traditional_len_type_node = ((flag_traditional && c_language != clk_cplusplus) ? integer_type_node : sizetype); - traditional_len_endlink = tree_cons (NULL_TREE, traditional_len_type_node, - endlink); - - /* Prototype for strcmp. */ - int_ftype_cstring_cstring - = build_function_type (integer_type_node, - tree_cons (NULL_TREE, const_string_type_node, - cstring_endlink)); - - /* Prototype for strspn/strcspn. */ - sizet_ftype_cstring_cstring - = build_function_type (c_size_type_node, - tree_cons (NULL_TREE, const_string_type_node, - cstring_endlink)); ! /* Prototype for strncmp. */ ! int_ftype_cstring_cstring_sizet ! = build_function_type (integer_type_node, ! tree_cons (NULL_TREE, const_string_type_node, ! tree_cons (NULL_TREE, ! const_string_type_node, ! sizetype_endlink))); ! ! /* Prototype for strstr, strpbrk, etc. */ ! string_ftype_cstring_cstring ! = build_function_type (string_type_node, ! tree_cons (NULL_TREE, const_string_type_node, ! cstring_endlink)); ! ! /* Prototype for strchr. */ ! string_ftype_cstring_int ! = build_function_type (string_type_node, ! tree_cons (NULL_TREE, const_string_type_node, ! int_endlink)); ! ! /* Prototype for strlen. */ ! strlen_ftype ! = build_function_type (traditional_len_type_node, cstring_endlink); ! ! traditional_ptr_type_node = ((flag_traditional && ! c_language != clk_cplusplus) ! ? string_type_node : ptr_type_node); ! traditional_cptr_type_node = ((flag_traditional && ! c_language != clk_cplusplus) ! ? const_string_type_node : const_ptr_type_node); ! ! /* Prototype for memcpy. */ ! memcpy_ftype ! = build_function_type (traditional_ptr_type_node, ! tree_cons (NULL_TREE, ptr_type_node, ! tree_cons (NULL_TREE, const_ptr_type_node, ! sizetype_endlink))); ! ! /* Prototype for memset. */ ! memset_ftype ! = build_function_type (traditional_ptr_type_node, ! tree_cons (NULL_TREE, ptr_type_node, ! tree_cons (NULL_TREE, integer_type_node, ! sizetype_endlink))); ! ! /* Prototype for bzero. */ ! bzero_ftype ! = build_function_type (void_type_node, ! tree_cons (NULL_TREE, traditional_ptr_type_node, ! traditional_len_endlink)); ! ! /* Prototype for bcmp. */ ! bcmp_ftype ! = build_function_type (integer_type_node, ! tree_cons (NULL_TREE, traditional_cptr_type_node, ! tree_cons (NULL_TREE, ! traditional_cptr_type_node, ! traditional_len_endlink))); ! ! /* Prototype for puts. */ ! puts_ftype ! = build_function_type (integer_type_node, cstring_endlink); ! ! /* Prototype for printf. */ ! printf_ftype ! = build_function_type (integer_type_node, ! tree_cons (NULL_TREE, const_string_type_node, NULL_TREE)); ! /* These stdio prototypes are declared using void* in place of ! FILE*. They are only used for __builtin_ style calls, regular ! style builtin prototypes omit the arguments and merge those ! provided by stdio.h. */ ! /* Prototype for fwrite. */ ! fwrite_ftype ! = build_function_type (c_size_type_node, ! tree_cons (NULL_TREE, const_ptr_type_node, ! tree_cons (NULL_TREE, c_size_type_node, ! tree_cons (NULL_TREE, c_size_type_node, ! tree_cons (NULL_TREE, ptr_type_node, endlink))))); ! ! /* Prototype for fputc. */ ! fputc_ftype ! = build_function_type (integer_type_node, ! tree_cons (NULL_TREE, integer_type_node, ! tree_cons (NULL_TREE, ptr_type_node, endlink))); ! ! /* Prototype for fputs. */ ! fputs_ftype ! = build_function_type (integer_type_node, ! tree_cons (NULL_TREE, const_string_type_node, ! tree_cons (NULL_TREE, ptr_type_node, endlink))); ! ! /* Prototype for fprintf. */ ! fprintf_ftype ! = build_function_type (integer_type_node, ! tree_cons (NULL_TREE, ptr_type_node, ! tree_cons (NULL_TREE, ! const_string_type_node, ! NULL_TREE))); ! ! builtin_function ("__builtin_constant_p", default_function_type, ! BUILT_IN_CONSTANT_P, BUILT_IN_NORMAL, NULL_PTR); ! ! builtin_function ("__builtin_return_address", ptr_ftype_unsigned, ! BUILT_IN_RETURN_ADDRESS, BUILT_IN_NORMAL, NULL_PTR); ! ! builtin_function ("__builtin_frame_address", ptr_ftype_unsigned, ! BUILT_IN_FRAME_ADDRESS, BUILT_IN_NORMAL, NULL_PTR); ! #ifdef EH_RETURN_DATA_REGNO ! builtin_function ("__builtin_eh_return_data_regno", int_ftype_int, ! BUILT_IN_EH_RETURN_DATA_REGNO, BUILT_IN_NORMAL, NULL_PTR); ! #endif - builtin_function ("__builtin_alloca", ptr_ftype_sizetype, - BUILT_IN_ALLOCA, BUILT_IN_NORMAL, "alloca"); - builtin_function_2 ("__builtin_ffs", "ffs", - int_ftype_int, int_ftype_int, - BUILT_IN_FFS, BUILT_IN_NORMAL, 0, 1, 0); - /* Define alloca as builtin, unless SMALL_STACK. */ - #ifndef SMALL_STACK - builtin_function_2 (NULL_PTR, "alloca", NULL_TREE, ptr_ftype_sizetype, - BUILT_IN_ALLOCA, BUILT_IN_NORMAL, 0, 1, 0); - #endif /* Declare _exit and _Exit just to mark them as non-returning. */ ! builtin_function_2 (NULL_PTR, "_exit", NULL_TREE, void_ftype_int, 0, NOT_BUILT_IN, 0, 1, 1); ! builtin_function_2 (NULL_PTR, "_Exit", NULL_TREE, void_ftype_int, 0, NOT_BUILT_IN, 0, !flag_isoc99, 1); - builtin_function_2 ("__builtin_index", "index", - string_ftype_cstring_int, string_ftype_cstring_int, - BUILT_IN_INDEX, BUILT_IN_NORMAL, 1, 1, 0); - builtin_function_2 ("__builtin_rindex", "rindex", - string_ftype_cstring_int, string_ftype_cstring_int, - BUILT_IN_RINDEX, BUILT_IN_NORMAL, 1, 1, 0); - - /* The system prototypes for these functions have many - variations, so don't specify parameters to avoid conflicts. - The expand_* functions check the argument types anyway. */ - builtin_function_2 ("__builtin_bzero", "bzero", - bzero_ftype, void_ftype_any, - BUILT_IN_BZERO, BUILT_IN_NORMAL, 1, 1, 0); - builtin_function_2 ("__builtin_bcmp", "bcmp", - bcmp_ftype, int_ftype_any, - BUILT_IN_BCMP, BUILT_IN_NORMAL, 1, 1, 0); - - builtin_function_2 ("__builtin_abs", "abs", - int_ftype_int, int_ftype_int, - BUILT_IN_ABS, BUILT_IN_NORMAL, 0, 0, 0); - builtin_function_2 ("__builtin_fabsf", "fabsf", - float_ftype_float, float_ftype_float, - BUILT_IN_FABS, BUILT_IN_NORMAL, 0, 0, 0); - builtin_function_2 ("__builtin_fabs", "fabs", - double_ftype_double, double_ftype_double, - BUILT_IN_FABS, BUILT_IN_NORMAL, 0, 0, 0); - builtin_function_2 ("__builtin_fabsl", "fabsl", - ldouble_ftype_ldouble, ldouble_ftype_ldouble, - BUILT_IN_FABS, BUILT_IN_NORMAL, 0, 0, 0); - builtin_function_2 ("__builtin_labs", "labs", - long_ftype_long, long_ftype_long, - BUILT_IN_ABS, BUILT_IN_NORMAL, 0, 0, 0); - builtin_function_2 ("__builtin_llabs", "llabs", - longlong_ftype_longlong, longlong_ftype_longlong, - BUILT_IN_ABS, BUILT_IN_NORMAL, 0, !flag_isoc99, 0); - builtin_function_2 ("__builtin_imaxabs", "imaxabs", - intmax_ftype_intmax, intmax_ftype_intmax, - BUILT_IN_ABS, BUILT_IN_NORMAL, 0, !flag_isoc99, 0); - - builtin_function ("__builtin_saveregs", ptr_ftype, BUILT_IN_SAVEREGS, - BUILT_IN_NORMAL, NULL_PTR); - builtin_function ("__builtin_classify_type", default_function_type, - BUILT_IN_CLASSIFY_TYPE, BUILT_IN_NORMAL, NULL_PTR); - builtin_function ("__builtin_next_arg", ptr_ftype, BUILT_IN_NEXT_ARG, - BUILT_IN_NORMAL, NULL_PTR); - builtin_function ("__builtin_args_info", int_ftype_int, BUILT_IN_ARGS_INFO, - BUILT_IN_NORMAL, NULL_PTR); - builtin_function ("__builtin_setjmp", - build_function_type (integer_type_node, - tree_cons (NULL_TREE, ptr_type_node, - endlink)), - BUILT_IN_SETJMP, BUILT_IN_NORMAL, NULL_PTR); - builtin_function ("__builtin_longjmp", - build_function_type (void_type_node, - tree_cons (NULL_TREE, ptr_type_node, - int_endlink)), - BUILT_IN_LONGJMP, BUILT_IN_NORMAL, NULL_PTR); - builtin_function ("__builtin_trap", void_ftype, BUILT_IN_TRAP, - BUILT_IN_NORMAL, NULL_PTR); - - /* ISO C99 IEEE Unordered compares. */ - builtin_function ("__builtin_isgreater", default_function_type, - BUILT_IN_ISGREATER, BUILT_IN_NORMAL, NULL_PTR); - builtin_function ("__builtin_isgreaterequal", default_function_type, - BUILT_IN_ISGREATEREQUAL, BUILT_IN_NORMAL, NULL_PTR); - builtin_function ("__builtin_isless", default_function_type, - BUILT_IN_ISLESS, BUILT_IN_NORMAL, NULL_PTR); - builtin_function ("__builtin_islessequal", default_function_type, - BUILT_IN_ISLESSEQUAL, BUILT_IN_NORMAL, NULL_PTR); - builtin_function ("__builtin_islessgreater", default_function_type, - BUILT_IN_ISLESSGREATER, BUILT_IN_NORMAL, NULL_PTR); - builtin_function ("__builtin_isunordered", default_function_type, - BUILT_IN_ISUNORDERED, BUILT_IN_NORMAL, NULL_PTR); - - /* Untyped call and return. */ - builtin_function ("__builtin_apply_args", ptr_ftype, - BUILT_IN_APPLY_ARGS, BUILT_IN_NORMAL, NULL_PTR); - - temp = tree_cons (NULL_TREE, - build_pointer_type (build_function_type (void_type_node, - NULL_TREE)), - tree_cons (NULL_TREE, ptr_type_node, sizetype_endlink)); - builtin_function ("__builtin_apply", - build_function_type (ptr_type_node, temp), - BUILT_IN_APPLY, BUILT_IN_NORMAL, NULL_PTR); - builtin_function ("__builtin_return", void_ftype_ptr, - BUILT_IN_RETURN, BUILT_IN_NORMAL, NULL_PTR); - - /* Support for varargs.h and stdarg.h. */ - builtin_function ("__builtin_varargs_start", - build_function_type (void_type_node, - tree_cons (NULL_TREE, - va_list_ref_type_node, - endlink)), - BUILT_IN_VARARGS_START, BUILT_IN_NORMAL, NULL_PTR); - - builtin_function ("__builtin_stdarg_start", - build_function_type (void_type_node, - tree_cons (NULL_TREE, - va_list_ref_type_node, - NULL_TREE)), - BUILT_IN_STDARG_START, BUILT_IN_NORMAL, NULL_PTR); - - builtin_function ("__builtin_va_end", - build_function_type (void_type_node, - tree_cons (NULL_TREE, - va_list_ref_type_node, - endlink)), - BUILT_IN_VA_END, BUILT_IN_NORMAL, NULL_PTR); - - builtin_function ("__builtin_va_copy", - build_function_type (void_type_node, - tree_cons (NULL_TREE, - va_list_ref_type_node, - tree_cons (NULL_TREE, - va_list_arg_type_node, - endlink))), - BUILT_IN_VA_COPY, BUILT_IN_NORMAL, NULL_PTR); - - /* ??? Ought to be `T __builtin_expect(T, T)' for any type T. */ - builtin_function ("__builtin_expect", - build_function_type (long_integer_type_node, - tree_cons (NULL_TREE, - long_integer_type_node, - tree_cons (NULL_TREE, - long_integer_type_node, - endlink))), - BUILT_IN_EXPECT, BUILT_IN_NORMAL, NULL_PTR); - - /* Currently under experimentation. */ - builtin_function_2 ("__builtin_memcpy", "memcpy", - memcpy_ftype, memcpy_ftype, - BUILT_IN_MEMCPY, BUILT_IN_NORMAL, 1, 0, 0); - builtin_function_2 ("__builtin_memcmp", "memcmp", - int_ftype_cptr_cptr_sizet, int_ftype_cptr_cptr_sizet, - BUILT_IN_MEMCMP, BUILT_IN_NORMAL, 1, 0, 0); - builtin_function_2 ("__builtin_memset", "memset", - memset_ftype, memset_ftype, - BUILT_IN_MEMSET, BUILT_IN_NORMAL, 1, 0, 0); - built_in_decls[BUILT_IN_STRCMP] = - builtin_function_2 ("__builtin_strcmp", "strcmp", - int_ftype_cstring_cstring, int_ftype_cstring_cstring, - BUILT_IN_STRCMP, BUILT_IN_NORMAL, 1, 0, 0); - builtin_function_2 ("__builtin_strncmp", "strncmp", - int_ftype_cstring_cstring_sizet, - int_ftype_cstring_cstring_sizet, - BUILT_IN_STRNCMP, BUILT_IN_NORMAL, 1, 0, 0); - builtin_function_2 ("__builtin_strstr", "strstr", - string_ftype_cstring_cstring, string_ftype_cstring_cstring, - BUILT_IN_STRSTR, BUILT_IN_NORMAL, 1, 0, 0); - builtin_function_2 ("__builtin_strpbrk", "strpbrk", - string_ftype_cstring_cstring, string_ftype_cstring_cstring, - BUILT_IN_STRPBRK, BUILT_IN_NORMAL, 1, 0, 0); - built_in_decls[BUILT_IN_STRCHR] = - builtin_function_2 ("__builtin_strchr", "strchr", - string_ftype_cstring_int, string_ftype_cstring_int, - BUILT_IN_STRCHR, BUILT_IN_NORMAL, 1, 0, 0); - builtin_function_2 ("__builtin_strrchr", "strrchr", - string_ftype_cstring_int, string_ftype_cstring_int, - BUILT_IN_STRRCHR, BUILT_IN_NORMAL, 1, 0, 0); - builtin_function_2 ("__builtin_strcpy", "strcpy", - string_ftype_string_cstring, string_ftype_string_cstring, - BUILT_IN_STRCPY, BUILT_IN_NORMAL, 1, 0, 0); - builtin_function_2 ("__builtin_strncpy", "strncpy", - string_ftype_string_cstring_sizet, - string_ftype_string_cstring_sizet, - BUILT_IN_STRNCPY, BUILT_IN_NORMAL, 1, 0, 0); - built_in_decls[BUILT_IN_STRCAT] = - builtin_function_2 ("__builtin_strcat", "strcat", - string_ftype_string_cstring, - string_ftype_string_cstring, - BUILT_IN_STRCAT, BUILT_IN_NORMAL, 1, 0, 0); - builtin_function_2 ("__builtin_strncat", "strncat", - string_ftype_string_cstring_sizet, - string_ftype_string_cstring_sizet, - BUILT_IN_STRNCAT, BUILT_IN_NORMAL, 1, 0, 0); - builtin_function_2 ("__builtin_strspn", "strspn", - sizet_ftype_cstring_cstring, sizet_ftype_cstring_cstring, - BUILT_IN_STRSPN, BUILT_IN_NORMAL, 1, 0, 0); - builtin_function_2 ("__builtin_strcspn", "strcspn", - sizet_ftype_cstring_cstring, sizet_ftype_cstring_cstring, - BUILT_IN_STRCSPN, BUILT_IN_NORMAL, 1, 0, 0); - built_in_decls[BUILT_IN_STRLEN] = - builtin_function_2 ("__builtin_strlen", "strlen", - strlen_ftype, strlen_ftype, - BUILT_IN_STRLEN, BUILT_IN_NORMAL, 1, 0, 0); - - builtin_function_2 ("__builtin_sqrtf", "sqrtf", - float_ftype_float, float_ftype_float, - BUILT_IN_FSQRT, BUILT_IN_NORMAL, 1, 0, 0); - builtin_function_2 ("__builtin_sqrt", "sqrt", - double_ftype_double, double_ftype_double, - BUILT_IN_FSQRT, BUILT_IN_NORMAL, 1, 0, 0); - builtin_function_2 ("__builtin_sqrtl", "sqrtl", - ldouble_ftype_ldouble, ldouble_ftype_ldouble, - BUILT_IN_FSQRT, BUILT_IN_NORMAL, 1, 0, 0); - builtin_function_2 ("__builtin_sinf", "sinf", - float_ftype_float, float_ftype_float, - BUILT_IN_SIN, BUILT_IN_NORMAL, 1, 0, 0); - builtin_function_2 ("__builtin_sin", "sin", - double_ftype_double, double_ftype_double, - BUILT_IN_SIN, BUILT_IN_NORMAL, 1, 0, 0); - builtin_function_2 ("__builtin_sinl", "sinl", - ldouble_ftype_ldouble, ldouble_ftype_ldouble, - BUILT_IN_SIN, BUILT_IN_NORMAL, 1, 0, 0); - builtin_function_2 ("__builtin_cosf", "cosf", - float_ftype_float, float_ftype_float, - BUILT_IN_COS, BUILT_IN_NORMAL, 1, 0, 0); - builtin_function_2 ("__builtin_cos", "cos", - double_ftype_double, double_ftype_double, - BUILT_IN_COS, BUILT_IN_NORMAL, 1, 0, 0); - builtin_function_2 ("__builtin_cosl", "cosl", - ldouble_ftype_ldouble, ldouble_ftype_ldouble, - BUILT_IN_COS, BUILT_IN_NORMAL, 1, 0, 0); - - /* ISO C99 complex arithmetic functions. */ - builtin_function_2 ("__builtin_conjf", "conjf", - cfloat_ftype_cfloat, cfloat_ftype_cfloat, - BUILT_IN_CONJ, BUILT_IN_NORMAL, 0, !flag_isoc99, 0); - builtin_function_2 ("__builtin_conj", "conj", - cdouble_ftype_cdouble, cdouble_ftype_cdouble, - BUILT_IN_CONJ, BUILT_IN_NORMAL, 0, !flag_isoc99, 0); - builtin_function_2 ("__builtin_conjl", "conjl", - cldouble_ftype_cldouble, cldouble_ftype_cldouble, - BUILT_IN_CONJ, BUILT_IN_NORMAL, 0, !flag_isoc99, 0); - builtin_function_2 ("__builtin_crealf", "crealf", - float_ftype_cfloat, float_ftype_cfloat, - BUILT_IN_CREAL, BUILT_IN_NORMAL, 0, !flag_isoc99, 0); - builtin_function_2 ("__builtin_creal", "creal", - double_ftype_cdouble, double_ftype_cdouble, - BUILT_IN_CREAL, BUILT_IN_NORMAL, 0, !flag_isoc99, 0); - builtin_function_2 ("__builtin_creall", "creall", - ldouble_ftype_cldouble, ldouble_ftype_cldouble, - BUILT_IN_CREAL, BUILT_IN_NORMAL, 0, !flag_isoc99, 0); - builtin_function_2 ("__builtin_cimagf", "cimagf", - float_ftype_cfloat, float_ftype_cfloat, - BUILT_IN_CIMAG, BUILT_IN_NORMAL, 0, !flag_isoc99, 0); - builtin_function_2 ("__builtin_cimag", "cimag", - double_ftype_cdouble, double_ftype_cdouble, - BUILT_IN_CIMAG, BUILT_IN_NORMAL, 0, !flag_isoc99, 0); - builtin_function_2 ("__builtin_cimagl", "cimagl", - ldouble_ftype_cldouble, ldouble_ftype_cldouble, - BUILT_IN_CIMAG, BUILT_IN_NORMAL, 0, !flag_isoc99, 0); - - built_in_decls[BUILT_IN_PUTCHAR] = - builtin_function ("__builtin_putchar", int_ftype_int, - BUILT_IN_PUTCHAR, BUILT_IN_NORMAL, "putchar"); - built_in_decls[BUILT_IN_PUTS] = - builtin_function ("__builtin_puts", puts_ftype, - BUILT_IN_PUTS, BUILT_IN_NORMAL, "puts"); - builtin_function_2 ("__builtin_printf", "printf", - printf_ftype, printf_ftype, - BUILT_IN_PRINTF, BUILT_IN_FRONTEND, 1, 0, 0); - builtin_function_2 ("__builtin_fprintf", "fprintf", - fprintf_ftype, fprintf_ftype, - BUILT_IN_FPRINTF, BUILT_IN_FRONTEND, 1, 0, 0); - built_in_decls[BUILT_IN_FWRITE] = - builtin_function ("__builtin_fwrite", fwrite_ftype, - BUILT_IN_FWRITE, BUILT_IN_NORMAL, "fwrite"); - built_in_decls[BUILT_IN_FPUTC] = - builtin_function ("__builtin_fputc", fputc_ftype, - BUILT_IN_FPUTC, BUILT_IN_NORMAL, "fputc"); - /* Declare the __builtin_ style with arguments and the regular style - without them. We rely on stdio.h to supply the arguments for the - regular style declaration since we had to use void* instead of - FILE* in the __builtin_ prototype supplied here. */ - built_in_decls[BUILT_IN_FPUTS] = - builtin_function_2 ("__builtin_fputs", "fputs", - fputs_ftype, int_ftype_any, - BUILT_IN_FPUTS, BUILT_IN_NORMAL, 1, 0, 0); - /* Declare these functions non-returning to avoid spurious "control drops through" warnings. */ ! builtin_function_2 (NULL_PTR, "abort", NULL_TREE, ((c_language == clk_cplusplus) ! ? void_ftype : void_ftype_any), 0, NOT_BUILT_IN, 0, 0, 1); ! builtin_function_2 (NULL_PTR, "exit", NULL_TREE, ((c_language == clk_cplusplus) ! ? void_ftype_int : void_ftype_any), 0, NOT_BUILT_IN, 0, 0, 1); - #if 0 - /* Support for these has not been written in either expand_builtin - or build_function_call. */ - builtin_function ("__builtin_div", default_ftype, BUILT_IN_DIV, - BUILT_IN_NORMAL, NULL_PTR); - builtin_function ("__builtin_ldiv", default_ftype, BUILT_IN_LDIV, - BUILT_IN_NORMAL, NULL_PTR); - builtin_function ("__builtin_ffloor", double_ftype_double, BUILT_IN_FFLOOR, - BUILT_IN_NORMAL, NULL_PTR); - builtin_function ("__builtin_fceil", double_ftype_double, BUILT_IN_FCEIL, - BUILT_IN_NORMAL, NULL_PTR); - builtin_function ("__builtin_fmod", double_ftype_double_double, - BUILT_IN_FMOD, BUILT_IN_NORMAL, NULL_PTR); - builtin_function ("__builtin_frem", double_ftype_double_double, - BUILT_IN_FREM, BUILT_IN_NORMAL, NULL_PTR); - builtin_function ("__builtin_getexp", double_ftype_double, BUILT_IN_GETEXP, - BUILT_IN_NORMAL, NULL_PTR); - builtin_function ("__builtin_getman", double_ftype_double, BUILT_IN_GETMAN, - BUILT_IN_NORMAL, NULL_PTR); - #endif - main_identifier_node = get_identifier ("main"); /* ??? Perhaps there's a better place to do this. But it is related --- 2722,2862 ---- va_list_ref_type_node = build_reference_type (va_list_type_node); } traditional_len_type_node = ((flag_traditional && c_language != clk_cplusplus) ? integer_type_node : sizetype); ! #define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \ ! builtin_types[(int) ENUM] = VALUE; ! #define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \ ! builtin_types[(int) ENUM] \ ! = build_function_type (builtin_types[(int) RETURN], \ ! void_list_node); ! #define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \ ! builtin_types[(int) ENUM] \ ! = build_function_type (builtin_types[(int) RETURN], \ ! tree_cons (NULL_TREE, \ ! builtin_types[(int) ARG1], \ ! void_list_node)); ! #define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \ ! builtin_types[(int) ENUM] \ ! = build_function_type \ ! (builtin_types[(int) RETURN], \ ! tree_cons (NULL_TREE, \ ! builtin_types[(int) ARG1], \ ! tree_cons (NULL_TREE, \ ! builtin_types[(int) ARG2], \ ! void_list_node))); ! #define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \ ! builtin_types[(int) ENUM] \ ! = build_function_type \ ! (builtin_types[(int) RETURN], \ ! tree_cons (NULL_TREE, \ ! builtin_types[(int) ARG1], \ ! tree_cons (NULL_TREE, \ ! builtin_types[(int) ARG2], \ ! tree_cons (NULL_TREE, \ ! builtin_types[(int) ARG3], \ ! void_list_node)))); ! #define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \ ! builtin_types[(int) ENUM] \ ! = build_function_type \ ! (builtin_types[(int) RETURN], \ ! tree_cons (NULL_TREE, \ ! builtin_types[(int) ARG1], \ ! tree_cons (NULL_TREE, \ ! builtin_types[(int) ARG2], \ ! tree_cons \ ! (NULL_TREE, \ ! builtin_types[(int) ARG3], \ ! tree_cons (NULL_TREE, \ ! builtin_types[(int) ARG4], \ ! void_list_node))))); ! #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \ ! builtin_types[(int) ENUM] \ ! = build_function_type (builtin_types[(int) RETURN], NULL_TREE); ! #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \ ! builtin_types[(int) ENUM] \ ! = build_function_type (builtin_types[(int) RETURN], \ ! tree_cons (NULL_TREE, \ ! builtin_types[(int) ARG1], \ NULL_TREE)); ! #define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \ ! builtin_types[(int) ENUM] \ ! = build_function_type \ ! (builtin_types[(int) RETURN], \ ! tree_cons (NULL_TREE, \ ! builtin_types[(int) ARG1], \ ! tree_cons (NULL_TREE, \ ! builtin_types[(int) ARG2], \ ! NULL_TREE))); ! #define DEF_POINTER_TYPE(ENUM, TYPE) \ ! builtin_types[(int) ENUM] \ ! = build_pointer_type (builtin_types[(int) TYPE]); ! #include "builtin-types.def" ! #undef DEF_PRIMITIVE_TYPE ! #undef DEF_FUNCTION_TYPE_1 ! #undef DEF_FUNCTION_TYPE_2 ! #undef DEF_FUNCTION_TYPE_3 ! #undef DEF_FUNCTION_TYPE_4 ! #undef DEF_FUNCTION_TYPE_VAR_0 ! #undef DEF_FUNCTION_TYPE_VAR_1 ! #undef DEF_POINTER_TYPE ! #define DEF_BUILTIN(ENUM, NAME, CLASS, \ ! TYPE, LIBTYPE, BOTH_P, FALLBACK_P, NONANSI_P) \ ! if (NAME) \ ! { \ ! tree decl; \ ! \ ! if (strncmp (NAME, "__builtin_", strlen ("__builtin_")) != 0) \ ! abort (); \ ! \ ! if (!BOTH_P) \ ! decl = builtin_function (NAME, builtin_types[TYPE], ENUM, \ ! CLASS, \ ! (FALLBACK_P \ ! ? (NAME + strlen ("__builtin_")) \ ! : NULL)); \ ! else \ ! decl = builtin_function_2 (NAME, \ ! NAME + strlen ("__builtin_"), \ ! builtin_types[TYPE], \ ! builtin_types[LIBTYPE], \ ! ENUM, \ ! CLASS, \ ! FALLBACK_P, \ ! NONANSI_P, \ ! /*noreturn_p=*/0); \ ! \ ! built_in_decls[(int) ENUM] = decl; \ ! } ! #include "builtins.def" ! #undef DEF_BUILTIN /* Declare _exit and _Exit just to mark them as non-returning. */ ! builtin_function_2 (NULL, "_exit", NULL_TREE, ! builtin_types[BT_FN_VOID_INT], 0, NOT_BUILT_IN, 0, 1, 1); ! builtin_function_2 (NULL, "_Exit", NULL_TREE, ! builtin_types[BT_FN_VOID_INT], 0, NOT_BUILT_IN, 0, !flag_isoc99, 1); /* Declare these functions non-returning to avoid spurious "control drops through" warnings. */ ! builtin_function_2 (NULL, "abort", NULL_TREE, ((c_language == clk_cplusplus) ! ? builtin_types[BT_FN_VOID] ! : builtin_types[BT_FN_VOID_VAR]), 0, NOT_BUILT_IN, 0, 0, 1); ! builtin_function_2 (NULL, "exit", NULL_TREE, ((c_language == clk_cplusplus) ! ? builtin_types[BT_FN_VOID_INT] ! : builtin_types[BT_FN_VOID_VAR]), 0, NOT_BUILT_IN, 0, 0, 1); main_identifier_node = get_identifier ("main"); /* ??? Perhaps there's a better place to do this. But it is related *************** build_va_arg (expr, type) *** 3534,3539 **** --- 2872,2924 ---- } + /* Linked list of disabled built-in functions. */ + + typedef struct disabled_builtin + { + const char *name; + struct disabled_builtin *next; + } disabled_builtin; + static disabled_builtin *disabled_builtins = NULL; + + static bool builtin_function_disabled_p PARAMS ((const char *)); + + /* Disable a built-in function specified by -fno-builtin-NAME. If NAME + begins with "__builtin_", give an error. */ + + void + disable_builtin_function (name) + const char *name; + { + if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0) + error ("cannot disable built-in function `%s'", name); + else + { + disabled_builtin *new = xmalloc (sizeof (disabled_builtin)); + new->name = name; + new->next = disabled_builtins; + disabled_builtins = new; + } + } + + + /* Return true if the built-in function NAME has been disabled, false + otherwise. */ + + static bool + builtin_function_disabled_p (name) + const char *name; + { + disabled_builtin *p; + for (p = disabled_builtins; p != NULL; p = p->next) + { + if (strcmp (name, p->name) == 0) + return true; + } + return false; + } + + /* Possibly define a builtin function with one or two names. BUILTIN_NAME is an __builtin_-prefixed name; NAME is the ordinary name; one or both of these may be NULL (though both being NULL is useless). *************** builtin_function_2 (builtin_name, name, *** 3567,3582 **** if (builtin_name != 0) { bdecl = builtin_function (builtin_name, builtin_type, function_code, ! class, library_name_p ? name : NULL_PTR); if (noreturn_p) { TREE_THIS_VOLATILE (bdecl) = 1; TREE_SIDE_EFFECTS (bdecl) = 1; } } ! if (name != 0 && !flag_no_builtin && !(nonansi_p && flag_no_nonansi_builtin)) { ! decl = builtin_function (name, type, function_code, class, NULL_PTR); if (nonansi_p) DECL_BUILT_IN_NONANSI (decl) = 1; if (noreturn_p) --- 2952,2968 ---- if (builtin_name != 0) { bdecl = builtin_function (builtin_name, builtin_type, function_code, ! class, library_name_p ? name : NULL); if (noreturn_p) { TREE_THIS_VOLATILE (bdecl) = 1; TREE_SIDE_EFFECTS (bdecl) = 1; } } ! if (name != 0 && !flag_no_builtin && !builtin_function_disabled_p (name) ! && !(nonansi_p && flag_no_nonansi_builtin)) { ! decl = builtin_function (name, type, function_code, class, NULL); if (nonansi_p) DECL_BUILT_IN_NONANSI (decl) = 1; if (noreturn_p) *************** int *** 3654,3663 **** self_promoting_args_p (parms) tree parms; { ! register tree t; for (t = parms; t; t = TREE_CHAIN (t)) { ! register tree type = TREE_VALUE (t); if (TREE_CHAIN (t) == 0 && type != void_type_node) return 0; --- 3040,3049 ---- self_promoting_args_p (parms) tree parms; { ! tree t; for (t = parms; t; t = TREE_CHAIN (t)) { ! tree type = TREE_VALUE (t); if (TREE_CHAIN (t) == 0 && type != void_type_node) return 0; *************** expand_tree_builtin (function, params, c *** 3707,3728 **** --- 3093,3125 ---- switch (DECL_FUNCTION_CODE (function)) { case BUILT_IN_ABS: + case BUILT_IN_LABS: + case BUILT_IN_LLABS: + case BUILT_IN_IMAXABS: case BUILT_IN_FABS: + case BUILT_IN_FABSL: + case BUILT_IN_FABSF: if (coerced_params == 0) return integer_zero_node; return build_unary_op (ABS_EXPR, TREE_VALUE (coerced_params), 0); case BUILT_IN_CONJ: + case BUILT_IN_CONJF: + case BUILT_IN_CONJL: if (coerced_params == 0) return integer_zero_node; return build_unary_op (CONJ_EXPR, TREE_VALUE (coerced_params), 0); case BUILT_IN_CREAL: + case BUILT_IN_CREALF: + case BUILT_IN_CREALL: if (coerced_params == 0) return integer_zero_node; return build_unary_op (REALPART_EXPR, TREE_VALUE (coerced_params), 0); case BUILT_IN_CIMAG: + case BUILT_IN_CIMAGF: + case BUILT_IN_CIMAGL: if (coerced_params == 0) return integer_zero_node; return build_unary_op (IMAGPART_EXPR, TREE_VALUE (coerced_params), 0); *************** statement_code_p (code) *** 3810,3815 **** --- 3207,3213 ---- { switch (code) { + case CLEANUP_STMT: case EXPR_STMT: case COMPOUND_STMT: case DECL_STMT: *************** statement_code_p (code) *** 3836,3842 **** } } ! /* Walk the statemen tree, rooted at *tp. Apply FUNC to all the sub-trees of *TP in a pre-order traversal. FUNC is called with the DATA and the address of each sub-tree. If FUNC returns a non-NULL value, the traversal is aborted, and the value returned by FUNC is --- 3234,3240 ---- } } ! /* Walk the statement tree, rooted at *tp. Apply FUNC to all the sub-trees of *TP in a pre-order traversal. FUNC is called with the DATA and the address of each sub-tree. If FUNC returns a non-NULL value, the traversal is aborted, and the value returned by FUNC is *************** walk_stmt_tree (tp, func, data) *** 3882,3906 **** if (result) return result; - /* Even if we didn't, FUNC may have decided that there was nothing - interesting below this point in the tree. */ - if (!walk_subtrees) - return NULL_TREE; - /* FUNC may have modified the tree, recheck that we're looking at a statement node. */ code = TREE_CODE (*tp); if (!statement_code_p (code)) return NULL_TREE; ! /* Walk over all the sub-trees of this operand. Statement nodes never ! contain RTL, and we needn't worry about TARGET_EXPRs. */ ! len = TREE_CODE_LENGTH (code); ! /* Go through the subtrees. We need to do this in forward order so ! that the scope of a FOR_EXPR is handled properly. */ ! for (i = 0; i < len; ++i) ! WALK_SUBTREE (TREE_OPERAND (*tp, i)); /* Finally visit the chain. This can be tail-recursion optimized if we write it this way. */ --- 3280,3304 ---- if (result) return result; /* FUNC may have modified the tree, recheck that we're looking at a statement node. */ code = TREE_CODE (*tp); if (!statement_code_p (code)) return NULL_TREE; ! /* Visit the subtrees unless FUNC decided that there was nothing ! interesting below this point in the tree. */ ! if (walk_subtrees) ! { ! /* Walk over all the sub-trees of this operand. Statement nodes ! never contain RTL, and we needn't worry about TARGET_EXPRs. */ ! len = TREE_CODE_LENGTH (code); ! /* Go through the subtrees. We need to do this in forward order so ! that the scope of a FOR_EXPR is handled properly. */ ! for (i = 0; i < len; ++i) ! WALK_SUBTREE (TREE_OPERAND (*tp, i)); ! } /* Finally visit the chain. This can be tail-recursion optimized if we write it this way. */ *************** c_add_case_label (cases, cond, low_value *** 4086,4091 **** --- 3484,3522 ---- return case_label; } + /* Finish an expression taking the address of LABEL. Returns an + expression for the address. */ + + tree + finish_label_address_expr (label) + tree label; + { + tree result; + + if (pedantic) + { + if (c_language == clk_cplusplus) + pedwarn ("ISO C++ forbids taking the address of a label"); + else + pedwarn ("ISO C forbids taking the address of a label"); + } + + label = lookup_label (label); + if (label == NULL_TREE) + result = null_pointer_node; + else + { + TREE_USED (label) = 1; + result = build1 (ADDR_EXPR, ptr_type_node, label); + TREE_CONSTANT (result) = 1; + /* The current function in not necessarily uninlinable. + Computed gotos are incompatible with inlining, but the value + here could be used only in a diagnostic, for example. */ + } + + return result; + } + /* Mark P (a stmt_tree) for GC. The use of a `void *' for the parameter allows this function to be used as a GC-marking function. */ *************** mark_stmt_tree (p) *** 4104,4112 **** void c_mark_lang_decl (c) ! struct c_lang_decl *c; { - ggc_mark_tree (c->saved_tree); } /* Mark F for GC. */ --- 3535,3542 ---- void c_mark_lang_decl (c) ! struct c_lang_decl *c ATTRIBUTE_UNUSED; { } /* Mark F for GC. */ *************** c_expand_expr (exp, target, tmode, modif *** 4137,4142 **** --- 3567,3573 ---- { tree rtl_expr; rtx result; + bool preserve_result = false; /* Since expand_expr_stmt calls free_temp_slots after every expression statement, we must call push_temp_slots here. *************** c_expand_expr (exp, target, tmode, modif *** 4144,4153 **** out-of-scope after the first EXPR_STMT from within the STMT_EXPR. */ push_temp_slots (); ! rtl_expr = expand_start_stmt_expr (); expand_stmt (STMT_EXPR_STMT (exp)); expand_end_stmt_expr (rtl_expr); result = expand_expr (rtl_expr, target, tmode, modifier); pop_temp_slots (); return result; } --- 3575,3623 ---- out-of-scope after the first EXPR_STMT from within the STMT_EXPR. */ push_temp_slots (); ! rtl_expr = expand_start_stmt_expr (!STMT_EXPR_NO_SCOPE (exp)); ! ! /* If we want the result of this expression, find the last ! EXPR_STMT in the COMPOUND_STMT and mark it as addressable. */ ! if (target != const0_rtx ! && TREE_CODE (STMT_EXPR_STMT (exp)) == COMPOUND_STMT ! && TREE_CODE (COMPOUND_BODY (STMT_EXPR_STMT (exp))) == SCOPE_STMT) ! { ! tree expr = COMPOUND_BODY (STMT_EXPR_STMT (exp)); ! tree last = TREE_CHAIN (expr); ! ! while (TREE_CHAIN (last)) ! { ! expr = last; ! last = TREE_CHAIN (last); ! } ! ! if (TREE_CODE (last) == SCOPE_STMT ! && TREE_CODE (expr) == EXPR_STMT) ! { ! TREE_ADDRESSABLE (expr) = 1; ! preserve_result = true; ! } ! } ! expand_stmt (STMT_EXPR_STMT (exp)); expand_end_stmt_expr (rtl_expr); + result = expand_expr (rtl_expr, target, tmode, modifier); + if (preserve_result && GET_CODE (result) == MEM) + { + if (GET_MODE (result) != BLKmode) + result = copy_to_reg (result); + else + preserve_temp_slots (result); + } + + /* If the statment-expression does not have a scope, then the + new temporaries we created within it must live beyond the + statement-expression. */ + if (STMT_EXPR_NO_SCOPE (exp)) + preserve_temp_slots (NULL_RTX); + pop_temp_slots (); return result; } *************** c_expand_expr (exp, target, tmode, modif *** 4163,4172 **** == BUILT_IN_FRONTEND)) return c_expand_builtin (exp, target, tmode, modifier); else ! abort(); } break; default: abort (); } --- 3633,3651 ---- == BUILT_IN_FRONTEND)) return c_expand_builtin (exp, target, tmode, modifier); else ! abort (); } break; + case COMPOUND_LITERAL_EXPR: + { + /* Initialize the anonymous variable declared in the compound + literal, then return the variable. */ + tree decl = COMPOUND_LITERAL_EXPR_DECL (exp); + emit_local_var (decl); + return expand_expr (decl, target, tmode, modifier); + } + default: abort (); } *************** int *** 4209,4227 **** c_unsafe_for_reeval (exp) tree exp; { ! /* Statement expressions may not be reevaluated. */ ! if (TREE_CODE (exp) == STMT_EXPR) return 2; /* Walk all other expressions. */ return -1; } ! /* Tree code classes. */ #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE, ! static char c_tree_code_type[] = { 'x', #include "c-common.def" }; --- 3688,3720 ---- c_unsafe_for_reeval (exp) tree exp; { ! /* Statement expressions may not be reevaluated, likewise compound ! literals. */ ! if (TREE_CODE (exp) == STMT_EXPR ! || TREE_CODE (exp) == COMPOUND_LITERAL_EXPR) return 2; /* Walk all other expressions. */ return -1; } ! /* Hook used by staticp to handle language-specific tree codes. */ ! ! int ! c_staticp (exp) ! tree exp; ! { ! if (TREE_CODE (exp) == COMPOUND_LITERAL_EXPR ! && TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (exp))) ! return 1; ! return 0; ! } ! ! /* Tree code classes. */ #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE, ! static const char c_tree_code_type[] = { 'x', #include "c-common.def" }; *************** static char c_tree_code_type[] = { *** 4233,4239 **** #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) LENGTH, ! static int c_tree_code_length[] = { 0, #include "c-common.def" }; --- 3726,3732 ---- #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) LENGTH, ! static const int c_tree_code_length[] = { 0, #include "c-common.def" }; *************** static int c_tree_code_length[] = { *** 4243,4269 **** Used for printing out the tree and error messages. */ #define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME, ! static const char *c_tree_code_name[] = { "@@dummy", #include "c-common.def" }; #undef DEFTREECODE /* Adds the tree codes specific to the C front end to the list of all ! tree codes. */ void add_c_tree_codes () { memcpy (tree_code_type + (int) LAST_AND_UNUSED_TREE_CODE, c_tree_code_type, ! (int)LAST_C_TREE_CODE - (int)LAST_AND_UNUSED_TREE_CODE); memcpy (tree_code_length + (int) LAST_AND_UNUSED_TREE_CODE, c_tree_code_length, ! (LAST_C_TREE_CODE - (int)LAST_AND_UNUSED_TREE_CODE) * sizeof (int)); memcpy (tree_code_name + (int) LAST_AND_UNUSED_TREE_CODE, c_tree_code_name, ! (LAST_C_TREE_CODE - (int)LAST_AND_UNUSED_TREE_CODE) * sizeof (char *)); lang_unsafe_for_reeval = c_unsafe_for_reeval; } --- 3736,3762 ---- Used for printing out the tree and error messages. */ #define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME, ! static const char *const c_tree_code_name[] = { "@@dummy", #include "c-common.def" }; #undef DEFTREECODE /* Adds the tree codes specific to the C front end to the list of all ! tree codes. */ void add_c_tree_codes () { memcpy (tree_code_type + (int) LAST_AND_UNUSED_TREE_CODE, c_tree_code_type, ! (int) LAST_C_TREE_CODE - (int) LAST_AND_UNUSED_TREE_CODE); memcpy (tree_code_length + (int) LAST_AND_UNUSED_TREE_CODE, c_tree_code_length, ! (LAST_C_TREE_CODE - (int) LAST_AND_UNUSED_TREE_CODE) * sizeof (int)); memcpy (tree_code_name + (int) LAST_AND_UNUSED_TREE_CODE, c_tree_code_name, ! (LAST_C_TREE_CODE - (int) LAST_AND_UNUSED_TREE_CODE) * sizeof (char *)); lang_unsafe_for_reeval = c_unsafe_for_reeval; } *************** c_expand_builtin (exp, target, tmode, mo *** 4295,4308 **** { case BUILT_IN_PRINTF: target = c_expand_builtin_printf (arglist, target, tmode, ! modifier, ignore); if (target) return target; break; case BUILT_IN_FPRINTF: target = c_expand_builtin_fprintf (arglist, target, tmode, ! modifier, ignore); if (target) return target; break; --- 3788,3815 ---- { case BUILT_IN_PRINTF: target = c_expand_builtin_printf (arglist, target, tmode, ! modifier, ignore, /*unlocked=*/ 0); ! if (target) ! return target; ! break; ! ! case BUILT_IN_PRINTF_UNLOCKED: ! target = c_expand_builtin_printf (arglist, target, tmode, ! modifier, ignore, /*unlocked=*/ 1); if (target) return target; break; case BUILT_IN_FPRINTF: target = c_expand_builtin_fprintf (arglist, target, tmode, ! modifier, ignore, /*unlocked=*/ 0); ! if (target) ! return target; ! break; ! ! case BUILT_IN_FPRINTF_UNLOCKED: ! target = c_expand_builtin_fprintf (arglist, target, tmode, ! modifier, ignore, /*unlocked=*/ 1); if (target) return target; break; *************** c_expand_builtin (exp, target, tmode, mo *** 4319,4374 **** /* Check an arglist to *printf for problems. The arglist should start at the format specifier, with the remaining arguments immediately ! following it. */ static int is_valid_printf_arglist (arglist) ! tree arglist; { ! /* Save this value so we can restore it later. */ const int SAVE_pedantic = pedantic; int diagnostic_occurred = 0; /* Set this to a known value so the user setting won't affect code generation. */ pedantic = 1; ! /* Check to make sure there are no format specifier errors. */ ! check_function_format (&diagnostic_occurred, ! maybe_get_identifier("printf"), ! NULL_TREE, arglist); ! /* Restore the value of `pedantic'. */ pedantic = SAVE_pedantic; /* If calling `check_function_format_ptr' produces a warning, we ! return false, otherwise we return true. */ return ! diagnostic_occurred; } /* If the arguments passed to printf are suitable for optimizations, ! we attempt to transform the call. */ static rtx ! c_expand_builtin_printf (arglist, target, tmode, modifier, ignore) tree arglist; rtx target; enum machine_mode tmode; enum expand_modifier modifier; int ignore; { ! tree fn_putchar = built_in_decls[BUILT_IN_PUTCHAR], ! fn_puts = built_in_decls[BUILT_IN_PUTS]; tree fn, format_arg, stripped_string; /* If the return value is used, or the replacement _DECL isn't ! initialized, don't do the transformation. */ if (!ignore || !fn_putchar || !fn_puts) return 0; ! /* Verify the required arguments in the original call. */ if (arglist == 0 || (TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE)) return 0; ! /* Check the specifier vs. the parameters. */ if (!is_valid_printf_arglist (arglist)) return 0; --- 3826,3892 ---- /* Check an arglist to *printf for problems. The arglist should start at the format specifier, with the remaining arguments immediately ! following it. */ static int is_valid_printf_arglist (arglist) ! tree arglist; { ! /* Save this value so we can restore it later. */ const int SAVE_pedantic = pedantic; int diagnostic_occurred = 0; + tree attrs; /* Set this to a known value so the user setting won't affect code generation. */ pedantic = 1; ! /* Check to make sure there are no format specifier errors. */ ! attrs = tree_cons (get_identifier ("format"), ! tree_cons (NULL_TREE, ! get_identifier ("printf"), ! tree_cons (NULL_TREE, ! integer_one_node, ! tree_cons (NULL_TREE, ! build_int_2 (2, 0), ! NULL_TREE))), ! NULL_TREE); ! check_function_format (&diagnostic_occurred, attrs, arglist); ! /* Restore the value of `pedantic'. */ pedantic = SAVE_pedantic; /* If calling `check_function_format_ptr' produces a warning, we ! return false, otherwise we return true. */ return ! diagnostic_occurred; } /* If the arguments passed to printf are suitable for optimizations, ! we attempt to transform the call. */ static rtx ! c_expand_builtin_printf (arglist, target, tmode, modifier, ignore, unlocked) tree arglist; rtx target; enum machine_mode tmode; enum expand_modifier modifier; int ignore; + int unlocked; { ! tree fn_putchar = unlocked ? ! built_in_decls[BUILT_IN_PUTCHAR_UNLOCKED] : built_in_decls[BUILT_IN_PUTCHAR]; ! tree fn_puts = unlocked ? ! built_in_decls[BUILT_IN_PUTS_UNLOCKED] : built_in_decls[BUILT_IN_PUTS]; tree fn, format_arg, stripped_string; /* If the return value is used, or the replacement _DECL isn't ! initialized, don't do the transformation. */ if (!ignore || !fn_putchar || !fn_puts) return 0; ! /* Verify the required arguments in the original call. */ if (arglist == 0 || (TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE)) return 0; ! /* Check the specifier vs. the parameters. */ if (!is_valid_printf_arglist (arglist)) return 0; *************** c_expand_builtin_printf (arglist, target *** 4384,4396 **** /* OK! We can attempt optimization. */ ! /* If the format specifier was "%s\n", call __builtin_puts(arg2). */ if (strcmp (TREE_STRING_POINTER (stripped_string), "%s\n") == 0) { arglist = TREE_CHAIN (arglist); fn = fn_puts; } ! /* If the format specifier was "%c", call __builtin_putchar (arg2). */ else if (strcmp (TREE_STRING_POINTER (stripped_string), "%c") == 0) { arglist = TREE_CHAIN (arglist); --- 3902,3914 ---- /* OK! We can attempt optimization. */ ! /* If the format specifier was "%s\n", call __builtin_puts(arg2). */ if (strcmp (TREE_STRING_POINTER (stripped_string), "%s\n") == 0) { arglist = TREE_CHAIN (arglist); fn = fn_puts; } ! /* If the format specifier was "%c", call __builtin_putchar (arg2). */ else if (strcmp (TREE_STRING_POINTER (stripped_string), "%c") == 0) { arglist = TREE_CHAIN (arglist); *************** c_expand_builtin_printf (arglist, target *** 4398,4404 **** } else { ! /* We can't handle anything else with % args or %% ... yet. */ if (strchr (TREE_STRING_POINTER (stripped_string), '%')) return 0; --- 3916,3922 ---- } else { ! /* We can't handle anything else with % args or %% ... yet. */ if (strchr (TREE_STRING_POINTER (stripped_string), '%')) return 0; *************** c_expand_builtin_printf (arglist, target *** 4409,4415 **** { /* Given printf("c"), (where c is any one character,) convert "c"[0] to an int and pass that to the replacement ! function. */ arglist = build_int_2 (TREE_STRING_POINTER (stripped_string)[0], 0); arglist = build_tree_list (NULL_TREE, arglist); --- 3927,3933 ---- { /* Given printf("c"), (where c is any one character,) convert "c"[0] to an int and pass that to the replacement ! function. */ arglist = build_int_2 (TREE_STRING_POINTER (stripped_string)[0], 0); arglist = build_tree_list (NULL_TREE, arglist); *************** c_expand_builtin_printf (arglist, target *** 4446,4470 **** } /* If the arguments passed to fprintf are suitable for optimizations, ! we attempt to transform the call. */ static rtx ! c_expand_builtin_fprintf (arglist, target, tmode, modifier, ignore) tree arglist; rtx target; enum machine_mode tmode; enum expand_modifier modifier; int ignore; { ! tree fn_fputc = built_in_decls[BUILT_IN_FPUTC], ! fn_fputs = built_in_decls[BUILT_IN_FPUTS]; tree fn, format_arg, stripped_string; /* If the return value is used, or the replacement _DECL isn't ! initialized, don't do the transformation. */ if (!ignore || !fn_fputc || !fn_fputs) return 0; ! /* Verify the required arguments in the original call. */ if (arglist == 0 || (TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE) || (TREE_CHAIN (arglist) == 0) --- 3964,3991 ---- } /* If the arguments passed to fprintf are suitable for optimizations, ! we attempt to transform the call. */ static rtx ! c_expand_builtin_fprintf (arglist, target, tmode, modifier, ignore, unlocked) tree arglist; rtx target; enum machine_mode tmode; enum expand_modifier modifier; int ignore; + int unlocked; { ! tree fn_fputc = unlocked ? ! built_in_decls[BUILT_IN_FPUTC_UNLOCKED] : built_in_decls[BUILT_IN_FPUTC]; ! tree fn_fputs = unlocked ? ! built_in_decls[BUILT_IN_FPUTS_UNLOCKED] : built_in_decls[BUILT_IN_FPUTS]; tree fn, format_arg, stripped_string; /* If the return value is used, or the replacement _DECL isn't ! initialized, don't do the transformation. */ if (!ignore || !fn_fputc || !fn_fputs) return 0; ! /* Verify the required arguments in the original call. */ if (arglist == 0 || (TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE) || (TREE_CHAIN (arglist) == 0) *************** c_expand_builtin_fprintf (arglist, targe *** 4472,4478 **** POINTER_TYPE)) return 0; ! /* Check the specifier vs. the parameters. */ if (!is_valid_printf_arglist (TREE_CHAIN (arglist))) return 0; --- 3993,3999 ---- POINTER_TYPE)) return 0; ! /* Check the specifier vs. the parameters. */ if (!is_valid_printf_arglist (TREE_CHAIN (arglist))) return 0; *************** c_expand_builtin_fprintf (arglist, targe *** 4488,4494 **** /* OK! We can attempt optimization. */ ! /* If the format specifier was "%s", call __builtin_fputs(arg3, arg1). */ if (strcmp (TREE_STRING_POINTER (stripped_string), "%s") == 0) { tree newarglist = build_tree_list (NULL_TREE, TREE_VALUE (arglist)); --- 4009,4015 ---- /* OK! We can attempt optimization. */ ! /* If the format specifier was "%s", call __builtin_fputs(arg3, arg1). */ if (strcmp (TREE_STRING_POINTER (stripped_string), "%s") == 0) { tree newarglist = build_tree_list (NULL_TREE, TREE_VALUE (arglist)); *************** c_expand_builtin_fprintf (arglist, targe *** 4497,4503 **** newarglist); fn = fn_fputs; } ! /* If the format specifier was "%c", call __builtin_fputc (arg3, arg1). */ else if (strcmp (TREE_STRING_POINTER (stripped_string), "%c") == 0) { tree newarglist = build_tree_list (NULL_TREE, TREE_VALUE (arglist)); --- 4018,4024 ---- newarglist); fn = fn_fputs; } ! /* If the format specifier was "%c", call __builtin_fputc (arg3, arg1). */ else if (strcmp (TREE_STRING_POINTER (stripped_string), "%c") == 0) { tree newarglist = build_tree_list (NULL_TREE, TREE_VALUE (arglist)); *************** c_expand_builtin_fprintf (arglist, targe *** 4508,4514 **** } else { ! /* We can't handle anything else with % args or %% ... yet. */ if (strchr (TREE_STRING_POINTER (stripped_string), '%')) return 0; --- 4029,4035 ---- } else { ! /* We can't handle anything else with % args or %% ... yet. */ if (strchr (TREE_STRING_POINTER (stripped_string), '%')) return 0; *************** boolean_increment (code, arg) *** 4566,4578 **** return val; } ! /* Do the parts of lang_init common to C and C++. */ void ! c_common_lang_init () { /* If still "unspecified", make it match -fbounded-pointers. */ ! if (flag_bounds_check < 0) flag_bounds_check = flag_bounded_pointers; /* Special format checking options don't work without -Wformat; warn if --- 4087,4152 ---- return val; } + /* Handle C and C++ default attributes. */ ! enum built_in_attribute ! { ! #define DEF_ATTR_NULL_TREE(ENUM) ENUM, ! #define DEF_ATTR_INT(ENUM, VALUE) ENUM, ! #define DEF_ATTR_IDENT(ENUM, STRING) ENUM, ! #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM, ! #define DEF_FN_ATTR(NAME, ATTRS, PREDICATE) /* No entry needed in enum. */ ! #include "builtin-attrs.def" ! #undef DEF_ATTR_NULL_TREE ! #undef DEF_ATTR_INT ! #undef DEF_ATTR_IDENT ! #undef DEF_ATTR_TREE_LIST ! #undef DEF_FN_ATTR ! ATTR_LAST ! }; ! ! static tree built_in_attributes[(int) ATTR_LAST]; ! ! static bool c_attrs_initialized = false; ! ! static void c_init_attributes PARAMS ((void)); ! ! /* Common initialization before parsing options. */ void ! c_common_init_options (lang) ! enum c_language_kind lang; { + c_language = lang; + parse_in = cpp_create_reader (lang == clk_c ? CLK_GNUC89: + lang == clk_cplusplus ? CLK_GNUCXX: CLK_OBJC); + + /* Mark as "unspecified" (see c_common_post_options). */ + flag_bounds_check = -1; + } + + /* Post-switch processing. */ + void + c_common_post_options () + { + cpp_post_options (parse_in); + + flag_inline_trees = 1; + + /* Use tree inlining if possible. Function instrumentation is only + done in the RTL level, so we disable tree inlining. */ + if (! flag_instrument_function_entry_exit) + { + if (!flag_no_inline) + flag_no_inline = 1; + if (flag_inline_functions) + { + flag_inline_trees = 2; + flag_inline_functions = 0; + } + } + /* If still "unspecified", make it match -fbounded-pointers. */ ! if (flag_bounds_check == -1) flag_bounds_check = flag_bounded_pointers; /* Special format checking options don't work without -Wformat; warn if *************** c_common_lang_init () *** 4588,4590 **** --- 4162,4259 ---- if (warn_missing_format_attribute && !warn_format) warning ("-Wmissing-format-attribute ignored without -Wformat"); } + + /* Front end initialization common to C, ObjC and C++. */ + const char * + c_common_init (filename) + const char *filename; + { + /* Do this before initializing pragmas, as then cpplib's hash table + has been set up. */ + filename = init_c_lex (filename); + + init_pragma (); + + if (!c_attrs_initialized) + c_init_attributes (); + + return filename; + } + + /* Common finish hook for the C, ObjC and C++ front ends. */ + void + c_common_finish () + { + cpp_finish (parse_in); + + /* For performance, avoid tearing down cpplib's internal structures. + Call cpp_errors () instead of cpp_destroy (). */ + errorcount += cpp_errors (parse_in); + } + + static void + c_init_attributes () + { + /* Fill in the built_in_attributes array. */ + #define DEF_ATTR_NULL_TREE(ENUM) \ + built_in_attributes[(int) ENUM] = NULL_TREE; + #define DEF_ATTR_INT(ENUM, VALUE) \ + built_in_attributes[(int) ENUM] = build_int_2 (VALUE, VALUE < 0 ? -1 : 0); + #define DEF_ATTR_IDENT(ENUM, STRING) \ + built_in_attributes[(int) ENUM] = get_identifier (STRING); + #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) \ + built_in_attributes[(int) ENUM] \ + = tree_cons (built_in_attributes[(int) PURPOSE], \ + built_in_attributes[(int) VALUE], \ + built_in_attributes[(int) CHAIN]); + #define DEF_FN_ATTR(NAME, ATTRS, PREDICATE) /* No initialization needed. */ + #include "builtin-attrs.def" + #undef DEF_ATTR_NULL_TREE + #undef DEF_ATTR_INT + #undef DEF_ATTR_IDENT + #undef DEF_ATTR_TREE_LIST + #undef DEF_FN_ATTR + ggc_add_tree_root (built_in_attributes, (int) ATTR_LAST); + c_attrs_initialized = true; + } + + /* Depending on the name of DECL, apply default attributes to it. */ + + void + c_common_insert_default_attributes (decl) + tree decl; + { + tree name = DECL_NAME (decl); + + if (!c_attrs_initialized) + c_init_attributes (); + + #define DEF_ATTR_NULL_TREE(ENUM) /* Nothing needed after initialization. */ + #define DEF_ATTR_INT(ENUM, VALUE) + #define DEF_ATTR_IDENT(ENUM, STRING) + #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) + #define DEF_FN_ATTR(NAME, ATTRS, PREDICATE) \ + if ((PREDICATE) && name == built_in_attributes[(int) NAME]) \ + decl_attributes (&decl, built_in_attributes[(int) ATTRS], \ + ATTR_FLAG_BUILT_IN); + #include "builtin-attrs.def" + #undef DEF_ATTR_NULL_TREE + #undef DEF_ATTR_INT + #undef DEF_ATTR_IDENT + #undef DEF_ATTR_TREE_LIST + #undef DEF_FN_ATTR + } + + /* Output a -Wshadow warning MSGID about NAME, an IDENTIFIER_NODE, and + additionally give the location of the previous declaration DECL. */ + void + shadow_warning (msgid, name, decl) + const char *msgid; + tree name, decl; + { + warning ("declaration of `%s' shadows %s", IDENTIFIER_POINTER (name), msgid); + warning_with_file_and_line (DECL_SOURCE_FILE (decl), + DECL_SOURCE_LINE (decl), + "shadowed declaration is here"); + } + diff -Nrc3pad gcc-3.0.4/gcc/c-common.def gcc-3.1/gcc/c-common.def *** gcc-3.0.4/gcc/c-common.def Fri Jan 18 03:37:52 2002 --- gcc-3.1/gcc/c-common.def Sat Mar 16 01:07:52 2002 *************** *** 2,28 **** additional tree codes used in the GNU C++ compiler (see tree.def for the standard codes). Copyright (C) 1987, 1988, 1990, 1993, 1997, 1998, ! 1999, 2000 Free Software Foundation, Inc. Written by Benjamin Chelf ! 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. */ ! /* Tree nodes relevent to both C and C++. These were originally in cp-tree.def in the cp subdir. */ /* A node to remember a source position. */ --- 2,28 ---- additional tree codes used in the GNU C++ compiler (see tree.def for the standard codes). Copyright (C) 1987, 1988, 1990, 1993, 1997, 1998, ! 1999, 2000, 2001 Free Software Foundation, Inc. Written by Benjamin Chelf ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ ! /* Tree nodes relevant to both C and C++. These were originally in cp-tree.def in the cp subdir. */ /* A node to remember a source position. */ *************** DEFTREECODE (BREAK_STMT, "break_stmt", ' *** 71,78 **** DEFTREECODE (CONTINUE_STMT, "continue_stmt", 'e', 0) /* Used to represent a 'switch' statement. The operands are ! SWITCH_COND and SWITCH_BODY, respectively. */ ! DEFTREECODE (SWITCH_STMT, "switch_stmt", 'e', 2) /* Used to represent a 'goto' statement. The operand is GOTO_DESTINATION. */ DEFTREECODE (GOTO_STMT, "goto_stmt", 'e', 1) --- 71,78 ---- DEFTREECODE (CONTINUE_STMT, "continue_stmt", 'e', 0) /* Used to represent a 'switch' statement. The operands are ! SWITCH_COND, SWITCH_BODY and SWITCH_TYPE, respectively. */ ! DEFTREECODE (SWITCH_STMT, "switch_stmt", 'e', 3) /* Used to represent a 'goto' statement. The operand is GOTO_DESTINATION. */ DEFTREECODE (GOTO_STMT, "goto_stmt", 'e', 1) *************** DEFTREECODE (CASE_LABEL, "case_label", ' *** 106,111 **** --- 106,123 ---- STMT_EXPR_STMT is the statement given by the expression. */ DEFTREECODE (STMT_EXPR, "stmt_expr", 'e', 1) + /* A COMPOUND_LITERAL_EXPR represents a C99 compound literal. The + COMPOUND_LITERAL_EXPR_DECL_STMT is the a DECL_STMT containing the decl + for the anonymous object represented by the COMPOUND_LITERAL; + the DECL_INITIAL of that decl is the CONSTRUCTOR that initializes + the compound literal. */ + DEFTREECODE (COMPOUND_LITERAL_EXPR, "compound_literal_expr", 'e', 1) + + /* A CLEANUP_STMT marks the point at which a declaration is fully + constructed. If, after this point, the CLEANUP_DECL goes out of + scope, the CLEANUP_EXPR must be run. */ + DEFTREECODE (CLEANUP_STMT, "cleanup_stmt", 'e', 2) + /* Local variables: mode:c diff -Nrc3pad gcc-3.0.4/gcc/c-common.h gcc-3.1/gcc/c-common.h *** gcc-3.0.4/gcc/c-common.h Fri Feb 1 00:31:53 2002 --- gcc-3.1/gcc/c-common.h Wed Apr 17 01:43:56 2002 *************** *** 1,28 **** /* Definitions for c-common.c. Copyright (C) 1987, 1993, 1994, 1995, 1997, 1998, ! 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #ifndef GCC_C_COMMON_H #define GCC_C_COMMON_H #include "splay-tree.h" /* Usage of TREE_LANG_FLAG_?: 0: COMPOUND_STMT_NO_SCOPE (in COMPOUND_STMT). --- 1,29 ---- /* Definitions for c-common.c. Copyright (C) 1987, 1993, 1994, 1995, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #ifndef GCC_C_COMMON_H #define GCC_C_COMMON_H #include "splay-tree.h" + #include "cpplib.h" /* Usage of TREE_LANG_FLAG_?: 0: COMPOUND_STMT_NO_SCOPE (in COMPOUND_STMT). *************** Boston, MA 02111-1307, USA. */ *** 32,41 **** --- 33,44 ---- DECL_PRETTY_FUNCTION_P (in VAR_DECL) NEW_FOR_SCOPE_P (in FOR_STMT) ASM_INPUT_P (in ASM_STMT) + STMT_EXPR_NO_SCOPE (in STMT_EXPR) 1: C_DECLARED_LABEL_FLAG (in LABEL_DECL) STMT_IS_FULL_EXPR_P (in _STMT) 2: STMT_LINENO_FOR_FN_P (in _STMT) 3: SCOPE_NO_CLEANUPS_P (in SCOPE_STMT) + COMPOUND_STMT_BODY_BLOCK (in COMPOUND_STMT) 4: SCOPE_PARTIAL_P (in SCOPE_STMT) */ *************** Boston, MA 02111-1307, USA. */ *** 48,54 **** enum rid { /* Modifiers: */ ! /* C, in empirical order of frequency. */ RID_STATIC = 0, RID_UNSIGNED, RID_LONG, RID_CONST, RID_EXTERN, RID_REGISTER, RID_TYPEDEF, RID_SHORT, RID_INLINE, --- 51,57 ---- enum rid { /* Modifiers: */ ! /* C, in empirical order of frequency. */ RID_STATIC = 0, RID_UNSIGNED, RID_LONG, RID_CONST, RID_EXTERN, RID_REGISTER, RID_TYPEDEF, RID_SHORT, RID_INLINE, *************** enum rid *** 73,79 **** /* C extensions */ RID_ASM, RID_TYPEOF, RID_ALIGNOF, RID_ATTRIBUTE, RID_VA_ARG, RID_EXTENSION, RID_IMAGPART, RID_REALPART, RID_LABEL, RID_PTRBASE, ! RID_PTREXTENT, RID_PTRVALUE, /* C++ */ RID_BOOL, RID_WCHAR, RID_CLASS, --- 76,85 ---- /* C extensions */ RID_ASM, RID_TYPEOF, RID_ALIGNOF, RID_ATTRIBUTE, RID_VA_ARG, RID_EXTENSION, RID_IMAGPART, RID_REALPART, RID_LABEL, RID_PTRBASE, ! RID_PTREXTENT, RID_PTRVALUE, RID_CHOOSE_EXPR, RID_TYPES_COMPATIBLE_P, ! ! /* Too many ways of getting the name of a function as a string */ ! RID_FUNCTION_NAME, RID_PRETTY_FUNCTION_NAME, RID_C99_FUNCTION_NAME, /* C++ */ RID_BOOL, RID_WCHAR, RID_CLASS, *************** enum rid *** 102,110 **** RID_MAX, RID_FIRST_MODIFIER = RID_STATIC, ! RID_LAST_MODIFIER = RID_ONEWAY }; /* The elements of `ridpointers' are identifier nodes for the reserved type names and storage classes. It is indexed by a RID_... value. */ extern tree *ridpointers; --- 108,129 ---- RID_MAX, RID_FIRST_MODIFIER = RID_STATIC, ! RID_LAST_MODIFIER = RID_ONEWAY, ! ! RID_FIRST_AT = RID_AT_ENCODE, ! RID_LAST_AT = RID_AT_IMPLEMENTATION, ! RID_FIRST_PQ = RID_IN, ! RID_LAST_PQ = RID_ONEWAY }; + #define OBJC_IS_AT_KEYWORD(rid) \ + ((unsigned int)(rid) >= (unsigned int)RID_FIRST_AT && \ + (unsigned int)(rid) <= (unsigned int)RID_LAST_AT) + + #define OBJC_IS_PQ_KEYWORD(rid) \ + ((unsigned int)(rid) >= (unsigned int)RID_FIRST_PQ && \ + (unsigned int)(rid) <= (unsigned int)RID_LAST_PQ) + /* The elements of `ridpointers' are identifier nodes for the reserved type names and storage classes. It is indexed by a RID_... value. */ extern tree *ridpointers; *************** enum c_tree_index *** 144,169 **** CTI_C_BOOL_FALSE, CTI_DEFAULT_FUNCTION_TYPE, - CTI_VOID_FTYPE, - CTI_VOID_FTYPE_PTR, - CTI_INT_FTYPE_INT, - CTI_PTR_FTYPE_SIZETYPE, - CTI_G77_INTEGER_TYPE, CTI_G77_UINTEGER_TYPE, CTI_G77_LONGINT_TYPE, CTI_G77_ULONGINT_TYPE, /* These are not types, but we have to look them up all the time. */ ! CTI_FUNCTION_ID, ! CTI_PRETTY_FUNCTION_ID, ! CTI_FUNC_ID, ! CTI_VOID_ZERO, CTI_MAX }; #define wchar_type_node c_global_trees[CTI_WCHAR_TYPE] #define signed_wchar_type_node c_global_trees[CTI_SIGNED_WCHAR_TYPE] #define unsigned_wchar_type_node c_global_trees[CTI_UNSIGNED_WCHAR_TYPE] --- 163,194 ---- CTI_C_BOOL_FALSE, CTI_DEFAULT_FUNCTION_TYPE, CTI_G77_INTEGER_TYPE, CTI_G77_UINTEGER_TYPE, CTI_G77_LONGINT_TYPE, CTI_G77_ULONGINT_TYPE, /* These are not types, but we have to look them up all the time. */ ! CTI_FUNCTION_NAME_DECL, ! CTI_PRETTY_FUNCTION_NAME_DECL, ! CTI_C99_FUNCTION_NAME_DECL, ! CTI_SAVED_FUNCTION_NAME_DECLS, ! CTI_VOID_ZERO, CTI_MAX }; + #define C_RID_CODE(id) (((struct c_common_identifier *) (id))->node.rid_code) + + /* Identifier part common to the C front ends. Inherits from + tree_identifier, despite appearances. */ + struct c_common_identifier + { + struct tree_common common; + struct cpp_hashnode node; + }; + #define wchar_type_node c_global_trees[CTI_WCHAR_TYPE] #define signed_wchar_type_node c_global_trees[CTI_SIGNED_WCHAR_TYPE] #define unsigned_wchar_type_node c_global_trees[CTI_UNSIGNED_WCHAR_TYPE] *************** enum c_tree_index *** 191,200 **** #define const_string_type_node c_global_trees[CTI_CONST_STRING_TYPE] #define default_function_type c_global_trees[CTI_DEFAULT_FUNCTION_TYPE] - #define void_ftype c_global_trees[CTI_VOID_FTYPE] - #define void_ftype_ptr c_global_trees[CTI_VOID_FTYPE_PTR] - #define int_ftype_int c_global_trees[CTI_INT_FTYPE_INT] - #define ptr_ftype_sizetype c_global_trees[CTI_PTR_FTYPE_SIZETYPE] /* g77 integer types, which which must be kept in sync with f/com.h */ #define g77_integer_type_node c_global_trees[CTI_G77_INTEGER_TYPE] --- 216,221 ---- *************** enum c_tree_index *** 202,210 **** #define g77_longint_type_node c_global_trees[CTI_G77_LONGINT_TYPE] #define g77_ulongint_type_node c_global_trees[CTI_G77_ULONGINT_TYPE] ! #define function_id_node c_global_trees[CTI_FUNCTION_ID] ! #define pretty_function_id_node c_global_trees[CTI_PRETTY_FUNCTION_ID] ! #define func_id_node c_global_trees[CTI_FUNC_ID] /* A node for `((void) 0)'. */ #define void_zero_node c_global_trees[CTI_VOID_ZERO] --- 223,232 ---- #define g77_longint_type_node c_global_trees[CTI_G77_LONGINT_TYPE] #define g77_ulongint_type_node c_global_trees[CTI_G77_ULONGINT_TYPE] ! #define function_name_decl_node c_global_trees[CTI_FUNCTION_NAME_DECL] ! #define pretty_function_name_decl_node c_global_trees[CTI_PRETTY_FUNCTION_NAME_DECL] ! #define c99_function_name_decl_node c_global_trees[CTI_C99_FUNCTION_NAME_DECL] ! #define saved_function_name_decls c_global_trees[CTI_SAVED_FUNCTION_NAME_DECLS] /* A node for `((void) 0)'. */ #define void_zero_node c_global_trees[CTI_VOID_ZERO] *************** extern tree c_global_trees[CTI_MAX]; *** 222,228 **** typedef enum c_language_kind { clk_c, /* A dialect of C: K&R C, ANSI/ISO C89, C2000, ! etc. */ clk_cplusplus, /* ANSI/ISO C++ */ clk_objective_c /* Objective C */ } --- 244,250 ---- typedef enum c_language_kind { clk_c, /* A dialect of C: K&R C, ANSI/ISO C89, C2000, ! etc. */ clk_cplusplus, /* ANSI/ISO C++ */ clk_objective_c /* Objective C */ } *************** struct language_function { *** 266,274 **** struct stmt_tree_s x_stmt_tree; /* The stack of SCOPE_STMTs for the current function. */ tree x_scope_stmt_stack; - /* Nonzero if __FUNCTION__ and its ilk have been declared in this - function. */ - int x_function_name_declared_p; }; /* When building a statement-tree, this is the last statement added to --- 288,293 ---- *************** extern void (*lang_expand_function_end) *** 308,319 **** extern int (*lang_missing_noreturn_ok_p) PARAMS ((tree)); - /* The type of a function that walks over tree structure. */ - - typedef tree (*walk_tree_fn) PARAMS ((tree *, - int *, - void *)); - extern stmt_tree current_stmt_tree PARAMS ((void)); extern tree *current_scope_stmt_stack PARAMS ((void)); extern void begin_stmt_tree PARAMS ((tree *)); --- 327,332 ---- *************** extern tree walk_stmt_tree PARAMS ((tr *** 329,355 **** extern void prep_stmt PARAMS ((tree)); extern void expand_stmt PARAMS ((tree)); extern void mark_stmt_tree PARAMS ((void *)); extern tree c_begin_if_stmt PARAMS ((void)); extern tree c_begin_while_stmt PARAMS ((void)); extern void c_finish_while_stmt_cond PARAMS ((tree, tree)); /* Extra information associated with a DECL. Other C dialects extend this structure in various ways. The C front-end only uses this structure for FUNCTION_DECLs; all other DECLs have a NULL DECL_LANG_SPECIFIC field. */ struct c_lang_decl { ! /* In a FUNCTION_DECL, this is DECL_SAVED_TREE. */ ! tree saved_tree; }; - /* In a FUNCTION_DECL, the saved representation of the body of the - entire function. Usually a COMPOUND_STMT, but in C++ this may also - be a RETURN_INIT, CTOR_INITIALIZER, or TRY_BLOCK. */ - #define DECL_SAVED_TREE(NODE) \ - (((struct c_lang_decl *) DECL_LANG_SPECIFIC (FUNCTION_DECL_CHECK (NODE))) \ - ->saved_tree) - /* In a FUNCTION_DECL for which DECL_BUILT_IN does not hold, this is the approximate number of statements in this function. There is no need for this number to be exact; it is only used in various --- 342,363 ---- extern void prep_stmt PARAMS ((tree)); extern void expand_stmt PARAMS ((tree)); extern void mark_stmt_tree PARAMS ((void *)); + extern void shadow_warning PARAMS ((const char *, + tree, tree)); extern tree c_begin_if_stmt PARAMS ((void)); extern tree c_begin_while_stmt PARAMS ((void)); extern void c_finish_while_stmt_cond PARAMS ((tree, tree)); + /* Extra information associated with a DECL. Other C dialects extend this structure in various ways. The C front-end only uses this structure for FUNCTION_DECLs; all other DECLs have a NULL DECL_LANG_SPECIFIC field. */ struct c_lang_decl { ! unsigned declared_inline : 1; }; /* In a FUNCTION_DECL for which DECL_BUILT_IN does not hold, this is the approximate number of statements in this function. There is no need for this number to be exact; it is only used in various *************** extern int flag_short_double; *** 377,383 **** extern int flag_short_wchar; ! /* Warn about *printf or *scanf format/argument anomalies. */ extern int warn_format; --- 385,391 ---- extern int flag_short_wchar; ! /* Warn about *printf or *scanf format/argument anomalies. */ extern int warn_format; *************** extern int warn_sequence_point; *** 405,410 **** --- 413,426 ---- extern int warn_missing_format_attribute; + /* Nonzero means warn about sizeof (function) or addition/subtraction + of function pointers. */ + + extern int warn_pointer_arith; + + /* Nonzero means to warn about compile-time division by zero. */ + extern int warn_div_by_zero; + /* Nonzero means do some things the same way PCC does. */ extern int flag_traditional; *************** extern int warn_long_long; *** 459,472 **** #define C_TYPE_FUNCTION_P(type) \ (TREE_CODE (type) == FUNCTION_TYPE) - /* Return the qualifiers that apply to this type. In C++, that means - descending through array types. Note that this macro evaluates its - arguments mor than once. */ - #define C_TYPE_QUALS(TYPE) \ - (TYPE_QUALS ((TREE_CODE (TYPE) == ARRAY_TYPE \ - && c_language == clk_cplusplus) \ - ? strip_array_types (TYPE) : TYPE)) - /* For convenience we define a single macro to identify the class of object or incomplete types. */ #define C_TYPE_OBJECT_OR_INCOMPLETE_P(type) \ --- 475,480 ---- *************** extern int warn_long_long; *** 476,501 **** what operator was specified for it. */ #define C_EXP_ORIGINAL_CODE(exp) ((enum tree_code) TREE_COMPLEXITY (exp)) ! /* Pointer to function to generate the VAR_DECL for __FUNCTION__ etc. ID is the identifier to use, NAME is the string. TYPE_DEP indicates whether it depends on type of the function or not (i.e. __PRETTY_FUNCTION__). */ ! extern tree (*make_fname_decl) PARAMS ((tree, const char *, int)); extern tree identifier_global_value PARAMS ((tree)); extern void record_builtin_type PARAMS ((enum rid, const char *, tree)); extern tree build_void_list_node PARAMS ((void)); ! extern void declare_function_name PARAMS ((void)); ! extern void decl_attributes PARAMS ((tree, tree, tree)); ! extern void init_function_format_info PARAMS ((void)); ! extern void check_function_format PARAMS ((int *, tree, tree, tree)); extern void set_Wformat PARAMS ((int)); ! extern void decl_handle_format_attribute PARAMS ((tree, tree)); ! extern void decl_handle_format_arg_attribute PARAMS ((tree, tree)); extern void c_apply_type_quals_to_decl PARAMS ((int, tree)); /* Print an error message for invalid operands to arith operation CODE. NOP_EXPR is used as a special case (see truthvalue_conversion). */ extern void binary_op_error PARAMS ((enum tree_code)); --- 484,517 ---- what operator was specified for it. */ #define C_EXP_ORIGINAL_CODE(exp) ((enum tree_code) TREE_COMPLEXITY (exp)) ! /* Pointer to function to lazily generate the VAR_DECL for __FUNCTION__ etc. ID is the identifier to use, NAME is the string. TYPE_DEP indicates whether it depends on type of the function or not (i.e. __PRETTY_FUNCTION__). */ ! extern tree (*make_fname_decl) PARAMS ((tree, int)); extern tree identifier_global_value PARAMS ((tree)); extern void record_builtin_type PARAMS ((enum rid, const char *, tree)); extern tree build_void_list_node PARAMS ((void)); + extern void start_fname_decls PARAMS ((void)); + extern void finish_fname_decls PARAMS ((void)); + extern const char *fname_as_string PARAMS ((int)); + extern tree fname_decl PARAMS ((unsigned, tree)); + extern const char *fname_string PARAMS ((unsigned)); ! extern void check_function_format PARAMS ((int *, tree, tree)); extern void set_Wformat PARAMS ((int)); ! extern tree handle_format_attribute PARAMS ((tree *, tree, tree, ! int, bool *)); ! extern tree handle_format_arg_attribute PARAMS ((tree *, tree, tree, ! int, bool *)); ! extern void c_common_insert_default_attributes PARAMS ((tree)); extern void c_apply_type_quals_to_decl PARAMS ((int, tree)); + extern tree c_sizeof PARAMS ((tree)); + extern tree c_alignof PARAMS ((tree)); + extern tree c_alignof_expr PARAMS ((tree)); /* Print an error message for invalid operands to arith operation CODE. NOP_EXPR is used as a special case (see truthvalue_conversion). */ extern void binary_op_error PARAMS ((enum tree_code)); *************** extern char *get_directive_line PARAMS *** 522,533 **** See if the operands have both been converted from subword integer types and, if so, perhaps change them both back to their original type. */ extern tree shorten_compare PARAMS ((tree *, tree *, tree *, enum tree_code *)); - /* Prepare expr to be an argument of a TRUTH_NOT_EXPR, - or validate its data type for an `if' or `while' statement or ?..: exp. */ - extern tree truthvalue_conversion PARAMS ((tree)); - extern tree type_for_mode PARAMS ((enum machine_mode, int)); - extern tree type_for_size PARAMS ((unsigned, int)); extern unsigned int min_precision PARAMS ((tree, int)); /* Add qualifiers to a type, in the fashion for C. */ --- 538,545 ---- See if the operands have both been converted from subword integer types and, if so, perhaps change them both back to their original type. */ extern tree shorten_compare PARAMS ((tree *, tree *, tree *, enum tree_code *)); + extern tree pointer_int_sum PARAMS ((enum tree_code, tree, tree)); extern unsigned int min_precision PARAMS ((tree, int)); /* Add qualifiers to a type, in the fashion for C. */ *************** extern tree c_build_qualified_type *** 537,546 **** frontends. */ extern void c_common_nodes_and_builtins PARAMS ((void)); ! extern tree build_va_arg PARAMS ((tree, tree)); ! extern void c_common_lang_init PARAMS ((void)); extern bool c_promoting_integer_type_p PARAMS ((tree)); extern int self_promoting_args_p PARAMS ((tree)); extern tree simple_type_promotes_to PARAMS ((tree)); --- 549,563 ---- frontends. */ extern void c_common_nodes_and_builtins PARAMS ((void)); ! extern void disable_builtin_function PARAMS ((const char *)); ! extern tree build_va_arg PARAMS ((tree, tree)); + extern void c_common_init_options PARAMS ((enum c_language_kind)); + extern void c_common_post_options PARAMS ((void)); + extern const char *c_common_init PARAMS ((const char *)); + extern void c_common_finish PARAMS ((void)); + extern HOST_WIDE_INT c_common_get_alias_set PARAMS ((tree)); extern bool c_promoting_integer_type_p PARAMS ((tree)); extern int self_promoting_args_p PARAMS ((tree)); extern tree simple_type_promotes_to PARAMS ((tree)); *************** extern tree strip_array_types *** 554,617 **** will always be false, since there are no destructors.) */ #define STMT_IS_FULL_EXPR_P(NODE) TREE_LANG_FLAG_1 ((NODE)) ! /* IF_STMT accessors. These give access to the condtion of the if statement, the then block of the if statement, and the else block ! of the if stsatement if it exists. */ #define IF_COND(NODE) TREE_OPERAND (IF_STMT_CHECK (NODE), 0) #define THEN_CLAUSE(NODE) TREE_OPERAND (IF_STMT_CHECK (NODE), 1) #define ELSE_CLAUSE(NODE) TREE_OPERAND (IF_STMT_CHECK (NODE), 2) ! /* WHILE_STMT accessors. These give access to the condtion of the ! while statement and the body of the while statement, respectively. */ #define WHILE_COND(NODE) TREE_OPERAND (WHILE_STMT_CHECK (NODE), 0) #define WHILE_BODY(NODE) TREE_OPERAND (WHILE_STMT_CHECK (NODE), 1) /* DO_STMT accessors. These give access to the condition of the do ! statement and the body of the do statement, respectively. */ #define DO_COND(NODE) TREE_OPERAND (DO_STMT_CHECK (NODE), 0) #define DO_BODY(NODE) TREE_OPERAND (DO_STMT_CHECK (NODE), 1) ! /* RETURN_STMT accessor. This gives the expression associated with a ! return statement. */ #define RETURN_EXPR(NODE) TREE_OPERAND (RETURN_STMT_CHECK (NODE), 0) /* EXPR_STMT accessor. This gives the expression associated with an ! expression statement. */ #define EXPR_STMT_EXPR(NODE) TREE_OPERAND (EXPR_STMT_CHECK (NODE), 0) /* FOR_STMT accessors. These give access to the init statement, condition, update expression, and body of the for statement, ! respectively. */ #define FOR_INIT_STMT(NODE) TREE_OPERAND (FOR_STMT_CHECK (NODE), 0) #define FOR_COND(NODE) TREE_OPERAND (FOR_STMT_CHECK (NODE), 1) #define FOR_EXPR(NODE) TREE_OPERAND (FOR_STMT_CHECK (NODE), 2) #define FOR_BODY(NODE) TREE_OPERAND (FOR_STMT_CHECK (NODE), 3) ! /* SWITCH_STMT accessors. These give access to the condition and body ! of the switch statement, respectively. */ #define SWITCH_COND(NODE) TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 0) #define SWITCH_BODY(NODE) TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 1) /* CASE_LABEL accessors. These give access to the high and low values ! of a case label, respectively. */ #define CASE_LOW(NODE) TREE_OPERAND (CASE_LABEL_CHECK (NODE), 0) #define CASE_HIGH(NODE) TREE_OPERAND (CASE_LABEL_CHECK (NODE), 1) #define CASE_LABEL_DECL(NODE) TREE_OPERAND (CASE_LABEL_CHECK (NODE), 2) /* GOTO_STMT accessor. This gives access to the label associated with ! a goto statement. */ #define GOTO_DESTINATION(NODE) TREE_OPERAND (GOTO_STMT_CHECK (NODE), 0) /* COMPOUND_STMT accessor. This gives access to the TREE_LIST of ! statements assocated with a compound statement. The result is the ! first statement in the list. Succeeding nodes can be acccessed by ! calling TREE_CHAIN on a node in the list. */ #define COMPOUND_BODY(NODE) TREE_OPERAND (COMPOUND_STMT_CHECK (NODE), 0) /* ASM_STMT accessors. ASM_STRING returns a STRING_CST for the instruction (e.g., "mov x, y"). ASM_OUTPUTS, ASM_INPUTS, and ASM_CLOBBERS represent the outputs, inputs, and clobbers for the ! statement. */ #define ASM_CV_QUAL(NODE) TREE_OPERAND (ASM_STMT_CHECK (NODE), 0) #define ASM_STRING(NODE) TREE_OPERAND (ASM_STMT_CHECK (NODE), 1) #define ASM_OUTPUTS(NODE) TREE_OPERAND (ASM_STMT_CHECK (NODE), 2) --- 571,639 ---- will always be false, since there are no destructors.) */ #define STMT_IS_FULL_EXPR_P(NODE) TREE_LANG_FLAG_1 ((NODE)) ! /* IF_STMT accessors. These give access to the condition of the if statement, the then block of the if statement, and the else block ! of the if statement if it exists. */ #define IF_COND(NODE) TREE_OPERAND (IF_STMT_CHECK (NODE), 0) #define THEN_CLAUSE(NODE) TREE_OPERAND (IF_STMT_CHECK (NODE), 1) #define ELSE_CLAUSE(NODE) TREE_OPERAND (IF_STMT_CHECK (NODE), 2) ! /* WHILE_STMT accessors. These give access to the condition of the ! while statement and the body of the while statement, respectively. */ #define WHILE_COND(NODE) TREE_OPERAND (WHILE_STMT_CHECK (NODE), 0) #define WHILE_BODY(NODE) TREE_OPERAND (WHILE_STMT_CHECK (NODE), 1) /* DO_STMT accessors. These give access to the condition of the do ! statement and the body of the do statement, respectively. */ #define DO_COND(NODE) TREE_OPERAND (DO_STMT_CHECK (NODE), 0) #define DO_BODY(NODE) TREE_OPERAND (DO_STMT_CHECK (NODE), 1) ! /* RETURN_STMT accessors. These give the expression associated with a ! return statement, and whether it should be ignored when expanding ! (as opposed to inlining). */ #define RETURN_EXPR(NODE) TREE_OPERAND (RETURN_STMT_CHECK (NODE), 0) /* EXPR_STMT accessor. This gives the expression associated with an ! expression statement. */ #define EXPR_STMT_EXPR(NODE) TREE_OPERAND (EXPR_STMT_CHECK (NODE), 0) /* FOR_STMT accessors. These give access to the init statement, condition, update expression, and body of the for statement, ! respectively. */ #define FOR_INIT_STMT(NODE) TREE_OPERAND (FOR_STMT_CHECK (NODE), 0) #define FOR_COND(NODE) TREE_OPERAND (FOR_STMT_CHECK (NODE), 1) #define FOR_EXPR(NODE) TREE_OPERAND (FOR_STMT_CHECK (NODE), 2) #define FOR_BODY(NODE) TREE_OPERAND (FOR_STMT_CHECK (NODE), 3) ! /* SWITCH_STMT accessors. These give access to the condition, body and ! original condition type (before any compiler conversions) ! of the switch statement, respectively. */ #define SWITCH_COND(NODE) TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 0) #define SWITCH_BODY(NODE) TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 1) + #define SWITCH_TYPE(NODE) TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 2) /* CASE_LABEL accessors. These give access to the high and low values ! of a case label, respectively. */ #define CASE_LOW(NODE) TREE_OPERAND (CASE_LABEL_CHECK (NODE), 0) #define CASE_HIGH(NODE) TREE_OPERAND (CASE_LABEL_CHECK (NODE), 1) #define CASE_LABEL_DECL(NODE) TREE_OPERAND (CASE_LABEL_CHECK (NODE), 2) /* GOTO_STMT accessor. This gives access to the label associated with ! a goto statement. */ #define GOTO_DESTINATION(NODE) TREE_OPERAND (GOTO_STMT_CHECK (NODE), 0) + /* True for goto created artifically by the compiler. */ + #define GOTO_FAKE_P(NODE) (TREE_LANG_FLAG_0 (GOTO_STMT_CHECK (NODE))) /* COMPOUND_STMT accessor. This gives access to the TREE_LIST of ! statements associated with a compound statement. The result is the ! first statement in the list. Succeeding nodes can be accessed by ! calling TREE_CHAIN on a node in the list. */ #define COMPOUND_BODY(NODE) TREE_OPERAND (COMPOUND_STMT_CHECK (NODE), 0) /* ASM_STMT accessors. ASM_STRING returns a STRING_CST for the instruction (e.g., "mov x, y"). ASM_OUTPUTS, ASM_INPUTS, and ASM_CLOBBERS represent the outputs, inputs, and clobbers for the ! statement. */ #define ASM_CV_QUAL(NODE) TREE_OPERAND (ASM_STMT_CHECK (NODE), 0) #define ASM_STRING(NODE) TREE_OPERAND (ASM_STMT_CHECK (NODE), 1) #define ASM_OUTPUTS(NODE) TREE_OPERAND (ASM_STMT_CHECK (NODE), 2) *************** extern tree strip_array_types *** 619,634 **** #define ASM_CLOBBERS(NODE) TREE_OPERAND (ASM_STMT_CHECK (NODE), 4) /* DECL_STMT accessor. This gives access to the DECL associated with ! the given declaration statement. */ #define DECL_STMT_DECL(NODE) TREE_OPERAND (DECL_STMT_CHECK (NODE), 0) ! /* STMT_EXPR accessor. */ #define STMT_EXPR_STMT(NODE) TREE_OPERAND (STMT_EXPR_CHECK (NODE), 0) /* LABEL_STMT accessor. This gives access to the label associated with ! the given label statement. */ #define LABEL_STMT_LABEL(NODE) TREE_OPERAND (LABEL_STMT_CHECK (NODE), 0) /* Nonzero if this SCOPE_STMT is for the beginning of a scope. */ #define SCOPE_BEGIN_P(NODE) \ (TREE_LANG_FLAG_0 (SCOPE_STMT_CHECK (NODE))) --- 641,666 ---- #define ASM_CLOBBERS(NODE) TREE_OPERAND (ASM_STMT_CHECK (NODE), 4) /* DECL_STMT accessor. This gives access to the DECL associated with ! the given declaration statement. */ #define DECL_STMT_DECL(NODE) TREE_OPERAND (DECL_STMT_CHECK (NODE), 0) ! /* STMT_EXPR accessor. */ #define STMT_EXPR_STMT(NODE) TREE_OPERAND (STMT_EXPR_CHECK (NODE), 0) + /* Nonzero if this statement-expression does not have an associated scope. */ + #define STMT_EXPR_NO_SCOPE(NODE) \ + TREE_LANG_FLAG_0 (STMT_EXPR_CHECK (NODE)) + /* LABEL_STMT accessor. This gives access to the label associated with ! the given label statement. */ #define LABEL_STMT_LABEL(NODE) TREE_OPERAND (LABEL_STMT_CHECK (NODE), 0) + /* COMPOUND_LITERAL_EXPR accessors. */ + #define COMPOUND_LITERAL_EXPR_DECL_STMT(NODE) \ + TREE_OPERAND (COMPOUND_LITERAL_EXPR_CHECK (NODE), 0) + #define COMPOUND_LITERAL_EXPR_DECL(NODE) \ + DECL_STMT_DECL (COMPOUND_LITERAL_EXPR_DECL_STMT (NODE)) + /* Nonzero if this SCOPE_STMT is for the beginning of a scope. */ #define SCOPE_BEGIN_P(NODE) \ (TREE_LANG_FLAG_0 (SCOPE_STMT_CHECK (NODE))) *************** extern tree strip_array_types *** 646,652 **** (SCOPE_STMT_BLOCK ((NODE)) == NULL_TREE) /* Nonzero for a SCOPE_STMT which represents a lexical scope, but ! which should be treated as non-existant from the point of view of running cleanup actions. */ #define SCOPE_NO_CLEANUPS_P(NODE) \ (TREE_LANG_FLAG_3 (SCOPE_STMT_CHECK (NODE))) --- 678,684 ---- (SCOPE_STMT_BLOCK ((NODE)) == NULL_TREE) /* Nonzero for a SCOPE_STMT which represents a lexical scope, but ! which should be treated as non-existent from the point of view of running cleanup actions. */ #define SCOPE_NO_CLEANUPS_P(NODE) \ (TREE_LANG_FLAG_3 (SCOPE_STMT_CHECK (NODE))) *************** extern tree strip_array_types *** 670,675 **** --- 702,714 ---- #define ASM_VOLATILE_P(NODE) \ (ASM_CV_QUAL (ASM_STMT_CHECK (NODE)) != NULL_TREE) + /* The VAR_DECL to clean up in a CLEANUP_STMT. */ + #define CLEANUP_DECL(NODE) \ + TREE_OPERAND (CLEANUP_STMT_CHECK (NODE), 0) + /* The cleanup to run in a CLEANUP_STMT. */ + #define CLEANUP_EXPR(NODE) \ + TREE_OPERAND (CLEANUP_STMT_CHECK (NODE), 1) + /* The filename we are changing to as of this FILE_STMT. */ #define FILE_STMT_FILENAME_NODE(NODE) \ (TREE_OPERAND (FILE_STMT_CHECK (NODE), 0)) *************** extern tree strip_array_types *** 688,694 **** (TREE_LANG_FLAG_2 ((NODE))) /* Nonzero if we want the new ISO rules for pushing a new scope for `for' ! initialization variables. */ #define NEW_FOR_SCOPE_P(NODE) (TREE_LANG_FLAG_0 (NODE)) /* Nonzero if we want to create an ASM_INPUT instead of an --- 727,733 ---- (TREE_LANG_FLAG_2 ((NODE))) /* Nonzero if we want the new ISO rules for pushing a new scope for `for' ! initialization variables. */ #define NEW_FOR_SCOPE_P(NODE) (TREE_LANG_FLAG_0 (NODE)) /* Nonzero if we want to create an ASM_INPUT instead of an *************** extern void add_c_tree_codes PA *** 709,714 **** --- 748,754 ---- extern void genrtl_do_pushlevel PARAMS ((void)); extern void genrtl_goto_stmt PARAMS ((tree)); extern void genrtl_expr_stmt PARAMS ((tree)); + extern void genrtl_expr_stmt_value PARAMS ((tree, int, int)); extern void genrtl_decl_stmt PARAMS ((tree)); extern void genrtl_if_stmt PARAMS ((tree)); extern void genrtl_while_stmt PARAMS ((tree)); *************** extern void genrtl_compound_stmt *** 724,730 **** extern void genrtl_asm_stmt PARAMS ((tree, tree, tree, tree, tree, int)); ! extern void genrtl_decl_cleanup PARAMS ((tree, tree)); extern int stmts_are_full_exprs_p PARAMS ((void)); extern int anon_aggr_type_p PARAMS ((tree)); --- 764,770 ---- extern void genrtl_asm_stmt PARAMS ((tree, tree, tree, tree, tree, int)); ! extern void genrtl_decl_cleanup PARAMS ((tree)); extern int stmts_are_full_exprs_p PARAMS ((void)); extern int anon_aggr_type_p PARAMS ((tree)); *************** extern tree build_return_stmt *** 757,762 **** --- 797,806 ---- #define COMPOUND_STMT_NO_SCOPE(NODE) TREE_LANG_FLAG_0 (NODE) + /* Used by the C++ frontend to mark the block around the member + initializers and cleanups. */ + #define COMPOUND_STMT_BODY_BLOCK(NODE) TREE_LANG_FLAG_3 (NODE) + extern void c_expand_asm_operands PARAMS ((tree, tree, tree, tree, int, const char *, int)); /* These functions must be defined by each front-end which implements *************** extern tree c_add_case_label *** 797,851 **** extern tree build_function_call PARAMS ((tree, tree)); ! /* If this variable is defined to a non-NULL value, it will be called ! after the file has been completely parsed. The argument will be ! the GLOBAL_NAMESPACE in C++, or the list of top-level declarations ! in C. */ ! extern void (*back_end_hook) PARAMS ((tree)); ! #ifdef RTX_CODE ! extern struct rtx_def *c_expand_expr PARAMS ((tree, rtx, ! enum machine_mode, ! enum expand_modifier)); ! extern int c_safe_from_p PARAMS ((rtx, tree)); #endif ! extern int c_unsafe_for_reeval PARAMS ((tree)); ! ! /* In dump.c */ ! ! /* Different tree dump places. */ ! enum tree_dump_index ! { ! TDI_all, /* dump the whole translation unit */ ! TDI_original, /* dump each function before optimizing it */ ! TDI_optimized, /* dump each function after optimizing it */ ! TDI_class, /* dump class heirarchy */ ! TDI_end ! }; ! ! /* Bit masks to control tree dumping. */ ! #define TDF_ADDRESS (1 << 0) /* dump node addresses */ ! #define TDF_SLIM (1 << 1) /* don't go wild following links */ ! ! typedef struct dump_info *dump_info_p; ! ! /* A callback function used dump language-specific parts of tree ! nodes. Returns non-zero if it does not want the usual dumping of ! the second argument. */ ! ! typedef int (*dump_tree_fn) PARAMS ((dump_info_p, tree)); ! extern dump_tree_fn lang_dump_tree; ! extern int dump_flag PARAMS ((dump_info_p, int, tree)); ! extern int dump_enabled_p PARAMS ((enum tree_dump_index)); ! extern FILE *dump_begin PARAMS ((enum tree_dump_index, int *)); ! extern void dump_end PARAMS ((enum tree_dump_index, FILE *)); ! extern void dump_node PARAMS ((tree, int, FILE *)); ! extern int dump_switch_p PARAMS ((const char *)); /* Information recorded about each file examined during compilation. */ --- 841,864 ---- extern tree build_function_call PARAMS ((tree, tree)); ! extern tree finish_label_address_expr PARAMS ((tree)); ! /* Same function prototype, but the C and C++ front ends have ! different implementations. Used in c-common.c. */ ! extern tree lookup_label PARAMS ((tree)); ! /* enum expand_modified is in expr.h, as is the macro below. */ ! #ifdef QUEUED_VAR ! extern rtx c_expand_expr PARAMS ((tree, rtx, enum machine_mode, ! enum expand_modifier)); #endif ! extern int c_safe_from_p PARAMS ((rtx, tree)); ! extern int c_staticp PARAMS ((tree)); ! extern int c_unsafe_for_reeval PARAMS ((tree)); /* Information recorded about each file examined during compilation. */ *************** struct c_fileinfo *** 859,862 **** struct c_fileinfo *get_fileinfo PARAMS ((const char *)); extern void dump_time_statistics PARAMS ((void)); ! #endif --- 872,875 ---- struct c_fileinfo *get_fileinfo PARAMS ((const char *)); extern void dump_time_statistics PARAMS ((void)); ! #endif /* ! GCC_C_COMMON_H */ diff -Nrc3pad gcc-3.0.4/gcc/c-convert.c gcc-3.1/gcc/c-convert.c *** gcc-3.0.4/gcc/c-convert.c Mon Apr 23 22:57:06 2001 --- gcc-3.1/gcc/c-convert.c Thu Oct 11 03:15:18 2001 *************** *** 1,22 **** /* Language-level data type conversion for GNU C. Copyright (C) 1987, 1988, 1991, 1998 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 contains the functions for converting C expressions --- 1,22 ---- /* Language-level data type conversion for GNU C. Copyright (C) 1987, 1988, 1991, 1998 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* This file contains the functions for converting C expressions *************** tree *** 61,68 **** convert (type, expr) tree type, expr; { ! register tree e = expr; ! register enum tree_code code = TREE_CODE (type); if (type == TREE_TYPE (expr) || TREE_CODE (expr) == ERROR_MARK --- 61,68 ---- convert (type, expr) tree type, expr; { ! tree e = expr; ! enum tree_code code = TREE_CODE (type); if (type == TREE_TYPE (expr) || TREE_CODE (expr) == ERROR_MARK diff -Nrc3pad gcc-3.0.4/gcc/c-decl.c gcc-3.1/gcc/c-decl.c *** gcc-3.0.4/gcc/c-decl.c Fri Feb 1 00:31:52 2002 --- gcc-3.1/gcc/c-decl.c Fri May 3 12:07:04 2002 *************** *** 1,23 **** /* Process declarations and variables for C compiler. Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, ! 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* Process declarations and symbol lookup for C front end. Also constructs types; the standard scalar types at initialization, --- 1,23 ---- /* Process declarations and variables for C compiler. Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, ! 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* Process declarations and symbol lookup for C front end. Also constructs types; the standard scalar types at initialization, *************** Boston, MA 02111-1307, USA. */ *** 30,35 **** --- 30,36 ---- #include "system.h" #include "intl.h" #include "tree.h" + #include "tree-inline.h" #include "rtl.h" #include "flags.h" #include "function.h" *************** Boston, MA 02111-1307, USA. */ *** 41,46 **** --- 42,52 ---- #include "ggc.h" #include "tm_p.h" #include "cpplib.h" + #include "target.h" + #include "debug.h" + #include "timevar.h" + #include "c-common.h" + #include "c-pragma.h" /* In grokdeclarator, distinguish syntactic contexts of declarators. */ enum decl_context *************** static struct stmt_tree_s c_stmt_tree; *** 104,114 **** static tree c_scope_stmt_stack; - /* Nonzero if __FUNCTION__ and its ilk have been declared in this - function. */ - - static int c_function_name_declared_p; - /* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function that have names. Here so we can clear out their names' definitions at the end of the function. */ --- 110,115 ---- *************** int current_function_returns_value; *** 134,139 **** --- 135,145 ---- int current_function_returns_null; + /* Set to 0 at beginning of a function definition, set to 1 if + a call to a noreturn function is seen. */ + + int current_function_returns_abnormally; + /* Set to nonzero by `grokdeclarator' for a function whose return type is defaulted, if warnings for this are desired. */ *************** static tree grokdeclarator PARAMS ((tre *** 279,291 **** int)); static tree grokparms PARAMS ((tree, int)); static void layout_array_type PARAMS ((tree)); ! static tree c_make_fname_decl PARAMS ((tree, const char *, int)); ! static void c_expand_body PARAMS ((tree, int)); /* C-specific option variables. */ /* Nonzero means allow type mismatches in conditional expressions; ! just make their values `void'. */ int flag_cond_mismatch; --- 285,298 ---- int)); static tree grokparms PARAMS ((tree, int)); static void layout_array_type PARAMS ((tree)); ! static tree c_make_fname_decl PARAMS ((tree, int)); ! static void c_expand_body PARAMS ((tree, int, int)); ! static void warn_if_shadowing PARAMS ((tree, tree)); /* C-specific option variables. */ /* Nonzero means allow type mismatches in conditional expressions; ! just make their values `void'. */ int flag_cond_mismatch; *************** int warn_float_equal = 0; *** 431,440 **** int warn_multichar = 1; - /* The variant of the C language being processed. */ - - c_language_kind c_language = clk_c; - /* Nonzero means `$' can be in an identifier. */ #ifndef DOLLARS_IN_IDENTIFIERS --- 438,443 ---- *************** c_language_kind c_language = clk_c; *** 442,447 **** --- 445,462 ---- #endif int dollars_in_ident = DOLLARS_IN_IDENTIFIERS; + /* States indicating how grokdeclarator() should handle declspecs marked + with __attribute__((deprecated)). An object declared as + __attribute__((deprecated)) suppresses warnings of uses of other + deprecated items. */ + + enum deprecated_states { + DEPRECATED_NORMAL, + DEPRECATED_SUPPRESS + }; + + static enum deprecated_states deprecated_state = DEPRECATED_NORMAL; + /* Decode the string P as a language-specific option for C. Return the number of strings consumed. Should not complain if it does not recognise the option. */ *************** c_decode_option (argc, argv) *** 454,463 **** int strings_processed; char *p = argv[0]; ! strings_processed = cpp_handle_option (parse_in, argc, argv); if (!strcmp (p, "-ftraditional") || !strcmp (p, "-traditional")) { flag_traditional = 1; flag_writable_strings = 1; } --- 469,479 ---- int strings_processed; char *p = argv[0]; ! strings_processed = cpp_handle_option (parse_in, argc, argv, 0); if (!strcmp (p, "-ftraditional") || !strcmp (p, "-traditional")) { + warning ("-traditional is deprecated and may be removed"); flag_traditional = 1; flag_writable_strings = 1; } *************** c_decode_option (argc, argv) *** 493,499 **** -std=gnu89 default, iso9899:1990 + gnu extensions -std=gnu99 iso9899:1999 + gnu extensions */ ! const char *argstart = &p[5]; if (!strcmp (argstart, "iso9899:1990") || !strcmp (argstart, "c89")) --- 509,515 ---- -std=gnu89 default, iso9899:1990 + gnu extensions -std=gnu99 iso9899:1999 + gnu extensions */ ! const char *const argstart = &p[5]; if (!strcmp (argstart, "iso9899:1990") || !strcmp (argstart, "c89")) *************** c_decode_option (argc, argv) *** 597,603 **** flag_no_builtin = 0; else if (!strcmp (p, "-fno-builtin")) flag_no_builtin = 1; ! else if (dump_switch_p (p)) ; else if (!strcmp (p, "-ansi")) goto iso_1990; --- 613,621 ---- flag_no_builtin = 0; else if (!strcmp (p, "-fno-builtin")) flag_no_builtin = 1; ! else if (!strncmp (p, "-fno-builtin-", strlen ("-fno-builtin-"))) ! disable_builtin_function (p + strlen ("-fno-builtin-")); ! else if (p[0] == '-' && p[1] == 'f' && dump_switch_p (p + 2)) ; else if (!strcmp (p, "-ansi")) goto iso_1990; *************** c_decode_option (argc, argv) *** 751,756 **** --- 769,778 ---- warn_multichar = 1; else if (!strcmp (p, "-Wno-multichar")) warn_multichar = 0; + else if (!strcmp (p, "-Wdiv-by-zero")) + warn_div_by_zero = 1; + else if (!strcmp (p, "-Wno-div-by-zero")) + warn_div_by_zero = 0; else if (!strcmp (p, "-Wunknown-pragmas")) /* Set to greater than 1, so that even unknown pragmas in system headers will be warned about. */ *************** c_decode_option (argc, argv) *** 786,811 **** return 1; } - /* Hooks for print_node. */ - - void - print_lang_decl (file, node, indent) - FILE *file ATTRIBUTE_UNUSED; - tree node ATTRIBUTE_UNUSED; - int indent ATTRIBUTE_UNUSED; - { - } - void ! print_lang_type (file, node, indent) ! FILE *file ATTRIBUTE_UNUSED; ! tree node ATTRIBUTE_UNUSED; ! int indent ATTRIBUTE_UNUSED; ! { ! } ! ! void ! print_lang_identifier (file, node, indent) FILE *file; tree node; int indent; --- 808,815 ---- return 1; } void ! c_print_identifier (file, node, indent) FILE *file; tree node; int indent; *************** void *** 914,920 **** pushlevel (tag_transparent) int tag_transparent; { ! register struct binding_level *newlevel = NULL_BINDING_LEVEL; /* If this is the top level of a function, just make sure that NAMED_LABELS is 0. */ --- 918,924 ---- pushlevel (tag_transparent) int tag_transparent; { ! struct binding_level *newlevel = NULL_BINDING_LEVEL; /* If this is the top level of a function, just make sure that NAMED_LABELS is 0. */ *************** poplevel (keep, reverse, functionbody) *** 990,996 **** int reverse; int functionbody; { ! register tree link; /* The chain of decls was accumulated in reverse order. Put it into forward order, just for cleanliness. */ tree decls; --- 994,1000 ---- int reverse; int functionbody; { ! tree link; /* The chain of decls was accumulated in reverse order. Put it into forward order, just for cleanliness. */ tree decls; *************** poplevel (keep, reverse, functionbody) *** 1133,1139 **** for (link = named_labels; link; link = TREE_CHAIN (link)) { ! register tree label = TREE_VALUE (link); if (DECL_INITIAL (label) == 0) { --- 1137,1143 ---- for (link = named_labels; link; link = TREE_CHAIN (link)) { ! tree label = TREE_VALUE (link); if (DECL_INITIAL (label) == 0) { *************** poplevel (keep, reverse, functionbody) *** 1156,1162 **** /* Pop the current level, and free the structure for reuse. */ { ! register struct binding_level *level = current_binding_level; current_binding_level = current_binding_level->level_chain; level->level_chain = free_binding_level; --- 1160,1166 ---- /* Pop the current level, and free the structure for reuse. */ { ! struct binding_level *level = current_binding_level; current_binding_level = current_binding_level->level_chain; level->level_chain = free_binding_level; *************** poplevel (keep, reverse, functionbody) *** 1208,1237 **** return block; } - /* Delete the node BLOCK from the current binding level. - This is used for the block inside a stmt expr ({...}) - so that the block can be reinserted where appropriate. */ - - void - delete_block (block) - tree block; - { - tree t; - if (current_binding_level->blocks == block) - current_binding_level->blocks = TREE_CHAIN (block); - for (t = current_binding_level->blocks; t;) - { - if (TREE_CHAIN (t) == block) - TREE_CHAIN (t) = TREE_CHAIN (block); - else - t = TREE_CHAIN (t); - } - TREE_CHAIN (block) = NULL; - /* Clear TREE_USED which is always set by poplevel. - The flag is set again if insert_block is called. */ - TREE_USED (block) = 0; - } - /* Insert BLOCK at the end of the list of subblocks of the current binding level. This is used when a BIND_EXPR is expanded, to handle the BLOCK node inside the BIND_EXPR. */ --- 1212,1217 ---- *************** insert_block (block) *** 1250,1256 **** void set_block (block) ! register tree block; { current_binding_level->this_block = block; current_binding_level->names = chainon (current_binding_level->names, --- 1230,1236 ---- void set_block (block) ! tree block; { current_binding_level->this_block = block; current_binding_level->names = chainon (current_binding_level->names, *************** set_block (block) *** 1262,1268 **** void push_label_level () { ! register struct binding_level *newlevel; /* Reuse or create a struct for this binding level. */ --- 1242,1248 ---- void push_label_level () { ! struct binding_level *newlevel; /* Reuse or create a struct for this binding level. */ *************** push_label_level () *** 1290,1296 **** void pop_label_level () { ! register struct binding_level *level = label_level_chain; tree link, prev; /* Clear out the definitions of the declared labels in this level. --- 1270,1276 ---- void pop_label_level () { ! struct binding_level *level = label_level_chain; tree link, prev; /* Clear out the definitions of the declared labels in this level. *************** void *** 1352,1358 **** pushtag (name, type) tree name, type; { ! register struct binding_level *b; /* Find the proper binding level for this type tag. */ --- 1332,1338 ---- pushtag (name, type) tree name, type; { ! struct binding_level *b; /* Find the proper binding level for this type tag. */ *************** pushtag (name, type) *** 1396,1402 **** static int duplicate_decls (newdecl, olddecl, different_binding_level) ! register tree newdecl, olddecl; int different_binding_level; { int types_match = comptypes (TREE_TYPE (newdecl), TREE_TYPE (olddecl)); --- 1376,1382 ---- static int duplicate_decls (newdecl, olddecl, different_binding_level) ! tree newdecl, olddecl; int different_binding_level; { int types_match = comptypes (TREE_TYPE (newdecl), TREE_TYPE (olddecl)); *************** duplicate_decls (newdecl, olddecl, diffe *** 1407,1414 **** int errmsg = 0; if (DECL_P (olddecl)) ! DECL_MACHINE_ATTRIBUTES (newdecl) ! = merge_machine_decl_attributes (olddecl, newdecl); if (TREE_CODE (newtype) == ERROR_MARK || TREE_CODE (oldtype) == ERROR_MARK) --- 1387,1429 ---- int errmsg = 0; if (DECL_P (olddecl)) ! { ! if (TREE_CODE (newdecl) == FUNCTION_DECL ! && TREE_CODE (olddecl) == FUNCTION_DECL ! && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl))) ! { ! if (DECL_DECLARED_INLINE_P (newdecl) ! && DECL_UNINLINABLE (newdecl) ! && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl))) ! /* Already warned elsewhere. */; ! else if (DECL_DECLARED_INLINE_P (olddecl) ! && DECL_UNINLINABLE (olddecl) ! && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl))) ! /* Already warned. */; ! else if (DECL_DECLARED_INLINE_P (newdecl) ! && ! DECL_DECLARED_INLINE_P (olddecl) ! && DECL_UNINLINABLE (olddecl) ! && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl))) ! { ! warning_with_decl (newdecl, ! "function `%s' redeclared as inline"); ! warning_with_decl (olddecl, ! "previous declaration of function `%s' with attribute noinline"); ! } ! else if (DECL_DECLARED_INLINE_P (olddecl) ! && DECL_UNINLINABLE (newdecl) ! && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl))) ! { ! warning_with_decl (newdecl, ! "function `%s' redeclared with attribute noinline"); ! warning_with_decl (olddecl, ! "previous declaration of function `%s' was inline"); ! } ! } ! ! DECL_ATTRIBUTES (newdecl) ! = (*targetm.merge_decl_attributes) (olddecl, newdecl); ! } if (TREE_CODE (newtype) == ERROR_MARK || TREE_CODE (oldtype) == ERROR_MARK) *************** duplicate_decls (newdecl, olddecl, diffe *** 1501,1506 **** --- 1516,1523 ---- tree trytype = build_function_type (newreturntype, TYPE_ARG_TYPES (oldtype)); + trytype = build_type_attribute_variant (trytype, + TYPE_ATTRIBUTES (oldtype)); types_match = comptypes (newtype, trytype); if (types_match) *************** duplicate_decls (newdecl, olddecl, diffe *** 1522,1527 **** --- 1539,1546 ---- tree_cons (NULL_TREE, TREE_VALUE (TYPE_ARG_TYPES (newtype)), TREE_CHAIN (TYPE_ARG_TYPES (oldtype)))); + trytype = build_type_attribute_variant (trytype, + TYPE_ATTRIBUTES (oldtype)); types_match = comptypes (newtype, trytype); if (types_match) *************** duplicate_decls (newdecl, olddecl, diffe *** 1530,1535 **** --- 1549,1570 ---- if (! different_binding_level) TREE_TYPE (olddecl) = oldtype; } + else if (TYPE_ARG_TYPES (oldtype) == NULL + && TYPE_ARG_TYPES (newtype) != NULL) + { + /* For bcmp, bzero, fputs the builtin type has arguments not + specified. Use the ones from the prototype so that type checking + is done for them. */ + tree trytype + = build_function_type (TREE_TYPE (oldtype), + TYPE_ARG_TYPES (newtype)); + trytype = build_type_attribute_variant (trytype, + TYPE_ATTRIBUTES (oldtype)); + + oldtype = trytype; + if (! different_binding_level) + TREE_TYPE (olddecl) = oldtype; + } if (!types_match) { /* If types don't match for a built-in, throw away the built-in. */ *************** duplicate_decls (newdecl, olddecl, diffe *** 1608,1630 **** && DECL_INITIAL (newdecl) == 0))) { /* Classify the problem further. */ ! register tree t = TYPE_ARG_TYPES (oldtype); if (t == 0) t = TYPE_ARG_TYPES (newtype); for (; t; t = TREE_CHAIN (t)) { ! register tree type = TREE_VALUE (t); if (TREE_CHAIN (t) == 0 && TYPE_MAIN_VARIANT (type) != void_type_node) { ! error ("A parameter list with an ellipsis can't match an empty parameter name list declaration."); break; } if (simple_type_promotes_to (type) != NULL_TREE) { ! error ("An argument type that has a default promotion can't match an empty parameter name list declaration."); break; } } --- 1643,1665 ---- && DECL_INITIAL (newdecl) == 0))) { /* Classify the problem further. */ ! tree t = TYPE_ARG_TYPES (oldtype); if (t == 0) t = TYPE_ARG_TYPES (newtype); for (; t; t = TREE_CHAIN (t)) { ! tree type = TREE_VALUE (t); if (TREE_CHAIN (t) == 0 && TYPE_MAIN_VARIANT (type) != void_type_node) { ! error ("a parameter list with an ellipsis can't match an empty parameter name list declaration"); break; } if (simple_type_promotes_to (type) != NULL_TREE) { ! error ("an argument type that has a default promotion can't match an empty parameter name list declaration"); break; } } *************** duplicate_decls (newdecl, olddecl, diffe *** 1656,1661 **** --- 1691,1697 ---- && current_binding_level == global_binding_level) ? "`%s' previously defined here" : "`%s' previously declared here")); + return 0; } else if (TREE_CODE (newdecl) == TYPE_DECL && (DECL_IN_SYSTEM_HEADER (olddecl) *************** duplicate_decls (newdecl, olddecl, diffe *** 1675,1682 **** && TYPE_ARG_TYPES (newtype) != 0 && TYPE_ACTUAL_ARG_TYPES (oldtype) != 0) { ! register tree type, parm; ! register int nargs; /* Prototype decl follows defn w/o prototype. */ for (parm = TYPE_ACTUAL_ARG_TYPES (oldtype), --- 1711,1718 ---- && TYPE_ARG_TYPES (newtype) != 0 && TYPE_ACTUAL_ARG_TYPES (oldtype) != 0) { ! tree type, parm; ! int nargs; /* Prototype decl follows defn w/o prototype. */ for (parm = TYPE_ACTUAL_ARG_TYPES (oldtype), *************** duplicate_decls (newdecl, olddecl, diffe *** 1725,1736 **** /* Warn if function is now inline but was previously declared not inline and has been called. */ if (TREE_CODE (olddecl) == FUNCTION_DECL ! && ! DECL_INLINE (olddecl) && DECL_INLINE (newdecl) && TREE_USED (olddecl)) warning_with_decl (newdecl, "`%s' declared inline after being called"); if (TREE_CODE (olddecl) == FUNCTION_DECL ! && ! DECL_INLINE (olddecl) && DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) != 0) warning_with_decl (newdecl, "`%s' declared inline after its definition"); --- 1761,1774 ---- /* Warn if function is now inline but was previously declared not inline and has been called. */ if (TREE_CODE (olddecl) == FUNCTION_DECL ! && ! DECL_DECLARED_INLINE_P (olddecl) ! && DECL_DECLARED_INLINE_P (newdecl) && TREE_USED (olddecl)) warning_with_decl (newdecl, "`%s' declared inline after being called"); if (TREE_CODE (olddecl) == FUNCTION_DECL ! && ! DECL_DECLARED_INLINE_P (olddecl) ! && DECL_DECLARED_INLINE_P (newdecl) && DECL_INITIAL (olddecl) != 0) warning_with_decl (newdecl, "`%s' declared inline after its definition"); *************** duplicate_decls (newdecl, olddecl, diffe *** 1901,1913 **** { DECL_STATIC_CONSTRUCTOR(newdecl) |= DECL_STATIC_CONSTRUCTOR(olddecl); DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl); ! DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl) |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl); - DECL_NO_CHECK_MEMORY_USAGE (newdecl) - |= DECL_NO_CHECK_MEMORY_USAGE (olddecl); - DECL_NO_LIMIT_STACK (newdecl) - |= DECL_NO_LIMIT_STACK (olddecl); } } /* If cannot merge, then use the new type and qualifiers, --- 1939,1947 ---- { DECL_STATIC_CONSTRUCTOR(newdecl) |= DECL_STATIC_CONSTRUCTOR(olddecl); DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl); ! DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl); DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl) |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl); } } /* If cannot merge, then use the new type and qualifiers, *************** duplicate_decls (newdecl, olddecl, diffe *** 1921,1927 **** } /* Merge the storage class information. */ ! DECL_WEAK (newdecl) |= DECL_WEAK (olddecl); /* For functions, static overrides non-static. */ if (TREE_CODE (newdecl) == FUNCTION_DECL) { --- 1955,1962 ---- } /* Merge the storage class information. */ ! merge_weak (newdecl, olddecl); ! /* For functions, static overrides non-static. */ if (TREE_CODE (newdecl) == FUNCTION_DECL) { *************** duplicate_decls (newdecl, olddecl, diffe *** 1964,1970 **** been written out yet. */ if (new_is_definition && DECL_INITIAL (olddecl) && TREE_USED (olddecl)) { ! note_outlining_of_inline_function (olddecl); /* The new defn must not be inline. */ DECL_INLINE (newdecl) = 0; --- 1999,2005 ---- been written out yet. */ if (new_is_definition && DECL_INITIAL (olddecl) && TREE_USED (olddecl)) { ! (*debug_hooks->outlining_inline_function) (olddecl); /* The new defn must not be inline. */ DECL_INLINE (newdecl) = 0; *************** duplicate_decls (newdecl, olddecl, diffe *** 1974,1983 **** { /* If either decl says `inline', this fn is inline, unless its definition was passed already. */ ! if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == 0) ! DECL_INLINE (olddecl) = 1; ! DECL_INLINE (newdecl) = DECL_INLINE (olddecl); } if (DECL_BUILT_IN (olddecl)) --- 2009,2020 ---- { /* If either decl says `inline', this fn is inline, unless its definition was passed already. */ ! if (DECL_DECLARED_INLINE_P (newdecl) ! || DECL_DECLARED_INLINE_P (olddecl)) ! DECL_DECLARED_INLINE_P (newdecl) = 1; ! DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl) ! = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)); } if (DECL_BUILT_IN (olddecl)) *************** duplicate_decls (newdecl, olddecl, diffe *** 2000,2008 **** DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl); } } /* Also preserve various other info from the definition. */ - else if (! new_is_definition) - DECL_NUM_STMTS (newdecl) = DECL_NUM_STMTS (olddecl); if (! new_is_definition) { DECL_RESULT (newdecl) = DECL_RESULT (olddecl); --- 2037,2044 ---- DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl); } } + /* Also preserve various other info from the definition. */ if (! new_is_definition) { DECL_RESULT (newdecl) = DECL_RESULT (olddecl); *************** duplicate_decls (newdecl, olddecl, diffe *** 2012,2020 **** if (! different_binding_level) DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl); DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl); DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl); ! if (DECL_INLINE (newdecl)) ! DECL_ABSTRACT_ORIGIN (newdecl) = DECL_ABSTRACT_ORIGIN (olddecl); } } if (different_binding_level) --- 2048,2075 ---- if (! different_binding_level) DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl); DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl); + DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl); + DECL_NUM_STMTS (newdecl) = DECL_NUM_STMTS (olddecl); DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl); ! ! /* Set DECL_INLINE on the declaration if we've got a body ! from which to instantiate. */ ! if (DECL_INLINE (olddecl) && ! DECL_UNINLINABLE (newdecl)) ! { ! DECL_INLINE (newdecl) = 1; ! DECL_ABSTRACT_ORIGIN (newdecl) ! = (different_binding_level ! ? DECL_ORIGIN (olddecl) ! : DECL_ABSTRACT_ORIGIN (olddecl)); ! } ! } ! else ! { ! /* If a previous declaration said inline, mark the ! definition as inlinable. */ ! if (DECL_DECLARED_INLINE_P (newdecl) ! && ! DECL_UNINLINABLE (newdecl)) ! DECL_INLINE (newdecl) = 1; } } if (different_binding_level) *************** duplicate_decls (newdecl, olddecl, diffe *** 2023,2029 **** /* Copy most of the decl-specific fields of NEWDECL into OLDDECL. But preserve OLDDECL's DECL_UID. */ { ! register unsigned olddecl_uid = DECL_UID (olddecl); memcpy ((char *) olddecl + sizeof (struct tree_common), (char *) newdecl + sizeof (struct tree_common), --- 2078,2084 ---- /* Copy most of the decl-specific fields of NEWDECL into OLDDECL. But preserve OLDDECL's DECL_UID. */ { ! unsigned olddecl_uid = DECL_UID (olddecl); memcpy ((char *) olddecl + sizeof (struct tree_common), (char *) newdecl + sizeof (struct tree_common), *************** duplicate_decls (newdecl, olddecl, diffe *** 2033,2043 **** /* NEWDECL contains the merged attribute lists. Update OLDDECL to be the same. */ ! DECL_MACHINE_ATTRIBUTES (olddecl) = DECL_MACHINE_ATTRIBUTES (newdecl); return 1; } /* Record a decl-node X as belonging to the current lexical scope. Check for errors (such as an incompatible declaration for the same name already seen in the same scope). --- 2088,2158 ---- /* NEWDECL contains the merged attribute lists. Update OLDDECL to be the same. */ ! DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl); return 1; } + /* Check whether decl-node X shadows an existing declaration. + OLDLOCAL is the old IDENTIFIER_LOCAL_VALUE of the DECL_NAME of X, + which might be a NULL_TREE. */ + static void + warn_if_shadowing (x, oldlocal) + tree x, oldlocal; + { + tree name; + + if (DECL_EXTERNAL (x)) + return; + + name = DECL_NAME (x); + + /* Warn if shadowing an argument at the top level of the body. */ + if (oldlocal != 0 + /* This warning doesn't apply to the parms of a nested fcn. */ + && ! current_binding_level->parm_flag + /* Check that this is one level down from the parms. */ + && current_binding_level->level_chain->parm_flag + /* Check that the decl being shadowed + comes from the parm level, one level up. */ + && chain_member (oldlocal, current_binding_level->level_chain->names)) + { + if (TREE_CODE (oldlocal) == PARM_DECL) + pedwarn ("declaration of `%s' shadows a parameter", + IDENTIFIER_POINTER (name)); + else + pedwarn ("declaration of `%s' shadows a symbol from the parameter list", + IDENTIFIER_POINTER (name)); + } + /* Maybe warn if shadowing something else. */ + else if (warn_shadow + /* No shadow warnings for internally generated vars. */ + && DECL_SOURCE_LINE (x) != 0 + /* No shadow warnings for vars made for inlining. */ + && ! DECL_FROM_INLINE (x)) + { + if (TREE_CODE (x) == PARM_DECL + && current_binding_level->level_chain->parm_flag) + /* Don't warn about the parm names in function declarator + within a function declarator. + It would be nice to avoid warning in any function + declarator in a declaration, as opposed to a definition, + but there is no way to tell it's not a definition. */ + ; + else if (oldlocal) + { + if (TREE_CODE (oldlocal) == PARM_DECL) + shadow_warning ("a parameter", name, oldlocal); + else + shadow_warning ("a previous local", name, oldlocal); + } + else if (IDENTIFIER_GLOBAL_VALUE (name) != 0 + && IDENTIFIER_GLOBAL_VALUE (name) != error_mark_node) + shadow_warning ("a global declaration", name, + IDENTIFIER_GLOBAL_VALUE (name)); + } + } + /* Record a decl-node X as belonging to the current lexical scope. Check for errors (such as an incompatible declaration for the same name already seen in the same scope). *************** tree *** 2050,2058 **** pushdecl (x) tree x; { ! register tree t; ! register tree name = DECL_NAME (x); ! register struct binding_level *b = current_binding_level; DECL_CONTEXT (x) = current_function_decl; /* A local extern declaration for a function doesn't constitute nesting. --- 2165,2178 ---- pushdecl (x) tree x; { ! tree t; ! tree name = DECL_NAME (x); ! struct binding_level *b = current_binding_level; ! ! /* Functions need the lang_decl data. */ ! if (TREE_CODE (x) == FUNCTION_DECL && ! DECL_LANG_SPECIFIC (x)) ! DECL_LANG_SPECIFIC (x) = (struct lang_decl *) ! ggc_alloc_cleared (sizeof (struct lang_decl)); DECL_CONTEXT (x) = current_function_decl; /* A local extern declaration for a function doesn't constitute nesting. *************** pushdecl (x) *** 2062,2079 **** && DECL_INITIAL (x) == 0 && DECL_EXTERNAL (x)) DECL_CONTEXT (x) = 0; - if (warn_nested_externs && DECL_EXTERNAL (x) && b != global_binding_level - && x != IDENTIFIER_IMPLICIT_DECL (name) - /* Don't print error messages for __FUNCTION__ and __PRETTY_FUNCTION__ */ - && !DECL_IN_SYSTEM_HEADER (x)) - warning ("nested extern declaration of `%s'", IDENTIFIER_POINTER (name)); - if (name) { - const char *file; - int line; int different_binding_level = 0; t = lookup_name_current_level (name); /* Don't type check externs here when -traditional. This is so that code with conflicting declarations inside blocks will get warnings --- 2182,2200 ---- && DECL_INITIAL (x) == 0 && DECL_EXTERNAL (x)) DECL_CONTEXT (x) = 0; if (name) { int different_binding_level = 0; + if (warn_nested_externs + && DECL_EXTERNAL (x) + && b != global_binding_level + && x != IDENTIFIER_IMPLICIT_DECL (name) + /* No error messages for __FUNCTION__ and __PRETTY_FUNCTION__. */ + && !DECL_IN_SYSTEM_HEADER (x)) + warning ("nested extern declaration of `%s'", + IDENTIFIER_POINTER (name)); + t = lookup_name_current_level (name); /* Don't type check externs here when -traditional. This is so that code with conflicting declarations inside blocks will get warnings *************** pushdecl (x) *** 2083,2090 **** t = IDENTIFIER_GLOBAL_VALUE (name); /* Type decls at global scope don't conflict with externs declared inside lexical blocks. */ ! if (t && TREE_CODE (t) == TYPE_DECL) ! t = 0; different_binding_level = 1; } if (t != 0 && t == error_mark_node) --- 2204,2213 ---- t = IDENTIFIER_GLOBAL_VALUE (name); /* Type decls at global scope don't conflict with externs declared inside lexical blocks. */ ! if (! t || TREE_CODE (t) == TYPE_DECL) ! /* If there's no visible global declaration, try for an ! invisible one. */ ! t = IDENTIFIER_LIMBO_VALUE (name); different_binding_level = 1; } if (t != 0 && t == error_mark_node) *************** pushdecl (x) *** 2094,2105 **** error_with_decl (x, "`%s' used prior to declaration"); } - if (t != 0) - { - file = DECL_SOURCE_FILE (t); - line = DECL_SOURCE_LINE (t); - } - /* If this decl is `static' and an implicit decl was seen previously, warn. But don't complain if -traditional, since traditional compilers don't complain. */ --- 2217,2222 ---- *************** pushdecl (x) *** 2349,2355 **** && oldglobal != 0 && TREE_CODE (x) == FUNCTION_DECL && TREE_CODE (oldglobal) == FUNCTION_DECL ! && DECL_EXTERNAL (x) && ! DECL_INLINE (x)) { /* We have one. Their types must agree. */ if (! comptypes (TREE_TYPE (x), --- 2466,2473 ---- && oldglobal != 0 && TREE_CODE (x) == FUNCTION_DECL && TREE_CODE (oldglobal) == FUNCTION_DECL ! && DECL_EXTERNAL (x) ! && ! DECL_DECLARED_INLINE_P (x)) { /* We have one. Their types must agree. */ if (! comptypes (TREE_TYPE (x), *************** pushdecl (x) *** 2359,2366 **** { /* Inner extern decl is inline if global one is. Copy enough to really inline it. */ ! if (DECL_INLINE (oldglobal)) { DECL_INLINE (x) = DECL_INLINE (oldglobal); DECL_INITIAL (x) = (current_function_decl == oldglobal ? 0 : DECL_INITIAL (oldglobal)); --- 2477,2486 ---- { /* Inner extern decl is inline if global one is. Copy enough to really inline it. */ ! if (DECL_DECLARED_INLINE_P (oldglobal)) { + DECL_DECLARED_INLINE_P (x) + = DECL_DECLARED_INLINE_P (oldglobal); DECL_INLINE (x) = DECL_INLINE (oldglobal); DECL_INITIAL (x) = (current_function_decl == oldglobal ? 0 : DECL_INITIAL (oldglobal)); *************** pushdecl (x) *** 2419,2467 **** IDENTIFIER_LIMBO_VALUE (name) = x; } ! /* Warn if shadowing an argument at the top level of the body. */ ! if (oldlocal != 0 && !DECL_EXTERNAL (x) ! /* This warning doesn't apply to the parms of a nested fcn. */ ! && ! current_binding_level->parm_flag ! /* Check that this is one level down from the parms. */ ! && current_binding_level->level_chain->parm_flag ! /* Check that the decl being shadowed ! comes from the parm level, one level up. */ ! && chain_member (oldlocal, current_binding_level->level_chain->names)) ! { ! if (TREE_CODE (oldlocal) == PARM_DECL) ! pedwarn ("declaration of `%s' shadows a parameter", ! IDENTIFIER_POINTER (name)); ! else ! pedwarn ("declaration of `%s' shadows a symbol from the parameter list", ! IDENTIFIER_POINTER (name)); ! } ! ! /* Maybe warn if shadowing something else. */ ! else if (warn_shadow && !DECL_EXTERNAL (x) ! /* No shadow warnings for internally generated vars. */ ! && DECL_SOURCE_LINE (x) != 0 ! /* No shadow warnings for vars made for inlining. */ ! && ! DECL_FROM_INLINE (x)) ! { ! const char *id = IDENTIFIER_POINTER (name); ! ! if (TREE_CODE (x) == PARM_DECL ! && current_binding_level->level_chain->parm_flag) ! /* Don't warn about the parm names in function declarator ! within a function declarator. ! It would be nice to avoid warning in any function ! declarator in a declaration, as opposed to a definition, ! but there is no way to tell it's not a definition. */ ! ; ! else if (oldlocal != 0 && TREE_CODE (oldlocal) == PARM_DECL) ! warning ("declaration of `%s' shadows a parameter", id); ! else if (oldlocal != 0) ! warning ("declaration of `%s' shadows previous local", id); ! else if (IDENTIFIER_GLOBAL_VALUE (name) != 0 ! && IDENTIFIER_GLOBAL_VALUE (name) != error_mark_node) ! warning ("declaration of `%s' shadows global declaration", id); ! } /* If storing a local value, there may already be one (inherited). If so, record it for restoration when this binding level ends. */ --- 2539,2545 ---- IDENTIFIER_LIMBO_VALUE (name) = x; } ! warn_if_shadowing (x, oldlocal); /* If storing a local value, there may already be one (inherited). If so, record it for restoration when this binding level ends. */ *************** pushdecl (x) *** 2475,2481 **** incomplete type. */ if (TREE_TYPE (x) != error_mark_node && !COMPLETE_TYPE_P (TREE_TYPE (x))) ! ++b->n_incomplete; } /* Put decls on list in reverse order. --- 2553,2567 ---- incomplete type. */ if (TREE_TYPE (x) != error_mark_node && !COMPLETE_TYPE_P (TREE_TYPE (x))) ! { ! tree element = TREE_TYPE (x); ! ! while (TREE_CODE (element) == ARRAY_TYPE) ! element = TREE_TYPE (element); ! if (TREE_CODE (element) == RECORD_TYPE ! || TREE_CODE (element) == UNION_TYPE) ! ++b->n_incomplete; ! } } /* Put decls on list in reverse order. *************** tree *** 2492,2499 **** pushdecl_top_level (x) tree x; { ! register tree t; ! register struct binding_level *b = current_binding_level; current_binding_level = global_binding_level; t = pushdecl (x); --- 2578,2585 ---- pushdecl_top_level (x) tree x; { ! tree t; ! struct binding_level *b = current_binding_level; current_binding_level = global_binding_level; t = pushdecl (x); *************** tree *** 2508,2514 **** implicitly_declare (functionid) tree functionid; { ! register tree decl; int traditional_warning = 0; /* Only one "implicit declaration" warning per identifier. */ int implicit_warning; --- 2594,2600 ---- implicitly_declare (functionid) tree functionid; { ! tree decl; int traditional_warning = 0; /* Only one "implicit declaration" warning per identifier. */ int implicit_warning; *************** implicitly_declare (functionid) *** 2545,2551 **** /* This is a no-op in c-lang.c or something real in objc-actions.c. */ maybe_objc_check_decl (decl); ! rest_of_decl_compilation (decl, NULL_PTR, 0, 0); if (implicit_warning) implicit_decl_warning (functionid); --- 2631,2637 ---- /* This is a no-op in c-lang.c or something real in objc-actions.c. */ maybe_objc_check_decl (decl); ! rest_of_decl_compilation (decl, NULL, 0, 0); if (implicit_warning) implicit_decl_warning (functionid); *************** implicitly_declare (functionid) *** 2558,2563 **** --- 2644,2652 ---- gen_aux_info_record (decl, 0, 1, 0); + /* Possibly apply some default attributes to this implicit declaration. */ + decl_attributes (&decl, NULL_TREE, 0); + return decl; } *************** redeclaration_error_message (newdecl, ol *** 2608,2615 **** if (DECL_INITIAL (olddecl) != 0 && DECL_INITIAL (newdecl) != 0 /* However, defining once as extern inline and a second time in another way is ok. */ ! && ! (DECL_INLINE (olddecl) && DECL_EXTERNAL (olddecl) ! && ! (DECL_INLINE (newdecl) && DECL_EXTERNAL (newdecl)))) return 1; return 0; } --- 2697,2705 ---- if (DECL_INITIAL (olddecl) != 0 && DECL_INITIAL (newdecl) != 0 /* However, defining once as extern inline and a second time in another way is ok. */ ! && ! (DECL_DECLARED_INLINE_P (olddecl) && DECL_EXTERNAL (olddecl) ! && ! (DECL_DECLARED_INLINE_P (newdecl) ! && DECL_EXTERNAL (newdecl)))) return 1; return 0; } *************** tree *** 2652,2658 **** lookup_label (id) tree id; { ! register tree decl = IDENTIFIER_LABEL_VALUE (id); if (current_function_decl == 0) { --- 2742,2748 ---- lookup_label (id) tree id; { ! tree decl = IDENTIFIER_LABEL_VALUE (id); if (current_function_decl == 0) { *************** tree *** 2702,2712 **** shadow_label (name) tree name; { ! register tree decl = IDENTIFIER_LABEL_VALUE (name); if (decl != 0) { ! register tree dup; /* Check to make sure that the label hasn't already been declared at this label scope */ --- 2792,2802 ---- shadow_label (name) tree name; { ! tree decl = IDENTIFIER_LABEL_VALUE (name); if (decl != 0) { ! tree dup; /* Check to make sure that the label hasn't already been declared at this label scope */ *************** lookup_tag (code, name, binding_level, t *** 2826,2837 **** tree name; int thislevel_only; { ! register struct binding_level *level; int thislevel = 1; for (level = binding_level; level; level = level->level_chain) { ! register tree tail; for (tail = level->tags; tail; tail = TREE_CHAIN (tail)) { if (TREE_PURPOSE (tail) == name) --- 2916,2927 ---- tree name; int thislevel_only; { ! struct binding_level *level; int thislevel = 1; for (level = binding_level; level; level = level->level_chain) { ! tree tail; for (tail = level->tags; tail; tail = TREE_CHAIN (tail)) { if (TREE_PURPOSE (tail) == name) *************** static tree *** 2885,2895 **** lookup_tag_reverse (type) tree type; { ! register struct binding_level *level; for (level = current_binding_level; level; level = level->level_chain) { ! register tree tail; for (tail = level->tags; tail; tail = TREE_CHAIN (tail)) { if (TREE_VALUE (tail) == type) --- 2975,2985 ---- lookup_tag_reverse (type) tree type; { ! struct binding_level *level; for (level = current_binding_level; level; level = level->level_chain) { ! tree tail; for (tail = level->tags; tail; tail = TREE_CHAIN (tail)) { if (TREE_VALUE (tail) == type) *************** tree *** 2908,2914 **** lookup_name (name) tree name; { ! register tree val; if (current_binding_level != global_binding_level && IDENTIFIER_LOCAL_VALUE (name)) --- 2998,3004 ---- lookup_name (name) tree name; { ! tree val; if (current_binding_level != global_binding_level && IDENTIFIER_LOCAL_VALUE (name)) *************** tree *** 2924,2930 **** lookup_name_current_level (name) tree name; { ! register tree t; if (current_binding_level == global_binding_level) return IDENTIFIER_GLOBAL_VALUE (name); --- 3014,3020 ---- lookup_name_current_level (name) tree name; { ! tree t; if (current_binding_level == global_binding_level) return IDENTIFIER_GLOBAL_VALUE (name); *************** mark_binding_level (arg) *** 2964,2974 **** Make definitions for built-in primitive functions. */ void ! init_decl_processing () { ! register tree endlink; tree ptr_ftype_void, ptr_ftype_ptr; current_function_decl = NULL; named_labels = NULL; current_binding_level = NULL_BINDING_LEVEL; --- 3054,3067 ---- Make definitions for built-in primitive functions. */ void ! c_init_decl_processing () { ! tree endlink; tree ptr_ftype_void, ptr_ftype_ptr; + /* Adds some ggc roots, and reserved words for c-parse.in. */ + c_parse_init (); + current_function_decl = NULL; named_labels = NULL; current_binding_level = NULL_BINDING_LEVEL; *************** init_decl_processing () *** 2986,2993 **** boolean_true_node = integer_one_node; boolean_false_node = integer_zero_node; ! /* With GCC, C99's _Bool is always of size 1. */ ! c_bool_type_node = make_unsigned_type (CHAR_TYPE_SIZE); TREE_SET_CODE (c_bool_type_node, BOOLEAN_TYPE); TYPE_MAX_VALUE (c_bool_type_node) = build_int_2 (1, 0); TREE_TYPE (TYPE_MAX_VALUE (c_bool_type_node)) = c_bool_type_node; --- 3079,3085 ---- boolean_true_node = integer_one_node; boolean_false_node = integer_zero_node; ! c_bool_type_node = make_unsigned_type (BOOL_TYPE_SIZE); TREE_SET_CODE (c_bool_type_node, BOOLEAN_TYPE); TYPE_MAX_VALUE (c_bool_type_node) = build_int_2 (1, 0); TREE_TYPE (TYPE_MAX_VALUE (c_bool_type_node)) = c_bool_type_node; *************** init_decl_processing () *** 3054,3103 **** g77_ulongint_type_node)); } - builtin_function ("__builtin_aggregate_incoming_address", - build_function_type (ptr_type_node, NULL_TREE), - BUILT_IN_AGGREGATE_INCOMING_ADDRESS, - BUILT_IN_NORMAL, NULL_PTR); - - /* Hooks for the DWARF 2 __throw routine. */ - builtin_function ("__builtin_unwind_init", - build_function_type (void_type_node, endlink), - BUILT_IN_UNWIND_INIT, BUILT_IN_NORMAL, NULL_PTR); - builtin_function ("__builtin_dwarf_cfa", ptr_ftype_void, - BUILT_IN_DWARF_CFA, BUILT_IN_NORMAL, NULL_PTR); - builtin_function ("__builtin_dwarf_fp_regnum", - build_function_type (unsigned_type_node, endlink), - BUILT_IN_DWARF_FP_REGNUM, BUILT_IN_NORMAL, NULL_PTR); - builtin_function ("__builtin_init_dwarf_reg_size_table", void_ftype_ptr, - BUILT_IN_INIT_DWARF_REG_SIZES, BUILT_IN_NORMAL, NULL_PTR); - builtin_function ("__builtin_frob_return_addr", ptr_ftype_ptr, - BUILT_IN_FROB_RETURN_ADDR, BUILT_IN_NORMAL, NULL_PTR); - builtin_function ("__builtin_extract_return_addr", ptr_ftype_ptr, - BUILT_IN_EXTRACT_RETURN_ADDR, BUILT_IN_NORMAL, NULL_PTR); - builtin_function - ("__builtin_eh_return", - build_function_type (void_type_node, - tree_cons (NULL_TREE, - type_for_mode (ptr_mode, 0), - tree_cons (NULL_TREE, - ptr_type_node, - endlink))), - BUILT_IN_EH_RETURN, BUILT_IN_NORMAL, NULL_PTR); - pedantic_lvalues = pedantic; - /* Create the global bindings for __FUNCTION__, __PRETTY_FUNCTION__, - and __func__. */ - function_id_node = get_identifier ("__FUNCTION__"); - pretty_function_id_node = get_identifier ("__PRETTY_FUNCTION__"); - func_id_node = get_identifier ("__func__"); make_fname_decl = c_make_fname_decl; ! declare_function_name (); ! ! start_identifier_warnings (); ! ! /* Prepare to check format strings against argument lists. */ ! init_function_format_info (); incomplete_decl_finalize_hook = finish_incomplete_decl; --- 3146,3155 ---- g77_ulongint_type_node)); } pedantic_lvalues = pedantic; make_fname_decl = c_make_fname_decl; ! start_fname_decls (); incomplete_decl_finalize_hook = finish_incomplete_decl; *************** init_decl_processing () *** 3125,3154 **** are string merging candidates, which is wrong for C99's __func__. FIXME. */ static tree ! c_make_fname_decl (id, name, type_dep) tree id; ! const char *name; ! int type_dep ATTRIBUTE_UNUSED; { tree decl, type, init; size_t length = strlen (name); type = build_array_type (build_qualified_type (char_type_node, TYPE_QUAL_CONST), ! build_index_type (build_int_2 (length, 0))); decl = build_decl (VAR_DECL, id, type); TREE_STATIC (decl) = 1; TREE_READONLY (decl) = 1; - TREE_ASM_WRITTEN (decl) = 1; - DECL_SOURCE_LINE (decl) = 0; DECL_ARTIFICIAL (decl) = 1; ! DECL_IN_SYSTEM_HEADER (decl) = 1; ! DECL_IGNORED_P (decl) = 1; init = build_string (length + 1, name); TREE_TYPE (init) = type; DECL_INITIAL (decl) = init; ! finish_decl (pushdecl (decl), init, NULL_TREE); return decl; } --- 3177,3209 ---- are string merging candidates, which is wrong for C99's __func__. FIXME. */ static tree ! c_make_fname_decl (id, type_dep) tree id; ! int type_dep; { + const char *name = fname_as_string (type_dep); tree decl, type, init; size_t length = strlen (name); type = build_array_type (build_qualified_type (char_type_node, TYPE_QUAL_CONST), ! build_index_type (size_int (length))); decl = build_decl (VAR_DECL, id, type); + /* We don't push the decl, so have to set its context here. */ + DECL_CONTEXT (decl) = current_function_decl; + TREE_STATIC (decl) = 1; TREE_READONLY (decl) = 1; DECL_ARTIFICIAL (decl) = 1; ! init = build_string (length + 1, name); TREE_TYPE (init) = type; DECL_INITIAL (decl) = init; ! ! TREE_USED (decl) = 1; ! ! finish_decl (decl, init, NULL_TREE); return decl; } *************** builtin_function (name, type, function_c *** 3179,3196 **** DECL_BUILT_IN_NONANSI (decl) = 1; if (library_name) SET_DECL_ASSEMBLER_NAME (decl, get_identifier (library_name)); ! make_decl_rtl (decl, NULL_PTR); pushdecl (decl); DECL_BUILT_IN_CLASS (decl) = class; DECL_FUNCTION_CODE (decl) = function_code; /* Warn if a function in the namespace for users is used without an occasion to consider it declared. */ if (name[0] != '_' || name[1] != '_') C_DECL_ANTICIPATED (decl) = 1; return decl; } /* Called when a declaration is seen that contains no names to declare. If its type is a reference to a structure, union or enum inherited --- 3234,3270 ---- DECL_BUILT_IN_NONANSI (decl) = 1; if (library_name) SET_DECL_ASSEMBLER_NAME (decl, get_identifier (library_name)); ! make_decl_rtl (decl, NULL); pushdecl (decl); DECL_BUILT_IN_CLASS (decl) = class; DECL_FUNCTION_CODE (decl) = function_code; + /* The return builtins leave the current function. */ + if (function_code == BUILT_IN_RETURN || function_code == BUILT_IN_EH_RETURN) + TREE_THIS_VOLATILE (decl) = 1; + /* Warn if a function in the namespace for users is used without an occasion to consider it declared. */ if (name[0] != '_' || name[1] != '_') C_DECL_ANTICIPATED (decl) = 1; + /* Possibly apply some default attributes to this built-in function. */ + decl_attributes (&decl, NULL_TREE, 0); + return decl; } + + /* Apply default attributes to a function, if a system function with default + attributes. */ + + void + insert_default_attributes (decl) + tree decl; + { + if (!TREE_PUBLIC (decl)) + return; + c_common_insert_default_attributes (decl); + } /* Called when a declaration is seen that contains no names to declare. If its type is a reference to a structure, union or enum inherited *************** shadow_tag_warned (declspecs, warned) *** 3215,3221 **** no pedwarn. */ { int found_tag = 0; ! register tree link; tree specs, attrs; pending_invalid_xref = 0; --- 3289,3295 ---- no pedwarn. */ { int found_tag = 0; ! tree link; tree specs, attrs; pending_invalid_xref = 0; *************** shadow_tag_warned (declspecs, warned) *** 3226,3240 **** for (link = specs; link; link = TREE_CHAIN (link)) { ! register tree value = TREE_VALUE (link); ! register enum tree_code code = TREE_CODE (value); if (code == RECORD_TYPE || code == UNION_TYPE || code == ENUMERAL_TYPE) /* Used to test also that TYPE_SIZE (value) != 0. That caused warning for `struct foo;' at top level in the file. */ { ! register tree name = lookup_tag_reverse (value); ! register tree t; found_tag++; --- 3300,3314 ---- for (link = specs; link; link = TREE_CHAIN (link)) { ! tree value = TREE_VALUE (link); ! enum tree_code code = TREE_CODE (value); if (code == RECORD_TYPE || code == UNION_TYPE || code == ENUMERAL_TYPE) /* Used to test also that TYPE_SIZE (value) != 0. That caused warning for `struct foo;' at top level in the file. */ { ! tree name = lookup_tag_reverse (value); ! tree t; found_tag++; *************** shadow_tag_warned (declspecs, warned) *** 3278,3294 **** } } /* Decode a "typename", such as "int **", returning a ..._TYPE node. */ tree groktypename (typename) tree typename; { if (TREE_CODE (typename) != TREE_LIST) return typename; ! return grokdeclarator (TREE_VALUE (typename), ! TREE_PURPOSE (typename), ! TYPENAME, 0); } /* Return a PARM_DECL node for a given pair of specs and declarator. */ --- 3352,3430 ---- } } + /* Construct an array declarator. EXPR is the expression inside [], or + NULL_TREE. QUALS are the type qualifiers inside the [] (to be applied + to the pointer to which a parameter array is converted). STATIC_P is + non-zero if "static" is inside the [], zero otherwise. VLA_UNSPEC_P + is non-zero is the array is [*], a VLA of unspecified length which is + nevertheless a complete type (not currently implemented by GCC), + zero otherwise. The declarator is constructed as an ARRAY_REF + (to be decoded by grokdeclarator), whose operand 0 is what's on the + left of the [] (filled by in set_array_declarator_type) and operand 1 + is the expression inside; whose TREE_TYPE is the type qualifiers and + which has TREE_STATIC set if "static" is used. */ + + tree + build_array_declarator (expr, quals, static_p, vla_unspec_p) + tree expr; + tree quals; + int static_p; + int vla_unspec_p; + { + tree decl; + decl = build_nt (ARRAY_REF, NULL_TREE, expr); + TREE_TYPE (decl) = quals; + TREE_STATIC (decl) = (static_p ? 1 : 0); + if (pedantic && !flag_isoc99) + { + if (static_p || quals != NULL_TREE) + pedwarn ("ISO C89 does not support `static' or type qualifiers in parameter array declarators"); + if (vla_unspec_p) + pedwarn ("ISO C89 does not support `[*]' array declarators"); + } + if (vla_unspec_p) + warning ("GCC does not yet properly implement `[*]' array declarators"); + return decl; + } + + /* Set the type of an array declarator. DECL is the declarator, as + constructed by build_array_declarator; TYPE is what appears on the left + of the [] and goes in operand 0. ABSTRACT_P is non-zero if it is an + abstract declarator, zero otherwise; this is used to reject static and + type qualifiers in abstract declarators, where they are not in the + C99 grammar. */ + + tree + set_array_declarator_type (decl, type, abstract_p) + tree decl; + tree type; + int abstract_p; + { + TREE_OPERAND (decl, 0) = type; + if (abstract_p && (TREE_TYPE (decl) != NULL_TREE || TREE_STATIC (decl))) + error ("static or type qualifiers in abstract declarator"); + return decl; + } + /* Decode a "typename", such as "int **", returning a ..._TYPE node. */ tree groktypename (typename) tree typename; { + tree specs, attrs; + if (TREE_CODE (typename) != TREE_LIST) return typename; ! ! split_specs_attrs (TREE_PURPOSE (typename), &specs, &attrs); ! ! typename = grokdeclarator (TREE_VALUE (typename), specs, TYPENAME, 0); ! ! /* Apply attributes. */ ! decl_attributes (&typename, attrs, 0); ! ! return typename; } /* Return a PARM_DECL node for a given pair of specs and declarator. */ *************** groktypename_in_parm_context (typename) *** 3320,3333 **** grokfield and not through here. */ tree ! start_decl (declarator, declspecs, initialized, attributes, prefix_attributes) tree declarator, declspecs; int initialized; ! tree attributes, prefix_attributes; { ! register tree decl = grokdeclarator (declarator, declspecs, ! NORMAL, initialized); ! register tree tem; if (warn_main > 0 && TREE_CODE (decl) != FUNCTION_DECL && MAIN_NAME_P (DECL_NAME (decl))) --- 3456,3478 ---- grokfield and not through here. */ tree ! start_decl (declarator, declspecs, initialized, attributes) tree declarator, declspecs; int initialized; ! tree attributes; { ! tree decl; ! tree tem; ! ! /* An object declared as __attribute__((deprecated)) suppresses ! warnings of uses of other deprecated items. */ ! if (lookup_attribute ("deprecated", attributes)) ! deprecated_state = DEPRECATED_SUPPRESS; ! ! decl = grokdeclarator (declarator, declspecs, ! NORMAL, initialized); ! ! deprecated_state = DEPRECATED_NORMAL; if (warn_main > 0 && TREE_CODE (decl) != FUNCTION_DECL && MAIN_NAME_P (DECL_NAME (decl))) *************** start_decl (declarator, declspecs, initi *** 3431,3442 **** if (! flag_no_common || ! TREE_PUBLIC (decl)) DECL_COMMON (decl) = 1; - #ifdef SET_DEFAULT_DECL_ATTRIBUTES - SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes); - #endif - /* Set attributes here so if duplicate decl, will have proper attributes. */ ! decl_attributes (decl, attributes, prefix_attributes); /* Add this decl to the current binding level. TEM may equal DECL or it may be a previous decl of the same name. */ --- 3576,3594 ---- if (! flag_no_common || ! TREE_PUBLIC (decl)) DECL_COMMON (decl) = 1; /* Set attributes here so if duplicate decl, will have proper attributes. */ ! decl_attributes (&decl, attributes, 0); ! ! /* If #pragma weak was used, mark the decl weak now. */ ! if (current_binding_level == global_binding_level) ! maybe_apply_pragma_weak (decl); ! ! if (TREE_CODE (decl) == FUNCTION_DECL ! && DECL_DECLARED_INLINE_P (decl) ! && DECL_UNINLINABLE (decl) ! && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl))) ! warning_with_decl (decl, ! "inline function `%s' given attribute noinline"); /* Add this decl to the current binding level. TEM may equal DECL or it may be a previous decl of the same name. */ *************** finish_decl (decl, init, asmspec_tree) *** 3471,3488 **** tree decl, init; tree asmspec_tree; { ! register tree type = TREE_TYPE (decl); int was_incomplete = (DECL_SIZE (decl) == 0); const char *asmspec = 0; ! /* If a name was specified, get the string. */ if (asmspec_tree) asmspec = TREE_STRING_POINTER (asmspec_tree); /* If `start_decl' didn't like having an initialization, ignore it now. */ - if (init != 0 && DECL_INITIAL (decl) == 0) init = 0; /* Don't crash if parm is initialized. */ if (TREE_CODE (decl) == PARM_DECL) init = 0; --- 3623,3642 ---- tree decl, init; tree asmspec_tree; { ! tree type = TREE_TYPE (decl); int was_incomplete = (DECL_SIZE (decl) == 0); const char *asmspec = 0; ! /* If a name was specified, get the string. */ ! if (current_binding_level == global_binding_level) ! asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree); if (asmspec_tree) asmspec = TREE_STRING_POINTER (asmspec_tree); /* If `start_decl' didn't like having an initialization, ignore it now. */ if (init != 0 && DECL_INITIAL (decl) == 0) init = 0; + /* Don't crash if parm is initialized. */ if (TREE_CODE (decl) == PARM_DECL) init = 0; *************** finish_decl (decl, init, asmspec_tree) *** 3500,3506 **** } /* Deduce size of array from initialization, if not already known */ - if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type) == 0 && TREE_CODE (decl) != TYPE_DECL) --- 3654,3659 ---- *************** finish_decl (decl, init, asmspec_tree) *** 3604,3612 **** maybe_objc_check_decl (decl); if (!DECL_CONTEXT (decl)) ! rest_of_decl_compilation (decl, asmspec, ! (DECL_CONTEXT (decl) == 0 ! || TREE_ASM_WRITTEN (decl)), 0); else { /* This is a local variable. If there is an ASMSPEC, the --- 3757,3773 ---- maybe_objc_check_decl (decl); if (!DECL_CONTEXT (decl)) ! { ! if (DECL_INITIAL (decl) == NULL_TREE ! || DECL_INITIAL (decl) == error_mark_node) ! /* Don't output anything ! when a tentative file-scope definition is seen. ! But at end of compilation, do output code for them. */ ! DECL_DEFER_OUTPUT (decl) = 1; ! rest_of_decl_compilation (decl, asmspec, ! (DECL_CONTEXT (decl) == 0 ! || TREE_ASM_WRITTEN (decl)), 0); ! } else { /* This is a local variable. If there is an ASMSPEC, the *************** finish_decl (decl, init, asmspec_tree) *** 3633,3639 **** SET_DECL_ASSEMBLER_NAME (decl, get_identifier (asmspec)); } ! add_decl_stmt (decl); } if (DECL_CONTEXT (decl) != 0) --- 3794,3801 ---- SET_DECL_ASSEMBLER_NAME (decl, get_identifier (asmspec)); } ! if (TREE_CODE (decl) != FUNCTION_DECL) ! add_decl_stmt (decl); } if (DECL_CONTEXT (decl) != 0) *************** finish_decl (decl, init, asmspec_tree) *** 3656,3662 **** { /* This is a no-op in c-lang.c or something real in objc-actions.c. */ maybe_objc_check_decl (decl); ! rest_of_decl_compilation (decl, NULL_PTR, DECL_CONTEXT (decl) == 0, 0); } /* At the end of a declaration, throw away any variable type sizes --- 3818,3824 ---- { /* This is a no-op in c-lang.c or something real in objc-actions.c. */ maybe_objc_check_decl (decl); ! rest_of_decl_compilation (decl, NULL, DECL_CONTEXT (decl) == 0, 0); } /* At the end of a declaration, throw away any variable type sizes *************** push_parm_decl (parm) *** 3693,3700 **** decl = grokdeclarator (TREE_VALUE (TREE_PURPOSE (parm)), TREE_PURPOSE (TREE_PURPOSE (parm)), PARM, 0); ! decl_attributes (decl, TREE_VALUE (TREE_VALUE (parm)), ! TREE_PURPOSE (TREE_VALUE (parm))); #if 0 if (DECL_NAME (decl)) --- 3855,3861 ---- decl = grokdeclarator (TREE_VALUE (TREE_PURPOSE (parm)), TREE_PURPOSE (TREE_PURPOSE (parm)), PARM, 0); ! decl_attributes (&decl, TREE_VALUE (parm), 0); #if 0 if (DECL_NAME (decl)) *************** push_parm_decl (parm) *** 3703,3709 **** olddecl = lookup_name (DECL_NAME (decl)); if (pedantic && olddecl != 0 && TREE_CODE (olddecl) == TYPE_DECL) pedwarn_with_decl (decl, ! "ANSI C forbids parameter `%s' shadowing typedef"); } #endif --- 3864,3870 ---- olddecl = lookup_name (DECL_NAME (decl)); if (pedantic && olddecl != 0 && TREE_CODE (olddecl) == TYPE_DECL) pedwarn_with_decl (decl, ! "ISO C forbids parameter `%s' shadowing typedef"); } #endif *************** clear_parm_order () *** 3728,3733 **** --- 3889,3949 ---- current_binding_level->parm_order = NULL_TREE; } + /* Build a COMPOUND_LITERAL_EXPR. TYPE is the type given in the compound + literal, which may be an incomplete array type completed by the + initializer; INIT is a CONSTRUCTOR that initializes the compound + literal. */ + + tree + build_compound_literal (type, init) + tree type; + tree init; + { + /* We do not use start_decl here because we have a type, not a declarator; + and do not use finish_decl because the decl should be stored inside + the COMPOUND_LITERAL_EXPR rather than added elsewhere as a DECL_STMT. */ + tree decl = build_decl (VAR_DECL, NULL_TREE, type); + tree complit; + tree stmt; + DECL_EXTERNAL (decl) = 0; + TREE_PUBLIC (decl) = 0; + TREE_STATIC (decl) = (current_binding_level == global_binding_level); + DECL_CONTEXT (decl) = current_function_decl; + TREE_USED (decl) = 1; + TREE_TYPE (decl) = type; + store_init_value (decl, init); + + if (TREE_CODE (type) == ARRAY_TYPE && !COMPLETE_TYPE_P (type)) + { + int failure = complete_array_type (type, DECL_INITIAL (decl), 1); + if (failure) + abort (); + } + + type = TREE_TYPE (decl); + if (type == error_mark_node || !COMPLETE_TYPE_P (type)) + return error_mark_node; + + stmt = build_stmt (DECL_STMT, decl); + complit = build1 (COMPOUND_LITERAL_EXPR, TREE_TYPE (decl), stmt); + TREE_SIDE_EFFECTS (complit) = 1; + + layout_decl (decl, 0); + + if (TREE_STATIC (decl)) + { + /* This decl needs a name for the assembler output. We also need + a unique suffix to be added to the name, for which DECL_CONTEXT + must be set. */ + DECL_NAME (decl) = get_identifier ("__compound_literal"); + DECL_CONTEXT (decl) = complit; + rest_of_decl_compilation (decl, NULL, 1, 0); + DECL_CONTEXT (decl) = NULL_TREE; + } + + return complit; + } + /* Make TYPE a complete type based on INITIAL_VALUE. Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered, 2 if there was no information (in which case assume 1 if DO_DEFAULT). */ *************** complete_array_type (type, initial_value *** 3738,3744 **** tree initial_value; int do_default; { ! register tree maxindex = NULL_TREE; int value = 0; if (initial_value) --- 3954,3960 ---- tree initial_value; int do_default; { ! tree maxindex = NULL_TREE; int value = 0; if (initial_value) *************** grokdeclarator (declarator, declspecs, d *** 3853,3859 **** enum tree_code innermost_code = ERROR_MARK; int bitfield = 0; int size_varies = 0; ! tree decl_machine_attr = NULL_TREE; if (decl_context == BITFIELD) bitfield = 1, decl_context = FIELD; --- 4069,4078 ---- enum tree_code innermost_code = ERROR_MARK; int bitfield = 0; int size_varies = 0; ! tree decl_attr = NULL_TREE; ! tree array_ptr_quals = NULL_TREE; ! int array_parm_static = 0; ! tree returned_attrs = NULL_TREE; if (decl_context == BITFIELD) bitfield = 1, decl_context = FIELD; *************** grokdeclarator (declarator, declspecs, d *** 3864,3870 **** /* Look inside a declarator for the name being declared and get it as a string, for an error message. */ { ! register tree decl = declarator; name = 0; while (decl) --- 4083,4089 ---- /* Look inside a declarator for the name being declared and get it as a string, for an error message. */ { ! tree decl = declarator; name = 0; while (decl) *************** grokdeclarator (declarator, declspecs, d *** 3877,3882 **** --- 4096,4105 ---- decl = TREE_OPERAND (decl, 0); break; + case TREE_LIST: + decl = TREE_VALUE (decl); + break; + case IDENTIFIER_NODE: name = IDENTIFIER_POINTER (decl); decl = 0; *************** grokdeclarator (declarator, declspecs, d *** 3922,3928 **** for (spec = declspecs; spec; spec = TREE_CHAIN (spec)) { ! register tree id = TREE_VALUE (spec); if (id == ridpointers[(int) RID_INT]) explicit_int = 1; --- 4145,4159 ---- for (spec = declspecs; spec; spec = TREE_CHAIN (spec)) { ! tree id = TREE_VALUE (spec); ! ! /* If the entire declaration is itself tagged as deprecated then ! suppress reports of deprecated items. */ ! if (id && TREE_DEPRECATED (id)) ! { ! if (deprecated_state != DEPRECATED_SUPPRESS) ! warn_deprecated_use (id); ! } if (id == ridpointers[(int) RID_INT]) explicit_int = 1; *************** grokdeclarator (declarator, declspecs, d *** 3957,3970 **** /* Actual typedefs come to us as TYPE_DECL nodes. */ else if (TREE_CODE (id) == TYPE_DECL) { ! type = TREE_TYPE (id); ! decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id); ! typedef_decl = id; } /* Built-in types come as identifiers. */ else if (TREE_CODE (id) == IDENTIFIER_NODE) { ! register tree t = lookup_name (id); if (TREE_TYPE (t) == error_mark_node) ; else if (!t || TREE_CODE (t) != TYPE_DECL) --- 4188,4206 ---- /* Actual typedefs come to us as TYPE_DECL nodes. */ else if (TREE_CODE (id) == TYPE_DECL) { ! if (TREE_TYPE (id) == error_mark_node) ! ; /* Allow the type to default to int to avoid cascading errors. */ ! else ! { ! type = TREE_TYPE (id); ! decl_attr = DECL_ATTRIBUTES (id); ! typedef_decl = id; ! } } /* Built-in types come as identifiers. */ else if (TREE_CODE (id) == IDENTIFIER_NODE) { ! tree t = lookup_name (id); if (TREE_TYPE (t) == error_mark_node) ; else if (!t || TREE_CODE (t) != TYPE_DECL) *************** grokdeclarator (declarator, declspecs, d *** 4003,4009 **** /* Issue a warning if this is an ISO C 99 program or if -Wreturn-type and this is a function, or if -Wimplicit; prefer the former warning since it is more explicit. */ ! if ((warn_implicit_int || warn_return_type) && funcdef_flag) warn_about_return_type = 1; else if (warn_implicit_int || flag_isoc99) pedwarn_c99 ("type defaults to `int' in declaration of `%s'", --- 4239,4246 ---- /* Issue a warning if this is an ISO C 99 program or if -Wreturn-type and this is a function, or if -Wimplicit; prefer the former warning since it is more explicit. */ ! if ((warn_implicit_int || warn_return_type || flag_isoc99) ! && funcdef_flag) warn_about_return_type = 1; else if (warn_implicit_int || flag_isoc99) pedwarn_c99 ("type defaults to `int' in declaration of `%s'", *************** grokdeclarator (declarator, declspecs, d *** 4270,4275 **** --- 4507,4513 ---- /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]), an INDIRECT_REF (for *...), a CALL_EXPR (for ...(...)), + a TREE_LIST (for nested attributes), an identifier (for the name being declared) or a null pointer (for the place in an absolute declarator where the name was omitted). *************** grokdeclarator (declarator, declspecs, d *** 4281,4293 **** array or function or pointer, and DECLARATOR has had its outermost layer removed. */ ! if (TREE_CODE (declarator) == ARRAY_REF) { ! register tree itype = NULL_TREE; ! register tree size = TREE_OPERAND (declarator, 1); /* The index is a signed object `sizetype' bits wide. */ tree index_type = signed_type (sizetype); declarator = TREE_OPERAND (declarator, 0); /* Check for some types that there cannot be arrays of. */ --- 4519,4567 ---- array or function or pointer, and DECLARATOR has had its outermost layer removed. */ ! if (array_ptr_quals != NULL_TREE || array_parm_static) { ! /* Only the innermost declarator (making a parameter be of ! array type which is converted to pointer type) ! may have static or type qualifiers. */ ! error ("static or type qualifiers in non-parameter array declarator"); ! array_ptr_quals = NULL_TREE; ! array_parm_static = 0; ! } ! ! if (TREE_CODE (declarator) == TREE_LIST) ! { ! /* We encode a declarator with embedded attributes using ! a TREE_LIST. */ ! tree attrs = TREE_PURPOSE (declarator); ! tree inner_decl; ! int attr_flags = 0; ! declarator = TREE_VALUE (declarator); ! inner_decl = declarator; ! while (inner_decl != NULL_TREE ! && TREE_CODE (inner_decl) == TREE_LIST) ! inner_decl = TREE_VALUE (inner_decl); ! if (inner_decl == NULL_TREE ! || TREE_CODE (inner_decl) == IDENTIFIER_NODE) ! attr_flags |= (int) ATTR_FLAG_DECL_NEXT; ! else if (TREE_CODE (inner_decl) == CALL_EXPR) ! attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT; ! else if (TREE_CODE (inner_decl) == ARRAY_REF) ! attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT; ! returned_attrs = decl_attributes (&type, ! chainon (returned_attrs, attrs), ! attr_flags); ! } ! else if (TREE_CODE (declarator) == ARRAY_REF) ! { ! tree itype = NULL_TREE; ! tree size = TREE_OPERAND (declarator, 1); /* The index is a signed object `sizetype' bits wide. */ tree index_type = signed_type (sizetype); + array_ptr_quals = TREE_TYPE (declarator); + array_parm_static = TREE_STATIC (declarator); + declarator = TREE_OPERAND (declarator, 0); /* Check for some types that there cannot be arrays of. */ *************** grokdeclarator (declarator, declspecs, d *** 4391,4400 **** } else if (decl_context == FIELD) { - /* ??? Need to check somewhere that this is a structure - and not a union, that this field is last, and that - this structure has at least one other named member. */ - if (pedantic && !flag_isoc99 && !in_system_header) pedwarn ("ISO C89 does not support flexible array members"); --- 4665,4670 ---- *************** grokdeclarator (declarator, declspecs, d *** 4413,4419 **** Functions aren't allowed as array elements. */ if (pedantic && TREE_CODE (type) == FUNCTION_TYPE && (constp || volatilep)) ! pedwarn ("ANSI C forbids const or volatile function types"); #endif /* Build the array type itself, then merge any constancy or --- 4683,4689 ---- Functions aren't allowed as array elements. */ if (pedantic && TREE_CODE (type) == FUNCTION_TYPE && (constp || volatilep)) ! pedwarn ("ISO C forbids const or volatile function types"); #endif /* Build the array type itself, then merge any constancy or *************** grokdeclarator (declarator, declspecs, d *** 4436,4441 **** --- 4706,4718 ---- TYPE_SIZE (type) = bitsize_zero_node; TYPE_SIZE_UNIT (type) = size_zero_node; } + if (decl_context != PARM + && (array_ptr_quals != NULL_TREE || array_parm_static)) + { + error ("static or type qualifiers in non-parameter array declarator"); + array_ptr_quals = NULL_TREE; + array_parm_static = 0; + } } else if (TREE_CODE (declarator) == CALL_EXPR) { *************** grokdeclarator (declarator, declspecs, d *** 4510,4516 **** the FUNCTION_TYPE node itself. */ { ! register tree link; for (link = last_function_parm_tags; link; --- 4787,4793 ---- the FUNCTION_TYPE node itself. */ { ! tree link; for (link = last_function_parm_tags; link; *************** grokdeclarator (declarator, declspecs, d *** 4538,4544 **** if (TREE_TYPE (declarator)) { ! register tree typemodlist; int erred = 0; constp = 0; --- 4815,4821 ---- if (TREE_TYPE (declarator)) { ! tree typemodlist; int erred = 0; constp = 0; *************** grokdeclarator (declarator, declspecs, d *** 4594,4600 **** && TREE_OVERFLOW (TYPE_SIZE (type))) { error ("size of array `%s' is too large", name); ! /* If we proceed with the array type as it is, we'll eventully crash in tree_low_cst(). */ type = error_mark_node; } --- 4871,4877 ---- && TREE_OVERFLOW (TYPE_SIZE (type))) { error ("size of array `%s' is too large", name); ! /* If we proceed with the array type as it is, we'll eventually crash in tree_low_cst(). */ type = error_mark_node; } *************** grokdeclarator (declarator, declspecs, d *** 4615,4620 **** --- 4892,4898 ---- if ((specbits & (1 << (int) RID_SIGNED)) || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))) C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1; + decl_attributes (&decl, returned_attrs, 0); return decl; } *************** grokdeclarator (declarator, declspecs, d *** 4645,4650 **** --- 4923,4929 ---- pedwarn ("ISO C forbids const or volatile function types"); if (type_quals) type = c_build_qualified_type (type, type_quals); + decl_attributes (&type, returned_attrs, 0); return type; } *************** grokdeclarator (declarator, declspecs, d *** 4669,4675 **** or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */ { ! register tree decl; if (decl_context == PARM) { --- 4948,4954 ---- or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */ { ! tree decl; if (decl_context == PARM) { *************** grokdeclarator (declarator, declspecs, d *** 4687,4692 **** --- 4966,5009 ---- type = c_build_qualified_type (type, type_quals); type = build_pointer_type (type); type_quals = TYPE_UNQUALIFIED; + if (array_ptr_quals) + { + tree new_ptr_quals, new_ptr_attrs; + int erred = 0; + split_specs_attrs (array_ptr_quals, &new_ptr_quals, &new_ptr_attrs); + /* We don't yet implement attributes in this context. */ + if (new_ptr_attrs != NULL_TREE) + warning ("attributes in parameter array declarator ignored"); + + constp = 0; + volatilep = 0; + restrictp = 0; + for (; new_ptr_quals; new_ptr_quals = TREE_CHAIN (new_ptr_quals)) + { + tree qualifier = TREE_VALUE (new_ptr_quals); + + if (C_IS_RESERVED_WORD (qualifier)) + { + if (C_RID_CODE (qualifier) == RID_CONST) + constp++; + else if (C_RID_CODE (qualifier) == RID_VOLATILE) + volatilep++; + else if (C_RID_CODE (qualifier) == RID_RESTRICT) + restrictp++; + else + erred++; + } + else + erred++; + } + + if (erred) + error ("invalid type modifier within array declarator"); + + type_quals = ((constp ? TYPE_QUAL_CONST : 0) + | (restrictp ? TYPE_QUAL_RESTRICT : 0) + | (volatilep ? TYPE_QUAL_VOLATILE : 0)); + } size_varies = 0; } else if (TREE_CODE (type) == FUNCTION_TYPE) *************** grokdeclarator (declarator, declspecs, d *** 4780,4786 **** pedwarn ("invalid storage class for function `%s'", name); decl = build_decl (FUNCTION_DECL, declarator, type); ! decl = build_decl_attribute_variant (decl, decl_machine_attr); if (pedantic && type_quals && ! DECL_IN_SYSTEM_HEADER (decl)) pedwarn ("ISO C forbids qualified function types"); --- 5097,5106 ---- pedwarn ("invalid storage class for function `%s'", name); decl = build_decl (FUNCTION_DECL, declarator, type); ! decl = build_decl_attribute_variant (decl, decl_attr); ! ! DECL_LANG_SPECIFIC (decl) = (struct lang_decl *) ! ggc_alloc_cleared (sizeof (struct lang_decl)); if (pedantic && type_quals && ! DECL_IN_SYSTEM_HEADER (decl)) pedwarn ("ISO C forbids qualified function types"); *************** grokdeclarator (declarator, declspecs, d *** 4797,4813 **** TREE_PUBLIC (decl) = !(specbits & ((1 << (int) RID_STATIC) | (1 << (int) RID_AUTO))); /* Record presence of `inline', if it is reasonable. */ ! if (inlinep) { ! if (MAIN_NAME_P (declarator)) warning ("cannot inline function `main'"); ! else ! /* Assume that otherwise the function can be inlined. */ ! DECL_INLINE (decl) = 1; ! if (specbits & (1 << (int) RID_EXTERN)) ! current_extern_inline = 1; } } else --- 5117,5154 ---- TREE_PUBLIC (decl) = !(specbits & ((1 << (int) RID_STATIC) | (1 << (int) RID_AUTO))); + if (defaulted_int) + C_FUNCTION_IMPLICIT_INT (decl) = 1; + /* Record presence of `inline', if it is reasonable. */ ! if (MAIN_NAME_P (declarator)) { ! if (inlinep) warning ("cannot inline function `main'"); ! } ! else if (inlinep) ! { ! /* Assume that otherwise the function can be inlined. */ ! DECL_DECLARED_INLINE_P (decl) = 1; ! /* Do not mark bare declarations as DECL_INLINE. Doing so ! in the presence of multiple declarations can result in ! the abstract origin pointing between the declarations, ! which will confuse dwarf2out. */ ! if (initialized) ! { ! DECL_INLINE (decl) = 1; ! if (specbits & (1 << (int) RID_EXTERN)) ! current_extern_inline = 1; ! } ! } ! /* If -finline-functions, assume it can be inlined. This does ! two things: let the function be deferred until it is actually ! needed, and let dwarf2 know that the function is inlinable. */ ! else if (flag_inline_trees == 2 && initialized) ! { ! DECL_INLINE (decl) = 1; ! DECL_DECLARED_INLINE_P (decl) = 0; } } else *************** grokdeclarator (declarator, declspecs, d *** 4873,4878 **** --- 5214,5221 ---- if (C_TYPE_FIELDS_VOLATILE (TREE_TYPE (decl))) mark_addressable (decl); + decl_attributes (&decl, returned_attrs, 0); + return decl; } } *************** tree *** 4996,5003 **** get_parm_info (void_at_end) int void_at_end; { ! register tree decl, t; ! register tree types = 0; int erred = 0; tree tags = gettags (); tree parms = getdecls (); --- 5339,5346 ---- get_parm_info (void_at_end) int void_at_end; { ! tree decl, t; ! tree types = 0; int erred = 0; tree tags = gettags (); tree parms = getdecls (); *************** parmlist_tags_warning () *** 5107,5120 **** if (code == UNION_TYPE && TREE_PURPOSE (elt) == 0 && !pedantic) continue; if (TREE_PURPOSE (elt) != 0) ! warning ("`%s %s' declared inside parameter list", ! (code == RECORD_TYPE ? "struct" ! : code == UNION_TYPE ? "union" ! : "enum"), ! IDENTIFIER_POINTER (TREE_PURPOSE (elt))); else { ! /* For translation these need to be seperate warnings */ if (code == RECORD_TYPE) warning ("anonymous struct declared inside parameter list"); else if (code == UNION_TYPE) --- 5450,5469 ---- if (code == UNION_TYPE && TREE_PURPOSE (elt) == 0 && !pedantic) continue; if (TREE_PURPOSE (elt) != 0) ! { ! if (code == RECORD_TYPE) ! warning ("`struct %s' declared inside parameter list", ! IDENTIFIER_POINTER (TREE_PURPOSE (elt))); ! else if (code == UNION_TYPE) ! warning ("`union %s' declared inside parameter list", ! IDENTIFIER_POINTER (TREE_PURPOSE (elt))); ! else ! warning ("`enum %s' declared inside parameter list", ! IDENTIFIER_POINTER (TREE_PURPOSE (elt))); ! } else { ! /* For translation these need to be separate warnings */ if (code == RECORD_TYPE) warning ("anonymous struct declared inside parameter list"); else if (code == UNION_TYPE) *************** parmlist_tags_warning () *** 5124,5130 **** } if (! already) { ! warning ("its scope is only this definition or declaration, which is probably not what you want."); already = 1; } } --- 5473,5479 ---- } if (! already) { ! warning ("its scope is only this definition or declaration, which is probably not what you want"); already = 1; } } *************** xref_tag (code, name) *** 5141,5152 **** /* If a cross reference is requested, look up the type already defined for this tag and return it. */ ! register tree ref = lookup_tag (code, name, current_binding_level, 0); ! /* Even if this is the wrong type of tag, return what we found. ! There will be an error message anyway, from pending_xref_error. ! If we create an empty xref just for an invalid use of the type, ! the main result is to create lots of superfluous error messages. */ ! if (ref) return ref; /* If no such tag is yet defined, create a forward-reference node --- 5490,5508 ---- /* If a cross reference is requested, look up the type already defined for this tag and return it. */ ! tree ref = lookup_tag (code, name, current_binding_level, 0); ! /* If this is the right type of tag, return what we found. ! (This reference will be shadowed by shadow_tag later if appropriate.) ! If this is the wrong type of tag, do not return it. If it was the ! wrong type in the same binding level, we will have had an error ! message already; if in a different binding level and declaring ! a name, pending_xref_error will give an error message; but if in a ! different binding level and not declaring a name, this tag should ! shadow the previous declaration of a different type of tag, and ! this would not work properly if we return the reference found. ! (For example, with "struct foo" in an outer scope, "union foo;" ! must shadow that tag with a new one of union type.) */ ! if (ref && TREE_CODE (ref) == code) return ref; /* If no such tag is yet defined, create a forward-reference node *************** start_struct (code, name) *** 5185,5191 **** /* If there is already a tag defined at this binding level (as a forward reference), just return it. */ ! register tree ref = 0; if (name != 0) ref = lookup_tag (code, name, current_binding_level, 1); --- 5541,5547 ---- /* If there is already a tag defined at this binding level (as a forward reference), just return it. */ ! tree ref = 0; if (name != 0) ref = lookup_tag (code, name, current_binding_level, 1); *************** start_struct (code, name) *** 5194,5202 **** C_TYPE_BEING_DEFINED (ref) = 1; TYPE_PACKED (ref) = flag_pack_struct; if (TYPE_FIELDS (ref)) ! error ("redefinition of `%s %s'", ! code == UNION_TYPE ? "union" : "struct", ! IDENTIFIER_POINTER (name)); return ref; } --- 5550,5563 ---- C_TYPE_BEING_DEFINED (ref) = 1; TYPE_PACKED (ref) = flag_pack_struct; if (TYPE_FIELDS (ref)) ! { ! if (code == UNION_TYPE) ! error ("redefinition of `union %s'", ! IDENTIFIER_POINTER (name)); ! else ! error ("redefinition of `struct %s'", ! IDENTIFIER_POINTER (name)); ! } return ref; } *************** grokfield (filename, line, declarator, d *** 5226,5231 **** --- 5587,5604 ---- { tree value; + if (declarator == NULL_TREE && width == NULL_TREE) + { + /* This is an unnamed decl. We only support unnamed + structs/unions, so check for other things and refuse them. */ + if (TREE_CODE (TREE_VALUE (declspecs)) != RECORD_TYPE + && TREE_CODE (TREE_VALUE (declspecs)) != UNION_TYPE) + { + error ("unnamed fields of type other than struct or union are not allowed"); + return NULL_TREE; + } + } + value = grokdeclarator (declarator, declspecs, width ? BITFIELD : FIELD, 0); finish_decl (value, NULL_TREE, NULL_TREE); *************** finish_struct (t, fieldlist, attributes) *** 5245,5251 **** tree fieldlist; tree attributes; { ! register tree x; int toplevel = global_binding_level == current_binding_level; int saw_named_field; --- 5618,5624 ---- tree fieldlist; tree attributes; { ! tree x; int toplevel = global_binding_level == current_binding_level; int saw_named_field; *************** finish_struct (t, fieldlist, attributes) *** 5254,5260 **** TYPE_SIZE (t) = 0; ! decl_attributes (t, attributes, NULL_TREE); /* Nameless union parm types are useful as GCC extension. */ if (! (TREE_CODE (t) == UNION_TYPE && TYPE_NAME (t) == 0) && !pedantic) --- 5627,5633 ---- TYPE_SIZE (t) = 0; ! decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE); /* Nameless union parm types are useful as GCC extension. */ if (! (TREE_CODE (t) == UNION_TYPE && TYPE_NAME (t) == 0) && !pedantic) *************** finish_struct (t, fieldlist, attributes) *** 5359,5369 **** field widths. */ if (DECL_INITIAL (x)) { ! int max_width; ! if (TYPE_MAIN_VARIANT (TREE_TYPE (x)) == c_bool_type_node) ! max_width = CHAR_TYPE_SIZE; ! else ! max_width = TYPE_PRECISION (TREE_TYPE (x)); if (tree_int_cst_sgn (DECL_INITIAL (x)) < 0) error_with_decl (x, "negative width in bit-field `%s'"); else if (0 < compare_tree_int (DECL_INITIAL (x), max_width)) --- 5732,5741 ---- field widths. */ if (DECL_INITIAL (x)) { ! int max_width ! = (TYPE_MAIN_VARIANT (TREE_TYPE (x)) == c_bool_type_node ! ? CHAR_TYPE_SIZE : TYPE_PRECISION (TREE_TYPE (x))); ! if (tree_int_cst_sgn (DECL_INITIAL (x)) < 0) error_with_decl (x, "negative width in bit-field `%s'"); else if (0 < compare_tree_int (DECL_INITIAL (x), max_width)) *************** finish_struct (t, fieldlist, attributes) *** 5374,5380 **** { /* The test above has assured us that TREE_INT_CST_HIGH is 0. */ unsigned HOST_WIDE_INT width ! = TREE_INT_CST_LOW (DECL_INITIAL (x)); if (TREE_CODE (TREE_TYPE (x)) == ENUMERAL_TYPE && (width < min_precision (TYPE_MIN_VALUE (TREE_TYPE (x)), --- 5746,5752 ---- { /* The test above has assured us that TREE_INT_CST_HIGH is 0. */ unsigned HOST_WIDE_INT width ! = tree_low_cst (DECL_INITIAL (x), 1); if (TREE_CODE (TREE_TYPE (x)) == ENUMERAL_TYPE && (width < min_precision (TYPE_MIN_VALUE (TREE_TYPE (x)), *************** finish_struct (t, fieldlist, attributes) *** 5389,5395 **** DECL_BIT_FIELD (x) = 1; SET_DECL_C_BIT_FIELD (x); ! if (width == 0) { /* field size 0 => force desired amount of alignment. */ #ifdef EMPTY_FIELD_BOUNDARY --- 5761,5768 ---- DECL_BIT_FIELD (x) = 1; SET_DECL_C_BIT_FIELD (x); ! if (width == 0 ! && ! (* targetm.ms_bitfield_layout_p) (t)) { /* field size 0 => force desired amount of alignment. */ #ifdef EMPTY_FIELD_BOUNDARY *************** finish_struct (t, fieldlist, attributes) *** 5445,5451 **** x = TREE_CHAIN (x); else { ! register tree y = fieldlist; while (1) { --- 5818,5824 ---- x = TREE_CHAIN (x); else { ! tree y = fieldlist; while (1) { *************** finish_struct (t, fieldlist, attributes) *** 5518,5527 **** layout_decl (decl, 0); /* This is a no-op in c-lang.c or something real in objc-actions.c. */ maybe_objc_check_decl (decl); ! rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0); if (! toplevel) expand_decl (decl); ! --current_binding_level->n_incomplete; } else if (!COMPLETE_TYPE_P (TREE_TYPE (decl)) && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE) --- 5891,5901 ---- layout_decl (decl, 0); /* This is a no-op in c-lang.c or something real in objc-actions.c. */ maybe_objc_check_decl (decl); ! rest_of_decl_compilation (decl, NULL, toplevel, 0); if (! toplevel) expand_decl (decl); ! if (--current_binding_level->n_incomplete == 0) ! break; } else if (!COMPLETE_TYPE_P (TREE_TYPE (decl)) && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE) *************** finish_struct (t, fieldlist, attributes) *** 5530,5536 **** while (TREE_CODE (element) == ARRAY_TYPE) element = TREE_TYPE (element); if (element == t) ! layout_array_type (TREE_TYPE (decl)); } } } --- 5904,5922 ---- while (TREE_CODE (element) == ARRAY_TYPE) element = TREE_TYPE (element); if (element == t) ! { ! layout_array_type (TREE_TYPE (decl)); ! if (TREE_CODE (decl) != TYPE_DECL) ! { ! layout_decl (decl, 0); ! maybe_objc_check_decl (decl); ! rest_of_decl_compilation (decl, NULL, toplevel, 0); ! if (! toplevel) ! expand_decl (decl); ! } ! if (--current_binding_level->n_incomplete == 0) ! break; ! } } } } *************** tree *** 5562,5568 **** start_enum (name) tree name; { ! register tree enumtype = 0; /* If this is the real definition for a previous forward reference, fill in the contents in the same object that used to be the --- 5948,5954 ---- start_enum (name) tree name; { ! tree enumtype = 0; /* If this is the real definition for a previous forward reference, fill in the contents in the same object that used to be the *************** finish_enum (enumtype, values, attribute *** 5610,5616 **** tree values; tree attributes; { ! register tree pair, tem; tree minnode = 0, maxnode = 0, enum_value_type; int precision, unsign; int toplevel = (global_binding_level == current_binding_level); --- 5996,6002 ---- tree values; tree attributes; { ! tree pair, tem; tree minnode = 0, maxnode = 0, enum_value_type; int precision, unsign; int toplevel = (global_binding_level == current_binding_level); *************** finish_enum (enumtype, values, attribute *** 5618,5624 **** if (in_parm_level_p ()) warning ("enum defined inside parms"); ! decl_attributes (enumtype, attributes, NULL_TREE); /* Calculate the maximum value of any enumerator in this type. */ --- 6004,6010 ---- if (in_parm_level_p ()) warning ("enum defined inside parms"); ! decl_attributes (&enumtype, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE); /* Calculate the maximum value of any enumerator in this type. */ *************** tree *** 5741,5747 **** build_enumerator (name, value) tree name, value; { ! register tree decl, type; /* Validate and default VALUE. */ --- 6127,6133 ---- build_enumerator (name, value) tree name, value; { ! tree decl, type; /* Validate and default VALUE. */ *************** build_enumerator (name, value) *** 5802,5808 **** /* Create the FUNCTION_DECL for a function definition. ! DECLSPECS, DECLARATOR, PREFIX_ATTRIBUTES and ATTRIBUTES are the parts of the declaration; they describe the function's name and the type it returns, but twisted together in a fashion that parallels the syntax of C. --- 6188,6194 ---- /* Create the FUNCTION_DECL for a function definition. ! DECLSPECS, DECLARATOR and ATTRIBUTES are the parts of the declaration; they describe the function's name and the type it returns, but twisted together in a fashion that parallels the syntax of C. *************** build_enumerator (name, value) *** 5814,5821 **** yyparse to report a parse error. */ int ! start_function (declspecs, declarator, prefix_attributes, attributes) ! tree declarator, declspecs, prefix_attributes, attributes; { tree decl1, old_decl; tree restype; --- 6200,6207 ---- yyparse to report a parse error. */ int ! start_function (declspecs, declarator, attributes) ! tree declarator, declspecs, attributes; { tree decl1, old_decl; tree restype; *************** start_function (declspecs, declarator, p *** 5823,5828 **** --- 6209,6215 ---- current_function_returns_value = 0; /* Assume, until we see it does. */ current_function_returns_null = 0; + current_function_returns_abnormally = 0; warn_about_return_type = 0; current_extern_inline = 0; c_function_varargs = 0; *************** start_function (declspecs, declarator, p *** 5842,5848 **** return 0; } ! decl_attributes (decl1, prefix_attributes, attributes); announce_function (decl1); --- 6229,6245 ---- return 0; } ! decl_attributes (&decl1, attributes, 0); ! ! /* If #pragma weak was used, mark the decl weak now. */ ! if (current_binding_level == global_binding_level) ! maybe_apply_pragma_weak (decl1); ! ! if (DECL_DECLARED_INLINE_P (decl1) ! && DECL_UNINLINABLE (decl1) ! && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl1))) ! warning_with_decl (decl1, ! "inline function `%s' given attribute noinline"); announce_function (decl1); *************** start_function (declspecs, declarator, p *** 5931,5940 **** except for defining how to inline. So set DECL_EXTERNAL in that case. */ DECL_EXTERNAL (decl1) = current_extern_inline; - #ifdef SET_DEFAULT_DECL_ATTRIBUTES - SET_DEFAULT_DECL_ATTRIBUTES (decl1, attributes); - #endif - /* This function exists in static storage. (This does not mean `static' in the C sense!) */ TREE_STATIC (decl1) = 1; --- 6328,6333 ---- *************** start_function (declspecs, declarator, p *** 6036,6041 **** --- 6429,6436 ---- immediate_size_expand = old_immediate_size_expand; + start_fname_decls (); + return 1; } *************** c_mark_varargs () *** 6059,6066 **** void store_parm_decls () { ! register tree fndecl = current_function_decl; ! register tree parm; /* This is either a chain of PARM_DECLs (if a prototype was used) or a list of IDENTIFIER_NODEs (for an old-fashioned C definition). */ --- 6454,6461 ---- void store_parm_decls () { ! tree fndecl = current_function_decl; ! tree parm; /* This is either a chain of PARM_DECLs (if a prototype was used) or a list of IDENTIFIER_NODEs (for an old-fashioned C definition). */ *************** store_parm_decls () *** 6070,6087 **** tree parmtags = current_function_parm_tags; /* This is a chain of PARM_DECLs from old-style parm declarations. */ ! register tree parmdecls = getdecls (); /* This is a chain of any other decls that came in among the parm declarations. If a parm is declared with enum {foo, bar} x; then CONST_DECLs for foo and bar are put here. */ tree nonparms = 0; /* Nonzero if this definition is written with a prototype. */ int prototype = 0; ! /* The function containing FNDECL, if any. */ ! tree context = decl_function_context (fndecl); if (specparms != 0 && TREE_CODE (specparms) != TREE_LIST) { --- 6465,6487 ---- tree parmtags = current_function_parm_tags; /* This is a chain of PARM_DECLs from old-style parm declarations. */ ! tree parmdecls = getdecls (); /* This is a chain of any other decls that came in among the parm declarations. If a parm is declared with enum {foo, bar} x; then CONST_DECLs for foo and bar are put here. */ tree nonparms = 0; + /* The function containing FNDECL, if any. */ + tree context = decl_function_context (fndecl); + /* Nonzero if this definition is written with a prototype. */ int prototype = 0; ! int saved_warn_shadow = warn_shadow; ! ! /* Don't re-emit shadow warnings. */ ! warn_shadow = 0; if (specparms != 0 && TREE_CODE (specparms) != TREE_LIST) { *************** store_parm_decls () *** 6090,6096 **** except record them as in effect and complain if any redundant old-style parm decls were written. */ ! register tree next; tree others = 0; prototype = 1; --- 6490,6496 ---- except record them as in effect and complain if any redundant old-style parm decls were written. */ ! tree next; tree others = 0; prototype = 1; *************** store_parm_decls () *** 6196,6202 **** for (parm = specparms; parm; parm = TREE_CHAIN (parm)) { ! register tree tail, found = NULL; if (TREE_VALUE (parm) == 0) { --- 6596,6602 ---- for (parm = specparms; parm; parm = TREE_CHAIN (parm)) { ! tree tail, found = NULL; if (TREE_VALUE (parm) == 0) { *************** store_parm_decls () *** 6217,6223 **** } /* If declaration already marked, we have a duplicate name. ! Complain, and don't use this decl twice. */ if (found && DECL_WEAK (found)) { error_with_decl (found, "multiple parameters named `%s'"); --- 6617,6623 ---- } /* If declaration already marked, we have a duplicate name. ! Complain, and don't use this decl twice. */ if (found && DECL_WEAK (found)) { error_with_decl (found, "multiple parameters named `%s'"); *************** store_parm_decls () *** 6308,6314 **** parm = specparms; DECL_ARGUMENTS (fndecl) = 0; { ! register tree last; for (last = 0; parm; parm = TREE_CHAIN (parm)) if (TREE_PURPOSE (parm)) { --- 6708,6714 ---- parm = specparms; DECL_ARGUMENTS (fndecl) = 0; { ! tree last; for (last = 0; parm; parm = TREE_CHAIN (parm)) if (TREE_PURPOSE (parm)) { *************** store_parm_decls () *** 6327,6333 **** if (TYPE_ARG_TYPES (TREE_TYPE (fndecl))) { ! register tree type; for (parm = DECL_ARGUMENTS (fndecl), type = TYPE_ARG_TYPES (TREE_TYPE (fndecl)); parm || (type && (TYPE_MAIN_VARIANT (TREE_VALUE (type)) --- 6727,6733 ---- if (TYPE_ARG_TYPES (TREE_TYPE (fndecl))) { ! tree type; for (parm = DECL_ARGUMENTS (fndecl), type = TYPE_ARG_TYPES (TREE_TYPE (fndecl)); parm || (type && (TYPE_MAIN_VARIANT (TREE_VALUE (type)) *************** store_parm_decls () *** 6455,6462 **** init_function_start (fndecl, input_filename, lineno); /* Begin the statement tree for this function. */ - DECL_LANG_SPECIFIC (current_function_decl) - =((struct lang_decl *) ggc_alloc_cleared (sizeof (struct lang_decl))); begin_stmt_tree (&DECL_SAVED_TREE (current_function_decl)); /* If this is a nested function, save away the sizes of any --- 6855,6860 ---- *************** store_parm_decls () *** 6483,6631 **** not safe to try to expand expressions involving them. */ immediate_size_expand = 0; cfun->x_dont_save_pending_sizes_p = 1; - } - - /* SPECPARMS is an identifier list--a chain of TREE_LIST nodes - each with a parm name as the TREE_VALUE. A null pointer as TREE_VALUE - stands for an ellipsis in the identifier list. - - PARMLIST is the data returned by get_parm_info for the - parmlist that follows the semicolon. - - We return a value of the same sort that get_parm_info returns, - except that it describes the combination of identifiers and parmlist. */ - - tree - combine_parm_decls (specparms, parmlist, void_at_end) - tree specparms, parmlist; - int void_at_end; - { - register tree fndecl = current_function_decl; - register tree parm; - - tree parmdecls = TREE_PURPOSE (parmlist); - - /* This is a chain of any other decls that came in among the parm - declarations. They were separated already by get_parm_info, - so we just need to keep them separate. */ - tree nonparms = TREE_VALUE (parmlist); - - tree types = 0; - - for (parm = parmdecls; parm; parm = TREE_CHAIN (parm)) - DECL_WEAK (parm) = 0; - - for (parm = specparms; parm; parm = TREE_CHAIN (parm)) - { - register tree tail, found = NULL; - - /* See if any of the parmdecls specifies this parm by name. */ - for (tail = parmdecls; tail; tail = TREE_CHAIN (tail)) - if (DECL_NAME (tail) == TREE_VALUE (parm)) - { - found = tail; - break; - } - - /* If declaration already marked, we have a duplicate name. - Complain, and don't use this decl twice. */ - if (found && DECL_WEAK (found)) - { - error_with_decl (found, "multiple parameters named `%s'"); - found = 0; - } - - /* If the declaration says "void", complain and ignore it. */ - if (found && VOID_TYPE_P (TREE_TYPE (found))) - { - error_with_decl (found, "parameter `%s' declared void"); - TREE_TYPE (found) = integer_type_node; - DECL_ARG_TYPE (found) = integer_type_node; - layout_decl (found, 0); - } - - /* Traditionally, a parm declared float is actually a double. */ - if (found && flag_traditional - && TYPE_MAIN_VARIANT (TREE_TYPE (found)) == float_type_node) - { - TREE_TYPE (found) = double_type_node; - DECL_ARG_TYPE (found) = double_type_node; - layout_decl (found, 0); - } - - /* If no declaration found, default to int. */ - if (!found) - { - found = build_decl (PARM_DECL, TREE_VALUE (parm), - integer_type_node); - DECL_ARG_TYPE (found) = TREE_TYPE (found); - DECL_SOURCE_LINE (found) = DECL_SOURCE_LINE (fndecl); - DECL_SOURCE_FILE (found) = DECL_SOURCE_FILE (fndecl); - error_with_decl (found, "type of parameter `%s' is not declared"); - pushdecl (found); - } - - TREE_PURPOSE (parm) = found; - - /* Mark this decl as "already found". */ - DECL_WEAK (found) = 1; - } - - /* Complain about any actual PARM_DECLs not matched with any names. */ - - for (parm = parmdecls; parm;) - { - tree next = TREE_CHAIN (parm); - TREE_CHAIN (parm) = 0; - - /* Complain about args with incomplete types. */ - if (!COMPLETE_TYPE_P (TREE_TYPE (parm))) - { - error_with_decl (parm, "parameter `%s' has incomplete type"); - TREE_TYPE (parm) = error_mark_node; - } - - if (! DECL_WEAK (parm)) - { - error_with_decl (parm, - "declaration for parameter `%s' but no such parameter"); - /* Pretend the parameter was not missing. - This gets us to a standard state and minimizes - further error messages. */ - specparms - = chainon (specparms, - tree_cons (parm, NULL_TREE, NULL_TREE)); - } - - parm = next; - } - - /* Chain the declarations together in the order of the list of names. - At the same time, build up a list of their types, in reverse order. */ - - parm = specparms; - parmdecls = 0; - { - register tree last; - for (last = 0; parm; parm = TREE_CHAIN (parm)) - if (TREE_PURPOSE (parm)) - { - if (last == 0) - parmdecls = TREE_PURPOSE (parm); - else - TREE_CHAIN (last) = TREE_PURPOSE (parm); - last = TREE_PURPOSE (parm); - TREE_CHAIN (last) = 0; ! types = tree_cons (NULL_TREE, TREE_TYPE (parm), types); ! } ! } ! ! if (void_at_end) ! return tree_cons (parmdecls, nonparms, ! nreverse (tree_cons (NULL_TREE, void_type_node, types))); ! ! return tree_cons (parmdecls, nonparms, nreverse (types)); } /* Finish up a function declaration and compile that function --- 6881,6888 ---- not safe to try to expand expressions involving them. */ immediate_size_expand = 0; cfun->x_dont_save_pending_sizes_p = 1; ! warn_shadow = saved_warn_shadow; } /* Finish up a function declaration and compile that function *************** combine_parm_decls (specparms, parmlist, *** 6634,6650 **** This is called after parsing the body of the function definition. ! NESTED is nonzero if the function being finished is nested in another. */ void ! finish_function (nested) int nested; { ! register tree fndecl = current_function_decl; ! /* TREE_READONLY (fndecl) = 1; ! This caused &foo to be of type ptr-to-const-function ! which then got a warning when stored in a ptr-to-function variable. */ poplevel (1, 0, 1); BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl; --- 6891,6911 ---- This is called after parsing the body of the function definition. ! NESTED is nonzero if the function being finished is nested in another. ! CAN_DEFER_P is nonzero if the function may be deferred. */ void ! finish_function (nested, can_defer_p) int nested; + int can_defer_p; { ! tree fndecl = current_function_decl; ! #if 0 ! /* This caused &foo to be of type ptr-to-const-function which then ! got a warning when stored in a ptr-to-function variable. */ ! TREE_READONLY (fndecl) = 1; ! #endif poplevel (1, 0, 1); BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl; *************** finish_function (nested) *** 6681,6689 **** --- 6942,6968 ---- #endif } } + + finish_fname_decls (); /* Tie off the statement tree for this function. */ finish_stmt_tree (&DECL_SAVED_TREE (fndecl)); + + /* Complain if there's just no return statement. */ + if (warn_return_type + && TREE_CODE (TREE_TYPE (TREE_TYPE (fndecl))) != VOID_TYPE + && !current_function_returns_value && !current_function_returns_null + /* Don't complain if we abort. */ + && !current_function_returns_abnormally + /* Don't warn for main(). */ + && !MAIN_NAME_P (DECL_NAME (fndecl)) + /* Or if they didn't actually specify a return type. */ + && !C_FUNCTION_IMPLICIT_INT (fndecl) + /* Normally, with -Wreturn-type, flow will complain. Unless we're an + inline function, as we might never be compiled separately. */ + && DECL_INLINE (fndecl)) + warning ("no return statement in function returning non-void"); + /* Clear out memory we no longer need. */ free_after_parsing (cfun); /* Since we never call rest_of_compilation, we never clear *************** finish_function (nested) *** 6694,6722 **** if (! nested) { /* Generate RTL for the body of this function. */ ! c_expand_body (fndecl, nested); /* Let the error reporting routines know that we're outside a function. For a nested function, this value is used in pop_c_function_context and then reset via pop_function_context. */ current_function_decl = NULL; ! c_function_name_declared_p = 0; } } /* Generate the RTL for the body of FNDECL. If NESTED_P is non-zero, then we are already in the process of generating RTL for another ! function. */ static void ! c_expand_body (fndecl, nested_p) tree fndecl; ! int nested_p; { /* There's no reason to do any of the work here if we're only doing semantic analysis; this code just generates RTL. */ if (flag_syntax_only) return; if (nested_p) { /* Make sure that we will evaluate variable-sized types involved --- 6973,7046 ---- if (! nested) { /* Generate RTL for the body of this function. */ ! c_expand_body (fndecl, nested, can_defer_p); ! /* Let the error reporting routines know that we're outside a function. For a nested function, this value is used in pop_c_function_context and then reset via pop_function_context. */ current_function_decl = NULL; ! } ! } ! ! /* Generate the RTL for a deferred function FNDECL. */ ! ! void ! c_expand_deferred_function (fndecl) ! tree fndecl; ! { ! /* DECL_INLINE or DECL_RESULT might got cleared after the inline ! function was deferred, e.g. in duplicate_decls. */ ! if (DECL_INLINE (fndecl) && DECL_RESULT (fndecl)) ! { ! c_expand_body (fndecl, 0, 0); ! current_function_decl = NULL; } } /* Generate the RTL for the body of FNDECL. If NESTED_P is non-zero, then we are already in the process of generating RTL for another ! function. If can_defer_p is zero, we won't attempt to defer the ! generation of RTL. */ static void ! c_expand_body (fndecl, nested_p, can_defer_p) tree fndecl; ! int nested_p, can_defer_p; { + int uninlinable = 1; + /* There's no reason to do any of the work here if we're only doing semantic analysis; this code just generates RTL. */ if (flag_syntax_only) return; + if (flag_inline_trees) + { + /* First, cache whether the current function is inlinable. Some + predicates depend on cfun and current_function_decl to + function completely. */ + timevar_push (TV_INTEGRATION); + uninlinable = ! tree_inlinable_function_p (fndecl); + + if (! uninlinable && can_defer_p + /* Save function tree for inlining. Should return 0 if the + language does not support function deferring or the + function could not be deferred. */ + && defer_fn (fndecl)) + { + /* Let the back-end know that this function exists. */ + (*debug_hooks->deferred_inline_function) (fndecl); + timevar_pop (TV_INTEGRATION); + return; + } + + /* Then, inline any functions called in it. */ + optimize_inline_calls (fndecl); + timevar_pop (TV_INTEGRATION); + } + + timevar_push (TV_EXPAND); + if (nested_p) { /* Make sure that we will evaluate variable-sized types involved *************** c_expand_body (fndecl, nested_p) *** 6757,6764 **** /* Generate the RTL for this function. */ expand_stmt (DECL_SAVED_TREE (fndecl)); ! /* Allow the body of the function to be garbage collected. */ ! DECL_SAVED_TREE (fndecl) = NULL_TREE; /* We hard-wired immediate_size_expand to zero above. expand_function_end will decrement this variable. So, we set the --- 7081,7091 ---- /* Generate the RTL for this function. */ expand_stmt (DECL_SAVED_TREE (fndecl)); ! if (uninlinable) ! { ! /* Allow the body of the function to be garbage collected. */ ! DECL_SAVED_TREE (fndecl) = NULL_TREE; ! } /* We hard-wired immediate_size_expand to zero above. expand_function_end will decrement this variable. So, we set the *************** c_expand_body (fndecl, nested_p) *** 6819,6825 **** } } ! if (DECL_SAVED_INSNS (fndecl) == 0 && ! nested_p) { /* Stop pointing to the local nodes about to be freed. But DECL_INITIAL must remain nonzero so we know this --- 7146,7153 ---- } } ! if (DECL_SAVED_INSNS (fndecl) == 0 && ! nested_p ! && ! flag_inline_trees) { /* Stop pointing to the local nodes about to be freed. But DECL_INITIAL must remain nonzero so we know this *************** c_expand_body (fndecl, nested_p) *** 6834,6860 **** if (DECL_STATIC_CONSTRUCTOR (fndecl)) { ! #ifndef ASM_OUTPUT_CONSTRUCTOR ! if (! flag_gnu_linker) ! static_ctors = tree_cons (NULL_TREE, fndecl, static_ctors); else ! #endif ! assemble_constructor (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (fndecl))); ! } if (DECL_STATIC_DESTRUCTOR (fndecl)) { ! #ifndef ASM_OUTPUT_DESTRUCTOR ! if (! flag_gnu_linker) ! static_dtors = tree_cons (NULL_TREE, fndecl, static_dtors); else ! #endif ! assemble_destructor (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (fndecl))); } if (nested_p) /* Return to the enclosing function. */ pop_function_context (); } /* Check the declarations given in a for-loop for satisfying the C99 --- 7162,7187 ---- if (DECL_STATIC_CONSTRUCTOR (fndecl)) { ! if (targetm.have_ctors_dtors) ! (* targetm.asm_out.constructor) (XEXP (DECL_RTL (fndecl), 0), ! DEFAULT_INIT_PRIORITY); else ! static_ctors = tree_cons (NULL_TREE, fndecl, static_ctors); } + if (DECL_STATIC_DESTRUCTOR (fndecl)) { ! if (targetm.have_ctors_dtors) ! (* targetm.asm_out.destructor) (XEXP (DECL_RTL (fndecl), 0), ! DEFAULT_INIT_PRIORITY); else ! static_dtors = tree_cons (NULL_TREE, fndecl, static_dtors); } if (nested_p) /* Return to the enclosing function. */ pop_function_context (); + timevar_pop (TV_EXPAND); } /* Check the declarations given in a for-loop for satisfying the C99 *************** check_for_loop_decls () *** 6889,6900 **** for (t = gettags (); t; t = TREE_CHAIN (t)) { if (TREE_PURPOSE (t) != 0) ! error ("`%s %s' declared in `for' loop initial declaration", ! (TREE_CODE (TREE_VALUE (t)) == RECORD_TYPE ? "struct" ! : TREE_CODE (TREE_VALUE (t)) == UNION_TYPE ? "union" ! : "enum"), ! IDENTIFIER_POINTER (TREE_PURPOSE (t))); } for (t = getdecls (); t; t = TREE_CHAIN (t)) { if (TREE_CODE (t) != VAR_DECL && DECL_NAME (t)) --- 7216,7236 ---- for (t = gettags (); t; t = TREE_CHAIN (t)) { if (TREE_PURPOSE (t) != 0) ! { ! enum tree_code code = TREE_CODE (TREE_VALUE (t)); ! ! if (code == RECORD_TYPE) ! error ("`struct %s' declared in `for' loop initial declaration", ! IDENTIFIER_POINTER (TREE_PURPOSE (t))); ! else if (code == UNION_TYPE) ! error ("`union %s' declared in `for' loop initial declaration", ! IDENTIFIER_POINTER (TREE_PURPOSE (t))); ! else ! error ("`enum %s' declared in `for' loop initial declaration", ! IDENTIFIER_POINTER (TREE_PURPOSE (t))); ! } } + for (t = getdecls (); t; t = TREE_CHAIN (t)) { if (TREE_CODE (t) != VAR_DECL && DECL_NAME (t)) *************** struct c_language_function *** 6917,6922 **** --- 7253,7259 ---- tree shadowed_labels; int returns_value; int returns_null; + int returns_abnormally; int warn_about_return_type; int extern_inline; struct binding_level *binding_level; *************** push_c_function_context (f) *** 6936,6946 **** p->base.x_stmt_tree = c_stmt_tree; p->base.x_scope_stmt_stack = c_scope_stmt_stack; - p->base.x_function_name_declared_p = c_function_name_declared_p; p->named_labels = named_labels; p->shadowed_labels = shadowed_labels; p->returns_value = current_function_returns_value; p->returns_null = current_function_returns_null; p->warn_about_return_type = warn_about_return_type; p->extern_inline = current_extern_inline; p->binding_level = current_binding_level; --- 7273,7283 ---- p->base.x_stmt_tree = c_stmt_tree; p->base.x_scope_stmt_stack = c_scope_stmt_stack; p->named_labels = named_labels; p->shadowed_labels = shadowed_labels; p->returns_value = current_function_returns_value; p->returns_null = current_function_returns_null; + p->returns_abnormally = current_function_returns_abnormally; p->warn_about_return_type = warn_about_return_type; p->extern_inline = current_extern_inline; p->binding_level = current_binding_level; *************** pop_c_function_context (f) *** 6974,6984 **** c_stmt_tree = p->base.x_stmt_tree; c_scope_stmt_stack = p->base.x_scope_stmt_stack; - c_function_name_declared_p = p->base.x_function_name_declared_p; named_labels = p->named_labels; shadowed_labels = p->shadowed_labels; current_function_returns_value = p->returns_value; current_function_returns_null = p->returns_null; warn_about_return_type = p->warn_about_return_type; current_extern_inline = p->extern_inline; current_binding_level = p->binding_level; --- 7311,7321 ---- c_stmt_tree = p->base.x_stmt_tree; c_scope_stmt_stack = p->base.x_scope_stmt_stack; named_labels = p->named_labels; shadowed_labels = p->shadowed_labels; current_function_returns_value = p->returns_value; current_function_returns_null = p->returns_null; + current_function_returns_abnormally = p->returns_abnormally; warn_about_return_type = p->warn_about_return_type; current_extern_inline = p->extern_inline; current_binding_level = p->binding_level; *************** mark_c_function_context (f) *** 7005,7011 **** mark_binding_level (&p->binding_level); } ! /* Copy the DECL_LANG_SEPECIFIC data associated with NODE. */ void copy_lang_decl (decl) --- 7342,7348 ---- mark_binding_level (&p->binding_level); } ! /* Copy the DECL_LANG_SPECIFIC data associated with NODE. */ void copy_lang_decl (decl) *************** c_begin_compound_stmt () *** 7108,7120 **** /* Create the COMPOUND_STMT. */ stmt = add_stmt (build_stmt (COMPOUND_STMT, NULL_TREE)); - /* If we haven't already declared __FUNCTION__ and its ilk then this - is the opening curly brace of the function. Declare them now. */ - if (!c_function_name_declared_p) - { - c_function_name_declared_p = 1; - declare_function_name (); - } return stmt; } --- 7445,7450 ---- *************** c_expand_decl_stmt (t) *** 7132,7138 **** if (TREE_CODE (decl) == FUNCTION_DECL && DECL_CONTEXT (decl) == current_function_decl && DECL_SAVED_TREE (decl)) ! c_expand_body (decl, /*nested_p=*/1); } /* Return the IDENTIFIER_GLOBAL_VALUE of T, for use in common code, since --- 7462,7468 ---- if (TREE_CODE (decl) == FUNCTION_DECL && DECL_CONTEXT (decl) == current_function_decl && DECL_SAVED_TREE (decl)) ! c_expand_body (decl, /*nested_p=*/1, /*can_defer_p=*/0); } /* Return the IDENTIFIER_GLOBAL_VALUE of T, for use in common code, since diff -Nrc3pad gcc-3.0.4/gcc/c-dump.c gcc-3.1/gcc/c-dump.c *** gcc-3.0.4/gcc/c-dump.c Tue Jun 5 07:46:58 2001 --- gcc-3.1/gcc/c-dump.c Thu Jan 1 00:00:00 1970 *************** *** 1,877 **** - /* Tree-dumping functionality for intermediate representation. - Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. - Written by Mark Mitchell - - This file is part of GNU CC. - - GNU CC is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU CC is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNU CC; see the file COPYING. If not, write to - the Free Software Foundation, 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - - #include "config.h" - #include "system.h" - #include "tree.h" - #include "c-common.h" - #include "splay-tree.h" - #include "diagnostic.h" - #include "toplev.h" - #include "c-dump.h" - - /* A callback function used dump language-specific parts of tree - nodes. Returns non-zero if it does not want the usual dumping of - the second argument. */ - - dump_tree_fn lang_dump_tree; - - static unsigned int queue PARAMS ((dump_info_p, tree, int)); - static void dump_index PARAMS ((dump_info_p, unsigned int)); - static void dequeue_and_dump PARAMS ((dump_info_p)); - static void dump_new_line PARAMS ((dump_info_p)); - static void dump_maybe_newline PARAMS ((dump_info_p)); - static void dump_string_field PARAMS ((dump_info_p, const char *, const char *)); - - /* Add T to the end of the queue of nodes to dump. Returns the index - assigned to T. */ - - static unsigned int - queue (di, t, flags) - dump_info_p di; - tree t; - int flags; - { - dump_queue_p dq; - dump_node_info_p dni; - unsigned int index; - - /* Assign the next available index to T. */ - index = ++di->index; - - /* Obtain a new queue node. */ - if (di->free_list) - { - dq = di->free_list; - di->free_list = dq->next; - } - else - dq = (dump_queue_p) xmalloc (sizeof (struct dump_queue)); - - /* Create a new entry in the splay-tree. */ - dni = (dump_node_info_p) xmalloc (sizeof (struct dump_node_info)); - dni->index = index; - dni->binfo_p = ((flags & DUMP_BINFO) != 0); - dq->node = splay_tree_insert (di->nodes, (splay_tree_key) t, - (splay_tree_value) dni); - - /* Add it to the end of the queue. */ - dq->next = 0; - if (!di->queue_end) - di->queue = dq; - else - di->queue_end->next = dq; - di->queue_end = dq; - - /* Return the index. */ - return index; - } - - static void - dump_index (di, index) - dump_info_p di; - unsigned int index; - { - fprintf (di->stream, "@%-6u ", index); - di->column += 8; - } - - /* If T has not already been output, queue it for subsequent output. - FIELD is a string to print before printing the index. Then, the - index of T is printed. */ - - void - queue_and_dump_index (di, field, t, flags) - dump_info_p di; - const char *field; - tree t; - int flags; - { - unsigned int index; - splay_tree_node n; - - /* If there's no node, just return. This makes for fewer checks in - our callers. */ - if (!t) - return; - - /* See if we've already queued or dumped this node. */ - n = splay_tree_lookup (di->nodes, (splay_tree_key) t); - if (n) - index = ((dump_node_info_p) n->value)->index; - else - /* If we haven't, add it to the queue. */ - index = queue (di, t, flags); - - /* Print the index of the node. */ - dump_maybe_newline (di); - fprintf (di->stream, "%-4s: ", field); - di->column += 6; - dump_index (di, index); - } - - /* Dump the type of T. */ - - void - queue_and_dump_type (di, t) - dump_info_p di; - tree t; - { - queue_and_dump_index (di, "type", TREE_TYPE (t), DUMP_NONE); - } - - /* Dump column control */ - #define SOL_COLUMN 25 /* Start of line column. */ - #define EOL_COLUMN 55 /* End of line column. */ - #define COLUMN_ALIGNMENT 15 /* Alignment. */ - - /* Insert a new line in the dump output, and indent to an appropriate - place to start printing more fields. */ - - static void - dump_new_line (di) - dump_info_p di; - { - fprintf (di->stream, "\n%*s", SOL_COLUMN, ""); - di->column = SOL_COLUMN; - } - - /* If necessary, insert a new line. */ - - static void - dump_maybe_newline (di) - dump_info_p di; - { - int extra; - - /* See if we need a new line. */ - if (di->column > EOL_COLUMN) - dump_new_line (di); - /* See if we need any padding. */ - else if ((extra = (di->column - SOL_COLUMN) % COLUMN_ALIGNMENT) != 0) - { - fprintf (di->stream, "%*s", COLUMN_ALIGNMENT - extra, ""); - di->column += COLUMN_ALIGNMENT - extra; - } - } - - /* Dump pointer PTR using FIELD to identify it. */ - - void - dump_pointer (di, field, ptr) - dump_info_p di; - const char *field; - void *ptr; - { - dump_maybe_newline (di); - fprintf (di->stream, "%-4s: %-8lx ", field, (long) ptr); - di->column += 15; - } - - /* Dump integer I using FIELD to identify it. */ - - void - dump_int (di, field, i) - dump_info_p di; - const char *field; - int i; - { - dump_maybe_newline (di); - fprintf (di->stream, "%-4s: %-7d ", field, i); - di->column += 14; - } - - /* Dump the string S. */ - - void - dump_string (di, string) - dump_info_p di; - const char *string; - { - dump_maybe_newline (di); - fprintf (di->stream, "%-13s ", string); - if (strlen (string) > 13) - di->column += strlen (string) + 1; - else - di->column += 14; - } - - /* Dump the string field S. */ - - static void - dump_string_field (di, field, string) - dump_info_p di; - const char *field; - const char *string; - { - dump_maybe_newline (di); - fprintf (di->stream, "%-4s: %-7s ", field, string); - if (strlen (string) > 7) - di->column += 6 + strlen (string) + 1; - else - di->column += 14; - } - - /* Dump information common to statements from STMT. */ - - void - dump_stmt (di, t) - dump_info_p di; - tree t; - { - dump_int (di, "line", STMT_LINENO (t)); - } - - /* Dump the next statement after STMT. */ - - void - dump_next_stmt (di, t) - dump_info_p di; - tree t; - { - dump_child ("next", TREE_CHAIN (t)); - } - - /* Dump the next node in the queue. */ - - static void - dequeue_and_dump (di) - dump_info_p di; - { - dump_queue_p dq; - splay_tree_node stn; - dump_node_info_p dni; - tree t; - unsigned int index; - enum tree_code code; - char code_class; - const char* code_name; - - /* Get the next node from the queue. */ - dq = di->queue; - stn = dq->node; - t = (tree) stn->key; - dni = (dump_node_info_p) stn->value; - index = dni->index; - - /* Remove the node from the queue, and put it on the free list. */ - di->queue = dq->next; - if (!di->queue) - di->queue_end = 0; - dq->next = di->free_list; - di->free_list = dq; - - /* Print the node index. */ - dump_index (di, index); - /* And the type of node this is. */ - if (dni->binfo_p) - code_name = "binfo"; - else - code_name = tree_code_name[(int) TREE_CODE (t)]; - fprintf (di->stream, "%-16s ", code_name); - di->column = 25; - - /* Figure out what kind of node this is. */ - code = TREE_CODE (t); - code_class = TREE_CODE_CLASS (code); - - /* Although BINFOs are TREE_VECs, we dump them specially so as to be - more informative. */ - if (dni->binfo_p) - { - if (TREE_VIA_PUBLIC (t)) - dump_string (di, "pub"); - else if (TREE_VIA_PROTECTED (t)) - dump_string (di, "prot"); - else if (TREE_VIA_PRIVATE (t)) - dump_string (di, "priv"); - if (TREE_VIA_VIRTUAL (t)) - dump_string (di, "virt"); - - dump_child ("type", BINFO_TYPE (t)); - dump_child ("base", BINFO_BASETYPES (t)); - - goto done; - } - - /* We can knock off a bunch of expression nodes in exactly the same - way. */ - if (IS_EXPR_CODE_CLASS (code_class)) - { - /* If we're dumping children, dump them now. */ - queue_and_dump_type (di, t); - - switch (code_class) - { - case '1': - dump_child ("op 0", TREE_OPERAND (t, 0)); - break; - - case '2': - case '<': - dump_child ("op 0", TREE_OPERAND (t, 0)); - dump_child ("op 1", TREE_OPERAND (t, 1)); - break; - - case 'e': - /* These nodes are handled explicitly below. */ - break; - - default: - abort(); - } - } - else if (DECL_P (t)) - { - /* All declarations have names. */ - if (DECL_NAME (t)) - dump_child ("name", DECL_NAME (t)); - if (DECL_ASSEMBLER_NAME_SET_P (t) - && DECL_ASSEMBLER_NAME (t) != DECL_NAME (t)) - dump_child ("mngl", DECL_ASSEMBLER_NAME (t)); - /* And types. */ - queue_and_dump_type (di, t); - dump_child ("scpe", DECL_CONTEXT (t)); - /* And a source position. */ - if (DECL_SOURCE_FILE (t)) - { - const char *filename = strrchr (DECL_SOURCE_FILE (t), '/'); - if (!filename) - filename = DECL_SOURCE_FILE (t); - else - /* Skip the slash. */ - ++filename; - - dump_maybe_newline (di); - fprintf (di->stream, "srcp: %s:%-6d ", filename, - DECL_SOURCE_LINE (t)); - di->column += 6 + strlen (filename) + 8; - } - /* And any declaration can be compiler-generated. */ - if (DECL_ARTIFICIAL (t)) - dump_string (di, "artificial"); - if (TREE_CHAIN (t) && !dump_flag (di, TDF_SLIM, NULL)) - dump_child ("chan", TREE_CHAIN (t)); - } - else if (code_class == 't') - { - /* All types have qualifiers. */ - int quals = C_TYPE_QUALS (t); - if (quals != TYPE_UNQUALIFIED) - { - fprintf (di->stream, "qual: %c%c%c ", - (quals & TYPE_QUAL_CONST) ? 'c' : ' ', - (quals & TYPE_QUAL_VOLATILE) ? 'v' : ' ', - (quals & TYPE_QUAL_RESTRICT) ? 'r' : ' '); - di->column += 14; - } - - /* All types have associated declarations. */ - dump_child ("name", TYPE_NAME (t)); - - /* All types have a main variant. */ - if (TYPE_MAIN_VARIANT (t) != t) - dump_child ("unql", TYPE_MAIN_VARIANT (t)); - - /* And sizes. */ - dump_child ("size", TYPE_SIZE (t)); - - /* All types have alignments. */ - dump_int (di, "algn", TYPE_ALIGN (t)); - } - else if (code_class == 'c') - /* All constants can have types. */ - queue_and_dump_type (di, t); - - /* Give the language-specific code a chance to print something. If - it's completely taken care of things, don't bother printing - anything more ourselves. */ - if (lang_dump_tree && (*lang_dump_tree) (di, t)) - goto done; - - /* Now handle the various kinds of nodes. */ - switch (code) - { - int i; - - case IDENTIFIER_NODE: - dump_string_field (di, "strg", IDENTIFIER_POINTER (t)); - dump_int (di, "lngt", IDENTIFIER_LENGTH (t)); - break; - - case TREE_LIST: - dump_child ("purp", TREE_PURPOSE (t)); - dump_child ("valu", TREE_VALUE (t)); - dump_child ("chan", TREE_CHAIN (t)); - break; - - case TREE_VEC: - dump_int (di, "lngt", TREE_VEC_LENGTH (t)); - for (i = 0; i < TREE_VEC_LENGTH (t); ++i) - { - char buffer[32]; - sprintf (buffer, "%u", i); - dump_child (buffer, TREE_VEC_ELT (t, i)); - } - break; - - case INTEGER_TYPE: - case ENUMERAL_TYPE: - dump_int (di, "prec", TYPE_PRECISION (t)); - if (TREE_UNSIGNED (t)) - dump_string (di, "unsigned"); - dump_child ("min", TYPE_MIN_VALUE (t)); - dump_child ("max", TYPE_MAX_VALUE (t)); - - if (code == ENUMERAL_TYPE) - dump_child ("csts", TYPE_VALUES (t)); - break; - - case REAL_TYPE: - dump_int (di, "prec", TYPE_PRECISION (t)); - break; - - case POINTER_TYPE: - dump_child ("ptd", TREE_TYPE (t)); - break; - - case REFERENCE_TYPE: - dump_child ("refd", TREE_TYPE (t)); - break; - - case METHOD_TYPE: - dump_child ("clas", TYPE_METHOD_BASETYPE (t)); - /* Fall through. */ - - case FUNCTION_TYPE: - dump_child ("retn", TREE_TYPE (t)); - dump_child ("prms", TYPE_ARG_TYPES (t)); - break; - - case ARRAY_TYPE: - dump_child ("elts", TREE_TYPE (t)); - dump_child ("domn", TYPE_DOMAIN (t)); - break; - - case RECORD_TYPE: - case UNION_TYPE: - if (TREE_CODE (t) == RECORD_TYPE) - dump_string (di, "struct"); - else - dump_string (di, "union"); - - dump_child ("flds", TYPE_FIELDS (t)); - dump_child ("fncs", TYPE_METHODS (t)); - queue_and_dump_index (di, "binf", TYPE_BINFO (t), - DUMP_BINFO); - break; - - case CONST_DECL: - dump_child ("cnst", DECL_INITIAL (t)); - break; - - case VAR_DECL: - case PARM_DECL: - case FIELD_DECL: - case RESULT_DECL: - if (TREE_CODE (t) == PARM_DECL) - dump_child ("argt", DECL_ARG_TYPE (t)); - else - dump_child ("init", DECL_INITIAL (t)); - dump_child ("size", DECL_SIZE (t)); - dump_int (di, "algn", DECL_ALIGN (t)); - - if (TREE_CODE (t) == FIELD_DECL) - { - if (DECL_C_BIT_FIELD (t)) - dump_string (di, "bitfield"); - if (DECL_FIELD_OFFSET (t)) - dump_child ("bpos", bit_position (t)); - } - else if (TREE_CODE (t) == VAR_DECL - || TREE_CODE (t) == PARM_DECL) - { - dump_int (di, "used", TREE_USED (t)); - if (DECL_REGISTER (t)) - dump_string (di, "register"); - } - break; - - case FUNCTION_DECL: - dump_child ("args", DECL_ARGUMENTS (t)); - if (DECL_EXTERNAL (t)) - dump_string (di, "undefined"); - if (TREE_PUBLIC (t)) - dump_string (di, "extern"); - else - dump_string (di, "static"); - if (DECL_LANG_SPECIFIC (t) && !dump_flag (di, TDF_SLIM, t)) - dump_child ("body", DECL_SAVED_TREE (t)); - break; - - case ASM_STMT: - dump_stmt (di, t); - if (ASM_VOLATILE_P (t)) - dump_string (di, "volatile"); - dump_child ("strg", ASM_STRING (t)); - dump_child ("outs", ASM_OUTPUTS (t)); - dump_child ("ins", ASM_INPUTS (t)); - dump_child ("clbr", ASM_CLOBBERS (t)); - dump_next_stmt (di, t); - break; - - case BREAK_STMT: - case CONTINUE_STMT: - dump_stmt (di, t); - dump_next_stmt (di, t); - break; - - case CASE_LABEL: - /* Note that a case label is not like other statments; there is - no way to get the line-number of a case label. */ - dump_child ("low", CASE_LOW (t)); - dump_child ("high", CASE_HIGH (t)); - dump_next_stmt (di, t); - break; - - case COMPOUND_STMT: - dump_stmt (di, t); - dump_child ("body", COMPOUND_BODY (t)); - dump_next_stmt (di, t); - break; - - case DECL_STMT: - dump_stmt (di, t); - dump_child ("decl", DECL_STMT_DECL (t)); - dump_next_stmt (di, t); - break; - - case DO_STMT: - dump_stmt (di, t); - dump_child ("body", DO_BODY (t)); - dump_child ("cond", DO_COND (t)); - dump_next_stmt (di, t); - break; - - case EXPR_STMT: - dump_stmt (di, t); - dump_child ("expr", EXPR_STMT_EXPR (t)); - dump_next_stmt (di, t); - break; - - case FOR_STMT: - dump_stmt (di, t); - dump_child ("init", FOR_INIT_STMT (t)); - dump_child ("cond", FOR_COND (t)); - dump_child ("expr", FOR_EXPR (t)); - dump_child ("body", FOR_BODY (t)); - dump_next_stmt (di, t); - break; - - case GOTO_STMT: - dump_stmt (di, t); - dump_child ("dest", GOTO_DESTINATION (t)); - dump_next_stmt (di, t); - break; - - case IF_STMT: - dump_stmt (di, t); - dump_child ("cond", IF_COND (t)); - dump_child ("then", THEN_CLAUSE (t)); - dump_child ("else", ELSE_CLAUSE (t)); - dump_next_stmt (di, t); - break; - - case LABEL_STMT: - dump_stmt (di, t); - dump_child ("labl", LABEL_STMT_LABEL (t)); - dump_next_stmt (di, t); - break; - - case RETURN_STMT: - dump_stmt (di, t); - dump_child ("expr", RETURN_EXPR (t)); - dump_next_stmt (di, t); - break; - - case SWITCH_STMT: - dump_stmt (di, t); - dump_child ("cond", SWITCH_COND (t)); - dump_child ("body", SWITCH_BODY (t)); - dump_next_stmt (di, t); - break; - - case WHILE_STMT: - dump_stmt (di, t); - dump_child ("cond", WHILE_COND (t)); - dump_child ("body", WHILE_BODY (t)); - dump_next_stmt (di, t); - break; - - case SCOPE_STMT: - dump_stmt (di, t); - if (SCOPE_BEGIN_P (t)) - dump_string (di, "begn"); - else - dump_string (di, "end"); - if (SCOPE_NULLIFIED_P (t)) - dump_string (di, "null"); - if (!SCOPE_NO_CLEANUPS_P (t)) - dump_string (di, "clnp"); - dump_next_stmt (di, t); - break; - - case INTEGER_CST: - if (TREE_INT_CST_HIGH (t)) - dump_int (di, "high", TREE_INT_CST_HIGH (t)); - dump_int (di, "low", TREE_INT_CST_LOW (t)); - break; - - case STRING_CST: - fprintf (di->stream, "strg: %-7s ", TREE_STRING_POINTER (t)); - dump_int (di, "lngt", TREE_STRING_LENGTH (t)); - break; - - case TRUTH_NOT_EXPR: - case ADDR_EXPR: - case INDIRECT_REF: - case CLEANUP_POINT_EXPR: - case SAVE_EXPR: - /* These nodes are unary, but do not have code class `1'. */ - dump_child ("op 0", TREE_OPERAND (t, 0)); - break; - - case TRUTH_ANDIF_EXPR: - case TRUTH_ORIF_EXPR: - case INIT_EXPR: - case MODIFY_EXPR: - case COMPONENT_REF: - case COMPOUND_EXPR: - case ARRAY_REF: - case PREDECREMENT_EXPR: - case PREINCREMENT_EXPR: - case POSTDECREMENT_EXPR: - case POSTINCREMENT_EXPR: - /* These nodes are binary, but do not have code class `2'. */ - dump_child ("op 0", TREE_OPERAND (t, 0)); - dump_child ("op 1", TREE_OPERAND (t, 1)); - break; - - case COND_EXPR: - dump_child ("op 0", TREE_OPERAND (t, 0)); - dump_child ("op 1", TREE_OPERAND (t, 1)); - dump_child ("op 2", TREE_OPERAND (t, 2)); - break; - - case CALL_EXPR: - dump_child ("fn", TREE_OPERAND (t, 0)); - dump_child ("args", TREE_OPERAND (t, 1)); - break; - - case CONSTRUCTOR: - dump_child ("elts", TREE_OPERAND (t, 1)); - break; - - case STMT_EXPR: - dump_child ("stmt", STMT_EXPR_STMT (t)); - break; - - case BIND_EXPR: - dump_child ("vars", TREE_OPERAND (t, 0)); - dump_child ("body", TREE_OPERAND (t, 1)); - break; - - case LOOP_EXPR: - dump_child ("body", TREE_OPERAND (t, 0)); - break; - - case EXIT_EXPR: - dump_child ("cond", TREE_OPERAND (t, 0)); - break; - - case TARGET_EXPR: - dump_child ("decl", TREE_OPERAND (t, 0)); - dump_child ("init", TREE_OPERAND (t, 1)); - dump_child ("clnp", TREE_OPERAND (t, 2)); - /* There really are two possible places the initializer can be. - After RTL expansion, the second operand is moved to the - position of the fourth operand, and the second operand - becomes NULL. */ - dump_child ("init", TREE_OPERAND (t, 3)); - break; - - case EXPR_WITH_FILE_LOCATION: - dump_child ("expr", EXPR_WFL_NODE (t)); - break; - - default: - /* There are no additional fields to print. */ - break; - } - - done: - if (dump_flag (di, TDF_ADDRESS, NULL)) - dump_pointer (di, "addr", (void *)t); - - /* Terminate the line. */ - fprintf (di->stream, "\n"); - } - - /* Return non-zero if FLAG has been specified for the dump, and NODE - is not the root node of the dump. */ - - int dump_flag (di, flag, node) - dump_info_p di; - int flag; - tree node; - { - return (di->flags & flag) && (node != di->node); - } - - /* Dump T, and all its children, on STREAM. */ - - void - dump_node (t, flags, stream) - tree t; - int flags; - FILE *stream; - { - struct dump_info di; - dump_queue_p dq; - dump_queue_p next_dq; - - /* Initialize the dump-information structure. */ - di.stream = stream; - di.index = 0; - di.column = 0; - di.queue = 0; - di.queue_end = 0; - di.free_list = 0; - di.flags = flags; - di.node = t; - di.nodes = splay_tree_new (splay_tree_compare_pointers, 0, - (splay_tree_delete_value_fn) &free); - - /* Queue up the first node. */ - queue (&di, t, DUMP_NONE); - - /* Until the queue is empty, keep dumping nodes. */ - while (di.queue) - dequeue_and_dump (&di); - - /* Now, clean up. */ - for (dq = di.free_list; dq; dq = next_dq) - { - next_dq = dq->next; - free (dq); - } - splay_tree_delete (di.nodes); - } - - /* Define a tree dump switch. */ - struct dump_file_info - { - const char *suffix; /* suffix to give output file. */ - const char *swtch; /* command line switch */ - int flags; /* user flags */ - int state; /* state of play */ - }; - - /* Table of tree dump switches. */ - static struct dump_file_info dump_files[TDI_end] = - { - {".tu", "dump-translation-unit", 0, 0}, - {".original", "dump-ast-original", 0, 0}, - {".optimized", "dump-ast-optimized", 0, 0}, - {".class", "dump-class-hierarchy", 0, 0}, - }; - - /* Begin a tree dump for PHASE. Stores any user supplied flag in - *FLAG_PTR and returns a stream to write to. If the dump is not - enabled, returns NULL. - Multiple calls will reopen and append to the dump file. */ - - FILE * - dump_begin (phase, flag_ptr) - enum tree_dump_index phase; - int *flag_ptr; - { - FILE *stream; - char *name; - - if (!dump_files[phase].state) - return NULL; - - name = concat (dump_base_name, dump_files[phase].suffix, NULL); - stream = fopen (name, dump_files[phase].state < 0 ? "w" : "a"); - if (!stream) - error ("could not open dump file `%s'", name); - else - dump_files[phase].state = 1; - free (name); - if (flag_ptr) - *flag_ptr = dump_files[phase].flags; - - return stream; - } - - /* Returns non-zero if tree dump PHASE is enabled. */ - - int dump_enabled_p (phase) - enum tree_dump_index phase; - { - return dump_files[phase].state; - } - - /* Finish a tree dump for PHASE. STREAM is the stream created by - dump_begin. */ - - void dump_end (phase, stream) - enum tree_dump_index phase ATTRIBUTE_UNUSED; - FILE *stream; - { - fclose (stream); - } - - /* Parse ARG as a dump switch. Return non-zero if it is, and store the - relevant details in the dump_files array. */ - - int dump_switch_p (arg) - const char *arg; - { - unsigned ix; - const char *option_value; - - for (ix = 0; ix != TDI_end; ix++) - if ((option_value = skip_leading_substring (arg, dump_files[ix].swtch))) - { - dump_files[ix].state = -1; - if (*option_value == '-') - dump_files[ix].flags - = read_integral_parameter (option_value + 1, arg, 0); - else if (*option_value) - warning ("ignoring `%s' at end of `-f%s'", - option_value, dump_files[ix].swtch); - - return 1; - } - return 0; - } --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/c-dump.h gcc-3.1/gcc/c-dump.h *** gcc-3.0.4/gcc/c-dump.h Tue Jun 5 07:46:58 2001 --- gcc-3.1/gcc/c-dump.h Thu Jan 1 00:00:00 1970 *************** *** 1,90 **** - /* Tree-dumping functionality for intermediate representation. - Copyright (C) 1999, 2000 Free Software Foundation, Inc. - Written by Mark Mitchell - - This file is part of GNU CC. - - GNU CC is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU CC is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNU CC; see the file COPYING. If not, write to - the Free Software Foundation, 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - - /* Flags used with queue functions. */ - #define DUMP_NONE 0 - #define DUMP_BINFO 1 - - /* Information about a node to be dumped. */ - - typedef struct dump_node_info - { - /* The index for the node. */ - unsigned int index; - /* Nonzero if the node is a binfo. */ - unsigned int binfo_p : 1; - } *dump_node_info_p; - - /* A dump_queue is a link in the queue of things to be dumped. */ - - typedef struct dump_queue - { - /* The queued tree node. */ - splay_tree_node node; - /* The next node in the queue. */ - struct dump_queue *next; - } *dump_queue_p; - - /* A dump_info gives information about how we should perform the dump - and about the current state of the dump. */ - - struct dump_info - { - /* The stream on which to dump the information. */ - FILE *stream; - /* The original node. */ - tree node; - /* User flags. */ - int flags; - /* The next unused node index. */ - unsigned int index; - /* The next column. */ - unsigned int column; - /* The first node in the queue of nodes to be written out. */ - dump_queue_p queue; - /* The last node in the queue. */ - dump_queue_p queue_end; - /* Free queue nodes. */ - dump_queue_p free_list; - /* The tree nodes which we have already written out. The - keys are the addresses of the nodes; the values are the integer - indices we assigned them. */ - splay_tree nodes; - }; - - /* Dump the CHILD and its children. */ - #define dump_child(field, child) \ - queue_and_dump_index (di, field, child, DUMP_NONE) - - extern void dump_pointer - PARAMS ((dump_info_p, const char *, void *)); - extern void dump_int - PARAMS ((dump_info_p, const char *, int)); - extern void dump_string - PARAMS ((dump_info_p, const char *)); - extern void dump_stmt - PARAMS ((dump_info_p, tree)); - extern void dump_next_stmt - PARAMS ((dump_info_p, tree)); - extern void queue_and_dump_index - PARAMS ((dump_info_p, const char *, tree, int)); - extern void queue_and_dump_type - PARAMS ((dump_info_p, tree)); --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/c-errors.c gcc-3.1/gcc/c-errors.c *** gcc-3.0.4/gcc/c-errors.c Sun Aug 20 09:50:12 2000 --- gcc-3.1/gcc/c-errors.c Mon Aug 27 06:48:41 2001 *************** *** 1,23 **** /* Various diagnostic subroutines for the GNU C language. ! Copyright (C) 2000 Free Software Foundation, Inc. Contributed by Gabriel Dos Reis ! 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 "config.h" #include "system.h" --- 1,23 ---- /* Various diagnostic subroutines for the GNU C language. ! Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Gabriel Dos Reis ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" #include "system.h" *************** Boston, MA 02111-1307, USA. */ *** 32,51 **** void pedwarn_c99 VPARAMS ((const char *msgid, ...)) { - #ifndef ANSI_PROTOTYPES - const char *msgid; - #endif - va_list ap; diagnostic_context dc; ! VA_START (ap, msgid); ! ! #ifndef ANSI_PROTOTYPES ! msgid = va_arg (ap, const char *); ! #endif set_diagnostic_context (&dc, msgid, &ap, input_filename, lineno, !flag_isoc99 || !flag_pedantic_errors); report_diagnostic (&dc); ! va_end (ap); } --- 32,44 ---- void pedwarn_c99 VPARAMS ((const char *msgid, ...)) { diagnostic_context dc; ! VA_OPEN (ap, msgid); ! VA_FIXEDARG (ap, const char *, msgid); set_diagnostic_context (&dc, msgid, &ap, input_filename, lineno, !flag_isoc99 || !flag_pedantic_errors); report_diagnostic (&dc); ! VA_CLOSE (ap); } diff -Nrc3pad gcc-3.0.4/gcc/c-format.c gcc-3.1/gcc/c-format.c *** gcc-3.0.4/gcc/c-format.c Fri Mar 2 19:51:56 2001 --- gcc-3.1/gcc/c-format.c Wed Feb 20 22:54:32 2002 *************** *** 1,23 **** /* Check calls to formatted I/O functions (-Wformat). ! Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 ! Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" #include "system.h" --- 1,23 ---- /* Check calls to formatted I/O functions (-Wformat). ! Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, ! 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" #include "system.h" *************** enum format_type { printf_format_type, s *** 77,157 **** strftime_format_type, strfmon_format_type, format_type_error }; ! static enum format_type decode_format_type PARAMS ((const char *)); ! static void record_function_format PARAMS ((tree, tree, enum format_type, ! int, int)); ! static void record_international_format PARAMS ((tree, tree, int)); ! /* Handle the format attribute (with arguments ARGS) attached to the decl ! DECL. It is already verified that DECL is a decl and ARGS contains ! exactly three arguments. */ ! void ! decl_handle_format_attribute (decl, args) ! tree decl, args; { ! tree type = TREE_TYPE (decl); ! tree format_type_id = TREE_VALUE (args); ! tree format_num_expr = TREE_VALUE (TREE_CHAIN (args)); ! tree first_arg_num_expr ! = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (args))); ! unsigned HOST_WIDE_INT format_num, first_arg_num; ! enum format_type format_type; tree argument; ! unsigned int arg_num; ! ! if (TREE_CODE (decl) != FUNCTION_DECL) ! { ! error_with_decl (decl, ! "argument format specified for non-function `%s'"); ! return; ! } ! ! if (TREE_CODE (format_type_id) != IDENTIFIER_NODE) ! { ! error ("unrecognized format specifier"); ! return; ! } ! else ! { ! const char *p = IDENTIFIER_POINTER (format_type_id); ! ! format_type = decode_format_type (p); ! ! if (format_type == format_type_error) ! { ! warning ("`%s' is an unrecognized format function type", p); ! return; ! } ! } ! ! /* Strip any conversions from the string index and first arg number ! and verify they are constants. */ ! while (TREE_CODE (format_num_expr) == NOP_EXPR ! || TREE_CODE (format_num_expr) == CONVERT_EXPR ! || TREE_CODE (format_num_expr) == NON_LVALUE_EXPR) ! format_num_expr = TREE_OPERAND (format_num_expr, 0); ! ! while (TREE_CODE (first_arg_num_expr) == NOP_EXPR ! || TREE_CODE (first_arg_num_expr) == CONVERT_EXPR ! || TREE_CODE (first_arg_num_expr) == NON_LVALUE_EXPR) ! first_arg_num_expr = TREE_OPERAND (first_arg_num_expr, 0); ! ! if (TREE_CODE (format_num_expr) != INTEGER_CST ! || TREE_INT_CST_HIGH (format_num_expr) != 0 ! || TREE_CODE (first_arg_num_expr) != INTEGER_CST ! || TREE_INT_CST_HIGH (first_arg_num_expr) != 0) ! { ! error ("format string has invalid operand number"); ! return; ! } ! format_num = TREE_INT_CST_LOW (format_num_expr); ! first_arg_num = TREE_INT_CST_LOW (first_arg_num_expr); ! if (first_arg_num != 0 && first_arg_num <= format_num) { ! error ("format string arg follows the args to be formatted"); ! return; } /* If a parameter list is specified, verify that the format_num --- 77,112 ---- strftime_format_type, strfmon_format_type, format_type_error }; ! typedef struct function_format_info ! { ! enum format_type format_type; /* type of format (printf, scanf, etc.) */ ! unsigned HOST_WIDE_INT format_num; /* number of format argument */ ! unsigned HOST_WIDE_INT first_arg_num; /* number of first arg (zero for varargs) */ ! } function_format_info; ! static bool decode_format_attr PARAMS ((tree, ! function_format_info *, int)); ! static enum format_type decode_format_type PARAMS ((const char *)); ! /* Handle a "format" attribute; arguments as in ! struct attribute_spec.handler. */ ! tree ! handle_format_attribute (node, name, args, flags, no_add_attrs) ! tree *node; ! tree name ATTRIBUTE_UNUSED; ! tree args; ! int flags; ! bool *no_add_attrs; { ! tree type = *node; ! function_format_info info; tree argument; ! unsigned HOST_WIDE_INT arg_num; ! if (!decode_format_attr (args, &info, 0)) { ! *no_add_attrs = true; ! return NULL_TREE; } /* If a parameter list is specified, verify that the format_num *************** decl_handle_format_attribute (decl, args *** 160,166 **** argument = TYPE_ARG_TYPES (type); if (argument) { ! for (arg_num = 1; argument != 0 && arg_num != format_num; ++arg_num, argument = TREE_CHAIN (argument)) ; --- 115,121 ---- argument = TYPE_ARG_TYPES (type); if (argument) { ! for (arg_num = 1; argument != 0 && arg_num != info.format_num; ++arg_num, argument = TREE_CHAIN (argument)) ; *************** decl_handle_format_attribute (decl, args *** 169,225 **** || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (argument))) != char_type_node)) { ! error ("format string arg not a string type"); ! return; } ! else if (first_arg_num != 0) { /* Verify that first_arg_num points to the last arg, the ... */ while (argument) arg_num++, argument = TREE_CHAIN (argument); ! if (arg_num != first_arg_num) { ! error ("args to be formatted is not '...'"); ! return; } } } ! if (format_type == strftime_format_type && first_arg_num != 0) { error ("strftime formats cannot format arguments"); ! return; } ! record_function_format (DECL_NAME (decl), DECL_ASSEMBLER_NAME (decl), ! format_type, format_num, first_arg_num); } ! /* Handle the format_arg attribute (with arguments ARGS) attached to ! the decl DECL. It is already verified that DECL is a decl and ! ARGS contains exactly one argument. */ ! ! void ! decl_handle_format_arg_attribute (decl, args) ! tree decl, args; { ! tree type = TREE_TYPE (decl); tree format_num_expr = TREE_VALUE (args); unsigned HOST_WIDE_INT format_num; ! unsigned int arg_num; tree argument; - if (TREE_CODE (decl) != FUNCTION_DECL) - { - error_with_decl (decl, - "argument format specified for non-function `%s'"); - return; - } - /* Strip any conversions from the first arg number and verify it is a constant. */ while (TREE_CODE (format_num_expr) == NOP_EXPR --- 124,179 ---- || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (argument))) != char_type_node)) { ! if (!(flags & (int) ATTR_FLAG_BUILT_IN)) ! error ("format string arg not a string type"); ! *no_add_attrs = true; ! return NULL_TREE; } ! else if (info.first_arg_num != 0) { /* Verify that first_arg_num points to the last arg, the ... */ while (argument) arg_num++, argument = TREE_CHAIN (argument); ! if (arg_num != info.first_arg_num) { ! if (!(flags & (int) ATTR_FLAG_BUILT_IN)) ! error ("args to be formatted is not '...'"); ! *no_add_attrs = true; ! return NULL_TREE; } } } ! if (info.format_type == strftime_format_type && info.first_arg_num != 0) { error ("strftime formats cannot format arguments"); ! *no_add_attrs = true; ! return NULL_TREE; } ! return NULL_TREE; } ! /* Handle a "format_arg" attribute; arguments as in ! struct attribute_spec.handler. */ ! tree ! handle_format_arg_attribute (node, name, args, flags, no_add_attrs) ! tree *node; ! tree name ATTRIBUTE_UNUSED; ! tree args; ! int flags; ! bool *no_add_attrs; { ! tree type = *node; tree format_num_expr = TREE_VALUE (args); unsigned HOST_WIDE_INT format_num; ! unsigned HOST_WIDE_INT arg_num; tree argument; /* Strip any conversions from the first arg number and verify it is a constant. */ while (TREE_CODE (format_num_expr) == NOP_EXPR *************** decl_handle_format_arg_attribute (decl, *** 231,237 **** || TREE_INT_CST_HIGH (format_num_expr) != 0) { error ("format string has invalid operand number"); ! return; } format_num = TREE_INT_CST_LOW (format_num_expr); --- 185,192 ---- || TREE_INT_CST_HIGH (format_num_expr) != 0) { error ("format string has invalid operand number"); ! *no_add_attrs = true; ! return NULL_TREE; } format_num = TREE_INT_CST_LOW (format_num_expr); *************** decl_handle_format_arg_attribute (decl, *** 251,447 **** || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (argument))) != char_type_node)) { ! error ("format string arg not a string type"); ! return; } } ! if (TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) != POINTER_TYPE ! || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (TREE_TYPE (decl)))) != char_type_node)) { ! error ("function does not return string type"); ! return; } ! record_international_format (DECL_NAME (decl), DECL_ASSEMBLER_NAME (decl), ! format_num); } - typedef struct function_format_info - { - struct function_format_info *next; /* next structure on the list */ - tree name; /* identifier such as "printf" */ - tree assembler_name; /* optional mangled identifier (for C++) */ - enum format_type format_type; /* type of format (printf, scanf, etc.) */ - int format_num; /* number of format argument */ - int first_arg_num; /* number of first arg (zero for varargs) */ - } function_format_info; - - static function_format_info *function_format_list = NULL; - - typedef struct international_format_info - { - struct international_format_info *next; /* next structure on the list */ - tree name; /* identifier such as "gettext" */ - tree assembler_name; /* optional mangled identifier (for C++) */ - int format_num; /* number of format argument */ - } international_format_info; ! static international_format_info *international_format_list = NULL; ! ! /* Initialize the table of functions to perform format checking on. ! The ISO C functions are always checked (whether is ! included or not), since it is common to call printf without ! including . There shouldn't be a problem with this, ! since ISO C reserves these function names whether you include the ! header file or not. In any case, the checking is harmless. With ! -ffreestanding, these default attributes are disabled, and must be ! specified manually if desired. ! ! Also initialize the name of function that modify the format string for ! internationalization purposes. */ ! void ! init_function_format_info () { ! if (flag_hosted) ! { ! /* Functions from ISO/IEC 9899:1990. */ ! record_function_format (get_identifier ("printf"), NULL_TREE, ! printf_format_type, 1, 2); ! record_function_format (get_identifier ("__builtin_printf"), NULL_TREE, ! printf_format_type, 1, 2); ! record_function_format (get_identifier ("fprintf"), NULL_TREE, ! printf_format_type, 2, 3); ! record_function_format (get_identifier ("__builtin_fprintf"), NULL_TREE, ! printf_format_type, 2, 3); ! record_function_format (get_identifier ("sprintf"), NULL_TREE, ! printf_format_type, 2, 3); ! record_function_format (get_identifier ("scanf"), NULL_TREE, ! scanf_format_type, 1, 2); ! record_function_format (get_identifier ("fscanf"), NULL_TREE, ! scanf_format_type, 2, 3); ! record_function_format (get_identifier ("sscanf"), NULL_TREE, ! scanf_format_type, 2, 3); ! record_function_format (get_identifier ("vprintf"), NULL_TREE, ! printf_format_type, 1, 0); ! record_function_format (get_identifier ("vfprintf"), NULL_TREE, ! printf_format_type, 2, 0); ! record_function_format (get_identifier ("vsprintf"), NULL_TREE, ! printf_format_type, 2, 0); ! record_function_format (get_identifier ("strftime"), NULL_TREE, ! strftime_format_type, 3, 0); ! } ! if (flag_hosted && flag_isoc99) { ! /* ISO C99 adds the snprintf and vscanf family functions. */ ! record_function_format (get_identifier ("snprintf"), NULL_TREE, ! printf_format_type, 3, 4); ! record_function_format (get_identifier ("vsnprintf"), NULL_TREE, ! printf_format_type, 3, 0); ! record_function_format (get_identifier ("vscanf"), NULL_TREE, ! scanf_format_type, 1, 0); ! record_function_format (get_identifier ("vfscanf"), NULL_TREE, ! scanf_format_type, 2, 0); ! record_function_format (get_identifier ("vsscanf"), NULL_TREE, ! scanf_format_type, 2, 0); } ! ! if (flag_hosted && flag_noniso_default_format_attributes) { ! /* Uniforum/GNU gettext functions, not in ISO C. */ ! record_international_format (get_identifier ("gettext"), NULL_TREE, 1); ! record_international_format (get_identifier ("dgettext"), NULL_TREE, 2); ! record_international_format (get_identifier ("dcgettext"), NULL_TREE, 2); ! /* X/Open strfmon function. */ ! record_function_format (get_identifier ("strfmon"), NULL_TREE, ! strfmon_format_type, 3, 4); ! } ! } ! ! /* Record information for argument format checking. FUNCTION_IDENT is ! the identifier node for the name of the function to check (its decl ! need not exist yet). ! FORMAT_TYPE specifies the type of format checking. FORMAT_NUM is the number ! of the argument which is the format control string (starting from 1). ! FIRST_ARG_NUM is the number of the first actual argument to check ! against the format string, or zero if no checking is not be done ! (e.g. for varargs such as vfprintf). */ ! ! static void ! record_function_format (name, assembler_name, format_type, ! format_num, first_arg_num) ! tree name; ! tree assembler_name; ! enum format_type format_type; ! int format_num; ! int first_arg_num; ! { ! function_format_info *info; ! ! /* Re-use existing structure if it's there. */ ! for (info = function_format_list; info; info = info->next) ! { ! if (info->name == name && info->assembler_name == assembler_name) ! break; ! } ! if (! info) ! { ! info = (function_format_info *) xmalloc (sizeof (function_format_info)); ! info->next = function_format_list; ! function_format_list = info; ! info->name = name; ! info->assembler_name = assembler_name; } ! info->format_type = format_type; ! info->format_num = format_num; ! info->first_arg_num = first_arg_num; ! } ! ! /* Record information for the names of function that modify the format ! argument to format functions. FUNCTION_IDENT is the identifier node for ! the name of the function (its decl need not exist yet) and FORMAT_NUM is ! the number of the argument which is the format control string (starting ! from 1). */ ! ! static void ! record_international_format (name, assembler_name, format_num) ! tree name; ! tree assembler_name; ! int format_num; ! { ! international_format_info *info; ! /* Re-use existing structure if it's there. */ ! for (info = international_format_list; info; info = info->next) { ! if (info->name == name && info->assembler_name == assembler_name) ! break; } ! if (! info) { ! info ! = (international_format_info *) ! xmalloc (sizeof (international_format_info)); ! info->next = international_format_list; ! international_format_list = info; ! ! info->name = name; ! info->assembler_name = assembler_name; } ! info->format_num = format_num; } - - - /* Check a call to a format function against a parameter list. */ --- 206,307 ---- || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (argument))) != char_type_node)) { ! if (!(flags & (int) ATTR_FLAG_BUILT_IN)) ! error ("format string arg not a string type"); ! *no_add_attrs = true; ! return NULL_TREE; } } ! if (TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE ! || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type))) != char_type_node)) { ! if (!(flags & (int) ATTR_FLAG_BUILT_IN)) ! error ("function does not return string type"); ! *no_add_attrs = true; ! return NULL_TREE; } ! return NULL_TREE; } ! /* Decode the arguments to a "format" attribute into a function_format_info ! structure. It is already known that the list is of the right length. ! If VALIDATED_P is true, then these attributes have already been validated ! and this function will abort if they are erroneous; if false, it ! will give an error message. Returns true if the attributes are ! successfully decoded, false otherwise. */ ! static bool ! decode_format_attr (args, info, validated_p) ! tree args; ! function_format_info *info; ! int validated_p; { ! tree format_type_id = TREE_VALUE (args); ! tree format_num_expr = TREE_VALUE (TREE_CHAIN (args)); ! tree first_arg_num_expr ! = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (args))); ! if (TREE_CODE (format_type_id) != IDENTIFIER_NODE) { ! if (validated_p) ! abort (); ! error ("unrecognized format specifier"); ! return false; } ! else { ! const char *p = IDENTIFIER_POINTER (format_type_id); ! info->format_type = decode_format_type (p); ! if (info->format_type == format_type_error) ! { ! if (validated_p) ! abort (); ! warning ("`%s' is an unrecognized format function type", p); ! return false; ! } } ! /* Strip any conversions from the string index and first arg number ! and verify they are constants. */ ! while (TREE_CODE (format_num_expr) == NOP_EXPR ! || TREE_CODE (format_num_expr) == CONVERT_EXPR ! || TREE_CODE (format_num_expr) == NON_LVALUE_EXPR) ! format_num_expr = TREE_OPERAND (format_num_expr, 0); ! while (TREE_CODE (first_arg_num_expr) == NOP_EXPR ! || TREE_CODE (first_arg_num_expr) == CONVERT_EXPR ! || TREE_CODE (first_arg_num_expr) == NON_LVALUE_EXPR) ! first_arg_num_expr = TREE_OPERAND (first_arg_num_expr, 0); ! if (TREE_CODE (format_num_expr) != INTEGER_CST ! || TREE_INT_CST_HIGH (format_num_expr) != 0 ! || TREE_CODE (first_arg_num_expr) != INTEGER_CST ! || TREE_INT_CST_HIGH (first_arg_num_expr) != 0) { ! if (validated_p) ! abort (); ! error ("format string has invalid operand number"); ! return false; } ! info->format_num = TREE_INT_CST_LOW (format_num_expr); ! info->first_arg_num = TREE_INT_CST_LOW (first_arg_num_expr); ! if (info->first_arg_num != 0 && info->first_arg_num <= info->format_num) { ! if (validated_p) ! abort (); ! error ("format string arg follows the args to be formatted"); ! return false; } ! return true; } /* Check a call to a format function against a parameter list. */ *************** enum format_std_version *** 474,480 **** /* The C standard version C++ is treated as equivalent to or inheriting from, for the purpose of format features supported. */ ! #define CPLUSPLUS_STD_VER STD_C89 /* The C standard version we are checking formats against when pedantic. */ #define C_STD_VER ((int)(c_language == clk_cplusplus \ ? CPLUSPLUS_STD_VER \ --- 334,340 ---- /* The C standard version C++ is treated as equivalent to or inheriting from, for the purpose of format features supported. */ ! #define CPLUSPLUS_STD_VER STD_C94 /* The C standard version we are checking formats against when pedantic. */ #define C_STD_VER ((int)(c_language == clk_cplusplus \ ? CPLUSPLUS_STD_VER \ *************** enum *** 514,520 **** /* Zero width is bad in this type of format (scanf). */ FMT_FLAG_ZERO_WIDTH_BAD = 32, /* Empty precision specification is OK in this type of format (printf). */ ! FMT_FLAG_EMPTY_PREC_OK = 64 /* Not included here: details of whether width or precision may occur (controlled by width_char and precision_char); details of whether '*' can be used for these (width_type and precision_type); details --- 374,383 ---- /* Zero width is bad in this type of format (scanf). */ FMT_FLAG_ZERO_WIDTH_BAD = 32, /* Empty precision specification is OK in this type of format (printf). */ ! FMT_FLAG_EMPTY_PREC_OK = 64, ! /* Gaps are allowed in the arguments with $ operand numbers if all ! arguments are pointers (scanf). */ ! FMT_FLAG_DOLLAR_GAP_POINTER_OK = 128 /* Not included here: details of whether width or precision may occur (controlled by width_char and precision_char); details of whether '*' can be used for these (width_type and precision_type); details *************** enum *** 527,545 **** typedef struct { /* Name of the single-character length modifier. */ ! const char *name; /* Index into a format_char_info.types array. */ ! enum format_lengths index; /* Standard version this length appears in. */ ! enum format_std_version std; /* Same, if the modifier can be repeated, or NULL if it can't. */ ! const char *double_name; ! enum format_lengths double_index; ! enum format_std_version double_std; } format_length_info; ! /* Structure desribing the combination of a conversion specifier (or a set of specifiers which act identically) and a length modifier. */ typedef struct { --- 390,408 ---- typedef struct { /* Name of the single-character length modifier. */ ! const char *const name; /* Index into a format_char_info.types array. */ ! const enum format_lengths index; /* Standard version this length appears in. */ ! const enum format_std_version std; /* Same, if the modifier can be repeated, or NULL if it can't. */ ! const char *const double_name; ! const enum format_lengths double_index; ! const enum format_std_version double_std; } format_length_info; ! /* Structure describing the combination of a conversion specifier (or a set of specifiers which act identically) and a length modifier. */ typedef struct { *************** typedef struct *** 560,581 **** #define NOLENGTHS { BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN } ! /* Structure desribing a format conversion specifier (or a set of specifiers which act identically), and the length modifiers used with it. */ typedef struct { ! const char *format_chars; ! int pointer_count; ! enum format_std_version std; /* Types accepted for each length modifier. */ ! format_type_detail types[FMT_LEN_MAX]; /* List of other modifier characters allowed with these specifiers. This lists flags, and additionally "w" for width, "p" for precision (right precision, for strfmon), "#" for left precision (strfmon), "a" for scanf "a" allocation extension (not applicable in C99 mode), "*" for scanf suppression, and "E" and "O" for those strftime modifiers. */ ! const char *flag_chars; /* List of additional flags describing these conversion specifiers. "c" for generic character pointers being allowed, "2" for strftime two digit year formats, "3" for strftime formats giving two digit --- 423,444 ---- #define NOLENGTHS { BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN } ! /* Structure describing a format conversion specifier (or a set of specifiers which act identically), and the length modifiers used with it. */ typedef struct { ! const char *const format_chars; ! const int pointer_count; ! const enum format_std_version std; /* Types accepted for each length modifier. */ ! const format_type_detail types[FMT_LEN_MAX]; /* List of other modifier characters allowed with these specifiers. This lists flags, and additionally "w" for width, "p" for precision (right precision, for strfmon), "#" for left precision (strfmon), "a" for scanf "a" allocation extension (not applicable in C99 mode), "*" for scanf suppression, and "E" and "O" for those strftime modifiers. */ ! const char *const flag_chars; /* List of additional flags describing these conversion specifiers. "c" for generic character pointers being allowed, "2" for strftime two digit year formats, "3" for strftime formats giving two digit *************** typedef struct *** 585,591 **** "R" if the argument is a pointer which is dereferenced and read from, "i" for printf integer formats where the '0' flag is ignored with precision, and "[" for the starting character of a scanf scanset. */ ! const char *flags2; } format_char_info; --- 448,454 ---- "R" if the argument is a pointer which is dereferenced and read from, "i" for printf integer formats where the '0' flag is ignored with precision, and "[" for the starting character of a scanf scanset. */ ! const char *const flags2; } format_char_info; *************** typedef struct *** 593,599 **** typedef struct { /* The flag character in question (0 for end of array). */ ! int flag_char; /* Zero if this entry describes the flag character in general, or a non-zero character that may be found in flags2 if it describes the flag when used with certain formats only. If the latter, only --- 456,462 ---- typedef struct { /* The flag character in question (0 for end of array). */ ! const int flag_char; /* Zero if this entry describes the flag character in general, or a non-zero character that may be found in flags2 if it describes the flag when used with certain formats only. If the latter, only *************** typedef struct *** 602,619 **** will be used, if non-NULL and the standard version is higher than the unpredicated one, for any pedantic warning. For example, 'o' for strftime formats (meaning 'O' is an extension over C99). */ ! int predicate; /* Nonzero if the next character after this flag in the format should be skipped ('=' in strfmon), zero otherwise. */ ! int skip_next_char; /* The name to use for this flag in diagnostic messages. For example, N_("`0' flag"), N_("field width"). */ ! const char *name; /* Long name for this flag in diagnostic messages; currently only used for "ISO C does not support ...". For example, N_("the `I' printf flag"). */ ! const char *long_name; /* The standard version in which it appeared. */ ! enum format_std_version std; } format_flag_spec; --- 465,482 ---- will be used, if non-NULL and the standard version is higher than the unpredicated one, for any pedantic warning. For example, 'o' for strftime formats (meaning 'O' is an extension over C99). */ ! const int predicate; /* Nonzero if the next character after this flag in the format should be skipped ('=' in strfmon), zero otherwise. */ ! const int skip_next_char; /* The name to use for this flag in diagnostic messages. For example, N_("`0' flag"), N_("field width"). */ ! const char *const name; /* Long name for this flag in diagnostic messages; currently only used for "ISO C does not support ...". For example, N_("the `I' printf flag"). */ ! const char *const long_name; /* The standard version in which it appeared. */ ! const enum format_std_version std; } format_flag_spec; *************** typedef struct *** 622,637 **** typedef struct { /* The first flag character in question (0 for end of array). */ ! int flag_char1; /* The second flag character. */ ! int flag_char2; /* Non-zero if the message should say that the first flag is ignored with the second, zero if the combination should simply be objected to. */ ! int ignored; /* Zero if this entry applies whenever this flag combination occurs, a non-zero character from flags2 if it only applies in some circumstances (e.g. 'i' for printf formats ignoring 0 with precision). */ ! int predicate; } format_flag_pair; --- 485,500 ---- typedef struct { /* The first flag character in question (0 for end of array). */ ! const int flag_char1; /* The second flag character. */ ! const int flag_char2; /* Non-zero if the message should say that the first flag is ignored with the second, zero if the combination should simply be objected to. */ ! const int ignored; /* Zero if this entry applies whenever this flag combination occurs, a non-zero character from flags2 if it only applies in some circumstances (e.g. 'i' for printf formats ignoring 0 with precision). */ ! const int predicate; } format_flag_pair; *************** typedef struct *** 640,682 **** { /* The name of this kind of format, for use in diagnostics. Also the name of the attribute (without preceding and following __). */ ! const char *name; /* Specifications of the length modifiers accepted; possibly NULL. */ ! const format_length_info *length_char_specs; /* Details of the conversion specification characters accepted. */ ! const format_char_info *conversion_specs; /* String listing the flag characters that are accepted. */ ! const char *flag_chars; /* String listing modifier characters (strftime) accepted. May be NULL. */ ! const char *modifier_chars; /* Details of the flag characters, including pseudo-flags. */ ! const format_flag_spec *flag_specs; /* Details of bad combinations of flags. */ ! const format_flag_pair *bad_flag_pairs; /* Flags applicable to this kind of format. */ ! int flags; /* Flag character to treat a width as, or 0 if width not used. */ ! int width_char; /* Flag character to treat a left precision (strfmon) as, or 0 if left precision not used. */ ! int left_precision_char; /* Flag character to treat a precision (for strfmon, right precision) as, or 0 if precision not used. */ ! int precision_char; /* If a flag character has the effect of suppressing the conversion of an argument ('*' in scanf), that flag character, otherwise 0. */ ! int suppression_char; /* Flag character to treat a length modifier as (ignored if length modifiers not used). Need not be placed in flag_chars for conversion specifiers, but is used to check for bad combinations such as length modifier with assignment suppression in scanf. */ ! int length_code_char; /* Pointer to type of argument expected if '*' is used for a width, or NULL if '*' not used for widths. */ ! tree *width_type; /* Pointer to type of argument expected if '*' is used for a precision, or NULL if '*' not used for precisions. */ ! tree *precision_type; } format_kind_info; --- 503,545 ---- { /* The name of this kind of format, for use in diagnostics. Also the name of the attribute (without preceding and following __). */ ! const char *const name; /* Specifications of the length modifiers accepted; possibly NULL. */ ! const format_length_info *const length_char_specs; /* Details of the conversion specification characters accepted. */ ! const format_char_info *const conversion_specs; /* String listing the flag characters that are accepted. */ ! const char *const flag_chars; /* String listing modifier characters (strftime) accepted. May be NULL. */ ! const char *const modifier_chars; /* Details of the flag characters, including pseudo-flags. */ ! const format_flag_spec *const flag_specs; /* Details of bad combinations of flags. */ ! const format_flag_pair *const bad_flag_pairs; /* Flags applicable to this kind of format. */ ! const int flags; /* Flag character to treat a width as, or 0 if width not used. */ ! const int width_char; /* Flag character to treat a left precision (strfmon) as, or 0 if left precision not used. */ ! const int left_precision_char; /* Flag character to treat a precision (for strfmon, right precision) as, or 0 if precision not used. */ ! const int precision_char; /* If a flag character has the effect of suppressing the conversion of an argument ('*' in scanf), that flag character, otherwise 0. */ ! const int suppression_char; /* Flag character to treat a length modifier as (ignored if length modifiers not used). Need not be placed in flag_chars for conversion specifiers, but is used to check for bad combinations such as length modifier with assignment suppression in scanf. */ ! const int length_code_char; /* Pointer to type of argument expected if '*' is used for a width, or NULL if '*' not used for widths. */ ! tree *const width_type; /* Pointer to type of argument expected if '*' is used for a precision, or NULL if '*' not used for precisions. */ ! tree *const precision_type; } format_kind_info; *************** static const format_flag_pair printf_fla *** 779,790 **** static const format_flag_spec scanf_flag_specs[] = { ! { '*', 0, 0, N_("assignment suppression"), N_("assignment suppression"), STD_C89 }, ! { 'a', 0, 0, N_("`a' flag"), N_("the `a' scanf flag"), STD_EXT }, ! { 'w', 0, 0, N_("field width"), N_("field width in scanf format"), STD_C89 }, ! { 'L', 0, 0, N_("length modifier"), N_("length modifier in scanf format"), STD_C89 }, ! { '\'', 0, 0, N_("`'' flag"), N_("the `'' scanf flag"), STD_EXT }, ! { 'I', 0, 0, N_("`I' flag"), N_("the `I' scanf flag"), STD_EXT }, { 0, 0, 0, NULL, NULL, 0 } }; --- 642,653 ---- static const format_flag_spec scanf_flag_specs[] = { ! { '*', 0, 0, N_("assignment suppression"), N_("the assignment suppression scanf feature"), STD_C89 }, ! { 'a', 0, 0, N_("`a' flag"), N_("the `a' scanf flag"), STD_EXT }, ! { 'w', 0, 0, N_("field width"), N_("field width in scanf format"), STD_C89 }, ! { 'L', 0, 0, N_("length modifier"), N_("length modifier in scanf format"), STD_C89 }, ! { '\'', 0, 0, N_("`'' flag"), N_("the `'' scanf flag"), STD_EXT }, ! { 'I', 0, 0, N_("`I' flag"), N_("the `I' scanf flag"), STD_EXT }, { 0, 0, 0, NULL, NULL, 0 } }; *************** static const format_kind_info format_typ *** 988,994 **** }, { "scanf", scanf_length_specs, scan_char_table, "*'I", NULL, scanf_flag_specs, scanf_flag_pairs, ! FMT_FLAG_ARG_CONVERT|FMT_FLAG_SCANF_A_KLUDGE|FMT_FLAG_USE_DOLLAR|FMT_FLAG_ZERO_WIDTH_BAD, 'w', 0, 0, '*', 'L', NULL, NULL }, --- 851,857 ---- }, { "scanf", scanf_length_specs, scan_char_table, "*'I", NULL, scanf_flag_specs, scanf_flag_pairs, ! FMT_FLAG_ARG_CONVERT|FMT_FLAG_SCANF_A_KLUDGE|FMT_FLAG_USE_DOLLAR|FMT_FLAG_ZERO_WIDTH_BAD|FMT_FLAG_DOLLAR_GAP_POINTER_OK, 'w', 0, 0, '*', 'L', NULL, NULL }, *************** typedef struct *** 1035,1044 **** static void check_format_info PARAMS ((int *, function_format_info *, tree)); static void check_format_info_recurse PARAMS ((int *, format_check_results *, function_format_info *, tree, ! tree, int)); static void check_format_info_main PARAMS ((int *, format_check_results *, function_format_info *, ! const char *, int, tree, int)); static void status_warning PARAMS ((int *, const char *, ...)) ATTRIBUTE_PRINTF_2; --- 898,908 ---- static void check_format_info PARAMS ((int *, function_format_info *, tree)); static void check_format_info_recurse PARAMS ((int *, format_check_results *, function_format_info *, tree, ! tree, unsigned HOST_WIDE_INT)); static void check_format_info_main PARAMS ((int *, format_check_results *, function_format_info *, ! const char *, int, tree, ! unsigned HOST_WIDE_INT)); static void status_warning PARAMS ((int *, const char *, ...)) ATTRIBUTE_PRINTF_2; *************** static void init_dollar_format_checking *** 1046,1052 **** static int maybe_read_dollar_number PARAMS ((int *, const char **, int, tree, tree *, const format_kind_info *)); ! static void finish_dollar_format_checking PARAMS ((int *, format_check_results *)); static const format_flag_spec *get_flag_spec PARAMS ((const format_flag_spec *, int, const char *)); --- 910,916 ---- static int maybe_read_dollar_number PARAMS ((int *, const char **, int, tree, tree *, const format_kind_info *)); ! static void finish_dollar_format_checking PARAMS ((int *, format_check_results *, int)); static const format_flag_spec *get_flag_spec PARAMS ((const format_flag_spec *, int, const char *)); *************** decode_format_type (s) *** 1079,1121 **** /* Check the argument list of a call to printf, scanf, etc. ! NAME is the function identifier. ! ASSEMBLER_NAME is the function's assembler identifier. ! (Either NAME or ASSEMBLER_NAME, but not both, may be NULL_TREE.) PARAMS is the list of argument values. Also, if -Wmissing-format-attribute, warn for calls to vprintf or vscanf in functions with no such format attribute themselves. */ void ! check_function_format (status, name, assembler_name, params) int *status; ! tree name; ! tree assembler_name; tree params; { ! function_format_info *info; ! /* See if this function is a format function. */ ! for (info = function_format_list; info; info = info->next) { ! if (info->assembler_name ! ? (info->assembler_name == assembler_name) ! : (info->name == name)) { /* Yup; check it. */ ! check_format_info (status, info, params); ! if (warn_missing_format_attribute && info->first_arg_num == 0 ! && (format_types[info->format_type].flags & (int) FMT_FLAG_ARG_CONVERT)) { ! function_format_info *info2; ! for (info2 = function_format_list; info2; info2 = info2->next) ! if ((info2->assembler_name ! ? (info2->assembler_name == DECL_ASSEMBLER_NAME (current_function_decl)) ! : (info2->name == DECL_NAME (current_function_decl))) ! && info2->format_type == info->format_type) break; ! if (info2 == NULL) { /* Check if the current function has a parameter to which the format attribute could be attached; if not, it --- 943,984 ---- /* Check the argument list of a call to printf, scanf, etc. ! ATTRS are the attributes on the function type. PARAMS is the list of argument values. Also, if -Wmissing-format-attribute, warn for calls to vprintf or vscanf in functions with no such format attribute themselves. */ void ! check_function_format (status, attrs, params) int *status; ! tree attrs; tree params; { ! tree a; ! /* See if this function has any format attributes. */ ! for (a = attrs; a; a = TREE_CHAIN (a)) { ! if (is_attribute_p ("format", TREE_PURPOSE (a))) { /* Yup; check it. */ ! function_format_info info; ! decode_format_attr (TREE_VALUE (a), &info, 1); ! check_format_info (status, &info, params); ! if (warn_missing_format_attribute && info.first_arg_num == 0 ! && (format_types[info.format_type].flags & (int) FMT_FLAG_ARG_CONVERT)) { ! tree c; ! for (c = TYPE_ATTRIBUTES (TREE_TYPE (current_function_decl)); ! c; ! c = TREE_CHAIN (c)) ! if (is_attribute_p ("format", TREE_PURPOSE (c)) ! && (decode_format_type (IDENTIFIER_POINTER ! (TREE_VALUE (TREE_VALUE (c)))) ! == info.format_type)) break; ! if (c == NULL_TREE) { /* Check if the current function has a parameter to which the format attribute could be attached; if not, it *************** check_function_format (status, name, ass *** 1133,1142 **** } if (args != 0) warning ("function might be possible candidate for `%s' format attribute", ! format_types[info->format_type].name); } } - break; } } } --- 996,1004 ---- } if (args != 0) warning ("function might be possible candidate for `%s' format attribute", ! format_types[info.format_type].name); } } } } } *************** check_function_format (status, name, ass *** 1149,1167 **** static void status_warning VPARAMS ((int *status, const char *msgid, ...)) { - #ifndef ANSI_PROTOTYPES - int *status; - const char *msgid; - #endif - va_list ap; diagnostic_context dc; ! VA_START (ap, msgid); ! ! #ifndef ANSI_PROTOTYPES ! status = va_arg (ap, int *); ! msgid = va_arg (ap, const char *); ! #endif if (status) *status = 1; --- 1011,1021 ---- static void status_warning VPARAMS ((int *status, const char *msgid, ...)) { diagnostic_context dc; ! VA_OPEN (ap, msgid); ! VA_FIXEDARG (ap, int *, status); ! VA_FIXEDARG (ap, const char *, msgid); if (status) *status = 1; *************** status_warning VPARAMS ((int *status, co *** 1173,1183 **** report_diagnostic (&dc); } ! va_end (ap); } /* Variables used by the checking of $ operand number formats. */ static char *dollar_arguments_used = NULL; static int dollar_arguments_alloc = 0; static int dollar_arguments_count; static int dollar_first_arg_num; --- 1027,1038 ---- report_diagnostic (&dc); } ! VA_CLOSE (ap); } /* Variables used by the checking of $ operand number formats. */ static char *dollar_arguments_used = NULL; + static char *dollar_arguments_pointer_p = NULL; static int dollar_arguments_alloc = 0; static int dollar_arguments_count; static int dollar_first_arg_num; *************** init_dollar_format_checking (first_arg_n *** 1195,1200 **** --- 1050,1057 ---- int first_arg_num; tree params; { + tree oparams = params; + dollar_first_arg_num = first_arg_num; dollar_arguments_count = 0; dollar_max_arg_used = 0; *************** init_dollar_format_checking (first_arg_n *** 1211,1221 **** { if (dollar_arguments_used) free (dollar_arguments_used); dollar_arguments_alloc = dollar_arguments_count; dollar_arguments_used = xmalloc (dollar_arguments_alloc); } if (dollar_arguments_alloc) ! memset (dollar_arguments_used, 0, dollar_arguments_alloc); } --- 1068,1095 ---- { if (dollar_arguments_used) free (dollar_arguments_used); + if (dollar_arguments_pointer_p) + free (dollar_arguments_pointer_p); dollar_arguments_alloc = dollar_arguments_count; dollar_arguments_used = xmalloc (dollar_arguments_alloc); + dollar_arguments_pointer_p = xmalloc (dollar_arguments_alloc); } if (dollar_arguments_alloc) ! { ! memset (dollar_arguments_used, 0, dollar_arguments_alloc); ! if (first_arg_num > 0) ! { ! int i = 0; ! params = oparams; ! while (params) ! { ! dollar_arguments_pointer_p[i] = (TREE_CODE (TREE_TYPE (TREE_VALUE (params))) ! == POINTER_TYPE); ! params = TREE_CHAIN (params); ! i++; ! } ! } ! } } *************** maybe_read_dollar_number (status, format *** 1241,1247 **** int argnum; int overflow_flag; const char *fcp = *format; ! if (*fcp < '0' || *fcp > '9') { if (dollar_needed) { --- 1115,1121 ---- int argnum; int overflow_flag; const char *fcp = *format; ! if (! ISDIGIT (*fcp)) { if (dollar_needed) { *************** maybe_read_dollar_number (status, format *** 1253,1259 **** } argnum = 0; overflow_flag = 0; ! while (*fcp >= '0' && *fcp <= '9') { int nargnum; nargnum = 10 * argnum + (*fcp - '0'); --- 1127,1133 ---- } argnum = 0; overflow_flag = 0; ! while (ISDIGIT (*fcp)) { int nargnum; nargnum = 10 * argnum + (*fcp - '0'); *************** maybe_read_dollar_number (status, format *** 1295,1300 **** --- 1169,1176 ---- int nalloc; nalloc = 2 * dollar_arguments_alloc + 16; dollar_arguments_used = xrealloc (dollar_arguments_used, nalloc); + dollar_arguments_pointer_p = xrealloc (dollar_arguments_pointer_p, + nalloc); memset (dollar_arguments_used + dollar_arguments_alloc, 0, nalloc - dollar_arguments_alloc); dollar_arguments_alloc = nalloc; *************** maybe_read_dollar_number (status, format *** 1335,1355 **** and for unused operands at the end of the format (if we know how many arguments the format had, so not for vprintf). If there were operand numbers out of range on a non-vprintf-style format, we won't have reached ! here. */ static void ! finish_dollar_format_checking (status, res) int *status; format_check_results *res; { int i; for (i = 0; i < dollar_max_arg_used; i++) { if (!dollar_arguments_used[i]) ! status_warning (status, "format argument %d unused before used argument %d in $-style format", ! i + 1, dollar_max_arg_used); } ! if (dollar_first_arg_num && dollar_max_arg_used < dollar_arguments_count) { res->number_other--; res->number_dollar_extra_args++; --- 1211,1242 ---- and for unused operands at the end of the format (if we know how many arguments the format had, so not for vprintf). If there were operand numbers out of range on a non-vprintf-style format, we won't have reached ! here. If POINTER_GAP_OK, unused arguments are OK if all arguments are ! pointers. */ static void ! finish_dollar_format_checking (status, res, pointer_gap_ok) int *status; format_check_results *res; + int pointer_gap_ok; { int i; + bool found_pointer_gap = false; for (i = 0; i < dollar_max_arg_used; i++) { if (!dollar_arguments_used[i]) ! { ! if (pointer_gap_ok && (dollar_first_arg_num == 0 ! || dollar_arguments_pointer_p[i])) ! found_pointer_gap = true; ! else ! status_warning (status, "format argument %d unused before used argument %d in $-style format", ! i + 1, dollar_max_arg_used); ! } } ! if (found_pointer_gap ! || (dollar_first_arg_num ! && dollar_max_arg_used < dollar_arguments_count)) { res->number_other--; res->number_dollar_extra_args++; *************** check_format_info (status, info, params) *** 1402,1408 **** function_format_info *info; tree params; { ! int arg_num; tree format_tree; format_check_results res; /* Skip to format argument. If the argument isn't available, there's --- 1289,1295 ---- function_format_info *info; tree params; { ! unsigned HOST_WIDE_INT arg_num; tree format_tree; format_check_results res; /* Skip to format argument. If the argument isn't available, there's *************** check_format_info_recurse (status, res, *** 1497,1505 **** function_format_info *info; tree format_tree; tree params; ! int arg_num; { int format_length; const char *format_chars; tree array_size = 0; tree array_init; --- 1384,1393 ---- function_format_info *info; tree format_tree; tree params; ! unsigned HOST_WIDE_INT arg_num; { int format_length; + HOST_WIDE_INT offset; const char *format_chars; tree array_size = 0; tree array_init; *************** check_format_info_recurse (status, res, *** 1513,1552 **** return; } ! if (TREE_CODE (format_tree) == CALL_EXPR ! && TREE_CODE (TREE_OPERAND (format_tree, 0)) == ADDR_EXPR ! && (TREE_CODE (TREE_OPERAND (TREE_OPERAND (format_tree, 0), 0)) ! == FUNCTION_DECL)) { ! tree function = TREE_OPERAND (TREE_OPERAND (format_tree, 0), 0); /* See if this is a call to a known internationalization function ! that modifies the format arg. */ ! international_format_info *iinfo; ! for (iinfo = international_format_list; iinfo; iinfo = iinfo->next) ! if (iinfo->assembler_name ! ? (iinfo->assembler_name == DECL_ASSEMBLER_NAME (function)) ! : (iinfo->name == DECL_NAME (function))) { tree inner_args; int i; for (inner_args = TREE_OPERAND (format_tree, 1), i = 1; inner_args != 0; inner_args = TREE_CHAIN (inner_args), i++) ! if (i == iinfo->format_num) { - /* FIXME: with Marc Espie's __attribute__((nonnull)) - patch in GCC, we will have chained attributes, - and be able to handle functions like ngettext - with multiple format_arg attributes properly. */ check_format_info_recurse (status, res, info, TREE_VALUE (inner_args), params, arg_num); ! return; } } } if (TREE_CODE (format_tree) == COND_EXPR) --- 1401,1458 ---- return; } ! if (TREE_CODE (format_tree) == CALL_EXPR) { ! tree type = TREE_TYPE (TREE_TYPE (TREE_OPERAND (format_tree, 0))); ! tree attrs; ! bool found_format_arg = false; /* See if this is a call to a known internationalization function ! that modifies the format arg. Such a function may have multiple ! format_arg attributes (for example, ngettext). */ ! for (attrs = TYPE_ATTRIBUTES (type); ! attrs; ! attrs = TREE_CHAIN (attrs)) ! if (is_attribute_p ("format_arg", TREE_PURPOSE (attrs))) { tree inner_args; + tree format_num_expr; + int format_num; int i; + /* Extract the argument number, which was previously checked + to be valid. */ + format_num_expr = TREE_VALUE (TREE_VALUE (attrs)); + while (TREE_CODE (format_num_expr) == NOP_EXPR + || TREE_CODE (format_num_expr) == CONVERT_EXPR + || TREE_CODE (format_num_expr) == NON_LVALUE_EXPR) + format_num_expr = TREE_OPERAND (format_num_expr, 0); + + if (TREE_CODE (format_num_expr) != INTEGER_CST + || TREE_INT_CST_HIGH (format_num_expr) != 0) + abort (); + + format_num = TREE_INT_CST_LOW (format_num_expr); + for (inner_args = TREE_OPERAND (format_tree, 1), i = 1; inner_args != 0; inner_args = TREE_CHAIN (inner_args), i++) ! if (i == format_num) { check_format_info_recurse (status, res, info, TREE_VALUE (inner_args), params, arg_num); ! found_format_arg = true; ! break; } } + + /* If we found a format_arg attribute and did a recursive check, + we are done with checking this format string. Otherwise, we + continue and this will count as a non-literal format string. */ + if (found_format_arg) + return; } if (TREE_CODE (format_tree) == COND_EXPR) *************** check_format_info_recurse (status, res, *** 1589,1594 **** --- 1495,1528 ---- return; } + offset = 0; + if (TREE_CODE (format_tree) == PLUS_EXPR) + { + tree arg0, arg1; + + arg0 = TREE_OPERAND (format_tree, 0); + arg1 = TREE_OPERAND (format_tree, 1); + STRIP_NOPS (arg0); + STRIP_NOPS (arg1); + if (TREE_CODE (arg1) == INTEGER_CST) + format_tree = arg0; + else if (TREE_CODE (arg0) == INTEGER_CST) + { + format_tree = arg1; + arg1 = arg0; + } + else + { + res->number_non_literal++; + return; + } + if (!host_integerp (arg1, 0) + || (offset = tree_low_cst (arg1, 0)) < 0) + { + res->number_non_literal++; + return; + } + } if (TREE_CODE (format_tree) != ADDR_EXPR) { res->number_non_literal++; *************** check_format_info_recurse (status, res, *** 1632,1637 **** --- 1566,1581 ---- format_length = array_size_value; } } + if (offset) + { + if (offset >= format_length) + { + res->number_non_literal++; + return; + } + format_chars += offset; + format_length -= offset; + } if (format_length < 1) { res->number_unterminated++; *************** check_format_info_main (status, res, inf *** 1681,1687 **** const char *format_chars; int format_length; tree params; ! int arg_num; { const char *orig_format_chars = format_chars; tree first_fillin_param = params; --- 1625,1631 ---- const char *format_chars; int format_length; tree params; ! unsigned HOST_WIDE_INT arg_num; { const char *orig_format_chars = format_chars; tree first_fillin_param = params; *************** check_format_info_main (status, res, inf *** 1730,1736 **** res->number_extra_args++; } if (has_operand_number > 0) ! finish_dollar_format_checking (status, res); return; } if (*format_chars++ != '%') --- 1674,1680 ---- res->number_extra_args++; } if (has_operand_number > 0) ! finish_dollar_format_checking (status, res, fki->flags & (int) FMT_FLAG_DOLLAR_GAP_POINTER_OK); return; } if (*format_chars++ != '%') *************** check_format_types (status, types) *** 2453,2460 **** continue; /* Now we have a type mismatch. */ { ! register const char *this; ! register const char *that; this = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (wanted_type))); that = 0; --- 2397,2404 ---- continue; /* Now we have a type mismatch. */ { ! const char *this; ! const char *that; this = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (wanted_type))); that = 0; *************** check_format_types (status, types) *** 2476,2484 **** if (that == 0) { if (TREE_CODE (orig_cur_type) == POINTER_TYPE) ! that = "pointer"; else ! that = "different type"; } /* Make the warning better in case of mismatch of int vs long. */ --- 2420,2428 ---- if (that == 0) { if (TREE_CODE (orig_cur_type) == POINTER_TYPE) ! that = _("pointer"); else ! that = _("different type"); } /* Make the warning better in case of mismatch of int vs long. */ diff -Nrc3pad gcc-3.0.4/gcc/c-lang.c gcc-3.1/gcc/c-lang.c *** gcc-3.0.4/gcc/c-lang.c Tue Jun 5 07:46:58 2001 --- gcc-3.1/gcc/c-lang.c Tue Mar 19 07:56:35 2002 *************** *** 2,115 **** Copyright (C) 1991, 1995, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" #include "system.h" #include "tree.h" - #include "function.h" - #include "input.h" - #include "toplev.h" - #include "diagnostic.h" - #include "output.h" - #include "flags.h" - #include "ggc.h" - #include "rtl.h" - #include "expr.h" #include "c-tree.h" ! #include "c-lex.h" ! #include "cpplib.h" ! static int c_tree_printer PARAMS ((output_buffer *)); ! static int c_missing_noreturn_ok_p PARAMS ((tree)); ! static void c_init PARAMS ((void)); static void c_init_options PARAMS ((void)); static void c_post_options PARAMS ((void)); /* Each front end provides its own. */ ! struct lang_hooks lang_hooks = {c_init, ! NULL, /* c_finish */ ! c_init_options, ! c_decode_option, ! c_post_options}; /* Post-switch processing. */ static void c_post_options () { ! cpp_post_options (parse_in); } static void c_init_options () { ! parse_in = cpp_create_reader (CLK_GNUC89); ! ! /* Mark as "unspecified". */ ! flag_bounds_check = -1; ! } ! ! static void ! c_init () ! { ! c_common_lang_init (); ! ! /* If still unspecified, make it match pedantic && -std=c99. */ ! if (mesg_implicit_function_declaration < 0) ! { ! if (pedantic && flag_isoc99) ! mesg_implicit_function_declaration = flag_pedantic_errors ? 2 : 1; ! else ! mesg_implicit_function_declaration = 0; ! } ! ! save_lang_status = &push_c_function_context; ! restore_lang_status = &pop_c_function_context; ! mark_lang_status = &mark_c_function_context; ! lang_expand_expr = &c_expand_expr; ! lang_safe_from_p = &c_safe_from_p; ! lang_printer = &c_tree_printer; ! lang_expand_decl_stmt = &c_expand_decl_stmt; ! lang_missing_noreturn_ok_p = &c_missing_noreturn_ok_p; ! ! c_parse_init (); ! } ! ! const char * ! lang_identify () ! { ! return "c"; ! } ! ! void ! print_lang_statistics () ! { } ! /* used by print-tree.c */ ! ! void ! lang_print_xnode (file, node, indent) ! FILE *file ATTRIBUTE_UNUSED; ! tree node ATTRIBUTE_UNUSED; ! int indent ATTRIBUTE_UNUSED; { } /* Used by c-lex.c, but only for objc. */ --- 2,97 ---- Copyright (C) 1991, 1995, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" #include "system.h" #include "tree.h" #include "c-tree.h" ! #include "langhooks.h" ! #include "langhooks-def.h" ! static const char *c_init PARAMS ((const char *)); static void c_init_options PARAMS ((void)); static void c_post_options PARAMS ((void)); + /* ### When changing hooks, consider if ObjC needs changing too!! ### */ + + #undef LANG_HOOKS_NAME + #define LANG_HOOKS_NAME "GNU C" + #undef LANG_HOOKS_INIT + #define LANG_HOOKS_INIT c_init + #undef LANG_HOOKS_FINISH + #define LANG_HOOKS_FINISH c_common_finish + #undef LANG_HOOKS_INIT_OPTIONS + #define LANG_HOOKS_INIT_OPTIONS c_init_options + #undef LANG_HOOKS_DECODE_OPTION + #define LANG_HOOKS_DECODE_OPTION c_decode_option + #undef LANG_HOOKS_POST_OPTIONS + #define LANG_HOOKS_POST_OPTIONS c_post_options + #undef LANG_HOOKS_GET_ALIAS_SET + #define LANG_HOOKS_GET_ALIAS_SET c_common_get_alias_set + #undef LANG_HOOKS_SAFE_FROM_P + #define LANG_HOOKS_SAFE_FROM_P c_safe_from_p + #undef LANG_HOOKS_STATICP + #define LANG_HOOKS_STATICP c_staticp + #undef LANG_HOOKS_PRINT_IDENTIFIER + #define LANG_HOOKS_PRINT_IDENTIFIER c_print_identifier + #undef LANG_HOOKS_SET_YYDEBUG + #define LANG_HOOKS_SET_YYDEBUG c_set_yydebug + + #undef LANG_HOOKS_TREE_INLINING_CANNOT_INLINE_TREE_FN + #define LANG_HOOKS_TREE_INLINING_CANNOT_INLINE_TREE_FN \ + c_cannot_inline_tree_fn + #undef LANG_HOOKS_TREE_INLINING_DISREGARD_INLINE_LIMITS + #define LANG_HOOKS_TREE_INLINING_DISREGARD_INLINE_LIMITS \ + c_disregard_inline_limits + #undef LANG_HOOKS_TREE_INLINING_ANON_AGGR_TYPE_P + #define LANG_HOOKS_TREE_INLINING_ANON_AGGR_TYPE_P \ + anon_aggr_type_p + #undef LANG_HOOKS_TREE_INLINING_CONVERT_PARM_FOR_INLINING + #define LANG_HOOKS_TREE_INLINING_CONVERT_PARM_FOR_INLINING \ + c_convert_parm_for_inlining + + /* ### When changing hooks, consider if ObjC needs changing too!! ### */ + /* Each front end provides its own. */ ! const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER; /* Post-switch processing. */ static void c_post_options () { ! c_common_post_options (); } static void c_init_options () { ! c_common_init_options (clk_c); } ! static const char * ! c_init (filename) ! const char *filename; { + return c_objc_common_init (filename); } /* Used by c-lex.c, but only for objc. */ *************** maybe_objc_comptypes (lhs, rhs, reflexiv *** 144,156 **** } tree - maybe_objc_method_name (decl) - tree decl ATTRIBUTE_UNUSED; - { - return 0; - } - - tree maybe_building_objc_message_expr () { return 0; --- 126,131 ---- *************** lookup_objc_ivar (id) *** 171,313 **** return 0; } - #if !defined(ASM_OUTPUT_CONSTRUCTOR) || !defined(ASM_OUTPUT_DESTRUCTOR) - extern tree static_ctors; - extern tree static_dtors; - - static tree start_cdtor PARAMS ((int)); - static void finish_cdtor PARAMS ((tree)); - - static tree - start_cdtor (method_type) - int method_type; - { - tree fnname = get_file_function_name (method_type); - tree void_list_node_1 = build_tree_list (NULL_TREE, void_type_node); - tree body; - - start_function (void_list_node_1, - build_nt (CALL_EXPR, fnname, - tree_cons (NULL_TREE, NULL_TREE, void_list_node_1), - NULL_TREE), - NULL_TREE, NULL_TREE); - store_parm_decls (); - - current_function_cannot_inline - = "static constructors and destructors cannot be inlined"; - - body = c_begin_compound_stmt (); - - pushlevel (0); - clear_last_expr (); - add_scope_stmt (/*begin_p=*/1, /*partial_p=*/0); - - return body; - } - - static void - finish_cdtor (body) - tree body; - { - tree scope; - tree block; - - scope = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0); - block = poplevel (0, 0, 0); - SCOPE_STMT_BLOCK (TREE_PURPOSE (scope)) = block; - SCOPE_STMT_BLOCK (TREE_VALUE (scope)) = block; - - RECHAIN_STMTS (body, COMPOUND_BODY (body)); - - finish_function (0); - } - #endif - - /* Called at end of parsing, but before end-of-file processing. */ - void finish_file () { ! #ifndef ASM_OUTPUT_CONSTRUCTOR ! if (static_ctors) ! { ! tree body = start_cdtor ('I'); ! ! for (; static_ctors; static_ctors = TREE_CHAIN (static_ctors)) ! c_expand_expr_stmt (build_function_call (TREE_VALUE (static_ctors), ! NULL_TREE)); ! ! finish_cdtor (body); ! } ! #endif ! #ifndef ASM_OUTPUT_DESTRUCTOR ! if (static_dtors) ! { ! tree body = start_cdtor ('D'); ! ! for (; static_dtors; static_dtors = TREE_CHAIN (static_dtors)) ! c_expand_expr_stmt (build_function_call (TREE_VALUE (static_dtors), ! NULL_TREE)); ! ! finish_cdtor (body); ! } ! #endif ! ! if (back_end_hook) ! (*back_end_hook) (getdecls ()); ! ! { ! int flags; ! FILE *stream = dump_begin (TDI_all, &flags); ! ! if (stream) ! { ! dump_node (getdecls (), flags & ~TDF_SLIM, stream); ! dump_end (TDI_all, stream); ! } ! } ! } ! ! /* Called during diagnostic message formatting process to print a ! source-level entity onto BUFFER. The meaning of the format specifiers ! is as follows: ! %D: a general decl, ! %F: a function declaration, ! %T: a type. ! ! These format specifiers form a subset of the format specifiers set used ! by the C++ front-end. ! Please notice when called, the `%' part was already skipped by the ! diagnostic machinery. */ ! static int ! c_tree_printer (buffer) ! output_buffer *buffer; ! { ! tree t = va_arg (output_buffer_format_args (buffer), tree); ! ! switch (*output_buffer_text_cursor (buffer)) ! { ! case 'D': ! case 'F': ! case 'T': ! { ! const char *n = DECL_NAME (t) ! ? (*decl_printable_name) (t, 2) ! : "({anonymous})"; ! output_add_string (buffer, n); ! } ! return 1; ! ! default: ! return 0; ! } ! } ! ! static int ! c_missing_noreturn_ok_p (decl) ! tree decl; ! { ! /* A missing noreturn is not ok for freestanding implementations and ! ok for the `main' function in hosted implementations. */ ! return flag_hosted && MAIN_NAME_P (DECL_ASSEMBLER_NAME (decl)); } --- 146,153 ---- return 0; } void finish_file () { ! c_objc_common_finish_file (); } diff -Nrc3pad gcc-3.0.4/gcc/c-lex.c gcc-3.1/gcc/c-lex.c *** gcc-3.0.4/gcc/c-lex.c Tue May 22 11:08:30 2001 --- gcc-3.1/gcc/c-lex.c Mon Apr 22 22:26:05 2002 *************** *** 2,30 **** Copyright (C) 1987, 1988, 1989, 1992, 1994, 1995, 1996, 1997 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" #include "system.h" #include "rtl.h" - #include "expr.h" #include "tree.h" #include "input.h" #include "output.h" #include "c-lex.h" --- 2,30 ---- Copyright (C) 1987, 1988, 1989, 1992, 1994, 1995, 1996, 1997 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" #include "system.h" #include "rtl.h" #include "tree.h" + #include "expr.h" #include "input.h" #include "output.h" #include "c-lex.h" *************** Boston, MA 02111-1307, USA. */ *** 37,42 **** --- 37,43 ---- #include "intl.h" #include "tm_p.h" #include "splay-tree.h" + #include "debug.h" /* MULTIBYTE_CHARS support only works for native compilers. ??? Ideally what we want is to model widechar support after *************** Boston, MA 02111-1307, USA. */ *** 53,60 **** #define GET_ENVIRONMENT(ENV_VALUE,ENV_NAME) ((ENV_VALUE) = getenv (ENV_NAME)) #endif ! /* The input filename as understood by CPP, where "" represents stdin. */ ! static const char *cpp_filename; /* We may keep statistics about how long which files took to compile. */ static int header_time, body_time; --- 54,64 ---- #define GET_ENVIRONMENT(ENV_VALUE,ENV_NAME) ((ENV_VALUE) = getenv (ENV_NAME)) #endif ! /* The current line map. */ ! static const struct line_map *map; ! ! /* The line used to refresh the lineno global variable after each token. */ ! static unsigned int src_lineno; /* We may keep statistics about how long which files took to compile. */ static int header_time, body_time; *************** extern FILE *asm_out_file; *** 72,99 **** /* Number of bytes in a wide character. */ #define WCHAR_BYTES (WCHAR_TYPE_SIZE / BITS_PER_UNIT) ! int indent_level; /* Number of { minus number of }. */ int pending_lang_change; /* If we need to switch languages - C++ only */ int c_header_level; /* depth in C headers - C++ only */ /* Nonzero tells yylex to ignore \ in string constants. */ static int ignore_escape_flag; - static const char *readescape PARAMS ((const char *, const char *, - unsigned int *)); - static const char *read_ucs PARAMS ((const char *, const char *, - unsigned int *, int)); static void parse_float PARAMS ((PTR)); static tree lex_number PARAMS ((const char *, unsigned int)); ! static tree lex_string PARAMS ((const char *, unsigned int, int)); ! static tree lex_charconst PARAMS ((const char *, unsigned int, int)); static void update_header_times PARAMS ((const char *)); static int dump_one_header PARAMS ((splay_tree_node, void *)); ! static void cb_ident PARAMS ((cpp_reader *, const cpp_string *)); ! static void cb_file_change PARAMS ((cpp_reader *, const cpp_file_change *)); ! static void cb_def_pragma PARAMS ((cpp_reader *)); ! static void cb_define PARAMS ((cpp_reader *, cpp_hashnode *)); ! static void cb_undef PARAMS ((cpp_reader *, cpp_hashnode *)); const char * init_c_lex (filename) --- 76,104 ---- /* Number of bytes in a wide character. */ #define WCHAR_BYTES (WCHAR_TYPE_SIZE / BITS_PER_UNIT) ! int indent_level; /* Number of { minus number of }. */ int pending_lang_change; /* If we need to switch languages - C++ only */ int c_header_level; /* depth in C headers - C++ only */ /* Nonzero tells yylex to ignore \ in string constants. */ static int ignore_escape_flag; static void parse_float PARAMS ((PTR)); static tree lex_number PARAMS ((const char *, unsigned int)); ! static tree lex_string PARAMS ((const unsigned char *, unsigned int, ! int)); ! static tree lex_charconst PARAMS ((const cpp_token *)); static void update_header_times PARAMS ((const char *)); static int dump_one_header PARAMS ((splay_tree_node, void *)); ! static void cb_line_change PARAMS ((cpp_reader *, const cpp_token *, int)); ! static void cb_ident PARAMS ((cpp_reader *, unsigned int, ! const cpp_string *)); ! static void cb_file_change PARAMS ((cpp_reader *, const struct line_map *)); ! static void cb_def_pragma PARAMS ((cpp_reader *, unsigned int)); ! static void cb_define PARAMS ((cpp_reader *, unsigned int, ! cpp_hashnode *)); ! static void cb_undef PARAMS ((cpp_reader *, unsigned int, ! cpp_hashnode *)); const char * init_c_lex (filename) *************** init_c_lex (filename) *** 102,108 **** struct cpp_callbacks *cb; struct c_fileinfo *toplevel; ! /* Set up filename timing. Must happen before cpp_start_read. */ file_info_tree = splay_tree_new ((splay_tree_compare_fn)strcmp, 0, (splay_tree_delete_value_fn)free); --- 107,113 ---- struct cpp_callbacks *cb; struct c_fileinfo *toplevel; ! /* Set up filename timing. Must happen before cpp_read_main_file. */ file_info_tree = splay_tree_new ((splay_tree_compare_fn)strcmp, 0, (splay_tree_delete_value_fn)free); *************** init_c_lex (filename) *** 113,119 **** body_time = get_run_time (); toplevel->time = body_time; } ! #ifdef MULTIBYTE_CHARS /* Change to the native locale for multibyte conversions. */ setlocale (LC_CTYPE, ""); --- 118,124 ---- body_time = get_run_time (); toplevel->time = body_time; } ! #ifdef MULTIBYTE_CHARS /* Change to the native locale for multibyte conversions. */ setlocale (LC_CTYPE, ""); *************** init_c_lex (filename) *** 122,159 **** cb = cpp_get_callbacks (parse_in); cb->ident = cb_ident; cb->file_change = cb_file_change; cb->def_pragma = cb_def_pragma; /* Set the debug callbacks if we can use them. */ if (debug_info_level == DINFO_LEVEL_VERBOSE ! && (write_symbols == DWARF_DEBUG || write_symbols == DWARF2_DEBUG)) { cb->define = cb_define; cb->undef = cb_undef; } - - if (filename == 0 || !strcmp (filename, "-")) - filename = "stdin", cpp_filename = ""; - else - cpp_filename = filename; - /* Start it at 0. */ lineno = 0; ! return filename; } ! /* A thin wrapper around the real parser that initializes the ! integrated preprocessor after debug output has been initialized. */ int yyparse() { ! if (! cpp_start_read (parse_in, cpp_filename)) ! return 1; /* cpplib has emitted an error. */ return yyparse_1(); } --- 127,165 ---- cb = cpp_get_callbacks (parse_in); + cb->line_change = cb_line_change; cb->ident = cb_ident; cb->file_change = cb_file_change; cb->def_pragma = cb_def_pragma; /* Set the debug callbacks if we can use them. */ if (debug_info_level == DINFO_LEVEL_VERBOSE ! && (write_symbols == DWARF_DEBUG || write_symbols == DWARF2_DEBUG ! || write_symbols == VMS_AND_DWARF2_DEBUG)) { cb->define = cb_define; cb->undef = cb_undef; } /* Start it at 0. */ lineno = 0; ! if (filename == NULL || !strcmp (filename, "-")) ! filename = ""; ! ! return cpp_read_main_file (parse_in, filename, ident_hash); } ! /* A thin wrapper around the real parser that initializes the ! integrated preprocessor after debug output has been initialized. ! Also, make sure the start_source_file debug hook gets called for ! the primary source file. */ int yyparse() { ! (*debug_hooks->start_source_file) (lineno, input_filename); ! cpp_finish_options (parse_in); return yyparse_1(); } *************** dump_time_statistics () *** 225,330 **** No need to deal with linemarkers under normal conditions. */ static void ! cb_ident (pfile, str) cpp_reader *pfile ATTRIBUTE_UNUSED; const cpp_string *str ATTRIBUTE_UNUSED; { #ifdef ASM_OUTPUT_IDENT if (! flag_no_ident) { /* Convert escapes in the string. */ ! tree value = lex_string ((const char *)str->text, str->len, 0); ASM_OUTPUT_IDENT (asm_out_file, TREE_STRING_POINTER (value)); } #endif } static void ! cb_file_change (pfile, fc) cpp_reader *pfile ATTRIBUTE_UNUSED; ! const cpp_file_change *fc; { ! if (fc->reason == FC_ENTER) { /* Don't stack the main buffer on the input stack; we already did in compile_file. */ ! if (fc->from.filename) { ! lineno = fc->from.lineno; ! push_srcloc (fc->to.filename, 1); input_file_stack->indent_level = indent_level; ! debug_start_source_file (fc->to.filename); #ifndef NO_IMPLICIT_EXTERN_C if (c_header_level) ++c_header_level; ! else if (fc->externc) { c_header_level = 1; ++pending_lang_change; } #endif } - else - main_input_filename = fc->to.filename; } ! else if (fc->reason == FC_LEAVE) { - /* Popping out of a file. */ - if (input_file_stack->next) - { #ifndef NO_IMPLICIT_EXTERN_C ! if (c_header_level && --c_header_level == 0) ! { ! if (fc->externc) ! warning ("badly nested C headers from preprocessor"); ! --pending_lang_change; ! } #endif #if 0 ! if (indent_level != input_file_stack->indent_level) ! { ! warning_with_file_and_line ! (input_filename, lineno, ! "This file contains more '%c's than '%c's.", ! indent_level > input_file_stack->indent_level ? '{' : '}', ! indent_level > input_file_stack->indent_level ? '}' : '{'); ! } ! #endif ! pop_srcloc (); ! debug_end_source_file (input_file_stack->line); } ! else ! error ("leaving more files than we entered"); } ! update_header_times (fc->to.filename); ! in_system_header = fc->sysp != 0; ! input_filename = fc->to.filename; ! lineno = fc->to.lineno; /* Do we need this? */ /* Hook for C++. */ extract_interface_info (); } static void ! cb_def_pragma (pfile) cpp_reader *pfile; { /* Issue a warning message if we have been asked to do so. Ignore unknown pragmas in system headers unless an explicit ! -Wunknown-pragmas has been given. */ if (warn_unknown_pragmas > in_system_header) { const unsigned char *space, *name = 0; ! cpp_token s; ! cpp_get_token (pfile, &s); ! space = cpp_token_as_text (pfile, &s); ! cpp_get_token (pfile, &s); ! if (s.type == CPP_NAME) ! name = cpp_token_as_text (pfile, &s); ! lineno = cpp_get_line (parse_in)->line; if (name) warning ("ignoring #pragma %s %s", space, name); else --- 231,349 ---- No need to deal with linemarkers under normal conditions. */ static void ! cb_ident (pfile, line, str) cpp_reader *pfile ATTRIBUTE_UNUSED; + unsigned int line ATTRIBUTE_UNUSED; const cpp_string *str ATTRIBUTE_UNUSED; { #ifdef ASM_OUTPUT_IDENT if (! flag_no_ident) { /* Convert escapes in the string. */ ! tree value = lex_string (str->text, str->len, 0); ASM_OUTPUT_IDENT (asm_out_file, TREE_STRING_POINTER (value)); } #endif } + /* Called at the start of every non-empty line. TOKEN is the first + lexed token on the line. Used for diagnostic line numbers. */ static void ! cb_line_change (pfile, token, parsing_args) cpp_reader *pfile ATTRIBUTE_UNUSED; ! const cpp_token *token; ! int parsing_args ATTRIBUTE_UNUSED; { ! src_lineno = SOURCE_LINE (map, token->line); ! } ! ! static void ! cb_file_change (pfile, new_map) ! cpp_reader *pfile ATTRIBUTE_UNUSED; ! const struct line_map *new_map; ! { ! unsigned int to_line = SOURCE_LINE (new_map, new_map->to_line); ! ! if (new_map->reason == LC_ENTER) { /* Don't stack the main buffer on the input stack; we already did in compile_file. */ ! if (map == NULL) ! main_input_filename = new_map->to_file; ! else { ! int included_at = SOURCE_LINE (new_map - 1, new_map->from_line - 1); ! ! lineno = included_at; ! push_srcloc (new_map->to_file, 1); input_file_stack->indent_level = indent_level; ! (*debug_hooks->start_source_file) (included_at, new_map->to_file); #ifndef NO_IMPLICIT_EXTERN_C if (c_header_level) ++c_header_level; ! else if (new_map->sysp == 2) { c_header_level = 1; ++pending_lang_change; } #endif } } ! else if (new_map->reason == LC_LEAVE) { #ifndef NO_IMPLICIT_EXTERN_C ! if (c_header_level && --c_header_level == 0) ! { ! if (new_map->sysp == 2) ! warning ("badly nested C headers from preprocessor"); ! --pending_lang_change; ! } #endif #if 0 ! if (indent_level != input_file_stack->indent_level) ! { ! warning_with_file_and_line ! (input_filename, lineno, ! "this file contains more '%c's than '%c's", ! indent_level > input_file_stack->indent_level ? '{' : '}', ! indent_level > input_file_stack->indent_level ? '}' : '{'); } ! #endif ! pop_srcloc (); ! ! (*debug_hooks->end_source_file) (to_line); } ! update_header_times (new_map->to_file); ! in_system_header = new_map->sysp != 0; ! input_filename = new_map->to_file; ! lineno = to_line; ! map = new_map; /* Hook for C++. */ extract_interface_info (); } static void ! cb_def_pragma (pfile, line) cpp_reader *pfile; + unsigned int line; { /* Issue a warning message if we have been asked to do so. Ignore unknown pragmas in system headers unless an explicit ! -Wunknown-pragmas has been given. */ if (warn_unknown_pragmas > in_system_header) { const unsigned char *space, *name = 0; ! const cpp_token *s; ! s = cpp_get_token (pfile); ! space = cpp_token_as_text (pfile, s); ! s = cpp_get_token (pfile); ! if (s->type == CPP_NAME) ! name = cpp_token_as_text (pfile, s); ! lineno = SOURCE_LINE (map, line); if (name) warning ("ignoring #pragma %s %s", space, name); else *************** cb_def_pragma (pfile) *** 334,577 **** /* #define callback for DWARF and DWARF2 debug info. */ static void ! cb_define (pfile, node) cpp_reader *pfile; cpp_hashnode *node; { ! debug_define (lineno, (const char *) cpp_macro_definition (pfile, node)); } /* #undef callback for DWARF and DWARF2 debug info. */ static void ! cb_undef (pfile, node) cpp_reader *pfile ATTRIBUTE_UNUSED; cpp_hashnode *node; { ! debug_undef (lineno, (const char *) node->name); ! } ! ! /* Parse a '\uNNNN' or '\UNNNNNNNN' sequence. ! ! [lex.charset]: The character designated by the universal-character-name ! \UNNNNNNNN is that character whose character short name in ISO/IEC 10646 ! is NNNNNNNN; the character designated by the universal-character-name ! \uNNNN is that character whose character short name in ISO/IEC 10646 is ! 0000NNNN. If the hexadecimal value for a universal character name is ! less than 0x20 or in the range 0x7F-0x9F (inclusive), or if the ! universal character name designates a character in the basic source ! character set, then the program is ill-formed. ! ! We assume that wchar_t is Unicode, so we don't need to do any ! mapping. Is this ever wrong? */ ! ! static const char * ! read_ucs (p, limit, cptr, length) ! const char *p; ! const char *limit; ! unsigned int *cptr; ! int length; ! { ! unsigned int code = 0; ! int c; ! ! for (; length; --length) ! { ! if (p >= limit) ! { ! error ("incomplete universal-character-name"); ! break; ! } ! ! c = *p++; ! if (! ISXDIGIT (c)) ! { ! error ("non hex digit '%c' in universal-character-name", c); ! p--; ! break; ! } ! ! code <<= 4; ! if (c >= 'a' && c <= 'f') ! code += c - 'a' + 10; ! if (c >= 'A' && c <= 'F') ! code += c - 'A' + 10; ! if (c >= '0' && c <= '9') ! code += c - '0'; ! } ! ! #ifdef TARGET_EBCDIC ! sorry ("universal-character-name on EBCDIC target"); ! *cptr = 0x3f; /* EBCDIC invalid character */ ! return p; ! #endif ! ! if (code > 0x9f && !(code & 0x80000000)) ! /* True extended character, OK. */; ! else if (code >= 0x20 && code < 0x7f) ! { ! /* ASCII printable character. The C character set consists of all of ! these except $, @ and `. We use hex escapes so that this also ! works with EBCDIC hosts. */ ! if (code != 0x24 && code != 0x40 && code != 0x60) ! error ("universal-character-name used for '%c'", code); ! } ! else ! error ("invalid universal-character-name"); ! ! *cptr = code; ! return p; ! } ! ! /* Read an escape sequence and write its character equivalent into *CPTR. ! P is the input pointer, which is just after the backslash. LIMIT ! is how much text we have. ! Returns the updated input pointer. */ ! ! static const char * ! readescape (p, limit, cptr) ! const char *p; ! const char *limit; ! unsigned int *cptr; ! { ! unsigned int c, code, count; ! unsigned firstdig = 0; ! int nonnull; ! ! if (p == limit) ! { ! /* cpp has already issued an error for this. */ ! *cptr = 0; ! return p; ! } ! ! c = *p++; ! ! switch (c) ! { ! case 'x': ! if (warn_traditional && !in_system_header) ! warning ("the meaning of `\\x' varies with -traditional"); ! ! if (flag_traditional) ! { ! *cptr = 'x'; ! return p; ! } ! ! code = 0; ! count = 0; ! nonnull = 0; ! while (p < limit) ! { ! c = *p++; ! if (! ISXDIGIT (c)) ! { ! p--; ! break; ! } ! code *= 16; ! if (c >= 'a' && c <= 'f') ! code += c - 'a' + 10; ! if (c >= 'A' && c <= 'F') ! code += c - 'A' + 10; ! if (c >= '0' && c <= '9') ! code += c - '0'; ! if (code != 0 || count != 0) ! { ! if (count == 0) ! firstdig = code; ! count++; ! } ! nonnull = 1; ! } ! if (! nonnull) ! { ! warning ("\\x used with no following hex digits"); ! *cptr = 'x'; ! return p; ! } ! else if (count == 0) ! /* Digits are all 0's. Ok. */ ! ; ! else if ((count - 1) * 4 >= TYPE_PRECISION (integer_type_node) ! || (count > 1 ! && (((unsigned)1 ! << (TYPE_PRECISION (integer_type_node) ! - (count - 1) * 4)) ! <= firstdig))) ! pedwarn ("hex escape out of range"); ! *cptr = code; ! return p; ! ! case '0': case '1': case '2': case '3': case '4': ! case '5': case '6': case '7': ! code = 0; ! for (count = 0; count < 3; count++) ! { ! if (c < '0' || c > '7') ! { ! p--; ! break; ! } ! code = (code * 8) + (c - '0'); ! if (p == limit) ! break; ! c = *p++; ! } ! ! if (count == 3) ! p--; ! ! *cptr = code; ! return p; ! ! case '\\': case '\'': case '"': case '?': ! *cptr = c; ! return p; ! ! case 'n': *cptr = TARGET_NEWLINE; return p; ! case 't': *cptr = TARGET_TAB; return p; ! case 'r': *cptr = TARGET_CR; return p; ! case 'f': *cptr = TARGET_FF; return p; ! case 'b': *cptr = TARGET_BS; return p; ! case 'v': *cptr = TARGET_VT; return p; ! case 'a': ! if (warn_traditional && !in_system_header) ! warning ("the meaning of '\\a' varies with -traditional"); ! *cptr = flag_traditional ? c : TARGET_BELL; ! return p; ! ! /* Warnings and support checks handled by read_ucs(). */ ! case 'u': case 'U': ! if (c_language != clk_cplusplus && !flag_isoc99) ! break; ! ! if (warn_traditional && !in_system_header) ! warning ("the meaning of '\\%c' varies with -traditional", c); ! ! return read_ucs (p, limit, cptr, c == 'u' ? 4 : 8); ! ! case 'e': case 'E': ! if (pedantic) ! pedwarn ("non-ISO-standard escape sequence, '\\%c'", c); ! *cptr = TARGET_ESC; return p; ! ! /* '\(', etc, are used at beginning of line to avoid confusing Emacs. ! '\%' is used to prevent SCCS from getting confused. */ ! case '(': case '{': case '[': case '%': ! if (pedantic) ! pedwarn ("unknown escape sequence '\\%c'", c); ! *cptr = c; ! return p; ! } ! ! if (ISGRAPH (c)) ! pedwarn ("unknown escape sequence '\\%c'", c); ! else ! pedwarn ("unknown escape sequence: '\\' followed by char 0x%x", c); ! ! *cptr = c; ! return p; } #if 0 /* not yet */ --- 353,376 ---- /* #define callback for DWARF and DWARF2 debug info. */ static void ! cb_define (pfile, line, node) cpp_reader *pfile; + unsigned int line; cpp_hashnode *node; { ! (*debug_hooks->define) (SOURCE_LINE (map, line), ! (const char *) cpp_macro_definition (pfile, node)); } /* #undef callback for DWARF and DWARF2 debug info. */ static void ! cb_undef (pfile, line, node) cpp_reader *pfile ATTRIBUTE_UNUSED; + unsigned int line; cpp_hashnode *node; { ! (*debug_hooks->undef) (SOURCE_LINE (map, line), ! (const char *) NODE_NAME (node)); } #if 0 /* not yet */ *************** is_extended_char (c) *** 601,607 **** error ("universal-character-name '\\U%08x' not valid in identifier", c); return 1; } ! /* Latin */ if ((c >= 0x00c0 && c <= 0x00d6) || (c >= 0x00d8 && c <= 0x00f6) --- 400,406 ---- error ("universal-character-name '\\U%08x' not valid in identifier", c); return 1; } ! /* Latin */ if ((c >= 0x00c0 && c <= 0x00d6) || (c >= 0x00d8 && c <= 0x00f6) *************** utf8_extend_token (c) *** 886,895 **** #if 0 struct try_type { ! tree *node_var; ! char unsigned_flag; ! char long_flag; ! char long_long_flag; }; struct try_type type_sequence[] = --- 685,694 ---- #if 0 struct try_type { ! tree *const node_var; ! const char unsigned_flag; ! const char long_flag; ! const char long_long_flag; }; struct try_type type_sequence[] = *************** struct pf_args *** 915,921 **** REAL_VALUE_TYPE value; tree type; }; ! static void parse_float (data) PTR data; --- 714,720 ---- REAL_VALUE_TYPE value; tree type; }; ! static void parse_float (data) PTR data; *************** parse_float (data) *** 963,1021 **** if (REAL_VALUE_ISINF (args->value) && pedantic) warning ("floating point number exceeds range of '%s'", typename); } ! int c_lex (value) tree *value; { ! cpp_token tok; ! enum cpp_ttype type; retry: timevar_push (TV_CPP); ! cpp_get_token (parse_in, &tok); timevar_pop (TV_CPP); /* The C++ front end does horrible things with the current line number. To ensure an accurate line number, we must reset it every time we return a token. */ ! lineno = cpp_get_line (parse_in)->line; *value = NULL_TREE; ! type = tok.type; ! switch (type) { case CPP_OPEN_BRACE: indent_level++; break; case CPP_CLOSE_BRACE: indent_level--; break; ! /* Issue this error here, where we can get at tok.val.c. */ case CPP_OTHER: ! if (ISGRAPH (tok.val.c)) ! error ("stray '%c' in program", tok.val.c); else ! error ("stray '\\%o' in program", tok.val.c); goto retry; ! case CPP_NAME: ! *value = get_identifier ((const char *)tok.val.node->name); break; - case CPP_INT: - case CPP_FLOAT: case CPP_NUMBER: ! *value = lex_number ((const char *)tok.val.str.text, tok.val.str.len); break; case CPP_CHAR: case CPP_WCHAR: ! *value = lex_charconst ((const char *)tok.val.str.text, ! tok.val.str.len, tok.type == CPP_WCHAR); break; case CPP_STRING: case CPP_WSTRING: ! *value = lex_string ((const char *)tok.val.str.text, ! tok.val.str.len, tok.type == CPP_WSTRING); break; /* These tokens should not be visible outside cpplib. */ --- 762,817 ---- if (REAL_VALUE_ISINF (args->value) && pedantic) warning ("floating point number exceeds range of '%s'", typename); } ! int c_lex (value) tree *value; { ! const cpp_token *tok; retry: timevar_push (TV_CPP); ! do ! tok = cpp_get_token (parse_in); ! while (tok->type == CPP_PADDING); timevar_pop (TV_CPP); /* The C++ front end does horrible things with the current line number. To ensure an accurate line number, we must reset it every time we return a token. */ ! lineno = src_lineno; *value = NULL_TREE; ! switch (tok->type) { case CPP_OPEN_BRACE: indent_level++; break; case CPP_CLOSE_BRACE: indent_level--; break; ! /* Issue this error here, where we can get at tok->val.c. */ case CPP_OTHER: ! if (ISGRAPH (tok->val.c)) ! error ("stray '%c' in program", tok->val.c); else ! error ("stray '\\%o' in program", tok->val.c); goto retry; ! case CPP_NAME: ! *value = HT_IDENT_TO_GCC_IDENT (HT_NODE (tok->val.node)); break; case CPP_NUMBER: ! *value = lex_number ((const char *)tok->val.str.text, tok->val.str.len); break; case CPP_CHAR: case CPP_WCHAR: ! *value = lex_charconst (tok); break; case CPP_STRING: case CPP_WSTRING: ! *value = lex_string (tok->val.str.text, tok->val.str.len, ! tok->type == CPP_WSTRING); break; /* These tokens should not be visible outside cpplib. */ *************** c_lex (value) *** 1027,1033 **** default: break; } ! return type; } #define ERROR(msgid) do { error(msgid); goto syntax_error; } while(0) --- 823,829 ---- default: break; } ! return tok->type; } #define ERROR(msgid) do { error(msgid); goto syntax_error; } while(0) *************** lex_number (str, len) *** 1046,1063 **** tree value; const char *p; enum anon1 { NOT_FLOAT = 0, AFTER_POINT, AFTER_EXPON } floatflag = NOT_FLOAT; ! /* We actually store only HOST_BITS_PER_CHAR bits in each part. The code below which fills the parts array assumes that a host ! int is at least twice as wide as a host char, and that HOST_BITS_PER_WIDE_INT is an even multiple of HOST_BITS_PER_CHAR. Two HOST_WIDE_INTs is the largest int literal we can store. In order to detect overflow below, the number of parts (TOTAL_PARTS) must be exactly the number of parts needed to hold the bits ! of two HOST_WIDE_INTs. */ #define TOTAL_PARTS ((HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR) * 2) unsigned int parts[TOTAL_PARTS]; ! /* Optimize for most frequent case. */ if (len == 1) { --- 842,859 ---- tree value; const char *p; enum anon1 { NOT_FLOAT = 0, AFTER_POINT, AFTER_EXPON } floatflag = NOT_FLOAT; ! /* We actually store only HOST_BITS_PER_CHAR bits in each part. The code below which fills the parts array assumes that a host ! int is at least twice as wide as a host char, and that HOST_BITS_PER_WIDE_INT is an even multiple of HOST_BITS_PER_CHAR. Two HOST_WIDE_INTs is the largest int literal we can store. In order to detect overflow below, the number of parts (TOTAL_PARTS) must be exactly the number of parts needed to hold the bits ! of two HOST_WIDE_INTs. */ #define TOTAL_PARTS ((HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR) * 2) unsigned int parts[TOTAL_PARTS]; ! /* Optimize for most frequent case. */ if (len == 1) { *************** lex_number (str, len) *** 1114,1122 **** /* It is not a decimal point. It should be a digit (perhaps a hex digit). */ ! if (ISDIGIT (c)) { ! n = c - '0'; } else if (base <= 10 && (c == 'e' || c == 'E')) { --- 910,919 ---- /* It is not a decimal point. It should be a digit (perhaps a hex digit). */ ! if (ISDIGIT (c) ! || (base == 16 && ISXDIGIT (c))) { ! n = hex_value (c); } else if (base <= 10 && (c == 'e' || c == 'E')) { *************** lex_number (str, len) *** 1129,1142 **** floatflag = AFTER_EXPON; break; /* start of exponent */ } - else if (base == 16 && c >= 'a' && c <= 'f') - { - n = c - 'a' + 10; - } - else if (base == 16 && c >= 'A' && c <= 'F') - { - n = c - 'A' + 10; - } else { p--; --- 926,931 ---- *************** lex_number (str, len) *** 1162,1170 **** } /* If the highest-order part overflows (gets larger than ! a host char will hold) then the whole number has overflowed. Record this and truncate the highest-order ! part. */ if (parts[TOTAL_PARTS - 1] >> HOST_BITS_PER_CHAR) { overflow = 1; --- 951,959 ---- } /* If the highest-order part overflows (gets larger than ! a host char will hold) then the whole number has overflowed. Record this and truncate the highest-order ! part. */ if (parts[TOTAL_PARTS - 1] >> HOST_BITS_PER_CHAR) { overflow = 1; *************** lex_number (str, len) *** 1226,1232 **** case 'f': case 'F': if (fflag) ERROR ("more than one 'f' suffix on floating constant"); ! else if (warn_traditional && !in_system_header) warning ("traditional C rejects the 'f' suffix"); fflag = 1; --- 1015,1022 ---- case 'f': case 'F': if (fflag) ERROR ("more than one 'f' suffix on floating constant"); ! else if (warn_traditional && !in_system_header ! && ! cpp_sys_macro_p (parse_in)) warning ("traditional C rejects the 'f' suffix"); fflag = 1; *************** lex_number (str, len) *** 1235,1241 **** case 'l': case 'L': if (lflag) ERROR ("more than one 'l' suffix on floating constant"); ! else if (warn_traditional && !in_system_header) warning ("traditional C rejects the 'l' suffix"); lflag = 1; --- 1025,1032 ---- case 'l': case 'L': if (lflag) ERROR ("more than one 'l' suffix on floating constant"); ! else if (warn_traditional && !in_system_header ! && ! cpp_sys_macro_p (parse_in)) warning ("traditional C rejects the 'l' suffix"); lflag = 1; *************** lex_number (str, len) *** 1273,1279 **** /* Receive output from parse_float() */ conversion_errno = args.conversion_errno; type = args.type; ! #ifdef ERANGE /* ERANGE is also reported for underflow, so test the value to distinguish overflow from that. */ --- 1064,1070 ---- /* Receive output from parse_float() */ conversion_errno = args.conversion_errno; type = args.type; ! #ifdef ERANGE /* ERANGE is also reported for underflow, so test the value to distinguish overflow from that. */ *************** lex_number (str, len) *** 1310,1316 **** case 'u': case 'U': if (spec_unsigned) error ("two 'u' suffixes on integer constant"); ! else if (warn_traditional && !in_system_header) warning ("traditional C rejects the 'u' suffix"); spec_unsigned = 1; --- 1101,1108 ---- case 'u': case 'U': if (spec_unsigned) error ("two 'u' suffixes on integer constant"); ! else if (warn_traditional && !in_system_header ! && ! cpp_sys_macro_p (parse_in)) warning ("traditional C rejects the 'u' suffix"); spec_unsigned = 1; *************** lex_number (str, len) *** 1348,1354 **** } } ! /* If the literal overflowed, pedwarn about it now. */ if (overflow) { warn = 1; --- 1140,1146 ---- } } ! /* If the literal overflowed, pedwarn about it now. */ if (overflow) { warn = 1; *************** lex_number (str, len) *** 1395,1403 **** ? long_unsigned_type_node : long_integer_type_node); else if (int_fits_type_p (value, ! spec_unsigned ? long_long_unsigned_type_node ! : long_long_integer_type_node)) trad_type = (spec_unsigned ? long_long_unsigned_type_node : long_long_integer_type_node); --- 1187,1195 ---- ? long_unsigned_type_node : long_integer_type_node); else if (int_fits_type_p (value, ! spec_unsigned ? long_long_unsigned_type_node ! : long_long_integer_type_node)) trad_type = (spec_unsigned ? long_long_unsigned_type_node : long_long_integer_type_node); *************** lex_number (str, len) *** 1459,1467 **** pedwarn ("integer constant larger than the maximum value of %s", (flag_isoc99 ? (TREE_UNSIGNED (type) ! ? "an unsigned long long int" ! : "a long long int") ! : "an unsigned long int")); } if (base == 10 && ! spec_unsigned && TREE_UNSIGNED (type)) --- 1251,1259 ---- pedwarn ("integer constant larger than the maximum value of %s", (flag_isoc99 ? (TREE_UNSIGNED (type) ! ? _("an unsigned long long int") ! : _("a long long int")) ! : _("an unsigned long int"))); } if (base == 10 && ! spec_unsigned && TREE_UNSIGNED (type)) *************** lex_number (str, len) *** 1489,1495 **** TREE_TYPE (value) = type; /* If it's still an integer (not a complex), and it doesn't ! fit in the type we choose for it, then pedwarn. */ if (! warn && TREE_CODE (TREE_TYPE (value)) == INTEGER_TYPE --- 1281,1287 ---- TREE_TYPE (value) = type; /* If it's still an integer (not a complex), and it doesn't ! fit in the type we choose for it, then pedwarn. */ if (! warn && TREE_CODE (TREE_TYPE (value)) == INTEGER_TYPE *************** lex_number (str, len) *** 1508,1528 **** static tree lex_string (str, len, wide) ! const char *str; unsigned int len; int wide; { tree value; char *buf = alloca ((len + 1) * (wide ? WCHAR_BYTES : 1)); char *q = buf; ! const char *p = str, *limit = str + len; unsigned int c; unsigned width = wide ? WCHAR_TYPE_SIZE : TYPE_PRECISION (char_type_node); #ifdef MULTIBYTE_CHARS /* Reset multibyte conversion state. */ ! (void) local_mbtowc (NULL_PTR, NULL_PTR, 0); #endif while (p < limit) --- 1300,1320 ---- static tree lex_string (str, len, wide) ! const unsigned char *str; unsigned int len; int wide; { tree value; char *buf = alloca ((len + 1) * (wide ? WCHAR_BYTES : 1)); char *q = buf; ! const unsigned char *p = str, *limit = str + len; unsigned int c; unsigned width = wide ? WCHAR_TYPE_SIZE : TYPE_PRECISION (char_type_node); #ifdef MULTIBYTE_CHARS /* Reset multibyte conversion state. */ ! (void) local_mbtowc (NULL, NULL, 0); #endif while (p < limit) *************** lex_string (str, len, wide) *** 1531,1540 **** wchar_t wc; int char_len; ! char_len = local_mbtowc (&wc, p, limit - p); if (char_len == -1) { ! warning ("Ignoring invalid multibyte character"); char_len = 1; c = *p++; } --- 1323,1332 ---- wchar_t wc; int char_len; ! char_len = local_mbtowc (&wc, (const char *) p, limit - p); if (char_len == -1) { ! warning ("ignoring invalid multibyte character"); char_len = 1; c = *p++; } *************** lex_string (str, len, wide) *** 1549,1560 **** if (c == '\\' && !ignore_escape_flag) { ! p = readescape (p, limit, &c); ! if (width < HOST_BITS_PER_INT ! && (unsigned) c >= ((unsigned)1 << width)) ! pedwarn ("escape sequence out of range for character"); ! } /* Add this single character into the buffer either as a wchar_t or as a single byte. */ if (wide) --- 1341,1356 ---- if (c == '\\' && !ignore_escape_flag) { ! unsigned int mask; + if (width < HOST_BITS_PER_INT) + mask = ((unsigned int) 1 << width) - 1; + else + mask = ~0; + c = cpp_parse_escape (parse_in, &p, limit, + mask, flag_traditional); + } + /* Add this single character into the buffer either as a wchar_t or as a single byte. */ if (wide) *************** lex_string (str, len, wide) *** 1605,1717 **** return value; } static tree ! lex_charconst (str, len, wide) ! const char *str; ! unsigned int len; ! int wide; { ! const char *limit = str + len; ! int result = 0; ! int num_chars = 0; ! int chars_seen = 0; ! unsigned width = TYPE_PRECISION (char_type_node); ! int max_chars; ! unsigned int c; ! tree value; ! ! #ifdef MULTIBYTE_CHARS ! int longest_char = local_mb_cur_max (); ! (void) local_mbtowc (NULL_PTR, NULL_PTR, 0); ! #endif ! ! max_chars = TYPE_PRECISION (integer_type_node) / width; ! if (wide) ! width = WCHAR_TYPE_SIZE; ! ! while (str < limit) ! { ! #ifdef MULTIBYTE_CHARS ! wchar_t wc; ! int char_len; ! ! char_len = local_mbtowc (&wc, str, limit - str); ! if (char_len == -1) ! { ! warning ("Ignoring invalid multibyte character"); ! char_len = 1; ! c = *str++; ! } ! else ! { ! str += char_len; ! c = wc; ! } ! #else ! c = *str++; ! #endif ! ! ++chars_seen; ! if (c == '\\') ! { ! str = readescape (str, limit, &c); ! if (width < HOST_BITS_PER_INT ! && (unsigned) c >= ((unsigned)1 << width)) ! pedwarn ("escape sequence out of range for character"); ! } ! #ifdef MAP_CHARACTER ! if (ISPRINT (c)) ! c = MAP_CHARACTER (c); ! #endif ! ! /* Merge character into result; ignore excess chars. */ ! num_chars += (width / TYPE_PRECISION (char_type_node)); ! if (num_chars < max_chars + 1) ! { ! if (width < HOST_BITS_PER_INT) ! result = (result << width) | (c & ((1 << width) - 1)); ! else ! result = c; ! } ! } ! ! if (chars_seen == 0) ! error ("empty character constant"); ! else if (num_chars > max_chars) { ! num_chars = max_chars; ! error ("character constant too long"); } ! else if (chars_seen != 1 && ! flag_traditional && warn_multichar) ! warning ("multi-character character constant"); ! ! /* If char type is signed, sign-extend the constant. */ ! if (! wide) { ! int num_bits = num_chars * width; ! if (num_bits == 0) ! /* We already got an error; avoid invalid shift. */ ! value = build_int_2 (0, 0); ! else if (TREE_UNSIGNED (char_type_node) ! || ((result >> (num_bits - 1)) & 1) == 0) ! value = build_int_2 (result & (~(unsigned HOST_WIDE_INT) 0 ! >> (HOST_BITS_PER_WIDE_INT - num_bits)), ! 0); else ! value = build_int_2 (result | ~(~(unsigned HOST_WIDE_INT) 0 ! >> (HOST_BITS_PER_WIDE_INT - num_bits)), ! -1); ! /* In C, a character constant has type 'int'; in C++, 'char'. */ ! if (chars_seen <= 1 && c_language == clk_cplusplus) ! TREE_TYPE (value) = char_type_node; else ! TREE_TYPE (value) = integer_type_node; ! } ! else ! { ! value = build_int_2 (result, 0); ! TREE_TYPE (value) = wchar_type_node; } return value; } --- 1401,1450 ---- return value; } + /* Converts a (possibly wide) character constant token into a tree. */ static tree ! lex_charconst (token) ! const cpp_token *token; { ! HOST_WIDE_INT result; ! tree type, value; ! unsigned int chars_seen; ! ! result = cpp_interpret_charconst (parse_in, token, warn_multichar, ! flag_traditional, &chars_seen); ! if (token->type == CPP_WCHAR) { ! value = build_int_2 (result, 0); ! type = wchar_type_node; } ! else { ! if (result < 0) ! value = build_int_2 (result, -1); else ! value = build_int_2 (result, 0); ! ! /* In C, a character constant has type 'int'. ! In C++ 'char', but multi-char charconsts have type 'int'. */ ! if (c_language == clk_cplusplus && chars_seen <= 1) ! type = char_type_node; else ! type = integer_type_node; } + /* cpp_interpret_charconst issues a warning if the constant + overflows, but if the number fits in HOST_WIDE_INT anyway, it + will return it un-truncated, which may cause problems down the + line. So set the type to widest_integer_literal_type, call + convert to truncate it to the proper type, then clear + TREE_OVERFLOW so we don't get a second warning. + + FIXME: cpplib's assessment of overflow may not be accurate on a + platform where the final type can change at (compiler's) runtime. */ + + TREE_TYPE (value) = widest_integer_literal_type_node; + value = convert (type, value); + TREE_OVERFLOW (value) = 0; + return value; } diff -Nrc3pad gcc-3.0.4/gcc/c-lex.h gcc-3.1/gcc/c-lex.h *** gcc-3.0.4/gcc/c-lex.h Fri Mar 2 00:38:14 2001 --- gcc-3.1/gcc/c-lex.h Wed Aug 22 14:34:45 2001 *************** *** 1,25 **** /* Define constants for communication with c-parse.y. Copyright (C) 1987, 1992, 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ ! #ifndef _C_LEX_H ! #define _C_LEX_H extern tree make_pointer_declarator PARAMS ((tree, tree)); extern void position_after_white_space PARAMS ((void)); --- 1,25 ---- /* Define constants for communication with c-parse.y. Copyright (C) 1987, 1992, 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ ! #ifndef GCC_C_LEX_H ! #define GCC_C_LEX_H extern tree make_pointer_declarator PARAMS ((tree, tree)); extern void position_after_white_space PARAMS ((void)); *************** extern void position_after_white_space P *** 27,40 **** extern int c_lex PARAMS ((tree *)); extern const char *init_c_lex PARAMS ((const char *)); - extern void save_and_forget_protocol_qualifiers PARAMS ((void)); - extern void forget_protocol_qualifiers PARAMS ((void)); - extern void remember_protocol_qualifiers PARAMS ((void)); - extern tree is_class_name PARAMS ((tree)); - extern int indent_level; struct cpp_reader; extern struct cpp_reader* parse_in; ! #endif --- 27,35 ---- extern int c_lex PARAMS ((tree *)); extern const char *init_c_lex PARAMS ((const char *)); extern int indent_level; struct cpp_reader; extern struct cpp_reader* parse_in; ! #endif /* ! GCC_C_LEX_H */ diff -Nrc3pad gcc-3.0.4/gcc/c-objc-common.c gcc-3.1/gcc/c-objc-common.c *** gcc-3.0.4/gcc/c-objc-common.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/c-objc-common.c Thu Mar 28 18:49:58 2002 *************** *** 0 **** --- 1,404 ---- + /* Some code common to C and ObjC front ends. + Copyright (C) 2001 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2, or (at your option) any later + version. + + GCC is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to the Free + Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + + #include "config.h" + #include "system.h" + #include "tree.h" + #include "rtl.h" + #include "insn-config.h" + #include "integrate.h" + #include "expr.h" + #include "c-tree.h" + #include "function.h" + #include "flags.h" + #include "toplev.h" + #include "diagnostic.h" + #include "tree-inline.h" + #include "varray.h" + #include "ggc.h" + + static int c_tree_printer PARAMS ((output_buffer *)); + static tree inline_forbidden_p PARAMS ((tree *, int *, void *)); + static void expand_deferred_fns PARAMS ((void)); + static tree start_cdtor PARAMS ((int)); + static void finish_cdtor PARAMS ((tree)); + + static varray_type deferred_fns; + + int + c_missing_noreturn_ok_p (decl) + tree decl; + { + /* A missing noreturn is not ok for freestanding implementations and + ok for the `main' function in hosted implementations. */ + return flag_hosted && MAIN_NAME_P (DECL_ASSEMBLER_NAME (decl)); + } + + /* We want to inline `extern inline' functions even if this would + violate inlining limits. Some glibc and linux constructs depend on + such functions always being inlined when optimizing. */ + + int + c_disregard_inline_limits (fn) + tree fn; + { + if (lookup_attribute ("always_inline", DECL_ATTRIBUTES (fn)) != NULL) + return 1; + + return DECL_DECLARED_INLINE_P (fn) && DECL_EXTERNAL (fn); + } + + static tree + inline_forbidden_p (nodep, walk_subtrees, fn) + tree *nodep; + int *walk_subtrees ATTRIBUTE_UNUSED; + void *fn; + { + tree node = *nodep; + tree t; + + switch (TREE_CODE (node)) + { + case CALL_EXPR: + t = get_callee_fndecl (node); + + if (! t) + break; + + /* We cannot inline functions that call setjmp. */ + if (setjmp_call_p (t)) + return node; + + switch (DECL_FUNCTION_CODE (t)) + { + /* We cannot inline functions that take a variable number of + arguments. */ + case BUILT_IN_VARARGS_START: + case BUILT_IN_STDARG_START: + #if 0 + /* Functions that need information about the address of the + caller can't (shouldn't?) be inlined. */ + case BUILT_IN_RETURN_ADDRESS: + #endif + return node; + + default: + break; + } + + break; + + case DECL_STMT: + /* We cannot inline functions that contain other functions. */ + if (TREE_CODE (TREE_OPERAND (node, 0)) == FUNCTION_DECL + && DECL_INITIAL (TREE_OPERAND (node, 0))) + return node; + break; + + case GOTO_STMT: + case GOTO_EXPR: + t = TREE_OPERAND (node, 0); + + /* We will not inline a function which uses computed goto. The + addresses of its local labels, which may be tucked into + global storage, are of course not constant across + instantiations, which causes unexpected behaviour. */ + if (TREE_CODE (t) != LABEL_DECL) + return node; + + /* We cannot inline a nested function that jumps to a nonlocal + label. */ + if (TREE_CODE (t) == LABEL_DECL + && DECL_CONTEXT (t) && DECL_CONTEXT (t) != fn) + return node; + + break; + + default: + break; + } + + return NULL_TREE; + } + + int + c_cannot_inline_tree_fn (fnp) + tree *fnp; + { + tree fn = *fnp; + tree t; + + if (flag_really_no_inline + && lookup_attribute ("always_inline", DECL_ATTRIBUTES (fn)) == NULL) + return 1; + + if (! function_attribute_inlinable_p (fn)) + { + DECL_UNINLINABLE (fn) = 1; + return 1; + } + + /* If a function has pending sizes, we must not defer its + compilation, and we can't inline it as a tree. */ + if (fn == current_function_decl) + { + t = get_pending_sizes (); + put_pending_sizes (t); + + if (t) + { + DECL_UNINLINABLE (fn) = 1; + return 1; + } + } + + if (DECL_CONTEXT (fn)) + { + /* If a nested function has pending sizes, we may have already + saved them. */ + if (DECL_LANG_SPECIFIC (fn)->pending_sizes) + { + DECL_UNINLINABLE (fn) = 1; + return 1; + } + } + else + { + /* We rely on the fact that this function is called upfront, + just before we start expanding a function. If FN is active + (i.e., it's the current_function_decl or a parent thereof), + we have to walk FN's saved tree. Otherwise, we can safely + assume we have done it before and, if we didn't mark it as + uninlinable (in which case we wouldn't have been called), it + is inlinable. Unfortunately, this strategy doesn't work for + nested functions, because they're only expanded as part of + their enclosing functions, so the inlinability test comes in + late. */ + t = current_function_decl; + + while (t && t != fn) + t = DECL_CONTEXT (t); + if (! t) + return 0; + } + + if (walk_tree (&DECL_SAVED_TREE (fn), inline_forbidden_p, fn, NULL)) + { + DECL_UNINLINABLE (fn) = 1; + return 1; + } + + return 0; + } + + /* Initialization common to C and Objective-C front ends. */ + const char * + c_objc_common_init (filename) + const char *filename; + { + c_init_decl_processing (); + + filename = c_common_init (filename); + + add_c_tree_codes (); + + save_lang_status = &push_c_function_context; + restore_lang_status = &pop_c_function_context; + mark_lang_status = &mark_c_function_context; + lang_expand_expr = c_expand_expr; + lang_expand_decl_stmt = c_expand_decl_stmt; + + /* These were not defined in the Objective-C front end, but I'm + putting them here anyway. The diagnostic format decoder might + want an enhanced ObjC implementation. */ + diagnostic_format_decoder (global_dc) = &c_tree_printer; + lang_missing_noreturn_ok_p = &c_missing_noreturn_ok_p; + + /* If still unspecified, make it match -std=c99 + (allowing for -pedantic-errors). */ + if (mesg_implicit_function_declaration < 0) + { + if (flag_isoc99) + mesg_implicit_function_declaration = flag_pedantic_errors ? 2 : 1; + else + mesg_implicit_function_declaration = 0; + } + + VARRAY_TREE_INIT (deferred_fns, 32, "deferred_fns"); + ggc_add_tree_varray_root (&deferred_fns, 1); + + return filename; + } + + /* Register a function tree, so that its optimization and conversion + to RTL is only done at the end of the compilation. */ + + int + defer_fn (fn) + tree fn; + { + VARRAY_PUSH_TREE (deferred_fns, fn); + + return 1; + } + + /* Expand deferred functions for C and ObjC. */ + + static void + expand_deferred_fns () + { + unsigned int i; + + for (i = 0; i < VARRAY_ACTIVE_SIZE (deferred_fns); i++) + { + tree decl = VARRAY_TREE (deferred_fns, i); + + if (! TREE_ASM_WRITTEN (decl)) + { + /* For static inline functions, delay the decision whether to + emit them or not until wrapup_global_declarations. */ + if (! TREE_PUBLIC (decl)) + DECL_DEFER_OUTPUT (decl) = 1; + c_expand_deferred_function (decl); + } + } + + VARRAY_FREE (deferred_fns); + } + + static tree + start_cdtor (method_type) + int method_type; + { + tree fnname = get_file_function_name (method_type); + tree void_list_node_1 = build_tree_list (NULL_TREE, void_type_node); + tree body; + + start_function (void_list_node_1, + build_nt (CALL_EXPR, fnname, + tree_cons (NULL_TREE, NULL_TREE, void_list_node_1), + NULL_TREE), + NULL_TREE); + store_parm_decls (); + + current_function_cannot_inline + = "static constructors and destructors cannot be inlined"; + + body = c_begin_compound_stmt (); + + pushlevel (0); + clear_last_expr (); + add_scope_stmt (/*begin_p=*/1, /*partial_p=*/0); + + return body; + } + + static void + finish_cdtor (body) + tree body; + { + tree scope; + tree block; + + scope = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0); + block = poplevel (0, 0, 0); + SCOPE_STMT_BLOCK (TREE_PURPOSE (scope)) = block; + SCOPE_STMT_BLOCK (TREE_VALUE (scope)) = block; + + RECHAIN_STMTS (body, COMPOUND_BODY (body)); + + finish_function (0, 0); + } + + /* Called at end of parsing, but before end-of-file processing. */ + + void + c_objc_common_finish_file () + { + expand_deferred_fns (); + + if (static_ctors) + { + tree body = start_cdtor ('I'); + + for (; static_ctors; static_ctors = TREE_CHAIN (static_ctors)) + c_expand_expr_stmt (build_function_call (TREE_VALUE (static_ctors), + NULL_TREE)); + + finish_cdtor (body); + } + + if (static_dtors) + { + tree body = start_cdtor ('D'); + + for (; static_dtors; static_dtors = TREE_CHAIN (static_dtors)) + c_expand_expr_stmt (build_function_call (TREE_VALUE (static_dtors), + NULL_TREE)); + + finish_cdtor (body); + } + + { + int flags; + FILE *stream = dump_begin (TDI_all, &flags); + + if (stream) + { + dump_node (getdecls (), flags & ~TDF_SLIM, stream); + dump_end (TDI_all, stream); + } + } + } + + /* Called during diagnostic message formatting process to print a + source-level entity onto BUFFER. The meaning of the format specifiers + is as follows: + %D: a general decl, + %F: a function declaration, + %T: a type. + + These format specifiers form a subset of the format specifiers set used + by the C++ front-end. + Please notice when called, the `%' part was already skipped by the + diagnostic machinery. */ + static int + c_tree_printer (buffer) + output_buffer *buffer; + { + tree t = va_arg (output_buffer_format_args (buffer), tree); + + switch (*output_buffer_text_cursor (buffer)) + { + case 'D': + case 'F': + case 'T': + { + const char *n = DECL_NAME (t) + ? (*decl_printable_name) (t, 2) + : "({anonymous})"; + output_add_string (buffer, n); + } + return 1; + + default: + return 0; + } + } diff -Nrc3pad gcc-3.0.4/gcc/c-parse.c gcc-3.1/gcc/c-parse.c *** gcc-3.0.4/gcc/c-parse.c Wed Feb 20 19:42:20 2002 --- gcc-3.1/gcc/c-parse.c Wed May 15 02:41:47 2002 *************** *** 37,78 **** #define REALPART 287 #define IMAGPART 288 #define VA_ARG 289 ! #define PTR_VALUE 290 ! #define PTR_BASE 291 ! #define PTR_EXTENT 292 ! #define ASSIGN 293 ! #define OROR 294 ! #define ANDAND 295 ! #define EQCOMPARE 296 ! #define ARITHCOMPARE 297 ! #define LSHIFT 298 ! #define RSHIFT 299 ! #define UNARY 300 ! #define PLUSPLUS 301 ! #define MINUSMINUS 302 ! #define HYPERUNARY 303 ! #define POINTSAT 304 ! #define INTERFACE 305 ! #define IMPLEMENTATION 306 ! #define END 307 ! #define SELECTOR 308 ! #define DEFS 309 ! #define ENCODE 310 ! #define CLASSNAME 311 ! #define PUBLIC 312 ! #define PRIVATE 313 ! #define PROTECTED 314 ! #define PROTOCOL 315 ! #define OBJECTNAME 316 ! #define CLASS 317 ! #define ALIAS 318 ! #define OBJC_STRING 319 #line 34 "c-parse.y" #include "config.h" #include "system.h" - #include #include "tree.h" #include "input.h" #include "cpplib.h" --- 37,80 ---- #define REALPART 287 #define IMAGPART 288 #define VA_ARG 289 ! #define CHOOSE_EXPR 290 ! #define TYPES_COMPATIBLE_P 291 ! #define PTR_VALUE 292 ! #define PTR_BASE 293 ! #define PTR_EXTENT 294 ! #define STRING_FUNC_NAME 295 ! #define VAR_FUNC_NAME 296 ! #define ASSIGN 297 ! #define OROR 298 ! #define ANDAND 299 ! #define EQCOMPARE 300 ! #define ARITHCOMPARE 301 ! #define LSHIFT 302 ! #define RSHIFT 303 ! #define UNARY 304 ! #define PLUSPLUS 305 ! #define MINUSMINUS 306 ! #define HYPERUNARY 307 ! #define POINTSAT 308 ! #define INTERFACE 309 ! #define IMPLEMENTATION 310 ! #define END 311 ! #define SELECTOR 312 ! #define DEFS 313 ! #define ENCODE 314 ! #define CLASSNAME 315 ! #define PUBLIC 316 ! #define PRIVATE 317 ! #define PROTECTED 318 ! #define PROTOCOL 319 ! #define OBJECTNAME 320 ! #define CLASS 321 ! #define ALIAS 322 #line 34 "c-parse.y" #include "config.h" #include "system.h" #include "tree.h" #include "input.h" #include "cpplib.h" *************** *** 91,100 **** #endif - /* Since parsers are distinct for each language, put the language string - definition here. */ - const char * const language_string = "GNU C"; - /* Like YYERROR but do call yyerror. */ #define YYERROR1 { yyerror ("syntax error"); YYERROR; } --- 93,98 ---- *************** const char * const language_string = "GN *** 104,113 **** /* Rename the "yyparse" function so that we can override it elsewhere. */ #define yyparse yyparse_1 ! #line 72 "c-parse.y" typedef union {long itype; tree ttype; enum tree_code code; const char *filename; int lineno; } YYSTYPE; ! #line 192 "c-parse.y" /* Number of statements (loosely speaking) and compound statements seen so far. */ --- 102,111 ---- /* Rename the "yyparse" function so that we can override it elsewhere. */ #define yyparse yyparse_1 ! #line 67 "c-parse.y" typedef union {long itype; tree ttype; enum tree_code code; const char *filename; int lineno; } YYSTYPE; ! #line 200 "c-parse.y" /* Number of statements (loosely speaking) and compound statements seen so far. */ *************** static int if_stmt_line; *** 123,143 **** static tree current_declspecs = NULL_TREE; static tree prefix_attributes = NULL_TREE; ! /* Stack of saved values of current_declspecs and prefix_attributes. */ static tree declspec_stack; /* For __extension__, save/restore the warning flags which are controlled by __extension__. */ ! #define SAVE_WARN_FLAGS() \ ! size_int (pedantic | (warn_pointer_arith << 1)) ! #define RESTORE_WARN_FLAGS(tval) \ ! do { \ ! int val = tree_low_cst (tval, 0); \ ! pedantic = val & 1; \ ! warn_pointer_arith = (val >> 1) & 1; \ } while (0) /* Tell yyparse how to print a token's value, if yydebug is set. */ #define YYPRINT(FILE,YYCHAR,YYLVAL) yyprint(FILE,YYCHAR,YYLVAL) --- 121,171 ---- static tree current_declspecs = NULL_TREE; static tree prefix_attributes = NULL_TREE; ! /* List of all the attributes applying to the identifier currently being ! declared; includes prefix_attributes and possibly some more attributes ! just after a comma. */ ! static tree all_prefix_attributes = NULL_TREE; ! ! /* Stack of saved values of current_declspecs, prefix_attributes and ! all_prefix_attributes. */ static tree declspec_stack; + /* PUSH_DECLSPEC_STACK is called from setspecs; POP_DECLSPEC_STACK + should be called from the productions making use of setspecs. */ + #define PUSH_DECLSPEC_STACK \ + do { \ + declspec_stack = tree_cons (build_tree_list (prefix_attributes, \ + all_prefix_attributes), \ + current_declspecs, \ + declspec_stack); \ + } while (0) + + #define POP_DECLSPEC_STACK \ + do { \ + current_declspecs = TREE_VALUE (declspec_stack); \ + prefix_attributes = TREE_PURPOSE (TREE_PURPOSE (declspec_stack)); \ + all_prefix_attributes = TREE_VALUE (TREE_PURPOSE (declspec_stack)); \ + declspec_stack = TREE_CHAIN (declspec_stack); \ + } while (0) + /* For __extension__, save/restore the warning flags which are controlled by __extension__. */ ! #define SAVE_WARN_FLAGS() \ ! size_int (pedantic \ ! | (warn_pointer_arith << 1) \ ! | (warn_traditional << 2)) ! ! #define RESTORE_WARN_FLAGS(tval) \ ! do { \ ! int val = tree_low_cst (tval, 0); \ ! pedantic = val & 1; \ ! warn_pointer_arith = (val >> 1) & 1; \ ! warn_traditional = (val >> 2) & 1; \ } while (0) + #define OBJC_NEED_RAW_IDENTIFIER(VAL) /* nothing */ + /* Tell yyparse how to print a token's value, if yydebug is set. */ #define YYPRINT(FILE,YYCHAR,YYLVAL) yyprint(FILE,YYCHAR,YYLVAL) *************** static void init_reswords PARAMS ((void) *** 153,161 **** --- 181,192 ---- void c_parse_init () { + init_reswords (); + ggc_add_tree_root (&declspec_stack, 1); ggc_add_tree_root (¤t_declspecs, 1); ggc_add_tree_root (&prefix_attributes, 1); + ggc_add_tree_root (&all_prefix_attributes, 1); } #include *************** c_parse_init () *** 168,193 **** ! #define YYFINAL 730 #define YYFLAG -32768 ! #define YYNTBASE 88 ! #define YYTRANSLATE(x) ((unsigned)(x) <= 319 ? yytranslate[x] : 255) static const char yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ! 2, 2, 84, 2, 2, 2, 56, 47, 2, 63, ! 80, 54, 52, 85, 53, 62, 55, 2, 2, 2, ! 2, 2, 2, 2, 2, 2, 2, 42, 81, 2, ! 40, 2, 41, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ! 64, 2, 87, 46, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ! 2, 2, 86, 45, 82, 83, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, --- 199,224 ---- ! #define YYFINAL 900 #define YYFLAG -32768 ! #define YYNTBASE 91 ! #define YYTRANSLATE(x) ((unsigned)(x) <= 322 ? yytranslate[x] : 289) static const char yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ! 2, 2, 87, 2, 2, 2, 60, 51, 2, 67, ! 83, 58, 56, 88, 57, 66, 59, 2, 2, 2, ! 2, 2, 2, 2, 2, 2, 2, 46, 84, 2, ! 44, 2, 45, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ! 68, 2, 90, 50, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ! 2, 2, 89, 49, 85, 86, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, *************** static const char yytranslate[] = { *** 204,447 **** 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, ! 37, 38, 39, 43, 44, 48, 49, 50, 51, 57, ! 58, 59, 60, 61, 65, 66, 67, 68, 69, 70, ! 71, 72, 73, 74, 75, 76, 77, 78, 79 }; #if YYDEBUG != 0 static const short yyprhs[] = { 0, 0, 1, 3, 4, 7, 8, 12, 14, 16, 22, ! 25, 29, 34, 39, 42, 45, 48, 51, 53, 54, ! 55, 65, 70, 71, 72, 82, 87, 88, 89, 98, ! 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, ! 122, 123, 125, 127, 131, 133, 136, 139, 142, 145, ! 148, 153, 156, 161, 164, 167, 169, 171, 173, 178, ! 180, 184, 188, 192, 196, 200, 204, 208, 212, 216, ! 220, 224, 228, 229, 234, 235, 240, 241, 242, 250, ! 251, 257, 261, 265, 267, 269, 271, 272, 280, 284, ! 288, 292, 296, 301, 308, 313, 317, 321, 324, 327, ! 329, 332, 333, 335, 338, 342, 344, 346, 349, 352, ! 357, 362, 365, 368, 372, 373, 374, 379, 384, 388, ! 392, 395, 398, 401, 404, 408, 409, 412, 415, 418, ! 421, 425, 426, 429, 432, 434, 436, 439, 442, 444, ! 446, 449, 452, 455, 459, 460, 463, 465, 467, 469, ! 474, 479, 481, 483, 485, 487, 491, 493, 497, 498, ! 503, 504, 511, 515, 516, 523, 527, 528, 530, 532, ! 535, 542, 544, 548, 549, 551, 556, 563, 568, 570, ! 572, 574, 576, 578, 579, 584, 586, 587, 590, 592, ! 596, 600, 603, 604, 609, 611, 612, 617, 619, 621, ! 623, 626, 629, 635, 639, 640, 641, 649, 650, 651, ! 659, 661, 663, 667, 671, 676, 680, 684, 688, 690, ! 694, 699, 704, 708, 712, 716, 718, 722, 726, 730, ! 735, 740, 744, 748, 750, 752, 755, 757, 760, 762, ! 765, 766, 774, 780, 783, 784, 792, 798, 801, 802, ! 811, 812, 820, 823, 824, 826, 827, 829, 831, 834, ! 835, 839, 842, 846, 852, 856, 858, 860, 863, 865, ! 869, 874, 881, 887, 889, 893, 895, 897, 901, 902, ! 906, 909, 910, 912, 914, 917, 918, 921, 925, 929, ! 932, 936, 941, 945, 948, 952, 955, 959, 961, 963, ! 965, 967, 969, 972, 975, 978, 981, 983, 986, 989, ! 992, 994, 997, 1000, 1003, 1006, 1008, 1011, 1013, 1015, ! 1017, 1019, 1022, 1023, 1024, 1025, 1026, 1027, 1029, 1031, ! 1034, 1038, 1040, 1043, 1045, 1047, 1053, 1055, 1057, 1060, ! 1063, 1066, 1069, 1070, 1076, 1077, 1082, 1083, 1084, 1086, ! 1089, 1093, 1097, 1101, 1102, 1107, 1109, 1113, 1114, 1115, ! 1123, 1129, 1132, 1133, 1134, 1135, 1136, 1149, 1150, 1157, ! 1160, 1162, 1164, 1167, 1171, 1174, 1177, 1180, 1184, 1191, ! 1200, 1211, 1224, 1228, 1233, 1235, 1239, 1245, 1248, 1254, ! 1255, 1257, 1258, 1260, 1261, 1263, 1265, 1269, 1274, 1276, ! 1280, 1281, 1284, 1287, 1288, 1293, 1296, 1297, 1299, 1301, ! 1305, 1307, 1311, 1316, 1321, 1326, 1331, 1336, 1337, 1340, ! 1342, 1345, 1347, 1351, 1353, 1357 }; static const short yyrhs[] = { -1, ! 89, 0, 0, 90, 92, 0, 0, 89, 91, 92, ! 0, 94, 0, 93, 0, 27, 63, 103, 80, 81, ! 0, 254, 92, 0, 124, 138, 81, 0, 131, 124, ! 138, 81, 0, 127, 124, 137, 81, 0, 131, 81, ! 0, 127, 81, 0, 1, 81, 0, 1, 82, 0, ! 81, 0, 0, 0, 127, 124, 166, 95, 119, 96, ! 218, 219, 207, 0, 127, 124, 166, 1, 0, 0, ! 0, 131, 124, 169, 97, 119, 98, 218, 219, 207, ! 0, 131, 124, 169, 1, 0, 0, 0, 124, 169, ! 99, 119, 100, 218, 219, 207, 0, 124, 169, 1, ! 0, 3, 0, 4, 0, 47, 0, 53, 0, 52, ! 0, 58, 0, 59, 0, 83, 0, 84, 0, 105, ! 0, 0, 105, 0, 110, 0, 105, 85, 110, 0, ! 116, 0, 54, 109, 0, 254, 109, 0, 102, 109, ! 0, 44, 101, 0, 107, 106, 0, 107, 63, 187, ! 80, 0, 108, 106, 0, 108, 63, 187, 80, 0, ! 33, 109, 0, 34, 109, 0, 11, 0, 29, 0, ! 106, 0, 63, 187, 80, 109, 0, 109, 0, 110, ! 52, 110, 0, 110, 53, 110, 0, 110, 54, 110, ! 0, 110, 55, 110, 0, 110, 56, 110, 0, 110, ! 50, 110, 0, 110, 51, 110, 0, 110, 49, 110, ! 0, 110, 48, 110, 0, 110, 47, 110, 0, 110, ! 45, 110, 0, 110, 46, 110, 0, 0, 110, 44, ! 111, 110, 0, 0, 110, 43, 112, 110, 0, 0, ! 0, 110, 41, 113, 103, 42, 114, 110, 0, 0, ! 110, 41, 115, 42, 110, 0, 110, 40, 110, 0, ! 110, 39, 110, 0, 3, 0, 8, 0, 118, 0, ! 0, 63, 187, 80, 86, 117, 152, 82, 0, 63, ! 103, 80, 0, 63, 1, 80, 0, 211, 209, 80, ! 0, 211, 1, 80, 0, 116, 63, 104, 80, 0, ! 35, 63, 110, 85, 187, 80, 0, 116, 64, 103, ! 87, 0, 116, 62, 101, 0, 116, 61, 101, 0, ! 116, 58, 0, 116, 59, 0, 9, 0, 118, 9, ! 0, 0, 121, 0, 121, 10, 0, 218, 219, 122, ! 0, 120, 0, 199, 0, 121, 120, 0, 120, 199, ! 0, 129, 124, 137, 81, 0, 132, 124, 138, 81, ! 0, 129, 81, 0, 132, 81, 0, 218, 219, 126, ! 0, 0, 0, 127, 124, 137, 81, 0, 131, 124, ! 138, 81, 0, 127, 124, 160, 0, 131, 124, 163, ! 0, 127, 81, 0, 131, 81, 0, 254, 126, 0, ! 135, 128, 0, 131, 135, 128, 0, 0, 128, 136, ! 0, 128, 5, 0, 128, 145, 0, 135, 130, 0, ! 132, 135, 130, 0, 0, 130, 136, 0, 130, 5, ! 0, 132, 0, 145, 0, 131, 132, 0, 131, 145, ! 0, 7, 0, 5, 0, 132, 7, 0, 132, 5, ! 0, 135, 134, 0, 190, 135, 134, 0, 0, 134, ! 136, 0, 6, 0, 173, 0, 4, 0, 28, 63, ! 103, 80, 0, 28, 63, 187, 80, 0, 6, 0, ! 7, 0, 173, 0, 140, 0, 137, 85, 140, 0, ! 142, 0, 138, 85, 140, 0, 0, 27, 63, 118, ! 80, 0, 0, 166, 139, 144, 40, 141, 150, 0, ! 166, 139, 144, 0, 0, 169, 139, 144, 40, 143, ! 150, 0, 169, 139, 144, 0, 0, 145, 0, 146, ! 0, 145, 146, 0, 30, 63, 63, 147, 80, 80, ! 0, 148, 0, 147, 85, 148, 0, 0, 149, 0, ! 149, 63, 3, 80, 0, 149, 63, 3, 85, 105, ! 80, 0, 149, 63, 104, 80, 0, 101, 0, 5, ! 0, 6, 0, 7, 0, 110, 0, 0, 86, 151, ! 152, 82, 0, 1, 0, 0, 153, 178, 0, 154, ! 0, 153, 85, 154, 0, 158, 40, 156, 0, 159, ! 156, 0, 0, 101, 42, 155, 156, 0, 156, 0, ! 0, 86, 157, 152, 82, 0, 110, 0, 1, 0, ! 159, 0, 158, 159, 0, 62, 101, 0, 64, 110, ! 10, 110, 87, 0, 64, 110, 87, 0, 0, 0, ! 166, 161, 119, 162, 218, 219, 212, 0, 0, 0, ! 169, 164, 119, 165, 218, 219, 212, 0, 167, 0, ! 169, 0, 63, 167, 80, 0, 167, 63, 249, 0, ! 167, 64, 103, 87, 0, 167, 64, 87, 0, 54, ! 191, 167, 0, 145, 125, 167, 0, 4, 0, 168, ! 63, 249, 0, 168, 64, 54, 87, 0, 168, 64, ! 103, 87, 0, 168, 64, 87, 0, 54, 191, 168, ! 0, 145, 125, 168, 0, 4, 0, 169, 63, 249, ! 0, 63, 169, 80, 0, 54, 191, 169, 0, 169, ! 64, 54, 87, 0, 169, 64, 103, 87, 0, 169, ! 64, 87, 0, 145, 125, 169, 0, 3, 0, 13, ! 0, 13, 145, 0, 14, 0, 14, 145, 0, 12, ! 0, 12, 145, 0, 0, 170, 101, 86, 174, 180, ! 82, 144, 0, 170, 86, 180, 82, 144, 0, 170, ! 101, 0, 0, 171, 101, 86, 175, 180, 82, 144, ! 0, 171, 86, 180, 82, 144, 0, 171, 101, 0, ! 0, 172, 101, 86, 176, 185, 179, 82, 144, 0, ! 0, 172, 86, 177, 185, 179, 82, 144, 0, 172, ! 101, 0, 0, 85, 0, 0, 85, 0, 181, 0, ! 181, 182, 0, 0, 181, 182, 81, 0, 181, 81, ! 0, 133, 124, 183, 0, 133, 124, 218, 219, 144, ! 0, 190, 124, 183, 0, 190, 0, 1, 0, 254, ! 182, 0, 184, 0, 183, 85, 184, 0, 218, 219, ! 166, 144, 0, 218, 219, 166, 42, 110, 144, 0, ! 218, 219, 42, 110, 144, 0, 186, 0, 185, 85, ! 186, 0, 1, 0, 101, 0, 101, 40, 110, 0, ! 0, 133, 188, 189, 0, 190, 189, 0, 0, 192, ! 0, 7, 0, 190, 7, 0, 0, 191, 7, 0, ! 63, 192, 80, 0, 54, 191, 192, 0, 54, 191, ! 0, 192, 63, 242, 0, 192, 64, 103, 87, 0, ! 192, 64, 87, 0, 63, 242, 0, 64, 103, 87, ! 0, 64, 87, 0, 145, 125, 192, 0, 194, 0, ! 195, 0, 196, 0, 197, 0, 222, 0, 194, 222, ! 0, 195, 222, 0, 196, 222, 0, 197, 222, 0, ! 123, 0, 194, 123, 0, 195, 123, 0, 197, 123, ! 0, 223, 0, 194, 223, 0, 195, 223, 0, 196, ! 223, 0, 197, 223, 0, 199, 0, 198, 199, 0, ! 194, 0, 195, 0, 196, 0, 197, 0, 1, 81, ! 0, 0, 0, 0, 0, 0, 205, 0, 206, 0, ! 205, 206, 0, 32, 253, 81, 0, 212, 0, 1, ! 212, 0, 86, 0, 82, 0, 200, 204, 210, 82, ! 201, 0, 193, 0, 1, 0, 63, 86, 0, 208, ! 209, 0, 214, 221, 0, 214, 1, 0, 0, 15, ! 215, 63, 103, 80, 0, 0, 18, 217, 221, 17, ! 0, 0, 0, 222, 0, 223, 220, 0, 202, 220, ! 203, 0, 218, 219, 234, 0, 218, 219, 235, 0, ! 0, 213, 16, 225, 221, 0, 213, 0, 213, 16, ! 1, 0, 0, 0, 17, 226, 63, 103, 80, 227, ! 221, 0, 216, 63, 103, 80, 81, 0, 216, 1, ! 0, 0, 0, 0, 0, 19, 228, 63, 233, 229, ! 237, 81, 230, 237, 80, 231, 221, 0, 0, 20, ! 63, 103, 80, 232, 221, 0, 237, 81, 0, 126, ! 0, 212, 0, 103, 81, 0, 202, 224, 203, 0, ! 23, 81, 0, 24, 81, 0, 25, 81, 0, 25, ! 103, 81, 0, 27, 236, 63, 103, 80, 81, 0, ! 27, 236, 63, 103, 42, 238, 80, 81, 0, 27, ! 236, 63, 103, 42, 238, 42, 238, 80, 81, 0, ! 27, 236, 63, 103, 42, 238, 42, 238, 42, 241, ! 80, 81, 0, 26, 101, 81, 0, 26, 54, 103, ! 81, 0, 81, 0, 21, 110, 42, 0, 21, 110, ! 10, 110, 42, 0, 22, 42, 0, 101, 218, 219, ! 42, 144, 0, 0, 7, 0, 0, 103, 0, 0, ! 239, 0, 240, 0, 239, 85, 240, 0, 9, 63, ! 103, 80, 0, 118, 0, 241, 85, 118, 0, 0, ! 243, 244, 0, 246, 80, 0, 0, 247, 81, 245, ! 244, 0, 1, 80, 0, 0, 10, 0, 247, 0, ! 247, 85, 10, 0, 248, 0, 247, 85, 248, 0, ! 127, 124, 168, 144, 0, 127, 124, 169, 144, 0, ! 127, 124, 189, 144, 0, 131, 124, 169, 144, 0, ! 131, 124, 189, 144, 0, 0, 250, 251, 0, 244, ! 0, 252, 80, 0, 3, 0, 252, 85, 3, 0, ! 101, 0, 253, 85, 101, 0, 31, 0 }; #endif #if YYDEBUG != 0 static const short yyrline[] = { 0, ! 245, 250, 264, 266, 266, 267, 269, 271, 272, 280, ! 284, 294, 298, 302, 304, 306, 307, 308, 313, 320, ! 321, 328, 332, 338, 339, 346, 350, 356, 357, 364, ! 370, 372, 375, 377, 379, 384, 386, 388, 390, 394, ! 398, 401, 404, 407, 411, 413, 416, 419, 423, 451, ! 457, 460, 463, 466, 468, 472, 476, 480, 482, 494, ! 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, ! 516, 518, 520, 524, 526, 530, 532, 535, 539, 541, ! 548, 551, 559, 570, 577, 578, 580, 584, 609, 615, ! 617, 633, 640, 642, 644, 646, 650, 656, 658, 663, ! 665, 682, 684, 685, 695, 700, 702, 703, 704, 711, ! 716, 720, 723, 731, 740, 750, 754, 759, 763, 767, ! 771, 773, 775, 784, 787, 791, 793, 795, 800, 804, ! 807, 811, 814, 816, 828, 831, 833, 835, 839, 843, ! 845, 848, 861, 864, 868, 870, 878, 879, 880, 884, ! 886, 892, 893, 894, 897, 899, 902, 904, 907, 910, ! 916, 923, 925, 932, 939, 942, 949, 952, 956, 959, ! 963, 968, 971, 975, 978, 980, 982, 984, 991, 993, ! 994, 995, 1000, 1002, 1004, 1006, 1011, 1015, 1018, 1020, ! 1025, 1029, 1032, 1037, 1037, 1040, 1043, 1045, 1047, 1050, ! 1052, 1055, 1061, 1065, 1069, 1083, 1090, 1099, 1113, 1120, ! 1132, 1134, 1139, 1142, 1147, 1149, 1151, 1158, 1160, 1168, ! 1174, 1179, 1181, 1183, 1190, 1192, 1198, 1204, 1206, 1208, ! 1213, 1215, 1222, 1224, 1227, 1230, 1234, 1237, 1241, 1244, ! 1248, 1253, 1255, 1259, 1261, 1263, 1265, 1269, 1271, 1273, ! 1276, 1278, 1281, 1289, 1291, 1294, 1296, 1301, 1304, 1309, ! 1311, 1313, 1327, 1333, 1346, 1351, 1356, 1358, 1363, 1365, ! 1369, 1373, 1377, 1387, 1389, 1394, 1399, 1402, 1406, 1410, ! 1411, 1415, 1418, 1421, 1424, 1428, 1431, 1435, 1439, 1441, ! 1443, 1445, 1447, 1449, 1451, 1453, 1457, 1467, 1469, 1470, ! 1474, 1477, 1479, 1480, 1481, 1482, 1485, 1487, 1490, 1491, ! 1494, 1496, 1497, 1498, 1499, 1502, 1504, 1507, 1509, 1510, ! 1511, 1514, 1517, 1524, 1528, 1544, 1559, 1561, 1566, 1568, ! 1571, 1585, 1588, 1591, 1594, 1596, 1603, 1605, 1608, 1625, ! 1631, 1637, 1640, 1651, 1662, 1674, 1682, 1688, 1694, 1696, ! 1700, 1706, 1720, 1729, 1734, 1738, 1750, 1760, 1763, 1769, ! 1770, 1773, 1775, 1779, 1782, 1785, 1788, 1789, 1793, 1796, ! 1799, 1804, 1807, 1810, 1814, 1817, 1820, 1823, 1826, 1849, ! 1853, 1858, 1862, 1874, 1880, 1888, 1891, 1894, 1897, 1912, ! 1916, 1920, 1923, 1928, 1930, 1933, 1935, 1939, 1944, 1947, ! 1953, 1958, 1963, 1965, 1974, 1975, 1981, 1983, 1993, 1995, ! 1999, 2002, 2008, 2017, 2025, 2033, 2042, 2055, 2060, 2065, ! 2067, 2076, 2079, 2084, 2087, 2091 }; #endif --- 235,542 ---- 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, ! 37, 38, 39, 40, 41, 42, 43, 47, 48, 52, ! 53, 54, 55, 61, 62, 63, 64, 65, 69, 70, ! 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, ! 81, 82 }; #if YYDEBUG != 0 static const short yyprhs[] = { 0, 0, 1, 3, 4, 7, 8, 12, 14, 16, 22, ! 25, 29, 34, 39, 42, 45, 48, 50, 51, 52, ! 62, 67, 68, 69, 79, 84, 85, 86, 95, 99, ! 101, 103, 105, 107, 109, 111, 113, 115, 117, 119, ! 120, 122, 124, 128, 130, 133, 136, 139, 142, 145, ! 150, 153, 158, 161, 164, 166, 168, 170, 175, 177, ! 181, 185, 189, 193, 197, 201, 205, 209, 213, 217, ! 221, 225, 226, 231, 232, 237, 238, 239, 247, 248, ! 254, 258, 262, 264, 266, 268, 270, 271, 279, 283, ! 287, 291, 295, 300, 307, 316, 323, 328, 332, 336, ! 339, 342, 344, 347, 348, 350, 353, 357, 359, 361, ! 364, 367, 372, 377, 380, 383, 387, 388, 390, 395, ! 400, 404, 408, 411, 414, 416, 419, 422, 425, 428, ! 431, 433, 436, 438, 441, 444, 447, 450, 453, 456, ! 458, 461, 464, 467, 470, 473, 476, 479, 482, 485, ! 488, 491, 494, 497, 500, 503, 506, 508, 511, 514, ! 517, 520, 523, 526, 529, 532, 535, 538, 541, 544, ! 547, 550, 553, 556, 559, 562, 565, 568, 571, 574, ! 577, 580, 583, 586, 589, 592, 595, 598, 601, 604, ! 607, 610, 613, 616, 619, 622, 625, 628, 631, 634, ! 637, 640, 642, 644, 646, 648, 650, 652, 654, 656, ! 658, 660, 662, 664, 666, 668, 670, 672, 674, 676, ! 678, 680, 682, 684, 686, 688, 690, 692, 694, 696, ! 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, ! 718, 720, 722, 724, 726, 728, 730, 732, 734, 736, ! 738, 740, 742, 744, 746, 748, 750, 752, 753, 755, ! 757, 759, 761, 763, 765, 767, 769, 774, 779, 781, ! 786, 788, 793, 794, 799, 800, 807, 811, 812, 819, ! 823, 824, 826, 828, 831, 838, 840, 844, 845, 847, ! 852, 859, 864, 866, 868, 870, 872, 874, 875, 880, ! 882, 883, 886, 888, 892, 896, 899, 900, 905, 907, ! 908, 913, 915, 917, 919, 922, 925, 931, 935, 936, ! 937, 945, 946, 947, 955, 957, 959, 964, 968, 971, ! 975, 977, 979, 981, 985, 988, 990, 994, 997, 1001, ! 1005, 1010, 1014, 1019, 1023, 1026, 1028, 1030, 1033, 1035, ! 1038, 1040, 1043, 1044, 1052, 1058, 1059, 1067, 1073, 1074, ! 1083, 1084, 1092, 1095, 1098, 1101, 1102, 1104, 1105, 1107, ! 1109, 1112, 1113, 1117, 1120, 1124, 1129, 1133, 1135, 1137, ! 1140, 1142, 1147, 1149, 1154, 1159, 1166, 1172, 1177, 1184, ! 1190, 1192, 1196, 1198, 1200, 1204, 1205, 1209, 1210, 1212, ! 1213, 1215, 1218, 1220, 1222, 1224, 1228, 1231, 1235, 1240, ! 1244, 1247, 1250, 1252, 1256, 1261, 1264, 1268, 1272, 1277, ! 1282, 1288, 1294, 1296, 1298, 1300, 1302, 1304, 1307, 1310, ! 1313, 1316, 1318, 1321, 1324, 1327, 1329, 1332, 1335, 1338, ! 1341, 1343, 1346, 1348, 1350, 1352, 1354, 1357, 1358, 1359, ! 1360, 1361, 1362, 1364, 1366, 1369, 1373, 1375, 1378, 1380, ! 1382, 1388, 1390, 1392, 1395, 1398, 1401, 1404, 1405, 1411, ! 1412, 1417, 1418, 1419, 1421, 1424, 1428, 1432, 1436, 1437, ! 1442, 1444, 1448, 1449, 1450, 1458, 1464, 1467, 1468, 1469, ! 1470, 1471, 1484, 1485, 1492, 1495, 1497, 1499, 1502, 1506, ! 1509, 1512, 1515, 1519, 1526, 1535, 1546, 1559, 1563, 1568, ! 1570, 1574, 1580, 1583, 1589, 1590, 1592, 1593, 1595, 1596, ! 1598, 1600, 1604, 1609, 1617, 1619, 1623, 1624, 1628, 1631, ! 1632, 1633, 1640, 1643, 1644, 1646, 1648, 1652, 1654, 1658, ! 1663, 1668, 1672, 1677, 1681, 1686, 1691, 1695, 1700, 1704, ! 1706, 1707, 1711, 1713, 1716, 1718, 1722, 1724, 1728 }; static const short yyrhs[] = { -1, ! 92, 0, 0, 93, 95, 0, 0, 92, 94, 95, ! 0, 97, 0, 96, 0, 27, 67, 106, 83, 84, ! 0, 288, 95, 0, 127, 161, 84, 0, 147, 127, ! 161, 84, 0, 146, 127, 160, 84, 0, 153, 84, ! 0, 1, 84, 0, 1, 85, 0, 84, 0, 0, ! 0, 146, 127, 189, 98, 122, 99, 249, 250, 238, ! 0, 146, 127, 189, 1, 0, 0, 0, 147, 127, ! 194, 100, 122, 101, 249, 250, 238, 0, 147, 127, ! 194, 1, 0, 0, 0, 127, 194, 102, 122, 103, ! 249, 250, 238, 0, 127, 194, 1, 0, 3, 0, ! 4, 0, 51, 0, 57, 0, 56, 0, 62, 0, ! 63, 0, 86, 0, 87, 0, 108, 0, 0, 108, ! 0, 113, 0, 108, 88, 113, 0, 119, 0, 58, ! 112, 0, 288, 112, 0, 105, 112, 0, 48, 104, ! 0, 110, 109, 0, 110, 67, 215, 83, 0, 111, ! 109, 0, 111, 67, 215, 83, 0, 33, 112, 0, ! 34, 112, 0, 11, 0, 29, 0, 109, 0, 67, ! 215, 83, 112, 0, 112, 0, 113, 56, 113, 0, ! 113, 57, 113, 0, 113, 58, 113, 0, 113, 59, ! 113, 0, 113, 60, 113, 0, 113, 54, 113, 0, ! 113, 55, 113, 0, 113, 53, 113, 0, 113, 52, ! 113, 0, 113, 51, 113, 0, 113, 49, 113, 0, ! 113, 50, 113, 0, 0, 113, 48, 114, 113, 0, ! 0, 113, 47, 115, 113, 0, 0, 0, 113, 45, ! 116, 106, 46, 117, 113, 0, 0, 113, 45, 118, ! 46, 113, 0, 113, 44, 113, 0, 113, 43, 113, ! 0, 3, 0, 8, 0, 121, 0, 42, 0, 0, ! 67, 215, 83, 89, 120, 175, 85, 0, 67, 106, ! 83, 0, 67, 1, 83, 0, 242, 240, 83, 0, ! 242, 1, 83, 0, 119, 67, 107, 83, 0, 35, ! 67, 113, 88, 215, 83, 0, 36, 67, 113, 88, ! 113, 88, 113, 83, 0, 37, 67, 215, 88, 215, ! 83, 0, 119, 68, 106, 90, 0, 119, 66, 104, ! 0, 119, 65, 104, 0, 119, 62, 0, 119, 63, ! 0, 9, 0, 121, 9, 0, 0, 124, 0, 124, ! 10, 0, 249, 250, 125, 0, 123, 0, 230, 0, ! 124, 123, 0, 123, 230, 0, 148, 127, 160, 84, ! 0, 149, 127, 161, 84, 0, 148, 84, 0, 149, ! 84, 0, 249, 250, 129, 0, 0, 167, 0, 146, ! 127, 160, 84, 0, 147, 127, 161, 84, 0, 146, ! 127, 183, 0, 147, 127, 186, 0, 153, 84, 0, ! 288, 129, 0, 7, 0, 130, 7, 0, 131, 7, ! 0, 130, 168, 0, 132, 7, 0, 133, 7, 0, ! 168, 0, 132, 168, 0, 155, 0, 134, 7, 0, ! 135, 7, 0, 134, 157, 0, 135, 157, 0, 130, ! 155, 0, 131, 155, 0, 156, 0, 134, 168, 0, ! 134, 158, 0, 135, 158, 0, 130, 156, 0, 131, ! 156, 0, 136, 7, 0, 137, 7, 0, 136, 157, ! 0, 137, 157, 0, 132, 155, 0, 133, 155, 0, ! 136, 168, 0, 136, 158, 0, 137, 158, 0, 132, ! 156, 0, 133, 156, 0, 5, 0, 138, 7, 0, ! 139, 7, 0, 130, 5, 0, 131, 5, 0, 138, ! 5, 0, 139, 5, 0, 138, 168, 0, 140, 7, ! 0, 141, 7, 0, 132, 5, 0, 133, 5, 0, ! 140, 5, 0, 141, 5, 0, 140, 168, 0, 142, ! 7, 0, 143, 7, 0, 142, 157, 0, 143, 157, ! 0, 138, 155, 0, 139, 155, 0, 134, 5, 0, ! 135, 5, 0, 142, 5, 0, 143, 5, 0, 142, ! 168, 0, 142, 158, 0, 143, 158, 0, 138, 156, ! 0, 139, 156, 0, 144, 7, 0, 145, 7, 0, ! 144, 157, 0, 145, 157, 0, 140, 155, 0, 141, ! 155, 0, 136, 5, 0, 137, 5, 0, 144, 5, ! 0, 145, 5, 0, 144, 168, 0, 144, 158, 0, ! 145, 158, 0, 140, 156, 0, 141, 156, 0, 134, ! 0, 135, 0, 136, 0, 137, 0, 142, 0, 143, ! 0, 144, 0, 145, 0, 130, 0, 131, 0, 132, ! 0, 133, 0, 138, 0, 139, 0, 140, 0, 141, ! 0, 134, 0, 135, 0, 142, 0, 143, 0, 130, ! 0, 131, 0, 138, 0, 139, 0, 134, 0, 135, ! 0, 136, 0, 137, 0, 130, 0, 131, 0, 132, ! 0, 133, 0, 134, 0, 135, 0, 136, 0, 137, ! 0, 130, 0, 131, 0, 132, 0, 133, 0, 130, ! 0, 131, 0, 132, 0, 133, 0, 134, 0, 135, ! 0, 136, 0, 137, 0, 138, 0, 139, 0, 140, ! 0, 141, 0, 142, 0, 143, 0, 144, 0, 145, ! 0, 0, 151, 0, 157, 0, 159, 0, 158, 0, ! 6, 0, 203, 0, 198, 0, 4, 0, 28, 67, ! 106, 83, 0, 28, 67, 215, 83, 0, 163, 0, ! 160, 88, 128, 163, 0, 165, 0, 161, 88, 128, ! 165, 0, 0, 27, 67, 121, 83, 0, 0, 189, ! 162, 167, 44, 164, 173, 0, 189, 162, 167, 0, ! 0, 194, 162, 167, 44, 166, 173, 0, 194, 162, ! 167, 0, 0, 168, 0, 169, 0, 168, 169, 0, ! 30, 67, 67, 170, 83, 83, 0, 171, 0, 170, ! 88, 171, 0, 0, 172, 0, 172, 67, 3, 83, ! 0, 172, 67, 3, 88, 108, 83, 0, 172, 67, ! 107, 83, 0, 104, 0, 5, 0, 6, 0, 7, ! 0, 113, 0, 0, 89, 174, 175, 85, 0, 1, ! 0, 0, 176, 204, 0, 177, 0, 176, 88, 177, ! 0, 181, 44, 179, 0, 182, 179, 0, 0, 104, ! 46, 178, 179, 0, 179, 0, 0, 89, 180, 175, ! 85, 0, 113, 0, 1, 0, 182, 0, 181, 182, ! 0, 66, 104, 0, 68, 113, 10, 113, 90, 0, ! 68, 113, 90, 0, 0, 0, 189, 184, 122, 185, ! 249, 250, 243, 0, 0, 0, 194, 187, 122, 188, ! 249, 250, 243, 0, 190, 0, 194, 0, 67, 167, ! 190, 83, 0, 190, 67, 283, 0, 190, 223, 0, ! 58, 154, 190, 0, 4, 0, 192, 0, 193, 0, ! 192, 67, 283, 0, 192, 223, 0, 4, 0, 193, ! 67, 283, 0, 193, 223, 0, 58, 154, 192, 0, ! 58, 154, 193, 0, 67, 167, 193, 83, 0, 194, ! 67, 283, 0, 67, 167, 194, 83, 0, 58, 154, ! 194, 0, 194, 223, 0, 3, 0, 13, 0, 13, ! 168, 0, 14, 0, 14, 168, 0, 12, 0, 12, ! 168, 0, 0, 195, 104, 89, 199, 206, 85, 167, ! 0, 195, 89, 206, 85, 167, 0, 0, 196, 104, ! 89, 200, 206, 85, 167, 0, 196, 89, 206, 85, ! 167, 0, 0, 197, 104, 89, 201, 213, 205, 85, ! 167, 0, 0, 197, 89, 202, 213, 205, 85, 167, ! 0, 195, 104, 0, 196, 104, 0, 197, 104, 0, ! 0, 88, 0, 0, 88, 0, 207, 0, 207, 208, ! 0, 0, 207, 208, 84, 0, 207, 84, 0, 150, ! 127, 209, 0, 150, 127, 249, 250, 0, 151, 127, ! 210, 0, 151, 0, 1, 0, 288, 208, 0, 211, ! 0, 209, 88, 128, 211, 0, 212, 0, 210, 88, ! 128, 212, 0, 249, 250, 189, 167, 0, 249, 250, ! 189, 46, 113, 167, 0, 249, 250, 46, 113, 167, ! 0, 249, 250, 194, 167, 0, 249, 250, 194, 46, ! 113, 167, 0, 249, 250, 46, 113, 167, 0, 214, ! 0, 213, 88, 214, 0, 1, 0, 104, 0, 104, ! 44, 113, 0, 0, 152, 216, 217, 0, 0, 219, ! 0, 0, 219, 0, 220, 168, 0, 221, 0, 220, ! 0, 222, 0, 58, 154, 220, 0, 58, 154, 0, ! 58, 154, 221, 0, 67, 167, 219, 83, 0, 222, ! 67, 273, 0, 222, 223, 0, 67, 273, 0, 223, ! 0, 68, 106, 90, 0, 68, 152, 106, 90, 0, ! 68, 90, 0, 68, 152, 90, 0, 68, 58, 90, ! 0, 68, 152, 58, 90, 0, 68, 5, 106, 90, ! 0, 68, 5, 152, 106, 90, 0, 68, 152, 5, ! 106, 90, 0, 225, 0, 226, 0, 227, 0, 228, ! 0, 253, 0, 225, 253, 0, 226, 253, 0, 227, ! 253, 0, 228, 253, 0, 126, 0, 225, 126, 0, ! 226, 126, 0, 228, 126, 0, 254, 0, 225, 254, ! 0, 226, 254, 0, 227, 254, 0, 228, 254, 0, ! 230, 0, 229, 230, 0, 225, 0, 226, 0, 227, ! 0, 228, 0, 1, 84, 0, 0, 0, 0, 0, ! 0, 236, 0, 237, 0, 236, 237, 0, 32, 287, ! 84, 0, 243, 0, 1, 243, 0, 89, 0, 85, ! 0, 231, 235, 241, 85, 232, 0, 224, 0, 1, ! 0, 67, 89, 0, 239, 240, 0, 245, 252, 0, ! 245, 1, 0, 0, 15, 246, 67, 106, 83, 0, ! 0, 18, 248, 252, 17, 0, 0, 0, 253, 0, ! 254, 251, 0, 233, 251, 234, 0, 249, 250, 265, ! 0, 249, 250, 266, 0, 0, 244, 16, 256, 252, ! 0, 244, 0, 244, 16, 1, 0, 0, 0, 17, ! 257, 67, 106, 83, 258, 252, 0, 247, 67, 106, ! 83, 84, 0, 247, 1, 0, 0, 0, 0, 0, ! 19, 259, 67, 264, 260, 268, 84, 261, 268, 83, ! 262, 252, 0, 0, 20, 67, 106, 83, 263, 252, ! 0, 268, 84, 0, 129, 0, 243, 0, 106, 84, ! 0, 233, 255, 234, 0, 23, 84, 0, 24, 84, ! 0, 25, 84, 0, 25, 106, 84, 0, 27, 267, ! 67, 106, 83, 84, 0, 27, 267, 67, 106, 46, ! 269, 83, 84, 0, 27, 267, 67, 106, 46, 269, ! 46, 269, 83, 84, 0, 27, 267, 67, 106, 46, ! 269, 46, 269, 46, 272, 83, 84, 0, 26, 104, ! 84, 0, 26, 58, 106, 84, 0, 84, 0, 21, ! 113, 46, 0, 21, 113, 10, 113, 46, 0, 22, ! 46, 0, 104, 249, 250, 46, 167, 0, 0, 7, ! 0, 0, 106, 0, 0, 270, 0, 271, 0, 270, ! 88, 271, 0, 9, 67, 106, 83, 0, 68, 104, ! 90, 9, 67, 106, 83, 0, 121, 0, 272, 88, ! 121, 0, 0, 167, 274, 275, 0, 278, 83, 0, ! 0, 0, 279, 84, 276, 167, 277, 275, 0, 1, ! 83, 0, 0, 10, 0, 279, 0, 279, 88, 10, ! 0, 281, 0, 279, 88, 280, 0, 146, 127, 191, ! 167, 0, 146, 127, 194, 167, 0, 146, 127, 218, ! 0, 147, 127, 194, 167, 0, 147, 127, 218, 0, ! 148, 282, 191, 167, 0, 148, 282, 194, 167, 0, ! 148, 282, 218, 0, 149, 282, 194, 167, 0, 149, ! 282, 218, 0, 127, 0, 0, 167, 284, 285, 0, ! 275, 0, 286, 83, 0, 3, 0, 286, 88, 3, ! 0, 104, 0, 287, 88, 104, 0, 31, 0 }; #endif #if YYDEBUG != 0 static const short yyrline[] = { 0, ! 286, 291, 306, 308, 308, 309, 311, 313, 314, 322, ! 326, 334, 336, 338, 340, 341, 342, 347, 354, 355, ! 360, 362, 368, 369, 374, 376, 382, 383, 388, 392, ! 394, 397, 399, 401, 406, 408, 410, 412, 416, 420, ! 423, 426, 429, 433, 435, 438, 441, 445, 462, 468, ! 471, 474, 477, 479, 483, 487, 491, 493, 497, 499, ! 501, 503, 505, 507, 509, 511, 513, 515, 517, 519, ! 521, 523, 527, 529, 533, 535, 538, 542, 544, 551, ! 554, 561, 571, 578, 579, 581, 583, 587, 596, 601, ! 603, 619, 626, 628, 631, 641, 651, 653, 657, 663, ! 665, 670, 672, 689, 691, 692, 702, 707, 709, 710, ! 711, 718, 721, 723, 726, 734, 743, 753, 758, 761, ! 763, 765, 767, 769, 825, 829, 832, 837, 843, 847, ! 852, 856, 861, 865, 868, 871, 874, 877, 880, 885, ! 889, 892, 895, 898, 901, 906, 910, 913, 916, 919, ! 922, 927, 931, 934, 937, 940, 945, 949, 952, 955, ! 961, 967, 973, 981, 987, 991, 994, 1000, 1006, 1012, ! 1020, 1026, 1030, 1033, 1036, 1039, 1042, 1045, 1051, 1057, ! 1063, 1071, 1075, 1078, 1081, 1084, 1089, 1093, 1096, 1099, ! 1102, 1105, 1108, 1114, 1120, 1126, 1134, 1138, 1141, 1144, ! 1147, 1153, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1164, ! 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1175, 1177, 1178, ! 1179, 1182, 1184, 1185, 1186, 1189, 1191, 1192, 1193, 1196, ! 1198, 1199, 1200, 1203, 1205, 1206, 1207, 1208, 1209, 1210, ! 1211, 1214, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, ! 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1234, 1237, 1262, ! 1264, 1267, 1271, 1274, 1277, 1281, 1286, 1288, 1294, 1296, ! 1299, 1301, 1304, 1307, 1313, 1320, 1322, 1329, 1336, 1338, ! 1345, 1348, 1352, 1355, 1359, 1364, 1367, 1371, 1374, 1376, ! 1378, 1380, 1387, 1389, 1390, 1391, 1396, 1398, 1400, 1402, ! 1407, 1411, 1414, 1416, 1421, 1425, 1428, 1433, 1433, 1436, ! 1439, 1441, 1443, 1446, 1448, 1451, 1457, 1461, 1465, 1479, ! 1486, 1495, 1509, 1516, 1528, 1530, 1535, 1538, 1543, 1545, ! 1547, 1554, 1556, 1559, 1565, 1567, 1570, 1576, 1578, 1580, ! 1582, 1589, 1595, 1597, 1599, 1601, 1604, 1607, 1611, 1614, ! 1618, 1621, 1631, 1636, 1638, 1642, 1644, 1646, 1650, 1652, ! 1655, 1657, 1662, 1665, 1667, 1675, 1677, 1680, 1682, 1687, ! 1690, 1695, 1697, 1699, 1704, 1708, 1718, 1721, 1726, 1728, ! 1733, 1735, 1739, 1741, 1745, 1749, 1753, 1758, 1762, 1766, ! 1776, 1778, 1783, 1788, 1791, 1795, 1800, 1803, 1806, 1809, ! 1814, 1818, 1824, 1826, 1829, 1831, 1835, 1838, 1842, 1845, ! 1847, 1849, 1851, 1857, 1860, 1862, 1864, 1866, 1868, 1870, ! 1874, 1878, 1890, 1892, 1893, 1897, 1900, 1902, 1903, 1904, ! 1905, 1908, 1910, 1913, 1914, 1917, 1919, 1920, 1921, 1922, ! 1925, 1927, 1930, 1932, 1933, 1934, 1937, 1940, 1947, 1952, ! 1968, 1983, 1985, 1990, 1992, 1995, 2009, 2012, 2015, 2019, ! 2021, 2028, 2030, 2033, 2051, 2058, 2064, 2067, 2078, 2089, ! 2101, 2109, 2115, 2121, 2123, 2127, 2133, 2147, 2156, 2161, ! 2165, 2177, 2187, 2190, 2196, 2197, 2200, 2202, 2206, 2209, ! 2212, 2215, 2216, 2220, 2223, 2226, 2231, 2234, 2237, 2241, ! 2244, 2247, 2250, 2253, 2257, 2261, 2266, 2270, 2282, 2288, ! 2296, 2299, 2302, 2305, 2320, 2324, 2328, 2331, 2336, 2338, ! 2341, 2343, 2347, 2350, 2354, 2357, 2366, 2372, 2377, 2379, ! 2388, 2391, 2392, 2398, 2400, 2410, 2412, 2416, 2419, 2425, ! 2431, 2436, 2439, 2445, 2452, 2458, 2463, 2466, 2472, 2477, ! 2486, 2492, 2497, 2499, 2516, 2519, 2524, 2527, 2531 }; #endif *************** static const char * const yytname[] = { *** 452,1310 **** "TYPENAME","SCSPEC","TYPESPEC","TYPE_QUAL","CONSTANT","STRING","ELLIPSIS","SIZEOF", "ENUM","STRUCT","UNION","IF","ELSE","WHILE","DO","FOR","SWITCH","CASE","DEFAULT", "BREAK","CONTINUE","RETURN","GOTO","ASM_KEYWORD","TYPEOF","ALIGNOF","ATTRIBUTE", ! "EXTENSION","LABEL","REALPART","IMAGPART","VA_ARG","PTR_VALUE","PTR_BASE","PTR_EXTENT", ! "ASSIGN","'='","'?'","':'","OROR","ANDAND","'|'","'^'","'&'","EQCOMPARE","ARITHCOMPARE", "LSHIFT","RSHIFT","'+'","'-'","'*'","'/'","'%'","UNARY","PLUSPLUS","MINUSMINUS", "HYPERUNARY","POINTSAT","'.'","'('","'['","INTERFACE","IMPLEMENTATION","END", "SELECTOR","DEFS","ENCODE","CLASSNAME","PUBLIC","PRIVATE","PROTECTED","PROTOCOL", ! "OBJECTNAME","CLASS","ALIAS","OBJC_STRING","')'","';'","'}'","'~'","'!'","','", ! "'{'","']'","program","extdefs","@1","@2","extdef","datadef","fndef","@3","@4", ! "@5","@6","@7","@8","identifier","unop","expr","exprlist","nonnull_exprlist", ! "unary_expr","sizeof","alignof","cast_expr","expr_no_commas","@9","@10","@11", ! "@12","@13","primary","@14","string","old_style_parm_decls","lineno_datadecl", ! "datadecls","datadecl","lineno_decl","setspecs","setattrs","decl","typed_declspecs", ! "reserved_declspecs","typed_declspecs_no_prefix_attr","reserved_declspecs_no_prefix_attr", ! "declmods","declmods_no_prefix_attr","typed_typespecs","reserved_typespecquals", ! "typespec","typespecqual_reserved","initdecls","notype_initdecls","maybeasm", ! "initdcl","@15","notype_initdcl","@16","maybe_attribute","attributes","attribute", ! "attribute_list","attrib","any_word","init","@17","initlist_maybe_comma","initlist1", ! "initelt","@18","initval","@19","designator_list","designator","nested_function", ! "@20","@21","notype_nested_function","@22","@23","declarator","after_type_declarator", ! "parm_declarator","notype_declarator","struct_head","union_head","enum_head", ! "structsp","@24","@25","@26","@27","maybecomma","maybecomma_warn","component_decl_list", ! "component_decl_list2","component_decl","components","component_declarator", ! "enumlist","enumerator","typename","@28","absdcl","nonempty_type_quals","type_quals", ! "absdcl1","stmts_and_decls","lineno_stmt_decl_or_labels_ending_stmt","lineno_stmt_decl_or_labels_ending_decl", ! "lineno_stmt_decl_or_labels_ending_label","lineno_stmt_decl_or_labels_ending_error", ! "lineno_stmt_decl_or_labels","errstmt","pushlevel","poplevel","c99_block_start", ! "c99_block_end","maybe_label_decls","label_decls","label_decl","compstmt_or_error", ! "compstmt_start","compstmt_nostart","compstmt_contents_nonempty","compstmt_primary_start", ! "compstmt","simple_if","if_prefix","@29","do_stmt_start","@30","save_filename", ! "save_lineno","lineno_labeled_stmt","c99_block_lineno_labeled_stmt","lineno_stmt", ! "lineno_label","select_or_iter_stmt","@31","@32","@33","@34","@35","@36","@37", ! "@38","for_init_stmt","stmt","label","maybe_type_qual","xexpr","asm_operands", ! "nonnull_asm_operands","asm_operand","asm_clobbers","parmlist","@39","parmlist_1", ! "@40","parmlist_2","parms","parm","parmlist_or_identifiers","@41","parmlist_or_identifiers_1", "identifiers","identifiers_or_typenames","extension", NULL }; #endif static const short yyr1[] = { 0, ! 88, 88, 90, 89, 91, 89, 92, 92, 92, 92, ! 93, 93, 93, 93, 93, 93, 93, 93, 95, 96, ! 94, 94, 97, 98, 94, 94, 99, 100, 94, 94, ! 101, 101, 102, 102, 102, 102, 102, 102, 102, 103, ! 104, 104, 105, 105, 106, 106, 106, 106, 106, 106, ! 106, 106, 106, 106, 106, 107, 108, 109, 109, 110, ! 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, ! 110, 110, 111, 110, 112, 110, 113, 114, 110, 115, ! 110, 110, 110, 116, 116, 116, 117, 116, 116, 116, ! 116, 116, 116, 116, 116, 116, 116, 116, 116, 118, ! 118, 119, 119, 119, 120, 121, 121, 121, 121, 122, ! 122, 122, 122, 123, 124, 125, 126, 126, 126, 126, ! 126, 126, 126, 127, 127, 128, 128, 128, 128, 129, ! 129, 130, 130, 130, 131, 131, 131, 131, 132, 132, ! 132, 132, 133, 133, 134, 134, 135, 135, 135, 135, ! 135, 136, 136, 136, 137, 137, 138, 138, 139, 139, ! 141, 140, 140, 143, 142, 142, 144, 144, 145, 145, ! 146, 147, 147, 148, 148, 148, 148, 148, 149, 149, ! 149, 149, 150, 151, 150, 150, 152, 152, 153, 153, ! 154, 154, 155, 154, 154, 157, 156, 156, 156, 158, ! 158, 159, 159, 159, 161, 162, 160, 164, 165, 163, ! 166, 166, 167, 167, 167, 167, 167, 167, 167, 168, ! 168, 168, 168, 168, 168, 168, 169, 169, 169, 169, ! 169, 169, 169, 169, 170, 170, 171, 171, 172, 172, ! 174, 173, 173, 173, 175, 173, 173, 173, 176, 173, ! 177, 173, 173, 178, 178, 179, 179, 180, 180, 181, ! 181, 181, 182, 182, 182, 182, 182, 182, 183, 183, ! 184, 184, 184, 185, 185, 185, 186, 186, 188, 187, ! 187, 189, 189, 190, 190, 191, 191, 192, 192, 192, ! 192, 192, 192, 192, 192, 192, 192, 193, 193, 193, ! 193, 194, 194, 194, 194, 194, 195, 195, 195, 195, ! 196, 196, 196, 196, 196, 197, 197, 198, 198, 198, ! 198, 199, 200, 201, 202, 203, 204, 204, 205, 205, ! 206, 207, 207, 208, 209, 209, 210, 210, 211, 212, ! 213, 213, 215, 214, 217, 216, 218, 219, 220, 220, ! 221, 222, 223, 225, 224, 224, 224, 226, 227, 224, ! 224, 224, 228, 229, 230, 231, 224, 232, 224, 233, ! 233, 234, 234, 234, 234, 234, 234, 234, 234, 234, ! 234, 234, 234, 234, 234, 235, 235, 235, 235, 236, ! 236, 237, 237, 238, 238, 239, 239, 240, 241, 241, ! 243, 242, 244, 245, 244, 244, 246, 246, 246, 246, ! 247, 247, 248, 248, 248, 248, 248, 250, 249, 251, ! 251, 252, 252, 253, 253, 254 }; static const short yyr2[] = { 0, 0, 1, 0, 2, 0, 3, 1, 1, 5, 2, ! 3, 4, 4, 2, 2, 2, 2, 1, 0, 0, ! 9, 4, 0, 0, 9, 4, 0, 0, 8, 3, ! 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ! 0, 1, 1, 3, 1, 2, 2, 2, 2, 2, ! 4, 2, 4, 2, 2, 1, 1, 1, 4, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, ! 3, 3, 0, 4, 0, 4, 0, 0, 7, 0, ! 5, 3, 3, 1, 1, 1, 0, 7, 3, 3, ! 3, 3, 4, 6, 4, 3, 3, 2, 2, 1, ! 2, 0, 1, 2, 3, 1, 1, 2, 2, 4, ! 4, 2, 2, 3, 0, 0, 4, 4, 3, 3, ! 2, 2, 2, 2, 3, 0, 2, 2, 2, 2, ! 3, 0, 2, 2, 1, 1, 2, 2, 1, 1, ! 2, 2, 2, 3, 0, 2, 1, 1, 1, 4, ! 4, 1, 1, 1, 1, 3, 1, 3, 0, 4, ! 0, 6, 3, 0, 6, 3, 0, 1, 1, 2, ! 6, 1, 3, 0, 1, 4, 6, 4, 1, 1, ! 1, 1, 1, 0, 4, 1, 0, 2, 1, 3, ! 3, 2, 0, 4, 1, 0, 4, 1, 1, 1, ! 2, 2, 5, 3, 0, 0, 7, 0, 0, 7, ! 1, 1, 3, 3, 4, 3, 3, 3, 1, 3, ! 4, 4, 3, 3, 3, 1, 3, 3, 3, 4, ! 4, 3, 3, 1, 1, 2, 1, 2, 1, 2, ! 0, 7, 5, 2, 0, 7, 5, 2, 0, 8, ! 0, 7, 2, 0, 1, 0, 1, 1, 2, 0, ! 3, 2, 3, 5, 3, 1, 1, 2, 1, 3, ! 4, 6, 5, 1, 3, 1, 1, 3, 0, 3, ! 2, 0, 1, 1, 2, 0, 2, 3, 3, 2, ! 3, 4, 3, 2, 3, 2, 3, 1, 1, 1, ! 1, 1, 2, 2, 2, 2, 1, 2, 2, 2, ! 1, 2, 2, 2, 2, 1, 2, 1, 1, 1, ! 1, 2, 0, 0, 0, 0, 0, 1, 1, 2, ! 3, 1, 2, 1, 1, 5, 1, 1, 2, 2, ! 2, 2, 0, 5, 0, 4, 0, 0, 1, 2, ! 3, 3, 3, 0, 4, 1, 3, 0, 0, 7, ! 5, 2, 0, 0, 0, 0, 12, 0, 6, 2, ! 1, 1, 2, 3, 2, 2, 2, 3, 6, 8, ! 10, 12, 3, 4, 1, 3, 5, 2, 5, 0, ! 1, 0, 1, 0, 1, 1, 3, 4, 1, 3, ! 0, 2, 2, 0, 4, 2, 0, 1, 1, 3, ! 1, 3, 4, 4, 4, 4, 4, 0, 2, 1, ! 2, 1, 3, 1, 3, 1 }; static const short yydefact[] = { 3, ! 5, 0, 0, 0, 149, 140, 147, 139, 239, 235, ! 237, 0, 0, 0, 426, 18, 4, 8, 7, 0, ! 115, 115, 135, 126, 136, 169, 0, 0, 0, 148, ! 0, 6, 16, 17, 240, 236, 238, 0, 0, 0, ! 234, 286, 0, 0, 157, 116, 0, 15, 0, 14, ! 0, 137, 126, 138, 142, 141, 124, 170, 31, 32, ! 260, 244, 260, 248, 251, 253, 10, 84, 85, 100, ! 56, 57, 0, 0, 0, 0, 33, 35, 34, 0, ! 36, 37, 0, 38, 39, 0, 0, 40, 58, 0, ! 0, 60, 43, 45, 86, 0, 0, 284, 0, 279, ! 145, 0, 282, 174, 0, 0, 11, 0, 0, 30, ! 0, 418, 0, 0, 167, 219, 286, 0, 0, 155, ! 116, 0, 211, 212, 0, 0, 125, 128, 152, 153, ! 127, 129, 154, 0, 0, 241, 0, 245, 0, 249, ! 54, 55, 0, 49, 46, 0, 339, 0, 0, 48, ! 0, 0, 0, 50, 0, 52, 0, 0, 77, 75, ! 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 0, 0, 0, 98, 99, 0, 0, 41, 0, 101, ! 0, 335, 327, 0, 47, 150, 282, 143, 151, 285, ! 286, 401, 0, 145, 116, 281, 283, 180, 181, 182, ! 179, 0, 172, 175, 287, 229, 228, 158, 159, 233, ! 0, 227, 0, 0, 232, 0, 0, 28, 0, 347, ! 107, 348, 166, 168, 0, 0, 13, 0, 0, 22, ! 0, 167, 418, 0, 12, 26, 0, 167, 267, 262, ! 115, 259, 115, 0, 260, 167, 260, 276, 277, 256, ! 274, 0, 0, 90, 89, 0, 9, 44, 0, 0, ! 83, 82, 0, 0, 0, 0, 71, 72, 70, 69, ! 68, 66, 67, 61, 62, 63, 64, 65, 97, 96, ! 0, 42, 0, 92, 0, 0, 328, 329, 91, 280, ! 146, 290, 0, 294, 0, 296, 0, 144, 0, 401, ! 0, 0, 174, 41, 0, 0, 422, 408, 115, 115, ! 420, 0, 409, 411, 419, 0, 230, 231, 322, 347, ! 109, 104, 108, 0, 164, 217, 213, 156, 218, 20, ! 163, 214, 216, 0, 24, 243, 347, 261, 347, 268, ! 0, 247, 0, 0, 257, 0, 256, 0, 87, 59, ! 51, 53, 0, 0, 76, 74, 93, 95, 424, 0, ! 338, 307, 337, 347, 347, 347, 347, 0, 316, 0, ! 348, 302, 311, 330, 289, 288, 402, 295, 297, 291, ! 293, 0, 171, 173, 84, 0, 160, 406, 282, 282, ! 403, 404, 0, 421, 0, 348, 105, 115, 115, 132, ! 0, 347, 161, 215, 347, 263, 269, 348, 265, 348, ! 167, 167, 278, 275, 167, 0, 0, 0, 78, 81, ! 331, 0, 308, 303, 312, 309, 304, 313, 348, 305, ! 314, 310, 306, 315, 317, 324, 325, 292, 176, 0, ! 178, 226, 286, 401, 116, 167, 167, 167, 286, 116, ! 167, 167, 0, 410, 412, 423, 0, 112, 0, 113, ! 0, 132, 130, 186, 184, 183, 165, 348, 0, 348, ! 347, 167, 0, 242, 246, 252, 167, 94, 199, 84, ! 0, 0, 196, 0, 198, 0, 254, 189, 195, 0, ! 0, 0, 425, 325, 336, 149, 0, 0, 0, 0, ! 0, 0, 390, 385, 334, 347, 0, 114, 115, 115, ! 0, 323, 372, 352, 353, 0, 0, 290, 0, 418, ! 0, 413, 414, 415, 290, 0, 416, 417, 405, 0, ! 29, 332, 0, 0, 159, 131, 134, 133, 0, 0, ! 162, 0, 270, 0, 264, 116, 167, 250, 202, 0, ! 0, 193, 88, 0, 188, 0, 201, 192, 79, 0, ! 388, 375, 376, 377, 0, 0, 0, 391, 0, 348, ! 373, 121, 0, 122, 0, 343, 358, 345, 363, 0, ! 356, 0, 0, 326, 340, 123, 177, 224, 225, 220, ! 0, 223, 0, 333, 110, 111, 0, 21, 25, 167, ! 0, 271, 0, 204, 0, 0, 190, 191, 0, 386, ! 378, 0, 383, 0, 0, 0, 119, 205, 0, 120, ! 208, 0, 0, 325, 0, 0, 0, 342, 347, 341, ! 362, 0, 374, 221, 222, 185, 273, 167, 0, 197, ! 194, 0, 384, 0, 167, 117, 0, 118, 0, 0, ! 0, 0, 392, 0, 357, 325, 326, 349, 347, 0, ! 272, 203, 387, 394, 0, 389, 206, 209, 0, 0, ! 346, 393, 371, 364, 0, 368, 355, 351, 350, 0, ! 0, 0, 395, 396, 379, 347, 347, 344, 359, 392, ! 370, 325, 361, 0, 394, 0, 0, 348, 348, 325, ! 0, 369, 0, 0, 380, 397, 0, 0, 360, 365, ! 398, 0, 0, 207, 210, 392, 399, 0, 381, 0, ! 0, 0, 366, 382, 400, 325, 367, 0, 0, 0 }; ! static const short yydefgoto[] = { 728, ! 1, 2, 3, 17, 18, 19, 231, 402, 237, 405, ! 114, 320, 484, 86, 148, 281, 88, 89, 90, 91, ! 92, 93, 266, 265, 263, 492, 264, 94, 418, 95, ! 218, 219, 220, 397, 362, 20, 229, 508, 309, 57, ! 398, 463, 310, 23, 100, 188, 24, 131, 119, 44, ! 115, 120, 469, 45, 401, 223, 224, 26, 202, 203, ! 204, 467, 539, 486, 487, 488, 606, 489, 551, 490, ! 491, 617, 647, 686, 620, 649, 687, 209, 123, 446, ! 124, 27, 28, 29, 30, 245, 247, 252, 139, 555, ! 346, 134, 135, 242, 406, 407, 250, 251, 102, 187, ! 196, 103, 105, 197, 363, 364, 365, 366, 367, 368, ! 221, 183, 495, 629, 633, 286, 287, 288, 531, 512, ! 184, 370, 96, 532, 581, 582, 622, 583, 624, 222, ! 324, 657, 630, 658, 659, 584, 656, 623, 700, 625, ! 690, 716, 726, 692, 674, 514, 515, 569, 675, 682, ! 683, 684, 718, 294, 295, 311, 453, 312, 313, 314, ! 212, 213, 315, 316, 360, 97 }; ! static const short yypact[] = { 98, ! 107, 2392, 2392, 132,-32768,-32768,-32768,-32768, 116, 116, ! 116, 86, 94, 122,-32768,-32768,-32768,-32768,-32768, 192, ! 120, 1509, 354,-32768, 116,-32768, 64, 75, 80,-32768, ! 2392,-32768,-32768,-32768, 116, 116, 116, 2210, 2096, 163, ! -32768,-32768, 192, 20,-32768, 116, 663,-32768, 362,-32768, ! 192, 354,-32768, 116,-32768,-32768, 633,-32768,-32768,-32768, ! -32768, 143,-32768, 149,-32768, 176,-32768,-32768,-32768,-32768, ! -32768,-32768, 2210, 2210, 206, 458,-32768,-32768,-32768, 2210, ! -32768,-32768, 729,-32768,-32768, 2210, 195, 225,-32768, 2267, ! 2324,-32768, 2561, 716, 311, 822, 2210,-32768, 257,-32768, ! -32768, 263, 597, 695, 213, 130,-32768, 362, 192,-32768, ! 299,-32768, 1444, 551, 116,-32768,-32768, 362, 53,-32768, ! 116, 792, 410, 427, 59, 1395, 633,-32768,-32768,-32768, ! -32768, 116,-32768, 286, 969,-32768, 289,-32768, 345,-32768, ! -32768,-32768, 2210,-32768,-32768, 294,-32768, 344, 361,-32768, ! 310, 2210, 729,-32768, 729,-32768, 2210, 2210, 401,-32768, ! -32768, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, ! 2210, 2210, 2210,-32768,-32768, 458, 458, 2210, 2210,-32768, ! 370,-32768, 433, 396,-32768,-32768, 391, 579,-32768,-32768, ! -32768, 391, 1501,-32768, 116,-32768, 429,-32768,-32768,-32768, ! -32768, 57,-32768, 416,-32768, 427,-32768,-32768, 476, 427, ! 508,-32768, 858, 1558,-32768, 419, 448,-32768, 267, 62, ! -32768,-32768, 498, 116, 405, 261,-32768, 362, 362,-32768, ! 551, 116,-32768, 1615,-32768,-32768, 551, 116,-32768,-32768, ! -32768, 459, 1053, 1338,-32768, 116,-32768,-32768, 502, 481, ! -32768, 345, 2476,-32768,-32768, 1977,-32768, 2561, 487, 488, ! 2561, 2561, 2210, 532, 2210, 2210, 1943, 2064, 1412, 893, ! 494, 1058, 1058, 347, 347,-32768,-32768,-32768,-32768,-32768, ! 495, 225, 490,-32768, 458, 906, 433,-32768,-32768,-32768, ! -32768, 421, 270,-32768, 1026,-32768, 503, 579, 391,-32768, ! 1672, 501, 695, 2381, 67, 509,-32768,-32768,-32768, 1680, ! -32768, 515, 217,-32768,-32768, 106,-32768,-32768,-32768,-32768, ! -32768,-32768,-32768, 482,-32768, 410,-32768,-32768, 410,-32768, ! 542,-32768,-32768, 521,-32768,-32768,-32768,-32768,-32768,-32768, ! 514,-32768, 520, 2210, 458, 535, 481, 682,-32768,-32768, ! 528, 528, 580, 2210, 1697, 1753,-32768,-32768,-32768, 250, ! 448,-32768,-32768, 81, 93, 95, 96, 625,-32768, 546, ! -32768,-32768,-32768,-32768, 429,-32768,-32768,-32768, 429,-32768, ! -32768, 543,-32768,-32768, 162, 554,-32768,-32768, 224, 293, ! -32768,-32768, 1623,-32768, 628,-32768,-32768, 555, 593,-32768, ! 1327,-32768,-32768,-32768,-32768, 550,-32768,-32768, 550,-32768, ! 116, 116, 2561,-32768, 116, 559, 563, 1135,-32768, 846, ! -32768, 458,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, ! -32768,-32768,-32768,-32768,-32768,-32768, 1853,-32768,-32768, 2210, ! -32768,-32768,-32768, 293, 116, 194, 275, 116,-32768, 116, ! 275, 116, 1026,-32768,-32768,-32768, 70,-32768, 362,-32768, ! 192,-32768, 708,-32768,-32768, 2561,-32768,-32768, 1327,-32768, ! -32768, 497, 497,-32768,-32768,-32768, 116,-32768,-32768, 606, ! 458, 2210,-32768, 608, 2561, 572, 574,-32768,-32768, 221, ! 1263, 2210,-32768, 1919,-32768, 615, 2210, 629, 591, 592, ! 2153, 186, 672,-32768,-32768,-32768, 599,-32768, 600, 1566, ! 452, 603,-32768,-32768,-32768, 2038, 214, 202, 224,-32768, ! 1729,-32768,-32768,-32768, 306, 293,-32768,-32768,-32768, 596, ! -32768,-32768, 308, 338, 54, 708,-32768,-32768, 1135, 70, ! -32768, 70,-32768, 2210,-32768, 40, 73,-32768,-32768, 2431, ! 1135,-32768,-32768, 1199,-32768, 1386,-32768,-32768, 846, 2498, ! -32768,-32768,-32768,-32768, 611, 2210, 623,-32768, 642,-32768, ! -32768,-32768, 362,-32768, 192,-32768,-32768,-32768,-32768, 645, ! 693, 990, 105,-32768,-32768,-32768,-32768, 435, 435,-32768, ! 1786,-32768, 624,-32768,-32768,-32768, 634,-32768,-32768, 2525, ! 2210,-32768, 2210,-32768, 635, 1386,-32768,-32768, 2210,-32768, ! -32768, 637,-32768, 2210, 681, 341,-32768, 103, 346,-32768, ! 602, 661, 662,-32768, 665, 2210, 1074,-32768,-32768,-32768, ! -32768, 2210,-32768,-32768,-32768,-32768,-32768, 2525, 2449,-32768, ! -32768, 2543,-32768, 31, 116,-32768, 551,-32768, 551, 2210, ! 2210, 712, 2038, 651,-32768,-32768,-32768,-32768,-32768, 654, ! -32768,-32768,-32768, 730, 664,-32768,-32768,-32768, 666, 667, ! -32768,-32768,-32768,-32768, 669,-32768,-32768,-32768,-32768, 670, ! 689, 32, 668,-32768,-32768,-32768,-32768,-32768,-32768, 2210, ! -32768,-32768,-32768, 2210, 730, 674, 730,-32768,-32768,-32768, ! 675,-32768, 685, 44,-32768,-32768, 596, 596,-32768,-32768, ! -32768, 508, 680,-32768,-32768, 2210, 311, 226,-32768, 687, ! 703, 508,-32768,-32768, 311,-32768,-32768, 768, 770,-32768 }; static const short yypgoto[] = {-32768, ! -32768,-32768,-32768, 89,-32768,-32768,-32768,-32768,-32768,-32768, ! -32768,-32768, 60,-32768, -38, 485, -139, 446,-32768,-32768, ! -56, 215,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -190, ! -209, 565,-32768,-32768, -13, -2, 3, -470, 2, 733, ! -32768, 328, 9, 4, -84, 601, 16, -136, -399, -41, ! -109, -61,-32768,-32768,-32768, 172, 5, 7,-32768, 491, ! -32768, 322,-32768, -449,-32768, 246,-32768, -425,-32768,-32768, ! 312,-32768,-32768,-32768,-32768,-32768,-32768, -40, -53, 1, ! -14,-32768,-32768,-32768, -34,-32768,-32768,-32768,-32768,-32768, ! 454, -28,-32768, 564, 464, 336, 557, 466, -26,-32768, ! -137, -71, -32, -112,-32768,-32768,-32768,-32768,-32768,-32768, ! -161,-32768,-32768, -368, 157,-32768,-32768, 571, -106,-32768, ! 326,-32768,-32768, -378,-32768,-32768,-32768,-32768,-32768, -116, ! -126, 201, -547, -74, -48,-32768,-32768,-32768,-32768,-32768, ! -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -508, 184, ! -32768, 170,-32768, 582,-32768, -250,-32768,-32768,-32768, 523, ! -199,-32768,-32768,-32768,-32768, 0 }; ! #define YYLAST 2617 ! static const short yytable[] = { 87, ! 99, 31, 31, 21, 21, 47, 25, 25, 122, 125, ! 22, 22, 232, 35, 36, 37, 141, 142, 49, 51, ! 305, 330, 133, 145, 46, 52, 54, 335, 106, 150, ! 31, 58, 21, 332, 137, 25, 126, 53, 282, 22, ! 185, 58, 58, 58, 377, 586, 208, 46, 109, 290, ! 241, 291, 58, 121, 101, 46, 149, 321, 513, 533, ! 58, 132, -103, 243, 226, 558, 59, 60, 511, 14, ! 530, 322, 664, 695, 216, 180, 652, 59, 60, 293, ! 111, -318, 59, 60, 225, 712, 62, 64, 66, 597, ! 206, 32, 133, -319, 210, -320, -321, -1, 101, 232, ! 107, 605, 14, 106, 108, 631, -2, 195, 677, 46, ! 665, 696, 121, 46, 601, 513, 112, 113, 194, 67, ! -168, -168, 121, 713, 369, 511, 259, 58, 260, 111, ! 608, 132, -159, 227, 244, 144, 302, 228, 58, 235, ! 283, 303, -159, 108, 702, 14, 387, -103, 38, 61, ! 101, 594, 709, 133, 297, 505, 39, 145, 292, 241, ! 63, 291, -298, 201, 282, 65, 328, 632, 101, 371, ! 101, 326, 243, 616, -299, 329, -300, -301, 727, 375, ! 641, 701, 673, -159, 40, 394, 379, -159, 59, 60, ! 395, 195, 112, 113, 41, 334, 195, 299, 249, 350, ! 48, 58, 529, 396, 41, 442, 435, 720, 205, 207, ! 206, 372, 33, 34, 210, 41, 341, 25, 343, 205, ! 408, 14, 410, 14, 353, 104, 41, 442, 136, 121, ! 58, 14, 121, 121, 138, 279, 280, 373, 337, 566, ! 339, 439, 14, 244, 437, 42, 440, 371, 371, 429, ! 371, 448, 452, 14, 43, 443, 520, 521, 194, 101, ! 556, 140, 382, 133, 444, 193, 42, 217, 143, 457, ! -106, -106, -106, -106, 151, 43, -106, 443, -106, -106, ! -106, 472, 481, 473, 482, 468, 444, 193, 470, 424, ! 427, 430, 433, 587, -106, 41, 195, 392, 152, 25, ! 517, 393, 494, 195, 14, 721, 389, 390, 41, 152, ! 722, 249, 205, 52, 54, 425, 428, 431, 434, 180, ! 590, 417, 14, 233, 234, 53, 538, 399, 714, 715, ! 421, 293, 300, 301, 422, 14, 186, 112, 113, 400, ! 327, 540, 189, 542, 359, 248, 449, 59, 60, 376, ! 423, 426, -106, 432, 410, 444, 193, 253, 55, 449, ! 56, 211, 201, 101, 41, 116, 258, 238, 444, 193, ! 246, 261, 262, 254, 447, 451, 267, 268, 269, 270, ! 271, 272, 273, 274, 275, 276, 277, 278, 595, 570, ! 257, 14, 228, 445, 450, 459, 461, 25, 507, 538, ! 171, 172, 173, 331, 249, 375, 379, 41, 116, 336, ! 518, 205, 375, 379, 462, 117, 525, 342, 596, 534, ! 14, 646, 108, 255, 118, 228, 648, 205, 133, 106, ! 108, 547, 547, 598, 14, 599, 516, 667, 509, 668, ! 256, 25, -80, 615, 191, 510, 535, 519, 450, 284, ! 14, 58, 526, 192, 193, 507, 58, 25, 117, 185, ! 59, 60, 565, 121, 285, 46, 576, 118, 577, 578, ! 579, 580, 233, 234, 191, 289, 546, 121, 304, 355, ! 356, 493, 593, 192, 193, 5, 6, 7, 8, 112, ! 113, 300, 301, 9, 10, 11, 506, 520, 521, 41, ! 116, 133, 111, 206, 210, 318, 573, 575, 232, 13, ! 206, 210, 429, 52, 54, 516, 70, 509, 588, 589, ! 25, 717, 445, 445, 510, 53, 14, 612, 319, 450, ! 450, 725, 618, 619, 145, 154, 156, 325, 544, 338, ! 549, 344, 429, 167, 168, 169, 170, 171, 172, 173, ! 117, 217, 58, 506, -347, -347, -347, -347, 413, 118, ! 621, 567, -347, -347, -347, 345, 351, 352, 420, 698, ! 699, 707, 708, 354, 357, 644, 358, 121, -347, 46, ! 383, 403, 474, 475, 129, 130, 476, 654, 388, 378, ! 9, 10, 11, 660, 391, 411, 5, 55, 7, 56, ! 5, 412, 7, 190, 9, 10, 11, 404, 9, 10, ! 11, 669, 670, 349, 672, 466, 415, 522, 523, 524, ! 13, 419, 527, 528, 13, 217, 14, 436, 111, 438, ! 456, -159, 485, 441, 471, 458, -102, 128, 129, 130, ! 477, -159, 478, 545, 9, 10, 11, -31, 548, 552, ! 191, 672, 516, 553, 509, 703, -32, 25, 554, 192, ! 193, 510, 14, 110, 112, 113, -27, -27, -27, -27, ! 561, 562, 563, 460, -27, -27, -27, 672, 568, 571, ! 572, 505, -159, 466, 182, 5, -159, 7, 98, 111, ! -27, 611, -159, 9, 10, 11, 550, 59, 60, 198, ! 199, 200, -159, 613, 614, 485, 559, 626, 627, 13, ! 635, 560, 537, 129, 130, 636, 640, 643, 602, 9, ! 10, 11, 645, 650, 651, 112, 113, 653, 671, 146, ! 676, 68, 5, 680, 7, 98, 69, 70, 681, 71, ! 9, 10, 11, -159, 685, 688, 689, -159, -27, 691, ! 693, 694, 697, 485, 705, 710, 13, 72, 600, 15, ! 719, 73, 74, 75, 711, 485, 723, 729, 485, 730, ! 485, 637, 76, 174, 175, 77, 176, 177, 178, 179, ! 78, 79, 80, 724, 323, 127, 81, 82, 386, 536, ! 541, 83, 230, 384, 298, -19, -19, -19, -19, 607, ! 416, 557, 409, -19, -19, -19, 543, 340, 347, 661, ! 414, 84, 85, 678, 147, 638, 666, 639, 111, -19, ! 485, -159, 181, 642, -323, -323, -323, -323, -323, -323, ! -323, -159, -323, -323, -323, -323, -323, 585, -323, -323, ! -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, ! -323, -323, -323, -323, -323, -323, -323, 374, 306, 679, ! 307, 5, 6, 7, 8, -323, 706, 308, -323, 9, ! 10, 11, -159, -323, -323, -323, -159, -19, 704, -323, ! -323, 380, 0, 0, -323, 13, 159, 14, 160, 161, ! 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, ! 172, 173, -323, 182, -323, -323, 361, -323, -347, -347, ! -347, -347, -347, -347, -347, 455, -347, -347, -347, -347, ! -347, 0, -347, -347, -347, -347, -347, -347, -347, -347, ! -347, -347, -347, -347, -347, -347, -347, -407, -347, -347, ! -347, 166, 167, 168, 169, 170, 171, 172, 173, -347, ! 0, 0, -347, 0, 0, 0, 0, -347, -347, -347, ! 0, 0, 0, -347, -347, 0, 0, 0, -347, 239, ! 0, 0, 5, 0, 7, 98, 0, 0, 0, 0, ! 9, 10, 11, 0, 0, 0, -347, 0, -347, -347, ! 628, -347, -325, -325, 0, 0, 13, -325, -325, 15, ! -325, 0, 0, 0, -325, 0, -325, -325, -325, -325, ! -325, -325, -325, -325, -325, -325, -325, 0, -325, 0, ! -325, 0, -325, -325, -325, 0, 306, 0, 0, 5, ! 6, 7, 8, -325, 0, 308, -325, 9, 10, 11, ! 0, -325, -325, -325, 0, 0, 0, -325, -325, 240, ! -258, 0, -325, 13, 0, 14, 5, 0, 7, 190, ! 0, 0, 0, 0, 9, 10, 11, 0, 0, 0, ! -325, 0, -325, -325, 655, -325, -354, -354, 0, 0, ! 13, -354, -354, 0, -354, 0, 0, 0, -354, 0, ! -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, ! -354, 0, -354, 0, -354, -407, -354, -354, -354, 169, ! 170, 171, 172, 173, 0, 0, 0, -354, 0, 0, ! -354, 0, 0, 0, 0, -354, -354, -354, 0, 0, ! 0, -354, -354, -266, -266, 479, -354, 480, 60, 0, ! 0, 0, 69, 70, 0, 71, 0, 0, 0, 0, ! 0, 0, 0, 0, -354, 0, -354, -354, 0, -354, ! 0, 0, 0, 72, 0, 15, 0, 73, 74, 75, ! 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, ! 0, 77, 0, 0, 0, 0, 78, 79, 80, 0, ! 0, 0, 81, 82, 0, 0, 481, 83, 482, 479, ! 0, 480, 60, 0, 0, 0, 69, 70, 0, 71, ! 0, 0, 0, 0, 0, 0, -187, 84, 85, 0, ! 483, 0, 0, 0, 0, 0, 0, 72, 0, 15, ! 0, 73, 74, 75, 0, 0, 0, 0, 0, 0, ! 0, 0, 76, 0, 0, 77, 0, 0, 0, 0, ! 78, 79, 80, 0, 0, 0, 81, 82, 0, 0, ! 481, 83, 482, 479, 0, 68, 0, 0, 0, 0, ! 69, 70, 0, 71, 0, 0, 0, 0, 0, 0, ! -255, 84, 85, 0, 483, 0, 0, 0, 0, 0, ! 0, 72, 0, 15, 0, 73, 74, 75, 0, 0, ! 0, 0, -200, 0, 0, 0, 76, 0, 0, 77, ! 0, 0, 0, 0, 78, 79, 80, 0, 0, 0, ! 81, 82, 0, 0, -200, 83, -200, 464, 0, 68, ! 0, 0, 0, 0, 69, 70, 0, 71, 239, 0, ! 0, 5, 0, 7, 98, 84, 85, 0, 483, 9, ! 10, 11, 0, 0, 0, 72, 0, 15, 0, 73, ! 74, 75, 0, 0, 0, 13, 0, 0, 15, 0, ! 76, 0, 0, 77, 0, 0, 0, 0, 78, 79, ! 80, 0, 0, 0, 81, 82, 479, 0, 68, 83, ! 0, 0, 0, 69, 70, 236, 71, 0, -23, -23, ! -23, -23, 0, 0, 0, 0, -23, -23, -23, 84, ! 85, 0, 465, 0, 72, 0, 15, 0, 73, 74, ! 75, 111, -23, 0, -159, 0, 0, 0, 0, 76, ! 0, 0, 77, 0, -159, 0, 0, 78, 79, 80, ! 0, 0, 0, 81, 82, 0, 68, 0, 83, 0, ! 0, 69, 70, 0, 71, 0, 0, 112, 113, 165, ! 166, 167, 168, 169, 170, 171, 172, 173, 84, 85, ! 0, 483, 72, 0, 15, -159, 73, 74, 75, -159, ! -23, 0, 0, 0, 0, 0, 0, 76, 0, 0, ! 77, 0, 0, 0, 0, 78, 79, 214, 0, 0, ! 0, 81, 82, 68, 0, 0, 83, 0, 69, 70, ! 0, 71, 5, 6, 7, 8, 0, 0, 0, 0, ! 9, 10, 11, 0, 0, 0, 84, 85, 0, 72, ! 215, 15, 0, 73, 74, 75, 13, 0, 14, 0, ! 0, 0, 0, 0, 76, 0, 0, 77, 0, 0, ! 0, 0, 78, 79, 80, 0, 0, 0, 81, 82, ! 68, 0, 0, 83, 0, 69, 70, 0, 71, 5, ! 6, 7, 8, 0, 0, 0, 0, 9, 10, 11, ! 0, 0, 0, 84, 85, 0, 72, 296, 15, 50, ! 73, 74, 75, 13, 0, 14, 0, 0, 0, 0, ! 0, 76, 0, 0, 77, 0, 0, 0, 0, 78, ! 79, 80, 0, 0, 0, 81, 82, 68, 0, 0, ! 83, 0, 69, 70, 0, 71, 5, 6, 7, 8, ! 0, 0, 454, 0, 9, 10, 11, 0, 0, 0, ! 84, 85, 0, 72, 317, 15, 574, 73, 74, 75, ! 13, 0, 14, 0, 0, 0, 0, 0, 76, 0, ! 0, 77, 0, 0, 0, 0, 78, 79, 80, 0, ! 0, 0, 81, 82, 68, 0, 0, 83, 0, 69, ! 70, 0, 71, 5, 6, 7, 8, 0, 0, 0, ! 0, 9, 10, 11, 0, 0, 0, 84, 85, 0, ! 72, 333, 15, 0, 73, 74, 75, 13, 0, 14, ! 0, 0, 0, 0, 0, 76, 0, 0, 77, 0, ! 0, 0, 0, 78, 79, 80, 0, 0, 0, 81, ! 82, 68, 0, 0, 83, 0, 69, 70, 0, 71, ! 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, ! 171, 172, 173, 0, 84, 85, 0, 72, 381, 15, ! 0, 73, 74, 75, 0, 0, 0, 0, 0, 0, ! 0, 0, 76, 0, 0, 77, 0, 0, 0, 0, ! 78, 79, 591, 0, 0, 0, 81, 82, 68, 0, ! 0, 83, 0, 69, 70, 0, 71, 162, 163, 164, ! 165, 166, 167, 168, 169, 170, 171, 172, 173, 0, ! 0, 84, 85, 0, 72, 592, 15, 0, 73, 74, ! 75, 0, 0, 0, 0, 0, 0, 0, 0, 76, ! 0, 0, 77, 0, 0, 0, 0, 78, 79, 80, ! 0, 0, 0, 81, 82, 0, 0, 0, 83, 0, ! 0, 0, 0, 0, 0, 480, 496, 6, 7, 8, ! 69, 70, 0, 71, 9, 10, 11, 0, 84, 85, ! 0, 0, 634, 497, 498, 499, 500, 501, 502, 503, ! 13, 72, 14, 15, 0, 73, 74, 75, 0, 0, ! 0, 0, 0, 0, 0, 0, 76, 0, 0, 77, ! 0, 0, 0, 0, 78, 79, 80, 0, 0, 0, ! 81, 82, 0, 0, 0, 83, 0, 0, 0, 0, ! 0, 480, 60, 0, 0, 0, 69, 70, 0, 71, ! 0, 0, 0, 504, 0, 84, 85, 0, 505, 497, ! 498, 499, 500, 501, 502, 503, 0, 72, 0, 15, ! 0, 73, 74, 75, 0, 0, 0, 0, 0, 0, ! 0, 0, 76, 0, 0, 77, 0, 0, 0, 0, ! 78, 79, 80, 0, 0, 0, 81, 82, 0, 68, ! 0, 83, 0, 0, 69, 70, 0, 71, 163, 164, ! 165, 166, 167, 168, 169, 170, 171, 172, 173, 504, ! 0, 84, 85, 0, 505, 72, 0, 15, 0, 73, ! 74, 75, 0, 0, 0, 0, 0, 0, 0, 0, ! 76, 0, 0, 77, 0, 0, 0, 0, 78, 79, ! 80, 0, 0, 0, 81, 82, 0, 0, 0, 83, ! 68, 5, 6, 7, 8, 69, 70, 0, 71, 9, ! 10, 11, 0, 0, 0, 0, 0, 0, 0, 84, ! 85, 0, 349, 0, 0, 13, 72, 14, 15, 0, ! 73, 74, 75, 0, 0, 0, 0, 0, 0, 0, ! 0, 76, 0, 0, 77, 0, 0, 0, 0, 78, ! 79, 80, 0, 0, 0, 81, 82, 0, 68, 5, ! 83, 7, 98, 69, 70, 0, 71, 9, 10, 11, ! 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, ! 84, 85, 0, 13, 72, 0, 15, 0, 73, 74, ! 75, 0, 0, 0, 0, 0, 0, 0, 0, 76, ! 0, 0, 77, 0, 0, 0, 0, 78, 79, 80, ! 0, 0, 0, 81, 82, 68, 0, 0, 83, 0, ! 69, 70, 0, 71, 0, 0, 0, 0, 0, 0, ! 0, 0, 0, 0, 0, 0, 0, 0, 84, 85, ! 0, 72, 0, 15, 0, 73, 74, 75, 0, 0, ! 0, 0, 0, 0, 0, 0, 76, 0, 0, 77, ! 0, 0, 0, 0, 78, 79, 80, 0, 0, 0, ! 81, 82, 68, 0, 0, 83, 0, 69, 70, 0, ! 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 0, 0, 0, 564, 0, 84, 85, 0, 72, 0, ! 15, 0, 73, 74, 75, 0, 0, 0, 0, 0, ! 0, 0, 0, 76, 0, 0, 77, 0, 0, 0, ! 0, 78, 79, 80, 0, 0, 0, 81, 82, 68, ! 0, 0, 83, 0, 69, 70, 0, 71, 0, 0, ! 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 0, 0, 84, 85, 0, 72, 0, 15, 0, 73, ! 74, 75, 0, 0, 0, 0, 0, 0, 0, 0, ! 76, 0, 0, 77, 0, 0, 0, 0, 78, 79, ! 80, 0, 0, 0, 81, 82, 68, 0, 0, 153, ! 0, 69, 70, 0, 71, 0, 0, 0, 0, 0, ! 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, ! 85, 0, 72, 0, 15, 0, 73, 74, 75, 0, ! 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, ! 77, 0, 0, 0, 0, 78, 79, 80, 0, 0, ! 0, 81, 82, 385, 0, 0, 155, 0, 69, 70, ! 0, 71, 4, 0, -115, 5, 6, 7, 8, 0, ! 0, 0, 0, 9, 10, 11, 84, 85, 0, 72, ! 0, 15, 0, 73, 74, 75, 0, 0, 12, 13, ! 0, 14, 15, 0, 76, 0, 0, 77, 0, 0, ! 0, 0, 78, 79, 80, 0, 0, 0, 81, 82, ! 603, 0, 0, 83, 0, -115, 0, 0, 0, 0, ! 0, 0, 0, 0, -115, 0, 0, 0, 0, 0, ! 0, 0, 0, 84, 85, 0, 0, 0, 0, 157, ! 158, 159, 16, 160, 161, 162, 163, 164, 165, 166, ! 167, 168, 169, 170, 171, 172, 173, 157, 158, 159, ! 0, 160, 161, 162, 163, 164, 165, 166, 167, 168, ! 169, 170, 171, 172, 173, 0, 0, 609, 0, 0, ! 0, 0, 0, 0, 157, 158, 159, 604, 160, 161, ! 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, ! 172, 173, 0, 0, 0, 662, 157, 158, 159, 610, ! 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, ! 170, 171, 172, 173, 14, 0, 0, 0, 0, 0, ! 348, 0, 0, 157, 158, 159, 0, 160, 161, 162, ! 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, ! 173, 157, 158, 159, 663, 160, 161, 162, 163, 164, ! 165, 166, 167, 168, 169, 170, 171, 172, 173, 157, ! 158, 159, 0, 160, 161, 162, 163, 164, 165, 166, ! 167, 168, 169, 170, 171, 172, 173 }; ! static const short yycheck[] = { 38, ! 39, 2, 3, 2, 3, 20, 2, 3, 49, 51, ! 2, 3, 122, 9, 10, 11, 73, 74, 21, 22, ! 211, 231, 57, 80, 20, 22, 22, 237, 43, 86, ! 31, 25, 31, 233, 63, 31, 51, 22, 178, 31, ! 97, 35, 36, 37, 295, 516, 108, 43, 46, 187, ! 135, 188, 46, 49, 39, 51, 83, 219, 437, 459, ! 54, 57, 1, 135, 118, 491, 3, 4, 437, 30, ! 1, 10, 42, 42, 113, 9, 624, 3, 4, 192, ! 27, 1, 3, 4, 117, 42, 27, 28, 29, 539, ! 105, 3, 127, 1, 109, 1, 1, 0, 83, 209, ! 81, 551, 30, 118, 85, 1, 0, 103, 656, 105, ! 80, 80, 108, 109, 42, 494, 63, 64, 103, 31, ! 81, 82, 118, 80, 286, 494, 153, 121, 155, 27, ! 556, 127, 30, 81, 135, 76, 80, 85, 132, 81, ! 179, 85, 40, 85, 692, 30, 80, 86, 63, 86, ! 135, 530, 700, 188, 193, 86, 63, 214, 191, 244, ! 86, 298, 82, 104, 304, 86, 228, 63, 153, 286, ! 155, 225, 244, 573, 82, 229, 82, 82, 726, 292, ! 606, 690, 653, 81, 63, 80, 299, 85, 3, 4, ! 85, 187, 63, 64, 3, 234, 192, 195, 139, 256, ! 81, 195, 453, 320, 3, 4, 368, 716, 7, 80, ! 225, 286, 81, 82, 229, 3, 245, 213, 247, 7, ! 337, 30, 339, 30, 263, 63, 3, 4, 86, 225, ! 224, 30, 228, 229, 86, 176, 177, 286, 241, 54, ! 243, 80, 30, 244, 371, 54, 85, 364, 365, 366, ! 367, 389, 390, 30, 63, 54, 63, 64, 243, 244, ! 40, 86, 301, 298, 63, 64, 54, 1, 63, 396, ! 4, 5, 6, 7, 80, 63, 10, 54, 12, 13, ! 14, 408, 62, 410, 64, 402, 63, 64, 405, 364, ! 365, 366, 367, 80, 28, 3, 292, 81, 85, 295, ! 440, 85, 429, 299, 30, 80, 309, 310, 3, 85, ! 85, 252, 7, 310, 310, 364, 365, 366, 367, 9, ! 520, 348, 30, 63, 64, 310, 463, 324, 707, 708, ! 81, 444, 63, 64, 85, 30, 80, 63, 64, 324, ! 80, 468, 80, 470, 285, 1, 54, 3, 4, 80, ! 364, 365, 86, 367, 471, 63, 64, 143, 5, 54, ! 7, 63, 303, 348, 3, 4, 152, 82, 63, 64, ! 82, 157, 158, 80, 389, 390, 162, 163, 164, 165, ! 166, 167, 168, 169, 170, 171, 172, 173, 81, 506, ! 81, 30, 85, 389, 390, 398, 399, 393, 437, 536, ! 54, 55, 56, 232, 345, 518, 519, 3, 4, 238, ! 443, 7, 525, 526, 399, 54, 449, 246, 81, 461, ! 30, 81, 85, 80, 63, 85, 81, 7, 463, 444, ! 85, 472, 473, 540, 30, 542, 437, 647, 437, 649, ! 80, 437, 42, 570, 54, 437, 461, 445, 444, 80, ! 30, 445, 450, 63, 64, 494, 450, 453, 54, 516, ! 3, 4, 501, 459, 32, 461, 15, 63, 17, 18, ! 19, 20, 63, 64, 54, 80, 472, 473, 63, 265, ! 266, 422, 521, 63, 64, 4, 5, 6, 7, 63, ! 64, 63, 64, 12, 13, 14, 437, 63, 64, 3, ! 4, 536, 27, 518, 519, 87, 509, 510, 618, 28, ! 525, 526, 629, 510, 510, 516, 9, 516, 518, 519, ! 516, 712, 518, 519, 516, 510, 30, 566, 81, 525, ! 526, 722, 573, 575, 591, 90, 91, 40, 42, 81, ! 481, 40, 659, 50, 51, 52, 53, 54, 55, 56, ! 54, 1, 546, 494, 4, 5, 6, 7, 344, 63, ! 575, 502, 12, 13, 14, 85, 80, 80, 354, 686, ! 687, 698, 699, 42, 80, 614, 87, 573, 28, 575, ! 80, 40, 411, 412, 6, 7, 415, 626, 80, 87, ! 12, 13, 14, 632, 80, 82, 4, 5, 6, 7, ! 4, 82, 6, 7, 12, 13, 14, 87, 12, 13, ! 14, 650, 651, 86, 653, 401, 82, 446, 447, 448, ! 28, 42, 451, 452, 28, 1, 30, 82, 27, 87, ! 3, 30, 418, 80, 85, 81, 86, 5, 6, 7, ! 82, 40, 80, 472, 12, 13, 14, 42, 477, 42, ! 54, 690, 653, 82, 653, 694, 42, 653, 85, 63, ! 64, 653, 30, 1, 63, 64, 4, 5, 6, 7, ! 42, 81, 81, 81, 12, 13, 14, 716, 7, 81, ! 81, 86, 81, 469, 82, 4, 85, 6, 7, 27, ! 28, 81, 30, 12, 13, 14, 482, 3, 4, 5, ! 6, 7, 40, 81, 63, 491, 492, 63, 16, 28, ! 87, 497, 5, 6, 7, 82, 82, 81, 547, 12, ! 13, 14, 42, 63, 63, 63, 64, 63, 17, 1, ! 80, 3, 4, 80, 6, 7, 8, 9, 9, 11, ! 12, 13, 14, 81, 81, 80, 80, 85, 86, 81, ! 81, 63, 85, 539, 81, 81, 28, 29, 544, 31, ! 81, 33, 34, 35, 80, 551, 80, 0, 554, 0, ! 556, 600, 44, 58, 59, 47, 61, 62, 63, 64, ! 52, 53, 54, 81, 220, 53, 58, 59, 304, 462, ! 469, 63, 1, 303, 194, 4, 5, 6, 7, 554, ! 347, 490, 339, 12, 13, 14, 471, 244, 252, 638, ! 345, 83, 84, 657, 86, 601, 645, 603, 27, 28, ! 606, 30, 1, 609, 3, 4, 5, 6, 7, 8, ! 9, 40, 11, 12, 13, 14, 15, 512, 17, 18, ! 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, ! 29, 30, 31, 32, 33, 34, 35, 287, 1, 659, ! 3, 4, 5, 6, 7, 44, 697, 10, 47, 12, ! 13, 14, 81, 52, 53, 54, 85, 86, 695, 58, ! 59, 300, -1, -1, 63, 28, 41, 30, 43, 44, ! 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, ! 55, 56, 81, 82, 83, 84, 1, 86, 3, 4, ! 5, 6, 7, 8, 9, 393, 11, 12, 13, 14, ! 15, -1, 17, 18, 19, 20, 21, 22, 23, 24, ! 25, 26, 27, 28, 29, 30, 31, 80, 33, 34, ! 35, 49, 50, 51, 52, 53, 54, 55, 56, 44, ! -1, -1, 47, -1, -1, -1, -1, 52, 53, 54, ! -1, -1, -1, 58, 59, -1, -1, -1, 63, 1, ! -1, -1, 4, -1, 6, 7, -1, -1, -1, -1, ! 12, 13, 14, -1, -1, -1, 81, -1, 83, 84, ! 1, 86, 3, 4, -1, -1, 28, 8, 9, 31, 11, -1, -1, -1, 15, -1, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, -1, 29, -1, ! 31, -1, 33, 34, 35, -1, 1, -1, -1, 4, ! 5, 6, 7, 44, -1, 10, 47, 12, 13, 14, ! -1, 52, 53, 54, -1, -1, -1, 58, 59, 81, ! 82, -1, 63, 28, -1, 30, 4, -1, 6, 7, ! -1, -1, -1, -1, 12, 13, 14, -1, -1, -1, ! 81, -1, 83, 84, 1, 86, 3, 4, -1, -1, ! 28, 8, 9, -1, 11, -1, -1, -1, 15, -1, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, ! 27, -1, 29, -1, 31, 80, 33, 34, 35, 52, ! 53, 54, 55, 56, -1, -1, -1, 44, -1, -1, ! 47, -1, -1, -1, -1, 52, 53, 54, -1, -1, ! -1, 58, 59, 81, 82, 1, 63, 3, 4, -1, ! -1, -1, 8, 9, -1, 11, -1, -1, -1, -1, ! -1, -1, -1, -1, 81, -1, 83, 84, -1, 86, ! -1, -1, -1, 29, -1, 31, -1, 33, 34, 35, ! -1, -1, -1, -1, -1, -1, -1, -1, 44, -1, ! -1, 47, -1, -1, -1, -1, 52, 53, 54, -1, ! -1, -1, 58, 59, -1, -1, 62, 63, 64, 1, ! -1, 3, 4, -1, -1, -1, 8, 9, -1, 11, ! -1, -1, -1, -1, -1, -1, 82, 83, 84, -1, ! 86, -1, -1, -1, -1, -1, -1, 29, -1, 31, ! -1, 33, 34, 35, -1, -1, -1, -1, -1, -1, ! -1, -1, 44, -1, -1, 47, -1, -1, -1, -1, ! 52, 53, 54, -1, -1, -1, 58, 59, -1, -1, ! 62, 63, 64, 1, -1, 3, -1, -1, -1, -1, ! 8, 9, -1, 11, -1, -1, -1, -1, -1, -1, ! 82, 83, 84, -1, 86, -1, -1, -1, -1, -1, ! -1, 29, -1, 31, -1, 33, 34, 35, -1, -1, ! -1, -1, 40, -1, -1, -1, 44, -1, -1, 47, ! -1, -1, -1, -1, 52, 53, 54, -1, -1, -1, ! 58, 59, -1, -1, 62, 63, 64, 1, -1, 3, ! -1, -1, -1, -1, 8, 9, -1, 11, 1, -1, ! -1, 4, -1, 6, 7, 83, 84, -1, 86, 12, ! 13, 14, -1, -1, -1, 29, -1, 31, -1, 33, ! 34, 35, -1, -1, -1, 28, -1, -1, 31, -1, ! 44, -1, -1, 47, -1, -1, -1, -1, 52, 53, ! 54, -1, -1, -1, 58, 59, 1, -1, 3, 63, ! -1, -1, -1, 8, 9, 1, 11, -1, 4, 5, ! 6, 7, -1, -1, -1, -1, 12, 13, 14, 83, ! 84, -1, 86, -1, 29, -1, 31, -1, 33, 34, ! 35, 27, 28, -1, 30, -1, -1, -1, -1, 44, ! -1, -1, 47, -1, 40, -1, -1, 52, 53, 54, ! -1, -1, -1, 58, 59, -1, 3, -1, 63, -1, ! -1, 8, 9, -1, 11, -1, -1, 63, 64, 48, ! 49, 50, 51, 52, 53, 54, 55, 56, 83, 84, ! -1, 86, 29, -1, 31, 81, 33, 34, 35, 85, ! 86, -1, -1, -1, -1, -1, -1, 44, -1, -1, ! 47, -1, -1, -1, -1, 52, 53, 54, -1, -1, ! -1, 58, 59, 3, -1, -1, 63, -1, 8, 9, ! -1, 11, 4, 5, 6, 7, -1, -1, -1, -1, ! 12, 13, 14, -1, -1, -1, 83, 84, -1, 29, ! 87, 31, -1, 33, 34, 35, 28, -1, 30, -1, ! -1, -1, -1, -1, 44, -1, -1, 47, -1, -1, ! -1, -1, 52, 53, 54, -1, -1, -1, 58, 59, ! 3, -1, -1, 63, -1, 8, 9, -1, 11, 4, ! 5, 6, 7, -1, -1, -1, -1, 12, 13, 14, ! -1, -1, -1, 83, 84, -1, 29, 87, 31, 81, ! 33, 34, 35, 28, -1, 30, -1, -1, -1, -1, ! -1, 44, -1, -1, 47, -1, -1, -1, -1, 52, ! 53, 54, -1, -1, -1, 58, 59, 3, -1, -1, ! 63, -1, 8, 9, -1, 11, 4, 5, 6, 7, ! -1, -1, 10, -1, 12, 13, 14, -1, -1, -1, ! 83, 84, -1, 29, 87, 31, 81, 33, 34, 35, ! 28, -1, 30, -1, -1, -1, -1, -1, 44, -1, ! -1, 47, -1, -1, -1, -1, 52, 53, 54, -1, ! -1, -1, 58, 59, 3, -1, -1, 63, -1, 8, ! 9, -1, 11, 4, 5, 6, 7, -1, -1, -1, ! -1, 12, 13, 14, -1, -1, -1, 83, 84, -1, ! 29, 87, 31, -1, 33, 34, 35, 28, -1, 30, ! -1, -1, -1, -1, -1, 44, -1, -1, 47, -1, ! -1, -1, -1, 52, 53, 54, -1, -1, -1, 58, ! 59, 3, -1, -1, 63, -1, 8, 9, -1, 11, ! 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, ! 54, 55, 56, -1, 83, 84, -1, 29, 87, 31, ! -1, 33, 34, 35, -1, -1, -1, -1, -1, -1, ! -1, -1, 44, -1, -1, 47, -1, -1, -1, -1, ! 52, 53, 54, -1, -1, -1, 58, 59, 3, -1, ! -1, 63, -1, 8, 9, -1, 11, 45, 46, 47, ! 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, ! -1, 83, 84, -1, 29, 87, 31, -1, 33, 34, ! 35, -1, -1, -1, -1, -1, -1, -1, -1, 44, ! -1, -1, 47, -1, -1, -1, -1, 52, 53, 54, ! -1, -1, -1, 58, 59, -1, -1, -1, 63, -1, ! -1, -1, -1, -1, -1, 3, 4, 5, 6, 7, ! 8, 9, -1, 11, 12, 13, 14, -1, 83, 84, ! -1, -1, 87, 21, 22, 23, 24, 25, 26, 27, ! 28, 29, 30, 31, -1, 33, 34, 35, -1, -1, ! -1, -1, -1, -1, -1, -1, 44, -1, -1, 47, ! -1, -1, -1, -1, 52, 53, 54, -1, -1, -1, ! 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, ! -1, 3, 4, -1, -1, -1, 8, 9, -1, 11, ! -1, -1, -1, 81, -1, 83, 84, -1, 86, 21, ! 22, 23, 24, 25, 26, 27, -1, 29, -1, 31, ! -1, 33, 34, 35, -1, -1, -1, -1, -1, -1, ! -1, -1, 44, -1, -1, 47, -1, -1, -1, -1, ! 52, 53, 54, -1, -1, -1, 58, 59, -1, 3, ! -1, 63, -1, -1, 8, 9, -1, 11, 46, 47, ! 48, 49, 50, 51, 52, 53, 54, 55, 56, 81, ! -1, 83, 84, -1, 86, 29, -1, 31, -1, 33, ! 34, 35, -1, -1, -1, -1, -1, -1, -1, -1, ! 44, -1, -1, 47, -1, -1, -1, -1, 52, 53, ! 54, -1, -1, -1, 58, 59, -1, -1, -1, 63, ! 3, 4, 5, 6, 7, 8, 9, -1, 11, 12, ! 13, 14, -1, -1, -1, -1, -1, -1, -1, 83, ! 84, -1, 86, -1, -1, 28, 29, 30, 31, -1, ! 33, 34, 35, -1, -1, -1, -1, -1, -1, -1, ! -1, 44, -1, -1, 47, -1, -1, -1, -1, 52, ! 53, 54, -1, -1, -1, 58, 59, -1, 3, 4, ! 63, 6, 7, 8, 9, -1, 11, 12, 13, 14, ! 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, ! 83, 84, -1, 28, 29, -1, 31, -1, 33, 34, ! 35, -1, -1, -1, -1, -1, -1, -1, -1, 44, ! -1, -1, 47, -1, -1, -1, -1, 52, 53, 54, ! -1, -1, -1, 58, 59, 3, -1, -1, 63, -1, ! 8, 9, -1, 11, -1, -1, -1, -1, -1, -1, ! -1, -1, -1, -1, -1, -1, -1, -1, 83, 84, ! -1, 29, -1, 31, -1, 33, 34, 35, -1, -1, ! -1, -1, -1, -1, -1, -1, 44, -1, -1, 47, ! -1, -1, -1, -1, 52, 53, 54, -1, -1, -1, ! 58, 59, 3, -1, -1, 63, -1, 8, 9, -1, ! 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, ! -1, -1, -1, 81, -1, 83, 84, -1, 29, -1, ! 31, -1, 33, 34, 35, -1, -1, -1, -1, -1, ! -1, -1, -1, 44, -1, -1, 47, -1, -1, -1, ! -1, 52, 53, 54, -1, -1, -1, 58, 59, 3, ! -1, -1, 63, -1, 8, 9, -1, 11, -1, -1, ! -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, ! -1, -1, 83, 84, -1, 29, -1, 31, -1, 33, ! 34, 35, -1, -1, -1, -1, -1, -1, -1, -1, ! 44, -1, -1, 47, -1, -1, -1, -1, 52, 53, ! 54, -1, -1, -1, 58, 59, 3, -1, -1, 63, -1, 8, 9, -1, 11, -1, -1, -1, -1, -1, ! -1, -1, -1, -1, -1, -1, -1, -1, -1, 83, ! 84, -1, 29, -1, 31, -1, 33, 34, 35, -1, ! -1, -1, -1, -1, -1, -1, -1, 44, -1, -1, ! 47, -1, -1, -1, -1, 52, 53, 54, -1, -1, ! -1, 58, 59, 3, -1, -1, 63, -1, 8, 9, ! -1, 11, 1, -1, 3, 4, 5, 6, 7, -1, ! -1, -1, -1, 12, 13, 14, 83, 84, -1, 29, ! -1, 31, -1, 33, 34, 35, -1, -1, 27, 28, ! -1, 30, 31, -1, 44, -1, -1, 47, -1, -1, ! -1, -1, 52, 53, 54, -1, -1, -1, 58, 59, ! 10, -1, -1, 63, -1, 54, -1, -1, -1, -1, ! -1, -1, -1, -1, 63, -1, -1, -1, -1, -1, ! -1, -1, -1, 83, 84, -1, -1, -1, -1, 39, ! 40, 41, 81, 43, 44, 45, 46, 47, 48, 49, ! 50, 51, 52, 53, 54, 55, 56, 39, 40, 41, ! -1, 43, 44, 45, 46, 47, 48, 49, 50, 51, ! 52, 53, 54, 55, 56, -1, -1, 10, -1, -1, ! -1, -1, -1, -1, 39, 40, 41, 87, 43, 44, ! 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, ! 55, 56, -1, -1, -1, 87, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, ! 53, 54, 55, 56, 30, -1, -1, -1, -1, -1, ! 85, -1, -1, 39, 40, 41, -1, 43, 44, 45, ! 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, ! 56, 39, 40, 41, 42, 43, 44, 45, 46, 47, ! 48, 49, 50, 51, 52, 53, 54, 55, 56, 39, ! 40, 41, -1, 43, 44, 45, 46, 47, 48, 49, ! 50, 51, 52, 53, 54, 55, 56 }; /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ #line 3 "/usr/lib/bison.simple" --- 547,1599 ---- "TYPENAME","SCSPEC","TYPESPEC","TYPE_QUAL","CONSTANT","STRING","ELLIPSIS","SIZEOF", "ENUM","STRUCT","UNION","IF","ELSE","WHILE","DO","FOR","SWITCH","CASE","DEFAULT", "BREAK","CONTINUE","RETURN","GOTO","ASM_KEYWORD","TYPEOF","ALIGNOF","ATTRIBUTE", ! "EXTENSION","LABEL","REALPART","IMAGPART","VA_ARG","CHOOSE_EXPR","TYPES_COMPATIBLE_P", ! "PTR_VALUE","PTR_BASE","PTR_EXTENT","STRING_FUNC_NAME","VAR_FUNC_NAME","ASSIGN", ! "'='","'?'","':'","OROR","ANDAND","'|'","'^'","'&'","EQCOMPARE","ARITHCOMPARE", "LSHIFT","RSHIFT","'+'","'-'","'*'","'/'","'%'","UNARY","PLUSPLUS","MINUSMINUS", "HYPERUNARY","POINTSAT","'.'","'('","'['","INTERFACE","IMPLEMENTATION","END", "SELECTOR","DEFS","ENCODE","CLASSNAME","PUBLIC","PRIVATE","PROTECTED","PROTOCOL", ! "OBJECTNAME","CLASS","ALIAS","')'","';'","'}'","'~'","'!'","','","'{'","']'", ! "program","extdefs","@1","@2","extdef","datadef","fndef","@3","@4","@5","@6", ! "@7","@8","identifier","unop","expr","exprlist","nonnull_exprlist","unary_expr", ! "sizeof","alignof","cast_expr","expr_no_commas","@9","@10","@11","@12","@13", ! "primary","@14","string","old_style_parm_decls","lineno_datadecl","datadecls", ! "datadecl","lineno_decl","setspecs","maybe_resetattrs","decl","declspecs_nosc_nots_nosa_noea", ! "declspecs_nosc_nots_nosa_ea","declspecs_nosc_nots_sa_noea","declspecs_nosc_nots_sa_ea", ! "declspecs_nosc_ts_nosa_noea","declspecs_nosc_ts_nosa_ea","declspecs_nosc_ts_sa_noea", ! "declspecs_nosc_ts_sa_ea","declspecs_sc_nots_nosa_noea","declspecs_sc_nots_nosa_ea", ! "declspecs_sc_nots_sa_noea","declspecs_sc_nots_sa_ea","declspecs_sc_ts_nosa_noea", ! "declspecs_sc_ts_nosa_ea","declspecs_sc_ts_sa_noea","declspecs_sc_ts_sa_ea", ! "declspecs_ts","declspecs_nots","declspecs_ts_nosa","declspecs_nots_nosa","declspecs_nosc_ts", ! "declspecs_nosc_nots","declspecs_nosc","declspecs","maybe_type_quals_attrs", ! "typespec_nonattr","typespec_attr","typespec_reserved_nonattr","typespec_reserved_attr", ! "typespec_nonreserved_nonattr","initdecls","notype_initdecls","maybeasm","initdcl", ! "@15","notype_initdcl","@16","maybe_attribute","attributes","attribute","attribute_list", ! "attrib","any_word","init","@17","initlist_maybe_comma","initlist1","initelt", ! "@18","initval","@19","designator_list","designator","nested_function","@20", ! "@21","notype_nested_function","@22","@23","declarator","after_type_declarator", ! "parm_declarator","parm_declarator_starttypename","parm_declarator_nostarttypename", ! "notype_declarator","struct_head","union_head","enum_head","structsp_attr","@24", ! "@25","@26","@27","structsp_nonattr","maybecomma","maybecomma_warn","component_decl_list", ! "component_decl_list2","component_decl","components","components_notype","component_declarator", ! "component_notype_declarator","enumlist","enumerator","typename","@28","absdcl", ! "absdcl_maybe_attribute","absdcl1","absdcl1_noea","absdcl1_ea","direct_absdcl1", ! "array_declarator","stmts_and_decls","lineno_stmt_decl_or_labels_ending_stmt", ! "lineno_stmt_decl_or_labels_ending_decl","lineno_stmt_decl_or_labels_ending_label", ! "lineno_stmt_decl_or_labels_ending_error","lineno_stmt_decl_or_labels","errstmt", ! "pushlevel","poplevel","c99_block_start","c99_block_end","maybe_label_decls", ! "label_decls","label_decl","compstmt_or_error","compstmt_start","compstmt_nostart", ! "compstmt_contents_nonempty","compstmt_primary_start","compstmt","simple_if", ! "if_prefix","@29","do_stmt_start","@30","save_filename","save_lineno","lineno_labeled_stmt", ! "c99_block_lineno_labeled_stmt","lineno_stmt","lineno_label","select_or_iter_stmt", ! "@31","@32","@33","@34","@35","@36","@37","@38","for_init_stmt","stmt","label", ! "maybe_type_qual","xexpr","asm_operands","nonnull_asm_operands","asm_operand", ! "asm_clobbers","parmlist","@39","parmlist_1","@40","@41","parmlist_2","parms", ! "parm","firstparm","setspecs_fp","parmlist_or_identifiers","@42","parmlist_or_identifiers_1", "identifiers","identifiers_or_typenames","extension", NULL }; #endif static const short yyr1[] = { 0, ! 91, 91, 93, 92, 94, 92, 95, 95, 95, 95, ! 96, 96, 96, 96, 96, 96, 96, 98, 99, 97, ! 97, 100, 101, 97, 97, 102, 103, 97, 97, 104, ! 104, 105, 105, 105, 105, 105, 105, 105, 106, 107, ! 107, 108, 108, 109, 109, 109, 109, 109, 109, 109, ! 109, 109, 109, 109, 110, 111, 112, 112, 113, 113, ! 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, ! 113, 114, 113, 115, 113, 116, 117, 113, 118, 113, ! 113, 113, 119, 119, 119, 119, 120, 119, 119, 119, ! 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, ! 119, 121, 121, 122, 122, 122, 123, 124, 124, 124, ! 124, 125, 125, 125, 125, 126, 127, 128, 129, 129, ! 129, 129, 129, 129, 130, 130, 130, 131, 132, 132, ! 133, 133, 134, 134, 134, 134, 134, 134, 134, 135, ! 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, ! 136, 137, 137, 137, 137, 137, 138, 138, 138, 138, ! 138, 138, 138, 139, 140, 140, 140, 140, 140, 140, ! 141, 142, 142, 142, 142, 142, 142, 142, 142, 142, ! 142, 143, 143, 143, 143, 143, 144, 144, 144, 144, ! 144, 144, 144, 144, 144, 144, 145, 145, 145, 145, ! 145, 146, 146, 146, 146, 146, 146, 146, 146, 147, ! 147, 147, 147, 147, 147, 147, 147, 148, 148, 148, ! 148, 149, 149, 149, 149, 150, 150, 150, 150, 151, ! 151, 151, 151, 152, 152, 152, 152, 152, 152, 152, ! 152, 153, 153, 153, 153, 153, 153, 153, 153, 153, ! 153, 153, 153, 153, 153, 153, 153, 154, 154, 155, ! 155, 156, 157, 157, 158, 159, 159, 159, 160, 160, ! 161, 161, 162, 162, 164, 163, 163, 166, 165, 165, ! 167, 167, 168, 168, 169, 170, 170, 171, 171, 171, ! 171, 171, 172, 172, 172, 172, 173, 174, 173, 173, ! 175, 175, 176, 176, 177, 177, 178, 177, 177, 180, ! 179, 179, 179, 181, 181, 182, 182, 182, 184, 185, ! 183, 187, 188, 186, 189, 189, 190, 190, 190, 190, ! 190, 191, 191, 192, 192, 192, 193, 193, 193, 193, ! 193, 194, 194, 194, 194, 194, 195, 195, 196, 196, ! 197, 197, 199, 198, 198, 200, 198, 198, 201, 198, ! 202, 198, 203, 203, 203, 204, 204, 205, 205, 206, ! 206, 207, 207, 207, 208, 208, 208, 208, 208, 208, ! 209, 209, 210, 210, 211, 211, 211, 212, 212, 212, ! 213, 213, 213, 214, 214, 216, 215, 217, 217, 218, ! 218, 218, 219, 219, 220, 220, 221, 221, 222, 222, ! 222, 222, 222, 223, 223, 223, 223, 223, 223, 223, ! 223, 223, 224, 224, 224, 224, 225, 225, 225, 225, ! 225, 226, 226, 226, 226, 227, 227, 227, 227, 227, ! 228, 228, 229, 229, 229, 229, 230, 231, 232, 233, ! 234, 235, 235, 236, 236, 237, 238, 238, 239, 240, ! 240, 241, 241, 242, 243, 244, 244, 246, 245, 248, ! 247, 249, 250, 251, 251, 252, 253, 254, 256, 255, ! 255, 255, 257, 258, 255, 255, 255, 259, 260, 261, ! 262, 255, 263, 255, 264, 264, 265, 265, 265, 265, ! 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, ! 266, 266, 266, 266, 267, 267, 268, 268, 269, 269, ! 270, 270, 271, 271, 272, 272, 274, 273, 275, 276, ! 277, 275, 275, 278, 278, 278, 278, 279, 279, 280, ! 280, 280, 280, 280, 281, 281, 281, 281, 281, 282, ! 284, 283, 285, 285, 286, 286, 287, 287, 288 }; static const short yyr2[] = { 0, 0, 1, 0, 2, 0, 3, 1, 1, 5, 2, ! 3, 4, 4, 2, 2, 2, 1, 0, 0, 9, ! 4, 0, 0, 9, 4, 0, 0, 8, 3, 1, ! 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, ! 1, 1, 3, 1, 2, 2, 2, 2, 2, 4, ! 2, 4, 2, 2, 1, 1, 1, 4, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, ! 3, 0, 4, 0, 4, 0, 0, 7, 0, 5, ! 3, 3, 1, 1, 1, 1, 0, 7, 3, 3, ! 3, 3, 4, 6, 8, 6, 4, 3, 3, 2, ! 2, 1, 2, 0, 1, 2, 3, 1, 1, 2, ! 2, 4, 4, 2, 2, 3, 0, 1, 4, 4, ! 3, 3, 2, 2, 1, 2, 2, 2, 2, 2, ! 1, 2, 1, 2, 2, 2, 2, 2, 2, 1, ! 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ! 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, ! 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ! 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ! 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ! 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ! 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, ! 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ! 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ! 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ! 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ! 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, ! 1, 1, 1, 1, 1, 1, 4, 4, 1, 4, ! 1, 4, 0, 4, 0, 6, 3, 0, 6, 3, ! 0, 1, 1, 2, 6, 1, 3, 0, 1, 4, ! 6, 4, 1, 1, 1, 1, 1, 0, 4, 1, ! 0, 2, 1, 3, 3, 2, 0, 4, 1, 0, ! 4, 1, 1, 1, 2, 2, 5, 3, 0, 0, ! 7, 0, 0, 7, 1, 1, 4, 3, 2, 3, ! 1, 1, 1, 3, 2, 1, 3, 2, 3, 3, ! 4, 3, 4, 3, 2, 1, 1, 2, 1, 2, ! 1, 2, 0, 7, 5, 0, 7, 5, 0, 8, ! 0, 7, 2, 2, 2, 0, 1, 0, 1, 1, ! 2, 0, 3, 2, 3, 4, 3, 1, 1, 2, ! 1, 4, 1, 4, 4, 6, 5, 4, 6, 5, ! 1, 3, 1, 1, 3, 0, 3, 0, 1, 0, ! 1, 2, 1, 1, 1, 3, 2, 3, 4, 3, ! 2, 2, 1, 3, 4, 2, 3, 3, 4, 4, ! 5, 5, 1, 1, 1, 1, 1, 2, 2, 2, ! 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, ! 1, 2, 1, 1, 1, 1, 2, 0, 0, 0, ! 0, 0, 1, 1, 2, 3, 1, 2, 1, 1, ! 5, 1, 1, 2, 2, 2, 2, 0, 5, 0, ! 4, 0, 0, 1, 2, 3, 3, 3, 0, 4, ! 1, 3, 0, 0, 7, 5, 2, 0, 0, 0, ! 0, 12, 0, 6, 2, 1, 1, 2, 3, 2, ! 2, 2, 3, 6, 8, 10, 12, 3, 4, 1, ! 3, 5, 2, 5, 0, 1, 0, 1, 0, 1, ! 1, 3, 4, 7, 1, 3, 0, 3, 2, 0, ! 0, 6, 2, 0, 1, 1, 3, 1, 3, 4, ! 4, 3, 4, 3, 4, 4, 3, 4, 3, 1, ! 0, 3, 1, 2, 1, 3, 1, 3, 1 }; static const short yydefact[] = { 3, ! 5, 0, 0, 0, 266, 157, 263, 125, 351, 347, ! 349, 0, 0, 0, 559, 17, 4, 8, 7, 0, ! 210, 211, 212, 213, 202, 203, 204, 205, 214, 215, ! 216, 217, 206, 207, 208, 209, 117, 117, 0, 133, ! 140, 260, 262, 261, 131, 283, 0, 0, 0, 265, ! 264, 0, 6, 15, 16, 352, 348, 350, 0, 0, ! 0, 346, 258, 281, 0, 271, 0, 160, 126, 138, ! 144, 128, 161, 127, 139, 145, 167, 129, 150, 155, ! 132, 168, 130, 151, 156, 178, 134, 136, 142, 141, ! 179, 135, 137, 143, 193, 146, 148, 153, 152, 194, ! 147, 149, 154, 162, 158, 176, 185, 164, 163, 159, ! 177, 186, 169, 165, 191, 200, 171, 170, 166, 192, ! 201, 180, 172, 174, 183, 182, 181, 173, 175, 184, ! 195, 187, 189, 198, 197, 196, 188, 190, 199, 0, ! 0, 14, 284, 30, 31, 372, 363, 372, 364, 361, ! 365, 10, 83, 84, 102, 55, 56, 0, 0, 0, ! 0, 0, 86, 0, 32, 34, 33, 0, 35, 36, ! 0, 37, 38, 0, 0, 39, 57, 0, 0, 59, ! 42, 44, 85, 0, 0, 0, 238, 239, 240, 241, ! 234, 235, 236, 237, 396, 0, 288, 230, 231, 232, ! 233, 259, 0, 0, 282, 11, 281, 29, 0, 281, ! 0, 0, 281, 345, 331, 258, 281, 0, 269, 0, ! 325, 326, 0, 0, 0, 0, 353, 0, 356, 0, ! 359, 53, 54, 0, 0, 0, 48, 45, 0, 464, ! 0, 0, 47, 0, 0, 0, 49, 0, 51, 0, ! 0, 76, 74, 72, 0, 0, 0, 0, 0, 0, ! 0, 0, 0, 0, 0, 0, 100, 101, 0, 0, ! 40, 0, 103, 0, 460, 452, 0, 46, 267, 398, ! 268, 294, 295, 296, 293, 0, 286, 289, 344, 0, ! 0, 118, 0, 551, 342, 0, 0, 416, 0, 0, ! 0, 27, 0, 472, 109, 473, 280, 0, 0, 13, ! 281, 21, 0, 281, 281, 329, 12, 25, 0, 281, ! 379, 374, 230, 231, 232, 233, 226, 227, 228, 229, ! 117, 117, 371, 0, 372, 281, 372, 393, 394, 368, ! 391, 0, 0, 0, 0, 90, 89, 0, 9, 43, ! 0, 0, 82, 81, 0, 0, 0, 0, 70, 71, ! 69, 68, 67, 65, 66, 60, 61, 62, 63, 64, ! 99, 98, 0, 41, 0, 92, 0, 0, 453, 454, ! 91, 258, 281, 397, 399, 404, 403, 405, 413, 0, ! 288, 40, 343, 272, 273, 0, 0, 0, 0, 418, ! 414, 0, 0, 417, 0, 447, 472, 111, 106, 110, ! 0, 278, 330, 0, 0, 19, 277, 328, 23, 355, ! 472, 472, 373, 380, 0, 358, 0, 0, 369, 0, ! 368, 0, 0, 0, 87, 58, 50, 52, 0, 0, ! 75, 73, 93, 97, 557, 0, 463, 432, 462, 472, ! 472, 472, 472, 0, 441, 0, 473, 427, 436, 455, ! 407, 527, 412, 281, 411, 285, 287, 83, 0, 274, ! 0, 555, 535, 222, 223, 218, 219, 224, 225, 220, ! 221, 117, 117, 553, 0, 536, 538, 552, 0, 420, ! 0, 0, 419, 415, 473, 107, 117, 117, 0, 327, ! 270, 273, 472, 275, 472, 375, 381, 473, 377, 383, ! 473, 281, 281, 395, 392, 281, 0, 0, 0, 0, ! 0, 77, 80, 456, 0, 433, 428, 437, 434, 429, ! 438, 473, 430, 439, 435, 431, 440, 442, 449, 450, ! 406, 408, 0, 0, 527, 410, 290, 0, 292, 533, ! 550, 400, 400, 529, 530, 0, 554, 0, 421, 422, ! 0, 114, 0, 115, 0, 300, 298, 297, 279, 473, ! 0, 473, 281, 376, 281, 0, 354, 357, 362, 281, ! 94, 0, 96, 313, 83, 0, 0, 310, 0, 312, ! 0, 366, 303, 309, 0, 0, 0, 558, 450, 461, ! 266, 0, 0, 0, 0, 0, 0, 515, 510, 459, ! 472, 0, 116, 117, 117, 0, 0, 448, 497, 477, ! 478, 0, 409, 528, 0, 336, 258, 281, 281, 332, ! 333, 281, 547, 401, 404, 258, 281, 281, 549, 281, ! 537, 210, 211, 212, 213, 202, 203, 204, 205, 214, ! 215, 216, 217, 206, 207, 208, 209, 117, 117, 539, ! 556, 0, 28, 457, 0, 0, 0, 0, 276, 0, ! 472, 0, 281, 472, 0, 281, 360, 0, 316, 0, ! 0, 307, 88, 0, 302, 0, 315, 306, 78, 0, ! 513, 500, 501, 502, 0, 0, 0, 516, 0, 473, ! 498, 0, 0, 123, 468, 483, 470, 488, 0, 481, ! 0, 0, 451, 465, 124, 291, 407, 527, 545, 281, ! 335, 281, 338, 546, 402, 407, 527, 548, 531, 400, ! 400, 458, 112, 113, 0, 20, 24, 382, 473, 281, ! 0, 385, 384, 281, 0, 388, 95, 0, 318, 0, ! 0, 304, 305, 0, 511, 503, 0, 508, 0, 0, ! 0, 121, 319, 0, 122, 322, 0, 0, 450, 0, ! 0, 0, 467, 472, 466, 487, 0, 499, 339, 340, ! 0, 334, 337, 0, 281, 281, 542, 281, 544, 299, ! 0, 387, 281, 390, 281, 0, 311, 308, 0, 509, ! 0, 281, 119, 0, 120, 0, 0, 0, 0, 517, ! 0, 482, 450, 451, 474, 472, 0, 341, 532, 540, ! 541, 543, 386, 389, 317, 512, 519, 0, 514, 320, ! 323, 0, 0, 471, 518, 496, 489, 0, 493, 480, ! 476, 475, 0, 0, 0, 0, 520, 521, 504, 472, ! 472, 469, 484, 517, 495, 450, 486, 0, 0, 519, ! 0, 0, 473, 473, 450, 0, 494, 0, 0, 0, ! 505, 522, 0, 0, 485, 490, 523, 0, 0, 0, ! 321, 324, 517, 0, 525, 0, 506, 0, 0, 0, ! 0, 491, 524, 507, 526, 450, 492, 0, 0, 0 }; ! static const short yydefgoto[] = { 898, ! 1, 2, 3, 17, 18, 19, 313, 503, 319, 505, ! 212, 407, 589, 174, 241, 373, 176, 177, 178, 179, ! 180, 181, 358, 357, 355, 597, 356, 182, 521, 183, ! 302, 303, 304, 496, 448, 20, 291, 613, 187, 188, ! 189, 190, 191, 192, 193, 194, 29, 30, 31, 32, ! 33, 34, 35, 36, 37, 38, 482, 483, 331, 202, ! 195, 39, 203, 40, 41, 42, 43, 44, 218, 65, ! 213, 219, 571, 66, 499, 292, 205, 46, 286, 287, ! 288, 569, 667, 591, 592, 593, 751, 594, 681, 595, ! 596, 762, 804, 850, 765, 806, 851, 502, 221, 629, ! 630, 631, 222, 47, 48, 49, 50, 335, 337, 342, ! 230, 51, 685, 430, 225, 226, 333, 506, 509, 507, ! 510, 340, 341, 196, 280, 384, 633, 634, 386, 387, ! 388, 214, 449, 450, 451, 452, 453, 454, 305, 276, ! 600, 774, 778, 378, 379, 380, 663, 618, 277, 456, ! 184, 664, 710, 711, 767, 712, 769, 306, 411, 814, ! 775, 815, 816, 713, 813, 768, 865, 770, 854, 883, ! 896, 856, 837, 620, 621, 699, 838, 846, 847, 848, ! 886, 463, 544, 484, 640, 784, 485, 486, 660, 487, ! 552, 295, 397, 488, 489, 446, 185 }; ! static const short yypact[] = { 131, ! 137, 2099, 2099, 229,-32768,-32768,-32768,-32768, 129, 129, ! 129, 101, 123, 147,-32768,-32768,-32768,-32768,-32768, 263, ! 1218, 731, 1314, 941, 390, 303, 525, 827, 1631, 1037, ! 2396, 1360, 696, 917, 716, 1008,-32768,-32768, 138,-32768, ! -32768,-32768,-32768,-32768, 129,-32768, 83, 85, 107,-32768, ! -32768, 2099,-32768,-32768,-32768, 129, 129, 129, 2695, 2613, ! 165,-32768, 112, 129, 170,-32768, 914,-32768,-32768,-32768, ! -32768, 129,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, ! 129,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 129, ! -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 129,-32768, ! -32768,-32768,-32768,-32768,-32768,-32768,-32768, 129,-32768,-32768, ! -32768,-32768,-32768,-32768,-32768,-32768, 129,-32768,-32768,-32768, ! -32768,-32768,-32768,-32768,-32768, 129,-32768,-32768,-32768,-32768, ! -32768,-32768,-32768,-32768, 129,-32768,-32768,-32768,-32768, 290, ! 263,-32768,-32768,-32768,-32768,-32768, 146,-32768, 149,-32768, ! 159,-32768,-32768,-32768,-32768,-32768,-32768, 2695, 2695, 205, ! 212, 214,-32768, 377,-32768,-32768,-32768, 2695,-32768,-32768, ! 1719,-32768,-32768, 2695, 204, 235,-32768, 2736, 2777,-32768, ! 3116, 1771, 317, 1480, 2695, 224, 1413, 859, 3041, 1050, ! 1230, 784, 1694, 1227,-32768, 249, 684, 136, 328, 219, ! 358,-32768, 263, 263, 129,-32768, 129,-32768, 307, 129, ! 2142, 357, 129,-32768,-32768, 112, 129, 257,-32768, 2080, ! 401, 454, 284, 2052, 293, 855,-32768, 306,-32768, 298, ! -32768,-32768,-32768, 2695, 2695, 3066,-32768,-32768, 305,-32768, ! 323, 346,-32768, 316, 2695, 1719,-32768, 1719,-32768, 2695, ! 2695, 393,-32768,-32768, 2695, 2695, 2695, 2695, 2695, 2695, ! 2695, 2695, 2695, 2695, 2695, 2695,-32768,-32768, 377, 377, ! 2695, 2695,-32768, 366,-32768, 409, 372,-32768,-32768, 425, ! -32768,-32768,-32768,-32768,-32768, 197,-32768, 399, 454, 215, ! 263,-32768, 470,-32768,-32768, 2613, 2245,-32768, 398, 2183, ! 445,-32768, 759, 65,-32768,-32768, 497, 290, 290,-32768, ! 129,-32768, 357, 129, 129,-32768,-32768,-32768, 357, 129, ! -32768,-32768, 1413, 859, 3041, 1050, 1230, 784, 1694, 1227, ! -32768, 330, 459, 1417,-32768, 129,-32768,-32768, 529, 488, ! -32768, 298, 2883, 2901, 490,-32768,-32768, 2486,-32768, 3116, ! 501, 503, 3116, 3116, 2695, 534, 2695, 2695, 2448, 3077, ! 2576, 2961, 1820, 818, 818, 452, 452,-32768,-32768,-32768, ! -32768,-32768, 515, 235, 513,-32768, 377, 1567, 409,-32768, ! -32768, 112, 129,-32768,-32768,-32768,-32768, 456,-32768, 522, ! 684, 2818,-32768,-32768, 209, 87, 1090, 516, 2695,-32768, ! -32768, 2695, 2286,-32768, 517,-32768,-32768,-32768,-32768,-32768, ! 2465,-32768, 401, 251, 290,-32768, 564,-32768,-32768,-32768, ! -32768,-32768,-32768,-32768, 527,-32768, 528, 2695, 377, 530, ! 488, 3066, 2695, 3066,-32768,-32768, 532, 532, 576, 2695, ! 3145, 2208,-32768,-32768,-32768, 324, 445,-32768,-32768, 78, ! 116, 121, 134, 624,-32768, 542,-32768,-32768,-32768,-32768, ! 425, 425,-32768, 129,-32768,-32768,-32768, 339, 545,-32768, ! 549,-32768,-32768, 1797, 3070, 1146, 1600, 1998, 3095, 1185, ! 1614,-32768,-32768,-32768, 553, 347,-32768,-32768, 374,-32768, ! 552, 555,-32768,-32768,-32768,-32768, 563, 565, 1348,-32768, ! -32768, 626,-32768,-32768,-32768, 567,-32768,-32768, 569,-32768, ! -32768, 129, 129, 3116,-32768, 129, 566, 579, 2925, 581, ! 1784,-32768, 3132,-32768, 377,-32768,-32768,-32768,-32768,-32768, ! -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 2356, ! -32768,-32768, 586, 1207,-32768,-32768,-32768, 2695,-32768,-32768, ! -32768, 175, 325,-32768,-32768, 1520,-32768, 673,-32768,-32768, ! 76,-32768, 290,-32768, 263,-32768,-32768, 3116,-32768,-32768, ! 1348,-32768, 129, 343, 129, 431,-32768,-32768,-32768, 129, ! -32768, 2695,-32768,-32768, 632, 377, 2695,-32768, 633, 3116, ! 595, 593,-32768,-32768, 185, 1920, 2695,-32768, 2425,-32768, ! 646, 2695, 649, 612, 614, 2654, 158, 699,-32768,-32768, ! -32768, 623,-32768,-32768,-32768, 627, 482, 628,-32768,-32768, ! -32768, 2551,-32768,-32768, 407,-32768, 112, 129, 129, 468, ! 483, 238,-32768,-32768, 129, 112, 129, 238,-32768, 129, ! -32768, 1797, 3070, 2564, 3099, 1146, 1600, 1547, 1752, 1998, ! 3095, 3037, 3112, 1185, 1614, 1634, 1766,-32768,-32768,-32768, ! -32768, 625,-32768,-32768, 478, 479, 1784, 76,-32768, 76, ! -32768, 2695, 109,-32768, 2695, 418,-32768, 2943,-32768, 1406, ! 1784,-32768,-32768, 1852,-32768, 1988,-32768,-32768, 3132, 2863, ! -32768,-32768,-32768,-32768, 640, 2695, 641,-32768, 650,-32768, ! -32768, 290, 263,-32768,-32768,-32768,-32768,-32768, 660, 700, ! 1250, 97,-32768,-32768,-32768,-32768, 175, 349,-32768, 129, ! -32768, 129,-32768,-32768, 129, 325, 325,-32768,-32768, 175, ! 325,-32768,-32768,-32768, 662,-32768,-32768,-32768,-32768, 2980, ! 2695,-32768,-32768, 2980, 2695,-32768,-32768, 2695,-32768, 665, ! 1988,-32768,-32768, 2695,-32768,-32768, 674,-32768, 2695, 711, ! 484,-32768, 403, 487,-32768, 1087, 701, 703,-32768, 707, ! 2695, 1654,-32768,-32768,-32768,-32768, 2695,-32768, 468, 483, ! 466,-32768,-32768, 1207, 129, 238,-32768, 238,-32768,-32768, ! 343,-32768, 2980,-32768, 2980, 2839,-32768,-32768, 3098,-32768, ! 62, 129,-32768, 357,-32768, 357, 2695, 2695, 750, 2551, ! 694,-32768,-32768,-32768,-32768,-32768, 695,-32768,-32768,-32768, ! -32768,-32768,-32768,-32768,-32768,-32768, 31, 697,-32768,-32768, ! -32768, 718, 719,-32768,-32768,-32768,-32768, 698,-32768,-32768, ! -32768,-32768, 710, 712, 377, 127, 715,-32768,-32768,-32768, ! -32768,-32768,-32768, 2695,-32768,-32768,-32768, 2695, 693, 31, ! 720, 31,-32768,-32768,-32768, 722,-32768, 730, 802, 163, ! -32768,-32768, 625, 625,-32768,-32768,-32768, 749, 470, 733, ! -32768,-32768, 2695, 2695, 317, 421,-32768, 740, 743, 744, ! 470,-32768,-32768,-32768, 317,-32768,-32768, 829, 830,-32768 }; static const short yypgoto[] = {-32768, ! -32768,-32768,-32768, 98,-32768,-32768,-32768,-32768,-32768,-32768, ! -32768,-32768, 34,-32768, -59, 443, -259, 378,-32768,-32768, ! -53, 728,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -277, ! -310, 538,-32768,-32768, -97, 222, -283, -565, 2, 8, ! 39, 41, 21, 43, 45, 48, -375, -339, 288, 289, ! -317, -281, 291, 294, -488, -466, 427, 435,-32768, -177, ! -119, -519, -199, 429, 496, 480, 706,-32768, -510, -121, ! -218, 437,-32768, 591,-32768, 379, 4, 68,-32768, 463, ! -32768, 286,-32768, -411,-32768, 176,-32768, -526,-32768,-32768, ! 299,-32768,-32768,-32768,-32768,-32768,-32768, -132, 282, 154, ! 171, -124, 58,-32768,-32768,-32768,-32768,-32768,-32768,-32768, ! -32768,-32768,-32768, 462, -114,-32768, 562,-32768,-32768, 230, ! 228, 568, 477, -95,-32768,-32768, -523, -262, -406, -429, ! -32768, 476,-32768,-32768,-32768,-32768,-32768,-32768, -242,-32768, ! -32768, -481, 91,-32768,-32768, 533, -541,-32768, 295,-32768, ! -32768, -514,-32768,-32768,-32768,-32768,-32768, 617, -388, 93, ! -685, -264, 20,-32768,-32768,-32768,-32768,-32768,-32768,-32768, ! -32768,-32768,-32768,-32768,-32768,-32768, -745, 54,-32768, 55, ! -32768, 461,-32768, -506,-32768,-32768,-32768,-32768,-32768,-32768, ! 433, -296,-32768,-32768,-32768,-32768, 60 }; ! #define YYLAST 3205 ! static const short yytable[] = { 175, ! 186, 314, 416, 21, 21, 45, 45, 220, 419, 22, ! 22, 374, 56, 57, 58, 396, 308, 385, 418, 223, ! 616, 478, 25, 25, 72, 619, 81, 415, 90, 639, ! 99, 542, 108, 228, 117, 478, 126, 624, 135, 844, ! 23, 23, 24, 24, 26, 26, 27, 27, 332, 28, ! 28, 614, 665, 21, 541, 45, 715, 479, 617, 22, ! 408, 52, 52, 45, 198, -105, 45, 658, 540, 688, ! 199, 479, 25, 615, 409, 242, 662, 67, -443, 480, ! 147, 149, 151, 809, 619, 144, 145, 144, 145, 659, ! 23, 300, 24, 480, 26, 273, 27, 776, 845, 28, ! 53, 200, 616, 201, 232, 233, 561, 827, 866, 144, ! 145, 52, 143, 458, 238, 481, -444, 617, 8, 574, ! 243, -445, 576, 143, 143, 143, 736, 840, 737, 481, ! -1, 278, 374, 614, -446, 455, -2, 888, 14, 143, ! 345, 14, 69, 599, 828, 635, 635, 732, 143, 152, ! 351, 299, 352, -105, 741, 615, 332, 143, 14, 753, ! 144, 145, -423, 777, 610, 14, 143, 59, 478, 470, ! 867, 146, 860, 148, 45, 143, 399, 62, 626, 875, ! 650, 668, 461, 670, 143, 527, 530, 533, 536, 60, ! 72, 761, 81, 143, 90, 150, 99, 237, 224, 543, ! -424, 72, 143, 81, 479, -425, 787, 789, 879, 861, ! 897, 538, 375, 61, 45, 696, 651, 198, -426, 45, ! 425, 142, 427, 199, 798, 78, 480, 323, 686, 45, ! 285, 197, 627, 324, 227, 209, 398, 229, 654, 45, ! 405, 628, 211, 238, 836, 880, 327, 231, 14, 45, ! 586, 45, 587, 206, 200, 735, 201, 207, 140, 141, ! 289, 290, 481, 339, 325, 62, 326, 14, 328, 750, ! 329, 234, 143, 330, 655, 210, 211, 819, 235, 390, ! 236, 210, 211, 314, 391, 334, 244, 542, 625, 671, ! 616, 674, 62, 215, 436, 439, 542, 393, 338, 45, ! 144, 145, 371, 372, 210, 211, 279, 91, 7, 92, ! 541, 760, 54, 55, 9, 10, 11, 315, 211, 541, ! 63, 614, 245, 635, 635, 273, 72, 62, 81, 64, ! 90, 281, 99, 500, 74, 323, 518, 45, 520, 491, ! 310, 324, 492, 615, 311, 62, 215, 216, 395, 238, ! 791, 62, 526, 529, 327, 535, 217, 301, 881, 882, ! -472, -472, -472, -472, 83, 289, 290, 317, -472, -472, ! -472, 207, 325, 293, 326, 339, 328, 320, 329, 144, ! 145, 330, 636, 198, -472, 45, -247, 346, 672, 199, ! 336, 637, 211, 334, 86, 7, 87, 459, 474, 349, ! 216, 9, 10, 11, 475, 347, 627, 524, 478, 217, ! 445, 525, 474, -378, -378, 628, 211, 476, 475, 14, ! 200, 547, 201, 782, 285, 783, 548, 717, 348, 209, ! 555, 476, -273, 62, 556, 45, 726, 45, -79, 477, ! 377, 673, 204, 666, 479, -104, -273, 14, 376, 70, ! 75, 79, 84, 477, 381, 543, 557, 106, 111, 115, ! 120, 558, 339, 745, 543, 392, 480, 315, 211, 528, ! 531, 534, 537, -246, 873, 874, 675, 72, 155, 90, ! 612, 108, 382, 126, 210, 211, -273, 401, 63, 716, ! -273, 383, 211, 830, 245, 831, 705, 64, 706, 707, ! 708, 709, 481, 890, 88, 93, 97, 102, 891, 264, ! 265, 266, 124, 129, 133, 138, 71, 76, 80, 85, ! 210, 211, 464, 211, 107, 112, 116, 121, 406, 95, ! 7, 96, 722, 211, 720, 211, 9, 10, 11, 612, ! 412, 21, 423, 45, 314, 474, 695, 22, 818, 722, ! 211, 475, 421, 422, 14, 247, 249, 642, 598, 45, ! 25, 733, 734, 643, 476, 311, 207, 803, 278, 763, ! 805, 311, 428, 611, 207, 429, 646, 434, 23, 440, ! 24, 764, 26, 437, 27, 438, 477, 28, 294, 413, ! 414, 307, 780, 781, 644, 309, 645, 443, 647, 622, ! 648, 885, 444, 649, 466, 490, 494, 504, -248, 632, ! 638, 512, 513, 895, 516, 70, 75, 79, 84, 679, ! 435, 522, 395, 21, 301, 45, 539, 549, 198, 22, ! 45, 550, 611, 676, 199, 554, 757, 198, 725, 45, ! 697, 559, 25, 199, 560, 72, 562, 81, 564, 90, ! 580, 99, 209, 108, 573, 117, 575, 126, 673, 135, ! 23, 581, 24, 583, 26, 200, 27, 201, 623, 28, ! 88, 93, 97, 102, 200, 661, 201, -30, 682, 683, ! 684, 622, 71, 76, 80, 85, 144, 145, 282, 283, ! 284, -31, 417, 294, 691, 692, 316, 693, 420, 801, ! 122, 7, 123, 551, 551, 698, 701, 9, 10, 11, ! 704, 811, 275, 610, 426, 772, 759, 817, 563, 565, ! 131, 7, 132, 756, 758, 14, 771, 9, 10, 11, ! 89, 94, 98, 103, 5, 73, 7, 74, 125, 130, ! 134, 139, 9, 10, 11, 14, 790, 832, 833, 797, ! 835, 70, 75, 79, 84, 389, 802, 800, 13, 301, ! 766, 462, -108, -108, -108, -108, 834, 807, -108, 808, ! -108, -108, -108, 810, 289, 290, 839, 843, 858, -254, ! 849, 855, 869, 289, 290, 474, -108, 786, 788, 7, ! 92, 475, 143, 857, 835, 9, 10, 11, 868, -256, ! 852, 853, 862, 871, 476, 876, 88, 93, 97, 102, ! 878, 21, 877, 45, -243, 884, 887, 22, 71, 76, ! 80, 85, 892, 835, 889, 893, 477, 894, 899, 900, ! 25, 100, 7, 101, 469, 702, 703, 497, 9, 10, ! 11, 410, 545, 652, 653, 498, 656, -108, 23, 657, ! 24, 501, 26, 467, 27, 321, 669, 28, 5, 752, ! 7, 8, 5, 465, 7, 74, 9, 10, 11, 622, ! 9, 10, 11, 262, 263, 264, 265, 266, 859, 730, ! 731, 394, 13, 785, 14, 15, 13, 779, 316, 316, ! 577, 578, 517, 687, 579, 424, 89, 94, 98, 103, ! 738, 743, 70, 75, 841, 515, 106, 111, 842, 431, ! -249, 460, 714, 870, 208, 553, 872, -26, -26, -26, ! -26, 127, 7, 128, 546, -26, -26, -26, 9, 10, ! 11, 0, 0, 0, 0, 0, 389, 389, 322, -370, ! 209, -26, 0, -273, 5, 82, 7, 83, 0, 0, ! 0, 0, 9, 10, 11, 88, 93, -273, 677, 124, ! 129, 343, 344, 0, 0, 0, 0, 0, 13, 71, ! 76, 0, 350, 107, 112, 0, 0, 353, 354, 0, ! 210, 211, 359, 360, 361, 362, 363, 364, 365, 366, ! 367, 368, 369, 370, 457, 0, 0, -273, 0, 0, ! -255, -273, -26, 0, 0, 0, 718, 719, 0, 0, ! 724, 0, 136, 7, 137, 727, 728, 0, 729, 9, ! 10, 11, 0, 495, -245, 0, 0, 389, 389, 0, ! 0, 0, 89, 94, 98, 103, 0, 508, 511, 0, ! 5, 109, 7, 110, 0, 0, 0, 0, 9, 10, ! 11, 742, 0, 5, 746, 7, 83, 0, 0, 0, ! 0, 9, 10, 11, 13, 0, 457, 457, 532, 457, ! 70, 75, 79, 84, 0, 0, 0, 13, 106, 111, ! 115, 120, 0, 0, 441, 442, 0, 0, 0, 0, ! 471, -257, 472, 5, 6, 7, 8, 0, 294, 473, ! 294, 9, 10, 11, 0, 721, 723, 0, 0, 0, ! 0, 0, 0, 209, 0, 0, -273, 13, 792, 570, ! -251, 572, 794, 0, 0, 88, 93, 97, 102, 0, ! -273, 0, 0, 124, 129, 133, 138, 71, 76, 80, ! 85, 0, 0, 0, 0, 107, 112, 116, 121, 0, ! 86, 7, 87, 210, 211, 514, 0, 9, 10, 11, ! 519, 0, 0, 820, 821, 0, 822, 523, 0, 0, ! -273, 823, -534, 824, -273, 14, 0, 0, 0, 0, ! 829, 89, 94, 0, 0, 125, 130, 0, 0, 122, ! 7, 123, 389, 389, 0, 0, 9, 10, 11, 0, ! 0, 389, 389, 0, 0, 389, 389, 471, 0, 0, ! 5, 6, 7, 8, 14, 0, 473, 0, 9, 10, ! 11, 5, 68, 7, 69, 0, 568, 700, 0, 9, ! 10, 11, 7, 101, 13, 7, 87, 0, 9, 10, ! 11, 9, 10, 11, 0, 13, 0, 14, 590, 0, ! 773, 0, -450, -450, 721, 723, 723, -450, -450, 14, ! -450, 0, 0, 0, -450, 0, -450, -450, -450, -450, ! -450, -450, -450, -450, -450, -450, -450, 0, -450, 0, ! -450, 0, -450, -450, -450, -450, -450, 739, 0, -534, ! 511, -450, 0, 0, 0, 0, 0, -450, 568, 0, ! -450, -242, 0, 0, 0, -450, -450, -450, 0, 678, ! 0, -450, -450, 0, 680, 0, -450, 5, 77, 7, ! 78, 0, 0, 590, 689, 9, 10, 11, 0, 690, ! 0, 0, 0, -450, 0, -450, -450, 0, -450, 0, ! 0, 13, 0, 14, 0, 0, 0, 0, 566, 0, ! 153, 89, 94, 98, 103, 154, 155, 0, 156, 125, ! 130, 134, 139, 5, 118, 7, 119, 0, 0, 0, ! 0, 9, 10, 11, 0, 0, 157, 0, 15, 0, ! 158, 159, 160, 161, 162, 0, 0, 13, 0, 163, ! 532, 0, 0, 0, 590, 164, 0, -244, 165, 740, ! 0, 0, 744, 166, 167, 168, 0, 0, 590, 169, ! 170, 590, 0, 590, 171, 748, 5, 321, 7, 69, ! 5, 0, 7, 8, 9, 10, 11, 0, 9, 10, ! 11, 0, 532, 172, 173, 0, 567, 0, 0, 0, ! 13, 0, 14, -253, 13, 0, 14, 15, 250, 251, ! 252, 0, 253, 254, 255, 256, 257, 258, 259, 260, ! 261, 262, 263, 264, 265, 266, 863, 864, 793, 0, ! 0, 0, 795, 0, 0, 796, 0, 0, 590, 0, ! 274, 799, -448, -448, -448, -448, -448, -448, -448, 0, ! -448, -448, -448, -448, -448, 749, -448, -448, -448, -448, ! -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, ! -448, -448, -448, -448, -448, -448, -448, 0, 0, 0, ! 0, -448, 0, 5, 6, 7, 8, -448, 0, 641, ! -448, 9, 10, 11, 0, -448, -448, -448, 0, 0, ! 0, -448, -448, 0, 0, 0, -448, 13, 0, 14, ! 0, 95, 7, 96, 0, 0, 0, 0, 9, 10, ! 11, 0, 0, -448, 275, -448, -448, 447, -448, -472, ! -472, -472, -472, -472, -472, -472, 14, -472, -472, -472, ! -472, -472, 0, -472, -472, -472, -472, -472, -472, -472, ! -472, -472, -472, -472, -472, -472, -472, -472, 0, -472, ! -472, -472, -472, -472, 91, 7, 92, 0, -472, 0, ! 0, 9, 10, 11, -472, 0, 0, -472, 127, 7, ! 128, 0, -472, -472, -472, 9, 10, 11, -472, -472, ! 0, 0, 0, -472, 5, 104, 7, 105, 131, 7, ! 132, 0, 9, 10, 11, 9, 10, 11, 0, 0, ! -472, 0, -472, -472, 812, -472, -479, -479, 13, 0, ! 14, -479, -479, 14, -479, 0, 0, 0, -479, 0, ! -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, ! -479, 0, -479, 0, -479, 0, -479, -479, -479, -479, ! -479, 0, 0, 0, 0, -479, 0, 0, 0, 7, ! 96, -479, 0, 0, -479, 9, 10, 11, 0, -479, ! -479, -479, 0, 0, -250, -479, -479, 0, 0, 239, ! -479, 153, 5, 14, 7, 8, 154, 155, 0, 156, ! 9, 10, 11, 0, 0, 0, 0, -479, 0, -479, ! -479, 0, -479, 0, 0, 0, 13, 157, 14, 15, ! 0, 158, 159, 160, 161, 162, 100, 7, 101, 0, ! 163, 0, 0, 9, 10, 11, 164, 0, 0, 165, ! 136, 7, 137, 0, 166, 167, 168, 9, 10, 11, ! 169, 170, 0, 0, 584, 171, 585, 145, 0, 0, ! 0, 154, 155, 0, 156, 0, 0, 0, 0, 0, ! 5, 68, 7, 69, 172, 173, 0, 240, 9, 10, ! 11, 0, 157, 0, 15, 0, 158, 159, 160, 161, ! 162, 0, 0, 0, 13, 163, 14, 0, 0, 0, ! 0, 164, 267, 268, 165, 269, 270, 271, 272, 166, ! 167, 168, 0, 0, 0, 169, 170, 0, 0, 586, ! 171, 587, 584, 0, 585, 145, 0, 0, 0, 154, ! 155, 0, 156, 0, 0, 0, 0, 0, -301, 172, ! 173, 0, 588, 260, 261, 262, 263, 264, 265, 266, ! 157, 0, 15, 0, 158, 159, 160, 161, 162, 0, ! 0, 0, 0, 163, 0, 0, 0, 0, 0, 164, ! 0, 0, 165, 0, 0, 0, 0, 166, 167, 168, ! 0, 0, 0, 169, 170, 0, 0, 586, 171, 587, ! 584, 0, 153, 0, 0, 0, 0, 154, 155, 0, ! 156, 0, 0, 0, 0, 0, -367, 172, 173, 0, ! 588, 0, 0, 0, 0, 0, 0, 0, 157, 0, ! 15, 0, 158, 159, 160, 161, 162, 0, 0, 0, ! 0, 163, 0, -314, 0, 0, 0, 164, 0, 0, ! 165, 0, 0, 0, 0, 166, 167, 168, 0, 0, ! 0, 169, 170, 0, 0, -314, 171, -314, 584, 0, ! 153, 0, 0, 0, 0, 154, 155, 0, 156, 0, ! 0, 5, 104, 7, 105, 172, 173, 0, 588, 9, ! 10, 11, 0, 0, 0, 0, 157, 0, 15, 0, ! 158, 159, 160, 161, 162, 13, 0, 14, 0, 163, ! 0, 0, 0, 0, 0, 164, 0, 0, 165, 0, ! 0, 0, 0, 166, 167, 168, 0, 0, 0, 169, ! 170, 0, 318, 0, 171, -22, -22, -22, -22, 0, ! 0, 0, 0, -22, -22, -22, 0, 0, 0, 0, ! 0, 0, 0, 172, 173, 0, 588, 0, 209, -22, ! 312, -273, 0, -18, -18, -18, -18, 0, 0, 0, ! 0, -18, -18, -18, 0, -273, 0, 0, 0, 4, ! 0, -117, 5, 6, 7, 8, 209, -18, 0, -273, ! 9, 10, 11, 0, 0, 0, 0, 0, 210, 211, ! 0, 0, 0, -273, 0, 12, 13, 0, 14, 15, ! 0, 0, 0, 0, 0, -273, 0, 0, 0, -273, ! -22, 0, 0, 0, 153, 5, 296, 7, 8, 154, ! 155, 0, 156, 9, 10, 11, -117, 0, 0, 0, ! 0, 0, 0, -273, 0, -117, 0, -273, -18, 13, ! 157, 14, 15, 0, 158, 159, 160, 161, 162, 0, ! 0, 0, 16, 163, 0, 153, 0, 402, 0, 164, ! 154, 155, 165, 156, 0, 0, 0, 166, 167, 297, ! 0, 0, 0, 169, 170, 0, 0, 0, 171, 0, ! 0, 157, 0, 15, 0, 158, 159, 160, 161, 162, ! 0, 0, 0, 0, 163, 0, 0, 172, 173, 0, ! 164, 298, 0, 165, 0, 0, 0, 0, 166, 167, ! 403, 0, 0, 0, 169, 170, 0, 153, 0, 171, ! 0, 0, 154, 155, 0, 156, 255, 256, 257, 258, ! 259, 260, 261, 262, 263, 264, 265, 266, 172, 173, ! 0, 0, 404, 157, 0, 15, 0, 158, 159, 160, ! 161, 162, 0, 0, 0, 0, 163, 0, 153, 0, ! 0, 0, 164, 154, 155, 165, 156, 0, 0, 0, ! 166, 167, 168, 0, 0, 0, 169, 170, 0, 0, ! 0, 171, 0, 0, 157, 0, 15, 0, 158, 159, ! 160, 161, 162, 0, 0, 0, 0, 163, 0, 0, ! 172, 173, 0, 164, 400, 0, 165, 0, 0, 0, ! 0, 166, 167, 168, 0, 0, 0, 169, 170, 0, ! 0, 0, 171, 0, 0, 0, 0, 0, 585, 601, ! 6, 7, 8, 154, 155, 0, 156, 9, 10, 11, ! 0, 172, 173, 0, 0, 493, 602, 603, 604, 605, ! 606, 607, 608, 13, 157, 14, 15, 0, 158, 159, ! 160, 161, 162, 0, 0, 0, 0, 163, 0, 5, ! 113, 7, 114, 164, 0, 0, 165, 9, 10, 11, ! 0, 166, 167, 168, 0, 0, 0, 169, 170, 0, ! 0, 0, 171, 13, 0, 14, 0, 585, 145, 0, ! 0, 0, 154, 155, 0, 156, 0, 0, 0, 609, ! 0, 172, 173, 0, 610, 602, 603, 604, 605, 606, ! 607, 608, 0, 157, 0, 15, 0, 158, 159, 160, ! 161, 162, 0, 0, 0, 0, 163, 0, 5, 6, ! 7, 8, 164, 0, 0, 165, 9, 10, 11, -252, ! 166, 167, 168, 0, 0, 0, 169, 170, 153, 0, ! 0, 171, 13, 154, 155, 0, 156, 256, 257, 258, ! 259, 260, 261, 262, 263, 264, 265, 266, 609, 0, ! 172, 173, 0, 610, 157, 0, 15, 0, 158, 159, ! 160, 161, 162, 0, 0, 0, 0, 163, 0, 0, ! 0, 0, 0, 164, 0, 0, 165, 0, 0, 0, ! 0, 166, 167, 168, 0, 0, 0, 169, 170, 0, ! 0, 0, 171, 153, 5, 6, 7, 8, 154, 155, ! 0, 156, 9, 10, 11, 0, 0, 5, 77, 7, ! 78, 172, 173, 0, 435, 9, 10, 11, 13, 157, ! 14, 15, 0, 158, 159, 160, 161, 162, 0, 0, ! 0, 13, 163, 14, 0, 0, 0, 0, 164, 0, ! 0, 165, 0, 0, 0, 0, 166, 167, 168, 0, ! 0, 0, 169, 170, 0, 153, 5, 171, 7, 8, ! 154, 155, 0, 156, 9, 10, 11, 258, 259, 260, ! 261, 262, 263, 264, 265, 266, 172, 173, 0, 0, ! 13, 157, 14, 15, 0, 158, 159, 160, 161, 162, ! 0, 0, 0, 0, 163, 0, 153, 0, 0, 0, ! 164, 154, 155, 165, 156, 0, 0, 0, 166, 167, ! 168, 0, 0, 0, 169, 170, 0, 0, 0, 171, ! 0, 0, 157, 0, 15, 0, 158, 159, 160, 161, ! 162, 0, 0, 0, 0, 163, 0, 153, 172, 173, ! 0, 164, 154, 155, 165, 156, 0, 0, 0, 166, ! 167, 168, 0, 0, 0, 169, 170, 0, 0, 0, ! 171, 0, 0, 157, 0, 15, 0, 158, 159, 160, ! 161, 162, 0, 0, 0, 0, 163, 694, 153, 172, ! 173, 0, 164, 154, 155, 165, 156, 0, 0, 0, ! 166, 167, 168, 0, 0, 0, 169, 170, 0, 0, ! 0, 171, 0, 0, 157, 0, 15, 0, 158, 159, ! 160, 161, 162, 0, 0, 0, 0, 163, 0, 153, ! 172, 173, 0, 164, 154, 155, 165, 156, 0, 0, ! 0, 166, 167, 168, 0, 0, 0, 169, 170, 0, ! 0, 0, 246, 0, 0, 157, 0, 15, 0, 158, ! 159, 160, 161, 162, 0, 0, 0, 0, 163, 0, ! 468, 172, 173, 0, 164, 154, 155, 165, 156, 0, ! 0, 0, 166, 167, 168, 0, 0, 0, 169, 170, ! 0, 0, 0, 248, 0, 0, 157, 0, 15, 0, ! 158, 159, 160, 161, 162, 0, 0, 0, 0, 163, ! 0, 0, 172, 173, 0, 164, 0, 0, 165, 0, ! 0, 0, 754, 166, 167, 168, 0, 0, 0, 169, ! 170, 250, 251, 252, 171, 253, 254, 255, 256, 257, ! 258, 259, 260, 261, 262, 263, 264, 265, 266, 0, ! 0, 0, 0, 172, 173, 250, 251, 252, 755, 253, ! 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, ! 264, 265, 266, 0, 0, 250, 251, 252, 825, 253, ! 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, ! 264, 265, 266, 250, 251, 252, 0, 253, 254, 255, ! 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, ! 266, 0, 0, 0, 0, 0, 0, 250, 251, 252, ! 432, 253, 254, 255, 256, 257, 258, 259, 260, 261, ! 262, 263, 264, 265, 266, 250, 251, 252, 433, 253, ! 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, ! 264, 265, 266, 0, 0, 0, 0, 0, 0, 14, ! 0, 0, 582, 259, 260, 261, 262, 263, 264, 265, ! 266, 0, 250, 251, 252, 747, 253, 254, 255, 256, ! 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, ! 5, 113, 7, 114, 5, 0, 7, 78, 9, 10, ! 11, 0, 9, 10, 11, 0, 0, 0, 0, 0, ! 0, 0, 0, 0, 13, 0, 14, 0, 13, 5, ! 14, 7, 8, 5, 73, 7, 74, 9, 10, 11, ! 0, 9, 10, 11, 0, 0, 0, 0, 0, 0, ! 0, 0, 0, 13, 0, 14, 0, 13, 5, 109, ! 7, 110, 5, 82, 7, 83, 9, 10, 11, 0, ! 9, 10, 11, 0, 0, 5, 118, 7, 119, 0, ! 0, 0, 13, 9, 10, 11, 13, 257, 258, 259, ! 260, 261, 262, 263, 264, 265, 266, 0, 0, 13, ! 250, 251, 252, 826, 253, 254, 255, 256, 257, 258, ! 259, 260, 261, 262, 263, 264, 265, 266, 250, 251, ! 252, 0, 253, 254, 255, 256, 257, 258, 259, 260, ! 261, 262, 263, 264, 265, 266, 252, 0, 253, 254, ! 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, ! 265, 266, 254, 255, 256, 257, 258, 259, 260, 261, ! 262, 263, 264, 265, 266 }; ! static const short yycheck[] = { 59, ! 60, 220, 313, 2, 3, 2, 3, 140, 319, 2, ! 3, 271, 9, 10, 11, 293, 216, 280, 315, 141, ! 540, 397, 2, 3, 21, 540, 23, 311, 25, 553, ! 27, 461, 29, 148, 31, 411, 33, 544, 35, 9, ! 2, 3, 2, 3, 2, 3, 2, 3, 226, 2, ! 3, 540, 563, 52, 461, 52, 622, 397, 540, 52, ! 303, 2, 3, 60, 63, 1, 63, 556, 457, 596, ! 63, 411, 52, 540, 10, 171, 1, 20, 1, 397, ! 47, 48, 49, 769, 599, 3, 4, 3, 4, 556, ! 52, 211, 52, 411, 52, 9, 52, 1, 68, 52, ! 3, 63, 622, 63, 158, 159, 495, 46, 854, 3, ! 4, 52, 45, 378, 168, 397, 1, 599, 7, 508, ! 174, 1, 511, 56, 57, 58, 668, 813, 670, 411, ! 0, 185, 392, 622, 1, 378, 0, 883, 30, 72, ! 236, 30, 7, 532, 83, 552, 553, 662, 81, 52, ! 246, 211, 248, 89, 46, 622, 334, 90, 30, 686, ! 3, 4, 85, 67, 89, 30, 99, 67, 544, 83, ! 856, 89, 46, 89, 171, 108, 296, 3, 4, 865, ! 556, 570, 382, 572, 117, 450, 451, 452, 453, 67, ! 187, 702, 189, 126, 191, 89, 193, 164, 141, 462, ! 85, 198, 135, 200, 544, 85, 730, 731, 46, 83, ! 896, 454, 272, 67, 211, 58, 556, 216, 85, 216, ! 335, 84, 337, 216, 751, 7, 544, 226, 44, 226, ! 197, 67, 58, 226, 89, 27, 296, 89, 556, 236, ! 300, 67, 68, 297, 810, 83, 226, 89, 30, 246, ! 66, 248, 68, 84, 216, 667, 216, 88, 37, 38, ! 203, 204, 544, 230, 226, 3, 226, 30, 226, 681, ! 226, 67, 205, 226, 556, 67, 68, 784, 67, 83, ! 67, 67, 68, 502, 88, 226, 83, 717, 548, 573, ! 810, 575, 3, 4, 348, 355, 726, 83, 1, 296, ! 3, 4, 269, 270, 67, 68, 83, 5, 6, 7, ! 717, 700, 84, 85, 12, 13, 14, 67, 68, 726, ! 58, 810, 88, 730, 731, 9, 323, 3, 325, 67, ! 327, 83, 329, 83, 7, 334, 432, 334, 434, 399, ! 84, 334, 402, 810, 88, 3, 4, 58, 291, 403, ! 739, 3, 450, 451, 334, 453, 67, 1, 873, 874, ! 4, 5, 6, 7, 7, 308, 309, 84, 12, 13, ! 14, 88, 334, 67, 334, 342, 334, 85, 334, 3, ! 4, 334, 58, 382, 28, 382, 84, 83, 46, 382, ! 85, 67, 68, 334, 5, 6, 7, 378, 397, 84, ! 58, 12, 13, 14, 397, 83, 58, 84, 784, 67, ! 377, 88, 411, 84, 85, 67, 68, 397, 411, 30, ! 382, 83, 382, 720, 391, 722, 88, 627, 83, 27, ! 84, 411, 30, 3, 88, 432, 636, 434, 46, 397, ! 32, 574, 64, 565, 784, 89, 44, 30, 83, 21, ! 22, 23, 24, 411, 83, 718, 83, 29, 30, 31, ! 32, 88, 429, 46, 727, 67, 784, 67, 68, 450, ! 451, 452, 453, 84, 863, 864, 46, 474, 9, 476, ! 540, 478, 58, 480, 67, 68, 84, 90, 58, 83, ! 88, 67, 68, 804, 88, 806, 15, 67, 17, 18, ! 19, 20, 784, 83, 25, 26, 27, 28, 88, 58, ! 59, 60, 33, 34, 35, 36, 21, 22, 23, 24, ! 67, 68, 67, 68, 29, 30, 31, 32, 84, 5, ! 6, 7, 67, 68, 67, 68, 12, 13, 14, 599, ! 44, 540, 84, 540, 763, 544, 606, 540, 83, 67, ! 68, 544, 331, 332, 30, 178, 179, 556, 525, 556, ! 540, 84, 84, 556, 544, 88, 88, 84, 622, 702, ! 84, 88, 44, 540, 88, 88, 556, 88, 540, 46, ! 540, 703, 540, 83, 540, 83, 544, 540, 210, 308, ! 309, 213, 717, 718, 556, 217, 556, 83, 556, 540, ! 556, 879, 90, 556, 83, 90, 90, 44, 84, 552, ! 553, 85, 85, 891, 85, 187, 188, 189, 190, 586, ! 89, 46, 565, 622, 1, 622, 85, 83, 627, 622, ! 627, 83, 599, 576, 627, 83, 696, 636, 635, 636, ! 607, 90, 622, 636, 90, 642, 84, 644, 84, 646, ! 85, 648, 27, 650, 88, 652, 88, 654, 791, 656, ! 622, 83, 622, 83, 622, 627, 622, 627, 83, 622, ! 191, 192, 193, 194, 636, 3, 636, 46, 46, 85, ! 88, 622, 187, 188, 189, 190, 3, 4, 5, 6, ! 7, 46, 314, 315, 46, 84, 221, 84, 320, 759, ! 5, 6, 7, 482, 483, 7, 84, 12, 13, 14, ! 84, 771, 85, 89, 336, 16, 67, 777, 497, 498, ! 5, 6, 7, 84, 84, 30, 67, 12, 13, 14, ! 25, 26, 27, 28, 4, 5, 6, 7, 33, 34, ! 35, 36, 12, 13, 14, 30, 85, 807, 808, 85, ! 810, 323, 324, 325, 326, 280, 46, 84, 28, 1, ! 703, 383, 4, 5, 6, 7, 17, 67, 10, 67, ! 12, 13, 14, 67, 717, 718, 83, 83, 67, 84, ! 84, 84, 90, 726, 727, 784, 28, 730, 731, 6, ! 7, 784, 725, 84, 854, 12, 13, 14, 858, 84, ! 83, 83, 88, 84, 784, 84, 327, 328, 329, 330, ! 9, 810, 83, 810, 84, 67, 84, 810, 323, 324, ! 325, 326, 83, 883, 884, 83, 784, 84, 0, 0, ! 810, 5, 6, 7, 392, 614, 615, 411, 12, 13, ! 14, 304, 464, 556, 556, 411, 556, 89, 810, 556, ! 810, 415, 810, 391, 810, 1, 571, 810, 4, 684, ! 6, 7, 4, 388, 6, 7, 12, 13, 14, 810, ! 12, 13, 14, 56, 57, 58, 59, 60, 845, 658, ! 659, 291, 28, 730, 30, 31, 28, 717, 413, 414, ! 512, 513, 431, 595, 516, 334, 191, 192, 193, 194, ! 671, 674, 474, 475, 814, 429, 478, 479, 816, 342, ! 84, 379, 618, 860, 1, 483, 862, 4, 5, 6, ! 7, 5, 6, 7, 464, 12, 13, 14, 12, 13, ! 14, -1, -1, -1, -1, -1, 461, 462, 84, 85, ! 27, 28, -1, 30, 4, 5, 6, 7, -1, -1, ! -1, -1, 12, 13, 14, 476, 477, 44, 580, 480, ! 481, 234, 235, -1, -1, -1, -1, -1, 28, 474, ! 475, -1, 245, 478, 479, -1, -1, 250, 251, -1, ! 67, 68, 255, 256, 257, 258, 259, 260, 261, 262, ! 263, 264, 265, 266, 378, -1, -1, 84, -1, -1, ! 84, 88, 89, -1, -1, -1, 628, 629, -1, -1, ! 632, -1, 5, 6, 7, 637, 638, -1, 640, 12, ! 13, 14, -1, 407, 84, -1, -1, 552, 553, -1, ! -1, -1, 327, 328, 329, 330, -1, 421, 422, -1, ! 4, 5, 6, 7, -1, -1, -1, -1, 12, 13, ! 14, 673, -1, 4, 676, 6, 7, -1, -1, -1, ! -1, 12, 13, 14, 28, -1, 450, 451, 452, 453, ! 642, 643, 644, 645, -1, -1, -1, 28, 650, 651, ! 652, 653, -1, -1, 357, 358, -1, -1, -1, -1, ! 1, 84, 3, 4, 5, 6, 7, -1, 720, 10, ! 722, 12, 13, 14, -1, 630, 631, -1, -1, -1, ! -1, -1, -1, 27, -1, -1, 30, 28, 740, 503, ! 84, 505, 744, -1, -1, 646, 647, 648, 649, -1, ! 44, -1, -1, 654, 655, 656, 657, 642, 643, 644, ! 645, -1, -1, -1, -1, 650, 651, 652, 653, -1, ! 5, 6, 7, 67, 68, 428, -1, 12, 13, 14, ! 433, -1, -1, 785, 786, -1, 788, 440, -1, -1, ! 84, 793, 83, 795, 88, 30, -1, -1, -1, -1, ! 802, 476, 477, -1, -1, 480, 481, -1, -1, 5, ! 6, 7, 717, 718, -1, -1, 12, 13, 14, -1, ! -1, 726, 727, -1, -1, 730, 731, 1, -1, -1, ! 4, 5, 6, 7, 30, -1, 10, -1, 12, 13, ! 14, 4, 5, 6, 7, -1, 499, 611, -1, 12, ! 13, 14, 6, 7, 28, 6, 7, -1, 12, 13, ! 14, 12, 13, 14, -1, 28, -1, 30, 521, -1, ! 1, -1, 3, 4, 779, 780, 781, 8, 9, 30, 11, -1, -1, -1, 15, -1, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, -1, 29, -1, ! 31, -1, 33, 34, 35, 36, 37, 671, -1, 83, ! 674, 42, -1, -1, -1, -1, -1, 48, 571, -1, ! 51, 84, -1, -1, -1, 56, 57, 58, -1, 582, ! -1, 62, 63, -1, 587, -1, 67, 4, 5, 6, ! 7, -1, -1, 596, 597, 12, 13, 14, -1, 602, ! -1, -1, -1, 84, -1, 86, 87, -1, 89, -1, ! -1, 28, -1, 30, -1, -1, -1, -1, 1, -1, ! 3, 646, 647, 648, 649, 8, 9, -1, 11, 654, ! 655, 656, 657, 4, 5, 6, 7, -1, -1, -1, ! -1, 12, 13, 14, -1, -1, 29, -1, 31, -1, ! 33, 34, 35, 36, 37, -1, -1, 28, -1, 42, ! 774, -1, -1, -1, 667, 48, -1, 84, 51, 672, ! -1, -1, 675, 56, 57, 58, -1, -1, 681, 62, ! 63, 684, -1, 686, 67, 10, 4, 1, 6, 7, ! 4, -1, 6, 7, 12, 13, 14, -1, 12, 13, ! 14, -1, 816, 86, 87, -1, 89, -1, -1, -1, ! 28, -1, 30, 84, 28, -1, 30, 31, 43, 44, ! 45, -1, 47, 48, 49, 50, 51, 52, 53, 54, ! 55, 56, 57, 58, 59, 60, 850, 851, 741, -1, ! -1, -1, 745, -1, -1, 748, -1, -1, 751, -1, ! 1, 754, 3, 4, 5, 6, 7, 8, 9, -1, ! 11, 12, 13, 14, 15, 90, 17, 18, 19, 20, ! 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, ! 31, 32, 33, 34, 35, 36, 37, -1, -1, -1, ! -1, 42, -1, 4, 5, 6, 7, 48, -1, 10, ! 51, 12, 13, 14, -1, 56, 57, 58, -1, -1, ! -1, 62, 63, -1, -1, -1, 67, 28, -1, 30, ! -1, 5, 6, 7, -1, -1, -1, -1, 12, 13, ! 14, -1, -1, 84, 85, 86, 87, 1, 89, 3, ! 4, 5, 6, 7, 8, 9, 30, 11, 12, 13, ! 14, 15, -1, 17, 18, 19, 20, 21, 22, 23, ! 24, 25, 26, 27, 28, 29, 30, 31, -1, 33, ! 34, 35, 36, 37, 5, 6, 7, -1, 42, -1, ! -1, 12, 13, 14, 48, -1, -1, 51, 5, 6, ! 7, -1, 56, 57, 58, 12, 13, 14, 62, 63, ! -1, -1, -1, 67, 4, 5, 6, 7, 5, 6, ! 7, -1, 12, 13, 14, 12, 13, 14, -1, -1, ! 84, -1, 86, 87, 1, 89, 3, 4, 28, -1, ! 30, 8, 9, 30, 11, -1, -1, -1, 15, -1, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, ! 27, -1, 29, -1, 31, -1, 33, 34, 35, 36, ! 37, -1, -1, -1, -1, 42, -1, -1, -1, 6, ! 7, 48, -1, -1, 51, 12, 13, 14, -1, 56, ! 57, 58, -1, -1, 84, 62, 63, -1, -1, 1, ! 67, 3, 4, 30, 6, 7, 8, 9, -1, 11, ! 12, 13, 14, -1, -1, -1, -1, 84, -1, 86, ! 87, -1, 89, -1, -1, -1, 28, 29, 30, 31, ! -1, 33, 34, 35, 36, 37, 5, 6, 7, -1, ! 42, -1, -1, 12, 13, 14, 48, -1, -1, 51, ! 5, 6, 7, -1, 56, 57, 58, 12, 13, 14, ! 62, 63, -1, -1, 1, 67, 3, 4, -1, -1, -1, 8, 9, -1, 11, -1, -1, -1, -1, -1, ! 4, 5, 6, 7, 86, 87, -1, 89, 12, 13, ! 14, -1, 29, -1, 31, -1, 33, 34, 35, 36, ! 37, -1, -1, -1, 28, 42, 30, -1, -1, -1, ! -1, 48, 62, 63, 51, 65, 66, 67, 68, 56, ! 57, 58, -1, -1, -1, 62, 63, -1, -1, 66, ! 67, 68, 1, -1, 3, 4, -1, -1, -1, 8, ! 9, -1, 11, -1, -1, -1, -1, -1, 85, 86, ! 87, -1, 89, 54, 55, 56, 57, 58, 59, 60, ! 29, -1, 31, -1, 33, 34, 35, 36, 37, -1, ! -1, -1, -1, 42, -1, -1, -1, -1, -1, 48, ! -1, -1, 51, -1, -1, -1, -1, 56, 57, 58, ! -1, -1, -1, 62, 63, -1, -1, 66, 67, 68, ! 1, -1, 3, -1, -1, -1, -1, 8, 9, -1, ! 11, -1, -1, -1, -1, -1, 85, 86, 87, -1, ! 89, -1, -1, -1, -1, -1, -1, -1, 29, -1, ! 31, -1, 33, 34, 35, 36, 37, -1, -1, -1, ! -1, 42, -1, 44, -1, -1, -1, 48, -1, -1, ! 51, -1, -1, -1, -1, 56, 57, 58, -1, -1, ! -1, 62, 63, -1, -1, 66, 67, 68, 1, -1, ! 3, -1, -1, -1, -1, 8, 9, -1, 11, -1, ! -1, 4, 5, 6, 7, 86, 87, -1, 89, 12, ! 13, 14, -1, -1, -1, -1, 29, -1, 31, -1, ! 33, 34, 35, 36, 37, 28, -1, 30, -1, 42, ! -1, -1, -1, -1, -1, 48, -1, -1, 51, -1, ! -1, -1, -1, 56, 57, 58, -1, -1, -1, 62, ! 63, -1, 1, -1, 67, 4, 5, 6, 7, -1, ! -1, -1, -1, 12, 13, 14, -1, -1, -1, -1, ! -1, -1, -1, 86, 87, -1, 89, -1, 27, 28, ! 1, 30, -1, 4, 5, 6, 7, -1, -1, -1, ! -1, 12, 13, 14, -1, 44, -1, -1, -1, 1, ! -1, 3, 4, 5, 6, 7, 27, 28, -1, 30, ! 12, 13, 14, -1, -1, -1, -1, -1, 67, 68, ! -1, -1, -1, 44, -1, 27, 28, -1, 30, 31, ! -1, -1, -1, -1, -1, 84, -1, -1, -1, 88, ! 89, -1, -1, -1, 3, 4, 5, 6, 7, 8, ! 9, -1, 11, 12, 13, 14, 58, -1, -1, -1, ! -1, -1, -1, 84, -1, 67, -1, 88, 89, 28, ! 29, 30, 31, -1, 33, 34, 35, 36, 37, -1, ! -1, -1, 84, 42, -1, 3, -1, 5, -1, 48, ! 8, 9, 51, 11, -1, -1, -1, 56, 57, 58, ! -1, -1, -1, 62, 63, -1, -1, -1, 67, -1, ! -1, 29, -1, 31, -1, 33, 34, 35, 36, 37, ! -1, -1, -1, -1, 42, -1, -1, 86, 87, -1, ! 48, 90, -1, 51, -1, -1, -1, -1, 56, 57, ! 58, -1, -1, -1, 62, 63, -1, 3, -1, 67, ! -1, -1, 8, 9, -1, 11, 49, 50, 51, 52, ! 53, 54, 55, 56, 57, 58, 59, 60, 86, 87, ! -1, -1, 90, 29, -1, 31, -1, 33, 34, 35, ! 36, 37, -1, -1, -1, -1, 42, -1, 3, -1, ! -1, -1, 48, 8, 9, 51, 11, -1, -1, -1, ! 56, 57, 58, -1, -1, -1, 62, 63, -1, -1, ! -1, 67, -1, -1, 29, -1, 31, -1, 33, 34, ! 35, 36, 37, -1, -1, -1, -1, 42, -1, -1, ! 86, 87, -1, 48, 90, -1, 51, -1, -1, -1, ! -1, 56, 57, 58, -1, -1, -1, 62, 63, -1, ! -1, -1, 67, -1, -1, -1, -1, -1, 3, 4, ! 5, 6, 7, 8, 9, -1, 11, 12, 13, 14, ! -1, 86, 87, -1, -1, 90, 21, 22, 23, 24, ! 25, 26, 27, 28, 29, 30, 31, -1, 33, 34, ! 35, 36, 37, -1, -1, -1, -1, 42, -1, 4, ! 5, 6, 7, 48, -1, -1, 51, 12, 13, 14, ! -1, 56, 57, 58, -1, -1, -1, 62, 63, -1, ! -1, -1, 67, 28, -1, 30, -1, 3, 4, -1, ! -1, -1, 8, 9, -1, 11, -1, -1, -1, 84, ! -1, 86, 87, -1, 89, 21, 22, 23, 24, 25, ! 26, 27, -1, 29, -1, 31, -1, 33, 34, 35, ! 36, 37, -1, -1, -1, -1, 42, -1, 4, 5, ! 6, 7, 48, -1, -1, 51, 12, 13, 14, 84, ! 56, 57, 58, -1, -1, -1, 62, 63, 3, -1, ! -1, 67, 28, 8, 9, -1, 11, 50, 51, 52, ! 53, 54, 55, 56, 57, 58, 59, 60, 84, -1, ! 86, 87, -1, 89, 29, -1, 31, -1, 33, 34, ! 35, 36, 37, -1, -1, -1, -1, 42, -1, -1, ! -1, -1, -1, 48, -1, -1, 51, -1, -1, -1, ! -1, 56, 57, 58, -1, -1, -1, 62, 63, -1, ! -1, -1, 67, 3, 4, 5, 6, 7, 8, 9, ! -1, 11, 12, 13, 14, -1, -1, 4, 5, 6, ! 7, 86, 87, -1, 89, 12, 13, 14, 28, 29, ! 30, 31, -1, 33, 34, 35, 36, 37, -1, -1, ! -1, 28, 42, 30, -1, -1, -1, -1, 48, -1, ! -1, 51, -1, -1, -1, -1, 56, 57, 58, -1, ! -1, -1, 62, 63, -1, 3, 4, 67, 6, 7, ! 8, 9, -1, 11, 12, 13, 14, 52, 53, 54, ! 55, 56, 57, 58, 59, 60, 86, 87, -1, -1, ! 28, 29, 30, 31, -1, 33, 34, 35, 36, 37, ! -1, -1, -1, -1, 42, -1, 3, -1, -1, -1, ! 48, 8, 9, 51, 11, -1, -1, -1, 56, 57, ! 58, -1, -1, -1, 62, 63, -1, -1, -1, 67, ! -1, -1, 29, -1, 31, -1, 33, 34, 35, 36, ! 37, -1, -1, -1, -1, 42, -1, 3, 86, 87, ! -1, 48, 8, 9, 51, 11, -1, -1, -1, 56, ! 57, 58, -1, -1, -1, 62, 63, -1, -1, -1, ! 67, -1, -1, 29, -1, 31, -1, 33, 34, 35, ! 36, 37, -1, -1, -1, -1, 42, 84, 3, 86, ! 87, -1, 48, 8, 9, 51, 11, -1, -1, -1, ! 56, 57, 58, -1, -1, -1, 62, 63, -1, -1, ! -1, 67, -1, -1, 29, -1, 31, -1, 33, 34, ! 35, 36, 37, -1, -1, -1, -1, 42, -1, 3, ! 86, 87, -1, 48, 8, 9, 51, 11, -1, -1, ! -1, 56, 57, 58, -1, -1, -1, 62, 63, -1, ! -1, -1, 67, -1, -1, 29, -1, 31, -1, 33, ! 34, 35, 36, 37, -1, -1, -1, -1, 42, -1, ! 3, 86, 87, -1, 48, 8, 9, 51, 11, -1, ! -1, -1, 56, 57, 58, -1, -1, -1, 62, 63, ! -1, -1, -1, 67, -1, -1, 29, -1, 31, -1, ! 33, 34, 35, 36, 37, -1, -1, -1, -1, 42, ! -1, -1, 86, 87, -1, 48, -1, -1, 51, -1, ! -1, -1, 10, 56, 57, 58, -1, -1, -1, 62, ! 63, 43, 44, 45, 67, 47, 48, 49, 50, 51, ! 52, 53, 54, 55, 56, 57, 58, 59, 60, -1, ! -1, -1, -1, 86, 87, 43, 44, 45, 46, 47, ! 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, ! 58, 59, 60, -1, -1, 43, 44, 45, 90, 47, ! 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, ! 58, 59, 60, 43, 44, 45, -1, 47, 48, 49, ! 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, ! 60, -1, -1, -1, -1, -1, -1, 43, 44, 45, ! 88, 47, 48, 49, 50, 51, 52, 53, 54, 55, ! 56, 57, 58, 59, 60, 43, 44, 45, 88, 47, ! 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, ! 58, 59, 60, -1, -1, -1, -1, -1, -1, 30, ! -1, -1, 88, 53, 54, 55, 56, 57, 58, 59, ! 60, -1, 43, 44, 45, 83, 47, 48, 49, 50, ! 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, ! 4, 5, 6, 7, 4, -1, 6, 7, 12, 13, ! 14, -1, 12, 13, 14, -1, -1, -1, -1, -1, ! -1, -1, -1, -1, 28, -1, 30, -1, 28, 4, ! 30, 6, 7, 4, 5, 6, 7, 12, 13, 14, ! -1, 12, 13, 14, -1, -1, -1, -1, -1, -1, ! -1, -1, -1, 28, -1, 30, -1, 28, 4, 5, ! 6, 7, 4, 5, 6, 7, 12, 13, 14, -1, ! 12, 13, 14, -1, -1, 4, 5, 6, 7, -1, ! -1, -1, 28, 12, 13, 14, 28, 51, 52, 53, ! 54, 55, 56, 57, 58, 59, 60, -1, -1, 28, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, ! 53, 54, 55, 56, 57, 58, 59, 60, 43, 44, ! 45, -1, 47, 48, 49, 50, 51, 52, 53, 54, ! 55, 56, 57, 58, 59, 60, 45, -1, 47, 48, ! 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, ! 59, 60, 48, 49, 50, 51, 52, 53, 54, 55, ! 56, 57, 58, 59, 60 }; /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ #line 3 "/usr/lib/bison.simple" *************** yyreduce: *** 1850,1881 **** switch (yyn) { case 1: ! #line 246 "c-parse.y" { if (pedantic) pedwarn ("ISO C forbids an empty source file"); finish_file (); ; break;} case 2: ! #line 251 "c-parse.y" { /* In case there were missing closebraces, get us back to the global binding level. */ while (! global_bindings_p ()) poplevel (0, 0, 0); ! finish_file (); ; break;} case 3: ! #line 265 "c-parse.y" {yyval.ttype = NULL_TREE; ; break;} case 5: ! #line 266 "c-parse.y" {yyval.ttype = NULL_TREE; ggc_collect(); ; break;} case 9: ! #line 273 "c-parse.y" { STRIP_NOPS (yyvsp[-2].ttype); if ((TREE_CODE (yyvsp[-2].ttype) == ADDR_EXPR && TREE_CODE (TREE_OPERAND (yyvsp[-2].ttype, 0)) == STRING_CST) --- 2139,2171 ---- switch (yyn) { case 1: ! #line 287 "c-parse.y" { if (pedantic) pedwarn ("ISO C forbids an empty source file"); finish_file (); ; break;} case 2: ! #line 292 "c-parse.y" { /* In case there were missing closebraces, get us back to the global binding level. */ while (! global_bindings_p ()) poplevel (0, 0, 0); ! finish_fname_decls (); ! finish_file (); ; break;} case 3: ! #line 307 "c-parse.y" {yyval.ttype = NULL_TREE; ; break;} case 5: ! #line 308 "c-parse.y" {yyval.ttype = NULL_TREE; ggc_collect(); ; break;} case 9: ! #line 315 "c-parse.y" { STRIP_NOPS (yyvsp[-2].ttype); if ((TREE_CODE (yyvsp[-2].ttype) == ADDR_EXPR && TREE_CODE (TREE_OPERAND (yyvsp[-2].ttype, 0)) == STRING_CST) *************** case 9: *** 1885,2219 **** error ("argument of `asm' is not a constant string"); ; break;} case 10: ! #line 281 "c-parse.y" { RESTORE_WARN_FLAGS (yyvsp[-1].ttype); ; break;} case 11: ! #line 286 "c-parse.y" { if (pedantic) error ("ISO C forbids data definition with no type or storage class"); else if (!flag_traditional) warning ("data definition has no type or storage class"); ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); ; break;} case 12: ! #line 295 "c-parse.y" ! { current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); ; break;} case 13: ! #line 299 "c-parse.y" ! { current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); ; break;} case 14: ! #line 303 "c-parse.y" ! { pedwarn ("empty declaration"); ; ! break;} ! case 15: ! #line 305 "c-parse.y" { shadow_tag (yyvsp[-1].ttype); ; break;} ! case 18: ! #line 309 "c-parse.y" { if (pedantic) pedwarn ("ISO C does not allow extra `;' outside of a function"); ; break;} ! case 19: ! #line 315 "c-parse.y" { if (! start_function (current_declspecs, yyvsp[0].ttype, ! prefix_attributes, NULL_TREE)) YYERROR1; ; break;} ! case 20: ! #line 320 "c-parse.y" { store_parm_decls (); ; break;} ! case 21: ! #line 322 "c-parse.y" { DECL_SOURCE_FILE (current_function_decl) = yyvsp[-2].filename; DECL_SOURCE_LINE (current_function_decl) = yyvsp[-1].lineno; ! finish_function (0); ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); ; break;} ! case 22: ! #line 329 "c-parse.y" ! { current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); ; break;} ! case 23: ! #line 333 "c-parse.y" { if (! start_function (current_declspecs, yyvsp[0].ttype, ! prefix_attributes, NULL_TREE)) YYERROR1; ; break;} ! case 24: ! #line 338 "c-parse.y" { store_parm_decls (); ; break;} ! case 25: ! #line 340 "c-parse.y" { DECL_SOURCE_FILE (current_function_decl) = yyvsp[-2].filename; DECL_SOURCE_LINE (current_function_decl) = yyvsp[-1].lineno; ! finish_function (0); ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); ; break;} ! case 26: ! #line 347 "c-parse.y" ! { current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); ; break;} ! case 27: ! #line 351 "c-parse.y" { if (! start_function (NULL_TREE, yyvsp[0].ttype, ! prefix_attributes, NULL_TREE)) YYERROR1; ; break;} ! case 28: ! #line 356 "c-parse.y" { store_parm_decls (); ; break;} ! case 29: ! #line 358 "c-parse.y" { DECL_SOURCE_FILE (current_function_decl) = yyvsp[-2].filename; DECL_SOURCE_LINE (current_function_decl) = yyvsp[-1].lineno; ! finish_function (0); ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); ; break;} ! case 30: ! #line 365 "c-parse.y" ! { current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); ; break;} ! case 33: ! #line 376 "c-parse.y" { yyval.code = ADDR_EXPR; ; break;} ! case 34: ! #line 378 "c-parse.y" { yyval.code = NEGATE_EXPR; ; break;} ! case 35: ! #line 380 "c-parse.y" { yyval.code = CONVERT_EXPR; if (warn_traditional && !in_system_header) warning ("traditional C rejects the unary plus operator"); ; break;} ! case 36: ! #line 385 "c-parse.y" { yyval.code = PREINCREMENT_EXPR; ; break;} ! case 37: ! #line 387 "c-parse.y" { yyval.code = PREDECREMENT_EXPR; ; break;} ! case 38: ! #line 389 "c-parse.y" { yyval.code = BIT_NOT_EXPR; ; break;} ! case 39: ! #line 391 "c-parse.y" { yyval.code = TRUTH_NOT_EXPR; ; break;} ! case 40: ! #line 395 "c-parse.y" { yyval.ttype = build_compound_expr (yyvsp[0].ttype); ; break;} ! case 41: ! #line 400 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 43: ! #line 406 "c-parse.y" { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ; break;} ! case 44: ! #line 408 "c-parse.y" { chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ; break;} ! case 46: ! #line 414 "c-parse.y" { yyval.ttype = build_indirect_ref (yyvsp[0].ttype, "unary *"); ; break;} ! case 47: ! #line 417 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; RESTORE_WARN_FLAGS (yyvsp[-1].ttype); ; break;} ! case 48: ! #line 420 "c-parse.y" { yyval.ttype = build_unary_op (yyvsp[-1].code, yyvsp[0].ttype, 0); overflow_warning (yyval.ttype); ; break;} ! case 49: ! #line 424 "c-parse.y" ! { tree label = lookup_label (yyvsp[0].ttype); ! if (pedantic) ! pedwarn ("ISO C forbids `&&'"); ! if (label == 0) ! yyval.ttype = null_pointer_node; ! else ! { ! TREE_USED (label) = 1; ! yyval.ttype = build1 (ADDR_EXPR, ptr_type_node, label); ! TREE_CONSTANT (yyval.ttype) = 1; ! } ! ; break;} ! case 50: ! #line 452 "c-parse.y" { skip_evaluation--; if (TREE_CODE (yyvsp[0].ttype) == COMPONENT_REF && DECL_C_BIT_FIELD (TREE_OPERAND (yyvsp[0].ttype, 1))) error ("`sizeof' applied to a bit-field"); yyval.ttype = c_sizeof (TREE_TYPE (yyvsp[0].ttype)); ; break;} ! case 51: ! #line 458 "c-parse.y" { skip_evaluation--; yyval.ttype = c_sizeof (groktypename (yyvsp[-1].ttype)); ; break;} ! case 52: ! #line 461 "c-parse.y" { skip_evaluation--; yyval.ttype = c_alignof_expr (yyvsp[0].ttype); ; break;} ! case 53: ! #line 464 "c-parse.y" { skip_evaluation--; yyval.ttype = c_alignof (groktypename (yyvsp[-1].ttype)); ; break;} ! case 54: ! #line 467 "c-parse.y" { yyval.ttype = build_unary_op (REALPART_EXPR, yyvsp[0].ttype, 0); ; break;} ! case 55: ! #line 469 "c-parse.y" { yyval.ttype = build_unary_op (IMAGPART_EXPR, yyvsp[0].ttype, 0); ; break;} ! case 56: ! #line 473 "c-parse.y" { skip_evaluation++; ; break;} ! case 57: ! #line 477 "c-parse.y" { skip_evaluation++; ; break;} ! case 59: ! #line 483 "c-parse.y" ! { tree type; ! int SAVED_warn_strict_prototypes = warn_strict_prototypes; ! /* This avoids warnings about unprototyped casts on ! integers. E.g. "#define SIG_DFL (void(*)())0". */ ! if (TREE_CODE (yyvsp[0].ttype) == INTEGER_CST) ! warn_strict_prototypes = 0; ! type = groktypename (yyvsp[-2].ttype); ! warn_strict_prototypes = SAVED_warn_strict_prototypes; ! yyval.ttype = build_c_cast (type, yyvsp[0].ttype); ; break;} case 61: ! #line 497 "c-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 62: ! #line 499 "c-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 63: ! #line 501 "c-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 64: ! #line 503 "c-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 65: ! #line 505 "c-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 66: ! #line 507 "c-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 67: ! #line 509 "c-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 68: ! #line 511 "c-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 69: ! #line 513 "c-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 70: ! #line 515 "c-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 71: ! #line 517 "c-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 72: ! #line 519 "c-parse.y" ! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; ! break;} ! case 73: ! #line 521 "c-parse.y" { yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype)); skip_evaluation += yyvsp[-1].ttype == boolean_false_node; ; break;} ! case 74: ! #line 524 "c-parse.y" { skip_evaluation -= yyvsp[-3].ttype == boolean_false_node; yyval.ttype = parser_build_binary_op (TRUTH_ANDIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); ; break;} ! case 75: ! #line 527 "c-parse.y" { yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype)); skip_evaluation += yyvsp[-1].ttype == boolean_true_node; ; break;} ! case 76: ! #line 530 "c-parse.y" { skip_evaluation -= yyvsp[-3].ttype == boolean_true_node; yyval.ttype = parser_build_binary_op (TRUTH_ORIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); ; break;} ! case 77: ! #line 533 "c-parse.y" { yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype)); skip_evaluation += yyvsp[-1].ttype == boolean_false_node; ; break;} ! case 78: ! #line 536 "c-parse.y" { skip_evaluation += ((yyvsp[-4].ttype == boolean_true_node) - (yyvsp[-4].ttype == boolean_false_node)); ; break;} ! case 79: ! #line 539 "c-parse.y" { skip_evaluation -= yyvsp[-6].ttype == boolean_true_node; yyval.ttype = build_conditional_expr (yyvsp[-6].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); ; break;} ! case 80: ! #line 542 "c-parse.y" { if (pedantic) pedwarn ("ISO C forbids omitting the middle term of a ?: expression"); /* Make sure first operand is calculated only once. */ --- 2175,2468 ---- error ("argument of `asm' is not a constant string"); ; break;} case 10: ! #line 323 "c-parse.y" { RESTORE_WARN_FLAGS (yyvsp[-1].ttype); ; break;} case 11: ! #line 328 "c-parse.y" { if (pedantic) error ("ISO C forbids data definition with no type or storage class"); else if (!flag_traditional) warning ("data definition has no type or storage class"); ! POP_DECLSPEC_STACK; ; break;} case 12: ! #line 335 "c-parse.y" ! { POP_DECLSPEC_STACK; ; break;} case 13: ! #line 337 "c-parse.y" ! { POP_DECLSPEC_STACK; ; break;} case 14: ! #line 339 "c-parse.y" { shadow_tag (yyvsp[-1].ttype); ; break;} ! case 17: ! #line 343 "c-parse.y" { if (pedantic) pedwarn ("ISO C does not allow extra `;' outside of a function"); ; break;} ! case 18: ! #line 349 "c-parse.y" { if (! start_function (current_declspecs, yyvsp[0].ttype, ! all_prefix_attributes)) YYERROR1; ; break;} ! case 19: ! #line 354 "c-parse.y" { store_parm_decls (); ; break;} ! case 20: ! #line 356 "c-parse.y" { DECL_SOURCE_FILE (current_function_decl) = yyvsp[-2].filename; DECL_SOURCE_LINE (current_function_decl) = yyvsp[-1].lineno; ! finish_function (0, 1); ! POP_DECLSPEC_STACK; ; break;} ! case 21: ! #line 361 "c-parse.y" ! { POP_DECLSPEC_STACK; ; break;} ! case 22: ! #line 363 "c-parse.y" { if (! start_function (current_declspecs, yyvsp[0].ttype, ! all_prefix_attributes)) YYERROR1; ; break;} ! case 23: ! #line 368 "c-parse.y" { store_parm_decls (); ; break;} ! case 24: ! #line 370 "c-parse.y" { DECL_SOURCE_FILE (current_function_decl) = yyvsp[-2].filename; DECL_SOURCE_LINE (current_function_decl) = yyvsp[-1].lineno; ! finish_function (0, 1); ! POP_DECLSPEC_STACK; ; break;} ! case 25: ! #line 375 "c-parse.y" ! { POP_DECLSPEC_STACK; ; break;} ! case 26: ! #line 377 "c-parse.y" { if (! start_function (NULL_TREE, yyvsp[0].ttype, ! all_prefix_attributes)) YYERROR1; ; break;} ! case 27: ! #line 382 "c-parse.y" { store_parm_decls (); ; break;} ! case 28: ! #line 384 "c-parse.y" { DECL_SOURCE_FILE (current_function_decl) = yyvsp[-2].filename; DECL_SOURCE_LINE (current_function_decl) = yyvsp[-1].lineno; ! finish_function (0, 1); ! POP_DECLSPEC_STACK; ; break;} ! case 29: ! #line 389 "c-parse.y" ! { POP_DECLSPEC_STACK; ; break;} ! case 32: ! #line 398 "c-parse.y" { yyval.code = ADDR_EXPR; ; break;} ! case 33: ! #line 400 "c-parse.y" { yyval.code = NEGATE_EXPR; ; break;} ! case 34: ! #line 402 "c-parse.y" { yyval.code = CONVERT_EXPR; if (warn_traditional && !in_system_header) warning ("traditional C rejects the unary plus operator"); ; break;} ! case 35: ! #line 407 "c-parse.y" { yyval.code = PREINCREMENT_EXPR; ; break;} ! case 36: ! #line 409 "c-parse.y" { yyval.code = PREDECREMENT_EXPR; ; break;} ! case 37: ! #line 411 "c-parse.y" { yyval.code = BIT_NOT_EXPR; ; break;} ! case 38: ! #line 413 "c-parse.y" { yyval.code = TRUTH_NOT_EXPR; ; break;} ! case 39: ! #line 417 "c-parse.y" { yyval.ttype = build_compound_expr (yyvsp[0].ttype); ; break;} ! case 40: ! #line 422 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 42: ! #line 428 "c-parse.y" { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ; break;} ! case 43: ! #line 430 "c-parse.y" { chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ; break;} ! case 45: ! #line 436 "c-parse.y" { yyval.ttype = build_indirect_ref (yyvsp[0].ttype, "unary *"); ; break;} ! case 46: ! #line 439 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; RESTORE_WARN_FLAGS (yyvsp[-1].ttype); ; break;} ! case 47: ! #line 442 "c-parse.y" { yyval.ttype = build_unary_op (yyvsp[-1].code, yyvsp[0].ttype, 0); overflow_warning (yyval.ttype); ; break;} ! case 48: ! #line 446 "c-parse.y" ! { yyval.ttype = finish_label_address_expr (yyvsp[0].ttype); ; break;} ! case 49: ! #line 463 "c-parse.y" { skip_evaluation--; if (TREE_CODE (yyvsp[0].ttype) == COMPONENT_REF && DECL_C_BIT_FIELD (TREE_OPERAND (yyvsp[0].ttype, 1))) error ("`sizeof' applied to a bit-field"); yyval.ttype = c_sizeof (TREE_TYPE (yyvsp[0].ttype)); ; break;} ! case 50: ! #line 469 "c-parse.y" { skip_evaluation--; yyval.ttype = c_sizeof (groktypename (yyvsp[-1].ttype)); ; break;} ! case 51: ! #line 472 "c-parse.y" { skip_evaluation--; yyval.ttype = c_alignof_expr (yyvsp[0].ttype); ; break;} ! case 52: ! #line 475 "c-parse.y" { skip_evaluation--; yyval.ttype = c_alignof (groktypename (yyvsp[-1].ttype)); ; break;} ! case 53: ! #line 478 "c-parse.y" { yyval.ttype = build_unary_op (REALPART_EXPR, yyvsp[0].ttype, 0); ; break;} ! case 54: ! #line 480 "c-parse.y" { yyval.ttype = build_unary_op (IMAGPART_EXPR, yyvsp[0].ttype, 0); ; break;} ! case 55: ! #line 484 "c-parse.y" { skip_evaluation++; ; break;} ! case 56: ! #line 488 "c-parse.y" { skip_evaluation++; ; break;} ! case 58: ! #line 494 "c-parse.y" ! { yyval.ttype = c_cast_expr (yyvsp[-2].ttype, yyvsp[0].ttype); ; ! break;} ! case 60: ! #line 500 "c-parse.y" ! { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 61: ! #line 502 "c-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 62: ! #line 504 "c-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 63: ! #line 506 "c-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 64: ! #line 508 "c-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 65: ! #line 510 "c-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 66: ! #line 512 "c-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 67: ! #line 514 "c-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 68: ! #line 516 "c-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 69: ! #line 518 "c-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 70: ! #line 520 "c-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 71: ! #line 522 "c-parse.y" { yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 72: ! #line 524 "c-parse.y" { yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype)); skip_evaluation += yyvsp[-1].ttype == boolean_false_node; ; break;} ! case 73: ! #line 527 "c-parse.y" { skip_evaluation -= yyvsp[-3].ttype == boolean_false_node; yyval.ttype = parser_build_binary_op (TRUTH_ANDIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); ; break;} ! case 74: ! #line 530 "c-parse.y" { yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype)); skip_evaluation += yyvsp[-1].ttype == boolean_true_node; ; break;} ! case 75: ! #line 533 "c-parse.y" { skip_evaluation -= yyvsp[-3].ttype == boolean_true_node; yyval.ttype = parser_build_binary_op (TRUTH_ORIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); ; break;} ! case 76: ! #line 536 "c-parse.y" { yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype)); skip_evaluation += yyvsp[-1].ttype == boolean_false_node; ; break;} ! case 77: ! #line 539 "c-parse.y" { skip_evaluation += ((yyvsp[-4].ttype == boolean_true_node) - (yyvsp[-4].ttype == boolean_false_node)); ; break;} ! case 78: ! #line 542 "c-parse.y" { skip_evaluation -= yyvsp[-6].ttype == boolean_true_node; yyval.ttype = build_conditional_expr (yyvsp[-6].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); ; break;} ! case 79: ! #line 545 "c-parse.y" { if (pedantic) pedwarn ("ISO C forbids omitting the middle term of a ?: expression"); /* Make sure first operand is calculated only once. */ *************** case 80: *** 2221,2311 **** yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[0].ttype)); skip_evaluation += yyvsp[-1].ttype == boolean_true_node; ; break;} ! case 81: ! #line 549 "c-parse.y" { skip_evaluation -= yyvsp[-4].ttype == boolean_true_node; yyval.ttype = build_conditional_expr (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); ; break;} ! case 82: ! #line 552 "c-parse.y" { char class; yyval.ttype = build_modify_expr (yyvsp[-2].ttype, NOP_EXPR, yyvsp[0].ttype); class = TREE_CODE_CLASS (TREE_CODE (yyval.ttype)); ! if (class == 'e' || class == '1' ! || class == '2' || class == '<') C_SET_EXP_ORIGINAL_CODE (yyval.ttype, MODIFY_EXPR); ; break;} ! case 83: ! #line 560 "c-parse.y" { char class; yyval.ttype = build_modify_expr (yyvsp[-2].ttype, yyvsp[-1].code, yyvsp[0].ttype); /* This inhibits warnings in truthvalue_conversion. */ class = TREE_CODE_CLASS (TREE_CODE (yyval.ttype)); ! if (class == 'e' || class == '1' ! || class == '2' || class == '<') C_SET_EXP_ORIGINAL_CODE (yyval.ttype, ERROR_MARK); ; break;} ! case 84: ! #line 572 "c-parse.y" { if (yychar == YYEMPTY) yychar = YYLEX; yyval.ttype = build_external_ref (yyvsp[0].ttype, yychar == '('); ; break;} ! case 86: ! #line 579 "c-parse.y" { yyval.ttype = combine_strings (yyvsp[0].ttype); ; break;} case 87: ! #line 581 "c-parse.y" { start_init (NULL_TREE, NULL, 0); yyvsp[-2].ttype = groktypename (yyvsp[-2].ttype); really_start_incremental_init (yyvsp[-2].ttype); ; break;} case 88: ! #line 585 "c-parse.y" ! { const char *name; ! tree result = pop_init_level (0); tree type = yyvsp[-5].ttype; finish_init (); if (pedantic && ! flag_isoc99) pedwarn ("ISO C89 forbids compound literals"); ! if (TYPE_NAME (type) != 0) ! { ! if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE) ! name = IDENTIFIER_POINTER (TYPE_NAME (type)); ! else ! name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))); ! } ! else ! name = ""; ! yyval.ttype = result; ! if (TREE_CODE (type) == ARRAY_TYPE && !COMPLETE_TYPE_P (type)) ! { ! int failure = complete_array_type (type, yyval.ttype, 1); ! if (failure) ! abort (); ! } ; break;} case 89: ! #line 610 "c-parse.y" { char class = TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype)); ! if (class == 'e' || class == '1' ! || class == '2' || class == '<') C_SET_EXP_ORIGINAL_CODE (yyvsp[-1].ttype, ERROR_MARK); yyval.ttype = yyvsp[-1].ttype; ; break;} case 90: ! #line 616 "c-parse.y" { yyval.ttype = error_mark_node; ; break;} case 91: ! #line 618 "c-parse.y" { tree saved_last_tree; if (pedantic) --- 2470,2545 ---- yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[0].ttype)); skip_evaluation += yyvsp[-1].ttype == boolean_true_node; ; break;} ! case 80: ! #line 552 "c-parse.y" { skip_evaluation -= yyvsp[-4].ttype == boolean_true_node; yyval.ttype = build_conditional_expr (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); ; break;} ! case 81: ! #line 555 "c-parse.y" { char class; yyval.ttype = build_modify_expr (yyvsp[-2].ttype, NOP_EXPR, yyvsp[0].ttype); class = TREE_CODE_CLASS (TREE_CODE (yyval.ttype)); ! if (IS_EXPR_CODE_CLASS (class)) C_SET_EXP_ORIGINAL_CODE (yyval.ttype, MODIFY_EXPR); ; break;} ! case 82: ! #line 562 "c-parse.y" { char class; yyval.ttype = build_modify_expr (yyvsp[-2].ttype, yyvsp[-1].code, yyvsp[0].ttype); /* This inhibits warnings in truthvalue_conversion. */ class = TREE_CODE_CLASS (TREE_CODE (yyval.ttype)); ! if (IS_EXPR_CODE_CLASS (class)) C_SET_EXP_ORIGINAL_CODE (yyval.ttype, ERROR_MARK); ; break;} ! case 83: ! #line 573 "c-parse.y" { if (yychar == YYEMPTY) yychar = YYLEX; yyval.ttype = build_external_ref (yyvsp[0].ttype, yychar == '('); ; break;} ! case 85: ! #line 580 "c-parse.y" { yyval.ttype = combine_strings (yyvsp[0].ttype); ; break;} + case 86: + #line 582 "c-parse.y" + { yyval.ttype = fname_decl (C_RID_CODE (yyval.ttype), yyval.ttype); ; + break;} case 87: ! #line 584 "c-parse.y" { start_init (NULL_TREE, NULL, 0); yyvsp[-2].ttype = groktypename (yyvsp[-2].ttype); really_start_incremental_init (yyvsp[-2].ttype); ; break;} case 88: ! #line 588 "c-parse.y" ! { tree constructor = pop_init_level (0); tree type = yyvsp[-5].ttype; finish_init (); if (pedantic && ! flag_isoc99) pedwarn ("ISO C89 forbids compound literals"); ! yyval.ttype = build_compound_literal (type, constructor); ; break;} case 89: ! #line 597 "c-parse.y" { char class = TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype)); ! if (IS_EXPR_CODE_CLASS (class)) C_SET_EXP_ORIGINAL_CODE (yyvsp[-1].ttype, ERROR_MARK); yyval.ttype = yyvsp[-1].ttype; ; break;} case 90: ! #line 602 "c-parse.y" { yyval.ttype = error_mark_node; ; break;} case 91: ! #line 604 "c-parse.y" { tree saved_last_tree; if (pedantic) *************** case 91: *** 2323,2329 **** ; break;} case 92: ! #line 634 "c-parse.y" { pop_label_level (); last_tree = COMPOUND_BODY (yyvsp[-2].ttype); --- 2557,2563 ---- ; break;} case 92: ! #line 620 "c-parse.y" { pop_label_level (); last_tree = COMPOUND_BODY (yyvsp[-2].ttype); *************** case 92: *** 2332,2372 **** ; break;} case 93: ! #line 641 "c-parse.y" { yyval.ttype = build_function_call (yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} case 94: ! #line 643 "c-parse.y" { yyval.ttype = build_va_arg (yyvsp[-3].ttype, groktypename (yyvsp[-1].ttype)); ; break;} case 95: ! #line 645 "c-parse.y" ! { yyval.ttype = build_array_ref (yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} case 96: ! #line 647 "c-parse.y" { ! yyval.ttype = build_component_ref (yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 97: ! #line 651 "c-parse.y" { tree expr = build_indirect_ref (yyvsp[-2].ttype, "->"); ! yyval.ttype = build_component_ref (expr, yyvsp[0].ttype); ; break;} ! case 98: ! #line 657 "c-parse.y" { yyval.ttype = build_unary_op (POSTINCREMENT_EXPR, yyvsp[-1].ttype, 0); ; break;} - case 99: - #line 659 "c-parse.y" - { yyval.ttype = build_unary_op (POSTDECREMENT_EXPR, yyvsp[-1].ttype, 0); ; - break;} case 101: #line 666 "c-parse.y" { static int last_lineno = 0; static const char *last_input_filename = 0; --- 2566,2630 ---- ; break;} case 93: ! #line 627 "c-parse.y" { yyval.ttype = build_function_call (yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} case 94: ! #line 629 "c-parse.y" { yyval.ttype = build_va_arg (yyvsp[-3].ttype, groktypename (yyvsp[-1].ttype)); ; break;} case 95: ! #line 632 "c-parse.y" ! { ! tree c; ! ! c = fold (yyvsp[-5].ttype); ! STRIP_NOPS (c); ! if (TREE_CODE (c) != INTEGER_CST) ! error ("first argument to __builtin_choose_expr not a constant"); ! yyval.ttype = integer_zerop (c) ? yyvsp[-1].ttype : yyvsp[-3].ttype; ! ; break;} case 96: ! #line 642 "c-parse.y" { ! tree e1, e2; ! ! e1 = TYPE_MAIN_VARIANT (groktypename (yyvsp[-3].ttype)); ! e2 = TYPE_MAIN_VARIANT (groktypename (yyvsp[-1].ttype)); ! ! yyval.ttype = comptypes (e1, e2) ! ? build_int_2 (1, 0) : build_int_2 (0, 0); ; break;} case 97: ! #line 652 "c-parse.y" ! { yyval.ttype = build_array_ref (yyvsp[-3].ttype, yyvsp[-1].ttype); ; ! break;} ! case 98: ! #line 654 "c-parse.y" ! { ! yyval.ttype = build_component_ref (yyvsp[-2].ttype, yyvsp[0].ttype); ! ; ! break;} ! case 99: ! #line 658 "c-parse.y" { tree expr = build_indirect_ref (yyvsp[-2].ttype, "->"); ! yyval.ttype = build_component_ref (expr, yyvsp[0].ttype); ; break;} ! case 100: ! #line 664 "c-parse.y" { yyval.ttype = build_unary_op (POSTINCREMENT_EXPR, yyvsp[-1].ttype, 0); ; break;} case 101: #line 666 "c-parse.y" + { yyval.ttype = build_unary_op (POSTDECREMENT_EXPR, yyvsp[-1].ttype, 0); ; + break;} + case 103: + #line 673 "c-parse.y" { static int last_lineno = 0; static const char *last_input_filename = 0; *************** case 101: *** 2381,3001 **** } ; break;} ! case 104: ! #line 687 "c-parse.y" { c_mark_varargs (); if (pedantic) pedwarn ("ISO C does not permit use of `varargs.h'"); ; break;} ! case 105: ! #line 697 "c-parse.y" { ; break;} - case 110: - #line 713 "c-parse.y" - { current_declspecs = TREE_VALUE (declspec_stack); - prefix_attributes = TREE_PURPOSE (declspec_stack); - declspec_stack = TREE_CHAIN (declspec_stack); ; - break;} - case 111: - #line 717 "c-parse.y" - { current_declspecs = TREE_VALUE (declspec_stack); - prefix_attributes = TREE_PURPOSE (declspec_stack); - declspec_stack = TREE_CHAIN (declspec_stack); ; - break;} case 112: ! #line 721 "c-parse.y" ! { shadow_tag_warned (yyvsp[-1].ttype, 1); ! pedwarn ("empty declaration"); ; break;} case 113: ! #line 724 "c-parse.y" ! { pedwarn ("empty declaration"); ; break;} case 114: ! #line 733 "c-parse.y" ! { ; break;} case 115: ! #line 741 "c-parse.y" ! { pending_xref_error (); ! declspec_stack = tree_cons (prefix_attributes, ! current_declspecs, ! declspec_stack); ! split_specs_attrs (yyvsp[0].ttype, ! ¤t_declspecs, &prefix_attributes); ; break;} case 116: ! #line 751 "c-parse.y" ! { prefix_attributes = chainon (prefix_attributes, yyvsp[0].ttype); ; break;} case 117: ! #line 756 "c-parse.y" ! { current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); ; break;} case 118: ! #line 760 "c-parse.y" ! { current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); ; break;} case 119: ! #line 764 "c-parse.y" ! { current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); ; break;} case 120: ! #line 768 "c-parse.y" ! { current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); ; break;} case 121: ! #line 772 "c-parse.y" ! { shadow_tag (yyvsp[-1].ttype); ; break;} case 122: ! #line 774 "c-parse.y" ! { pedwarn ("empty declaration"); ; break;} case 123: ! #line 776 "c-parse.y" ! { RESTORE_WARN_FLAGS (yyvsp[-1].ttype); ; break;} case 124: ! #line 786 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 125: ! #line 788 "c-parse.y" ! { yyval.ttype = chainon (yyvsp[0].ttype, tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[-2].ttype)); ; break;} case 126: ! #line 792 "c-parse.y" ! { yyval.ttype = NULL_TREE; ; break;} case 127: ! #line 794 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ; break;} case 128: ! #line 796 "c-parse.y" ! { if (extra_warnings) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER (yyvsp[0].ttype)); ! yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ; break;} case 129: ! #line 801 "c-parse.y" ! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ; break;} case 130: ! #line 806 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 131: ! #line 808 "c-parse.y" ! { yyval.ttype = chainon (yyvsp[0].ttype, tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[-2].ttype)); ; break;} case 132: ! #line 813 "c-parse.y" ! { yyval.ttype = NULL_TREE; ; break;} case 133: ! #line 815 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ; break;} case 134: ! #line 817 "c-parse.y" ! { if (extra_warnings) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER (yyvsp[0].ttype)); ! yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ; break;} case 135: ! #line 830 "c-parse.y" ! { yyval.ttype = yyvsp[0].ttype; ; break;} case 136: ! #line 832 "c-parse.y" ! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ; break;} case 137: ! #line 834 "c-parse.y" ! { yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-1].ttype); ; break;} case 138: ! #line 836 "c-parse.y" ! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ; break;} case 139: ! #line 841 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); TREE_STATIC (yyval.ttype) = 1; ; break;} case 140: ! #line 844 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ; break;} case 141: ! #line 846 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 142: ! #line 849 "c-parse.y" { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 143: ! #line 863 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 144: ! #line 865 "c-parse.y" ! { yyval.ttype = chainon (yyvsp[0].ttype, tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[-2].ttype)); ; break;} ! case 145: ! #line 869 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 146: ! #line 871 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ; break;} ! case 149: ! #line 881 "c-parse.y" { /* For a typedef name, record the meaning, not the name. In case of `foo foo, bar;'. */ yyval.ttype = lookup_name (yyvsp[0].ttype); ; break;} ! case 150: ! #line 885 "c-parse.y" { yyval.ttype = TREE_TYPE (yyvsp[-1].ttype); ; break;} ! case 151: ! #line 887 "c-parse.y" { yyval.ttype = groktypename (yyvsp[-1].ttype); ; break;} ! case 159: ! #line 909 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 160: ! #line 911 "c-parse.y" { if (TREE_CHAIN (yyvsp[-1].ttype)) yyvsp[-1].ttype = combine_strings (yyvsp[-1].ttype); yyval.ttype = yyvsp[-1].ttype; ; break;} ! case 161: ! #line 918 "c-parse.y" { yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1, ! yyvsp[-1].ttype, prefix_attributes); start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ; break;} ! case 162: ! #line 923 "c-parse.y" { finish_init (); finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ; break;} ! case 163: ! #line 926 "c-parse.y" { tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0, ! yyvsp[0].ttype, prefix_attributes); finish_decl (d, NULL_TREE, yyvsp[-1].ttype); ; break;} ! case 164: ! #line 934 "c-parse.y" { yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1, ! yyvsp[-1].ttype, prefix_attributes); start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ; break;} ! case 165: ! #line 939 "c-parse.y" { finish_init (); - decl_attributes (yyvsp[-1].ttype, yyvsp[-3].ttype, prefix_attributes); finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ; break;} ! case 166: ! #line 943 "c-parse.y" { tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0, ! yyvsp[0].ttype, prefix_attributes); finish_decl (d, NULL_TREE, yyvsp[-1].ttype); ; break;} ! case 167: ! #line 951 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 168: ! #line 953 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} ! case 169: ! #line 958 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} ! case 170: ! #line 960 "c-parse.y" { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 171: ! #line 965 "c-parse.y" { yyval.ttype = yyvsp[-2].ttype; ; break;} ! case 172: ! #line 970 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} ! case 173: ! #line 972 "c-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} ! case 174: ! #line 977 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 175: ! #line 979 "c-parse.y" { yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE); ; break;} ! case 176: ! #line 981 "c-parse.y" { yyval.ttype = build_tree_list (yyvsp[-3].ttype, build_tree_list (NULL_TREE, yyvsp[-1].ttype)); ; break;} ! case 177: ! #line 983 "c-parse.y" { yyval.ttype = build_tree_list (yyvsp[-5].ttype, tree_cons (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype)); ; break;} ! case 178: ! #line 985 "c-parse.y" { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} ! case 184: ! #line 1003 "c-parse.y" { really_start_incremental_init (NULL_TREE); ; break;} ! case 185: ! #line 1005 "c-parse.y" { yyval.ttype = pop_init_level (0); ; break;} ! case 186: ! #line 1007 "c-parse.y" { yyval.ttype = error_mark_node; ; break;} ! case 187: ! #line 1013 "c-parse.y" { if (pedantic) pedwarn ("ISO C forbids empty initializer braces"); ; break;} ! case 191: ! #line 1027 "c-parse.y" { if (pedantic && ! flag_isoc99) pedwarn ("ISO C89 forbids specifying subobject to initialize"); ; break;} ! case 192: ! #line 1030 "c-parse.y" { if (pedantic) pedwarn ("obsolete use of designated initializer without `='"); ; break;} ! case 193: ! #line 1033 "c-parse.y" { set_init_label (yyvsp[-1].ttype); if (pedantic) pedwarn ("obsolete use of designated initializer with `:'"); ; break;} ! case 196: ! #line 1042 "c-parse.y" { push_init_level (0); ; break;} ! case 197: ! #line 1044 "c-parse.y" { process_init_element (pop_init_level (0)); ; break;} ! case 198: ! #line 1046 "c-parse.y" { process_init_element (yyvsp[0].ttype); ; break;} ! case 202: ! #line 1057 "c-parse.y" { set_init_label (yyvsp[0].ttype); ; break;} ! case 203: ! #line 1062 "c-parse.y" { set_init_index (yyvsp[-3].ttype, yyvsp[-1].ttype); if (pedantic) pedwarn ("ISO C forbids specifying range of elements to initialize"); ; break;} ! case 204: ! #line 1066 "c-parse.y" { set_init_index (yyvsp[-1].ttype, NULL_TREE); ; break;} ! case 205: ! #line 1071 "c-parse.y" { if (pedantic) pedwarn ("ISO C forbids nested functions"); push_function_context (); if (! start_function (current_declspecs, yyvsp[0].ttype, ! prefix_attributes, NULL_TREE)) { pop_function_context (); YYERROR1; } ; break;} ! case 206: ! #line 1083 "c-parse.y" { store_parm_decls (); ; break;} ! case 207: ! #line 1091 "c-parse.y" { tree decl = current_function_decl; DECL_SOURCE_FILE (decl) = yyvsp[-2].filename; DECL_SOURCE_LINE (decl) = yyvsp[-1].lineno; ! finish_function (1); pop_function_context (); add_decl_stmt (decl); ; break;} ! case 208: ! #line 1101 "c-parse.y" { if (pedantic) pedwarn ("ISO C forbids nested functions"); push_function_context (); if (! start_function (current_declspecs, yyvsp[0].ttype, ! prefix_attributes, NULL_TREE)) { pop_function_context (); YYERROR1; } ; break;} ! case 209: ! #line 1113 "c-parse.y" { store_parm_decls (); ; break;} ! case 210: ! #line 1121 "c-parse.y" { tree decl = current_function_decl; DECL_SOURCE_FILE (decl) = yyvsp[-2].filename; DECL_SOURCE_LINE (decl) = yyvsp[-1].lineno; ! finish_function (1); pop_function_context (); add_decl_stmt (decl); ; break;} ! case 213: ! #line 1141 "c-parse.y" ! { yyval.ttype = yyvsp[-1].ttype; ; break;} ! case 214: ! #line 1143 "c-parse.y" { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ; break;} ! case 215: ! #line 1148 "c-parse.y" ! { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ; ! break;} ! case 216: ! #line 1150 "c-parse.y" ! { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ; break;} ! case 217: ! #line 1152 "c-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 218: ! #line 1159 "c-parse.y" ! { yyval.ttype = yyvsp[0].ttype; ; ! break;} ! case 220: ! #line 1170 "c-parse.y" { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ; break;} ! case 221: ! #line 1175 "c-parse.y" ! { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, NULL_TREE); ! if (! flag_isoc99) ! error ("`[*]' in parameter declaration only allowed in ISO C 99"); ! ; break;} ! case 222: ! #line 1180 "c-parse.y" ! { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} ! case 223: ! #line 1182 "c-parse.y" ! { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ; break;} ! case 224: ! #line 1184 "c-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 225: ! #line 1191 "c-parse.y" ! { yyval.ttype = yyvsp[0].ttype; ; break;} ! case 227: ! #line 1200 "c-parse.y" { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ; break;} ! case 228: ! #line 1205 "c-parse.y" ! { yyval.ttype = yyvsp[-1].ttype; ; break;} ! case 229: ! #line 1207 "c-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 230: ! #line 1209 "c-parse.y" ! { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, NULL_TREE); ! if (! flag_isoc99) ! error ("`[*]' in parameter declaration only allowed in ISO C 99"); ! ; ! break;} ! case 231: ! #line 1214 "c-parse.y" ! { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ; ! break;} ! case 232: ! #line 1216 "c-parse.y" ! { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ; ! break;} ! case 233: ! #line 1223 "c-parse.y" ! { yyval.ttype = yyvsp[0].ttype; ; break;} ! case 235: ! #line 1229 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 236: ! #line 1231 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} ! case 237: ! #line 1236 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 238: ! #line 1238 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} ! case 239: ! #line 1243 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 240: ! #line 1245 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} ! case 241: ! #line 1250 "c-parse.y" { yyval.ttype = start_struct (RECORD_TYPE, yyvsp[-1].ttype); /* Start scope of tag before parsing components. */ ; break;} ! case 242: ! #line 1254 "c-parse.y" { yyval.ttype = finish_struct (yyvsp[-3].ttype, yyvsp[-2].ttype, chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ; break;} ! case 243: ! #line 1256 "c-parse.y" { yyval.ttype = finish_struct (start_struct (RECORD_TYPE, NULL_TREE), yyvsp[-2].ttype, chainon (yyvsp[-4].ttype, yyvsp[0].ttype)); ; break;} ! case 244: ! #line 1260 "c-parse.y" ! { yyval.ttype = xref_tag (RECORD_TYPE, yyvsp[0].ttype); ; ! break;} ! case 245: ! #line 1262 "c-parse.y" { yyval.ttype = start_struct (UNION_TYPE, yyvsp[-1].ttype); ; break;} ! case 246: ! #line 1264 "c-parse.y" { yyval.ttype = finish_struct (yyvsp[-3].ttype, yyvsp[-2].ttype, chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ; break;} ! case 247: ! #line 1266 "c-parse.y" { yyval.ttype = finish_struct (start_struct (UNION_TYPE, NULL_TREE), yyvsp[-2].ttype, chainon (yyvsp[-4].ttype, yyvsp[0].ttype)); ; break;} ! case 248: ! #line 1270 "c-parse.y" ! { yyval.ttype = xref_tag (UNION_TYPE, yyvsp[0].ttype); ; ! break;} ! case 249: ! #line 1272 "c-parse.y" { yyval.ttype = start_enum (yyvsp[-1].ttype); ; break;} ! case 250: ! #line 1274 "c-parse.y" { yyval.ttype = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype), chainon (yyvsp[-7].ttype, yyvsp[0].ttype)); ; break;} ! case 251: ! #line 1277 "c-parse.y" { yyval.ttype = start_enum (NULL_TREE); ; break;} ! case 252: ! #line 1279 "c-parse.y" { yyval.ttype = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype), chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ; break;} ! case 253: ! #line 1282 "c-parse.y" { yyval.ttype = xref_tag (ENUMERAL_TYPE, yyvsp[0].ttype); /* In ISO C, enumerated types can be referred to only if already defined. */ if (pedantic && !COMPLETE_TYPE_P (yyval.ttype)) pedwarn ("ISO C forbids forward references to `enum' types"); ; break;} ! case 257: ! #line 1297 "c-parse.y" { if (pedantic && ! flag_isoc99) pedwarn ("comma at end of enumerator list"); ; break;} ! case 258: ! #line 1303 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} ! case 259: ! #line 1305 "c-parse.y" { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); pedwarn ("no semicolon at end of struct or union"); ; break;} ! case 260: ! #line 1310 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 261: ! #line 1312 "c-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[-1].ttype); ; break;} ! case 262: ! #line 1314 "c-parse.y" { if (pedantic) pedwarn ("extra semicolon in struct or union specified"); ; break;} ! case 263: ! #line 1329 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); ; break;} ! case 264: ! #line 1334 "c-parse.y" { /* Support for unnamed structs or unions as members of structs or unions (which is [a] useful and [b] supports --- 2639,3558 ---- } ; break;} ! case 106: ! #line 694 "c-parse.y" { c_mark_varargs (); if (pedantic) pedwarn ("ISO C does not permit use of `varargs.h'"); ; break;} ! case 107: ! #line 704 "c-parse.y" { ; break;} case 112: ! #line 720 "c-parse.y" ! { POP_DECLSPEC_STACK; ; break;} case 113: ! #line 722 "c-parse.y" ! { POP_DECLSPEC_STACK; ; break;} case 114: ! #line 724 "c-parse.y" ! { shadow_tag_warned (yyvsp[-1].ttype, 1); ! pedwarn ("empty declaration"); ; break;} case 115: ! #line 727 "c-parse.y" ! { pedwarn ("empty declaration"); ; break;} case 116: ! #line 736 "c-parse.y" ! { ; break;} case 117: ! #line 744 "c-parse.y" ! { pending_xref_error (); ! PUSH_DECLSPEC_STACK; ! split_specs_attrs (yyvsp[0].ttype, ! ¤t_declspecs, &prefix_attributes); ! all_prefix_attributes = prefix_attributes; ; break;} case 118: ! #line 755 "c-parse.y" ! { all_prefix_attributes = chainon (yyvsp[0].ttype, prefix_attributes); ; break;} case 119: ! #line 760 "c-parse.y" ! { POP_DECLSPEC_STACK; ; break;} case 120: ! #line 762 "c-parse.y" ! { POP_DECLSPEC_STACK; ; break;} case 121: ! #line 764 "c-parse.y" ! { POP_DECLSPEC_STACK; ; break;} case 122: ! #line 766 "c-parse.y" ! { POP_DECLSPEC_STACK; ; break;} case 123: ! #line 768 "c-parse.y" ! { shadow_tag (yyvsp[-1].ttype); ; break;} case 124: ! #line 770 "c-parse.y" ! { RESTORE_WARN_FLAGS (yyvsp[-1].ttype); ; break;} case 125: ! #line 827 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ! TREE_STATIC (yyval.ttype) = 1; ; break;} case 126: ! #line 830 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; break;} case 127: ! #line 833 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; break;} case 128: ! #line 839 "c-parse.y" ! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} case 129: ! #line 845 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; break;} case 130: ! #line 848 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; break;} case 131: ! #line 854 "c-parse.y" ! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ! TREE_STATIC (yyval.ttype) = 0; ; break;} case 132: ! #line 857 "c-parse.y" ! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} case 133: ! #line 863 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ! TREE_STATIC (yyval.ttype) = 1; ; break;} case 134: ! #line 866 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; break;} case 135: ! #line 869 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; break;} case 136: ! #line 872 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; break;} case 137: ! #line 875 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; break;} case 138: ! #line 878 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; break;} case 139: ! #line 881 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} case 140: ! #line 887 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ! TREE_STATIC (yyval.ttype) = 1; ; break;} case 141: ! #line 890 "c-parse.y" ! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; ! break;} ! case 142: ! #line 893 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} ! case 143: ! #line 896 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 144: ! #line 899 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 145: ! #line 902 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 146: ! #line 908 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 147: ! #line 911 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 148: ! #line 914 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 149: ! #line 917 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 150: ! #line 920 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 151: ! #line 923 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 152: ! #line 929 "c-parse.y" ! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; ! break;} ! case 153: ! #line 932 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 154: ! #line 935 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 155: ! #line 938 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 156: ! #line 941 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 157: ! #line 947 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ! TREE_STATIC (yyval.ttype) = 0; ; ! break;} ! case 158: ! #line 950 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 159: ! #line 953 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 160: ! #line 956 "c-parse.y" { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 161: ! #line 962 "c-parse.y" ! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER (yyvsp[0].ttype)); ! yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 162: ! #line 968 "c-parse.y" ! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER (yyvsp[0].ttype)); ! yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} ! case 163: ! #line 974 "c-parse.y" ! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER (yyvsp[0].ttype)); ! yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; ! break;} ! case 164: ! #line 983 "c-parse.y" ! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; ! break;} ! case 165: ! #line 989 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 166: ! #line 992 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 167: ! #line 995 "c-parse.y" ! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER (yyvsp[0].ttype)); ! yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; ! break;} ! case 168: ! #line 1001 "c-parse.y" ! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER (yyvsp[0].ttype)); ! yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; ! break;} ! case 169: ! #line 1007 "c-parse.y" ! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER (yyvsp[0].ttype)); ! yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; ! break;} ! case 170: ! #line 1013 "c-parse.y" ! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER (yyvsp[0].ttype)); ! yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; ! break;} ! case 171: ! #line 1022 "c-parse.y" ! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; ! break;} ! case 172: ! #line 1028 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 173: ! #line 1031 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 174: ! #line 1034 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 175: ! #line 1037 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 176: ! #line 1040 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 177: ! #line 1043 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 178: ! #line 1046 "c-parse.y" ! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER (yyvsp[0].ttype)); ! yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; ! break;} ! case 179: ! #line 1052 "c-parse.y" ! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER (yyvsp[0].ttype)); ! yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; ! break;} ! case 180: ! #line 1058 "c-parse.y" ! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER (yyvsp[0].ttype)); ! yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; ! break;} ! case 181: ! #line 1064 "c-parse.y" ! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER (yyvsp[0].ttype)); ! yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; ! break;} ! case 182: ! #line 1073 "c-parse.y" ! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; ! break;} ! case 183: ! #line 1076 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 184: ! #line 1079 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 185: ! #line 1082 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 186: ! #line 1085 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 187: ! #line 1091 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 188: ! #line 1094 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 189: ! #line 1097 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 190: ! #line 1100 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 191: ! #line 1103 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 192: ! #line 1106 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 193: ! #line 1109 "c-parse.y" ! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER (yyvsp[0].ttype)); ! yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; ! break;} ! case 194: ! #line 1115 "c-parse.y" ! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER (yyvsp[0].ttype)); ! yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; ! break;} ! case 195: ! #line 1121 "c-parse.y" ! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER (yyvsp[0].ttype)); ! yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; ! break;} ! case 196: ! #line 1127 "c-parse.y" ! { if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER (yyvsp[0].ttype)); ! yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; ! break;} ! case 197: ! #line 1136 "c-parse.y" ! { yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; ! break;} ! case 198: ! #line 1139 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 199: ! #line 1142 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 200: ! #line 1145 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 201: ! #line 1148 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ! TREE_STATIC (yyval.ttype) = 1; ; ! break;} ! case 258: ! #line 1236 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 259: ! #line 1238 "c-parse.y" ! { yyval.ttype = yyvsp[0].ttype; ; break;} ! case 263: ! #line 1273 "c-parse.y" ! { OBJC_NEED_RAW_IDENTIFIER (1); ; ! break;} ! case 266: ! #line 1283 "c-parse.y" { /* For a typedef name, record the meaning, not the name. In case of `foo foo, bar;'. */ yyval.ttype = lookup_name (yyvsp[0].ttype); ; break;} ! case 267: ! #line 1287 "c-parse.y" { yyval.ttype = TREE_TYPE (yyvsp[-1].ttype); ; break;} ! case 268: ! #line 1289 "c-parse.y" { yyval.ttype = groktypename (yyvsp[-1].ttype); ; break;} ! case 273: ! #line 1306 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 274: ! #line 1308 "c-parse.y" { if (TREE_CHAIN (yyvsp[-1].ttype)) yyvsp[-1].ttype = combine_strings (yyvsp[-1].ttype); yyval.ttype = yyvsp[-1].ttype; ; break;} ! case 275: ! #line 1315 "c-parse.y" { yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1, ! chainon (yyvsp[-1].ttype, all_prefix_attributes)); start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ; break;} ! case 276: ! #line 1320 "c-parse.y" { finish_init (); finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ; break;} ! case 277: ! #line 1323 "c-parse.y" { tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0, ! chainon (yyvsp[0].ttype, all_prefix_attributes)); finish_decl (d, NULL_TREE, yyvsp[-1].ttype); ; break;} ! case 278: ! #line 1331 "c-parse.y" { yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1, ! chainon (yyvsp[-1].ttype, all_prefix_attributes)); start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ; break;} ! case 279: ! #line 1336 "c-parse.y" { finish_init (); finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ; break;} ! case 280: ! #line 1339 "c-parse.y" { tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0, ! chainon (yyvsp[0].ttype, all_prefix_attributes)); finish_decl (d, NULL_TREE, yyvsp[-1].ttype); ; break;} ! case 281: ! #line 1347 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 282: ! #line 1349 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} ! case 283: ! #line 1354 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} ! case 284: ! #line 1356 "c-parse.y" { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 285: ! #line 1361 "c-parse.y" { yyval.ttype = yyvsp[-2].ttype; ; break;} ! case 286: ! #line 1366 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} ! case 287: ! #line 1368 "c-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} ! case 288: ! #line 1373 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 289: ! #line 1375 "c-parse.y" { yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE); ; break;} ! case 290: ! #line 1377 "c-parse.y" { yyval.ttype = build_tree_list (yyvsp[-3].ttype, build_tree_list (NULL_TREE, yyvsp[-1].ttype)); ; break;} ! case 291: ! #line 1379 "c-parse.y" { yyval.ttype = build_tree_list (yyvsp[-5].ttype, tree_cons (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype)); ; break;} ! case 292: ! #line 1381 "c-parse.y" { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} ! case 298: ! #line 1399 "c-parse.y" { really_start_incremental_init (NULL_TREE); ; break;} ! case 299: ! #line 1401 "c-parse.y" { yyval.ttype = pop_init_level (0); ; break;} ! case 300: ! #line 1403 "c-parse.y" { yyval.ttype = error_mark_node; ; break;} ! case 301: ! #line 1409 "c-parse.y" { if (pedantic) pedwarn ("ISO C forbids empty initializer braces"); ; break;} ! case 305: ! #line 1423 "c-parse.y" { if (pedantic && ! flag_isoc99) pedwarn ("ISO C89 forbids specifying subobject to initialize"); ; break;} ! case 306: ! #line 1426 "c-parse.y" { if (pedantic) pedwarn ("obsolete use of designated initializer without `='"); ; break;} ! case 307: ! #line 1429 "c-parse.y" { set_init_label (yyvsp[-1].ttype); if (pedantic) pedwarn ("obsolete use of designated initializer with `:'"); ; break;} ! case 310: ! #line 1438 "c-parse.y" { push_init_level (0); ; break;} ! case 311: ! #line 1440 "c-parse.y" { process_init_element (pop_init_level (0)); ; break;} ! case 312: ! #line 1442 "c-parse.y" { process_init_element (yyvsp[0].ttype); ; break;} ! case 316: ! #line 1453 "c-parse.y" { set_init_label (yyvsp[0].ttype); ; break;} ! case 317: ! #line 1458 "c-parse.y" { set_init_index (yyvsp[-3].ttype, yyvsp[-1].ttype); if (pedantic) pedwarn ("ISO C forbids specifying range of elements to initialize"); ; break;} ! case 318: ! #line 1462 "c-parse.y" { set_init_index (yyvsp[-1].ttype, NULL_TREE); ; break;} ! case 319: ! #line 1467 "c-parse.y" { if (pedantic) pedwarn ("ISO C forbids nested functions"); push_function_context (); if (! start_function (current_declspecs, yyvsp[0].ttype, ! all_prefix_attributes)) { pop_function_context (); YYERROR1; } ; break;} ! case 320: ! #line 1479 "c-parse.y" { store_parm_decls (); ; break;} ! case 321: ! #line 1487 "c-parse.y" { tree decl = current_function_decl; DECL_SOURCE_FILE (decl) = yyvsp[-2].filename; DECL_SOURCE_LINE (decl) = yyvsp[-1].lineno; ! finish_function (1, 1); pop_function_context (); add_decl_stmt (decl); ; break;} ! case 322: ! #line 1497 "c-parse.y" { if (pedantic) pedwarn ("ISO C forbids nested functions"); push_function_context (); if (! start_function (current_declspecs, yyvsp[0].ttype, ! all_prefix_attributes)) { pop_function_context (); YYERROR1; } ; break;} ! case 323: ! #line 1509 "c-parse.y" { store_parm_decls (); ; break;} ! case 324: ! #line 1517 "c-parse.y" { tree decl = current_function_decl; DECL_SOURCE_FILE (decl) = yyvsp[-2].filename; DECL_SOURCE_LINE (decl) = yyvsp[-1].lineno; ! finish_function (1, 1); pop_function_context (); add_decl_stmt (decl); ; break;} ! case 327: ! #line 1537 "c-parse.y" ! { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; ; break;} ! case 328: ! #line 1539 "c-parse.y" { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ; break;} ! case 329: ! #line 1544 "c-parse.y" ! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ; break;} ! case 330: ! #line 1546 "c-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 334: ! #line 1561 "c-parse.y" { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ; break;} ! case 335: ! #line 1566 "c-parse.y" ! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ; break;} ! case 337: ! #line 1572 "c-parse.y" ! { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ; break;} ! case 338: ! #line 1577 "c-parse.y" ! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ; break;} ! case 339: ! #line 1579 "c-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 340: ! #line 1581 "c-parse.y" ! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 341: ! #line 1583 "c-parse.y" ! { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; ; ! break;} ! case 342: ! #line 1591 "c-parse.y" { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ; break;} ! case 343: ! #line 1596 "c-parse.y" ! { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; ; break;} ! case 344: ! #line 1598 "c-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 345: ! #line 1600 "c-parse.y" ! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 0); ; break;} ! case 347: ! #line 1606 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 348: ! #line 1608 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} ! case 349: ! #line 1613 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 350: ! #line 1615 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} ! case 351: ! #line 1620 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 352: ! #line 1622 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} ! case 353: ! #line 1633 "c-parse.y" { yyval.ttype = start_struct (RECORD_TYPE, yyvsp[-1].ttype); /* Start scope of tag before parsing components. */ ; break;} ! case 354: ! #line 1637 "c-parse.y" { yyval.ttype = finish_struct (yyvsp[-3].ttype, yyvsp[-2].ttype, chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ; break;} ! case 355: ! #line 1639 "c-parse.y" { yyval.ttype = finish_struct (start_struct (RECORD_TYPE, NULL_TREE), yyvsp[-2].ttype, chainon (yyvsp[-4].ttype, yyvsp[0].ttype)); ; break;} ! case 356: ! #line 1643 "c-parse.y" { yyval.ttype = start_struct (UNION_TYPE, yyvsp[-1].ttype); ; break;} ! case 357: ! #line 1645 "c-parse.y" { yyval.ttype = finish_struct (yyvsp[-3].ttype, yyvsp[-2].ttype, chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ; break;} ! case 358: ! #line 1647 "c-parse.y" { yyval.ttype = finish_struct (start_struct (UNION_TYPE, NULL_TREE), yyvsp[-2].ttype, chainon (yyvsp[-4].ttype, yyvsp[0].ttype)); ; break;} ! case 359: ! #line 1651 "c-parse.y" { yyval.ttype = start_enum (yyvsp[-1].ttype); ; break;} ! case 360: ! #line 1653 "c-parse.y" { yyval.ttype = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype), chainon (yyvsp[-7].ttype, yyvsp[0].ttype)); ; break;} ! case 361: ! #line 1656 "c-parse.y" { yyval.ttype = start_enum (NULL_TREE); ; break;} ! case 362: ! #line 1658 "c-parse.y" { yyval.ttype = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype), chainon (yyvsp[-6].ttype, yyvsp[0].ttype)); ; break;} ! case 363: ! #line 1664 "c-parse.y" ! { yyval.ttype = xref_tag (RECORD_TYPE, yyvsp[0].ttype); ; ! break;} ! case 364: ! #line 1666 "c-parse.y" ! { yyval.ttype = xref_tag (UNION_TYPE, yyvsp[0].ttype); ; ! break;} ! case 365: ! #line 1668 "c-parse.y" { yyval.ttype = xref_tag (ENUMERAL_TYPE, yyvsp[0].ttype); /* In ISO C, enumerated types can be referred to only if already defined. */ if (pedantic && !COMPLETE_TYPE_P (yyval.ttype)) pedwarn ("ISO C forbids forward references to `enum' types"); ; break;} ! case 369: ! #line 1683 "c-parse.y" { if (pedantic && ! flag_isoc99) pedwarn ("comma at end of enumerator list"); ; break;} ! case 370: ! #line 1689 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} ! case 371: ! #line 1691 "c-parse.y" { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); pedwarn ("no semicolon at end of struct or union"); ; break;} ! case 372: ! #line 1696 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 373: ! #line 1698 "c-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[-1].ttype); ; break;} ! case 374: ! #line 1700 "c-parse.y" { if (pedantic) pedwarn ("extra semicolon in struct or union specified"); ; break;} ! case 375: ! #line 1706 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ! POP_DECLSPEC_STACK; ; break;} ! case 376: ! #line 1709 "c-parse.y" { /* Support for unnamed structs or unions as members of structs or unions (which is [a] useful and [b] supports *************** case 264: *** 3003,3171 **** if (pedantic) pedwarn ("ISO C doesn't support unnamed structs/unions"); ! yyval.ttype = grokfield(yyvsp[-2].filename, yyvsp[-1].lineno, NULL, current_declspecs, NULL_TREE); ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); ! ; break;} ! case 265: ! #line 1347 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); ; break;} ! case 266: ! #line 1352 "c-parse.y" { if (pedantic) pedwarn ("ISO C forbids member declarations with no members"); shadow_tag(yyvsp[0].ttype); yyval.ttype = NULL_TREE; ; break;} ! case 267: ! #line 1357 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 268: ! #line 1359 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; RESTORE_WARN_FLAGS (yyvsp[-1].ttype); ; break;} ! case 270: ! #line 1366 "c-parse.y" ! { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} ! case 271: ! #line 1371 "c-parse.y" { yyval.ttype = grokfield (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-1].ttype, current_declspecs, NULL_TREE); ! decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ; break;} ! case 272: ! #line 1375 "c-parse.y" { yyval.ttype = grokfield (yyvsp[-5].filename, yyvsp[-4].lineno, yyvsp[-3].ttype, current_declspecs, yyvsp[-1].ttype); ! decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ; break;} ! case 273: ! #line 1378 "c-parse.y" { yyval.ttype = grokfield (yyvsp[-4].filename, yyvsp[-3].lineno, NULL_TREE, current_declspecs, yyvsp[-1].ttype); ! decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ; break;} ! case 275: ! #line 1390 "c-parse.y" { if (yyvsp[-2].ttype == error_mark_node) yyval.ttype = yyvsp[-2].ttype; else yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-2].ttype); ; break;} ! case 276: ! #line 1395 "c-parse.y" { yyval.ttype = error_mark_node; ; break;} ! case 277: ! #line 1401 "c-parse.y" { yyval.ttype = build_enumerator (yyvsp[0].ttype, NULL_TREE); ; break;} ! case 278: ! #line 1403 "c-parse.y" { yyval.ttype = build_enumerator (yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} ! case 279: ! #line 1408 "c-parse.y" ! { pending_xref_error (); ; ! break;} ! case 280: ! #line 1410 "c-parse.y" ! { yyval.ttype = build_tree_list (yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} ! case 281: ! #line 1412 "c-parse.y" { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 282: ! #line 1417 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 284: ! #line 1423 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ; break;} ! case 285: ! #line 1425 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ; break;} ! case 286: ! #line 1430 "c-parse.y" ! { yyval.ttype = NULL_TREE; ; break;} ! case 287: ! #line 1432 "c-parse.y" ! { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ; break;} ! case 288: ! #line 1437 "c-parse.y" ! { yyval.ttype = yyvsp[-1].ttype; ; break;} ! case 289: ! #line 1440 "c-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 290: ! #line 1442 "c-parse.y" ! { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ; break;} ! case 291: ! #line 1444 "c-parse.y" { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ; break;} ! case 292: ! #line 1446 "c-parse.y" ! { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ; ! break;} ! case 293: ! #line 1448 "c-parse.y" ! { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ; break;} ! case 294: ! #line 1450 "c-parse.y" { yyval.ttype = build_nt (CALL_EXPR, NULL_TREE, yyvsp[0].ttype, NULL_TREE); ; break;} ! case 295: ! #line 1452 "c-parse.y" ! { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ; break;} ! case 296: ! #line 1454 "c-parse.y" ! { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, NULL_TREE); ; break;} ! case 297: ! #line 1458 "c-parse.y" ! { yyval.ttype = yyvsp[0].ttype; ; break;} ! case 300: ! #line 1471 "c-parse.y" { pedwarn ("deprecated use of label at end of compound statement"); ; break;} ! case 308: ! #line 1488 "c-parse.y" { if (pedantic && !flag_isoc99) pedwarn ("ISO C89 forbids mixed declarations and code"); ; break;} ! case 323: ! #line 1518 "c-parse.y" { pushlevel (0); clear_last_expr (); add_scope_stmt (/*begin_p=*/1, /*partial_p=*/0); ; break;} ! case 324: ! #line 1525 "c-parse.y" { yyval.ttype = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0); ; break;} ! case 325: ! #line 1529 "c-parse.y" { if (flag_isoc99) { yyval.ttype = c_begin_compound_stmt (); --- 3560,3775 ---- if (pedantic) pedwarn ("ISO C doesn't support unnamed structs/unions"); ! yyval.ttype = grokfield(yyvsp[-1].filename, yyvsp[0].lineno, NULL, current_declspecs, NULL_TREE); ! POP_DECLSPEC_STACK; ; break;} ! case 377: ! #line 1719 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ! POP_DECLSPEC_STACK; ; break;} ! case 378: ! #line 1722 "c-parse.y" { if (pedantic) pedwarn ("ISO C forbids member declarations with no members"); shadow_tag(yyvsp[0].ttype); yyval.ttype = NULL_TREE; ; break;} ! case 379: ! #line 1727 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 380: ! #line 1729 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; RESTORE_WARN_FLAGS (yyvsp[-1].ttype); ; break;} ! case 382: ! #line 1736 "c-parse.y" ! { yyval.ttype = chainon (yyvsp[-3].ttype, yyvsp[0].ttype); ; break;} ! case 384: ! #line 1742 "c-parse.y" ! { yyval.ttype = chainon (yyvsp[-3].ttype, yyvsp[0].ttype); ; ! break;} ! case 385: ! #line 1747 "c-parse.y" { yyval.ttype = grokfield (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-1].ttype, current_declspecs, NULL_TREE); ! decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ; break;} ! case 386: ! #line 1751 "c-parse.y" { yyval.ttype = grokfield (yyvsp[-5].filename, yyvsp[-4].lineno, yyvsp[-3].ttype, current_declspecs, yyvsp[-1].ttype); ! decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ; break;} ! case 387: ! #line 1754 "c-parse.y" { yyval.ttype = grokfield (yyvsp[-4].filename, yyvsp[-3].lineno, NULL_TREE, current_declspecs, yyvsp[-1].ttype); ! decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ; break;} ! case 388: ! #line 1760 "c-parse.y" ! { yyval.ttype = grokfield (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-1].ttype, current_declspecs, NULL_TREE); ! decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ; ! break;} ! case 389: ! #line 1764 "c-parse.y" ! { yyval.ttype = grokfield (yyvsp[-5].filename, yyvsp[-4].lineno, yyvsp[-3].ttype, current_declspecs, yyvsp[-1].ttype); ! decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ; ! break;} ! case 390: ! #line 1767 "c-parse.y" ! { yyval.ttype = grokfield (yyvsp[-4].filename, yyvsp[-3].lineno, NULL_TREE, current_declspecs, yyvsp[-1].ttype); ! decl_attributes (&yyval.ttype, chainon (yyvsp[0].ttype, all_prefix_attributes), 0); ; ! break;} ! case 392: ! #line 1779 "c-parse.y" { if (yyvsp[-2].ttype == error_mark_node) yyval.ttype = yyvsp[-2].ttype; else yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-2].ttype); ; break;} ! case 393: ! #line 1784 "c-parse.y" { yyval.ttype = error_mark_node; ; break;} ! case 394: ! #line 1790 "c-parse.y" { yyval.ttype = build_enumerator (yyvsp[0].ttype, NULL_TREE); ; break;} ! case 395: ! #line 1792 "c-parse.y" { yyval.ttype = build_enumerator (yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} ! case 396: ! #line 1797 "c-parse.y" ! { pending_xref_error (); ! yyval.ttype = yyvsp[0].ttype; ; break;} ! case 397: ! #line 1800 "c-parse.y" { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 398: ! #line 1805 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 400: ! #line 1811 "c-parse.y" ! { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, ! NULL_TREE), ! all_prefix_attributes); ; break;} ! case 401: ! #line 1815 "c-parse.y" ! { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, ! yyvsp[0].ttype), ! all_prefix_attributes); ; break;} ! case 402: ! #line 1819 "c-parse.y" ! { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, ! yyvsp[-1].ttype), ! chainon (yyvsp[0].ttype, all_prefix_attributes)); ; break;} ! case 406: ! #line 1832 "c-parse.y" ! { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 407: ! #line 1837 "c-parse.y" ! { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ; break;} ! case 408: ! #line 1839 "c-parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} ! case 409: ! #line 1844 "c-parse.y" ! { yyval.ttype = yyvsp[-2].ttype ? tree_cons (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE) : yyvsp[-1].ttype; ; break;} ! case 410: ! #line 1846 "c-parse.y" { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ; break;} ! case 411: ! #line 1848 "c-parse.y" ! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, yyvsp[-1].ttype, 1); ; break;} ! case 412: ! #line 1850 "c-parse.y" { yyval.ttype = build_nt (CALL_EXPR, NULL_TREE, yyvsp[0].ttype, NULL_TREE); ; break;} ! case 413: ! #line 1852 "c-parse.y" ! { yyval.ttype = set_array_declarator_type (yyvsp[0].ttype, NULL_TREE, 1); ; break;} ! case 414: ! #line 1859 "c-parse.y" ! { yyval.ttype = build_array_declarator (yyvsp[-1].ttype, NULL_TREE, 0, 0); ; break;} ! case 415: ! #line 1861 "c-parse.y" ! { yyval.ttype = build_array_declarator (yyvsp[-1].ttype, yyvsp[-2].ttype, 0, 0); ; break;} ! case 416: ! #line 1863 "c-parse.y" ! { yyval.ttype = build_array_declarator (NULL_TREE, NULL_TREE, 0, 0); ; ! break;} ! case 417: ! #line 1865 "c-parse.y" ! { yyval.ttype = build_array_declarator (NULL_TREE, yyvsp[-1].ttype, 0, 0); ; ! break;} ! case 418: ! #line 1867 "c-parse.y" ! { yyval.ttype = build_array_declarator (NULL_TREE, NULL_TREE, 0, 1); ; ! break;} ! case 419: ! #line 1869 "c-parse.y" ! { yyval.ttype = build_array_declarator (NULL_TREE, yyvsp[-2].ttype, 0, 1); ; ! break;} ! case 420: ! #line 1871 "c-parse.y" ! { if (C_RID_CODE (yyvsp[-2].ttype) != RID_STATIC) ! error ("storage class specifier in array declarator"); ! yyval.ttype = build_array_declarator (yyvsp[-1].ttype, NULL_TREE, 1, 0); ; ! break;} ! case 421: ! #line 1875 "c-parse.y" ! { if (C_RID_CODE (yyvsp[-3].ttype) != RID_STATIC) ! error ("storage class specifier in array declarator"); ! yyval.ttype = build_array_declarator (yyvsp[-1].ttype, yyvsp[-2].ttype, 1, 0); ; ! break;} ! case 422: ! #line 1879 "c-parse.y" ! { if (C_RID_CODE (yyvsp[-2].ttype) != RID_STATIC) ! error ("storage class specifier in array declarator"); ! yyval.ttype = build_array_declarator (yyvsp[-1].ttype, yyvsp[-3].ttype, 1, 0); ; ! break;} ! case 425: ! #line 1894 "c-parse.y" { pedwarn ("deprecated use of label at end of compound statement"); ; break;} ! case 433: ! #line 1911 "c-parse.y" { if (pedantic && !flag_isoc99) pedwarn ("ISO C89 forbids mixed declarations and code"); ; break;} ! case 448: ! #line 1941 "c-parse.y" { pushlevel (0); clear_last_expr (); add_scope_stmt (/*begin_p=*/1, /*partial_p=*/0); ; break;} ! case 449: ! #line 1948 "c-parse.y" { yyval.ttype = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0); ; break;} ! case 450: ! #line 1953 "c-parse.y" { if (flag_isoc99) { yyval.ttype = c_begin_compound_stmt (); *************** case 325: *** 3177,3184 **** yyval.ttype = NULL_TREE; ; break;} ! case 326: ! #line 1545 "c-parse.y" { if (flag_isoc99) { tree scope_stmt = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0); --- 3781,3788 ---- yyval.ttype = NULL_TREE; ; break;} ! case 451: ! #line 1969 "c-parse.y" { if (flag_isoc99) { tree scope_stmt = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0); *************** case 326: *** 3190,3202 **** else yyval.ttype = NULL_TREE; ; break;} ! case 328: ! #line 1562 "c-parse.y" { if (pedantic) pedwarn ("ISO C forbids label declarations"); ; break;} ! case 331: ! #line 1573 "c-parse.y" { tree link; for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link)) { --- 3794,3806 ---- else yyval.ttype = NULL_TREE; ; break;} ! case 453: ! #line 1986 "c-parse.y" { if (pedantic) pedwarn ("ISO C forbids label declarations"); ; break;} ! case 456: ! #line 1997 "c-parse.y" { tree link; for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link)) { *************** case 331: *** 3206,3233 **** } ; break;} ! case 332: ! #line 1587 "c-parse.y" {; break;} ! case 334: ! #line 1591 "c-parse.y" { compstmt_count++; yyval.ttype = c_begin_compound_stmt (); ; break;} ! case 335: ! #line 1595 "c-parse.y" { yyval.ttype = convert (void_type_node, integer_zero_node); ; break;} ! case 336: ! #line 1597 "c-parse.y" { yyval.ttype = poplevel (kept_level_p (), 1, 0); SCOPE_STMT_BLOCK (TREE_PURPOSE (yyvsp[0].ttype)) = SCOPE_STMT_BLOCK (TREE_VALUE (yyvsp[0].ttype)) = yyval.ttype; ; break;} ! case 339: ! #line 1610 "c-parse.y" { if (current_function_decl == 0) { error ("braced-group within expression allowed only inside a function"); --- 3810,3837 ---- } ; break;} ! case 457: ! #line 2011 "c-parse.y" {; break;} ! case 459: ! #line 2015 "c-parse.y" { compstmt_count++; yyval.ttype = c_begin_compound_stmt (); ; break;} ! case 460: ! #line 2020 "c-parse.y" { yyval.ttype = convert (void_type_node, integer_zero_node); ; break;} ! case 461: ! #line 2022 "c-parse.y" { yyval.ttype = poplevel (kept_level_p (), 1, 0); SCOPE_STMT_BLOCK (TREE_PURPOSE (yyvsp[0].ttype)) = SCOPE_STMT_BLOCK (TREE_VALUE (yyvsp[0].ttype)) = yyval.ttype; ; break;} ! case 464: ! #line 2035 "c-parse.y" { if (current_function_decl == 0) { error ("braced-group within expression allowed only inside a function"); *************** case 339: *** 3243,3271 **** yyval.ttype = add_stmt (build_stmt (COMPOUND_STMT, last_tree)); ; break;} ! case 340: ! #line 1626 "c-parse.y" { RECHAIN_STMTS (yyvsp[-1].ttype, COMPOUND_BODY (yyvsp[-1].ttype)); yyval.ttype = yyvsp[-1].ttype; ; break;} ! case 341: ! #line 1633 "c-parse.y" { c_finish_then (); ; break;} ! case 343: ! #line 1650 "c-parse.y" { yyval.ttype = c_begin_if_stmt (); ; break;} ! case 344: ! #line 1652 "c-parse.y" { c_expand_start_cond (truthvalue_conversion (yyvsp[-1].ttype), compstmt_count,yyvsp[-3].ttype); yyval.itype = stmt_count; if_stmt_file = yyvsp[-7].filename; if_stmt_line = yyvsp[-6].lineno; ; break;} ! case 345: ! #line 1664 "c-parse.y" { stmt_count++; compstmt_count++; yyval.ttype --- 3847,3876 ---- yyval.ttype = add_stmt (build_stmt (COMPOUND_STMT, last_tree)); ; break;} ! case 465: ! #line 2052 "c-parse.y" { RECHAIN_STMTS (yyvsp[-1].ttype, COMPOUND_BODY (yyvsp[-1].ttype)); + last_expr_type = NULL_TREE; yyval.ttype = yyvsp[-1].ttype; ; break;} ! case 466: ! #line 2060 "c-parse.y" { c_finish_then (); ; break;} ! case 468: ! #line 2077 "c-parse.y" { yyval.ttype = c_begin_if_stmt (); ; break;} ! case 469: ! #line 2079 "c-parse.y" { c_expand_start_cond (truthvalue_conversion (yyvsp[-1].ttype), compstmt_count,yyvsp[-3].ttype); yyval.itype = stmt_count; if_stmt_file = yyvsp[-7].filename; if_stmt_line = yyvsp[-6].lineno; ; break;} ! case 470: ! #line 2091 "c-parse.y" { stmt_count++; compstmt_count++; yyval.ttype *************** case 345: *** 3277,3339 **** RTL-generation time. */ DO_COND (yyval.ttype) = error_mark_node; ; break;} ! case 346: ! #line 1675 "c-parse.y" { yyval.ttype = yyvsp[-2].ttype; RECHAIN_STMTS (yyval.ttype, DO_BODY (yyval.ttype)); ; break;} ! case 347: ! #line 1683 "c-parse.y" { if (yychar == YYEMPTY) yychar = YYLEX; yyval.filename = input_filename; ; break;} ! case 348: ! #line 1689 "c-parse.y" { if (yychar == YYEMPTY) yychar = YYLEX; yyval.lineno = lineno; ; break;} ! case 351: ! #line 1702 "c-parse.y" { if (flag_isoc99) RECHAIN_STMTS (yyvsp[-2].ttype, COMPOUND_BODY (yyvsp[-2].ttype)); ; break;} ! case 352: ! #line 1708 "c-parse.y" { if (yyvsp[0].ttype) { STMT_LINENO (yyvsp[0].ttype) = yyvsp[-1].lineno; /* ??? We currently have no way of recording the filename for a statement. This probably matters little in practice at the moment, ! but I suspect that problems will ocurr when doing inlining at the tree level. */ } ; break;} ! case 353: ! #line 1722 "c-parse.y" { if (yyvsp[0].ttype) { STMT_LINENO (yyvsp[0].ttype) = yyvsp[-1].lineno; } ; break;} ! case 354: ! #line 1731 "c-parse.y" { c_expand_start_else (); yyvsp[-1].itype = stmt_count; ; break;} ! case 355: ! #line 1734 "c-parse.y" { c_finish_else (); c_expand_end_cond (); if (extra_warnings && stmt_count == yyvsp[-3].itype) warning ("empty body in an else-statement"); ; break;} ! case 356: ! #line 1739 "c-parse.y" { c_expand_end_cond (); /* This warning is here instead of in simple_if, because we do not want a warning if an empty if is followed by an --- 3882,3944 ---- RTL-generation time. */ DO_COND (yyval.ttype) = error_mark_node; ; break;} ! case 471: ! #line 2102 "c-parse.y" { yyval.ttype = yyvsp[-2].ttype; RECHAIN_STMTS (yyval.ttype, DO_BODY (yyval.ttype)); ; break;} ! case 472: ! #line 2110 "c-parse.y" { if (yychar == YYEMPTY) yychar = YYLEX; yyval.filename = input_filename; ; break;} ! case 473: ! #line 2116 "c-parse.y" { if (yychar == YYEMPTY) yychar = YYLEX; yyval.lineno = lineno; ; break;} ! case 476: ! #line 2129 "c-parse.y" { if (flag_isoc99) RECHAIN_STMTS (yyvsp[-2].ttype, COMPOUND_BODY (yyvsp[-2].ttype)); ; break;} ! case 477: ! #line 2135 "c-parse.y" { if (yyvsp[0].ttype) { STMT_LINENO (yyvsp[0].ttype) = yyvsp[-1].lineno; /* ??? We currently have no way of recording the filename for a statement. This probably matters little in practice at the moment, ! but I suspect that problems will occur when doing inlining at the tree level. */ } ; break;} ! case 478: ! #line 2149 "c-parse.y" { if (yyvsp[0].ttype) { STMT_LINENO (yyvsp[0].ttype) = yyvsp[-1].lineno; } ; break;} ! case 479: ! #line 2158 "c-parse.y" { c_expand_start_else (); yyvsp[-1].itype = stmt_count; ; break;} ! case 480: ! #line 2161 "c-parse.y" { c_finish_else (); c_expand_end_cond (); if (extra_warnings && stmt_count == yyvsp[-3].itype) warning ("empty body in an else-statement"); ; break;} ! case 481: ! #line 2166 "c-parse.y" { c_expand_end_cond (); /* This warning is here instead of in simple_if, because we do not want a warning if an empty if is followed by an *************** case 356: *** 3343,3493 **** warning_with_file_and_line (if_stmt_file, if_stmt_line, "empty body in an if-statement"); ; break;} ! case 357: ! #line 1751 "c-parse.y" { c_expand_end_cond (); ; break;} ! case 358: ! #line 1761 "c-parse.y" { stmt_count++; yyval.ttype = c_begin_while_stmt (); ; break;} ! case 359: ! #line 1764 "c-parse.y" { yyvsp[-1].ttype = truthvalue_conversion (yyvsp[-1].ttype); c_finish_while_stmt_cond (truthvalue_conversion (yyvsp[-1].ttype), yyvsp[-3].ttype); yyval.ttype = add_stmt (yyvsp[-3].ttype); ; break;} ! case 360: ! #line 1769 "c-parse.y" { RECHAIN_STMTS (yyvsp[-1].ttype, WHILE_BODY (yyvsp[-1].ttype)); ; break;} ! case 361: ! #line 1772 "c-parse.y" { DO_COND (yyvsp[-4].ttype) = truthvalue_conversion (yyvsp[-2].ttype); ; break;} ! case 362: ! #line 1774 "c-parse.y" { ; break;} ! case 363: ! #line 1776 "c-parse.y" { yyval.ttype = build_stmt (FOR_STMT, NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE); add_stmt (yyval.ttype); ; break;} ! case 364: ! #line 1780 "c-parse.y" { stmt_count++; RECHAIN_STMTS (yyvsp[-2].ttype, FOR_INIT_STMT (yyvsp[-2].ttype)); ; break;} ! case 365: ! #line 1783 "c-parse.y" { if (yyvsp[-1].ttype) FOR_COND (yyvsp[-5].ttype) = truthvalue_conversion (yyvsp[-1].ttype); ; break;} ! case 366: ! #line 1786 "c-parse.y" { FOR_EXPR (yyvsp[-8].ttype) = yyvsp[-1].ttype; ; break;} ! case 367: ! #line 1788 "c-parse.y" { RECHAIN_STMTS (yyvsp[-10].ttype, FOR_BODY (yyvsp[-10].ttype)); ; break;} ! case 368: ! #line 1790 "c-parse.y" { stmt_count++; yyval.ttype = c_start_case (yyvsp[-1].ttype); ; break;} ! case 369: ! #line 1793 "c-parse.y" { c_finish_case (); ; break;} ! case 370: ! #line 1798 "c-parse.y" { add_stmt (build_stmt (EXPR_STMT, yyvsp[-1].ttype)); ; break;} ! case 371: ! #line 1800 "c-parse.y" { check_for_loop_decls (); ; break;} ! case 372: ! #line 1806 "c-parse.y" { stmt_count++; yyval.ttype = yyvsp[0].ttype; ; break;} ! case 373: ! #line 1808 "c-parse.y" { stmt_count++; yyval.ttype = c_expand_expr_stmt (yyvsp[-1].ttype); ; break;} ! case 374: ! #line 1811 "c-parse.y" { if (flag_isoc99) RECHAIN_STMTS (yyvsp[-2].ttype, COMPOUND_BODY (yyvsp[-2].ttype)); yyval.ttype = NULL_TREE; ; break;} ! case 375: ! #line 1815 "c-parse.y" { stmt_count++; yyval.ttype = add_stmt (build_break_stmt ()); ; break;} ! case 376: ! #line 1818 "c-parse.y" { stmt_count++; yyval.ttype = add_stmt (build_continue_stmt ()); ; break;} ! case 377: ! #line 1821 "c-parse.y" { stmt_count++; yyval.ttype = c_expand_return (NULL_TREE); ; break;} ! case 378: ! #line 1824 "c-parse.y" { stmt_count++; yyval.ttype = c_expand_return (yyvsp[-1].ttype); ; break;} ! case 379: ! #line 1827 "c-parse.y" { stmt_count++; ! STRIP_NOPS (yyvsp[-2].ttype); ! if ((TREE_CODE (yyvsp[-2].ttype) == ADDR_EXPR ! && TREE_CODE (TREE_OPERAND (yyvsp[-2].ttype, 0)) == STRING_CST) ! || TREE_CODE (yyvsp[-2].ttype) == STRING_CST) ! { ! if (TREE_CODE (yyvsp[-2].ttype) == ADDR_EXPR) ! yyvsp[-2].ttype = TREE_OPERAND (yyvsp[-2].ttype, 0); ! if (TREE_CHAIN (yyvsp[-2].ttype)) ! yyvsp[-2].ttype = combine_strings (yyvsp[-2].ttype); ! yyval.ttype = add_stmt (build_stmt (ASM_STMT, NULL_TREE, yyvsp[-2].ttype, ! NULL_TREE, NULL_TREE, ! NULL_TREE)); ! ASM_INPUT_P (yyval.ttype) = 1; ! } ! else ! { ! error ("argument of `asm' is not a constant string"); ! yyval.ttype = NULL_TREE; ! } ! ; break;} ! case 380: ! #line 1850 "c-parse.y" { stmt_count++; yyval.ttype = build_asm_stmt (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE); ; break;} ! case 381: ! #line 1855 "c-parse.y" { stmt_count++; yyval.ttype = build_asm_stmt (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE); ; break;} ! case 382: ! #line 1860 "c-parse.y" { stmt_count++; yyval.ttype = build_asm_stmt (yyvsp[-10].ttype, yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype); ; break;} ! case 383: ! #line 1863 "c-parse.y" { tree decl; stmt_count++; decl = lookup_label (yyvsp[-1].ttype); --- 3948,4079 ---- warning_with_file_and_line (if_stmt_file, if_stmt_line, "empty body in an if-statement"); ; break;} ! case 482: ! #line 2178 "c-parse.y" { c_expand_end_cond (); ; break;} ! case 483: ! #line 2188 "c-parse.y" { stmt_count++; yyval.ttype = c_begin_while_stmt (); ; break;} ! case 484: ! #line 2191 "c-parse.y" { yyvsp[-1].ttype = truthvalue_conversion (yyvsp[-1].ttype); c_finish_while_stmt_cond (truthvalue_conversion (yyvsp[-1].ttype), yyvsp[-3].ttype); yyval.ttype = add_stmt (yyvsp[-3].ttype); ; break;} ! case 485: ! #line 2196 "c-parse.y" { RECHAIN_STMTS (yyvsp[-1].ttype, WHILE_BODY (yyvsp[-1].ttype)); ; break;} ! case 486: ! #line 2199 "c-parse.y" { DO_COND (yyvsp[-4].ttype) = truthvalue_conversion (yyvsp[-2].ttype); ; break;} ! case 487: ! #line 2201 "c-parse.y" { ; break;} ! case 488: ! #line 2203 "c-parse.y" { yyval.ttype = build_stmt (FOR_STMT, NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE); add_stmt (yyval.ttype); ; break;} ! case 489: ! #line 2207 "c-parse.y" { stmt_count++; RECHAIN_STMTS (yyvsp[-2].ttype, FOR_INIT_STMT (yyvsp[-2].ttype)); ; break;} ! case 490: ! #line 2210 "c-parse.y" { if (yyvsp[-1].ttype) FOR_COND (yyvsp[-5].ttype) = truthvalue_conversion (yyvsp[-1].ttype); ; break;} ! case 491: ! #line 2213 "c-parse.y" { FOR_EXPR (yyvsp[-8].ttype) = yyvsp[-1].ttype; ; break;} ! case 492: ! #line 2215 "c-parse.y" { RECHAIN_STMTS (yyvsp[-10].ttype, FOR_BODY (yyvsp[-10].ttype)); ; break;} ! case 493: ! #line 2217 "c-parse.y" { stmt_count++; yyval.ttype = c_start_case (yyvsp[-1].ttype); ; break;} ! case 494: ! #line 2220 "c-parse.y" { c_finish_case (); ; break;} ! case 495: ! #line 2225 "c-parse.y" { add_stmt (build_stmt (EXPR_STMT, yyvsp[-1].ttype)); ; break;} ! case 496: ! #line 2227 "c-parse.y" { check_for_loop_decls (); ; break;} ! case 497: ! #line 2233 "c-parse.y" { stmt_count++; yyval.ttype = yyvsp[0].ttype; ; break;} ! case 498: ! #line 2235 "c-parse.y" { stmt_count++; yyval.ttype = c_expand_expr_stmt (yyvsp[-1].ttype); ; break;} ! case 499: ! #line 2238 "c-parse.y" { if (flag_isoc99) RECHAIN_STMTS (yyvsp[-2].ttype, COMPOUND_BODY (yyvsp[-2].ttype)); yyval.ttype = NULL_TREE; ; break;} ! case 500: ! #line 2242 "c-parse.y" { stmt_count++; yyval.ttype = add_stmt (build_break_stmt ()); ; break;} ! case 501: ! #line 2245 "c-parse.y" { stmt_count++; yyval.ttype = add_stmt (build_continue_stmt ()); ; break;} ! case 502: ! #line 2248 "c-parse.y" { stmt_count++; yyval.ttype = c_expand_return (NULL_TREE); ; break;} ! case 503: ! #line 2251 "c-parse.y" { stmt_count++; yyval.ttype = c_expand_return (yyvsp[-1].ttype); ; break;} ! case 504: ! #line 2254 "c-parse.y" { stmt_count++; ! yyval.ttype = simple_asm_stmt (yyvsp[-2].ttype); ; break;} ! case 505: ! #line 2258 "c-parse.y" { stmt_count++; yyval.ttype = build_asm_stmt (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE); ; break;} ! case 506: ! #line 2263 "c-parse.y" { stmt_count++; yyval.ttype = build_asm_stmt (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE); ; break;} ! case 507: ! #line 2268 "c-parse.y" { stmt_count++; yyval.ttype = build_asm_stmt (yyvsp[-10].ttype, yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype); ; break;} ! case 508: ! #line 2271 "c-parse.y" { tree decl; stmt_count++; decl = lookup_label (yyvsp[-1].ttype); *************** case 383: *** 3500,3592 **** yyval.ttype = NULL_TREE; ; break;} ! case 384: ! #line 1875 "c-parse.y" { if (pedantic) pedwarn ("ISO C forbids `goto *expr;'"); stmt_count++; yyvsp[-1].ttype = convert (ptr_type_node, yyvsp[-1].ttype); yyval.ttype = add_stmt (build_stmt (GOTO_STMT, yyvsp[-1].ttype)); ; break;} ! case 385: ! #line 1881 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 386: ! #line 1889 "c-parse.y" { stmt_count++; yyval.ttype = do_case (yyvsp[-1].ttype, NULL_TREE); ; break;} ! case 387: ! #line 1892 "c-parse.y" { stmt_count++; yyval.ttype = do_case (yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} ! case 388: ! #line 1895 "c-parse.y" { stmt_count++; yyval.ttype = do_case (NULL_TREE, NULL_TREE); ; break;} ! case 389: ! #line 1898 "c-parse.y" { tree label = define_label (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-4].ttype); stmt_count++; if (label) { ! decl_attributes (label, yyvsp[0].ttype, NULL_TREE); yyval.ttype = add_stmt (build_stmt (LABEL_STMT, label)); } else yyval.ttype = NULL_TREE; ; break;} ! case 390: ! #line 1914 "c-parse.y" { emit_line_note (input_filename, lineno); yyval.ttype = NULL_TREE; ; break;} ! case 391: ! #line 1917 "c-parse.y" { emit_line_note (input_filename, lineno); ; break;} ! case 392: ! #line 1922 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 394: ! #line 1929 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 397: ! #line 1936 "c-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} ! case 398: ! #line 1941 "c-parse.y" ! { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} ! case 399: ! #line 1946 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), NULL_TREE); ; break;} ! case 400: ! #line 1948 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), yyvsp[-2].ttype); ; break;} ! case 401: ! #line 1954 "c-parse.y" { pushlevel (0); clear_parm_order (); declare_parm_level (0); ; break;} ! case 402: ! #line 1958 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; parmlist_tags_warning (); poplevel (0, 0, 0); ; break;} ! case 404: ! #line 1966 "c-parse.y" { tree parm; if (pedantic) pedwarn ("ISO C forbids forward parameter declarations"); --- 4086,4182 ---- yyval.ttype = NULL_TREE; ; break;} ! case 509: ! #line 2283 "c-parse.y" { if (pedantic) pedwarn ("ISO C forbids `goto *expr;'"); stmt_count++; yyvsp[-1].ttype = convert (ptr_type_node, yyvsp[-1].ttype); yyval.ttype = add_stmt (build_stmt (GOTO_STMT, yyvsp[-1].ttype)); ; break;} ! case 510: ! #line 2289 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 511: ! #line 2297 "c-parse.y" { stmt_count++; yyval.ttype = do_case (yyvsp[-1].ttype, NULL_TREE); ; break;} ! case 512: ! #line 2300 "c-parse.y" { stmt_count++; yyval.ttype = do_case (yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} ! case 513: ! #line 2303 "c-parse.y" { stmt_count++; yyval.ttype = do_case (NULL_TREE, NULL_TREE); ; break;} ! case 514: ! #line 2306 "c-parse.y" { tree label = define_label (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-4].ttype); stmt_count++; if (label) { ! decl_attributes (&label, yyvsp[0].ttype, 0); yyval.ttype = add_stmt (build_stmt (LABEL_STMT, label)); } else yyval.ttype = NULL_TREE; ; break;} ! case 515: ! #line 2322 "c-parse.y" { emit_line_note (input_filename, lineno); yyval.ttype = NULL_TREE; ; break;} ! case 516: ! #line 2325 "c-parse.y" { emit_line_note (input_filename, lineno); ; break;} ! case 517: ! #line 2330 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 519: ! #line 2337 "c-parse.y" { yyval.ttype = NULL_TREE; ; break;} ! case 522: ! #line 2344 "c-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} ! case 523: ! #line 2349 "c-parse.y" ! { yyval.ttype = build_tree_list (build_tree_list (NULL_TREE, yyvsp[-3].ttype), yyvsp[-1].ttype); ; break;} ! case 524: ! #line 2351 "c-parse.y" ! { yyval.ttype = build_tree_list (build_tree_list (yyvsp[-5].ttype, yyvsp[-3].ttype), yyvsp[-1].ttype); ; ! break;} ! case 525: ! #line 2356 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), NULL_TREE); ; break;} ! case 526: ! #line 2358 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), yyvsp[-2].ttype); ; break;} ! case 527: ! #line 2368 "c-parse.y" { pushlevel (0); clear_parm_order (); declare_parm_level (0); ; break;} ! case 528: ! #line 2372 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; parmlist_tags_warning (); poplevel (0, 0, 0); ; break;} ! case 530: ! #line 2380 "c-parse.y" { tree parm; if (pedantic) pedwarn ("ISO C forbids forward parameter declarations"); *************** case 404: *** 3595,3614 **** TREE_ASM_WRITTEN (parm) = 1; clear_parm_order (); ; break;} ! case 405: ! #line 1974 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} ! case 406: ! #line 1976 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); ; break;} ! case 407: ! #line 1982 "c-parse.y" { yyval.ttype = get_parm_info (0); ; break;} ! case 408: ! #line 1984 "c-parse.y" { yyval.ttype = get_parm_info (0); /* Gcc used to allow this as an extension. However, it does not work for all targets, and thus has been disabled. --- 4185,4209 ---- TREE_ASM_WRITTEN (parm) = 1; clear_parm_order (); ; break;} ! case 531: ! #line 2388 "c-parse.y" ! { /* Dummy action so attributes are in known place ! on parser stack. */ ; ! break;} ! case 532: ! #line 2391 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} ! case 533: ! #line 2393 "c-parse.y" { yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); ; break;} ! case 534: ! #line 2399 "c-parse.y" { yyval.ttype = get_parm_info (0); ; break;} ! case 535: ! #line 2401 "c-parse.y" { yyval.ttype = get_parm_info (0); /* Gcc used to allow this as an extension. However, it does not work for all targets, and thus has been disabled. *************** case 408: *** 3619,3731 **** error ("ISO C requires a named argument before `...'"); ; break;} ! case 409: ! #line 1994 "c-parse.y" { yyval.ttype = get_parm_info (1); ; break;} ! case 410: ! #line 1996 "c-parse.y" { yyval.ttype = get_parm_info (0); ; break;} ! case 411: ! #line 2001 "c-parse.y" { push_parm_decl (yyvsp[0].ttype); ; break;} ! case 412: ! #line 2003 "c-parse.y" { push_parm_decl (yyvsp[0].ttype); ; break;} ! case 413: ! #line 2010 "c-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[-1].ttype), ! build_tree_list (prefix_attributes, ! yyvsp[0].ttype)); ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); ; break;} ! case 414: ! #line 2018 "c-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[-1].ttype), ! build_tree_list (prefix_attributes, ! yyvsp[0].ttype)); ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); ; break;} ! case 415: ! #line 2026 "c-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[-1].ttype), ! build_tree_list (prefix_attributes, ! yyvsp[0].ttype)); ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); ; break;} ! case 416: ! #line 2034 "c-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[-1].ttype), ! build_tree_list (prefix_attributes, ! yyvsp[0].ttype)); ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); ; break;} ! case 417: ! #line 2043 "c-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[-1].ttype), ! build_tree_list (prefix_attributes, ! yyvsp[0].ttype)); ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); ; break;} ! case 418: ! #line 2056 "c-parse.y" { pushlevel (0); clear_parm_order (); declare_parm_level (1); ; break;} ! case 419: ! #line 2060 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; parmlist_tags_warning (); poplevel (0, 0, 0); ; break;} ! case 421: ! #line 2068 "c-parse.y" { tree t; for (t = yyvsp[-1].ttype; t; t = TREE_CHAIN (t)) if (TREE_VALUE (t) == NULL_TREE) error ("`...' in old-style identifier list"); ! yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, yyvsp[-1].ttype); ; break;} ! case 422: ! #line 2078 "c-parse.y" { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ; break;} ! case 423: ! #line 2080 "c-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ; break;} ! case 424: ! #line 2086 "c-parse.y" { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ; break;} ! case 425: ! #line 2088 "c-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ; break;} ! case 426: ! #line 2093 "c-parse.y" { yyval.ttype = SAVE_WARN_FLAGS(); pedantic = 0; ! warn_pointer_arith = 0; ; break;} } /* the action file gets copied in in place of this dollarsign */ --- 4214,4352 ---- error ("ISO C requires a named argument before `...'"); ; break;} ! case 536: ! #line 2411 "c-parse.y" { yyval.ttype = get_parm_info (1); ; break;} ! case 537: ! #line 2413 "c-parse.y" { yyval.ttype = get_parm_info (0); ; break;} ! case 538: ! #line 2418 "c-parse.y" { push_parm_decl (yyvsp[0].ttype); ; break;} ! case 539: ! #line 2420 "c-parse.y" { push_parm_decl (yyvsp[0].ttype); ; break;} ! case 540: ! #line 2427 "c-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[-1].ttype), ! chainon (yyvsp[0].ttype, all_prefix_attributes)); ! POP_DECLSPEC_STACK; ; break;} ! case 541: ! #line 2432 "c-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[-1].ttype), ! chainon (yyvsp[0].ttype, all_prefix_attributes)); ! POP_DECLSPEC_STACK; ; break;} ! case 542: ! #line 2437 "c-parse.y" ! { yyval.ttype = yyvsp[0].ttype; ! POP_DECLSPEC_STACK; ; ! break;} ! case 543: ! #line 2440 "c-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[-1].ttype), ! chainon (yyvsp[0].ttype, all_prefix_attributes)); ! POP_DECLSPEC_STACK; ; break;} ! case 544: ! #line 2446 "c-parse.y" ! { yyval.ttype = yyvsp[0].ttype; ! POP_DECLSPEC_STACK; ; ! break;} ! case 545: ! #line 2454 "c-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[-1].ttype), ! chainon (yyvsp[0].ttype, all_prefix_attributes)); ! POP_DECLSPEC_STACK; ; break;} ! case 546: ! #line 2459 "c-parse.y" { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, yyvsp[-1].ttype), ! chainon (yyvsp[0].ttype, all_prefix_attributes)); ! POP_DECLSPEC_STACK; ; break;} ! case 547: ! #line 2464 "c-parse.y" ! { yyval.ttype = yyvsp[0].ttype; ! POP_DECLSPEC_STACK; ; ! break;} ! case 548: ! #line 2467 "c-parse.y" ! { yyval.ttype = build_tree_list (build_tree_list (current_declspecs, ! yyvsp[-1].ttype), ! chainon (yyvsp[0].ttype, all_prefix_attributes)); ! POP_DECLSPEC_STACK; ; ! break;} ! case 549: ! #line 2473 "c-parse.y" ! { yyval.ttype = yyvsp[0].ttype; ! POP_DECLSPEC_STACK; ; ! break;} ! case 550: ! #line 2479 "c-parse.y" ! { prefix_attributes = chainon (prefix_attributes, yyvsp[-3].ttype); ! all_prefix_attributes = prefix_attributes; ; ! break;} ! case 551: ! #line 2488 "c-parse.y" { pushlevel (0); clear_parm_order (); declare_parm_level (1); ; break;} ! case 552: ! #line 2492 "c-parse.y" { yyval.ttype = yyvsp[0].ttype; parmlist_tags_warning (); poplevel (0, 0, 0); ; break;} ! case 554: ! #line 2500 "c-parse.y" { tree t; for (t = yyvsp[-1].ttype; t; t = TREE_CHAIN (t)) if (TREE_VALUE (t) == NULL_TREE) error ("`...' in old-style identifier list"); ! yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, yyvsp[-1].ttype); ! ! /* Make sure we have a parmlist after attributes. */ ! if (yyvsp[-3].ttype != 0 ! && (TREE_CODE (yyval.ttype) != TREE_LIST ! || TREE_PURPOSE (yyval.ttype) == 0 ! || TREE_CODE (TREE_PURPOSE (yyval.ttype)) != PARM_DECL)) ! YYERROR1; ! ; break;} ! case 555: ! #line 2518 "c-parse.y" { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ; break;} ! case 556: ! #line 2520 "c-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ; break;} ! case 557: ! #line 2526 "c-parse.y" { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ; break;} ! case 558: ! #line 2528 "c-parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ; break;} ! case 559: ! #line 2533 "c-parse.y" { yyval.ttype = SAVE_WARN_FLAGS(); pedantic = 0; ! warn_pointer_arith = 0; ! warn_traditional = 0; ; break;} } /* the action file gets copied in in place of this dollarsign */ *************** yyerrhandle: *** 3949,3955 **** } return 1; } ! #line 2098 "c-parse.y" /* yylex() is a thin wrapper around c_lex(), all it does is translate --- 4570,4576 ---- } return 1; } ! #line 2539 "c-parse.y" /* yylex() is a thin wrapper around c_lex(), all it does is translate *************** static const struct resword reswords[] = *** 3977,3982 **** --- 4598,4605 ---- { { "_Bool", RID_BOOL, 0 }, { "_Complex", RID_COMPLEX, 0 }, + { "__FUNCTION__", RID_FUNCTION_NAME, 0 }, + { "__PRETTY_FUNCTION__", RID_PRETTY_FUNCTION_NAME, 0 }, { "__alignof", RID_ALIGNOF, 0 }, { "__alignof__", RID_ALIGNOF, 0 }, { "__asm", RID_ASM, 0 }, *************** static const struct resword reswords[] = *** 3985,3996 **** --- 4608,4622 ---- { "__attribute__", RID_ATTRIBUTE, 0 }, { "__bounded", RID_BOUNDED, 0 }, { "__bounded__", RID_BOUNDED, 0 }, + { "__builtin_choose_expr", RID_CHOOSE_EXPR, 0 }, + { "__builtin_types_compatible_p", RID_TYPES_COMPATIBLE_P, 0 }, { "__builtin_va_arg", RID_VA_ARG, 0 }, { "__complex", RID_COMPLEX, 0 }, { "__complex__", RID_COMPLEX, 0 }, { "__const", RID_CONST, 0 }, { "__const__", RID_CONST, 0 }, { "__extension__", RID_EXTENSION, 0 }, + { "__func__", RID_C99_FUNCTION_NAME, 0 }, { "__imag", RID_IMAGPART, 0 }, { "__imag__", RID_IMAGPART, 0 }, { "__inline", RID_INLINE, 0 }, *************** static const short rid_to_yy[RID_MAX] = *** 4129,4134 **** --- 4755,4767 ---- /* RID_PTREXTENT */ PTR_EXTENT, /* RID_PTRVALUE */ PTR_VALUE, + /* RID_CHOOSE_EXPR */ CHOOSE_EXPR, + /* RID_TYPES_COMPATIBLE_P */ TYPES_COMPATIBLE_P, + + /* RID_FUNCTION_NAME */ STRING_FUNC_NAME, + /* RID_PRETTY_FUNCTION_NAME */ STRING_FUNC_NAME, + /* RID_C99_FUNCTION_NAME */ VAR_FUNC_NAME, + /* C++ */ /* RID_BOOL */ TYPESPEC, /* RID_WCHAR */ 0, *************** static const short rid_to_yy[RID_MAX] = *** 4170,4176 **** /* RID_BITAND */ 0, /* RID_BITOR */ 0, /* RID_COMPL */ 0, ! /* Objective C */ /* RID_ID */ OBJECTNAME, /* RID_AT_ENCODE */ ENCODE, --- 4803,4809 ---- /* RID_BITAND */ 0, /* RID_BITOR */ 0, /* RID_COMPL */ 0, ! /* Objective C */ /* RID_ID */ OBJECTNAME, /* RID_AT_ENCODE */ ENCODE, *************** static const short rid_to_yy[RID_MAX] = *** 4187,4202 **** /* RID_AT_IMPLEMENTATION */ IMPLEMENTATION }; - static void init_reswords () { unsigned int i; tree id; ! int mask = ((doing_objc_thang ? 0 : D_OBJC) ! | (flag_isoc99 ? 0 : D_C89) | (flag_traditional ? D_TRAD : 0) ! | (flag_no_asm ? (flag_isoc99 ? D_EXT : D_EXT|D_EXT89) : 0)); /* It is not necessary to register ridpointers as a GC root, because all the trees it points to are permanently interned in the --- 4820,4836 ---- /* RID_AT_IMPLEMENTATION */ IMPLEMENTATION }; static void init_reswords () { unsigned int i; tree id; ! int mask = (flag_isoc99 ? 0 : D_C89) | (flag_traditional ? D_TRAD : 0) ! | (flag_no_asm ? (flag_isoc99 ? D_EXT : D_EXT|D_EXT89) : 0); ! ! if (c_language != clk_objective_c) ! mask |= D_OBJC; /* It is not necessary to register ridpointers as a GC root, because all the trees it points to are permanently interned in the *************** init_reswords () *** 4213,4245 **** C_RID_CODE (id) = reswords[i].rid; C_IS_RESERVED_WORD (id) = 1; ridpointers [(int) reswords[i].rid] = id; - } } - const char * - init_parse (filename) - const char *filename; - { - add_c_tree_codes (); - - /* Make identifier nodes long enough for the language-specific slots. */ - set_identifier_size (sizeof (struct lang_identifier)); - - init_reswords (); - init_pragma (); - - return init_c_lex (filename); - } - - void - finish_parse () - { - cpp_finish (parse_in); - /* Call to cpp_destroy () omitted for performance reasons. */ - errorcount += cpp_errors (parse_in); - } - #define NAME(type) cpp_type2name (type) static void --- 4847,4855 ---- *************** yyerror (msgid) *** 4253,4259 **** else if (last_token == CPP_CHAR || last_token == CPP_WCHAR) { unsigned int val = TREE_INT_CST_LOW (yylval.ttype); ! const char *ell = (last_token == CPP_CHAR) ? "" : "L"; if (val <= UCHAR_MAX && ISGRAPH (val)) error ("%s before %s'%c'", string, ell, val); else --- 4863,4869 ---- else if (last_token == CPP_CHAR || last_token == CPP_WCHAR) { unsigned int val = TREE_INT_CST_LOW (yylval.ttype); ! const char *const ell = (last_token == CPP_CHAR) ? "" : "L"; if (val <= UCHAR_MAX && ISGRAPH (val)) error ("%s before %s'%c'", string, ell, val); else *************** yyerror (msgid) *** 4262,4270 **** else if (last_token == CPP_STRING || last_token == CPP_WSTRING) error ("%s before string constant", string); ! else if (last_token == CPP_NUMBER ! || last_token == CPP_INT ! || last_token == CPP_FLOAT) error ("%s before numeric constant", string); else if (last_token == CPP_NAME) error ("%s before \"%s\"", string, IDENTIFIER_POINTER (yylval.ttype)); --- 4872,4878 ---- else if (last_token == CPP_STRING || last_token == CPP_WSTRING) error ("%s before string constant", string); ! else if (last_token == CPP_NUMBER) error ("%s before numeric constant", string); else if (last_token == CPP_NAME) error ("%s before \"%s\"", string, IDENTIFIER_POINTER (yylval.ttype)); *************** static int *** 4276,4288 **** yylexname () { tree decl; ! if (C_IS_RESERVED_WORD (yylval.ttype)) { enum rid rid_code = C_RID_CODE (yylval.ttype); ! /* Return the canonical spelling for this keyword. */ ! yylval.ttype = ridpointers[(int) rid_code]; ! return rid_to_yy[(int) rid_code]; } decl = lookup_name (yylval.ttype); --- 4884,4913 ---- yylexname () { tree decl; ! ! if (C_IS_RESERVED_WORD (yylval.ttype)) { enum rid rid_code = C_RID_CODE (yylval.ttype); ! ! { ! int yycode = rid_to_yy[(int) rid_code]; ! if (yycode == STRING_FUNC_NAME) ! { ! /* __FUNCTION__ and __PRETTY_FUNCTION__ get converted ! to string constants. */ ! const char *name = fname_string (rid_code); ! ! yylval.ttype = build_string (strlen (name) + 1, name); ! C_ARTIFICIAL_STRING_P (yylval.ttype) = 1; ! last_token = CPP_STRING; /* so yyerror won't choke */ ! return STRING; ! } ! ! /* Return the canonical spelling for this keyword. */ ! yylval.ttype = ridpointers[(int) rid_code]; ! return yycode; ! } } decl = lookup_name (yylval.ttype); *************** yylexname () *** 4290,4325 **** { if (TREE_CODE (decl) == TYPE_DECL) return TYPENAME; - /* A user-invisible read-only initialized variable - should be replaced by its value. - We handle only strings since that's the only case used in C. */ - else if (TREE_CODE (decl) == VAR_DECL - && DECL_IGNORED_P (decl) - && TREE_READONLY (decl) - && DECL_INITIAL (decl) != 0 - && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST) - { - tree stringval = DECL_INITIAL (decl), str; - - /* Copy the string value so that we won't clobber anything - if we put something in the TREE_CHAIN of this one. */ - str = build_string (TREE_STRING_LENGTH (stringval), - TREE_STRING_POINTER (stringval)); - if (yylval.ttype != func_id_node) - C_ARTIFICIAL_STRING_P (str) = 1; - yylval.ttype = str; - return STRING; - } - } - else if (doing_objc_thang) - { - tree objc_interface_decl = is_class_name (yylval.ttype); - - if (objc_interface_decl) - { - yylval.ttype = objc_interface_decl; - return CLASSNAME; - } } return IDENTIFIER; --- 4915,4920 ---- *************** _yylex () *** 4352,4361 **** case CPP_AND_AND: return ANDAND; case CPP_OR_OR: return OROR; case CPP_QUERY: return '?'; - case CPP_COLON: return ':'; - case CPP_COMMA: return ','; case CPP_OPEN_PAREN: return '('; - case CPP_CLOSE_PAREN: return ')'; case CPP_EQ_EQ: yylval.code = EQ_EXPR; return EQCOMPARE; case CPP_NOT_EQ: yylval.code = NE_EXPR; return EQCOMPARE; case CPP_GREATER_EQ:yylval.code = GE_EXPR; return ARITHCOMPARE; --- 4947,4953 ---- *************** _yylex () *** 4376,4382 **** case CPP_CLOSE_SQUARE: return ']'; case CPP_OPEN_BRACE: return '{'; case CPP_CLOSE_BRACE: return '}'; - case CPP_SEMICOLON: return ';'; case CPP_ELLIPSIS: return ELLIPSIS; case CPP_PLUS_PLUS: return PLUSPLUS; --- 4968,4973 ---- *************** _yylex () *** 4384,4399 **** case CPP_DEREF: return POINTSAT; case CPP_DOT: return '.'; case CPP_EOF: ! if (cpp_pop_buffer (parse_in) == 0) ! return 0; ! goto get_next; case CPP_NAME: return yylexname (); - case CPP_INT: - case CPP_FLOAT: case CPP_NUMBER: case CPP_CHAR: case CPP_WCHAR: --- 4975,4993 ---- case CPP_DEREF: return POINTSAT; case CPP_DOT: return '.'; + /* The following tokens may affect the interpretation of any + identifiers following, if doing Objective-C. */ + case CPP_COLON: OBJC_NEED_RAW_IDENTIFIER (0); return ':'; + case CPP_COMMA: OBJC_NEED_RAW_IDENTIFIER (0); return ','; + case CPP_CLOSE_PAREN: OBJC_NEED_RAW_IDENTIFIER (0); return ')'; + case CPP_SEMICOLON: OBJC_NEED_RAW_IDENTIFIER (0); return ';'; + case CPP_EOF: ! return 0; case CPP_NAME: return yylexname (); case CPP_NUMBER: case CPP_CHAR: case CPP_WCHAR: *************** _yylex () *** 4403,4411 **** case CPP_WSTRING: return STRING; ! /* This token is Objective-C specific. It gives the next ! token special significance. */ case CPP_ATSIGN: /* These tokens are C++ specific (and will not be generated in C mode, but let's be cautious). */ case CPP_SCOPE: --- 4997,5006 ---- case CPP_WSTRING: return STRING; ! /* This token is Objective-C specific. It gives the next token ! special significance. */ case CPP_ATSIGN: + /* These tokens are C++ specific (and will not be generated in C mode, but let's be cautious). */ case CPP_SCOPE: *************** yylex() *** 4442,4454 **** in order to build the compiler. */ void ! set_yydebug (value) int value; { #if YYDEBUG != 0 yydebug = value; #else ! warning ("YYDEBUG not defined."); #endif } --- 5037,5049 ---- in order to build the compiler. */ void ! c_set_yydebug (value) int value; { #if YYDEBUG != 0 yydebug = value; #else ! warning ("YYDEBUG not defined"); #endif } *************** yyprint (file, yychar, yyl) *** 4507,4521 **** /* Return something to represent absolute declarators containing a *. TARGET is the absolute declarator that the * contains. ! TYPE_QUALS is a list of modifiers such as const or volatile ! to apply to the pointer type, represented as identifiers. ! We return an INDIRECT_REF whose "contents" are TARGET ! and whose type is the modifier list. */ tree ! make_pointer_declarator (type_quals, target) ! tree type_quals, target; { ! return build1 (INDIRECT_REF, type_quals, target); } --- 5102,5122 ---- /* Return something to represent absolute declarators containing a *. TARGET is the absolute declarator that the * contains. ! TYPE_QUALS_ATTRS is a list of modifiers such as const or volatile ! to apply to the pointer type, represented as identifiers, possible mixed ! with attributes. ! We return an INDIRECT_REF whose "contents" are TARGET (inside a TREE_LIST, ! if attributes are present) and whose type is the modifier list. */ tree ! make_pointer_declarator (type_quals_attrs, target) ! tree type_quals_attrs, target; { ! tree quals, attrs; ! tree itarget = target; ! split_specs_attrs (type_quals_attrs, &quals, &attrs); ! if (attrs != NULL_TREE) ! itarget = tree_cons (attrs, target, NULL_TREE); ! return build1 (INDIRECT_REF, quals, itarget); } diff -Nrc3pad gcc-3.0.4/gcc/c-parse.in gcc-3.1/gcc/c-parse.in *** gcc-3.0.4/gcc/c-parse.in Fri Feb 1 00:31:53 2002 --- gcc-3.1/gcc/c-parse.in Tue Apr 16 22:05:54 2002 *************** *** 2,23 **** Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* This file defines the grammar of C and that of Objective C. ifobjc ... end ifobjc conditionals contain code for Objective C only. --- 2,23 ---- Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* This file defines the grammar of C and that of Objective C. ifobjc ... end ifobjc conditionals contain code for Objective C only. *************** Boston, MA 02111-1307, USA. */ *** 29,44 **** written by AT&T, but I have never seen it. */ ifobjc ! %expect 74 end ifobjc ifc ! %expect 53 end ifc %{ #include "config.h" #include "system.h" - #include #include "tree.h" #include "input.h" #include "cpplib.h" --- 29,43 ---- written by AT&T, but I have never seen it. */ ifobjc ! %expect 31 /* shift/reduce conflicts, and 1 reduce/reduce conflict. */ end ifobjc ifc ! %expect 10 /* shift/reduce conflicts, and no reduce/reduce conflicts. */ end ifc %{ #include "config.h" #include "system.h" #include "tree.h" #include "input.h" #include "cpplib.h" *************** ifobjc *** 60,74 **** #include "objc-act.h" end ifobjc - /* Since parsers are distinct for each language, put the language string - definition here. */ - ifobjc - const char * const language_string = "GNU Objective-C"; - end ifobjc - ifc - const char * const language_string = "GNU C"; - end ifc - /* Like YYERROR but do call yyerror. */ #define YYERROR1 { yyerror ("syntax error"); YYERROR; } --- 59,64 ---- *************** end ifc *** 121,129 **** %token SIZEOF ENUM STRUCT UNION IF ELSE WHILE DO FOR SWITCH CASE DEFAULT %token BREAK CONTINUE RETURN GOTO ASM_KEYWORD TYPEOF ALIGNOF %token ATTRIBUTE EXTENSION LABEL ! %token REALPART IMAGPART VA_ARG %token PTR_VALUE PTR_BASE PTR_EXTENT /* Add precedence rules to solve dangling else s/r conflict */ %nonassoc IF %nonassoc ELSE --- 111,122 ---- %token SIZEOF ENUM STRUCT UNION IF ELSE WHILE DO FOR SWITCH CASE DEFAULT %token BREAK CONTINUE RETURN GOTO ASM_KEYWORD TYPEOF ALIGNOF %token ATTRIBUTE EXTENSION LABEL ! %token REALPART IMAGPART VA_ARG CHOOSE_EXPR TYPES_COMPATIBLE_P %token PTR_VALUE PTR_BASE PTR_EXTENT + /* function name can be a string const or a var decl. */ + %token STRING_FUNC_NAME VAR_FUNC_NAME + /* Add precedence rules to solve dangling else s/r conflict */ %nonassoc IF %nonassoc ELSE *************** end ifc *** 153,175 **** %token INTERFACE IMPLEMENTATION END SELECTOR DEFS ENCODE %token CLASSNAME PUBLIC PRIVATE PROTECTED PROTOCOL OBJECTNAME CLASS ALIAS - /* Objective-C string constants in raw form. - yylval is an STRING_CST node. */ - %token OBJC_STRING - - %type unop %type ENUM STRUCT UNION IF ELSE WHILE DO FOR SWITCH CASE DEFAULT %type BREAK CONTINUE RETURN GOTO ASM_KEYWORD SIZEOF TYPEOF ALIGNOF %type identifier IDENTIFIER TYPENAME CONSTANT expr nonnull_exprlist exprlist %type expr_no_commas cast_expr unary_expr primary string STRING ! %type typed_declspecs reserved_declspecs ! %type typed_typespecs reserved_typespecquals ! %type declmods typespec typespecqual_reserved ! %type typed_declspecs_no_prefix_attr reserved_declspecs_no_prefix_attr ! %type declmods_no_prefix_attr ! %type SCSPEC TYPESPEC TYPE_QUAL nonempty_type_quals maybe_type_qual %type initdecls notype_initdecls initdcl notype_initdcl %type init maybeasm %type asm_operands nonnull_asm_operands asm_operand asm_clobbers --- 146,173 ---- %token INTERFACE IMPLEMENTATION END SELECTOR DEFS ENCODE %token CLASSNAME PUBLIC PRIVATE PROTECTED PROTOCOL OBJECTNAME CLASS ALIAS %type unop %type ENUM STRUCT UNION IF ELSE WHILE DO FOR SWITCH CASE DEFAULT %type BREAK CONTINUE RETURN GOTO ASM_KEYWORD SIZEOF TYPEOF ALIGNOF %type identifier IDENTIFIER TYPENAME CONSTANT expr nonnull_exprlist exprlist %type expr_no_commas cast_expr unary_expr primary string STRING ! %type declspecs_nosc_nots_nosa_noea declspecs_nosc_nots_nosa_ea ! %type declspecs_nosc_nots_sa_noea declspecs_nosc_nots_sa_ea ! %type declspecs_nosc_ts_nosa_noea declspecs_nosc_ts_nosa_ea ! %type declspecs_nosc_ts_sa_noea declspecs_nosc_ts_sa_ea ! %type declspecs_sc_nots_nosa_noea declspecs_sc_nots_nosa_ea ! %type declspecs_sc_nots_sa_noea declspecs_sc_nots_sa_ea ! %type declspecs_sc_ts_nosa_noea declspecs_sc_ts_nosa_ea ! %type declspecs_sc_ts_sa_noea declspecs_sc_ts_sa_ea ! %type declspecs_ts declspecs_nots ! %type declspecs_ts_nosa declspecs_nots_nosa ! %type declspecs_nosc_ts declspecs_nosc_nots declspecs_nosc declspecs ! %type maybe_type_quals_attrs typespec_nonattr typespec_attr ! %type typespec_reserved_nonattr typespec_reserved_attr ! %type typespec_nonreserved_nonattr ! ! %type SCSPEC TYPESPEC TYPE_QUAL maybe_type_qual %type initdecls notype_initdecls initdcl notype_initdcl %type init maybeasm %type asm_operands nonnull_asm_operands asm_operand asm_clobbers *************** end ifc *** 183,201 **** %type declarator %type notype_declarator after_type_declarator %type parm_declarator ! %type structsp component_decl_list component_decl_list2 ! %type component_decl components component_declarator %type enumlist enumerator %type struct_head union_head enum_head ! %type typename absdcl absdcl1 type_quals ! %type xexpr parms parm identifiers %type parmlist parmlist_1 parmlist_2 %type parmlist_or_identifiers parmlist_or_identifiers_1 %type identifiers_or_typenames ! %type setspecs %type save_filename %type save_lineno --- 181,204 ---- %type declarator %type notype_declarator after_type_declarator %type parm_declarator + %type parm_declarator_starttypename parm_declarator_nostarttypename + %type array_declarator ! %type structsp_attr structsp_nonattr ! %type component_decl_list component_decl_list2 ! %type component_decl components components_notype component_declarator ! %type component_notype_declarator %type enumlist enumerator %type struct_head union_head enum_head ! %type typename absdcl absdcl1 absdcl1_ea absdcl1_noea ! %type direct_absdcl1 absdcl_maybe_attribute ! %type xexpr parms parm firstparm identifiers %type parmlist parmlist_1 parmlist_2 %type parmlist_or_identifiers parmlist_or_identifiers_1 %type identifiers_or_typenames ! %type setspecs setspecs_fp %type save_filename %type save_lineno *************** ifobjc *** 211,217 **** %type selectorarg keywordnamelist keywordname objcencodeexpr %type objc_string non_empty_protocolrefs protocolrefs identifier_list objcprotocolexpr ! %type CLASSNAME OBJC_STRING OBJECTNAME end ifobjc %{ --- 214,220 ---- %type selectorarg keywordnamelist keywordname objcencodeexpr %type objc_string non_empty_protocolrefs protocolrefs identifier_list objcprotocolexpr ! %type CLASSNAME OBJECTNAME end ifobjc %{ *************** static int if_stmt_line; *** 229,262 **** static tree current_declspecs = NULL_TREE; static tree prefix_attributes = NULL_TREE; ! /* Stack of saved values of current_declspecs and prefix_attributes. */ static tree declspec_stack; /* For __extension__, save/restore the warning flags which are controlled by __extension__. */ ! #define SAVE_WARN_FLAGS() \ ! size_int (pedantic | (warn_pointer_arith << 1)) ! #define RESTORE_WARN_FLAGS(tval) \ ! do { \ ! int val = tree_low_cst (tval, 0); \ ! pedantic = val & 1; \ ! warn_pointer_arith = (val >> 1) & 1; \ } while (0) ifobjc ! /* Objective-C specific information */ ! tree objc_interface_context; ! tree objc_implementation_context; ! tree objc_method_context; ! tree objc_ivar_chain; ! tree objc_ivar_context; ! enum tree_code objc_inherit_code; ! int objc_receiver_context; ! int objc_public_flag; end ifobjc /* Tell yyparse how to print a token's value, if yydebug is set. */ #define YYPRINT(FILE,YYCHAR,YYLVAL) yyprint(FILE,YYCHAR,YYLVAL) --- 232,297 ---- static tree current_declspecs = NULL_TREE; static tree prefix_attributes = NULL_TREE; ! /* List of all the attributes applying to the identifier currently being ! declared; includes prefix_attributes and possibly some more attributes ! just after a comma. */ ! static tree all_prefix_attributes = NULL_TREE; ! ! /* Stack of saved values of current_declspecs, prefix_attributes and ! all_prefix_attributes. */ static tree declspec_stack; + /* PUSH_DECLSPEC_STACK is called from setspecs; POP_DECLSPEC_STACK + should be called from the productions making use of setspecs. */ + #define PUSH_DECLSPEC_STACK \ + do { \ + declspec_stack = tree_cons (build_tree_list (prefix_attributes, \ + all_prefix_attributes), \ + current_declspecs, \ + declspec_stack); \ + } while (0) + + #define POP_DECLSPEC_STACK \ + do { \ + current_declspecs = TREE_VALUE (declspec_stack); \ + prefix_attributes = TREE_PURPOSE (TREE_PURPOSE (declspec_stack)); \ + all_prefix_attributes = TREE_VALUE (TREE_PURPOSE (declspec_stack)); \ + declspec_stack = TREE_CHAIN (declspec_stack); \ + } while (0) + /* For __extension__, save/restore the warning flags which are controlled by __extension__. */ ! #define SAVE_WARN_FLAGS() \ ! size_int (pedantic \ ! | (warn_pointer_arith << 1) \ ! | (warn_traditional << 2)) ! ! #define RESTORE_WARN_FLAGS(tval) \ ! do { \ ! int val = tree_low_cst (tval, 0); \ ! pedantic = val & 1; \ ! warn_pointer_arith = (val >> 1) & 1; \ ! warn_traditional = (val >> 2) & 1; \ } while (0) ifobjc ! /* Objective-C specific parser/lexer information */ ! static enum tree_code objc_inherit_code; ! static int objc_pq_context = 0, objc_public_flag = 0; + /* The following flag is needed to contextualize ObjC lexical analysis. + In some cases (e.g., 'int NSObject;'), it is undesirable to bind + an identifier to an ObjC class, even if a class with that name + exists. */ + static int objc_need_raw_identifier; + #define OBJC_NEED_RAW_IDENTIFIER(VAL) objc_need_raw_identifier = VAL end ifobjc + ifc + #define OBJC_NEED_RAW_IDENTIFIER(VAL) /* nothing */ + end ifc + /* Tell yyparse how to print a token's value, if yydebug is set. */ #define YYPRINT(FILE,YYCHAR,YYLVAL) yyprint(FILE,YYCHAR,YYLVAL) *************** static void init_reswords PARAMS ((void) *** 272,287 **** void c_parse_init () { ggc_add_tree_root (&declspec_stack, 1); ggc_add_tree_root (¤t_declspecs, 1); ggc_add_tree_root (&prefix_attributes, 1); ! ifobjc ! ggc_add_tree_root (&objc_interface_context, 1); ! ggc_add_tree_root (&objc_implementation_context, 1); ! ggc_add_tree_root (&objc_method_context, 1); ! ggc_add_tree_root (&objc_ivar_chain, 1); ! ggc_add_tree_root (&objc_ivar_context, 1); ! end ifobjc } %} --- 307,318 ---- void c_parse_init () { + init_reswords (); + ggc_add_tree_root (&declspec_stack, 1); ggc_add_tree_root (¤t_declspecs, 1); ggc_add_tree_root (&prefix_attributes, 1); ! ggc_add_tree_root (&all_prefix_attributes, 1); } %} *************** program: /* empty */ *** 298,304 **** get us back to the global binding level. */ while (! global_bindings_p ()) poplevel (0, 0, 0); ! finish_file (); } ; --- 329,338 ---- get us back to the global binding level. */ while (! global_bindings_p ()) poplevel (0, 0, 0); ! ifc ! finish_fname_decls (); ! end ifc ! finish_file (); } ; *************** datadef: *** 336,355 **** else if (!flag_traditional) warning ("data definition has no type or storage class"); ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | declmods setspecs notype_initdecls ';' ! { current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | typed_declspecs setspecs initdecls ';' ! { current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | declmods ';' ! { pedwarn ("empty declaration"); } ! | typed_declspecs ';' { shadow_tag ($1); } | error ';' | error '}' --- 370,381 ---- else if (!flag_traditional) warning ("data definition has no type or storage class"); ! POP_DECLSPEC_STACK; } ! | declspecs_nots setspecs notype_initdecls ';' ! { POP_DECLSPEC_STACK; } ! | declspecs_ts setspecs initdecls ';' ! { POP_DECLSPEC_STACK; } ! | declspecs ';' { shadow_tag ($1); } | error ';' | error '}' *************** datadef: *** 359,367 **** ; fndef: ! typed_declspecs setspecs declarator { if (! start_function (current_declspecs, $3, ! prefix_attributes, NULL_TREE)) YYERROR1; } old_style_parm_decls --- 385,393 ---- ; fndef: ! declspecs_ts setspecs declarator { if (! start_function (current_declspecs, $3, ! all_prefix_attributes)) YYERROR1; } old_style_parm_decls *************** fndef: *** 369,385 **** save_filename save_lineno compstmt_or_error { DECL_SOURCE_FILE (current_function_decl) = $7; DECL_SOURCE_LINE (current_function_decl) = $8; ! finish_function (0); ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | typed_declspecs setspecs declarator error ! { current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | declmods setspecs notype_declarator { if (! start_function (current_declspecs, $3, ! prefix_attributes, NULL_TREE)) YYERROR1; } old_style_parm_decls --- 395,407 ---- save_filename save_lineno compstmt_or_error { DECL_SOURCE_FILE (current_function_decl) = $7; DECL_SOURCE_LINE (current_function_decl) = $8; ! finish_function (0, 1); ! POP_DECLSPEC_STACK; } ! | declspecs_ts setspecs declarator error ! { POP_DECLSPEC_STACK; } ! | declspecs_nots setspecs notype_declarator { if (! start_function (current_declspecs, $3, ! all_prefix_attributes)) YYERROR1; } old_style_parm_decls *************** fndef: *** 387,403 **** save_filename save_lineno compstmt_or_error { DECL_SOURCE_FILE (current_function_decl) = $7; DECL_SOURCE_LINE (current_function_decl) = $8; ! finish_function (0); ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | declmods setspecs notype_declarator error ! { current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } | setspecs notype_declarator { if (! start_function (NULL_TREE, $2, ! prefix_attributes, NULL_TREE)) YYERROR1; } old_style_parm_decls --- 409,421 ---- save_filename save_lineno compstmt_or_error { DECL_SOURCE_FILE (current_function_decl) = $7; DECL_SOURCE_LINE (current_function_decl) = $8; ! finish_function (0, 1); ! POP_DECLSPEC_STACK; } ! | declspecs_nots setspecs notype_declarator error ! { POP_DECLSPEC_STACK; } | setspecs notype_declarator { if (! start_function (NULL_TREE, $2, ! all_prefix_attributes)) YYERROR1; } old_style_parm_decls *************** fndef: *** 405,418 **** save_filename save_lineno compstmt_or_error { DECL_SOURCE_FILE (current_function_decl) = $6; DECL_SOURCE_LINE (current_function_decl) = $7; ! finish_function (0); ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } | setspecs notype_declarator error ! { current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ; identifier: --- 423,432 ---- save_filename save_lineno compstmt_or_error { DECL_SOURCE_FILE (current_function_decl) = $6; DECL_SOURCE_LINE (current_function_decl) = $7; ! finish_function (0, 1); ! POP_DECLSPEC_STACK; } | setspecs notype_declarator error ! { POP_DECLSPEC_STACK; } ; identifier: *************** identifier: *** 420,426 **** | TYPENAME ifobjc | OBJECTNAME ! | CLASSNAME end ifobjc ; --- 434,440 ---- | TYPENAME ifobjc | OBJECTNAME ! | CLASSNAME end ifobjc ; *************** unary_expr: *** 475,492 **** overflow_warning ($$); } /* Refer to the address of a label as a pointer. */ | ANDAND identifier ! { tree label = lookup_label ($2); ! if (pedantic) ! pedwarn ("ISO C forbids `&&'"); ! if (label == 0) ! $$ = null_pointer_node; ! else ! { ! TREE_USED (label) = 1; ! $$ = build1 (ADDR_EXPR, ptr_type_node, label); ! TREE_CONSTANT ($$) = 1; ! } ! } /* This seems to be impossible on some machines, so let's turn it off. You can use __builtin_next_arg to find the anonymous stack args. | '&' ELLIPSIS --- 489,495 ---- overflow_warning ($$); } /* Refer to the address of a label as a pointer. */ | ANDAND identifier ! { $$ = finish_label_address_expr ($2); } /* This seems to be impossible on some machines, so let's turn it off. You can use __builtin_next_arg to find the anonymous stack args. | '&' ELLIPSIS *************** alignof: *** 534,548 **** cast_expr: unary_expr | '(' typename ')' cast_expr %prec UNARY ! { tree type; ! int SAVED_warn_strict_prototypes = warn_strict_prototypes; ! /* This avoids warnings about unprototyped casts on ! integers. E.g. "#define SIG_DFL (void(*)())0". */ ! if (TREE_CODE ($4) == INTEGER_CST) ! warn_strict_prototypes = 0; ! type = groktypename ($2); ! warn_strict_prototypes = SAVED_warn_strict_prototypes; ! $$ = build_c_cast (type, $4); } ; expr_no_commas: --- 537,543 ---- cast_expr: unary_expr | '(' typename ')' cast_expr %prec UNARY ! { $$ = c_cast_expr ($2, $4); } ; expr_no_commas: *************** expr_no_commas: *** 606,613 **** { char class; $$ = build_modify_expr ($1, NOP_EXPR, $3); class = TREE_CODE_CLASS (TREE_CODE ($$)); ! if (class == 'e' || class == '1' ! || class == '2' || class == '<') C_SET_EXP_ORIGINAL_CODE ($$, MODIFY_EXPR); } | expr_no_commas ASSIGN expr_no_commas --- 601,607 ---- { char class; $$ = build_modify_expr ($1, NOP_EXPR, $3); class = TREE_CODE_CLASS (TREE_CODE ($$)); ! if (IS_EXPR_CODE_CLASS (class)) C_SET_EXP_ORIGINAL_CODE ($$, MODIFY_EXPR); } | expr_no_commas ASSIGN expr_no_commas *************** expr_no_commas: *** 615,622 **** $$ = build_modify_expr ($1, $2, $3); /* This inhibits warnings in truthvalue_conversion. */ class = TREE_CODE_CLASS (TREE_CODE ($$)); ! if (class == 'e' || class == '1' ! || class == '2' || class == '<') C_SET_EXP_ORIGINAL_CODE ($$, ERROR_MARK); } ; --- 609,615 ---- $$ = build_modify_expr ($1, $2, $3); /* This inhibits warnings in truthvalue_conversion. */ class = TREE_CODE_CLASS (TREE_CODE ($$)); ! if (IS_EXPR_CODE_CLASS (class)) C_SET_EXP_ORIGINAL_CODE ($$, ERROR_MARK); } ; *************** primary: *** 631,669 **** | CONSTANT | string { $$ = combine_strings ($1); } | '(' typename ')' '{' { start_init (NULL_TREE, NULL, 0); $2 = groktypename ($2); really_start_incremental_init ($2); } initlist_maybe_comma '}' %prec UNARY ! { const char *name; ! tree result = pop_init_level (0); tree type = $2; finish_init (); if (pedantic && ! flag_isoc99) pedwarn ("ISO C89 forbids compound literals"); ! if (TYPE_NAME (type) != 0) ! { ! if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE) ! name = IDENTIFIER_POINTER (TYPE_NAME (type)); ! else ! name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))); ! } ! else ! name = ""; ! $$ = result; ! if (TREE_CODE (type) == ARRAY_TYPE && !COMPLETE_TYPE_P (type)) ! { ! int failure = complete_array_type (type, $$, 1); ! if (failure) ! abort (); ! } } | '(' expr ')' { char class = TREE_CODE_CLASS (TREE_CODE ($2)); ! if (class == 'e' || class == '1' ! || class == '2' || class == '<') C_SET_EXP_ORIGINAL_CODE ($2, ERROR_MARK); $$ = $2; } | '(' error ')' --- 624,647 ---- | CONSTANT | string { $$ = combine_strings ($1); } + | VAR_FUNC_NAME + { $$ = fname_decl (C_RID_CODE ($$), $$); } | '(' typename ')' '{' { start_init (NULL_TREE, NULL, 0); $2 = groktypename ($2); really_start_incremental_init ($2); } initlist_maybe_comma '}' %prec UNARY ! { tree constructor = pop_init_level (0); tree type = $2; finish_init (); if (pedantic && ! flag_isoc99) pedwarn ("ISO C89 forbids compound literals"); ! $$ = build_compound_literal (type, constructor); } | '(' expr ')' { char class = TREE_CODE_CLASS (TREE_CODE ($2)); ! if (IS_EXPR_CODE_CLASS (class)) C_SET_EXP_ORIGINAL_CODE ($2, ERROR_MARK); $$ = $2; } | '(' error ')' *************** primary: *** 695,731 **** { $$ = build_function_call ($1, $3); } | VA_ARG '(' expr_no_commas ',' typename ')' { $$ = build_va_arg ($3, groktypename ($5)); } | primary '[' expr ']' %prec '.' { $$ = build_array_ref ($1, $3); } | primary '.' identifier { ifobjc ! if (doing_objc_thang) ! { ! if (is_public ($1, $3)) ! $$ = build_component_ref ($1, $3); ! else ! $$ = error_mark_node; ! } ! else end ifobjc ! $$ = build_component_ref ($1, $3); } | primary POINTSAT identifier { tree expr = build_indirect_ref ($1, "->"); ifobjc ! if (doing_objc_thang) ! { ! if (is_public (expr, $3)) ! $$ = build_component_ref (expr, $3); ! else $$ = error_mark_node; ! } ! else end ifobjc ! $$ = build_component_ref (expr, $3); } | primary PLUSPLUS { $$ = build_unary_op (POSTINCREMENT_EXPR, $1, 0); } --- 673,720 ---- { $$ = build_function_call ($1, $3); } | VA_ARG '(' expr_no_commas ',' typename ')' { $$ = build_va_arg ($3, groktypename ($5)); } + + | CHOOSE_EXPR '(' expr_no_commas ',' expr_no_commas ',' expr_no_commas ')' + { + tree c; + + c = fold ($3); + STRIP_NOPS (c); + if (TREE_CODE (c) != INTEGER_CST) + error ("first argument to __builtin_choose_expr not a constant"); + $$ = integer_zerop (c) ? $7 : $5; + } + | TYPES_COMPATIBLE_P '(' typename ',' typename ')' + { + tree e1, e2; + + e1 = TYPE_MAIN_VARIANT (groktypename ($3)); + e2 = TYPE_MAIN_VARIANT (groktypename ($5)); + + $$ = comptypes (e1, e2) + ? build_int_2 (1, 0) : build_int_2 (0, 0); + } | primary '[' expr ']' %prec '.' { $$ = build_array_ref ($1, $3); } | primary '.' identifier { ifobjc ! if (!is_public ($1, $3)) ! $$ = error_mark_node; ! else end ifobjc ! $$ = build_component_ref ($1, $3); } | primary POINTSAT identifier { tree expr = build_indirect_ref ($1, "->"); ifobjc ! if (!is_public (expr, $3)) $$ = error_mark_node; ! else end ifobjc ! $$ = build_component_ref (expr, $3); } | primary PLUSPLUS { $$ = build_unary_op (POSTINCREMENT_EXPR, $1, 0); } *************** ifobjc *** 772,780 **** /* Produces an STRING_CST with perhaps more STRING_CSTs chained onto it, which is to be read as an ObjC string object. */ objc_string: ! OBJC_STRING ! | objc_string OBJC_STRING ! { $$ = chainon ($1, $2); } ; end ifobjc --- 761,770 ---- /* Produces an STRING_CST with perhaps more STRING_CSTs chained onto it, which is to be read as an ObjC string object. */ objc_string: ! '@' STRING ! { $$ = $2; } ! | objc_string '@' STRING ! { $$ = chainon ($1, $3); } ; end ifobjc *************** datadecls: *** 808,825 **** attribute suffix, or function defn with attribute prefix on first old style parm. */ datadecl: ! typed_declspecs_no_prefix_attr setspecs initdecls ';' ! { current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | declmods_no_prefix_attr setspecs notype_initdecls ';' ! { current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | typed_declspecs_no_prefix_attr ';' { shadow_tag_warned ($1, 1); pedwarn ("empty declaration"); } ! | declmods_no_prefix_attr ';' { pedwarn ("empty declaration"); } ; --- 798,811 ---- attribute suffix, or function defn with attribute prefix on first old style parm. */ datadecl: ! declspecs_ts_nosa setspecs initdecls ';' ! { POP_DECLSPEC_STACK; } ! | declspecs_nots_nosa setspecs notype_initdecls ';' ! { POP_DECLSPEC_STACK; } ! | declspecs_ts_nosa ';' { shadow_tag_warned ($1, 1); pedwarn ("empty declaration"); } ! | declspecs_nots_nosa ';' { pedwarn ("empty declaration"); } ; *************** lineno_decl: *** 838,950 **** for the sake of parm declarations nested in function declarators. */ setspecs: /* empty */ { pending_xref_error (); ! declspec_stack = tree_cons (prefix_attributes, ! current_declspecs, ! declspec_stack); split_specs_attrs ($0, ! ¤t_declspecs, &prefix_attributes); } ; ! /* ??? Yuck. See after_type_declarator. */ ! setattrs: /* empty */ ! { prefix_attributes = chainon (prefix_attributes, $0); } ; decl: ! typed_declspecs setspecs initdecls ';' ! { current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | declmods setspecs notype_initdecls ';' ! { current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | typed_declspecs setspecs nested_function ! { current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | declmods setspecs notype_nested_function ! { current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | typed_declspecs ';' { shadow_tag ($1); } - | declmods ';' - { pedwarn ("empty declaration"); } | extension decl { RESTORE_WARN_FLAGS ($1); } ; /* Declspecs which contain at least one type specifier or typedef name. (Just `const' or `volatile' is not enough.) A typedef'd name following these is taken as a name to be declared. Declspecs have a non-NULL TREE_VALUE, attributes do not. */ ! typed_declspecs: ! typespec reserved_declspecs ! { $$ = tree_cons (NULL_TREE, $1, $2); } ! | declmods typespec reserved_declspecs ! { $$ = chainon ($3, tree_cons (NULL_TREE, $2, $1)); } ; ! reserved_declspecs: /* empty */ ! { $$ = NULL_TREE; } ! | reserved_declspecs typespecqual_reserved ! { $$ = tree_cons (NULL_TREE, $2, $1); } ! | reserved_declspecs SCSPEC ! { if (extra_warnings) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER ($2)); ! $$ = tree_cons (NULL_TREE, $2, $1); } ! | reserved_declspecs attributes ! { $$ = tree_cons ($2, NULL_TREE, $1); } ; ! typed_declspecs_no_prefix_attr: ! typespec reserved_declspecs_no_prefix_attr ! { $$ = tree_cons (NULL_TREE, $1, $2); } ! | declmods_no_prefix_attr typespec reserved_declspecs_no_prefix_attr ! { $$ = chainon ($3, tree_cons (NULL_TREE, $2, $1)); } ; ! reserved_declspecs_no_prefix_attr: ! /* empty */ ! { $$ = NULL_TREE; } ! | reserved_declspecs_no_prefix_attr typespecqual_reserved ! { $$ = tree_cons (NULL_TREE, $2, $1); } ! | reserved_declspecs_no_prefix_attr SCSPEC ! { if (extra_warnings) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER ($2)); ! $$ = tree_cons (NULL_TREE, $2, $1); } ; ! /* List of just storage classes, type modifiers, and prefix attributes. ! A declaration can start with just this, but then it cannot be used ! to redeclare a typedef-name. ! Declspecs have a non-NULL TREE_VALUE, attributes do not. */ ! declmods: ! declmods_no_prefix_attr ! { $$ = $1; } ! | attributes ! { $$ = tree_cons ($1, NULL_TREE, NULL_TREE); } ! | declmods declmods_no_prefix_attr ! { $$ = chainon ($2, $1); } ! | declmods attributes ! { $$ = tree_cons ($2, NULL_TREE, $1); } ; ! declmods_no_prefix_attr: ! TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $1, NULL_TREE); TREE_STATIC ($$) = 1; } ! | SCSPEC ! { $$ = tree_cons (NULL_TREE, $1, NULL_TREE); } ! | declmods_no_prefix_attr TYPE_QUAL { $$ = tree_cons (NULL_TREE, $2, $1); TREE_STATIC ($$) = 1; } ! | declmods_no_prefix_attr SCSPEC { if (extra_warnings && TREE_STATIC ($1)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER ($2)); --- 824,1211 ---- for the sake of parm declarations nested in function declarators. */ setspecs: /* empty */ { pending_xref_error (); ! PUSH_DECLSPEC_STACK; split_specs_attrs ($0, ! ¤t_declspecs, &prefix_attributes); ! all_prefix_attributes = prefix_attributes; } ; ! /* Possibly attributes after a comma, which should reset all_prefix_attributes ! to prefix_attributes with these ones chained on the front. */ ! maybe_resetattrs: ! maybe_attribute ! { all_prefix_attributes = chainon ($1, prefix_attributes); } ; decl: ! declspecs_ts setspecs initdecls ';' ! { POP_DECLSPEC_STACK; } ! | declspecs_nots setspecs notype_initdecls ';' ! { POP_DECLSPEC_STACK; } ! | declspecs_ts setspecs nested_function ! { POP_DECLSPEC_STACK; } ! | declspecs_nots setspecs notype_nested_function ! { POP_DECLSPEC_STACK; } ! | declspecs ';' { shadow_tag ($1); } | extension decl { RESTORE_WARN_FLAGS ($1); } ; + /* A list of declaration specifiers. These are: + + - Storage class specifiers (SCSPEC), which for GCC currently include + function specifiers ("inline"). + + - Type specifiers (typespec_*). + + - Type qualifiers (TYPE_QUAL). + + - Attribute specifier lists (attributes). + + These are stored as a TREE_LIST; the head of the list is the last + item in the specifier list. Each entry in the list has either a + TREE_PURPOSE that is an attribute specifier list, or a TREE_VALUE that + is a single other specifier or qualifier; and a TREE_CHAIN that is the + rest of the list. TREE_STATIC is set on the list if something other + than a storage class specifier or attribute has been seen; this is used + to warn for the obsolescent usage of storage class specifiers other than + at the start of the list. (Doing this properly would require function + specifiers to be handled separately from storage class specifiers.) + + The various cases below are classified according to: + + (a) Whether a storage class specifier is included or not; some + places in the grammar disallow storage class specifiers (_sc or _nosc). + + (b) Whether a type specifier has been seen; after a type specifier, + a typedef name is an identifier to redeclare (_ts or _nots). + + (c) Whether the list starts with an attribute; in certain places, + the grammar requires specifiers that don't start with an attribute + (_sa or _nosa). + + (d) Whether the list ends with an attribute (or a specifier such that + any following attribute would have been parsed as part of that specifier); + this avoids shift-reduce conflicts in the parsing of attributes + (_ea or _noea). + + TODO: + + (i) Distinguish between function specifiers and storage class specifiers, + at least for the purpose of warnings about obsolescent usage. + + (ii) Halve the number of productions here by eliminating the _sc/_nosc + distinction and instead checking where required that storage class + specifiers aren't present. */ + /* Declspecs which contain at least one type specifier or typedef name. (Just `const' or `volatile' is not enough.) A typedef'd name following these is taken as a name to be declared. Declspecs have a non-NULL TREE_VALUE, attributes do not. */ ! declspecs_nosc_nots_nosa_noea: ! TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $1, NULL_TREE); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_nots_nosa_noea TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_nots_nosa_ea TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ; ! declspecs_nosc_nots_nosa_ea: ! declspecs_nosc_nots_nosa_noea attributes ! { $$ = tree_cons ($2, NULL_TREE, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! ; ! ! declspecs_nosc_nots_sa_noea: ! declspecs_nosc_nots_sa_noea TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_nots_sa_ea TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! ; ! ! declspecs_nosc_nots_sa_ea: ! attributes ! { $$ = tree_cons ($1, NULL_TREE, NULL_TREE); ! TREE_STATIC ($$) = 0; } ! | declspecs_nosc_nots_sa_noea attributes ! { $$ = tree_cons ($2, NULL_TREE, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! ; ! ! declspecs_nosc_ts_nosa_noea: ! typespec_nonattr ! { $$ = tree_cons (NULL_TREE, $1, NULL_TREE); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_ts_nosa_noea TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_ts_nosa_ea TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_ts_nosa_noea typespec_reserved_nonattr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_ts_nosa_ea typespec_reserved_nonattr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_nots_nosa_noea typespec_nonattr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_nots_nosa_ea typespec_nonattr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! ; ! ! declspecs_nosc_ts_nosa_ea: ! typespec_attr ! { $$ = tree_cons (NULL_TREE, $1, NULL_TREE); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_ts_nosa_noea attributes ! { $$ = tree_cons ($2, NULL_TREE, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! | declspecs_nosc_ts_nosa_noea typespec_reserved_attr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_ts_nosa_ea typespec_reserved_attr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_nots_nosa_noea typespec_attr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_nots_nosa_ea typespec_attr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! ; ! ! declspecs_nosc_ts_sa_noea: ! declspecs_nosc_ts_sa_noea TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_ts_sa_ea TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_ts_sa_noea typespec_reserved_nonattr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_ts_sa_ea typespec_reserved_nonattr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_nots_sa_noea typespec_nonattr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_nots_sa_ea typespec_nonattr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! ; ! ! declspecs_nosc_ts_sa_ea: ! declspecs_nosc_ts_sa_noea attributes ! { $$ = tree_cons ($2, NULL_TREE, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! | declspecs_nosc_ts_sa_noea typespec_reserved_attr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_ts_sa_ea typespec_reserved_attr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_nots_sa_noea typespec_attr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_nots_sa_ea typespec_attr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! ; ! ! declspecs_sc_nots_nosa_noea: ! SCSPEC ! { $$ = tree_cons (NULL_TREE, $1, NULL_TREE); ! TREE_STATIC ($$) = 0; } ! | declspecs_sc_nots_nosa_noea TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_sc_nots_nosa_ea TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_nots_nosa_noea SCSPEC ! { if (extra_warnings && TREE_STATIC ($1)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER ($2)); ! $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! | declspecs_nosc_nots_nosa_ea SCSPEC ! { if (extra_warnings && TREE_STATIC ($1)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER ($2)); ! $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! | declspecs_sc_nots_nosa_noea SCSPEC ! { if (extra_warnings && TREE_STATIC ($1)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER ($2)); ! $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! | declspecs_sc_nots_nosa_ea SCSPEC ! { if (extra_warnings && TREE_STATIC ($1)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER ($2)); ! $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ; ! declspecs_sc_nots_nosa_ea: ! declspecs_sc_nots_nosa_noea attributes ! { $$ = tree_cons ($2, NULL_TREE, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ; ! declspecs_sc_nots_sa_noea: ! declspecs_sc_nots_sa_noea TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_sc_nots_sa_ea TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_nots_sa_noea SCSPEC ! { if (extra_warnings && TREE_STATIC ($1)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER ($2)); ! $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! | declspecs_nosc_nots_sa_ea SCSPEC ! { if (extra_warnings && TREE_STATIC ($1)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER ($2)); ! $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! | declspecs_sc_nots_sa_noea SCSPEC ! { if (extra_warnings && TREE_STATIC ($1)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER ($2)); ! $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! | declspecs_sc_nots_sa_ea SCSPEC ! { if (extra_warnings && TREE_STATIC ($1)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER ($2)); ! $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ; ! declspecs_sc_nots_sa_ea: ! declspecs_sc_nots_sa_noea attributes ! { $$ = tree_cons ($2, NULL_TREE, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! ; ! declspecs_sc_ts_nosa_noea: ! declspecs_sc_ts_nosa_noea TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_sc_ts_nosa_ea TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_sc_ts_nosa_noea typespec_reserved_nonattr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_sc_ts_nosa_ea typespec_reserved_nonattr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_sc_nots_nosa_noea typespec_nonattr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_sc_nots_nosa_ea typespec_nonattr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_ts_nosa_noea SCSPEC ! { if (extra_warnings && TREE_STATIC ($1)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER ($2)); ! $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! | declspecs_nosc_ts_nosa_ea SCSPEC ! { if (extra_warnings && TREE_STATIC ($1)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER ($2)); ! $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! | declspecs_sc_ts_nosa_noea SCSPEC ! { if (extra_warnings && TREE_STATIC ($1)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER ($2)); ! $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! | declspecs_sc_ts_nosa_ea SCSPEC ! { if (extra_warnings && TREE_STATIC ($1)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER ($2)); ! $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ; ! declspecs_sc_ts_nosa_ea: ! declspecs_sc_ts_nosa_noea attributes ! { $$ = tree_cons ($2, NULL_TREE, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! | declspecs_sc_ts_nosa_noea typespec_reserved_attr ! { $$ = tree_cons (NULL_TREE, $2, $1); TREE_STATIC ($$) = 1; } ! | declspecs_sc_ts_nosa_ea typespec_reserved_attr { $$ = tree_cons (NULL_TREE, $2, $1); TREE_STATIC ($$) = 1; } ! | declspecs_sc_nots_nosa_noea typespec_attr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_sc_nots_nosa_ea typespec_attr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! ; ! ! declspecs_sc_ts_sa_noea: ! declspecs_sc_ts_sa_noea TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_sc_ts_sa_ea TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_sc_ts_sa_noea typespec_reserved_nonattr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_sc_ts_sa_ea typespec_reserved_nonattr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_sc_nots_sa_noea typespec_nonattr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_sc_nots_sa_ea typespec_nonattr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_ts_sa_noea SCSPEC ! { if (extra_warnings && TREE_STATIC ($1)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER ($2)); ! $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! | declspecs_nosc_ts_sa_ea SCSPEC ! { if (extra_warnings && TREE_STATIC ($1)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER ($2)); ! $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! | declspecs_sc_ts_sa_noea SCSPEC ! { if (extra_warnings && TREE_STATIC ($1)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER ($2)); ! $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! | declspecs_sc_ts_sa_ea SCSPEC { if (extra_warnings && TREE_STATIC ($1)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER ($2)); *************** declmods_no_prefix_attr: *** 952,982 **** TREE_STATIC ($$) = TREE_STATIC ($1); } ; ! /* Used instead of declspecs where storage classes are not allowed ! (that is, for typenames and structure components). ! Don't accept a typedef-name if anything but a modifier precedes it. */ ! typed_typespecs: ! typespec reserved_typespecquals ! { $$ = tree_cons (NULL_TREE, $1, $2); } ! | nonempty_type_quals typespec reserved_typespecquals ! { $$ = chainon ($3, tree_cons (NULL_TREE, $2, $1)); } ; ! reserved_typespecquals: /* empty */ { $$ = NULL_TREE; } ! | reserved_typespecquals typespecqual_reserved ! { $$ = tree_cons (NULL_TREE, $2, $1); } ; ! /* A typespec (but not a type qualifier). Once we have seen one of these in a declaration, ! if a typedef name appears then it is being redeclared. */ ! typespec: TYPESPEC ! | structsp ! | TYPENAME { /* For a typedef name, record the meaning, not the name. In case of `foo foo, bar;'. */ $$ = lookup_name ($1); } --- 1213,1367 ---- TREE_STATIC ($$) = TREE_STATIC ($1); } ; + declspecs_sc_ts_sa_ea: + declspecs_sc_ts_sa_noea attributes + { $$ = tree_cons ($2, NULL_TREE, $1); + TREE_STATIC ($$) = TREE_STATIC ($1); } + | declspecs_sc_ts_sa_noea typespec_reserved_attr + { $$ = tree_cons (NULL_TREE, $2, $1); + TREE_STATIC ($$) = 1; } + | declspecs_sc_ts_sa_ea typespec_reserved_attr + { $$ = tree_cons (NULL_TREE, $2, $1); + TREE_STATIC ($$) = 1; } + | declspecs_sc_nots_sa_noea typespec_attr + { $$ = tree_cons (NULL_TREE, $2, $1); + TREE_STATIC ($$) = 1; } + | declspecs_sc_nots_sa_ea typespec_attr + { $$ = tree_cons (NULL_TREE, $2, $1); + TREE_STATIC ($$) = 1; } + ; ! /* Particular useful classes of declspecs. */ ! declspecs_ts: ! declspecs_nosc_ts_nosa_noea ! | declspecs_nosc_ts_nosa_ea ! | declspecs_nosc_ts_sa_noea ! | declspecs_nosc_ts_sa_ea ! | declspecs_sc_ts_nosa_noea ! | declspecs_sc_ts_nosa_ea ! | declspecs_sc_ts_sa_noea ! | declspecs_sc_ts_sa_ea ! ; ! declspecs_nots: ! declspecs_nosc_nots_nosa_noea ! | declspecs_nosc_nots_nosa_ea ! | declspecs_nosc_nots_sa_noea ! | declspecs_nosc_nots_sa_ea ! | declspecs_sc_nots_nosa_noea ! | declspecs_sc_nots_nosa_ea ! | declspecs_sc_nots_sa_noea ! | declspecs_sc_nots_sa_ea ; ! declspecs_ts_nosa: ! declspecs_nosc_ts_nosa_noea ! | declspecs_nosc_ts_nosa_ea ! | declspecs_sc_ts_nosa_noea ! | declspecs_sc_ts_nosa_ea ! ; ! ! declspecs_nots_nosa: ! declspecs_nosc_nots_nosa_noea ! | declspecs_nosc_nots_nosa_ea ! | declspecs_sc_nots_nosa_noea ! | declspecs_sc_nots_nosa_ea ! ; ! ! declspecs_nosc_ts: ! declspecs_nosc_ts_nosa_noea ! | declspecs_nosc_ts_nosa_ea ! | declspecs_nosc_ts_sa_noea ! | declspecs_nosc_ts_sa_ea ! ; ! ! declspecs_nosc_nots: ! declspecs_nosc_nots_nosa_noea ! | declspecs_nosc_nots_nosa_ea ! | declspecs_nosc_nots_sa_noea ! | declspecs_nosc_nots_sa_ea ! ; ! ! declspecs_nosc: ! declspecs_nosc_ts_nosa_noea ! | declspecs_nosc_ts_nosa_ea ! | declspecs_nosc_ts_sa_noea ! | declspecs_nosc_ts_sa_ea ! | declspecs_nosc_nots_nosa_noea ! | declspecs_nosc_nots_nosa_ea ! | declspecs_nosc_nots_sa_noea ! | declspecs_nosc_nots_sa_ea ! ; ! ! declspecs: ! declspecs_nosc_nots_nosa_noea ! | declspecs_nosc_nots_nosa_ea ! | declspecs_nosc_nots_sa_noea ! | declspecs_nosc_nots_sa_ea ! | declspecs_nosc_ts_nosa_noea ! | declspecs_nosc_ts_nosa_ea ! | declspecs_nosc_ts_sa_noea ! | declspecs_nosc_ts_sa_ea ! | declspecs_sc_nots_nosa_noea ! | declspecs_sc_nots_nosa_ea ! | declspecs_sc_nots_sa_noea ! | declspecs_sc_nots_sa_ea ! | declspecs_sc_ts_nosa_noea ! | declspecs_sc_ts_nosa_ea ! | declspecs_sc_ts_sa_noea ! | declspecs_sc_ts_sa_ea ! ; ! ! /* A (possibly empty) sequence of type qualifiers and attributes. */ ! maybe_type_quals_attrs: ! /* empty */ { $$ = NULL_TREE; } ! | declspecs_nosc_nots ! { $$ = $1; } ; ! /* A type specifier (but not a type qualifier). Once we have seen one of these in a declaration, ! if a typedef name appears then it is being redeclared. ! The _reserved versions start with a reserved word and may appear anywhere ! in the declaration specifiers; the _nonreserved versions may only ! appear before any other type specifiers, and after that are (if names) ! being redeclared. ! ! FIXME: should the _nonreserved version be restricted to names being ! redeclared only? The other entries there relate only the GNU extensions ! and Objective C, and are historically parsed thus, and don't make sense ! after other type specifiers, but it might be cleaner to count them as ! _reserved. ! ! _attr means: specifiers that either end with attributes, ! or are such that any following attributes would ! be parsed as part of the specifier. ! ! _nonattr: specifiers. */ ! ! typespec_nonattr: ! typespec_reserved_nonattr ! | typespec_nonreserved_nonattr ! ; ! ! typespec_attr: ! typespec_reserved_attr ! ; ! ! typespec_reserved_nonattr: ! TYPESPEC ! { OBJC_NEED_RAW_IDENTIFIER (1); } ! | structsp_nonattr ! ; ! ! typespec_reserved_attr: ! structsp_attr ! ; ! ! typespec_nonreserved_nonattr: ! TYPENAME { /* For a typedef name, record the meaning, not the name. In case of `foo foo, bar;'. */ $$ = lookup_name ($1); } *************** end ifobjc *** 997,1017 **** { $$ = groktypename ($3); } ; ! /* A typespec that is a reserved word, or a type qualifier. */ ! ! typespecqual_reserved: TYPESPEC ! | TYPE_QUAL ! | structsp ! ; initdecls: initdcl ! | initdecls ',' initdcl ; notype_initdecls: notype_initdcl ! | notype_initdecls ',' initdcl ; maybeasm: --- 1382,1397 ---- { $$ = groktypename ($3); } ; ! /* typespec_nonreserved_attr does not exist. */ initdecls: initdcl ! | initdecls ',' maybe_resetattrs initdcl ; notype_initdecls: notype_initdcl ! | notype_initdecls ',' maybe_resetattrs notype_initdcl ; maybeasm: *************** maybeasm: *** 1026,1032 **** initdcl: declarator maybeasm maybe_attribute '=' { $$ = start_decl ($1, current_declspecs, 1, ! $3, prefix_attributes); start_init ($$, $2, global_bindings_p ()); } init /* Note how the declaration of the variable is in effect while its init is parsed! */ --- 1406,1412 ---- initdcl: declarator maybeasm maybe_attribute '=' { $$ = start_decl ($1, current_declspecs, 1, ! chainon ($3, all_prefix_attributes)); start_init ($$, $2, global_bindings_p ()); } init /* Note how the declaration of the variable is in effect while its init is parsed! */ *************** initdcl: *** 1034,1040 **** finish_decl ($5, $6, $2); } | declarator maybeasm maybe_attribute { tree d = start_decl ($1, current_declspecs, 0, ! $3, prefix_attributes); finish_decl (d, NULL_TREE, $2); } ; --- 1414,1420 ---- finish_decl ($5, $6, $2); } | declarator maybeasm maybe_attribute { tree d = start_decl ($1, current_declspecs, 0, ! chainon ($3, all_prefix_attributes)); finish_decl (d, NULL_TREE, $2); } ; *************** initdcl: *** 1042,1057 **** notype_initdcl: notype_declarator maybeasm maybe_attribute '=' { $$ = start_decl ($1, current_declspecs, 1, ! $3, prefix_attributes); start_init ($$, $2, global_bindings_p ()); } init /* Note how the declaration of the variable is in effect while its init is parsed! */ { finish_init (); - decl_attributes ($5, $3, prefix_attributes); finish_decl ($5, $6, $2); } | notype_declarator maybeasm maybe_attribute { tree d = start_decl ($1, current_declspecs, 0, ! $3, prefix_attributes); finish_decl (d, NULL_TREE, $2); } ; /* the * rules are dummies to accept the Apollo extended syntax --- 1422,1436 ---- notype_initdcl: notype_declarator maybeasm maybe_attribute '=' { $$ = start_decl ($1, current_declspecs, 1, ! chainon ($3, all_prefix_attributes)); start_init ($$, $2, global_bindings_p ()); } init /* Note how the declaration of the variable is in effect while its init is parsed! */ { finish_init (); finish_decl ($5, $6, $2); } | notype_declarator maybeasm maybe_attribute { tree d = start_decl ($1, current_declspecs, 0, ! chainon ($3, all_prefix_attributes)); finish_decl (d, NULL_TREE, $2); } ; /* the * rules are dummies to accept the Apollo extended syntax *************** nested_function: *** 1185,1191 **** push_function_context (); if (! start_function (current_declspecs, $1, ! prefix_attributes, NULL_TREE)) { pop_function_context (); YYERROR1; --- 1564,1570 ---- push_function_context (); if (! start_function (current_declspecs, $1, ! all_prefix_attributes)) { pop_function_context (); YYERROR1; *************** nested_function: *** 1203,1209 **** { tree decl = current_function_decl; DECL_SOURCE_FILE (decl) = $5; DECL_SOURCE_LINE (decl) = $6; ! finish_function (1); pop_function_context (); add_decl_stmt (decl); } ; --- 1582,1588 ---- { tree decl = current_function_decl; DECL_SOURCE_FILE (decl) = $5; DECL_SOURCE_LINE (decl) = $6; ! finish_function (1, 1); pop_function_context (); add_decl_stmt (decl); } ; *************** notype_nested_function: *** 1215,1221 **** push_function_context (); if (! start_function (current_declspecs, $1, ! prefix_attributes, NULL_TREE)) { pop_function_context (); YYERROR1; --- 1594,1600 ---- push_function_context (); if (! start_function (current_declspecs, $1, ! all_prefix_attributes)) { pop_function_context (); YYERROR1; *************** notype_nested_function: *** 1233,1239 **** { tree decl = current_function_decl; DECL_SOURCE_FILE (decl) = $5; DECL_SOURCE_LINE (decl) = $6; ! finish_function (1); pop_function_context (); add_decl_stmt (decl); } ; --- 1612,1618 ---- { tree decl = current_function_decl; DECL_SOURCE_FILE (decl) = $5; DECL_SOURCE_LINE (decl) = $6; ! finish_function (1, 1); pop_function_context (); add_decl_stmt (decl); } ; *************** declarator: *** 1249,1274 **** /* A declarator that is allowed only after an explicit typespec. */ after_type_declarator: ! '(' after_type_declarator ')' ! { $$ = $2; } | after_type_declarator '(' parmlist_or_identifiers %prec '.' { $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); } /* | after_type_declarator '(' error ')' %prec '.' { $$ = build_nt (CALL_EXPR, $1, NULL_TREE, NULL_TREE); poplevel (0, 0, 0); } */ ! | after_type_declarator '[' expr ']' %prec '.' ! { $$ = build_nt (ARRAY_REF, $1, $3); } ! | after_type_declarator '[' ']' %prec '.' ! { $$ = build_nt (ARRAY_REF, $1, NULL_TREE); } ! | '*' type_quals after_type_declarator %prec UNARY { $$ = make_pointer_declarator ($2, $3); } - /* ??? Yuck. setattrs is a quick hack. We can't use - prefix_attributes because $1 only applies to this - declarator. We assume setspecs has already been done. - setattrs also avoids 5 reduce/reduce conflicts (otherwise multiple - attributes could be recognized here or in `attributes'). */ - | attributes setattrs after_type_declarator - { $$ = $3; } | TYPENAME ifobjc | OBJECTNAME --- 1628,1644 ---- /* A declarator that is allowed only after an explicit typespec. */ after_type_declarator: ! '(' maybe_attribute after_type_declarator ')' ! { $$ = $2 ? tree_cons ($2, $3, NULL_TREE) : $3; } | after_type_declarator '(' parmlist_or_identifiers %prec '.' { $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); } /* | after_type_declarator '(' error ')' %prec '.' { $$ = build_nt (CALL_EXPR, $1, NULL_TREE, NULL_TREE); poplevel (0, 0, 0); } */ ! | after_type_declarator array_declarator %prec '.' ! { $$ = set_array_declarator_type ($2, $1, 0); } ! | '*' maybe_type_quals_attrs after_type_declarator %prec UNARY { $$ = make_pointer_declarator ($2, $3); } | TYPENAME ifobjc | OBJECTNAME *************** end ifobjc *** 1279,1312 **** in addition to notype_declarator. This is like after_type_declarator but does not allow a typedef name in parentheses as an identifier (because it would conflict with a function with that typedef as arg). */ - parm_declarator: ! parm_declarator '(' parmlist_or_identifiers %prec '.' { $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); } ! /* | parm_declarator '(' error ')' %prec '.' { $$ = build_nt (CALL_EXPR, $1, NULL_TREE, NULL_TREE); poplevel (0, 0, 0); } */ ! ifc ! | parm_declarator '[' '*' ']' %prec '.' ! { $$ = build_nt (ARRAY_REF, $1, NULL_TREE); ! if (! flag_isoc99) ! error ("`[*]' in parameter declaration only allowed in ISO C 99"); ! } ! end ifc ! | parm_declarator '[' expr ']' %prec '.' ! { $$ = build_nt (ARRAY_REF, $1, $3); } ! | parm_declarator '[' ']' %prec '.' ! { $$ = build_nt (ARRAY_REF, $1, NULL_TREE); } ! | '*' type_quals parm_declarator %prec UNARY ! { $$ = make_pointer_declarator ($2, $3); } ! /* ??? Yuck. setattrs is a quick hack. We can't use ! prefix_attributes because $1 only applies to this ! declarator. We assume setspecs has already been done. ! setattrs also avoids 5 reduce/reduce conflicts (otherwise multiple ! attributes could be recognized here or in `attributes'). */ ! | attributes setattrs parm_declarator ! { $$ = $3; } | TYPENAME ; /* A declarator allowed whether or not there has been --- 1649,1687 ---- in addition to notype_declarator. This is like after_type_declarator but does not allow a typedef name in parentheses as an identifier (because it would conflict with a function with that typedef as arg). */ parm_declarator: ! parm_declarator_starttypename ! | parm_declarator_nostarttypename ! ; ! ! parm_declarator_starttypename: ! parm_declarator_starttypename '(' parmlist_or_identifiers %prec '.' { $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); } ! /* | parm_declarator_starttypename '(' error ')' %prec '.' { $$ = build_nt (CALL_EXPR, $1, NULL_TREE, NULL_TREE); poplevel (0, 0, 0); } */ ! | parm_declarator_starttypename array_declarator %prec '.' ! { $$ = set_array_declarator_type ($2, $1, 0); } | TYPENAME + ifobjc + | OBJECTNAME + end ifobjc + ; + + parm_declarator_nostarttypename: + parm_declarator_nostarttypename '(' parmlist_or_identifiers %prec '.' + { $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); } + /* | parm_declarator_nostarttypename '(' error ')' %prec '.' + { $$ = build_nt (CALL_EXPR, $1, NULL_TREE, NULL_TREE); + poplevel (0, 0, 0); } */ + | parm_declarator_nostarttypename array_declarator %prec '.' + { $$ = set_array_declarator_type ($2, $1, 0); } + | '*' maybe_type_quals_attrs parm_declarator_starttypename %prec UNARY + { $$ = make_pointer_declarator ($2, $3); } + | '*' maybe_type_quals_attrs parm_declarator_nostarttypename %prec UNARY + { $$ = make_pointer_declarator ($2, $3); } + | '(' maybe_attribute parm_declarator_nostarttypename ')' + { $$ = $2 ? tree_cons ($2, $3, NULL_TREE) : $3; } ; /* A declarator allowed whether or not there has been *************** notype_declarator: *** 1318,1345 **** /* | notype_declarator '(' error ')' %prec '.' { $$ = build_nt (CALL_EXPR, $1, NULL_TREE, NULL_TREE); poplevel (0, 0, 0); } */ ! | '(' notype_declarator ')' ! { $$ = $2; } ! | '*' type_quals notype_declarator %prec UNARY { $$ = make_pointer_declarator ($2, $3); } ! ifc ! | notype_declarator '[' '*' ']' %prec '.' ! { $$ = build_nt (ARRAY_REF, $1, NULL_TREE); ! if (! flag_isoc99) ! error ("`[*]' in parameter declaration only allowed in ISO C 99"); ! } ! end ifc ! | notype_declarator '[' expr ']' %prec '.' ! { $$ = build_nt (ARRAY_REF, $1, $3); } ! | notype_declarator '[' ']' %prec '.' ! { $$ = build_nt (ARRAY_REF, $1, NULL_TREE); } ! /* ??? Yuck. setattrs is a quick hack. We can't use ! prefix_attributes because $1 only applies to this ! declarator. We assume setspecs has already been done. ! setattrs also avoids 5 reduce/reduce conflicts (otherwise multiple ! attributes could be recognized here or in `attributes'). */ ! | attributes setattrs notype_declarator ! { $$ = $3; } | IDENTIFIER ; --- 1693,1704 ---- /* | notype_declarator '(' error ')' %prec '.' { $$ = build_nt (CALL_EXPR, $1, NULL_TREE, NULL_TREE); poplevel (0, 0, 0); } */ ! | '(' maybe_attribute notype_declarator ')' ! { $$ = $2 ? tree_cons ($2, $3, NULL_TREE) : $3; } ! | '*' maybe_type_quals_attrs notype_declarator %prec UNARY { $$ = make_pointer_declarator ($2, $3); } ! | notype_declarator array_declarator %prec '.' ! { $$ = set_array_declarator_type ($2, $1, 0); } | IDENTIFIER ; *************** enum_head: *** 1364,1370 **** { $$ = $2; } ; ! structsp: struct_head identifier '{' { $$ = start_struct (RECORD_TYPE, $2); /* Start scope of tag before parsing components. */ --- 1723,1735 ---- { $$ = $2; } ; ! /* structsp_attr: struct/union/enum specifiers that either ! end with attributes, or are such that any following attributes would ! be parsed as part of the struct/union/enum specifier. ! ! structsp_nonattr: other struct/union/enum specifiers. */ ! ! structsp_attr: struct_head identifier '{' { $$ = start_struct (RECORD_TYPE, $2); /* Start scope of tag before parsing components. */ *************** structsp: *** 1375,1382 **** { $$ = finish_struct (start_struct (RECORD_TYPE, NULL_TREE), $3, chainon ($1, $5)); } - | struct_head identifier - { $$ = xref_tag (RECORD_TYPE, $2); } | union_head identifier '{' { $$ = start_struct (UNION_TYPE, $2); } component_decl_list '}' maybe_attribute --- 1740,1745 ---- *************** structsp: *** 1385,1392 **** { $$ = finish_struct (start_struct (UNION_TYPE, NULL_TREE), $3, chainon ($1, $5)); } - | union_head identifier - { $$ = xref_tag (UNION_TYPE, $2); } | enum_head identifier '{' { $$ = start_enum ($2); } enumlist maybecomma_warn '}' maybe_attribute --- 1748,1753 ---- *************** structsp: *** 1397,1402 **** --- 1758,1770 ---- enumlist maybecomma_warn '}' maybe_attribute { $$ = finish_enum ($3, nreverse ($4), chainon ($1, $7)); } + ; + + structsp_nonattr: + struct_head identifier + { $$ = xref_tag (RECORD_TYPE, $2); } + | union_head identifier + { $$ = xref_tag (UNION_TYPE, $2); } | enum_head identifier { $$ = xref_tag (ENUMERAL_TYPE, $2); /* In ISO C, enumerated types can be referred to *************** ifobjc *** 1442,1448 **** $$ = get_class_ivars (interface); else { ! error ("Cannot find interface declaration for `%s'", IDENTIFIER_POINTER ($3)); $$ = NULL_TREE; } --- 1810,1816 ---- $$ = get_class_ivars (interface); else { ! error ("cannot find interface declaration for `%s'", IDENTIFIER_POINTER ($3)); $$ = NULL_TREE; } *************** ifobjc *** 1450,1471 **** end ifobjc ; - /* There is a shift-reduce conflict here, because `components' may - start with a `typename'. It happens that shifting (the default resolution) - does the right thing, because it treats the `typename' as part of - a `typed_typespecs'. - - It is possible that this same technique would allow the distinction - between `notype_initdecls' and `initdecls' to be eliminated. - But I am being cautious and not trying it. */ - component_decl: ! typed_typespecs setspecs components { $$ = $3; ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | typed_typespecs setspecs save_filename save_lineno maybe_attribute { /* Support for unnamed structs or unions as members of structs or unions (which is [a] useful and [b] supports --- 1818,1828 ---- end ifobjc ; component_decl: ! declspecs_nosc_ts setspecs components { $$ = $3; ! POP_DECLSPEC_STACK; } ! | declspecs_nosc_ts setspecs save_filename save_lineno { /* Support for unnamed structs or unions as members of structs or unions (which is [a] useful and [b] supports *************** component_decl: *** 1474,1489 **** pedwarn ("ISO C doesn't support unnamed structs/unions"); $$ = grokfield($3, $4, NULL, current_declspecs, NULL_TREE); ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); ! } ! | nonempty_type_quals setspecs components { $$ = $3; ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | nonempty_type_quals { if (pedantic) pedwarn ("ISO C forbids member declarations with no members"); shadow_tag($1); --- 1831,1841 ---- pedwarn ("ISO C doesn't support unnamed structs/unions"); $$ = grokfield($3, $4, NULL, current_declspecs, NULL_TREE); ! POP_DECLSPEC_STACK; } ! | declspecs_nosc_nots setspecs components_notype { $$ = $3; ! POP_DECLSPEC_STACK; } ! | declspecs_nosc_nots { if (pedantic) pedwarn ("ISO C forbids member declarations with no members"); shadow_tag($1); *************** component_decl: *** 1497,1517 **** components: component_declarator ! | components ',' component_declarator ! { $$ = chainon ($1, $3); } ; component_declarator: save_filename save_lineno declarator maybe_attribute { $$ = grokfield ($1, $2, $3, current_declspecs, NULL_TREE); ! decl_attributes ($$, $4, prefix_attributes); } | save_filename save_lineno declarator ':' expr_no_commas maybe_attribute { $$ = grokfield ($1, $2, $3, current_declspecs, $5); ! decl_attributes ($$, $6, prefix_attributes); } | save_filename save_lineno ':' expr_no_commas maybe_attribute { $$ = grokfield ($1, $2, NULL_TREE, current_declspecs, $4); ! decl_attributes ($$, $5, prefix_attributes); } ; /* We chain the enumerators in reverse order. --- 1849,1888 ---- components: component_declarator ! | components ',' maybe_resetattrs component_declarator ! { $$ = chainon ($1, $4); } ! ; ! ! components_notype: ! component_notype_declarator ! | components_notype ',' maybe_resetattrs component_notype_declarator ! { $$ = chainon ($1, $4); } ; component_declarator: save_filename save_lineno declarator maybe_attribute { $$ = grokfield ($1, $2, $3, current_declspecs, NULL_TREE); ! decl_attributes (&$$, chainon ($4, all_prefix_attributes), 0); } | save_filename save_lineno declarator ':' expr_no_commas maybe_attribute { $$ = grokfield ($1, $2, $3, current_declspecs, $5); ! decl_attributes (&$$, chainon ($6, all_prefix_attributes), 0); } | save_filename save_lineno ':' expr_no_commas maybe_attribute { $$ = grokfield ($1, $2, NULL_TREE, current_declspecs, $4); ! decl_attributes (&$$, chainon ($5, all_prefix_attributes), 0); } ! ; ! ! component_notype_declarator: ! save_filename save_lineno notype_declarator maybe_attribute ! { $$ = grokfield ($1, $2, $3, current_declspecs, NULL_TREE); ! decl_attributes (&$$, chainon ($4, all_prefix_attributes), 0); } ! | save_filename save_lineno ! notype_declarator ':' expr_no_commas maybe_attribute ! { $$ = grokfield ($1, $2, $3, current_declspecs, $5); ! decl_attributes (&$$, chainon ($6, all_prefix_attributes), 0); } ! | save_filename save_lineno ':' expr_no_commas maybe_attribute ! { $$ = grokfield ($1, $2, NULL_TREE, current_declspecs, $4); ! decl_attributes (&$$, chainon ($5, all_prefix_attributes), 0); } ; /* We chain the enumerators in reverse order. *************** enumerator: *** 1539,1550 **** ; typename: ! typed_typespecs ! { pending_xref_error (); } absdcl ! { $$ = build_tree_list ($1, $3); } ! | nonempty_type_quals absdcl ! { $$ = build_tree_list ($1, $2); } ; absdcl: /* an absolute declarator */ --- 1910,1920 ---- ; typename: ! declspecs_nosc ! { pending_xref_error (); ! $$ = $1; } absdcl ! { $$ = build_tree_list ($2, $3); } ; absdcl: /* an absolute declarator */ *************** absdcl: /* an absolute declarator */ *** 1553,1596 **** | absdcl1 ; ! nonempty_type_quals: ! TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $1, NULL_TREE); } ! | nonempty_type_quals TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); } ; ! type_quals: ! /* empty */ ! { $$ = NULL_TREE; } ! | type_quals TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); } ; ! absdcl1: /* a nonempty absolute declarator */ ! '(' absdcl1 ')' ! { $$ = $2; } ! /* `(typedef)1' is `int'. */ ! | '*' type_quals absdcl1 %prec UNARY { $$ = make_pointer_declarator ($2, $3); } ! | '*' type_quals %prec UNARY { $$ = make_pointer_declarator ($2, NULL_TREE); } ! | absdcl1 '(' parmlist %prec '.' { $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); } ! | absdcl1 '[' expr ']' %prec '.' ! { $$ = build_nt (ARRAY_REF, $1, $3); } ! | absdcl1 '[' ']' %prec '.' ! { $$ = build_nt (ARRAY_REF, $1, NULL_TREE); } ! | '(' parmlist %prec '.' { $$ = build_nt (CALL_EXPR, NULL_TREE, $2, NULL_TREE); } ! | '[' expr ']' %prec '.' ! { $$ = build_nt (ARRAY_REF, NULL_TREE, $2); } ! | '[' ']' %prec '.' ! { $$ = build_nt (ARRAY_REF, NULL_TREE, NULL_TREE); } ! /* ??? It appears we have to support attributes here, however ! using prefix_attributes is wrong. */ ! | attributes setattrs absdcl1 ! { $$ = $3; } ; /* A nonempty series of declarations and statements (possibly followed by --- 1923,2001 ---- | absdcl1 ; ! absdcl_maybe_attribute: /* absdcl maybe_attribute, but not just attributes */ ! /* empty */ ! { $$ = build_tree_list (build_tree_list (current_declspecs, ! NULL_TREE), ! all_prefix_attributes); } ! | absdcl1 ! { $$ = build_tree_list (build_tree_list (current_declspecs, ! $1), ! all_prefix_attributes); } ! | absdcl1_noea attributes ! { $$ = build_tree_list (build_tree_list (current_declspecs, ! $1), ! chainon ($2, all_prefix_attributes)); } ; ! absdcl1: /* a nonempty absolute declarator */ ! absdcl1_ea ! | absdcl1_noea ; ! absdcl1_noea: ! direct_absdcl1 ! | '*' maybe_type_quals_attrs absdcl1_noea { $$ = make_pointer_declarator ($2, $3); } ! ; ! ! absdcl1_ea: ! '*' maybe_type_quals_attrs { $$ = make_pointer_declarator ($2, NULL_TREE); } ! | '*' maybe_type_quals_attrs absdcl1_ea ! { $$ = make_pointer_declarator ($2, $3); } ! ; ! ! direct_absdcl1: ! '(' maybe_attribute absdcl1 ')' ! { $$ = $2 ? tree_cons ($2, $3, NULL_TREE) : $3; } ! | direct_absdcl1 '(' parmlist { $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); } ! | direct_absdcl1 array_declarator ! { $$ = set_array_declarator_type ($2, $1, 1); } ! | '(' parmlist { $$ = build_nt (CALL_EXPR, NULL_TREE, $2, NULL_TREE); } ! | array_declarator ! { $$ = set_array_declarator_type ($1, NULL_TREE, 1); } ! ; ! ! /* The [...] part of a declarator for an array type. */ ! ! array_declarator: ! '[' expr ']' ! { $$ = build_array_declarator ($2, NULL_TREE, 0, 0); } ! | '[' declspecs_nosc expr ']' ! { $$ = build_array_declarator ($3, $2, 0, 0); } ! | '[' ']' ! { $$ = build_array_declarator (NULL_TREE, NULL_TREE, 0, 0); } ! | '[' declspecs_nosc ']' ! { $$ = build_array_declarator (NULL_TREE, $2, 0, 0); } ! | '[' '*' ']' ! { $$ = build_array_declarator (NULL_TREE, NULL_TREE, 0, 1); } ! | '[' declspecs_nosc '*' ']' ! { $$ = build_array_declarator (NULL_TREE, $2, 0, 1); } ! | '[' SCSPEC expr ']' ! { if (C_RID_CODE ($2) != RID_STATIC) ! error ("storage class specifier in array declarator"); ! $$ = build_array_declarator ($3, NULL_TREE, 1, 0); } ! | '[' SCSPEC declspecs_nosc expr ']' ! { if (C_RID_CODE ($2) != RID_STATIC) ! error ("storage class specifier in array declarator"); ! $$ = build_array_declarator ($4, $3, 1, 0); } ! | '[' declspecs_nosc SCSPEC expr ']' ! { if (C_RID_CODE ($3) != RID_STATIC) ! error ("storage class specifier in array declarator"); ! $$ = build_array_declarator ($4, $2, 1, 0); } ; /* A nonempty series of declarations and statements (possibly followed by *************** end ifobjc *** 1662,1667 **** --- 2067,2073 ---- poplevel: /* empty */ { $$ = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0); } + ; /* Start and end blocks created for the new scopes of C99. */ c99_block_start: /* empty */ *************** compstmt_or_error: *** 1732,1738 **** ; compstmt_start: '{' { compstmt_count++; ! $$ = c_begin_compound_stmt (); } compstmt_nostart: '}' { $$ = convert (void_type_node, integer_zero_node); } --- 2138,2145 ---- ; compstmt_start: '{' { compstmt_count++; ! $$ = c_begin_compound_stmt (); } ! ; compstmt_nostart: '}' { $$ = convert (void_type_node, integer_zero_node); } *************** compstmt_primary_start: *** 1764,1772 **** --- 2171,2181 ---- compstmt_count++; $$ = add_stmt (build_stmt (COMPOUND_STMT, last_tree)); } + ; compstmt: compstmt_start compstmt_nostart { RECHAIN_STMTS ($1, COMPOUND_BODY ($1)); + last_expr_type = NULL_TREE; $$ = $1; } ; *************** lineno_stmt: *** 1854,1860 **** /* ??? We currently have no way of recording the filename for a statement. This probably matters little in practice at the moment, ! but I suspect that problems will ocurr when doing inlining at the tree level. */ } } --- 2263,2269 ---- /* ??? We currently have no way of recording the filename for a statement. This probably matters little in practice at the moment, ! but I suspect that problems will occur when doing inlining at the tree level. */ } } *************** stmt: *** 1968,1993 **** $$ = c_expand_return ($2); } | ASM_KEYWORD maybe_type_qual '(' expr ')' ';' { stmt_count++; ! STRIP_NOPS ($4); ! if ((TREE_CODE ($4) == ADDR_EXPR ! && TREE_CODE (TREE_OPERAND ($4, 0)) == STRING_CST) ! || TREE_CODE ($4) == STRING_CST) ! { ! if (TREE_CODE ($4) == ADDR_EXPR) ! $4 = TREE_OPERAND ($4, 0); ! if (TREE_CHAIN ($4)) ! $4 = combine_strings ($4); ! $$ = add_stmt (build_stmt (ASM_STMT, NULL_TREE, $4, ! NULL_TREE, NULL_TREE, ! NULL_TREE)); ! ASM_INPUT_P ($$) = 1; ! } ! else ! { ! error ("argument of `asm' is not a constant string"); ! $$ = NULL_TREE; ! } ! } /* This is the case with just output operands. */ | ASM_KEYWORD maybe_type_qual '(' expr ':' asm_operands ')' ';' { stmt_count++; --- 2377,2383 ---- $$ = c_expand_return ($2); } | ASM_KEYWORD maybe_type_qual '(' expr ')' ';' { stmt_count++; ! $$ = simple_asm_stmt ($4); } /* This is the case with just output operands. */ | ASM_KEYWORD maybe_type_qual '(' expr ':' asm_operands ')' ';' { stmt_count++; *************** label: CASE expr_no_commas ':' *** 2042,2048 **** stmt_count++; if (label) { ! decl_attributes (label, $5, NULL_TREE); $$ = add_stmt (build_stmt (LABEL_STMT, label)); } else --- 2432,2438 ---- stmt_count++; if (label) { ! decl_attributes (&label, $5, 0); $$ = add_stmt (build_stmt (LABEL_STMT, label)); } else *************** nonnull_asm_operands: *** 2081,2087 **** asm_operand: STRING '(' expr ')' ! { $$ = build_tree_list ($1, $3); } ; asm_clobbers: --- 2471,2479 ---- asm_operand: STRING '(' expr ')' ! { $$ = build_tree_list (build_tree_list (NULL_TREE, $1), $3); } ! | '[' identifier ']' STRING '(' expr ')' ! { $$ = build_tree_list (build_tree_list ($2, $4), $6); } ; asm_clobbers: *************** asm_clobbers: *** 2092,2104 **** ; /* This is what appears inside the parens in a function declarator. ! Its value is a list of ..._TYPE nodes. */ parmlist: { pushlevel (0); clear_parm_order (); declare_parm_level (0); } parmlist_1 ! { $$ = $2; parmlist_tags_warning (); poplevel (0, 0, 0); } ; --- 2484,2500 ---- ; /* This is what appears inside the parens in a function declarator. ! Its value is a list of ..._TYPE nodes. Attributes must appear here ! to avoid a conflict with their appearance after an open parenthesis ! in an abstract declarator, as in ! "void bar (int (__attribute__((__mode__(SI))) int foo));". */ parmlist: + maybe_attribute { pushlevel (0); clear_parm_order (); declare_parm_level (0); } parmlist_1 ! { $$ = $3; parmlist_tags_warning (); poplevel (0, 0, 0); } ; *************** parmlist_1: *** 2113,2120 **** for (parm = getdecls (); parm; parm = TREE_CHAIN (parm)) TREE_ASM_WRITTEN (parm) = 1; clear_parm_order (); } parmlist_1 ! { $$ = $4; } | error ')' { $$ = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); } ; --- 2509,2519 ---- for (parm = getdecls (); parm; parm = TREE_CHAIN (parm)) TREE_ASM_WRITTEN (parm) = 1; clear_parm_order (); } + maybe_attribute + { /* Dummy action so attributes are in known place + on parser stack. */ } parmlist_1 ! { $$ = $6; } | error ')' { $$ = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); } ; *************** parmlist_2: /* empty */ *** 2140,2146 **** ; parms: ! parm { push_parm_decl ($1); } | parms ',' parm { push_parm_decl ($3); } --- 2539,2545 ---- ; parms: ! firstparm { push_parm_decl ($1); } | parms ',' parm { push_parm_decl ($3); } *************** parms: *** 2149,2206 **** /* A single parameter declaration or parameter type name, as found in a parmlist. */ parm: ! typed_declspecs setspecs parm_declarator maybe_attribute { $$ = build_tree_list (build_tree_list (current_declspecs, $3), ! build_tree_list (prefix_attributes, ! $4)); ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | typed_declspecs setspecs notype_declarator maybe_attribute { $$ = build_tree_list (build_tree_list (current_declspecs, $3), ! build_tree_list (prefix_attributes, ! $4)); ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | typed_declspecs setspecs absdcl maybe_attribute { $$ = build_tree_list (build_tree_list (current_declspecs, $3), ! build_tree_list (prefix_attributes, ! $4)); ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | declmods setspecs notype_declarator maybe_attribute { $$ = build_tree_list (build_tree_list (current_declspecs, $3), ! build_tree_list (prefix_attributes, ! $4)); ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! ! | declmods setspecs absdcl maybe_attribute { $$ = build_tree_list (build_tree_list (current_declspecs, $3), ! build_tree_list (prefix_attributes, ! $4)); ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ; /* This is used in a function definition where either a parmlist or an identifier list is ok. Its value is a list of ..._TYPE nodes or a list of identifiers. */ parmlist_or_identifiers: { pushlevel (0); clear_parm_order (); declare_parm_level (1); } parmlist_or_identifiers_1 ! { $$ = $2; parmlist_tags_warning (); poplevel (0, 0, 0); } ; --- 2548,2620 ---- /* A single parameter declaration or parameter type name, as found in a parmlist. */ parm: ! declspecs_ts setspecs parm_declarator maybe_attribute { $$ = build_tree_list (build_tree_list (current_declspecs, $3), ! chainon ($4, all_prefix_attributes)); ! POP_DECLSPEC_STACK; } ! | declspecs_ts setspecs notype_declarator maybe_attribute { $$ = build_tree_list (build_tree_list (current_declspecs, $3), ! chainon ($4, all_prefix_attributes)); ! POP_DECLSPEC_STACK; } ! | declspecs_ts setspecs absdcl_maybe_attribute ! { $$ = $3; ! POP_DECLSPEC_STACK; } ! | declspecs_nots setspecs notype_declarator maybe_attribute { $$ = build_tree_list (build_tree_list (current_declspecs, $3), ! chainon ($4, all_prefix_attributes)); ! POP_DECLSPEC_STACK; } ! ! | declspecs_nots setspecs absdcl_maybe_attribute ! { $$ = $3; ! POP_DECLSPEC_STACK; } ! ; ! ! /* The first parm, which must suck attributes from off the top of the parser ! stack. */ ! firstparm: ! declspecs_ts_nosa setspecs_fp parm_declarator maybe_attribute { $$ = build_tree_list (build_tree_list (current_declspecs, $3), ! chainon ($4, all_prefix_attributes)); ! POP_DECLSPEC_STACK; } ! | declspecs_ts_nosa setspecs_fp notype_declarator maybe_attribute { $$ = build_tree_list (build_tree_list (current_declspecs, $3), ! chainon ($4, all_prefix_attributes)); ! POP_DECLSPEC_STACK; } ! | declspecs_ts_nosa setspecs_fp absdcl_maybe_attribute ! { $$ = $3; ! POP_DECLSPEC_STACK; } ! | declspecs_nots_nosa setspecs_fp notype_declarator maybe_attribute ! { $$ = build_tree_list (build_tree_list (current_declspecs, ! $3), ! chainon ($4, all_prefix_attributes)); ! POP_DECLSPEC_STACK; } ! ! | declspecs_nots_nosa setspecs_fp absdcl_maybe_attribute ! { $$ = $3; ! POP_DECLSPEC_STACK; } ! ; ! ! setspecs_fp: ! setspecs ! { prefix_attributes = chainon (prefix_attributes, $-2); ! all_prefix_attributes = prefix_attributes; } ; /* This is used in a function definition where either a parmlist or an identifier list is ok. Its value is a list of ..._TYPE nodes or a list of identifiers. */ parmlist_or_identifiers: + maybe_attribute { pushlevel (0); clear_parm_order (); declare_parm_level (1); } parmlist_or_identifiers_1 ! { $$ = $3; parmlist_tags_warning (); poplevel (0, 0, 0); } ; *************** parmlist_or_identifiers_1: *** 2212,2218 **** for (t = $1; t; t = TREE_CHAIN (t)) if (TREE_VALUE (t) == NULL_TREE) error ("`...' in old-style identifier list"); ! $$ = tree_cons (NULL_TREE, NULL_TREE, $1); } ; /* A nonempty list of identifiers. */ --- 2626,2640 ---- for (t = $1; t; t = TREE_CHAIN (t)) if (TREE_VALUE (t) == NULL_TREE) error ("`...' in old-style identifier list"); ! $$ = tree_cons (NULL_TREE, NULL_TREE, $1); ! ! /* Make sure we have a parmlist after attributes. */ ! if ($-1 != 0 ! && (TREE_CODE ($$) != TREE_LIST ! || TREE_PURPOSE ($$) == 0 ! || TREE_CODE (TREE_PURPOSE ($$)) != PARM_DECL)) ! YYERROR1; ! } ; /* A nonempty list of identifiers. */ *************** extension: *** 2235,2241 **** EXTENSION { $$ = SAVE_WARN_FLAGS(); pedantic = 0; ! warn_pointer_arith = 0; } ; ifobjc --- 2657,2664 ---- EXTENSION { $$ = SAVE_WARN_FLAGS(); pedantic = 0; ! warn_pointer_arith = 0; ! warn_traditional = 0; } ; ifobjc *************** classdef: *** 2406,2421 **** protocoldef: PROTOCOL identifier protocolrefs { ! remember_protocol_qualifiers (); objc_interface_context = start_protocol(PROTOCOL_INTERFACE_TYPE, $2, $3); } methodprotolist END { ! forget_protocol_qualifiers(); finish_protocol(objc_interface_context); objc_interface_context = NULL_TREE; } ; protocolrefs: --- 2829,2851 ---- protocoldef: PROTOCOL identifier protocolrefs { ! objc_pq_context = 1; objc_interface_context = start_protocol(PROTOCOL_INTERFACE_TYPE, $2, $3); } methodprotolist END { ! objc_pq_context = 0; finish_protocol(objc_interface_context); objc_interface_context = NULL_TREE; } + /* The @protocol forward-declaration production introduces a + reduce/reduce conflict on ';', which should be resolved in + favor of the production 'identifier_list -> identifier'. */ + | PROTOCOL identifier_list ';' + { + objc_declare_protocols ($2); + } ; protocolrefs: *************** ivar_decls: *** 2471,2486 **** But I am being cautious and not trying it. */ ivar_decl: ! typed_typespecs setspecs ivars { $$ = $3; ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | nonempty_type_quals setspecs ivars { $$ = $3; ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } | error { $$ = NULL_TREE; } ; --- 2901,2912 ---- But I am being cautious and not trying it. */ ivar_decl: ! declspecs_nosc_ts setspecs ivars { $$ = $3; ! POP_DECLSPEC_STACK; } ! | declspecs_nosc_nots setspecs ivars { $$ = $3; ! POP_DECLSPEC_STACK; } | error { $$ = NULL_TREE; } ; *************** ivars: *** 2489,2495 **** /* empty */ { $$ = NULL_TREE; } | ivar_declarator ! | ivars ',' ivar_declarator ; ivar_declarator: --- 2915,2921 ---- /* empty */ { $$ = NULL_TREE; } | ivar_declarator ! | ivars ',' maybe_resetattrs ivar_declarator ; ivar_declarator: *************** ivar_declarator: *** 2515,2560 **** } ; ! methoddef: '+' ! { ! remember_protocol_qualifiers (); ! if (objc_implementation_context) ! objc_inherit_code = CLASS_METHOD_DECL; ! else ! fatal_error ("method definition not in class context"); ! } ! methoddecl ! { ! forget_protocol_qualifiers (); ! add_class_method (objc_implementation_context, $3); ! start_method_def ($3); ! objc_method_context = $3; ! } ! optarglist ! { ! continue_method_def (); ! } ! compstmt_or_error ! { ! finish_method_def (); ! objc_method_context = NULL_TREE; ! } ! | '-' { ! remember_protocol_qualifiers (); ! if (objc_implementation_context) ! objc_inherit_code = INSTANCE_METHOD_DECL; ! else fatal_error ("method definition not in class context"); } methoddecl { ! forget_protocol_qualifiers (); ! add_instance_method (objc_implementation_context, $3); start_method_def ($3); - objc_method_context = $3; } optarglist { --- 2941,2968 ---- } ; ! methodtype: '+' ! { objc_inherit_code = CLASS_METHOD_DECL; } | '-' + { objc_inherit_code = INSTANCE_METHOD_DECL; } + ; + + methoddef: + methodtype { ! objc_pq_context = 1; ! if (!objc_implementation_context) fatal_error ("method definition not in class context"); } methoddecl { ! objc_pq_context = 0; ! if (objc_inherit_code == CLASS_METHOD_DECL) ! add_class_method (objc_implementation_context, $3); ! else ! add_instance_method (objc_implementation_context, $3); start_method_def ($3); } optarglist { *************** methoddef: *** 2563,2569 **** compstmt_or_error { finish_method_def (); - objc_method_context = NULL_TREE; } ; --- 2971,2976 ---- *************** semi_or_error: *** 2589,2619 **** ; methodproto: ! '+' ! { ! /* Remember protocol qualifiers in prototypes. */ ! remember_protocol_qualifiers (); ! objc_inherit_code = CLASS_METHOD_DECL; ! } ! methoddecl ! { ! /* Forget protocol qualifiers here. */ ! forget_protocol_qualifiers (); ! add_class_method (objc_interface_context, $3); ! } ! semi_or_error ! ! | '-' { /* Remember protocol qualifiers in prototypes. */ ! remember_protocol_qualifiers (); ! objc_inherit_code = INSTANCE_METHOD_DECL; } methoddecl { /* Forget protocol qualifiers here. */ ! forget_protocol_qualifiers (); ! add_instance_method (objc_interface_context, $3); } semi_or_error ; --- 2996,3014 ---- ; methodproto: ! methodtype { /* Remember protocol qualifiers in prototypes. */ ! objc_pq_context = 1; } methoddecl { /* Forget protocol qualifiers here. */ ! objc_pq_context = 0; ! if (objc_inherit_code == CLASS_METHOD_DECL) ! add_class_method (objc_interface_context, $3); ! else ! add_instance_method (objc_interface_context, $3); } semi_or_error ; *************** mydecls: *** 2664,2676 **** ; mydecl: ! typed_declspecs setspecs myparms ';' ! { current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | typed_declspecs ';' { shadow_tag ($1); } ! | declmods ';' { pedwarn ("empty declaration"); } ; --- 3059,3069 ---- ; mydecl: ! declspecs_ts setspecs myparms ';' ! { POP_DECLSPEC_STACK; } ! | declspecs_ts ';' { shadow_tag ($1); } ! | declspecs_nots ';' { pedwarn ("empty declaration"); } ; *************** myparm: *** 2688,2705 **** parm_declarator maybe_attribute { $$ = build_tree_list (build_tree_list (current_declspecs, $1), ! build_tree_list (prefix_attributes, ! $2)); } | notype_declarator maybe_attribute { $$ = build_tree_list (build_tree_list (current_declspecs, $1), ! build_tree_list (prefix_attributes, ! $2)); } ! | absdcl maybe_attribute ! { $$ = build_tree_list (build_tree_list (current_declspecs, ! $1), ! build_tree_list (prefix_attributes, ! $2)); } ; optparmlist: --- 3081,3093 ---- parm_declarator maybe_attribute { $$ = build_tree_list (build_tree_list (current_declspecs, $1), ! chainon ($2, all_prefix_attributes)); } | notype_declarator maybe_attribute { $$ = build_tree_list (build_tree_list (current_declspecs, $1), ! chainon ($2, all_prefix_attributes)); } ! | absdcl_maybe_attribute ! { $$ = $1; } ; optparmlist: *************** keywordselector: *** 2739,2746 **** selector: IDENTIFIER ! | TYPENAME ! | OBJECTNAME | reservedwords ; --- 3127,3135 ---- selector: IDENTIFIER ! | TYPENAME ! | CLASSNAME ! | OBJECTNAME | reservedwords ; *************** static const struct resword reswords[] = *** 2904,2909 **** --- 3293,3300 ---- { { "_Bool", RID_BOOL, 0 }, { "_Complex", RID_COMPLEX, 0 }, + { "__FUNCTION__", RID_FUNCTION_NAME, 0 }, + { "__PRETTY_FUNCTION__", RID_PRETTY_FUNCTION_NAME, 0 }, { "__alignof", RID_ALIGNOF, 0 }, { "__alignof__", RID_ALIGNOF, 0 }, { "__asm", RID_ASM, 0 }, *************** static const struct resword reswords[] = *** 2912,2923 **** --- 3303,3317 ---- { "__attribute__", RID_ATTRIBUTE, 0 }, { "__bounded", RID_BOUNDED, 0 }, { "__bounded__", RID_BOUNDED, 0 }, + { "__builtin_choose_expr", RID_CHOOSE_EXPR, 0 }, + { "__builtin_types_compatible_p", RID_TYPES_COMPATIBLE_P, 0 }, { "__builtin_va_arg", RID_VA_ARG, 0 }, { "__complex", RID_COMPLEX, 0 }, { "__complex__", RID_COMPLEX, 0 }, { "__const", RID_CONST, 0 }, { "__const__", RID_CONST, 0 }, { "__extension__", RID_EXTENSION, 0 }, + { "__func__", RID_C99_FUNCTION_NAME, 0 }, { "__imag", RID_IMAGPART, 0 }, { "__imag__", RID_IMAGPART, 0 }, { "__inline", RID_INLINE, 0 }, *************** static const struct resword reswords[] = *** 2978,2996 **** { "volatile", RID_VOLATILE, D_TRAD }, { "while", RID_WHILE, 0 }, ifobjc - { "@class", RID_AT_CLASS, D_OBJC }, - { "@compatibility_alias", RID_AT_ALIAS, D_OBJC }, - { "@defs", RID_AT_DEFS, D_OBJC }, - { "@encode", RID_AT_ENCODE, D_OBJC }, - { "@end", RID_AT_END, D_OBJC }, - { "@implementation", RID_AT_IMPLEMENTATION, D_OBJC }, - { "@interface", RID_AT_INTERFACE, D_OBJC }, - { "@private", RID_AT_PRIVATE, D_OBJC }, - { "@protected", RID_AT_PROTECTED, D_OBJC }, - { "@protocol", RID_AT_PROTOCOL, D_OBJC }, - { "@public", RID_AT_PUBLIC, D_OBJC }, - { "@selector", RID_AT_SELECTOR, D_OBJC }, { "id", RID_ID, D_OBJC }, { "bycopy", RID_BYCOPY, D_OBJC }, { "byref", RID_BYREF, D_OBJC }, { "in", RID_IN, D_OBJC }, --- 3372,3396 ---- { "volatile", RID_VOLATILE, D_TRAD }, { "while", RID_WHILE, 0 }, ifobjc { "id", RID_ID, D_OBJC }, + + /* These objc keywords are recognized only immediately after + an '@'. */ + { "class", RID_AT_CLASS, D_OBJC }, + { "compatibility_alias", RID_AT_ALIAS, D_OBJC }, + { "defs", RID_AT_DEFS, D_OBJC }, + { "encode", RID_AT_ENCODE, D_OBJC }, + { "end", RID_AT_END, D_OBJC }, + { "implementation", RID_AT_IMPLEMENTATION, D_OBJC }, + { "interface", RID_AT_INTERFACE, D_OBJC }, + { "private", RID_AT_PRIVATE, D_OBJC }, + { "protected", RID_AT_PROTECTED, D_OBJC }, + { "protocol", RID_AT_PROTOCOL, D_OBJC }, + { "public", RID_AT_PUBLIC, D_OBJC }, + { "selector", RID_AT_SELECTOR, D_OBJC }, + + /* These are recognized only in protocol-qualifier context + (see above) */ { "bycopy", RID_BYCOPY, D_OBJC }, { "byref", RID_BYREF, D_OBJC }, { "in", RID_IN, D_OBJC }, *************** static const short rid_to_yy[RID_MAX] = *** 3077,3082 **** --- 3477,3489 ---- /* RID_PTREXTENT */ PTR_EXTENT, /* RID_PTRVALUE */ PTR_VALUE, + /* RID_CHOOSE_EXPR */ CHOOSE_EXPR, + /* RID_TYPES_COMPATIBLE_P */ TYPES_COMPATIBLE_P, + + /* RID_FUNCTION_NAME */ STRING_FUNC_NAME, + /* RID_PRETTY_FUNCTION_NAME */ STRING_FUNC_NAME, + /* RID_C99_FUNCTION_NAME */ VAR_FUNC_NAME, + /* C++ */ /* RID_BOOL */ TYPESPEC, /* RID_WCHAR */ 0, *************** static const short rid_to_yy[RID_MAX] = *** 3118,3124 **** /* RID_BITAND */ 0, /* RID_BITOR */ 0, /* RID_COMPL */ 0, ! /* Objective C */ /* RID_ID */ OBJECTNAME, /* RID_AT_ENCODE */ ENCODE, --- 3525,3531 ---- /* RID_BITAND */ 0, /* RID_BITOR */ 0, /* RID_COMPL */ 0, ! /* Objective C */ /* RID_ID */ OBJECTNAME, /* RID_AT_ENCODE */ ENCODE, *************** static const short rid_to_yy[RID_MAX] = *** 3135,3156 **** /* RID_AT_IMPLEMENTATION */ IMPLEMENTATION }; - ifobjc - /* Lookup table for ObjC keywords beginning with '@'. Crude but - hopefully effective. */ - #define N_at_reswords ((int) RID_AT_IMPLEMENTATION - (int)RID_AT_ENCODE + 1) - static tree objc_rid_sans_at[N_at_reswords]; - end ifobjc - static void init_reswords () { unsigned int i; tree id; ! int mask = ((doing_objc_thang ? 0 : D_OBJC) ! | (flag_isoc99 ? 0 : D_C89) | (flag_traditional ? D_TRAD : 0) ! | (flag_no_asm ? (flag_isoc99 ? D_EXT : D_EXT|D_EXT89) : 0)); /* It is not necessary to register ridpointers as a GC root, because all the trees it points to are permanently interned in the --- 3542,3558 ---- /* RID_AT_IMPLEMENTATION */ IMPLEMENTATION }; static void init_reswords () { unsigned int i; tree id; ! int mask = (flag_isoc99 ? 0 : D_C89) | (flag_traditional ? D_TRAD : 0) ! | (flag_no_asm ? (flag_isoc99 ? D_EXT : D_EXT|D_EXT89) : 0); ! ! if (c_language != clk_objective_c) ! mask |= D_OBJC; /* It is not necessary to register ridpointers as a GC root, because all the trees it points to are permanently interned in the *************** init_reswords () *** 3167,3209 **** C_RID_CODE (id) = reswords[i].rid; C_IS_RESERVED_WORD (id) = 1; ridpointers [(int) reswords[i].rid] = id; - - ifobjc - /* Enter ObjC @-prefixed keywords into the "sans" table - _without_ their leading at-sign. Again, all these - identifiers are reachable by the get_identifer table, so it's - not necessary to make objc_rid_sans_at a GC root. */ - if (reswords[i].word[0] == '@') - objc_rid_sans_at[(int) reswords[i].rid - (int) RID_AT_ENCODE] - = get_identifier (reswords[i].word + 1); - end ifobjc } - ifobjc - save_and_forget_protocol_qualifiers (); - end ifobjc - } - - const char * - init_parse (filename) - const char *filename; - { - add_c_tree_codes (); - - /* Make identifier nodes long enough for the language-specific slots. */ - set_identifier_size (sizeof (struct lang_identifier)); - - init_reswords (); - init_pragma (); - - return init_c_lex (filename); - } - - void - finish_parse () - { - cpp_finish (parse_in); - /* Call to cpp_destroy () omitted for performance reasons. */ - errorcount += cpp_errors (parse_in); } #define NAME(type) cpp_type2name (type) --- 3569,3575 ---- *************** yyerror (msgid) *** 3219,3225 **** else if (last_token == CPP_CHAR || last_token == CPP_WCHAR) { unsigned int val = TREE_INT_CST_LOW (yylval.ttype); ! const char *ell = (last_token == CPP_CHAR) ? "" : "L"; if (val <= UCHAR_MAX && ISGRAPH (val)) error ("%s before %s'%c'", string, ell, val); else --- 3585,3591 ---- else if (last_token == CPP_CHAR || last_token == CPP_WCHAR) { unsigned int val = TREE_INT_CST_LOW (yylval.ttype); ! const char *const ell = (last_token == CPP_CHAR) ? "" : "L"; if (val <= UCHAR_MAX && ISGRAPH (val)) error ("%s before %s'%c'", string, ell, val); else *************** yyerror (msgid) *** 3228,3236 **** else if (last_token == CPP_STRING || last_token == CPP_WSTRING) error ("%s before string constant", string); ! else if (last_token == CPP_NUMBER ! || last_token == CPP_INT ! || last_token == CPP_FLOAT) error ("%s before numeric constant", string); else if (last_token == CPP_NAME) error ("%s before \"%s\"", string, IDENTIFIER_POINTER (yylval.ttype)); --- 3594,3600 ---- else if (last_token == CPP_STRING || last_token == CPP_WSTRING) error ("%s before string constant", string); ! else if (last_token == CPP_NUMBER) error ("%s before numeric constant", string); else if (last_token == CPP_NAME) error ("%s before \"%s\"", string, IDENTIFIER_POINTER (yylval.ttype)); *************** static int *** 3242,3254 **** yylexname () { tree decl; ! if (C_IS_RESERVED_WORD (yylval.ttype)) { enum rid rid_code = C_RID_CODE (yylval.ttype); ! /* Return the canonical spelling for this keyword. */ ! yylval.ttype = ridpointers[(int) rid_code]; ! return rid_to_yy[(int) rid_code]; } decl = lookup_name (yylval.ttype); --- 3606,3652 ---- yylexname () { tree decl; ! ! ifobjc ! int objc_force_identifier = objc_need_raw_identifier; ! OBJC_NEED_RAW_IDENTIFIER (0); ! end ifobjc ! if (C_IS_RESERVED_WORD (yylval.ttype)) { enum rid rid_code = C_RID_CODE (yylval.ttype); ! ! ifobjc ! /* Turn non-typedefed refs to "id" into plain identifiers; this ! allows constructs like "void foo(id id);" to work. */ ! if (rid_code == RID_ID) ! { ! decl = lookup_name (yylval.ttype); ! if (decl == NULL_TREE || TREE_CODE (decl) != TYPE_DECL) ! return IDENTIFIER; ! } ! ! if (!OBJC_IS_AT_KEYWORD (rid_code) ! && (!OBJC_IS_PQ_KEYWORD (rid_code) || objc_pq_context)) ! end ifobjc ! { ! int yycode = rid_to_yy[(int) rid_code]; ! if (yycode == STRING_FUNC_NAME) ! { ! /* __FUNCTION__ and __PRETTY_FUNCTION__ get converted ! to string constants. */ ! const char *name = fname_string (rid_code); ! ! yylval.ttype = build_string (strlen (name) + 1, name); ! C_ARTIFICIAL_STRING_P (yylval.ttype) = 1; ! last_token = CPP_STRING; /* so yyerror won't choke */ ! return STRING; ! } ! ! /* Return the canonical spelling for this keyword. */ ! yylval.ttype = ridpointers[(int) rid_code]; ! return yycode; ! } } decl = lookup_name (yylval.ttype); *************** yylexname () *** 3256,3292 **** { if (TREE_CODE (decl) == TYPE_DECL) return TYPENAME; - /* A user-invisible read-only initialized variable - should be replaced by its value. - We handle only strings since that's the only case used in C. */ - else if (TREE_CODE (decl) == VAR_DECL - && DECL_IGNORED_P (decl) - && TREE_READONLY (decl) - && DECL_INITIAL (decl) != 0 - && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST) - { - tree stringval = DECL_INITIAL (decl), str; - - /* Copy the string value so that we won't clobber anything - if we put something in the TREE_CHAIN of this one. */ - str = build_string (TREE_STRING_LENGTH (stringval), - TREE_STRING_POINTER (stringval)); - if (yylval.ttype != func_id_node) - C_ARTIFICIAL_STRING_P (str) = 1; - yylval.ttype = str; - return STRING; - } } ! else if (doing_objc_thang) { tree objc_interface_decl = is_class_name (yylval.ttype); ! ! if (objc_interface_decl) { yylval.ttype = objc_interface_decl; return CLASSNAME; } } return IDENTIFIER; } --- 3654,3675 ---- { if (TREE_CODE (decl) == TYPE_DECL) return TYPENAME; } ! ifobjc ! else { tree objc_interface_decl = is_class_name (yylval.ttype); ! /* ObjC class names are in the same namespace as variables and ! typedefs, and hence are shadowed by local declarations. */ ! if (objc_interface_decl ! && (global_bindings_p () ! || (!objc_force_identifier && !decl))) { yylval.ttype = objc_interface_decl; return CLASSNAME; } } + end ifobjc return IDENTIFIER; } *************** _yylex () *** 3297,3305 **** { get_next: last_token = c_lex (&yylval.ttype); - ifobjc - reconsider: - end ifobjc switch (last_token) { case CPP_EQ: return '='; --- 3680,3685 ---- *************** end ifobjc *** 3321,3330 **** case CPP_AND_AND: return ANDAND; case CPP_OR_OR: return OROR; case CPP_QUERY: return '?'; - case CPP_COLON: return ':'; - case CPP_COMMA: return ','; case CPP_OPEN_PAREN: return '('; - case CPP_CLOSE_PAREN: return ')'; case CPP_EQ_EQ: yylval.code = EQ_EXPR; return EQCOMPARE; case CPP_NOT_EQ: yylval.code = NE_EXPR; return EQCOMPARE; case CPP_GREATER_EQ:yylval.code = GE_EXPR; return ARITHCOMPARE; --- 3701,3707 ---- *************** end ifobjc *** 3345,3351 **** case CPP_CLOSE_SQUARE: return ']'; case CPP_OPEN_BRACE: return '{'; case CPP_CLOSE_BRACE: return '}'; - case CPP_SEMICOLON: return ';'; case CPP_ELLIPSIS: return ELLIPSIS; case CPP_PLUS_PLUS: return PLUSPLUS; --- 3722,3727 ---- *************** end ifobjc *** 3353,3368 **** case CPP_DEREF: return POINTSAT; case CPP_DOT: return '.'; case CPP_EOF: ! if (cpp_pop_buffer (parse_in) == 0) ! return 0; ! goto get_next; case CPP_NAME: return yylexname (); - case CPP_INT: - case CPP_FLOAT: case CPP_NUMBER: case CPP_CHAR: case CPP_WCHAR: --- 3729,3747 ---- case CPP_DEREF: return POINTSAT; case CPP_DOT: return '.'; + /* The following tokens may affect the interpretation of any + identifiers following, if doing Objective-C. */ + case CPP_COLON: OBJC_NEED_RAW_IDENTIFIER (0); return ':'; + case CPP_COMMA: OBJC_NEED_RAW_IDENTIFIER (0); return ','; + case CPP_CLOSE_PAREN: OBJC_NEED_RAW_IDENTIFIER (0); return ')'; + case CPP_SEMICOLON: OBJC_NEED_RAW_IDENTIFIER (0); return ';'; + case CPP_EOF: ! return 0; case CPP_NAME: return yylexname (); case CPP_NUMBER: case CPP_CHAR: case CPP_WCHAR: *************** end ifobjc *** 3372,3398 **** case CPP_WSTRING: return STRING; ! /* This token is Objective-C specific. It gives the next ! token special significance. */ case CPP_ATSIGN: ifobjc ! last_token = c_lex (&yylval.ttype); ! if (last_token == CPP_STRING) ! return OBJC_STRING; ! else if (last_token == CPP_NAME) ! { ! int i; ! for (i = 0; i < N_at_reswords; i++) ! if (objc_rid_sans_at[i] == yylval.ttype) ! { ! int rid_code = i + (int) RID_AT_ENCODE; ! yylval.ttype = ridpointers[rid_code]; ! return rid_to_yy[rid_code]; ! } ! } ! error ("syntax error at '@' token"); ! goto reconsider; end ifobjc /* These tokens are C++ specific (and will not be generated in C mode, but let's be cautious). */ case CPP_SCOPE: --- 3751,3779 ---- case CPP_WSTRING: return STRING; ! /* This token is Objective-C specific. It gives the next token ! special significance. */ case CPP_ATSIGN: ifobjc ! { ! tree after_at; ! enum cpp_ttype after_at_type; ! ! after_at_type = c_lex (&after_at); ! ! if (after_at_type == CPP_NAME ! && C_IS_RESERVED_WORD (after_at) ! && OBJC_IS_AT_KEYWORD (C_RID_CODE (after_at))) ! { ! yylval.ttype = after_at; ! last_token = after_at_type; ! return rid_to_yy [(int) C_RID_CODE (after_at)]; ! } ! _cpp_backup_tokens (parse_in, 1); ! return '@'; ! } end ifobjc + /* These tokens are C++ specific (and will not be generated in C mode, but let's be cautious). */ case CPP_SCOPE: *************** yylex() *** 3429,3441 **** in order to build the compiler. */ void ! set_yydebug (value) int value; { #if YYDEBUG != 0 yydebug = value; #else ! warning ("YYDEBUG not defined."); #endif } --- 3810,3822 ---- in order to build the compiler. */ void ! c_set_yydebug (value) int value; { #if YYDEBUG != 0 yydebug = value; #else ! warning ("YYDEBUG not defined"); #endif } *************** yyprint (file, yychar, yyl) *** 3494,3508 **** /* Return something to represent absolute declarators containing a *. TARGET is the absolute declarator that the * contains. ! TYPE_QUALS is a list of modifiers such as const or volatile ! to apply to the pointer type, represented as identifiers. ! We return an INDIRECT_REF whose "contents" are TARGET ! and whose type is the modifier list. */ tree ! make_pointer_declarator (type_quals, target) ! tree type_quals, target; { ! return build1 (INDIRECT_REF, type_quals, target); } --- 3875,3895 ---- /* Return something to represent absolute declarators containing a *. TARGET is the absolute declarator that the * contains. ! TYPE_QUALS_ATTRS is a list of modifiers such as const or volatile ! to apply to the pointer type, represented as identifiers, possible mixed ! with attributes. ! We return an INDIRECT_REF whose "contents" are TARGET (inside a TREE_LIST, ! if attributes are present) and whose type is the modifier list. */ tree ! make_pointer_declarator (type_quals_attrs, target) ! tree type_quals_attrs, target; { ! tree quals, attrs; ! tree itarget = target; ! split_specs_attrs (type_quals_attrs, &quals, &attrs); ! if (attrs != NULL_TREE) ! itarget = tree_cons (attrs, target, NULL_TREE); ! return build1 (INDIRECT_REF, quals, itarget); } diff -Nrc3pad gcc-3.0.4/gcc/c-parse.y gcc-3.1/gcc/c-parse.y *** gcc-3.0.4/gcc/c-parse.y Wed Feb 20 19:42:19 2002 --- gcc-3.1/gcc/c-parse.y Wed May 15 02:41:47 2002 *************** *** 3,24 **** Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* This file defines the grammar of C and that of Objective C. ifobjc ... end ifobjc conditionals contain code for Objective C only. --- 3,24 ---- Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* This file defines the grammar of C and that of Objective C. ifobjc ... end ifobjc conditionals contain code for Objective C only. *************** Boston, MA 02111-1307, USA. */ *** 29,40 **** /* To whomever it may concern: I have heard that such a thing was once written by AT&T, but I have never seen it. */ ! %expect 53 %{ #include "config.h" #include "system.h" - #include #include "tree.h" #include "input.h" #include "cpplib.h" --- 29,39 ---- /* To whomever it may concern: I have heard that such a thing was once written by AT&T, but I have never seen it. */ ! %expect 10 /* shift/reduce conflicts, and no reduce/reduce conflicts. */ %{ #include "config.h" #include "system.h" #include "tree.h" #include "input.h" #include "cpplib.h" *************** Boston, MA 02111-1307, USA. */ *** 53,62 **** #endif - /* Since parsers are distinct for each language, put the language string - definition here. */ - const char * const language_string = "GNU C"; - /* Like YYERROR but do call yyerror. */ #define YYERROR1 { yyerror ("syntax error"); YYERROR; } --- 52,57 ---- *************** const char * const language_string = "GN *** 109,117 **** %token SIZEOF ENUM STRUCT UNION IF ELSE WHILE DO FOR SWITCH CASE DEFAULT %token BREAK CONTINUE RETURN GOTO ASM_KEYWORD TYPEOF ALIGNOF %token ATTRIBUTE EXTENSION LABEL ! %token REALPART IMAGPART VA_ARG %token PTR_VALUE PTR_BASE PTR_EXTENT /* Add precedence rules to solve dangling else s/r conflict */ %nonassoc IF %nonassoc ELSE --- 104,115 ---- %token SIZEOF ENUM STRUCT UNION IF ELSE WHILE DO FOR SWITCH CASE DEFAULT %token BREAK CONTINUE RETURN GOTO ASM_KEYWORD TYPEOF ALIGNOF %token ATTRIBUTE EXTENSION LABEL ! %token REALPART IMAGPART VA_ARG CHOOSE_EXPR TYPES_COMPATIBLE_P %token PTR_VALUE PTR_BASE PTR_EXTENT + /* function name can be a string const or a var decl. */ + %token STRING_FUNC_NAME VAR_FUNC_NAME + /* Add precedence rules to solve dangling else s/r conflict */ %nonassoc IF %nonassoc ELSE *************** const char * const language_string = "GN *** 141,163 **** %token INTERFACE IMPLEMENTATION END SELECTOR DEFS ENCODE %token CLASSNAME PUBLIC PRIVATE PROTECTED PROTOCOL OBJECTNAME CLASS ALIAS - /* Objective-C string constants in raw form. - yylval is an STRING_CST node. */ - %token OBJC_STRING - - %type unop %type ENUM STRUCT UNION IF ELSE WHILE DO FOR SWITCH CASE DEFAULT %type BREAK CONTINUE RETURN GOTO ASM_KEYWORD SIZEOF TYPEOF ALIGNOF %type identifier IDENTIFIER TYPENAME CONSTANT expr nonnull_exprlist exprlist %type expr_no_commas cast_expr unary_expr primary string STRING ! %type typed_declspecs reserved_declspecs ! %type typed_typespecs reserved_typespecquals ! %type declmods typespec typespecqual_reserved ! %type typed_declspecs_no_prefix_attr reserved_declspecs_no_prefix_attr ! %type declmods_no_prefix_attr ! %type SCSPEC TYPESPEC TYPE_QUAL nonempty_type_quals maybe_type_qual %type initdecls notype_initdecls initdcl notype_initdcl %type init maybeasm %type asm_operands nonnull_asm_operands asm_operand asm_clobbers --- 139,166 ---- %token INTERFACE IMPLEMENTATION END SELECTOR DEFS ENCODE %token CLASSNAME PUBLIC PRIVATE PROTECTED PROTOCOL OBJECTNAME CLASS ALIAS %type unop %type ENUM STRUCT UNION IF ELSE WHILE DO FOR SWITCH CASE DEFAULT %type BREAK CONTINUE RETURN GOTO ASM_KEYWORD SIZEOF TYPEOF ALIGNOF %type identifier IDENTIFIER TYPENAME CONSTANT expr nonnull_exprlist exprlist %type expr_no_commas cast_expr unary_expr primary string STRING ! %type declspecs_nosc_nots_nosa_noea declspecs_nosc_nots_nosa_ea ! %type declspecs_nosc_nots_sa_noea declspecs_nosc_nots_sa_ea ! %type declspecs_nosc_ts_nosa_noea declspecs_nosc_ts_nosa_ea ! %type declspecs_nosc_ts_sa_noea declspecs_nosc_ts_sa_ea ! %type declspecs_sc_nots_nosa_noea declspecs_sc_nots_nosa_ea ! %type declspecs_sc_nots_sa_noea declspecs_sc_nots_sa_ea ! %type declspecs_sc_ts_nosa_noea declspecs_sc_ts_nosa_ea ! %type declspecs_sc_ts_sa_noea declspecs_sc_ts_sa_ea ! %type declspecs_ts declspecs_nots ! %type declspecs_ts_nosa declspecs_nots_nosa ! %type declspecs_nosc_ts declspecs_nosc_nots declspecs_nosc declspecs ! %type maybe_type_quals_attrs typespec_nonattr typespec_attr ! %type typespec_reserved_nonattr typespec_reserved_attr ! %type typespec_nonreserved_nonattr ! ! %type SCSPEC TYPESPEC TYPE_QUAL maybe_type_qual %type initdecls notype_initdecls initdcl notype_initdcl %type init maybeasm %type asm_operands nonnull_asm_operands asm_operand asm_clobbers *************** const char * const language_string = "GN *** 171,189 **** %type declarator %type notype_declarator after_type_declarator %type parm_declarator ! %type structsp component_decl_list component_decl_list2 ! %type component_decl components component_declarator %type enumlist enumerator %type struct_head union_head enum_head ! %type typename absdcl absdcl1 type_quals ! %type xexpr parms parm identifiers %type parmlist parmlist_1 parmlist_2 %type parmlist_or_identifiers parmlist_or_identifiers_1 %type identifiers_or_typenames ! %type setspecs %type save_filename %type save_lineno --- 174,197 ---- %type declarator %type notype_declarator after_type_declarator %type parm_declarator + %type parm_declarator_starttypename parm_declarator_nostarttypename + %type array_declarator ! %type structsp_attr structsp_nonattr ! %type component_decl_list component_decl_list2 ! %type component_decl components components_notype component_declarator ! %type component_notype_declarator %type enumlist enumerator %type struct_head union_head enum_head ! %type typename absdcl absdcl1 absdcl1_ea absdcl1_noea ! %type direct_absdcl1 absdcl_maybe_attribute ! %type xexpr parms parm firstparm identifiers %type parmlist parmlist_1 parmlist_2 %type parmlist_or_identifiers parmlist_or_identifiers_1 %type identifiers_or_typenames ! %type setspecs setspecs_fp %type save_filename %type save_lineno *************** static int if_stmt_line; *** 204,224 **** static tree current_declspecs = NULL_TREE; static tree prefix_attributes = NULL_TREE; ! /* Stack of saved values of current_declspecs and prefix_attributes. */ static tree declspec_stack; /* For __extension__, save/restore the warning flags which are controlled by __extension__. */ ! #define SAVE_WARN_FLAGS() \ ! size_int (pedantic | (warn_pointer_arith << 1)) ! #define RESTORE_WARN_FLAGS(tval) \ ! do { \ ! int val = tree_low_cst (tval, 0); \ ! pedantic = val & 1; \ ! warn_pointer_arith = (val >> 1) & 1; \ } while (0) /* Tell yyparse how to print a token's value, if yydebug is set. */ #define YYPRINT(FILE,YYCHAR,YYLVAL) yyprint(FILE,YYCHAR,YYLVAL) --- 212,262 ---- static tree current_declspecs = NULL_TREE; static tree prefix_attributes = NULL_TREE; ! /* List of all the attributes applying to the identifier currently being ! declared; includes prefix_attributes and possibly some more attributes ! just after a comma. */ ! static tree all_prefix_attributes = NULL_TREE; ! ! /* Stack of saved values of current_declspecs, prefix_attributes and ! all_prefix_attributes. */ static tree declspec_stack; + /* PUSH_DECLSPEC_STACK is called from setspecs; POP_DECLSPEC_STACK + should be called from the productions making use of setspecs. */ + #define PUSH_DECLSPEC_STACK \ + do { \ + declspec_stack = tree_cons (build_tree_list (prefix_attributes, \ + all_prefix_attributes), \ + current_declspecs, \ + declspec_stack); \ + } while (0) + + #define POP_DECLSPEC_STACK \ + do { \ + current_declspecs = TREE_VALUE (declspec_stack); \ + prefix_attributes = TREE_PURPOSE (TREE_PURPOSE (declspec_stack)); \ + all_prefix_attributes = TREE_VALUE (TREE_PURPOSE (declspec_stack)); \ + declspec_stack = TREE_CHAIN (declspec_stack); \ + } while (0) + /* For __extension__, save/restore the warning flags which are controlled by __extension__. */ ! #define SAVE_WARN_FLAGS() \ ! size_int (pedantic \ ! | (warn_pointer_arith << 1) \ ! | (warn_traditional << 2)) ! ! #define RESTORE_WARN_FLAGS(tval) \ ! do { \ ! int val = tree_low_cst (tval, 0); \ ! pedantic = val & 1; \ ! warn_pointer_arith = (val >> 1) & 1; \ ! warn_traditional = (val >> 2) & 1; \ } while (0) + #define OBJC_NEED_RAW_IDENTIFIER(VAL) /* nothing */ + /* Tell yyparse how to print a token's value, if yydebug is set. */ #define YYPRINT(FILE,YYCHAR,YYLVAL) yyprint(FILE,YYCHAR,YYLVAL) *************** static void init_reswords PARAMS ((void) *** 234,242 **** --- 272,283 ---- void c_parse_init () { + init_reswords (); + ggc_add_tree_root (&declspec_stack, 1); ggc_add_tree_root (¤t_declspecs, 1); ggc_add_tree_root (&prefix_attributes, 1); + ggc_add_tree_root (&all_prefix_attributes, 1); } %} *************** program: /* empty */ *** 253,259 **** get us back to the global binding level. */ while (! global_bindings_p ()) poplevel (0, 0, 0); ! finish_file (); } ; --- 294,301 ---- get us back to the global binding level. */ while (! global_bindings_p ()) poplevel (0, 0, 0); ! finish_fname_decls (); ! finish_file (); } ; *************** datadef: *** 288,307 **** else if (!flag_traditional) warning ("data definition has no type or storage class"); ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | declmods setspecs notype_initdecls ';' ! { current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | typed_declspecs setspecs initdecls ';' ! { current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | declmods ';' ! { pedwarn ("empty declaration"); } ! | typed_declspecs ';' { shadow_tag ($1); } | error ';' | error '}' --- 330,341 ---- else if (!flag_traditional) warning ("data definition has no type or storage class"); ! POP_DECLSPEC_STACK; } ! | declspecs_nots setspecs notype_initdecls ';' ! { POP_DECLSPEC_STACK; } ! | declspecs_ts setspecs initdecls ';' ! { POP_DECLSPEC_STACK; } ! | declspecs ';' { shadow_tag ($1); } | error ';' | error '}' *************** datadef: *** 311,319 **** ; fndef: ! typed_declspecs setspecs declarator { if (! start_function (current_declspecs, $3, ! prefix_attributes, NULL_TREE)) YYERROR1; } old_style_parm_decls --- 345,353 ---- ; fndef: ! declspecs_ts setspecs declarator { if (! start_function (current_declspecs, $3, ! all_prefix_attributes)) YYERROR1; } old_style_parm_decls *************** fndef: *** 321,337 **** save_filename save_lineno compstmt_or_error { DECL_SOURCE_FILE (current_function_decl) = $7; DECL_SOURCE_LINE (current_function_decl) = $8; ! finish_function (0); ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | typed_declspecs setspecs declarator error ! { current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | declmods setspecs notype_declarator { if (! start_function (current_declspecs, $3, ! prefix_attributes, NULL_TREE)) YYERROR1; } old_style_parm_decls --- 355,367 ---- save_filename save_lineno compstmt_or_error { DECL_SOURCE_FILE (current_function_decl) = $7; DECL_SOURCE_LINE (current_function_decl) = $8; ! finish_function (0, 1); ! POP_DECLSPEC_STACK; } ! | declspecs_ts setspecs declarator error ! { POP_DECLSPEC_STACK; } ! | declspecs_nots setspecs notype_declarator { if (! start_function (current_declspecs, $3, ! all_prefix_attributes)) YYERROR1; } old_style_parm_decls *************** fndef: *** 339,355 **** save_filename save_lineno compstmt_or_error { DECL_SOURCE_FILE (current_function_decl) = $7; DECL_SOURCE_LINE (current_function_decl) = $8; ! finish_function (0); ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | declmods setspecs notype_declarator error ! { current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } | setspecs notype_declarator { if (! start_function (NULL_TREE, $2, ! prefix_attributes, NULL_TREE)) YYERROR1; } old_style_parm_decls --- 369,381 ---- save_filename save_lineno compstmt_or_error { DECL_SOURCE_FILE (current_function_decl) = $7; DECL_SOURCE_LINE (current_function_decl) = $8; ! finish_function (0, 1); ! POP_DECLSPEC_STACK; } ! | declspecs_nots setspecs notype_declarator error ! { POP_DECLSPEC_STACK; } | setspecs notype_declarator { if (! start_function (NULL_TREE, $2, ! all_prefix_attributes)) YYERROR1; } old_style_parm_decls *************** fndef: *** 357,370 **** save_filename save_lineno compstmt_or_error { DECL_SOURCE_FILE (current_function_decl) = $6; DECL_SOURCE_LINE (current_function_decl) = $7; ! finish_function (0); ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } | setspecs notype_declarator error ! { current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ; identifier: --- 383,392 ---- save_filename save_lineno compstmt_or_error { DECL_SOURCE_FILE (current_function_decl) = $6; DECL_SOURCE_LINE (current_function_decl) = $7; ! finish_function (0, 1); ! POP_DECLSPEC_STACK; } | setspecs notype_declarator error ! { POP_DECLSPEC_STACK; } ; identifier: *************** unary_expr: *** 421,438 **** overflow_warning ($$); } /* Refer to the address of a label as a pointer. */ | ANDAND identifier ! { tree label = lookup_label ($2); ! if (pedantic) ! pedwarn ("ISO C forbids `&&'"); ! if (label == 0) ! $$ = null_pointer_node; ! else ! { ! TREE_USED (label) = 1; ! $$ = build1 (ADDR_EXPR, ptr_type_node, label); ! TREE_CONSTANT ($$) = 1; ! } ! } /* This seems to be impossible on some machines, so let's turn it off. You can use __builtin_next_arg to find the anonymous stack args. | '&' ELLIPSIS --- 443,449 ---- overflow_warning ($$); } /* Refer to the address of a label as a pointer. */ | ANDAND identifier ! { $$ = finish_label_address_expr ($2); } /* This seems to be impossible on some machines, so let's turn it off. You can use __builtin_next_arg to find the anonymous stack args. | '&' ELLIPSIS *************** alignof: *** 480,494 **** cast_expr: unary_expr | '(' typename ')' cast_expr %prec UNARY ! { tree type; ! int SAVED_warn_strict_prototypes = warn_strict_prototypes; ! /* This avoids warnings about unprototyped casts on ! integers. E.g. "#define SIG_DFL (void(*)())0". */ ! if (TREE_CODE ($4) == INTEGER_CST) ! warn_strict_prototypes = 0; ! type = groktypename ($2); ! warn_strict_prototypes = SAVED_warn_strict_prototypes; ! $$ = build_c_cast (type, $4); } ; expr_no_commas: --- 491,497 ---- cast_expr: unary_expr | '(' typename ')' cast_expr %prec UNARY ! { $$ = c_cast_expr ($2, $4); } ; expr_no_commas: *************** expr_no_commas: *** 552,559 **** { char class; $$ = build_modify_expr ($1, NOP_EXPR, $3); class = TREE_CODE_CLASS (TREE_CODE ($$)); ! if (class == 'e' || class == '1' ! || class == '2' || class == '<') C_SET_EXP_ORIGINAL_CODE ($$, MODIFY_EXPR); } | expr_no_commas ASSIGN expr_no_commas --- 555,561 ---- { char class; $$ = build_modify_expr ($1, NOP_EXPR, $3); class = TREE_CODE_CLASS (TREE_CODE ($$)); ! if (IS_EXPR_CODE_CLASS (class)) C_SET_EXP_ORIGINAL_CODE ($$, MODIFY_EXPR); } | expr_no_commas ASSIGN expr_no_commas *************** expr_no_commas: *** 561,568 **** $$ = build_modify_expr ($1, $2, $3); /* This inhibits warnings in truthvalue_conversion. */ class = TREE_CODE_CLASS (TREE_CODE ($$)); ! if (class == 'e' || class == '1' ! || class == '2' || class == '<') C_SET_EXP_ORIGINAL_CODE ($$, ERROR_MARK); } ; --- 563,569 ---- $$ = build_modify_expr ($1, $2, $3); /* This inhibits warnings in truthvalue_conversion. */ class = TREE_CODE_CLASS (TREE_CODE ($$)); ! if (IS_EXPR_CODE_CLASS (class)) C_SET_EXP_ORIGINAL_CODE ($$, ERROR_MARK); } ; *************** primary: *** 577,615 **** | CONSTANT | string { $$ = combine_strings ($1); } | '(' typename ')' '{' { start_init (NULL_TREE, NULL, 0); $2 = groktypename ($2); really_start_incremental_init ($2); } initlist_maybe_comma '}' %prec UNARY ! { const char *name; ! tree result = pop_init_level (0); tree type = $2; finish_init (); if (pedantic && ! flag_isoc99) pedwarn ("ISO C89 forbids compound literals"); ! if (TYPE_NAME (type) != 0) ! { ! if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE) ! name = IDENTIFIER_POINTER (TYPE_NAME (type)); ! else ! name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))); ! } ! else ! name = ""; ! $$ = result; ! if (TREE_CODE (type) == ARRAY_TYPE && !COMPLETE_TYPE_P (type)) ! { ! int failure = complete_array_type (type, $$, 1); ! if (failure) ! abort (); ! } } | '(' expr ')' { char class = TREE_CODE_CLASS (TREE_CODE ($2)); ! if (class == 'e' || class == '1' ! || class == '2' || class == '<') C_SET_EXP_ORIGINAL_CODE ($2, ERROR_MARK); $$ = $2; } | '(' error ')' --- 578,601 ---- | CONSTANT | string { $$ = combine_strings ($1); } + | VAR_FUNC_NAME + { $$ = fname_decl (C_RID_CODE ($$), $$); } | '(' typename ')' '{' { start_init (NULL_TREE, NULL, 0); $2 = groktypename ($2); really_start_incremental_init ($2); } initlist_maybe_comma '}' %prec UNARY ! { tree constructor = pop_init_level (0); tree type = $2; finish_init (); if (pedantic && ! flag_isoc99) pedwarn ("ISO C89 forbids compound literals"); ! $$ = build_compound_literal (type, constructor); } | '(' expr ')' { char class = TREE_CODE_CLASS (TREE_CODE ($2)); ! if (IS_EXPR_CODE_CLASS (class)) C_SET_EXP_ORIGINAL_CODE ($2, ERROR_MARK); $$ = $2; } | '(' error ')' *************** primary: *** 641,657 **** { $$ = build_function_call ($1, $3); } | VA_ARG '(' expr_no_commas ',' typename ')' { $$ = build_va_arg ($3, groktypename ($5)); } | primary '[' expr ']' %prec '.' { $$ = build_array_ref ($1, $3); } | primary '.' identifier { ! $$ = build_component_ref ($1, $3); } | primary POINTSAT identifier { tree expr = build_indirect_ref ($1, "->"); ! $$ = build_component_ref (expr, $3); } | primary PLUSPLUS { $$ = build_unary_op (POSTINCREMENT_EXPR, $1, 0); } --- 627,664 ---- { $$ = build_function_call ($1, $3); } | VA_ARG '(' expr_no_commas ',' typename ')' { $$ = build_va_arg ($3, groktypename ($5)); } + + | CHOOSE_EXPR '(' expr_no_commas ',' expr_no_commas ',' expr_no_commas ')' + { + tree c; + + c = fold ($3); + STRIP_NOPS (c); + if (TREE_CODE (c) != INTEGER_CST) + error ("first argument to __builtin_choose_expr not a constant"); + $$ = integer_zerop (c) ? $7 : $5; + } + | TYPES_COMPATIBLE_P '(' typename ',' typename ')' + { + tree e1, e2; + + e1 = TYPE_MAIN_VARIANT (groktypename ($3)); + e2 = TYPE_MAIN_VARIANT (groktypename ($5)); + + $$ = comptypes (e1, e2) + ? build_int_2 (1, 0) : build_int_2 (0, 0); + } | primary '[' expr ']' %prec '.' { $$ = build_array_ref ($1, $3); } | primary '.' identifier { ! $$ = build_component_ref ($1, $3); } | primary POINTSAT identifier { tree expr = build_indirect_ref ($1, "->"); ! $$ = build_component_ref (expr, $3); } | primary PLUSPLUS { $$ = build_unary_op (POSTINCREMENT_EXPR, $1, 0); } *************** datadecls: *** 709,726 **** attribute suffix, or function defn with attribute prefix on first old style parm. */ datadecl: ! typed_declspecs_no_prefix_attr setspecs initdecls ';' ! { current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | declmods_no_prefix_attr setspecs notype_initdecls ';' ! { current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | typed_declspecs_no_prefix_attr ';' { shadow_tag_warned ($1, 1); pedwarn ("empty declaration"); } ! | declmods_no_prefix_attr ';' { pedwarn ("empty declaration"); } ; --- 716,729 ---- attribute suffix, or function defn with attribute prefix on first old style parm. */ datadecl: ! declspecs_ts_nosa setspecs initdecls ';' ! { POP_DECLSPEC_STACK; } ! | declspecs_nots_nosa setspecs notype_initdecls ';' ! { POP_DECLSPEC_STACK; } ! | declspecs_ts_nosa ';' { shadow_tag_warned ($1, 1); pedwarn ("empty declaration"); } ! | declspecs_nots_nosa ';' { pedwarn ("empty declaration"); } ; *************** lineno_decl: *** 739,851 **** for the sake of parm declarations nested in function declarators. */ setspecs: /* empty */ { pending_xref_error (); ! declspec_stack = tree_cons (prefix_attributes, ! current_declspecs, ! declspec_stack); split_specs_attrs ($0, ! ¤t_declspecs, &prefix_attributes); } ; ! /* ??? Yuck. See after_type_declarator. */ ! setattrs: /* empty */ ! { prefix_attributes = chainon (prefix_attributes, $0); } ; decl: ! typed_declspecs setspecs initdecls ';' ! { current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | declmods setspecs notype_initdecls ';' ! { current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | typed_declspecs setspecs nested_function ! { current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | declmods setspecs notype_nested_function ! { current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | typed_declspecs ';' { shadow_tag ($1); } - | declmods ';' - { pedwarn ("empty declaration"); } | extension decl { RESTORE_WARN_FLAGS ($1); } ; /* Declspecs which contain at least one type specifier or typedef name. (Just `const' or `volatile' is not enough.) A typedef'd name following these is taken as a name to be declared. Declspecs have a non-NULL TREE_VALUE, attributes do not. */ ! typed_declspecs: ! typespec reserved_declspecs ! { $$ = tree_cons (NULL_TREE, $1, $2); } ! | declmods typespec reserved_declspecs ! { $$ = chainon ($3, tree_cons (NULL_TREE, $2, $1)); } ; ! reserved_declspecs: /* empty */ ! { $$ = NULL_TREE; } ! | reserved_declspecs typespecqual_reserved ! { $$ = tree_cons (NULL_TREE, $2, $1); } ! | reserved_declspecs SCSPEC ! { if (extra_warnings) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER ($2)); ! $$ = tree_cons (NULL_TREE, $2, $1); } ! | reserved_declspecs attributes ! { $$ = tree_cons ($2, NULL_TREE, $1); } ; ! typed_declspecs_no_prefix_attr: ! typespec reserved_declspecs_no_prefix_attr ! { $$ = tree_cons (NULL_TREE, $1, $2); } ! | declmods_no_prefix_attr typespec reserved_declspecs_no_prefix_attr ! { $$ = chainon ($3, tree_cons (NULL_TREE, $2, $1)); } ; ! reserved_declspecs_no_prefix_attr: ! /* empty */ ! { $$ = NULL_TREE; } ! | reserved_declspecs_no_prefix_attr typespecqual_reserved ! { $$ = tree_cons (NULL_TREE, $2, $1); } ! | reserved_declspecs_no_prefix_attr SCSPEC ! { if (extra_warnings) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER ($2)); ! $$ = tree_cons (NULL_TREE, $2, $1); } ; ! /* List of just storage classes, type modifiers, and prefix attributes. ! A declaration can start with just this, but then it cannot be used ! to redeclare a typedef-name. ! Declspecs have a non-NULL TREE_VALUE, attributes do not. */ ! declmods: ! declmods_no_prefix_attr ! { $$ = $1; } ! | attributes ! { $$ = tree_cons ($1, NULL_TREE, NULL_TREE); } ! | declmods declmods_no_prefix_attr ! { $$ = chainon ($2, $1); } ! | declmods attributes ! { $$ = tree_cons ($2, NULL_TREE, $1); } ; ! declmods_no_prefix_attr: ! TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $1, NULL_TREE); TREE_STATIC ($$) = 1; } ! | SCSPEC ! { $$ = tree_cons (NULL_TREE, $1, NULL_TREE); } ! | declmods_no_prefix_attr TYPE_QUAL { $$ = tree_cons (NULL_TREE, $2, $1); TREE_STATIC ($$) = 1; } ! | declmods_no_prefix_attr SCSPEC { if (extra_warnings && TREE_STATIC ($1)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER ($2)); --- 742,1129 ---- for the sake of parm declarations nested in function declarators. */ setspecs: /* empty */ { pending_xref_error (); ! PUSH_DECLSPEC_STACK; split_specs_attrs ($0, ! ¤t_declspecs, &prefix_attributes); ! all_prefix_attributes = prefix_attributes; } ; ! /* Possibly attributes after a comma, which should reset all_prefix_attributes ! to prefix_attributes with these ones chained on the front. */ ! maybe_resetattrs: ! maybe_attribute ! { all_prefix_attributes = chainon ($1, prefix_attributes); } ; decl: ! declspecs_ts setspecs initdecls ';' ! { POP_DECLSPEC_STACK; } ! | declspecs_nots setspecs notype_initdecls ';' ! { POP_DECLSPEC_STACK; } ! | declspecs_ts setspecs nested_function ! { POP_DECLSPEC_STACK; } ! | declspecs_nots setspecs notype_nested_function ! { POP_DECLSPEC_STACK; } ! | declspecs ';' { shadow_tag ($1); } | extension decl { RESTORE_WARN_FLAGS ($1); } ; + /* A list of declaration specifiers. These are: + + - Storage class specifiers (SCSPEC), which for GCC currently include + function specifiers ("inline"). + + - Type specifiers (typespec_*). + + - Type qualifiers (TYPE_QUAL). + + - Attribute specifier lists (attributes). + + These are stored as a TREE_LIST; the head of the list is the last + item in the specifier list. Each entry in the list has either a + TREE_PURPOSE that is an attribute specifier list, or a TREE_VALUE that + is a single other specifier or qualifier; and a TREE_CHAIN that is the + rest of the list. TREE_STATIC is set on the list if something other + than a storage class specifier or attribute has been seen; this is used + to warn for the obsolescent usage of storage class specifiers other than + at the start of the list. (Doing this properly would require function + specifiers to be handled separately from storage class specifiers.) + + The various cases below are classified according to: + + (a) Whether a storage class specifier is included or not; some + places in the grammar disallow storage class specifiers (_sc or _nosc). + + (b) Whether a type specifier has been seen; after a type specifier, + a typedef name is an identifier to redeclare (_ts or _nots). + + (c) Whether the list starts with an attribute; in certain places, + the grammar requires specifiers that don't start with an attribute + (_sa or _nosa). + + (d) Whether the list ends with an attribute (or a specifier such that + any following attribute would have been parsed as part of that specifier); + this avoids shift-reduce conflicts in the parsing of attributes + (_ea or _noea). + + TODO: + + (i) Distinguish between function specifiers and storage class specifiers, + at least for the purpose of warnings about obsolescent usage. + + (ii) Halve the number of productions here by eliminating the _sc/_nosc + distinction and instead checking where required that storage class + specifiers aren't present. */ + /* Declspecs which contain at least one type specifier or typedef name. (Just `const' or `volatile' is not enough.) A typedef'd name following these is taken as a name to be declared. Declspecs have a non-NULL TREE_VALUE, attributes do not. */ ! declspecs_nosc_nots_nosa_noea: ! TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $1, NULL_TREE); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_nots_nosa_noea TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_nots_nosa_ea TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ; ! declspecs_nosc_nots_nosa_ea: ! declspecs_nosc_nots_nosa_noea attributes ! { $$ = tree_cons ($2, NULL_TREE, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! ; ! ! declspecs_nosc_nots_sa_noea: ! declspecs_nosc_nots_sa_noea TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_nots_sa_ea TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! ; ! ! declspecs_nosc_nots_sa_ea: ! attributes ! { $$ = tree_cons ($1, NULL_TREE, NULL_TREE); ! TREE_STATIC ($$) = 0; } ! | declspecs_nosc_nots_sa_noea attributes ! { $$ = tree_cons ($2, NULL_TREE, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! ; ! ! declspecs_nosc_ts_nosa_noea: ! typespec_nonattr ! { $$ = tree_cons (NULL_TREE, $1, NULL_TREE); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_ts_nosa_noea TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_ts_nosa_ea TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_ts_nosa_noea typespec_reserved_nonattr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_ts_nosa_ea typespec_reserved_nonattr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_nots_nosa_noea typespec_nonattr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_nots_nosa_ea typespec_nonattr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! ; ! ! declspecs_nosc_ts_nosa_ea: ! typespec_attr ! { $$ = tree_cons (NULL_TREE, $1, NULL_TREE); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_ts_nosa_noea attributes ! { $$ = tree_cons ($2, NULL_TREE, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! | declspecs_nosc_ts_nosa_noea typespec_reserved_attr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_ts_nosa_ea typespec_reserved_attr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_nots_nosa_noea typespec_attr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_nots_nosa_ea typespec_attr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! ; ! ! declspecs_nosc_ts_sa_noea: ! declspecs_nosc_ts_sa_noea TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_ts_sa_ea TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_ts_sa_noea typespec_reserved_nonattr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_ts_sa_ea typespec_reserved_nonattr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_nots_sa_noea typespec_nonattr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_nots_sa_ea typespec_nonattr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! ; ! ! declspecs_nosc_ts_sa_ea: ! declspecs_nosc_ts_sa_noea attributes ! { $$ = tree_cons ($2, NULL_TREE, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! | declspecs_nosc_ts_sa_noea typespec_reserved_attr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_ts_sa_ea typespec_reserved_attr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_nots_sa_noea typespec_attr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_nots_sa_ea typespec_attr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! ; ! ! declspecs_sc_nots_nosa_noea: ! SCSPEC ! { $$ = tree_cons (NULL_TREE, $1, NULL_TREE); ! TREE_STATIC ($$) = 0; } ! | declspecs_sc_nots_nosa_noea TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_sc_nots_nosa_ea TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_nots_nosa_noea SCSPEC ! { if (extra_warnings && TREE_STATIC ($1)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER ($2)); ! $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! | declspecs_nosc_nots_nosa_ea SCSPEC ! { if (extra_warnings && TREE_STATIC ($1)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER ($2)); ! $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! | declspecs_sc_nots_nosa_noea SCSPEC ! { if (extra_warnings && TREE_STATIC ($1)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER ($2)); ! $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! | declspecs_sc_nots_nosa_ea SCSPEC ! { if (extra_warnings && TREE_STATIC ($1)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER ($2)); ! $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ; ! declspecs_sc_nots_nosa_ea: ! declspecs_sc_nots_nosa_noea attributes ! { $$ = tree_cons ($2, NULL_TREE, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ; ! declspecs_sc_nots_sa_noea: ! declspecs_sc_nots_sa_noea TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_sc_nots_sa_ea TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_nots_sa_noea SCSPEC ! { if (extra_warnings && TREE_STATIC ($1)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER ($2)); ! $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! | declspecs_nosc_nots_sa_ea SCSPEC ! { if (extra_warnings && TREE_STATIC ($1)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER ($2)); ! $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! | declspecs_sc_nots_sa_noea SCSPEC ! { if (extra_warnings && TREE_STATIC ($1)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER ($2)); ! $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! | declspecs_sc_nots_sa_ea SCSPEC ! { if (extra_warnings && TREE_STATIC ($1)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER ($2)); ! $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ; ! declspecs_sc_nots_sa_ea: ! declspecs_sc_nots_sa_noea attributes ! { $$ = tree_cons ($2, NULL_TREE, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! ; ! declspecs_sc_ts_nosa_noea: ! declspecs_sc_ts_nosa_noea TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_sc_ts_nosa_ea TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_sc_ts_nosa_noea typespec_reserved_nonattr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_sc_ts_nosa_ea typespec_reserved_nonattr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_sc_nots_nosa_noea typespec_nonattr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_sc_nots_nosa_ea typespec_nonattr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_ts_nosa_noea SCSPEC ! { if (extra_warnings && TREE_STATIC ($1)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER ($2)); ! $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! | declspecs_nosc_ts_nosa_ea SCSPEC ! { if (extra_warnings && TREE_STATIC ($1)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER ($2)); ! $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! | declspecs_sc_ts_nosa_noea SCSPEC ! { if (extra_warnings && TREE_STATIC ($1)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER ($2)); ! $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! | declspecs_sc_ts_nosa_ea SCSPEC ! { if (extra_warnings && TREE_STATIC ($1)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER ($2)); ! $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ; ! declspecs_sc_ts_nosa_ea: ! declspecs_sc_ts_nosa_noea attributes ! { $$ = tree_cons ($2, NULL_TREE, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! | declspecs_sc_ts_nosa_noea typespec_reserved_attr ! { $$ = tree_cons (NULL_TREE, $2, $1); TREE_STATIC ($$) = 1; } ! | declspecs_sc_ts_nosa_ea typespec_reserved_attr { $$ = tree_cons (NULL_TREE, $2, $1); TREE_STATIC ($$) = 1; } ! | declspecs_sc_nots_nosa_noea typespec_attr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_sc_nots_nosa_ea typespec_attr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! ; ! ! declspecs_sc_ts_sa_noea: ! declspecs_sc_ts_sa_noea TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_sc_ts_sa_ea TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_sc_ts_sa_noea typespec_reserved_nonattr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_sc_ts_sa_ea typespec_reserved_nonattr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_sc_nots_sa_noea typespec_nonattr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_sc_nots_sa_ea typespec_nonattr ! { $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = 1; } ! | declspecs_nosc_ts_sa_noea SCSPEC ! { if (extra_warnings && TREE_STATIC ($1)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER ($2)); ! $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! | declspecs_nosc_ts_sa_ea SCSPEC ! { if (extra_warnings && TREE_STATIC ($1)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER ($2)); ! $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! | declspecs_sc_ts_sa_noea SCSPEC ! { if (extra_warnings && TREE_STATIC ($1)) ! warning ("`%s' is not at beginning of declaration", ! IDENTIFIER_POINTER ($2)); ! $$ = tree_cons (NULL_TREE, $2, $1); ! TREE_STATIC ($$) = TREE_STATIC ($1); } ! | declspecs_sc_ts_sa_ea SCSPEC { if (extra_warnings && TREE_STATIC ($1)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER ($2)); *************** declmods_no_prefix_attr: *** 853,883 **** TREE_STATIC ($$) = TREE_STATIC ($1); } ; ! /* Used instead of declspecs where storage classes are not allowed ! (that is, for typenames and structure components). ! Don't accept a typedef-name if anything but a modifier precedes it. */ ! typed_typespecs: ! typespec reserved_typespecquals ! { $$ = tree_cons (NULL_TREE, $1, $2); } ! | nonempty_type_quals typespec reserved_typespecquals ! { $$ = chainon ($3, tree_cons (NULL_TREE, $2, $1)); } ; ! reserved_typespecquals: /* empty */ { $$ = NULL_TREE; } ! | reserved_typespecquals typespecqual_reserved ! { $$ = tree_cons (NULL_TREE, $2, $1); } ; ! /* A typespec (but not a type qualifier). Once we have seen one of these in a declaration, ! if a typedef name appears then it is being redeclared. */ ! typespec: TYPESPEC ! | structsp ! | TYPENAME { /* For a typedef name, record the meaning, not the name. In case of `foo foo, bar;'. */ $$ = lookup_name ($1); } --- 1131,1285 ---- TREE_STATIC ($$) = TREE_STATIC ($1); } ; + declspecs_sc_ts_sa_ea: + declspecs_sc_ts_sa_noea attributes + { $$ = tree_cons ($2, NULL_TREE, $1); + TREE_STATIC ($$) = TREE_STATIC ($1); } + | declspecs_sc_ts_sa_noea typespec_reserved_attr + { $$ = tree_cons (NULL_TREE, $2, $1); + TREE_STATIC ($$) = 1; } + | declspecs_sc_ts_sa_ea typespec_reserved_attr + { $$ = tree_cons (NULL_TREE, $2, $1); + TREE_STATIC ($$) = 1; } + | declspecs_sc_nots_sa_noea typespec_attr + { $$ = tree_cons (NULL_TREE, $2, $1); + TREE_STATIC ($$) = 1; } + | declspecs_sc_nots_sa_ea typespec_attr + { $$ = tree_cons (NULL_TREE, $2, $1); + TREE_STATIC ($$) = 1; } + ; ! /* Particular useful classes of declspecs. */ ! declspecs_ts: ! declspecs_nosc_ts_nosa_noea ! | declspecs_nosc_ts_nosa_ea ! | declspecs_nosc_ts_sa_noea ! | declspecs_nosc_ts_sa_ea ! | declspecs_sc_ts_nosa_noea ! | declspecs_sc_ts_nosa_ea ! | declspecs_sc_ts_sa_noea ! | declspecs_sc_ts_sa_ea ! ; ! declspecs_nots: ! declspecs_nosc_nots_nosa_noea ! | declspecs_nosc_nots_nosa_ea ! | declspecs_nosc_nots_sa_noea ! | declspecs_nosc_nots_sa_ea ! | declspecs_sc_nots_nosa_noea ! | declspecs_sc_nots_nosa_ea ! | declspecs_sc_nots_sa_noea ! | declspecs_sc_nots_sa_ea ; ! declspecs_ts_nosa: ! declspecs_nosc_ts_nosa_noea ! | declspecs_nosc_ts_nosa_ea ! | declspecs_sc_ts_nosa_noea ! | declspecs_sc_ts_nosa_ea ! ; ! ! declspecs_nots_nosa: ! declspecs_nosc_nots_nosa_noea ! | declspecs_nosc_nots_nosa_ea ! | declspecs_sc_nots_nosa_noea ! | declspecs_sc_nots_nosa_ea ! ; ! ! declspecs_nosc_ts: ! declspecs_nosc_ts_nosa_noea ! | declspecs_nosc_ts_nosa_ea ! | declspecs_nosc_ts_sa_noea ! | declspecs_nosc_ts_sa_ea ! ; ! ! declspecs_nosc_nots: ! declspecs_nosc_nots_nosa_noea ! | declspecs_nosc_nots_nosa_ea ! | declspecs_nosc_nots_sa_noea ! | declspecs_nosc_nots_sa_ea ! ; ! ! declspecs_nosc: ! declspecs_nosc_ts_nosa_noea ! | declspecs_nosc_ts_nosa_ea ! | declspecs_nosc_ts_sa_noea ! | declspecs_nosc_ts_sa_ea ! | declspecs_nosc_nots_nosa_noea ! | declspecs_nosc_nots_nosa_ea ! | declspecs_nosc_nots_sa_noea ! | declspecs_nosc_nots_sa_ea ! ; ! ! declspecs: ! declspecs_nosc_nots_nosa_noea ! | declspecs_nosc_nots_nosa_ea ! | declspecs_nosc_nots_sa_noea ! | declspecs_nosc_nots_sa_ea ! | declspecs_nosc_ts_nosa_noea ! | declspecs_nosc_ts_nosa_ea ! | declspecs_nosc_ts_sa_noea ! | declspecs_nosc_ts_sa_ea ! | declspecs_sc_nots_nosa_noea ! | declspecs_sc_nots_nosa_ea ! | declspecs_sc_nots_sa_noea ! | declspecs_sc_nots_sa_ea ! | declspecs_sc_ts_nosa_noea ! | declspecs_sc_ts_nosa_ea ! | declspecs_sc_ts_sa_noea ! | declspecs_sc_ts_sa_ea ! ; ! ! /* A (possibly empty) sequence of type qualifiers and attributes. */ ! maybe_type_quals_attrs: ! /* empty */ { $$ = NULL_TREE; } ! | declspecs_nosc_nots ! { $$ = $1; } ; ! /* A type specifier (but not a type qualifier). Once we have seen one of these in a declaration, ! if a typedef name appears then it is being redeclared. ! The _reserved versions start with a reserved word and may appear anywhere ! in the declaration specifiers; the _nonreserved versions may only ! appear before any other type specifiers, and after that are (if names) ! being redeclared. ! ! FIXME: should the _nonreserved version be restricted to names being ! redeclared only? The other entries there relate only the GNU extensions ! and Objective C, and are historically parsed thus, and don't make sense ! after other type specifiers, but it might be cleaner to count them as ! _reserved. ! ! _attr means: specifiers that either end with attributes, ! or are such that any following attributes would ! be parsed as part of the specifier. ! ! _nonattr: specifiers. */ ! ! typespec_nonattr: ! typespec_reserved_nonattr ! | typespec_nonreserved_nonattr ! ; ! ! typespec_attr: ! typespec_reserved_attr ! ; ! ! typespec_reserved_nonattr: ! TYPESPEC ! { OBJC_NEED_RAW_IDENTIFIER (1); } ! | structsp_nonattr ! ; ! ! typespec_reserved_attr: ! structsp_attr ! ; ! ! typespec_nonreserved_nonattr: ! TYPENAME { /* For a typedef name, record the meaning, not the name. In case of `foo foo, bar;'. */ $$ = lookup_name ($1); } *************** typespec: TYPESPEC *** 887,907 **** { $$ = groktypename ($3); } ; ! /* A typespec that is a reserved word, or a type qualifier. */ ! ! typespecqual_reserved: TYPESPEC ! | TYPE_QUAL ! | structsp ! ; initdecls: initdcl ! | initdecls ',' initdcl ; notype_initdecls: notype_initdcl ! | notype_initdecls ',' initdcl ; maybeasm: --- 1289,1304 ---- { $$ = groktypename ($3); } ; ! /* typespec_nonreserved_attr does not exist. */ initdecls: initdcl ! | initdecls ',' maybe_resetattrs initdcl ; notype_initdecls: notype_initdcl ! | notype_initdecls ',' maybe_resetattrs notype_initdcl ; maybeasm: *************** maybeasm: *** 916,922 **** initdcl: declarator maybeasm maybe_attribute '=' { $$ = start_decl ($1, current_declspecs, 1, ! $3, prefix_attributes); start_init ($$, $2, global_bindings_p ()); } init /* Note how the declaration of the variable is in effect while its init is parsed! */ --- 1313,1319 ---- initdcl: declarator maybeasm maybe_attribute '=' { $$ = start_decl ($1, current_declspecs, 1, ! chainon ($3, all_prefix_attributes)); start_init ($$, $2, global_bindings_p ()); } init /* Note how the declaration of the variable is in effect while its init is parsed! */ *************** initdcl: *** 924,930 **** finish_decl ($5, $6, $2); } | declarator maybeasm maybe_attribute { tree d = start_decl ($1, current_declspecs, 0, ! $3, prefix_attributes); finish_decl (d, NULL_TREE, $2); } ; --- 1321,1327 ---- finish_decl ($5, $6, $2); } | declarator maybeasm maybe_attribute { tree d = start_decl ($1, current_declspecs, 0, ! chainon ($3, all_prefix_attributes)); finish_decl (d, NULL_TREE, $2); } ; *************** initdcl: *** 932,947 **** notype_initdcl: notype_declarator maybeasm maybe_attribute '=' { $$ = start_decl ($1, current_declspecs, 1, ! $3, prefix_attributes); start_init ($$, $2, global_bindings_p ()); } init /* Note how the declaration of the variable is in effect while its init is parsed! */ { finish_init (); - decl_attributes ($5, $3, prefix_attributes); finish_decl ($5, $6, $2); } | notype_declarator maybeasm maybe_attribute { tree d = start_decl ($1, current_declspecs, 0, ! $3, prefix_attributes); finish_decl (d, NULL_TREE, $2); } ; /* the * rules are dummies to accept the Apollo extended syntax --- 1329,1343 ---- notype_initdcl: notype_declarator maybeasm maybe_attribute '=' { $$ = start_decl ($1, current_declspecs, 1, ! chainon ($3, all_prefix_attributes)); start_init ($$, $2, global_bindings_p ()); } init /* Note how the declaration of the variable is in effect while its init is parsed! */ { finish_init (); finish_decl ($5, $6, $2); } | notype_declarator maybeasm maybe_attribute { tree d = start_decl ($1, current_declspecs, 0, ! chainon ($3, all_prefix_attributes)); finish_decl (d, NULL_TREE, $2); } ; /* the * rules are dummies to accept the Apollo extended syntax *************** nested_function: *** 1073,1079 **** push_function_context (); if (! start_function (current_declspecs, $1, ! prefix_attributes, NULL_TREE)) { pop_function_context (); YYERROR1; --- 1469,1475 ---- push_function_context (); if (! start_function (current_declspecs, $1, ! all_prefix_attributes)) { pop_function_context (); YYERROR1; *************** nested_function: *** 1091,1097 **** { tree decl = current_function_decl; DECL_SOURCE_FILE (decl) = $5; DECL_SOURCE_LINE (decl) = $6; ! finish_function (1); pop_function_context (); add_decl_stmt (decl); } ; --- 1487,1493 ---- { tree decl = current_function_decl; DECL_SOURCE_FILE (decl) = $5; DECL_SOURCE_LINE (decl) = $6; ! finish_function (1, 1); pop_function_context (); add_decl_stmt (decl); } ; *************** notype_nested_function: *** 1103,1109 **** push_function_context (); if (! start_function (current_declspecs, $1, ! prefix_attributes, NULL_TREE)) { pop_function_context (); YYERROR1; --- 1499,1505 ---- push_function_context (); if (! start_function (current_declspecs, $1, ! all_prefix_attributes)) { pop_function_context (); YYERROR1; *************** notype_nested_function: *** 1121,1127 **** { tree decl = current_function_decl; DECL_SOURCE_FILE (decl) = $5; DECL_SOURCE_LINE (decl) = $6; ! finish_function (1); pop_function_context (); add_decl_stmt (decl); } ; --- 1517,1523 ---- { tree decl = current_function_decl; DECL_SOURCE_FILE (decl) = $5; DECL_SOURCE_LINE (decl) = $6; ! finish_function (1, 1); pop_function_context (); add_decl_stmt (decl); } ; *************** declarator: *** 1137,1162 **** /* A declarator that is allowed only after an explicit typespec. */ after_type_declarator: ! '(' after_type_declarator ')' ! { $$ = $2; } | after_type_declarator '(' parmlist_or_identifiers %prec '.' { $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); } /* | after_type_declarator '(' error ')' %prec '.' { $$ = build_nt (CALL_EXPR, $1, NULL_TREE, NULL_TREE); poplevel (0, 0, 0); } */ ! | after_type_declarator '[' expr ']' %prec '.' ! { $$ = build_nt (ARRAY_REF, $1, $3); } ! | after_type_declarator '[' ']' %prec '.' ! { $$ = build_nt (ARRAY_REF, $1, NULL_TREE); } ! | '*' type_quals after_type_declarator %prec UNARY { $$ = make_pointer_declarator ($2, $3); } - /* ??? Yuck. setattrs is a quick hack. We can't use - prefix_attributes because $1 only applies to this - declarator. We assume setspecs has already been done. - setattrs also avoids 5 reduce/reduce conflicts (otherwise multiple - attributes could be recognized here or in `attributes'). */ - | attributes setattrs after_type_declarator - { $$ = $3; } | TYPENAME ; --- 1533,1549 ---- /* A declarator that is allowed only after an explicit typespec. */ after_type_declarator: ! '(' maybe_attribute after_type_declarator ')' ! { $$ = $2 ? tree_cons ($2, $3, NULL_TREE) : $3; } | after_type_declarator '(' parmlist_or_identifiers %prec '.' { $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); } /* | after_type_declarator '(' error ')' %prec '.' { $$ = build_nt (CALL_EXPR, $1, NULL_TREE, NULL_TREE); poplevel (0, 0, 0); } */ ! | after_type_declarator array_declarator %prec '.' ! { $$ = set_array_declarator_type ($2, $1, 0); } ! | '*' maybe_type_quals_attrs after_type_declarator %prec UNARY { $$ = make_pointer_declarator ($2, $3); } | TYPENAME ; *************** after_type_declarator: *** 1164,1197 **** in addition to notype_declarator. This is like after_type_declarator but does not allow a typedef name in parentheses as an identifier (because it would conflict with a function with that typedef as arg). */ - parm_declarator: ! parm_declarator '(' parmlist_or_identifiers %prec '.' { $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); } ! /* | parm_declarator '(' error ')' %prec '.' { $$ = build_nt (CALL_EXPR, $1, NULL_TREE, NULL_TREE); poplevel (0, 0, 0); } */ ! | parm_declarator '[' '*' ']' %prec '.' ! { $$ = build_nt (ARRAY_REF, $1, NULL_TREE); ! if (! flag_isoc99) ! error ("`[*]' in parameter declaration only allowed in ISO C 99"); ! } ! | parm_declarator '[' expr ']' %prec '.' ! { $$ = build_nt (ARRAY_REF, $1, $3); } ! | parm_declarator '[' ']' %prec '.' ! { $$ = build_nt (ARRAY_REF, $1, NULL_TREE); } ! | '*' type_quals parm_declarator %prec UNARY ! { $$ = make_pointer_declarator ($2, $3); } ! /* ??? Yuck. setattrs is a quick hack. We can't use ! prefix_attributes because $1 only applies to this ! declarator. We assume setspecs has already been done. ! setattrs also avoids 5 reduce/reduce conflicts (otherwise multiple ! attributes could be recognized here or in `attributes'). */ ! | attributes setattrs parm_declarator ! { $$ = $3; } | TYPENAME ; /* A declarator allowed whether or not there has been an explicit typespec. These cannot redeclare a typedef-name. */ --- 1551,1588 ---- in addition to notype_declarator. This is like after_type_declarator but does not allow a typedef name in parentheses as an identifier (because it would conflict with a function with that typedef as arg). */ parm_declarator: ! parm_declarator_starttypename ! | parm_declarator_nostarttypename ! ; ! ! parm_declarator_starttypename: ! parm_declarator_starttypename '(' parmlist_or_identifiers %prec '.' { $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); } ! /* | parm_declarator_starttypename '(' error ')' %prec '.' { $$ = build_nt (CALL_EXPR, $1, NULL_TREE, NULL_TREE); poplevel (0, 0, 0); } */ ! | parm_declarator_starttypename array_declarator %prec '.' ! { $$ = set_array_declarator_type ($2, $1, 0); } | TYPENAME ; + parm_declarator_nostarttypename: + parm_declarator_nostarttypename '(' parmlist_or_identifiers %prec '.' + { $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); } + /* | parm_declarator_nostarttypename '(' error ')' %prec '.' + { $$ = build_nt (CALL_EXPR, $1, NULL_TREE, NULL_TREE); + poplevel (0, 0, 0); } */ + | parm_declarator_nostarttypename array_declarator %prec '.' + { $$ = set_array_declarator_type ($2, $1, 0); } + | '*' maybe_type_quals_attrs parm_declarator_starttypename %prec UNARY + { $$ = make_pointer_declarator ($2, $3); } + | '*' maybe_type_quals_attrs parm_declarator_nostarttypename %prec UNARY + { $$ = make_pointer_declarator ($2, $3); } + | '(' maybe_attribute parm_declarator_nostarttypename ')' + { $$ = $2 ? tree_cons ($2, $3, NULL_TREE) : $3; } + ; + /* A declarator allowed whether or not there has been an explicit typespec. These cannot redeclare a typedef-name. */ *************** notype_declarator: *** 1201,1226 **** /* | notype_declarator '(' error ')' %prec '.' { $$ = build_nt (CALL_EXPR, $1, NULL_TREE, NULL_TREE); poplevel (0, 0, 0); } */ ! | '(' notype_declarator ')' ! { $$ = $2; } ! | '*' type_quals notype_declarator %prec UNARY { $$ = make_pointer_declarator ($2, $3); } ! | notype_declarator '[' '*' ']' %prec '.' ! { $$ = build_nt (ARRAY_REF, $1, NULL_TREE); ! if (! flag_isoc99) ! error ("`[*]' in parameter declaration only allowed in ISO C 99"); ! } ! | notype_declarator '[' expr ']' %prec '.' ! { $$ = build_nt (ARRAY_REF, $1, $3); } ! | notype_declarator '[' ']' %prec '.' ! { $$ = build_nt (ARRAY_REF, $1, NULL_TREE); } ! /* ??? Yuck. setattrs is a quick hack. We can't use ! prefix_attributes because $1 only applies to this ! declarator. We assume setspecs has already been done. ! setattrs also avoids 5 reduce/reduce conflicts (otherwise multiple ! attributes could be recognized here or in `attributes'). */ ! | attributes setattrs notype_declarator ! { $$ = $3; } | IDENTIFIER ; --- 1592,1603 ---- /* | notype_declarator '(' error ')' %prec '.' { $$ = build_nt (CALL_EXPR, $1, NULL_TREE, NULL_TREE); poplevel (0, 0, 0); } */ ! | '(' maybe_attribute notype_declarator ')' ! { $$ = $2 ? tree_cons ($2, $3, NULL_TREE) : $3; } ! | '*' maybe_type_quals_attrs notype_declarator %prec UNARY { $$ = make_pointer_declarator ($2, $3); } ! | notype_declarator array_declarator %prec '.' ! { $$ = set_array_declarator_type ($2, $1, 0); } | IDENTIFIER ; *************** enum_head: *** 1245,1251 **** { $$ = $2; } ; ! structsp: struct_head identifier '{' { $$ = start_struct (RECORD_TYPE, $2); /* Start scope of tag before parsing components. */ --- 1622,1634 ---- { $$ = $2; } ; ! /* structsp_attr: struct/union/enum specifiers that either ! end with attributes, or are such that any following attributes would ! be parsed as part of the struct/union/enum specifier. ! ! structsp_nonattr: other struct/union/enum specifiers. */ ! ! structsp_attr: struct_head identifier '{' { $$ = start_struct (RECORD_TYPE, $2); /* Start scope of tag before parsing components. */ *************** structsp: *** 1256,1263 **** { $$ = finish_struct (start_struct (RECORD_TYPE, NULL_TREE), $3, chainon ($1, $5)); } - | struct_head identifier - { $$ = xref_tag (RECORD_TYPE, $2); } | union_head identifier '{' { $$ = start_struct (UNION_TYPE, $2); } component_decl_list '}' maybe_attribute --- 1639,1644 ---- *************** structsp: *** 1266,1273 **** { $$ = finish_struct (start_struct (UNION_TYPE, NULL_TREE), $3, chainon ($1, $5)); } - | union_head identifier - { $$ = xref_tag (UNION_TYPE, $2); } | enum_head identifier '{' { $$ = start_enum ($2); } enumlist maybecomma_warn '}' maybe_attribute --- 1647,1652 ---- *************** structsp: *** 1278,1283 **** --- 1657,1669 ---- enumlist maybecomma_warn '}' maybe_attribute { $$ = finish_enum ($3, nreverse ($4), chainon ($1, $7)); } + ; + + structsp_nonattr: + struct_head identifier + { $$ = xref_tag (RECORD_TYPE, $2); } + | union_head identifier + { $$ = xref_tag (UNION_TYPE, $2); } | enum_head identifier { $$ = xref_tag (ENUMERAL_TYPE, $2); /* In ISO C, enumerated types can be referred to *************** component_decl_list2: /* empty */ *** 1315,1336 **** pedwarn ("extra semicolon in struct or union specified"); } ; - /* There is a shift-reduce conflict here, because `components' may - start with a `typename'. It happens that shifting (the default resolution) - does the right thing, because it treats the `typename' as part of - a `typed_typespecs'. - - It is possible that this same technique would allow the distinction - between `notype_initdecls' and `initdecls' to be eliminated. - But I am being cautious and not trying it. */ - component_decl: ! typed_typespecs setspecs components { $$ = $3; ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | typed_typespecs setspecs save_filename save_lineno maybe_attribute { /* Support for unnamed structs or unions as members of structs or unions (which is [a] useful and [b] supports --- 1701,1711 ---- pedwarn ("extra semicolon in struct or union specified"); } ; component_decl: ! declspecs_nosc_ts setspecs components { $$ = $3; ! POP_DECLSPEC_STACK; } ! | declspecs_nosc_ts setspecs save_filename save_lineno { /* Support for unnamed structs or unions as members of structs or unions (which is [a] useful and [b] supports *************** component_decl: *** 1339,1354 **** pedwarn ("ISO C doesn't support unnamed structs/unions"); $$ = grokfield($3, $4, NULL, current_declspecs, NULL_TREE); ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); ! } ! | nonempty_type_quals setspecs components { $$ = $3; ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | nonempty_type_quals { if (pedantic) pedwarn ("ISO C forbids member declarations with no members"); shadow_tag($1); --- 1714,1724 ---- pedwarn ("ISO C doesn't support unnamed structs/unions"); $$ = grokfield($3, $4, NULL, current_declspecs, NULL_TREE); ! POP_DECLSPEC_STACK; } ! | declspecs_nosc_nots setspecs components_notype { $$ = $3; ! POP_DECLSPEC_STACK; } ! | declspecs_nosc_nots { if (pedantic) pedwarn ("ISO C forbids member declarations with no members"); shadow_tag($1); *************** component_decl: *** 1362,1382 **** components: component_declarator ! | components ',' component_declarator ! { $$ = chainon ($1, $3); } ; component_declarator: save_filename save_lineno declarator maybe_attribute { $$ = grokfield ($1, $2, $3, current_declspecs, NULL_TREE); ! decl_attributes ($$, $4, prefix_attributes); } | save_filename save_lineno declarator ':' expr_no_commas maybe_attribute { $$ = grokfield ($1, $2, $3, current_declspecs, $5); ! decl_attributes ($$, $6, prefix_attributes); } | save_filename save_lineno ':' expr_no_commas maybe_attribute { $$ = grokfield ($1, $2, NULL_TREE, current_declspecs, $4); ! decl_attributes ($$, $5, prefix_attributes); } ; /* We chain the enumerators in reverse order. --- 1732,1771 ---- components: component_declarator ! | components ',' maybe_resetattrs component_declarator ! { $$ = chainon ($1, $4); } ! ; ! ! components_notype: ! component_notype_declarator ! | components_notype ',' maybe_resetattrs component_notype_declarator ! { $$ = chainon ($1, $4); } ; component_declarator: save_filename save_lineno declarator maybe_attribute { $$ = grokfield ($1, $2, $3, current_declspecs, NULL_TREE); ! decl_attributes (&$$, chainon ($4, all_prefix_attributes), 0); } | save_filename save_lineno declarator ':' expr_no_commas maybe_attribute { $$ = grokfield ($1, $2, $3, current_declspecs, $5); ! decl_attributes (&$$, chainon ($6, all_prefix_attributes), 0); } | save_filename save_lineno ':' expr_no_commas maybe_attribute { $$ = grokfield ($1, $2, NULL_TREE, current_declspecs, $4); ! decl_attributes (&$$, chainon ($5, all_prefix_attributes), 0); } ! ; ! ! component_notype_declarator: ! save_filename save_lineno notype_declarator maybe_attribute ! { $$ = grokfield ($1, $2, $3, current_declspecs, NULL_TREE); ! decl_attributes (&$$, chainon ($4, all_prefix_attributes), 0); } ! | save_filename save_lineno ! notype_declarator ':' expr_no_commas maybe_attribute ! { $$ = grokfield ($1, $2, $3, current_declspecs, $5); ! decl_attributes (&$$, chainon ($6, all_prefix_attributes), 0); } ! | save_filename save_lineno ':' expr_no_commas maybe_attribute ! { $$ = grokfield ($1, $2, NULL_TREE, current_declspecs, $4); ! decl_attributes (&$$, chainon ($5, all_prefix_attributes), 0); } ; /* We chain the enumerators in reverse order. *************** enumerator: *** 1404,1415 **** ; typename: ! typed_typespecs ! { pending_xref_error (); } absdcl ! { $$ = build_tree_list ($1, $3); } ! | nonempty_type_quals absdcl ! { $$ = build_tree_list ($1, $2); } ; absdcl: /* an absolute declarator */ --- 1793,1803 ---- ; typename: ! declspecs_nosc ! { pending_xref_error (); ! $$ = $1; } absdcl ! { $$ = build_tree_list ($2, $3); } ; absdcl: /* an absolute declarator */ *************** absdcl: /* an absolute declarator */ *** 1418,1461 **** | absdcl1 ; ! nonempty_type_quals: ! TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $1, NULL_TREE); } ! | nonempty_type_quals TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); } ; ! type_quals: ! /* empty */ ! { $$ = NULL_TREE; } ! | type_quals TYPE_QUAL ! { $$ = tree_cons (NULL_TREE, $2, $1); } ; ! absdcl1: /* a nonempty absolute declarator */ ! '(' absdcl1 ')' ! { $$ = $2; } ! /* `(typedef)1' is `int'. */ ! | '*' type_quals absdcl1 %prec UNARY { $$ = make_pointer_declarator ($2, $3); } ! | '*' type_quals %prec UNARY { $$ = make_pointer_declarator ($2, NULL_TREE); } ! | absdcl1 '(' parmlist %prec '.' { $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); } ! | absdcl1 '[' expr ']' %prec '.' ! { $$ = build_nt (ARRAY_REF, $1, $3); } ! | absdcl1 '[' ']' %prec '.' ! { $$ = build_nt (ARRAY_REF, $1, NULL_TREE); } ! | '(' parmlist %prec '.' { $$ = build_nt (CALL_EXPR, NULL_TREE, $2, NULL_TREE); } ! | '[' expr ']' %prec '.' ! { $$ = build_nt (ARRAY_REF, NULL_TREE, $2); } ! | '[' ']' %prec '.' ! { $$ = build_nt (ARRAY_REF, NULL_TREE, NULL_TREE); } ! /* ??? It appears we have to support attributes here, however ! using prefix_attributes is wrong. */ ! | attributes setattrs absdcl1 ! { $$ = $3; } ; /* A nonempty series of declarations and statements (possibly followed by --- 1806,1884 ---- | absdcl1 ; ! absdcl_maybe_attribute: /* absdcl maybe_attribute, but not just attributes */ ! /* empty */ ! { $$ = build_tree_list (build_tree_list (current_declspecs, ! NULL_TREE), ! all_prefix_attributes); } ! | absdcl1 ! { $$ = build_tree_list (build_tree_list (current_declspecs, ! $1), ! all_prefix_attributes); } ! | absdcl1_noea attributes ! { $$ = build_tree_list (build_tree_list (current_declspecs, ! $1), ! chainon ($2, all_prefix_attributes)); } ; ! absdcl1: /* a nonempty absolute declarator */ ! absdcl1_ea ! | absdcl1_noea ; ! absdcl1_noea: ! direct_absdcl1 ! | '*' maybe_type_quals_attrs absdcl1_noea { $$ = make_pointer_declarator ($2, $3); } ! ; ! ! absdcl1_ea: ! '*' maybe_type_quals_attrs { $$ = make_pointer_declarator ($2, NULL_TREE); } ! | '*' maybe_type_quals_attrs absdcl1_ea ! { $$ = make_pointer_declarator ($2, $3); } ! ; ! ! direct_absdcl1: ! '(' maybe_attribute absdcl1 ')' ! { $$ = $2 ? tree_cons ($2, $3, NULL_TREE) : $3; } ! | direct_absdcl1 '(' parmlist { $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); } ! | direct_absdcl1 array_declarator ! { $$ = set_array_declarator_type ($2, $1, 1); } ! | '(' parmlist { $$ = build_nt (CALL_EXPR, NULL_TREE, $2, NULL_TREE); } ! | array_declarator ! { $$ = set_array_declarator_type ($1, NULL_TREE, 1); } ! ; ! ! /* The [...] part of a declarator for an array type. */ ! ! array_declarator: ! '[' expr ']' ! { $$ = build_array_declarator ($2, NULL_TREE, 0, 0); } ! | '[' declspecs_nosc expr ']' ! { $$ = build_array_declarator ($3, $2, 0, 0); } ! | '[' ']' ! { $$ = build_array_declarator (NULL_TREE, NULL_TREE, 0, 0); } ! | '[' declspecs_nosc ']' ! { $$ = build_array_declarator (NULL_TREE, $2, 0, 0); } ! | '[' '*' ']' ! { $$ = build_array_declarator (NULL_TREE, NULL_TREE, 0, 1); } ! | '[' declspecs_nosc '*' ']' ! { $$ = build_array_declarator (NULL_TREE, $2, 0, 1); } ! | '[' SCSPEC expr ']' ! { if (C_RID_CODE ($2) != RID_STATIC) ! error ("storage class specifier in array declarator"); ! $$ = build_array_declarator ($3, NULL_TREE, 1, 0); } ! | '[' SCSPEC declspecs_nosc expr ']' ! { if (C_RID_CODE ($2) != RID_STATIC) ! error ("storage class specifier in array declarator"); ! $$ = build_array_declarator ($4, $3, 1, 0); } ! | '[' declspecs_nosc SCSPEC expr ']' ! { if (C_RID_CODE ($3) != RID_STATIC) ! error ("storage class specifier in array declarator"); ! $$ = build_array_declarator ($4, $2, 1, 0); } ; /* A nonempty series of declarations and statements (possibly followed by *************** pushlevel: /* empty */ *** 1523,1528 **** --- 1946,1952 ---- poplevel: /* empty */ { $$ = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0); } + ; /* Start and end blocks created for the new scopes of C99. */ c99_block_start: /* empty */ *************** compstmt_or_error: *** 1589,1595 **** ; compstmt_start: '{' { compstmt_count++; ! $$ = c_begin_compound_stmt (); } compstmt_nostart: '}' { $$ = convert (void_type_node, integer_zero_node); } --- 2013,2020 ---- ; compstmt_start: '{' { compstmt_count++; ! $$ = c_begin_compound_stmt (); } ! ; compstmt_nostart: '}' { $$ = convert (void_type_node, integer_zero_node); } *************** compstmt_primary_start: *** 1621,1629 **** --- 2046,2056 ---- compstmt_count++; $$ = add_stmt (build_stmt (COMPOUND_STMT, last_tree)); } + ; compstmt: compstmt_start compstmt_nostart { RECHAIN_STMTS ($1, COMPOUND_BODY ($1)); + last_expr_type = NULL_TREE; $$ = $1; } ; *************** lineno_stmt: *** 1711,1717 **** /* ??? We currently have no way of recording the filename for a statement. This probably matters little in practice at the moment, ! but I suspect that problems will ocurr when doing inlining at the tree level. */ } } --- 2138,2144 ---- /* ??? We currently have no way of recording the filename for a statement. This probably matters little in practice at the moment, ! but I suspect that problems will occur when doing inlining at the tree level. */ } } *************** stmt: *** 1825,1850 **** $$ = c_expand_return ($2); } | ASM_KEYWORD maybe_type_qual '(' expr ')' ';' { stmt_count++; ! STRIP_NOPS ($4); ! if ((TREE_CODE ($4) == ADDR_EXPR ! && TREE_CODE (TREE_OPERAND ($4, 0)) == STRING_CST) ! || TREE_CODE ($4) == STRING_CST) ! { ! if (TREE_CODE ($4) == ADDR_EXPR) ! $4 = TREE_OPERAND ($4, 0); ! if (TREE_CHAIN ($4)) ! $4 = combine_strings ($4); ! $$ = add_stmt (build_stmt (ASM_STMT, NULL_TREE, $4, ! NULL_TREE, NULL_TREE, ! NULL_TREE)); ! ASM_INPUT_P ($$) = 1; ! } ! else ! { ! error ("argument of `asm' is not a constant string"); ! $$ = NULL_TREE; ! } ! } /* This is the case with just output operands. */ | ASM_KEYWORD maybe_type_qual '(' expr ':' asm_operands ')' ';' { stmt_count++; --- 2252,2258 ---- $$ = c_expand_return ($2); } | ASM_KEYWORD maybe_type_qual '(' expr ')' ';' { stmt_count++; ! $$ = simple_asm_stmt ($4); } /* This is the case with just output operands. */ | ASM_KEYWORD maybe_type_qual '(' expr ':' asm_operands ')' ';' { stmt_count++; *************** label: CASE expr_no_commas ':' *** 1899,1905 **** stmt_count++; if (label) { ! decl_attributes (label, $5, NULL_TREE); $$ = add_stmt (build_stmt (LABEL_STMT, label)); } else --- 2307,2313 ---- stmt_count++; if (label) { ! decl_attributes (&label, $5, 0); $$ = add_stmt (build_stmt (LABEL_STMT, label)); } else *************** nonnull_asm_operands: *** 1938,1944 **** asm_operand: STRING '(' expr ')' ! { $$ = build_tree_list ($1, $3); } ; asm_clobbers: --- 2346,2354 ---- asm_operand: STRING '(' expr ')' ! { $$ = build_tree_list (build_tree_list (NULL_TREE, $1), $3); } ! | '[' identifier ']' STRING '(' expr ')' ! { $$ = build_tree_list (build_tree_list ($2, $4), $6); } ; asm_clobbers: *************** asm_clobbers: *** 1949,1961 **** ; /* This is what appears inside the parens in a function declarator. ! Its value is a list of ..._TYPE nodes. */ parmlist: { pushlevel (0); clear_parm_order (); declare_parm_level (0); } parmlist_1 ! { $$ = $2; parmlist_tags_warning (); poplevel (0, 0, 0); } ; --- 2359,2375 ---- ; /* This is what appears inside the parens in a function declarator. ! Its value is a list of ..._TYPE nodes. Attributes must appear here ! to avoid a conflict with their appearance after an open parenthesis ! in an abstract declarator, as in ! "void bar (int (__attribute__((__mode__(SI))) int foo));". */ parmlist: + maybe_attribute { pushlevel (0); clear_parm_order (); declare_parm_level (0); } parmlist_1 ! { $$ = $3; parmlist_tags_warning (); poplevel (0, 0, 0); } ; *************** parmlist_1: *** 1970,1977 **** for (parm = getdecls (); parm; parm = TREE_CHAIN (parm)) TREE_ASM_WRITTEN (parm) = 1; clear_parm_order (); } parmlist_1 ! { $$ = $4; } | error ')' { $$ = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); } ; --- 2384,2394 ---- for (parm = getdecls (); parm; parm = TREE_CHAIN (parm)) TREE_ASM_WRITTEN (parm) = 1; clear_parm_order (); } + maybe_attribute + { /* Dummy action so attributes are in known place + on parser stack. */ } parmlist_1 ! { $$ = $6; } | error ')' { $$ = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); } ; *************** parmlist_2: /* empty */ *** 1997,2003 **** ; parms: ! parm { push_parm_decl ($1); } | parms ',' parm { push_parm_decl ($3); } --- 2414,2420 ---- ; parms: ! firstparm { push_parm_decl ($1); } | parms ',' parm { push_parm_decl ($3); } *************** parms: *** 2006,2063 **** /* A single parameter declaration or parameter type name, as found in a parmlist. */ parm: ! typed_declspecs setspecs parm_declarator maybe_attribute { $$ = build_tree_list (build_tree_list (current_declspecs, $3), ! build_tree_list (prefix_attributes, ! $4)); ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | typed_declspecs setspecs notype_declarator maybe_attribute { $$ = build_tree_list (build_tree_list (current_declspecs, $3), ! build_tree_list (prefix_attributes, ! $4)); ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | typed_declspecs setspecs absdcl maybe_attribute { $$ = build_tree_list (build_tree_list (current_declspecs, $3), ! build_tree_list (prefix_attributes, ! $4)); ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! | declmods setspecs notype_declarator maybe_attribute { $$ = build_tree_list (build_tree_list (current_declspecs, $3), ! build_tree_list (prefix_attributes, ! $4)); ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ! ! | declmods setspecs absdcl maybe_attribute { $$ = build_tree_list (build_tree_list (current_declspecs, $3), ! build_tree_list (prefix_attributes, ! $4)); ! current_declspecs = TREE_VALUE (declspec_stack); ! prefix_attributes = TREE_PURPOSE (declspec_stack); ! declspec_stack = TREE_CHAIN (declspec_stack); } ; /* This is used in a function definition where either a parmlist or an identifier list is ok. Its value is a list of ..._TYPE nodes or a list of identifiers. */ parmlist_or_identifiers: { pushlevel (0); clear_parm_order (); declare_parm_level (1); } parmlist_or_identifiers_1 ! { $$ = $2; parmlist_tags_warning (); poplevel (0, 0, 0); } ; --- 2423,2495 ---- /* A single parameter declaration or parameter type name, as found in a parmlist. */ parm: ! declspecs_ts setspecs parm_declarator maybe_attribute { $$ = build_tree_list (build_tree_list (current_declspecs, $3), ! chainon ($4, all_prefix_attributes)); ! POP_DECLSPEC_STACK; } ! | declspecs_ts setspecs notype_declarator maybe_attribute { $$ = build_tree_list (build_tree_list (current_declspecs, $3), ! chainon ($4, all_prefix_attributes)); ! POP_DECLSPEC_STACK; } ! | declspecs_ts setspecs absdcl_maybe_attribute ! { $$ = $3; ! POP_DECLSPEC_STACK; } ! | declspecs_nots setspecs notype_declarator maybe_attribute { $$ = build_tree_list (build_tree_list (current_declspecs, $3), ! chainon ($4, all_prefix_attributes)); ! POP_DECLSPEC_STACK; } ! ! | declspecs_nots setspecs absdcl_maybe_attribute ! { $$ = $3; ! POP_DECLSPEC_STACK; } ! ; ! ! /* The first parm, which must suck attributes from off the top of the parser ! stack. */ ! firstparm: ! declspecs_ts_nosa setspecs_fp parm_declarator maybe_attribute { $$ = build_tree_list (build_tree_list (current_declspecs, $3), ! chainon ($4, all_prefix_attributes)); ! POP_DECLSPEC_STACK; } ! | declspecs_ts_nosa setspecs_fp notype_declarator maybe_attribute { $$ = build_tree_list (build_tree_list (current_declspecs, $3), ! chainon ($4, all_prefix_attributes)); ! POP_DECLSPEC_STACK; } ! | declspecs_ts_nosa setspecs_fp absdcl_maybe_attribute ! { $$ = $3; ! POP_DECLSPEC_STACK; } ! | declspecs_nots_nosa setspecs_fp notype_declarator maybe_attribute ! { $$ = build_tree_list (build_tree_list (current_declspecs, ! $3), ! chainon ($4, all_prefix_attributes)); ! POP_DECLSPEC_STACK; } ! ! | declspecs_nots_nosa setspecs_fp absdcl_maybe_attribute ! { $$ = $3; ! POP_DECLSPEC_STACK; } ! ; ! ! setspecs_fp: ! setspecs ! { prefix_attributes = chainon (prefix_attributes, $-2); ! all_prefix_attributes = prefix_attributes; } ; /* This is used in a function definition where either a parmlist or an identifier list is ok. Its value is a list of ..._TYPE nodes or a list of identifiers. */ parmlist_or_identifiers: + maybe_attribute { pushlevel (0); clear_parm_order (); declare_parm_level (1); } parmlist_or_identifiers_1 ! { $$ = $3; parmlist_tags_warning (); poplevel (0, 0, 0); } ; *************** parmlist_or_identifiers_1: *** 2069,2075 **** for (t = $1; t; t = TREE_CHAIN (t)) if (TREE_VALUE (t) == NULL_TREE) error ("`...' in old-style identifier list"); ! $$ = tree_cons (NULL_TREE, NULL_TREE, $1); } ; /* A nonempty list of identifiers. */ --- 2501,2515 ---- for (t = $1; t; t = TREE_CHAIN (t)) if (TREE_VALUE (t) == NULL_TREE) error ("`...' in old-style identifier list"); ! $$ = tree_cons (NULL_TREE, NULL_TREE, $1); ! ! /* Make sure we have a parmlist after attributes. */ ! if ($-1 != 0 ! && (TREE_CODE ($$) != TREE_LIST ! || TREE_PURPOSE ($$) == 0 ! || TREE_CODE (TREE_PURPOSE ($$)) != PARM_DECL)) ! YYERROR1; ! } ; /* A nonempty list of identifiers. */ *************** extension: *** 2092,2098 **** EXTENSION { $$ = SAVE_WARN_FLAGS(); pedantic = 0; ! warn_pointer_arith = 0; } ; %% --- 2532,2539 ---- EXTENSION { $$ = SAVE_WARN_FLAGS(); pedantic = 0; ! warn_pointer_arith = 0; ! warn_traditional = 0; } ; %% *************** static const struct resword reswords[] = *** 2122,2127 **** --- 2563,2570 ---- { { "_Bool", RID_BOOL, 0 }, { "_Complex", RID_COMPLEX, 0 }, + { "__FUNCTION__", RID_FUNCTION_NAME, 0 }, + { "__PRETTY_FUNCTION__", RID_PRETTY_FUNCTION_NAME, 0 }, { "__alignof", RID_ALIGNOF, 0 }, { "__alignof__", RID_ALIGNOF, 0 }, { "__asm", RID_ASM, 0 }, *************** static const struct resword reswords[] = *** 2130,2141 **** --- 2573,2587 ---- { "__attribute__", RID_ATTRIBUTE, 0 }, { "__bounded", RID_BOUNDED, 0 }, { "__bounded__", RID_BOUNDED, 0 }, + { "__builtin_choose_expr", RID_CHOOSE_EXPR, 0 }, + { "__builtin_types_compatible_p", RID_TYPES_COMPATIBLE_P, 0 }, { "__builtin_va_arg", RID_VA_ARG, 0 }, { "__complex", RID_COMPLEX, 0 }, { "__complex__", RID_COMPLEX, 0 }, { "__const", RID_CONST, 0 }, { "__const__", RID_CONST, 0 }, { "__extension__", RID_EXTENSION, 0 }, + { "__func__", RID_C99_FUNCTION_NAME, 0 }, { "__imag", RID_IMAGPART, 0 }, { "__imag__", RID_IMAGPART, 0 }, { "__inline", RID_INLINE, 0 }, *************** static const short rid_to_yy[RID_MAX] = *** 2274,2279 **** --- 2720,2732 ---- /* RID_PTREXTENT */ PTR_EXTENT, /* RID_PTRVALUE */ PTR_VALUE, + /* RID_CHOOSE_EXPR */ CHOOSE_EXPR, + /* RID_TYPES_COMPATIBLE_P */ TYPES_COMPATIBLE_P, + + /* RID_FUNCTION_NAME */ STRING_FUNC_NAME, + /* RID_PRETTY_FUNCTION_NAME */ STRING_FUNC_NAME, + /* RID_C99_FUNCTION_NAME */ VAR_FUNC_NAME, + /* C++ */ /* RID_BOOL */ TYPESPEC, /* RID_WCHAR */ 0, *************** static const short rid_to_yy[RID_MAX] = *** 2315,2321 **** /* RID_BITAND */ 0, /* RID_BITOR */ 0, /* RID_COMPL */ 0, ! /* Objective C */ /* RID_ID */ OBJECTNAME, /* RID_AT_ENCODE */ ENCODE, --- 2768,2774 ---- /* RID_BITAND */ 0, /* RID_BITOR */ 0, /* RID_COMPL */ 0, ! /* Objective C */ /* RID_ID */ OBJECTNAME, /* RID_AT_ENCODE */ ENCODE, *************** static const short rid_to_yy[RID_MAX] = *** 2332,2347 **** /* RID_AT_IMPLEMENTATION */ IMPLEMENTATION }; - static void init_reswords () { unsigned int i; tree id; ! int mask = ((doing_objc_thang ? 0 : D_OBJC) ! | (flag_isoc99 ? 0 : D_C89) | (flag_traditional ? D_TRAD : 0) ! | (flag_no_asm ? (flag_isoc99 ? D_EXT : D_EXT|D_EXT89) : 0)); /* It is not necessary to register ridpointers as a GC root, because all the trees it points to are permanently interned in the --- 2785,2801 ---- /* RID_AT_IMPLEMENTATION */ IMPLEMENTATION }; static void init_reswords () { unsigned int i; tree id; ! int mask = (flag_isoc99 ? 0 : D_C89) | (flag_traditional ? D_TRAD : 0) ! | (flag_no_asm ? (flag_isoc99 ? D_EXT : D_EXT|D_EXT89) : 0); ! ! if (c_language != clk_objective_c) ! mask |= D_OBJC; /* It is not necessary to register ridpointers as a GC root, because all the trees it points to are permanently interned in the *************** init_reswords () *** 2358,2390 **** C_RID_CODE (id) = reswords[i].rid; C_IS_RESERVED_WORD (id) = 1; ridpointers [(int) reswords[i].rid] = id; - } } - const char * - init_parse (filename) - const char *filename; - { - add_c_tree_codes (); - - /* Make identifier nodes long enough for the language-specific slots. */ - set_identifier_size (sizeof (struct lang_identifier)); - - init_reswords (); - init_pragma (); - - return init_c_lex (filename); - } - - void - finish_parse () - { - cpp_finish (parse_in); - /* Call to cpp_destroy () omitted for performance reasons. */ - errorcount += cpp_errors (parse_in); - } - #define NAME(type) cpp_type2name (type) static void --- 2812,2820 ---- *************** yyerror (msgid) *** 2398,2404 **** else if (last_token == CPP_CHAR || last_token == CPP_WCHAR) { unsigned int val = TREE_INT_CST_LOW (yylval.ttype); ! const char *ell = (last_token == CPP_CHAR) ? "" : "L"; if (val <= UCHAR_MAX && ISGRAPH (val)) error ("%s before %s'%c'", string, ell, val); else --- 2828,2834 ---- else if (last_token == CPP_CHAR || last_token == CPP_WCHAR) { unsigned int val = TREE_INT_CST_LOW (yylval.ttype); ! const char *const ell = (last_token == CPP_CHAR) ? "" : "L"; if (val <= UCHAR_MAX && ISGRAPH (val)) error ("%s before %s'%c'", string, ell, val); else *************** yyerror (msgid) *** 2407,2415 **** else if (last_token == CPP_STRING || last_token == CPP_WSTRING) error ("%s before string constant", string); ! else if (last_token == CPP_NUMBER ! || last_token == CPP_INT ! || last_token == CPP_FLOAT) error ("%s before numeric constant", string); else if (last_token == CPP_NAME) error ("%s before \"%s\"", string, IDENTIFIER_POINTER (yylval.ttype)); --- 2837,2843 ---- else if (last_token == CPP_STRING || last_token == CPP_WSTRING) error ("%s before string constant", string); ! else if (last_token == CPP_NUMBER) error ("%s before numeric constant", string); else if (last_token == CPP_NAME) error ("%s before \"%s\"", string, IDENTIFIER_POINTER (yylval.ttype)); *************** static int *** 2421,2433 **** yylexname () { tree decl; ! if (C_IS_RESERVED_WORD (yylval.ttype)) { enum rid rid_code = C_RID_CODE (yylval.ttype); ! /* Return the canonical spelling for this keyword. */ ! yylval.ttype = ridpointers[(int) rid_code]; ! return rid_to_yy[(int) rid_code]; } decl = lookup_name (yylval.ttype); --- 2849,2878 ---- yylexname () { tree decl; ! ! if (C_IS_RESERVED_WORD (yylval.ttype)) { enum rid rid_code = C_RID_CODE (yylval.ttype); ! ! { ! int yycode = rid_to_yy[(int) rid_code]; ! if (yycode == STRING_FUNC_NAME) ! { ! /* __FUNCTION__ and __PRETTY_FUNCTION__ get converted ! to string constants. */ ! const char *name = fname_string (rid_code); ! ! yylval.ttype = build_string (strlen (name) + 1, name); ! C_ARTIFICIAL_STRING_P (yylval.ttype) = 1; ! last_token = CPP_STRING; /* so yyerror won't choke */ ! return STRING; ! } ! ! /* Return the canonical spelling for this keyword. */ ! yylval.ttype = ridpointers[(int) rid_code]; ! return yycode; ! } } decl = lookup_name (yylval.ttype); *************** yylexname () *** 2435,2470 **** { if (TREE_CODE (decl) == TYPE_DECL) return TYPENAME; - /* A user-invisible read-only initialized variable - should be replaced by its value. - We handle only strings since that's the only case used in C. */ - else if (TREE_CODE (decl) == VAR_DECL - && DECL_IGNORED_P (decl) - && TREE_READONLY (decl) - && DECL_INITIAL (decl) != 0 - && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST) - { - tree stringval = DECL_INITIAL (decl), str; - - /* Copy the string value so that we won't clobber anything - if we put something in the TREE_CHAIN of this one. */ - str = build_string (TREE_STRING_LENGTH (stringval), - TREE_STRING_POINTER (stringval)); - if (yylval.ttype != func_id_node) - C_ARTIFICIAL_STRING_P (str) = 1; - yylval.ttype = str; - return STRING; - } - } - else if (doing_objc_thang) - { - tree objc_interface_decl = is_class_name (yylval.ttype); - - if (objc_interface_decl) - { - yylval.ttype = objc_interface_decl; - return CLASSNAME; - } } return IDENTIFIER; --- 2880,2885 ---- *************** _yylex () *** 2497,2506 **** case CPP_AND_AND: return ANDAND; case CPP_OR_OR: return OROR; case CPP_QUERY: return '?'; - case CPP_COLON: return ':'; - case CPP_COMMA: return ','; case CPP_OPEN_PAREN: return '('; - case CPP_CLOSE_PAREN: return ')'; case CPP_EQ_EQ: yylval.code = EQ_EXPR; return EQCOMPARE; case CPP_NOT_EQ: yylval.code = NE_EXPR; return EQCOMPARE; case CPP_GREATER_EQ:yylval.code = GE_EXPR; return ARITHCOMPARE; --- 2912,2918 ---- *************** _yylex () *** 2521,2527 **** case CPP_CLOSE_SQUARE: return ']'; case CPP_OPEN_BRACE: return '{'; case CPP_CLOSE_BRACE: return '}'; - case CPP_SEMICOLON: return ';'; case CPP_ELLIPSIS: return ELLIPSIS; case CPP_PLUS_PLUS: return PLUSPLUS; --- 2933,2938 ---- *************** _yylex () *** 2529,2544 **** case CPP_DEREF: return POINTSAT; case CPP_DOT: return '.'; case CPP_EOF: ! if (cpp_pop_buffer (parse_in) == 0) ! return 0; ! goto get_next; case CPP_NAME: return yylexname (); - case CPP_INT: - case CPP_FLOAT: case CPP_NUMBER: case CPP_CHAR: case CPP_WCHAR: --- 2940,2958 ---- case CPP_DEREF: return POINTSAT; case CPP_DOT: return '.'; + /* The following tokens may affect the interpretation of any + identifiers following, if doing Objective-C. */ + case CPP_COLON: OBJC_NEED_RAW_IDENTIFIER (0); return ':'; + case CPP_COMMA: OBJC_NEED_RAW_IDENTIFIER (0); return ','; + case CPP_CLOSE_PAREN: OBJC_NEED_RAW_IDENTIFIER (0); return ')'; + case CPP_SEMICOLON: OBJC_NEED_RAW_IDENTIFIER (0); return ';'; + case CPP_EOF: ! return 0; case CPP_NAME: return yylexname (); case CPP_NUMBER: case CPP_CHAR: case CPP_WCHAR: *************** _yylex () *** 2548,2556 **** case CPP_WSTRING: return STRING; ! /* This token is Objective-C specific. It gives the next ! token special significance. */ case CPP_ATSIGN: /* These tokens are C++ specific (and will not be generated in C mode, but let's be cautious). */ case CPP_SCOPE: --- 2962,2971 ---- case CPP_WSTRING: return STRING; ! /* This token is Objective-C specific. It gives the next token ! special significance. */ case CPP_ATSIGN: + /* These tokens are C++ specific (and will not be generated in C mode, but let's be cautious). */ case CPP_SCOPE: *************** yylex() *** 2587,2599 **** in order to build the compiler. */ void ! set_yydebug (value) int value; { #if YYDEBUG != 0 yydebug = value; #else ! warning ("YYDEBUG not defined."); #endif } --- 3002,3014 ---- in order to build the compiler. */ void ! c_set_yydebug (value) int value; { #if YYDEBUG != 0 yydebug = value; #else ! warning ("YYDEBUG not defined"); #endif } *************** yyprint (file, yychar, yyl) *** 2652,2666 **** /* Return something to represent absolute declarators containing a *. TARGET is the absolute declarator that the * contains. ! TYPE_QUALS is a list of modifiers such as const or volatile ! to apply to the pointer type, represented as identifiers. ! We return an INDIRECT_REF whose "contents" are TARGET ! and whose type is the modifier list. */ tree ! make_pointer_declarator (type_quals, target) ! tree type_quals, target; { ! return build1 (INDIRECT_REF, type_quals, target); } --- 3067,3087 ---- /* Return something to represent absolute declarators containing a *. TARGET is the absolute declarator that the * contains. ! TYPE_QUALS_ATTRS is a list of modifiers such as const or volatile ! to apply to the pointer type, represented as identifiers, possible mixed ! with attributes. ! We return an INDIRECT_REF whose "contents" are TARGET (inside a TREE_LIST, ! if attributes are present) and whose type is the modifier list. */ tree ! make_pointer_declarator (type_quals_attrs, target) ! tree type_quals_attrs, target; { ! tree quals, attrs; ! tree itarget = target; ! split_specs_attrs (type_quals_attrs, &quals, &attrs); ! if (attrs != NULL_TREE) ! itarget = tree_cons (attrs, target, NULL_TREE); ! return build1 (INDIRECT_REF, quals, itarget); } diff -Nrc3pad gcc-3.0.4/gcc/c-pragma.c gcc-3.1/gcc/c-pragma.c *** gcc-3.0.4/gcc/c-pragma.c Tue Nov 13 03:44:36 2001 --- gcc-3.1/gcc/c-pragma.c Sun Apr 28 18:43:53 2002 *************** *** 1,5 **** /* Handle #pragma, system V.4 style. Supports #pragma weak and #pragma pack. ! Copyright (C) 1992, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of GCC. --- 1,5 ---- /* Handle #pragma, system V.4 style. Supports #pragma weak and #pragma pack. ! Copyright (C) 1992, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This file is part of GCC. *************** Software Foundation, 59 Temple Place - S *** 30,35 **** --- 30,36 ---- #include "toplev.h" #include "ggc.h" #include "c-lex.h" + #include "c-common.h" #include "output.h" #include "tm_p.h" *************** static struct align_stack * alignment_st *** 55,63 **** maximum_field_alignment in effect. When the final pop_alignment() happens, we restore the value to this, not to a value of 0 for maximum_field_alignment. Value is in bits. */ ! static int default_alignment; #define SET_GLOBAL_ALIGNMENT(ALIGN) \ ! (default_alignment = maximum_field_alignment = (ALIGN)) static void push_alignment PARAMS ((int, tree)); static void pop_alignment PARAMS ((tree)); --- 56,64 ---- maximum_field_alignment in effect. When the final pop_alignment() happens, we restore the value to this, not to a value of 0 for maximum_field_alignment. Value is in bits. */ ! static int default_alignment; #define SET_GLOBAL_ALIGNMENT(ALIGN) \ ! (default_alignment = maximum_field_alignment = (ALIGN)) static void push_alignment PARAMS ((int, tree)); static void pop_alignment PARAMS ((tree)); *************** push_alignment (alignment, id) *** 69,75 **** int alignment; tree id; { - if (alignment_stack == NULL || alignment_stack->alignment != alignment || id != NULL_TREE) --- 70,75 ---- *************** handle_pragma_pack (dummy) *** 274,287 **** #endif /* HANDLE_PRAGMA_PACK */ #ifdef HANDLE_PRAGMA_WEAK static void handle_pragma_weak PARAMS ((cpp_reader *)); /* #pragma weak name [= value] */ static void handle_pragma_weak (dummy) cpp_reader *dummy ATTRIBUTE_UNUSED; { ! tree name, value, x; enum cpp_ttype t; value = 0; --- 274,330 ---- #endif /* HANDLE_PRAGMA_PACK */ #ifdef HANDLE_PRAGMA_WEAK + static void apply_pragma_weak PARAMS ((tree, tree)); static void handle_pragma_weak PARAMS ((cpp_reader *)); + static tree pending_weaks; + + static void + apply_pragma_weak (decl, value) + tree decl, value; + { + if (value) + decl_attributes (&decl, build_tree_list (get_identifier ("alias"), + build_tree_list (NULL, value)), + 0); + if (SUPPORTS_WEAK && DECL_EXTERNAL (decl) && TREE_USED (decl) + && TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl))) + warning_with_decl (decl, "applying #pragma weak `%s' after first use results in unspecified behavior"); + + declare_weak (decl); + } + + void + maybe_apply_pragma_weak (decl) + tree decl; + { + tree *p, t, id; + + /* Copied from the check in set_decl_assembler_name. */ + if (TREE_CODE (decl) == FUNCTION_DECL + || (TREE_CODE (decl) == VAR_DECL + && (TREE_STATIC (decl) + || DECL_EXTERNAL (decl) + || TREE_PUBLIC (decl)))) + id = DECL_ASSEMBLER_NAME (decl); + else + return; + + for (p = &pending_weaks; (t = *p) ; p = &TREE_CHAIN (t)) + if (id == TREE_PURPOSE (t)) + { + apply_pragma_weak (decl, TREE_VALUE (t)); + *p = TREE_CHAIN (t); + break; + } + } + /* #pragma weak name [= value] */ static void handle_pragma_weak (dummy) cpp_reader *dummy ATTRIBUTE_UNUSED; { ! tree name, value, x, decl; enum cpp_ttype t; value = 0; *************** handle_pragma_weak (dummy) *** 298,307 **** if (t != CPP_EOF) warning ("junk at end of #pragma weak"); ! add_weak (IDENTIFIER_POINTER (name), value ? IDENTIFIER_POINTER (value) : 0); } #endif void init_pragma () { --- 341,489 ---- if (t != CPP_EOF) warning ("junk at end of #pragma weak"); ! decl = identifier_global_value (name); ! if (decl && TREE_CODE_CLASS (TREE_CODE (decl)) == 'd') ! apply_pragma_weak (decl, value); ! else ! pending_weaks = tree_cons (name, value, pending_weaks); ! } ! #else ! void ! maybe_apply_pragma_weak (decl) ! tree decl ATTRIBUTE_UNUSED; ! { ! } ! #endif /* HANDLE_PRAGMA_WEAK */ ! ! #ifdef HANDLE_PRAGMA_REDEFINE_EXTNAME ! static void handle_pragma_redefine_extname PARAMS ((cpp_reader *)); ! ! static tree pending_redefine_extname; ! ! /* #pragma redefined_extname oldname newname */ ! static void ! handle_pragma_redefine_extname (dummy) ! cpp_reader *dummy ATTRIBUTE_UNUSED; ! { ! tree oldname, newname, decl, x; ! enum cpp_ttype t; ! ! if (c_lex (&oldname) != CPP_NAME) ! { ! warning ("malformed #pragma redefine_extname, ignored"); ! return; ! } ! if (c_lex (&newname) != CPP_NAME) ! { ! warning ("malformed #pragma redefine_extname, ignored"); ! return; ! } ! t = c_lex (&x); ! if (t != CPP_EOF) ! warning ("junk at end of #pragma redefine_extname"); ! ! decl = identifier_global_value (oldname); ! if (decl && TREE_CODE_CLASS (TREE_CODE (decl)) == 'd') ! { ! if (DECL_ASSEMBLER_NAME_SET_P (decl) ! && DECL_ASSEMBLER_NAME (decl) != newname) ! warning ("#pragma redefine_extname conflicts with declaration"); ! SET_DECL_ASSEMBLER_NAME (decl, newname); ! } ! else ! pending_redefine_extname ! = tree_cons (oldname, newname, pending_redefine_extname); ! } ! #endif ! ! #ifdef HANDLE_PRAGMA_EXTERN_PREFIX ! static void handle_pragma_extern_prefix PARAMS ((cpp_reader *)); ! ! static tree pragma_extern_prefix; ! ! /* #pragma extern_prefix "prefix" */ ! static void ! handle_pragma_extern_prefix (dummy) ! cpp_reader *dummy ATTRIBUTE_UNUSED; ! { ! tree prefix, x; ! enum cpp_ttype t; ! ! if (c_lex (&prefix) != CPP_STRING) ! { ! warning ("malformed #pragma extern_prefix, ignored"); ! return; ! } ! t = c_lex (&x); ! if (t != CPP_EOF) ! warning ("junk at end of #pragma extern_prefix"); ! ! /* Note that the length includes the null terminator. */ ! pragma_extern_prefix = (TREE_STRING_LENGTH (prefix) > 1 ? prefix : NULL); } #endif + /* Hook from the front ends to apply the results of one of the preceeding + pragmas that rename variables. */ + + tree + maybe_apply_renaming_pragma (decl, asmname) + tree decl, asmname; + { + tree oldname; + + /* Copied from the check in set_decl_assembler_name. */ + if (TREE_CODE (decl) == FUNCTION_DECL + || (TREE_CODE (decl) == VAR_DECL + && (TREE_STATIC (decl) + || DECL_EXTERNAL (decl) + || TREE_PUBLIC (decl)))) + oldname = DECL_ASSEMBLER_NAME (decl); + else + return asmname; + + /* If the name begins with a *, that's a sign of an asmname attached to + a previous declaration. */ + if (IDENTIFIER_POINTER (oldname)[0] == '*') + { + const char *oldasmname = IDENTIFIER_POINTER (oldname) + 1; + if (asmname && strcmp (TREE_STRING_POINTER (asmname), oldasmname) != 0) + warning ("asm declaration conficts with previous rename"); + asmname = build_string (strlen (oldasmname), oldasmname); + } + + #ifdef HANDLE_PRAGMA_REDEFINE_EXTNAME + { + tree *p, t; + + for (p = &pending_redefine_extname; (t = *p) ; p = &TREE_CHAIN (t)) + if (oldname == TREE_PURPOSE (t)) + { + const char *newname = IDENTIFIER_POINTER (TREE_VALUE (t)); + + if (asmname && strcmp (TREE_STRING_POINTER (asmname), newname) != 0) + warning ("#pragma redefine_extname conflicts with declaration"); + *p = TREE_CHAIN (t); + + return build_string (strlen (newname), newname); + } + } + #endif + + #ifdef HANDLE_PRAGMA_EXTERN_PREFIX + if (pragma_extern_prefix && !asmname) + { + char *x = concat (TREE_STRING_POINTER (pragma_extern_prefix), + IDENTIFIER_POINTER (oldname), NULL); + asmname = build_string (strlen (x), x); + free (x); + return asmname; + } + #endif + + return asmname; + } + void init_pragma () { *************** init_pragma () *** 310,316 **** --- 492,510 ---- #endif #ifdef HANDLE_PRAGMA_WEAK cpp_register_pragma (parse_in, 0, "weak", handle_pragma_weak); + ggc_add_tree_root (&pending_weaks, 1); + #endif + #ifdef HANDLE_PRAGMA_REDEFINE_EXTNAME + cpp_register_pragma (parse_in, 0, "redefine_extname", + handle_pragma_redefine_extname); + ggc_add_tree_root (&pending_redefine_extname, 1); #endif + #ifdef HANDLE_PRAGMA_EXTERN_PREFIX + cpp_register_pragma (parse_in, 0, "extern_prefix", + handle_pragma_extern_prefix); + ggc_add_tree_root (&pragma_extern_prefix, 1); + #endif + #ifdef REGISTER_TARGET_PRAGMAS REGISTER_TARGET_PRAGMAS (parse_in); #endif diff -Nrc3pad gcc-3.0.4/gcc/c-pragma.h gcc-3.1/gcc/c-pragma.h *** gcc-3.0.4/gcc/c-pragma.h Tue Jul 17 12:51:29 2001 --- gcc-3.1/gcc/c-pragma.h Fri Mar 22 22:49:38 2002 *************** *** 1,30 **** /* Pragma related interfaces. ! Copyright (C) 1995, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ ! #ifndef _C_PRAGMA_H ! #define _C_PRAGMA_H #ifdef HANDLE_SYSV_PRAGMA ! /* Support #pragma weak iff ASM_WEAKEN_LABEL and ASM_OUTPUT_WEAK_ALIAS are ! defined. */ ! #if defined (ASM_WEAKEN_LABEL) && defined (ASM_OUTPUT_WEAK_ALIAS) #define HANDLE_PRAGMA_WEAK SUPPORTS_WEAK #endif --- 1,30 ---- /* Pragma related interfaces. ! Copyright (C) 1995, 1998, 1999, 2000, 2001, 2002 ! Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ ! #ifndef GCC_C_PRAGMA_H ! #define GCC_C_PRAGMA_H #ifdef HANDLE_SYSV_PRAGMA ! #if ((defined (ASM_WEAKEN_LABEL) && defined (ASM_OUTPUT_WEAK_ALIAS)) \ ! || defined (ASM_WEAKEN_DECL)) #define HANDLE_PRAGMA_WEAK SUPPORTS_WEAK #endif *************** Boston, MA 02111-1307, USA. */ *** 41,73 **** #define HANDLE_PRAGMA_PACK 1 #endif /* HANDLE_PRAGMA_PACK_PUSH_POP */ - - #ifdef HANDLE_PRAGMA_WEAK - /* This structure contains any weak symbol declarations waiting to be emitted. */ - struct weak_syms - { - struct weak_syms * next; - const char * name; - const char * value; - }; - - /* Declared in varasm.c */ - extern struct weak_syms * weak_decls; - - extern int add_weak PARAMS ((const char *, const char *)); - #endif /* HANDLE_PRAGMA_WEAK */ - extern void init_pragma PARAMS ((void)); /* Duplicate prototypes for the register_pragma stuff and the typedef for ! cpp_reader, to avoid dragging cpplib.h in almost everywhere... */ ! #ifndef __GCC_CPPLIB__ typedef struct cpp_reader cpp_reader; extern void cpp_register_pragma PARAMS ((cpp_reader *, const char *, const char *, void (*) PARAMS ((cpp_reader *)))); - extern void cpp_register_pragma_space PARAMS ((cpp_reader *, const char *)); #endif ! #endif /* _C_PRAGMA_H */ --- 41,59 ---- #define HANDLE_PRAGMA_PACK 1 #endif /* HANDLE_PRAGMA_PACK_PUSH_POP */ extern void init_pragma PARAMS ((void)); /* Duplicate prototypes for the register_pragma stuff and the typedef for ! cpp_reader, to avoid dragging cpplib.h in almost everywhere... */ ! #ifndef GCC_CPPLIB_H typedef struct cpp_reader cpp_reader; extern void cpp_register_pragma PARAMS ((cpp_reader *, const char *, const char *, void (*) PARAMS ((cpp_reader *)))); #endif ! extern void maybe_apply_pragma_weak PARAMS ((tree)); ! extern tree maybe_apply_renaming_pragma PARAMS ((tree, tree)); ! ! #endif /* GCC_C_PRAGMA_H */ diff -Nrc3pad gcc-3.0.4/gcc/c-semantics.c gcc-3.1/gcc/c-semantics.c *** gcc-3.0.4/gcc/c-semantics.c Sun Feb 3 05:16:27 2002 --- gcc-3.1/gcc/c-semantics.c Wed Apr 3 23:55:54 2002 *************** *** 1,25 **** /* This file contains the definitions and documentation for the common tree codes used in the GNU C and C++ compilers (see c-common.def for the standard codes). ! Copyright (C) 2000, 2001 Free Software Foundation, Inc. Written by Benjamin Chelf (chelf@codesourcery.com). ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" #include "system.h" --- 1,25 ---- /* This file contains the definitions and documentation for the common tree codes used in the GNU C and C++ compilers (see c-common.def for the standard codes). ! Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. Written by Benjamin Chelf (chelf@codesourcery.com). ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" #include "system.h" *************** Boston, MA 02111-1307, USA. */ *** 33,38 **** --- 33,39 ---- #include "flags.h" #include "ggc.h" #include "rtl.h" + #include "expr.h" #include "output.h" #include "timevar.h" *************** void (*lang_expand_stmt) PARAMS ((tree)) *** 47,54 **** variables and labels do not require any RTL generation. */ void (*lang_expand_decl_stmt) PARAMS ((tree)); - static tree prune_unused_decls PARAMS ((tree *, int *, void *)); - /* Create an empty statement tree rooted at T. */ void --- 48,53 ---- *************** add_stmt (t) *** 86,93 **** /* Add T to the statement-tree. */ TREE_CHAIN (last_tree) = t; last_tree = t; /* When we expand a statement-tree, we must know whether or not the ! statements are full-expresions. We record that fact here. */ STMT_IS_FULL_EXPR_P (last_tree) = stmts_are_full_exprs_p (); /* Keep track of the number of statements in this function. */ --- 85,93 ---- /* Add T to the statement-tree. */ TREE_CHAIN (last_tree) = t; last_tree = t; + /* When we expand a statement-tree, we must know whether or not the ! statements are full-expressions. We record that fact here. */ STMT_IS_FULL_EXPR_P (last_tree) = stmts_are_full_exprs_p (); /* Keep track of the number of statements in this function. */ *************** add_decl_stmt (decl) *** 118,124 **** returns a new TREE_LIST representing the top of the SCOPE_STMT stack. The TREE_PURPOSE is the new SCOPE_STMT. If BEGIN_P is zero, returns a TREE_LIST whose TREE_VALUE is the new SCOPE_STMT, ! and whose TREE_PURPOSE is the matching SCOPE_STMT iwth SCOPE_BEGIN_P set. */ tree --- 118,124 ---- returns a new TREE_LIST representing the top of the SCOPE_STMT stack. The TREE_PURPOSE is the new SCOPE_STMT. If BEGIN_P is zero, returns a TREE_LIST whose TREE_VALUE is the new SCOPE_STMT, ! and whose TREE_PURPOSE is the matching SCOPE_STMT with SCOPE_BEGIN_P set. */ tree *************** add_scope_stmt (begin_p, partial_p) *** 126,133 **** int begin_p; int partial_p; { tree ss; ! tree top; /* Build the statement. */ ss = build_stmt (SCOPE_STMT, NULL_TREE); --- 126,134 ---- int begin_p; int partial_p; { + tree *stack_ptr = current_scope_stmt_stack (); tree ss; ! tree top = *stack_ptr; /* Build the statement. */ ss = build_stmt (SCOPE_STMT, NULL_TREE); *************** add_scope_stmt (begin_p, partial_p) *** 137,151 **** /* Keep the scope stack up to date. */ if (begin_p) { ! *current_scope_stmt_stack () ! = tree_cons (ss, NULL_TREE, *current_scope_stmt_stack ()); ! top = *current_scope_stmt_stack (); } else { - top = *current_scope_stmt_stack (); TREE_VALUE (top) = ss; ! *current_scope_stmt_stack () = TREE_CHAIN (top); } /* Add the new statement to the statement-tree. */ --- 138,150 ---- /* Keep the scope stack up to date. */ if (begin_p) { ! top = tree_cons (ss, NULL_TREE, top); ! *stack_ptr = top; } else { TREE_VALUE (top) = ss; ! *stack_ptr = TREE_CHAIN (top); } /* Add the new statement to the statement-tree. */ *************** add_scope_stmt (begin_p, partial_p) *** 154,217 **** return top; } - /* Remove declarations of internal variables that are not used from a - stmt tree. To qualify, the variable must have a name and must have - a zero DECL_SOURCE_LINE. We tried to remove all variables for - which TREE_USED was false, but it turns out that there's tons of - variables for which TREE_USED is false but that are still in fact - used. */ - - static tree - prune_unused_decls (tp, walk_subtrees, data) - tree *tp; - int *walk_subtrees ATTRIBUTE_UNUSED; - void *data ATTRIBUTE_UNUSED; - { - tree t = *tp; - - if (t == NULL_TREE) - { - *walk_subtrees = 0; - return NULL_TREE; - } - - if (TREE_CODE (t) == DECL_STMT) - { - tree d = DECL_STMT_DECL (t); - if (!TREE_USED (d) && DECL_NAME (d) && DECL_SOURCE_LINE (d) == 0) - { - *tp = TREE_CHAIN (t); - /* Recurse on the new value of tp, otherwise we will skip - the next statement. */ - return prune_unused_decls (tp, walk_subtrees, data); - } - } - else if (TREE_CODE (t) == SCOPE_STMT) - { - /* Remove all unused decls from the BLOCK of this SCOPE_STMT. */ - tree block = SCOPE_STMT_BLOCK (t); - - if (block) - { - tree *vp; - - for (vp = &BLOCK_VARS (block); *vp; ) - { - tree v = *vp; - if (! TREE_USED (v) && DECL_NAME (v) && DECL_SOURCE_LINE (v) == 0) - *vp = TREE_CHAIN (v); /* drop */ - else - vp = &TREE_CHAIN (v); /* advance */ - } - /* If there are now no variables, the entire BLOCK can be dropped. - (This causes SCOPE_NULLIFIED_P (t) to be true.) */ - if (BLOCK_VARS (block) == NULL_TREE) - SCOPE_STMT_BLOCK (t) = NULL_TREE; - } - } - return NULL_TREE; - } - /* Finish the statement tree rooted at T. */ void --- 153,158 ---- *************** finish_stmt_tree (t) *** 225,233 **** *t = stmt; last_tree = NULL_TREE; - /* Remove unused decls from the stmt tree. */ - walk_stmt_tree (t, prune_unused_decls, NULL); - if (cfun && stmt) { /* The line-number recorded in the outermost statement in a function --- 166,171 ---- *************** finish_stmt_tree (t) *** 246,264 **** tree build_stmt VPARAMS ((enum tree_code code, ...)) { ! #ifndef ANSI_PROTOTYPES ! enum tree_code code; ! #endif ! va_list p; ! register tree t; ! register int length; ! register int i; ! ! VA_START (p, code); ! #ifndef ANSI_PROTOTYPES ! code = va_arg (p, enum tree_code); ! #endif t = make_node (code); length = TREE_CODE_LENGTH (code); --- 184,195 ---- tree build_stmt VPARAMS ((enum tree_code code, ...)) { ! tree t; ! int length; ! int i; ! VA_OPEN (p, code); ! VA_FIXEDARG (p, enum tree_code, code); t = make_node (code); length = TREE_CODE_LENGTH (code); *************** build_stmt VPARAMS ((enum tree_code code *** 267,273 **** for (i = 0; i < length; i++) TREE_OPERAND (t, i) = va_arg (p, tree); ! va_end (p); return t; } --- 198,204 ---- for (i = 0; i < length; i++) TREE_OPERAND (t, i) = va_arg (p, tree); ! VA_CLOSE (p); return t; } *************** make_rtl_for_local_static (decl) *** 319,325 **** already create RTL, which means that the modification to DECL_ASSEMBLER_NAME came only via the explicit extension. */ if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl) ! && !DECL_RTL (decl)) asmspec = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)); rest_of_decl_compilation (decl, asmspec, /*top_level=*/0, /*at_end=*/0); --- 250,256 ---- already create RTL, which means that the modification to DECL_ASSEMBLER_NAME came only via the explicit extension. */ if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl) ! && !DECL_RTL_SET_P (decl)) asmspec = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)); rest_of_decl_compilation (decl, asmspec, /*top_level=*/0, /*at_end=*/0); *************** emit_local_var (decl) *** 354,360 **** expand_end_target_temps (); } ! /* Helper for generating the RTL at the beginning of a scope. */ void genrtl_do_pushlevel () --- 285,291 ---- expand_end_target_temps (); } ! /* Helper for generating the RTL at the beginning of a scope. */ void genrtl_do_pushlevel () *************** genrtl_do_pushlevel () *** 363,369 **** clear_last_expr (); } ! /* Generate the RTL for DESTINATION, which is a GOTO_STMT. */ void genrtl_goto_stmt (destination) --- 294,300 ---- clear_last_expr (); } ! /* Generate the RTL for DESTINATION, which is a GOTO_STMT. */ void genrtl_goto_stmt (destination) *************** genrtl_goto_stmt (destination) *** 388,399 **** expand_computed_goto (destination); } ! /* Generate the RTL for EXPR, which is an EXPR_STMT. */ ! void genrtl_expr_stmt (expr) tree expr; { if (expr != NULL_TREE) { emit_line_note (input_filename, lineno); --- 319,347 ---- expand_computed_goto (destination); } ! /* Generate the RTL for EXPR, which is an EXPR_STMT. Provided just ! for backward compatibility. genrtl_expr_stmt_value() should be ! used for new code. */ ! void genrtl_expr_stmt (expr) tree expr; { + genrtl_expr_stmt_value (expr, -1, 1); + } + + /* Generate the RTL for EXPR, which is an EXPR_STMT. WANT_VALUE tells + whether to (1) save the value of the expression, (0) discard it or + (-1) use expr_stmts_for_value to tell. The use of -1 is + deprecated, and retained only for backward compatibility. + MAYBE_LAST is non-zero if this EXPR_STMT might be the last statement + in expression statement. */ + + void + genrtl_expr_stmt_value (expr, want_value, maybe_last) + tree expr; + int want_value, maybe_last; + { if (expr != NULL_TREE) { emit_line_note (input_filename, lineno); *************** genrtl_expr_stmt (expr) *** 402,415 **** expand_start_target_temps (); if (expr != error_mark_node) ! expand_expr_stmt (expr); if (stmts_are_full_exprs_p ()) expand_end_target_temps (); } } ! /* Generate the RTL for T, which is a DECL_STMT. */ void genrtl_decl_stmt (t) --- 350,363 ---- expand_start_target_temps (); if (expr != error_mark_node) ! expand_expr_stmt_value (expr, want_value, maybe_last); if (stmts_are_full_exprs_p ()) expand_end_target_temps (); } } ! /* Generate the RTL for T, which is a DECL_STMT. */ void genrtl_decl_stmt (t) *************** genrtl_decl_stmt (t) *** 436,450 **** DECL_ANON_UNION_ELEMS (decl)); } else if (TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl)) ! { ! if (DECL_ARTIFICIAL (decl) && ! TREE_USED (decl)) ! /* Do not emit unused decls. This is not just an ! optimization. We really do not want to emit ! __PRETTY_FUNCTION__ etc, if they're never used. */ ! DECL_IGNORED_P (decl) = 1; ! else ! make_rtl_for_local_static (decl); ! } else if (TREE_CODE (decl) == LABEL_DECL && C_DECLARED_LABEL_FLAG (decl)) declare_nonlocal_label (decl); --- 384,390 ---- DECL_ANON_UNION_ELEMS (decl)); } else if (TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl)) ! make_rtl_for_local_static (decl); else if (TREE_CODE (decl) == LABEL_DECL && C_DECLARED_LABEL_FLAG (decl)) declare_nonlocal_label (decl); *************** genrtl_decl_stmt (t) *** 452,458 **** (*lang_expand_decl_stmt) (t); } ! /* Generate the RTL for T, which is an IF_STMT. */ void genrtl_if_stmt (t) --- 392,398 ---- (*lang_expand_decl_stmt) (t); } ! /* Generate the RTL for T, which is an IF_STMT. */ void genrtl_if_stmt (t) *************** genrtl_if_stmt (t) *** 473,479 **** expand_end_cond (); } ! /* Generate the RTL for T, which is a WHILE_STMT. */ void genrtl_while_stmt (t) --- 413,419 ---- expand_end_cond (); } ! /* Generate the RTL for T, which is a WHILE_STMT. */ void genrtl_while_stmt (t) *************** genrtl_while_stmt (t) *** 495,501 **** expand_end_loop (); } ! /* Generate the RTL for T, which is a DO_STMT. */ void genrtl_do_stmt (t) --- 435,441 ---- expand_end_loop (); } ! /* Generate the RTL for T, which is a DO_STMT. */ void genrtl_do_stmt (t) *************** genrtl_do_stmt (t) *** 529,535 **** } } ! /* Build the node for a return statement and return it. */ tree build_return_stmt (expr) --- 469,475 ---- } } ! /* Build the node for a return statement and return it. */ tree build_return_stmt (expr) *************** build_return_stmt (expr) *** 538,550 **** return (build_stmt (RETURN_STMT, expr)); } ! /* Generate the RTL for STMT, which is a RETURN_STMT. */ void genrtl_return_stmt (stmt) tree stmt; { ! tree expr = RETURN_EXPR (stmt); emit_line_note (input_filename, lineno); if (!expr) --- 478,492 ---- return (build_stmt (RETURN_STMT, expr)); } ! /* Generate the RTL for STMT, which is a RETURN_STMT. */ void genrtl_return_stmt (stmt) tree stmt; { ! tree expr; ! ! expr = RETURN_EXPR (stmt); emit_line_note (input_filename, lineno); if (!expr) *************** genrtl_return_stmt (stmt) *** 557,563 **** } } ! /* Generate the RTL for T, which is a FOR_STMT. */ void genrtl_for_stmt (t) --- 499,505 ---- } } ! /* Generate the RTL for T, which is a FOR_STMT. */ void genrtl_for_stmt (t) *************** genrtl_for_stmt (t) *** 603,609 **** expand_end_loop (); } ! /* Build a break statement node and return it. */ tree build_break_stmt () --- 545,551 ---- expand_end_loop (); } ! /* Build a break statement node and return it. */ tree build_break_stmt () *************** build_break_stmt () *** 611,617 **** return (build_stmt (BREAK_STMT)); } ! /* Generate the RTL for a BREAK_STMT. */ void genrtl_break_stmt () --- 553,559 ---- return (build_stmt (BREAK_STMT)); } ! /* Generate the RTL for a BREAK_STMT. */ void genrtl_break_stmt () *************** genrtl_break_stmt () *** 621,627 **** error ("break statement not within loop or switch"); } ! /* Build a continue statement node and return it. */ tree build_continue_stmt () --- 563,569 ---- error ("break statement not within loop or switch"); } ! /* Build a continue statement node and return it. */ tree build_continue_stmt () *************** build_continue_stmt () *** 629,635 **** return (build_stmt (CONTINUE_STMT)); } ! /* Generate the RTL for a CONTINUE_STMT. */ void genrtl_continue_stmt () --- 571,577 ---- return (build_stmt (CONTINUE_STMT)); } ! /* Generate the RTL for a CONTINUE_STMT. */ void genrtl_continue_stmt () *************** genrtl_continue_stmt () *** 639,645 **** error ("continue statement not within a loop"); } ! /* Generate the RTL for T, which is a SCOPE_STMT. */ void genrtl_scope_stmt (t) --- 581,587 ---- error ("continue statement not within a loop"); } ! /* Generate the RTL for T, which is a SCOPE_STMT. */ void genrtl_scope_stmt (t) *************** genrtl_scope_stmt (t) *** 684,690 **** } } ! /* Generate the RTL for T, which is a SWITCH_STMT. */ void genrtl_switch_stmt (t) --- 626,632 ---- } } ! /* Generate the RTL for T, which is a SWITCH_STMT. */ void genrtl_switch_stmt (t) *************** genrtl_switch_stmt (t) *** 696,711 **** cond = expand_cond (SWITCH_COND (t)); if (cond == error_mark_node) /* The code is in error, but we don't want expand_end_case to ! crash. */ cond = boolean_false_node; emit_line_note (input_filename, lineno); expand_start_case (1, cond, TREE_TYPE (cond), "switch statement"); expand_stmt (SWITCH_BODY (t)); ! expand_end_case (cond); } ! /* Create a CASE_LABEL tree node and return it. */ tree build_case_label (low_value, high_value, label_decl) --- 638,653 ---- cond = expand_cond (SWITCH_COND (t)); if (cond == error_mark_node) /* The code is in error, but we don't want expand_end_case to ! crash. */ cond = boolean_false_node; emit_line_note (input_filename, lineno); expand_start_case (1, cond, TREE_TYPE (cond), "switch statement"); expand_stmt (SWITCH_BODY (t)); ! expand_end_case_type (cond, SWITCH_TYPE (t)); } ! /* Create a CASE_LABEL tree node and return it. */ tree build_case_label (low_value, high_value, label_decl) *************** build_case_label (low_value, high_value, *** 717,723 **** } ! /* Generate the RTL for a CASE_LABEL. */ void genrtl_case_label (case_label) --- 659,665 ---- } ! /* Generate the RTL for a CASE_LABEL. */ void genrtl_case_label (case_label) *************** genrtl_case_label (case_label) *** 744,759 **** CASE_LABEL_DECL (case_label), &duplicate); } ! /* Generate the RTL for T, which is a COMPOUND_STMT. */ void genrtl_compound_stmt (t) tree t; { expand_stmt (COMPOUND_BODY (t)); } ! /* Generate the RTL for an ASM_STMT. */ void genrtl_asm_stmt (cv_qualifier, string, output_operands, --- 686,711 ---- CASE_LABEL_DECL (case_label), &duplicate); } ! /* Generate the RTL for T, which is a COMPOUND_STMT. */ void genrtl_compound_stmt (t) tree t; { + #ifdef ENABLE_CHECKING + struct nesting *n = current_nesting_level (); + #endif + expand_stmt (COMPOUND_BODY (t)); + + #ifdef ENABLE_CHECKING + /* Make sure that we've pushed and popped the same number of levels. */ + if (!COMPOUND_STMT_NO_SCOPE (t) && n != current_nesting_level ()) + abort (); + #endif } ! /* Generate the RTL for an ASM_STMT. */ void genrtl_asm_stmt (cv_qualifier, string, output_operands, *************** genrtl_asm_stmt (cv_qualifier, string, o *** 782,796 **** input_filename, lineno); } ! /* Generate the RTL for a DECL_CLEANUP. */ void ! genrtl_decl_cleanup (decl, cleanup) ! tree decl; ! tree cleanup; { if (!decl || (DECL_SIZE (decl) && TREE_TYPE (decl) != error_mark_node)) ! expand_decl_cleanup (decl, cleanup); } /* We're about to expand T, a statement. Set up appropriate context --- 734,748 ---- input_filename, lineno); } ! /* Generate the RTL for a DECL_CLEANUP. */ void ! genrtl_decl_cleanup (t) ! tree t; { + tree decl = CLEANUP_DECL (t); if (!decl || (DECL_SIZE (decl) && TREE_TYPE (decl) != error_mark_node)) ! expand_decl_cleanup_eh (decl, CLEANUP_EXPR (t), CLEANUP_EH_ONLY (t)); } /* We're about to expand T, a statement. Set up appropriate context *************** prep_stmt (t) *** 806,812 **** } /* Generate the RTL for the statement T, its substatements, and any ! other statements at its nesting level. */ void expand_stmt (t) --- 758,764 ---- } /* Generate the RTL for the statement T, its substatements, and any ! other statements at its nesting level. */ void expand_stmt (t) *************** expand_stmt (t) *** 831,837 **** break; case EXPR_STMT: ! genrtl_expr_stmt (EXPR_STMT_EXPR (t)); break; case DECL_STMT: --- 783,792 ---- break; case EXPR_STMT: ! genrtl_expr_stmt_value (EXPR_STMT_EXPR (t), TREE_ADDRESSABLE (t), ! TREE_CHAIN (t) == NULL ! || (TREE_CODE (TREE_CHAIN (t)) == SCOPE_STMT ! && TREE_CHAIN (TREE_CHAIN (t)) == NULL)); break; case DECL_STMT: *************** expand_stmt (t) *** 892,897 **** --- 847,856 ---- genrtl_scope_stmt (t); break; + case CLEANUP_STMT: + genrtl_decl_cleanup (t); + break; + default: if (lang_expand_stmt) (*lang_expand_stmt) (t); *************** expand_stmt (t) *** 901,911 **** } /* Restore saved state. */ ! current_stmt_tree ()->stmts_are_full_exprs_p = ! saved_stmts_are_full_exprs_p; /* Go on to the next statement in this scope. */ t = TREE_CHAIN (t); } } - --- 860,869 ---- } /* Restore saved state. */ ! current_stmt_tree ()->stmts_are_full_exprs_p ! = saved_stmts_are_full_exprs_p; /* Go on to the next statement in this scope. */ t = TREE_CHAIN (t); } } diff -Nrc3pad gcc-3.0.4/gcc/c-tree.h gcc-3.1/gcc/c-tree.h *** gcc-3.0.4/gcc/c-tree.h Tue Jun 5 06:47:31 2001 --- gcc-3.1/gcc/c-tree.h Thu Mar 28 18:49:58 2002 *************** *** 1,26 **** /* Definitions for C parsing and type checking. Copyright (C) 1987, 1993, 1994, 1995, 1997, 1998, ! 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ ! #ifndef _C_TREE_H ! #define _C_TREE_H #include "c-common.h" --- 1,26 ---- /* Definitions for C parsing and type checking. Copyright (C) 1987, 1993, 1994, 1995, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ ! #ifndef GCC_C_TREE_H ! #define GCC_C_TREE_H #include "c-common.h" *************** Boston, MA 02111-1307, USA. */ *** 36,45 **** struct lang_identifier { ! struct tree_identifier ignore; tree global_value, local_value, label_value, implicit_decl; tree error_locus, limbo_value; - enum rid rid_code; }; /* Language-specific declaration information. */ --- 36,44 ---- struct lang_identifier { ! struct c_common_identifier ignore; tree global_value, local_value, label_value, implicit_decl; tree error_locus, limbo_value; }; /* Language-specific declaration information. */ *************** struct lang_decl *** 86,111 **** TREE_USED to record that such a decl was used. TREE_ADDRESSABLE to record that the address of such a decl was used. */ - /* Nonzero means reject anything that ANSI standard C forbids. */ - extern int pedantic; - /* In a RECORD_TYPE or UNION_TYPE, nonzero if any component is read-only. */ ! #define C_TYPE_FIELDS_READONLY(type) TREE_LANG_FLAG_1 (type) /* In a RECORD_TYPE or UNION_TYPE, nonzero if any component is volatile. */ ! #define C_TYPE_FIELDS_VOLATILE(type) TREE_LANG_FLAG_2 (type) /* In a RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE nonzero if the definition of the type has already started. */ ! #define C_TYPE_BEING_DEFINED(type) TYPE_LANG_FLAG_0 (type) /* In an IDENTIFIER_NODE, nonzero if this identifier is actually a keyword. C_RID_CODE (node) is then the RID_* value of the keyword, and C_RID_YYCODE is the token number wanted by Yacc. */ ! #define C_IS_RESERVED_WORD(id) TREE_LANG_FLAG_0 (id) ! #define C_RID_CODE(id) \ ! (((struct lang_identifier *) (id))->rid_code) /* In a RECORD_TYPE, a sorted array of the fields of the type. */ struct lang_type --- 85,110 ---- TREE_USED to record that such a decl was used. TREE_ADDRESSABLE to record that the address of such a decl was used. */ /* In a RECORD_TYPE or UNION_TYPE, nonzero if any component is read-only. */ ! #define C_TYPE_FIELDS_READONLY(TYPE) TREE_LANG_FLAG_1 (TYPE) /* In a RECORD_TYPE or UNION_TYPE, nonzero if any component is volatile. */ ! #define C_TYPE_FIELDS_VOLATILE(TYPE) TREE_LANG_FLAG_2 (TYPE) /* In a RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE nonzero if the definition of the type has already started. */ ! #define C_TYPE_BEING_DEFINED(TYPE) TYPE_LANG_FLAG_0 (TYPE) /* In an IDENTIFIER_NODE, nonzero if this identifier is actually a keyword. C_RID_CODE (node) is then the RID_* value of the keyword, and C_RID_YYCODE is the token number wanted by Yacc. */ + #define C_IS_RESERVED_WORD(ID) TREE_LANG_FLAG_0 (ID) ! /* This function was declared inline. This flag controls the linkage ! semantics of 'inline'; whether or not the function is inlined is ! controlled by DECL_INLINE. */ ! #define DECL_DECLARED_INLINE_P(NODE) \ ! (DECL_LANG_SPECIFIC (NODE)->base.declared_inline) /* In a RECORD_TYPE, a sorted array of the fields of the type. */ struct lang_type *************** struct lang_type *** 116,147 **** /* Record whether a type or decl was written with nonconstant size. Note that TYPE_SIZE may have simplified to a constant. */ ! #define C_TYPE_VARIABLE_SIZE(type) TYPE_LANG_FLAG_1 (type) ! #define C_DECL_VARIABLE_SIZE(type) DECL_LANG_FLAG_0 (type) #if 0 /* Not used. */ /* Record whether a decl for a function or function pointer has already been mentioned (in a warning) because it was called but didn't have a prototype. */ ! #define C_MISSING_PROTOTYPE_WARNED(decl) DECL_LANG_FLAG_2(decl) #endif /* Store a value in that field. */ ! #define C_SET_EXP_ORIGINAL_CODE(exp, code) \ ! (TREE_COMPLEXITY (exp) = (int) (code)) /* Record whether a typedef for type `int' was actually `signed int'. */ ! #define C_TYPEDEF_EXPLICITLY_SIGNED(exp) DECL_LANG_FLAG_1 ((exp)) /* Nonzero for a declaration of a built in function if there has been no occasion that would declare the function in ordinary C. Using the function draws a pedantic warning in this case. */ ! #define C_DECL_ANTICIPATED(exp) DECL_LANG_FLAG_3 ((exp)) /* For FUNCTION_TYPE, a hidden list of types of arguments. The same as TYPE_ARG_TYPES for functions with prototypes, but created for functions without prototypes. */ ! #define TYPE_ACTUAL_ARG_TYPES(NODE) TYPE_NONCOPIED_PARTS (NODE) /* in c-lang.c and objc-act.c */ --- 115,150 ---- /* Record whether a type or decl was written with nonconstant size. Note that TYPE_SIZE may have simplified to a constant. */ ! #define C_TYPE_VARIABLE_SIZE(TYPE) TYPE_LANG_FLAG_1 (TYPE) ! #define C_DECL_VARIABLE_SIZE(TYPE) DECL_LANG_FLAG_0 (TYPE) #if 0 /* Not used. */ /* Record whether a decl for a function or function pointer has already been mentioned (in a warning) because it was called but didn't have a prototype. */ ! #define C_MISSING_PROTOTYPE_WARNED(DECL) DECL_LANG_FLAG_2 (DECL) #endif /* Store a value in that field. */ ! #define C_SET_EXP_ORIGINAL_CODE(EXP, CODE) \ ! (TREE_COMPLEXITY (EXP) = (int) (CODE)) /* Record whether a typedef for type `int' was actually `signed int'. */ ! #define C_TYPEDEF_EXPLICITLY_SIGNED(EXP) DECL_LANG_FLAG_1 (EXP) ! ! /* For a FUNCTION_DECL, nonzero if it was defined without an explicit ! return type. */ ! #define C_FUNCTION_IMPLICIT_INT(EXP) DECL_LANG_FLAG_1 (EXP) /* Nonzero for a declaration of a built in function if there has been no occasion that would declare the function in ordinary C. Using the function draws a pedantic warning in this case. */ ! #define C_DECL_ANTICIPATED(EXP) DECL_LANG_FLAG_3 (EXP) /* For FUNCTION_TYPE, a hidden list of types of arguments. The same as TYPE_ARG_TYPES for functions with prototypes, but created for functions without prototypes. */ ! #define TYPE_ACTUAL_ARG_TYPES(NODE) TYPE_BINFO (NODE) /* in c-lang.c and objc-act.c */ *************** extern void maybe_objc_check_decl PARAM *** 151,266 **** extern void finish_file PARAMS ((void)); extern int maybe_objc_comptypes PARAMS ((tree, tree, int)); extern tree maybe_building_objc_message_expr PARAMS ((void)); - extern tree maybe_objc_method_name PARAMS ((tree)); extern int recognize_objc_keyword PARAMS ((void)); extern tree lookup_objc_ivar PARAMS ((tree)); /* in c-parse.in */ extern void c_parse_init PARAMS ((void)); extern int yyparse_1 PARAMS ((void)); /* in c-aux-info.c */ extern void gen_aux_info_record PARAMS ((tree, int, int, int)); - /* in c-convert.c */ - extern tree convert PARAMS ((tree, tree)); - /* in c-decl.c */ extern tree build_enumerator PARAMS ((tree, tree)); - - #define c_build_type_variant(TYPE, CONST_P, VOLATILE_P) \ - c_build_qualified_type (TYPE, \ - ((CONST_P) ? TYPE_QUAL_CONST : 0) | \ - ((VOLATILE_P) ? TYPE_QUAL_VOLATILE : 0)) extern int c_decode_option PARAMS ((int, char **)); extern void c_mark_varargs PARAMS ((void)); extern void check_for_loop_decls PARAMS ((void)); - extern tree check_identifier PARAMS ((tree, tree)); extern void clear_parm_order PARAMS ((void)); - extern tree combine_parm_decls PARAMS ((tree, tree, int)); extern int complete_array_type PARAMS ((tree, tree, int)); extern void declare_parm_level PARAMS ((int)); extern tree define_label PARAMS ((const char *, int, tree)); - extern void delete_block PARAMS ((tree)); extern void finish_decl PARAMS ((tree, tree, tree)); - extern void finish_decl_top_level PARAMS ((tree, tree, tree)); extern tree finish_enum PARAMS ((tree, tree, tree)); ! extern void finish_function PARAMS ((int)); extern tree finish_struct PARAMS ((tree, tree, tree)); extern tree get_parm_info PARAMS ((int)); - extern tree getdecls PARAMS ((void)); - extern tree gettags PARAMS ((void)); - extern int global_bindings_p PARAMS ((void)); extern tree grokfield PARAMS ((const char *, int, tree, tree, tree)); extern tree groktypename PARAMS ((tree)); extern tree groktypename_in_parm_context PARAMS ((tree)); extern tree implicitly_declare PARAMS ((tree)); extern void implicit_decl_warning PARAMS ((tree)); extern int in_parm_level_p PARAMS ((void)); - extern void init_decl_processing PARAMS ((void)); - extern void insert_block PARAMS ((tree)); extern void keep_next_level PARAMS ((void)); extern int kept_level_p PARAMS ((void)); - extern tree lookup_label PARAMS ((tree)); extern tree lookup_name PARAMS ((tree)); extern tree lookup_name_current_level PARAMS ((tree)); - extern tree lookup_name_current_level_global PARAMS ((tree)); - extern tree maybe_build_cleanup PARAMS ((tree)); extern void parmlist_tags_warning PARAMS ((void)); extern void pending_xref_error PARAMS ((void)); extern void mark_c_function_context PARAMS ((struct function *)); extern void push_c_function_context PARAMS ((struct function *)); extern void pop_c_function_context PARAMS ((struct function *)); extern void pop_label_level PARAMS ((void)); - extern tree poplevel PARAMS ((int, int, int)); - extern void print_lang_decl PARAMS ((FILE *, tree, int)); - extern void print_lang_identifier PARAMS ((FILE *, tree, int)); - extern void print_lang_type PARAMS ((FILE *, tree, int)); extern void push_label_level PARAMS ((void)); extern void push_parm_decl PARAMS ((tree)); - extern tree pushdecl PARAMS ((tree)); extern tree pushdecl_top_level PARAMS ((tree)); - extern void pushlevel PARAMS ((int)); extern void pushtag PARAMS ((tree, tree)); ! extern void set_block PARAMS ((tree)); extern tree shadow_label PARAMS ((tree)); - extern void shadow_record_fields PARAMS ((tree)); extern void shadow_tag PARAMS ((tree)); extern void shadow_tag_warned PARAMS ((tree, int)); extern tree start_enum PARAMS ((tree)); ! extern int start_function PARAMS ((tree, tree, tree, ! tree)); extern tree start_decl PARAMS ((tree, tree, int, ! tree, tree)); extern tree start_struct PARAMS ((enum tree_code, tree)); extern void store_parm_decls PARAMS ((void)); extern tree xref_tag PARAMS ((enum tree_code, tree)); extern tree c_begin_compound_stmt PARAMS ((void)); extern void c_expand_decl_stmt PARAMS ((tree)); /* in c-typeck.c */ extern tree require_complete_type PARAMS ((tree)); - extern void incomplete_type_error PARAMS ((tree, tree)); extern int comptypes PARAMS ((tree, tree)); ! extern tree c_sizeof PARAMS ((tree)); ! extern tree c_sizeof_nowarn PARAMS ((tree)); extern tree c_size_in_bytes PARAMS ((tree)); - extern tree c_alignof PARAMS ((tree)); - extern tree c_alignof_expr PARAMS ((tree)); extern tree build_component_ref PARAMS ((tree, tree)); extern tree build_indirect_ref PARAMS ((tree, const char *)); extern tree build_array_ref PARAMS ((tree, tree)); extern tree build_external_ref PARAMS ((tree, int)); - extern tree build_function_call PARAMS ((tree, tree)); extern tree parser_build_binary_op PARAMS ((enum tree_code, tree, tree)); - extern int lvalue_or_else PARAMS ((tree, const char *)); extern void readonly_warning PARAMS ((tree, const char *)); - extern int mark_addressable PARAMS ((tree)); extern tree build_conditional_expr PARAMS ((tree, tree, tree)); extern tree build_compound_expr PARAMS ((tree)); ! extern tree build_c_cast PARAMS ((tree, tree)); extern tree build_modify_expr PARAMS ((tree, enum tree_code, tree)); extern void store_init_value PARAMS ((tree, tree)); --- 154,254 ---- extern void finish_file PARAMS ((void)); extern int maybe_objc_comptypes PARAMS ((tree, tree, int)); extern tree maybe_building_objc_message_expr PARAMS ((void)); extern int recognize_objc_keyword PARAMS ((void)); extern tree lookup_objc_ivar PARAMS ((tree)); + /* in c-parse.in */ extern void c_parse_init PARAMS ((void)); + extern void c_set_yydebug PARAMS ((int)); extern int yyparse_1 PARAMS ((void)); /* in c-aux-info.c */ extern void gen_aux_info_record PARAMS ((tree, int, int, int)); /* in c-decl.c */ + extern void c_init_decl_processing PARAMS ((void)); + extern void c_print_identifier PARAMS ((FILE *, tree, int)); + extern tree build_array_declarator PARAMS ((tree, tree, int, int)); extern tree build_enumerator PARAMS ((tree, tree)); extern int c_decode_option PARAMS ((int, char **)); extern void c_mark_varargs PARAMS ((void)); extern void check_for_loop_decls PARAMS ((void)); extern void clear_parm_order PARAMS ((void)); extern int complete_array_type PARAMS ((tree, tree, int)); extern void declare_parm_level PARAMS ((int)); extern tree define_label PARAMS ((const char *, int, tree)); extern void finish_decl PARAMS ((tree, tree, tree)); extern tree finish_enum PARAMS ((tree, tree, tree)); ! extern void finish_function PARAMS ((int, int)); extern tree finish_struct PARAMS ((tree, tree, tree)); extern tree get_parm_info PARAMS ((int)); extern tree grokfield PARAMS ((const char *, int, tree, tree, tree)); extern tree groktypename PARAMS ((tree)); extern tree groktypename_in_parm_context PARAMS ((tree)); extern tree implicitly_declare PARAMS ((tree)); extern void implicit_decl_warning PARAMS ((tree)); extern int in_parm_level_p PARAMS ((void)); extern void keep_next_level PARAMS ((void)); extern int kept_level_p PARAMS ((void)); extern tree lookup_name PARAMS ((tree)); extern tree lookup_name_current_level PARAMS ((tree)); extern void parmlist_tags_warning PARAMS ((void)); extern void pending_xref_error PARAMS ((void)); extern void mark_c_function_context PARAMS ((struct function *)); extern void push_c_function_context PARAMS ((struct function *)); extern void pop_c_function_context PARAMS ((struct function *)); extern void pop_label_level PARAMS ((void)); extern void push_label_level PARAMS ((void)); extern void push_parm_decl PARAMS ((tree)); extern tree pushdecl_top_level PARAMS ((tree)); extern void pushtag PARAMS ((tree, tree)); ! extern tree set_array_declarator_type PARAMS ((tree, tree, int)); extern tree shadow_label PARAMS ((tree)); extern void shadow_tag PARAMS ((tree)); extern void shadow_tag_warned PARAMS ((tree, int)); extern tree start_enum PARAMS ((tree)); ! extern int start_function PARAMS ((tree, tree, tree)); extern tree start_decl PARAMS ((tree, tree, int, ! tree)); extern tree start_struct PARAMS ((enum tree_code, tree)); extern void store_parm_decls PARAMS ((void)); extern tree xref_tag PARAMS ((enum tree_code, tree)); extern tree c_begin_compound_stmt PARAMS ((void)); + extern void c_expand_deferred_function PARAMS ((tree)); extern void c_expand_decl_stmt PARAMS ((tree)); + + /* in c-objc-common.c */ + extern int c_disregard_inline_limits PARAMS ((tree)); + extern int c_cannot_inline_tree_fn PARAMS ((tree *)); + extern const char *c_objc_common_init PARAMS ((const char *)); + extern int c_missing_noreturn_ok_p PARAMS ((tree)); + extern void c_objc_common_finish_file PARAMS ((void)); + extern int defer_fn PARAMS ((tree)); + + #define c_build_type_variant(TYPE, CONST_P, VOLATILE_P) \ + c_build_qualified_type ((TYPE), \ + ((CONST_P) ? TYPE_QUAL_CONST : 0) | \ + ((VOLATILE_P) ? TYPE_QUAL_VOLATILE : 0)) + /* in c-typeck.c */ extern tree require_complete_type PARAMS ((tree)); extern int comptypes PARAMS ((tree, tree)); ! extern tree c_sizeof_nowarn PARAMS ((tree)); extern tree c_size_in_bytes PARAMS ((tree)); extern tree build_component_ref PARAMS ((tree, tree)); extern tree build_indirect_ref PARAMS ((tree, const char *)); extern tree build_array_ref PARAMS ((tree, tree)); extern tree build_external_ref PARAMS ((tree, int)); extern tree parser_build_binary_op PARAMS ((enum tree_code, tree, tree)); extern void readonly_warning PARAMS ((tree, const char *)); extern tree build_conditional_expr PARAMS ((tree, tree, tree)); extern tree build_compound_expr PARAMS ((tree)); ! extern tree c_cast_expr PARAMS ((tree, tree)); ! extern tree build_c_cast PARAMS ((tree, tree)); extern tree build_modify_expr PARAMS ((tree, enum tree_code, tree)); extern void store_init_value PARAMS ((tree, tree)); *************** extern tree pop_init_level PARAMS ((in *** 274,285 **** --- 262,276 ---- extern void set_init_index PARAMS ((tree, tree)); extern void set_init_label PARAMS ((tree)); extern void process_init_element PARAMS ((tree)); + extern tree build_compound_literal PARAMS ((tree, tree)); extern void pedwarn_c99 PARAMS ((const char *, ...)) ATTRIBUTE_PRINTF_1; extern tree c_start_case PARAMS ((tree)); extern void c_finish_case PARAMS ((void)); + extern tree simple_asm_stmt PARAMS ((tree)); extern tree build_asm_stmt PARAMS ((tree, tree, tree, tree, tree)); + extern tree c_convert_parm_for_inlining PARAMS ((tree, tree, tree)); /* Set to 0 at beginning of a function definition, set to 1 if a return statement that specifies a return value is seen. */ *************** extern int current_function_returns_valu *** 291,296 **** --- 282,292 ---- extern int current_function_returns_null; + /* Set to 0 at beginning of a function definition, set to 1 if + a call to a noreturn function is seen. */ + + extern int current_function_returns_abnormally; + /* Nonzero means the expression being parsed will never be evaluated. This is a count, since unevaluated expressions can nest. */ *************** extern int skip_evaluation; *** 301,307 **** extern int dollars_in_ident; /* Nonzero means allow type mismatches in conditional expressions; ! just make their values `void'. */ extern int flag_cond_mismatch; --- 297,303 ---- extern int dollars_in_ident; /* Nonzero means allow type mismatches in conditional expressions; ! just make their values `void'. */ extern int flag_cond_mismatch; *************** extern int flag_no_asm; *** 313,323 **** extern int warn_implicit; - /* Nonzero means warn about sizeof (function) or addition/subtraction - of function pointers. */ - - extern int warn_pointer_arith; - /* Nonzero means warn for all old-style non-prototype function decls. */ extern int warn_strict_prototypes; --- 309,314 ---- *************** extern int warn_traditional; *** 354,365 **** extern int warn_char_subscripts; ! /* Warn if main is suspicious. */ extern int warn_main; /* Nonzero means to allow single precision math even if we're generally ! being traditional. */ extern int flag_allow_single_precision; /* Warn if initializer is not completely bracketed. */ --- 345,356 ---- extern int warn_char_subscripts; ! /* Warn if main is suspicious. */ extern int warn_main; /* Nonzero means to allow single precision math even if we're generally ! being traditional. */ extern int flag_allow_single_precision; /* Warn if initializer is not completely bracketed. */ *************** extern int warn_missing_braces; *** 370,376 **** extern int warn_sign_compare; ! /* Warn about testing equality of floating point numbers. */ extern int warn_float_equal; --- 361,367 ---- extern int warn_sign_compare; ! /* Warn about testing equality of floating point numbers. */ extern int warn_float_equal; *************** extern int system_header_p; *** 385,396 **** /* Warn about implicit declarations. 1 = warning, 2 = error. */ extern int mesg_implicit_function_declaration; - /* Nonzero enables objc features. */ - - #define doing_objc_thang \ - (c_language == clk_objective_c) - /* In c-decl.c */ extern void finish_incomplete_decl PARAMS ((tree)); ! #endif /* not _C_TREE_H */ --- 376,385 ---- /* Warn about implicit declarations. 1 = warning, 2 = error. */ extern int mesg_implicit_function_declaration; /* In c-decl.c */ extern void finish_incomplete_decl PARAMS ((tree)); ! extern tree static_ctors; ! extern tree static_dtors; ! ! #endif /* ! GCC_C_TREE_H */ diff -Nrc3pad gcc-3.0.4/gcc/c-typeck.c gcc-3.1/gcc/c-typeck.c *** gcc-3.0.4/gcc/c-typeck.c Mon Sep 17 19:56:35 2001 --- gcc-3.1/gcc/c-typeck.c Fri Mar 22 01:53:39 2002 *************** *** 1,23 **** /* Build expressions with type checking for C compiler. Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997, ! 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* This file is part of the C front end. --- 1,23 ---- /* Build expressions with type checking for C compiler. Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997, ! 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* This file is part of the C front end. *************** Boston, MA 02111-1307, USA. */ *** 31,46 **** #include "config.h" #include "system.h" #include "tree.h" #include "c-tree.h" #include "tm_p.h" #include "flags.h" #include "output.h" - #include "rtl.h" #include "expr.h" #include "toplev.h" #include "intl.h" #include "ggc.h" /* Nonzero if we've already printed a "missing braces around initializer" message within this initializer. */ --- 31,47 ---- #include "config.h" #include "system.h" + #include "rtl.h" #include "tree.h" #include "c-tree.h" #include "tm_p.h" #include "flags.h" #include "output.h" #include "expr.h" #include "toplev.h" #include "intl.h" #include "ggc.h" + #include "target.h" /* Nonzero if we've already printed a "missing braces around initializer" message within this initializer. */ *************** static int comp_target_types PARAMS ((t *** 54,64 **** static int function_types_compatible_p PARAMS ((tree, tree)); static int type_lists_compatible_p PARAMS ((tree, tree)); static tree decl_constant_value_for_broken_optimization PARAMS ((tree)); ! static tree lookup_field PARAMS ((tree, tree, tree *)); static tree convert_arguments PARAMS ((tree, tree, tree, tree)); - static tree pointer_int_sum PARAMS ((enum tree_code, tree, tree)); static tree pointer_diff PARAMS ((tree, tree)); ! static tree unary_complex_lvalue PARAMS ((enum tree_code, tree)); static void pedantic_lvalue_warning PARAMS ((enum tree_code)); static tree internal_build_compound_expr PARAMS ((tree, int)); static tree convert_for_assignment PARAMS ((tree, tree, const char *, --- 55,65 ---- static int function_types_compatible_p PARAMS ((tree, tree)); static int type_lists_compatible_p PARAMS ((tree, tree)); static tree decl_constant_value_for_broken_optimization PARAMS ((tree)); ! static tree default_function_array_conversion PARAMS ((tree)); ! static tree lookup_field PARAMS ((tree, tree)); static tree convert_arguments PARAMS ((tree, tree, tree, tree)); static tree pointer_diff PARAMS ((tree, tree)); ! static tree unary_complex_lvalue PARAMS ((enum tree_code, tree, int)); static void pedantic_lvalue_warning PARAMS ((enum tree_code)); static tree internal_build_compound_expr PARAMS ((tree, int)); static tree convert_for_assignment PARAMS ((tree, tree, const char *, *************** require_complete_type (value) *** 91,97 **** { tree type = TREE_TYPE (value); ! if (TREE_CODE (value) == ERROR_MARK) return error_mark_node; /* First, detect a valid value with a complete type. */ --- 92,98 ---- { tree type = TREE_TYPE (value); ! if (value == error_mark_node || type == error_mark_node) return error_mark_node; /* First, detect a valid value with a complete type. */ *************** incomplete_type_error (value, type) *** 147,152 **** --- 148,158 ---- case ARRAY_TYPE: if (TYPE_DOMAIN (type)) { + if (TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == NULL) + { + error ("invalid use of flexible array member"); + return; + } type = TREE_TYPE (type); goto retry; } *************** tree *** 190,197 **** common_type (t1, t2) tree t1, t2; { ! register enum tree_code code1; ! register enum tree_code code2; tree attributes; /* Save time if the two types are the same. */ --- 196,203 ---- common_type (t1, t2) tree t1, t2; { ! enum tree_code code1; ! enum tree_code code2; tree attributes; /* Save time if the two types are the same. */ *************** common_type (t1, t2) *** 205,211 **** return t1; /* Merge the attributes. */ ! attributes = merge_machine_type_attributes (t1, t2); /* Treat an enum type as the unsigned integer type of the same width. */ --- 211,217 ---- return t1; /* Merge the attributes. */ ! attributes = (*targetm.merge_type_attributes) (t1, t2); /* Treat an enum type as the unsigned integer type of the same width. */ *************** int *** 435,442 **** comptypes (type1, type2) tree type1, type2; { ! register tree t1 = type1; ! register tree t2 = type2; int attrval, val; /* Suppress errors caused by previously reported errors. */ --- 441,448 ---- comptypes (type1, type2) tree type1, type2; { ! tree t1 = type1; ! tree t2 = type2; int attrval, val; /* Suppress errors caused by previously reported errors. */ *************** comptypes (type1, type2) *** 482,493 **** if (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2)) return 1; - #ifndef COMP_TYPE_ATTRIBUTES - #define COMP_TYPE_ATTRIBUTES(t1,t2) 1 - #endif - /* 1 if no need for warning yet, 2 if warning cause has been seen. */ ! if (! (attrval = COMP_TYPE_ATTRIBUTES (t1, t2))) return 0; /* 1 if no need for warning yet, 2 if warning cause has been seen. */ --- 488,495 ---- if (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2)) return 1; /* 1 if no need for warning yet, 2 if warning cause has been seen. */ ! if (! (attrval = (*targetm.comp_type_attributes) (t1, t2))) return 0; /* 1 if no need for warning yet, 2 if warning cause has been seen. */ *************** c_size_in_bytes (type) *** 799,880 **** size_int (TYPE_PRECISION (char_type_node) / BITS_PER_UNIT)); } - - /* Implement the __alignof keyword: Return the minimum required - alignment of TYPE, measured in bytes. */ - - tree - c_alignof (type) - tree type; - { - enum tree_code code = TREE_CODE (type); - tree t; - - if (code == FUNCTION_TYPE) - t = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT); - else if (code == VOID_TYPE || code == ERROR_MARK) - t = size_one_node; - else if (code == ERROR_MARK) - t = size_one_node; - else if (!COMPLETE_TYPE_P (type)) - { - error ("__alignof__ applied to an incomplete type"); - t = size_zero_node; - } - else - t = size_int (TYPE_ALIGN (type) / BITS_PER_UNIT); - - return fold (build1 (NOP_EXPR, c_size_type_node, t)); - } - /* Implement the __alignof keyword: Return the minimum required - alignment of EXPR, measured in bytes. For VAR_DECL's and - FIELD_DECL's return DECL_ALIGN (which can be set from an - "aligned" __attribute__ specification). */ - - tree - c_alignof_expr (expr) - tree expr; - { - tree t; - - if (TREE_CODE (expr) == VAR_DECL) - t = size_int (DECL_ALIGN (expr) / BITS_PER_UNIT); - - else if (TREE_CODE (expr) == COMPONENT_REF - && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1))) - { - error ("`__alignof' applied to a bit-field"); - t = size_one_node; - } - else if (TREE_CODE (expr) == COMPONENT_REF - && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL) - t = size_int (DECL_ALIGN (TREE_OPERAND (expr, 1)) / BITS_PER_UNIT); - - else if (TREE_CODE (expr) == INDIRECT_REF) - { - tree t = TREE_OPERAND (expr, 0); - tree best = t; - int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t))); - - while (TREE_CODE (t) == NOP_EXPR - && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE) - { - int thisalign; - - t = TREE_OPERAND (t, 0); - thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t))); - if (thisalign > bestalign) - best = t, bestalign = thisalign; - } - return c_alignof (TREE_TYPE (TREE_TYPE (best))); - } - else - return c_alignof (TREE_TYPE (expr)); - - return fold (build1 (NOP_EXPR, c_size_type_node, t)); - } - /* Return either DECL or its known constant value (if it has one). */ tree --- 801,807 ---- *************** decl_constant_value_for_broken_optimizat *** 916,921 **** --- 843,951 ---- return decl_constant_value (decl); } + + /* Perform the default conversion of arrays and functions to pointers. + Return the result of converting EXP. For any other expression, just + return EXP. */ + + static tree + default_function_array_conversion (exp) + tree exp; + { + tree orig_exp; + tree type = TREE_TYPE (exp); + enum tree_code code = TREE_CODE (type); + int not_lvalue = 0; + + /* Strip NON_LVALUE_EXPRs and no-op conversions, since we aren't using as + an lvalue. + + Do not use STRIP_NOPS here! It will remove conversions from pointer + to integer and cause infinite recursion. */ + orig_exp = exp; + while (TREE_CODE (exp) == NON_LVALUE_EXPR + || (TREE_CODE (exp) == NOP_EXPR + && TREE_TYPE (TREE_OPERAND (exp, 0)) == TREE_TYPE (exp))) + { + if (TREE_CODE (exp) == NON_LVALUE_EXPR) + not_lvalue = 1; + exp = TREE_OPERAND (exp, 0); + } + + /* Preserve the original expression code. */ + if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (exp)))) + C_SET_EXP_ORIGINAL_CODE (exp, C_EXP_ORIGINAL_CODE (orig_exp)); + + if (code == FUNCTION_TYPE) + { + return build_unary_op (ADDR_EXPR, exp, 0); + } + if (code == ARRAY_TYPE) + { + tree adr; + tree restype = TREE_TYPE (type); + tree ptrtype; + int constp = 0; + int volatilep = 0; + int lvalue_array_p; + + if (TREE_CODE_CLASS (TREE_CODE (exp)) == 'r' || DECL_P (exp)) + { + constp = TREE_READONLY (exp); + volatilep = TREE_THIS_VOLATILE (exp); + } + + if (TYPE_QUALS (type) || constp || volatilep) + restype + = c_build_qualified_type (restype, + TYPE_QUALS (type) + | (constp * TYPE_QUAL_CONST) + | (volatilep * TYPE_QUAL_VOLATILE)); + + if (TREE_CODE (exp) == INDIRECT_REF) + return convert (TYPE_POINTER_TO (restype), + TREE_OPERAND (exp, 0)); + + if (TREE_CODE (exp) == COMPOUND_EXPR) + { + tree op1 = default_conversion (TREE_OPERAND (exp, 1)); + return build (COMPOUND_EXPR, TREE_TYPE (op1), + TREE_OPERAND (exp, 0), op1); + } + + lvalue_array_p = !not_lvalue && lvalue_p (exp); + if (!flag_isoc99 && !lvalue_array_p) + { + /* Before C99, non-lvalue arrays do not decay to pointers. + Normally, using such an array would be invalid; but it can + be used correctly inside sizeof or as a statement expression. + Thus, do not give an error here; an error will result later. */ + return exp; + } + + ptrtype = build_pointer_type (restype); + + if (TREE_CODE (exp) == VAR_DECL) + { + /* ??? This is not really quite correct + in that the type of the operand of ADDR_EXPR + is not the target type of the type of the ADDR_EXPR itself. + Question is, can this lossage be avoided? */ + adr = build1 (ADDR_EXPR, ptrtype, exp); + if (mark_addressable (exp) == 0) + return error_mark_node; + TREE_CONSTANT (adr) = staticp (exp); + TREE_SIDE_EFFECTS (adr) = 0; /* Default would be, same as EXP. */ + return adr; + } + /* This way is better for a COMPONENT_REF since it can + simplify the offset for a component. */ + adr = build_unary_op (ADDR_EXPR, exp, 1); + return convert (ptrtype, adr); + } + return exp; + } + /* Perform default promotions for C data used in expressions. Arrays and functions are converted to pointers; enumeral types or short or char, to int. *************** tree *** 925,932 **** default_conversion (exp) tree exp; { ! register tree type = TREE_TYPE (exp); ! register enum tree_code code = TREE_CODE (type); /* Constants can be used directly unless they're not loadable. */ if (TREE_CODE (exp) == CONST_DECL) --- 955,966 ---- default_conversion (exp) tree exp; { ! tree orig_exp; ! tree type = TREE_TYPE (exp); ! enum tree_code code = TREE_CODE (type); ! ! if (code == FUNCTION_TYPE || code == ARRAY_TYPE) ! return default_function_array_conversion (exp); /* Constants can be used directly unless they're not loadable. */ if (TREE_CODE (exp) == CONST_DECL) *************** default_conversion (exp) *** 946,956 **** --- 980,995 ---- Do not use STRIP_NOPS here! It will remove conversions from pointer to integer and cause infinite recursion. */ + orig_exp = exp; while (TREE_CODE (exp) == NON_LVALUE_EXPR || (TREE_CODE (exp) == NOP_EXPR && TREE_TYPE (TREE_OPERAND (exp, 0)) == TREE_TYPE (exp))) exp = TREE_OPERAND (exp, 0); + /* Preserve the original expression code. */ + if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (exp)))) + C_SET_EXP_ORIGINAL_CODE (exp, C_EXP_ORIGINAL_CODE (orig_exp)); + /* Normally convert enums to int, but convert wide enums to something wider. */ if (code == ENUMERAL_TYPE) *************** default_conversion (exp) *** 996,1078 **** error ("void value not ignored as it ought to be"); return error_mark_node; } - if (code == FUNCTION_TYPE) - { - return build_unary_op (ADDR_EXPR, exp, 0); - } - if (code == ARRAY_TYPE) - { - register tree adr; - tree restype = TREE_TYPE (type); - tree ptrtype; - int constp = 0; - int volatilep = 0; - - if (TREE_CODE_CLASS (TREE_CODE (exp)) == 'r' || DECL_P (exp)) - { - constp = TREE_READONLY (exp); - volatilep = TREE_THIS_VOLATILE (exp); - } - - if (TYPE_QUALS (type) || constp || volatilep) - restype - = c_build_qualified_type (restype, - TYPE_QUALS (type) - | (constp * TYPE_QUAL_CONST) - | (volatilep * TYPE_QUAL_VOLATILE)); - - if (TREE_CODE (exp) == INDIRECT_REF) - return convert (TYPE_POINTER_TO (restype), - TREE_OPERAND (exp, 0)); - - if (TREE_CODE (exp) == COMPOUND_EXPR) - { - tree op1 = default_conversion (TREE_OPERAND (exp, 1)); - return build (COMPOUND_EXPR, TREE_TYPE (op1), - TREE_OPERAND (exp, 0), op1); - } - - if (! lvalue_p (exp) - && ! (TREE_CODE (exp) == CONSTRUCTOR && TREE_STATIC (exp))) - { - error ("invalid use of non-lvalue array"); - return error_mark_node; - } - - ptrtype = build_pointer_type (restype); - - if (TREE_CODE (exp) == VAR_DECL) - { - /* ??? This is not really quite correct - in that the type of the operand of ADDR_EXPR - is not the target type of the type of the ADDR_EXPR itself. - Question is, can this lossage be avoided? */ - adr = build1 (ADDR_EXPR, ptrtype, exp); - if (mark_addressable (exp) == 0) - return error_mark_node; - TREE_CONSTANT (adr) = staticp (exp); - TREE_SIDE_EFFECTS (adr) = 0; /* Default would be, same as EXP. */ - return adr; - } - /* This way is better for a COMPONENT_REF since it can - simplify the offset for a component. */ - adr = build_unary_op (ADDR_EXPR, exp, 1); - return convert (ptrtype, adr); - } return exp; } ! /* Look up component name in the structure type definition. ! If this component name is found indirectly within an anonymous union, ! store in *INDIRECT the component which directly contains ! that anonymous union. Otherwise, set *INDIRECT to 0. */ static tree ! lookup_field (type, component, indirect) ! tree type, component; ! tree *indirect; { tree field; /* If TYPE_LANG_SPECIFIC is set, then it is a sorted array of pointers --- 1035,1057 ---- error ("void value not ignored as it ought to be"); return error_mark_node; } return exp; } ! /* Look up COMPONENT in a structure or union DECL. ! If the component name is not found, returns NULL_TREE. Otherwise, ! the return value is a TREE_LIST, with each TREE_VALUE a FIELD_DECL ! stepping down the chain to the component, which is in the last ! TREE_VALUE of the list. Normally the list is of length one, but if ! the component is embedded within (nested) anonymous structures or ! unions, the list steps down the chain to the component. */ static tree ! lookup_field (decl, component) ! tree decl, component; { + tree type = TREE_TYPE (decl); tree field; /* If TYPE_LANG_SPECIFIC is set, then it is a sorted array of pointers *************** lookup_field (type, component, indirect) *** 1098,1115 **** /* Step through all anon unions in linear fashion. */ while (DECL_NAME (field_array[bot]) == NULL_TREE) { - tree anon = 0, junk; - field = field_array[bot++]; if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE || TREE_CODE (TREE_TYPE (field)) == UNION_TYPE) - anon = lookup_field (TREE_TYPE (field), component, &junk); - - if (anon != NULL_TREE) { ! *indirect = field; ! return anon; ! } } /* Entire record is only anon unions. */ --- 1077,1091 ---- /* Step through all anon unions in linear fashion. */ while (DECL_NAME (field_array[bot]) == NULL_TREE) { field = field_array[bot++]; if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE || TREE_CODE (TREE_TYPE (field)) == UNION_TYPE) { ! tree anon = lookup_field (field, component); ! ! if (anon) ! return tree_cons (NULL_TREE, field, anon); ! } } /* Entire record is only anon unions. */ *************** lookup_field (type, component, indirect) *** 1131,1165 **** if (DECL_NAME (field_array[bot]) == component) field = field_array[bot]; else if (DECL_NAME (field) != component) ! field = 0; } else { for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field)) { ! if (DECL_NAME (field) == NULL_TREE) { ! tree junk; ! tree anon = 0; ! ! if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE ! || TREE_CODE (TREE_TYPE (field)) == UNION_TYPE) ! anon = lookup_field (TREE_TYPE (field), component, &junk); ! if (anon != NULL_TREE) ! { ! *indirect = field; ! return anon; ! } } if (DECL_NAME (field) == component) break; } } ! *indirect = NULL_TREE; ! return field; } /* Make an expression to refer to the COMPONENT field of --- 1107,1137 ---- if (DECL_NAME (field_array[bot]) == component) field = field_array[bot]; else if (DECL_NAME (field) != component) ! return NULL_TREE; } else { for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field)) { ! if (DECL_NAME (field) == NULL_TREE ! && (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE ! || TREE_CODE (TREE_TYPE (field)) == UNION_TYPE)) { ! tree anon = lookup_field (field, component); ! if (anon) ! return tree_cons (NULL_TREE, field, anon); } if (DECL_NAME (field) == component) break; } + + if (field == NULL_TREE) + return NULL_TREE; } ! return tree_cons (NULL_TREE, field, NULL_TREE); } /* Make an expression to refer to the COMPONENT field of *************** tree *** 1169,1195 **** build_component_ref (datum, component) tree datum, component; { ! register tree type = TREE_TYPE (datum); ! register enum tree_code code = TREE_CODE (type); ! register tree field = NULL; ! register tree ref; ! /* If DATUM is a COMPOUND_EXPR or COND_EXPR, move our reference inside it ! unless we are not to support things not strictly ANSI. */ switch (TREE_CODE (datum)) { case COMPOUND_EXPR: { tree value = build_component_ref (TREE_OPERAND (datum, 1), component); return build (COMPOUND_EXPR, TREE_TYPE (value), ! TREE_OPERAND (datum, 0), value); } - case COND_EXPR: - return build_conditional_expr - (TREE_OPERAND (datum, 0), - build_component_ref (TREE_OPERAND (datum, 1), component), - build_component_ref (TREE_OPERAND (datum, 2), component)); - default: break; } --- 1141,1167 ---- build_component_ref (datum, component) tree datum, component; { ! tree type = TREE_TYPE (datum); ! enum tree_code code = TREE_CODE (type); ! tree field = NULL; ! tree ref; ! /* If DATUM is a COMPOUND_EXPR, move our reference inside it. ! If pedantic ensure that the arguments are not lvalues; otherwise, ! if the component is an array, it would wrongly decay to a pointer in ! C89 mode. ! We cannot do this with a COND_EXPR, because in a conditional expression ! the default promotions are applied to both sides, and this would yield ! the wrong type of the result; for example, if the components have ! type "char". */ switch (TREE_CODE (datum)) { case COMPOUND_EXPR: { tree value = build_component_ref (TREE_OPERAND (datum, 1), component); return build (COMPOUND_EXPR, TREE_TYPE (value), ! TREE_OPERAND (datum, 0), pedantic_non_lvalue (value)); } default: break; } *************** build_component_ref (datum, component) *** 1198,1212 **** if (code == RECORD_TYPE || code == UNION_TYPE) { - tree indirect = 0; - if (!COMPLETE_TYPE_P (type)) { incomplete_type_error (NULL_TREE, type); return error_mark_node; } ! field = lookup_field (type, component, &indirect); if (!field) { --- 1170,1182 ---- if (code == RECORD_TYPE || code == UNION_TYPE) { if (!COMPLETE_TYPE_P (type)) { incomplete_type_error (NULL_TREE, type); return error_mark_node; } ! field = lookup_field (datum, component); if (!field) { *************** build_component_ref (datum, component) *** 1215,1242 **** IDENTIFIER_POINTER (component)); return error_mark_node; } - if (TREE_TYPE (field) == error_mark_node) - return error_mark_node; ! /* If FIELD was found buried within an anonymous union, ! make one COMPONENT_REF to get that anonymous union, ! then fall thru to make a second COMPONENT_REF to get FIELD. */ ! if (indirect != 0) { ! ref = build (COMPONENT_REF, TREE_TYPE (indirect), datum, indirect); ! if (TREE_READONLY (datum) || TREE_READONLY (indirect)) TREE_READONLY (ref) = 1; ! if (TREE_THIS_VOLATILE (datum) || TREE_THIS_VOLATILE (indirect)) TREE_THIS_VOLATILE (ref) = 1; - datum = ref; - } ! ref = build (COMPONENT_REF, TREE_TYPE (field), datum, field); ! if (TREE_READONLY (datum) || TREE_READONLY (field)) ! TREE_READONLY (ref) = 1; ! if (TREE_THIS_VOLATILE (datum) || TREE_THIS_VOLATILE (field)) ! TREE_THIS_VOLATILE (ref) = 1; return ref; } --- 1185,1214 ---- IDENTIFIER_POINTER (component)); return error_mark_node; } ! /* Chain the COMPONENT_REFs if necessary down to the FIELD. ! This might be better solved in future the way the C++ front ! end does it - by giving the anonymous entities each a ! separate name and type, and then have build_component_ref ! recursively call itself. We can't do that here. */ ! for (; field; field = TREE_CHAIN (field)) { ! tree subdatum = TREE_VALUE (field); ! ! if (TREE_TYPE (subdatum) == error_mark_node) ! return error_mark_node; ! ! ref = build (COMPONENT_REF, TREE_TYPE (subdatum), datum, subdatum); ! if (TREE_READONLY (datum) || TREE_READONLY (subdatum)) TREE_READONLY (ref) = 1; ! if (TREE_THIS_VOLATILE (datum) || TREE_THIS_VOLATILE (subdatum)) TREE_THIS_VOLATILE (ref) = 1; ! if (TREE_DEPRECATED (subdatum)) ! warn_deprecated_use (subdatum); ! datum = ref; ! } return ref; } *************** build_indirect_ref (ptr, errorstring) *** 1256,1263 **** tree ptr; const char *errorstring; { ! register tree pointer = default_conversion (ptr); ! register tree type = TREE_TYPE (pointer); if (TREE_CODE (type) == POINTER_TYPE) { --- 1228,1235 ---- tree ptr; const char *errorstring; { ! tree pointer = default_conversion (ptr); ! tree type = TREE_TYPE (pointer); if (TREE_CODE (type) == POINTER_TYPE) { *************** build_indirect_ref (ptr, errorstring) *** 1269,1276 **** else { tree t = TREE_TYPE (type); ! register tree ref = build1 (INDIRECT_REF, ! TYPE_MAIN_VARIANT (t), pointer); if (!COMPLETE_OR_VOID_TYPE_P (t) && TREE_CODE (t) != ARRAY_TYPE) { --- 1241,1247 ---- else { tree t = TREE_TYPE (type); ! tree ref = build1 (INDIRECT_REF, TYPE_MAIN_VARIANT (t), pointer); if (!COMPLETE_OR_VOID_TYPE_P (t) && TREE_CODE (t) != ARRAY_TYPE) { *************** build_external_ref (id, fun) *** 1452,1457 **** --- 1423,1431 ---- tree decl = lookup_name (id); tree objc_ivar = lookup_objc_ivar (id); + if (decl && TREE_DEPRECATED (decl)) + warn_deprecated_use (decl); + if (!decl || decl == error_mark_node || C_DECL_ANTICIPATED (decl)) { if (objc_ivar) *************** tree *** 1540,1547 **** build_function_call (function, params) tree function, params; { ! register tree fntype, fundecl = 0; ! register tree coerced_params; tree name = NULL_TREE, assembler_name = NULL_TREE, result; /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */ --- 1514,1521 ---- build_function_call (function, params) tree function, params; { ! tree fntype, fundecl = 0; ! tree coerced_params; tree name = NULL_TREE, assembler_name = NULL_TREE, result; /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */ *************** build_function_call (function, params) *** 1577,1582 **** --- 1551,1559 ---- return error_mark_node; } + if (fundecl && TREE_THIS_VOLATILE (fundecl)) + current_function_returns_abnormally = 1; + /* fntype now gets the type of function pointed to. */ fntype = TREE_TYPE (fntype); *************** build_function_call (function, params) *** 1588,1595 **** /* Check for errors in format strings. */ ! if (warn_format && (name || assembler_name)) ! check_function_format (NULL, name, assembler_name, coerced_params); /* Recognize certain built-in functions so we can make tree-codes other than CALL_EXPR. We do this when it enables fold-const.c --- 1565,1572 ---- /* Check for errors in format strings. */ ! if (warn_format) ! check_function_format (NULL, TYPE_ATTRIBUTES (fntype), coerced_params); /* Recognize certain built-in functions so we can make tree-codes other than CALL_EXPR. We do this when it enables fold-const.c *************** static tree *** 1637,1644 **** convert_arguments (typelist, values, name, fundecl) tree typelist, values, name, fundecl; { ! register tree typetail, valtail; ! register tree result = NULL; int parmnum; /* Scan the given expressions and types, producing individual --- 1614,1621 ---- convert_arguments (typelist, values, name, fundecl) tree typelist, values, name, fundecl; { ! tree typetail, valtail; ! tree result = NULL; int parmnum; /* Scan the given expressions and types, producing individual *************** convert_arguments (typelist, values, nam *** 1648,1655 **** valtail; valtail = TREE_CHAIN (valtail), parmnum++) { ! register tree type = typetail ? TREE_VALUE (typetail) : 0; ! register tree val = TREE_VALUE (valtail); if (type == void_type_node) { --- 1625,1632 ---- valtail; valtail = TREE_CHAIN (valtail), parmnum++) { ! tree type = typetail ? TREE_VALUE (typetail) : 0; ! tree val = TREE_VALUE (valtail); if (type == void_type_node) { *************** convert_arguments (typelist, values, nam *** 1667,1675 **** if (TREE_CODE (val) == NON_LVALUE_EXPR) val = TREE_OPERAND (val, 0); ! if (TREE_CODE (TREE_TYPE (val)) == ARRAY_TYPE ! || TREE_CODE (TREE_TYPE (val)) == FUNCTION_TYPE) ! val = default_conversion (val); val = require_complete_type (val); --- 1644,1650 ---- if (TREE_CODE (val) == NON_LVALUE_EXPR) val = TREE_OPERAND (val, 0); ! val = default_function_array_conversion (val); val = require_complete_type (val); *************** convert_arguments (typelist, values, nam *** 1730,1736 **** tree type1 = TREE_TYPE (would_have_been); if (TREE_CODE (type) == ENUMERAL_TYPE ! && type == TREE_TYPE (val)) /* No warning if function asks for enum and the actual arg is that enum type. */ ; --- 1705,1712 ---- tree type1 = TREE_TYPE (would_have_been); if (TREE_CODE (type) == ENUMERAL_TYPE ! && (TYPE_MAIN_VARIANT (type) ! == TYPE_MAIN_VARIANT (TREE_TYPE (val)))) /* No warning if function asks for enum and the actual arg is that enum type. */ ; *************** parser_build_binary_op (code, arg1, arg2 *** 1830,1840 **** enum tree_code code1 = ERROR_MARK; enum tree_code code2 = ERROR_MARK; ! if (class1 == 'e' || class1 == '1' ! || class1 == '2' || class1 == '<') code1 = C_EXP_ORIGINAL_CODE (arg1); ! if (class2 == 'e' || class2 == '1' ! || class2 == '2' || class2 == '<') code2 = C_EXP_ORIGINAL_CODE (arg2); /* Check for cases such as x+y< TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op1, 0))) - && TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op1, 0)))) - { - final_type = result_type; - op1 = TREE_OPERAND (op1, 0); - result_type = TREE_TYPE (op1); - } - if (TREE_CODE (op1) == INTEGER_CST - && TREE_CODE (op0) == NOP_EXPR - && TYPE_PRECISION (type0) > TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op0, 0))) - && TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op0, 0)))) - { - final_type = result_type; - op0 = TREE_OPERAND (op0, 0); - result_type = TREE_TYPE (op0); - } break; case TRUNC_MOD_EXPR: case FLOOR_MOD_EXPR: if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE) { /* Although it would be tempting to shorten always here, that loses --- 2059,2071 ---- case BIT_XOR_EXPR: if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE) shorten = -1; break; case TRUNC_MOD_EXPR: case FLOOR_MOD_EXPR: + if (warn_div_by_zero && skip_evaluation == 0 && integer_zerop (op1)) + warning ("division by zero"); + if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE) { /* Although it would be tempting to shorten always here, that loses *************** build_binary_op (code, orig_op0, orig_op *** 2242,2249 **** short_compare = 1; else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE) { ! register tree tt0 = TREE_TYPE (type0); ! register tree tt1 = TREE_TYPE (type1); /* Anything compares with void *. void * compares with anything. Otherwise, the targets must be compatible and both must be object or both incomplete. */ --- 2203,2210 ---- short_compare = 1; else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE) { ! tree tt0 = TREE_TYPE (type0); ! tree tt1 = TREE_TYPE (type1); /* Anything compares with void *. void * compares with anything. Otherwise, the targets must be compatible and both must be object or both incomplete. */ *************** build_binary_op (code, orig_op0, orig_op *** 2485,2506 **** /* We can shorten only if the shift count is less than the number of bits in the smaller type size. */ && compare_tree_int (op1, TYPE_PRECISION (TREE_TYPE (arg0))) < 0 ! /* If arg is sign-extended and then unsigned-shifted, ! we can simulate this with a signed shift in arg's type ! only if the extended result is at least twice as wide ! as the arg. Otherwise, the shift could use up all the ! ones made by sign-extension and bring in zeros. ! We can't optimize that case at all, but in most machines ! it never happens because available widths are 2**N. */ ! && (!TREE_UNSIGNED (final_type) ! || unsigned_arg ! || (2 * TYPE_PRECISION (TREE_TYPE (arg0)) ! <= TYPE_PRECISION (result_type)))) { /* Do an unsigned shift if the operand was zero-extended. */ result_type ! = signed_or_unsigned_type (unsigned_arg, ! TREE_TYPE (arg0)); /* Convert value-to-be-shifted to that type. */ if (TREE_TYPE (op0) != result_type) op0 = convert (result_type, op0); --- 2446,2457 ---- /* We can shorten only if the shift count is less than the number of bits in the smaller type size. */ && compare_tree_int (op1, TYPE_PRECISION (TREE_TYPE (arg0))) < 0 ! /* We cannot drop an unsigned shift after sign-extension. */ ! && (!TREE_UNSIGNED (final_type) || unsigned_arg)) { /* Do an unsigned shift if the operand was zero-extended. */ result_type ! = signed_or_unsigned_type (unsigned_arg, TREE_TYPE (arg0)); /* Convert value-to-be-shifted to that type. */ if (TREE_TYPE (op0) != result_type) op0 = convert (result_type, op0); *************** build_binary_op (code, orig_op0, orig_op *** 2673,2680 **** build_type = result_type; { ! register tree result = build (resultcode, build_type, op0, op1); ! register tree folded; folded = fold (result); if (folded == result) --- 2624,2631 ---- build_type = result_type; { ! tree result = build (resultcode, build_type, op0, op1); ! tree folded; folded = fold (result); if (folded == result) *************** build_binary_op (code, orig_op0, orig_op *** 2685,2790 **** } } - /* Return a tree for the sum or difference (RESULTCODE says which) - of pointer PTROP and integer INTOP. */ - - static tree - pointer_int_sum (resultcode, ptrop, intop) - enum tree_code resultcode; - register tree ptrop, intop; - { - tree size_exp; - - register tree result; - register tree folded; - - /* The result is a pointer of the same type that is being added. */ - - register tree result_type = TREE_TYPE (ptrop); - - if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE) - { - if (pedantic || warn_pointer_arith) - pedwarn ("pointer of type `void *' used in arithmetic"); - size_exp = integer_one_node; - } - else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE) - { - if (pedantic || warn_pointer_arith) - pedwarn ("pointer to a function used in arithmetic"); - size_exp = integer_one_node; - } - else - size_exp = c_size_in_bytes (TREE_TYPE (result_type)); - - /* If what we are about to multiply by the size of the elements - contains a constant term, apply distributive law - and multiply that constant term separately. - This helps produce common subexpressions. */ - - if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR) - && ! TREE_CONSTANT (intop) - && TREE_CONSTANT (TREE_OPERAND (intop, 1)) - && TREE_CONSTANT (size_exp) - /* If the constant comes from pointer subtraction, - skip this optimization--it would cause an error. */ - && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE - /* If the constant is unsigned, and smaller than the pointer size, - then we must skip this optimization. This is because it could cause - an overflow error if the constant is negative but INTOP is not. */ - && (! TREE_UNSIGNED (TREE_TYPE (intop)) - || (TYPE_PRECISION (TREE_TYPE (intop)) - == TYPE_PRECISION (TREE_TYPE (ptrop))))) - { - enum tree_code subcode = resultcode; - tree int_type = TREE_TYPE (intop); - if (TREE_CODE (intop) == MINUS_EXPR) - subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR); - /* Convert both subexpression types to the type of intop, - because weird cases involving pointer arithmetic - can result in a sum or difference with different type args. */ - ptrop = build_binary_op (subcode, ptrop, - convert (int_type, TREE_OPERAND (intop, 1)), 1); - intop = convert (int_type, TREE_OPERAND (intop, 0)); - } - - /* Convert the integer argument to a type the same size as sizetype - so the multiply won't overflow spuriously. */ - - if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype) - || TREE_UNSIGNED (TREE_TYPE (intop)) != TREE_UNSIGNED (sizetype)) - intop = convert (type_for_size (TYPE_PRECISION (sizetype), - TREE_UNSIGNED (sizetype)), intop); - - /* Replace the integer argument with a suitable product by the object size. - Do this multiplication as signed, then convert to the appropriate - pointer type (actually unsigned integral). */ - - intop = convert (result_type, - build_binary_op (MULT_EXPR, intop, - convert (TREE_TYPE (intop), size_exp), 1)); - - /* Create the sum or difference. */ - - result = build (resultcode, result_type, ptrop, intop); - - folded = fold (result); - if (folded == result) - TREE_CONSTANT (folded) = TREE_CONSTANT (ptrop) & TREE_CONSTANT (intop); - return folded; - } - /* Return a tree for the difference of pointers OP0 and OP1. The resulting tree has type int. */ static tree pointer_diff (op0, op1) ! register tree op0, op1; { ! register tree result, folded; tree restype = ptrdiff_type_node; tree target_type = TREE_TYPE (TREE_TYPE (op0)); if (pedantic || warn_pointer_arith) { --- 2636,2654 ---- } } /* Return a tree for the difference of pointers OP0 and OP1. The resulting tree has type int. */ static tree pointer_diff (op0, op1) ! tree op0, op1; { ! tree result, folded; tree restype = ptrdiff_type_node; tree target_type = TREE_TYPE (TREE_TYPE (op0)); + tree con0, con1, lit0, lit1; + tree orig_op1 = op1; if (pedantic || warn_pointer_arith) { *************** pointer_diff (op0, op1) *** 2794,2799 **** --- 2658,2697 ---- pedwarn ("pointer to a function used in subtraction"); } + /* If the conversion to ptrdiff_type does anything like widening or + converting a partial to an integral mode, we get a convert_expression + that is in the way to do any simplifications. + (fold-const.c doesn't know that the extra bits won't be needed. + split_tree uses STRIP_SIGN_NOPS, which leaves conversions to a + different mode in place.) + So first try to find a common term here 'by hand'; we want to cover + at least the cases that occur in legal static initializers. */ + con0 = TREE_CODE (op0) == NOP_EXPR ? TREE_OPERAND (op0, 0) : op0; + con1 = TREE_CODE (op1) == NOP_EXPR ? TREE_OPERAND (op1, 0) : op1; + + if (TREE_CODE (con0) == PLUS_EXPR) + { + lit0 = TREE_OPERAND (con0, 1); + con0 = TREE_OPERAND (con0, 0); + } + else + lit0 = integer_zero_node; + + if (TREE_CODE (con1) == PLUS_EXPR) + { + lit1 = TREE_OPERAND (con1, 1); + con1 = TREE_OPERAND (con1, 0); + } + else + lit1 = integer_zero_node; + + if (operand_equal_p (con0, con1, 0)) + { + op0 = lit0; + op1 = lit1; + } + + /* First do the subtraction as integers; then drop through to build the divide operator. Do not do default conversions on the minus operator *************** pointer_diff (op0, op1) *** 2802,2808 **** op0 = build_binary_op (MINUS_EXPR, convert (restype, op0), convert (restype, op1), 0); /* This generates an error if op1 is pointer to incomplete type. */ ! if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (op1)))) error ("arithmetic on pointer to an incomplete type"); /* This generates an error if op0 is pointer to incomplete type. */ --- 2700,2706 ---- op0 = build_binary_op (MINUS_EXPR, convert (restype, op0), convert (restype, op1), 0); /* This generates an error if op1 is pointer to incomplete type. */ ! if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (orig_op1)))) error ("arithmetic on pointer to an incomplete type"); /* This generates an error if op0 is pointer to incomplete type. */ *************** pointer_diff (op0, op1) *** 2820,2839 **** /* Construct and perhaps optimize a tree representation for a unary operation. CODE, a tree_code, specifies the operation ! and XARG is the operand. NOCONVERT nonzero suppresses ! the default promotions (such as from short to int). */ tree ! build_unary_op (code, xarg, noconvert) enum tree_code code; tree xarg; ! int noconvert; { /* No default_conversion here. It causes trouble for ADDR_EXPR. */ ! register tree arg = xarg; ! register tree argtype = 0; ! register enum tree_code typecode = TREE_CODE (TREE_TYPE (arg)); tree val; if (typecode == ERROR_MARK) return error_mark_node; --- 2718,2742 ---- /* Construct and perhaps optimize a tree representation for a unary operation. CODE, a tree_code, specifies the operation ! and XARG is the operand. ! For any CODE other than ADDR_EXPR, FLAG nonzero suppresses ! the default promotions (such as from short to int). ! For ADDR_EXPR, the default promotions are not applied; FLAG nonzero ! allows non-lvalues; this is only used to handle conversion of non-lvalue ! arrays to pointers in C99. */ tree ! build_unary_op (code, xarg, flag) enum tree_code code; tree xarg; ! int flag; { /* No default_conversion here. It causes trouble for ADDR_EXPR. */ ! tree arg = xarg; ! tree argtype = 0; ! enum tree_code typecode = TREE_CODE (TREE_TYPE (arg)); tree val; + int noconvert = flag; if (typecode == ERROR_MARK) return error_mark_node; *************** build_unary_op (code, xarg, noconvert) *** 2947,2953 **** /* Handle complex lvalues (when permitted) by reduction to simpler cases. */ ! val = unary_complex_lvalue (code, arg); if (val != 0) return val; --- 2850,2856 ---- /* Handle complex lvalues (when permitted) by reduction to simpler cases. */ ! val = unary_complex_lvalue (code, arg, 0); if (val != 0) return val; *************** build_unary_op (code, xarg, noconvert) *** 2972,2985 **** if (typecode != POINTER_TYPE && typecode != INTEGER_TYPE && typecode != REAL_TYPE) { ! error ("wrong type argument to %s", ! code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR ! ? "increment" : "decrement"); return error_mark_node; } { ! register tree inc; tree result_type = TREE_TYPE (arg); arg = get_unwidened (arg, 0); --- 2875,2890 ---- if (typecode != POINTER_TYPE && typecode != INTEGER_TYPE && typecode != REAL_TYPE) { ! if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR) ! error ("wrong type argument to increment"); ! else ! error ("wrong type argument to decrement"); ! return error_mark_node; } { ! tree inc; tree result_type = TREE_TYPE (arg); arg = get_unwidened (arg, 0); *************** build_unary_op (code, xarg, noconvert) *** 2992,3006 **** /* If pointer target is an undefined struct, we just cannot know how to do the arithmetic. */ if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (result_type))) ! error ("%s of pointer to unknown structure", ! code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR ! ? "increment" : "decrement"); else if ((pedantic || warn_pointer_arith) && (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE || TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)) ! pedwarn ("wrong type argument to %s", ! code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR ! ? "increment" : "decrement"); inc = c_size_in_bytes (TREE_TYPE (result_type)); } else --- 2897,2918 ---- /* If pointer target is an undefined struct, we just cannot know how to do the arithmetic. */ if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (result_type))) ! { ! if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR) ! error ("increment of pointer to unknown structure"); ! else ! error ("decrement of pointer to unknown structure"); ! } else if ((pedantic || warn_pointer_arith) && (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE || TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)) ! { ! if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR) ! pedwarn ("wrong type argument to increment"); ! else ! pedwarn ("wrong type argument to decrement"); ! } ! inc = c_size_in_bytes (TREE_TYPE (result_type)); } else *************** build_unary_op (code, xarg, noconvert) *** 3085,3092 **** } case ADDR_EXPR: ! /* Note that this operation never does default_conversion ! regardless of NOCONVERT. */ /* Let &* cancel out to simplify resulting code. */ if (TREE_CODE (arg) == INDIRECT_REF) --- 2997,3003 ---- } case ADDR_EXPR: ! /* Note that this operation never does default_conversion. */ /* Let &* cancel out to simplify resulting code. */ if (TREE_CODE (arg) == INDIRECT_REF) *************** build_unary_op (code, xarg, noconvert) *** 3108,3114 **** /* Handle complex lvalues (when permitted) by reduction to simpler cases. */ ! val = unary_complex_lvalue (code, arg); if (val != 0) return val; --- 3019,3025 ---- /* Handle complex lvalues (when permitted) by reduction to simpler cases. */ ! val = unary_complex_lvalue (code, arg, flag); if (val != 0) return val; *************** build_unary_op (code, xarg, noconvert) *** 3134,3146 **** } #endif - /* Allow the address of a constructor if all the elements - are constant. */ - if (TREE_CODE (arg) == CONSTRUCTOR && TREE_CONSTANT (arg)) - ; /* Anything not already handled and not a true memory reference ! is an error. */ ! else if (typecode != FUNCTION_TYPE && !lvalue_or_else (arg, "invalid lvalue in unary `&'")) return error_mark_node; --- 3045,3053 ---- } #endif /* Anything not already handled and not a true memory reference ! or a non-lvalue array is an error. */ ! else if (typecode != FUNCTION_TYPE && !flag && !lvalue_or_else (arg, "invalid lvalue in unary `&'")) return error_mark_node; *************** build_unary_op (code, xarg, noconvert) *** 3169,3175 **** { tree field = TREE_OPERAND (arg, 1); ! addr = build_unary_op (ADDR_EXPR, TREE_OPERAND (arg, 0), 0); if (DECL_C_BIT_FIELD (field)) { --- 3076,3082 ---- { tree field = TREE_OPERAND (arg, 1); ! addr = build_unary_op (ADDR_EXPR, TREE_OPERAND (arg, 0), flag); if (DECL_C_BIT_FIELD (field)) { *************** int *** 3240,3246 **** lvalue_p (ref) tree ref; { ! register enum tree_code code = TREE_CODE (ref); switch (code) { --- 3147,3153 ---- lvalue_p (ref) tree ref; { ! enum tree_code code = TREE_CODE (ref); switch (code) { *************** lvalue_p (ref) *** 3249,3254 **** --- 3156,3162 ---- case COMPONENT_REF: return lvalue_p (TREE_OPERAND (ref, 0)); + case COMPOUND_LITERAL_EXPR: case STRING_CST: return 1; *************** lvalue_or_else (ref, msgid) *** 3288,3301 **** /* Apply unary lvalue-demanding operator CODE to the expression ARG for certain kinds of expressions which are not really lvalues ! but which we can accept as lvalues. If ARG is not a kind of expression we can handle, return zero. */ static tree ! unary_complex_lvalue (code, arg) enum tree_code code; tree arg; { /* Handle (a, b) used as an "lvalue". */ if (TREE_CODE (arg) == COMPOUND_EXPR) --- 3196,3212 ---- /* Apply unary lvalue-demanding operator CODE to the expression ARG for certain kinds of expressions which are not really lvalues ! but which we can accept as lvalues. If FLAG is nonzero, then ! non-lvalues are OK since we may be converting a non-lvalue array to ! a pointer in C99. If ARG is not a kind of expression we can handle, return zero. */ static tree ! unary_complex_lvalue (code, arg, flag) enum tree_code code; tree arg; + int flag; { /* Handle (a, b) used as an "lvalue". */ if (TREE_CODE (arg) == COMPOUND_EXPR) *************** unary_complex_lvalue (code, arg) *** 3304,3310 **** /* If this returns a function type, it isn't really being used as an lvalue, so don't issue a warning about it. */ ! if (TREE_CODE (TREE_TYPE (arg)) != FUNCTION_TYPE) pedantic_lvalue_warning (COMPOUND_EXPR); return build (COMPOUND_EXPR, TREE_TYPE (real_result), --- 3215,3221 ---- /* If this returns a function type, it isn't really being used as an lvalue, so don't issue a warning about it. */ ! if (TREE_CODE (TREE_TYPE (arg)) != FUNCTION_TYPE && !flag) pedantic_lvalue_warning (COMPOUND_EXPR); return build (COMPOUND_EXPR, TREE_TYPE (real_result), *************** unary_complex_lvalue (code, arg) *** 3314,3327 **** /* Handle (a ? b : c) used as an "lvalue". */ if (TREE_CODE (arg) == COND_EXPR) { ! pedantic_lvalue_warning (COND_EXPR); ! if (TREE_CODE (TREE_TYPE (arg)) != FUNCTION_TYPE) pedantic_lvalue_warning (COMPOUND_EXPR); return (build_conditional_expr (TREE_OPERAND (arg, 0), ! build_unary_op (code, TREE_OPERAND (arg, 1), 0), ! build_unary_op (code, TREE_OPERAND (arg, 2), 0))); } return 0; --- 3225,3239 ---- /* Handle (a ? b : c) used as an "lvalue". */ if (TREE_CODE (arg) == COND_EXPR) { ! if (!flag) ! pedantic_lvalue_warning (COND_EXPR); ! if (TREE_CODE (TREE_TYPE (arg)) != FUNCTION_TYPE && !flag) pedantic_lvalue_warning (COMPOUND_EXPR); return (build_conditional_expr (TREE_OPERAND (arg, 0), ! build_unary_op (code, TREE_OPERAND (arg, 1), flag), ! build_unary_op (code, TREE_OPERAND (arg, 2), flag))); } return 0; *************** int *** 3379,3392 **** mark_addressable (exp) tree exp; { ! register tree x = exp; while (1) switch (TREE_CODE (x)) { case COMPONENT_REF: if (DECL_C_BIT_FIELD (TREE_OPERAND (x, 1))) { ! error ("cannot take address of bitfield `%s'", IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (x, 1)))); return 0; } --- 3291,3304 ---- mark_addressable (exp) tree exp; { ! tree x = exp; while (1) switch (TREE_CODE (x)) { case COMPONENT_REF: if (DECL_C_BIT_FIELD (TREE_OPERAND (x, 1))) { ! error ("cannot take address of bit-field `%s'", IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (x, 1)))); return 0; } *************** mark_addressable (exp) *** 3400,3405 **** --- 3312,3318 ---- x = TREE_OPERAND (x, 0); break; + case COMPOUND_LITERAL_EXPR: case CONSTRUCTOR: TREE_ADDRESSABLE (x) = 1; return 1; *************** tree *** 3464,3474 **** build_conditional_expr (ifexp, op1, op2) tree ifexp, op1, op2; { ! register tree type1; ! register tree type2; ! register enum tree_code code1; ! register enum tree_code code2; ! register tree result_type = NULL; tree orig_op1 = op1, orig_op2 = op2; ifexp = truthvalue_conversion (default_conversion (ifexp)); --- 3377,3387 ---- build_conditional_expr (ifexp, op1, op2) tree ifexp, op1, op2; { ! tree type1; ! tree type2; ! enum tree_code code1; ! enum tree_code code2; ! tree result_type = NULL; tree orig_op1 = op1, orig_op2 = op2; ifexp = truthvalue_conversion (default_conversion (ifexp)); *************** internal_build_compound_expr (list, firs *** 3652,3661 **** tree list; int first_p; { ! register tree rest; if (TREE_CHAIN (list) == 0) { #if 0 /* If something inside inhibited lvalueness, we should not override. */ /* Consider (x, y+0), which is not an lvalue since y+0 is not. */ --- 3565,3580 ---- tree list; int first_p; { ! tree rest; if (TREE_CHAIN (list) == 0) { + /* Convert arrays and functions to pointers when there + really is a comma operator. */ + if (!first_p) + TREE_VALUE (list) + = default_function_array_conversion (TREE_VALUE (list)); + #if 0 /* If something inside inhibited lvalueness, we should not override. */ /* Consider (x, y+0), which is not an lvalue since y+0 is not. */ *************** internal_build_compound_expr (list, firs *** 3670,3683 **** return TREE_VALUE (list); } - if (TREE_CHAIN (list) != 0 && TREE_CHAIN (TREE_CHAIN (list)) == 0) - { - /* Convert arrays to pointers when there really is a comma operator. */ - if (TREE_CODE (TREE_TYPE (TREE_VALUE (TREE_CHAIN (list)))) == ARRAY_TYPE) - TREE_VALUE (TREE_CHAIN (list)) - = default_conversion (TREE_VALUE (TREE_CHAIN (list))); - } - rest = internal_build_compound_expr (TREE_CHAIN (list), FALSE); if (! TREE_SIDE_EFFECTS (TREE_VALUE (list))) --- 3589,3594 ---- *************** internal_build_compound_expr (list, firs *** 3710,3719 **** tree build_c_cast (type, expr) ! register tree type; tree expr; { ! register tree value = expr; if (type == error_mark_node || expr == error_mark_node) return error_mark_node; --- 3621,3630 ---- tree build_c_cast (type, expr) ! tree type; tree expr; { ! tree value = expr; if (type == error_mark_node || expr == error_mark_node) return error_mark_node; *************** build_c_cast (type, expr) *** 3737,3743 **** return error_mark_node; } ! if (type == TREE_TYPE (value)) { if (pedantic) { --- 3648,3654 ---- return error_mark_node; } ! if (type == TYPE_MAIN_VARIANT (TREE_TYPE (value))) { if (pedantic) { *************** build_c_cast (type, expr) *** 3749,3757 **** else if (TREE_CODE (type) == UNION_TYPE) { tree field; ! if (TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE ! || TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE) ! value = default_conversion (value); for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field)) if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (field)), --- 3660,3666 ---- else if (TREE_CODE (type) == UNION_TYPE) { tree field; ! value = default_function_array_conversion (value); for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field)) if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (field)), *************** build_c_cast (type, expr) *** 3794,3802 **** /* Convert functions and arrays to pointers, but don't convert any other types. */ ! if (TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE ! || TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE) ! value = default_conversion (value); otype = TREE_TYPE (value); /* Optionally warn about potentially worrisome casts. */ --- 3703,3709 ---- /* Convert functions and arrays to pointers, but don't convert any other types. */ ! value = default_function_array_conversion (value); otype = TREE_TYPE (value); /* Optionally warn about potentially worrisome casts. */ *************** build_c_cast (type, expr) *** 3807,3813 **** { tree in_type = type; tree in_otype = otype; ! int warn = 0; /* Check that the qualifiers on IN_TYPE are a superset of the qualifiers of IN_OTYPE. The outermost level of --- 3714,3721 ---- { tree in_type = type; tree in_otype = otype; ! int added = 0; ! int discarded = 0; /* Check that the qualifiers on IN_TYPE are a superset of the qualifiers of IN_OTYPE. The outermost level of *************** build_c_cast (type, expr) *** 3817,3828 **** { in_otype = TREE_TYPE (in_otype); in_type = TREE_TYPE (in_type); ! warn |= (TYPE_QUALS (in_otype) & ~TYPE_QUALS (in_type)); } while (TREE_CODE (in_type) == POINTER_TYPE && TREE_CODE (in_otype) == POINTER_TYPE); ! if (warn) /* There are qualifiers present in IN_OTYPE that are not present in IN_TYPE. */ warning ("cast discards qualifiers from pointer target type"); --- 3725,3748 ---- { in_otype = TREE_TYPE (in_otype); in_type = TREE_TYPE (in_type); ! ! /* GNU C allows cv-qualified function types. 'const' ! means the function is very pure, 'volatile' means it ! can't return. We need to warn when such qualifiers ! are added, not when they're taken away. */ ! if (TREE_CODE (in_otype) == FUNCTION_TYPE ! && TREE_CODE (in_type) == FUNCTION_TYPE) ! added |= (TYPE_QUALS (in_type) & ~TYPE_QUALS (in_otype)); ! else ! discarded |= (TYPE_QUALS (in_otype) & ~TYPE_QUALS (in_type)); } while (TREE_CODE (in_type) == POINTER_TYPE && TREE_CODE (in_otype) == POINTER_TYPE); ! if (added) ! warning ("cast adds new qualifiers to function type"); ! ! if (discarded) /* There are qualifiers present in IN_OTYPE that are not present in IN_TYPE. */ warning ("cast discards qualifiers from pointer target type"); *************** build_c_cast (type, expr) *** 3871,3877 **** } } ! /* Pedantically, don't ley (void *) (FOO *) 0 be a null pointer constant. */ if (pedantic && TREE_CODE (value) == INTEGER_CST && TREE_CODE (expr) == INTEGER_CST && TREE_CODE (TREE_TYPE (expr)) != INTEGER_TYPE) --- 3791,3797 ---- } } ! /* Pedantically, don't let (void *) (FOO *) 0 be a null pointer constant. */ if (pedantic && TREE_CODE (value) == INTEGER_CST && TREE_CODE (expr) == INTEGER_CST && TREE_CODE (TREE_TYPE (expr)) != INTEGER_TYPE) *************** build_c_cast (type, expr) *** 3883,3888 **** --- 3803,3826 ---- return value; } + + /* Interpret a cast of expression EXPR to type TYPE. */ + tree + c_cast_expr (type, expr) + tree type, expr; + { + int saved_wsp = warn_strict_prototypes; + + /* This avoids warnings about unprototyped casts on + integers. E.g. "#define SIG_DFL (void(*)())0". */ + if (TREE_CODE (expr) == INTEGER_CST) + warn_strict_prototypes = 0; + type = groktypename (type); + warn_strict_prototypes = saved_wsp; + + return build_c_cast (type, expr); + } + /* Build an assignment expression of lvalue LHS from value RHS. MODIFYCODE is the code for a binary operator that we use *************** build_modify_expr (lhs, modifycode, rhs) *** 3894,3900 **** tree lhs, rhs; enum tree_code modifycode; { ! register tree result; tree newrhs; tree lhstype = TREE_TYPE (lhs); tree olhstype = lhstype; --- 3832,3838 ---- tree lhs, rhs; enum tree_code modifycode; { ! tree result; tree newrhs; tree lhstype = TREE_TYPE (lhs); tree olhstype = lhstype; *************** build_modify_expr (lhs, modifycode, rhs) *** 3978,3986 **** case FIX_FLOOR_EXPR: case FIX_ROUND_EXPR: case FIX_CEIL_EXPR: ! if (TREE_CODE (TREE_TYPE (newrhs)) == ARRAY_TYPE ! || TREE_CODE (TREE_TYPE (newrhs)) == FUNCTION_TYPE) ! newrhs = default_conversion (newrhs); { tree inner_lhs = TREE_OPERAND (lhs, 0); tree result; --- 3916,3922 ---- case FIX_FLOOR_EXPR: case FIX_ROUND_EXPR: case FIX_CEIL_EXPR: ! newrhs = default_function_array_conversion (newrhs); { tree inner_lhs = TREE_OPERAND (lhs, 0); tree result; *************** convert_for_assignment (type, rhs, errty *** 4075,4083 **** tree fundecl, funname; int parmnum; { ! register enum tree_code codel = TREE_CODE (type); ! register tree rhstype; ! register enum tree_code coder; /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */ /* Do not use STRIP_NOPS here. We do not want an enumerator --- 4011,4019 ---- tree fundecl, funname; int parmnum; { ! enum tree_code codel = TREE_CODE (type); ! tree rhstype; ! enum tree_code coder; /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */ /* Do not use STRIP_NOPS here. We do not want an enumerator *************** convert_for_assignment (type, rhs, errty *** 4162,4169 **** if (coder == POINTER_TYPE) { ! register tree ttl = TREE_TYPE (memb_type); ! register tree ttr = TREE_TYPE (rhstype); /* Any non-function converts to a [const][volatile] void * and vice versa; otherwise, targets must be the same. --- 4098,4105 ---- if (coder == POINTER_TYPE) { ! tree ttl = TREE_TYPE (memb_type); ! tree ttr = TREE_TYPE (rhstype); /* Any non-function converts to a [const][volatile] void * and vice versa; otherwise, targets must be the same. *************** convert_for_assignment (type, rhs, errty *** 4204,4211 **** { /* We have only a marginally acceptable member type; it needs a warning. */ ! register tree ttl = TREE_TYPE (marginal_memb_type); ! register tree ttr = TREE_TYPE (rhstype); /* Const and volatile mean something different for function types, so the usual warnings are not appropriate. */ --- 4140,4147 ---- { /* We have only a marginally acceptable member type; it needs a warning. */ ! tree ttl = TREE_TYPE (marginal_memb_type); ! tree ttr = TREE_TYPE (rhstype); /* Const and volatile mean something different for function types, so the usual warnings are not appropriate. */ *************** convert_for_assignment (type, rhs, errty *** 4238,4245 **** else if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE) && (coder == POINTER_TYPE || coder == REFERENCE_TYPE)) { ! register tree ttl = TREE_TYPE (type); ! register tree ttr = TREE_TYPE (rhstype); /* Any non-function converts to a [const][volatile] void * and vice versa; otherwise, targets must be the same. --- 4174,4181 ---- else if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE) && (coder == POINTER_TYPE || coder == REFERENCE_TYPE)) { ! tree ttl = TREE_TYPE (type); ! tree ttr = TREE_TYPE (rhstype); /* Any non-function converts to a [const][volatile] void * and vice versa; otherwise, targets must be the same. *************** convert_for_assignment (type, rhs, errty *** 4344,4349 **** --- 4280,4309 ---- return error_mark_node; } + /* Convert VALUE for assignment into inlined parameter PARM. */ + + tree + c_convert_parm_for_inlining (parm, value, fn) + tree parm, value, fn; + { + tree ret, type; + + /* If FN was prototyped, the value has been converted already + in convert_arguments. */ + if (! value || TYPE_ARG_TYPES (TREE_TYPE (fn))) + return value; + + type = TREE_TYPE (parm); + ret = convert_for_assignment (type, value, + (char *) 0 /* arg passing */, fn, + DECL_NAME (fn), 0); + if (PROMOTE_PROTOTYPES + && INTEGRAL_TYPE_P (type) + && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))) + ret = default_conversion (ret); + return ret; + } + /* Print a warning using MSGID. It gets OPNAME as its one parameter. If OPNAME is null, it is replaced by "passing arg ARGNUM of `FUNCTION'". *************** warn_for_assignment (msgid, opname, func *** 4370,4376 **** if (function) { /* Function name is known; supply it. */ ! const char *argstring = _("passing arg %d of `%s'"); new_opname = (char *) alloca (IDENTIFIER_LENGTH (function) + strlen (argstring) + 1 + 25 /*%d*/ + 1); --- 4330,4336 ---- if (function) { /* Function name is known; supply it. */ ! const char *const argstring = _("passing arg %d of `%s'"); new_opname = (char *) alloca (IDENTIFIER_LENGTH (function) + strlen (argstring) + 1 + 25 /*%d*/ + 1); *************** warn_for_assignment (msgid, opname, func *** 4379,4386 **** } else { ! /* Function name unknown (call through ptr); just give arg number.*/ ! const char *argnofun = _("passing arg %d of pointer to function"); new_opname = (char *) alloca (strlen (argnofun) + 1 + 25 /*%d*/ + 1); sprintf (new_opname, argnofun, argnum); } --- 4339,4346 ---- } else { ! /* Function name unknown (call through ptr); just give arg number. */ ! const char *const argnofun = _("passing arg %d of pointer to function"); new_opname = (char *) alloca (strlen (argnofun) + 1 + 25 /*%d*/ + 1); sprintf (new_opname, argnofun, argnum); } *************** void *** 4424,4430 **** store_init_value (decl, init) tree decl, init; { ! register tree value, type; /* If variable's type was invalidly declared, just ignore it. */ --- 4384,4390 ---- store_init_value (decl, init) tree decl, init; { ! tree value, type; /* If variable's type was invalidly declared, just ignore it. */ *************** store_init_value (decl, init) *** 4477,4482 **** --- 4437,4469 ---- /* ANSI wants warnings about out-of-range constant initializers. */ STRIP_TYPE_NOPS (value); constant_expression_warning (value); + + /* Check if we need to set array size from compound literal size. */ + if (TREE_CODE (type) == ARRAY_TYPE + && TYPE_DOMAIN (type) == 0 + && value != error_mark_node) + { + tree inside_init = init; + + if (TREE_CODE (init) == NON_LVALUE_EXPR) + inside_init = TREE_OPERAND (init, 0); + inside_init = fold (inside_init); + + if (TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR) + { + tree decl = COMPOUND_LITERAL_EXPR_DECL (inside_init); + + if (TYPE_DOMAIN (TREE_TYPE (decl))) + { + /* For int foo[] = (int [3]){1}; we need to set array size + now since later on array initializer will be just the + brace enclosed list of the compound literal. */ + TYPE_DOMAIN (type) = TYPE_DOMAIN (TREE_TYPE (decl)); + layout_type (type); + layout_decl (decl, 0); + } + } + } } /* Methods for storing and printing names for error messages. */ *************** static int spelling_size; /* Size of th *** 4506,4512 **** Alternative to SAVE_SPELLING_STACK. */ #define SPELLING_DEPTH() (spelling - spelling_base) ! #define RESTORE_SPELLING_DEPTH(depth) (spelling = spelling_base + depth) /* Save and restore the spelling stack around arbitrary C code. */ --- 4493,4499 ---- Alternative to SAVE_SPELLING_STACK. */ #define SPELLING_DEPTH() (spelling - spelling_base) ! #define RESTORE_SPELLING_DEPTH(DEPTH) (spelling = spelling_base + (DEPTH)) /* Save and restore the spelling stack around arbitrary C code. */ *************** push_member_name (decl) *** 4558,4564 **** tree decl; { ! const char *string = DECL_NAME (decl) ? IDENTIFIER_POINTER (DECL_NAME (decl)) : ""; PUSH_SPELLING (SPELLING_MEMBER, string, u.s); } --- 4545,4551 ---- tree decl; { ! const char *const string = DECL_NAME (decl) ? IDENTIFIER_POINTER (DECL_NAME (decl)) : ""; PUSH_SPELLING (SPELLING_MEMBER, string, u.s); } *************** push_array_bounds (bounds) *** 4577,4584 **** static int spelling_length () { ! register int size = 0; ! register struct spelling *p; for (p = spelling_base; p < spelling; p++) { --- 4564,4571 ---- static int spelling_length () { ! int size = 0; ! struct spelling *p; for (p = spelling_base; p < spelling; p++) { *************** spelling_length () *** 4595,4604 **** static char * print_spelling (buffer) ! register char *buffer; { ! register char *d = buffer; ! register struct spelling *p; for (p = spelling_base; p < spelling; p++) if (p->kind == SPELLING_BOUNDS) --- 4582,4591 ---- static char * print_spelling (buffer) ! char *buffer; { ! char *d = buffer; ! struct spelling *p; for (p = spelling_base; p < spelling; p++) if (p->kind == SPELLING_BOUNDS) *************** print_spelling (buffer) *** 4608,4614 **** } else { ! register const char *s; if (p->kind == SPELLING_MEMBER) *d++ = '.'; for (s = p->u.s; (*d = *s++); d++) --- 4595,4601 ---- } else { ! const char *s; if (p->kind == SPELLING_MEMBER) *d++ = '.'; for (s = p->u.s; (*d = *s++); d++) *************** error_init (msgid) *** 4628,4634 **** { char *ofwhat; ! error ("%s", msgid); ofwhat = print_spelling ((char *) alloca (spelling_length () + 1)); if (*ofwhat) error ("(near initialization for `%s')", ofwhat); --- 4615,4621 ---- { char *ofwhat; ! error ("%s", _(msgid)); ofwhat = print_spelling ((char *) alloca (spelling_length () + 1)); if (*ofwhat) error ("(near initialization for `%s')", ofwhat); *************** pedwarn_init (msgid) *** 4644,4650 **** { char *ofwhat; ! pedwarn ("%s", msgid); ofwhat = print_spelling ((char *) alloca (spelling_length () + 1)); if (*ofwhat) pedwarn ("(near initialization for `%s')", ofwhat); --- 4631,4637 ---- { char *ofwhat; ! pedwarn ("%s", _(msgid)); ofwhat = print_spelling ((char *) alloca (spelling_length () + 1)); if (*ofwhat) pedwarn ("(near initialization for `%s')", ofwhat); *************** warning_init (msgid) *** 4660,4666 **** { char *ofwhat; ! warning ("%s", msgid); ofwhat = print_spelling ((char *) alloca (spelling_length () + 1)); if (*ofwhat) warning ("(near initialization for `%s')", ofwhat); --- 4647,4653 ---- { char *ofwhat; ! warning ("%s", _(msgid)); ofwhat = print_spelling ((char *) alloca (spelling_length () + 1)); if (*ofwhat) warning ("(near initialization for `%s')", ofwhat); *************** digest_init (type, init, require_constan *** 4683,4689 **** if (type == error_mark_node || init == error_mark_node ! || TREE_TYPE (init) == error_mark_node) return error_mark_node; /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */ --- 4670,4676 ---- if (type == error_mark_node || init == error_mark_node ! || TREE_TYPE (init) == error_mark_node) return error_mark_node; /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */ *************** digest_init (type, init, require_constan *** 4728,4733 **** --- 4715,4721 ---- TREE_TYPE (inside_init) = type; if (TYPE_DOMAIN (type) != 0 + && TYPE_SIZE (type) != 0 && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST /* Subtract 1 (or sizeof (wchar_t)) because it's ok to ignore the terminating null char *************** digest_init (type, init, require_constan *** 4753,4770 **** TYPE_MAIN_VARIANT (type)) || (code == ARRAY_TYPE && comptypes (TREE_TYPE (inside_init), type)) || (code == POINTER_TYPE && (TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE || TREE_CODE (TREE_TYPE (inside_init)) == FUNCTION_TYPE) && comptypes (TREE_TYPE (TREE_TYPE (inside_init)), TREE_TYPE (type))))) { ! if (code == POINTER_TYPE ! && (TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE ! || TREE_CODE (TREE_TYPE (inside_init)) == FUNCTION_TYPE)) ! inside_init = default_conversion (inside_init); ! else if (code == ARRAY_TYPE && TREE_CODE (inside_init) != STRING_CST ! && TREE_CODE (inside_init) != CONSTRUCTOR) { error_init ("array initialized from non-constant array expression"); return error_mark_node; --- 4741,4769 ---- TYPE_MAIN_VARIANT (type)) || (code == ARRAY_TYPE && comptypes (TREE_TYPE (inside_init), type)) + || (code == VECTOR_TYPE + && comptypes (TREE_TYPE (inside_init), type)) || (code == POINTER_TYPE && (TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE || TREE_CODE (TREE_TYPE (inside_init)) == FUNCTION_TYPE) && comptypes (TREE_TYPE (TREE_TYPE (inside_init)), TREE_TYPE (type))))) { ! if (code == POINTER_TYPE) ! inside_init = default_function_array_conversion (inside_init); ! ! if (require_constant && !flag_isoc99 ! && TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR) ! { ! /* As an extension, allow initializing objects with static storage ! duration with compound literals (which are then treated just as ! the brace enclosed list they contain). */ ! tree decl = COMPOUND_LITERAL_EXPR_DECL (inside_init); ! inside_init = DECL_INITIAL (decl); ! } ! ! if (code == ARRAY_TYPE && TREE_CODE (inside_init) != STRING_CST ! && TREE_CODE (inside_init) != CONSTRUCTOR) { error_init ("array initialized from non-constant array expression"); return error_mark_node; *************** static const char *constructor_asmspec; *** 4973,4978 **** --- 4972,4980 ---- /* Nonzero if this is an initializer for a top-level decl. */ static int constructor_top_level; + /* Nonzero if there were any member designators in this initializer. */ + static int constructor_designated; + /* Nesting depth of designator list. */ static int designator_depth; *************** struct constructor_stack *** 5010,5015 **** --- 5012,5018 ---- char erroneous; char outer; char incremental; + char designated; }; struct constructor_stack *constructor_stack; *************** start_init (decl, asmspec_tree, top_leve *** 5086,5091 **** --- 5089,5095 ---- constructor_decl = decl; constructor_asmspec = asmspec; constructor_subconstants_deferred = 0; + constructor_designated = 0; constructor_top_level = top_level; if (decl != 0) *************** really_start_incremental_init (type) *** 5195,5200 **** --- 5199,5205 ---- p->range_stack = 0; p->outer = 0; p->incremental = constructor_incremental; + p->designated = constructor_designated; p->next = 0; constructor_stack = p; *************** really_start_incremental_init (type) *** 5205,5210 **** --- 5210,5216 ---- constructor_pending_elts = 0; constructor_type = type; constructor_incremental = 1; + constructor_designated = 0; designator_depth = 0; designator_errorneous = 0; *************** really_start_incremental_init (type) *** 5228,5234 **** = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type)); /* Detect non-empty initializations of zero-length arrays. */ ! if (constructor_max_index == NULL_TREE) constructor_max_index = build_int_2 (-1, -1); constructor_index --- 5234,5248 ---- = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type)); /* Detect non-empty initializations of zero-length arrays. */ ! if (constructor_max_index == NULL_TREE ! && TYPE_SIZE (constructor_type)) ! constructor_max_index = build_int_2 (-1, -1); ! ! /* constructor_max_index needs to be an INTEGER_CST. Attempts ! to initialize VLAs will cause an proper error; avoid tree ! checking errors as well by setting a safe value. */ ! if (constructor_max_index ! && TREE_CODE (constructor_max_index) != INTEGER_CST) constructor_max_index = build_int_2 (-1, -1); constructor_index *************** really_start_incremental_init (type) *** 5240,5245 **** --- 5254,5267 ---- constructor_unfilled_index = constructor_index; } + else if (TREE_CODE (constructor_type) == VECTOR_TYPE) + { + /* Vectors are like simple fixed-size arrays. */ + constructor_max_index = + build_int_2 (TYPE_VECTOR_SUBPARTS (constructor_type) - 1, 0); + constructor_index = convert (bitsizetype, integer_zero_node); + constructor_unfilled_index = constructor_index; + } else { /* Handle the case of int x = {5}; */ *************** push_init_level (implicit) *** 5305,5310 **** --- 5327,5333 ---- p->implicit = implicit; p->outer = 0; p->incremental = constructor_incremental; + p->designated = constructor_designated; p->next = constructor_stack; p->range_stack = 0; constructor_stack = p; *************** push_init_level (implicit) *** 5314,5319 **** --- 5337,5343 ---- constructor_depth = SPELLING_DEPTH (); constructor_elements = 0; constructor_incremental = 1; + constructor_designated = 0; constructor_pending_elts = 0; if (!implicit) { *************** push_init_level (implicit) *** 5384,5403 **** constructor_unfilled_fields = constructor_fields; constructor_bit_index = bitsize_zero_node; } else if (TREE_CODE (constructor_type) == ARRAY_TYPE) { if (TYPE_DOMAIN (constructor_type)) { constructor_max_index = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type)); constructor_index = convert (bitsizetype, TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type))); - - /* ??? For GCC 3.1, remove special case initialization of - zero-length array members from pop_init_level and set - constructor_max_index such that we get the normal - "excess elements" warning. */ } else constructor_index = bitsize_zero_node; --- 5408,5443 ---- constructor_unfilled_fields = constructor_fields; constructor_bit_index = bitsize_zero_node; } + else if (TREE_CODE (constructor_type) == VECTOR_TYPE) + { + /* Vectors are like simple fixed-size arrays. */ + constructor_max_index = + build_int_2 (TYPE_VECTOR_SUBPARTS (constructor_type) - 1, 0); + constructor_index = convert (bitsizetype, integer_zero_node); + constructor_unfilled_index = constructor_index; + } else if (TREE_CODE (constructor_type) == ARRAY_TYPE) { if (TYPE_DOMAIN (constructor_type)) { constructor_max_index = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type)); + + /* Detect non-empty initializations of zero-length arrays. */ + if (constructor_max_index == NULL_TREE + && TYPE_SIZE (constructor_type)) + constructor_max_index = build_int_2 (-1, -1); + + /* constructor_max_index needs to be an INTEGER_CST. Attempts + to initialize VLAs will cause an proper error; avoid tree + checking errors as well by setting a safe value. */ + if (constructor_max_index + && TREE_CODE (constructor_max_index) != INTEGER_CST) + constructor_max_index = build_int_2 (-1, -1); + constructor_index = convert (bitsizetype, TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type))); } else constructor_index = bitsize_zero_node; *************** pop_init_level (implicit) *** 5432,5438 **** int implicit; { struct constructor_stack *p; - HOST_WIDE_INT size = 0; tree constructor = 0; if (implicit == 0) --- 5472,5477 ---- *************** pop_init_level (implicit) *** 5448,5456 **** p = constructor_stack; - if (constructor_type != 0) - size = int_size_in_bytes (constructor_type); - /* Error for initializing a flexible array member, or a zero-length array member in an inappropriate context. */ if (constructor_type && constructor_fields --- 5487,5492 ---- *************** pop_init_level (implicit) *** 5469,5494 **** else if (pedantic) pedwarn_init ("initialization of a flexible array member"); ! /* We have already issued an error message for the existance of a flexible array member not at the end of the structure. Discard the initializer so that we do not abort later. */ if (TREE_CHAIN (constructor_fields) != NULL_TREE) constructor_type = NULL_TREE; } else ! { ! warning_init ("deprecated initialization of zero-length array"); ! ! /* We must be initializing the last member of a top-level struct. */ ! if (TREE_CHAIN (constructor_fields) != NULL_TREE) ! { ! error_init ("initialization of zero-length array before end of structure"); ! /* Discard the initializer so that we do not abort later. */ ! constructor_type = NULL_TREE; ! } ! else if (constructor_depth > 2) ! error_init ("initialization of zero-length array inside a nested context"); ! } } /* Warn when some struct elements are implicitly initialized to zero. */ --- 5505,5520 ---- else if (pedantic) pedwarn_init ("initialization of a flexible array member"); ! /* We have already issued an error message for the existence of a flexible array member not at the end of the structure. Discard the initializer so that we do not abort later. */ if (TREE_CHAIN (constructor_fields) != NULL_TREE) constructor_type = NULL_TREE; } else ! /* Zero-length arrays are no longer special, so we should no longer ! get here. */ ! abort (); } /* Warn when some struct elements are implicitly initialized to zero. */ *************** pop_init_level (implicit) *** 5503,5509 **** || integer_zerop (DECL_SIZE (constructor_unfilled_fields)))) constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields); ! if (constructor_unfilled_fields) { push_member_name (constructor_unfilled_fields); warning_init ("missing initializer"); --- 5529,5537 ---- || integer_zerop (DECL_SIZE (constructor_unfilled_fields)))) constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields); ! /* Do not warn if this level of the initializer uses member ! designators; it is likely to be deliberate. */ ! if (constructor_unfilled_fields && !constructor_designated) { push_member_name (constructor_unfilled_fields); warning_init ("missing initializer"); *************** pop_init_level (implicit) *** 5524,5530 **** ; else if (TREE_CODE (constructor_type) != RECORD_TYPE && TREE_CODE (constructor_type) != UNION_TYPE ! && TREE_CODE (constructor_type) != ARRAY_TYPE) { /* A nonincremental scalar initializer--just return the element, after verifying there is just one. */ --- 5552,5559 ---- ; else if (TREE_CODE (constructor_type) != RECORD_TYPE && TREE_CODE (constructor_type) != UNION_TYPE ! && TREE_CODE (constructor_type) != ARRAY_TYPE ! && TREE_CODE (constructor_type) != VECTOR_TYPE) { /* A nonincremental scalar initializer--just return the element, after verifying there is just one. */ *************** pop_init_level (implicit) *** 5569,5574 **** --- 5598,5604 ---- constructor_simple = p->simple; constructor_erroneous = p->erroneous; constructor_incremental = p->incremental; + constructor_designated = p->designated; constructor_pending_elts = p->pending_elts; constructor_depth = p->depth; if (!p->implicit) *************** set_designator (array) *** 5615,5620 **** --- 5645,5651 ---- braces. */ while (constructor_stack->implicit) process_init_element (pop_init_level (1)); + constructor_designated = 1; return 0; } *************** set_designator (array) *** 5650,5655 **** --- 5681,5687 ---- return 1; } + constructor_designated = 1; push_init_level (2); return 0; } *************** set_init_label (fieldname) *** 5788,5794 **** } /* Add a new initializer to the tree of pending initializers. PURPOSE ! indentifies the initializer, either array index or field in a structure. VALUE is the value of that index or field. */ static void --- 5820,5826 ---- } /* Add a new initializer to the tree of pending initializers. PURPOSE ! identifies the initializer, either array index or field in a structure. VALUE is the value of that index or field. */ static void *************** add_pending_init (purpose, value) *** 5862,5868 **** { if (r->balance < 0) { ! /* L rotation. */ p->left = r->right; if (p->left) p->left->parent = p; --- 5894,5900 ---- { if (r->balance < 0) { ! /* L rotation. */ p->left = r->right; if (p->left) p->left->parent = p; *************** add_pending_init (purpose, value) *** 5886,5892 **** } else { ! /* LR rotation. */ struct init_node *t = r->right; r->right = t->left; --- 5918,5924 ---- } else { ! /* LR rotation. */ struct init_node *t = r->right; r->right = t->left; *************** add_pending_init (purpose, value) *** 5935,5941 **** { if (r->balance > 0) { ! /* R rotation. */ p->right = r->left; if (p->right) p->right->parent = p; --- 5967,5973 ---- { if (r->balance > 0) { ! /* R rotation. */ p->right = r->left; if (p->right) p->right->parent = p; *************** add_pending_init (purpose, value) *** 5994,6000 **** } else { ! /* p->balance == -1; growth of right side balances the node. */ p->balance = 0; break; } --- 6026,6032 ---- } else { ! /* p->balance == -1; growth of right side balances the node. */ p->balance = 0; break; } *************** output_init_element (value, type, field, *** 6204,6209 **** --- 6236,6251 ---- TYPE_MAIN_VARIANT (type)))) value = default_conversion (value); + if (TREE_CODE (value) == COMPOUND_LITERAL_EXPR + && require_constant_value && !flag_isoc99 && pending) + { + /* As an extension, allow initializing objects with static storage + duration with compound literals (which are then treated just as + the brace enclosed list they contain). */ + tree decl = COMPOUND_LITERAL_EXPR_DECL (value); + value = DECL_INITIAL (decl); + } + if (value == error_mark_node) constructor_erroneous = 1; else if (!TREE_CONSTANT (value)) *************** output_init_element (value, type, field, *** 6234,6239 **** --- 6276,6283 ---- || TREE_CHAIN (field))))) return; + value = digest_init (type, value, require_constant_value, + require_constant_elements); if (value == error_mark_node) { constructor_erroneous = 1; *************** output_init_element (value, type, field, *** 6250,6258 **** && tree_int_cst_lt (field, constructor_unfilled_index)) set_nonincremental_init (); ! add_pending_init (field, ! digest_init (type, value, require_constant_value, ! require_constant_elements)); return; } else if (TREE_CODE (constructor_type) == RECORD_TYPE --- 6294,6300 ---- && tree_int_cst_lt (field, constructor_unfilled_index)) set_nonincremental_init (); ! add_pending_init (field, value); return; } else if (TREE_CODE (constructor_type) == RECORD_TYPE *************** output_init_element (value, type, field, *** 6278,6286 **** } } ! add_pending_init (field, ! digest_init (type, value, require_constant_value, ! require_constant_elements)); return; } else if (TREE_CODE (constructor_type) == UNION_TYPE --- 6320,6326 ---- } } ! add_pending_init (field, value); return; } else if (TREE_CODE (constructor_type) == UNION_TYPE *************** output_init_element (value, type, field, *** 6299,6308 **** if (field && TREE_CODE (field) == INTEGER_CST) field = copy_node (field); constructor_elements ! = tree_cons (field, digest_init (type, value, ! require_constant_value, ! require_constant_elements), ! constructor_elements); /* Advance the variable that indicates sequential elements output. */ if (TREE_CODE (constructor_type) == ARRAY_TYPE) --- 6339,6345 ---- if (field && TREE_CODE (field) == INTEGER_CST) field = copy_node (field); constructor_elements ! = tree_cons (field, value, constructor_elements); /* Advance the variable that indicates sequential elements output. */ if (TREE_CODE (constructor_type) == ARRAY_TYPE) *************** process_init_element (value) *** 6535,6541 **** /* In the case of [LO ... HI] = VALUE, only evaluate VALUE once. */ if (constructor_range_stack) ! value = save_expr (value); while (1) { --- 6572,6585 ---- /* In the case of [LO ... HI] = VALUE, only evaluate VALUE once. */ if (constructor_range_stack) ! { ! /* If value is a compound literal and we'll be just using its ! content, don't put it into a SAVE_EXPR. */ ! if (TREE_CODE (value) != COMPOUND_LITERAL_EXPR ! || !require_constant_value ! || flag_isoc99) ! value = save_expr (value); ! } while (1) { *************** process_init_element (value) *** 6555,6560 **** --- 6599,6614 ---- fieldtype = TYPE_MAIN_VARIANT (fieldtype); fieldcode = TREE_CODE (fieldtype); + /* Error for non-static initialization of a flexible array member. */ + if (fieldcode == ARRAY_TYPE + && !require_constant_value + && TYPE_SIZE (fieldtype) == NULL_TREE + && TREE_CHAIN (constructor_fields) == NULL_TREE) + { + error_init ("non-static initialization of a flexible array member"); + break; + } + /* Accept a string constant to initialize a subarray. */ if (value != 0 && fieldcode == ARRAY_TYPE *************** process_init_element (value) *** 6627,6634 **** under the assumption that the zero initializer in user code appears conditioned on e.g. __STDC__ to avoid "missing initializer" warnings and relies on default ! initialization to zero in the traditional C case. */ ! if (warn_traditional && !in_system_header && !(value && (integer_zerop (value) || real_zerop (value)))) warning ("traditional C rejects initialization of unions"); --- 6681,6692 ---- under the assumption that the zero initializer in user code appears conditioned on e.g. __STDC__ to avoid "missing initializer" warnings and relies on default ! initialization to zero in the traditional C case. ! We also skip the warning if the initializer is designated, ! again on the assumption that this must be conditional on ! __STDC__ anyway (and we've already complained about the ! member-designator already). */ ! if (warn_traditional && !in_system_header && !constructor_designated && !(value && (integer_zerop (value) || real_zerop (value)))) warning ("traditional C rejects initialization of unions"); *************** process_init_element (value) *** 6714,6719 **** --- 6772,6802 ---- constructor_unfilled_index. */ constructor_unfilled_index = constructor_index; } + else if (TREE_CODE (constructor_type) == VECTOR_TYPE) + { + tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type)); + + /* Do a basic check of initializer size. Note that vectors + always have a fixed size derived from their type. */ + if (tree_int_cst_lt (constructor_max_index, constructor_index)) + { + pedwarn_init ("excess elements in vector initializer"); + break; + } + + /* Now output the actual element. */ + if (value) + output_init_element (value, elttype, constructor_index, 1); + + constructor_index + = size_binop (PLUS_EXPR, constructor_index, bitsize_one_node); + + if (! value) + /* If we are doing the bookkeeping for an element that was + directly output as a constructor, we must update + constructor_unfilled_index. */ + constructor_unfilled_index = constructor_index; + } /* Handle the sole element allowed in a braced initializer for a scalar variable. */ *************** process_init_element (value) *** 6786,6791 **** --- 6869,6901 ---- constructor_range_stack = 0; } + /* Build a simple asm-statement, from one string literal. */ + tree + simple_asm_stmt (expr) + tree expr; + { + STRIP_NOPS (expr); + + if (TREE_CODE (expr) == ADDR_EXPR) + expr = TREE_OPERAND (expr, 0); + + if (TREE_CODE (expr) == STRING_CST) + { + tree stmt; + + if (TREE_CHAIN (expr)) + expr = combine_strings (expr); + stmt = add_stmt (build_stmt (ASM_STMT, NULL_TREE, expr, + NULL_TREE, NULL_TREE, + NULL_TREE)); + ASM_INPUT_P (stmt) = 1; + return stmt; + } + + error ("argument of `asm' is not a constant string"); + return NULL_TREE; + } + /* Build an asm-statement, whose components are a CV_QUALIFIER, a STRING, some OUTPUTS, some INPUTS, and some CLOBBERS. */ *************** build_asm_stmt (cv_qualifier, string, ou *** 6850,6858 **** Don't do this for other types as it would screw up operands expected to be in memory. */ for (tail = inputs; tail; tail = TREE_CHAIN (tail)) ! if (TREE_CODE (TREE_TYPE (TREE_VALUE (tail))) == ARRAY_TYPE ! || TREE_CODE (TREE_TYPE (TREE_VALUE (tail))) == FUNCTION_TYPE) ! TREE_VALUE (tail) = default_conversion (TREE_VALUE (tail)); return add_stmt (build_stmt (ASM_STMT, cv_qualifier, string, outputs, inputs, clobbers)); --- 6960,6966 ---- Don't do this for other types as it would screw up operands expected to be in memory. */ for (tail = inputs; tail; tail = TREE_CHAIN (tail)) ! TREE_VALUE (tail) = default_function_array_conversion (TREE_VALUE (tail)); return add_stmt (build_stmt (ASM_STMT, cv_qualifier, string, outputs, inputs, clobbers)); *************** c_expand_asm_operands (string, outputs, *** 6872,6881 **** int line; { int noutputs = list_length (outputs); ! register int i; /* o[I] is the place that output number I should be written. */ ! register tree *o = (tree *) alloca (noutputs * sizeof (tree)); ! register tree tail; /* Record the contents of OUTPUTS before it is modified. */ for (i = 0, tail = outputs; tail; tail = TREE_CHAIN (tail), i++) --- 6980,6989 ---- int line; { int noutputs = list_length (outputs); ! int i; /* o[I] is the place that output number I should be written. */ ! tree *o = (tree *) alloca (noutputs * sizeof (tree)); ! tree tail; /* Record the contents of OUTPUTS before it is modified. */ for (i = 0, tail = outputs; tail; tail = TREE_CHAIN (tail), i++) *************** c_expand_return (retval) *** 6949,6954 **** --- 7057,7063 ---- tree res = DECL_RESULT (current_function_decl); tree inner; + current_function_returns_value = 1; if (t == error_mark_node) return NULL_TREE; *************** c_expand_return (retval) *** 7006,7012 **** } retval = build (MODIFY_EXPR, TREE_TYPE (res), res, t); - current_function_returns_value = 1; } return add_stmt (build_return_stmt (retval)); --- 7115,7120 ---- *************** tree *** 7040,7055 **** c_start_case (exp) tree exp; { ! register enum tree_code code; ! tree type; struct c_switch *cs; if (exp != error_mark_node) { code = TREE_CODE (TREE_TYPE (exp)); ! type = TREE_TYPE (exp); ! if (! INTEGRAL_TYPE_P (type) && code != ERROR_MARK) { error ("switch quantity not an integer"); --- 7148,7163 ---- c_start_case (exp) tree exp; { ! enum tree_code code; ! tree type, orig_type = error_mark_node; struct c_switch *cs; if (exp != error_mark_node) { code = TREE_CODE (TREE_TYPE (exp)); ! orig_type = TREE_TYPE (exp); ! if (! INTEGRAL_TYPE_P (orig_type) && code != ERROR_MARK) { error ("switch quantity not an integer"); *************** c_start_case (exp) *** 7057,7063 **** } else { - tree index; type = TYPE_MAIN_VARIANT (TREE_TYPE (exp)); if (warn_traditional && !in_system_header --- 7165,7170 ---- *************** c_start_case (exp) *** 7067,7086 **** exp = default_conversion (exp); type = TREE_TYPE (exp); - index = get_unwidened (exp, NULL_TREE); - /* We can't strip a conversion from a signed type to an - unsigned, because if we did, int_fits_type_p would do the - wrong thing when checking case values for being in range, - and it's too hard to do the right thing. */ - if (TREE_UNSIGNED (TREE_TYPE (exp)) - == TREE_UNSIGNED (TREE_TYPE (index))) - exp = index; } } /* Add this new SWITCH_STMT to the stack. */ cs = (struct c_switch *) xmalloc (sizeof (*cs)); ! cs->switch_stmt = build_stmt (SWITCH_STMT, exp, NULL_TREE, NULL_TREE); cs->cases = splay_tree_new (case_compare, NULL, NULL); cs->next = switch_stack; switch_stack = cs; --- 7174,7185 ---- exp = default_conversion (exp); type = TREE_TYPE (exp); } } /* Add this new SWITCH_STMT to the stack. */ cs = (struct c_switch *) xmalloc (sizeof (*cs)); ! cs->switch_stmt = build_stmt (SWITCH_STMT, exp, NULL_TREE, orig_type); cs->cases = splay_tree_new (case_compare, NULL, NULL); cs->next = switch_stack; switch_stack = cs; diff -Nrc3pad gcc-3.0.4/gcc/caller-save.c gcc-3.1/gcc/caller-save.c *** gcc-3.0.4/gcc/caller-save.c Fri Oct 13 06:26:23 2000 --- gcc-3.1/gcc/caller-save.c Tue Jan 1 22:22:25 2002 *************** *** 1,23 **** /* Save and restore call-clobbered registers which are live across a call. Copyright (C) 1989, 1992, 1994, 1995, 1997, 1998, ! 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" #include "system.h" --- 1,23 ---- /* Save and restore call-clobbered registers which are live across a call. Copyright (C) 1989, 1992, 1994, 1995, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" #include "system.h" *************** static rtx *** 64,73 **** when we emit them, the addresses might not be valid, so they might not be recognized. */ ! static enum insn_code ! reg_save_code[FIRST_PSEUDO_REGISTER][MAX_MOVE_MAX / MIN_UNITS_PER_WORD + 1]; ! static enum insn_code ! reg_restore_code[FIRST_PSEUDO_REGISTER][MAX_MOVE_MAX / MIN_UNITS_PER_WORD + 1]; /* Set of hard regs currently residing in save area (during insn scan). */ --- 64,73 ---- when we emit them, the addresses might not be valid, so they might not be recognized. */ ! static int ! reg_save_code[FIRST_PSEUDO_REGISTER][MAX_MACHINE_MODE]; ! static int ! reg_restore_code[FIRST_PSEUDO_REGISTER][MAX_MACHINE_MODE]; /* Set of hard regs currently residing in save area (during insn scan). */ *************** static HARD_REG_SET this_insn_sets; *** 89,99 **** static void mark_set_regs PARAMS ((rtx, rtx, void *)); static void mark_referenced_regs PARAMS ((rtx)); static int insert_save PARAMS ((struct insn_chain *, int, int, ! HARD_REG_SET *)); static int insert_restore PARAMS ((struct insn_chain *, int, int, ! int)); static struct insn_chain *insert_one_insn PARAMS ((struct insn_chain *, int, ! enum insn_code, rtx)); static void add_stored_regs PARAMS ((rtx, rtx, void *)); /* Initialize for caller-save. --- 89,100 ---- static void mark_set_regs PARAMS ((rtx, rtx, void *)); static void mark_referenced_regs PARAMS ((rtx)); static int insert_save PARAMS ((struct insn_chain *, int, int, ! HARD_REG_SET *, ! enum machine_mode *)); static int insert_restore PARAMS ((struct insn_chain *, int, int, ! int, enum machine_mode *)); static struct insn_chain *insert_one_insn PARAMS ((struct insn_chain *, int, ! int, rtx)); static void add_stored_regs PARAMS ((rtx, rtx, void *)); /* Initialize for caller-save. *************** init_caller_save () *** 113,118 **** --- 114,120 ---- int offset; rtx address; int i, j; + enum machine_mode mode; /* First find all the registers that we need to deal with and all the modes that they can have. If we can't find a mode to use, *************** init_caller_save () *** 124,130 **** { for (j = 1; j <= MOVE_MAX_WORDS; j++) { ! regno_save_mode[i][j] = HARD_REGNO_CALLER_SAVE_MODE (i, j); if (regno_save_mode[i][j] == VOIDmode && j == 1) { call_fixed_regs[i] = 1; --- 126,133 ---- { for (j = 1; j <= MOVE_MAX_WORDS; j++) { ! regno_save_mode[i][j] = HARD_REGNO_CALLER_SAVE_MODE (i, j, ! VOIDmode); if (regno_save_mode[i][j] == VOIDmode && j == 1) { call_fixed_regs[i] = 1; *************** init_caller_save () *** 148,154 **** that register in every mode we will use to save registers. */ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) ! if (TEST_HARD_REG_BIT (reg_class_contents[(int) BASE_REG_CLASS], i)) break; if (i == FIRST_PSEUDO_REGISTER) --- 151,159 ---- that register in every mode we will use to save registers. */ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) ! if (TEST_HARD_REG_BIT ! (reg_class_contents ! [(int) MODE_BASE_REG_CLASS (regno_save_mode [i][1])], i)) break; if (i == FIRST_PSEUDO_REGISTER) *************** init_caller_save () *** 179,202 **** start_sequence (); for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) ! for (j = 1; j <= MOVE_MAX_WORDS; j++) ! if (regno_save_mode[i][j] != VOIDmode) { ! rtx mem = gen_rtx_MEM (regno_save_mode[i][j], address); ! rtx reg = gen_rtx_REG (regno_save_mode[i][j], i); rtx savepat = gen_rtx_SET (VOIDmode, mem, reg); rtx restpat = gen_rtx_SET (VOIDmode, reg, mem); rtx saveinsn = emit_insn (savepat); rtx restinsn = emit_insn (restpat); int ok; ! reg_save_code[i][j] = recog_memoized (saveinsn); ! reg_restore_code[i][j] = recog_memoized (restinsn); /* Now extract both insns and see if we can meet their constraints. */ ! ok = (reg_save_code[i][j] != (enum insn_code)-1 ! && reg_restore_code[i][j] != (enum insn_code)-1); if (ok) { extract_insn (saveinsn); --- 184,207 ---- start_sequence (); for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) ! for (mode = 0 ; mode < MAX_MACHINE_MODE; mode++) ! if (HARD_REGNO_MODE_OK (i, mode)) { ! rtx mem = gen_rtx_MEM (mode, address); ! rtx reg = gen_rtx_REG (mode, i); rtx savepat = gen_rtx_SET (VOIDmode, mem, reg); rtx restpat = gen_rtx_SET (VOIDmode, reg, mem); rtx saveinsn = emit_insn (savepat); rtx restinsn = emit_insn (restpat); int ok; ! reg_save_code[i][mode] = recog_memoized (saveinsn); ! reg_restore_code[i][mode] = recog_memoized (restinsn); /* Now extract both insns and see if we can meet their constraints. */ ! ok = (reg_save_code[i][mode] != -1 ! && reg_restore_code[i][mode] != -1); if (ok) { extract_insn (saveinsn); *************** init_caller_save () *** 207,220 **** if (! ok) { ! regno_save_mode[i][j] = VOIDmode; ! if (j == 1) ! { ! call_fixed_regs[i] = 1; ! SET_HARD_REG_BIT (call_fixed_reg_set, i); ! } } ! } end_sequence (); } --- 212,237 ---- if (! ok) { ! reg_save_code[i][mode] = -1; ! reg_restore_code[i][mode] = -1; } ! } ! else ! { ! reg_save_code[i][mode] = -1; ! reg_restore_code[i][mode] = -1; ! } ! for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) ! for (j = 1; j <= MOVE_MAX_WORDS; j++) ! if (reg_save_code [i][regno_save_mode[i][j]] == -1) ! { ! regno_save_mode[i][j] = VOIDmode; ! if (j == 1) ! { ! call_fixed_regs[i] = 1; ! SET_HARD_REG_BIT (call_fixed_reg_set, i); ! } ! } end_sequence (); } *************** setup_save_areas () *** 314,328 **** /* Setup single word save area just in case... */ for (k = 0; k < j; k++) ! { ! /* This should not depend on WORDS_BIG_ENDIAN. ! The order of words in regs is the same as in memory. */ ! rtx temp = gen_rtx_MEM (regno_save_mode[i + k][1], ! XEXP (regno_save_mem[i][j], 0)); ! ! regno_save_mem[i + k][1] ! = adj_offsettable_operand (temp, k * UNITS_PER_WORD); ! } } /* Now loop again and set the alias set of any save areas we made to --- 331,342 ---- /* Setup single word save area just in case... */ for (k = 0; k < j; k++) ! /* This should not depend on WORDS_BIG_ENDIAN. ! The order of words in regs is the same as in memory. */ ! regno_save_mem[i + k][1] ! = adjust_address_nv (regno_save_mem[i][j], ! regno_save_mode[i + k][1], ! k * UNITS_PER_WORD); } /* Now loop again and set the alias set of any save areas we made to *************** setup_save_areas () *** 330,336 **** for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) for (j = MOVE_MAX_WORDS; j > 0; j--) if (regno_save_mem[i][j] != 0) ! MEM_ALIAS_SET (regno_save_mem[i][j]) = get_frame_alias_set (); } /* Find the places where hard regs are live across calls and save them. */ --- 344,350 ---- for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) for (j = MOVE_MAX_WORDS; j > 0; j--) if (regno_save_mem[i][j] != 0) ! set_mem_alias_set (regno_save_mem[i][j], get_frame_alias_set ()); } /* Find the places where hard regs are live across calls and save them. */ *************** void *** 339,344 **** --- 353,359 ---- save_call_clobbered_regs () { struct insn_chain *chain, *next; + enum machine_mode save_mode [FIRST_PSEUDO_REGISTER]; CLEAR_HARD_REG_SET (hard_regs_saved); n_regs_saved = 0; *************** save_call_clobbered_regs () *** 374,380 **** for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) if (TEST_HARD_REG_BIT (referenced_regs, regno)) ! regno += insert_restore (chain, 1, regno, MOVE_MAX_WORDS); } if (code == CALL_INSN) --- 389,395 ---- for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) if (TEST_HARD_REG_BIT (referenced_regs, regno)) ! regno += insert_restore (chain, 1, regno, MOVE_MAX_WORDS, save_mode); } if (code == CALL_INSN) *************** save_call_clobbered_regs () *** 386,393 **** regs are live during the call. */ REG_SET_TO_HARD_REG_SET (hard_regs_to_save, &chain->live_throughout); ! compute_use_by_pseudos (&hard_regs_to_save, ! &chain->live_throughout); /* Record all registers set in this call insn. These don't need to be saved. N.B. the call insn might set a subreg of a --- 401,437 ---- regs are live during the call. */ REG_SET_TO_HARD_REG_SET (hard_regs_to_save, &chain->live_throughout); ! /* Save hard registers always in the widest mode available. */ ! for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) ! if (TEST_HARD_REG_BIT (hard_regs_to_save, regno)) ! save_mode [regno] = regno_save_mode [regno][1]; ! else ! save_mode [regno] = VOIDmode; ! ! /* Look through all live pseudos, mark their hard registers ! and choose proper mode for saving. */ ! EXECUTE_IF_SET_IN_REG_SET ! (&chain->live_throughout, FIRST_PSEUDO_REGISTER, regno, ! { ! int r = reg_renumber[regno]; ! int nregs; ! ! if (r >= 0) ! { ! enum machine_mode mode; ! ! nregs = HARD_REGNO_NREGS (r, PSEUDO_REGNO_MODE (regno)); ! mode = HARD_REGNO_CALLER_SAVE_MODE ! (r, nregs, PSEUDO_REGNO_MODE (regno)); ! if (GET_MODE_BITSIZE (mode) ! > GET_MODE_BITSIZE (save_mode[r])) ! save_mode[r] = mode; ! while (nregs-- > 0) ! SET_HARD_REG_BIT (hard_regs_to_save, r + nregs); ! } ! else ! abort (); ! }); /* Record all registers set in this call insn. These don't need to be saved. N.B. the call insn might set a subreg of a *************** save_call_clobbered_regs () *** 404,410 **** for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) if (TEST_HARD_REG_BIT (hard_regs_to_save, regno)) ! regno += insert_save (chain, 1, regno, &hard_regs_to_save); /* Must recompute n_regs_saved. */ n_regs_saved = 0; --- 448,454 ---- for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) if (TEST_HARD_REG_BIT (hard_regs_to_save, regno)) ! regno += insert_save (chain, 1, regno, &hard_regs_to_save, save_mode); /* Must recompute n_regs_saved. */ n_regs_saved = 0; *************** save_call_clobbered_regs () *** 425,431 **** for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) if (TEST_HARD_REG_BIT (hard_regs_saved, regno)) regno += insert_restore (chain, GET_CODE (insn) == JUMP_INSN, ! regno, MOVE_MAX_WORDS); } } } --- 469,475 ---- for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) if (TEST_HARD_REG_BIT (hard_regs_saved, regno)) regno += insert_restore (chain, GET_CODE (insn) == JUMP_INSN, ! regno, MOVE_MAX_WORDS, save_mode); } } } *************** mark_set_regs (reg, setter, data) *** 440,459 **** rtx setter ATTRIBUTE_UNUSED; void *data ATTRIBUTE_UNUSED; { ! register int regno, endregno, i; enum machine_mode mode = GET_MODE (reg); - int word = 0; if (GET_CODE (reg) == SUBREG) { ! word = SUBREG_WORD (reg); ! reg = SUBREG_REG (reg); ! } ! if (GET_CODE (reg) != REG || REGNO (reg) >= FIRST_PSEUDO_REGISTER) return; - regno = REGNO (reg) + word; endregno = regno + HARD_REGNO_NREGS (regno, mode); for (i = regno; i < endregno; i++) --- 484,506 ---- rtx setter ATTRIBUTE_UNUSED; void *data ATTRIBUTE_UNUSED; { ! int regno, endregno, i; enum machine_mode mode = GET_MODE (reg); if (GET_CODE (reg) == SUBREG) { ! rtx inner = SUBREG_REG (reg); ! if (GET_CODE (inner) != REG || REGNO (inner) >= FIRST_PSEUDO_REGISTER) ! return; ! regno = subreg_hard_regno (reg, 1); ! } ! else if (GET_CODE (reg) == REG ! && REGNO (reg) < FIRST_PSEUDO_REGISTER) ! regno = REGNO (reg); ! else return; endregno = regno + HARD_REGNO_NREGS (regno, mode); for (i = regno; i < endregno; i++) *************** add_stored_regs (reg, setter, data) *** 470,492 **** rtx setter; void *data; { ! register int regno, endregno, i; enum machine_mode mode = GET_MODE (reg); ! int word = 0; if (GET_CODE (setter) == CLOBBER) return; ! while (GET_CODE (reg) == SUBREG) { ! word += SUBREG_WORD (reg); reg = SUBREG_REG (reg); } if (GET_CODE (reg) != REG || REGNO (reg) >= FIRST_PSEUDO_REGISTER) return; ! regno = REGNO (reg) + word; endregno = regno + HARD_REGNO_NREGS (regno, mode); for (i = regno; i < endregno; i++) --- 517,542 ---- rtx setter; void *data; { ! int regno, endregno, i; enum machine_mode mode = GET_MODE (reg); ! int offset = 0; if (GET_CODE (setter) == CLOBBER) return; ! if (GET_CODE (reg) == SUBREG && GET_CODE (SUBREG_REG (reg)) == REG) { ! offset = subreg_regno_offset (REGNO (SUBREG_REG (reg)), ! GET_MODE (SUBREG_REG (reg)), ! SUBREG_BYTE (reg), ! GET_MODE (reg)); reg = SUBREG_REG (reg); } if (GET_CODE (reg) != REG || REGNO (reg) >= FIRST_PSEUDO_REGISTER) return; ! regno = REGNO (reg) + offset; endregno = regno + HARD_REGNO_NREGS (regno, mode); for (i = regno; i < endregno; i++) *************** mark_referenced_regs (x) *** 572,588 **** Return the extra number of registers saved. */ static int ! insert_restore (chain, before_p, regno, maxrestore) struct insn_chain *chain; int before_p; int regno; int maxrestore; { int i, k; rtx pat = NULL_RTX; ! enum insn_code code = CODE_FOR_nothing; ! int numregs = 0; struct insn_chain *new; /* A common failure mode if register status is not correct in the RTL is for this routine to be called with a REGNO we didn't expect to --- 622,640 ---- Return the extra number of registers saved. */ static int ! insert_restore (chain, before_p, regno, maxrestore, save_mode) struct insn_chain *chain; int before_p; int regno; int maxrestore; + enum machine_mode *save_mode; { int i, k; rtx pat = NULL_RTX; ! int code; ! unsigned int numregs = 0; struct insn_chain *new; + rtx mem; /* A common failure mode if register status is not correct in the RTL is for this routine to be called with a REGNO we didn't expect to *************** insert_restore (chain, before_p, regno, *** 620,630 **** break; } pat = gen_rtx_SET (VOIDmode, ! gen_rtx_REG (GET_MODE (regno_save_mem[regno][numregs]), ! regno), ! regno_save_mem[regno][numregs]); ! code = reg_restore_code[regno][numregs]; new = insert_one_insn (chain, before_p, code, pat); /* Clear status for all registers we restored. */ --- 672,686 ---- break; } + mem = regno_save_mem [regno][numregs]; + if (save_mode [regno] != VOIDmode + && save_mode [regno] != GET_MODE (mem) + && numregs == (unsigned int) HARD_REGNO_NREGS (regno, save_mode [regno])) + mem = adjust_address (mem, save_mode[regno], 0); pat = gen_rtx_SET (VOIDmode, ! gen_rtx_REG (GET_MODE (mem), ! regno), mem); ! code = reg_restore_code[regno][GET_MODE (mem)]; new = insert_one_insn (chain, before_p, code, pat); /* Clear status for all registers we restored. */ *************** insert_restore (chain, before_p, regno, *** 635,659 **** n_regs_saved--; } - - /* Tell our callers how many extra registers we saved/restored */ return numregs - 1; } /* Like insert_restore above, but save registers instead. */ static int ! insert_save (chain, before_p, regno, to_save) struct insn_chain *chain; int before_p; int regno; HARD_REG_SET *to_save; { ! int i, k; rtx pat = NULL_RTX; ! enum insn_code code = CODE_FOR_nothing; ! int numregs = 0; struct insn_chain *new; /* A common failure mode if register status is not correct in the RTL is for this routine to be called with a REGNO we didn't expect to --- 691,717 ---- n_regs_saved--; } /* Tell our callers how many extra registers we saved/restored */ return numregs - 1; } /* Like insert_restore above, but save registers instead. */ + static int ! insert_save (chain, before_p, regno, to_save, save_mode) struct insn_chain *chain; int before_p; int regno; HARD_REG_SET *to_save; + enum machine_mode *save_mode; { ! int i; ! unsigned int k; rtx pat = NULL_RTX; ! int code; ! unsigned int numregs = 0; struct insn_chain *new; + rtx mem; /* A common failure mode if register status is not correct in the RTL is for this routine to be called with a REGNO we didn't expect to *************** insert_save (chain, before_p, regno, to_ *** 690,699 **** break; } ! pat = gen_rtx_SET (VOIDmode, regno_save_mem[regno][numregs], ! gen_rtx_REG (GET_MODE (regno_save_mem[regno][numregs]), regno)); ! code = reg_save_code[regno][numregs]; new = insert_one_insn (chain, before_p, code, pat); /* Set hard_regs_saved and dead_or_set for all the registers we saved. */ --- 748,762 ---- break; } ! mem = regno_save_mem [regno][numregs]; ! if (save_mode [regno] != VOIDmode ! && save_mode [regno] != GET_MODE (mem) ! && numregs == (unsigned int) HARD_REGNO_NREGS (regno, save_mode [regno])) ! mem = adjust_address (mem, save_mode[regno], 0); ! pat = gen_rtx_SET (VOIDmode, mem, ! gen_rtx_REG (GET_MODE (mem), regno)); ! code = reg_save_code[regno][GET_MODE (mem)]; new = insert_one_insn (chain, before_p, code, pat); /* Set hard_regs_saved and dead_or_set for all the registers we saved. */ *************** static struct insn_chain * *** 713,719 **** insert_one_insn (chain, before_p, code, pat) struct insn_chain *chain; int before_p; ! enum insn_code code; rtx pat; { rtx insn = chain->insn; --- 776,782 ---- insert_one_insn (chain, before_p, code, pat) struct insn_chain *chain; int before_p; ! int code; rtx pat; { rtx insn = chain->insn; diff -Nrc3pad gcc-3.0.4/gcc/calls.c gcc-3.1/gcc/calls.c *** gcc-3.0.4/gcc/calls.c Wed Jul 11 01:06:33 2001 --- gcc-3.1/gcc/calls.c Thu Apr 4 23:28:47 2002 *************** *** 2,23 **** Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" #include "system.h" --- 2,23 ---- Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" #include "system.h" *************** Boston, MA 02111-1307, USA. */ *** 25,30 **** --- 25,31 ---- #include "tree.h" #include "flags.h" #include "expr.h" + #include "libfuncs.h" #include "function.h" #include "regs.h" #include "toplev.h" *************** Boston, MA 02111-1307, USA. */ *** 37,46 **** #define FUNCTION_OK_FOR_SIBCALL(DECL) 1 #endif - #if !defined PREFERRED_STACK_BOUNDARY && defined STACK_BOUNDARY - #define PREFERRED_STACK_BOUNDARY STACK_BOUNDARY - #endif - /* Decide whether a function's arguments should be processed from first to last or from last to first. --- 38,43 ---- *************** Boston, MA 02111-1307, USA. */ *** 59,64 **** --- 56,65 ---- #define PUSH_ARGS_REVERSED 0 #endif + #ifndef STACK_POINTER_OFFSET + #define STACK_POINTER_OFFSET 0 + #endif + /* Like PREFERRED_STACK_BOUNDARY but in units of bytes, not bits. */ #define STACK_BYTES (PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT) *************** static int calls_function_1 PARAMS ((tre *** 173,182 **** /* Nonzero if this is a call to a function that returns with the stack pointer depressed. */ #define ECF_SP_DEPRESSED 1024 static void emit_call_1 PARAMS ((rtx, tree, tree, HOST_WIDE_INT, HOST_WIDE_INT, HOST_WIDE_INT, rtx, ! rtx, int, rtx, int)); static void precompute_register_parameters PARAMS ((int, struct arg_data *, int *)); --- 174,188 ---- /* Nonzero if this is a call to a function that returns with the stack pointer depressed. */ #define ECF_SP_DEPRESSED 1024 + /* Nonzero if this call is known to always return. */ + #define ECF_ALWAYS_RETURN 2048 + /* Create libcall block around the call. */ + #define ECF_LIBCALL_BLOCK 4096 static void emit_call_1 PARAMS ((rtx, tree, tree, HOST_WIDE_INT, HOST_WIDE_INT, HOST_WIDE_INT, rtx, ! rtx, int, rtx, int, ! CUMULATIVE_ARGS *)); static void precompute_register_parameters PARAMS ((int, struct arg_data *, int *)); *************** calls_function_1 (exp, which) *** 253,259 **** tree exp; int which; { ! register int i; enum tree_code code = TREE_CODE (exp); int class = TREE_CODE_CLASS (code); int length = first_rtl_op (code); --- 259,265 ---- tree exp; int which; { ! int i; enum tree_code code = TREE_CODE (exp); int class = TREE_CODE_CLASS (code); int length = first_rtl_op (code); *************** calls_function_1 (exp, which) *** 305,312 **** case BLOCK: { ! register tree local; ! register tree subblock; for (local = BLOCK_VARS (exp); local; local = TREE_CHAIN (local)) if (DECL_INITIAL (local) != 0 --- 311,318 ---- case BLOCK: { ! tree local; ! tree subblock; for (local = BLOCK_VARS (exp); local; local = TREE_CHAIN (local)) if (DECL_INITIAL (local) != 0 *************** calls_function_1 (exp, which) *** 351,361 **** CALL_INSN_FUNCTION_USAGE information. */ rtx ! prepare_call_address (funexp, fndecl, call_fusage, reg_parm_seen) rtx funexp; tree fndecl; rtx *call_fusage; int reg_parm_seen; { rtx static_chain_value = 0; --- 357,368 ---- CALL_INSN_FUNCTION_USAGE information. */ rtx ! prepare_call_address (funexp, fndecl, call_fusage, reg_parm_seen, sibcallp) rtx funexp; tree fndecl; rtx *call_fusage; int reg_parm_seen; + int sibcallp; { rtx static_chain_value = 0; *************** prepare_call_address (funexp, fndecl, ca *** 373,379 **** funexp = ((SMALL_REGISTER_CLASSES && reg_parm_seen) ? force_not_mem (memory_address (FUNCTION_MODE, funexp)) : memory_address (FUNCTION_MODE, funexp)); ! else { #ifndef NO_FUNCTION_CSE if (optimize && ! flag_no_function_cse) --- 380,386 ---- funexp = ((SMALL_REGISTER_CLASSES && reg_parm_seen) ? force_not_mem (memory_address (FUNCTION_MODE, funexp)) : memory_address (FUNCTION_MODE, funexp)); ! else if (! sibcallp) { #ifndef NO_FUNCTION_CSE if (optimize && ! flag_no_function_cse) *************** prepare_call_address (funexp, fndecl, ca *** 433,455 **** We restore `inhibit_defer_pop' to that value. CALL_FUSAGE is either empty or an EXPR_LIST of USE expressions that ! denote registers used by the called function. */ static void emit_call_1 (funexp, fndecl, funtype, stack_size, rounded_stack_size, struct_value_size, next_arg_reg, valreg, old_inhibit_defer_pop, ! call_fusage, ecf_flags) rtx funexp; tree fndecl ATTRIBUTE_UNUSED; tree funtype ATTRIBUTE_UNUSED; HOST_WIDE_INT stack_size ATTRIBUTE_UNUSED; HOST_WIDE_INT rounded_stack_size; HOST_WIDE_INT struct_value_size ATTRIBUTE_UNUSED; ! rtx next_arg_reg; rtx valreg; int old_inhibit_defer_pop; rtx call_fusage; int ecf_flags; { rtx rounded_stack_size_rtx = GEN_INT (rounded_stack_size); rtx call_insn; --- 440,463 ---- We restore `inhibit_defer_pop' to that value. CALL_FUSAGE is either empty or an EXPR_LIST of USE expressions that ! denote registers used by the called function. */ static void emit_call_1 (funexp, fndecl, funtype, stack_size, rounded_stack_size, struct_value_size, next_arg_reg, valreg, old_inhibit_defer_pop, ! call_fusage, ecf_flags, args_so_far) rtx funexp; tree fndecl ATTRIBUTE_UNUSED; tree funtype ATTRIBUTE_UNUSED; HOST_WIDE_INT stack_size ATTRIBUTE_UNUSED; HOST_WIDE_INT rounded_stack_size; HOST_WIDE_INT struct_value_size ATTRIBUTE_UNUSED; ! rtx next_arg_reg ATTRIBUTE_UNUSED; rtx valreg; int old_inhibit_defer_pop; rtx call_fusage; int ecf_flags; + CUMULATIVE_ARGS *args_so_far ATTRIBUTE_UNUSED; { rtx rounded_stack_size_rtx = GEN_INT (rounded_stack_size); rtx call_insn; *************** emit_call_1 (funexp, fndecl, funtype, st *** 460,465 **** --- 468,477 ---- struct_value_size_rtx = GEN_INT (struct_value_size); #endif + #ifdef CALL_POPS_ARGS + n_popped += CALL_POPS_ARGS (* args_so_far); + #endif + /* Ensure address is valid. SYMBOL_REF is already valid, so no need, and we don't want to load it into a register as an optimization, because prepare_call_address already did it if it should be done. */ *************** emit_call_1 (funexp, fndecl, funtype, st *** 471,477 **** && HAVE_sibcall_pop && HAVE_sibcall_value_pop && (n_popped > 0 || stack_size == 0)) { ! rtx n_pop = GEN_INT (n_popped)); rtx pat; /* If this subroutine pops its own args, record that in the call insn --- 483,489 ---- && HAVE_sibcall_pop && HAVE_sibcall_value_pop && (n_popped > 0 || stack_size == 0)) { ! rtx n_pop = GEN_INT (n_popped); rtx pat; /* If this subroutine pops its own args, record that in the call insn *************** emit_call_1 (funexp, fndecl, funtype, st *** 493,502 **** #endif #if defined (HAVE_call_pop) && defined (HAVE_call_value_pop) ! /* If the target has "call" or "call_value" insns, then prefer them ! if no arguments are actually popped. If the target does not have ! "call" or "call_value" insns, then we must use the popping versions ! even if the call has no arguments to pop. */ #if defined (HAVE_call) && defined (HAVE_call_value) if (HAVE_call && HAVE_call_value && HAVE_call_pop && HAVE_call_value_pop && n_popped > 0 && ! (ecf_flags & ECF_SP_DEPRESSED)) --- 505,514 ---- #endif #if defined (HAVE_call_pop) && defined (HAVE_call_value_pop) ! /* If the target has "call" or "call_value" insns, then prefer them ! if no arguments are actually popped. If the target does not have ! "call" or "call_value" insns, then we must use the popping versions ! even if the call has no arguments to pop. */ #if defined (HAVE_call) && defined (HAVE_call_value) if (HAVE_call && HAVE_call_value && HAVE_call_pop && HAVE_call_value_pop && n_popped > 0 && ! (ecf_flags & ECF_SP_DEPRESSED)) *************** emit_call_1 (funexp, fndecl, funtype, st *** 569,580 **** /* Mark memory as used for "pure" function call. */ if (ecf_flags & ECF_PURE) ! { ! call_fusage = gen_rtx_EXPR_LIST (VOIDmode, ! gen_rtx_USE (VOIDmode, ! gen_rtx_MEM (BLKmode, ! gen_rtx_SCRATCH (VOIDmode))), call_fusage); ! } /* Put the register usage information on the CALL. If there is already some usage information, put ours at the end. */ --- 581,592 ---- /* Mark memory as used for "pure" function call. */ if (ecf_flags & ECF_PURE) ! call_fusage ! = gen_rtx_EXPR_LIST ! (VOIDmode, ! gen_rtx_USE (VOIDmode, ! gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (VOIDmode))), ! call_fusage); /* Put the register usage information on the CALL. If there is already some usage information, put ours at the end. */ *************** emit_call_1 (funexp, fndecl, funtype, st *** 593,599 **** /* If this is a const call, then set the insn's unchanging bit. */ if (ecf_flags & (ECF_CONST | ECF_PURE)) ! CONST_CALL_P (call_insn) = 1; /* If this call can't throw, attach a REG_EH_REGION reg note to that effect. */ --- 605,611 ---- /* If this is a const call, then set the insn's unchanging bit. */ if (ecf_flags & (ECF_CONST | ECF_PURE)) ! CONST_OR_PURE_CALL_P (call_insn) = 1; /* If this call can't throw, attach a REG_EH_REGION reg note to that effect. */ *************** emit_call_1 (funexp, fndecl, funtype, st *** 604,609 **** --- 616,631 ---- if (ecf_flags & ECF_NORETURN) REG_NOTES (call_insn) = gen_rtx_EXPR_LIST (REG_NORETURN, const0_rtx, REG_NOTES (call_insn)); + if (ecf_flags & ECF_ALWAYS_RETURN) + REG_NOTES (call_insn) = gen_rtx_EXPR_LIST (REG_ALWAYS_RETURN, const0_rtx, + REG_NOTES (call_insn)); + + if (ecf_flags & ECF_RETURNS_TWICE) + { + REG_NOTES (call_insn) = gen_rtx_EXPR_LIST (REG_SETJMP, const0_rtx, + REG_NOTES (call_insn)); + current_function_calls_setjmp = 1; + } SIBLING_CALL_P (call_insn) = ((ecf_flags & ECF_SIBCALL) != 0); *************** emit_call_1 (funexp, fndecl, funtype, st *** 632,640 **** If returning from the subroutine does pop the args, indicate that the stack pointer will be changed. */ ! if (rounded_stack_size != 0 && ! (ecf_flags & ECF_SP_DEPRESSED)) { ! if (flag_defer_pop && inhibit_defer_pop == 0 && ! (ecf_flags & (ECF_CONST | ECF_PURE))) pending_stack_adjust += rounded_stack_size; else --- 654,665 ---- If returning from the subroutine does pop the args, indicate that the stack pointer will be changed. */ ! if (rounded_stack_size != 0) { ! if (ecf_flags & ECF_SP_DEPRESSED) ! /* Just pretend we did the pop. */ ! stack_pointer_delta -= rounded_stack_size; ! else if (flag_defer_pop && inhibit_defer_pop == 0 && ! (ecf_flags & (ECF_CONST | ECF_PURE))) pending_stack_adjust += rounded_stack_size; else *************** setjmp_call_p (fndecl) *** 772,806 **** return special_function_p (fndecl, 0) & ECF_RETURNS_TWICE; } ! /* Detect flags (function attributes) from the function type node. */ static int flags_from_decl_or_type (exp) tree exp; { int flags = 0; ! /* ??? We can't set IS_MALLOC for function types? */ if (DECL_P (exp)) { /* The function exp may have the `malloc' attribute. */ if (DECL_P (exp) && DECL_IS_MALLOC (exp)) flags |= ECF_MALLOC; /* The function exp may have the `pure' attribute. */ if (DECL_P (exp) && DECL_IS_PURE (exp)) ! flags |= ECF_PURE; if (TREE_NOTHROW (exp)) flags |= ECF_NOTHROW; } if (TREE_READONLY (exp) && ! TREE_THIS_VOLATILE (exp)) ! flags |= ECF_CONST; if (TREE_THIS_VOLATILE (exp)) flags |= ECF_NORETURN; return flags; } --- 797,841 ---- return special_function_p (fndecl, 0) & ECF_RETURNS_TWICE; } ! /* Detect flags (function attributes) from the function decl or type node. */ static int flags_from_decl_or_type (exp) tree exp; { int flags = 0; ! tree type = exp; /* ??? We can't set IS_MALLOC for function types? */ if (DECL_P (exp)) { + type = TREE_TYPE (exp); + /* The function exp may have the `malloc' attribute. */ if (DECL_P (exp) && DECL_IS_MALLOC (exp)) flags |= ECF_MALLOC; /* The function exp may have the `pure' attribute. */ if (DECL_P (exp) && DECL_IS_PURE (exp)) ! flags |= ECF_PURE | ECF_LIBCALL_BLOCK; if (TREE_NOTHROW (exp)) flags |= ECF_NOTHROW; } if (TREE_READONLY (exp) && ! TREE_THIS_VOLATILE (exp)) ! flags |= ECF_CONST | ECF_LIBCALL_BLOCK; if (TREE_THIS_VOLATILE (exp)) flags |= ECF_NORETURN; + /* Mark if the function returns with the stack pointer depressed. We + cannot consider it pure or constant in that case. */ + if (TREE_CODE (type) == FUNCTION_TYPE && TYPE_RETURNS_STACK_DEPRESSED (type)) + { + flags |= ECF_SP_DEPRESSED; + flags &= ~(ECF_PURE | ECF_CONST | ECF_LIBCALL_BLOCK); + } + return flags; } *************** save_fixed_argument_area (reg_parm_stack *** 925,930 **** --- 960,967 ---- plus_constant (argblock, *low_to_save))); #endif + + set_mem_align (stack_area, PARM_BOUNDARY); if (save_mode == BLKmode) { save_area = assign_stack_temp (BLKmode, num_to_save, 0); *************** save_fixed_argument_area (reg_parm_stack *** 940,945 **** --- 977,983 ---- emit_move_insn (save_area, stack_area); } } + return save_area; } *************** restore_fixed_argument_area (save_area, *** 974,980 **** move_by_pieces (stack_area, validize_mem (save_area), high_to_save - low_to_save + 1, PARM_BOUNDARY); } ! #endif /* If any elements in ARGS refer to parameters that are to be passed in registers, but not in memory, and whose alignment does not permit a --- 1012,1018 ---- move_by_pieces (stack_area, validize_mem (save_area), high_to_save - low_to_save + 1, PARM_BOUNDARY); } ! #endif /* REG_PARM_STACK_SPACE */ /* If any elements in ARGS refer to parameters that are to be passed in registers, but not in memory, and whose alignment does not permit a *************** store_unaligned_arguments_into_pseudos ( *** 1012,1018 **** significant byte (to the right). On a BYTES_BIG_ENDIAN machine, this means we must skip the empty high order bytes when calculating the bit offset. */ ! if (BYTES_BIG_ENDIAN && bytes < UNITS_PER_WORD) big_endian_correction = (BITS_PER_WORD - (bytes * BITS_PER_UNIT)); for (j = 0; j < args[i].n_aligned_regs; j++) --- 1050,1058 ---- significant byte (to the right). On a BYTES_BIG_ENDIAN machine, this means we must skip the empty high order bytes when calculating the bit offset. */ ! if (BYTES_BIG_ENDIAN ! && !FUNCTION_ARG_REG_LITTLE_ENDIAN ! && bytes < UNITS_PER_WORD) big_endian_correction = (BITS_PER_WORD - (bytes * BITS_PER_UNIT)); for (j = 0; j < args[i].n_aligned_regs; j++) *************** store_unaligned_arguments_into_pseudos ( *** 1020,1026 **** rtx reg = gen_reg_rtx (word_mode); rtx word = operand_subword_force (args[i].value, j, BLKmode); int bitsize = MIN (bytes * BITS_PER_UNIT, BITS_PER_WORD); - int bitalign = TYPE_ALIGN (TREE_TYPE (args[i].tree_value)); args[i].aligned_regs[j] = reg; --- 1060,1065 ---- *************** store_unaligned_arguments_into_pseudos ( *** 1040,1048 **** bytes -= bitsize / BITS_PER_UNIT; store_bit_field (reg, bitsize, big_endian_correction, word_mode, extract_bit_field (word, bitsize, 0, 1, NULL_RTX, ! word_mode, word_mode, bitalign, BITS_PER_WORD), ! bitalign, BITS_PER_WORD); } } } --- 1079,1087 ---- bytes -= bitsize / BITS_PER_UNIT; store_bit_field (reg, bitsize, big_endian_correction, word_mode, extract_bit_field (word, bitsize, 0, 1, NULL_RTX, ! word_mode, word_mode, BITS_PER_WORD), ! BITS_PER_WORD); } } } *************** initialize_argument_information (num_act *** 1191,1196 **** --- 1230,1245 ---- args[i].tree_value); type = build_pointer_type (type); } + else if (TREE_CODE (args[i].tree_value) == TARGET_EXPR) + { + /* In the V3 C++ ABI, parameters are destroyed in the caller. + We implement this by passing the address of the temporary + rather than expanding it into another allocated slot. */ + args[i].tree_value = build1 (ADDR_EXPR, + build_pointer_type (type), + args[i].tree_value); + type = build_pointer_type (type); + } else { /* We make a copy of the object and pass the address to the *************** initialize_argument_information (num_act *** 1223,1229 **** copy = assign_temp (type, 0, 1, 0); store_expr (args[i].tree_value, copy, 0); ! *ecf_flags &= ~(ECF_CONST | ECF_PURE); args[i].tree_value = build1 (ADDR_EXPR, build_pointer_type (type), --- 1272,1278 ---- copy = assign_temp (type, 0, 1, 0); store_expr (args[i].tree_value, copy, 0); ! *ecf_flags &= ~(ECF_CONST | ECF_PURE | ECF_LIBCALL_BLOCK); args[i].tree_value = build1 (ADDR_EXPR, build_pointer_type (type), *************** initialize_argument_information (num_act *** 1282,1288 **** /* If this is an addressable type, we cannot pre-evaluate it. Thus, we cannot consider this function call constant. */ if (TREE_ADDRESSABLE (type)) ! *ecf_flags &= ~(ECF_CONST | ECF_PURE); /* Compute the stack-size of this argument. */ if (args[i].reg == 0 || args[i].partial != 0 --- 1331,1337 ---- /* If this is an addressable type, we cannot pre-evaluate it. Thus, we cannot consider this function call constant. */ if (TREE_ADDRESSABLE (type)) ! *ecf_flags &= ~ECF_LIBCALL_BLOCK; /* Compute the stack-size of this argument. */ if (args[i].reg == 0 || args[i].partial != 0 *************** compute_argument_block_size (reg_parm_st *** 1353,1363 **** /* For accumulate outgoing args mode we don't need to align, since the frame will be already aligned. Align to STACK_BOUNDARY in order to prevent ! backends from generating missaligned frame sizes. */ ! #ifdef STACK_BOUNDARY if (ACCUMULATE_OUTGOING_ARGS && preferred_stack_boundary > STACK_BOUNDARY) preferred_stack_boundary = STACK_BOUNDARY; - #endif /* Compute the actual size of the argument block required. The variable and constant sizes must be combined, the size may have to be rounded, --- 1402,1410 ---- /* For accumulate outgoing args mode we don't need to align, since the frame will be already aligned. Align to STACK_BOUNDARY in order to prevent ! backends from generating misaligned frame sizes. */ if (ACCUMULATE_OUTGOING_ARGS && preferred_stack_boundary > STACK_BOUNDARY) preferred_stack_boundary = STACK_BOUNDARY; /* Compute the actual size of the argument block required. The variable and constant sizes must be combined, the size may have to be rounded, *************** compute_argument_block_size (reg_parm_st *** 1368,1385 **** args_size->var = ARGS_SIZE_TREE (*args_size); args_size->constant = 0; - #ifdef PREFERRED_STACK_BOUNDARY preferred_stack_boundary /= BITS_PER_UNIT; if (preferred_stack_boundary > 1) { /* We don't handle this case yet. To handle it correctly we have ! to add the delta, round and substract the delta. Currently no machine description requires this support. */ if (stack_pointer_delta & (preferred_stack_boundary - 1)) abort (); args_size->var = round_up (args_size->var, preferred_stack_boundary); } - #endif if (reg_parm_stack_space > 0) { --- 1415,1430 ---- args_size->var = ARGS_SIZE_TREE (*args_size); args_size->constant = 0; preferred_stack_boundary /= BITS_PER_UNIT; if (preferred_stack_boundary > 1) { /* We don't handle this case yet. To handle it correctly we have ! to add the delta, round and subtract the delta. Currently no machine description requires this support. */ if (stack_pointer_delta & (preferred_stack_boundary - 1)) abort (); args_size->var = round_up (args_size->var, preferred_stack_boundary); } if (reg_parm_stack_space > 0) { *************** compute_argument_block_size (reg_parm_st *** 1398,1404 **** } else { - #ifdef PREFERRED_STACK_BOUNDARY preferred_stack_boundary /= BITS_PER_UNIT; if (preferred_stack_boundary < 1) preferred_stack_boundary = 1; --- 1443,1448 ---- *************** compute_argument_block_size (reg_parm_st *** 1408,1414 **** / preferred_stack_boundary * preferred_stack_boundary) - stack_pointer_delta); - #endif args_size->constant = MAX (args_size->constant, reg_parm_stack_space); --- 1452,1457 ---- *************** precompute_arguments (flags, num_actuals *** 1455,1479 **** function call which will store arguments on the stack. Otherwise, evaluating the parameter may clobber previous parameters which have already been stored into the stack. (we have code to avoid ! such case by saving the ougoing stack arguments, but it results in worse code) */ for (i = 0; i < num_actuals; i++) ! if ((flags & (ECF_CONST | ECF_PURE)) || calls_function (args[i].tree_value, !ACCUMULATE_OUTGOING_ARGS)) { /* If this is an addressable type, we cannot pre-evaluate it. */ if (TREE_ADDRESSABLE (TREE_TYPE (args[i].tree_value))) abort (); - push_temp_slots (); - args[i].value = expand_expr (args[i].tree_value, NULL_RTX, VOIDmode, 0); - preserve_temp_slots (args[i].value); - pop_temp_slots (); - /* ANSI doesn't require a sequence point here, but PCC has one, so this will avoid some problems. */ emit_queue (); --- 1498,1519 ---- function call which will store arguments on the stack. Otherwise, evaluating the parameter may clobber previous parameters which have already been stored into the stack. (we have code to avoid ! such case by saving the outgoing stack arguments, but it results in worse code) */ for (i = 0; i < num_actuals; i++) ! if ((flags & ECF_LIBCALL_BLOCK) || calls_function (args[i].tree_value, !ACCUMULATE_OUTGOING_ARGS)) { + enum machine_mode mode; + /* If this is an addressable type, we cannot pre-evaluate it. */ if (TREE_ADDRESSABLE (TREE_TYPE (args[i].tree_value))) abort (); args[i].value = expand_expr (args[i].tree_value, NULL_RTX, VOIDmode, 0); /* ANSI doesn't require a sequence point here, but PCC has one, so this will avoid some problems. */ emit_queue (); *************** precompute_arguments (flags, num_actuals *** 1481,1491 **** args[i].initial_value = args[i].value = protect_from_queue (args[i].value, 0); ! if (TYPE_MODE (TREE_TYPE (args[i].tree_value)) != args[i].mode) { args[i].value ! = convert_modes (args[i].mode, ! TYPE_MODE (TREE_TYPE (args[i].tree_value)), args[i].value, args[i].unsignedp); #ifdef PROMOTE_FOR_CALL_ONLY /* CSE will replace this only if it contains args[i].value --- 1521,1531 ---- args[i].initial_value = args[i].value = protect_from_queue (args[i].value, 0); ! mode = TYPE_MODE (TREE_TYPE (args[i].tree_value)); ! if (mode != args[i].mode) { args[i].value ! = convert_modes (args[i].mode, mode, args[i].value, args[i].unsignedp); #ifdef PROMOTE_FOR_CALL_ONLY /* CSE will replace this only if it contains args[i].value *************** precompute_arguments (flags, num_actuals *** 1495,1502 **** && GET_MODE_CLASS (args[i].mode) == MODE_INT) { args[i].initial_value ! = gen_rtx_SUBREG (TYPE_MODE (TREE_TYPE (args[i].tree_value)), ! args[i].value, 0); SUBREG_PROMOTED_VAR_P (args[i].initial_value) = 1; SUBREG_PROMOTED_UNSIGNED_P (args[i].initial_value) = args[i].unsignedp; --- 1535,1541 ---- && GET_MODE_CLASS (args[i].mode) == MODE_INT) { args[i].initial_value ! = gen_lowpart_SUBREG (mode, args[i].value); SUBREG_PROMOTED_VAR_P (args[i].initial_value) = 1; SUBREG_PROMOTED_UNSIGNED_P (args[i].initial_value) = args[i].unsignedp; *************** compute_argument_addresses (args, argblo *** 1621,1628 **** outgoing arguments and we cannot allow reordering of reads from function arguments with stores to outgoing arguments of sibling calls. */ ! MEM_ALIAS_SET (args[i].stack) = 0; ! MEM_ALIAS_SET (args[i].stack_slot) = 0; } } } --- 1660,1667 ---- outgoing arguments and we cannot allow reordering of reads from function arguments with stores to outgoing arguments of sibling calls. */ ! set_mem_alias_set (args[i].stack, 0); ! set_mem_alias_set (args[i].stack_slot, 0); } } } *************** rtx_for_function_call (fndecl, exp) *** 1661,1682 **** { rtx funaddr; push_temp_slots (); ! funaddr = funexp = ! expand_expr (TREE_OPERAND (exp, 0), NULL_RTX, VOIDmode, 0); pop_temp_slots (); /* FUNEXP can't be BLKmode. */ - - /* Check the function is executable. */ - if (current_function_check_memory_usage) - { - #ifdef POINTERS_EXTEND_UNSIGNED - /* It might be OK to convert funexp in place, but there's - a lot going on between here and when it happens naturally - that this seems safer. */ - funaddr = convert_memory_address (Pmode, funexp); - #endif - emit_library_call (chkr_check_exec_libfunc, LCT_CONST_MAKE_BLOCK, - VOIDmode, 1, funaddr, Pmode); - } emit_queue (); } return funexp; --- 1700,1708 ---- { rtx funaddr; push_temp_slots (); ! funaddr = funexp ! = expand_expr (TREE_OPERAND (exp, 0), NULL_RTX, VOIDmode, 0); pop_temp_slots (); /* FUNEXP can't be BLKmode. */ emit_queue (); } return funexp; *************** load_register_parameters (args, num_actu *** 1726,1733 **** if (GET_CODE (reg) == PARALLEL) emit_group_load (reg, args[i].value, ! int_size_in_bytes (TREE_TYPE (args[i].tree_value)), ! TYPE_ALIGN (TREE_TYPE (args[i].tree_value))); /* If simple case, just do move. If normal partial, store_one_arg has already loaded the register for us. In all other cases, --- 1752,1758 ---- if (GET_CODE (reg) == PARALLEL) emit_group_load (reg, args[i].value, ! int_size_in_bytes (TREE_TYPE (args[i].tree_value))); /* If simple case, just do move. If normal partial, store_one_arg has already loaded the register for us. In all other cases, *************** try_to_integrate (fndecl, actparms, targ *** 1798,1804 **** timevar_pop (TV_INTEGRATION); /* If inlining succeeded, return. */ ! if (temp != (rtx) (HOST_WIDE_INT) - 1) { if (ACCUMULATE_OUTGOING_ARGS) { --- 1823,1829 ---- timevar_pop (TV_INTEGRATION); /* If inlining succeeded, return. */ ! if (temp != (rtx) (size_t) - 1) { if (ACCUMULATE_OUTGOING_ARGS) { *************** try_to_integrate (fndecl, actparms, targ *** 1878,1884 **** warning ("called from here"); } mark_addressable (fndecl); ! return (rtx) (HOST_WIDE_INT) - 1; } /* We need to pop PENDING_STACK_ADJUST bytes. But, if the arguments --- 1903,1909 ---- warning ("called from here"); } mark_addressable (fndecl); ! return (rtx) (size_t) - 1; } /* We need to pop PENDING_STACK_ADJUST bytes. But, if the arguments *************** check_sibcall_argument_overlap (insn, ar *** 2027,2035 **** break; #ifdef ARGS_GROW_DOWNWARD ! low = -arg->offset.constant - arg->size.constant; #else ! low = arg->offset.constant; #endif for (high = low + arg->size.constant; low < high; low++) --- 2052,2060 ---- break; #ifdef ARGS_GROW_DOWNWARD ! low = -arg->slot_offset.constant - arg->size.constant; #else ! low = arg->slot_offset.constant; #endif for (high = low + arg->size.constant; low < high; low++) *************** expand_call (exp, target, ignore) *** 2147,2166 **** int old_inhibit_defer_pop = inhibit_defer_pop; int old_stack_allocated; rtx call_fusage; ! register tree p = TREE_OPERAND (exp, 0); ! register int i; /* The alignment of the stack, in bits. */ HOST_WIDE_INT preferred_stack_boundary; /* The alignment of the stack, in bytes. */ HOST_WIDE_INT preferred_unit_stack_boundary; - /* The value of the function call can be put in a hard register. But - if -fcheck-memory-usage, code which invokes functions (and thus - damages some hard registers) can be inserted before using the value. - So, target is always a pseudo-register in that case. */ - if (current_function_check_memory_usage) - target = 0; - /* See if this is "nothrow" function call. */ if (TREE_NOTHROW (exp)) flags |= ECF_NOTHROW; --- 2172,2184 ---- int old_inhibit_defer_pop = inhibit_defer_pop; int old_stack_allocated; rtx call_fusage; ! tree p = TREE_OPERAND (exp, 0); ! int i; /* The alignment of the stack, in bits. */ HOST_WIDE_INT preferred_stack_boundary; /* The alignment of the stack, in bytes. */ HOST_WIDE_INT preferred_unit_stack_boundary; /* See if this is "nothrow" function call. */ if (TREE_NOTHROW (exp)) flags |= ECF_NOTHROW; *************** expand_call (exp, target, ignore) *** 2201,2214 **** else flags |= flags_from_decl_or_type (TREE_TYPE (TREE_TYPE (p))); - /* Mark if the function returns with the stack pointer depressed. */ - if (TREE_CODE (TREE_TYPE (TREE_TYPE (p))) == FUNCTION_TYPE - && TYPE_RETURNS_STACK_DEPRESSED (TREE_TYPE (TREE_TYPE (p)))) - { - flags |= ECF_SP_DEPRESSED; - flags &= ~(ECF_PURE | ECF_CONST); - } - #ifdef REG_PARM_STACK_SPACE #ifdef MAYBE_REG_PARM_STACK_SPACE reg_parm_stack_space = MAYBE_REG_PARM_STACK_SPACE; --- 2219,2224 ---- *************** expand_call (exp, target, ignore) *** 2233,2239 **** if (aggregate_value_p (exp)) { /* This call returns a big structure. */ ! flags &= ~(ECF_CONST | ECF_PURE); #ifdef PCC_STATIC_STRUCT_RETURN { --- 2243,2249 ---- if (aggregate_value_p (exp)) { /* This call returns a big structure. */ ! flags &= ~(ECF_CONST | ECF_PURE | ECF_LIBCALL_BLOCK); #ifdef PCC_STATIC_STRUCT_RETURN { *************** expand_call (exp, target, ignore) *** 2276,2291 **** rtx temp = try_to_integrate (fndecl, actparms, target, ignore, TREE_TYPE (exp), structure_value_addr); ! if (temp != (rtx) (HOST_WIDE_INT) - 1) return temp; } /* Figure out the amount to which the stack should be aligned. */ - #ifdef PREFERRED_STACK_BOUNDARY preferred_stack_boundary = PREFERRED_STACK_BOUNDARY; - #else - preferred_stack_boundary = STACK_BOUNDARY; - #endif /* Operand 0 is a pointer-to-function; get the type of the function. */ funtype = TREE_TYPE (TREE_OPERAND (exp, 0)); --- 2286,2297 ---- rtx temp = try_to_integrate (fndecl, actparms, target, ignore, TREE_TYPE (exp), structure_value_addr); ! if (temp != (rtx) (size_t) - 1) return temp; } /* Figure out the amount to which the stack should be aligned. */ preferred_stack_boundary = PREFERRED_STACK_BOUNDARY; /* Operand 0 is a pointer-to-function; get the type of the function. */ funtype = TREE_TYPE (TREE_OPERAND (exp, 0)); *************** expand_call (exp, target, ignore) *** 2382,2390 **** /* If this function requires a variable-sized argument list, don't try to make a cse'able block for this call. We may be able to do this eventually, but it is too complicated to keep track of ! what insns go in the cse'able block and which don't. */ ! flags &= ~(ECF_CONST | ECF_PURE); must_preallocate = 1; } --- 2388,2396 ---- /* If this function requires a variable-sized argument list, don't try to make a cse'able block for this call. We may be able to do this eventually, but it is too complicated to keep track of ! what insns go in the cse'able block and which don't. */ ! flags &= ~ECF_LIBCALL_BLOCK; must_preallocate = 1; } *************** expand_call (exp, target, ignore) *** 2481,2487 **** initialize_argument_information has ordered the array for the order to be pushed, and we must remember this when reconstructing ! the original argument orde. */ if (PUSH_ARGS_REVERSED) { --- 2487,2493 ---- initialize_argument_information has ordered the array for the order to be pushed, and we must remember this when reconstructing ! the original argument order. */ if (PUSH_ARGS_REVERSED) { *************** expand_call (exp, target, ignore) *** 2584,2590 **** is subject to race conditions, just as with multithreaded programs. */ ! emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__bb_fork_func"), 0, VOIDmode, 0); } --- 2590,2597 ---- is subject to race conditions, just as with multithreaded programs. */ ! emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__bb_fork_func"), ! LCT_ALWAYS_RETURN, VOIDmode, 0); } *************** expand_call (exp, target, ignore) *** 2605,2611 **** for (pass = 0; pass < 2; pass++) { int sibcall_failure = 0; ! /* We want to emit ay pending stack adjustments before the tail recursion "call". That way we know any adjustment after the tail recursion call can be ignored if we indeed use the tail recursion call expansion. */ --- 2612,2618 ---- for (pass = 0; pass < 2; pass++) { int sibcall_failure = 0; ! /* We want to emit any pending stack adjustments before the tail recursion "call". That way we know any adjustment after the tail recursion call can be ignored if we indeed use the tail recursion call expansion. */ *************** expand_call (exp, target, ignore) *** 2656,2676 **** /* Don't let pending stack adjusts add up to too much. Also, do all pending adjustments now if there is any chance this might be a call to alloca or if we are expanding a sibling ! call sequence. */ if (pending_stack_adjust >= 32 ! || (pending_stack_adjust > 0 && (flags & ECF_MAY_BE_ALLOCA)) || pass == 0) do_pending_stack_adjust (); /* When calling a const function, we must pop the stack args right away, so that the pop is deleted or moved with the call. */ ! if (flags & (ECF_CONST | ECF_PURE)) NO_DEFER_POP; - /* Push the temporary stack slot level so that we can free any - temporaries we make. */ - push_temp_slots (); - #ifdef FINAL_REG_PARM_STACK_SPACE reg_parm_stack_space = FINAL_REG_PARM_STACK_SPACE (args_size.constant, args_size.var); --- 2663,2681 ---- /* Don't let pending stack adjusts add up to too much. Also, do all pending adjustments now if there is any chance this might be a call to alloca or if we are expanding a sibling ! call sequence or if we are calling a function that is to return ! with stack pointer depressed. */ if (pending_stack_adjust >= 32 ! || (pending_stack_adjust > 0 ! && (flags & (ECF_MAY_BE_ALLOCA | ECF_SP_DEPRESSED))) || pass == 0) do_pending_stack_adjust (); /* When calling a const function, we must pop the stack args right away, so that the pop is deleted or moved with the call. */ ! if (pass && (flags & ECF_LIBCALL_BLOCK)) NO_DEFER_POP; #ifdef FINAL_REG_PARM_STACK_SPACE reg_parm_stack_space = FINAL_REG_PARM_STACK_SPACE (args_size.constant, args_size.var); *************** expand_call (exp, target, ignore) *** 2681,2687 **** /* Now we are about to start emitting insns that can be deleted if a libcall is deleted. */ ! if (flags & (ECF_CONST | ECF_PURE | ECF_MALLOC)) start_sequence (); adjusted_args_size = args_size; --- 2686,2692 ---- /* Now we are about to start emitting insns that can be deleted if a libcall is deleted. */ ! if (pass && (flags & (ECF_LIBCALL_BLOCK | ECF_MALLOC))) start_sequence (); adjusted_args_size = args_size; *************** expand_call (exp, target, ignore) *** 2889,2895 **** compute_argument_addresses (args, argblock, num_actuals); - #ifdef PREFERRED_STACK_BOUNDARY /* If we push args individually in reverse order, perform stack alignment before the first push (the last arg). */ if (PUSH_ARGS_REVERSED && argblock == 0 --- 2894,2899 ---- *************** expand_call (exp, target, ignore) *** 2898,2904 **** /* When the stack adjustment is pending, we get better code by combining the adjustments. */ if (pending_stack_adjust ! && ! (flags & (ECF_CONST | ECF_PURE)) && ! inhibit_defer_pop) { pending_stack_adjust --- 2902,2908 ---- /* When the stack adjustment is pending, we get better code by combining the adjustments. */ if (pending_stack_adjust ! && ! (flags & ECF_LIBCALL_BLOCK) && ! inhibit_defer_pop) { pending_stack_adjust *************** expand_call (exp, target, ignore) *** 2915,2926 **** /* Now that the stack is properly aligned, pops can't safely be deferred during the evaluation of the arguments. */ NO_DEFER_POP; - #endif - - /* Don't try to defer pops if preallocating, not even from the first arg, - since ARGBLOCK probably refers to the SP. */ - if (argblock) - NO_DEFER_POP; funexp = rtx_for_function_call (fndecl, exp); --- 2919,2924 ---- *************** expand_call (exp, target, ignore) *** 2992,3004 **** sibcall_failure = 1; } - #ifdef PREFERRED_STACK_BOUNDARY /* If we pushed args in forward order, perform stack alignment after pushing the last arg. */ if (!PUSH_ARGS_REVERSED && argblock == 0) anti_adjust_stack (GEN_INT (adjusted_args_size.constant - unadjusted_args_size)); - #endif /* If register arguments require space on the stack and stack space was not preallocated, allocate stack space here for arguments --- 2990,3000 ---- *************** expand_call (exp, target, ignore) *** 3018,3039 **** force_operand (structure_value_addr, NULL_RTX))); - /* Mark the memory for the aggregate as write-only. */ - if (current_function_check_memory_usage) - emit_library_call (chkr_set_right_libfunc, LCT_CONST_MAKE_BLOCK, - VOIDmode, 3, - structure_value_addr, ptr_mode, - GEN_INT (struct_value_size), - TYPE_MODE (sizetype), - GEN_INT (MEMORY_USE_WO), - TYPE_MODE (integer_type_node)); - if (GET_CODE (struct_value_rtx) == REG) use_reg (&call_fusage, struct_value_rtx); } funexp = prepare_call_address (funexp, fndecl, &call_fusage, ! reg_parm_seen); load_register_parameters (args, num_actuals, &call_fusage, flags); --- 3014,3025 ---- force_operand (structure_value_addr, NULL_RTX))); if (GET_CODE (struct_value_rtx) == REG) use_reg (&call_fusage, struct_value_rtx); } funexp = prepare_call_address (funexp, fndecl, &call_fusage, ! reg_parm_seen, pass == 0); load_register_parameters (args, num_actuals, &call_fusage, flags); *************** expand_call (exp, target, ignore) *** 3058,3074 **** /* All arguments and registers used for the call must be set up by now! */ - #ifdef PREFERRED_STACK_BOUNDARY /* Stack must be properly aligned now. */ if (pass && stack_pointer_delta % preferred_unit_stack_boundary) abort (); - #endif /* Generate the actual call instruction. */ emit_call_1 (funexp, fndecl, funtype, unadjusted_args_size, adjusted_args_size.constant, struct_value_size, next_arg_reg, valreg, old_inhibit_defer_pop, call_fusage, ! flags); /* Verify that we've deallocated all the stack we used. */ if (pass --- 3044,3058 ---- /* All arguments and registers used for the call must be set up by now! */ /* Stack must be properly aligned now. */ if (pass && stack_pointer_delta % preferred_unit_stack_boundary) abort (); /* Generate the actual call instruction. */ emit_call_1 (funexp, fndecl, funtype, unadjusted_args_size, adjusted_args_size.constant, struct_value_size, next_arg_reg, valreg, old_inhibit_defer_pop, call_fusage, ! flags, & args_so_far); /* Verify that we've deallocated all the stack we used. */ if (pass *************** expand_call (exp, target, ignore) *** 3079,3124 **** Test valreg so we don't crash; may safely ignore `const' if return type is void. Disable for PARALLEL return values, because we have no way to move such values into a pseudo register. */ ! if (pass ! && (flags & (ECF_CONST | ECF_PURE)) ! && valreg != 0 && GET_CODE (valreg) != PARALLEL) { - rtx note = 0; - rtx temp = gen_reg_rtx (GET_MODE (valreg)); rtx insns; ! /* Mark the return value as a pointer if needed. */ ! if (TREE_CODE (TREE_TYPE (exp)) == POINTER_TYPE) ! mark_reg_pointer (temp, TYPE_ALIGN (TREE_TYPE (TREE_TYPE (exp)))); ! /* Construct an "equal form" for the value which mentions all the ! arguments in order as well as the function name. */ ! for (i = 0; i < num_actuals; i++) ! note = gen_rtx_EXPR_LIST (VOIDmode, args[i].initial_value, note); ! note = gen_rtx_EXPR_LIST (VOIDmode, funexp, note); ! insns = get_insns (); ! end_sequence (); ! if (flags & ECF_PURE) ! note = gen_rtx_EXPR_LIST (VOIDmode, ! gen_rtx_USE (VOIDmode, ! gen_rtx_MEM (BLKmode, ! gen_rtx_SCRATCH (VOIDmode))), note); ! emit_libcall_block (insns, temp, valreg, note); ! valreg = temp; ! } ! else if (flags & (ECF_CONST | ECF_PURE)) ! { ! /* Otherwise, just write out the sequence without a note. */ ! rtx insns = get_insns (); ! end_sequence (); ! emit_insns (insns); } ! else if (flags & ECF_MALLOC) { rtx temp = gen_reg_rtx (GET_MODE (valreg)); rtx last, insns; --- 3063,3111 ---- Test valreg so we don't crash; may safely ignore `const' if return type is void. Disable for PARALLEL return values, because we have no way to move such values into a pseudo register. */ ! if (pass && (flags & ECF_LIBCALL_BLOCK)) { rtx insns; ! if (valreg == 0 || GET_CODE (valreg) == PARALLEL) ! { ! insns = get_insns (); ! end_sequence (); ! emit_insns (insns); ! } ! else ! { ! rtx note = 0; ! rtx temp = gen_reg_rtx (GET_MODE (valreg)); ! /* Mark the return value as a pointer if needed. */ ! if (TREE_CODE (TREE_TYPE (exp)) == POINTER_TYPE) ! mark_reg_pointer (temp, ! TYPE_ALIGN (TREE_TYPE (TREE_TYPE (exp)))); ! /* Construct an "equal form" for the value which mentions all the ! arguments in order as well as the function name. */ ! for (i = 0; i < num_actuals; i++) ! note = gen_rtx_EXPR_LIST (VOIDmode, ! args[i].initial_value, note); ! note = gen_rtx_EXPR_LIST (VOIDmode, funexp, note); ! insns = get_insns (); ! end_sequence (); ! if (flags & ECF_PURE) ! note = gen_rtx_EXPR_LIST (VOIDmode, ! gen_rtx_USE (VOIDmode, ! gen_rtx_MEM (BLKmode, ! gen_rtx_SCRATCH (VOIDmode))), ! note); ! emit_libcall_block (insns, temp, valreg, note); ! valreg = temp; ! } } ! else if (pass && (flags & ECF_MALLOC)) { rtx temp = gen_reg_rtx (GET_MODE (valreg)); rtx last, insns; *************** expand_call (exp, target, ignore) *** 3146,3154 **** if nonvolatile values are live. For functions that cannot return, inform flow that control does not fall through. */ ! if ((flags & (ECF_RETURNS_TWICE | ECF_NORETURN | ECF_LONGJMP)) || pass == 0) { ! /* The barrier or NOTE_INSN_SETJMP note must be emitted immediately after the CALL_INSN. Some ports emit more than just a CALL_INSN above, so we must search for it here. */ --- 3133,3141 ---- if nonvolatile values are live. For functions that cannot return, inform flow that control does not fall through. */ ! if ((flags & (ECF_NORETURN | ECF_LONGJMP)) || pass == 0) { ! /* The barrier must be emitted immediately after the CALL_INSN. Some ports emit more than just a CALL_INSN above, so we must search for it here. */ *************** expand_call (exp, target, ignore) *** 3161,3173 **** abort (); } ! if (flags & ECF_RETURNS_TWICE) ! { ! emit_note_after (NOTE_INSN_SETJMP, last); ! current_function_calls_setjmp = 1; ! } ! else ! emit_barrier_after (last); } if (flags & ECF_LONGJMP) --- 3148,3154 ---- abort (); } ! emit_barrier_after (last); } if (flags & ECF_LONGJMP) *************** expand_call (exp, target, ignore) *** 3195,3203 **** if (TYPE_MODE (TREE_TYPE (exp)) == VOIDmode || ignore) ! { ! target = const0_rtx; ! } else if (structure_value_addr) { if (target == 0 || GET_CODE (target) != MEM) --- 3176,3182 ---- if (TYPE_MODE (TREE_TYPE (exp)) == VOIDmode || ignore) ! target = const0_rtx; else if (structure_value_addr) { if (target == 0 || GET_CODE (target) != MEM) *************** expand_call (exp, target, ignore) *** 3235,3242 **** if (! rtx_equal_p (target, valreg)) emit_group_store (target, valreg, ! int_size_in_bytes (TREE_TYPE (exp)), ! TYPE_ALIGN (TREE_TYPE (exp))); /* We can not support sibling calls for this case. */ sibcall_failure = 1; --- 3214,3220 ---- if (! rtx_equal_p (target, valreg)) emit_group_store (target, valreg, ! int_size_in_bytes (TREE_TYPE (exp))); /* We can not support sibling calls for this case. */ sibcall_failure = 1; *************** expand_call (exp, target, ignore) *** 3272,3284 **** { tree type = TREE_TYPE (exp); int unsignedp = TREE_UNSIGNED (type); /* If we don't promote as expected, something is wrong. */ if (GET_MODE (target) != promote_mode (type, TYPE_MODE (type), &unsignedp, 1)) abort (); ! target = gen_rtx_SUBREG (TYPE_MODE (type), target, 0); SUBREG_PROMOTED_VAR_P (target) = 1; SUBREG_PROMOTED_UNSIGNED_P (target) = unsignedp; } --- 3250,3274 ---- { tree type = TREE_TYPE (exp); int unsignedp = TREE_UNSIGNED (type); + int offset = 0; /* If we don't promote as expected, something is wrong. */ if (GET_MODE (target) != promote_mode (type, TYPE_MODE (type), &unsignedp, 1)) abort (); ! if ((WORDS_BIG_ENDIAN || BYTES_BIG_ENDIAN) ! && GET_MODE_SIZE (GET_MODE (target)) ! > GET_MODE_SIZE (TYPE_MODE (type))) ! { ! offset = GET_MODE_SIZE (GET_MODE (target)) ! - GET_MODE_SIZE (TYPE_MODE (type)); ! if (! BYTES_BIG_ENDIAN) ! offset = (offset / UNITS_PER_WORD) * UNITS_PER_WORD; ! else if (! WORDS_BIG_ENDIAN) ! offset %= UNITS_PER_WORD; ! } ! target = gen_rtx_SUBREG (TYPE_MODE (type), target, offset); SUBREG_PROMOTED_VAR_P (target) = 1; SUBREG_PROMOTED_UNSIGNED_P (target) = unsignedp; } *************** expand_call (exp, target, ignore) *** 3321,3328 **** else emit_block_move (stack_area, validize_mem (args[i].save_area), ! GEN_INT (args[i].size.constant), ! PARM_BOUNDARY); } highest_outgoing_arg_in_use = initial_highest_arg_in_use; --- 3311,3317 ---- else emit_block_move (stack_area, validize_mem (args[i].save_area), ! GEN_INT (args[i].size.constant)); } highest_outgoing_arg_in_use = initial_highest_arg_in_use; *************** expand_call (exp, target, ignore) *** 3336,3343 **** if ((flags & ECF_MAY_BE_ALLOCA) && nonlocal_goto_handler_slots != 0) emit_stack_save (SAVE_NONLOCAL, &nonlocal_goto_stack_level, NULL_RTX); - pop_temp_slots (); - /* Free up storage we no longer need. */ for (i = 0; i < num_actuals; ++i) if (args[i].aligned_regs) --- 3325,3330 ---- *************** expand_call (exp, target, ignore) *** 3446,3451 **** --- 3433,3439 ---- /* Output a library call to function FUN (a SYMBOL_REF rtx). The RETVAL parameter specifies whether return value needs to be saved, other parameters are documented in the emit_library_call function below. */ + static rtx emit_library_call_value_1 (retval, orgfun, value, fn_type, outmode, nargs, p) int retval; *************** emit_library_call_value_1 (retval, orgfu *** 3460,3466 **** struct args_size args_size; /* Size of arguments before any adjustments (such as rounding). */ struct args_size original_args_size; ! register int argnum; rtx fun; int inc; int count; --- 3448,3454 ---- struct args_size args_size; /* Size of arguments before any adjustments (such as rounding). */ struct args_size original_args_size; ! int argnum; rtx fun; int inc; int count; *************** emit_library_call_value_1 (retval, orgfu *** 3514,3528 **** switch (fn_type) { case LCT_NORMAL: case LCT_CONST: case LCT_PURE: ! /* Nothing to do here. */ break; case LCT_CONST_MAKE_BLOCK: ! flags |= ECF_CONST; break; case LCT_PURE_MAKE_BLOCK: ! flags |= ECF_PURE; break; case LCT_NORETURN: flags |= ECF_NORETURN; --- 3502,3519 ---- switch (fn_type) { case LCT_NORMAL: + break; case LCT_CONST: + flags |= ECF_CONST; + break; case LCT_PURE: ! flags |= ECF_PURE; break; case LCT_CONST_MAKE_BLOCK: ! flags |= ECF_CONST | ECF_LIBCALL_BLOCK; break; case LCT_PURE_MAKE_BLOCK: ! flags |= ECF_PURE | ECF_LIBCALL_BLOCK; break; case LCT_NORETURN: flags |= ECF_NORETURN; *************** emit_library_call_value_1 (retval, orgfu *** 3530,3544 **** case LCT_THROW: flags = ECF_NORETURN; break; } fun = orgfun; - #ifdef PREFERRED_STACK_BOUNDARY /* Ensure current function's preferred stack boundary is at least what we need. */ if (cfun->preferred_stack_boundary < PREFERRED_STACK_BOUNDARY) cfun->preferred_stack_boundary = PREFERRED_STACK_BOUNDARY; - #endif /* If this kind of value comes back in memory, decide where in memory it should come back. */ --- 3521,3539 ---- case LCT_THROW: flags = ECF_NORETURN; break; + case LCT_ALWAYS_RETURN: + flags = ECF_ALWAYS_RETURN; + break; + case LCT_RETURNS_TWICE: + flags = ECF_RETURNS_TWICE; + break; } fun = orgfun; /* Ensure current function's preferred stack boundary is at least what we need. */ if (cfun->preferred_stack_boundary < PREFERRED_STACK_BOUNDARY) cfun->preferred_stack_boundary = PREFERRED_STACK_BOUNDARY; /* If this kind of value comes back in memory, decide where in memory it should come back. */ *************** emit_library_call_value_1 (retval, orgfu *** 3561,3567 **** #endif /* This call returns a big structure. */ ! flags &= ~(ECF_CONST | ECF_PURE); } /* ??? Unfinished: must pass the memory address as an argument. */ --- 3556,3562 ---- #endif /* This call returns a big structure. */ ! flags &= ~(ECF_CONST | ECF_PURE | ECF_LIBCALL_BLOCK); } /* ??? Unfinished: must pass the memory address as an argument. */ *************** emit_library_call_value_1 (retval, orgfu *** 3589,3595 **** /* Now we are about to start emitting insns that can be deleted if a libcall is deleted. */ ! if (flags & (ECF_CONST | ECF_PURE)) start_sequence (); push_temp_slots (); --- 3584,3590 ---- /* Now we are about to start emitting insns that can be deleted if a libcall is deleted. */ ! if (flags & ECF_LIBCALL_BLOCK) start_sequence (); push_temp_slots (); *************** emit_library_call_value_1 (retval, orgfu *** 3747,3760 **** assemble_external_libcall (fun); original_args_size = args_size; - #ifdef PREFERRED_STACK_BOUNDARY args_size.constant = (((args_size.constant + stack_pointer_delta + STACK_BYTES - 1) / STACK_BYTES * STACK_BYTES) - stack_pointer_delta); - #endif args_size.constant = MAX (args_size.constant, reg_parm_stack_space); --- 3742,3753 ---- *************** emit_library_call_value_1 (retval, orgfu *** 3807,3817 **** highest_outgoing_arg_in_use - initial_highest_arg_in_use); needed = 0; ! /* The address of the outgoing argument list must not be copied to a ! register here, because argblock would be left pointing to the ! wrong place after the call to allocate_dynamic_stack_space below. */ ! argblock = virtual_outgoing_args_rtx; } else { --- 3800,3814 ---- highest_outgoing_arg_in_use - initial_highest_arg_in_use); needed = 0; ! /* We must be careful to use virtual regs before they're instantiated, ! and real regs afterwards. Loop optimization, for example, can create ! new libcalls after we've instantiated the virtual regs, and if we ! use virtuals anyway, they won't match the rtl patterns. */ ! if (virtuals_instantiated) ! argblock = plus_constant (stack_pointer_rtx, STACK_POINTER_OFFSET); ! else ! argblock = virtual_outgoing_args_rtx; } else { *************** emit_library_call_value_1 (retval, orgfu *** 3819,3831 **** argblock = push_block (GEN_INT (args_size.constant), 0, 0); } - #ifdef PREFERRED_STACK_BOUNDARY /* If we push args individually in reverse order, perform stack alignment before the first push (the last arg). */ if (argblock == 0 && PUSH_ARGS_REVERSED) anti_adjust_stack (GEN_INT (args_size.constant - original_args_size.constant)); - #endif if (PUSH_ARGS_REVERSED) { --- 3816,3826 ---- *************** emit_library_call_value_1 (retval, orgfu *** 3889,3896 **** if (save_mode == BLKmode) { save_area = assign_stack_temp (BLKmode, num_to_save, 0); emit_block_move (validize_mem (save_area), stack_area, ! GEN_INT (num_to_save), PARM_BOUNDARY); } else { --- 3884,3892 ---- if (save_mode == BLKmode) { save_area = assign_stack_temp (BLKmode, num_to_save, 0); + set_mem_align (save_area, PARM_BOUNDARY); emit_block_move (validize_mem (save_area), stack_area, ! GEN_INT (num_to_save)); } else { *************** emit_library_call_value_1 (retval, orgfu *** 3907,3914 **** are to be pushed. */ for (count = 0; count < nargs; count++, argnum += inc) { ! register enum machine_mode mode = argvec[argnum].mode; ! register rtx val = argvec[argnum].value; rtx reg = argvec[argnum].reg; int partial = argvec[argnum].partial; int lower_bound = 0, upper_bound = 0, i; --- 3903,3910 ---- are to be pushed. */ for (count = 0; count < nargs; count++, argnum += inc) { ! enum machine_mode mode = argvec[argnum].mode; ! rtx val = argvec[argnum].value; rtx reg = argvec[argnum].reg; int partial = argvec[argnum].partial; int lower_bound = 0, upper_bound = 0, i; *************** emit_library_call_value_1 (retval, orgfu *** 3971,3990 **** } } - #ifdef PREFERRED_STACK_BOUNDARY /* If we pushed args in forward order, perform stack alignment after pushing the last arg. */ if (argblock == 0 && !PUSH_ARGS_REVERSED) anti_adjust_stack (GEN_INT (args_size.constant - original_args_size.constant)); - #endif if (PUSH_ARGS_REVERSED) argnum = nargs - 1; else argnum = 0; ! fun = prepare_call_address (fun, NULL_TREE, &call_fusage, 0); /* Now load any reg parms into their regs. */ --- 3967,3984 ---- } } /* If we pushed args in forward order, perform stack alignment after pushing the last arg. */ if (argblock == 0 && !PUSH_ARGS_REVERSED) anti_adjust_stack (GEN_INT (args_size.constant - original_args_size.constant)); if (PUSH_ARGS_REVERSED) argnum = nargs - 1; else argnum = 0; ! fun = prepare_call_address (fun, NULL_TREE, &call_fusage, 0, 0); /* Now load any reg parms into their regs. */ *************** emit_library_call_value_1 (retval, orgfu *** 3992,4007 **** are to be pushed. */ for (count = 0; count < nargs; count++, argnum += inc) { ! register rtx val = argvec[argnum].value; rtx reg = argvec[argnum].reg; int partial = argvec[argnum].partial; /* Handle calls that pass values in multiple non-contiguous locations. The PA64 has examples of this for library calls. */ if (reg != 0 && GET_CODE (reg) == PARALLEL) ! emit_group_load (reg, val, ! GET_MODE_SIZE (GET_MODE (val)), ! GET_MODE_ALIGNMENT (GET_MODE (val))); else if (reg != 0 && partial == 0) emit_move_insn (reg, val); --- 3986,3999 ---- are to be pushed. */ for (count = 0; count < nargs; count++, argnum += inc) { ! rtx val = argvec[argnum].value; rtx reg = argvec[argnum].reg; int partial = argvec[argnum].partial; /* Handle calls that pass values in multiple non-contiguous locations. The PA64 has examples of this for library calls. */ if (reg != 0 && GET_CODE (reg) == PARALLEL) ! emit_group_load (reg, val, GET_MODE_SIZE (GET_MODE (val))); else if (reg != 0 && partial == 0) emit_move_insn (reg, val); *************** emit_library_call_value_1 (retval, orgfu *** 4035,4045 **** valreg = (mem_value == 0 && outmode != VOIDmode ? hard_libcall_value (outmode) : NULL_RTX); - #ifdef PREFERRED_STACK_BOUNDARY /* Stack must be properly aligned now. */ if (stack_pointer_delta & (PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT - 1)) abort (); - #endif before_call = get_last_insn (); --- 4027,4035 ---- *************** emit_library_call_value_1 (retval, orgfu *** 4058,4072 **** struct_value_size, FUNCTION_ARG (args_so_far, VOIDmode, void_type_node, 1), valreg, ! old_inhibit_defer_pop + 1, call_fusage, flags); /* For calls to `setjmp', etc., inform flow.c it should complain if nonvolatile values are live. For functions that cannot return, inform flow that control does not fall through. */ ! if (flags & (ECF_RETURNS_TWICE | ECF_NORETURN | ECF_LONGJMP)) { ! /* The barrier or NOTE_INSN_SETJMP note must be emitted immediately after the CALL_INSN. Some ports emit more than just a CALL_INSN above, so we must search for it here. */ --- 4048,4062 ---- struct_value_size, FUNCTION_ARG (args_so_far, VOIDmode, void_type_node, 1), valreg, ! old_inhibit_defer_pop + 1, call_fusage, flags, & args_so_far); /* For calls to `setjmp', etc., inform flow.c it should complain if nonvolatile values are live. For functions that cannot return, inform flow that control does not fall through. */ ! if (flags & (ECF_NORETURN | ECF_LONGJMP)) { ! /* The barrier note must be emitted immediately after the CALL_INSN. Some ports emit more than just a CALL_INSN above, so we must search for it here. */ *************** emit_library_call_value_1 (retval, orgfu *** 4079,4091 **** abort (); } ! if (flags & ECF_RETURNS_TWICE) ! { ! emit_note_after (NOTE_INSN_SETJMP, last); ! current_function_calls_setjmp = 1; ! } ! else ! emit_barrier_after (last); } /* Now restore inhibit_defer_pop to its actual original value. */ --- 4069,4075 ---- abort (); } ! emit_barrier_after (last); } /* Now restore inhibit_defer_pop to its actual original value. */ *************** emit_library_call_value_1 (retval, orgfu *** 4095,4134 **** Test valreg so we don't crash; may safely ignore `const' if return type is void. Disable for PARALLEL return values, because we have no way to move such values into a pseudo register. */ ! if ((flags & (ECF_CONST | ECF_PURE)) ! && valreg != 0 && GET_CODE (valreg) != PARALLEL) { - rtx note = 0; - rtx temp = gen_reg_rtx (GET_MODE (valreg)); rtx insns; - int i; ! /* Construct an "equal form" for the value which mentions all the ! arguments in order as well as the function name. */ ! for (i = 0; i < nargs; i++) ! note = gen_rtx_EXPR_LIST (VOIDmode, argvec[i].value, note); ! note = gen_rtx_EXPR_LIST (VOIDmode, fun, note); ! insns = get_insns (); ! end_sequence (); ! if (flags & ECF_PURE) ! note = gen_rtx_EXPR_LIST (VOIDmode, ! gen_rtx_USE (VOIDmode, ! gen_rtx_MEM (BLKmode, ! gen_rtx_SCRATCH (VOIDmode))), note); ! emit_libcall_block (insns, temp, valreg, note); ! valreg = temp; ! } ! else if (flags & (ECF_CONST | ECF_PURE)) ! { ! /* Otherwise, just write out the sequence without a note. */ ! rtx insns = get_insns (); ! end_sequence (); ! emit_insns (insns); } pop_temp_slots (); --- 4079,4120 ---- Test valreg so we don't crash; may safely ignore `const' if return type is void. Disable for PARALLEL return values, because we have no way to move such values into a pseudo register. */ ! if (flags & ECF_LIBCALL_BLOCK) { rtx insns; ! if (valreg == 0 || GET_CODE (valreg) == PARALLEL) ! { ! insns = get_insns (); ! end_sequence (); ! emit_insns (insns); ! } ! else ! { ! rtx note = 0; ! rtx temp = gen_reg_rtx (GET_MODE (valreg)); ! int i; ! /* Construct an "equal form" for the value which mentions all the ! arguments in order as well as the function name. */ ! for (i = 0; i < nargs; i++) ! note = gen_rtx_EXPR_LIST (VOIDmode, argvec[i].value, note); ! note = gen_rtx_EXPR_LIST (VOIDmode, fun, note); ! insns = get_insns (); ! end_sequence (); ! if (flags & ECF_PURE) ! note = gen_rtx_EXPR_LIST (VOIDmode, ! gen_rtx_USE (VOIDmode, ! gen_rtx_MEM (BLKmode, ! gen_rtx_SCRATCH (VOIDmode))), ! note); ! emit_libcall_block (insns, temp, valreg, note); ! valreg = temp; ! } } pop_temp_slots (); *************** emit_library_call_value_1 (retval, orgfu *** 4166,4177 **** memory_address (save_mode, plus_constant (argblock, low_to_save))); #endif if (save_mode != BLKmode) emit_move_insn (stack_area, save_area); else emit_block_move (stack_area, validize_mem (save_area), ! GEN_INT (high_to_save - low_to_save + 1), ! PARM_BOUNDARY); } #endif --- 4152,4164 ---- memory_address (save_mode, plus_constant (argblock, low_to_save))); #endif + + set_mem_align (stack_area, PARM_BOUNDARY); if (save_mode != BLKmode) emit_move_insn (stack_area, save_area); else emit_block_move (stack_area, validize_mem (save_area), ! GEN_INT (high_to_save - low_to_save + 1)); } #endif *************** emit_library_call_value_1 (retval, orgfu *** 4205,4239 **** and machine_modes to convert them to. The rtx values should have been passed through protect_from_queue already. ! FN_TYPE will is zero for `normal' calls, one for `const' calls, wich ! which will be enclosed in REG_LIBCALL/REG_RETVAL notes and two for `pure' ! calls, that are handled like `const' calls with extra ! (use (memory (scratch)). */ void emit_library_call VPARAMS((rtx orgfun, enum libcall_type fn_type, enum machine_mode outmode, int nargs, ...)) { ! #ifndef ANSI_PROTOTYPES ! rtx orgfun; ! int fn_type; ! enum machine_mode outmode; ! int nargs; ! #endif ! va_list p; ! ! VA_START (p, nargs); ! ! #ifndef ANSI_PROTOTYPES ! orgfun = va_arg (p, rtx); ! fn_type = va_arg (p, int); ! outmode = va_arg (p, enum machine_mode); ! nargs = va_arg (p, int); ! #endif emit_library_call_value_1 (0, orgfun, NULL_RTX, fn_type, outmode, nargs, p); ! va_end (p); } /* Like emit_library_call except that an extra argument, VALUE, --- 4192,4217 ---- and machine_modes to convert them to. The rtx values should have been passed through protect_from_queue already. ! FN_TYPE should be LCT_NORMAL for `normal' calls, LCT_CONST for `const' ! calls, LCT_PURE for `pure' calls, LCT_CONST_MAKE_BLOCK for `const' calls ! which should be enclosed in REG_LIBCALL/REG_RETVAL notes, ! LCT_PURE_MAKE_BLOCK for `purep' calls which should be enclosed in ! REG_LIBCALL/REG_RETVAL notes with extra (use (memory (scratch)), ! or other LCT_ value for other types of library calls. */ void emit_library_call VPARAMS((rtx orgfun, enum libcall_type fn_type, enum machine_mode outmode, int nargs, ...)) { ! VA_OPEN (p, nargs); ! VA_FIXEDARG (p, rtx, orgfun); ! VA_FIXEDARG (p, int, fn_type); ! VA_FIXEDARG (p, enum machine_mode, outmode); ! VA_FIXEDARG (p, int, nargs); emit_library_call_value_1 (0, orgfun, NULL_RTX, fn_type, outmode, nargs, p); ! VA_CLOSE (p); } /* Like emit_library_call except that an extra argument, VALUE, *************** emit_library_call_value VPARAMS((rtx org *** 4249,4317 **** enum libcall_type fn_type, enum machine_mode outmode, int nargs, ...)) { ! #ifndef ANSI_PROTOTYPES ! rtx orgfun; ! rtx value; ! int fn_type; ! enum machine_mode outmode; ! int nargs; ! #endif ! va_list p; ! ! VA_START (p, nargs); ! ! #ifndef ANSI_PROTOTYPES ! orgfun = va_arg (p, rtx); ! value = va_arg (p, rtx); ! fn_type = va_arg (p, int); ! outmode = va_arg (p, enum machine_mode); ! nargs = va_arg (p, int); ! #endif ! ! value = emit_library_call_value_1 (1, orgfun, value, fn_type, outmode, nargs, p); ! ! va_end (p); ! ! return value; ! } ! ! #if 0 ! /* Return an rtx which represents a suitable home on the stack ! given TYPE, the type of the argument looking for a home. ! This is called only for BLKmode arguments. ! ! SIZE is the size needed for this target. ! ARGS_ADDR is the address of the bottom of the argument block for this call. ! OFFSET describes this parameter's offset into ARGS_ADDR. It is meaningless ! if this machine uses push insns. */ ! static rtx ! target_for_arg (type, size, args_addr, offset) ! tree type; ! rtx size; ! rtx args_addr; ! struct args_size offset; ! { ! rtx target; ! rtx offset_rtx = ARGS_SIZE_RTX (offset); ! /* We do not call memory_address if possible, ! because we want to address as close to the stack ! as possible. For non-variable sized arguments, ! this will be stack-pointer relative addressing. */ ! if (GET_CODE (offset_rtx) == CONST_INT) ! target = plus_constant (args_addr, INTVAL (offset_rtx)); ! else ! { ! /* I have no idea how to guarantee that this ! will work in the presence of register parameters. */ ! target = gen_rtx_PLUS (Pmode, args_addr, offset_rtx); ! target = memory_address (QImode, target); ! } ! return gen_rtx_MEM (BLKmode, target); } - #endif /* Store a single argument for a function call into the register or memory area where it must be passed. --- 4227,4248 ---- enum libcall_type fn_type, enum machine_mode outmode, int nargs, ...)) { ! rtx result; ! ! VA_OPEN (p, nargs); ! VA_FIXEDARG (p, rtx, orgfun); ! VA_FIXEDARG (p, rtx, value); ! VA_FIXEDARG (p, int, fn_type); ! VA_FIXEDARG (p, enum machine_mode, outmode); ! VA_FIXEDARG (p, int, nargs); ! result = emit_library_call_value_1 (1, orgfun, value, fn_type, outmode, ! nargs, p); ! VA_CLOSE (p); ! return result; } /* Store a single argument for a function call into the register or memory area where it must be passed. *************** store_one_arg (arg, argblock, flags, var *** 4340,4346 **** int variable_size ATTRIBUTE_UNUSED; int reg_parm_stack_space; { ! register tree pval = arg->tree_value; rtx reg = 0; int partial = 0; int used = 0; --- 4271,4277 ---- int variable_size ATTRIBUTE_UNUSED; int reg_parm_stack_space; { ! tree pval = arg->tree_value; rtx reg = 0; int partial = 0; int used = 0; *************** store_one_arg (arg, argblock, flags, var *** 4404,4411 **** arg->save_area = assign_temp (nt, 0, 1, 1); preserve_temp_slots (arg->save_area); emit_block_move (validize_mem (arg->save_area), stack_area, ! expr_size (arg->tree_value), ! MIN (PARM_BOUNDARY, TYPE_ALIGN (nt))); } else { --- 4335,4341 ---- arg->save_area = assign_temp (nt, 0, 1, 1); preserve_temp_slots (arg->save_area); emit_block_move (validize_mem (arg->save_area), stack_area, ! expr_size (arg->tree_value)); } else { *************** store_one_arg (arg, argblock, flags, var *** 4426,4436 **** /* If this isn't going to be placed on both the stack and in registers, set up the register and number of words. */ if (! arg->pass_on_stack) ! reg = arg->reg, partial = arg->partial; if (reg != 0 && partial == 0) /* Being passed entirely in a register. We shouldn't be called in ! this case. */ abort (); /* If this arg needs special alignment, don't load the registers --- 4356,4372 ---- /* If this isn't going to be placed on both the stack and in registers, set up the register and number of words. */ if (! arg->pass_on_stack) ! { ! if (flags & ECF_SIBCALL) ! reg = arg->tail_call_reg; ! else ! reg = arg->reg; ! partial = arg->partial; ! } if (reg != 0 && partial == 0) /* Being passed entirely in a register. We shouldn't be called in ! this case. */ abort (); /* If this arg needs special alignment, don't load the registers *************** store_one_arg (arg, argblock, flags, var *** 4486,4506 **** do_pending_stack_adjust (); if (arg->value == arg->stack) ! { ! /* If the value is already in the stack slot, we are done. */ ! if (current_function_check_memory_usage && GET_CODE (arg->stack) == MEM) ! { ! emit_library_call (chkr_set_right_libfunc, LCT_CONST_MAKE_BLOCK, ! VOIDmode, 3, XEXP (arg->stack, 0), Pmode, ! ARGS_SIZE_RTX (arg->size), ! TYPE_MODE (sizetype), ! GEN_INT (MEMORY_USE_RW), ! TYPE_MODE (integer_type_node)); ! } ! } else if (arg->mode != BLKmode) { ! register int size; /* Argument is a scalar, not entirely passed in registers. (If part is passed in registers, arg->partial says how much --- 4422,4432 ---- do_pending_stack_adjust (); if (arg->value == arg->stack) ! /* If the value is already in the stack slot, we are done. */ ! ; else if (arg->mode != BLKmode) { ! int size; /* Argument is a scalar, not entirely passed in registers. (If part is passed in registers, arg->partial says how much *************** store_one_arg (arg, argblock, flags, var *** 4534,4545 **** partial, reg, used - size, argblock, ARGS_SIZE_RTX (arg->offset), reg_parm_stack_space, ARGS_SIZE_RTX (arg->alignment_pad)); } else { /* BLKmode, at least partly to be pushed. */ ! register int excess; rtx size_rtx; /* Pushing a nonscalar. --- 4460,4476 ---- partial, reg, used - size, argblock, ARGS_SIZE_RTX (arg->offset), reg_parm_stack_space, ARGS_SIZE_RTX (arg->alignment_pad)); + + /* Unless this is a partially-in-register argument, the argument is now + in the stack. */ + if (partial == 0) + arg->value = arg->stack; } else { /* BLKmode, at least partly to be pushed. */ ! int excess; rtx size_rtx; /* Pushing a nonscalar. *************** store_one_arg (arg, argblock, flags, var *** 4596,4607 **** } } ! /* If parm is passed both in stack and in register and offset is ! greater than reg_parm_stack_space, split the offset. */ if (arg->reg && arg->pass_on_stack) { if (arg->offset.constant < reg_parm_stack_space && arg->offset.var) ! error ("variable offset is passed paritially in stack and in reg"); else if (arg->offset.constant < reg_parm_stack_space && arg->size.var) error ("variable size is passed partially in stack and in reg"); else if (arg->offset.constant < reg_parm_stack_space --- 4527,4548 ---- } } ! /* Special handling is required if part of the parameter lies in the ! register parameter area. The argument may be copied into the stack ! slot using memcpy(), but the original contents of the register ! parameter area will be restored after the memcpy() call. ! ! To ensure that the part that lies in the register parameter area ! is copied correctly, we emit a separate push for that part. This ! push should be small enough to avoid a call to memcpy(). */ ! #ifndef STACK_PARMS_IN_REG_PARM_AREA if (arg->reg && arg->pass_on_stack) + #else + if (1) + #endif { if (arg->offset.constant < reg_parm_stack_space && arg->offset.var) ! error ("variable offset is passed partially in stack and in reg"); else if (arg->offset.constant < reg_parm_stack_space && arg->size.var) error ("variable size is passed partially in stack and in reg"); else if (arg->offset.constant < reg_parm_stack_space *************** store_one_arg (arg, argblock, flags, var *** 4613,4621 **** TYPE_ALIGN (TREE_TYPE (pval)), partial, reg, excess, argblock, ARGS_SIZE_RTX (arg->offset), reg_parm_stack_space, ! ARGS_SIZE_RTX (arg->alignment_pad)); ! ! size_rtx = GEN_INT (INTVAL(size_rtx) - reg_parm_stack_space); } } --- 4554,4560 ---- TYPE_ALIGN (TREE_TYPE (pval)), partial, reg, excess, argblock, ARGS_SIZE_RTX (arg->offset), reg_parm_stack_space, ! ARGS_SIZE_RTX (arg->alignment_pad)); } } *************** store_one_arg (arg, argblock, flags, var *** 4625,4640 **** argblock, ARGS_SIZE_RTX (arg->offset), reg_parm_stack_space, ARGS_SIZE_RTX (arg->alignment_pad)); - } ! /* Unless this is a partially-in-register argument, the argument is now ! in the stack. ! ??? Note that this can change arg->value from arg->stack to ! arg->stack_slot and it matters when they are not the same. ! It isn't totally clear that this is correct in all cases. */ ! if (partial == 0) ! arg->value = arg->stack_slot; /* Once we have pushed something, pops can't safely be deferred during the rest of the arguments. */ --- 4564,4581 ---- argblock, ARGS_SIZE_RTX (arg->offset), reg_parm_stack_space, ARGS_SIZE_RTX (arg->alignment_pad)); ! /* Unless this is a partially-in-register argument, the argument is now ! in the stack. ! ??? Unlike the case above, in which we want the actual ! address of the data, so that we can load it directly into a ! register, here we want the address of the stack slot, so that ! it's properly aligned for word-by-word copying or something ! like that. It's not clear that this is always correct. */ ! if (partial == 0) ! arg->value = arg->stack_slot; ! } /* Once we have pushed something, pops can't safely be deferred during the rest of the arguments. */ diff -Nrc3pad gcc-3.0.4/gcc/cfg.c gcc-3.1/gcc/cfg.c *** gcc-3.0.4/gcc/cfg.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/cfg.c Wed Apr 10 00:18:53 2002 *************** *** 0 **** --- 1,759 ---- + /* Control flow graph manipulation code for GNU compiler. + Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, + 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2, or (at your option) any later + version. + + GCC is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to the Free + Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + + /* This file contains low level functions to manipulate the CFG and + analyze it. All other modules should not transform the datastructure + directly and use abstraction instead. The file is supposed to be + ordered bottom-up and should not contain any code dependent on a + particular intermediate language (RTL or trees). + + Available functionality: + - Initialization/deallocation + init_flow, clear_edges + - Low level basic block manipulation + alloc_block, expunge_block + - Edge manipulation + make_edge, make_single_succ_edge, cached_make_edge, remove_edge + - Low level edge redirection (without updating instruction chain) + redirect_edge_succ, redirect_edge_succ_nodup, redirect_edge_pred + - Dumping and debugging + dump_flow_info, debug_flow_info, dump_edge_info + - Allocation of AUX fields for basic blocks + alloc_aux_for_blocks, free_aux_for_blocks, alloc_aux_for_block + */ + + #include "config.h" + #include "system.h" + #include "tree.h" + #include "rtl.h" + #include "hard-reg-set.h" + #include "basic-block.h" + #include "regs.h" + #include "flags.h" + #include "output.h" + #include "function.h" + #include "except.h" + #include "toplev.h" + #include "tm_p.h" + #include "obstack.h" + + /* The obstack on which the flow graph components are allocated. */ + + struct obstack flow_obstack; + static char *flow_firstobj; + + /* Number of basic blocks in the current function. */ + + int n_basic_blocks; + + /* Number of edges in the current function. */ + + int n_edges; + + /* First edge in the deleted edges chain. */ + + edge first_deleted_edge; + static basic_block first_deleted_block; + + /* The basic block array. */ + + varray_type basic_block_info; + + /* The special entry and exit blocks. */ + + struct basic_block_def entry_exit_blocks[2] + = {{NULL, /* head */ + NULL, /* end */ + NULL, /* head_tree */ + NULL, /* end_tree */ + NULL, /* pred */ + NULL, /* succ */ + NULL, /* local_set */ + NULL, /* cond_local_set */ + NULL, /* global_live_at_start */ + NULL, /* global_live_at_end */ + NULL, /* aux */ + ENTRY_BLOCK, /* index */ + 0, /* loop_depth */ + 0, /* count */ + 0, /* frequency */ + 0 /* flags */ + }, + { + NULL, /* head */ + NULL, /* end */ + NULL, /* head_tree */ + NULL, /* end_tree */ + NULL, /* pred */ + NULL, /* succ */ + NULL, /* local_set */ + NULL, /* cond_local_set */ + NULL, /* global_live_at_start */ + NULL, /* global_live_at_end */ + NULL, /* aux */ + EXIT_BLOCK, /* index */ + 0, /* loop_depth */ + 0, /* count */ + 0, /* frequency */ + 0 /* flags */ + } + }; + + void debug_flow_info PARAMS ((void)); + static void free_edge PARAMS ((edge)); + + /* Called once at initialization time. */ + + void + init_flow () + { + static int initialized; + + first_deleted_edge = 0; + first_deleted_block = 0; + n_edges = 0; + + if (!initialized) + { + gcc_obstack_init (&flow_obstack); + flow_firstobj = (char *) obstack_alloc (&flow_obstack, 0); + initialized = 1; + } + else + { + obstack_free (&flow_obstack, flow_firstobj); + flow_firstobj = (char *) obstack_alloc (&flow_obstack, 0); + } + } + + /* Helper function for remove_edge and clear_edges. Frees edge structure + without actually unlinking it from the pred/succ lists. */ + + static void + free_edge (e) + edge e; + { + n_edges--; + memset (e, 0, sizeof *e); + e->succ_next = first_deleted_edge; + first_deleted_edge = e; + } + + /* Free the memory associated with the edge structures. */ + + void + clear_edges () + { + int i; + edge e; + + for (i = 0; i < n_basic_blocks; ++i) + { + basic_block bb = BASIC_BLOCK (i); + edge e = bb->succ; + + while (e) + { + edge next = e->succ_next; + + free_edge (e); + e = next; + } + + bb->succ = NULL; + bb->pred = NULL; + } + + e = ENTRY_BLOCK_PTR->succ; + while (e) + { + edge next = e->succ_next; + + free_edge (e); + e = next; + } + + EXIT_BLOCK_PTR->pred = NULL; + ENTRY_BLOCK_PTR->succ = NULL; + + if (n_edges) + abort (); + } + + /* Allocate memory for basic_block. */ + + basic_block + alloc_block () + { + basic_block bb; + + if (first_deleted_block) + { + bb = first_deleted_block; + first_deleted_block = (basic_block) bb->succ; + bb->succ = NULL; + } + else + { + bb = (basic_block) obstack_alloc (&flow_obstack, sizeof *bb); + memset (bb, 0, sizeof *bb); + } + return bb; + } + + /* Remove block B from the basic block array and compact behind it. */ + + void + expunge_block_nocompact (b) + basic_block b; + { + /* Invalidate data to make bughunting easier. */ + memset (b, 0, sizeof *b); + b->index = -3; + b->succ = (edge) first_deleted_block; + first_deleted_block = (basic_block) b; + } + + void + expunge_block (b) + basic_block b; + { + int i, n = n_basic_blocks; + + for (i = b->index; i + 1 < n; ++i) + { + basic_block x = BASIC_BLOCK (i + 1); + BASIC_BLOCK (i) = x; + x->index = i; + } + + n_basic_blocks--; + basic_block_info->num_elements--; + + expunge_block_nocompact (b); + } + + /* Create an edge connecting SRC and DST with FLAGS optionally using + edge cache CACHE. Return the new edge, NULL if already exist. */ + + edge + cached_make_edge (edge_cache, src, dst, flags) + sbitmap *edge_cache; + basic_block src, dst; + int flags; + { + int use_edge_cache; + edge e; + + /* Don't bother with edge cache for ENTRY or EXIT, if there aren't that + many edges to them, or we didn't allocate memory for it. */ + use_edge_cache = (edge_cache + && src != ENTRY_BLOCK_PTR && dst != EXIT_BLOCK_PTR); + + /* Make sure we don't add duplicate edges. */ + switch (use_edge_cache) + { + default: + /* Quick test for non-existence of the edge. */ + if (! TEST_BIT (edge_cache[src->index], dst->index)) + break; + + /* The edge exists; early exit if no work to do. */ + if (flags == 0) + return NULL; + + /* FALLTHRU */ + case 0: + for (e = src->succ; e; e = e->succ_next) + if (e->dest == dst) + { + e->flags |= flags; + return NULL; + } + break; + } + + if (first_deleted_edge) + { + e = first_deleted_edge; + first_deleted_edge = e->succ_next; + } + else + { + e = (edge) obstack_alloc (&flow_obstack, sizeof *e); + memset (e, 0, sizeof *e); + } + n_edges++; + + e->succ_next = src->succ; + e->pred_next = dst->pred; + e->src = src; + e->dest = dst; + e->flags = flags; + + src->succ = e; + dst->pred = e; + + if (use_edge_cache) + SET_BIT (edge_cache[src->index], dst->index); + + return e; + } + + /* Create an edge connecting SRC and DEST with flags FLAGS. Return newly + created edge or NULL if already exist. */ + + edge + make_edge (src, dest, flags) + basic_block src, dest; + int flags; + { + return cached_make_edge (NULL, src, dest, flags); + } + + /* Create an edge connecting SRC to DEST and set probability by knowing + that it is the single edge leaving SRC. */ + + edge + make_single_succ_edge (src, dest, flags) + basic_block src, dest; + int flags; + { + edge e = make_edge (src, dest, flags); + + e->probability = REG_BR_PROB_BASE; + e->count = src->count; + return e; + } + + /* This function will remove an edge from the flow graph. */ + + void + remove_edge (e) + edge e; + { + edge last_pred = NULL; + edge last_succ = NULL; + edge tmp; + basic_block src, dest; + + src = e->src; + dest = e->dest; + for (tmp = src->succ; tmp && tmp != e; tmp = tmp->succ_next) + last_succ = tmp; + + if (!tmp) + abort (); + if (last_succ) + last_succ->succ_next = e->succ_next; + else + src->succ = e->succ_next; + + for (tmp = dest->pred; tmp && tmp != e; tmp = tmp->pred_next) + last_pred = tmp; + + if (!tmp) + abort (); + if (last_pred) + last_pred->pred_next = e->pred_next; + else + dest->pred = e->pred_next; + + free_edge (e); + } + + /* Redirect an edge's successor from one block to another. */ + + void + redirect_edge_succ (e, new_succ) + edge e; + basic_block new_succ; + { + edge *pe; + + /* Disconnect the edge from the old successor block. */ + for (pe = &e->dest->pred; *pe != e; pe = &(*pe)->pred_next) + continue; + *pe = (*pe)->pred_next; + + /* Reconnect the edge to the new successor block. */ + e->pred_next = new_succ->pred; + new_succ->pred = e; + e->dest = new_succ; + } + + /* Like previous but avoid possible duplicate edge. */ + + edge + redirect_edge_succ_nodup (e, new_succ) + edge e; + basic_block new_succ; + { + edge s; + + /* Check whether the edge is already present. */ + for (s = e->src->succ; s; s = s->succ_next) + if (s->dest == new_succ && s != e) + break; + + if (s) + { + s->flags |= e->flags; + s->probability += e->probability; + s->count += e->count; + remove_edge (e); + e = s; + } + else + redirect_edge_succ (e, new_succ); + + return e; + } + + /* Redirect an edge's predecessor from one block to another. */ + + void + redirect_edge_pred (e, new_pred) + edge e; + basic_block new_pred; + { + edge *pe; + + /* Disconnect the edge from the old predecessor block. */ + for (pe = &e->src->succ; *pe != e; pe = &(*pe)->succ_next) + continue; + + *pe = (*pe)->succ_next; + + /* Reconnect the edge to the new predecessor block. */ + e->succ_next = new_pred->succ; + new_pred->succ = e; + e->src = new_pred; + } + + void + dump_flow_info (file) + FILE *file; + { + int i; + static const char * const reg_class_names[] = REG_CLASS_NAMES; + + fprintf (file, "%d registers.\n", max_regno); + for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++) + if (REG_N_REFS (i)) + { + enum reg_class class, altclass; + + fprintf (file, "\nRegister %d used %d times across %d insns", + i, REG_N_REFS (i), REG_LIVE_LENGTH (i)); + if (REG_BASIC_BLOCK (i) >= 0) + fprintf (file, " in block %d", REG_BASIC_BLOCK (i)); + if (REG_N_SETS (i)) + fprintf (file, "; set %d time%s", REG_N_SETS (i), + (REG_N_SETS (i) == 1) ? "" : "s"); + if (REG_USERVAR_P (regno_reg_rtx[i])) + fprintf (file, "; user var"); + if (REG_N_DEATHS (i) != 1) + fprintf (file, "; dies in %d places", REG_N_DEATHS (i)); + if (REG_N_CALLS_CROSSED (i) == 1) + fprintf (file, "; crosses 1 call"); + else if (REG_N_CALLS_CROSSED (i)) + fprintf (file, "; crosses %d calls", REG_N_CALLS_CROSSED (i)); + if (PSEUDO_REGNO_BYTES (i) != UNITS_PER_WORD) + fprintf (file, "; %d bytes", PSEUDO_REGNO_BYTES (i)); + + class = reg_preferred_class (i); + altclass = reg_alternate_class (i); + if (class != GENERAL_REGS || altclass != ALL_REGS) + { + if (altclass == ALL_REGS || class == ALL_REGS) + fprintf (file, "; pref %s", reg_class_names[(int) class]); + else if (altclass == NO_REGS) + fprintf (file, "; %s or none", reg_class_names[(int) class]); + else + fprintf (file, "; pref %s, else %s", + reg_class_names[(int) class], + reg_class_names[(int) altclass]); + } + + if (REG_POINTER (regno_reg_rtx[i])) + fprintf (file, "; pointer"); + fprintf (file, ".\n"); + } + + fprintf (file, "\n%d basic blocks, %d edges.\n", n_basic_blocks, n_edges); + for (i = 0; i < n_basic_blocks; i++) + { + basic_block bb = BASIC_BLOCK (i); + edge e; + + fprintf (file, "\nBasic block %d: first insn %d, last %d, ", + i, INSN_UID (bb->head), INSN_UID (bb->end)); + fprintf (file, "loop_depth %d, count ", bb->loop_depth); + fprintf (file, HOST_WIDEST_INT_PRINT_DEC, bb->count); + fprintf (file, ", freq %i.\n", bb->frequency); + + fprintf (file, "Predecessors: "); + for (e = bb->pred; e; e = e->pred_next) + dump_edge_info (file, e, 0); + + fprintf (file, "\nSuccessors: "); + for (e = bb->succ; e; e = e->succ_next) + dump_edge_info (file, e, 1); + + fprintf (file, "\nRegisters live at start:"); + dump_regset (bb->global_live_at_start, file); + + fprintf (file, "\nRegisters live at end:"); + dump_regset (bb->global_live_at_end, file); + + putc ('\n', file); + } + + putc ('\n', file); + } + + void + debug_flow_info () + { + dump_flow_info (stderr); + } + + void + dump_edge_info (file, e, do_succ) + FILE *file; + edge e; + int do_succ; + { + basic_block side = (do_succ ? e->dest : e->src); + + if (side == ENTRY_BLOCK_PTR) + fputs (" ENTRY", file); + else if (side == EXIT_BLOCK_PTR) + fputs (" EXIT", file); + else + fprintf (file, " %d", side->index); + + if (e->probability) + fprintf (file, " [%.1f%%] ", e->probability * 100.0 / REG_BR_PROB_BASE); + + if (e->count) + { + fprintf (file, " count:"); + fprintf (file, HOST_WIDEST_INT_PRINT_DEC, e->count); + } + + if (e->flags) + { + static const char * const bitnames[] + = {"fallthru", "ab", "abcall", "eh", "fake", "dfs_back"}; + int comma = 0; + int i, flags = e->flags; + + fputs (" (", file); + for (i = 0; flags; i++) + if (flags & (1 << i)) + { + flags &= ~(1 << i); + + if (comma) + fputc (',', file); + if (i < (int) ARRAY_SIZE (bitnames)) + fputs (bitnames[i], file); + else + fprintf (file, "%d", i); + comma = 1; + } + + fputc (')', file); + } + } + + /* Simple routines to easily allocate AUX fields of basic blocks. */ + + static struct obstack block_aux_obstack; + static void *first_block_aux_obj = 0; + static struct obstack edge_aux_obstack; + static void *first_edge_aux_obj = 0; + + /* Allocate an memory block of SIZE as BB->aux. The obstack must + be first initialized by alloc_aux_for_blocks. */ + + inline void + alloc_aux_for_block (bb, size) + basic_block bb; + int size; + { + /* Verify that aux field is clear. */ + if (bb->aux || !first_block_aux_obj) + abort (); + bb->aux = obstack_alloc (&block_aux_obstack, size); + memset (bb->aux, 0, size); + } + + /* Initialize the block_aux_obstack and if SIZE is nonzero, call + alloc_aux_for_block for each basic block. */ + + void + alloc_aux_for_blocks (size) + int size; + { + static int initialized; + + if (!initialized) + { + gcc_obstack_init (&block_aux_obstack); + initialized = 1; + } + + /* Check whether AUX data are still allocated. */ + else if (first_block_aux_obj) + abort (); + first_block_aux_obj = (char *) obstack_alloc (&block_aux_obstack, 0); + if (size) + { + int i; + + for (i = 0; i < n_basic_blocks; i++) + alloc_aux_for_block (BASIC_BLOCK (i), size); + + alloc_aux_for_block (ENTRY_BLOCK_PTR, size); + alloc_aux_for_block (EXIT_BLOCK_PTR, size); + } + } + + /* Clear AUX pointers of all blocks. */ + + void + clear_aux_for_blocks () + { + int i; + + for (i = 0; i < n_basic_blocks; i++) + BASIC_BLOCK (i)->aux = NULL; + + ENTRY_BLOCK_PTR->aux = NULL; + EXIT_BLOCK_PTR->aux = NULL; + } + + /* Free data allocated in block_aux_obstack and clear AUX pointers + of all blocks. */ + + void + free_aux_for_blocks () + { + if (!first_block_aux_obj) + abort (); + obstack_free (&block_aux_obstack, first_block_aux_obj); + first_block_aux_obj = NULL; + + clear_aux_for_blocks (); + } + + /* Allocate an memory edge of SIZE as BB->aux. The obstack must + be first initialized by alloc_aux_for_edges. */ + + inline void + alloc_aux_for_edge (e, size) + edge e; + int size; + { + /* Verify that aux field is clear. */ + if (e->aux || !first_edge_aux_obj) + abort (); + e->aux = obstack_alloc (&edge_aux_obstack, size); + memset (e->aux, 0, size); + } + + /* Initialize the edge_aux_obstack and if SIZE is nonzero, call + alloc_aux_for_edge for each basic edge. */ + + void + alloc_aux_for_edges (size) + int size; + { + static int initialized; + + if (!initialized) + { + gcc_obstack_init (&edge_aux_obstack); + initialized = 1; + } + + /* Check whether AUX data are still allocated. */ + else if (first_edge_aux_obj) + abort (); + + first_edge_aux_obj = (char *) obstack_alloc (&edge_aux_obstack, 0); + if (size) + { + int i; + for (i = -1; i < n_basic_blocks; i++) + { + basic_block bb; + edge e; + + if (i >= 0) + bb = BASIC_BLOCK (i); + else + bb = ENTRY_BLOCK_PTR; + + for (e = bb->succ; e; e = e->succ_next) + alloc_aux_for_edge (e, size); + } + } + } + + /* Clear AUX pointers of all edges. */ + + void + clear_aux_for_edges () + { + int i; + + for (i = -1; i < n_basic_blocks; i++) + { + basic_block bb; + edge e; + + if (i >= 0) + bb = BASIC_BLOCK (i); + else + bb = ENTRY_BLOCK_PTR; + + for (e = bb->succ; e; e = e->succ_next) + e->aux = NULL; + } + } + + /* Free data allocated in edge_aux_obstack and clear AUX pointers + of all edges. */ + + void + free_aux_for_edges () + { + if (!first_edge_aux_obj) + abort (); + obstack_free (&edge_aux_obstack, first_edge_aux_obj); + first_edge_aux_obj = NULL; + + clear_aux_for_edges (); + } diff -Nrc3pad gcc-3.0.4/gcc/cfganal.c gcc-3.1/gcc/cfganal.c *** gcc-3.0.4/gcc/cfganal.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/cfganal.c Fri Feb 8 00:35:15 2002 *************** *** 0 **** --- 1,1207 ---- + /* Control flow graph analysis code for GNU compiler. + Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, + 1999, 2000, 2001 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2, or (at your option) any later + version. + + GCC is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to the Free + Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + + /* This file contains various simple utilities to analyze the CFG. */ + #include "config.h" + #include "system.h" + #include "rtl.h" + #include "hard-reg-set.h" + #include "basic-block.h" + #include "insn-config.h" + #include "recog.h" + #include "toplev.h" + #include "obstack.h" + #include "tm_p.h" + + /* Store the data structures necessary for depth-first search. */ + struct depth_first_search_dsS { + /* stack for backtracking during the algorithm */ + basic_block *stack; + + /* number of edges in the stack. That is, positions 0, ..., sp-1 + have edges. */ + unsigned int sp; + + /* record of basic blocks already seen by depth-first search */ + sbitmap visited_blocks; + }; + typedef struct depth_first_search_dsS *depth_first_search_ds; + + static void flow_dfs_compute_reverse_init + PARAMS ((depth_first_search_ds)); + static void flow_dfs_compute_reverse_add_bb + PARAMS ((depth_first_search_ds, basic_block)); + static basic_block flow_dfs_compute_reverse_execute + PARAMS ((depth_first_search_ds)); + static void flow_dfs_compute_reverse_finish + PARAMS ((depth_first_search_ds)); + static void remove_fake_successors PARAMS ((basic_block)); + static bool need_fake_edge_p PARAMS ((rtx)); + static bool keep_with_call_p PARAMS ((rtx)); + + /* Return true if the block has no effect and only forwards control flow to + its single destination. */ + + bool + forwarder_block_p (bb) + basic_block bb; + { + rtx insn; + + if (bb == EXIT_BLOCK_PTR || bb == ENTRY_BLOCK_PTR + || !bb->succ || bb->succ->succ_next) + return false; + + for (insn = bb->head; insn != bb->end; insn = NEXT_INSN (insn)) + if (INSN_P (insn) && active_insn_p (insn)) + return false; + + return (!INSN_P (insn) + || (GET_CODE (insn) == JUMP_INSN && simplejump_p (insn)) + || !active_insn_p (insn)); + } + + /* Return nonzero if we can reach target from src by falling through. */ + + bool + can_fallthru (src, target) + basic_block src, target; + { + rtx insn = src->end; + rtx insn2 = target->head; + + if (src->index + 1 == target->index && !active_insn_p (insn2)) + insn2 = next_active_insn (insn2); + + /* ??? Later we may add code to move jump tables offline. */ + return next_active_insn (insn) == insn2; + } + + /* Mark the back edges in DFS traversal. + Return non-zero if a loop (natural or otherwise) is present. + Inspired by Depth_First_Search_PP described in: + + Advanced Compiler Design and Implementation + Steven Muchnick + Morgan Kaufmann, 1997 + + and heavily borrowed from flow_depth_first_order_compute. */ + + bool + mark_dfs_back_edges () + { + edge *stack; + int *pre; + int *post; + int sp; + int prenum = 1; + int postnum = 1; + sbitmap visited; + bool found = false; + + /* Allocate the preorder and postorder number arrays. */ + pre = (int *) xcalloc (n_basic_blocks, sizeof (int)); + post = (int *) xcalloc (n_basic_blocks, sizeof (int)); + + /* Allocate stack for back-tracking up CFG. */ + stack = (edge *) xmalloc ((n_basic_blocks + 1) * sizeof (edge)); + sp = 0; + + /* Allocate bitmap to track nodes that have been visited. */ + visited = sbitmap_alloc (n_basic_blocks); + + /* None of the nodes in the CFG have been visited yet. */ + sbitmap_zero (visited); + + /* Push the first edge on to the stack. */ + stack[sp++] = ENTRY_BLOCK_PTR->succ; + + while (sp) + { + edge e; + basic_block src; + basic_block dest; + + /* Look at the edge on the top of the stack. */ + e = stack[sp - 1]; + src = e->src; + dest = e->dest; + e->flags &= ~EDGE_DFS_BACK; + + /* Check if the edge destination has been visited yet. */ + if (dest != EXIT_BLOCK_PTR && ! TEST_BIT (visited, dest->index)) + { + /* Mark that we have visited the destination. */ + SET_BIT (visited, dest->index); + + pre[dest->index] = prenum++; + if (dest->succ) + { + /* Since the DEST node has been visited for the first + time, check its successors. */ + stack[sp++] = dest->succ; + } + else + post[dest->index] = postnum++; + } + else + { + if (dest != EXIT_BLOCK_PTR && src != ENTRY_BLOCK_PTR + && pre[src->index] >= pre[dest->index] + && post[dest->index] == 0) + e->flags |= EDGE_DFS_BACK, found = true; + + if (! e->succ_next && src != ENTRY_BLOCK_PTR) + post[src->index] = postnum++; + + if (e->succ_next) + stack[sp - 1] = e->succ_next; + else + sp--; + } + } + + free (pre); + free (post); + free (stack); + sbitmap_free (visited); + + return found; + } + + /* Return true if we need to add fake edge to exit. + Helper function for the flow_call_edges_add. */ + + static bool + need_fake_edge_p (insn) + rtx insn; + { + if (!INSN_P (insn)) + return false; + + if ((GET_CODE (insn) == CALL_INSN + && !SIBLING_CALL_P (insn) + && !find_reg_note (insn, REG_NORETURN, NULL) + && !find_reg_note (insn, REG_ALWAYS_RETURN, NULL) + && !CONST_OR_PURE_CALL_P (insn))) + return true; + + return ((GET_CODE (PATTERN (insn)) == ASM_OPERANDS + && MEM_VOLATILE_P (PATTERN (insn))) + || (GET_CODE (PATTERN (insn)) == PARALLEL + && asm_noperands (insn) != -1 + && MEM_VOLATILE_P (XVECEXP (PATTERN (insn), 0, 0))) + || GET_CODE (PATTERN (insn)) == ASM_INPUT); + } + + /* Return true if INSN should be kept in the same block as a preceding call. + This is done for a single-set whose destination is a fixed register or + whose source is the function return value. This is a helper function for + flow_call_edges_add. */ + + static bool + keep_with_call_p (insn) + rtx insn; + { + rtx set; + + if (INSN_P (insn) && (set = single_set (insn)) != NULL) + { + if (GET_CODE (SET_DEST (set)) == REG + && fixed_regs[REGNO (SET_DEST (set))] + && general_operand (SET_SRC (set), VOIDmode)) + return true; + if (GET_CODE (SET_SRC (set)) == REG + && FUNCTION_VALUE_REGNO_P (REGNO (SET_SRC (set))) + && GET_CODE (SET_DEST (set)) == REG + && REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER) + return true; + } + return false; + } + + /* Add fake edges to the function exit for any non constant and non noreturn + calls, volatile inline assembly in the bitmap of blocks specified by + BLOCKS or to the whole CFG if BLOCKS is zero. Return the number of blocks + that were split. + + The goal is to expose cases in which entering a basic block does not imply + that all subsequent instructions must be executed. */ + + int + flow_call_edges_add (blocks) + sbitmap blocks; + { + int i; + int blocks_split = 0; + int bb_num = 0; + basic_block *bbs; + bool check_last_block = false; + + /* Map bb indices into basic block pointers since split_block + will renumber the basic blocks. */ + + bbs = xmalloc (n_basic_blocks * sizeof (*bbs)); + + if (! blocks) + { + for (i = 0; i < n_basic_blocks; i++) + bbs[bb_num++] = BASIC_BLOCK (i); + + check_last_block = true; + } + else + EXECUTE_IF_SET_IN_SBITMAP (blocks, 0, i, + { + bbs[bb_num++] = BASIC_BLOCK (i); + if (i == n_basic_blocks - 1) + check_last_block = true; + }); + + /* In the last basic block, before epilogue generation, there will be + a fallthru edge to EXIT. Special care is required if the last insn + of the last basic block is a call because make_edge folds duplicate + edges, which would result in the fallthru edge also being marked + fake, which would result in the fallthru edge being removed by + remove_fake_edges, which would result in an invalid CFG. + + Moreover, we can't elide the outgoing fake edge, since the block + profiler needs to take this into account in order to solve the minimal + spanning tree in the case that the call doesn't return. + + Handle this by adding a dummy instruction in a new last basic block. */ + if (check_last_block) + { + basic_block bb = BASIC_BLOCK (n_basic_blocks - 1); + rtx insn = bb->end; + + /* Back up past insns that must be kept in the same block as a call. */ + while (insn != bb->head + && keep_with_call_p (insn)) + insn = PREV_INSN (insn); + + if (need_fake_edge_p (insn)) + { + edge e; + + for (e = bb->succ; e; e = e->succ_next) + if (e->dest == EXIT_BLOCK_PTR) + break; + + insert_insn_on_edge (gen_rtx_USE (VOIDmode, const0_rtx), e); + commit_edge_insertions (); + } + } + + /* Now add fake edges to the function exit for any non constant + calls since there is no way that we can determine if they will + return or not... */ + + for (i = 0; i < bb_num; i++) + { + basic_block bb = bbs[i]; + rtx insn; + rtx prev_insn; + + for (insn = bb->end; ; insn = prev_insn) + { + prev_insn = PREV_INSN (insn); + if (need_fake_edge_p (insn)) + { + edge e; + rtx split_at_insn = insn; + + /* Don't split the block between a call and an insn that should + remain in the same block as the call. */ + if (GET_CODE (insn) == CALL_INSN) + while (split_at_insn != bb->end + && keep_with_call_p (NEXT_INSN (split_at_insn))) + split_at_insn = NEXT_INSN (split_at_insn); + + /* The handling above of the final block before the epilogue + should be enough to verify that there is no edge to the exit + block in CFG already. Calling make_edge in such case would + cause us to mark that edge as fake and remove it later. */ + + #ifdef ENABLE_CHECKING + if (split_at_insn == bb->end) + for (e = bb->succ; e; e = e->succ_next) + if (e->dest == EXIT_BLOCK_PTR) + abort (); + #endif + + /* Note that the following may create a new basic block + and renumber the existing basic blocks. */ + e = split_block (bb, split_at_insn); + if (e) + blocks_split++; + + make_edge (bb, EXIT_BLOCK_PTR, EDGE_FAKE); + } + + if (insn == bb->head) + break; + } + } + + if (blocks_split) + verify_flow_info (); + + free (bbs); + return blocks_split; + } + + /* Find unreachable blocks. An unreachable block will have 0 in + the reachable bit in block->flags. A non-zero value indicates the + block is reachable. */ + + void + find_unreachable_blocks () + { + edge e; + int i, n; + basic_block *tos, *worklist; + + n = n_basic_blocks; + tos = worklist = (basic_block *) xmalloc (sizeof (basic_block) * n); + + /* Clear all the reachability flags. */ + + for (i = 0; i < n; ++i) + BASIC_BLOCK (i)->flags &= ~BB_REACHABLE; + + /* Add our starting points to the worklist. Almost always there will + be only one. It isn't inconceivable that we might one day directly + support Fortran alternate entry points. */ + + for (e = ENTRY_BLOCK_PTR->succ; e; e = e->succ_next) + { + *tos++ = e->dest; + + /* Mark the block reachable. */ + e->dest->flags |= BB_REACHABLE; + } + + /* Iterate: find everything reachable from what we've already seen. */ + + while (tos != worklist) + { + basic_block b = *--tos; + + for (e = b->succ; e; e = e->succ_next) + if (!(e->dest->flags & BB_REACHABLE)) + { + *tos++ = e->dest; + e->dest->flags |= BB_REACHABLE; + } + } + + free (worklist); + } + + /* Functions to access an edge list with a vector representation. + Enough data is kept such that given an index number, the + pred and succ that edge represents can be determined, or + given a pred and a succ, its index number can be returned. + This allows algorithms which consume a lot of memory to + represent the normally full matrix of edge (pred,succ) with a + single indexed vector, edge (EDGE_INDEX (pred, succ)), with no + wasted space in the client code due to sparse flow graphs. */ + + /* This functions initializes the edge list. Basically the entire + flowgraph is processed, and all edges are assigned a number, + and the data structure is filled in. */ + + struct edge_list * + create_edge_list () + { + struct edge_list *elist; + edge e; + int num_edges; + int x; + int block_count; + + block_count = n_basic_blocks + 2; /* Include the entry and exit blocks. */ + + num_edges = 0; + + /* Determine the number of edges in the flow graph by counting successor + edges on each basic block. */ + for (x = 0; x < n_basic_blocks; x++) + { + basic_block bb = BASIC_BLOCK (x); + + for (e = bb->succ; e; e = e->succ_next) + num_edges++; + } + + /* Don't forget successors of the entry block. */ + for (e = ENTRY_BLOCK_PTR->succ; e; e = e->succ_next) + num_edges++; + + elist = (struct edge_list *) xmalloc (sizeof (struct edge_list)); + elist->num_blocks = block_count; + elist->num_edges = num_edges; + elist->index_to_edge = (edge *) xmalloc (sizeof (edge) * num_edges); + + num_edges = 0; + + /* Follow successors of the entry block, and register these edges. */ + for (e = ENTRY_BLOCK_PTR->succ; e; e = e->succ_next) + elist->index_to_edge[num_edges++] = e; + + for (x = 0; x < n_basic_blocks; x++) + { + basic_block bb = BASIC_BLOCK (x); + + /* Follow all successors of blocks, and register these edges. */ + for (e = bb->succ; e; e = e->succ_next) + elist->index_to_edge[num_edges++] = e; + } + + return elist; + } + + /* This function free's memory associated with an edge list. */ + + void + free_edge_list (elist) + struct edge_list *elist; + { + if (elist) + { + free (elist->index_to_edge); + free (elist); + } + } + + /* This function provides debug output showing an edge list. */ + + void + print_edge_list (f, elist) + FILE *f; + struct edge_list *elist; + { + int x; + + fprintf (f, "Compressed edge list, %d BBs + entry & exit, and %d edges\n", + elist->num_blocks - 2, elist->num_edges); + + for (x = 0; x < elist->num_edges; x++) + { + fprintf (f, " %-4d - edge(", x); + if (INDEX_EDGE_PRED_BB (elist, x) == ENTRY_BLOCK_PTR) + fprintf (f, "entry,"); + else + fprintf (f, "%d,", INDEX_EDGE_PRED_BB (elist, x)->index); + + if (INDEX_EDGE_SUCC_BB (elist, x) == EXIT_BLOCK_PTR) + fprintf (f, "exit)\n"); + else + fprintf (f, "%d)\n", INDEX_EDGE_SUCC_BB (elist, x)->index); + } + } + + /* This function provides an internal consistency check of an edge list, + verifying that all edges are present, and that there are no + extra edges. */ + + void + verify_edge_list (f, elist) + FILE *f; + struct edge_list *elist; + { + int x, pred, succ, index; + edge e; + + for (x = 0; x < n_basic_blocks; x++) + { + basic_block bb = BASIC_BLOCK (x); + + for (e = bb->succ; e; e = e->succ_next) + { + pred = e->src->index; + succ = e->dest->index; + index = EDGE_INDEX (elist, e->src, e->dest); + if (index == EDGE_INDEX_NO_EDGE) + { + fprintf (f, "*p* No index for edge from %d to %d\n", pred, succ); + continue; + } + + if (INDEX_EDGE_PRED_BB (elist, index)->index != pred) + fprintf (f, "*p* Pred for index %d should be %d not %d\n", + index, pred, INDEX_EDGE_PRED_BB (elist, index)->index); + if (INDEX_EDGE_SUCC_BB (elist, index)->index != succ) + fprintf (f, "*p* Succ for index %d should be %d not %d\n", + index, succ, INDEX_EDGE_SUCC_BB (elist, index)->index); + } + } + + for (e = ENTRY_BLOCK_PTR->succ; e; e = e->succ_next) + { + pred = e->src->index; + succ = e->dest->index; + index = EDGE_INDEX (elist, e->src, e->dest); + if (index == EDGE_INDEX_NO_EDGE) + { + fprintf (f, "*p* No index for edge from %d to %d\n", pred, succ); + continue; + } + + if (INDEX_EDGE_PRED_BB (elist, index)->index != pred) + fprintf (f, "*p* Pred for index %d should be %d not %d\n", + index, pred, INDEX_EDGE_PRED_BB (elist, index)->index); + if (INDEX_EDGE_SUCC_BB (elist, index)->index != succ) + fprintf (f, "*p* Succ for index %d should be %d not %d\n", + index, succ, INDEX_EDGE_SUCC_BB (elist, index)->index); + } + + /* We've verified that all the edges are in the list, no lets make sure + there are no spurious edges in the list. */ + + for (pred = 0; pred < n_basic_blocks; pred++) + for (succ = 0; succ < n_basic_blocks; succ++) + { + basic_block p = BASIC_BLOCK (pred); + basic_block s = BASIC_BLOCK (succ); + int found_edge = 0; + + for (e = p->succ; e; e = e->succ_next) + if (e->dest == s) + { + found_edge = 1; + break; + } + + for (e = s->pred; e; e = e->pred_next) + if (e->src == p) + { + found_edge = 1; + break; + } + + if (EDGE_INDEX (elist, BASIC_BLOCK (pred), BASIC_BLOCK (succ)) + == EDGE_INDEX_NO_EDGE && found_edge != 0) + fprintf (f, "*** Edge (%d, %d) appears to not have an index\n", + pred, succ); + if (EDGE_INDEX (elist, BASIC_BLOCK (pred), BASIC_BLOCK (succ)) + != EDGE_INDEX_NO_EDGE && found_edge == 0) + fprintf (f, "*** Edge (%d, %d) has index %d, but there is no edge\n", + pred, succ, EDGE_INDEX (elist, BASIC_BLOCK (pred), + BASIC_BLOCK (succ))); + } + + for (succ = 0; succ < n_basic_blocks; succ++) + { + basic_block p = ENTRY_BLOCK_PTR; + basic_block s = BASIC_BLOCK (succ); + int found_edge = 0; + + for (e = p->succ; e; e = e->succ_next) + if (e->dest == s) + { + found_edge = 1; + break; + } + + for (e = s->pred; e; e = e->pred_next) + if (e->src == p) + { + found_edge = 1; + break; + } + + if (EDGE_INDEX (elist, ENTRY_BLOCK_PTR, BASIC_BLOCK (succ)) + == EDGE_INDEX_NO_EDGE && found_edge != 0) + fprintf (f, "*** Edge (entry, %d) appears to not have an index\n", + succ); + if (EDGE_INDEX (elist, ENTRY_BLOCK_PTR, BASIC_BLOCK (succ)) + != EDGE_INDEX_NO_EDGE && found_edge == 0) + fprintf (f, "*** Edge (entry, %d) has index %d, but no edge exists\n", + succ, EDGE_INDEX (elist, ENTRY_BLOCK_PTR, + BASIC_BLOCK (succ))); + } + + for (pred = 0; pred < n_basic_blocks; pred++) + { + basic_block p = BASIC_BLOCK (pred); + basic_block s = EXIT_BLOCK_PTR; + int found_edge = 0; + + for (e = p->succ; e; e = e->succ_next) + if (e->dest == s) + { + found_edge = 1; + break; + } + + for (e = s->pred; e; e = e->pred_next) + if (e->src == p) + { + found_edge = 1; + break; + } + + if (EDGE_INDEX (elist, BASIC_BLOCK (pred), EXIT_BLOCK_PTR) + == EDGE_INDEX_NO_EDGE && found_edge != 0) + fprintf (f, "*** Edge (%d, exit) appears to not have an index\n", + pred); + if (EDGE_INDEX (elist, BASIC_BLOCK (pred), EXIT_BLOCK_PTR) + != EDGE_INDEX_NO_EDGE && found_edge == 0) + fprintf (f, "*** Edge (%d, exit) has index %d, but no edge exists\n", + pred, EDGE_INDEX (elist, BASIC_BLOCK (pred), + EXIT_BLOCK_PTR)); + } + } + + /* This routine will determine what, if any, edge there is between + a specified predecessor and successor. */ + + int + find_edge_index (edge_list, pred, succ) + struct edge_list *edge_list; + basic_block pred, succ; + { + int x; + + for (x = 0; x < NUM_EDGES (edge_list); x++) + if (INDEX_EDGE_PRED_BB (edge_list, x) == pred + && INDEX_EDGE_SUCC_BB (edge_list, x) == succ) + return x; + + return (EDGE_INDEX_NO_EDGE); + } + + /* Dump the list of basic blocks in the bitmap NODES. */ + + void + flow_nodes_print (str, nodes, file) + const char *str; + const sbitmap nodes; + FILE *file; + { + int node; + + if (! nodes) + return; + + fprintf (file, "%s { ", str); + EXECUTE_IF_SET_IN_SBITMAP (nodes, 0, node, {fprintf (file, "%d ", node);}); + fputs ("}\n", file); + } + + /* Dump the list of edges in the array EDGE_LIST. */ + + void + flow_edge_list_print (str, edge_list, num_edges, file) + const char *str; + const edge *edge_list; + int num_edges; + FILE *file; + { + int i; + + if (! edge_list) + return; + + fprintf (file, "%s { ", str); + for (i = 0; i < num_edges; i++) + fprintf (file, "%d->%d ", edge_list[i]->src->index, + edge_list[i]->dest->index); + + fputs ("}\n", file); + } + + + /* This routine will remove any fake successor edges for a basic block. + When the edge is removed, it is also removed from whatever predecessor + list it is in. */ + + static void + remove_fake_successors (bb) + basic_block bb; + { + edge e; + + for (e = bb->succ; e;) + { + edge tmp = e; + + e = e->succ_next; + if ((tmp->flags & EDGE_FAKE) == EDGE_FAKE) + remove_edge (tmp); + } + } + + /* This routine will remove all fake edges from the flow graph. If + we remove all fake successors, it will automatically remove all + fake predecessors. */ + + void + remove_fake_edges () + { + int x; + + for (x = 0; x < n_basic_blocks; x++) + remove_fake_successors (BASIC_BLOCK (x)); + + /* We've handled all successors except the entry block's. */ + remove_fake_successors (ENTRY_BLOCK_PTR); + } + + /* This function will add a fake edge between any block which has no + successors, and the exit block. Some data flow equations require these + edges to exist. */ + + void + add_noreturn_fake_exit_edges () + { + int x; + + for (x = 0; x < n_basic_blocks; x++) + if (BASIC_BLOCK (x)->succ == NULL) + make_single_succ_edge (BASIC_BLOCK (x), EXIT_BLOCK_PTR, EDGE_FAKE); + } + + /* This function adds a fake edge between any infinite loops to the + exit block. Some optimizations require a path from each node to + the exit node. + + See also Morgan, Figure 3.10, pp. 82-83. + + The current implementation is ugly, not attempting to minimize the + number of inserted fake edges. To reduce the number of fake edges + to insert, add fake edges from _innermost_ loops containing only + nodes not reachable from the exit block. */ + + void + connect_infinite_loops_to_exit () + { + basic_block unvisited_block; + struct depth_first_search_dsS dfs_ds; + + /* Perform depth-first search in the reverse graph to find nodes + reachable from the exit block. */ + flow_dfs_compute_reverse_init (&dfs_ds); + flow_dfs_compute_reverse_add_bb (&dfs_ds, EXIT_BLOCK_PTR); + + /* Repeatedly add fake edges, updating the unreachable nodes. */ + while (1) + { + unvisited_block = flow_dfs_compute_reverse_execute (&dfs_ds); + if (!unvisited_block) + break; + + make_edge (unvisited_block, EXIT_BLOCK_PTR, EDGE_FAKE); + flow_dfs_compute_reverse_add_bb (&dfs_ds, unvisited_block); + } + + flow_dfs_compute_reverse_finish (&dfs_ds); + return; + } + + /* Compute reverse top sort order */ + + void + flow_reverse_top_sort_order_compute (rts_order) + int *rts_order; + { + edge *stack; + int sp; + int postnum = 0; + sbitmap visited; + + /* Allocate stack for back-tracking up CFG. */ + stack = (edge *) xmalloc ((n_basic_blocks + 1) * sizeof (edge)); + sp = 0; + + /* Allocate bitmap to track nodes that have been visited. */ + visited = sbitmap_alloc (n_basic_blocks); + + /* None of the nodes in the CFG have been visited yet. */ + sbitmap_zero (visited); + + /* Push the first edge on to the stack. */ + stack[sp++] = ENTRY_BLOCK_PTR->succ; + + while (sp) + { + edge e; + basic_block src; + basic_block dest; + + /* Look at the edge on the top of the stack. */ + e = stack[sp - 1]; + src = e->src; + dest = e->dest; + + /* Check if the edge destination has been visited yet. */ + if (dest != EXIT_BLOCK_PTR && ! TEST_BIT (visited, dest->index)) + { + /* Mark that we have visited the destination. */ + SET_BIT (visited, dest->index); + + if (dest->succ) + /* Since the DEST node has been visited for the first + time, check its successors. */ + stack[sp++] = dest->succ; + else + rts_order[postnum++] = dest->index; + } + else + { + if (! e->succ_next && src != ENTRY_BLOCK_PTR) + rts_order[postnum++] = src->index; + + if (e->succ_next) + stack[sp - 1] = e->succ_next; + else + sp--; + } + } + + free (stack); + sbitmap_free (visited); + } + + /* Compute the depth first search order and store in the array + DFS_ORDER if non-zero, marking the nodes visited in VISITED. If + RC_ORDER is non-zero, return the reverse completion number for each + node. Returns the number of nodes visited. A depth first search + tries to get as far away from the starting point as quickly as + possible. */ + + int + flow_depth_first_order_compute (dfs_order, rc_order) + int *dfs_order; + int *rc_order; + { + edge *stack; + int sp; + int dfsnum = 0; + int rcnum = n_basic_blocks - 1; + sbitmap visited; + + /* Allocate stack for back-tracking up CFG. */ + stack = (edge *) xmalloc ((n_basic_blocks + 1) * sizeof (edge)); + sp = 0; + + /* Allocate bitmap to track nodes that have been visited. */ + visited = sbitmap_alloc (n_basic_blocks); + + /* None of the nodes in the CFG have been visited yet. */ + sbitmap_zero (visited); + + /* Push the first edge on to the stack. */ + stack[sp++] = ENTRY_BLOCK_PTR->succ; + + while (sp) + { + edge e; + basic_block src; + basic_block dest; + + /* Look at the edge on the top of the stack. */ + e = stack[sp - 1]; + src = e->src; + dest = e->dest; + + /* Check if the edge destination has been visited yet. */ + if (dest != EXIT_BLOCK_PTR && ! TEST_BIT (visited, dest->index)) + { + /* Mark that we have visited the destination. */ + SET_BIT (visited, dest->index); + + if (dfs_order) + dfs_order[dfsnum] = dest->index; + + dfsnum++; + + if (dest->succ) + /* Since the DEST node has been visited for the first + time, check its successors. */ + stack[sp++] = dest->succ; + else if (rc_order) + /* There are no successors for the DEST node so assign + its reverse completion number. */ + rc_order[rcnum--] = dest->index; + } + else + { + if (! e->succ_next && src != ENTRY_BLOCK_PTR + && rc_order) + /* There are no more successors for the SRC node + so assign its reverse completion number. */ + rc_order[rcnum--] = src->index; + + if (e->succ_next) + stack[sp - 1] = e->succ_next; + else + sp--; + } + } + + free (stack); + sbitmap_free (visited); + + /* The number of nodes visited should not be greater than + n_basic_blocks. */ + if (dfsnum > n_basic_blocks) + abort (); + + /* There are some nodes left in the CFG that are unreachable. */ + if (dfsnum < n_basic_blocks) + abort (); + + return dfsnum; + } + + struct dfst_node + { + unsigned nnodes; + struct dfst_node **node; + struct dfst_node *up; + }; + + /* Compute a preorder transversal ordering such that a sub-tree which + is the source of a cross edge appears before the sub-tree which is + the destination of the cross edge. This allows for easy detection + of all the entry blocks for a loop. + + The ordering is compute by: + + 1) Generating a depth first spanning tree. + + 2) Walking the resulting tree from right to left. */ + + void + flow_preorder_transversal_compute (pot_order) + int *pot_order; + { + edge e; + edge *stack; + int i; + int max_successors; + int sp; + sbitmap visited; + struct dfst_node *node; + struct dfst_node *dfst; + + /* Allocate stack for back-tracking up CFG. */ + stack = (edge *) xmalloc ((n_basic_blocks + 1) * sizeof (edge)); + sp = 0; + + /* Allocate the tree. */ + dfst = (struct dfst_node *) xcalloc (n_basic_blocks, + sizeof (struct dfst_node)); + + for (i = 0; i < n_basic_blocks; i++) + { + max_successors = 0; + for (e = BASIC_BLOCK (i)->succ; e; e = e->succ_next) + max_successors++; + + dfst[i].node + = (max_successors + ? (struct dfst_node **) xcalloc (max_successors, + sizeof (struct dfst_node *)) + : NULL); + } + + /* Allocate bitmap to track nodes that have been visited. */ + visited = sbitmap_alloc (n_basic_blocks); + + /* None of the nodes in the CFG have been visited yet. */ + sbitmap_zero (visited); + + /* Push the first edge on to the stack. */ + stack[sp++] = ENTRY_BLOCK_PTR->succ; + + while (sp) + { + basic_block src; + basic_block dest; + + /* Look at the edge on the top of the stack. */ + e = stack[sp - 1]; + src = e->src; + dest = e->dest; + + /* Check if the edge destination has been visited yet. */ + if (dest != EXIT_BLOCK_PTR && ! TEST_BIT (visited, dest->index)) + { + /* Mark that we have visited the destination. */ + SET_BIT (visited, dest->index); + + /* Add the destination to the preorder tree. */ + if (src != ENTRY_BLOCK_PTR) + { + dfst[src->index].node[dfst[src->index].nnodes++] + = &dfst[dest->index]; + dfst[dest->index].up = &dfst[src->index]; + } + + if (dest->succ) + /* Since the DEST node has been visited for the first + time, check its successors. */ + stack[sp++] = dest->succ; + } + + else if (e->succ_next) + stack[sp - 1] = e->succ_next; + else + sp--; + } + + free (stack); + sbitmap_free (visited); + + /* Record the preorder transversal order by + walking the tree from right to left. */ + + i = 0; + node = &dfst[0]; + pot_order[i++] = 0; + + while (node) + { + if (node->nnodes) + { + node = node->node[--node->nnodes]; + pot_order[i++] = node - dfst; + } + else + node = node->up; + } + + /* Free the tree. */ + + for (i = 0; i < n_basic_blocks; i++) + if (dfst[i].node) + free (dfst[i].node); + + free (dfst); + } + + /* Compute the depth first search order on the _reverse_ graph and + store in the array DFS_ORDER, marking the nodes visited in VISITED. + Returns the number of nodes visited. + + The computation is split into three pieces: + + flow_dfs_compute_reverse_init () creates the necessary data + structures. + + flow_dfs_compute_reverse_add_bb () adds a basic block to the data + structures. The block will start the search. + + flow_dfs_compute_reverse_execute () continues (or starts) the + search using the block on the top of the stack, stopping when the + stack is empty. + + flow_dfs_compute_reverse_finish () destroys the necessary data + structures. + + Thus, the user will probably call ..._init(), call ..._add_bb() to + add a beginning basic block to the stack, call ..._execute(), + possibly add another bb to the stack and again call ..._execute(), + ..., and finally call _finish(). */ + + /* Initialize the data structures used for depth-first search on the + reverse graph. If INITIALIZE_STACK is nonzero, the exit block is + added to the basic block stack. DATA is the current depth-first + search context. If INITIALIZE_STACK is non-zero, there is an + element on the stack. */ + + static void + flow_dfs_compute_reverse_init (data) + depth_first_search_ds data; + { + /* Allocate stack for back-tracking up CFG. */ + data->stack = (basic_block *) xmalloc ((n_basic_blocks - (INVALID_BLOCK + 1)) + * sizeof (basic_block)); + data->sp = 0; + + /* Allocate bitmap to track nodes that have been visited. */ + data->visited_blocks = sbitmap_alloc (n_basic_blocks - (INVALID_BLOCK + 1)); + + /* None of the nodes in the CFG have been visited yet. */ + sbitmap_zero (data->visited_blocks); + + return; + } + + /* Add the specified basic block to the top of the dfs data + structures. When the search continues, it will start at the + block. */ + + static void + flow_dfs_compute_reverse_add_bb (data, bb) + depth_first_search_ds data; + basic_block bb; + { + data->stack[data->sp++] = bb; + SET_BIT (data->visited_blocks, bb->index - (INVALID_BLOCK + 1)); + } + + /* Continue the depth-first search through the reverse graph starting with the + block at the stack's top and ending when the stack is empty. Visited nodes + are marked. Returns an unvisited basic block, or NULL if there is none + available. */ + + static basic_block + flow_dfs_compute_reverse_execute (data) + depth_first_search_ds data; + { + basic_block bb; + edge e; + int i; + + while (data->sp > 0) + { + bb = data->stack[--data->sp]; + + /* Perform depth-first search on adjacent vertices. */ + for (e = bb->pred; e; e = e->pred_next) + if (!TEST_BIT (data->visited_blocks, + e->src->index - (INVALID_BLOCK + 1))) + flow_dfs_compute_reverse_add_bb (data, e->src); + } + + /* Determine if there are unvisited basic blocks. */ + for (i = n_basic_blocks - (INVALID_BLOCK + 1); --i >= 0; ) + if (!TEST_BIT (data->visited_blocks, i)) + return BASIC_BLOCK (i + (INVALID_BLOCK + 1)); + + return NULL; + } + + /* Destroy the data structures needed for depth-first search on the + reverse graph. */ + + static void + flow_dfs_compute_reverse_finish (data) + depth_first_search_ds data; + { + free (data->stack); + sbitmap_free (data->visited_blocks); + } diff -Nrc3pad gcc-3.0.4/gcc/cfgbuild.c gcc-3.1/gcc/cfgbuild.c *** gcc-3.0.4/gcc/cfgbuild.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/cfgbuild.c Sat Dec 22 15:51:07 2001 *************** *** 0 **** --- 1,882 ---- + /* Control flow graph building code for GNU compiler. + Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, + 1999, 2000, 2001 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2, or (at your option) any later + version. + + GCC is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to the Free + Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + + /* find_basic_blocks divides the current function's rtl into basic + blocks and constructs the CFG. The blocks are recorded in the + basic_block_info array; the CFG exists in the edge structures + referenced by the blocks. + + find_basic_blocks also finds any unreachable loops and deletes them. + + Available functionality: + - CFG construction + find_basic_blocks + - Local CFG construction + find_sub_basic_blocks */ + + #include "config.h" + #include "system.h" + #include "tree.h" + #include "rtl.h" + #include "hard-reg-set.h" + #include "basic-block.h" + #include "regs.h" + #include "flags.h" + #include "output.h" + #include "function.h" + #include "except.h" + #include "toplev.h" + #include "timevar.h" + #include "obstack.h" + + static int count_basic_blocks PARAMS ((rtx)); + static void find_basic_blocks_1 PARAMS ((rtx)); + static rtx find_label_refs PARAMS ((rtx, rtx)); + static void make_edges PARAMS ((rtx, int, int, int)); + static void make_label_edge PARAMS ((sbitmap *, basic_block, + rtx, int)); + static void make_eh_edge PARAMS ((sbitmap *, basic_block, rtx)); + static void find_bb_boundaries PARAMS ((basic_block)); + static void compute_outgoing_frequencies PARAMS ((basic_block)); + static bool inside_basic_block_p PARAMS ((rtx)); + static bool control_flow_insn_p PARAMS ((rtx)); + + /* Return true if insn is something that should be contained inside basic + block. */ + + static bool + inside_basic_block_p (insn) + rtx insn; + { + switch (GET_CODE (insn)) + { + case CODE_LABEL: + /* Avoid creating of basic block for jumptables. */ + return (NEXT_INSN (insn) == 0 + || GET_CODE (NEXT_INSN (insn)) != JUMP_INSN + || (GET_CODE (PATTERN (NEXT_INSN (insn))) != ADDR_VEC + && GET_CODE (PATTERN (NEXT_INSN (insn))) != ADDR_DIFF_VEC)); + + case JUMP_INSN: + return (GET_CODE (PATTERN (insn)) != ADDR_VEC + && GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC); + + case CALL_INSN: + case INSN: + return true; + + case BARRIER: + case NOTE: + return false; + + default: + abort (); + } + } + + /* Return true if INSN may cause control flow transfer, so it should be last in + the basic block. */ + + static bool + control_flow_insn_p (insn) + rtx insn; + { + rtx note; + + switch (GET_CODE (insn)) + { + case NOTE: + case CODE_LABEL: + return false; + + case JUMP_INSN: + /* Jump insn always causes control transfer except for tablejumps. */ + return (GET_CODE (PATTERN (insn)) != ADDR_VEC + && GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC); + + case CALL_INSN: + /* Call insn may return to the nonlocal goto handler. */ + return ((nonlocal_goto_handler_labels + && (0 == (note = find_reg_note (insn, REG_EH_REGION, + NULL_RTX)) + || INTVAL (XEXP (note, 0)) >= 0)) + /* Or may trap. */ + || can_throw_internal (insn)); + + case INSN: + return (flag_non_call_exceptions && can_throw_internal (insn)); + + case BARRIER: + /* It is nonsence to reach barrier when looking for the + end of basic block, but before dead code is eliminated + this may happen. */ + return false; + + default: + abort (); + } + } + + /* Count the basic blocks of the function. */ + + static int + count_basic_blocks (f) + rtx f; + { + int count = 0; + bool saw_insn = false; + rtx insn; + + for (insn = f; insn; insn = NEXT_INSN (insn)) + { + /* Code labels and barriers causes curent basic block to be + terminated at previous real insn. */ + if ((GET_CODE (insn) == CODE_LABEL || GET_CODE (insn) == BARRIER) + && saw_insn) + count++, saw_insn = false; + + /* Start basic block if needed. */ + if (!saw_insn && inside_basic_block_p (insn)) + saw_insn = true; + + /* Control flow insn causes current basic block to be terminated. */ + if (saw_insn && control_flow_insn_p (insn)) + count++, saw_insn = false; + } + + if (saw_insn) + count++; + + /* The rest of the compiler works a bit smoother when we don't have to + check for the edge case of do-nothing functions with no basic blocks. */ + if (count == 0) + { + emit_insn (gen_rtx_USE (VOIDmode, const0_rtx)); + count = 1; + } + + return count; + } + + /* Scan a list of insns for labels referred to other than by jumps. + This is used to scan the alternatives of a call placeholder. */ + + static rtx + find_label_refs (f, lvl) + rtx f; + rtx lvl; + { + rtx insn; + + for (insn = f; insn; insn = NEXT_INSN (insn)) + if (INSN_P (insn) && GET_CODE (insn) != JUMP_INSN) + { + rtx note; + + /* Make a list of all labels referred to other than by jumps + (which just don't have the REG_LABEL notes). + + Make a special exception for labels followed by an ADDR*VEC, + as this would be a part of the tablejump setup code. + + Make a special exception to registers loaded with label + values just before jump insns that use them. */ + + for (note = REG_NOTES (insn); note; note = XEXP (note, 1)) + if (REG_NOTE_KIND (note) == REG_LABEL) + { + rtx lab = XEXP (note, 0), next; + + if ((next = next_nonnote_insn (lab)) != NULL + && GET_CODE (next) == JUMP_INSN + && (GET_CODE (PATTERN (next)) == ADDR_VEC + || GET_CODE (PATTERN (next)) == ADDR_DIFF_VEC)) + ; + else if (GET_CODE (lab) == NOTE) + ; + else if (GET_CODE (NEXT_INSN (insn)) == JUMP_INSN + && find_reg_note (NEXT_INSN (insn), REG_LABEL, lab)) + ; + else + lvl = alloc_EXPR_LIST (0, XEXP (note, 0), lvl); + } + } + + return lvl; + } + + /* Create an edge between two basic blocks. FLAGS are auxiliary information + about the edge that is accumulated between calls. */ + + /* Create an edge from a basic block to a label. */ + + static void + make_label_edge (edge_cache, src, label, flags) + sbitmap *edge_cache; + basic_block src; + rtx label; + int flags; + { + if (GET_CODE (label) != CODE_LABEL) + abort (); + + /* If the label was never emitted, this insn is junk, but avoid a + crash trying to refer to BLOCK_FOR_INSN (label). This can happen + as a result of a syntax error and a diagnostic has already been + printed. */ + + if (INSN_UID (label) == 0) + return; + + cached_make_edge (edge_cache, src, BLOCK_FOR_INSN (label), flags); + } + + /* Create the edges generated by INSN in REGION. */ + + static void + make_eh_edge (edge_cache, src, insn) + sbitmap *edge_cache; + basic_block src; + rtx insn; + { + int is_call = GET_CODE (insn) == CALL_INSN ? EDGE_ABNORMAL_CALL : 0; + rtx handlers, i; + + handlers = reachable_handlers (insn); + + for (i = handlers; i; i = XEXP (i, 1)) + make_label_edge (edge_cache, src, XEXP (i, 0), + EDGE_ABNORMAL | EDGE_EH | is_call); + + free_INSN_LIST_list (&handlers); + } + + /* Identify the edges between basic blocks MIN to MAX. + + NONLOCAL_LABEL_LIST is a list of non-local labels in the function. Blocks + that are otherwise unreachable may be reachable with a non-local goto. + + BB_EH_END is an array indexed by basic block number in which we record + the list of exception regions active at the end of the basic block. */ + + static void + make_edges (label_value_list, min, max, update_p) + rtx label_value_list; + int min, max, update_p; + { + int i; + sbitmap *edge_cache = NULL; + + /* Assume no computed jump; revise as we create edges. */ + current_function_has_computed_jump = 0; + + /* Heavy use of computed goto in machine-generated code can lead to + nearly fully-connected CFGs. In that case we spend a significant + amount of time searching the edge lists for duplicates. */ + if (forced_labels || label_value_list) + { + edge_cache = sbitmap_vector_alloc (n_basic_blocks, n_basic_blocks); + sbitmap_vector_zero (edge_cache, n_basic_blocks); + + if (update_p) + for (i = min; i <= max; ++i) + { + edge e; + + for (e = BASIC_BLOCK (i)->succ; e ; e = e->succ_next) + if (e->dest != EXIT_BLOCK_PTR) + SET_BIT (edge_cache[i], e->dest->index); + } + } + + /* By nature of the way these get numbered, block 0 is always the entry. */ + if (min == 0) + cached_make_edge (edge_cache, ENTRY_BLOCK_PTR, BASIC_BLOCK (0), + EDGE_FALLTHRU); + + for (i = min; i <= max; ++i) + { + basic_block bb = BASIC_BLOCK (i); + rtx insn, x; + enum rtx_code code; + int force_fallthru = 0; + + if (GET_CODE (bb->head) == CODE_LABEL && LABEL_ALTERNATE_NAME (bb->head)) + cached_make_edge (NULL, ENTRY_BLOCK_PTR, bb, 0); + + /* Examine the last instruction of the block, and discover the + ways we can leave the block. */ + + insn = bb->end; + code = GET_CODE (insn); + + /* A branch. */ + if (code == JUMP_INSN) + { + rtx tmp; + + /* Recognize exception handling placeholders. */ + if (GET_CODE (PATTERN (insn)) == RESX) + make_eh_edge (edge_cache, bb, insn); + + /* Recognize a non-local goto as a branch outside the + current function. */ + else if (find_reg_note (insn, REG_NON_LOCAL_GOTO, NULL_RTX)) + ; + + /* ??? Recognize a tablejump and do the right thing. */ + else if ((tmp = JUMP_LABEL (insn)) != NULL_RTX + && (tmp = NEXT_INSN (tmp)) != NULL_RTX + && GET_CODE (tmp) == JUMP_INSN + && (GET_CODE (PATTERN (tmp)) == ADDR_VEC + || GET_CODE (PATTERN (tmp)) == ADDR_DIFF_VEC)) + { + rtvec vec; + int j; + + if (GET_CODE (PATTERN (tmp)) == ADDR_VEC) + vec = XVEC (PATTERN (tmp), 0); + else + vec = XVEC (PATTERN (tmp), 1); + + for (j = GET_NUM_ELEM (vec) - 1; j >= 0; --j) + make_label_edge (edge_cache, bb, + XEXP (RTVEC_ELT (vec, j), 0), 0); + + /* Some targets (eg, ARM) emit a conditional jump that also + contains the out-of-range target. Scan for these and + add an edge if necessary. */ + if ((tmp = single_set (insn)) != NULL + && SET_DEST (tmp) == pc_rtx + && GET_CODE (SET_SRC (tmp)) == IF_THEN_ELSE + && GET_CODE (XEXP (SET_SRC (tmp), 2)) == LABEL_REF) + make_label_edge (edge_cache, bb, + XEXP (XEXP (SET_SRC (tmp), 2), 0), 0); + + #ifdef CASE_DROPS_THROUGH + /* Silly VAXen. The ADDR_VEC is going to be in the way of + us naturally detecting fallthru into the next block. */ + force_fallthru = 1; + #endif + } + + /* If this is a computed jump, then mark it as reaching + everything on the label_value_list and forced_labels list. */ + else if (computed_jump_p (insn)) + { + current_function_has_computed_jump = 1; + + for (x = label_value_list; x; x = XEXP (x, 1)) + make_label_edge (edge_cache, bb, XEXP (x, 0), EDGE_ABNORMAL); + + for (x = forced_labels; x; x = XEXP (x, 1)) + make_label_edge (edge_cache, bb, XEXP (x, 0), EDGE_ABNORMAL); + } + + /* Returns create an exit out. */ + else if (returnjump_p (insn)) + cached_make_edge (edge_cache, bb, EXIT_BLOCK_PTR, 0); + + /* Otherwise, we have a plain conditional or unconditional jump. */ + else + { + if (! JUMP_LABEL (insn)) + abort (); + make_label_edge (edge_cache, bb, JUMP_LABEL (insn), 0); + } + } + + /* If this is a sibling call insn, then this is in effect a combined call + and return, and so we need an edge to the exit block. No need to + worry about EH edges, since we wouldn't have created the sibling call + in the first place. */ + if (code == CALL_INSN && SIBLING_CALL_P (insn)) + cached_make_edge (edge_cache, bb, EXIT_BLOCK_PTR, + EDGE_ABNORMAL | EDGE_ABNORMAL_CALL); + + /* If this is a CALL_INSN, then mark it as reaching the active EH + handler for this CALL_INSN. If we're handling non-call + exceptions then any insn can reach any of the active handlers. + Also mark the CALL_INSN as reaching any nonlocal goto handler. */ + else if (code == CALL_INSN || flag_non_call_exceptions) + { + /* Add any appropriate EH edges. */ + make_eh_edge (edge_cache, bb, insn); + + if (code == CALL_INSN && nonlocal_goto_handler_labels) + { + /* ??? This could be made smarter: in some cases it's possible + to tell that certain calls will not do a nonlocal goto. + For example, if the nested functions that do the nonlocal + gotos do not have their addresses taken, then only calls to + those functions or to other nested functions that use them + could possibly do nonlocal gotos. */ + + /* We do know that a REG_EH_REGION note with a value less + than 0 is guaranteed not to perform a non-local goto. */ + rtx note = find_reg_note (insn, REG_EH_REGION, NULL_RTX); + + if (!note || INTVAL (XEXP (note, 0)) >= 0) + for (x = nonlocal_goto_handler_labels; x; x = XEXP (x, 1)) + make_label_edge (edge_cache, bb, XEXP (x, 0), + EDGE_ABNORMAL | EDGE_ABNORMAL_CALL); + } + } + + /* Find out if we can drop through to the next block. */ + insn = next_nonnote_insn (insn); + if (!insn || (i + 1 == n_basic_blocks && force_fallthru)) + cached_make_edge (edge_cache, bb, EXIT_BLOCK_PTR, EDGE_FALLTHRU); + else if (i + 1 < n_basic_blocks) + { + rtx tmp = BLOCK_HEAD (i + 1); + if (GET_CODE (tmp) == NOTE) + tmp = next_nonnote_insn (tmp); + if (force_fallthru || insn == tmp) + cached_make_edge (edge_cache, bb, BASIC_BLOCK (i + 1), + EDGE_FALLTHRU); + } + } + + if (edge_cache) + sbitmap_vector_free (edge_cache); + } + + /* Find all basic blocks of the function whose first insn is F. + + Collect and return a list of labels whose addresses are taken. This + will be used in make_edges for use with computed gotos. */ + + static void + find_basic_blocks_1 (f) + rtx f; + { + rtx insn, next; + int i = 0; + rtx bb_note = NULL_RTX; + rtx lvl = NULL_RTX; + rtx trll = NULL_RTX; + rtx head = NULL_RTX; + rtx end = NULL_RTX; + + /* We process the instructions in a slightly different way than we did + previously. This is so that we see a NOTE_BASIC_BLOCK after we have + closed out the previous block, so that it gets attached at the proper + place. Since this form should be equivalent to the previous, + count_basic_blocks continues to use the old form as a check. */ + + for (insn = f; insn; insn = next) + { + enum rtx_code code = GET_CODE (insn); + + next = NEXT_INSN (insn); + + if ((GET_CODE (insn) == CODE_LABEL || GET_CODE (insn) == BARRIER) + && head) + { + create_basic_block_structure (i++, head, end, bb_note); + head = end = NULL_RTX; + bb_note = NULL_RTX; + } + + if (inside_basic_block_p (insn)) + { + if (head == NULL_RTX) + head = insn; + end = insn; + } + + if (head && control_flow_insn_p (insn)) + { + create_basic_block_structure (i++, head, end, bb_note); + head = end = NULL_RTX; + bb_note = NULL_RTX; + } + + switch (code) + { + case NOTE: + { + int kind = NOTE_LINE_NUMBER (insn); + + /* Look for basic block notes with which to keep the + basic_block_info pointers stable. Unthread the note now; + we'll put it back at the right place in create_basic_block. + Or not at all if we've already found a note in this block. */ + if (kind == NOTE_INSN_BASIC_BLOCK) + { + if (bb_note == NULL_RTX) + bb_note = insn; + else + next = delete_insn (insn); + } + break; + } + + case CODE_LABEL: + case JUMP_INSN: + case INSN: + case BARRIER: + break; + + case CALL_INSN: + if (GET_CODE (PATTERN (insn)) == CALL_PLACEHOLDER) + { + /* Scan each of the alternatives for label refs. */ + lvl = find_label_refs (XEXP (PATTERN (insn), 0), lvl); + lvl = find_label_refs (XEXP (PATTERN (insn), 1), lvl); + lvl = find_label_refs (XEXP (PATTERN (insn), 2), lvl); + /* Record its tail recursion label, if any. */ + if (XEXP (PATTERN (insn), 3) != NULL_RTX) + trll = alloc_EXPR_LIST (0, XEXP (PATTERN (insn), 3), trll); + } + break; + + default: + abort (); + } + + if (GET_CODE (insn) == INSN || GET_CODE (insn) == CALL_INSN) + { + rtx note; + + /* Make a list of all labels referred to other than by jumps. + + Make a special exception for labels followed by an ADDR*VEC, + as this would be a part of the tablejump setup code. + + Make a special exception to registers loaded with label + values just before jump insns that use them. */ + + for (note = REG_NOTES (insn); note; note = XEXP (note, 1)) + if (REG_NOTE_KIND (note) == REG_LABEL) + { + rtx lab = XEXP (note, 0), next; + + if ((next = next_nonnote_insn (lab)) != NULL + && GET_CODE (next) == JUMP_INSN + && (GET_CODE (PATTERN (next)) == ADDR_VEC + || GET_CODE (PATTERN (next)) == ADDR_DIFF_VEC)) + ; + else if (GET_CODE (lab) == NOTE) + ; + else if (GET_CODE (NEXT_INSN (insn)) == JUMP_INSN + && find_reg_note (NEXT_INSN (insn), REG_LABEL, lab)) + ; + else + lvl = alloc_EXPR_LIST (0, XEXP (note, 0), lvl); + } + } + } + + if (head != NULL_RTX) + create_basic_block_structure (i++, head, end, bb_note); + else if (bb_note) + delete_insn (bb_note); + + if (i != n_basic_blocks) + abort (); + + label_value_list = lvl; + tail_recursion_label_list = trll; + } + + + /* Find basic blocks of the current function. + F is the first insn of the function and NREGS the number of register + numbers in use. */ + + void + find_basic_blocks (f, nregs, file) + rtx f; + int nregs ATTRIBUTE_UNUSED; + FILE *file ATTRIBUTE_UNUSED; + { + int max_uid; + timevar_push (TV_CFG); + + basic_block_for_insn = 0; + + /* Flush out existing data. */ + if (basic_block_info != NULL) + { + int i; + + clear_edges (); + + /* Clear bb->aux on all extant basic blocks. We'll use this as a + tag for reuse during create_basic_block, just in case some pass + copies around basic block notes improperly. */ + for (i = 0; i < n_basic_blocks; ++i) + BASIC_BLOCK (i)->aux = NULL; + + VARRAY_FREE (basic_block_info); + } + + n_basic_blocks = count_basic_blocks (f); + + /* Size the basic block table. The actual structures will be allocated + by find_basic_blocks_1, since we want to keep the structure pointers + stable across calls to find_basic_blocks. */ + /* ??? This whole issue would be much simpler if we called find_basic_blocks + exactly once, and thereafter we don't have a single long chain of + instructions at all until close to the end of compilation when we + actually lay them out. */ + + VARRAY_BB_INIT (basic_block_info, n_basic_blocks, "basic_block_info"); + + find_basic_blocks_1 (f); + + /* Record the block to which an insn belongs. */ + /* ??? This should be done another way, by which (perhaps) a label is + tagged directly with the basic block that it starts. It is used for + more than that currently, but IMO that is the only valid use. */ + + max_uid = get_max_uid (); + #ifdef AUTO_INC_DEC + /* Leave space for insns life_analysis makes in some cases for auto-inc. + These cases are rare, so we don't need too much space. */ + max_uid += max_uid / 10; + #endif + + compute_bb_for_insn (max_uid); + + /* Discover the edges of our cfg. */ + make_edges (label_value_list, 0, n_basic_blocks - 1, 0); + + /* Do very simple cleanup now, for the benefit of code that runs between + here and cleanup_cfg, e.g. thread_prologue_and_epilogue_insns. */ + tidy_fallthru_edges (); + + #ifdef ENABLE_CHECKING + verify_flow_info (); + #endif + timevar_pop (TV_CFG); + } + + /* State of basic block as seen by find_sub_basic_blocks. */ + enum state {BLOCK_NEW = 0, BLOCK_ORIGINAL, BLOCK_TO_SPLIT}; + + #define STATE(BB) (enum state) ((size_t) (BB)->aux) + #define SET_STATE(BB, STATE) ((BB)->aux = (void *) (size_t) (STATE)) + + /* Scan basic block BB for possible BB boundaries inside the block + and create new basic blocks in the progress. */ + + static void + find_bb_boundaries (bb) + basic_block bb; + { + rtx insn = bb->head; + rtx end = bb->end; + rtx flow_transfer_insn = NULL_RTX; + edge fallthru = NULL; + + if (insn == bb->end) + return; + + if (GET_CODE (insn) == CODE_LABEL) + insn = NEXT_INSN (insn); + + /* Scan insn chain and try to find new basic block boundaries. */ + while (1) + { + enum rtx_code code = GET_CODE (insn); + + /* On code label, split current basic block. */ + if (code == CODE_LABEL) + { + fallthru = split_block (bb, PREV_INSN (insn)); + if (flow_transfer_insn) + bb->end = flow_transfer_insn; + + bb = fallthru->dest; + remove_edge (fallthru); + flow_transfer_insn = NULL_RTX; + if (LABEL_ALTERNATE_NAME (insn)) + make_edge (ENTRY_BLOCK_PTR, bb, 0); + } + + /* In case we've previously seen an insn that effects a control + flow transfer, split the block. */ + if (flow_transfer_insn && inside_basic_block_p (insn)) + { + fallthru = split_block (bb, PREV_INSN (insn)); + bb->end = flow_transfer_insn; + bb = fallthru->dest; + remove_edge (fallthru); + flow_transfer_insn = NULL_RTX; + } + + if (control_flow_insn_p (insn)) + flow_transfer_insn = insn; + if (insn == end) + break; + insn = NEXT_INSN (insn); + } + + /* In case expander replaced normal insn by sequence terminating by + return and barrier, or possibly other sequence not behaving like + ordinary jump, we need to take care and move basic block boundary. */ + if (flow_transfer_insn) + bb->end = flow_transfer_insn; + + /* We've possibly replaced the conditional jump by conditional jump + followed by cleanup at fallthru edge, so the outgoing edges may + be dead. */ + purge_dead_edges (bb); + } + + /* Assume that frequency of basic block B is known. Compute frequencies + and probabilities of outgoing edges. */ + + static void + compute_outgoing_frequencies (b) + basic_block b; + { + edge e, f; + + if (b->succ && b->succ->succ_next && !b->succ->succ_next->succ_next) + { + rtx note = find_reg_note (b->end, REG_BR_PROB, NULL); + int probability; + + if (!note) + return; + + probability = INTVAL (XEXP (find_reg_note (b->end, + REG_BR_PROB, NULL), + 0)); + e = BRANCH_EDGE (b); + e->probability = probability; + e->count = ((b->count * probability + REG_BR_PROB_BASE / 2) + / REG_BR_PROB_BASE); + f = FALLTHRU_EDGE (b); + f->probability = REG_BR_PROB_BASE - probability; + f->count = b->count - e->count; + } + + if (b->succ && !b->succ->succ_next) + { + e = b->succ; + e->probability = REG_BR_PROB_BASE; + e->count = b->count; + } + } + + /* Assume that someone emitted code with control flow instructions to the + basic block. Update the data structure. */ + + void + find_many_sub_basic_blocks (blocks) + sbitmap blocks; + { + int i; + int min, max; + + for (i = 0; i < n_basic_blocks; i++) + SET_STATE (BASIC_BLOCK (i), + TEST_BIT (blocks, i) ? BLOCK_TO_SPLIT : BLOCK_ORIGINAL); + + for (i = 0; i < n_basic_blocks; i++) + if (STATE (BASIC_BLOCK (i)) == BLOCK_TO_SPLIT) + find_bb_boundaries (BASIC_BLOCK (i)); + + for (i = 0; i < n_basic_blocks; i++) + if (STATE (BASIC_BLOCK (i)) != BLOCK_ORIGINAL) + break; + + min = max = i; + for (; i < n_basic_blocks; i++) + if (STATE (BASIC_BLOCK (i)) != BLOCK_ORIGINAL) + max = i; + + /* Now re-scan and wire in all edges. This expect simple (conditional) + jumps at the end of each new basic blocks. */ + make_edges (NULL, min, max, 1); + + /* Update branch probabilities. Expect only (un)conditional jumps + to be created with only the forward edges. */ + for (i = min; i <= max; i++) + { + edge e; + basic_block b = BASIC_BLOCK (i); + + if (STATE (b) == BLOCK_ORIGINAL) + continue; + if (STATE (b) == BLOCK_NEW) + { + b->count = 0; + b->frequency = 0; + for (e = b->pred; e; e=e->pred_next) + { + b->count += e->count; + b->frequency += EDGE_FREQUENCY (e); + } + } + + compute_outgoing_frequencies (b); + } + + for (i = 0; i < n_basic_blocks; i++) + SET_STATE (BASIC_BLOCK (i), 0); + } + + /* Like above but for single basic block only. */ + + void + find_sub_basic_blocks (bb) + basic_block bb; + { + int i; + int min, max; + basic_block next = (bb->index == n_basic_blocks - 1 + ? NULL : BASIC_BLOCK (bb->index + 1)); + + min = bb->index; + find_bb_boundaries (bb); + max = (next ? next->index : n_basic_blocks) - 1; + + /* Now re-scan and wire in all edges. This expect simple (conditional) + jumps at the end of each new basic blocks. */ + make_edges (NULL, min, max, 1); + + /* Update branch probabilities. Expect only (un)conditional jumps + to be created with only the forward edges. */ + for (i = min; i <= max; i++) + { + edge e; + basic_block b = BASIC_BLOCK (i); + + if (i != min) + { + b->count = 0; + b->frequency = 0; + for (e = b->pred; e; e=e->pred_next) + { + b->count += e->count; + b->frequency += EDGE_FREQUENCY (e); + } + } + + compute_outgoing_frequencies (b); + } + } diff -Nrc3pad gcc-3.0.4/gcc/cfgcleanup.c gcc-3.1/gcc/cfgcleanup.c *** gcc-3.0.4/gcc/cfgcleanup.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/cfgcleanup.c Wed Apr 10 00:18:53 2002 *************** *** 0 **** --- 1,1784 ---- + /* Control flow optimization code for GNU compiler. + Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, + 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2, or (at your option) any later + version. + + GCC is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to the Free + Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + + /* This file contains optimizer of the control flow. The main entrypoint is + cleanup_cfg. Following optimizations are performed: + + - Unreachable blocks removal + - Edge forwarding (edge to the forwarder block is forwarded to it's + successor. Simplification of the branch instruction is performed by + underlying infrastructure so branch can be converted to simplejump or + eliminated). + - Cross jumping (tail merging) + - Conditional jump-around-simplejump simplification + - Basic block merging. */ + + #include "config.h" + #include "system.h" + #include "rtl.h" + #include "hard-reg-set.h" + #include "basic-block.h" + #include "timevar.h" + #include "output.h" + #include "insn-config.h" + #include "flags.h" + #include "recog.h" + #include "toplev.h" + #include "cselib.h" + #include "tm_p.h" + #include "target.h" + + #include "obstack.h" + + /* cleanup_cfg maintains following flags for each basic block. */ + + enum bb_flags + { + /* Set if life info needs to be recomputed for given BB. */ + BB_UPDATE_LIFE = 1, + /* Set if BB is the forwarder block to avoid too many + forwarder_block_p calls. */ + BB_FORWARDER_BLOCK = 2 + }; + + #define BB_FLAGS(BB) (enum bb_flags) (BB)->aux + #define BB_SET_FLAG(BB, FLAG) \ + (BB)->aux = (void *) (long) ((enum bb_flags) (BB)->aux | (FLAG)) + #define BB_CLEAR_FLAG(BB, FLAG) \ + (BB)->aux = (void *) (long) ((enum bb_flags) (BB)->aux & ~(FLAG)) + + #define FORWARDER_BLOCK_P(BB) (BB_FLAGS (BB) & BB_FORWARDER_BLOCK) + + static bool try_crossjump_to_edge PARAMS ((int, edge, edge)); + static bool try_crossjump_bb PARAMS ((int, basic_block)); + static bool outgoing_edges_match PARAMS ((int, + basic_block, basic_block)); + static int flow_find_cross_jump PARAMS ((int, basic_block, basic_block, + rtx *, rtx *)); + static bool insns_match_p PARAMS ((int, rtx, rtx)); + + static bool delete_unreachable_blocks PARAMS ((void)); + static bool label_is_jump_target_p PARAMS ((rtx, rtx)); + static bool tail_recursion_label_p PARAMS ((rtx)); + static void merge_blocks_move_predecessor_nojumps PARAMS ((basic_block, + basic_block)); + static void merge_blocks_move_successor_nojumps PARAMS ((basic_block, + basic_block)); + static bool merge_blocks PARAMS ((edge,basic_block,basic_block, + int)); + static bool try_optimize_cfg PARAMS ((int)); + static bool try_simplify_condjump PARAMS ((basic_block)); + static bool try_forward_edges PARAMS ((int, basic_block)); + static edge thread_jump PARAMS ((int, edge, basic_block)); + static bool mark_effect PARAMS ((rtx, bitmap)); + static void notice_new_block PARAMS ((basic_block)); + static void update_forwarder_flag PARAMS ((basic_block)); + + /* Set flags for newly created block. */ + + static void + notice_new_block (bb) + basic_block bb; + { + if (!bb) + return; + + BB_SET_FLAG (bb, BB_UPDATE_LIFE); + if (forwarder_block_p (bb)) + BB_SET_FLAG (bb, BB_FORWARDER_BLOCK); + } + + /* Recompute forwarder flag after block has been modified. */ + + static void + update_forwarder_flag (bb) + basic_block bb; + { + if (forwarder_block_p (bb)) + BB_SET_FLAG (bb, BB_FORWARDER_BLOCK); + else + BB_CLEAR_FLAG (bb, BB_FORWARDER_BLOCK); + } + + /* Simplify a conditional jump around an unconditional jump. + Return true if something changed. */ + + static bool + try_simplify_condjump (cbranch_block) + basic_block cbranch_block; + { + basic_block jump_block, jump_dest_block, cbranch_dest_block; + edge cbranch_jump_edge, cbranch_fallthru_edge; + rtx cbranch_insn; + + /* Verify that there are exactly two successors. */ + if (!cbranch_block->succ + || !cbranch_block->succ->succ_next + || cbranch_block->succ->succ_next->succ_next) + return false; + + /* Verify that we've got a normal conditional branch at the end + of the block. */ + cbranch_insn = cbranch_block->end; + if (!any_condjump_p (cbranch_insn)) + return false; + + cbranch_fallthru_edge = FALLTHRU_EDGE (cbranch_block); + cbranch_jump_edge = BRANCH_EDGE (cbranch_block); + + /* The next block must not have multiple predecessors, must not + be the last block in the function, and must contain just the + unconditional jump. */ + jump_block = cbranch_fallthru_edge->dest; + if (jump_block->pred->pred_next + || jump_block->index == n_basic_blocks - 1 + || !FORWARDER_BLOCK_P (jump_block)) + return false; + jump_dest_block = jump_block->succ->dest; + + /* The conditional branch must target the block after the + unconditional branch. */ + cbranch_dest_block = cbranch_jump_edge->dest; + + if (!can_fallthru (jump_block, cbranch_dest_block)) + return false; + + /* Invert the conditional branch. */ + if (!invert_jump (cbranch_insn, block_label (jump_dest_block), 0)) + return false; + + if (rtl_dump_file) + fprintf (rtl_dump_file, "Simplifying condjump %i around jump %i\n", + INSN_UID (cbranch_insn), INSN_UID (jump_block->end)); + + /* Success. Update the CFG to match. Note that after this point + the edge variable names appear backwards; the redirection is done + this way to preserve edge profile data. */ + cbranch_jump_edge = redirect_edge_succ_nodup (cbranch_jump_edge, + cbranch_dest_block); + cbranch_fallthru_edge = redirect_edge_succ_nodup (cbranch_fallthru_edge, + jump_dest_block); + cbranch_jump_edge->flags |= EDGE_FALLTHRU; + cbranch_fallthru_edge->flags &= ~EDGE_FALLTHRU; + update_br_prob_note (cbranch_block); + + /* Delete the block with the unconditional jump, and clean up the mess. */ + flow_delete_block (jump_block); + tidy_fallthru_edge (cbranch_jump_edge, cbranch_block, cbranch_dest_block); + + return true; + } + + /* Attempt to prove that operation is NOOP using CSElib or mark the effect + on register. Used by jump threading. */ + + static bool + mark_effect (exp, nonequal) + rtx exp; + regset nonequal; + { + int regno; + rtx dest; + switch (GET_CODE (exp)) + { + /* In case we do clobber the register, mark it as equal, as we know the + value is dead so it don't have to match. */ + case CLOBBER: + if (REG_P (XEXP (exp, 0))) + { + dest = XEXP (exp, 0); + regno = REGNO (dest); + CLEAR_REGNO_REG_SET (nonequal, regno); + if (regno < FIRST_PSEUDO_REGISTER) + { + int n = HARD_REGNO_NREGS (regno, GET_MODE (dest)); + while (--n > 0) + CLEAR_REGNO_REG_SET (nonequal, regno + n); + } + } + return false; + + case SET: + if (rtx_equal_for_cselib_p (SET_DEST (exp), SET_SRC (exp))) + return false; + dest = SET_DEST (exp); + if (dest == pc_rtx) + return false; + if (!REG_P (dest)) + return true; + regno = REGNO (dest); + SET_REGNO_REG_SET (nonequal, regno); + if (regno < FIRST_PSEUDO_REGISTER) + { + int n = HARD_REGNO_NREGS (regno, GET_MODE (dest)); + while (--n > 0) + SET_REGNO_REG_SET (nonequal, regno + n); + } + return false; + + default: + return false; + } + } + /* Attempt to prove that the basic block B will have no side effects and + allways continues in the same edge if reached via E. Return the edge + if exist, NULL otherwise. */ + + static edge + thread_jump (mode, e, b) + int mode; + edge e; + basic_block b; + { + rtx set1, set2, cond1, cond2, insn; + enum rtx_code code1, code2, reversed_code2; + bool reverse1 = false; + int i; + regset nonequal; + bool failed = false; + + /* At the moment, we do handle only conditional jumps, but later we may + want to extend this code to tablejumps and others. */ + if (!e->src->succ->succ_next || e->src->succ->succ_next->succ_next) + return NULL; + if (!b->succ || !b->succ->succ_next || b->succ->succ_next->succ_next) + return NULL; + + /* Second branch must end with onlyjump, as we will eliminate the jump. */ + if (!any_condjump_p (e->src->end) || !any_condjump_p (b->end) + || !onlyjump_p (b->end)) + return NULL; + + set1 = pc_set (e->src->end); + set2 = pc_set (b->end); + if (((e->flags & EDGE_FALLTHRU) != 0) + != (XEXP (SET_SRC (set1), 1) == pc_rtx)) + reverse1 = true; + + cond1 = XEXP (SET_SRC (set1), 0); + cond2 = XEXP (SET_SRC (set2), 0); + if (reverse1) + code1 = reversed_comparison_code (cond1, e->src->end); + else + code1 = GET_CODE (cond1); + + code2 = GET_CODE (cond2); + reversed_code2 = reversed_comparison_code (cond2, b->end); + + if (!comparison_dominates_p (code1, code2) + && !comparison_dominates_p (code1, reversed_code2)) + return NULL; + + /* Ensure that the comparison operators are equivalent. + ??? This is far too pesimistic. We should allow swapped operands, + different CCmodes, or for example comparisons for interval, that + dominate even when operands are not equivalent. */ + if (!rtx_equal_p (XEXP (cond1, 0), XEXP (cond2, 0)) + || !rtx_equal_p (XEXP (cond1, 1), XEXP (cond2, 1))) + return NULL; + + /* Short circuit cases where block B contains some side effects, as we can't + safely bypass it. */ + for (insn = NEXT_INSN (b->head); insn != NEXT_INSN (b->end); + insn = NEXT_INSN (insn)) + if (INSN_P (insn) && side_effects_p (PATTERN (insn))) + return NULL; + + cselib_init (); + + /* First process all values computed in the source basic block. */ + for (insn = NEXT_INSN (e->src->head); insn != NEXT_INSN (e->src->end); + insn = NEXT_INSN (insn)) + if (INSN_P (insn)) + cselib_process_insn (insn); + + nonequal = BITMAP_XMALLOC(); + CLEAR_REG_SET (nonequal); + + /* Now assume that we've continued by the edge E to B and continue + processing as if it were same basic block. + Our goal is to prove that whole block is an NOOP. */ + + for (insn = NEXT_INSN (b->head); insn != NEXT_INSN (b->end) && !failed; + insn = NEXT_INSN (insn)) + { + if (INSN_P (insn)) + { + rtx pat = PATTERN (insn); + + if (GET_CODE (pat) == PARALLEL) + { + for (i = 0; i < XVECLEN (pat, 0); i++) + failed |= mark_effect (XVECEXP (pat, 0, i), nonequal); + } + else + failed |= mark_effect (pat, nonequal); + } + + cselib_process_insn (insn); + } + + /* Later we should clear nonequal of dead registers. So far we don't + have life information in cfg_cleanup. */ + if (failed) + goto failed_exit; + + /* In case liveness information is available, we need to prove equivalence + only of the live values. */ + if (mode & CLEANUP_UPDATE_LIFE) + AND_REG_SET (nonequal, b->global_live_at_end); + + EXECUTE_IF_SET_IN_REG_SET (nonequal, 0, i, goto failed_exit;); + + BITMAP_XFREE (nonequal); + cselib_finish (); + if ((comparison_dominates_p (code1, code2) != 0) + != (XEXP (SET_SRC (set2), 1) == pc_rtx)) + return BRANCH_EDGE (b); + else + return FALLTHRU_EDGE (b); + + failed_exit: + BITMAP_XFREE (nonequal); + cselib_finish (); + return NULL; + } + + /* Attempt to forward edges leaving basic block B. + Return true if successful. */ + + static bool + try_forward_edges (mode, b) + basic_block b; + int mode; + { + bool changed = false; + edge e, next, *threaded_edges = NULL; + + for (e = b->succ; e; e = next) + { + basic_block target, first; + int counter; + bool threaded = false; + int nthreaded_edges = 0; + + next = e->succ_next; + + /* Skip complex edges because we don't know how to update them. + + Still handle fallthru edges, as we can succeed to forward fallthru + edge to the same place as the branch edge of conditional branch + and turn conditional branch to an unconditional branch. */ + if (e->flags & EDGE_COMPLEX) + continue; + + target = first = e->dest; + counter = 0; + + while (counter < n_basic_blocks) + { + basic_block new_target = NULL; + bool new_target_threaded = false; + + if (FORWARDER_BLOCK_P (target) + && target->succ->dest != EXIT_BLOCK_PTR) + { + /* Bypass trivial infinite loops. */ + if (target == target->succ->dest) + counter = n_basic_blocks; + new_target = target->succ->dest; + } + + /* Allow to thread only over one edge at time to simplify updating + of probabilities. */ + else if (mode & CLEANUP_THREADING) + { + edge t = thread_jump (mode, e, target); + if (t) + { + if (!threaded_edges) + threaded_edges = xmalloc (sizeof (*threaded_edges) + * n_basic_blocks); + else + { + int i; + + /* Detect an infinite loop across blocks not + including the start block. */ + for (i = 0; i < nthreaded_edges; ++i) + if (threaded_edges[i] == t) + break; + if (i < nthreaded_edges) + { + counter = n_basic_blocks; + break; + } + } + + /* Detect an infinite loop across the start block. */ + if (t->dest == b) + break; + + if (nthreaded_edges >= n_basic_blocks) + abort (); + threaded_edges[nthreaded_edges++] = t; + + new_target = t->dest; + new_target_threaded = true; + } + } + + if (!new_target) + break; + + /* Avoid killing of loop pre-headers, as it is the place loop + optimizer wants to hoist code to. + + For fallthru forwarders, the LOOP_BEG note must appear between + the header of block and CODE_LABEL of the loop, for non forwarders + it must appear before the JUMP_INSN. */ + if (mode & CLEANUP_PRE_LOOP) + { + rtx insn = (target->succ->flags & EDGE_FALLTHRU + ? target->head : prev_nonnote_insn (target->end)); + + if (GET_CODE (insn) != NOTE) + insn = NEXT_INSN (insn); + + for (; insn && GET_CODE (insn) != CODE_LABEL && !INSN_P (insn); + insn = NEXT_INSN (insn)) + if (GET_CODE (insn) == NOTE + && NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG) + break; + + if (GET_CODE (insn) == NOTE) + break; + } + + counter++; + target = new_target; + threaded |= new_target_threaded; + } + + if (counter >= n_basic_blocks) + { + if (rtl_dump_file) + fprintf (rtl_dump_file, "Infinite loop in BB %i.\n", + target->index); + } + else if (target == first) + ; /* We didn't do anything. */ + else + { + /* Save the values now, as the edge may get removed. */ + gcov_type edge_count = e->count; + int edge_probability = e->probability; + int edge_frequency; + int n = 0; + + /* Don't force if target is exit block. */ + if (threaded && target != EXIT_BLOCK_PTR) + { + notice_new_block (redirect_edge_and_branch_force (e, target)); + if (rtl_dump_file) + fprintf (rtl_dump_file, "Conditionals threaded.\n"); + } + else if (!redirect_edge_and_branch (e, target)) + { + if (rtl_dump_file) + fprintf (rtl_dump_file, + "Forwarding edge %i->%i to %i failed.\n", + b->index, e->dest->index, target->index); + continue; + } + + /* We successfully forwarded the edge. Now update profile + data: for each edge we traversed in the chain, remove + the original edge's execution count. */ + edge_frequency = ((edge_probability * b->frequency + + REG_BR_PROB_BASE / 2) + / REG_BR_PROB_BASE); + + if (!FORWARDER_BLOCK_P (b) && forwarder_block_p (b)) + BB_SET_FLAG (b, BB_FORWARDER_BLOCK); + BB_SET_FLAG (b, BB_UPDATE_LIFE); + + do + { + edge t; + + first->count -= edge_count; + if (first->count < 0) + first->count = 0; + first->frequency -= edge_frequency; + if (first->frequency < 0) + first->frequency = 0; + if (first->succ->succ_next) + { + edge e; + int prob; + if (n >= nthreaded_edges) + abort (); + t = threaded_edges [n++]; + if (t->src != first) + abort (); + if (first->frequency) + prob = edge_frequency * REG_BR_PROB_BASE / first->frequency; + else + prob = 0; + if (prob > t->probability) + prob = t->probability; + t->probability -= prob; + prob = REG_BR_PROB_BASE - prob; + if (prob <= 0) + { + first->succ->probability = REG_BR_PROB_BASE; + first->succ->succ_next->probability = 0; + } + else + for (e = first->succ; e; e = e->succ_next) + e->probability = ((e->probability * REG_BR_PROB_BASE) + / (double) prob); + update_br_prob_note (first); + } + else + { + /* It is possible that as the result of + threading we've removed edge as it is + threaded to the fallthru edge. Avoid + getting out of sync. */ + if (n < nthreaded_edges + && first == threaded_edges [n]->src) + n++; + t = first->succ; + } + + t->count -= edge_count; + if (t->count < 0) + t->count = 0; + first = t->dest; + } + while (first != target); + + changed = true; + } + } + + if (threaded_edges) + free (threaded_edges); + return changed; + } + + /* Return true if LABEL is a target of JUMP_INSN. This applies only + to non-complex jumps. That is, direct unconditional, conditional, + and tablejumps, but not computed jumps or returns. It also does + not apply to the fallthru case of a conditional jump. */ + + static bool + label_is_jump_target_p (label, jump_insn) + rtx label, jump_insn; + { + rtx tmp = JUMP_LABEL (jump_insn); + + if (label == tmp) + return true; + + if (tmp != NULL_RTX + && (tmp = NEXT_INSN (tmp)) != NULL_RTX + && GET_CODE (tmp) == JUMP_INSN + && (tmp = PATTERN (tmp), + GET_CODE (tmp) == ADDR_VEC + || GET_CODE (tmp) == ADDR_DIFF_VEC)) + { + rtvec vec = XVEC (tmp, GET_CODE (tmp) == ADDR_DIFF_VEC); + int i, veclen = GET_NUM_ELEM (vec); + + for (i = 0; i < veclen; ++i) + if (XEXP (RTVEC_ELT (vec, i), 0) == label) + return true; + } + + return false; + } + + /* Return true if LABEL is used for tail recursion. */ + + static bool + tail_recursion_label_p (label) + rtx label; + { + rtx x; + + for (x = tail_recursion_label_list; x; x = XEXP (x, 1)) + if (label == XEXP (x, 0)) + return true; + + return false; + } + + /* Blocks A and B are to be merged into a single block. A has no incoming + fallthru edge, so it can be moved before B without adding or modifying + any jumps (aside from the jump from A to B). */ + + static void + merge_blocks_move_predecessor_nojumps (a, b) + basic_block a, b; + { + rtx barrier; + int index; + + barrier = next_nonnote_insn (a->end); + if (GET_CODE (barrier) != BARRIER) + abort (); + delete_insn (barrier); + + /* Move block and loop notes out of the chain so that we do not + disturb their order. + + ??? A better solution would be to squeeze out all the non-nested notes + and adjust the block trees appropriately. Even better would be to have + a tighter connection between block trees and rtl so that this is not + necessary. */ + if (squeeze_notes (&a->head, &a->end)) + abort (); + + /* Scramble the insn chain. */ + if (a->end != PREV_INSN (b->head)) + reorder_insns_nobb (a->head, a->end, PREV_INSN (b->head)); + BB_SET_FLAG (a, BB_UPDATE_LIFE); + + if (rtl_dump_file) + fprintf (rtl_dump_file, "Moved block %d before %d and merged.\n", + a->index, b->index); + + /* Swap the records for the two blocks around. Although we are deleting B, + A is now where B was and we want to compact the BB array from where + A used to be. */ + BASIC_BLOCK (a->index) = b; + BASIC_BLOCK (b->index) = a; + index = a->index; + a->index = b->index; + b->index = index; + + /* Now blocks A and B are contiguous. Merge them. */ + merge_blocks_nomove (a, b); + } + + /* Blocks A and B are to be merged into a single block. B has no outgoing + fallthru edge, so it can be moved after A without adding or modifying + any jumps (aside from the jump from A to B). */ + + static void + merge_blocks_move_successor_nojumps (a, b) + basic_block a, b; + { + rtx barrier, real_b_end; + + real_b_end = b->end; + barrier = NEXT_INSN (b->end); + + /* Recognize a jump table following block B. */ + if (barrier + && GET_CODE (barrier) == CODE_LABEL + && NEXT_INSN (barrier) + && GET_CODE (NEXT_INSN (barrier)) == JUMP_INSN + && (GET_CODE (PATTERN (NEXT_INSN (barrier))) == ADDR_VEC + || GET_CODE (PATTERN (NEXT_INSN (barrier))) == ADDR_DIFF_VEC)) + { + /* Temporarily add the table jump insn to b, so that it will also + be moved to the correct location. */ + b->end = NEXT_INSN (barrier); + barrier = NEXT_INSN (b->end); + } + + /* There had better have been a barrier there. Delete it. */ + if (barrier && GET_CODE (barrier) == BARRIER) + delete_insn (barrier); + + /* Move block and loop notes out of the chain so that we do not + disturb their order. + + ??? A better solution would be to squeeze out all the non-nested notes + and adjust the block trees appropriately. Even better would be to have + a tighter connection between block trees and rtl so that this is not + necessary. */ + if (squeeze_notes (&b->head, &b->end)) + abort (); + + /* Scramble the insn chain. */ + reorder_insns_nobb (b->head, b->end, a->end); + + /* Restore the real end of b. */ + b->end = real_b_end; + + /* Now blocks A and B are contiguous. Merge them. */ + merge_blocks_nomove (a, b); + BB_SET_FLAG (a, BB_UPDATE_LIFE); + + if (rtl_dump_file) + fprintf (rtl_dump_file, "Moved block %d after %d and merged.\n", + b->index, a->index); + } + + /* Attempt to merge basic blocks that are potentially non-adjacent. + Return true iff the attempt succeeded. */ + + static bool + merge_blocks (e, b, c, mode) + edge e; + basic_block b, c; + int mode; + { + /* If C has a tail recursion label, do not merge. There is no + edge recorded from the call_placeholder back to this label, as + that would make optimize_sibling_and_tail_recursive_calls more + complex for no gain. */ + if ((mode & CLEANUP_PRE_SIBCALL) + && GET_CODE (c->head) == CODE_LABEL + && tail_recursion_label_p (c->head)) + return false; + + /* If B has a fallthru edge to C, no need to move anything. */ + if (e->flags & EDGE_FALLTHRU) + { + int b_index = b->index, c_index = c->index; + /* We need to update liveness in case C already has broken liveness + or B ends by conditional jump to next instructions that will be + removed. */ + if ((BB_FLAGS (c) & BB_UPDATE_LIFE) + || GET_CODE (b->end) == JUMP_INSN) + BB_SET_FLAG (b, BB_UPDATE_LIFE); + merge_blocks_nomove (b, c); + update_forwarder_flag (b); + + if (rtl_dump_file) + fprintf (rtl_dump_file, "Merged %d and %d without moving.\n", + b_index, c_index); + + return true; + } + + /* Otherwise we will need to move code around. Do that only if expensive + transformations are allowed. */ + else if (mode & CLEANUP_EXPENSIVE) + { + edge tmp_edge, b_fallthru_edge; + bool c_has_outgoing_fallthru; + bool b_has_incoming_fallthru; + + /* Avoid overactive code motion, as the forwarder blocks should be + eliminated by edge redirection instead. One exception might have + been if B is a forwarder block and C has no fallthru edge, but + that should be cleaned up by bb-reorder instead. */ + if (FORWARDER_BLOCK_P (b) || FORWARDER_BLOCK_P (c)) + return false; + + /* We must make sure to not munge nesting of lexical blocks, + and loop notes. This is done by squeezing out all the notes + and leaving them there to lie. Not ideal, but functional. */ + + for (tmp_edge = c->succ; tmp_edge; tmp_edge = tmp_edge->succ_next) + if (tmp_edge->flags & EDGE_FALLTHRU) + break; + + c_has_outgoing_fallthru = (tmp_edge != NULL); + + for (tmp_edge = b->pred; tmp_edge; tmp_edge = tmp_edge->pred_next) + if (tmp_edge->flags & EDGE_FALLTHRU) + break; + + b_has_incoming_fallthru = (tmp_edge != NULL); + b_fallthru_edge = tmp_edge; + + /* Otherwise, we're going to try to move C after B. If C does + not have an outgoing fallthru, then it can be moved + immediately after B without introducing or modifying jumps. */ + if (! c_has_outgoing_fallthru) + { + merge_blocks_move_successor_nojumps (b, c); + return true; + } + + /* If B does not have an incoming fallthru, then it can be moved + immediately before C without introducing or modifying jumps. + C cannot be the first block, so we do not have to worry about + accessing a non-existent block. */ + + if (b_has_incoming_fallthru) + { + basic_block bb; + + if (b_fallthru_edge->src == ENTRY_BLOCK_PTR) + return false; + bb = force_nonfallthru (b_fallthru_edge); + if (bb) + notice_new_block (bb); + else + BB_SET_FLAG (b_fallthru_edge->src, BB_UPDATE_LIFE); + } + + merge_blocks_move_predecessor_nojumps (b, c); + return true; + } + + return false; + } + + + /* Return true if I1 and I2 are equivalent and thus can be crossjumped. */ + + static bool + insns_match_p (mode, i1, i2) + int mode ATTRIBUTE_UNUSED; + rtx i1, i2; + { + rtx p1, p2; + + /* Verify that I1 and I2 are equivalent. */ + if (GET_CODE (i1) != GET_CODE (i2)) + return false; + + p1 = PATTERN (i1); + p2 = PATTERN (i2); + + if (GET_CODE (p1) != GET_CODE (p2)) + return false; + + /* If this is a CALL_INSN, compare register usage information. + If we don't check this on stack register machines, the two + CALL_INSNs might be merged leaving reg-stack.c with mismatching + numbers of stack registers in the same basic block. + If we don't check this on machines with delay slots, a delay slot may + be filled that clobbers a parameter expected by the subroutine. + + ??? We take the simple route for now and assume that if they're + equal, they were constructed identically. */ + + if (GET_CODE (i1) == CALL_INSN + && !rtx_equal_p (CALL_INSN_FUNCTION_USAGE (i1), + CALL_INSN_FUNCTION_USAGE (i2))) + return false; + + #ifdef STACK_REGS + /* If cross_jump_death_matters is not 0, the insn's mode + indicates whether or not the insn contains any stack-like + regs. */ + + if ((mode & CLEANUP_POST_REGSTACK) && stack_regs_mentioned (i1)) + { + /* If register stack conversion has already been done, then + death notes must also be compared before it is certain that + the two instruction streams match. */ + + rtx note; + HARD_REG_SET i1_regset, i2_regset; + + CLEAR_HARD_REG_SET (i1_regset); + CLEAR_HARD_REG_SET (i2_regset); + + for (note = REG_NOTES (i1); note; note = XEXP (note, 1)) + if (REG_NOTE_KIND (note) == REG_DEAD && STACK_REG_P (XEXP (note, 0))) + SET_HARD_REG_BIT (i1_regset, REGNO (XEXP (note, 0))); + + for (note = REG_NOTES (i2); note; note = XEXP (note, 1)) + if (REG_NOTE_KIND (note) == REG_DEAD && STACK_REG_P (XEXP (note, 0))) + SET_HARD_REG_BIT (i2_regset, REGNO (XEXP (note, 0))); + + GO_IF_HARD_REG_EQUAL (i1_regset, i2_regset, done); + + return false; + + done: + ; + } + #endif + + if (reload_completed + ? ! rtx_renumbered_equal_p (p1, p2) : ! rtx_equal_p (p1, p2)) + { + /* The following code helps take care of G++ cleanups. */ + rtx equiv1 = find_reg_equal_equiv_note (i1); + rtx equiv2 = find_reg_equal_equiv_note (i2); + + if (equiv1 && equiv2 + /* If the equivalences are not to a constant, they may + reference pseudos that no longer exist, so we can't + use them. */ + && (! reload_completed + || (CONSTANT_P (XEXP (equiv1, 0)) + && rtx_equal_p (XEXP (equiv1, 0), XEXP (equiv2, 0))))) + { + rtx s1 = single_set (i1); + rtx s2 = single_set (i2); + if (s1 != 0 && s2 != 0 + && rtx_renumbered_equal_p (SET_DEST (s1), SET_DEST (s2))) + { + validate_change (i1, &SET_SRC (s1), XEXP (equiv1, 0), 1); + validate_change (i2, &SET_SRC (s2), XEXP (equiv2, 0), 1); + if (! rtx_renumbered_equal_p (p1, p2)) + cancel_changes (0); + else if (apply_change_group ()) + return true; + } + } + + return false; + } + + return true; + } + + /* Look through the insns at the end of BB1 and BB2 and find the longest + sequence that are equivalent. Store the first insns for that sequence + in *F1 and *F2 and return the sequence length. + + To simplify callers of this function, if the blocks match exactly, + store the head of the blocks in *F1 and *F2. */ + + static int + flow_find_cross_jump (mode, bb1, bb2, f1, f2) + int mode ATTRIBUTE_UNUSED; + basic_block bb1, bb2; + rtx *f1, *f2; + { + rtx i1, i2, last1, last2, afterlast1, afterlast2; + int ninsns = 0; + + /* Skip simple jumps at the end of the blocks. Complex jumps still + need to be compared for equivalence, which we'll do below. */ + + i1 = bb1->end; + last1 = afterlast1 = last2 = afterlast2 = NULL_RTX; + if (onlyjump_p (i1) + || (returnjump_p (i1) && !side_effects_p (PATTERN (i1)))) + { + last1 = i1; + i1 = PREV_INSN (i1); + } + + i2 = bb2->end; + if (onlyjump_p (i2) + || (returnjump_p (i2) && !side_effects_p (PATTERN (i2)))) + { + last2 = i2; + /* Count everything except for unconditional jump as insn. */ + if (!simplejump_p (i2) && !returnjump_p (i2) && last1) + ninsns++; + i2 = PREV_INSN (i2); + } + + while (true) + { + /* Ignore notes. */ + while (!active_insn_p (i1) && i1 != bb1->head) + i1 = PREV_INSN (i1); + + while (!active_insn_p (i2) && i2 != bb2->head) + i2 = PREV_INSN (i2); + + if (i1 == bb1->head || i2 == bb2->head) + break; + + if (!insns_match_p (mode, i1, i2)) + break; + + /* Don't begin a cross-jump with a USE or CLOBBER insn. */ + if (active_insn_p (i1)) + { + /* If the merged insns have different REG_EQUAL notes, then + remove them. */ + rtx equiv1 = find_reg_equal_equiv_note (i1); + rtx equiv2 = find_reg_equal_equiv_note (i2); + + if (equiv1 && !equiv2) + remove_note (i1, equiv1); + else if (!equiv1 && equiv2) + remove_note (i2, equiv2); + else if (equiv1 && equiv2 + && !rtx_equal_p (XEXP (equiv1, 0), XEXP (equiv2, 0))) + { + remove_note (i1, equiv1); + remove_note (i2, equiv2); + } + + afterlast1 = last1, afterlast2 = last2; + last1 = i1, last2 = i2; + ninsns++; + } + + i1 = PREV_INSN (i1); + i2 = PREV_INSN (i2); + } + + #ifdef HAVE_cc0 + /* Don't allow the insn after a compare to be shared by + cross-jumping unless the compare is also shared. */ + if (ninsns && reg_mentioned_p (cc0_rtx, last1) && ! sets_cc0_p (last1)) + last1 = afterlast1, last2 = afterlast2, ninsns--; + #endif + + /* Include preceding notes and labels in the cross-jump. One, + this may bring us to the head of the blocks as requested above. + Two, it keeps line number notes as matched as may be. */ + if (ninsns) + { + while (last1 != bb1->head && !active_insn_p (PREV_INSN (last1))) + last1 = PREV_INSN (last1); + + if (last1 != bb1->head && GET_CODE (PREV_INSN (last1)) == CODE_LABEL) + last1 = PREV_INSN (last1); + + while (last2 != bb2->head && !active_insn_p (PREV_INSN (last2))) + last2 = PREV_INSN (last2); + + if (last2 != bb2->head && GET_CODE (PREV_INSN (last2)) == CODE_LABEL) + last2 = PREV_INSN (last2); + + *f1 = last1; + *f2 = last2; + } + + return ninsns; + } + + /* Return true iff outgoing edges of BB1 and BB2 match, together with + the branch instruction. This means that if we commonize the control + flow before end of the basic block, the semantic remains unchanged. + + We may assume that there exists one edge with a common destination. */ + + static bool + outgoing_edges_match (mode, bb1, bb2) + int mode; + basic_block bb1; + basic_block bb2; + { + int nehedges1 = 0, nehedges2 = 0; + edge fallthru1 = 0, fallthru2 = 0; + edge e1, e2; + + /* If BB1 has only one successor, we may be looking at either an + unconditional jump, or a fake edge to exit. */ + if (bb1->succ && !bb1->succ->succ_next + && !(bb1->succ->flags & (EDGE_COMPLEX | EDGE_FAKE))) + return (bb2->succ && !bb2->succ->succ_next + && (bb2->succ->flags & (EDGE_COMPLEX | EDGE_FAKE)) == 0); + + /* Match conditional jumps - this may get tricky when fallthru and branch + edges are crossed. */ + if (bb1->succ + && bb1->succ->succ_next + && !bb1->succ->succ_next->succ_next + && any_condjump_p (bb1->end) + && onlyjump_p (bb1->end)) + { + edge b1, f1, b2, f2; + bool reverse, match; + rtx set1, set2, cond1, cond2; + enum rtx_code code1, code2; + + if (!bb2->succ + || !bb2->succ->succ_next + || bb2->succ->succ_next->succ_next + || !any_condjump_p (bb2->end) + || !onlyjump_p (bb2->end)) + return false; + + /* Do not crossjump across loop boundaries. This is a temporary + workaround for the common scenario in which crossjumping results + in killing the duplicated loop condition, making bb-reorder rotate + the loop incorectly, leaving an extra unconditional jump inside + the loop. + + This check should go away once bb-reorder knows how to duplicate + code in this case or rotate the loops to avoid this scenario. */ + if (bb1->loop_depth != bb2->loop_depth) + return false; + + b1 = BRANCH_EDGE (bb1); + b2 = BRANCH_EDGE (bb2); + f1 = FALLTHRU_EDGE (bb1); + f2 = FALLTHRU_EDGE (bb2); + + /* Get around possible forwarders on fallthru edges. Other cases + should be optimized out already. */ + if (FORWARDER_BLOCK_P (f1->dest)) + f1 = f1->dest->succ; + + if (FORWARDER_BLOCK_P (f2->dest)) + f2 = f2->dest->succ; + + /* To simplify use of this function, return false if there are + unneeded forwarder blocks. These will get eliminated later + during cleanup_cfg. */ + if (FORWARDER_BLOCK_P (f1->dest) + || FORWARDER_BLOCK_P (f2->dest) + || FORWARDER_BLOCK_P (b1->dest) + || FORWARDER_BLOCK_P (b2->dest)) + return false; + + if (f1->dest == f2->dest && b1->dest == b2->dest) + reverse = false; + else if (f1->dest == b2->dest && b1->dest == f2->dest) + reverse = true; + else + return false; + + set1 = pc_set (bb1->end); + set2 = pc_set (bb2->end); + if ((XEXP (SET_SRC (set1), 1) == pc_rtx) + != (XEXP (SET_SRC (set2), 1) == pc_rtx)) + reverse = !reverse; + + cond1 = XEXP (SET_SRC (set1), 0); + cond2 = XEXP (SET_SRC (set2), 0); + code1 = GET_CODE (cond1); + if (reverse) + code2 = reversed_comparison_code (cond2, bb2->end); + else + code2 = GET_CODE (cond2); + + if (code2 == UNKNOWN) + return false; + + /* Verify codes and operands match. */ + match = ((code1 == code2 + && rtx_renumbered_equal_p (XEXP (cond1, 0), XEXP (cond2, 0)) + && rtx_renumbered_equal_p (XEXP (cond1, 1), XEXP (cond2, 1))) + || (code1 == swap_condition (code2) + && rtx_renumbered_equal_p (XEXP (cond1, 1), + XEXP (cond2, 0)) + && rtx_renumbered_equal_p (XEXP (cond1, 0), + XEXP (cond2, 1)))); + + /* If we return true, we will join the blocks. Which means that + we will only have one branch prediction bit to work with. Thus + we require the existing branches to have probabilities that are + roughly similar. */ + if (match + && !optimize_size + && bb1->frequency > BB_FREQ_MAX / 1000 + && bb2->frequency > BB_FREQ_MAX / 1000) + { + int prob2; + + if (b1->dest == b2->dest) + prob2 = b2->probability; + else + /* Do not use f2 probability as f2 may be forwarded. */ + prob2 = REG_BR_PROB_BASE - b2->probability; + + /* Fail if the difference in probabilities is greater than 50%. + This rules out two well-predicted branches with opposite + outcomes. */ + if (abs (b1->probability - prob2) > REG_BR_PROB_BASE / 2) + { + if (rtl_dump_file) + fprintf (rtl_dump_file, + "Outcomes of branch in bb %i and %i differs to much (%i %i)\n", + bb1->index, bb2->index, b1->probability, prob2); + + return false; + } + } + + if (rtl_dump_file && match) + fprintf (rtl_dump_file, "Conditionals in bb %i and %i match.\n", + bb1->index, bb2->index); + + return match; + } + + /* Generic case - we are seeing an computed jump, table jump or trapping + instruction. */ + + /* First ensure that the instructions match. There may be many outgoing + edges so this test is generally cheaper. + ??? Currently the tablejumps will never match, as they do have + different tables. */ + if (!insns_match_p (mode, bb1->end, bb2->end)) + return false; + + /* Search the outgoing edges, ensure that the counts do match, find possible + fallthru and exception handling edges since these needs more + validation. */ + for (e1 = bb1->succ, e2 = bb2->succ; e1 && e2; + e1 = e1->succ_next, e2 = e2->succ_next) + { + if (e1->flags & EDGE_EH) + nehedges1++; + + if (e2->flags & EDGE_EH) + nehedges2++; + + if (e1->flags & EDGE_FALLTHRU) + fallthru1 = e1; + if (e2->flags & EDGE_FALLTHRU) + fallthru2 = e2; + } + + /* If number of edges of various types does not match, fail. */ + if (e1 || e2 + || nehedges1 != nehedges2 + || (fallthru1 != 0) != (fallthru2 != 0)) + return false; + + /* fallthru edges must be forwarded to the same destination. */ + if (fallthru1) + { + basic_block d1 = (forwarder_block_p (fallthru1->dest) + ? fallthru1->dest->succ->dest: fallthru1->dest); + basic_block d2 = (forwarder_block_p (fallthru2->dest) + ? fallthru2->dest->succ->dest: fallthru2->dest); + + if (d1 != d2) + return false; + } + + /* In case we do have EH edges, ensure we are in the same region. */ + if (nehedges1) + { + rtx n1 = find_reg_note (bb1->end, REG_EH_REGION, 0); + rtx n2 = find_reg_note (bb2->end, REG_EH_REGION, 0); + + if (XEXP (n1, 0) != XEXP (n2, 0)) + return false; + } + + /* We don't need to match the rest of edges as above checks should be enought + to ensure that they are equivalent. */ + return true; + } + + /* E1 and E2 are edges with the same destination block. Search their + predecessors for common code. If found, redirect control flow from + (maybe the middle of) E1->SRC to (maybe the middle of) E2->SRC. */ + + static bool + try_crossjump_to_edge (mode, e1, e2) + int mode; + edge e1, e2; + { + int nmatch; + basic_block src1 = e1->src, src2 = e2->src; + basic_block redirect_to; + rtx newpos1, newpos2; + edge s; + rtx last; + rtx label; + + /* Search backward through forwarder blocks. We don't need to worry + about multiple entry or chained forwarders, as they will be optimized + away. We do this to look past the unconditional jump following a + conditional jump that is required due to the current CFG shape. */ + if (src1->pred + && FORWARDER_BLOCK_P (src1)) + e1 = src1->pred, src1 = e1->src; + + if (src2->pred + && FORWARDER_BLOCK_P (src2)) + e2 = src2->pred, src2 = e2->src; + + /* Nothing to do if we reach ENTRY, or a common source block. */ + if (src1 == ENTRY_BLOCK_PTR || src2 == ENTRY_BLOCK_PTR) + return false; + if (src1 == src2) + return false; + + /* Seeing more than 1 forwarder blocks would confuse us later... */ + if (FORWARDER_BLOCK_P (e1->dest) + && FORWARDER_BLOCK_P (e1->dest->succ->dest)) + return false; + + if (FORWARDER_BLOCK_P (e2->dest) + && FORWARDER_BLOCK_P (e2->dest->succ->dest)) + return false; + + /* Likewise with dead code (possibly newly created by the other optimizations + of cfg_cleanup). */ + if (!src1->pred || !src2->pred) + return false; + + /* Look for the common insn sequence, part the first ... */ + if (!outgoing_edges_match (mode, src1, src2)) + return false; + + /* ... and part the second. */ + nmatch = flow_find_cross_jump (mode, src1, src2, &newpos1, &newpos2); + if (!nmatch) + return false; + + /* Avoid splitting if possible. */ + if (newpos2 == src2->head) + redirect_to = src2; + else + { + if (rtl_dump_file) + fprintf (rtl_dump_file, "Splitting bb %i before %i insns\n", + src2->index, nmatch); + redirect_to = split_block (src2, PREV_INSN (newpos2))->dest; + } + + if (rtl_dump_file) + fprintf (rtl_dump_file, + "Cross jumping from bb %i to bb %i; %i common insns\n", + src1->index, src2->index, nmatch); + + redirect_to->count += src1->count; + redirect_to->frequency += src1->frequency; + + /* Recompute the frequencies and counts of outgoing edges. */ + for (s = redirect_to->succ; s; s = s->succ_next) + { + edge s2; + basic_block d = s->dest; + + if (FORWARDER_BLOCK_P (d)) + d = d->succ->dest; + + for (s2 = src1->succ; ; s2 = s2->succ_next) + { + basic_block d2 = s2->dest; + if (FORWARDER_BLOCK_P (d2)) + d2 = d2->succ->dest; + if (d == d2) + break; + } + + s->count += s2->count; + + /* Take care to update possible forwarder blocks. We verified + that there is no more than one in the chain, so we can't run + into infinite loop. */ + if (FORWARDER_BLOCK_P (s->dest)) + { + s->dest->succ->count += s2->count; + s->dest->count += s2->count; + s->dest->frequency += EDGE_FREQUENCY (s); + } + + if (FORWARDER_BLOCK_P (s2->dest)) + { + s2->dest->succ->count -= s2->count; + if (s2->dest->succ->count < 0) + s2->dest->succ->count = 0; + s2->dest->count -= s2->count; + s2->dest->frequency -= EDGE_FREQUENCY (s); + if (s2->dest->frequency < 0) + s2->dest->frequency = 0; + if (s2->dest->count < 0) + s2->dest->count = 0; + } + + if (!redirect_to->frequency && !src1->frequency) + s->probability = (s->probability + s2->probability) / 2; + else + s->probability + = ((s->probability * redirect_to->frequency + + s2->probability * src1->frequency) + / (redirect_to->frequency + src1->frequency)); + } + + update_br_prob_note (redirect_to); + + /* Edit SRC1 to go to REDIRECT_TO at NEWPOS1. */ + + /* Skip possible basic block header. */ + if (GET_CODE (newpos1) == CODE_LABEL) + newpos1 = NEXT_INSN (newpos1); + + if (GET_CODE (newpos1) == NOTE) + newpos1 = NEXT_INSN (newpos1); + last = src1->end; + + /* Emit the jump insn. */ + label = block_label (redirect_to); + emit_jump_insn_after (gen_jump (label), src1->end); + JUMP_LABEL (src1->end) = label; + LABEL_NUSES (label)++; + + /* Delete the now unreachable instructions. */ + delete_insn_chain (newpos1, last); + + /* Make sure there is a barrier after the new jump. */ + last = next_nonnote_insn (src1->end); + if (!last || GET_CODE (last) != BARRIER) + emit_barrier_after (src1->end); + + /* Update CFG. */ + while (src1->succ) + remove_edge (src1->succ); + make_single_succ_edge (src1, redirect_to, 0); + + BB_SET_FLAG (src1, BB_UPDATE_LIFE); + update_forwarder_flag (src1); + + return true; + } + + /* Search the predecessors of BB for common insn sequences. When found, + share code between them by redirecting control flow. Return true if + any changes made. */ + + static bool + try_crossjump_bb (mode, bb) + int mode; + basic_block bb; + { + edge e, e2, nexte2, nexte, fallthru; + bool changed; + + /* Nothing to do if there is not at least two incoming edges. */ + if (!bb->pred || !bb->pred->pred_next) + return false; + + /* It is always cheapest to redirect a block that ends in a branch to + a block that falls through into BB, as that adds no branches to the + program. We'll try that combination first. */ + for (fallthru = bb->pred; fallthru; fallthru = fallthru->pred_next) + if (fallthru->flags & EDGE_FALLTHRU) + break; + + changed = false; + for (e = bb->pred; e; e = nexte) + { + nexte = e->pred_next; + + /* As noted above, first try with the fallthru predecessor. */ + if (fallthru) + { + /* Don't combine the fallthru edge into anything else. + If there is a match, we'll do it the other way around. */ + if (e == fallthru) + continue; + + if (try_crossjump_to_edge (mode, e, fallthru)) + { + changed = true; + nexte = bb->pred; + continue; + } + } + + /* Non-obvious work limiting check: Recognize that we're going + to call try_crossjump_bb on every basic block. So if we have + two blocks with lots of outgoing edges (a switch) and they + share lots of common destinations, then we would do the + cross-jump check once for each common destination. + + Now, if the blocks actually are cross-jump candidates, then + all of their destinations will be shared. Which means that + we only need check them for cross-jump candidacy once. We + can eliminate redundant checks of crossjump(A,B) by arbitrarily + choosing to do the check from the block for which the edge + in question is the first successor of A. */ + if (e->src->succ != e) + continue; + + for (e2 = bb->pred; e2; e2 = nexte2) + { + nexte2 = e2->pred_next; + + if (e2 == e) + continue; + + /* We've already checked the fallthru edge above. */ + if (e2 == fallthru) + continue; + + /* The "first successor" check above only prevents multiple + checks of crossjump(A,B). In order to prevent redundant + checks of crossjump(B,A), require that A be the block + with the lowest index. */ + if (e->src->index > e2->src->index) + continue; + + if (try_crossjump_to_edge (mode, e, e2)) + { + changed = true; + nexte = bb->pred; + break; + } + } + } + + return changed; + } + + /* Do simple CFG optimizations - basic block merging, simplifying of jump + instructions etc. Return nonzero if changes were made. */ + + static bool + try_optimize_cfg (mode) + int mode; + { + int i; + bool changed_overall = false; + bool changed; + int iterations = 0; + sbitmap blocks; + + if (mode & CLEANUP_CROSSJUMP) + add_noreturn_fake_exit_edges (); + + for (i = 0; i < n_basic_blocks; i++) + update_forwarder_flag (BASIC_BLOCK (i)); + + if (! (* targetm.cannot_modify_jumps_p) ()) + { + /* Attempt to merge blocks as made possible by edge removal. If + a block has only one successor, and the successor has only + one predecessor, they may be combined. */ + do + { + changed = false; + iterations++; + + if (rtl_dump_file) + fprintf (rtl_dump_file, + "\n\ntry_optimize_cfg iteration %i\n\n", + iterations); + + for (i = 0; i < n_basic_blocks;) + { + basic_block c, b = BASIC_BLOCK (i); + edge s; + bool changed_here = false; + + /* Delete trivially dead basic blocks. */ + while (b->pred == NULL) + { + c = BASIC_BLOCK (b->index - 1); + if (rtl_dump_file) + fprintf (rtl_dump_file, "Deleting block %i.\n", + b->index); + + flow_delete_block (b); + changed = true; + b = c; + } + + /* Remove code labels no longer used. Don't do this + before CALL_PLACEHOLDER is removed, as some branches + may be hidden within. */ + if (b->pred->pred_next == NULL + && (b->pred->flags & EDGE_FALLTHRU) + && !(b->pred->flags & EDGE_COMPLEX) + && GET_CODE (b->head) == CODE_LABEL + && (!(mode & CLEANUP_PRE_SIBCALL) + || !tail_recursion_label_p (b->head)) + /* If the previous block ends with a branch to this + block, we can't delete the label. Normally this + is a condjump that is yet to be simplified, but + if CASE_DROPS_THRU, this can be a tablejump with + some element going to the same place as the + default (fallthru). */ + && (b->pred->src == ENTRY_BLOCK_PTR + || GET_CODE (b->pred->src->end) != JUMP_INSN + || ! label_is_jump_target_p (b->head, + b->pred->src->end))) + { + rtx label = b->head; + + b->head = NEXT_INSN (b->head); + delete_insn_chain (label, label); + if (rtl_dump_file) + fprintf (rtl_dump_file, "Deleted label in block %i.\n", + b->index); + } + + /* If we fall through an empty block, we can remove it. */ + if (b->pred->pred_next == NULL + && (b->pred->flags & EDGE_FALLTHRU) + && GET_CODE (b->head) != CODE_LABEL + && FORWARDER_BLOCK_P (b) + /* Note that forwarder_block_p true ensures that + there is a successor for this block. */ + && (b->succ->flags & EDGE_FALLTHRU) + && n_basic_blocks > 1) + { + if (rtl_dump_file) + fprintf (rtl_dump_file, + "Deleting fallthru block %i.\n", + b->index); + + c = BASIC_BLOCK (b->index ? b->index - 1 : 1); + redirect_edge_succ_nodup (b->pred, b->succ->dest); + flow_delete_block (b); + changed = true; + b = c; + } + + /* Merge blocks. Loop because chains of blocks might be + combineable. */ + while ((s = b->succ) != NULL + && s->succ_next == NULL + && !(s->flags & EDGE_COMPLEX) + && (c = s->dest) != EXIT_BLOCK_PTR + && c->pred->pred_next == NULL + /* If the jump insn has side effects, + we can't kill the edge. */ + && (GET_CODE (b->end) != JUMP_INSN + || onlyjump_p (b->end)) + && merge_blocks (s, b, c, mode)) + changed_here = true; + + /* Simplify branch over branch. */ + if ((mode & CLEANUP_EXPENSIVE) && try_simplify_condjump (b)) + { + BB_SET_FLAG (b, BB_UPDATE_LIFE); + changed_here = true; + } + + /* If B has a single outgoing edge, but uses a + non-trivial jump instruction without side-effects, we + can either delete the jump entirely, or replace it + with a simple unconditional jump. Use + redirect_edge_and_branch to do the dirty work. */ + if (b->succ + && ! b->succ->succ_next + && b->succ->dest != EXIT_BLOCK_PTR + && onlyjump_p (b->end) + && redirect_edge_and_branch (b->succ, b->succ->dest)) + { + BB_SET_FLAG (b, BB_UPDATE_LIFE); + update_forwarder_flag (b); + changed_here = true; + } + + /* Simplify branch to branch. */ + if (try_forward_edges (mode, b)) + changed_here = true; + + /* Look for shared code between blocks. */ + if ((mode & CLEANUP_CROSSJUMP) + && try_crossjump_bb (mode, b)) + changed_here = true; + + /* Don't get confused by the index shift caused by + deleting blocks. */ + if (!changed_here) + i = b->index + 1; + else + changed = true; + } + + if ((mode & CLEANUP_CROSSJUMP) + && try_crossjump_bb (mode, EXIT_BLOCK_PTR)) + changed = true; + + #ifdef ENABLE_CHECKING + if (changed) + verify_flow_info (); + #endif + + changed_overall |= changed; + } + while (changed); + } + + if (mode & CLEANUP_CROSSJUMP) + remove_fake_edges (); + + if ((mode & CLEANUP_UPDATE_LIFE) && changed_overall) + { + bool found = 0; + + blocks = sbitmap_alloc (n_basic_blocks); + sbitmap_zero (blocks); + for (i = 0; i < n_basic_blocks; i++) + if (BB_FLAGS (BASIC_BLOCK (i)) & BB_UPDATE_LIFE) + { + found = 1; + SET_BIT (blocks, i); + } + + if (found) + update_life_info (blocks, UPDATE_LIFE_GLOBAL, + PROP_DEATH_NOTES | PROP_SCAN_DEAD_CODE + | PROP_KILL_DEAD_CODE); + sbitmap_free (blocks); + } + + for (i = 0; i < n_basic_blocks; i++) + BASIC_BLOCK (i)->aux = NULL; + + return changed_overall; + } + + /* Delete all unreachable basic blocks. */ + + static bool + delete_unreachable_blocks () + { + int i, j; + bool changed = false; + + find_unreachable_blocks (); + + /* Delete all unreachable basic blocks. Do compaction concurrently, + as otherwise we can wind up with O(N^2) behaviour here when we + have oodles of dead code. */ + + for (i = j = 0; i < n_basic_blocks; ++i) + { + basic_block b = BASIC_BLOCK (i); + + if (!(b->flags & BB_REACHABLE)) + { + flow_delete_block_noexpunge (b); + expunge_block_nocompact (b); + changed = true; + } + else + { + BASIC_BLOCK (j) = b; + b->index = j++; + } + } + n_basic_blocks = j; + basic_block_info->num_elements = j; + + if (changed) + tidy_fallthru_edges (); + return changed; + } + + /* Tidy the CFG by deleting unreachable code and whatnot. */ + + bool + cleanup_cfg (mode) + int mode; + { + bool changed = false; + + timevar_push (TV_CLEANUP_CFG); + changed = delete_unreachable_blocks (); + if (try_optimize_cfg (mode)) + delete_unreachable_blocks (), changed = true; + + /* Kill the data we won't maintain. */ + free_EXPR_LIST_list (&label_value_list); + free_EXPR_LIST_list (&tail_recursion_label_list); + timevar_pop (TV_CLEANUP_CFG); + + return changed; + } diff -Nrc3pad gcc-3.0.4/gcc/cfglayout.c gcc-3.1/gcc/cfglayout.c *** gcc-3.0.4/gcc/cfglayout.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/cfglayout.c Thu Jan 10 20:37:42 2002 *************** *** 0 **** --- 1,596 ---- + /* Basic block reordering routines for the GNU compiler. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2, or (at your option) any later + version. + + GCC is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to the Free + Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + + #include "config.h" + #include "system.h" + #include "tree.h" + #include "rtl.h" + #include "hard-reg-set.h" + #include "basic-block.h" + #include "insn-config.h" + #include "output.h" + #include "function.h" + #include "obstack.h" + #include "cfglayout.h" + + /* The contents of the current function definition are allocated + in this obstack, and all are freed at the end of the function. */ + extern struct obstack flow_obstack; + + /* Holds the interesting trailing notes for the function. */ + static rtx function_tail_eff_head; + + static rtx skip_insns_after_block PARAMS ((basic_block)); + static void record_effective_endpoints PARAMS ((void)); + static rtx label_for_bb PARAMS ((basic_block)); + static void fixup_reorder_chain PARAMS ((void)); + + static void set_block_levels PARAMS ((tree, int)); + static void change_scope PARAMS ((rtx, tree, tree)); + + void verify_insn_chain PARAMS ((void)); + static void fixup_fallthru_exit_predecessor PARAMS ((void)); + + /* Map insn uid to lexical block. */ + static varray_type insn_scopes; + + /* Skip over inter-block insns occurring after BB which are typically + associated with BB (e.g., barriers). If there are any such insns, + we return the last one. Otherwise, we return the end of BB. */ + + static rtx + skip_insns_after_block (bb) + basic_block bb; + { + rtx insn, last_insn, next_head, prev; + + next_head = NULL_RTX; + if (bb->index + 1 != n_basic_blocks) + next_head = BASIC_BLOCK (bb->index + 1)->head; + + for (last_insn = insn = bb->end; (insn = NEXT_INSN (insn)) != 0; ) + { + if (insn == next_head) + break; + + switch (GET_CODE (insn)) + { + case BARRIER: + last_insn = insn; + continue; + + case NOTE: + switch (NOTE_LINE_NUMBER (insn)) + { + case NOTE_INSN_LOOP_END: + case NOTE_INSN_BLOCK_END: + last_insn = insn; + continue; + case NOTE_INSN_DELETED: + case NOTE_INSN_DELETED_LABEL: + continue; + + default: + continue; + break; + } + break; + + case CODE_LABEL: + if (NEXT_INSN (insn) + && GET_CODE (NEXT_INSN (insn)) == JUMP_INSN + && (GET_CODE (PATTERN (NEXT_INSN (insn))) == ADDR_VEC + || GET_CODE (PATTERN (NEXT_INSN (insn))) == ADDR_DIFF_VEC)) + { + insn = NEXT_INSN (insn); + last_insn = insn; + continue; + } + break; + + default: + break; + } + + break; + } + + /* It is possible to hit contradictory sequence. For instance: + + jump_insn + NOTE_INSN_LOOP_BEG + barrier + + Where barrier belongs to jump_insn, but the note does not. This can be + created by removing the basic block originally following + NOTE_INSN_LOOP_BEG. In such case reorder the notes. */ + + for (insn = last_insn; insn != bb->end; insn = prev) + { + prev = PREV_INSN (insn); + if (GET_CODE (insn) == NOTE) + switch (NOTE_LINE_NUMBER (insn)) + { + case NOTE_INSN_LOOP_END: + case NOTE_INSN_BLOCK_END: + case NOTE_INSN_DELETED: + case NOTE_INSN_DELETED_LABEL: + continue; + default: + reorder_insns (insn, insn, last_insn); + } + } + + return last_insn; + } + + /* Locate or create a label for a given basic block. */ + + static rtx + label_for_bb (bb) + basic_block bb; + { + rtx label = bb->head; + + if (GET_CODE (label) != CODE_LABEL) + { + if (rtl_dump_file) + fprintf (rtl_dump_file, "Emitting label for block %d\n", bb->index); + + label = block_label (bb); + if (bb->head == PREV_INSN (RBI (bb)->eff_head)) + RBI (bb)->eff_head = label; + } + + return label; + } + + /* Locate the effective beginning and end of the insn chain for each + block, as defined by skip_insns_after_block above. */ + + static void + record_effective_endpoints () + { + rtx next_insn = get_insns (); + int i; + + for (i = 0; i < n_basic_blocks; i++) + { + basic_block bb = BASIC_BLOCK (i); + rtx end; + + RBI (bb)->eff_head = next_insn; + end = skip_insns_after_block (bb); + RBI (bb)->eff_end = end; + next_insn = NEXT_INSN (end); + } + + function_tail_eff_head = next_insn; + } + + /* Build a varray mapping INSN_UID to lexical block. Return it. */ + + void + scope_to_insns_initialize () + { + tree block = NULL; + rtx insn, next; + + VARRAY_TREE_INIT (insn_scopes, get_max_uid (), "insn scopes"); + + for (insn = get_insns (); insn; insn = next) + { + next = NEXT_INSN (insn); + + if (active_insn_p (insn) + && GET_CODE (PATTERN (insn)) != ADDR_VEC + && GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC) + VARRAY_TREE (insn_scopes, INSN_UID (insn)) = block; + else if (GET_CODE (insn) == NOTE) + { + switch (NOTE_LINE_NUMBER (insn)) + { + case NOTE_INSN_BLOCK_BEG: + block = NOTE_BLOCK (insn); + delete_insn (insn); + break; + case NOTE_INSN_BLOCK_END: + block = BLOCK_SUPERCONTEXT (block); + delete_insn (insn); + break; + default: + break; + } + } + } + } + + /* For each lexical block, set BLOCK_NUMBER to the depth at which it is + found in the block tree. */ + + static void + set_block_levels (block, level) + tree block; + int level; + { + while (block) + { + BLOCK_NUMBER (block) = level; + set_block_levels (BLOCK_SUBBLOCKS (block), level + 1); + block = BLOCK_CHAIN (block); + } + } + + /* Emit lexical block notes needed to change scope from S1 to S2. */ + + static void + change_scope (orig_insn, s1, s2) + rtx orig_insn; + tree s1, s2; + { + rtx insn = orig_insn; + tree com = NULL_TREE; + tree ts1 = s1, ts2 = s2; + tree s; + + while (ts1 != ts2) + { + if (ts1 == NULL || ts2 == NULL) + abort (); + if (BLOCK_NUMBER (ts1) > BLOCK_NUMBER (ts2)) + ts1 = BLOCK_SUPERCONTEXT (ts1); + else if (BLOCK_NUMBER (ts1) < BLOCK_NUMBER (ts2)) + ts2 = BLOCK_SUPERCONTEXT (ts2); + else + { + ts1 = BLOCK_SUPERCONTEXT (ts1); + ts2 = BLOCK_SUPERCONTEXT (ts2); + } + } + com = ts1; + + /* Close scopes. */ + s = s1; + while (s != com) + { + rtx note = emit_note_before (NOTE_INSN_BLOCK_END, insn); + NOTE_BLOCK (note) = s; + s = BLOCK_SUPERCONTEXT (s); + } + + /* Open scopes. */ + s = s2; + while (s != com) + { + insn = emit_note_before (NOTE_INSN_BLOCK_BEG, insn); + NOTE_BLOCK (insn) = s; + s = BLOCK_SUPERCONTEXT (s); + } + } + + /* Rebuild all the NOTE_INSN_BLOCK_BEG and NOTE_INSN_BLOCK_END notes based + on the scope tree and the newly reordered instructions. */ + + void + scope_to_insns_finalize () + { + tree cur_block = DECL_INITIAL (cfun->decl); + rtx insn, note; + + /* Tag the blocks with a depth number so that change_scope can find + the common parent easily. */ + set_block_levels (cur_block, 0); + + for (insn = get_insns (); insn; insn = NEXT_INSN (insn)) + { + tree this_block; + + if ((size_t) INSN_UID (insn) >= insn_scopes->num_elements) + continue; + this_block = VARRAY_TREE (insn_scopes, INSN_UID (insn)); + if (! this_block) + continue; + + if (this_block != cur_block) + { + change_scope (insn, cur_block, this_block); + cur_block = this_block; + } + } + + VARRAY_FREE (insn_scopes); + + /* change_scope emits before the insn, not after. */ + note = emit_note (NULL, NOTE_INSN_DELETED); + change_scope (note, cur_block, DECL_INITIAL (cfun->decl)); + delete_insn (note); + + reorder_blocks (); + } + + /* Given a reorder chain, rearrange the code to match. */ + + static void + fixup_reorder_chain () + { + basic_block bb, last_bb; + int index; + rtx insn; + int old_n_basic_blocks = n_basic_blocks; + + /* First do the bulk reordering -- rechain the blocks without regard to + the needed changes to jumps and labels. */ + + for (last_bb = BASIC_BLOCK (0), bb = RBI (last_bb)->next, index = 1; + bb != 0; + last_bb = bb, bb = RBI (bb)->next, index++) + { + rtx last_e = RBI (last_bb)->eff_end; + rtx curr_h = RBI (bb)->eff_head; + + NEXT_INSN (last_e) = curr_h; + PREV_INSN (curr_h) = last_e; + } + + if (index != n_basic_blocks) + abort (); + + insn = RBI (last_bb)->eff_end; + NEXT_INSN (insn) = function_tail_eff_head; + if (function_tail_eff_head) + PREV_INSN (function_tail_eff_head) = insn; + + while (NEXT_INSN (insn)) + insn = NEXT_INSN (insn); + + set_last_insn (insn); + #ifdef ENABLE_CHECKING + verify_insn_chain (); + #endif + + /* Now add jumps and labels as needed to match the blocks new + outgoing edges. */ + + for (bb = BASIC_BLOCK (0); bb ; bb = RBI (bb)->next) + { + edge e_fall, e_taken, e; + rtx bb_end_insn; + basic_block nb; + + if (bb->succ == NULL) + continue; + + /* Find the old fallthru edge, and another non-EH edge for + a taken jump. */ + e_taken = e_fall = NULL; + for (e = bb->succ; e ; e = e->succ_next) + if (e->flags & EDGE_FALLTHRU) + e_fall = e; + else if (! (e->flags & EDGE_EH)) + e_taken = e; + + bb_end_insn = bb->end; + if (GET_CODE (bb_end_insn) == JUMP_INSN) + { + if (any_condjump_p (bb_end_insn)) + { + /* If the old fallthru is still next, nothing to do. */ + if (RBI (bb)->next == e_fall->dest + || (!RBI (bb)->next + && e_fall->dest == EXIT_BLOCK_PTR)) + continue; + + /* There is one special case: if *neither* block is next, + such as happens at the very end of a function, then we'll + need to add a new unconditional jump. Choose the taken + edge based on known or assumed probability. */ + if (RBI (bb)->next != e_taken->dest) + { + rtx note = find_reg_note (bb_end_insn, REG_BR_PROB, 0); + + if (note + && INTVAL (XEXP (note, 0)) < REG_BR_PROB_BASE / 2 + && invert_jump (bb_end_insn, + label_for_bb (e_fall->dest), 0)) + { + e_fall->flags &= ~EDGE_FALLTHRU; + e_taken->flags |= EDGE_FALLTHRU; + update_br_prob_note (bb); + e = e_fall, e_fall = e_taken, e_taken = e; + } + } + + /* Otherwise we can try to invert the jump. This will + basically never fail, however, keep up the pretense. */ + else if (invert_jump (bb_end_insn, + label_for_bb (e_fall->dest), 0)) + { + e_fall->flags &= ~EDGE_FALLTHRU; + e_taken->flags |= EDGE_FALLTHRU; + update_br_prob_note (bb); + continue; + } + } + else if (returnjump_p (bb_end_insn)) + continue; + else + { + /* Otherwise we have some switch or computed jump. In the + 99% case, there should not have been a fallthru edge. */ + if (! e_fall) + continue; + + #ifdef CASE_DROPS_THROUGH + /* Except for VAX. Since we didn't have predication for the + tablejump, the fallthru block should not have moved. */ + if (RBI (bb)->next == e_fall->dest) + continue; + bb_end_insn = skip_insns_after_block (bb); + #else + abort (); + #endif + } + } + else + { + /* No fallthru implies a noreturn function with EH edges, or + something similarly bizarre. In any case, we don't need to + do anything. */ + if (! e_fall) + continue; + + /* If the fallthru block is still next, nothing to do. */ + if (RBI (bb)->next == e_fall->dest) + continue; + + /* A fallthru to exit block. */ + if (!RBI (bb)->next && e_fall->dest == EXIT_BLOCK_PTR) + continue; + } + + /* We got here if we need to add a new jump insn. */ + nb = force_nonfallthru (e_fall); + if (nb) + { + alloc_aux_for_block (nb, sizeof (struct reorder_block_def)); + RBI (nb)->eff_head = nb->head; + RBI (nb)->eff_end = NEXT_INSN (nb->end); + RBI (nb)->visited = 1; + RBI (nb)->next = RBI (bb)->next; + RBI (bb)->next = nb; + /* Don't process this new block. */ + bb = nb; + } + } + + /* Put basic_block_info in the new order. */ + bb = BASIC_BLOCK (0); + index = 0; + + if (rtl_dump_file) + fprintf (rtl_dump_file, "Reordered sequence:\n"); + + for (; bb; bb = RBI (bb)->next, index++) + { + if (rtl_dump_file) + fprintf (rtl_dump_file, " %i %sbb %i freq %i\n", index, + bb->index >= old_n_basic_blocks ? "compensation " : "", + bb->index, + bb->frequency); + + bb->index = index; + BASIC_BLOCK (index) = bb; + } + } + + /* Perform sanity checks on the insn chain. + 1. Check that next/prev pointers are consistent in both the forward and + reverse direction. + 2. Count insns in chain, going both directions, and check if equal. + 3. Check that get_last_insn () returns the actual end of chain. */ + + void + verify_insn_chain () + { + rtx x, prevx, nextx; + int insn_cnt1, insn_cnt2; + + for (prevx = NULL, insn_cnt1 = 1, x = get_insns (); + x != 0; + prevx = x, insn_cnt1++, x = NEXT_INSN (x)) + if (PREV_INSN (x) != prevx) + abort (); + + if (prevx != get_last_insn ()) + abort (); + + for (nextx = NULL, insn_cnt2 = 1, x = get_last_insn (); + x != 0; + nextx = x, insn_cnt2++, x = PREV_INSN (x)) + if (NEXT_INSN (x) != nextx) + abort (); + + if (insn_cnt1 != insn_cnt2) + abort (); + } + + /* The block falling through to exit must be the last one in the reordered + chain. Ensure it is. */ + + static void + fixup_fallthru_exit_predecessor () + { + edge e; + basic_block bb = NULL; + + for (e = EXIT_BLOCK_PTR->pred; e; e = e->pred_next) + if (e->flags & EDGE_FALLTHRU) + bb = e->src; + + if (bb && RBI (bb)->next) + { + basic_block c = BASIC_BLOCK (0); + + while (RBI (c)->next != bb) + c = RBI (c)->next; + + RBI (c)->next = RBI (bb)->next; + while (RBI (c)->next) + c = RBI (c)->next; + + RBI (c)->next = bb; + RBI (bb)->next = NULL; + } + } + + /* Main entry point to this module: initialize the datastructures for CFG + layout changes. */ + + void + cfg_layout_initialize () + { + alloc_aux_for_blocks (sizeof (struct reorder_block_def)); + + scope_to_insns_initialize (); + + record_effective_endpoints (); + } + + /* Finalize the changes: reorder insn list according to the sequence, enter + compensation code, rebuild scope forest. */ + + void + cfg_layout_finalize () + { + fixup_fallthru_exit_predecessor (); + fixup_reorder_chain (); + + #ifdef ENABLE_CHECKING + verify_insn_chain (); + #endif + + scope_to_insns_finalize (); + + free_aux_for_blocks (); + + #ifdef ENABLE_CHECKING + verify_flow_info (); + #endif + } diff -Nrc3pad gcc-3.0.4/gcc/cfglayout.h gcc-3.1/gcc/cfglayout.h *** gcc-3.0.4/gcc/cfglayout.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/cfglayout.h Mon Dec 31 04:19:34 2001 *************** *** 0 **** --- 1,36 ---- + /* Basic block reordering routines for the GNU compiler. + Copyright (C) 2000 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GCC is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to the Free + Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + + /* Structure to hold information about the blocks during reordering. */ + typedef struct reorder_block_def + { + rtx eff_head; + rtx eff_end; + basic_block next; + int visited; + } *reorder_block_def; + + #define RBI(BB) ((reorder_block_def) (BB)->aux) + + extern void cfg_layout_initialize PARAMS ((void)); + extern void cfg_layout_finalize PARAMS ((void)); + + extern void scope_to_insns_initialize PARAMS ((void)); + extern void scope_to_insns_finalize PARAMS ((void)); diff -Nrc3pad gcc-3.0.4/gcc/cfgloop.c gcc-3.1/gcc/cfgloop.c *** gcc-3.0.4/gcc/cfgloop.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/cfgloop.c Sun Jan 20 09:32:27 2002 *************** *** 0 **** --- 1,836 ---- + /* Natural loop discovery code for GNU compiler. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2, or (at your option) any later + version. + + GCC is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to the Free + Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + + #include "config.h" + #include "system.h" + #include "rtl.h" + #include "hard-reg-set.h" + #include "basic-block.h" + + static void flow_loops_cfg_dump PARAMS ((const struct loops *, + FILE *)); + static int flow_loop_nested_p PARAMS ((struct loop *, + struct loop *)); + static int flow_loop_entry_edges_find PARAMS ((basic_block, const sbitmap, + edge **)); + static int flow_loop_exit_edges_find PARAMS ((const sbitmap, edge **)); + static int flow_loop_nodes_find PARAMS ((basic_block, basic_block, + sbitmap)); + static void flow_loop_pre_header_scan PARAMS ((struct loop *)); + static basic_block flow_loop_pre_header_find PARAMS ((basic_block, + const sbitmap *)); + static void flow_loop_tree_node_add PARAMS ((struct loop *, + struct loop *)); + static void flow_loops_tree_build PARAMS ((struct loops *)); + static int flow_loop_level_compute PARAMS ((struct loop *, int)); + static int flow_loops_level_compute PARAMS ((struct loops *)); + + /* Dump loop related CFG information. */ + + static void + flow_loops_cfg_dump (loops, file) + const struct loops *loops; + FILE *file; + { + int i; + + if (! loops->num || ! file || ! loops->cfg.dom) + return; + + for (i = 0; i < n_basic_blocks; i++) + { + edge succ; + + fprintf (file, ";; %d succs { ", i); + for (succ = BASIC_BLOCK (i)->succ; succ; succ = succ->succ_next) + fprintf (file, "%d ", succ->dest->index); + flow_nodes_print ("} dom", loops->cfg.dom[i], file); + } + + /* Dump the DFS node order. */ + if (loops->cfg.dfs_order) + { + fputs (";; DFS order: ", file); + for (i = 0; i < n_basic_blocks; i++) + fprintf (file, "%d ", loops->cfg.dfs_order[i]); + + fputs ("\n", file); + } + + /* Dump the reverse completion node order. */ + if (loops->cfg.rc_order) + { + fputs (";; RC order: ", file); + for (i = 0; i < n_basic_blocks; i++) + fprintf (file, "%d ", loops->cfg.rc_order[i]); + + fputs ("\n", file); + } + } + + /* Return non-zero if the nodes of LOOP are a subset of OUTER. */ + + static int + flow_loop_nested_p (outer, loop) + struct loop *outer; + struct loop *loop; + { + return sbitmap_a_subset_b_p (loop->nodes, outer->nodes); + } + + /* Dump the loop information specified by LOOP to the stream FILE + using auxiliary dump callback function LOOP_DUMP_AUX if non null. */ + + void + flow_loop_dump (loop, file, loop_dump_aux, verbose) + const struct loop *loop; + FILE *file; + void (*loop_dump_aux) PARAMS((const struct loop *, FILE *, int)); + int verbose; + { + if (! loop || ! loop->header) + return; + + if (loop->first->head && loop->last->end) + fprintf (file, ";;\n;; Loop %d (%d to %d):%s%s\n", + loop->num, INSN_UID (loop->first->head), + INSN_UID (loop->last->end), + loop->shared ? " shared" : "", loop->invalid ? " invalid" : ""); + else + fprintf (file, ";;\n;; Loop %d:%s%s\n", loop->num, + loop->shared ? " shared" : "", loop->invalid ? " invalid" : ""); + + fprintf (file, ";; header %d, latch %d, pre-header %d, first %d, last %d\n", + loop->header->index, loop->latch->index, + loop->pre_header ? loop->pre_header->index : -1, + loop->first->index, loop->last->index); + fprintf (file, ";; depth %d, level %d, outer %ld\n", + loop->depth, loop->level, + (long) (loop->outer ? loop->outer->num : -1)); + + if (loop->pre_header_edges) + flow_edge_list_print (";; pre-header edges", loop->pre_header_edges, + loop->num_pre_header_edges, file); + + flow_edge_list_print (";; entry edges", loop->entry_edges, + loop->num_entries, file); + fprintf (file, ";; %d", loop->num_nodes); + flow_nodes_print (" nodes", loop->nodes, file); + flow_edge_list_print (";; exit edges", loop->exit_edges, + loop->num_exits, file); + + if (loop->exits_doms) + flow_nodes_print (";; exit doms", loop->exits_doms, file); + + if (loop_dump_aux) + loop_dump_aux (loop, file, verbose); + } + + /* Dump the loop information specified by LOOPS to the stream FILE, + using auxiliary dump callback function LOOP_DUMP_AUX if non null. */ + + void + flow_loops_dump (loops, file, loop_dump_aux, verbose) + const struct loops *loops; + FILE *file; + void (*loop_dump_aux) PARAMS((const struct loop *, FILE *, int)); + int verbose; + { + int i, j; + int num_loops; + + num_loops = loops->num; + if (! num_loops || ! file) + return; + + fprintf (file, ";; %d loops found, %d levels\n", num_loops, loops->levels); + for (i = 0; i < num_loops; i++) + { + struct loop *loop = &loops->array[i]; + + flow_loop_dump (loop, file, loop_dump_aux, verbose); + if (loop->shared) + for (j = 0; j < i; j++) + { + struct loop *oloop = &loops->array[j]; + + if (loop->header == oloop->header) + { + int disjoint; + int smaller; + + smaller = loop->num_nodes < oloop->num_nodes; + + /* If the union of LOOP and OLOOP is different than + the larger of LOOP and OLOOP then LOOP and OLOOP + must be disjoint. */ + disjoint = ! flow_loop_nested_p (smaller ? loop : oloop, + smaller ? oloop : loop); + fprintf (file, + ";; loop header %d shared by loops %d, %d %s\n", + loop->header->index, i, j, + disjoint ? "disjoint" : "nested"); + } + } + } + + if (verbose) + flow_loops_cfg_dump (loops, file); + } + + /* Free all the memory allocated for LOOPS. */ + + void + flow_loops_free (loops) + struct loops *loops; + { + if (loops->array) + { + int i; + + if (! loops->num) + abort (); + + /* Free the loop descriptors. */ + for (i = 0; i < loops->num; i++) + { + struct loop *loop = &loops->array[i]; + + if (loop->pre_header_edges) + free (loop->pre_header_edges); + if (loop->nodes) + sbitmap_free (loop->nodes); + if (loop->entry_edges) + free (loop->entry_edges); + if (loop->exit_edges) + free (loop->exit_edges); + if (loop->exits_doms) + sbitmap_free (loop->exits_doms); + } + + free (loops->array); + loops->array = NULL; + + if (loops->cfg.dom) + sbitmap_vector_free (loops->cfg.dom); + + if (loops->cfg.dfs_order) + free (loops->cfg.dfs_order); + + if (loops->shared_headers) + sbitmap_free (loops->shared_headers); + } + } + + /* Find the entry edges into the loop with header HEADER and nodes + NODES and store in ENTRY_EDGES array. Return the number of entry + edges from the loop. */ + + static int + flow_loop_entry_edges_find (header, nodes, entry_edges) + basic_block header; + const sbitmap nodes; + edge **entry_edges; + { + edge e; + int num_entries; + + *entry_edges = NULL; + + num_entries = 0; + for (e = header->pred; e; e = e->pred_next) + { + basic_block src = e->src; + + if (src == ENTRY_BLOCK_PTR || ! TEST_BIT (nodes, src->index)) + num_entries++; + } + + if (! num_entries) + abort (); + + *entry_edges = (edge *) xmalloc (num_entries * sizeof (edge)); + + num_entries = 0; + for (e = header->pred; e; e = e->pred_next) + { + basic_block src = e->src; + + if (src == ENTRY_BLOCK_PTR || ! TEST_BIT (nodes, src->index)) + (*entry_edges)[num_entries++] = e; + } + + return num_entries; + } + + /* Find the exit edges from the loop using the bitmap of loop nodes + NODES and store in EXIT_EDGES array. Return the number of + exit edges from the loop. */ + + static int + flow_loop_exit_edges_find (nodes, exit_edges) + const sbitmap nodes; + edge **exit_edges; + { + edge e; + int node; + int num_exits; + + *exit_edges = NULL; + + /* Check all nodes within the loop to see if there are any + successors not in the loop. Note that a node may have multiple + exiting edges ????? A node can have one jumping edge and one fallthru + edge so only one of these can exit the loop. */ + num_exits = 0; + EXECUTE_IF_SET_IN_SBITMAP (nodes, 0, node, { + for (e = BASIC_BLOCK (node)->succ; e; e = e->succ_next) + { + basic_block dest = e->dest; + + if (dest == EXIT_BLOCK_PTR || ! TEST_BIT (nodes, dest->index)) + num_exits++; + } + }); + + if (! num_exits) + return 0; + + *exit_edges = (edge *) xmalloc (num_exits * sizeof (edge)); + + /* Store all exiting edges into an array. */ + num_exits = 0; + EXECUTE_IF_SET_IN_SBITMAP (nodes, 0, node, { + for (e = BASIC_BLOCK (node)->succ; e; e = e->succ_next) + { + basic_block dest = e->dest; + + if (dest == EXIT_BLOCK_PTR || ! TEST_BIT (nodes, dest->index)) + (*exit_edges)[num_exits++] = e; + } + }); + + return num_exits; + } + + /* Find the nodes contained within the loop with header HEADER and + latch LATCH and store in NODES. Return the number of nodes within + the loop. */ + + static int + flow_loop_nodes_find (header, latch, nodes) + basic_block header; + basic_block latch; + sbitmap nodes; + { + basic_block *stack; + int sp; + int num_nodes = 0; + + stack = (basic_block *) xmalloc (n_basic_blocks * sizeof (basic_block)); + sp = 0; + + /* Start with only the loop header in the set of loop nodes. */ + sbitmap_zero (nodes); + SET_BIT (nodes, header->index); + num_nodes++; + header->loop_depth++; + + /* Push the loop latch on to the stack. */ + if (! TEST_BIT (nodes, latch->index)) + { + SET_BIT (nodes, latch->index); + latch->loop_depth++; + num_nodes++; + stack[sp++] = latch; + } + + while (sp) + { + basic_block node; + edge e; + + node = stack[--sp]; + for (e = node->pred; e; e = e->pred_next) + { + basic_block ancestor = e->src; + + /* If each ancestor not marked as part of loop, add to set of + loop nodes and push on to stack. */ + if (ancestor != ENTRY_BLOCK_PTR + && ! TEST_BIT (nodes, ancestor->index)) + { + SET_BIT (nodes, ancestor->index); + ancestor->loop_depth++; + num_nodes++; + stack[sp++] = ancestor; + } + } + } + free (stack); + return num_nodes; + } + + /* Find the root node of the loop pre-header extended basic block and + the edges along the trace from the root node to the loop header. */ + + static void + flow_loop_pre_header_scan (loop) + struct loop *loop; + { + int num; + basic_block ebb; + edge e; + + loop->num_pre_header_edges = 0; + if (loop->num_entries != 1) + return; + + ebb = loop->entry_edges[0]->src; + if (ebb == ENTRY_BLOCK_PTR) + return; + + /* Count number of edges along trace from loop header to + root of pre-header extended basic block. Usually this is + only one or two edges. */ + for (num = 1; ebb->pred->src != ENTRY_BLOCK_PTR && ! ebb->pred->pred_next; + num++) + ebb = ebb->pred->src; + + loop->pre_header_edges = (edge *) xmalloc (num * sizeof (edge)); + loop->num_pre_header_edges = num; + + /* Store edges in order that they are followed. The source of the first edge + is the root node of the pre-header extended basic block and the + destination of the last last edge is the loop header. */ + for (e = loop->entry_edges[0]; num; e = e->src->pred) + loop->pre_header_edges[--num] = e; + } + + /* Return the block for the pre-header of the loop with header + HEADER where DOM specifies the dominator information. Return NULL if + there is no pre-header. */ + + static basic_block + flow_loop_pre_header_find (header, dom) + basic_block header; + const sbitmap *dom; + { + basic_block pre_header; + edge e; + + /* If block p is a predecessor of the header and is the only block + that the header does not dominate, then it is the pre-header. */ + pre_header = NULL; + for (e = header->pred; e; e = e->pred_next) + { + basic_block node = e->src; + + if (node != ENTRY_BLOCK_PTR + && ! TEST_BIT (dom[node->index], header->index)) + { + if (pre_header == NULL) + pre_header = node; + else + { + /* There are multiple edges into the header from outside + the loop so there is no pre-header block. */ + pre_header = NULL; + break; + } + } + } + + return pre_header; + } + + /* Add LOOP to the loop hierarchy tree where PREVLOOP was the loop + previously added. The insertion algorithm assumes that the loops + are added in the order found by a depth first search of the CFG. */ + + static void + flow_loop_tree_node_add (prevloop, loop) + struct loop *prevloop; + struct loop *loop; + { + + if (flow_loop_nested_p (prevloop, loop)) + { + prevloop->inner = loop; + loop->outer = prevloop; + return; + } + + for (; prevloop->outer; prevloop = prevloop->outer) + if (flow_loop_nested_p (prevloop->outer, loop)) + { + prevloop->next = loop; + loop->outer = prevloop->outer; + return; + } + + prevloop->next = loop; + loop->outer = NULL; + } + + /* Build the loop hierarchy tree for LOOPS. */ + + static void + flow_loops_tree_build (loops) + struct loops *loops; + { + int i; + int num_loops; + + num_loops = loops->num; + if (! num_loops) + return; + + /* Root the loop hierarchy tree with the first loop found. + Since we used a depth first search this should be the + outermost loop. */ + loops->tree_root = &loops->array[0]; + loops->tree_root->outer = loops->tree_root->inner + = loops->tree_root->next = NULL; + + /* Add the remaining loops to the tree. */ + for (i = 1; i < num_loops; i++) + flow_loop_tree_node_add (&loops->array[i - 1], &loops->array[i]); + } + + /* Helper function to compute loop nesting depth and enclosed loop level + for the natural loop specified by LOOP at the loop depth DEPTH. + Returns the loop level. */ + + static int + flow_loop_level_compute (loop, depth) + struct loop *loop; + int depth; + { + struct loop *inner; + int level = 1; + + if (! loop) + return 0; + + /* Traverse loop tree assigning depth and computing level as the + maximum level of all the inner loops of this loop. The loop + level is equivalent to the height of the loop in the loop tree + and corresponds to the number of enclosed loop levels (including + itself). */ + for (inner = loop->inner; inner; inner = inner->next) + { + int ilevel = flow_loop_level_compute (inner, depth + 1) + 1; + + level = MAX (ilevel, level); + } + + loop->level = level; + loop->depth = depth; + return level; + } + + /* Compute the loop nesting depth and enclosed loop level for the loop + hierarchy tree specified by LOOPS. Return the maximum enclosed loop + level. */ + + static int + flow_loops_level_compute (loops) + struct loops *loops; + { + int levels = 0; + struct loop *loop; + int level; + + /* Traverse all the outer level loops. */ + for (loop = loops->tree_root; loop; loop = loop->next) + { + level = flow_loop_level_compute (loop, 1); + levels = MAX (levels, level); + } + + return levels; + } + + /* Scan a single natural loop specified by LOOP collecting information + about it specified by FLAGS. */ + + int + flow_loop_scan (loops, loop, flags) + struct loops *loops; + struct loop *loop; + int flags; + { + /* Determine prerequisites. */ + if ((flags & LOOP_EXITS_DOMS) && ! loop->exit_edges) + flags |= LOOP_EXIT_EDGES; + + if (flags & LOOP_ENTRY_EDGES) + /* Find edges which enter the loop header. Note that the entry edges + should only enter the header of a natural loop. */ + loop->num_entries = flow_loop_entry_edges_find (loop->header, loop->nodes, + &loop->entry_edges); + + if (flags & LOOP_EXIT_EDGES) + /* Find edges which exit the loop. */ + loop->num_exits + = flow_loop_exit_edges_find (loop->nodes, &loop->exit_edges); + + if (flags & LOOP_EXITS_DOMS) + { + int j; + + /* Determine which loop nodes dominate all the exits + of the loop. */ + loop->exits_doms = sbitmap_alloc (n_basic_blocks); + sbitmap_copy (loop->exits_doms, loop->nodes); + for (j = 0; j < loop->num_exits; j++) + sbitmap_a_and_b (loop->exits_doms, loop->exits_doms, + loops->cfg.dom[loop->exit_edges[j]->src->index]); + + /* The header of a natural loop must dominate + all exits. */ + if (! TEST_BIT (loop->exits_doms, loop->header->index)) + abort (); + } + + if (flags & LOOP_PRE_HEADER) + { + /* Look to see if the loop has a pre-header node. */ + loop->pre_header + = flow_loop_pre_header_find (loop->header, loops->cfg.dom); + + /* Find the blocks within the extended basic block of + the loop pre-header. */ + flow_loop_pre_header_scan (loop); + } + + return 1; + } + + /* Find all the natural loops in the function and save in LOOPS structure and + recalculate loop_depth information in basic block structures. FLAGS + controls which loop information is collected. Return the number of natural + loops found. */ + + int + flow_loops_find (loops, flags) + struct loops *loops; + int flags; + { + int i; + int b; + int num_loops; + edge e; + sbitmap headers; + sbitmap *dom; + int *dfs_order; + int *rc_order; + + /* This function cannot be repeatedly called with different + flags to build up the loop information. The loop tree + must always be built if this function is called. */ + if (! (flags & LOOP_TREE)) + abort (); + + memset (loops, 0, sizeof *loops); + + /* Taking care of this degenerate case makes the rest of + this code simpler. */ + if (n_basic_blocks == 0) + return 0; + + dfs_order = NULL; + rc_order = NULL; + + /* Compute the dominators. */ + dom = sbitmap_vector_alloc (n_basic_blocks, n_basic_blocks); + calculate_dominance_info (NULL, dom, CDI_DOMINATORS); + + /* Count the number of loop edges (back edges). This should be the + same as the number of natural loops. */ + num_loops = 0; + for (b = 0; b < n_basic_blocks; b++) + { + basic_block header; + + header = BASIC_BLOCK (b); + header->loop_depth = 0; + + for (e = header->pred; e; e = e->pred_next) + { + basic_block latch = e->src; + + /* Look for back edges where a predecessor is dominated + by this block. A natural loop has a single entry + node (header) that dominates all the nodes in the + loop. It also has single back edge to the header + from a latch node. Note that multiple natural loops + may share the same header. */ + if (b != header->index) + abort (); + + if (latch != ENTRY_BLOCK_PTR && TEST_BIT (dom[latch->index], b)) + num_loops++; + } + } + + if (num_loops) + { + /* Compute depth first search order of the CFG so that outer + natural loops will be found before inner natural loops. */ + dfs_order = (int *) xmalloc (n_basic_blocks * sizeof (int)); + rc_order = (int *) xmalloc (n_basic_blocks * sizeof (int)); + flow_depth_first_order_compute (dfs_order, rc_order); + + /* Save CFG derived information to avoid recomputing it. */ + loops->cfg.dom = dom; + loops->cfg.dfs_order = dfs_order; + loops->cfg.rc_order = rc_order; + + /* Allocate loop structures. */ + loops->array + = (struct loop *) xcalloc (num_loops, sizeof (struct loop)); + + headers = sbitmap_alloc (n_basic_blocks); + sbitmap_zero (headers); + + loops->shared_headers = sbitmap_alloc (n_basic_blocks); + sbitmap_zero (loops->shared_headers); + + /* Find and record information about all the natural loops + in the CFG. */ + num_loops = 0; + for (b = n_basic_blocks - 1; b >= 0; b--) + { + basic_block latch; + + /* Search the nodes of the CFG in reverse completion order + so that we can find outer loops first. */ + latch = BASIC_BLOCK (rc_order[b]); + + /* Look for all the possible headers for this latch block. */ + for (e = latch->succ; e; e = e->succ_next) + { + basic_block header = e->dest; + + /* Look for forward edges where this block is dominated by + a successor of this block. A natural loop has a single + entry node (header) that dominates all the nodes in the + loop. It also has single back edge to the header from a + latch node. Note that multiple natural loops may share + the same header. */ + if (header != EXIT_BLOCK_PTR + && TEST_BIT (dom[latch->index], header->index)) + { + struct loop *loop; + + loop = loops->array + num_loops; + + loop->header = header; + loop->latch = latch; + loop->num = num_loops; + + num_loops++; + } + } + } + + for (i = 0; i < num_loops; i++) + { + struct loop *loop = &loops->array[i]; + + /* Keep track of blocks that are loop headers so + that we can tell which loops should be merged. */ + if (TEST_BIT (headers, loop->header->index)) + SET_BIT (loops->shared_headers, loop->header->index); + SET_BIT (headers, loop->header->index); + + /* Find nodes contained within the loop. */ + loop->nodes = sbitmap_alloc (n_basic_blocks); + loop->num_nodes + = flow_loop_nodes_find (loop->header, loop->latch, loop->nodes); + + /* Compute first and last blocks within the loop. + These are often the same as the loop header and + loop latch respectively, but this is not always + the case. */ + loop->first + = BASIC_BLOCK (sbitmap_first_set_bit (loop->nodes)); + loop->last + = BASIC_BLOCK (sbitmap_last_set_bit (loop->nodes)); + + flow_loop_scan (loops, loop, flags); + } + + /* Natural loops with shared headers may either be disjoint or + nested. Disjoint loops with shared headers cannot be inner + loops and should be merged. For now just mark loops that share + headers. */ + for (i = 0; i < num_loops; i++) + if (TEST_BIT (loops->shared_headers, loops->array[i].header->index)) + loops->array[i].shared = 1; + + sbitmap_free (headers); + } + else + sbitmap_vector_free (dom); + + loops->num = num_loops; + + /* Build the loop hierarchy tree. */ + flow_loops_tree_build (loops); + + /* Assign the loop nesting depth and enclosed loop level for each + loop. */ + loops->levels = flow_loops_level_compute (loops); + + return num_loops; + } + + /* Update the information regarding the loops in the CFG + specified by LOOPS. */ + + int + flow_loops_update (loops, flags) + struct loops *loops; + int flags; + { + /* One day we may want to update the current loop data. For now + throw away the old stuff and rebuild what we need. */ + if (loops->array) + flow_loops_free (loops); + + return flow_loops_find (loops, flags); + } + + /* Return non-zero if edge E enters header of LOOP from outside of LOOP. */ + + int + flow_loop_outside_edge_p (loop, e) + const struct loop *loop; + edge e; + { + if (e->dest != loop->header) + abort (); + + return (e->src == ENTRY_BLOCK_PTR) + || ! TEST_BIT (loop->nodes, e->src->index); + } diff -Nrc3pad gcc-3.0.4/gcc/cfgrtl.c gcc-3.1/gcc/cfgrtl.c *** gcc-3.0.4/gcc/cfgrtl.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/cfgrtl.c Tue Apr 9 20:38:56 2002 *************** *** 0 **** --- 1,2068 ---- + /* Control flow graph manipulation code for GNU compiler. + Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, + 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2, or (at your option) any later + version. + + GCC is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to the Free + Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + + /* This file contains low level functions to manipulate the CFG and analyze it + that are aware of the RTL intermediate language. + + Available functionality: + - CFG-aware instruction chain manipulation + delete_insn, delete_insn_chain + - Basic block manipulation + create_basic_block, flow_delete_block, split_block, + merge_blocks_nomove + - Infrastructure to determine quickly basic block for insn + compute_bb_for_insn, update_bb_for_insn, set_block_for_insn, + - Edge redirection with updating and optimizing of insn chain + block_label, redirect_edge_and_branch, + redirect_edge_and_branch_force, tidy_fallthru_edge, force_nonfallthru + - Edge splitting and commiting to edges + split_edge, insert_insn_on_edge, commit_edge_insertions + - Dumping and debugging + print_rtl_with_bb, dump_bb, debug_bb, debug_bb_n + - Consistency checking + verify_flow_info + - CFG updating after constant propagation + purge_dead_edges, purge_all_dead_edges */ + + #include "config.h" + #include "system.h" + #include "tree.h" + #include "rtl.h" + #include "hard-reg-set.h" + #include "basic-block.h" + #include "regs.h" + #include "flags.h" + #include "output.h" + #include "function.h" + #include "except.h" + #include "toplev.h" + #include "tm_p.h" + #include "obstack.h" + + /* Stubs in case we don't have a return insn. */ + #ifndef HAVE_return + #define HAVE_return 0 + #define gen_return() NULL_RTX + #endif + + /* The basic block structure for every insn, indexed by uid. */ + varray_type basic_block_for_insn; + + /* The labels mentioned in non-jump rtl. Valid during find_basic_blocks. */ + /* ??? Should probably be using LABEL_NUSES instead. It would take a + bit of surgery to be able to use or co-opt the routines in jump. */ + rtx label_value_list; + rtx tail_recursion_label_list; + + static int can_delete_note_p PARAMS ((rtx)); + static int can_delete_label_p PARAMS ((rtx)); + static void commit_one_edge_insertion PARAMS ((edge)); + static bool try_redirect_by_replacing_jump PARAMS ((edge, basic_block)); + static rtx last_loop_beg_note PARAMS ((rtx)); + static bool back_edge_of_syntactic_loop_p PARAMS ((basic_block, basic_block)); + static basic_block force_nonfallthru_and_redirect PARAMS ((edge, basic_block)); + + /* Return true if NOTE is not one of the ones that must be kept paired, + so that we may simply delete it. */ + + static int + can_delete_note_p (note) + rtx note; + { + return (NOTE_LINE_NUMBER (note) == NOTE_INSN_DELETED + || NOTE_LINE_NUMBER (note) == NOTE_INSN_BASIC_BLOCK); + } + + /* True if a given label can be deleted. */ + + static int + can_delete_label_p (label) + rtx label; + { + return (!LABEL_PRESERVE_P (label) + /* User declared labels must be preserved. */ + && LABEL_NAME (label) == 0 + && !in_expr_list_p (forced_labels, label) + && !in_expr_list_p (label_value_list, label)); + } + + /* Delete INSN by patching it out. Return the next insn. */ + + rtx + delete_insn (insn) + rtx insn; + { + rtx next = NEXT_INSN (insn); + rtx note; + bool really_delete = true; + + if (GET_CODE (insn) == CODE_LABEL) + { + /* Some labels can't be directly removed from the INSN chain, as they + might be references via variables, constant pool etc. + Convert them to the special NOTE_INSN_DELETED_LABEL note. */ + if (! can_delete_label_p (insn)) + { + const char *name = LABEL_NAME (insn); + + really_delete = false; + PUT_CODE (insn, NOTE); + NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED_LABEL; + NOTE_SOURCE_FILE (insn) = name; + } + + remove_node_from_expr_list (insn, &nonlocal_goto_handler_labels); + } + + if (really_delete) + { + /* If this insn has already been deleted, something is very wrong. */ + if (INSN_DELETED_P (insn)) + abort (); + remove_insn (insn); + INSN_DELETED_P (insn) = 1; + } + + /* If deleting a jump, decrement the use count of the label. Deleting + the label itself should happen in the normal course of block merging. */ + if (GET_CODE (insn) == JUMP_INSN + && JUMP_LABEL (insn) + && GET_CODE (JUMP_LABEL (insn)) == CODE_LABEL) + LABEL_NUSES (JUMP_LABEL (insn))--; + + /* Also if deleting an insn that references a label. */ + else if ((note = find_reg_note (insn, REG_LABEL, NULL_RTX)) != NULL_RTX + && GET_CODE (XEXP (note, 0)) == CODE_LABEL) + LABEL_NUSES (XEXP (note, 0))--; + + if (GET_CODE (insn) == JUMP_INSN + && (GET_CODE (PATTERN (insn)) == ADDR_VEC + || GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC)) + { + rtx pat = PATTERN (insn); + int diff_vec_p = GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC; + int len = XVECLEN (pat, diff_vec_p); + int i; + + for (i = 0; i < len; i++) + { + rtx label = XEXP (XVECEXP (pat, diff_vec_p, i), 0); + + /* When deleting code in bulk (e.g. removing many unreachable + blocks) we can delete a label that's a target of the vector + before deleting the vector itself. */ + if (GET_CODE (label) != NOTE) + LABEL_NUSES (label)--; + } + } + + return next; + } + + /* Unlink a chain of insns between START and FINISH, leaving notes + that must be paired. */ + + void + delete_insn_chain (start, finish) + rtx start, finish; + { + rtx next; + + /* Unchain the insns one by one. It would be quicker to delete all of these + with a single unchaining, rather than one at a time, but we need to keep + the NOTE's. */ + while (1) + { + next = NEXT_INSN (start); + if (GET_CODE (start) == NOTE && !can_delete_note_p (start)) + ; + else + next = delete_insn (start); + + if (start == finish) + break; + start = next; + } + } + + /* Create a new basic block consisting of the instructions between HEAD and END + inclusive. This function is designed to allow fast BB construction - reuses + the note and basic block struct in BB_NOTE, if any and do not grow + BASIC_BLOCK chain and should be used directly only by CFG construction code. + END can be NULL in to create new empty basic block before HEAD. Both END + and HEAD can be NULL to create basic block at the end of INSN chain. */ + + basic_block + create_basic_block_structure (index, head, end, bb_note) + int index; + rtx head, end, bb_note; + { + basic_block bb; + + if (bb_note + && ! RTX_INTEGRATED_P (bb_note) + && (bb = NOTE_BASIC_BLOCK (bb_note)) != NULL + && bb->aux == NULL) + { + /* If we found an existing note, thread it back onto the chain. */ + + rtx after; + + if (GET_CODE (head) == CODE_LABEL) + after = head; + else + { + after = PREV_INSN (head); + head = bb_note; + } + + if (after != bb_note && NEXT_INSN (after) != bb_note) + reorder_insns (bb_note, bb_note, after); + } + else + { + /* Otherwise we must create a note and a basic block structure. */ + + bb = alloc_block (); + + if (!head && !end) + head = end = bb_note + = emit_note_after (NOTE_INSN_BASIC_BLOCK, get_last_insn ()); + else if (GET_CODE (head) == CODE_LABEL && end) + { + bb_note = emit_note_after (NOTE_INSN_BASIC_BLOCK, head); + if (head == end) + end = bb_note; + } + else + { + bb_note = emit_note_before (NOTE_INSN_BASIC_BLOCK, head); + head = bb_note; + if (!end) + end = head; + } + + NOTE_BASIC_BLOCK (bb_note) = bb; + } + + /* Always include the bb note in the block. */ + if (NEXT_INSN (end) == bb_note) + end = bb_note; + + bb->head = head; + bb->end = end; + bb->index = index; + BASIC_BLOCK (index) = bb; + if (basic_block_for_insn) + update_bb_for_insn (bb); + + /* Tag the block so that we know it has been used when considering + other basic block notes. */ + bb->aux = bb; + + return bb; + } + + /* Create new basic block consisting of instructions in between HEAD and END + and place it to the BB chain at position INDEX. END can be NULL in to + create new empty basic block before HEAD. Both END and HEAD can be NULL to + create basic block at the end of INSN chain. */ + + basic_block + create_basic_block (index, head, end) + int index; + rtx head, end; + { + basic_block bb; + int i; + + /* Place the new block just after the block being split. */ + VARRAY_GROW (basic_block_info, ++n_basic_blocks); + + /* Some parts of the compiler expect blocks to be number in + sequential order so insert the new block immediately after the + block being split.. */ + for (i = n_basic_blocks - 1; i > index; --i) + { + basic_block tmp = BASIC_BLOCK (i - 1); + + BASIC_BLOCK (i) = tmp; + tmp->index = i; + } + + bb = create_basic_block_structure (index, head, end, NULL); + bb->aux = NULL; + return bb; + } + + /* Delete the insns in a (non-live) block. We physically delete every + non-deleted-note insn, and update the flow graph appropriately. + + Return nonzero if we deleted an exception handler. */ + + /* ??? Preserving all such notes strikes me as wrong. It would be nice + to post-process the stream to remove empty blocks, loops, ranges, etc. */ + + int + flow_delete_block_noexpunge (b) + basic_block b; + { + int deleted_handler = 0; + rtx insn, end, tmp; + + /* If the head of this block is a CODE_LABEL, then it might be the + label for an exception handler which can't be reached. + + We need to remove the label from the exception_handler_label list + and remove the associated NOTE_INSN_EH_REGION_BEG and + NOTE_INSN_EH_REGION_END notes. */ + + insn = b->head; + + never_reached_warning (insn, b->end); + + if (GET_CODE (insn) == CODE_LABEL) + maybe_remove_eh_handler (insn); + + /* Include any jump table following the basic block. */ + end = b->end; + if (GET_CODE (end) == JUMP_INSN + && (tmp = JUMP_LABEL (end)) != NULL_RTX + && (tmp = NEXT_INSN (tmp)) != NULL_RTX + && GET_CODE (tmp) == JUMP_INSN + && (GET_CODE (PATTERN (tmp)) == ADDR_VEC + || GET_CODE (PATTERN (tmp)) == ADDR_DIFF_VEC)) + end = tmp; + + /* Include any barrier that may follow the basic block. */ + tmp = next_nonnote_insn (end); + if (tmp && GET_CODE (tmp) == BARRIER) + end = tmp; + + /* Selectively delete the entire chain. */ + b->head = NULL; + delete_insn_chain (insn, end); + + /* Remove the edges into and out of this block. Note that there may + indeed be edges in, if we are removing an unreachable loop. */ + while (b->pred != NULL) + remove_edge (b->pred); + while (b->succ != NULL) + remove_edge (b->succ); + + b->pred = NULL; + b->succ = NULL; + + return deleted_handler; + } + + int + flow_delete_block (b) + basic_block b; + { + int deleted_handler = flow_delete_block_noexpunge (b); + + /* Remove the basic block from the array, and compact behind it. */ + expunge_block (b); + + return deleted_handler; + } + + /* Records the basic block struct in BB_FOR_INSN, for every instruction + indexed by INSN_UID. MAX is the size of the array. */ + + void + compute_bb_for_insn (max) + int max; + { + int i; + + if (basic_block_for_insn) + VARRAY_FREE (basic_block_for_insn); + + VARRAY_BB_INIT (basic_block_for_insn, max, "basic_block_for_insn"); + + for (i = 0; i < n_basic_blocks; ++i) + { + basic_block bb = BASIC_BLOCK (i); + rtx end = bb->end; + rtx insn; + + for (insn = bb->head; ; insn = NEXT_INSN (insn)) + { + if (INSN_UID (insn) < max) + VARRAY_BB (basic_block_for_insn, INSN_UID (insn)) = bb; + + if (insn == end) + break; + } + } + } + + /* Release the basic_block_for_insn array. */ + + void + free_bb_for_insn () + { + if (basic_block_for_insn) + VARRAY_FREE (basic_block_for_insn); + + basic_block_for_insn = 0; + } + + /* Update insns block within BB. */ + + void + update_bb_for_insn (bb) + basic_block bb; + { + rtx insn; + + if (! basic_block_for_insn) + return; + + for (insn = bb->head; ; insn = NEXT_INSN (insn)) + { + set_block_for_insn (insn, bb); + if (insn == bb->end) + break; + } + } + + /* Record INSN's block as BB. */ + + void + set_block_for_insn (insn, bb) + rtx insn; + basic_block bb; + { + size_t uid = INSN_UID (insn); + + if (uid >= basic_block_for_insn->num_elements) + { + /* Add one-eighth the size so we don't keep calling xrealloc. */ + size_t new_size = uid + (uid + 7) / 8; + + VARRAY_GROW (basic_block_for_insn, new_size); + } + + VARRAY_BB (basic_block_for_insn, uid) = bb; + } + + /* Split a block BB after insn INSN creating a new fallthru edge. + Return the new edge. Note that to keep other parts of the compiler happy, + this function renumbers all the basic blocks so that the new + one has a number one greater than the block split. */ + + edge + split_block (bb, insn) + basic_block bb; + rtx insn; + { + basic_block new_bb; + edge new_edge; + edge e; + + /* There is no point splitting the block after its end. */ + if (bb->end == insn) + return 0; + + /* Create the new basic block. */ + new_bb = create_basic_block (bb->index + 1, NEXT_INSN (insn), bb->end); + new_bb->count = bb->count; + new_bb->frequency = bb->frequency; + new_bb->loop_depth = bb->loop_depth; + bb->end = insn; + + /* Redirect the outgoing edges. */ + new_bb->succ = bb->succ; + bb->succ = NULL; + for (e = new_bb->succ; e; e = e->succ_next) + e->src = new_bb; + + new_edge = make_single_succ_edge (bb, new_bb, EDGE_FALLTHRU); + + if (bb->global_live_at_start) + { + new_bb->global_live_at_start = OBSTACK_ALLOC_REG_SET (&flow_obstack); + new_bb->global_live_at_end = OBSTACK_ALLOC_REG_SET (&flow_obstack); + COPY_REG_SET (new_bb->global_live_at_end, bb->global_live_at_end); + + /* We now have to calculate which registers are live at the end + of the split basic block and at the start of the new basic + block. Start with those registers that are known to be live + at the end of the original basic block and get + propagate_block to determine which registers are live. */ + COPY_REG_SET (new_bb->global_live_at_start, bb->global_live_at_end); + propagate_block (new_bb, new_bb->global_live_at_start, NULL, NULL, 0); + COPY_REG_SET (bb->global_live_at_end, + new_bb->global_live_at_start); + } + + return new_edge; + } + + /* Blocks A and B are to be merged into a single block A. The insns + are already contiguous, hence `nomove'. */ + + void + merge_blocks_nomove (a, b) + basic_block a, b; + { + rtx b_head = b->head, b_end = b->end, a_end = a->end; + rtx del_first = NULL_RTX, del_last = NULL_RTX; + int b_empty = 0; + edge e; + + /* If there was a CODE_LABEL beginning B, delete it. */ + if (GET_CODE (b_head) == CODE_LABEL) + { + /* Detect basic blocks with nothing but a label. This can happen + in particular at the end of a function. */ + if (b_head == b_end) + b_empty = 1; + + del_first = del_last = b_head; + b_head = NEXT_INSN (b_head); + } + + /* Delete the basic block note and handle blocks containing just that + note. */ + if (NOTE_INSN_BASIC_BLOCK_P (b_head)) + { + if (b_head == b_end) + b_empty = 1; + if (! del_last) + del_first = b_head; + + del_last = b_head; + b_head = NEXT_INSN (b_head); + } + + /* If there was a jump out of A, delete it. */ + if (GET_CODE (a_end) == JUMP_INSN) + { + rtx prev; + + for (prev = PREV_INSN (a_end); ; prev = PREV_INSN (prev)) + if (GET_CODE (prev) != NOTE + || NOTE_LINE_NUMBER (prev) == NOTE_INSN_BASIC_BLOCK + || prev == a->head) + break; + + del_first = a_end; + + #ifdef HAVE_cc0 + /* If this was a conditional jump, we need to also delete + the insn that set cc0. */ + if (only_sets_cc0_p (prev)) + { + rtx tmp = prev; + + prev = prev_nonnote_insn (prev); + if (!prev) + prev = a->head; + del_first = tmp; + } + #endif + + a_end = PREV_INSN (del_first); + } + else if (GET_CODE (NEXT_INSN (a_end)) == BARRIER) + del_first = NEXT_INSN (a_end); + + /* Normally there should only be one successor of A and that is B, but + partway though the merge of blocks for conditional_execution we'll + be merging a TEST block with THEN and ELSE successors. Free the + whole lot of them and hope the caller knows what they're doing. */ + while (a->succ) + remove_edge (a->succ); + + /* Adjust the edges out of B for the new owner. */ + for (e = b->succ; e; e = e->succ_next) + e->src = a; + a->succ = b->succ; + + /* B hasn't quite yet ceased to exist. Attempt to prevent mishap. */ + b->pred = b->succ = NULL; + a->global_live_at_end = b->global_live_at_end; + + expunge_block (b); + + /* Delete everything marked above as well as crap that might be + hanging out between the two blocks. */ + delete_insn_chain (del_first, del_last); + + /* Reassociate the insns of B with A. */ + if (!b_empty) + { + if (basic_block_for_insn) + { + rtx x; + + for (x = a_end; x != b_end; x = NEXT_INSN (x)) + set_block_for_insn (x, a); + + set_block_for_insn (b_end, a); + } + + a_end = b_end; + } + + a->end = a_end; + } + + /* Return the label in the head of basic block BLOCK. Create one if it doesn't + exist. */ + + rtx + block_label (block) + basic_block block; + { + if (block == EXIT_BLOCK_PTR) + return NULL_RTX; + + if (GET_CODE (block->head) != CODE_LABEL) + { + block->head = emit_label_before (gen_label_rtx (), block->head); + if (basic_block_for_insn) + set_block_for_insn (block->head, block); + } + + return block->head; + } + + /* Attempt to perform edge redirection by replacing possibly complex jump + instruction by unconditional jump or removing jump completely. This can + apply only if all edges now point to the same block. The parameters and + return values are equivalent to redirect_edge_and_branch. */ + + static bool + try_redirect_by_replacing_jump (e, target) + edge e; + basic_block target; + { + basic_block src = e->src; + rtx insn = src->end, kill_from; + edge tmp; + rtx set; + int fallthru = 0; + + /* Verify that all targets will be TARGET. */ + for (tmp = src->succ; tmp; tmp = tmp->succ_next) + if (tmp->dest != target && tmp != e) + break; + + if (tmp || !onlyjump_p (insn)) + return false; + + /* Avoid removing branch with side effects. */ + set = single_set (insn); + if (!set || side_effects_p (set)) + return false; + + /* In case we zap a conditional jump, we'll need to kill + the cc0 setter too. */ + kill_from = insn; + #ifdef HAVE_cc0 + if (reg_mentioned_p (cc0_rtx, PATTERN (insn))) + kill_from = PREV_INSN (insn); + #endif + + /* See if we can create the fallthru edge. */ + if (can_fallthru (src, target)) + { + if (rtl_dump_file) + fprintf (rtl_dump_file, "Removing jump %i.\n", INSN_UID (insn)); + fallthru = 1; + + /* Selectively unlink whole insn chain. */ + delete_insn_chain (kill_from, PREV_INSN (target->head)); + } + + /* If this already is simplejump, redirect it. */ + else if (simplejump_p (insn)) + { + if (e->dest == target) + return false; + if (rtl_dump_file) + fprintf (rtl_dump_file, "Redirecting jump %i from %i to %i.\n", + INSN_UID (insn), e->dest->index, target->index); + if (!redirect_jump (insn, block_label (target), 0)) + { + if (target == EXIT_BLOCK_PTR) + return false; + abort (); + } + } + + /* Cannot do anything for target exit block. */ + else if (target == EXIT_BLOCK_PTR) + return false; + + /* Or replace possibly complicated jump insn by simple jump insn. */ + else + { + rtx target_label = block_label (target); + rtx barrier, tmp; + + emit_jump_insn_after (gen_jump (target_label), insn); + JUMP_LABEL (src->end) = target_label; + LABEL_NUSES (target_label)++; + if (rtl_dump_file) + fprintf (rtl_dump_file, "Replacing insn %i by jump %i\n", + INSN_UID (insn), INSN_UID (src->end)); + + + delete_insn_chain (kill_from, insn); + + /* Recognize a tablejump that we are converting to a + simple jump and remove its associated CODE_LABEL + and ADDR_VEC or ADDR_DIFF_VEC. */ + if ((tmp = JUMP_LABEL (insn)) != NULL_RTX + && (tmp = NEXT_INSN (tmp)) != NULL_RTX + && GET_CODE (tmp) == JUMP_INSN + && (GET_CODE (PATTERN (tmp)) == ADDR_VEC + || GET_CODE (PATTERN (tmp)) == ADDR_DIFF_VEC)) + { + delete_insn_chain (JUMP_LABEL (insn), tmp); + } + + barrier = next_nonnote_insn (src->end); + if (!barrier || GET_CODE (barrier) != BARRIER) + emit_barrier_after (src->end); + } + + /* Keep only one edge out and set proper flags. */ + while (src->succ->succ_next) + remove_edge (src->succ); + e = src->succ; + if (fallthru) + e->flags = EDGE_FALLTHRU; + else + e->flags = 0; + + e->probability = REG_BR_PROB_BASE; + e->count = src->count; + + /* We don't want a block to end on a line-number note since that has + the potential of changing the code between -g and not -g. */ + while (GET_CODE (e->src->end) == NOTE + && NOTE_LINE_NUMBER (e->src->end) >= 0) + delete_insn (e->src->end); + + if (e->dest != target) + redirect_edge_succ (e, target); + + return true; + } + + /* Return last loop_beg note appearing after INSN, before start of next + basic block. Return INSN if there are no such notes. + + When emitting jump to redirect an fallthru edge, it should always appear + after the LOOP_BEG notes, as loop optimizer expect loop to either start by + fallthru edge or jump following the LOOP_BEG note jumping to the loop exit + test. */ + + static rtx + last_loop_beg_note (insn) + rtx insn; + { + rtx last = insn; + + for (insn = NEXT_INSN (insn); insn && GET_CODE (insn) == NOTE + && NOTE_LINE_NUMBER (insn) != NOTE_INSN_BASIC_BLOCK; + insn = NEXT_INSN (insn)) + if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG) + last = insn; + + return last; + } + + /* Attempt to change code to redirect edge E to TARGET. Don't do that on + expense of adding new instructions or reordering basic blocks. + + Function can be also called with edge destination equivalent to the TARGET. + Then it should try the simplifications and do nothing if none is possible. + + Return true if transformation succeeded. We still return false in case E + already destinated TARGET and we didn't managed to simplify instruction + stream. */ + + bool + redirect_edge_and_branch (e, target) + edge e; + basic_block target; + { + rtx tmp; + rtx old_label = e->dest->head; + basic_block src = e->src; + rtx insn = src->end; + + if (e->flags & (EDGE_ABNORMAL_CALL | EDGE_EH)) + return false; + + if (try_redirect_by_replacing_jump (e, target)) + return true; + + /* Do this fast path late, as we want above code to simplify for cases + where called on single edge leaving basic block containing nontrivial + jump insn. */ + else if (e->dest == target) + return false; + + /* We can only redirect non-fallthru edges of jump insn. */ + if (e->flags & EDGE_FALLTHRU) + return false; + else if (GET_CODE (insn) != JUMP_INSN) + return false; + + /* Recognize a tablejump and adjust all matching cases. */ + if ((tmp = JUMP_LABEL (insn)) != NULL_RTX + && (tmp = NEXT_INSN (tmp)) != NULL_RTX + && GET_CODE (tmp) == JUMP_INSN + && (GET_CODE (PATTERN (tmp)) == ADDR_VEC + || GET_CODE (PATTERN (tmp)) == ADDR_DIFF_VEC)) + { + rtvec vec; + int j; + rtx new_label = block_label (target); + + if (target == EXIT_BLOCK_PTR) + return false; + if (GET_CODE (PATTERN (tmp)) == ADDR_VEC) + vec = XVEC (PATTERN (tmp), 0); + else + vec = XVEC (PATTERN (tmp), 1); + + for (j = GET_NUM_ELEM (vec) - 1; j >= 0; --j) + if (XEXP (RTVEC_ELT (vec, j), 0) == old_label) + { + RTVEC_ELT (vec, j) = gen_rtx_LABEL_REF (Pmode, new_label); + --LABEL_NUSES (old_label); + ++LABEL_NUSES (new_label); + } + + /* Handle casesi dispatch insns */ + if ((tmp = single_set (insn)) != NULL + && SET_DEST (tmp) == pc_rtx + && GET_CODE (SET_SRC (tmp)) == IF_THEN_ELSE + && GET_CODE (XEXP (SET_SRC (tmp), 2)) == LABEL_REF + && XEXP (XEXP (SET_SRC (tmp), 2), 0) == old_label) + { + XEXP (SET_SRC (tmp), 2) = gen_rtx_LABEL_REF (VOIDmode, + new_label); + --LABEL_NUSES (old_label); + ++LABEL_NUSES (new_label); + } + } + else + { + /* ?? We may play the games with moving the named labels from + one basic block to the other in case only one computed_jump is + available. */ + if (computed_jump_p (insn) + /* A return instruction can't be redirected. */ + || returnjump_p (insn)) + return false; + + /* If the insn doesn't go where we think, we're confused. */ + if (JUMP_LABEL (insn) != old_label) + abort (); + + /* If the substitution doesn't succeed, die. This can happen + if the back end emitted unrecognizable instructions or if + target is exit block on some arches. */ + if (!redirect_jump (insn, block_label (target), 0)) + { + if (target == EXIT_BLOCK_PTR) + return false; + abort (); + } + } + + if (rtl_dump_file) + fprintf (rtl_dump_file, "Edge %i->%i redirected to %i\n", + e->src->index, e->dest->index, target->index); + + if (e->dest != target) + redirect_edge_succ_nodup (e, target); + + return true; + } + + /* Like force_nonfallthru below, but additionally performs redirection + Used by redirect_edge_and_branch_force. */ + + static basic_block + force_nonfallthru_and_redirect (e, target) + edge e; + basic_block target; + { + basic_block jump_block, new_bb = NULL; + rtx note; + edge new_edge; + + if (e->flags & EDGE_ABNORMAL) + abort (); + else if (!(e->flags & EDGE_FALLTHRU)) + abort (); + else if (e->src == ENTRY_BLOCK_PTR) + { + /* We can't redirect the entry block. Create an empty block at the + start of the function which we use to add the new jump. */ + edge *pe1; + basic_block bb = create_basic_block (0, e->dest->head, NULL); + + /* Change the existing edge's source to be the new block, and add + a new edge from the entry block to the new block. */ + e->src = bb; + bb->count = e->count; + bb->frequency = EDGE_FREQUENCY (e); + bb->loop_depth = 0; + for (pe1 = &ENTRY_BLOCK_PTR->succ; *pe1; pe1 = &(*pe1)->succ_next) + if (*pe1 == e) + { + *pe1 = e->succ_next; + break; + } + e->succ_next = 0; + bb->succ = e; + make_single_succ_edge (ENTRY_BLOCK_PTR, bb, EDGE_FALLTHRU); + } + + if (e->src->succ->succ_next) + { + /* Create the new structures. */ + note = last_loop_beg_note (e->src->end); + jump_block + = create_basic_block (e->src->index + 1, NEXT_INSN (note), NULL); + jump_block->count = e->count; + jump_block->frequency = EDGE_FREQUENCY (e); + jump_block->loop_depth = target->loop_depth; + + if (target->global_live_at_start) + { + jump_block->global_live_at_start + = OBSTACK_ALLOC_REG_SET (&flow_obstack); + jump_block->global_live_at_end + = OBSTACK_ALLOC_REG_SET (&flow_obstack); + COPY_REG_SET (jump_block->global_live_at_start, + target->global_live_at_start); + COPY_REG_SET (jump_block->global_live_at_end, + target->global_live_at_start); + } + + /* Wire edge in. */ + new_edge = make_edge (e->src, jump_block, EDGE_FALLTHRU); + new_edge->probability = e->probability; + new_edge->count = e->count; + + /* Redirect old edge. */ + redirect_edge_pred (e, jump_block); + e->probability = REG_BR_PROB_BASE; + + new_bb = jump_block; + } + else + jump_block = e->src; + + e->flags &= ~EDGE_FALLTHRU; + if (target == EXIT_BLOCK_PTR) + { + if (HAVE_return) + emit_jump_insn_after (gen_return (), jump_block->end); + else + abort (); + } + else + { + rtx label = block_label (target); + emit_jump_insn_after (gen_jump (label), jump_block->end); + JUMP_LABEL (jump_block->end) = label; + LABEL_NUSES (label)++; + } + + emit_barrier_after (jump_block->end); + redirect_edge_succ_nodup (e, target); + + return new_bb; + } + + /* Edge E is assumed to be fallthru edge. Emit needed jump instruction + (and possibly create new basic block) to make edge non-fallthru. + Return newly created BB or NULL if none. */ + + basic_block + force_nonfallthru (e) + edge e; + { + return force_nonfallthru_and_redirect (e, e->dest); + } + + /* Redirect edge even at the expense of creating new jump insn or + basic block. Return new basic block if created, NULL otherwise. + Abort if conversion is impossible. */ + + basic_block + redirect_edge_and_branch_force (e, target) + edge e; + basic_block target; + { + if (redirect_edge_and_branch (e, target) + || e->dest == target) + return NULL; + + /* In case the edge redirection failed, try to force it to be non-fallthru + and redirect newly created simplejump. */ + return force_nonfallthru_and_redirect (e, target); + } + + /* The given edge should potentially be a fallthru edge. If that is in + fact true, delete the jump and barriers that are in the way. */ + + void + tidy_fallthru_edge (e, b, c) + edge e; + basic_block b, c; + { + rtx q; + + /* ??? In a late-running flow pass, other folks may have deleted basic + blocks by nopping out blocks, leaving multiple BARRIERs between here + and the target label. They ought to be chastized and fixed. + + We can also wind up with a sequence of undeletable labels between + one block and the next. + + So search through a sequence of barriers, labels, and notes for + the head of block C and assert that we really do fall through. */ + + if (next_real_insn (b->end) != next_real_insn (PREV_INSN (c->head))) + return; + + /* Remove what will soon cease being the jump insn from the source block. + If block B consisted only of this single jump, turn it into a deleted + note. */ + q = b->end; + if (GET_CODE (q) == JUMP_INSN + && onlyjump_p (q) + && (any_uncondjump_p (q) + || (b->succ == e && e->succ_next == NULL))) + { + #ifdef HAVE_cc0 + /* If this was a conditional jump, we need to also delete + the insn that set cc0. */ + if (any_condjump_p (q) && only_sets_cc0_p (PREV_INSN (q))) + q = PREV_INSN (q); + #endif + + q = PREV_INSN (q); + + /* We don't want a block to end on a line-number note since that has + the potential of changing the code between -g and not -g. */ + while (GET_CODE (q) == NOTE && NOTE_LINE_NUMBER (q) >= 0) + q = PREV_INSN (q); + } + + /* Selectively unlink the sequence. */ + if (q != PREV_INSN (c->head)) + delete_insn_chain (NEXT_INSN (q), PREV_INSN (c->head)); + + e->flags |= EDGE_FALLTHRU; + } + + /* Fix up edges that now fall through, or rather should now fall through + but previously required a jump around now deleted blocks. Simplify + the search by only examining blocks numerically adjacent, since this + is how find_basic_blocks created them. */ + + void + tidy_fallthru_edges () + { + int i; + + for (i = 1; i < n_basic_blocks; i++) + { + basic_block b = BASIC_BLOCK (i - 1); + basic_block c = BASIC_BLOCK (i); + edge s; + + /* We care about simple conditional or unconditional jumps with + a single successor. + + If we had a conditional branch to the next instruction when + find_basic_blocks was called, then there will only be one + out edge for the block which ended with the conditional + branch (since we do not create duplicate edges). + + Furthermore, the edge will be marked as a fallthru because we + merge the flags for the duplicate edges. So we do not want to + check that the edge is not a FALLTHRU edge. */ + + if ((s = b->succ) != NULL + && ! (s->flags & EDGE_COMPLEX) + && s->succ_next == NULL + && s->dest == c + /* If the jump insn has side effects, we can't tidy the edge. */ + && (GET_CODE (b->end) != JUMP_INSN + || onlyjump_p (b->end))) + tidy_fallthru_edge (s, b, c); + } + } + + /* Helper function for split_edge. Return true in case edge BB2 to BB1 + is back edge of syntactic loop. */ + + static bool + back_edge_of_syntactic_loop_p (bb1, bb2) + basic_block bb1, bb2; + { + rtx insn; + int count = 0; + + if (bb1->index > bb2->index) + return false; + else if (bb1->index == bb2->index) + return true; + + for (insn = bb1->end; insn != bb2->head && count >= 0; + insn = NEXT_INSN (insn)) + if (GET_CODE (insn) == NOTE) + { + if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG) + count++; + else if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END) + count--; + } + + return count >= 0; + } + + /* Split a (typically critical) edge. Return the new block. + Abort on abnormal edges. + + ??? The code generally expects to be called on critical edges. + The case of a block ending in an unconditional jump to a + block with multiple predecessors is not handled optimally. */ + + basic_block + split_edge (edge_in) + edge edge_in; + { + basic_block bb; + edge edge_out; + rtx before; + + /* Abnormal edges cannot be split. */ + if ((edge_in->flags & EDGE_ABNORMAL) != 0) + abort (); + + /* We are going to place the new block in front of edge destination. + Avoid existence of fallthru predecessors. */ + if ((edge_in->flags & EDGE_FALLTHRU) == 0) + { + edge e; + + for (e = edge_in->dest->pred; e; e = e->pred_next) + if (e->flags & EDGE_FALLTHRU) + break; + + if (e) + force_nonfallthru (e); + } + + /* Create the basic block note. + + Where we place the note can have a noticeable impact on the generated + code. Consider this cfg: + + E + | + 0 + / \ + +->1-->2--->E + | | + +--+ + + If we need to insert an insn on the edge from block 0 to block 1, + we want to ensure the instructions we insert are outside of any + loop notes that physically sit between block 0 and block 1. Otherwise + we confuse the loop optimizer into thinking the loop is a phony. */ + + if (edge_in->dest != EXIT_BLOCK_PTR + && PREV_INSN (edge_in->dest->head) + && GET_CODE (PREV_INSN (edge_in->dest->head)) == NOTE + && (NOTE_LINE_NUMBER (PREV_INSN (edge_in->dest->head)) + == NOTE_INSN_LOOP_BEG) + && !back_edge_of_syntactic_loop_p (edge_in->dest, edge_in->src)) + before = PREV_INSN (edge_in->dest->head); + else if (edge_in->dest != EXIT_BLOCK_PTR) + before = edge_in->dest->head; + else + before = NULL_RTX; + + bb = create_basic_block (edge_in->dest == EXIT_BLOCK_PTR ? n_basic_blocks + : edge_in->dest->index, before, NULL); + bb->count = edge_in->count; + bb->frequency = EDGE_FREQUENCY (edge_in); + bb->loop_depth = edge_in->dest->loop_depth; + + /* ??? This info is likely going to be out of date very soon. */ + if (edge_in->dest->global_live_at_start) + { + bb->global_live_at_start = OBSTACK_ALLOC_REG_SET (&flow_obstack); + bb->global_live_at_end = OBSTACK_ALLOC_REG_SET (&flow_obstack); + COPY_REG_SET (bb->global_live_at_start, + edge_in->dest->global_live_at_start); + COPY_REG_SET (bb->global_live_at_end, + edge_in->dest->global_live_at_start); + } + + edge_out = make_single_succ_edge (bb, edge_in->dest, EDGE_FALLTHRU); + + /* For non-fallthry edges, we must adjust the predecessor's + jump instruction to target our new block. */ + if ((edge_in->flags & EDGE_FALLTHRU) == 0) + { + if (!redirect_edge_and_branch (edge_in, bb)) + abort (); + } + else + redirect_edge_succ (edge_in, bb); + + return bb; + } + + /* Queue instructions for insertion on an edge between two basic blocks. + The new instructions and basic blocks (if any) will not appear in the + CFG until commit_edge_insertions is called. */ + + void + insert_insn_on_edge (pattern, e) + rtx pattern; + edge e; + { + /* We cannot insert instructions on an abnormal critical edge. + It will be easier to find the culprit if we die now. */ + if ((e->flags & EDGE_ABNORMAL) && EDGE_CRITICAL_P (e)) + abort (); + + if (e->insns == NULL_RTX) + start_sequence (); + else + push_to_sequence (e->insns); + + emit_insn (pattern); + + e->insns = get_insns (); + end_sequence (); + } + + /* Update the CFG for the instructions queued on edge E. */ + + static void + commit_one_edge_insertion (e) + edge e; + { + rtx before = NULL_RTX, after = NULL_RTX, insns, tmp, last; + basic_block bb; + + /* Pull the insns off the edge now since the edge might go away. */ + insns = e->insns; + e->insns = NULL_RTX; + + /* Figure out where to put these things. If the destination has + one predecessor, insert there. Except for the exit block. */ + if (e->dest->pred->pred_next == NULL + && e->dest != EXIT_BLOCK_PTR) + { + bb = e->dest; + + /* Get the location correct wrt a code label, and "nice" wrt + a basic block note, and before everything else. */ + tmp = bb->head; + if (GET_CODE (tmp) == CODE_LABEL) + tmp = NEXT_INSN (tmp); + if (NOTE_INSN_BASIC_BLOCK_P (tmp)) + tmp = NEXT_INSN (tmp); + if (tmp == bb->head) + before = tmp; + else + after = PREV_INSN (tmp); + } + + /* If the source has one successor and the edge is not abnormal, + insert there. Except for the entry block. */ + else if ((e->flags & EDGE_ABNORMAL) == 0 + && e->src->succ->succ_next == NULL + && e->src != ENTRY_BLOCK_PTR) + { + bb = e->src; + + /* It is possible to have a non-simple jump here. Consider a target + where some forms of unconditional jumps clobber a register. This + happens on the fr30 for example. + + We know this block has a single successor, so we can just emit + the queued insns before the jump. */ + if (GET_CODE (bb->end) == JUMP_INSN) + for (before = bb->end; + GET_CODE (PREV_INSN (before)) == NOTE + && NOTE_LINE_NUMBER (PREV_INSN (before)) == NOTE_INSN_LOOP_BEG; + before = PREV_INSN (before)) + ; + else + { + /* We'd better be fallthru, or we've lost track of what's what. */ + if ((e->flags & EDGE_FALLTHRU) == 0) + abort (); + + after = bb->end; + } + } + + /* Otherwise we must split the edge. */ + else + { + bb = split_edge (e); + after = bb->end; + } + + /* Now that we've found the spot, do the insertion. */ + + if (before) + { + emit_insns_before (insns, before); + last = prev_nonnote_insn (before); + } + else + last = emit_insns_after (insns, after); + + if (returnjump_p (last)) + { + /* ??? Remove all outgoing edges from BB and add one for EXIT. + This is not currently a problem because this only happens + for the (single) epilogue, which already has a fallthru edge + to EXIT. */ + + e = bb->succ; + if (e->dest != EXIT_BLOCK_PTR + || e->succ_next != NULL + || (e->flags & EDGE_FALLTHRU) == 0) + abort (); + + e->flags &= ~EDGE_FALLTHRU; + emit_barrier_after (last); + + if (before) + delete_insn (before); + } + else if (GET_CODE (last) == JUMP_INSN) + abort (); + + find_sub_basic_blocks (bb); + } + + /* Update the CFG for all queued instructions. */ + + void + commit_edge_insertions () + { + int i; + basic_block bb; + + #ifdef ENABLE_CHECKING + verify_flow_info (); + #endif + + i = -1; + bb = ENTRY_BLOCK_PTR; + while (1) + { + edge e, next; + + for (e = bb->succ; e; e = next) + { + next = e->succ_next; + if (e->insns) + commit_one_edge_insertion (e); + } + + if (++i >= n_basic_blocks) + break; + bb = BASIC_BLOCK (i); + } + } + + /* Print out one basic block with live information at start and end. */ + + void + dump_bb (bb, outf) + basic_block bb; + FILE *outf; + { + rtx insn; + rtx last; + edge e; + + fprintf (outf, ";; Basic block %d, loop depth %d, count ", + bb->index, bb->loop_depth); + fprintf (outf, HOST_WIDEST_INT_PRINT_DEC, (HOST_WIDEST_INT) bb->count); + putc ('\n', outf); + + fputs (";; Predecessors: ", outf); + for (e = bb->pred; e; e = e->pred_next) + dump_edge_info (outf, e, 0); + putc ('\n', outf); + + fputs (";; Registers live at start:", outf); + dump_regset (bb->global_live_at_start, outf); + putc ('\n', outf); + + for (insn = bb->head, last = NEXT_INSN (bb->end); insn != last; + insn = NEXT_INSN (insn)) + print_rtl_single (outf, insn); + + fputs (";; Registers live at end:", outf); + dump_regset (bb->global_live_at_end, outf); + putc ('\n', outf); + + fputs (";; Successors: ", outf); + for (e = bb->succ; e; e = e->succ_next) + dump_edge_info (outf, e, 1); + putc ('\n', outf); + } + + void + debug_bb (bb) + basic_block bb; + { + dump_bb (bb, stderr); + } + + void + debug_bb_n (n) + int n; + { + dump_bb (BASIC_BLOCK (n), stderr); + } + + /* Like print_rtl, but also print out live information for the start of each + basic block. */ + + void + print_rtl_with_bb (outf, rtx_first) + FILE *outf; + rtx rtx_first; + { + rtx tmp_rtx; + + if (rtx_first == 0) + fprintf (outf, "(nil)\n"); + else + { + int i; + enum bb_state { NOT_IN_BB, IN_ONE_BB, IN_MULTIPLE_BB }; + int max_uid = get_max_uid (); + basic_block *start + = (basic_block *) xcalloc (max_uid, sizeof (basic_block)); + basic_block *end + = (basic_block *) xcalloc (max_uid, sizeof (basic_block)); + enum bb_state *in_bb_p + = (enum bb_state *) xcalloc (max_uid, sizeof (enum bb_state)); + + for (i = n_basic_blocks - 1; i >= 0; i--) + { + basic_block bb = BASIC_BLOCK (i); + rtx x; + + start[INSN_UID (bb->head)] = bb; + end[INSN_UID (bb->end)] = bb; + for (x = bb->head; x != NULL_RTX; x = NEXT_INSN (x)) + { + enum bb_state state = IN_MULTIPLE_BB; + + if (in_bb_p[INSN_UID (x)] == NOT_IN_BB) + state = IN_ONE_BB; + in_bb_p[INSN_UID (x)] = state; + + if (x == bb->end) + break; + } + } + + for (tmp_rtx = rtx_first; NULL != tmp_rtx; tmp_rtx = NEXT_INSN (tmp_rtx)) + { + int did_output; + basic_block bb; + + if ((bb = start[INSN_UID (tmp_rtx)]) != NULL) + { + fprintf (outf, ";; Start of basic block %d, registers live:", + bb->index); + dump_regset (bb->global_live_at_start, outf); + putc ('\n', outf); + } + + if (in_bb_p[INSN_UID (tmp_rtx)] == NOT_IN_BB + && GET_CODE (tmp_rtx) != NOTE + && GET_CODE (tmp_rtx) != BARRIER) + fprintf (outf, ";; Insn is not within a basic block\n"); + else if (in_bb_p[INSN_UID (tmp_rtx)] == IN_MULTIPLE_BB) + fprintf (outf, ";; Insn is in multiple basic blocks\n"); + + did_output = print_rtl_single (outf, tmp_rtx); + + if ((bb = end[INSN_UID (tmp_rtx)]) != NULL) + { + fprintf (outf, ";; End of basic block %d, registers live:\n", + bb->index); + dump_regset (bb->global_live_at_end, outf); + putc ('\n', outf); + } + + if (did_output) + putc ('\n', outf); + } + + free (start); + free (end); + free (in_bb_p); + } + + if (current_function_epilogue_delay_list != 0) + { + fprintf (outf, "\n;; Insns in epilogue delay list:\n\n"); + for (tmp_rtx = current_function_epilogue_delay_list; tmp_rtx != 0; + tmp_rtx = XEXP (tmp_rtx, 1)) + print_rtl_single (outf, XEXP (tmp_rtx, 0)); + } + } + + void + update_br_prob_note (bb) + basic_block bb; + { + rtx note; + if (GET_CODE (bb->end) != JUMP_INSN) + return; + note = find_reg_note (bb->end, REG_BR_PROB, NULL_RTX); + if (!note || INTVAL (XEXP (note, 0)) == BRANCH_EDGE (bb)->probability) + return; + XEXP (note, 0) = GEN_INT (BRANCH_EDGE (bb)->probability); + } + + /* Verify the CFG consistency. This function check some CFG invariants and + aborts when something is wrong. Hope that this function will help to + convert many optimization passes to preserve CFG consistent. + + Currently it does following checks: + + - test head/end pointers + - overlapping of basic blocks + - edge list correctness + - headers of basic blocks (the NOTE_INSN_BASIC_BLOCK note) + - tails of basic blocks (ensure that boundary is necessary) + - scans body of the basic block for JUMP_INSN, CODE_LABEL + and NOTE_INSN_BASIC_BLOCK + - check that all insns are in the basic blocks + (except the switch handling code, barriers and notes) + - check that all returns are followed by barriers + + In future it can be extended check a lot of other stuff as well + (reachability of basic blocks, life information, etc. etc.). */ + + void + verify_flow_info () + { + const int max_uid = get_max_uid (); + const rtx rtx_first = get_insns (); + rtx last_head = get_last_insn (); + basic_block *bb_info, *last_visited; + size_t *edge_checksum; + rtx x; + int i, last_bb_num_seen, num_bb_notes, err = 0; + + bb_info = (basic_block *) xcalloc (max_uid, sizeof (basic_block)); + last_visited = (basic_block *) xcalloc (n_basic_blocks + 2, + sizeof (basic_block)); + edge_checksum = (size_t *) xcalloc (n_basic_blocks + 2, sizeof (size_t)); + + for (i = n_basic_blocks - 1; i >= 0; i--) + { + basic_block bb = BASIC_BLOCK (i); + rtx head = bb->head; + rtx end = bb->end; + + /* Verify the end of the basic block is in the INSN chain. */ + for (x = last_head; x != NULL_RTX; x = PREV_INSN (x)) + if (x == end) + break; + + if (!x) + { + error ("end insn %d for block %d not found in the insn stream", + INSN_UID (end), bb->index); + err = 1; + } + + /* Work backwards from the end to the head of the basic block + to verify the head is in the RTL chain. */ + for (; x != NULL_RTX; x = PREV_INSN (x)) + { + /* While walking over the insn chain, verify insns appear + in only one basic block and initialize the BB_INFO array + used by other passes. */ + if (bb_info[INSN_UID (x)] != NULL) + { + error ("insn %d is in multiple basic blocks (%d and %d)", + INSN_UID (x), bb->index, bb_info[INSN_UID (x)]->index); + err = 1; + } + + bb_info[INSN_UID (x)] = bb; + + if (x == head) + break; + } + if (!x) + { + error ("head insn %d for block %d not found in the insn stream", + INSN_UID (head), bb->index); + err = 1; + } + + last_head = x; + } + + /* Now check the basic blocks (boundaries etc.) */ + for (i = n_basic_blocks - 1; i >= 0; i--) + { + basic_block bb = BASIC_BLOCK (i); + int has_fallthru = 0; + edge e; + + for (e = bb->succ; e; e = e->succ_next) + { + if (last_visited [e->dest->index + 2] == bb) + { + error ("verify_flow_info: Duplicate edge %i->%i", + e->src->index, e->dest->index); + err = 1; + } + + last_visited [e->dest->index + 2] = bb; + + if (e->flags & EDGE_FALLTHRU) + has_fallthru = 1; + + if ((e->flags & EDGE_FALLTHRU) + && e->src != ENTRY_BLOCK_PTR + && e->dest != EXIT_BLOCK_PTR) + { + rtx insn; + + if (e->src->index + 1 != e->dest->index) + { + error + ("verify_flow_info: Incorrect blocks for fallthru %i->%i", + e->src->index, e->dest->index); + err = 1; + } + else + for (insn = NEXT_INSN (e->src->end); insn != e->dest->head; + insn = NEXT_INSN (insn)) + if (GET_CODE (insn) == BARRIER + #ifndef CASE_DROPS_THROUGH + || INSN_P (insn) + #else + || (INSN_P (insn) && ! JUMP_TABLE_DATA_P (insn)) + #endif + ) + { + error ("verify_flow_info: Incorrect fallthru %i->%i", + e->src->index, e->dest->index); + fatal_insn ("wrong insn in the fallthru edge", insn); + err = 1; + } + } + + if (e->src != bb) + { + error ("verify_flow_info: Basic block %d succ edge is corrupted", + bb->index); + fprintf (stderr, "Predecessor: "); + dump_edge_info (stderr, e, 0); + fprintf (stderr, "\nSuccessor: "); + dump_edge_info (stderr, e, 1); + fprintf (stderr, "\n"); + err = 1; + } + + edge_checksum[e->dest->index + 2] += (size_t) e; + } + + if (!has_fallthru) + { + rtx insn; + + /* Ensure existence of barrier in BB with no fallthru edges. */ + for (insn = bb->end; !insn || GET_CODE (insn) != BARRIER; + insn = NEXT_INSN (insn)) + if (!insn + || (GET_CODE (insn) == NOTE + && NOTE_LINE_NUMBER (insn) == NOTE_INSN_BASIC_BLOCK)) + { + error ("missing barrier after block %i", bb->index); + err = 1; + break; + } + } + + for (e = bb->pred; e; e = e->pred_next) + { + if (e->dest != bb) + { + error ("basic block %d pred edge is corrupted", bb->index); + fputs ("Predecessor: ", stderr); + dump_edge_info (stderr, e, 0); + fputs ("\nSuccessor: ", stderr); + dump_edge_info (stderr, e, 1); + fputc ('\n', stderr); + err = 1; + } + edge_checksum[e->dest->index + 2] -= (size_t) e; + } + + for (x = bb->head; x != NEXT_INSN (bb->end); x = NEXT_INSN (x)) + if (basic_block_for_insn && BLOCK_FOR_INSN (x) != bb) + { + debug_rtx (x); + if (! BLOCK_FOR_INSN (x)) + error + ("insn %d inside basic block %d but block_for_insn is NULL", + INSN_UID (x), bb->index); + else + error + ("insn %d inside basic block %d but block_for_insn is %i", + INSN_UID (x), bb->index, BLOCK_FOR_INSN (x)->index); + + err = 1; + } + + /* OK pointers are correct. Now check the header of basic + block. It ought to contain optional CODE_LABEL followed + by NOTE_BASIC_BLOCK. */ + x = bb->head; + if (GET_CODE (x) == CODE_LABEL) + { + if (bb->end == x) + { + error ("NOTE_INSN_BASIC_BLOCK is missing for block %d", + bb->index); + err = 1; + } + + x = NEXT_INSN (x); + } + + if (!NOTE_INSN_BASIC_BLOCK_P (x) || NOTE_BASIC_BLOCK (x) != bb) + { + error ("NOTE_INSN_BASIC_BLOCK is missing for block %d", + bb->index); + err = 1; + } + + if (bb->end == x) + /* Do checks for empty blocks her. e */ + ; + else + for (x = NEXT_INSN (x); x; x = NEXT_INSN (x)) + { + if (NOTE_INSN_BASIC_BLOCK_P (x)) + { + error ("NOTE_INSN_BASIC_BLOCK %d in middle of basic block %d", + INSN_UID (x), bb->index); + err = 1; + } + + if (x == bb->end) + break; + + if (GET_CODE (x) == JUMP_INSN + || GET_CODE (x) == CODE_LABEL + || GET_CODE (x) == BARRIER) + { + error ("in basic block %d:", bb->index); + fatal_insn ("flow control insn inside a basic block", x); + } + } + } + + /* Complete edge checksumming for ENTRY and EXIT. */ + { + edge e; + + for (e = ENTRY_BLOCK_PTR->succ; e ; e = e->succ_next) + edge_checksum[e->dest->index + 2] += (size_t) e; + + for (e = EXIT_BLOCK_PTR->pred; e ; e = e->pred_next) + edge_checksum[e->dest->index + 2] -= (size_t) e; + } + + for (i = -2; i < n_basic_blocks; ++i) + if (edge_checksum[i + 2]) + { + error ("basic block %i edge lists are corrupted", i); + err = 1; + } + + last_bb_num_seen = -1; + num_bb_notes = 0; + for (x = rtx_first; x; x = NEXT_INSN (x)) + { + if (NOTE_INSN_BASIC_BLOCK_P (x)) + { + basic_block bb = NOTE_BASIC_BLOCK (x); + + num_bb_notes++; + if (bb->index != last_bb_num_seen + 1) + internal_error ("basic blocks not numbered consecutively"); + + last_bb_num_seen = bb->index; + } + + if (!bb_info[INSN_UID (x)]) + { + switch (GET_CODE (x)) + { + case BARRIER: + case NOTE: + break; + + case CODE_LABEL: + /* An addr_vec is placed outside any block block. */ + if (NEXT_INSN (x) + && GET_CODE (NEXT_INSN (x)) == JUMP_INSN + && (GET_CODE (PATTERN (NEXT_INSN (x))) == ADDR_DIFF_VEC + || GET_CODE (PATTERN (NEXT_INSN (x))) == ADDR_VEC)) + x = NEXT_INSN (x); + + /* But in any case, non-deletable labels can appear anywhere. */ + break; + + default: + fatal_insn ("insn outside basic block", x); + } + } + + if (INSN_P (x) + && GET_CODE (x) == JUMP_INSN + && returnjump_p (x) && ! condjump_p (x) + && ! (NEXT_INSN (x) && GET_CODE (NEXT_INSN (x)) == BARRIER)) + fatal_insn ("return not followed by barrier", x); + } + + if (num_bb_notes != n_basic_blocks) + internal_error + ("number of bb notes in insn chain (%d) != n_basic_blocks (%d)", + num_bb_notes, n_basic_blocks); + + if (err) + internal_error ("verify_flow_info failed"); + + /* Clean up. */ + free (bb_info); + free (last_visited); + free (edge_checksum); + } + + /* Assume that the preceding pass has possibly eliminated jump instructions + or converted the unconditional jumps. Eliminate the edges from CFG. + Return true if any edges are eliminated. */ + + bool + purge_dead_edges (bb) + basic_block bb; + { + edge e, next; + rtx insn = bb->end, note; + bool purged = false; + + /* If this instruction cannot trap, remove REG_EH_REGION notes. */ + if (GET_CODE (insn) == INSN + && (note = find_reg_note (insn, REG_EH_REGION, NULL))) + { + rtx eqnote; + + if (! may_trap_p (PATTERN (insn)) + || ((eqnote = find_reg_equal_equiv_note (insn)) + && ! may_trap_p (XEXP (eqnote, 0)))) + remove_note (insn, note); + } + + /* Cleanup abnormal edges caused by throwing insns that have been + eliminated. */ + if (! can_throw_internal (bb->end)) + for (e = bb->succ; e; e = next) + { + next = e->succ_next; + if (e->flags & EDGE_EH) + { + remove_edge (e); + purged = true; + } + } + + if (GET_CODE (insn) == JUMP_INSN) + { + rtx note; + edge b,f; + + /* We do care only about conditional jumps and simplejumps. */ + if (!any_condjump_p (insn) + && !returnjump_p (insn) + && !simplejump_p (insn)) + return false; + + for (e = bb->succ; e; e = next) + { + next = e->succ_next; + + /* Avoid abnormal flags to leak from computed jumps turned + into simplejumps. */ + + e->flags &= ~EDGE_ABNORMAL; + + /* Check purposes we can have edge. */ + if ((e->flags & EDGE_FALLTHRU) + && any_condjump_p (insn)) + continue; + else if (e->dest != EXIT_BLOCK_PTR + && e->dest->head == JUMP_LABEL (insn)) + continue; + else if (e->dest == EXIT_BLOCK_PTR + && returnjump_p (insn)) + continue; + + purged = true; + remove_edge (e); + } + + if (!bb->succ || !purged) + return false; + + if (rtl_dump_file) + fprintf (rtl_dump_file, "Purged edges from bb %i\n", bb->index); + + if (!optimize) + return purged; + + /* Redistribute probabilities. */ + if (!bb->succ->succ_next) + { + bb->succ->probability = REG_BR_PROB_BASE; + bb->succ->count = bb->count; + } + else + { + note = find_reg_note (insn, REG_BR_PROB, NULL); + if (!note) + return purged; + + b = BRANCH_EDGE (bb); + f = FALLTHRU_EDGE (bb); + b->probability = INTVAL (XEXP (note, 0)); + f->probability = REG_BR_PROB_BASE - b->probability; + b->count = bb->count * b->probability / REG_BR_PROB_BASE; + f->count = bb->count * f->probability / REG_BR_PROB_BASE; + } + + return purged; + } + + /* If we don't see a jump insn, we don't know exactly why the block would + have been broken at this point. Look for a simple, non-fallthru edge, + as these are only created by conditional branches. If we find such an + edge we know that there used to be a jump here and can then safely + remove all non-fallthru edges. */ + for (e = bb->succ; e && (e->flags & (EDGE_COMPLEX | EDGE_FALLTHRU)); + e = e->succ_next) + ; + + if (!e) + return purged; + + for (e = bb->succ; e; e = next) + { + next = e->succ_next; + if (!(e->flags & EDGE_FALLTHRU)) + remove_edge (e), purged = true; + } + + if (!bb->succ || bb->succ->succ_next) + abort (); + + bb->succ->probability = REG_BR_PROB_BASE; + bb->succ->count = bb->count; + + if (rtl_dump_file) + fprintf (rtl_dump_file, "Purged non-fallthru edges from bb %i\n", + bb->index); + return purged; + } + + /* Search all basic blocks for potentially dead edges and purge them. Return + true if some edge has been eliminated. */ + + bool + purge_all_dead_edges (update_life_p) + int update_life_p; + { + int i, purged = false; + sbitmap blocks = 0; + + if (update_life_p) + { + blocks = sbitmap_alloc (n_basic_blocks); + sbitmap_zero (blocks); + } + + for (i = 0; i < n_basic_blocks; i++) + { + bool purged_here = purge_dead_edges (BASIC_BLOCK (i)); + + purged |= purged_here; + if (purged_here && update_life_p) + SET_BIT (blocks, i); + } + + if (update_life_p && purged) + update_life_info (blocks, UPDATE_LIFE_GLOBAL, + PROP_DEATH_NOTES | PROP_SCAN_DEAD_CODE + | PROP_KILL_DEAD_CODE); + + if (update_life_p) + sbitmap_free (blocks); + return purged; + } diff -Nrc3pad gcc-3.0.4/gcc/collect2.c gcc-3.1/gcc/collect2.c *** gcc-3.0.4/gcc/collect2.c Fri Apr 27 19:37:03 2001 --- gcc-3.1/gcc/collect2.c Tue Feb 5 16:33:31 2002 *************** *** 1,27 **** /* Collect static initialization info into data structures that can be traversed by C++ initialization and finalization routines. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Chris Smith (csmith@convex.com). Heavily modified by Michael Meissner (meissner@cygnus.com), Per Bothner (bothner@cygnus.com), and John Gilmore (gnu@cygnus.com). ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* Build tables of static constructors and destructors and run ld. */ --- 1,27 ---- /* Collect static initialization info into data structures that can be traversed by C++ initialization and finalization routines. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Chris Smith (csmith@convex.com). Heavily modified by Michael Meissner (meissner@cygnus.com), Per Bothner (bothner@cygnus.com), and John Gilmore (gnu@cygnus.com). ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* Build tables of static constructors and destructors and run ld. */ *************** Boston, MA 02111-1307, USA. */ *** 33,39 **** # define SIGCHLD SIGCLD #endif ! #ifdef vfork /* Autoconf may define this to fork for us. */ # define VFORK_STRING "fork" #else # define VFORK_STRING "vfork" --- 33,39 ---- # define SIGCHLD SIGCLD #endif ! #ifdef vfork /* Autoconf may define this to fork for us. */ # define VFORK_STRING "fork" #else # define VFORK_STRING "vfork" *************** Boston, MA 02111-1307, USA. */ *** 154,159 **** --- 154,168 ---- /* This must match tree.h. */ #define DEFAULT_INIT_PRIORITY 65535 + #ifndef COLLECT_SHARED_INIT_FUNC + #define COLLECT_SHARED_INIT_FUNC(STREAM, FUNC) \ + fprintf ((STREAM), "void _GLOBAL__DI() {\n\t%s();\n}\n", (FUNC)) + #endif + #ifndef COLLECT_SHARED_FINI_FUNC + #define COLLECT_SHARED_FINI_FUNC(STREAM, FUNC) \ + fprintf ((STREAM), "void _GLOBAL__DD() {\n\t%s();\n}\n", (FUNC)) + #endif + #if defined (LDD_SUFFIX) || SUNOS4_SHARED_LIBRARIES #define SCAN_LIBRARIES #endif *************** int do_collecting = 1; *** 163,168 **** --- 172,181 ---- #else int do_collecting = 0; #endif + + /* Nonzero if we should suppress the automatic demangling of identifiers + in linker error messages. Set from COLLECT_NO_DEMANGLE. */ + int no_demangle; /* Linked lists of constructor and destructor names. */ *************** struct path_prefix *** 254,266 **** }; #ifdef COLLECT_EXPORT_LIST ! /* Lists to keep libraries to be scanned for global constructors/destructors. */ static struct head libs; /* list of libraries */ static struct path_prefix cmdline_lib_dirs; /* directories specified with -L */ static struct path_prefix libpath_lib_dirs; /* directories in LIBPATH */ static struct path_prefix *libpaths[3] = {&cmdline_lib_dirs, &libpath_lib_dirs, NULL}; ! static const char *libexts[3] = {"a", "so", NULL}; /* possible library extentions */ #endif static void handler PARAMS ((int)); --- 267,279 ---- }; #ifdef COLLECT_EXPORT_LIST ! /* Lists to keep libraries to be scanned for global constructors/destructors. */ static struct head libs; /* list of libraries */ static struct path_prefix cmdline_lib_dirs; /* directories specified with -L */ static struct path_prefix libpath_lib_dirs; /* directories in LIBPATH */ static struct path_prefix *libpaths[3] = {&cmdline_lib_dirs, &libpath_lib_dirs, NULL}; ! static const char *const libexts[3] = {"a", "so", NULL}; /* possible library extensions */ #endif static void handler PARAMS ((int)); *************** static void scan_libraries PARAMS ((cons *** 296,310 **** static int is_in_args PARAMS ((const char *, const char **, const char **)); #endif #ifdef COLLECT_EXPORT_LIST static int is_in_list PARAMS ((const char *, struct id *)); static void write_aix_file PARAMS ((FILE *, struct id *)); static char *resolve_lib_name PARAMS ((const char *)); static int ignore_library PARAMS ((const char *)); #endif static char *extract_string PARAMS ((const char **)); ! #ifdef NO_DUP2 ! int dup2 (oldfd, newfd) int oldfd; int newfd; --- 309,326 ---- static int is_in_args PARAMS ((const char *, const char **, const char **)); #endif #ifdef COLLECT_EXPORT_LIST + #if 0 static int is_in_list PARAMS ((const char *, struct id *)); + #endif static void write_aix_file PARAMS ((FILE *, struct id *)); static char *resolve_lib_name PARAMS ((const char *)); static int ignore_library PARAMS ((const char *)); #endif static char *extract_string PARAMS ((const char **)); ! #ifndef HAVE_DUP2 ! static int dup2 PARAMS ((int, int)); ! static int dup2 (oldfd, newfd) int oldfd; int newfd; *************** dup2 (oldfd, newfd) *** 323,329 **** return fd; } ! #endif /* Delete tempfiles and exit function. */ --- 339,345 ---- return fd; } ! #endif /* ! HAVE_DUP2 */ /* Delete tempfiles and exit function. */ *************** collect_exit (status) *** 359,377 **** void notice VPARAMS ((const char *msgid, ...)) { ! #ifndef ANSI_PROTOTYPES ! const char *msgid; ! #endif ! va_list ap; ! ! VA_START (ap, msgid); ! ! #ifndef ANSI_PROTOTYPES ! msgid = va_arg (ap, const char *); ! #endif vfprintf (stderr, _(msgid), ap); ! va_end (ap); } /* Die when sys call fails. */ --- 375,385 ---- void notice VPARAMS ((const char *msgid, ...)) { ! VA_OPEN (ap, msgid); ! VA_FIXEDARG (ap, const char *, msgid); vfprintf (stderr, _(msgid), ap); ! VA_CLOSE (ap); } /* Die when sys call fails. */ *************** notice VPARAMS ((const char *msgid, ...) *** 379,400 **** void fatal_perror VPARAMS ((const char * msgid, ...)) { - #ifndef ANSI_PROTOTYPES - const char *msgid; - #endif int e = errno; - va_list ap; - - VA_START (ap, msgid); ! #ifndef ANSI_PROTOTYPES ! msgid = va_arg (ap, const char *); ! #endif fprintf (stderr, "collect2: "); vfprintf (stderr, _(msgid), ap); fprintf (stderr, ": %s\n", xstrerror (e)); ! va_end (ap); collect_exit (FATAL_EXIT_CODE); } --- 387,401 ---- void fatal_perror VPARAMS ((const char * msgid, ...)) { int e = errno; ! VA_OPEN (ap, msgid); ! VA_FIXEDARG (ap, const char *, msgid); fprintf (stderr, "collect2: "); vfprintf (stderr, _(msgid), ap); fprintf (stderr, ": %s\n", xstrerror (e)); ! VA_CLOSE (ap); collect_exit (FATAL_EXIT_CODE); } *************** fatal_perror VPARAMS ((const char * msgi *** 404,424 **** void fatal VPARAMS ((const char * msgid, ...)) { ! #ifndef ANSI_PROTOTYPES ! const char *msgid; ! #endif ! va_list ap; ! ! VA_START (ap, msgid); ! ! #ifndef ANSI_PROTOTYPES ! msgid = va_arg (ap, const char *); ! #endif fprintf (stderr, "collect2: "); vfprintf (stderr, _(msgid), ap); fprintf (stderr, "\n"); ! va_end (ap); collect_exit (FATAL_EXIT_CODE); } --- 405,417 ---- void fatal VPARAMS ((const char * msgid, ...)) { ! VA_OPEN (ap, msgid); ! VA_FIXEDARG (ap, const char *, msgid); fprintf (stderr, "collect2: "); vfprintf (stderr, _(msgid), ap); fprintf (stderr, "\n"); ! VA_CLOSE (ap); collect_exit (FATAL_EXIT_CODE); } *************** fatal VPARAMS ((const char * msgid, ...) *** 428,448 **** void error VPARAMS ((const char * msgid, ...)) { ! #ifndef ANSI_PROTOTYPES ! const char * msgid; ! #endif ! va_list ap; ! ! VA_START (ap, msgid); ! ! #ifndef ANSI_PROTOTYPES ! msgid = va_arg (ap, const char *); ! #endif fprintf (stderr, "collect2: "); vfprintf (stderr, _(msgid), ap); fprintf (stderr, "\n"); ! va_end(ap); } /* In case obstack is linked in, and abort is defined to fancy_abort, --- 421,433 ---- void error VPARAMS ((const char * msgid, ...)) { ! VA_OPEN (ap, msgid); ! VA_FIXEDARG (ap, const char *, msgid); fprintf (stderr, "collect2: "); vfprintf (stderr, _(msgid), ap); fprintf (stderr, "\n"); ! VA_CLOSE(ap); } /* In case obstack is linked in, and abort is defined to fancy_abort, *************** dump_file (name) *** 522,528 **** const char *name; { FILE *stream = fopen (name, "r"); - int no_demangle = !! getenv ("COLLECT_NO_DEMANGLE"); if (stream == 0) return; --- 507,512 ---- *************** dump_file (name) *** 530,536 **** { int c; while (c = getc (stream), ! c != EOF && (ISALNUM (c) || c == '_' || c == '$' || c == '.')) obstack_1grow (&temporary_obstack, c); if (obstack_object_size (&temporary_obstack) > 0) { --- 514,520 ---- { int c; while (c = getc (stream), ! c != EOF && (ISIDNUM (c) || c == '$' || c == '.')) obstack_1grow (&temporary_obstack, c); if (obstack_object_size (&temporary_obstack) > 0) { *************** dump_file (name) *** 548,554 **** if (no_demangle) result = 0; else ! result = cplus_demangle (p, DMGL_PARAMS | DMGL_ANSI); if (result) { --- 532,538 ---- if (no_demangle) result = 0; else ! result = cplus_demangle (p, DMGL_PARAMS | DMGL_ANSI | DMGL_VERBOSE); if (result) { *************** dump_file (name) *** 556,562 **** fputs (result, stderr); diff = strlen (word) - strlen (result); ! while (diff > 0) --diff, putc (' ', stderr); while (diff < 0 && c == ' ') ++diff, c = getc (stream); --- 540,546 ---- fputs (result, stderr); diff = strlen (word) - strlen (result); ! while (diff > 0 && c == ' ') --diff, putc (' ', stderr); while (diff < 0 && c == ' ') ++diff, c = getc (stream); *************** static int *** 585,597 **** is_ctor_dtor (s) const char *s; { ! struct names { const char *name; int len; int ret; int two_underscores; }; ! register struct names *p; ! register int ch; ! register const char *orig_s = s; ! static struct names special[] = { { "GLOBAL__I_", sizeof ("GLOBAL__I_")-1, 1, 0 }, { "GLOBAL__D_", sizeof ("GLOBAL__D_")-1, 2, 0 }, { "GLOBAL__F_", sizeof ("GLOBAL__F_")-1, 5, 0 }, --- 569,582 ---- is_ctor_dtor (s) const char *s; { ! struct names { const char *const name; const int len; const int ret; ! const int two_underscores; }; ! const struct names *p; ! int ch; ! const char *orig_s = s; ! static const struct names special[] = { { "GLOBAL__I_", sizeof ("GLOBAL__I_")-1, 1, 0 }, { "GLOBAL__D_", sizeof ("GLOBAL__D_")-1, 2, 0 }, { "GLOBAL__F_", sizeof ("GLOBAL__F_")-1, 5, 0 }, *************** find_a_file (pprefix, name) *** 655,662 **** if (debug) fprintf (stderr, "Looking for '%s'\n", name); ! #ifdef EXECUTABLE_SUFFIX ! len += strlen (EXECUTABLE_SUFFIX); #endif temp = xmalloc (len); --- 640,647 ---- if (debug) fprintf (stderr, "Looking for '%s'\n", name); ! #ifdef HOST_EXECUTABLE_SUFFIX ! len += strlen (HOST_EXECUTABLE_SUFFIX); #endif temp = xmalloc (len); *************** find_a_file (pprefix, name) *** 679,689 **** return temp; } ! #ifdef EXECUTABLE_SUFFIX /* Some systems have a suffix for executable files. So try appending that. */ strcpy (temp, name); ! strcat (temp, EXECUTABLE_SUFFIX); if (access (temp, X_OK) == 0) return temp; --- 664,674 ---- return temp; } ! #ifdef HOST_EXECUTABLE_SUFFIX /* Some systems have a suffix for executable files. So try appending that. */ strcpy (temp, name); ! strcat (temp, HOST_EXECUTABLE_SUFFIX); if (access (temp, X_OK) == 0) return temp; *************** find_a_file (pprefix, name) *** 705,714 **** && access (temp, X_OK) == 0) return temp; ! #ifdef EXECUTABLE_SUFFIX /* Some systems have a suffix for executable files. So try appending that. */ ! strcat (temp, EXECUTABLE_SUFFIX); if (stat (temp, &st) >= 0 && ! S_ISDIR (st.st_mode) --- 690,699 ---- && access (temp, X_OK) == 0) return temp; ! #ifdef HOST_EXECUTABLE_SUFFIX /* Some systems have a suffix for executable files. So try appending that. */ ! strcat (temp, HOST_EXECUTABLE_SUFFIX); if (stat (temp, &st) >= 0 && ! S_ISDIR (st.st_mode) *************** main (argc, argv) *** 824,845 **** int argc; char *argv[]; { ! const char *ld_suffix = "ld"; ! const char *full_ld_suffix = ld_suffix; ! const char *real_ld_suffix = "real-ld"; ! const char *collect_ld_suffix = "collect-ld"; ! const char *nm_suffix = "nm"; ! const char *full_nm_suffix = nm_suffix; ! const char *gnm_suffix = "gnm"; ! const char *full_gnm_suffix = gnm_suffix; #ifdef LDD_SUFFIX ! const char *ldd_suffix = LDD_SUFFIX; ! const char *full_ldd_suffix = ldd_suffix; #endif ! const char *strip_suffix = "strip"; ! const char *full_strip_suffix = strip_suffix; ! const char *gstrip_suffix = "gstrip"; ! const char *full_gstrip_suffix = gstrip_suffix; const char *arg; FILE *outf; #ifdef COLLECT_EXPORT_LIST --- 809,856 ---- int argc; char *argv[]; { ! static const char *const ld_suffix = "ld"; ! static const char *const real_ld_suffix = "real-ld"; ! static const char *const collect_ld_suffix = "collect-ld"; ! static const char *const nm_suffix = "nm"; ! static const char *const gnm_suffix = "gnm"; #ifdef LDD_SUFFIX ! static const char *const ldd_suffix = LDD_SUFFIX; #endif ! static const char *const strip_suffix = "strip"; ! static const char *const gstrip_suffix = "gstrip"; ! ! #ifdef CROSS_COMPILE ! /* If we look for a program in the compiler directories, we just use ! the short name, since these directories are already system-specific. ! But it we look for a program in the system directories, we need to ! qualify the program name with the target machine. */ ! ! const char *const full_ld_suffix = ! concat(target_machine, "-", ld_suffix, NULL); ! const char *const full_nm_suffix = ! concat (target_machine, "-", nm_suffix, NULL); ! const char *const full_gnm_suffix = ! concat (target_machine, "-", gnm_suffix, NULL); ! #ifdef LDD_SUFFIX ! const char *const full_ldd_suffix = ! concat (target_machine, "-", ldd_suffix, NULL); ! #endif ! const char *const full_strip_suffix = ! concat (target_machine, "-", strip_suffix, NULL); ! const char *const full_gstrip_suffix = ! concat (target_machine, "-", gstrip_suffix, NULL); ! #else ! const char *const full_ld_suffix = ld_suffix; ! const char *const full_nm_suffix = nm_suffix; ! const char *const full_gnm_suffix = gnm_suffix; ! #ifdef LDD_SUFFIX ! const char *const full_ldd_suffix = ldd_suffix; ! #endif ! const char *const full_strip_suffix = strip_suffix; ! const char *const full_gstrip_suffix = gstrip_suffix; ! #endif /* CROSS_COMPILE */ ! const char *arg; FILE *outf; #ifdef COLLECT_EXPORT_LIST *************** main (argc, argv) *** 858,865 **** int first_file; int num_c_args = argc+9; #if defined (COLLECT2_HOST_INITIALIZATION) ! /* Perform system dependent initialization, if neccessary. */ COLLECT2_HOST_INITIALIZATION; #endif --- 869,881 ---- int first_file; int num_c_args = argc+9; + no_demangle = !! getenv ("COLLECT_NO_DEMANGLE"); + + /* Suppress demangling by the real linker, which may be broken. */ + putenv (xstrdup ("COLLECT_NO_DEMANGLE=")); + #if defined (COLLECT2_HOST_INITIALIZATION) ! /* Perform system dependent initialization, if necessary. */ COLLECT2_HOST_INITIALIZATION; #endif *************** main (argc, argv) *** 869,886 **** signal (SIGCHLD, SIG_DFL); #endif ! /* LC_CTYPE determines the character set used by the terminal so it has be set ! to output messages correctly. */ ! ! #ifdef HAVE_LC_MESSAGES ! setlocale (LC_CTYPE, ""); ! setlocale (LC_MESSAGES, ""); ! #else ! setlocale (LC_ALL, ""); ! #endif ! ! (void) bindtextdomain (PACKAGE, localedir); ! (void) textdomain (PACKAGE); /* Do not invoke xcalloc before this point, since locale needs to be set first, in case a diagnostic is issued. */ --- 885,891 ---- signal (SIGCHLD, SIG_DFL); #endif ! gcc_init_libintl (); /* Do not invoke xcalloc before this point, since locale needs to be set first, in case a diagnostic is issued. */ *************** main (argc, argv) *** 959,989 **** prefix_from_env ("COMPILER_PATH", &cpath); prefix_from_env ("PATH", &path); - #ifdef CROSS_COMPILE - /* If we look for a program in the compiler directories, we just use - the short name, since these directories are already system-specific. - But it we look for a program in the system directories, we need to - qualify the program name with the target machine. */ - - full_ld_suffix = concat(target_machine, "-", ld_suffix, NULL); - - #if 0 - full_gld_suffix = concat (target_machine, "-", gld_suffix, NULL); - #endif - - full_nm_suffix = concat (target_machine, "-", nm_suffix, NULL); - - full_gnm_suffix = concat (target_machine, "-", gnm_suffix, NULL); - - #ifdef LDD_SUFFIX - full_ldd_suffix = concat (target_machine, "-", ldd_suffix, NULL); - #endif - - full_strip_suffix = concat (target_machine, "-", strip_suffix, NULL); - - full_gstrip_suffix = concat (target_machine, "-", gstrip_suffix, NULL); - #endif /* CROSS_COMPILE */ - /* Try to discover a valid linker/nm/strip to use. */ /* Maybe we know the right file to use (if not cross). */ --- 964,969 ---- *************** main (argc, argv) *** 1100,1106 **** *c_ptr++ = obstack_copy0 (&permanent_obstack, q, strlen (q)); if (strcmp (q, "-EL") == 0 || strcmp (q, "-EB") == 0) *c_ptr++ = obstack_copy0 (&permanent_obstack, q, strlen (q)); ! if (strncmp (q, "-shared", sizeof ("-shared") - 1) == 0) shared_obj = 1; if (*q == '-' && q[1] == 'B') { --- 1080,1086 ---- *c_ptr++ = obstack_copy0 (&permanent_obstack, q, strlen (q)); if (strcmp (q, "-EL") == 0 || strcmp (q, "-EB") == 0) *c_ptr++ = obstack_copy0 (&permanent_obstack, q, strlen (q)); ! if (strcmp (q, "-shared") == 0) shared_obj = 1; if (*q == '-' && q[1] == 'B') { *************** main (argc, argv) *** 1279,1287 **** if (exports.first) { ! char *buf = xmalloc (strlen (export_file) + 5); ! ! sprintf (buf, "-bE:%s", export_file); *ld1++ = buf; *ld2++ = buf; --- 1259,1266 ---- if (exports.first) { ! char *buf = concat ("-bE:", export_file, NULL); ! *ld1++ = buf; *ld2++ = buf; *************** main (argc, argv) *** 1428,1434 **** return 0; } ! /* Sort ctor and dtor lists by priority. */ sort_ids (&constructors); sort_ids (&destructors); --- 1407,1413 ---- return 0; } ! /* Sort ctor and dtor lists by priority. */ sort_ids (&constructors); sort_ids (&destructors); *************** main (argc, argv) *** 1445,1457 **** /* Tell the linker that we have initializer and finalizer functions. */ #ifdef LD_INIT_SWITCH #ifdef COLLECT_EXPORT_LIST ! { ! /* option name + functions + colons + NULL */ ! char *buf = xmalloc (strlen (LD_INIT_SWITCH) ! + strlen(initname) + strlen(fininame) + 3); ! sprintf (buf, "%s:%s:%s", LD_INIT_SWITCH, initname, fininame); ! *ld2++ = buf; ! } #else *ld2++ = LD_INIT_SWITCH; *ld2++ = initname; --- 1424,1430 ---- /* Tell the linker that we have initializer and finalizer functions. */ #ifdef LD_INIT_SWITCH #ifdef COLLECT_EXPORT_LIST ! *ld2++ = concat (LD_INIT_SWITCH, ":", initname, ":", fininame, NULL); #else *ld2++ = LD_INIT_SWITCH; *ld2++ = initname; *************** main (argc, argv) *** 1466,1477 **** /* If we did not add export flag to link arguments before, add it to second link phase now. No new exports should have been added. */ if (! exports.first) ! { ! char *buf = xmalloc (strlen (export_file) + 5); ! ! sprintf (buf, "-bE:%s", export_file); ! *ld2++ = buf; ! } add_to_list (&exports, initname); add_to_list (&exports, fininame); --- 1439,1445 ---- /* If we did not add export flag to link arguments before, add it to second link phase now. No new exports should have been added. */ if (! exports.first) ! *ld2++ = concat ("-bE:", export_file, NULL); add_to_list (&exports, initname); add_to_list (&exports, fininame); *************** collect_execute (prog, argv, redir) *** 1636,1642 **** dup2 (stdout_save, STDOUT_FILENO); dup2 (stderr_save, STDERR_FILENO); ! /* Close reponse file. */ close (redir_handle); } --- 1604,1610 ---- dup2 (stdout_save, STDOUT_FILENO); dup2 (stderr_save, STDERR_FILENO); ! /* Close response file. */ close (redir_handle); } *************** extract_init_priority (name) *** 1715,1721 **** ++pos; pos += 10; /* strlen ("GLOBAL__X_") */ ! /* Extract init_p number from ctor/dtor name. */ pri = atoi (name + pos); return pri ? pri : DEFAULT_INIT_PRIORITY; } --- 1683,1689 ---- ++pos; pos += 10; /* strlen ("GLOBAL__X_") */ ! /* Extract init_p number from ctor/dtor name. */ pri = atoi (name + pos); return pri ? pri : DEFAULT_INIT_PRIORITY; } *************** is_in_args (string, args_begin, args_end *** 1798,1803 **** --- 1766,1772 ---- #ifdef COLLECT_EXPORT_LIST /* This function is really used only on AIX, but may be useful. */ + #if 0 static int is_in_list (prefix, list) const char *prefix; *************** is_in_list (prefix, list) *** 1811,1816 **** --- 1780,1786 ---- return 0; } #endif + #endif /* COLLECT_EXPORT_LIST */ /* Added for debugging purpose. */ #ifdef COLLECT_EXPORT_LIST *************** write_c_file_stat (stream, name) *** 1906,1918 **** notice ("\nwrite_c_file - output name is %s, prefix is %s\n", output_file, prefix); ! #define INIT_NAME_FORMAT "_GLOBAL__FI_%s" ! initname = xmalloc (strlen (prefix) + sizeof (INIT_NAME_FORMAT) - 2); ! sprintf (initname, INIT_NAME_FORMAT, prefix); ! ! #define FINI_NAME_FORMAT "_GLOBAL__FD_%s" ! fininame = xmalloc (strlen (prefix) + sizeof (FINI_NAME_FORMAT) - 2); ! sprintf (fininame, FINI_NAME_FORMAT, prefix); free (prefix); --- 1876,1883 ---- notice ("\nwrite_c_file - output name is %s, prefix is %s\n", output_file, prefix); ! initname = concat ("_GLOBAL__FI_", prefix, NULL); ! fininame = concat ("_GLOBAL__FD_", prefix, NULL); free (prefix); *************** write_c_file_stat (stream, name) *** 1988,1995 **** if (shared_obj) { ! fprintf (stream, "void _GLOBAL__DI() {\n\t%s();\n}\n", initname); ! fprintf (stream, "void _GLOBAL__DD() {\n\t%s();\n}\n", fininame); } } --- 1953,1960 ---- if (shared_obj) { ! COLLECT_SHARED_INIT_FUNC(stream, initname); ! COLLECT_SHARED_FINI_FUNC(stream, fininame); } } *************** libcompare (d1, d2) *** 2359,2365 **** /* It has a valid numeric extension, prefer this one. */ if (*e1 == '.' && e1[1] && ISDIGIT (e1[1])) return 1; ! /* It has a invalid numeric extension, must prefer the other one. */ else return -1; } --- 2324,2330 ---- /* It has a valid numeric extension, prefer this one. */ if (*e1 == '.' && e1[1] && ISDIGIT (e1[1])) return 1; ! /* It has an invalid numeric extension, must prefer the other one. */ else return -1; } *************** libcompare (d1, d2) *** 2368,2374 **** /* It has a valid numeric extension, prefer this one. */ if (*e2 == '.' && e2[1] && ISDIGIT (e2[1])) return -1; ! /* It has a invalid numeric extension, must prefer the other one. */ else return 1; } --- 2333,2339 ---- /* It has a valid numeric extension, prefer this one. */ if (*e2 == '.' && e2[1] && ISDIGIT (e2[1])) return -1; ! /* It has an invalid numeric extension, must prefer the other one. */ else return 1; } *************** if (debug) fprintf (stderr, "found: %s\n *** 2941,2953 **** if (debug) fprintf (stderr, "not found\n"); else ! fatal ("Library lib%s not found", name); return (NULL); } /* Array of standard AIX libraries which should not be scanned for ctors/dtors. */ ! static const char *aix_std_libs[] = { "/unix", "/lib/libc.a", "/lib/libm.a", --- 2906,2918 ---- if (debug) fprintf (stderr, "not found\n"); else ! fatal ("library lib%s not found", name); return (NULL); } /* Array of standard AIX libraries which should not be scanned for ctors/dtors. */ ! static const char *const aix_std_libs[] = { "/unix", "/lib/libc.a", "/lib/libm.a", *************** static const char *aix_std_libs[] = { *** 2966,2977 **** }; /* This function checks the filename and returns 1 ! if this name matches the location of a standard AIX library. */ static int ignore_library (name) const char *name; { ! const char **p = &aix_std_libs[0]; while (*p++ != NULL) if (! strcmp (name, *p)) return 1; return 0; --- 2931,2942 ---- }; /* This function checks the filename and returns 1 ! if this name matches the location of a standard AIX library. */ static int ignore_library (name) const char *name; { ! const char *const *p = &aix_std_libs[0]; while (*p++ != NULL) if (! strcmp (name, *p)) return 1; return 0; diff -Nrc3pad gcc-3.0.4/gcc/collect2.h gcc-3.1/gcc/collect2.h *** gcc-3.0.4/gcc/collect2.h Fri Sep 3 19:13:34 1999 --- gcc-3.1/gcc/collect2.h Wed Aug 22 14:34:47 2001 *************** *** 1,25 **** /* Header file for collect/tlink routines. Copyright (C) 1998 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. */ ! #ifndef __COLLECT2_H__ ! #define __COLLECT2_H__ extern void do_tlink PARAMS ((char **, char **)); --- 1,25 ---- /* Header file for collect/tlink routines. Copyright (C) 1998 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ ! #ifndef GCC_COLLECT2_H ! #define GCC_COLLECT2_H extern void do_tlink PARAMS ((char **, char **)); *************** extern void fatal PARAMS ((const char *, *** 48,51 **** extern void fatal_perror PARAMS ((const char *, ...)) ATTRIBUTE_PRINTF_1 ATTRIBUTE_NORETURN; ! #endif /* ! __COLLECT2_H__ */ --- 48,51 ---- extern void fatal_perror PARAMS ((const char *, ...)) ATTRIBUTE_PRINTF_1 ATTRIBUTE_NORETURN; ! #endif /* ! GCC_COLLECT2_H */ diff -Nrc3pad gcc-3.0.4/gcc/combine.c gcc-3.1/gcc/combine.c *** gcc-3.0.4/gcc/combine.c Mon Nov 5 19:10:32 2001 --- gcc-3.1/gcc/combine.c Tue Apr 30 00:42:48 2002 *************** *** 1,23 **** /* Optimize by combining instructions for GNU compiler. Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* This module is essentially the "combiner" phase of the U. of Arizona Portable Optimizer, but redone to work on our list-structured --- 1,23 ---- /* Optimize by combining instructions for GNU compiler. Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* This module is essentially the "combiner" phase of the U. of Arizona Portable Optimizer, but redone to work on our list-structured *************** Boston, MA 02111-1307, USA. */ *** 84,90 **** #include "basic-block.h" #include "insn-config.h" #include "function.h" ! /* Include expr.h after insn-config.h so we get HAVE_conditional_move. */ #include "expr.h" #include "insn-attr.h" #include "recog.h" --- 84,90 ---- #include "basic-block.h" #include "insn-config.h" #include "function.h" ! /* Include expr.h after insn-config.h so we get HAVE_conditional_move. */ #include "expr.h" #include "insn-attr.h" #include "recog.h" *************** static int max_uid_cuid; *** 135,141 **** BITS_PER_WORD would invoke undefined behavior. Work around it. */ #define UWIDE_SHIFT_LEFT_BY_BITS_PER_WORD(val) \ ! (((unsigned HOST_WIDE_INT)(val) << (BITS_PER_WORD - 1)) << 1) /* Maximum register number, which is the size of the tables below. */ --- 135,141 ---- BITS_PER_WORD would invoke undefined behavior. Work around it. */ #define UWIDE_SHIFT_LEFT_BY_BITS_PER_WORD(val) \ ! (((unsigned HOST_WIDE_INT) (val) << (BITS_PER_WORD - 1)) << 1) /* Maximum register number, which is the size of the tables below. */ *************** struct undo *** 322,339 **** num_undo says how many are currently recorded. other_insn is nonzero if we have modified some other insn in the process ! of working on subst_insn. It must be verified too. ! ! previous_undos is the value of undobuf.undos when we started processing ! this substitution. This will prevent gen_rtx_combine from re-used a piece ! from the previous expression. Doing so can produce circular rtl ! structures. */ struct undobuf { struct undo *undos; struct undo *frees; - struct undo *previous_undos; rtx other_insn; }; --- 322,333 ---- num_undo says how many are currently recorded. other_insn is nonzero if we have modified some other insn in the process ! of working on subst_insn. It must be verified too. */ struct undobuf { struct undo *undos; struct undo *frees; rtx other_insn; }; *************** static rtx simplify_shift_const PARAMS ( *** 391,402 **** rtx, int)); static int recog_for_combine PARAMS ((rtx *, rtx, rtx *)); static rtx gen_lowpart_for_combine PARAMS ((enum machine_mode, rtx)); - static rtx gen_rtx_combine PARAMS ((enum rtx_code code, enum machine_mode mode, - ...)); static rtx gen_binary PARAMS ((enum rtx_code, enum machine_mode, rtx, rtx)); - static rtx gen_unary PARAMS ((enum rtx_code, enum machine_mode, - enum machine_mode, rtx)); static enum rtx_code simplify_comparison PARAMS ((enum rtx_code, rtx *, rtx *)); static void update_table_tick PARAMS ((rtx)); static void record_value_for_reg PARAMS ((rtx, rtx, rtx)); --- 385,392 ---- *************** do_SUBST (into, newval) *** 434,439 **** --- 424,456 ---- if (oldval == newval) return; + /* We'd like to catch as many invalid transformations here as + possible. Unfortunately, there are way too many mode changes + that are perfectly valid, so we'd waste too much effort for + little gain doing the checks here. Focus on catching invalid + transformations involving integer constants. */ + if (GET_MODE_CLASS (GET_MODE (oldval)) == MODE_INT + && GET_CODE (newval) == CONST_INT) + { + /* Sanity check that we're replacing oldval with a CONST_INT + that is a valid sign-extension for the original mode. */ + if (INTVAL (newval) != trunc_int_for_mode (INTVAL (newval), + GET_MODE (oldval))) + abort (); + + /* Replacing the operand of a SUBREG or a ZERO_EXTEND with a + CONST_INT is not valid, because after the replacement, the + original mode would be gone. Unfortunately, we can't tell + when do_SUBST is called to replace the operand thereof, so we + perform this test on oldval instead, checking whether an + invalid replacement took place before we got here. */ + if ((GET_CODE (oldval) == SUBREG + && GET_CODE (SUBREG_REG (oldval)) == CONST_INT) + || (GET_CODE (oldval) == ZERO_EXTEND + && GET_CODE (XEXP (oldval, 0)) == CONST_INT)) + abort (); + } + if (undobuf.frees) buf = undobuf.frees, undobuf.frees = buf->next; else *************** combine_instructions (f, nregs) *** 488,499 **** rtx f; unsigned int nregs; { ! register rtx insn, next; #ifdef HAVE_cc0 ! register rtx prev; #endif ! register int i; ! register rtx links, nextlinks; int new_direct_jump_p = 0; --- 505,516 ---- rtx f; unsigned int nregs; { ! rtx insn, next; #ifdef HAVE_cc0 ! rtx prev; #endif ! int i; ! rtx links, nextlinks; int new_direct_jump_p = 0; *************** combine_instructions (f, nregs) *** 632,645 **** rtx link = XEXP (links, 0); /* If the linked insn has been replaced by a note, then there ! is no point in persuing this chain any further. */ if (GET_CODE (link) == NOTE) ! break; for (nextlinks = LOG_LINKS (link); nextlinks; nextlinks = XEXP (nextlinks, 1)) ! if ((next = try_combine (insn, XEXP (links, 0), XEXP (nextlinks, 0), &new_direct_jump_p)) != 0) goto retry; --- 649,662 ---- rtx link = XEXP (links, 0); /* If the linked insn has been replaced by a note, then there ! is no point in pursuing this chain any further. */ if (GET_CODE (link) == NOTE) ! continue; for (nextlinks = LOG_LINKS (link); nextlinks; nextlinks = XEXP (nextlinks, 1)) ! if ((next = try_combine (insn, link, XEXP (nextlinks, 0), &new_direct_jump_p)) != 0) goto retry; *************** combine_instructions (f, nregs) *** 723,731 **** } } if (need_refresh) { - compute_bb_for_insn (get_max_uid ()); update_life_info (refresh_blocks, UPDATE_LIFE_GLOBAL_RM_NOTES, PROP_DEATH_NOTES); } --- 740,749 ---- } } + delete_noop_moves (f); + if (need_refresh) { update_life_info (refresh_blocks, UPDATE_LIFE_GLOBAL_RM_NOTES, PROP_DEATH_NOTES); } *************** set_nonzero_bits_and_sign_copies (x, set *** 886,893 **** << GET_MODE_BITSIZE (GET_MODE (x)))); #endif ! reg_nonzero_bits[REGNO (x)] ! |= nonzero_bits (src, nonzero_bits_mode); num = num_sign_bit_copies (SET_SRC (set), GET_MODE (x)); if (reg_sign_bit_copies[REGNO (x)] == 0 || reg_sign_bit_copies[REGNO (x)] > num) --- 904,913 ---- << GET_MODE_BITSIZE (GET_MODE (x)))); #endif ! /* Don't call nonzero_bits if it cannot change anything. */ ! if (reg_nonzero_bits[REGNO (x)] != ~(unsigned HOST_WIDE_INT) 0) ! reg_nonzero_bits[REGNO (x)] ! |= nonzero_bits (src, nonzero_bits_mode); num = num_sign_bit_copies (SET_SRC (set), GET_MODE (x)); if (reg_sign_bit_copies[REGNO (x)] == 0 || reg_sign_bit_copies[REGNO (x)] > num) *************** can_combine_p (insn, i3, pred, succ, pde *** 959,975 **** for the SH4 port. */ case USE: /* Combining an isolated USE doesn't make sense. ! We depend here on combinable_i3_pat to reject them. */ /* The code below this loop only verifies that the inputs of the SET in INSN do not change. We call reg_set_between_p ! to verify that the REG in the USE does not change betweeen I3 and INSN. If the USE in INSN was for a pseudo register, the matching insn pattern will likely match any register; combining this with any other USE would only be safe if we knew that the used registers have identical values, or if there was something to tell them apart, e.g. different modes. For ! now, we forgo such compilcated tests and simply disallow combining of USES of pseudo registers with any other USE. */ if (GET_CODE (XEXP (elt, 0)) == REG && GET_CODE (PATTERN (i3)) == PARALLEL) --- 979,995 ---- for the SH4 port. */ case USE: /* Combining an isolated USE doesn't make sense. ! We depend here on combinable_i3pat to reject them. */ /* The code below this loop only verifies that the inputs of the SET in INSN do not change. We call reg_set_between_p ! to verify that the REG in the USE does not change between I3 and INSN. If the USE in INSN was for a pseudo register, the matching insn pattern will likely match any register; combining this with any other USE would only be safe if we knew that the used registers have identical values, or if there was something to tell them apart, e.g. different modes. For ! now, we forgo such complicated tests and simply disallow combining of USES of pseudo registers with any other USE. */ if (GET_CODE (XEXP (elt, 0)) == REG && GET_CODE (PATTERN (i3)) == PARALLEL) *************** can_combine_p (insn, i3, pred, succ, pde *** 1143,1149 **** for (p = NEXT_INSN (insn); p != i3; p = NEXT_INSN (p)) if (INSN_P (p) && p != succ && volatile_refs_p (PATTERN (p))) ! return 0; } /* If INSN is an asm, and DEST is a hard register, reject, since it has --- 1163,1169 ---- for (p = NEXT_INSN (insn); p != i3; p = NEXT_INSN (p)) if (INSN_P (p) && p != succ && volatile_refs_p (PATTERN (p))) ! return 0; } /* If INSN is an asm, and DEST is a hard register, reject, since it has *************** sets_function_arg_p (pat) *** 1255,1261 **** This is NOT equivalent to: (parallel [(set (subreg:SI (reg:DI 100) 0) ) ! (set (reg:DI 101) (reg:DI 100))]) Not only does this modify 100 (in which case it might still be valid if 100 were dead in I2), it sets 101 to the ORIGINAL value of 100. --- 1275,1281 ---- This is NOT equivalent to: (parallel [(set (subreg:SI (reg:DI 100) 0) ) ! (set (reg:DI 101) (reg:DI 100))]) Not only does this modify 100 (in which case it might still be valid if 100 were dead in I2), it sets 101 to the ORIGINAL value of 100. *************** cant_combine_insn_p (insn) *** 1431,1437 **** { rtx set; rtx src, dest; ! /* If this isn't really an insn, we can't do anything. This can occur when flow deletes an insn that it has merged into an auto-increment address. */ --- 1451,1457 ---- { rtx set; rtx src, dest; ! /* If this isn't really an insn, we can't do anything. This can occur when flow deletes an insn that it has merged into an auto-increment address. */ *************** cant_combine_insn_p (insn) *** 1482,1492 **** static rtx try_combine (i3, i2, i1, new_direct_jump_p) ! register rtx i3, i2, i1; ! register int *new_direct_jump_p; { /* New patterns for I3 and I2, respectively. */ rtx newpat, newi2pat = 0; /* Indicates need to preserve SET in I1 or I2 in I3 if it is not dead. */ int added_sets_1, added_sets_2; /* Total number of SETs to put into I3. */ --- 1502,1513 ---- static rtx try_combine (i3, i2, i1, new_direct_jump_p) ! rtx i3, i2, i1; ! int *new_direct_jump_p; { /* New patterns for I3 and I2, respectively. */ rtx newpat, newi2pat = 0; + int substed_i2 = 0, substed_i1 = 0; /* Indicates need to preserve SET in I1 or I2 in I3 if it is not dead. */ int added_sets_1, added_sets_2; /* Total number of SETs to put into I3. */ *************** try_combine (i3, i2, i1, new_direct_jump *** 1515,1521 **** int maxreg; rtx temp; ! register rtx link; int i; /* Exit early if one of the insns involved can't be used for --- 1536,1542 ---- int maxreg; rtx temp; ! rtx link; int i; /* Exit early if one of the insns involved can't be used for *************** try_combine (i3, i2, i1, new_direct_jump *** 1659,1665 **** abort (); lo &= ~(UWIDE_SHIFT_LEFT_BY_BITS_PER_WORD (1) - 1); ! lo |= INTVAL (SET_SRC (PATTERN (i3))); } else if (HOST_BITS_PER_WIDE_INT == BITS_PER_WORD) hi = INTVAL (SET_SRC (PATTERN (i3))); --- 1680,1687 ---- abort (); lo &= ~(UWIDE_SHIFT_LEFT_BY_BITS_PER_WORD (1) - 1); ! lo |= (INTVAL (SET_SRC (PATTERN (i3))) ! & (UWIDE_SHIFT_LEFT_BY_BITS_PER_WORD (1) - 1)); } else if (HOST_BITS_PER_WIDE_INT == BITS_PER_WORD) hi = INTVAL (SET_SRC (PATTERN (i3))); *************** try_combine (i3, i2, i1, new_direct_jump *** 1781,1787 **** /* If I3 has an inc, then give up if I1 or I2 uses the reg that is inc'd. We used to do this EXCEPT in one case: I3 has a post-inc in an output operand. However, that exception can give rise to insns like ! mov r3,(r3)+ which is a famous insn on the PDP-11 where the value of r3 used as the source was model-dependent. Avoid this sort of thing. */ --- 1803,1809 ---- /* If I3 has an inc, then give up if I1 or I2 uses the reg that is inc'd. We used to do this EXCEPT in one case: I3 has a post-inc in an output operand. However, that exception can give rise to insns like ! mov r3,(r3)+ which is a famous insn on the PDP-11 where the value of r3 used as the source was model-dependent. Avoid this sort of thing. */ *************** try_combine (i3, i2, i1, new_direct_jump *** 1873,1880 **** subst_low_cuid = INSN_CUID (i2); i2src = subst (i2src, pc_rtx, pc_rtx, 0, 0); } - - undobuf.previous_undos = undobuf.undos; } #ifndef HAVE_cc0 --- 1895,1900 ---- *************** try_combine (i3, i2, i1, new_direct_jump *** 1930,1937 **** SUBST (SET_DEST (newpat), new_dest); SUBST (XEXP (*cc_use, 0), new_dest); SUBST (SET_SRC (newpat), ! gen_rtx_combine (COMPARE, compare_mode, ! i2src, const0_rtx)); } else undobuf.other_insn = 0; --- 1950,1956 ---- SUBST (SET_DEST (newpat), new_dest); SUBST (XEXP (*cc_use, 0), new_dest); SUBST (SET_SRC (newpat), ! gen_rtx_COMPARE (compare_mode, i2src, const0_rtx)); } else undobuf.other_insn = 0; *************** try_combine (i3, i2, i1, new_direct_jump *** 1950,1956 **** subst_low_cuid = INSN_CUID (i2); newpat = subst (PATTERN (i3), i2dest, i2src, 0, ! i1_feeds_i3 && i1dest_in_i1src); ! undobuf.previous_undos = undobuf.undos; /* Record whether i2's body now appears within i3's body. */ i2_is_used = n_occurrences; --- 1969,1975 ---- subst_low_cuid = INSN_CUID (i2); newpat = subst (PATTERN (i3), i2dest, i2src, 0, ! i1_feeds_i3 && i1dest_in_i1src); ! substed_i2 = 1; /* Record whether i2's body now appears within i3's body. */ i2_is_used = n_occurrences; *************** try_combine (i3, i2, i1, new_direct_jump *** 1966,1972 **** isn't mentioned in any SETs in NEWPAT that are field assignments. */ if (! combinable_i3pat (NULL_RTX, &newpat, i1dest, NULL_RTX, ! 0, NULL_PTR)) { undo_all (); return 0; --- 1985,1991 ---- isn't mentioned in any SETs in NEWPAT that are field assignments. */ if (! combinable_i3pat (NULL_RTX, &newpat, i1dest, NULL_RTX, ! 0, (rtx*) 0)) { undo_all (); return 0; *************** try_combine (i3, i2, i1, new_direct_jump *** 1975,1981 **** n_occurrences = 0; subst_low_cuid = INSN_CUID (i1); newpat = subst (newpat, i1dest, i1src, 0, 0); ! undobuf.previous_undos = undobuf.undos; } /* Fail if an autoincrement side-effect has been duplicated. Be careful --- 1994,2000 ---- n_occurrences = 0; subst_low_cuid = INSN_CUID (i1); newpat = subst (newpat, i1dest, i1src, 0, 0); ! substed_i1 = 1; } /* Fail if an autoincrement side-effect has been duplicated. Be careful *************** try_combine (i3, i2, i1, new_direct_jump *** 2013,2020 **** rtvec old = XVEC (newpat, 0); total_sets = XVECLEN (newpat, 0) + added_sets_1 + added_sets_2; newpat = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (total_sets)); ! bcopy ((char *) &old->elem[0], (char *) XVEC (newpat, 0)->elem, ! sizeof (old->elem[0]) * old->num_elem); } else { --- 2032,2039 ---- rtvec old = XVEC (newpat, 0); total_sets = XVECLEN (newpat, 0) + added_sets_1 + added_sets_2; newpat = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (total_sets)); ! memcpy (XVEC (newpat, 0)->elem, &old->elem[0], ! sizeof (old->elem[0]) * old->num_elem); } else { *************** try_combine (i3, i2, i1, new_direct_jump *** 2024,2046 **** XVECEXP (newpat, 0, 0) = old; } ! if (added_sets_1) ! XVECEXP (newpat, 0, --total_sets) ! = (GET_CODE (PATTERN (i1)) == PARALLEL ! ? gen_rtx_SET (VOIDmode, i1dest, i1src) : PATTERN (i1)); ! if (added_sets_2) ! { ! /* If there is no I1, use I2's body as is. We used to also not do ! the subst call below if I2 was substituted into I3, ! but that could lose a simplification. */ ! if (i1 == 0) ! XVECEXP (newpat, 0, --total_sets) = i2pat; ! else ! /* See comment where i2pat is assigned. */ ! XVECEXP (newpat, 0, --total_sets) ! = subst (i2pat, i1dest, i1src, 0, 0); ! } } /* We come here when we are replacing a destination in I2 with the --- 2043,2065 ---- XVECEXP (newpat, 0, 0) = old; } ! if (added_sets_1) ! XVECEXP (newpat, 0, --total_sets) ! = (GET_CODE (PATTERN (i1)) == PARALLEL ! ? gen_rtx_SET (VOIDmode, i1dest, i1src) : PATTERN (i1)); ! if (added_sets_2) ! { ! /* If there is no I1, use I2's body as is. We used to also not do ! the subst call below if I2 was substituted into I3, ! but that could lose a simplification. */ ! if (i1 == 0) ! XVECEXP (newpat, 0, --total_sets) = i2pat; ! else ! /* See comment where i2pat is assigned. */ ! XVECEXP (newpat, 0, --total_sets) ! = subst (i2pat, i1dest, i1src, 0, 0); ! } } /* We come here when we are replacing a destination in I2 with the *************** try_combine (i3, i2, i1, new_direct_jump *** 2132,2145 **** gen_rtx_CLOBBER (VOIDmode, ni2dest))), i3); } if (m_split && GET_CODE (m_split) != SEQUENCE) { insn_code_number = recog_for_combine (&m_split, i3, &new_i3_notes); if (insn_code_number >= 0) newpat = m_split; ! } else if (m_split && GET_CODE (m_split) == SEQUENCE && XVECLEN (m_split, 0) == 2 && (next_real_insn (i2) == i3 --- 2151,2182 ---- gen_rtx_CLOBBER (VOIDmode, ni2dest))), i3); + /* If the split with the mode-changed register didn't work, try + the original register. */ + if (! m_split && ni2dest != i2dest) + { + ni2dest = i2dest; + m_split = split_insns (gen_rtx_PARALLEL + (VOIDmode, + gen_rtvec (2, newpat, + gen_rtx_CLOBBER (VOIDmode, + i2dest))), + i3); + } } + /* If we've split a jump pattern, we'll wind up with a sequence even + with one instruction. We can handle that below, so extract it. */ + if (m_split && GET_CODE (m_split) == SEQUENCE + && XVECLEN (m_split, 0) == 1) + m_split = PATTERN (XVECEXP (m_split, 0, 0)); + if (m_split && GET_CODE (m_split) != SEQUENCE) { insn_code_number = recog_for_combine (&m_split, i3, &new_i3_notes); if (insn_code_number >= 0) newpat = m_split; ! } else if (m_split && GET_CODE (m_split) == SEQUENCE && XVECLEN (m_split, 0) == 2 && (next_real_insn (i2) == i3 *************** try_combine (i3, i2, i1, new_direct_jump *** 2241,2248 **** && INTVAL (XEXP (*split, 1)) > 0 && (i = exact_log2 (INTVAL (XEXP (*split, 1)))) >= 0) { ! SUBST (*split, gen_rtx_combine (ASHIFT, split_mode, ! XEXP (*split, 0), GEN_INT (i))); /* Update split_code because we may not have a multiply anymore. */ split_code = GET_CODE (*split); --- 2278,2285 ---- && INTVAL (XEXP (*split, 1)) > 0 && (i = exact_log2 (INTVAL (XEXP (*split, 1)))) >= 0) { ! SUBST (*split, gen_rtx_ASHIFT (split_mode, ! XEXP (*split, 0), GEN_INT (i))); /* Update split_code because we may not have a multiply anymore. */ split_code = GET_CODE (*split); *************** try_combine (i3, i2, i1, new_direct_jump *** 2252,2262 **** /* If *SPLIT is a paradoxical SUBREG, when we split it, it should be written as a ZERO_EXTEND. */ if (split_code == SUBREG && GET_CODE (SUBREG_REG (*split)) == MEM) ! SUBST (*split, gen_rtx_combine (ZERO_EXTEND, split_mode, ! XEXP (*split, 0))); #endif ! newi2pat = gen_rtx_combine (SET, VOIDmode, newdest, *split); SUBST (*split, newdest); i2_code_number = recog_for_combine (&newi2pat, i2, &new_i2_notes); --- 2289,2299 ---- /* If *SPLIT is a paradoxical SUBREG, when we split it, it should be written as a ZERO_EXTEND. */ if (split_code == SUBREG && GET_CODE (SUBREG_REG (*split)) == MEM) ! SUBST (*split, gen_rtx_ZERO_EXTEND (split_mode, ! SUBREG_REG (*split))); #endif ! newi2pat = gen_rtx_SET (VOIDmode, newdest, *split); SUBST (*split, newdest); i2_code_number = recog_for_combine (&newi2pat, i2, &new_i2_notes); *************** try_combine (i3, i2, i1, new_direct_jump *** 2470,2476 **** } #ifdef HAVE_cc0 /* If I2 is the setter CC0 and I3 is the user CC0 then check whether ! they are adjacent to each other or not. */ { rtx p = prev_nonnote_insn (i3); if (p && p != i2 && GET_CODE (p) == INSN && newi2pat --- 2507,2513 ---- } #ifdef HAVE_cc0 /* If I2 is the setter CC0 and I3 is the user CC0 then check whether ! they are adjacent to each other or not. */ { rtx p = prev_nonnote_insn (i3); if (p && p != i2 && GET_CODE (p) == INSN && newi2pat *************** try_combine (i3, i2, i1, new_direct_jump *** 2529,2534 **** --- 2566,2588 ---- INSN_CODE (i3) = insn_code_number; PATTERN (i3) = newpat; + + if (GET_CODE (i3) == CALL_INSN && CALL_INSN_FUNCTION_USAGE (i3)) + { + rtx call_usage = CALL_INSN_FUNCTION_USAGE (i3); + + reset_used_flags (call_usage); + call_usage = copy_rtx (call_usage); + + if (substed_i2) + replace_rtx (call_usage, i2dest, i2src); + + if (substed_i1) + replace_rtx (call_usage, i1dest, i1src); + + CALL_INSN_FUNCTION_USAGE (i3) = call_usage; + } + if (undobuf.other_insn) INSN_CODE (undobuf.other_insn) = other_code_number; *************** try_combine (i3, i2, i1, new_direct_jump *** 2772,2777 **** --- 2826,2837 ---- || GET_CODE (temp) != BARRIER) emit_barrier_after (i3); } + /* An NOOP jump does not need barrier, but it does need cleaning up + of CFG. */ + if (GET_CODE (newpat) == SET + && SET_SRC (newpat) == pc_rtx + && SET_DEST (newpat) == pc_rtx) + *new_direct_jump_p = 1; } combine_successes++; *************** undo_all () *** 2808,2814 **** undobuf.frees = undo; } ! undobuf.undos = undobuf.previous_undos = 0; /* Clear this here, so that subsequent get_last_value calls are not affected. */ --- 2868,2874 ---- undobuf.frees = undo; } ! undobuf.undos = 0; /* Clear this here, so that subsequent get_last_value calls are not affected. */ *************** undo_commit () *** 2829,2835 **** undo->next = undobuf.frees; undobuf.frees = undo; } ! undobuf.undos = undobuf.previous_undos = 0; } --- 2889,2895 ---- undo->next = undobuf.frees; undobuf.frees = undo; } ! undobuf.undos = 0; } *************** find_split_point (loc, insn) *** 2873,2881 **** || GET_CODE (XEXP (x, 0)) == SYMBOL_REF) { SUBST (XEXP (x, 0), ! gen_rtx_combine (LO_SUM, Pmode, ! gen_rtx_combine (HIGH, Pmode, XEXP (x, 0)), ! XEXP (x, 0))); return &XEXP (XEXP (x, 0), 0); } #endif --- 2933,2941 ---- || GET_CODE (XEXP (x, 0)) == SYMBOL_REF) { SUBST (XEXP (x, 0), ! gen_rtx_LO_SUM (Pmode, ! gen_rtx_HIGH (Pmode, XEXP (x, 0)), ! XEXP (x, 0))); return &XEXP (XEXP (x, 0), 0); } #endif *************** find_split_point (loc, insn) *** 2981,2987 **** && GET_CODE (XEXP (SET_DEST (x), 2)) == CONST_INT && GET_CODE (SET_SRC (x)) == CONST_INT && ((INTVAL (XEXP (SET_DEST (x), 1)) ! + INTVAL (XEXP (SET_DEST (x), 2))) <= GET_MODE_BITSIZE (GET_MODE (XEXP (SET_DEST (x), 0)))) && ! side_effects_p (XEXP (SET_DEST (x), 0))) { --- 3041,3047 ---- && GET_CODE (XEXP (SET_DEST (x), 2)) == CONST_INT && GET_CODE (SET_SRC (x)) == CONST_INT && ((INTVAL (XEXP (SET_DEST (x), 1)) ! + INTVAL (XEXP (SET_DEST (x), 2))) <= GET_MODE_BITSIZE (GET_MODE (XEXP (SET_DEST (x), 0)))) && ! side_effects_p (XEXP (SET_DEST (x), 0))) { *************** find_split_point (loc, insn) *** 3002,3009 **** SUBST (SET_SRC (x), gen_binary (IOR, mode, gen_binary (AND, mode, dest, ! GEN_INT (~(mask << pos) ! & GET_MODE_MASK (mode))), GEN_INT (src << pos))); SUBST (SET_DEST (x), dest); --- 3062,3072 ---- SUBST (SET_SRC (x), gen_binary (IOR, mode, gen_binary (AND, mode, dest, ! GEN_INT ! ( ! trunc_int_for_mode ! (~(mask << pos) ! & GET_MODE_MASK (mode), mode))), GEN_INT (src << pos))); SUBST (SET_DEST (x), dest); *************** find_split_point (loc, insn) *** 3033,3039 **** && GET_CODE (XEXP (SET_SRC (x), 0)) == REG && (pos = exact_log2 (INTVAL (XEXP (SET_SRC (x), 1)))) >= 7 && GET_CODE (SET_DEST (x)) == REG ! && (split = find_single_use (SET_DEST (x), insn, NULL_PTR)) != 0 && (GET_CODE (*split) == EQ || GET_CODE (*split) == NE) && XEXP (*split, 0) == SET_DEST (x) && XEXP (*split, 1) == const0_rtx) --- 3096,3102 ---- && GET_CODE (XEXP (SET_SRC (x), 0)) == REG && (pos = exact_log2 (INTVAL (XEXP (SET_SRC (x), 1)))) >= 7 && GET_CODE (SET_DEST (x)) == REG ! && (split = find_single_use (SET_DEST (x), insn, (rtx*) 0)) != 0 && (GET_CODE (*split) == EQ || GET_CODE (*split) == NE) && XEXP (*split, 0) == SET_DEST (x) && XEXP (*split, 1) == const0_rtx) *************** find_split_point (loc, insn) *** 3051,3057 **** case NE: /* if STORE_FLAG_VALUE is -1, this is (NE X 0) and only one bit of X ! is known to be on, this can be converted into a NEG of a shift. */ if (STORE_FLAG_VALUE == -1 && XEXP (SET_SRC (x), 1) == const0_rtx && GET_MODE (SET_SRC (x)) == GET_MODE (XEXP (SET_SRC (x), 0)) && 1 <= (pos = exact_log2 --- 3114,3120 ---- case NE: /* if STORE_FLAG_VALUE is -1, this is (NE X 0) and only one bit of X ! is known to be on, this can be converted into a NEG of a shift. */ if (STORE_FLAG_VALUE == -1 && XEXP (SET_SRC (x), 1) == const0_rtx && GET_MODE (SET_SRC (x)) == GET_MODE (XEXP (SET_SRC (x), 0)) && 1 <= (pos = exact_log2 *************** find_split_point (loc, insn) *** 3061,3070 **** enum machine_mode mode = GET_MODE (XEXP (SET_SRC (x), 0)); SUBST (SET_SRC (x), ! gen_rtx_combine (NEG, mode, ! gen_rtx_combine (LSHIFTRT, mode, ! XEXP (SET_SRC (x), 0), ! GEN_INT (pos)))); split = find_split_point (&SET_SRC (x), insn); if (split && split != &SET_SRC (x)) --- 3124,3133 ---- enum machine_mode mode = GET_MODE (XEXP (SET_SRC (x), 0)); SUBST (SET_SRC (x), ! gen_rtx_NEG (mode, ! gen_rtx_LSHIFTRT (mode, ! XEXP (SET_SRC (x), 0), ! GEN_INT (pos)))); split = find_split_point (&SET_SRC (x), insn); if (split && split != &SET_SRC (x)) *************** find_split_point (loc, insn) *** 3119,3130 **** if (unsignedp && len <= 8) { SUBST (SET_SRC (x), ! gen_rtx_combine ! (AND, mode, ! gen_rtx_combine (LSHIFTRT, mode, ! gen_lowpart_for_combine (mode, inner), ! GEN_INT (pos)), ! GEN_INT (((HOST_WIDE_INT) 1 << len) - 1))); split = find_split_point (&SET_SRC (x), insn); if (split && split != &SET_SRC (x)) --- 3182,3192 ---- if (unsignedp && len <= 8) { SUBST (SET_SRC (x), ! gen_rtx_AND (mode, ! gen_rtx_LSHIFTRT ! (mode, gen_lowpart_for_combine (mode, inner), ! GEN_INT (pos)), ! GEN_INT (((HOST_WIDE_INT) 1 << len) - 1))); split = find_split_point (&SET_SRC (x), insn); if (split && split != &SET_SRC (x)) *************** find_split_point (loc, insn) *** 3133,3144 **** else { SUBST (SET_SRC (x), ! gen_rtx_combine (unsignedp ? LSHIFTRT : ASHIFTRT, mode, ! gen_rtx_combine (ASHIFT, mode, ! gen_lowpart_for_combine (mode, inner), ! GEN_INT (GET_MODE_BITSIZE (mode) ! - len - pos)), GEN_INT (GET_MODE_BITSIZE (mode) - len))); split = find_split_point (&SET_SRC (x), insn); --- 3195,3206 ---- else { SUBST (SET_SRC (x), ! gen_rtx_fmt_ee (unsignedp ? LSHIFTRT : ASHIFTRT, mode, ! gen_rtx_ASHIFT (mode, ! gen_lowpart_for_combine (mode, inner), ! GEN_INT (GET_MODE_BITSIZE (mode) ! - len - pos)), GEN_INT (GET_MODE_BITSIZE (mode) - len))); split = find_split_point (&SET_SRC (x), insn); *************** find_split_point (loc, insn) *** 3182,3192 **** if (GET_CODE (XEXP (x, 0)) == NOT && GET_CODE (XEXP (x, 1)) == NOT) { SUBST (*loc, ! gen_rtx_combine (NOT, GET_MODE (x), ! gen_rtx_combine (code == IOR ? AND : IOR, ! GET_MODE (x), ! XEXP (XEXP (x, 0), 0), ! XEXP (XEXP (x, 1), 0)))); return find_split_point (loc, insn); } --- 3244,3254 ---- if (GET_CODE (XEXP (x, 0)) == NOT && GET_CODE (XEXP (x, 1)) == NOT) { SUBST (*loc, ! gen_rtx_NOT (GET_MODE (x), ! gen_rtx_fmt_ee (code == IOR ? AND : IOR, ! GET_MODE (x), ! XEXP (XEXP (x, 0), 0), ! XEXP (XEXP (x, 1), 0)))); return find_split_point (loc, insn); } *************** find_split_point (loc, insn) *** 3258,3271 **** static rtx subst (x, from, to, in_dest, unique_copy) ! register rtx x, from, to; int in_dest; int unique_copy; { ! register enum rtx_code code = GET_CODE (x); enum machine_mode op0_mode = VOIDmode; ! register const char *fmt; ! register int len, i; rtx new; /* Two expressions are equal if they are identical copies of a shared --- 3320,3333 ---- static rtx subst (x, from, to, in_dest, unique_copy) ! rtx x, from, to; int in_dest; int unique_copy; { ! enum rtx_code code = GET_CODE (x); enum machine_mode op0_mode = VOIDmode; ! const char *fmt; ! int len, i; rtx new; /* Two expressions are equal if they are identical copies of a shared *************** subst (x, from, to, in_dest, unique_copy *** 3373,3379 **** { if (fmt[i] == 'E') { ! register int j; for (j = XVECLEN (x, i) - 1; j >= 0; j--) { if (COMBINE_RTX_EQUAL_P (XVECEXP (x, i, j), from)) --- 3435,3441 ---- { if (fmt[i] == 'E') { ! int j; for (j = XVECLEN (x, i) - 1; j >= 0; j--) { if (COMBINE_RTX_EQUAL_P (XVECEXP (x, i, j), from)) *************** subst (x, from, to, in_dest, unique_copy *** 3399,3405 **** } 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 --- 3461,3476 ---- } else if (fmt[i] == 'e') { ! /* If this is a register being set, ignore it. */ ! new = XEXP (x, i); ! if (in_dest ! && (code == SUBREG || code == STRICT_LOW_PART ! || code == ZERO_EXTRACT) ! && i == 0 ! && GET_CODE (new) == REG) ! ; ! ! else 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 *************** subst (x, from, to, in_dest, unique_copy *** 3466,3472 **** if (GET_CODE (new) == CLOBBER && XEXP (new, 0) == const0_rtx) return new; ! SUBST (XEXP (x, i), new); } } } --- 3537,3560 ---- if (GET_CODE (new) == CLOBBER && XEXP (new, 0) == const0_rtx) return new; ! if (GET_CODE (new) == CONST_INT && GET_CODE (x) == SUBREG) ! { ! x = simplify_subreg (GET_MODE (x), new, ! GET_MODE (SUBREG_REG (x)), ! SUBREG_BYTE (x)); ! if (! x) ! abort (); ! } ! else if (GET_CODE (new) == CONST_INT ! && GET_CODE (x) == ZERO_EXTEND) ! { ! x = simplify_unary_operation (ZERO_EXTEND, GET_MODE (x), ! new, GET_MODE (XEXP (x, 0))); ! if (! x) ! abort (); ! } ! else ! SUBST (XEXP (x, i), new); } } } *************** combine_simplify_rtx (x, op0_mode, last, *** 3519,3530 **** /* If this is a commutative operation, put a constant last and a complex expression first. We don't need to do this for comparisons here. */ if (GET_RTX_CLASS (code) == 'c' ! && ((CONSTANT_P (XEXP (x, 0)) && GET_CODE (XEXP (x, 1)) != CONST_INT) ! || (GET_RTX_CLASS (GET_CODE (XEXP (x, 0))) == 'o' ! && GET_RTX_CLASS (GET_CODE (XEXP (x, 1))) != 'o') ! || (GET_CODE (XEXP (x, 0)) == SUBREG ! && GET_RTX_CLASS (GET_CODE (SUBREG_REG (XEXP (x, 0)))) == 'o' ! && GET_RTX_CLASS (GET_CODE (XEXP (x, 1))) != 'o'))) { temp = XEXP (x, 0); SUBST (XEXP (x, 0), XEXP (x, 1)); --- 3607,3613 ---- /* If this is a commutative operation, put a constant last and a complex expression first. We don't need to do this for comparisons here. */ if (GET_RTX_CLASS (code) == 'c' ! && swap_commutative_operands_p (XEXP (x, 0), XEXP (x, 1))) { temp = XEXP (x, 0); SUBST (XEXP (x, 0), XEXP (x, 1)); *************** combine_simplify_rtx (x, op0_mode, last, *** 3628,3634 **** just make the comparison operation. */ if (true_rtx == const_true_rtx && false_rtx == const0_rtx) x = gen_binary (cond_code, mode, cond, cop1); ! else if (true_rtx == const0_rtx && false_rtx == const_true_rtx) x = gen_binary (reverse_condition (cond_code), mode, cond, cop1); --- 3711,3718 ---- just make the comparison operation. */ if (true_rtx == const_true_rtx && false_rtx == const0_rtx) x = gen_binary (cond_code, mode, cond, cop1); ! else if (true_rtx == const0_rtx && false_rtx == const_true_rtx ! && reverse_condition (cond_code) != UNKNOWN) x = gen_binary (reverse_condition (cond_code), mode, cond, cop1); *************** combine_simplify_rtx (x, op0_mode, last, *** 3637,3650 **** else if (GET_CODE (true_rtx) == CONST_INT && INTVAL (true_rtx) == - STORE_FLAG_VALUE && false_rtx == const0_rtx) ! x = gen_unary (NEG, mode, mode, ! gen_binary (cond_code, mode, cond, cop1)); else if (GET_CODE (false_rtx) == CONST_INT && INTVAL (false_rtx) == - STORE_FLAG_VALUE && true_rtx == const0_rtx) ! x = gen_unary (NEG, mode, mode, ! gen_binary (reverse_condition (cond_code), ! mode, cond, cop1)); else return gen_rtx_IF_THEN_ELSE (mode, gen_binary (cond_code, VOIDmode, --- 3721,3738 ---- else if (GET_CODE (true_rtx) == CONST_INT && INTVAL (true_rtx) == - STORE_FLAG_VALUE && false_rtx == const0_rtx) ! x = simplify_gen_unary (NEG, mode, ! gen_binary (cond_code, mode, cond, ! cop1), ! mode); else if (GET_CODE (false_rtx) == CONST_INT && INTVAL (false_rtx) == - STORE_FLAG_VALUE && true_rtx == const0_rtx) ! x = simplify_gen_unary (NEG, mode, ! gen_binary (reverse_condition ! (cond_code), ! mode, cond, cop1), ! mode); else return gen_rtx_IF_THEN_ELSE (mode, gen_binary (cond_code, VOIDmode, *************** combine_simplify_rtx (x, op0_mode, last, *** 3699,3705 **** } if (temp) ! x = temp, code = GET_CODE (temp); /* First see if we can apply the inverse distributive law. */ if (code == PLUS || code == MINUS --- 3787,3798 ---- } if (temp) ! { ! x = temp; ! code = GET_CODE (temp); ! op0_mode = VOIDmode; ! mode = GET_MODE (temp); ! } /* First see if we can apply the inverse distributive law. */ if (code == PLUS || code == MINUS *************** combine_simplify_rtx (x, op0_mode, last, *** 3707,3722 **** { x = apply_distributive_law (x); code = GET_CODE (x); } /* If CODE is an associative operation not otherwise handled, see if we can associate some operands. This can win if they are constants or ! if they are logically related (i.e. (a & b) & a. */ ! if ((code == PLUS || code == MINUS ! || code == MULT || code == AND || code == IOR || code == XOR ! || code == DIV || code == UDIV || code == SMAX || code == SMIN || code == UMAX || code == UMIN) ! && INTEGRAL_MODE_P (mode)) { if (GET_CODE (XEXP (x, 0)) == code) { --- 3800,3816 ---- { x = apply_distributive_law (x); code = GET_CODE (x); + op0_mode = VOIDmode; } /* If CODE is an associative operation not otherwise handled, see if we can associate some operands. This can win if they are constants or ! if they are logically related (i.e. (a & b) & a). */ ! if ((code == PLUS || code == MINUS || code == MULT || code == DIV ! || code == AND || code == IOR || code == XOR || code == SMAX || code == SMIN || code == UMAX || code == UMIN) ! && ((INTEGRAL_MODE_P (mode) && code != DIV) ! || (flag_unsafe_math_optimizations && FLOAT_MODE_P (mode)))) { if (GET_CODE (XEXP (x, 0)) == code) { *************** combine_simplify_rtx (x, op0_mode, last, *** 3735,3741 **** } inner = simplify_binary_operation (code == MINUS ? PLUS : code == DIV ? MULT - : code == UDIV ? MULT : code, mode, inner_op0, inner_op1); --- 3829,3834 ---- *************** combine_simplify_rtx (x, op0_mode, last, *** 3765,3889 **** break; case SUBREG: ! /* (subreg:A (mem:B X) N) becomes a modified MEM unless the SUBREG ! is paradoxical. If we can't do that safely, then it becomes ! something nonsensical so that this combination won't take place. */ ! ! if (GET_CODE (SUBREG_REG (x)) == MEM ! && (GET_MODE_SIZE (mode) ! <= GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))))) ! { ! rtx inner = SUBREG_REG (x); ! int endian_offset = 0; ! /* Don't change the mode of the MEM ! if that would change the meaning of the address. */ ! if (MEM_VOLATILE_P (SUBREG_REG (x)) ! || mode_dependent_address_p (XEXP (inner, 0))) ! return gen_rtx_CLOBBER (mode, const0_rtx); ! ! if (BYTES_BIG_ENDIAN) ! { ! if (GET_MODE_SIZE (mode) < UNITS_PER_WORD) ! endian_offset += UNITS_PER_WORD - GET_MODE_SIZE (mode); ! if (GET_MODE_SIZE (GET_MODE (inner)) < UNITS_PER_WORD) ! endian_offset -= (UNITS_PER_WORD ! - GET_MODE_SIZE (GET_MODE (inner))); ! } ! /* Note if the plus_constant doesn't make a valid address ! then this combination won't be accepted. */ ! x = gen_rtx_MEM (mode, ! plus_constant (XEXP (inner, 0), ! (SUBREG_WORD (x) * UNITS_PER_WORD ! + endian_offset))); ! MEM_COPY_ATTRIBUTES (x, inner); ! return x; ! } ! ! /* If we are in a SET_DEST, these other cases can't apply. */ ! if (in_dest) ! return x; ! ! /* Changing mode twice with SUBREG => just change it once, ! or not at all if changing back to starting mode. */ ! if (GET_CODE (SUBREG_REG (x)) == SUBREG) ! { ! if (mode == GET_MODE (SUBREG_REG (SUBREG_REG (x))) ! && SUBREG_WORD (x) == 0 && SUBREG_WORD (SUBREG_REG (x)) == 0) ! return SUBREG_REG (SUBREG_REG (x)); ! ! SUBST_INT (SUBREG_WORD (x), ! SUBREG_WORD (x) + SUBREG_WORD (SUBREG_REG (x))); ! SUBST (SUBREG_REG (x), SUBREG_REG (SUBREG_REG (x))); ! } ! ! /* SUBREG of a hard register => just change the register number ! and/or mode. If the hard register is not valid in that mode, ! suppress this combination. If the hard register is the stack, ! frame, or argument pointer, leave this as a SUBREG. */ ! ! if (GET_CODE (SUBREG_REG (x)) == REG ! && REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER ! && REGNO (SUBREG_REG (x)) != FRAME_POINTER_REGNUM ! #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM ! && REGNO (SUBREG_REG (x)) != HARD_FRAME_POINTER_REGNUM ! #endif ! #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM ! && REGNO (SUBREG_REG (x)) != ARG_POINTER_REGNUM ! #endif ! && REGNO (SUBREG_REG (x)) != STACK_POINTER_REGNUM) ! { ! if (HARD_REGNO_MODE_OK (REGNO (SUBREG_REG (x)) + SUBREG_WORD (x), ! mode)) ! return gen_rtx_REG (mode, ! REGNO (SUBREG_REG (x)) + SUBREG_WORD (x)); ! else ! return gen_rtx_CLOBBER (mode, const0_rtx); ! } ! ! /* For a constant, try to pick up the part we want. Handle a full ! word and low-order part. Only do this if we are narrowing ! the constant; if it is being widened, we have no idea what ! the extra bits will have been set to. */ ! ! if (CONSTANT_P (SUBREG_REG (x)) && op0_mode != VOIDmode ! && GET_MODE_SIZE (mode) == UNITS_PER_WORD ! && GET_MODE_SIZE (op0_mode) > UNITS_PER_WORD ! && GET_MODE_CLASS (mode) == MODE_INT) ! { ! temp = operand_subword (SUBREG_REG (x), SUBREG_WORD (x), ! 0, op0_mode); ! if (temp) ! return temp; ! } ! /* If we want a subreg of a constant, at offset 0, ! take the low bits. On a little-endian machine, that's ! always valid. On a big-endian machine, it's valid ! only if the constant's mode fits in one word. Note that we ! cannot use subreg_lowpart_p since SUBREG_REG may be VOIDmode. */ if (CONSTANT_P (SUBREG_REG (x)) ! && ((GET_MODE_SIZE (op0_mode) <= UNITS_PER_WORD ! || ! WORDS_BIG_ENDIAN) ! ? SUBREG_WORD (x) == 0 ! : (SUBREG_WORD (x) ! == ((GET_MODE_SIZE (op0_mode) ! - MAX (GET_MODE_SIZE (mode), UNITS_PER_WORD)) ! / UNITS_PER_WORD))) ! && GET_MODE_SIZE (mode) <= GET_MODE_SIZE (op0_mode) ! && (! WORDS_BIG_ENDIAN ! || GET_MODE_BITSIZE (op0_mode) <= BITS_PER_WORD)) return gen_lowpart_for_combine (mode, SUBREG_REG (x)); ! /* A paradoxical SUBREG of a VOIDmode constant is the same constant, ! since we are saying that the high bits don't matter. */ ! if (CONSTANT_P (SUBREG_REG (x)) && GET_MODE (SUBREG_REG (x)) == VOIDmode ! && GET_MODE_SIZE (mode) > GET_MODE_SIZE (op0_mode)) ! { ! if (GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))) > UNITS_PER_WORD ! && (WORDS_BIG_ENDIAN || SUBREG_WORD (x) != 0)) ! return operand_subword (SUBREG_REG (x), SUBREG_WORD (x), 0, mode); ! return SUBREG_REG (x); ! } /* Note that we cannot do any narrowing for non-constants since we might have been counting on using the fact that some bits were --- 3858,3887 ---- break; case SUBREG: ! if (op0_mode == VOIDmode) ! op0_mode = GET_MODE (SUBREG_REG (x)); ! /* simplify_subreg can't use gen_lowpart_for_combine. */ if (CONSTANT_P (SUBREG_REG (x)) ! && subreg_lowpart_offset (mode, op0_mode) == SUBREG_BYTE (x)) return gen_lowpart_for_combine (mode, SUBREG_REG (x)); ! if (GET_MODE_CLASS (GET_MODE (SUBREG_REG (x))) == MODE_CC) ! break; ! { ! rtx temp; ! temp = simplify_subreg (mode, SUBREG_REG (x), op0_mode, ! SUBREG_BYTE (x)); ! if (temp) ! return temp; ! } ! ! /* Don't change the mode of the MEM if that would change the meaning ! of the address. */ ! if (GET_CODE (SUBREG_REG (x)) == MEM ! && (MEM_VOLATILE_P (SUBREG_REG (x)) ! || mode_dependent_address_p (XEXP (SUBREG_REG (x), 0)))) ! return gen_rtx_CLOBBER (mode, const0_rtx); /* Note that we cannot do any narrowing for non-constants since we might have been counting on using the fact that some bits were *************** combine_simplify_rtx (x, op0_mode, last, *** 3895,3906 **** /* (not (plus X -1)) can become (neg X). */ if (GET_CODE (XEXP (x, 0)) == PLUS && XEXP (XEXP (x, 0), 1) == constm1_rtx) ! return gen_rtx_combine (NEG, mode, XEXP (XEXP (x, 0), 0)); /* Similarly, (not (neg X)) is (plus X -1). */ if (GET_CODE (XEXP (x, 0)) == NEG) ! return gen_rtx_combine (PLUS, mode, XEXP (XEXP (x, 0), 0), ! constm1_rtx); /* (not (xor X C)) for C constant is (xor X D) with D = ~C. */ if (GET_CODE (XEXP (x, 0)) == XOR --- 3893,3903 ---- /* (not (plus X -1)) can become (neg X). */ if (GET_CODE (XEXP (x, 0)) == PLUS && XEXP (XEXP (x, 0), 1) == constm1_rtx) ! return gen_rtx_NEG (mode, XEXP (XEXP (x, 0), 0)); /* Similarly, (not (neg X)) is (plus X -1). */ if (GET_CODE (XEXP (x, 0)) == NEG) ! return gen_rtx_PLUS (mode, XEXP (XEXP (x, 0), 0), constm1_rtx); /* (not (xor X C)) for C constant is (xor X D) with D = ~C. */ if (GET_CODE (XEXP (x, 0)) == XOR *************** combine_simplify_rtx (x, op0_mode, last, *** 3916,3922 **** but this doesn't seem common enough to bother with. */ if (GET_CODE (XEXP (x, 0)) == ASHIFT && XEXP (XEXP (x, 0), 0) == const1_rtx) ! return gen_rtx_ROTATE (mode, gen_unary (NOT, mode, mode, const1_rtx), XEXP (XEXP (x, 0), 1)); if (GET_CODE (XEXP (x, 0)) == SUBREG --- 3913,3920 ---- but this doesn't seem common enough to bother with. */ if (GET_CODE (XEXP (x, 0)) == ASHIFT && XEXP (XEXP (x, 0), 0) == const1_rtx) ! return gen_rtx_ROTATE (mode, simplify_gen_unary (NOT, mode, ! const1_rtx, mode), XEXP (XEXP (x, 0), 1)); if (GET_CODE (XEXP (x, 0)) == SUBREG *************** combine_simplify_rtx (x, op0_mode, last, *** 3929,3936 **** enum machine_mode inner_mode = GET_MODE (SUBREG_REG (XEXP (x, 0))); x = gen_rtx_ROTATE (inner_mode, ! gen_unary (NOT, inner_mode, inner_mode, ! const1_rtx), XEXP (SUBREG_REG (XEXP (x, 0)), 1)); return gen_lowpart_for_combine (mode, x); } --- 3927,3934 ---- enum machine_mode inner_mode = GET_MODE (SUBREG_REG (XEXP (x, 0))); x = gen_rtx_ROTATE (inner_mode, ! simplify_gen_unary (NOT, inner_mode, const1_rtx, ! inner_mode), XEXP (SUBREG_REG (XEXP (x, 0)), 1)); return gen_lowpart_for_combine (mode, x); } *************** combine_simplify_rtx (x, op0_mode, last, *** 3943,3976 **** XEXP (XEXP (x, 0), 1)))) return reversed; ! /* (ashiftrt foo C) where C is the number of bits in FOO minus 1 ! is (lt foo (const_int 0)) if STORE_FLAG_VALUE is -1, so we can perform the above simplification. */ if (STORE_FLAG_VALUE == -1 && GET_CODE (XEXP (x, 0)) == ASHIFTRT - && XEXP (x, 1) == const1_rtx && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT && INTVAL (XEXP (XEXP (x, 0), 1)) == GET_MODE_BITSIZE (mode) - 1) ! return gen_rtx_combine (GE, mode, XEXP (XEXP (x, 0), 0), const0_rtx); /* Apply De Morgan's laws to reduce number of patterns for machines ! with negating logical insns (and-not, nand, etc.). If result has ! only one NOT, put it first, since that is how the patterns are ! coded. */ if (GET_CODE (XEXP (x, 0)) == IOR || GET_CODE (XEXP (x, 0)) == AND) ! { rtx in1 = XEXP (XEXP (x, 0), 0), in2 = XEXP (XEXP (x, 0), 1); enum machine_mode op_mode; op_mode = GET_MODE (in1); ! in1 = gen_unary (NOT, op_mode, op_mode, in1); op_mode = GET_MODE (in2); if (op_mode == VOIDmode) op_mode = mode; ! in2 = gen_unary (NOT, op_mode, op_mode, in2); if (GET_CODE (in2) == NOT && GET_CODE (in1) != NOT) { --- 3941,3973 ---- XEXP (XEXP (x, 0), 1)))) return reversed; ! /* (not (ashiftrt foo C)) where C is the number of bits in FOO minus 1 ! is (ge foo (const_int 0)) if STORE_FLAG_VALUE is -1, so we can perform the above simplification. */ if (STORE_FLAG_VALUE == -1 && GET_CODE (XEXP (x, 0)) == ASHIFTRT && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT && INTVAL (XEXP (XEXP (x, 0), 1)) == GET_MODE_BITSIZE (mode) - 1) ! return gen_rtx_GE (mode, XEXP (XEXP (x, 0), 0), const0_rtx); /* Apply De Morgan's laws to reduce number of patterns for machines ! with negating logical insns (and-not, nand, etc.). If result has ! only one NOT, put it first, since that is how the patterns are ! coded. */ if (GET_CODE (XEXP (x, 0)) == IOR || GET_CODE (XEXP (x, 0)) == AND) ! { rtx in1 = XEXP (XEXP (x, 0), 0), in2 = XEXP (XEXP (x, 0), 1); enum machine_mode op_mode; op_mode = GET_MODE (in1); ! in1 = simplify_gen_unary (NOT, op_mode, in1, op_mode); op_mode = GET_MODE (in2); if (op_mode == VOIDmode) op_mode = mode; ! in2 = simplify_gen_unary (NOT, op_mode, in2, op_mode); if (GET_CODE (in2) == NOT && GET_CODE (in1) != NOT) { *************** combine_simplify_rtx (x, op0_mode, last, *** 3978,3985 **** in2 = in1; in1 = tem; } ! return gen_rtx_combine (GET_CODE (XEXP (x, 0)) == IOR ? AND : IOR, ! mode, in1, in2); } break; --- 3975,3982 ---- in2 = in1; in1 = tem; } ! return gen_rtx_fmt_ee (GET_CODE (XEXP (x, 0)) == IOR ? AND : IOR, ! mode, in1, in2); } break; *************** combine_simplify_rtx (x, op0_mode, last, *** 3987,3993 **** /* (neg (plus X 1)) can become (not X). */ if (GET_CODE (XEXP (x, 0)) == PLUS && XEXP (XEXP (x, 0), 1) == const1_rtx) ! return gen_rtx_combine (NOT, mode, XEXP (XEXP (x, 0), 0)); /* Similarly, (neg (not X)) is (plus X 1). */ if (GET_CODE (XEXP (x, 0)) == NOT) --- 3984,3990 ---- /* (neg (plus X 1)) can become (not X). */ if (GET_CODE (XEXP (x, 0)) == PLUS && XEXP (XEXP (x, 0), 1) == const1_rtx) ! return gen_rtx_NOT (mode, XEXP (XEXP (x, 0), 0)); /* Similarly, (neg (not X)) is (plus X 1). */ if (GET_CODE (XEXP (x, 0)) == NOT) *************** combine_simplify_rtx (x, op0_mode, last, *** 3998,4004 **** && (! FLOAT_MODE_P (mode) /* x-y != -(y-x) with IEEE floating point. */ || TARGET_FLOAT_FORMAT != IEEE_FLOAT_FORMAT ! || flag_fast_math)) return gen_binary (MINUS, mode, XEXP (XEXP (x, 0), 1), XEXP (XEXP (x, 0), 0)); --- 3995,4001 ---- && (! FLOAT_MODE_P (mode) /* x-y != -(y-x) with IEEE floating point. */ || TARGET_FLOAT_FORMAT != IEEE_FLOAT_FORMAT ! || flag_unsafe_math_optimizations)) return gen_binary (MINUS, mode, XEXP (XEXP (x, 0), 1), XEXP (XEXP (x, 0), 0)); *************** combine_simplify_rtx (x, op0_mode, last, *** 4016,4031 **** temp = simplify_unary_operation (NEG, mode, XEXP (XEXP (x, 0), 0), mode); if (temp) ! { ! SUBST (XEXP (XEXP (x, 0), 0), temp); ! return XEXP (x, 0); ! } } temp = expand_compound_operation (XEXP (x, 0)); /* For C equal to the width of MODE minus 1, (neg (ashiftrt X C)) can be ! replaced by (lshiftrt X C). This will convert (neg (sign_extract X 1 Y)) to (zero_extract X 1 Y). */ if (GET_CODE (temp) == ASHIFTRT --- 4013,4025 ---- temp = simplify_unary_operation (NEG, mode, XEXP (XEXP (x, 0), 0), mode); if (temp) ! return gen_binary (ASHIFT, mode, temp, XEXP (XEXP (x, 0), 1)); } temp = expand_compound_operation (XEXP (x, 0)); /* For C equal to the width of MODE minus 1, (neg (ashiftrt X C)) can be ! replaced by (lshiftrt X C). This will convert (neg (sign_extract X 1 Y)) to (zero_extract X 1 Y). */ if (GET_CODE (temp) == ASHIFTRT *************** combine_simplify_rtx (x, op0_mode, last, *** 4089,4096 **** && (GET_CODE (XEXP (XEXP (x, 0), 0)) == SIGN_EXTEND || GET_CODE (XEXP (XEXP (x, 0), 0)) == ZERO_EXTEND) && GET_MODE (XEXP (XEXP (XEXP (x, 0), 0), 0)) == mode) ! return gen_unary (GET_CODE (XEXP (x, 0)), mode, mode, ! XEXP (XEXP (XEXP (x, 0), 0), 0)); /* (truncate:SI (subreg:DI (truncate:SI X) 0)) is (truncate:SI x). */ --- 4083,4090 ---- && (GET_CODE (XEXP (XEXP (x, 0), 0)) == SIGN_EXTEND || GET_CODE (XEXP (XEXP (x, 0), 0)) == ZERO_EXTEND) && GET_MODE (XEXP (XEXP (XEXP (x, 0), 0), 0)) == mode) ! return simplify_gen_unary (GET_CODE (XEXP (x, 0)), mode, ! XEXP (XEXP (XEXP (x, 0), 0), 0), mode); /* (truncate:SI (subreg:DI (truncate:SI X) 0)) is (truncate:SI x). */ *************** combine_simplify_rtx (x, op0_mode, last, *** 4109,4115 **** && num_sign_bit_copies (XEXP (x, 0), GET_MODE (XEXP (x, 0))) >= GET_MODE_BITSIZE (mode) + 1 && ! (GET_CODE (XEXP (x, 0)) == LSHIFTRT ! && GET_CODE (XEXP (XEXP (x, 0), 0)) == MULT)) return gen_lowpart_for_combine (mode, XEXP (x, 0)); /* A truncate of a comparison can be replaced with a subreg if --- 4103,4109 ---- && num_sign_bit_copies (XEXP (x, 0), GET_MODE (XEXP (x, 0))) >= GET_MODE_BITSIZE (mode) + 1 && ! (GET_CODE (XEXP (x, 0)) == LSHIFTRT ! && GET_CODE (XEXP (XEXP (x, 0), 0)) == MULT)) return gen_lowpart_for_combine (mode, XEXP (x, 0)); /* A truncate of a comparison can be replaced with a subreg if *************** combine_simplify_rtx (x, op0_mode, last, *** 4144,4151 **** || GET_CODE (XEXP (x, 0)) == NEG) && GET_CODE (XEXP (XEXP (x, 0), 0)) == FLOAT_EXTEND && GET_MODE (XEXP (XEXP (XEXP (x, 0), 0), 0)) == mode) ! return gen_unary (GET_CODE (XEXP (x, 0)), mode, mode, ! XEXP (XEXP (XEXP (x, 0), 0), 0)); /* (float_truncate:SF (subreg:DF (float_truncate:SF X) 0)) is (float_truncate:SF x). */ --- 4138,4145 ---- || GET_CODE (XEXP (x, 0)) == NEG) && GET_CODE (XEXP (XEXP (x, 0), 0)) == FLOAT_EXTEND && GET_MODE (XEXP (XEXP (XEXP (x, 0), 0), 0)) == mode) ! return simplify_gen_unary (GET_CODE (XEXP (x, 0)), mode, ! XEXP (XEXP (XEXP (x, 0), 0), 0), mode); /* (float_truncate:SF (subreg:DF (float_truncate:SF X) 0)) is (float_truncate:SF x). */ *************** combine_simplify_rtx (x, op0_mode, last, *** 4166,4172 **** /* In IEEE floating point, x-0 is not the same as x. */ if ((TARGET_FLOAT_FORMAT != IEEE_FLOAT_FORMAT || ! FLOAT_MODE_P (GET_MODE (XEXP (x, 0))) ! || flag_fast_math) && XEXP (x, 1) == CONST0_RTX (GET_MODE (XEXP (x, 0)))) return XEXP (x, 0); break; --- 4160,4166 ---- /* In IEEE floating point, x-0 is not the same as x. */ if ((TARGET_FLOAT_FORMAT != IEEE_FLOAT_FORMAT || ! FLOAT_MODE_P (GET_MODE (XEXP (x, 0))) ! || flag_unsafe_math_optimizations) && XEXP (x, 1) == CONST0_RTX (GET_MODE (XEXP (x, 0)))) return XEXP (x, 0); break; *************** combine_simplify_rtx (x, op0_mode, last, *** 4240,4246 **** XEXP (XEXP (x, 0), 0), XEXP (XEXP (x, 0), 1)))) return ! gen_unary (NEG, mode, mode, reversed); /* If only the low-order bit of X is possibly nonzero, (plus x -1) can become (ashiftrt (ashift (xor x 1) C) C) where C is --- 4234,4240 ---- XEXP (XEXP (x, 0), 0), XEXP (XEXP (x, 0), 1)))) return ! simplify_gen_unary (NEG, mode, reversed, mode); /* If only the low-order bit of X is possibly nonzero, (plus x -1) can become (ashiftrt (ashift (xor x 1) C) C) where C is *************** combine_simplify_rtx (x, op0_mode, last, *** 4253,4260 **** && nonzero_bits (XEXP (x, 0), mode) == 1) return simplify_shift_const (NULL_RTX, ASHIFTRT, mode, simplify_shift_const (NULL_RTX, ASHIFT, mode, ! gen_rtx_combine (XOR, mode, ! XEXP (x, 0), const1_rtx), GET_MODE_BITSIZE (mode) - 1), GET_MODE_BITSIZE (mode) - 1); --- 4247,4253 ---- && nonzero_bits (XEXP (x, 0), mode) == 1) return simplify_shift_const (NULL_RTX, ASHIFTRT, mode, simplify_shift_const (NULL_RTX, ASHIFT, mode, ! gen_rtx_XOR (mode, XEXP (x, 0), const1_rtx), GET_MODE_BITSIZE (mode) - 1), GET_MODE_BITSIZE (mode) - 1); *************** combine_simplify_rtx (x, op0_mode, last, *** 4326,4331 **** --- 4319,4334 ---- if (GET_CODE (x) != MULT) return x; } + /* Try simplify a*(b/c) as (a*b)/c. */ + if (FLOAT_MODE_P (mode) && flag_unsafe_math_optimizations + && GET_CODE (XEXP (x, 0)) == DIV) + { + rtx tem = simplify_binary_operation (MULT, mode, + XEXP (XEXP (x, 0), 0), + XEXP (x, 1)); + if (tem) + return gen_binary (DIV, mode, tem, XEXP (XEXP (x, 0), 1)); + } break; case UDIV: *************** combine_simplify_rtx (x, op0_mode, last, *** 4345,4352 **** case GT: case GTU: case GE: case GEU: case LT: case LTU: case LE: case LEU: case UNEQ: case LTGT: ! case UNGT: case UNGE: ! case UNLT: case UNLE: case UNORDERED: case ORDERED: /* If the first operand is a condition code, we can't do anything with it. */ --- 4348,4355 ---- case GT: case GTU: case GE: case GEU: case LT: case LTU: case LE: case LEU: case UNEQ: case LTGT: ! case UNGT: case UNGE: ! case UNLT: case UNLE: case UNORDERED: case ORDERED: /* If the first operand is a condition code, we can't do anything with it. */ *************** combine_simplify_rtx (x, op0_mode, last, *** 4395,4402 **** == GET_MODE_BITSIZE (mode))) { op0 = expand_compound_operation (op0); ! return gen_unary (NEG, mode, mode, ! gen_lowpart_for_combine (mode, op0)); } else if (STORE_FLAG_VALUE == 1 --- 4398,4406 ---- == GET_MODE_BITSIZE (mode))) { op0 = expand_compound_operation (op0); ! return simplify_gen_unary (NEG, mode, ! gen_lowpart_for_combine (mode, op0), ! mode); } else if (STORE_FLAG_VALUE == 1 *************** combine_simplify_rtx (x, op0_mode, last, *** 4439,4446 **** && nonzero_bits (op0, mode) == 1) { op0 = expand_compound_operation (op0); ! return gen_unary (NEG, mode, mode, ! gen_lowpart_for_combine (mode, op0)); } else if (STORE_FLAG_VALUE == -1 --- 4443,4451 ---- && nonzero_bits (op0, mode) == 1) { op0 = expand_compound_operation (op0); ! return simplify_gen_unary (NEG, mode, ! gen_lowpart_for_combine (mode, op0), ! mode); } else if (STORE_FLAG_VALUE == -1 *************** combine_simplify_rtx (x, op0_mode, last, *** 4451,4458 **** == GET_MODE_BITSIZE (mode))) { op0 = expand_compound_operation (op0); ! return gen_unary (NOT, mode, mode, ! gen_lowpart_for_combine (mode, op0)); } /* If X is 0/1, (eq X 0) is X-1. */ --- 4456,4464 ---- == GET_MODE_BITSIZE (mode))) { op0 = expand_compound_operation (op0); ! return simplify_gen_unary (NOT, mode, ! gen_lowpart_for_combine (mode, op0), ! mode); } /* If X is 0/1, (eq X 0) is X-1. */ *************** combine_simplify_rtx (x, op0_mode, last, *** 4490,4496 **** /* If the code changed, return a whole new comparison. */ if (new_code != code) ! return gen_rtx_combine (new_code, mode, op0, op1); /* Otherwise, keep this operation, but maybe change its operands. This also converts (ne (compare FOO BAR) 0) to (ne FOO BAR). */ --- 4496,4502 ---- /* If the code changed, return a whole new comparison. */ if (new_code != code) ! return gen_rtx_fmt_ee (new_code, mode, op0, op1); /* Otherwise, keep this operation, but maybe change its operands. This also converts (ne (compare FOO BAR) 0) to (ne FOO BAR). */ *************** combine_simplify_rtx (x, op0_mode, last, *** 4542,4548 **** /* If operand is known to be only -1 or 0, convert ABS to NEG. */ if (num_sign_bit_copies (XEXP (x, 0), mode) == GET_MODE_BITSIZE (mode)) ! return gen_rtx_combine (NEG, mode, XEXP (x, 0)); break; --- 4548,4554 ---- /* If operand is known to be only -1 or 0, convert ABS to NEG. */ if (num_sign_bit_copies (XEXP (x, 0), mode) == GET_MODE_BITSIZE (mode)) ! return gen_rtx_NEG (mode, XEXP (x, 0)); break; *************** combine_simplify_rtx (x, op0_mode, last, *** 4619,4625 **** } break; ! default: break; } --- 4625,4631 ---- } break; ! default: break; } *************** simplify_if_then_else (x) *** 4754,4765 **** /* Convert a == b ? b : a to "a". */ if (true_code == EQ && ! side_effects_p (cond) ! && (! FLOAT_MODE_P (mode) || flag_fast_math) && rtx_equal_p (XEXP (cond, 0), false_rtx) && rtx_equal_p (XEXP (cond, 1), true_rtx)) return false_rtx; else if (true_code == NE && ! side_effects_p (cond) ! && (! FLOAT_MODE_P (mode) || flag_fast_math) && rtx_equal_p (XEXP (cond, 0), true_rtx) && rtx_equal_p (XEXP (cond, 1), false_rtx)) return true_rtx; --- 4760,4771 ---- /* Convert a == b ? b : a to "a". */ if (true_code == EQ && ! side_effects_p (cond) ! && (! FLOAT_MODE_P (mode) || flag_unsafe_math_optimizations) && rtx_equal_p (XEXP (cond, 0), false_rtx) && rtx_equal_p (XEXP (cond, 1), true_rtx)) return false_rtx; else if (true_code == NE && ! side_effects_p (cond) ! && (! FLOAT_MODE_P (mode) || flag_unsafe_math_optimizations) && rtx_equal_p (XEXP (cond, 0), true_rtx) && rtx_equal_p (XEXP (cond, 1), false_rtx)) return true_rtx; *************** simplify_if_then_else (x) *** 4776,4793 **** { case GT: case GE: ! return gen_unary (ABS, mode, mode, true_rtx); case LT: case LE: ! return gen_unary (NEG, mode, mode, ! gen_unary (ABS, mode, mode, true_rtx)); ! default: ! break; } /* Look for MIN or MAX. */ ! if ((! FLOAT_MODE_P (mode) || flag_fast_math) && comparison_p && rtx_equal_p (XEXP (cond, 0), true_rtx) && rtx_equal_p (XEXP (cond, 1), false_rtx) --- 4782,4801 ---- { case GT: case GE: ! return simplify_gen_unary (ABS, mode, true_rtx, mode); case LT: case LE: ! return ! simplify_gen_unary (NEG, mode, ! simplify_gen_unary (ABS, mode, true_rtx, mode), ! mode); ! default: ! break; } /* Look for MIN or MAX. */ ! if ((! FLOAT_MODE_P (mode) || flag_unsafe_math_optimizations) && comparison_p && rtx_equal_p (XEXP (cond, 0), true_rtx) && rtx_equal_p (XEXP (cond, 1), false_rtx) *************** simplify_if_then_else (x) *** 4922,4928 **** temp = gen_binary (op, m, gen_lowpart_for_combine (m, z), temp); if (extend_op != NIL) ! temp = gen_unary (extend_op, mode, m, temp); return temp; } --- 4930,4936 ---- temp = gen_binary (op, m, gen_lowpart_for_combine (m, z), temp); if (extend_op != NIL) ! temp = simplify_gen_unary (extend_op, mode, temp, m); return temp; } *************** simplify_set (x) *** 5039,5046 **** { unsigned HOST_WIDE_INT mask; ! SUBST (*cc_use, gen_rtx_combine (new_code, GET_MODE (*cc_use), ! dest, const0_rtx)); /* If the only change we made was to change an EQ into an NE or vice versa, OP0 has only one bit that might be nonzero, and OP1 --- 5047,5054 ---- { unsigned HOST_WIDE_INT mask; ! SUBST (*cc_use, gen_rtx_fmt_ee (new_code, GET_MODE (*cc_use), ! dest, const0_rtx)); /* If the only change we made was to change an EQ into an NE or vice versa, OP0 has only one bit that might be nonzero, and OP1 *************** simplify_set (x) *** 5087,5094 **** correct mode, we need one. */ if (GET_CODE (src) != COMPARE || GET_MODE (src) != compare_mode) { ! SUBST (SET_SRC (x), ! gen_rtx_combine (COMPARE, compare_mode, op0, op1)); src = SET_SRC (x); } else --- 5095,5101 ---- correct mode, we need one. */ if (GET_CODE (src) != COMPARE || GET_MODE (src) != compare_mode) { ! SUBST (SET_SRC (x), gen_rtx_COMPARE (compare_mode, op0, op1)); src = SET_SRC (x); } else *************** simplify_set (x) *** 5155,5168 **** if (GET_CODE (src) == SUBREG && subreg_lowpart_p (src) && LOAD_EXTEND_OP (GET_MODE (SUBREG_REG (src))) != NIL ! && SUBREG_WORD (src) == 0 && (GET_MODE_SIZE (GET_MODE (src)) > GET_MODE_SIZE (GET_MODE (SUBREG_REG (src)))) && GET_CODE (SUBREG_REG (src)) == MEM) { SUBST (SET_SRC (x), ! gen_rtx_combine (LOAD_EXTEND_OP (GET_MODE (SUBREG_REG (src))), ! GET_MODE (src), XEXP (src, 0))); src = SET_SRC (x); } --- 5162,5175 ---- if (GET_CODE (src) == SUBREG && subreg_lowpart_p (src) && LOAD_EXTEND_OP (GET_MODE (SUBREG_REG (src))) != NIL ! && SUBREG_BYTE (src) == 0 && (GET_MODE_SIZE (GET_MODE (src)) > GET_MODE_SIZE (GET_MODE (SUBREG_REG (src)))) && GET_CODE (SUBREG_REG (src)) == MEM) { SUBST (SET_SRC (x), ! gen_rtx (LOAD_EXTEND_OP (GET_MODE (SUBREG_REG (src))), ! GET_MODE (src), SUBREG_REG (src))); src = SET_SRC (x); } *************** simplify_set (x) *** 5210,5217 **** term2 = gen_binary (AND, GET_MODE (src), XEXP (XEXP (src, 0), 0), true_rtx); term3 = gen_binary (AND, GET_MODE (src), ! gen_unary (NOT, GET_MODE (src), GET_MODE (src), ! XEXP (XEXP (src, 0), 0)), false_rtx); SUBST (SET_SRC (x), --- 5217,5225 ---- term2 = gen_binary (AND, GET_MODE (src), XEXP (XEXP (src, 0), 0), true_rtx); term3 = gen_binary (AND, GET_MODE (src), ! simplify_gen_unary (NOT, GET_MODE (src), ! XEXP (XEXP (src, 0), 0), ! GET_MODE (src)), false_rtx); SUBST (SET_SRC (x), *************** simplify_set (x) *** 5222,5290 **** src = SET_SRC (x); } - #ifdef HAVE_conditional_arithmetic - /* If we have conditional arithmetic and the operand of a SET is - a conditional expression, replace this with an IF_THEN_ELSE. - We can either have a conditional expression or a MULT of that expression - with a constant. */ - if ((GET_RTX_CLASS (GET_CODE (src)) == '1' - || GET_RTX_CLASS (GET_CODE (src)) == '2' - || GET_RTX_CLASS (GET_CODE (src)) == 'c') - && (GET_RTX_CLASS (GET_CODE (XEXP (src, 0))) == '<' - || (GET_CODE (XEXP (src, 0)) == MULT - && GET_RTX_CLASS (GET_CODE (XEXP (XEXP (src, 0), 0))) == '<' - && GET_CODE (XEXP (XEXP (src, 0), 1)) == CONST_INT))) - { - rtx cond = XEXP (src, 0); - rtx true_val = const1_rtx; - rtx false_arm, true_arm; - rtx reversed; - - if (GET_CODE (cond) == MULT) - { - true_val = XEXP (cond, 1); - cond = XEXP (cond, 0); - } - - if (GET_RTX_CLASS (GET_CODE (src)) == '1') - { - true_arm = gen_unary (GET_CODE (src), GET_MODE (src), - GET_MODE (XEXP (src, 0)), true_val); - false_arm = gen_unary (GET_CODE (src), GET_MODE (src), - GET_MODE (XEXP (src, 0)), const0_rtx); - } - else - { - true_arm = gen_binary (GET_CODE (src), GET_MODE (src), - true_val, XEXP (src, 1)); - false_arm = gen_binary (GET_CODE (src), GET_MODE (src), - const0_rtx, XEXP (src, 1)); - } - - /* Canonicalize if true_arm is the simpler one. */ - if (GET_RTX_CLASS (GET_CODE (true_arm)) == 'o' - && GET_RTX_CLASS (GET_CODE (false_arm)) != 'o' - && (reversed = reversed_comparison_code (cond, GET_MODE (cond), - XEXP (cond, 0), - XEXP (cond, 1)))) - { - rtx temp = true_arm; - - true_arm = false_arm; - false_arm = temp; - - cond = reversed; - } - - src = gen_rtx_combine (IF_THEN_ELSE, GET_MODE (src), - gen_rtx_combine (GET_CODE (cond), VOIDmode, - XEXP (cond, 0), - XEXP (cond, 1)), - true_arm, false_arm); - SUBST (SET_SRC (x), src); - } - #endif - /* If either SRC or DEST is a CLOBBER of (const_int 0), make this whole thing fail. */ if (GET_CODE (src) == CLOBBER && XEXP (src, 0) == const0_rtx) --- 5230,5235 ---- *************** simplify_logical (x, last) *** 5318,5330 **** && rtx_equal_p (XEXP (op0, 0), op1) && ! side_effects_p (op1)) x = gen_binary (AND, mode, ! gen_unary (NOT, mode, mode, XEXP (op0, 1)), op1); if (GET_CODE (op0) == XOR && rtx_equal_p (XEXP (op0, 1), op1) && ! side_effects_p (op1)) x = gen_binary (AND, mode, ! gen_unary (NOT, mode, mode, XEXP (op0, 0)), op1); /* Similarly for (~(A ^ B)) & A. */ if (GET_CODE (op0) == NOT --- 5263,5277 ---- && rtx_equal_p (XEXP (op0, 0), op1) && ! side_effects_p (op1)) x = gen_binary (AND, mode, ! simplify_gen_unary (NOT, mode, XEXP (op0, 1), mode), ! op1); if (GET_CODE (op0) == XOR && rtx_equal_p (XEXP (op0, 1), op1) && ! side_effects_p (op1)) x = gen_binary (AND, mode, ! simplify_gen_unary (NOT, mode, XEXP (op0, 0), mode), ! op1); /* Similarly for (~(A ^ B)) & A. */ if (GET_CODE (op0) == NOT *************** simplify_logical (x, last) *** 5533,5539 **** SUBST (XEXP (x, 1), op1); } else if (num_negated == 1) ! return gen_unary (NOT, mode, mode, gen_binary (XOR, mode, op0, op1)); } /* Convert (xor (and A B) B) to (and (not A) B). The latter may --- 5480,5488 ---- SUBST (XEXP (x, 1), op1); } else if (num_negated == 1) ! return ! simplify_gen_unary (NOT, mode, gen_binary (XOR, mode, op0, op1), ! mode); } /* Convert (xor (and A B) B) to (and (not A) B). The latter may *************** simplify_logical (x, last) *** 5544,5557 **** && rtx_equal_p (XEXP (op0, 1), op1) && ! side_effects_p (op1)) return gen_binary (AND, mode, ! gen_unary (NOT, mode, mode, XEXP (op0, 0)), op1); else if (GET_CODE (op0) == AND && rtx_equal_p (XEXP (op0, 0), op1) && ! side_effects_p (op1)) return gen_binary (AND, mode, ! gen_unary (NOT, mode, mode, XEXP (op0, 1)), op1); /* (xor (comparison foo bar) (const_int 1)) can become the reversed --- 5493,5506 ---- && rtx_equal_p (XEXP (op0, 1), op1) && ! side_effects_p (op1)) return gen_binary (AND, mode, ! simplify_gen_unary (NOT, mode, XEXP (op0, 0), mode), op1); else if (GET_CODE (op0) == AND && rtx_equal_p (XEXP (op0, 0), op1) && ! side_effects_p (op1)) return gen_binary (AND, mode, ! simplify_gen_unary (NOT, mode, XEXP (op0, 1), mode), op1); /* (xor (comparison foo bar) (const_int 1)) can become the reversed *************** simplify_logical (x, last) *** 5572,5578 **** && GET_CODE (op0) == LSHIFTRT && GET_CODE (XEXP (op0, 1)) == CONST_INT && INTVAL (XEXP (op0, 1)) == GET_MODE_BITSIZE (mode) - 1) ! return gen_rtx_combine (GE, mode, XEXP (op0, 0), const0_rtx); /* (xor (comparison foo bar) (const_int sign-bit)) when STORE_FLAG_VALUE is the sign bit. */ --- 5521,5527 ---- && GET_CODE (op0) == LSHIFTRT && GET_CODE (XEXP (op0, 1)) == CONST_INT && INTVAL (XEXP (op0, 1)) == GET_MODE_BITSIZE (mode) - 1) ! return gen_rtx_GE (mode, XEXP (op0, 0), const0_rtx); /* (xor (comparison foo bar) (const_int sign-bit)) when STORE_FLAG_VALUE is the sign bit. */ *************** expand_compound_operation (x) *** 5728,5734 **** && GET_RTX_CLASS (GET_CODE (XEXP (XEXP (x, 0), 0))) == '<' && (GET_MODE_BITSIZE (GET_MODE (XEXP (x, 0))) <= HOST_BITS_PER_WIDE_INT) ! && ((HOST_WIDE_INT) STORE_FLAG_VALUE & ~GET_MODE_MASK (GET_MODE (XEXP (x, 0)))) == 0) return XEXP (XEXP (x, 0), 0); --- 5677,5683 ---- && GET_RTX_CLASS (GET_CODE (XEXP (XEXP (x, 0), 0))) == '<' && (GET_MODE_BITSIZE (GET_MODE (XEXP (x, 0))) <= HOST_BITS_PER_WIDE_INT) ! && ((HOST_WIDE_INT) STORE_FLAG_VALUE & ~GET_MODE_MASK (GET_MODE (XEXP (x, 0)))) == 0) return XEXP (XEXP (x, 0), 0); *************** expand_field_assignment (x) *** 5814,5820 **** { inner = SUBREG_REG (XEXP (SET_DEST (x), 0)); len = GET_MODE_BITSIZE (GET_MODE (XEXP (SET_DEST (x), 0))); ! pos = GEN_INT (BITS_PER_WORD * SUBREG_WORD (XEXP (SET_DEST (x), 0))); } else if (GET_CODE (SET_DEST (x)) == ZERO_EXTRACT && GET_CODE (XEXP (SET_DEST (x), 1)) == CONST_INT) --- 5763,5769 ---- { inner = SUBREG_REG (XEXP (SET_DEST (x), 0)); len = GET_MODE_BITSIZE (GET_MODE (XEXP (SET_DEST (x), 0))); ! pos = GEN_INT (subreg_lsb (XEXP (SET_DEST (x), 0))); } else if (GET_CODE (SET_DEST (x)) == ZERO_EXTRACT && GET_CODE (XEXP (SET_DEST (x), 1)) == CONST_INT) *************** expand_field_assignment (x) *** 5903,5913 **** (VOIDmode, copy_rtx (inner), gen_binary (IOR, compute_mode, gen_binary (AND, compute_mode, ! gen_unary (NOT, compute_mode, ! compute_mode, ! gen_binary (ASHIFT, ! compute_mode, ! mask, pos)), inner), gen_binary (ASHIFT, compute_mode, gen_binary (AND, compute_mode, --- 5852,5862 ---- (VOIDmode, copy_rtx (inner), gen_binary (IOR, compute_mode, gen_binary (AND, compute_mode, ! simplify_gen_unary (NOT, compute_mode, ! gen_binary (ASHIFT, ! compute_mode, ! mask, pos), ! compute_mode), inner), gen_binary (ASHIFT, compute_mode, gen_binary (AND, compute_mode, *************** make_extraction (mode, inner, pos, pos_r *** 6015,6022 **** && GET_CODE (inner) != MEM && (! in_dest || (GET_CODE (inner) == REG ! && (movstrict_optab->handlers[(int) tmode].insn_code ! != CODE_FOR_nothing)))) || (GET_CODE (inner) == MEM && pos_rtx == 0 && (pos % (STRICT_ALIGNMENT ? GET_MODE_ALIGNMENT (tmode) --- 5964,5970 ---- && GET_CODE (inner) != MEM && (! in_dest || (GET_CODE (inner) == REG ! && have_insn_for (STRICT_LOW_PART, tmode)))) || (GET_CODE (inner) == MEM && pos_rtx == 0 && (pos % (STRICT_ALIGNMENT ? GET_MODE_ALIGNMENT (tmode) *************** make_extraction (mode, inner, pos, pos_r *** 6037,6066 **** if (GET_CODE (inner) == MEM) { ! int offset; /* POS counts from lsb, but make OFFSET count in memory order. */ if (BYTES_BIG_ENDIAN) offset = (GET_MODE_BITSIZE (is_mode) - len - pos) / BITS_PER_UNIT; else offset = pos / BITS_PER_UNIT; ! new = gen_rtx_MEM (tmode, plus_constant (XEXP (inner, 0), offset)); ! MEM_COPY_ATTRIBUTES (new, inner); } else if (GET_CODE (inner) == REG) { /* We can't call gen_lowpart_for_combine here since we always want a SUBREG and it would sometimes return a new hard register. */ if (tmode != inner_mode) ! new = gen_rtx_SUBREG (tmode, inner, ! (WORDS_BIG_ENDIAN ! && (GET_MODE_SIZE (inner_mode) ! > UNITS_PER_WORD) ! ? (((GET_MODE_SIZE (inner_mode) ! - GET_MODE_SIZE (tmode)) ! / UNITS_PER_WORD) ! - pos / BITS_PER_WORD) ! : pos / BITS_PER_WORD)); else new = inner; } --- 5985,6022 ---- if (GET_CODE (inner) == MEM) { ! HOST_WIDE_INT offset; ! /* POS counts from lsb, but make OFFSET count in memory order. */ if (BYTES_BIG_ENDIAN) offset = (GET_MODE_BITSIZE (is_mode) - len - pos) / BITS_PER_UNIT; else offset = pos / BITS_PER_UNIT; ! new = adjust_address_nv (inner, tmode, offset); } else if (GET_CODE (inner) == REG) { /* We can't call gen_lowpart_for_combine here since we always want a SUBREG and it would sometimes return a new hard register. */ if (tmode != inner_mode) ! { ! HOST_WIDE_INT final_word = pos / BITS_PER_WORD; ! ! if (WORDS_BIG_ENDIAN ! && GET_MODE_SIZE (inner_mode) > UNITS_PER_WORD) ! final_word = ((GET_MODE_SIZE (inner_mode) ! - GET_MODE_SIZE (tmode)) ! / UNITS_PER_WORD) - final_word; ! ! final_word *= UNITS_PER_WORD; ! if (BYTES_BIG_ENDIAN && ! GET_MODE_SIZE (inner_mode) > GET_MODE_SIZE (tmode)) ! final_word += (GET_MODE_SIZE (inner_mode) ! - GET_MODE_SIZE (tmode)) % UNITS_PER_WORD; ! ! new = gen_rtx_SUBREG (tmode, inner, final_word); ! } else new = inner; } *************** make_extraction (mode, inner, pos, pos_r *** 6078,6088 **** return (GET_CODE (new) == MEM ? new : (GET_CODE (new) != SUBREG ? gen_rtx_CLOBBER (tmode, const0_rtx) ! : gen_rtx_combine (STRICT_LOW_PART, VOIDmode, new))); if (mode == tmode) return new; /* If we know that no extraneous bits are set, and that the high bit is not set, convert the extraction to the cheaper of sign and zero extension, that are equivalent in these cases. */ --- 6034,6047 ---- return (GET_CODE (new) == MEM ? new : (GET_CODE (new) != SUBREG ? gen_rtx_CLOBBER (tmode, const0_rtx) ! : gen_rtx_STRICT_LOW_PART (VOIDmode, new))); if (mode == tmode) return new; + if (GET_CODE (new) == CONST_INT) + return GEN_INT (trunc_int_for_mode (INTVAL (new), mode)); + /* If we know that no extraneous bits are set, and that the high bit is not set, convert the extraction to the cheaper of sign and zero extension, that are equivalent in these cases. */ *************** make_extraction (mode, inner, pos, pos_r *** 6107,6114 **** /* Otherwise, sign- or zero-extend unless we already are in the proper mode. */ ! return (gen_rtx_combine (unsignedp ? ZERO_EXTEND : SIGN_EXTEND, ! mode, new)); } /* Unless this is a COMPARE or we have a funny memory reference, --- 6066,6073 ---- /* Otherwise, sign- or zero-extend unless we already are in the proper mode. */ ! return (gen_rtx_fmt_e (unsignedp ? ZERO_EXTEND : SIGN_EXTEND, ! mode, new)); } /* Unless this is a COMPARE or we have a funny memory reference, *************** make_extraction (mode, inner, pos, pos_r *** 6130,6188 **** /* Get the mode to use should INNER not be a MEM, the mode for the position, and the mode for the result. */ ! #ifdef HAVE_insv ! if (in_dest) { ! wanted_inner_reg_mode ! = insn_data[(int) CODE_FOR_insv].operand[0].mode; ! if (wanted_inner_reg_mode == VOIDmode) ! wanted_inner_reg_mode = word_mode; ! ! pos_mode = insn_data[(int) CODE_FOR_insv].operand[2].mode; ! if (pos_mode == VOIDmode) ! pos_mode = word_mode; ! ! extraction_mode = insn_data[(int) CODE_FOR_insv].operand[3].mode; ! if (extraction_mode == VOIDmode) ! extraction_mode = word_mode; } - #endif ! #ifdef HAVE_extzv ! if (! in_dest && unsignedp) { ! wanted_inner_reg_mode ! = insn_data[(int) CODE_FOR_extzv].operand[1].mode; ! if (wanted_inner_reg_mode == VOIDmode) ! wanted_inner_reg_mode = word_mode; ! ! pos_mode = insn_data[(int) CODE_FOR_extzv].operand[3].mode; ! if (pos_mode == VOIDmode) ! pos_mode = word_mode; ! ! extraction_mode = insn_data[(int) CODE_FOR_extzv].operand[0].mode; ! if (extraction_mode == VOIDmode) ! extraction_mode = word_mode; } - #endif ! #ifdef HAVE_extv ! if (! in_dest && ! unsignedp) { ! wanted_inner_reg_mode ! = insn_data[(int) CODE_FOR_extv].operand[1].mode; ! if (wanted_inner_reg_mode == VOIDmode) ! wanted_inner_reg_mode = word_mode; ! ! pos_mode = insn_data[(int) CODE_FOR_extv].operand[3].mode; ! if (pos_mode == VOIDmode) ! pos_mode = word_mode; ! ! extraction_mode = insn_data[(int) CODE_FOR_extv].operand[0].mode; ! if (extraction_mode == VOIDmode) ! extraction_mode = word_mode; } - #endif /* Never narrow an object, since that might not be safe. */ --- 6089,6116 ---- /* Get the mode to use should INNER not be a MEM, the mode for the position, and the mode for the result. */ ! if (in_dest && mode_for_extraction (EP_insv, -1) != MAX_MACHINE_MODE) { ! wanted_inner_reg_mode = mode_for_extraction (EP_insv, 0); ! pos_mode = mode_for_extraction (EP_insv, 2); ! extraction_mode = mode_for_extraction (EP_insv, 3); } ! if (! in_dest && unsignedp ! && mode_for_extraction (EP_extzv, -1) != MAX_MACHINE_MODE) { ! wanted_inner_reg_mode = mode_for_extraction (EP_extzv, 1); ! pos_mode = mode_for_extraction (EP_extzv, 3); ! extraction_mode = mode_for_extraction (EP_extzv, 0); } ! if (! in_dest && ! unsignedp ! && mode_for_extraction (EP_extv, -1) != MAX_MACHINE_MODE) { ! wanted_inner_reg_mode = mode_for_extraction (EP_extv, 1); ! pos_mode = mode_for_extraction (EP_extv, 3); ! extraction_mode = mode_for_extraction (EP_extv, 0); } /* Never narrow an object, since that might not be safe. */ *************** make_extraction (mode, inner, pos, pos_r *** 6223,6230 **** pos = width - len - pos; else pos_rtx ! = gen_rtx_combine (MINUS, GET_MODE (pos_rtx), ! GEN_INT (width - len), pos_rtx); /* POS may be less than 0 now, but we check for that below. Note that it can only be less than 0 if GET_CODE (inner) != MEM. */ } --- 6151,6157 ---- pos = width - len - pos; else pos_rtx ! = gen_rtx_MINUS (GET_MODE (pos_rtx), GEN_INT (width - len), pos_rtx); /* POS may be less than 0 now, but we check for that below. Note that it can only be less than 0 if GET_CODE (inner) != MEM. */ } *************** make_extraction (mode, inner, pos, pos_r *** 6266,6278 **** - GET_MODE_SIZE (wanted_inner_mode) - offset); if (offset != 0 || inner_mode != wanted_inner_mode) ! { ! rtx newmem = gen_rtx_MEM (wanted_inner_mode, ! plus_constant (XEXP (inner, 0), offset)); ! ! MEM_COPY_ATTRIBUTES (newmem, inner); ! inner = newmem; ! } } /* If INNER is not memory, we can always get it into the proper mode. If we --- 6193,6199 ---- - GET_MODE_SIZE (wanted_inner_mode) - offset); if (offset != 0 || inner_mode != wanted_inner_mode) ! inner = adjust_address_nv (inner, wanted_inner_mode, offset); } /* If INNER is not memory, we can always get it into the proper mode. If we *************** make_extraction (mode, inner, pos, pos_r *** 6299,6308 **** if (pos_rtx != 0 && GET_MODE_SIZE (pos_mode) > GET_MODE_SIZE (GET_MODE (pos_rtx))) { ! rtx temp = gen_rtx_combine (ZERO_EXTEND, pos_mode, pos_rtx); /* If we know that no extraneous bits are set, and that the high ! bit is not set, convert extraction to cheaper one - eighter SIGN_EXTENSION or ZERO_EXTENSION, that are equivalent in these cases. */ if (flag_expensive_optimizations --- 6220,6229 ---- if (pos_rtx != 0 && GET_MODE_SIZE (pos_mode) > GET_MODE_SIZE (GET_MODE (pos_rtx))) { ! rtx temp = gen_rtx_ZERO_EXTEND (pos_mode, pos_rtx); /* If we know that no extraneous bits are set, and that the high ! bit is not set, convert extraction to cheaper one - either SIGN_EXTENSION or ZERO_EXTENSION, that are equivalent in these cases. */ if (flag_expensive_optimizations *************** make_extraction (mode, inner, pos, pos_r *** 6336,6342 **** pos_rtx = GEN_INT (pos); /* Make the required operation. See if we can use existing rtx. */ ! new = gen_rtx_combine (unsignedp ? ZERO_EXTRACT : SIGN_EXTRACT, extraction_mode, inner, GEN_INT (len), pos_rtx); if (! in_dest) new = gen_lowpart_for_combine (mode, new); --- 6257,6263 ---- pos_rtx = GEN_INT (pos); /* Make the required operation. See if we can use existing rtx. */ ! new = gen_rtx_fmt_eee (unsignedp ? ZERO_EXTRACT : SIGN_EXTRACT, extraction_mode, inner, GEN_INT (len), pos_rtx); if (! in_dest) new = gen_lowpart_for_combine (mode, new); *************** extract_left_shift (x, count) *** 6370,6376 **** case NEG: case NOT: if ((tem = extract_left_shift (XEXP (x, 0), count)) != 0) ! return gen_unary (code, mode, mode, tem); break; --- 6291,6297 ---- case NEG: case NOT: if ((tem = extract_left_shift (XEXP (x, 0), count)) != 0) ! return simplify_gen_unary (code, mode, tem, mode); break; *************** extract_left_shift (x, count) *** 6398,6404 **** Return the new rtx, usually just X. ! Also, for machines like the Vax that don't have logical shift insns, try to convert logical to arithmetic shift operations in cases where they are equivalent. This undoes the canonicalizations to logical shifts done elsewhere. --- 6319,6325 ---- Return the new rtx, usually just X. ! Also, for machines like the VAX that don't have logical shift insns, try to convert logical to arithmetic shift operations in cases where they are equivalent. This undoes the canonicalizations to logical shifts done elsewhere. *************** make_compound_operation (x, in_code) *** 6447,6455 **** && INTVAL (XEXP (x, 1)) >= 0) { new = make_compound_operation (XEXP (x, 0), next_code); ! new = gen_rtx_combine (MULT, mode, new, ! GEN_INT ((HOST_WIDE_INT) 1 ! << INTVAL (XEXP (x, 1)))); } break; --- 6368,6376 ---- && INTVAL (XEXP (x, 1)) >= 0) { new = make_compound_operation (XEXP (x, 0), next_code); ! new = gen_rtx_MULT (mode, new, ! GEN_INT ((HOST_WIDE_INT) 1 ! << INTVAL (XEXP (x, 1)))); } break; *************** make_compound_operation (x, in_code) *** 6489,6499 **** && (i = exact_log2 (INTVAL (XEXP (x, 1)) + 1)) >= 0) { /* Apply the distributive law, and then try to make extractions. */ ! new = gen_rtx_combine (GET_CODE (XEXP (x, 0)), mode, ! gen_rtx_AND (mode, XEXP (XEXP (x, 0), 0), ! XEXP (x, 1)), ! gen_rtx_AND (mode, XEXP (XEXP (x, 0), 1), ! XEXP (x, 1))); new = make_compound_operation (new, in_code); } --- 6410,6420 ---- && (i = exact_log2 (INTVAL (XEXP (x, 1)) + 1)) >= 0) { /* Apply the distributive law, and then try to make extractions. */ ! new = gen_rtx_fmt_ee (GET_CODE (XEXP (x, 0)), mode, ! gen_rtx_AND (mode, XEXP (XEXP (x, 0), 0), ! XEXP (x, 1)), ! gen_rtx_AND (mode, XEXP (XEXP (x, 0), 1), ! XEXP (x, 1))); new = make_compound_operation (new, in_code); } *************** make_compound_operation (x, in_code) *** 6515,6524 **** /* On machines without logical shifts, if the operand of the AND is a logical shift and our mask turns off all the propagated sign bits, we can replace the logical shift with an arithmetic shift. */ ! else if (ashr_optab->handlers[(int) mode].insn_code != CODE_FOR_nothing ! && (lshr_optab->handlers[(int) mode].insn_code ! == CODE_FOR_nothing) ! && GET_CODE (XEXP (x, 0)) == LSHIFTRT && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT && INTVAL (XEXP (XEXP (x, 0), 1)) >= 0 && INTVAL (XEXP (XEXP (x, 0), 1)) < HOST_BITS_PER_WIDE_INT --- 6436,6444 ---- /* On machines without logical shifts, if the operand of the AND is a logical shift and our mask turns off all the propagated sign bits, we can replace the logical shift with an arithmetic shift. */ ! else if (GET_CODE (XEXP (x, 0)) == LSHIFTRT ! && !have_insn_for (LSHIFTRT, mode) ! && have_insn_for (ASHIFTRT, mode) && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT && INTVAL (XEXP (XEXP (x, 0), 1)) >= 0 && INTVAL (XEXP (XEXP (x, 0), 1)) < HOST_BITS_PER_WIDE_INT *************** make_compound_operation (x, in_code) *** 6529,6538 **** mask >>= INTVAL (XEXP (XEXP (x, 0), 1)); if ((INTVAL (XEXP (x, 1)) & ~mask) == 0) SUBST (XEXP (x, 0), ! gen_rtx_combine (ASHIFTRT, mode, ! make_compound_operation (XEXP (XEXP (x, 0), 0), ! next_code), ! XEXP (XEXP (x, 0), 1))); } /* If the constant is one less than a power of two, this might be --- 6449,6458 ---- mask >>= INTVAL (XEXP (XEXP (x, 0), 1)); if ((INTVAL (XEXP (x, 1)) & ~mask) == 0) SUBST (XEXP (x, 0), ! gen_rtx_ASHIFTRT (mode, ! make_compound_operation ! (XEXP (XEXP (x, 0), 0), next_code), ! XEXP (XEXP (x, 0), 1))); } /* If the constant is one less than a power of two, this might be *************** make_compound_operation (x, in_code) *** 6559,6573 **** case LSHIFTRT: /* If the sign bit is known to be zero, replace this with an arithmetic shift. */ ! if (ashr_optab->handlers[(int) mode].insn_code != CODE_FOR_nothing ! && lshr_optab->handlers[(int) mode].insn_code == CODE_FOR_nothing && mode_width <= HOST_BITS_PER_WIDE_INT && (nonzero_bits (XEXP (x, 0), mode) & (1 << (mode_width - 1))) == 0) { ! new = gen_rtx_combine (ASHIFTRT, mode, ! make_compound_operation (XEXP (x, 0), ! next_code), ! XEXP (x, 1)); break; } --- 6479,6493 ---- case LSHIFTRT: /* If the sign bit is known to be zero, replace this with an arithmetic shift. */ ! if (have_insn_for (ASHIFTRT, mode) ! && ! have_insn_for (LSHIFTRT, mode) && mode_width <= HOST_BITS_PER_WIDE_INT && (nonzero_bits (XEXP (x, 0), mode) & (1 << (mode_width - 1))) == 0) { ! new = gen_rtx_ASHIFTRT (mode, ! make_compound_operation (XEXP (x, 0), ! next_code), ! XEXP (x, 1)); break; } *************** make_compound_operation (x, in_code) *** 6623,6629 **** NULL_RTX, 0); /* If we have something other than a SUBREG, we might have ! done an expansion, so rerun outselves. */ if (GET_CODE (newer) != SUBREG) newer = make_compound_operation (newer, in_code); --- 6543,6549 ---- NULL_RTX, 0); /* If we have something other than a SUBREG, we might have ! done an expansion, so rerun ourselves. */ if (GET_CODE (newer) != SUBREG) newer = make_compound_operation (newer, in_code); *************** make_compound_operation (x, in_code) *** 6641,6647 **** if (GET_MODE_SIZE (mode) > GET_MODE_SIZE (GET_MODE (tem)) || (GET_MODE_SIZE (mode) > GET_MODE_SIZE (GET_MODE (XEXP (tem, 0))))) ! tem = gen_rtx_combine (GET_CODE (tem), mode, XEXP (tem, 0)); else tem = gen_lowpart_for_combine (mode, XEXP (tem, 0)); return tem; --- 6561,6567 ---- if (GET_MODE_SIZE (mode) > GET_MODE_SIZE (GET_MODE (tem)) || (GET_MODE_SIZE (mode) > GET_MODE_SIZE (GET_MODE (XEXP (tem, 0))))) ! tem = gen_rtx_fmt_e (GET_CODE (tem), mode, XEXP (tem, 0)); else tem = gen_lowpart_for_combine (mode, XEXP (tem, 0)); return tem; *************** force_to_mode (x, mode, mask, reg, just_ *** 6743,6751 **** that the operation is valid in MODE, in which case we do the operation in MODE. */ op_mode = ((GET_MODE_CLASS (mode) == GET_MODE_CLASS (GET_MODE (x)) ! && code_to_optab[(int) code] != 0 ! && (code_to_optab[(int) code]->handlers[(int) mode].insn_code ! != CODE_FOR_nothing)) ? mode : GET_MODE (x)); /* It is not valid to do a right-shift in a narrower mode --- 6663,6669 ---- that the operation is valid in MODE, in which case we do the operation in MODE. */ op_mode = ((GET_MODE_CLASS (mode) == GET_MODE_CLASS (GET_MODE (x)) ! && have_insn_for (code, mode)) ? mode : GET_MODE (x)); /* It is not valid to do a right-shift in a narrower mode *************** force_to_mode (x, mode, mask, reg, just_ *** 6862,6868 **** need it. */ if (GET_CODE (x) == AND && GET_CODE (XEXP (x, 1)) == CONST_INT ! && (unsigned HOST_WIDE_INT) INTVAL (XEXP (x, 1)) == mask) x = XEXP (x, 0); /* If it remains an AND, try making another AND with the bits --- 6780,6787 ---- need it. */ if (GET_CODE (x) == AND && GET_CODE (XEXP (x, 1)) == CONST_INT ! && ((INTVAL (XEXP (x, 1)) & GET_MODE_MASK (GET_MODE (x))) ! == (HOST_WIDE_INT) mask)) x = XEXP (x, 0); /* If it remains an AND, try making another AND with the bits *************** force_to_mode (x, mode, mask, reg, just_ *** 6913,6945 **** smask |= (HOST_WIDE_INT) -1 << width; if (GET_CODE (XEXP (x, 1)) == CONST_INT ! && exact_log2 (- smask) >= 0) ! { ! #ifdef STACK_BIAS ! if (STACK_BIAS ! && (XEXP (x, 0) == stack_pointer_rtx ! || XEXP (x, 0) == frame_pointer_rtx)) ! { ! int sp_alignment = STACK_BOUNDARY / BITS_PER_UNIT; ! unsigned HOST_WIDE_INT sp_mask = GET_MODE_MASK (mode); ! ! sp_mask &= ~(sp_alignment - 1); ! if ((sp_mask & ~smask) == 0 ! && ((INTVAL (XEXP (x, 1)) - STACK_BIAS) & ~smask) != 0) ! return force_to_mode (plus_constant (XEXP (x, 0), ! ((INTVAL (XEXP (x, 1)) - ! STACK_BIAS) & smask) ! + STACK_BIAS), ! mode, smask, reg, next_select); ! } ! #endif ! if ((nonzero_bits (XEXP (x, 0), mode) & ~smask) == 0 ! && (INTVAL (XEXP (x, 1)) & ~smask) != 0) ! return force_to_mode (plus_constant (XEXP (x, 0), ! (INTVAL (XEXP (x, 1)) ! & smask)), ! mode, smask, reg, next_select); ! } } /* ... fall through ... */ --- 6832,6843 ---- smask |= (HOST_WIDE_INT) -1 << width; if (GET_CODE (XEXP (x, 1)) == CONST_INT ! && exact_log2 (- smask) >= 0 ! && (nonzero_bits (XEXP (x, 0), mode) & ~smask) == 0 ! && (INTVAL (XEXP (x, 1)) & ~smask) != 0) ! return force_to_mode (plus_constant (XEXP (x, 0), ! (INTVAL (XEXP (x, 1)) & smask)), ! mode, smask, reg, next_select); } /* ... fall through ... */ *************** force_to_mode (x, mode, mask, reg, just_ *** 6959,6965 **** & -INTVAL (XEXP (x, 0)))) > mask)) { ! x = gen_unary (NEG, GET_MODE (x), GET_MODE (x), XEXP (x, 1)); return force_to_mode (x, mode, mask, reg, next_select); } --- 6857,6864 ---- & -INTVAL (XEXP (x, 0)))) > mask)) { ! x = simplify_gen_unary (NEG, GET_MODE (x), XEXP (x, 1), ! GET_MODE (x)); return force_to_mode (x, mode, mask, reg, next_select); } *************** force_to_mode (x, mode, mask, reg, just_ *** 6969,6975 **** && ((INTVAL (XEXP (x, 0)) | (HOST_WIDE_INT) mask) == INTVAL (XEXP (x, 0)))) { ! x = gen_unary (NOT, GET_MODE (x), GET_MODE (x), XEXP (x, 1)); return force_to_mode (x, mode, mask, reg, next_select); } --- 6868,6875 ---- && ((INTVAL (XEXP (x, 0)) | (HOST_WIDE_INT) mask) == INTVAL (XEXP (x, 0)))) { ! x = simplify_gen_unary (NOT, GET_MODE (x), ! XEXP (x, 1), GET_MODE (x)); return force_to_mode (x, mode, mask, reg, next_select); } *************** force_to_mode (x, mode, mask, reg, just_ *** 7005,7011 **** binop: /* For most binary operations, just propagate into the operation and ! change the mode if we have an operation of that mode. */ op0 = gen_lowpart_for_combine (op_mode, force_to_mode (XEXP (x, 0), mode, mask, --- 6905,6911 ---- binop: /* For most binary operations, just propagate into the operation and ! change the mode if we have an operation of that mode. */ op0 = gen_lowpart_for_combine (op_mode, force_to_mode (XEXP (x, 0), mode, mask, *************** force_to_mode (x, mode, mask, reg, just_ *** 7133,7139 **** { int i = -1; ! /* If the considered data is wider then HOST_WIDE_INT, we can't represent a mask for all its bits in a single scalar. But we only care about the lower bits, so calculate these. */ --- 7033,7039 ---- { int i = -1; ! /* If the considered data is wider than HOST_WIDE_INT, we can't represent a mask for all its bits in a single scalar. But we only care about the lower bits, so calculate these. */ *************** force_to_mode (x, mode, mask, reg, just_ *** 7216,7222 **** case NEG: /* If we just want the low-order bit, the NEG isn't needed since it ! won't change the low-order bit. */ if (mask == 1) return force_to_mode (XEXP (x, 0), mode, mask, reg, just_select); --- 7116,7122 ---- case NEG: /* If we just want the low-order bit, the NEG isn't needed since it ! won't change the low-order bit. */ if (mask == 1) return force_to_mode (XEXP (x, 0), mode, mask, reg, just_select); *************** force_to_mode (x, mode, mask, reg, just_ *** 7254,7260 **** force_to_mode (XEXP (x, 0), mode, mask, reg, next_select)); if (op_mode != GET_MODE (x) || op0 != XEXP (x, 0)) ! x = gen_unary (code, op_mode, op_mode, op0); break; case NE: --- 7154,7160 ---- force_to_mode (XEXP (x, 0), mode, mask, reg, next_select)); if (op_mode != GET_MODE (x) || op0 != XEXP (x, 0)) ! x = simplify_gen_unary (code, op_mode, op0, op_mode); break; case NE: *************** if_then_else_cond (x, ptrue, pfalse) *** 7321,7328 **** else if (GET_RTX_CLASS (code) == '1' && (cond0 = if_then_else_cond (XEXP (x, 0), &true0, &false0)) != 0) { ! *ptrue = gen_unary (code, mode, GET_MODE (XEXP (x, 0)), true0); ! *pfalse = gen_unary (code, mode, GET_MODE (XEXP (x, 0)), false0); return cond0; } --- 7221,7229 ---- else if (GET_RTX_CLASS (code) == '1' && (cond0 = if_then_else_cond (XEXP (x, 0), &true0, &false0)) != 0) { ! *ptrue = simplify_gen_unary (code, mode, true0, GET_MODE (XEXP (x, 0))); ! *pfalse = simplify_gen_unary (code, mode, false0, ! GET_MODE (XEXP (x, 0))); return cond0; } *************** if_then_else_cond (x, ptrue, pfalse) *** 7385,7397 **** *ptrue = gen_binary (MULT, mode, op0, const_true_rtx); *pfalse = gen_binary (MULT, mode, (code == MINUS ! ? gen_unary (NEG, mode, mode, op1) : op1), const_true_rtx); return cond0; } } ! /* Similarly for MULT, AND and UMIN, execpt that for these the result is always zero. */ if ((STORE_FLAG_VALUE == 1 || STORE_FLAG_VALUE == -1) && (code == MULT || code == AND || code == UMIN) --- 7286,7300 ---- *ptrue = gen_binary (MULT, mode, op0, const_true_rtx); *pfalse = gen_binary (MULT, mode, (code == MINUS ! ? simplify_gen_unary (NEG, mode, op1, ! mode) ! : op1), const_true_rtx); return cond0; } } ! /* Similarly for MULT, AND and UMIN, except that for these the result is always zero. */ if ((STORE_FLAG_VALUE == 1 || STORE_FLAG_VALUE == -1) && (code == MULT || code == AND || code == UMIN) *************** if_then_else_cond (x, ptrue, pfalse) *** 7434,7462 **** return cond0; } ! /* If X is a normal SUBREG with both inner and outer modes integral, ! we can narrow both the true and false values of the inner expression, ! if there is a condition. */ ! else if (code == SUBREG && GET_MODE_CLASS (mode) == MODE_INT ! && GET_MODE_CLASS (GET_MODE (SUBREG_REG (x))) == MODE_INT ! && GET_MODE_SIZE (mode) <= GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))) && 0 != (cond0 = if_then_else_cond (SUBREG_REG (x), &true0, &false0))) { ! if ((GET_CODE (SUBREG_REG (x)) == REG ! || GET_CODE (SUBREG_REG (x)) == MEM ! || CONSTANT_P (SUBREG_REG (x))) ! && GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))) > UNITS_PER_WORD ! && (WORDS_BIG_ENDIAN || SUBREG_WORD (x) != 0)) ! { ! true0 = operand_subword (true0, SUBREG_WORD (x), 0, ! GET_MODE (SUBREG_REG (x))); ! false0 = operand_subword (false0, SUBREG_WORD (x), 0, ! GET_MODE (SUBREG_REG (x))); ! } ! *ptrue = force_to_mode (true0, mode, ~(HOST_WIDE_INT) 0, NULL_RTX, 0); ! *pfalse ! = force_to_mode (false0, mode, ~(HOST_WIDE_INT) 0, NULL_RTX, 0); return cond0; } --- 7337,7352 ---- return cond0; } ! /* If X is a SUBREG, we can narrow both the true and false values ! if the inner expression, if there is a condition. */ ! else if (code == SUBREG && 0 != (cond0 = if_then_else_cond (SUBREG_REG (x), &true0, &false0))) { ! *ptrue = simplify_gen_subreg (mode, true0, ! GET_MODE (SUBREG_REG (x)), SUBREG_BYTE (x)); ! *pfalse = simplify_gen_subreg (mode, false0, ! GET_MODE (SUBREG_REG (x)), SUBREG_BYTE (x)); return cond0; } *************** if_then_else_cond (x, ptrue, pfalse) *** 7490,7496 **** && GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT && exact_log2 (nz = nonzero_bits (x, mode)) >= 0) { ! *ptrue = GEN_INT (nz), *pfalse = const0_rtx; return x; } --- 7380,7386 ---- && GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT && exact_log2 (nz = nonzero_bits (x, mode)) >= 0) { ! *ptrue = GEN_INT (trunc_int_for_mode (nz, mode)), *pfalse = const0_rtx; return x; } *************** known_cond (x, cond, reg, val) *** 7521,7528 **** if (side_effects_p (x)) return x; ! if (cond == EQ && rtx_equal_p (x, reg) && !FLOAT_MODE_P (cond)) return val; if (cond == UNEQ && rtx_equal_p (x, reg)) return val; --- 7411,7424 ---- if (side_effects_p (x)) return x; ! /* If either operand of the condition is a floating point value, ! then we have to avoid collapsing an EQ comparison. */ ! if (cond == EQ ! && rtx_equal_p (x, reg) ! && ! FLOAT_MODE_P (GET_MODE (x)) ! && ! FLOAT_MODE_P (GET_MODE (val))) return val; + if (cond == UNEQ && rtx_equal_p (x, reg)) return val; *************** known_cond (x, cond, reg, val) *** 7535,7542 **** case GE: case GT: case EQ: return XEXP (x, 0); case LT: case LE: ! return gen_unary (NEG, GET_MODE (XEXP (x, 0)), GET_MODE (XEXP (x, 0)), ! XEXP (x, 0)); default: break; } --- 7431,7439 ---- case GE: case GT: case EQ: return XEXP (x, 0); case LT: case LE: ! return simplify_gen_unary (NEG, GET_MODE (XEXP (x, 0)), ! XEXP (x, 0), ! GET_MODE (XEXP (x, 0))); default: break; } *************** known_cond (x, cond, reg, val) *** 7568,7574 **** { int unsignedp = (code == UMIN || code == UMAX); ! if (code == SMAX || code == UMAX) cond = reverse_condition (cond); switch (cond) --- 7465,7476 ---- { int unsignedp = (code == UMIN || code == UMAX); ! /* Do not reverse the condition when it is NE or EQ. ! This is because we cannot conclude anything about ! the value of 'SMAX (x, y)' when x is not equal to y, ! but we can when x equals y. */ ! if ((code == SMAX || code == UMAX) ! && ! (cond == EQ || cond == NE)) cond = reverse_condition (cond); switch (cond) *************** known_cond (x, cond, reg, val) *** 7587,7592 **** --- 7489,7538 ---- } } } + else if (code == SUBREG) + { + enum machine_mode inner_mode = GET_MODE (SUBREG_REG (x)); + rtx new, r = known_cond (SUBREG_REG (x), cond, reg, val); + + if (SUBREG_REG (x) != r) + { + /* We must simplify subreg here, before we lose track of the + original inner_mode. */ + new = simplify_subreg (GET_MODE (x), r, + inner_mode, SUBREG_BYTE (x)); + if (new) + return new; + else + SUBST (SUBREG_REG (x), r); + } + + return x; + } + /* We don't have to handle SIGN_EXTEND here, because even in the + case of replacing something with a modeless CONST_INT, a + CONST_INT is already (supposed to be) a valid sign extension for + its narrower mode, which implies it's already properly + sign-extended for the wider mode. Now, for ZERO_EXTEND, the + story is different. */ + else if (code == ZERO_EXTEND) + { + enum machine_mode inner_mode = GET_MODE (XEXP (x, 0)); + rtx new, r = known_cond (XEXP (x, 0), cond, reg, val); + + if (XEXP (x, 0) != r) + { + /* We must simplify the zero_extend here, before we lose + track of the original inner_mode. */ + new = simplify_unary_operation (ZERO_EXTEND, GET_MODE (x), + r, inner_mode); + if (new) + return new; + else + SUBST (XEXP (x, 0), r); + } + + return x; + } fmt = GET_RTX_FORMAT (code); for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) *************** make_field_assignment (x) *** 7755,7761 **** : ((unsigned HOST_WIDE_INT) 1 << len) - 1, dest, 0); ! return gen_rtx_combine (SET, VOIDmode, assign, src); } /* See if X is of the form (+ (* a c) (* b c)) and convert to (* (+ a b) c) --- 7701,7707 ---- : ((unsigned HOST_WIDE_INT) 1 << len) - 1, dest, 0); ! return gen_rtx_SET (VOIDmode, assign, src); } /* See if X is of the form (+ (* a c) (* b c)) and convert to (* (+ a b) c) *************** apply_distributive_law (x) *** 7818,7824 **** case SUBREG: /* Non-paradoxical SUBREGs distributes over all operations, provided ! the inner modes and word numbers are the same, this is an extraction of a low-order part, we don't convert an fp operation to int or vice versa, and we would not be converting a single-word operation into a multi-word operation. The latter test is not --- 7764,7770 ---- case SUBREG: /* Non-paradoxical SUBREGs distributes over all operations, provided ! the inner modes and byte offsets are the same, this is an extraction of a low-order part, we don't convert an fp operation to int or vice versa, and we would not be converting a single-word operation into a multi-word operation. The latter test is not *************** apply_distributive_law (x) *** 7829,7835 **** We produce the result slightly differently in this case. */ if (GET_MODE (SUBREG_REG (lhs)) != GET_MODE (SUBREG_REG (rhs)) ! || SUBREG_WORD (lhs) != SUBREG_WORD (rhs) || ! subreg_lowpart_p (lhs) || (GET_MODE_CLASS (GET_MODE (lhs)) != GET_MODE_CLASS (GET_MODE (SUBREG_REG (lhs)))) --- 7775,7781 ---- We produce the result slightly differently in this case. */ if (GET_MODE (SUBREG_REG (lhs)) != GET_MODE (SUBREG_REG (rhs)) ! || SUBREG_BYTE (lhs) != SUBREG_BYTE (rhs) || ! subreg_lowpart_p (lhs) || (GET_MODE_CLASS (GET_MODE (lhs)) != GET_MODE_CLASS (GET_MODE (SUBREG_REG (lhs)))) *************** apply_distributive_law (x) *** 7872,7878 **** if (code == XOR && inner_code == IOR) { inner_code = AND; ! other = gen_unary (NOT, GET_MODE (x), GET_MODE (x), other); } /* We may be able to continuing distributing the result, so call --- 7818,7824 ---- if (code == XOR && inner_code == IOR) { inner_code = AND; ! other = simplify_gen_unary (NOT, GET_MODE (x), other, GET_MODE (x)); } /* We may be able to continuing distributing the result, so call *************** simplify_and_const_int (x, mode, varop, *** 7899,7918 **** int i; /* Simplify VAROP knowing that we will be only looking at some of the ! bits in it. */ varop = force_to_mode (varop, mode, constop, NULL_RTX, 0); ! /* If VAROP is a CLOBBER, we will fail so return it; if it is a ! CONST_INT, we are done. */ ! if (GET_CODE (varop) == CLOBBER || GET_CODE (varop) == CONST_INT) return varop; /* See what bits may be nonzero in VAROP. Unlike the general case of a call to nonzero_bits, here we don't care about bits outside MODE. */ nonzero = nonzero_bits (varop, mode) & GET_MODE_MASK (mode); - nonzero = trunc_int_for_mode (nonzero, mode); /* Turn off all bits in the constant that are known to already be zero. Thus, if the AND isn't needed at all, we will have CONSTOP == NONZERO_BITS --- 7845,7872 ---- int i; /* Simplify VAROP knowing that we will be only looking at some of the ! bits in it. ! ! Note by passing in CONSTOP, we guarantee that the bits not set in ! CONSTOP are not significant and will never be examined. We must ! ensure that is the case by explicitly masking out those bits ! before returning. */ varop = force_to_mode (varop, mode, constop, NULL_RTX, 0); ! /* If VAROP is a CLOBBER, we will fail so return it. */ ! if (GET_CODE (varop) == CLOBBER) return varop; + /* If VAROP is a CONST_INT, then we need to apply the mask in CONSTOP + to VAROP and return the new constant. */ + if (GET_CODE (varop) == CONST_INT) + return GEN_INT (trunc_int_for_mode (INTVAL (varop) & constop, mode)); + /* See what bits may be nonzero in VAROP. Unlike the general case of a call to nonzero_bits, here we don't care about bits outside MODE. */ nonzero = nonzero_bits (varop, mode) & GET_MODE_MASK (mode); /* Turn off all bits in the constant that are known to already be zero. Thus, if the AND isn't needed at all, we will have CONSTOP == NONZERO_BITS *************** simplify_and_const_int (x, mode, varop, *** 7947,7952 **** --- 7901,7923 ---- simplify_and_const_int (NULL_RTX, GET_MODE (varop), XEXP (varop, 1), constop)))); + /* If VAROP is PLUS, and the constant is a mask of low bite, distribute + the AND and see if one of the operands simplifies to zero. If so, we + may eliminate it. */ + + if (GET_CODE (varop) == PLUS + && exact_log2 (constop + 1) >= 0) + { + rtx o0, o1; + + o0 = simplify_and_const_int (NULL_RTX, mode, XEXP (varop, 0), constop); + o1 = simplify_and_const_int (NULL_RTX, mode, XEXP (varop, 1), constop); + if (o0 == const0_rtx) + return o1; + if (o1 == const0_rtx) + return o0; + } + /* Get VAROP in MODE. Try to get a SUBREG if not. Don't make a new SUBREG if we already had one (just check for the simplest cases). */ if (x && GET_CODE (XEXP (x, 0)) == SUBREG *************** simplify_and_const_int (x, mode, varop, *** 7963,7980 **** /* If we are only masking insignificant bits, return VAROP. */ if (constop == nonzero) x = varop; - - /* Otherwise, return an AND. See how much, if any, of X we can use. */ - else if (x == 0 || GET_CODE (x) != AND || GET_MODE (x) != mode) - x = gen_binary (AND, mode, varop, GEN_INT (constop)); - else { ! if (GET_CODE (XEXP (x, 1)) != CONST_INT ! || (unsigned HOST_WIDE_INT) INTVAL (XEXP (x, 1)) != constop) ! SUBST (XEXP (x, 1), GEN_INT (constop)); ! SUBST (XEXP (x, 0), varop); } return x; --- 7934,7955 ---- /* If we are only masking insignificant bits, return VAROP. */ if (constop == nonzero) x = varop; else { ! /* Otherwise, return an AND. */ ! constop = trunc_int_for_mode (constop, mode); ! /* See how much, if any, of X we can use. */ ! if (x == 0 || GET_CODE (x) != AND || GET_MODE (x) != mode) ! x = gen_binary (AND, mode, varop, GEN_INT (constop)); ! else ! { ! if (GET_CODE (XEXP (x, 1)) != CONST_INT ! || (unsigned HOST_WIDE_INT) INTVAL (XEXP (x, 1)) != constop) ! SUBST (XEXP (x, 1), GEN_INT (constop)); ! ! SUBST (XEXP (x, 0), varop); ! } } return x; *************** nonzero_bits (x, mode) *** 8044,8050 **** switch (code) { case REG: ! #ifdef POINTERS_EXTEND_UNSIGNED /* If pointers extend unsigned and this is a pointer in Pmode, say that all the bits above ptr_mode are known to be zero. */ if (POINTERS_EXTEND_UNSIGNED && GET_MODE (x) == Pmode --- 8019,8025 ---- switch (code) { case REG: ! #if defined(POINTERS_EXTEND_UNSIGNED) && !defined(HAVE_ptr_extend) /* If pointers extend unsigned and this is a pointer in Pmode, say that all the bits above ptr_mode are known to be zero. */ if (POINTERS_EXTEND_UNSIGNED && GET_MODE (x) == Pmode *************** nonzero_bits (x, mode) *** 8052,8091 **** nonzero &= GET_MODE_MASK (ptr_mode); #endif ! #ifdef STACK_BOUNDARY ! /* If this is the stack pointer, we may know something about its ! alignment. If PUSH_ROUNDING is defined, it is possible for the ! stack to be momentarily aligned only to that amount, so we pick ! the least alignment. */ ! ! /* We can't check for arg_pointer_rtx here, because it is not ! guaranteed to have as much alignment as the stack pointer. ! In particular, in the Irix6 n64 ABI, the stack has 128 bit ! alignment but the argument pointer has only 64 bit alignment. */ ! ! if ((x == frame_pointer_rtx ! || x == stack_pointer_rtx ! || x == hard_frame_pointer_rtx ! || (REGNO (x) >= FIRST_VIRTUAL_REGISTER ! && REGNO (x) <= LAST_VIRTUAL_REGISTER)) ! #ifdef STACK_BIAS ! && !STACK_BIAS ! #endif ! ) { ! int sp_alignment = STACK_BOUNDARY / BITS_PER_UNIT; #ifdef PUSH_ROUNDING ! if (REGNO (x) == STACK_POINTER_REGNUM && PUSH_ARGS) ! sp_alignment = MIN (PUSH_ROUNDING (1), sp_alignment); #endif ! /* We must return here, otherwise we may get a worse result from ! one of the choices below. There is nothing useful below as ! far as the stack pointer is concerned. */ ! return nonzero &= ~(sp_alignment - 1); } - #endif /* If X is a register whose nonzero bits value is current, use it. Otherwise, if X is a register whose value we can find, use that --- 8027,8054 ---- nonzero &= GET_MODE_MASK (ptr_mode); #endif ! /* Include declared information about alignment of pointers. */ ! /* ??? We don't properly preserve REG_POINTER changes across ! pointer-to-integer casts, so we can't trust it except for ! things that we know must be pointers. See execute/960116-1.c. */ ! if ((x == stack_pointer_rtx ! || x == frame_pointer_rtx ! || x == arg_pointer_rtx) ! && REGNO_POINTER_ALIGN (REGNO (x))) { ! unsigned HOST_WIDE_INT alignment ! = REGNO_POINTER_ALIGN (REGNO (x)) / BITS_PER_UNIT; #ifdef PUSH_ROUNDING ! /* If PUSH_ROUNDING is defined, it is possible for the ! stack to be momentarily aligned only to that amount, ! so we pick the least alignment. */ ! if (x == stack_pointer_rtx && PUSH_ARGS) ! alignment = MIN (PUSH_ROUNDING (1), alignment); #endif ! nonzero &= ~(alignment - 1); } /* If X is a register whose nonzero bits value is current, use it. Otherwise, if X is a register whose value we can find, use that *************** nonzero_bits (x, mode) *** 8093,8106 **** for this register. */ if (reg_last_set_value[REGNO (x)] != 0 ! && reg_last_set_mode[REGNO (x)] == mode && (reg_last_set_label[REGNO (x)] == label_tick || (REGNO (x) >= FIRST_PSEUDO_REGISTER && REG_N_SETS (REGNO (x)) == 1 && ! REGNO_REG_SET_P (BASIC_BLOCK (0)->global_live_at_start, REGNO (x)))) && INSN_CUID (reg_last_set[REGNO (x)]) < subst_low_cuid) ! return reg_last_set_nonzero_bits[REGNO (x)]; tem = get_last_value (x); --- 8056,8071 ---- for this register. */ if (reg_last_set_value[REGNO (x)] != 0 ! && (reg_last_set_mode[REGNO (x)] == mode ! || (GET_MODE_CLASS (reg_last_set_mode[REGNO (x)]) == MODE_INT ! && GET_MODE_CLASS (mode) == MODE_INT)) && (reg_last_set_label[REGNO (x)] == label_tick || (REGNO (x) >= FIRST_PSEUDO_REGISTER && REG_N_SETS (REGNO (x)) == 1 && ! REGNO_REG_SET_P (BASIC_BLOCK (0)->global_live_at_start, REGNO (x)))) && INSN_CUID (reg_last_set[REGNO (x)]) < subst_low_cuid) ! return reg_last_set_nonzero_bits[REGNO (x)] & nonzero; tem = get_last_value (x); *************** nonzero_bits (x, mode) *** 8126,8135 **** | ((HOST_WIDE_INT) (-1) << GET_MODE_BITSIZE (GET_MODE (x)))); #endif ! return nonzero_bits (tem, mode); } else if (nonzero_sign_valid && reg_nonzero_bits[REGNO (x)]) ! return reg_nonzero_bits[REGNO (x)] & nonzero; else return nonzero; --- 8091,8107 ---- | ((HOST_WIDE_INT) (-1) << GET_MODE_BITSIZE (GET_MODE (x)))); #endif ! return nonzero_bits (tem, mode) & nonzero; } else if (nonzero_sign_valid && reg_nonzero_bits[REGNO (x)]) ! { ! unsigned HOST_WIDE_INT mask = reg_nonzero_bits[REGNO (x)]; ! ! if (GET_MODE_BITSIZE (GET_MODE (x)) < mode_width) ! /* We don't know anything about the upper bits. */ ! mask |= GET_MODE_MASK (mode) ^ GET_MODE_MASK (GET_MODE (x)); ! return nonzero & mask; ! } else return nonzero; *************** nonzero_bits (x, mode) *** 8228,8235 **** case XOR: case IOR: case UMIN: case UMAX: case SMIN: case SMAX: ! nonzero &= (nonzero_bits (XEXP (x, 0), mode) ! | nonzero_bits (XEXP (x, 1), mode)); break; case PLUS: case MINUS: --- 8200,8213 ---- case XOR: case IOR: case UMIN: case UMAX: case SMIN: case SMAX: ! { ! unsigned HOST_WIDE_INT nonzero0 = nonzero_bits (XEXP (x, 0), mode); ! ! /* Don't call nonzero_bits for the second time if it cannot change ! anything. */ ! if ((nonzero & nonzero0) != nonzero) ! nonzero &= (nonzero0 | nonzero_bits (XEXP (x, 1), mode)); ! } break; case PLUS: case MINUS: *************** nonzero_bits (x, mode) *** 8257,8278 **** switch (code) { case PLUS: - #ifdef STACK_BIAS - if (STACK_BIAS - && (XEXP (x, 0) == stack_pointer_rtx - || XEXP (x, 0) == frame_pointer_rtx) - && GET_CODE (XEXP (x, 1)) == CONST_INT) - { - int sp_alignment = STACK_BOUNDARY / BITS_PER_UNIT; - - nz0 = (GET_MODE_MASK (mode) & ~(sp_alignment - 1)); - nz1 = INTVAL (XEXP (x, 1)) - STACK_BIAS; - width0 = floor_log2 (nz0) + 1; - width1 = floor_log2 (nz1) + 1; - low0 = floor_log2 (nz0 & -nz0); - low1 = floor_log2 (nz1 & -nz1); - } - #endif result_width = MAX (width0, width1) + 1; result_low = MIN (low0, low1); break; --- 8235,8240 ---- *************** nonzero_bits (x, mode) *** 8284,8301 **** --- 8246,8271 ---- result_low = low0 + low1; break; case DIV: + if (width1 == 0) + break; if (! op0_maybe_minusp && ! op1_maybe_minusp) result_width = width0; break; case UDIV: + if (width1 == 0) + break; result_width = width0; break; case MOD: + if (width1 == 0) + break; if (! op0_maybe_minusp && ! op1_maybe_minusp) result_width = MIN (width0, width1); result_low = MIN (low0, low1); break; case UMOD: + if (width1 == 0) + break; result_width = MIN (width0, width1); result_low = MIN (low0, low1); break; *************** nonzero_bits (x, mode) *** 8313,8319 **** /* If pointers extend unsigned and this is an addition or subtraction to a pointer in Pmode, all the bits above ptr_mode are known to be zero. */ ! if (POINTERS_EXTEND_UNSIGNED && GET_MODE (x) == Pmode && (code == PLUS || code == MINUS) && GET_CODE (XEXP (x, 0)) == REG && REG_POINTER (XEXP (x, 0))) nonzero &= GET_MODE_MASK (ptr_mode); --- 8283,8289 ---- /* If pointers extend unsigned and this is an addition or subtraction to a pointer in Pmode, all the bits above ptr_mode are known to be zero. */ ! if (POINTERS_EXTEND_UNSIGNED > 0 && GET_MODE (x) == Pmode && (code == PLUS || code == MINUS) && GET_CODE (XEXP (x, 0)) == REG && REG_POINTER (XEXP (x, 0))) nonzero &= GET_MODE_MASK (ptr_mode); *************** num_sign_bit_copies (x, mode) *** 8494,8500 **** { case REG: ! #ifdef POINTERS_EXTEND_UNSIGNED /* If pointers extend signed and this is a pointer in Pmode, say that all the bits above ptr_mode are known to be sign bit copies. */ if (! POINTERS_EXTEND_UNSIGNED && GET_MODE (x) == Pmode && mode == Pmode --- 8464,8470 ---- { case REG: ! #if defined(POINTERS_EXTEND_UNSIGNED) && !defined(HAVE_ptr_extend) /* If pointers extend signed and this is a pointer in Pmode, say that all the bits above ptr_mode are known to be sign bit copies. */ if (! POINTERS_EXTEND_UNSIGNED && GET_MODE (x) == Pmode && mode == Pmode *************** num_sign_bit_copies (x, mode) *** 8516,8522 **** if (tem != 0) return num_sign_bit_copies (tem, mode); ! if (nonzero_sign_valid && reg_sign_bit_copies[REGNO (x)] != 0) return reg_sign_bit_copies[REGNO (x)]; break; --- 8486,8493 ---- if (tem != 0) return num_sign_bit_copies (tem, mode); ! if (nonzero_sign_valid && reg_sign_bit_copies[REGNO (x)] != 0 ! && GET_MODE_BITSIZE (GET_MODE (x)) == bitwidth) return reg_sign_bit_copies[REGNO (x)]; break; *************** num_sign_bit_copies (x, mode) *** 8604,8610 **** of sign bit copies, we can just subtract that amount from the number. */ if (GET_CODE (XEXP (x, 1)) == CONST_INT ! && INTVAL (XEXP (x, 1)) >= 0 && INTVAL (XEXP (x, 1)) < bitwidth) { num0 = num_sign_bit_copies (XEXP (x, 0), mode); return MAX (1, num0 - (code == ROTATE ? INTVAL (XEXP (x, 1)) --- 8575,8582 ---- of sign bit copies, we can just subtract that amount from the number. */ if (GET_CODE (XEXP (x, 1)) == CONST_INT ! && INTVAL (XEXP (x, 1)) >= 0 ! && INTVAL (XEXP (x, 1)) < (int) bitwidth) { num0 = num_sign_bit_copies (XEXP (x, 0), mode); return MAX (1, num0 - (code == ROTATE ? INTVAL (XEXP (x, 1)) *************** num_sign_bit_copies (x, mode) *** 8665,8672 **** if (! POINTERS_EXTEND_UNSIGNED && GET_MODE (x) == Pmode && (code == PLUS || code == MINUS) && GET_CODE (XEXP (x, 0)) == REG && REG_POINTER (XEXP (x, 0))) ! result = MAX ((GET_MODE_BITSIZE (Pmode) ! - GET_MODE_BITSIZE (ptr_mode) + 1), result); #endif return result; --- 8637,8644 ---- if (! POINTERS_EXTEND_UNSIGNED && GET_MODE (x) == Pmode && (code == PLUS || code == MINUS) && GET_CODE (XEXP (x, 0)) == REG && REG_POINTER (XEXP (x, 0))) ! result = MAX ((int) (GET_MODE_BITSIZE (Pmode) ! - GET_MODE_BITSIZE (ptr_mode) + 1), result); #endif return result; *************** num_sign_bit_copies (x, mode) *** 8704,8710 **** 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); case DIV: --- 8676,8682 ---- return num_sign_bit_copies (XEXP (x, 0), mode); case UMOD: ! /* The result must be <= the second operand. */ return num_sign_bit_copies (XEXP (x, 1), mode); case DIV: *************** num_sign_bit_copies (x, mode) *** 8736,8742 **** num0 = num_sign_bit_copies (XEXP (x, 0), mode); if (GET_CODE (XEXP (x, 1)) == CONST_INT && INTVAL (XEXP (x, 1)) > 0) ! num0 = MIN (bitwidth, num0 + INTVAL (XEXP (x, 1))); return num0; --- 8708,8714 ---- num0 = num_sign_bit_copies (XEXP (x, 0), mode); if (GET_CODE (XEXP (x, 1)) == CONST_INT && INTVAL (XEXP (x, 1)) > 0) ! num0 = MIN ((int) bitwidth, num0 + INTVAL (XEXP (x, 1))); return num0; *************** num_sign_bit_copies (x, mode) *** 8744,8750 **** /* Left shifts destroy copies. */ if (GET_CODE (XEXP (x, 1)) != CONST_INT || INTVAL (XEXP (x, 1)) < 0 ! || INTVAL (XEXP (x, 1)) >= bitwidth) return 1; num0 = num_sign_bit_copies (XEXP (x, 0), mode); --- 8716,8722 ---- /* Left shifts destroy copies. */ if (GET_CODE (XEXP (x, 1)) != CONST_INT || INTVAL (XEXP (x, 1)) < 0 ! || INTVAL (XEXP (x, 1)) >= (int) bitwidth) return 1; num0 = num_sign_bit_copies (XEXP (x, 0), mode); *************** merge_outer_ops (pop0, pconst0, op1, con *** 8960,8974 **** are ASHIFTRT and ROTATE, which are always done in their original mode, */ static rtx ! simplify_shift_const (x, code, result_mode, varop, input_count) rtx x; enum rtx_code code; enum machine_mode result_mode; rtx varop; ! int input_count; { enum rtx_code orig_code = code; - int orig_count = input_count; unsigned int count; int signed_count; enum machine_mode mode = result_mode; --- 8932,8945 ---- are ASHIFTRT and ROTATE, which are always done in their original mode, */ static rtx ! simplify_shift_const (x, code, result_mode, varop, orig_count) rtx x; enum rtx_code code; enum machine_mode result_mode; rtx varop; ! int orig_count; { enum rtx_code orig_code = code; unsigned int count; int signed_count; enum machine_mode mode = result_mode; *************** simplify_shift_const (x, code, result_mo *** 8982,9007 **** int complement_p = 0; rtx new; /* If we were given an invalid count, don't do anything except exactly what was requested. */ ! if (input_count < 0 || input_count > (int) GET_MODE_BITSIZE (mode)) { if (x) return x; ! return gen_rtx_fmt_ee (code, mode, varop, GEN_INT (input_count)); } ! count = input_count; ! ! /* Make sure and truncate the "natural" shift on the way in. We don't ! want to do this inside the loop as it makes it more difficult to ! combine shifts. */ ! #ifdef SHIFT_COUNT_TRUNCATED ! if (SHIFT_COUNT_TRUNCATED) ! count %= GET_MODE_BITSIZE (mode); ! #endif /* Unless one of the branches of the `if' in this loop does a `continue', we will `break' the loop after the `if'. */ --- 8953,8978 ---- int complement_p = 0; rtx new; + /* Make sure and truncate the "natural" shift on the way in. We don't + want to do this inside the loop as it makes it more difficult to + combine shifts. */ + #ifdef SHIFT_COUNT_TRUNCATED + if (SHIFT_COUNT_TRUNCATED) + orig_count &= GET_MODE_BITSIZE (mode) - 1; + #endif + /* If we were given an invalid count, don't do anything except exactly what was requested. */ ! if (orig_count < 0 || orig_count >= (int) GET_MODE_BITSIZE (mode)) { if (x) return x; ! return gen_rtx_fmt_ee (code, mode, varop, GEN_INT (orig_count)); } ! count = orig_count; /* Unless one of the branches of the `if' in this loop does a `continue', we will `break' the loop after the `if'. */ *************** simplify_shift_const (x, code, result_mo *** 9079,9085 **** /* We simplify the tests below and elsewhere by converting ASHIFTRT to LSHIFTRT if we know the sign bit is clear. `make_compound_operation' will convert it to a ASHIFTRT for ! those machines (such as Vax) that don't have a LSHIFTRT. */ if (GET_MODE_BITSIZE (shift_mode) <= HOST_BITS_PER_WIDE_INT && code == ASHIFTRT && ((nonzero_bits (varop, shift_mode) --- 9050,9056 ---- /* We simplify the tests below and elsewhere by converting ASHIFTRT to LSHIFTRT if we know the sign bit is clear. `make_compound_operation' will convert it to a ASHIFTRT for ! those machines (such as VAX) that don't have a LSHIFTRT. */ if (GET_MODE_BITSIZE (shift_mode) <= HOST_BITS_PER_WIDE_INT && code == ASHIFTRT && ((nonzero_bits (varop, shift_mode) *************** simplify_shift_const (x, code, result_mo *** 9111,9126 **** && (tmode = mode_for_size (GET_MODE_BITSIZE (mode) - count, MODE_INT, 1)) != BLKmode) { ! if (BYTES_BIG_ENDIAN) ! new = gen_rtx_MEM (tmode, XEXP (varop, 0)); ! else ! new = gen_rtx_MEM (tmode, ! plus_constant (XEXP (varop, 0), ! count / BITS_PER_UNIT)); ! MEM_COPY_ATTRIBUTES (new, varop); ! varop = gen_rtx_combine (code == ASHIFTRT ? SIGN_EXTEND ! : ZERO_EXTEND, mode, new); count = 0; continue; } --- 9082,9093 ---- && (tmode = mode_for_size (GET_MODE_BITSIZE (mode) - count, MODE_INT, 1)) != BLKmode) { ! new = adjust_address_nv (varop, tmode, ! BYTES_BIG_ENDIAN ? 0 ! : count / BITS_PER_UNIT); ! varop = gen_rtx_fmt_e (code == ASHIFTRT ? SIGN_EXTEND ! : ZERO_EXTEND, mode, new); count = 0; continue; } *************** simplify_shift_const (x, code, result_mo *** 9146,9153 **** count / BITS_PER_UNIT)); } ! varop = gen_rtx_combine (code == ASHIFTRT ? SIGN_EXTEND ! : ZERO_EXTEND, mode, new); count = 0; continue; } --- 9113,9120 ---- count / BITS_PER_UNIT)); } ! varop = gen_rtx_fmt_e (code == ASHIFTRT ? SIGN_EXTEND ! : ZERO_EXTEND, mode, new); count = 0; continue; } *************** simplify_shift_const (x, code, result_mo *** 9368,9374 **** XEXP (varop, 0), GEN_INT (count)))) { ! varop = gen_rtx_combine (code, mode, new, XEXP (varop, 1)); count = 0; continue; } --- 9335,9341 ---- XEXP (varop, 0), GEN_INT (count)))) { ! varop = gen_rtx_fmt_ee (code, mode, new, XEXP (varop, 1)); count = 0; continue; } *************** simplify_shift_const (x, code, result_mo *** 9376,9383 **** case NOT: /* Make this fit the case below. */ ! varop = gen_rtx_combine (XOR, mode, XEXP (varop, 0), ! GEN_INT (GET_MODE_MASK (mode))); continue; case IOR: --- 9343,9350 ---- case NOT: /* Make this fit the case below. */ ! varop = gen_rtx_XOR (mode, XEXP (varop, 0), ! GEN_INT (GET_MODE_MASK (mode))); continue; case IOR: *************** simplify_shift_const (x, code, result_mo *** 9398,9408 **** && rtx_equal_p (XEXP (XEXP (varop, 0), 0), XEXP (varop, 1))) { count = 0; ! varop = gen_rtx_combine (LE, GET_MODE (varop), XEXP (varop, 1), ! const0_rtx); if (STORE_FLAG_VALUE == 1 ? code == ASHIFTRT : code == LSHIFTRT) ! varop = gen_rtx_combine (NEG, GET_MODE (varop), varop); continue; } --- 9365,9375 ---- && rtx_equal_p (XEXP (XEXP (varop, 0), 0), XEXP (varop, 1))) { count = 0; ! varop = gen_rtx_LE (GET_MODE (varop), XEXP (varop, 1), ! const0_rtx); if (STORE_FLAG_VALUE == 1 ? code == ASHIFTRT : code == LSHIFTRT) ! varop = gen_rtx_NEG (GET_MODE (varop), varop); continue; } *************** simplify_shift_const (x, code, result_mo *** 9564,9574 **** && rtx_equal_p (XEXP (XEXP (varop, 0), 0), XEXP (varop, 1))) { count = 0; ! varop = gen_rtx_combine (GT, GET_MODE (varop), XEXP (varop, 1), ! const0_rtx); if (STORE_FLAG_VALUE == 1 ? code == ASHIFTRT : code == LSHIFTRT) ! varop = gen_rtx_combine (NEG, GET_MODE (varop), varop); continue; } --- 9531,9541 ---- && rtx_equal_p (XEXP (XEXP (varop, 0), 0), XEXP (varop, 1))) { count = 0; ! varop = gen_rtx_GT (GET_MODE (varop), XEXP (varop, 1), ! const0_rtx); if (STORE_FLAG_VALUE == 1 ? code == ASHIFTRT : code == LSHIFTRT) ! varop = gen_rtx_NEG (GET_MODE (varop), varop); continue; } *************** simplify_shift_const (x, code, result_mo *** 9587,9598 **** rtx varop_inner = XEXP (varop, 0); varop_inner ! = gen_rtx_combine (LSHIFTRT, GET_MODE (varop_inner), ! XEXP (varop_inner, 0), ! GEN_INT (count ! + INTVAL (XEXP (varop_inner, 1)))); ! varop = gen_rtx_combine (TRUNCATE, GET_MODE (varop), ! varop_inner); count = 0; continue; } --- 9554,9564 ---- rtx varop_inner = XEXP (varop, 0); varop_inner ! = gen_rtx_LSHIFTRT (GET_MODE (varop_inner), ! XEXP (varop_inner, 0), ! GEN_INT ! (count + INTVAL (XEXP (varop_inner, 1)))); ! varop = gen_rtx_TRUNCATE (GET_MODE (varop), varop_inner); count = 0; continue; } *************** simplify_shift_const (x, code, result_mo *** 9645,9657 **** if (new != 0) x = new; else ! { ! if (x == 0 || GET_CODE (x) != code || GET_MODE (x) != shift_mode) ! x = gen_rtx_combine (code, shift_mode, varop, const_rtx); ! ! SUBST (XEXP (x, 0), varop); ! SUBST (XEXP (x, 1), const_rtx); ! } /* If we have an outer operation and we just made a shift, it is possible that we could have simplified the shift were it not --- 9611,9617 ---- if (new != 0) x = new; else ! x = gen_rtx_fmt_ee (code, shift_mode, varop, const_rtx); /* If we have an outer operation and we just made a shift, it is possible that we could have simplified the shift were it not *************** simplify_shift_const (x, code, result_mo *** 9675,9681 **** /* If COMPLEMENT_P is set, we have to complement X before doing the outer operation. */ if (complement_p) ! x = gen_unary (NOT, result_mode, result_mode, x); if (outer_op != NIL) { --- 9635,9641 ---- /* If COMPLEMENT_P is set, we have to complement X before doing the outer operation. */ if (complement_p) ! x =simplify_gen_unary (NOT, result_mode, x, result_mode); if (outer_op != NIL) { *************** simplify_shift_const (x, code, result_mo *** 9689,9695 **** equivalent to a constant. This should be rare. */ x = GEN_INT (outer_const); else if (GET_RTX_CLASS (outer_op) == '1') ! x = gen_unary (outer_op, result_mode, result_mode, x); else x = gen_binary (outer_op, result_mode, x, GEN_INT (outer_const)); } --- 9649,9655 ---- equivalent to a constant. This should be rare. */ x = GEN_INT (outer_const); else if (GET_RTX_CLASS (outer_op) == '1') ! x = simplify_gen_unary (outer_op, result_mode, x, result_mode); else x = gen_binary (outer_op, result_mode, x, GEN_INT (outer_const)); } *************** recog_for_combine (pnewpat, insn, pnotes *** 9716,9727 **** rtx insn; rtx *pnotes; { ! register rtx pat = *pnewpat; int insn_code_number; int num_clobbers_to_add = 0; int i; rtx notes = 0; ! rtx old_notes; /* If PAT is a PARALLEL, check to see if it contains the CLOBBER we use to indicate that something didn't match. If we find such a --- 9676,9687 ---- rtx insn; rtx *pnotes; { ! rtx pat = *pnewpat; int insn_code_number; int num_clobbers_to_add = 0; int i; rtx notes = 0; ! rtx dummy_insn; /* If PAT is a PARALLEL, check to see if it contains the CLOBBER we use to indicate that something didn't match. If we find such a *************** recog_for_combine (pnewpat, insn, pnotes *** 9732,9743 **** && XEXP (XVECEXP (pat, 0, i), 0) == const0_rtx) return -1; ! /* Remove the old notes prior to trying to recognize the new pattern. */ ! old_notes = REG_NOTES (insn); ! REG_NOTES (insn) = 0; ! /* Is the result of combination a valid instruction? */ ! insn_code_number = recog (pat, insn, &num_clobbers_to_add); /* If it isn't, there is the possibility that we previously had an insn that clobbered some register as a side effect, but the combined --- 9692,9704 ---- && XEXP (XVECEXP (pat, 0, i), 0) == const0_rtx) return -1; ! /* *pnewpat does not have to be actual PATTERN (insn), so make a dummy ! instruction for pattern recognition. */ ! dummy_insn = shallow_copy_rtx (insn); ! PATTERN (dummy_insn) = pat; ! REG_NOTES (dummy_insn) = 0; ! insn_code_number = recog (pat, dummy_insn, &num_clobbers_to_add); /* If it isn't, there is the possibility that we previously had an insn that clobbered some register as a side effect, but the combined *************** recog_for_combine (pnewpat, insn, pnotes *** 9762,9771 **** if (pos == 1) pat = XVECEXP (pat, 0, 0); ! insn_code_number = recog (pat, insn, &num_clobbers_to_add); } ! REG_NOTES (insn) = old_notes; /* If we had any clobbers to add, make a new pattern than contains them. Then check to make sure that all of them are dead. */ --- 9723,9735 ---- if (pos == 1) pat = XVECEXP (pat, 0, 0); ! PATTERN (dummy_insn) = pat; ! insn_code_number = recog (pat, dummy_insn, &num_clobbers_to_add); } ! /* Recognize all noop sets, these will be killed by followup pass. */ ! if (insn_code_number < 0 && GET_CODE (pat) == SET && set_noop_p (pat)) ! insn_code_number = NOOP_MOVE_INSN_CODE, num_clobbers_to_add = 0; /* If we had any clobbers to add, make a new pattern than contains them. Then check to make sure that all of them are dead. */ *************** recog_for_combine (pnewpat, insn, pnotes *** 9817,9823 **** static rtx gen_lowpart_for_combine (mode, x) enum machine_mode mode; ! register rtx x; { rtx result; --- 9781,9787 ---- static rtx gen_lowpart_for_combine (mode, x) enum machine_mode mode; ! rtx x; { rtx result; *************** gen_lowpart_for_combine (mode, x) *** 9860,9867 **** if (GET_CODE (x) == MEM) { ! register int offset = 0; ! rtx new; /* Refuse to work on a volatile memory ref or one with a mode-dependent address. */ --- 9824,9830 ---- if (GET_CODE (x) == MEM) { ! int offset = 0; /* Refuse to work on a volatile memory ref or one with a mode-dependent address. */ *************** gen_lowpart_for_combine (mode, x) *** 9885,9992 **** offset -= (MIN (UNITS_PER_WORD, GET_MODE_SIZE (mode)) - MIN (UNITS_PER_WORD, GET_MODE_SIZE (GET_MODE (x)))); } ! new = gen_rtx_MEM (mode, plus_constant (XEXP (x, 0), offset)); ! MEM_COPY_ATTRIBUTES (new, x); ! return new; } /* If X is a comparison operator, rewrite it in a new mode. This probably won't match, but may allow further simplifications. */ else if (GET_RTX_CLASS (GET_CODE (x)) == '<') ! return gen_rtx_combine (GET_CODE (x), mode, XEXP (x, 0), XEXP (x, 1)); /* If we couldn't simplify X any other way, just enclose it in a SUBREG. Normally, this SUBREG won't match, but some patterns may include an explicit SUBREG or we may simplify it further in combine. */ else { ! int word = 0; ! if (WORDS_BIG_ENDIAN && GET_MODE_SIZE (GET_MODE (x)) > UNITS_PER_WORD) ! word = ((GET_MODE_SIZE (GET_MODE (x)) ! - MAX (GET_MODE_SIZE (mode), UNITS_PER_WORD)) ! / UNITS_PER_WORD); ! return gen_rtx_SUBREG (mode, x, word); } } - /* Make an rtx expression. This is a subset of gen_rtx and only supports - expressions of 1, 2, or 3 operands, each of which are rtx expressions. - - If the identical expression was previously in the insn (in the undobuf), - it will be returned. Only if it is not found will a new expression - be made. */ - - /*VARARGS2*/ - static rtx - gen_rtx_combine VPARAMS ((enum rtx_code code, enum machine_mode mode, ...)) - { - #ifndef ANSI_PROTOTYPES - enum rtx_code code; - enum machine_mode mode; - #endif - va_list p; - int n_args; - rtx args[3]; - int j; - const char *fmt; - rtx rt; - struct undo *undo; - - VA_START (p, mode); - - #ifndef ANSI_PROTOTYPES - code = va_arg (p, enum rtx_code); - mode = va_arg (p, enum machine_mode); - #endif - - n_args = GET_RTX_LENGTH (code); - fmt = GET_RTX_FORMAT (code); - - if (n_args == 0 || n_args > 3) - abort (); - - /* Get each arg and verify that it is supposed to be an expression. */ - for (j = 0; j < n_args; j++) - { - if (*fmt++ != 'e') - abort (); - - args[j] = va_arg (p, rtx); - } - - va_end (p); - - /* See if this is in undobuf. Be sure we don't use objects that came - from another insn; this could produce circular rtl structures. */ - - for (undo = undobuf.undos; undo != undobuf.previous_undos; undo = undo->next) - if (!undo->is_int - && GET_CODE (undo->old_contents.r) == code - && GET_MODE (undo->old_contents.r) == mode) - { - for (j = 0; j < n_args; j++) - if (XEXP (undo->old_contents.r, j) != args[j]) - break; - - if (j == n_args) - return undo->old_contents.r; - } - - /* Otherwise make a new rtx. We know we have 1, 2, or 3 args. - Use rtx_alloc instead of gen_rtx because it's faster on RISC. */ - rt = rtx_alloc (code); - PUT_MODE (rt, mode); - XEXP (rt, 0) = args[0]; - if (n_args > 1) - { - XEXP (rt, 1) = args[1]; - if (n_args > 2) - XEXP (rt, 2) = args[2]; - } - return rt; - } - /* These routines make binary and unary operations by first seeing if they fold; if not, a new expression is allocated. */ --- 9848,9878 ---- offset -= (MIN (UNITS_PER_WORD, GET_MODE_SIZE (mode)) - MIN (UNITS_PER_WORD, GET_MODE_SIZE (GET_MODE (x)))); } ! ! return adjust_address_nv (x, mode, offset); } /* If X is a comparison operator, rewrite it in a new mode. This probably won't match, but may allow further simplifications. */ else if (GET_RTX_CLASS (GET_CODE (x)) == '<') ! return gen_rtx_fmt_ee (GET_CODE (x), mode, XEXP (x, 0), XEXP (x, 1)); /* If we couldn't simplify X any other way, just enclose it in a SUBREG. Normally, this SUBREG won't match, but some patterns may include an explicit SUBREG or we may simplify it further in combine. */ else { ! int offset = 0; ! rtx res; ! offset = subreg_lowpart_offset (mode, GET_MODE (x)); ! res = simplify_gen_subreg (mode, x, GET_MODE (x), offset); ! if (res) ! return res; ! return gen_rtx_CLOBBER (GET_MODE (x), const0_rtx); } } /* These routines make binary and unary operations by first seeing if they fold; if not, a new expression is allocated. */ *************** gen_binary (code, mode, op0, op1) *** 10000,10007 **** rtx tem; if (GET_RTX_CLASS (code) == 'c' ! && (GET_CODE (op0) == CONST_INT ! || (CONSTANT_P (op0) && GET_CODE (op1) != CONST_INT))) tem = op0, op0 = op1, op1 = tem; if (GET_RTX_CLASS (code) == '<') --- 9886,9892 ---- rtx tem; if (GET_RTX_CLASS (code) == 'c' ! && swap_commutative_operands_p (op0, op1)) tem = op0, op0 = op1, op1 = tem; if (GET_RTX_CLASS (code) == '<') *************** gen_binary (code, mode, op0, op1) *** 10029,10041 **** /* Put complex operands first and constants second. */ if (GET_RTX_CLASS (code) == 'c' ! && ((CONSTANT_P (op0) && GET_CODE (op1) != CONST_INT) ! || (GET_RTX_CLASS (GET_CODE (op0)) == 'o' ! && GET_RTX_CLASS (GET_CODE (op1)) != 'o') ! || (GET_CODE (op0) == SUBREG ! && GET_RTX_CLASS (GET_CODE (SUBREG_REG (op0))) == 'o' ! && GET_RTX_CLASS (GET_CODE (op1)) != 'o'))) ! return gen_rtx_combine (code, mode, op1, op0); /* If we are turning off bits already known off in OP0, we need not do an AND. */ --- 9914,9921 ---- /* Put complex operands first and constants second. */ if (GET_RTX_CLASS (code) == 'c' ! && swap_commutative_operands_p (op0, op1)) ! return gen_rtx_fmt_ee (code, mode, op1, op0); /* If we are turning off bits already known off in OP0, we need not do an AND. */ *************** gen_binary (code, mode, op0, op1) *** 10044,10064 **** && (nonzero_bits (op0, mode) & ~INTVAL (op1)) == 0) return op0; ! return gen_rtx_combine (code, mode, op0, op1); ! } ! ! static rtx ! gen_unary (code, mode, op0_mode, op0) ! enum rtx_code code; ! enum machine_mode mode, op0_mode; ! rtx op0; ! { ! rtx result = simplify_unary_operation (code, mode, op0, op0_mode); ! ! if (result) ! return result; ! ! return gen_rtx_combine (code, mode, op0); } /* Simplify a comparison between *POP0 and *POP1 where CODE is the --- 9924,9930 ---- && (nonzero_bits (op0, mode) & ~INTVAL (op1)) == 0) return op0; ! return gen_rtx_fmt_ee (code, mode, op0, op1); } /* Simplify a comparison between *POP0 and *POP1 where CODE is the *************** simplify_comparison (code, pop0, pop1) *** 10126,10132 **** && (code != GT && code != LT && code != GE && code != LE)) || (GET_CODE (op0) == ASHIFTRT && (code != GTU && code != LTU ! && code != GEU && code != GEU))) && GET_CODE (XEXP (op0, 1)) == CONST_INT && INTVAL (XEXP (op0, 1)) >= 0 && INTVAL (XEXP (op0, 1)) < HOST_BITS_PER_WIDE_INT --- 9992,9998 ---- && (code != GT && code != LT && code != GE && code != LE)) || (GET_CODE (op0) == ASHIFTRT && (code != GTU && code != LTU ! && code != GEU && code != LEU))) && GET_CODE (XEXP (op0, 1)) == CONST_INT && INTVAL (XEXP (op0, 1)) >= 0 && INTVAL (XEXP (op0, 1)) < HOST_BITS_PER_WIDE_INT *************** simplify_comparison (code, pop0, pop1) *** 10225,10231 **** /* If the first operand is a constant, swap the operands and adjust the comparison code appropriately, but don't do this if the second operand is already a constant integer. */ ! if (CONSTANT_P (op0) && GET_CODE (op1) != CONST_INT) { tem = op0, op0 = op1, op1 = tem; code = swap_condition (code); --- 10091,10097 ---- /* If the first operand is a constant, swap the operands and adjust the comparison code appropriately, but don't do this if the second operand is already a constant integer. */ ! if (swap_commutative_operands_p (op0, op1)) { tem = op0, op0 = op1, op1 = tem; code = swap_condition (code); *************** simplify_comparison (code, pop0, pop1) *** 10260,10265 **** --- 10126,10132 ---- /* Get the constant we are comparing against and turn off all bits not on in our mode. */ const_op = trunc_int_for_mode (INTVAL (op1), mode); + op1 = GEN_INT (const_op); /* If we are comparing against a constant power of two and the value being compared can only have that single bit nonzero (e.g., it was *************** simplify_comparison (code, pop0, pop1) *** 10463,10476 **** { if (BITS_BIG_ENDIAN) { ! #ifdef HAVE_extzv ! mode = insn_data[(int) CODE_FOR_extzv].operand[1].mode; ! if (mode == VOIDmode) ! mode = word_mode; ! i = (GET_MODE_BITSIZE (mode) - 1 - i); ! #else ! i = BITS_PER_WORD - 1 - i; ! #endif } op0 = XEXP (op0, 2); --- 10330,10344 ---- { if (BITS_BIG_ENDIAN) { ! enum machine_mode new_mode ! = mode_for_extraction (EP_extzv, 1); ! if (new_mode == MAX_MACHINE_MODE) ! i = BITS_PER_WORD - 1 - i; ! else ! { ! mode = new_mode; ! i = (GET_MODE_BITSIZE (mode) - 1 - i); ! } } op0 = XEXP (op0, 2); *************** simplify_comparison (code, pop0, pop1) *** 10770,10776 **** new_code = GET_CODE (op0); else new_code = combine_reversed_comparison_code (op0); ! if (new_code != UNKNOWN) { code = new_code; --- 10638,10644 ---- new_code = GET_CODE (op0); else new_code = combine_reversed_comparison_code (op0); ! if (new_code != UNKNOWN) { code = new_code; *************** simplify_comparison (code, pop0, pop1) *** 10802,10810 **** && XEXP (XEXP (op0, 0), 0) == const1_rtx) { op0 = simplify_and_const_int ! (op0, mode, gen_rtx_combine (LSHIFTRT, mode, ! XEXP (op0, 1), ! XEXP (XEXP (op0, 0), 1)), (HOST_WIDE_INT) 1); continue; } --- 10670,10678 ---- && XEXP (XEXP (op0, 0), 0) == const1_rtx) { op0 = simplify_and_const_int ! (op0, mode, gen_rtx_LSHIFTRT (mode, ! XEXP (op0, 1), ! XEXP (XEXP (op0, 0), 1)), (HOST_WIDE_INT) 1); continue; } *************** simplify_comparison (code, pop0, pop1) *** 10917,10925 **** && GET_CODE (XEXP (XEXP (op0, 0), 0)) == NOT) { op0 = simplify_and_const_int ! (op0, mode, gen_rtx_combine (LSHIFTRT, mode, ! XEXP (XEXP (XEXP (op0, 0), 0), 0), ! XEXP (XEXP (op0, 0), 1)), (HOST_WIDE_INT) 1); code = (code == NE ? EQ : NE); continue; --- 10785,10793 ---- && GET_CODE (XEXP (XEXP (op0, 0), 0)) == NOT) { op0 = simplify_and_const_int ! (op0, mode, ! gen_rtx_LSHIFTRT (mode, XEXP (XEXP (XEXP (op0, 0), 0), 0), ! XEXP (XEXP (op0, 0), 1)), (HOST_WIDE_INT) 1); code = (code == NE ? EQ : NE); continue; *************** simplify_comparison (code, pop0, pop1) *** 10999,11007 **** && XEXP (op0, 1) == XEXP (XEXP (op0, 0), 1) && (tmode = mode_for_size (mode_width - INTVAL (XEXP (op0, 1)), MODE_INT, 1)) != BLKmode ! && ((unsigned HOST_WIDE_INT) const_op <= GET_MODE_MASK (tmode) ! || ((unsigned HOST_WIDE_INT) -const_op ! <= GET_MODE_MASK (tmode)))) { op0 = gen_lowpart_for_combine (tmode, XEXP (XEXP (op0, 0), 0)); continue; --- 10867,10875 ---- && XEXP (op0, 1) == XEXP (XEXP (op0, 0), 1) && (tmode = mode_for_size (mode_width - INTVAL (XEXP (op0, 1)), MODE_INT, 1)) != BLKmode ! && (((unsigned HOST_WIDE_INT) const_op ! + (GET_MODE_MASK (tmode) >> 1) + 1) ! <= GET_MODE_MASK (tmode))) { op0 = gen_lowpart_for_combine (tmode, XEXP (XEXP (op0, 0), 0)); continue; *************** simplify_comparison (code, pop0, pop1) *** 11018,11026 **** && XEXP (op0, 1) == XEXP (XEXP (XEXP (op0, 0), 0), 1) && (tmode = mode_for_size (mode_width - INTVAL (XEXP (op0, 1)), MODE_INT, 1)) != BLKmode ! && ((unsigned HOST_WIDE_INT) const_op <= GET_MODE_MASK (tmode) ! || ((unsigned HOST_WIDE_INT) -const_op ! <= GET_MODE_MASK (tmode)))) { rtx inner = XEXP (XEXP (XEXP (op0, 0), 0), 0); rtx add_const = XEXP (XEXP (op0, 0), 1); --- 10886,10894 ---- && XEXP (op0, 1) == XEXP (XEXP (XEXP (op0, 0), 0), 1) && (tmode = mode_for_size (mode_width - INTVAL (XEXP (op0, 1)), MODE_INT, 1)) != BLKmode ! && (((unsigned HOST_WIDE_INT) const_op ! + (GET_MODE_MASK (tmode) >> 1) + 1) ! <= GET_MODE_MASK (tmode))) { rtx inner = XEXP (XEXP (XEXP (op0, 0), 0), 0); rtx add_const = XEXP (XEXP (op0, 0), 1); *************** simplify_comparison (code, pop0, pop1) *** 11045,11054 **** && mode_width <= HOST_BITS_PER_WIDE_INT && (nonzero_bits (XEXP (op0, 0), mode) & (((HOST_WIDE_INT) 1 << INTVAL (XEXP (op0, 1))) - 1)) == 0 ! && (const_op == 0 ! || (floor_log2 (const_op) + INTVAL (XEXP (op0, 1)) ! < mode_width))) { const_op <<= INTVAL (XEXP (op0, 1)); op1 = GEN_INT (const_op); op0 = XEXP (op0, 0); --- 10913,10930 ---- && mode_width <= HOST_BITS_PER_WIDE_INT && (nonzero_bits (XEXP (op0, 0), mode) & (((HOST_WIDE_INT) 1 << INTVAL (XEXP (op0, 1))) - 1)) == 0 ! && (((unsigned HOST_WIDE_INT) const_op ! + (GET_CODE (op0) != LSHIFTRT ! ? ((GET_MODE_MASK (mode) >> INTVAL (XEXP (op0, 1)) >> 1) ! + 1) ! : 0)) ! <= GET_MODE_MASK (mode) >> INTVAL (XEXP (op0, 1)))) { + /* If the shift was logical, then we must make the condition + unsigned. */ + if (GET_CODE (op0) == LSHIFTRT) + code = unsigned_condition (code); + const_op <<= INTVAL (XEXP (op0, 1)); op1 = GEN_INT (const_op); op0 = XEXP (op0, 0); *************** simplify_comparison (code, pop0, pop1) *** 11077,11112 **** /* Now make any compound operations involved in this comparison. Then, check for an outmost SUBREG on OP0 that is not doing anything or is ! paradoxical. The latter case can only occur when it is known that the ! "extra" bits will be zero. Therefore, it is safe to remove the SUBREG. ! We can never remove a SUBREG for a non-equality comparison because the ! sign bit is in a different place in the underlying object. */ op0 = make_compound_operation (op0, op1 == const0_rtx ? COMPARE : SET); op1 = make_compound_operation (op1, SET); if (GET_CODE (op0) == SUBREG && subreg_lowpart_p (op0) && GET_MODE_CLASS (GET_MODE (op0)) == MODE_INT ! && (code == NE || code == EQ) ! && ((GET_MODE_SIZE (GET_MODE (op0)) ! > GET_MODE_SIZE (GET_MODE (SUBREG_REG (op0)))))) { ! op0 = SUBREG_REG (op0); ! op1 = gen_lowpart_for_combine (GET_MODE (op0), op1); ! } ! else if (GET_CODE (op0) == SUBREG && subreg_lowpart_p (op0) ! && GET_MODE_CLASS (GET_MODE (op0)) == MODE_INT ! && (code == NE || code == EQ) ! && (GET_MODE_BITSIZE (GET_MODE (SUBREG_REG (op0))) ! <= HOST_BITS_PER_WIDE_INT) ! && (nonzero_bits (SUBREG_REG (op0), GET_MODE (SUBREG_REG (op0))) ! & ~GET_MODE_MASK (GET_MODE (op0))) == 0 ! && (tem = gen_lowpart_for_combine (GET_MODE (SUBREG_REG (op0)), ! op1), ! (nonzero_bits (tem, GET_MODE (SUBREG_REG (op0))) ! & ~GET_MODE_MASK (GET_MODE (op0))) == 0)) ! op0 = SUBREG_REG (op0), op1 = tem; /* We now do the opposite procedure: Some machines don't have compare insns in all modes. If OP0's mode is an integer mode smaller than a --- 10953,11008 ---- /* Now make any compound operations involved in this comparison. Then, check for an outmost SUBREG on OP0 that is not doing anything or is ! paradoxical. The latter transformation must only be performed when ! it is known that the "extra" bits will be the same in op0 and op1 or ! that they don't matter. There are three cases to consider: ! ! 1. SUBREG_REG (op0) is a register. In this case the bits are don't ! care bits and we can assume they have any convenient value. So ! making the transformation is safe. ! ! 2. SUBREG_REG (op0) is a memory and LOAD_EXTEND_OP is not defined. ! In this case the upper bits of op0 are undefined. We should not make ! the simplification in that case as we do not know the contents of ! those bits. ! ! 3. SUBREG_REG (op0) is a memory and LOAD_EXTEND_OP is defined and not ! NIL. In that case we know those bits are zeros or ones. We must ! also be sure that they are the same as the upper bits of op1. ! ! We can never remove a SUBREG for a non-equality comparison because ! the sign bit is in a different place in the underlying object. */ op0 = make_compound_operation (op0, op1 == const0_rtx ? COMPARE : SET); op1 = make_compound_operation (op1, SET); if (GET_CODE (op0) == SUBREG && subreg_lowpart_p (op0) + /* Case 3 above, to sometimes allow (subreg (mem x)), isn't + implemented. */ + && GET_CODE (SUBREG_REG (op0)) == REG && GET_MODE_CLASS (GET_MODE (op0)) == MODE_INT ! && GET_MODE_CLASS (GET_MODE (SUBREG_REG (op0))) == MODE_INT ! && (code == NE || code == EQ)) { ! if (GET_MODE_SIZE (GET_MODE (op0)) ! > GET_MODE_SIZE (GET_MODE (SUBREG_REG (op0)))) ! { ! op0 = SUBREG_REG (op0); ! op1 = gen_lowpart_for_combine (GET_MODE (op0), op1); ! } ! else if ((GET_MODE_BITSIZE (GET_MODE (SUBREG_REG (op0))) ! <= HOST_BITS_PER_WIDE_INT) ! && (nonzero_bits (SUBREG_REG (op0), ! GET_MODE (SUBREG_REG (op0))) ! & ~GET_MODE_MASK (GET_MODE (op0))) == 0) ! { ! tem = gen_lowpart_for_combine (GET_MODE (SUBREG_REG (op0)), op1); ! if ((nonzero_bits (tem, GET_MODE (SUBREG_REG (op0))) ! & ~GET_MODE_MASK (GET_MODE (op0))) == 0) ! op0 = SUBREG_REG (op0), op1 = tem; ! } ! } /* We now do the opposite procedure: Some machines don't have compare insns in all modes. If OP0's mode is an integer mode smaller than a *************** simplify_comparison (code, pop0, pop1) *** 11117,11137 **** mode = GET_MODE (op0); if (mode != VOIDmode && GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) < UNITS_PER_WORD ! && cmp_optab->handlers[(int) mode].insn_code == CODE_FOR_nothing) for (tmode = GET_MODE_WIDER_MODE (mode); (tmode != VOIDmode && GET_MODE_BITSIZE (tmode) <= HOST_BITS_PER_WIDE_INT); tmode = GET_MODE_WIDER_MODE (tmode)) ! if (cmp_optab->handlers[(int) tmode].insn_code != CODE_FOR_nothing) { /* If the only nonzero bits in OP0 and OP1 are those in the narrower mode and this is an equality or unsigned comparison, we can use the wider mode. Similarly for sign-extended values, in which case it is true for all comparisons. */ ! if (((code == EQ || code == NE ! || code == GEU || code == GTU || code == LEU || code == LTU) ! && (nonzero_bits (op0, tmode) & ~GET_MODE_MASK (mode)) == 0 ! && (nonzero_bits (op1, tmode) & ~GET_MODE_MASK (mode)) == 0) || ((num_sign_bit_copies (op0, tmode) > GET_MODE_BITSIZE (tmode) - GET_MODE_BITSIZE (mode)) && (num_sign_bit_copies (op1, tmode) --- 11013,11041 ---- mode = GET_MODE (op0); if (mode != VOIDmode && GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) < UNITS_PER_WORD ! && ! have_insn_for (COMPARE, mode)) for (tmode = GET_MODE_WIDER_MODE (mode); (tmode != VOIDmode && GET_MODE_BITSIZE (tmode) <= HOST_BITS_PER_WIDE_INT); tmode = GET_MODE_WIDER_MODE (tmode)) ! if (have_insn_for (COMPARE, tmode)) { + int zero_extended; + /* If the only nonzero bits in OP0 and OP1 are those in the narrower mode and this is an equality or unsigned comparison, we can use the wider mode. Similarly for sign-extended values, in which case it is true for all comparisons. */ ! zero_extended = ((code == EQ || code == NE ! || code == GEU || code == GTU ! || code == LEU || code == LTU) ! && (nonzero_bits (op0, tmode) ! & ~GET_MODE_MASK (mode)) == 0 ! && ((GET_CODE (op1) == CONST_INT ! || (nonzero_bits (op1, tmode) ! & ~GET_MODE_MASK (mode)) == 0))); ! ! if (zero_extended || ((num_sign_bit_copies (op0, tmode) > GET_MODE_BITSIZE (tmode) - GET_MODE_BITSIZE (mode)) && (num_sign_bit_copies (op1, tmode) *************** simplify_comparison (code, pop0, pop1) *** 11140,11147 **** /* If OP0 is an AND and we don't have an AND in MODE either, make a new AND in the proper mode. */ if (GET_CODE (op0) == AND ! && (and_optab->handlers[(int) mode].insn_code ! == CODE_FOR_nothing)) op0 = gen_binary (AND, tmode, gen_lowpart_for_combine (tmode, XEXP (op0, 0)), --- 11044,11050 ---- /* If OP0 is an AND and we don't have an AND in MODE either, make a new AND in the proper mode. */ if (GET_CODE (op0) == AND ! && !have_insn_for (AND, mode)) op0 = gen_binary (AND, tmode, gen_lowpart_for_combine (tmode, XEXP (op0, 0)), *************** simplify_comparison (code, pop0, pop1) *** 11149,11154 **** --- 11052,11059 ---- XEXP (op0, 1))); op0 = gen_lowpart_for_combine (tmode, op0); + if (zero_extended && GET_CODE (op1) == CONST_INT) + op1 = GEN_INT (INTVAL (op1) & GET_MODE_MASK (mode)); op1 = gen_lowpart_for_combine (tmode, op1); break; } *************** static enum rtx_code *** 11186,11204 **** combine_reversed_comparison_code (exp) rtx exp; { ! enum rtx_code code1 = reversed_comparison_code (exp, NULL); ! rtx x; ! if (code1 != UNKNOWN ! || GET_MODE_CLASS (GET_MODE (XEXP (exp, 0))) != MODE_CC) ! return code1; ! /* Otherwise try and find where the condition codes were last set and ! use that. */ ! x = get_last_value (XEXP (exp, 0)); ! if (!x || GET_CODE (x) != COMPARE) ! return UNKNOWN; ! return reversed_comparison_code_parts (GET_CODE (exp), ! XEXP (x, 0), XEXP (x, 1), NULL); } /* Return comparison with reversed code of EXP and operands OP0 and OP1. Return NULL_RTX in case we fail to do the reversal. */ --- 11091,11109 ---- combine_reversed_comparison_code (exp) rtx exp; { ! enum rtx_code code1 = reversed_comparison_code (exp, NULL); ! rtx x; ! if (code1 != UNKNOWN ! || GET_MODE_CLASS (GET_MODE (XEXP (exp, 0))) != MODE_CC) ! return code1; ! /* Otherwise try and find where the condition codes were last set and ! use that. */ ! x = get_last_value (XEXP (exp, 0)); ! if (!x || GET_CODE (x) != COMPARE) ! return UNKNOWN; ! return reversed_comparison_code_parts (GET_CODE (exp), ! XEXP (x, 0), XEXP (x, 1), NULL); } /* Return comparison with reversed code of EXP and operands OP0 and OP1. Return NULL_RTX in case we fail to do the reversal. */ *************** static void *** 11222,11230 **** update_table_tick (x) rtx x; { ! register enum rtx_code code = GET_CODE (x); ! register const char *fmt = GET_RTX_FORMAT (code); ! register int i; if (code == REG) { --- 11127,11135 ---- update_table_tick (x) rtx x; { ! enum rtx_code code = GET_CODE (x); ! const char *fmt = GET_RTX_FORMAT (code); ! int i; if (code == REG) { *************** record_value_for_reg (reg, insn, value) *** 11346,11354 **** if (value) { subst_low_cuid = INSN_CUID (insn); ! reg_last_set_mode[regno] = GET_MODE (reg); ! reg_last_set_nonzero_bits[regno] = nonzero_bits (value, GET_MODE (reg)); reg_last_set_sign_bit_copies[regno] = num_sign_bit_copies (value, GET_MODE (reg)); } --- 11251,11263 ---- if (value) { + enum machine_mode mode = GET_MODE (reg); subst_low_cuid = INSN_CUID (insn); ! reg_last_set_mode[regno] = mode; ! if (GET_MODE_CLASS (mode) == MODE_INT ! && GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT) ! mode = nonzero_bits_mode; ! reg_last_set_nonzero_bits[regno] = nonzero_bits (value, mode); reg_last_set_sign_bit_copies[regno] = num_sign_bit_copies (value, GET_MODE (reg)); } *************** static void *** 11406,11412 **** record_dead_and_set_regs (insn) rtx insn; { ! register rtx link; unsigned int i; for (link = REG_NOTES (insn); link; link = XEXP (link, 1)) --- 11315,11321 ---- record_dead_and_set_regs (insn) rtx insn; { ! rtx link; unsigned int i; for (link = REG_NOTES (insn); link; link = XEXP (link, 1)) *************** record_dead_and_set_regs (insn) *** 11430,11436 **** if (GET_CODE (insn) == CALL_INSN) { for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) ! if (call_used_regs[i]) { reg_last_set_value[i] = 0; reg_last_set_mode[i] = 0; --- 11339,11345 ---- if (GET_CODE (insn) == CALL_INSN) { for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) ! if (TEST_HARD_REG_BIT (regs_invalidated_by_call, i)) { reg_last_set_value[i] = 0; reg_last_set_mode[i] = 0; *************** record_dead_and_set_regs (insn) *** 11440,11445 **** --- 11349,11361 ---- } last_call_cuid = mem_last_set = INSN_CUID (insn); + + /* Don't bother recording what this insn does. It might set the + return value register, but we can't combine into a call + pattern anyway, so there's no point trying (and it may cause + a crash, if e.g. we wind up asking for last_set_value of a + SUBREG of the return value register). */ + return; } note_stores (PATTERN (insn), record_dead_and_set_regs_1, insn); *************** get_last_value (x) *** 11627,11633 **** it's either a hard register, set more than once, or it's a live at the beginning of the function, return 0. ! Because if it's not live at the beginnning of the function then the reg is always set before being used (is never used without being set). And, if it's set only once, and it's always set before use, then all uses must have the same last value, even if it's not from this basic --- 11543,11549 ---- it's either a hard register, set more than once, or it's a live at the beginning of the function, return 0. ! Because if it's not live at the beginning of the function then the reg is always set before being used (is never used without being set). And, if it's set only once, and it's always set before use, then all uses must have the same last value, even if it's not from this basic *************** get_last_value (x) *** 11667,11678 **** static int use_crosses_set_p (x, from_cuid) ! register rtx x; int from_cuid; { ! register const char *fmt; ! register int i; ! register enum rtx_code code = GET_CODE (x); if (code == REG) { --- 11583,11594 ---- static int use_crosses_set_p (x, from_cuid) ! rtx x; int from_cuid; { ! const char *fmt; ! int i; ! enum rtx_code code = GET_CODE (x); if (code == REG) { *************** use_crosses_set_p (x, from_cuid) *** 11702,11708 **** { if (fmt[i] == 'E') { ! register int j; for (j = XVECLEN (x, i) - 1; j >= 0; j--) if (use_crosses_set_p (XVECEXP (x, i, j), from_cuid)) return 1; --- 11618,11624 ---- { if (fmt[i] == 'E') { ! int j; for (j = XVECLEN (x, i) - 1; j >= 0; j--) if (use_crosses_set_p (XVECEXP (x, i, j), from_cuid)) return 1; *************** mark_used_regs_combine (x) *** 11828,11833 **** --- 11744,11750 ---- case CONST_INT: case CONST: case CONST_DOUBLE: + case CONST_VECTOR: case PC: case ADDR_VEC: case ADDR_DIFF_VEC: *************** mark_used_regs_combine (x) *** 11875,11881 **** { /* If setting a MEM, or a SUBREG of a MEM, then note any hard regs in the address. */ ! register rtx testreg = SET_DEST (x); while (GET_CODE (testreg) == SUBREG || GET_CODE (testreg) == ZERO_EXTRACT --- 11792,11798 ---- { /* If setting a MEM, or a SUBREG of a MEM, then note any hard regs in the address. */ ! rtx testreg = SET_DEST (x); while (GET_CODE (testreg) == SUBREG || GET_CODE (testreg) == ZERO_EXTRACT *************** mark_used_regs_combine (x) *** 11897,11903 **** /* Recursively scan the operands of this expression. */ { ! register const char *fmt = GET_RTX_FORMAT (code); for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) { --- 11814,11820 ---- /* Recursively scan the operands of this expression. */ { ! const char *fmt = GET_RTX_FORMAT (code); for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) { *************** mark_used_regs_combine (x) *** 11905,11911 **** mark_used_regs_combine (XEXP (x, i)); else if (fmt[i] == 'E') { ! register int j; for (j = 0; j < XVECLEN (x, i); j++) mark_used_regs_combine (XVECEXP (x, i, j)); --- 11822,11828 ---- mark_used_regs_combine (XEXP (x, i)); else if (fmt[i] == 'E') { ! int j; for (j = 0; j < XVECLEN (x, i); j++) mark_used_regs_combine (XVECEXP (x, i, j)); *************** remove_death (regno, insn) *** 11923,11929 **** unsigned int regno; rtx insn; { ! register rtx note = find_regno_note (insn, REG_DEAD, regno); if (note) { --- 11840,11846 ---- unsigned int regno; rtx insn; { ! rtx note = find_regno_note (insn, REG_DEAD, regno); if (note) { *************** move_deaths (x, maybe_kill_insn, from_cu *** 11952,11966 **** rtx to_insn; rtx *pnotes; { ! register const char *fmt; ! register int len, i; ! register enum rtx_code code = GET_CODE (x); if (code == REG) { unsigned int regno = REGNO (x); ! register rtx where_dead = reg_last_death[regno]; ! register rtx before_dead, after_dead; /* Don't move the register if it gets killed in between from and to */ if (maybe_kill_insn && reg_set_p (x, maybe_kill_insn) --- 11869,11883 ---- rtx to_insn; rtx *pnotes; { ! const char *fmt; ! int len, i; ! enum rtx_code code = GET_CODE (x); if (code == REG) { unsigned int regno = REGNO (x); ! rtx where_dead = reg_last_death[regno]; ! rtx before_dead, after_dead; /* Don't move the register if it gets killed in between from and to */ if (maybe_kill_insn && reg_set_p (x, maybe_kill_insn) *************** move_deaths (x, maybe_kill_insn, from_cu *** 12065,12070 **** --- 11982,11988 ---- that accesses one word of a multi-word item, some piece of everything register in the expression is used by this insn, so remove any old death. */ + /* ??? So why do we test for equality of the sizes? */ if (GET_CODE (dest) == ZERO_EXTRACT || GET_CODE (dest) == STRICT_LOW_PART *************** move_deaths (x, maybe_kill_insn, from_cu *** 12103,12109 **** { if (fmt[i] == 'E') { ! register int j; for (j = XVECLEN (x, i) - 1; j >= 0; j--) move_deaths (XVECEXP (x, i, j), maybe_kill_insn, from_cuid, to_insn, pnotes); --- 12021,12027 ---- { if (fmt[i] == 'E') { ! int j; for (j = XVECLEN (x, i) - 1; j >= 0; j--) move_deaths (XVECEXP (x, i, j), maybe_kill_insn, from_cuid, to_insn, pnotes); *************** distribute_notes (notes, from_insn, i3, *** 12195,12200 **** --- 12113,12119 ---- switch (REG_NOTE_KIND (note)) { case REG_BR_PROB: + case REG_BR_PRED: case REG_EXEC_COUNT: /* Doesn't matter much where we put this, as long as it's somewhere. It is preferable to keep these notes on branches, which is most *************** distribute_notes (notes, from_insn, i3, *** 12202,12214 **** place = i3; break; case REG_NON_LOCAL_GOTO: if (GET_CODE (i3) == JUMP_INSN) place = i3; else if (i2 && GET_CODE (i2) == JUMP_INSN) place = i2; else ! abort(); break; case REG_EH_REGION: --- 12121,12139 ---- place = i3; break; + case REG_VTABLE_REF: + /* ??? Should remain with *a particular* memory load. Given the + nature of vtable data, the last insn seems relatively safe. */ + place = i3; + break; + case REG_NON_LOCAL_GOTO: if (GET_CODE (i3) == JUMP_INSN) place = i3; else if (i2 && GET_CODE (i2) == JUMP_INSN) place = i2; else ! abort (); break; case REG_EH_REGION: *************** distribute_notes (notes, from_insn, i3, *** 12231,12238 **** abort (); break; - case REG_EH_RETHROW: case REG_NORETURN: /* These notes must remain with the call. It should not be possible for both I2 and I3 to be a call. */ if (GET_CODE (i3) == CALL_INSN) --- 12156,12163 ---- abort (); break; case REG_NORETURN: + case REG_SETJMP: /* These notes must remain with the call. It should not be possible for both I2 and I3 to be a call. */ if (GET_CODE (i3) == CALL_INSN) *************** distribute_notes (notes, from_insn, i3, *** 12342,12347 **** --- 12267,12291 ---- else place = i2; } + + /* Don't attach REG_LABEL note to a JUMP_INSN which has + JUMP_LABEL already. Instead, decrement LABEL_NUSES. */ + if (place && GET_CODE (place) == JUMP_INSN && JUMP_LABEL (place)) + { + if (JUMP_LABEL (place) != XEXP (note, 0)) + abort (); + if (GET_CODE (JUMP_LABEL (place)) == CODE_LABEL) + LABEL_NUSES (JUMP_LABEL (place))--; + place = 0; + } + if (place2 && GET_CODE (place2) == JUMP_INSN && JUMP_LABEL (place2)) + { + if (JUMP_LABEL (place2) != XEXP (note, 0)) + abort (); + if (GET_CODE (JUMP_LABEL (place2)) == CODE_LABEL) + LABEL_NUSES (JUMP_LABEL (place2))--; + place2 = 0; + } break; case REG_NONNEG: *************** distribute_notes (notes, from_insn, i3, *** 12578,12583 **** --- 12522,12536 ---- { unsigned int regno = REGNO (XEXP (note, 0)); + /* Similarly, if the instruction on which we want to place + the note is a noop, we'll need do a global live update + after we remove them in delete_noop_moves. */ + if (noop_move_p (place)) + { + SET_BIT (refresh_blocks, this_basic_block); + need_refresh = 1; + } + if (dead_or_set_p (place, XEXP (note, 0)) || reg_bitfield_target_p (XEXP (note, 0), PATTERN (place))) { diff -Nrc3pad gcc-3.0.4/gcc/conditions.h gcc-3.1/gcc/conditions.h *** gcc-3.0.4/gcc/conditions.h Wed Dec 16 20:54:13 1998 --- gcc-3.1/gcc/conditions.h Tue Oct 9 22:40:11 2001 *************** *** 1,22 **** /* Definitions for condition code handling in final.c and output routines. Copyright (C) 1987 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. */ /* None of the things in the files exist if we don't use CC0. */ --- 1,22 ---- /* Definitions for condition code handling in final.c and output routines. Copyright (C) 1987 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* None of the things in the files exist if we don't use CC0. */ *************** extern CC_STATUS cc_status; *** 105,111 **** #define CC_INVERTED 0100 /* Nonzero if we must convert signed condition operators to unsigned. ! This is only used by machine description files. */ #define CC_NOT_SIGNED 0200 /* This is how to initialize the variable cc_status. --- 105,111 ---- #define CC_INVERTED 0100 /* Nonzero if we must convert signed condition operators to unsigned. ! This is only used by machine description files. */ #define CC_NOT_SIGNED 0200 /* This is how to initialize the variable cc_status. diff -Nrc3pad gcc-3.0.4/gcc/config/1750a/1750a-protos.h gcc-3.1/gcc/config/1750a/1750a-protos.h *** gcc-3.0.4/gcc/config/1750a/1750a-protos.h Mon May 1 17:17:55 2000 --- gcc-3.1/gcc/config/1750a/1750a-protos.h Thu Dec 20 17:36:33 2001 *************** extern const char *branch_or_jump PARAMS *** 43,45 **** --- 43,48 ---- extern int find_jmplbl PARAMS ((int)); extern int one_bit_set_p PARAMS ((int)); extern void check_section PARAMS ((enum section)); + + extern long real_value_to_target_single PARAMS((double)); + extern void real_value_to_target_double PARAMS((double, long[])); diff -Nrc3pad gcc-3.0.4/gcc/config/1750a/1750a.c gcc-3.1/gcc/config/1750a/1750a.c *** gcc-3.0.4/gcc/config/1750a/1750a.c Mon May 1 17:17:55 2000 --- gcc-3.1/gcc/config/1750a/1750a.c Thu Dec 20 17:36:33 2001 *************** Boston, MA 02111-1307, USA. */ *** 32,38 **** --- 32,41 ---- #include "real.h" #include "regs.h" #include "output.h" + #include "flags.h" #include "tm_p.h" + #include "target.h" + #include "target-def.h" struct datalabel_array datalbl[DATALBL_ARRSIZ]; int datalbl_ndx = -1; *************** const char *const sectname[4] = *** 44,49 **** --- 47,161 ---- {"Init", "Normal", "Konst", "Static"}; static int which_bit PARAMS ((int)); + static bool assemble_integer_1750a PARAMS ((rtx, unsigned int, int)); + static void output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT)); + static void output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT)); + + /* Initialize the GCC target structure. */ + #undef TARGET_ASM_BYTE_OP + #define TARGET_ASM_BYTE_OP "\tdata\t" + #undef TARGET_ASM_ALIGNED_HI_OP + #define TARGET_ASM_ALIGNED_HI_OP "\tdatal\t" + #undef TARGET_ASM_ALIGNED_SI_OP + #define TARGET_ASM_ALIGNED_SI_OP NULL + #undef TARGET_ASM_INTEGER + #define TARGET_ASM_INTEGER assemble_integer_1750a + + #undef TARGET_ASM_FUNCTION_PROLOGUE + #define TARGET_ASM_FUNCTION_PROLOGUE output_function_prologue + #undef TARGET_ASM_FUNCTION_EPILOGUE + #define TARGET_ASM_FUNCTION_EPILOGUE output_function_epilogue + + struct gcc_target targetm = TARGET_INITIALIZER; + + /* Generate the assembly code for function entry. FILE is a stdio + stream to output the code to. SIZE is an int: how many units of + temporary storage to allocate. + + Refer to the array `regs_ever_live' to determine which registers to + save; `regs_ever_live[I]' is nonzero if register number I is ever + used in the function. This function is responsible for knowing + which registers should not be saved even if used. */ + + static void + output_function_prologue (file, size) + FILE *file; + HOST_WIDE_INT size; + { + if (flag_verbose_asm) + { + int regno, regs_used = 0; + + fprintf (file, "\t; registers used: "); + for (regno = 0; regno < 14; regno++) + if (regs_ever_live[regno]) + { + fprintf (file, " %s", reg_names[regno]); + regs_used++; + } + + if (regs_used == 0) + fprintf (file, "(none)"); + } + + if (size > 0) + { + fprintf (file, "\n\t%s\tr15,%d", + (size <= 16 ? "sisp" : "sim"), size); + if (flag_verbose_asm) + fprintf (file, " ; reserve local-variable space"); + } + + if (frame_pointer_needed) + { + fprintf(file, "\n\tpshm\tr14,r14"); + if (flag_verbose_asm) + fprintf (file, " ; push old frame"); + fprintf (file, "\n\tlr\tr14,r15"); + if (flag_verbose_asm) + fprintf (file, " ; set new frame"); + } + + fprintf (file, "\n"); + program_counter = 0; + jmplbl_ndx = -1; + } + + /* This function generates the assembly code for function exit. + Args are as for output_function_prologue (). + + The function epilogue should not depend on the current stack + pointer! It should use the frame pointer only. This is mandatory + because of alloca; we also take advantage of it to omit stack + adjustments before returning. */ + + static void + output_function_epilogue (file, size) + FILE *file; + HOST_WIDE_INT size; + { + if (frame_pointer_needed) + { + fprintf (file, "\tlr\tr15,r14"); + if (flag_verbose_asm) + fprintf (file, " ; set stack ptr to frame ptr"); + fprintf (file, "\n\tpopm\tr14,r14"); + if (flag_verbose_asm) + fprintf (file, " ; restore previous frame ptr"); + fprintf (file, "\n"); + } + + if (size > 0) + { + fprintf (file, "\t%s\tr15,%d", + (size <= 16 ? "aisp" : "aim"), size); + if (flag_verbose_asm) + fprintf (file, " ; free up local-var space"); + fprintf (file, "\n"); + } + + fprintf (file, "\turs\tr15\n\n"); + } void notice_update_cc (exp) *************** notice_update_cc (exp) *** 55,61 **** /* Jumps do not alter the cc's. */ if (SET_DEST (exp) == pc_rtx) return; ! /* Moving a register or constant into memory doesn't alter the cc's. */ if (GET_CODE (SET_DEST (exp)) == MEM && (src_code == REG || src_code == CONST_INT)) return; --- 167,173 ---- /* Jumps do not alter the cc's. */ if (SET_DEST (exp) == pc_rtx) return; ! /* Moving a register or constant into memory doesn't alter the cc's. */ if (GET_CODE (SET_DEST (exp)) == MEM && (src_code == REG || src_code == CONST_INT)) return; *************** notice_update_cc (exp) *** 80,86 **** cc_status.value1 = SET_SRC (exp); return; } ! /* Anything else will set cc_status. */ cc_status.flags = CC_NO_OVERFLOW; cc_status.value1 = SET_SRC (exp); cc_status.value2 = SET_DEST (exp); --- 192,198 ---- cc_status.value1 = SET_SRC (exp); return; } ! /* Anything else will set cc_status. */ cc_status.flags = CC_NO_OVERFLOW; cc_status.value1 = SET_SRC (exp); cc_status.value2 = SET_DEST (exp); *************** mod_regno_adjust (instr, op) *** 202,208 **** rtx *op; { static char outstr[40]; ! const char *r = (!strncmp (instr, "dvr", 3) ? "r" : ""); int modregno_gcc = REGNO (op[3]), modregno_1750 = REGNO (op[0]) + 1; if (modregno_gcc == modregno_1750 --- 314,320 ---- rtx *op; { static char outstr[40]; ! const char *const r = (!strncmp (instr, "dvr", 3) ? "r" : ""); int modregno_gcc = REGNO (op[3]), modregno_1750 = REGNO (op[0]) + 1; if (modregno_gcc == modregno_1750 *************** print_operand (file, x, letter) *** 550,556 **** case CALL: fprintf (file, "CALL nargs="); ! fprintf (file, HOST_PTR_PRINTF, XEXP (x, 1)); fprintf (file, ", func is either '%s' or '%s'", XSTR (XEXP (XEXP (x, 0), 1), 0), XSTR (XEXP (x, 0), 1)); break; --- 662,668 ---- case CALL: fprintf (file, "CALL nargs="); ! fprintf (file, HOST_PTR_PRINTF, (PTR) XEXP (x, 1)); fprintf (file, ", func is either '%s' or '%s'", XSTR (XEXP (XEXP (x, 0), 1), 0), XSTR (XEXP (x, 0), 1)); break; *************** print_operand_address (file, addr) *** 705,710 **** --- 817,841 ---- addr_inc = 0; } + /* Target hook for assembling integer objects. The 1750a version needs to + keep track of how many bytes have been written. */ + + static bool + assemble_integer_1750a (x, size, aligned_p) + rtx x; + unsigned int size; + int aligned_p; + { + if (default_assemble_integer (x, size, aligned_p)) + { + if (label_pending) + label_pending = 0; + datalbl[datalbl_ndx].size += size; + return true; + } + return false; + } + /* * Return non zero if the LS 16 bits of the given value has just one bit set, *************** which_bit (x) *** 739,742 **** --- 870,1014 ---- return b; } + + /* Convert a REAL_VALUE_TYPE to the target float format: + + MSB LSB MSB LSB + ------------------------------------------------------ + |S| Mantissa | Exponent | + ------------------------------------------------------ + 0 1 23 24 31 + + */ + + long + real_value_to_target_single(in) + REAL_VALUE_TYPE in; + { + union { + double d; + struct { + #if HOST_WORDS_BIG_ENDIAN + unsigned int negative:1; + unsigned int exponent:11; + unsigned int mantissa0:20; + unsigned int mantissa1:32; + #else + unsigned int mantissa1:32; + unsigned int mantissa0:20; + unsigned int exponent:11; + unsigned int negative:1; + #endif + } s; + } ieee; + + unsigned int mant; + int exp; + + if (HOST_FLOAT_FORMAT != IEEE_FLOAT_FORMAT) + abort (); + + ieee.d = in; + + /* Don't bother with NaN, Inf, 0 special cases, since they'll be handled + by the over/underflow code below. */ + exp = ieee.s.exponent - 0x3ff; + mant = 1 << 23 | ieee.s.mantissa0 << 3 | ieee.s.mantissa1 >> 29; + + /* The sign is actually part of the mantessa. Since we're comming from + IEEE we know that either bit 23 is set or we have a zero. */ + if (! ieee.s.negative) + { + mant >>= 1; + exp += 1; + } + + /* Check for overflow. Crop to FLT_MAX. */ + if (exp > 127) + { + exp = 127; + mant = (ieee.s.negative ? 0xffffff : 0x7fffff); + } + /* Underflow to zero. */ + else if (exp < -128) + { + exp = 0; + mant = 0; + } + + return mant << 8 | (exp & 0xff); + } + + /* Convert a REAL_VALUE_TYPE to the target 1750a extended float format: + + ---------------------------------------------------- + | | Mantissa | | Mantissa | + |S| MS |Exponent| LS | + ---------------------------------------------------- + 0 1 23 24 31 32 47 + + */ + + void + real_value_to_target_double(in, out) + REAL_VALUE_TYPE in; + long out[]; + { + union { + double d; + struct { + #if HOST_WORDS_BIG_ENDIAN + unsigned int negative:1; + unsigned int exponent:11; + unsigned int mantissa0:20; + unsigned int mantissa1:32; + #else + unsigned int mantissa1:32; + unsigned int mantissa0:20; + unsigned int exponent:11; + unsigned int negative:1; + #endif + } s; + } ieee; + + unsigned int mant_h24, mant_l16; + int exp; + + if (HOST_FLOAT_FORMAT != IEEE_FLOAT_FORMAT) + abort (); + ieee.d = in; + + /* Don't bother with NaN, Inf, 0 special cases, since they'll be handled + by the over/underflow code below. */ + exp = ieee.s.exponent - 0x3ff; + mant_h24 = 1 << 23 | ieee.s.mantissa0 << 3 | ieee.s.mantissa1 >> 29; + mant_l16 = (ieee.s.mantissa1 >> 13) & 0xffff; + + /* The sign is actually part of the mantessa. Since we're comming from + IEEE we know that either bit 23 is set or we have a zero. */ + if (! ieee.s.negative) + { + mant_l16 = mant_l16 >> 1 | (mant_h24 & 1) << 15; + mant_h24 >>= 1; + exp += 1; + } + + /* Check for overflow. Crop to DBL_MAX. */ + if (exp > 127) + { + exp = 127; + mant_h24 = (ieee.s.negative ? 0xffffff : 0x7fffff); + mant_l16 = 0xffff; + } + /* Underflow to zero. */ + else if (exp < -128) + { + exp = 0; + mant_h24 = 0; + mant_l16 = 0; + } + + out[0] = mant_h24 << 8 | (exp & 0xff); + out[1] = mant_l16; + } diff -Nrc3pad gcc-3.0.4/gcc/config/1750a/1750a.h gcc-3.1/gcc/config/1750a/1750a.h *** gcc-3.0.4/gcc/config/1750a/1750a.h Mon Apr 16 18:25:41 2001 --- gcc-3.1/gcc/config/1750a/1750a.h Wed Jan 16 02:37:16 2002 *************** *** 1,6 **** /* Definitions of target machine for GNU compiler. Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, ! 2000, 2001 Free Software Foundation, Inc. Contributed by O.M.Kellogg, DASA (oliver.kellogg@space.otn.dasa.de) This file is part of GNU CC. --- 1,6 ---- /* Definitions of target machine for GNU compiler. Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, ! 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by O.M.Kellogg, DASA (oliver.kellogg@space.otn.dasa.de) This file is part of GNU CC. *************** Boston, MA 02111-1307, USA. */ *** 48,54 **** /*****************************************************************************/ /* SPECIAL ADDITION FOR MIL-STD-1750A by O.M.Kellogg, 15-Apr-1993 */ ! /* See file aux-output.c for the actual data instances. */ struct datalabel_array { char *name; char value[14]; --- 48,54 ---- /*****************************************************************************/ /* SPECIAL ADDITION FOR MIL-STD-1750A by O.M.Kellogg, 15-Apr-1993 */ ! /* See file aux-output.c for the actual data instances. */ struct datalabel_array { char *name; char value[14]; *************** enum section { Init, Normal, Konst, Stat *** 62,69 **** #define DATALBL_ARRSIZ 256 #define JMPLBL_ARRSIZ 256 #ifndef __datalbl ! extern struct datalabel_array datalbl[]; ! extern struct jumplabel_array jmplbl[]; extern int datalbl_ndx, jmplbl_ndx, label_pending, program_counter; extern enum section current_section; extern const char *const sectname[4]; --- 62,69 ---- #define DATALBL_ARRSIZ 256 #define JMPLBL_ARRSIZ 256 #ifndef __datalbl ! extern struct datalabel_array datalbl[DATALBL_ARRSIZ]; ! extern struct jumplabel_array jmplbl[JMPLBL_ARRSIZ]; extern int datalbl_ndx, jmplbl_ndx, label_pending, program_counter; extern enum section current_section; extern const char *const sectname[4]; *************** extern const char *const sectname[4]; *** 77,83 **** Though 1750 actually counts bits in big-endian fashion, the sign bit is still the most significant bit, which is leftmost. Therefore leaving this little-endian. Adjust short before assembler output when needed: ! e.g. in QImode, a GCC bit n is a 1750 bit (15-n). */ #define BITS_BIG_ENDIAN 0 /* Define this if most significant byte of a word is the lowest numbered. */ --- 77,83 ---- Though 1750 actually counts bits in big-endian fashion, the sign bit is still the most significant bit, which is leftmost. Therefore leaving this little-endian. Adjust short before assembler output when needed: ! e.g. in QImode, a GCC bit n is a 1750 bit (15-n). */ #define BITS_BIG_ENDIAN 0 /* Define this if most significant byte of a word is the lowest numbered. */ *************** extern const char *const sectname[4]; *** 87,93 **** /* Define this if most significant word of a multiword value is lowest numbered. ! True for 1750. */ #define WORDS_BIG_ENDIAN 1 /* number of bits in an addressable storage unit */ --- 87,93 ---- /* Define this if most significant word of a multiword value is lowest numbered. ! True for 1750. */ #define WORDS_BIG_ENDIAN 1 /* number of bits in an addressable storage unit */ *************** extern const char *const sectname[4]; *** 108,125 **** #define PTRDIFF_TYPE "int" ! /* Type to use for `size_t'. If undefined, uses `long unsigned int'. */ #define SIZE_TYPE "int" ! /* 1750a preliminary ! #define TARGET_FLOAT_FORMAT UNKNOWN_FLOAT_FORMAT ! */ /* Allocation boundary (in *bits*) for storing pointers in memory. */ #define POINTER_BOUNDARY 16 /* Allocation boundary (in *bits*) for storing arguments in argument list. */ ! /* 1750: should have had to make this 32 when BITS_PER_WORD is 32. */ #define PARM_BOUNDARY 16 /* Boundary (in *bits*) on which stack pointer should be aligned. */ --- 108,124 ---- #define PTRDIFF_TYPE "int" ! /* Type to use for `size_t'. If undefined, uses `long unsigned int'. */ #define SIZE_TYPE "int" ! /* 1750a preliminary. Ought to properly define the format in real.c. */ ! #define TARGET_FLOAT_FORMAT UNKNOWN_FLOAT_FORMAT /* Allocation boundary (in *bits*) for storing pointers in memory. */ #define POINTER_BOUNDARY 16 /* Allocation boundary (in *bits*) for storing arguments in argument list. */ ! /* 1750: should have had to make this 32 when BITS_PER_WORD is 32. */ #define PARM_BOUNDARY 16 /* Boundary (in *bits*) on which stack pointer should be aligned. */ *************** extern const char *const sectname[4]; *** 135,141 **** #define BIGGEST_ALIGNMENT 16 /* Define this to 1 if move instructions will actually fail to work ! when given unaligned data. */ #define STRICT_ALIGNMENT 0 /* Define number of bits in most basic integer type. --- 134,140 ---- #define BIGGEST_ALIGNMENT 16 /* Define this to 1 if move instructions will actually fail to work ! when given unaligned data. */ #define STRICT_ALIGNMENT 0 /* Define number of bits in most basic integer type. *************** extern const char *const sectname[4]; *** 143,171 **** #define INT_TYPE_SIZE 16 */ /* Define number of bits in short integer type. ! (If undefined, default is half of BITS_PER_WORD). */ #define SHORT_TYPE_SIZE 16 /* Define number of bits in long integer type. ! (If undefined, default is BITS_PER_WORD). */ #define LONG_TYPE_SIZE 32 /* Define number of bits in long long integer type. ! (If undefined, default is twice BITS_PER_WORD). */ /* 1750 PRELIMINARY : no processor support for `long long', therefore need to check out the long-long opencodings ! */ #define LONG_LONG_TYPE_SIZE 64 /* Define number of bits in char type. ! (If undefined, default is one fourth of BITS_PER_WORD). */ #define CHAR_TYPE_SIZE 16 /* Define number of bits in float type. ! (If undefined, default is BITS_PER_WORD). */ #define FLOAT_TYPE_SIZE 32 /* Define number of bits in double type. ! (If undefined, default is twice BITS_PER_WORD). */ #define DOUBLE_TYPE_SIZE 48 /*****************************************************************************/ --- 142,170 ---- #define INT_TYPE_SIZE 16 */ /* Define number of bits in short integer type. ! (If undefined, default is half of BITS_PER_WORD). */ #define SHORT_TYPE_SIZE 16 /* Define number of bits in long integer type. ! (If undefined, default is BITS_PER_WORD). */ #define LONG_TYPE_SIZE 32 /* Define number of bits in long long integer type. ! (If undefined, default is twice BITS_PER_WORD). */ /* 1750 PRELIMINARY : no processor support for `long long', therefore need to check out the long-long opencodings ! */ #define LONG_LONG_TYPE_SIZE 64 /* Define number of bits in char type. ! (If undefined, default is one fourth of BITS_PER_WORD). */ #define CHAR_TYPE_SIZE 16 /* Define number of bits in float type. ! (If undefined, default is BITS_PER_WORD). */ #define FLOAT_TYPE_SIZE 32 /* Define number of bits in double type. ! (If undefined, default is twice BITS_PER_WORD). */ #define DOUBLE_TYPE_SIZE 48 /*****************************************************************************/ *************** extern const char *const sectname[4]; *** 176,187 **** The hardware registers are assigned numbers for the compiler from 0 to just below FIRST_PSEUDO_REGISTER. All registers that the compiler knows about must be given numbers, ! even those that are not normally considered general registers. */ #define FIRST_PSEUDO_REGISTER 16 /* 1 for registers that have pervasive standard uses and are not available for the register allocator. ! R15 is the 1750A stack pointer. R14 is the frame pointer. */ #define FIXED_REGISTERS \ { 0, 0, 0, 0, 0, 0, 0, 0, \ --- 175,186 ---- The hardware registers are assigned numbers for the compiler from 0 to just below FIRST_PSEUDO_REGISTER. All registers that the compiler knows about must be given numbers, ! even those that are not normally considered general registers. */ #define FIRST_PSEUDO_REGISTER 16 /* 1 for registers that have pervasive standard uses and are not available for the register allocator. ! R15 is the 1750A stack pointer. R14 is the frame pointer. */ #define FIXED_REGISTERS \ { 0, 0, 0, 0, 0, 0, 0, 0, \ *************** extern const char *const sectname[4]; *** 214,230 **** to hold something of mode MODE. This is ordinarily the length in words of a value of mode MODE but can be less for certain modes in special long registers. ! All 1750 registers are one word long. */ #define HARD_REGNO_NREGS(REGNO, MODE) \ ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD) ! /* Value is 1 if hard register REGNO can hold a value of machine-mode MODE. */ #define HARD_REGNO_MODE_OK(REGNO, MODE) 1 /* Value is 1 if it is a good idea to tie two pseudo registers when one has mode MODE1 and one has mode MODE2. If HARD_REGNO_MODE_OK could produce different values for MODE1 and MODE2, ! for any hard reg, then this must be 0 for correct output. */ #define MODES_TIEABLE_P(MODE1, MODE2) 1 /* Specify the registers used for certain standard purposes. --- 213,229 ---- to hold something of mode MODE. This is ordinarily the length in words of a value of mode MODE but can be less for certain modes in special long registers. ! All 1750 registers are one word long. */ #define HARD_REGNO_NREGS(REGNO, MODE) \ ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD) ! /* Value is 1 if hard register REGNO can hold a value of machine-mode MODE. */ #define HARD_REGNO_MODE_OK(REGNO, MODE) 1 /* Value is 1 if it is a good idea to tie two pseudo registers when one has mode MODE1 and one has mode MODE2. If HARD_REGNO_MODE_OK could produce different values for MODE1 and MODE2, ! for any hard reg, then this must be 0 for correct output. */ #define MODES_TIEABLE_P(MODE1, MODE2) 1 /* Specify the registers used for certain standard purposes. *************** extern const char *const sectname[4]; *** 242,248 **** /* Value should be nonzero if functions must have frame pointers. Zero means the frame pointer need not be set up (and parms may be accessed via the stack pointer) in functions that seem suitable. ! This is computed in `reload', in reload1.c. */ #define FRAME_POINTER_REQUIRED 0 /* Base register for access to arguments of the function. */ --- 241,247 ---- /* Value should be nonzero if functions must have frame pointers. Zero means the frame pointer need not be set up (and parms may be accessed via the stack pointer) in functions that seem suitable. ! This is computed in `reload', in reload1.c. */ #define FRAME_POINTER_REQUIRED 0 /* Base register for access to arguments of the function. */ *************** extern const char *const sectname[4]; *** 253,259 **** #define ARGS_GROW_DOWNWARD */ ! /* Register in which static-chain is passed to a function. */ #define STATIC_CHAIN_REGNUM 13 /* Place in which caller passes the structure value address. --- 252,258 ---- #define ARGS_GROW_DOWNWARD */ ! /* Register in which static-chain is passed to a function. */ #define STATIC_CHAIN_REGNUM 13 /* Place in which caller passes the structure value address. *************** extern const char *const sectname[4]; *** 270,276 **** is passed to a function. */ #define STRUCT_VALUE_REGNUM 12 ! /* Define this to be 1 if all structure return values must be in memory. */ #define DEFAULT_PCC_STRUCT_RETURN 0 /*****************************************************************************/ --- 269,275 ---- is passed to a function. */ #define STRUCT_VALUE_REGNUM 12 ! /* Define this to be 1 if all structure return values must be in memory. */ #define DEFAULT_PCC_STRUCT_RETURN 0 /*****************************************************************************/ *************** extern const char *const sectname[4]; *** 304,317 **** Here's an example to drive this point home: in "LBX B12,R5" B12 shall be called the "index" reg and R5 shall be the "base" reg. This naming inversion is due to the GCC defined capabilities of ! "Base" vs. "Index" regs. */ enum reg_class { NO_REGS, R2, R0_1, INDEX_REGS, BASE_REGS, ALL_REGS, LIM_REG_CLASSES }; #define N_REG_CLASSES (int) LIM_REG_CLASSES /* Since GENERAL_REGS is the same class as ALL_REGS, ! don't give it a different class number; just make it an alias. */ #define GENERAL_REGS ALL_REGS /* Give names of register classes as strings for dump file. */ --- 303,316 ---- Here's an example to drive this point home: in "LBX B12,R5" B12 shall be called the "index" reg and R5 shall be the "base" reg. This naming inversion is due to the GCC defined capabilities of ! "Base" vs. "Index" regs. */ enum reg_class { NO_REGS, R2, R0_1, INDEX_REGS, BASE_REGS, ALL_REGS, LIM_REG_CLASSES }; #define N_REG_CLASSES (int) LIM_REG_CLASSES /* Since GENERAL_REGS is the same class as ALL_REGS, ! don't give it a different class number; just make it an alias. */ #define GENERAL_REGS ALL_REGS /* Give names of register classes as strings for dump file. */ *************** enum reg_class { NO_REGS, R2, R0_1, INDE *** 323,329 **** This is an initializer for a vector of HARD_REG_SET of length N_REG_CLASSES. 1750 "index" (remember, in the *GCC* sense!) regs are R12 through R15. ! The only 1750 register not usable as BASE_REG is R0. */ #define REG_CLASS_CONTENTS { {0}, {0x0004}, {0x0003}, {0xf000}, {0xfffe}, {0xffff} } --- 322,328 ---- This is an initializer for a vector of HARD_REG_SET of length N_REG_CLASSES. 1750 "index" (remember, in the *GCC* sense!) regs are R12 through R15. ! The only 1750 register not usable as BASE_REG is R0. */ #define REG_CLASS_CONTENTS { {0}, {0x0004}, {0x0003}, {0xf000}, {0xfffe}, {0xffff} } *************** enum reg_class { NO_REGS, R2, R0_1, INDE *** 334,347 **** #define REGNO_REG_CLASS(REGNO) ((REGNO) == 2 ? R2 : (REGNO) == 0 ? R0_1 : \ (REGNO) >= 12 ? INDEX_REGS : (REGNO) > 0 ? BASE_REGS : ALL_REGS) ! /* The class value for index registers, and the one for base regs. */ #define BASE_REG_CLASS BASE_REGS #define INDEX_REG_CLASS INDEX_REGS /* Get reg_class from a letter such as appears in the machine description. For the 1750, we have 'z' for R0_1, 't' for R2, 'b' for gcc Base regs ! and 'x' for gcc Index regs. */ #define REG_CLASS_FROM_LETTER(C) ((C) == 't' ? R2 : \ (C) == 'z' ? R0_1 : \ --- 333,346 ---- #define REGNO_REG_CLASS(REGNO) ((REGNO) == 2 ? R2 : (REGNO) == 0 ? R0_1 : \ (REGNO) >= 12 ? INDEX_REGS : (REGNO) > 0 ? BASE_REGS : ALL_REGS) ! /* The class value for index registers, and the one for base regs. */ #define BASE_REG_CLASS BASE_REGS #define INDEX_REG_CLASS INDEX_REGS /* Get reg_class from a letter such as appears in the machine description. For the 1750, we have 'z' for R0_1, 't' for R2, 'b' for gcc Base regs ! and 'x' for gcc Index regs. */ #define REG_CLASS_FROM_LETTER(C) ((C) == 't' ? R2 : \ (C) == 'z' ? R0_1 : \ *************** enum reg_class { NO_REGS, R2, R0_1, INDE *** 361,367 **** `L' is used for unsigned 8-bit address displacements in instructions of addressing mode "Base Relative", `M' is for IM mode instructions et al., ! `O' is a synonym for (const_int 0). */ #define CONST_OK_FOR_LETTER_P(VALUE, C) \ ((C) == 'I' ? (VALUE) > 0 && (VALUE) <= 16 : \ --- 360,366 ---- `L' is used for unsigned 8-bit address displacements in instructions of addressing mode "Base Relative", `M' is for IM mode instructions et al., ! `O' is a synonym for (const_int 0). */ #define CONST_OK_FOR_LETTER_P(VALUE, C) \ ((C) == 'I' ? (VALUE) > 0 && (VALUE) <= 16 : \ *************** enum reg_class { NO_REGS, R2, R0_1, INDE *** 397,403 **** /* Return the maximum number of consecutive registers needed to represent mode MODE in a register of class CLASS. On the 1750A, this is the size of MODE in words, ! since class doesn't make any difference. */ #define CLASS_MAX_NREGS(CLASS,MODE) GET_MODE_SIZE(MODE) /*****************************************************************************/ --- 396,402 ---- /* Return the maximum number of consecutive registers needed to represent mode MODE in a register of class CLASS. On the 1750A, this is the size of MODE in words, ! since class doesn't make any difference. */ #define CLASS_MAX_NREGS(CLASS,MODE) GET_MODE_SIZE(MODE) /*****************************************************************************/ *************** enum reg_class { NO_REGS, R2, R0_1, INDE *** 428,434 **** /* If we generate an insn to push BYTES bytes, this says how many the stack pointer really advances by. 1750 note: what GCC calls a "byte" is really a 16-bit word, ! because BITS_PER_UNIT is 16. */ #define PUSH_ROUNDING(BYTES) (BYTES) --- 427,433 ---- /* If we generate an insn to push BYTES bytes, this says how many the stack pointer really advances by. 1750 note: what GCC calls a "byte" is really a 16-bit word, ! because BITS_PER_UNIT is 16. */ #define PUSH_ROUNDING(BYTES) (BYTES) *************** enum reg_class { NO_REGS, R2, R0_1, INDE *** 467,485 **** /* Define how to find the value returned by a function. VALTYPE is the data type of the value (as a tree). If the precise function being called is known, FUNC is its FUNCTION_DECL; ! otherwise, FUNC is 0. */ #define FUNCTION_VALUE(VALTYPE, FUNC) \ gen_rtx_REG (TYPE_MODE (VALTYPE), 0) /* Define how to find the value returned by a library function ! assuming the value has mode MODE. */ /* 1750 note: no libcalls yet */ #define LIBCALL_VALUE(MODE) printf("LIBCALL_VALUE called!\n"), \ gen_rtx_REG (MODE, 0) ! /* 1 if N is a possible register number for a function value. */ #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0) --- 466,484 ---- /* Define how to find the value returned by a function. VALTYPE is the data type of the value (as a tree). If the precise function being called is known, FUNC is its FUNCTION_DECL; ! otherwise, FUNC is 0. */ #define FUNCTION_VALUE(VALTYPE, FUNC) \ gen_rtx_REG (TYPE_MODE (VALTYPE), 0) /* Define how to find the value returned by a library function ! assuming the value has mode MODE. */ /* 1750 note: no libcalls yet */ #define LIBCALL_VALUE(MODE) printf("LIBCALL_VALUE called!\n"), \ gen_rtx_REG (MODE, 0) ! /* 1 if N is a possible register number for a function value. */ #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0) *************** enum reg_class { NO_REGS, R2, R0_1, INDE *** 492,498 **** structure and union values. #define PCC_STATIC_STRUCT_RETURN */ ! /* 1 if N is a possible register number for function argument passing. */ #define FUNCTION_ARG_REGNO_P(N) ((N) < 12) --- 491,497 ---- structure and union values. #define PCC_STATIC_STRUCT_RETURN */ ! /* 1 if N is a possible register number for function argument passing. */ #define FUNCTION_ARG_REGNO_P(N) ((N) < 12) *************** enum reg_class { NO_REGS, R2, R0_1, INDE *** 546,600 **** do not preserve any registers; in other words, if `CALL_USED_REGISTERS' has 1 for all registers. This macro enables `-fcaller-saves' by default. Eventually that option will be enabled by default on all ! machines and both the option and this macro will be eliminated. */ #define DEFAULT_CALLER_SAVES - - /* This macro generates the assembly code for function entry. - FILE is a stdio stream to output the code to. - SIZE is an int: how many units of temporary storage to allocate. - Refer to the array `regs_ever_live' to determine which registers - to save; `regs_ever_live[I]' is nonzero if register number I - is ever used in the function. This macro is responsible for - knowing which registers should not be saved even if used. */ - - - #define FUNCTION_PROLOGUE(FILE, SIZE) { \ - if (flag_verbose_asm) \ - { \ - int regno, regs_used = 0; \ - fprintf (FILE, "\t; registers used: "); \ - for (regno = 0; regno < 14; regno++) \ - if (regs_ever_live[regno]) \ - { \ - fprintf (FILE, " %s", reg_names[regno]); \ - regs_used++; \ - } \ - if (regs_used == 0) \ - fprintf (FILE, "(none)"); \ - } \ - if (SIZE > 0) \ - { \ - fprintf (FILE, "\n\t%s\tr15,%d", \ - (SIZE <= 16 ? "sisp" : "sim"), SIZE); \ - if (flag_verbose_asm) \ - fprintf (FILE, " ; reserve local-variable space"); \ - } \ - if (frame_pointer_needed) \ - { \ - fprintf(FILE, "\n\tpshm\tr14,r14"); \ - if (flag_verbose_asm) \ - fprintf (FILE, " ; push old frame"); \ - fprintf (FILE, "\n\tlr\tr14,r15"); \ - if (flag_verbose_asm) \ - fprintf (FILE, " ; set new frame"); \ - } \ - fprintf (FILE, "\n"); \ - program_counter = 0; \ - jmplbl_ndx = -1; \ - } - /************* 1750: PROFILER HANDLING NOT YET DONE !!!!!!! *************/ /* Output assembler code to FILE to increment profiler label # LABELNO for profiling a function entry. */ --- 545,554 ---- do not preserve any registers; in other words, if `CALL_USED_REGISTERS' has 1 for all registers. This macro enables `-fcaller-saves' by default. Eventually that option will be enabled by default on all ! machines and both the option and this macro will be eliminated. */ #define DEFAULT_CALLER_SAVES /************* 1750: PROFILER HANDLING NOT YET DONE !!!!!!! *************/ /* Output assembler code to FILE to increment profiler label # LABELNO for profiling a function entry. */ *************** enum reg_class { NO_REGS, R2, R0_1, INDE *** 619,656 **** #define EXIT_IGNORE_STACK 0 - /* This macro generates the assembly code for function exit, - on machines that need it. If FUNCTION_EPILOGUE is not defined - then individual return instructions are generated for each - return statement. Args are same as for FUNCTION_PROLOGUE. - - The function epilogue should not depend on the current stack pointer! - It should use the frame pointer only. This is mandatory because - of alloca; we also take advantage of it to omit stack adjustments - before returning. */ - - #define FUNCTION_EPILOGUE(FILE, SIZE) { \ - if (frame_pointer_needed) \ - { \ - fprintf (FILE, "\tlr\tr15,r14"); \ - if (flag_verbose_asm) \ - fprintf (FILE, " ; set stack ptr to frame ptr"); \ - fprintf (FILE, "\n\tpopm\tr14,r14"); \ - if (flag_verbose_asm) \ - fprintf (FILE, " ; restore previous frame ptr"); \ - fprintf (FILE, "\n"); \ - } \ - if (SIZE > 0) \ - { \ - fprintf (FILE, "\t%s\tr15,%d", \ - (SIZE <= 16 ? "aisp" : "aim"), SIZE); \ - if (flag_verbose_asm) \ - fprintf (FILE, " ; free up local-var space"); \ - fprintf (FILE, "\n"); \ - } \ - fprintf (FILE, "\turs\tr15\n\n"); \ - } - /* If the memory address ADDR is relative to the frame pointer, correct it to be relative to the stack pointer instead. This is for when we don't use a frame pointer. --- 573,578 ---- *************** enum reg_class { NO_REGS, R2, R0_1, INDE *** 701,707 **** /* Addressing modes, and classification of registers for them. */ ! /* 1750 doesn't have a lot of auto-incr./decr. - just for the stack ptr. */ /* #define HAVE_POST_INCREMENT 0 just for R15 (stack pointer) */ /* #define HAVE_POST_DECREMENT 0 */ --- 623,629 ---- /* Addressing modes, and classification of registers for them. */ ! /* 1750 doesn't have a lot of auto-incr./decr. - just for the stack ptr. */ /* #define HAVE_POST_INCREMENT 0 just for R15 (stack pointer) */ /* #define HAVE_POST_DECREMENT 0 */ *************** enum reg_class { NO_REGS, R2, R0_1, INDE *** 786,792 **** 1750 note: Currently we don't implement address expressions that use GCC "Index"-class regs. To be expanded to handle the 1750 "Base with Index" ! instructions (see also MAX_REGS_PER_ADDRESS and others). */ #define GO_IF_BASED_ADDRESS(X, ADDR) { \ if ((GET_CODE (X) == REG && REG_OK_FOR_BASE_P(X))) \ --- 708,714 ---- 1750 note: Currently we don't implement address expressions that use GCC "Index"-class regs. To be expanded to handle the 1750 "Base with Index" ! instructions (see also MAX_REGS_PER_ADDRESS and others). */ #define GO_IF_BASED_ADDRESS(X, ADDR) { \ if ((GET_CODE (X) == REG && REG_OK_FOR_BASE_P(X))) \ *************** enum reg_class { NO_REGS, R2, R0_1, INDE *** 813,819 **** GO_IF_LEGITIMATE_ADDRESS. It is always safe for this macro to do nothing. It exists to recognize ! opportunities to optimize the output. */ #define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN) --- 735,741 ---- GO_IF_LEGITIMATE_ADDRESS. It is always safe for this macro to do nothing. It exists to recognize ! opportunities to optimize the output. */ #define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN) *************** enum reg_class { NO_REGS, R2, R0_1, INDE *** 821,827 **** has an effect that depends on the machine mode it is used for. On the 68000, only predecrement and postincrement address depend thus (the amount of decrement or increment being the length of the operand). */ ! /* 1750: not used. */ #define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL) --- 743,749 ---- has an effect that depends on the machine mode it is used for. On the 68000, only predecrement and postincrement address depend thus (the amount of decrement or increment being the length of the operand). */ ! /* 1750: not used. */ #define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL) *************** enum reg_class { NO_REGS, R2, R0_1, INDE *** 834,848 **** /* Define as C expression which evaluates to nonzero if the tablejump instruction expects the table to contain offsets from the address of the table. ! Do not define this if the table should contain absolute addresses. */ /* #define CASE_VECTOR_PC_RELATIVE 1 */ - /* Specify the tree operation to be used to convert reals to integers. */ - #define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR - - /* This is the kind of divide that is easiest to do in the general case. */ - #define EASY_DIV_EXPR TRUNC_DIV_EXPR - /* Define this as 1 if `char' should by default be signed; else as 0. */ #define DEFAULT_SIGNED_CHAR 1 --- 756,764 ---- /* Define as C expression which evaluates to nonzero if the tablejump instruction expects the table to contain offsets from the address of the table. ! Do not define this if the table should contain absolute addresses. */ /* #define CASE_VECTOR_PC_RELATIVE 1 */ /* Define this as 1 if `char' should by default be signed; else as 0. */ #define DEFAULT_SIGNED_CHAR 1 *************** enum reg_class { NO_REGS, R2, R0_1, INDE *** 854,868 **** move-instruction pairs, we will do a movstr or libcall instead. */ #define MOVE_RATIO 4 - /* Define this if zero-extension is slow (more than one real instruction). */ - /* #define SLOW_ZERO_EXTEND */ - /* Nonzero if access to memory by bytes is slow and undesirable. */ #define SLOW_BYTE_ACCESS 0 /* Define if shifts truncate the shift count which implies one can omit a sign-extension or zero-extension ! of a shift count. */ /* #define SHIFT_COUNT_TRUNCATED 1 */ /* Value is 1 if truncating an integer of INPREC bits to OUTPREC bits --- 770,781 ---- move-instruction pairs, we will do a movstr or libcall instead. */ #define MOVE_RATIO 4 /* Nonzero if access to memory by bytes is slow and undesirable. */ #define SLOW_BYTE_ACCESS 0 /* Define if shifts truncate the shift count which implies one can omit a sign-extension or zero-extension ! of a shift count. */ /* #define SHIFT_COUNT_TRUNCATED 1 */ /* Value is 1 if truncating an integer of INPREC bits to OUTPREC bits *************** enum reg_class { NO_REGS, R2, R0_1, INDE *** 912,918 **** /* Here we define machine-dependent flags and fields in cc_status (see `conditions.h'). */ ! /* MIL-STD-1750: none -- just has the garden variety C,P,Z,N flags. */ /* Store in cc_status the expressions that the condition codes will describe --- 825,831 ---- /* Here we define machine-dependent flags and fields in cc_status (see `conditions.h'). */ ! /* MIL-STD-1750: none -- just has the garden variety C,P,Z,N flags. */ /* Store in cc_status the expressions that the condition codes will describe *************** enum reg_class { NO_REGS, R2, R0_1, INDE *** 934,948 **** /* Output at beginning of assembler file. */ #define ASM_FILE_START(FILE) { \ ! char *p, name[40]; \ ! if ((p = (char *)strrchr(main_input_filename,'/')) != NULL ? 1 : \ ! (p = (char *)strrchr(main_input_filename,']')) != NULL) \ p++; \ else \ p = main_input_filename; \ strcpy(name,p); \ ! if ((p = (char *)strchr(name,'.'))) \ ! *p = '\0'; \ fprintf(FILE,"\tname %s\n",name); \ fprintf(FILE,"\tnolist\n\tinclude \"ms1750.inc\"\n\tlist\n\n"); \ fprintf(FILE,"\tglobal\t__main\n\n"); } --- 847,862 ---- /* Output at beginning of assembler file. */ #define ASM_FILE_START(FILE) { \ ! char *p2, name[40]; \ ! const char *p; \ ! if ((p = strrchr(main_input_filename,'/')) != NULL ? 1 : \ ! (p = strrchr(main_input_filename,']')) != NULL) \ p++; \ else \ p = main_input_filename; \ strcpy(name,p); \ ! if ((p2 = strchr(name,'.'))) \ ! *p2 = '\0'; \ fprintf(FILE,"\tname %s\n",name); \ fprintf(FILE,"\tnolist\n\tinclude \"ms1750.inc\"\n\tlist\n\n"); \ fprintf(FILE,"\tglobal\t__main\n\n"); } *************** enum reg_class { NO_REGS, R2, R0_1, INDE *** 967,973 **** cum_size += datalbl[i].size; \ } \ fprintf(FILE,"\n\tinit\n"); \ ! fprintf(FILE,"\tlim\tr0,init_srel\n"); /* destin. */ \ fprintf(FILE,"\tlim\tr1,%d\n",cum_size); /* count */ \ fprintf(FILE,"\tlim\tr2,K%s\n",datalbl[0].name); /* source */ \ fprintf(FILE,"\tmov\tr0,r2\n"); \ --- 881,887 ---- cum_size += datalbl[i].size; \ } \ fprintf(FILE,"\n\tinit\n"); \ ! fprintf(FILE,"\tlim\tr0,init_srel\n"); /* destin. */ \ fprintf(FILE,"\tlim\tr1,%d\n",cum_size); /* count */ \ fprintf(FILE,"\tlim\tr2,K%s\n",datalbl[0].name); /* source */ \ fprintf(FILE,"\tmov\tr0,r2\n"); \ *************** enum reg_class { NO_REGS, R2, R0_1, INDE *** 993,998 **** --- 907,913 ---- #define EXTRA_SECTIONS in_readonly_data #define EXTRA_SECTION_FUNCTIONS \ + extern void const_section PARAMS ((void)); \ void const_section() \ { \ fprintf(asm_out_file,"\tkonst\n"); \ *************** enum reg_class { NO_REGS, R2, R0_1, INDE *** 1042,1058 **** { "0", "1", "2", "3", "4", "5", "6", "7", \ "8", "9","10","11","12","13","14","15" } - /* How to renumber registers for dbx and gdb. */ - - #define DBX_REGISTER_NUMBER(REGNO) (REGNO) - /****************** Assembler output formatting **********************/ #define ASM_COMMENT_START ";" - #define ASM_OUTPUT_FUNNAM(FILE,NAME) \ - fprintf(FILE,"%s\n",NAME) - #define ASM_OUTPUT_OPCODE(FILE,PTR) do { \ while (*(PTR) != '\0' && *(PTR) != ' ') { \ putc (*(PTR), FILE); \ --- 957,966 ---- *************** enum reg_class { NO_REGS, R2, R0_1, INDE *** 1099,1105 **** fprintf (FILE, "\tglobal %s\t; export\n", NAME); \ } while (0) ! /* The prefix to add to user-visible assembler symbols. */ #define USER_LABEL_PREFIX "" --- 1007,1013 ---- fprintf (FILE, "\tglobal %s\t; export\n", NAME); \ } while (0) ! /* The prefix to add to user-visible assembler symbols. */ #define USER_LABEL_PREFIX "" *************** enum reg_class { NO_REGS, R2, R0_1, INDE *** 1151,1182 **** #define JUMP_TABLES_IN_TEXT_SECTION 1 - /* This is how to output an assembler line defining a 1750A `float' - constant. */ - - #define ASM_OUTPUT_SHORT_FLOAT(FILE,VALUE) \ - do { \ - if (label_pending) { \ - label_pending = 0; \ - sprintf (datalbl[datalbl_ndx].value, "%f", (double) VALUE); \ - } \ - datalbl[datalbl_ndx].size += 2; \ - fprintf (FILE, "\tdataf\t%f\n",VALUE); \ - } while(0) - - /* This is how to output an assembler line defining a 1750A `double' - constant. */ - - #define ASM_OUTPUT_THREE_QUARTER_FLOAT(FILE,VALUE) \ - do { \ - if (label_pending) { \ - label_pending = 0; \ - sprintf (datalbl[datalbl_ndx].value, "%f", VALUE); \ - } \ - datalbl[datalbl_ndx].size += 3; \ - fprintf(FILE,"\tdataef\t%f\n",VALUE); \ - } while (0) - /* This is how to output an assembler line defining a string constant. */ #define ASM_OUTPUT_ASCII(FILE, PTR, LEN) do { \ --- 1059,1064 ---- *************** enum reg_class { NO_REGS, R2, R0_1, INDE *** 1184,1190 **** if (label_pending) \ label_pending = 0; \ datalbl[datalbl_ndx].size += LEN; \ ! for (i = 0; i < LEN; i++) { \ if ((i % 15) == 0) { \ if (i != 0) \ fprintf(FILE,"\n"); \ --- 1066,1072 ---- if (label_pending) \ label_pending = 0; \ datalbl[datalbl_ndx].size += LEN; \ ! for (i = 0; i < (int) LEN; i++) { \ if ((i % 15) == 0) { \ if (i != 0) \ fprintf(FILE,"\n"); \ *************** enum reg_class { NO_REGS, R2, R0_1, INDE *** 1200,1245 **** fprintf(FILE,"\n"); \ } while (0) - /* This is how to output an assembler line defining a `char', `short', or - `int' constant. - 1750 NOTE: The reason why this macro also outputs `short' and `int' - constants is that for the 1750, BITS_PER_UNIT is 16 (as opposed to the - usual 8.) This behavior is different from the usual, where - ASM_OUTPUT_CHAR only outputs character constants. The name - of this macro should perhaps be `ASM_OUTPUT_QUARTER_INT' or so. - */ - - #define ASM_OUTPUT_CHAR(FILE,VALUE) do { \ - if (label_pending) \ - label_pending = 0; \ - datalbl[datalbl_ndx].size++; \ - fprintf(FILE, "\tdata\t"); \ - output_addr_const(FILE, VALUE); \ - fprintf(FILE, "\n"); \ - } while (0) - - /* This is how to output an assembler line defining a `long int' constant. - 1750 NOTE: The reason why this macro outputs `long' instead of `short' - constants is that for the 1750, BITS_PER_UNIT is 16 (as opposed to the - usual 8.) The name of this macro should perhaps be `ASM_OUTPUT_HALF_INT'. - */ - - #define ASM_OUTPUT_SHORT(FILE,VALUE) do { \ - if (label_pending) \ - label_pending = 0; \ - datalbl[datalbl_ndx].size += 2; \ - fprintf(FILE, "\tdatal\t%d\n",INTVAL(VALUE)); \ - } while (0) - - /* This is how to output an assembler line for a numeric constant byte. */ - - #define ASM_OUTPUT_BYTE(FILE,VALUE) do { \ - if (label_pending) \ - label_pending = 0; \ - datalbl[datalbl_ndx].size++; \ - fprintf(FILE, "\tdata\t#%x\n", VALUE); \ - } while (0) - /* This is how to output an insn to push a register on the stack. It need not be very fast code. */ --- 1082,1087 ---- *************** enum reg_class { NO_REGS, R2, R0_1, INDE *** 1252,1258 **** #define ASM_OUTPUT_REG_POP(FILE,REGNO) \ fprintf (FILE, "\tPOPM R%s,R%s\n", reg_names[REGNO], "FIXME: missing arg") ! /* This is how to output an element of a case-vector that is absolute. */ #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ fprintf (FILE, "\tdata\tL%d ;addr_vec_elt\n", VALUE) --- 1094,1100 ---- #define ASM_OUTPUT_REG_POP(FILE,REGNO) \ fprintf (FILE, "\tPOPM R%s,R%s\n", reg_names[REGNO], "FIXME: missing arg") ! /* This is how to output an element of a case-vector that is absolute. */ #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ fprintf (FILE, "\tdata\tL%d ;addr_vec_elt\n", VALUE) *************** enum reg_class { NO_REGS, R2, R0_1, INDE *** 1300,1329 **** ( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 10), \ sprintf ((OUTPUT), "%s.%d", (NAME), (LABELNO))) - #define ASM_OUTPUT_CONSTRUCTOR(FILE, NAME) do { \ - fprintf(FILE, "\tinit\n\t"); assemble_name(FILE, NAME); \ - fprintf(FILE," ;constructor\n"); } while (0) - - #define ASM_OUTPUT_DESTRUCTOR(FILE, NAME) do { \ - fprintf(FILE, "\tinit\n\t"); assemble_name(FILE, NAME); \ - fprintf(FILE," ;destructor\n"); } while (0) - - /* Define the parentheses used to group arithmetic operations - in assembler code. */ - - #define ASM_OPEN_PAREN "(" - #define ASM_CLOSE_PAREN ")" - - /* Define results of standard character escape sequences. */ - #define TARGET_BELL 007 - #define TARGET_BS 010 - #define TARGET_TAB 011 - #define TARGET_NEWLINE 012 - #define TARGET_VT 013 - #define TARGET_FF 014 - #define TARGET_CR 015 - - /* Print operand X (an rtx) in assembler syntax to file FILE. CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified. For `%' followed by punctuation, CODE is the punctuation and X is null. --- 1142,1147 ---- *************** enum reg_class { NO_REGS, R2, R0_1, INDE *** 1336,1342 **** 'Q': print a 1750 Base-Register-with-offset instruction's operands */ - /* 1750A: see file aux-output.c */ #define PRINT_OPERAND(FILE, X, CODE) print_operand(FILE,X,CODE) #define PRINT_OPERAND_ADDRESS(FILE, ADDR) print_operand_address(FILE,ADDR) --- 1154,1166 ---- 'Q': print a 1750 Base-Register-with-offset instruction's operands */ #define PRINT_OPERAND(FILE, X, CODE) print_operand(FILE,X,CODE) #define PRINT_OPERAND_ADDRESS(FILE, ADDR) print_operand_address(FILE,ADDR) + /* Convert a REAL_VALUE_TYPE to the target 1750a float format. */ + #define REAL_VALUE_TO_TARGET_SINGLE(IN, OUT) \ + ((OUT) = real_value_to_target_single(IN)) + + /* Convert a REAL_VALUE_TYPE to the target 1750a extended float format. */ + #define REAL_VALUE_TO_TARGET_DOUBLE(IN, OUT) \ + real_value_to_target_double((IN), (OUT)) diff -Nrc3pad gcc-3.0.4/gcc/config/1750a/1750a.md gcc-3.1/gcc/config/1750a/1750a.md *** gcc-3.0.4/gcc/config/1750a/1750a.md Mon May 1 17:17:55 2000 --- gcc-3.1/gcc/config/1750a/1750a.md Sun Dec 9 16:31:47 2001 *************** *** 667,673 **** "" "* { ! char *istr; switch(which_alternative) { case 0: --- 667,673 ---- "" "* { ! const char *istr; switch(which_alternative) { case 0: *************** *** 693,698 **** --- 693,700 ---- case 4: istr = \"dv \"; break; + default: + abort(); } return mod_regno_adjust (istr, operands); }") *************** *** 809,815 **** (define_insn "" [(set (match_operand:QI 0 "register_operand" "=r") (ior:QI (match_operand:QI 1 "register_operand" "0") ! (lshiftrt:QI (const_int 0x8000) (match_operand:QI 2 "register_operand" "r"))))] "" "svbr r%2,%r0") --- 811,817 ---- (define_insn "" [(set (match_operand:QI 0 "register_operand" "=r") (ior:QI (match_operand:QI 1 "register_operand" "0") ! (lshiftrt:QI (const_int 32768) (match_operand:QI 2 "register_operand" "r"))))] "" "svbr r%2,%r0") *************** *** 818,824 **** (define_insn "" [(set (match_operand:QI 0 "general_operand" "=r") (and:QI (match_operand:QI 1 "general_operand" "0") ! (not:QI (lshiftrt:QI (const_int 0x8000) (match_operand:QI 2 "register_operand" "r")))))] "" "rvbr r%2,%r0") --- 820,826 ---- (define_insn "" [(set (match_operand:QI 0 "general_operand" "=r") (and:QI (match_operand:QI 1 "general_operand" "0") ! (not:QI (lshiftrt:QI (const_int 32768) (match_operand:QI 2 "register_operand" "r")))))] "" "rvbr r%2,%r0") diff -Nrc3pad gcc-3.0.4/gcc/config/1750a/xm-1750a.h gcc-3.1/gcc/config/1750a/xm-1750a.h *** gcc-3.0.4/gcc/config/1750a/xm-1750a.h Mon May 1 17:17:55 2000 --- gcc-3.1/gcc/config/1750a/xm-1750a.h Thu Jan 1 00:00:00 1970 *************** *** 1,23 **** - /* Configuration for GNU C-compiler for MIL-STD-1750a. - Copyright (C) 1995 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. - - */ - - #error Gcc cannot run on a 1750a due to size problems! --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/a29k/a29k-protos.h gcc-3.1/gcc/config/a29k/a29k-protos.h *** gcc-3.0.4/gcc/config/a29k/a29k-protos.h Thu Jan 13 17:57:45 2000 --- gcc-3.1/gcc/config/a29k/a29k-protos.h Fri Oct 19 19:39:57 2001 *************** extern int uses_local_reg_p PARAMS ((rtx *** 60,65 **** extern int null_epilogue PARAMS ((void)); extern void print_operand PARAMS ((FILE *, rtx, int)); extern void a29k_compute_reg_names PARAMS ((void)); - extern void output_prolog PARAMS ((FILE *, int)); - extern void output_epilog PARAMS ((FILE *, int)); #endif /* RTX_CODE */ --- 60,65 ---- extern int null_epilogue PARAMS ((void)); extern void print_operand PARAMS ((FILE *, rtx, int)); extern void a29k_compute_reg_names PARAMS ((void)); #endif /* RTX_CODE */ + + extern void literal_section PARAMS ((void)); diff -Nrc3pad gcc-3.0.4/gcc/config/a29k/a29k.c gcc-3.1/gcc/config/a29k/a29k.c *** gcc-3.0.4/gcc/config/a29k/a29k.c Sat May 12 20:32:40 2001 --- gcc-3.1/gcc/config/a29k/a29k.c Mon Dec 17 15:05:25 2001 *************** Boston, MA 02111-1307, USA. */ *** 24,29 **** --- 24,30 ---- #include "config.h" #include "system.h" #include "rtl.h" + #include "tree.h" #include "regs.h" #include "hard-reg-set.h" #include "real.h" *************** Boston, MA 02111-1307, USA. */ *** 36,49 **** #include "function.h" #include "expr.h" #include "obstack.h" - #include "tree.h" #include "reload.h" #include "tm_p.h" static int shift_constant_operand PARAMS ((rtx, enum machine_mode, int)); static void a29k_set_memflags_1 PARAMS ((rtx, int, int, int, int)); static void compute_regstack_size PARAMS ((void)); static void check_epilogue_internal_label PARAMS ((FILE *)); #define min(A,B) ((A) < (B) ? (A) : (B)) --- 37,55 ---- #include "function.h" #include "expr.h" #include "obstack.h" #include "reload.h" #include "tm_p.h" + #include "target.h" + #include "target-def.h" static int shift_constant_operand PARAMS ((rtx, enum machine_mode, int)); static void a29k_set_memflags_1 PARAMS ((rtx, int, int, int, int)); static void compute_regstack_size PARAMS ((void)); static void check_epilogue_internal_label PARAMS ((FILE *)); + static void output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT)); + static void output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT)); + static void a29k_asm_named_section PARAMS ((const char *, unsigned int)); + static int a29k_adjust_cost PARAMS ((rtx, rtx, rtx, int)); #define min(A,B) ((A) < (B) ? (A) : (B)) *************** int a29k_debug_reg_map[FIRST_PSEUDO_REGI *** 90,96 **** rtx a29k_compare_op0, a29k_compare_op1; int a29k_compare_fp_p; ! /* Returns 1 if OP is a 8-bit constant. */ int cint_8_operand (op, mode) --- 96,117 ---- rtx a29k_compare_op0, a29k_compare_op1; int a29k_compare_fp_p; ! /* Initialize the GCC target structure. */ ! #undef TARGET_ASM_ALIGNED_HI_OP ! #define TARGET_ASM_ALIGNED_HI_OP "\t.hword\t" ! #undef TARGET_ASM_ALIGNED_SI_OP ! #define TARGET_ASM_ALIGNED_SI_OP "\t.word\t" ! ! #undef TARGET_ASM_FUNCTION_PROLOGUE ! #define TARGET_ASM_FUNCTION_PROLOGUE output_function_prologue ! #undef TARGET_ASM_FUNCTION_EPILOGUE ! #define TARGET_ASM_FUNCTION_EPILOGUE output_function_epilogue ! #undef TARGET_SCHED_ADJUST_COST ! #define TARGET_SCHED_ADJUST_COST a29k_adjust_cost ! ! struct gcc_target targetm = TARGET_INITIALIZER; ! ! /* Returns 1 if OP is a 8-bit constant. */ int cint_8_operand (op, mode) *************** gpc_reg_operand (op, mode) *** 262,270 **** regno = REGNO (op); else if (GET_CODE (op) == SUBREG && GET_CODE (SUBREG_REG (op)) == REG) { ! regno = REGNO (SUBREG_REG (op)); ! if (regno < FIRST_PSEUDO_REGISTER) ! regno += SUBREG_WORD (op); } else return 0; --- 283,292 ---- regno = REGNO (op); else if (GET_CODE (op) == SUBREG && GET_CODE (SUBREG_REG (op)) == REG) { ! if (REGNO (SUBREG_REG (op)) < FIRST_PSEUDO_REGISTER) ! regno = subreg_regno (op); ! else ! regno = REGNO (SUBREG_REG (op)); } else return 0; *************** and_operand (op, mode) *** 334,340 **** /* Return 1 if OP can be used as the second operand of an ADD insn. This is the same as above, except we use negative, rather than ! complement. */ int add_operand (op, mode) --- 356,362 ---- /* Return 1 if OP can be used as the second operand of an ADD insn. This is the same as above, except we use negative, rather than ! complement. */ int add_operand (op, mode) *************** a29k_get_reloaded_address (op) *** 467,473 **** { if (GET_CODE (op) == SUBREG) { ! if (SUBREG_WORD (op) != 0) abort (); op = SUBREG_REG (op); --- 489,495 ---- { if (GET_CODE (op) == SUBREG) { ! if (SUBREG_BYTE (op) != 0) abort (); op = SUBREG_REG (op); *************** print_operand (file, x, code) *** 1081,1086 **** --- 1103,1109 ---- else if (a29k_last_prologue_insn) { fprintf (file, "\n\t%s", a29k_last_prologue_insn); + free (a29k_last_prologue_insn); a29k_last_prologue_insn = 0; } else if (optimize && flag_delayed_branch *************** print_operand (file, x, code) *** 1104,1109 **** --- 1127,1133 ---- if (a29k_last_prologue_insn) { fprintf (file, "\n\t%s", a29k_last_prologue_insn); + free (a29k_last_prologue_insn); a29k_last_prologue_insn = 0; } else if (GET_CODE (x) == SYMBOL_REF *************** print_operand (file, x, code) *** 1158,1163 **** --- 1182,1188 ---- if (a29k_last_prologue_insn) { fprintf (file, "\n\t%s", a29k_last_prologue_insn); + free (a29k_last_prologue_insn); a29k_last_prologue_insn = 0; } else *************** print_operand (file, x, code) *** 1184,1190 **** if (GET_MODE (SUBREG_REG (XEXP (x, 0))) == SFmode) fprintf (file, "$float"); else ! fprintf (file, "$double%d", SUBREG_WORD (XEXP (x, 0))); memcpy ((char *) &u, (char *) &CONST_DOUBLE_LOW (SUBREG_REG (XEXP (x, 0))), sizeof u); fprintf (file, "(%.20e)", u.d); --- 1209,1216 ---- if (GET_MODE (SUBREG_REG (XEXP (x, 0))) == SFmode) fprintf (file, "$float"); else ! fprintf (file, "$double%d", ! (SUBREG_BYTE (XEXP (x, 0)) / GET_MODE_SIZE (GET_MODE (x)))); memcpy ((char *) &u, (char *) &CONST_DOUBLE_LOW (SUBREG_REG (XEXP (x, 0))), sizeof u); fprintf (file, "(%.20e)", u.d); *************** print_operand (file, x, code) *** 1204,1210 **** output_addr_const (file, x); } ! /* This page contains routines to output function prolog and epilog code. */ /* Compute the size of the register stack, and determine if there are any call instructions. */ --- 1230,1236 ---- output_addr_const (file, x); } ! /* This page contains routines to output function prolog and epilog code. */ /* Compute the size of the register stack, and determine if there are any call instructions. */ *************** a29k_compute_reg_names () *** 1282,1291 **** /* Output function prolog code to file FILE. Memory stack size is SIZE. */ ! void ! output_prolog (file, size) FILE *file; ! int size; { int i; int arg_count = 0; --- 1308,1317 ---- /* Output function prolog code to file FILE. Memory stack size is SIZE. */ ! static void ! output_function_prologue (file, size) FILE *file; ! HOST_WIDE_INT size; { int i; int arg_count = 0; *************** output_prolog (file, size) *** 1386,1392 **** if (num_delay_slots (insn) > 0) { ! a29k_last_prologue_insn = (char *) oballoc (100); sprintf (a29k_last_prologue_insn, "add lr1,gr1,%d", i); break; } --- 1412,1418 ---- if (num_delay_slots (insn) > 0) { ! a29k_last_prologue_insn = (char *) xmalloc (100); sprintf (a29k_last_prologue_insn, "add lr1,gr1,%d", i); break; } *************** output_prolog (file, size) *** 1403,1409 **** if (size == 0 && a29k_regstack_size == 0 && ! frame_pointer_needed) a29k_first_epilogue_insn = 0; else ! a29k_first_epilogue_insn = (char *) oballoc (100); if (frame_pointer_needed) sprintf (a29k_first_epilogue_insn, "sll %s,%s,0", --- 1429,1435 ---- if (size == 0 && a29k_regstack_size == 0 && ! frame_pointer_needed) a29k_first_epilogue_insn = 0; else ! a29k_first_epilogue_insn = (char *) xmalloc (100); if (frame_pointer_needed) sprintf (a29k_first_epilogue_insn, "sll %s,%s,0", *************** check_epilogue_internal_label (file) *** 1454,1467 **** stack size. The register stack size is in the variable A29K_REGSTACK_SIZE. */ ! void ! output_epilog (file, size) FILE *file; ! int size; { rtx insn; int locals_unavailable = 0; /* True until after first insn ! after gr1 update. */ /* If we hit a BARRIER before a real insn or CODE_LABEL, we don't need to do anything because we are never jumped to. */ --- 1480,1493 ---- stack size. The register stack size is in the variable A29K_REGSTACK_SIZE. */ ! static void ! output_function_epilogue (file, size) FILE *file; ! HOST_WIDE_INT size; { rtx insn; int locals_unavailable = 0; /* True until after first insn ! after gr1 update. */ /* If we hit a BARRIER before a real insn or CODE_LABEL, we don't need to do anything because we are never jumped to. */ *************** output_epilog (file, size) *** 1546,1549 **** --- 1572,1606 ---- file, 1, -2, 1); else fprintf (file, "\tnop\n"); + + if (a29k_first_epilogue_insn) + free (a29k_first_epilogue_insn); + a29k_first_epilogue_insn = 0; + } + + static void + a29k_asm_named_section (name, flags) + const char *name; + unsigned int flags ATTRIBUTE_UNUSED; + { + /* ??? Is it really correct to mark all sections as "bss"? */ + fprintf (asm_out_file, "\t.sect %s, bss\n\t.use %s\n", name, name); + } + + /* Return a new value for COST based on the relationship between INSN + that is dependent on DEP_INSN through the dependence LINK. The + default is to make no adjustment to COST. + + On the a29k, ignore the cost of anti- and output-dependencies. */ + static int + a29k_adjust_cost (insn, link, dep_insn, cost) + rtx insn ATTRIBUTE_UNUSED; + rtx link; + rtx dep_insn ATTRIBUTE_UNUSED; + int cost; + { + if (REG_NOTE_KIND (link) != 0) + return 0; /* Anti or output dependence. */ + + return cost; } diff -Nrc3pad gcc-3.0.4/gcc/config/a29k/a29k.h gcc-3.1/gcc/config/a29k/a29k.h *** gcc-3.0.4/gcc/config/a29k/a29k.h Mon Jan 1 20:35:26 2001 --- gcc-3.1/gcc/config/a29k/a29k.h Tue Jan 8 22:51:20 2002 *************** *** 1,6 **** /* Definitions of target machine for GNU compiler, for AMD Am29000 CPU. Copyright (C) 1988, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 2000, 2001 Free Software Foundation, Inc. Contributed by Richard Kenner (kenner@nyu.edu) This file is part of GNU CC. --- 1,6 ---- /* Definitions of target machine for GNU compiler, for AMD Am29000 CPU. Copyright (C) 1988, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Richard Kenner (kenner@nyu.edu) This file is part of GNU CC. *************** extern int target_flags; *** 88,94 **** #define TARGET_NO_REUSE_ARGS (target_flags & 256) /* This means that neither builtin nor emulated float operations are ! available, and that GCC should generate libcalls instead. */ #define TARGET_SOFT_FLOAT (target_flags & 512) --- 88,94 ---- #define TARGET_NO_REUSE_ARGS (target_flags & 256) /* This means that neither builtin nor emulated float operations are ! available, and that GCC should generate libcalls instead. */ #define TARGET_SOFT_FLOAT (target_flags & 512) *************** extern int target_flags; *** 162,168 **** numbered. For 29k we can decide arbitrarily since there are no machine instructions ! for them. Might as well be consistent with bytes. */ #define WORDS_BIG_ENDIAN 1 /* number of bits in an addressable storage unit */ --- 162,168 ---- numbered. For 29k we can decide arbitrarily since there are no machine instructions ! for them. Might as well be consistent with bytes. */ #define WORDS_BIG_ENDIAN 1 /* number of bits in an addressable storage unit */ *************** enum reg_class { NO_REGS, LR0_REGS, GENE *** 525,531 **** #define N_REG_CLASSES (int) LIM_REG_CLASSES ! /* Give names of register classes as strings for dump file. */ #define REG_CLASS_NAMES \ {"NO_REGS", "LR0_REGS", "GENERAL_REGS", "BP_REGS", "FC_REGS", "CR_REGS", \ --- 525,531 ---- #define N_REG_CLASSES (int) LIM_REG_CLASSES ! /* Give names of register classes as strings for dump file. */ #define REG_CLASS_NAMES \ {"NO_REGS", "LR0_REGS", "GENERAL_REGS", "BP_REGS", "FC_REGS", "CR_REGS", \ *************** enum reg_class { NO_REGS, LR0_REGS, GENE *** 679,693 **** most expensive register-register copy. */ #define MEMORY_MOVE_COST(MODE,CLASS,IN) 6 - - /* A C statement (sans semicolon) to update the integer variable COST - based on the relationship between INSN that is dependent on - DEP_INSN through the dependence LINK. The default is to make no - adjustment to COST. On the a29k, ignore the cost of anti- and - output-dependencies. */ - #define ADJUST_COST(INSN,LINK,DEP_INSN,COST) \ - if (REG_NOTE_KIND (LINK) != 0) \ - (COST) = 0; /* Anti or output dependence. */ /* Stack layout; function entry, exit and calling. */ --- 679,684 ---- *************** extern const char *a29k_function_name; *** 935,950 **** a29k_function_name = NAME; \ a29k_compute_reg_names (); - /* This macro generates the assembly code for function entry. - FILE is a stdio stream to output the code to. - SIZE is an int: how many units of temporary storage to allocate. - Refer to the array `regs_ever_live' to determine which registers - to save; `regs_ever_live[I]' is nonzero if register number I - is ever used in the function. This macro is responsible for - knowing which registers should not be saved even if used. */ - - #define FUNCTION_PROLOGUE(FILE, SIZE) output_prolog (FILE, SIZE) - /* Output assembler code to FILE to increment profiler label # LABELNO for profiling a function entry. */ --- 926,931 ---- *************** extern const char *a29k_function_name; *** 957,974 **** #define EXIT_IGNORE_STACK 1 - /* This macro generates the assembly code for function exit, - on machines that need it. If FUNCTION_EPILOGUE is not defined - then individual return instructions are generated for each - return statement. Args are same as for FUNCTION_PROLOGUE. - - The function epilogue should not depend on the current stack pointer! - It should use the frame pointer only. This is mandatory because - of alloca; we also take advantage of it to omit stack adjustments - before returning. */ - - #define FUNCTION_EPILOGUE(FILE, SIZE) output_epilog (FILE, SIZE) - /* Define the number of delay slots needed for the function epilogue. On the 29k, we need a slot except when we have a register stack adjustment, --- 938,943 ---- *************** extern const char *a29k_function_name; *** 1207,1221 **** /* Define as C expression which evaluates to nonzero if the tablejump instruction expects the table to contain offsets from the address of the table. ! Do not define this if the table should contain absolute addresses. */ /* #define CASE_VECTOR_PC_RELATIVE 1 */ - /* Specify the tree operation to be used to convert reals to integers. */ - #define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR - - /* This is the kind of divide that is easiest to do in the general case. */ - #define EASY_DIV_EXPR TRUNC_DIV_EXPR - /* Define this as 1 if `char' should by default be signed; else as 0. */ #define DEFAULT_SIGNED_CHAR 0 --- 1176,1184 ---- /* Define as C expression which evaluates to nonzero if the tablejump instruction expects the table to contain offsets from the address of the table. ! Do not define this if the table should contain absolute addresses. */ /* #define CASE_VECTOR_PC_RELATIVE 1 */ /* Define this as 1 if `char' should by default be signed; else as 0. */ #define DEFAULT_SIGNED_CHAR 0 *************** extern const char *a29k_function_name; *** 1300,1306 **** #define NO_FUNCTION_CSE /* Define this to be nonzero if shift instructions ignore all but the low-order ! few bits. */ #define SHIFT_COUNT_TRUNCATED 1 /* Compute the cost of computing a constant rtl expression RTX --- 1263,1269 ---- #define NO_FUNCTION_CSE /* Define this to be nonzero if shift instructions ignore all but the low-order ! few bits. */ #define SHIFT_COUNT_TRUNCATED 1 /* Compute the cost of computing a constant rtl expression RTX *************** extern const char *a29k_function_name; *** 1347,1353 **** /* Output at beginning of assembler file. */ #define ASM_FILE_START(FILE) \ ! { char *p, *after_dir = main_input_filename; \ if (TARGET_29050) \ fprintf (FILE, "\t.cputype 29050\n"); \ for (p = main_input_filename; *p; p++) \ --- 1310,1316 ---- /* Output at beginning of assembler file. */ #define ASM_FILE_START(FILE) \ ! { const char *p, *after_dir = main_input_filename; \ if (TARGET_29050) \ fprintf (FILE, "\t.cputype 29050\n"); \ for (p = main_input_filename; *p; p++) \ *************** literal_section () \ *** 1447,1460 **** /* How to renumber registers for dbx and gdb. */ ! extern int a29k_debug_reg_map[]; #define DBX_REGISTER_NUMBER(REGNO) a29k_debug_reg_map[REGNO] ! /* This how to write an assembler directive to FILE to switch to ! section NAME for DECL. */ ! ! #define ASM_OUTPUT_SECTION_NAME(FILE, DECL, NAME, RELOC) \ ! fprintf (FILE, "\t.sect %s, bss\n\t.use %s\n", NAME, NAME) /* This is how to output the definition of a user-level label named NAME, such as the label on a static function or variable NAME. */ --- 1410,1420 ---- /* How to renumber registers for dbx and gdb. */ ! extern int a29k_debug_reg_map[FIRST_PSEUDO_REGISTER]; #define DBX_REGISTER_NUMBER(REGNO) a29k_debug_reg_map[REGNO] ! /* Switch into a generic section. */ ! #define TARGET_ASM_NAMED_SECTION a29k_asm_named_section /* This is how to output the definition of a user-level label named NAME, such as the label on a static function or variable NAME. */ *************** extern int a29k_debug_reg_map[]; *** 1468,1474 **** #define ASM_GLOBALIZE_LABEL(FILE,NAME) \ do { fputs ("\t.global ", FILE); assemble_name (FILE, NAME); fputs ("\n", FILE);} while (0) ! /* The prefix to add to user-visible assembler symbols. */ #undef USER_LABEL_PREFIX #define USER_LABEL_PREFIX "_" --- 1428,1434 ---- #define ASM_GLOBALIZE_LABEL(FILE,NAME) \ do { fputs ("\t.global ", FILE); assemble_name (FILE, NAME); fputs ("\n", FILE);} while (0) ! /* The prefix to add to user-visible assembler symbols. */ #undef USER_LABEL_PREFIX #define USER_LABEL_PREFIX "_" *************** extern int a29k_debug_reg_map[]; *** 1481,1487 **** /* This is how to output a label for a jump table. Arguments are the same as for ASM_OUTPUT_INTERNAL_LABEL, except the insn for the jump table is ! passed. */ #define ASM_OUTPUT_CASE_LABEL(FILE,PREFIX,NUM,TABLEINSN) \ { ASM_OUTPUT_ALIGN (FILE, 2); ASM_OUTPUT_INTERNAL_LABEL (FILE, PREFIX, NUM); } --- 1441,1447 ---- /* This is how to output a label for a jump table. Arguments are the same as for ASM_OUTPUT_INTERNAL_LABEL, except the insn for the jump table is ! passed. */ #define ASM_OUTPUT_CASE_LABEL(FILE,PREFIX,NUM,TABLEINSN) \ { ASM_OUTPUT_ALIGN (FILE, 2); ASM_OUTPUT_INTERNAL_LABEL (FILE, PREFIX, NUM); } *************** extern int a29k_debug_reg_map[]; *** 1494,1528 **** #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ sprintf (LABEL, "*%s%d", PREFIX, NUM) - /* This is how to output an assembler line defining a `double' constant. */ - - #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - fprintf (FILE, "\t.double %.20e\n", (VALUE)) - - /* This is how to output an assembler line defining a `float' constant. */ - - #define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - fprintf (FILE, "\t.float %.20e\n", (VALUE)) - - /* This is how to output an assembler line defining an `int' constant. */ - - #define ASM_OUTPUT_INT(FILE,VALUE) \ - ( fprintf (FILE, "\t.word "), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "\n")) - - /* Likewise for `char' and `short' constants. */ - - #define ASM_OUTPUT_SHORT(FILE,VALUE) \ - ( fprintf (FILE, "\t.hword "), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "\n")) - - #define ASM_OUTPUT_CHAR(FILE,VALUE) \ - ( fprintf (FILE, "\t.byte "), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "\n")) - /* This is how to output an insn to push a register on the stack. It need not be very fast code. */ --- 1454,1459 ---- *************** extern int a29k_debug_reg_map[]; *** 1539,1556 **** reg_names[REGNO], reg_names[R_MSP], reg_names[R_MSP], \ reg_names[R_MSP]); - /* This is how to output an assembler line for a numeric constant byte. */ - - #define ASM_OUTPUT_BYTE(FILE,VALUE) \ - fprintf (FILE, "\t.byte 0x%x\n", (VALUE)) - /* This is how to output an element of a case-vector that is absolute. */ #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ fprintf (FILE, "\t.word L%d\n", VALUE) /* This is how to output an element of a case-vector that is relative. ! Don't define this if it is not supported. */ /* #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL) */ --- 1470,1482 ---- reg_names[REGNO], reg_names[R_MSP], reg_names[R_MSP], \ reg_names[R_MSP]); /* This is how to output an element of a case-vector that is absolute. */ #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ fprintf (FILE, "\t.word L%d\n", VALUE) /* This is how to output an element of a case-vector that is relative. ! Don't define this if it is not supported. */ /* #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL) */ *************** extern int a29k_debug_reg_map[]; *** 1589,1609 **** ( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 10), \ sprintf ((OUTPUT), "%s.%d", (NAME), (LABELNO))) - /* Define the parentheses used to group arithmetic operations - in assembler code. */ - - #define ASM_OPEN_PAREN "(" - #define ASM_CLOSE_PAREN ")" - - /* Define results of standard character escape sequences. */ - #define TARGET_BELL 007 - #define TARGET_BS 010 - #define TARGET_TAB 011 - #define TARGET_NEWLINE 012 - #define TARGET_VT 013 - #define TARGET_FF 014 - #define TARGET_CR 015 - /* Print operand X (an rtx) in assembler syntax to file FILE. CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified. For `%' followed by punctuation, CODE is the punctuation and X is null. */ --- 1515,1520 ---- *************** extern int a29k_debug_reg_map[]; *** 1635,1641 **** {"cint_16_operand", {CONST_INT}}, \ {"long_const_operand", {CONST_INT, CONST, CONST_DOUBLE, \ LABEL_REF, SYMBOL_REF}}, \ - {"shift_constant_operand", {CONST_INT, ASHIFT}}, \ {"const_0_operand", {CONST_INT, ASHIFT}}, \ {"const_8_operand", {CONST_INT, ASHIFT}}, \ {"const_16_operand", {CONST_INT, ASHIFT}}, \ --- 1546,1551 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/a29k/a29k.md gcc-3.1/gcc/config/a29k/a29k.md *** gcc-3.0.4/gcc/config/a29k/a29k.md Fri Oct 15 06:38:01 1999 --- gcc-3.1/gcc/config/a29k/a29k.md Fri Oct 19 19:39:57 2001 *************** *** 1,5 **** ;;- Machine description for AMD Am29000 for GNU C compiler ! ;; Copyright (C) 1991, 1992, 1994, 1998, 1999 Free Software Foundation, Inc. ;; Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu) ;; This file is part of GNU CC. --- 1,6 ---- ;;- Machine description for AMD Am29000 for GNU C compiler ! ;; Copyright (C) 1991, 1992, 1994, 1998, 1999, 2001 ! ;; Free Software Foundation, Inc. ;; Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu) ;; This file is part of GNU CC. *************** *** 1775,1781 **** { rtx general = gen_reg_rtx (SImode); rtx bp = gen_reg_rtx (PSImode); ! rtx (*fcn) () = TARGET_BYTE_WRITES ? gen_storehihww : gen_storehinhww; rtx seq = (*fcn) (XEXP (operands[0], 0), gen_lowpart (SImode, operands[1]), --- 1776,1782 ---- { rtx general = gen_reg_rtx (SImode); rtx bp = gen_reg_rtx (PSImode); ! rtx (*fcn) PARAMS ((rtx, rtx, rtx, rtx)) = TARGET_BYTE_WRITES ? gen_storehihww : gen_storehinhww; rtx seq = (*fcn) (XEXP (operands[0], 0), gen_lowpart (SImode, operands[1]), *************** *** 1824,1830 **** (match_operand:PSI 2 "register_operand" "=b")])] "! TARGET_DW_ENABLE" " ! { rtx (*fcn) () = TARGET_BYTE_WRITES ? gen_storehihww : gen_storehinhww; rtx seq = (*fcn) (a29k_get_reloaded_address (operands[0]), gen_lowpart (SImode, operands[1]), gen_rtx_REG (SImode, R_TAV), operands[2]); --- 1825,1832 ---- (match_operand:PSI 2 "register_operand" "=b")])] "! TARGET_DW_ENABLE" " ! { rtx (*fcn) PARAMS ((rtx, rtx, rtx, rtx)) = ! TARGET_BYTE_WRITES ? gen_storehihww : gen_storehinhww; rtx seq = (*fcn) (a29k_get_reloaded_address (operands[0]), gen_lowpart (SImode, operands[1]), gen_rtx_REG (SImode, R_TAV), operands[2]); *************** *** 1905,1911 **** { rtx general = gen_reg_rtx (SImode); rtx bp = gen_reg_rtx (PSImode); ! rtx (*fcn) () = TARGET_BYTE_WRITES ? gen_storeqihww : gen_storeqinhww; rtx seq = (*fcn) (XEXP (operands[0], 0), gen_lowpart (SImode, operands[1]), --- 1907,1913 ---- { rtx general = gen_reg_rtx (SImode); rtx bp = gen_reg_rtx (PSImode); ! rtx (*fcn) PARAMS ((rtx, rtx, rtx, rtx)) = TARGET_BYTE_WRITES ? gen_storeqihww : gen_storeqinhww; rtx seq = (*fcn) (XEXP (operands[0], 0), gen_lowpart (SImode, operands[1]), *************** *** 1954,1960 **** (match_operand:PSI 2 "register_operand" "=b")])] "! TARGET_DW_ENABLE" " ! { rtx (*fcn) () = TARGET_BYTE_WRITES ? gen_storeqihww : gen_storeqinhww; rtx seq = (*fcn) (a29k_get_reloaded_address (operands[0]), gen_lowpart (SImode, operands[1]), gen_rtx_REG (SImode, R_TAV), operands[2]); --- 1956,1963 ---- (match_operand:PSI 2 "register_operand" "=b")])] "! TARGET_DW_ENABLE" " ! { rtx (*fcn) PARAMS ((rtx, rtx, rtx, rtx)) = ! TARGET_BYTE_WRITES ? gen_storeqihww : gen_storeqinhww; rtx seq = (*fcn) (a29k_get_reloaded_address (operands[0]), gen_lowpart (SImode, operands[1]), gen_rtx_REG (SImode, R_TAV), operands[2]); *************** *** 2375,2382 **** operands[1] = force_const_mem (TImode, operands[1]); if (! memory_address_p (TImode, XEXP (operands[1], 0)) && ! reload_in_progress) ! operands[1] = change_address (operands[1], TImode, ! XEXP (operands[1], 0)); } }") --- 2378,2384 ---- operands[1] = force_const_mem (TImode, operands[1]); if (! memory_address_p (TImode, XEXP (operands[1], 0)) && ! reload_in_progress) ! operands[1] = adjust_address (operands[1], TImode, 0); } }") diff -Nrc3pad gcc-3.0.4/gcc/config/a29k/rtems.h gcc-3.1/gcc/config/a29k/rtems.h *** gcc-3.0.4/gcc/config/a29k/rtems.h Fri Feb 15 14:42:55 2002 --- gcc-3.1/gcc/config/a29k/rtems.h Fri Apr 12 13:09:22 2002 *************** along with GNU CC; see the file COPYING. *** 19,36 **** the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - #include "a29k/a29k.h" - /* Specify predefined symbols in preprocessor. */ #undef CPP_PREDEFINES #define CPP_PREDEFINES "-D_AM29K -D_AM29000 -D_EPI -D__rtems__ \ ! -Asystem(rtems) -Acpu(a29k) -Amachine(a29k)" ! ! /* Generate calls to memcpy, memcmp and memset. */ ! #ifndef TARGET_MEM_FUNCTIONS ! #define TARGET_MEM_FUNCTIONS ! #endif ! ! /* Get machine-independent configuration parameters for RTEMS. */ ! #include --- 19,26 ---- the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Specify predefined symbols in preprocessor. */ #undef CPP_PREDEFINES #define CPP_PREDEFINES "-D_AM29K -D_AM29000 -D_EPI -D__rtems__ \ ! -Asystem=rtems -Acpu=a29k -Amachine=a29k" diff -Nrc3pad gcc-3.0.4/gcc/config/a29k/t-a29k gcc-3.1/gcc/config/a29k/t-a29k *** gcc-3.0.4/gcc/config/a29k/t-a29k Wed Dec 16 21:00:38 1998 --- gcc-3.1/gcc/config/a29k/t-a29k Thu Jan 1 00:00:00 1970 *************** *** 1,5 **** - LIBGCC1 = - CROSS_LIBGCC1 = - - # We need crt0.o. - LIBGCC1_TEST = --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/a29k/t-a29kbare gcc-3.1/gcc/config/a29k/t-a29kbare *** gcc-3.0.4/gcc/config/a29k/t-a29kbare Thu Aug 5 03:27:46 1999 --- gcc-3.1/gcc/config/a29k/t-a29kbare Thu May 17 03:15:45 2001 *************** *** 1,9 **** - LIBGCC1 = - CROSS_LIBGCC1 = - - # We need crt0.o. - LIBGCC1_TEST = - # We want fine grained libraries, so use the new code to build the # floating point emulation libraries. FPBIT = fp-bit.c --- 1,3 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/a29k/t-vx29k gcc-3.1/gcc/config/a29k/t-vx29k *** gcc-3.0.4/gcc/config/a29k/t-vx29k Thu Aug 5 03:27:46 1999 --- gcc-3.1/gcc/config/a29k/t-vx29k Thu May 17 03:15:45 2001 *************** *** 1,9 **** - LIBGCC1 = - CROSS_LIBGCC1 = - - # We need crt0.o. - LIBGCC1_TEST = - # We don't want to put exit in libgcc.a for VxWorks, because VxWorks # does not have _exit. TARGET_LIBGCC2_CFLAGS = -Dexit=unused_exit --- 1,3 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/a29k/udi.h gcc-3.1/gcc/config/a29k/udi.h *** gcc-3.0.4/gcc/config/a29k/udi.h Mon Sep 25 12:08:00 2000 --- gcc-3.1/gcc/config/a29k/udi.h Thu Jan 1 00:00:00 1970 *************** *** 1,94 **** - /* Definitions of target machine for GNU compiler, for AMD Am29000 CPU - running over UDI using COFF. - Copyright (C) 1994, 1996, 2000 Free Software Foundation, Inc. - - This file is part of GNU CC. - - GNU CC is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU CC is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNU CC; see the file COPYING. If not, write to - the Free Software Foundation, 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - - /* Support the ctors and dtors sections for g++. */ - - #define CTORS_SECTION_ASM_OP "\t.use .ctors" - #define DTORS_SECTION_ASM_OP "\t.use .dtors" - - /* A list of other sections which the compiler might be "in" at any - given time. */ - - #undef EXTRA_SECTIONS - #define EXTRA_SECTIONS readonly_data, in_ctors, in_dtors - - /* A list of extra section function definitions. */ - - #undef EXTRA_SECTION_FUNCTIONS - #define EXTRA_SECTION_FUNCTIONS \ - READONLY_DATA_FUNCTION \ - CTORS_SECTION_FUNCTION \ - DTORS_SECTION_FUNCTION - - #define READONLY_DATA_FUNCTION \ - void \ - literal_section () \ - { \ - if (in_section != readonly_data) \ - { \ - fprintf (asm_out_file, "%s\n", READONLY_DATA_SECTION_ASM_OP); \ - in_section = readonly_data; \ - } \ - } \ - - #define CTORS_SECTION_FUNCTION \ - void \ - ctors_section () \ - { \ - if (in_section != in_ctors) \ - { \ - fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP); \ - in_section = in_ctors; \ - } \ - } - - #define DTORS_SECTION_FUNCTION \ - void \ - dtors_section () \ - { \ - if (in_section != in_dtors) \ - { \ - fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP); \ - in_section = in_dtors; \ - } \ - } - - #define INT_ASM_OP "\t.word\t" - - /* A C statement (sans semicolon) to output an element in the table of - global constructors. */ - #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ - do { \ - ctors_section (); \ - fprintf (FILE, "%s", INT_ASM_OP); \ - assemble_name (FILE, NAME); \ - fprintf (FILE, "\n"); \ - } while (0) - - /* A C statement (sans semicolon) to output an element in the table of - global destructors. */ - #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \ - do { \ - dtors_section (); \ - fprintf (FILE, "%s", INT_ASM_OP); \ - assemble_name (FILE, NAME); \ - fprintf (FILE, "\n"); \ - } while (0) --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/a29k/unix.h gcc-3.1/gcc/config/a29k/unix.h *** gcc-3.0.4/gcc/config/a29k/unix.h Thu Nov 2 23:29:07 2000 --- gcc-3.1/gcc/config/a29k/unix.h Mon Nov 19 18:29:59 2001 *************** Boston, MA 02111-1307, USA. */ *** 53,59 **** #undef ASM_FILE_START #define ASM_FILE_START(FILE) \ ! { char *p, *after_dir = main_input_filename; \ if (TARGET_29050) \ fprintf (FILE, "\t.cputype 29050\n"); \ for (p = main_input_filename; *p; p++) \ --- 53,59 ---- #undef ASM_FILE_START #define ASM_FILE_START(FILE) \ ! { const char *p, *after_dir = main_input_filename; \ if (TARGET_29050) \ fprintf (FILE, "\t.cputype 29050\n"); \ for (p = main_input_filename; *p; p++) \ diff -Nrc3pad gcc-3.0.4/gcc/config/a29k/x-unix gcc-3.1/gcc/config/a29k/x-unix *** gcc-3.0.4/gcc/config/a29k/x-unix Wed Dec 16 21:00:45 1998 --- gcc-3.1/gcc/config/a29k/x-unix Thu Jan 1 00:00:00 1970 *************** *** 1,2 **** - # Needed for missing functions in Sym1. - CLIB=-liberty -lld --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/a29k/xm-a29k.h gcc-3.1/gcc/config/a29k/xm-a29k.h *** gcc-3.0.4/gcc/config/a29k/xm-a29k.h Thu Mar 15 19:02:01 2001 --- gcc-3.1/gcc/config/a29k/xm-a29k.h Thu Jan 1 00:00:00 1970 *************** *** 1,36 **** - /* Configuration for GNU C-compiler for AMD Am29000 processor. - Copyright (C) 1987, 1988, 1993 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 describes the machine the compiler is hosted on. */ - #define HOST_BITS_PER_CHAR 8 - #define HOST_BITS_PER_SHORT 16 - #define HOST_BITS_PER_INT 32 - #define HOST_BITS_PER_LONG 32 - #define HOST_BITS_PER_LONGLONG 64 - - #define HOST_WORDS_BIG_ENDIAN - - /* target machine dependencies. - tm.h is a symbolic link to the actual target specific file. */ - #include "tm.h" - - /* Arguments to use with `exit'. */ - #define SUCCESS_EXIT_CODE 0 - #define FATAL_EXIT_CODE 33 --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/a29k/xm-unix.h gcc-3.1/gcc/config/a29k/xm-unix.h *** gcc-3.0.4/gcc/config/a29k/xm-unix.h Thu Mar 15 19:02:01 2001 --- gcc-3.1/gcc/config/a29k/xm-unix.h Thu Jan 1 00:00:00 1970 *************** *** 1,39 **** - /* Configuration for GNU C-compiler for AMD Am29000 processor. - Copyright (C) 1987, 1988, 1993 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 describes the machine the compiler is hosted on. */ - #define HOST_BITS_PER_CHAR 8 - #define HOST_BITS_PER_SHORT 16 - #define HOST_BITS_PER_INT 32 - #define HOST_BITS_PER_LONG 32 - #define HOST_BITS_PER_LONGLONG 64 - - #define HOST_WORDS_BIG_ENDIAN - - /* target machine dependencies. - tm.h is a symbolic link to the actual target specific file. */ - #include "tm.h" - - /* Arguments to use with `exit'. */ - #define SUCCESS_EXIT_CODE 0 - #define FATAL_EXIT_CODE 33 - - /* Ultra is V7, which is closest to USG. */ - #define USG --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/alpha-interix.h gcc-3.1/gcc/config/alpha/alpha-interix.h *** gcc-3.0.4/gcc/config/alpha/alpha-interix.h Wed Nov 8 01:31:01 2000 --- gcc-3.1/gcc/config/alpha/alpha-interix.h Thu Nov 15 17:55:26 2001 *************** Boston, MA 02111-1307, USA. */ *** 100,106 **** includes this file. */ #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_const, in_ctors, in_dtors /* A default list of extra section function definitions. For targets that use additional sections (e.g. .tdesc) you should override this --- 100,106 ---- includes this file. */ #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_const /* A default list of extra section function definitions. For targets that use additional sections (e.g. .tdesc) you should override this *************** Boston, MA 02111-1307, USA. */ *** 108,116 **** #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ ! CONST_SECTION_FUNCTION \ ! CTORS_SECTION_FUNCTION \ ! DTORS_SECTION_FUNCTION #undef READONLY_DATA_SECTION #define READONLY_DATA_SECTION() const_section () --- 108,114 ---- #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ ! CONST_SECTION_FUNCTION #undef READONLY_DATA_SECTION #define READONLY_DATA_SECTION() const_section () *************** const_section () \ *** 128,179 **** } \ } - #define CTORS_SECTION_FUNCTION \ - void \ - ctors_section () \ - { \ - if (in_section != in_ctors) \ - { \ - fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP); \ - in_section = in_ctors; \ - } \ - } - - #define DTORS_SECTION_FUNCTION \ - void \ - dtors_section () \ - { \ - if (in_section != in_dtors) \ - { \ - fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP); \ - in_section = in_dtors; \ - } \ - } - - #define INT_ASM_OP "\t.long\t" - - /* A C statement (sans semicolon) to output an element in the table of - global constructors. */ - #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ - do { \ - ctors_section (); \ - fprintf (FILE, "%s", INT_ASM_OP); \ - assemble_name (FILE, NAME); \ - fprintf (FILE, "\n"); \ - } while (0) - - /* A C statement (sans semicolon) to output an element in the table of - global destructors. */ - #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \ - do { \ - dtors_section (); \ - fprintf (FILE, "%s", INT_ASM_OP); \ - assemble_name (FILE, NAME); \ - fprintf (FILE, "\n"); \ - } while (0) - /* The linker will take care of this, and having them causes problems with ! ld -r (specifically -rU). */ #define CTOR_LISTS_DEFINED_EXTERNALLY 1 #define SET_ASM_OP "\t.set\t" --- 126,133 ---- } \ } /* The linker will take care of this, and having them causes problems with ! ld -r (specifically -rU). */ #define CTOR_LISTS_DEFINED_EXTERNALLY 1 #define SET_ASM_OP "\t.set\t" *************** while (0) *** 201,211 **** #define PCC_BITFIELD_TYPE_TEST TYPE_NATIVE(rec) #define GROUP_BITFIELDS_BY_ALIGN TYPE_NATIVE(rec) ! /* DWARF2 Unwinding doesn't work with exception handling yet. */ #undef DWARF2_UNWIND_INFO #define DWARF2_UNWIND_INFO 0 ! /* Don't assume anything about the header files. */ #define NO_IMPLICIT_EXTERN_C /* The definition of this macro implies that there are cases where --- 155,165 ---- #define PCC_BITFIELD_TYPE_TEST TYPE_NATIVE(rec) #define GROUP_BITFIELDS_BY_ALIGN TYPE_NATIVE(rec) ! /* DWARF2 Unwinding doesn't work with exception handling yet. */ #undef DWARF2_UNWIND_INFO #define DWARF2_UNWIND_INFO 0 ! /* Don't assume anything about the header files. */ #define NO_IMPLICIT_EXTERN_C /* The definition of this macro implies that there are cases where *************** while (0) *** 213,219 **** On NT (according to the spec) anything except strings/array that fits in 64 bits is returned in the registers (this appears to differ from ! the rest of the Alpha family). */ #undef RETURN_IN_MEMORY #define RETURN_IN_MEMORY(TYPE) \ --- 167,173 ---- On NT (according to the spec) anything except strings/array that fits in 64 bits is returned in the registers (this appears to differ from ! the rest of the Alpha family). */ #undef RETURN_IN_MEMORY #define RETURN_IN_MEMORY(TYPE) \ *************** while (0) *** 233,239 **** } /* The current Interix assembler (consistent with the DEC documentation) ! uses a=b NOT .set a,b; .set is for assembler options. */ #undef ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL #define ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL(FILE, SY, HI, LO) \ do { \ --- 187,193 ---- } /* The current Interix assembler (consistent with the DEC documentation) ! uses a=b NOT .set a,b; .set is for assembler options. */ #undef ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL #define ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL(FILE, SY, HI, LO) \ do { \ diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/alpha-protos.h gcc-3.1/gcc/config/alpha/alpha-protos.h *** gcc-3.0.4/gcc/config/alpha/alpha-protos.h Mon Jun 11 16:25:36 2001 --- gcc-3.1/gcc/config/alpha/alpha-protos.h Mon Feb 18 01:07:52 2002 *************** along with GNU CC; see the file COPYING. *** 18,23 **** --- 18,25 ---- the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + extern int alpha_next_sequence_number; + extern void literal_section PARAMS ((void)); extern void override_options PARAMS ((void)); extern int zap_mask PARAMS ((HOST_WIDE_INT)); *************** extern int alpha_pv_save_size PARAMS ((v *** 28,34 **** extern int alpha_using_fp PARAMS ((void)); extern void alpha_write_verstamp PARAMS ((FILE *)); extern void alpha_expand_prologue PARAMS ((void)); - extern void output_end_prologue PARAMS ((FILE *)); extern void alpha_expand_epilogue PARAMS ((void)); extern void alpha_output_filename PARAMS ((FILE *, const char *)); extern void alpha_output_lineno PARAMS ((FILE *, int)); --- 30,35 ---- *************** extern int some_operand PARAMS ((rtx, en *** 55,61 **** --- 56,68 ---- extern int some_ni_operand PARAMS ((rtx, enum machine_mode)); extern int input_operand PARAMS ((rtx, enum machine_mode)); extern int current_file_function_operand PARAMS ((rtx, enum machine_mode)); + extern int direct_call_operand PARAMS ((rtx, enum machine_mode)); + extern int local_symbolic_operand PARAMS ((rtx, enum machine_mode)); + extern int small_symbolic_operand PARAMS ((rtx, enum machine_mode)); + extern int some_small_symbolic_operand PARAMS ((rtx, enum machine_mode)); + extern int global_symbolic_operand PARAMS ((rtx, enum machine_mode)); extern int call_operand PARAMS ((rtx, enum machine_mode)); + extern int symbolic_operand PARAMS ((rtx, enum machine_mode)); extern int alpha_comparison_operator PARAMS ((rtx, enum machine_mode)); extern int alpha_zero_comparison_operator PARAMS ((rtx, enum machine_mode)); extern int alpha_swapped_comparison_operator PARAMS ((rtx, enum machine_mode)); *************** extern int normal_memory_operand PARAMS *** 71,86 **** --- 78,112 ---- extern int reg_no_subreg_operand PARAMS ((rtx, enum machine_mode)); extern int addition_operation PARAMS ((rtx, enum machine_mode)); + extern bool alpha_const_ok_for_letter_p PARAMS ((HOST_WIDE_INT, int)); + extern bool alpha_const_double_ok_for_letter_p PARAMS ((rtx, int)); + extern bool alpha_extra_constraint PARAMS ((rtx, int)); + + extern rtx alpha_tablejump_addr_vec PARAMS ((rtx)); + extern rtx alpha_tablejump_best_label PARAMS ((rtx)); + + extern bool alpha_legitimate_address_p PARAMS ((enum machine_mode, rtx, int)); + extern rtx alpha_legitimize_address PARAMS ((rtx, rtx, enum machine_mode)); + extern rtx alpha_legitimize_reload_address PARAMS ((rtx, enum machine_mode, + int, int, int)); + + extern rtx split_small_symbolic_operand PARAMS ((rtx)); + extern void get_aligned_mem PARAMS ((rtx, rtx *, rtx *)); extern rtx get_unaligned_address PARAMS ((rtx, int)); + extern enum reg_class alpha_preferred_reload_class PARAMS ((rtx, + enum reg_class)); extern enum reg_class secondary_reload_class PARAMS ((enum reg_class, enum machine_mode, rtx, int)); + extern void alpha_set_memflags PARAMS ((rtx, rtx)); extern rtx alpha_emit_set_const PARAMS ((rtx, enum machine_mode, HOST_WIDE_INT, int)); extern rtx alpha_emit_set_long_const PARAMS ((rtx, HOST_WIDE_INT, HOST_WIDE_INT)); + extern bool alpha_expand_mov PARAMS ((enum machine_mode, rtx *)); + extern bool alpha_expand_mov_nobwx PARAMS ((enum machine_mode, rtx *)); extern void alpha_emit_floatuns PARAMS ((rtx[])); extern rtx alpha_emit_conditional_branch PARAMS ((enum rtx_code)); extern rtx alpha_emit_setcc PARAMS ((enum rtx_code)); *************** extern void alpha_expand_unaligned_store *** 98,104 **** HOST_WIDE_INT)); extern int alpha_expand_block_move PARAMS ((rtx [])); extern int alpha_expand_block_clear PARAMS ((rtx [])); - extern int alpha_adjust_cost PARAMS ((rtx, rtx, rtx, int)); extern rtx alpha_return_addr PARAMS ((int, rtx)); extern rtx alpha_gp_save_rtx PARAMS ((void)); extern void print_operand PARAMS ((FILE *, rtx, int)); --- 124,129 ---- *************** extern int check_float_value PARAMS ((en *** 112,118 **** REAL_VALUE_TYPE *, int)); #endif ! #if OPEN_VMS #ifdef HAVE_MACHINE_MODES extern enum avms_arg_type alpha_arg_type PARAMS ((enum machine_mode)); #endif --- 137,143 ---- REAL_VALUE_TYPE *, int)); #endif ! #if TARGET_ABI_OPEN_VMS #ifdef HAVE_MACHINE_MODES extern enum avms_arg_type alpha_arg_type PARAMS ((enum machine_mode)); #endif *************** extern rtx alpha_arg_info_reg_val PARAMS *** 122,128 **** #ifdef BUFSIZ extern void alpha_write_linkage PARAMS ((FILE *)); #endif ! #endif /* OPEN_VMS */ #ifdef RTX_CODE extern rtx alpha_need_linkage PARAMS ((const char *, int)); --- 147,153 ---- #ifdef BUFSIZ extern void alpha_write_linkage PARAMS ((FILE *)); #endif ! #endif /* TARGET_ABI_OPEN_VMS */ #ifdef RTX_CODE extern rtx alpha_need_linkage PARAMS ((const char *, int)); *************** extern rtx alpha_va_arg PARAMS ((tree, t *** 136,142 **** extern rtx function_arg PARAMS ((CUMULATIVE_ARGS, enum machine_mode, tree, int)); #endif - extern int vms_valid_decl_attribute_p PARAMS ((tree, tree, tree, tree)); extern void alpha_start_function PARAMS ((FILE *, const char *, tree)); extern void alpha_end_function PARAMS ((FILE *, const char *, tree)); #endif /* TREE CODE */ --- 161,189 ---- extern rtx function_arg PARAMS ((CUMULATIVE_ARGS, enum machine_mode, tree, int)); #endif extern void alpha_start_function PARAMS ((FILE *, const char *, tree)); extern void alpha_end_function PARAMS ((FILE *, const char *, tree)); + extern void alpha_output_mi_thunk_osf PARAMS ((FILE *, tree, + HOST_WIDE_INT, tree)); + extern void alpha_encode_section_info PARAMS ((tree)); #endif /* TREE CODE */ + + #ifdef RTX_CODE + extern rtx unicosmk_add_call_info_word PARAMS ((rtx)); + #endif + + #if TARGET_ABI_UNICOSMK + #ifdef RTX_CODE + extern void unicosmk_defer_case_vector PARAMS ((rtx, rtx)); + #endif + #ifdef TREE_CODE + extern void unicosmk_unique_section PARAMS ((tree, int)); + #endif + extern void unicosmk_add_extern PARAMS ((const char *)); + extern void unicosmk_output_align PARAMS ((FILE *, int)); + extern char * unicosmk_text_section PARAMS ((void)); + extern char * unicosmk_data_section PARAMS ((void)); + extern void unicosmk_asm_file_start PARAMS ((FILE *)); + extern void unicosmk_asm_file_end PARAMS ((FILE *)); + extern void unicosmk_output_common PARAMS ((FILE *, const char *, int, int)); + #endif /* TARGET_ABI_UNICOSMK */ diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/alpha.c gcc-3.1/gcc/config/alpha/alpha.c *** gcc-3.0.4/gcc/config/alpha/alpha.c Tue Jan 29 08:18:17 2002 --- gcc-3.1/gcc/config/alpha/alpha.c Wed Apr 10 05:14:54 2002 *************** Boston, MA 02111-1307, USA. */ *** 24,29 **** --- 24,30 ---- #include "config.h" #include "system.h" #include "rtl.h" + #include "tree.h" #include "regs.h" #include "hard-reg-set.h" #include "real.h" *************** Boston, MA 02111-1307, USA. */ *** 33,52 **** #include "insn-attr.h" #include "flags.h" #include "recog.h" - #include "reload.h" - #include "tree.h" #include "expr.h" #include "obstack.h" #include "except.h" #include "function.h" #include "toplev.h" #include "ggc.h" #include "tm_p.h" ! /* External data. */ ! extern int rtx_equal_function_value_matters; ! ! /* Specify which cpu to schedule for. */ enum processor_type alpha_cpu; static const char * const alpha_cpu_name[] = --- 34,54 ---- #include "insn-attr.h" #include "flags.h" #include "recog.h" #include "expr.h" + #include "optabs.h" + #include "reload.h" #include "obstack.h" #include "except.h" #include "function.h" #include "toplev.h" #include "ggc.h" + #include "integrate.h" #include "tm_p.h" + #include "target.h" + #include "target-def.h" + #include "debug.h" ! /* Specify which cpu to schedule for. */ enum processor_type alpha_cpu; static const char * const alpha_cpu_name[] = *************** static int alpha_sr_alias_set; *** 101,107 **** --- 103,125 ---- static const char *alpha_fnname; + /* The next explicit relocation sequence number. */ + int alpha_next_sequence_number = 1; + + /* The literal and gpdisp sequence numbers for this insn, as printed + by %# and %* respectively. */ + int alpha_this_literal_sequence_number; + int alpha_this_gpdisp_sequence_number; + /* Declarations of static functions. */ + static bool decl_in_text_section + PARAMS ((tree)); + static int some_small_symbolic_operand_1 + PARAMS ((rtx *, void *)); + static int split_small_symbolic_operand_1 + PARAMS ((rtx *, void *)); + static bool local_symbol_p + PARAMS ((rtx)); static void alpha_set_memflags_1 PARAMS ((rtx, int, int, int)); static rtx alpha_emit_set_const_1 *************** static void alpha_expand_unaligned_store *** 112,127 **** PARAMS ((rtx *out_regs, rtx smem, HOST_WIDE_INT words, HOST_WIDE_INT ofs)); static void alpha_sa_mask PARAMS ((unsigned long *imaskP, unsigned long *fmaskP)); static int alpha_does_function_need_gp PARAMS ((void)); - static void alpha_init_machine_status - PARAMS ((struct function *p)); - static void alpha_mark_machine_status - PARAMS ((struct function *p)); - static void alpha_free_machine_status - PARAMS ((struct function *p)); static int alpha_ra_ever_killed PARAMS ((void)); static rtx set_frame_related_p PARAMS ((void)); static const char *alpha_lookup_xfloating_lib_func --- 130,145 ---- PARAMS ((rtx *out_regs, rtx smem, HOST_WIDE_INT words, HOST_WIDE_INT ofs)); static void alpha_sa_mask PARAMS ((unsigned long *imaskP, unsigned long *fmaskP)); + static int find_lo_sum + PARAMS ((rtx *, void *)); static int alpha_does_function_need_gp PARAMS ((void)); static int alpha_ra_ever_killed PARAMS ((void)); + static const char *get_trap_mode_suffix + PARAMS ((void)); + static const char *get_round_mode_suffix + PARAMS ((void)); static rtx set_frame_related_p PARAMS ((void)); static const char *alpha_lookup_xfloating_lib_func *************** static void alpha_emit_xfloating_libcall *** 132,140 **** PARAMS ((const char *, rtx, rtx[], int, rtx)); static rtx alpha_emit_xfloating_compare PARAMS ((enum rtx_code, rtx, rtx)); /* Get the number of args of a function in one of two ways. */ ! #ifdef OPEN_VMS #define NUM_ARGS current_function_args_info.num_args #else #define NUM_ARGS current_function_args_info --- 150,180 ---- PARAMS ((const char *, rtx, rtx[], int, rtx)); static rtx alpha_emit_xfloating_compare PARAMS ((enum rtx_code, rtx, rtx)); + static void alpha_output_function_end_prologue + PARAMS ((FILE *)); + static int alpha_adjust_cost + PARAMS ((rtx, rtx, rtx, int)); + static int alpha_issue_rate + PARAMS ((void)); + static int alpha_variable_issue + PARAMS ((FILE *, int, rtx, int)); + + #if TARGET_ABI_UNICOSMK + static void alpha_init_machine_status + PARAMS ((struct function *p)); + static void alpha_mark_machine_status + PARAMS ((struct function *p)); + static void alpha_free_machine_status + PARAMS ((struct function *p)); + #endif + + static void unicosmk_output_deferred_case_vectors PARAMS ((FILE *)); + static void unicosmk_gen_dsib PARAMS ((unsigned long *imaskP)); + static void unicosmk_output_ssib PARAMS ((FILE *, const char *)); + static int unicosmk_need_dex PARAMS ((rtx)); /* Get the number of args of a function in one of two ways. */ ! #if TARGET_ABI_OPEN_VMS || TARGET_ABI_UNICOSMK #define NUM_ARGS current_function_args_info.num_args #else #define NUM_ARGS current_function_args_info *************** static rtx alpha_emit_xfloating_compare *** 143,158 **** #define REG_PV 27 #define REG_RA 26 ! /* Parse target option strings. */ void override_options () { int i; ! static struct cpu_table { ! const char *name; ! enum processor_type processor; ! int flags; } cpu_table[] = { #define EV5_MASK (MASK_CPU_EV5) #define EV6_MASK (MASK_CPU_EV6|MASK_BWX|MASK_MAX|MASK_FIX) --- 183,250 ---- #define REG_PV 27 #define REG_RA 26 ! /* Initialize the GCC target structure. */ ! #if TARGET_ABI_OPEN_VMS ! const struct attribute_spec vms_attribute_table[]; ! static unsigned int vms_section_type_flags PARAMS ((tree, const char *, int)); ! static void vms_asm_named_section PARAMS ((const char *, unsigned int)); ! static void vms_asm_out_constructor PARAMS ((rtx, int)); ! static void vms_asm_out_destructor PARAMS ((rtx, int)); ! # undef TARGET_ATTRIBUTE_TABLE ! # define TARGET_ATTRIBUTE_TABLE vms_attribute_table ! # undef TARGET_SECTION_TYPE_FLAGS ! # define TARGET_SECTION_TYPE_FLAGS vms_section_type_flags ! #endif ! ! #if TARGET_ABI_UNICOSMK ! static void unicosmk_asm_named_section PARAMS ((const char *, unsigned int)); ! static void unicosmk_insert_attributes PARAMS ((tree, tree *)); ! static unsigned int unicosmk_section_type_flags PARAMS ((tree, const char *, ! int)); ! # undef TARGET_INSERT_ATTRIBUTES ! # define TARGET_INSERT_ATTRIBUTES unicosmk_insert_attributes ! # undef TARGET_SECTION_TYPE_FLAGS ! # define TARGET_SECTION_TYPE_FLAGS unicosmk_section_type_flags ! #endif ! ! #undef TARGET_ASM_ALIGNED_HI_OP ! #define TARGET_ASM_ALIGNED_HI_OP "\t.word\t" ! #undef TARGET_ASM_ALIGNED_DI_OP ! #define TARGET_ASM_ALIGNED_DI_OP "\t.quad\t" ! ! /* Default unaligned ops are provided for ELF systems. To get unaligned ! data for non-ELF systems, we have to turn off auto alignment. */ ! #ifndef OBJECT_FORMAT_ELF ! #undef TARGET_ASM_UNALIGNED_HI_OP ! #define TARGET_ASM_UNALIGNED_HI_OP "\t.align 0\n\t.word\t" ! #undef TARGET_ASM_UNALIGNED_SI_OP ! #define TARGET_ASM_UNALIGNED_SI_OP "\t.align 0\n\t.long\t" ! #undef TARGET_ASM_UNALIGNED_DI_OP ! #define TARGET_ASM_UNALIGNED_DI_OP "\t.align 0\n\t.quad\t" ! #endif ! ! #undef TARGET_ASM_FUNCTION_END_PROLOGUE ! #define TARGET_ASM_FUNCTION_END_PROLOGUE alpha_output_function_end_prologue ! ! #undef TARGET_SCHED_ADJUST_COST ! #define TARGET_SCHED_ADJUST_COST alpha_adjust_cost ! #undef TARGET_SCHED_ISSUE_RATE ! #define TARGET_SCHED_ISSUE_RATE alpha_issue_rate ! #undef TARGET_SCHED_VARIABLE_ISSUE ! #define TARGET_SCHED_VARIABLE_ISSUE alpha_variable_issue ! ! struct gcc_target targetm = TARGET_INITIALIZER; ! ! /* Parse target option strings. */ void override_options () { int i; ! static const struct cpu_table { ! const char *const name; ! const enum processor_type processor; ! const int flags; } cpu_table[] = { #define EV5_MASK (MASK_CPU_EV5) #define EV6_MASK (MASK_CPU_EV6|MASK_BWX|MASK_MAX|MASK_FIX) *************** override_options () *** 173,192 **** { 0, 0, 0 } }; alpha_tp = ALPHA_TP_PROG; - alpha_fprm = ALPHA_FPRM_NORM; alpha_fptm = ALPHA_FPTM_N; if (TARGET_IEEE) { ! alpha_tp = ALPHA_TP_INSN; ! alpha_fptm = ALPHA_FPTM_SU; } if (TARGET_IEEE_WITH_INEXACT) { ! alpha_tp = ALPHA_TP_INSN; ! alpha_fptm = ALPHA_FPTM_SUI; } if (alpha_tp_string) --- 265,314 ---- { 0, 0, 0 } }; + /* Unicos/Mk doesn't have shared libraries. */ + if (TARGET_ABI_UNICOSMK && flag_pic) + { + warning ("-f%s ignored for Unicos/Mk (not supported)", + (flag_pic > 1) ? "PIC" : "pic"); + flag_pic = 0; + } + + /* On Unicos/Mk, the native compiler consistenly generates /d suffices for + floating-point instructions. Make that the default for this target. */ + if (TARGET_ABI_UNICOSMK) + alpha_fprm = ALPHA_FPRM_DYN; + else + alpha_fprm = ALPHA_FPRM_NORM; + alpha_tp = ALPHA_TP_PROG; alpha_fptm = ALPHA_FPTM_N; + /* We cannot use su and sui qualifiers for conversion instructions on + Unicos/Mk. I'm not sure if this is due to assembler or hardware + limitations. Right now, we issue a warning if -mieee is specified + and then ignore it; eventually, we should either get it right or + disable the option altogether. */ + if (TARGET_IEEE) { ! if (TARGET_ABI_UNICOSMK) ! warning ("-mieee not supported on Unicos/Mk"); ! else ! { ! alpha_tp = ALPHA_TP_INSN; ! alpha_fptm = ALPHA_FPTM_SU; ! } } if (TARGET_IEEE_WITH_INEXACT) { ! if (TARGET_ABI_UNICOSMK) ! warning ("-mieee-with-inexact not supported on Unicos/Mk"); ! else ! { ! alpha_tp = ALPHA_TP_INSN; ! alpha_fptm = ALPHA_FPTM_SUI; ! } } if (alpha_tp_string) *************** override_options () *** 261,267 **** error ("bad value `%s' for -mcpu switch", alpha_tune_string); } ! /* Do some sanity checks on the above options. */ if ((alpha_fptm == ALPHA_FPTM_SU || alpha_fptm == ALPHA_FPTM_SUI) && alpha_tp != ALPHA_TP_INSN && ! TARGET_CPU_EV6) --- 383,395 ---- error ("bad value `%s' for -mcpu switch", alpha_tune_string); } ! /* Do some sanity checks on the above options. */ ! ! if (TARGET_ABI_UNICOSMK && alpha_fptm != ALPHA_FPTM_N) ! { ! warning ("trap mode not supported on Unicos/Mk"); ! alpha_fptm = ALPHA_FPTM_N; ! } if ((alpha_fptm == ALPHA_FPTM_SU || alpha_fptm == ALPHA_FPTM_SUI) && alpha_tp != ALPHA_TP_INSN && ! TARGET_CPU_EV6) *************** override_options () *** 310,316 **** { { 3, 30, -1 }, /* ev4 -- Bcache is a guess */ { 2, 12, 38 }, /* ev5 -- Bcache from PC164 LMbench numbers */ ! { 3, 12, 30 }, /* ev6 -- Bcache from DS20 LMbench. */ }; lat = alpha_mlat_string[1] - '0'; --- 438,444 ---- { { 3, 30, -1 }, /* ev4 -- Bcache is a guess */ { 2, 12, 38 }, /* ev5 -- Bcache from PC164 LMbench numbers */ ! { 3, 12, 30 }, /* ev6 -- Bcache from DS20 LMbench. */ }; lat = alpha_mlat_string[1] - '0'; *************** override_options () *** 342,350 **** if (!g_switch_set) g_switch_value = 8; /* Align labels and loops for optimal branching. */ /* ??? Kludge these by not doing anything if we don't optimize and also if ! we are writing ECOFF symbols to work around a bug in DEC's assembler. */ if (optimize > 0 && write_symbols != SDB_DEBUG) { if (align_loops <= 0) --- 470,484 ---- if (!g_switch_set) g_switch_value = 8; + /* Infer TARGET_SMALL_DATA from -fpic/-fPIC. */ + if (flag_pic == 1) + target_flags |= MASK_SMALL_DATA; + else if (flag_pic == 2) + target_flags &= ~MASK_SMALL_DATA; + /* Align labels and loops for optimal branching. */ /* ??? Kludge these by not doing anything if we don't optimize and also if ! we are writing ECOFF symbols to work around a bug in DEC's assembler. */ if (optimize > 0 && write_symbols != SDB_DEBUG) { if (align_loops <= 0) *************** override_options () *** 358,367 **** --- 492,505 ---- /* Acquire a unique set number for our register saves and restores. */ alpha_sr_alias_set = new_alias_set (); + /* Register variables and functions with the garbage collector. */ + + #if TARGET_ABI_UNICOSMK /* Set up function hooks. */ init_machine_status = alpha_init_machine_status; mark_machine_status = alpha_mark_machine_status; free_machine_status = alpha_free_machine_status; + #endif } /* Returns 1 if VALUE is a mask that contains full bytes of zero or ones. */ *************** some_operand (op, mode) *** 632,638 **** switch (GET_CODE (op)) { case REG: case MEM: case CONST_DOUBLE: case CONST_INT: case LABEL_REF: ! case SYMBOL_REF: case CONST: return 1; case SUBREG: --- 770,776 ---- switch (GET_CODE (op)) { case REG: case MEM: case CONST_DOUBLE: case CONST_INT: case LABEL_REF: ! case SYMBOL_REF: case CONST: case HIGH: return 1; case SUBREG: *************** input_operand (op, mode) *** 679,687 **** --- 817,839 ---- case LABEL_REF: case SYMBOL_REF: case CONST: + if (TARGET_EXPLICIT_RELOCS) + { + /* We don't split symbolic operands into something unintelligable + until after reload, but we do not wish non-small, non-global + symbolic operands to be reconstructed from their high/lo_sum + form. */ + return (small_symbolic_operand (op, mode) + || global_symbolic_operand (op, mode)); + } + /* This handles both the Windows/NT and OSF cases. */ return mode == ptr_mode || mode == DImode; + case HIGH: + return (TARGET_EXPLICIT_RELOCS + && local_symbolic_operand (XEXP (op, 0), mode)); + case REG: case ADDRESSOF: return 1; *************** input_operand (op, mode) *** 689,695 **** case SUBREG: if (register_operand (op, mode)) return 1; ! /* ... fall through ... */ case MEM: return ((TARGET_BWX || (mode != HImode && mode != QImode)) && general_operand (op, mode)); --- 841,847 ---- case SUBREG: if (register_operand (op, mode)) return 1; ! /* ... fall through ... */ case MEM: return ((TARGET_BWX || (mode != HImode && mode != QImode)) && general_operand (op, mode)); *************** input_operand (op, mode) *** 711,727 **** } /* Return 1 if OP is a SYMBOL_REF for a function known to be in this ! file. */ int current_file_function_operand (op, mode) rtx op; enum machine_mode mode ATTRIBUTE_UNUSED; { ! return (GET_CODE (op) == SYMBOL_REF ! && ! profile_flag && ! profile_block_flag ! && (SYMBOL_REF_FLAG (op) ! || op == XEXP (DECL_RTL (current_function_decl), 0))); } /* Return 1 if OP is a valid operand for the MEM of a CALL insn. */ --- 863,1011 ---- } /* Return 1 if OP is a SYMBOL_REF for a function known to be in this ! file, and in the same section as the current function. */ int current_file_function_operand (op, mode) rtx op; enum machine_mode mode ATTRIBUTE_UNUSED; { ! if (GET_CODE (op) != SYMBOL_REF) ! return 0; ! ! /* Easy test for recursion. */ ! if (op == XEXP (DECL_RTL (current_function_decl), 0)) ! return 1; ! ! /* Otherwise, we need the DECL for the SYMBOL_REF, which we can't get. ! So SYMBOL_REF_FLAG has been declared to imply that the function is ! in the default text section. So we must also check that the current ! function is also in the text section. */ ! if (SYMBOL_REF_FLAG (op) && decl_in_text_section (current_function_decl)) ! return 1; ! ! return 0; ! } ! ! /* Return 1 if OP is a SYMBOL_REF for which we can make a call via bsr. */ ! ! int ! direct_call_operand (op, mode) ! rtx op; ! enum machine_mode mode; ! { ! /* Must be defined in this file. */ ! if (! current_file_function_operand (op, mode)) ! return 0; ! ! /* If profiling is implemented via linker tricks, we can't jump ! to the nogp alternate entry point. */ ! /* ??? TARGET_PROFILING_NEEDS_GP isn't really the right test, ! but is approximately correct for the OSF ABIs. Don't know ! what to do for VMS, NT, or UMK. */ ! if (! TARGET_PROFILING_NEEDS_GP ! && ! current_function_profile) ! return 0; ! ! return 1; ! } ! ! /* Return true if OP is a LABEL_REF, or SYMBOL_REF or CONST referencing ! a variable known to be defined in this file. */ ! ! static bool ! local_symbol_p (op) ! rtx op; ! { ! const char *str = XSTR (op, 0); ! ! /* ??? SYMBOL_REF_FLAG is set for local function symbols, but we ! run into problems with the rtl inliner in that the symbol was ! once external, but is local after inlining, which results in ! unrecognizable insns. */ ! ! return (CONSTANT_POOL_ADDRESS_P (op) ! /* If @, then ENCODE_SECTION_INFO sez it's local. */ ! || str[0] == '@' ! /* If *$, then ASM_GENERATE_INTERNAL_LABEL sez it's local. */ ! || (str[0] == '*' && str[1] == '$')); ! } ! ! int ! local_symbolic_operand (op, mode) ! rtx op; ! enum machine_mode mode; ! { ! if (mode != VOIDmode && GET_MODE (op) != VOIDmode && mode != GET_MODE (op)) ! return 0; ! ! if (GET_CODE (op) == LABEL_REF) ! return 1; ! ! if (GET_CODE (op) == CONST ! && GET_CODE (XEXP (op, 0)) == PLUS ! && GET_CODE (XEXP (XEXP (op, 0), 1)) == CONST_INT) ! op = XEXP (XEXP (op, 0), 0); ! ! if (GET_CODE (op) != SYMBOL_REF) ! return 0; ! ! return local_symbol_p (op); ! } ! ! /* Return true if OP is a SYMBOL_REF or CONST referencing a variable ! known to be defined in this file in the small data area. */ ! ! int ! small_symbolic_operand (op, mode) ! rtx op; ! enum machine_mode mode ATTRIBUTE_UNUSED; ! { ! const char *str; ! ! if (! TARGET_SMALL_DATA) ! return 0; ! ! if (mode != VOIDmode && GET_MODE (op) != VOIDmode && mode != GET_MODE (op)) ! return 0; ! ! if (GET_CODE (op) == CONST ! && GET_CODE (XEXP (op, 0)) == PLUS ! && GET_CODE (XEXP (XEXP (op, 0), 1)) == CONST_INT) ! op = XEXP (XEXP (op, 0), 0); ! ! if (GET_CODE (op) != SYMBOL_REF) ! return 0; ! ! if (CONSTANT_POOL_ADDRESS_P (op)) ! return GET_MODE_SIZE (get_pool_mode (op)) <= (unsigned) g_switch_value; ! else ! { ! str = XSTR (op, 0); ! return str[0] == '@' && str[1] == 's'; ! } ! } ! ! /* Return true if OP is a SYMBOL_REF or CONST referencing a variable ! not known (or known not) to be defined in this file. */ ! ! int ! global_symbolic_operand (op, mode) ! rtx op; ! enum machine_mode mode; ! { ! if (mode != VOIDmode && GET_MODE (op) != VOIDmode && mode != GET_MODE (op)) ! return 0; ! ! if (GET_CODE (op) == CONST ! && GET_CODE (XEXP (op, 0)) == PLUS ! && GET_CODE (XEXP (XEXP (op, 0), 1)) == CONST_INT) ! op = XEXP (XEXP (op, 0), 0); ! ! if (GET_CODE (op) != SYMBOL_REF) ! return 0; ! ! return ! local_symbol_p (op); } /* Return 1 if OP is a valid operand for the MEM of a CALL insn. */ *************** call_operand (op, mode) *** 734,742 **** if (mode != Pmode) return 0; ! return (GET_CODE (op) == SYMBOL_REF ! || (GET_CODE (op) == REG ! && (TARGET_OPEN_VMS || TARGET_WINDOWS_NT || REGNO (op) == 27))); } /* Return 1 if OP is a valid Alpha comparison operator. Here we know which --- 1018,1061 ---- if (mode != Pmode) return 0; ! if (GET_CODE (op) == REG) ! { ! if (TARGET_ABI_OSF) ! { ! /* Disallow virtual registers to cope with pathalogical test cases ! such as compile/930117-1.c in which the virtual reg decomposes ! to the frame pointer. Which is a hard reg that is not $27. */ ! return (REGNO (op) == 27 || REGNO (op) > LAST_VIRTUAL_REGISTER); ! } ! else ! return 1; ! } ! if (TARGET_ABI_UNICOSMK) ! return 0; ! if (GET_CODE (op) == SYMBOL_REF) ! return 1; ! ! return 0; ! } ! ! /* Returns 1 if OP is a symbolic operand, i.e. a symbol_ref or a label_ref, ! possibly with an offset. */ ! ! int ! symbolic_operand (op, mode) ! register rtx op; ! enum machine_mode mode; ! { ! if (mode != VOIDmode && GET_MODE (op) != VOIDmode && mode != GET_MODE (op)) ! return 0; ! if (GET_CODE (op) == SYMBOL_REF || GET_CODE (op) == LABEL_REF) ! return 1; ! if (GET_CODE (op) == CONST ! && GET_CODE (XEXP (op,0)) == PLUS ! && GET_CODE (XEXP (XEXP (op,0), 0)) == SYMBOL_REF ! && GET_CODE (XEXP (XEXP (op,0), 1)) == CONST_INT) ! return 1; ! return 0; } /* Return 1 if OP is a valid Alpha comparison operator. Here we know which *************** reg_no_subreg_operand (op, mode) *** 1024,1035 **** register rtx op; enum machine_mode mode; { ! if (GET_CODE (op) == SUBREG) return 0; return register_operand (op, mode); } ! /* Recognize a addition operation that includes a constant. Used to convince reload to canonize (plus (plus reg c1) c2) during register elimination. */ --- 1343,1354 ---- register rtx op; enum machine_mode mode; { ! if (GET_CODE (op) != REG) return 0; return register_operand (op, mode); } ! /* Recognize an addition operation that includes a constant. Used to convince reload to canonize (plus (plus reg c1) c2) during register elimination. */ *************** addition_operation (op, mode) *** 1048,1063 **** return 0; } /* Return 1 if this function can directly return via $26. */ int direct_return () { ! return (! TARGET_OPEN_VMS && reload_completed && alpha_sa_size () == 0 && get_frame_size () == 0 && current_function_outgoing_args_size == 0 && current_function_pretend_args_size == 0); } /* REF is an alignable memory location. Place an aligned SImode reference into *PALIGNED_MEM and the number of bits to shift into --- 1367,1985 ---- return 0; } + /* Implements CONST_OK_FOR_LETTER_P. Return true if the value matches + the range defined for C in [I-P]. */ + + bool + alpha_const_ok_for_letter_p (value, c) + HOST_WIDE_INT value; + int c; + { + switch (c) + { + case 'I': + /* An unsigned 8 bit constant. */ + return (unsigned HOST_WIDE_INT) value < 0x100; + case 'J': + /* The constant zero. */ + return value == 0; + case 'K': + /* A signed 16 bit constant. */ + return (unsigned HOST_WIDE_INT) (value + 0x8000) < 0x10000; + case 'L': + /* A shifted signed 16 bit constant appropriate for LDAH. */ + return ((value & 0xffff) == 0 + && ((value) >> 31 == -1 || value >> 31 == 0)); + case 'M': + /* A constant that can be AND'ed with using a ZAP insn. */ + return zap_mask (value); + case 'N': + /* A complemented unsigned 8 bit constant. */ + return (unsigned HOST_WIDE_INT) (~ value) < 0x100; + case 'O': + /* A negated unsigned 8 bit constant. */ + return (unsigned HOST_WIDE_INT) (- value) < 0x100; + case 'P': + /* The constant 1, 2 or 3. */ + return value == 1 || value == 2 || value == 3; + + default: + return false; + } + } + + /* Implements CONST_DOUBLE_OK_FOR_LETTER_P. Return true if VALUE + matches for C in [GH]. */ + + bool + alpha_const_double_ok_for_letter_p (value, c) + rtx value; + int c; + { + switch (c) + { + case 'G': + /* The floating point zero constant. */ + return (GET_MODE_CLASS (GET_MODE (value)) == MODE_FLOAT + && value == CONST0_RTX (GET_MODE (value))); + + case 'H': + /* A valid operand of a ZAP insn. */ + return (GET_MODE (value) == VOIDmode + && zap_mask (CONST_DOUBLE_LOW (value)) + && zap_mask (CONST_DOUBLE_HIGH (value))); + + default: + return false; + } + } + + /* Implements CONST_DOUBLE_OK_FOR_LETTER_P. Return true if VALUE + matches for C. */ + + bool + alpha_extra_constraint (value, c) + rtx value; + int c; + { + switch (c) + { + case 'Q': + return normal_memory_operand (value, VOIDmode); + case 'R': + return direct_call_operand (value, Pmode); + case 'S': + return (GET_CODE (value) == CONST_INT + && (unsigned HOST_WIDE_INT) INTVAL (value) < 64); + case 'T': + return GET_CODE (value) == HIGH; + case 'U': + return TARGET_ABI_UNICOSMK && symbolic_operand (value, VOIDmode); + + default: + return false; + } + } + /* Return 1 if this function can directly return via $26. */ int direct_return () { ! return (! TARGET_ABI_OPEN_VMS && ! TARGET_ABI_UNICOSMK ! && reload_completed ! && alpha_sa_size () == 0 && get_frame_size () == 0 && current_function_outgoing_args_size == 0 && current_function_pretend_args_size == 0); } + + /* Return the ADDR_VEC associated with a tablejump insn. */ + + rtx + alpha_tablejump_addr_vec (insn) + rtx insn; + { + rtx tmp; + + tmp = JUMP_LABEL (insn); + if (!tmp) + return NULL_RTX; + tmp = NEXT_INSN (tmp); + if (!tmp) + return NULL_RTX; + if (GET_CODE (tmp) == JUMP_INSN + && GET_CODE (PATTERN (tmp)) == ADDR_DIFF_VEC) + return PATTERN (tmp); + return NULL_RTX; + } + + /* Return the label of the predicted edge, or CONST0_RTX if we don't know. */ + + rtx + alpha_tablejump_best_label (insn) + rtx insn; + { + rtx jump_table = alpha_tablejump_addr_vec (insn); + rtx best_label = NULL_RTX; + + /* ??? Once the CFG doesn't keep getting completely rebuilt, look + there for edge frequency counts from profile data. */ + + if (jump_table) + { + int n_labels = XVECLEN (jump_table, 1); + int best_count = -1; + int i, j; + + for (i = 0; i < n_labels; i++) + { + int count = 1; + + for (j = i + 1; j < n_labels; j++) + if (XEXP (XVECEXP (jump_table, 1, i), 0) + == XEXP (XVECEXP (jump_table, 1, j), 0)) + count++; + + if (count > best_count) + best_count = count, best_label = XVECEXP (jump_table, 1, i); + } + } + + return best_label ? best_label : const0_rtx; + } + + /* Return true if the function DECL will be placed in the default text + section. */ + /* ??? Ideally we'd be able to always move from a SYMBOL_REF back to the + decl, as that would allow us to determine if two functions are in the + same section, which is what we really want to know. */ + + static bool + decl_in_text_section (decl) + tree decl; + { + return (DECL_SECTION_NAME (decl) == NULL_TREE + && ! (flag_function_sections + || (targetm.have_named_sections + && DECL_ONE_ONLY (decl)))); + } + + /* If we are referencing a function that is static, make the SYMBOL_REF + special. We use this to see indicate we can branch to this function + without setting PV or restoring GP. + + If this is a variable that is known to be defined locally, add "@v" + to the name. If in addition the variable is to go in .sdata/.sbss, + then add "@s" instead. */ + + void + alpha_encode_section_info (decl) + tree decl; + { + const char *symbol_str; + bool is_local, is_small; + + if (TREE_CODE (decl) == FUNCTION_DECL) + { + /* We mark public functions once they are emitted; otherwise we + don't know that they exist in this unit of translation. */ + if (TREE_PUBLIC (decl)) + return; + /* Do not mark functions that are not in .text; otherwise we + don't know that they are near enough for a direct branch. */ + if (! decl_in_text_section (decl)) + return; + + SYMBOL_REF_FLAG (XEXP (DECL_RTL (decl), 0)) = 1; + return; + } + + /* Early out if we're not going to do anything with this data. */ + if (! TARGET_EXPLICIT_RELOCS) + return; + + /* Careful not to prod global register variables. */ + if (TREE_CODE (decl) != VAR_DECL + || GET_CODE (DECL_RTL (decl)) != MEM + || GET_CODE (XEXP (DECL_RTL (decl), 0)) != SYMBOL_REF) + return; + + symbol_str = XSTR (XEXP (DECL_RTL (decl), 0), 0); + + /* A variable is considered "local" if it is defined in this module. */ + + if (DECL_EXTERNAL (decl)) + is_local = false; + /* Linkonce and weak data is never local. */ + else if (DECL_ONE_ONLY (decl) || DECL_WEAK (decl)) + is_local = false; + else if (! TREE_PUBLIC (decl)) + is_local = true; + /* If PIC, then assume that any global name can be overridden by + symbols resolved from other modules. */ + else if (flag_pic) + is_local = false; + /* Uninitialized COMMON variable may be unified with symbols + resolved from other modules. */ + else if (DECL_COMMON (decl) + && (DECL_INITIAL (decl) == NULL + || DECL_INITIAL (decl) == error_mark_node)) + is_local = false; + /* Otherwise we're left with initialized (or non-common) global data + which is of necessity defined locally. */ + else + is_local = true; + + /* Determine if DECL will wind up in .sdata/.sbss. */ + + is_small = false; + if (DECL_SECTION_NAME (decl)) + { + const char *section = TREE_STRING_POINTER (DECL_SECTION_NAME (decl)); + if (strcmp (section, ".sdata") == 0 + || strcmp (section, ".sbss") == 0) + is_small = true; + } + else + { + HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (decl)); + + /* If the variable has already been defined in the output file, then it + is too late to put it in sdata if it wasn't put there in the first + place. The test is here rather than above, because if it is already + in sdata, then it can stay there. */ + + if (TREE_ASM_WRITTEN (decl)) + ; + + /* If this is an incomplete type with size 0, then we can't put it in + sdata because it might be too big when completed. */ + else if (size > 0 && size <= g_switch_value) + is_small = true; + } + + /* Finally, encode this into the symbol string. */ + if (is_local) + { + const char *string; + char *newstr; + size_t len; + + if (symbol_str[0] == '@') + { + if (symbol_str[1] == (is_small ? 's' : 'v')) + return; + symbol_str += 2; + } + + len = strlen (symbol_str) + 1; + newstr = alloca (len + 2); + + newstr[0] = '@'; + newstr[1] = (is_small ? 's' : 'v'); + memcpy (newstr + 2, symbol_str, len); + + string = ggc_alloc_string (newstr, len + 2 - 1); + XSTR (XEXP (DECL_RTL (decl), 0), 0) = string; + } + else if (symbol_str[0] == '@') + abort (); + } + + /* legitimate_address_p recognizes an RTL expression that is a valid + memory address for an instruction. The MODE argument is the + machine mode for the MEM expression that wants to use this address. + + For Alpha, we have either a constant address or the sum of a + register and a constant address, or just a register. For DImode, + any of those forms can be surrounded with an AND that clear the + low-order three bits; this is an "unaligned" access. */ + + bool + alpha_legitimate_address_p (mode, x, strict) + enum machine_mode mode; + rtx x; + int strict; + { + /* If this is an ldq_u type address, discard the outer AND. */ + if (mode == DImode + && GET_CODE (x) == AND + && GET_CODE (XEXP (x, 1)) == CONST_INT + && INTVAL (XEXP (x, 1)) == -8) + x = XEXP (x, 0); + + /* Discard non-paradoxical subregs. */ + if (GET_CODE (x) == SUBREG + && (GET_MODE_SIZE (GET_MODE (x)) + < GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))))) + x = SUBREG_REG (x); + + /* Unadorned general registers are valid. */ + if (REG_P (x) + && (strict + ? STRICT_REG_OK_FOR_BASE_P (x) + : NONSTRICT_REG_OK_FOR_BASE_P (x))) + return true; + + /* Constant addresses (i.e. +/- 32k) are valid. */ + if (CONSTANT_ADDRESS_P (x)) + return true; + + /* Register plus a small constant offset is valid. */ + if (GET_CODE (x) == PLUS) + { + rtx ofs = XEXP (x, 1); + x = XEXP (x, 0); + + /* Discard non-paradoxical subregs. */ + if (GET_CODE (x) == SUBREG + && (GET_MODE_SIZE (GET_MODE (x)) + < GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))))) + x = SUBREG_REG (x); + + if (REG_P (x)) + { + if (! strict + && NONSTRICT_REG_OK_FP_BASE_P (x) + && GET_CODE (ofs) == CONST_INT) + return true; + if ((strict + ? STRICT_REG_OK_FOR_BASE_P (x) + : NONSTRICT_REG_OK_FOR_BASE_P (x)) + && CONSTANT_ADDRESS_P (ofs)) + return true; + } + else if (GET_CODE (x) == ADDRESSOF + && GET_CODE (ofs) == CONST_INT) + return true; + } + + /* If we're managing explicit relocations, LO_SUM is valid, as + are small data symbols. */ + else if (TARGET_EXPLICIT_RELOCS) + { + if (small_symbolic_operand (x, Pmode)) + return true; + + if (GET_CODE (x) == LO_SUM) + { + rtx ofs = XEXP (x, 1); + x = XEXP (x, 0); + + /* Discard non-paradoxical subregs. */ + if (GET_CODE (x) == SUBREG + && (GET_MODE_SIZE (GET_MODE (x)) + < GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))))) + x = SUBREG_REG (x); + + /* Must have a valid base register. */ + if (! (REG_P (x) + && (strict + ? STRICT_REG_OK_FOR_BASE_P (x) + : NONSTRICT_REG_OK_FOR_BASE_P (x)))) + return false; + + /* The symbol must be local. */ + if (local_symbolic_operand (ofs, Pmode)) + return true; + } + } + + return false; + } + + /* Try machine-dependent ways of modifying an illegitimate address + to be legitimate. If we find one, return the new, valid address. */ + + rtx + alpha_legitimize_address (x, scratch, mode) + rtx x; + rtx scratch; + enum machine_mode mode ATTRIBUTE_UNUSED; + { + HOST_WIDE_INT addend; + + /* If the address is (plus reg const_int) and the CONST_INT is not a + valid offset, compute the high part of the constant and add it to + the register. Then our address is (plus temp low-part-const). */ + if (GET_CODE (x) == PLUS + && GET_CODE (XEXP (x, 0)) == REG + && GET_CODE (XEXP (x, 1)) == CONST_INT + && ! CONSTANT_ADDRESS_P (XEXP (x, 1))) + { + addend = INTVAL (XEXP (x, 1)); + x = XEXP (x, 0); + goto split_addend; + } + + /* If the address is (const (plus FOO const_int)), find the low-order + part of the CONST_INT. Then load FOO plus any high-order part of the + CONST_INT into a register. Our address is (plus reg low-part-const). + This is done to reduce the number of GOT entries. */ + if (!no_new_pseudos + && GET_CODE (x) == CONST + && GET_CODE (XEXP (x, 0)) == PLUS + && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT) + { + addend = INTVAL (XEXP (XEXP (x, 0), 1)); + x = force_reg (Pmode, XEXP (XEXP (x, 0), 0)); + goto split_addend; + } + + /* If we have a (plus reg const), emit the load as in (2), then add + the two registers, and finally generate (plus reg low-part-const) as + our address. */ + if (!no_new_pseudos + && GET_CODE (x) == PLUS + && GET_CODE (XEXP (x, 0)) == REG + && GET_CODE (XEXP (x, 1)) == CONST + && GET_CODE (XEXP (XEXP (x, 1), 0)) == PLUS + && GET_CODE (XEXP (XEXP (XEXP (x, 1), 0), 1)) == CONST_INT) + { + addend = INTVAL (XEXP (XEXP (XEXP (x, 1), 0), 1)); + x = expand_simple_binop (Pmode, PLUS, XEXP (x, 0), + XEXP (XEXP (XEXP (x, 1), 0), 0), + NULL_RTX, 1, OPTAB_LIB_WIDEN); + goto split_addend; + } + + /* If this is a local symbol, split the address into HIGH/LO_SUM parts. */ + if (TARGET_EXPLICIT_RELOCS && symbolic_operand (x, Pmode)) + { + if (local_symbolic_operand (x, Pmode)) + { + if (small_symbolic_operand (x, Pmode)) + return x; + else + { + if (!no_new_pseudos) + scratch = gen_reg_rtx (Pmode); + emit_insn (gen_rtx_SET (VOIDmode, scratch, + gen_rtx_HIGH (Pmode, x))); + return gen_rtx_LO_SUM (Pmode, scratch, x); + } + } + } + + return NULL; + + split_addend: + { + HOST_WIDE_INT low, high; + + low = ((addend & 0xffff) ^ 0x8000) - 0x8000; + addend -= low; + high = ((addend & 0xffffffff) ^ 0x80000000) - 0x80000000; + addend -= high; + + if (addend) + x = expand_simple_binop (Pmode, PLUS, x, GEN_INT (addend), + (no_new_pseudos ? scratch : NULL_RTX), + 1, OPTAB_LIB_WIDEN); + if (high) + x = expand_simple_binop (Pmode, PLUS, x, GEN_INT (high), + (no_new_pseudos ? scratch : NULL_RTX), + 1, OPTAB_LIB_WIDEN); + + return plus_constant (x, low); + } + } + + /* For TARGET_EXPLICIT_RELOCS, we don't obfuscate a SYMBOL_REF to a + small symbolic operand until after reload. At which point we need + to replace (mem (symbol_ref)) with (mem (lo_sum $29 symbol_ref)) + so that sched2 has the proper dependency information. */ + + int + some_small_symbolic_operand (x, mode) + rtx x; + enum machine_mode mode ATTRIBUTE_UNUSED; + { + return for_each_rtx (&x, some_small_symbolic_operand_1, NULL); + } + + static int + some_small_symbolic_operand_1 (px, data) + rtx *px; + void *data ATTRIBUTE_UNUSED; + { + rtx x = *px; + + /* Don't re-split. */ + if (GET_CODE (x) == LO_SUM) + return -1; + + return small_symbolic_operand (x, Pmode) != 0; + } + + rtx + split_small_symbolic_operand (x) + rtx x; + { + x = copy_insn (x); + for_each_rtx (&x, split_small_symbolic_operand_1, NULL); + return x; + } + + static int + split_small_symbolic_operand_1 (px, data) + rtx *px; + void *data ATTRIBUTE_UNUSED; + { + rtx x = *px; + + /* Don't re-split. */ + if (GET_CODE (x) == LO_SUM) + return -1; + + if (small_symbolic_operand (x, Pmode)) + { + x = gen_rtx_LO_SUM (Pmode, pic_offset_table_rtx, x); + *px = x; + return -1; + } + + return 0; + } + + /* Try a machine-dependent way of reloading an illegitimate address + operand. If we find one, push the reload and return the new rtx. */ + + rtx + alpha_legitimize_reload_address (x, mode, opnum, type, ind_levels) + rtx x; + enum machine_mode mode ATTRIBUTE_UNUSED; + int opnum; + int type; + int ind_levels ATTRIBUTE_UNUSED; + { + /* 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, + BASE_REG_CLASS, GET_MODE (x), VOIDmode, 0, 0, + opnum, type); + return x; + } + + /* We wish to handle large displacements off a base register by + splitting the addend across an ldah and the mem insn. This + cuts number of extra insns needed from 3 to 1. */ + if (GET_CODE (x) == PLUS + && GET_CODE (XEXP (x, 0)) == REG + && REGNO (XEXP (x, 0)) < FIRST_PSEUDO_REGISTER + && REGNO_OK_FOR_BASE_P (REGNO (XEXP (x, 0))) + && GET_CODE (XEXP (x, 1)) == CONST_INT) + { + HOST_WIDE_INT val = INTVAL (XEXP (x, 1)); + HOST_WIDE_INT low = ((val & 0xffff) ^ 0x8000) - 0x8000; + HOST_WIDE_INT high + = (((val - low) & 0xffffffff) ^ 0x80000000) - 0x80000000; + + /* Check for 32-bit overflow. */ + if (high + low != val) + return NULL_RTX; + + /* Reload the high part into a base reg; leave the low part + in the mem directly. */ + x = gen_rtx_PLUS (GET_MODE (x), + gen_rtx_PLUS (GET_MODE (x), XEXP (x, 0), + GEN_INT (high)), + GEN_INT (low)); + + push_reload (XEXP (x, 0), NULL_RTX, &XEXP (x, 0), NULL, + BASE_REG_CLASS, GET_MODE (x), VOIDmode, 0, 0, + opnum, type); + return x; + } + + return NULL_RTX; + } /* REF is an alignable memory location. Place an aligned SImode reference into *PALIGNED_MEM and the number of bits to shift into *************** get_aligned_mem (ref, paligned_mem, pbit *** 1091,1104 **** if (GET_CODE (base) == PLUS) offset += INTVAL (XEXP (base, 1)), base = XEXP (base, 0); ! *paligned_mem = gen_rtx_MEM (SImode, plus_constant (base, offset & ~3)); ! MEM_COPY_ATTRIBUTES (*paligned_mem, ref); ! ! /* Sadly, we cannot use alias sets here because we may overlap other ! data in a different alias set. */ ! MEM_ALIAS_SET (*paligned_mem) = 0; ! *pbitnum = GEN_INT ((offset & 3) * 8); } /* Similar, but just get the address. Handle the two reload cases. --- 2013,2026 ---- if (GET_CODE (base) == PLUS) offset += INTVAL (XEXP (base, 1)), base = XEXP (base, 0); ! *paligned_mem ! = widen_memory_access (ref, SImode, (offset & ~3) - offset); ! if (WORDS_BIG_ENDIAN) ! *pbitnum = GEN_INT (32 - (GET_MODE_BITSIZE (GET_MODE (ref)) ! + (offset & 3) * 8)); ! else ! *pbitnum = GEN_INT ((offset & 3) * 8); } /* Similar, but just get the address. Handle the two reload cases. *************** get_unaligned_address (ref, extra_offset *** 1134,1139 **** --- 2056,2094 ---- return plus_constant (base, offset + extra_offset); } + /* On the Alpha, all (non-symbolic) constants except zero go into + a floating-point register via memory. Note that we cannot + return anything that is not a subset of CLASS, and that some + symbolic constants cannot be dropped to memory. */ + + enum reg_class + alpha_preferred_reload_class(x, class) + rtx x; + enum reg_class class; + { + /* Zero is present in any register class. */ + if (x == CONST0_RTX (GET_MODE (x))) + return class; + + /* These sorts of constants we can easily drop to memory. */ + if (GET_CODE (x) == CONST_INT || GET_CODE (x) == CONST_DOUBLE) + { + if (class == FLOAT_REGS) + return NO_REGS; + if (class == ALL_REGS) + return GENERAL_REGS; + return class; + } + + /* All other kinds of constants should not (and in the case of HIGH + cannot) be dropped to memory -- instead we use a GENERAL_REGS + secondary reload. */ + if (CONSTANT_P (x)) + return (class == ALL_REGS ? GENERAL_REGS : class); + + return class; + } + /* Loading and storing HImode or QImode values to and from memory usually requires a scratch register. The exceptions are loading QImode and HImode from an aligned address to a general register *************** secondary_reload_class (class, mode, x, *** 1176,1182 **** > GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))))) return GENERAL_REGS; ! if (in && INTEGRAL_MODE_P (mode) && ! general_operand (x, mode)) return GENERAL_REGS; } --- 2131,2138 ---- > GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))))) return GENERAL_REGS; ! if (in && INTEGRAL_MODE_P (mode) ! && ! (memory_operand (x, mode) || x == const0_rtx)) return GENERAL_REGS; } *************** alpha_set_memflags_1 (x, in_struct_p, vo *** 1223,1229 **** are the only thing we would be able to differentiate anyway, there does not seem to be any point in convoluting the early out of the alias check. */ - /* MEM_ALIAS_SET (x) = alias_set; */ break; default: --- 2179,2184 ---- *************** alpha_emit_set_const (target, mode, c, n *** 1273,1287 **** HOST_WIDE_INT c; int n; { ! rtx pat; int i; ! /* Try 1 insn, then 2, then up to N. */ for (i = 1; i <= n; i++) ! if ((pat = alpha_emit_set_const_1 (target, mode, c, i)) != 0) ! return pat; ! return 0; } /* Internal routine for the above to check for N or below insns. */ --- 2228,2266 ---- HOST_WIDE_INT c; int n; { ! rtx result = 0; ! rtx orig_target = target; int i; ! /* If we can't make any pseudos, TARGET is an SImode hard register, we ! can't load this constant in one insn, do this in DImode. */ ! if (no_new_pseudos && mode == SImode ! && GET_CODE (target) == REG && REGNO (target) < FIRST_PSEUDO_REGISTER ! && (result = alpha_emit_set_const_1 (target, mode, c, 1)) == 0) ! { ! target = gen_lowpart (DImode, target); ! mode = DImode; ! } ! ! /* Try 1 insn, then 2, then up to N. */ for (i = 1; i <= n; i++) ! { ! result = alpha_emit_set_const_1 (target, mode, c, i); ! if (result) ! { ! rtx insn = get_last_insn (); ! rtx set = single_set (insn); ! if (! CONSTANT_P (SET_SRC (set))) ! set_unique_reg_note (get_last_insn (), REG_EQUAL, GEN_INT (c)); ! break; ! } ! } ! /* Allow for the case where we changed the mode of TARGET. */ ! if (result == target) ! result = orig_target; ! ! return result; } /* Internal routine for the above to check for N or below insns. */ *************** alpha_emit_set_const_1 (target, mode, c, *** 1297,1318 **** int i, bits; /* Use a pseudo if highly optimizing and still generating RTL. */ rtx subtarget ! = (flag_expensive_optimizations && rtx_equal_function_value_matters ! ? 0 : target); ! rtx temp; ! ! #if HOST_BITS_PER_WIDE_INT == 64 ! /* We are only called for SImode and DImode. If this is SImode, ensure that ! we are sign extended to a full word. This does not make any sense when ! cross-compiling on a narrow machine. */ ! ! if (mode == SImode) ! c = ((c & 0xffffffff) ^ 0x80000000) - 0x80000000; ! #endif /* If this is a sign-extended 32-bit constant, we can do this in at most three insns, so do it if we have enough insns left. We always have ! a sign-extended 32-bit constant when compiling on a narrow machine. */ if (HOST_BITS_PER_WIDE_INT != 64 || c >> 31 == -1 || c >> 31 == 0) --- 2276,2287 ---- int i, bits; /* Use a pseudo if highly optimizing and still generating RTL. */ rtx subtarget ! = (flag_expensive_optimizations && !no_new_pseudos ? 0 : target); ! rtx temp, insn; /* If this is a sign-extended 32-bit constant, we can do this in at most three insns, so do it if we have enough insns left. We always have ! a sign-extended 32-bit constant when compiling on a narrow machine. */ if (HOST_BITS_PER_WIDE_INT != 64 || c >> 31 == -1 || c >> 31 == 0) *************** alpha_emit_set_const_1 (target, mode, c, *** 1349,1360 **** { temp = copy_to_suggested_reg (GEN_INT (high << 16), subtarget, mode); if (extra != 0) ! temp = expand_binop (mode, add_optab, temp, GEN_INT (extra << 16), ! subtarget, 0, OPTAB_WIDEN); ! return expand_binop (mode, add_optab, temp, GEN_INT (low), ! target, 0, OPTAB_WIDEN); } } --- 2318,2345 ---- { temp = copy_to_suggested_reg (GEN_INT (high << 16), subtarget, mode); + /* As of 2002-02-23, addsi3 is only available when not optimizing. + This means that if we go through expand_binop, we'll try to + generate extensions, etc, which will require new pseudos, which + will fail during some split phases. The SImode add patterns + still exist, but are not named. So build the insns by hand. */ + if (extra != 0) ! { ! if (! subtarget) ! subtarget = gen_reg_rtx (mode); ! insn = gen_rtx_PLUS (mode, temp, GEN_INT (extra << 16)); ! insn = gen_rtx_SET (VOIDmode, subtarget, insn); ! emit_insn (insn); ! temp = subtarget; ! } ! if (target == NULL) ! target = gen_reg_rtx (mode); ! insn = gen_rtx_PLUS (mode, temp, GEN_INT (low)); ! insn = gen_rtx_SET (VOIDmode, target, insn); ! emit_insn (insn); ! return target; } } *************** alpha_emit_set_const_1 (target, mode, c, *** 1363,1370 **** we can't make pseudos, we can't do anything since the expand_binop and expand_unop calls will widen and try to make pseudos. */ ! if (n == 1 ! || (mode == SImode && ! rtx_equal_function_value_matters)) return 0; /* Next, see if we can load a related constant and then shift and possibly --- 2348,2354 ---- we can't make pseudos, we can't do anything since the expand_binop and expand_unop calls will widen and try to make pseudos. */ ! if (n == 1 || (mode == SImode && no_new_pseudos)) return 0; /* Next, see if we can load a related constant and then shift and possibly *************** alpha_emit_set_const_1 (target, mode, c, *** 1427,1434 **** /* Now try high-order 1 bits. We get that with a sign-extension. But one bit isn't enough here. Be careful to avoid shifting outside ! the mode and to avoid shifting outside the host wide int size. */ ! if ((bits = (MIN (HOST_BITS_PER_WIDE_INT, GET_MODE_SIZE (mode) * 8) - floor_log2 (~ c) - 2)) > 0) for (; bits > 0; bits--) --- 2411,2418 ---- /* Now try high-order 1 bits. We get that with a sign-extension. But one bit isn't enough here. Be careful to avoid shifting outside ! the mode and to avoid shifting outside the host wide int size. */ ! if ((bits = (MIN (HOST_BITS_PER_WIDE_INT, GET_MODE_SIZE (mode) * 8) - floor_log2 (~ c) - 2)) > 0) for (; bits > 0; bits--) *************** alpha_emit_set_long_const (target, c1, c *** 1529,1534 **** --- 2513,2724 ---- return target; } + /* Expand a move instruction; return true if all work is done. + We don't handle non-bwx subword loads here. */ + + bool + alpha_expand_mov (mode, operands) + enum machine_mode mode; + rtx *operands; + { + /* If the output is not a register, the input must be. */ + if (GET_CODE (operands[0]) == MEM + && ! reg_or_0_operand (operands[1], mode)) + operands[1] = force_reg (mode, operands[1]); + + /* Allow legitimize_address to perform some simplifications. */ + if (mode == Pmode && symbolic_operand (operands[1], mode)) + { + rtx tmp; + + /* With RTL inlining, at -O3, rtl is generated, stored, then actually + compiled at the end of compilation. In the meantime, someone can + re-encode-section-info on some symbol changing it e.g. from global + to local-not-small. If this happens, we'd have emitted a plain + load rather than a high+losum load and not recognize the insn. + + So if rtl inlining is in effect, we delay the global/not-global + decision until rest_of_compilation by wrapping it in an + UNSPEC_SYMBOL. */ + if (TARGET_EXPLICIT_RELOCS && flag_inline_functions + && rtx_equal_function_value_matters + && global_symbolic_operand (operands[1], mode)) + { + emit_insn (gen_movdi_er_maybe_g (operands[0], operands[1])); + return true; + } + + tmp = alpha_legitimize_address (operands[1], operands[0], mode); + if (tmp) + { + operands[1] = tmp; + return false; + } + } + + /* Early out for non-constants and valid constants. */ + if (! CONSTANT_P (operands[1]) || input_operand (operands[1], mode)) + return false; + + /* Split large integers. */ + if (GET_CODE (operands[1]) == CONST_INT + || GET_CODE (operands[1]) == CONST_DOUBLE) + { + HOST_WIDE_INT i0, i1; + rtx temp = NULL_RTX; + + if (GET_CODE (operands[1]) == CONST_INT) + { + i0 = INTVAL (operands[1]); + i1 = -(i0 < 0); + } + else if (HOST_BITS_PER_WIDE_INT >= 64) + { + i0 = CONST_DOUBLE_LOW (operands[1]); + i1 = -(i0 < 0); + } + else + { + i0 = CONST_DOUBLE_LOW (operands[1]); + i1 = CONST_DOUBLE_HIGH (operands[1]); + } + + if (HOST_BITS_PER_WIDE_INT >= 64 || i1 == -(i0 < 0)) + temp = alpha_emit_set_const (operands[0], mode, i0, 3); + + if (!temp && TARGET_BUILD_CONSTANTS) + temp = alpha_emit_set_long_const (operands[0], i0, i1); + + if (temp) + { + if (rtx_equal_p (operands[0], temp)) + return true; + operands[1] = temp; + return false; + } + } + + /* Otherwise we've nothing left but to drop the thing to memory. */ + operands[1] = force_const_mem (DImode, operands[1]); + if (reload_in_progress) + { + emit_move_insn (operands[0], XEXP (operands[1], 0)); + operands[1] = copy_rtx (operands[1]); + XEXP (operands[1], 0) = operands[0]; + } + else + operands[1] = validize_mem (operands[1]); + return false; + } + + /* Expand a non-bwx QImode or HImode move instruction; + return true if all work is done. */ + + bool + alpha_expand_mov_nobwx (mode, operands) + enum machine_mode mode; + rtx *operands; + { + /* If the output is not a register, the input must be. */ + if (GET_CODE (operands[0]) == MEM) + operands[1] = force_reg (mode, operands[1]); + + /* Handle four memory cases, unaligned and aligned for either the input + or the output. The only case where we can be called during reload is + for aligned loads; all other cases require temporaries. */ + + if (GET_CODE (operands[1]) == MEM + || (GET_CODE (operands[1]) == SUBREG + && GET_CODE (SUBREG_REG (operands[1])) == MEM) + || (reload_in_progress && GET_CODE (operands[1]) == REG + && REGNO (operands[1]) >= FIRST_PSEUDO_REGISTER) + || (reload_in_progress && GET_CODE (operands[1]) == SUBREG + && GET_CODE (SUBREG_REG (operands[1])) == REG + && REGNO (SUBREG_REG (operands[1])) >= FIRST_PSEUDO_REGISTER)) + { + if (aligned_memory_operand (operands[1], mode)) + { + if (reload_in_progress) + { + emit_insn ((mode == QImode + ? gen_reload_inqi_help + : gen_reload_inhi_help) + (operands[0], operands[1], + gen_rtx_REG (SImode, REGNO (operands[0])))); + } + else + { + rtx aligned_mem, bitnum; + rtx scratch = gen_reg_rtx (SImode); + + get_aligned_mem (operands[1], &aligned_mem, &bitnum); + + emit_insn ((mode == QImode + ? gen_aligned_loadqi + : gen_aligned_loadhi) + (operands[0], aligned_mem, bitnum, scratch)); + } + } + else + { + /* Don't pass these as parameters since that makes the generated + code depend on parameter evaluation order which will cause + bootstrap failures. */ + + rtx temp1 = gen_reg_rtx (DImode); + rtx temp2 = gen_reg_rtx (DImode); + rtx seq = ((mode == QImode + ? gen_unaligned_loadqi + : gen_unaligned_loadhi) + (operands[0], get_unaligned_address (operands[1], 0), + temp1, temp2)); + + alpha_set_memflags (seq, operands[1]); + emit_insn (seq); + } + return true; + } + + if (GET_CODE (operands[0]) == MEM + || (GET_CODE (operands[0]) == SUBREG + && GET_CODE (SUBREG_REG (operands[0])) == MEM) + || (reload_in_progress && GET_CODE (operands[0]) == REG + && REGNO (operands[0]) >= FIRST_PSEUDO_REGISTER) + || (reload_in_progress && GET_CODE (operands[0]) == SUBREG + && GET_CODE (SUBREG_REG (operands[0])) == REG + && REGNO (operands[0]) >= FIRST_PSEUDO_REGISTER)) + { + if (aligned_memory_operand (operands[0], mode)) + { + rtx aligned_mem, bitnum; + rtx temp1 = gen_reg_rtx (SImode); + rtx temp2 = gen_reg_rtx (SImode); + + get_aligned_mem (operands[0], &aligned_mem, &bitnum); + + emit_insn (gen_aligned_store (aligned_mem, operands[1], bitnum, + temp1, temp2)); + } + else + { + rtx temp1 = gen_reg_rtx (DImode); + rtx temp2 = gen_reg_rtx (DImode); + rtx temp3 = gen_reg_rtx (DImode); + rtx seq = ((mode == QImode + ? gen_unaligned_storeqi + : gen_unaligned_storehi) + (get_unaligned_address (operands[0], 0), + operands[1], temp1, temp2, temp3)); + + alpha_set_memflags (seq, operands[0]); + emit_insn (seq); + } + return true; + } + + return false; + } + /* Generate an unsigned DImode to FP conversion. This is the same code optabs would emit if we didn't have TFmode patterns. *************** alpha_emit_floatuns (operands) *** 1595,1602 **** i1 = gen_reg_rtx (DImode); f0 = gen_reg_rtx (mode); ! emit_cmp_and_jump_insns (in, const0_rtx, LT, const0_rtx, DImode, 0, ! 8, neglab); emit_insn (gen_rtx_SET (VOIDmode, out, gen_rtx_FLOAT (mode, in))); emit_jump_insn (gen_jump (donelab)); --- 2785,2791 ---- i1 = gen_reg_rtx (DImode); f0 = gen_reg_rtx (mode); ! emit_cmp_and_jump_insns (in, const0_rtx, LT, const0_rtx, DImode, 0, neglab); emit_insn (gen_rtx_SET (VOIDmode, out, gen_rtx_FLOAT (mode, in))); emit_jump_insn (gen_jump (donelab)); *************** alpha_emit_conditional_branch (code) *** 1635,1655 **** 1 true Convert the compare against the raw return value. */ ! if (code == UNORDERED || code == ORDERED) ! cmp_code = EQ; ! else ! cmp_code = code; op0 = alpha_emit_xfloating_compare (cmp_code, op0, op1); op1 = const0_rtx; alpha_compare.fp_p = 0; - - if (code == UNORDERED) - code = LT; - else if (code == ORDERED) - code = GE; - else - code = GT; } /* The general case: fold the comparison code to the types of compares --- 2824,2852 ---- 1 true Convert the compare against the raw return value. */ ! switch (code) ! { ! case UNORDERED: ! cmp_code = EQ; ! code = LT; ! break; ! case ORDERED: ! cmp_code = EQ; ! code = GE; ! break; ! case NE: ! cmp_code = NE; ! code = NE; ! break; ! default: ! cmp_code = code; ! code = GT; ! break; ! } op0 = alpha_emit_xfloating_compare (cmp_code, op0, op1); op1 = const0_rtx; alpha_compare.fp_p = 0; } /* The general case: fold the comparison code to the types of compares *************** alpha_emit_conditional_branch (code) *** 1664,1670 **** case NE: case ORDERED: ! /* These must be reversed. */ cmp_code = reverse_condition (code), branch_code = EQ; break; --- 2861,2867 ---- case NE: case ORDERED: ! /* These must be reversed. */ cmp_code = reverse_condition (code), branch_code = EQ; break; *************** alpha_emit_conditional_branch (code) *** 1690,1696 **** if (alpha_compare.fp_p) { cmp_mode = DFmode; ! if (flag_fast_math) { /* When we are not as concerned about non-finite values, and we are comparing against zero, we can branch directly. */ --- 2887,2893 ---- if (alpha_compare.fp_p) { cmp_mode = DFmode; ! if (flag_unsafe_math_optimizations) { /* When we are not as concerned about non-finite values, and we are comparing against zero, we can branch directly. */ *************** alpha_emit_setcc (code) *** 1831,1837 **** break; case GE: case GT: case GEU: case GTU: ! /* These are normally need swapping, but for integer zero we have special patterns that recognize swapped operands. */ if (!fp_p && op1 == const0_rtx) break; --- 3028,3034 ---- break; case GE: case GT: case GEU: case GTU: ! /* These normally need swapping, but for integer zero we have special patterns that recognize swapped operands. */ if (!fp_p && op1 == const0_rtx) break; *************** alpha_emit_setcc (code) *** 1876,1882 **** a conditional move (if_then_else CMP ...). If both of the operands that set cc0 are non-zero we must emit an insn to perform the compare (it can't be done within ! the conditional move). */ rtx alpha_emit_conditional_move (cmp, mode) rtx cmp; --- 3073,3079 ---- a conditional move (if_then_else CMP ...). If both of the operands that set cc0 are non-zero we must emit an insn to perform the compare (it can't be done within ! the conditional move). */ rtx alpha_emit_conditional_move (cmp, mode) rtx cmp; *************** alpha_emit_conditional_move (cmp, mode) *** 1891,1897 **** = (GET_MODE (op0) == VOIDmode ? DImode : GET_MODE (op0)); enum machine_mode cmp_op_mode = fp_p ? DFmode : DImode; enum machine_mode cmov_mode = VOIDmode; ! int local_fast_math = flag_fast_math; rtx tem; /* Zero the operands. */ --- 3088,3094 ---- = (GET_MODE (op0) == VOIDmode ? DImode : GET_MODE (op0)); enum machine_mode cmp_op_mode = fp_p ? DFmode : DImode; enum machine_mode cmov_mode = VOIDmode; ! int local_fast_math = flag_unsafe_math_optimizations; rtx tem; /* Zero the operands. */ *************** alpha_emit_conditional_move (cmp, mode) *** 1922,1929 **** break; case GE: case GT: case GEU: case GTU: ! /* These must be swapped. */ ! if (op1 == CONST0_RTX (cmp_mode)) cmp_code = code, code = NE; else { --- 3119,3127 ---- break; case GE: case GT: case GEU: case GTU: ! /* These normally need swapping, but for integer zero we have ! special patterns that recognize swapped operands. */ ! if (!fp_p && op1 == const0_rtx) cmp_code = code, code = NE; else { *************** alpha_emit_conditional_move (cmp, mode) *** 1950,1956 **** } /* We may be able to use a conditional move directly. ! This avoids emitting spurious compares. */ if (signed_comparison_operator (cmp, VOIDmode) && (!fp_p || local_fast_math) && (op0 == CONST0_RTX (cmp_mode) || op1 == CONST0_RTX (cmp_mode))) --- 3148,3154 ---- } /* We may be able to use a conditional move directly. ! This avoids emitting spurious compares. */ if (signed_comparison_operator (cmp, VOIDmode) && (!fp_p || local_fast_math) && (op0 == CONST0_RTX (cmp_mode) || op1 == CONST0_RTX (cmp_mode))) *************** alpha_emit_conditional_move (cmp, mode) *** 1971,1977 **** break; case NE: ! /* This must be reversed. */ code = reverse_condition (code); cmov_code = EQ; break; --- 3169,3175 ---- break; case NE: ! /* This must be reversed. */ code = reverse_condition (code); cmov_code = EQ; break; *************** alpha_split_conditional_move (code, dest *** 2044,2084 **** else subtarget = target; } if (f == 0 && exact_log2 (diff) > 0 /* On EV6, we've got enough shifters to make non-arithmatic shifts viable over a longer latency cmove. On EV5, the E0 slot is a ! scarce resource, and on EV4 shift has the same latency as a cmove. */ && (diff <= 8 || alpha_cpu == PROCESSOR_EV6)) { tmp = gen_rtx_fmt_ee (code, DImode, cond, const0_rtx); ! emit_insn (gen_rtx_SET (VOIDmode, subtarget, tmp)); ! tmp = gen_rtx_ASHIFT (DImode, subtarget, GEN_INT (exact_log2 (t))); emit_insn (gen_rtx_SET (VOIDmode, target, tmp)); } else if (f == 0 && t == -1) { tmp = gen_rtx_fmt_ee (code, DImode, cond, const0_rtx); ! emit_insn (gen_rtx_SET (VOIDmode, subtarget, tmp)); ! emit_insn (gen_negdi2 (target, subtarget)); } else if (diff == 1 || diff == 4 || diff == 8) { rtx add_op; tmp = gen_rtx_fmt_ee (code, DImode, cond, const0_rtx); ! emit_insn (gen_rtx_SET (VOIDmode, subtarget, tmp)); if (diff == 1) ! emit_insn (gen_adddi3 (target, subtarget, GEN_INT (f))); else { add_op = GEN_INT (f); if (sext_add_operand (add_op, mode)) { ! tmp = gen_rtx_MULT (DImode, subtarget, GEN_INT (diff)); tmp = gen_rtx_PLUS (DImode, tmp, add_op); emit_insn (gen_rtx_SET (VOIDmode, target, tmp)); } --- 3242,3287 ---- else subtarget = target; } + /* Below, we must be careful to use copy_rtx on target and subtarget + in intermediate insns, as they may be a subreg rtx, which may not + be shared. */ if (f == 0 && exact_log2 (diff) > 0 /* On EV6, we've got enough shifters to make non-arithmatic shifts viable over a longer latency cmove. On EV5, the E0 slot is a ! scarce resource, and on EV4 shift has the same latency as a cmove. */ && (diff <= 8 || alpha_cpu == PROCESSOR_EV6)) { tmp = gen_rtx_fmt_ee (code, DImode, cond, const0_rtx); ! emit_insn (gen_rtx_SET (VOIDmode, copy_rtx (subtarget), tmp)); ! tmp = gen_rtx_ASHIFT (DImode, copy_rtx (subtarget), ! GEN_INT (exact_log2 (t))); emit_insn (gen_rtx_SET (VOIDmode, target, tmp)); } else if (f == 0 && t == -1) { tmp = gen_rtx_fmt_ee (code, DImode, cond, const0_rtx); ! emit_insn (gen_rtx_SET (VOIDmode, copy_rtx (subtarget), tmp)); ! emit_insn (gen_negdi2 (target, copy_rtx (subtarget))); } else if (diff == 1 || diff == 4 || diff == 8) { rtx add_op; tmp = gen_rtx_fmt_ee (code, DImode, cond, const0_rtx); ! emit_insn (gen_rtx_SET (VOIDmode, copy_rtx (subtarget), tmp)); if (diff == 1) ! emit_insn (gen_adddi3 (target, copy_rtx (subtarget), GEN_INT (f))); else { add_op = GEN_INT (f); if (sext_add_operand (add_op, mode)) { ! tmp = gen_rtx_MULT (DImode, copy_rtx (subtarget), ! GEN_INT (diff)); tmp = gen_rtx_PLUS (DImode, tmp, add_op); emit_insn (gen_rtx_SET (VOIDmode, target, tmp)); } *************** alpha_lookup_xfloating_lib_func (code) *** 2101,2108 **** { struct xfloating_op { ! enum rtx_code code; ! const char *func; }; static const struct xfloating_op vms_xfloating_ops[] = --- 3304,3311 ---- { struct xfloating_op { ! const enum rtx_code code; ! const char *const func; }; static const struct xfloating_op vms_xfloating_ops[] = *************** alpha_lookup_xfloating_lib_func (code) *** 2151,2157 **** knowledge of the G_floating routines. */ if (TARGET_FLOAT_VAX) { ! if (TARGET_OPEN_VMS) { if (code == FLOAT_EXTEND) return "OTS$CVT_FLOAT_G_X"; --- 3354,3360 ---- knowledge of the G_floating routines. */ if (TARGET_FLOAT_VAX) { ! if (TARGET_ABI_OPEN_VMS) { if (code == FLOAT_EXTEND) return "OTS$CVT_FLOAT_G_X"; *************** alpha_lookup_xfloating_lib_func (code) *** 2167,2173 **** } } ! if (TARGET_OPEN_VMS) ops = vms_xfloating_ops; else ops = osf_xfloating_ops; --- 3370,3376 ---- } } ! if (TARGET_ABI_OPEN_VMS) ops = vms_xfloating_ops; else ops = osf_xfloating_ops; *************** alpha_split_tfmode_pair (operands) *** 2395,2403 **** } else if (GET_CODE (operands[1]) == MEM) { ! operands[3] = change_address (operands[1], DImode, ! plus_constant (XEXP (operands[1], 0), 8)); ! operands[2] = change_address (operands[1], DImode, NULL_RTX); } else if (operands[1] == CONST0_RTX (TFmode)) operands[2] = operands[3] = const0_rtx; --- 3598,3605 ---- } else if (GET_CODE (operands[1]) == MEM) { ! operands[3] = adjust_address (operands[1], DImode, 8); ! operands[2] = adjust_address (operands[1], DImode, 0); } else if (operands[1] == CONST0_RTX (TFmode)) operands[2] = operands[3] = const0_rtx; *************** alpha_split_tfmode_pair (operands) *** 2411,2419 **** } else if (GET_CODE (operands[0]) == MEM) { ! operands[1] = change_address (operands[0], DImode, ! plus_constant (XEXP (operands[0], 0), 8)); ! operands[0] = change_address (operands[0], DImode, NULL_RTX); } else abort (); --- 3613,3620 ---- } else if (GET_CODE (operands[0]) == MEM) { ! operands[1] = adjust_address (operands[0], DImode, 8); ! operands[0] = adjust_address (operands[0], DImode, 0); } else abort (); *************** alpha_expand_unaligned_load (tgt, mem, s *** 2498,2504 **** HOST_WIDE_INT size, ofs; int sign; { ! rtx meml, memh, addr, extl, exth, tmp; enum machine_mode mode; meml = gen_reg_rtx (DImode); --- 3699,3705 ---- HOST_WIDE_INT size, ofs; int sign; { ! rtx meml, memh, addr, extl, exth, tmp, mema; enum machine_mode mode; meml = gen_reg_rtx (DImode); *************** alpha_expand_unaligned_load (tgt, mem, s *** 2507,2537 **** extl = gen_reg_rtx (DImode); exth = gen_reg_rtx (DImode); /* AND addresses cannot be in any alias set, since they may implicitly alias surrounding code. Ideally we'd have some alias set that covered all types except those with alignment 8 or higher. */ tmp = change_address (mem, DImode, gen_rtx_AND (DImode, ! plus_constant (XEXP (mem, 0), ofs), GEN_INT (-8))); ! MEM_ALIAS_SET (tmp) = 0; emit_move_insn (meml, tmp); tmp = change_address (mem, DImode, gen_rtx_AND (DImode, ! plus_constant (XEXP (mem, 0), ! ofs + size - 1), GEN_INT (-8))); ! MEM_ALIAS_SET (tmp) = 0; emit_move_insn (memh, tmp); ! if (sign && size == 2) { ! emit_move_insn (addr, plus_constant (XEXP (mem, 0), ofs+2)); ! emit_insn (gen_extxl (extl, meml, GEN_INT (64), addr)); ! emit_insn (gen_extqh (exth, memh, addr)); /* We must use tgt here for the target. Alpha-vms port fails if we use addr for the target, because addr is marked as a pointer and combine --- 3708,3752 ---- extl = gen_reg_rtx (DImode); exth = gen_reg_rtx (DImode); + mema = XEXP (mem, 0); + if (GET_CODE (mema) == LO_SUM) + mema = force_reg (Pmode, mema); + /* AND addresses cannot be in any alias set, since they may implicitly alias surrounding code. Ideally we'd have some alias set that covered all types except those with alignment 8 or higher. */ tmp = change_address (mem, DImode, gen_rtx_AND (DImode, ! plus_constant (mema, ofs), GEN_INT (-8))); ! set_mem_alias_set (tmp, 0); emit_move_insn (meml, tmp); tmp = change_address (mem, DImode, gen_rtx_AND (DImode, ! plus_constant (mema, ofs + size - 1), GEN_INT (-8))); ! set_mem_alias_set (tmp, 0); emit_move_insn (memh, tmp); ! if (WORDS_BIG_ENDIAN && sign && (size == 2 || size == 4)) { ! emit_move_insn (addr, plus_constant (mema, -1)); ! emit_insn (gen_extqh_be (extl, meml, addr)); ! emit_insn (gen_extxl_be (exth, memh, GEN_INT (64), addr)); ! ! addr = expand_binop (DImode, ior_optab, extl, exth, tgt, 1, OPTAB_WIDEN); ! addr = expand_binop (DImode, ashr_optab, addr, GEN_INT (64 - size*8), ! addr, 1, OPTAB_WIDEN); ! } ! else if (sign && size == 2) ! { ! emit_move_insn (addr, plus_constant (mema, ofs+2)); ! ! emit_insn (gen_extxl_le (extl, meml, GEN_INT (64), addr)); ! emit_insn (gen_extqh_le (exth, memh, addr)); /* We must use tgt here for the target. Alpha-vms port fails if we use addr for the target, because addr is marked as a pointer and combine *************** alpha_expand_unaligned_load (tgt, mem, s *** 2542,2568 **** } else { ! emit_move_insn (addr, plus_constant (XEXP (mem, 0), ofs)); ! emit_insn (gen_extxl (extl, meml, GEN_INT (size*8), addr)); ! switch ((int) size) { ! case 2: ! emit_insn (gen_extwh (exth, memh, addr)); ! mode = HImode; ! break; ! case 4: ! emit_insn (gen_extlh (exth, memh, addr)); ! mode = SImode; ! break; ! case 8: ! emit_insn (gen_extqh (exth, memh, addr)); ! mode = DImode; ! break; ! default: ! abort(); } addr = expand_binop (mode, ior_optab, gen_lowpart (mode, extl), --- 3757,3811 ---- } else { ! if (WORDS_BIG_ENDIAN) { ! emit_move_insn (addr, plus_constant (mema, ofs+size-1)); ! switch ((int) size) ! { ! case 2: ! emit_insn (gen_extwh_be (extl, meml, addr)); ! mode = HImode; ! break; ! case 4: ! emit_insn (gen_extlh_be (extl, meml, addr)); ! mode = SImode; ! break; ! case 8: ! emit_insn (gen_extqh_be (extl, meml, addr)); ! mode = DImode; ! break; ! default: ! abort (); ! } ! emit_insn (gen_extxl_be (exth, memh, GEN_INT (size*8), addr)); ! } ! else ! { ! emit_move_insn (addr, plus_constant (mema, ofs)); ! emit_insn (gen_extxl_le (extl, meml, GEN_INT (size*8), addr)); ! switch ((int) size) ! { ! case 2: ! emit_insn (gen_extwh_le (exth, memh, addr)); ! mode = HImode; ! break; ! ! case 4: ! emit_insn (gen_extlh_le (exth, memh, addr)); ! mode = SImode; ! break; ! ! case 8: ! emit_insn (gen_extqh_le (exth, memh, addr)); ! mode = DImode; ! break; ! ! default: ! abort(); ! } } addr = expand_binop (mode, ior_optab, gen_lowpart (mode, extl), *************** alpha_expand_unaligned_store (dst, src, *** 2581,2653 **** rtx dst, src; HOST_WIDE_INT size, ofs; { ! rtx dstl, dsth, addr, insl, insh, meml, memh; dstl = gen_reg_rtx (DImode); dsth = gen_reg_rtx (DImode); insl = gen_reg_rtx (DImode); insh = gen_reg_rtx (DImode); /* AND addresses cannot be in any alias set, since they may implicitly alias surrounding code. Ideally we'd have some alias set that covered all types except those with alignment 8 or higher. */ meml = change_address (dst, DImode, gen_rtx_AND (DImode, ! plus_constant (XEXP (dst, 0), ofs), GEN_INT (-8))); ! MEM_ALIAS_SET (meml) = 0; memh = change_address (dst, DImode, gen_rtx_AND (DImode, ! plus_constant (XEXP (dst, 0), ! ofs+size-1), GEN_INT (-8))); ! MEM_ALIAS_SET (memh) = 0; emit_move_insn (dsth, memh); emit_move_insn (dstl, meml); ! addr = copy_addr_to_reg (plus_constant (XEXP (dst, 0), ofs)); ! ! if (src != const0_rtx) { ! emit_insn (gen_insxh (insh, gen_lowpart (DImode, src), ! GEN_INT (size*8), addr)); switch ((int) size) { case 2: ! emit_insn (gen_inswl (insl, gen_lowpart (HImode, src), addr)); break; case 4: ! emit_insn (gen_insll (insl, gen_lowpart (SImode, src), addr)); break; case 8: ! emit_insn (gen_insql (insl, src, addr)); break; } } ! emit_insn (gen_mskxh (dsth, dsth, GEN_INT (size*8), addr)); ! switch ((int) size) ! { ! case 2: ! emit_insn (gen_mskxl (dstl, dstl, GEN_INT (0xffff), addr)); ! break; ! case 4: ! emit_insn (gen_mskxl (dstl, dstl, GEN_INT (0xffffffff), addr)); ! break; ! case 8: ! { #if HOST_BITS_PER_WIDE_INT == 32 ! rtx msk = immed_double_const (0xffffffff, 0xffffffff, DImode); #else ! rtx msk = immed_double_const (0xffffffffffffffff, 0, DImode); #endif ! emit_insn (gen_mskxl (dstl, dstl, msk, addr)); ! } ! break; } if (src != const0_rtx) --- 3824,3946 ---- rtx dst, src; HOST_WIDE_INT size, ofs; { ! rtx dstl, dsth, addr, insl, insh, meml, memh, dsta; dstl = gen_reg_rtx (DImode); dsth = gen_reg_rtx (DImode); insl = gen_reg_rtx (DImode); insh = gen_reg_rtx (DImode); + dsta = XEXP (dst, 0); + if (GET_CODE (dsta) == LO_SUM) + dsta = force_reg (Pmode, dsta); + /* AND addresses cannot be in any alias set, since they may implicitly alias surrounding code. Ideally we'd have some alias set that covered all types except those with alignment 8 or higher. */ meml = change_address (dst, DImode, gen_rtx_AND (DImode, ! plus_constant (dsta, ofs), GEN_INT (-8))); ! set_mem_alias_set (meml, 0); memh = change_address (dst, DImode, gen_rtx_AND (DImode, ! plus_constant (dsta, ofs + size - 1), GEN_INT (-8))); ! set_mem_alias_set (memh, 0); emit_move_insn (dsth, memh); emit_move_insn (dstl, meml); ! if (WORDS_BIG_ENDIAN) { ! addr = copy_addr_to_reg (plus_constant (dsta, ofs+size-1)); ! ! if (src != const0_rtx) ! { ! switch ((int) size) ! { ! case 2: ! emit_insn (gen_inswl_be (insh, gen_lowpart (HImode,src), addr)); ! break; ! case 4: ! emit_insn (gen_insll_be (insh, gen_lowpart (SImode,src), addr)); ! break; ! case 8: ! emit_insn (gen_insql_be (insh, gen_lowpart (DImode,src), addr)); ! break; ! } ! emit_insn (gen_insxh (insl, gen_lowpart (DImode, src), ! GEN_INT (size*8), addr)); ! } switch ((int) size) { case 2: ! emit_insn (gen_mskxl_be (dsth, dsth, GEN_INT (0xffff), addr)); break; case 4: ! emit_insn (gen_mskxl_be (dsth, dsth, GEN_INT (0xffffffff), addr)); break; case 8: ! { ! #if HOST_BITS_PER_WIDE_INT == 32 ! rtx msk = immed_double_const (0xffffffff, 0xffffffff, DImode); ! #else ! rtx msk = constm1_rtx; ! #endif ! emit_insn (gen_mskxl_be (dsth, dsth, msk, addr)); ! } break; } + + emit_insn (gen_mskxh (dstl, dstl, GEN_INT (size*8), addr)); } + else + { + addr = copy_addr_to_reg (plus_constant (dsta, ofs)); ! if (src != const0_rtx) ! { ! emit_insn (gen_insxh (insh, gen_lowpart (DImode, src), ! GEN_INT (size*8), addr)); ! switch ((int) size) ! { ! case 2: ! emit_insn (gen_inswl_le (insl, gen_lowpart (HImode, src), addr)); ! break; ! case 4: ! emit_insn (gen_insll_le (insl, gen_lowpart (SImode, src), addr)); ! break; ! case 8: ! emit_insn (gen_insql_le (insl, src, addr)); ! break; ! } ! } ! ! emit_insn (gen_mskxh (dsth, dsth, GEN_INT (size*8), addr)); ! ! switch ((int) size) ! { ! case 2: ! emit_insn (gen_mskxl_le (dstl, dstl, GEN_INT (0xffff), addr)); ! break; ! case 4: ! emit_insn (gen_mskxl_le (dstl, dstl, GEN_INT (0xffffffff), addr)); ! break; ! case 8: ! { #if HOST_BITS_PER_WIDE_INT == 32 ! rtx msk = immed_double_const (0xffffffff, 0xffffffff, DImode); #else ! rtx msk = constm1_rtx; #endif ! emit_insn (gen_mskxl_le (dstl, dstl, msk, addr)); ! } ! break; ! } } if (src != const0_rtx) *************** alpha_expand_unaligned_store (dst, src, *** 2655,2664 **** dsth = expand_binop (DImode, ior_optab, insh, dsth, dsth, 0, OPTAB_WIDEN); dstl = expand_binop (DImode, ior_optab, insl, dstl, dstl, 0, OPTAB_WIDEN); } ! ! /* Must store high before low for degenerate case of aligned. */ ! emit_move_insn (memh, dsth); ! emit_move_insn (meml, dstl); } /* The block move code tries to maximize speed by separating loads and --- 3948,3965 ---- dsth = expand_binop (DImode, ior_optab, insh, dsth, dsth, 0, OPTAB_WIDEN); dstl = expand_binop (DImode, ior_optab, insl, dstl, dstl, 0, OPTAB_WIDEN); } ! ! if (WORDS_BIG_ENDIAN) ! { ! emit_move_insn (meml, dstl); ! emit_move_insn (memh, dsth); ! } ! else ! { ! /* Must store high before low for degenerate case of aligned. */ ! emit_move_insn (memh, dsth); ! emit_move_insn (meml, dstl); ! } } /* The block move code tries to maximize speed by separating loads and *************** alpha_expand_unaligned_load_words (out_r *** 2680,2688 **** rtx const im8 = GEN_INT (-8); rtx const i64 = GEN_INT (64); rtx ext_tmps[MAX_MOVE_WORDS], data_regs[MAX_MOVE_WORDS+1]; ! rtx sreg, areg, tmp; HOST_WIDE_INT i; /* Generate all the tmp registers we need. */ for (i = 0; i < words; ++i) { --- 3981,3993 ---- rtx const im8 = GEN_INT (-8); rtx const i64 = GEN_INT (64); rtx ext_tmps[MAX_MOVE_WORDS], data_regs[MAX_MOVE_WORDS+1]; ! rtx sreg, areg, tmp, smema; HOST_WIDE_INT i; + smema = XEXP (smem, 0); + if (GET_CODE (smema) == LO_SUM) + smema = force_reg (Pmode, smema); + /* Generate all the tmp registers we need. */ for (i = 0; i < words; ++i) { *************** alpha_expand_unaligned_load_words (out_r *** 2692,2730 **** data_regs[words] = gen_reg_rtx (DImode); if (ofs != 0) ! smem = change_address (smem, GET_MODE (smem), ! plus_constant (XEXP (smem, 0), ofs)); /* Load up all of the source data. */ for (i = 0; i < words; ++i) { tmp = change_address (smem, DImode, gen_rtx_AND (DImode, ! plus_constant (XEXP(smem,0), 8*i), im8)); ! MEM_ALIAS_SET (tmp) = 0; emit_move_insn (data_regs[i], tmp); } tmp = change_address (smem, DImode, gen_rtx_AND (DImode, ! plus_constant (XEXP(smem,0), 8*words - 1), im8)); ! MEM_ALIAS_SET (tmp) = 0; emit_move_insn (data_regs[words], tmp); /* Extract the half-word fragments. Unfortunately DEC decided to make extxh with offset zero a noop instead of zeroing the register, so we must take care of that edge condition ourselves with cmov. */ ! sreg = copy_addr_to_reg (XEXP (smem, 0)); areg = expand_binop (DImode, and_optab, sreg, GEN_INT (7), NULL, 1, OPTAB_WIDEN); for (i = 0; i < words; ++i) { ! emit_insn (gen_extxl (data_regs[i], data_regs[i], i64, sreg)); ! ! emit_insn (gen_extqh (ext_tmps[i], data_regs[i+1], sreg)); emit_insn (gen_rtx_SET (VOIDmode, ext_tmps[i], gen_rtx_IF_THEN_ELSE (DImode, gen_rtx_EQ (DImode, areg, --- 3997,4043 ---- data_regs[words] = gen_reg_rtx (DImode); if (ofs != 0) ! smem = adjust_address (smem, GET_MODE (smem), ofs); /* Load up all of the source data. */ for (i = 0; i < words; ++i) { tmp = change_address (smem, DImode, gen_rtx_AND (DImode, ! plus_constant (smema, 8*i), im8)); ! set_mem_alias_set (tmp, 0); emit_move_insn (data_regs[i], tmp); } tmp = change_address (smem, DImode, gen_rtx_AND (DImode, ! plus_constant (smema, 8*words - 1), im8)); ! set_mem_alias_set (tmp, 0); emit_move_insn (data_regs[words], tmp); /* Extract the half-word fragments. Unfortunately DEC decided to make extxh with offset zero a noop instead of zeroing the register, so we must take care of that edge condition ourselves with cmov. */ ! sreg = copy_addr_to_reg (smema); areg = expand_binop (DImode, and_optab, sreg, GEN_INT (7), NULL, 1, OPTAB_WIDEN); + if (WORDS_BIG_ENDIAN) + emit_move_insn (sreg, plus_constant (sreg, 7)); for (i = 0; i < words; ++i) { ! if (WORDS_BIG_ENDIAN) ! { ! emit_insn (gen_extqh_be (data_regs[i], data_regs[i], sreg)); ! emit_insn (gen_extxl_be (ext_tmps[i], data_regs[i+1], i64, sreg)); ! } ! else ! { ! emit_insn (gen_extxl_le (data_regs[i], data_regs[i], i64, sreg)); ! emit_insn (gen_extqh_le (ext_tmps[i], data_regs[i+1], sreg)); ! } emit_insn (gen_rtx_SET (VOIDmode, ext_tmps[i], gen_rtx_IF_THEN_ELSE (DImode, gen_rtx_EQ (DImode, areg, *************** alpha_expand_unaligned_store_words (data *** 2754,2766 **** #if HOST_BITS_PER_WIDE_INT == 32 rtx const im1 = immed_double_const (0xffffffff, 0xffffffff, DImode); #else ! rtx const im1 = immed_double_const (0xffffffffffffffff, 0, DImode); #endif rtx ins_tmps[MAX_MOVE_WORDS]; rtx st_tmp_1, st_tmp_2, dreg; ! rtx st_addr_1, st_addr_2; HOST_WIDE_INT i; /* Generate all the tmp registers we need. */ if (data_regs != NULL) for (i = 0; i < words; ++i) --- 4067,4083 ---- #if HOST_BITS_PER_WIDE_INT == 32 rtx const im1 = immed_double_const (0xffffffff, 0xffffffff, DImode); #else ! rtx const im1 = constm1_rtx; #endif rtx ins_tmps[MAX_MOVE_WORDS]; rtx st_tmp_1, st_tmp_2, dreg; ! rtx st_addr_1, st_addr_2, dmema; HOST_WIDE_INT i; + dmema = XEXP (dmem, 0); + if (GET_CODE (dmema) == LO_SUM) + dmema = force_reg (Pmode, dmema); + /* Generate all the tmp registers we need. */ if (data_regs != NULL) for (i = 0; i < words; ++i) *************** alpha_expand_unaligned_store_words (data *** 2769,2803 **** st_tmp_2 = gen_reg_rtx(DImode); if (ofs != 0) ! dmem = change_address (dmem, GET_MODE (dmem), ! plus_constant (XEXP (dmem, 0), ofs)); ! st_addr_2 = change_address (dmem, DImode, gen_rtx_AND (DImode, ! plus_constant (XEXP(dmem,0), ! words*8 - 1), im8)); ! MEM_ALIAS_SET (st_addr_2) = 0; st_addr_1 = change_address (dmem, DImode, ! gen_rtx_AND (DImode, ! XEXP (dmem, 0), ! im8)); ! MEM_ALIAS_SET (st_addr_1) = 0; /* Load up the destination end bits. */ emit_move_insn (st_tmp_2, st_addr_2); emit_move_insn (st_tmp_1, st_addr_1); /* Shift the input data into place. */ ! dreg = copy_addr_to_reg (XEXP (dmem, 0)); if (data_regs != NULL) { for (i = words-1; i >= 0; --i) { ! emit_insn (gen_insxh (ins_tmps[i], data_regs[i], i64, dreg)); ! emit_insn (gen_insql (data_regs[i], data_regs[i], dreg)); } for (i = words-1; i > 0; --i) { --- 4086,4125 ---- st_tmp_2 = gen_reg_rtx(DImode); if (ofs != 0) ! dmem = adjust_address (dmem, GET_MODE (dmem), ofs); st_addr_2 = change_address (dmem, DImode, gen_rtx_AND (DImode, ! plus_constant (dmema, words*8 - 1), im8)); ! set_mem_alias_set (st_addr_2, 0); st_addr_1 = change_address (dmem, DImode, ! gen_rtx_AND (DImode, dmema, im8)); ! set_mem_alias_set (st_addr_1, 0); /* Load up the destination end bits. */ emit_move_insn (st_tmp_2, st_addr_2); emit_move_insn (st_tmp_1, st_addr_1); /* Shift the input data into place. */ ! dreg = copy_addr_to_reg (dmema); ! if (WORDS_BIG_ENDIAN) ! emit_move_insn (dreg, plus_constant (dreg, 7)); if (data_regs != NULL) { for (i = words-1; i >= 0; --i) { ! if (WORDS_BIG_ENDIAN) ! { ! emit_insn (gen_insql_be (ins_tmps[i], data_regs[i], dreg)); ! emit_insn (gen_insxh (data_regs[i], data_regs[i], i64, dreg)); ! } ! else ! { ! emit_insn (gen_insxh (ins_tmps[i], data_regs[i], i64, dreg)); ! emit_insn (gen_insql_le (data_regs[i], data_regs[i], dreg)); ! } } for (i = words-1; i > 0; --i) { *************** alpha_expand_unaligned_store_words (data *** 2808,2815 **** } /* Split and merge the ends with the destination data. */ ! emit_insn (gen_mskxh (st_tmp_2, st_tmp_2, i64, dreg)); ! emit_insn (gen_mskxl (st_tmp_1, st_tmp_1, im1, dreg)); if (data_regs != NULL) { --- 4130,4145 ---- } /* Split and merge the ends with the destination data. */ ! if (WORDS_BIG_ENDIAN) ! { ! emit_insn (gen_mskxl_be (st_tmp_2, st_tmp_2, im1, dreg)); ! emit_insn (gen_mskxh (st_tmp_1, st_tmp_1, i64, dreg)); ! } ! else ! { ! emit_insn (gen_mskxh (st_tmp_2, st_tmp_2, i64, dreg)); ! emit_insn (gen_mskxl_le (st_tmp_1, st_tmp_1, im1, dreg)); ! } if (data_regs != NULL) { *************** alpha_expand_unaligned_store_words (data *** 2820,2836 **** } /* Store it all. */ ! emit_move_insn (st_addr_2, st_tmp_2); for (i = words-1; i > 0; --i) { rtx tmp = change_address (dmem, DImode, gen_rtx_AND (DImode, ! plus_constant(XEXP (dmem,0), i*8), im8)); ! MEM_ALIAS_SET (tmp) = 0; emit_move_insn (tmp, data_regs ? ins_tmps[i-1] : const0_rtx); } ! emit_move_insn (st_addr_1, st_tmp_1); } --- 4150,4173 ---- } /* Store it all. */ ! if (WORDS_BIG_ENDIAN) ! emit_move_insn (st_addr_1, st_tmp_1); ! else ! emit_move_insn (st_addr_2, st_tmp_2); for (i = words-1; i > 0; --i) { rtx tmp = change_address (dmem, DImode, gen_rtx_AND (DImode, ! plus_constant(dmema, ! WORDS_BIG_ENDIAN ? i*8-1 : i*8), im8)); ! set_mem_alias_set (tmp, 0); emit_move_insn (tmp, data_regs ? ins_tmps[i-1] : const0_rtx); } ! if (WORDS_BIG_ENDIAN) ! emit_move_insn (st_addr_2, st_tmp_2); ! else ! emit_move_insn (st_addr_1, st_tmp_1); } *************** alpha_expand_block_move (operands) *** 2855,2861 **** rtx orig_dst = operands[0]; rtx data_regs[2 * MAX_MOVE_WORDS + 16]; rtx tmp; ! int i, words, ofs, nregs = 0; if (orig_bytes <= 0) return 1; --- 4192,4198 ---- rtx orig_dst = operands[0]; rtx data_regs[2 * MAX_MOVE_WORDS + 16]; rtx tmp; ! unsigned int i, words, ofs, nregs = 0; if (orig_bytes <= 0) return 1; *************** alpha_expand_block_move (operands) *** 2923,2929 **** if (mode == TImode) { data_regs[nregs] = gen_lowpart (DImode, tmp); ! data_regs[nregs+1] = gen_highpart (DImode, tmp); nregs += 2; } else --- 4260,4266 ---- if (mode == TImode) { data_regs[nregs] = gen_lowpart (DImode, tmp); ! data_regs[nregs + 1] = gen_highpart (DImode, tmp); nregs += 2; } else *************** alpha_expand_block_move (operands) *** 2933,2940 **** } /* No appropriate mode; fall back on memory. */ ! orig_src = change_address (orig_src, GET_MODE (orig_src), ! copy_addr_to_reg (XEXP (orig_src, 0))); src_align = GET_MODE_BITSIZE (GET_MODE (tmp)); } --- 4270,4277 ---- } /* No appropriate mode; fall back on memory. */ ! orig_src = replace_equiv_address (orig_src, ! copy_addr_to_reg (XEXP (orig_src, 0))); src_align = GET_MODE_BITSIZE (GET_MODE (tmp)); } *************** alpha_expand_block_move (operands) *** 2944,2956 **** words = bytes / 8; for (i = 0; i < words; ++i) ! data_regs[nregs + i] = gen_reg_rtx(DImode); for (i = 0; i < words; ++i) emit_move_insn (data_regs[nregs + i], ! change_address (orig_src, DImode, ! plus_constant (XEXP (orig_src, 0), ! ofs + i * 8))); nregs += words; bytes -= words * 8; --- 4281,4291 ---- words = bytes / 8; for (i = 0; i < words; ++i) ! data_regs[nregs + i] = gen_reg_rtx (DImode); for (i = 0; i < words; ++i) emit_move_insn (data_regs[nregs + i], ! adjust_address (orig_src, DImode, ofs + i * 8)); nregs += words; bytes -= words * 8; *************** alpha_expand_block_move (operands) *** 2962,2974 **** words = bytes / 4; for (i = 0; i < words; ++i) ! data_regs[nregs + i] = gen_reg_rtx(SImode); for (i = 0; i < words; ++i) emit_move_insn (data_regs[nregs + i], ! change_address (orig_src, SImode, ! plus_constant (XEXP (orig_src, 0), ! ofs + i * 4))); nregs += words; bytes -= words * 4; --- 4297,4307 ---- words = bytes / 4; for (i = 0; i < words; ++i) ! data_regs[nregs + i] = gen_reg_rtx (SImode); for (i = 0; i < words; ++i) emit_move_insn (data_regs[nregs + i], ! adjust_address (orig_src, SImode, ofs + i * 4)); nregs += words; bytes -= words * 4; *************** alpha_expand_block_move (operands) *** 2980,2986 **** words = bytes / 8; for (i = 0; i < words+1; ++i) ! data_regs[nregs + i] = gen_reg_rtx(DImode); alpha_expand_unaligned_load_words (data_regs + nregs, orig_src, words, ofs); --- 4313,4319 ---- words = bytes / 8; for (i = 0; i < words+1; ++i) ! data_regs[nregs + i] = gen_reg_rtx (DImode); alpha_expand_unaligned_load_words (data_regs + nregs, orig_src, words, ofs); *************** alpha_expand_block_move (operands) *** 3004,3013 **** { do { data_regs[nregs++] = tmp = gen_reg_rtx (HImode); ! emit_move_insn (tmp, ! change_address (orig_src, HImode, ! plus_constant (XEXP (orig_src, 0), ! ofs))); bytes -= 2; ofs += 2; } while (bytes >= 2); --- 4337,4343 ---- { do { data_regs[nregs++] = tmp = gen_reg_rtx (HImode); ! emit_move_insn (tmp, adjust_address (orig_src, HImode, ofs)); bytes -= 2; ofs += 2; } while (bytes >= 2); *************** alpha_expand_block_move (operands) *** 3024,3033 **** while (bytes > 0) { data_regs[nregs++] = tmp = gen_reg_rtx (QImode); ! emit_move_insn (tmp, ! change_address (orig_src, QImode, ! plus_constant (XEXP (orig_src, 0), ! ofs))); bytes -= 1; ofs += 1; } --- 4354,4360 ---- while (bytes > 0) { data_regs[nregs++] = tmp = gen_reg_rtx (QImode); ! emit_move_insn (tmp, adjust_address (orig_src, QImode, ofs)); bytes -= 1; ofs += 1; } *************** alpha_expand_block_move (operands) *** 3087,3094 **** /* No appropriate mode; fall back on memory. We can speed things up by recognizing extra alignment information. */ ! orig_dst = change_address (orig_dst, GET_MODE (orig_dst), ! copy_addr_to_reg (XEXP (orig_dst, 0))); dst_align = GET_MODE_BITSIZE (GET_MODE (tmp)); } --- 4414,4421 ---- /* No appropriate mode; fall back on memory. We can speed things up by recognizing extra alignment information. */ ! orig_dst = replace_equiv_address (orig_dst, ! copy_addr_to_reg (XEXP (orig_dst, 0))); dst_align = GET_MODE_BITSIZE (GET_MODE (tmp)); } *************** alpha_expand_block_move (operands) *** 3097,3105 **** { while (i < nregs && GET_MODE (data_regs[i]) == DImode) { ! emit_move_insn (change_address (orig_dst, DImode, ! plus_constant (XEXP (orig_dst, 0), ! ofs)), data_regs[i]); ofs += 8; i++; --- 4424,4430 ---- { while (i < nregs && GET_MODE (data_regs[i]) == DImode) { ! emit_move_insn (adjust_address (orig_dst, DImode, ofs), data_regs[i]); ofs += 8; i++; *************** alpha_expand_block_move (operands) *** 3115,3127 **** tmp = expand_binop (DImode, lshr_optab, data_regs[i], GEN_INT (32), NULL_RTX, 1, OPTAB_WIDEN); ! emit_move_insn (change_address (orig_dst, SImode, ! plus_constant (XEXP (orig_dst, 0), ! ofs)), gen_lowpart (SImode, data_regs[i])); ! emit_move_insn (change_address (orig_dst, SImode, ! plus_constant (XEXP (orig_dst, 0), ! ofs + 4)), gen_lowpart (SImode, tmp)); ofs += 8; i++; --- 4440,4448 ---- tmp = expand_binop (DImode, lshr_optab, data_regs[i], GEN_INT (32), NULL_RTX, 1, OPTAB_WIDEN); ! emit_move_insn (adjust_address (orig_dst, SImode, ofs), gen_lowpart (SImode, data_regs[i])); ! emit_move_insn (adjust_address (orig_dst, SImode, ofs + 4), gen_lowpart (SImode, tmp)); ofs += 8; i++; *************** alpha_expand_block_move (operands) *** 3129,3137 **** while (i < nregs && GET_MODE (data_regs[i]) == SImode) { ! emit_move_insn (change_address(orig_dst, SImode, ! plus_constant (XEXP (orig_dst, 0), ! ofs)), data_regs[i]); ofs += 4; i++; --- 4450,4456 ---- while (i < nregs && GET_MODE (data_regs[i]) == SImode) { ! emit_move_insn (adjust_address (orig_dst, SImode, ofs), data_regs[i]); ofs += 4; i++; *************** alpha_expand_block_move (operands) *** 3169,3178 **** if (dst_align >= 16) while (i < nregs && GET_MODE (data_regs[i]) == HImode) { ! emit_move_insn (change_address (orig_dst, HImode, ! plus_constant (XEXP (orig_dst, 0), ! ofs)), ! data_regs[i]); i++; ofs += 2; } --- 4488,4494 ---- if (dst_align >= 16) while (i < nregs && GET_MODE (data_regs[i]) == HImode) { ! emit_move_insn (adjust_address (orig_dst, HImode, ofs), data_regs[i]); i++; ofs += 2; } *************** alpha_expand_block_move (operands) *** 3186,3195 **** while (i < nregs && GET_MODE (data_regs[i]) == QImode) { ! emit_move_insn (change_address (orig_dst, QImode, ! plus_constant (XEXP (orig_dst, 0), ! ofs)), ! data_regs[i]); i++; ofs += 1; } --- 4502,4508 ---- while (i < nregs && GET_MODE (data_regs[i]) == QImode) { ! emit_move_insn (adjust_address (orig_dst, QImode, ofs), data_regs[i]); i++; ofs += 1; } *************** alpha_expand_block_clear (operands) *** 3254,3261 **** } /* No appropriate mode; fall back on memory. */ ! orig_dst = change_address (orig_dst, GET_MODE (orig_dst), ! copy_addr_to_reg (tmp)); align = GET_MODE_BITSIZE (GET_MODE (XEXP (tmp, 0))); } --- 4567,4573 ---- } /* No appropriate mode; fall back on memory. */ ! orig_dst = replace_equiv_address (orig_dst, copy_addr_to_reg (tmp)); align = GET_MODE_BITSIZE (GET_MODE (XEXP (tmp, 0))); } *************** alpha_expand_block_clear (operands) *** 3276,3285 **** rtx mem, tmp; HOST_WIDE_INT mask; ! mem = change_address (orig_dst, mode, ! plus_constant (XEXP (orig_dst, 0), ! ofs - inv_alignofs)); ! MEM_ALIAS_SET (mem) = 0; mask = ~(~(HOST_WIDE_INT)0 << (inv_alignofs * 8)); if (bytes < alignofs) --- 4588,4595 ---- rtx mem, tmp; HOST_WIDE_INT mask; ! mem = adjust_address (orig_dst, mode, ofs - inv_alignofs); ! set_mem_alias_set (mem, 0); mask = ~(~(HOST_WIDE_INT)0 << (inv_alignofs * 8)); if (bytes < alignofs) *************** alpha_expand_block_clear (operands) *** 3304,3333 **** if (TARGET_BWX && (alignofs & 1) && bytes >= 1) { ! emit_move_insn (change_address (orig_dst, QImode, ! plus_constant (XEXP (orig_dst, 0), ! ofs)), ! const0_rtx); bytes -= 1; ofs += 1; alignofs -= 1; } if (TARGET_BWX && align >= 16 && (alignofs & 3) == 2 && bytes >= 2) { ! emit_move_insn (change_address (orig_dst, HImode, ! plus_constant (XEXP (orig_dst, 0), ! ofs)), ! const0_rtx); bytes -= 2; ofs += 2; alignofs -= 2; } if (alignofs == 4 && bytes >= 4) { ! emit_move_insn (change_address (orig_dst, SImode, ! plus_constant (XEXP (orig_dst, 0), ! ofs)), ! const0_rtx); bytes -= 4; ofs += 4; alignofs = 0; --- 4614,4634 ---- if (TARGET_BWX && (alignofs & 1) && bytes >= 1) { ! emit_move_insn (adjust_address (orig_dst, QImode, ofs), const0_rtx); bytes -= 1; ofs += 1; alignofs -= 1; } if (TARGET_BWX && align >= 16 && (alignofs & 3) == 2 && bytes >= 2) { ! emit_move_insn (adjust_address (orig_dst, HImode, ofs), const0_rtx); bytes -= 2; ofs += 2; alignofs -= 2; } if (alignofs == 4 && bytes >= 4) { ! emit_move_insn (adjust_address (orig_dst, SImode, ofs), const0_rtx); bytes -= 4; ofs += 4; alignofs = 0; *************** alpha_expand_block_clear (operands) *** 3349,3358 **** words = bytes / 8; for (i = 0; i < words; ++i) ! emit_move_insn (change_address(orig_dst, DImode, ! plus_constant (XEXP (orig_dst, 0), ! ofs + i * 8)), ! const0_rtx); bytes -= words * 8; ofs += words * 8; --- 4650,4657 ---- words = bytes / 8; for (i = 0; i < words; ++i) ! emit_move_insn (adjust_address (orig_dst, DImode, ofs + i * 8), ! const0_rtx); bytes -= words * 8; ofs += words * 8; *************** alpha_expand_block_clear (operands) *** 3363,3384 **** if (align >= 32 && bytes > 16) { ! emit_move_insn (change_address (orig_dst, SImode, ! plus_constant (XEXP (orig_dst, 0), ofs)), ! const0_rtx); bytes -= 4; ofs += 4; words = bytes / 8; for (i = 0; i < words; ++i) { ! rtx mem; ! mem = change_address (orig_dst, DImode, ! gen_rtx_AND (DImode, ! plus_constant (XEXP (orig_dst, 0), ! ofs + i*8), ! GEN_INT (-8))); ! MEM_ALIAS_SET (mem) = 0; emit_move_insn (mem, const0_rtx); } --- 4662,4686 ---- if (align >= 32 && bytes > 16) { ! rtx orig_dsta; ! ! emit_move_insn (adjust_address (orig_dst, SImode, ofs), const0_rtx); bytes -= 4; ofs += 4; + orig_dsta = XEXP (orig_dst, 0); + if (GET_CODE (orig_dsta) == LO_SUM) + orig_dsta = force_reg (Pmode, orig_dsta); + words = bytes / 8; for (i = 0; i < words; ++i) { ! rtx mem ! = change_address (orig_dst, DImode, ! gen_rtx_AND (DImode, ! plus_constant (orig_dsta, ofs + i*8), ! GEN_INT (-8))); ! set_mem_alias_set (mem, 0); emit_move_insn (mem, const0_rtx); } *************** alpha_expand_block_clear (operands) *** 3398,3406 **** words = bytes / 4; for (i = 0; i < words; ++i) ! emit_move_insn (change_address (orig_dst, SImode, ! plus_constant (XEXP (orig_dst, 0), ! ofs + i * 4)), const0_rtx); bytes -= words * 4; --- 4700,4706 ---- words = bytes / 4; for (i = 0; i < words; ++i) ! emit_move_insn (adjust_address (orig_dst, SImode, ofs + i * 4), const0_rtx); bytes -= words * 4; *************** alpha_expand_block_clear (operands) *** 3438,3446 **** rtx mem, tmp; HOST_WIDE_INT mask; ! mem = change_address (orig_dst, DImode, ! plus_constant (XEXP (orig_dst, 0), ofs)); ! MEM_ALIAS_SET (mem) = 0; mask = ~(HOST_WIDE_INT)0 << (bytes * 8); --- 4738,4745 ---- rtx mem, tmp; HOST_WIDE_INT mask; ! mem = adjust_address (orig_dst, DImode, ofs); ! set_mem_alias_set (mem, 0); mask = ~(HOST_WIDE_INT)0 << (bytes * 8); *************** alpha_expand_block_clear (operands) *** 3455,3463 **** rtx mem, tmp; HOST_WIDE_INT mask; ! mem = change_address (orig_dst, SImode, ! plus_constant (XEXP (orig_dst, 0), ofs)); ! MEM_ALIAS_SET (mem) = 0; mask = ~(HOST_WIDE_INT)0 << (bytes * 8); --- 4754,4761 ---- rtx mem, tmp; HOST_WIDE_INT mask; ! mem = adjust_address (orig_dst, SImode, ofs); ! set_mem_alias_set (mem, 0); mask = ~(HOST_WIDE_INT)0 << (bytes * 8); *************** alpha_expand_block_clear (operands) *** 3482,3490 **** if (align >= 16) { do { ! emit_move_insn (change_address (orig_dst, HImode, ! plus_constant (XEXP (orig_dst, 0), ! ofs)), const0_rtx); bytes -= 2; ofs += 2; --- 4780,4786 ---- if (align >= 16) { do { ! emit_move_insn (adjust_address (orig_dst, HImode, ofs), const0_rtx); bytes -= 2; ofs += 2; *************** alpha_expand_block_clear (operands) *** 3500,3509 **** while (bytes > 0) { ! emit_move_insn (change_address (orig_dst, QImode, ! plus_constant (XEXP (orig_dst, 0), ! ofs)), ! const0_rtx); bytes -= 1; ofs += 1; } --- 4796,4802 ---- while (bytes > 0) { ! emit_move_insn (adjust_address (orig_dst, QImode, ofs), const0_rtx); bytes -= 1; ofs += 1; } *************** alpha_expand_block_clear (operands) *** 3514,3520 **** /* Adjust the cost of a scheduling dependency. Return the new cost of a dependency LINK or INSN on DEP_INSN. COST is the current cost. */ ! int alpha_adjust_cost (insn, link, dep_insn, cost) rtx insn; rtx link; --- 4807,4813 ---- /* Adjust the cost of a scheduling dependency. Return the new cost of a dependency LINK or INSN on DEP_INSN. COST is the current cost. */ ! static int alpha_adjust_cost (insn, link, dep_insn, cost) rtx insn; rtx link; *************** alpha_adjust_cost (insn, link, dep_insn, *** 3655,3672 **** break; } ! /* Otherwise, return the default cost. */ return cost; } ! /* Functions to save and restore alpha_return_addr_rtx. */ static void alpha_init_machine_status (p) struct function *p; { p->machine = (struct machine_function *) xcalloc (1, sizeof (struct machine_function)); } static void --- 4948,4993 ---- break; } ! /* Otherwise, return the default cost. */ return cost; } + + /* Function to initialize the issue rate used by the scheduler. */ + static int + alpha_issue_rate () + { + return (alpha_cpu == PROCESSOR_EV4 ? 2 : 4); + } + + static int + alpha_variable_issue (dump, verbose, insn, cim) + FILE *dump ATTRIBUTE_UNUSED; + int verbose ATTRIBUTE_UNUSED; + rtx insn; + int cim; + { + if (recog_memoized (insn) < 0 || get_attr_type (insn) == TYPE_MULTI) + return 0; + + return cim - 1; + } + ! /* Register global variables and machine-specific functions with the ! garbage collector. */ + #if TARGET_ABI_UNICOSMK static void alpha_init_machine_status (p) struct function *p; { p->machine = (struct machine_function *) xcalloc (1, sizeof (struct machine_function)); + + p->machine->first_ciw = NULL_RTX; + p->machine->last_ciw = NULL_RTX; + p->machine->ciw_count = 0; + p->machine->addr_list = NULL_RTX; } static void *************** alpha_mark_machine_status (p) *** 3677,3684 **** if (machine) { ! ggc_mark_rtx (machine->ra_rtx); ! ggc_mark_rtx (machine->gp_save_rtx); } } --- 4998,5005 ---- if (machine) { ! ggc_mark_rtx (machine->first_ciw); ! ggc_mark_rtx (machine->addr_list); } } *************** alpha_free_machine_status (p) *** 3689,3694 **** --- 5010,5018 ---- free (p->machine); p->machine = NULL; } + #endif /* TARGET_ABI_UNICOSMK */ + + /* Functions to save and restore alpha_return_addr_rtx. */ /* Start the ball rolling with RETURN_ADDR_RTX. */ *************** alpha_return_addr (count, frame) *** 3697,3723 **** int count; rtx frame ATTRIBUTE_UNUSED; { - rtx init, reg; - if (count != 0) return const0_rtx; ! reg = cfun->machine->ra_rtx; ! if (reg == NULL) ! { ! /* No rtx yet. Invent one, and initialize it from $26 in ! the prologue. */ ! reg = gen_reg_rtx (Pmode); ! cfun->machine->ra_rtx = reg; ! init = gen_rtx_SET (VOIDmode, reg, gen_rtx_REG (Pmode, REG_RA)); ! ! /* Emit the insn to the prologue with the other argument copies. */ ! push_topmost_sequence (); ! emit_insn_after (init, get_insns ()); ! pop_topmost_sequence (); ! } ! ! return reg; } /* Return or create a pseudo containing the gp value for the current --- 5021,5030 ---- int count; rtx frame ATTRIBUTE_UNUSED; { if (count != 0) return const0_rtx; ! return get_hard_reg_initial_val (Pmode, REG_RA); } /* Return or create a pseudo containing the gp value for the current *************** alpha_return_addr (count, frame) *** 3726,3746 **** rtx alpha_gp_save_rtx () { ! rtx init, reg; ! ! reg = cfun->machine->gp_save_rtx; ! if (reg == NULL) ! { ! reg = gen_reg_rtx (DImode); ! cfun->machine->gp_save_rtx = reg; ! init = gen_rtx_SET (VOIDmode, reg, gen_rtx_REG (DImode, 29)); ! ! push_topmost_sequence (); ! emit_insn_after (init, get_insns ()); ! pop_topmost_sequence (); ! } ! ! return reg; } static int --- 5033,5042 ---- rtx alpha_gp_save_rtx () { ! rtx r = get_hard_reg_initial_val (DImode, 29); ! if (GET_CODE (r) != MEM) ! r = gen_mem_addressof (r, NULL_TREE); ! return r; } static int *************** alpha_ra_ever_killed () *** 3748,3758 **** { rtx top; ! #ifdef ASM_OUTPUT_MI_THUNK ! if (current_function_is_thunk) ! return 0; ! #endif ! if (!cfun->machine->ra_rtx) return regs_ever_live[REG_RA]; push_topmost_sequence (); --- 5044,5050 ---- { rtx top; ! if (!has_hard_reg_initial_val (Pmode, REG_RA)) return regs_ever_live[REG_RA]; push_topmost_sequence (); *************** alpha_ra_ever_killed () *** 3763,3894 **** } ! /* Print an operand. Recognize special options, documented below. */ ! void ! print_operand (file, x, code) ! FILE *file; ! rtx x; ! int code; { ! int i; ! switch (code) { ! case '~': ! /* Print the assembler name of the current function. */ ! assemble_name (file, alpha_fnname); ! break; ! ! case '&': ! /* Generates fp-rounding mode suffix: nothing for normal, 'c' for ! chopped, 'm' for minus-infinity, and 'd' for dynamic rounding ! mode. alpha_fprm controls which suffix is generated. */ ! switch (alpha_fprm) ! { ! case ALPHA_FPRM_NORM: ! break; ! case ALPHA_FPRM_MINF: ! fputc ('m', file); ! break; ! case ALPHA_FPRM_CHOP: ! fputc ('c', file); ! break; ! case ALPHA_FPRM_DYN: ! fputc ('d', file); ! break; ! default: ! abort (); ! } ! break; ! case '\'': ! /* Generates trap-mode suffix for instructions that accept the su ! suffix only (cmpt et al). */ if (alpha_fptm >= ALPHA_FPTM_SU) ! fputs ("su", file); ! break; ! case '`': ! /* Generates trap-mode suffix for instructions that accept the ! v and sv suffix. The only instruction that needs this is cvtql. */ switch (alpha_fptm) { case ALPHA_FPTM_N: ! break; case ALPHA_FPTM_U: ! fputs ("v", file); ! break; case ALPHA_FPTM_SU: case ALPHA_FPTM_SUI: ! fputs ("sv", file); ! break; } break; ! case '(': ! /* Generates trap-mode suffix for instructions that accept the ! v, sv, and svi suffix. The only instruction that needs this ! is cvttq. */ switch (alpha_fptm) { case ALPHA_FPTM_N: ! break; case ALPHA_FPTM_U: ! fputs ("v", file); ! break; case ALPHA_FPTM_SU: ! fputs ("sv", file); ! break; case ALPHA_FPTM_SUI: ! fputs ("svi", file); ! break; } break; ! case ')': ! /* Generates trap-mode suffix for instructions that accept the u, su, ! and sui suffix. This is the bulk of the IEEE floating point ! instructions (addt et al). */ switch (alpha_fptm) { case ALPHA_FPTM_N: ! break; case ALPHA_FPTM_U: ! fputc ('u', file); ! break; case ALPHA_FPTM_SU: ! fputs ("su", file); ! break; case ALPHA_FPTM_SUI: ! fputs ("sui", file); ! break; } break; ! case '+': ! /* Generates trap-mode suffix for instructions that accept the sui ! suffix (cvtqt and cvtqs). */ ! switch (alpha_fptm) { ! case ALPHA_FPTM_N: ! case ALPHA_FPTM_U: ! case ALPHA_FPTM_SU: /* cvtqt/cvtqs can't cause underflow */ ! break; ! case ALPHA_FPTM_SUI: ! fputs ("sui", file); ! break; } break; case ',': /* Generates single precision instruction suffix. */ ! fprintf (file, "%c", (TARGET_FLOAT_VAX ? 'f' : 's')); break; case '-': /* Generates double precision instruction suffix. */ ! fprintf (file, "%c", (TARGET_FLOAT_VAX ? 'g' : 't')); break; case 'r': --- 5055,5224 ---- } ! /* Return the trap mode suffix applicable to the current ! instruction, or NULL. */ ! static const char * ! get_trap_mode_suffix () { ! enum attr_trap_suffix s = get_attr_trap_suffix (current_output_insn); ! switch (s) { ! case TRAP_SUFFIX_NONE: ! return NULL; ! case TRAP_SUFFIX_SU: if (alpha_fptm >= ALPHA_FPTM_SU) ! return "su"; ! return NULL; ! case TRAP_SUFFIX_SUI: ! if (alpha_fptm >= ALPHA_FPTM_SUI) ! return "sui"; ! return NULL; ! ! case TRAP_SUFFIX_V_SV: switch (alpha_fptm) { case ALPHA_FPTM_N: ! return NULL; case ALPHA_FPTM_U: ! return "v"; case ALPHA_FPTM_SU: case ALPHA_FPTM_SUI: ! return "sv"; } break; ! case TRAP_SUFFIX_V_SV_SVI: switch (alpha_fptm) { case ALPHA_FPTM_N: ! return NULL; case ALPHA_FPTM_U: ! return "v"; case ALPHA_FPTM_SU: ! return "sv"; case ALPHA_FPTM_SUI: ! return "svi"; } break; ! case TRAP_SUFFIX_U_SU_SUI: switch (alpha_fptm) { case ALPHA_FPTM_N: ! return NULL; case ALPHA_FPTM_U: ! return "u"; case ALPHA_FPTM_SU: ! return "su"; case ALPHA_FPTM_SUI: ! return "sui"; } break; + } + abort (); + } ! /* Return the rounding mode suffix applicable to the current ! instruction, or NULL. */ ! ! static const char * ! get_round_mode_suffix () ! { ! enum attr_round_suffix s = get_attr_round_suffix (current_output_insn); ! ! switch (s) ! { ! case ROUND_SUFFIX_NONE: ! return NULL; ! case ROUND_SUFFIX_NORMAL: ! switch (alpha_fprm) { ! case ALPHA_FPRM_NORM: ! return NULL; ! case ALPHA_FPRM_MINF: ! return "m"; ! case ALPHA_FPRM_CHOP: ! return "c"; ! case ALPHA_FPRM_DYN: ! return "d"; } break; + case ROUND_SUFFIX_C: + return "c"; + } + abort (); + } + + /* Print an operand. Recognize special options, documented below. */ + + void + print_operand (file, x, code) + FILE *file; + rtx x; + int code; + { + int i; + + switch (code) + { + case '~': + /* Print the assembler name of the current function. */ + assemble_name (file, alpha_fnname); + break; + + case '/': + { + const char *trap = get_trap_mode_suffix (); + const char *round = get_round_mode_suffix (); + + if (trap || round) + fprintf (file, (TARGET_AS_SLASH_BEFORE_SUFFIX ? "/%s%s" : "%s%s"), + (trap ? trap : ""), (round ? round : "")); + break; + } + case ',': /* Generates single precision instruction suffix. */ ! fputc ((TARGET_FLOAT_VAX ? 'f' : 's'), file); break; case '-': /* Generates double precision instruction suffix. */ ! fputc ((TARGET_FLOAT_VAX ? 'g' : 't'), file); ! break; ! ! case '#': ! if (alpha_this_literal_sequence_number == 0) ! alpha_this_literal_sequence_number = alpha_next_sequence_number++; ! fprintf (file, "%d", alpha_this_literal_sequence_number); ! break; ! ! case '*': ! if (alpha_this_gpdisp_sequence_number == 0) ! alpha_this_gpdisp_sequence_number = alpha_next_sequence_number++; ! fprintf (file, "%d", alpha_this_gpdisp_sequence_number); ! break; ! ! case 'H': ! if (GET_CODE (x) == HIGH) ! output_addr_const (file, XEXP (x, 0)); ! else ! output_operand_lossage ("invalid %%H value"); ! break; ! ! case 'J': ! if (GET_CODE (x) == CONST_INT) ! { ! if (INTVAL (x) != 0) ! fprintf (file, "\t\t!lituse_jsr!%d", (int) INTVAL (x)); ! } ! else ! output_operand_lossage ("invalid %%J value"); break; case 'r': *************** print_operand (file, x, code) *** 3899,3905 **** fprintf (file, "$31"); else output_operand_lossage ("invalid %%r value"); - break; case 'R': --- 5229,5234 ---- *************** print_operand (file, x, code) *** 3910,3916 **** fprintf (file, "$f31"); else output_operand_lossage ("invalid %%R value"); - break; case 'N': --- 5239,5244 ---- *************** print_operand (file, x, code) *** 4026,4038 **** break; case 's': ! /* Write the constant value divided by 8. */ if (GET_CODE (x) != CONST_INT ! && (unsigned HOST_WIDE_INT) INTVAL (x) >= 64 ! && (INTVAL (x) & 7) != 8) output_operand_lossage ("invalid %%s value"); ! fprintf (file, HOST_WIDE_INT_PRINT_DEC, INTVAL (x) / 8); break; case 'S': --- 5354,5373 ---- break; case 's': ! /* Write the constant value divided by 8 for little-endian mode or ! (56 - value) / 8 for big-endian mode. */ ! if (GET_CODE (x) != CONST_INT ! || (unsigned HOST_WIDE_INT) INTVAL (x) >= (WORDS_BIG_ENDIAN ! ? 56 ! : 64) ! || (INTVAL (x) & 7) != 0) output_operand_lossage ("invalid %%s value"); ! fprintf (file, HOST_WIDE_INT_PRINT_DEC, ! WORDS_BIG_ENDIAN ! ? (56 - INTVAL (x)) / 8 ! : INTVAL (x) / 8); break; case 'S': *************** print_operand (file, x, code) *** 4046,4051 **** --- 5381,5398 ---- fprintf (file, HOST_WIDE_INT_PRINT_DEC, (64 - INTVAL (x)) / 8); break; + case 't': + { + /* On Unicos/Mk systems: use a DEX expression if the symbol + clashes with a register name. */ + int dex = unicosmk_need_dex (x); + if (dex) + fprintf (file, "DEX(%d)", dex); + else + output_addr_const (file, x); + } + break; + case 'C': case 'D': case 'c': case 'd': /* Write out comparison name. */ { *************** print_operand_address (file, addr) *** 4131,4141 **** offset = INTVAL (XEXP (addr, 1)); addr = XEXP (addr, 0); } if (GET_CODE (addr) == REG) basereg = REGNO (addr); else if (GET_CODE (addr) == SUBREG && GET_CODE (SUBREG_REG (addr)) == REG) ! basereg = REGNO (SUBREG_REG (addr)) + SUBREG_WORD (addr); else if (GET_CODE (addr) == CONST_INT) offset = INTVAL (addr); else --- 5478,5512 ---- offset = INTVAL (XEXP (addr, 1)); addr = XEXP (addr, 0); } + + if (GET_CODE (addr) == LO_SUM) + { + output_addr_const (file, XEXP (addr, 1)); + if (offset) + { + fputc ('+', file); + fprintf (file, HOST_WIDE_INT_PRINT_DEC, offset); + } + + addr = XEXP (addr, 0); + if (GET_CODE (addr) == REG) + basereg = REGNO (addr); + else if (GET_CODE (addr) == SUBREG + && GET_CODE (SUBREG_REG (addr)) == REG) + basereg = subreg_regno (addr); + else + abort (); + + fprintf (file, "($%d)\t\t!%s", basereg, + (basereg == 29 ? "gprel" : "gprellow")); + return; + } + if (GET_CODE (addr) == REG) basereg = REGNO (addr); else if (GET_CODE (addr) == SUBREG && GET_CODE (SUBREG_REG (addr)) == REG) ! basereg = subreg_regno (addr); else if (GET_CODE (addr) == CONST_INT) offset = INTVAL (addr); else *************** alpha_initialize_trampoline (tramp, fnad *** 4165,4171 **** { rtx temp, temp1, addr; /* VMS really uses DImode pointers in memory at this point. */ ! enum machine_mode mode = TARGET_OPEN_VMS ? Pmode : ptr_mode; #ifdef POINTERS_EXTEND_UNSIGNED fnaddr = convert_memory_address (mode, fnaddr); --- 5536,5542 ---- { rtx temp, temp1, addr; /* VMS really uses DImode pointers in memory at this point. */ ! enum machine_mode mode = TARGET_ABI_OPEN_VMS ? Pmode : ptr_mode; #ifdef POINTERS_EXTEND_UNSIGNED fnaddr = convert_memory_address (mode, fnaddr); *************** alpha_initialize_trampoline (tramp, fnad *** 4179,4185 **** emit_move_insn (gen_rtx_MEM (mode, addr), cxt); /* This has been disabled since the hint only has a 32k range, and in ! no existing OS is the stack within 32k of the text segment. */ if (0 && jmpofs >= 0) { /* Compute hint value. */ --- 5550,5556 ---- emit_move_insn (gen_rtx_MEM (mode, addr), cxt); /* This has been disabled since the hint only has a 32k range, and in ! no existing OS is the stack within 32k of the text segment. */ if (0 && jmpofs >= 0) { /* Compute hint value. */ *************** alpha_initialize_trampoline (tramp, fnad *** 4188,4199 **** OPTAB_WIDEN); temp = expand_shift (RSHIFT_EXPR, Pmode, temp, build_int_2 (2, 0), NULL_RTX, 1); ! temp = expand_and (gen_lowpart (SImode, temp), GEN_INT (0x3fff), 0); /* Merge in the hint. */ addr = memory_address (SImode, plus_constant (tramp, jmpofs)); temp1 = force_reg (SImode, gen_rtx_MEM (SImode, addr)); ! temp1 = expand_and (temp1, GEN_INT (0xffffc000), NULL_RTX); temp1 = expand_binop (SImode, ior_optab, temp1, temp, temp1, 1, OPTAB_WIDEN); emit_move_insn (gen_rtx_MEM (SImode, addr), temp1); --- 5559,5571 ---- OPTAB_WIDEN); temp = expand_shift (RSHIFT_EXPR, Pmode, temp, build_int_2 (2, 0), NULL_RTX, 1); ! temp = expand_and (SImode, gen_lowpart (SImode, temp), ! GEN_INT (0x3fff), 0); /* Merge in the hint. */ addr = memory_address (SImode, plus_constant (tramp, jmpofs)); temp1 = force_reg (SImode, gen_rtx_MEM (SImode, addr)); ! temp1 = expand_and (SImode, temp1, GEN_INT (0xffffc000), NULL_RTX); temp1 = expand_binop (SImode, ior_optab, temp1, temp, temp1, 1, OPTAB_WIDEN); emit_move_insn (gen_rtx_MEM (SImode, addr), temp1); *************** function_arg (cum, mode, type, named) *** 4234,4266 **** int basereg; int num_args; ! #ifndef OPEN_VMS ! if (cum >= 6) ! return NULL_RTX; ! num_args = cum; ! ! /* VOID is passed as a special flag for "last argument". */ ! if (type == void_type_node) ! basereg = 16; ! else if (MUST_PASS_IN_STACK (mode, type)) ! return NULL_RTX; ! else if (FUNCTION_ARG_PASS_BY_REFERENCE (cum, mode, type, named)) ! basereg = 16; ! #else ! if (mode == VOIDmode) ! return alpha_arg_info_reg_val (cum); ! ! num_args = cum.num_args; ! if (num_args >= 6 || MUST_PASS_IN_STACK (mode, type)) ! return NULL_RTX; ! #endif /* OPEN_VMS */ ! else if (TARGET_FPREGS ! && (GET_MODE_CLASS (mode) == MODE_COMPLEX_FLOAT ! || GET_MODE_CLASS (mode) == MODE_FLOAT)) basereg = 32 + 16; else basereg = 16; return gen_rtx_REG (mode, num_args + basereg); } --- 5606,5713 ---- int basereg; int num_args; ! /* Set up defaults for FP operands passed in FP registers, and ! integral operands passed in integer registers. */ ! if (TARGET_FPREGS ! && (GET_MODE_CLASS (mode) == MODE_COMPLEX_FLOAT ! || GET_MODE_CLASS (mode) == MODE_FLOAT)) basereg = 32 + 16; else basereg = 16; + /* ??? Irritatingly, the definition of CUMULATIVE_ARGS is different for + the three platforms, so we can't avoid conditional compilation. */ + #if TARGET_ABI_OPEN_VMS + { + if (mode == VOIDmode) + return alpha_arg_info_reg_val (cum); + + num_args = cum.num_args; + if (num_args >= 6 || MUST_PASS_IN_STACK (mode, type)) + return NULL_RTX; + } + #else + #if TARGET_ABI_UNICOSMK + { + int size; + + /* If this is the last argument, generate the call info word (CIW). */ + /* ??? We don't include the caller's line number in the CIW because + I don't know how to determine it if debug infos are turned off. */ + if (mode == VOIDmode) + { + int i; + HOST_WIDE_INT lo; + HOST_WIDE_INT hi; + rtx ciw; + + lo = 0; + + for (i = 0; i < cum.num_reg_words && i < 5; i++) + if (cum.reg_args_type[i]) + lo |= (1 << (7 - i)); + + if (cum.num_reg_words == 6 && cum.reg_args_type[5]) + lo |= 7; + else + lo |= cum.num_reg_words; + + #if HOST_BITS_PER_WIDE_INT == 32 + hi = (cum.num_args << 20) | cum.num_arg_words; + #else + lo = lo | ((HOST_WIDE_INT) cum.num_args << 52) + | ((HOST_WIDE_INT) cum.num_arg_words << 32); + hi = 0; + #endif + ciw = immed_double_const (lo, hi, DImode); + + return gen_rtx_UNSPEC (DImode, gen_rtvec (1, ciw), + UNSPEC_UMK_LOAD_CIW); + } + + size = ALPHA_ARG_SIZE (mode, type, named); + num_args = cum.num_reg_words; + if (MUST_PASS_IN_STACK (mode, type) + || cum.num_reg_words + size > 6 || cum.force_stack) + return NULL_RTX; + else if (type && TYPE_MODE (type) == BLKmode) + { + rtx reg1, reg2; + + reg1 = gen_rtx_REG (DImode, num_args + 16); + reg1 = gen_rtx_EXPR_LIST (DImode, reg1, const0_rtx); + + /* The argument fits in two registers. Note that we still need to + reserve a register for empty structures. */ + if (size == 0) + return NULL_RTX; + else if (size == 1) + return gen_rtx_PARALLEL (mode, gen_rtvec (1, reg1)); + else + { + reg2 = gen_rtx_REG (DImode, num_args + 17); + reg2 = gen_rtx_EXPR_LIST (DImode, reg2, GEN_INT (8)); + return gen_rtx_PARALLEL (mode, gen_rtvec (2, reg1, reg2)); + } + } + } + #else + { + if (cum >= 6) + return NULL_RTX; + num_args = cum; + + /* VOID is passed as a special flag for "last argument". */ + if (type == void_type_node) + basereg = 16; + else if (MUST_PASS_IN_STACK (mode, type)) + return NULL_RTX; + else if (FUNCTION_ARG_PASS_BY_REFERENCE (cum, mode, type, named)) + basereg = 16; + } + #endif /* TARGET_ABI_UNICOSMK */ + #endif /* TARGET_ABI_OPEN_VMS */ + return gen_rtx_REG (mode, num_args + basereg); } *************** alpha_build_va_list () *** 4269,4275 **** { tree base, ofs, record, type_decl; ! if (TARGET_OPEN_VMS) return ptr_type_node; record = make_lang_type (RECORD_TYPE); --- 5716,5722 ---- { tree base, ofs, record, type_decl; ! if (TARGET_ABI_OPEN_VMS || TARGET_ABI_UNICOSMK) return ptr_type_node; record = make_lang_type (RECORD_TYPE); *************** alpha_va_start (stdarg_p, valist, nextar *** 4306,4312 **** if (TREE_CODE (TREE_TYPE (valist)) == ERROR_MARK) return; ! if (TARGET_OPEN_VMS) std_expand_builtin_va_start (stdarg_p, valist, nextarg); /* For Unix, SETUP_INCOMING_VARARGS moves the starting address base --- 5753,5759 ---- if (TREE_CODE (TREE_TYPE (valist)) == ERROR_MARK) return; ! if (TARGET_ABI_UNICOSMK) std_expand_builtin_va_start (stdarg_p, valist, nextarg); /* For Unix, SETUP_INCOMING_VARARGS moves the starting address base *************** alpha_va_start (stdarg_p, valist, nextar *** 4319,4363 **** in argsize above, but which are not actually stored on the stack. */ if (NUM_ARGS <= 5 + stdarg_p) ! offset = 6 * UNITS_PER_WORD; else offset = -6 * UNITS_PER_WORD; ! base_field = TYPE_FIELDS (TREE_TYPE (valist)); ! offset_field = TREE_CHAIN (base_field); ! base_field = build (COMPONENT_REF, TREE_TYPE (base_field), ! valist, base_field); ! offset_field = build (COMPONENT_REF, TREE_TYPE (offset_field), ! valist, offset_field); ! t = make_tree (ptr_type_node, virtual_incoming_args_rtx); ! t = build (PLUS_EXPR, ptr_type_node, t, build_int_2 (offset, 0)); ! t = build (MODIFY_EXPR, TREE_TYPE (base_field), base_field, t); ! TREE_SIDE_EFFECTS (t) = 1; ! expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); ! t = build_int_2 (NUM_ARGS*UNITS_PER_WORD, 0); ! t = build (MODIFY_EXPR, TREE_TYPE (offset_field), offset_field, t); ! TREE_SIDE_EFFECTS (t) = 1; ! expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); } rtx alpha_va_arg (valist, type) tree valist, type; { - HOST_WIDE_INT tsize; rtx addr; ! tree t; tree offset_field, base_field, addr_tree, addend; tree wide_type, wide_ofs; int indirect = 0; ! if (TARGET_OPEN_VMS) return std_expand_builtin_va_arg (valist, type); ! tsize = ((TREE_INT_CST_LOW (TYPE_SIZE (type)) / BITS_PER_UNIT + 7) / 8) * 8; base_field = TYPE_FIELDS (TREE_TYPE (valist)); offset_field = TREE_CHAIN (base_field); --- 5766,5833 ---- in argsize above, but which are not actually stored on the stack. */ if (NUM_ARGS <= 5 + stdarg_p) ! offset = TARGET_ABI_OPEN_VMS ? UNITS_PER_WORD : 6 * UNITS_PER_WORD; else offset = -6 * UNITS_PER_WORD; ! if (TARGET_ABI_OPEN_VMS) ! { ! nextarg = plus_constant (nextarg, offset); ! nextarg = plus_constant (nextarg, NUM_ARGS * UNITS_PER_WORD); ! t = build (MODIFY_EXPR, TREE_TYPE (valist), valist, ! make_tree (ptr_type_node, nextarg)); ! TREE_SIDE_EFFECTS (t) = 1; ! expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); ! } ! else ! { ! base_field = TYPE_FIELDS (TREE_TYPE (valist)); ! offset_field = TREE_CHAIN (base_field); ! base_field = build (COMPONENT_REF, TREE_TYPE (base_field), ! valist, base_field); ! offset_field = build (COMPONENT_REF, TREE_TYPE (offset_field), ! valist, offset_field); ! t = make_tree (ptr_type_node, virtual_incoming_args_rtx); ! t = build (PLUS_EXPR, ptr_type_node, t, build_int_2 (offset, 0)); ! t = build (MODIFY_EXPR, TREE_TYPE (base_field), base_field, t); ! TREE_SIDE_EFFECTS (t) = 1; ! expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); ! ! t = build_int_2 (NUM_ARGS * UNITS_PER_WORD, 0); ! t = build (MODIFY_EXPR, TREE_TYPE (offset_field), offset_field, t); ! TREE_SIDE_EFFECTS (t) = 1; ! expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); ! } } rtx alpha_va_arg (valist, type) tree valist, type; { rtx addr; ! tree t, type_size, rounded_size; tree offset_field, base_field, addr_tree, addend; tree wide_type, wide_ofs; int indirect = 0; ! if (TARGET_ABI_OPEN_VMS || TARGET_ABI_UNICOSMK) return std_expand_builtin_va_arg (valist, type); ! if (type == error_mark_node ! || (type_size = TYPE_SIZE_UNIT (TYPE_MAIN_VARIANT (type))) == NULL ! || TREE_OVERFLOW (type_size)) ! rounded_size = size_zero_node; ! else ! rounded_size = fold (build (MULT_EXPR, sizetype, ! fold (build (TRUNC_DIV_EXPR, sizetype, ! fold (build (PLUS_EXPR, sizetype, ! type_size, ! size_int (7))), ! size_int (8))), ! size_int (8))); base_field = TYPE_FIELDS (TREE_TYPE (valist)); offset_field = TREE_CHAIN (base_field); *************** alpha_va_arg (valist, type) *** 4367,4372 **** --- 5837,5853 ---- offset_field = build (COMPONENT_REF, TREE_TYPE (offset_field), valist, offset_field); + /* If the type could not be passed in registers, skip the block + reserved for the registers. */ + if (MUST_PASS_IN_STACK (TYPE_MODE (type), type)) + { + t = build (MODIFY_EXPR, TREE_TYPE (offset_field), offset_field, + build (MAX_EXPR, TREE_TYPE (offset_field), + offset_field, build_int_2 (6*8, 0))); + TREE_SIDE_EFFECTS (t) = 1; + expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); + } + wide_type = make_signed_type (64); wide_ofs = save_expr (build1 (CONVERT_EXPR, wide_type, offset_field)); *************** alpha_va_arg (valist, type) *** 4375,4381 **** if (TYPE_MODE (type) == TFmode || TYPE_MODE (type) == TCmode) { indirect = 1; ! tsize = UNITS_PER_WORD; } else if (FLOAT_TYPE_P (type)) { --- 5856,5862 ---- if (TYPE_MODE (type) == TFmode || TYPE_MODE (type) == TCmode) { indirect = 1; ! rounded_size = size_int (UNITS_PER_WORD); } else if (FLOAT_TYPE_P (type)) { *************** alpha_va_arg (valist, type) *** 4399,4405 **** t = build (MODIFY_EXPR, TREE_TYPE (offset_field), offset_field, build (PLUS_EXPR, TREE_TYPE (offset_field), ! offset_field, build_int_2 (tsize, 0))); TREE_SIDE_EFFECTS (t) = 1; expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); --- 5880,5886 ---- t = build (MODIFY_EXPR, TREE_TYPE (offset_field), offset_field, build (PLUS_EXPR, TREE_TYPE (offset_field), ! offset_field, rounded_size)); TREE_SIDE_EFFECTS (t) = 1; expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); *************** alpha_va_arg (valist, type) *** 4420,4429 **** /* These variables are used for communication between the following functions. They indicate various things about the current function being compiled that are used to tell what kind of prologue, epilogue and procedure ! descriptior to generate. */ /* Nonzero if we need a stack procedure. */ ! static int vms_is_stack_procedure; /* Register number (either FP or SP) that is used to unwind the frame. */ static int vms_unwind_regno; --- 5901,5911 ---- /* These variables are used for communication between the following functions. They indicate various things about the current function being compiled that are used to tell what kind of prologue, epilogue and procedure ! descriptior to generate. */ /* Nonzero if we need a stack procedure. */ ! enum alpha_procedure_types {PT_NULL = 0, PT_REGISTER = 1, PT_STACK = 2}; ! static enum alpha_procedure_types alpha_procedure_type; /* Register number (either FP or SP) that is used to unwind the frame. */ static int vms_unwind_regno; *************** alpha_sa_mask (imaskP, fmaskP) *** 4445,4485 **** { unsigned long imask = 0; unsigned long fmask = 0; ! int i; ! #ifdef ASM_OUTPUT_MI_THUNK ! if (!current_function_is_thunk) ! #endif { ! if (TARGET_OPEN_VMS && vms_is_stack_procedure) ! imask |= (1L << HARD_FRAME_POINTER_REGNUM); ! /* One for every register we have to save. */ ! for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) ! if (! fixed_regs[i] && ! call_used_regs[i] ! && regs_ever_live[i] && i != REG_RA) ! { ! if (i < 32) ! imask |= (1L << i); ! else ! fmask |= (1L << (i - 32)); ! } ! /* We need to restore these for the handler. */ ! if (current_function_calls_eh_return) ! { ! for (i = 0; ; ++i) ! { ! unsigned regno = EH_RETURN_DATA_REGNO (i); ! if (regno == INVALID_REGNUM) ! break; ! imask |= 1L << regno; ! } ! } ! if (imask || fmask || alpha_ra_ever_killed ()) ! imask |= (1L << REG_RA); ! } *imaskP = imask; *fmaskP = fmask; --- 5927,5976 ---- { unsigned long imask = 0; unsigned long fmask = 0; ! unsigned int i; ! /* Irritatingly, there are two kinds of thunks -- those created with ! ASM_OUTPUT_MI_THUNK and those with DECL_THUNK_P that go through ! the regular part of the compiler. In the ASM_OUTPUT_MI_THUNK case ! we don't have valid register life info, but assemble_start_function ! wants to output .frame and .mask directives. */ ! if (current_function_is_thunk && !no_new_pseudos) { ! *imaskP = 0; ! *fmaskP = 0; ! return; ! } ! if (TARGET_ABI_OPEN_VMS && alpha_procedure_type == PT_STACK) ! imask |= (1L << HARD_FRAME_POINTER_REGNUM); ! /* One for every register we have to save. */ ! for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) ! if (! fixed_regs[i] && ! call_used_regs[i] ! && regs_ever_live[i] && i != REG_RA ! && (!TARGET_ABI_UNICOSMK || i != HARD_FRAME_POINTER_REGNUM)) ! { ! if (i < 32) ! imask |= (1L << i); ! else ! fmask |= (1L << (i - 32)); ! } ! /* We need to restore these for the handler. */ ! if (current_function_calls_eh_return) ! for (i = 0; ; ++i) ! { ! unsigned regno = EH_RETURN_DATA_REGNO (i); ! if (regno == INVALID_REGNUM) ! break; ! imask |= 1L << regno; ! } ! ! /* If any register spilled, then spill the return address also. */ ! /* ??? This is required by the Digital stack unwind specification ! and isn't needed if we're doing Dwarf2 unwinding. */ ! if (imask || fmask || alpha_ra_ever_killed ()) ! imask |= (1L << REG_RA); *imaskP = imask; *fmaskP = fmask; *************** alpha_sa_mask (imaskP, fmaskP) *** 4488,4525 **** int alpha_sa_size () { int sa_size = 0; ! int i; ! #ifdef ASM_OUTPUT_MI_THUNK ! if (current_function_is_thunk) ! sa_size = 0; else - #endif { ! /* One for every register we have to save. */ ! for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) ! if (! fixed_regs[i] && ! call_used_regs[i] ! && regs_ever_live[i] && i != REG_RA) ! sa_size++; } ! if (TARGET_OPEN_VMS) { /* Start by assuming we can use a register procedure if we don't make any calls (REG_RA not used) or need to save any registers and a stack procedure if we do. */ ! vms_is_stack_procedure = sa_size != 0 || alpha_ra_ever_killed (); /* Decide whether to refer to objects off our PV via FP or PV. If we need FP for something else or if we receive a nonlocal goto (which expects PV to contain the value), we must use PV. Otherwise, start by assuming we can use FP. */ ! vms_base_regno = (frame_pointer_needed ! || current_function_has_nonlocal_label ! || vms_is_stack_procedure ! || current_function_outgoing_args_size ! ? REG_PV : HARD_FRAME_POINTER_REGNUM); /* If we want to copy PV into FP, we need to find some register in which to save FP. */ --- 5979,6051 ---- int alpha_sa_size () { + unsigned long mask[2]; int sa_size = 0; ! int i, j; ! alpha_sa_mask (&mask[0], &mask[1]); ! ! if (TARGET_ABI_UNICOSMK) ! { ! if (mask[0] || mask[1]) ! sa_size = 14; ! } else { ! for (j = 0; j < 2; ++j) ! for (i = 0; i < 32; ++i) ! if ((mask[j] >> i) & 1) ! sa_size++; } ! if (TARGET_ABI_UNICOSMK) ! { ! /* We might not need to generate a frame if we don't make any calls ! (including calls to __T3E_MISMATCH if this is a vararg function), ! don't have any local variables which require stack slots, don't ! use alloca and have not determined that we need a frame for other ! reasons. */ ! ! alpha_procedure_type ! = (sa_size || get_frame_size() != 0 ! || current_function_outgoing_args_size || current_function_varargs ! || current_function_stdarg || current_function_calls_alloca ! || frame_pointer_needed) ! ? PT_STACK : PT_REGISTER; ! ! /* Always reserve space for saving callee-saved registers if we ! need a frame as required by the calling convention. */ ! if (alpha_procedure_type == PT_STACK) ! sa_size = 14; ! } ! else if (TARGET_ABI_OPEN_VMS) { /* Start by assuming we can use a register procedure if we don't make any calls (REG_RA not used) or need to save any registers and a stack procedure if we do. */ ! if ((mask[0] >> REG_RA) & 1) ! alpha_procedure_type = PT_STACK; ! else if (get_frame_size() != 0) ! alpha_procedure_type = PT_REGISTER; ! else ! alpha_procedure_type = PT_NULL; ! ! /* Don't reserve space for saving FP & RA yet. Do that later after we've ! made the final decision on stack procedure vs register procedure. */ ! if (alpha_procedure_type == PT_STACK) ! sa_size -= 2; /* Decide whether to refer to objects off our PV via FP or PV. If we need FP for something else or if we receive a nonlocal goto (which expects PV to contain the value), we must use PV. Otherwise, start by assuming we can use FP. */ ! ! vms_base_regno ! = (frame_pointer_needed ! || current_function_has_nonlocal_label ! || alpha_procedure_type == PT_STACK ! || current_function_outgoing_args_size) ! ? REG_PV : HARD_FRAME_POINTER_REGNUM; /* If we want to copy PV into FP, we need to find some register in which to save FP. */ *************** alpha_sa_size () *** 4530,4553 **** if (! fixed_regs[i] && call_used_regs[i] && ! regs_ever_live[i]) vms_save_fp_regno = i; ! if (vms_save_fp_regno == -1) ! vms_base_regno = REG_PV, vms_is_stack_procedure = 1; /* Stack unwinding should be done via FP unless we use it for PV. */ vms_unwind_regno = (vms_base_regno == REG_PV ? HARD_FRAME_POINTER_REGNUM : STACK_POINTER_REGNUM); /* If this is a stack procedure, allow space for saving FP and RA. */ ! if (vms_is_stack_procedure) sa_size += 2; } else { - /* If some registers were saved but not RA, RA must also be saved, - so leave space for it. */ - if (sa_size != 0 || alpha_ra_ever_killed ()) - sa_size++; - /* Our size must be even (multiple of 16 bytes). */ if (sa_size & 1) sa_size++; --- 6056,6076 ---- if (! fixed_regs[i] && call_used_regs[i] && ! regs_ever_live[i]) vms_save_fp_regno = i; ! if (vms_save_fp_regno == -1 && alpha_procedure_type == PT_REGISTER) ! vms_base_regno = REG_PV, alpha_procedure_type = PT_STACK; ! else if (alpha_procedure_type == PT_NULL) ! vms_base_regno = REG_PV; /* Stack unwinding should be done via FP unless we use it for PV. */ vms_unwind_regno = (vms_base_regno == REG_PV ? HARD_FRAME_POINTER_REGNUM : STACK_POINTER_REGNUM); /* If this is a stack procedure, allow space for saving FP and RA. */ ! if (alpha_procedure_type == PT_STACK) sa_size += 2; } else { /* Our size must be even (multiple of 16 bytes). */ if (sa_size & 1) sa_size++; *************** int *** 4560,4566 **** alpha_pv_save_size () { alpha_sa_size (); ! return vms_is_stack_procedure ? 8 : 0; } int --- 6083,6089 ---- alpha_pv_save_size () { alpha_sa_size (); ! return alpha_procedure_type == PT_STACK ? 8 : 0; } int *************** alpha_using_fp () *** 4570,4585 **** return vms_unwind_regno == HARD_FRAME_POINTER_REGNUM; } ! int ! vms_valid_decl_attribute_p (decl, attributes, identifier, args) ! tree decl ATTRIBUTE_UNUSED; ! tree attributes ATTRIBUTE_UNUSED; ! tree identifier; ! tree args; { ! if (is_attribute_p ("overlaid", identifier)) ! return (args == NULL_TREE); ! return 0; } static int --- 6093,6117 ---- return vms_unwind_regno == HARD_FRAME_POINTER_REGNUM; } ! #if TARGET_ABI_OPEN_VMS ! ! const struct attribute_spec vms_attribute_table[] = { ! /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */ ! { "overlaid", 0, 0, true, false, false, NULL }, ! { "global", 0, 0, true, false, false, NULL }, ! { "initialize", 0, 0, true, false, false, NULL }, ! { NULL, 0, 0, false, false, false, NULL } ! }; ! ! #endif ! ! static int ! find_lo_sum (px, data) ! rtx *px; ! void *data ATTRIBUTE_UNUSED; ! { ! return GET_CODE (*px) == LO_SUM; } static int *************** alpha_does_function_need_gp () *** 4587,4603 **** { rtx insn; ! /* We never need a GP for Windows/NT or VMS. */ ! if (TARGET_WINDOWS_NT || TARGET_OPEN_VMS) return 0; ! if (TARGET_PROFILING_NEEDS_GP && profile_flag) return 1; - #ifdef ASM_OUTPUT_MI_THUNK if (current_function_is_thunk) return 1; - #endif /* If we need a GP (we have a LDSYM insn or a CALL_INSN), load it first. Even if we are a static function, we still need to do this in case --- 6119,6133 ---- { rtx insn; ! /* The GP being variable is an OSF abi thing. */ ! if (! TARGET_ABI_OSF) return 0; ! if (TARGET_PROFILING_NEEDS_GP && current_function_profile) return 1; if (current_function_is_thunk) return 1; /* If we need a GP (we have a LDSYM insn or a CALL_INSN), load it first. Even if we are a static function, we still need to do this in case *************** alpha_does_function_need_gp () *** 4615,4620 **** --- 6145,6153 ---- enum attr_type type = get_attr_type (insn); if (type == TYPE_LDSYM || type == TYPE_JSR) return 1; + if (TARGET_EXPLICIT_RELOCS + && for_each_rtx (&PATTERN (insn), find_lo_sum, NULL) > 0) + return 1; } return 0; *************** alpha_expand_prologue () *** 4697,4714 **** sa_size = alpha_sa_size (); frame_size = get_frame_size (); ! if (TARGET_OPEN_VMS) frame_size = ALPHA_ROUND (sa_size ! + (vms_is_stack_procedure ? 8 : 0) + frame_size + current_function_pretend_args_size); else frame_size = (ALPHA_ROUND (current_function_outgoing_args_size) + sa_size + ALPHA_ROUND (frame_size + current_function_pretend_args_size)); ! if (TARGET_OPEN_VMS) reg_offset = 8; else reg_offset = ALPHA_ROUND (current_function_outgoing_args_size); --- 6230,6253 ---- sa_size = alpha_sa_size (); frame_size = get_frame_size (); ! if (TARGET_ABI_OPEN_VMS) frame_size = ALPHA_ROUND (sa_size ! + (alpha_procedure_type == PT_STACK ? 8 : 0) + frame_size + current_function_pretend_args_size); + else if (TARGET_ABI_UNICOSMK) + /* We have to allocate space for the DSIB if we generate a frame. */ + frame_size = ALPHA_ROUND (sa_size + + (alpha_procedure_type == PT_STACK ? 48 : 0)) + + ALPHA_ROUND (frame_size + + current_function_outgoing_args_size); else frame_size = (ALPHA_ROUND (current_function_outgoing_args_size) + sa_size + ALPHA_ROUND (frame_size + current_function_pretend_args_size)); ! if (TARGET_ABI_OPEN_VMS) reg_offset = 8; else reg_offset = ALPHA_ROUND (current_function_outgoing_args_size); *************** alpha_expand_prologue () *** 4716,4722 **** alpha_sa_mask (&imask, &fmask); /* Emit an insn to reload GP, if needed. */ ! if (!TARGET_OPEN_VMS && !TARGET_WINDOWS_NT) { alpha_function_needs_gp = alpha_does_function_need_gp (); if (alpha_function_needs_gp) --- 6255,6261 ---- alpha_sa_mask (&imask, &fmask); /* Emit an insn to reload GP, if needed. */ ! if (TARGET_ABI_OSF) { alpha_function_needs_gp = alpha_does_function_need_gp (); if (alpha_function_needs_gp) *************** alpha_expand_prologue () *** 4727,4735 **** the call to mcount ourselves, rather than having the linker do it magically in response to -pg. Since _mcount has special linkage, don't represent the call as a call. */ ! if (TARGET_PROFILING_NEEDS_GP && profile_flag) emit_insn (gen_prologue_mcount ()); ! /* Adjust the stack by the frame size. If the frame size is > 4096 bytes, we need to be sure we probe somewhere in the first and last 4096 bytes (we can probably get away without the latter test) and --- 6266,6277 ---- the call to mcount ourselves, rather than having the linker do it magically in response to -pg. Since _mcount has special linkage, don't represent the call as a call. */ ! if (TARGET_PROFILING_NEEDS_GP && current_function_profile) emit_insn (gen_prologue_mcount ()); ! ! if (TARGET_ABI_UNICOSMK) ! unicosmk_gen_dsib (&imask); ! /* Adjust the stack by the frame size. If the frame size is > 4096 bytes, we need to be sure we probe somewhere in the first and last 4096 bytes (we can probably get away without the latter test) and *************** alpha_expand_prologue () *** 4746,4752 **** int probed = 4096; do ! emit_insn (gen_probe_stack (GEN_INT (-probed))); while ((probed += 8192) < frame_size); /* We only have to do this probe if we aren't saving registers. */ --- 6288,6296 ---- int probed = 4096; do ! emit_insn (gen_probe_stack (GEN_INT (TARGET_ABI_UNICOSMK ! ? -probed + 64 ! : -probed))); while ((probed += 8192) < frame_size); /* We only have to do this probe if we aren't saving registers. */ *************** alpha_expand_prologue () *** 4756,4762 **** if (frame_size != 0) FRP (emit_insn (gen_adddi3 (stack_pointer_rtx, stack_pointer_rtx, ! GEN_INT (-frame_size)))); } else { --- 6300,6308 ---- if (frame_size != 0) FRP (emit_insn (gen_adddi3 (stack_pointer_rtx, stack_pointer_rtx, ! GEN_INT (TARGET_ABI_UNICOSMK ! ? -frame_size + 64 ! : -frame_size)))); } else { *************** alpha_expand_prologue () *** 4773,4779 **** rtx seq; emit_move_insn (count, GEN_INT (blocks)); ! emit_insn (gen_adddi3 (ptr, stack_pointer_rtx, GEN_INT (4096))); /* Because of the difficulty in emitting a new basic block this late in the compilation, generate the loop as a single insn. */ --- 6319,6326 ---- rtx seq; emit_move_insn (count, GEN_INT (blocks)); ! emit_insn (gen_adddi3 (ptr, stack_pointer_rtx, ! GEN_INT (TARGET_ABI_UNICOSMK ? 4096 - 64 : 4096))); /* Because of the difficulty in emitting a new basic block this late in the compilation, generate the loop as a single insn. */ *************** alpha_expand_prologue () *** 4786,4792 **** emit_move_insn (last, const0_rtx); } ! if (TARGET_WINDOWS_NT) { /* For NT stack unwind (done by 'reverse execution'), it's not OK to take the result of a loop, even though the value --- 6333,6339 ---- emit_move_insn (last, const0_rtx); } ! if (TARGET_ABI_WINDOWS_NT) { /* For NT stack unwind (done by 'reverse execution'), it's not OK to take the result of a loop, even though the value *************** alpha_expand_prologue () *** 4820,4894 **** = gen_rtx_EXPR_LIST (REG_FRAME_RELATED_EXPR, gen_rtx_SET (VOIDmode, stack_pointer_rtx, gen_rtx_PLUS (Pmode, stack_pointer_rtx, ! GEN_INT (-frame_size))), REG_NOTES (seq)); } ! /* Cope with very large offsets to the register save area. */ ! sa_reg = stack_pointer_rtx; ! if (reg_offset + sa_size > 0x8000) { ! int low = ((reg_offset & 0xffff) ^ 0x8000) - 0x8000; ! HOST_WIDE_INT bias; ! if (low + sa_size <= 0x8000) ! bias = reg_offset - low, reg_offset = low; ! else ! bias = reg_offset, reg_offset = 0; ! sa_reg = gen_rtx_REG (DImode, 24); ! FRP (emit_insn (gen_adddi3 (sa_reg, stack_pointer_rtx, GEN_INT (bias)))); ! } ! /* Save regs in stack order. Beginning with VMS PV. */ ! if (TARGET_OPEN_VMS && vms_is_stack_procedure) ! { ! mem = gen_rtx_MEM (DImode, stack_pointer_rtx); ! MEM_ALIAS_SET (mem) = alpha_sr_alias_set; ! FRP (emit_move_insn (mem, gen_rtx_REG (DImode, REG_PV))); ! } ! /* Save register RA next. */ ! if (imask & (1L << REG_RA)) ! { ! mem = gen_rtx_MEM (DImode, plus_constant (sa_reg, reg_offset)); ! MEM_ALIAS_SET (mem) = alpha_sr_alias_set; ! FRP (emit_move_insn (mem, gen_rtx_REG (DImode, REG_RA))); ! imask &= ~(1L << REG_RA); ! reg_offset += 8; ! } ! /* Now save any other registers required to be saved. */ ! for (i = 0; i < 32; i++) ! if (imask & (1L << i)) ! { ! mem = gen_rtx_MEM (DImode, plus_constant (sa_reg, reg_offset)); ! MEM_ALIAS_SET (mem) = alpha_sr_alias_set; ! FRP (emit_move_insn (mem, gen_rtx_REG (DImode, i))); ! reg_offset += 8; ! } ! for (i = 0; i < 32; i++) ! if (fmask & (1L << i)) ! { ! mem = gen_rtx_MEM (DFmode, plus_constant (sa_reg, reg_offset)); ! MEM_ALIAS_SET (mem) = alpha_sr_alias_set; ! FRP (emit_move_insn (mem, gen_rtx_REG (DFmode, i+32))); ! reg_offset += 8; ! } ! if (TARGET_OPEN_VMS) { ! if (!vms_is_stack_procedure) ! /* Register frame procedures fave the fp. */ ! FRP (emit_move_insn (gen_rtx_REG (DImode, vms_save_fp_regno), ! hard_frame_pointer_rtx)); ! if (vms_base_regno != REG_PV) ! FRP (emit_move_insn (gen_rtx_REG (DImode, vms_base_regno), ! gen_rtx_REG (DImode, REG_PV))); ! if (vms_unwind_regno == HARD_FRAME_POINTER_REGNUM) FRP (emit_move_insn (hard_frame_pointer_rtx, stack_pointer_rtx)); /* If we have to allocate space for outgoing args, do it now. */ --- 6367,6475 ---- = gen_rtx_EXPR_LIST (REG_FRAME_RELATED_EXPR, gen_rtx_SET (VOIDmode, stack_pointer_rtx, gen_rtx_PLUS (Pmode, stack_pointer_rtx, ! GEN_INT (TARGET_ABI_UNICOSMK ! ? -frame_size + 64 ! : -frame_size))), REG_NOTES (seq)); } ! if (!TARGET_ABI_UNICOSMK) { ! /* Cope with very large offsets to the register save area. */ ! sa_reg = stack_pointer_rtx; ! if (reg_offset + sa_size > 0x8000) ! { ! int low = ((reg_offset & 0xffff) ^ 0x8000) - 0x8000; ! HOST_WIDE_INT bias; ! if (low + sa_size <= 0x8000) ! bias = reg_offset - low, reg_offset = low; ! else ! bias = reg_offset, reg_offset = 0; ! sa_reg = gen_rtx_REG (DImode, 24); ! FRP (emit_insn (gen_adddi3 (sa_reg, stack_pointer_rtx, ! GEN_INT (bias)))); ! } ! /* Save regs in stack order. Beginning with VMS PV. */ ! if (TARGET_ABI_OPEN_VMS && alpha_procedure_type == PT_STACK) ! { ! mem = gen_rtx_MEM (DImode, stack_pointer_rtx); ! set_mem_alias_set (mem, alpha_sr_alias_set); ! FRP (emit_move_insn (mem, gen_rtx_REG (DImode, REG_PV))); ! } ! /* Save register RA next. */ ! if (imask & (1L << REG_RA)) ! { ! mem = gen_rtx_MEM (DImode, plus_constant (sa_reg, reg_offset)); ! set_mem_alias_set (mem, alpha_sr_alias_set); ! FRP (emit_move_insn (mem, gen_rtx_REG (DImode, REG_RA))); ! imask &= ~(1L << REG_RA); ! reg_offset += 8; ! } ! /* Now save any other registers required to be saved. */ ! for (i = 0; i < 32; i++) ! if (imask & (1L << i)) ! { ! mem = gen_rtx_MEM (DImode, plus_constant (sa_reg, reg_offset)); ! set_mem_alias_set (mem, alpha_sr_alias_set); ! FRP (emit_move_insn (mem, gen_rtx_REG (DImode, i))); ! reg_offset += 8; ! } ! for (i = 0; i < 32; i++) ! if (fmask & (1L << i)) ! { ! mem = gen_rtx_MEM (DFmode, plus_constant (sa_reg, reg_offset)); ! set_mem_alias_set (mem, alpha_sr_alias_set); ! FRP (emit_move_insn (mem, gen_rtx_REG (DFmode, i+32))); ! reg_offset += 8; ! } ! } ! else if (TARGET_ABI_UNICOSMK && alpha_procedure_type == PT_STACK) ! { ! /* The standard frame on the T3E includes space for saving registers. ! We just have to use it. We don't have to save the return address and ! the old frame pointer here - they are saved in the DSIB. */ ! reg_offset = -56; ! for (i = 9; i < 15; i++) ! if (imask & (1L << i)) ! { ! mem = gen_rtx_MEM (DImode, plus_constant(hard_frame_pointer_rtx, ! reg_offset)); ! set_mem_alias_set (mem, alpha_sr_alias_set); ! FRP (emit_move_insn (mem, gen_rtx_REG (DImode, i))); ! reg_offset -= 8; ! } ! for (i = 2; i < 10; i++) ! if (fmask & (1L << i)) ! { ! mem = gen_rtx_MEM (DFmode, plus_constant (hard_frame_pointer_rtx, ! reg_offset)); ! set_mem_alias_set (mem, alpha_sr_alias_set); ! FRP (emit_move_insn (mem, gen_rtx_REG (DFmode, i+32))); ! reg_offset -= 8; ! } ! } ! ! if (TARGET_ABI_OPEN_VMS) { ! if (alpha_procedure_type == PT_REGISTER) ! /* Register frame procedures save the fp. ! ?? Ought to have a dwarf2 save for this. */ ! emit_move_insn (gen_rtx_REG (DImode, vms_save_fp_regno), ! hard_frame_pointer_rtx); ! if (alpha_procedure_type != PT_NULL && vms_base_regno != REG_PV) ! emit_insn (gen_force_movdi (gen_rtx_REG (DImode, vms_base_regno), ! gen_rtx_REG (DImode, REG_PV))); ! if (alpha_procedure_type != PT_NULL ! && vms_unwind_regno == HARD_FRAME_POINTER_REGNUM) FRP (emit_move_insn (hard_frame_pointer_rtx, stack_pointer_rtx)); /* If we have to allocate space for outgoing args, do it now. */ *************** alpha_expand_prologue () *** 4899,4905 **** - (ALPHA_ROUND (current_function_outgoing_args_size))))); } ! else { /* If we need a frame pointer, set it from the stack pointer. */ if (frame_pointer_needed) --- 6480,6486 ---- - (ALPHA_ROUND (current_function_outgoing_args_size))))); } ! else if (!TARGET_ABI_UNICOSMK) { /* If we need a frame pointer, set it from the stack pointer. */ if (frame_pointer_needed) *************** alpha_start_function (file, fnname, decl *** 4947,4968 **** char *entry_label = (char *) alloca (strlen (fnname) + 6); int i; alpha_fnname = fnname; sa_size = alpha_sa_size (); frame_size = get_frame_size (); ! if (TARGET_OPEN_VMS) frame_size = ALPHA_ROUND (sa_size ! + (vms_is_stack_procedure ? 8 : 0) + frame_size + current_function_pretend_args_size); else frame_size = (ALPHA_ROUND (current_function_outgoing_args_size) + sa_size + ALPHA_ROUND (frame_size + current_function_pretend_args_size)); ! if (TARGET_OPEN_VMS) reg_offset = 8; else reg_offset = ALPHA_ROUND (current_function_outgoing_args_size); --- 6528,6562 ---- char *entry_label = (char *) alloca (strlen (fnname) + 6); int i; + /* Don't emit an extern directive for functions defined in the same file. */ + if (TARGET_ABI_UNICOSMK) + { + tree name_tree; + name_tree = get_identifier (fnname); + TREE_ASM_WRITTEN (name_tree) = 1; + } + alpha_fnname = fnname; sa_size = alpha_sa_size (); frame_size = get_frame_size (); ! if (TARGET_ABI_OPEN_VMS) frame_size = ALPHA_ROUND (sa_size ! + (alpha_procedure_type == PT_STACK ? 8 : 0) + frame_size + current_function_pretend_args_size); + else if (TARGET_ABI_UNICOSMK) + frame_size = ALPHA_ROUND (sa_size + + (alpha_procedure_type == PT_STACK ? 48 : 0)) + + ALPHA_ROUND (frame_size + + current_function_outgoing_args_size); else frame_size = (ALPHA_ROUND (current_function_outgoing_args_size) + sa_size + ALPHA_ROUND (frame_size + current_function_pretend_args_size)); ! if (TARGET_ABI_OPEN_VMS) reg_offset = 8; else reg_offset = ALPHA_ROUND (current_function_outgoing_args_size); *************** alpha_start_function (file, fnname, decl *** 4979,4993 **** if (write_symbols == SDB_DEBUG) { ASM_OUTPUT_SOURCE_FILENAME (file, DECL_SOURCE_FILE (current_function_decl)); if (debug_info_level != DINFO_LEVEL_TERSE) ASM_OUTPUT_SOURCE_LINE (file, DECL_SOURCE_LINE (current_function_decl)); } /* Issue function start and label. */ ! if (TARGET_OPEN_VMS || !flag_inhibit_size_directive) { fputs ("\t.ent ", file); assemble_name (file, fnname); --- 6573,6592 ---- if (write_symbols == SDB_DEBUG) { + #ifdef ASM_OUTPUT_SOURCE_FILENAME ASM_OUTPUT_SOURCE_FILENAME (file, DECL_SOURCE_FILE (current_function_decl)); + #endif + #ifdef ASM_OUTPUT_SOURCE_LINE if (debug_info_level != DINFO_LEVEL_TERSE) ASM_OUTPUT_SOURCE_LINE (file, DECL_SOURCE_LINE (current_function_decl)); + #endif } /* Issue function start and label. */ ! if (TARGET_ABI_OPEN_VMS ! || (!TARGET_ABI_UNICOSMK && !flag_inhibit_size_directive)) { fputs ("\t.ent ", file); assemble_name (file, fnname); *************** alpha_start_function (file, fnname, decl *** 4995,5002 **** /* If the function needs GP, we'll write the "..ng" label there. Otherwise, do it here. */ ! if (! TARGET_OPEN_VMS && ! TARGET_WINDOWS_NT ! && ! alpha_function_needs_gp) { putc ('$', file); assemble_name (file, fnname); --- 6594,6602 ---- /* If the function needs GP, we'll write the "..ng" label there. Otherwise, do it here. */ ! if (TARGET_ABI_OSF ! && ! alpha_function_needs_gp ! && ! current_function_is_thunk) { putc ('$', file); assemble_name (file, fnname); *************** alpha_start_function (file, fnname, decl *** 5005,5024 **** } strcpy (entry_label, fnname); ! if (TARGET_OPEN_VMS) strcat (entry_label, "..en"); ASM_OUTPUT_LABEL (file, entry_label); inside_function = TRUE; ! if (TARGET_OPEN_VMS) fprintf (file, "\t.base $%d\n", vms_base_regno); ! if (!TARGET_OPEN_VMS && TARGET_IEEE_CONFORMANT && !flag_inhibit_size_directive) { /* Set flags in procedure descriptor to request IEEE-conformant math-library routines. The value we set it to is PDSC_EXC_IEEE ! (/usr/include/pdsc.h). */ fputs ("\t.eflag 48\n", file); } --- 6605,6630 ---- } strcpy (entry_label, fnname); ! if (TARGET_ABI_OPEN_VMS) strcat (entry_label, "..en"); + + /* For public functions, the label must be globalized by appending an + additional colon. */ + if (TARGET_ABI_UNICOSMK && TREE_PUBLIC (decl)) + strcat (entry_label, ":"); + ASM_OUTPUT_LABEL (file, entry_label); inside_function = TRUE; ! if (TARGET_ABI_OPEN_VMS) fprintf (file, "\t.base $%d\n", vms_base_regno); ! if (!TARGET_ABI_OPEN_VMS && !TARGET_ABI_UNICOSMK && TARGET_IEEE_CONFORMANT && !flag_inhibit_size_directive) { /* Set flags in procedure descriptor to request IEEE-conformant math-library routines. The value we set it to is PDSC_EXC_IEEE ! (/usr/include/pdsc.h). */ fputs ("\t.eflag 48\n", file); } *************** alpha_start_function (file, fnname, decl *** 5029,5039 **** /* Describe our frame. If the frame size is larger than an integer, print it as zero to avoid an assembler error. We won't be properly describing such a frame, but that's the best we can do. */ ! if (TARGET_OPEN_VMS) { fprintf (file, "\t.frame $%d,", vms_unwind_regno); fprintf (file, HOST_WIDE_INT_PRINT_DEC, ! frame_size >= (1l << 31) ? 0 : frame_size); fputs (",$26,", file); fprintf (file, HOST_WIDE_INT_PRINT_DEC, reg_offset); fputs ("\n", file); --- 6635,6647 ---- /* Describe our frame. If the frame size is larger than an integer, print it as zero to avoid an assembler error. We won't be properly describing such a frame, but that's the best we can do. */ ! if (TARGET_ABI_UNICOSMK) ! ; ! else if (TARGET_ABI_OPEN_VMS) { fprintf (file, "\t.frame $%d,", vms_unwind_regno); fprintf (file, HOST_WIDE_INT_PRINT_DEC, ! frame_size >= ((HOST_WIDE_INT) 1 << 31) ? 0 : frame_size); fputs (",$26,", file); fprintf (file, HOST_WIDE_INT_PRINT_DEC, reg_offset); fputs ("\n", file); *************** alpha_start_function (file, fnname, decl *** 5049,5063 **** } /* Describe which registers were spilled. */ ! if (TARGET_OPEN_VMS) { if (imask) ! /* ??? Does VMS care if mask contains ra? The old code did'nt set it, so I don't here. */ fprintf (file, "\t.mask 0x%lx,0\n", imask & ~(1L << REG_RA)); if (fmask) fprintf (file, "\t.fmask 0x%lx,0\n", fmask); ! if (!vms_is_stack_procedure) fprintf (file, "\t.fp_save $%d\n", vms_save_fp_regno); } else if (!flag_inhibit_size_directive) --- 6657,6673 ---- } /* Describe which registers were spilled. */ ! if (TARGET_ABI_UNICOSMK) ! ; ! else if (TARGET_ABI_OPEN_VMS) { if (imask) ! /* ??? Does VMS care if mask contains ra? The old code didn't set it, so I don't here. */ fprintf (file, "\t.mask 0x%lx,0\n", imask & ~(1L << REG_RA)); if (fmask) fprintf (file, "\t.fmask 0x%lx,0\n", fmask); ! if (alpha_procedure_type == PT_REGISTER) fprintf (file, "\t.fp_save $%d\n", vms_save_fp_regno); } else if (!flag_inhibit_size_directive) *************** alpha_start_function (file, fnname, decl *** 5083,5089 **** } } ! #ifdef OPEN_VMS /* Ifdef'ed cause readonly_section and link_section are only available then. */ readonly_section (); --- 6693,6699 ---- } } ! #if TARGET_ABI_OPEN_VMS /* Ifdef'ed cause readonly_section and link_section are only available then. */ readonly_section (); *************** alpha_start_function (file, fnname, decl *** 5101,5107 **** ASM_OUTPUT_LABEL (file, fnname); fprintf (file, "\t.pdesc "); assemble_name (file, fnname); ! fprintf (file, "..en,%s\n", vms_is_stack_procedure ? "stack" : "reg"); alpha_need_linkage (fnname, 1); text_section (); #endif --- 6711,6719 ---- ASM_OUTPUT_LABEL (file, fnname); fprintf (file, "\t.pdesc "); assemble_name (file, fnname); ! fprintf (file, "..en,%s\n", ! alpha_procedure_type == PT_STACK ? "stack" ! : alpha_procedure_type == PT_REGISTER ? "reg" : "null"); alpha_need_linkage (fnname, 1); text_section (); #endif *************** alpha_start_function (file, fnname, decl *** 5109,5124 **** /* Emit the .prologue note at the scheduled end of the prologue. */ ! void ! output_end_prologue (file) FILE *file; { ! if (TARGET_OPEN_VMS) fputs ("\t.prologue\n", file); ! else if (TARGET_WINDOWS_NT) fputs ("\t.prologue 0\n", file); else if (!flag_inhibit_size_directive) ! fprintf (file, "\t.prologue %d\n", alpha_function_needs_gp); } /* Write function epilogue. */ --- 6721,6739 ---- /* Emit the .prologue note at the scheduled end of the prologue. */ ! static void ! alpha_output_function_end_prologue (file) FILE *file; { ! if (TARGET_ABI_UNICOSMK) ! ; ! else if (TARGET_ABI_OPEN_VMS) fputs ("\t.prologue\n", file); ! else if (TARGET_ABI_WINDOWS_NT) fputs ("\t.prologue 0\n", file); else if (!flag_inhibit_size_directive) ! fprintf (file, "\t.prologue %d\n", ! alpha_function_needs_gp || current_function_is_thunk); } /* Write function epilogue. */ *************** alpha_expand_epilogue () *** 5150,5175 **** sa_size = alpha_sa_size (); frame_size = get_frame_size (); ! if (TARGET_OPEN_VMS) frame_size = ALPHA_ROUND (sa_size ! + (vms_is_stack_procedure ? 8 : 0) + frame_size + current_function_pretend_args_size); else frame_size = (ALPHA_ROUND (current_function_outgoing_args_size) + sa_size + ALPHA_ROUND (frame_size + current_function_pretend_args_size)); ! if (TARGET_OPEN_VMS) ! reg_offset = 8; else reg_offset = ALPHA_ROUND (current_function_outgoing_args_size); alpha_sa_mask (&imask, &fmask); ! fp_is_frame_pointer = ((TARGET_OPEN_VMS && vms_is_stack_procedure) ! || (!TARGET_OPEN_VMS && frame_pointer_needed)); fp_offset = 0; sa_reg = stack_pointer_rtx; --- 6765,6801 ---- sa_size = alpha_sa_size (); frame_size = get_frame_size (); ! if (TARGET_ABI_OPEN_VMS) frame_size = ALPHA_ROUND (sa_size ! + (alpha_procedure_type == PT_STACK ? 8 : 0) + frame_size + current_function_pretend_args_size); + else if (TARGET_ABI_UNICOSMK) + frame_size = ALPHA_ROUND (sa_size + + (alpha_procedure_type == PT_STACK ? 48 : 0)) + + ALPHA_ROUND (frame_size + + current_function_outgoing_args_size); else frame_size = (ALPHA_ROUND (current_function_outgoing_args_size) + sa_size + ALPHA_ROUND (frame_size + current_function_pretend_args_size)); ! if (TARGET_ABI_OPEN_VMS) ! { ! if (alpha_procedure_type == PT_STACK) ! reg_offset = 8; ! else ! reg_offset = 0; ! } else reg_offset = ALPHA_ROUND (current_function_outgoing_args_size); alpha_sa_mask (&imask, &fmask); ! fp_is_frame_pointer ! = ((TARGET_ABI_OPEN_VMS && alpha_procedure_type == PT_STACK) ! || (!TARGET_ABI_OPEN_VMS && frame_pointer_needed)); fp_offset = 0; sa_reg = stack_pointer_rtx; *************** alpha_expand_epilogue () *** 5178,5189 **** else eh_ofs = NULL_RTX; ! if (sa_size) { /* If we have a frame pointer, restore SP from it. */ ! if ((TARGET_OPEN_VMS && vms_unwind_regno == HARD_FRAME_POINTER_REGNUM) ! || (!TARGET_OPEN_VMS && frame_pointer_needed)) FRP (emit_move_insn (stack_pointer_rtx, hard_frame_pointer_rtx)); /* Cope with very large offsets to the register save area. */ --- 6804,6815 ---- else eh_ofs = NULL_RTX; ! if (!TARGET_ABI_UNICOSMK && sa_size) { /* If we have a frame pointer, restore SP from it. */ ! if ((TARGET_ABI_OPEN_VMS && vms_unwind_regno == HARD_FRAME_POINTER_REGNUM) ! || (!TARGET_ABI_OPEN_VMS && frame_pointer_needed)) FRP (emit_move_insn (stack_pointer_rtx, hard_frame_pointer_rtx)); /* Cope with very large offsets to the register save area. */ *************** alpha_expand_epilogue () *** 5203,5213 **** FRP (emit_move_insn (sa_reg, sa_reg_exp)); } ! /* Restore registers in order, excepting a true frame pointer. */ mem = gen_rtx_MEM (DImode, plus_constant (sa_reg, reg_offset)); if (! eh_ofs) ! MEM_ALIAS_SET (mem) = alpha_sr_alias_set; FRP (emit_move_insn (gen_rtx_REG (DImode, REG_RA), mem)); reg_offset += 8; --- 6829,6839 ---- FRP (emit_move_insn (sa_reg, sa_reg_exp)); } ! /* Restore registers in order, excepting a true frame pointer. */ mem = gen_rtx_MEM (DImode, plus_constant (sa_reg, reg_offset)); if (! eh_ofs) ! set_mem_alias_set (mem, alpha_sr_alias_set); FRP (emit_move_insn (gen_rtx_REG (DImode, REG_RA), mem)); reg_offset += 8; *************** alpha_expand_epilogue () *** 5221,5227 **** else { mem = gen_rtx_MEM (DImode, plus_constant(sa_reg, reg_offset)); ! MEM_ALIAS_SET (mem) = alpha_sr_alias_set; FRP (emit_move_insn (gen_rtx_REG (DImode, i), mem)); } reg_offset += 8; --- 6847,6853 ---- else { mem = gen_rtx_MEM (DImode, plus_constant(sa_reg, reg_offset)); ! set_mem_alias_set (mem, alpha_sr_alias_set); FRP (emit_move_insn (gen_rtx_REG (DImode, i), mem)); } reg_offset += 8; *************** alpha_expand_epilogue () *** 5231,5241 **** if (fmask & (1L << i)) { mem = gen_rtx_MEM (DFmode, plus_constant(sa_reg, reg_offset)); ! MEM_ALIAS_SET (mem) = alpha_sr_alias_set; FRP (emit_move_insn (gen_rtx_REG (DFmode, i+32), mem)); reg_offset += 8; } } if (frame_size || eh_ofs) { --- 6857,6899 ---- if (fmask & (1L << i)) { mem = gen_rtx_MEM (DFmode, plus_constant(sa_reg, reg_offset)); ! set_mem_alias_set (mem, alpha_sr_alias_set); FRP (emit_move_insn (gen_rtx_REG (DFmode, i+32), mem)); reg_offset += 8; } } + else if (TARGET_ABI_UNICOSMK && alpha_procedure_type == PT_STACK) + { + /* Restore callee-saved general-purpose registers. */ + + reg_offset = -56; + + for (i = 9; i < 15; i++) + if (imask & (1L << i)) + { + mem = gen_rtx_MEM (DImode, plus_constant(hard_frame_pointer_rtx, + reg_offset)); + set_mem_alias_set (mem, alpha_sr_alias_set); + FRP (emit_move_insn (gen_rtx_REG (DImode, i), mem)); + reg_offset -= 8; + } + + for (i = 2; i < 10; i++) + if (fmask & (1L << i)) + { + mem = gen_rtx_MEM (DFmode, plus_constant(hard_frame_pointer_rtx, + reg_offset)); + set_mem_alias_set (mem, alpha_sr_alias_set); + FRP (emit_move_insn (gen_rtx_REG (DFmode, i+32), mem)); + reg_offset -= 8; + } + + /* Restore the return address from the DSIB. */ + + mem = gen_rtx_MEM (DImode, plus_constant(hard_frame_pointer_rtx, -8)); + set_mem_alias_set (mem, alpha_sr_alias_set); + FRP (emit_move_insn (gen_rtx_REG (DImode, REG_RA), mem)); + } if (frame_size || eh_ofs) { *************** alpha_expand_epilogue () *** 5251,5258 **** /* If the stack size is large, begin computation into a temporary register so as not to interfere with a potential fp restore, which must be consecutive with an SP restore. */ ! if (frame_size < 32768) sp_adj2 = GEN_INT (frame_size); else if (frame_size < 0x40007fffL) { int low = ((frame_size & 0xffff) ^ 0x8000) - 0x8000; --- 6909,6923 ---- /* If the stack size is large, begin computation into a temporary register so as not to interfere with a potential fp restore, which must be consecutive with an SP restore. */ ! if (frame_size < 32768 ! && ! (TARGET_ABI_UNICOSMK && current_function_calls_alloca)) sp_adj2 = GEN_INT (frame_size); + else if (TARGET_ABI_UNICOSMK) + { + sp_adj1 = gen_rtx_REG (DImode, 23); + FRP (emit_move_insn (sp_adj1, hard_frame_pointer_rtx)); + sp_adj2 = const0_rtx; + } else if (frame_size < 0x40007fffL) { int low = ((frame_size & 0xffff) ^ 0x8000) - 0x8000; *************** alpha_expand_epilogue () *** 5285,5298 **** /* From now on, things must be in order. So emit blockages. */ /* Restore the frame pointer. */ ! if (fp_is_frame_pointer) { emit_insn (gen_blockage ()); mem = gen_rtx_MEM (DImode, plus_constant (sa_reg, fp_offset)); ! MEM_ALIAS_SET (mem) = alpha_sr_alias_set; FRP (emit_move_insn (hard_frame_pointer_rtx, mem)); } ! else if (TARGET_OPEN_VMS) { emit_insn (gen_blockage ()); FRP (emit_move_insn (hard_frame_pointer_rtx, --- 6950,6971 ---- /* From now on, things must be in order. So emit blockages. */ /* Restore the frame pointer. */ ! if (TARGET_ABI_UNICOSMK) ! { ! emit_insn (gen_blockage ()); ! mem = gen_rtx_MEM (DImode, ! plus_constant (hard_frame_pointer_rtx, -16)); ! set_mem_alias_set (mem, alpha_sr_alias_set); ! FRP (emit_move_insn (hard_frame_pointer_rtx, mem)); ! } ! else if (fp_is_frame_pointer) { emit_insn (gen_blockage ()); mem = gen_rtx_MEM (DImode, plus_constant (sa_reg, fp_offset)); ! set_mem_alias_set (mem, alpha_sr_alias_set); FRP (emit_move_insn (hard_frame_pointer_rtx, mem)); } ! else if (TARGET_ABI_OPEN_VMS) { emit_insn (gen_blockage ()); FRP (emit_move_insn (hard_frame_pointer_rtx, *************** alpha_expand_epilogue () *** 5301,5317 **** /* Restore the stack pointer. */ emit_insn (gen_blockage ()); ! FRP (emit_move_insn (stack_pointer_rtx, ! gen_rtx_PLUS (DImode, sp_adj1, sp_adj2))); } else { ! if (TARGET_OPEN_VMS && !vms_is_stack_procedure) { emit_insn (gen_blockage ()); FRP (emit_move_insn (hard_frame_pointer_rtx, gen_rtx_REG (DImode, vms_save_fp_regno))); } } } --- 6974,7002 ---- /* Restore the stack pointer. */ emit_insn (gen_blockage ()); ! if (sp_adj2 == const0_rtx) ! FRP (emit_move_insn (stack_pointer_rtx, sp_adj1)); ! else ! FRP (emit_move_insn (stack_pointer_rtx, ! gen_rtx_PLUS (DImode, sp_adj1, sp_adj2))); } else { ! if (TARGET_ABI_OPEN_VMS && alpha_procedure_type == PT_REGISTER) { emit_insn (gen_blockage ()); FRP (emit_move_insn (hard_frame_pointer_rtx, gen_rtx_REG (DImode, vms_save_fp_regno))); } + else if (TARGET_ABI_UNICOSMK && alpha_procedure_type != PT_STACK) + { + /* Decrement the frame pointer if the function does not have a + frame. */ + + emit_insn (gen_blockage ()); + FRP (emit_insn (gen_adddi3 (hard_frame_pointer_rtx, + hard_frame_pointer_rtx, GEN_INT (-1)))); + } } } *************** alpha_end_function (file, fnname, decl) *** 5324,5330 **** tree decl ATTRIBUTE_UNUSED; { /* End the function. */ ! if (!flag_inhibit_size_directive) { fputs ("\t.end ", file); assemble_name (file, fnname); --- 7009,7015 ---- tree decl ATTRIBUTE_UNUSED; { /* End the function. */ ! if (!TARGET_ABI_UNICOSMK && !flag_inhibit_size_directive) { fputs ("\t.end ", file); assemble_name (file, fnname); *************** alpha_end_function (file, fnname, decl) *** 5336,5346 **** Don't do this for global functions in object files destined for a shared library because the function may be overridden by the application ! or other libraries. Similarly, don't do this for weak functions. */ if (!DECL_WEAK (current_function_decl) ! && (!flag_pic || !TREE_PUBLIC (current_function_decl))) SYMBOL_REF_FLAG (XEXP (DECL_RTL (current_function_decl), 0)) = 1; } /* Debugging support. */ --- 7021,7113 ---- Don't do this for global functions in object files destined for a shared library because the function may be overridden by the application ! or other libraries. Similarly, don't do this for weak functions. ! ! Don't do this for functions not defined in the .text section, as ! otherwise it's not unlikely that the destination is out of range ! for a direct branch. */ if (!DECL_WEAK (current_function_decl) ! && (!flag_pic || !TREE_PUBLIC (current_function_decl)) ! && decl_in_text_section (current_function_decl)) SYMBOL_REF_FLAG (XEXP (DECL_RTL (current_function_decl), 0)) = 1; + + /* Output jump tables and the static subroutine information block. */ + if (TARGET_ABI_UNICOSMK) + { + unicosmk_output_ssib (file, fnname); + unicosmk_output_deferred_case_vectors (file); + } + } + + /* Emit a tail call to FUNCTION after adjusting THIS by DELTA. + + In order to avoid the hordes of differences between generated code + with and without TARGET_EXPLICIT_RELOCS, and to avoid duplicating + lots of code loading up large constants, generate rtl and emit it + instead of going straight to text. + + Not sure why this idea hasn't been explored before... */ + + void + alpha_output_mi_thunk_osf (file, thunk_fndecl, delta, function) + FILE *file; + tree thunk_fndecl ATTRIBUTE_UNUSED; + HOST_WIDE_INT delta; + tree function; + { + HOST_WIDE_INT hi, lo; + rtx this, insn, funexp; + + /* We always require a valid GP. */ + emit_insn (gen_prologue_ldgp ()); + emit_note (NULL, NOTE_INSN_PROLOGUE_END); + + /* Find the "this" pointer. If the function returns a structure, + the structure return pointer is in $16. */ + if (aggregate_value_p (TREE_TYPE (TREE_TYPE (function)))) + this = gen_rtx_REG (Pmode, 17); + else + this = gen_rtx_REG (Pmode, 16); + + /* Add DELTA. When possible we use ldah+lda. Otherwise load the + entire constant for the add. */ + lo = ((delta & 0xffff) ^ 0x8000) - 0x8000; + hi = (((delta - lo) & 0xffffffff) ^ 0x80000000) - 0x80000000; + if (hi + lo == delta) + { + if (hi) + emit_insn (gen_adddi3 (this, this, GEN_INT (hi))); + if (lo) + emit_insn (gen_adddi3 (this, this, GEN_INT (lo))); + } + else + { + rtx tmp = alpha_emit_set_long_const (gen_rtx_REG (Pmode, 0), + delta, -(delta < 0)); + emit_insn (gen_adddi3 (this, this, tmp)); + } + + /* Generate a tail call to the target function. */ + if (! TREE_USED (function)) + { + assemble_external (function); + TREE_USED (function) = 1; + } + funexp = XEXP (DECL_RTL (function), 0); + funexp = gen_rtx_MEM (FUNCTION_MODE, funexp); + insn = emit_call_insn (gen_sibcall (funexp, const0_rtx)); + SIBLING_CALL_P (insn) = 1; + + /* Run just enough of rest_of_compilation to get the insns emitted. + There's not really enough bulk here to make other passes such as + instruction scheduling worth while. Note that use_thunk calls + assemble_start_function and assemble_end_function. */ + insn = get_insns (); + shorten_branches (insn); + final_start_function (insn, file, 1); + final (insn, file, 1, 0); + final_end_function (); } /* Debugging support. */ *************** alpha_align_insns (insns, max_align, nex *** 6175,6182 **** /* Let shorten branches care for assigning alignments to code labels. */ shorten_branches (insns); ! align = (FUNCTION_BOUNDARY / BITS_PER_UNIT < max_align ! ? FUNCTION_BOUNDARY / BITS_PER_UNIT : max_align); ofs = prev_in_use = 0; i = insns; --- 7942,7953 ---- /* Let shorten branches care for assigning alignments to code labels. */ shorten_branches (insns); ! if (align_functions < 4) ! align = 4; ! else if ((unsigned int) align_functions < max_align) ! align = align_functions; ! else ! align = max_align; ofs = prev_in_use = 0; i = insns; *************** alpha_align_insns (insns, max_align, nex *** 6220,6237 **** /* If the known alignment is smaller than the recognized insn group, realign the output. */ ! else if (align < len) { unsigned int new_log_align = len > 8 ? 4 : 3; ! rtx where; ! where = prev_nonnote_insn (i); if (!where || GET_CODE (where) != CODE_LABEL) where = i; ! emit_insn_before (gen_realign (GEN_INT (new_log_align)), where); ! align = 1 << new_log_align; ! ofs = 0; } /* If the group won't fit in the same INT16 as the previous, --- 7991,8013 ---- /* If the known alignment is smaller than the recognized insn group, realign the output. */ ! else if ((int) align < len) { unsigned int new_log_align = len > 8 ? 4 : 3; ! rtx prev, where; ! where = prev = prev_nonnote_insn (i); if (!where || GET_CODE (where) != CODE_LABEL) where = i; ! /* Can't realign between a call and its gp reload. */ ! if (! (TARGET_EXPLICIT_RELOCS ! && prev && GET_CODE (prev) == CALL_INSN)) ! { ! emit_insn_before (gen_realign (GEN_INT (new_log_align)), where); ! align = 1 << new_log_align; ! ofs = 0; ! } } /* If the group won't fit in the same INT16 as the previous, *************** alpha_align_insns (insns, max_align, nex *** 6240,6252 **** can make use of the knowledge of what sorts of instructions were issued in the previous group to make sure that all of the added nops are really free. */ ! else if (ofs + len > align) { int nop_count = (align - ofs) / 4; rtx where; ! /* Insert nops before labels and branches to truely merge the ! execution of the nops with the previous instruction group. */ where = prev_nonnote_insn (i); if (where) { --- 8016,8028 ---- can make use of the knowledge of what sorts of instructions were issued in the previous group to make sure that all of the added nops are really free. */ ! else if (ofs + len > (int) align) { int nop_count = (align - ofs) / 4; rtx where; ! /* Insert nops before labels, branches, and calls to truely merge ! the execution of the nops with the previous instruction group. */ where = prev_nonnote_insn (i); if (where) { *************** alpha_align_insns (insns, max_align, nex *** 6256,6262 **** if (where2 && GET_CODE (where2) == JUMP_INSN) where = where2; } ! else if (GET_CODE (where) != JUMP_INSN) where = i; } else --- 8032,8038 ---- if (where2 && GET_CODE (where2) == JUMP_INSN) where = where2; } ! else if (GET_CODE (where) == INSN) where = i; } else *************** alpha_align_insns (insns, max_align, nex *** 6274,6280 **** } } ! /* Machine dependant reorg pass. */ void alpha_reorg (insns) --- 8050,8056 ---- } } ! /* Machine dependent reorg pass. */ void alpha_reorg (insns) *************** check_float_value (mode, d, overflow) *** 6349,6382 **** memcpy (&r, d, sizeof (REAL_VALUE_TYPE)); if (REAL_VALUES_LESS (fvptr[0], r)) { ! bcopy ((char *) &fvptr[0], (char *) d, ! sizeof (REAL_VALUE_TYPE)); return 1; } else if (REAL_VALUES_LESS (r, fvptr[1])) { ! bcopy ((char *) &fvptr[1], (char *) d, ! sizeof (REAL_VALUE_TYPE)); return 1; } else if (REAL_VALUES_LESS (dconst0, r) && REAL_VALUES_LESS (r, fvptr[2])) { ! bcopy ((char *) &dconst0, (char *) d, sizeof (REAL_VALUE_TYPE)); return 1; } else if (REAL_VALUES_LESS (r, dconst0) && REAL_VALUES_LESS (fvptr[3], r)) { ! bcopy ((char *) &dconst0, (char *) d, sizeof (REAL_VALUE_TYPE)); return 1; } } return 0; } ! ! #if OPEN_VMS /* Return the VMS argument type corresponding to MODE. */ --- 8125,8156 ---- memcpy (&r, d, sizeof (REAL_VALUE_TYPE)); if (REAL_VALUES_LESS (fvptr[0], r)) { ! memcpy (d, &fvptr[0], sizeof (REAL_VALUE_TYPE)); return 1; } else if (REAL_VALUES_LESS (r, fvptr[1])) { ! memcpy (d, &fvptr[1], sizeof (REAL_VALUE_TYPE)); return 1; } else if (REAL_VALUES_LESS (dconst0, r) && REAL_VALUES_LESS (r, fvptr[2])) { ! memcpy (d, &dconst0, sizeof (REAL_VALUE_TYPE)); return 1; } else if (REAL_VALUES_LESS (r, dconst0) && REAL_VALUES_LESS (fvptr[3], r)) { ! memcpy (d, &dconst0, sizeof (REAL_VALUE_TYPE)); return 1; } } return 0; } ! ! #if TARGET_ABI_OPEN_VMS /* Return the VMS argument type corresponding to MODE. */ *************** alpha_write_one_linkage (node, data) *** 6529,6535 **** splay_tree_node node; void *data; { ! const char *name = (const char *) node->key; struct alpha_links *links = (struct alpha_links *) node->value; FILE *stream = (FILE *) data; --- 8303,8309 ---- splay_tree_node node; void *data; { ! const char *const name = (const char *) node->key; struct alpha_links *links = (struct alpha_links *) node->value; FILE *stream = (FILE *) data; *************** void *** 6557,6567 **** alpha_write_linkage (stream) FILE *stream; { ! readonly_section (); ! fprintf (stream, "\t.align 3\n"); ! splay_tree_foreach (alpha_links, alpha_write_one_linkage, stream); } #else rtx --- 8331,8423 ---- alpha_write_linkage (stream) FILE *stream; { ! if (alpha_links) ! { ! readonly_section (); ! fprintf (stream, "\t.align 3\n"); ! splay_tree_foreach (alpha_links, alpha_write_one_linkage, stream); ! } ! } ! ! /* Given a decl, a section name, and whether the decl initializer ! has relocs, choose attributes for the section. */ ! ! #define SECTION_VMS_OVERLAY SECTION_FORGET ! #define SECTION_VMS_GLOBAL SECTION_MACH_DEP ! #define SECTION_VMS_INITIALIZE (SECTION_VMS_GLOBAL << 1) ! ! static unsigned int ! vms_section_type_flags (decl, name, reloc) ! tree decl; ! const char *name; ! int reloc; ! { ! unsigned int flags = default_section_type_flags (decl, name, reloc); ! ! if (decl && DECL_ATTRIBUTES (decl) ! && lookup_attribute ("overlaid", DECL_ATTRIBUTES (decl))) ! flags |= SECTION_VMS_OVERLAY; ! if (decl && DECL_ATTRIBUTES (decl) ! && lookup_attribute ("global", DECL_ATTRIBUTES (decl))) ! flags |= SECTION_VMS_GLOBAL; ! if (decl && DECL_ATTRIBUTES (decl) ! && lookup_attribute ("initialize", DECL_ATTRIBUTES (decl))) ! flags |= SECTION_VMS_INITIALIZE; ! ! return flags; ! } ! ! /* Switch to an arbitrary section NAME with attributes as specified ! by FLAGS. ALIGN specifies any known alignment requirements for ! the section; 0 if the default should be used. */ ! ! static void ! vms_asm_named_section (name, flags) ! const char *name; ! unsigned int flags; ! { ! fputc ('\n', asm_out_file); ! fprintf (asm_out_file, ".section\t%s", name); ! ! if (flags & SECTION_VMS_OVERLAY) ! fprintf (asm_out_file, ",OVR"); ! if (flags & SECTION_VMS_GLOBAL) ! fprintf (asm_out_file, ",GBL"); ! if (flags & SECTION_VMS_INITIALIZE) ! fprintf (asm_out_file, ",NOMOD"); ! if (flags & SECTION_DEBUG) ! fprintf (asm_out_file, ",NOWRT"); ! ! fputc ('\n', asm_out_file); ! } ! ! /* Record an element in the table of global constructors. SYMBOL is ! a SYMBOL_REF of the function to be called; PRIORITY is a number ! between 0 and MAX_INIT_PRIORITY. ! ! Differs from default_ctors_section_asm_out_constructor in that the ! width of the .ctors entry is always 64 bits, rather than the 32 bits ! used by a normal pointer. */ ! ! static void ! vms_asm_out_constructor (symbol, priority) ! rtx symbol; ! int priority ATTRIBUTE_UNUSED; ! { ! ctors_section (); ! assemble_align (BITS_PER_WORD); ! assemble_integer (symbol, UNITS_PER_WORD, BITS_PER_WORD, 1); } + static void + vms_asm_out_destructor (symbol, priority) + rtx symbol; + int priority ATTRIBUTE_UNUSED; + { + dtors_section (); + assemble_align (BITS_PER_WORD); + assemble_integer (symbol, UNITS_PER_WORD, BITS_PER_WORD, 1); + } #else rtx *************** alpha_need_linkage (name, is_local) *** 6572,6575 **** return NULL_RTX; } ! #endif /* OPEN_VMS */ --- 8428,9228 ---- return NULL_RTX; } ! #endif /* TARGET_ABI_OPEN_VMS */ ! ! #if TARGET_ABI_UNICOSMK ! ! static void unicosmk_output_module_name PARAMS ((FILE *)); ! static void unicosmk_output_default_externs PARAMS ((FILE *)); ! static void unicosmk_output_dex PARAMS ((FILE *)); ! static void unicosmk_output_externs PARAMS ((FILE *)); ! static void unicosmk_output_addr_vec PARAMS ((FILE *, rtx)); ! static const char *unicosmk_ssib_name PARAMS ((void)); ! static int unicosmk_special_name PARAMS ((const char *)); ! ! /* Define the offset between two registers, one to be eliminated, and the ! other its replacement, at the start of a routine. */ ! ! int ! unicosmk_initial_elimination_offset (from, to) ! int from; ! int to; ! { ! int fixed_size; ! ! fixed_size = alpha_sa_size(); ! if (fixed_size != 0) ! fixed_size += 48; ! ! if (from == FRAME_POINTER_REGNUM && to == HARD_FRAME_POINTER_REGNUM) ! return -fixed_size; ! else if (from == ARG_POINTER_REGNUM && to == HARD_FRAME_POINTER_REGNUM) ! return 0; ! else if (from == FRAME_POINTER_REGNUM && to == STACK_POINTER_REGNUM) ! return (ALPHA_ROUND (current_function_outgoing_args_size) ! + ALPHA_ROUND (get_frame_size())); ! else if (from == ARG_POINTER_REGNUM && to == STACK_POINTER_REGNUM) ! return (ALPHA_ROUND (fixed_size) ! + ALPHA_ROUND (get_frame_size() ! + current_function_outgoing_args_size)); ! else ! abort (); ! } ! ! /* Output the module name for .ident and .end directives. We have to strip ! directories and add make sure that the module name starts with a letter ! or '$'. */ ! ! static void ! unicosmk_output_module_name (file) ! FILE *file; ! { ! const char *name; ! ! /* Strip directories. */ ! ! name = strrchr (main_input_filename, '/'); ! if (name) ! ++name; ! else ! name = main_input_filename; ! ! /* CAM only accepts module names that start with a letter or '$'. We ! prefix the module name with a '$' if necessary. */ ! ! if (!ISALPHA (*name)) ! fprintf (file, "$%s", name); ! else ! fputs (name, file); ! } ! ! /* Output text that to appear at the beginning of an assembler file. */ ! ! void ! unicosmk_asm_file_start (file) ! FILE *file; ! { ! int i; ! ! fputs ("\t.ident\t", file); ! unicosmk_output_module_name (file); ! fputs ("\n\n", file); ! ! /* The Unicos/Mk assembler uses different register names. Instead of trying ! to support them, we simply use micro definitions. */ ! ! /* CAM has different register names: rN for the integer register N and fN ! for the floating-point register N. Instead of trying to use these in ! alpha.md, we define the symbols $N and $fN to refer to the appropriate ! register. */ ! ! for (i = 0; i < 32; ++i) ! fprintf (file, "$%d <- r%d\n", i, i); ! ! for (i = 0; i < 32; ++i) ! fprintf (file, "$f%d <- f%d\n", i, i); ! ! putc ('\n', file); ! ! /* The .align directive fill unused space with zeroes which does not work ! in code sections. We define the macro 'gcc@code@align' which uses nops ! instead. Note that it assumes that code sections always have the ! biggest possible alignment since . refers to the current offset from ! the beginning of the section. */ ! ! fputs ("\t.macro gcc@code@align n\n", file); ! fputs ("gcc@n@bytes = 1 << n\n", file); ! fputs ("gcc@here = . % gcc@n@bytes\n", file); ! fputs ("\t.if ne, gcc@here, 0\n", file); ! fputs ("\t.repeat (gcc@n@bytes - gcc@here) / 4\n", file); ! fputs ("\tbis r31,r31,r31\n", file); ! fputs ("\t.endr\n", file); ! fputs ("\t.endif\n", file); ! fputs ("\t.endm gcc@code@align\n\n", file); ! ! /* Output extern declarations which should always be visible. */ ! unicosmk_output_default_externs (file); ! ! /* Open a dummy section. We always need to be inside a section for the ! section-switching code to work correctly. ! ??? This should be a module id or something like that. I still have to ! figure out what the rules for those are. */ ! fputs ("\n\t.psect\t$SG00000,data\n", file); ! } ! ! /* Output text to appear at the end of an assembler file. This includes all ! pending extern declarations and DEX expressions. */ ! ! void ! unicosmk_asm_file_end (file) ! FILE *file; ! { ! fputs ("\t.endp\n\n", file); ! ! /* Output all pending externs. */ ! ! unicosmk_output_externs (file); ! ! /* Output dex definitions used for functions whose names conflict with ! register names. */ ! ! unicosmk_output_dex (file); ! ! fputs ("\t.end\t", file); ! unicosmk_output_module_name (file); ! putc ('\n', file); ! } ! ! /* Output the definition of a common variable. */ ! ! void ! unicosmk_output_common (file, name, size, align) ! FILE *file; ! const char *name; ! int size; ! int align; ! { ! tree name_tree; ! printf ("T3E__: common %s\n", name); ! ! common_section (); ! fputs("\t.endp\n\n\t.psect ", file); ! assemble_name(file, name); ! fprintf(file, ",%d,common\n", floor_log2 (align / BITS_PER_UNIT)); ! fprintf(file, "\t.byte\t0:%d\n", size); ! ! /* Mark the symbol as defined in this module. */ ! name_tree = get_identifier (name); ! TREE_ASM_WRITTEN (name_tree) = 1; ! } ! ! #define SECTION_PUBLIC SECTION_MACH_DEP ! #define SECTION_MAIN (SECTION_PUBLIC << 1) ! static int current_section_align; ! ! static unsigned int ! unicosmk_section_type_flags (decl, name, reloc) ! tree decl; ! const char *name; ! int reloc ATTRIBUTE_UNUSED; ! { ! unsigned int flags = default_section_type_flags (decl, name, reloc); ! ! if (!decl) ! return flags; ! ! if (TREE_CODE (decl) == FUNCTION_DECL) ! { ! current_section_align = floor_log2 (FUNCTION_BOUNDARY / BITS_PER_UNIT); ! if (align_functions_log > current_section_align) ! current_section_align = align_functions_log; ! ! if (! strcmp (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), "main")) ! flags |= SECTION_MAIN; ! } ! else ! current_section_align = floor_log2 (DECL_ALIGN (decl) / BITS_PER_UNIT); ! ! if (TREE_PUBLIC (decl)) ! flags |= SECTION_PUBLIC; ! ! return flags; ! } ! ! /* Generate a section name for decl and associate it with the ! declaration. */ ! ! void ! unicosmk_unique_section (decl, reloc) ! tree decl; ! int reloc ATTRIBUTE_UNUSED; ! { ! const char *name; ! int len; ! ! if (!decl) ! abort (); ! ! name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)); ! STRIP_NAME_ENCODING (name, name); ! len = strlen (name); ! ! if (TREE_CODE (decl) == FUNCTION_DECL) ! { ! char *string; ! ! /* It is essential that we prefix the section name here because ! otherwise the section names generated for constructors and ! destructors confuse collect2. */ ! ! string = alloca (len + 6); ! sprintf (string, "code@%s", name); ! DECL_SECTION_NAME (decl) = build_string (len + 5, string); ! } ! else if (TREE_PUBLIC (decl)) ! DECL_SECTION_NAME (decl) = build_string (len, name); ! else ! { ! char *string; ! ! string = alloca (len + 6); ! sprintf (string, "data@%s", name); ! DECL_SECTION_NAME (decl) = build_string (len + 5, string); ! } ! } ! ! /* Switch to an arbitrary section NAME with attributes as specified ! by FLAGS. ALIGN specifies any known alignment requirements for ! the section; 0 if the default should be used. */ ! ! static void ! unicosmk_asm_named_section (name, flags) ! const char *name; ! unsigned int flags; ! { ! const char *kind; ! ! /* Close the previous section. */ ! ! fputs ("\t.endp\n\n", asm_out_file); ! ! /* Find out what kind of section we are opening. */ ! ! if (flags & SECTION_MAIN) ! fputs ("\t.start\tmain\n", asm_out_file); ! ! if (flags & SECTION_CODE) ! kind = "code"; ! else if (flags & SECTION_PUBLIC) ! kind = "common"; ! else ! kind = "data"; ! ! if (current_section_align != 0) ! fprintf (asm_out_file, "\t.psect\t%s,%d,%s\n", name, ! current_section_align, kind); ! else ! fprintf (asm_out_file, "\t.psect\t%s,%s\n", name, kind); ! } ! ! static void ! unicosmk_insert_attributes (decl, attr_ptr) ! tree decl; ! tree *attr_ptr ATTRIBUTE_UNUSED; ! { ! if (DECL_P (decl) ! && (TREE_PUBLIC (decl) || TREE_CODE (decl) == FUNCTION_DECL)) ! UNIQUE_SECTION (decl, 0); ! } ! ! /* Output an alignment directive. We have to use the macro 'gcc@code@align' ! in code sections because .align fill unused space with zeroes. */ ! ! void ! unicosmk_output_align (file, align) ! FILE *file; ! int align; ! { ! if (inside_function) ! fprintf (file, "\tgcc@code@align\t%d\n", align); ! else ! fprintf (file, "\t.align\t%d\n", align); ! } ! ! /* Add a case vector to the current function's list of deferred case ! vectors. Case vectors have to be put into a separate section because CAM ! does not allow data definitions in code sections. */ ! ! void ! unicosmk_defer_case_vector (lab, vec) ! rtx lab; ! rtx vec; ! { ! struct machine_function *machine = cfun->machine; ! ! vec = gen_rtx_EXPR_LIST (VOIDmode, lab, vec); ! machine->addr_list = gen_rtx_EXPR_LIST (VOIDmode, vec, ! machine->addr_list); ! } ! ! /* Output a case vector. */ ! ! static void ! unicosmk_output_addr_vec (file, vec) ! FILE *file; ! rtx vec; ! { ! rtx lab = XEXP (vec, 0); ! rtx body = XEXP (vec, 1); ! int vlen = XVECLEN (body, 0); ! int idx; ! ! ASM_OUTPUT_INTERNAL_LABEL (file, "L", CODE_LABEL_NUMBER (lab)); ! ! for (idx = 0; idx < vlen; idx++) ! { ! ASM_OUTPUT_ADDR_VEC_ELT ! (file, CODE_LABEL_NUMBER (XEXP (XVECEXP (body, 0, idx), 0))); ! } ! } ! ! /* Output current function's deferred case vectors. */ ! ! static void ! unicosmk_output_deferred_case_vectors (file) ! FILE *file; ! { ! struct machine_function *machine = cfun->machine; ! rtx t; ! ! if (machine->addr_list == NULL_RTX) ! return; ! ! data_section (); ! for (t = machine->addr_list; t; t = XEXP (t, 1)) ! unicosmk_output_addr_vec (file, XEXP (t, 0)); ! } ! ! /* Set up the dynamic subprogram information block (DSIB) and update the ! frame pointer register ($15) for subroutines which have a frame. If the ! subroutine doesn't have a frame, simply increment $15. */ ! ! static void ! unicosmk_gen_dsib (imaskP) ! unsigned long * imaskP; ! { ! if (alpha_procedure_type == PT_STACK) ! { ! const char *ssib_name; ! rtx mem; ! ! /* Allocate 64 bytes for the DSIB. */ ! ! FRP (emit_insn (gen_adddi3 (stack_pointer_rtx, stack_pointer_rtx, ! GEN_INT (-64)))); ! emit_insn (gen_blockage ()); ! ! /* Save the return address. */ ! ! mem = gen_rtx_MEM (DImode, plus_constant (stack_pointer_rtx, 56)); ! set_mem_alias_set (mem, alpha_sr_alias_set); ! FRP (emit_move_insn (mem, gen_rtx_REG (DImode, REG_RA))); ! (*imaskP) &= ~(1L << REG_RA); ! ! /* Save the old frame pointer. */ ! ! mem = gen_rtx_MEM (DImode, plus_constant (stack_pointer_rtx, 48)); ! set_mem_alias_set (mem, alpha_sr_alias_set); ! FRP (emit_move_insn (mem, hard_frame_pointer_rtx)); ! (*imaskP) &= ~(1L << HARD_FRAME_POINTER_REGNUM); ! ! emit_insn (gen_blockage ()); ! ! /* Store the SSIB pointer. */ ! ! ssib_name = ggc_strdup (unicosmk_ssib_name ()); ! mem = gen_rtx_MEM (DImode, plus_constant (stack_pointer_rtx, 32)); ! set_mem_alias_set (mem, alpha_sr_alias_set); ! ! FRP (emit_move_insn (gen_rtx_REG (DImode, 5), ! gen_rtx_SYMBOL_REF (Pmode, ssib_name))); ! FRP (emit_move_insn (mem, gen_rtx_REG (DImode, 5))); ! ! /* Save the CIW index. */ ! ! mem = gen_rtx_MEM (DImode, plus_constant (stack_pointer_rtx, 24)); ! set_mem_alias_set (mem, alpha_sr_alias_set); ! FRP (emit_move_insn (mem, gen_rtx_REG (DImode, 25))); ! ! emit_insn (gen_blockage ()); ! ! /* Set the new frame pointer. */ ! ! FRP (emit_insn (gen_adddi3 (hard_frame_pointer_rtx, ! stack_pointer_rtx, GEN_INT (64)))); ! ! } ! else ! { ! /* Increment the frame pointer register to indicate that we do not ! have a frame. */ ! ! FRP (emit_insn (gen_adddi3 (hard_frame_pointer_rtx, ! hard_frame_pointer_rtx, GEN_INT (1)))); ! } ! } ! ! #define SSIB_PREFIX "__SSIB_" ! #define SSIB_PREFIX_LEN 7 ! ! /* Generate the name of the SSIB section for the current function. */ ! ! static const char * ! unicosmk_ssib_name () ! { ! /* This is ok since CAM won't be able to deal with names longer than that ! anyway. */ ! ! static char name[256]; ! ! rtx x; ! const char *fnname; ! int len; ! ! x = DECL_RTL (cfun->decl); ! if (GET_CODE (x) != MEM) ! abort (); ! x = XEXP (x, 0); ! if (GET_CODE (x) != SYMBOL_REF) ! abort (); ! fnname = XSTR (x, 0); ! STRIP_NAME_ENCODING (fnname, fnname); ! ! len = strlen (fnname); ! if (len + SSIB_PREFIX_LEN > 255) ! len = 255 - SSIB_PREFIX_LEN; ! ! strcpy (name, SSIB_PREFIX); ! strncpy (name + SSIB_PREFIX_LEN, fnname, len); ! name[len + SSIB_PREFIX_LEN] = 0; ! ! return name; ! } ! ! /* Output the static subroutine information block for the current ! function. */ ! ! static void ! unicosmk_output_ssib (file, fnname) ! FILE *file; ! const char *fnname; ! { ! int len; ! int i; ! rtx x; ! rtx ciw; ! struct machine_function *machine = cfun->machine; ! ! ssib_section (); ! fprintf (file, "\t.endp\n\n\t.psect\t%s%s,data\n", user_label_prefix, ! unicosmk_ssib_name ()); ! ! /* Some required stuff and the function name length. */ ! ! len = strlen (fnname); ! fprintf (file, "\t.quad\t^X20008%2.2X28\n", len); ! ! /* Saved registers ! ??? We don't do that yet. */ ! ! fputs ("\t.quad\t0\n", file); ! ! /* Function address. */ ! ! fputs ("\t.quad\t", file); ! assemble_name (file, fnname); ! putc ('\n', file); ! ! fputs ("\t.quad\t0\n", file); ! fputs ("\t.quad\t0\n", file); ! ! /* Function name. ! ??? We do it the same way Cray CC does it but this could be ! simplified. */ ! ! for( i = 0; i < len; i++ ) ! fprintf (file, "\t.byte\t%d\n", (int)(fnname[i])); ! if( (len % 8) == 0 ) ! fputs ("\t.quad\t0\n", file); ! else ! fprintf (file, "\t.bits\t%d : 0\n", (8 - (len % 8))*8); ! ! /* All call information words used in the function. */ ! ! for (x = machine->first_ciw; x; x = XEXP (x, 1)) ! { ! ciw = XEXP (x, 0); ! fprintf (file, "\t.quad\t"); ! #if HOST_BITS_PER_WIDE_INT == 32 ! fprintf (file, HOST_WIDE_INT_PRINT_DOUBLE_HEX, ! CONST_DOUBLE_HIGH (ciw), CONST_DOUBLE_LOW (ciw)); ! #else ! fprintf (file, HOST_WIDE_INT_PRINT_HEX, INTVAL (ciw)); ! #endif ! fprintf (file, "\n"); ! } ! } ! ! /* Add a call information word (CIW) to the list of the current function's ! CIWs and return its index. ! ! X is a CONST_INT or CONST_DOUBLE representing the CIW. */ ! ! rtx ! unicosmk_add_call_info_word (x) ! rtx x; ! { ! rtx node; ! struct machine_function *machine = cfun->machine; ! ! node = gen_rtx_EXPR_LIST (VOIDmode, x, NULL_RTX); ! if (machine->first_ciw == NULL_RTX) ! machine->first_ciw = node; ! else ! XEXP (machine->last_ciw, 1) = node; ! ! machine->last_ciw = node; ! ++machine->ciw_count; ! ! return GEN_INT (machine->ciw_count ! + strlen (current_function_name)/8 + 5); ! } ! ! static char unicosmk_section_buf[100]; ! ! char * ! unicosmk_text_section () ! { ! static int count = 0; ! sprintf (unicosmk_section_buf, "\t.endp\n\n\t.psect\tgcc@text___%d,code", ! count++); ! return unicosmk_section_buf; ! } ! ! char * ! unicosmk_data_section () ! { ! static int count = 1; ! sprintf (unicosmk_section_buf, "\t.endp\n\n\t.psect\tgcc@data___%d,data", ! count++); ! return unicosmk_section_buf; ! } ! ! /* The Cray assembler doesn't accept extern declarations for symbols which ! are defined in the same file. We have to keep track of all global ! symbols which are referenced and/or defined in a source file and output ! extern declarations for those which are referenced but not defined at ! the end of file. */ ! ! /* List of identifiers for which an extern declaration might have to be ! emitted. */ ! ! struct unicosmk_extern_list ! { ! struct unicosmk_extern_list *next; ! const char *name; ! }; ! ! static struct unicosmk_extern_list *unicosmk_extern_head = 0; ! ! /* Output extern declarations which are required for every asm file. */ ! ! static void ! unicosmk_output_default_externs (file) ! FILE *file; ! { ! static const char *const externs[] = ! { "__T3E_MISMATCH" }; ! ! int i; ! int n; ! ! n = ARRAY_SIZE (externs); ! ! for (i = 0; i < n; i++) ! fprintf (file, "\t.extern\t%s\n", externs[i]); ! } ! ! /* Output extern declarations for global symbols which are have been ! referenced but not defined. */ ! ! static void ! unicosmk_output_externs (file) ! FILE *file; ! { ! struct unicosmk_extern_list *p; ! const char *real_name; ! int len; ! tree name_tree; ! ! len = strlen (user_label_prefix); ! for (p = unicosmk_extern_head; p != 0; p = p->next) ! { ! /* We have to strip the encoding and possibly remove user_label_prefix ! from the identifier in order to handle -fleading-underscore and ! explicit asm names correctly (cf. gcc.dg/asm-names-1.c). */ ! STRIP_NAME_ENCODING (real_name, p->name); ! if (len && p->name[0] == '*' ! && !memcmp (real_name, user_label_prefix, len)) ! real_name += len; ! ! name_tree = get_identifier (real_name); ! if (! TREE_ASM_WRITTEN (name_tree)) ! { ! TREE_ASM_WRITTEN (name_tree) = 1; ! fputs ("\t.extern\t", file); ! assemble_name (file, p->name); ! putc ('\n', file); ! } ! } ! } ! ! /* Record an extern. */ ! ! void ! unicosmk_add_extern (name) ! const char *name; ! { ! struct unicosmk_extern_list *p; ! ! p = (struct unicosmk_extern_list *) ! permalloc (sizeof (struct unicosmk_extern_list)); ! p->next = unicosmk_extern_head; ! p->name = name; ! unicosmk_extern_head = p; ! } ! ! /* The Cray assembler generates incorrect code if identifiers which ! conflict with register names are used as instruction operands. We have ! to replace such identifiers with DEX expressions. */ ! ! /* Structure to collect identifiers which have been replaced by DEX ! expressions. */ ! ! struct unicosmk_dex { ! struct unicosmk_dex *next; ! const char *name; ! }; ! ! /* List of identifiers which have been replaced by DEX expressions. The DEX ! number is determined by the position in the list. */ ! ! static struct unicosmk_dex *unicosmk_dex_list = NULL; ! ! /* The number of elements in the DEX list. */ ! ! static int unicosmk_dex_count = 0; ! ! /* Check if NAME must be replaced by a DEX expression. */ ! ! static int ! unicosmk_special_name (name) ! const char *name; ! { ! if (name[0] == '*') ! ++name; ! ! if (name[0] == '$') ! ++name; ! ! if (name[0] != 'r' && name[0] != 'f' && name[0] != 'R' && name[0] != 'F') ! return 0; ! ! switch (name[1]) ! { ! case '1': case '2': ! return (name[2] == '\0' || (ISDIGIT (name[2]) && name[3] == '\0')); ! ! case '3': ! return (name[2] == '\0' ! || ((name[2] == '0' || name[2] == '1') && name[3] == '\0')); ! ! default: ! return (ISDIGIT (name[1]) && name[2] == '\0'); ! } ! } ! ! /* Return the DEX number if X must be replaced by a DEX expression and 0 ! otherwise. */ ! ! static int ! unicosmk_need_dex (x) ! rtx x; ! { ! struct unicosmk_dex *dex; ! const char *name; ! int i; ! ! if (GET_CODE (x) != SYMBOL_REF) ! return 0; ! ! name = XSTR (x,0); ! if (! unicosmk_special_name (name)) ! return 0; ! ! i = unicosmk_dex_count; ! for (dex = unicosmk_dex_list; dex; dex = dex->next) ! { ! if (! strcmp (name, dex->name)) ! return i; ! --i; ! } ! ! dex = (struct unicosmk_dex *) permalloc (sizeof (struct unicosmk_dex)); ! dex->name = name; ! dex->next = unicosmk_dex_list; ! unicosmk_dex_list = dex; ! ! ++unicosmk_dex_count; ! return unicosmk_dex_count; ! } ! ! /* Output the DEX definitions for this file. */ ! ! static void ! unicosmk_output_dex (file) ! FILE *file; ! { ! struct unicosmk_dex *dex; ! int i; ! ! if (unicosmk_dex_list == NULL) ! return; ! ! fprintf (file, "\t.dexstart\n"); ! ! i = unicosmk_dex_count; ! for (dex = unicosmk_dex_list; dex; dex = dex->next) ! { ! fprintf (file, "\tDEX (%d) = ", i); ! assemble_name (file, dex->name); ! putc ('\n', file); ! --i; ! } ! ! fprintf (file, "\t.dexend\n"); ! } ! ! #else ! ! static void ! unicosmk_output_deferred_case_vectors (file) ! FILE *file ATTRIBUTE_UNUSED; ! {} ! ! static void ! unicosmk_gen_dsib (imaskP) ! unsigned long * imaskP ATTRIBUTE_UNUSED; ! {} ! ! static void ! unicosmk_output_ssib (file, fnname) ! FILE * file ATTRIBUTE_UNUSED; ! const char * fnname ATTRIBUTE_UNUSED; ! {} ! ! rtx ! unicosmk_add_call_info_word (x) ! rtx x ATTRIBUTE_UNUSED; ! { ! return NULL_RTX; ! } ! ! static int ! unicosmk_need_dex (x) ! rtx x ATTRIBUTE_UNUSED; ! { ! return 0; ! } ! ! #endif /* TARGET_ABI_UNICOSMK */ diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/alpha.h gcc-3.1/gcc/config/alpha/alpha.h *** gcc-3.0.4/gcc/config/alpha/alpha.h Mon Jun 11 16:25:37 2001 --- gcc-3.1/gcc/config/alpha/alpha.h Mon Feb 18 01:07:52 2002 *************** *** 1,6 **** /* Definitions of target machine for GNU compiler, for DEC Alpha. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, ! 2000, 2001 Free Software Foundation, Inc. Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu) This file is part of GNU CC. --- 1,6 ---- /* Definitions of target machine for GNU compiler, for DEC Alpha. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, ! 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu) This file is part of GNU CC. *************** the Free Software Foundation, 59 Temple *** 21,34 **** Boston, MA 02111-1307, USA. */ /* Write out the correct language type definition for the header files. Unless we have assembler language, write out the symbols for C. */ #define CPP_SPEC "\ %{!undef:\ %{.S:-D__LANGUAGE_ASSEMBLY__ -D__LANGUAGE_ASSEMBLY %{!ansi:-DLANGUAGE_ASSEMBLY }}\ - %{.cc|.cxx|.C:-D__LANGUAGE_C_PLUS_PLUS__ -D__LANGUAGE_C_PLUS_PLUS -D__cplusplus }\ %{.m:-D__LANGUAGE_OBJECTIVE_C__ -D__LANGUAGE_OBJECTIVE_C }\ ! %{!.S:%{!.cc:%{!.cxx:%{!.C:%{!.m:-D__LANGUAGE_C__ -D__LANGUAGE_C %{!ansi:-DLANGUAGE_C }}}}}}\ %{mieee:-D_IEEE_FP }\ %{mieee-with-inexact:-D_IEEE_FP -D_IEEE_FP_INEXACT }}\ %(cpp_cpu) %(cpp_subtarget)" --- 21,40 ---- Boston, MA 02111-1307, USA. */ + /* For C++ we need to ensure that __LANGUAGE_C_PLUS_PLUS is defined independent + of the source file extension. */ + #define CPLUSPLUS_CPP_SPEC "\ + -D__LANGUAGE_C_PLUS_PLUS__ -D__LANGUAGE_C_PLUS_PLUS -D__cplusplus \ + %(cpp) \ + " + /* Write out the correct language type definition for the header files. Unless we have assembler language, write out the symbols for C. */ #define CPP_SPEC "\ %{!undef:\ %{.S:-D__LANGUAGE_ASSEMBLY__ -D__LANGUAGE_ASSEMBLY %{!ansi:-DLANGUAGE_ASSEMBLY }}\ %{.m:-D__LANGUAGE_OBJECTIVE_C__ -D__LANGUAGE_OBJECTIVE_C }\ ! %{!.S:%{!.cc:%{!.cxx:%{!.cpp:%{!.cp:%{!.c++:%{!.C:%{!.m:-D__LANGUAGE_C__ -D__LANGUAGE_C %{!ansi:-DLANGUAGE_C }}}}}}}}}\ %{mieee:-D_IEEE_FP }\ %{mieee-with-inexact:-D_IEEE_FP -D_IEEE_FP_INEXACT }}\ %(cpp_cpu) %(cpp_subtarget)" *************** Boston, MA 02111-1307, USA. */ *** 37,48 **** #define CPP_SUBTARGET_SPEC "" #endif - /* Set the spec to use for signed char. The default tests the above macro - but DEC's compiler can't handle the conditional in a "constant" - operand. */ - - #define SIGNED_CHAR_SPEC "%{funsigned-char:-D__CHAR_UNSIGNED__}" - #define WORD_SWITCH_TAKES_ARG(STR) \ (!strcmp (STR, "rpath") || DEFAULT_WORD_SWITCH_TAKES_ARG(STR)) --- 43,48 ---- *************** enum alpha_trap_precision *** 65,84 **** { ALPHA_TP_PROG, /* No precision (default). */ ALPHA_TP_FUNC, /* Trap contained within originating function. */ ! ALPHA_TP_INSN /* Instruction accuracy and code is resumption safe. */ }; enum alpha_fp_rounding_mode { ALPHA_FPRM_NORM, /* Normal rounding mode. */ ALPHA_FPRM_MINF, /* Round towards minus-infinity. */ ! ALPHA_FPRM_CHOP, /* Chopped rounding mode (towards 0). */ ALPHA_FPRM_DYN /* Dynamic rounding mode. */ }; enum alpha_fp_trap_mode { ! ALPHA_FPTM_N, /* Normal trap mode. */ ALPHA_FPTM_U, /* Underflow traps enabled. */ ALPHA_FPTM_SU, /* Software completion, w/underflow traps */ ALPHA_FPTM_SUI /* Software completion, w/underflow & inexact traps */ --- 65,84 ---- { ALPHA_TP_PROG, /* No precision (default). */ ALPHA_TP_FUNC, /* Trap contained within originating function. */ ! ALPHA_TP_INSN /* Instruction accuracy and code is resumption safe. */ }; enum alpha_fp_rounding_mode { ALPHA_FPRM_NORM, /* Normal rounding mode. */ ALPHA_FPRM_MINF, /* Round towards minus-infinity. */ ! ALPHA_FPRM_CHOP, /* Chopped rounding mode (towards 0). */ ALPHA_FPRM_DYN /* Dynamic rounding mode. */ }; enum alpha_fp_trap_mode { ! ALPHA_FPTM_N, /* Normal trap mode. */ ALPHA_FPTM_U, /* Underflow traps enabled. */ ALPHA_FPTM_SU, /* Software completion, w/underflow traps */ ALPHA_FPTM_SUI /* Software completion, w/underflow & inexact traps */ *************** extern enum alpha_fp_trap_mode alpha_fpt *** 107,113 **** #define MASK_GAS (1 << 2) #define TARGET_GAS (target_flags & MASK_GAS) ! /* This means that we should mark procedures as IEEE conformant. */ #define MASK_IEEE_CONFORMANT (1 << 3) #define TARGET_IEEE_CONFORMANT (target_flags & MASK_IEEE_CONFORMANT) --- 107,113 ---- #define MASK_GAS (1 << 2) #define TARGET_GAS (target_flags & MASK_GAS) ! /* This means that we should mark procedures as IEEE conformant. */ #define MASK_IEEE_CONFORMANT (1 << 3) #define TARGET_IEEE_CONFORMANT (target_flags & MASK_IEEE_CONFORMANT) *************** extern enum alpha_fp_trap_mode alpha_fpt *** 152,157 **** --- 152,165 ---- #define MASK_CIX (1 << 11) #define TARGET_CIX (target_flags & MASK_CIX) + /* This means use !literal style explicit relocations. */ + #define MASK_EXPLICIT_RELOCS (1 << 12) + #define TARGET_EXPLICIT_RELOCS (target_flags & MASK_EXPLICIT_RELOCS) + + /* This means use 16-bit relocations to .sdata/.sbss. */ + #define MASK_SMALL_DATA (1 << 13) + #define TARGET_SMALL_DATA (target_flags & MASK_SMALL_DATA) + /* This means that the processor is an EV5, EV56, or PCA56. Unlike alpha_cpu this is not affected by -mtune= setting. */ #define MASK_CPU_EV5 (1 << 28) *************** extern enum alpha_fp_trap_mode alpha_fpt *** 167,182 **** #define TARGET_SUPPORT_ARCH (target_flags & MASK_SUPPORT_ARCH) /* These are for target os support and cannot be changed at runtime. */ ! #ifndef TARGET_WINDOWS_NT ! #define TARGET_WINDOWS_NT 0 ! #endif ! #ifndef TARGET_OPEN_VMS ! #define TARGET_OPEN_VMS 0 ! #endif #ifndef TARGET_AS_CAN_SUBTRACT_LABELS #define TARGET_AS_CAN_SUBTRACT_LABELS TARGET_GAS #endif #ifndef TARGET_CAN_FAULT_IN_PROLOGUE #define TARGET_CAN_FAULT_IN_PROLOGUE 0 #endif --- 175,193 ---- #define TARGET_SUPPORT_ARCH (target_flags & MASK_SUPPORT_ARCH) /* These are for target os support and cannot be changed at runtime. */ ! #define TARGET_ABI_WINDOWS_NT 0 ! #define TARGET_ABI_OPEN_VMS 0 ! #define TARGET_ABI_UNICOSMK 0 ! #define TARGET_ABI_OSF (!TARGET_ABI_WINDOWS_NT \ ! && !TARGET_ABI_OPEN_VMS \ ! && !TARGET_ABI_UNICOSMK) #ifndef TARGET_AS_CAN_SUBTRACT_LABELS #define TARGET_AS_CAN_SUBTRACT_LABELS TARGET_GAS #endif + #ifndef TARGET_AS_SLASH_BEFORE_SUFFIX + #define TARGET_AS_SLASH_BEFORE_SUFFIX TARGET_GAS + #endif #ifndef TARGET_CAN_FAULT_IN_PROLOGUE #define TARGET_CAN_FAULT_IN_PROLOGUE 0 #endif *************** extern enum alpha_fp_trap_mode alpha_fpt *** 189,194 **** --- 200,208 ---- #ifndef TARGET_LD_BUGGY_LDGP #define TARGET_LD_BUGGY_LDGP 0 #endif + #ifndef TARGET_FIXUP_EV5_PREFETCH + #define TARGET_FIXUP_EV5_PREFETCH 0 + #endif /* Macro to define tables used to set the flags. This is a list in braces of pairs in braces, *************** extern enum alpha_fp_trap_mode alpha_fpt *** 224,230 **** {"no-fix", -MASK_FIX, ""}, \ {"cix", MASK_CIX, N_("Emit code for the counting ISA extension")}, \ {"no-cix", -MASK_CIX, ""}, \ ! {"", TARGET_DEFAULT | TARGET_CPU_DEFAULT, ""} } #define TARGET_DEFAULT MASK_FP|MASK_FPREGS --- 238,252 ---- {"no-fix", -MASK_FIX, ""}, \ {"cix", MASK_CIX, N_("Emit code for the counting ISA extension")}, \ {"no-cix", -MASK_CIX, ""}, \ ! {"explicit-relocs", MASK_EXPLICIT_RELOCS, \ ! N_("Emit code using explicit relocation directives")}, \ ! {"no-explicit-relocs", -MASK_EXPLICIT_RELOCS, ""}, \ ! {"small-data", MASK_SMALL_DATA, \ ! N_("Emit 16-bit relocations to the small data areas")}, \ ! {"large-data", -MASK_SMALL_DATA, \ ! N_("Emit 32-bit relocations to the small data areas")}, \ ! {"", TARGET_DEFAULT | TARGET_CPU_DEFAULT \ ! | TARGET_DEFAULT_EXPLICIT_RELOCS, ""} } #define TARGET_DEFAULT MASK_FP|MASK_FPREGS *************** extern enum alpha_fp_trap_mode alpha_fpt *** 232,253 **** #define TARGET_CPU_DEFAULT 0 #endif ! /* This macro is similar to `TARGET_SWITCHES' but defines names of ! command options that have values. Its definition is an initializer ! with a subgrouping for each command option. ! ! Each subgrouping contains a string constant, that defines the fixed ! part of the option name, and the address of a variable. The ! variable, type `char *', is set to the variable part of the given ! option if the fixed part matches. The actual option name is made ! by appending `-m' to the specified name. ! ! Here is an example which defines `-mshort-data-NUMBER'. If the ! given option is `-mshort-data-512', the variable `m88k_short_data' ! will be set to the string `"512"'. ! ! extern char *m88k_short_data; ! #define TARGET_OPTIONS { { "short-data-", &m88k_short_data } } */ extern const char *alpha_cpu_string; /* For -mcpu= */ extern const char *alpha_tune_string; /* For -mtune= */ --- 254,266 ---- #define TARGET_CPU_DEFAULT 0 #endif ! #ifndef TARGET_DEFAULT_EXPLICIT_RELOCS ! #ifdef HAVE_AS_EXPLICIT_RELOCS ! #define TARGET_DEFAULT_EXPLICIT_RELOCS MASK_EXPLICIT_RELOCS ! #else ! #define TARGET_DEFAULT_EXPLICIT_RELOCS 0 ! #endif ! #endif extern const char *alpha_cpu_string; /* For -mcpu= */ extern const char *alpha_tune_string; /* For -mtune= */ *************** extern const char *alpha_mlat_string; /* *** 274,286 **** /* Attempt to describe CPU characteristics to the preprocessor. */ ! /* Corresponding to amask... */ #define CPP_AM_BWX_SPEC "-D__alpha_bwx__ -Acpu=bwx" #define CPP_AM_MAX_SPEC "-D__alpha_max__ -Acpu=max" #define CPP_AM_FIX_SPEC "-D__alpha_fix__ -Acpu=fix" #define CPP_AM_CIX_SPEC "-D__alpha_cix__ -Acpu=cix" ! /* Corresponding to implver... */ #define CPP_IM_EV4_SPEC "-D__alpha_ev4__ -Acpu=ev4" #define CPP_IM_EV5_SPEC "-D__alpha_ev5__ -Acpu=ev5" #define CPP_IM_EV6_SPEC "-D__alpha_ev6__ -Acpu=ev6" --- 287,299 ---- /* Attempt to describe CPU characteristics to the preprocessor. */ ! /* Corresponding to amask... */ #define CPP_AM_BWX_SPEC "-D__alpha_bwx__ -Acpu=bwx" #define CPP_AM_MAX_SPEC "-D__alpha_max__ -Acpu=max" #define CPP_AM_FIX_SPEC "-D__alpha_fix__ -Acpu=fix" #define CPP_AM_CIX_SPEC "-D__alpha_cix__ -Acpu=cix" ! /* Corresponding to implver... */ #define CPP_IM_EV4_SPEC "-D__alpha_ev4__ -Acpu=ev4" #define CPP_IM_EV5_SPEC "-D__alpha_ev5__ -Acpu=ev5" #define CPP_IM_EV6_SPEC "-D__alpha_ev6__ -Acpu=ev6" *************** extern const char *alpha_mlat_string; /* *** 382,417 **** On the Alpha, we use this to disable the floating-point registers when they don't exist. */ ! #define CONDITIONAL_REGISTER_USAGE \ ! if (! TARGET_FPREGS) \ ! for (i = 32; i < 63; i++) \ ! fixed_regs[i] = call_used_regs[i] = 1; /* Show we can debug even without a frame pointer. */ #define CAN_DEBUG_WITHOUT_FP /* target machine storage layout */ ! /* Define to enable software floating point emulation. */ #define REAL_ARITHMETIC - /* The following #defines are used when compiling the routines in - libgcc1.c. Since the Alpha calling conventions require single - precision floats to be passed in the floating-point registers - (rather than in the general registers) we have to build the - libgcc1.c routines in such a way that they know the actual types - of their formal arguments and the actual types of their return - values. Otherwise, gcc will generate calls to the libgcc1.c - routines, passing arguments in the floating-point registers, - but the libgcc1.c routines will expect their arguments on the - stack (where the Alpha calling conventions require structs & - unions to be passed). */ - - #define FLOAT_VALUE_TYPE double - #define INTIFY(FLOATVAL) (FLOATVAL) - #define FLOATIFY(INTVAL) (INTVAL) - #define FLOAT_ARG_TYPE double - /* Define the size of `int'. The default is the same as the word size. */ #define INT_TYPE_SIZE 32 --- 395,417 ---- On the Alpha, we use this to disable the floating-point registers when they don't exist. */ ! #define CONDITIONAL_REGISTER_USAGE \ ! { \ ! int i; \ ! if (! TARGET_FPREGS) \ ! for (i = 32; i < 63; i++) \ ! fixed_regs[i] = call_used_regs[i] = 1; \ ! } ! /* Show we can debug even without a frame pointer. */ #define CAN_DEBUG_WITHOUT_FP /* target machine storage layout */ ! /* Define to enable software floating point emulation. */ #define REAL_ARITHMETIC /* Define the size of `int'. The default is the same as the word size. */ #define INT_TYPE_SIZE 32 *************** extern const char *alpha_mlat_string; /* *** 471,477 **** numbered. For Alpha we can decide arbitrarily since there are no machine instructions ! for them. Might as well be consistent with bytes. */ #define WORDS_BIG_ENDIAN 0 /* number of bits in an addressable storage unit */ --- 471,477 ---- numbered. For Alpha we can decide arbitrarily since there are no machine instructions ! for them. Might as well be consistent with bytes. */ #define WORDS_BIG_ENDIAN 0 /* number of bits in an addressable storage unit */ *************** extern const char *alpha_mlat_string; /* *** 681,686 **** --- 681,698 ---- doesn't seem to specify this. */ #define STATIC_CHAIN_REGNUM 1 + /* The register number of the register used to address a table of + static data addresses in memory. */ + #define PIC_OFFSET_TABLE_REGNUM 29 + + /* Define this macro if the register defined by `PIC_OFFSET_TABLE_REGNUM' + is clobbered by calls. */ + /* ??? It is and it isn't. It's required to be valid for a given + function when the function returns. It isn't clobbered by + current_file functions. Moreover, we do not expose the ldgp + until after reload, so we're probably safe. */ + /* #define PIC_OFFSET_TABLE_REG_CALL_CLOBBERED */ + /* Register in which address to store a structure value arrives in the function. On the Alpha, the address is passed as a hidden argument. */ *************** extern const char *alpha_mlat_string; /* *** 706,727 **** For any two classes, it is very desirable that there be another class that represents their union. */ ! enum reg_class { NO_REGS, PV_REG, GENERAL_REGS, FLOAT_REGS, ALL_REGS, ! LIM_REG_CLASSES }; #define N_REG_CLASSES (int) LIM_REG_CLASSES ! /* Give names of register classes as strings for dump file. */ #define REG_CLASS_NAMES \ ! {"NO_REGS", "PV_REG", "GENERAL_REGS", "FLOAT_REGS", "ALL_REGS" } /* Define which registers fit in which classes. This is an initializer for a vector of HARD_REG_SET of length N_REG_CLASSES. */ ! #define REG_CLASS_CONTENTS \ ! { {0, 0}, {0x08000000, 0}, {~0, 0x80000000}, {0, 0x7fffffff}, {~0, ~0} } /* The same information, inverted: Return the class number of the smallest class containing --- 718,749 ---- For any two classes, it is very desirable that there be another class that represents their union. */ ! enum reg_class { ! NO_REGS, R24_REG, R25_REG, R27_REG, ! GENERAL_REGS, FLOAT_REGS, ALL_REGS, ! LIM_REG_CLASSES ! }; #define N_REG_CLASSES (int) LIM_REG_CLASSES ! /* Give names of register classes as strings for dump file. */ #define REG_CLASS_NAMES \ ! {"NO_REGS", "R24_REG", "R25_REG", "R27_REG", \ ! "GENERAL_REGS", "FLOAT_REGS", "ALL_REGS" } /* Define which registers fit in which classes. This is an initializer for a vector of HARD_REG_SET of length N_REG_CLASSES. */ ! #define REG_CLASS_CONTENTS \ ! { {0x00000000, 0x00000000}, /* NO_REGS */ \ ! {0x01000000, 0x00000000}, /* R24_REG */ \ ! {0x02000000, 0x00000000}, /* R25_REG */ \ ! {0x08000000, 0x00000000}, /* R27_REG */ \ ! {0xffffffff, 0x80000000}, /* GENERAL_REGS */ \ ! {0x00000000, 0x7fffffff}, /* FLOAT_REGS */ \ ! {0xffffffff, 0xffffffff} } /* The same information, inverted: Return the class number of the smallest class containing *************** enum reg_class { NO_REGS, PV_REG, GENERA *** 729,735 **** or could index an array. */ #define REGNO_REG_CLASS(REGNO) \ ! ((REGNO) == 27 ? PV_REG \ : (REGNO) >= 32 && (REGNO) <= 62 ? FLOAT_REGS \ : GENERAL_REGS) --- 751,759 ---- or could index an array. */ #define REGNO_REG_CLASS(REGNO) \ ! ((REGNO) == 24 ? R24_REG \ ! : (REGNO) == 25 ? R25_REG \ ! : (REGNO) == 27 ? R27_REG \ : (REGNO) >= 32 && (REGNO) <= 62 ? FLOAT_REGS \ : GENERAL_REGS) *************** enum reg_class { NO_REGS, PV_REG, GENERA *** 740,746 **** /* Get reg_class from a letter such as appears in the machine description. */ #define REG_CLASS_FROM_LETTER(C) \ ! ((C) == 'c' ? PV_REG : (C) == 'f' ? FLOAT_REGS : NO_REGS) /* Define this macro to change register usage conditional on target flags. */ /* #define CONDITIONAL_REGISTER_USAGE */ --- 764,774 ---- /* Get reg_class from a letter such as appears in the machine description. */ #define REG_CLASS_FROM_LETTER(C) \ ! ((C) == 'a' ? R24_REG \ ! : (C) == 'b' ? R25_REG \ ! : (C) == 'c' ? R27_REG \ ! : (C) == 'f' ? FLOAT_REGS \ ! : NO_REGS) /* Define this macro to change register usage conditional on target flags. */ /* #define CONDITIONAL_REGISTER_USAGE */ *************** enum reg_class { NO_REGS, PV_REG, GENERA *** 761,777 **** `O' is used for negated 8-bit constants. `P' is used for the constants 1, 2 and 3. */ ! #define CONST_OK_FOR_LETTER_P(VALUE, C) \ ! ((C) == 'I' ? (unsigned HOST_WIDE_INT) (VALUE) < 0x100 \ ! : (C) == 'J' ? (VALUE) == 0 \ ! : (C) == 'K' ? (unsigned HOST_WIDE_INT) ((VALUE) + 0x8000) < 0x10000 \ ! : (C) == 'L' ? (((VALUE) & 0xffff) == 0 \ ! && (((VALUE)) >> 31 == -1 || (VALUE) >> 31 == 0)) \ ! : (C) == 'M' ? zap_mask (VALUE) \ ! : (C) == 'N' ? (unsigned HOST_WIDE_INT) (~ (VALUE)) < 0x100 \ ! : (C) == 'O' ? (unsigned HOST_WIDE_INT) (- (VALUE)) < 0x100 \ ! : (C) == 'P' ? (VALUE) == 1 || (VALUE) == 2 || (VALUE) == 3 \ ! : 0) /* Similar, but for floating or large integer constants, and defining letters G and H. Here VALUE is the CONST_DOUBLE rtx itself. --- 789,795 ---- `O' is used for negated 8-bit constants. `P' is used for the constants 1, 2 and 3. */ ! #define CONST_OK_FOR_LETTER_P alpha_const_ok_for_letter_p /* Similar, but for floating or large integer constants, and defining letters G and H. Here VALUE is the CONST_DOUBLE rtx itself. *************** enum reg_class { NO_REGS, PV_REG, GENERA *** 779,791 **** For Alpha, `G' is the floating-point constant zero. `H' is a CONST_DOUBLE that is the operand of a ZAP insn. */ ! #define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) \ ! ((C) == 'G' ? (GET_MODE_CLASS (GET_MODE (VALUE)) == MODE_FLOAT \ ! && (VALUE) == CONST0_RTX (GET_MODE (VALUE))) \ ! : (C) == 'H' ? (GET_MODE (VALUE) == VOIDmode \ ! && zap_mask (CONST_DOUBLE_LOW (VALUE)) \ ! && zap_mask (CONST_DOUBLE_HIGH (VALUE))) \ ! : 0) /* Optional extra constraints for this machine. --- 797,803 ---- For Alpha, `G' is the floating-point constant zero. `H' is a CONST_DOUBLE that is the operand of a ZAP insn. */ ! #define CONST_DOUBLE_OK_FOR_LETTER_P alpha_const_double_ok_for_letter_p /* Optional extra constraints for this machine. *************** enum reg_class { NO_REGS, PV_REG, GENERA *** 795,828 **** `R' is a SYMBOL_REF that has SYMBOL_REF_FLAG set or is the current function. ! 'S' is a 6-bit constant (valid for a shift insn). */ ! #define EXTRA_CONSTRAINT(OP, C) \ ! ((C) == 'Q' ? normal_memory_operand (OP, VOIDmode) \ ! : (C) == 'R' ? current_file_function_operand (OP, Pmode) \ ! : (C) == 'S' ? (GET_CODE (OP) == CONST_INT \ ! && (unsigned HOST_WIDE_INT) INTVAL (OP) < 64) \ ! : 0) /* Given an rtx X being reloaded into a reg required to be in class CLASS, return the class of reg to actually use. In general this is just CLASS; but on some machines ! in some cases it is preferable to use a more restrictive class. ! ! On the Alpha, all constants except zero go into a floating-point ! register via memory. */ ! #define PREFERRED_RELOAD_CLASS(X, CLASS) \ ! (CONSTANT_P (X) && (X) != const0_rtx && (X) != CONST0_RTX (GET_MODE (X)) \ ! ? ((CLASS) == FLOAT_REGS || (CLASS) == NO_REGS ? NO_REGS : GENERAL_REGS)\ ! : (CLASS)) /* Loading and storing HImode or QImode values to and from memory usually requires a scratch register. The exceptions are loading QImode and HImode from an aligned address to a general register unless byte instructions are permitted. We also cannot load an unaligned address or a paradoxical SUBREG into an ! FP register. */ #define SECONDARY_INPUT_RELOAD_CLASS(CLASS,MODE,IN) \ secondary_reload_class((CLASS), (MODE), (IN), 1) --- 807,833 ---- `R' is a SYMBOL_REF that has SYMBOL_REF_FLAG set or is the current function. ! 'S' is a 6-bit constant (valid for a shift insn). ! 'T' is a HIGH. ! ! 'U' is a symbolic operand. */ ! ! #define EXTRA_CONSTRAINT alpha_extra_constraint /* Given an rtx X being reloaded into a reg required to be in class CLASS, return the class of reg to actually use. In general this is just CLASS; but on some machines ! in some cases it is preferable to use a more restrictive class. */ ! #define PREFERRED_RELOAD_CLASS alpha_preferred_reload_class /* Loading and storing HImode or QImode values to and from memory usually requires a scratch register. The exceptions are loading QImode and HImode from an aligned address to a general register unless byte instructions are permitted. We also cannot load an unaligned address or a paradoxical SUBREG into an ! FP register. */ #define SECONDARY_INPUT_RELOAD_CLASS(CLASS,MODE,IN) \ secondary_reload_class((CLASS), (MODE), (IN), 1) *************** enum reg_class { NO_REGS, PV_REG, GENERA *** 834,840 **** location unless the FIX extension is available. */ #define SECONDARY_MEMORY_NEEDED(CLASS1,CLASS2,MODE) \ ! (! TARGET_FIX && (CLASS1) != (CLASS2)) /* Specify the mode to be used for memory when a secondary memory location is needed. If MODE is floating-point, use it. Otherwise, --- 839,846 ---- location unless the FIX extension is available. */ #define SECONDARY_MEMORY_NEEDED(CLASS1,CLASS2,MODE) \ ! (! TARGET_FIX && (((CLASS1) == FLOAT_REGS && (CLASS2) != FLOAT_REGS) \ ! || ((CLASS2) == FLOAT_REGS && (CLASS1) != FLOAT_REGS))) /* Specify the mode to be used for memory when a secondary memory location is needed. If MODE is floating-point, use it. Otherwise, *************** extern int alpha_memory_latency; *** 884,894 **** /* Provide the cost of a branch. Exact meaning under development. */ #define BRANCH_COST 5 - - /* Adjust the cost of dependencies. */ - - #define ADJUST_COST(INSN,LINK,DEP,COST) \ - (COST) = alpha_adjust_cost (INSN, LINK, DEP, COST) /* Stack layout; function entry, exit and calling. */ --- 890,895 ---- *************** extern int alpha_memory_latency; *** 931,937 **** We have two registers that can be eliminated on the Alpha. First, the frame pointer register can often be eliminated in favor of the stack pointer register. Secondly, the argument pointer register can always be ! eliminated; it is replaced with either the stack or frame pointer. */ /* This is an array of structures. Each structure initializes one pair of eliminable registers. The "from" register number is given first, --- 932,938 ---- We have two registers that can be eliminated on the Alpha. First, the frame pointer register can often be eliminated in favor of the stack pointer register. Secondly, the argument pointer register can always be ! eliminated; it is replaced with either the stack or frame pointer. */ /* This is an array of structures. Each structure initializes one pair of eliminable registers. The "from" register number is given first, *************** extern int alpha_memory_latency; *** 1095,1101 **** reference. If nonzero for an argument, a copy of that argument is made in memory and a pointer to the argument is passed instead of the argument itself. The pointer is passed in whatever way is ! appropriate for passing a pointer to that type. */ #define FUNCTION_ARG_PASS_BY_REFERENCE(CUM, MODE, TYPE, NAMED) \ ((MODE) == TFmode || (MODE) == TCmode) --- 1096,1102 ---- reference. If nonzero for an argument, a copy of that argument is made in memory and a pointer to the argument is passed instead of the argument itself. The pointer is passed in whatever way is ! appropriate for passing a pointer to that type. */ #define FUNCTION_ARG_PASS_BY_REFERENCE(CUM, MODE, TYPE, NAMED) \ ((MODE) == TFmode || (MODE) == TCmode) *************** extern int alpha_memory_latency; *** 1152,1158 **** tmp = gen_rtx_MEM (BLKmode, \ plus_constant (virtual_incoming_args_rtx, \ ((CUM) + 6)* UNITS_PER_WORD)); \ ! MEM_ALIAS_SET (tmp) = set; \ move_block_from_reg \ (16 + CUM, tmp, \ 6 - (CUM), (6 - (CUM)) * UNITS_PER_WORD); \ --- 1153,1159 ---- tmp = gen_rtx_MEM (BLKmode, \ plus_constant (virtual_incoming_args_rtx, \ ((CUM) + 6)* UNITS_PER_WORD)); \ ! set_mem_alias_set (tmp, set); \ move_block_from_reg \ (16 + CUM, tmp, \ 6 - (CUM), (6 - (CUM)) * UNITS_PER_WORD); \ *************** extern int alpha_memory_latency; *** 1160,1166 **** tmp = gen_rtx_MEM (BLKmode, \ plus_constant (virtual_incoming_args_rtx, \ (CUM) * UNITS_PER_WORD)); \ ! MEM_ALIAS_SET (tmp) = set; \ move_block_from_reg \ (16 + (TARGET_FPREGS ? 32 : 0) + CUM, tmp, \ 6 - (CUM), (6 - (CUM)) * UNITS_PER_WORD); \ --- 1161,1167 ---- tmp = gen_rtx_MEM (BLKmode, \ plus_constant (virtual_incoming_args_rtx, \ (CUM) * UNITS_PER_WORD)); \ ! set_mem_alias_set (tmp, set); \ move_block_from_reg \ (16 + (TARGET_FPREGS ? 32 : 0) + CUM, tmp, \ 6 - (CUM), (6 - (CUM)) * UNITS_PER_WORD); \ *************** struct alpha_compare *** 1196,1212 **** extern struct alpha_compare alpha_compare; - /* Machine specific function data. */ - - struct machine_function - { - /* If non-null, this rtx holds the return address for the function. */ - struct rtx_def *ra_rtx; - - /* If non-null, this rtx holds a saved copy of the GP for the function. */ - struct rtx_def *gp_save_rtx; - }; - /* Make (or fake) .linkage entry for function call. IS_LOCAL is 0 if name is used in call, 1 if name is used in definition. */ --- 1197,1202 ---- *************** struct machine_function *** 1224,1233 **** #define ASM_DECLARE_FUNCTION_SIZE(FILE,NAME,DECL) \ alpha_end_function(FILE,NAME,DECL) - /* This macro notes the end of the prologue. */ - - #define FUNCTION_END_PROLOGUE(FILE) output_end_prologue (FILE) - /* Output any profiling code before the prologue. */ #define PROFILE_BEFORE_PROLOGUE 1 --- 1214,1219 ---- *************** struct machine_function *** 1240,1246 **** /* Output assembler code to FILE to initialize this source file's basic block profiling info, if that has not already been done. ! This assumes that __bb_init_func doesn't garble a1-a5. */ #define FUNCTION_BLOCK_PROFILER(FILE, LABELNO) \ do { \ --- 1226,1232 ---- /* Output assembler code to FILE to initialize this source file's basic block profiling info, if that has not already been done. ! This assumes that __bb_init_func doesn't garble a1-a5. */ #define FUNCTION_BLOCK_PROFILER(FILE, LABELNO) \ do { \ *************** struct machine_function *** 1291,1298 **** The trampoline should set the static chain pointer to value placed into the trampoline and should branch to the specified routine. Note that $27 has been set to the address of the trampoline, so we can ! use it for addressability of the two data items. Trampolines are always ! aligned to FUNCTION_BOUNDARY, which is 64 bits. */ #define TRAMPOLINE_TEMPLATE(FILE) \ do { \ --- 1277,1283 ---- The trampoline should set the static chain pointer to value placed into the trampoline and should branch to the specified routine. Note that $27 has been set to the address of the trampoline, so we can ! use it for addressability of the two data items. */ #define TRAMPOLINE_TEMPLATE(FILE) \ do { \ *************** do { \ *** 1312,1317 **** --- 1297,1306 ---- #define TRAMPOLINE_SIZE 32 + /* The alignment of a trampoline, in bits. */ + + #define TRAMPOLINE_ALIGNMENT 64 + /* Emit RTL insns to initialize the variable parts of a trampoline. FNADDR is an RTX for the address of the function's pure code. CXT is an RTX for the static chain value for the function. */ *************** do { \ *** 1326,1332 **** #define RETURN_ADDR_RTX alpha_return_addr ! /* Before the prologue, RA lives in $26. */ #define INCOMING_RETURN_ADDR_RTX gen_rtx_REG (Pmode, 26) #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (26) --- 1315,1321 ---- #define RETURN_ADDR_RTX alpha_return_addr ! /* Before the prologue, RA lives in $26. */ #define INCOMING_RETURN_ADDR_RTX gen_rtx_REG (Pmode, 26) #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (26) *************** do { \ *** 1389,1611 **** After reload, it makes no difference, since pseudo regs have been eliminated by then. */ - #ifndef REG_OK_STRICT - /* Nonzero if X is a hard reg that can be used as an index or if it is a pseudo reg. */ #define REG_OK_FOR_INDEX_P(X) 0 /* Nonzero if X is a hard reg that can be used as a base reg or if it is a pseudo reg. */ ! #define REG_OK_FOR_BASE_P(X) \ (REGNO (X) < 32 || REGNO (X) == 63 || REGNO (X) >= FIRST_PSEUDO_REGISTER) /* ??? Nonzero if X is the frame pointer, or some virtual register that may eliminate to the frame pointer. These will be allowed to have offsets greater than 32K. This is done because register elimination offsets will change the hi/lo split, and if we split ! before reload, we will require additional instructions. */ ! #define REG_OK_FP_BASE_P(X) \ (REGNO (X) == 31 || REGNO (X) == 63 \ || (REGNO (X) >= FIRST_PSEUDO_REGISTER \ && REGNO (X) < LAST_VIRTUAL_REGISTER)) - #else - - /* Nonzero if X is a hard reg that can be used as an index. */ - #define REG_OK_FOR_INDEX_P(X) REGNO_OK_FOR_INDEX_P (REGNO (X)) - /* Nonzero if X is a hard reg that can be used as a base reg. */ ! #define REG_OK_FOR_BASE_P(X) REGNO_OK_FOR_BASE_P (REGNO (X)) ! ! #define REG_OK_FP_BASE_P(X) 0 #endif ! /* GO_IF_LEGITIMATE_ADDRESS recognizes an RTL expression ! that is a valid memory address for an instruction. ! The MODE argument is the machine mode for the MEM expression ! that wants to use this address. ! ! For Alpha, we have either a constant address or the sum of a register ! and a constant address, or just a register. For DImode, any of those ! forms can be surrounded with an AND that clear the low-order three bits; ! this is an "unaligned" access. ! ! First define the basic valid address. */ ! ! #define GO_IF_LEGITIMATE_SIMPLE_ADDRESS(MODE, X, ADDR) \ ! { \ ! rtx tmp = (X); \ ! if (GET_CODE (tmp) == SUBREG \ ! && (GET_MODE_SIZE (GET_MODE (tmp)) \ ! < GET_MODE_SIZE (GET_MODE (SUBREG_REG (tmp))))) \ ! tmp = SUBREG_REG (tmp); \ ! if (REG_P (tmp) && REG_OK_FOR_BASE_P (tmp)) \ ! goto ADDR; \ ! if (CONSTANT_ADDRESS_P (X)) \ ! goto ADDR; \ ! if (GET_CODE (X) == PLUS) \ ! { \ ! tmp = XEXP (X, 0); \ ! if (GET_CODE (tmp) == SUBREG \ ! && (GET_MODE_SIZE (GET_MODE (tmp)) \ ! < GET_MODE_SIZE (GET_MODE (SUBREG_REG (tmp))))) \ ! tmp = SUBREG_REG (tmp); \ ! if (REG_P (tmp)) \ ! { \ ! if (REG_OK_FP_BASE_P (tmp) \ ! && GET_CODE (XEXP (X, 1)) == CONST_INT) \ ! goto ADDR; \ ! if (REG_OK_FOR_BASE_P (tmp) \ ! && CONSTANT_ADDRESS_P (XEXP (X, 1))) \ ! goto ADDR; \ ! } \ ! else if (GET_CODE (tmp) == ADDRESSOF \ ! && CONSTANT_ADDRESS_P (XEXP (X, 1))) \ ! goto ADDR; \ ! } \ ! } ! ! /* Now accept the simple address, or, for DImode only, an AND of a simple ! address that turns off the low three bits. */ ! #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \ ! { GO_IF_LEGITIMATE_SIMPLE_ADDRESS (MODE, X, ADDR); \ ! if ((MODE) == DImode \ ! && GET_CODE (X) == AND \ ! && GET_CODE (XEXP (X, 1)) == CONST_INT \ ! && INTVAL (XEXP (X, 1)) == -8) \ ! GO_IF_LEGITIMATE_SIMPLE_ADDRESS (MODE, XEXP (X, 0), ADDR); \ ! } /* Try machine-dependent ways of modifying an illegitimate address to be legitimate. If we find one, return the new, valid address. ! This macro is used in only one place: `memory_address' in explow.c. ! ! OLDX is the address as it was before break_out_memory_refs was called. ! In some cases it is useful to look at this to decide what needs to be done. ! ! MODE and WIN are passed so that this macro can use ! GO_IF_LEGITIMATE_ADDRESS. ! ! It is always safe for this macro to do nothing. It exists to recognize ! opportunities to optimize the output. ! ! For the Alpha, there are three cases we handle: ! ! (1) If the address is (plus reg const_int) and the CONST_INT is not a ! valid offset, compute the high part of the constant and add it to the ! register. Then our address is (plus temp low-part-const). ! (2) If the address is (const (plus FOO const_int)), find the low-order ! part of the CONST_INT. Then load FOO plus any high-order part of the ! CONST_INT into a register. Our address is (plus reg low-part-const). ! This is done to reduce the number of GOT entries. ! (3) If we have a (plus reg const), emit the load as in (2), then add ! the two registers, and finally generate (plus reg low-part-const) as ! our address. */ #define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN) \ ! { if (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 0)) == REG \ ! && GET_CODE (XEXP (X, 1)) == CONST_INT \ ! && ! CONSTANT_ADDRESS_P (XEXP (X, 1))) \ ! { \ ! HOST_WIDE_INT val = INTVAL (XEXP (X, 1)); \ ! HOST_WIDE_INT lowpart = (val & 0xffff) - 2 * (val & 0x8000); \ ! HOST_WIDE_INT highpart = val - lowpart; \ ! rtx high = GEN_INT (highpart); \ ! rtx temp = expand_binop (Pmode, add_optab, XEXP (x, 0), \ ! high, NULL_RTX, 1, OPTAB_LIB_WIDEN); \ ! \ ! (X) = plus_constant (temp, lowpart); \ ! goto WIN; \ ! } \ ! else if (GET_CODE (X) == CONST \ ! && GET_CODE (XEXP (X, 0)) == PLUS \ ! && GET_CODE (XEXP (XEXP (X, 0), 1)) == CONST_INT) \ ! { \ ! HOST_WIDE_INT val = INTVAL (XEXP (XEXP (X, 0), 1)); \ ! HOST_WIDE_INT lowpart = (val & 0xffff) - 2 * (val & 0x8000); \ ! HOST_WIDE_INT highpart = val - lowpart; \ ! rtx high = XEXP (XEXP (X, 0), 0); \ ! \ ! if (highpart) \ ! high = plus_constant (high, highpart); \ ! \ ! (X) = plus_constant (force_reg (Pmode, high), lowpart); \ ! goto WIN; \ ! } \ ! else if (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 0)) == REG \ ! && GET_CODE (XEXP (X, 1)) == CONST \ ! && GET_CODE (XEXP (XEXP (X, 1), 0)) == PLUS \ ! && GET_CODE (XEXP (XEXP (XEXP (X, 1), 0), 1)) == CONST_INT) \ { \ ! HOST_WIDE_INT val = INTVAL (XEXP (XEXP (XEXP (X, 1), 0), 1)); \ ! HOST_WIDE_INT lowpart = (val & 0xffff) - 2 * (val & 0x8000); \ ! HOST_WIDE_INT highpart = val - lowpart; \ ! rtx high = XEXP (XEXP (XEXP (X, 1), 0), 0); \ ! \ ! if (highpart) \ ! high = plus_constant (high, highpart); \ ! \ ! high = expand_binop (Pmode, add_optab, XEXP (X, 0), \ ! force_reg (Pmode, high), \ ! high, 1, OPTAB_LIB_WIDEN); \ ! (X) = plus_constant (high, lowpart); \ goto WIN; \ } \ ! } /* Try a machine-dependent way of reloading an illegitimate address operand. If we find one, push the reload and jump to WIN. This ! macro is used in only one place: `find_reloads_address' in reload.c. ! ! For the Alpha, we wish to handle large displacements off a base ! register by splitting the addend across an ldah and the mem insn. ! This cuts number of extra insns needed from 3 to 1. */ ! #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 \ ! && REG_MODE_OK_FOR_BASE_P (XEXP (X, 0), MODE) \ ! && GET_CODE (XEXP (X, 1)) == CONST_INT) \ ! { \ ! HOST_WIDE_INT val = INTVAL (XEXP (X, 1)); \ ! HOST_WIDE_INT low = ((val & 0xffff) ^ 0x8000) - 0x8000; \ ! HOST_WIDE_INT high \ ! = (((val - low) & 0xffffffff) ^ 0x80000000) - 0x80000000; \ ! \ ! /* Check for 32-bit overflow. */ \ ! if (high + low != val) \ ! break; \ ! \ ! /* Reload the high part into a base reg; leave the low part \ ! in the mem directly. */ \ ! \ ! X = gen_rtx_PLUS (GET_MODE (X), \ ! gen_rtx_PLUS (GET_MODE (X), XEXP (X, 0), \ ! GEN_INT (high)), \ ! GEN_INT (low)); \ ! \ ! 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; \ ! } \ } while (0) /* Go to LABEL if ADDR (a legitimate address expression) --- 1378,1454 ---- After reload, it makes no difference, since pseudo regs have been eliminated by then. */ /* Nonzero if X is a hard reg that can be used as an index or if it is a pseudo reg. */ #define REG_OK_FOR_INDEX_P(X) 0 /* Nonzero if X is a hard reg that can be used as a base reg or if it is a pseudo reg. */ ! #define NONSTRICT_REG_OK_FOR_BASE_P(X) \ (REGNO (X) < 32 || REGNO (X) == 63 || REGNO (X) >= FIRST_PSEUDO_REGISTER) /* ??? Nonzero if X is the frame pointer, or some virtual register that may eliminate to the frame pointer. These will be allowed to have offsets greater than 32K. This is done because register elimination offsets will change the hi/lo split, and if we split ! before reload, we will require additional instructions. */ ! #define NONSTRICT_REG_OK_FP_BASE_P(X) \ (REGNO (X) == 31 || REGNO (X) == 63 \ || (REGNO (X) >= FIRST_PSEUDO_REGISTER \ && REGNO (X) < LAST_VIRTUAL_REGISTER)) /* Nonzero if X is a hard reg that can be used as a base reg. */ ! #define STRICT_REG_OK_FOR_BASE_P(X) REGNO_OK_FOR_BASE_P (REGNO (X)) + #ifdef REG_OK_STRICT + #define REG_OK_FOR_BASE_P(X) STRICT_REG_OK_FOR_BASE_P (X) + #else + #define REG_OK_FOR_BASE_P(X) NONSTRICT_REG_OK_FOR_BASE_P (X) #endif ! /* GO_IF_LEGITIMATE_ADDRESS recognizes an RTL expression that is a ! valid memory address for an instruction. */ ! #ifdef REG_OK_STRICT ! #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, WIN) \ ! do { \ ! if (alpha_legitimate_address_p (MODE, X, 1)) \ ! goto WIN; \ ! } while (0) ! #else ! #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, WIN) \ ! do { \ ! if (alpha_legitimate_address_p (MODE, X, 0)) \ ! goto WIN; \ ! } while (0) ! #endif /* Try machine-dependent ways of modifying an illegitimate address to be legitimate. If we find one, return the new, valid address. ! This macro is used in only one place: `memory_address' in explow.c. */ #define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN) \ ! do { \ ! rtx new_x = alpha_legitimize_address (X, NULL_RTX, MODE); \ ! if (new_x) \ { \ ! X = new_x; \ goto WIN; \ } \ ! } while (0) /* Try a machine-dependent way of reloading an illegitimate address operand. If we find one, push the reload and jump to WIN. This ! macro is used in only one place: `find_reloads_address' in reload.c. */ ! #define LEGITIMIZE_RELOAD_ADDRESS(X,MODE,OPNUM,TYPE,IND_L,WIN) \ ! do { \ ! rtx new_x = alpha_legitimize_reload_address (X, MODE, OPNUM, TYPE, IND_L); \ ! if (new_x) \ ! { \ ! X = new_x; \ ! goto WIN; \ ! } \ } while (0) /* Go to LABEL if ADDR (a legitimate address expression) *************** do { \ *** 1621,1627 **** #define ADDRESS_COST(X) 0 ! /* Machine-dependent reorg pass. */ #define MACHINE_DEPENDENT_REORG(X) alpha_reorg(X) /* Specify the machine mode that this machine uses --- 1464,1470 ---- #define ADDRESS_COST(X) 0 ! /* Machine-dependent reorg pass. */ #define MACHINE_DEPENDENT_REORG(X) alpha_reorg(X) /* Specify the machine mode that this machine uses *************** do { \ *** 1638,1649 **** but we should try to find some better way sometime. */ #define CASE_VECTOR_PC_RELATIVE 1 - /* Specify the tree operation to be used to convert reals to integers. */ - #define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR - - /* This is the kind of divide that is easiest to do in the general case. */ - #define EASY_DIV_EXPR TRUNC_DIV_EXPR - /* Define this as 1 if `char' should by default be signed; else as 0. */ #define DEFAULT_SIGNED_CHAR 1 --- 1481,1486 ---- *************** do { \ *** 1664,1670 **** move-instruction pairs, we will do a movstr or libcall instead. Without byte/word accesses, we want no more than four instructions; ! with, several single byte accesses are better. */ #define MOVE_RATIO (TARGET_BWX ? 7 : 2) --- 1501,1507 ---- move-instruction pairs, we will do a movstr or libcall instead. Without byte/word accesses, we want no more than four instructions; ! with, several single byte accesses are better. */ #define MOVE_RATIO (TARGET_BWX ? 7 : 2) *************** do { \ *** 1733,1739 **** between pointers and any other objects of this machine mode. */ #define Pmode DImode ! /* Mode of a function address in a call instruction (for indexing purposes). */ #define FUNCTION_MODE Pmode --- 1570,1576 ---- between pointers and any other objects of this machine mode. */ #define Pmode DImode ! /* Mode of a function address in a call instruction (for indexing purposes). */ #define FUNCTION_MODE Pmode *************** do { \ *** 1750,1767 **** #define NO_FUNCTION_CSE /* Define this to be nonzero if shift instructions ignore all but the low-order ! few bits. */ #define SHIFT_COUNT_TRUNCATED 1 - /* The EV4 is dual issue; EV5/EV6 are quad issue. */ - #define ISSUE_RATE (alpha_cpu == PROCESSOR_EV4 ? 2 : 4) - - /* Describe the fact that MULTI instructions are multiple instructions - and so to assume they don't pair with anything. */ - #define MD_SCHED_VARIABLE_ISSUE(DUMP, SCHED_VERBOSE, INSN, CAN_ISSUE_MORE) \ - if (recog_memoized (INSN) < 0 || get_attr_type (INSN) == TYPE_MULTI) \ - (CAN_ISSUE_MORE) = 0 - /* Compute the cost of computing a constant rtl expression RTX whose rtx-code is CODE. The body of this macro is a portion of a switch statement. If the code is computed here, --- 1587,1595 ---- #define NO_FUNCTION_CSE /* Define this to be nonzero if shift instructions ignore all but the low-order ! few bits. */ #define SHIFT_COUNT_TRUNCATED 1 /* Compute the cost of computing a constant rtl expression RTX whose rtx-code is CODE. The body of this macro is a portion of a switch statement. If the code is computed here, *************** do { \ *** 1845,1851 **** if (GET_CODE (XEXP (X, 1)) == CONST_INT \ && INTVAL (XEXP (X, 1)) <= 3) \ break; \ ! /* ... fall through ... */ \ case ASHIFTRT: case LSHIFTRT: \ switch (alpha_cpu) \ { \ --- 1673,1679 ---- if (GET_CODE (XEXP (X, 1)) == CONST_INT \ && INTVAL (XEXP (X, 1)) <= 3) \ break; \ ! /* ... fall through ... */ \ case ASHIFTRT: case LSHIFTRT: \ switch (alpha_cpu) \ { \ *************** do { \ *** 1905,1911 **** case NEG: case ABS: \ if (! FLOAT_MODE_P (GET_MODE (X))) \ break; \ ! /* ... fall through ... */ \ case FLOAT: case UNSIGNED_FLOAT: case FIX: case UNSIGNED_FIX: \ case FLOAT_EXTEND: case FLOAT_TRUNCATE: \ switch (alpha_cpu) \ --- 1733,1739 ---- case NEG: case ABS: \ if (! FLOAT_MODE_P (GET_MODE (X))) \ break; \ ! /* ... fall through ... */ \ case FLOAT: case UNSIGNED_FLOAT: case FIX: case UNSIGNED_FIX: \ case FLOAT_EXTEND: case FLOAT_TRUNCATE: \ switch (alpha_cpu) \ *************** do { \ *** 1922,1934 **** /* Output to assembler file text saying following lines may contain character constants, extra white space, comments, etc. */ ! ! #define ASM_APP_ON "" /* Output to assembler file text saying following lines no longer contain unusual constructs. */ ! ! #define ASM_APP_OFF "" #define TEXT_SECTION_ASM_OP "\t.text" --- 1750,1760 ---- /* Output to assembler file text saying following lines may contain character constants, extra white space, comments, etc. */ ! #define ASM_APP_ON (TARGET_EXPLICIT_RELOCS ? "\t.set\tmacro\n" : "") /* Output to assembler file text saying following lines no longer contain unusual constructs. */ ! #define ASM_APP_OFF (TARGET_EXPLICIT_RELOCS ? "\t.set\tnomacro\n" : "") #define TEXT_SECTION_ASM_OP "\t.text" *************** literal_section () \ *** 1961,1967 **** if (firsttime) \ { \ firsttime = 0; \ ! ASM_OUTPUT_DOUBLE_INT (asm_out_file, const0_rtx); \ } \ \ in_section = readonly_data; \ --- 1787,1793 ---- if (firsttime) \ { \ firsttime = 0; \ ! assemble_aligned_integer (8, const0_rtx); \ } \ \ in_section = readonly_data; \ *************** literal_section () \ *** 1970,1982 **** #define READONLY_DATA_SECTION literal_section ! /* If we are referencing a function that is static, make the SYMBOL_REF ! special. We use this to see indicate we can branch to this function ! without setting PV or restoring GP. */ ! #define ENCODE_SECTION_INFO(DECL) \ ! if (TREE_CODE (DECL) == FUNCTION_DECL && ! TREE_PUBLIC (DECL)) \ ! SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0)) = 1; /* How to refer to registers in assembler output. This sequence is indexed by compiler's hard-register-number (see above). */ --- 1796,1824 ---- #define READONLY_DATA_SECTION literal_section ! /* Define this macro if references to a symbol must be treated differently ! depending on something about the variable or function named by the symbol ! (such as what section it is in). */ ! #define ENCODE_SECTION_INFO(DECL) alpha_encode_section_info (DECL) ! ! /* If a variable is weakened, made one only or moved into a different ! section, it may be necessary to redo the section info to move the ! variable out of sdata. */ ! ! #define REDO_SECTION_INFO_P(DECL) \ ! ((TREE_CODE (DECL) == VAR_DECL) \ ! && (DECL_ONE_ONLY (DECL) || DECL_WEAK (DECL) || DECL_COMMON (DECL) \ ! || DECL_SECTION_NAME (DECL) != 0)) ! ! #define STRIP_NAME_ENCODING(VAR,SYMBOL_NAME) \ ! do { \ ! (VAR) = (SYMBOL_NAME); \ ! if ((VAR)[0] == '@') \ ! (VAR) += 2; \ ! if ((VAR)[0] == '*') \ ! (VAR)++; \ ! } while (0) /* How to refer to registers in assembler output. This sequence is indexed by compiler's hard-register-number (see above). */ *************** literal_section () \ *** 1991,1999 **** "$f16", "$f17", "$f18", "$f19", "$f20", "$f21", "$f22", "$f23",\ "$f24", "$f25", "$f26", "$f27", "$f28", "$f29", "$f30", "FP"} ! /* How to renumber registers for dbx and gdb. */ ! #define DBX_REGISTER_NUMBER(REGNO) (REGNO) /* This is how to output the definition of a user-level label named NAME, such as the label on a static function or variable NAME. */ --- 1833,1851 ---- "$f16", "$f17", "$f18", "$f19", "$f20", "$f21", "$f22", "$f23",\ "$f24", "$f25", "$f26", "$f27", "$f28", "$f29", "$f30", "FP"} ! /* Strip name encoding when emitting labels. */ ! #define ASM_OUTPUT_LABELREF(STREAM, NAME) \ ! do { \ ! const char *name_ = NAME; \ ! if (*name_ == '@') \ ! name_ += 2; \ ! if (*name_ == '*') \ ! name_++; \ ! else \ ! fputs (user_label_prefix, STREAM); \ ! fputs (name_, STREAM); \ ! } while (0) /* This is how to output the definition of a user-level label named NAME, such as the label on a static function or variable NAME. */ *************** literal_section () \ *** 2007,2013 **** #define ASM_GLOBALIZE_LABEL(FILE,NAME) \ do { fputs ("\t.globl ", FILE); assemble_name (FILE, NAME); fputs ("\n", FILE);} while (0) ! /* The prefix to add to user-visible assembler symbols. */ #define USER_LABEL_PREFIX "" --- 1859,1865 ---- #define ASM_GLOBALIZE_LABEL(FILE,NAME) \ do { fputs ("\t.globl ", FILE); assemble_name (FILE, NAME); fputs ("\n", FILE);} while (0) ! /* The prefix to add to user-visible assembler symbols. */ #define USER_LABEL_PREFIX "" *************** literal_section () \ *** 2019,2025 **** /* This is how to output a label for a jump table. Arguments are the same as for ASM_OUTPUT_INTERNAL_LABEL, except the insn for the jump table is ! passed. */ #define ASM_OUTPUT_CASE_LABEL(FILE,PREFIX,NUM,TABLEINSN) \ { ASM_OUTPUT_ALIGN (FILE, 2); ASM_OUTPUT_INTERNAL_LABEL (FILE, PREFIX, NUM); } --- 1871,1877 ---- /* This is how to output a label for a jump table. Arguments are the same as for ASM_OUTPUT_INTERNAL_LABEL, except the insn for the jump table is ! passed. */ #define ASM_OUTPUT_CASE_LABEL(FILE,PREFIX,NUM,TABLEINSN) \ { ASM_OUTPUT_ALIGN (FILE, 2); ASM_OUTPUT_INTERNAL_LABEL (FILE, PREFIX, NUM); } *************** literal_section () \ *** 2037,2099 **** #define CHECK_FLOAT_VALUE(MODE, D, OVERFLOW) \ ((OVERFLOW) = check_float_value (MODE, &D, OVERFLOW)) - /* This is how to output an assembler line defining a `long double' - constant. */ - - #define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \ - do { \ - long t[4]; \ - REAL_VALUE_TO_TARGET_LONG_DOUBLE ((VALUE), t); \ - fprintf (FILE, "\t.quad 0x%lx%08lx,0x%lx%08lx\n", \ - t[1] & 0xffffffff, t[0] & 0xffffffff, \ - t[3] & 0xffffffff, t[2] & 0xffffffff); \ - } while (0) - - /* This is how to output an assembler line defining a `double' constant. */ - - #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - do { \ - long t[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), t); \ - fprintf (FILE, "\t.quad 0x%lx%08lx\n", \ - t[1] & 0xffffffff, t[0] & 0xffffffff); \ - } while (0) - - /* This is how to output an assembler line defining a `float' constant. */ - - #define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - do { \ - long t; \ - REAL_VALUE_TO_TARGET_SINGLE ((VALUE), t); \ - fprintf (FILE, "\t.long 0x%lx\n", t & 0xffffffff); \ - } while (0) - - /* This is how to output an assembler line defining an `int' constant. */ - - #define ASM_OUTPUT_INT(FILE,VALUE) \ - ( fprintf (FILE, "\t.long "), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "\n")) - - /* This is how to output an assembler line defining a `long' constant. */ - - #define ASM_OUTPUT_DOUBLE_INT(FILE,VALUE) \ - ( fprintf (FILE, "\t.quad "), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "\n")) - - /* Likewise for `char' and `short' constants. */ - - #define ASM_OUTPUT_SHORT(FILE,VALUE) \ - fprintf (FILE, "\t.word %d\n", \ - (int)(GET_CODE (VALUE) == CONST_INT \ - ? INTVAL (VALUE) & 0xffff : (abort (), 0))) - - #define ASM_OUTPUT_CHAR(FILE,VALUE) \ - fprintf (FILE, "\t.byte %d\n", \ - (int)(GET_CODE (VALUE) == CONST_INT \ - ? INTVAL (VALUE) & 0xff : (abort (), 0))) - /* We use the default ASCII-output routine, except that we don't write more than 50 characters since the assembler doesn't support very long lines. */ --- 1889,1894 ---- *************** literal_section () \ *** 2126,2136 **** fprintf (asm_out_file, "\\%o", c); \ /* After an octal-escape, if a digit follows, \ terminate one string constant and start another. \ ! The Vax assembler fails to stop reading the escape \ after three digits, so this is the only way we \ can get it to parse the data properly. */ \ ! if (i < thissize - 1 \ ! && p[i + 1] >= '0' && p[i + 1] <= '9') \ _size_so_far = 0, fprintf (asm_out_file, "\"\n\t.ascii \""); \ } \ } \ --- 1921,1930 ---- fprintf (asm_out_file, "\\%o", c); \ /* After an octal-escape, if a digit follows, \ terminate one string constant and start another. \ ! The VAX assembler fails to stop reading the escape \ after three digits, so this is the only way we \ can get it to parse the data properly. */ \ ! if (i < thissize - 1 && ISDIGIT (p[i + 1])) \ _size_so_far = 0, fprintf (asm_out_file, "\"\n\t.ascii \""); \ } \ } \ *************** literal_section () \ *** 2139,2149 **** } \ while (0) - /* To get unaligned data, we have to turn off auto alignment. */ - #define UNALIGNED_SHORT_ASM_OP "\t.align 0\n\t.word\t" - #define UNALIGNED_INT_ASM_OP "\t.align 0\n\t.long\t" - #define UNALIGNED_DOUBLE_INT_ASM_OP "\t.align 0\n\t.quad\t" - /* This is how to output an insn to push a register on the stack. It need not be very fast code. */ --- 1933,1938 ---- *************** literal_section () \ *** 2160,2170 **** (REGNO) > 32 ? "t" : "q", (REGNO) > 32 ? "f" : "", \ (REGNO) & 31); - /* This is how to output an assembler line for a numeric constant byte. */ - - #define ASM_OUTPUT_BYTE(FILE,VALUE) \ - fprintf (FILE, "\t.byte 0x%x\n", (int) ((VALUE) & 0xff)) - /* This is how to output an element of a case-vector that is absolute. (Alpha does not use such vectors, but we must define this macro anyway.) */ --- 1949,1954 ---- *************** literal_section () \ *** 2173,2179 **** /* This is how to output an element of a case-vector that is relative. */ #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ ! fprintf (FILE, "\t.%s $L%d\n", TARGET_WINDOWS_NT ? "long" : "gprel32", \ (VALUE)) /* This is how to output an assembler line --- 1957,1963 ---- /* This is how to output an element of a case-vector that is relative. */ #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ ! fprintf (FILE, "\t.%s $L%d\n", TARGET_ABI_WINDOWS_NT ? "long" : "gprel32", \ (VALUE)) /* This is how to output an assembler line *************** literal_section () \ *** 2212,2272 **** #define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \ ( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 10), \ sprintf ((OUTPUT), "%s.%d", (NAME), (LABELNO))) - - /* Define the parentheses used to group arithmetic operations - in assembler code. */ - - #define ASM_OPEN_PAREN "(" - #define ASM_CLOSE_PAREN ")" - - /* Output code to add DELTA to the first argument, and then jump to FUNCTION. - Used for C++ multiple inheritance. */ - /* ??? This is only used with the v2 ABI, and alpha.c makes assumptions - about current_function_is_thunk that are not valid with the v3 ABI. */ - #if 0 - #define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \ - do { \ - const char *fn_name = XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0); \ - int reg; \ - \ - if (! TARGET_OPEN_VMS && ! TARGET_WINDOWS_NT) \ - fprintf (FILE, "\tldgp $29,0($27)\n"); \ - \ - /* Mark end of prologue. */ \ - output_end_prologue (FILE); \ - \ - /* Rely on the assembler to macro expand a large delta. */ \ - fprintf (FILE, "\t.set at\n"); \ - reg = aggregate_value_p (TREE_TYPE (TREE_TYPE (FUNCTION))) ? 17 : 16; \ - fprintf (FILE, "\tlda $%d,%ld($%d)\n", reg, (long)(DELTA), reg); \ - \ - if (current_file_function_operand (XEXP (DECL_RTL (FUNCTION), 0), \ - VOIDmode)) \ - { \ - fprintf (FILE, "\tbr $31,$"); \ - assemble_name (FILE, fn_name); \ - fprintf (FILE, "..ng\n"); \ - } \ - else \ - { \ - fprintf (FILE, "\tjmp $31,"); \ - assemble_name (FILE, fn_name); \ - fputc ('\n', FILE); \ - } \ - fprintf (FILE, "\t.set noat\n"); \ - } while (0) - #endif - /* Define results of standard character escape sequences. */ - #define TARGET_BELL 007 - #define TARGET_BS 010 - #define TARGET_TAB 011 - #define TARGET_NEWLINE 012 - #define TARGET_VT 013 - #define TARGET_FF 014 - #define TARGET_CR 015 - /* Print operand X (an rtx) in assembler syntax to file FILE. CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified. For `%' followed by punctuation, CODE is the punctuation and X is null. */ --- 1996,2003 ---- *************** do { \ *** 2278,2303 **** ~ Generates the name of the current function. ! & Generates fp-rounding mode suffix: nothing for normal, 'c' for ! chopped, 'm' for minus-infinity, and 'd' for dynamic rounding ! mode. alpha_fprm controls which suffix is generated. ! ! ' Generates trap-mode suffix for instructions that accept the ! su suffix only (cmpt et al). ! ! ` Generates trap-mode suffix for instructions that accept the ! v and sv suffix. The only instruction that needs this is cvtql. ! ! ( Generates trap-mode suffix for instructions that accept the ! v, sv, and svi suffix. The only instruction that needs this ! is cvttq. ! ! ) Generates trap-mode suffix for instructions that accept the ! u, su, and sui suffix. This is the bulk of the IEEE floating ! point instructions (addt et al). ! ! + Generates trap-mode suffix for instructions that accept the ! sui suffix (cvtqt and cvtqs). , Generates single precision suffix for floating point instructions (s for IEEE, f for VAX) --- 2009,2016 ---- ~ Generates the name of the current function. ! / Generates the instruction suffix. The TRAP_SUFFIX and ROUND_SUFFIX ! attributes are examined to determine what is appropriate. , Generates single precision suffix for floating point instructions (s for IEEE, f for VAX) *************** do { \ *** 2306,2315 **** instructions (t for IEEE, g for VAX) */ ! #define PRINT_OPERAND_PUNCT_VALID_P(CODE) \ ! ((CODE) == '&' || (CODE) == '`' || (CODE) == '\'' || (CODE) == '(' \ ! || (CODE) == ')' || (CODE) == '+' || (CODE) == ',' || (CODE) == '-' \ ! || (CODE) == '~') /* Print a memory address as an operand to reference that memory location. */ --- 2019,2027 ---- instructions (t for IEEE, g for VAX) */ ! #define PRINT_OPERAND_PUNCT_VALID_P(CODE) \ ! ((CODE) == '/' || (CODE) == ',' || (CODE) == '-' || (CODE) == '~' \ ! || (CODE) == '#' || (CODE) == '*') /* Print a memory address as an operand to reference that memory location. */ *************** do { \ *** 2341,2351 **** {"divmod_operator", {DIV, MOD, UDIV, UMOD}}, \ {"fp0_operand", {CONST_DOUBLE}}, \ {"current_file_function_operand", {SYMBOL_REF}}, \ {"call_operand", {REG, SYMBOL_REF}}, \ {"input_operand", {SUBREG, REG, MEM, CONST_INT, CONST_DOUBLE, \ ! SYMBOL_REF, CONST, LABEL_REF}}, \ {"some_operand", {SUBREG, REG, MEM, CONST_INT, CONST_DOUBLE, \ ! SYMBOL_REF, CONST, LABEL_REF}}, \ {"some_ni_operand", {SUBREG, REG, MEM}}, \ {"aligned_memory_operand", {MEM}}, \ {"unaligned_memory_operand", {MEM}}, \ --- 2053,2067 ---- {"divmod_operator", {DIV, MOD, UDIV, UMOD}}, \ {"fp0_operand", {CONST_DOUBLE}}, \ {"current_file_function_operand", {SYMBOL_REF}}, \ + {"direct_call_operand", {SYMBOL_REF}}, \ + {"local_symbolic_operand", {SYMBOL_REF, CONST, LABEL_REF}}, \ + {"small_symbolic_operand", {SYMBOL_REF, CONST}}, \ + {"global_symbolic_operand", {SYMBOL_REF, CONST}}, \ {"call_operand", {REG, SYMBOL_REF}}, \ {"input_operand", {SUBREG, REG, MEM, CONST_INT, CONST_DOUBLE, \ ! SYMBOL_REF, CONST, LABEL_REF, HIGH}}, \ {"some_operand", {SUBREG, REG, MEM, CONST_INT, CONST_DOUBLE, \ ! SYMBOL_REF, CONST, LABEL_REF, HIGH}}, \ {"some_ni_operand", {SUBREG, REG, MEM}}, \ {"aligned_memory_operand", {MEM}}, \ {"unaligned_memory_operand", {MEM}}, \ *************** do { \ *** 2355,2361 **** {"hard_int_register_operand", {SUBREG, REG}}, \ {"reg_not_elim_operand", {SUBREG, REG}}, \ {"reg_no_subreg_operand", {REG}}, \ ! {"addition_operation", {PLUS}}, /* Define the `__builtin_va_list' type for the ABI. */ #define BUILD_VA_LIST_TYPE(VALIST) \ --- 2071,2080 ---- {"hard_int_register_operand", {SUBREG, REG}}, \ {"reg_not_elim_operand", {SUBREG, REG}}, \ {"reg_no_subreg_operand", {REG}}, \ ! {"addition_operation", {PLUS}}, \ ! {"symbolic_operand", {SYMBOL_REF, LABEL_REF, CONST}}, \ ! {"some_small_symbolic_operand", {SET, PARALLEL, PREFETCH, UNSPEC, \ ! UNSPEC_VOLATILE}}, /* Define the `__builtin_va_list' type for the ABI. */ #define BUILD_VA_LIST_TYPE(VALIST) \ *************** do { \ *** 2497,2503 **** mips-tdump.c to print them out. These must match the corresponding definitions in gdb/mipsread.c. ! Unfortunately, gcc and gdb do not currently share any directories. */ #define CODE_MASK 0x8F300 #define MIPS_IS_STAB(sym) (((sym)->index & 0xFFF00) == CODE_MASK) --- 2216,2222 ---- mips-tdump.c to print them out. These must match the corresponding definitions in gdb/mipsread.c. ! Unfortunately, gcc and gdb do not currently share any directories. */ #define CODE_MASK 0x8F300 #define MIPS_IS_STAB(sym) (((sym)->index & 0xFFF00) == CODE_MASK) *************** do { \ *** 2516,2520 **** /* The system headers under Alpha systems are generally C++-aware. */ #define NO_IMPLICIT_EXTERN_C ! /* Generate calls to memcpy, etc., not bcopy, etc. */ #define TARGET_MEM_FUNCTIONS 1 --- 2235,2244 ---- /* The system headers under Alpha systems are generally C++-aware. */ #define NO_IMPLICIT_EXTERN_C ! /* Generate calls to memcpy, etc., not bcopy, etc. */ #define TARGET_MEM_FUNCTIONS 1 + + /* 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) \ + alpha_output_mi_thunk_osf (FILE, THUNK_FNDECL, DELTA, FUNCTION) diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/alpha.md gcc-3.1/gcc/config/alpha/alpha.md *** gcc-3.0.4/gcc/config/alpha/alpha.md Mon Jun 11 16:25:38 2001 --- gcc-3.1/gcc/config/alpha/alpha.md Wed Apr 10 05:14:55 2002 *************** *** 23,49 **** ;;- See file "rtl.def" for documentation on define_insn, match_*, et. al. ;; Uses of UNSPEC in this file: ! ;; ! ;; 0 arg_home ! ;; 1 cttz ! ;; 2 insxh ! ;; 3 mskxh ! ;; 5 cvtql ! ;; 6 nt_lda ! ;; ;; UNSPEC_VOLATILE: ;; ! ;; 0 imb ! ;; 1 blockage ! ;; 2 builtin_setjmp_receiver ! ;; 3 builtin_longjmp ! ;; 4 trapb ! ;; 5 prologue_stack_probe_loop ! ;; 6 realign ! ;; 7 exception_receiver ! ;; 8 prologue_mcount ! ;; 9 prologue_ldgp_1 ! ;; 10 prologue_ldgp_2 ;; Processor type -- this attribute must exactly match the processor_type ;; enumeration in alpha.h. --- 23,69 ---- ;;- See file "rtl.def" for documentation on define_insn, match_*, et. al. ;; Uses of UNSPEC in this file: ! ! (define_constants ! [(UNSPEC_ARG_HOME 0) ! (UNSPEC_CTTZ 1) ! (UNSPEC_INSXH 2) ! (UNSPEC_MSKXH 3) ! (UNSPEC_CVTQL 4) ! (UNSPEC_NT_LDA 5) ! (UNSPEC_UMK_LAUM 6) ! (UNSPEC_UMK_LALM 7) ! (UNSPEC_UMK_LAL 8) ! (UNSPEC_UMK_LOAD_CIW 9) ! (UNSPEC_LDGP2 10) ! (UNSPEC_LITERAL 11) ! (UNSPEC_LITUSE 12) ! (UNSPEC_SIBCALL 13) ! (UNSPEC_SYMBOL 14) ! ]) ! ;; UNSPEC_VOLATILE: + + (define_constants + [(UNSPECV_IMB 0) + (UNSPECV_BLOCKAGE 1) + (UNSPECV_SETJMPR 2) ; builtin_setjmp_receiver + (UNSPECV_LONGJMP 3) ; builtin_longjmp + (UNSPECV_TRAPB 4) + (UNSPECV_PSPL 5) ; prologue_stack_probe_loop + (UNSPECV_REALIGN 6) + (UNSPECV_EHR 7) ; exception_receiver + (UNSPECV_MCOUNT 8) + (UNSPECV_FORCE_MOV 9) + (UNSPECV_LDGP1 10) + (UNSPECV_PLDGP2 11) ; prologue ldgp + ]) + + ;; Where necessary, the suffixes _le and _be are used to distinguish between + ;; little-endian and big-endian patterns. ;; ! ;; Note that the Unicos/Mk assembler does not support the following ! ;; opcodes: mov, fmov, nop, fnop, unop. ;; Processor type -- this attribute must exactly match the processor_type ;; enumeration in alpha.h. *************** *** 57,63 **** ;; separately. (define_attr "type" ! "ild,fld,ldsym,ist,fst,ibr,fbr,jsr,iadd,ilog,shift,icmov,fcmov,icmp,imul,fadd,fmul,fcpys,fdiv,fsqrt,misc,mvi,ftoi,itof,multi" (const_string "iadd")) ;; Describe a user's asm statement. --- 77,84 ---- ;; separately. (define_attr "type" ! "ild,fld,ldsym,ist,fst,ibr,fbr,jsr,iadd,ilog,shift,icmov,fcmov,icmp,imul,\ ! fadd,fmul,fcpys,fdiv,fsqrt,misc,mvi,ftoi,itof,multi" (const_string "iadd")) ;; Describe a user's asm statement. *************** *** 65,83 **** [(set_attr "type" "multi")]) ;; Define the operand size an insn operates on. Used primarily by mul ! ;; and div operations that have size dependant timings. ! (define_attr "opsize" "si,di,udi" (const_string "di")) ! ;; The TRAP_TYPE attribute marks instructions that may generate traps ;; (which are imprecise and may need a trapb if software completion ;; is desired). ! (define_attr "trap" "no,yes" (const_string "no")) ;; The length of an instruction sequence in bytes. ! (define_attr "length" "" (const_int 4)) ;; On EV4 there are two classes of resources to consider: resources needed ;; to issue, and resources needed to execute. IBUS[01] are in the first --- 86,127 ---- [(set_attr "type" "multi")]) ;; Define the operand size an insn operates on. Used primarily by mul ! ;; and div operations that have size dependent timings. ! (define_attr "opsize" "si,di,udi" ! (const_string "di")) ! ;; The TRAP attribute marks instructions that may generate traps ;; (which are imprecise and may need a trapb if software completion ;; is desired). ! (define_attr "trap" "no,yes" ! (const_string "no")) ! ! ;; The ROUND_SUFFIX attribute marks which instructions require a ! ;; rounding-mode suffix. The value NONE indicates no suffix, ! ;; the value NORMAL indicates a suffix controled by alpha_fprm. ! ! (define_attr "round_suffix" "none,normal,c" ! (const_string "none")) ! ! ;; The TRAP_SUFFIX attribute marks instructions requiring a trap-mode suffix: ! ;; NONE no suffix ! ;; SU accepts only /su (cmpt et al) ! ;; SUI accepts only /sui (cvtqt and cvtqs) ! ;; V_SV accepts /v and /sv (cvtql only) ! ;; V_SV_SVI accepts /v, /sv and /svi (cvttq only) ! ;; U_SU_SUI accepts /u, /su and /sui (most fp instructions) ! ;; ! ;; The actual suffix emitted is controled by alpha_fptm. ! ! (define_attr "trap_suffix" "none,su,sui,v_sv,v_sv_svi,u_su_sui" ! (const_string "none")) ;; The length of an instruction sequence in bytes. ! (define_attr "length" "" ! (const_int 4)) ;; On EV4 there are two classes of resources to consider: resources needed ;; to issue, and resources needed to execute. IBUS[01] are in the first *************** *** 223,236 **** (and (eq_attr "cpu" "ev5") (eq_attr "type" "fadd,fcmov,fmul,fcpys,fbr,fdiv")) 4 1) ! (define_function_unit "ev5_fm" 1 0 (and (eq_attr "cpu" "ev5") (eq_attr "type" "fmul")) 4 1) ; Add and cmov as you would expect; fbr never produces a result; ! ; fdiv issues through fa to the divider, (define_function_unit "ev5_fa" 1 0 (and (eq_attr "cpu" "ev5") (eq_attr "type" "fadd,fcmov,fbr,fdiv")) --- 267,280 ---- (and (eq_attr "cpu" "ev5") (eq_attr "type" "fadd,fcmov,fmul,fcpys,fbr,fdiv")) 4 1) ! (define_function_unit "ev5_fm" 1 0 (and (eq_attr "cpu" "ev5") (eq_attr "type" "fmul")) 4 1) ; Add and cmov as you would expect; fbr never produces a result; ! ; fdiv issues through fa to the divider, (define_function_unit "ev5_fa" 1 0 (and (eq_attr "cpu" "ev5") (eq_attr "type" "fadd,fcmov,fbr,fdiv")) *************** *** 242,261 **** (and (eq_attr "cpu" "ev5") (and (eq_attr "type" "fdiv") (eq_attr "opsize" "si"))) ! 15 15) ; 15 to 31 data dependant (define_function_unit "fdiv" 1 0 (and (eq_attr "cpu" "ev5") (and (eq_attr "type" "fdiv") (eq_attr "opsize" "di"))) ! 22 22) ; 22 to 60 data dependant ;; EV6 scheduling. EV6 can issue 4 insns per clock. ;; ;; EV6 has two symmetric pairs ("clusters") of two asymetric integer units ;; ("upper" and "lower"), yielding pipe names U0, U1, L0, L1. ! ;; Conditional moves decompose into two independant primitives, each ;; taking one cycle. Since ev6 is out-of-order, we can't see anything ;; but two cycles. (define_function_unit "ev6_ebox" 4 0 --- 286,305 ---- (and (eq_attr "cpu" "ev5") (and (eq_attr "type" "fdiv") (eq_attr "opsize" "si"))) ! 15 15) ; 15 to 31 data dependent (define_function_unit "fdiv" 1 0 (and (eq_attr "cpu" "ev5") (and (eq_attr "type" "fdiv") (eq_attr "opsize" "di"))) ! 22 22) ; 22 to 60 data dependent ;; EV6 scheduling. EV6 can issue 4 insns per clock. ;; ;; EV6 has two symmetric pairs ("clusters") of two asymetric integer units ;; ("upper" and "lower"), yielding pipe names U0, U1, L0, L1. ! ;; Conditional moves decompose into two independent primitives, each ;; taking one cycle. Since ev6 is out-of-order, we can't see anything ;; but two cycles. (define_function_unit "ev6_ebox" 4 0 *************** *** 340,346 **** ;; For the FPU we are very similar to EV5, except there's no insn that ;; can issue to fm & fa, so we get to leave that out. ! (define_function_unit "ev6_fm" 1 0 (and (eq_attr "cpu" "ev6") (eq_attr "type" "fmul")) --- 384,390 ---- ;; For the FPU we are very similar to EV5, except there's no insn that ;; can issue to fm & fa, so we get to leave that out. ! (define_function_unit "ev6_fm" 1 0 (and (eq_attr "cpu" "ev6") (eq_attr "type" "fmul")) *************** *** 391,397 **** ;; sign-extend. ;; Handle 32-64 bit extension from memory to a floating point register ! ;; specially, since this ocurrs frequently in int->double conversions. ;; ;; Note that while we must retain the =f case in the insn for reload's ;; benefit, it should be eliminated after reload, so we should never emit --- 435,441 ---- ;; sign-extend. ;; Handle 32-64 bit extension from memory to a floating point register ! ;; specially, since this occurs frequently in int->double conversions. ;; ;; Note that while we must retain the =f case in the insn for reload's ;; benefit, it should be eliminated after reload, so we should never emit *************** *** 417,423 **** (set_attr "length" "*,*,*,8")]) (define_insn "*extendsidi2_fix" ! [(set (match_operand:DI 0 "register_operand" "=r,r,r,*f,?*f") (sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" "r,m,*f,*f,m")))] "TARGET_FIX" --- 461,467 ---- (set_attr "length" "*,*,*,8")]) (define_insn "*extendsidi2_fix" ! [(set (match_operand:DI 0 "register_operand" "=r,r,r,?*f,?*f") (sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" "r,m,*f,*f,m")))] "TARGET_FIX" *************** *** 475,506 **** (sign_extend:DI (match_dup 1)))] "") ! ;; Do addsi3 the way expand_binop would do if we didn't have one. This ! ;; generates better code. We have the anonymous addsi3 pattern below in ! ;; case combine wants to make it. (define_expand "addsi3" [(set (match_operand:SI 0 "register_operand" "") (plus:SI (match_operand:SI 1 "reg_or_0_operand" "") (match_operand:SI 2 "add_operand" "")))] ! "" ! " ! { ! if (optimize) ! { ! rtx op1 = gen_lowpart (DImode, operands[1]); ! rtx op2 = gen_lowpart (DImode, operands[2]); ! ! if (! cse_not_expected) ! { ! rtx tmp = gen_reg_rtx (DImode); ! emit_insn (gen_adddi3 (tmp, op1, op2)); ! emit_move_insn (gen_lowpart (DImode, operands[0]), tmp); ! } ! else ! emit_insn (gen_adddi3 (gen_lowpart (DImode, operands[0]), op1, op2)); ! DONE; ! } ! }") (define_insn "*addsi_internal" [(set (match_operand:SI 0 "register_operand" "=r,r,r,r") --- 519,532 ---- (sign_extend:DI (match_dup 1)))] "") ! ;; Don't say we have addsi3 if optimizing. This generates better code. We ! ;; have the anonymous addsi3 pattern below in case combine wants to make it. (define_expand "addsi3" [(set (match_operand:SI 0 "register_operand" "") (plus:SI (match_operand:SI 1 "reg_or_0_operand" "") (match_operand:SI 2 "add_operand" "")))] ! "! optimize" ! "") (define_insn "*addsi_internal" [(set (match_operand:SI 0 "register_operand" "=r,r,r,r") *************** *** 520,526 **** "! add_operand (operands[2], SImode)" [(set (match_dup 0) (plus:SI (match_dup 1) (match_dup 3))) (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 4)))] - " { HOST_WIDE_INT val = INTVAL (operands[2]); HOST_WIDE_INT low = (val & 0xffff) - 2 * (val & 0x8000); --- 546,551 ---- *************** *** 528,534 **** operands[3] = GEN_INT (rest); operands[4] = GEN_INT (low); ! }") (define_insn "*addsi_se" [(set (match_operand:DI 0 "register_operand" "=r,r") --- 553,559 ---- operands[3] = GEN_INT (rest); operands[4] = GEN_INT (low); ! }) (define_insn "*addsi_se" [(set (match_operand:DI 0 "register_operand" "=r,r") *************** *** 540,545 **** --- 565,581 ---- addl %r1,%2,%0 subl %r1,%n2,%0") + (define_insn "*addsi_se2" + [(set (match_operand:DI 0 "register_operand" "=r,r") + (sign_extend:DI + (subreg:SI (plus:DI (match_operand:DI 1 "reg_or_0_operand" "%rJ,rJ") + (match_operand:DI 2 "sext_add_operand" "rI,O")) + 0)))] + "" + "@ + addl %r1,%2,%0 + subl %r1,%n2,%0") + (define_split [(set (match_operand:DI 0 "register_operand" "") (sign_extend:DI *************** *** 552,558 **** (set (match_dup 0) (sign_extend:DI (plus:SI (mult:SI (match_dup 3) (match_dup 5)) (match_dup 1))))] - " { HOST_WIDE_INT val = INTVAL (operands[2]) / 4; int mult = 4; --- 588,593 ---- *************** *** 562,568 **** operands[4] = GEN_INT (val); operands[5] = GEN_INT (mult); ! }") (define_split [(set (match_operand:DI 0 "register_operand" "") --- 597,603 ---- operands[4] = GEN_INT (val); operands[5] = GEN_INT (mult); ! }) (define_split [(set (match_operand:DI 0 "register_operand" "") *************** *** 575,586 **** "" [(set (match_dup 5) (match_dup 6)) (set (match_dup 0) (sign_extend:DI (plus:SI (match_dup 7) (match_dup 4))))] - " { operands[6] = gen_rtx_fmt_ee (GET_CODE (operands[1]), DImode, operands[2], operands[3]); operands[7] = gen_lowpart (SImode, operands[5]); ! }") (define_insn "addvsi3" [(set (match_operand:SI 0 "register_operand" "=r,r") --- 610,620 ---- "" [(set (match_dup 5) (match_dup 6)) (set (match_dup 0) (sign_extend:DI (plus:SI (match_dup 7) (match_dup 4))))] { operands[6] = gen_rtx_fmt_ee (GET_CODE (operands[1]), DImode, operands[2], operands[3]); operands[7] = gen_lowpart (SImode, operands[5]); ! }) (define_insn "addvsi3" [(set (match_operand:SI 0 "register_operand" "=r,r") *************** *** 603,608 **** --- 637,657 ---- "" "") + (define_insn "*adddi_er_high_l" + [(set (match_operand:DI 0 "register_operand" "=r") + (plus:DI (match_operand:DI 1 "register_operand" "r") + (high:DI (match_operand:DI 2 "local_symbolic_operand" ""))))] + "TARGET_EXPLICIT_RELOCS" + "ldah %0,%2(%1)\t\t!gprelhigh") + + (define_split + [(set (match_operand:DI 0 "register_operand" "") + (high:DI (match_operand:DI 1 "local_symbolic_operand" "")))] + "TARGET_EXPLICIT_RELOCS && reload_completed" + [(set (match_dup 0) + (plus:DI (match_dup 2) (high:DI (match_dup 1))))] + "operands[2] = pic_offset_table_rtx;") + ;; We used to expend quite a lot of effort choosing addq/subq/lda. ;; With complications like ;; *************** *** 610,616 **** ;; (that's a bug, but not one we can do anything about). As of NT4.0 SP3, ;; the exception handling code will loop if a subq is used and an ;; exception occurs. ! ;; ;; The 19980616 change to emit prologues as RTL also confused some ;; versions of GDB, which also interprets prologues. This has been ;; fixed as of GDB 4.18, but it does not harm to unconditionally --- 659,665 ---- ;; (that's a bug, but not one we can do anything about). As of NT4.0 SP3, ;; the exception handling code will loop if a subq is used and an ;; exception occurs. ! ;; ;; The 19980616 change to emit prologues as RTL also confused some ;; versions of GDB, which also interprets prologues. This has been ;; fixed as of GDB 4.18, but it does not harm to unconditionally *************** *** 638,644 **** [(set (match_operand:DI 0 "register_operand" "=r") (plus:DI (match_operand:DI 1 "reg_no_subreg_operand" "r") (match_operand:DI 2 "const_int_operand" "n")))] ! "REG_OK_FP_BASE_P (operands[1]) && INTVAL (operands[2]) >= 0 /* This is the largest constant an lda+ldah pair can add, minus an upper bound on the displacement between SP and AP during --- 687,693 ---- [(set (match_operand:DI 0 "register_operand" "=r") (plus:DI (match_operand:DI 1 "reg_no_subreg_operand" "r") (match_operand:DI 2 "const_int_operand" "n")))] ! "NONSTRICT_REG_OK_FP_BASE_P (operands[1]) && INTVAL (operands[2]) >= 0 /* This is the largest constant an lda+ldah pair can add, minus an upper bound on the displacement between SP and AP during *************** *** 665,671 **** && operands[1] != arg_pointer_rtx" [(set (match_dup 0) (plus:DI (match_dup 1) (match_dup 3))) (set (match_dup 0) (plus:DI (match_dup 0) (match_dup 4)))] - " { HOST_WIDE_INT val = INTVAL (operands[2]); HOST_WIDE_INT low = (val & 0xffff) - 2 * (val & 0x8000); --- 714,719 ---- *************** *** 683,689 **** } else FAIL; ! }") (define_insn "*saddl" [(set (match_operand:SI 0 "register_operand" "=r,r") --- 731,737 ---- } else FAIL; ! }) (define_insn "*saddl" [(set (match_operand:SI 0 "register_operand" "=r,r") *************** *** 720,731 **** (set (match_dup 0) (sign_extend:DI (plus:SI (mult:SI (match_dup 8) (match_dup 4)) (match_dup 5))))] - " { operands[7] = gen_rtx_fmt_ee (GET_CODE (operands[1]), DImode, operands[2], operands[3]); operands[8] = gen_lowpart (SImode, operands[6]); ! }") (define_insn "*saddq" [(set (match_operand:DI 0 "register_operand" "=r,r") --- 768,778 ---- (set (match_dup 0) (sign_extend:DI (plus:SI (mult:SI (match_dup 8) (match_dup 4)) (match_dup 5))))] { operands[7] = gen_rtx_fmt_ee (GET_CODE (operands[1]), DImode, operands[2], operands[3]); operands[8] = gen_lowpart (SImode, operands[6]); ! }) (define_insn "*saddq" [(set (match_operand:DI 0 "register_operand" "=r,r") *************** *** 792,816 **** [(set (match_operand:SI 0 "register_operand" "") (minus:SI (match_operand:SI 1 "reg_or_0_operand" "") (match_operand:SI 2 "reg_or_8bit_operand" "")))] ! "" ! " ! { ! if (optimize) ! { ! rtx op1 = gen_lowpart (DImode, operands[1]); ! rtx op2 = gen_lowpart (DImode, operands[2]); ! ! if (! cse_not_expected) ! { ! rtx tmp = gen_reg_rtx (DImode); ! emit_insn (gen_subdi3 (tmp, op1, op2)); ! emit_move_insn (gen_lowpart (DImode, operands[0]), tmp); ! } ! else ! emit_insn (gen_subdi3 (gen_lowpart (DImode, operands[0]), op1, op2)); ! DONE; ! } ! } ") (define_insn "*subsi_internal" [(set (match_operand:SI 0 "register_operand" "=r") --- 839,846 ---- [(set (match_operand:SI 0 "register_operand" "") (minus:SI (match_operand:SI 1 "reg_or_0_operand" "") (match_operand:SI 2 "reg_or_8bit_operand" "")))] ! "! optimize" ! "") (define_insn "*subsi_internal" [(set (match_operand:SI 0 "register_operand" "=r") *************** *** 826,831 **** --- 856,870 ---- "" "subl %r1,%2,%0") + (define_insn "*subsi_se2" + [(set (match_operand:DI 0 "register_operand" "=r") + (sign_extend:DI + (subreg:SI (minus:DI (match_operand:DI 1 "reg_or_0_operand" "rJ") + (match_operand:DI 2 "reg_or_8bit_operand" "rI")) + 0)))] + "" + "subl %r1,%2,%0") + (define_insn "subvsi3" [(set (match_operand:SI 0 "register_operand" "=r") (minus:SI (match_operand:SI 1 "reg_or_0_operand" "rJ") *************** *** 882,892 **** "" "subqv %r1,%2,%0") (define_insn "mulsi3" [(set (match_operand:SI 0 "register_operand" "=r") (mult:SI (match_operand:SI 1 "reg_or_0_operand" "%rJ") (match_operand:SI 2 "reg_or_8bit_operand" "rI")))] ! "" "mull %r1,%2,%0" [(set_attr "type" "imul") (set_attr "opsize" "si")]) --- 921,933 ---- "" "subqv %r1,%2,%0") + ;; The Unicos/Mk assembler doesn't support mull. + (define_insn "mulsi3" [(set (match_operand:SI 0 "register_operand" "=r") (mult:SI (match_operand:SI 1 "reg_or_0_operand" "%rJ") (match_operand:SI 2 "reg_or_8bit_operand" "rI")))] ! "!TARGET_ABI_UNICOSMK" "mull %r1,%2,%0" [(set_attr "type" "imul") (set_attr "opsize" "si")]) *************** *** 896,902 **** (sign_extend:DI (mult:SI (match_operand:SI 1 "reg_or_0_operand" "%rJ") (match_operand:SI 2 "reg_or_8bit_operand" "rI"))))] ! "" "mull %r1,%2,%0" [(set_attr "type" "imul") (set_attr "opsize" "si")]) --- 937,943 ---- (sign_extend:DI (mult:SI (match_operand:SI 1 "reg_or_0_operand" "%rJ") (match_operand:SI 2 "reg_or_8bit_operand" "rI"))))] ! "!TARGET_ABI_UNICOSMK" "mull %r1,%2,%0" [(set_attr "type" "imul") (set_attr "opsize" "si")]) *************** *** 910,916 **** (sign_extend:DI (mult:SI (match_dup 1) (match_dup 2)))) (const_int 0))] ! "" "mullv %r1,%2,%0" [(set_attr "type" "imul") (set_attr "opsize" "si")]) --- 951,957 ---- (sign_extend:DI (mult:SI (match_dup 1) (match_dup 2)))) (const_int 0))] ! "!TARGET_ABI_UNICOSMK" "mullv %r1,%2,%0" [(set_attr "type" "imul") (set_attr "opsize" "si")]) *************** *** 962,1105 **** [(set_attr "type" "imul") (set_attr "opsize" "udi")]) ! ;; The divide and remainder operations always take their inputs from ! ;; r24 and r25, put their output in r27, and clobber r23 and r28. ! ;; ??? Force sign-extension here because some versions of OSF/1 don't ! ;; do the right thing if the inputs are not properly sign-extended. ! ;; But Linux, for instance, does not have this problem. Is it worth ! ;; the complication here to eliminate the sign extension? ! ;; Interix/NT has the same sign-extension problem. (define_expand "divsi3" ! [(set (reg:DI 24) (sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" ""))) ! (set (reg:DI 25) (sign_extend:DI (match_operand:SI 2 "nonimmediate_operand" ""))) ! (parallel [(set (reg:DI 27) ! (sign_extend:DI (div:SI (reg:DI 24) (reg:DI 25)))) (clobber (reg:DI 23)) (clobber (reg:DI 28))]) (set (match_operand:SI 0 "nonimmediate_operand" "") ! (subreg:SI (reg:DI 27) 0))] ! "!TARGET_OPEN_VMS" ! "") (define_expand "udivsi3" ! [(set (reg:DI 24) (sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" ""))) ! (set (reg:DI 25) (sign_extend:DI (match_operand:SI 2 "nonimmediate_operand" ""))) ! (parallel [(set (reg:DI 27) ! (sign_extend:DI (udiv:SI (reg:DI 24) (reg:DI 25)))) (clobber (reg:DI 23)) (clobber (reg:DI 28))]) (set (match_operand:SI 0 "nonimmediate_operand" "") ! (subreg:SI (reg:DI 27) 0))] ! "!TARGET_OPEN_VMS" ! "") (define_expand "modsi3" ! [(set (reg:DI 24) (sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" ""))) ! (set (reg:DI 25) (sign_extend:DI (match_operand:SI 2 "nonimmediate_operand" ""))) ! (parallel [(set (reg:DI 27) ! (sign_extend:DI (mod:SI (reg:DI 24) (reg:DI 25)))) (clobber (reg:DI 23)) (clobber (reg:DI 28))]) (set (match_operand:SI 0 "nonimmediate_operand" "") ! (subreg:SI (reg:DI 27) 0))] ! "!TARGET_OPEN_VMS" ! "") (define_expand "umodsi3" ! [(set (reg:DI 24) (sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" ""))) ! (set (reg:DI 25) (sign_extend:DI (match_operand:SI 2 "nonimmediate_operand" ""))) ! (parallel [(set (reg:DI 27) ! (sign_extend:DI (umod:SI (reg:DI 24) (reg:DI 25)))) (clobber (reg:DI 23)) (clobber (reg:DI 28))]) (set (match_operand:SI 0 "nonimmediate_operand" "") ! (subreg:SI (reg:DI 27) 0))] ! "!TARGET_OPEN_VMS" ! "") (define_expand "divdi3" ! [(set (reg:DI 24) (match_operand:DI 1 "input_operand" "")) ! (set (reg:DI 25) (match_operand:DI 2 "input_operand" "")) ! (parallel [(set (reg:DI 27) ! (div:DI (reg:DI 24) ! (reg:DI 25))) (clobber (reg:DI 23)) ! (clobber (reg:DI 28))]) ! (set (match_operand:DI 0 "nonimmediate_operand" "") ! (reg:DI 27))] ! "!TARGET_OPEN_VMS" "") (define_expand "udivdi3" ! [(set (reg:DI 24) (match_operand:DI 1 "input_operand" "")) ! (set (reg:DI 25) (match_operand:DI 2 "input_operand" "")) ! (parallel [(set (reg:DI 27) ! (udiv:DI (reg:DI 24) ! (reg:DI 25))) (clobber (reg:DI 23)) ! (clobber (reg:DI 28))]) ! (set (match_operand:DI 0 "nonimmediate_operand" "") ! (reg:DI 27))] ! "!TARGET_OPEN_VMS" "") (define_expand "moddi3" ! [(set (reg:DI 24) (match_operand:DI 1 "input_operand" "")) ! (set (reg:DI 25) (match_operand:DI 2 "input_operand" "")) ! (parallel [(set (reg:DI 27) ! (mod:DI (reg:DI 24) ! (reg:DI 25))) (clobber (reg:DI 23)) ! (clobber (reg:DI 28))]) ! (set (match_operand:DI 0 "nonimmediate_operand" "") ! (reg:DI 27))] ! "!TARGET_OPEN_VMS" "") (define_expand "umoddi3" ! [(set (reg:DI 24) (match_operand:DI 1 "input_operand" "")) ! (set (reg:DI 25) (match_operand:DI 2 "input_operand" "")) ! (parallel [(set (reg:DI 27) ! (umod:DI (reg:DI 24) ! (reg:DI 25))) (clobber (reg:DI 23)) ! (clobber (reg:DI 28))]) ! (set (match_operand:DI 0 "nonimmediate_operand" "") ! (reg:DI 27))] ! "!TARGET_OPEN_VMS" "") ;; Lengths of 8 for ldq $t12,__divq($gp); jsr $t9,($t12),__divq as ;; expanded by the assembler. (define_insn "*divmodsi_internal" ! [(set (reg:DI 27) ! (sign_extend:DI (match_operator:SI 0 "divmod_operator" ! [(reg:DI 24) (reg:DI 25)]))) (clobber (reg:DI 23)) (clobber (reg:DI 28))] ! "!TARGET_OPEN_VMS" ! "%E0 $24,$25,$27" [(set_attr "type" "jsr") (set_attr "length" "8")]) (define_insn "*divmoddi_internal" ! [(set (reg:DI 27) ! (match_operator:DI 0 "divmod_operator" ! [(reg:DI 24) (reg:DI 25)])) (clobber (reg:DI 23)) (clobber (reg:DI 28))] ! "!TARGET_OPEN_VMS" ! "%E0 $24,$25,$27" [(set_attr "type" "jsr") (set_attr "length" "8")]) --- 1003,1326 ---- [(set_attr "type" "imul") (set_attr "opsize" "udi")]) ! ;; The divide and remainder operations take their inputs from r24 and ! ;; r25, put their output in r27, and clobber r23 and r28 on all ! ;; systems except Unicos/Mk. On Unicos, the standard library provides ! ;; subroutines which use the standard calling convention and work on ! ;; DImode operands. ! ;; ??? Force sign-extension here because some versions of OSF/1 and ! ;; Interix/NT don't do the right thing if the inputs are not properly ! ;; sign-extended. But Linux, for instance, does not have this ! ;; problem. Is it worth the complication here to eliminate the sign ! ;; extension? (define_expand "divsi3" ! [(set (match_dup 3) (sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" ""))) ! (set (match_dup 4) (sign_extend:DI (match_operand:SI 2 "nonimmediate_operand" ""))) ! (parallel [(set (match_dup 5) ! (sign_extend:DI (div:SI (match_dup 3) (match_dup 4)))) (clobber (reg:DI 23)) (clobber (reg:DI 28))]) (set (match_operand:SI 0 "nonimmediate_operand" "") ! (subreg:SI (match_dup 5) 0))] ! "! TARGET_ABI_OPEN_VMS && ! TARGET_ABI_UNICOSMK" ! { ! operands[3] = gen_reg_rtx (DImode); ! operands[4] = gen_reg_rtx (DImode); ! operands[5] = gen_reg_rtx (DImode); ! }) (define_expand "udivsi3" ! [(set (match_dup 3) (sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" ""))) ! (set (match_dup 4) (sign_extend:DI (match_operand:SI 2 "nonimmediate_operand" ""))) ! (parallel [(set (match_dup 5) ! (sign_extend:DI (udiv:SI (match_dup 3) (match_dup 4)))) (clobber (reg:DI 23)) (clobber (reg:DI 28))]) (set (match_operand:SI 0 "nonimmediate_operand" "") ! (subreg:SI (match_dup 5) 0))] ! "! TARGET_ABI_OPEN_VMS && ! TARGET_ABI_UNICOSMK" ! { ! operands[3] = gen_reg_rtx (DImode); ! operands[4] = gen_reg_rtx (DImode); ! operands[5] = gen_reg_rtx (DImode); ! }) (define_expand "modsi3" ! [(set (match_dup 3) (sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" ""))) ! (set (match_dup 4) (sign_extend:DI (match_operand:SI 2 "nonimmediate_operand" ""))) ! (parallel [(set (match_dup 5) ! (sign_extend:DI (mod:SI (match_dup 3) (match_dup 4)))) (clobber (reg:DI 23)) (clobber (reg:DI 28))]) (set (match_operand:SI 0 "nonimmediate_operand" "") ! (subreg:SI (match_dup 5) 0))] ! "! TARGET_ABI_OPEN_VMS && ! TARGET_ABI_UNICOSMK" ! { ! operands[3] = gen_reg_rtx (DImode); ! operands[4] = gen_reg_rtx (DImode); ! operands[5] = gen_reg_rtx (DImode); ! }) (define_expand "umodsi3" ! [(set (match_dup 3) (sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" ""))) ! (set (match_dup 4) (sign_extend:DI (match_operand:SI 2 "nonimmediate_operand" ""))) ! (parallel [(set (match_dup 5) ! (sign_extend:DI (umod:SI (match_dup 3) (match_dup 4)))) (clobber (reg:DI 23)) (clobber (reg:DI 28))]) (set (match_operand:SI 0 "nonimmediate_operand" "") ! (subreg:SI (match_dup 5) 0))] ! "! TARGET_ABI_OPEN_VMS && ! TARGET_ABI_UNICOSMK" ! { ! operands[3] = gen_reg_rtx (DImode); ! operands[4] = gen_reg_rtx (DImode); ! operands[5] = gen_reg_rtx (DImode); ! }) (define_expand "divdi3" ! [(parallel [(set (match_operand:DI 0 "register_operand" "") ! (div:DI (match_operand:DI 1 "register_operand" "") ! (match_operand:DI 2 "register_operand" ""))) (clobber (reg:DI 23)) ! (clobber (reg:DI 28))])] ! "! TARGET_ABI_OPEN_VMS && ! TARGET_ABI_UNICOSMK" "") (define_expand "udivdi3" ! [(parallel [(set (match_operand:DI 0 "register_operand" "") ! (udiv:DI (match_operand:DI 1 "register_operand" "") ! (match_operand:DI 2 "register_operand" ""))) (clobber (reg:DI 23)) ! (clobber (reg:DI 28))])] ! "! TARGET_ABI_OPEN_VMS && ! TARGET_ABI_UNICOSMK" "") (define_expand "moddi3" ! [(use (match_operand:DI 0 "register_operand" "")) ! (use (match_operand:DI 1 "register_operand" "")) ! (use (match_operand:DI 2 "register_operand" ""))] ! "!TARGET_ABI_OPEN_VMS" ! { ! if (TARGET_ABI_UNICOSMK) ! emit_insn (gen_moddi3_umk (operands[0], operands[1], operands[2])); ! else ! emit_insn (gen_moddi3_dft (operands[0], operands[1], operands[2])); ! DONE; ! }) ! ! (define_expand "moddi3_dft" ! [(parallel [(set (match_operand:DI 0 "register_operand" "") ! (mod:DI (match_operand:DI 1 "register_operand" "") ! (match_operand:DI 2 "register_operand" ""))) (clobber (reg:DI 23)) ! (clobber (reg:DI 28))])] ! "! TARGET_ABI_OPEN_VMS && ! TARGET_ABI_UNICOSMK" "") + ;; On Unicos/Mk, we do as the system's C compiler does: + ;; compute the quotient, multiply and subtract. + + (define_expand "moddi3_umk" + [(use (match_operand:DI 0 "register_operand" "")) + (use (match_operand:DI 1 "register_operand" "")) + (use (match_operand:DI 2 "register_operand" ""))] + "TARGET_ABI_UNICOSMK" + { + rtx div, mul = gen_reg_rtx (DImode); + + div = expand_binop (DImode, sdiv_optab, operands[1], operands[2], + NULL_RTX, 0, OPTAB_LIB); + div = force_reg (DImode, div); + emit_insn (gen_muldi3 (mul, operands[2], div)); + emit_insn (gen_subdi3 (operands[0], operands[1], mul)); + DONE; + }) + (define_expand "umoddi3" ! [(use (match_operand:DI 0 "register_operand" "")) ! (use (match_operand:DI 1 "register_operand" "")) ! (use (match_operand:DI 2 "register_operand" ""))] ! "! TARGET_ABI_OPEN_VMS" ! { ! if (TARGET_ABI_UNICOSMK) ! emit_insn (gen_umoddi3_umk (operands[0], operands[1], operands[2])); ! else ! emit_insn (gen_umoddi3_dft (operands[0], operands[1], operands[2])); ! DONE; ! }) ! ! (define_expand "umoddi3_dft" ! [(parallel [(set (match_operand:DI 0 "register_operand" "") ! (umod:DI (match_operand:DI 1 "register_operand" "") ! (match_operand:DI 2 "register_operand" ""))) (clobber (reg:DI 23)) ! (clobber (reg:DI 28))])] ! "! TARGET_ABI_OPEN_VMS && ! TARGET_ABI_UNICOSMK" "") + (define_expand "umoddi3_umk" + [(use (match_operand:DI 0 "register_operand" "")) + (use (match_operand:DI 1 "register_operand" "")) + (use (match_operand:DI 2 "register_operand" ""))] + "TARGET_ABI_UNICOSMK" + { + rtx div, mul = gen_reg_rtx (DImode); + + div = expand_binop (DImode, udiv_optab, operands[1], operands[2], + NULL_RTX, 1, OPTAB_LIB); + div = force_reg (DImode, div); + emit_insn (gen_muldi3 (mul, operands[2], div)); + emit_insn (gen_subdi3 (operands[0], operands[1], mul)); + DONE; + }) + ;; Lengths of 8 for ldq $t12,__divq($gp); jsr $t9,($t12),__divq as ;; expanded by the assembler. + + (define_insn_and_split "*divmodsi_internal_er" + [(set (match_operand:DI 0 "register_operand" "=c") + (sign_extend:DI (match_operator:SI 3 "divmod_operator" + [(match_operand:DI 1 "register_operand" "a") + (match_operand:DI 2 "register_operand" "b")]))) + (clobber (reg:DI 23)) + (clobber (reg:DI 28))] + "TARGET_EXPLICIT_RELOCS && ! TARGET_ABI_OPEN_VMS" + "ldq $27,__%E3($29)\t\t!literal!%#\;jsr $23,($27),__%E3\t\t!lituse_jsr!%#" + "&& reload_completed" + [(parallel [(set (match_dup 0) + (sign_extend:DI (match_dup 3))) + (use (match_dup 0)) + (use (match_dup 4)) + (clobber (reg:DI 23)) + (clobber (reg:DI 28))])] + { + const char *str; + switch (GET_CODE (operands[3])) + { + case DIV: + str = "__divl"; + break; + case UDIV: + str = "__divlu"; + break; + case MOD: + str = "__reml"; + break; + case UMOD: + str = "__remlu"; + break; + default: + abort (); + } + operands[4] = GEN_INT (alpha_next_sequence_number++); + emit_insn (gen_movdi_er_high_g (operands[0], pic_offset_table_rtx, + gen_rtx_SYMBOL_REF (DImode, str), + operands[4])); + } + [(set_attr "type" "jsr") + (set_attr "length" "8")]) + + (define_insn "*divmodsi_internal_er_1" + [(set (match_operand:DI 0 "register_operand" "=c") + (sign_extend:DI (match_operator:SI 3 "divmod_operator" + [(match_operand:DI 1 "register_operand" "a") + (match_operand:DI 2 "register_operand" "b")]))) + (use (match_operand:DI 4 "register_operand" "c")) + (use (match_operand 5 "const_int_operand" "")) + (clobber (reg:DI 23)) + (clobber (reg:DI 28))] + "TARGET_EXPLICIT_RELOCS && ! TARGET_ABI_OPEN_VMS" + "jsr $23,($27),__%E3%J5" + [(set_attr "type" "jsr") + (set_attr "length" "4")]) + (define_insn "*divmodsi_internal" ! [(set (match_operand:DI 0 "register_operand" "=c") ! (sign_extend:DI (match_operator:SI 3 "divmod_operator" ! [(match_operand:DI 1 "register_operand" "a") ! (match_operand:DI 2 "register_operand" "b")]))) (clobber (reg:DI 23)) (clobber (reg:DI 28))] ! "! TARGET_ABI_OPEN_VMS && ! TARGET_ABI_UNICOSMK" ! "%E3 %1,%2,%0" ! [(set_attr "type" "jsr") ! (set_attr "length" "8")]) ! ! (define_insn_and_split "*divmoddi_internal_er" ! [(set (match_operand:DI 0 "register_operand" "=c") ! (match_operator:DI 3 "divmod_operator" ! [(match_operand:DI 1 "register_operand" "a") ! (match_operand:DI 2 "register_operand" "b")])) ! (clobber (reg:DI 23)) ! (clobber (reg:DI 28))] ! "TARGET_EXPLICIT_RELOCS && ! TARGET_ABI_OPEN_VMS" ! "ldq $27,__%E3($29)\t\t!literal!%#\;jsr $23,($27),__%E3\t\t!lituse_jsr!%#" ! "&& reload_completed" ! [(parallel [(set (match_dup 0) (match_dup 3)) ! (use (match_dup 0)) ! (use (match_dup 4)) ! (clobber (reg:DI 23)) ! (clobber (reg:DI 28))])] ! { ! const char *str; ! switch (GET_CODE (operands[3])) ! { ! case DIV: ! str = "__divq"; ! break; ! case UDIV: ! str = "__divqu"; ! break; ! case MOD: ! str = "__remq"; ! break; ! case UMOD: ! str = "__remqu"; ! break; ! default: ! abort (); ! } ! operands[4] = GEN_INT (alpha_next_sequence_number++); ! emit_insn (gen_movdi_er_high_g (operands[0], pic_offset_table_rtx, ! gen_rtx_SYMBOL_REF (DImode, str), ! operands[4])); ! } [(set_attr "type" "jsr") (set_attr "length" "8")]) + (define_insn "*divmoddi_internal_er_1" + [(set (match_operand:DI 0 "register_operand" "=c") + (match_operator:DI 3 "divmod_operator" + [(match_operand:DI 1 "register_operand" "a") + (match_operand:DI 2 "register_operand" "b")])) + (use (match_operand:DI 4 "register_operand" "c")) + (use (match_operand 5 "const_int_operand" "")) + (clobber (reg:DI 23)) + (clobber (reg:DI 28))] + "TARGET_EXPLICIT_RELOCS && ! TARGET_ABI_OPEN_VMS" + "jsr $23,($27),__%E3%J5" + [(set_attr "type" "jsr") + (set_attr "length" "4")]) + (define_insn "*divmoddi_internal" ! [(set (match_operand:DI 0 "register_operand" "=c") ! (match_operator:DI 3 "divmod_operator" ! [(match_operand:DI 1 "register_operand" "a") ! (match_operand:DI 2 "register_operand" "b")])) (clobber (reg:DI 23)) (clobber (reg:DI 28))] ! "! TARGET_ABI_OPEN_VMS && ! TARGET_ABI_UNICOSMK" ! "%E3 %1,%2,%0" [(set_attr "type" "jsr") (set_attr "length" "8")]) *************** *** 1129,1135 **** "HOST_BITS_PER_WIDE_INT == 64 && ! and_operand (operands[2], DImode)" [(set (match_dup 0) (and:DI (match_dup 1) (match_dup 3))) (set (match_dup 0) (and:DI (match_dup 0) (match_dup 4)))] - " { unsigned HOST_WIDE_INT mask1 = INTVAL (operands[2]); unsigned HOST_WIDE_INT mask2 = mask1; --- 1350,1355 ---- *************** *** 1145,1161 **** operands[3] = GEN_INT (mask1); operands[4] = GEN_INT (mask2); ! }") (define_expand "zero_extendqihi2" [(set (match_operand:HI 0 "register_operand" "") (zero_extend:HI (match_operand:QI 1 "nonimmediate_operand" "")))] "" - " { if (! TARGET_BWX) operands[1] = force_reg (QImode, operands[1]); ! }") (define_insn "*zero_extendqihi2_bwx" [(set (match_operand:HI 0 "register_operand" "=r,r") --- 1365,1380 ---- operands[3] = GEN_INT (mask1); operands[4] = GEN_INT (mask2); ! }) (define_expand "zero_extendqihi2" [(set (match_operand:HI 0 "register_operand" "") (zero_extend:HI (match_operand:QI 1 "nonimmediate_operand" "")))] "" { if (! TARGET_BWX) operands[1] = force_reg (QImode, operands[1]); ! }) (define_insn "*zero_extendqihi2_bwx" [(set (match_operand:HI 0 "register_operand" "=r,r") *************** *** 1177,1187 **** [(set (match_operand:SI 0 "register_operand" "") (zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "")))] "" - " { if (! TARGET_BWX) operands[1] = force_reg (QImode, operands[1]); ! }") (define_insn "*zero_extendqisi2_bwx" [(set (match_operand:SI 0 "register_operand" "=r,r") --- 1396,1405 ---- [(set (match_operand:SI 0 "register_operand" "") (zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "")))] "" { if (! TARGET_BWX) operands[1] = force_reg (QImode, operands[1]); ! }) (define_insn "*zero_extendqisi2_bwx" [(set (match_operand:SI 0 "register_operand" "=r,r") *************** *** 1203,1214 **** [(set (match_operand:DI 0 "register_operand" "") (zero_extend:DI (match_operand:QI 1 "nonimmediate_operand" "")))] "" - " { if (! TARGET_BWX) operands[1] = force_reg (QImode, operands[1]); ! }") ! (define_insn "*zero_extendqidi2_bwx" [(set (match_operand:DI 0 "register_operand" "=r,r") (zero_extend:DI (match_operand:QI 1 "nonimmediate_operand" "r,m")))] --- 1421,1431 ---- [(set (match_operand:DI 0 "register_operand" "") (zero_extend:DI (match_operand:QI 1 "nonimmediate_operand" "")))] "" { if (! TARGET_BWX) operands[1] = force_reg (QImode, operands[1]); ! }) ! (define_insn "*zero_extendqidi2_bwx" [(set (match_operand:DI 0 "register_operand" "=r,r") (zero_extend:DI (match_operand:QI 1 "nonimmediate_operand" "r,m")))] *************** *** 1224,1239 **** "! TARGET_BWX" "and %1,0xff,%0" [(set_attr "type" "ilog")]) ! (define_expand "zero_extendhisi2" [(set (match_operand:SI 0 "register_operand" "") (zero_extend:SI (match_operand:HI 1 "nonimmediate_operand" "")))] "" - " { if (! TARGET_BWX) operands[1] = force_reg (HImode, operands[1]); ! }") (define_insn "*zero_extendhisi2_bwx" [(set (match_operand:SI 0 "register_operand" "=r,r") --- 1441,1455 ---- "! TARGET_BWX" "and %1,0xff,%0" [(set_attr "type" "ilog")]) ! (define_expand "zero_extendhisi2" [(set (match_operand:SI 0 "register_operand" "") (zero_extend:SI (match_operand:HI 1 "nonimmediate_operand" "")))] "" { if (! TARGET_BWX) operands[1] = force_reg (HImode, operands[1]); ! }) (define_insn "*zero_extendhisi2_bwx" [(set (match_operand:SI 0 "register_operand" "=r,r") *************** *** 1255,1265 **** [(set (match_operand:DI 0 "register_operand" "") (zero_extend:DI (match_operand:HI 1 "nonimmediate_operand" "")))] "" - " { if (! TARGET_BWX) operands[1] = force_reg (HImode, operands[1]); ! }") (define_insn "*zero_extendhidi2_bwx" [(set (match_operand:DI 0 "register_operand" "=r,r") --- 1471,1480 ---- [(set (match_operand:DI 0 "register_operand" "") (zero_extend:DI (match_operand:HI 1 "nonimmediate_operand" "")))] "" { if (! TARGET_BWX) operands[1] = force_reg (HImode, operands[1]); ! }) (define_insn "*zero_extendhidi2_bwx" [(set (match_operand:DI 0 "register_operand" "=r,r") *************** *** 1335,1363 **** "eqv %r1,%2,%0" [(set_attr "type" "ilog")]) ! ;; Handle the FFS insn iff we support CIX. (define_expand "ffsdi2" [(set (match_dup 2) ! (unspec:DI [(match_operand:DI 1 "register_operand" "")] 1)) (set (match_dup 3) (plus:DI (match_dup 2) (const_int 1))) (set (match_operand:DI 0 "register_operand" "") (if_then_else:DI (eq (match_dup 1) (const_int 0)) (const_int 0) (match_dup 3)))] "TARGET_CIX" - " { operands[2] = gen_reg_rtx (DImode); operands[3] = gen_reg_rtx (DImode); ! }") (define_insn "*cttz" [(set (match_operand:DI 0 "register_operand" "=r") ! (unspec:DI [(match_operand:DI 1 "register_operand" "r")] 1))] "TARGET_CIX" "cttz %1,%0" ! ; EV6 calls all mvi and cttz/ctlz/popc class imisc, so just ; reuse the existing type name. [(set_attr "type" "mvi")]) --- 1550,1577 ---- "eqv %r1,%2,%0" [(set_attr "type" "ilog")]) ! ;; Handle the FFS insn iff we support CIX. (define_expand "ffsdi2" [(set (match_dup 2) ! (unspec:DI [(match_operand:DI 1 "register_operand" "")] UNSPEC_CTTZ)) (set (match_dup 3) (plus:DI (match_dup 2) (const_int 1))) (set (match_operand:DI 0 "register_operand" "") (if_then_else:DI (eq (match_dup 1) (const_int 0)) (const_int 0) (match_dup 3)))] "TARGET_CIX" { operands[2] = gen_reg_rtx (DImode); operands[3] = gen_reg_rtx (DImode); ! }) (define_insn "*cttz" [(set (match_operand:DI 0 "register_operand" "=r") ! (unspec:DI [(match_operand:DI 1 "register_operand" "r")] UNSPEC_CTTZ))] "TARGET_CIX" "cttz %1,%0" ! ; EV6 calls all mvi and cttz/ctlz/popc class imisc, so just ; reuse the existing type name. [(set_attr "type" "mvi")]) *************** *** 1368,1409 **** (ashift:DI (match_operand:DI 1 "reg_or_0_operand" "rJ,rJ") (match_operand:DI 2 "reg_or_6bit_operand" "P,rS")))] "" - "* { switch (which_alternative) { case 0: if (operands[2] == const1_rtx) ! return \"addq %r1,%r1,%0\"; else ! return \"s%P2addq %r1,0,%0\"; case 1: ! return \"sll %r1,%2,%0\"; default: abort(); } ! }" [(set_attr "type" "iadd,shift")]) ! ;; ??? The following pattern is made by combine, but earlier phases ! ;; (specifically flow) can't handle it. This occurs in jump.c. Deal ! ;; with this in a better way at some point. ! ;;(define_insn "" ! ;; [(set (match_operand:DI 0 "register_operand" "=r") ! ;; (sign_extend:DI ! ;; (subreg:SI (ashift:DI (match_operand:DI 1 "reg_or_0_operand" "rJ") ! ;; (match_operand:DI 2 "const_int_operand" "P")) ! ;; 0)))] ! ;; "INTVAL (operands[2]) >= 1 && INTVAL (operands[2]) <= 3" ! ;; "* ! ;;{ ! ;; if (operands[2] == const1_rtx) ! ;; return \"addl %r1,%r1,%0\"; ! ;; else ! ;; return \"s%P2addl %r1,0,%0\"; ! ;; }" ! ;; [(set_attr "type" "iadd")]) ! (define_insn "lshrdi3" [(set (match_operand:DI 0 "register_operand" "=r") (lshiftrt:DI (match_operand:DI 1 "reg_or_0_operand" "rJ") --- 1582,1618 ---- (ashift:DI (match_operand:DI 1 "reg_or_0_operand" "rJ,rJ") (match_operand:DI 2 "reg_or_6bit_operand" "P,rS")))] "" { switch (which_alternative) { case 0: if (operands[2] == const1_rtx) ! return "addq %r1,%r1,%0"; else ! return "s%P2addq %r1,0,%0"; case 1: ! return "sll %r1,%2,%0"; default: abort(); } ! } [(set_attr "type" "iadd,shift")]) ! (define_insn "*ashldi_se" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (sign_extend:DI ! (subreg:SI (ashift:DI (match_operand:DI 1 "reg_or_0_operand" "rJ") ! (match_operand:DI 2 "const_int_operand" "P")) ! 0)))] ! "INTVAL (operands[2]) >= 1 && INTVAL (operands[2]) <= 3" ! { ! if (operands[2] == const1_rtx) ! return "addl %r1,%r1,%0"; ! else ! return "s%P2addl %r1,0,%0"; ! } ! [(set_attr "type" "iadd")]) ! (define_insn "lshrdi3" [(set (match_operand:DI 0 "register_operand" "=r") (lshiftrt:DI (match_operand:DI 1 "reg_or_0_operand" "rJ") *************** *** 1428,1434 **** (ashiftrt:DI (match_dup 2) (const_int 56)))] "" - " { if (TARGET_BWX) { --- 1637,1642 ---- *************** *** 1436,1442 **** force_reg (QImode, operands[1]))); DONE; } ! /* If we have an unaligned MEM, extend to DImode (which we do specially) and then copy to the result. */ if (unaligned_memory_operand (operands[1], HImode)) --- 1644,1650 ---- force_reg (QImode, operands[1]))); DONE; } ! /* If we have an unaligned MEM, extend to DImode (which we do specially) and then copy to the result. */ if (unaligned_memory_operand (operands[1], HImode)) *************** *** 1451,1457 **** operands[0] = gen_lowpart (DImode, operands[0]); operands[1] = gen_lowpart (DImode, force_reg (QImode, operands[1])); operands[2] = gen_reg_rtx (DImode); ! }") (define_insn "extendqidi2x" [(set (match_operand:DI 0 "register_operand" "=r") --- 1659,1665 ---- operands[0] = gen_lowpart (DImode, operands[0]); operands[1] = gen_lowpart (DImode, force_reg (QImode, operands[1])); operands[2] = gen_reg_rtx (DImode); ! }) (define_insn "extendqidi2x" [(set (match_operand:DI 0 "register_operand" "=r") *************** *** 1496,1502 **** (ashiftrt:DI (match_dup 2) (const_int 56)))] "" - " { if (TARGET_BWX) { --- 1704,1709 ---- *************** *** 1519,1525 **** operands[0] = gen_lowpart (DImode, operands[0]); operands[1] = gen_lowpart (DImode, force_reg (QImode, operands[1])); operands[2] = gen_reg_rtx (DImode); ! }") (define_expand "extendqidi2" [(set (match_dup 2) --- 1726,1732 ---- operands[0] = gen_lowpart (DImode, operands[0]); operands[1] = gen_lowpart (DImode, force_reg (QImode, operands[1])); operands[2] = gen_reg_rtx (DImode); ! }) (define_expand "extendqidi2" [(set (match_dup 2) *************** *** 1529,1535 **** (ashiftrt:DI (match_dup 2) (const_int 56)))] "" - " { if (TARGET_BWX) { --- 1736,1741 ---- *************** *** 1551,1557 **** operands[1] = gen_lowpart (DImode, force_reg (QImode, operands[1])); operands[2] = gen_reg_rtx (DImode); ! }") (define_expand "extendhisi2" [(set (match_dup 2) --- 1757,1763 ---- operands[1] = gen_lowpart (DImode, force_reg (QImode, operands[1])); operands[2] = gen_reg_rtx (DImode); ! }) (define_expand "extendhisi2" [(set (match_dup 2) *************** *** 1561,1567 **** (ashiftrt:DI (match_dup 2) (const_int 48)))] "" - " { if (TARGET_BWX) { --- 1767,1772 ---- *************** *** 1584,1590 **** operands[0] = gen_lowpart (DImode, operands[0]); operands[1] = gen_lowpart (DImode, force_reg (HImode, operands[1])); operands[2] = gen_reg_rtx (DImode); ! }") (define_expand "extendhidi2" [(set (match_dup 2) --- 1789,1795 ---- operands[0] = gen_lowpart (DImode, operands[0]); operands[1] = gen_lowpart (DImode, force_reg (HImode, operands[1])); operands[2] = gen_reg_rtx (DImode); ! }) (define_expand "extendhidi2" [(set (match_dup 2) *************** *** 1594,1600 **** (ashiftrt:DI (match_dup 2) (const_int 48)))] "" - " { if (TARGET_BWX) { --- 1799,1804 ---- *************** *** 1616,1622 **** operands[1] = gen_lowpart (DImode, force_reg (HImode, operands[1])); operands[2] = gen_reg_rtx (DImode); ! }") ;; Here's how we sign extend an unaligned byte and halfword. Doing this ;; as a pattern saves one instruction. The code is similar to that for --- 1820,1826 ---- operands[1] = gen_lowpart (DImode, force_reg (HImode, operands[1])); operands[2] = gen_reg_rtx (DImode); ! }) ;; Here's how we sign extend an unaligned byte and halfword. Doing this ;; as a pattern saves one instruction. The code is similar to that for *************** *** 1624,1629 **** --- 1828,1845 ---- ;; ;; Operand 1 is the address + 1 (+2 for HI), operand 0 is the result. (define_expand "unaligned_extendqidi" + [(use (match_operand:QI 0 "register_operand" "")) + (use (match_operand:DI 1 "address_operand" ""))] + "" + { + if (WORDS_BIG_ENDIAN) + emit_insn (gen_unaligned_extendqidi_be (operands[0], operands[1])); + else + emit_insn (gen_unaligned_extendqidi_le (operands[0], operands[1])); + DONE; + }) + + (define_expand "unaligned_extendqidi_le" [(set (match_dup 2) (match_operand:DI 1 "address_operand" "")) (set (match_dup 3) (mem:DI (and:DI (plus:DI (match_dup 2) (const_int -1)) *************** *** 1636,1649 **** (const_int 3))))) (set (subreg:DI (match_operand:QI 0 "register_operand" "") 0) (ashiftrt:DI (match_dup 4) (const_int 56)))] ! "" ! " ! { operands[2] = gen_reg_rtx (DImode); operands[3] = gen_reg_rtx (DImode); operands[4] = gen_reg_rtx (DImode); ! }") (define_expand "unaligned_extendhidi" [(set (match_dup 2) (match_operand:DI 1 "address_operand" "")) (set (match_dup 3) (mem:DI (and:DI (plus:DI (match_dup 2) (const_int -2)) --- 1852,1902 ---- (const_int 3))))) (set (subreg:DI (match_operand:QI 0 "register_operand" "") 0) (ashiftrt:DI (match_dup 4) (const_int 56)))] ! "! WORDS_BIG_ENDIAN" ! { ! operands[2] = gen_reg_rtx (DImode); operands[3] = gen_reg_rtx (DImode); operands[4] = gen_reg_rtx (DImode); ! }) ! ! (define_expand "unaligned_extendqidi_be" ! [(set (match_dup 2) (match_operand:DI 1 "address_operand" "")) ! (set (match_dup 3) (plus:DI (match_dup 2) (const_int -1))) ! (set (match_dup 4) ! (mem:DI (and:DI (match_dup 3) ! (const_int -8)))) ! (set (match_dup 5) (plus:DI (match_dup 2) (const_int -2))) ! (set (match_dup 6) ! (ashift:DI (match_dup 4) ! (ashift:DI ! (and:DI ! (plus:DI (match_dup 5) (const_int 1)) ! (const_int 7)) ! (const_int 3)))) ! (set (subreg:DI (match_operand:QI 0 "register_operand" "") 0) ! (ashiftrt:DI (match_dup 6) (const_int 56)))] ! "WORDS_BIG_ENDIAN" ! { ! operands[2] = gen_reg_rtx (DImode); ! operands[3] = gen_reg_rtx (DImode); ! operands[4] = gen_reg_rtx (DImode); ! operands[5] = gen_reg_rtx (DImode); ! operands[6] = gen_reg_rtx (DImode); ! }) (define_expand "unaligned_extendhidi" + [(use (match_operand:QI 0 "register_operand" "")) + (use (match_operand:DI 1 "address_operand" ""))] + "" + { + operands[0] = gen_lowpart (DImode, operands[0]); + emit_insn ((WORDS_BIG_ENDIAN + ? gen_unaligned_extendhidi_be + : gen_unaligned_extendhidi_le) (operands[0], operands[1])); + DONE; + }) + + (define_expand "unaligned_extendhidi_le" [(set (match_dup 2) (match_operand:DI 1 "address_operand" "")) (set (match_dup 3) (mem:DI (and:DI (plus:DI (match_dup 2) (const_int -2)) *************** *** 1654,1667 **** (ashift:DI (and:DI (match_dup 2) (const_int 7)) (const_int 3))))) ! (set (subreg:DI (match_operand:QI 0 "register_operand" "") 0) (ashiftrt:DI (match_dup 4) (const_int 48)))] ! "" ! " ! { operands[2] = gen_reg_rtx (DImode); operands[3] = gen_reg_rtx (DImode); operands[4] = gen_reg_rtx (DImode); ! }") (define_insn "*extxl_const" [(set (match_operand:DI 0 "register_operand" "=r") --- 1907,1945 ---- (ashift:DI (and:DI (match_dup 2) (const_int 7)) (const_int 3))))) ! (set (match_operand:DI 0 "register_operand" "") (ashiftrt:DI (match_dup 4) (const_int 48)))] ! "! WORDS_BIG_ENDIAN" ! { ! operands[2] = gen_reg_rtx (DImode); operands[3] = gen_reg_rtx (DImode); operands[4] = gen_reg_rtx (DImode); ! }) ! ! (define_expand "unaligned_extendhidi_be" ! [(set (match_dup 2) (match_operand:DI 1 "address_operand" "")) ! (set (match_dup 3) (plus:DI (match_dup 2) (const_int -2))) ! (set (match_dup 4) ! (mem:DI (and:DI (match_dup 3) ! (const_int -8)))) ! (set (match_dup 5) (plus:DI (match_dup 2) (const_int -3))) ! (set (match_dup 6) ! (ashift:DI (match_dup 4) ! (ashift:DI ! (and:DI ! (plus:DI (match_dup 5) (const_int 1)) ! (const_int 7)) ! (const_int 3)))) ! (set (match_operand:DI 0 "register_operand" "") ! (ashiftrt:DI (match_dup 6) (const_int 48)))] ! "WORDS_BIG_ENDIAN" ! { ! operands[2] = gen_reg_rtx (DImode); ! operands[3] = gen_reg_rtx (DImode); ! operands[4] = gen_reg_rtx (DImode); ! operands[5] = gen_reg_rtx (DImode); ! operands[6] = gen_reg_rtx (DImode); ! }) (define_insn "*extxl_const" [(set (match_operand:DI 0 "register_operand" "=r") *************** *** 1672,1711 **** "ext%M2l %r1,%s3,%0" [(set_attr "type" "shift")]) ! (define_insn "extxl" [(set (match_operand:DI 0 "register_operand" "=r") (zero_extract:DI (match_operand:DI 1 "reg_or_0_operand" "rJ") (match_operand:DI 2 "mode_width_operand" "n") (ashift:DI (match_operand:DI 3 "reg_or_8bit_operand" "rI") (const_int 3))))] ! "" "ext%M2l %r1,%3,%0" [(set_attr "type" "shift")]) ;; Combine has some strange notion of preserving existing undefined behaviour ! ;; in shifts larger than a word size. So capture these patterns that it ;; should have turned into zero_extracts. ! (define_insn "*extxl_1" [(set (match_operand:DI 0 "register_operand" "=r") (and:DI (lshiftrt:DI (match_operand:DI 1 "reg_or_0_operand" "rJ") (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI") (const_int 3))) (match_operand:DI 3 "mode_mask_operand" "n")))] ! "" "ext%U3l %1,%2,%0" [(set_attr "type" "shift")]) ! (define_insn "*extql_2" [(set (match_operand:DI 0 "register_operand" "=r") (lshiftrt:DI (match_operand:DI 1 "reg_or_0_operand" "rJ") (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI") (const_int 3))))] ! "" "extql %1,%2,%0" [(set_attr "type" "shift")]) ! (define_insn "extqh" [(set (match_operand:DI 0 "register_operand" "=r") (ashift:DI (match_operand:DI 1 "reg_or_0_operand" "rJ") --- 1950,2026 ---- "ext%M2l %r1,%s3,%0" [(set_attr "type" "shift")]) ! (define_insn "extxl_le" [(set (match_operand:DI 0 "register_operand" "=r") (zero_extract:DI (match_operand:DI 1 "reg_or_0_operand" "rJ") (match_operand:DI 2 "mode_width_operand" "n") (ashift:DI (match_operand:DI 3 "reg_or_8bit_operand" "rI") (const_int 3))))] ! "! WORDS_BIG_ENDIAN" ! "ext%M2l %r1,%3,%0" ! [(set_attr "type" "shift")]) ! ! (define_insn "extxl_be" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (zero_extract:DI (match_operand:DI 1 "reg_or_0_operand" "rJ") ! (match_operand:DI 2 "mode_width_operand" "n") ! (minus:DI ! (const_int 56) ! (ashift:DI ! (match_operand:DI 3 "reg_or_8bit_operand" "rI") ! (const_int 3)))))] ! "WORDS_BIG_ENDIAN" "ext%M2l %r1,%3,%0" [(set_attr "type" "shift")]) ;; Combine has some strange notion of preserving existing undefined behaviour ! ;; in shifts larger than a word size. So capture these patterns that it ;; should have turned into zero_extracts. ! (define_insn "*extxl_1_le" [(set (match_operand:DI 0 "register_operand" "=r") (and:DI (lshiftrt:DI (match_operand:DI 1 "reg_or_0_operand" "rJ") (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI") (const_int 3))) (match_operand:DI 3 "mode_mask_operand" "n")))] ! "! WORDS_BIG_ENDIAN" "ext%U3l %1,%2,%0" [(set_attr "type" "shift")]) ! (define_insn "*extxl_1_be" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (and:DI (lshiftrt:DI ! (match_operand:DI 1 "reg_or_0_operand" "rJ") ! (minus:DI (const_int 56) ! (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI") ! (const_int 3)))) ! (match_operand:DI 3 "mode_mask_operand" "n")))] ! "WORDS_BIG_ENDIAN" ! "ext%U3l %1,%2,%0" ! [(set_attr "type" "shift")]) ! ! (define_insn "*extql_2_le" [(set (match_operand:DI 0 "register_operand" "=r") (lshiftrt:DI (match_operand:DI 1 "reg_or_0_operand" "rJ") (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI") (const_int 3))))] ! "! WORDS_BIG_ENDIAN" "extql %1,%2,%0" [(set_attr "type" "shift")]) ! (define_insn "*extql_2_be" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (lshiftrt:DI ! (match_operand:DI 1 "reg_or_0_operand" "rJ") ! (minus:DI (const_int 56) ! (ashift:DI ! (match_operand:DI 2 "reg_or_8bit_operand" "rI") ! (const_int 3)))))] ! "WORDS_BIG_ENDIAN" ! "extql %1,%2,%0" ! [(set_attr "type" "shift")]) ! ! (define_insn "extqh_le" [(set (match_operand:DI 0 "register_operand" "=r") (ashift:DI (match_operand:DI 1 "reg_or_0_operand" "rJ") *************** *** 1715,1725 **** (match_operand:DI 2 "reg_or_8bit_operand" "rI") (const_int 7)) (const_int 3)))))] ! "" "extqh %r1,%2,%0" [(set_attr "type" "shift")]) ! (define_insn "extlh" [(set (match_operand:DI 0 "register_operand" "=r") (ashift:DI (and:DI (match_operand:DI 1 "reg_or_0_operand" "rJ") --- 2030,2054 ---- (match_operand:DI 2 "reg_or_8bit_operand" "rI") (const_int 7)) (const_int 3)))))] ! "! WORDS_BIG_ENDIAN" "extqh %r1,%2,%0" [(set_attr "type" "shift")]) ! (define_insn "extqh_be" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (ashift:DI ! (match_operand:DI 1 "reg_or_0_operand" "rJ") ! (ashift:DI ! (and:DI ! (plus:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI") ! (const_int 1)) ! (const_int 7)) ! (const_int 3))))] ! "WORDS_BIG_ENDIAN" ! "extqh %r1,%2,%0" ! [(set_attr "type" "shift")]) ! ! (define_insn "extlh_le" [(set (match_operand:DI 0 "register_operand" "=r") (ashift:DI (and:DI (match_operand:DI 1 "reg_or_0_operand" "rJ") *************** *** 1730,1740 **** (match_operand:DI 2 "reg_or_8bit_operand" "rI") (const_int 7)) (const_int 3)))))] ! "" "extlh %r1,%2,%0" [(set_attr "type" "shift")]) ! (define_insn "extwh" [(set (match_operand:DI 0 "register_operand" "=r") (ashift:DI (and:DI (match_operand:DI 1 "reg_or_0_operand" "rJ") --- 2059,2086 ---- (match_operand:DI 2 "reg_or_8bit_operand" "rI") (const_int 7)) (const_int 3)))))] ! "! WORDS_BIG_ENDIAN" "extlh %r1,%2,%0" [(set_attr "type" "shift")]) ! (define_insn "extlh_be" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (and:DI ! (ashift:DI ! (match_operand:DI 1 "reg_or_0_operand" "rJ") ! (ashift:DI ! (and:DI ! (plus:DI ! (match_operand:DI 2 "reg_or_8bit_operand" "rI") ! (const_int 1)) ! (const_int 7)) ! (const_int 3))) ! (const_int 2147483647)))] ! "WORDS_BIG_ENDIAN" ! "extlh %r1,%2,%0" ! [(set_attr "type" "shift")]) ! ! (define_insn "extwh_le" [(set (match_operand:DI 0 "register_operand" "=r") (ashift:DI (and:DI (match_operand:DI 1 "reg_or_0_operand" "rJ") *************** *** 1745,1751 **** (match_operand:DI 2 "reg_or_8bit_operand" "rI") (const_int 7)) (const_int 3)))))] ! "" "extwh %r1,%2,%0" [(set_attr "type" "shift")]) --- 2091,2113 ---- (match_operand:DI 2 "reg_or_8bit_operand" "rI") (const_int 7)) (const_int 3)))))] ! "! WORDS_BIG_ENDIAN" ! "extwh %r1,%2,%0" ! [(set_attr "type" "shift")]) ! ! (define_insn "extwh_be" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (and:DI ! (ashift:DI (match_operand:DI 1 "reg_or_0_operand" "rJ") ! (ashift:DI ! (and:DI ! (plus:DI ! (match_operand:DI 2 "reg_or_8bit_operand" "rI") ! (const_int 1)) ! (const_int 7)) ! (const_int 3))) ! (const_int 65535)))] ! "WORDS_BIG_ENDIAN" "extwh %r1,%2,%0" [(set_attr "type" "shift")]) *************** *** 1770,1780 **** ;; (match_dup 4)))] ;; " ;;{ ! ;; operands[6] = plus_constant (operands[3], ;; INTVAL (operands[2]) / BITS_PER_UNIT); ;; operands[7] = GEN_INT (- INTVAL (operands[2]) / BITS_PER_UNIT); ;;}") ! (define_insn "*insbl_const" [(set (match_operand:DI 0 "register_operand" "=r") (ashift:DI (zero_extend:DI (match_operand:QI 1 "register_operand" "r")) --- 2132,2142 ---- ;; (match_dup 4)))] ;; " ;;{ ! ;; operands[6] = plus_constant (operands[3], ;; INTVAL (operands[2]) / BITS_PER_UNIT); ;; operands[7] = GEN_INT (- INTVAL (operands[2]) / BITS_PER_UNIT); ;;}") ! (define_insn "*insbl_const" [(set (match_operand:DI 0 "register_operand" "=r") (ashift:DI (zero_extend:DI (match_operand:QI 1 "register_operand" "r")) *************** *** 1799,1837 **** "insll %1,%s2,%0" [(set_attr "type" "shift")]) ! (define_insn "insbl" [(set (match_operand:DI 0 "register_operand" "=r") (ashift:DI (zero_extend:DI (match_operand:QI 1 "register_operand" "r")) (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI") (const_int 3))))] ! "" "insbl %1,%2,%0" [(set_attr "type" "shift")]) ! (define_insn "inswl" [(set (match_operand:DI 0 "register_operand" "=r") (ashift:DI (zero_extend:DI (match_operand:HI 1 "register_operand" "r")) (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI") (const_int 3))))] ! "" "inswl %1,%2,%0" [(set_attr "type" "shift")]) ! (define_insn "insll" [(set (match_operand:DI 0 "register_operand" "=r") (ashift:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "r")) (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI") (const_int 3))))] ! "" "insll %1,%2,%0" [(set_attr "type" "shift")]) ! (define_insn "insql" [(set (match_operand:DI 0 "register_operand" "=r") (ashift:DI (match_operand:DI 1 "register_operand" "r") (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI") (const_int 3))))] ! "" "insql %1,%2,%0" [(set_attr "type" "shift")]) --- 2161,2239 ---- "insll %1,%s2,%0" [(set_attr "type" "shift")]) ! (define_insn "insbl_le" [(set (match_operand:DI 0 "register_operand" "=r") (ashift:DI (zero_extend:DI (match_operand:QI 1 "register_operand" "r")) (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI") (const_int 3))))] ! "! WORDS_BIG_ENDIAN" "insbl %1,%2,%0" [(set_attr "type" "shift")]) ! (define_insn "insbl_be" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (ashift:DI (zero_extend:DI (match_operand:QI 1 "register_operand" "r")) ! (minus:DI (const_int 56) ! (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI") ! (const_int 3)))))] ! "WORDS_BIG_ENDIAN" ! "insbl %1,%2,%0" ! [(set_attr "type" "shift")]) ! ! (define_insn "inswl_le" [(set (match_operand:DI 0 "register_operand" "=r") (ashift:DI (zero_extend:DI (match_operand:HI 1 "register_operand" "r")) (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI") (const_int 3))))] ! "! WORDS_BIG_ENDIAN" "inswl %1,%2,%0" [(set_attr "type" "shift")]) ! (define_insn "inswl_be" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (ashift:DI (zero_extend:DI (match_operand:HI 1 "register_operand" "r")) ! (minus:DI (const_int 56) ! (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI") ! (const_int 3)))))] ! "WORDS_BIG_ENDIAN" ! "inswl %1,%2,%0" ! [(set_attr "type" "shift")]) ! ! (define_insn "insll_le" [(set (match_operand:DI 0 "register_operand" "=r") (ashift:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "r")) (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI") (const_int 3))))] ! "! WORDS_BIG_ENDIAN" "insll %1,%2,%0" [(set_attr "type" "shift")]) ! (define_insn "insll_be" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (ashift:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "r")) ! (minus:DI (const_int 56) ! (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI") ! (const_int 3)))))] ! "WORDS_BIG_ENDIAN" ! "insll %1,%2,%0" ! [(set_attr "type" "shift")]) ! ! (define_insn "insql_le" [(set (match_operand:DI 0 "register_operand" "=r") (ashift:DI (match_operand:DI 1 "register_operand" "r") (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI") (const_int 3))))] ! "! WORDS_BIG_ENDIAN" ! "insql %1,%2,%0" ! [(set_attr "type" "shift")]) ! ! (define_insn "insql_be" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (ashift:DI (match_operand:DI 1 "register_operand" "r") ! (minus:DI (const_int 56) ! (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI") ! (const_int 3)))))] ! "WORDS_BIG_ENDIAN" "insql %1,%2,%0" [(set_attr "type" "shift")]) *************** *** 1851,1871 **** == (unsigned HOST_WIDE_INT) INTVAL (operands[3])) || ((unsigned HOST_WIDE_INT) 0xffffffff << INTVAL (operands[2]) == (unsigned HOST_WIDE_INT) INTVAL (operands[3])))" - "* { #if HOST_BITS_PER_WIDE_INT == 64 if ((unsigned HOST_WIDE_INT) 0xff << INTVAL (operands[2]) == (unsigned HOST_WIDE_INT) INTVAL (operands[3])) ! return \"insbl %1,%s2,%0\"; if ((unsigned HOST_WIDE_INT) 0xffff << INTVAL (operands[2]) == (unsigned HOST_WIDE_INT) INTVAL (operands[3])) ! return \"inswl %1,%s2,%0\"; if ((unsigned HOST_WIDE_INT) 0xffffffff << INTVAL (operands[2]) == (unsigned HOST_WIDE_INT) INTVAL (operands[3])) ! return \"insll %1,%s2,%0\"; #endif abort(); ! }" [(set_attr "type" "shift")]) ;; We do not include the insXh insns because they are complex to express --- 2253,2272 ---- == (unsigned HOST_WIDE_INT) INTVAL (operands[3])) || ((unsigned HOST_WIDE_INT) 0xffffffff << INTVAL (operands[2]) == (unsigned HOST_WIDE_INT) INTVAL (operands[3])))" { #if HOST_BITS_PER_WIDE_INT == 64 if ((unsigned HOST_WIDE_INT) 0xff << INTVAL (operands[2]) == (unsigned HOST_WIDE_INT) INTVAL (operands[3])) ! return "insbl %1,%s2,%0"; if ((unsigned HOST_WIDE_INT) 0xffff << INTVAL (operands[2]) == (unsigned HOST_WIDE_INT) INTVAL (operands[3])) ! return "inswl %1,%s2,%0"; if ((unsigned HOST_WIDE_INT) 0xffffffff << INTVAL (operands[2]) == (unsigned HOST_WIDE_INT) INTVAL (operands[3])) ! return "insll %1,%s2,%0"; #endif abort(); ! } [(set_attr "type" "shift")]) ;; We do not include the insXh insns because they are complex to express *************** *** 1877,1888 **** [(set (match_operand:DI 0 "register_operand" "=r") (unspec:DI [(match_operand:DI 1 "register_operand" "r") (match_operand:DI 2 "mode_width_operand" "n") ! (match_operand:DI 3 "reg_or_8bit_operand" "rI")] 2))] "" "ins%M2h %1,%3,%0" [(set_attr "type" "shift")]) ! (define_insn "mskxl" [(set (match_operand:DI 0 "register_operand" "=r") (and:DI (not:DI (ashift:DI (match_operand:DI 2 "mode_mask_operand" "n") --- 2278,2290 ---- [(set (match_operand:DI 0 "register_operand" "=r") (unspec:DI [(match_operand:DI 1 "register_operand" "r") (match_operand:DI 2 "mode_width_operand" "n") ! (match_operand:DI 3 "reg_or_8bit_operand" "rI")] ! UNSPEC_INSXH))] "" "ins%M2h %1,%3,%0" [(set_attr "type" "shift")]) ! (define_insn "mskxl_le" [(set (match_operand:DI 0 "register_operand" "=r") (and:DI (not:DI (ashift:DI (match_operand:DI 2 "mode_mask_operand" "n") *************** *** 1890,1896 **** (match_operand:DI 3 "reg_or_8bit_operand" "rI") (const_int 3)))) (match_operand:DI 1 "reg_or_0_operand" "rJ")))] ! "" "msk%U2l %r1,%3,%0" [(set_attr "type" "shift")]) --- 2292,2311 ---- (match_operand:DI 3 "reg_or_8bit_operand" "rI") (const_int 3)))) (match_operand:DI 1 "reg_or_0_operand" "rJ")))] ! "! WORDS_BIG_ENDIAN" ! "msk%U2l %r1,%3,%0" ! [(set_attr "type" "shift")]) ! ! (define_insn "mskxl_be" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (and:DI (not:DI (ashift:DI ! (match_operand:DI 2 "mode_mask_operand" "n") ! (minus:DI (const_int 56) ! (ashift:DI ! (match_operand:DI 3 "reg_or_8bit_operand" "rI") ! (const_int 3))))) ! (match_operand:DI 1 "reg_or_0_operand" "rJ")))] ! "WORDS_BIG_ENDIAN" "msk%U2l %r1,%3,%0" [(set_attr "type" "shift")]) *************** *** 1903,1909 **** [(set (match_operand:DI 0 "register_operand" "=r") (unspec:DI [(match_operand:DI 1 "register_operand" "r") (match_operand:DI 2 "mode_width_operand" "n") ! (match_operand:DI 3 "reg_or_8bit_operand" "rI")] 3))] "" "msk%M2h %1,%3,%0" [(set_attr "type" "shift")]) --- 2318,2325 ---- [(set (match_operand:DI 0 "register_operand" "=r") (unspec:DI [(match_operand:DI 1 "register_operand" "r") (match_operand:DI 2 "mode_width_operand" "n") ! (match_operand:DI 3 "reg_or_8bit_operand" "rI")] ! UNSPEC_MSKXH))] "" "msk%M2h %1,%3,%0" [(set_attr "type" "shift")]) *************** *** 1961,1974 **** (neg:TF (match_operand:TF 1 "reg_or_fp0_operand" ""))) (use (match_dup 2))])] "TARGET_HAS_XFLOATING_LIBS" - " { #if HOST_BITS_PER_WIDE_INT >= 64 ! operands[2] = force_reg (DImode, GEN_INT (0x8000000000000000)); #else operands[2] = force_reg (DImode, immed_double_const (0, 0x80000000, DImode)); #endif ! }") (define_insn_and_split "*abstf_internal" [(set (match_operand:TF 0 "register_operand" "=r") --- 2377,2389 ---- (neg:TF (match_operand:TF 1 "reg_or_fp0_operand" ""))) (use (match_dup 2))])] "TARGET_HAS_XFLOATING_LIBS" { #if HOST_BITS_PER_WIDE_INT >= 64 ! operands[2] = force_reg (DImode, GEN_INT ((HOST_WIDE_INT) 1 << 63)); #else operands[2] = force_reg (DImode, immed_double_const (0, 0x80000000, DImode)); #endif ! }) (define_insn_and_split "*abstf_internal" [(set (match_operand:TF 0 "register_operand" "=r") *************** *** 1999,2012 **** (neg:TF (match_operand:TF 1 "reg_or_fp0_operand" ""))) (use (match_dup 2))])] "TARGET_HAS_XFLOATING_LIBS" - " { #if HOST_BITS_PER_WIDE_INT >= 64 ! operands[2] = force_reg (DImode, GEN_INT (0x8000000000000000)); #else operands[2] = force_reg (DImode, immed_double_const (0, 0x80000000, DImode)); #endif ! }") (define_insn_and_split "*negtf_internal" [(set (match_operand:TF 0 "register_operand" "=r") --- 2414,2426 ---- (neg:TF (match_operand:TF 1 "reg_or_fp0_operand" ""))) (use (match_dup 2))])] "TARGET_HAS_XFLOATING_LIBS" { #if HOST_BITS_PER_WIDE_INT >= 64 ! operands[2] = force_reg (DImode, GEN_INT ((HOST_WIDE_INT) 1 << 63)); #else operands[2] = force_reg (DImode, immed_double_const (0, 0x80000000, DImode)); #endif ! }) (define_insn_and_split "*negtf_internal" [(set (match_operand:TF 0 "register_operand" "=r") *************** *** 2023,2058 **** (plus:SF (match_operand:SF 1 "reg_or_fp0_operand" "%fG") (match_operand:SF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" ! "add%,%)%& %R1,%R2,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes")]) (define_insn "addsf3" [(set (match_operand:SF 0 "register_operand" "=f") (plus:SF (match_operand:SF 1 "reg_or_fp0_operand" "%fG") (match_operand:SF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP" ! "add%,%)%& %R1,%R2,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes")]) (define_insn "*adddf_ieee" [(set (match_operand:DF 0 "register_operand" "=&f") (plus:DF (match_operand:DF 1 "reg_or_fp0_operand" "%fG") (match_operand:DF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" ! "add%-%)%& %R1,%R2,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes")]) (define_insn "adddf3" [(set (match_operand:DF 0 "register_operand" "=f") (plus:DF (match_operand:DF 1 "reg_or_fp0_operand" "%fG") (match_operand:DF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP" ! "add%-%)%& %R1,%R2,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes")]) (define_insn "*adddf_ext1" [(set (match_operand:DF 0 "register_operand" "=f") --- 2437,2480 ---- (plus:SF (match_operand:SF 1 "reg_or_fp0_operand" "%fG") (match_operand:SF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" ! "add%,%/ %R1,%R2,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "u_su_sui")]) (define_insn "addsf3" [(set (match_operand:SF 0 "register_operand" "=f") (plus:SF (match_operand:SF 1 "reg_or_fp0_operand" "%fG") (match_operand:SF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP" ! "add%,%/ %R1,%R2,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "u_su_sui")]) (define_insn "*adddf_ieee" [(set (match_operand:DF 0 "register_operand" "=&f") (plus:DF (match_operand:DF 1 "reg_or_fp0_operand" "%fG") (match_operand:DF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" ! "add%-%/ %R1,%R2,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "u_su_sui")]) (define_insn "adddf3" [(set (match_operand:DF 0 "register_operand" "=f") (plus:DF (match_operand:DF 1 "reg_or_fp0_operand" "%fG") (match_operand:DF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP" ! "add%-%/ %R1,%R2,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "u_su_sui")]) (define_insn "*adddf_ext1" [(set (match_operand:DF 0 "register_operand" "=f") *************** *** 2060,2068 **** (match_operand:SF 1 "reg_or_fp0_operand" "fG")) (match_operand:DF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU" ! "add%-%)%& %R1,%R2,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes")]) (define_insn "*adddf_ext2" [(set (match_operand:DF 0 "register_operand" "=f") --- 2482,2492 ---- (match_operand:SF 1 "reg_or_fp0_operand" "fG")) (match_operand:DF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU" ! "add%-%/ %R1,%R2,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "u_su_sui")]) (define_insn "*adddf_ext2" [(set (match_operand:DF 0 "register_operand" "=f") *************** *** 2071,2079 **** (float_extend:DF (match_operand:SF 2 "reg_or_fp0_operand" "fG"))))] "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU" ! "add%-%)%& %R1,%R2,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes")]) (define_expand "addtf3" [(use (match_operand 0 "register_operand" "")) --- 2495,2505 ---- (float_extend:DF (match_operand:SF 2 "reg_or_fp0_operand" "fG"))))] "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU" ! "add%-%/ %R1,%R2,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "u_su_sui")]) (define_expand "addtf3" [(use (match_operand 0 "register_operand" "")) *************** *** 2093,2103 **** (define_insn "*cvtql" [(set (match_operand:SI 0 "register_operand" "=f") ! (unspec:SI [(match_operand:DI 1 "reg_or_fp0_operand" "fG")] 5))] "TARGET_FP" ! "cvtql%` %R1,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes")]) (define_insn_and_split "*fix_truncdfsi_ieee" [(set (match_operand:SI 0 "memory_operand" "=m") --- 2519,2531 ---- (define_insn "*cvtql" [(set (match_operand:SI 0 "register_operand" "=f") ! (unspec:SI [(match_operand:DI 1 "reg_or_fp0_operand" "fG")] ! UNSPEC_CVTQL))] "TARGET_FP" ! "cvtql%/ %R1,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes") ! (set_attr "trap_suffix" "v_sv")]) (define_insn_and_split "*fix_truncdfsi_ieee" [(set (match_operand:SI 0 "memory_operand" "=m") *************** *** 2108,2114 **** "#" "&& reload_completed" [(set (match_dup 2) (fix:DI (match_dup 1))) ! (set (match_dup 3) (unspec:SI [(match_dup 2)] 5)) (set (match_dup 0) (match_dup 3))] "" [(set_attr "type" "fadd") --- 2536,2542 ---- "#" "&& reload_completed" [(set (match_dup 2) (fix:DI (match_dup 1))) ! (set (match_dup 3) (unspec:SI [(match_dup 2)] UNSPEC_CVTQL)) (set (match_dup 0) (match_dup 3))] "" [(set_attr "type" "fadd") *************** *** 2122,2128 **** "#" "&& reload_completed" [(set (match_dup 2) (fix:DI (match_dup 1))) ! (set (match_dup 3) (unspec:SI [(match_dup 2)] 5)) (set (match_dup 0) (match_dup 3))] ;; Due to REG_CANNOT_CHANGE_SIZE issues, we cannot simply use SUBREG. "operands[3] = gen_rtx_REG (SImode, REGNO (operands[2]));" --- 2550,2556 ---- "#" "&& reload_completed" [(set (match_dup 2) (fix:DI (match_dup 1))) ! (set (match_dup 3) (unspec:SI [(match_dup 2)] UNSPEC_CVTQL)) (set (match_dup 0) (match_dup 3))] ;; Due to REG_CANNOT_CHANGE_SIZE issues, we cannot simply use SUBREG. "operands[3] = gen_rtx_REG (SImode, REGNO (operands[2]));" *************** *** 2133,2149 **** [(set (match_operand:DI 0 "reg_no_subreg_operand" "=&f") (fix:DI (match_operand:DF 1 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" ! "cvt%-q%(c %R1,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes")]) (define_insn "fix_truncdfdi2" [(set (match_operand:DI 0 "reg_no_subreg_operand" "=f") (fix:DI (match_operand:DF 1 "reg_or_fp0_operand" "fG")))] "TARGET_FP" ! "cvt%-q%(c %R1,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes")]) ;; Likewise between SFmode and SImode. --- 2561,2581 ---- [(set (match_operand:DI 0 "reg_no_subreg_operand" "=&f") (fix:DI (match_operand:DF 1 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" ! "cvt%-q%/ %R1,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "c") ! (set_attr "trap_suffix" "v_sv_svi")]) (define_insn "fix_truncdfdi2" [(set (match_operand:DI 0 "reg_no_subreg_operand" "=f") (fix:DI (match_operand:DF 1 "reg_or_fp0_operand" "fG")))] "TARGET_FP" ! "cvt%-q%/ %R1,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "c") ! (set_attr "trap_suffix" "v_sv_svi")]) ;; Likewise between SFmode and SImode. *************** *** 2157,2163 **** "#" "&& reload_completed" [(set (match_dup 2) (fix:DI (float_extend:DF (match_dup 1)))) ! (set (match_dup 3) (unspec:SI [(match_dup 2)] 5)) (set (match_dup 0) (match_dup 3))] "" [(set_attr "type" "fadd") --- 2589,2595 ---- "#" "&& reload_completed" [(set (match_dup 2) (fix:DI (float_extend:DF (match_dup 1)))) ! (set (match_dup 3) (unspec:SI [(match_dup 2)] UNSPEC_CVTQL)) (set (match_dup 0) (match_dup 3))] "" [(set_attr "type" "fadd") *************** *** 2172,2178 **** "#" "&& reload_completed" [(set (match_dup 2) (fix:DI (float_extend:DF (match_dup 1)))) ! (set (match_dup 3) (unspec:SI [(match_dup 2)] 5)) (set (match_dup 0) (match_dup 3))] ;; Due to REG_CANNOT_CHANGE_SIZE issues, we cannot simply use SUBREG. "operands[3] = gen_rtx_REG (SImode, REGNO (operands[2]));" --- 2604,2610 ---- "#" "&& reload_completed" [(set (match_dup 2) (fix:DI (float_extend:DF (match_dup 1)))) ! (set (match_dup 3) (unspec:SI [(match_dup 2)] UNSPEC_CVTQL)) (set (match_dup 0) (match_dup 3))] ;; Due to REG_CANNOT_CHANGE_SIZE issues, we cannot simply use SUBREG. "operands[3] = gen_rtx_REG (SImode, REGNO (operands[2]));" *************** *** 2184,2201 **** (fix:DI (float_extend:DF (match_operand:SF 1 "reg_or_fp0_operand" "fG"))))] "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" ! "cvt%-q%(c %R1,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes")]) (define_insn "fix_truncsfdi2" [(set (match_operand:DI 0 "reg_no_subreg_operand" "=f") (fix:DI (float_extend:DF (match_operand:SF 1 "reg_or_fp0_operand" "fG"))))] "TARGET_FP" ! "cvt%-q%(c %R1,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes")]) (define_expand "fix_trunctfdi2" [(use (match_operand:DI 0 "register_operand" "")) --- 2616,2637 ---- (fix:DI (float_extend:DF (match_operand:SF 1 "reg_or_fp0_operand" "fG"))))] "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" ! "cvt%-q%/ %R1,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "c") ! (set_attr "trap_suffix" "v_sv_svi")]) (define_insn "fix_truncsfdi2" [(set (match_operand:DI 0 "reg_no_subreg_operand" "=f") (fix:DI (float_extend:DF (match_operand:SF 1 "reg_or_fp0_operand" "fG"))))] "TARGET_FP" ! "cvt%-q%/ %R1,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "c") ! (set_attr "trap_suffix" "v_sv_svi")]) (define_expand "fix_trunctfdi2" [(use (match_operand:DI 0 "register_operand" "")) *************** *** 2207,2239 **** [(set (match_operand:SF 0 "register_operand" "=&f") (float:SF (match_operand:DI 1 "reg_no_subreg_operand" "f")))] "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" ! "cvtq%,%+%& %1,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes")]) (define_insn "floatdisf2" [(set (match_operand:SF 0 "register_operand" "=f") (float:SF (match_operand:DI 1 "reg_no_subreg_operand" "f")))] "TARGET_FP" ! "cvtq%,%+%& %1,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes")]) (define_insn "*floatdidf_ieee" [(set (match_operand:DF 0 "register_operand" "=&f") (float:DF (match_operand:DI 1 "reg_no_subreg_operand" "f")))] "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" ! "cvtq%-%+%& %1,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes")]) (define_insn "floatdidf2" [(set (match_operand:DF 0 "register_operand" "=f") (float:DF (match_operand:DI 1 "reg_no_subreg_operand" "f")))] "TARGET_FP" ! "cvtq%-%+%& %1,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes")]) (define_expand "floatditf2" [(use (match_operand:TF 0 "register_operand" "")) --- 2643,2683 ---- [(set (match_operand:SF 0 "register_operand" "=&f") (float:SF (match_operand:DI 1 "reg_no_subreg_operand" "f")))] "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" ! "cvtq%,%/ %1,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "sui")]) (define_insn "floatdisf2" [(set (match_operand:SF 0 "register_operand" "=f") (float:SF (match_operand:DI 1 "reg_no_subreg_operand" "f")))] "TARGET_FP" ! "cvtq%,%/ %1,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "sui")]) (define_insn "*floatdidf_ieee" [(set (match_operand:DF 0 "register_operand" "=&f") (float:DF (match_operand:DI 1 "reg_no_subreg_operand" "f")))] "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" ! "cvtq%-%/ %1,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "sui")]) (define_insn "floatdidf2" [(set (match_operand:DF 0 "register_operand" "=f") (float:DF (match_operand:DI 1 "reg_no_subreg_operand" "f")))] "TARGET_FP" ! "cvtq%-%/ %1,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "sui")]) (define_expand "floatditf2" [(use (match_operand:TF 0 "register_operand" "")) *************** *** 2263,2273 **** [(set (match_operand:DF 0 "register_operand" "") (float_extend:DF (match_operand:SF 1 "nonimmediate_operand" "")))] "TARGET_FP" - " { if (alpha_fptm >= ALPHA_FPTM_SU) operands[1] = force_reg (SFmode, operands[1]); ! }") (define_insn "*extendsfdf2_ieee" [(set (match_operand:DF 0 "register_operand" "=&f") --- 2707,2719 ---- [(set (match_operand:DF 0 "register_operand" "") (float_extend:DF (match_operand:SF 1 "nonimmediate_operand" "")))] "TARGET_FP" { if (alpha_fptm >= ALPHA_FPTM_SU) operands[1] = force_reg (SFmode, operands[1]); ! }) ! ! ;; The Unicos/Mk assembler doesn't support cvtst, but we've already ! ;; asserted that alpha_fptm == ALPHA_FPTM_N. (define_insn "*extendsfdf2_ieee" [(set (match_operand:DF 0 "register_operand" "=&f") *************** *** 2282,2288 **** (float_extend:DF (match_operand:SF 1 "nonimmediate_operand" "f,m,f")))] "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU" "@ ! fmov %1,%0 ld%, %0,%1 st%- %1,%0" [(set_attr "type" "fcpys,fld,fst")]) --- 2728,2734 ---- (float_extend:DF (match_operand:SF 1 "nonimmediate_operand" "f,m,f")))] "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU" "@ ! cpys %1,%1,%0 ld%, %0,%1 st%- %1,%0" [(set_attr "type" "fcpys,fld,fst")]) *************** *** 2291,2303 **** [(use (match_operand:TF 0 "register_operand" "")) (use (match_operand:SF 1 "general_operand" ""))] "TARGET_HAS_XFLOATING_LIBS" - " { rtx tmp = gen_reg_rtx (DFmode); emit_insn (gen_extendsfdf2 (tmp, operands[1])); emit_insn (gen_extenddftf2 (operands[0], tmp)); DONE; ! }") (define_expand "extenddftf2" [(use (match_operand:TF 0 "register_operand" "")) --- 2737,2748 ---- [(use (match_operand:TF 0 "register_operand" "")) (use (match_operand:SF 1 "general_operand" ""))] "TARGET_HAS_XFLOATING_LIBS" { rtx tmp = gen_reg_rtx (DFmode); emit_insn (gen_extendsfdf2 (tmp, operands[1])); emit_insn (gen_extenddftf2 (operands[0], tmp)); DONE; ! }) (define_expand "extenddftf2" [(use (match_operand:TF 0 "register_operand" "")) *************** *** 2309,2325 **** [(set (match_operand:SF 0 "register_operand" "=&f") (float_truncate:SF (match_operand:DF 1 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" ! "cvt%-%,%)%& %R1,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes")]) (define_insn "truncdfsf2" [(set (match_operand:SF 0 "register_operand" "=f") (float_truncate:SF (match_operand:DF 1 "reg_or_fp0_operand" "fG")))] "TARGET_FP" ! "cvt%-%,%)%& %R1,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes")]) (define_expand "trunctfdf2" [(use (match_operand:DF 0 "register_operand" "")) --- 2754,2774 ---- [(set (match_operand:SF 0 "register_operand" "=&f") (float_truncate:SF (match_operand:DF 1 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" ! "cvt%-%,%/ %R1,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "u_su_sui")]) (define_insn "truncdfsf2" [(set (match_operand:SF 0 "register_operand" "=f") (float_truncate:SF (match_operand:DF 1 "reg_or_fp0_operand" "fG")))] "TARGET_FP" ! "cvt%-%,%/ %R1,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "u_su_sui")]) (define_expand "trunctfdf2" [(use (match_operand:DF 0 "register_operand" "")) *************** *** 2331,2337 **** [(use (match_operand:SF 0 "register_operand" "")) (use (match_operand:TF 1 "general_operand" ""))] "TARGET_FP && TARGET_HAS_XFLOATING_LIBS" - " { rtx tmpf, sticky, arg, lo, hi; --- 2780,2785 ---- *************** *** 2346,2405 **** bit at bit 48 of the fraction, which is representable in DFmode, which prevents rounding error in the final conversion to SFmode. */ ! emit_insn (gen_rtx_SET (VOIDmode, sticky, gen_rtx_NE (DImode, lo, const0_rtx))); emit_insn (gen_iordi3 (hi, hi, sticky)); emit_insn (gen_trunctfdf2 (tmpf, arg)); emit_insn (gen_truncdfsf2 (operands[0], tmpf)); DONE; ! }") (define_insn "*divsf3_ieee" [(set (match_operand:SF 0 "register_operand" "=&f") (div:SF (match_operand:SF 1 "reg_or_fp0_operand" "fG") (match_operand:SF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" ! "div%,%)%& %R1,%R2,%0" [(set_attr "type" "fdiv") (set_attr "opsize" "si") ! (set_attr "trap" "yes")]) (define_insn "divsf3" [(set (match_operand:SF 0 "register_operand" "=f") (div:SF (match_operand:SF 1 "reg_or_fp0_operand" "fG") (match_operand:SF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP" ! "div%,%)%& %R1,%R2,%0" [(set_attr "type" "fdiv") (set_attr "opsize" "si") ! (set_attr "trap" "yes")]) (define_insn "*divdf3_ieee" [(set (match_operand:DF 0 "register_operand" "=&f") (div:DF (match_operand:DF 1 "reg_or_fp0_operand" "fG") (match_operand:DF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" ! "div%-%)%& %R1,%R2,%0" [(set_attr "type" "fdiv") ! (set_attr "trap" "yes")]) (define_insn "divdf3" [(set (match_operand:DF 0 "register_operand" "=f") (div:DF (match_operand:DF 1 "reg_or_fp0_operand" "fG") (match_operand:DF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP" ! "div%-%)%& %R1,%R2,%0" [(set_attr "type" "fdiv") ! (set_attr "trap" "yes")]) (define_insn "*divdf_ext1" [(set (match_operand:DF 0 "register_operand" "=f") (div:DF (float_extend:DF (match_operand:SF 1 "reg_or_fp0_operand" "fG")) (match_operand:DF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU" ! "div%-%)%& %R1,%R2,%0" [(set_attr "type" "fdiv") ! (set_attr "trap" "yes")]) (define_insn "*divdf_ext2" [(set (match_operand:DF 0 "register_operand" "=f") --- 2794,2863 ---- bit at bit 48 of the fraction, which is representable in DFmode, which prevents rounding error in the final conversion to SFmode. */ ! emit_insn (gen_rtx_SET (VOIDmode, sticky, gen_rtx_NE (DImode, lo, const0_rtx))); emit_insn (gen_iordi3 (hi, hi, sticky)); emit_insn (gen_trunctfdf2 (tmpf, arg)); emit_insn (gen_truncdfsf2 (operands[0], tmpf)); DONE; ! }) (define_insn "*divsf3_ieee" [(set (match_operand:SF 0 "register_operand" "=&f") (div:SF (match_operand:SF 1 "reg_or_fp0_operand" "fG") (match_operand:SF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" ! "div%,%/ %R1,%R2,%0" [(set_attr "type" "fdiv") (set_attr "opsize" "si") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "u_su_sui")]) (define_insn "divsf3" [(set (match_operand:SF 0 "register_operand" "=f") (div:SF (match_operand:SF 1 "reg_or_fp0_operand" "fG") (match_operand:SF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP" ! "div%,%/ %R1,%R2,%0" [(set_attr "type" "fdiv") (set_attr "opsize" "si") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "u_su_sui")]) (define_insn "*divdf3_ieee" [(set (match_operand:DF 0 "register_operand" "=&f") (div:DF (match_operand:DF 1 "reg_or_fp0_operand" "fG") (match_operand:DF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" ! "div%-%/ %R1,%R2,%0" [(set_attr "type" "fdiv") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "u_su_sui")]) (define_insn "divdf3" [(set (match_operand:DF 0 "register_operand" "=f") (div:DF (match_operand:DF 1 "reg_or_fp0_operand" "fG") (match_operand:DF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP" ! "div%-%/ %R1,%R2,%0" [(set_attr "type" "fdiv") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "u_su_sui")]) (define_insn "*divdf_ext1" [(set (match_operand:DF 0 "register_operand" "=f") (div:DF (float_extend:DF (match_operand:SF 1 "reg_or_fp0_operand" "fG")) (match_operand:DF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU" ! "div%-%/ %R1,%R2,%0" [(set_attr "type" "fdiv") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "u_su_sui")]) (define_insn "*divdf_ext2" [(set (match_operand:DF 0 "register_operand" "=f") *************** *** 2407,2424 **** (float_extend:DF (match_operand:SF 2 "reg_or_fp0_operand" "fG"))))] "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU" ! "div%-%)%& %R1,%R2,%0" [(set_attr "type" "fdiv") ! (set_attr "trap" "yes")]) (define_insn "*divdf_ext3" [(set (match_operand:DF 0 "register_operand" "=f") (div:DF (float_extend:DF (match_operand:SF 1 "reg_or_fp0_operand" "fG")) (float_extend:DF (match_operand:SF 2 "reg_or_fp0_operand" "fG"))))] "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU" ! "div%-%)%& %R1,%R2,%0" [(set_attr "type" "fdiv") ! (set_attr "trap" "yes")]) (define_expand "divtf3" [(use (match_operand 0 "register_operand" "")) --- 2865,2886 ---- (float_extend:DF (match_operand:SF 2 "reg_or_fp0_operand" "fG"))))] "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU" ! "div%-%/ %R1,%R2,%0" [(set_attr "type" "fdiv") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "u_su_sui")]) (define_insn "*divdf_ext3" [(set (match_operand:DF 0 "register_operand" "=f") (div:DF (float_extend:DF (match_operand:SF 1 "reg_or_fp0_operand" "fG")) (float_extend:DF (match_operand:SF 2 "reg_or_fp0_operand" "fG"))))] "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU" ! "div%-%/ %R1,%R2,%0" [(set_attr "type" "fdiv") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "u_su_sui")]) (define_expand "divtf3" [(use (match_operand 0 "register_operand" "")) *************** *** 2432,2467 **** (mult:SF (match_operand:SF 1 "reg_or_fp0_operand" "%fG") (match_operand:SF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" ! "mul%,%)%& %R1,%R2,%0" [(set_attr "type" "fmul") ! (set_attr "trap" "yes")]) (define_insn "mulsf3" [(set (match_operand:SF 0 "register_operand" "=f") (mult:SF (match_operand:SF 1 "reg_or_fp0_operand" "%fG") (match_operand:SF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP" ! "mul%,%)%& %R1,%R2,%0" [(set_attr "type" "fmul") ! (set_attr "trap" "yes")]) (define_insn "*muldf3_ieee" [(set (match_operand:DF 0 "register_operand" "=&f") (mult:DF (match_operand:DF 1 "reg_or_fp0_operand" "%fG") (match_operand:DF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" ! "mul%-%)%& %R1,%R2,%0" [(set_attr "type" "fmul") ! (set_attr "trap" "yes")]) (define_insn "muldf3" [(set (match_operand:DF 0 "register_operand" "=f") (mult:DF (match_operand:DF 1 "reg_or_fp0_operand" "%fG") (match_operand:DF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP" ! "mul%-%)%& %R1,%R2,%0" [(set_attr "type" "fmul") ! (set_attr "trap" "yes")]) (define_insn "*muldf_ext1" [(set (match_operand:DF 0 "register_operand" "=f") --- 2894,2937 ---- (mult:SF (match_operand:SF 1 "reg_or_fp0_operand" "%fG") (match_operand:SF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" ! "mul%,%/ %R1,%R2,%0" [(set_attr "type" "fmul") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "u_su_sui")]) (define_insn "mulsf3" [(set (match_operand:SF 0 "register_operand" "=f") (mult:SF (match_operand:SF 1 "reg_or_fp0_operand" "%fG") (match_operand:SF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP" ! "mul%,%/ %R1,%R2,%0" [(set_attr "type" "fmul") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "u_su_sui")]) (define_insn "*muldf3_ieee" [(set (match_operand:DF 0 "register_operand" "=&f") (mult:DF (match_operand:DF 1 "reg_or_fp0_operand" "%fG") (match_operand:DF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" ! "mul%-%/ %R1,%R2,%0" [(set_attr "type" "fmul") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "u_su_sui")]) (define_insn "muldf3" [(set (match_operand:DF 0 "register_operand" "=f") (mult:DF (match_operand:DF 1 "reg_or_fp0_operand" "%fG") (match_operand:DF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP" ! "mul%-%/ %R1,%R2,%0" [(set_attr "type" "fmul") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "u_su_sui")]) (define_insn "*muldf_ext1" [(set (match_operand:DF 0 "register_operand" "=f") *************** *** 2469,2477 **** (match_operand:SF 1 "reg_or_fp0_operand" "fG")) (match_operand:DF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU" ! "mul%-%)%& %R1,%R2,%0" [(set_attr "type" "fmul") ! (set_attr "trap" "yes")]) (define_insn "*muldf_ext2" [(set (match_operand:DF 0 "register_operand" "=f") --- 2939,2949 ---- (match_operand:SF 1 "reg_or_fp0_operand" "fG")) (match_operand:DF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU" ! "mul%-%/ %R1,%R2,%0" [(set_attr "type" "fmul") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "u_su_sui")]) (define_insn "*muldf_ext2" [(set (match_operand:DF 0 "register_operand" "=f") *************** *** 2480,2488 **** (float_extend:DF (match_operand:SF 2 "reg_or_fp0_operand" "fG"))))] "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU" ! "mul%-%)%& %R1,%R2,%0" [(set_attr "type" "fmul") ! (set_attr "trap" "yes")]) (define_expand "multf3" [(use (match_operand 0 "register_operand" "")) --- 2952,2962 ---- (float_extend:DF (match_operand:SF 2 "reg_or_fp0_operand" "fG"))))] "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU" ! "mul%-%/ %R1,%R2,%0" [(set_attr "type" "fmul") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "u_su_sui")]) (define_expand "multf3" [(use (match_operand 0 "register_operand" "")) *************** *** 2496,2531 **** (minus:SF (match_operand:SF 1 "reg_or_fp0_operand" "fG") (match_operand:SF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" ! "sub%,%)%& %R1,%R2,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes")]) (define_insn "subsf3" [(set (match_operand:SF 0 "register_operand" "=f") (minus:SF (match_operand:SF 1 "reg_or_fp0_operand" "fG") (match_operand:SF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP" ! "sub%,%)%& %R1,%R2,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes")]) (define_insn "*subdf3_ieee" [(set (match_operand:DF 0 "register_operand" "=&f") (minus:DF (match_operand:DF 1 "reg_or_fp0_operand" "fG") (match_operand:DF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" ! "sub%-%)%& %R1,%R2,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes")]) (define_insn "subdf3" [(set (match_operand:DF 0 "register_operand" "=f") (minus:DF (match_operand:DF 1 "reg_or_fp0_operand" "fG") (match_operand:DF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP" ! "sub%-%)%& %R1,%R2,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes")]) (define_insn "*subdf_ext1" [(set (match_operand:DF 0 "register_operand" "=f") --- 2970,3013 ---- (minus:SF (match_operand:SF 1 "reg_or_fp0_operand" "fG") (match_operand:SF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" ! "sub%,%/ %R1,%R2,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "u_su_sui")]) (define_insn "subsf3" [(set (match_operand:SF 0 "register_operand" "=f") (minus:SF (match_operand:SF 1 "reg_or_fp0_operand" "fG") (match_operand:SF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP" ! "sub%,%/ %R1,%R2,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "u_su_sui")]) (define_insn "*subdf3_ieee" [(set (match_operand:DF 0 "register_operand" "=&f") (minus:DF (match_operand:DF 1 "reg_or_fp0_operand" "fG") (match_operand:DF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" ! "sub%-%/ %R1,%R2,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "u_su_sui")]) (define_insn "subdf3" [(set (match_operand:DF 0 "register_operand" "=f") (minus:DF (match_operand:DF 1 "reg_or_fp0_operand" "fG") (match_operand:DF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP" ! "sub%-%/ %R1,%R2,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "u_su_sui")]) (define_insn "*subdf_ext1" [(set (match_operand:DF 0 "register_operand" "=f") *************** *** 2533,2541 **** (match_operand:SF 1 "reg_or_fp0_operand" "fG")) (match_operand:DF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU" ! "sub%-%)%& %R1,%R2,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes")]) (define_insn "*subdf_ext2" [(set (match_operand:DF 0 "register_operand" "=f") --- 3015,3025 ---- (match_operand:SF 1 "reg_or_fp0_operand" "fG")) (match_operand:DF 2 "reg_or_fp0_operand" "fG")))] "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU" ! "sub%-%/ %R1,%R2,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "u_su_sui")]) (define_insn "*subdf_ext2" [(set (match_operand:DF 0 "register_operand" "=f") *************** *** 2543,2551 **** (float_extend:DF (match_operand:SF 2 "reg_or_fp0_operand" "fG"))))] "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU" ! "sub%-%)%& %R1,%R2,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes")]) (define_insn "*subdf_ext3" [(set (match_operand:DF 0 "register_operand" "=f") --- 3027,3037 ---- (float_extend:DF (match_operand:SF 2 "reg_or_fp0_operand" "fG"))))] "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU" ! "sub%-%/ %R1,%R2,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "u_su_sui")]) (define_insn "*subdf_ext3" [(set (match_operand:DF 0 "register_operand" "=f") *************** *** 2554,2562 **** (float_extend:DF (match_operand:SF 2 "reg_or_fp0_operand" "fG"))))] "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU" ! "sub%-%)%& %R1,%R2,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes")]) (define_expand "subtf3" [(use (match_operand 0 "register_operand" "")) --- 3040,3050 ---- (float_extend:DF (match_operand:SF 2 "reg_or_fp0_operand" "fG"))))] "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU" ! "sub%-%/ %R1,%R2,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "u_su_sui")]) (define_expand "subtf3" [(use (match_operand 0 "register_operand" "")) *************** *** 2569,2603 **** [(set (match_operand:SF 0 "register_operand" "=&f") (sqrt:SF (match_operand:SF 1 "reg_or_fp0_operand" "fG")))] "TARGET_FP && TARGET_FIX && alpha_fptm >= ALPHA_FPTM_SU" ! "sqrt%,%)%& %R1,%0" [(set_attr "type" "fsqrt") (set_attr "opsize" "si") ! (set_attr "trap" "yes")]) (define_insn "sqrtsf2" [(set (match_operand:SF 0 "register_operand" "=f") (sqrt:SF (match_operand:SF 1 "reg_or_fp0_operand" "fG")))] "TARGET_FP && TARGET_FIX" ! "sqrt%,%)%& %R1,%0" [(set_attr "type" "fsqrt") (set_attr "opsize" "si") ! (set_attr "trap" "yes")]) (define_insn "*sqrtdf2_ieee" [(set (match_operand:DF 0 "register_operand" "=&f") (sqrt:DF (match_operand:DF 1 "reg_or_fp0_operand" "fG")))] "TARGET_FP && TARGET_FIX && alpha_fptm >= ALPHA_FPTM_SU" ! "sqrt%-%)%& %R1,%0" [(set_attr "type" "fsqrt") ! (set_attr "trap" "yes")]) (define_insn "sqrtdf2" [(set (match_operand:DF 0 "register_operand" "=f") (sqrt:DF (match_operand:DF 1 "reg_or_fp0_operand" "fG")))] "TARGET_FP && TARGET_FIX" ! "sqrt%-%)%& %1,%0" [(set_attr "type" "fsqrt") ! (set_attr "trap" "yes")]) ;; Next are all the integer comparisons, and conditional moves and branches ;; and some of the related define_expand's and define_split's. --- 3057,3099 ---- [(set (match_operand:SF 0 "register_operand" "=&f") (sqrt:SF (match_operand:SF 1 "reg_or_fp0_operand" "fG")))] "TARGET_FP && TARGET_FIX && alpha_fptm >= ALPHA_FPTM_SU" ! "sqrt%,%/ %R1,%0" [(set_attr "type" "fsqrt") (set_attr "opsize" "si") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "u_su_sui")]) (define_insn "sqrtsf2" [(set (match_operand:SF 0 "register_operand" "=f") (sqrt:SF (match_operand:SF 1 "reg_or_fp0_operand" "fG")))] "TARGET_FP && TARGET_FIX" ! "sqrt%,%/ %R1,%0" [(set_attr "type" "fsqrt") (set_attr "opsize" "si") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "u_su_sui")]) (define_insn "*sqrtdf2_ieee" [(set (match_operand:DF 0 "register_operand" "=&f") (sqrt:DF (match_operand:DF 1 "reg_or_fp0_operand" "fG")))] "TARGET_FP && TARGET_FIX && alpha_fptm >= ALPHA_FPTM_SU" ! "sqrt%-%/ %R1,%0" [(set_attr "type" "fsqrt") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "u_su_sui")]) (define_insn "sqrtdf2" [(set (match_operand:DF 0 "register_operand" "=f") (sqrt:DF (match_operand:DF 1 "reg_or_fp0_operand" "fG")))] "TARGET_FP && TARGET_FIX" ! "sqrt%-%/ %1,%0" [(set_attr "type" "fsqrt") ! (set_attr "trap" "yes") ! (set_attr "round_suffix" "normal") ! (set_attr "trap_suffix" "u_su_sui")]) ;; Next are all the integer comparisons, and conditional moves and branches ;; and some of the related define_expand's and define_split's. *************** *** 2838,2851 **** [(set (match_operand:DI 0 "register_operand" "") (abs:DI (match_operand:DI 1 "register_operand" "")))] "" ! " ! { if (rtx_equal_p (operands[0], operands[1])) emit_insn (gen_absdi2_same (operands[0], gen_reg_rtx (DImode))); else emit_insn (gen_absdi2_diff (operands[0], operands[1])); - DONE; ! }") (define_expand "absdi2_same" [(set (match_operand:DI 1 "register_operand" "") --- 3334,3346 ---- [(set (match_operand:DI 0 "register_operand" "") (abs:DI (match_operand:DI 1 "register_operand" "")))] "" ! { ! if (rtx_equal_p (operands[0], operands[1])) emit_insn (gen_absdi2_same (operands[0], gen_reg_rtx (DImode))); else emit_insn (gen_absdi2_diff (operands[0], operands[1])); DONE; ! }) (define_expand "absdi2_same" [(set (match_operand:DI 1 "register_operand" "") *************** *** 2977,2985 **** (if_then_else:DI (eq (match_dup 3) (const_int 0)) (match_dup 1) (match_dup 2)))] "" ! " ! { operands[3] = gen_reg_rtx (DImode); ! }") (define_split [(set (match_operand:DI 0 "register_operand" "") --- 3472,3478 ---- (if_then_else:DI (eq (match_dup 3) (const_int 0)) (match_dup 1) (match_dup 2)))] "" ! { operands[3] = gen_reg_rtx (DImode); }) (define_split [(set (match_operand:DI 0 "register_operand" "") *************** *** 3008,3016 **** (if_then_else:DI (ne (match_dup 3) (const_int 0)) (match_dup 1) (match_dup 2)))] "" ! " ! { operands[3] = gen_reg_rtx (DImode); ! }") (define_split [(set (match_operand:DI 0 "register_operand" "") --- 3501,3507 ---- (if_then_else:DI (ne (match_dup 3) (const_int 0)) (match_dup 1) (match_dup 2)))] "" ! { operands[3] = gen_reg_rtx (DImode); }) (define_split [(set (match_operand:DI 0 "register_operand" "") *************** *** 3032,3038 **** [(set_attr "type" "icmov")]) (define_expand "umaxdi3" ! [(set (match_dup 3) (leu:DI (match_operand:DI 1 "reg_or_0_operand" "") (match_operand:DI 2 "reg_or_8bit_operand" ""))) (set (match_operand:DI 0 "register_operand" "") --- 3523,3529 ---- [(set_attr "type" "icmov")]) (define_expand "umaxdi3" ! [(set (match_dup 3) (leu:DI (match_operand:DI 1 "reg_or_0_operand" "") (match_operand:DI 2 "reg_or_8bit_operand" ""))) (set (match_operand:DI 0 "register_operand" "") *************** *** 3159,3167 **** [(match_operand:DF 2 "reg_or_fp0_operand" "fG") (match_operand:DF 3 "reg_or_fp0_operand" "fG")]))] "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" ! "cmp%-%C1%' %R2,%R3,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes")]) (define_insn "*cmpdf_internal" [(set (match_operand:DF 0 "register_operand" "=f") --- 3650,3659 ---- [(match_operand:DF 2 "reg_or_fp0_operand" "fG") (match_operand:DF 3 "reg_or_fp0_operand" "fG")]))] "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" ! "cmp%-%C1%/ %R2,%R3,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes") ! (set_attr "trap_suffix" "su")]) (define_insn "*cmpdf_internal" [(set (match_operand:DF 0 "register_operand" "=f") *************** *** 3169,3177 **** [(match_operand:DF 2 "reg_or_fp0_operand" "fG") (match_operand:DF 3 "reg_or_fp0_operand" "fG")]))] "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU" ! "cmp%-%C1%' %R2,%R3,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes")]) (define_insn "*cmpdf_ieee_ext1" [(set (match_operand:DF 0 "register_operand" "=&f") --- 3661,3670 ---- [(match_operand:DF 2 "reg_or_fp0_operand" "fG") (match_operand:DF 3 "reg_or_fp0_operand" "fG")]))] "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU" ! "cmp%-%C1%/ %R2,%R3,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes") ! (set_attr "trap_suffix" "su")]) (define_insn "*cmpdf_ieee_ext1" [(set (match_operand:DF 0 "register_operand" "=&f") *************** *** 3180,3188 **** (match_operand:SF 2 "reg_or_fp0_operand" "fG")) (match_operand:DF 3 "reg_or_fp0_operand" "fG")]))] "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" ! "cmp%-%C1%' %R2,%R3,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes")]) (define_insn "*cmpdf_ext1" [(set (match_operand:DF 0 "register_operand" "=f") --- 3673,3682 ---- (match_operand:SF 2 "reg_or_fp0_operand" "fG")) (match_operand:DF 3 "reg_or_fp0_operand" "fG")]))] "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" ! "cmp%-%C1%/ %R2,%R3,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes") ! (set_attr "trap_suffix" "su")]) (define_insn "*cmpdf_ext1" [(set (match_operand:DF 0 "register_operand" "=f") *************** *** 3191,3199 **** (match_operand:SF 2 "reg_or_fp0_operand" "fG")) (match_operand:DF 3 "reg_or_fp0_operand" "fG")]))] "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU" ! "cmp%-%C1%' %R2,%R3,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes")]) (define_insn "*cmpdf_ieee_ext2" [(set (match_operand:DF 0 "register_operand" "=&f") --- 3685,3694 ---- (match_operand:SF 2 "reg_or_fp0_operand" "fG")) (match_operand:DF 3 "reg_or_fp0_operand" "fG")]))] "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU" ! "cmp%-%C1%/ %R2,%R3,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes") ! (set_attr "trap_suffix" "su")]) (define_insn "*cmpdf_ieee_ext2" [(set (match_operand:DF 0 "register_operand" "=&f") *************** *** 3202,3210 **** (float_extend:DF (match_operand:SF 3 "reg_or_fp0_operand" "fG"))]))] "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" ! "cmp%-%C1%' %R2,%R3,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes")]) (define_insn "*cmpdf_ext2" [(set (match_operand:DF 0 "register_operand" "=f") --- 3697,3706 ---- (float_extend:DF (match_operand:SF 3 "reg_or_fp0_operand" "fG"))]))] "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" ! "cmp%-%C1%/ %R2,%R3,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes") ! (set_attr "trap_suffix" "su")]) (define_insn "*cmpdf_ext2" [(set (match_operand:DF 0 "register_operand" "=f") *************** *** 3213,3221 **** (float_extend:DF (match_operand:SF 3 "reg_or_fp0_operand" "fG"))]))] "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU" ! "cmp%-%C1%' %R2,%R3,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes")]) (define_insn "*cmpdf_ieee_ext3" [(set (match_operand:DF 0 "register_operand" "=&f") --- 3709,3718 ---- (float_extend:DF (match_operand:SF 3 "reg_or_fp0_operand" "fG"))]))] "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU" ! "cmp%-%C1%/ %R2,%R3,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes") ! (set_attr "trap_suffix" "su")]) (define_insn "*cmpdf_ieee_ext3" [(set (match_operand:DF 0 "register_operand" "=&f") *************** *** 3225,3233 **** (float_extend:DF (match_operand:SF 3 "reg_or_fp0_operand" "fG"))]))] "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" ! "cmp%-%C1%' %R2,%R3,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes")]) (define_insn "*cmpdf_ext3" [(set (match_operand:DF 0 "register_operand" "=f") --- 3722,3731 ---- (float_extend:DF (match_operand:SF 3 "reg_or_fp0_operand" "fG"))]))] "TARGET_FP && alpha_fptm >= ALPHA_FPTM_SU" ! "cmp%-%C1%/ %R2,%R3,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes") ! (set_attr "trap_suffix" "su")]) (define_insn "*cmpdf_ext3" [(set (match_operand:DF 0 "register_operand" "=f") *************** *** 3237,3249 **** (float_extend:DF (match_operand:SF 3 "reg_or_fp0_operand" "fG"))]))] "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU" ! "cmp%-%C1%' %R2,%R3,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes")]) (define_insn "*movdfcc_internal" [(set (match_operand:DF 0 "register_operand" "=f,f") ! (if_then_else:DF (match_operator 3 "signed_comparison_operator" [(match_operand:DF 4 "reg_or_fp0_operand" "fG,fG") (match_operand:DF 2 "fp0_operand" "G,G")]) --- 3735,3748 ---- (float_extend:DF (match_operand:SF 3 "reg_or_fp0_operand" "fG"))]))] "TARGET_FP && alpha_fptm < ALPHA_FPTM_SU" ! "cmp%-%C1%/ %R2,%R3,%0" [(set_attr "type" "fadd") ! (set_attr "trap" "yes") ! (set_attr "trap_suffix" "su")]) (define_insn "*movdfcc_internal" [(set (match_operand:DF 0 "register_operand" "=f,f") ! (if_then_else:DF (match_operator 3 "signed_comparison_operator" [(match_operand:DF 4 "reg_or_fp0_operand" "fG,fG") (match_operand:DF 2 "fp0_operand" "G,G")]) *************** *** 3257,3263 **** (define_insn "*movsfcc_internal" [(set (match_operand:SF 0 "register_operand" "=f,f") ! (if_then_else:SF (match_operator 3 "signed_comparison_operator" [(match_operand:DF 4 "reg_or_fp0_operand" "fG,fG") (match_operand:DF 2 "fp0_operand" "G,G")]) --- 3756,3762 ---- (define_insn "*movsfcc_internal" [(set (match_operand:SF 0 "register_operand" "=f,f") ! (if_then_else:SF (match_operator 3 "signed_comparison_operator" [(match_operand:DF 4 "reg_or_fp0_operand" "fG,fG") (match_operand:DF 2 "fp0_operand" "G,G")]) *************** *** 3271,3277 **** (define_insn "*movdfcc_ext1" [(set (match_operand:DF 0 "register_operand" "=f,f") ! (if_then_else:DF (match_operator 3 "signed_comparison_operator" [(match_operand:DF 4 "reg_or_fp0_operand" "fG,fG") (match_operand:DF 2 "fp0_operand" "G,G")]) --- 3770,3776 ---- (define_insn "*movdfcc_ext1" [(set (match_operand:DF 0 "register_operand" "=f,f") ! (if_then_else:DF (match_operator 3 "signed_comparison_operator" [(match_operand:DF 4 "reg_or_fp0_operand" "fG,fG") (match_operand:DF 2 "fp0_operand" "G,G")]) *************** *** 3285,3293 **** (define_insn "*movdfcc_ext2" [(set (match_operand:DF 0 "register_operand" "=f,f") ! (if_then_else:DF (match_operator 3 "signed_comparison_operator" ! [(float_extend:DF (match_operand:SF 4 "reg_or_fp0_operand" "fG,fG")) (match_operand:DF 2 "fp0_operand" "G,G")]) (match_operand:DF 1 "reg_or_fp0_operand" "fG,0") --- 3784,3792 ---- (define_insn "*movdfcc_ext2" [(set (match_operand:DF 0 "register_operand" "=f,f") ! (if_then_else:DF (match_operator 3 "signed_comparison_operator" ! [(float_extend:DF (match_operand:SF 4 "reg_or_fp0_operand" "fG,fG")) (match_operand:DF 2 "fp0_operand" "G,G")]) (match_operand:DF 1 "reg_or_fp0_operand" "fG,0") *************** *** 3300,3306 **** (define_insn "*movdfcc_ext3" [(set (match_operand:SF 0 "register_operand" "=f,f") ! (if_then_else:SF (match_operator 3 "signed_comparison_operator" [(float_extend:DF (match_operand:SF 4 "reg_or_fp0_operand" "fG,fG")) --- 3799,3805 ---- (define_insn "*movdfcc_ext3" [(set (match_operand:SF 0 "register_operand" "=f,f") ! (if_then_else:SF (match_operator 3 "signed_comparison_operator" [(float_extend:DF (match_operand:SF 4 "reg_or_fp0_operand" "fG,fG")) *************** *** 3315,3321 **** (define_insn "*movdfcc_ext4" [(set (match_operand:DF 0 "register_operand" "=f,f") ! (if_then_else:DF (match_operator 3 "signed_comparison_operator" [(float_extend:DF (match_operand:SF 4 "reg_or_fp0_operand" "fG,fG")) --- 3814,3820 ---- (define_insn "*movdfcc_ext4" [(set (match_operand:DF 0 "register_operand" "=f,f") ! (if_then_else:DF (match_operator 3 "signed_comparison_operator" [(float_extend:DF (match_operand:SF 4 "reg_or_fp0_operand" "fG,fG")) *************** *** 3336,3345 **** (if_then_else:DF (eq (match_dup 3) (match_dup 4)) (match_dup 1) (match_dup 2)))] "TARGET_FP" ! " ! { operands[3] = gen_reg_rtx (DFmode); operands[4] = CONST0_RTX (DFmode); ! }") (define_expand "mindf3" [(set (match_dup 3) --- 3835,3844 ---- (if_then_else:DF (eq (match_dup 3) (match_dup 4)) (match_dup 1) (match_dup 2)))] "TARGET_FP" ! { ! operands[3] = gen_reg_rtx (DFmode); operands[4] = CONST0_RTX (DFmode); ! }) (define_expand "mindf3" [(set (match_dup 3) *************** *** 3349,3358 **** (if_then_else:DF (ne (match_dup 3) (match_dup 4)) (match_dup 1) (match_dup 2)))] "TARGET_FP" ! " ! { operands[3] = gen_reg_rtx (DFmode); operands[4] = CONST0_RTX (DFmode); ! }") (define_expand "maxsf3" [(set (match_dup 3) --- 3848,3857 ---- (if_then_else:DF (ne (match_dup 3) (match_dup 4)) (match_dup 1) (match_dup 2)))] "TARGET_FP" ! { ! operands[3] = gen_reg_rtx (DFmode); operands[4] = CONST0_RTX (DFmode); ! }) (define_expand "maxsf3" [(set (match_dup 3) *************** *** 3362,3371 **** (if_then_else:SF (eq (match_dup 3) (match_dup 4)) (match_dup 1) (match_dup 2)))] "TARGET_FP" ! " ! { operands[3] = gen_reg_rtx (DFmode); operands[4] = CONST0_RTX (DFmode); ! }") (define_expand "minsf3" [(set (match_dup 3) --- 3861,3870 ---- (if_then_else:SF (eq (match_dup 3) (match_dup 4)) (match_dup 1) (match_dup 2)))] "TARGET_FP" ! { ! operands[3] = gen_reg_rtx (DFmode); operands[4] = CONST0_RTX (DFmode); ! }) (define_expand "minsf3" [(set (match_dup 3) *************** *** 3375,3384 **** (if_then_else:SF (ne (match_dup 3) (match_dup 4)) (match_dup 1) (match_dup 2)))] "TARGET_FP" ! " ! { operands[3] = gen_reg_rtx (DFmode); operands[4] = CONST0_RTX (DFmode); ! }") (define_insn "*fbcc_normal" [(set (pc) --- 3874,3883 ---- (if_then_else:SF (ne (match_dup 3) (match_dup 4)) (match_dup 1) (match_dup 2)))] "TARGET_FP" ! { ! operands[3] = gen_reg_rtx (DFmode); operands[4] = CONST0_RTX (DFmode); ! }) (define_insn "*fbcc_normal" [(set (pc) *************** *** 3412,3448 **** [(set (cc0) (compare (match_operand:DF 0 "reg_or_fp0_operand" "") (match_operand:DF 1 "reg_or_fp0_operand" "")))] "TARGET_FP" - " { alpha_compare.op0 = operands[0]; alpha_compare.op1 = operands[1]; alpha_compare.fp_p = 1; DONE; ! }") (define_expand "cmptf" [(set (cc0) (compare (match_operand:TF 0 "general_operand" "") (match_operand:TF 1 "general_operand" "")))] "TARGET_HAS_XFLOATING_LIBS" - " { alpha_compare.op0 = operands[0]; alpha_compare.op1 = operands[1]; alpha_compare.fp_p = 1; DONE; ! }") (define_expand "cmpdi" [(set (cc0) (compare (match_operand:DI 0 "general_operand" "") (match_operand:DI 1 "general_operand" "")))] "" - " { alpha_compare.op0 = operands[0]; alpha_compare.op1 = operands[1]; alpha_compare.fp_p = 0; DONE; ! }") (define_expand "beq" [(set (pc) --- 3911,3944 ---- [(set (cc0) (compare (match_operand:DF 0 "reg_or_fp0_operand" "") (match_operand:DF 1 "reg_or_fp0_operand" "")))] "TARGET_FP" { alpha_compare.op0 = operands[0]; alpha_compare.op1 = operands[1]; alpha_compare.fp_p = 1; DONE; ! }) (define_expand "cmptf" [(set (cc0) (compare (match_operand:TF 0 "general_operand" "") (match_operand:TF 1 "general_operand" "")))] "TARGET_HAS_XFLOATING_LIBS" { alpha_compare.op0 = operands[0]; alpha_compare.op1 = operands[1]; alpha_compare.fp_p = 1; DONE; ! }) (define_expand "cmpdi" [(set (cc0) (compare (match_operand:DI 0 "general_operand" "") (match_operand:DI 1 "general_operand" "")))] "" { alpha_compare.op0 = operands[0]; alpha_compare.op1 = operands[1]; alpha_compare.fp_p = 0; DONE; ! }) (define_expand "beq" [(set (pc) *************** *** 3620,3630 **** (match_operand:SI 2 "reg_or_8bit_operand" "") (match_operand:SI 3 "reg_or_8bit_operand" "")))] "" - " { if ((operands[1] = alpha_emit_conditional_move (operands[1], SImode)) == 0) FAIL; ! }") (define_expand "movdicc" [(set (match_operand:DI 0 "register_operand" "") --- 4116,4125 ---- (match_operand:SI 2 "reg_or_8bit_operand" "") (match_operand:SI 3 "reg_or_8bit_operand" "")))] "" { if ((operands[1] = alpha_emit_conditional_move (operands[1], SImode)) == 0) FAIL; ! }) (define_expand "movdicc" [(set (match_operand:DI 0 "register_operand" "") *************** *** 3632,3642 **** (match_operand:DI 2 "reg_or_8bit_operand" "") (match_operand:DI 3 "reg_or_8bit_operand" "")))] "" - " { if ((operands[1] = alpha_emit_conditional_move (operands[1], DImode)) == 0) FAIL; ! }") (define_expand "movsfcc" [(set (match_operand:SF 0 "register_operand" "") --- 4127,4136 ---- (match_operand:DI 2 "reg_or_8bit_operand" "") (match_operand:DI 3 "reg_or_8bit_operand" "")))] "" { if ((operands[1] = alpha_emit_conditional_move (operands[1], DImode)) == 0) FAIL; ! }) (define_expand "movsfcc" [(set (match_operand:SF 0 "register_operand" "") *************** *** 3644,3654 **** (match_operand:SF 2 "reg_or_8bit_operand" "") (match_operand:SF 3 "reg_or_8bit_operand" "")))] "" - " { if ((operands[1] = alpha_emit_conditional_move (operands[1], SFmode)) == 0) FAIL; ! }") (define_expand "movdfcc" [(set (match_operand:DF 0 "register_operand" "") --- 4138,4147 ---- (match_operand:SF 2 "reg_or_8bit_operand" "") (match_operand:SF 3 "reg_or_8bit_operand" "")))] "" { if ((operands[1] = alpha_emit_conditional_move (operands[1], SFmode)) == 0) FAIL; ! }) (define_expand "movdfcc" [(set (match_operand:DF 0 "register_operand" "") *************** *** 3656,3666 **** (match_operand:DF 2 "reg_or_8bit_operand" "") (match_operand:DF 3 "reg_or_8bit_operand" "")))] "" - " { if ((operands[1] = alpha_emit_conditional_move (operands[1], DFmode)) == 0) FAIL; ! }") ;; These define_split definitions are used in cases when comparisons have ;; not be stated in the correct way and we need to reverse the second --- 4149,4158 ---- (match_operand:DF 2 "reg_or_8bit_operand" "") (match_operand:DF 3 "reg_or_8bit_operand" "")))] "" { if ((operands[1] = alpha_emit_conditional_move (operands[1], DFmode)) == 0) FAIL; ! }) ;; These define_split definitions are used in cases when comparisons have ;; not be stated in the correct way and we need to reverse the second *************** *** 3692,3699 **** [(set (match_dup 6) (match_dup 7)) (set (match_dup 0) (if_then_else:DI (match_dup 8) (match_dup 4) (match_dup 5)))] ! " ! { enum rtx_code code = GET_CODE (operands[1]); int unsignedp = (code == GEU || code == LEU || code == GTU || code == LTU); /* If we are comparing for equality with a constant and that constant --- 4184,4191 ---- [(set (match_dup 6) (match_dup 7)) (set (match_dup 0) (if_then_else:DI (match_dup 8) (match_dup 4) (match_dup 5)))] ! { ! enum rtx_code code = GET_CODE (operands[1]); int unsignedp = (code == GEU || code == LEU || code == GTU || code == LTU); /* If we are comparing for equality with a constant and that constant *************** *** 3734,3740 **** operands[2], operands[3]); operands[8] = gen_rtx_EQ (VOIDmode, operands[6], const0_rtx); } ! }") (define_split [(set (match_operand:DI 0 "register_operand" "") --- 4226,4232 ---- operands[2], operands[3]); operands[8] = gen_rtx_EQ (VOIDmode, operands[6], const0_rtx); } ! }) (define_split [(set (match_operand:DI 0 "register_operand" "") *************** *** 3750,3757 **** [(set (match_dup 6) (match_dup 7)) (set (match_dup 0) (if_then_else:DI (match_dup 8) (match_dup 4) (match_dup 5)))] ! " ! { enum rtx_code code = GET_CODE (operands[1]); int unsignedp = (code == GEU || code == LEU || code == GTU || code == LTU); rtx tem; --- 4242,4249 ---- [(set (match_dup 6) (match_dup 7)) (set (match_dup 0) (if_then_else:DI (match_dup 8) (match_dup 4) (match_dup 5)))] ! { ! enum rtx_code code = GET_CODE (operands[1]); int unsignedp = (code == GEU || code == LEU || code == GTU || code == LTU); rtx tem; *************** *** 3759,3765 **** && ! (extended_count (operands[2], DImode, unsignedp) >= 1 && extended_count (operands[3], DImode, unsignedp) >= 1))) FAIL; ! if (GET_CODE (operands[3]) == CONST_INT) tem = gen_rtx_PLUS (SImode, operands[2], GEN_INT (- INTVAL (operands[3]))); --- 4251,4257 ---- && ! (extended_count (operands[2], DImode, unsignedp) >= 1 && extended_count (operands[3], DImode, unsignedp) >= 1))) FAIL; ! if (GET_CODE (operands[3]) == CONST_INT) tem = gen_rtx_PLUS (SImode, operands[2], GEN_INT (- INTVAL (operands[3]))); *************** *** 3769,3775 **** operands[7] = gen_rtx_SIGN_EXTEND (DImode, tem); operands[8] = gen_rtx_fmt_ee (GET_CODE (operands[1]), VOIDmode, operands[6], const0_rtx); ! }") (define_split [(set (pc) --- 4261,4267 ---- operands[7] = gen_rtx_SIGN_EXTEND (DImode, tem); operands[8] = gen_rtx_fmt_ee (GET_CODE (operands[1]), VOIDmode, operands[6], const0_rtx); ! }) (define_split [(set (pc) *************** *** 3783,3790 **** "operands[3] != const0_rtx" [(set (match_dup 4) (match_dup 5)) (set (pc) (if_then_else (match_dup 6) (label_ref (match_dup 0)) (pc)))] ! " ! { enum rtx_code code = GET_CODE (operands[1]); int unsignedp = (code == GEU || code == LEU || code == GTU || code == LTU); if (code == NE || code == EQ --- 4275,4282 ---- "operands[3] != const0_rtx" [(set (match_dup 4) (match_dup 5)) (set (pc) (if_then_else (match_dup 6) (label_ref (match_dup 0)) (pc)))] ! { ! enum rtx_code code = GET_CODE (operands[1]); int unsignedp = (code == GEU || code == LEU || code == GTU || code == LTU); if (code == NE || code == EQ *************** *** 3812,3818 **** operands[2], operands[3]); operands[6] = gen_rtx_EQ (VOIDmode, operands[4], const0_rtx); } ! }") (define_split [(set (pc) --- 4304,4310 ---- operands[2], operands[3]); operands[6] = gen_rtx_EQ (VOIDmode, operands[4], const0_rtx); } ! }) (define_split [(set (pc) *************** *** 3827,3845 **** && (GET_CODE (operands[1]) == EQ || GET_CODE (operands[1]) == NE)" [(set (match_dup 4) (match_dup 5)) (set (pc) (if_then_else (match_dup 6) (label_ref (match_dup 0)) (pc)))] ! " ! { rtx tem; if (GET_CODE (operands[3]) == CONST_INT) tem = gen_rtx_PLUS (SImode, operands[2], GEN_INT (- INTVAL (operands[3]))); else tem = gen_rtx_MINUS (SImode, operands[2], operands[3]); ! operands[5] = gen_rtx_SIGN_EXTEND (DImode, tem); operands[6] = gen_rtx_fmt_ee (GET_CODE (operands[1]), VOIDmode, operands[4], const0_rtx); ! }") ;; We can convert such things as "a > 0xffff" to "t = a & ~ 0xffff; t != 0". ;; This eliminates one, and sometimes two, insns when the AND can be done --- 4319,4337 ---- && (GET_CODE (operands[1]) == EQ || GET_CODE (operands[1]) == NE)" [(set (match_dup 4) (match_dup 5)) (set (pc) (if_then_else (match_dup 6) (label_ref (match_dup 0)) (pc)))] ! { ! rtx tem; if (GET_CODE (operands[3]) == CONST_INT) tem = gen_rtx_PLUS (SImode, operands[2], GEN_INT (- INTVAL (operands[3]))); else tem = gen_rtx_MINUS (SImode, operands[2], operands[3]); ! operands[5] = gen_rtx_SIGN_EXTEND (DImode, tem); operands[6] = gen_rtx_fmt_ee (GET_CODE (operands[1]), VOIDmode, operands[4], const0_rtx); ! }) ;; We can convert such things as "a > 0xffff" to "t = a & ~ 0xffff; t != 0". ;; This eliminates one, and sometimes two, insns when the AND can be done *************** *** 3857,3870 **** && extended_count (operands[2], DImode, 1) > 0))" [(set (match_dup 4) (and:DI (match_dup 2) (match_dup 5))) (set (match_dup 0) (match_dup 6))] - " { operands[5] = GEN_INT (~ INTVAL (operands[3])); operands[6] = gen_rtx_fmt_ee (((GET_CODE (operands[1]) == GTU || GET_CODE (operands[1]) == GT) ? NE : EQ), DImode, operands[4], const0_rtx); ! }") ;; Prefer to use cmp and arithmetic when possible instead of a cmove. --- 4349,4361 ---- && extended_count (operands[2], DImode, 1) > 0))" [(set (match_dup 4) (and:DI (match_dup 2) (match_dup 5))) (set (match_dup 0) (match_dup 6))] { operands[5] = GEN_INT (~ INTVAL (operands[3])); operands[6] = gen_rtx_fmt_ee (((GET_CODE (operands[1]) == GTU || GET_CODE (operands[1]) == GT) ? NE : EQ), DImode, operands[4], const0_rtx); ! }) ;; Prefer to use cmp and arithmetic when possible instead of a cmove. *************** *** 3877,3890 **** (match_operand 4 "const_int_operand" "")))] "" [(const_int 0)] - " { if (alpha_split_conditional_move (GET_CODE (operands[1]), operands[0], operands[2], operands[3], operands[4])) DONE; else FAIL; ! }") ;; ??? Why combine is allowed to create such non-canonical rtl, I don't know. ;; Oh well, we match it in movcc, so it must be partially our fault. --- 4368,4380 ---- (match_operand 4 "const_int_operand" "")))] "" [(const_int 0)] { if (alpha_split_conditional_move (GET_CODE (operands[1]), operands[0], operands[2], operands[3], operands[4])) DONE; else FAIL; ! }) ;; ??? Why combine is allowed to create such non-canonical rtl, I don't know. ;; Oh well, we match it in movcc, so it must be partially our fault. *************** *** 3897,3903 **** (match_operand 4 "const_int_operand" "")))] "" [(const_int 0)] - " { if (alpha_split_conditional_move (swap_condition (GET_CODE (operands[1])), operands[0], operands[2], operands[3], --- 4387,4392 ---- *************** *** 3905,3911 **** DONE; else FAIL; ! }") (define_insn_and_split "*cmp_sadd_di" [(set (match_operand:DI 0 "register_operand" "=r") --- 4394,4400 ---- DONE; else FAIL; ! }) (define_insn_and_split "*cmp_sadd_di" [(set (match_operand:DI 0 "register_operand" "=r") *************** *** 3925,3937 **** (set (match_dup 0) (plus:DI (mult:DI (match_dup 5) (match_dup 3)) (match_dup 4)))] - " { if (! no_new_pseudos) operands[5] = gen_reg_rtx (DImode); else if (reg_overlap_mentioned_p (operands[5], operands[4])) operands[5] = operands[0]; ! }") (define_insn_and_split "*cmp_sadd_si" [(set (match_operand:SI 0 "register_operand" "=r") --- 4414,4425 ---- (set (match_dup 0) (plus:DI (mult:DI (match_dup 5) (match_dup 3)) (match_dup 4)))] { if (! no_new_pseudos) operands[5] = gen_reg_rtx (DImode); else if (reg_overlap_mentioned_p (operands[5], operands[4])) operands[5] = operands[0]; ! }) (define_insn_and_split "*cmp_sadd_si" [(set (match_operand:SI 0 "register_operand" "=r") *************** *** 3951,3963 **** (set (match_dup 0) (plus:SI (mult:SI (match_dup 5) (match_dup 3)) (match_dup 4)))] - " { if (! no_new_pseudos) operands[5] = gen_reg_rtx (DImode); else if (reg_overlap_mentioned_p (operands[5], operands[4])) operands[5] = operands[0]; ! }") (define_insn_and_split "*cmp_sadd_sidi" [(set (match_operand:DI 0 "register_operand" "=r") --- 4439,4450 ---- (set (match_dup 0) (plus:SI (mult:SI (match_dup 5) (match_dup 3)) (match_dup 4)))] { if (! no_new_pseudos) operands[5] = gen_reg_rtx (DImode); else if (reg_overlap_mentioned_p (operands[5], operands[4])) operands[5] = operands[0]; ! }) (define_insn_and_split "*cmp_sadd_sidi" [(set (match_operand:DI 0 "register_operand" "=r") *************** *** 3978,3990 **** (set (match_dup 0) (sign_extend:DI (plus:SI (mult:SI (match_dup 5) (match_dup 3)) (match_dup 4))))] - " { if (! no_new_pseudos) operands[5] = gen_reg_rtx (DImode); else if (reg_overlap_mentioned_p (operands[5], operands[4])) operands[5] = operands[0]; ! }") (define_insn_and_split "*cmp_ssub_di" [(set (match_operand:DI 0 "register_operand" "=r") --- 4465,4476 ---- (set (match_dup 0) (sign_extend:DI (plus:SI (mult:SI (match_dup 5) (match_dup 3)) (match_dup 4))))] { if (! no_new_pseudos) operands[5] = gen_reg_rtx (DImode); else if (reg_overlap_mentioned_p (operands[5], operands[4])) operands[5] = operands[0]; ! }) (define_insn_and_split "*cmp_ssub_di" [(set (match_operand:DI 0 "register_operand" "=r") *************** *** 4004,4016 **** (set (match_dup 0) (minus:DI (mult:DI (match_dup 5) (match_dup 3)) (match_dup 4)))] - " { if (! no_new_pseudos) operands[5] = gen_reg_rtx (DImode); else if (reg_overlap_mentioned_p (operands[5], operands[4])) operands[5] = operands[0]; ! }") (define_insn_and_split "*cmp_ssub_si" [(set (match_operand:SI 0 "register_operand" "=r") --- 4490,4501 ---- (set (match_dup 0) (minus:DI (mult:DI (match_dup 5) (match_dup 3)) (match_dup 4)))] { if (! no_new_pseudos) operands[5] = gen_reg_rtx (DImode); else if (reg_overlap_mentioned_p (operands[5], operands[4])) operands[5] = operands[0]; ! }) (define_insn_and_split "*cmp_ssub_si" [(set (match_operand:SI 0 "register_operand" "=r") *************** *** 4030,4042 **** (set (match_dup 0) (minus:SI (mult:SI (match_dup 5) (match_dup 3)) (match_dup 4)))] - " { if (! no_new_pseudos) operands[5] = gen_reg_rtx (DImode); else if (reg_overlap_mentioned_p (operands[5], operands[4])) operands[5] = operands[0]; ! }") (define_insn_and_split "*cmp_ssub_sidi" [(set (match_operand:DI 0 "register_operand" "=r") --- 4515,4526 ---- (set (match_dup 0) (minus:SI (mult:SI (match_dup 5) (match_dup 3)) (match_dup 4)))] { if (! no_new_pseudos) operands[5] = gen_reg_rtx (DImode); else if (reg_overlap_mentioned_p (operands[5], operands[4])) operands[5] = operands[0]; ! }) (define_insn_and_split "*cmp_ssub_sidi" [(set (match_operand:DI 0 "register_operand" "=r") *************** *** 4057,4135 **** (set (match_dup 0) (sign_extend:DI (minus:SI (mult:SI (match_dup 5) (match_dup 3)) (match_dup 4))))] - " { if (! no_new_pseudos) operands[5] = gen_reg_rtx (DImode); else if (reg_overlap_mentioned_p (operands[5], operands[4])) operands[5] = operands[0]; ! }") ;; Here are the CALL and unconditional branch insns. Calls on NT and OSF ;; work differently, so we have different patterns for each. (define_expand "call" [(use (match_operand:DI 0 "" "")) (use (match_operand 1 "" "")) (use (match_operand 2 "" "")) (use (match_operand 3 "" ""))] "" ! " ! { if (TARGET_WINDOWS_NT) emit_call_insn (gen_call_nt (operands[0], operands[1])); ! else if (TARGET_OPEN_VMS) emit_call_insn (gen_call_vms (operands[0], operands[2])); else emit_call_insn (gen_call_osf (operands[0], operands[1])); - DONE; ! }") (define_expand "sibcall" ! [(call (mem:DI (match_operand 0 "" "")) ! (match_operand 1 "" ""))] ! "!TARGET_OPEN_VMS && !TARGET_WINDOWS_NT" ! " { if (GET_CODE (operands[0]) != MEM) abort (); operands[0] = XEXP (operands[0], 0); ! }") (define_expand "call_osf" [(parallel [(call (mem:DI (match_operand 0 "" "")) (match_operand 1 "" "")) ! (clobber (reg:DI 27)) (clobber (reg:DI 26))])] "" ! " ! { if (GET_CODE (operands[0]) != MEM) abort (); operands[0] = XEXP (operands[0], 0); ! ! if (GET_CODE (operands[0]) != SYMBOL_REF ! && ! (GET_CODE (operands[0]) == REG && REGNO (operands[0]) == 27)) ! { ! rtx tem = gen_rtx_REG (DImode, 27); ! emit_move_insn (tem, operands[0]); ! operands[0] = tem; ! } ! }") (define_expand "call_nt" [(parallel [(call (mem:DI (match_operand 0 "" "")) (match_operand 1 "" "")) (clobber (reg:DI 26))])] "" ! " ! { if (GET_CODE (operands[0]) != MEM) abort (); operands[0] = XEXP (operands[0], 0); if (GET_CODE (operands[0]) != SYMBOL_REF && GET_CODE (operands[0]) != REG) operands[0] = force_reg (DImode, operands[0]); ! }") ;; ;; call openvms/alpha --- 4541,4647 ---- (set (match_dup 0) (sign_extend:DI (minus:SI (mult:SI (match_dup 5) (match_dup 3)) (match_dup 4))))] { if (! no_new_pseudos) operands[5] = gen_reg_rtx (DImode); else if (reg_overlap_mentioned_p (operands[5], operands[4])) operands[5] = operands[0]; ! }) ;; Here are the CALL and unconditional branch insns. Calls on NT and OSF ;; work differently, so we have different patterns for each. + ;; On Unicos/Mk a call information word (CIW) must be generated for each + ;; call. The CIW contains information about arguments passed in registers + ;; and is stored in the caller's SSIB. Its offset relative to the beginning + ;; of the SSIB is passed in $25. Handling this properly is quite complicated + ;; in the presence of inlining since the CIWs for calls performed by the + ;; inlined function must be stored in the SSIB of the function it is inlined + ;; into as well. We encode the CIW in an unspec and append it to the list + ;; of the CIWs for the current function only when the instruction for loading + ;; $25 is generated. + (define_expand "call" [(use (match_operand:DI 0 "" "")) (use (match_operand 1 "" "")) (use (match_operand 2 "" "")) (use (match_operand 3 "" ""))] "" ! { ! if (TARGET_ABI_WINDOWS_NT) emit_call_insn (gen_call_nt (operands[0], operands[1])); ! else if (TARGET_ABI_OPEN_VMS) emit_call_insn (gen_call_vms (operands[0], operands[2])); + else if (TARGET_ABI_UNICOSMK) + emit_call_insn (gen_call_umk (operands[0], operands[2])); else emit_call_insn (gen_call_osf (operands[0], operands[1])); DONE; ! }) (define_expand "sibcall" ! [(parallel [(call (mem:DI (match_operand 0 "" "")) ! (match_operand 1 "" "")) ! (unspec [(reg:DI 29)] UNSPEC_SIBCALL)])] ! "TARGET_ABI_OSF" { if (GET_CODE (operands[0]) != MEM) abort (); operands[0] = XEXP (operands[0], 0); ! }) (define_expand "call_osf" [(parallel [(call (mem:DI (match_operand 0 "" "")) (match_operand 1 "" "")) ! (use (reg:DI 29)) (clobber (reg:DI 26))])] "" ! { ! if (GET_CODE (operands[0]) != MEM) abort (); operands[0] = XEXP (operands[0], 0); ! if (! call_operand (operands[0], Pmode)) ! operands[0] = copy_to_mode_reg (Pmode, operands[0]); ! }) (define_expand "call_nt" [(parallel [(call (mem:DI (match_operand 0 "" "")) (match_operand 1 "" "")) (clobber (reg:DI 26))])] "" ! { ! if (GET_CODE (operands[0]) != MEM) abort (); operands[0] = XEXP (operands[0], 0); if (GET_CODE (operands[0]) != SYMBOL_REF && GET_CODE (operands[0]) != REG) operands[0] = force_reg (DImode, operands[0]); ! }) ! ! ;; Calls on Unicos/Mk are always indirect. ! ;; op 0: symbol ref for called function ! ;; op 1: CIW for $25 represented by an unspec ! ! (define_expand "call_umk" ! [(parallel [(call (mem:DI (match_operand 0 "" "")) ! (match_operand 1 "" "")) ! (use (reg:DI 25)) ! (clobber (reg:DI 26))])] ! "" ! { ! if (GET_CODE (operands[0]) != MEM) ! abort (); ! ! /* Always load the address of the called function into a register; ! load the CIW in $25. */ ! ! operands[0] = XEXP (operands[0], 0); ! if (GET_CODE (operands[0]) != REG) ! operands[0] = force_reg (DImode, operands[0]); ! ! emit_move_insn (gen_rtx_REG (DImode, 25), operands[1]); ! }) ;; ;; call openvms/alpha *************** *** 4144,4151 **** (use (reg:DI 26)) (clobber (reg:DI 27))])] "" ! " ! { if (GET_CODE (operands[0]) != MEM) abort (); operands[0] = XEXP (operands[0], 0); --- 4656,4663 ---- (use (reg:DI 26)) (clobber (reg:DI 27))])] "" ! { ! if (GET_CODE (operands[0]) != MEM) abort (); operands[0] = XEXP (operands[0], 0); *************** *** 4170,4176 **** operands[2] = operands[0]; } ! }") (define_expand "call_value" [(use (match_operand 0 "" "")) --- 4682,4688 ---- operands[2] = operands[0]; } ! }) (define_expand "call_value" [(use (match_operand 0 "" "")) *************** *** 4179,4229 **** (use (match_operand 3 "" "")) (use (match_operand 4 "" ""))] "" ! " ! { if (TARGET_WINDOWS_NT) emit_call_insn (gen_call_value_nt (operands[0], operands[1], operands[2])); ! else if (TARGET_OPEN_VMS) emit_call_insn (gen_call_value_vms (operands[0], operands[1], operands[3])); else emit_call_insn (gen_call_value_osf (operands[0], operands[1], operands[2])); DONE; ! }") (define_expand "sibcall_value" ! [(set (match_operand 0 "" "") ! (call (mem:DI (match_operand 1 "" "")) ! (match_operand 2 "" "")))] ! "!TARGET_OPEN_VMS && !TARGET_WINDOWS_NT" ! " { if (GET_CODE (operands[1]) != MEM) abort (); operands[1] = XEXP (operands[1], 0); ! }") (define_expand "call_value_osf" [(parallel [(set (match_operand 0 "" "") (call (mem:DI (match_operand 1 "" "")) (match_operand 2 "" ""))) ! (clobber (reg:DI 27)) (clobber (reg:DI 26))])] "" ! " ! { if (GET_CODE (operands[1]) != MEM) abort (); operands[1] = XEXP (operands[1], 0); ! ! if (GET_CODE (operands[1]) != SYMBOL_REF ! && ! (GET_CODE (operands[1]) == REG && REGNO (operands[1]) == 27)) ! { ! rtx tem = gen_rtx_REG (DImode, 27); ! emit_move_insn (tem, operands[1]); ! operands[1] = tem; ! } ! }") (define_expand "call_value_nt" [(parallel [(set (match_operand 0 "" "") --- 4691,4738 ---- (use (match_operand 3 "" "")) (use (match_operand 4 "" ""))] "" ! { ! if (TARGET_ABI_WINDOWS_NT) emit_call_insn (gen_call_value_nt (operands[0], operands[1], operands[2])); ! else if (TARGET_ABI_OPEN_VMS) emit_call_insn (gen_call_value_vms (operands[0], operands[1], operands[3])); + else if (TARGET_ABI_UNICOSMK) + emit_call_insn (gen_call_value_umk (operands[0], operands[1], + operands[3])); else emit_call_insn (gen_call_value_osf (operands[0], operands[1], operands[2])); DONE; ! }) (define_expand "sibcall_value" ! [(parallel [(set (match_operand 0 "" "") ! (call (mem:DI (match_operand 1 "" "")) ! (match_operand 2 "" ""))) ! (unspec [(reg:DI 29)] UNSPEC_SIBCALL)])] ! "TARGET_ABI_OSF" { if (GET_CODE (operands[1]) != MEM) abort (); operands[1] = XEXP (operands[1], 0); ! }) (define_expand "call_value_osf" [(parallel [(set (match_operand 0 "" "") (call (mem:DI (match_operand 1 "" "")) (match_operand 2 "" ""))) ! (use (reg:DI 29)) (clobber (reg:DI 26))])] "" ! { ! if (GET_CODE (operands[1]) != MEM) abort (); operands[1] = XEXP (operands[1], 0); ! if (! call_operand (operands[1], Pmode)) ! operands[1] = copy_to_mode_reg (Pmode, operands[1]); ! }) (define_expand "call_value_nt" [(parallel [(set (match_operand 0 "" "") *************** *** 4231,4244 **** (match_operand 2 "" ""))) (clobber (reg:DI 26))])] "" ! " ! { if (GET_CODE (operands[1]) != MEM) abort (); operands[1] = XEXP (operands[1], 0); if (GET_CODE (operands[1]) != SYMBOL_REF && GET_CODE (operands[1]) != REG) operands[1] = force_reg (DImode, operands[1]); ! }") (define_expand "call_value_vms" [(parallel [(set (match_operand 0 "" "") --- 4740,4753 ---- (match_operand 2 "" ""))) (clobber (reg:DI 26))])] "" ! { ! if (GET_CODE (operands[1]) != MEM) abort (); operands[1] = XEXP (operands[1], 0); if (GET_CODE (operands[1]) != SYMBOL_REF && GET_CODE (operands[1]) != REG) operands[1] = force_reg (DImode, operands[1]); ! }) (define_expand "call_value_vms" [(parallel [(set (match_operand 0 "" "") *************** *** 4249,4256 **** (use (reg:DI 26)) (clobber (reg:DI 27))])] "" ! " ! { if (GET_CODE (operands[1]) != MEM) abort (); operands[1] = XEXP (operands[1], 0); --- 4758,4765 ---- (use (reg:DI 26)) (clobber (reg:DI 27))])] "" ! { ! if (GET_CODE (operands[1]) != MEM) abort (); operands[1] = XEXP (operands[1], 0); *************** *** 4274,4287 **** gen_rtx_MEM (Pmode, plus_constant (operands[1], 8))); operands[3] = operands[1]; } ! }") (define_insn "*call_osf_1_noreturn" ! [(call (mem:DI (match_operand:DI 0 "call_operand" "c,R,i")) (match_operand 1 "" "")) ! (clobber (reg:DI 27)) (clobber (reg:DI 26))] ! "! TARGET_WINDOWS_NT && ! TARGET_OPEN_VMS && find_reg_note (insn, REG_NORETURN, NULL_RTX)" "@ jsr $26,($27),0 --- 4783,4908 ---- gen_rtx_MEM (Pmode, plus_constant (operands[1], 8))); operands[3] = operands[1]; } ! }) ! ! (define_expand "call_value_umk" ! [(parallel [(set (match_operand 0 "" "") ! (call (mem:DI (match_operand 1 "" "")) ! (match_operand 2 "" ""))) ! (use (reg:DI 25)) ! (clobber (reg:DI 26))])] ! "" ! { ! if (GET_CODE (operands[1]) != MEM) ! abort (); ! ! operands[1] = XEXP (operands[1], 0); ! if (GET_CODE (operands[1]) != REG) ! operands[1] = force_reg (DImode, operands[1]); ! ! emit_move_insn (gen_rtx_REG (DImode, 25), operands[2]); ! }) ! ! (define_insn "*call_osf_1_er" ! [(call (mem:DI (match_operand:DI 0 "call_operand" "c,R,s")) ! (match_operand 1 "" "")) ! (use (reg:DI 29)) ! (clobber (reg:DI 26))] ! "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF" ! "@ ! jsr $26,(%0),0\;ldah $29,0($26)\t\t!gpdisp!%*\;lda $29,0($29)\t\t!gpdisp!%* ! bsr $26,$%0..ng ! ldq $27,%0($29)\t\t!literal!%#\;jsr $26,($27),%0\t\t!lituse_jsr!%#\;ldah $29,0($26)\t\t!gpdisp!%*\;lda $29,0($29)\t\t!gpdisp!%*" ! [(set_attr "type" "jsr") ! (set_attr "length" "12,*,16")]) ! ! ;; We must use peep2 instead of a split because we need accurate life ! ;; information for $gp. Consider the case of { bar(); while (1); }. ! (define_peephole2 ! [(parallel [(call (mem:DI (match_operand:DI 0 "call_operand" "")) ! (match_operand 1 "" "")) ! (use (reg:DI 29)) ! (clobber (reg:DI 26))])] ! "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF && reload_completed ! && ! current_file_function_operand (operands[0], Pmode) ! && peep2_regno_dead_p (1, 29)" ! [(parallel [(call (mem:DI (match_dup 2)) ! (match_dup 1)) ! (set (reg:DI 26) (plus:DI (pc) (const_int 4))) ! (unspec_volatile [(reg:DI 29)] UNSPECV_BLOCKAGE) ! (use (match_dup 0)) ! (use (match_dup 3))])] ! { ! if (CONSTANT_P (operands[0])) ! { ! operands[2] = gen_rtx_REG (Pmode, 27); ! operands[3] = GEN_INT (alpha_next_sequence_number++); ! emit_insn (gen_movdi_er_high_g (operands[2], pic_offset_table_rtx, ! operands[0], operands[3])); ! } ! else ! { ! operands[2] = operands[0]; ! operands[0] = const0_rtx; ! operands[3] = const0_rtx; ! } ! }) ! ! (define_peephole2 ! [(parallel [(call (mem:DI (match_operand:DI 0 "call_operand" "")) ! (match_operand 1 "" "")) ! (use (reg:DI 29)) ! (clobber (reg:DI 26))])] ! "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF && reload_completed ! && ! current_file_function_operand (operands[0], Pmode) ! && ! peep2_regno_dead_p (1, 29)" ! [(parallel [(call (mem:DI (match_dup 2)) ! (match_dup 1)) ! (set (reg:DI 26) (plus:DI (pc) (const_int 4))) ! (unspec_volatile [(reg:DI 29)] UNSPECV_BLOCKAGE) ! (use (match_dup 0)) ! (use (match_dup 4))]) ! (set (reg:DI 29) ! (unspec_volatile:DI [(reg:DI 26) (match_dup 3)] UNSPECV_LDGP1)) ! (set (reg:DI 29) ! (unspec:DI [(reg:DI 29) (match_dup 3)] UNSPEC_LDGP2))] ! { ! if (CONSTANT_P (operands[0])) ! { ! operands[2] = gen_rtx_REG (Pmode, 27); ! operands[4] = GEN_INT (alpha_next_sequence_number++); ! emit_insn (gen_movdi_er_high_g (operands[2], pic_offset_table_rtx, ! operands[0], operands[4])); ! } ! else ! { ! operands[2] = operands[0]; ! operands[0] = const0_rtx; ! operands[4] = const0_rtx; ! } ! operands[3] = GEN_INT (alpha_next_sequence_number++); ! }) ! ! ;; We add a blockage unspec_volatile to prevent insns from moving down ! ;; from above the call to in between the call and the ldah gpdisp. ! ! (define_insn "*call_osf_2_er" ! [(call (mem:DI (match_operand:DI 0 "register_operand" "c")) ! (match_operand 1 "" "")) ! (set (reg:DI 26) (plus:DI (pc) (const_int 4))) ! (unspec_volatile [(reg:DI 29)] UNSPECV_BLOCKAGE) ! (use (match_operand 2 "" "")) ! (use (match_operand 3 "const_int_operand" ""))] ! "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF" ! "jsr $26,(%0),%2%J3" ! [(set_attr "type" "jsr")]) (define_insn "*call_osf_1_noreturn" ! [(call (mem:DI (match_operand:DI 0 "call_operand" "c,R,s")) (match_operand 1 "" "")) ! (use (reg:DI 29)) (clobber (reg:DI 26))] ! "! TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF && find_reg_note (insn, REG_NORETURN, NULL_RTX)" "@ jsr $26,($27),0 *************** *** 4289,4344 **** jsr $26,%0" [(set_attr "type" "jsr") (set_attr "length" "*,*,8")]) ! (define_insn "*call_osf_1" ! [(call (mem:DI (match_operand:DI 0 "call_operand" "c,R,i")) (match_operand 1 "" "")) ! (clobber (reg:DI 27)) (clobber (reg:DI 26))] ! "! TARGET_WINDOWS_NT && ! TARGET_OPEN_VMS" "@ jsr $26,($27),0\;ldgp $29,0($26) bsr $26,$%0..ng jsr $26,%0\;ldgp $29,0($26)" [(set_attr "type" "jsr") (set_attr "length" "12,*,16")]) ! (define_insn "*sibcall_osf_1" ! [(call (mem:DI (match_operand:DI 0 "call_operand" "R,i")) ! (match_operand 1 "" ""))] ! "! TARGET_WINDOWS_NT && ! TARGET_OPEN_VMS" "@ br $31,$%0..ng ! jmp $31,%0" [(set_attr "type" "jsr") (set_attr "length" "*,8")]) (define_insn "*call_nt_1" ! [(call (mem:DI (match_operand:DI 0 "call_operand" "r,R,i")) (match_operand 1 "" "")) (clobber (reg:DI 26))] ! "TARGET_WINDOWS_NT" "@ jsr $26,(%0) bsr $26,%0 jsr $26,%0" [(set_attr "type" "jsr") (set_attr "length" "*,*,12")]) ! (define_insn "*call_vms_1" ! [(call (mem:DI (match_operand:DI 0 "call_operand" "r,i")) (match_operand 1 "" "")) (use (match_operand:DI 2 "nonimmediate_operand" "r,m")) (use (reg:DI 25)) (use (reg:DI 26)) (clobber (reg:DI 27))] ! "TARGET_OPEN_VMS" "@ mov %2,$27\;jsr $26,0\;ldq $27,0($29) ldq $27,%2\;jsr $26,%0\;ldq $27,0($29)" [(set_attr "type" "jsr") (set_attr "length" "12,16")]) ;; Call subroutine returning any type. (define_expand "untyped_call" --- 4910,4988 ---- jsr $26,%0" [(set_attr "type" "jsr") (set_attr "length" "*,*,8")]) ! (define_insn "*call_osf_1" ! [(call (mem:DI (match_operand:DI 0 "call_operand" "c,R,s")) (match_operand 1 "" "")) ! (use (reg:DI 29)) (clobber (reg:DI 26))] ! "! TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF" "@ jsr $26,($27),0\;ldgp $29,0($26) bsr $26,$%0..ng jsr $26,%0\;ldgp $29,0($26)" [(set_attr "type" "jsr") (set_attr "length" "12,*,16")]) ! ! ;; Note that the DEC assembler expands "jmp foo" with $at, which ! ;; doesn't do what we want. ! (define_insn "*sibcall_osf_1_er" ! [(call (mem:DI (match_operand:DI 0 "symbolic_operand" "R,s")) ! (match_operand 1 "" "")) ! (unspec [(reg:DI 29)] UNSPEC_SIBCALL)] ! "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF" ! "@ ! br $31,$%0..ng ! ldq $27,%0($29)\t\t!literal!%#\;jmp $31,($27),%0\t\t!lituse_jsr!%#" ! [(set_attr "type" "jsr") ! (set_attr "length" "*,8")]) ! (define_insn "*sibcall_osf_1" ! [(call (mem:DI (match_operand:DI 0 "symbolic_operand" "R,s")) ! (match_operand 1 "" "")) ! (unspec [(reg:DI 29)] UNSPEC_SIBCALL)] ! "! TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF" "@ br $31,$%0..ng ! lda $27,%0\;jmp $31,($27),%0" [(set_attr "type" "jsr") (set_attr "length" "*,8")]) (define_insn "*call_nt_1" ! [(call (mem:DI (match_operand:DI 0 "call_operand" "r,R,s")) (match_operand 1 "" "")) (clobber (reg:DI 26))] ! "TARGET_ABI_WINDOWS_NT" "@ jsr $26,(%0) bsr $26,%0 jsr $26,%0" [(set_attr "type" "jsr") (set_attr "length" "*,*,12")]) ! (define_insn "*call_vms_1" ! [(call (mem:DI (match_operand:DI 0 "call_operand" "r,s")) (match_operand 1 "" "")) (use (match_operand:DI 2 "nonimmediate_operand" "r,m")) (use (reg:DI 25)) (use (reg:DI 26)) (clobber (reg:DI 27))] ! "TARGET_ABI_OPEN_VMS" "@ mov %2,$27\;jsr $26,0\;ldq $27,0($29) ldq $27,%2\;jsr $26,%0\;ldq $27,0($29)" [(set_attr "type" "jsr") (set_attr "length" "12,16")]) + (define_insn "*call_umk_1" + [(call (mem:DI (match_operand:DI 0 "call_operand" "r")) + (match_operand 1 "" "")) + (use (reg:DI 25)) + (clobber (reg:DI 26))] + "TARGET_ABI_UNICOSMK" + "jsr $26,(%0)" + [(set_attr "type" "jsr")]) + ;; Call subroutine returning any type. (define_expand "untyped_call" *************** *** 4347,4353 **** (match_operand 1 "" "") (match_operand 2 "" "")])] "" - " { int i; --- 4991,4996 ---- *************** *** 4366,4378 **** emit_insn (gen_blockage ()); DONE; ! }") ;; UNSPEC_VOLATILE is considered to use and clobber all hard registers and ;; all of memory. This blocks insns from being moved across this point. (define_insn "blockage" ! [(unspec_volatile [(const_int 0)] 1)] "" "" [(set_attr "length" "0")]) --- 5009,5021 ---- emit_insn (gen_blockage ()); DONE; ! }) ;; UNSPEC_VOLATILE is considered to use and clobber all hard registers and ;; all of memory. This blocks insns from being moved across this point. (define_insn "blockage" ! [(unspec_volatile [(const_int 0)] UNSPECV_BLOCKAGE)] "" "" [(set_attr "length" "0")]) *************** *** 4402,4556 **** [(set_attr "type" "ibr")]) (define_expand "tablejump" ! [(use (match_operand:SI 0 "register_operand" "")) ! (use (match_operand:SI 1 "" ""))] "" - " { ! if (TARGET_WINDOWS_NT) ! emit_jump_insn (gen_tablejump_nt (operands[0], operands[1])); ! else if (TARGET_OPEN_VMS) ! emit_jump_insn (gen_tablejump_vms (operands[0], operands[1])); ! else ! emit_jump_insn (gen_tablejump_osf (operands[0], operands[1])); ! ! DONE; ! }") ! ! (define_expand "tablejump_osf" ! [(set (match_dup 3) ! (sign_extend:DI (match_operand:SI 0 "register_operand" ""))) ! (parallel [(set (pc) ! (plus:DI (match_dup 3) ! (label_ref (match_operand 1 "" "")))) ! (clobber (match_scratch:DI 2 "=r"))])] ! "" ! " ! { operands[3] = gen_reg_rtx (DImode); }") ! ! (define_expand "tablejump_nt" ! [(set (match_dup 3) ! (sign_extend:DI (match_operand:SI 0 "register_operand" ""))) ! (parallel [(set (pc) ! (match_dup 3)) ! (use (label_ref (match_operand 1 "" "")))])] ! "" ! " ! { operands[3] = gen_reg_rtx (DImode); }") ! ! ;; ! ;; tablejump, openVMS way ! ;; op 0: offset ! ;; op 1: label preceding jump-table ! ;; ! (define_expand "tablejump_vms" ! [(set (match_dup 2) ! (match_operand:DI 0 "register_operand" "")) ! (set (pc) ! (plus:DI (match_dup 2) ! (label_ref (match_operand 1 "" ""))))] ! "" ! " ! { operands[2] = gen_reg_rtx (DImode); }") ! ! (define_insn "*tablejump_osf_internal" ! [(set (pc) ! (plus (match_operand:DI 0 "register_operand" "r") ! (label_ref (match_operand 1 "" "")))) ! (clobber (match_scratch:DI 2 "=r"))] ! "! TARGET_WINDOWS_NT && ! TARGET_OPEN_VMS && next_active_insn (insn) != 0 ! && GET_CODE (PATTERN (next_active_insn (insn))) == ADDR_DIFF_VEC ! && PREV_INSN (next_active_insn (insn)) == operands[1]" ! "* ! { rtx best_label = 0; ! rtx jump_table_insn = next_active_insn (operands[1]); ! ! if (GET_CODE (jump_table_insn) == JUMP_INSN ! && GET_CODE (PATTERN (jump_table_insn)) == ADDR_DIFF_VEC) { ! rtx jump_table = PATTERN (jump_table_insn); ! int n_labels = XVECLEN (jump_table, 1); ! int best_count = -1; ! int i, j; ! ! for (i = 0; i < n_labels; i++) ! { ! int count = 1; ! ! for (j = i + 1; j < n_labels; j++) ! if (XEXP (XVECEXP (jump_table, 1, i), 0) ! == XEXP (XVECEXP (jump_table, 1, j), 0)) ! count++; ! ! if (count > best_count) ! best_count = count, best_label = XVECEXP (jump_table, 1, i); ! } } ! ! if (best_label) { ! operands[3] = best_label; ! return \"addq %0,$29,%2\;jmp $31,(%2),%3\"; } ! else ! return \"addq %0,$29,%2\;jmp $31,(%2),0\"; ! }" ! [(set_attr "type" "ibr") ! (set_attr "length" "8")]) ! (define_insn "*tablejump_nt_internal" [(set (pc) (match_operand:DI 0 "register_operand" "r")) ! (use (label_ref (match_operand 1 "" "")))] ! "TARGET_WINDOWS_NT && next_active_insn (insn) != 0 ! && GET_CODE (PATTERN (next_active_insn (insn))) == ADDR_DIFF_VEC ! && PREV_INSN (next_active_insn (insn)) == operands[1]" ! "* ! { rtx best_label = 0; ! rtx jump_table_insn = next_active_insn (operands[1]); ! ! if (GET_CODE (jump_table_insn) == JUMP_INSN ! && GET_CODE (PATTERN (jump_table_insn)) == ADDR_DIFF_VEC) ! { ! rtx jump_table = PATTERN (jump_table_insn); ! int n_labels = XVECLEN (jump_table, 1); ! int best_count = -1; ! int i, j; ! ! for (i = 0; i < n_labels; i++) ! { ! int count = 1; ! ! for (j = i + 1; j < n_labels; j++) ! if (XEXP (XVECEXP (jump_table, 1, i), 0) ! == XEXP (XVECEXP (jump_table, 1, j), 0)) ! count++; ! ! if (count > best_count) ! best_count = count, best_label = XVECEXP (jump_table, 1, i); ! } ! } ! ! if (best_label) ! { ! operands[2] = best_label; ! return \"jmp $31,(%0),%2\"; ! } ! else ! return \"jmp $31,(%0),0\"; ! }" [(set_attr "type" "ibr")]) ! ;; ! ;; op 0 is table offset ! ;; op 1 is table label ! ;; ! ! (define_insn "*tablejump_vms_internal" [(set (pc) ! (plus (match_operand:DI 0 "register_operand" "r") ! (label_ref (match_operand 1 "" ""))))] ! "TARGET_OPEN_VMS" "jmp $31,(%0),0" [(set_attr "type" "ibr")]) --- 5045,5087 ---- [(set_attr "type" "ibr")]) (define_expand "tablejump" ! [(parallel [(set (pc) ! (match_operand 0 "register_operand" "")) ! (use (label_ref:DI (match_operand 1 "" "")))])] "" { ! if (TARGET_ABI_WINDOWS_NT) { ! rtx dest = gen_reg_rtx (DImode); ! emit_insn (gen_extendsidi2 (dest, operands[0])); ! operands[0] = dest; } ! else if (TARGET_ABI_OSF) { ! rtx dest = gen_reg_rtx (DImode); ! emit_insn (gen_extendsidi2 (dest, operands[0])); ! emit_insn (gen_adddi3 (dest, pic_offset_table_rtx, dest)); ! operands[0] = dest; } ! }) ! (define_insn "*tablejump_osf_nt_internal" [(set (pc) (match_operand:DI 0 "register_operand" "r")) ! (use (label_ref:DI (match_operand 1 "" "")))] ! "(TARGET_ABI_OSF || TARGET_ABI_WINDOWS_NT) ! && alpha_tablejump_addr_vec (insn)" ! { ! operands[2] = alpha_tablejump_best_label (insn); ! return "jmp $31,(%0),%2"; ! } [(set_attr "type" "ibr")]) ! (define_insn "*tablejump_internal" [(set (pc) ! (match_operand:DI 0 "register_operand" "r")) ! (use (label_ref (match_operand 1 "" "")))] ! "" "jmp $31,(%0),0" [(set_attr "type" "ibr")]) *************** *** 4561,4570 **** ;; if we need a GP. Use ibr instead since it has the same EV5 scheduling ;; characteristics. (define_insn "imb" ! [(unspec_volatile [(const_int 0)] 0)] "" "call_pal 0x86" [(set_attr "type" "ibr")]) ;; Finally, we have the basic data motion insns. The byte and word insns ;; are done via define_expand. Start with the floating-point insns, since --- 5092,5111 ---- ;; if we need a GP. Use ibr instead since it has the same EV5 scheduling ;; characteristics. (define_insn "imb" ! [(unspec_volatile [(const_int 0)] UNSPECV_IMB)] "" "call_pal 0x86" [(set_attr "type" "ibr")]) + + ;; BUGCHK is documented common to OSF/1 and VMS PALcode. + ;; NT does not document anything at 0x81 -- presumably it would generate + ;; the equivalent of SIGILL, but this isn't that important. + ;; ??? Presuming unicosmk uses either OSF/1 or VMS PALcode. + (define_insn "trap" + [(trap_if (const_int 1) (const_int 0))] + "!TARGET_ABI_WINDOWS_NT" + "call_pal 0x81" + [(set_attr "type" "ibr")]) ;; Finally, we have the basic data motion insns. The byte and word insns ;; are done via define_expand. Start with the floating-point insns, since *************** *** 4577,4585 **** && (register_operand (operands[0], SFmode) || reg_or_fp0_operand (operands[1], SFmode))" "@ ! fmov %R1,%0 ld%, %0,%1 ! mov %r1,%0 ldl %0,%1 st%, %R1,%0 stl %r1,%0" --- 5118,5126 ---- && (register_operand (operands[0], SFmode) || reg_or_fp0_operand (operands[1], SFmode))" "@ ! cpys %R1,%R1,%0 ld%, %0,%1 ! bis $31,%r1,%0 ldl %0,%1 st%, %R1,%0 stl %r1,%0" *************** *** 4592,4600 **** && (register_operand (operands[0], SFmode) || reg_or_fp0_operand (operands[1], SFmode))" "@ ! fmov %R1,%0 ld%, %0,%1 ! mov %r1,%0 ldl %0,%1 st%, %R1,%0 stl %r1,%0 --- 5133,5141 ---- && (register_operand (operands[0], SFmode) || reg_or_fp0_operand (operands[1], SFmode))" "@ ! cpys %R1,%R1,%0 ld%, %0,%1 ! bis $31,%r1,%0 ldl %0,%1 st%, %R1,%0 stl %r1,%0 *************** *** 4609,4615 **** && (register_operand (operands[0], SFmode) || reg_or_fp0_operand (operands[1], SFmode))" "@ ! mov %r1,%0 ldl %0,%1 stl %r1,%0" [(set_attr "type" "ilog,ild,ist")]) --- 5150,5156 ---- && (register_operand (operands[0], SFmode) || reg_or_fp0_operand (operands[1], SFmode))" "@ ! bis $31,%r1,%0 ldl %0,%1 stl %r1,%0" [(set_attr "type" "ilog,ild,ist")]) *************** *** 4621,4629 **** && (register_operand (operands[0], DFmode) || reg_or_fp0_operand (operands[1], DFmode))" "@ ! fmov %R1,%0 ld%- %0,%1 ! mov %r1,%0 ldq %0,%1 st%- %R1,%0 stq %r1,%0" --- 5162,5170 ---- && (register_operand (operands[0], DFmode) || reg_or_fp0_operand (operands[1], DFmode))" "@ ! cpys %R1,%R1,%0 ld%- %0,%1 ! bis $31,%r1,%0 ldq %0,%1 st%- %R1,%0 stq %r1,%0" *************** *** 4636,4644 **** && (register_operand (operands[0], DFmode) || reg_or_fp0_operand (operands[1], DFmode))" "@ ! fmov %R1,%0 ld%- %0,%1 ! mov %r1,%0 ldq %0,%1 st%- %R1,%0 stq %r1,%0 --- 5177,5185 ---- && (register_operand (operands[0], DFmode) || reg_or_fp0_operand (operands[1], DFmode))" "@ ! cpys %R1,%R1,%0 ld%- %0,%1 ! bis $31,%r1,%0 ldq %0,%1 st%- %R1,%0 stq %r1,%0 *************** *** 4653,4659 **** && (register_operand (operands[0], DFmode) || reg_or_fp0_operand (operands[1], DFmode))" "@ ! mov %r1,%0 ldq %0,%1 stq %r1,%0" [(set_attr "type" "ilog,ild,ist")]) --- 5194,5200 ---- && (register_operand (operands[0], DFmode) || reg_or_fp0_operand (operands[1], DFmode))" "@ ! bis $31,%r1,%0 ldq %0,%1 stq %r1,%0" [(set_attr "type" "ilog,ild,ist")]) *************** *** 4670,4676 **** "reload_completed" [(set (match_dup 0) (match_dup 2)) (set (match_dup 1) (match_dup 3))] - " { alpha_split_tfmode_pair (operands); if (reg_overlap_mentioned_p (operands[0], operands[3])) --- 5211,5216 ---- *************** *** 4679,4732 **** tmp = operands[0], operands[0] = operands[1], operands[1] = tmp; tmp = operands[2], operands[2] = operands[3], operands[3] = tmp; } ! }") (define_expand "movsf" [(set (match_operand:SF 0 "nonimmediate_operand" "") (match_operand:SF 1 "general_operand" ""))] "" - " { if (GET_CODE (operands[0]) == MEM && ! reg_or_fp0_operand (operands[1], SFmode)) operands[1] = force_reg (SFmode, operands[1]); ! }") (define_expand "movdf" [(set (match_operand:DF 0 "nonimmediate_operand" "") (match_operand:DF 1 "general_operand" ""))] "" - " { if (GET_CODE (operands[0]) == MEM && ! reg_or_fp0_operand (operands[1], DFmode)) operands[1] = force_reg (DFmode, operands[1]); ! }") (define_expand "movtf" [(set (match_operand:TF 0 "nonimmediate_operand" "") (match_operand:TF 1 "general_operand" ""))] "" - " { if (GET_CODE (operands[0]) == MEM && ! reg_or_fp0_operand (operands[1], TFmode)) operands[1] = force_reg (TFmode, operands[1]); ! }") (define_insn "*movsi_nofix" [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,r,r,m,*f,*f,m") (match_operand:SI 1 "input_operand" "rJ,K,L,m,rJ,*fJ,m,*f"))] ! "! TARGET_WINDOWS_NT && ! TARGET_OPEN_VMS && ! TARGET_FIX && (register_operand (operands[0], SImode) || reg_or_0_operand (operands[1], SImode))" "@ ! mov %r1,%0 ! lda %0,%1 ! ldah %0,%h1 ldl %0,%1 stl %r1,%0 ! fmov %R1,%0 ld%, %0,%1 st%, %R1,%0" [(set_attr "type" "ilog,iadd,iadd,ild,ist,fcpys,fld,fst")]) --- 5219,5269 ---- tmp = operands[0], operands[0] = operands[1], operands[1] = tmp; tmp = operands[2], operands[2] = operands[3], operands[3] = tmp; } ! }) (define_expand "movsf" [(set (match_operand:SF 0 "nonimmediate_operand" "") (match_operand:SF 1 "general_operand" ""))] "" { if (GET_CODE (operands[0]) == MEM && ! reg_or_fp0_operand (operands[1], SFmode)) operands[1] = force_reg (SFmode, operands[1]); ! }) (define_expand "movdf" [(set (match_operand:DF 0 "nonimmediate_operand" "") (match_operand:DF 1 "general_operand" ""))] "" { if (GET_CODE (operands[0]) == MEM && ! reg_or_fp0_operand (operands[1], DFmode)) operands[1] = force_reg (DFmode, operands[1]); ! }) (define_expand "movtf" [(set (match_operand:TF 0 "nonimmediate_operand" "") (match_operand:TF 1 "general_operand" ""))] "" { if (GET_CODE (operands[0]) == MEM && ! reg_or_fp0_operand (operands[1], TFmode)) operands[1] = force_reg (TFmode, operands[1]); ! }) (define_insn "*movsi_nofix" [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,r,r,m,*f,*f,m") (match_operand:SI 1 "input_operand" "rJ,K,L,m,rJ,*fJ,m,*f"))] ! "(TARGET_ABI_OSF || TARGET_ABI_UNICOSMK) && ! TARGET_FIX && (register_operand (operands[0], SImode) || reg_or_0_operand (operands[1], SImode))" "@ ! bis $31,%r1,%0 ! lda %0,%1($31) ! ldah %0,%h1($31) ldl %0,%1 stl %r1,%0 ! cpys %R1,%R1,%0 ld%, %0,%1 st%, %R1,%0" [(set_attr "type" "ilog,iadd,iadd,ild,ist,fcpys,fld,fst")]) *************** *** 4734,4773 **** (define_insn "*movsi_fix" [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,r,r,m,*f,*f,m,r,*f") (match_operand:SI 1 "input_operand" "rJ,K,L,m,rJ,*fJ,m,*f,*f,r"))] ! "! TARGET_WINDOWS_NT && ! TARGET_OPEN_VMS && TARGET_FIX && (register_operand (operands[0], SImode) || reg_or_0_operand (operands[1], SImode))" "@ ! mov %r1,%0 ! lda %0,%1 ! ldah %0,%h1 ldl %0,%1 stl %r1,%0 ! fmov %R1,%0 ld%, %0,%1 st%, %R1,%0 ftois %1,%0 itofs %1,%0" [(set_attr "type" "ilog,iadd,iadd,ild,ist,fcpys,fld,fst,ftoi,itof")]) ! (define_insn "*movsi_nt_vms" [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,r,r,r,m,*f,*f,m") (match_operand:SI 1 "input_operand" "rJ,K,L,s,m,rJ,*fJ,m,*f"))] ! "(TARGET_WINDOWS_NT || TARGET_OPEN_VMS) && (register_operand (operands[0], SImode) || reg_or_0_operand (operands[1], SImode))" "@ ! mov %1,%0 lda %0,%1 ldah %0,%h1 lda %0,%1 ldl %0,%1 stl %r1,%0 ! fmov %R1,%0 ld%, %0,%1 st%, %R1,%0" [(set_attr "type" "ilog,iadd,iadd,ldsym,ild,ist,fcpys,fld,fst")]) (define_insn "*movhi_nobwx" [(set (match_operand:HI 0 "register_operand" "=r,r") (match_operand:HI 1 "input_operand" "rJ,n"))] --- 5271,5332 ---- (define_insn "*movsi_fix" [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,r,r,m,*f,*f,m,r,*f") (match_operand:SI 1 "input_operand" "rJ,K,L,m,rJ,*fJ,m,*f,*f,r"))] ! "TARGET_ABI_OSF && TARGET_FIX && (register_operand (operands[0], SImode) || reg_or_0_operand (operands[1], SImode))" "@ ! bis $31,%r1,%0 ! lda %0,%1($31) ! ldah %0,%h1($31) ldl %0,%1 stl %r1,%0 ! cpys %R1,%R1,%0 ld%, %0,%1 st%, %R1,%0 ftois %1,%0 itofs %1,%0" [(set_attr "type" "ilog,iadd,iadd,ild,ist,fcpys,fld,fst,ftoi,itof")]) ! (define_insn "*movsi_nt_vms_nofix" [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,r,r,r,m,*f,*f,m") (match_operand:SI 1 "input_operand" "rJ,K,L,s,m,rJ,*fJ,m,*f"))] ! "(TARGET_ABI_WINDOWS_NT || TARGET_ABI_OPEN_VMS) ! && !TARGET_FIX && (register_operand (operands[0], SImode) || reg_or_0_operand (operands[1], SImode))" "@ ! bis $31,%1,%0 lda %0,%1 ldah %0,%h1 lda %0,%1 ldl %0,%1 stl %r1,%0 ! cpys %R1,%R1,%0 ld%, %0,%1 st%, %R1,%0" [(set_attr "type" "ilog,iadd,iadd,ldsym,ild,ist,fcpys,fld,fst")]) + (define_insn "*movsi_nt_vms_fix" + [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,r,r,r,m,*f,*f,m,r,*f") + (match_operand:SI 1 "input_operand" "rJ,K,L,s,m,rJ,*fJ,m,*f,*f,r"))] + "(TARGET_ABI_WINDOWS_NT || TARGET_ABI_OPEN_VMS) + && TARGET_FIX + && (register_operand (operands[0], SImode) + || reg_or_0_operand (operands[1], SImode))" + "@ + bis $31,%1,%0 + lda %0,%1 + ldah %0,%h1 + lda %0,%1 + ldl %0,%1 + stl %r1,%0 + cpys %R1,%R1,%0 + ld%, %0,%1 + st%, %R1,%0 + ftois %1,%0 + itofs %1,%0" + [(set_attr "type" "ilog,iadd,iadd,ldsym,ild,ist,fcpys,fld,fst,ftoi,itof")]) + (define_insn "*movhi_nobwx" [(set (match_operand:HI 0 "register_operand" "=r,r") (match_operand:HI 1 "input_operand" "rJ,n"))] *************** *** 4775,4782 **** && (register_operand (operands[0], HImode) || register_operand (operands[1], HImode))" "@ ! mov %r1,%0 ! lda %0,%L1" [(set_attr "type" "ilog,iadd")]) (define_insn "*movhi_bwx" --- 5334,5341 ---- && (register_operand (operands[0], HImode) || register_operand (operands[1], HImode))" "@ ! bis $31,%r1,%0 ! lda %0,%L1($31)" [(set_attr "type" "ilog,iadd")]) (define_insn "*movhi_bwx" *************** *** 4786,4793 **** && (register_operand (operands[0], HImode) || reg_or_0_operand (operands[1], HImode))" "@ ! mov %r1,%0 ! lda %0,%L1 ldwu %0,%1 stw %r1,%0" [(set_attr "type" "ilog,iadd,ild,ist")]) --- 5345,5352 ---- && (register_operand (operands[0], HImode) || reg_or_0_operand (operands[1], HImode))" "@ ! bis $31,%r1,%0 ! lda %0,%L1($31) ldwu %0,%1 stw %r1,%0" [(set_attr "type" "ilog,iadd,ild,ist")]) *************** *** 4799,4806 **** && (register_operand (operands[0], QImode) || register_operand (operands[1], QImode))" "@ ! mov %r1,%0 ! lda %0,%L1" [(set_attr "type" "ilog,iadd")]) (define_insn "*movqi_bwx" --- 5358,5365 ---- && (register_operand (operands[0], QImode) || register_operand (operands[1], QImode))" "@ ! bis $31,%r1,%0 ! lda %0,%L1($31)" [(set_attr "type" "ilog,iadd")]) (define_insn "*movqi_bwx" *************** *** 4810,4817 **** && (register_operand (operands[0], QImode) || reg_or_0_operand (operands[1], QImode))" "@ ! mov %r1,%0 ! lda %0,%L1 ldbu %0,%1 stb %r1,%0" [(set_attr "type" "ilog,iadd,ild,ist")]) --- 5369,5376 ---- && (register_operand (operands[0], QImode) || reg_or_0_operand (operands[1], QImode))" "@ ! bis $31,%r1,%0 ! lda %0,%L1($31) ldbu %0,%1 stb %r1,%0" [(set_attr "type" "ilog,iadd,ild,ist")]) *************** *** 4823,4844 **** [(set (match_operand:SI 0 "nonimmediate_operand" "") (match_operand:SI 1 "general_operand" ""))] "" - " { ! if (GET_CODE (operands[0]) == MEM ! && ! reg_or_0_operand (operands[1], SImode)) ! operands[1] = force_reg (SImode, operands[1]); ! ! if (! CONSTANT_P (operands[1]) || input_operand (operands[1], SImode)) ! ; ! else if (GET_CODE (operands[1]) == CONST_INT) ! { ! operands[1] ! = alpha_emit_set_const (operands[0], SImode, INTVAL (operands[1]), 3); ! if (rtx_equal_p (operands[0], operands[1])) ! DONE; ! } ! }") ;; Split a load of a large constant into the appropriate two-insn ;; sequence. --- 5382,5391 ---- [(set (match_operand:SI 0 "nonimmediate_operand" "") (match_operand:SI 1 "general_operand" ""))] "" { ! if (alpha_expand_mov (SImode, operands)) ! DONE; ! }) ;; Split a load of a large constant into the appropriate two-insn ;; sequence. *************** *** 4849,4902 **** "! add_operand (operands[1], SImode)" [(set (match_dup 0) (match_dup 2)) (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 3)))] ! " ! { rtx tem = alpha_emit_set_const (operands[0], SImode, INTVAL (operands[1]), 2); if (tem == operands[0]) DONE; else FAIL; ! }") (define_insn "*movdi_nofix" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,r,r,r,m,*f,*f,Q") ! (match_operand:DI 1 "input_operand" "rJ,K,L,s,m,rJ,*fJ,Q,*f"))] "! TARGET_FIX && (register_operand (operands[0], DImode) || reg_or_0_operand (operands[1], DImode))" "@ ! mov %r1,%0 ! lda %0,%1 ! ldah %0,%h1 lda %0,%1 ldq%A1 %0,%1 stq%A0 %r1,%0 ! fmov %R1,%0 ldt %0,%1 stt %R1,%0" ! [(set_attr "type" "ilog,iadd,iadd,ldsym,ild,ist,fcpys,fld,fst")]) (define_insn "*movdi_fix" [(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,r,r,r,m,*f,*f,Q,r,*f") (match_operand:DI 1 "input_operand" "rJ,K,L,s,m,rJ,*fJ,Q,*f,*f,r"))] ! "TARGET_FIX && (register_operand (operands[0], DImode) || reg_or_0_operand (operands[1], DImode))" "@ ! mov %r1,%0 ! lda %0,%1 ! ldah %0,%h1 lda %0,%1 ldq%A1 %0,%1 stq%A0 %r1,%0 ! fmov %R1,%0 ldt %0,%1 stt %R1,%0 ftoit %1,%0 itoft %1,%0" [(set_attr "type" "ilog,iadd,iadd,ldsym,ild,ist,fcpys,fld,fst,ftoi,itof")]) ;; We do three major things here: handle mem->mem, put 64-bit constants in ;; memory, and construct long 32-bit constants. --- 5396,5686 ---- "! add_operand (operands[1], SImode)" [(set (match_dup 0) (match_dup 2)) (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 3)))] ! { ! rtx tem = alpha_emit_set_const (operands[0], SImode, INTVAL (operands[1]), 2); if (tem == operands[0]) DONE; else FAIL; ! }) ! ! ;; Split the load of an address into a four-insn sequence on Unicos/Mk. ! ;; Always generate a REG_EQUAL note for the last instruction to facilitate ! ;; optimisations. If the symbolic operand is a label_ref, generate REG_LABEL ! ;; notes and update LABEL_NUSES because this is not done automatically. ! ;; Labels may be incorrectly deleted if we don't do this. ! ;; ! ;; Describing what the individual instructions do correctly is too complicated ! ;; so use UNSPECs for each of the three parts of an address. ! ! (define_split ! [(set (match_operand:DI 0 "register_operand" "") ! (match_operand:DI 1 "symbolic_operand" ""))] ! "TARGET_ABI_UNICOSMK && reload_completed" ! [(const_int 0)] ! { ! rtx insn1, insn2, insn3; ! ! insn1 = emit_insn (gen_umk_laum (operands[0], operands[1])); ! emit_insn (gen_ashldi3 (operands[0], operands[0], GEN_INT (32))); ! insn2 = emit_insn (gen_umk_lalm (operands[0], operands[0], operands[1])); ! insn3 = emit_insn (gen_umk_lal (operands[0], operands[0], operands[1])); ! REG_NOTES (insn3) = gen_rtx_EXPR_LIST (REG_EQUAL, operands[1], ! REG_NOTES (insn3)); ! if (GET_CODE (operands[1]) == LABEL_REF) ! { ! rtx label; ! ! label = XEXP (operands[1], 0); ! REG_NOTES (insn1) = gen_rtx_EXPR_LIST (REG_LABEL, label, ! REG_NOTES (insn1)); ! REG_NOTES (insn2) = gen_rtx_EXPR_LIST (REG_LABEL, label, ! REG_NOTES (insn2)); ! REG_NOTES (insn3) = gen_rtx_EXPR_LIST (REG_LABEL, label, ! REG_NOTES (insn3)); ! LABEL_NUSES (label) += 3; ! } ! DONE; ! }) ! ! ;; Instructions for loading the three parts of an address on Unicos/Mk. ! ! (define_insn "umk_laum" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (unspec:DI [(match_operand:DI 1 "symbolic_operand" "")] ! UNSPEC_UMK_LAUM))] ! "TARGET_ABI_UNICOSMK" ! "laum %r0,%t1($31)" ! [(set_attr "type" "iadd")]) ! ! (define_insn "umk_lalm" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (plus:DI (match_operand:DI 1 "register_operand" "r") ! (unspec:DI [(match_operand:DI 2 "symbolic_operand" "")] ! UNSPEC_UMK_LALM)))] ! "TARGET_ABI_UNICOSMK" ! "lalm %r0,%t2(%r1)" ! [(set_attr "type" "iadd")]) ! ! (define_insn "umk_lal" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (plus:DI (match_operand:DI 1 "register_operand" "r") ! (unspec:DI [(match_operand:DI 2 "symbolic_operand" "")] ! UNSPEC_UMK_LAL)))] ! "TARGET_ABI_UNICOSMK" ! "lal %r0,%t2(%r1)" ! [(set_attr "type" "iadd")]) ! ! ;; Add a new call information word to the current function's list of CIWs ! ;; and load its index into $25. Doing it here ensures that the CIW will be ! ;; associated with the correct function even in the presence of inlining. ! ! (define_insn "*umk_load_ciw" ! [(set (reg:DI 25) ! (unspec:DI [(match_operand 0 "" "")] UNSPEC_UMK_LOAD_CIW))] ! "TARGET_ABI_UNICOSMK" ! { ! operands[0] = unicosmk_add_call_info_word (operands[0]); ! return "lda $25,%0"; ! } ! [(set_attr "type" "iadd")]) ! ! (define_insn "*movdi_er_low_l" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (lo_sum:DI (match_operand:DI 1 "register_operand" "r") ! (match_operand:DI 2 "local_symbolic_operand" "")))] ! "TARGET_EXPLICIT_RELOCS" ! { ! if (true_regnum (operands[1]) == 29) ! return "lda %0,%2(%1)\t\t!gprel"; ! else ! return "lda %0,%2(%1)\t\t!gprellow"; ! }) ! ! (define_split ! [(set (match_operand:DI 0 "register_operand" "") ! (match_operand:DI 1 "small_symbolic_operand" ""))] ! "TARGET_EXPLICIT_RELOCS && reload_completed" ! [(set (match_dup 0) ! (lo_sum:DI (match_dup 2) (match_dup 1)))] ! "operands[2] = pic_offset_table_rtx;") ! ! (define_split ! [(set (match_operand:DI 0 "register_operand" "") ! (match_operand:DI 1 "local_symbolic_operand" ""))] ! "TARGET_EXPLICIT_RELOCS && reload_completed" ! [(set (match_dup 0) ! (plus:DI (match_dup 2) (high:DI (match_dup 1)))) ! (set (match_dup 0) ! (lo_sum:DI (match_dup 0) (match_dup 1)))] ! "operands[2] = pic_offset_table_rtx;") ! ! (define_split ! [(match_operand 0 "some_small_symbolic_operand" "")] ! "TARGET_EXPLICIT_RELOCS && reload_completed" ! [(match_dup 0)] ! "operands[0] = split_small_symbolic_operand (operands[0]);") ! ! (define_insn "movdi_er_high_g" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (unspec:DI [(match_operand:DI 1 "register_operand" "r") ! (match_operand:DI 2 "global_symbolic_operand" "") ! (match_operand 3 "const_int_operand" "")] ! UNSPEC_LITERAL))] ! "TARGET_EXPLICIT_RELOCS" ! { ! if (INTVAL (operands[3]) == 0) ! return "ldq %0,%2(%1)\t\t!literal"; ! else ! return "ldq %0,%2(%1)\t\t!literal!%3"; ! } ! [(set_attr "type" "ldsym")]) ! ! (define_split ! [(set (match_operand:DI 0 "register_operand" "") ! (match_operand:DI 1 "global_symbolic_operand" ""))] ! "TARGET_EXPLICIT_RELOCS && reload_completed" ! [(set (match_dup 0) ! (unspec:DI [(match_dup 2) ! (match_dup 1) ! (const_int 0)] UNSPEC_LITERAL))] ! "operands[2] = pic_offset_table_rtx;") ! ! ;; With RTL inlining, at -O3, rtl is generated, stored, then actually ! ;; compiled at the end of compilation. In the meantime, someone can ! ;; re-encode-section-info on some symbol changing it e.g. from global ! ;; to local-not-small. If this happens, we'd have emitted a plain ! ;; load rather than a high+losum load and not recognize the insn. ! ;; ! ;; So if rtl inlining is in effect, we delay the global/not-global ! ;; decision until rest_of_compilation by wrapping it in an UNSPEC_SYMBOL. ! ! (define_insn_and_split "movdi_er_maybe_g" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (unspec:DI [(match_operand:DI 1 "symbolic_operand" "")] ! UNSPEC_SYMBOL))] ! "TARGET_EXPLICIT_RELOCS && flag_inline_functions" ! "#" ! "" ! [(set (match_dup 0) (match_dup 1))] ! { ! if (local_symbolic_operand (operands[1], Pmode) ! && !small_symbolic_operand (operands[1], Pmode)) ! { ! rtx subtarget = no_new_pseudos ? operands[0] : gen_reg_rtx (Pmode); ! rtx tmp; ! ! tmp = gen_rtx_HIGH (Pmode, operands[1]); ! if (reload_completed) ! tmp = gen_rtx_PLUS (Pmode, pic_offset_table_rtx, tmp); ! emit_insn (gen_rtx_SET (VOIDmode, subtarget, tmp)); ! ! tmp = gen_rtx_LO_SUM (Pmode, subtarget, operands[1]); ! emit_insn (gen_rtx_SET (VOIDmode, operands[0], tmp)); ! DONE; ! } ! }) ! ! (define_insn "*movdi_er_nofix" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,r,r,r,r,m,*f,*f,Q") ! (match_operand:DI 1 "input_operand" "rJ,K,L,T,s,m,rJ,*fJ,Q,*f"))] ! "TARGET_EXPLICIT_RELOCS && ! TARGET_FIX ! && (register_operand (operands[0], DImode) ! || reg_or_0_operand (operands[1], DImode))" ! "@ ! mov %r1,%0 ! lda %0,%1($31) ! ldah %0,%h1($31) ! # ! # ! ldq%A1 %0,%1 ! stq%A0 %r1,%0 ! fmov %R1,%0 ! ldt %0,%1 ! stt %R1,%0" ! [(set_attr "type" "ilog,iadd,iadd,iadd,ldsym,ild,ist,fcpys,fld,fst")]) ! ! ;; The 'U' constraint matches symbolic operands on Unicos/Mk. Those should ! ;; have been split up by the rules above but we shouldn't reject the ! ;; possibility of them getting through. (define_insn "*movdi_nofix" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,r,r,r,r,m,*f,*f,Q") ! (match_operand:DI 1 "input_operand" "rJ,K,L,U,s,m,rJ,*fJ,Q,*f"))] "! TARGET_FIX && (register_operand (operands[0], DImode) || reg_or_0_operand (operands[1], DImode))" "@ ! bis $31,%r1,%0 ! lda %0,%1($31) ! ldah %0,%h1($31) ! laum %0,%t1($31)\;sll %0,32,%0\;lalm %0,%t1(%0)\;lal %0,%t1(%0) lda %0,%1 ldq%A1 %0,%1 stq%A0 %r1,%0 ! cpys %R1,%R1,%0 ldt %0,%1 stt %R1,%0" ! [(set_attr "type" "ilog,iadd,iadd,ldsym,ldsym,ild,ist,fcpys,fld,fst") ! (set_attr "length" "*,*,*,16,*,*,*,*,*,*")]) ! ! (define_insn "*movdi_er_fix" ! [(set (match_operand:DI 0 "nonimmediate_operand" ! "=r,r,r,r,r,r, m, *f,*f, Q, r,*f") ! (match_operand:DI 1 "input_operand" ! "rJ,K,L,T,s,m,rJ,*fJ, Q,*f,*f, r"))] ! "TARGET_EXPLICIT_RELOCS && TARGET_FIX ! && (register_operand (operands[0], DImode) ! || reg_or_0_operand (operands[1], DImode))" ! "@ ! mov %r1,%0 ! lda %0,%1($31) ! ldah %0,%h1($31) ! # ! # ! ldq%A1 %0,%1 ! stq%A0 %r1,%0 ! fmov %R1,%0 ! ldt %0,%1 ! stt %R1,%0 ! ftoit %1,%0 ! itoft %1,%0" ! [(set_attr "type" "ilog,iadd,iadd,iadd,ldsym,ild,ist,fcpys,fld,fst,ftoi,itof")]) (define_insn "*movdi_fix" [(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,r,r,r,m,*f,*f,Q,r,*f") (match_operand:DI 1 "input_operand" "rJ,K,L,s,m,rJ,*fJ,Q,*f,*f,r"))] ! "! TARGET_EXPLICIT_RELOCS && TARGET_FIX && (register_operand (operands[0], DImode) || reg_or_0_operand (operands[1], DImode))" "@ ! bis $31,%r1,%0 ! lda %0,%1($31) ! ldah %0,%h1($31) lda %0,%1 ldq%A1 %0,%1 stq%A0 %r1,%0 ! cpys %R1,%R1,%0 ldt %0,%1 stt %R1,%0 ftoit %1,%0 itoft %1,%0" [(set_attr "type" "ilog,iadd,iadd,ldsym,ild,ist,fcpys,fld,fst,ftoi,itof")]) + ;; VMS needs to set up "vms_base_regno" for unwinding. This move + ;; often appears dead to the life analysis code, at which point we + ;; abort for emitting dead prologue instructions. Force this live. + + (define_insn "force_movdi" + [(set (match_operand:DI 0 "register_operand" "=r") + (unspec_volatile:DI [(match_operand:DI 1 "register_operand" "r")] + UNSPECV_FORCE_MOV))] + "" + "mov %1,%0" + [(set_attr "type" "ilog")]) + ;; We do three major things here: handle mem->mem, put 64-bit constants in ;; memory, and construct long 32-bit constants. *************** *** 4904,4974 **** [(set (match_operand:DI 0 "nonimmediate_operand" "") (match_operand:DI 1 "general_operand" ""))] "" - " { ! rtx tem; ! ! if (GET_CODE (operands[0]) == MEM ! && ! reg_or_0_operand (operands[1], DImode)) ! operands[1] = force_reg (DImode, operands[1]); ! ! if (! CONSTANT_P (operands[1]) || input_operand (operands[1], DImode)) ! ; ! else if (GET_CODE (operands[1]) == CONST_INT ! && (tem = alpha_emit_set_const (operands[0], DImode, ! INTVAL (operands[1]), 3)) != 0) ! { ! if (rtx_equal_p (tem, operands[0])) ! DONE; ! else ! operands[1] = tem; ! } ! else if (CONSTANT_P (operands[1])) ! { ! if (TARGET_BUILD_CONSTANTS) ! { ! HOST_WIDE_INT i0, i1; ! ! if (GET_CODE (operands[1]) == CONST_INT) ! { ! i0 = INTVAL (operands[1]); ! i1 = -(i0 < 0); ! } ! else if (GET_CODE (operands[1]) == CONST_DOUBLE) ! { ! #if HOST_BITS_PER_WIDE_INT >= 64 ! i0 = CONST_DOUBLE_LOW (operands[1]); ! i1 = -(i0 < 0); ! #else ! i0 = CONST_DOUBLE_LOW (operands[1]); ! i1 = CONST_DOUBLE_HIGH (operands[1]); ! #endif ! } ! else ! abort(); ! ! tem = alpha_emit_set_long_const (operands[0], i0, i1); ! if (rtx_equal_p (tem, operands[0])) ! DONE; ! else ! operands[1] = tem; ! } ! else ! { ! operands[1] = force_const_mem (DImode, operands[1]); ! if (reload_in_progress) ! { ! emit_move_insn (operands[0], XEXP (operands[1], 0)); ! operands[1] = copy_rtx (operands[1]); ! XEXP (operands[1], 0) = operands[0]; ! } ! else ! operands[1] = validize_mem (operands[1]); ! } ! } ! else ! abort (); ! }") ;; Split a load of a large constant into the appropriate two-insn ;; sequence. --- 5688,5697 ---- [(set (match_operand:DI 0 "nonimmediate_operand" "") (match_operand:DI 1 "general_operand" ""))] "" { ! if (alpha_expand_mov (DImode, operands)) ! DONE; ! }) ;; Split a load of a large constant into the appropriate two-insn ;; sequence. *************** *** 4979,4993 **** "! add_operand (operands[1], DImode)" [(set (match_dup 0) (match_dup 2)) (set (match_dup 0) (plus:DI (match_dup 0) (match_dup 3)))] ! " ! { rtx tem = alpha_emit_set_const (operands[0], DImode, INTVAL (operands[1]), 2); if (tem == operands[0]) DONE; else FAIL; ! }") ;; These are the partial-word cases. ;; --- 5702,5716 ---- "! add_operand (operands[1], DImode)" [(set (match_dup 0) (match_dup 2)) (set (match_dup 0) (plus:DI (match_dup 0) (match_dup 3)))] ! { ! rtx tem = alpha_emit_set_const (operands[0], DImode, INTVAL (operands[1]), 2); if (tem == operands[0]) DONE; else FAIL; ! }) ;; These are the partial-word cases. ;; *************** *** 5005,5014 **** (zero_extract:DI (subreg:DI (match_dup 3) 0) (const_int 8) (match_operand:DI 2 "const_int_operand" "")))] ! "" "") ! (define_expand "aligned_loadhi" [(set (match_operand:SI 3 "register_operand" "") (match_operand:SI 1 "memory_operand" "")) --- 5728,5737 ---- (zero_extract:DI (subreg:DI (match_dup 3) 0) (const_int 8) (match_operand:DI 2 "const_int_operand" "")))] ! "" "") ! (define_expand "aligned_loadhi" [(set (match_operand:SI 3 "register_operand" "") (match_operand:SI 1 "memory_operand" "")) *************** *** 5016,5032 **** (zero_extract:DI (subreg:DI (match_dup 3) 0) (const_int 16) (match_operand:DI 2 "const_int_operand" "")))] ! "" "") ! ;; Similar for unaligned loads, where we use the sequence from the ! ;; Alpha Architecture manual. ;; ;; Operand 1 is the address. Operands 2 and 3 are temporaries, where ;; operand 3 can overlap the input and output registers. (define_expand "unaligned_loadqi" [(set (match_operand:DI 2 "register_operand" "") (mem:DI (and:DI (match_operand:DI 1 "address_operand" "") (const_int -8)))) --- 5739,5772 ---- (zero_extract:DI (subreg:DI (match_dup 3) 0) (const_int 16) (match_operand:DI 2 "const_int_operand" "")))] ! "" "") ! ;; Similar for unaligned loads, where we use the sequence from the ! ;; Alpha Architecture manual. We have to distinguish between little-endian ! ;; and big-endian systems as the sequences are different. ;; ;; Operand 1 is the address. Operands 2 and 3 are temporaries, where ;; operand 3 can overlap the input and output registers. (define_expand "unaligned_loadqi" + [(use (match_operand:QI 0 "register_operand" "")) + (use (match_operand:DI 1 "address_operand" "")) + (use (match_operand:DI 2 "register_operand" "")) + (use (match_operand:DI 3 "register_operand" ""))] + "" + { + if (WORDS_BIG_ENDIAN) + emit_insn (gen_unaligned_loadqi_be (operands[0], operands[1], + operands[2], operands[3])); + else + emit_insn (gen_unaligned_loadqi_le (operands[0], operands[1], + operands[2], operands[3])); + DONE; + }) + + (define_expand "unaligned_loadqi_le" [(set (match_operand:DI 2 "register_operand" "") (mem:DI (and:DI (match_operand:DI 1 "address_operand" "") (const_int -8)))) *************** *** 5036,5045 **** (zero_extract:DI (match_dup 2) (const_int 8) (ashift:DI (match_dup 3) (const_int 3))))] ! "" "") (define_expand "unaligned_loadhi" [(set (match_operand:DI 2 "register_operand" "") (mem:DI (and:DI (match_operand:DI 1 "address_operand" "") (const_int -8)))) --- 5776,5816 ---- (zero_extract:DI (match_dup 2) (const_int 8) (ashift:DI (match_dup 3) (const_int 3))))] ! "! WORDS_BIG_ENDIAN" ! "") ! ! (define_expand "unaligned_loadqi_be" ! [(set (match_operand:DI 2 "register_operand" "") ! (mem:DI (and:DI (match_operand:DI 1 "address_operand" "") ! (const_int -8)))) ! (set (match_operand:DI 3 "register_operand" "") ! (match_dup 1)) ! (set (subreg:DI (match_operand:QI 0 "register_operand" "") 0) ! (zero_extract:DI (match_dup 2) ! (const_int 8) ! (minus:DI ! (const_int 56) ! (ashift:DI (match_dup 3) (const_int 3)))))] ! "WORDS_BIG_ENDIAN" "") (define_expand "unaligned_loadhi" + [(use (match_operand:QI 0 "register_operand" "")) + (use (match_operand:DI 1 "address_operand" "")) + (use (match_operand:DI 2 "register_operand" "")) + (use (match_operand:DI 3 "register_operand" ""))] + "" + { + if (WORDS_BIG_ENDIAN) + emit_insn (gen_unaligned_loadhi_be (operands[0], operands[1], + operands[2], operands[3])); + else + emit_insn (gen_unaligned_loadhi_le (operands[0], operands[1], + operands[2], operands[3])); + DONE; + }) + + (define_expand "unaligned_loadhi_le" [(set (match_operand:DI 2 "register_operand" "") (mem:DI (and:DI (match_operand:DI 1 "address_operand" "") (const_int -8)))) *************** *** 5049,5059 **** (zero_extract:DI (match_dup 2) (const_int 16) (ashift:DI (match_dup 3) (const_int 3))))] ! "" "") ;; Storing an aligned byte or word requires two temporaries. Operand 0 is the ! ;; aligned SImode MEM. Operand 1 is the register containing the ;; byte or word to store. Operand 2 is the number of bits within the word that ;; the value should be placed. Operands 3 and 4 are SImode temporaries. --- 5820,5845 ---- (zero_extract:DI (match_dup 2) (const_int 16) (ashift:DI (match_dup 3) (const_int 3))))] ! "! WORDS_BIG_ENDIAN" ! "") ! ! (define_expand "unaligned_loadhi_be" ! [(set (match_operand:DI 2 "register_operand" "") ! (mem:DI (and:DI (match_operand:DI 1 "address_operand" "") ! (const_int -8)))) ! (set (match_operand:DI 3 "register_operand" "") ! (plus:DI (match_dup 1) (const_int 1))) ! (set (subreg:DI (match_operand:QI 0 "register_operand" "") 0) ! (zero_extract:DI (match_dup 2) ! (const_int 16) ! (minus:DI ! (const_int 56) ! (ashift:DI (match_dup 3) (const_int 3)))))] ! "WORDS_BIG_ENDIAN" "") ;; Storing an aligned byte or word requires two temporaries. Operand 0 is the ! ;; aligned SImode MEM. Operand 1 is the register containing the ;; byte or word to store. Operand 2 is the number of bits within the word that ;; the value should be placed. Operands 3 and 4 are SImode temporaries. *************** *** 5069,5078 **** (ior:DI (subreg:DI (match_dup 4) 0) (subreg:DI (match_dup 3) 0))) (set (match_dup 0) (match_dup 4))] "" ! " ! { operands[5] = GEN_INT (~ (GET_MODE_MASK (GET_MODE (operands[1])) << INTVAL (operands[2]))); ! }") ;; For the unaligned byte and halfword cases, we use code similar to that ;; in the ;; Architecture book, but reordered to lower the number of registers --- 5855,5864 ---- (ior:DI (subreg:DI (match_dup 4) 0) (subreg:DI (match_dup 3) 0))) (set (match_dup 0) (match_dup 4))] "" ! { ! operands[5] = GEN_INT (~ (GET_MODE_MASK (GET_MODE (operands[1])) << INTVAL (operands[2]))); ! }) ;; For the unaligned byte and halfword cases, we use code similar to that ;; in the ;; Architecture book, but reordered to lower the number of registers *************** *** 5082,5087 **** --- 5868,5892 ---- ;; operand 2 can be that register. (define_expand "unaligned_storeqi" + [(use (match_operand:DI 0 "address_operand" "")) + (use (match_operand:QI 1 "register_operand" "")) + (use (match_operand:DI 2 "register_operand" "")) + (use (match_operand:DI 3 "register_operand" "")) + (use (match_operand:DI 4 "register_operand" ""))] + "" + { + if (WORDS_BIG_ENDIAN) + emit_insn (gen_unaligned_storeqi_be (operands[0], operands[1], + operands[2], operands[3], + operands[4])); + else + emit_insn (gen_unaligned_storeqi_le (operands[0], operands[1], + operands[2], operands[3], + operands[4])); + DONE; + }) + + (define_expand "unaligned_storeqi_le" [(set (match_operand:DI 3 "register_operand" "") (mem:DI (and:DI (match_operand:DI 0 "address_operand" "") (const_int -8)))) *************** *** 5097,5106 **** (set (match_dup 4) (ior:DI (match_dup 4) (match_dup 3))) (set (mem:DI (and:DI (match_dup 0) (const_int -8))) (match_dup 4))] ! "" "") (define_expand "unaligned_storehi" [(set (match_operand:DI 3 "register_operand" "") (mem:DI (and:DI (match_operand:DI 0 "address_operand" "") (const_int -8)))) --- 5902,5951 ---- (set (match_dup 4) (ior:DI (match_dup 4) (match_dup 3))) (set (mem:DI (and:DI (match_dup 0) (const_int -8))) (match_dup 4))] ! "! WORDS_BIG_ENDIAN" ! "") ! ! (define_expand "unaligned_storeqi_be" ! [(set (match_operand:DI 3 "register_operand" "") ! (mem:DI (and:DI (match_operand:DI 0 "address_operand" "") ! (const_int -8)))) ! (set (match_operand:DI 2 "register_operand" "") ! (match_dup 0)) ! (set (match_dup 3) ! (and:DI (not:DI (ashift:DI (const_int 255) ! (minus:DI (const_int 56) ! (ashift:DI (match_dup 2) (const_int 3))))) ! (match_dup 3))) ! (set (match_operand:DI 4 "register_operand" "") ! (ashift:DI (zero_extend:DI (match_operand:QI 1 "register_operand" "")) ! (minus:DI (const_int 56) ! (ashift:DI (match_dup 2) (const_int 3))))) ! (set (match_dup 4) (ior:DI (match_dup 4) (match_dup 3))) ! (set (mem:DI (and:DI (match_dup 0) (const_int -8))) ! (match_dup 4))] ! "WORDS_BIG_ENDIAN" "") (define_expand "unaligned_storehi" + [(use (match_operand:DI 0 "address_operand" "")) + (use (match_operand:HI 1 "register_operand" "")) + (use (match_operand:DI 2 "register_operand" "")) + (use (match_operand:DI 3 "register_operand" "")) + (use (match_operand:DI 4 "register_operand" ""))] + "" + { + if (WORDS_BIG_ENDIAN) + emit_insn (gen_unaligned_storehi_be (operands[0], operands[1], + operands[2], operands[3], + operands[4])); + else + emit_insn (gen_unaligned_storehi_le (operands[0], operands[1], + operands[2], operands[3], + operands[4])); + DONE; + }) + + (define_expand "unaligned_storehi_le" [(set (match_operand:DI 3 "register_operand" "") (mem:DI (and:DI (match_operand:DI 0 "address_operand" "") (const_int -8)))) *************** *** 5116,5122 **** (set (match_dup 4) (ior:DI (match_dup 4) (match_dup 3))) (set (mem:DI (and:DI (match_dup 0) (const_int -8))) (match_dup 4))] ! "" "") ;; Here are the define_expand's for QI and HI moves that use the above --- 5961,5989 ---- (set (match_dup 4) (ior:DI (match_dup 4) (match_dup 3))) (set (mem:DI (and:DI (match_dup 0) (const_int -8))) (match_dup 4))] ! "! WORDS_BIG_ENDIAN" ! "") ! ! (define_expand "unaligned_storehi_be" ! [(set (match_operand:DI 3 "register_operand" "") ! (mem:DI (and:DI (match_operand:DI 0 "address_operand" "") ! (const_int -8)))) ! (set (match_operand:DI 2 "register_operand" "") ! (plus:DI (match_dup 0) (const_int 1))) ! (set (match_dup 3) ! (and:DI (not:DI (ashift:DI ! (const_int 65535) ! (minus:DI (const_int 56) ! (ashift:DI (match_dup 2) (const_int 3))))) ! (match_dup 3))) ! (set (match_operand:DI 4 "register_operand" "") ! (ashift:DI (zero_extend:DI (match_operand:HI 1 "register_operand" "")) ! (minus:DI (const_int 56) ! (ashift:DI (match_dup 2) (const_int 3))))) ! (set (match_dup 4) (ior:DI (match_dup 4) (match_dup 3))) ! (set (mem:DI (and:DI (match_dup 0) (const_int -8))) ! (match_dup 4))] ! "WORDS_BIG_ENDIAN" "") ;; Here are the define_expand's for QI and HI moves that use the above *************** *** 5127,5364 **** [(set (match_operand:QI 0 "nonimmediate_operand" "") (match_operand:QI 1 "general_operand" ""))] "" - " { ! if (TARGET_BWX) ! { ! if (GET_CODE (operands[0]) == MEM ! && ! reg_or_0_operand (operands[1], QImode)) ! operands[1] = force_reg (QImode, operands[1]); ! ! if (GET_CODE (operands[1]) == CONST_INT ! && ! input_operand (operands[1], QImode)) ! { ! operands[1] = alpha_emit_set_const (operands[0], QImode, ! INTVAL (operands[1]), 3); ! ! if (rtx_equal_p (operands[0], operands[1])) ! DONE; ! } ! ! goto def; ! } ! ! /* If the output is not a register, the input must be. */ ! if (GET_CODE (operands[0]) == MEM) ! operands[1] = force_reg (QImode, operands[1]); ! ! /* Handle four memory cases, unaligned and aligned for either the input ! or the output. The only case where we can be called during reload is ! for aligned loads; all other cases require temporaries. */ ! ! if (GET_CODE (operands[1]) == MEM ! || (GET_CODE (operands[1]) == SUBREG ! && GET_CODE (SUBREG_REG (operands[1])) == MEM) ! || (reload_in_progress && GET_CODE (operands[1]) == REG ! && REGNO (operands[1]) >= FIRST_PSEUDO_REGISTER) ! || (reload_in_progress && GET_CODE (operands[1]) == SUBREG ! && GET_CODE (SUBREG_REG (operands[1])) == REG ! && REGNO (SUBREG_REG (operands[1])) >= FIRST_PSEUDO_REGISTER)) ! { ! if (aligned_memory_operand (operands[1], QImode)) ! { ! if (reload_in_progress) ! { ! emit_insn (gen_reload_inqi_help ! (operands[0], operands[1], ! gen_rtx_REG (SImode, REGNO (operands[0])))); ! } ! else ! { ! rtx aligned_mem, bitnum; ! rtx scratch = gen_reg_rtx (SImode); ! ! get_aligned_mem (operands[1], &aligned_mem, &bitnum); ! ! emit_insn (gen_aligned_loadqi (operands[0], aligned_mem, bitnum, ! scratch)); ! } ! } ! else ! { ! /* Don't pass these as parameters since that makes the generated ! code depend on parameter evaluation order which will cause ! bootstrap failures. */ ! ! rtx temp1 = gen_reg_rtx (DImode); ! rtx temp2 = gen_reg_rtx (DImode); ! rtx seq ! = gen_unaligned_loadqi (operands[0], ! get_unaligned_address (operands[1], 0), ! temp1, temp2); ! ! alpha_set_memflags (seq, operands[1]); ! emit_insn (seq); ! } ! ! DONE; ! } ! ! else if (GET_CODE (operands[0]) == MEM ! || (GET_CODE (operands[0]) == SUBREG ! && GET_CODE (SUBREG_REG (operands[0])) == MEM) ! || (reload_in_progress && GET_CODE (operands[0]) == REG ! && REGNO (operands[0]) >= FIRST_PSEUDO_REGISTER) ! || (reload_in_progress && GET_CODE (operands[0]) == SUBREG ! && GET_CODE (SUBREG_REG (operands[0])) == REG ! && REGNO (operands[0]) >= FIRST_PSEUDO_REGISTER)) ! { ! if (aligned_memory_operand (operands[0], QImode)) ! { ! rtx aligned_mem, bitnum; ! rtx temp1 = gen_reg_rtx (SImode); ! rtx temp2 = gen_reg_rtx (SImode); ! ! get_aligned_mem (operands[0], &aligned_mem, &bitnum); ! ! emit_insn (gen_aligned_store (aligned_mem, operands[1], bitnum, ! temp1, temp2)); ! } ! else ! { ! rtx temp1 = gen_reg_rtx (DImode); ! rtx temp2 = gen_reg_rtx (DImode); ! rtx temp3 = gen_reg_rtx (DImode); ! rtx seq ! = gen_unaligned_storeqi (get_unaligned_address (operands[0], 0), ! operands[1], temp1, temp2, temp3); ! ! alpha_set_memflags (seq, operands[0]); ! emit_insn (seq); ! } ! DONE; ! } ! def:; ! }") (define_expand "movhi" [(set (match_operand:HI 0 "nonimmediate_operand" "") (match_operand:HI 1 "general_operand" ""))] "" - " { ! if (TARGET_BWX) ! { ! if (GET_CODE (operands[0]) == MEM ! && ! reg_or_0_operand (operands[1], HImode)) ! operands[1] = force_reg (HImode, operands[1]); ! ! if (GET_CODE (operands[1]) == CONST_INT ! && ! input_operand (operands[1], HImode)) ! { ! operands[1] = alpha_emit_set_const (operands[0], HImode, ! INTVAL (operands[1]), 3); ! ! if (rtx_equal_p (operands[0], operands[1])) ! DONE; ! } ! ! goto def; ! } ! ! /* If the output is not a register, the input must be. */ ! if (GET_CODE (operands[0]) == MEM) ! operands[1] = force_reg (HImode, operands[1]); ! ! /* Handle four memory cases, unaligned and aligned for either the input ! or the output. The only case where we can be called during reload is ! for aligned loads; all other cases require temporaries. */ ! ! if (GET_CODE (operands[1]) == MEM ! || (GET_CODE (operands[1]) == SUBREG ! && GET_CODE (SUBREG_REG (operands[1])) == MEM) ! || (reload_in_progress && GET_CODE (operands[1]) == REG ! && REGNO (operands[1]) >= FIRST_PSEUDO_REGISTER) ! || (reload_in_progress && GET_CODE (operands[1]) == SUBREG ! && GET_CODE (SUBREG_REG (operands[1])) == REG ! && REGNO (SUBREG_REG (operands[1])) >= FIRST_PSEUDO_REGISTER)) ! { ! if (aligned_memory_operand (operands[1], HImode)) ! { ! if (reload_in_progress) ! { ! emit_insn (gen_reload_inhi_help ! (operands[0], operands[1], ! gen_rtx_REG (SImode, REGNO (operands[0])))); ! } ! else ! { ! rtx aligned_mem, bitnum; ! rtx scratch = gen_reg_rtx (SImode); ! ! get_aligned_mem (operands[1], &aligned_mem, &bitnum); ! ! emit_insn (gen_aligned_loadhi (operands[0], aligned_mem, bitnum, ! scratch)); ! } ! } ! else ! { ! /* Don't pass these as parameters since that makes the generated ! code depend on parameter evaluation order which will cause ! bootstrap failures. */ ! ! rtx temp1 = gen_reg_rtx (DImode); ! rtx temp2 = gen_reg_rtx (DImode); ! rtx seq ! = gen_unaligned_loadhi (operands[0], ! get_unaligned_address (operands[1], 0), ! temp1, temp2); ! ! alpha_set_memflags (seq, operands[1]); ! emit_insn (seq); ! } ! ! DONE; ! } ! ! else if (GET_CODE (operands[0]) == MEM ! || (GET_CODE (operands[0]) == SUBREG ! && GET_CODE (SUBREG_REG (operands[0])) == MEM) ! || (reload_in_progress && GET_CODE (operands[0]) == REG ! && REGNO (operands[0]) >= FIRST_PSEUDO_REGISTER) ! || (reload_in_progress && GET_CODE (operands[0]) == SUBREG ! && GET_CODE (SUBREG_REG (operands[0])) == REG ! && REGNO (operands[0]) >= FIRST_PSEUDO_REGISTER)) ! { ! if (aligned_memory_operand (operands[0], HImode)) ! { ! rtx aligned_mem, bitnum; ! rtx temp1 = gen_reg_rtx (SImode); ! rtx temp2 = gen_reg_rtx (SImode); ! ! get_aligned_mem (operands[0], &aligned_mem, &bitnum); ! ! emit_insn (gen_aligned_store (aligned_mem, operands[1], bitnum, ! temp1, temp2)); ! } ! else ! { ! rtx temp1 = gen_reg_rtx (DImode); ! rtx temp2 = gen_reg_rtx (DImode); ! rtx temp3 = gen_reg_rtx (DImode); ! rtx seq ! = gen_unaligned_storehi (get_unaligned_address (operands[0], 0), ! operands[1], temp1, temp2, temp3); ! ! alpha_set_memflags (seq, operands[0]); ! emit_insn (seq); ! } ! ! DONE; ! } ! def:; ! }") ;; Here are the versions for reload. Note that in the unaligned cases ;; we know that the operand must not be a pseudo-register because stack --- 5994,6016 ---- [(set (match_operand:QI 0 "nonimmediate_operand" "") (match_operand:QI 1 "general_operand" ""))] "" { ! if (TARGET_BWX ! ? alpha_expand_mov (QImode, operands) ! : alpha_expand_mov_nobwx (QImode, operands)) ! DONE; ! }) (define_expand "movhi" [(set (match_operand:HI 0 "nonimmediate_operand" "") (match_operand:HI 1 "general_operand" ""))] "" { ! if (TARGET_BWX ! ? alpha_expand_mov (HImode, operands) ! : alpha_expand_mov_nobwx (HImode, operands)) ! DONE; ! }) ;; Here are the versions for reload. Note that in the unaligned cases ;; we know that the operand must not be a pseudo-register because stack *************** *** 5369,5375 **** (match_operand:QI 1 "any_memory_operand" "m") (match_operand:TI 2 "register_operand" "=&r")])] "! TARGET_BWX" - " { rtx scratch, seq; --- 6021,6026 ---- *************** *** 5400,5413 **** } emit_insn (seq); DONE; ! }") (define_expand "reload_inhi" [(parallel [(match_operand:HI 0 "register_operand" "=r") (match_operand:HI 1 "any_memory_operand" "m") (match_operand:TI 2 "register_operand" "=&r")])] "! TARGET_BWX" - " { rtx scratch, seq; --- 6051,6063 ---- } emit_insn (seq); DONE; ! }) (define_expand "reload_inhi" [(parallel [(match_operand:HI 0 "register_operand" "=r") (match_operand:HI 1 "any_memory_operand" "m") (match_operand:TI 2 "register_operand" "=&r")])] "! TARGET_BWX" { rtx scratch, seq; *************** *** 5416,5422 **** if (aligned_memory_operand (operands[1], HImode)) { ! seq = gen_reload_inhi_help (operands[0], operands[1], gen_rtx_REG (SImode, REGNO (operands[2]))); } else --- 6066,6072 ---- if (aligned_memory_operand (operands[1], HImode)) { ! seq = gen_reload_inhi_help (operands[0], operands[1], gen_rtx_REG (SImode, REGNO (operands[2]))); } else *************** *** 5438,5451 **** } emit_insn (seq); DONE; ! }") (define_expand "reload_outqi" [(parallel [(match_operand:QI 0 "any_memory_operand" "=m") (match_operand:QI 1 "register_operand" "r") (match_operand:TI 2 "register_operand" "=&r")])] "! TARGET_BWX" - " { if (GET_CODE (operands[0]) != MEM) abort (); --- 6088,6100 ---- } emit_insn (seq); DONE; ! }) (define_expand "reload_outqi" [(parallel [(match_operand:QI 0 "any_memory_operand" "=m") (match_operand:QI 1 "register_operand" "r") (match_operand:TI 2 "register_operand" "=&r")])] "! TARGET_BWX" { if (GET_CODE (operands[0]) != MEM) abort (); *************** *** 5474,5487 **** emit_insn (seq); } DONE; ! }") (define_expand "reload_outhi" [(parallel [(match_operand:HI 0 "any_memory_operand" "=m") (match_operand:HI 1 "register_operand" "r") (match_operand:TI 2 "register_operand" "=&r")])] "! TARGET_BWX" - " { if (GET_CODE (operands[0]) != MEM) abort (); --- 6123,6135 ---- emit_insn (seq); } DONE; ! }) (define_expand "reload_outhi" [(parallel [(match_operand:HI 0 "any_memory_operand" "=m") (match_operand:HI 1 "register_operand" "r") (match_operand:TI 2 "register_operand" "=&r")])] "! TARGET_BWX" { if (GET_CODE (operands[0]) != MEM) abort (); *************** *** 5510,5516 **** emit_insn (seq); } DONE; ! }") ;; Helpers for the above. The way reload is structured, we can't ;; always get a proper address for a stack slot during reload_foo --- 6158,6164 ---- emit_insn (seq); } DONE; ! }) ;; Helpers for the above. The way reload is structured, we can't ;; always get a proper address for a stack slot during reload_foo *************** *** 5552,5581 **** (clobber (match_operand:SI 2 "register_operand" ""))] "! TARGET_BWX && reload_completed" [(const_int 0)] - " { rtx aligned_mem, bitnum; get_aligned_mem (operands[1], &aligned_mem, &bitnum); emit_insn (gen_aligned_loadqi (operands[0], aligned_mem, bitnum, operands[2])); DONE; ! }") ! (define_split [(set (match_operand:HI 0 "register_operand" "") (match_operand:HI 1 "memory_operand" "")) (clobber (match_operand:SI 2 "register_operand" ""))] "! TARGET_BWX && reload_completed" [(const_int 0)] - " { rtx aligned_mem, bitnum; get_aligned_mem (operands[1], &aligned_mem, &bitnum); emit_insn (gen_aligned_loadhi (operands[0], aligned_mem, bitnum, operands[2])); DONE; ! }") ! (define_split [(set (match_operand:QI 0 "memory_operand" "") (match_operand:QI 1 "register_operand" "")) --- 6200,6229 ---- (clobber (match_operand:SI 2 "register_operand" ""))] "! TARGET_BWX && reload_completed" [(const_int 0)] { rtx aligned_mem, bitnum; get_aligned_mem (operands[1], &aligned_mem, &bitnum); + emit_insn (gen_aligned_loadqi (operands[0], aligned_mem, bitnum, operands[2])); DONE; ! }) ! (define_split [(set (match_operand:HI 0 "register_operand" "") (match_operand:HI 1 "memory_operand" "")) (clobber (match_operand:SI 2 "register_operand" ""))] "! TARGET_BWX && reload_completed" [(const_int 0)] { rtx aligned_mem, bitnum; get_aligned_mem (operands[1], &aligned_mem, &bitnum); + emit_insn (gen_aligned_loadhi (operands[0], aligned_mem, bitnum, operands[2])); DONE; ! }) ! (define_split [(set (match_operand:QI 0 "memory_operand" "") (match_operand:QI 1 "register_operand" "")) *************** *** 5583,5596 **** (clobber (match_operand:SI 3 "register_operand" ""))] "! TARGET_BWX && reload_completed" [(const_int 0)] - " { rtx aligned_mem, bitnum; get_aligned_mem (operands[0], &aligned_mem, &bitnum); emit_insn (gen_aligned_store (aligned_mem, operands[1], bitnum, operands[2], operands[3])); DONE; ! }") (define_split [(set (match_operand:HI 0 "memory_operand" "") --- 6231,6243 ---- (clobber (match_operand:SI 3 "register_operand" ""))] "! TARGET_BWX && reload_completed" [(const_int 0)] { rtx aligned_mem, bitnum; get_aligned_mem (operands[0], &aligned_mem, &bitnum); emit_insn (gen_aligned_store (aligned_mem, operands[1], bitnum, operands[2], operands[3])); DONE; ! }) (define_split [(set (match_operand:HI 0 "memory_operand" "") *************** *** 5599,5612 **** (clobber (match_operand:SI 3 "register_operand" ""))] "! TARGET_BWX && reload_completed" [(const_int 0)] - " { rtx aligned_mem, bitnum; get_aligned_mem (operands[0], &aligned_mem, &bitnum); emit_insn (gen_aligned_store (aligned_mem, operands[1], bitnum, operands[2], operands[3])); DONE; ! }") ;; Bit field extract patterns which use ext[wlq][lh] --- 6246,6258 ---- (clobber (match_operand:SI 3 "register_operand" ""))] "! TARGET_BWX && reload_completed" [(const_int 0)] { rtx aligned_mem, bitnum; get_aligned_mem (operands[0], &aligned_mem, &bitnum); emit_insn (gen_aligned_store (aligned_mem, operands[1], bitnum, operands[2], operands[3])); DONE; ! }) ;; Bit field extract patterns which use ext[wlq][lh] *************** *** 5616,5623 **** (match_operand:DI 2 "immediate_operand" "") (match_operand:DI 3 "immediate_operand" "")))] "" - " { /* We can do 16, 32 and 64 bit fields, if aligned on byte boundaries. */ if (INTVAL (operands[3]) % 8 != 0 || (INTVAL (operands[2]) != 16 --- 6262,6270 ---- (match_operand:DI 2 "immediate_operand" "") (match_operand:DI 3 "immediate_operand" "")))] "" { + int ofs; + /* We can do 16, 32 and 64 bit fields, if aligned on byte boundaries. */ if (INTVAL (operands[3]) % 8 != 0 || (INTVAL (operands[2]) != 16 *************** *** 5630,5640 **** if (GET_CODE (operands[1]) != MEM) FAIL; alpha_expand_unaligned_load (operands[0], operands[1], INTVAL (operands[2]) / 8, ! INTVAL (operands[3]) / 8, 1); DONE; ! }") (define_expand "extzv" [(set (match_operand:DI 0 "register_operand" "") --- 6277,6299 ---- if (GET_CODE (operands[1]) != MEM) FAIL; + /* The bit number is relative to the mode of operand 1 which is + usually QImode (this might actually be a bug in expmed.c). Note + that the bit number is negative in big-endian mode in this case. + We have to convert that to the offset. */ + if (WORDS_BIG_ENDIAN) + ofs = GET_MODE_BITSIZE (GET_MODE (operands[1])) + - INTVAL (operands[2]) - INTVAL (operands[3]); + else + ofs = INTVAL (operands[3]); + + ofs = ofs / 8; + alpha_expand_unaligned_load (operands[0], operands[1], INTVAL (operands[2]) / 8, ! ofs, 1); DONE; ! }) (define_expand "extzv" [(set (match_operand:DI 0 "register_operand" "") *************** *** 5642,5648 **** (match_operand:DI 2 "immediate_operand" "") (match_operand:DI 3 "immediate_operand" "")))] "" - " { /* We can do 8, 16, 32 and 64 bit fields, if aligned on byte boundaries. */ if (INTVAL (operands[3]) % 8 != 0 --- 6301,6306 ---- *************** *** 5654,5669 **** if (GET_CODE (operands[1]) == MEM) { /* Fail 8 bit fields, falling back on a simple byte load. */ if (INTVAL (operands[2]) == 8) FAIL; alpha_expand_unaligned_load (operands[0], operands[1], INTVAL (operands[2]) / 8, ! INTVAL (operands[3]) / 8, 0); DONE; } ! }") (define_expand "insv" [(set (zero_extract:DI (match_operand:QI 0 "memory_operand" "") --- 6312,6341 ---- if (GET_CODE (operands[1]) == MEM) { + int ofs; + /* Fail 8 bit fields, falling back on a simple byte load. */ if (INTVAL (operands[2]) == 8) FAIL; + /* The bit number is relative to the mode of operand 1 which is + usually QImode (this might actually be a bug in expmed.c). Note + that the bit number is negative in big-endian mode in this case. + We have to convert that to the offset. */ + if (WORDS_BIG_ENDIAN) + ofs = GET_MODE_BITSIZE (GET_MODE (operands[1])) + - INTVAL (operands[2]) - INTVAL (operands[3]); + else + ofs = INTVAL (operands[3]); + + ofs = ofs / 8; + alpha_expand_unaligned_load (operands[0], operands[1], INTVAL (operands[2]) / 8, ! ofs, 0); DONE; } ! }) (define_expand "insv" [(set (zero_extract:DI (match_operand:QI 0 "memory_operand" "") *************** *** 5671,5678 **** (match_operand:DI 2 "immediate_operand" "")) (match_operand:DI 3 "register_operand" ""))] "" - " { /* We can do 16, 32 and 64 bit fields, if aligned on byte boundaries. */ if (INTVAL (operands[2]) % 8 != 0 || (INTVAL (operands[1]) != 16 --- 6343,6351 ---- (match_operand:DI 2 "immediate_operand" "")) (match_operand:DI 3 "register_operand" ""))] "" { + int ofs; + /* We can do 16, 32 and 64 bit fields, if aligned on byte boundaries. */ if (INTVAL (operands[2]) % 8 != 0 || (INTVAL (operands[1]) != 16 *************** *** 5685,5695 **** if (GET_CODE (operands[0]) != MEM) FAIL; alpha_expand_unaligned_store (operands[0], operands[3], ! INTVAL (operands[1]) / 8, ! INTVAL (operands[2]) / 8); DONE; ! }") ;; Block move/clear, see alpha.c for more details. ;; Argument 0 is the destination --- 6358,6379 ---- if (GET_CODE (operands[0]) != MEM) FAIL; + /* The bit number is relative to the mode of operand 1 which is + usually QImode (this might actually be a bug in expmed.c). Note + that the bit number is negative in big-endian mode in this case. + We have to convert that to the offset. */ + if (WORDS_BIG_ENDIAN) + ofs = GET_MODE_BITSIZE (GET_MODE (operands[0])) + - INTVAL (operands[1]) - INTVAL (operands[2]); + else + ofs = INTVAL (operands[2]); + + ofs = ofs / 8; + alpha_expand_unaligned_store (operands[0], operands[3], ! INTVAL (operands[1]) / 8, ofs); DONE; ! }) ;; Block move/clear, see alpha.c for more details. ;; Argument 0 is the destination *************** *** 5703,5715 **** (use (match_operand:DI 2 "immediate_operand" "")) (use (match_operand:DI 3 "immediate_operand" ""))])] "" - " { if (alpha_expand_block_move (operands)) DONE; else FAIL; ! }") (define_expand "clrstrqi" [(parallel [(set (match_operand:BLK 0 "memory_operand" "") --- 6387,6398 ---- (use (match_operand:DI 2 "immediate_operand" "")) (use (match_operand:DI 3 "immediate_operand" ""))])] "" { if (alpha_expand_block_move (operands)) DONE; else FAIL; ! }) (define_expand "clrstrqi" [(parallel [(set (match_operand:BLK 0 "memory_operand" "") *************** *** 5717,5749 **** (use (match_operand:DI 1 "immediate_operand" "")) (use (match_operand:DI 2 "immediate_operand" ""))])] "" - " { if (alpha_expand_block_clear (operands)) DONE; else FAIL; ! }") ;; Subroutine of stack space allocation. Perform a stack probe. (define_expand "probe_stack" [(set (match_dup 1) (match_operand:DI 0 "const_int_operand" ""))] "" - " { operands[1] = gen_rtx_MEM (DImode, plus_constant (stack_pointer_rtx, INTVAL (operands[0]))); MEM_VOLATILE_P (operands[1]) = 1; operands[0] = const0_rtx; ! }") ;; This is how we allocate stack space. If we are allocating a ;; constant amount of space and we know it is less than 4096 ;; bytes, we need do nothing. ;; ;; If it is more than 4096 bytes, we need to probe the stack ! ;; periodically. (define_expand "allocate_stack" [(set (reg:DI 30) (plus:DI (reg:DI 30) --- 6400,6430 ---- (use (match_operand:DI 1 "immediate_operand" "")) (use (match_operand:DI 2 "immediate_operand" ""))])] "" { if (alpha_expand_block_clear (operands)) DONE; else FAIL; ! }) ;; Subroutine of stack space allocation. Perform a stack probe. (define_expand "probe_stack" [(set (match_dup 1) (match_operand:DI 0 "const_int_operand" ""))] "" { operands[1] = gen_rtx_MEM (DImode, plus_constant (stack_pointer_rtx, INTVAL (operands[0]))); MEM_VOLATILE_P (operands[1]) = 1; operands[0] = const0_rtx; ! }) ;; This is how we allocate stack space. If we are allocating a ;; constant amount of space and we know it is less than 4096 ;; bytes, we need do nothing. ;; ;; If it is more than 4096 bytes, we need to probe the stack ! ;; periodically. (define_expand "allocate_stack" [(set (reg:DI 30) (plus:DI (reg:DI 30) *************** *** 5751,5757 **** (set (match_operand:DI 0 "register_operand" "=r") (match_dup 2))] "" - " { if (GET_CODE (operands[1]) == CONST_INT && INTVAL (operands[1]) < 32768) --- 6432,6437 ---- *************** *** 5812,5818 **** emit_move_insn (operands[0], virtual_stack_dynamic_rtx); DONE; } ! }") ;; This is used by alpha_expand_prolog to do the same thing as above, ;; except we cannot at that time generate new basic blocks, so we hide --- 6492,6498 ---- emit_move_insn (operands[0], virtual_stack_dynamic_rtx); DONE; } ! }) ;; This is used by alpha_expand_prolog to do the same thing as above, ;; except we cannot at that time generate new basic blocks, so we hide *************** *** 5820,5846 **** (define_insn "prologue_stack_probe_loop" [(unspec_volatile [(match_operand:DI 0 "register_operand" "r") ! (match_operand:DI 1 "register_operand" "r")] 5)] "" - "* { operands[2] = gen_label_rtx (); ! ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", CODE_LABEL_NUMBER (operands[2])); ! return \"stq $31,-8192(%1)\;subq %0,1,%0\;lda %1,-8192(%1)\;bne %0,%l2\"; ! }" [(set_attr "length" "16") (set_attr "type" "multi")]) (define_expand "prologue" [(clobber (const_int 0))] "" - " { alpha_expand_prologue (); DONE; ! }") ;; These take care of emitting the ldgp insn in the prologue. This will be ;; an lda/ldah pair and we want to align them properly. So we have two --- 6500,6525 ---- (define_insn "prologue_stack_probe_loop" [(unspec_volatile [(match_operand:DI 0 "register_operand" "r") ! (match_operand:DI 1 "register_operand" "r")] ! UNSPECV_PSPL)] "" { operands[2] = gen_label_rtx (); ! ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "L", CODE_LABEL_NUMBER (operands[2])); ! return "stq $31,-8192(%1)\;subq %0,1,%0\;lda %1,-8192(%1)\;bne %0,%l2"; ! } [(set_attr "length" "16") (set_attr "type" "multi")]) (define_expand "prologue" [(clobber (const_int 0))] "" { alpha_expand_prologue (); DONE; ! }) ;; These take care of emitting the ldgp insn in the prologue. This will be ;; an lda/ldah pair and we want to align them properly. So we have two *************** *** 5850,5868 **** ;; with them. (define_expand "prologue_ldgp" ! [(unspec_volatile [(const_int 0)] 9) ! (unspec_volatile [(const_int 0)] 10)] "" ! "") (define_insn "*prologue_ldgp_1" ! [(unspec_volatile [(const_int 0)] 9)] ! "! TARGET_OPEN_VMS && ! TARGET_WINDOWS_NT" ! "ldgp $29,0($27)\\n$%~..ng:") (define_insn "*prologue_ldgp_2" ! [(unspec_volatile [(const_int 0)] 10)] ! "! TARGET_OPEN_VMS && ! TARGET_WINDOWS_NT" "") ;; The _mcount profiling hook has special calling conventions, and --- 6529,6585 ---- ;; with them. (define_expand "prologue_ldgp" ! [(set (match_dup 0) ! (unspec_volatile:DI [(match_dup 1) (match_dup 2)] UNSPECV_LDGP1)) ! (set (match_dup 0) ! (unspec_volatile:DI [(match_dup 0) (match_dup 2)] UNSPECV_PLDGP2))] "" ! { ! operands[0] = pic_offset_table_rtx; ! operands[1] = gen_rtx_REG (Pmode, 27); ! operands[2] = (TARGET_EXPLICIT_RELOCS ! ? GEN_INT (alpha_next_sequence_number++) ! : const0_rtx); ! }) ! ! (define_insn "*ldgp_er_1" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (unspec_volatile:DI [(match_operand:DI 1 "register_operand" "r") ! (match_operand 2 "const_int_operand" "")] ! UNSPECV_LDGP1))] ! "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF" ! "ldah %0,0(%1)\t\t!gpdisp!%2") ! ! (define_insn "*ldgp_er_2" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (unspec:DI [(match_operand:DI 1 "register_operand" "r") ! (match_operand 2 "const_int_operand" "")] ! UNSPEC_LDGP2))] ! "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF" ! "lda %0,0(%1)\t\t!gpdisp!%2") ! ! (define_insn "*prologue_ldgp_er_2" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (unspec_volatile:DI [(match_operand:DI 1 "register_operand" "r") ! (match_operand 2 "const_int_operand" "")] ! UNSPECV_PLDGP2))] ! "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF" ! "lda %0,0(%1)\t\t!gpdisp!%2\n$%~..ng:") (define_insn "*prologue_ldgp_1" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (unspec_volatile:DI [(match_operand:DI 1 "register_operand" "r") ! (match_operand 2 "const_int_operand" "")] ! UNSPECV_LDGP1))] ! "" ! "ldgp %0,0(%1)\n$%~..ng:") (define_insn "*prologue_ldgp_2" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (unspec_volatile:DI [(match_operand:DI 1 "register_operand" "r") ! (match_operand 2 "const_int_operand" "")] ! UNSPECV_PLDGP2))] ! "" "") ;; The _mcount profiling hook has special calling conventions, and *************** *** 5870,5878 **** ;; hide the fact this is a call at all. (define_insn "prologue_mcount" ! [(unspec_volatile [(const_int 0)] 8)] "" ! "lda $28,_mcount\;jsr $28,($28),_mcount" [(set_attr "type" "multi") (set_attr "length" "8")]) --- 6587,6602 ---- ;; hide the fact this is a call at all. (define_insn "prologue_mcount" ! [(unspec_volatile [(const_int 0)] UNSPECV_MCOUNT)] "" ! { ! if (TARGET_EXPLICIT_RELOCS) ! /* Note that we cannot use a lituse_jsr reloc, since _mcount ! cannot be called via the PLT. */ ! return "ldq $28,_mcount($29)\t\t!literal\;jsr $28,($28),_mcount"; ! else ! return "lda $28,_mcount\;jsr $28,($28),_mcount"; ! } [(set_attr "type" "multi") (set_attr "length" "8")]) *************** *** 5881,5904 **** (match_operand:DI 1 "register_operand" "r")) (clobber (mem:BLK (match_operand:DI 2 "register_operand" "=r")))] "" ! "mov %1,%0") (define_expand "epilogue" [(return)] "" - " { alpha_expand_epilogue (); ! }") (define_expand "sibcall_epilogue" [(return)] ! "!TARGET_OPEN_VMS && !TARGET_WINDOWS_NT" ! " { alpha_expand_epilogue (); DONE; ! }") ;; In creating a large stack frame, NT _must_ use ldah+lda to load ;; the frame size into a register. We use this pattern to ensure --- 6605,6626 ---- (match_operand:DI 1 "register_operand" "r")) (clobber (mem:BLK (match_operand:DI 2 "register_operand" "=r")))] "" ! "bis $31,%1,%0") (define_expand "epilogue" [(return)] "" { alpha_expand_epilogue (); ! }) (define_expand "sibcall_epilogue" [(return)] ! "TARGET_ABI_OSF" { alpha_expand_epilogue (); DONE; ! }) ;; In creating a large stack frame, NT _must_ use ldah+lda to load ;; the frame size into a register. We use this pattern to ensure *************** *** 5906,5919 **** (define_insn "nt_lda" [(set (match_operand:DI 0 "register_operand" "=r") (unspec:DI [(match_dup 0) ! (match_operand:DI 1 "const_int_operand" "n")] 6))] "" "lda %0,%1(%0)") (define_expand "builtin_longjmp" [(use (match_operand:DI 0 "register_operand" "r"))] ! "! TARGET_OPEN_VMS && ! TARGET_WINDOWS_NT" ! " { /* The elements of the buffer are, in order: */ rtx fp = gen_rtx_MEM (Pmode, operands[0]); --- 6628,6641 ---- (define_insn "nt_lda" [(set (match_operand:DI 0 "register_operand" "=r") (unspec:DI [(match_dup 0) ! (match_operand:DI 1 "const_int_operand" "n")] ! UNSPEC_NT_LDA))] "" "lda %0,%1(%0)") (define_expand "builtin_longjmp" [(use (match_operand:DI 0 "register_operand" "r"))] ! "TARGET_ABI_OSF" { /* The elements of the buffer are, in order: */ rtx fp = gen_rtx_MEM (Pmode, operands[0]); *************** *** 5934,6004 **** emit_jump_insn (gen_builtin_longjmp_internal (pv)); emit_barrier (); DONE; ! }") ;; This is effectively a copy of indirect_jump, but constrained such ;; that register renaming cannot foil our cunning plan with $27. (define_insn "builtin_longjmp_internal" [(set (pc) ! (unspec_volatile [(match_operand:DI 0 "register_operand" "c")] 3))] "" "jmp $31,(%0),0" [(set_attr "type" "ibr")]) ! (define_insn "*builtin_setjmp_receiver_sub_label" ! [(unspec_volatile [(label_ref (match_operand 0 "" ""))] 2)] ! "! TARGET_OPEN_VMS && ! TARGET_WINDOWS_NT && TARGET_AS_CAN_SUBTRACT_LABELS" ! "\\n$LSJ%=:\;ldgp $29,$LSJ%=-%l0($27)" ! [(set_attr "length" "8") ! (set_attr "type" "multi")]) ! (define_insn "builtin_setjmp_receiver" ! [(unspec_volatile [(label_ref (match_operand 0 "" ""))] 2)] ! "! TARGET_OPEN_VMS && ! TARGET_WINDOWS_NT" ! "br $29,$LSJ%=\\n$LSJ%=:\;ldgp $29,0($29)" [(set_attr "length" "12") (set_attr "type" "multi")]) (define_expand "exception_receiver" ! [(unspec_volatile [(match_dup 0)] 7)] ! "! TARGET_OPEN_VMS && ! TARGET_WINDOWS_NT" ! " { if (TARGET_LD_BUGGY_LDGP) operands[0] = alpha_gp_save_rtx (); else operands[0] = const0_rtx; ! }") (define_insn "*exception_receiver_1" ! [(unspec_volatile [(const_int 0)] 7)] "! TARGET_LD_BUGGY_LDGP" "ldgp $29,0($26)" [(set_attr "length" "8") (set_attr "type" "multi")]) - ;; ??? We don't represent the usage of $29 properly in address loads - ;; and function calls. This leads to the following move being deleted - ;; as dead code unless it is represented as a volatile unspec. - (define_insn "*exception_receiver_2" ! [(unspec_volatile [(match_operand:DI 0 "nonimmediate_operand" "r,m")] 7)] "TARGET_LD_BUGGY_LDGP" ! "@ ! mov %0,$29 ! ldq $29,%0" ! [(set_attr "type" "ilog,ild")]) (define_expand "nonlocal_goto_receiver" ! [(unspec_volatile [(const_int 0)] 1) (set (reg:DI 27) (mem:DI (reg:DI 29))) ! (unspec_volatile [(const_int 0)] 1) (use (reg:DI 27))] ! "TARGET_OPEN_VMS" "") (define_insn "arg_home" ! [(unspec [(const_int 0)] 0) (use (reg:DI 1)) (use (reg:DI 25)) (use (reg:DI 16)) --- 6656,6772 ---- emit_jump_insn (gen_builtin_longjmp_internal (pv)); emit_barrier (); DONE; ! }) ;; This is effectively a copy of indirect_jump, but constrained such ;; that register renaming cannot foil our cunning plan with $27. (define_insn "builtin_longjmp_internal" [(set (pc) ! (unspec_volatile [(match_operand:DI 0 "register_operand" "c")] ! UNSPECV_LONGJMP))] "" "jmp $31,(%0),0" [(set_attr "type" "ibr")]) ! (define_insn "*builtin_setjmp_receiver_er_sl_1" ! [(unspec_volatile [(label_ref (match_operand 0 "" ""))] UNSPECV_SETJMPR)] ! "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF && TARGET_AS_CAN_SUBTRACT_LABELS" ! "lda $27,$LSJ%=-%l0($27)\n$LSJ%=:") ! ! (define_insn "*builtin_setjmp_receiver_er_1" ! [(unspec_volatile [(label_ref (match_operand 0 "" ""))] UNSPECV_SETJMPR)] ! "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF" ! "br $27,$LSJ%=\n$LSJ%=:" ! [(set_attr "type" "ibr")]) ! (define_split ! [(unspec_volatile [(label_ref (match_operand 0 "" ""))] UNSPECV_SETJMPR)] ! "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF ! && prev_nonnote_insn (insn) == operands[0]" ! [(const_int 0)] ! "DONE;") ! ! (define_insn "*builtin_setjmp_receiver_1" ! [(unspec_volatile [(label_ref (match_operand 0 "" ""))] UNSPECV_SETJMPR)] ! "TARGET_ABI_OSF" ! "br $27,$LSJ%=\n$LSJ%=:\;ldgp $29,0($27)" [(set_attr "length" "12") (set_attr "type" "multi")]) + (define_expand "builtin_setjmp_receiver_er" + [(unspec_volatile [(label_ref (match_operand 0 "" ""))] UNSPECV_SETJMPR) + (set (match_dup 1) + (unspec_volatile:DI [(match_dup 2) (match_dup 3)] UNSPECV_LDGP1)) + (set (match_dup 1) + (unspec:DI [(match_dup 1) (match_dup 3)] UNSPEC_LDGP2))] + "" + { + operands[1] = pic_offset_table_rtx; + operands[2] = gen_rtx_REG (Pmode, 27); + operands[3] = GEN_INT (alpha_next_sequence_number++); + }) + + (define_expand "builtin_setjmp_receiver" + [(unspec_volatile [(label_ref (match_operand 0 "" ""))] UNSPECV_SETJMPR)] + "TARGET_ABI_OSF" + { + if (TARGET_EXPLICIT_RELOCS) + { + emit_insn (gen_builtin_setjmp_receiver_er (operands[0])); + DONE; + } + }) + + (define_expand "exception_receiver_er" + [(set (match_dup 0) + (unspec_volatile:DI [(match_dup 1) (match_dup 2)] UNSPECV_LDGP1)) + (set (match_dup 0) + (unspec:DI [(match_dup 0) (match_dup 2)] UNSPEC_LDGP2))] + "" + { + operands[0] = pic_offset_table_rtx; + operands[1] = gen_rtx_REG (Pmode, 26); + operands[2] = GEN_INT (alpha_next_sequence_number++); + }) + (define_expand "exception_receiver" ! [(unspec_volatile [(match_dup 0)] UNSPECV_EHR)] ! "TARGET_ABI_OSF" { if (TARGET_LD_BUGGY_LDGP) operands[0] = alpha_gp_save_rtx (); + else if (TARGET_EXPLICIT_RELOCS) + { + emit_insn (gen_exception_receiver_er ()); + DONE; + } else operands[0] = const0_rtx; ! }) (define_insn "*exception_receiver_1" ! [(unspec_volatile [(const_int 0)] UNSPECV_EHR)] "! TARGET_LD_BUGGY_LDGP" "ldgp $29,0($26)" [(set_attr "length" "8") (set_attr "type" "multi")]) (define_insn "*exception_receiver_2" ! [(unspec_volatile [(match_operand:DI 0 "memory_operand" "m")] UNSPECV_EHR)] "TARGET_LD_BUGGY_LDGP" ! "ldq $29,%0" ! [(set_attr "type" "ild")]) (define_expand "nonlocal_goto_receiver" ! [(unspec_volatile [(const_int 0)] UNSPECV_BLOCKAGE) (set (reg:DI 27) (mem:DI (reg:DI 29))) ! (unspec_volatile [(const_int 0)] UNSPECV_BLOCKAGE) (use (reg:DI 27))] ! "TARGET_ABI_OPEN_VMS" "") (define_insn "arg_home" ! [(unspec [(const_int 0)] UNSPEC_ARG_HOME) (use (reg:DI 1)) (use (reg:DI 25)) (use (reg:DI 16)) *************** *** 6017,6071 **** (clobber (reg:DI 24)) (clobber (reg:DI 25)) (clobber (reg:DI 0))] ! "TARGET_OPEN_VMS" "lda $0,OTS$HOME_ARGS\;ldq $0,8($0)\;jsr $0,OTS$HOME_ARGS" [(set_attr "length" "16") (set_attr "type" "multi")]) ! ;; Close the trap shadow of preceeding instructions. This is generated ;; by alpha_reorg. (define_insn "trapb" ! [(unspec_volatile [(const_int 0)] 4)] "" "trapb" [(set_attr "type" "misc")]) ! ;; No-op instructions used by machine-dependant reorg to preserve ;; alignment for instruction issue. (define_insn "nop" [(const_int 0)] "" ! "nop" [(set_attr "type" "ilog")]) (define_insn "fnop" [(const_int 1)] "TARGET_FP" ! "fnop" [(set_attr "type" "fcpys")]) (define_insn "unop" [(const_int 2)] "" ! "unop") (define_insn "realign" ! [(unspec_volatile [(match_operand 0 "immediate_operand" "i")] 6)] "" ! ".align %0 #realign") ;; The call patterns are at the end of the file because their ;; wildcard operand0 interferes with nice recognition. (define_insn "*call_value_osf_1" [(set (match_operand 0 "" "") ! (call (mem:DI (match_operand:DI 1 "call_operand" "c,R,i")) (match_operand 2 "" ""))) ! (clobber (reg:DI 27)) (clobber (reg:DI 26))] ! "! TARGET_WINDOWS_NT && ! TARGET_OPEN_VMS" "@ jsr $26,($27),0\;ldgp $29,0($26) bsr $26,$%1..ng --- 6785,7053 ---- (clobber (reg:DI 24)) (clobber (reg:DI 25)) (clobber (reg:DI 0))] ! "TARGET_ABI_OPEN_VMS" "lda $0,OTS$HOME_ARGS\;ldq $0,8($0)\;jsr $0,OTS$HOME_ARGS" [(set_attr "length" "16") (set_attr "type" "multi")]) ! ;; Load the CIW into r2 for calling __T3E_MISMATCH ! ! (define_expand "umk_mismatch_args" ! [(set:DI (match_dup 1) (mem:DI (plus:DI (reg:DI 15) (const_int -16)))) ! (set:DI (match_dup 2) (mem:DI (plus:DI (match_dup 1) (const_int -32)))) ! (set:DI (reg:DI 1) (match_operand:DI 0 "const_int_operand" "")) ! (set:DI (match_dup 3) (plus:DI (mult:DI (reg:DI 25) ! (const_int 8)) ! (match_dup 2))) ! (set:DI (reg:DI 2) (mem:DI (match_dup 3)))] ! "TARGET_ABI_UNICOSMK" ! { ! operands[1] = gen_reg_rtx (DImode); ! operands[2] = gen_reg_rtx (DImode); ! operands[3] = gen_reg_rtx (DImode); ! }) ! ! (define_insn "arg_home_umk" ! [(unspec [(const_int 0)] UNSPEC_ARG_HOME) ! (use (reg:DI 1)) ! (use (reg:DI 2)) ! (use (reg:DI 16)) ! (use (reg:DI 17)) ! (use (reg:DI 18)) ! (use (reg:DI 19)) ! (use (reg:DI 20)) ! (use (reg:DI 21)) ! (use (reg:DI 48)) ! (use (reg:DI 49)) ! (use (reg:DI 50)) ! (use (reg:DI 51)) ! (use (reg:DI 52)) ! (use (reg:DI 53)) ! (clobber (mem:BLK (const_int 0))) ! (parallel [ ! (clobber (reg:DI 22)) ! (clobber (reg:DI 23)) ! (clobber (reg:DI 24)) ! (clobber (reg:DI 0)) ! (clobber (reg:DI 1)) ! (clobber (reg:DI 2)) ! (clobber (reg:DI 3)) ! (clobber (reg:DI 4)) ! (clobber (reg:DI 5)) ! (clobber (reg:DI 6)) ! (clobber (reg:DI 7)) ! (clobber (reg:DI 8))])] ! "TARGET_ABI_UNICOSMK" ! "laum $4,__T3E_MISMATCH($31)\;sll $4,32,$4\;lalm $4,__T3E_MISMATCH($4)\;lal $4,__T3E_MISMATCH($4)\;jsr $3,($4)" ! [(set_attr "length" "16") ! (set_attr "type" "multi")]) ! ! ;; Prefetch data. ! ;; ! ;; On EV4, these instructions are nops -- no load occurs. ! ;; ! ;; On EV5, these instructions act as a normal load, and thus can trap ! ;; if the address is invalid. The OS may (or may not) handle this in ! ;; the entMM fault handler and suppress the fault. If so, then this ! ;; has the effect of a read prefetch instruction. ! ;; ! ;; On EV6, these become official prefetch instructions. ! ! (define_insn "prefetch" ! [(prefetch (match_operand:DI 0 "address_operand" "p") ! (match_operand:DI 1 "const_int_operand" "n") ! (match_operand:DI 2 "const_int_operand" "n"))] ! "TARGET_FIXUP_EV5_PREFETCH || TARGET_CPU_EV6" ! { ! /* Interpret "no temporal locality" as this data should be evicted once ! it is used. The "evict next" alternatives load the data into the cache ! and leave the LRU eviction counter pointing to that block. */ ! static const char * const alt[2][2] = { ! { ! "lds $f31,%a0", /* read, evict next */ ! "ldl $31,%a0", /* read, evict last */ ! }, ! { ! "ldt $f31,%a0", /* write, evict next */ ! "ldq $31,%a0", /* write, evict last */ ! } ! }; ! ! bool write = INTVAL (operands[1]) != 0; ! bool lru = INTVAL (operands[2]) != 0; ! ! return alt[write][lru]; ! } ! [(set_attr "type" "ild")]) ! ! ;; Close the trap shadow of preceding instructions. This is generated ;; by alpha_reorg. (define_insn "trapb" ! [(unspec_volatile [(const_int 0)] UNSPECV_TRAPB)] "" "trapb" [(set_attr "type" "misc")]) ! ;; No-op instructions used by machine-dependent reorg to preserve ;; alignment for instruction issue. + ;; The Unicos/Mk assembler does not support these opcodes. (define_insn "nop" [(const_int 0)] "" ! "bis $31,$31,$31" [(set_attr "type" "ilog")]) (define_insn "fnop" [(const_int 1)] "TARGET_FP" ! "cpys $f31,$f31,$f31" [(set_attr "type" "fcpys")]) (define_insn "unop" [(const_int 2)] "" ! "ldq_u $31,0($30)") ! ! ;; On Unicos/Mk we use a macro for aligning code. (define_insn "realign" ! [(unspec_volatile [(match_operand 0 "immediate_operand" "i")] ! UNSPECV_REALIGN)] "" ! { ! if (TARGET_ABI_UNICOSMK) ! return "gcc@code@align %0"; ! else ! return ".align %0 #realign"; ! }) ;; The call patterns are at the end of the file because their ;; wildcard operand0 interferes with nice recognition. + (define_insn "*call_value_osf_1_er" + [(set (match_operand 0 "" "") + (call (mem:DI (match_operand:DI 1 "call_operand" "c,R,s")) + (match_operand 2 "" ""))) + (use (reg:DI 29)) + (clobber (reg:DI 26))] + "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF" + "@ + jsr $26,(%1),0\;ldah $29,0($26)\t\t!gpdisp!%*\;lda $29,0($29)\t\t!gpdisp!%* + bsr $26,$%1..ng + ldq $27,%1($29)\t\t!literal!%#\;jsr $26,($27),0\t\t!lituse_jsr!%#\;ldah $29,0($26)\t\t!gpdisp!%*\;lda $29,0($29)\t\t!gpdisp!%*" + [(set_attr "type" "jsr") + (set_attr "length" "12,*,16")]) + + ;; We must use peep2 instead of a split because we need accurate life + ;; information for $gp. Consider the case of { bar(); while (1); }. + (define_peephole2 + [(parallel [(set (match_operand 0 "" "") + (call (mem:DI (match_operand:DI 1 "call_operand" "")) + (match_operand 2 "" ""))) + (use (reg:DI 29)) + (clobber (reg:DI 26))])] + "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF && reload_completed + && ! current_file_function_operand (operands[1], Pmode) + && peep2_regno_dead_p (1, 29)" + [(parallel [(set (match_dup 0) + (call (mem:DI (match_dup 3)) + (match_dup 2))) + (set (reg:DI 26) (plus:DI (pc) (const_int 4))) + (unspec_volatile [(reg:DI 29)] UNSPECV_BLOCKAGE) + (use (match_dup 1)) + (use (match_dup 4))])] + { + if (CONSTANT_P (operands[1])) + { + operands[3] = gen_rtx_REG (Pmode, 27); + operands[4] = GEN_INT (alpha_next_sequence_number++); + emit_insn (gen_movdi_er_high_g (operands[3], pic_offset_table_rtx, + operands[1], operands[4])); + } + else + { + operands[3] = operands[1]; + operands[1] = const0_rtx; + operands[4] = const0_rtx; + } + }) + + (define_peephole2 + [(parallel [(set (match_operand 0 "" "") + (call (mem:DI (match_operand:DI 1 "call_operand" "")) + (match_operand 2 "" ""))) + (use (reg:DI 29)) + (clobber (reg:DI 26))])] + "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF && reload_completed + && ! current_file_function_operand (operands[1], Pmode) + && ! peep2_regno_dead_p (1, 29)" + [(parallel [(set (match_dup 0) + (call (mem:DI (match_dup 3)) + (match_dup 2))) + (set (reg:DI 26) (plus:DI (pc) (const_int 4))) + (unspec_volatile [(reg:DI 29)] UNSPECV_BLOCKAGE) + (use (match_dup 1)) + (use (match_dup 5))]) + (set (reg:DI 29) + (unspec_volatile:DI [(reg:DI 26) (match_dup 4)] UNSPECV_LDGP1)) + (set (reg:DI 29) + (unspec:DI [(reg:DI 29) (match_dup 4)] UNSPEC_LDGP2))] + { + if (CONSTANT_P (operands[1])) + { + operands[3] = gen_rtx_REG (Pmode, 27); + operands[5] = GEN_INT (alpha_next_sequence_number++); + emit_insn (gen_movdi_er_high_g (operands[3], pic_offset_table_rtx, + operands[1], operands[5])); + } + else + { + operands[3] = operands[1]; + operands[1] = const0_rtx; + operands[5] = const0_rtx; + } + operands[4] = GEN_INT (alpha_next_sequence_number++); + }) + + ;; We add a blockage unspec_volatile to prevent insns from moving down + ;; from above the call to in between the call and the ldah gpdisp. + (define_insn "*call_value_osf_2_er" + [(set (match_operand 0 "" "") + (call (mem:DI (match_operand:DI 1 "register_operand" "c")) + (match_operand 2 "" ""))) + (set (reg:DI 26) + (plus:DI (pc) (const_int 4))) + (unspec_volatile [(reg:DI 29)] UNSPECV_BLOCKAGE) + (use (match_operand 3 "" "")) + (use (match_operand 4 "const_int_operand" ""))] + "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF" + "jsr $26,(%1),%3%J4" + [(set_attr "type" "jsr")]) + + (define_insn "*call_value_osf_1_noreturn" + [(set (match_operand 0 "" "") + (call (mem:DI (match_operand:DI 1 "call_operand" "c,R,s")) + (match_operand 2 "" ""))) + (use (reg:DI 29)) + (clobber (reg:DI 26))] + "! TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF + && find_reg_note (insn, REG_NORETURN, NULL_RTX)" + "@ + jsr $26,($27),0 + bsr $26,$%1..ng + jsr $26,%1" + [(set_attr "type" "jsr") + (set_attr "length" "*,*,8")]) + (define_insn "*call_value_osf_1" [(set (match_operand 0 "" "") ! (call (mem:DI (match_operand:DI 1 "call_operand" "c,R,s")) (match_operand 2 "" ""))) ! (use (reg:DI 29)) (clobber (reg:DI 26))] ! "! TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF" "@ jsr $26,($27),0\;ldgp $29,0($26) bsr $26,$%1..ng *************** *** 6073,6095 **** [(set_attr "type" "jsr") (set_attr "length" "12,*,16")]) (define_insn "*sibcall_value_osf_1" [(set (match_operand 0 "" "") ! (call (mem:DI (match_operand:DI 1 "call_operand" "R,i")) ! (match_operand 2 "" "")))] ! "! TARGET_WINDOWS_NT && ! TARGET_OPEN_VMS" "@ br $31,$%1..ng ! jmp $31,%1" [(set_attr "type" "jsr") (set_attr "length" "*,8")]) (define_insn "*call_value_nt_1" [(set (match_operand 0 "" "") ! (call (mem:DI (match_operand:DI 1 "call_operand" "r,R,i")) (match_operand 2 "" ""))) (clobber (reg:DI 26))] ! "TARGET_WINDOWS_NT" "@ jsr $26,(%1) bsr $26,%1 --- 7055,7090 ---- [(set_attr "type" "jsr") (set_attr "length" "12,*,16")]) + (define_insn "*sibcall_value_osf_1_er" + [(set (match_operand 0 "" "") + (call (mem:DI (match_operand:DI 1 "symbolic_operand" "R,s")) + (match_operand 2 "" ""))) + (unspec [(reg:DI 29)] UNSPEC_SIBCALL)] + "TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF" + "@ + br $31,$%1..ng + ldq $27,%1($29)\t\t!literal!%#\;jmp $31,($27),%1\t\t!lituse_jsr!%#" + [(set_attr "type" "jsr") + (set_attr "length" "*,8")]) + (define_insn "*sibcall_value_osf_1" [(set (match_operand 0 "" "") ! (call (mem:DI (match_operand:DI 1 "symbolic_operand" "R,s")) ! (match_operand 2 "" ""))) ! (unspec [(reg:DI 29)] UNSPEC_SIBCALL)] ! "! TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF" "@ br $31,$%1..ng ! lda $27,%1\;jmp $31,($27),%1" [(set_attr "type" "jsr") (set_attr "length" "*,8")]) (define_insn "*call_value_nt_1" [(set (match_operand 0 "" "") ! (call (mem:DI (match_operand:DI 1 "call_operand" "r,R,s")) (match_operand 2 "" ""))) (clobber (reg:DI 26))] ! "TARGET_ABI_WINDOWS_NT" "@ jsr $26,(%1) bsr $26,%1 *************** *** 6099,6113 **** (define_insn "*call_value_vms_1" [(set (match_operand 0 "" "") ! (call (mem:DI (match_operand:DI 1 "call_operand" "r,i")) (match_operand 2 "" ""))) (use (match_operand:DI 3 "nonimmediate_operand" "r,m")) (use (reg:DI 25)) (use (reg:DI 26)) (clobber (reg:DI 27))] ! "TARGET_OPEN_VMS" "@ mov %3,$27\;jsr $26,0\;ldq $27,0($29) ldq $27,%3\;jsr $26,%1\;ldq $27,0($29)" [(set_attr "type" "jsr") (set_attr "length" "12,16")]) --- 7094,7119 ---- (define_insn "*call_value_vms_1" [(set (match_operand 0 "" "") ! (call (mem:DI (match_operand:DI 1 "call_operand" "r,s")) (match_operand 2 "" ""))) (use (match_operand:DI 3 "nonimmediate_operand" "r,m")) (use (reg:DI 25)) (use (reg:DI 26)) (clobber (reg:DI 27))] ! "TARGET_ABI_OPEN_VMS" "@ mov %3,$27\;jsr $26,0\;ldq $27,0($29) ldq $27,%3\;jsr $26,%1\;ldq $27,0($29)" [(set_attr "type" "jsr") (set_attr "length" "12,16")]) + + (define_insn "*call_value_umk" + [(set (match_operand 0 "" "") + (call (mem:DI (match_operand:DI 1 "call_operand" "r")) + (match_operand 2 "" ""))) + (use (reg:DI 25)) + (clobber (reg:DI 26))] + "TARGET_ABI_UNICOSMK" + "jsr $26,(%1)" + [(set_attr "type" "jsr")]) + diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/alpha32.h gcc-3.1/gcc/config/alpha/alpha32.h *** gcc-3.0.4/gcc/config/alpha/alpha32.h Fri Dec 1 00:32:12 2000 --- gcc-3.1/gcc/config/alpha/alpha32.h Sun Dec 9 21:47:49 2001 *************** along with GNU CC; see the file COPYING. *** 30,42 **** the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ! #undef TARGET_WINDOWS_NT ! #define TARGET_WINDOWS_NT 1 /* WinNT (and thus Interix) use unsigned int */ #define SIZE_TYPE "unsigned int" ! /* Pointer is 32 bits but the hardware has 64-bit addresses, sign extended. */ #undef POINTER_SIZE #define POINTER_SIZE 32 #define POINTERS_EXTEND_UNSIGNED 0 --- 30,42 ---- the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ! #undef TARGET_ABI_WINDOWS_NT ! #define TARGET_ABI_WINDOWS_NT 1 /* WinNT (and thus Interix) use unsigned int */ #define SIZE_TYPE "unsigned int" ! /* Pointer is 32 bits but the hardware has 64-bit addresses, sign extended. */ #undef POINTER_SIZE #define POINTER_SIZE 32 #define POINTERS_EXTEND_UNSIGNED 0 *************** Boston, MA 02111-1307, USA. */ *** 71,107 **** #undef TRAMPOLINE_SIZE #define TRAMPOLINE_SIZE 24 /* Emit RTL insns to initialize the variable parts of a trampoline. FNADDR is an RTX for the address of the function's pure code. ! CXT is an RTX for the static chain value for the function. */ #undef INITIALIZE_TRAMPOLINE #define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \ alpha_initialize_trampoline (TRAMP, FNADDR, CXT, 20, 16, 12) - - /* Output code to add DELTA to the first argument, and then jump to FUNCTION. - Used for C++ multiple inheritance. */ - /* ??? This is only used with the v2 ABI, and alpha.c makes assumptions - about current_function_is_thunk that are not valid with the v3 ABI. */ - #if 0 - #undef ASM_OUTPUT_MI_THUNK - #define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \ - do { \ - const char *op, *fn_name = XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0); \ - int reg; \ - \ - /* Mark end of prologue. */ \ - output_end_prologue (FILE); \ - \ - /* Rely on the assembler to macro expand a large delta. */ \ - reg = aggregate_value_p (TREE_TYPE (TREE_TYPE (FUNCTION))) ? 17 : 16; \ - fprintf (FILE, "\tlda $%d,%ld($%d)\n", reg, (long)(DELTA), reg); \ - \ - op = "jsr"; \ - if (current_file_function_operand (XEXP (DECL_RTL (FUNCTION), 0))) \ - op = "br"; \ - fprintf (FILE, "\t%s $31,", op); \ - assemble_name (FILE, fn_name); \ - fputc ('\n', FILE); \ - } while (0) - #endif --- 71,85 ---- #undef TRAMPOLINE_SIZE #define TRAMPOLINE_SIZE 24 + /* The alignment of a trampoline, in bits. */ + + #undef TRAMPOLINE_ALIGNMENT + #define TRAMPOLINE_ALIGNMENT 32 + /* Emit RTL insns to initialize the variable parts of a trampoline. FNADDR is an RTX for the address of the function's pure code. ! CXT is an RTX for the static chain value for the function. */ #undef INITIALIZE_TRAMPOLINE #define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \ alpha_initialize_trampoline (TRAMP, FNADDR, CXT, 20, 16, 12) diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/config-nt.sed gcc-3.1/gcc/config/alpha/config-nt.sed *** gcc-3.0.4/gcc/config/alpha/config-nt.sed Wed Dec 16 21:00:52 1998 --- gcc-3.1/gcc/config/alpha/config-nt.sed Thu Jan 1 00:00:00 1970 *************** *** 1,33 **** - /^Makefile/,/^ rm -f config.run/d - s/rm -f/del/ - s/|| cp/|| copy/ - /^config.status/,/ fi/d - s/config.status//g - s/\/dev\/null/NUL/g - s/$(srcdir)\/c-parse/c-parse/g - s/$(srcdir)\/c-gperf/c-gperf/g - /^multilib.h/ s/multilib/not-multilib/ - /^target=/ c\ - target=winnt3.5 - /^xmake_file=/ d - /^tmake_file=/ d - /^out_file/ c\ - out_file=config/alpha/alpha.c - /^out_object_file/ c\ - out_object_file=alpha.obj - /^md_file/ c\ - md_file=config/alpha/alpha.md - /^tm_file/ c\ - tm_file=config/alpha/alpha.h config/alpha/winnt.h - /^build_xm_file/ c\ - build_xm_file=config/alpha/xm-alpha.h config/winnt/xm-winnt.h config/alpha/xm-winnt.h - /^host_xm_file/ c\ - host_xm_file=config/alpha/xm-alpha.h config/winnt/xm-winnt.h config/alpha/xm-winnt.h - /^####target/ i\ - CC = cl \ - CLIB = libc.lib kernel32.lib \ - CFLAGS = -Dalpha -DWIN32 -D_WIN32 -D_ALPHA_ -D_M_ALPHA \\\ - -DALMOST_STDC \ - LDFLAGS = -subsystem:console -entry:mainCRTStartup \\\ - -stack:1000000,1000 \ - --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/crtbegin.asm gcc-3.1/gcc/config/alpha/crtbegin.asm *** gcc-3.0.4/gcc/config/alpha/crtbegin.asm Sat Apr 29 21:12:45 2000 --- gcc-3.1/gcc/config/alpha/crtbegin.asm Thu Jan 1 00:00:00 1970 *************** *** 1,218 **** - /* - * Copyright (C) 1996, 1998, 2000 Free Software Foundation, Inc. - * Contributed by Richard Henderson (rth@tamu.edu) - * - * This file is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2, or (at your option) any - * later version. - * - * In addition to the permissions in the GNU General Public License, the - * Free Software Foundation gives you unlimited permission to link the - * compiled version of this file with other programs, and to distribute - * those programs without any restriction coming from the use of this - * file. (The General Public License restrictions do apply in other - * respects; for example, they cover modification of the file, and - * distribution when not linked into another program.) - * - * This file 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; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * As a special exception, if you link this library with files - * compiled with GCC to produce an executable, this does not cause - * the resulting executable to be covered by the GNU General Public License. - * This exception does not however invalidate any other reasons why - * the executable file might be covered by the GNU General Public License. - */ - - #include "auto-host.h" - - - /* - * Heads of the constructor/destructor lists. - */ - - /* The __*TOR_LIST__ symbols are not global because when this file is used - in a shared library, we do not want the symbol to fall over to the - application's lists. */ - - .section .ctors,"aw" - - .align 3 - __CTOR_LIST__: - .quad -1 - - .section .dtors,"aw" - - .align 3 - __DTOR_LIST__: - .quad -1 - - .section .eh_frame,"aw" - __EH_FRAME_BEGIN__: - - /* - * Fragment of the ELF _fini routine that invokes our dtor cleanup. - */ - - .section .fini,"ax" - - /* Since the bits of the _fini function are spread across many - object files, each potentially with its own GP, we must - assume we need to load ours. Further, our .fini section - can easily be more than 4MB away from our .text bits so we - can't use bsr. */ - - br $29,1f - 1: ldgp $29,0($29) - jsr $26,__do_global_dtors_aux - - /* Must match the alignment we got from crti.o else we get - zero-filled holes in our _fini function and then SIGILL. */ - .align 3 - - /* - * Fragment of the ELF _init routine that sets up the frame info. - */ - - .section .init,"ax" - br $29,1f - 1: ldgp $29,0($29) - jsr $26,__do_frame_setup - .align 3 - - /* - * Invoke our destructors in order. - */ - - .section .sdata - - /* Support recursive calls to exit. */ - .type dtor_ptr,@object - .size dtor_ptr,8 - dtor_ptr: - .quad __DTOR_LIST__ + 8 - - /* A globally unique widget for c++ local destructors to hang off. - - This has a unique value in every dso; in the main program its - value is zero. The object should be protected. This means the - instance in any dso or the main program is not used in any other - dso. The dynamic linker takes care of this. */ - - .global __dso_handle - .type __dso_handle,@object - .size __dso_handle,8 - #ifdef SHARED - .section .data - .align 3 - __dso_handle: - .quad __dso_handle - #else - .section .bss - .align 3 - __dso_handle: - .zero 8 - #endif - #ifdef HAVE_GAS_HIDDEN - .hidden __dso_handle - #endif - - .text - - .align 3 - .ent __do_global_dtors_aux - - __do_global_dtors_aux: - ldgp $29,0($27) - lda $30,-16($30) - .frame $30,16,$26,0 - stq $9,8($30) - stq $26,0($30) - .mask 0x4000200,-16 - .prologue 1 - - #ifdef SHARED - /* Do c++ local destructors. */ - lda $1,__cxa_finalize - beq $1,0f - lda $16,__dso_handle - jsr $26,__cxa_finalize - ldgp $29,0($26) - #endif - - 0: lda $9,dtor_ptr - br 2f - 1: stq $1,0($9) - jsr $26,($27) - ldgp $29,0($26) - 2: ldq $1,0($9) - ldq $27,0($1) - addq $1,8,$1 - bne $27,1b - - /* Remove our frame info. */ - lda $1,__deregister_frame_info - beq $1,3f - lda $16,__EH_FRAME_BEGIN__ - jsr $26,__deregister_frame_info - ldgp $29,0($26) - - 3: ldq $26,0($30) - ldq $9,8($30) - lda $30,16($30) - ret - - .end __do_global_dtors_aux - - /* - * Install our frame info. - */ - - /* ??? How can we rationally keep this size correct? */ - - .section .bss - .type frame_object,@object - .size frame_object, 48 - .align 3 - frame_object: - .zero 48 - - .text - - .align 3 - .ent __do_frame_setup - - __do_frame_setup: - ldgp $29,0($27) - lda $30,-16($30) - .frame $30,16,$26,0 - stq $26,0($30) - .mask 0x4000000,-16 - .prologue 1 - - lda $1,__register_frame_info - beq $1,0f - lda $16,__EH_FRAME_BEGIN__ - lda $17,frame_object - jsr $26,__register_frame_info - ldgp $29,0($26) - - ldq $26,0($30) - 0: lda $30,16($30) - ret - - .end __do_frame_setup - - .weak __register_frame_info - .weak __deregister_frame_info - #ifdef SHARED - .weak __cxa_finalize - #endif --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/crtend.asm gcc-3.1/gcc/config/alpha/crtend.asm *** gcc-3.0.4/gcc/config/alpha/crtend.asm Sat Apr 29 21:12:45 2000 --- gcc-3.1/gcc/config/alpha/crtend.asm Thu Jan 1 00:00:00 1970 *************** *** 1,110 **** - /* - * Copyright (C) 1996, 2000 Free Software Foundation, Inc. - * Contributed by Richard Henderson (rth@tamu.edu) - * - * This file is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2, or (at your option) any - * later version. - * - * In addition to the permissions in the GNU General Public License, the - * Free Software Foundation gives you unlimited permission to link the - * compiled version of this file with other programs, and to distribute - * those programs without any restriction coming from the use of this - * file. (The General Public License restrictions do apply in other - * respects; for example, they cover modification of the file, and - * distribution when not linked into another program.) - * - * This file 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; see the file COPYING. If not, write to - * the Free Software Foundation, 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * As a special exception, if you link this library with files - * compiled with GCC to produce an executable, this does not cause - * the resulting executable to be covered by the GNU General Public License. - * This exception does not however invalidate any other reasons why - * the executable file might be covered by the GNU General Public License. - */ - - /* - * Tails of the constructor/destructor lists. - */ - - /* The __*TOR_END__ symbols are not global because when this file is used - in a shared library, we do not want the symbol to fall over to the - application's lists. */ - - .section .ctors,"aw" - - .align 3 - __CTOR_END__: - .quad 0 - - .section .dtors,"aw" - - .align 3 - __DTOR_END__: - .quad 0 - - .section .eh_frame,"aw" - __FRAME_END__: - .quad 0 - - /* - * Fragment of the ELF _init routine that invokes our ctor startup - */ - - .section .init,"ax" - - /* Since the bits of the _init function are spread across many - object files, each potentially with its own GP, we must - assume we need to load ours. Further, our .init section - can easily be more than 4MB away from our .text bits so we - can't use bsr. */ - - br $29,1f - 1: ldgp $29,0($29) - jsr $26,__do_global_ctors_aux - - /* Must match the alignment we got from crti.o else we get - zero-filled holes in our _init function and thense SIGILL. */ - .align 3 - - /* - * Invoke our constructors in order. - */ - - .text - - .align 3 - .ent __do_global_ctors_aux - - __do_global_ctors_aux: - ldgp $29,0($27) - lda $30,-16($30) - .frame $30,16,$26,0 - stq $9,8($30) - stq $26,0($30) - .mask 0x4000200,-16 - .prologue 1 - - lda $9,__CTOR_END__-8 - br 1f - 0: jsr $26,($27) - 1: ldq $27,0($9) - subq $9,8,$9 - not $27,$0 - bne $0,0b - - ldq $26,0($30) - ldq $9,8($30) - lda $30,16($30) - ret - - .end __do_global_ctors_aux --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/crtfastmath.c gcc-3.1/gcc/config/alpha/crtfastmath.c *** gcc-3.0.4/gcc/config/alpha/crtfastmath.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/alpha/crtfastmath.c Sun Jun 24 02:05:06 2001 *************** *** 0 **** --- 1,46 ---- + /* + * Copyright (C) 2001 Free Software Foundation, Inc. + * Contributed by Richard Henderson (rth@redhat.com) + * + * This file is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2, or (at your option) any + * later version. + * + * In addition to the permissions in the GNU General Public License, the + * Free Software Foundation gives you unlimited permission to link the + * compiled version of this file with other programs, and to distribute + * those programs without any restriction coming from the use of this + * file. (The General Public License restrictions do apply in other + * respects; for example, they cover modification of the file, and + * distribution when not linked into another program.) + * + * This file 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; see the file COPYING. If not, write to + * the Free Software Foundation, 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * As a special exception, if you link this library with files + * compiled with GCC to produce an executable, this does not cause + * the resulting executable to be covered by the GNU General Public License. + * This exception does not however invalidate any other reasons why + * the executable file might be covered by the GNU General Public License. + */ + + /* Assume OSF/1 compatible interfaces. */ + + extern void __ieee_set_fp_control (unsigned long int); + + #define IEEE_MAP_DMZ (1UL<<12) /* Map denorm inputs to zero */ + #define IEEE_MAP_UMZ (1UL<<13) /* Map underflowed outputs to zero */ + + static void __attribute__((constructor)) + set_fast_math (void) + { + __ieee_set_fp_control (IEEE_MAP_DMZ | IEEE_MAP_UMZ); + } diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/elf.h gcc-3.1/gcc/config/alpha/elf.h *** gcc-3.0.4/gcc/config/alpha/elf.h Fri Jun 8 19:48:35 2001 --- gcc-3.1/gcc/config/alpha/elf.h Sun Mar 31 11:52:08 2002 *************** *** 1,5 **** /* Definitions of target machine for GNU compiler, for DEC Alpha w/ELF. ! Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. Contributed by Richard Henderson (rth@tamu.edu). This file is part of GNU CC. --- 1,6 ---- /* Definitions of target machine for GNU compiler, for DEC Alpha w/ELF. ! Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002 ! Free Software Foundation, Inc. Contributed by Richard Henderson (rth@tamu.edu). This file is part of GNU CC. *************** Boston, MA 02111-1307, USA. */ *** 23,28 **** --- 24,32 ---- #undef EXTENDED_COFF #define OBJECT_FORMAT_ELF + /* ??? Move all SDB stuff from alpha.h to osf.h. */ + #undef SDB_DEBUGGING_INFO + #define DBX_DEBUGGING_INFO #define DWARF2_DEBUGGING_INFO *************** do { \ *** 58,63 **** --- 62,69 ---- } \ fprintf (FILE, "\t.set noat\n"); \ fprintf (FILE, "\t.set noreorder\n"); \ + if (TARGET_EXPLICIT_RELOCS) \ + fprintf (FILE, "\t.set nomacro\n"); \ if (TARGET_BWX | TARGET_MAX | TARGET_FIX | TARGET_CIX) \ { \ fprintf (FILE, "\t.arch %s\n", \ *************** do { \ *** 162,172 **** ASM_OUTPUT_SKIP((FILE), (SIZE)); \ } while (0) ! /* This is the pseudo-op used to generate a 64-bit word of data with a ! specific value in some section. */ ! #undef INT_ASM_OP ! #define INT_ASM_OP "\t.quad\t" /* Biggest alignment supported by the object file format of this machine. Use this macro to limit the alignment which can be --- 168,182 ---- ASM_OUTPUT_SKIP((FILE), (SIZE)); \ } while (0) ! /* This says how to output assembler code to declare an ! uninitialized external linkage data object. */ ! #undef ASM_OUTPUT_ALIGNED_BSS ! #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ ! do { \ ! ASM_GLOBALIZE_LABEL (FILE, NAME); \ ! ASM_OUTPUT_ALIGNED_LOCAL (FILE, NAME, SIZE, ALIGN); \ ! } while (0) /* Biggest alignment supported by the object file format of this machine. Use this macro to limit the alignment which can be *************** do { \ *** 202,228 **** #undef CONST_SECTION_ASM_OP #define CONST_SECTION_ASM_OP "\t.section\t.rodata" - /* Define the pseudo-ops used to switch to the .ctors and .dtors sections. - - Note that we want to give these sections the SHF_WRITE attribute - because these sections will actually contain data (i.e. tables of - addresses of functions in the current root executable or shared library - file) and, in the case of a shared library, the relocatable addresses - will have to be properly resolved/relocated (and then written into) by - the dynamic linker when it actually attaches the given shared library - to the executing process. (Note that on SVR4, you may wish to use the - `-z text' option to the ELF linker, when building a shared library, as - an additional check that you are doing everything right. But if you do - use the `-z text' option when building a shared library, you will get - errors unless the .ctors and .dtors sections are marked as writable - via the SHF_WRITE attribute.) */ - - #undef CTORS_SECTION_ASM_OP - #define CTORS_SECTION_ASM_OP "\t.section\t.ctors,\"aw\"" - #undef DTORS_SECTION_ASM_OP - #define DTORS_SECTION_ASM_OP "\t.section\t.dtors,\"aw\"" - - /* Handle the small data sections. */ #undef BSS_SECTION_ASM_OP #define BSS_SECTION_ASM_OP "\t.section\t.bss" #undef SBSS_SECTION_ASM_OP --- 212,217 ---- *************** do { \ *** 241,253 **** #undef FINI_SECTION_ASM_OP #define FINI_SECTION_ASM_OP "\t.section\t.fini" /* A default list of other sections which we might be "in" at any given time. For targets that use additional sections (e.g. .tdesc) you should override this definition in the target-specific file which includes this file. */ #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_const, in_ctors, in_dtors, in_sbss, in_sdata /* A default list of extra section function definitions. For targets that use additional sections (e.g. .tdesc) you should override this --- 230,252 ---- #undef FINI_SECTION_ASM_OP #define FINI_SECTION_ASM_OP "\t.section\t.fini" + #ifdef HAVE_GAS_SUBSECTION_ORDERING + + #define ASM_SECTION_START_OP "\t.subsection\t-1" + + /* Output assembly directive to move to the beginning of current section. */ + #define ASM_OUTPUT_SECTION_START(FILE) \ + fprintf ((FILE), "%s\n", ASM_SECTION_START_OP) + + #endif + /* A default list of other sections which we might be "in" at any given time. For targets that use additional sections (e.g. .tdesc) you should override this definition in the target-specific file which includes this file. */ #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_const, in_sbss, in_sdata /* A default list of extra section function definitions. For targets that use additional sections (e.g. .tdesc) you should override this *************** do { \ *** 256,268 **** #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ CONST_SECTION_FUNCTION \ - SECTION_FUNCTION_TEMPLATE(ctors_section, in_ctors, CTORS_SECTION_ASM_OP) \ - SECTION_FUNCTION_TEMPLATE(dtors_section, in_dtors, DTORS_SECTION_ASM_OP) \ SECTION_FUNCTION_TEMPLATE(sbss_section, in_sbss, SBSS_SECTION_ASM_OP) \ SECTION_FUNCTION_TEMPLATE(sdata_section, in_sdata, SDATA_SECTION_ASM_OP) - extern void ctors_section PARAMS ((void)); - extern void dtors_section PARAMS ((void)); extern void sbss_section PARAMS ((void)); extern void sdata_section PARAMS ((void)); --- 255,263 ---- *************** void FN () \ *** 294,384 **** } \ } ! ! /* Switch into a generic section. ! ! We make the section read-only and executable for a function decl, ! read-only for a const data decl, and writable for a non-const data decl. ! ! If the section has already been defined, we must not emit the ! attributes here. The SVR4 assembler does not recognize section ! redefinitions. If DECL is NULL, no attributes are emitted. */ ! ! #undef ASM_OUTPUT_SECTION_NAME ! #define ASM_OUTPUT_SECTION_NAME(FILE, DECL, NAME, RELOC) \ ! do \ ! { \ ! static htab_t htab; \ ! \ ! struct section_info \ ! { \ ! enum sect_enum {SECT_RW, SECT_RO, SECT_EXEC} type; \ ! }; \ ! \ ! struct section_info *s; \ ! const char *mode; \ ! enum sect_enum type; \ ! PTR* slot; \ ! \ ! /* The names we put in the hashtable will always be the unique \ ! versions gived to us by the stringtable, so we can just use \ ! their addresses as the keys. */ \ ! if (!htab) \ ! htab = htab_create (31, \ ! htab_hash_pointer, \ ! htab_eq_pointer, \ ! NULL); \ ! \ ! if (DECL && TREE_CODE (DECL) == FUNCTION_DECL) \ ! type = SECT_EXEC, mode = "ax"; \ ! else if (DECL && DECL_READONLY_SECTION (DECL, RELOC)) \ ! type = SECT_RO, mode = "a"; \ ! else \ ! type = SECT_RW, mode = "aw"; \ ! \ ! /* See if we already have an entry for this section. */ \ ! slot = htab_find_slot (htab, NAME, INSERT); \ ! if (!*slot) \ ! { \ ! s = (struct section_info *) xmalloc (sizeof (* s)); \ ! s->type = type; \ ! *slot = s; \ ! fprintf (FILE, "\t.section\t%s,\"%s\",@progbits\n", \ ! NAME, mode); \ ! } \ ! else \ ! { \ ! s = (struct section_info *) *slot; \ ! if (DECL && s->type != type) \ ! error_with_decl (DECL, \ ! "%s causes a section type conflict"); \ ! \ ! fprintf (FILE, "\t.section\t%s\n", NAME); \ ! } \ ! } \ ! while (0) ! ! /* A C statement (sans semicolon) to output an element in the table of ! global constructors. */ ! #undef ASM_OUTPUT_CONSTRUCTOR ! #define ASM_OUTPUT_CONSTRUCTOR(FILE, NAME) \ ! do { \ ! ctors_section (); \ ! fprintf (FILE, "%s", INT_ASM_OP); \ ! assemble_name (FILE, NAME); \ ! fprintf (FILE, "\n"); \ ! } while (0) ! ! /* A C statement (sans semicolon) to output an element in the table of ! global destructors. */ ! #undef ASM_OUTPUT_DESTRUCTOR ! #define ASM_OUTPUT_DESTRUCTOR(FILE, NAME) \ ! do { \ ! dtors_section (); \ ! fprintf (FILE, "%s", INT_ASM_OP); \ ! assemble_name (FILE, NAME); \ ! fprintf (FILE, "\n"); \ ! } while (0) /* A C statement or statements to switch to the appropriate section for output of DECL. DECL is either a `VAR_DECL' node --- 289,296 ---- } \ } ! /* Switch into a generic section. */ ! #define TARGET_ASM_NAMED_SECTION default_elf_asm_named_section /* A C statement or statements to switch to the appropriate section for output of DECL. DECL is either a `VAR_DECL' node *************** void FN () \ *** 397,409 **** #define DO_SELECT_SECTION(SECNUM, DECL, RELOC) \ do \ { \ SECNUM = 1; \ if (TREE_CODE (DECL) == FUNCTION_DECL) \ ! SECNUM = 0; \ else if (TREE_CODE (DECL) == STRING_CST) \ { \ if (flag_writable_strings) \ SECNUM = 2; \ } \ else if (TREE_CODE (DECL) == VAR_DECL) \ { \ --- 309,328 ---- #define DO_SELECT_SECTION(SECNUM, DECL, RELOC) \ do \ { \ + HOST_WIDE_INT size; \ SECNUM = 1; \ if (TREE_CODE (DECL) == FUNCTION_DECL) \ ! { \ ! SECNUM = 0; \ ! break; \ ! } \ else if (TREE_CODE (DECL) == STRING_CST) \ { \ if (flag_writable_strings) \ SECNUM = 2; \ + else \ + SECNUM = 0x101; \ + break; \ } \ else if (TREE_CODE (DECL) == VAR_DECL) \ { \ *************** void FN () \ *** 415,467 **** || TREE_SIDE_EFFECTS (DECL) \ || ! TREE_CONSTANT (DECL_INITIAL (DECL))) \ SECNUM = 2; \ } \ else if (TREE_CODE (DECL) == CONSTRUCTOR) \ { \ if ((flag_pic && RELOC) \ - || ! TREE_READONLY (DECL) \ || TREE_SIDE_EFFECTS (DECL) \ || ! TREE_CONSTANT (DECL)) \ SECNUM = 2; \ } \ \ /* Select small data sections based on size. */ \ ! if (SECNUM >= 2) \ { \ ! int size = int_size_in_bytes (TREE_TYPE (DECL)); \ ! if (size >= 0 && size <= g_switch_value) \ SECNUM += 1; \ } \ } \ while (0) #undef SELECT_SECTION ! #define SELECT_SECTION(DECL, RELOC) \ ! do \ ! { \ ! typedef void (*sec_fn) PARAMS ((void)); \ ! static sec_fn const sec_functions[6] = \ ! { \ ! text_section, \ ! const_section, \ ! data_section, \ ! sdata_section, \ ! bss_section, \ ! sbss_section \ ! }; \ ! \ ! int sec; \ ! \ ! DO_SELECT_SECTION (sec, DECL, RELOC); \ ! \ ! (*sec_functions[sec]) (); \ ! } \ while (0) #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1) - #define UNIQUE_SECTION_P(DECL) (DECL_ONE_ONLY (DECL)) - #undef UNIQUE_SECTION #define UNIQUE_SECTION(DECL, RELOC) \ do \ --- 334,415 ---- || TREE_SIDE_EFFECTS (DECL) \ || ! TREE_CONSTANT (DECL_INITIAL (DECL))) \ SECNUM = 2; \ + else if (flag_merge_constants >= 2) \ + { \ + /* C and C++ don't allow different variables to \ + share the same location. -fmerge-all-constants\ + allows even that (at the expense of not \ + conforming). */ \ + if (TREE_CODE (DECL_INITIAL (DECL)) == STRING_CST)\ + SECNUM = 0x201; \ + else \ + SECNUM = 0x301; \ + } \ } \ else if (TREE_CODE (DECL) == CONSTRUCTOR) \ { \ if ((flag_pic && RELOC) \ || TREE_SIDE_EFFECTS (DECL) \ || ! TREE_CONSTANT (DECL)) \ SECNUM = 2; \ } \ \ /* Select small data sections based on size. */ \ ! size = int_size_in_bytes (TREE_TYPE (DECL)); \ ! if (size >= 0 && size <= g_switch_value) \ { \ ! if ((SECNUM & 0xff) >= 2) \ SECNUM += 1; \ + /* Move readonly data to .sdata only if -msmall-data. */ \ + /* ??? Consider .sdata.{lit4,lit8} as \ + SHF_MERGE|SHF_ALPHA_GPREL. */ \ + else if (TARGET_SMALL_DATA) \ + SECNUM = 3; \ } \ } \ while (0) #undef SELECT_SECTION ! #define SELECT_SECTION(DECL, RELOC, ALIGN) \ ! do \ ! { \ ! typedef void (*sec_fn) PARAMS ((void)); \ ! static sec_fn const sec_functions[6] = \ ! { \ ! text_section, \ ! const_section, \ ! data_section, \ ! sdata_section, \ ! bss_section, \ ! sbss_section \ ! }; \ ! \ ! int sec; \ ! \ ! DO_SELECT_SECTION (sec, DECL, RELOC); \ ! \ ! switch (sec) \ ! { \ ! case 0x101: \ ! mergeable_string_section (DECL, ALIGN, 0); \ ! break; \ ! case 0x201: \ ! mergeable_string_section (DECL_INITIAL (DECL),\ ! ALIGN, 0); \ ! break; \ ! case 0x301: \ ! mergeable_constant_section (DECL_MODE (DECL), \ ! ALIGN, 0); \ ! break; \ ! default: \ ! (*sec_functions[sec]) (); \ ! break; \ ! } \ ! } \ while (0) #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1) #undef UNIQUE_SECTION #define UNIQUE_SECTION(DECL, RELOC) \ do \ *************** void FN () \ *** 486,492 **** STRIP_NAME_ENCODING (name, name); \ nlen = strlen (name); \ \ ! prefix = prefixes[sec][DECL_ONE_ONLY(DECL)]; \ plen = strlen (prefix); \ \ string = alloca (nlen + plen + 1); \ --- 434,440 ---- STRIP_NAME_ENCODING (name, name); \ nlen = strlen (name); \ \ ! prefix = prefixes[sec & 0xff][DECL_ONE_ONLY(DECL)]; \ plen = strlen (prefix); \ \ string = alloca (nlen + plen + 1); \ *************** void FN () \ *** 505,512 **** go into the const section. */ #undef SELECT_RTX_SECTION ! #define SELECT_RTX_SECTION(MODE, RTX) \ ! const_section() /* Define the strings used for the special svr4 .type and .size directives. These strings generally do not vary from one system running svr4 to --- 453,466 ---- go into the const section. */ #undef SELECT_RTX_SECTION ! #define SELECT_RTX_SECTION(MODE, RTX, ALIGN) \ ! do { \ ! if (TARGET_SMALL_DATA && GET_MODE_SIZE (MODE) <= g_switch_value) \ ! /* ??? Consider .sdata.{lit4,lit8} as SHF_MERGE|SHF_ALPHA_GPREL. */ \ ! sdata_section (); \ ! else \ ! mergeable_constant_section((MODE), (ALIGN), 0); \ ! } while (0) /* Define the strings used for the special svr4 .type and .size directives. These strings generally do not vary from one system running svr4 to *************** void FN () \ *** 529,539 **** /* This is how we tell the assembler that two symbols have the same value. */ #undef ASM_OUTPUT_DEF ! #define ASM_OUTPUT_DEF(FILE, NAME1, NAME2) \ ! do { assemble_name(FILE, NAME1); \ ! fputs(" = ", FILE); \ ! assemble_name(FILE, NAME2); \ ! fputc('\n', FILE); } while (0) /* The following macro defines the format used to output the second operand of the .type assembler directive. Different svr4 assemblers --- 483,514 ---- /* This is how we tell the assembler that two symbols have the same value. */ #undef ASM_OUTPUT_DEF ! #define ASM_OUTPUT_DEF(FILE, ALIAS, NAME) \ ! do { \ ! assemble_name(FILE, ALIAS); \ ! fputs(" = ", FILE); \ ! assemble_name(FILE, NAME); \ ! fputc('\n', FILE); \ ! } while (0) ! ! #undef ASM_OUTPUT_DEF_FROM_DECLS ! #define ASM_OUTPUT_DEF_FROM_DECLS(FILE, DECL, TARGET) \ ! do { \ ! const char *alias = XSTR (XEXP (DECL_RTL (DECL), 0), 0); \ ! const char *name = IDENTIFIER_POINTER (TARGET); \ ! if (TREE_CODE (DECL) == FUNCTION_DECL) \ ! { \ ! fputc ('$', FILE); \ ! assemble_name (FILE, alias); \ ! fputs ("..ng = $", FILE); \ ! assemble_name (FILE, name); \ ! fputs ("..ng\n", FILE); \ ! } \ ! assemble_name(FILE, alias); \ ! fputs(" = ", FILE); \ ! assemble_name(FILE, name); \ ! fputc('\n', FILE); \ ! } while (0) /* The following macro defines the format used to output the second operand of the .type assembler directive. Different svr4 assemblers *************** void FN () \ *** 658,674 **** /* Provide a STARTFILE_SPEC appropriate for ELF. Here we add the (even more) magical crtbegin.o file which provides part of the support for getting C++ file-scope static object constructed ! before entering `main'. - Don't bother seeing crtstuff.c -- there is absolutely no hope - of getting that file to understand multiple GPs. We provide a - hand-coded assembly version. */ - #undef STARTFILE_SPEC #define STARTFILE_SPEC \ "%{!shared: \ %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}}\ ! crti.o%s %{shared:crtbeginS.o%s}%{!shared:crtbegin.o%s}" /* Provide a ENDFILE_SPEC appropriate for ELF. Here we tack on the magical crtend.o file which provides part of the support for --- 633,646 ---- /* Provide a STARTFILE_SPEC appropriate for ELF. Here we add the (even more) magical crtbegin.o file which provides part of the support for getting C++ file-scope static object constructed ! before entering `main'. */ #undef STARTFILE_SPEC #define STARTFILE_SPEC \ "%{!shared: \ %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}}\ ! crti.o%s %{static:crtbeginT.o%s}\ ! %{!static:%{shared:crtbeginS.o%s}%{!shared:crtbegin.o%s}}" /* Provide a ENDFILE_SPEC appropriate for ELF. Here we tack on the magical crtend.o file which provides part of the support for *************** void FN () \ *** 677,693 **** #undef ENDFILE_SPEC #define ENDFILE_SPEC \ ! "%{shared:crtendS.o%s}%{!shared:crtend.o%s} crtn.o%s" /* We support #pragma. */ #define HANDLE_SYSV_PRAGMA - /* Undo the auto-alignment stuff from alpha.h. ELF has unaligned data - pseudos natively. */ - #undef UNALIGNED_SHORT_ASM_OP - #undef UNALIGNED_INT_ASM_OP - #undef UNALIGNED_DOUBLE_INT_ASM_OP - /* Select a format to encode pointers in exception handling data. CODE is 0 for data, 1 for code labels, 2 for function pointers. GLOBAL is true if the symbol may be affected by dynamic relocations. --- 649,660 ---- #undef ENDFILE_SPEC #define ENDFILE_SPEC \ ! "%{ffast-math|funsafe-math-optimizations:crtfastmath.o%s} \ ! %{shared:crtendS.o%s}%{!shared:crtend.o%s} crtn.o%s" /* We support #pragma. */ #define HANDLE_SYSV_PRAGMA /* Select a format to encode pointers in exception handling data. CODE is 0 for data, 1 for code labels, 2 for function pointers. GLOBAL is true if the symbol may be affected by dynamic relocations. *************** void FN () \ *** 698,700 **** --- 665,697 ---- only EH sections. */ #define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL) \ (((GLOBAL) ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | DW_EH_PE_sdata4) + + /* If defined, a C statement to be executed just prior to the output of + assembler code for INSN. */ + #define FINAL_PRESCAN_INSN(INSN, OPVEC, NOPERANDS) \ + (alpha_this_literal_sequence_number = 0, \ + alpha_this_gpdisp_sequence_number = 0) + extern int alpha_this_literal_sequence_number; + extern int alpha_this_gpdisp_sequence_number; + + /* Since the bits of the _init and _fini function is spread across + many object files, each potentially with its own GP, we must assume + we need to load our GP. Further, the .init/.fini section can + easily be more than 4MB away from the function to call so we can't + use bsr. */ + #define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \ + asm (SECTION_OP "\n" \ + " br $29,1f\n" \ + "1: ldgp $29,0($29)\n" \ + " unop\n" \ + " jsr $26," USER_LABEL_PREFIX #FUNC "\n" \ + " .align 3\n" \ + " .previous"); + + /* If we have the capability create headers for efficient EH lookup. + As of Jan 2002, only glibc 2.2.4 can actually make use of this, but + I imagine that other systems will catch up. In the meantime, it + doesn't harm to make sure that the data exists to be used later. */ + #if defined(HAVE_LD_EH_FRAME_HDR) + #define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " + #endif diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/freebsd.h gcc-3.1/gcc/config/alpha/freebsd.h *** gcc-3.0.4/gcc/config/alpha/freebsd.h Wed May 30 23:05:30 2001 --- gcc-3.1/gcc/config/alpha/freebsd.h Fri Apr 12 01:58:39 2002 *************** *** 1,5 **** /* Definitions for DEC Alpha/AXP running FreeBSD using the ELF format ! Copyright (C) 2000 Free Software Foundation, Inc. Contributed by David E. O'Brien and BSDi. This file is part of GNU CC. --- 1,5 ---- /* Definitions for DEC Alpha/AXP running FreeBSD using the ELF format ! Copyright (C) 2000, 2002 Free Software Foundation, Inc. Contributed by David E. O'Brien and BSDi. This file is part of GNU CC. *************** GNU General Public License for more deta *** 16,22 **** 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, 675 Mass Ave, Cambridge, MA 02139, USA. */ /* Provide a CPP_SPEC appropriate for FreeBSD/alpha. Besides the dealing with --- 16,23 ---- 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. */ /* Provide a CPP_SPEC appropriate for FreeBSD/alpha. Besides the dealing with *************** the Free Software Foundation, 675 Mass A *** 24,37 **** deal with the Alpha's FP issues. */ #undef CPP_SPEC ! #define CPP_SPEC "%(cpp_cpu) \ %{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} \ %{posix:-D_POSIX_SOURCE} \ %{mieee:-D_IEEE_FP} \ %{mieee-with-inexact:-D_IEEE_FP -D_IEEE_FP_INEXACT}" #undef LINK_SPEC ! #define LINK_SPEC "-m elf64alpha %{G*} %{relax:-relax} \ %{p:%e`-p' not supported; use `-pg' and gprof(1)} \ %{Wl,*:%*} \ %{assert*} %{R*} %{rpath*} %{defsym*} \ --- 25,38 ---- deal with the Alpha's FP issues. */ #undef CPP_SPEC ! #define CPP_SPEC "%(cpp_cpu) %(cpp_subtarget) -D__ELF__ \ %{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} \ %{posix:-D_POSIX_SOURCE} \ %{mieee:-D_IEEE_FP} \ %{mieee-with-inexact:-D_IEEE_FP -D_IEEE_FP_INEXACT}" #undef LINK_SPEC ! #define LINK_SPEC "%{G*} %{relax:-relax} \ %{p:%e`-p' not supported; use `-pg' and gprof(1)} \ %{Wl,*:%*} \ %{assert*} %{R*} %{rpath*} %{defsym*} \ *************** the Free Software Foundation, 675 Mass A *** 43,58 **** %{!dynamic-linker:-dynamic-linker /usr/libexec/ld-elf.so.1}} \ %{static:-Bstatic}}" - /* Provide an ASM_SPEC appropriate for a FreeBSD/Alpha target. This differs - from the generic FreeBSD ASM_SPEC in that no special handling of PIC is - necessary on the Alpha. */ - /* Per Richard Henderson , it is better to use the `.arch' - directive in the assembly file. alpha/elf.h gives us this in - "ASM_FILE_START". - #undef ASM_SPEC - #define ASM_SPEC " %| %{mcpu=*:-m%*}" - */ - /************************[ Target stuff ]***********************************/ --- 44,49 ---- *************** the Free Software Foundation, 675 Mass A *** 64,92 **** #undef WCHAR_TYPE #undef WCHAR_UNSIGNED ! #define WCHAR_UNSIGNED 0 #undef WCHAR_TYPE_SIZE ! #define WCHAR_TYPE_SIZE 32 #undef TARGET_VERSION #define TARGET_VERSION fprintf (stderr, " (FreeBSD/alpha ELF)"); ! #define TARGET_ELF 1 #undef TARGET_DEFAULT ! #define TARGET_DEFAULT (MASK_FP | MASK_FPREGS | MASK_GAS) #undef HAS_INIT_SECTION - /* Output assembler code to FILE to increment profiler label # LABELNO - for profiling a function entry. Under FreeBSD/Alpha, the assembler does - nothing special with -pg. */ - - #undef FUNCTION_PROFILER - #define FUNCTION_PROFILER(FILE, LABELNO) \ - fputs ("\tjsr $28,_mcount\n", (FILE)) - /* Show that we need a GP when profiling. */ #undef TARGET_PROFILING_NEEDS_GP #define TARGET_PROFILING_NEEDS_GP 1 --- 55,75 ---- #undef WCHAR_TYPE #undef WCHAR_UNSIGNED ! #define WCHAR_UNSIGNED 0 #undef WCHAR_TYPE_SIZE ! #define WCHAR_TYPE_SIZE 32 #undef TARGET_VERSION #define TARGET_VERSION fprintf (stderr, " (FreeBSD/alpha ELF)"); ! #define TARGET_ELF 1 #undef TARGET_DEFAULT ! #define TARGET_DEFAULT (MASK_FP | MASK_FPREGS | MASK_GAS) #undef HAS_INIT_SECTION /* Show that we need a GP when profiling. */ #undef TARGET_PROFILING_NEEDS_GP #define TARGET_PROFILING_NEEDS_GP 1 *************** the Free Software Foundation, 675 Mass A *** 96,98 **** --- 79,87 ---- #undef DBX_CONTIN_CHAR #define DBX_CONTIN_CHAR '?' + + /* Don't default to pcc-struct-return, we want to retain compatibility with + older FreeBSD releases AND pcc-struct-return may not be reentrant. */ + + #undef DEFAULT_PCC_STRUCT_RETURN + #define DEFAULT_PCC_STRUCT_RETURN 0 diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/lib1funcs.asm gcc-3.1/gcc/config/alpha/lib1funcs.asm *** gcc-3.0.4/gcc/config/alpha/lib1funcs.asm Mon May 15 23:14:15 2000 --- gcc-3.1/gcc/config/alpha/lib1funcs.asm Tue Oct 9 10:16:12 2001 *************** General Public License for more details. *** 22,28 **** You should have received a copy of the GNU General Public License along with this program; see the file COPYING. If not, write to ! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ /* This had to be written in assembler because the division functions use a non-standard calling convention. --- 22,29 ---- You should have received a copy of the GNU General Public License along with this program; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* This had to be written in assembler because the division functions use a non-standard calling convention. diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/linux-elf.h gcc-3.1/gcc/config/alpha/linux-elf.h *** gcc-3.0.4/gcc/config/alpha/linux-elf.h Mon Jan 11 13:33:53 1999 --- gcc-3.1/gcc/config/alpha/linux-elf.h Sat Jul 21 09:42:19 2001 *************** Boston, MA 02111-1307, USA. */ *** 37,47 **** #endif #ifndef USE_GNULIBC_1 - #undef DEFAULT_VTABLE_THUNKS - #define DEFAULT_VTABLE_THUNKS 1 - #endif - - #ifndef USE_GNULIBC_1 #undef LIB_SPEC #define LIB_SPEC \ "%{shared:-lc}%{!shared:%{pthread:-lpthread }%{profile:-lc_p}%{!profile:-lc}} " --- 37,42 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/linux.h gcc-3.1/gcc/config/alpha/linux.h *** gcc-3.0.4/gcc/config/alpha/linux.h Mon Jun 11 19:49:46 2001 --- gcc-3.1/gcc/config/alpha/linux.h Mon Apr 15 20:27:24 2002 *************** *** 1,6 **** /* Definitions of target machine for GNU compiler, for Alpha Linux-based GNU systems. ! Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. Contributed by Richard Henderson. This file is part of GNU CC. --- 1,6 ---- /* Definitions of target machine for GNU compiler, for Alpha Linux-based GNU systems. ! Copyright (C) 1996, 1997, 1998, 2002 Free Software Foundation, Inc. Contributed by Richard Henderson. This file is part of GNU CC. *************** Boston, MA 02111-1307, USA. */ *** 25,31 **** #undef CPP_PREDEFINES #define CPP_PREDEFINES \ ! "-Dlinux -Dunix -Asystem=linux -D_LONGLONG -D__alpha__ " \ SUB_CPP_PREDEFINES /* The GNU C++ standard library requires that these macros be defined. */ --- 25,31 ---- #undef CPP_PREDEFINES #define CPP_PREDEFINES \ ! "-D__gnu_linux__ -Dlinux -Dunix -Asystem=linux -D_LONGLONG -D__alpha__ " \ SUB_CPP_PREDEFINES /* The GNU C++ standard library requires that these macros be defined. */ *************** SUB_CPP_PREDEFINES *** 46,51 **** --- 46,55 ---- #undef TARGET_CAN_FAULT_IN_PROLOGUE #define TARGET_CAN_FAULT_IN_PROLOGUE 1 + /* OS fixes up EV5 data fault on prefetch. */ + #undef TARGET_FIXUP_EV5_PREFETCH + #define TARGET_FIXUP_EV5_PREFETCH 1 + #undef WCHAR_TYPE #define WCHAR_TYPE "int" diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/netbsd-elf.h gcc-3.1/gcc/config/alpha/netbsd-elf.h *** gcc-3.0.4/gcc/config/alpha/netbsd-elf.h Mon Jan 11 13:33:56 1999 --- gcc-3.1/gcc/config/alpha/netbsd-elf.h Thu Jan 1 00:00:00 1970 *************** *** 1,32 **** - /* Definitions of target machine for GNU compiler - for Alpha NetBSD systems using ELF. - Copyright (C) 1998 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. */ - - #undef TARGET_VERSION - #define TARGET_VERSION fprintf (stderr, " (Alpha NetBSD/ELF)"); - - #undef SUB_CPP_PREDEFINES - #define SUB_CPP_PREDEFINES "-D__ELF__" - - #undef SUBTARGET_EXTRA_SPECS - #define SUBTARGET_EXTRA_SPECS \ - { "elf_dynamic_linker", ELF_DYNAMIC_LINKER }, - - #define ELF_DYNAMIC_LINKER "/usr/libexec/ld.elf_so" --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/netbsd.h gcc-3.1/gcc/config/alpha/netbsd.h *** gcc-3.0.4/gcc/config/alpha/netbsd.h Sun May 28 02:25:46 2000 --- gcc-3.1/gcc/config/alpha/netbsd.h Tue Feb 5 19:01:46 2002 *************** *** 1,6 **** /* Definitions of target machine for GNU compiler, for Alpha NetBSD systems. ! Copyright (C) 1998 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,6 ---- /* Definitions of target machine for GNU compiler, for Alpha NetBSD systems. ! Copyright (C) 1998, 2002 Free Software Foundation, Inc. This file is part of GNU CC. *************** Boston, MA 02111-1307, USA. */ *** 23,33 **** #define TARGET_DEFAULT (MASK_FP | MASK_FPREGS | MASK_GAS) #undef CPP_PREDEFINES ! #define CPP_PREDEFINES "-D_LONGLONG -Dnetbsd -Dunix " SUB_CPP_PREDEFINES - #undef LIB_SPEC - #define LIB_SPEC "%{pg:-lgmon} %{pg:-lc_p} %{!pg:-lc}" /* Show that we need a GP when profiling. */ #undef TARGET_PROFILING_NEEDS_GP #define TARGET_PROFILING_NEEDS_GP 1 --- 23,83 ---- #define TARGET_DEFAULT (MASK_FP | MASK_FPREGS | MASK_GAS) #undef CPP_PREDEFINES ! #define CPP_PREDEFINES \ ! "-D__NetBSD__ -D__ELF__ -Asystem=unix -Asystem=NetBSD" /* Show that we need a GP when profiling. */ #undef TARGET_PROFILING_NEEDS_GP #define TARGET_PROFILING_NEEDS_GP 1 + + + /* Provide a CPP_SPEC appropriate for NetBSD/alpha. In addition to + the standard NetBSD specs, we also handle Alpha FP mode indications. */ + + #undef CPP_SPEC + #define CPP_SPEC \ + "%{mieee:-D_IEEE_FP} \ + %{mieee-with-inexact:-D_IEEE_FP -D_IEEE_FP_INEXACT} \ + %(cpp_cpu) %(cpp_subtarget)" + + #undef CPP_SUBTARGET_SPEC + #define CPP_SUBTARGET_SPEC \ + "%{posix:-D_POSIX_SOURCE}" + + + /* Provide a LINK_SPEC appropriate for a NetBSD/alpha ELF target. + This is a copy of LINK_SPEC from tweaked for + the alpha target. */ + + #undef LINK_SPEC + #define LINK_SPEC \ + "%{G*} %{relax:-relax} \ + %{O*:-O3} %{!O*:-O1} \ + %{assert*} %{R*} \ + %{shared:-shared} \ + %{!shared: \ + -dc -dp \ + %{!nostdlib: \ + %{!r*: \ + %{!e*:-e __start}}} \ + %{!static: \ + %{rdynamic:-export-dynamic} \ + %{!dynamic-linker:-dynamic-linker /usr/libexec/ld.elf_so}} \ + %{static:-static}}" + + + /* Provide an ENDFILE_SPEC appropriate for NetBSD/alpha ELF. Here we + add crtend.o, which provides part of the support for getting + C++ file-scope static objects deconstructed after exiting "main". + + We also need to handle the GCC option `-ffast-math'. */ + + #undef ENDFILE_SPEC + #define ENDFILE_SPEC \ + "%{ffast-math|funsafe-math-optimizations:crtfm%O%s} \ + %{!shared:crtend%O%s} %{shared:crtendS%O%s}" + + + #undef TARGET_VERSION + #define TARGET_VERSION fprintf (stderr, " (NetBSD/alpha ELF)"); diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/osf.h gcc-3.1/gcc/config/alpha/osf.h *** gcc-3.0.4/gcc/config/alpha/osf.h Sun Aug 12 20:22:19 2001 --- gcc-3.1/gcc/config/alpha/osf.h Fri Apr 12 22:16:56 2002 *************** Boston, MA 02111-1307, USA. */ *** 47,53 **** #undef CPP_SUBTARGET_SPEC #define CPP_SUBTARGET_SPEC \ ! "%{pthread|threads:-D_REENTRANT} %{threads:-D_PTHREAD_USE_D4} %(cpp_xfloat)" /* Under OSF4, -p and -pg require -lprof1, and -lprof1 requires -lpdf. */ --- 47,54 ---- #undef CPP_SUBTARGET_SPEC #define CPP_SUBTARGET_SPEC \ ! "%{pthread|threads:-D_REENTRANT} %{threads:-D_PTHREAD_USE_D4} %(cpp_xfloat) \ ! -D__EXTERN_PREFIX" /* Under OSF4, -p and -pg require -lprof1, and -lprof1 requires -lpdf. */ *************** Boston, MA 02111-1307, USA. */ *** 56,73 **** %{threads: -lpthreads} %{pthread|threads: -lpthread -lmach -lexc} -lc" /* Pass "-G 8" to ld because Alpha's CC does. Pass -O3 if we are ! optimizing, -O1 if we are not. Pass -shared, -non_shared or -call_shared as appropriate. Pass -hidden_symbol so that our constructor and call-frame data structures are not accidentally overridden. */ #define LINK_SPEC \ ! "-G 8 %{O*:-O3} %{!O*:-O1} %{static:-non_shared} \ %{!static:%{shared:-shared -hidden_symbol _GLOBAL_*} \ %{!shared:-call_shared}} %{pg} %{taso} %{rpath*}" #define STARTFILE_SPEC \ "%{!shared:%{pg:gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}}}" #define MD_STARTFILE_PREFIX "/usr/lib/cmplrs/cc/" #define ASM_FILE_START(FILE) \ --- 57,78 ---- %{threads: -lpthreads} %{pthread|threads: -lpthread -lmach -lexc} -lc" /* Pass "-G 8" to ld because Alpha's CC does. Pass -O3 if we are ! optimizing, -O1 if we are not. Pass -S to silence `weak symbol ! multiply defined' warnings. Pass -shared, -non_shared or -call_shared as appropriate. Pass -hidden_symbol so that our constructor and call-frame data structures are not accidentally overridden. */ #define LINK_SPEC \ ! "-G 8 %{O*:-O3} %{!O*:-O1} -S %{static:-non_shared} \ %{!static:%{shared:-shared -hidden_symbol _GLOBAL_*} \ %{!shared:-call_shared}} %{pg} %{taso} %{rpath*}" #define STARTFILE_SPEC \ "%{!shared:%{pg:gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}}}" + #define ENDFILE_SPEC \ + "%{ffast-math|funsafe-math-optimizations:crtfastmath.o%s}" + #define MD_STARTFILE_PREFIX "/usr/lib/cmplrs/cc/" #define ASM_FILE_START(FILE) \ *************** Boston, MA 02111-1307, USA. */ *** 90,108 **** #define ASM_OLDAS_SPEC "" - /* No point in running CPP on our assembler output. */ - #if ((TARGET_DEFAULT | TARGET_CPU_DEFAULT) & MASK_GAS) != 0 - /* Don't pass -g to GNU as, because some versions don't accept this option. */ - #define ASM_SPEC "%{malpha-as:-g %(asm_oldas)} -nocpp %{pg}" - #else /* In OSF/1 v3.2c, the assembler by default does not output file names which causes mips-tfile to fail. Passing -g to the assembler fixes this problem. ??? Strictly speaking, we need -g only if the user specifies -g. Passing it always means that we get slightly larger than necessary object files if the user does not specify -g. If we don't pass -g, then mips-tfile will need to be fixed to work in this case. Pass -O0 since some ! optimization are broken and don't help us anyway. */ ! #define ASM_SPEC "%{!mgas:-g %(asm_oldas)} -nocpp %{pg} -O0" #endif /* Specify to run a post-processor, mips-tfile after the assembler --- 95,112 ---- #define ASM_OLDAS_SPEC "" /* In OSF/1 v3.2c, the assembler by default does not output file names which causes mips-tfile to fail. Passing -g to the assembler fixes this problem. ??? Strictly speaking, we need -g only if the user specifies -g. Passing it always means that we get slightly larger than necessary object files if the user does not specify -g. If we don't pass -g, then mips-tfile will need to be fixed to work in this case. Pass -O0 since some ! optimization are broken and don't help us anyway. Pass -nocpp because ! there's no point in running CPP on our assembler output. */ ! #if ((TARGET_DEFAULT | TARGET_CPU_DEFAULT) & MASK_GAS) != 0 ! #define ASM_SPEC "%{malpha-as:-g %(asm_oldas) -nocpp %{pg} -O0}" ! #else ! #define ASM_SPEC "%{!mgas:-g %(asm_oldas) -nocpp %{pg} -O0}" #endif /* Specify to run a post-processor, mips-tfile after the assembler *************** __enable_execute_stack (addr) \ *** 206,208 **** --- 210,216 ---- /* Handle #pragma weak and #pragma pack. */ #undef HANDLE_SYSV_PRAGMA #define HANDLE_SYSV_PRAGMA 1 + + /* Handle #pragma extern_prefix. Technically only needed for Tru64 5.x, + but easier to manipulate preprocessor bits from here. */ + #define HANDLE_PRAGMA_EXTERN_PREFIX 1 diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/t-crtbe gcc-3.1/gcc/config/alpha/t-crtbe *** gcc-3.0.4/gcc/config/alpha/t-crtbe Sun Apr 30 10:56:21 2000 --- gcc-3.1/gcc/config/alpha/t-crtbe Thu Jan 1 00:00:00 1970 *************** *** 1,12 **** - # Effectively disable the crtbegin/end rules using crtstuff.c - T = disable - - # Assemble startup files. - crtbegin.o: $(srcdir)/config/alpha/crtbegin.asm $(GCC_PASSES) - $(GCC_FOR_TARGET) -c -o crtbegin.o -x assembler-with-cpp -I. $(srcdir)/config/alpha/crtbegin.asm - crtend.o: $(srcdir)/config/alpha/crtend.asm $(GCC_PASSES) - $(GCC_FOR_TARGET) -c -o crtend.o -x assembler-with-cpp -I. $(srcdir)/config/alpha/crtend.asm - crtbeginS.o: $(srcdir)/config/alpha/crtbegin.asm $(GCC_PASSES) - $(GCC_FOR_TARGET) -DSHARED -c -o crtbeginS.o -x assembler-with-cpp -I. $(srcdir)/config/alpha/crtbegin.asm - crtendS.o: $(srcdir)/config/alpha/crtend.asm $(GCC_PASSES) - $(GCC_FOR_TARGET) -DSHARED -c -o crtendS.o -x assembler-with-cpp -I. $(srcdir)/config/alpha/crtend.asm --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/t-crtfm gcc-3.1/gcc/config/alpha/t-crtfm *** gcc-3.0.4/gcc/config/alpha/t-crtfm Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/alpha/t-crtfm Sun Jun 24 02:05:06 2001 *************** *** 0 **** --- 1,4 ---- + EXTRA_PARTS += crtfastmath.o + + crtfastmath.o: $(srcdir)/config/alpha/crtfastmath.c $(GCC_PASSES) + $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -c -o crtfastmath.o $(srcdir)/config/alpha/crtfastmath.c diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/t-interix gcc-3.1/gcc/config/alpha/t-interix *** gcc-3.0.4/gcc/config/alpha/t-interix Thu May 17 01:34:29 2001 --- gcc-3.1/gcc/config/alpha/t-interix Thu Dec 20 23:35:42 2001 *************** *** 1,11 **** # t-interix # System headers will track gcc's needs. ! # Even LANG_EXTRA_HEADERS may be temporary. ! USER_H=$(LANG_EXTRA_HEADERS) ! ! CROSS_LIBGCC1 = libgcc1-asm.a ! LIBGCC1 = libgcc1-asm.a LIB1ASMSRC = alpha/lib1funcs.asm LIB1ASMFUNCS = _divqu _divq _divlu _divl _remqu _remq _remlu _reml --- 1,7 ---- # t-interix # System headers will track gcc's needs. ! USER_H= LIB1ASMSRC = alpha/lib1funcs.asm LIB1ASMFUNCS = _divqu _divq _divlu _divl _remqu _remq _remlu _reml diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/t-osf gcc-3.1/gcc/config/alpha/t-osf *** gcc-3.0.4/gcc/config/alpha/t-osf Wed Oct 4 20:53:29 2000 --- gcc-3.1/gcc/config/alpha/t-osf Thu Jan 1 00:00:00 1970 *************** *** 1,6 **** - # Do not build libgcc1. Let gcc generate those functions. - LIBGCC1 = - CROSS_LIBGCC1 = - LIBGCC1_TEST = - - EXTRA_HEADERS = $(srcdir)/config/alpha/va_list.h --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/t-osf4 gcc-3.1/gcc/config/alpha/t-osf4 *** gcc-3.0.4/gcc/config/alpha/t-osf4 Wed Jun 13 05:05:40 2001 --- gcc-3.1/gcc/config/alpha/t-osf4 Wed Jun 13 14:26:02 2001 *************** TARGET_LIBGCC2_CFLAGS = -fPIC *** 6,18 **** # Build a shared libgcc library. SHLIB_EXT = .so SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \ ! -Wl,-msym -Wl,-set_version,gcc.1 -Wl,-soname,@shlib_base_name@.so.1 \ ! -o @shlib_base_name@.so @multilib_flags@ @shlib_objs@ -lc && \ ! rm -f @shlib_base_name@.so.1 && \ ! $(LN_S) @shlib_base_name@.so @shlib_base_name@.so.1 # $(slibdir) double quoted to protect it from expansion while building # libgcc.mk. We want this delayed until actual install time. ! SHLIB_INSTALL = $(INSTALL_DATA) @shlib_base_name@.so $$(slibdir)/@shlib_base_name@.so.1; \ ! rm -f $$(slibdir)/@shlib_base_name@.so; \ ! $(LN_S) @shlib_base_name@.so.1 $$(slibdir)/@shlib_base_name@.so --- 6,22 ---- # Build a shared libgcc library. SHLIB_EXT = .so + SHLIB_NAME = @shlib_base_name@.so + SHLIB_SONAME = @shlib_base_name@.so.1 + SHLIB_OBJS = @shlib_objs@ + SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \ ! -Wl,-msym -Wl,-set_version,gcc.1 -Wl,-soname,$(SHLIB_SONAME) \ ! -o $(SHLIB_NAME) @multilib_flags@ $(SHLIB_OBJS) -lc && \ ! rm -f $(SHLIB_SONAME) && \ ! $(LN_S) $(SHLIB_NAME) $(SHLIB_SONAME) # $(slibdir) double quoted to protect it from expansion while building # libgcc.mk. We want this delayed until actual install time. ! SHLIB_INSTALL = $(INSTALL_DATA) $(SHLIB_NAME) $$(slibdir)/$(SHLIB_SONAME); \ ! rm -f $$(slibdir)/$(SHLIB_NAME); \ ! $(LN_S) $(SHLIB_SONAME) $$(slibdir)/$(SHLIB_NAME) diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/t-unicosmk gcc-3.1/gcc/config/alpha/t-unicosmk *** gcc-3.0.4/gcc/config/alpha/t-unicosmk Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/alpha/t-unicosmk Tue Sep 11 08:52:37 2001 *************** *** 0 **** --- 1,2 ---- + # This file is empty for now. + diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/t-vms gcc-3.1/gcc/config/alpha/t-vms *** gcc-3.0.4/gcc/config/alpha/t-vms Wed Dec 16 21:01:06 1998 --- gcc-3.1/gcc/config/alpha/t-vms Wed Feb 13 15:14:49 2002 *************** *** 1,6 **** ! # Do not build libgcc1. ! LIBGCC1 = ! CROSS_LIBGCC1 = ! LIB2FUNCS_EXTRA = tramp.s --- 1,26 ---- ! LIB2FUNCS_EXTRA = $(srcdir)/config/alpha/vms_tramp.asm ! # VMS_EXTRA_PARTS is defined in x-vms and represent object files that ! # are only needed for VMS targets, but can only be compiled on a VMS host ! # (because they need DEC C). ! EXTRA_PARTS = vms-dwarf2.o vms-dwarf2eh.o $(VMS_EXTRA_PARTS) ! ! # This object must be linked with in order to make the executable debuggable. ! # vms-ld handles it automatically when passed -g. ! vms-dwarf2.o : $(srcdir)/config/alpha/vms-dwarf2.asm ! gcc -c -x assembler $< -o $@ + vms-dwarf2eh.o : $(srcdir)/config/alpha/vms-dwarf2eh.asm + gcc -c -x assembler $< -o $@ + + # Assemble startup files. + vcrt0.o: $(CRT0_S) $(GCC_PASSES) + decc -c /names=as_is $(srcdir)/config/alpha/vms-crt0.c -o vcrt0.o + + pcrt0.o: $(CRT0_S) $(GCC_PASSES) + decc -c /names=as_is $(srcdir)/config/alpha/vms-psxcrt0.c -o pcrt0.o + + MULTILIB_OPTIONS = mcpu=ev6 + MULTILIB_DIRNAMES = ev6 + LIBGCC = stmp-multilib + INSTALL_LIBGCC = install-multilib diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/t-vms64 gcc-3.1/gcc/config/alpha/t-vms64 *** gcc-3.0.4/gcc/config/alpha/t-vms64 Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/alpha/t-vms64 Fri Dec 14 12:55:07 2001 *************** *** 0 **** --- 1,8 ---- + # Assemble startup files. + vcrt0.o: $(CRT0_S) $(GCC_PASSES) + decc -c /names=as_is /pointer_size=64 \ + $(srcdir)/config/alpha/vms-crt0-64.c -o vcrt0.o + + pcrt0.o: $(CRT0_S) $(GCC_PASSES) + decc -c /names=as_is /pointer_size=64 \ + $(srcdir)/config/alpha/vms-psxcrt0-64.c -o pcrt0.o diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/unicosmk.h gcc-3.1/gcc/config/alpha/unicosmk.h *** gcc-3.0.4/gcc/config/alpha/unicosmk.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/alpha/unicosmk.h Thu Dec 20 17:36:33 2001 *************** *** 0 **** --- 1,626 ---- + /* Definitions of target machine for GNU compiler, for DEC Alpha on Cray + T3E running Unicos/Mk. + Copyright (C) 2001 + Free Software Foundation, Inc. + Contributed by Roman Lechtchinsky (rl@cs.tu-berlin.de) + + 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. */ + + #undef TARGET_ABI_UNICOSMK + #define TARGET_ABI_UNICOSMK 1 + + /* CAM requires a slash before floating-pointing instruction suffixes. */ + + #undef TARGET_AS_SLASH_BEFORE_SUFFIX + #define TARGET_AS_SLASH_BEFORE_SUFFIX 1 + + /* The following defines are necessary for the standard headers to work + correctly. */ + + #undef CPP_PREDEFINES + #define CPP_PREDEFINES "-D__unix=1 -D_UNICOS=205 -D_CRAY=1 -D_CRAYT3E=1 -D_CRAYMPP=1 -D_CRAYIEEE=1 -D_ADDR64=1 -D_LD64=1 -D__UNICOSMK__ -D__INT_MAX__=9223372036854775807 -D__SHRT_MAX__=2147483647" + + /* Disable software floating point emulation because it requires a 16-bit + type which we do not have. */ + + #ifndef __GNUC__ + #undef REAL_ARITHMETIC + #endif + + #define SHORT_TYPE_SIZE 32 + + #undef INT_TYPE_SIZE + #define INT_TYPE_SIZE 64 + + /* This is consistent with the definition Cray CC uses. */ + #undef WCHAR_TYPE + #define WCHAR_TYPE "int" + #undef WCHAR_TYPE_SIZE + #define WCHAR_TYPE_SIZE 64 + + /* + #define SIZE_TYPE "unsigned int" + #define PTRDIFF_TYPE "int" + */ + + /* Alphas are operated in big endian mode on the Cray T3E. */ + + #undef BITS_BIG_ENDIAN + #undef BYTES_BIG_ENDIAN + #undef WORDS_BIG_ENDIAN + #define BITS_BIG_ENDIAN 0 + #define BYTES_BIG_ENDIAN 1 + #define WORDS_BIG_ENDIAN 1 + + + /* Every structure's size must be a multiple of this. */ + + #undef STRUCTURE_SIZE_BOUNDARY + #define STRUCTURE_SIZE_BOUNDARY 64 + + /* No data type wants to be aligned rounder than this. */ + + #undef BIGGEST_ALIGNMENT + #define BIGGEST_ALIGNMENT 256 + + /* Include the frame pointer in fixed_regs and call_used_regs as it can't be + used as a general-purpose register even in frameless functions. + ??? The global_regs hack is needed for now because -O2 sometimes tries to + eliminate $15 increments/decrements in frameless functions. */ + + #undef CONDITIONAL_REGISTER_USAGE + #define CONDITIONAL_REGISTER_USAGE \ + do { \ + fixed_regs[15] = 1; \ + call_used_regs[15] = 1; \ + global_regs[15] = 1; \ + } while(0) + + /* The stack frame grows downward. */ + + #define FRAME_GROWS_DOWNWARD + + /* Define the offset between two registers, one to be eliminated, and the + other its replacement, at the start of a routine. This is somewhat + complicated on the T3E which is why we use a function. */ + + extern int unicosmk_initial_elimination_offset PARAMS ((int, int)); + + #undef INITIAL_ELIMINATION_OFFSET + #define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \ + do { \ + (OFFSET) = unicosmk_initial_elimination_offset ((FROM), (TO)); \ + } while (0) + + + /* Define this if stack space is still allocated for a parameter passed + in a register. On the T3E, stack space is preallocated for all outgoing + arguments, including those passed in registers. To avoid problems, we + assume that at least 48 bytes (i.e. enough space for all arguments passed + in registers) are allocated. */ + + #define REG_PARM_STACK_SPACE(DECL) 48 + #define OUTGOING_REG_PARM_STACK_SPACE + + /* If an argument can't be passed in registers even though not all argument + registers have been used yet, it is passed on the stack in the space + preallocated for these registers. */ + + #define STACK_PARMS_IN_REG_PARM_AREA + + /* This evaluates to nonzero if we do not know how to pass TYPE solely in + registers. This is the case for all arguments that do not fit in two + registers. */ + + #define MUST_PASS_IN_STACK(MODE,TYPE) \ + ((TYPE) != 0 \ + && (TREE_CODE (TYPE_SIZE (TYPE)) != INTEGER_CST \ + || (TREE_ADDRESSABLE (TYPE) || ALPHA_ARG_SIZE (MODE, TYPE, 0) > 2))) + + /* Define a data type for recording info about an argument list + during the scan of that argument list. This data type should + hold all necessary information about the function itself + and about the args processed so far, enough to enable macros + such as FUNCTION_ARG to determine where the next arg should go. + + On Unicos/Mk, this is a structure that contains various information for + the static subroutine information block (SSIB) and the call information + word (CIW). */ + + typedef struct { + + /* The overall number of arguments. */ + int num_args; + + /* The overall size of the arguments in words. */ + int num_arg_words; + + /* The number of words passed in registers. */ + int num_reg_words; + + /* If an argument must be passed in the stack, all subsequent arguments + must be passed there, too. This flag indicates whether this is the + case. */ + int force_stack; + + /* This array indicates whether a word is passed in an integer register or + a floating point one. */ + + /* For each of the 6 register arguments, the corresponding flag in this + array indicates whether the argument is passed in an integer or a + floating point register. */ + int reg_args_type[6]; + + } unicosmk_arg_info; + + #undef CUMULATIVE_ARGS + #define CUMULATIVE_ARGS unicosmk_arg_info + + /* Initialize a variable CUM of type CUMULATIVE_ARGS for a call to a + function whose data type is FNTYPE. For a library call, FNTYPE is 0. */ + + #undef INIT_CUMULATIVE_ARGS + #define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT) \ + do { (CUM).num_args = 0; \ + (CUM).num_arg_words = 0; \ + (CUM).num_reg_words = 0; \ + (CUM).force_stack = 0; \ + } while(0) + + /* Update the data in CUM to advance over an argument of mode MODE and data + type TYPE. (TYPE is null for libcalls where that information may not be + available.) + + On Unicos/Mk, at most 6 words can be passed in registers. Structures + which fit in two words are passed in registers, larger structures are + passed on stack. */ + + #undef FUNCTION_ARG_ADVANCE + #define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \ + do { \ + int size; \ + \ + size = ALPHA_ARG_SIZE (MODE, TYPE, NAMED); \ + \ + if (size > 2 || MUST_PASS_IN_STACK (MODE, TYPE) \ + || (CUM).num_reg_words + size > 6) \ + (CUM).force_stack = 1; \ + \ + if (! (CUM).force_stack) \ + { \ + int i; \ + int isfloat; \ + isfloat = (GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT \ + || GET_MODE_CLASS (MODE) == MODE_FLOAT); \ + for (i = 0; i < size; i++) \ + { \ + (CUM).reg_args_type[(CUM).num_reg_words] = isfloat; \ + ++(CUM).num_reg_words; \ + } \ + } \ + (CUM).num_arg_words += size; \ + ++(CUM).num_args; \ + } while(0) + + /* We want the default definition for this. + ??? In fact, we should delete the definition from alpha.h as it + corresponds to the default definition for little-endian machines. */ + + #undef FUNCTION_ARG_PADDING + + /* An argument is passed either entirely in registers or entirely on stack. */ + + #undef FUNCTION_ARG_PARTIAL_NREGS + /* #define FUNCTION_ARG_PARTIAL_NREGS(CUM,MODE,TYPE,NAMED) 0 */ + + /* Perform any needed actions needed for a function that is receiving a + variable number of arguments. + + On Unicos/Mk, the standard subroutine __T3E_MISMATCH stores all register + arguments on the stack. Unfortunately, it doesn't always store the first + one (i.e. the one that arrives in $16 or $f16). This is not a problem + with stdargs as we always have at least one named argument there. This is + not always the case when varargs.h is used, however. In such cases, we + have to store the first argument ourselves. We use the information from + the CIW to determine whether the first argument arrives in $16 or $f16. */ + + #undef SETUP_INCOMING_VARARGS + #define SETUP_INCOMING_VARARGS(CUM,MODE,TYPE,PRETEND_SIZE,NO_RTL) \ + { if ((CUM).num_reg_words < 6) \ + { \ + if (! (NO_RTL)) \ + { \ + int start; \ + \ + start = (CUM).num_reg_words; \ + if (!current_function_varargs || start == 0) \ + ++start; \ + \ + emit_insn (gen_umk_mismatch_args (GEN_INT (start))); \ + if (current_function_varargs && (CUM).num_reg_words == 0) \ + { \ + rtx tmp; \ + rtx int_label, end_label; \ + \ + tmp = gen_reg_rtx (DImode); \ + emit_move_insn (tmp, \ + gen_rtx_ZERO_EXTRACT (DImode, \ + gen_rtx_REG (DImode, 2),\ + (GEN_INT (1)), \ + (GEN_INT (7)))); \ + int_label = gen_label_rtx (); \ + end_label = gen_label_rtx (); \ + emit_insn (gen_cmpdi (tmp, GEN_INT (0))); \ + emit_jump_insn (gen_beq (int_label)); \ + emit_move_insn (gen_rtx_MEM (DFmode, virtual_incoming_args_rtx),\ + gen_rtx_REG (DFmode, 48)); \ + emit_jump (end_label); \ + emit_label (int_label); \ + emit_move_insn (gen_rtx_MEM (DImode, virtual_incoming_args_rtx),\ + gen_rtx_REG (DImode, 16)); \ + emit_label (end_label); \ + } \ + emit_insn (gen_arg_home_umk ()); \ + } \ + \ + PRETEND_SIZE = 0; \ + } \ + } + + /* This ensures that $15 increments/decrements in leaf functions won't get + eliminated. */ + + #undef EPILOGUE_USES + #define EPILOGUE_USES(REGNO) ((REGNO) == 26 || (REGNO) == 15) + + /* Machine-specific function data. */ + + struct machine_function + { + /* List of call information words for calls from this function. */ + struct rtx_def *first_ciw; + struct rtx_def *last_ciw; + int ciw_count; + + /* List of deferred case vectors. */ + struct rtx_def *addr_list; + }; + + /* Would have worked, only the stack doesn't seem to be executable + #undef TRAMPOLINE_TEMPLATE + #define TRAMPOLINE_TEMPLATE(FILE) \ + do { fprintf (FILE, "\tbr $1,0\n"); \ + fprintf (FILE, "\tldq $0,12($1)\n"); \ + fprintf (FILE, "\tldq $1,20($1)\n"); \ + fprintf (FILE, "\tjmp $31,(r0)\n"); \ + fprintf (FILE, "\tbis $31,$31,$31\n"); \ + fprintf (FILE, "\tbis $31,$31,$31\n"); \ + } while (0) */ + + /* We don't support nested functions (yet). */ + + #undef TRAMPOLINE_TEMPLATE + #define TRAMPOLINE_TEMPLATE(FILE) abort () + + /* Specify the machine mode that this machine uses for the index in the + tablejump instruction. On Unicos/Mk, we don't support relative case + vectors yet, thus the entries should be absolute addresses. */ + + #undef CASE_VECTOR_MODE + #define CASE_VECTOR_MODE DImode + + #undef CASE_VECTOR_PC_RELATIVE + + /* Define this as 1 if `char' should by default be signed; else as 0. */ + /* #define DEFAULT_SIGNED_CHAR 1 */ + + /* The Cray assembler is really weird with respect to sections. It has only + named sections and you can't reopen a section once it has been closed. + This means that we have to generate unique names whenever we want to + reenter the text or the data section. The following is a rather bad hack + as TEXT_SECTION_ASM_OP and DATA_SECTION_ASM_OP are supposed to be + constants. */ + + #undef TEXT_SECTION_ASM_OP + #define TEXT_SECTION_ASM_OP unicosmk_text_section () + + #undef DATA_SECTION_ASM_OP + #define DATA_SECTION_ASM_OP unicosmk_data_section () + + /* There are ni read-only sections on Unicos/Mk. */ + + #undef READONLY_DATA_SECTION + #define READONLY_DATA_SECTION data_section + + /* Define extra sections for common data and SSIBs (static subroutine + information blocks). The actual section header is output by the callers + of these functions. */ + + #undef EXTRA_SECTIONS + #undef EXTRA_SECTION_FUNCTIONS + + #define EXTRA_SECTIONS in_common, in_ssib + #define EXTRA_SECTION_FUNCTIONS \ + COMMON_SECTION \ + SSIB_SECTION + + extern void common_section PARAMS ((void)); + #define COMMON_SECTION \ + void \ + common_section () \ + { \ + in_section = in_common; \ + } + + extern void ssib_section PARAMS ((void)); + #define SSIB_SECTION \ + void \ + ssib_section () \ + { \ + in_section = in_ssib; \ + } + + /* A C expression which evaluates to true if declshould be placed into a + unique section for some target-specific reason. On Unicos/Mk, functions + and public variables are always placed in unique sections. */ + + /* + #define UNIQUE_SECTION_P(DECL) (TREE_PUBLIC (DECL) \ + || TREE_CODE (DECL) == FUNCTION_DECL) + */ + #define UNIQUE_SECTION(DECL, RELOC) unicosmk_unique_section (DECL, RELOC) + + /* This outputs text to go at the start of an assembler file. */ + + #undef ASM_FILE_START + #define ASM_FILE_START(FILE) unicosmk_asm_file_start (FILE) + + /* This outputs text to go at the end of an assembler file. */ + + #undef ASM_FILE_END + #define ASM_FILE_END(FILE) unicosmk_asm_file_end (FILE) + + /* We take care of that in ASM_FILE_START. */ + + #undef ASM_OUTPUT_SOURCE_FILENAME + + /* There is no directive for declaring a label as global. Instead, an + additional colon must be appended when the label is defined. */ + + #undef ASM_GLOBALIZE_LABEL + #define ASM_GLOBALIZE_LABEL(FILE,NAME) + + /* This is how to output a label for a jump table. Arguments are the same as + for ASM_OUTPUT_INTERNAL_LABEL, except the insn for the jump table is + passed. */ + + #undef ASM_OUTPUT_CASE_LABEL + #define ASM_OUTPUT_CASE_LABEL(FILE,PREFIX,NUM,TABLEINSN) \ + ASM_OUTPUT_INTERNAL_LABEL (FILE, PREFIX, NUM) + + /* CAM has some restrictions with respect to string literals. It won't + accept lines with more that 256 characters which means that we have + to split long strings. Moreover, it only accepts escape sequences of + the form \nnn in the range 0 to 127. We generate .byte directives for + escapes characters greater than 127. And finally, ` must be escaped. */ + + #undef ASM_OUTPUT_ASCII + #define ASM_OUTPUT_ASCII(MYFILE, MYSTRING, MYLENGTH) \ + do { \ + FILE *_hide_asm_out_file = (MYFILE); \ + const unsigned char *_hide_p = (const unsigned char *) (MYSTRING); \ + int _hide_thissize = (MYLENGTH); \ + int _size_so_far = 0; \ + { \ + FILE *asm_out_file = _hide_asm_out_file; \ + const unsigned char *p = _hide_p; \ + int thissize = _hide_thissize; \ + int in_ascii = 0; \ + int i; \ + \ + for (i = 0; i < thissize; i++) \ + { \ + register int c = p[i]; \ + \ + if (c > 127) \ + { \ + if (in_ascii) \ + { \ + fprintf (asm_out_file, "\"\n"); \ + in_ascii = 0; \ + } \ + \ + fprintf (asm_out_file, "\t.byte\t%d\n", c); \ + } \ + else \ + { \ + if (! in_ascii) \ + { \ + fprintf (asm_out_file, "\t.ascii\t\""); \ + in_ascii = 1; \ + _size_so_far = 0; \ + } \ + else if (_size_so_far >= 64) \ + { \ + fprintf (asm_out_file, "\"\n\t.ascii\t\""); \ + _size_so_far = 0; \ + } \ + \ + if (c == '\"' || c == '\\' || c == '`') \ + putc ('\\', asm_out_file); \ + if (c >= ' ') \ + putc (c, asm_out_file); \ + else \ + fprintf (asm_out_file, "\\%.3o", c); \ + ++ _size_so_far; \ + } \ + } \ + if (in_ascii) \ + fprintf (asm_out_file, "\"\n"); \ + } \ + } while(0) + + /* This is how to output an element of a case-vector that is absolute. */ + + #undef ASM_OUTPUT_ADDR_VEC_ELT + #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ + fprintf (FILE, "\t.quad $L%d\n", (VALUE)) + + /* This is how to output an element of a case-vector that is relative. + (Unicos/Mk does not use such vectors yet). */ + + #undef ASM_OUTPUT_ADDR_DIFF_ELT + #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) abort () + + /* We can't output case vectors in the same section as the function code + because CAM doesn't allow data definitions in code sections. Thus, we + simply record the case vectors and put them in a separate section after + the function. */ + + #define ASM_OUTPUT_ADDR_VEC(LAB,VEC) \ + unicosmk_defer_case_vector ((LAB),(VEC)) + + #define ASM_OUTPUT_ADDR_DIFF_VEC(LAB,VEC) abort () + + /* This is how to output an assembler line that says to advance the location + counter to a multiple of 2**LOG bytes. Annoyingly, CAM always uses zeroes + to fill the unused space which does not work in code sections. We have to + be careful not to use the .align directive in code sections. */ + + #undef ASM_OUTPUT_ALIGN + #define ASM_OUTPUT_ALIGN(STREAM,LOG) unicosmk_output_align (STREAM, LOG) + + /* This is how to advance the location counter by SIZE bytes. */ + + #undef ASM_OUTPUT_SKIP + #define ASM_OUTPUT_SKIP(STREAM,SIZE) \ + fprintf ((STREAM), "\t.byte\t0:%d\n", (SIZE)); + + /* This says how to output an assembler line to define a global common + symbol. We need the alignment information because it has to be supplied + in the section header. */ + + #undef ASM_OUTPUT_COMMON + #define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN) \ + unicosmk_output_common ((FILE), (NAME), (SIZE), (ALIGN)) + + /* This says how to output an assembler line to define a local symbol. */ + + #undef ASM_OUTPUT_LOCAL + #define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN) \ + do { data_section (); \ + fprintf (FILE, "\t.align\t%d\n", floor_log2 ((ALIGN) / BITS_PER_UNIT));\ + ASM_OUTPUT_LABEL ((FILE), (NAME)); \ + fprintf (FILE, "\t.byte 0:%d\n", SIZE); \ + } while (0) + + /* CAM does not allow us to declare a symbol as external first and then + define it in the same file later. Thus, we keep a list of all external + references, remove all symbols defined locally from it and output it at + the end of the asm file. */ + + #define ASM_OUTPUT_EXTERNAL(FILE,DECL,NAME) \ + unicosmk_add_extern ((NAME)) + + #define ASM_OUTPUT_EXTERNAL_LIBCALL(STREAM,SYMREF) \ + unicosmk_add_extern (XSTR ((SYMREF), 0)) + + /* This is how to declare an object. We don't have to output anything if + it is a global variable because those go into unique `common' sections + and the section name is globally visible. For local variables, we simply + output the label. In any case, we have to record that no extern + declaration should be generated for the symbol. */ + + #define ASM_DECLARE_OBJECT_NAME(STREAM,NAME,DECL) \ + do { tree name_tree; \ + name_tree = get_identifier ((NAME)); \ + TREE_ASM_WRITTEN (name_tree) = 1; \ + if (!TREE_PUBLIC (DECL)) \ + { \ + assemble_name (STREAM, NAME); \ + fputs (":\n", STREAM); \ + } \ + } while(0) + + /* + #define ASM_OUTPUT_SECTION_NAME(STREAM, DECL, NAME, RELOC) \ + unicosmk_output_section_name ((STREAM), (DECL), (NAME), (RELOC)) + */ + + /* Switch into a generic section. */ + #define TARGET_ASM_NAMED_SECTION unicosmk_asm_named_section + + #undef ASM_OUTPUT_MAX_SKIP_ALIGN + #define ASM_OUTPUT_MAX_SKIP_ALIGN(STREAM,POWER,MAXSKIP) + + /* We have to define these because we do not use the floating-point + emulation. Unfortunately, atof does not accept hex literals. */ + + #ifndef REAL_ARITHMETIC + #define REAL_VALUE_ATOF(x,s) atof(x) + #define REAL_VALUE_HTOF(x,s) atof(x) + #endif + + #undef NM_FLAGS + + #undef OBJECT_FORMAT_COFF + + /* We cannot generate debugging information on Unicos/Mk. */ + + #undef SDB_DEBUGGING_INFO + #undef MIPS_DEBUGGING_INFO + #undef DBX_DEBUGGING_INFO + #undef DWARF_DEBUGGING_INFO + #undef DWARF2_DEBUGGING_INFO + #undef DWARF2_UNWIND_INFO + #undef INCOMING_RETURN_ADDR_RTX + + + /* We use the functions provided by the system library for integer + division. */ + + #undef UDIVDI3_LIBCALL + #undef DIVDI3_LIBCALL + #define UDIVDI3_LIBCALL "$uldiv" + #define DIVDI3_LIBCALL "$sldiv" + + /* This is necessary to prevent gcc from generating calls to __divsi3. */ + + #define INIT_TARGET_OPTABS \ + do { \ + sdiv_optab->handlers[(int) SImode].libfunc = NULL_RTX; \ + udiv_optab->handlers[(int) SImode].libfunc = NULL_RTX; \ + } while (0) + + #undef ASM_OUTPUT_SOURCE_LINE + + /* We don't need a start file. */ + + #undef STARTFILE_SPEC + #define STARTFILE_SPEC "" + + /* These are the libraries we have to link with. + ??? The Craylibs directory should be autoconfed. */ + #undef LIB_SPEC + #define LIB_SPEC "-L/opt/ctl/craylibs/craylibs -lu -lm -lc -lsma" + + #undef BUILD_VA_LIST_TYPE + #undef EXPAND_BUILTIN_VA_START + #undef EXPAND_BUILTIN_VA_ARG + + #define EH_FRAME_IN_DATA_SECTION 1 diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/vms-cc.c gcc-3.1/gcc/config/alpha/vms-cc.c *** gcc-3.0.4/gcc/config/alpha/vms-cc.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/alpha/vms-cc.c Thu Dec 13 11:55:26 2001 *************** *** 0 **** --- 1,379 ---- + /* VMS DEC C wrapper. + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Douglas B. Rupp (rupp@gnat.com). + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GNU CC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU CC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + /* This program is a wrapper around the VMS DEC C compiler. + It translates Unix style command line options into corresponding + VMS style qualifiers and then spawns the DEC C compiler. */ + + #include "config.h" + #include "system.h" + + #undef PATH_SEPARATOR + #undef PATH_SEPARATOR_STR + #define PATH_SEPARATOR ',' + #define PATH_SEPARATOR_STR "," + + /* These can be set by command line arguments */ + int verbose = 0; + int save_temps = 0; + + int comp_arg_max = -1; + const char **comp_args = 0; + int comp_arg_index = -1; + char *objfilename = 0; + + char *system_search_dirs = (char *) ""; + char *search_dirs; + + char *default_defines = (char *) ""; + char *defines; + + /* Translate a Unix syntax directory specification into VMS syntax. + If indicators of VMS syntax found, return input string. */ + static char *to_host_dir_spec PARAMS ((char *)); + + /* Translate a Unix syntax file specification into VMS syntax. + If indicators of VMS syntax found, return input string. */ + static char *to_host_file_spec PARAMS ((char *)); + + /* Add a translated arg to the list to be passed to DEC CC */ + static void addarg PARAMS ((const char *)); + + /* Preprocess the number of args in P_ARGC and contained in ARGV. + Look for special flags, etc. that must be handled first. */ + static void preprocess_args PARAMS ((int *, char **)); + + /* Process the number of args in P_ARGC and contained in ARGV. Look + for special flags, etc. that must be handled for the VMS compiler. */ + static void process_args PARAMS ((int *, char **)); + + /* Action routine called by decc$to_vms */ + static int translate_unix PARAMS ((char *, int)); + + int main PARAMS ((int, char **)); + + /* Add the argument contained in STR to the list of arguments to pass to the + compiler. */ + + static void + addarg (str) + const char *str; + { + int i; + + if (++comp_arg_index >= comp_arg_max) + { + const char **new_comp_args + = (const char **) xcalloc (comp_arg_max + 1000, sizeof (char *)); + + for (i = 0; i <= comp_arg_max; i++) + new_comp_args [i] = comp_args [i]; + + if (comp_args) + free (comp_args); + + comp_arg_max += 1000; + comp_args = new_comp_args; + } + + comp_args [comp_arg_index] = str; + } + + static void + preprocess_args (p_argc, argv) + int *p_argc; + char *argv[]; + { + int i; + + for (i = 1; i < *p_argc; i++) + { + if (strcmp (argv[i], "-o") == 0) + { + char *buff, *ptr; + int out_len; + + i++; + ptr = to_host_file_spec (argv[i]); + objfilename = xstrdup (ptr); + out_len = strlen (ptr); + buff = xmalloc (out_len + 6); + + strcpy (buff, "/obj="); + strcat (buff, ptr); + addarg (buff); + } + } + } + + static void + process_args (p_argc, argv) + int *p_argc; + char *argv[]; + { + int i; + + for (i = 1; i < *p_argc; i++) + { + if (strlen (argv[i]) < 2) + continue; + + if (strncmp (argv[i], "-I", 2) == 0) + { + char *ptr; + int new_len, search_dirs_len; + + ptr = to_host_dir_spec (&argv[i][2]); + new_len = strlen (ptr); + search_dirs_len = strlen (search_dirs); + + search_dirs = xrealloc (search_dirs, search_dirs_len + new_len + 2); + if (search_dirs_len > 0) + strcat (search_dirs, PATH_SEPARATOR_STR); + strcat (search_dirs, ptr); + } + else if (strncmp (argv[i], "-D", 2) == 0) + { + char *ptr; + int new_len, defines_len; + + ptr = &argv[i][2]; + new_len = strlen (ptr); + defines_len = strlen (defines); + + defines = xrealloc (defines, defines_len + new_len + 4); + if (defines_len > 0) + strcat (defines, ","); + + strcat (defines, "\""); + strcat (defines, ptr); + strcat (defines, "\""); + } + else if (strcmp (argv[i], "-v") == 0) + verbose = 1; + else if (strcmp (argv[i], "-g0") == 0) + addarg ("/nodebug"); + else if (strcmp (argv[i], "-O0") == 0) + addarg ("/noopt"); + else if (strncmp (argv[i], "-g", 2) == 0) + addarg ("/debug"); + else if (strcmp (argv[i], "-E") == 0) + addarg ("/preprocess"); + else if (strcmp (argv[i], "-save-temps") == 0) + save_temps = 1; + } + } + + /* The main program. Spawn the VMS DEC C compiler after fixing up the + Unix-like flags and args to be what VMS DEC C wants. */ + + typedef struct dsc {unsigned short len, mbz; char *adr; } Descr; + + int + main (argc, argv) + int argc; + char **argv; + { + int i; + char cwdev [128], *devptr; + int devlen; + char *cwd = getcwd (0, 1024); + + devptr = strchr (cwd, ':'); + devlen = (devptr - cwd) + 1; + strncpy (cwdev, cwd, devlen); + cwdev [devlen] = '\0'; + + search_dirs = xmalloc (strlen (system_search_dirs) + 1); + strcpy (search_dirs, system_search_dirs); + + defines = xmalloc (strlen (default_defines) + 1); + strcpy (defines, default_defines); + + addarg ("cc"); + preprocess_args (&argc , argv); + process_args (&argc , argv); + + if (strlen (search_dirs) > 0) + { + addarg ("/include=("); + addarg (search_dirs); + addarg (")"); + } + + if (strlen (defines) > 0) + { + addarg ("/define=("); + addarg (defines); + addarg (")"); + } + + for (i = 1; i < argc; i++) + { + int arg_len = strlen (argv[i]); + + if (strcmp (argv[i], "-o") == 0) + i++; + else if (strcmp (argv[i], "-v" ) == 0 + || strcmp (argv[i], "-E") == 0 + || strcmp (argv[i], "-c") == 0 + || strncmp (argv[i], "-g", 2 ) == 0 + || strncmp (argv[i], "-O", 2 ) == 0 + || strcmp (argv[i], "-save-temps") == 0 + || (arg_len > 2 && strncmp (argv[i], "-I", 2) == 0) + || (arg_len > 2 && strncmp (argv[i], "-D", 2) == 0)) + ; + + /* Unix style file specs and VMS style switches look alike, so assume + an arg consisting of one and only one slash, and that being first, is + really a switch. */ + else if ((argv[i][0] == '/') && (strchr (&argv[i][1], '/') == 0)) + addarg (argv[i]); + else + { + /* Assume filename arg */ + char buff [256], *ptr; + int buff_len; + + ptr = to_host_file_spec (argv[i]); + arg_len = strlen (ptr); + + if (ptr[0] == '[') + sprintf (buff, "%s%s", cwdev, ptr); + else if (strchr (ptr, ':')) + sprintf (buff, "%s", ptr); + else + sprintf (buff, "%s%s", cwd, ptr); + + buff_len = strlen (buff); + ptr = xmalloc (buff_len + 1); + + strcpy (ptr, buff); + addarg (ptr); + } + } + + addarg (NULL); + + if (verbose) + { + int i; + + for (i = 0; i < comp_arg_index; i++) + printf ("%s ", comp_args [i]); + + putchar ('\n'); + } + + { + int i; + int len = 0; + + for (i = 0; comp_args[i]; i++) + len = len + strlen (comp_args[i]) + 1; + + { + char *allargs = (char *) alloca (len + 1); + Descr cmd; + int status; + int status1 = 1; + + for (i = 0; i < len + 1; i++) + allargs [i] = 0; + + for (i = 0; comp_args [i]; i++) + { + strcat (allargs, comp_args [i]); + strcat (allargs, " "); + } + + cmd.adr = allargs; + cmd.len = len; + cmd.mbz = 0; + + i = LIB$SPAWN (&cmd, 0, 0, 0, 0, 0, &status); + + if ((i & 1) != 1) + { + LIB$SIGNAL (i); + exit (1); + } + + if ((status & 1) == 1 && (status1 & 1) == 1) + exit (0); + + exit (1); + } + } + } + + static char new_host_filespec [255]; + static char new_host_dirspec [255]; + static char filename_buff [256]; + + static int + translate_unix (name, type) + char *name; + int type ATTRIBUTE_UNUSED; + { + strcpy (filename_buff, name); + return 0; + } + + static char * + to_host_dir_spec (dirspec) + char *dirspec; + { + int len = strlen (dirspec); + + strcpy (new_host_dirspec, dirspec); + + if (strchr (new_host_dirspec, ']') || strchr (new_host_dirspec, ':')) + return new_host_dirspec; + + while (len > 1 && new_host_dirspec [len-1] == '/') + { + new_host_dirspec [len-1] = 0; + len--; + } + + decc$to_vms (new_host_dirspec, translate_unix, 1, 2); + strcpy (new_host_dirspec, filename_buff); + + return new_host_dirspec; + + } + + static char * + to_host_file_spec (filespec) + char *filespec; + { + strcpy (new_host_filespec, ""); + if (strchr (filespec, ']') || strchr (filespec, ':')) + strcpy (new_host_filespec, filespec); + else + { + decc$to_vms (filespec, translate_unix, 1, 1); + strcpy (new_host_filespec, filename_buff); + } + + return new_host_filespec; + } diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/vms-crt0-64.c gcc-3.1/gcc/config/alpha/vms-crt0-64.c *** gcc-3.0.4/gcc/config/alpha/vms-crt0-64.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/alpha/vms-crt0-64.c Fri Dec 14 12:55:07 2001 *************** *** 0 **** --- 1,99 ---- + /* VMS 64bit crt0 returning VMS style condition codes . + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Douglas B. Rupp (rupp@gnat.com). + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + In addition to the permissions in the GNU General Public License, the + Free Software Foundation gives you unlimited permission to link the + compiled version of this file into combinations with other programs, + and to distribute those combinations without any restriction coming + from the use of this file. (The General Public License restrictions + do apply in other respects; for example, they cover modification of + the file, and distribution when not linked into a combine + executable.) + + 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. */ + + #if !defined(__DECC) + You Lose! This file can only be compiled with DEC C. + #else + + /* This file can only be compiled with DEC C, due the the call to + lib$establish and the pragmas pointer_size. */ + + #pragma __pointer_size short + + #include + #include + #include + + extern void decc$main (); + + extern int main (); + + static int + handler (sigargs, mechargs) + void *sigargs; + void *mechargs; + { + return SS$_RESIGNAL; + } + + int + __main (arg1, arg2, arg3, image_file_desc, arg5, arg6) + void *arg1, *arg2, *arg3; + void *image_file_desc; + void *arg5, *arg6; + { + int argc; + char **argv; + char **envp; + + #pragma __pointer_size long + + int i; + char **long_argv; + char **long_envp; + + #pragma __pointer_size short + + lib$establish (handler); + decc$main (arg1, arg2, arg3, image_file_desc, + arg5, arg6, &argc, &argv, &envp); + + #pragma __pointer_size long + + /* Reallocate argv with 64 bit pointers. */ + long_argv = (char **) malloc (sizeof (char *) * (argc + 1)); + + for (i = 0; i < argc; i++) + long_argv[i] = strdup (argv[i]); + + long_argv[argc] = (char *) 0; + + long_envp = (char **) malloc (sizeof (char *) * 5); + + for (i = 0; envp[i]; i++) + long_envp[i] = strdup (envp[i]); + + long_envp[i] = (char *) 0; + + #pragma __pointer_size short + + return main (argc, long_argv, long_envp); + } + #endif diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/vms-crt0.c gcc-3.1/gcc/config/alpha/vms-crt0.c *** gcc-3.0.4/gcc/config/alpha/vms-crt0.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/alpha/vms-crt0.c Mon Dec 10 03:07:22 2001 *************** *** 0 **** --- 1,71 ---- + /* VMS crt0 returning VMS style condition codes . + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Douglas B. Rupp (rupp@gnat.com). + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + In addition to the permissions in the GNU General Public License, the + Free Software Foundation gives you unlimited permission to link the + compiled version of this file into combinations with other programs, + and to distribute those combinations without any restriction coming + from the use of this file. (The General Public License restrictions + do apply in other respects; for example, they cover modification of + the file, and distribution when not linked into a combine + executable.) + + 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. */ + + #if !defined(__DECC) + You Lose! This file can only be compiled with DEC C. + #else + + /* This file can only be compiled with DEC C, due the the call to + lib$establish. */ + + #include + #include + #include + + extern void decc$main (); + + extern int main (); + + static int + handler (sigargs, mechargs) + void *sigargs; + void *mechargs; + { + return SS$_RESIGNAL; + } + + int + __main (arg1, arg2, arg3, image_file_desc, arg5, arg6) + void *arg1, *arg2, *arg3; + void *image_file_desc; + void *arg5, *arg6; + { + int argc; + char **argv; + char **envp; + + lib$establish (handler); + + decc$main(arg1, arg2, arg3, image_file_desc, arg5, arg6, + &argc, &argv, &envp); + + return main (argc, argv, envp); + } + #endif diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/vms-dwarf2.asm gcc-3.1/gcc/config/alpha/vms-dwarf2.asm *** gcc-3.0.4/gcc/config/alpha/vms-dwarf2.asm Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/alpha/vms-dwarf2.asm Sun Dec 2 14:38:07 2001 *************** *** 0 **** --- 1,82 ---- + /* VMS dwarf2 section sequentializer. + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Douglas B. Rupp (rupp@gnat.com). + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + In addition to the permissions in the GNU General Public License, the + Free Software Foundation gives you unlimited permission to link the + compiled version of this file into combinations with other programs, + and to distribute those combinations without any restriction coming + from the use of this file. (The General Public License restrictions + do apply in other respects; for example, they cover modification of + the file, and distribution when not linked into a combine + executable.) + + 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. */ + + /* Linking with this file forces Dwarf2 debug sections to be + sequentially loaded by the VMS linker, enabling GDB to read them. */ + + .section .debug_abbrev,NOWRT + .align 0 + .globl $dwarf2.debug_abbrev + $dwarf2.debug_abbrev: + + .section .debug_aranges,NOWRT + .align 0 + .globl $dwarf2.debug_aranges + $dwarf2.debug_aranges: + + .section .debug_frame,NOWRT + .align 0 + .globl $dwarf2.debug_frame + $dwarf2.debug_frame: + + .section .debug_info,NOWRT + .align 0 + .globl $dwarf2.debug_info + $dwarf2.debug_info: + + .section .debug_line,NOWRT + .align 0 + .globl $dwarf2.debug_line + $dwarf2.debug_line: + + .section .debug_loc,NOWRT + .align 0 + .globl $dwarf2.debug_loc + $dwarf2.debug_loc: + + .section .debug_macinfo,NOWRT + .align 0 + .globl $dwarf2.debug_macinfo + $dwarf2.debug_macinfo: + + .section .debug_pubnames,NOWRT + .align 0 + .globl $dwarf2.debug_pubnames + $dwarf2.debug_pubnames: + + .section .debug_str,NOWRT + .align 0 + .globl $dwarf2.debug_str + $dwarf2.debug_str: + + .section .debug_zzzzzz,NOWRT + .align 0 + .globl $dwarf2.debug_zzzzzz + $dwarf2.debug_zzzzzz: diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/vms-dwarf2eh.asm gcc-3.1/gcc/config/alpha/vms-dwarf2eh.asm *** gcc-3.0.4/gcc/config/alpha/vms-dwarf2eh.asm Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/alpha/vms-dwarf2eh.asm Tue Jan 1 22:15:20 2002 *************** *** 0 **** --- 1,37 ---- + /* VMS dwarf2 exception handling section sequentializer. + Copyright (C) 2002 Free Software Foundation, Inc. + Contributed by Douglas B. Rupp (rupp@gnat.com). + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + In addition to the permissions in the GNU General Public License, the + Free Software Foundation gives you unlimited permission to link the + compiled version of this file into combinations with other programs, + and to distribute those combinations without any restriction coming + from the use of this file. (The General Public License restrictions + do apply in other respects; for example, they cover modification of + the file, and distribution when not linked into a combine + executable.) + + 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. */ + + /* Linking with this file forces the Dwarf2 EH section to be + individually loaded by the VMS linker an the unwinder to read it. */ + + .section .eh_frame,NOWRT + .align 0 + .global __EH_FRAME_BEGIN__ + __EH_FRAME_BEGIN__: diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/vms-ld.c gcc-3.1/gcc/config/alpha/vms-ld.c *** gcc-3.0.4/gcc/config/alpha/vms-ld.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/alpha/vms-ld.c Tue Jan 1 22:15:20 2002 *************** *** 0 **** --- 1,777 ---- + /* VMS linker wrapper. + Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002 + Free Software Foundation, Inc. + Contributed by Douglas B. Rupp (rupp@gnat.com). + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GNU CC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU CC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + /* This program is a wrapper around the VMS linker. + It translates Unix style command line options into corresponding + VMS style qualifiers and then spawns the VMS linker. */ + + #include "config.h" + #include "system.h" + + typedef struct dsc {unsigned short len, mbz; char *adr; } Descr; + + #undef PATH_SEPARATOR + #undef PATH_SEPARATOR_STR + #define PATH_SEPARATOR ',' + #define PATH_SEPARATOR_STR "," + + /* Local variable declarations. */ + + /* File specification for vms-dwarf2.o. */ + static char *vmsdwarf2spec = 0; + + /* File specification for vms-dwarf2eh.o. */ + static char *vmsdwarf2ehspec = 0; + + /* verbose = 1 if -v passed. */ + static int verbose = 0; + + /* save_temps = 1 if -save-temps passed. */ + static int save_temps = 0; + + /* By default don't generate executable file if there are errors + in the link. Override with --noinhibit-exec. */ + static int inhibit_exec = 1; + + /* debug = 1 if -g passed. */ + static int debug = 0; + + /* By default prefer to link with shareable image libraries. + Override with -static. */ + static int staticp = 0; + + /* By default generate an executable, not a shareable image library. + Override with -shared. */ + static int share = 0; + + /* Remember if IDENTIFICATION given on command line. */ + static int ident = 0; + + /* Keep track of arg translations. */ + static int link_arg_max = -1; + static const char **link_args = 0; + static int link_arg_index = -1; + + /* Keep track of filenames */ + static char optfilefullname [267]; + static char *sharefilename = 0; + static char *exefilename = 0; + + /* System search dir list. Leave blank since link handles this + internally. */ + static char *system_search_dirs = ""; + + /* Search dir list passed on command line (with -L). */ + static char *search_dirs; + + /* Local function declarations. */ + + /* Add STR to the list of arguments to pass to the linker. Expand the list as + necessary to accommodate. */ + static void addarg PARAMS ((const char *)); + + /* Check to see if NAME is a regular file, i.e. not a directory */ + static int is_regular_file PARAMS ((char *)); + + /* Translate a Unix syntax file specification FILESPEC into VMS syntax. + If indicators of VMS syntax found, return input string. */ + static char *to_host_file_spec PARAMS ((char *)); + + /* Locate the library named LIB_NAME in the set of paths PATH_VAL. */ + static char *locate_lib PARAMS ((char *, char *)); + + /* Given a library name NAME, i.e. foo, Look for libfoo.lib and then + libfoo.a in the set of directories we are allowed to search in. */ + static const char *expand_lib PARAMS ((char *)); + + /* Preprocess the number of args P_ARGC in ARGV. + Look for special flags, etc. that must be handled first. */ + static void preprocess_args PARAMS ((int *, char **)); + + /* Preprocess the number of args P_ARGC in ARGV. Look for + special flags, etc. that must be handled for the VMS linker. */ + static void process_args PARAMS ((int *, char **)); + + /* Action routine called by decc$to_vms. NAME is a file name or + directory name. TYPE is unused. */ + static int translate_unix PARAMS ((char *, int)); + + int main PARAMS ((int, char **)); + + static void + addarg (str) + const char *str; + { + int i; + + if (++link_arg_index >= link_arg_max) + { + const char **new_link_args + = (const char **) xcalloc (link_arg_max + 1000, sizeof (char *)); + + for (i = 0; i <= link_arg_max; i++) + new_link_args [i] = link_args [i]; + + if (link_args) + free (link_args); + + link_arg_max += 1000; + link_args = new_link_args; + } + + link_args [link_arg_index] = str; + } + + static char * + locate_lib (lib_name, path_val) + char *lib_name; + char *path_val; + { + int lib_len = strlen (lib_name); + char *eptr, *sptr; + + for (sptr = path_val; *sptr; sptr = eptr) + { + char *buf, *ptr; + + while (*sptr == PATH_SEPARATOR) + sptr ++; + + eptr = strchr (sptr, PATH_SEPARATOR); + if (eptr == 0) + eptr = strchr (sptr, 0); + + buf = alloca ((eptr-sptr) + lib_len + 4 + 2); + strncpy (buf, sptr, eptr-sptr); + buf [eptr-sptr] = 0; + strcat (buf, "/"); + strcat (buf, lib_name); + ptr = strchr (buf, 0); + + if (debug || staticp) + { + /* For debug or static links, look for shareable image libraries + last. */ + strcpy (ptr, ".a"); + if (is_regular_file (buf)) + return xstrdup (to_host_file_spec (buf)); + + strcpy (ptr, ".olb"); + if (is_regular_file (buf)) + return xstrdup (to_host_file_spec (buf)); + + strcpy (ptr, ".exe"); + if (is_regular_file (buf)) + return xstrdup (to_host_file_spec (buf)); + } + else + { + /* Otherwise look for shareable image libraries first. */ + strcpy (ptr, ".exe"); + if (is_regular_file (buf)) + return xstrdup (to_host_file_spec (buf)); + + strcpy (ptr, ".a"); + if (is_regular_file (buf)) + return xstrdup (to_host_file_spec (buf)); + + strcpy (ptr, ".olb"); + if (is_regular_file (buf)) + return xstrdup (to_host_file_spec (buf)); + } + } + + return 0; + } + + static const char * + expand_lib (name) + char *name; + { + char *lib, *lib_path; + + if (strcmp (name, "c") == 0) + /* IEEE VAX C compatible library for non-prefixed (e.g. no DECC$) + C RTL functions. */ + return "sys$library:vaxcrtltx.olb"; + + else if (strcmp (name, "m") == 0) + /* No separate library for math functions */ + return ""; + + else + { + lib = xmalloc (strlen (name) + 14); + + strcpy (lib, "lib"); + strcat (lib, name); + lib_path = locate_lib (lib, search_dirs); + + if (lib_path) + return lib_path; + } + + fprintf (stderr, + "Couldn't locate library: lib%s.exe, lib%s.a or lib%s.olb\n", + name, name, name); + + exit (1); + } + + static int + is_regular_file (name) + char *name; + { + int ret; + struct stat statbuf; + + ret = stat (name, &statbuf); + return !ret && S_ISREG (statbuf.st_mode); + } + + static void + preprocess_args (p_argc, argv) + int *p_argc; + char **argv; + { + int i; + + for (i = 1; i < *p_argc; i++) + if (strlen (argv[i]) >= 6 && strncmp (argv[i], "-shared", 7) == 0) + share = 1; + + for (i = 1; i < *p_argc; i++) + if (strcmp (argv[i], "-o") == 0) + { + char *buff, *ptr; + int out_len; + int len; + + i++; + ptr = to_host_file_spec (argv[i]); + exefilename = xstrdup (ptr); + out_len = strlen (ptr); + buff = xmalloc (out_len + 18); + + if (share) + strcpy (buff, "/share="); + else + strcpy (buff, "/exe="); + + strcat (buff, ptr); + addarg (buff); + + if (share) + { + sharefilename = xmalloc (out_len+5); + if (ptr == strchr (argv[i], ']')) + strcpy (sharefilename, ++ptr); + else if (ptr == strchr (argv[i], ':')) + strcpy (sharefilename, ++ptr); + else if (ptr == strrchr (argv[i], '/')) + strcpy (sharefilename, ++ptr); + else + strcpy (sharefilename, argv[i]); + + len = strlen (sharefilename); + if (strncasecmp (&sharefilename[len-4], ".exe", 4) == 0) + sharefilename[len-4] = 0; + + for (ptr = sharefilename; *ptr; ptr++) + *ptr = TOUPPER (*ptr); + } + } + } + + static void + process_args (p_argc, argv) + int *p_argc; + char **argv; + { + int i; + + for (i = 1; i < *p_argc; i++) + { + if (strlen (argv[i]) < 2) + continue; + + if (strncmp (argv[i], "-L", 2) == 0) + { + char *nbuff, *ptr; + int new_len, search_dirs_len; + + ptr = &argv[i][2]; + new_len = strlen (ptr); + search_dirs_len = strlen (search_dirs); + + nbuff = xmalloc (new_len + 1); + strcpy (nbuff, ptr); + + /* Remove trailing slashes. */ + while (new_len > 1 && nbuff [new_len - 1] == '/') + { + nbuff [new_len - 1] = 0; + new_len--; + } + + search_dirs = xrealloc (search_dirs, search_dirs_len + new_len + 2); + if (search_dirs_len > 0) + strcat (search_dirs, PATH_SEPARATOR_STR); + + strcat (search_dirs, nbuff); + free (nbuff); + } + + /* -v turns on verbose option here and is passed on to gcc. */ + else if (strcmp (argv[i], "-v") == 0) + verbose = 1; + else if (strcmp (argv[i], "-g0") == 0) + addarg ("/notraceback"); + else if (strncmp (argv[i], "-g", 2) == 0) + { + addarg ("/debug"); + debug = 1; + } + else if (strcmp (argv[i], "-static") == 0) + staticp = 1; + else if (strcmp (argv[i], "-map") == 0) + { + char *buff, *ptr; + + buff = xmalloc (strlen (exefilename) + 5); + strcpy (buff, exefilename); + ptr = strchr (buff, '.'); + if (ptr) + *ptr = 0; + + strcat (buff, ".map"); + addarg ("/map="); + addarg (buff); + addarg ("/full"); + } + else if (strcmp (argv[i], "-save-temps") == 0) + save_temps = 1; + else if (strcmp (argv[i], "--noinhibit-exec") == 0) + inhibit_exec = 0; + } + } + + /* The main program. Spawn the VMS linker after fixing up the Unix-like flags + and args to be what the VMS linker wants. */ + + int + main (argc, argv) + int argc; + char **argv; + { + int i; + char cwdev [128], *devptr; + int devlen; + int optfd; + FILE *optfile; + char *cwd = getcwd (0, 1024); + char *optfilename; + + devptr = strchr (cwd, ':'); + devlen = (devptr - cwd) + 1; + strncpy (cwdev, cwd, devlen); + cwdev [devlen] = '\0'; + + search_dirs = xmalloc (strlen (system_search_dirs) + 1); + strcpy (search_dirs, system_search_dirs); + + addarg ("link"); + + /* Pass to find args that have to be append first. */ + preprocess_args (&argc , argv); + + /* Pass to find the rest of the args. */ + process_args (&argc , argv); + + /* Create a temp file to hold args, otherwise we can easily exceed the VMS + command line length limits. */ + optfilename = alloca (strlen ("LDXXXXXX") + 1); + strcpy (optfilename, "LDXXXXXX"); + optfd = mkstemp (optfilename); + getcwd (optfilefullname, 256, 1); /* VMS style cwd. */ + strcat (optfilefullname, optfilename); + strcat (optfilefullname, "."); + optfile = fdopen (optfd, "w"); + + /* Write out the IDENTIFICATION argument first so that it can be overridden + by an options file. */ + for (i = 1; i < argc; i++) + { + int arg_len = strlen (argv[i]); + + if (arg_len > 6 && strncasecmp (argv[i], "IDENT=", 6) == 0) + { + /* Comes from command line. If present will always appear before + IDENTIFICATION=... and will override. */ + + if (!ident) + ident = 1; + } + else if (arg_len > 15 + && strncasecmp (argv[i], "IDENTIFICATION=", 15) == 0) + { + /* Comes from pragma Ident (). */ + + if (!ident) + { + fprintf (optfile, "case_sensitive=yes\n"); + fprintf (optfile, "IDENTIFICATION=\"%15.15s\"\n", &argv[i][15]); + fprintf (optfile, "case_sensitive=NO\n"); + ident = 1; + } + } + } + + for (i = 1; i < argc; i++) + { + int arg_len = strlen (argv[i]); + + if (strcmp (argv[i], "-o") == 0) + i++; + else if (arg_len > 2 && strncmp (argv[i], "-l", 2) == 0) + { + const char *libname = expand_lib (&argv[i][2]); + const char *ext; + int len; + + if ((len = strlen (libname)) > 0) + { + char buff [256]; + + if (len > 4 && strcasecmp (&libname [len-4], ".exe") == 0) + ext = "/shareable"; + else + ext = "/library"; + + if (libname[0] == '[') + sprintf (buff, "%s%s", cwdev, libname); + else + sprintf (buff, "%s", libname); + + fprintf (optfile, "%s%s\n", buff, ext); + } + } + + else if (strcmp (argv[i], "-v" ) == 0 + || strncmp (argv[i], "-g", 2 ) == 0 + || strcmp (argv[i], "-static" ) == 0 + || strcmp (argv[i], "-map" ) == 0 + || strcmp (argv[i], "-save-temps") == 0 + || strcmp (argv[i], "--noinhibit-exec") == 0 + || (arg_len > 2 && strncmp (argv[i], "-L", 2) == 0) + || (arg_len >= 6 && strncmp (argv[i], "-share", 6) == 0)) + ; + else if (arg_len > 1 && argv[i][0] == '@') + { + FILE *atfile; + char *ptr, *ptr1; + struct stat statbuf; + char *buff; + int len; + + if (stat (&argv[i][1], &statbuf)) + { + fprintf (stderr, "Couldn't open linker response file: %s\n", + &argv[i][1]); + exit (1); + } + + buff = xmalloc (statbuf.st_size + 1); + atfile = fopen (&argv[i][1], "r"); + fgets (buff, statbuf.st_size + 1, atfile); + fclose (atfile); + + len = strlen (buff); + if (buff [len - 1] == '\n') + { + buff [len - 1] = 0; + len--; + } + + ptr = buff; + + do + { + ptr1 = strchr (ptr, ' '); + if (ptr1) + *ptr1 = 0; + ptr = to_host_file_spec (ptr); + if (ptr[0] == '[') + fprintf (optfile, "%s%s\n", cwdev, ptr); + else + fprintf (optfile, "%s\n", ptr); + ptr = ptr1 + 1; + } while (ptr1); + } + + /* Unix style file specs and VMS style switches look alike, so assume an + arg consisting of one and only one slash, and that being first, is + really a switch. */ + else if ((argv[i][0] == '/') && (strchr (&argv[i][1], '/') == 0)) + addarg (argv[i]); + else if (arg_len > 4 + && strncasecmp (&argv[i][arg_len-4], ".OPT", 4) == 0) + { + FILE *optfile1; + char buff [256]; + + optfile1 = fopen (argv[i], "r"); + while (fgets (buff, 256, optfile1)) + fputs (buff, optfile); + + fclose (optfile1); + } + else if (arg_len > 7 && strncasecmp (argv[i], "GSMATCH", 7) == 0) + fprintf (optfile, "%s\n", argv[i]); + else if (arg_len > 6 && strncasecmp (argv[i], "IDENT=", 6) == 0) + { + /* Comes from command line and will override pragma. */ + fprintf (optfile, "case_sensitive=yes\n"); + fprintf (optfile, "IDENT=\"%15.15s\"\n", &argv[i][6]); + fprintf (optfile, "case_sensitive=NO\n"); + ident = 1; + } + else if (arg_len > 15 + && strncasecmp (argv[i], "IDENTIFICATION=", 15) == 0) + ; + else + { + /* Assume filename arg. */ + const char *addswitch = ""; + char buff [256]; + int buff_len; + int is_cld = 0; + + argv[i] = to_host_file_spec (argv[i]); + arg_len = strlen (argv[i]); + + if (arg_len > 4 && strcasecmp (&argv[i][arg_len-4], ".exe") == 0) + addswitch = "/shareable"; + + if (arg_len > 4 && strcasecmp (&argv[i][arg_len-4], ".cld") == 0) + { + addswitch = "/shareable"; + is_cld = 1; + } + + if (arg_len > 2 && strcasecmp (&argv[i][arg_len-2], ".a") == 0) + addswitch = "/lib"; + + if (arg_len > 4 && strcasecmp (&argv[i][arg_len-4], ".olb") == 0) + addswitch = "/lib"; + + if (argv[i][0] == '[') + sprintf (buff, "%s%s%s\n", cwdev, argv[i], addswitch); + else if (strchr (argv[i], ':')) + sprintf (buff, "%s%s\n", argv[i], addswitch); + else + sprintf (buff, "%s%s%s\n", cwd, argv[i], addswitch); + + buff_len = strlen (buff); + + if (buff_len >= 15 + && strcasecmp (&buff[buff_len - 15], "vms-dwarf2eh.o\n") == 0) + vmsdwarf2ehspec = xstrdup (buff); + else if (buff_len >= 13 + && strcasecmp (&buff[buff_len - 13],"vms-dwarf2.o\n") == 0) + vmsdwarf2spec = xstrdup (buff); + else if (is_cld) + { + addarg (buff); + addarg (","); + } + else + fprintf (optfile, buff); + } + } + + #if 0 + if (share) + fprintf (optfile, "symbol_vector=(main=procedure)\n"); + #endif + + if (vmsdwarf2ehspec) + { + fprintf (optfile, "case_sensitive=yes\n"); + fprintf (optfile, "cluster=DWARF2eh,,,%s", vmsdwarf2ehspec); + fprintf (optfile, "collect=DWARF2eh,eh_frame\n"); + fprintf (optfile, "case_sensitive=NO\n"); + } + + if (debug && vmsdwarf2spec) + { + fprintf (optfile, "case_sensitive=yes\n"); + fprintf (optfile, "cluster=DWARF2debug,,,%s", vmsdwarf2spec); + fprintf (optfile, "collect=DWARF2debug,debug_abbrev,debug_aranges,-\n"); + fprintf (optfile, " debug_frame,debug_info,debug_line,debug_loc,-\n"); + fprintf (optfile, " debug_macinfo,debug_pubnames,debug_str,-\n"); + fprintf (optfile, " debug_zzzzzz\n"); + fprintf (optfile, "case_sensitive=NO\n"); + } + + if (debug && share) + { + fprintf (optfile, "case_sensitive=yes\n"); + fprintf (optfile, "symbol_vector=(-\n"); + fprintf (optfile, + "%s$DWARF2.DEBUG_ABBREV/$dwarf2.debug_abbrev=DATA,-\n", + sharefilename); + fprintf (optfile, + "%s$DWARF2.DEBUG_ARANGES/$dwarf2.debug_aranges=DATA,-\n", + sharefilename); + fprintf (optfile, "%s$DWARF2.DEBUG_FRAME/$dwarf2.debug_frame=DATA,-\n", + sharefilename); + fprintf (optfile, "%s$DWARF2.DEBUG_INFO/$dwarf2.debug_info=DATA,-\n", + sharefilename); + fprintf (optfile, "%s$DWARF2.DEBUG_LINE/$dwarf2.debug_line=DATA,-\n", + sharefilename); + fprintf (optfile, "%s$DWARF2.DEBUG_LOC/$dwarf2.debug_loc=DATA,-\n", + sharefilename); + fprintf (optfile, + "%s$DWARF2.DEBUG_MACINFO/$dwarf2.debug_macinfo=DATA,-\n", + sharefilename); + fprintf (optfile, + "%s$DWARF2.DEBUG_PUBNAMES/$dwarf2.debug_pubnames=DATA,-\n", + sharefilename); + fprintf (optfile, "%s$DWARF2.DEBUG_STR/$dwarf2.debug_str=DATA,-\n", + sharefilename); + fprintf (optfile, "%s$DWARF2.DEBUG_ZZZZZZ/$dwarf2.debug_zzzzzz=DATA)\n", + sharefilename); + fprintf (optfile, "case_sensitive=NO\n"); + } + + fclose (optfile); + addarg (optfilefullname); + addarg ("/opt"); + + addarg (NULL); + + if (verbose) + { + int i; + + for (i = 0; i < link_arg_index; i++) + printf ("%s ", link_args [i]); + putchar ('\n'); + } + + { + int i; + int len = 0; + + for (i = 0; link_args[i]; i++) + len = len + strlen (link_args[i]) + 1; + + { + char *allargs = (char *) alloca (len + 1); + Descr cmd; + int status; + int status1 = 1; + + for (i = 0; i < len + 1; i++) + allargs [i] = 0; + + for (i = 0; link_args [i]; i++) + { + strcat (allargs, link_args [i]); + strcat (allargs, " "); + } + + cmd.adr = allargs; + cmd.len = len; + cmd.mbz = 0; + + i = LIB$SPAWN (&cmd, 0, 0, 0, 0, 0, &status); + if ((i & 1) != 1) + { + LIB$SIGNAL (i); + exit (1); + } + + if (debug && !share) + { + strcpy (allargs, "@gnu:[bin]set_exe "); + strcat (allargs, exefilename); + strcat (allargs, " /nodebug /silent"); + len = strlen (allargs); + cmd.adr = allargs; + cmd.len = len; + cmd.mbz = 0; + + if (verbose) + printf (allargs); + + i = LIB$SPAWN (&cmd, 0, 0, 0, 0, 0, &status1); + + if ((i & 1) != 1) + { + LIB$SIGNAL (i); + exit (1); + } + } + + if (!save_temps) + remove (optfilefullname); + + if ((status & 1) == 1 && (status1 & 1) == 1) + exit (0); + + if (exefilename && inhibit_exec == 1) + remove (exefilename); + + exit (1); + } + } + } + + static char new_host_filespec [255]; + static char filename_buff [256]; + + static int + translate_unix (name, type) + char *name; + int type ATTRIBUTE_UNUSED; + { + strcpy (filename_buff, name); + return 0; + } + + static char * + to_host_file_spec (filespec) + char *filespec; + { + strcpy (new_host_filespec, ""); + if (strchr (filespec, ']') || strchr (filespec, ':')) + strcpy (new_host_filespec, filespec); + else + { + decc$to_vms (filespec, translate_unix, 1, 1); + strcpy (new_host_filespec, filename_buff); + } + + return new_host_filespec; + } diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/vms-psxcrt0-64.c gcc-3.1/gcc/config/alpha/vms-psxcrt0-64.c *** gcc-3.0.4/gcc/config/alpha/vms-psxcrt0-64.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/alpha/vms-psxcrt0-64.c Fri Dec 14 12:55:07 2001 *************** *** 0 **** --- 1,128 ---- + /* VMS 64bit crt0 returning Unix style condition codes . + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Douglas B. Rupp (rupp@gnat.com). + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + In addition to the permissions in the GNU General Public License, the + Free Software Foundation gives you unlimited permission to link the + compiled version of this file into combinations with other programs, + and to distribute those combinations without any restriction coming + from the use of this file. (The General Public License restrictions + do apply in other respects; for example, they cover modification of + the file, and distribution when not linked into a combine + executable.) + + 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. */ + + #if !defined(__DECC) + You Lose! This file can only be compiled with DEC C. + #else + + /* This file can only be compiled with DEC C, due the the call to + lib$establish and the pragmas pointer_size. */ + + #pragma __pointer_size short + + #include + #include + #include + #include + #include + + extern void decc$main (); + extern int main (); + + static int + handler (sigargs, mechargs) + void *sigargs; + void *mechargs; + { + return SS$_RESIGNAL; + } + + int + __main (arg1, arg2, arg3, image_file_desc, arg5, arg6) + void *arg1, *arg2, *arg3; + void *image_file_desc; + void *arg5, *arg6) + { + int argc; + char **argv; + char **envp; + + #pragma __pointer_size long + + int i; + char **long_argv; + char **long_envp; + int status; + + #pragma __pointer_size short + + lib$establish (handler); + decc$main (arg1, arg2, arg3, image_file_desc, + arg5, arg6, &argc, &argv, &envp); + + #pragma __pointer_size long + + /* Reallocate argv with 64 bit pointers. */ + long_argv = (char **) malloc (sizeof (char *) * (argc + 1)); + + for (i = 0; i < argc; i++) + long_argv[i] = strdup (argv[i]); + + long_argv[argc] = (char *) 0; + + long_envp = (char **) malloc (sizeof (char *) * 5); + + for (i = 0; envp[i]; i++) + long_envp[i] = strdup (envp[i]); + + long_envp[i] = (char *) 0; + + #pragma __pointer_size short + + status = main (argc, long_argv, long_envp); + + /* Map into a range of 0 - 255. */ + status = status & 255; + + if (status > 0) + { + int save_status = status; + + status = C$_EXIT1 + ((status - 1) << STS$V_MSG_NO); + + /* An exit failure status requires a "severe" error. All status values + are defined in errno with a successful (1) severity but can be + changed to an error (2) severity by adding 1. In addition for + compatibility with UNIX exit() routines we inhibit a run-time error + message from being generated on exit(1). */ + + if (save_status == 1) + { + status++; + status |= STS$M_INHIB_MSG; + } + } + + if (status == 0) + status = SS$_NORMAL; + + return status; + } + #endif diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/vms-psxcrt0.c gcc-3.1/gcc/config/alpha/vms-psxcrt0.c *** gcc-3.0.4/gcc/config/alpha/vms-psxcrt0.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/alpha/vms-psxcrt0.c Mon Dec 10 03:07:22 2001 *************** *** 0 **** --- 1,99 ---- + /* VMS crt0 returning Unix style condition codes . + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Douglas B. Rupp (rupp@gnat.com). + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + In addition to the permissions in the GNU General Public License, the + Free Software Foundation gives you unlimited permission to link the + compiled version of this file into combinations with other programs, + and to distribute those combinations without any restriction coming + from the use of this file. (The General Public License restrictions + do apply in other respects; for example, they cover modification of + the file, and distribution when not linked into a combine + executable.) + + 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. */ + + #if !defined(__DECC) + You Lose! This file can only be compiled with DEC C. + #else + + /* This file can only be compiled with DEC C, due the the call to + lib$establish. */ + + #include + #include + #include + #include + #include + + extern void decc$main (); + extern int main (); + + static int + handler (sigargs, mechargs) + void *sigargs; + void *mechargs; + { + return SS$_RESIGNAL; + } + + int + __main (arg1, arg2, arg3, image_file_desc, arg5, arg6) + void *arg1, *arg2, *arg3; + void *image_file_desc; + void *arg5, *arg6; + { + int argc; + char **argv; + char **envp; + int status; + + lib$establish (handler); + decc$main (arg1, arg2, arg3, image_file_desc, arg5, arg6, + &argc, &argv, &envp); + + status = main (argc, argv, envp); + + /* Map into a range of 0 - 255. */ + status = status & 255; + + if (status > 0) + { + int save_status = status; + + status = C$_EXIT1 + ((status - 1) << STS$V_MSG_NO); + + /* An exit failure status requires a "severe" error + All status values are defined in errno with a successful + (1) severity but can be changed to an error (2) severity by adding 1. + In addition for compatibility with UNIX exit() routines we inhibit + a run-time error message from being generated on exit(1). */ + + if (save_status == 1) + { + status++; + status |= STS$M_INHIB_MSG; + } + } + + if (status == 0) + status = SS$_NORMAL; + + return status; + } + #endif diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/vms-tramp.asm gcc-3.1/gcc/config/alpha/vms-tramp.asm *** gcc-3.0.4/gcc/config/alpha/vms-tramp.asm Wed Dec 16 21:01:08 1998 --- gcc-3.1/gcc/config/alpha/vms-tramp.asm Thu Jan 1 00:00:00 1970 *************** *** 1,22 **** - ;# New Alpha OpenVMS trampoline - ;# - .set noreorder - .set volatile - .set noat - .file 1 "tramp.s" - .text - .align 3 - .globl __tramp - .ent __tramp - __tramp..en: - - .link - .align 3 - __tramp: - .pdesc __tramp..en,null - .text - ldq $1,24($27) - ldq $27,16($27) - ldq $28,8($27) - jmp $31,($28),0 - .end __tramp --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/vms.h gcc-3.1/gcc/config/alpha/vms.h *** gcc-3.0.4/gcc/config/alpha/vms.h Thu Nov 2 23:29:08 2000 --- gcc-3.1/gcc/config/alpha/vms.h Mon Apr 15 10:52:24 2002 *************** *** 1,5 **** /* Output variables, constants and external declarations, for GNU compiler. ! Copyright (C) 1996, 1997, 1998, 2000 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,6 ---- /* Output variables, constants and external declarations, for GNU compiler. ! Copyright (C) 1996, 1997, 1998, 2000, 2001, 2002 ! Free Software Foundation, Inc. This file is part of GNU CC. *************** along with GNU CC; see the file COPYING. *** 18,24 **** the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ! #define OPEN_VMS 1 /* This enables certain macros in alpha.h, which will make an indirect reference to an external symbol an invalid address. This needs to be --- 19,26 ---- the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ! #define TARGET_OBJECT_SUFFIX ".obj" ! #define TARGET_EXECUTABLE_SUFFIX ".exe" /* This enables certain macros in alpha.h, which will make an indirect reference to an external symbol an invalid address. This needs to be *************** Boston, MA 02111-1307, USA. */ *** 39,73 **** %{mfloat-vax:-D__G_FLOAT} \ %{!mfloat-vax:-D__IEEE_FLOAT}" - /* Under OSF4, -p and -pg require -lprof1, and -lprof1 requires -lpdf. */ - - #define LIB_SPEC "%{p:-lprof1 -lpdf} %{pg:-lprof1 -lpdf} %{a:-lprof2} -lc" - - /* Pass "-G 8" to ld because Alpha's CC does. Pass -O3 if we are - optimizing, -O1 if we are not. Pass -shared, -non_shared or - -call_shared as appropriate. Also pass -pg. */ - #define LINK_SPEC \ - "-G 8 %{O*:-O3} %{!O*:-O1} %{static:-non_shared} \ - %{!static:%{shared:-shared} %{!shared:-call_shared}} %{pg} %{taso} \ - %{rpath*}" - - /* We allow $'s in identifiers unless -ansi is used .. */ - - #define DOLLARS_IN_IDENTIFIERS 2 - - /* These match the definitions used in DECCRTL, the VMS C run-time library - - #define SIZE_TYPE "unsigned int" - #define PTRDIFF_TYPE "int" - */ - /* By default, allow $ to be part of an identifier. */ #define DOLLARS_IN_IDENTIFIERS 2 #undef TARGET_DEFAULT #define TARGET_DEFAULT (MASK_FP|MASK_FPREGS|MASK_GAS) ! #undef TARGET_OPEN_VMS ! #define TARGET_OPEN_VMS 1 #undef TARGET_NAME #define TARGET_NAME "OpenVMS/Alpha" --- 41,53 ---- %{mfloat-vax:-D__G_FLOAT} \ %{!mfloat-vax:-D__IEEE_FLOAT}" /* By default, allow $ to be part of an identifier. */ #define DOLLARS_IN_IDENTIFIERS 2 #undef TARGET_DEFAULT #define TARGET_DEFAULT (MASK_FP|MASK_FPREGS|MASK_GAS) ! #undef TARGET_ABI_OPEN_VMS ! #define TARGET_ABI_OPEN_VMS 1 #undef TARGET_NAME #define TARGET_NAME "OpenVMS/Alpha" *************** Boston, MA 02111-1307, USA. */ *** 79,92 **** #define STRUCT_VALUE 0 #undef PCC_STATIC_STRUCT_RETURN ! /* no floating emulation. */ ! #undef REAL_ARITHMETIC ! ! /* "long" is 32 bits. */ #undef LONG_TYPE_SIZE #define LONG_TYPE_SIZE 32 ! /* Pointer is 32 bits but the hardware has 64-bit addresses, sign extended. */ #undef POINTER_SIZE #define POINTER_SIZE 32 #define POINTERS_EXTEND_UNSIGNED 0 --- 59,70 ---- #define STRUCT_VALUE 0 #undef PCC_STATIC_STRUCT_RETURN ! /* "long" is 32 bits, but 64 bits for Ada. */ #undef LONG_TYPE_SIZE #define LONG_TYPE_SIZE 32 + #define ADA_LONG_TYPE_SIZE 64 ! /* Pointer is 32 bits but the hardware has 64-bit addresses, sign extended. */ #undef POINTER_SIZE #define POINTER_SIZE 32 #define POINTERS_EXTEND_UNSIGNED 0 *************** Boston, MA 02111-1307, USA. */ *** 107,115 **** --- 85,141 ---- 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, \ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } + /* List the order in which to allocate registers. Each register must be + listed once, even those in FIXED_REGISTERS. + + We allocate in the following order: + $f1 (nonsaved floating-point register) + $f10-$f15 (likewise) + $f22-$f30 (likewise) + $f21-$f16 (likewise, but input args) + $f0 (nonsaved, but return value) + $f2-$f9 (saved floating-point registers) + $1 (nonsaved integer registers) + $22-$25 (likewise) + $28 (likewise) + $0 (likewise, but return value) + $21-$16 (likewise, but input args) + $27 (procedure value in OSF, nonsaved in NT) + $2-$8 (saved integer registers) + $9-$14 (saved integer registers) + $26 (return PC) + $15 (frame pointer) + $29 (global pointer) + $30, $31, $f31 (stack pointer and always zero/ap & fp) */ + + #undef REG_ALLOC_ORDER + #define REG_ALLOC_ORDER \ + {33, \ + 42, 43, 44, 45, 46, 47, \ + 54, 55, 56, 57, 58, 59, 60, 61, 62, \ + 53, 52, 51, 50, 49, 48, \ + 32, \ + 34, 35, 36, 37, 38, 39, 40, 41, \ + 1, \ + 22, 23, 24, 25, \ + 28, \ + 0, \ + 21, 20, 19, 18, 17, 16, \ + 27, \ + 2, 3, 4, 5, 6, 7, 8, \ + 9, 10, 11, 12, 13, 14, \ + 26, \ + 15, \ + 29, \ + 30, 31, 63 } + #undef HARD_FRAME_POINTER_REGNUM #define HARD_FRAME_POINTER_REGNUM 29 + /* Define registers used by the epilogue and return instruction. */ + #undef EPILOGUE_USES + #define EPILOGUE_USES(REGNO) ((REGNO) == 26 || (REGNO) == 29) + #undef CAN_ELIMINATE #define CAN_ELIMINATE(FROM, TO) \ ((TO) != STACK_POINTER_REGNUM || ! alpha_using_fp ()) *************** Boston, MA 02111-1307, USA. */ *** 123,128 **** --- 149,156 ---- + get_frame_size () \ + current_function_pretend_args_size) \ - current_function_pretend_args_size); \ + else \ + abort(); \ if ((TO) == STACK_POINTER_REGNUM) \ (OFFSET) += ALPHA_ROUND (current_function_outgoing_args_size); \ } *************** typedef struct {int num_args; enum avms_ *** 196,202 **** However, if NO registers need to be saved, don't allocate any space. This is not only because we won't need the space, but because AP includes the current_pretend_args_size and we don't want to mess up any ! ap-relative addresses already made. */ #undef SETUP_INCOMING_VARARGS #define SETUP_INCOMING_VARARGS(CUM,MODE,TYPE,PRETEND_SIZE,NO_RTL) \ --- 224,230 ---- However, if NO registers need to be saved, don't allocate any space. This is not only because we won't need the space, but because AP includes the current_pretend_args_size and we don't want to mess up any ! ap-relative addresses already made. */ #undef SETUP_INCOMING_VARARGS #define SETUP_INCOMING_VARARGS(CUM,MODE,TYPE,PRETEND_SIZE,NO_RTL) \ *************** typedef struct {int num_args; enum avms_ *** 213,246 **** } \ } #undef ASM_FILE_START #define ASM_FILE_START(FILE) \ { \ alpha_write_verstamp (FILE); \ fprintf (FILE, "\t.set noreorder\n"); \ fprintf (FILE, "\t.set volatile\n"); \ ASM_OUTPUT_SOURCE_FILENAME (FILE, main_input_filename); \ } - #undef ASM_OUTPUT_FLOAT - #define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - { \ - if (REAL_VALUE_ISINF (VALUE) \ - || REAL_VALUE_ISNAN (VALUE) \ - || REAL_VALUE_MINUS_ZERO (VALUE)) \ - { \ - long t; \ - REAL_VALUE_TO_TARGET_SINGLE ((VALUE), t); \ - fprintf (FILE, "\t.long 0x%lx\n", t & 0xffffffff); \ - } \ - else \ - { \ - char str[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", str); \ - fprintf (FILE, "\t.%c_floating %s\n", (TARGET_FLOAT_VAX)?'f':'s', str); \ - } \ - } - #define LINK_SECTION_ASM_OP "\t.link" #define READONLY_SECTION_ASM_OP "\t.rdata" #define LITERALS_SECTION_ASM_OP "\t.literals" --- 241,265 ---- } \ } + /* ABI has stack checking, but it's broken. */ + #undef STACK_CHECK_BUILTIN + #define STACK_CHECK_BUILTIN 0 + #undef ASM_FILE_START #define ASM_FILE_START(FILE) \ { \ alpha_write_verstamp (FILE); \ fprintf (FILE, "\t.set noreorder\n"); \ fprintf (FILE, "\t.set volatile\n"); \ + if (TARGET_BWX | TARGET_MAX | TARGET_FIX | TARGET_CIX) \ + { \ + fprintf (FILE, "\t.arch %s\n", \ + (TARGET_CPU_EV6 ? "ev6" \ + : TARGET_MAX ? "pca56" : "ev56")); \ + } \ ASM_OUTPUT_SOURCE_FILENAME (FILE, main_input_filename); \ } #define LINK_SECTION_ASM_OP "\t.link" #define READONLY_SECTION_ASM_OP "\t.rdata" #define LITERALS_SECTION_ASM_OP "\t.literals" *************** typedef struct {int num_args; enum avms_ *** 248,254 **** #define DTORS_SECTION_ASM_OP "\t.dtors" #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_link, in_rdata, in_literals, in_ctors, in_dtors #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ --- 267,273 ---- #define DTORS_SECTION_ASM_OP "\t.dtors" #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_link, in_rdata, in_literals #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ *************** literals_section () \ *** 278,308 **** fprintf (asm_out_file, "%s\n", LITERALS_SECTION_ASM_OP); \ in_section = in_literals; \ } \ - } \ - void \ - ctors_section () \ - { \ - if (in_section != in_ctors) \ - { \ - fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP); \ - in_section = in_ctors; \ - } \ - } \ - void \ - dtors_section () \ - { \ - if (in_section != in_dtors) \ - { \ - fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP); \ - in_section = in_dtors; \ - } \ } extern void readonly_section PARAMS ((void)); extern void link_section PARAMS ((void)); extern void literals_section PARAMS ((void)); - extern void ctors_section PARAMS ((void)); - extern void dtors_section PARAMS ((void)); #undef ASM_OUTPUT_ADDR_DIFF_ELT #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) abort () --- 297,307 ---- *************** do { \ *** 344,351 **** The trampoline should set the static chain pointer to value placed into the trampoline and should branch to the specified routine. Note that $27 has been set to the address of the trampoline, so we can ! use it for addressability of the two data items. Trampolines are always ! aligned to FUNCTION_BOUNDARY, which is 64 bits. */ #undef TRAMPOLINE_TEMPLATE #define TRAMPOLINE_TEMPLATE(FILE) \ --- 343,349 ---- The trampoline should set the static chain pointer to value placed into the trampoline and should branch to the specified routine. Note that $27 has been set to the address of the trampoline, so we can ! use it for addressability of the two data items. */ #undef TRAMPOLINE_TEMPLATE #define TRAMPOLINE_TEMPLATE(FILE) \ *************** do { \ *** 360,365 **** --- 358,368 ---- #undef TRAMPOLINE_SIZE #define TRAMPOLINE_SIZE 32 + /* The alignment of a trampoline, in bits. */ + + #undef TRAMPOLINE_ALIGNMENT + #define TRAMPOLINE_ALIGNMENT 64 + /* Emit RTL insns to initialize the variable parts of a trampoline. FNADDR is an RTX for the address of the function's pure code. CXT is an RTX for the static chain value for the function. */ *************** do { \ *** 368,401 **** #define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \ alpha_initialize_trampoline (TRAMP, FNADDR, CXT, 16, 24, -1) ! /* A C statement (sans semicolon) to output an element in the table of ! global constructors. */ ! #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ ! do { \ ! ctors_section (); \ ! fprintf (FILE, "\t.quad "); \ ! assemble_name (FILE, NAME); \ ! fprintf (FILE, "\n"); \ ! } while (0) ! ! /* A C statement (sans semicolon) to output an element in the table of ! global destructors. */ ! #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \ ! do { \ ! dtors_section (); \ ! fprintf (FILE, "\t.quad "); \ ! assemble_name (FILE, NAME); \ ! fprintf (FILE, "\n"); \ ! } while (0) ! ! #define VALID_MACHINE_DECL_ATTRIBUTE(DECL, ATTRIBUTES, NAME, ARGS) \ ! (vms_valid_decl_attribute_p (DECL, ATTRIBUTES, NAME, ARGS)) #undef SDB_DEBUGGING_INFO #undef MIPS_DEBUGGING_INFO #undef DBX_DEBUGGING_INFO #define DWARF2_DEBUGGING_INFO /* This is how to output an assembler line that says to advance the location counter --- 371,444 ---- #define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \ alpha_initialize_trampoline (TRAMP, FNADDR, CXT, 16, 24, -1) ! /* Control how constructors and destructors are emitted. */ ! #define TARGET_ASM_CONSTRUCTOR vms_asm_out_constructor ! #define TARGET_ASM_DESTRUCTOR vms_asm_out_destructor #undef SDB_DEBUGGING_INFO #undef MIPS_DEBUGGING_INFO #undef DBX_DEBUGGING_INFO #define DWARF2_DEBUGGING_INFO + #define VMS_DEBUGGING_INFO + + #define DWARF2_UNWIND_INFO 1 + + #undef EH_RETURN_HANDLER_RTX + #define EH_RETURN_HANDLER_RTX \ + gen_rtx_MEM (Pmode, plus_constant (stack_pointer_rtx, 8)) + + #define LINK_EH_SPEC "vms-dwarf2eh.o%s " + + #ifdef IN_LIBGCC2 + #include + + #define MD_FALLBACK_FRAME_STATE_FOR(CONTEXT, FS, SUCCESS) \ + do { \ + PDSCDEF *pv = *((PDSCDEF **) (CONTEXT)->reg [29]); \ + \ + if (pv && ((long) pv & 0x7) == 0) /* low bits 0 means address */ \ + pv = *(PDSCDEF **) pv; \ + \ + if (pv && ((pv->pdsc$w_flags & 0xf) == PDSC$K_KIND_FP_STACK)) \ + { \ + int i, j; \ + \ + (FS)->cfa_offset = pv->pdsc$l_size; \ + (FS)->cfa_reg = pv->pdsc$w_flags & PDSC$M_BASE_REG_IS_FP ? 29 : 30; \ + (FS)->retaddr_column = 26; \ + (FS)->cfa_how = CFA_REG_OFFSET; \ + (FS)->regs.reg[27].loc.offset = -pv->pdsc$l_size; \ + (FS)->regs.reg[27].how = REG_SAVED_OFFSET; \ + (FS)->regs.reg[26].loc.offset \ + = -(pv->pdsc$l_size - pv->pdsc$w_rsa_offset); \ + (FS)->regs.reg[26].how = REG_SAVED_OFFSET; \ + \ + for (i = 0, j = 0; i < 32; i++) \ + if (1<pdsc$l_ireg_mask) \ + { \ + (FS)->regs.reg[i].loc.offset \ + = -(pv->pdsc$l_size - pv->pdsc$w_rsa_offset - 8 * ++j); \ + (FS)->regs.reg[i].how = REG_SAVED_OFFSET; \ + } \ + \ + goto SUCCESS; \ + } \ + else if (pv && ((pv->pdsc$w_flags & 0xf) == PDSC$K_KIND_FP_REGISTER)) \ + { \ + (FS)->cfa_offset = pv->pdsc$l_size; \ + (FS)->cfa_reg = pv->pdsc$w_flags & PDSC$M_BASE_REG_IS_FP ? 29 : 30; \ + (FS)->retaddr_column = 26; \ + (FS)->cfa_how = CFA_REG_OFFSET; \ + (FS)->regs.reg[26].loc.reg = pv->pdsc$b_save_ra; \ + (FS)->regs.reg[26].how = REG_SAVED_REG; \ + (FS)->regs.reg[29].loc.reg = pv->pdsc$b_save_fp; \ + (FS)->regs.reg[29].how = REG_SAVED_REG; \ + \ + goto SUCCESS; \ + } \ + } while (0) + #endif /* This is how to output an assembler line that says to advance the location counter *************** do { \ *** 405,434 **** #define ASM_OUTPUT_ALIGN(FILE,LOG) \ fprintf (FILE, "\t.align %d\n", LOG); ! #define ASM_OUTPUT_SECTION(FILE,SECTION) \ ! (strcmp (SECTION, ".text") == 0) \ ! ? text_section () \ ! : named_section (NULL_TREE, SECTION, 0), \ ! ASM_OUTPUT_ALIGN (FILE, 0) \ ! ! #define ASM_OUTPUT_SECTION_NAME(FILE,DECL,NAME,RELOC) \ ! do \ ! { \ ! const char *flags; \ ! int ovr = 0; \ ! if (DECL && DECL_MACHINE_ATTRIBUTES (DECL) \ ! && lookup_attribute \ ! ("overlaid", DECL_MACHINE_ATTRIBUTES (DECL))) \ ! flags = ",OVR", ovr = 1; \ ! else if (strncmp (NAME,".debug", 6) == 0) \ ! flags = ",NOWRT"; \ ! else \ ! flags = ""; \ ! fputc ('\n', (FILE)); \ ! fprintf (FILE, ".section\t%s%s\n", NAME, flags); \ ! if (ovr) \ ! (NAME) = ""; \ ! } while (0) #define ASM_OUTPUT_DEF(FILE,LABEL1,LABEL2) \ do { literals_section(); \ --- 448,455 ---- #define ASM_OUTPUT_ALIGN(FILE,LOG) \ fprintf (FILE, "\t.align %d\n", LOG); ! /* Switch into a generic section. */ ! #define TARGET_ASM_NAMED_SECTION vms_asm_named_section #define ASM_OUTPUT_DEF(FILE,LABEL1,LABEL2) \ do { literals_section(); \ *************** do { \ *** 440,446 **** } while (0) #undef PREFERRED_DEBUGGING_TYPE ! #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG #undef ASM_FORMAT_PRIVATE_NAME #define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \ --- 461,467 ---- } while (0) #undef PREFERRED_DEBUGGING_TYPE ! #define PREFERRED_DEBUGGING_TYPE VMS_AND_DWARF2_DEBUG #undef ASM_FORMAT_PRIVATE_NAME #define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \ *************** do { \ *** 452,461 **** #undef ASM_SPEC #undef ASM_FINAL_SPEC #undef LINK_SPEC #undef STARTFILE_SPEC ! #define ASM_SPEC "-nocpp %{pg}" ! #define LINK_SPEC "%{g3:-g3} %{g0:-g0} %{shared:-shared} %{v:-v}" /* Define the names of the division and modulus functions. */ #define DIVSI3_LIBCALL "OTS$DIV_I" --- 473,510 ---- #undef ASM_SPEC #undef ASM_FINAL_SPEC + + /* The VMS convention is to always provide minimal debug info + for a traceback unless specifically overridden. Defaulting this here + is a kludge. */ + + #define OPTIMIZATION_OPTIONS(OPTIMIZE, OPTIMIZE_SIZE) \ + { \ + write_symbols = VMS_DEBUG; \ + debug_info_level = (enum debug_info_level) 1; \ + } + + /* Override traceback debug info on -g0. */ + #undef OVERRIDE_OPTIONS + #define OVERRIDE_OPTIONS \ + { \ + if (write_symbols == NO_DEBUG) \ + debug_info_level = (enum debug_info_level) 0; \ + override_options (); \ + } + + /* Link with vms-dwarf2.o if -g (except -g0). This causes the + VMS link to pull all the dwarf2 debug sections together. */ #undef LINK_SPEC + #define LINK_SPEC "%{g:-g vms-dwarf2.o%s} %{g0} %{g1:-g1 vms-dwarf2.o%s} \ + %{g2:-g2 vms-dwarf2.o%s} %{g3:-g3 vms-dwarf2.o%s} %{shared} %{v} %{map}" + #undef STARTFILE_SPEC ! #define STARTFILE_SPEC "%{!shared:%{mvms-return-codes:vcrt0.o%s} \ ! %{!mvms-return-codes:pcrt0.o%s}}" ! ! #undef LIB_SPEC ! #define LIB_SPEC "-lc" /* Define the names of the division and modulus functions. */ #define DIVSI3_LIBCALL "OTS$DIV_I" *************** do { \ *** 467,472 **** #define UMODSI3_LIBCALL "OTS$REM_UI" #define UMODDI3_LIBCALL "OTS$REM_UL" ! #define DIR_SEPARATOR ']' ! #define PREFIX "GNU_ROOT:" --- 516,535 ---- #define UMODSI3_LIBCALL "OTS$REM_UI" #define UMODDI3_LIBCALL "OTS$REM_UL" ! #define NAME__MAIN "__gccmain" ! #define SYMBOL__MAIN __gccmain ! #define MD_EXEC_PREFIX "/gnu/lib/gcc-lib/" ! #define MD_STARTFILE_PREFIX "/gnu/lib/gcc-lib/" ! ! /* Specify the list of include file directories. */ ! #define INCLUDE_DEFAULTS \ ! { \ ! { "/gnu/lib/gcc-lib/include", 0, 0, 0 }, \ ! { "/gnu_gxx_include", 0, 1, 1 }, \ ! { "/gnu_cc_include", 0, 0, 0 }, \ ! { "/gnu/include", 0, 0, 0 }, \ ! { 0, 0, 0, 0 } \ ! } ! ! #define LONGLONG_STANDALONE 1 diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/vms64.h gcc-3.1/gcc/config/alpha/vms64.h *** gcc-3.0.4/gcc/config/alpha/vms64.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/alpha/vms64.h Fri Dec 14 12:55:07 2001 *************** *** 0 **** --- 1,32 ---- + /* Output variables, constants and external declarations, for GNU compiler. + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Douglas Rupp (rupp@gnat.com). + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GNU CC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU CC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + /* Defaults to BITS_PER_WORD, e.g. 64 which is what is wanted. + This is incompatible with DEC C, but matches DEC Ada */ + #undef LONG_TYPE_SIZE + + /* Defaults to "long int" */ + #undef SIZE_TYPE + #undef PTRDIFF_TYPE + + #undef POINTERS_EXTEND_UNSIGNED + #undef POINTER_SIZE + #define POINTER_SIZE 64 diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/vms_tramp.asm gcc-3.1/gcc/config/alpha/vms_tramp.asm *** gcc-3.0.4/gcc/config/alpha/vms_tramp.asm Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/alpha/vms_tramp.asm Sun Nov 18 04:27:50 2001 *************** *** 0 **** --- 1,52 ---- + /* VMS trampoline for nested functions + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Douglas B. Rupp (rupp@gnat.com). + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + In addition to the permissions in the GNU General Public License, the + Free Software Foundation gives you unlimited permission to link the + compiled version of this file into combinations with other programs, + and to distribute those combinations without any restriction coming + from the use of this file. (The General Public License restrictions + do apply in other respects; for example, they cover modification of + the file, and distribution when not linked into a combine + executable.) + + 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. */ + + ;# Alpha OpenVMS trampoline + ;# + .set noreorder + .set volatile + .set noat + .file 1 "vms_tramp.asm" + .text + .align 3 + .globl __tramp + .ent __tramp + __tramp..en: + + .link + .align 3 + __tramp: + .pdesc __tramp..en,null + .text + ldq $1,24($27) + ldq $27,16($27) + ldq $28,8($27) + jmp $31,($28),0 + .end __tramp diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/win-nt.h gcc-3.1/gcc/config/alpha/win-nt.h *** gcc-3.0.4/gcc/config/alpha/win-nt.h Thu Nov 2 23:29:08 2000 --- gcc-3.1/gcc/config/alpha/win-nt.h Thu Jan 1 00:00:00 1970 *************** *** 1,62 **** - /* Definitions of target machine for GNU compiler, for DEC Alpha - running Windows/NT. - Copyright (C) 1995, 1996, 1998 Free Software Foundation, Inc. - Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu) - - 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. */ - - #undef TARGET_DEFAULT - #define TARGET_DEFAULT (MASK_FP | MASK_FPREGS) - - /* Names to predefine in the preprocessor for this target machine. */ - - #undef CPP_PREDEFINES - #define CPP_PREDEFINES "-DWIN32 -D_WIN32 -DWINNT -D__STDC__=0 -DALMOST_STDC \ - -D_M_ALPHA -D_ALPHA_ -D_LONGLONG -D__unaligned= -D__stdcall= -Asystem=winnt" - - #undef ASM_SPEC - #undef ASM_FINAL_SPEC - #define ASM_SPEC "-nopp -nologo %{g:-Zi}" - - #undef WCHAR_TYPE - #define WCHAR_TYPE "short unsigned int" - #undef WCHAR_TYPE_SIZE - #define WCHAR_TYPE_SIZE 16 - - /* We can't do any debugging. */ - #undef SDB_DEBUGGING_INFO - #undef DBX_DEBUGGING_INFO - #undef MIPS_DEBUGGING_INFO - - #undef 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"); \ - fprintf (FILE, "\t.globl\t__fltused\n"); \ - ASM_OUTPUT_SOURCE_FILENAME (FILE, main_input_filename); \ - } - - #undef LIB_SPEC - #define LIB_SPEC "%{mwindows:-subsystem windows -e _WinMainCRTStartup \ - USER32.LIB%s GDI32.LIB%s COMDLG32.LIB%s WINSPOOL.LIB%s} \ - %{!mwindows:-subsystem console -e _mainCRTStartup} \ - %{mcrtmt:LIBCMT.LIB%s KERNEL32.LIB%s} %{!mcrtmt:LIBC.LIB%s KERNEL32.LIB%s} \ - %{v}" --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/x-osf gcc-3.1/gcc/config/alpha/x-osf *** gcc-3.0.4/gcc/config/alpha/x-osf Wed Oct 4 20:53:29 2000 --- gcc-3.1/gcc/config/alpha/x-osf Thu Jan 1 00:00:00 1970 *************** *** 1 **** - CLIB=-lmld -lexc --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/x-vms gcc-3.1/gcc/config/alpha/x-vms *** gcc-3.0.4/gcc/config/alpha/x-vms Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/alpha/x-vms Wed Feb 13 15:32:02 2002 *************** *** 0 **** --- 1,24 ---- + # Under VMS, directory names cannot contain dots. + version:=$(shell echo $(gcc_version) | sed -e 's/\./_/g') + + libsubdir=$(libdir)/gcc-lib + + # Rules for linker and compiler wrappers. These are only useful on + # a VMS host. + EXTRA_PROGRAMS=ld.exe decc.exe + vms-ld.o : $(srcdir)/config/alpha/vms-ld.c + $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) + ld.exe : vms-ld.o + $(CC) -o $@ vms-ld.o ../libiberty/libiberty.a + + vms-cc.o : $(srcdir)/config/alpha/vms-cc.c + $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) + decc.exe : vms-cc.o + $(CC) -o $@ vms-cc.o ../libiberty/libiberty.a + + # These extra parts can only be compiled on a VMS host and are only needed + # on a VMS target. The rules are in t-vms. + VMS_EXTRA_PARTS=vcrt0.o pcrt0.o + + # Doesn't work on VMS + USE_COLLECT2= diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/xm-alpha-interix.h gcc-3.1/gcc/config/alpha/xm-alpha-interix.h *** gcc-3.0.4/gcc/config/alpha/xm-alpha-interix.h Sat Sep 4 15:08:55 1999 --- gcc-3.1/gcc/config/alpha/xm-alpha-interix.h Wed Mar 14 00:58:25 2001 *************** *** 1,6 **** /* Configuration for GNU compiler for an DEC/Compaq Alpha ! Copyright (C) 1999 Free Software Foundation, Inc. Donn Terry, Softway Systems, Inc. derived from code by Douglas B. Rupp (drupp@cs.washington.edu) --- 1,6 ---- /* Configuration for GNU compiler for an DEC/Compaq Alpha ! Copyright (C) 1999, 2001 Free Software Foundation, Inc. Donn Terry, Softway Systems, Inc. derived from code by Douglas B. Rupp (drupp@cs.washington.edu) *************** along with GNU CC; see the file COPYING. *** 21,31 **** the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - #include - - #undef HOST_BITS_PER_LONG - #define HOST_BITS_PER_LONG 32 - #define HOST_BITS_PER_WIDE_INT 64 #ifdef __GNUC__ # define HOST_WIDE_INT long long --- 21,26 ---- *************** Boston, MA 02111-1307, USA. */ *** 33,39 **** # define HOST_WIDE_INT __int64 #endif - #define HOST_BITS_PER_WIDEST_INT HOST_BITS_PER_LONGLONG #ifdef __GNUC__ # define HOST_WIDEST_INT long long --- 28,33 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/xm-alpha.h gcc-3.1/gcc/config/alpha/xm-alpha.h *** gcc-3.0.4/gcc/config/alpha/xm-alpha.h Thu Mar 15 19:02:01 2001 --- gcc-3.1/gcc/config/alpha/xm-alpha.h Thu Jan 1 00:00:00 1970 *************** *** 1,62 **** - /* Configuration for GNU C-compiler for DEC Alpha. - Copyright (C) 1990, 1992, 1993, 1994, 1995, 1998 - Free Software Foundation, Inc. - Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu). - - 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 describes the machine the compiler is hosted on. */ - #define HOST_BITS_PER_CHAR 8 - #define HOST_BITS_PER_SHORT 16 - #define HOST_BITS_PER_INT 32 - #define HOST_BITS_PER_LONG 64 - #define HOST_BITS_PER_LONGLONG 64 - - /* #define HOST_WORDS_BIG_ENDIAN */ - - /* target machine dependencies. - tm.h is a symbolic link to the actual target specific file. */ - #include "tm.h" - - /* Arguments to use with `exit'. */ - #define SUCCESS_EXIT_CODE 0 - #define FATAL_EXIT_CODE 33 - - /* If compiled with GNU C, use the builtin alloca. */ - #ifndef alloca - #if defined(__GNUC__) && !defined(USE_C_ALLOCA) - #define alloca __builtin_alloca - #else - #if !defined(_WIN32) && !defined(USE_C_ALLOCA) && !defined(OPEN_VMS) && !defined(__INTERIX) - #include - #else - extern void *alloca (); - #endif - #endif - #endif - - /* The host compiler has problems with enum bitfields since it makes - them signed so we can't fit all our codes in. */ - - #ifndef __GNUC__ - #define ONLY_INT_FIELDS - #endif - - /* OSF/1 is POSIX.1 compliant. */ - - #define POSIX --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/xm-openbsd.h gcc-3.1/gcc/config/alpha/xm-openbsd.h *** gcc-3.0.4/gcc/config/alpha/xm-openbsd.h Sat Sep 4 15:08:55 1999 --- gcc-3.1/gcc/config/alpha/xm-openbsd.h Thu Jan 1 00:00:00 1970 *************** *** 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 - #include - --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/xm-vms.h gcc-3.1/gcc/config/alpha/xm-vms.h *** gcc-3.0.4/gcc/config/alpha/xm-vms.h Wed Sep 22 14:23:22 1999 --- gcc-3.1/gcc/config/alpha/xm-vms.h Mon Mar 11 13:13:25 2002 *************** *** 1,5 **** /* Configuration for GNU C-compiler for openVMS/Alpha. ! Copyright (C) 1996, 1997 Free Software Foundation, Inc. Contributed by Klaus Kaempf (kkaempf@progis.de). This file is part of GNU CC. --- 1,5 ---- /* Configuration for GNU C-compiler for openVMS/Alpha. ! Copyright (C) 1996, 1997, 2001 Free Software Foundation, Inc. Contributed by Klaus Kaempf (kkaempf@progis.de). This file is part of GNU CC. *************** along with GNU CC; see the file COPYING. *** 19,93 **** the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - /* If compiling with DECC, need to fix problem with - which defines a macro called FILE_TYPE that breaks "tree.h". - Fortunately it uses #ifndef to suppress multiple inclusions. - Three possible cases: - 1) has already been included -- ours will be no-op; - 2) will be included after us -- "theirs" will be no-op; - 3) isn't needed -- including it here shouldn't hurt. - In all three cases, the problem macro will be removed here. */ - - #include - #include - #include - #ifdef __DECC - #undef FILE_TYPE - #endif - - #undef HOST_BITS_PER_LONG - #define HOST_BITS_PER_LONG 32 - #define HOST_WIDE_INT long long #define HOST_BITS_PER_WIDE_INT 64 - #undef SUCCESS_EXIT_CODE - #define SUCCESS_EXIT_CODE 1 - #undef FATAL_EXIT_CODE - #define FATAL_EXIT_CODE (44 | 0x10000000) /* Abort, and no DCL message. */ - /* A couple of conditionals for execution machine are controlled here. */ #ifndef VMS #define VMS #endif - #define GCC_INCLUDE_DIR "" - /* Specify the list of include file directories. */ - #define INCLUDE_DEFAULTS \ - { \ - { "GNU_GXX_INCLUDE:", "G++", 1, 1 }, \ - { "GNU_CC_INCLUDE:", "GCC", 0, 0 }, \ - { ".", 0, 0, 1 }, \ - { 0, 0, 0, 0 } \ - } - /* Define a local equivalent (sort of) for unlink */ #define unlink remove ! #define NEED_ATEXIT ! #define HAVE_VPRINTF ! #define HAVE_PUTENV ! #define HAVE_STRERROR ! #define HAVE_ATOLL ! #define NO_SYS_PARAMS_H /* Don't have */ ! #define USE_C_ALLOCA /* Using alloca.c */ - #define HAVE_FCNTL_H 1 - #define HAVE_STDLIB_H 1 - #define HAVE_UNISTD_H 1 - #define HAVE_STRING_H 1 - #define HAVE_LIMITS_H 1 - #define HAVE_STDDEF_H 1 - #define HAVE_TIME_H 1 #define STDC_HEADERS 1 - #define HAVE_STRINGIZE 1 ! #if __STDC__ ! extern void *alloca (size_t); ! #else ! extern char *alloca (unsigned int); ! #endif ! #define OBJECT_SUFFIX ".obj" ! #define EXECUTABLE_SUFFIX ".exe" --- 19,48 ---- the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #define HOST_WIDE_INT long long #define HOST_BITS_PER_WIDE_INT 64 /* A couple of conditionals for execution machine are controlled here. */ #ifndef VMS #define VMS #endif /* Define a local equivalent (sort of) for unlink */ #define unlink remove ! /* Causes exit() to be redefined to __posix_exit() and ! Posix compatible failure and success codes to be used */ ! #define _POSIX_EXIT 1 ! /* Open files in stream mode if not otherwise explicitly specified */ ! #define __UNIX_FOPEN 1 ! ! /* Write to stdout using fputc to avoid record terminators in pipes */ ! #define __UNIX_FWRITE 1 #define STDC_HEADERS 1 ! #define HOST_EXECUTABLE_SUFFIX ".exe" ! #define HOST_OBJECT_SUFFIX ".obj" ! #define DUMPFILE_FORMAT "_%02d_" diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/xm-vms64.h gcc-3.1/gcc/config/alpha/xm-vms64.h *** gcc-3.0.4/gcc/config/alpha/xm-vms64.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/alpha/xm-vms64.h Fri Dec 14 12:55:07 2001 *************** *** 0 **** --- 1,29 ---- + /* Configuration for GNU C-compiler for openVMS/Alpha. + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Douglas Rupp (rupp@gnat.com). + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GNU CC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU CC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + #undef HOST_WIDE_INT + + /* Since DEC C long != Gnu C long */ + #define HOST_PTR_PRINTF "%llx" + #define HOST_WIDE_INT_PRINT_DEC "%lld" + #define HOST_WIDE_INT_PRINT_UNSIGNED "%llu" + #define HOST_WIDE_INT_PRINT_HEX "0x%llx" + #define HOST_WIDE_INT_PRINT_DOUBLE_HEX "0x%llx%016llx" diff -Nrc3pad gcc-3.0.4/gcc/config/alpha/xm-winnt.h gcc-3.1/gcc/config/alpha/xm-winnt.h *** gcc-3.0.4/gcc/config/alpha/xm-winnt.h Wed Dec 16 21:01:16 1998 --- gcc-3.1/gcc/config/alpha/xm-winnt.h Thu Jan 1 00:00:00 1970 *************** *** 1,34 **** - /* Configuration for GNU compiler for an Alpha running Windows NT 3.x. - Copyright (C) 1995, 1996 Free Software Foundation, Inc. - Contributed by Douglas B. Rupp (drupp@cs.washington.edu) - - 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. */ - - #undef HOST_BITS_PER_LONG - #define HOST_BITS_PER_LONG 32 - - #undef POSIX - - #define access _access - #define close _close - #define mktemp _mktemp - #define open _open - #define read _read - #define write _write - - #undef HAS_INIT_SECTION --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/arc/arc-protos.h gcc-3.1/gcc/config/arc/arc-protos.h *** gcc-3.0.4/gcc/config/arc/arc-protos.h Fri Jan 14 16:21:46 2000 --- gcc-3.1/gcc/config/arc/arc-protos.h Fri Jul 6 18:40:01 2001 *************** extern int shift_operator PARAMS ((rtx, *** 60,68 **** #ifdef TREE_CODE extern enum arc_function_type arc_compute_function_type PARAMS ((tree)); - extern int arc_comp_type_attributes PARAMS ((tree, tree)); - extern void arc_set_default_type_attributes PARAMS ((tree)); - extern int arc_valid_machine_decl_attribute PARAMS ((tree, tree, tree, tree)); extern void arc_setup_incoming_varargs PARAMS ((CUMULATIVE_ARGS *, enum machine_mode, tree, int *, int)); --- 60,65 ---- *************** extern void arc_asm_file_start PARAMS (( *** 74,81 **** extern unsigned int arc_compute_frame_size PARAMS ((int)); extern void arc_save_restore PARAMS ((FILE *, const char *, unsigned int, unsigned int, const char *)); - extern void arc_output_function_prologue PARAMS ((FILE *, int)); - extern void arc_output_function_epilogue PARAMS ((FILE *, int)); extern int arc_delay_slots_for_epilogue PARAMS ((void)); extern void arc_finalize_pic PARAMS ((void)); extern void arc_ccfsm_at_label PARAMS ((const char *, int)); --- 71,76 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/arc/arc.c gcc-3.1/gcc/config/arc/arc.c *** gcc-3.0.4/gcc/config/arc/arc.c Sat May 12 20:32:40 2001 --- gcc-3.1/gcc/config/arc/arc.c Wed Mar 20 22:00:38 2002 *************** *** 1,6 **** /* Subroutines used for code generation on the Argonaut ARC cpu. ! Copyright (C) 1994, 1995, 1997, 1998, 1999, ! 2000 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,6 ---- /* Subroutines used for code generation on the Argonaut ARC cpu. ! Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002 ! Free Software Foundation, Inc. This file is part of GNU CC. *************** Boston, MA 02111-1307, USA. */ *** 38,43 **** --- 38,45 ---- #include "recog.h" #include "toplev.h" #include "tm_p.h" + #include "target.h" + #include "target-def.h" /* Which cpu we're compiling for (NULL(=base), ???). */ const char *arc_cpu_string; *************** static int current_insn_set_cc_p; *** 85,91 **** --- 87,115 ---- static void record_cc_ref PARAMS ((rtx)); static void arc_init_reg_tables PARAMS ((void)); static int get_arc_condition_code PARAMS ((rtx)); + const struct attribute_spec arc_attribute_table[]; + static tree arc_handle_interrupt_attribute PARAMS ((tree *, tree, tree, int, bool *)); + static bool arc_assemble_integer PARAMS ((rtx, unsigned int, int)); + static void arc_output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT)); + static void arc_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT)); + + /* Initialize the GCC target structure. */ + #undef TARGET_ASM_ALIGNED_HI_OP + #define TARGET_ASM_ALIGNED_HI_OP "\t.hword\t" + #undef TARGET_ASM_ALIGNED_SI_OP + #define TARGET_ASM_ALIGNED_SI_OP "\t.word\t" + #undef TARGET_ASM_INTEGER + #define TARGET_ASM_INTEGER arc_assemble_integer + #undef TARGET_ASM_FUNCTION_PROLOGUE + #define TARGET_ASM_FUNCTION_PROLOGUE arc_output_function_prologue + #undef TARGET_ASM_FUNCTION_EPILOGUE + #define TARGET_ASM_FUNCTION_EPILOGUE arc_output_function_epilogue + #undef TARGET_ATTRIBUTE_TABLE + #define TARGET_ATTRIBUTE_TABLE arc_attribute_table + + struct gcc_target targetm = TARGET_INITIALIZER; + /* Called by OVERRIDE_OPTIONS to initialize various things. */ void *************** enum arc_mode_class { *** 227,233 **** /* Value is 1 if register/mode pair is acceptable on arc. */ ! unsigned int arc_hard_regno_mode_ok[] = { T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, D_MODES, --- 251,257 ---- /* Value is 1 if register/mode pair is acceptable on arc. */ ! const unsigned int arc_hard_regno_mode_ok[] = { T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, D_MODES, *************** arc_init_reg_tables () *** 311,356 **** interrupt - for interrupt functions */ ! /* Return nonzero if IDENTIFIER is a valid decl attribute. */ ! int ! arc_valid_machine_decl_attribute (type, attributes, identifier, args) ! tree type ATTRIBUTE_UNUSED; ! tree attributes ATTRIBUTE_UNUSED; ! tree identifier; tree args; { ! if (identifier == get_identifier ("__interrupt__") ! && list_length (args) == 1 ! && TREE_CODE (TREE_VALUE (args)) == STRING_CST) ! { ! tree value = TREE_VALUE (args); ! if (!strcmp (TREE_STRING_POINTER (value), "ilink1") ! || !strcmp (TREE_STRING_POINTER (value), "ilink2")) ! return 1; } - return 0; - } - - /* Return zero if TYPE1 and TYPE are incompatible, one if they are compatible, - and two if they are nearly compatible (which causes a warning to be - generated). */ ! int ! arc_comp_type_attributes (type1, type2) ! tree type1 ATTRIBUTE_UNUSED, type2 ATTRIBUTE_UNUSED; ! { ! return 1; } - /* Set the default attributes for TYPE. */ - - void - arc_set_default_type_attributes (type) - tree type ATTRIBUTE_UNUSED; - { - } /* Acceptable arguments to the call insn. */ --- 335,376 ---- interrupt - for interrupt functions */ ! const struct attribute_spec arc_attribute_table[] = ! { ! /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */ ! { "interrupt", 1, 1, true, false, false, arc_handle_interrupt_attribute }, ! { NULL, 0, 0, false, false, false, NULL } ! }; ! /* Handle an "interrupt" attribute; arguments as in ! struct attribute_spec.handler. */ ! static tree ! arc_handle_interrupt_attribute (node, name, args, flags, no_add_attrs) ! tree *node ATTRIBUTE_UNUSED; ! tree name; tree args; + int flags ATTRIBUTE_UNUSED; + bool *no_add_attrs; { ! tree value = TREE_VALUE (args); ! if (TREE_CODE (value) != STRING_CST) ! { ! warning ("argument of `%s' attribute is not a string constant", ! IDENTIFIER_POINTER (name)); ! *no_add_attrs = true; ! } ! else if (strcmp (TREE_STRING_POINTER (value), "ilink1") ! && strcmp (TREE_STRING_POINTER (value), "ilink2")) ! { ! warning ("argument of `%s' attribute is not \"ilink1\" or \"ilink2\"", ! IDENTIFIER_POINTER (name)); ! *no_add_attrs = true; } ! return NULL_TREE; } /* Acceptable arguments to the call insn. */ *************** arc_setup_incoming_varargs (cum, mode, t *** 800,806 **** plus_constant (arg_pointer_rtx, FIRST_PARM_OFFSET (0) + align_slop * UNITS_PER_WORD)); ! MEM_ALIAS_SET (regblock) = get_varargs_alias_set (); move_block_from_reg (first_reg_offset, regblock, MAX_ARC_PARM_REGS - first_reg_offset, ((MAX_ARC_PARM_REGS - first_reg_offset) --- 820,827 ---- plus_constant (arg_pointer_rtx, FIRST_PARM_OFFSET (0) + align_slop * UNITS_PER_WORD)); ! set_mem_alias_set (regblock, get_varargs_alias_set ()); ! set_mem_align (regblock, BITS_PER_WORD); move_block_from_reg (first_reg_offset, regblock, MAX_ARC_PARM_REGS - first_reg_offset, ((MAX_ARC_PARM_REGS - first_reg_offset) *************** arc_compute_function_type (decl) *** 959,965 **** fn_type = ARC_FUNCTION_NORMAL; /* Now see if this is an interrupt handler. */ ! for (a = DECL_MACHINE_ATTRIBUTES (current_function_decl); a; a = TREE_CHAIN (a)) { --- 980,986 ---- fn_type = ARC_FUNCTION_NORMAL; /* Now see if this is an interrupt handler. */ ! for (a = DECL_ATTRIBUTES (current_function_decl); a; a = TREE_CHAIN (a)) { *************** arc_save_restore (file, base_reg, offset *** 1094,1105 **** } } /* Set up the stack and frame pointer (if desired) for the function. */ ! void arc_output_function_prologue (file, size) FILE *file; ! int size; { const char *sp_str = reg_names[STACK_POINTER_REGNUM]; const char *fp_str = reg_names[FRAME_POINTER_REGNUM]; --- 1115,1148 ---- } } + /* Target hook to assemble an integer object. The ARC version needs to + emit a special directive for references to labels and function + symbols. */ + + static bool + arc_assemble_integer (x, size, aligned_p) + rtx x; + unsigned int size; + int aligned_p; + { + if (size == UNITS_PER_WORD && aligned_p + && ((GET_CODE (x) == SYMBOL_REF && SYMBOL_REF_FLAG (x)) + || GET_CODE (x) == LABEL_REF)) + { + fputs ("\t.word\t%st(", asm_out_file); + output_addr_const (asm_out_file, x); + fputs (")\n", asm_out_file); + return true; + } + return default_assemble_integer (x, size, aligned_p); + } + /* Set up the stack and frame pointer (if desired) for the function. */ ! static void arc_output_function_prologue (file, size) FILE *file; ! HOST_WIDE_INT size; { const char *sp_str = reg_names[STACK_POINTER_REGNUM]; const char *fp_str = reg_names[FRAME_POINTER_REGNUM]; *************** arc_output_function_prologue (file, size *** 1172,1183 **** } /* Do any necessary cleanup after a function to restore stack, frame, ! and regs. */ ! void arc_output_function_epilogue (file, size) FILE *file; ! int size; { rtx epilogue_delay = current_function_epilogue_delay_list; int noepilogue = FALSE; --- 1215,1226 ---- } /* Do any necessary cleanup after a function to restore stack, frame, ! and regs. */ ! static void arc_output_function_epilogue (file, size) FILE *file; ! HOST_WIDE_INT size; { rtx epilogue_delay = current_function_epilogue_delay_list; int noepilogue = FALSE; *************** arc_output_function_epilogue (file, size *** 1287,1293 **** /* Emit the return instruction. */ { ! static int regs[4] = { 0, RETURN_ADDR_REGNUM, ILINK1_REGNUM, ILINK2_REGNUM }; fprintf (file, "\tj.d %s\n", reg_names[regs[fn_type]]); --- 1330,1336 ---- /* Emit the return instruction. */ { ! static const int regs[4] = { 0, RETURN_ADDR_REGNUM, ILINK1_REGNUM, ILINK2_REGNUM }; fprintf (file, "\tj.d %s\n", reg_names[regs[fn_type]]); *************** arc_print_operand (file, x, code) *** 1663,1669 **** fputc (']', file); } else ! output_operand_lossage ("invalid operand to %R code"); return; case 'S' : if ((GET_CODE (x) == SYMBOL_REF && SYMBOL_REF_FLAG (x)) --- 1706,1712 ---- fputc (']', file); } else ! output_operand_lossage ("invalid operand to %%R code"); return; case 'S' : if ((GET_CODE (x) == SYMBOL_REF && SYMBOL_REF_FLAG (x)) *************** arc_print_operand (file, x, code) *** 1695,1701 **** (long)(code == 'L' ? INTVAL (first) : INTVAL (second))); } else ! output_operand_lossage ("invalid operand to %H/%L code"); return; case 'A' : { --- 1738,1744 ---- (long)(code == 'L' ? INTVAL (first) : INTVAL (second))); } else ! output_operand_lossage ("invalid operand to %%H/%%L code"); return; case 'A' : { *************** arc_print_operand (file, x, code) *** 1719,1725 **** fputs (".a", file); } else ! output_operand_lossage ("invalid operand to %U code"); return; case 'V' : /* Output cache bypass indicator for a load/store insn. Volatile memory --- 1762,1768 ---- fputs (".a", file); } else ! output_operand_lossage ("invalid operand to %%U code"); return; case 'V' : /* Output cache bypass indicator for a load/store insn. Volatile memory *************** arc_print_operand (file, x, code) *** 1730,1736 **** fputs (".di", file); } else ! output_operand_lossage ("invalid operand to %V code"); return; case 0 : /* Do nothing special. */ --- 1773,1779 ---- fputs (".di", file); } else ! output_operand_lossage ("invalid operand to %%V code"); return; case 0 : /* Do nothing special. */ *************** arc_final_prescan_insn (insn, opvec, nop *** 1907,1913 **** an if/then/else), and things need to be reversed. */ int reverse = 0; ! /* If we start with a return insn, we only succeed if we find another one. */ int seeking_return = 0; /* START_INSN will hold the insn from where we start looking. This is the --- 1950,1956 ---- an if/then/else), and things need to be reversed. */ int reverse = 0; ! /* If we start with a return insn, we only succeed if we find another one. */ int seeking_return = 0; /* START_INSN will hold the insn from where we start looking. This is the *************** arc_final_prescan_insn (insn, opvec, nop *** 2066,2072 **** /* Succeed if the following insn is the target label. Otherwise fail. If return insns are used then the last insn in a function ! will be a barrier. */ next_must_be_target_label_p = TRUE; break; --- 2109,2115 ---- /* Succeed if the following insn is the target label. Otherwise fail. If return insns are used then the last insn in a function ! will be a barrier. */ next_must_be_target_label_p = TRUE; break; *************** arc_final_prescan_insn (insn, opvec, nop *** 2085,2091 **** /* If this is an unconditional branch to the same label, succeed. If it is to another label, do nothing. If it is conditional, fail. */ ! /* ??? Probably, the test for the SET and the PC are unnecessary. */ if (GET_CODE (scanbody) == SET && GET_CODE (SET_DEST (scanbody)) == PC) --- 2128,2134 ---- /* If this is an unconditional branch to the same label, succeed. If it is to another label, do nothing. If it is conditional, fail. */ ! /* ??? Probably, the test for the SET and the PC are unnecessary. */ if (GET_CODE (scanbody) == SET && GET_CODE (SET_DEST (scanbody)) == PC) *************** arc_final_prescan_insn (insn, opvec, nop *** 2147,2153 **** if (!this_insn) { /* Oh dear! we ran off the end, give up. */ ! insn_extract (insn); arc_ccfsm_state = 0; arc_ccfsm_target_insn = NULL; return; --- 2190,2196 ---- if (!this_insn) { /* Oh dear! we ran off the end, give up. */ ! extract_insn_cached (insn); arc_ccfsm_state = 0; arc_ccfsm_target_insn = NULL; return; *************** arc_final_prescan_insn (insn, opvec, nop *** 2169,2177 **** /* Restore recog_data. Getting the attributes of other insns can destroy this array, but final.c assumes that it remains intact ! across this call; since the insn has been recognized already we ! call insn_extract direct. */ ! insn_extract (insn); } } --- 2212,2219 ---- /* Restore recog_data. Getting the attributes of other insns can destroy this array, but final.c assumes that it remains intact ! across this call. */ ! extract_insn_cached (insn); } } diff -Nrc3pad gcc-3.0.4/gcc/config/arc/arc.h gcc-3.1/gcc/config/arc/arc.h *** gcc-3.0.4/gcc/config/arc/arc.h Mon Apr 16 18:25:41 2001 --- gcc-3.1/gcc/config/arc/arc.h Wed Mar 13 05:35:49 2002 *************** *** 1,5 **** /* Definitions of target machine for GNU compiler, Argonaut ARC cpu. ! Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,5 ---- /* Definitions of target machine for GNU compiler, Argonaut ARC cpu. ! Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This file is part of GNU CC. *************** Boston, MA 02111-1307, USA. */ *** 28,35 **** - print active compiler options in assembler output */ - /* ??? Create elf.h and have svr4.h include it. */ - #include "svr4.h" #undef ASM_SPEC #undef LINK_SPEC --- 28,33 ---- *************** extern int target_flags; *** 132,154 **** /* Non-zero means the cpu has a barrel shifter. */ #define TARGET_SHIFTER 0 - /* This macro is similar to `TARGET_SWITCHES' but defines names of - command options that have values. Its definition is an - initializer with a subgrouping for each command option. - - Each subgrouping contains a string constant, that defines the - fixed part of the option name, and the address of a variable. - The variable, type `char *', is set to the variable part of the - given option if the fixed part matches. The actual option name - is made by appending `-m' to the specified name. - - Here is an example which defines `-mshort-data-NUMBER'. If the - given option is `-mshort-data-512', the variable `m88k_short_data' - will be set to the string `"512"'. - - extern char *m88k_short_data; - #define TARGET_OPTIONS { { "short-data-", &m88k_short_data } } */ - extern const char *arc_cpu_string; extern const char *arc_text_string,*arc_data_string,*arc_rodata_string; --- 130,135 ---- *************** do { \ *** 188,194 **** /* Target machine storage layout. */ /* Define to use software floating point emulator for REAL_ARITHMETIC and ! decimal <-> binary conversion. */ #define REAL_ARITHMETIC /* Define this if most significant bit is lowest numbered --- 169,175 ---- /* Target machine storage layout. */ /* Define to use software floating point emulator for REAL_ARITHMETIC and ! decimal <-> binary conversion. */ #define REAL_ARITHMETIC /* Define this if most significant bit is lowest numbered *************** if (GET_MODE_CLASS (MODE) == MODE_INT \ *** 312,326 **** #define PTRDIFF_TYPE "long int" #define WCHAR_TYPE "short unsigned int" #define WCHAR_TYPE_SIZE 16 - - /* Define results of standard character escape sequences. */ - #define TARGET_BELL 007 - #define TARGET_BS 010 - #define TARGET_TAB 011 - #define TARGET_NEWLINE 012 - #define TARGET_VT 013 - #define TARGET_FF 014 - #define TARGET_CR 015 /* Standard register usage. */ --- 293,298 ---- *************** if (GET_MODE_CLASS (MODE) == MODE_INT \ *** 400,405 **** --- 372,387 ---- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, \ 27, 28, 29, 30 } + /* Macro to conditionally modify fixed_regs/call_used_regs. */ + #define CONDITIONAL_REGISTER_USAGE \ + do { \ + if (PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM) \ + { \ + fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \ + call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \ + } \ + } while (0) + /* Return number of consecutive hard regs needed starting at reg REGNO to hold something of mode MODE. This is ordinarily the length in words of a value of mode MODE *************** if (GET_MODE_CLASS (MODE) == MODE_INT \ *** 408,414 **** ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD) /* Value is 1 if hard register REGNO can hold a value of machine-mode MODE. */ ! extern unsigned int arc_hard_regno_mode_ok[]; extern unsigned int arc_mode_class[]; #define HARD_REGNO_MODE_OK(REGNO, MODE) \ ((arc_hard_regno_mode_ok[REGNO] & arc_mode_class[MODE]) != 0) --- 390,396 ---- ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD) /* Value is 1 if hard register REGNO can hold a value of machine-mode MODE. */ ! extern const unsigned int arc_hard_regno_mode_ok[]; extern unsigned int arc_mode_class[]; #define HARD_REGNO_MODE_OK(REGNO, MODE) \ ((arc_hard_regno_mode_ok[REGNO] & arc_mode_class[MODE]) != 0) *************** enum reg_class { *** 459,465 **** #define N_REG_CLASSES (int) LIM_REG_CLASSES ! /* Give names of register classes as strings for dump file. */ #define REG_CLASS_NAMES \ { "NO_REGS", "LPCOUNT_REG", "GENERAL_REGS", "ALL_REGS" } --- 441,447 ---- #define N_REG_CLASSES (int) LIM_REG_CLASSES ! /* Give names of register classes as strings for dump file. */ #define REG_CLASS_NAMES \ { "NO_REGS", "LPCOUNT_REG", "GENERAL_REGS", "ALL_REGS" } *************** enum reg_class { *** 475,481 **** Return the class number of the smallest class containing reg number REGNO. This could be a conditional expression or could index an array. */ ! extern enum reg_class arc_regno_reg_class[]; #define REGNO_REG_CLASS(REGNO) \ (arc_regno_reg_class[REGNO]) --- 457,463 ---- Return the class number of the smallest class containing reg number REGNO. This could be a conditional expression or could index an array. */ ! extern enum reg_class arc_regno_reg_class[FIRST_PSEUDO_REGISTER]; #define REGNO_REG_CLASS(REGNO) \ (arc_regno_reg_class[REGNO]) *************** arc_setup_incoming_varargs(&ARGS_SO_FAR, *** 843,878 **** is passed to a function, or 0 to use `invisible' first argument. */ #define STRUCT_VALUE 0 - /* Function entry and exit. */ - - /* This macro generates the assembly code for function entry. - FILE is a stdio stream to output the code to. - SIZE is an int: how many units of temporary storage to allocate. - Refer to the array `regs_ever_live' to determine which registers - to save; `regs_ever_live[I]' is nonzero if register number I - is ever used in the function. This macro is responsible for - knowing which registers should not be saved even if used. */ - #define FUNCTION_PROLOGUE(FILE, SIZE) \ - arc_output_function_prologue (FILE, SIZE) - /* EXIT_IGNORE_STACK should be nonzero if, when returning from a function, the stack pointer does not matter. The value is tested only in functions that have frame pointers. No definition is equivalent to always zero. */ #define EXIT_IGNORE_STACK 0 - /* This macro generates the assembly code for function exit, - on machines that need it. If FUNCTION_EPILOGUE is not defined - then individual return instructions are generated for each - return statement. Args are same as for FUNCTION_PROLOGUE. - - The function epilogue should not depend on the current stack pointer! - It should use the frame pointer only. This is mandatory because - of alloca; we also take advantage of it to omit stack adjustments - before returning. */ - #define FUNCTION_EPILOGUE(FILE, SIZE) \ - arc_output_function_epilogue (FILE, SIZE) - /* Epilogue delay slots. */ #define DELAY_SLOTS_FOR_EPILOGUE arc_delay_slots_for_epilogue () --- 825,836 ---- *************** arc_eligible_for_epilogue_delay (TRIAL, *** 898,907 **** */ #define TRAMPOLINE_TEMPLATE(FILE) \ do { \ ! ASM_OUTPUT_INT (FILE, GEN_INT (0x631f7c00)); \ ! ASM_OUTPUT_INT (FILE, const0_rtx); \ ! ASM_OUTPUT_INT (FILE, GEN_INT (0x381f0000)); \ ! ASM_OUTPUT_INT (FILE, const0_rtx); \ } while (0) /* Length in units of the trampoline for entering a nested function. */ --- 856,865 ---- */ #define TRAMPOLINE_TEMPLATE(FILE) \ do { \ ! assemble_aligned_integer (UNITS_PER_WORD, GEN_INT (0x631f7c00)); \ ! assemble_aligned_integer (UNITS_PER_WORD, const0_rtx); \ ! assemble_aligned_integer (UNITS_PER_WORD, GEN_INT (0x381f0000)); \ ! assemble_aligned_integer (UNITS_PER_WORD, const0_rtx); \ } while (0) /* Length in units of the trampoline for entering a nested function. */ *************** arc_select_cc_mode (OP, X, Y) *** 1075,1081 **** of a switch statement. If the code is computed here, return it with a return statement. Otherwise, break from the switch. */ /* Small integers are as cheap as registers. 4 byte values can be fetched ! as immediate constants - let's give that the cost of an extra insn. */ #define CONST_COSTS(X, CODE, OUTER_CODE) \ case CONST_INT : \ if (SMALL_INT (INTVAL (X))) \ --- 1033,1039 ---- of a switch statement. If the code is computed here, return it with a return statement. Otherwise, break from the switch. */ /* Small integers are as cheap as registers. 4 byte values can be fetched ! as immediate constants - let's give that the cost of an extra insn. */ #define CONST_COSTS(X, CODE, OUTER_CODE) \ case CONST_INT : \ if (SMALL_INT (INTVAL (X))) \ *************** do { \ *** 1221,1227 **** pointer and frame pointer registers. If this macro is not defined, it is up to the machine-dependent files to allocate such a register (if necessary). */ ! #define PIC_OFFSET_TABLE_REGNUM 26 /* Define this macro if the register defined by PIC_OFFSET_TABLE_REGNUM is clobbered by calls. Do not define this macro if PIC_OFFSET_TABLE_REGNUM --- 1179,1185 ---- pointer and frame pointer registers. If this macro is not defined, it is up to the machine-dependent files to allocate such a register (if necessary). */ ! #define PIC_OFFSET_TABLE_REGNUM (flag_pic ? 26 : INVALID_REGNUM) /* Define this macro if the register defined by PIC_OFFSET_TABLE_REGNUM is clobbered by calls. Do not define this macro if PIC_OFFSET_TABLE_REGNUM *************** do { \ *** 1273,1339 **** no longer contain unusual constructs. */ #define ASM_APP_OFF "" - /* This is how to output an assembler line defining a `char' constant. */ - #define ASM_OUTPUT_CHAR(FILE, VALUE) \ - ( fprintf (FILE, "\t.byte\t"), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "\n")) - - /* This is how to output an assembler line defining a `short' constant. */ - #define ASM_OUTPUT_SHORT(FILE, VALUE) \ - ( fprintf (FILE, "\t.hword\t"), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "\n")) - - /* This is how to output an assembler line defining an `int' constant. - We also handle symbol output here. Code addresses must be right shifted - by 2 because that's how the jump instruction wants them. */ - #define ASM_OUTPUT_INT(FILE, VALUE) \ - do { \ - fprintf (FILE, "\t.word\t"); \ - if ((GET_CODE (VALUE) == SYMBOL_REF && SYMBOL_REF_FLAG (VALUE)) \ - || GET_CODE (VALUE) == LABEL_REF) \ - { \ - fprintf (FILE, "%%st("); \ - output_addr_const (FILE, (VALUE)); \ - fprintf (FILE, ")"); \ - } \ - else \ - output_addr_const (FILE, (VALUE)); \ - fprintf (FILE, "\n"); \ - } while (0) - - /* This is how to output an assembler line defining a `float' constant. */ - #define ASM_OUTPUT_FLOAT(FILE, VALUE) \ - { \ - long t; \ - char str[30]; \ - REAL_VALUE_TO_TARGET_SINGLE ((VALUE), t); \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", str); \ - fprintf (FILE, "\t.word\t0x%lx %s %s\n", \ - t, ASM_COMMENT_START, str); \ - } - - /* This is how to output an assembler line defining a `double' constant. */ - #define ASM_OUTPUT_DOUBLE(FILE, VALUE) \ - { \ - long t[2]; \ - char str[30]; \ - REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), t); \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", str); \ - fprintf (FILE, "\t.word\t0x%lx %s %s\n\t.word\t0x%lx\n", \ - t[0], ASM_COMMENT_START, str, t[1]); \ - } - - /* This is how to output an assembler line for a numeric constant byte. */ - #define ASM_BYTE_OP "\t.byte\t" - #define ASM_OUTPUT_BYTE(FILE, VALUE) \ - fprintf (FILE, "%s0x%x\n", ASM_BYTE_OP, (VALUE)) - - /* The assembler's parentheses characters. */ - #define ASM_OPEN_PAREN "(" - #define ASM_CLOSE_PAREN ")" - /* This is how to output the definition of a user-level label named NAME, such as the label on a static function or variable NAME. */ #define ASM_OUTPUT_LABEL(FILE, NAME) \ --- 1231,1236 ---- *************** do { \ *** 1410,1437 **** that we use). */ #define SET_ASM_OP "\t.set\t" - /* A C statement (sans semicolon) to output an element in the table of - global constructors. */ - #undef ASM_OUTPUT_CONSTRUCTOR - #define ASM_OUTPUT_CONSTRUCTOR(FILE, NAME) \ - do { \ - ctors_section (); \ - fprintf (FILE, "\t.word\t%%st("); \ - assemble_name (FILE, NAME); \ - fprintf (FILE, ")\n"); \ - } while (0) - - /* A C statement (sans semicolon) to output an element in the table of - global destructors. */ - #undef ASM_OUTPUT_DESTRUCTOR - #define ASM_OUTPUT_DESTRUCTOR(FILE, NAME) \ - do { \ - dtors_section (); \ - fprintf (FILE, "\t.word\t%%st("); \ - assemble_name (FILE, NAME); \ - fprintf (FILE, ")\n"); \ - } while (0) - /* How to refer to registers in assembler output. This sequence is indexed by compiler's hard-register-number (see above). */ #define REGISTER_NAMES \ --- 1307,1312 ---- *************** arc_final_prescan_insn (INSN, OPVEC, NOP *** 1450,1456 **** /* A C expression which evaluates to true if CODE is a valid punctuation character for use in the `PRINT_OPERAND' macro. */ ! extern char arc_punct_chars[]; #define PRINT_OPERAND_PUNCT_VALID_P(CHAR) \ arc_punct_chars[(unsigned char) (CHAR)] --- 1325,1331 ---- /* A C expression which evaluates to true if CODE is a valid punctuation character for use in the `PRINT_OPERAND' macro. */ ! extern char arc_punct_chars[256]; #define PRINT_OPERAND_PUNCT_VALID_P(CHAR) \ arc_punct_chars[(unsigned char) (CHAR)] *************** do { if ((LOG) != 0) fprintf (FILE, "\t. *** 1520,1528 **** #undef PREFERRED_DEBUGGING_TYPE #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG - /* How to renumber registers for dbx and gdb. */ - #define DBX_REGISTER_NUMBER(REGNO) (REGNO) - /* Turn off splitting of long stabs. */ #define DBX_CONTIN_LENGTH 0 --- 1395,1400 ---- *************** do { if ((LOG) != 0) fprintf (FILE, "\t. *** 1535,1541 **** /* Define as C expression which evaluates to nonzero if the tablejump instruction expects the table to contain offsets from the address of the table. ! Do not define this if the table should contain absolute addresses. */ /* It's not clear what PIC will look like or whether we want to use -fpic for the embedded form currently being talked about. For now require -fpic to get pc relative switch tables. */ --- 1407,1413 ---- /* Define as C expression which evaluates to nonzero if the tablejump instruction expects the table to contain offsets from the address of the table. ! Do not define this if the table should contain absolute addresses. */ /* It's not clear what PIC will look like or whether we want to use -fpic for the embedded form currently being talked about. For now require -fpic to get pc relative switch tables. */ *************** do { if ((LOG) != 0) fprintf (FILE, "\t. *** 1551,1568 **** done, NIL if none. */ #define LOAD_EXTEND_OP(MODE) ZERO_EXTEND - /* Specify the tree operation to be used to convert reals to integers. */ - #define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR - - /* This is the kind of divide that is easiest to do in the general case. */ - #define EASY_DIV_EXPR TRUNC_DIV_EXPR - /* Max number of bytes we can move from memory to memory in one reasonably fast instruction. */ #define MOVE_MAX 4 /* Define this to be nonzero if shift instructions ignore all but the low-order ! few bits. */ #define SHIFT_COUNT_TRUNCATED 1 /* Value is 1 if truncating an integer of INPREC bits to OUTPREC bits --- 1423,1434 ---- done, NIL if none. */ #define LOAD_EXTEND_OP(MODE) ZERO_EXTEND /* Max number of bytes we can move from memory to memory in one reasonably fast instruction. */ #define MOVE_MAX 4 /* Define this to be nonzero if shift instructions ignore all but the low-order ! few bits. */ #define SHIFT_COUNT_TRUNCATED 1 /* Value is 1 if truncating an integer of INPREC bits to OUTPREC bits *************** do { if ((LOG) != 0) fprintf (FILE, "\t. *** 1584,1605 **** /* A function address in a call instruction. */ #define FUNCTION_MODE SImode - /* A C expression whose value is nonzero if IDENTIFIER with arguments ARGS - is a valid machine specific attribute for DECL. - The attributes in ATTRIBUTES have previously been assigned to TYPE. */ - #define VALID_MACHINE_DECL_ATTRIBUTE(DECL, ATTRIBUTES, IDENTIFIER, ARGS) \ - arc_valid_machine_decl_attribute (DECL, ATTRIBUTES, IDENTIFIER, ARGS) - - /* A C expression that returns zero if the attributes on TYPE1 and TYPE2 are - incompatible, one if they are compatible, and two if they are - nearly compatible (which causes a warning to be generated). */ - #define COMP_TYPE_ATTRIBUTES(TYPE1, TYPE2) \ - arc_comp_type_attributes (TYPE1, TYPE2) - - /* Give newly defined TYPE some default attributes. */ - #define SET_DEFAULT_TYPE_ATTRIBUTES(TYPE) \ - arc_set_default_type_attributes (TYPE) - /* alloca should avoid clobbering the old register save area. */ /* ??? Not defined in tm.texi. */ #define SETJMP_VIA_SAVE_AREA --- 1450,1455 ---- *************** arc_set_default_type_attributes (TYPE) *** 1609,1615 **** since it hasn't been defined! */ extern struct rtx_def *arc_compare_op0, *arc_compare_op1; ! /* ARC function types. */ enum arc_function_type { ARC_FUNCTION_UNKNOWN, ARC_FUNCTION_NORMAL, /* These are interrupt handlers. The name corresponds to the register --- 1459,1465 ---- since it hasn't been defined! */ extern struct rtx_def *arc_compare_op0, *arc_compare_op1; ! /* ARC function types. */ enum arc_function_type { ARC_FUNCTION_UNKNOWN, ARC_FUNCTION_NORMAL, /* These are interrupt handlers. The name corresponds to the register diff -Nrc3pad gcc-3.0.4/gcc/config/arc/arc.md gcc-3.1/gcc/config/arc/arc.md *** gcc-3.0.4/gcc/config/arc/arc.md Fri Jan 14 16:21:46 2000 --- gcc-3.1/gcc/config/arc/arc.md Wed Mar 20 22:00:37 2002 *************** *** 583,591 **** (define_expand "movsicc" [(set (match_operand:SI 0 "register_operand" "") ! (if_then_else (match_operand 1 "comparison_operator" "") ! (match_operand:SI 2 "nonmemory_operand" "") ! (match_operand:SI 3 "register_operand" "")))] "" " { --- 583,591 ---- (define_expand "movsicc" [(set (match_operand:SI 0 "register_operand" "") ! (if_then_else:SI (match_operand 1 "comparison_operator" "") ! (match_operand:SI 2 "nonmemory_operand" "") ! (match_operand:SI 3 "register_operand" "")))] "" " { *************** *** 599,607 **** ;(define_expand "movdicc" ; [(set (match_operand:DI 0 "register_operand" "") ! ; (if_then_else (match_operand 1 "comparison_operator" "") ! ; (match_operand:DI 2 "nonmemory_operand" "") ! ; (match_operand:DI 3 "register_operand" "")))] ; "0 /* ??? this would work better if we had cmpdi */" ; " ;{ --- 599,607 ---- ;(define_expand "movdicc" ; [(set (match_operand:DI 0 "register_operand" "") ! ; (if_then_else:DI (match_operand 1 "comparison_operator" "") ! ; (match_operand:DI 2 "nonmemory_operand" "") ! ; (match_operand:DI 3 "register_operand" "")))] ; "0 /* ??? this would work better if we had cmpdi */" ; " ;{ *************** *** 612,623 **** ; ; operands[1] = gen_rtx (code, VOIDmode, ccreg, const0_rtx); ;}") - (define_expand "movsfcc" [(set (match_operand:SF 0 "register_operand" "") ! (if_then_else (match_operand 1 "comparison_operator" "") ! (match_operand:SF 2 "nonmemory_operand" "") ! (match_operand:SF 3 "register_operand" "")))] "" " { --- 612,623 ---- ; ; operands[1] = gen_rtx (code, VOIDmode, ccreg, const0_rtx); ;}") + (define_expand "movsfcc" [(set (match_operand:SF 0 "register_operand" "") ! (if_then_else:SF (match_operand 1 "comparison_operator" "") ! (match_operand:SF 2 "nonmemory_operand" "") ! (match_operand:SF 3 "register_operand" "")))] "" " { *************** *** 631,639 **** ;(define_expand "movdfcc" ; [(set (match_operand:DF 0 "register_operand" "") ! ; (if_then_else (match_operand 1 "comparison_operator" "") ! ; (match_operand:DF 2 "nonmemory_operand" "") ! ; (match_operand:DF 3 "register_operand" "")))] ; "0 /* ??? can generate less efficient code if constants involved */" ; " ;{ --- 631,639 ---- ;(define_expand "movdfcc" ; [(set (match_operand:DF 0 "register_operand" "") ! ; (if_then_else:DF (match_operand 1 "comparison_operator" "") ! ; (match_operand:DF 2 "nonmemory_operand" "") ! ; (match_operand:DF 3 "register_operand" "")))] ; "0 /* ??? can generate less efficient code if constants involved */" ; " ;{ *************** *** 647,655 **** (define_insn "*movsicc_insn" [(set (match_operand:SI 0 "register_operand" "=r") ! (if_then_else (match_operand 1 "comparison_operator" "") ! (match_operand:SI 2 "nonmemory_operand" "rJi") ! (match_operand:SI 3 "register_operand" "0")))] "" "mov.%d1 %0,%S2" [(set_attr "type" "cmove")]) --- 647,655 ---- (define_insn "*movsicc_insn" [(set (match_operand:SI 0 "register_operand" "=r") ! (if_then_else:SI (match_operand 1 "comparison_operator" "") ! (match_operand:SI 2 "nonmemory_operand" "rJi") ! (match_operand:SI 3 "register_operand" "0")))] "" "mov.%d1 %0,%S2" [(set_attr "type" "cmove")]) *************** *** 657,665 **** ; ??? This doesn't properly handle constants. ;(define_insn "*movdicc_insn" ; [(set (match_operand:DI 0 "register_operand" "=r,r") ! ; (if_then_else (match_operand 1 "comparison_operator" "") ! ; (match_operand:DI 2 "nonmemory_operand" "r,Ji") ! ; (match_operand:DI 3 "register_operand" "0,0")))] ; "0" ; "* ;{ --- 657,665 ---- ; ??? This doesn't properly handle constants. ;(define_insn "*movdicc_insn" ; [(set (match_operand:DI 0 "register_operand" "=r,r") ! ; (if_then_else:DI (match_operand 1 "comparison_operator" "") ! ; (match_operand:DI 2 "nonmemory_operand" "r,Ji") ! ; (match_operand:DI 3 "register_operand" "0,0")))] ; "0" ; "* ;{ *************** *** 682,690 **** (define_insn "*movsfcc_insn" [(set (match_operand:SF 0 "register_operand" "=r,r") ! (if_then_else (match_operand 1 "comparison_operator" "") ! (match_operand:SF 2 "nonmemory_operand" "r,E") ! (match_operand:SF 3 "register_operand" "0,0")))] "" "@ mov.%d1 %0,%2 --- 682,690 ---- (define_insn "*movsfcc_insn" [(set (match_operand:SF 0 "register_operand" "=r,r") ! (if_then_else:SF (match_operand 1 "comparison_operator" "") ! (match_operand:SF 2 "nonmemory_operand" "r,E") ! (match_operand:SF 3 "register_operand" "0,0")))] "" "@ mov.%d1 %0,%2 *************** *** 693,701 **** ;(define_insn "*movdfcc_insn" ; [(set (match_operand:DF 0 "register_operand" "=r,r") ! ; (if_then_else (match_operand 1 "comparison_operator" "") ! ; (match_operand:DF 2 "nonmemory_operand" "r,E") ! ; (match_operand:DF 3 "register_operand" "0,0")))] ; "0" ; "* ;{ --- 693,701 ---- ;(define_insn "*movdfcc_insn" ; [(set (match_operand:DF 0 "register_operand" "=r,r") ! ; (if_then_else:DF (match_operand 1 "comparison_operator" "") ! ; (match_operand:DF 2 "nonmemory_operand" "r,E") ! ; (match_operand:DF 3 "register_operand" "0,0")))] ; "0" ; "* ;{ diff -Nrc3pad gcc-3.0.4/gcc/config/arc/lib1funcs.asm gcc-3.1/gcc/config/arc/lib1funcs.asm *** gcc-3.0.4/gcc/config/arc/lib1funcs.asm Mon May 15 23:14:15 2000 --- gcc-3.1/gcc/config/arc/lib1funcs.asm Thu May 17 03:15:46 2001 *************** *** 1,4 **** ! ; libgcc1 routines for ARC cpu. /* Copyright (C) 1995, 1997 Free Software Foundation, Inc. --- 1,4 ---- ! ; libgcc routines for ARC cpu. /* Copyright (C) 1995, 1997 Free Software Foundation, Inc. diff -Nrc3pad gcc-3.0.4/gcc/config/arc/t-arc gcc-3.1/gcc/config/arc/t-arc *** gcc-3.0.4/gcc/config/arc/t-arc Thu Aug 5 03:27:46 1999 --- gcc-3.1/gcc/config/arc/t-arc Thu May 17 03:15:46 2001 *************** *** 1,4 **** - CROSS_LIBGCC1 = libgcc1-asm.a LIB1ASMSRC = arc/lib1funcs.asm LIB1ASMFUNCS = _mulsi3 _umulsidi3 _udivsi3 _divsi3 _umodsi3 _modsi3 _divmod_tools --- 1,3 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/arc/xm-arc.h gcc-3.1/gcc/config/arc/xm-arc.h *** gcc-3.0.4/gcc/config/arc/xm-arc.h Thu Mar 15 19:02:01 2001 --- gcc-3.1/gcc/config/arc/xm-arc.h Thu Jan 1 00:00:00 1970 *************** *** 1,43 **** - /* Configuration for GNU C-compiler for the ARC processor. - Copyright (C) 1994, 1997 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 describes the machine the compiler is hosted on. */ - #define HOST_BITS_PER_CHAR 8 - #define HOST_BITS_PER_SHORT 16 - #define HOST_BITS_PER_INT 32 - #define HOST_BITS_PER_LONG 32 - #define HOST_BITS_PER_LONGLONG 64 - - /* Doubles are stored in memory with the high order word first. This - matters when cross-compiling. */ - #define HOST_WORDS_BIG_ENDIAN 1 - - /* target machine dependencies. - tm.h is a symbolic link to the actual target specific file. */ - #include "tm.h" - - /* Arguments to use with `exit'. */ - #define SUCCESS_EXIT_CODE 0 - #define FATAL_EXIT_CODE 33 - - /* If compiled with Sun CC, the use of alloca requires this #include. */ - #ifndef __GNUC__ - #include "alloca.h" - #endif --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/arm/aof.h gcc-3.1/gcc/config/arm/aof.h *** gcc-3.0.4/gcc/config/arm/aof.h Mon Apr 16 18:25:42 2001 --- gcc-3.1/gcc/config/arm/aof.h Mon Mar 18 13:45:33 2002 *************** Boston, MA 02111-1307, USA. */ *** 52,71 **** two areas with the same attributes will be linked adjacently in the resulting executable, so we have to be careful not to do pc-relative addressing across such boundaries. */ - char *aof_text_section (); #define TEXT_SECTION_ASM_OP aof_text_section () ! #define SELECT_RTX_SECTION(MODE,RTX) text_section (); - char *aof_data_section (); #define DATA_SECTION_ASM_OP aof_data_section () ! #define EXTRA_SECTIONS in_zero_init, in_ctor, in_dtor, in_common #define EXTRA_SECTION_FUNCTIONS \ ZERO_INIT_SECTION \ - CTOR_SECTION \ - DTOR_SECTION \ COMMON_SECTION #define ZERO_INIT_SECTION \ --- 52,67 ---- two areas with the same attributes will be linked adjacently in the resulting executable, so we have to be careful not to do pc-relative addressing across such boundaries. */ #define TEXT_SECTION_ASM_OP aof_text_section () ! #define SELECT_RTX_SECTION(MODE,RTX,ALIGN) text_section (); #define DATA_SECTION_ASM_OP aof_data_section () ! #define EXTRA_SECTIONS in_zero_init, in_common #define EXTRA_SECTION_FUNCTIONS \ ZERO_INIT_SECTION \ COMMON_SECTION #define ZERO_INIT_SECTION \ *************** zero_init_section () \ *** 81,131 **** } \ } - #define CTOR_SECTION \ - void \ - ctor_section () \ - { \ - static int ctors_once = 0; \ - if (in_section != in_ctor) \ - { \ - if (ctors_once) \ - { \ - fprintf (stderr, \ - "Attempt to output more than one ctor section\n"); \ - abort (); \ - } \ - fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP); \ - in_section = in_ctor; \ - ctors_once = 1; \ - } \ - } - - #define DTOR_SECTION \ - void \ - dtor_section () \ - { \ - static int dtors_once = 0; \ - if (in_section != in_dtor) \ - { \ - if (dtors_once) \ - { \ - fprintf (stderr, \ - "Attempt to output more than one dtor section\n"); \ - abort (); \ - } \ - fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP); \ - in_section = in_dtor; \ - dtors_once = 1; \ - } \ - } - /* Used by ASM_OUTPUT_COMMON (below) to tell varasm.c that we've changed areas. */ #define COMMON_SECTION \ void \ common_section () \ { \ - static int common_count = 1; \ if (in_section != in_common) \ { \ in_section = in_common; \ --- 77,88 ---- *************** do { \ *** 163,168 **** --- 120,129 ---- (*ptr++) (); \ } while (0) + /* We really want to put Thumb tables in a read-only data section, but + switching to another section during function output is not + possible. We could however do what the SPARC does and defer the + whole table generation until the end of the function. */ #define JUMP_TABLES_IN_TEXT_SECTION 1 #ifndef ARM_OS_NAME *************** do \ *** 226,290 **** #define ASM_APP_OFF "" - #define ASM_OUTPUT_LONG_DOUBLE(STREAM,VALUE) \ - ASM_OUTPUT_DOUBLE((STREAM),(VALUE)) - - #define ASM_OUTPUT_DOUBLE(STREAM,VALUE) \ - do { \ - char dstr[30]; \ - long l[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), l); \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.14g", dstr); \ - fprintf ((STREAM), "\tDCD &%lx, &%lx\t%s double %s\n", \ - l[0], l[1], ASM_COMMENT_START, dstr); \ - } while (0) - - #define ASM_OUTPUT_FLOAT(STREAM,VALUE) \ - do { \ - char dstr[30]; \ - long l; \ - REAL_VALUE_TO_TARGET_SINGLE ((VALUE), l); \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.7g", dstr); \ - fprintf ((STREAM), "\tDCD &%lx\t%s double %s\n", \ - l, ASM_COMMENT_START, dstr); \ - } while (0) - - #define ASM_OUTPUT_INT(STREAM,VALUE) \ - (fprintf ((STREAM), "\tDCD\t"), \ - output_addr_const ((STREAM), (VALUE)), \ - fputc ('\n', (STREAM))) - - #define ASM_OUTPUT_SHORT(STREAM,VALUE) \ - (fprintf ((STREAM), "\tDCW\t"), \ - output_addr_const ((STREAM), (VALUE)), \ - fputc ('\n', (STREAM))) - - #define ASM_OUTPUT_CHAR(STREAM,VALUE) \ - (fprintf ((STREAM), "\tDCB\t"), \ - output_addr_const ((STREAM), (VALUE)), \ - fputc ('\n', (STREAM))) - - #define ASM_OUTPUT_BYTE(STREAM,VALUE) \ - fprintf ((STREAM), "\tDCB\t%d\n", (VALUE)) - #define ASM_OUTPUT_ASCII(STREAM,PTR,LEN) \ { \ int i; \ const char *ptr = (PTR); \ fprintf ((STREAM), "\tDCB"); \ ! for (i = 0; i < (LEN); i++) \ fprintf ((STREAM), " &%02x%s", \ (unsigned ) *(ptr++), \ ! (i + 1 < (LEN) \ ? ((i & 3) == 3 ? "\n\tDCB" : ",") \ : "\n")); \ } #define IS_ASM_LOGICAL_LINE_SEPARATOR(C) ((C) == '\n') - #define ASM_OPEN_PAREN "(" - #define ASM_CLOSE_PAREN ")" - /* Output of Uninitialized Variables */ #define ASM_OUTPUT_COMMON(STREAM,NAME,SIZE,ROUNDED) \ --- 187,207 ---- #define ASM_APP_OFF "" #define ASM_OUTPUT_ASCII(STREAM,PTR,LEN) \ { \ int i; \ const char *ptr = (PTR); \ fprintf ((STREAM), "\tDCB"); \ ! for (i = 0; i < (long)(LEN); i++) \ fprintf ((STREAM), " &%02x%s", \ (unsigned ) *(ptr++), \ ! (i + 1 < (long)(LEN) \ ? ((i & 3) == 3 ? "\n\tDCB" : ",") \ : "\n")); \ } #define IS_ASM_LOGICAL_LINE_SEPARATOR(C) ((C) == '\n') /* Output of Uninitialized Variables */ #define ASM_OUTPUT_COMMON(STREAM,NAME,SIZE,ROUNDED) \ *************** do { \ *** 356,362 **** fprintf ((STREAM), "|%s|", NAME) #define ASM_GENERATE_INTERNAL_LABEL(STRING,PREFIX,NUM) \ ! sprintf ((STRING), "*|%s..%d|", (PREFIX), (NUM)) #define ASM_FORMAT_PRIVATE_NAME(OUTVAR,NAME,NUMBER) \ ((OUTVAR) = (char *) alloca (strlen ((NAME)) + 10), \ --- 273,279 ---- fprintf ((STREAM), "|%s|", NAME) #define ASM_GENERATE_INTERNAL_LABEL(STRING,PREFIX,NUM) \ ! sprintf ((STRING), "*|%s..%ld|", (PREFIX), (long)(NUM)) #define ASM_FORMAT_PRIVATE_NAME(OUTVAR,NAME,NUMBER) \ ((OUTVAR) = (char *) alloca (strlen ((NAME)) + 10), \ *************** do { \ *** 367,388 **** #define CTORS_SECTION_ASM_OP "\tAREA\t|C$$gnu_ctorsvec|, DATA, READONLY" #define DTORS_SECTION_ASM_OP "\tAREA\t|C$$gnu_dtorsvec|, DATA, READONLY" - #define ASM_OUTPUT_CONSTRUCTOR(STREAM,NAME) \ - do { \ - ctor_section (); \ - fprintf ((STREAM), "\tDCD\t"); \ - assemble_name ((STREAM), (NAME)); \ - fputc ('\n', (STREAM)); \ - } while (0); - - #define ASM_OUTPUT_DESTRUCTOR(STREAM,NAME) \ - do { \ - dtor_section (); \ - fprintf ((STREAM), "\tDCD\t"); \ - assemble_name ((STREAM), (NAME)); \ - fputc ('\n', (STREAM)); \ - } while (0); - /* Output of Assembler Instructions */ #define REGISTER_NAMES \ --- 284,289 ---- *************** do { \ *** 425,432 **** /* Output of Dispatch Tables */ ! #define ASM_OUTPUT_ADDR_DIFF_ELT(STREAM,BODY,VALUE,REL) \ ! fprintf ((STREAM), "\tb\t|L..%d|\n", (VALUE)) #define ASM_OUTPUT_ADDR_VEC_ELT(STREAM,VALUE) \ fprintf ((STREAM), "\tDCD\t|L..%d|\n", (VALUE)) --- 326,338 ---- /* Output of Dispatch Tables */ ! #define ASM_OUTPUT_ADDR_DIFF_ELT(STREAM,BODY,VALUE,REL) \ ! do { \ ! if (TARGET_ARM) \ ! fprintf ((STREAM), "\tb\t|L..%d|\n", (VALUE)); \ ! else \ ! fprintf ((STREAM), "\tDCD\t|L..%d| - |L..%d|\n", (VALUE), (REL)); \ ! } while (0) #define ASM_OUTPUT_ADDR_VEC_ELT(STREAM,VALUE) \ fprintf ((STREAM), "\tDCD\t|L..%d|\n", (VALUE)) *************** do { \ *** 451,456 **** fprintf ((STREAM), "\tALIGN %d\n", amount); \ } while (0) - #include "arm/arm.h" - #undef DBX_DEBUGGING_INFO --- 357,360 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/arm/aout.h gcc-3.1/gcc/config/arm/aout.h *** gcc-3.0.4/gcc/config/arm/aout.h Thu Dec 7 01:58:23 2000 --- gcc-3.1/gcc/config/arm/aout.h Mon Mar 18 13:45:31 2002 *************** Boston, MA 02111-1307, USA. */ *** 105,114 **** /* Arm Assembler barfs on dollars */ #define DOLLARS_IN_IDENTIFIERS 0 #define NO_DOLLAR_IN_LABEL 1 ! ! /* DBX register number for a given compiler register number */ ! #define DBX_REGISTER_NUMBER(REGNO) (REGNO) /* Generate DBX debugging information. riscix.h will undefine this because the native assembler does not support stabs. */ --- 105,113 ---- /* Arm Assembler barfs on dollars */ #define DOLLARS_IN_IDENTIFIERS 0 + #ifndef NO_DOLLAR_IN_LABEL #define NO_DOLLAR_IN_LABEL 1 ! #endif /* Generate DBX debugging information. riscix.h will undefine this because the native assembler does not support stabs. */ *************** Boston, MA 02111-1307, USA. */ *** 182,266 **** #define ASM_OUTPUT_ADDR_VEC_ELT(STREAM, VALUE) \ asm_fprintf (STREAM, "\t.word\t%LL%d\n", VALUE) ! #define ASM_OUTPUT_ADDR_DIFF_ELT(STREAM, BODY, VALUE, REL) \ ! asm_fprintf (STREAM, "\tb\t%LL%d\n", VALUE) ! ! /* Output various types of constants. For real numbers we output hex, with ! a comment containing the "human" value, this allows us to pass NaN's which ! the riscix assembler doesn't understand (it also makes cross-assembling ! less likely to fail). */ ! ! #define ASM_OUTPUT_LONG_DOUBLE(STREAM, VALUE) \ do \ { \ ! char dstr[30]; \ ! long l[3]; \ ! REAL_VALUE_TO_TARGET_LONG_DOUBLE (VALUE, l); \ ! REAL_VALUE_TO_DECIMAL (VALUE, "%.20g", dstr); \ ! asm_fprintf (STREAM, \ ! "\t.long 0x%lx,0x%lx,0x%lx\t%@ long double %s\n", \ ! l[0], l[1], l[2], dstr); \ } \ while (0) - #define ASM_OUTPUT_DOUBLE(STREAM, VALUE) \ - do \ - { \ - char dstr[30]; \ - long l[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE (VALUE, l); \ - REAL_VALUE_TO_DECIMAL (VALUE, "%.14g", dstr); \ - asm_fprintf (STREAM, "\t.long 0x%lx, 0x%lx\t%@ double %s\n", l[0],\ - l[1], dstr); \ - } \ - while (0) - - #define ASM_OUTPUT_FLOAT(STREAM, VALUE) \ - do \ - { \ - char dstr[30]; \ - long l; \ - REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ - REAL_VALUE_TO_DECIMAL (VALUE, "%.7g", dstr); \ - asm_fprintf (STREAM, "\t.word 0x%lx\t%@ float %s\n", l, \ - dstr); \ - } \ - while (0) - - #define ASM_OUTPUT_INT(STREAM, EXP) \ - do \ - { \ - fprintf (STREAM, "\t.word\t"); \ - OUTPUT_INT_ADDR_CONST (STREAM, EXP); \ - fputc ('\n', STREAM); \ - } \ - while (0) - - #define ASM_OUTPUT_SHORT(STREAM, EXP) \ - do \ - { \ - fprintf (STREAM, "\t.short\t"); \ - output_addr_const (STREAM, EXP); \ - fputc ('\n', STREAM); \ - } \ - while (0) - - #define ASM_OUTPUT_CHAR(STREAM, EXP) \ - do \ - { \ - fprintf (STREAM, "\t.byte\t"); \ - output_addr_const (STREAM, EXP); \ - fputc ('\n', STREAM); \ - } \ - while (0) - - #define ASM_OUTPUT_BYTE(STREAM, VALUE) \ - fprintf (STREAM, "\t.byte\t%d\n", VALUE) #define ASM_OUTPUT_ASCII(STREAM, PTR, LEN) \ output_ascii_pseudo_op (STREAM, (const unsigned char *)(PTR), LEN) /* Output a gap. In fact we fill it with nulls. */ #define ASM_OUTPUT_SKIP(STREAM, NBYTES) \ fprintf (STREAM, "\t.space\t%d\n", NBYTES) --- 181,203 ---- #define ASM_OUTPUT_ADDR_VEC_ELT(STREAM, VALUE) \ asm_fprintf (STREAM, "\t.word\t%LL%d\n", VALUE) ! #define ASM_OUTPUT_ADDR_DIFF_ELT(STREAM, BODY, VALUE, REL) \ do \ { \ ! if (TARGET_ARM) \ ! asm_fprintf (STREAM, "\tb\t%LL%d\n", VALUE); \ ! else \ ! asm_fprintf (STREAM, "\t.word\t%LL%d-%LL%d\n", VALUE, REL); \ } \ while (0) + #undef ASM_OUTPUT_ASCII #define ASM_OUTPUT_ASCII(STREAM, PTR, LEN) \ output_ascii_pseudo_op (STREAM, (const unsigned char *)(PTR), LEN) /* Output a gap. In fact we fill it with nulls. */ + #undef ASM_OUTPUT_SKIP #define ASM_OUTPUT_SKIP(STREAM, NBYTES) \ fprintf (STREAM, "\t.space\t%d\n", NBYTES) *************** Boston, MA 02111-1307, USA. */ *** 323,337 **** asm_fprintf (STREAM, "%@ - - - ident %s\n", STRING) #endif - /* The assembler's parentheses characters. */ - #define ASM_OPEN_PAREN "(" - #define ASM_CLOSE_PAREN ")" - #ifndef ASM_COMMENT_START #define ASM_COMMENT_START "@" #endif /* This works for GAS and some other assemblers. */ #define SET_ASM_OP "\t.set\t" - - #include "arm.h" --- 260,268 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/arm/arm-protos.h gcc-3.1/gcc/config/arm/arm-protos.h *** gcc-3.0.4/gcc/config/arm/arm-protos.h Mon Jan 15 19:54:42 2001 --- gcc-3.1/gcc/config/arm/arm-protos.h Tue Jan 22 17:35:26 2002 *************** Boston, MA 02111-1307, USA. */ *** 23,51 **** #ifndef GCC_ARM_PROTOS_H #define GCC_ARM_PROTOS_H extern void arm_override_options PARAMS ((void)); extern int use_return_insn PARAMS ((int)); extern int arm_regno_class PARAMS ((int)); extern void arm_finalize_pic PARAMS ((int)); extern int arm_volatile_func PARAMS ((void)); extern const char * arm_output_epilogue PARAMS ((int)); - extern void output_func_epilogue PARAMS ((int)); extern void arm_expand_prologue PARAMS ((void)); /* Used in arm.md, but defined in output.c. */ extern void assemble_align PARAMS ((int)); extern const char * arm_strip_name_encoding PARAMS ((const char *)); extern unsigned long arm_current_func_type PARAMS ((void)); #ifdef TREE_CODE extern int arm_return_in_memory PARAMS ((tree)); - extern int arm_valid_machine_decl_attribute PARAMS ((tree, tree, tree)); - extern int arm_comp_type_attributes PARAMS ((tree, tree)); - extern int arm_valid_type_attribute_p PARAMS ((tree, tree, tree, tree)); - extern void arm_set_default_type_attributes PARAMS ((tree)); extern void arm_encode_call_attribute PARAMS ((tree, int)); extern int arm_function_ok_for_sibcall PARAMS ((tree)); #endif #ifdef RTX_CODE extern int const_ok_for_arm PARAMS ((HOST_WIDE_INT)); extern int arm_split_constant PARAMS ((RTX_CODE, enum machine_mode, HOST_WIDE_INT, rtx, rtx, int)); --- 23,49 ---- #ifndef GCC_ARM_PROTOS_H #define GCC_ARM_PROTOS_H + extern void rdata_section PARAMS ((void)); extern void arm_override_options PARAMS ((void)); extern int use_return_insn PARAMS ((int)); extern int arm_regno_class PARAMS ((int)); extern void arm_finalize_pic PARAMS ((int)); extern int arm_volatile_func PARAMS ((void)); extern const char * arm_output_epilogue PARAMS ((int)); extern void arm_expand_prologue PARAMS ((void)); /* Used in arm.md, but defined in output.c. */ extern void assemble_align PARAMS ((int)); extern const char * arm_strip_name_encoding PARAMS ((const char *)); extern unsigned long arm_current_func_type PARAMS ((void)); + extern unsigned int arm_compute_initial_elimination_offset PARAMS ((unsigned int, unsigned int)); #ifdef TREE_CODE extern int arm_return_in_memory PARAMS ((tree)); extern void arm_encode_call_attribute PARAMS ((tree, int)); extern int arm_function_ok_for_sibcall PARAMS ((tree)); #endif #ifdef RTX_CODE + extern int arm_hard_regno_mode_ok PARAMS ((unsigned int, enum machine_mode)); extern int const_ok_for_arm PARAMS ((HOST_WIDE_INT)); extern int arm_split_constant PARAMS ((RTX_CODE, enum machine_mode, HOST_WIDE_INT, rtx, rtx, int)); *************** extern RTX_CODE arm_canonicalize_compari *** 53,59 **** extern int legitimate_pic_operand_p PARAMS ((rtx)); extern rtx legitimize_pic_address PARAMS ((rtx, enum machine_mode, rtx)); extern int arm_rtx_costs PARAMS ((rtx, RTX_CODE, RTX_CODE)); - extern int arm_adjust_cost PARAMS ((rtx, rtx, rtx, int)); extern int const_double_rtx_ok_for_fpu PARAMS ((rtx)); extern int neg_const_double_rtx_ok_for_fpu PARAMS ((rtx)); --- 51,56 ---- *************** extern const char * output_add_immediate *** 126,133 **** extern const char * arithmetic_instr PARAMS ((rtx, int)); extern void output_ascii_pseudo_op PARAMS ((FILE *, const unsigned char *, int)); extern const char * output_return_instruction PARAMS ((rtx, int, int)); ! extern void arm_poke_function_name PARAMS ((FILE *, char *)); ! extern void output_arm_prologue PARAMS ((FILE *, int)); extern void arm_print_operand PARAMS ((FILE *, rtx, int)); extern void arm_print_operand_address PARAMS ((FILE *, rtx)); extern void arm_final_prescan_insn PARAMS ((rtx)); --- 123,129 ---- extern const char * arithmetic_instr PARAMS ((rtx, int)); extern void output_ascii_pseudo_op PARAMS ((FILE *, const unsigned char *, int)); extern const char * output_return_instruction PARAMS ((rtx, int, int)); ! extern void arm_poke_function_name PARAMS ((FILE *, const char *)); extern void arm_print_operand PARAMS ((FILE *, rtx, int)); extern void arm_print_operand_address PARAMS ((FILE *, rtx)); extern void arm_final_prescan_insn PARAMS ((rtx)); *************** extern rtx aof_pic_entry PARAMS ((rt *** 147,155 **** extern void aof_dump_pic_table PARAMS ((FILE *)); extern char * aof_text_section PARAMS ((void)); extern char * aof_data_section PARAMS ((void)); ! extern void aof_add_import PARAMS ((char *)); ! extern void aof_delete_import PARAMS ((char *)); extern void aof_dump_imports PARAMS ((FILE *)); #endif /* AOF_ASSEMBLER */ #endif /* RTX_CODE */ --- 143,153 ---- extern void aof_dump_pic_table PARAMS ((FILE *)); extern char * aof_text_section PARAMS ((void)); extern char * aof_data_section PARAMS ((void)); ! extern void aof_add_import PARAMS ((const char *)); ! extern void aof_delete_import PARAMS ((const char *)); extern void aof_dump_imports PARAMS ((FILE *)); + extern void zero_init_section PARAMS ((void)); + extern void common_section PARAMS ((void)); #endif /* AOF_ASSEMBLER */ #endif /* RTX_CODE */ *************** extern void thumb_expand_epilogue PARA *** 164,170 **** extern int is_called_in_ARM_mode PARAMS ((tree)); #endif extern int thumb_shiftable_const PARAMS ((unsigned HOST_WIDE_INT)); - extern void output_thumb_prologue PARAMS ((FILE *)); #ifdef RTX_CODE extern void thumb_final_prescan_insn PARAMS ((rtx)); extern const char * thumb_load_double_from_address --- 162,167 ---- *************** extern int arm_dllexport_name_p PARAMS *** 187,196 **** extern int arm_dllimport_name_p PARAMS ((const char *)); #ifdef TREE_CODE - extern int arm_pe_valid_machine_decl_attribute - PARAMS ((tree, tree, tree, tree)); - extern tree arm_pe_merge_machine_decl_attributes - PARAMS ((tree, tree)); extern void arm_pe_unique_section PARAMS ((tree, int)); extern void arm_pe_encode_section_info PARAMS ((tree)); extern int arm_dllexport_p PARAMS ((tree)); --- 184,189 ---- *************** extern rtx arm_expand_builtin PARAMS (( *** 205,214 **** enum machine_mode, int)); #endif ! #ifdef _C_PRAGMA_H /* included from code that cares about pragmas */ extern void arm_pr_long_calls PARAMS ((cpp_reader *)); extern void arm_pr_no_long_calls PARAMS ((cpp_reader *)); extern void arm_pr_long_calls_off PARAMS ((cpp_reader *)); #endif ! #endif /* GCC_ARM_PROTOS_H */ --- 198,207 ---- enum machine_mode, int)); #endif ! #ifdef GCC_C_PRAGMA_H /* included from code that cares about pragmas */ extern void arm_pr_long_calls PARAMS ((cpp_reader *)); extern void arm_pr_no_long_calls PARAMS ((cpp_reader *)); extern void arm_pr_long_calls_off PARAMS ((cpp_reader *)); #endif ! #endif /* ! GCC_ARM_PROTOS_H */ diff -Nrc3pad gcc-3.0.4/gcc/config/arm/arm.c gcc-3.1/gcc/config/arm/arm.c *** gcc-3.0.4/gcc/config/arm/arm.c Thu Jun 14 00:38:18 2001 --- gcc-3.1/gcc/config/arm/arm.c Wed Mar 20 15:06:03 2002 *************** *** 1,5 **** /* Output routines for GCC for ARM. ! Copyright (C) 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Pieter `Tiggr' Schoenmakers (rcpieter@win.tue.nl) and Martin Simmons (@harleqn.co.uk). --- 1,5 ---- /* Output routines for GCC for ARM. ! Copyright (C) 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Pieter `Tiggr' Schoenmakers (rcpieter@win.tue.nl) and Martin Simmons (@harleqn.co.uk). *************** Boston, MA 02111-1307, USA. */ *** 38,49 **** --- 38,53 ---- #include "reload.h" #include "function.h" #include "expr.h" + #include "optabs.h" #include "toplev.h" #include "recog.h" #include "ggc.h" #include "except.h" #include "c-pragma.h" + #include "integrate.h" #include "tm_p.h" + #include "target.h" + #include "target-def.h" /* Forward definitions of types. */ typedef struct minipool_node Mnode; *************** typedef struct minipool_fixup Mfix; *** 56,61 **** --- 60,67 ---- #define Ulong unsigned long #define Ccstar const char * + const struct attribute_spec arm_attribute_table[]; + /* Forward function declarations. */ static void arm_add_gc_roots PARAMS ((void)); static int arm_gen_constant PARAMS ((enum rtx_code, Mmode, Hint, rtx, rtx, int, int)); *************** static int const_ok_for_op PARAM *** 64,69 **** --- 70,78 ---- static int eliminate_lr2ip PARAMS ((rtx *)); static rtx emit_multi_reg_push PARAMS ((int)); static rtx emit_sfm PARAMS ((int, int)); + #ifndef AOF_ASSEMBLER + static bool arm_assemble_integer PARAMS ((rtx, unsigned int, int)); + #endif static Ccstar fp_const_from_val PARAMS ((REAL_VALUE_TYPE *)); static arm_cc get_arm_condition_code PARAMS ((rtx)); static void init_fpa_table PARAMS ((void)); *************** static void push_minipool_barrier *** 96,119 **** static void push_minipool_fix PARAMS ((rtx, Hint, rtx *, Mmode, rtx)); static void note_invalid_constants PARAMS ((rtx, Hint)); static int current_file_function_operand PARAMS ((rtx)); static Ulong arm_compute_save_reg_mask PARAMS ((void)); static Ulong arm_isr_value PARAMS ((tree)); static Ulong arm_compute_func_type PARAMS ((void)); ! #undef Hint #undef Mmode #undef Ulong #undef Ccstar /* Obstack for minipool constant handling. */ static struct obstack minipool_obstack; ! static char *minipool_startobj; ! #define obstack_chunk_alloc xmalloc ! #define obstack_chunk_free free ! /* The maximum number of insns skipped which will be conditionalised if ! possible. */ static int max_insns_skipped = 5; extern FILE * asm_out_file; --- 105,186 ---- static void push_minipool_fix PARAMS ((rtx, Hint, rtx *, Mmode, rtx)); static void note_invalid_constants PARAMS ((rtx, Hint)); static int current_file_function_operand PARAMS ((rtx)); + static Ulong arm_compute_save_reg0_reg12_mask PARAMS ((void)); static Ulong arm_compute_save_reg_mask PARAMS ((void)); static Ulong arm_isr_value PARAMS ((tree)); static Ulong arm_compute_func_type PARAMS ((void)); ! static tree arm_handle_fndecl_attribute PARAMS ((tree *, tree, tree, int, bool *)); ! static tree arm_handle_isr_attribute PARAMS ((tree *, tree, tree, int, bool *)); ! static void arm_output_function_epilogue PARAMS ((FILE *, Hint)); ! static void arm_output_function_prologue PARAMS ((FILE *, Hint)); ! static void thumb_output_function_prologue PARAMS ((FILE *, Hint)); ! static int arm_comp_type_attributes PARAMS ((tree, tree)); ! static void arm_set_default_type_attributes PARAMS ((tree)); ! static int arm_adjust_cost PARAMS ((rtx, rtx, rtx, int)); ! #ifdef OBJECT_FORMAT_ELF ! static void arm_elf_asm_named_section PARAMS ((const char *, unsigned int)); ! #endif ! #undef Hint #undef Mmode #undef Ulong #undef Ccstar + + /* Initialize the GCC target structure. */ + #ifdef TARGET_DLLIMPORT_DECL_ATTRIBUTES + #undef TARGET_MERGE_DECL_ATTRIBUTES + #define TARGET_MERGE_DECL_ATTRIBUTES merge_dllimport_decl_attributes + #endif + + #undef TARGET_ATTRIBUTE_TABLE + #define TARGET_ATTRIBUTE_TABLE arm_attribute_table + + #ifdef AOF_ASSEMBLER + #undef TARGET_ASM_BYTE_OP + #define TARGET_ASM_BYTE_OP "\tDCB\t" + #undef TARGET_ASM_ALIGNED_HI_OP + #define TARGET_ASM_ALIGNED_HI_OP "\tDCW\t" + #undef TARGET_ASM_ALIGNED_SI_OP + #define TARGET_ASM_ALIGNED_SI_OP "\tDCD\t" + #else + #undef TARGET_ASM_ALIGNED_SI_OP + #define TARGET_ASM_ALIGNED_SI_OP NULL + #undef TARGET_ASM_INTEGER + #define TARGET_ASM_INTEGER arm_assemble_integer + #endif + + #undef TARGET_ASM_FUNCTION_PROLOGUE + #define TARGET_ASM_FUNCTION_PROLOGUE arm_output_function_prologue + + #undef TARGET_ASM_FUNCTION_EPILOGUE + #define TARGET_ASM_FUNCTION_EPILOGUE arm_output_function_epilogue + + #undef TARGET_COMP_TYPE_ATTRIBUTES + #define TARGET_COMP_TYPE_ATTRIBUTES arm_comp_type_attributes + + #undef TARGET_SET_DEFAULT_TYPE_ATTRIBUTES + #define TARGET_SET_DEFAULT_TYPE_ATTRIBUTES arm_set_default_type_attributes + + #undef TARGET_INIT_BUILTINS + #define TARGET_INIT_BUILTINS arm_init_builtins + + #undef TARGET_EXPAND_BUILTIN + #define TARGET_EXPAND_BUILTIN arm_expand_builtin + + #undef TARGET_SCHED_ADJUST_COST + #define TARGET_SCHED_ADJUST_COST arm_adjust_cost + struct gcc_target targetm = TARGET_INITIALIZER; + /* Obstack for minipool constant handling. */ static struct obstack minipool_obstack; ! static char * minipool_startobj; ! #define obstack_chunk_alloc xmalloc ! #define obstack_chunk_free free ! /* The maximum number of insns skipped which ! will be conditionalised if possible. */ static int max_insns_skipped = 5; extern FILE * asm_out_file; *************** int arm_structure_size_boundary = DEF *** 154,161 **** #define FL_ARCH5E (1 << 9) /* DSP extenstions to v5 */ #define FL_XSCALE (1 << 10) /* XScale */ ! /* The bits in this mask specify which instructions we are ! allowed to generate. */ static int insn_flags = 0; /* The bits in this mask specify which instruction scheduling options should --- 221,228 ---- #define FL_ARCH5E (1 << 9) /* DSP extenstions to v5 */ #define FL_XSCALE (1 << 10) /* XScale */ ! /* The bits in this mask specify which ! instructions we are allowed to generate. */ static int insn_flags = 0; /* The bits in this mask specify which instruction scheduling options should *************** int arm_is_strong = 0; *** 188,194 **** /* Nonzero if this chip is an XScale. */ int arm_is_xscale = 0; ! /* Nonzero if this chip is a an ARM6 or an ARM7. */ int arm_is_6_or_7 = 0; /* Nonzero if generating Thumb instructions. */ --- 255,261 ---- /* Nonzero if this chip is an XScale. */ int arm_is_xscale = 0; ! /* Nonzero if this chip is an ARM6 or an ARM7. */ int arm_is_6_or_7 = 0; /* Nonzero if generating Thumb instructions. */ *************** int thumb_code = 0; *** 199,210 **** PRINT_OPERAND_ADDRESS. */ enum machine_mode output_memory_reference_mode; - /* Nonzero if the prologue must setup `fp'. */ - int current_function_anonymous_args; - /* The register number to be used for the PIC offset register. */ const char * arm_pic_register_string = NULL; ! int arm_pic_register = 9; /* Set to 1 when a return insn is output, this means that the epilogue is not needed. */ --- 266,274 ---- PRINT_OPERAND_ADDRESS. */ enum machine_mode output_memory_reference_mode; /* The register number to be used for the PIC offset register. */ const char * arm_pic_register_string = NULL; ! int arm_pic_register = INVALID_REGNUM; /* Set to 1 when a return insn is output, this means that the epilogue is not needed. */ *************** rtx arm_target_insn; *** 224,230 **** int arm_target_label; /* The condition codes of the ARM, and the inverse function. */ ! const char * arm_condition_codes[] = { "eq", "ne", "cs", "cc", "mi", "pl", "vs", "vc", "hi", "ls", "ge", "lt", "gt", "le", "al", "nv" --- 288,294 ---- int arm_target_label; /* The condition codes of the ARM, and the inverse function. */ ! static const char * const arm_condition_codes[] = { "eq", "ne", "cs", "cc", "mi", "pl", "vs", "vc", "hi", "ls", "ge", "lt", "gt", "le", "al", "nv" *************** const char * arm_condition_codes[] = *** 236,248 **** struct processors { ! const char * name; ! unsigned int flags; }; /* Not all of these give usefully different compilation alternatives, but there is no simple way of generalizing them. */ ! static struct processors all_cores[] = { /* ARM Cores */ --- 300,312 ---- struct processors { ! const char *const name; ! const unsigned int flags; }; /* Not all of these give usefully different compilation alternatives, but there is no simple way of generalizing them. */ ! static const struct processors all_cores[] = { /* ARM Cores */ *************** static struct processors all_cores[] = *** 295,301 **** {NULL, 0} }; ! static struct processors all_architectures[] = { /* ARM Architectures */ --- 359,365 ---- {NULL, 0} }; ! static const struct processors all_architectures[] = { /* ARM Architectures */ *************** arm_override_options () *** 386,397 **** /* If the user did not specify a processor, choose one for them. */ if (insn_flags == 0) { ! struct processors * sel; unsigned int sought; ! static struct cpu_default { ! int cpu; ! const char * name; } cpu_defaults[] = { --- 450,461 ---- /* If the user did not specify a processor, choose one for them. */ if (insn_flags == 0) { ! const struct processors * sel; unsigned int sought; ! static const struct cpu_default { ! const int cpu; ! const char *const name; } cpu_defaults[] = { *************** arm_override_options () *** 410,416 **** { TARGET_CPU_generic, "arm" }, { 0, 0 } }; ! struct cpu_default * def; /* Find the default. */ for (def = cpu_defaults; def->name; def++) --- 474,480 ---- { TARGET_CPU_generic, "arm" }, { 0, 0 } }; ! const struct cpu_default * def; /* Find the default. */ for (def = cpu_defaults; def->name; def++) *************** arm_override_options () *** 463,469 **** if (sel->name == NULL) { unsigned int current_bit_count = 0; ! struct processors * best_fit = NULL; /* Ideally we would like to issue an error message here saying that it was not possible to find a CPU compatible --- 527,533 ---- if (sel->name == NULL) { unsigned int current_bit_count = 0; ! const struct processors * best_fit = NULL; /* Ideally we would like to issue an error message here saying that it was not possible to find a CPU compatible *************** arm_override_options () *** 532,544 **** if (TARGET_THUMB && !(insn_flags & FL_THUMB)) { ! warning ("target CPU does not support THUMB instructions."); target_flags &= ~ARM_FLAG_THUMB; } if (TARGET_APCS_FRAME && TARGET_THUMB) { ! /* warning ("ignoring -mapcs-frame because -mthumb was used."); */ target_flags &= ~ARM_FLAG_APCS_FRAME; } --- 596,608 ---- if (TARGET_THUMB && !(insn_flags & FL_THUMB)) { ! warning ("target CPU does not support THUMB instructions"); target_flags &= ~ARM_FLAG_THUMB; } if (TARGET_APCS_FRAME && TARGET_THUMB) { ! /* warning ("ignoring -mapcs-frame because -mthumb was used"); */ target_flags &= ~ARM_FLAG_APCS_FRAME; } *************** arm_override_options () *** 546,558 **** from here where no function is being compiled currently. */ if ((target_flags & (THUMB_FLAG_LEAF_BACKTRACE | THUMB_FLAG_BACKTRACE)) && TARGET_ARM) ! warning ("enabling backtrace support is only meaningful when compiling for the Thumb."); if (TARGET_ARM && TARGET_CALLEE_INTERWORKING) ! warning ("enabling callee interworking support is only meaningful when compiling for the Thumb."); if (TARGET_ARM && TARGET_CALLER_INTERWORKING) ! warning ("enabling caller interworking support is only meaningful when compiling for the Thumb."); /* If interworking is enabled then APCS-32 must be selected as well. */ if (TARGET_INTERWORK) --- 610,622 ---- from here where no function is being compiled currently. */ if ((target_flags & (THUMB_FLAG_LEAF_BACKTRACE | THUMB_FLAG_BACKTRACE)) && TARGET_ARM) ! warning ("enabling backtrace support is only meaningful when compiling for the Thumb"); if (TARGET_ARM && TARGET_CALLEE_INTERWORKING) ! warning ("enabling callee interworking support is only meaningful when compiling for the Thumb"); if (TARGET_ARM && TARGET_CALLER_INTERWORKING) ! warning ("enabling caller interworking support is only meaningful when compiling for the Thumb"); /* If interworking is enabled then APCS-32 must be selected as well. */ if (TARGET_INTERWORK) *************** arm_override_options () *** 587,597 **** /* If stack checking is disabled, we can use r10 as the PIC register, which keeps r9 available. */ ! if (flag_pic && !TARGET_APCS_STACK) ! arm_pic_register = 10; if (TARGET_APCS_FLOAT) ! warning ("Passing floating point arguments in fp regs not yet supported"); /* Initialise boolean versions of the flags, for use in the arm.md file. */ arm_fast_multiply = (insn_flags & FL_FAST_MULT) != 0; --- 651,661 ---- /* If stack checking is disabled, we can use r10 as the PIC register, which keeps r9 available. */ ! if (flag_pic) ! arm_pic_register = TARGET_APCS_STACK ? 9 : 10; if (TARGET_APCS_FLOAT) ! warning ("passing floating point arguments in fp regs not yet supported"); /* Initialise boolean versions of the flags, for use in the arm.md file. */ arm_fast_multiply = (insn_flags & FL_FAST_MULT) != 0; *************** arm_override_options () *** 620,626 **** else if (streq (target_fp_name, "3")) arm_fpu_arch = FP_SOFT3; else ! error ("Invalid floating point emulation option: -mfpe-%s", target_fp_name); } else --- 684,690 ---- else if (streq (target_fp_name, "3")) arm_fpu_arch = FP_SOFT3; else ! error ("invalid floating point emulation option: -mfpe-%s", target_fp_name); } else *************** arm_override_options () *** 644,667 **** if (size == 8 || size == 32) arm_structure_size_boundary = size; else ! warning ("Structure size boundary can only be set to 8 or 32"); } if (arm_pic_register_string != NULL) { ! int pic_register; ! if (!flag_pic) warning ("-mpic-register= is useless without -fpic"); - pic_register = decode_reg_name (arm_pic_register_string); - /* Prevent the user from choosing an obviously stupid PIC register. */ ! if (pic_register < 0 || call_used_regs[pic_register] ! || pic_register == HARD_FRAME_POINTER_REGNUM ! || pic_register == STACK_POINTER_REGNUM ! || pic_register >= PC_REGNUM) ! error ("Unable to use '%s' for PIC register", arm_pic_register_string); else arm_pic_register = pic_register; } --- 708,729 ---- if (size == 8 || size == 32) arm_structure_size_boundary = size; else ! warning ("structure size boundary can only be set to 8 or 32"); } if (arm_pic_register_string != NULL) { ! int pic_register = decode_reg_name (arm_pic_register_string); ! if (!flag_pic) warning ("-mpic-register= is useless without -fpic"); /* Prevent the user from choosing an obviously stupid PIC register. */ ! else if (pic_register < 0 || call_used_regs[pic_register] ! || pic_register == HARD_FRAME_POINTER_REGNUM ! || pic_register == STACK_POINTER_REGNUM ! || pic_register >= PC_REGNUM) ! error ("unable to use '%s' for PIC register", arm_pic_register_string); else arm_pic_register = pic_register; } *************** arm_add_gc_roots () *** 710,721 **** typedef struct { ! const char * arg; ! unsigned long return_value; } isr_attribute_arg; ! static isr_attribute_arg isr_attribute_args [] = { { "IRQ", ARM_FT_ISR }, { "irq", ARM_FT_ISR }, --- 772,783 ---- typedef struct { ! const char *const arg; ! const unsigned long return_value; } isr_attribute_arg; ! static const isr_attribute_arg isr_attribute_args [] = { { "IRQ", ARM_FT_ISR }, { "irq", ARM_FT_ISR }, *************** static unsigned long *** 739,746 **** arm_isr_value (argument) tree argument; { ! isr_attribute_arg * ptr; ! const char * arg; /* No argument - default to IRQ. */ if (argument == NULL_TREE) --- 801,808 ---- arm_isr_value (argument) tree argument; { ! const isr_attribute_arg * ptr; ! const char * arg; /* No argument - default to IRQ. */ if (argument == NULL_TREE) *************** arm_isr_value (argument) *** 755,762 **** /* Check it against the list of known arguments. */ for (ptr = isr_attribute_args; ptr->arg != NULL; ptr ++) ! if (strcmp (arg, ptr->arg) == 0) ! return ptr->return_value; /* An unrecognised interrupt type. */ return ARM_FT_UNKNOWN; --- 817,824 ---- /* Check it against the list of known arguments. */ for (ptr = isr_attribute_args; ptr->arg != NULL; ptr ++) ! if (streq (arg, ptr->arg)) ! return ptr->return_value; /* An unrecognised interrupt type. */ return ARM_FT_UNKNOWN; *************** arm_compute_func_type () *** 786,792 **** if (current_function_needs_context) type |= ARM_FT_NESTED; ! attr = DECL_MACHINE_ATTRIBUTES (current_function_decl); a = lookup_attribute ("naked", attr); if (a != NULL_TREE) --- 848,854 ---- if (current_function_needs_context) type |= ARM_FT_NESTED; ! attr = DECL_ATTRIBUTES (current_function_decl); a = lookup_attribute ("naked", attr); if (a != NULL_TREE) *************** use_return_insn (iscond) *** 835,848 **** func_type = arm_current_func_type (); ! /* Naked functions, volatile functiond and interrupt ! functions all need special consideration. */ ! if (func_type & (ARM_FT_INTERRUPT | ARM_FT_VOLATILE | ARM_FT_NAKED)) return 0; /* As do variadic functions. */ if (current_function_pretend_args_size ! || current_function_anonymous_args /* Of if the function calls __builtin_eh_return () */ || ARM_FUNC_TYPE (func_type) == ARM_FT_EXCEPTION_HANDLER /* Or if there is no frame pointer and there is a stack adjustment. */ --- 897,910 ---- func_type = arm_current_func_type (); ! /* Naked functions and volatile functions need special ! consideration. */ ! if (func_type & (ARM_FT_VOLATILE | ARM_FT_NAKED)) return 0; /* As do variadic functions. */ if (current_function_pretend_args_size ! || cfun->machine->uses_anonymous_args /* Of if the function calls __builtin_eh_return () */ || ARM_FUNC_TYPE (func_type) == ARM_FT_EXCEPTION_HANDLER /* Or if there is no frame pointer and there is a stack adjustment. */ *************** int *** 883,896 **** const_ok_for_arm (i) HOST_WIDE_INT i; { ! unsigned HOST_WIDE_INT mask = ~HOST_UINT (0xFF); /* For machines with >32 bit HOST_WIDE_INT, the bits above bit 31 must be all zero, or all one. */ ! if ((i & ~HOST_UINT (0xffffffff)) != 0 ! && ((i & ~HOST_UINT (0xffffffff)) ! != ((~HOST_UINT (0)) ! & ~HOST_UINT (0xffffffff)))) return FALSE; /* Fast return for 0 and powers of 2 */ --- 945,958 ---- const_ok_for_arm (i) HOST_WIDE_INT i; { ! unsigned HOST_WIDE_INT mask = ~(unsigned HOST_WIDE_INT)0xFF; /* For machines with >32 bit HOST_WIDE_INT, the bits above bit 31 must be all zero, or all one. */ ! if ((i & ~(unsigned HOST_WIDE_INT) 0xffffffff) != 0 ! && ((i & ~(unsigned HOST_WIDE_INT) 0xffffffff) ! != ((~(unsigned HOST_WIDE_INT) 0) ! & ~(unsigned HOST_WIDE_INT) 0xffffffff))) return FALSE; /* Fast return for 0 and powers of 2 */ *************** const_ok_for_arm (i) *** 899,910 **** do { ! if ((i & mask & HOST_UINT (0xffffffff)) == 0) return TRUE; mask = ! (mask << 2) | ((mask & HOST_UINT (0xffffffff)) ! >> (32 - 2)) | ~(HOST_UINT (0xffffffff)); ! } while (mask != ~HOST_UINT (0xFF)); return FALSE; } --- 961,973 ---- do { ! if ((i & mask & (unsigned HOST_WIDE_INT) 0xffffffff) == 0) return TRUE; mask = ! (mask << 2) | ((mask & (unsigned HOST_WIDE_INT) 0xffffffff) ! >> (32 - 2)) | ~(unsigned HOST_WIDE_INT) 0xffffffff; ! } ! while (mask != ~(unsigned HOST_WIDE_INT) 0xFF); return FALSE; } *************** count_insns_for_constant (HOST_WIDE_INT *** 1029,1034 **** --- 1092,1098 ---- /* As above, but extra parameter GENERATE which, if clear, suppresses RTL generation. */ + static int arm_gen_constant (code, mode, val, target, source, subtargets, generate) enum rtx_code code; *************** arm_gen_constant (code, mode, val, targe *** 1051,1057 **** int set_zero_bit_copies = 0; int insns = 0; unsigned HOST_WIDE_INT temp1, temp2; ! unsigned HOST_WIDE_INT remainder = val & HOST_UINT (0xffffffff); /* Find out which operations are safe for a given CODE. Also do a quick check for degenerate cases; these can occur when DImode operations --- 1115,1121 ---- int set_zero_bit_copies = 0; int insns = 0; unsigned HOST_WIDE_INT temp1, temp2; ! unsigned HOST_WIDE_INT remainder = val & 0xffffffff; /* Find out which operations are safe for a given CODE. Also do a quick check for degenerate cases; these can occur when DImode operations *************** arm_gen_constant (code, mode, val, targe *** 1070,1076 **** break; case IOR: ! if (remainder == HOST_UINT (0xffffffff)) { if (generate) emit_insn (gen_rtx_SET (VOIDmode, target, --- 1134,1140 ---- break; case IOR: ! if (remainder == 0xffffffff) { if (generate) emit_insn (gen_rtx_SET (VOIDmode, target, *************** arm_gen_constant (code, mode, val, targe *** 1094,1100 **** emit_insn (gen_rtx_SET (VOIDmode, target, const0_rtx)); return 1; } ! if (remainder == HOST_UINT (0xffffffff)) { if (reload_completed && rtx_equal_p (target, source)) return 0; --- 1158,1164 ---- emit_insn (gen_rtx_SET (VOIDmode, target, const0_rtx)); return 1; } ! if (remainder == 0xffffffff) { if (reload_completed && rtx_equal_p (target, source)) return 0; *************** arm_gen_constant (code, mode, val, targe *** 1114,1120 **** emit_insn (gen_rtx_SET (VOIDmode, target, source)); return 1; } ! if (remainder == HOST_UINT (0xffffffff)) { if (generate) emit_insn (gen_rtx_SET (VOIDmode, target, --- 1178,1184 ---- emit_insn (gen_rtx_SET (VOIDmode, target, source)); return 1; } ! if (remainder == 0xffffffff) { if (generate) emit_insn (gen_rtx_SET (VOIDmode, target, *************** arm_gen_constant (code, mode, val, targe *** 1242,1257 **** word. We only look for the simplest cases, to do more would cost too much. Be careful, however, not to generate this when the alternative would take fewer insns. */ ! if (val & HOST_UINT (0xffff0000)) { ! temp1 = remainder & HOST_UINT (0xffff0000); temp2 = remainder & 0x0000ffff; /* Overlaps outside this range are best done using other methods. */ for (i = 9; i < 24; i++) { ! if ((((temp2 | (temp2 << i)) ! & HOST_UINT (0xffffffff)) == remainder) && !const_ok_for_arm (temp2)) { rtx new_src = (subtargets --- 1306,1320 ---- word. We only look for the simplest cases, to do more would cost too much. Be careful, however, not to generate this when the alternative would take fewer insns. */ ! if (val & 0xffff0000) { ! temp1 = remainder & 0xffff0000; temp2 = remainder & 0x0000ffff; /* Overlaps outside this range are best done using other methods. */ for (i = 9; i < 24; i++) { ! if ((((temp2 | (temp2 << i)) & 0xffffffff) == remainder) && !const_ok_for_arm (temp2)) { rtx new_src = (subtargets *************** arm_gen_constant (code, mode, val, targe *** 1389,1399 **** /* See if two shifts will do 2 or more insn's worth of work. */ if (clear_sign_bit_copies >= 16 && clear_sign_bit_copies < 24) { ! HOST_WIDE_INT shift_mask = (((HOST_UINT (0xffffffff)) << (32 - clear_sign_bit_copies)) ! & HOST_UINT (0xffffffff)); ! if ((remainder | shift_mask) != HOST_UINT (0xffffffff)) { if (generate) { --- 1452,1462 ---- /* See if two shifts will do 2 or more insn's worth of work. */ if (clear_sign_bit_copies >= 16 && clear_sign_bit_copies < 24) { ! HOST_WIDE_INT shift_mask = ((0xffffffff << (32 - clear_sign_bit_copies)) ! & 0xffffffff); ! if ((remainder | shift_mask) != 0xffffffff) { if (generate) { *************** arm_gen_constant (code, mode, val, targe *** 1426,1432 **** { HOST_WIDE_INT shift_mask = (1 << clear_zero_bit_copies) - 1; ! if ((remainder | shift_mask) != HOST_UINT (0xffffffff)) { if (generate) { --- 1489,1495 ---- { HOST_WIDE_INT shift_mask = (1 << clear_zero_bit_copies) - 1; ! if ((remainder | shift_mask) != 0xffffffff) { if (generate) { *************** arm_gen_constant (code, mode, val, targe *** 1468,1476 **** num_bits_set++; if (code == AND || (can_invert && num_bits_set > 16)) ! remainder = (~remainder) & HOST_UINT (0xffffffff); else if (code == PLUS && num_bits_set > 16) ! remainder = (-remainder) & HOST_UINT (0xffffffff); else { can_invert = 0; --- 1531,1539 ---- num_bits_set++; if (code == AND || (can_invert && num_bits_set > 16)) ! remainder = (~remainder) & 0xffffffff; else if (code == PLUS && num_bits_set > 16) ! remainder = (-remainder) & 0xffffffff; else { can_invert = 0; *************** arm_gen_constant (code, mode, val, targe *** 1555,1588 **** if (generate) { ! rtx new_src; if (code == SET) ! emit_insn (gen_rtx_SET (VOIDmode, ! new_src = (subtargets ! ? gen_reg_rtx (mode) ! : target), ! GEN_INT (can_invert ! ? ~temp1 : temp1))); else if (code == MINUS) ! emit_insn (gen_rtx_SET (VOIDmode, ! new_src = (subtargets ! ? gen_reg_rtx (mode) ! : target), ! gen_rtx (code, mode, GEN_INT (temp1), ! source))); else ! emit_insn (gen_rtx_SET (VOIDmode, ! new_src = (remainder ! ? (subtargets ! ? gen_reg_rtx (mode) ! : target) ! : target), ! gen_rtx (code, mode, source, ! GEN_INT (can_invert ? ~temp1 ! : (can_negate ! ? -temp1 ! : temp1))))); source = new_src; } --- 1618,1654 ---- if (generate) { ! rtx new_src, temp1_rtx; ! ! if (code == SET || code == MINUS) ! { ! new_src = (subtargets ? gen_reg_rtx (mode) : target); ! if (can_invert && code != MINUS) ! temp1 = ~temp1; ! } ! else ! { ! if (remainder && subtargets) ! new_src = gen_reg_rtx (mode); ! else ! new_src = target; ! if (can_invert) ! temp1 = ~temp1; ! else if (can_negate) ! temp1 = -temp1; ! } ! ! temp1 = trunc_int_for_mode (temp1, mode); ! temp1_rtx = GEN_INT (temp1); if (code == SET) ! ; else if (code == MINUS) ! temp1_rtx = gen_rtx_MINUS (mode, temp1_rtx, source); else ! temp1_rtx = gen_rtx_fmt_ee (code, mode, source, temp1_rtx); ! ! emit_insn (gen_rtx_SET (VOIDmode, new_src, temp1_rtx)); source = new_src; } *************** arm_gen_constant (code, mode, val, targe *** 1598,1611 **** i -= 6; } i -= 2; ! } while (remainder); } return insns; } /* Canonicalize a comparison so that we are more likely to recognize it. This can be done for a few constant compares, where we can make the immediate value easier to load. */ enum rtx_code arm_canonicalize_comparison (code, op1) enum rtx_code code; --- 1664,1680 ---- i -= 6; } i -= 2; ! } ! while (remainder); } + return insns; } /* Canonicalize a comparison so that we are more likely to recognize it. This can be done for a few constant compares, where we can make the immediate value easier to load. */ + enum rtx_code arm_canonicalize_comparison (code, op1) enum rtx_code code; *************** arm_canonicalize_comparison (code, op1) *** 1621,1627 **** case GT: case LE: ! if (i != (((HOST_UINT (1)) << (HOST_BITS_PER_WIDE_INT - 1)) - 1) && (const_ok_for_arm (i + 1) || const_ok_for_arm (-(i + 1)))) { *op1 = GEN_INT (i + 1); --- 1690,1696 ---- case GT: case LE: ! if (i != ((((unsigned HOST_WIDE_INT) 1) << (HOST_BITS_PER_WIDE_INT - 1)) - 1) && (const_ok_for_arm (i + 1) || const_ok_for_arm (-(i + 1)))) { *op1 = GEN_INT (i + 1); *************** arm_canonicalize_comparison (code, op1) *** 1631,1637 **** case GE: case LT: ! if (i != ((HOST_UINT (1)) << (HOST_BITS_PER_WIDE_INT - 1)) && (const_ok_for_arm (i - 1) || const_ok_for_arm (-(i - 1)))) { *op1 = GEN_INT (i - 1); --- 1700,1706 ---- case GE: case LT: ! if (i != (((unsigned HOST_WIDE_INT) 1) << (HOST_BITS_PER_WIDE_INT - 1)) && (const_ok_for_arm (i - 1) || const_ok_for_arm (-(i - 1)))) { *op1 = GEN_INT (i - 1); *************** arm_canonicalize_comparison (code, op1) *** 1641,1647 **** case GTU: case LEU: ! if (i != ~(HOST_UINT (0)) && (const_ok_for_arm (i + 1) || const_ok_for_arm (-(i + 1)))) { *op1 = GEN_INT (i + 1); --- 1710,1716 ---- case GTU: case LEU: ! if (i != ~((unsigned HOST_WIDE_INT) 0) && (const_ok_for_arm (i + 1) || const_ok_for_arm (-(i + 1)))) { *op1 = GEN_INT (i + 1); *************** arm_canonicalize_comparison (code, op1) *** 1669,1674 **** --- 1738,1744 ---- /* Decide whether a type should be returned in memory (true) or in a register (false). This is called by the macro RETURN_IN_MEMORY. */ + int arm_return_in_memory (type) tree type; *************** arm_return_in_memory (type) *** 1680,1688 **** /* For the arm-wince targets we choose to be compitable with Microsoft's ARM and Thumb compilers, which always return aggregates in memory. */ #ifndef ARM_WINCE ! ! if (int_size_in_bytes (type) > 4) ! /* All structures/unions bigger than one word are returned in memory. */ return 1; if (TREE_CODE (type) == RECORD_TYPE) --- 1750,1760 ---- /* For the arm-wince targets we choose to be compitable with Microsoft's ARM and Thumb compilers, which always return aggregates in memory. */ #ifndef ARM_WINCE ! /* All structures/unions bigger than one word are returned in memory. ! Also catch the case where int_size_in_bytes returns -1. In this case ! the aggregate is either huge or of varaible size, and in either case ! we will want to return it via memory and not in a register. */ ! if (((unsigned int) int_size_in_bytes (type)) > UNITS_PER_WORD) return 1; if (TREE_CODE (type) == RECORD_TYPE) *************** arm_init_cumulative_args (pcum, fntype, *** 1801,1806 **** --- 1873,1879 ---- the preceding args and about the function being called. NAMED is nonzero if this argument is a named parameter (otherwise it is an extra parameter matching an ellipsis). */ + rtx arm_function_arg (pcum, mode, type, named) CUMULATIVE_ARGS * pcum; *************** static arm_pragma_enum arm_pragma_long_c *** 1830,1894 **** void arm_pr_long_calls (pfile) ! cpp_reader *pfile ATTRIBUTE_UNUSED; { arm_pragma_long_calls = LONG; } void arm_pr_no_long_calls (pfile) ! cpp_reader *pfile ATTRIBUTE_UNUSED; { arm_pragma_long_calls = SHORT; } void arm_pr_long_calls_off (pfile) ! cpp_reader *pfile ATTRIBUTE_UNUSED; { arm_pragma_long_calls = OFF; } - ! /* Return nonzero if IDENTIFIER with arguments ARGS is a valid machine specific ! attribute for TYPE. The attributes in ATTRIBUTES have previously been ! assigned to TYPE. */ ! int ! arm_valid_type_attribute_p (type, attributes, identifier, args) ! tree type; ! tree attributes ATTRIBUTE_UNUSED; ! tree identifier; ! tree args; { ! if ( TREE_CODE (type) != FUNCTION_TYPE ! && TREE_CODE (type) != METHOD_TYPE ! && TREE_CODE (type) != FIELD_DECL ! && TREE_CODE (type) != TYPE_DECL) ! return 0; ! /* Function calls made to this symbol must be done indirectly, because it may lie outside of the 26 bit addressing range of a normal function call. */ ! if (is_attribute_p ("long_call", identifier)) ! return (args == NULL_TREE); ! /* Whereas these functions are always known to reside within the 26 bit addressing range. */ ! if (is_attribute_p ("short_call", identifier)) ! return (args == NULL_TREE); ! /* Interrupt Service Routines have special prologue and epilogue requirements. */ ! if (is_attribute_p ("isr", identifier) ! || is_attribute_p ("interrupt", identifier)) ! return arm_isr_value (args); ! return 0; } /* Return 0 if the attributes for two types are incompatible, 1 if they are compatible, and 2 if they are nearly compatible (which causes a warning to be generated). */ ! int arm_comp_type_attributes (type1, type2) tree type1; tree type2; --- 1903,2049 ---- void arm_pr_long_calls (pfile) ! cpp_reader * pfile ATTRIBUTE_UNUSED; { arm_pragma_long_calls = LONG; } void arm_pr_no_long_calls (pfile) ! cpp_reader * pfile ATTRIBUTE_UNUSED; { arm_pragma_long_calls = SHORT; } void arm_pr_long_calls_off (pfile) ! cpp_reader * pfile ATTRIBUTE_UNUSED; { arm_pragma_long_calls = OFF; } ! /* Table of machine attributes. */ ! const struct attribute_spec arm_attribute_table[] = { ! /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */ /* Function calls made to this symbol must be done indirectly, because it may lie outside of the 26 bit addressing range of a normal function call. */ ! { "long_call", 0, 0, false, true, true, NULL }, /* Whereas these functions are always known to reside within the 26 bit addressing range. */ ! { "short_call", 0, 0, false, true, true, NULL }, /* Interrupt Service Routines have special prologue and epilogue requirements. */ ! { "isr", 0, 1, false, false, false, arm_handle_isr_attribute }, ! { "interrupt", 0, 1, false, false, false, arm_handle_isr_attribute }, ! { "naked", 0, 0, true, false, false, arm_handle_fndecl_attribute }, ! #ifdef ARM_PE ! /* ARM/PE has three new attributes: ! interfacearm - ? ! dllexport - for exporting a function/variable that will live in a dll ! dllimport - for importing a function/variable from a dll ! Microsoft allows multiple declspecs in one __declspec, separating ! them with spaces. We do NOT support this. Instead, use __declspec ! multiple times. ! */ ! { "dllimport", 0, 0, true, false, false, NULL }, ! { "dllexport", 0, 0, true, false, false, NULL }, ! { "interfacearm", 0, 0, true, false, false, arm_handle_fndecl_attribute }, ! #endif ! { NULL, 0, 0, false, false, false, NULL } ! }; ! ! /* Handle an attribute requiring a FUNCTION_DECL; ! arguments as in struct attribute_spec.handler. */ ! ! static tree ! arm_handle_fndecl_attribute (node, name, args, flags, no_add_attrs) ! tree * node; ! tree name; ! tree args ATTRIBUTE_UNUSED; ! int flags ATTRIBUTE_UNUSED; ! bool * no_add_attrs; ! { ! if (TREE_CODE (*node) != FUNCTION_DECL) ! { ! warning ("`%s' attribute only applies to functions", ! IDENTIFIER_POINTER (name)); ! *no_add_attrs = true; ! } ! ! return NULL_TREE; ! } ! ! /* Handle an "interrupt" or "isr" attribute; ! arguments as in struct attribute_spec.handler. */ ! ! static tree ! arm_handle_isr_attribute (node, name, args, flags, no_add_attrs) ! tree * node; ! tree name; ! tree args; ! int flags; ! bool * no_add_attrs; ! { ! if (DECL_P (*node)) ! { ! if (TREE_CODE (*node) != FUNCTION_DECL) ! { ! warning ("`%s' attribute only applies to functions", ! IDENTIFIER_POINTER (name)); ! *no_add_attrs = true; ! } ! /* FIXME: the argument if any is checked for type attributes; ! should it be checked for decl ones? */ ! } ! else ! { ! if (TREE_CODE (*node) == FUNCTION_TYPE ! || TREE_CODE (*node) == METHOD_TYPE) ! { ! if (arm_isr_value (args) == ARM_FT_UNKNOWN) ! { ! warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); ! *no_add_attrs = true; ! } ! } ! else if (TREE_CODE (*node) == POINTER_TYPE ! && (TREE_CODE (TREE_TYPE (*node)) == FUNCTION_TYPE ! || TREE_CODE (TREE_TYPE (*node)) == METHOD_TYPE) ! && arm_isr_value (args) != ARM_FT_UNKNOWN) ! { ! *node = build_type_copy (*node); ! TREE_TYPE (*node) = build_type_attribute_variant ! (TREE_TYPE (*node), ! tree_cons (name, args, TYPE_ATTRIBUTES (TREE_TYPE (*node)))); ! *no_add_attrs = true; ! } ! else ! { ! /* Possibly pass this attribute on from the type to a decl. */ ! if (flags & ((int) ATTR_FLAG_DECL_NEXT ! | (int) ATTR_FLAG_FUNCTION_NEXT ! | (int) ATTR_FLAG_ARRAY_NEXT)) ! { ! *no_add_attrs = true; ! return tree_cons (name, args, NULL_TREE); ! } ! else ! { ! warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); ! } ! } ! } ! ! return NULL_TREE; } /* Return 0 if the attributes for two types are incompatible, 1 if they are compatible, and 2 if they are nearly compatible (which causes a warning to be generated). */ ! ! static int arm_comp_type_attributes (type1, type2) tree type1; tree type2; *************** arm_comp_type_attributes (type1, type2) *** 1932,1937 **** --- 2087,2093 ---- /* Encode long_call or short_call attribute by prefixing symbol name in DECL with a special character FLAG. */ + void arm_encode_call_attribute (decl, flag) tree decl; *************** arm_encode_call_attribute (decl, flag) *** 1941,1949 **** int len = strlen (str); char * newstr; - if (TREE_CODE (decl) != FUNCTION_DECL) - return; - /* Do not allow weak functions to be treated as short call. */ if (DECL_WEAK (decl) && flag == SHORT_CALL_FLAG_CHAR) return; --- 2097,2102 ---- *************** arm_encode_call_attribute (decl, flag) *** 1959,1965 **** /* Assigns default attributes to newly defined type. This is used to set short_call/long_call attributes for function types of functions defined inside corresponding #pragma scopes. */ ! void arm_set_default_type_attributes (type) tree type; { --- 2112,2119 ---- /* Assigns default attributes to newly defined type. This is used to set short_call/long_call attributes for function types of functions defined inside corresponding #pragma scopes. */ ! ! static void arm_set_default_type_attributes (type) tree type; { *************** arm_set_default_type_attributes (type) *** 1986,1991 **** --- 2140,2146 ---- /* Return 1 if the operand is a SYMBOL_REF for a function known to be defined within the current compilation unit. If this caanot be determined, then 0 is returned. */ + static int current_file_function_operand (sym_ref) rtx sym_ref; *************** current_file_function_operand (sym_ref) *** 1997,2004 **** return 1; /* The current function is always defined within the current compilation ! unit. if it s a weak defintion however, then this may not be the real ! defintion of the function, and so we have to say no. */ if (sym_ref == XEXP (DECL_RTL (current_function_decl), 0) && !DECL_WEAK (current_function_decl)) return 1; --- 2152,2159 ---- return 1; /* The current function is always defined within the current compilation ! unit. if it s a weak definition however, then this may not be the real ! definition of the function, and so we have to say no. */ if (sym_ref == XEXP (DECL_RTL (current_function_decl), 0) && !DECL_WEAK (current_function_decl)) return 1; *************** current_file_function_operand (sym_ref) *** 2028,2033 **** --- 2183,2189 ---- "call_symbol" and "call_symbol_value" patterns and to 0 in the "call" and "call_value" patterns. This is because of the difference in the SYM_REFs passed by these patterns. */ + int arm_is_longcall_p (sym_ref, call_cookie, call_symbol) rtx sym_ref; *************** arm_is_longcall_p (sym_ref, call_cookie, *** 2060,2065 **** --- 2216,2222 ---- } /* Return non-zero if it is ok to make a tail-call to DECL. */ + int arm_function_ok_for_sibcall (decl) tree decl; *************** legitimize_pic_address (orig, mode, reg) *** 2119,2127 **** enum machine_mode mode; rtx reg; { ! if (GET_CODE (orig) == SYMBOL_REF) { rtx pic_ref, address; rtx insn; int subregs = 0; --- 2276,2287 ---- enum machine_mode mode; rtx reg; { ! if (GET_CODE (orig) == SYMBOL_REF ! || GET_CODE (orig) == LABEL_REF) { + #ifndef AOF_ASSEMBLER rtx pic_ref, address; + #endif rtx insn; int subregs = 0; *************** legitimize_pic_address (orig, mode, reg) *** 2150,2159 **** else emit_insn (gen_pic_load_addr_thumb (address, orig)); ! pic_ref = gen_rtx_MEM (Pmode, ! gen_rtx_PLUS (Pmode, pic_offset_table_rtx, ! address)); ! RTX_UNCHANGING_P (pic_ref) = 1; insn = emit_move_insn (reg, pic_ref); #endif current_function_uses_pic_offset_table = 1; --- 2310,2328 ---- else emit_insn (gen_pic_load_addr_thumb (address, orig)); ! if ((GET_CODE (orig) == LABEL_REF ! || (GET_CODE (orig) == SYMBOL_REF && ! ENCODED_SHORT_CALL_ATTR_P (XSTR (orig, 0)))) ! && NEED_GOT_RELOC) ! pic_ref = gen_rtx_PLUS (Pmode, pic_offset_table_rtx, address); ! else ! { ! pic_ref = gen_rtx_MEM (Pmode, ! gen_rtx_PLUS (Pmode, pic_offset_table_rtx, ! address)); ! RTX_UNCHANGING_P (pic_ref) = 1; ! } ! insn = emit_move_insn (reg, pic_ref); #endif current_function_uses_pic_offset_table = 1; *************** legitimize_pic_address (orig, mode, reg) *** 2201,2207 **** win: if (GET_CODE (offset) == CONST_INT) ! return plus_constant_for_output (base, INTVAL (offset)); } if (GET_MODE_SIZE (mode) > 4 --- 2370,2376 ---- win: if (GET_CODE (offset) == CONST_INT) ! return plus_constant (base, INTVAL (offset)); } if (GET_MODE_SIZE (mode) > 4 *************** legitimize_pic_address (orig, mode, reg) *** 2214,2238 **** return gen_rtx_PLUS (Pmode, base, offset); } - else if (GET_CODE (orig) == LABEL_REF) - { - current_function_uses_pic_offset_table = 1; - - if (NEED_GOT_RELOC) - { - rtx pic_ref, address = gen_reg_rtx (Pmode); - - if (TARGET_ARM) - emit_insn (gen_pic_load_addr_arm (address, orig)); - else - emit_insn (gen_pic_load_addr_thumb (address, orig)); - - pic_ref = gen_rtx_PLUS (Pmode, pic_offset_table_rtx, address); - - emit_move_insn (address, pic_ref); - return address; - } - } return orig; } --- 2383,2388 ---- *************** legitimize_pic_address (orig, mode, reg) *** 2245,2251 **** void arm_finalize_pic (prologue) ! int prologue; { #ifndef AOF_ASSEMBLER rtx l1, pic_tmp, pic_tmp2, seq, pic_rtx; --- 2395,2401 ---- void arm_finalize_pic (prologue) ! int prologue ATTRIBUTE_UNUSED; { #ifndef AOF_ASSEMBLER rtx l1, pic_tmp, pic_tmp2, seq, pic_rtx; *************** arm_rtx_costs (x, code, outer) *** 2583,2589 **** if (GET_CODE (XEXP (x, 1)) == CONST_INT) { unsigned HOST_WIDE_INT i = (INTVAL (XEXP (x, 1)) ! & HOST_UINT (0xffffffff)); int add_cost = const_ok_for_arm (i) ? 4 : 8; int j; --- 2733,2739 ---- if (GET_CODE (XEXP (x, 1)) == CONST_INT) { unsigned HOST_WIDE_INT i = (INTVAL (XEXP (x, 1)) ! & (unsigned HOST_WIDE_INT) 0xffffffff); int add_cost = const_ok_for_arm (i) ? 4 : 8; int j; *************** arm_rtx_costs (x, code, outer) *** 2690,2696 **** } } ! int arm_adjust_cost (insn, link, dep, cost) rtx insn; rtx link; --- 2840,2846 ---- } } ! static int arm_adjust_cost (insn, link, dep, cost) rtx insn; rtx link; *************** arm_adjust_cost (insn, link, dep, cost) *** 2775,2781 **** static int fpa_consts_inited = 0; ! static const char * strings_fpa[8] = { "0", "1", "2", "3", "4", "5", "0.5", "10" --- 2925,2931 ---- static int fpa_consts_inited = 0; ! static const char * const strings_fpa[8] = { "0", "1", "2", "3", "4", "5", "0.5", "10" *************** neg_const_double_rtx_ok_for_fpu (x) *** 2857,2863 **** int s_register_operand (op, mode) ! register rtx op; enum machine_mode mode; { if (GET_MODE (op) != mode && mode != VOIDmode) --- 3007,3013 ---- int s_register_operand (op, mode) ! rtx op; enum machine_mode mode; { if (GET_MODE (op) != mode && mode != VOIDmode) *************** s_register_operand (op, mode) *** 2875,2883 **** } /* A hard register operand (even before reload. */ int arm_hard_register_operand (op, mode) ! register rtx op; enum machine_mode mode; { if (GET_MODE (op) != mode && mode != VOIDmode) --- 3025,3034 ---- } /* A hard register operand (even before reload. */ + int arm_hard_register_operand (op, mode) ! rtx op; enum machine_mode mode; { if (GET_MODE (op) != mode && mode != VOIDmode) *************** arm_hard_register_operand (op, mode) *** 2891,2897 **** int reg_or_int_operand (op, mode) ! register rtx op; enum machine_mode mode; { if (GET_CODE (op) == CONST_INT) --- 3042,3048 ---- int reg_or_int_operand (op, mode) ! rtx op; enum machine_mode mode; { if (GET_CODE (op) == CONST_INT) *************** arm_reload_memory_operand (op, mode) *** 2927,2936 **** /* Return 1 if OP is a valid memory address, but not valid for a signed byte memory access (architecture V4). ! MODE is QImode if called when computing contraints, or VOIDmode when emitting patterns. In this latter case we cannot use memory_operand() because it will fail on badly formed MEMs, which is precisly what we are trying to catch. */ int bad_signed_byte_operand (op, mode) rtx op; --- 3078,3088 ---- /* Return 1 if OP is a valid memory address, but not valid for a signed byte memory access (architecture V4). ! MODE is QImode if called when computing constraints, or VOIDmode when emitting patterns. In this latter case we cannot use memory_operand() because it will fail on badly formed MEMs, which is precisly what we are trying to catch. */ + int bad_signed_byte_operand (op, mode) rtx op; *************** arm_rhs_operand (op, mode) *** 2973,2980 **** || (GET_CODE (op) == CONST_INT && const_ok_for_arm (INTVAL (op)))); } ! /* Return TRUE for valid operands for the rhs of an ARM instruction, or a load. ! */ int arm_rhsm_operand (op, mode) --- 3125,3132 ---- || (GET_CODE (op) == CONST_INT && const_ok_for_arm (INTVAL (op)))); } ! /* Return TRUE for valid operands for the ! rhs of an ARM instruction, or a load. */ int arm_rhsm_operand (op, mode) *************** arm_not_operand (op, mode) *** 3016,3024 **** /* Return TRUE if the operand is a memory reference which contains an offsettable address. */ int offsettable_memory_operand (op, mode) ! register rtx op; enum machine_mode mode; { if (mode == VOIDmode) --- 3168,3177 ---- /* Return TRUE if the operand is a memory reference which contains an offsettable address. */ + int offsettable_memory_operand (op, mode) ! rtx op; enum machine_mode mode; { if (mode == VOIDmode) *************** offsettable_memory_operand (op, mode) *** 3032,3040 **** /* Return TRUE if the operand is a memory reference which is, or can be made word aligned by adjusting the offset. */ int alignable_memory_operand (op, mode) ! register rtx op; enum machine_mode mode; { rtx reg; --- 3185,3194 ---- /* Return TRUE if the operand is a memory reference which is, or can be made word aligned by adjusting the offset. */ + int alignable_memory_operand (op, mode) ! rtx op; enum machine_mode mode; { rtx reg; *************** alignable_memory_operand (op, mode) *** 3060,3068 **** /* Similar to s_register_operand, but does not allow hard integer registers. */ int f_register_operand (op, mode) ! register rtx op; enum machine_mode mode; { if (GET_MODE (op) != mode && mode != VOIDmode) --- 3214,3223 ---- /* Similar to s_register_operand, but does not allow hard integer registers. */ + int f_register_operand (op, mode) ! rtx op; enum machine_mode mode; { if (GET_MODE (op) != mode && mode != VOIDmode) *************** power_of_two_operand (op, mode) *** 3125,3132 **** --- 3280,3289 ---- if (GET_CODE (op) == CONST_INT) { HOST_WIDE_INT value = INTVAL (op); + return value != 0 && (value & (value - 1)) == 0; } + return FALSE; } *************** di_operand (op, mode) *** 3164,3169 **** --- 3321,3327 ---- } /* Like di_operand, but don't accept constants. */ + int nonimmediate_di_operand (op, mode) rtx op; *************** soft_df_operand (op, mode) *** 3220,3225 **** --- 3378,3384 ---- } /* Like soft_df_operand, but don't accept constants. */ + int nonimmediate_soft_df_operand (op, mode) rtx op; *************** nonimmediate_soft_df_operand (op, mode) *** 3240,3245 **** --- 3399,3405 ---- } /* Return TRUE for valid index operands. */ + int index_operand (op, mode) rtx op; *************** shiftable_operator (x, mode) *** 3274,3288 **** rtx x; enum machine_mode mode; { if (GET_MODE (x) != mode) return FALSE; - else - { - enum rtx_code code = GET_CODE (x); ! return (code == PLUS || code == MINUS ! || code == IOR || code == XOR || code == AND); ! } } /* Return TRUE for binary logical operators. */ --- 3434,3448 ---- rtx x; enum machine_mode mode; { + enum rtx_code code; + if (GET_MODE (x) != mode) return FALSE; ! code = GET_CODE (x); ! ! return (code == PLUS || code == MINUS ! || code == IOR || code == XOR || code == AND); } /* Return TRUE for binary logical operators. */ *************** logical_binary_operator (x, mode) *** 3292,3305 **** rtx x; enum machine_mode mode; { if (GET_MODE (x) != mode) return FALSE; - else - { - enum rtx_code code = GET_CODE (x); ! return (code == IOR || code == XOR || code == AND); ! } } /* Return TRUE for shift operators. */ --- 3452,3465 ---- rtx x; enum machine_mode mode; { + enum rtx_code code; + if (GET_MODE (x) != mode) return FALSE; ! code = GET_CODE (x); ! ! return (code == IOR || code == XOR || code == AND); } /* Return TRUE for shift operators. */ *************** shift_operator (x, mode) *** 3309,3329 **** rtx x; enum machine_mode mode; { if (GET_MODE (x) != mode) return FALSE; - else - { - enum rtx_code code = GET_CODE (x); ! if (code == MULT) ! return power_of_two_operand (XEXP (x, 1), mode); ! return (code == ASHIFT || code == ASHIFTRT || code == LSHIFTRT ! || code == ROTATERT); ! } } /* Return TRUE if x is EQ or NE. */ int equality_operator (x, mode) rtx x; --- 3469,3490 ---- rtx x; enum machine_mode mode; { + enum rtx_code code; + if (GET_MODE (x) != mode) return FALSE; ! code = GET_CODE (x); ! if (code == MULT) ! return power_of_two_operand (XEXP (x, 1), mode); ! ! return (code == ASHIFT || code == ASHIFTRT || code == LSHIFTRT ! || code == ROTATERT); } /* Return TRUE if x is EQ or NE. */ + int equality_operator (x, mode) rtx x; *************** equality_operator (x, mode) *** 3333,3338 **** --- 3494,3500 ---- } /* Return TRUE if x is a comparison operator other than LTGT or UNEQ. */ + int arm_comparison_operator (x, mode) rtx x; *************** arm_comparison_operator (x, mode) *** 3344,3349 **** --- 3506,3512 ---- } /* Return TRUE for SMIN SMAX UMIN UMAX operators. */ + int minmax_operator (x, mode) rtx x; *************** minmax_operator (x, mode) *** 3359,3364 **** --- 3522,3528 ---- /* Return TRUE if this is the condition code register, if we aren't given a mode, accept any class CCmode register. */ + int cc_register (x, mode) rtx x; *************** cc_register (x, mode) *** 3383,3388 **** --- 3547,3553 ---- /* Return TRUE if this is the condition code register, if we aren't given a mode, accept any class CCmode register which indicates a dominance expression. */ + int dominant_cc_register (x, mode) rtx x; *************** dominant_cc_register (x, mode) *** 3407,3418 **** } /* Return TRUE if X references a SYMBOL_REF. */ int symbol_mentioned_p (x) rtx x; { ! register const char * fmt; ! register int i; if (GET_CODE (x) == SYMBOL_REF) return 1; --- 3572,3584 ---- } /* Return TRUE if X references a SYMBOL_REF. */ + int symbol_mentioned_p (x) rtx x; { ! const char * fmt; ! int i; if (GET_CODE (x) == SYMBOL_REF) return 1; *************** symbol_mentioned_p (x) *** 3423,3429 **** { if (fmt[i] == 'E') { ! register int j; for (j = XVECLEN (x, i) - 1; j >= 0; j--) if (symbol_mentioned_p (XVECEXP (x, i, j))) --- 3589,3595 ---- { if (fmt[i] == 'E') { ! int j; for (j = XVECLEN (x, i) - 1; j >= 0; j--) if (symbol_mentioned_p (XVECEXP (x, i, j))) *************** symbol_mentioned_p (x) *** 3437,3448 **** } /* Return TRUE if X references a LABEL_REF. */ int label_mentioned_p (x) rtx x; { ! register const char * fmt; ! register int i; if (GET_CODE (x) == LABEL_REF) return 1; --- 3603,3615 ---- } /* Return TRUE if X references a LABEL_REF. */ + int label_mentioned_p (x) rtx x; { ! const char * fmt; ! int i; if (GET_CODE (x) == LABEL_REF) return 1; *************** label_mentioned_p (x) *** 3452,3458 **** { if (fmt[i] == 'E') { ! register int j; for (j = XVECLEN (x, i) - 1; j >= 0; j--) if (label_mentioned_p (XVECEXP (x, i, j))) --- 3619,3625 ---- { if (fmt[i] == 'E') { ! int j; for (j = XVECLEN (x, i) - 1; j >= 0; j--) if (label_mentioned_p (XVECEXP (x, i, j))) *************** minmax_code (x) *** 3484,3496 **** } /* Return 1 if memory locations are adjacent. */ int adjacent_mem_locations (a, b) rtx a, b; { - int val0 = 0, val1 = 0; - int reg0, reg1; - if ((GET_CODE (XEXP (a, 0)) == REG || (GET_CODE (XEXP (a, 0)) == PLUS && GET_CODE (XEXP (XEXP (a, 0), 1)) == CONST_INT)) --- 3651,3661 ---- } /* Return 1 if memory locations are adjacent. */ + int adjacent_mem_locations (a, b) rtx a, b; { if ((GET_CODE (XEXP (a, 0)) == REG || (GET_CODE (XEXP (a, 0)) == PLUS && GET_CODE (XEXP (XEXP (a, 0), 1)) == CONST_INT)) *************** adjacent_mem_locations (a, b) *** 3498,3517 **** || (GET_CODE (XEXP (b, 0)) == PLUS && GET_CODE (XEXP (XEXP (b, 0), 1)) == CONST_INT))) { if (GET_CODE (XEXP (a, 0)) == PLUS) { ! reg0 = REGNO (XEXP (XEXP (a, 0), 0)); val0 = INTVAL (XEXP (XEXP (a, 0), 1)); } else reg0 = REGNO (XEXP (a, 0)); if (GET_CODE (XEXP (b, 0)) == PLUS) { ! reg1 = REGNO (XEXP (XEXP (b, 0), 0)); val1 = INTVAL (XEXP (XEXP (b, 0), 1)); } else reg1 = REGNO (XEXP (b, 0)); return (reg0 == reg1) && ((val1 - val0) == 4 || (val0 - val1) == 4); } return 0; --- 3663,3687 ---- || (GET_CODE (XEXP (b, 0)) == PLUS && GET_CODE (XEXP (XEXP (b, 0), 1)) == CONST_INT))) { + int val0 = 0, val1 = 0; + int reg0, reg1; + if (GET_CODE (XEXP (a, 0)) == PLUS) { ! reg0 = REGNO (XEXP (XEXP (a, 0), 0)); val0 = INTVAL (XEXP (XEXP (a, 0), 1)); } else reg0 = REGNO (XEXP (a, 0)); + if (GET_CODE (XEXP (b, 0)) == PLUS) { ! reg1 = REGNO (XEXP (XEXP (b, 0), 0)); val1 = INTVAL (XEXP (XEXP (b, 0), 1)); } else reg1 = REGNO (XEXP (b, 0)); + return (reg0 == reg1) && ((val1 - val0) == 4 || (val0 - val1) == 4); } return 0; *************** adjacent_mem_locations (a, b) *** 3519,3524 **** --- 3689,3695 ---- /* Return 1 if OP is a load multiple operation. It is known to be parallel and the first section will be tested. */ + int load_multiple_operation (op, mode) rtx op; *************** load_multiple_operation (op, mode) *** 3581,3586 **** --- 3752,3758 ---- /* Return 1 if OP is a store multiple operation. It is known to be parallel and the first section will be tested. */ + int store_multiple_operation (op, mode) rtx op; *************** load_multiple_sequence (operands, nops, *** 3655,3662 **** int base_reg = -1; int i; ! /* Can only handle 2, 3, or 4 insns at present, though could be easily ! extended if required. */ if (nops < 2 || nops > 4) abort (); --- 3827,3834 ---- int base_reg = -1; int i; ! /* Can only handle 2, 3, or 4 insns at present, ! though could be easily extended if required. */ if (nops < 2 || nops > 4) abort (); *************** load_multiple_sequence (operands, nops, *** 3671,3677 **** /* Convert a subreg of a mem into the mem itself. */ if (GET_CODE (operands[nops + i]) == SUBREG) ! operands[nops + i] = alter_subreg (operands[nops + i]); if (GET_CODE (operands[nops + i]) != MEM) abort (); --- 3843,3849 ---- /* Convert a subreg of a mem into the mem itself. */ if (GET_CODE (operands[nops + i]) == SUBREG) ! operands[nops + i] = alter_subreg (operands + (nops + i)); if (GET_CODE (operands[nops + i]) != MEM) abort (); *************** store_multiple_sequence (operands, nops, *** 3906,3912 **** /* Convert a subreg of a mem into the mem itself. */ if (GET_CODE (operands[nops + i]) == SUBREG) ! operands[nops + i] = alter_subreg (operands[nops + i]); if (GET_CODE (operands[nops + i]) != MEM) abort (); --- 4078,4084 ---- /* Convert a subreg of a mem into the mem itself. */ if (GET_CODE (operands[nops + i]) == SUBREG) ! operands[nops + i] = alter_subreg (operands + (nops + i)); if (GET_CODE (operands[nops + i]) != MEM) abort (); *************** multi_register_push (op, mode) *** 4073,4124 **** return 1; } - /* Routines for use with attributes. */ - - /* Return nonzero if ATTR is a valid attribute for DECL. - ATTRIBUTES are any existing attributes and ARGS are - the arguments supplied with ATTR. - - Supported attributes: - - naked: - don't output any prologue or epilogue code, the user is assumed - to do the right thing. - - isr or interrupt: - Interrupt Service Routine. - - interfacearm: - Always assume that this function will be entered in ARM mode, - not Thumb mode, and that the caller wishes to be returned to in - ARM mode. */ - int - arm_valid_machine_decl_attribute (decl, attr, args) - tree decl; - tree attr; - tree args; - { - /* The interrupt attribute can take args, so check for it before - rejecting other attributes on the grounds that they did have args. */ - if (is_attribute_p ("isr", attr) - || is_attribute_p ("interrupt", attr)) - return TREE_CODE (decl) == FUNCTION_DECL; - - if (args != NULL_TREE) - return 0; - - if (is_attribute_p ("naked", attr)) - return TREE_CODE (decl) == FUNCTION_DECL; - - #ifdef ARM_PE - if (is_attribute_p ("interfacearm", attr)) - return TREE_CODE (decl) == FUNCTION_DECL; - #endif /* ARM_PE */ - - return 0; - } - /* Routines for use in generating RTL. */ rtx arm_gen_load_multiple (base_regno, count, from, up, write_back, unchanging_p, in_struct_p, scalar_p) --- 4245,4252 ---- return 1; } /* Routines for use in generating RTL. */ + rtx arm_gen_load_multiple (base_regno, count, from, up, write_back, unchanging_p, in_struct_p, scalar_p) *************** arm_gen_movstrqi (operands) *** 4463,4468 **** --- 4591,4597 ---- /* Generate a memory reference for a half word, such that it will be loaded into the top 16 bits of the word. We can assume that the address is known to be alignable and of the form reg, or plus (reg, const). */ + rtx arm_gen_rotated_half_load (memref) rtx memref; *************** arm_reload_in_hi (operands) *** 4748,4758 **** if (GET_CODE (ref) == SUBREG) { ! offset = SUBREG_WORD (ref) * UNITS_PER_WORD; ! if (BYTES_BIG_ENDIAN) ! offset -= (MIN (UNITS_PER_WORD, GET_MODE_SIZE (GET_MODE (ref))) ! - MIN (UNITS_PER_WORD, ! GET_MODE_SIZE (GET_MODE (SUBREG_REG (ref))))); ref = SUBREG_REG (ref); } --- 4877,4883 ---- if (GET_CODE (ref) == SUBREG) { ! offset = SUBREG_BYTE (ref); ref = SUBREG_REG (ref); } *************** arm_reload_in_hi (operands) *** 4803,4811 **** if (lo == 4095) lo &= 0x7ff; ! hi = ((((offset - lo) & HOST_INT (0xffffffff)) ! ^ HOST_INT (0x80000000)) ! - HOST_INT (0x80000000)); if (hi + lo != offset) abort (); --- 4928,4936 ---- if (lo == 4095) lo &= 0x7ff; ! hi = ((((offset - lo) & (HOST_WIDE_INT) 0xffffffff) ! ^ (HOST_WIDE_INT) 0x80000000) ! - (HOST_WIDE_INT) 0x80000000); if (hi + lo != offset) abort (); *************** arm_reload_in_hi (operands) *** 4822,4834 **** } } ! /* If the scratch overlaps the output, use the top half of the DImode ! register we allocated. */ ! if (REGNO (operands[2]) == REGNO (operands[0])) ! scratch = gen_rtx_REG (SImode, REGNO (operands[2]) + 1); ! else ! scratch = gen_rtx_REG (SImode, REGNO (operands[2])); ! emit_insn (gen_zero_extendqisi2 (scratch, gen_rtx_MEM (QImode, plus_constant (base, --- 4947,4953 ---- } } ! scratch = gen_rtx_REG (SImode, REGNO (operands[2])); emit_insn (gen_zero_extendqisi2 (scratch, gen_rtx_MEM (QImode, plus_constant (base, *************** arm_reload_in_hi (operands) *** 4860,4865 **** --- 4979,4985 ---- scratch in operands[2] overlaps either the input value or output address in some way, then that value must die in this insn (we absolutely need two scratch registers for some corner cases). */ + void arm_reload_out_hi (operands) rtx * operands; *************** arm_reload_out_hi (operands) *** 4871,4885 **** if (GET_CODE (ref) == SUBREG) { ! offset = SUBREG_WORD (ref) * UNITS_PER_WORD; ! if (BYTES_BIG_ENDIAN) ! offset -= (MIN (UNITS_PER_WORD, GET_MODE_SIZE (GET_MODE (ref))) ! - MIN (UNITS_PER_WORD, ! GET_MODE_SIZE (GET_MODE (SUBREG_REG (ref))))); ref = SUBREG_REG (ref); } - if (GET_CODE (ref) == REG) { /* We have a pseudo which has been spilt onto the stack; there --- 4991,5000 ---- if (GET_CODE (ref) == SUBREG) { ! offset = SUBREG_BYTE (ref); ref = SUBREG_REG (ref); } if (GET_CODE (ref) == REG) { /* We have a pseudo which has been spilt onto the stack; there *************** arm_reload_out_hi (operands) *** 4955,4963 **** if (lo == 4095) lo &= 0x7ff; ! hi = ((((offset - lo) & HOST_INT (0xffffffff)) ! ^ HOST_INT (0x80000000)) ! - HOST_INT (0x80000000)); if (hi + lo != offset) abort (); --- 5070,5078 ---- if (lo == 4095) lo &= 0x7ff; ! hi = ((((offset - lo) & (HOST_WIDE_INT) 0xffffffff) ! ^ (HOST_WIDE_INT) 0x80000000) ! - (HOST_WIDE_INT) 0x80000000); if (hi + lo != offset) abort (); *************** arm_reload_out_hi (operands) *** 5025,5030 **** --- 5140,5146 ---- } /* Print a symbolic form of X to the debug file, F. */ + static void arm_print_value (f, x) FILE * f; *************** struct minipool_node *** 5148,5154 **** pushing fixes for forward references, all entries are sorted in order of increasing max_address. */ HOST_WIDE_INT max_address; ! /* Similarly for a entry inserted for a backwards ref. */ HOST_WIDE_INT min_address; /* The number of fixes referencing this entry. This can become zero if we "unpush" an entry. In this case we ignore the entry when we --- 5264,5270 ---- pushing fixes for forward references, all entries are sorted in order of increasing max_address. */ HOST_WIDE_INT max_address; ! /* Similarly for an entry inserted for a backwards ref. */ HOST_WIDE_INT min_address; /* The number of fixes referencing this entry. This can become zero if we "unpush" an entry. In this case we ignore the entry when we *************** Mfix * minipool_barrier; *** 5193,5198 **** --- 5309,5315 ---- /* Determines if INSN is the start of a jump table. Returns the end of the TABLE or NULL_RTX. */ + static rtx is_jump_table (insn) rtx insn; *************** is_jump_table (insn) *** 5212,5230 **** return NULL_RTX; } static HOST_WIDE_INT get_jump_table_size (insn) rtx insn; { ! rtx body = PATTERN (insn); ! int elt = GET_CODE (body) == ADDR_DIFF_VEC ? 1 : 0; ! return GET_MODE_SIZE (GET_MODE (body)) * XVECLEN (body, elt); } /* Move a minipool fix MP from its current location to before MAX_MP. If MAX_MP is NULL, then MP doesn't need moving, but the addressing contrains may need updating. */ static Mnode * move_minipool_fix_forward_ref (mp, max_mp, max_address) Mnode * mp; --- 5329,5363 ---- return NULL_RTX; } + #ifndef JUMP_TABLES_IN_TEXT_SECTION + #define JUMP_TABLES_IN_TEXT_SECTION 0 + #endif + static HOST_WIDE_INT get_jump_table_size (insn) rtx insn; { ! /* ADDR_VECs only take room if read-only data does into the text ! section. */ ! if (JUMP_TABLES_IN_TEXT_SECTION ! #if !defined(READONLY_DATA_SECTION) ! || 1 ! #endif ! ) ! { ! rtx body = PATTERN (insn); ! int elt = GET_CODE (body) == ADDR_DIFF_VEC ? 1 : 0; ! return GET_MODE_SIZE (GET_MODE (body)) * XVECLEN (body, elt); ! } ! ! return 0; } /* Move a minipool fix MP from its current location to before MAX_MP. If MAX_MP is NULL, then MP doesn't need moving, but the addressing contrains may need updating. */ + static Mnode * move_minipool_fix_forward_ref (mp, max_mp, max_address) Mnode * mp; *************** move_minipool_fix_forward_ref (mp, max_m *** 5270,5276 **** /* Save the new entry. */ max_mp = mp; ! /* Scan over the preceeding entries and adjust their addresses as required. */ while (mp->prev != NULL && mp->prev->max_address > mp->max_address - mp->prev->fix_size) --- 5403,5409 ---- /* Save the new entry. */ max_mp = mp; ! /* Scan over the preceding entries and adjust their addresses as required. */ while (mp->prev != NULL && mp->prev->max_address > mp->max_address - mp->prev->fix_size) *************** move_minipool_fix_forward_ref (mp, max_m *** 5284,5289 **** --- 5417,5423 ---- /* Add a constant to the minipool for a forward reference. Returns the node added or NULL if the constant will not fit in this pool. */ + static Mnode * add_minipool_forward_ref (fix) Mfix * fix; *************** add_minipool_forward_ref (fix) *** 5376,5382 **** /* Save the new entry. */ max_mp = mp; ! /* Scan over the preceeding entries and adjust their addresses as required. */ while (mp->prev != NULL && mp->prev->max_address > mp->max_address - mp->prev->fix_size) --- 5510,5516 ---- /* Save the new entry. */ max_mp = mp; ! /* Scan over the preceding entries and adjust their addresses as required. */ while (mp->prev != NULL && mp->prev->max_address > mp->max_address - mp->prev->fix_size) *************** move_minipool_fix_backward_ref (mp, min_ *** 5452,5457 **** --- 5586,5592 ---- somewhat confusing because the calculated offsets for each fix do not take into account the size of the pool (which is still under construction. */ + static Mnode * add_minipool_backward_ref (fix) Mfix * fix; *************** add_minipool_backward_ref (fix) *** 5460,5470 **** than the one we are trying to add. */ Mnode * min_mp = NULL; /* This can be negative, since it is only a constraint. */ ! /* If the object to be inserted into the pool is larger than ! a single word, we need to take into account that all words ! must be reachable. */ ! HOST_WIDE_INT min_address = fix->address - fix->backwards ! + (fix->fix_size - 4); Mnode * mp; /* If we can't reach the current pool from this insn, or if we can't --- 5595,5601 ---- than the one we are trying to add. */ Mnode * min_mp = NULL; /* This can be negative, since it is only a constraint. */ ! HOST_WIDE_INT min_address = fix->address - fix->backwards; Mnode * mp; /* If we can't reach the current pool from this insn, or if we can't *************** dump_minipool (scan) *** 5672,5677 **** --- 5803,5809 ---- } /* Return the cost of forcibly inserting a barrier after INSN. */ + static int arm_barrier_cost (insn) rtx insn; *************** arm_barrier_cost (insn) *** 5708,5713 **** --- 5840,5846 ---- (FIX->address,MAX_ADDRESS) to forcibly insert a minipool barrier. Create the barrier by inserting a jump and add a new fix entry for it. */ + static Mfix * create_fix_barrier (fix, max_address) Mfix * fix; *************** push_minipool_fix (insn, address, loc, m *** 5873,5878 **** --- 6006,6012 ---- } /* Scan INSN and note any of its operands that need fixing. */ + static void note_invalid_constants (insn, address) rtx insn; *************** arm_reorg (first) *** 6086,6091 **** --- 6220,6226 ---- /* If the rtx is the correct value then return the string of the number. In this way we can ensure that valid double constants are generated even when cross compiling. */ + const char * fp_immediate_constant (x) rtx x; *************** fp_immediate_constant (x) *** 6105,6110 **** --- 6240,6246 ---- } /* As for fp_immediate_constant, but value is passed directly, not in rtx. */ + static const char * fp_const_from_val (r) REAL_VALUE_TYPE * r; *************** eliminate_lr2ip (x) *** 6184,6191 **** int something_changed = 0; rtx x0 = * x; int code = GET_CODE (x0); ! register int i, j; ! register const char * fmt; switch (code) { --- 6320,6327 ---- int something_changed = 0; rtx x0 = * x; int code = GET_CODE (x0); ! int i, j; ! const char * fmt; switch (code) { *************** output_mov_long_double_arm_from_fpu (ope *** 6288,6293 **** --- 6424,6430 ---- /* Output a move from arm registers to arm registers of a long double OPERANDS[0] is the destination. OPERANDS[1] is the source. */ + const char * output_mov_long_double_arm_from_arm (operands) rtx * operands; *************** output_move_double (operands) *** 6409,6421 **** abort (); else if (WORDS_BIG_ENDIAN) { - otherops[1] = GEN_INT (CONST_DOUBLE_LOW (operands[1])); operands[1] = GEN_INT (CONST_DOUBLE_HIGH (operands[1])); } else { - otherops[1] = GEN_INT (CONST_DOUBLE_HIGH (operands[1])); operands[1] = GEN_INT (CONST_DOUBLE_LOW (operands[1])); } --- 6546,6556 ---- *************** output_move_double (operands) *** 6489,6494 **** --- 6624,6630 ---- otherops[0] = operands[0]; otherops[1] = XEXP (XEXP (operands[1], 0), 0); otherops[2] = XEXP (XEXP (operands[1], 0), 1); + if (GET_CODE (XEXP (operands[1], 0)) == PLUS) { if (GET_CODE (otherops[2]) == CONST_INT) *************** output_move_double (operands) *** 6505,6510 **** --- 6641,6647 ---- output_asm_insn ("ldm%?ib\t%1, %M0", otherops); return ""; } + if (!(const_ok_for_arm (INTVAL (otherops[2])))) output_asm_insn ("sub%?\t%0, %1, #%n2", otherops); else *************** output_move_double (operands) *** 6520,6526 **** } else { ! otherops[1] = adj_offsettable_operand (operands[1], 4); /* Take care of overlapping base/data reg. */ if (reg_mentioned_p (operands[0], operands[1])) { --- 6657,6663 ---- } else { ! otherops[1] = adjust_address (operands[1], VOIDmode, 4); /* Take care of overlapping base/data reg. */ if (reg_mentioned_p (operands[0], operands[1])) { *************** output_move_double (operands) *** 6586,6599 **** /* Fall through */ default: ! otherops[0] = adj_offsettable_operand (operands[0], 4); otherops[1] = gen_rtx_REG (SImode, 1 + REGNO (operands[1])); output_asm_insn ("str%?\t%1, %0", operands); output_asm_insn ("str%?\t%1, %0", otherops); } } else ! abort (); /* Constraints should prevent this */ return ""; } --- 6723,6737 ---- /* Fall through */ default: ! otherops[0] = adjust_address (operands[0], VOIDmode, 4); otherops[1] = gen_rtx_REG (SImode, 1 + REGNO (operands[1])); output_asm_insn ("str%?\t%1, %0", operands); output_asm_insn ("str%?\t%1, %0", otherops); } } else ! /* Constraints should prevent this. */ ! abort (); return ""; } *************** output_mov_immediate (operands) *** 6607,6647 **** rtx * operands; { HOST_WIDE_INT n = INTVAL (operands[1]); - int n_ones = 0; - int i; ! /* Try to use one MOV */ if (const_ok_for_arm (n)) ! { ! output_asm_insn ("mov%?\t%0, %1", operands); ! return ""; ! } ! /* Try to use one MVN */ ! if (const_ok_for_arm (~n)) { operands[1] = GEN_INT (~n); output_asm_insn ("mvn%?\t%0, %1", operands); - return ""; } ! /* If all else fails, make it out of ORRs or BICs as appropriate. */ ! ! for (i=0; i < 32; i++) ! if (n & 1 << i) ! n_ones++; ! if (n_ones > 16) /* Shorter to use MVN with BIC in this case. */ ! output_multi_immediate (operands, "mvn%?\t%0, %1", "bic%?\t%0, %0, %1", 1, ~n); ! else ! output_multi_immediate (operands, "mov%?\t%0, %1", "orr%?\t%0, %0, %1", 1, n); return ""; } ! ! /* Output an ADD r, s, #n where n may be too big for one instruction. If ! adding zero to one register, output nothing. */ const char * output_add_immediate (operands) --- 6745,6782 ---- rtx * operands; { HOST_WIDE_INT n = INTVAL (operands[1]); ! /* Try to use one MOV. */ if (const_ok_for_arm (n)) ! output_asm_insn ("mov%?\t%0, %1", operands); ! /* Try to use one MVN. */ ! else if (const_ok_for_arm (~n)) { operands[1] = GEN_INT (~n); output_asm_insn ("mvn%?\t%0, %1", operands); } + else + { + int n_ones = 0; + int i; ! /* If all else fails, make it out of ORRs or BICs as appropriate. */ ! for (i = 0; i < 32; i ++) ! if (n & 1 << i) ! n_ones ++; ! if (n_ones > 16) /* Shorter to use MVN with BIC in this case. */ ! output_multi_immediate (operands, "mvn%?\t%0, %1", "bic%?\t%0, %0, %1", 1, ~ n); ! else ! output_multi_immediate (operands, "mov%?\t%0, %1", "orr%?\t%0, %0, %1", 1, n); ! } return ""; } ! /* Output an ADD r, s, #n where n may be too big for one instruction. ! If adding zero to one register, output nothing. */ const char * output_add_immediate (operands) *************** output_multi_immediate (operands, instr1 *** 6680,6692 **** HOST_WIDE_INT n; { #if HOST_BITS_PER_WIDE_INT > 32 ! n &= HOST_UINT (0xffffffff); #endif if (n == 0) { operands[immed_op] = const0_rtx; ! output_asm_insn (instr1, operands); /* Quick and easy output. */ } else { --- 6815,6828 ---- HOST_WIDE_INT n; { #if HOST_BITS_PER_WIDE_INT > 32 ! n &= 0xffffffff; #endif if (n == 0) { + /* Quick and easy output. */ operands[immed_op] = const0_rtx; ! output_asm_insn (instr1, operands); } else { *************** output_multi_immediate (operands, instr1 *** 6709,6715 **** return ""; } - /* Return the appropriate ARM instruction for the operation code. The returned result should not be overwritten. OP is the rtx of the operation. SHIFT_FIRST_ARG is TRUE if the first argument of the operator --- 6845,6850 ---- *************** arithmetic_instr (op, shift_first_arg) *** 6742,6748 **** } } - /* Ensure valid constant shifts and return the appropriate shift mnemonic for the operation code. The returned result should not be overwritten. OP is the rtx code of the shift. --- 6877,6882 ---- *************** shift_op (op, amountp) *** 6805,6811 **** is not set correctly if we set the flags; but we never use the carry bit from such an operation, so we can ignore that. */ if (code == ROTATERT) ! *amountp &= 31; /* Rotate is just modulo 32 */ else if (*amountp != (*amountp & 31)) { if (code == ASHIFT) --- 6939,6946 ---- is not set correctly if we set the flags; but we never use the carry bit from such an operation, so we can ignore that. */ if (code == ROTATERT) ! /* Rotate is just modulo 32. */ ! *amountp &= 31; else if (*amountp != (*amountp & 31)) { if (code == ASHIFT) *************** shift_op (op, amountp) *** 6821,6839 **** return mnem; } - /* Obtain the shift from the POWER of two. */ static HOST_WIDE_INT int_log2 (power) HOST_WIDE_INT power; { HOST_WIDE_INT shift = 0; ! while ((((HOST_INT (1)) << shift) & power) == 0) { if (shift > 31) abort (); ! shift++; } return shift; --- 6956,6974 ---- return mnem; } /* Obtain the shift from the POWER of two. */ + static HOST_WIDE_INT int_log2 (power) HOST_WIDE_INT power; { HOST_WIDE_INT shift = 0; ! while ((((HOST_WIDE_INT) 1 << shift) & power) == 0) { if (shift > 31) abort (); ! shift ++; } return shift; *************** output_ascii_pseudo_op (stream, p, len) *** 6856,6862 **** for (i = 0; i < len; i++) { ! register int c = p[i]; if (len_so_far >= MAX_ASCII_LEN) { --- 6991,6997 ---- for (i = 0; i < len; i++) { ! int c = p[i]; if (len_so_far >= MAX_ASCII_LEN) { *************** output_ascii_pseudo_op (stream, p, len) *** 6921,6960 **** fputs ("\"\n", stream); } ! /* Compute a bit mask of which registers need to be ! saved on the stack for the current function. */ static unsigned long ! arm_compute_save_reg_mask () { unsigned int save_reg_mask = 0; unsigned int reg; - unsigned long func_type = arm_current_func_type (); ! if (IS_NAKED (func_type)) ! /* This should never really happen. */ ! return 0; ! ! /* If we are creating a stack frame, then we must save the frame pointer, ! IP (which will hold the old stack pointer), LR and the PC. */ ! if (frame_pointer_needed) ! save_reg_mask |= ! (1 << ARM_HARD_FRAME_POINTER_REGNUM) ! | (1 << IP_REGNUM) ! | (1 << LR_REGNUM) ! | (1 << PC_REGNUM); ! ! /* Volatile functions do not return, so there ! is no need to save any other registers. */ ! if (IS_VOLATILE (func_type)) ! return save_reg_mask; ! ! if (ARM_FUNC_TYPE (func_type) == ARM_FT_ISR) { ! /* FIQ handlers have registers r8 - r12 banked, so ! we only need to check r0 - r7, they must save them. */ ! for (reg = 0; reg < 8; reg++) ! if (regs_ever_live[reg]) save_reg_mask |= (1 << reg); } else --- 7056,7094 ---- fputs ("\"\n", stream); } ! /* Compute the register sabe mask for registers 0 through 12 ! inclusive. This code is used by both arm_compute_save_reg_mask ! and arm_compute_initial_elimination_offset. */ static unsigned long ! arm_compute_save_reg0_reg12_mask () { + unsigned long func_type = arm_current_func_type (); unsigned int save_reg_mask = 0; unsigned int reg; ! if (IS_INTERRUPT (func_type)) { ! unsigned int max_reg; ! /* Interrupt functions must not corrupt any registers, ! even call clobbered ones. If this is a leaf function ! we can just examine the registers used by the RTL, but ! otherwise we have to assume that whatever function is ! called might clobber anything, and so we have to save ! all the call-clobbered registers as well. */ ! if (ARM_FUNC_TYPE (func_type) == ARM_FT_FIQ) ! /* FIQ handlers have registers r8 - r12 banked, so ! we only need to check r0 - r7, Normal ISRs only ! bank r14 and r15, so we must check up to r12. ! r13 is the stack pointer which is always preserved, ! so we do not need to consider it here. */ ! max_reg = 7; ! else ! max_reg = 12; ! ! for (reg = 0; reg <= max_reg; reg++) ! if (regs_ever_live[reg] ! || (! current_function_is_leaf && call_used_regs [reg])) save_reg_mask |= (1 << reg); } else *************** arm_compute_save_reg_mask () *** 6980,6999 **** save_reg_mask |= 1 << PIC_OFFSET_TABLE_REGNUM; } /* Decide if we need to save the link register. Interrupt routines have their own banked link register, so they never need to save it. ! Otheriwse if we do not use the link register we do not need to save it. If we are pushing other registers onto the stack however, we can save an instruction in the epilogue by pushing the link register now and then popping it back into the PC. This incurs extra memory accesses though, so we only do it when optimising for size, and only if we know that we will not need a fancy return sequence. */ ! if (! IS_INTERRUPT (func_type) ! && (regs_ever_live [LR_REGNUM] || (save_reg_mask && optimize_size ! && ARM_FUNC_TYPE (func_type) == ARM_FT_NORMAL))) save_reg_mask |= 1 << LR_REGNUM; if (cfun->machine->lr_save_eliminated) --- 7114,7164 ---- save_reg_mask |= 1 << PIC_OFFSET_TABLE_REGNUM; } + return save_reg_mask; + } + + /* Compute a bit mask of which registers need to be + saved on the stack for the current function. */ + + static unsigned long + arm_compute_save_reg_mask () + { + unsigned int save_reg_mask = 0; + unsigned long func_type = arm_current_func_type (); + + if (IS_NAKED (func_type)) + /* This should never really happen. */ + return 0; + + /* If we are creating a stack frame, then we must save the frame pointer, + IP (which will hold the old stack pointer), LR and the PC. */ + if (frame_pointer_needed) + save_reg_mask |= + (1 << ARM_HARD_FRAME_POINTER_REGNUM) + | (1 << IP_REGNUM) + | (1 << LR_REGNUM) + | (1 << PC_REGNUM); + + /* Volatile functions do not return, so there + is no need to save any other registers. */ + if (IS_VOLATILE (func_type)) + return save_reg_mask; + + save_reg_mask |= arm_compute_save_reg0_reg12_mask (); + /* Decide if we need to save the link register. Interrupt routines have their own banked link register, so they never need to save it. ! Otherwise if we do not use the link register we do not need to save it. If we are pushing other registers onto the stack however, we can save an instruction in the epilogue by pushing the link register now and then popping it back into the PC. This incurs extra memory accesses though, so we only do it when optimising for size, and only if we know that we will not need a fancy return sequence. */ ! if (regs_ever_live [LR_REGNUM] || (save_reg_mask && optimize_size ! && ARM_FUNC_TYPE (func_type) == ARM_FT_NORMAL)) save_reg_mask |= 1 << LR_REGNUM; if (cfun->machine->lr_save_eliminated) *************** output_return_instruction (operand, real *** 7051,7071 **** live_regs_mask = arm_compute_save_reg_mask (); ! /* On some ARM architectures it is faster to use LDR rather than LDM to ! load a single register. On other architectures, the cost is the same. ! In 26 bit mode we have to use LDM in order to be able to restore the CPSR. */ ! if ((live_regs_mask == (1 << LR_REGNUM)) ! && ! TARGET_INTERWORK ! && ! IS_INTERRUPT (func_type) ! && (! really_return || TARGET_APCS_32)) { ! if (! really_return) ! sprintf (instr, "ldr%s\t%%|lr, [%%|sp], #4", conditional); else ! sprintf (instr, "ldr%s\t%%|pc, [%%|sp], #4", conditional); ! } ! else if (live_regs_mask) ! { if ((live_regs_mask & (1 << IP_REGNUM)) == (1 << IP_REGNUM)) /* There are two possible reasons for the IP register being saved. Either a stack frame was created, in which case IP contains the --- 7216,7234 ---- live_regs_mask = arm_compute_save_reg_mask (); ! if (live_regs_mask) { ! const char * return_reg; ! ! /* If we do not have any special requirements for function exit ! (eg interworking, or ISR) then we can load the return address ! directly into the PC. Otherwise we must load it into LR. */ ! if (really_return ! && ! TARGET_INTERWORK) ! return_reg = reg_names[PC_REGNUM]; else ! return_reg = reg_names[LR_REGNUM]; ! if ((live_regs_mask & (1 << IP_REGNUM)) == (1 << IP_REGNUM)) /* There are two possible reasons for the IP register being saved. Either a stack frame was created, in which case IP contains the *************** output_return_instruction (operand, real *** 7077,7172 **** live_regs_mask |= (1 << SP_REGNUM); } ! /* Generate the load multiple instruction to restore the registers. */ ! if (frame_pointer_needed) ! sprintf (instr, "ldm%sea\t%%|fp, {", conditional); ! else ! sprintf (instr, "ldm%sfd\t%%|sp!, {", conditional); ! ! for (reg = 0; reg <= SP_REGNUM; reg++) ! if (live_regs_mask & (1 << reg)) ! { ! strcat (instr, "%|"); ! strcat (instr, reg_names[reg]); ! strcat (instr, ", "); ! } ! ! if ((live_regs_mask & (1 << LR_REGNUM)) == 0) { ! /* If we are not restoring the LR register then we will ! have added one too many commas to the list above. ! Replace it with a closing brace. */ ! instr [strlen (instr) - 2] = '}'; } ! else { ! strcat (instr, "%|"); ! ! /* At this point there should only be one or two registers left in ! live_regs_mask: always LR, and possibly PC if we created a stack ! frame. LR contains the return address. If we do not have any ! special requirements for function exit (eg interworking, or ISR) ! then we can load this value directly into the PC and save an ! instruction. */ ! if (! TARGET_INTERWORK ! && ! IS_INTERRUPT (func_type) ! && really_return) ! strcat (instr, reg_names [PC_REGNUM]); ! else ! strcat (instr, reg_names [LR_REGNUM]); ! ! strcat (instr, (TARGET_APCS_32 || !really_return) ? "}" : "}^"); } ! ! if (really_return) { ! /* See if we need to generate an extra instruction to ! perform the actual function return. */ ! switch ((int) ARM_FUNC_TYPE (func_type)) ! { ! case ARM_FT_ISR: ! case ARM_FT_FIQ: ! output_asm_insn (instr, & operand); ! strcpy (instr, "sub"); ! strcat (instr, conditional); ! strcat (instr, "s\t%|pc, %|lr, #4"); ! break; ! case ARM_FT_EXCEPTION: ! output_asm_insn (instr, & operand); ! strcpy (instr, "mov"); ! strcat (instr, conditional); ! strcat (instr, "s\t%|pc, %|lr"); ! break; ! case ARM_FT_INTERWORKED: ! output_asm_insn (instr, & operand); ! strcpy (instr, "bx"); ! strcat (instr, conditional); ! strcat (instr, "\t%|lr"); ! break; ! default: ! /* The return has already been handled ! by loading the LR into the PC. */ ! if ((live_regs_mask & (1 << LR_REGNUM)) == 0) { ! output_asm_insn (instr, & operand); ! ! strcpy (instr, "mov"); ! strcat (instr, conditional); ! if (! TARGET_APCS_32) ! strcat (instr, "s"); ! strcat (instr, "\t%|pc, %|lr"); } ! break; } } } ! else if (really_return) { switch ((int) ARM_FUNC_TYPE (func_type)) { --- 7240,7330 ---- live_regs_mask |= (1 << SP_REGNUM); } ! /* On some ARM architectures it is faster to use LDR rather than ! LDM to load a single register. On other architectures, the ! cost is the same. In 26 bit mode, or for exception handlers, ! we have to use LDM to load the PC so that the CPSR is also ! restored. */ ! for (reg = 0; reg <= LAST_ARM_REGNUM; reg++) { ! if (live_regs_mask == (unsigned int)(1 << reg)) ! break; } ! if (reg <= LAST_ARM_REGNUM ! && (reg != LR_REGNUM ! || ! really_return ! || (TARGET_APCS_32 && ! IS_INTERRUPT (func_type)))) { ! sprintf (instr, "ldr%s\t%%|%s, [%%|sp], #4", conditional, ! (reg == LR_REGNUM) ? return_reg : reg_names[reg]); } ! else { ! char *p; ! int first = 1; ! /* Generate the load multiple instruction to restore the registers. */ ! if (frame_pointer_needed) ! sprintf (instr, "ldm%sea\t%%|fp, {", conditional); ! else ! sprintf (instr, "ldm%sfd\t%%|sp!, {", conditional); ! p = instr + strlen (instr); ! for (reg = 0; reg <= SP_REGNUM; reg++) ! if (live_regs_mask & (1 << reg)) ! { ! int l = strlen (reg_names[reg]); ! if (first) ! first = 0; ! else ! { ! memcpy (p, ", ", 2); ! p += 2; ! } ! memcpy (p, "%|", 2); ! memcpy (p + 2, reg_names[reg], l); ! p += l + 2; ! } ! ! if (live_regs_mask & (1 << LR_REGNUM)) ! { ! int l = strlen (return_reg); ! if (! first) { ! memcpy (p, ", ", 2); ! p += 2; } ! ! memcpy (p, "%|", 2); ! memcpy (p + 2, return_reg, l); ! strcpy (p + 2 + l, ((TARGET_APCS_32 ! && !IS_INTERRUPT (func_type)) ! || !really_return) ! ? "}" : "}^"); } + else + strcpy (p, "}"); + } + + output_asm_insn (instr, & operand); + + /* See if we need to generate an extra instruction to + perform the actual function return. */ + if (really_return + && func_type != ARM_FT_INTERWORKED + && (live_regs_mask & (1 << LR_REGNUM)) != 0) + { + /* The return has already been handled + by loading the LR into the PC. */ + really_return = 0; } } ! ! if (really_return) { switch ((int) ARM_FUNC_TYPE (func_type)) { *************** output_return_instruction (operand, real *** 7184,7201 **** break; default: ! sprintf (instr, "mov%s%s\t%%|pc, %%|lr", ! conditional, TARGET_APCS_32 ? "" : "s"); break; } } - else - /* Nothing to load off the stack, and - no return instruction to generate. */ - return ""; - output_asm_insn (instr, & operand); - return ""; } --- 7342,7360 ---- break; default: ! /* ARMv5 implementations always provide BX, so interworking ! is the default unless APCS-26 is in use. */ ! if ((insn_flags & FL_ARCH5) != 0 && TARGET_APCS_32) ! sprintf (instr, "bx%s\t%%|lr", conditional); ! else ! sprintf (instr, "mov%s%s\t%%|pc, %%|lr", ! conditional, TARGET_APCS_32 ? "" : "s"); break; } + + output_asm_insn (instr, & operand); } return ""; } *************** output_return_instruction (operand, real *** 7229,7235 **** void arm_poke_function_name (stream, name) FILE * stream; ! char * name; { unsigned long alignlength; unsigned long length; --- 7388,7394 ---- void arm_poke_function_name (stream, name) FILE * stream; ! const char * name; { unsigned long alignlength; unsigned long length; *************** arm_poke_function_name (stream, name) *** 7240,7258 **** ASM_OUTPUT_ASCII (stream, name, length); ASM_OUTPUT_ALIGN (stream, 2); ! x = GEN_INT (HOST_UINT(0xff000000) + alignlength); ! ASM_OUTPUT_INT (stream, x); } /* Place some comments into the assembler stream describing the current function. */ ! void ! output_arm_prologue (f, frame_size) FILE * f; ! int frame_size; { unsigned long func_type; /* Sanity check. */ if (arm_ccfsm_state || arm_target_insn) --- 7399,7423 ---- ASM_OUTPUT_ASCII (stream, name, length); ASM_OUTPUT_ALIGN (stream, 2); ! x = GEN_INT ((unsigned HOST_WIDE_INT) 0xff000000 + alignlength); ! assemble_aligned_integer (UNITS_PER_WORD, x); } /* Place some comments into the assembler stream describing the current function. */ ! static void ! arm_output_function_prologue (f, frame_size) FILE * f; ! HOST_WIDE_INT frame_size; { unsigned long func_type; + + if (!TARGET_ARM) + { + thumb_output_function_prologue (f, frame_size); + return; + } /* Sanity check. */ if (arm_ccfsm_state || arm_target_insn) *************** output_arm_prologue (f, frame_size) *** 7295,7303 **** current_function_args_size, current_function_pretend_args_size, frame_size); ! asm_fprintf (f, "\t%@ frame_needed = %d, current_function_anonymous_args = %d\n", frame_pointer_needed, ! current_function_anonymous_args); if (cfun->machine->lr_save_eliminated) asm_fprintf (f, "\t%@ link register save eliminated.\n"); --- 7460,7468 ---- current_function_args_size, current_function_pretend_args_size, frame_size); ! asm_fprintf (f, "\t%@ frame_needed = %d, uses_anonymous_args = %d\n", frame_pointer_needed, ! cfun->machine->uses_anonymous_args); if (cfun->machine->lr_save_eliminated) asm_fprintf (f, "\t%@ link register save eliminated.\n"); *************** arm_output_epilogue (really_return) *** 7317,7324 **** int reg; unsigned long saved_regs_mask; unsigned long func_type; ! /* If we need this, then it will always be at least this much. */ ! int floats_offset = 12; rtx operands[3]; int frame_size = get_frame_size (); FILE * f = asm_out_file; --- 7482,7490 ---- int reg; unsigned long saved_regs_mask; unsigned long func_type; ! /* Floats_offset is the offset from the "virtual" frame. In an APCS ! frame that is $fp + 4 for a non-variadic function. */ ! int floats_offset = 0; rtx operands[3]; int frame_size = get_frame_size (); FILE * f = asm_out_file; *************** arm_output_epilogue (really_return) *** 7355,7360 **** --- 7521,7529 ---- saved_regs_mask = arm_compute_save_reg_mask (); + /* XXX We should adjust floats_offset for any anonymous args, and then + re-adjust vfp_offset below to compensate. */ + /* Compute how far away the floats will be. */ for (reg = 0; reg <= LAST_ARM_REGNUM; reg ++) if (saved_regs_mask & (1 << reg)) *************** arm_output_epilogue (really_return) *** 7362,7367 **** --- 7531,7538 ---- if (frame_pointer_needed) { + int vfp_offset = 4; + if (arm_fpu_arch == FP_SOFT2) { for (reg = LAST_ARM_FP_REGNUM; reg >= FIRST_ARM_FP_REGNUM; reg--) *************** arm_output_epilogue (really_return) *** 7369,7375 **** { floats_offset += 12; asm_fprintf (f, "\tldfe\t%r, [%r, #-%d]\n", ! reg, FP_REGNUM, floats_offset); } } else --- 7540,7546 ---- { floats_offset += 12; asm_fprintf (f, "\tldfe\t%r, [%r, #-%d]\n", ! reg, FP_REGNUM, floats_offset - vfp_offset); } } else *************** arm_output_epilogue (really_return) *** 7386,7392 **** if (start_reg - reg == 3) { asm_fprintf (f, "\tlfm\t%r, 4, [%r, #-%d]\n", ! reg, FP_REGNUM, floats_offset); start_reg = reg - 1; } } --- 7557,7563 ---- if (start_reg - reg == 3) { asm_fprintf (f, "\tlfm\t%r, 4, [%r, #-%d]\n", ! reg, FP_REGNUM, floats_offset - vfp_offset); start_reg = reg - 1; } } *************** arm_output_epilogue (really_return) *** 7395,7401 **** if (reg != start_reg) asm_fprintf (f, "\tlfm\t%r, %d, [%r, #-%d]\n", reg + 1, start_reg - reg, ! FP_REGNUM, floats_offset); start_reg = reg - 1; } } --- 7566,7572 ---- if (reg != start_reg) asm_fprintf (f, "\tlfm\t%r, %d, [%r, #-%d]\n", reg + 1, start_reg - reg, ! FP_REGNUM, floats_offset - vfp_offset); start_reg = reg - 1; } } *************** arm_output_epilogue (really_return) *** 7404,7410 **** if (reg != start_reg) asm_fprintf (f, "\tlfm\t%r, %d, [%r, #-%d]\n", reg + 1, start_reg - reg, ! FP_REGNUM, floats_offset); } /* saved_regs_mask should contain the IP, which at the time of stack --- 7575,7581 ---- if (reg != start_reg) asm_fprintf (f, "\tlfm\t%r, %d, [%r, #-%d]\n", reg + 1, start_reg - reg, ! FP_REGNUM, floats_offset - vfp_offset); } /* saved_regs_mask should contain the IP, which at the time of stack *************** arm_output_epilogue (really_return) *** 7428,7433 **** --- 7599,7609 ---- saved_regs_mask &= ~ (1 << PC_REGNUM); print_multi_reg (f, "ldmea\t%r", FP_REGNUM, saved_regs_mask); + + if (IS_INTERRUPT (func_type)) + /* Interrupt handlers will have pushed the + IP onto the stack, so restore it now. */ + print_multi_reg (f, "ldmfd\t%r", SP_REGNUM, 1 << IP_REGNUM); } else { *************** arm_output_epilogue (really_return) *** 7493,7499 **** to load use the LDR instruction - it is faster. */ if (saved_regs_mask == (1 << LR_REGNUM)) { ! /* The excpetion handler ignores the LR, so we do not really need to load it off the stack. */ if (eh_ofs) asm_fprintf (f, "\tadd\t%r, %r, #4\n", SP_REGNUM, SP_REGNUM); --- 7669,7675 ---- to load use the LDR instruction - it is faster. */ if (saved_regs_mask == (1 << LR_REGNUM)) { ! /* The exception handler ignores the LR, so we do not really need to load it off the stack. */ if (eh_ofs) asm_fprintf (f, "\tadd\t%r, %r, #4\n", SP_REGNUM, SP_REGNUM); *************** arm_output_epilogue (really_return) *** 7519,7525 **** REGNO (eh_ofs)); #endif ! if (! really_return) return ""; /* Generate the return instruction. */ --- 7695,7704 ---- REGNO (eh_ofs)); #endif ! if (! really_return ! || (ARM_FUNC_TYPE (func_type) == ARM_FT_NORMAL ! && current_function_pretend_args_size == 0 ! && saved_regs_mask & (1 << PC_REGNUM))) return ""; /* Generate the return instruction. */ *************** arm_output_epilogue (really_return) *** 7566,7574 **** return ""; } ! void ! output_func_epilogue (frame_size) ! int frame_size; { if (TARGET_THUMB) { --- 7745,7754 ---- return ""; } ! static void ! arm_output_function_epilogue (file, frame_size) ! FILE *file ATTRIBUTE_UNUSED; ! HOST_WIDE_INT frame_size; { if (TARGET_THUMB) { *************** output_func_epilogue (frame_size) *** 7586,7592 **** abort (); /* Reset the ARM-specific per-function variables. */ - current_function_anonymous_args = 0; after_arm_reorg = 0; } } --- 7766,7771 ---- *************** emit_sfm (base_reg, count) *** 7775,7780 **** --- 7954,8129 ---- return par; } + /* Compute the distance from register FROM to register TO. + These can be the arg pointer (26), the soft frame pointer (25), + the stack pointer (13) or the hard frame pointer (11). + Typical stack layout looks like this: + + old stack pointer -> | | + ---- + | | \ + | | saved arguments for + | | vararg functions + | | / + -- + hard FP & arg pointer -> | | \ + | | stack + | | frame + | | / + -- + | | \ + | | call saved + | | registers + soft frame pointer -> | | / + -- + | | \ + | | local + | | variables + | | / + -- + | | \ + | | outgoing + | | arguments + current stack pointer -> | | / + -- + + For a given funciton some or all of these stack compomnents + may not be needed, giving rise to the possibility of + eliminating some of the registers. + + The values returned by this function must reflect the behaviour + of arm_expand_prologue() and arm_compute_save_reg_mask(). + + The sign of the number returned reflects the direction of stack + growth, so the values are positive for all eliminations except + from the soft frame pointer to the hard frame pointer. */ + + unsigned int + arm_compute_initial_elimination_offset (from, to) + unsigned int from; + unsigned int to; + { + unsigned int local_vars = (get_frame_size () + 3) & ~3; + unsigned int outgoing_args = current_function_outgoing_args_size; + unsigned int stack_frame; + unsigned int call_saved_registers; + unsigned long func_type; + + func_type = arm_current_func_type (); + + /* Volatile functions never return, so there is + no need to save call saved registers. */ + call_saved_registers = 0; + if (! IS_VOLATILE (func_type)) + { + unsigned int reg_mask; + unsigned int reg; + + /* Make sure that we compute which registers will be saved + on the stack using the same algorithm that is used by + arm_compute_save_reg_mask(). */ + reg_mask = arm_compute_save_reg0_reg12_mask (); + + /* Now count the number of bits set in save_reg_mask. + For each set bit we need 4 bytes of stack space. */ + while (reg_mask) + { + call_saved_registers += 4; + reg_mask = reg_mask & ~ (reg_mask & - reg_mask); + } + + if (regs_ever_live[LR_REGNUM] + /* If a stack frame is going to be created, the LR will + be saved as part of that, so we do not need to allow + for it here. */ + && ! frame_pointer_needed) + call_saved_registers += 4; + + /* If the hard floating point registers are going to be + used then they must be saved on the stack as well. + Each register occupies 12 bytes of stack space. */ + for (reg = FIRST_ARM_FP_REGNUM; reg <= LAST_ARM_FP_REGNUM; reg ++) + if (regs_ever_live[reg] && ! call_used_regs[reg]) + call_saved_registers += 12; + } + + /* The stack frame contains 4 registers - the old frame pointer, + the old stack pointer, the return address and PC of the start + of the function. */ + stack_frame = frame_pointer_needed ? 16 : 0; + + /* OK, now we have enough information to compute the distances. + There must be an entry in these switch tables for each pair + of registers in ELIMINABLE_REGS, even if some of the entries + seem to be redundant or useless. */ + switch (from) + { + case ARG_POINTER_REGNUM: + switch (to) + { + case THUMB_HARD_FRAME_POINTER_REGNUM: + return 0; + + case FRAME_POINTER_REGNUM: + /* This is the reverse of the soft frame pointer + to hard frame pointer elimination below. */ + if (call_saved_registers == 0 && stack_frame == 0) + return 0; + return (call_saved_registers + stack_frame - 4); + + case ARM_HARD_FRAME_POINTER_REGNUM: + /* If there is no stack frame then the hard + frame pointer and the arg pointer coincide. */ + if (stack_frame == 0 && call_saved_registers != 0) + return 0; + /* FIXME: Not sure about this. Maybe we should always return 0 ? */ + return (frame_pointer_needed + && current_function_needs_context + && ! cfun->machine->uses_anonymous_args) ? 4 : 0; + + case STACK_POINTER_REGNUM: + /* If nothing has been pushed on the stack at all + then this will return -4. This *is* correct! */ + return call_saved_registers + stack_frame + local_vars + outgoing_args - 4; + + default: + abort (); + } + break; + + case FRAME_POINTER_REGNUM: + switch (to) + { + case THUMB_HARD_FRAME_POINTER_REGNUM: + return 0; + + case ARM_HARD_FRAME_POINTER_REGNUM: + /* The hard frame pointer points to the top entry in the + stack frame. The soft frame pointer to the bottom entry + in the stack frame. If there is no stack frame at all, + then they are identical. */ + if (call_saved_registers == 0 && stack_frame == 0) + return 0; + return - (call_saved_registers + stack_frame - 4); + + case STACK_POINTER_REGNUM: + return local_vars + outgoing_args; + + default: + abort (); + } + break; + + default: + /* You cannot eliminate from the stack pointer. + In theory you could eliminate from the hard frame + pointer to the stack pointer, but this will never + happen, since if a stack frame is not needed the + hard frame pointer will never be used. */ + abort (); + } + } + /* Generate the prologue instructions for entry into an ARM function. */ void *************** arm_expand_prologue () *** 7787,7792 **** --- 8136,8143 ---- unsigned long live_regs_mask; unsigned long func_type; int fp_offset = 0; + int saved_pretend_args = 0; + unsigned int args_to_push; func_type = arm_current_func_type (); *************** arm_expand_prologue () *** 7794,7799 **** --- 8145,8153 ---- if (IS_NAKED (func_type)) return; + /* Make a copy of c_f_p_a_s as we may need to modify it locally. */ + args_to_push = current_function_pretend_args_size; + /* Compute which register we will have to save onto the stack. */ live_regs_mask = arm_compute_save_reg_mask (); *************** arm_expand_prologue () *** 7801,7807 **** if (frame_pointer_needed) { ! if (IS_NESTED (func_type)) { /* The Static chain register is the same as the IP register used as a scratch register during stack frame creation. --- 8155,8180 ---- if (frame_pointer_needed) { ! if (IS_INTERRUPT (func_type)) ! { ! /* Interrupt functions must not corrupt any registers. ! Creating a frame pointer however, corrupts the IP ! register, so we must push it first. */ ! insn = emit_multi_reg_push (1 << IP_REGNUM); ! ! /* Do not set RTX_FRAME_RELATED_P on this insn. ! The dwarf stack unwinding code only wants to see one ! stack decrement per function, and this is not it. If ! this instruction is labeled as being part of the frame ! creation sequence then dwarf2out_frame_debug_expr will ! abort when it encounters the assignment of IP to FP ! later on, since the use of SP here establishes SP as ! the CFA register and not IP. ! ! Anyway this instruction is not really part of the stack ! frame creation although it is part of the prologue. */ ! } ! else if (IS_NESTED (func_type)) { /* The Static chain register is the same as the IP register used as a scratch register during stack frame creation. *************** arm_expand_prologue () *** 7812,7819 **** 1. The last argument register. 2. A slot on the stack above the frame. (This only works if the function is not a varargs function). ! ! If neither of these places is available, we abort (for now). Note - we only need to tell the dwarf2 backend about the SP adjustment in the second variant; the static chain register --- 8185,8192 ---- 1. The last argument register. 2. A slot on the stack above the frame. (This only works if the function is not a varargs function). ! 3. Register r3, after pushing the argument registers ! onto the stack. Note - we only need to tell the dwarf2 backend about the SP adjustment in the second variant; the static chain register *************** arm_expand_prologue () *** 7826,7832 **** insn = gen_rtx_SET (SImode, insn, ip_rtx); insn = emit_insn (insn); } ! else if (current_function_pretend_args_size == 0) { rtx dwarf; insn = gen_rtx_PRE_DEC (SImode, stack_pointer_rtx); --- 8199,8205 ---- insn = gen_rtx_SET (SImode, insn, ip_rtx); insn = emit_insn (insn); } ! else if (args_to_push == 0) { rtx dwarf; insn = gen_rtx_PRE_DEC (SImode, stack_pointer_rtx); *************** arm_expand_prologue () *** 7845,7857 **** dwarf, REG_NOTES (insn)); } else ! /* FIXME - the way to handle this situation is to allow ! the pretend args to be dumped onto the stack, then ! reuse r3 to save IP. This would involve moving the ! copying of SP into IP until after the pretend args ! have been dumped, but this is not too hard. */ ! /* [See e.g. gcc.c-torture/execute/nest-stdar-1.c.] */ ! error ("Unable to find a temporary location for static chain register"); } if (fp_offset) --- 8218,8244 ---- dwarf, REG_NOTES (insn)); } else ! { ! /* Store the args on the stack. */ ! if (cfun->machine->uses_anonymous_args) ! insn = emit_multi_reg_push ! ((0xf0 >> (args_to_push / 4)) & 0xf); ! else ! insn = emit_insn ! (gen_addsi3 (stack_pointer_rtx, stack_pointer_rtx, ! GEN_INT (- args_to_push))); ! ! RTX_FRAME_RELATED_P (insn) = 1; ! ! saved_pretend_args = 1; ! fp_offset = args_to_push; ! args_to_push = 0; ! ! /* Now reuse r3 to preserve IP. */ ! insn = gen_rtx_REG (SImode, 3); ! insn = gen_rtx_SET (SImode, insn, ip_rtx); ! (void) emit_insn (insn); ! } } if (fp_offset) *************** arm_expand_prologue () *** 7866,7884 **** RTX_FRAME_RELATED_P (insn) = 1; } ! if (current_function_pretend_args_size) { /* Push the argument registers, or reserve space for them. */ ! if (current_function_anonymous_args) insn = emit_multi_reg_push ! ((0xf0 >> (current_function_pretend_args_size / 4)) & 0xf); else insn = emit_insn (gen_addsi3 (stack_pointer_rtx, stack_pointer_rtx, ! GEN_INT (-current_function_pretend_args_size))); RTX_FRAME_RELATED_P (insn) = 1; } if (live_regs_mask) { insn = emit_multi_reg_push (live_regs_mask); --- 8253,8284 ---- RTX_FRAME_RELATED_P (insn) = 1; } ! if (args_to_push) { /* Push the argument registers, or reserve space for them. */ ! if (cfun->machine->uses_anonymous_args) insn = emit_multi_reg_push ! ((0xf0 >> (args_to_push / 4)) & 0xf); else insn = emit_insn (gen_addsi3 (stack_pointer_rtx, stack_pointer_rtx, ! GEN_INT (- args_to_push))); RTX_FRAME_RELATED_P (insn) = 1; } + /* If this is an interrupt service routine, and the link register is + going to be pushed, subtracting four now will mean that the + function return can be done with a single instruction. */ + if ((func_type == ARM_FT_ISR || func_type == ARM_FT_FIQ) + && (live_regs_mask & (1 << LR_REGNUM)) != 0) + { + emit_insn (gen_rtx_SET (SImode, + gen_rtx_REG (SImode, LR_REGNUM), + gen_rtx_PLUS (SImode, + gen_rtx_REG (SImode, LR_REGNUM), + GEN_INT (-4)))); + } + if (live_regs_mask) { insn = emit_multi_reg_push (live_regs_mask); *************** arm_expand_prologue () *** 7937,7962 **** if (frame_pointer_needed) { /* Create the new frame pointer. */ ! insn = GEN_INT (-(4 + current_function_pretend_args_size + fp_offset)); insn = emit_insn (gen_addsi3 (hard_frame_pointer_rtx, ip_rtx, insn)); RTX_FRAME_RELATED_P (insn) = 1; if (IS_NESTED (func_type)) { /* Recover the static chain register. */ ! if (regs_ever_live [3] == 0) ! { ! insn = gen_rtx_REG (SImode, 3); ! insn = gen_rtx_SET (SImode, ip_rtx, insn); ! insn = emit_insn (insn); ! } else /* if (current_function_pretend_args_size == 0) */ { insn = gen_rtx_PLUS (SImode, hard_frame_pointer_rtx, GEN_INT (4)); insn = gen_rtx_MEM (SImode, insn); - insn = gen_rtx_SET (SImode, ip_rtx, insn); - insn = emit_insn (insn); } } } --- 8337,8361 ---- if (frame_pointer_needed) { /* Create the new frame pointer. */ ! insn = GEN_INT (-(4 + args_to_push + fp_offset)); insn = emit_insn (gen_addsi3 (hard_frame_pointer_rtx, ip_rtx, insn)); RTX_FRAME_RELATED_P (insn) = 1; if (IS_NESTED (func_type)) { /* Recover the static chain register. */ ! if (regs_ever_live [3] == 0 ! || saved_pretend_args) ! insn = gen_rtx_REG (SImode, 3); else /* if (current_function_pretend_args_size == 0) */ { insn = gen_rtx_PLUS (SImode, hard_frame_pointer_rtx, GEN_INT (4)); insn = gen_rtx_MEM (SImode, insn); } + + emit_insn (gen_rtx_SET (SImode, ip_rtx, insn)); + /* Add a USE to stop propagate_one_insn() from barfing. */ + emit_insn (gen_prologue_use (ip_rtx)); } } *************** arm_expand_prologue () *** 7995,8008 **** /* If we are profiling, make sure no instructions are scheduled before the call to mcount. Similarly if the user has requested no scheduling in the prolog. */ ! if (profile_flag || profile_block_flag || TARGET_NO_SCHED_PRO) emit_insn (gen_blockage ()); /* If the link register is being kept alive, with the return address in it, then make sure that it does not get reused by the ce2 pass. */ if ((live_regs_mask & (1 << LR_REGNUM)) == 0) { ! emit_insn (gen_rtx_USE (VOIDmode, gen_rtx_REG (SImode, LR_REGNUM))); cfun->machine->lr_save_eliminated = 1; } } --- 8394,8407 ---- /* If we are profiling, make sure no instructions are scheduled before the call to mcount. Similarly if the user has requested no scheduling in the prolog. */ ! if (current_function_profile || TARGET_NO_SCHED_PRO) emit_insn (gen_blockage ()); /* If the link register is being kept alive, with the return address in it, then make sure that it does not get reused by the ce2 pass. */ if ((live_regs_mask & (1 << LR_REGNUM)) == 0) { ! emit_insn (gen_prologue_use (gen_rtx_REG (SImode, LR_REGNUM))); cfun->machine->lr_save_eliminated = 1; } } *************** arm_print_operand (stream, x, code) *** 8214,8219 **** --- 8613,8655 ---- } } + #ifndef AOF_ASSEMBLER + /* Target hook for assembling integer objects. The ARM version needs to + handle word-sized values specially. */ + + static bool + arm_assemble_integer (x, size, aligned_p) + rtx x; + unsigned int size; + int aligned_p; + { + if (size == UNITS_PER_WORD && aligned_p) + { + fputs ("\t.word\t", asm_out_file); + output_addr_const (asm_out_file, x); + + /* Mark symbols as position independent. We only do this in the + .text segment, not in the .data segment. */ + if (NEED_GOT_RELOC && flag_pic && making_const_table && + (GET_CODE (x) == SYMBOL_REF || GET_CODE (x) == LABEL_REF)) + { + if (GET_CODE (x) == SYMBOL_REF + && (CONSTANT_POOL_ADDRESS_P (x) + || ENCODED_SHORT_CALL_ATTR_P (XSTR (x, 0)))) + fputs ("(GOTOFF)", asm_out_file); + else if (GET_CODE (x) == LABEL_REF) + fputs ("(GOTOFF)", asm_out_file); + else + fputs ("(GOT)", asm_out_file); + } + fputc ('\n', asm_out_file); + return true; + } + + return default_assemble_integer (x, size, aligned_p); + } + #endif + /* A finite state machine takes care of noticing whether or not instructions can be conditionally executed, and thus decrease execution time and code size by deleting branch instructions. The fsm is controlled by *************** get_arm_condition_code (comparison) *** 8254,8261 **** rtx comparison; { enum machine_mode mode = GET_MODE (XEXP (comparison, 0)); ! register int code; ! register enum rtx_code comp_code = GET_CODE (comparison); if (GET_MODE_CLASS (mode) != MODE_CC) mode = SELECT_CC_MODE (comp_code, XEXP (comparison, 0), --- 8690,8697 ---- rtx comparison; { enum machine_mode mode = GET_MODE (XEXP (comparison, 0)); ! int code; ! enum rtx_code comp_code = GET_CODE (comparison); if (GET_MODE_CLASS (mode) != MODE_CC) mode = SELECT_CC_MODE (comp_code, XEXP (comparison, 0), *************** arm_final_prescan_insn (insn) *** 8377,8383 **** rtx insn; { /* BODY will hold the body of INSN. */ ! register rtx body = PATTERN (insn); /* This will be 1 if trying to repeat the trick, and things need to be reversed if it appears to fail. */ --- 8813,8819 ---- rtx insn; { /* BODY will hold the body of INSN. */ ! rtx body = PATTERN (insn); /* This will be 1 if trying to repeat the trick, and things need to be reversed if it appears to fail. */ *************** arm_final_prescan_insn (insn) *** 8667,8673 **** if (!this_insn) { /* Oh, dear! we ran off the end.. give up */ ! recog (PATTERN (insn), insn, NULL_PTR); arm_ccfsm_state = 0; arm_target_insn = NULL; return; --- 9103,9109 ---- if (!this_insn) { /* Oh, dear! we ran off the end.. give up */ ! recog (PATTERN (insn), insn, NULL); arm_ccfsm_state = 0; arm_target_insn = NULL; return; *************** arm_final_prescan_insn (insn) *** 8705,8714 **** destroy this array, but final.c assumes that it remains intact across this call; since the insn has been recognized already we call recog direct). */ ! recog (PATTERN (insn), insn, NULL_PTR); } } int arm_regno_class (regno) int regno; --- 9141,9185 ---- destroy this array, but final.c assumes that it remains intact across this call; since the insn has been recognized already we call recog direct). */ ! recog (PATTERN (insn), insn, NULL); } } + /* Returns true if REGNO is a valid register + for holding a quantity of tyoe MODE. */ + + int + arm_hard_regno_mode_ok (regno, mode) + unsigned int regno; + enum machine_mode mode; + { + if (GET_MODE_CLASS (mode) == MODE_CC) + return regno == CC_REGNUM; + + if (TARGET_THUMB) + /* For the Thumb we only allow values bigger than SImode in + registers 0 - 6, so that there is always a second low + register available to hold the upper part of the value. + We probably we ought to ensure that the register is the + start of an even numbered register pair. */ + return (NUM_REGS (mode) < 2) || (regno < LAST_LO_REGNUM); + + if (regno <= LAST_ARM_REGNUM) + /* We allow any value to be stored in the general regisetrs. */ + return 1; + + if ( regno == FRAME_POINTER_REGNUM + || regno == ARG_POINTER_REGNUM) + /* We only allow integers in the fake hard registers. */ + return GET_MODE_CLASS (mode) == MODE_INT; + + /* The only registers left are the FPU registers + which we only allow to hold FP values. */ + return GET_MODE_CLASS (mode) == MODE_FLOAT + && regno >= FIRST_ARM_FP_REGNUM + && regno <= LAST_ARM_FP_REGNUM; + } + int arm_regno_class (regno) int regno; *************** arm_regno_class (regno) *** 8737,8742 **** --- 9208,9214 ---- /* Handle a special case when computing the offset of an argument from the frame pointer. */ + int arm_debugger_arg_offset (value, addr) int value; *************** arm_debugger_arg_offset (value, addr) *** 8813,8819 **** if (value == 0) { debug_rtx (addr); ! warning ("Unable to compute real location of stacked parameter"); value = 8; /* XXX magic hack */ } --- 9285,9291 ---- if (value == 0) { debug_rtx (addr); ! warning ("unable to compute real location of stacked parameter"); value = 8; /* XXX magic hack */ } *************** arm_debugger_arg_offset (value, addr) *** 8821,8827 **** } #define def_builtin(NAME, TYPE, CODE) \ ! builtin_function ((NAME), (TYPE), (CODE), BUILT_IN_MD, NULL_PTR) void arm_init_builtins () --- 9293,9299 ---- } #define def_builtin(NAME, TYPE, CODE) \ ! builtin_function ((NAME), (TYPE), (CODE), BUILT_IN_MD, NULL) void arm_init_builtins () *************** arm_init_builtins () *** 8844,8854 **** /* Initialize arm V5 builtins. */ if (arm_arch5) def_builtin ("__builtin_clz", int_ftype_int, ARM_BUILTIN_CLZ); - - /* Initialize arm V5E builtins. */ - if (arm_arch5e) - def_builtin ("__builtin_prefetch", void_ftype_pchar, - ARM_BUILTIN_PREFETCH); } /* Expand an expression EXP that calls a built-in function, --- 9316,9321 ---- *************** arm_expand_builtin (exp, target, subtarg *** 8896,8914 **** return 0; emit_insn (pat); return target; - - case ARM_BUILTIN_PREFETCH: - icode = CODE_FOR_prefetch; - arg0 = TREE_VALUE (arglist); - op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0); - - op0 = gen_rtx_MEM (SImode, copy_to_mode_reg (Pmode, op0)); - - pat = GEN_FCN (icode) (op0); - if (! pat) - return 0; - emit_insn (pat); - return target; } /* @@@ Should really do something sensible here. */ --- 9363,9368 ---- *************** replace_symbols_in_block (block, orig, n *** 8943,8957 **** ) continue; ! DECL_RTL (sym) = new; } replace_symbols_in_block (BLOCK_SUBBLOCKS (block), orig, new); } } ! /* Return the number (counting from 0) of the least significant set ! bit in MASK. */ #ifdef __GNUC__ inline #endif --- 9397,9412 ---- ) continue; ! SET_DECL_RTL (sym, new); } replace_symbols_in_block (BLOCK_SUBBLOCKS (block), orig, new); } } ! /* Return the number (counting from 0) of ! the least significant set bit in MASK. */ ! #ifdef __GNUC__ inline #endif *************** thumb_exit (f, reg_containing_return_add *** 9263,9268 **** --- 9718,9724 ---- } /* Emit code to push or pop registers to or from the stack. */ + static void thumb_pushpop (f, mask, push) FILE * f; *************** thumb_shiftable_const (val) *** 9355,9360 **** --- 9811,9817 ---- /* Returns non-zero if the current function contains, or might contain a far jump. */ + int thumb_far_jump_used_p (int in_prologue) { *************** thumb_far_jump_used_p (int in_prologue) *** 9422,9427 **** --- 9879,9885 ---- } /* Return non-zero if FUNC must be entered in ARM mode. */ + int is_called_in_ARM_mode (func) tree func; *************** is_called_in_ARM_mode (func) *** 9434,9440 **** return TRUE; #ifdef ARM_PE ! return lookup_attribute ("interfacearm", DECL_MACHINE_ATTRIBUTES (func)) != NULL_TREE; #else return FALSE; #endif --- 9892,9898 ---- return TRUE; #ifdef ARM_PE ! return lookup_attribute ("interfacearm", DECL_ATTRIBUTES (func)) != NULL_TREE; #else return FALSE; #endif *************** arm_mark_machine_status (p) *** 9624,9633 **** machine_function *machine = p->machine; if (machine) ! { ! ggc_mark_rtx (machine->ra_rtx); ! ggc_mark_rtx (machine->eh_epilogue_sp_ofs); ! } } static void --- 10082,10088 ---- machine_function *machine = p->machine; if (machine) ! ggc_mark_rtx (machine->eh_epilogue_sp_ofs); } static void *************** arm_free_machine_status (p) *** 9655,9699 **** /* Return an RTX indicating where the return address to the calling function can be found. */ rtx arm_return_addr (count, frame) int count; rtx frame ATTRIBUTE_UNUSED; { - rtx reg; - if (count != 0) return NULL_RTX; ! reg = cfun->machine->ra_rtx; ! ! if (reg == NULL) { ! rtx init; ! ! /* No rtx yet. Invent one, and initialize it for r14 (lr) in ! the prologue. */ ! reg = gen_reg_rtx (Pmode); ! cfun->machine->ra_rtx = reg; ! ! if (!TARGET_APCS_32) ! init = gen_rtx_AND (Pmode, gen_rtx_REG (Pmode, LR_REGNUM), GEN_INT (RETURN_ADDR_MASK26)); ! else ! init = gen_rtx_REG (Pmode, LR_REGNUM); ! ! init = gen_rtx_SET (VOIDmode, reg, init); ! ! /* Emit the insn to the prologue with the other argument copies. */ ! push_topmost_sequence (); ! emit_insn_after (init, get_insns ()); ! pop_topmost_sequence (); } - - return reg; } /* Do anything needed before RTL is emitted for each function. */ void arm_init_expanders () { --- 10110,10136 ---- /* Return an RTX indicating where the return address to the calling function can be found. */ + rtx arm_return_addr (count, frame) int count; rtx frame ATTRIBUTE_UNUSED; { if (count != 0) return NULL_RTX; ! if (TARGET_APCS_32) ! return get_hard_reg_initial_val (Pmode, LR_REGNUM); ! else { ! rtx lr = gen_rtx_AND (Pmode, gen_rtx_REG (Pmode, LR_REGNUM), GEN_INT (RETURN_ADDR_MASK26)); ! return get_func_hard_reg_initial_val (cfun, lr); } } /* Do anything needed before RTL is emitted for each function. */ + void arm_init_expanders () { *************** arm_init_expanders () *** 9704,9709 **** --- 10141,10147 ---- } /* Generate the rest of a function's prologue. */ + void thumb_expand_prologue () { *************** thumb_expand_prologue () *** 9719,9725 **** if (IS_INTERRUPT (func_type)) { ! error ("Interrupt Service Routines cannot be coded in Thumb mode."); return; } --- 10157,10163 ---- if (IS_INTERRUPT (func_type)) { ! error ("interrupt Service Routines cannot be coded in Thumb mode"); return; } *************** thumb_expand_prologue () *** 9732,9738 **** if (amount < 512) emit_insn (gen_addsi3 (stack_pointer_rtx, stack_pointer_rtx, ! GEN_INT (-amount))); else { int regno; --- 10170,10176 ---- if (amount < 512) emit_insn (gen_addsi3 (stack_pointer_rtx, stack_pointer_rtx, ! GEN_INT (- amount))); else { int regno; *************** thumb_expand_prologue () *** 9769,9777 **** /* Save it by copying it into a high, scratch register. */ emit_insn (gen_movsi (spare, reg)); /* Decrement the stack. */ ! emit_insn (gen_movsi (reg, GEN_INT (-amount))); emit_insn (gen_addsi3 (stack_pointer_rtx, stack_pointer_rtx, reg)); --- 10207,10217 ---- /* Save it by copying it into a high, scratch register. */ emit_insn (gen_movsi (spare, reg)); + /* Add a USE to stop propagate_one_insn() from barfing. */ + emit_insn (gen_prologue_use (spare)); /* Decrement the stack. */ ! emit_insn (gen_movsi (reg, GEN_INT (- amount))); emit_insn (gen_addsi3 (stack_pointer_rtx, stack_pointer_rtx, reg)); *************** thumb_expand_prologue () *** 9782,9801 **** analysis will not consider the restore redundant. The register won't be used again in this function and isn't restored by the epilogue. */ ! emit_insn (gen_rtx_USE (VOIDmode, reg)); } else { reg = gen_rtx (REG, SImode, regno); ! emit_insn (gen_movsi (reg, GEN_INT (-amount))); emit_insn (gen_addsi3 (stack_pointer_rtx, stack_pointer_rtx, reg)); } } } ! if (profile_flag || profile_block_flag || TARGET_NO_SCHED_PRO) emit_insn (gen_blockage ()); } --- 10222,10241 ---- analysis will not consider the restore redundant. The register won't be used again in this function and isn't restored by the epilogue. */ ! emit_insn (gen_prologue_use (reg)); } else { reg = gen_rtx (REG, SImode, regno); ! emit_insn (gen_movsi (reg, GEN_INT (- amount))); emit_insn (gen_addsi3 (stack_pointer_rtx, stack_pointer_rtx, reg)); } } } ! if (current_function_profile || TARGET_NO_SCHED_PRO) emit_insn (gen_blockage ()); } *************** thumb_expand_epilogue () *** 9830,9844 **** /* Emit a USE (stack_pointer_rtx), so that the stack adjustment will not be deleted. */ ! emit_insn (gen_rtx_USE (VOIDmode, stack_pointer_rtx)); ! if (profile_flag || profile_block_flag || TARGET_NO_SCHED_PRO) emit_insn (gen_blockage ()); } ! void ! output_thumb_prologue (f) FILE * f; { int live_regs_mask = 0; int high_regs_pushed = 0; --- 10270,10285 ---- /* Emit a USE (stack_pointer_rtx), so that the stack adjustment will not be deleted. */ ! emit_insn (gen_prologue_use (stack_pointer_rtx)); ! if (current_function_profile || TARGET_NO_SCHED_PRO) emit_insn (gen_blockage ()); } ! static void ! thumb_output_function_prologue (f, size) FILE * f; + HOST_WIDE_INT size ATTRIBUTE_UNUSED; { int live_regs_mask = 0; int high_regs_pushed = 0; *************** output_thumb_prologue (f) *** 9884,9890 **** if (current_function_pretend_args_size) { ! if (current_function_anonymous_args) { int num_pushes; --- 10325,10331 ---- if (current_function_pretend_args_size) { ! if (cfun->machine->uses_anonymous_args) { int num_pushes; *************** thumb_output_move_mem_multiple (n, opera *** 10255,10261 **** return ""; } ! /* Routines for generating rtl */ void thumb_expand_movstrqi (operands) --- 10696,10702 ---- return ""; } ! /* Routines for generating rtl. */ void thumb_expand_movstrqi (operands) *************** thumb_condition_code (x, invert) *** 10323,10329 **** rtx x; int invert; { ! static const char * conds[] = { "eq", "ne", "cs", "cc", "mi", "pl", "vs", "vc", "hi", "ls", "ge", "lt", "gt", "le" --- 10764,10770 ---- rtx x; int invert; { ! static const char * const conds[] = { "eq", "ne", "cs", "cc", "mi", "pl", "vs", "vc", "hi", "ls", "ge", "lt", "gt", "le" *************** thumb_condition_code (x, invert) *** 10350,10355 **** --- 10791,10797 ---- } /* Handle storing a half-word to memory during reload. */ + void thumb_reload_out_hi (operands) rtx * operands; *************** thumb_reload_out_hi (operands) *** 10358,10363 **** --- 10800,10806 ---- } /* Handle storing a half-word to memory during reload. */ + void thumb_reload_in_hi (operands) rtx * operands ATTRIBUTE_UNUSED; *************** thumb_reload_in_hi (operands) *** 10367,10372 **** --- 10810,10816 ---- /* Return the length of a function name prefix that starts with the character 'c'. */ + static int arm_get_strip_length (char c) { *************** arm_get_strip_length (char c) *** 10379,10384 **** --- 10823,10829 ---- /* Return a pointer to a function's name with any and all prefix encodings stripped from it. */ + const char * arm_strip_name_encoding (const char * name) { *************** rtx aof_pic_label = NULL_RTX; *** 10397,10403 **** struct pic_chain { struct pic_chain * next; ! char * symname; }; static struct pic_chain * aof_pic_chain = NULL; --- 10842,10848 ---- struct pic_chain { struct pic_chain * next; ! const char * symname; }; static struct pic_chain * aof_pic_chain = NULL; *************** aof_data_section () *** 10487,10500 **** struct import { struct import * next; ! char * name; }; static struct import * imports_list = NULL; void aof_add_import (name) ! char * name; { struct import * new; --- 10932,10945 ---- struct import { struct import * next; ! const char * name; }; static struct import * imports_list = NULL; void aof_add_import (name) ! const char * name; { struct import * new; *************** aof_add_import (name) *** 10510,10516 **** void aof_delete_import (name) ! char * name; { struct import ** old; --- 10955,10961 ---- void aof_delete_import (name) ! const char * name; { struct import ** old; *************** aof_dump_imports (f) *** 10550,10552 **** --- 10995,11041 ---- } } #endif /* AOF_ASSEMBLER */ + + #ifdef OBJECT_FORMAT_ELF + /* Switch to an arbitrary section NAME with attributes as specified + by FLAGS. ALIGN specifies any known alignment requirements for + the section; 0 if the default should be used. + + Differs from the default elf version only in the prefix character + used before the section type. */ + + static void + arm_elf_asm_named_section (name, flags) + const char *name; + unsigned int flags; + { + char flagchars[8], *f = flagchars; + const char *type; + + if (!(flags & SECTION_DEBUG)) + *f++ = 'a'; + if (flags & SECTION_WRITE) + *f++ = 'w'; + if (flags & SECTION_CODE) + *f++ = 'x'; + if (flags & SECTION_SMALL) + *f++ = 's'; + if (flags & SECTION_MERGE) + *f++ = 'M'; + if (flags & SECTION_STRINGS) + *f++ = 'S'; + *f = '\0'; + + if (flags & SECTION_BSS) + type = "nobits"; + else + type = "progbits"; + + if (flags & SECTION_ENTSIZE) + fprintf (asm_out_file, "\t.section\t%s,\"%s\",%%%s,%d\n", + name, flagchars, type, flags & SECTION_ENTSIZE); + else + fprintf (asm_out_file, "\t.section\t%s,\"%s\",%%%s\n", + name, flagchars, type); + } + #endif diff -Nrc3pad gcc-3.0.4/gcc/config/arm/arm.h gcc-3.1/gcc/config/arm/arm.h *** gcc-3.0.4/gcc/config/arm/arm.h Fri Dec 7 09:49:23 2001 --- gcc-3.1/gcc/config/arm/arm.h Wed Mar 13 05:35:51 2002 *************** *** 1,6 **** /* Definitions of target machine for GNU compiler, for ARM. Copyright (C) 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, ! 2001 Free Software Foundation, Inc. Contributed by Pieter `Tiggr' Schoenmakers (rcpieter@win.tue.nl) and Martin Simmons (@harleqn.co.uk). More major hacks by Richard Earnshaw (rearnsha@arm.com) --- 1,6 ---- /* Definitions of target machine for GNU compiler, for ARM. Copyright (C) 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, ! 2001, 2002 Free Software Foundation, Inc. Contributed by Pieter `Tiggr' Schoenmakers (rcpieter@win.tue.nl) and Martin Simmons (@harleqn.co.uk). More major hacks by Richard Earnshaw (rearnsha@arm.com) *************** along with GNU CC; see the file COPYING. *** 23,30 **** the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ! #ifndef __ARM_H__ ! #define __ARM_H__ #define TARGET_CPU_arm2 0x0000 #define TARGET_CPU_arm250 0x0000 --- 23,30 ---- the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ! #ifndef GCC_ARM_H ! #define GCC_ARM_H #define TARGET_CPU_arm2 0x0000 #define TARGET_CPU_arm250 0x0000 *************** typedef enum arm_cond_code *** 61,67 **** arm_cc; extern arm_cc arm_current_cc; - extern const char * arm_condition_codes[]; #define ARM_INVERSE_CONDITION_CODE(X) ((arm_cc) (((int)X) ^ 1)) --- 61,66 ---- *************** extern struct rtx_def * pool_vector_labe *** 82,89 **** /* Set to 1 when a return insn is output, this means that the epilogue is not needed. */ extern int return_used_this_function; - /* Nonzero if the prologue must setup `fp'. */ - extern int current_function_anonymous_args; /* Just in case configure has failed to define anything. */ #ifndef TARGET_CPU_DEFAULT --- 81,86 ---- *************** Unrecognized value in TARGET_CPU_DEFAULT *** 128,137 **** #endif #endif ! #ifndef CPP_PREDEFINES ! #define CPP_PREDEFINES "-Acpu=arm -Amachine=arm" ! #endif ! #define CPP_SPEC "\ %(cpp_cpu_arch) %(cpp_apcs_pc) %(cpp_float) \ %(cpp_endian) %(subtarget_cpp_spec) %(cpp_isa) %(cpp_interwork)" --- 125,131 ---- #endif #endif ! #undef CPP_SPEC #define CPP_SPEC "\ %(cpp_cpu_arch) %(cpp_apcs_pc) %(cpp_float) \ %(cpp_endian) %(subtarget_cpp_spec) %(cpp_isa) %(cpp_interwork)" *************** Unrecognized value in TARGET_CPU_DEFAULT *** 141,146 **** --- 135,141 ---- /* Set the architecture define -- if -march= is set, then it overrides the -mcpu= setting. */ #define CPP_CPU_ARCH_SPEC "\ + -Acpu=arm -Amachine=arm \ %{march=arm2:-D__ARM_ARCH_2__} \ %{march=arm250:-D__ARM_ARCH_2__} \ %{march=arm3:-D__ARM_ARCH_2__} \ *************** Unrecognized value in TARGET_CPU_DEFAULT *** 254,265 **** #define CPP_INTERWORK_SPEC " \ %{mthumb-interwork: \ ! %{mno-thumb-interwork: %eIncompatible interworking options} \ -D__THUMB_INTERWORK__} \ %{!mthumb-interwork:%{!mno-thumb-interwork:%(cpp_interwork_default)}} \ " #define CC1_SPEC "" /* This macro defines names of additional specifications to put in the specs that can be used in various specifications like CC1_SPEC. Its definition --- 249,266 ---- #define CPP_INTERWORK_SPEC " \ %{mthumb-interwork: \ ! %{mno-thumb-interwork: %eincompatible interworking options} \ -D__THUMB_INTERWORK__} \ %{!mthumb-interwork:%{!mno-thumb-interwork:%(cpp_interwork_default)}} \ " + #ifndef CPP_PREDEFINES + #define CPP_PREDEFINES "" + #endif + + #ifndef CC1_SPEC #define CC1_SPEC "" + #endif /* This macro defines names of additional specifications to put in the specs that can be used in various specifications like CC1_SPEC. Its definition *************** extern enum floating_point_type arm_fpu_ *** 549,555 **** --- 550,558 ---- /* Default floating point architecture. Override in sub-target if necessary. */ + #ifndef FP_DEFAULT #define FP_DEFAULT FP_SOFT2 + #endif /* Nonzero if the processor has a fast multiply insn, and one that does a 64-bit multiply of two 32-bit values. */ *************** extern int arm_is_strong; *** 576,582 **** /* Nonzero if this chip is an XScale. */ extern int arm_is_xscale; ! /* Nonzero if this chip is a an ARM6 or an ARM7. */ extern int arm_is_6_or_7; #ifndef TARGET_DEFAULT --- 579,585 ---- /* Nonzero if this chip is an XScale. */ extern int arm_is_xscale; ! /* Nonzero if this chip is an ARM6 or an ARM7. */ extern int arm_is_6_or_7; #ifndef TARGET_DEFAULT *************** extern int arm_is_6_or_7; *** 587,592 **** --- 590,596 ---- that is controlled by the APCS-FRAME option. */ #define CAN_DEBUG_WITHOUT_FP + #undef TARGET_MEM_FUNCTIONS #define TARGET_MEM_FUNCTIONS 1 #define OVERRIDE_OPTIONS arm_override_options () *************** extern int arm_is_6_or_7; *** 707,712 **** --- 711,721 ---- #define FUNCTION_BOUNDARY 32 + /* The lowest bit is used to indicate Thumb-mode functions, so the + vbit must go into the delta field of pointers to member + functions. */ + #define TARGET_PTRMEMFUNC_VBIT_LOCATION ptrmemfunc_vbit_in_delta + #define EMPTY_FIELD_BOUNDARY 32 #define BIGGEST_ALIGNMENT 32 *************** extern int arm_is_6_or_7; *** 722,728 **** /* Setting STRUCTURE_SIZE_BOUNDARY to 32 produces more efficient code, but the value set in previous versions of this toolchain was 8, which produces more compact structures. The command line option -mstructure_size_boundary= ! can be used to change this value. For compatability with the ARM SDK however the value should be left at 32. ARM SDT Reference Manual (ARM DUI 0020D) page 2-20 says "Structures are aligned on word boundaries". */ #define STRUCTURE_SIZE_BOUNDARY arm_structure_size_boundary --- 731,737 ---- /* Setting STRUCTURE_SIZE_BOUNDARY to 32 produces more efficient code, but the value set in previous versions of this toolchain was 8, which produces more compact structures. The command line option -mstructure_size_boundary= ! can be used to change this value. For compatibility with the ARM SDK however the value should be left at 32. ARM SDT Reference Manual (ARM DUI 0020D) page 2-20 says "Structures are aligned on word boundaries". */ #define STRUCTURE_SIZE_BOUNDARY arm_structure_size_boundary *************** extern const char * structure_size_strin *** 836,849 **** #define CONDITIONAL_REGISTER_USAGE \ { \ if (TARGET_SOFT_FLOAT || TARGET_THUMB) \ { \ - int regno; \ for (regno = FIRST_ARM_FP_REGNUM; \ regno <= LAST_ARM_FP_REGNUM; ++regno) \ fixed_regs[regno] = call_used_regs[regno] = 1; \ } \ ! if (flag_pic) \ { \ fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \ call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \ --- 845,859 ---- #define CONDITIONAL_REGISTER_USAGE \ { \ + int regno; \ + \ if (TARGET_SOFT_FLOAT || TARGET_THUMB) \ { \ for (regno = FIRST_ARM_FP_REGNUM; \ regno <= LAST_ARM_FP_REGNUM; ++regno) \ fixed_regs[regno] = call_used_regs[regno] = 1; \ } \ ! if (PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM) \ { \ fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \ call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \ *************** extern const char * structure_size_strin *** 899,905 **** #if 0 /* FIXME: The ARM backend has special code to handle structure returns, and will reserve its own hidden first argument. So if this macro is enabled a *second* hidden argument will be ! reserved, which will break binary compatability with old toolchains and also thunk handling. One day this should be fixed. */ /* RTX for structure returns. NULL means use a hidden first argument. */ --- 909,915 ---- #if 0 /* FIXME: The ARM backend has special code to handle structure returns, and will reserve its own hidden first argument. So if this macro is enabled a *second* hidden argument will be ! reserved, which will break binary compatibility with old toolchains and also thunk handling. One day this should be fixed. */ /* RTX for structure returns. NULL means use a hidden first argument. */ *************** extern const char * structure_size_strin *** 975,982 **** If we have to have a frame pointer we might as well make use of it. APCS says that the frame pointer does not need to be pushed in leaf functions, or simple tail call functions. */ ! #define FRAME_POINTER_REQUIRED \ ! (current_function_has_nonlocal_label \ || (TARGET_ARM && TARGET_APCS_FRAME && ! leaf_function_p ())) /* Return number of consecutive hard regs needed starting at reg REGNO --- 985,992 ---- If we have to have a frame pointer we might as well make use of it. APCS says that the frame pointer does not need to be pushed in leaf functions, or simple tail call functions. */ ! #define FRAME_POINTER_REQUIRED \ ! (current_function_has_nonlocal_label \ || (TARGET_ARM && TARGET_APCS_FRAME && ! leaf_function_p ())) /* Return number of consecutive hard regs needed starting at reg REGNO *************** extern const char * structure_size_strin *** 993,1015 **** && REGNO != ARG_POINTER_REGNUM) \ ? 1 : NUM_REGS (MODE)) ! /* Value is 1 if hard register REGNO can hold a value of machine-mode MODE. ! This is TRUE for ARM regs since they can hold anything, and TRUE for FPU ! regs holding FP. ! For the Thumb we only allow values bigger than SImode in registers 0 - 6, ! so that there is always a second lo register available to hold the upper ! part of the value. Probably we ought to ensure that the register is the ! start of an even numbered register pair. */ #define HARD_REGNO_MODE_OK(REGNO, MODE) \ ! (TARGET_ARM ? \ ! ((GET_MODE_CLASS (MODE) == MODE_CC) ? (REGNO == CC_REGNUM) : \ ! ( REGNO <= LAST_ARM_REGNUM \ ! || REGNO == FRAME_POINTER_REGNUM \ ! || REGNO == ARG_POINTER_REGNUM \ ! || GET_MODE_CLASS (MODE) == MODE_FLOAT)) \ ! : \ ! ((GET_MODE_CLASS (MODE) == MODE_CC) ? (REGNO == CC_REGNUM) : \ ! (NUM_REGS (MODE) < 2 || REGNO < LAST_LO_REGNUM))) /* Value is 1 if it is a good idea to tie two pseudo registers when one has mode MODE1 and one has mode MODE2. --- 1003,1011 ---- && REGNO != ARG_POINTER_REGNUM) \ ? 1 : NUM_REGS (MODE)) ! /* Return true if REGNO is suitable for holding a quantity of type MODE. */ #define HARD_REGNO_MODE_OK(REGNO, MODE) \ ! arm_hard_regno_mode_ok ((REGNO), (MODE)) /* Value is 1 if it is a good idea to tie two pseudo registers when one has mode MODE1 and one has mode MODE2. *************** extern const char * structure_size_strin *** 1031,1041 **** 16, 17, 18, 19, 20, 21, 22, 23, \ 24, 25, 26 \ } /* Register and constant classes. */ /* Register classes: used to be simple, just all ARM regs or all FPU regs ! Now that the Thumb is involved it has become more compilcated. */ enum reg_class { NO_REGS, --- 1027,1044 ---- 16, 17, 18, 19, 20, 21, 22, 23, \ 24, 25, 26 \ } + + /* Interrupt functions can only use registers that have already been + saved by the prologue, even if they would normally be + call-clobbered. */ + #define HARD_REGNO_RENAME_OK(SRC, DST) \ + (! IS_INTERRUPT (cfun->machine->func_type) || \ + regs_ever_live[DST]) /* Register and constant classes. */ /* Register classes: used to be simple, just all ARM regs or all FPU regs ! Now that the Thumb is involved it has become more complicated. */ enum reg_class { NO_REGS, *************** enum reg_class *** 1081,1087 **** { 0x200FFFF }, /* GENERAL_REGS */ \ { 0x2FFFFFF } /* ALL_REGS */ \ } ! /* The same information, inverted: Return the class number of the smallest class containing reg number REGNO. This could be a conditional expression --- 1084,1090 ---- { 0x200FFFF }, /* GENERAL_REGS */ \ { 0x2FFFFFF } /* ALL_REGS */ \ } ! /* The same information, inverted: Return the class number of the smallest class containing reg number REGNO. This could be a conditional expression *************** enum reg_class *** 1092,1097 **** --- 1095,1107 ---- #define INDEX_REG_CLASS (TARGET_THUMB ? LO_REGS : GENERAL_REGS) #define BASE_REG_CLASS (TARGET_THUMB ? BASE_REGS : GENERAL_REGS) + /* For the Thumb the high registers cannot be used as base + registers when addressing quanitities in QI or HI mode. */ + #define MODE_BASE_REG_CLASS(MODE) \ + (TARGET_ARM ? BASE_REGS : \ + (((MODE) == QImode || (MODE) == HImode || (MODE) == VOIDmode) \ + ? LO_REGS : BASE_REGS)) + /* When SMALL_REGISTER_CLASSES is nonzero, the compiler allows registers explicitly used in the rtl to be used as spill registers but prevents the compiler from extending the lifetime of these *************** enum reg_class *** 1255,1263 **** else \ break; \ \ ! high = ((((val - low) & HOST_UINT (0xffffffff)) \ ! ^ HOST_UINT (0x80000000)) \ ! - HOST_UINT (0x80000000)); \ /* Check for overflow or zero */ \ if (low == 0 || high == 0 || (high + low != val)) \ break; \ --- 1265,1273 ---- else \ break; \ \ ! high = ((((val - low) & (unsigned HOST_WIDE_INT) 0xffffffff) \ ! ^ (unsigned HOST_WIDE_INT) 0x80000000) \ ! - (unsigned HOST_WIDE_INT) 0x80000000); \ /* Check for overflow or zero */ \ if (low == 0 || high == 0 || (high + low != val)) \ break; \ *************** enum reg_class *** 1268,1276 **** gen_rtx_PLUS (GET_MODE (X), XEXP (X, 0), \ GEN_INT (high)), \ GEN_INT (low)); \ ! 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; \ } \ } \ --- 1278,1286 ---- gen_rtx_PLUS (GET_MODE (X), XEXP (X, 0), \ GEN_INT (high)), \ GEN_INT (low)); \ ! push_reload (XEXP (X, 0), NULL_RTX, &XEXP (X, 0), NULL, \ ! MODE_BASE_REG_CLASS (MODE), GET_MODE (X), \ ! VOIDmode, 0, 0, OPNUM, TYPE); \ goto WIN; \ } \ } \ *************** enum reg_class *** 1295,1302 **** { \ rtx orig_X = X; \ X = copy_rtx (X); \ ! push_reload (orig_X, NULL_RTX, &X, NULL_PTR, \ ! BASE_REG_CLASS, \ Pmode, VOIDmode, 0, 0, OPNUM, TYPE); \ goto WIN; \ } \ --- 1305,1312 ---- { \ rtx orig_X = X; \ X = copy_rtx (X); \ ! push_reload (orig_X, NULL_RTX, &X, NULL, \ ! MODE_BASE_REG_CLASS (MODE), \ Pmode, VOIDmode, 0, 0, OPNUM, TYPE); \ goto WIN; \ } \ *************** enum reg_class *** 1439,1446 **** This is added to the cfun structure. */ typedef struct machine_function { - /* Records __builtin_return address. */ - struct rtx_def *ra_rtx; /* Additionsl stack adjustment in __builtin_eh_throw. */ struct rtx_def *eh_epilogue_sp_ofs; /* Records if LR has to be saved for far jumps. */ --- 1449,1454 ---- *************** typedef struct machine_function *** 1451,1456 **** --- 1459,1466 ---- int lr_save_eliminated; /* Records the type of the current function. */ unsigned long func_type; + /* Record if the function has a variable argument list. */ + int uses_anonymous_args; } machine_function; *************** typedef struct *** 1509,1516 **** /* 1 if N is a possible register number for function argument passing. On the ARM, r0-r3 are used to pass args. */ ! #define FUNCTION_ARG_REGNO_P(REGNO) \ ! ((REGNO) >= 0 && (REGNO) <= 3) /* Tail calling. */ --- 1519,1525 ---- /* 1 if N is a possible register number for function argument passing. On the ARM, r0-r3 are used to pass args. */ ! #define FUNCTION_ARG_REGNO_P(REGNO) (IN_RANGE ((REGNO), 0, 3)) /* Tail calling. */ *************** typedef struct *** 1534,1556 **** that way. */ #define SETUP_INCOMING_VARARGS(CUM, MODE, TYPE, PRETEND_SIZE, NO_RTL) \ { \ ! extern int current_function_anonymous_args; \ ! current_function_anonymous_args = 1; \ if ((CUM).nregs < NUM_ARG_REGS) \ (PRETEND_SIZE) = (NUM_ARG_REGS - (CUM).nregs) * UNITS_PER_WORD; \ } - /* Generate assembly output for the start of a function. */ - #define FUNCTION_PROLOGUE(STREAM, SIZE) \ - do \ - { \ - if (TARGET_ARM) \ - output_arm_prologue (STREAM, SIZE); \ - else \ - output_thumb_prologue (STREAM); \ - } \ - while (0) - /* If your target environment doesn't prefix user functions with an underscore, you may wish to re-define this to prevent any conflicts. e.g. AOF may prefix mcount with an underscore. */ --- 1543,1553 ---- that way. */ #define SETUP_INCOMING_VARARGS(CUM, MODE, TYPE, PRETEND_SIZE, NO_RTL) \ { \ ! cfun->machine->uses_anonymous_args = 1; \ if ((CUM).nregs < NUM_ARG_REGS) \ (PRETEND_SIZE) = (NUM_ARG_REGS - (CUM).nregs) * UNITS_PER_WORD; \ } /* If your target environment doesn't prefix user functions with an underscore, you may wish to re-define this to prevent any conflicts. e.g. AOF may prefix mcount with an underscore. */ *************** typedef struct *** 1574,1579 **** --- 1571,1577 ---- The ``mov ip,lr'' seems like a good idea to stick with cc convention. ``prof'' doesn't seem to mind about this! */ + #ifndef ARM_FUNCTION_PROFILER #define ARM_FUNCTION_PROFILER(STREAM, LABELNO) \ { \ char temp[20]; \ *************** typedef struct *** 1585,1599 **** fputc ('\n', STREAM); \ ASM_GENERATE_INTERNAL_LABEL (temp, "LP", LABELNO); \ sym = gen_rtx (SYMBOL_REF, Pmode, temp); \ ! ASM_OUTPUT_INT (STREAM, sym); \ } #define THUMB_FUNCTION_PROFILER(STREAM, LABELNO) \ { \ ! fprintf (STREAM, "\tmov\\tip, lr\n"); \ fprintf (STREAM, "\tbl\tmcount\n"); \ fprintf (STREAM, "\t.word\tLP%d\n", LABELNO); \ } #define FUNCTION_PROFILER(STREAM, LABELNO) \ if (TARGET_ARM) \ --- 1583,1600 ---- fputc ('\n', STREAM); \ ASM_GENERATE_INTERNAL_LABEL (temp, "LP", LABELNO); \ sym = gen_rtx (SYMBOL_REF, Pmode, temp); \ ! assemble_aligned_integer (UNITS_PER_WORD, sym); \ } + #endif + #ifndef THUMB_FUNCTION_PROFILER #define THUMB_FUNCTION_PROFILER(STREAM, LABELNO) \ { \ ! fprintf (STREAM, "\tmov\tip, lr\n"); \ fprintf (STREAM, "\tbl\tmcount\n"); \ fprintf (STREAM, "\t.word\tLP%d\n", LABELNO); \ } + #endif #define FUNCTION_PROFILER(STREAM, LABELNO) \ if (TARGET_ARM) \ *************** typedef struct *** 1610,1619 **** frame. */ #define EXIT_IGNORE_STACK 1 - /* Generate the assembly code for function exit. */ - #define FUNCTION_EPILOGUE(STREAM, SIZE) \ - output_func_epilogue (SIZE) - #define EPILOGUE_USES(REGNO) (reload_completed && (REGNO) == LR_REGNUM) /* Determine if the epilogue should be output as RTL. --- 1611,1616 ---- *************** typedef struct *** 1633,1639 **** pointer register. Secondly, the pseudo frame pointer register can always be eliminated; it is replaced with either the stack or the real frame pointer. Note we have to use {ARM|THUMB}_HARD_FRAME_POINTER_REGNUM ! because the defintion of HARD_FRAME_POINTER_REGNUM is not a constant. */ #define ELIMINABLE_REGS \ {{ ARG_POINTER_REGNUM, STACK_POINTER_REGNUM },\ --- 1630,1636 ---- pointer register. Secondly, the pseudo frame pointer register can always be eliminated; it is replaced with either the stack or the real frame pointer. Note we have to use {ARM|THUMB}_HARD_FRAME_POINTER_REGNUM ! because the definition of HARD_FRAME_POINTER_REGNUM is not a constant. */ #define ELIMINABLE_REGS \ {{ ARG_POINTER_REGNUM, STACK_POINTER_REGNUM },\ *************** typedef struct *** 1662,1718 **** /* Define the offset between two registers, one to be eliminated, and the other its replacement, at the start of a routine. */ #define ARM_INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \ ! { \ ! int volatile_func = IS_VOLATILE (arm_current_func_type ()); \ ! if ((FROM) == ARG_POINTER_REGNUM && (TO) == HARD_FRAME_POINTER_REGNUM)\ ! { \ ! if (! current_function_needs_context || ! frame_pointer_needed) \ ! (OFFSET) = 0; \ ! else \ ! (OFFSET) = 4; \ ! } \ ! else if ((FROM) == FRAME_POINTER_REGNUM \ ! && (TO) == STACK_POINTER_REGNUM) \ ! (OFFSET) = current_function_outgoing_args_size \ ! + ROUND_UP (get_frame_size ()); \ ! else \ { \ ! int regno; \ ! int offset = 12; \ ! int saved_hard_reg = 0; \ ! \ ! if (! volatile_func) \ ! { \ ! for (regno = 0; regno <= 10; regno++) \ ! if (regs_ever_live[regno] && ! call_used_regs[regno]) \ ! saved_hard_reg = 1, offset += 4; \ ! if (! TARGET_APCS_FRAME \ ! && ! frame_pointer_needed \ ! && regs_ever_live[HARD_FRAME_POINTER_REGNUM] \ ! && ! call_used_regs[HARD_FRAME_POINTER_REGNUM]) \ ! saved_hard_reg = 1, offset += 4; \ ! /* PIC register is a fixed reg, so call_used_regs set. */ \ ! if (flag_pic && regs_ever_live[PIC_OFFSET_TABLE_REGNUM]) \ ! saved_hard_reg = 1, offset += 4; \ ! for (regno = FIRST_ARM_FP_REGNUM; \ ! regno <= LAST_ARM_FP_REGNUM; regno++) \ ! if (regs_ever_live[regno] && ! call_used_regs[regno]) \ ! offset += 12; \ ! } \ ! if ((FROM) == FRAME_POINTER_REGNUM) \ ! (OFFSET) = - offset; \ ! else \ ! { \ ! if (! frame_pointer_needed) \ ! offset -= 16; \ ! if (! volatile_func \ ! && (regs_ever_live[LR_REGNUM] /*|| saved_hard_reg */)) \ ! offset += 4; \ ! offset += current_function_outgoing_args_size; \ ! (OFFSET) = ROUND_UP (get_frame_size ()) + offset; \ ! } \ } \ ! } /* Note: This macro must match the code in thumb_function_prologue(). */ #define THUMB_INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \ --- 1659,1669 ---- /* Define the offset between two registers, one to be eliminated, and the other its replacement, at the start of a routine. */ #define ARM_INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \ ! do \ { \ ! (OFFSET) = arm_compute_initial_elimination_offset (FROM, TO); \ } \ ! while (0) /* Note: This macro must match the code in thumb_function_prologue(). */ #define THUMB_INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \ *************** typedef struct *** 1750,1756 **** #define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \ if (TARGET_ARM) \ ! ARM_INITIAL_ELIMINATION_OFFSET (FROM, TO, OFFSET) \ else \ THUMB_INITIAL_ELIMINATION_OFFSET (FROM, TO, OFFSET) --- 1701,1707 ---- #define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \ if (TARGET_ARM) \ ! ARM_INITIAL_ELIMINATION_OFFSET (FROM, TO, OFFSET); \ else \ THUMB_INITIAL_ELIMINATION_OFFSET (FROM, TO, OFFSET) *************** typedef struct *** 1771,1784 **** .word static chain value .word function's address ??? FIXME: When the trampoline returns, r8 will be clobbered. */ ! #define ARM_TRAMPOLINE_TEMPLATE(FILE) \ ! { \ ! asm_fprintf (FILE, "\tldr\t%r, [%r, #0]\n", \ ! STATIC_CHAIN_REGNUM, PC_REGNUM); \ ! asm_fprintf (FILE, "\tldr\t%r, [%r, #0]\n", \ ! PC_REGNUM, PC_REGNUM); \ ! ASM_OUTPUT_INT (FILE, const0_rtx); \ ! ASM_OUTPUT_INT (FILE, const0_rtx); \ } /* On the Thumb we always switch into ARM mode to execute the trampoline. --- 1722,1735 ---- .word static chain value .word function's address ??? FIXME: When the trampoline returns, r8 will be clobbered. */ ! #define ARM_TRAMPOLINE_TEMPLATE(FILE) \ ! { \ ! asm_fprintf (FILE, "\tldr\t%r, [%r, #0]\n", \ ! STATIC_CHAIN_REGNUM, PC_REGNUM); \ ! asm_fprintf (FILE, "\tldr\t%r, [%r, #0]\n", \ ! PC_REGNUM, PC_REGNUM); \ ! assemble_aligned_integer (UNITS_PER_WORD, const0_rtx); \ ! assemble_aligned_integer (UNITS_PER_WORD, const0_rtx); \ } /* On the Thumb we always switch into ARM mode to execute the trampoline. *************** typedef struct *** 1813,1820 **** /* Length in units of the trampoline for entering a nested function. */ #define TRAMPOLINE_SIZE (TARGET_ARM ? 16 : 24) ! /* Alignment required for a trampoline in units. */ ! #define TRAMPOLINE_ALIGN 4 /* Emit RTL insns to initialize the variable parts of a trampoline. FNADDR is an RTX for the address of the function's pure code. --- 1764,1771 ---- /* Length in units of the trampoline for entering a nested function. */ #define TRAMPOLINE_SIZE (TARGET_ARM ? 16 : 24) ! /* Alignment required for a trampoline in bits. */ ! #define TRAMPOLINE_ALIGNMENT 32 /* Emit RTL insns to initialize the variable parts of a trampoline. FNADDR is an RTX for the address of the function's pure code. *************** typedef struct *** 1899,1905 **** #define THUMB_LEGITIMATE_CONSTANT_P(X) \ ( GET_CODE (X) == CONST_INT \ || GET_CODE (X) == CONST_DOUBLE \ ! || CONSTANT_ADDRESS_P (X)) #define LEGITIMATE_CONSTANT_P(X) \ (TARGET_ARM ? ARM_LEGITIMATE_CONSTANT_P (X) : THUMB_LEGITIMATE_CONSTANT_P (X)) --- 1850,1857 ---- #define THUMB_LEGITIMATE_CONSTANT_P(X) \ ( GET_CODE (X) == CONST_INT \ || GET_CODE (X) == CONST_DOUBLE \ ! || CONSTANT_ADDRESS_P (X) \ ! || flag_pic) #define LEGITIMATE_CONSTANT_P(X) \ (TARGET_ARM ? ARM_LEGITIMATE_CONSTANT_P (X) : THUMB_LEGITIMATE_CONSTANT_P (X)) *************** typedef struct *** 1947,1959 **** or known to be defined in this file then encode a short call flag. This macro is used inside the ENCODE_SECTION macro. */ #define ARM_ENCODE_CALL_TYPE(decl) \ ! if (TREE_CODE (decl) == FUNCTION_DECL) \ { \ ! if (DECL_WEAK (decl)) \ arm_encode_call_attribute (decl, LONG_CALL_FLAG_CHAR); \ else if (! TREE_PUBLIC (decl)) \ arm_encode_call_attribute (decl, SHORT_CALL_FLAG_CHAR); \ ! } \ /* Symbols in the text segment can be accessed without indirecting via the constant pool; it may take an extra binary operation, but this is still --- 1899,1911 ---- or known to be defined in this file then encode a short call flag. This macro is used inside the ENCODE_SECTION macro. */ #define ARM_ENCODE_CALL_TYPE(decl) \ ! if (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd') \ { \ ! if (TREE_CODE (decl) == FUNCTION_DECL && DECL_WEAK (decl)) \ arm_encode_call_attribute (decl, LONG_CALL_FLAG_CHAR); \ else if (! TREE_PUBLIC (decl)) \ arm_encode_call_attribute (decl, SHORT_CALL_FLAG_CHAR); \ ! } /* Symbols in the text segment can be accessed without indirecting via the constant pool; it may take an extra binary operation, but this is still *************** typedef struct *** 2400,2411 **** Do not define this if the table should contain absolute addresses. */ /* #define CASE_VECTOR_PC_RELATIVE 1 */ - /* Specify the tree operation to be used to convert reals to integers. */ - #define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR - - /* This is the kind of divide that is easiest to do in the general case. */ - #define EASY_DIV_EXPR TRUNC_DIV_EXPR - /* signed 'char' is most compatible, but RISC OS wants it unsigned. unsigned is probably best, but may break some code. */ #ifndef DEFAULT_SIGNED_CHAR --- 2352,2357 ---- *************** typedef struct *** 2435,2445 **** ((arm_arch4 || (MODE) == QImode) ? ZERO_EXTEND \ : ((BYTES_BIG_ENDIAN && (MODE) == HImode) ? SIGN_EXTEND : NIL))) - /* Define this if zero-extension is slow (more than one real instruction). - On the ARM, it is more than one instruction only if not fetching from - memory. */ - /* #define SLOW_ZERO_EXTEND */ - /* Nonzero if access to memory by bytes is slow and undesirable. */ #define SLOW_BYTE_ACCESS 0 --- 2381,2386 ---- *************** typedef struct *** 2515,2525 **** conditional instructions */ #define BRANCH_COST \ (TARGET_ARM ? 4 : (optimize > 1 ? 1 : 0)) - - /* A C statement to update the variable COST based on the relationship - between INSN that is dependent on DEP through dependence LINK. */ - #define ADJUST_COST(INSN, LINK, DEP, COST) \ - (COST) = arm_adjust_cost (INSN, LINK, DEP, COST) /* Position Independent Code. */ /* We decide which register to use based on the compilation options and --- 2456,2461 ---- *************** extern const char * arm_pic_register_str *** 2550,2573 **** offset. */ extern int making_const_table; - /* If defined, a C expression whose value is nonzero if IDENTIFIER - with arguments ARGS is a valid machine specific attribute for TYPE. - The attributes in ATTRIBUTES have previously been assigned to TYPE. */ - #define VALID_MACHINE_TYPE_ATTRIBUTE(TYPE, ATTRIBUTES, NAME, ARGS) \ - (arm_valid_type_attribute_p (TYPE, ATTRIBUTES, NAME, ARGS)) - - /* If defined, a C expression whose value is zero if the attributes on - TYPE1 and TYPE2 are incompatible, one if they are compatible, and - two if they are nearly compatible (which causes a warning to be - generated). */ - #define COMP_TYPE_ATTRIBUTES(TYPE1, TYPE2) \ - (arm_comp_type_attributes (TYPE1, TYPE2)) - - /* If defined, a C statement that assigns default attributes to newly - defined TYPE. */ - #define SET_DEFAULT_TYPE_ATTRIBUTES(TYPE) \ - arm_set_default_type_attributes (TYPE) - /* Handle pragmas for compatibility with Intel's compilers. */ #define REGISTER_TARGET_PRAGMAS(PFILE) do { \ cpp_register_pragma (PFILE, 0, "long_calls", arm_pr_long_calls); \ --- 2486,2491 ---- *************** extern int making_const_table; *** 2671,2676 **** --- 2589,2595 ---- /* This is how to output a label which precedes a jumptable. Since Thumb instructions are 2 bytes, we may need explicit alignment here. */ + #undef ASM_OUTPUT_CASE_LABEL #define ASM_OUTPUT_CASE_LABEL(FILE, PREFIX, NUM, JUMPTABLE) \ do \ { \ *************** extern int making_const_table; *** 2699,2706 **** #define ASM_OUTPUT_DEF_FROM_DECLS(FILE, DECL1, DECL2) \ do \ { \ ! char * LABEL1 = XSTR (XEXP (DECL_RTL (decl), 0), 0); \ ! char * LABEL2 = IDENTIFIER_POINTER (DECL2); \ \ if (TARGET_THUMB && TREE_CODE (DECL1) == FUNCTION_DECL) \ { \ --- 2618,2625 ---- #define ASM_OUTPUT_DEF_FROM_DECLS(FILE, DECL1, DECL2) \ do \ { \ ! const char *const LABEL1 = XSTR (XEXP (DECL_RTL (decl), 0), 0); \ ! const char *const LABEL2 = IDENTIFIER_POINTER (DECL2); \ \ if (TARGET_THUMB && TREE_CODE (DECL1) == FUNCTION_DECL) \ { \ *************** extern int making_const_table; *** 2715,2728 **** } \ while (0) ! /* Target characters. */ ! #define TARGET_BELL 007 ! #define TARGET_BS 010 ! #define TARGET_TAB 011 ! #define TARGET_NEWLINE 012 ! #define TARGET_VT 013 ! #define TARGET_FF 014 ! #define TARGET_CR 015 /* Only perform branch elimination (by making instructions conditional) if we're optimising. Otherwise it's of no use anyway. */ --- 2634,2653 ---- } \ while (0) ! #ifdef HAVE_GAS_MAX_SKIP_P2ALIGN ! /* To support -falign-* switches we need to use .p2align so ! that alignment directives in code sections will be padded ! with no-op instructions, rather than zeroes. */ ! #define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE,LOG,MAX_SKIP) \ ! 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)); \ ! } ! #endif /* Only perform branch elimination (by making instructions conditional) if we're optimising. Otherwise it's of no use anyway. */ *************** extern int making_const_table; *** 2741,2762 **** #define PRINT_OPERAND(STREAM, X, CODE) \ arm_print_operand (STREAM, X, CODE) ! /* Create an [unsigned] host sized integer declaration that ! avoids compiler warnings. */ ! #ifdef __STDC__ ! #define HOST_INT(x) ((signed HOST_WIDE_INT) x##UL) ! #define HOST_UINT(x) ((unsigned HOST_WIDE_INT) x##UL) ! #else ! #define HOST_INT(x) ((HOST_WIDE_INT) x) ! #define HOST_UINT(x) ((unsigned HOST_WIDE_INT) x) ! #endif ! ! #define ARM_SIGN_EXTEND(x) ((HOST_WIDE_INT) \ ! (HOST_BITS_PER_WIDE_INT <= 32 ? (x) \ ! : (((x) & HOST_UINT (0xffffffff)) | \ ! (((x) & HOST_UINT (0x80000000)) \ ! ? ((~ HOST_INT (0)) \ ! & ~ HOST_UINT(0xffffffff)) \ : 0)))) /* Output the address of an operand. */ --- 2666,2677 ---- #define PRINT_OPERAND(STREAM, X, CODE) \ arm_print_operand (STREAM, X, CODE) ! #define ARM_SIGN_EXTEND(x) ((HOST_WIDE_INT) \ ! (HOST_BITS_PER_WIDE_INT <= 32 ? (unsigned HOST_WIDE_INT) (x) \ ! : ((((unsigned HOST_WIDE_INT)(x)) & (unsigned HOST_WIDE_INT) 0xffffffff) |\ ! ((((unsigned HOST_WIDE_INT)(x)) & (unsigned HOST_WIDE_INT) 0x80000000) \ ! ? ((~ (unsigned HOST_WIDE_INT) 0) \ ! & ~ (unsigned HOST_WIDE_INT) 0xffffffff) \ : 0)))) /* Output the address of an operand. */ *************** extern int making_const_table; *** 2862,2892 **** else \ THUMB_PRINT_OPERAND_ADDRESS (STREAM, X) - #define OUTPUT_INT_ADDR_CONST(STREAM, X) \ - { \ - output_addr_const (STREAM, X); \ - \ - /* Mark symbols as position independent. We only do this in the \ - .text segment, not in the .data segment. */ \ - if (NEED_GOT_RELOC && flag_pic && making_const_table && \ - (GET_CODE (X) == SYMBOL_REF || GET_CODE (X) == LABEL_REF)) \ - { \ - if (GET_CODE (X) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (X)) \ - fprintf (STREAM, "(GOTOFF)"); \ - else if (GET_CODE (X) == LABEL_REF) \ - fprintf (STREAM, "(GOTOFF)"); \ - else \ - fprintf (STREAM, "(GOT)"); \ - } \ - } - /* 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 \ { \ int mi_delta = (DELTA); \ ! const char * mi_op = mi_delta < 0 ? "sub" : "add"; \ int shift = 0; \ int this_regno = (aggregate_value_p (TREE_TYPE (TREE_TYPE (FUNCTION))) \ ? 1 : 0); \ --- 2777,2789 ---- else \ THUMB_PRINT_OPERAND_ADDRESS (STREAM, X) /* 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 \ { \ int mi_delta = (DELTA); \ ! const char *const mi_op = mi_delta < 0 ? "sub" : "add"; \ int shift = 0; \ int this_regno = (aggregate_value_p (TREE_TYPE (TREE_TYPE (FUNCTION))) \ ? 1 : 0); \ *************** extern int making_const_table; *** 2986,3002 **** enum arm_builtins { ARM_BUILTIN_CLZ, - ARM_BUILTIN_PREFETCH, ARM_BUILTIN_MAX }; ! ! #define MD_INIT_BUILTINS \ ! do \ ! { \ ! arm_init_builtins (); \ ! } \ ! while (0) ! ! #define MD_EXPAND_BUILTIN(EXP, TARGET, SUBTARGET, MODE, IGNORE) \ ! arm_expand_builtin ((EXP), (TARGET), (SUBTARGET), (MODE), (IGNORE)) ! #endif /* __ARM_H__ */ --- 2883,2888 ---- enum arm_builtins { ARM_BUILTIN_CLZ, ARM_BUILTIN_MAX }; ! #endif /* ! GCC_ARM_H */ diff -Nrc3pad gcc-3.0.4/gcc/config/arm/arm.md gcc-3.1/gcc/config/arm/arm.md *** gcc-3.0.4/gcc/config/arm/arm.md Fri May 18 12:45:22 2001 --- gcc-3.1/gcc/config/arm/arm.md Wed Apr 10 14:25:51 2002 *************** *** 1,6 **** ;;- Machine description for ARM for GNU compiler ! ;; Copyright 1991, 1993, 1994, 1995, 1996, 1996, 1997, 1998, 1999, 2000, 2001 ! ;; Free Software Foundation, Inc. ;; Contributed by Pieter `Tiggr' Schoenmakers (rcpieter@win.tue.nl) ;; and Martin Simmons (@harleqn.co.uk). ;; More major hacks by Richard Earnshaw (rearnsha@arm.com). --- 1,6 ---- ;;- Machine description for ARM for GNU compiler ! ;; Copyright 1991, 1993, 1994, 1995, 1996, 1996, 1997, 1998, 1999, 2000, ! ;; 2001, 2002 Free Software Foundation, Inc. ;; Contributed by Pieter `Tiggr' Schoenmakers (rcpieter@win.tue.nl) ;; and Martin Simmons (@harleqn.co.uk). ;; More major hacks by Richard Earnshaw (rearnsha@arm.com). *************** *** 64,69 **** --- 64,74 ---- (UNSPEC_CLZ 5) ; `clz' instruction, count leading zeros (SImode): ; operand 0 is the result, ; operand 1 is the parameter. + (UNSPEC_PROLOGUE_USE 6) ; As USE insns are not meaningful after reload, + ; this unspec is used to prevent the deletion of + ; instructions setting registers for EH handling + ; and stack frame generation. Operand 0 is the + ; register to "use". ] ) *************** *** 88,95 **** ; a 32-bit object. (VUNSPEC_POOL_8 7) ; `pool-entry(8)'. An entry in the constant pool for ; a 64-bit object. - (VUNSPEC_PREFETCH 8) ; `pld' insn to prefetch a cache line: - ; operand 0 is the address to fetch. ] ) --- 93,98 ---- *************** *** 132,139 **** (define_attr "neg_pool_range" "" (const_int 0)) ; An assembler sequence may clobber the condition codes without us knowing. (define_asm_attributes ! [(set_attr "conds" "clob")]) ; TYPE attribute is used to detect floating point instructions which, if ; running on a co-processor can run in parallel with other, basic instructions --- 135,146 ---- (define_attr "neg_pool_range" "" (const_int 0)) ; An assembler sequence may clobber the condition codes without us knowing. + ; If such an insn references the pool, then we have no way of knowing how, + ; so use the most conservative value for pool_range. (define_asm_attributes ! [(set_attr "conds" "clob") ! (set_attr "length" "4") ! (set_attr "pool_range" "250")]) ; TYPE attribute is used to detect floating point instructions which, if ; running on a co-processor can run in parallel with other, basic instructions *************** *** 3956,3962 **** [(set_attr "length" "8") (set_attr "type" "*,load,store2") (set_attr "pool_range" "*,1020,*") ! (set_attr "neg_pool_range" "*,1012,*")] ) ;;; ??? This should have alternatives for constants. --- 3963,3969 ---- [(set_attr "length" "8") (set_attr "type" "*,load,store2") (set_attr "pool_range" "*,1020,*") ! (set_attr "neg_pool_range" "*,1008,*")] ) ;;; ??? This should have alternatives for constants. *************** *** 4129,4155 **** }" ) - (define_expand "movaddr" - [(set (match_operand:SI 0 "s_register_operand" "") - (match_operand:DI 1 "address_operand" ""))] - "TARGET_ARM" - "" - ) - - (define_insn "*movaddr_insn" - [(set (match_operand:SI 0 "s_register_operand" "=r") - (match_operand:DI 1 "address_operand" "p"))] - "TARGET_ARM - && reload_completed - && (GET_CODE (operands[1]) == LABEL_REF - || (GET_CODE (operands[1]) == CONST - && GET_CODE (XEXP (operands[1], 0)) == PLUS - && GET_CODE (XEXP (XEXP (operands[1], 0), 0)) == LABEL_REF - && GET_CODE (XEXP (XEXP (operands[1], 0), 1)) == CONST_INT))" - "adr%?\\t%0, %a1" - [(set_attr "predicable" "yes")] - ) - ;; When generating pic, we need to load the symbol offset into a register. ;; So that the optimizer does not confuse this with a normal symbol load ;; we use an unspec. The offset will be loaded from a constant pool entry, --- 4136,4141 ---- *************** *** 4282,4297 **** "TARGET_ARM" " { ! rtx addr = XEXP (operands[1], 0); enum rtx_code code = GET_CODE (addr); if ((code == PLUS && GET_CODE (XEXP (addr, 1)) != CONST_INT) || code == MINUS) ! addr = force_reg (SImode, addr); ! operands[4] = change_address (operands[1], QImode, ! plus_constant (addr, 1)); ! operands[1] = change_address (operands[1], QImode, NULL_RTX); operands[3] = gen_lowpart (QImode, operands[0]); operands[0] = gen_lowpart (SImode, operands[0]); operands[2] = gen_reg_rtx (SImode); --- 4268,4283 ---- "TARGET_ARM" " { ! rtx op1 = operands[1]; ! rtx addr = XEXP (op1, 0); enum rtx_code code = GET_CODE (addr); if ((code == PLUS && GET_CODE (XEXP (addr, 1)) != CONST_INT) || code == MINUS) ! op1 = replace_equiv_address (operands[1], force_reg (SImode, addr)); ! operands[4] = adjust_address (op1, QImode, 1); ! operands[1] = adjust_address (operands[1], QImode, 0); operands[3] = gen_lowpart (QImode, operands[0]); operands[0] = gen_lowpart (SImode, operands[0]); operands[2] = gen_reg_rtx (SImode); *************** *** 4306,4321 **** "TARGET_ARM" " { ! rtx addr = XEXP (operands[1], 0); enum rtx_code code = GET_CODE (addr); if ((code == PLUS && GET_CODE (XEXP (addr, 1)) != CONST_INT) || code == MINUS) ! addr = force_reg (SImode, addr); ! operands[4] = change_address (operands[1], QImode, ! plus_constant (addr, 1)); ! operands[1] = change_address (operands[1], QImode, NULL_RTX); operands[3] = gen_lowpart (QImode, operands[0]); operands[0] = gen_lowpart (SImode, operands[0]); operands[2] = gen_reg_rtx (SImode); --- 4292,4307 ---- "TARGET_ARM" " { ! rtx op1 = operands[1]; ! rtx addr = XEXP (op1, 0); enum rtx_code code = GET_CODE (addr); if ((code == PLUS && GET_CODE (XEXP (addr, 1)) != CONST_INT) || code == MINUS) ! op1 = replace_equiv_address (op1, force_reg (SImode, addr)); ! operands[4] = adjust_address (op1, QImode, 1); ! operands[1] = adjust_address (operands[1], QImode, 0); operands[3] = gen_lowpart (QImode, operands[0]); operands[0] = gen_lowpart (SImode, operands[0]); operands[2] = gen_reg_rtx (SImode); *************** *** 4332,4342 **** { HOST_WIDE_INT value = INTVAL (operands[1]); rtx addr = XEXP (operands[0], 0); enum rtx_code code = GET_CODE (addr); if ((code == PLUS && GET_CODE (XEXP (addr, 1)) != CONST_INT) || code == MINUS) ! addr = force_reg (SImode, addr); operands[1] = gen_reg_rtx (SImode); if (BYTES_BIG_ENDIAN) --- 4318,4329 ---- { HOST_WIDE_INT value = INTVAL (operands[1]); rtx addr = XEXP (operands[0], 0); + rtx op0 = operands[0]; enum rtx_code code = GET_CODE (addr); if ((code == PLUS && GET_CODE (XEXP (addr, 1)) != CONST_INT) || code == MINUS) ! op0 = replace_equiv_address (op0, force_reg (SImode, addr)); operands[1] = gen_reg_rtx (SImode); if (BYTES_BIG_ENDIAN) *************** *** 4362,4370 **** } } ! operands[3] = change_address (operands[0], QImode, ! plus_constant (addr, 1)); ! operands[0] = change_address (operands[0], QImode, NULL_RTX); }" ) --- 4349,4356 ---- } } ! operands[3] = adjust_address (op0, QImode, 1); ! operands[0] = adjust_address (operands[0], QImode, 0); }" ) *************** *** 4550,4567 **** if (GET_CODE (operands[0]) == MEM && !memory_address_p (GET_MODE (operands[0]), XEXP (operands[0], 0))) ! { ! rtx temp = copy_to_reg (XEXP (operands[0], 0)); ! operands[0] = change_address (operands[0], VOIDmode, temp); ! } if (GET_CODE (operands[1]) == MEM && !memory_address_p (GET_MODE (operands[1]), XEXP (operands[1], 0))) ! { ! rtx temp = copy_to_reg (XEXP (operands[1], 0)); ! operands[1] = change_address (operands[1], VOIDmode, temp); ! } } /* Handle loading a large integer during reload */ else if (GET_CODE (operands[1]) == CONST_INT --- 4536,4551 ---- if (GET_CODE (operands[0]) == MEM && !memory_address_p (GET_MODE (operands[0]), XEXP (operands[0], 0))) ! operands[0] ! = replace_equiv_address (operands[0], ! copy_to_reg (XEXP (operands[0], 0))); if (GET_CODE (operands[1]) == MEM && !memory_address_p (GET_MODE (operands[1]), XEXP (operands[1], 0))) ! operands[1] ! = replace_equiv_address (operands[1], ! copy_to_reg (XEXP (operands[1], 0))); } /* Handle loading a large integer during reload */ else if (GET_CODE (operands[1]) == CONST_INT *************** *** 4850,4866 **** if (GET_CODE (operands[0]) == MEM && !memory_address_p (GET_MODE (operands[0]), XEXP (operands[0], 0))) ! { ! rtx temp = copy_to_reg (XEXP (operands[0], 0)); ! operands[0] = change_address (operands[0], VOIDmode, temp); ! } if (GET_CODE (operands[1]) == MEM && !memory_address_p (GET_MODE (operands[1]), XEXP (operands[1], 0))) ! { ! rtx temp = copy_to_reg (XEXP (operands[1], 0)); ! operands[1] = change_address (operands[1], VOIDmode, temp); ! } } /* Handle loading a large integer during reload */ else if (GET_CODE (operands[1]) == CONST_INT --- 4834,4848 ---- if (GET_CODE (operands[0]) == MEM && !memory_address_p (GET_MODE (operands[0]), XEXP (operands[0], 0))) ! operands[0] ! = replace_equiv_address (operands[0], ! copy_to_reg (XEXP (operands[0], 0))); if (GET_CODE (operands[1]) == MEM && !memory_address_p (GET_MODE (operands[1]), XEXP (operands[1], 0))) ! operands[1] ! = replace_equiv_address (operands[1], ! copy_to_reg (XEXP (operands[1], 0))); } /* Handle loading a large integer during reload */ else if (GET_CODE (operands[1]) == CONST_INT *************** *** 5111,5118 **** (set_attr "predicable" "yes") (set_attr "type" "load,store2,*,store2,load,ffarith,ffarith,f_load,f_store,r_mem_f,f_mem_r") ! (set_attr "pool_range" "*,*,*,*,252,*,*,1024,*,*,*") ! (set_attr "neg_pool_range" "*,*,*,*,244,*,*,1012,*,*,*")] ) ;; Software floating point version. This is essentially the same as movdi. --- 5093,5100 ---- (set_attr "predicable" "yes") (set_attr "type" "load,store2,*,store2,load,ffarith,ffarith,f_load,f_store,r_mem_f,f_mem_r") ! (set_attr "pool_range" "*,*,*,*,1020,*,*,1024,*,*,*") ! (set_attr "neg_pool_range" "*,*,*,*,1008,*,*,1008,*,*,*")] ) ;; Software floating point version. This is essentially the same as movdi. *************** *** 5127,5134 **** "* return output_move_double (operands);" [(set_attr "length" "8,8,8") (set_attr "type" "*,load,store2") ! (set_attr "pool_range" "252") ! (set_attr "neg_pool_range" "244")] ) ;;; ??? This should have alternatives for constants. --- 5109,5116 ---- "* return output_move_double (operands);" [(set_attr "length" "8,8,8") (set_attr "type" "*,load,store2") ! (set_attr "pool_range" "1020") ! (set_attr "neg_pool_range" "1008")] ) ;;; ??? This should have alternatives for constants. *************** *** 5202,5208 **** (set_attr "predicable" "yes") (set_attr "type" "ffarith,ffarith,f_load,f_store,r_mem_f,f_mem_r,*") (set_attr "pool_range" "*,*,1024,*,*,*,*") ! (set_attr "neg_pool_range" "*,*,1012,*,*,*,*")] ) --- 5184,5190 ---- (set_attr "predicable" "yes") (set_attr "type" "ffarith,ffarith,f_load,f_store,r_mem_f,f_mem_r,*") (set_attr "pool_range" "*,*,1024,*,*,*,*") ! (set_attr "neg_pool_range" "*,*,1004,*,*,*,*")] ) *************** *** 6656,6662 **** (use (match_operand 2 "" "")) (clobber (reg:SI LR_REGNUM))] "TARGET_THUMB ! && operands[2] == const0_rtx && (GET_CODE (operands[0]) == SYMBOL_REF)" "bl\\t%a0" [(set_attr "length" "4") (set_attr "type" "call")] --- 6638,6645 ---- (use (match_operand 2 "" "")) (clobber (reg:SI LR_REGNUM))] "TARGET_THUMB ! && GET_CODE (operands[0]) == SYMBOL_REF ! && !arm_is_longcall_p (operands[0], INTVAL (operands[2]), 1)" "bl\\t%a0" [(set_attr "length" "4") (set_attr "type" "call")] *************** *** 6669,6675 **** (use (match_operand 3 "" "")) (clobber (reg:SI LR_REGNUM))] "TARGET_THUMB ! && operands[3] == const0_rtx && (GET_CODE (operands[1]) == SYMBOL_REF)" "bl\\t%a1" [(set_attr "length" "4") (set_attr "type" "call")] --- 6652,6659 ---- (use (match_operand 3 "" "")) (clobber (reg:SI LR_REGNUM))] "TARGET_THUMB ! && GET_CODE (operands[1]) == SYMBOL_REF ! && !arm_is_longcall_p (operands[1], INTVAL (operands[3]), 1)" "bl\\t%a1" [(set_attr "length" "4") (set_attr "type" "call")] *************** *** 7375,7381 **** "TARGET_ARM" "* { ! const char * opcodes[4][2] = { {\"cmp\\t%2, %3\;cmp%d5\\t%0, %1\", \"cmp\\t%0, %1\;cmp%d4\\t%2, %3\"}, --- 7359,7365 ---- "TARGET_ARM" "* { ! static const char *const opcodes[4][2] = { {\"cmp\\t%2, %3\;cmp%d5\\t%0, %1\", \"cmp\\t%0, %1\;cmp%d4\\t%2, %3\"}, *************** *** 7410,7416 **** "TARGET_ARM" "* { ! const char * opcodes[4][2] = { {\"cmp\\t%0, %1\;cmp%D4\\t%2, %3\", \"cmp\\t%2, %3\;cmp%D5\\t%0, %1\"}, --- 7394,7400 ---- "TARGET_ARM" "* { ! static const char *const opcodes[4][2] = { {\"cmp\\t%0, %1\;cmp%D4\\t%2, %3\", \"cmp\\t%2, %3\;cmp%D5\\t%0, %1\"}, *************** *** 8298,8303 **** --- 8282,8288 ---- "TARGET_ARM && !BYTES_BIG_ENDIAN && !TARGET_MMU_TRAPS + && !arm_arch4 && REGNO (operands[0]) != FRAME_POINTER_REGNUM && REGNO (operands[1]) != FRAME_POINTER_REGNUM && (GET_CODE (operands[2]) != REG *************** *** 8316,8321 **** --- 8301,8307 ---- "TARGET_ARM && !BYTES_BIG_ENDIAN && !TARGET_MMU_TRAPS + && !arm_arch4 && REGNO (operands[0]) != FRAME_POINTER_REGNUM && REGNO (operands[1]) != FRAME_POINTER_REGNUM && (GET_CODE (operands[2]) != REG *************** *** 8480,8485 **** --- 8466,8472 ---- "TARGET_ARM && !BYTES_BIG_ENDIAN && !TARGET_MMU_TRAPS + && !arm_arch4 && REGNO (operands[0]) != FRAME_POINTER_REGNUM && REGNO (operands[1]) != FRAME_POINTER_REGNUM && REGNO (operands[3]) != FRAME_POINTER_REGNUM" *************** *** 8500,8505 **** --- 8487,8493 ---- "TARGET_ARM && !BYTES_BIG_ENDIAN && !TARGET_MMU_TRAPS + && !arm_arch4 && REGNO (operands[0]) != FRAME_POINTER_REGNUM && REGNO (operands[1]) != FRAME_POINTER_REGNUM && REGNO (operands[3]) != FRAME_POINTER_REGNUM" *************** *** 8563,8568 **** --- 8551,8557 ---- "TARGET_ARM && !BYTES_BIG_ENDIAN && !TARGET_MMU_TRAPS + && !arm_arch4 && REGNO (operands[0]) != REGNO(operands[1]) && (GET_CODE (operands[2]) != REG || REGNO(operands[0]) != REGNO (operands[2]))" *************** *** 9068,9074 **** "TARGET_THUMB" "* making_const_table = TRUE; ! assemble_integer (operands[0], 1, 1); assemble_zeros (3); return \"\"; " --- 9057,9063 ---- "TARGET_THUMB" "* making_const_table = TRUE; ! assemble_integer (operands[0], 1, BITS_PER_WORD, 1); assemble_zeros (3); return \"\"; " *************** *** 9080,9086 **** "TARGET_THUMB" "* making_const_table = TRUE; ! assemble_integer (operands[0], 2, 1); assemble_zeros (2); return \"\"; " --- 9069,9075 ---- "TARGET_THUMB" "* making_const_table = TRUE; ! assemble_integer (operands[0], 2, BITS_PER_WORD, 1); assemble_zeros (2); return \"\"; " *************** *** 9099,9109 **** { union real_extract u; memcpy (&u, &CONST_DOUBLE_LOW (operands[0]), sizeof u); ! assemble_real (u.d, GET_MODE (operands[0])); break; } default: ! assemble_integer (operands[0], 4, 1); break; } return \"\"; --- 9088,9098 ---- { union real_extract u; memcpy (&u, &CONST_DOUBLE_LOW (operands[0]), sizeof u); ! assemble_real (u.d, GET_MODE (operands[0]), BITS_PER_WORD); break; } default: ! assemble_integer (operands[0], 4, BITS_PER_WORD, 1); break; } return \"\"; *************** *** 9123,9133 **** { union real_extract u; memcpy (&u, &CONST_DOUBLE_LOW (operands[0]), sizeof u); ! assemble_real (u.d, GET_MODE (operands[0])); break; } default: ! assemble_integer (operands[0], 8, 1); break; } return \"\"; --- 9112,9122 ---- { union real_extract u; memcpy (&u, &CONST_DOUBLE_LOW (operands[0]), sizeof u); ! assemble_real (u.d, GET_MODE (operands[0]), BITS_PER_WORD); break; } default: ! assemble_integer (operands[0], 8, BITS_PER_WORD, 1); break; } return \"\"; *************** *** 9137,9147 **** ;; Miscellaneous Thumb patterns ! (define_insn "tablejump" [(set (pc) (match_operand:SI 0 "register_operand" "l*r")) (use (label_ref (match_operand 1 "" "")))] "TARGET_THUMB" ! "mov pc, %0" [(set_attr "length" "2")] ) --- 9126,9153 ---- ;; Miscellaneous Thumb patterns ! (define_expand "tablejump" ! [(parallel [(set (pc) (match_operand:SI 0 "register_operand" "l*r")) ! (use (label_ref (match_operand 1 "" "")))])] ! "TARGET_THUMB" ! " ! if (flag_pic) ! { ! /* Hopefully, CSE will eliminate this copy. */ ! rtx reg1 = copy_addr_to_reg (gen_rtx_LABEL_REF (Pmode, operands[1])); ! rtx reg2 = gen_reg_rtx (SImode); ! ! emit_insn (gen_addsi3 (reg2, operands[0], reg1)); ! operands[0] = reg2; ! } ! " ! ) ! ! (define_insn "*thumb_tablejump" [(set (pc) (match_operand:SI 0 "register_operand" "l*r")) (use (label_ref (match_operand 1 "" "")))] "TARGET_THUMB" ! "mov\\t%|pc, %0" [(set_attr "length" "2")] ) *************** *** 9177,9186 **** ;; V5E instructions. (define_insn "prefetch" ! [(unspec_volatile ! [(match_operand:SI 0 "offsettable_memory_operand" "o")] VUNSPEC_PREFETCH)] "TARGET_ARM && arm_arch5e" ! "pld\\t%0") ;; General predication pattern --- 9183,9193 ---- ;; V5E instructions. (define_insn "prefetch" ! [(prefetch (match_operand:SI 0 "address_operand" "p") ! (match_operand:SI 1 "" "") ! (match_operand:SI 2 "" ""))] "TARGET_ARM && arm_arch5e" ! "pld\\t%a0") ;; General predication pattern *************** *** 9192,9194 **** --- 9199,9206 ---- "" ) + (define_insn "prologue_use" + [(unspec:SI [(match_operand:SI 0 "register_operand" "")] UNSPEC_PROLOGUE_USE)] + "" + "%@ %0 needed for prologue" + ) diff -Nrc3pad gcc-3.0.4/gcc/config/arm/coff.h gcc-3.1/gcc/config/arm/coff.h *** gcc-3.0.4/gcc/config/arm/coff.h Mon Apr 16 18:25:42 2001 --- gcc-3.1/gcc/config/arm/coff.h Mon Mar 18 13:45:33 2002 *************** along with GNU CC; see the file COPYING. *** 21,28 **** the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - #include "semi.h" - #include "aout.h" /* Note - it is important that this definition matches the one in tcoff.h */ #undef USER_LABEL_PREFIX --- 21,26 ---- *************** Boston, MA 02111-1307, USA. */ *** 41,52 **** { "marm", "mlittle-endian", "msoft-float", "mapcs-32", "mno-thumb-interwork" } #endif - /* A C expression whose value is nonzero if IDENTIFIER with arguments ARGS - is a valid machine specific attribute for DECL. - The attributes in ATTRIBUTES have previously been assigned to DECL. */ - #define VALID_MACHINE_DECL_ATTRIBUTE(DECL, ATTRIBUTES, IDENTIFIER, ARGS) \ - arm_valid_machine_decl_attribute (DECL, IDENTIFIER, ARGS) - /* This is COFF, but prefer stabs. */ #define SDB_DEBUGGING_INFO --- 39,44 ---- *************** Boston, MA 02111-1307, USA. */ *** 70,90 **** } \ while (0) ! /* A C statement to output something to the assembler file to switch to ! section NAME for object DECL which is either a FUNCTION_DECL, a VAR_DECL or ! NULL_TREE. Some target formats do not support arbitrary sections. Do not ! define this macro in such cases. */ ! #define ASM_OUTPUT_SECTION_NAME(STREAM, DECL, NAME, RELOC) \ ! do \ ! { \ ! if ((DECL) && TREE_CODE (DECL) == FUNCTION_DECL) \ ! fprintf (STREAM, "\t.section %s,\"x\"\n", (NAME)); \ ! else if ((DECL) && DECL_READONLY_SECTION (DECL, RELOC)) \ ! fprintf (STREAM, "\t.section %s,\"\"\n", (NAME)); \ ! else \ ! fprintf (STREAM, "\t.section %s,\"w\"\n", (NAME)); \ ! } \ ! while (0) /* Support the ctors/dtors and other sections. */ --- 62,69 ---- } \ while (0) ! /* Switch into a generic section. */ ! #define TARGET_ASM_NAMED_SECTION default_coff_asm_named_section /* Support the ctors/dtors and other sections. */ *************** Boston, MA 02111-1307, USA. */ *** 93,99 **** /* Define this macro if jump tables (for `tablejump' insns) should be output in the text section, along with the assembler instructions. Otherwise, the readonly data section is used. */ ! #define JUMP_TABLES_IN_TEXT_SECTION 1 #undef READONLY_DATA_SECTION #define READONLY_DATA_SECTION rdata_section --- 72,80 ---- /* Define this macro if jump tables (for `tablejump' insns) should be output in the text section, along with the assembler instructions. Otherwise, the readonly data section is used. */ ! /* We put ARM jump tables in the text section, because it makes the code ! more efficient, but for Thumb it's better to put them out of band. */ ! #define JUMP_TABLES_IN_TEXT_SECTION (TARGET_ARM) #undef READONLY_DATA_SECTION #define READONLY_DATA_SECTION rdata_section *************** Boston, MA 02111-1307, USA. */ *** 108,114 **** given time. */ #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS SUBTARGET_EXTRA_SECTIONS in_rdata, in_ctors, in_dtors #define SUBTARGET_EXTRA_SECTIONS --- 89,95 ---- given time. */ #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS SUBTARGET_EXTRA_SECTIONS in_rdata #define SUBTARGET_EXTRA_SECTIONS *************** Boston, MA 02111-1307, USA. */ *** 117,124 **** #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ RDATA_SECTION_FUNCTION \ - CTORS_SECTION_FUNCTION \ - DTORS_SECTION_FUNCTION \ SUBTARGET_EXTRA_SECTION_FUNCTIONS #define SUBTARGET_EXTRA_SECTION_FUNCTIONS --- 98,103 ---- *************** rdata_section () \ *** 133,191 **** in_section = in_rdata; \ } \ } - - #define CTORS_SECTION_FUNCTION \ - void \ - ctors_section () \ - { \ - if (in_section != in_ctors) \ - { \ - fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP); \ - in_section = in_ctors; \ - } \ - } - - #define DTORS_SECTION_FUNCTION \ - void \ - dtors_section () \ - { \ - if (in_section != in_dtors) \ - { \ - fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP); \ - in_section = in_dtors; \ - } \ - } /* Support the ctors/dtors sections for g++. */ - #define INT_ASM_OP "\t.word\t" - - /* A C statement (sans semicolon) to output an element in the table of - global constructors. */ - #undef ASM_OUTPUT_CONSTRUCTOR - #define ASM_OUTPUT_CONSTRUCTOR(STREAM, NAME) \ - do \ - { \ - ctors_section (); \ - fprintf (STREAM, "%s", INT_ASM_OP); \ - assemble_name (STREAM, NAME); \ - fprintf (STREAM, "\n"); \ - } \ - while (0) - - /* A C statement (sans semicolon) to output an element in the table of - global destructors. */ - #undef ASM_OUTPUT_DESTRUCTOR - #define ASM_OUTPUT_DESTRUCTOR(STREAM, NAME) \ - do \ - { \ - dtors_section (); \ - fprintf (STREAM, "%s", INT_ASM_OP); \ - assemble_name (STREAM, NAME); \ - fprintf (STREAM, "\n"); \ - } \ - while (0) - /* __CTOR_LIST__ and __DTOR_LIST__ must be defined by the linker script. */ #define CTOR_LISTS_DEFINED_EXTERNALLY --- 112,120 ---- *************** dtors_section () \ *** 195,197 **** --- 124,128 ---- /* The ARM development system defines __main. */ #define NAME__MAIN "__gccmain" #define SYMBOL__MAIN __gccmain + + #define SUPPORTS_INIT_PRIORITY 0 diff -Nrc3pad gcc-3.0.4/gcc/config/arm/conix-elf.h gcc-3.1/gcc/config/arm/conix-elf.h *** gcc-3.0.4/gcc/config/arm/conix-elf.h Sun May 13 07:10:07 2001 --- gcc-3.1/gcc/config/arm/conix-elf.h Thu Dec 13 00:27:30 2001 *************** *** 1,6 **** /* Definitions of target machine for GNU compiler, for ARM with ConiX OS. ! Copyright (C) 2000 Free Software Foundation, Inc. Contributed by Philip Blundell This file is part of GNU CC. --- 1,6 ---- /* Definitions of target machine for GNU compiler, for ARM with ConiX OS. ! Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Philip Blundell This file is part of GNU CC. *************** GNU General Public License for more deta *** 18,142 **** 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. */ /* Run-time Target Specification. */ ! #ifndef TARGET_VERSION #define TARGET_VERSION fputs (" (ARM/ELF ConiX)", stderr); - #endif /* Default to using APCS-32 and software floating point. */ ! #ifndef TARGET_DEFAULT #define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32) - #endif - - /* Now we define the strings used to build the spec file. */ - #define STARTFILE_SPEC "crtbegin%O%s crt0%O%s" - - #define ENDFILE_SPEC "crtend%O%s" - - #define USER_LABEL_PREFIX "" - #define LOCAL_LABEL_PREFIX "." - - #define TEXT_SECTION "\t.text" - - /* Debugging */ - #define DWARF2_DEBUGGING_INFO - #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG - - /* Support for Constructors and Destructors. */ - #define READONLY_DATA_SECTION rdata_section - - /* A list of other sections which the compiler might be "in" at any - given time. */ - #define SUBTARGET_EXTRA_SECTIONS in_rdata, - - /* A list of extra section function definitions. */ - #define SUBTARGET_EXTRA_SECTION_FUNCTIONS RDATA_SECTION_FUNCTION - - #define RDATA_SECTION_ASM_OP "\t.section .rodata" - - #define RDATA_SECTION_FUNCTION \ - void \ - rdata_section () \ - { \ - if (in_section != in_rdata) \ - { \ - fprintf (asm_out_file, "%s\n", RDATA_SECTION_ASM_OP); \ - in_section = in_rdata; \ - } \ - } - - #define CTOR_LIST_BEGIN \ - asm (CTORS_SECTION_ASM_OP); \ - func_ptr __CTOR_LIST__[1] = { (func_ptr) (-1) } - - #define CTOR_LIST_END \ - asm (CTORS_SECTION_ASM_OP); \ - func_ptr __CTOR_END__[1] = { (func_ptr) 0 }; - - #define DTOR_LIST_BEGIN \ - asm (DTORS_SECTION_ASM_OP); \ - func_ptr __DTOR_LIST__[1] = { (func_ptr) (-1) } - - #define DTOR_LIST_END \ - asm (DTORS_SECTION_ASM_OP); \ - func_ptr __DTOR_END__[1] = { (func_ptr) 0 }; - - /* A C statement to output something to the assembler file to switch to section - NAME for object DECL which is either a FUNCTION_DECL, a VAR_DECL or - NULL_TREE. Some target formats do not support arbitrary sections. Do not - define this macro in such cases. */ - #define ASM_OUTPUT_SECTION_NAME(STREAM, DECL, NAME, RELOC) \ - do \ - { \ - if ((DECL) && TREE_CODE (DECL) == FUNCTION_DECL) \ - fprintf (STREAM, "\t.section %s,\"ax\",@progbits\n", (NAME)); \ - else if ((DECL) && DECL_READONLY_SECTION (DECL, RELOC)) \ - fprintf (STREAM, "\t.section %s,\"a\"\n", (NAME)); \ - else \ - fprintf (STREAM, "\t.section %s,\"aw\"\n", (NAME)); \ - } \ - while (0) - - /* The ARM development system defines __main. */ - #define NAME__MAIN "__gccmain" - #define SYMBOL__MAIN __gccmain - - #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1) - #define UNIQUE_SECTION_P(DECL) (DECL_ONE_ONLY (DECL)) - #define UNIQUE_SECTION(DECL,RELOC) \ - do \ - { \ - int len; \ - char * name, * string, * prefix; \ - \ - name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (DECL)); \ - \ - if (! DECL_ONE_ONLY (DECL)) \ - { \ - prefix = "."; \ - if (TREE_CODE (DECL) == FUNCTION_DECL) \ - prefix = ".text."; \ - else if (DECL_READONLY_SECTION (DECL, RELOC)) \ - prefix = ".rodata."; \ - else \ - prefix = ".data."; \ - } \ - else if (TREE_CODE (DECL) == FUNCTION_DECL) \ - prefix = ".gnu.linkonce.t."; \ - else if (DECL_READONLY_SECTION (DECL, RELOC)) \ - prefix = ".gnu.linkonce.r."; \ - else \ - prefix = ".gnu.linkonce.d."; \ - \ - len = strlen (name) + strlen (prefix); \ - string = alloca (len + 1); \ - sprintf (string, "%s%s", prefix, name); \ - \ - DECL_SECTION_NAME (DECL) = build_string (len, string); \ - } \ - while (0) #ifndef CPP_APCS_PC_DEFAULT_SPEC #define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__" --- 18,35 ---- 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. */ ! ! /* elfos.h should have already been included. Now just override ! any conflicting definitions and add any extras. */ /* Run-time Target Specification. */ ! #undef TARGET_VERSION #define TARGET_VERSION fputs (" (ARM/ELF ConiX)", stderr); /* Default to using APCS-32 and software floating point. */ ! #undef TARGET_DEFAULT #define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32) #ifndef CPP_APCS_PC_DEFAULT_SPEC #define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__" *************** func_ptr __DTOR_END__[1] = { (func_ptr) *** 146,153 **** #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm7tdmi #endif #define CPP_PREDEFINES \ ! "-D__arm__ -D__CONIX__ -Acpu=arm -Amachine=arm -D__ELF__" ! ! /* Now get the routine arm-elf definitions. */ ! #include "arm/elf.h" --- 39,44 ---- #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm7tdmi #endif + #undef CPP_PREDEFINES #define CPP_PREDEFINES \ ! "-D__arm__ -D__CONIX__ -D__ELF__" diff -Nrc3pad gcc-3.0.4/gcc/config/arm/crti.asm gcc-3.1/gcc/config/arm/crti.asm *** gcc-3.0.4/gcc/config/arm/crti.asm Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/arm/crti.asm Thu Nov 29 16:04:14 2001 *************** *** 0 **** --- 1,76 ---- + # Copyright (C) 2001 Free Software Foundation, Inc. + # Written By Nick Clifton + # + # This file is free software; you can redistribute it and/or modify it + # under the terms of the GNU General Public License as published by the + # Free Software Foundation; either version 2, or (at your option) any + # later version. + # + # In addition to the permissions in the GNU General Public License, the + # Free Software Foundation gives you unlimited permission to link the + # compiled version of this file with other programs, and to distribute + # those programs without any restriction coming from the use of this + # file. (The General Public License restrictions do apply in other + # respects; for example, they cover modification of the file, and + # distribution when not linked into another program.) + # + # This file 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; see the file COPYING. If not, write to + # the Free Software Foundation, 59 Temple Place - Suite 330, + # Boston, MA 02111-1307, USA. + # + # As a special exception, if you link this library with files + # compiled with GCC to produce an executable, this does not cause + # the resulting executable to be covered by the GNU General Public License. + # This exception does not however invalidate any other reasons why + # the executable file might be covered by the GNU General Public License. + # + + # This file just make a stack frame for the contents of the .fini and + # .init sections. Users may put any desired instructions in those + # sections. + + # Note - this macro is complimented by the FUNC_END macro + # in crtn.asm. If you change this macro you must also change + # that macro match. + .macro FUNC_START + #ifdef __thumb__ + .thumb + + push {r4, r5, r6, r7, lr} + #else + .arm + # Create a stack frame and save any call-preserved registers + mov ip, sp + stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, ip, lr, pc} + sub fp, ip, #4 + #endif + .endm + + .file "crti.asm" + + .section ".init" + .align 2 + .global _init + #ifdef __thumb__ + .thumb_func + #endif + _init: + FUNC_START + + + .section ".fini" + .align 2 + .global _fini + #ifdef __thumb__ + .thumb_func + #endif + _fini: + FUNC_START + + # end of crti.asm diff -Nrc3pad gcc-3.0.4/gcc/config/arm/crtn.asm gcc-3.1/gcc/config/arm/crtn.asm *** gcc-3.0.4/gcc/config/arm/crtn.asm Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/arm/crtn.asm Fri Sep 14 10:19:30 2001 *************** *** 0 **** --- 1,81 ---- + # Copyright (C) 2001 Free Software Foundation, Inc. + # Written By Nick Clifton + # + # This file is free software; you can redistribute it and/or modify it + # under the terms of the GNU General Public License as published by the + # Free Software Foundation; either version 2, or (at your option) any + # later version. + # + # In addition to the permissions in the GNU General Public License, the + # Free Software Foundation gives you unlimited permission to link the + # compiled version of this file with other programs, and to distribute + # those programs without any restriction coming from the use of this + # file. (The General Public License restrictions do apply in other + # respects; for example, they cover modification of the file, and + # distribution when not linked into another program.) + # + # This file 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; see the file COPYING. If not, write to + # the Free Software Foundation, 59 Temple Place - Suite 330, + # Boston, MA 02111-1307, USA. + # + # As a special exception, if you link this library with files + # compiled with GCC to produce an executable, this does not cause + # the resulting executable to be covered by the GNU General Public License. + # This exception does not however invalidate any other reasons why + # the executable file might be covered by the GNU General Public License. + # + + # This file just makes sure that the .fini and .init sections do in + # fact return. Users may put any desired instructions in those sections. + # This file is the last thing linked into any executable. + + # Note - this macro is complimented by the FUNC_START macro + # in crti.asm. If you change this macro you must also change + # that macro match. + # + # Note - we do not try any fancy optimisations of the return + # sequences here, it is just not worth it. Instead keep things + # simple. Restore all the save resgisters, including the link + # register and then perform the correct function return instruction. + .macro FUNC_END + #ifdef __thumb__ + .thumb + + pop {r4, r5, r6, r7} + pop {r3} + mov lr, r3 + #else + .arm + + ldmdb fp, {r4, r5, r6, r7, r8, r9, sl, fp, sp, lr} + #endif + + #if defined __THUMB_INTERWORK__ || defined __thumb__ + bx lr + #else + #ifdef __APCS_26__ + movs pc, lr + #else + mov pc, lr + #endif + #endif + .endm + + + .file "crtn.asm" + + .section ".init" + ;; + FUNC_END + + .section ".fini" + ;; + FUNC_END + + # end of crtn.asm diff -Nrc3pad gcc-3.0.4/gcc/config/arm/ecos-elf.h gcc-3.1/gcc/config/arm/ecos-elf.h *** gcc-3.0.4/gcc/config/arm/ecos-elf.h Wed Dec 16 21:01:33 1998 --- gcc-3.1/gcc/config/arm/ecos-elf.h Fri Sep 14 10:19:30 2001 *************** *** 1,5 **** /* Definitions for ecos based ARM systems using ELF ! Copyright (C) 1998 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,5 ---- /* Definitions for ecos based ARM systems using ELF ! Copyright (C) 1998, 2001 Free Software Foundation, Inc. This file is part of GNU CC. *************** the Free Software Foundation, 59 Temple *** 19,29 **** Boston, MA 02111-1307, USA. */ /* Run-time Target Specification. */ #define TARGET_VERSION fputs (" (ARM/ELF Ecos)", stderr); #define HAS_INIT_SECTION - #include "unknown-elf.h" - #undef INVOKE_main --- 19,28 ---- Boston, MA 02111-1307, USA. */ /* Run-time Target Specification. */ + #undef TARGET_VERSION #define TARGET_VERSION fputs (" (ARM/ELF Ecos)", stderr); #define HAS_INIT_SECTION #undef INVOKE_main diff -Nrc3pad gcc-3.0.4/gcc/config/arm/elf.h gcc-3.1/gcc/config/arm/elf.h *** gcc-3.0.4/gcc/config/arm/elf.h Mon Apr 16 18:25:42 2001 --- gcc-3.1/gcc/config/arm/elf.h Mon Mar 18 13:45:32 2002 *************** along with GNU CC; see the file COPYING. *** 22,38 **** the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ! ! #define OBJECT_FORMAT_ELF #ifndef LOCAL_LABEL_PREFIX #define LOCAL_LABEL_PREFIX "." #endif - #ifndef USER_LABEL_PREFIX - #define USER_LABEL_PREFIX "" - #endif - #ifndef SUBTARGET_CPP_SPEC #define SUBTARGET_CPP_SPEC "-D__ELF__" #endif --- 22,35 ---- the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ! #ifndef OBJECT_FORMAT_ELF ! #error elf.h included before elfos.h ! #endif #ifndef LOCAL_LABEL_PREFIX #define LOCAL_LABEL_PREFIX "." #endif #ifndef SUBTARGET_CPP_SPEC #define SUBTARGET_CPP_SPEC "-D__ELF__" #endif *************** Boston, MA 02111-1307, USA. */ *** 58,87 **** %(subtarget_extra_asm_spec)" #endif ! /* The following macro defines the format used to output the second ! operand of the .type assembler directive. Different svr4 assemblers ! expect various different forms for this operand. The one given here ! is just a default. You may need to override it in your machine- ! specific tm.h file (depending upon the particulars of your assembler). */ #define TYPE_OPERAND_FMT "%s" ! /* Write the extra assembler code needed to declare a function's result. ! Most svr4 assemblers don't require any special declaration of the ! result value, but there are exceptions. */ ! #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 in an ELF object file under SVR4. These macros also output ! the starting labels for the relevant functions/objects. */ ! #define TYPE_ASM_OP "\t.type\t" ! #define SIZE_ASM_OP "\t.size\t" ! ! /* Write the extra assembler code needed to declare a function properly. ! Some svr4 assemblers need to also have something extra said about the ! function's return value. We allow for that here. */ #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ do \ { \ --- 55,67 ---- %(subtarget_extra_asm_spec)" #endif ! /* The ARM uses @ are a comment character so we need to redefine ! TYPE_OPERAND_FMT. */ ! #undef TYPE_OPERAND_FMT #define TYPE_OPERAND_FMT "%s" ! /* We might need a ARM specific header to function declarations. */ ! #undef ASM_DECLARE_FUNCTION_NAME #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ do \ { \ *************** Boston, MA 02111-1307, USA. */ *** 96,151 **** } \ while (0) ! /* Write the extra assembler code needed to declare an object properly. */ ! #define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL) \ ! do \ ! { \ ! fprintf (FILE, "%s", TYPE_ASM_OP); \ ! assemble_name (FILE, NAME); \ ! putc (',', 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, "%s", SIZE_ASM_OP); \ ! assemble_name (FILE, NAME); \ ! putc (',', FILE); \ ! fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, \ ! int_size_in_bytes (TREE_TYPE (DECL))); \ ! fputc ('\n', FILE); \ ! } \ ! 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. */ ! #define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END) \ ! do \ ! { \ ! const 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, "%s", SIZE_ASM_OP); \ ! assemble_name (FILE, name); \ ! putc (',', FILE); \ ! fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, \ ! int_size_in_bytes (TREE_TYPE (DECL))); \ ! fputc ('\n', FILE); \ ! } \ ! } \ ! while (0) ! ! /* This is how to declare the size of a function. */ #define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL) \ do \ { \ --- 76,83 ---- } \ while (0) ! /* We might need an ARM specific trailer for function declarations. */ ! #undef ASM_DECLARE_FUNCTION_SIZE #define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL) \ do \ { \ *************** Boston, MA 02111-1307, USA. */ *** 171,177 **** /* Define this macro if jump tables (for `tablejump' insns) should be output in the text section, along with the assembler instructions. Otherwise, the readonly data section is used. */ ! #define JUMP_TABLES_IN_TEXT_SECTION 1 #ifndef LINK_SPEC #define LINK_SPEC "%{mbig-endian:-EB} -X" --- 103,111 ---- /* Define this macro if jump tables (for `tablejump' insns) should be output in the text section, along with the assembler instructions. Otherwise, the readonly data section is used. */ ! /* We put ARM jump tables in the text section, because it makes the code ! more efficient, but for Thumb it's better to put them out of band. */ ! #define JUMP_TABLES_IN_TEXT_SECTION (TARGET_ARM) #ifndef LINK_SPEC #define LINK_SPEC "%{mbig-endian:-EB} -X" *************** Boston, MA 02111-1307, USA. */ *** 190,201 **** #define MULTILIB_DEFAULTS \ { "marm", "mlittle-endian", "msoft-float", "mapcs-32", "mno-thumb-interwork", "fno-leading-underscore" } #endif - - /* A C expression whose value is nonzero if IDENTIFIER with arguments ARGS - is a valid machine specific attribute for DECL. - The attributes in ATTRIBUTES have previously been assigned to DECL. */ - #define VALID_MACHINE_DECL_ATTRIBUTE(DECL, ATTRIBUTES, IDENTIFIER, ARGS) \ - arm_valid_machine_decl_attribute (DECL, IDENTIFIER, ARGS) /* This outputs a lot of .req's to define alias for various registers. --- 124,129 ---- *************** Boston, MA 02111-1307, USA. */ *** 213,219 **** #endif /* Output an internal label definition. */ ! #ifndef ASM_OUTPUT_INTERNAL_LABEL #define ASM_OUTPUT_INTERNAL_LABEL(STREAM, PREFIX, NUM) \ do \ { \ --- 141,147 ---- #endif /* Output an internal label definition. */ ! #undef ASM_OUTPUT_INTERNAL_LABEL #define ASM_OUTPUT_INTERNAL_LABEL(STREAM, PREFIX, NUM) \ do \ { \ *************** Boston, MA 02111-1307, USA. */ *** 222,370 **** extern rtx arm_target_insn; \ \ if (arm_ccfsm_state == 3 && arm_target_label == (NUM) \ ! && !strcmp (PREFIX, "L")) \ { \ arm_ccfsm_state = 0; \ arm_target_insn = NULL; \ } \ ! ASM_GENERATE_INTERNAL_LABEL (s, (PREFIX), (NUM)); \ ! ASM_OUTPUT_LABEL (STREAM, s); \ } \ while (0) - #endif ! /* Support the ctors/dtors and other sections. */ ! ! /* Define the pseudo-ops used to switch to the .ctors and .dtors sections. ! ! Note that we want to give these sections the SHF_WRITE attribute ! because these sections will actually contain data (i.e. tables of ! addresses of functions in the current root executable or shared library ! file) and, in the case of a shared library, the relocatable addresses ! will have to be properly resolved/relocated (and then written into) by ! the dynamic linker when it actually attaches the given shared library ! to the executing process. (Note that on SVR4, you may wish to use the ! `-z text' option to the ELF linker, when building a shared library, as ! an additional check that you are doing everything right. But if you do ! use the `-z text' option when building a shared library, you will get ! errors unless the .ctors and .dtors sections are marked as writable ! via the SHF_WRITE attribute.) */ ! #ifndef CTORS_SECTION_ASM_OP ! #define CTORS_SECTION_ASM_OP "\t.section\t.ctors,\"aw\"" ! #endif ! ! #ifndef DTORS_SECTION_ASM_OP ! #define DTORS_SECTION_ASM_OP "\t.section\t.dtors,\"aw\"" ! #endif ! ! /* A list of other sections which the compiler might be "in" at any ! given time. */ ! #ifndef SUBTARGET_EXTRA_SECTIONS ! #define SUBTARGET_EXTRA_SECTIONS ! #endif ! ! #ifndef EXTRA_SECTIONS ! #define EXTRA_SECTIONS SUBTARGET_EXTRA_SECTIONS in_ctors, in_dtors ! #endif ! ! /* A list of extra section function definitions. */ ! #ifndef SUBTARGET_EXTRA_SECTION_FUNCTIONS ! #define SUBTARGET_EXTRA_SECTION_FUNCTIONS ! #endif ! ! #ifndef EXTRA_SECTION_FUNCTIONS ! #define EXTRA_SECTION_FUNCTIONS \ ! SUBTARGET_EXTRA_SECTION_FUNCTIONS \ ! CTORS_SECTION_FUNCTION \ ! DTORS_SECTION_FUNCTION ! #endif ! ! #ifndef CTORS_SECTION_FUNCTION ! #define CTORS_SECTION_FUNCTION \ ! void \ ! ctors_section () \ ! { \ ! if (in_section != in_ctors) \ ! { \ ! fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP); \ ! in_section = in_ctors; \ ! } \ ! } ! #endif ! ! #ifndef DTORS_SECTION_FUNCTION ! #define DTORS_SECTION_FUNCTION \ ! void \ ! dtors_section () \ ! { \ ! if (in_section != in_dtors) \ { \ ! fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP); \ ! in_section = in_dtors; \ } \ - } - #endif - - /* A C statement to output something to the assembler file to switch to - section NAME for object DECL which is either a FUNCTION_DECL, a VAR_DECL - or NULL_TREE. */ - #undef ASM_OUTPUT_SECTION_NAME - #define ASM_OUTPUT_SECTION_NAME(STREAM, DECL, NAME, RELOC) \ - do \ - { \ - if ((DECL) && TREE_CODE (DECL) == FUNCTION_DECL) \ - fprintf (STREAM, "\t.section %s,\"ax\",%%progbits\n", NAME); \ - else if ((DECL) && DECL_READONLY_SECTION (DECL, RELOC)) \ - fprintf (STREAM, "\t.section %s,\"a\"\n", NAME); \ - else if (! strncmp (NAME, ".bss", 4)) \ - fprintf (STREAM, "\t.section %s,\"aw\",%%nobits\n", NAME); \ - else \ - fprintf (STREAM, "\t.section %s,\"aw\"\n", NAME); \ - } \ - while (0) - - /* Support the ctors/dtors sections for g++. */ - #ifndef INT_ASM_OP - #define INT_ASM_OP "\t.word\t" - #endif - - /* A C statement (sans semicolon) to output an element in the table of - global constructors. */ - #ifndef ASM_OUTPUT_CONSTRUCTOR - #define ASM_OUTPUT_CONSTRUCTOR(STREAM, NAME) \ - do \ - { \ - ctors_section (); \ - fprintf (STREAM, "%s", INT_ASM_OP); \ - assemble_name (STREAM, NAME); \ - fprintf (STREAM, "\n"); \ - } \ - while (0) - #endif - - /* A C statement (sans semicolon) to output an element in the table of - global destructors. */ - #ifndef ASM_OUTPUT_DESTRUCTOR - #define ASM_OUTPUT_DESTRUCTOR(STREAM, NAME) \ - do \ - { \ - dtors_section (); \ - fprintf (STREAM, "%s", INT_ASM_OP); \ - assemble_name (STREAM, NAME); \ - fprintf (STREAM, "\n"); \ - } \ - while (0) - #endif - - /* This is how we tell the assembler that a symbol is weak. */ - - #define ASM_WEAKEN_LABEL(FILE, NAME) \ - do \ - { \ - fputs ("\t.weak\t", FILE); \ - assemble_name (FILE, NAME); \ - fputc ('\n', FILE); \ - } \ while (0) /* For PIC code we need to explicitly specify (PLT) and (GOT) relocs. */ --- 150,176 ---- extern rtx arm_target_insn; \ \ if (arm_ccfsm_state == 3 && arm_target_label == (NUM) \ ! && !strcmp (PREFIX, "L")) \ { \ arm_ccfsm_state = 0; \ arm_target_insn = NULL; \ } \ ! ASM_GENERATE_INTERNAL_LABEL (s, (PREFIX), (NUM)); \ ! ASM_OUTPUT_LABEL (STREAM, s); \ } \ while (0) ! #undef TARGET_ASM_NAMED_SECTION ! #define TARGET_ASM_NAMED_SECTION arm_elf_asm_named_section ! ! #undef ASM_OUTPUT_ALIGNED_COMMON ! #define ASM_OUTPUT_ALIGNED_COMMON(STREAM, NAME, SIZE, ALIGN) \ ! do \ { \ ! fprintf (STREAM, "\t.comm\t"); \ ! assemble_name (STREAM, NAME); \ ! fprintf (STREAM, ", %d, %d\n", SIZE, ALIGN); \ } \ while (0) /* For PIC code we need to explicitly specify (PLT) and (GOT) relocs. */ *************** dtors_section () \ *** 390,393 **** } \ while (0) ! #include "aout.h" --- 196,199 ---- } \ while (0) ! #define SUPPORTS_INIT_PRIORITY 1 diff -Nrc3pad gcc-3.0.4/gcc/config/arm/freebsd.h gcc-3.1/gcc/config/arm/freebsd.h *** gcc-3.0.4/gcc/config/arm/freebsd.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/arm/freebsd.h Thu Dec 13 00:27:30 2001 *************** *** 0 **** --- 1,57 ---- + /* Definitions for StrongARM running FreeBSD using the ELF format + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by David E. O'Brien and BSDi. + + 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. */ + + + #undef SUBTARGET_CPP_SPEC + #define SUBTARGET_CPP_SPEC FBSD_CPP_SPEC + + + /************************[ Target stuff ]***********************************/ + + /* Define the actual types of some ANSI-mandated types. + Needs to agree with . GCC defaults come from c-decl.c, + c-common.c, and config//.h. */ + + /* arm.h gets this wrong for FreeBSD. We use the GCC defaults instead. */ + + #undef SIZE_TYPE + #define SIZE_TYPE "unsigned int" + + #undef PTRDIFF_TYPE + #define PTRDIFF_TYPE "int" + + /* We use the GCC defaults here. */ + #undef WCHAR_TYPE + + #undef WCHAR_UNSIGNED + #define WCHAR_UNSIGNED 0 + + #undef WCHAR_TYPE_SIZE + #define WCHAR_TYPE_SIZE 32 + + #undef SUBTARGET_CPU_DEFAULT + #define SUBTARGET_CPU_DEFAULT TARGET_CPU_strongarm + + #undef ARM_OS_NAME + #define ARM_OS_NAME "FreeBSD" + + #undef TARGET_VERSION + #define TARGET_VERSION fprintf (stderr, " (FreeBSD/StrongARM ELF)"); diff -Nrc3pad gcc-3.0.4/gcc/config/arm/lib1funcs.asm gcc-3.1/gcc/config/arm/lib1funcs.asm *** gcc-3.0.4/gcc/config/arm/lib1funcs.asm Tue Sep 18 10:09:55 2001 --- gcc-3.1/gcc/config/arm/lib1funcs.asm Tue Sep 18 10:02:37 2001 *************** *** 1,4 **** ! @ libgcc1 routines for ARM cpu. @ Division routines, written by Richard Earnshaw, (rearnsha@armltd.co.uk) /* Copyright 1995, 1996, 1998, 1999, 2000 Free Software Foundation, Inc. --- 1,4 ---- ! @ libgcc routines for ARM cpu. @ Division routines, written by Richard Earnshaw, (rearnsha@armltd.co.uk) /* Copyright 1995, 1996, 1998, 1999, 2000 Free Software Foundation, Inc. diff -Nrc3pad gcc-3.0.4/gcc/config/arm/linux-elf.h gcc-3.1/gcc/config/arm/linux-elf.h *** gcc-3.0.4/gcc/config/arm/linux-elf.h Wed Feb 13 21:20:11 2002 --- gcc-3.1/gcc/config/arm/linux-elf.h Mon Apr 15 20:27:24 2002 *************** *** 1,5 **** /* Definitions for ARM running Linux-based GNU systems using ELF ! Copyright (C) 1993, 1994, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Philip Blundell --- 1,5 ---- /* Definitions for ARM running Linux-based GNU systems using ELF ! Copyright (C) 1993, 1994, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Philip Blundell *************** along with this program; see the file CO *** 20,44 **** the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Run-time Target Specification. */ #define TARGET_VERSION fputs (" (ARM GNU/Linux with ELF)", stderr); /* Do not assume anything about header files. */ #define NO_IMPLICIT_EXTERN_C /* Default is to use APCS-32 mode. */ #define TARGET_DEFAULT (ARM_FLAG_APCS_32 | ARM_FLAG_MMU_TRAPS) #define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux -p" #define MULTILIB_DEFAULTS \ { "marm", "mlittle-endian", "mhard-float", "mapcs-32", "mno-thumb-interwork" } - #define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__" ! /* This was defined in linux.h. Define it here also. */ ! #undef DEFAULT_VTABLE_THUNKS ! #define DEFAULT_VTABLE_THUNKS 1 ! /* Handle #pragma weak and #pragma pack. */ ! #define HANDLE_SYSV_PRAGMA /* Now we define the strings used to build the spec file. */ #define LIB_SPEC \ --- 20,50 ---- the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + /* elfos.h should have already been included. Now just override + any conflicting definitions and add any extras. */ + /* Run-time Target Specification. */ + #undef TARGET_VERSION #define TARGET_VERSION fputs (" (ARM GNU/Linux with ELF)", stderr); /* Do not assume anything about header files. */ #define NO_IMPLICIT_EXTERN_C /* Default is to use APCS-32 mode. */ + #undef TARGET_DEFAULT #define TARGET_DEFAULT (ARM_FLAG_APCS_32 | ARM_FLAG_MMU_TRAPS) + #define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux -p" + + #undef MULTILIB_DEFAULTS #define MULTILIB_DEFAULTS \ { "marm", "mlittle-endian", "mhard-float", "mapcs-32", "mno-thumb-interwork" } ! #define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__" ! /* The GNU C++ standard library requires that these macros be defined. */ ! #undef CPLUSPLUS_CPP_SPEC ! #define CPLUSPLUS_CPP_SPEC "-D_GNU_SOURCE %(cpp)" /* Now we define the strings used to build the spec file. */ #define LIB_SPEC \ *************** Boston, MA 02111-1307, USA. */ *** 46,52 **** %{!shared: %{pthread:-lpthread} \ %{profile:-lc_p} %{!profile: -lc}}" - #define LIBGCC_SPEC "%{msoft-float:-lfloat} -lgcc" /* Provide a STARTFILE_SPEC appropriate for GNU/Linux. Here we add --- 52,57 ---- *************** Boston, MA 02111-1307, USA. */ *** 54,59 **** --- 59,65 ---- provides part of the support for getting C++ file-scope static object constructed before entering `main'. */ + #undef STARTFILE_SPEC #define STARTFILE_SPEC \ "%{!shared: \ %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} \ *************** Boston, MA 02111-1307, USA. */ *** 67,75 **** --- 73,83 ---- object constructed before entering `main', followed by a normal GNU/Linux "finalizer" file, `crtn.o'. */ + #undef ENDFILE_SPEC #define ENDFILE_SPEC \ "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s" + #undef LINK_SPEC #define LINK_SPEC "%{h*} %{version:-v} \ %{b} %{Wl,*:%*} \ %{static:-Bstatic} \ *************** Boston, MA 02111-1307, USA. */ *** 83,256 **** #undef CPP_PREDEFINES #define CPP_PREDEFINES \ ! "-Dunix -Dlinux -D__ELF__ \ ! -Asystem=unix -Asystem=posix -Acpu=arm -Amachine=arm" /* Allow #sccs in preprocessor. */ #define SCCS_DIRECTIVE - #define USER_LABEL_PREFIX "" /* For ELF the default is no underscores */ - #define LOCAL_LABEL_PREFIX "." - - #define IDENT_ASM_OP "\t.ident\t" - - /* Output #ident as a .ident. */ - #define ASM_OUTPUT_IDENT(FILE, NAME) \ - fprintf (FILE, "%s\"%s\"\n", IDENT_ASM_OP, NAME); - - /* Support const sections and the ctors and dtors sections for g++. - Note that there appears to be two different ways to support const - sections at the moment. You can either #define the symbol - READONLY_DATA_SECTION (giving it some code which switches to the - readonly data section) or else you can #define the symbols - EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS, SELECT_SECTION, and - SELECT_RTX_SECTION. We do both here just to be on the safe side. */ - #define USE_CONST_SECTION 1 - - /* Support for Constructors and Destructors. */ - #define READONLY_DATA_SECTION() const_section () - - /* A default list of other sections which we might be "in" at any given - time. For targets that use additional sections (e.g. .tdesc) you - should override this definition in the target-specific file which - includes this file. */ - #define SUBTARGET_EXTRA_SECTIONS in_const, - - /* A default list of extra section function definitions. For targets - that use additional sections (e.g. .tdesc) you should override this - definition in the target-specific file which includes this file. */ - #define SUBTARGET_EXTRA_SECTION_FUNCTIONS CONST_SECTION_FUNCTION - - #define CONST_SECTION_ASM_OP "\t.section\t.rodata" - - #define CONST_SECTION_FUNCTION \ - void \ - const_section () \ - { \ - if (!USE_CONST_SECTION) \ - text_section (); \ - else if (in_section != in_const) \ - { \ - fprintf (asm_out_file, "%s\n", CONST_SECTION_ASM_OP); \ - in_section = in_const; \ - } \ - } - - /* Switch into a generic section. - This is currently only used to support section attributes. - - We make the section read-only and executable for a function decl, - read-only for a const data decl, and writable for a non-const data decl. */ - #define ASM_OUTPUT_SECTION_NAME(FILE, DECL, NAME, RELOC) \ - fprintf (FILE, ".section\t%s,\"%s\",%%progbits\n", NAME, \ - (DECL) && TREE_CODE (DECL) == FUNCTION_DECL ? "ax" : \ - (DECL) && DECL_READONLY_SECTION (DECL, RELOC) ? "a" : "aw") - - /* A C statement or statements to switch to the appropriate - section for output of DECL. DECL is either a `VAR_DECL' node - or a constant of some sort. RELOC indicates whether forming - the initial value of DECL requires link-time relocations. */ - #define SELECT_SECTION(DECL,RELOC) \ - { \ - if (TREE_CODE (DECL) == STRING_CST) \ - { \ - if (! flag_writable_strings) \ - const_section (); \ - else \ - data_section (); \ - } \ - else if (TREE_CODE (DECL) == VAR_DECL) \ - { \ - if ((flag_pic && RELOC) \ - || !TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL) \ - || !DECL_INITIAL (DECL) \ - || (DECL_INITIAL (DECL) != error_mark_node \ - && !TREE_CONSTANT (DECL_INITIAL (DECL)))) \ - data_section (); \ - else \ - const_section (); \ - } \ - else \ - const_section (); \ - } - - #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1) - #define UNIQUE_SECTION_P(DECL) (DECL_ONE_ONLY (DECL)) - - #define UNIQUE_SECTION(DECL, RELOC) \ - do \ - { \ - int len; \ - char * name; \ - char * string; \ - char * prefix; \ - \ - name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (DECL)); \ - \ - if (! DECL_ONE_ONLY (DECL)) \ - { \ - prefix = "."; \ - if (TREE_CODE (DECL) == FUNCTION_DECL) \ - prefix = ".text."; \ - else if (DECL_READONLY_SECTION (DECL, RELOC)) \ - prefix = ".rodata."; \ - else \ - prefix = ".data."; \ - } \ - else if (TREE_CODE (DECL) == FUNCTION_DECL) \ - prefix = ".gnu.linkonce.t."; \ - else if (DECL_READONLY_SECTION (DECL, RELOC)) \ - prefix = ".gnu.linkonce.r."; \ - else \ - prefix = ".gnu.linkonce.d."; \ - \ - len = strlen (name) + strlen (prefix); \ - string = alloca (len + 1); \ - sprintf (string, "%s%s", prefix, name); \ - \ - DECL_SECTION_NAME (DECL) = build_string (len, string); \ - } \ - while (0) - - /* A C statement or statements to switch to the appropriate - section for output of RTX in mode MODE. RTX is some kind - of constant in RTL. The argument MODE is redundant except - in the case of a `const_int' rtx. Currently, these always - go into the const section. */ - #define SELECT_RTX_SECTION(MODE,RTX) const_section () - - /* On svr4, we *do* have support for the .init and .fini sections, and we - can put stuff in there to be executed before and after `main'. We let - crtstuff.c and other files know this by defining the following symbols. - The definitions say how to change sections to the .init and .fini - sections. This is the same for all known svr4 assemblers. */ - #define INIT_SECTION_ASM_OP "\t.section\t.init" - #define FINI_SECTION_ASM_OP "\t.section\t.fini" - - - /* This is how we tell the assembler that a symbol is weak. */ - #define ASM_WEAKEN_LABEL(FILE,NAME) \ - do { fputs ("\t.weak\t", FILE); assemble_name (FILE, NAME); \ - fputc ('\n', FILE); } while (0) - /* This is how we tell the assembler that two symbols have the same value. */ ! ! #define ASM_OUTPUT_DEF(FILE,NAME1,NAME2) \ ! do { assemble_name (FILE, NAME1); \ ! fputs (" = ", FILE); \ ! assemble_name (FILE, NAME2); \ ! fputc ('\n', FILE); } while (0) ! ! /* Make DWARF2 an option, but keep DBX as the default for now. ! Use -gdwarf-2 to turn on DWARF2. */ ! #define DWARF2_DEBUGGING_INFO ! #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG ! ! /* Get the standard ELF stabs definitions. */ ! #include "dbxelf.h" ! ! #include "arm/elf.h" ! #include "arm/linux-gas.h" /* NWFPE always understands FPA instructions. */ #undef FP_DEFAULT --- 91,112 ---- #undef CPP_PREDEFINES #define CPP_PREDEFINES \ ! "-Dunix -D__gnu_linux__ -Dlinux -D__ELF__ \ ! -Asystem=unix -Asystem=posix" /* Allow #sccs in preprocessor. */ #define SCCS_DIRECTIVE /* This is how we tell the assembler that two symbols have the same value. */ ! #define ASM_OUTPUT_DEF(FILE, NAME1, NAME2) \ ! do \ ! { \ ! assemble_name (FILE, NAME1); \ ! fputs (" = ", FILE); \ ! assemble_name (FILE, NAME2); \ ! fputc ('\n', FILE); \ ! } \ ! while (0) /* NWFPE always understands FPA instructions. */ #undef FP_DEFAULT *************** const_section () \ *** 265,271 **** #undef CC1_SPEC #define CC1_SPEC "%{profile:-p}" - - /* The GNU C++ standard library requires that these macros be defined. */ - #undef CPLUSPLUS_CPP_SPEC - #define CPLUSPLUS_CPP_SPEC "-D_GNU_SOURCE %(cpp)" --- 121,123 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/arm/linux-gas.h gcc-3.1/gcc/config/arm/linux-gas.h *** gcc-3.0.4/gcc/config/arm/linux-gas.h Tue Jan 2 13:38:41 2001 --- gcc-3.1/gcc/config/arm/linux-gas.h Fri Sep 14 10:19:30 2001 *************** along with this program; see the file CO *** 20,43 **** the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ! /* ! * We are using GAS, so stabs should work. ! */ ! ! #ifndef DBX_DEBUGGING_INFO ! #define DBX_DEBUGGING_INFO 1 ! #endif ! ! /* ! * This is how we tell the assembler that a symbol is weak. GAS always ! * supports weak symbols. ! */ ! ! #define ASM_WEAKEN_LABEL(FILE,NAME) \ ! do { fputs ("\t.weak\t", FILE); assemble_name (FILE, NAME); \ ! fputc ('\n', FILE); } while (0) ! /* This is used in ASM_FILE_START */ #undef ARM_OS_NAME #define ARM_OS_NAME "Linux" --- 20,29 ---- the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ! /* This is how we tell the assembler that a symbol is weak. ! GAS always supports weak symbols. */ ! /* This is used in ASM_FILE_START. */ #undef ARM_OS_NAME #define ARM_OS_NAME "Linux" diff -Nrc3pad gcc-3.0.4/gcc/config/arm/netbsd.h gcc-3.1/gcc/config/arm/netbsd.h *** gcc-3.0.4/gcc/config/arm/netbsd.h Mon Jan 15 18:13:26 2001 --- gcc-3.1/gcc/config/arm/netbsd.h Tue Feb 5 19:01:48 2002 *************** *** 1,4 **** ! /* NetBSD/arm (RiscBSD) version. Copyright (C) 1993, 1994, 1997, 1998 Free Software Foundation, Inc. Contributed by Mark Brinicombe (amb@physig.ph.kcl.ac.uk) --- 1,4 ---- ! /* NetBSD/arm a.out version. Copyright (C) 1993, 1994, 1997, 1998 Free Software Foundation, Inc. Contributed by Mark Brinicombe (amb@physig.ph.kcl.ac.uk) *************** the Free Software Foundation, 59 Temple *** 20,28 **** --- 20,30 ---- Boston, MA 02111-1307, USA. */ /* Run-time Target Specification. */ + #undef TARGET_VERSION #define TARGET_VERSION fputs (" (ARM/NetBSD)", stderr); /* This is used in ASM_FILE_START. */ + #undef ARM_OS_NAME #define ARM_OS_NAME "NetBSD" /* Unsigned chars produces much better code than signed. */ *************** Boston, MA 02111-1307, USA. */ *** 37,57 **** #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6 /* Default is to use APCS-32 mode. */ #define TARGET_DEFAULT (ARM_FLAG_APCS_32 | ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_FRAME) - #include "arm/aout.h" - - /* This gets redefined in config/netbsd.h. */ - #undef TARGET_MEM_FUNCTIONS - - #include - /* Some defines for CPP. arm32 is the NetBSD port name, so we always define arm32 and __arm32__. */ #undef CPP_PREDEFINES #define CPP_PREDEFINES "\ -Dunix -Driscbsd -Darm32 -D__arm32__ -D__arm__ -D__NetBSD__ \ ! -Asystem=unix -Asystem=NetBSD -Acpu=arm -Amachine=arm" /* Define _POSIX_SOURCE if necessary. */ #undef CPP_SPEC --- 39,53 ---- #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6 /* Default is to use APCS-32 mode. */ + #undef TARGET_DEFAULT #define TARGET_DEFAULT (ARM_FLAG_APCS_32 | ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_FRAME) /* Some defines for CPP. arm32 is the NetBSD port name, so we always define arm32 and __arm32__. */ #undef CPP_PREDEFINES #define CPP_PREDEFINES "\ -Dunix -Driscbsd -Darm32 -D__arm32__ -D__arm__ -D__NetBSD__ \ ! -Asystem=unix -Asystem=NetBSD" /* Define _POSIX_SOURCE if necessary. */ #undef CPP_SPEC *************** Boston, MA 02111-1307, USA. */ *** 71,78 **** /* Pass -X to the linker so that it will strip symbols starting with 'L' */ #undef LINK_SPEC #define LINK_SPEC "\ ! -X %{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp %{R*} \ ! %{static:-Bstatic} %{assert*} \ " #undef SIZE_TYPE --- 67,74 ---- /* Pass -X to the linker so that it will strip symbols starting with 'L' */ #undef LINK_SPEC #define LINK_SPEC "\ ! -X %{!shared:%{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp %{R*} \ ! %{static:-Bstatic}} %{shared} %{assert*} \ " #undef SIZE_TYPE *************** Boston, MA 02111-1307, USA. */ *** 81,95 **** #undef PTRDIFF_TYPE #define PTRDIFF_TYPE "int" - #undef WCHAR_TYPE - #define WCHAR_TYPE "int" - - #undef WCHAR_UNSIGNED - #define WCHAR_UNSIGNED 0 - - #undef WCHAR_TYPE_SIZE - #define WCHAR_TYPE_SIZE 32 - #define HANDLE_SYSV_PRAGMA /* We don't have any limit on the length as out debugger is GDB. */ --- 77,82 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/arm/pe.c gcc-3.1/gcc/config/arm/pe.c *** gcc-3.0.4/gcc/config/arm/pe.c Sat Apr 8 14:29:52 2000 --- gcc-3.1/gcc/config/arm/pe.c Sat Oct 20 00:24:14 2001 *************** *** 1,5 **** /* Routines for GCC for ARM/pe. ! Copyright (C) 1995, 1996, 2000 Free Software Foundation, Inc. Contributed by Doug Evans (dje@cygnus.com). This file is part of GNU CC. --- 1,5 ---- /* Routines for GCC for ARM/pe. ! Copyright (C) 1995, 1996, 2000, 2001 Free Software Foundation, Inc. Contributed by Doug Evans (dje@cygnus.com). This file is part of GNU CC. *************** Boston, MA 02111-1307, USA. */ *** 31,123 **** extern int current_function_anonymous_args; - /* ARM/PE specific attribute support. - - ARM/PE has three new attributes: - naked - for interrupt functions - dllexport - for exporting a function/variable that will live in a dll - dllimport - for importing a function/variable from a dll - - Microsoft allows multiple declspecs in one __declspec, separating - them with spaces. We do NOT support this. Instead, use __declspec - multiple times. - */ - - /* Return nonzero if ATTR is a valid attribute for DECL. - ATTRIBUTES are any existing attributes and ARGS are the arguments - supplied with ATTR. */ - - int - arm_pe_valid_machine_decl_attribute (decl, attributes, attr, args) - tree decl; - tree attributes ATTRIBUTE_UNUSED; - tree attr; - tree args; - { - if (args != NULL_TREE) - return 0; - - if (is_attribute_p ("dllexport", attr)) - return 1; - - if (is_attribute_p ("dllimport", attr)) - return 1; - - return arm_valid_machine_decl_attribute (decl, attr, args); - } - - /* Merge attributes in decls OLD and NEW. - - This handles the following situation: - - __declspec (dllimport) int foo; - int foo; - - The second instance of `foo' nullifies the dllimport. */ - - tree - arm_pe_merge_machine_decl_attributes (old, new) - tree old, new; - { - tree a; - int delete_dllimport_p; - - old = DECL_MACHINE_ATTRIBUTES (old); - new = DECL_MACHINE_ATTRIBUTES (new); - - /* What we need to do here is remove from `old' dllimport if it doesn't - appear in `new'. dllimport behaves like extern: if a declaration is - marked dllimport and a definition appears later, then the object - is not dllimport'd. */ - - if (lookup_attribute ("dllimport", old) != NULL_TREE - && lookup_attribute ("dllimport", new) == NULL_TREE) - delete_dllimport_p = 1; - else - delete_dllimport_p = 0; - - a = merge_attributes (old, new); - - if (delete_dllimport_p) - { - tree prev,t; - - /* Scan the list for dllimport and delete it. */ - for (prev = NULL_TREE, t = a; t; prev = t, t = TREE_CHAIN (t)) - { - if (is_attribute_p ("dllimport", TREE_PURPOSE (t))) - { - if (prev == NULL_TREE) - a = TREE_CHAIN (a); - else - TREE_CHAIN (prev) = TREE_CHAIN (t); - break; - } - } - } - - return a; - } /* Return non-zero if DECL is a dllexport'd object. */ --- 31,36 ---- *************** arm_dllexport_p (decl) *** 132,138 **** if (TREE_CODE (decl) != VAR_DECL && TREE_CODE (decl) != FUNCTION_DECL) return 0; ! exp = lookup_attribute ("dllexport", DECL_MACHINE_ATTRIBUTES (decl)); if (exp) return 1; --- 45,51 ---- if (TREE_CODE (decl) != VAR_DECL && TREE_CODE (decl) != FUNCTION_DECL) return 0; ! exp = lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl)); if (exp) return 1; *************** arm_dllimport_p (decl) *** 154,160 **** if (TREE_CODE (decl) != VAR_DECL && TREE_CODE (decl) != FUNCTION_DECL) return 0; ! imp = lookup_attribute ("dllimport", DECL_MACHINE_ATTRIBUTES (decl)); if (imp) return 1; --- 67,73 ---- if (TREE_CODE (decl) != VAR_DECL && TREE_CODE (decl) != FUNCTION_DECL) return 0; ! imp = lookup_attribute ("dllimport", DECL_ATTRIBUTES (decl)); if (imp) return 1; *************** arm_pe_unique_section (decl, reloc) *** 344,350 **** int len; const char * name; char * string; ! char * prefix; name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)); /* Strip off any encoding in fnname. */ --- 257,263 ---- int len; const char * name; char * string; ! const char * prefix; name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)); /* Strip off any encoding in fnname. */ diff -Nrc3pad gcc-3.0.4/gcc/config/arm/pe.h gcc-3.1/gcc/config/arm/pe.h *** gcc-3.0.4/gcc/config/arm/pe.h Tue Jun 27 02:26:16 2000 --- gcc-3.1/gcc/config/arm/pe.h Fri Nov 16 21:23:16 2001 *************** Boston, MA 02111-1307, USA. */ *** 25,35 **** #define ARM_PE_FLAG_CHAR '@' /* Ensure that @x. will be stripped from the function name. */ #define SUBTARGET_NAME_ENCODING_LENGTHS \ case ARM_PE_FLAG_CHAR: return 3; - #include "arm/coff.h" - #undef USER_LABEL_PREFIX #define USER_LABEL_PREFIX "_" --- 25,34 ---- #define ARM_PE_FLAG_CHAR '@' /* Ensure that @x. will be stripped from the function name. */ + #undef SUBTARGET_NAME_ENCODING_LENGTHS #define SUBTARGET_NAME_ENCODING_LENGTHS \ case ARM_PE_FLAG_CHAR: return 3; #undef USER_LABEL_PREFIX #define USER_LABEL_PREFIX "_" *************** Boston, MA 02111-1307, USA. */ *** 38,43 **** --- 37,46 ---- #undef TARGET_VERSION #define TARGET_VERSION fputs (" (ARM/pe)", stderr) + /* Get tree.c to declare a target-specific specialization of + merge_decl_attributes. */ + #define TARGET_DLLIMPORT_DECL_ATTRIBUTES + /* Support the __declspec keyword by turning them into attributes. We currently only support: naked, dllimport, and dllexport. Note that the current way we do this may result in a collision with *************** Boston, MA 02111-1307, USA. */ *** 91,106 **** 1,1,1 \ } - /* A C expression whose value is nonzero if IDENTIFIER with arguments ARGS - is a valid machine specific attribute for DECL. - The attributes in ATTRIBUTES have previously been assigned to DECL. */ - #undef VALID_MACHINE_DECL_ATTRIBUTE - #define VALID_MACHINE_DECL_ATTRIBUTE(DECL, ATTRIBUTES, IDENTIFIER, ARGS) \ - arm_pe_valid_machine_decl_attribute (DECL, ATTRIBUTES, IDENTIFIER, ARGS) - - #define MERGE_MACHINE_DECL_ATTRIBUTES(OLD, NEW) \ - arm_pe_merge_machine_decl_attributes ((OLD), (NEW)) - /* In addition to the stuff done in arm.h, we must mark dll symbols specially. Definitions of dllexport'd objects install some info in the .drectve section. References to dllimport'd objects are fetched indirectly via --- 94,99 ---- *************** Boston, MA 02111-1307, USA. */ *** 124,158 **** symbols must be explicitly imported from shared libraries (DLLs). */ #define MULTIPLE_SYMBOL_SPACES - #define UNIQUE_SECTION_P(DECL) DECL_ONE_ONLY (DECL) - #define UNIQUE_SECTION(DECL, RELOC) arm_pe_unique_section (DECL, RELOC) #define SUPPORTS_ONE_ONLY 1 ! /* A C statement to output something to the assembler file to switch to section ! NAME for object DECL which is either a FUNCTION_DECL, a VAR_DECL or ! NULL_TREE. Some target formats do not support arbitrary sections. Do not ! define this macro in such cases. */ ! #undef ASM_OUTPUT_SECTION_NAME ! #define ASM_OUTPUT_SECTION_NAME(STREAM, DECL, NAME, RELOC) \ ! do \ ! { \ ! if ((DECL) && TREE_CODE (DECL) == FUNCTION_DECL) \ ! fprintf (STREAM, "\t.section %s,\"x\"\n", (NAME)); \ ! else if ((DECL) && DECL_READONLY_SECTION (DECL, RELOC)) \ ! fprintf (STREAM, "\t.section %s,\"\"\n", (NAME)); \ ! else \ ! fprintf (STREAM, "\t.section %s,\"w\"\n", (NAME)); \ ! /* Functions may have been compiled at various levels of \ ! optimization so we can't use `same_size' here. \ ! Instead, have the linker pick one. */ \ ! if ((DECL) && DECL_ONE_ONLY (DECL)) \ ! fprintf (STREAM, "\t.linkonce %s\n", \ ! TREE_CODE (DECL) == FUNCTION_DECL \ ! ? "discard" : "same_size"); \ ! } \ ! while (0) /* This outputs a lot of .req's to define alias for various registers. Let's try to avoid this. */ --- 117,129 ---- symbols must be explicitly imported from shared libraries (DLLs). */ #define MULTIPLE_SYMBOL_SPACES #define UNIQUE_SECTION(DECL, RELOC) arm_pe_unique_section (DECL, RELOC) #define SUPPORTS_ONE_ONLY 1 ! /* Switch into a generic section. */ ! #undef TARGET_ASM_NAMED_SECTION ! #define TARGET_ASM_NAMED_SECTION default_pe_asm_named_section /* This outputs a lot of .req's to define alias for various registers. Let's try to avoid this. */ *************** drectve_section () \ *** 263,269 **** ASM_DECLARE_OBJECT_NAME and then switch back to the original section afterwards. */ #define SWITCH_TO_SECTION_FUNCTION \ ! void \ switch_to_section (section, decl) \ enum in_section section; \ tree decl; \ --- 234,241 ---- ASM_DECLARE_OBJECT_NAME and then switch back to the original section afterwards. */ #define SWITCH_TO_SECTION_FUNCTION \ ! static void switch_to_section PARAMS ((enum in_section, tree)); \ ! static void \ switch_to_section (section, decl) \ enum in_section section; \ tree decl; \ diff -Nrc3pad gcc-3.0.4/gcc/config/arm/riscix.h gcc-3.1/gcc/config/arm/riscix.h *** gcc-3.0.4/gcc/config/arm/riscix.h Thu Nov 2 23:29:08 2000 --- gcc-3.1/gcc/config/arm/riscix.h Thu Dec 13 00:27:30 2001 *************** Boston, MA 02111-1307, USA. */ *** 49,55 **** #ifndef CPP_PREDEFINES #define CPP_PREDEFINES \ ! "-Darm -Driscix -Dunix -Asystem=unix -Acpu=arm -Amachine=arm" #endif --- 49,55 ---- #ifndef CPP_PREDEFINES #define CPP_PREDEFINES \ ! "-Darm -Driscix -Dunix -Asystem=unix" #endif *************** Boston, MA 02111-1307, USA. */ *** 127,137 **** /* The RISCiX assembler does not understand .set */ #undef SET_ASM_OP ! /* Override CPP_SPEC, there's no point handling endianness (and probably ! not much point handling apcs_pc), and we want to add the right #defines ! when using the include files. */ ! #undef CPP_SPEC ! #define CPP_SPEC "%(cpp_cpu_arch) %(cpp_apcs_pc) %(cpp_float) \ %{mbsd:%{pedantic:%e-mbsd and -pedantic incompatible} -D_BSD_C} \ %{mxopen:%{mbsd:%e-mbsd and -mxopen incompatible} \ %{pedantic:%e-mxopen and -pedantic incompatible} -D_XOPEN_C} \ --- 127,135 ---- /* The RISCiX assembler does not understand .set */ #undef SET_ASM_OP ! /* Add to CPP_SPEC, we want to add the right #defines when using the include ! files. */ ! #define SUBTARGET_CPP_SPEC "\ %{mbsd:%{pedantic:%e-mbsd and -pedantic incompatible} -D_BSD_C} \ %{mxopen:%{mbsd:%e-mbsd and -mxopen incompatible} \ %{pedantic:%e-mxopen and -pedantic incompatible} -D_XOPEN_C} \ diff -Nrc3pad gcc-3.0.4/gcc/config/arm/riscix1-1.h gcc-3.1/gcc/config/arm/riscix1-1.h *** gcc-3.0.4/gcc/config/arm/riscix1-1.h Thu Nov 2 23:29:08 2000 --- gcc-3.1/gcc/config/arm/riscix1-1.h Thu Dec 13 00:27:30 2001 *************** Boston, MA 02111-1307, USA. */ *** 30,36 **** "%{pg:/usr/lib/gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}}" #ifndef CPP_PREDEFINES ! #define CPP_PREDEFINES "-Darm -Driscix -Dunix -Asystem=unix -Acpu=arm -Amachine=arm" #endif /* Riscix 1.1 doesn't have X/OPEN support, so only accept -mbsd (but ignore --- 30,36 ---- "%{pg:/usr/lib/gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}}" #ifndef CPP_PREDEFINES ! #define CPP_PREDEFINES "-Darm -Driscix -Dunix -Asystem=unix" #endif /* Riscix 1.1 doesn't have X/OPEN support, so only accept -mbsd (but ignore *************** Boston, MA 02111-1307, USA. */ *** 91,100 **** #include "arm/aout.h" ! #undef CPP_SPEC ! #define CPP_SPEC "\ ! %(cpp_cpu_arch) %(cpp_apcs_pc) %(cpp_float) %{!ansi: -D_BSD_C} \ ! " /* The native RISCiX assembler does not support stabs of any kind; because --- 91,97 ---- #include "arm/aout.h" ! #define SUBTARGET_CPP_SPEC "%{!ansi: -D_BSD_C}" /* The native RISCiX assembler does not support stabs of any kind; because diff -Nrc3pad gcc-3.0.4/gcc/config/arm/rix-gas.h gcc-3.1/gcc/config/arm/rix-gas.h *** gcc-3.0.4/gcc/config/arm/rix-gas.h Wed Dec 16 21:01:45 1998 --- gcc-3.1/gcc/config/arm/rix-gas.h Fri Nov 16 21:23:16 2001 *************** the Free Software Foundation, 59 Temple *** 22,31 **** Boston, MA 02111-1307, USA. */ /* Limit the length of a stabs entry (for the broken Acorn assembler) */ #define DBX_CONTIN_LENGTH 80 - #include "arm/riscix.h" - /* The native RISCiX assembler does not support stabs of any kind; because the native assembler is not used by the compiler, Acorn didn't feel it was necessary to put them in! --- 22,30 ---- Boston, MA 02111-1307, USA. */ /* Limit the length of a stabs entry (for the broken Acorn assembler) */ + #undef DBX_CONTIN_LENGTH #define DBX_CONTIN_LENGTH 80 /* The native RISCiX assembler does not support stabs of any kind; because the native assembler is not used by the compiler, Acorn didn't feel it was necessary to put them in! diff -Nrc3pad gcc-3.0.4/gcc/config/arm/rtems-elf.h gcc-3.1/gcc/config/arm/rtems-elf.h *** gcc-3.0.4/gcc/config/arm/rtems-elf.h Fri Feb 15 14:42:56 2002 --- gcc-3.1/gcc/config/arm/rtems-elf.h Tue Apr 30 19:58:55 2002 *************** the Free Software Foundation, 59 Temple *** 19,33 **** Boston, MA 02111-1307, USA. */ /* Run-time Target Specification. */ #define TARGET_VERSION fputs (" (ARM/ELF RTEMS)", stderr); #define HAS_INIT_SECTION - #include "unknown-elf.h" - #undef CPP_PREDEFINES ! #define CPP_PREDEFINES "-D__rtems__ -D__ELF__ \ ! -Asystem(rtems) -Acpu(arm) -Amachine(arm)" ! ! #undef INVOKE_main ! --- 19,28 ---- Boston, MA 02111-1307, USA. */ /* Run-time Target Specification. */ + #undef TARGET_VERSION #define TARGET_VERSION fputs (" (ARM/ELF RTEMS)", stderr); #define HAS_INIT_SECTION #undef CPP_PREDEFINES ! #define CPP_PREDEFINES "-D__rtems__ -D__ELF__ -Asystem=rtems" diff -Nrc3pad gcc-3.0.4/gcc/config/arm/semi.h gcc-3.1/gcc/config/arm/semi.h *** gcc-3.0.4/gcc/config/arm/semi.h Mon Jan 15 14:30:38 2001 --- gcc-3.1/gcc/config/arm/semi.h Fri Nov 16 21:23:16 2001 *************** Boston, MA 02111-1307, USA. */ *** 21,31 **** --- 21,37 ---- #define STARTFILE_SPEC "crt0.o%s" + #ifndef LIB_SPEC #define LIB_SPEC "-lc" + #endif + #ifndef SUBTARGET_CPP_SPEC #define SUBTARGET_CPP_SPEC "-D__semi__" + #endif + #ifndef LINK_SPEC #define LINK_SPEC "%{mbig-endian:-EB} -X" + #endif #ifndef TARGET_VERSION #define TARGET_VERSION fputs (" (ARM/semi-hosted)", stderr); *************** Boston, MA 02111-1307, USA. */ *** 63,69 **** %(subtarget_extra_asm_spec)" #endif - #include "arm/aout.h" - #undef CPP_APCS_PC_DEFAULT_SPEC #define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__" --- 69,73 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/arm/semiaof.h gcc-3.1/gcc/config/arm/semiaof.h *** gcc-3.0.4/gcc/config/arm/semiaof.h Thu Nov 2 23:29:08 2000 --- gcc-3.1/gcc/config/arm/semiaof.h Thu Dec 13 00:27:30 2001 *************** the Free Software Foundation, 59 Temple *** 21,27 **** Boston, MA 02111-1307, USA. */ #define CPP_PREDEFINES \ ! "-Darm -Dsemi -Acpu=arm -Amachine=arm" #define ASM_SPEC "%{g -g} -arch 4 \ -apcs 3%{mapcs-32:/32bit}%{mapcs-26:/26bit}%{!mapcs-26:%{!macps-32:/32bit}}" --- 21,27 ---- Boston, MA 02111-1307, USA. */ #define CPP_PREDEFINES \ ! "-Darm -Dsemi" #define ASM_SPEC "%{g -g} -arch 4 \ -apcs 3%{mapcs-32:/32bit}%{mapcs-26:/26bit}%{!mapcs-26:%{!macps-32:/32bit}}" *************** Boston, MA 02111-1307, USA. */ *** 35,43 **** /* The Norcroft C library defines size_t as "unsigned int" */ #define SIZE_TYPE "unsigned int" - #include "arm/aof.h" - #undef CPP_APCS_PC_DEFAULT_SPEC #define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__" - - --- 35,39 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/arm/strongarm-coff.h gcc-3.1/gcc/config/arm/strongarm-coff.h *** gcc-3.0.4/gcc/config/arm/strongarm-coff.h Sat Apr 8 14:29:52 2000 --- gcc-3.1/gcc/config/arm/strongarm-coff.h Fri Nov 16 21:23:16 2001 *************** Boston, MA 02111-1307, USA. */ *** 24,31 **** #define SUBTARGET_CPU_DEFAULT TARGET_CPU_strongarm #endif - #include "coff.h" - #undef TARGET_VERSION #define TARGET_VERSION fputs (" (StrongARM/COFF)", stderr); - --- 24,28 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/arm/strongarm-elf.h gcc-3.1/gcc/config/arm/strongarm-elf.h *** gcc-3.0.4/gcc/config/arm/strongarm-elf.h Sat Apr 8 14:29:52 2000 --- gcc-3.1/gcc/config/arm/strongarm-elf.h Fri Sep 14 10:19:30 2001 *************** *** 1,5 **** /* Definitions for non-Linux based StrongARM systems using ELF ! Copyright (C) 1999 Free Software Foundation, Inc. Contributed by Catherine Moore This file is part of GNU CC. --- 1,5 ---- /* Definitions for non-Linux based StrongARM systems using ELF ! Copyright (C) 1999, 2001 Free Software Foundation, Inc. Contributed by Catherine Moore This file is part of GNU CC. *************** Boston, MA 02111-1307, USA. */ *** 28,31 **** #define SUBTARGET_CPU_DEFAULT TARGET_CPU_strongarm #endif - #include "unknown-elf.h" --- 28,30 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/arm/strongarm-pe.h gcc-3.1/gcc/config/arm/strongarm-pe.h *** gcc-3.0.4/gcc/config/arm/strongarm-pe.h Mon Dec 4 00:23:34 2000 --- gcc-3.1/gcc/config/arm/strongarm-pe.h Fri Nov 16 21:23:16 2001 *************** along with GNU CC; see the file COPYING. *** 19,26 **** the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - #include "arm/strongarm-coff.h" - #include "arm/pe.h" - #undef TARGET_VERSION #define TARGET_VERSION fputs (" (StrongARM/PE)", stderr); --- 19,23 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/arm/t-arm-aout gcc-3.1/gcc/config/arm/t-arm-aout *** gcc-3.0.4/gcc/config/arm/t-arm-aout Sat Apr 8 14:29:52 2000 --- gcc-3.1/gcc/config/arm/t-arm-aout Thu May 17 03:15:48 2001 *************** *** 1,4 **** - CROSS_LIBGCC1 = libgcc1-asm.a LIB1ASMSRC = arm/lib1funcs.asm LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _call_via_rX _interwork_call_via_rX --- 1,3 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/arm/t-arm-coff gcc-3.1/gcc/config/arm/t-arm-coff *** gcc-3.0.4/gcc/config/arm/t-arm-coff Sat Apr 8 14:29:52 2000 --- gcc-3.1/gcc/config/arm/t-arm-coff Thu May 17 03:15:48 2001 *************** *** 1,4 **** - CROSS_LIBGCC1 = libgcc1-asm.a LIB1ASMSRC = arm/lib1funcs.asm LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _bb_init_func _call_via_rX _interwork_call_via_rX --- 1,3 ---- *************** LIBGCC = stmp-multilib *** 30,35 **** INSTALL_LIBGCC = install-multilib # Currently there is a bug somwehere in GCC's alias analysis ! # or scheduling code that is breaking _fpmul_parts in libgcc1.c. # Disabling function inlining is a workaround for this problem. TARGET_LIBGCC2_CFLAGS = -Dinhibit_libc -fno-inline --- 29,34 ---- INSTALL_LIBGCC = install-multilib # Currently there is a bug somwehere in GCC's alias analysis ! # or scheduling code that is breaking _fpmul_parts in fp-bit.c. # Disabling function inlining is a workaround for this problem. TARGET_LIBGCC2_CFLAGS = -Dinhibit_libc -fno-inline diff -Nrc3pad gcc-3.0.4/gcc/config/arm/t-arm-elf gcc-3.1/gcc/config/arm/t-arm-elf *** gcc-3.0.4/gcc/config/arm/t-arm-elf Thu Sep 21 17:36:19 2000 --- gcc-3.1/gcc/config/arm/t-arm-elf Fri Sep 14 10:19:30 2001 *************** *** 1,4 **** - CROSS_LIBGCC1 = libgcc1-asm.a LIB1ASMSRC = arm/lib1funcs.asm LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _bb_init_func _call_via_rX _interwork_call_via_rX --- 1,3 ---- *************** MULTILIB_EXCEPTIONS = *** 46,52 **** # # MULTILIB_OPTIONS += mcpu=arm7 # MULTILIB_DIRNAMES += nofmult ! # MULTILIB_EXCEPTIONS += *mthumb-interwork*/*mcpu=arm7* # # We have to match all the arm cpu variants which do not have the # # multiply instruction and treat them as if the user had specified # # -mcpu=arm7. Note that in the following the ? is interpreted as --- 45,54 ---- # # MULTILIB_OPTIONS += mcpu=arm7 # MULTILIB_DIRNAMES += nofmult ! # MULTILIB_EXCEPTIONS += *mthumb*/*mcpu=arm7* ! # # Note: the multilib_exceptions matches both -mthumb and ! # # -mthumb-interwork ! # # # # We have to match all the arm cpu variants which do not have the # # multiply instruction and treat them as if the user had specified # # -mcpu=arm7. Note that in the following the ? is interpreted as *************** MULTILIB_EXCEPTIONS = *** 68,82 **** # MULTILIB_MATCHES += mcpu?arm7=mcpu?arm610 # MULTILIB_MATCHES += mcpu?arm7=mcpu?arm620 ! EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o # If EXTRA_MULTILIB_PARTS is not defined above then define EXTRA_PARTS here ! # EXTRA_PARTS = crtbegin.o crtend.o LIBGCC = stmp-multilib INSTALL_LIBGCC = install-multilib # Currently there is a bug somewhere in GCC's alias analysis ! # or scheduling code that is breaking _fpmul_parts in libgcc1.c. # Disabling function inlining is a workaround for this problem. TARGET_LIBGCC2_CFLAGS = -Dinhibit_libc -fno-inline --- 70,93 ---- # MULTILIB_MATCHES += mcpu?arm7=mcpu?arm610 # MULTILIB_MATCHES += mcpu?arm7=mcpu?arm620 ! EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o crti.o crtn.o # If EXTRA_MULTILIB_PARTS is not defined above then define EXTRA_PARTS here ! # EXTRA_PARTS = crtbegin.o crtend.o crti.o crtn.o LIBGCC = stmp-multilib INSTALL_LIBGCC = install-multilib # Currently there is a bug somewhere in GCC's alias analysis ! # or scheduling code that is breaking _fpmul_parts in fp-bit.c. # Disabling function inlining is a workaround for this problem. TARGET_LIBGCC2_CFLAGS = -Dinhibit_libc -fno-inline + + # Assemble startup files. + $(T)crti.o: $(srcdir)/config/arm/crti.asm $(GCC_PASSES) + $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \ + -c -o $(T)crti.o -x assembler-with-cpp $(srcdir)/config/arm/crti.asm + + $(T)crtn.o: $(srcdir)/config/arm/crtn.asm $(GCC_PASSES) + $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \ + -c -o $(T)crtn.o -x assembler-with-cpp $(srcdir)/config/arm/crtn.asm diff -Nrc3pad gcc-3.0.4/gcc/config/arm/t-linux gcc-3.1/gcc/config/arm/t-linux *** gcc-3.0.4/gcc/config/arm/t-linux Sun Dec 3 09:47:29 2000 --- gcc-3.1/gcc/config/arm/t-linux Thu May 17 03:15:49 2001 *************** LIBGCC2_DEBUG_CFLAGS = -g0 *** 6,15 **** # Don't build enquire ENQUIRE= - # Since libgcc1 is an assembler file, we can build it automatically for the - # cross-compiler. - CROSS_LIBGCC1 = libgcc1-asm.a - LIBGCC1 = libgcc1-asm.a LIB1ASMSRC = arm/lib1funcs.asm LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx --- 6,11 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/arm/t-netbsd gcc-3.1/gcc/config/arm/t-netbsd *** gcc-3.0.4/gcc/config/arm/t-netbsd Sat Apr 8 14:29:52 2000 --- gcc-3.1/gcc/config/arm/t-netbsd Thu Dec 13 14:24:03 2001 *************** *** 1,8 **** # Just for these, we omit the frame pointer since it makes such a big # difference. It is then pointless adding debugging. ! TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer LIBGCC2_DEBUG_CFLAGS = -g0 # Don't build enquire ENQUIRE= --- 1,25 ---- # Just for these, we omit the frame pointer since it makes such a big # difference. It is then pointless adding debugging. ! TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer -fpic LIBGCC2_DEBUG_CFLAGS = -g0 + # Build a shared libgcc library. + SHLIB_EXT = .so + SHLIB_NAME = @shlib_base_name@.so + SHLIB_SONAME = @shlib_base_name@.so.1 + SHLIB_OBJS = @shlib_objs@ + + SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \ + -Wl,-soname,$(SHLIB_SONAME) \ + -o $(SHLIB_NAME) @multilib_flags@ $(SHLIB_OBJS) -lc && \ + rm -f $(SHLIB_SONAME) && \ + $(LN_S) $(SHLIB_NAME) $(SHLIB_SONAME) + # $(slibdir) double quoted to protect it from expansion while building + # libgcc.mk. We want this delayed until actual install time. + SHLIB_INSTALL = $(INSTALL_DATA) $(SHLIB_NAME) $$(slibdir)/$(SHLIB_SONAME); \ + rm -f $$(slibdir)/$(SHLIB_NAME); \ + $(LN_S) $(SHLIB_SONAME) $$(slibdir)/$(SHLIB_NAME) + # Don't build enquire ENQUIRE= diff -Nrc3pad gcc-3.0.4/gcc/config/arm/t-pe gcc-3.1/gcc/config/arm/t-pe *** gcc-3.0.4/gcc/config/arm/t-pe Sat Apr 8 14:29:52 2000 --- gcc-3.1/gcc/config/arm/t-pe Thu May 17 03:15:49 2001 *************** *** 1,4 **** - CROSS_LIBGCC1 = libgcc1-asm.a LIB1ASMSRC = arm/lib1funcs.asm LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _call_via_rX _interwork_call_via_rX --- 1,3 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/arm/t-riscix gcc-3.1/gcc/config/arm/t-riscix *** gcc-3.0.4/gcc/config/arm/t-riscix Wed Feb 3 06:30:56 1999 --- gcc-3.1/gcc/config/arm/t-riscix Thu Nov 15 13:05:53 2001 *************** *** 2,4 **** --- 2,6 ---- # difference. It is then pointless adding debugging. TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer LIBGCC2_DEBUG_CFLAGS = -g0 + + FIXPROTO_DEFINES= -D_POSIX_SOURCE -D_XOPEN_C -D_BSD_C -D_XOPEN_SOURCE diff -Nrc3pad gcc-3.0.4/gcc/config/arm/t-semi gcc-3.1/gcc/config/arm/t-semi *** gcc-3.0.4/gcc/config/arm/t-semi Thu Aug 5 03:27:46 1999 --- gcc-3.1/gcc/config/arm/t-semi Thu May 17 03:15:49 2001 *************** LIBGCC2_DEBUG_CFLAGS = -g0 *** 6,16 **** # Don't build enquire ENQUIRE= - # Can't test libgcc1 since it tries to bring in things like malloc, and - # there probably isn't a libc to link against until we have a compiler. - LIBGCC1_TEST = - - CROSS_LIBGCC1 = libgcc1-asm.a LIB1ASMSRC = arm/lib1funcs.asm LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _call_via_rX _interwork_call_via_rX --- 6,11 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/arm/t-semiaof gcc-3.1/gcc/config/arm/t-semiaof *** gcc-3.0.4/gcc/config/arm/t-semiaof Sat Apr 8 14:29:52 2000 --- gcc-3.1/gcc/config/arm/t-semiaof Thu Jan 1 00:00:00 1970 *************** *** 1,67 **** - OLDCC = armcc -w - # Don't build enquire - ENQUIRE= - CROSS_LIBGCC1 = libgcc1-aof.a - LIBGCC2 = libgcc2-aof.a - LIBGCC = libgcc-aof.a - TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer - LIBGCC2_DEBUG_CFLAGS = -g0 - - LIBGCC1_TEST = #libgcc1-atest - EXTRA_PARTS = crtbegin.o crtend.o - STMP_FIXPROTO = - - # Rule to build libgcc1.a and libgcc2.a and libgcc.a, since the librarian - # for the ARM tools is somewhat quirky, and needs a special rule to use it. - libgcc1-aof.a: libgcc1.c $(CONFIG_H) config.status - -rm -rf tmplib libgcc1.a libgcc1-aof.a tmplibgcc1.a - mkdir tmplib - for name in $(LIB1FUNCS); \ - do \ - echo $${name}; \ - rm -f $${name}$(objext); \ - $(OLDCC) $(CCLIBFLAGS) $(INCLUDES) -c -DL$${name} $(srcdir)/libgcc1.c; \ - if [ $$? -eq 0 ] ; then true; else exit 1; fi; \ - mv libgcc1$(objext) tmplib/$${name}$(objext); \ - done - (cd tmplib; \ - armlib -c tmplibgcc1.a *; \ - mv tmplibgcc1.a ..) - mv tmplibgcc1.a libgcc1-aof.a - rm -rf tmplib - - libgcc2-aof.a: libgcc2.c libgcc2.ready $(CONFIG_H) $(LIB2FUNCS_EXTRA) \ - machmode.h longlong.h gbl-ctors.h config.status - -rm -f tmplibgcc2.a - -rm -rf tmplib - mkdir tmplib - for name in $(LIB2FUNCS); \ - do \ - echo $${name}; \ - $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES) -c -DL$${name} \ - $(srcdir)/libgcc2.c -o tmplib/$${name}$(objext); \ - if [ $$? -eq 0 ] ; then true; else exit 1; fi; \ - done - (cd tmplib; \ - armlib -c tmplibgcc2.a *; \ - mv tmplibgcc2.a ..) - mv tmplibgcc2.a libgcc2-aof.a - rm -rf tmplib - - # Combine the various libraries into a single library, libgcc.a. - libgcc-aof.a: $(CROSS_LIBGCC1) $(LIBGCC2) - -rm -rf tmplibgcc.a libgcc.a tmpcopy libgcc-aof.a - mkdir tmpcopy - (cd tmpcopy; armlib -e ../$(LIBGCC1) \*) - -(cd tmpcopy; chmod +w * > /dev/null 2>&1) - (cd tmpcopy; armlib -e ../$(LIBGCC2) \*) - (cd tmpcopy; armlib -co ../tmplibgcc.a *$(objext)) - rm -rf tmpcopy - mv tmplibgcc.a libgcc.a - ln libgcc.a libgcc-aof.a - - libgcc1-atest: libgcc1-test.o native $(GCC_PARTS) $(EXTRA_PARTS) - @echo "Testing libgcc1. Ignore linker warning messages." - $(GCC_FOR_TARGET) $(GCC_CFLAGS) libgcc1-test.o -o libgcc1-test \ - -v - --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/arm/t-strongarm-coff gcc-3.1/gcc/config/arm/t-strongarm-coff *** gcc-3.0.4/gcc/config/arm/t-strongarm-coff Mon Dec 4 00:23:35 2000 --- gcc-3.1/gcc/config/arm/t-strongarm-coff Thu May 17 03:15:49 2001 *************** *** 1,4 **** - CROSS_LIBGCC1 = libgcc1-asm.a LIB1ASMSRC = arm/lib1funcs.asm LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _bb_init_func --- 1,3 ---- *************** LIBGCC = stmp-multilib *** 30,35 **** INSTALL_LIBGCC = install-multilib # Currently there is a bug somwehere in GCC's alias analysis ! # or scheduling code that is breaking _fpmul_parts in libgcc1.c. # Disabling function inlining is a workaround for this problem. TARGET_LIBGCC2_CFLAGS = -Dinhibit_libc -fno-inline --- 29,34 ---- INSTALL_LIBGCC = install-multilib # Currently there is a bug somwehere in GCC's alias analysis ! # or scheduling code that is breaking _fpmul_parts in fp-bit.c. # Disabling function inlining is a workaround for this problem. TARGET_LIBGCC2_CFLAGS = -Dinhibit_libc -fno-inline diff -Nrc3pad gcc-3.0.4/gcc/config/arm/t-strongarm-elf gcc-3.1/gcc/config/arm/t-strongarm-elf *** gcc-3.0.4/gcc/config/arm/t-strongarm-elf Mon Dec 4 00:23:35 2000 --- gcc-3.1/gcc/config/arm/t-strongarm-elf Fri Sep 14 10:19:30 2001 *************** *** 1,4 **** - CROSS_LIBGCC1 = libgcc1-asm.a LIB1ASMSRC = arm/lib1funcs.asm LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _bb_init_func --- 1,3 ---- *************** MULTILIB_OPTIONS = mlittle-endian/mb *** 25,39 **** MULTILIB_DIRNAMES = le be fpu soft MULTILIB_EXCEPTIONS = MULTILIB_MATCHES = mbig-endian=mbe mlittle-endian=mle ! EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o ! ! # If EXTRA_MULTILIB_PARTS is not defined above then define EXTRA_PARTS here ! # EXTRA_PARTS = crtbegin.o crtend.o LIBGCC = stmp-multilib INSTALL_LIBGCC = install-multilib # Currently there is a bug somewhere in GCC's alias analysis ! # or scheduling code that is breaking _fpmul_parts in libgcc1.c. # Disabling function inlining is a workaround for this problem. TARGET_LIBGCC2_CFLAGS = -Dinhibit_libc -fno-inline --- 24,44 ---- MULTILIB_DIRNAMES = le be fpu soft MULTILIB_EXCEPTIONS = MULTILIB_MATCHES = mbig-endian=mbe mlittle-endian=mle ! EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o crti.o crtn.o LIBGCC = stmp-multilib INSTALL_LIBGCC = install-multilib # Currently there is a bug somewhere in GCC's alias analysis ! # or scheduling code that is breaking _fpmul_parts in fp-bit.c. # Disabling function inlining is a workaround for this problem. TARGET_LIBGCC2_CFLAGS = -Dinhibit_libc -fno-inline + + # Assemble startup files. + $(T)crti.o: $(srcdir)/config/arm/crti.asm $(GCC_PASSES) + $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \ + -c -o $(T)crti.o -x assembler-with-cpp $(srcdir)/config/arm/crti.asm + + $(T)crtn.o: $(srcdir)/config/arm/crtn.asm $(GCC_PASSES) + $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \ + -c -o $(T)crtn.o -x assembler-with-cpp $(srcdir)/config/arm/crtn.asm diff -Nrc3pad gcc-3.0.4/gcc/config/arm/t-strongarm-pe gcc-3.1/gcc/config/arm/t-strongarm-pe *** gcc-3.0.4/gcc/config/arm/t-strongarm-pe Mon Dec 4 00:23:35 2000 --- gcc-3.1/gcc/config/arm/t-strongarm-pe Thu May 17 03:15:49 2001 *************** *** 1,4 **** - CROSS_LIBGCC1 = libgcc1-asm.a LIB1ASMSRC = arm/lib1funcs.asm LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _bb_init_func --- 1,3 ---- *************** LIBGCC = stmp-multilib *** 33,38 **** INSTALL_LIBGCC = install-multilib # Currently there is a bug somwehere in GCC's alias analysis ! # or scheduling code that is breaking _fpmul_parts in libgcc1.c. # Disabling function inlining is a workaround for this problem. TARGET_LIBGCC2_CFLAGS = -Dinhibit_libc -fno-inline --- 32,37 ---- INSTALL_LIBGCC = install-multilib # Currently there is a bug somwehere in GCC's alias analysis ! # or scheduling code that is breaking _fpmul_parts in fp-bit.c. # Disabling function inlining is a workaround for this problem. TARGET_LIBGCC2_CFLAGS = -Dinhibit_libc -fno-inline diff -Nrc3pad gcc-3.0.4/gcc/config/arm/t-xscale-coff gcc-3.1/gcc/config/arm/t-xscale-coff *** gcc-3.0.4/gcc/config/arm/t-xscale-coff Mon Dec 4 23:00:26 2000 --- gcc-3.1/gcc/config/arm/t-xscale-coff Wed Dec 19 15:23:16 2001 *************** *** 1,4 **** - CROSS_LIBGCC1 = libgcc1-asm.a LIB1ASMSRC = arm/lib1funcs.asm LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _bb_init_func _call_via_rX _interwork_call_via_rX --- 1,3 ---- *************** MULTILIB_EXCEPTIONS += *mhard-float/*mth *** 38,48 **** MULTILIB_REDUNDANT_DIRS = interwork/thumb=thumb - EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o LIBGCC = stmp-multilib INSTALL_LIBGCC = install-multilib # Currently there is a bug somewhere in GCC's alias analysis ! # or scheduling code that is breaking _fpmul_parts in libgcc1.c. # Disabling function inlining is a workaround for this problem. TARGET_LIBGCC2_CFLAGS = -Dinhibit_libc -fno-inline --- 37,46 ---- MULTILIB_REDUNDANT_DIRS = interwork/thumb=thumb LIBGCC = stmp-multilib INSTALL_LIBGCC = install-multilib # Currently there is a bug somewhere in GCC's alias analysis ! # or scheduling code that is breaking _fpmul_parts in fp-bit.c. # Disabling function inlining is a workaround for this problem. TARGET_LIBGCC2_CFLAGS = -Dinhibit_libc -fno-inline diff -Nrc3pad gcc-3.0.4/gcc/config/arm/t-xscale-elf gcc-3.1/gcc/config/arm/t-xscale-elf *** gcc-3.0.4/gcc/config/arm/t-xscale-elf Mon Dec 4 23:00:26 2000 --- gcc-3.1/gcc/config/arm/t-xscale-elf Fri Sep 14 10:19:30 2001 *************** *** 1,4 **** - CROSS_LIBGCC1 = libgcc1-asm.a LIB1ASMSRC = arm/lib1funcs.asm LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _bb_init_func _call_via_rX _interwork_call_via_rX --- 1,3 ---- *************** MULTILIB_EXCEPTIONS += *mhard-float/*mth *** 38,48 **** MULTILIB_REDUNDANT_DIRS = interwork/thumb=thumb ! EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o LIBGCC = stmp-multilib INSTALL_LIBGCC = install-multilib # Currently there is a bug somewhere in GCC's alias analysis ! # or scheduling code that is breaking _fpmul_parts in libgcc1.c. # Disabling function inlining is a workaround for this problem. TARGET_LIBGCC2_CFLAGS = -Dinhibit_libc -fno-inline --- 37,57 ---- MULTILIB_REDUNDANT_DIRS = interwork/thumb=thumb ! EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o crti.o crtn.o ! LIBGCC = stmp-multilib INSTALL_LIBGCC = install-multilib # Currently there is a bug somewhere in GCC's alias analysis ! # or scheduling code that is breaking _fpmul_parts in fp-bit.c. # Disabling function inlining is a workaround for this problem. TARGET_LIBGCC2_CFLAGS = -Dinhibit_libc -fno-inline + + # Assemble startup files. + $(T)crti.o: $(srcdir)/config/arm/crti.asm $(GCC_PASSES) + $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \ + -c -o $(T)crti.o -x assembler-with-cpp $(srcdir)/config/arm/crti.asm + + $(T)crtn.o: $(srcdir)/config/arm/crtn.asm $(GCC_PASSES) + $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \ + -c -o $(T)crtn.o -x assembler-with-cpp $(srcdir)/config/arm/crtn.asm diff -Nrc3pad gcc-3.0.4/gcc/config/arm/uclinux-elf.h gcc-3.1/gcc/config/arm/uclinux-elf.h *** gcc-3.0.4/gcc/config/arm/uclinux-elf.h Sat Dec 18 13:34:21 1999 --- gcc-3.1/gcc/config/arm/uclinux-elf.h Fri Sep 14 10:19:30 2001 *************** *** 1,5 **** /* Definitions for ARM running ucLinux using ELF ! Copyright (C) 1999 Free Software Foundation, Inc. Contributed by Philip Blundell This file is part of GNU CC. --- 1,5 ---- /* Definitions for ARM running ucLinux using ELF ! Copyright (C) 1999, 2001 Free Software Foundation, Inc. Contributed by Philip Blundell This file is part of GNU CC. *************** along with this program; see the file CO *** 19,26 **** the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - #include "arm/linux-elf.h" - /* We don't want a PLT. */ #undef NEED_PLT_RELOC #define NEED_PLT_RELOC 0 --- 19,24 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/arm/unknown-elf-oabi.h gcc-3.1/gcc/config/arm/unknown-elf-oabi.h *** gcc-3.0.4/gcc/config/arm/unknown-elf-oabi.h Thu Nov 2 23:29:08 2000 --- gcc-3.1/gcc/config/arm/unknown-elf-oabi.h Fri Sep 14 10:19:30 2001 *************** the Free Software Foundation, 59 Temple *** 20,36 **** Boston, MA 02111-1307, USA. */ /* Run-time Target Specification. */ ! #ifndef TARGET_VERSION #define TARGET_VERSION fputs (" (ARM/ELF non-Linux old abi)", stderr); - #endif #define CPP_PREDEFINES "-Darm_oabi -Darm -Darm_elf -Acpu=arm -Amachine=arm -D__ELF__" ! #ifndef ASM_SPEC #define ASM_SPEC "-moabi %{mbig-endian:-EB} %{mcpu=*:-m%*} %{march=*:-m%*} \ %{mapcs-*:-mapcs-%*} %{mthumb-interwork:-mthumb-interwork}" - #endif - /* Now get the routine arm-elf definitions. */ - #include "arm/unknown-elf.h" - #include "arm/elf.h" --- 20,32 ---- Boston, MA 02111-1307, USA. */ /* Run-time Target Specification. */ ! #undef TARGET_VERSION #define TARGET_VERSION fputs (" (ARM/ELF non-Linux old abi)", stderr); + #undef CPP_PREDEFINES #define CPP_PREDEFINES "-Darm_oabi -Darm -Darm_elf -Acpu=arm -Amachine=arm -D__ELF__" ! #undef ASM_SPEC #define ASM_SPEC "-moabi %{mbig-endian:-EB} %{mcpu=*:-m%*} %{march=*:-m%*} \ %{mapcs-*:-mapcs-%*} %{mthumb-interwork:-mthumb-interwork}" diff -Nrc3pad gcc-3.0.4/gcc/config/arm/unknown-elf.h gcc-3.1/gcc/config/arm/unknown-elf.h *** gcc-3.0.4/gcc/config/arm/unknown-elf.h Sun May 13 07:10:07 2001 --- gcc-3.1/gcc/config/arm/unknown-elf.h Sat Dec 15 16:46:57 2001 *************** *** 1,5 **** /* Definitions for non-Linux based ARM systems using ELF ! Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. Contributed by Catherine Moore This file is part of GNU CC. --- 1,5 ---- /* Definitions for non-Linux based ARM systems using ELF ! Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Catherine Moore This file is part of GNU CC. *************** along with this program; see the file CO *** 19,27 **** the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Run-time Target Specification. */ #ifndef TARGET_VERSION ! #define TARGET_VERSION fputs (" (ARM/ELF non-Linux)", stderr); #endif /* Default to using APCS-32 and software floating point. */ --- 19,30 ---- the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + /* elfos.h should have already been included. Now just override + any conflicting definitions and add any extras. */ + /* Run-time Target Specification. */ #ifndef TARGET_VERSION ! #define TARGET_VERSION fputs (" (ARM/ELF)", stderr); #endif /* Default to using APCS-32 and software floating point. */ *************** Boston, MA 02111-1307, USA. */ *** 30,161 **** #endif /* Now we define the strings used to build the spec file. */ ! #define STARTFILE_SPEC "crtbegin%O%s crt0%O%s" ! ! #define ENDFILE_SPEC "crtend%O%s" ! ! #define USER_LABEL_PREFIX "" ! #define LOCAL_LABEL_PREFIX "." ! #define TEXT_SECTION " .text" ! #define INVOKE__main ! /* Debugging */ ! #define DWARF_DEBUGGING_INFO ! #define DWARF2_DEBUGGING_INFO #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG - /* Support for Constructors and Destrcutors . */ - #define READONLY_DATA_SECTION rdata_section - - /* A list of other sections which the compiler might be "in" at any - given time. */ - #define SUBTARGET_EXTRA_SECTIONS in_rdata, - - /* A list of extra section function definitions. */ - #define SUBTARGET_EXTRA_SECTION_FUNCTIONS RDATA_SECTION_FUNCTION - - #define RDATA_SECTION_ASM_OP "\t.section .rodata" - - #define RDATA_SECTION_FUNCTION \ - void \ - rdata_section () \ - { \ - if (in_section != in_rdata) \ - { \ - fprintf (asm_out_file, "%s\n", RDATA_SECTION_ASM_OP); \ - in_section = in_rdata; \ - } \ - } - - #define CTOR_LIST_BEGIN \ - asm (CTORS_SECTION_ASM_OP); \ - func_ptr __CTOR_LIST__[1] = { (func_ptr) (-1) } - - #define CTOR_LIST_END \ - asm (CTORS_SECTION_ASM_OP); \ - func_ptr __CTOR_END__[1] = { (func_ptr) 0 }; - - #define DTOR_LIST_BEGIN \ - asm (DTORS_SECTION_ASM_OP); \ - func_ptr __DTOR_LIST__[1] = { (func_ptr) (-1) } - - #define DTOR_LIST_END \ - asm (DTORS_SECTION_ASM_OP); \ - func_ptr __DTOR_END__[1] = { (func_ptr) 0 }; - - /* A C statement to output something to the assembler file to switch to section - NAME for object DECL which is either a FUNCTION_DECL, a VAR_DECL or - NULL_TREE. Some target formats do not support arbitrary sections. Do not - define this macro in such cases. */ - #define ASM_OUTPUT_SECTION_NAME(STREAM, DECL, NAME, RELOC) \ - do \ - { \ - if ((DECL) && TREE_CODE (DECL) == FUNCTION_DECL) \ - fprintf (STREAM, "\t.section %s,\"ax\",@progbits\n", (NAME)); \ - else if ((DECL) && DECL_READONLY_SECTION (DECL, RELOC)) \ - fprintf (STREAM, "\t.section %s,\"a\"\n", (NAME)); \ - else if (! strncmp (NAME, ".bss", 4)) \ - fprintf (STREAM, "\t.section %s,\"aw\",@nobits\n", (NAME)); \ - else \ - fprintf (STREAM, "\t.section %s,\"aw\"\n", (NAME)); \ - } \ - while (0) - - /* The ARM development system defines __main. */ - #define NAME__MAIN "__gccmain" - #define SYMBOL__MAIN __gccmain - /* Return a non-zero value if DECL has a section attribute. */ #define IN_NAMED_SECTION(DECL) \ ((TREE_CODE (DECL) == FUNCTION_DECL || TREE_CODE (DECL) == VAR_DECL) \ && DECL_SECTION_NAME (DECL) != NULL_TREE) - #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1) - - #define UNIQUE_SECTION_P(DECL) (DECL_ONE_ONLY (DECL)) - - #define UNIQUE_SECTION(DECL, RELOC) \ - do \ - { \ - int len; \ - int sec; \ - const char * name; \ - char * string; \ - char * prefix; \ - static char * prefixes[4][2] = \ - { \ - { ".text.", ".gnu.linkonce.t." }, \ - { ".rodata.", ".gnu.linkonce.r." }, \ - { ".data.", ".gnu.linkonce.d." }, \ - { ".bss.", ".gnu.linkonce.b." } \ - }; \ - \ - if (TREE_CODE (DECL) == FUNCTION_DECL) \ - sec = 0; \ - else if (DECL_READONLY_SECTION (DECL, RELOC)) \ - sec = 1; \ - else if (DECL_INITIAL (DECL) == NULL_TREE) \ - sec = 3; \ - else \ - sec = 2; \ - \ - prefix = prefixes[sec][DECL_ONE_ONLY(DECL)]; \ - name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (DECL)); \ - \ - /* Strip off any encoding in name. */ \ - STRIP_NAME_ENCODING (name, name); \ - \ - len = strlen (name) + strlen (prefix); \ - string = alloca (len + 1); \ - \ - sprintf (string, "%s%s", prefix, name); \ - \ - DECL_SECTION_NAME (DECL) = build_string (len, string); \ - } \ - while (0) - #undef ASM_OUTPUT_ALIGNED_BSS #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ do \ --- 33,57 ---- #endif /* Now we define the strings used to build the spec file. */ ! #undef STARTFILE_SPEC ! #define STARTFILE_SPEC " crti%O%s crtbegin%O%s crt0%O%s" ! #undef ENDFILE_SPEC ! #define ENDFILE_SPEC "crtend%O%s crtn%O%s" ! /* The __USES_INITFINI__ define is tested in newlib/libc/sys/arm/crt0.S ! to see if it needs to invoked _init() and _fini(). */ ! #undef SUBTARGET_CPP_SPEC ! #define SUBTARGET_CPP_SPEC "-D__ELF__ -D__USES_INITFINI__" ! #undef PREFERRED_DEBUGGING_TYPE #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG /* Return a non-zero value if DECL has a section attribute. */ #define IN_NAMED_SECTION(DECL) \ ((TREE_CODE (DECL) == FUNCTION_DECL || TREE_CODE (DECL) == VAR_DECL) \ && DECL_SECTION_NAME (DECL) != NULL_TREE) #undef ASM_OUTPUT_ALIGNED_BSS #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ do \ *************** rdata_section () \ *** 179,185 **** #define ASM_OUTPUT_ALIGNED_DECL_LOCAL(FILE, DECL, NAME, SIZE, ALIGN) \ do \ { \ ! if (IN_NAMED_SECTION (DECL)) \ named_section (DECL, NULL, 0); \ else \ bss_section (); \ --- 75,81 ---- #define ASM_OUTPUT_ALIGNED_DECL_LOCAL(FILE, DECL, NAME, SIZE, ALIGN) \ do \ { \ ! if ((DECL) != NULL && IN_NAMED_SECTION (DECL)) \ named_section (DECL, NULL, 0); \ else \ bss_section (); \ *************** rdata_section () \ *** 190,195 **** --- 86,95 ---- } \ while (0) + #ifndef CPP_PREDEFINES + #define CPP_PREDEFINES "-D__ELF__" + #endif + #ifndef CPP_APCS_PC_DEFAULT_SPEC #define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__" #endif *************** rdata_section () \ *** 198,202 **** #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm7tdmi #endif - /* Now get the routine arm-elf definitions. */ - #include "elf.h" --- 98,100 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/arm/vxarm.h gcc-3.1/gcc/config/arm/vxarm.h *** gcc-3.0.4/gcc/config/arm/vxarm.h Thu Nov 2 23:29:08 2000 --- gcc-3.1/gcc/config/arm/vxarm.h Fri Nov 16 21:23:16 2001 *************** Boston, MA 02111-1307, USA. */ *** 23,30 **** #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm710 - #include "arm/coff.h" - #undef SUBTARGET_CPP_SPEC #define SUBTARGET_CPP_SPEC \ "%{march=arm710:-DCPU=ARM710A} \ --- 23,28 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/arm/x-riscix gcc-3.1/gcc/config/arm/x-riscix *** gcc-3.0.4/gcc/config/arm/x-riscix Wed Dec 16 21:02:04 1998 --- gcc-3.1/gcc/config/arm/x-riscix Thu Jan 1 00:00:00 1970 *************** *** 1,8 **** - # Define new names for the getopt library, so that we don't have to statically - # link [un]protoize. We have dirent.h not sys/dir.h, so define POSIX. - X_CFLAGS= -DPOSIX -Dopterr=gcc_opterr -Doptind=gcc_optind \ - -Dgetopt=gcc_getopt -Doptarg=gcc_optarg - # Compile in BSD mode. - OLDCC=/usr/ucb/cc - CC=$(OLDCC) - FIXPROTO_DEFINES= -D_POSIX_SOURCE -D_XOPEN_C -D_BSD_C -D_XOPEN_SOURCE --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/arm/xm-arm.h gcc-3.1/gcc/config/arm/xm-arm.h *** gcc-3.0.4/gcc/config/arm/xm-arm.h Thu Mar 15 19:02:01 2001 --- gcc-3.1/gcc/config/arm/xm-arm.h Thu Jan 1 00:00:00 1970 *************** *** 1,63 **** - /* Configuration for GNU C-compiler for Acorn RISC Machine. - Copyright (C) 1991, 1993 Free Software Foundation, Inc. - Contributed by Pieter `Tiggr' Schoenmakers (rcpieter@win.tue.nl) - and Martin Simmons (@harleqn.co.uk). - More major hacks by Richard Earnshaw (rwe11@cl.cam.ac.uk) - - 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 describes the machine the compiler is hosted on. */ - #define HOST_BITS_PER_CHAR 8 - #define HOST_BITS_PER_SHORT 16 - #define HOST_BITS_PER_INT 32 - #define HOST_BITS_PER_LONG 32 - #define HOST_BITS_PER_LONGLONG 64 - - /* A code distinguishing the floating point format of the host - machine. There are three defined values: IEEE_FLOAT_FORMAT, - VAX_FLOAT_FORMAT, and UNKNOWN_FLOAT_FORMAT. */ - - #define HOST_FLOAT_FORMAT IEEE_FLOAT_FORMAT - - #define HOST_FLOAT_WORDS_BIG_ENDIAN 1 - - /* If not compiled with GNU C, use C alloca. */ - #ifndef __GNUC__ - #define USE_C_ALLOCA - #endif - - /* Define this to be 1 if you know the host compiler supports prototypes, even - if it doesn't define __STDC__, or define it to be 0 if you do not want any - prototypes when compiling GNU CC. */ - #define USE_PROTOTYPES 1 - - /* target machine dependencies. - tm.h is a symbolic link to the actual target specific file. */ - #include "tm.h" - - /* Arguments to use with `exit'. */ - #define SUCCESS_EXIT_CODE 0 - #define FATAL_EXIT_CODE 33 - - /* If we have defined POSIX, but are compiling in the BSD environment, then - we need to define getcwd in terms of getwd. */ - #if defined (POSIX) && defined (_BSD_C) - #define HAVE_GETWD 1 - #endif - - /* EOF xm-arm.h */ --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/arm/xm-linux.h gcc-3.1/gcc/config/arm/xm-linux.h *** gcc-3.0.4/gcc/config/arm/xm-linux.h Wed Dec 16 21:02:06 1998 --- gcc-3.1/gcc/config/arm/xm-linux.h Thu Jan 1 00:00:00 1970 *************** *** 1,24 **** - /* Configuration for GCC for Intel i386 running Linux-based GNU systems./ - Copyright (C) 1993, 1994, 1995, 1997 Free Software Foundation, Inc. - Contributed by H.J. Lu (hjl@nynexst.com) - - This file is part of GNU CC. - - GNU CC is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU CC is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNU CC; see the file COPYING. If not, write to - the Free Software Foundation, 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - - #include - #include - --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/arm/xscale-coff.h gcc-3.1/gcc/config/arm/xscale-coff.h *** gcc-3.0.4/gcc/config/arm/xscale-coff.h Mon Dec 4 00:23:35 2000 --- gcc-3.1/gcc/config/arm/xscale-coff.h Fri Nov 23 09:13:14 2001 *************** *** 1,35 **** /* Definitions for XScale systems using COFF ! Copyright (C) 1999, 2000 Free Software Foundation, Inc. Contributed by Catherine Moore ! 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 this program; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* Run-time Target Specification. */ ! #ifndef SUBTARGET_CPU_DEFAULT #define SUBTARGET_CPU_DEFAULT TARGET_CPU_xscale - #endif #define SUBTARGET_EXTRA_ASM_SPEC "%{!mcpu=*:-mxscale}" #define MULTILIB_DEFAULTS \ { "mlittle-endian", "mno-thumb-interwork", "marm" } - #include "coff.h" - #undef TARGET_VERSION #define TARGET_VERSION fputs (" (XScale/COFF)", stderr); --- 1,34 ---- /* Definitions for XScale systems using COFF ! Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Catherine Moore ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it ! under the terms of the GNU General Public License as published ! by the Free Software Foundation; either version 2, or (at your ! option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ! ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public ! License for more details. ! You should have received a copy of the GNU General Public License ! along with this program; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, Boston, ! MA 02111-1307, USA. */ /* Run-time Target Specification. */ ! #undef SUBTARGET_CPU_DEFAULT #define SUBTARGET_CPU_DEFAULT TARGET_CPU_xscale + #undef SUBTARGET_EXTRA_ASM_SPEC #define SUBTARGET_EXTRA_ASM_SPEC "%{!mcpu=*:-mxscale}" + #undef MULTILIB_DEFAULTS #define MULTILIB_DEFAULTS \ { "mlittle-endian", "mno-thumb-interwork", "marm" } #undef TARGET_VERSION #define TARGET_VERSION fputs (" (XScale/COFF)", stderr); diff -Nrc3pad gcc-3.0.4/gcc/config/arm/xscale-elf.h gcc-3.1/gcc/config/arm/xscale-elf.h *** gcc-3.0.4/gcc/config/arm/xscale-elf.h Mon Dec 4 00:23:35 2000 --- gcc-3.1/gcc/config/arm/xscale-elf.h Wed Dec 19 15:27:22 2001 *************** *** 1,5 **** /* Definitions for XScale architectures using ELF ! Copyright (C) 1999, 2000 Free Software Foundation, Inc. Contributed by Catherine Moore This file is part of GNU CC. --- 1,5 ---- /* Definitions for XScale architectures using ELF ! Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Catherine Moore This file is part of GNU CC. *************** Boston, MA 02111-1307, USA. */ *** 28,38 **** #define SUBTARGET_CPU_DEFAULT TARGET_CPU_xscale #endif ! #define SUBTARGET_EXTRA_ASM_SPEC "%{!mcpu=*:-mxscale}" #ifndef MULTILIB_DEFAULTS #define MULTILIB_DEFAULTS \ ! { "mlittle-endian", "mno-thumb-interwork", "marm" } #endif - - #include "unknown-elf.h" --- 28,36 ---- #define SUBTARGET_CPU_DEFAULT TARGET_CPU_xscale #endif ! #define SUBTARGET_EXTRA_ASM_SPEC "%{!mcpu=*:-mxscale} %{!mhard-float:-mno-fpu}" #ifndef MULTILIB_DEFAULTS #define MULTILIB_DEFAULTS \ ! { "mlittle-endian", "mno-thumb-interwork", "marm", "msoft-float" } #endif diff -Nrc3pad gcc-3.0.4/gcc/config/avr/avr-protos.h gcc-3.1/gcc/config/avr/avr-protos.h *** gcc-3.0.4/gcc/config/avr/avr-protos.h Sun Jan 21 07:08:46 2001 --- gcc-3.1/gcc/config/avr/avr-protos.h Mon Dec 17 15:05:27 2001 *************** extern int frame_pointer_required_p *** 35,42 **** extern void asm_globalize_label PARAMS ((FILE *file, const char *name)); extern void order_regs_for_local_alloc PARAMS ((void)); extern int initial_elimination_offset PARAMS ((int from, int to)); - extern void function_prologue PARAMS ((FILE *file, int size)); - extern void function_epilogue PARAMS ((FILE *file, int size)); extern void progmem_section PARAMS ((void)); extern int mask_one_bit_p PARAMS ((HOST_WIDE_INT mask)); extern void gas_output_limited_string PARAMS ((FILE *file, const char *str)); --- 35,40 ---- *************** extern void asm_output_external *** 47,61 **** char *name)); extern void unique_section PARAMS ((tree decl, int reloc)); extern void encode_section_info PARAMS ((tree decl)); - extern void asm_output_section_name PARAMS ((FILE *file, tree decl, - const char *name, - int reloc)); - extern int valid_machine_type_attribute PARAMS ((tree type, tree attributes, - tree identifier, - tree args)); - extern int valid_machine_decl_attribute PARAMS ((tree decl, tree attributes, - tree attr, tree args)); - extern int avr_progmem_p PARAMS ((tree decl)); --- 45,50 ---- *************** extern const char * output_reload_insisf *** 126,134 **** int *len)); extern int default_rtx_costs PARAMS ((rtx X, RTX_CODE code, RTX_CODE outer_code)); - extern void asm_output_char PARAMS ((FILE *file, rtx value)); - extern void asm_output_short PARAMS ((FILE *file, rtx value)); - extern void asm_output_byte PARAMS ((FILE *file, int value)); extern enum reg_class secondary_input_reload_class PARAMS ((enum reg_class, enum machine_mode, rtx)); --- 115,120 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/avr/avr.c gcc-3.1/gcc/config/avr/avr.c *** gcc-3.0.4/gcc/config/avr/avr.c Wed Jun 27 21:35:37 2001 --- gcc-3.1/gcc/config/avr/avr.c Mon Jan 7 15:04:34 2002 *************** *** 1,5 **** /* Subroutines for insn-output.c for ATMEL AVR micro controllers ! Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Denis Chertykov (denisc@overta.ru) This file is part of GNU CC. --- 1,5 ---- /* Subroutines for insn-output.c for ATMEL AVR micro controllers ! Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Denis Chertykov (denisc@overta.ru) This file is part of GNU CC. *************** *** 38,43 **** --- 38,45 ---- #include "function.h" #include "recog.h" #include "tm_p.h" + #include "target.h" + #include "target-def.h" /* Maximal allowed offset for an address in the LD command */ #define MAX_LD_OFFSET(MODE) (64 - (signed)GET_MODE_SIZE (MODE)) *************** static int compare_sign_p PARAM *** 56,61 **** --- 58,69 ---- static int reg_was_0 PARAMS ((rtx insn, rtx op)); static int io_address_p PARAMS ((rtx x, int size)); void debug_hard_reg_set PARAMS ((HARD_REG_SET set)); + static tree avr_handle_progmem_attribute PARAMS ((tree *, tree, tree, int, bool *)); + static tree avr_handle_fndecl_attribute PARAMS ((tree *, tree, tree, int, bool *)); + const struct attribute_spec avr_attribute_table[]; + static bool avr_assemble_integer PARAMS ((rtx, unsigned int, int)); + static void avr_output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT)); + static void avr_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT)); /* Allocate registers from r25 to r8 for parameters for function calls */ #define FIRST_CUM_REG 26 *************** rtx zero_reg_rtx; *** 71,77 **** rtx ldi_reg_rtx; /* AVR register names {"r0", "r1", ..., "r31"} */ ! const char * avr_regnames[] = REGISTER_NAMES; /* This holds the last insn address. */ static int last_insn_address = 0; --- 79,85 ---- rtx ldi_reg_rtx; /* AVR register names {"r0", "r1", ..., "r31"} */ ! static const char *const avr_regnames[] = REGISTER_NAMES; /* This holds the last insn address. */ static int last_insn_address = 0; *************** enum avr_arch { *** 113,120 **** }; struct mcu_type_s { ! const char *name; ! enum avr_arch arch; }; /* List of all known AVR MCU types - if updated, it has to be kept --- 121,128 ---- }; struct mcu_type_s { ! const char *const name; ! const enum avr_arch arch; }; /* List of all known AVR MCU types - if updated, it has to be kept *************** static const struct mcu_type_s avr_mcu_t *** 143,157 **** --- 151,173 ---- { "avr3", AVR3 }, { "atmega103", AVR3 }, { "atmega603", AVR3 }, + { "at43usb320", AVR3 }, + { "at76c711", AVR3 }, /* Enhanced, <= 8K. */ { "avr4", AVR4 }, + { "atmega8", AVR4 }, { "atmega83", AVR4 }, { "atmega85", AVR4 }, /* Enhanced, > 8K. */ { "avr5", AVR5 }, + { "atmega16", AVR5 }, { "atmega161", AVR5 }, { "atmega163", AVR5 }, { "atmega32", AVR5 }, + { "atmega323", AVR5 }, + { "atmega64", AVR5 }, + { "atmega128", AVR5 }, + { "at43usb355", AVR5 }, { "at94k", AVR5 }, /* Assembler only. */ { "avr1", AVR1 }, *************** static const struct mcu_type_s avr_mcu_t *** 165,171 **** --- 181,202 ---- }; int avr_case_values_threshold = 30000; + + /* Initialize the GCC target structure. */ + #undef TARGET_ASM_ALIGNED_HI_OP + #define TARGET_ASM_ALIGNED_HI_OP "\t.word\t" + #undef TARGET_ASM_INTEGER + #define TARGET_ASM_INTEGER avr_assemble_integer + #undef TARGET_ASM_FUNCTION_PROLOGUE + #define TARGET_ASM_FUNCTION_PROLOGUE avr_output_function_prologue + #undef TARGET_ASM_FUNCTION_EPILOGUE + #define TARGET_ASM_FUNCTION_EPILOGUE avr_output_function_epilogue + #undef TARGET_ATTRIBUTE_TABLE + #define TARGET_ATTRIBUTE_TABLE avr_attribute_table + + struct gcc_target targetm = TARGET_INITIALIZER; + void avr_override_options () { *************** avr_override_options () *** 177,183 **** if (!t->name) { ! fprintf (stderr, "Unknown MCU `%s' specified\nKnown MCU names:\n", avr_mcu_name); for (t = avr_mcu_types; t->name; t++) fprintf (stderr," %s\n", t->name); --- 208,214 ---- if (!t->name) { ! fprintf (stderr, "unknown MCU `%s' specified\nKnown MCU names:\n", avr_mcu_name); for (t = avr_mcu_types; t->name; t++) fprintf (stderr," %s\n", t->name); *************** avr_init_once () *** 225,231 **** /* return register class from register number */ ! static int reg_class_tab[]={ GENERAL_REGS,GENERAL_REGS,GENERAL_REGS,GENERAL_REGS,GENERAL_REGS, GENERAL_REGS,GENERAL_REGS,GENERAL_REGS,GENERAL_REGS,GENERAL_REGS, GENERAL_REGS,GENERAL_REGS,GENERAL_REGS,GENERAL_REGS,GENERAL_REGS, --- 256,262 ---- /* return register class from register number */ ! static const int reg_class_tab[]={ GENERAL_REGS,GENERAL_REGS,GENERAL_REGS,GENERAL_REGS,GENERAL_REGS, GENERAL_REGS,GENERAL_REGS,GENERAL_REGS,GENERAL_REGS,GENERAL_REGS, GENERAL_REGS,GENERAL_REGS,GENERAL_REGS,GENERAL_REGS,GENERAL_REGS, *************** avr_naked_function_p (func) *** 291,297 **** if (TREE_CODE (func) != FUNCTION_DECL) abort (); ! a = lookup_attribute ("naked", DECL_MACHINE_ATTRIBUTES (func)); return a != NULL_TREE; } --- 322,328 ---- if (TREE_CODE (func) != FUNCTION_DECL) abort (); ! a = lookup_attribute ("naked", DECL_ATTRIBUTES (func)); return a != NULL_TREE; } *************** interrupt_function_p (func) *** 307,313 **** if (TREE_CODE (func) != FUNCTION_DECL) return 0; ! a = lookup_attribute ("interrupt", DECL_MACHINE_ATTRIBUTES (func)); return a != NULL_TREE; } --- 338,344 ---- if (TREE_CODE (func) != FUNCTION_DECL) return 0; ! a = lookup_attribute ("interrupt", DECL_ATTRIBUTES (func)); return a != NULL_TREE; } *************** signal_function_p (func) *** 323,329 **** if (TREE_CODE (func) != FUNCTION_DECL) return 0; ! a = lookup_attribute ("signal", DECL_MACHINE_ATTRIBUTES (func)); return a != NULL_TREE; } --- 354,360 ---- if (TREE_CODE (func) != FUNCTION_DECL) return 0; ! a = lookup_attribute ("signal", DECL_ATTRIBUTES (func)); return a != NULL_TREE; } *************** out_set_stack_ptr (file, before, after) *** 525,534 **** /* Output function prologue */ ! void ! function_prologue (file, size) FILE *file; ! int size; { int reg; int interrupt_func_p; --- 556,565 ---- /* Output function prologue */ ! static void ! avr_output_function_prologue (file, size) FILE *file; ! HOST_WIDE_INT size; { int reg; int interrupt_func_p; *************** function_prologue (file, size) *** 662,671 **** /* Output function epilogue */ ! void ! function_epilogue (file, size) FILE *file; ! int size; { int reg; int interrupt_func_p; --- 693,702 ---- /* Output function epilogue */ ! static void ! avr_output_function_epilogue (file, size) FILE *file; ! HOST_WIDE_INT size; { int reg; int interrupt_func_p; *************** print_operand (file, x, code) *** 1022,1028 **** else if (code == 'o') { if (GET_CODE (addr) != PLUS) ! fatal_insn ("Bad address, not (reg+disp):", addr); print_operand (file, XEXP (addr, 1), 0); } --- 1053,1059 ---- else if (code == 'o') { if (GET_CODE (addr) != PLUS) ! fatal_insn ("bad address, not (reg+disp):", addr); print_operand (file, XEXP (addr, 1), 0); } *************** print_operand (file, x, code) *** 1030,1036 **** { print_operand_address (file, XEXP (addr,0)); if (REGNO (XEXP (addr, 0)) == REG_X) ! fatal_insn ("Internal compiler bug.\nBad address:" ,addr); fputc ('+', file); print_operand (file, XEXP (addr,1), code); --- 1061,1067 ---- { print_operand_address (file, XEXP (addr,0)); if (REGNO (XEXP (addr, 0)) == REG_X) ! fatal_insn ("internal compiler error. Bad address:" ,addr); fputc ('+', file); print_operand (file, XEXP (addr,1), code); *************** print_operand (file, x, code) *** 1043,1049 **** long val; REAL_VALUE_TYPE rv; if (GET_MODE (x) != SFmode) ! fatal_insn ("Internal compiler bug. Unknown mode:", x); REAL_VALUE_FROM_CONST_DOUBLE (rv, x); REAL_VALUE_TO_TARGET_SINGLE (rv, val); asm_fprintf (file, "0x%lx", val); --- 1074,1080 ---- long val; REAL_VALUE_TYPE rv; if (GET_MODE (x) != SFmode) ! fatal_insn ("internal compiler error. Unknown mode:", x); REAL_VALUE_FROM_CONST_DOUBLE (rv, x); REAL_VALUE_TO_TARGET_SINGLE (rv, val); asm_fprintf (file, "0x%lx", val); *************** avr_simplify_comparision_p (mode, operat *** 1341,1347 **** { unsigned int max = (mode == QImode ? 0xff : mode == HImode ? 0xffff : ! mode == SImode ? 0xffffffffU : 0); if (max && operator && GET_CODE (x) == CONST_INT) { if (unsigned_condition (operator) != operator) --- 1372,1378 ---- { unsigned int max = (mode == QImode ? 0xff : mode == HImode ? 0xffff : ! mode == SImode ? 0xffffffff : 0); if (max && operator && GET_CODE (x) == CONST_INT) { if (unsigned_condition (operator) != operator) *************** output_movhi (insn, operands, l) *** 1751,1757 **** operands[1] = src; return ""; } ! fatal_insn ("Invalid insn:", insn); return ""; } --- 1782,1788 ---- operands[1] = src; return ""; } ! fatal_insn ("invalid insn:", insn); return ""; } *************** out_movqi_r_mr (insn, op, l) *** 1788,1794 **** { int disp = INTVAL (XEXP (x,1)); if (REGNO (XEXP (x,0)) != REG_Y) ! fatal_insn ("Incorrect insn:",insn); if (disp <= 63 + MAX_LD_OFFSET (GET_MODE (src))) return *l = 3, (AS2 (adiw,r28,%o1-63) CR_TAB --- 1819,1825 ---- { int disp = INTVAL (XEXP (x,1)); if (REGNO (XEXP (x,0)) != REG_Y) ! fatal_insn ("incorrect insn:",insn); if (disp <= 63 + MAX_LD_OFFSET (GET_MODE (src))) return *l = 3, (AS2 (adiw,r28,%o1-63) CR_TAB *************** out_movhi_r_mr (insn, op, l) *** 1874,1880 **** if (disp > MAX_LD_OFFSET (GET_MODE (src))) { if (REGNO (XEXP (base, 0)) != REG_Y) ! fatal_insn ("Incorrect insn:",insn); if (disp <= 63 + MAX_LD_OFFSET (GET_MODE (src))) return *l = 4, (AS2 (adiw,r28,%o1-62) CR_TAB --- 1905,1911 ---- if (disp > MAX_LD_OFFSET (GET_MODE (src))) { if (REGNO (XEXP (base, 0)) != REG_Y) ! fatal_insn ("incorrect insn:",insn); if (disp <= 63 + MAX_LD_OFFSET (GET_MODE (src))) return *l = 4, (AS2 (adiw,r28,%o1-62) CR_TAB *************** out_movhi_r_mr (insn, op, l) *** 1923,1929 **** else if (GET_CODE (base) == PRE_DEC) /* (--R) */ { if (reg_overlap_mentioned_p (dest, XEXP (base, 0))) ! fatal_insn ("Incorrect insn:", insn); *l = 2; return (AS2 (ld,%B0,%1) CR_TAB --- 1954,1960 ---- else if (GET_CODE (base) == PRE_DEC) /* (--R) */ { if (reg_overlap_mentioned_p (dest, XEXP (base, 0))) ! fatal_insn ("incorrect insn:", insn); *l = 2; return (AS2 (ld,%B0,%1) CR_TAB *************** out_movhi_r_mr (insn, op, l) *** 1932,1938 **** else if (GET_CODE (base) == POST_INC) /* (R++) */ { if (reg_overlap_mentioned_p (dest, XEXP (base, 0))) ! fatal_insn ("Incorrect insn:", insn); *l = 2; return (AS2 (ld,%A0,%1) CR_TAB --- 1963,1969 ---- else if (GET_CODE (base) == POST_INC) /* (R++) */ { if (reg_overlap_mentioned_p (dest, XEXP (base, 0))) ! fatal_insn ("incorrect insn:", insn); *l = 2; return (AS2 (ld,%A0,%1) CR_TAB *************** out_movhi_r_mr (insn, op, l) *** 1951,1957 **** AS2 (lds,%B0,%B1)); } ! fatal_insn ("Unknown move insn:",insn); return ""; } --- 1982,1988 ---- AS2 (lds,%B0,%B1)); } ! fatal_insn ("unknown move insn:",insn); return ""; } *************** out_movsi_r_mr (insn, op, l) *** 2030,2036 **** if (disp > MAX_LD_OFFSET (GET_MODE (src))) { if (REGNO (XEXP (base, 0)) != REG_Y) ! fatal_insn ("Incorrect insn:",insn); if (disp <= 63 + MAX_LD_OFFSET (GET_MODE (src))) return *l = 6, (AS2 (adiw,r28,%o1-60) CR_TAB --- 2061,2067 ---- if (disp > MAX_LD_OFFSET (GET_MODE (src))) { if (REGNO (XEXP (base, 0)) != REG_Y) ! fatal_insn ("incorrect insn:",insn); if (disp <= 63 + MAX_LD_OFFSET (GET_MODE (src))) return *l = 6, (AS2 (adiw,r28,%o1-60) CR_TAB *************** out_movsi_r_mr (insn, op, l) *** 2115,2121 **** AS2 (lds,%C0,%C1) CR_TAB AS2 (lds,%D0,%D1)); ! fatal_insn ("Unknown move insn:",insn); return ""; } --- 2146,2152 ---- AS2 (lds,%C0,%C1) CR_TAB AS2 (lds,%D0,%D1)); ! fatal_insn ("unknown move insn:",insn); return ""; } *************** out_movsi_mr_r (insn, op, l) *** 2202,2208 **** if (disp > MAX_LD_OFFSET (GET_MODE (dest))) { if (reg_base != REG_Y) ! fatal_insn ("Incorrect insn:",insn); if (disp <= 63 + MAX_LD_OFFSET (GET_MODE (dest))) return *l = 6, (AS2 (adiw,r28,%o0-60) CR_TAB --- 2233,2239 ---- if (disp > MAX_LD_OFFSET (GET_MODE (dest))) { if (reg_base != REG_Y) ! fatal_insn ("incorrect insn:",insn); if (disp <= 63 + MAX_LD_OFFSET (GET_MODE (dest))) return *l = 6, (AS2 (adiw,r28,%o0-60) CR_TAB *************** out_movsi_mr_r (insn, op, l) *** 2273,2279 **** AS2 (st,%0,%B1) CR_TAB AS2 (st,%0,%C1) CR_TAB AS2 (st,%0,%D1)); ! fatal_insn ("Unknown move insn:",insn); return ""; } --- 2304,2310 ---- AS2 (st,%0,%B1) CR_TAB AS2 (st,%0,%C1) CR_TAB AS2 (st,%0,%D1)); ! fatal_insn ("unknown move insn:",insn); return ""; } *************** output_movsisf(insn, operands, l) *** 2344,2350 **** if (GET_CODE (src) == CONST_INT) { ! const char *clr_op0 = AVR_ENHANCED ? (AS1 (clr,%A0) CR_TAB AS1 (clr,%B0) CR_TAB AS2 (movw,%C0,%A0)) --- 2375,2381 ---- if (GET_CODE (src) == CONST_INT) { ! const char *const clr_op0 = AVR_ENHANCED ? (AS1 (clr,%A0) CR_TAB AS1 (clr,%B0) CR_TAB AS2 (movw,%C0,%A0)) *************** output_movsisf(insn, operands, l) *** 2463,2469 **** operands[1] = src; return ""; } ! fatal_insn ("Invalid insn:", insn); return ""; } --- 2494,2500 ---- operands[1] = src; return ""; } ! fatal_insn ("invalid insn:", insn); return ""; } *************** out_movqi_mr_r (insn, op, l) *** 2500,2506 **** { int disp = INTVAL (XEXP (x,1)); if (REGNO (XEXP (x,0)) != REG_Y) ! fatal_insn ("Incorrect insn:",insn); if (disp <= 63 + MAX_LD_OFFSET (GET_MODE (dest))) return *l = 3, (AS2 (adiw,r28,%o0-63) CR_TAB --- 2531,2537 ---- { int disp = INTVAL (XEXP (x,1)); if (REGNO (XEXP (x,0)) != REG_Y) ! fatal_insn ("incorrect insn:",insn); if (disp <= 63 + MAX_LD_OFFSET (GET_MODE (dest))) return *l = 3, (AS2 (adiw,r28,%o0-63) CR_TAB *************** out_movhi_mr_r (insn, op, l) *** 2611,2617 **** if (disp > MAX_LD_OFFSET (GET_MODE (dest))) { if (reg_base != REG_Y) ! fatal_insn ("Incorrect insn:",insn); if (disp <= 63 + MAX_LD_OFFSET (GET_MODE (dest))) return *l = 4, (AS2 (adiw,r28,%o0-62) CR_TAB --- 2642,2648 ---- if (disp > MAX_LD_OFFSET (GET_MODE (dest))) { if (reg_base != REG_Y) ! fatal_insn ("incorrect insn:",insn); if (disp <= 63 + MAX_LD_OFFSET (GET_MODE (dest))) return *l = 4, (AS2 (adiw,r28,%o0-62) CR_TAB *************** out_movhi_mr_r (insn, op, l) *** 2655,2661 **** else if (GET_CODE (base) == POST_INC) /* (R++) */ return *l=2, (AS2 (st,%0,%A1) CR_TAB AS2 (st,%0,%B1)); ! fatal_insn ("Unknown move insn:",insn); return ""; } --- 2686,2692 ---- else if (GET_CODE (base) == POST_INC) /* (R++) */ return *l=2, (AS2 (st,%0,%A1) CR_TAB AS2 (st,%0,%B1)); ! fatal_insn ("unknown move insn:",insn); return ""; } *************** out_shift_with_cnt (template, insn, oper *** 2891,2897 **** } } else ! fatal_insn ("Bad shift insn:", insn); if (second_label) { --- 2922,2928 ---- } } else ! fatal_insn ("bad shift insn:", insn); if (second_label) { *************** ashlqi3_out (insn, operands, len) *** 3007,3013 **** } } else if (CONSTANT_P (operands[2])) ! fatal_insn ("Internal compiler bug.\nIncorrect shift:", insn); out_shift_with_cnt (AS1 (lsl,%0), insn, operands, len, 1); --- 3038,3044 ---- } } else if (CONSTANT_P (operands[2])) ! fatal_insn ("internal compiler error. Incorrect shift:", insn); out_shift_with_cnt (AS1 (lsl,%0), insn, operands, len, 1); *************** ashrqi3_out (insn, operands, len) *** 3437,3443 **** } } else if (CONSTANT_P (operands[2])) ! fatal_insn ("Internal compiler bug.\nIncorrect shift:", insn); out_shift_with_cnt (AS1 (asr,%0), insn, operands, len, 1); --- 3468,3474 ---- } } else if (CONSTANT_P (operands[2])) ! fatal_insn ("internal compiler error. Incorrect shift:", insn); out_shift_with_cnt (AS1 (asr,%0), insn, operands, len, 1); *************** lshrqi3_out (insn, operands, len) *** 3817,3823 **** } } else if (CONSTANT_P (operands[2])) ! fatal_insn ("Internal compiler bug.\nIncorrect shift:", insn); out_shift_with_cnt (AS1 (lsr,%0), insn, operands, len, 1); --- 3848,3854 ---- } } else if (CONSTANT_P (operands[2])) ! fatal_insn ("internal compiler error. Incorrect shift:", insn); out_shift_with_cnt (AS1 (lsr,%0), insn, operands, len, 1); *************** adjust_insn_length (insn, len) *** 4225,4232 **** if (GET_MODE (op[1]) == SImode) len = (((mask & 0xff) != 0xff) + ((mask & 0xff00) != 0xff00) ! + ((mask & 0xff0000UL) != 0xff0000UL) ! + ((mask & 0xff000000UL) != 0xff000000UL)); else if (GET_MODE (op[1]) == HImode) len = (((mask & 0xff) != 0xff) + ((mask & 0xff00) != 0xff00)); --- 4256,4263 ---- if (GET_MODE (op[1]) == SImode) len = (((mask & 0xff) != 0xff) + ((mask & 0xff00) != 0xff00) ! + ((mask & 0xff0000L) != 0xff0000L) ! + ((mask & 0xff000000L) != 0xff000000L)); else if (GET_MODE (op[1]) == HImode) len = (((mask & 0xff) != 0xff) + ((mask & 0xff00) != 0xff00)); *************** adjust_insn_length (insn, len) *** 4240,4247 **** if (GET_MODE (op[1]) == SImode) len = (((mask & 0xff) != 0) + ((mask & 0xff00) != 0) ! + ((mask & 0xff0000UL) != 0) ! + ((mask & 0xff000000UL) != 0)); else if (GET_MODE (op[1]) == HImode) len = (((mask & 0xff) != 0) + ((mask & 0xff00) != 0)); --- 4271,4278 ---- if (GET_MODE (op[1]) == SImode) len = (((mask & 0xff) != 0) + ((mask & 0xff00) != 0) ! + ((mask & 0xff0000L) != 0) ! + ((mask & 0xff000000L) != 0)); else if (GET_MODE (op[1]) == HImode) len = (((mask & 0xff) != 0) + ((mask & 0xff00) != 0)); *************** _reg_unused_after (insn, reg) *** 4374,4380 **** /* If this is a sequence, we must handle them all at once. We could have for instance a call that sets the target register, ! and a insn in a delay slot that uses the register. In this case, we must return 0. */ else if (code == INSN && GET_CODE (PATTERN (insn)) == SEQUENCE) { --- 4405,4411 ---- /* If this is a sequence, we must handle them all at once. We could have for instance a call that sets the target register, ! and an insn in a delay slot that uses the register. In this case, we must return 0. */ else if (code == INSN && GET_CODE (PATTERN (insn)) == SEQUENCE) { *************** _reg_unused_after (insn, reg) *** 4441,4505 **** return 1; } ! /* Output rtx VALUE as .byte to file FILE */ ! ! void ! asm_output_char (file, value) ! FILE *file; ! rtx value; ! { ! fprintf (file, "\t.byte "); ! output_addr_const (file, value); ! fprintf (file, "\n"); ! } ! ! ! /* Output VALUE as .byte to file FILE */ ! ! void ! asm_output_byte (file, value) ! FILE *file; ! int value; ! { ! fprintf (file, "\t.byte 0x%x\n", value & 0xff); ! } ! ! ! /* Output rtx VALUE as .word to file FILE */ ! void ! asm_output_short (file, value) ! FILE *file; ! rtx value; { ! if (SYMBOL_REF_FLAG (value) || GET_CODE (value) == LABEL_REF) ! { ! fprintf (file, "\t.word pm("); ! output_addr_const (file, (value)); ! fprintf (file, ")\n"); ! } ! else { ! fprintf (file, "\t.word "); ! output_addr_const (file, (value)); ! fprintf (file, "\n"); } ! } ! ! ! /* Output real N to file FILE */ ! ! void ! asm_output_float (file, n) ! FILE *file; ! REAL_VALUE_TYPE n; ! { ! long val; ! char dstr[100]; ! ! REAL_VALUE_TO_TARGET_SINGLE (n, val); ! REAL_VALUE_TO_DECIMAL (n, "%g", dstr); ! fprintf (file, "\t.long 0x%08lx\t/* %s */\n", val, dstr); } /* Sets section name for declaration DECL */ --- 4472,4496 ---- return 1; } ! /* Target hook for assembling integer objects. The AVR version needs ! special handling for references to certain labels. */ ! static bool ! avr_assemble_integer (x, size, aligned_p) ! rtx x; ! unsigned int size; ! int aligned_p; { ! if (size == POINTER_SIZE / BITS_PER_UNIT && aligned_p ! && ((GET_CODE (x) == SYMBOL_REF && SYMBOL_REF_FLAG (x)) ! || GET_CODE (x) == LABEL_REF)) { ! fputs ("\t.word\tpm(", asm_out_file); ! output_addr_const (asm_out_file, x); ! fputs (")\n", asm_out_file); ! return true; } ! return default_assemble_integer (x, size, aligned_p); } /* Sets section name for declaration DECL */ *************** unique_section (decl, reloc) *** 4536,4558 **** } - /* Output section name to file FILE - We make the section read-only and executable for a function decl, - read-only for a const data decl, and writable for a non-const data decl. */ - - void - asm_output_section_name(file, decl, name, reloc) - FILE *file; - tree decl; - const char *name; - int reloc ATTRIBUTE_UNUSED; - { - fprintf (file, ".section %s, \"%s\", @progbits\n", name, - decl && TREE_CODE (decl) == FUNCTION_DECL ? "ax" : - decl && TREE_READONLY (decl) ? "a" : "aw"); - } - - /* The routine used to output NUL terminated strings. We use a special version of this for most svr4 targets because doing so makes the generated assembly code more compact (and thus faster to assemble) --- 4527,4532 ---- *************** class_likely_spilled_p (c) *** 4663,4716 **** return (c != ALL_REGS && c != ADDW_REGS); } ! /* Only `progmem' attribute valid for type. */ ! ! int ! valid_machine_type_attribute(type, attributes, identifier, args) ! tree type ATTRIBUTE_UNUSED; ! tree attributes ATTRIBUTE_UNUSED; ! tree identifier; ! tree args ATTRIBUTE_UNUSED; ! { ! return is_attribute_p ("progmem", identifier); ! } ! ! /* If IDENTIFIER with arguments ARGS is a valid machine specific ! attribute for DECL return 1. ! Valid attributes: progmem - put data to program memory; signal - make a function to be hardware interrupt. After function prologue interrupts are disabled; interrupt - make a function to be hardware interrupt. After function prologue interrupts are enabled; ! naked - don't generate function prologue/epilogue and `ret' command. */ ! int ! valid_machine_decl_attribute (decl, attributes, attr, args) ! tree decl; ! tree attributes ATTRIBUTE_UNUSED; ! tree attr; ! tree args ATTRIBUTE_UNUSED; { ! if (is_attribute_p ("interrupt", attr) ! || is_attribute_p ("signal", attr) ! || is_attribute_p ("naked", attr)) ! return TREE_CODE (decl) == FUNCTION_DECL; ! if (is_attribute_p ("progmem", attr) ! && (TREE_STATIC (decl) || DECL_EXTERNAL (decl))) { ! if (DECL_INITIAL (decl) == NULL_TREE && !DECL_EXTERNAL (decl)) { ! warning ("Only initialized variables can be placed into " ! "program memory area."); ! return 0; } - return 1; } ! return 0; } /* Look for attribute `progmem' in DECL if found return 1, otherwise 0. */ --- 4637,4712 ---- return (c != ALL_REGS && c != ADDW_REGS); } ! /* Valid attributes: progmem - put data to program memory; signal - make a function to be hardware interrupt. After function prologue interrupts are disabled; interrupt - make a function to be hardware interrupt. After function prologue interrupts are enabled; ! naked - don't generate function prologue/epilogue and `ret' command. ! Only `progmem' attribute valid for type. */ ! ! const struct attribute_spec avr_attribute_table[] = { ! /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */ ! { "progmem", 0, 0, false, false, false, avr_handle_progmem_attribute }, ! { "signal", 0, 0, true, false, false, avr_handle_fndecl_attribute }, ! { "interrupt", 0, 0, true, false, false, avr_handle_fndecl_attribute }, ! { "naked", 0, 0, true, false, false, avr_handle_fndecl_attribute }, ! { NULL, 0, 0, false, false, false, NULL } ! }; ! /* Handle a "progmem" attribute; arguments as in ! struct attribute_spec.handler. */ ! static tree ! avr_handle_progmem_attribute (node, name, args, flags, no_add_attrs) ! tree *node; ! tree name; ! tree args ATTRIBUTE_UNUSED; ! int flags ATTRIBUTE_UNUSED; ! bool *no_add_attrs; ! { ! if (DECL_P (*node)) { ! if (TREE_STATIC (*node) || DECL_EXTERNAL (*node)) { ! if (DECL_INITIAL (*node) == NULL_TREE && !DECL_EXTERNAL (*node)) ! { ! warning ("only initialized variables can be placed into " ! "program memory area"); ! *no_add_attrs = true; ! } ! } ! else ! { ! warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); ! *no_add_attrs = true; } } ! ! return NULL_TREE; } + /* Handle an attribute requiring a FUNCTION_DECL; arguments as in + struct attribute_spec.handler. */ + static tree + avr_handle_fndecl_attribute (node, name, args, flags, no_add_attrs) + tree *node; + tree name; + tree args ATTRIBUTE_UNUSED; + int flags ATTRIBUTE_UNUSED; + bool *no_add_attrs; + { + if (TREE_CODE (*node) != FUNCTION_DECL) + { + warning ("`%s' attribute only applies to functions", + IDENTIFIER_POINTER (name)); + *no_add_attrs = true; + } + + return NULL_TREE; + } /* Look for attribute `progmem' in DECL if found return 1, otherwise 0. */ *************** avr_progmem_p (decl) *** 4725,4731 **** return 0; if (NULL_TREE ! != lookup_attribute ("progmem", DECL_MACHINE_ATTRIBUTES (decl))) return 1; a=decl; --- 4721,4727 ---- return 0; if (NULL_TREE ! != lookup_attribute ("progmem", DECL_ATTRIBUTES (decl))) return 1; a=decl; *************** encode_section_info (decl) *** 4754,4760 **** && TREE_CODE (decl) == VAR_DECL && avr_progmem_p (decl)) { ! const char *dsec = ".progmem.data"; DECL_SECTION_NAME (decl) = build_string (strlen (dsec), dsec); TREE_READONLY (decl) = 1; } --- 4750,4756 ---- && TREE_CODE (decl) == VAR_DECL && avr_progmem_p (decl)) { ! static const char *const dsec = ".progmem.data"; DECL_SECTION_NAME (decl) = build_string (strlen (dsec), dsec); TREE_READONLY (decl) = 1; } *************** void *** 4809,4815 **** order_regs_for_local_alloc () { unsigned int i; ! int order_0[] = { 24,25, 18,19, 20,21, --- 4805,4811 ---- order_regs_for_local_alloc () { unsigned int i; ! static const int order_0[] = { 24,25, 18,19, 20,21, *************** order_regs_for_local_alloc () *** 4821,4827 **** 0,1, 32,33,34,35 }; ! int order_1[] = { 18,19, 20,21, 22,23, --- 4817,4823 ---- 0,1, 32,33,34,35 }; ! static const int order_1[] = { 18,19, 20,21, 22,23, *************** order_regs_for_local_alloc () *** 4833,4839 **** 0,1, 32,33,34,35 }; ! int order_2[] = { 25,24, 23,22, 21,20, --- 4829,4835 ---- 0,1, 32,33,34,35 }; ! static const int order_2[] = { 25,24, 23,22, 21,20, *************** order_regs_for_local_alloc () *** 4847,4855 **** 32,33,34,35 }; ! int *order = (TARGET_ORDER_1 ? order_1 : ! TARGET_ORDER_2 ? order_2 : ! order_0); for (i=0; i < ARRAY_SIZE (order_0); ++i) reg_alloc_order[i] = order[i]; } --- 4843,4851 ---- 32,33,34,35 }; ! const int *order = (TARGET_ORDER_1 ? order_1 : ! TARGET_ORDER_2 ? order_2 : ! order_0); for (i=0; i < ARRAY_SIZE (order_0); ++i) reg_alloc_order[i] = order[i]; } *************** mask_one_bit_p (mask) *** 5140,5148 **** unsigned HOST_WIDE_INT n=mask; for (i = 0; i < 32; ++i) { ! if (n & 0x80000000UL) { ! if (n & 0x7fffffffUL) return 0; else return 32-i; --- 5136,5144 ---- unsigned HOST_WIDE_INT n=mask; for (i = 0; i < 32; ++i) { ! if (n & 0x80000000L) { ! if (n & 0x7fffffffL) return 0; else return 32-i; *************** output_reload_insisf (insn, operands, le *** 5325,5331 **** *len = 4 + ((INTVAL (src) & 0xff) != 0) + ((INTVAL (src) & 0xff00) != 0) + ((INTVAL (src) & 0xff0000) != 0) ! + ((INTVAL (src) & 0xff000000U) != 0); else *len = 8; --- 5321,5327 ---- *len = 4 + ((INTVAL (src) & 0xff) != 0) + ((INTVAL (src) & 0xff00) != 0) + ((INTVAL (src) & 0xff0000) != 0) ! + ((INTVAL (src) & 0xff000000) != 0); else *len = 8; *************** output_reload_insisf (insn, operands, le *** 5353,5359 **** output_asm_insn (AS2 (ldi, %2, hlo8(%1)), operands); output_asm_insn (AS2 (mov, %C0, %2), operands); } ! if (cnst && ((INTVAL (src) & 0xff000000U) == 0)) output_asm_insn (AS2 (mov, %D0, __zero_reg__), operands); else { --- 5349,5355 ---- output_asm_insn (AS2 (ldi, %2, hlo8(%1)), operands); output_asm_insn (AS2 (mov, %C0, %2), operands); } ! if (cnst && ((INTVAL (src) & 0xff000000) == 0)) output_asm_insn (AS2 (mov, %D0, __zero_reg__), operands); else { diff -Nrc3pad gcc-3.0.4/gcc/config/avr/avr.h gcc-3.1/gcc/config/avr/avr.h *** gcc-3.0.4/gcc/config/avr/avr.h Mon Apr 16 18:25:42 2001 --- gcc-3.1/gcc/config/avr/avr.h Sat Feb 2 18:56:36 2002 *************** *** 1,6 **** /* Definitions of target machine for GNU compiler, for ATMEL AVR at90s8515, ATmega103/103L, ATmega603/603L microcontrollers. ! Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Denis Chertykov (denisc@overta.ru) This file is part of GNU CC. --- 1,6 ---- /* Definitions of target machine for GNU compiler, for ATMEL AVR at90s8515, ATmega103/103L, ATmega603/603L microcontrollers. ! Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Denis Chertykov (denisc@overta.ru) This file is part of GNU CC. *************** Boston, MA 02111-1307, USA. */ *** 23,45 **** /* Names to predefine in the preprocessor for this target machine. */ #define CPP_PREDEFINES "-DAVR" - /* Define this to be a string constant containing `-D' options to - define the predefined macros that identify this machine and system. - These macros will be predefined unless the `-ansi' option is - specified. - - In addition, a parallel set of macros are predefined, whose names - are made by appending `__' at the beginning and at the end. These - `__' macros are permitted by the ANSI standard, so they are - predefined regardless of whether `-ansi' is specified. - - For example, on the Sun, one can use the following value: - - "-Dmc68000 -Dsun -Dunix" - - The result is to define the macros `__mc68000__', `__sun__' and - `__unix__' unconditionally, and the macros `mc68000', `sun' and - `unix' provided `-ansi' is not specified. */ /* This declaration should be present. */ --- 23,28 ---- *************** extern int target_flags; *** 71,95 **** #define TARGET_RTL_DUMP (target_flags & MASK_RTL_DUMP) #define TARGET_ALL_DEBUG (target_flags & MASK_ALL_DEBUG) - /* `TARGET_...' - This series of macros is to allow compiler command arguments to - enable or disable the use of optional features of the target - machine. For example, one machine description serves both the - 68000 and the 68020; a command argument tells the compiler whether - it should use 68020-only instructions or not. This command - argument works by means of a macro `TARGET_68020' that tests a bit - in `target_flags'. - - Define a macro `TARGET_FEATURENAME' for each such option. Its - definition should test a bit in `target_flags'; for example: - - #define TARGET_68020 (target_flags & 1) - - One place where these macros are used is in the - condition-expressions of instruction patterns. Note how - `TARGET_68020' appears frequently in the 68000 machine description - file, `m68k.md'. Another place they are used is in the - definitions of the other macros in the `MACHINE.h' file. */ --- 54,59 ---- *************** extern int target_flags; *** 110,136 **** N_("Output instruction sizes to the asm file") }, \ { "deb", MASK_ALL_DEBUG, NULL }, \ { "", 0, NULL } } - /* This macro defines names of command options to set and clear bits - in `target_flags'. Its definition is an initializer with a - subgrouping for each command option. - - Each subgrouping contains a string constant, that defines the - option name, and a number, which contains the bits to set in - `target_flags'. A negative number says to clear bits instead; the - negative of the number is which bits to clear. The actual option - name is made by appending `-m' to the specified name. - - One of the subgroupings should have a null string. The number in - this grouping is the default value for `target_flags'. Any target - options act starting with that value. - - Here is an example which defines `-m68000' and `-m68020' with - opposite meanings, and picks the latter as the default: - - #define TARGET_SWITCHES \ - { { "68020", 1}, \ - { "68000", -1}, \ - { "", 1}} */ extern const char *avr_init_stack; extern const char *avr_mcu_name; --- 74,79 ---- *************** extern int avr_enhanced_p; *** 143,165 **** #define TARGET_OPTIONS { \ { "init-stack=", &avr_init_stack, N_("Specify the initial stack address") }, \ { "mcu=", &avr_mcu_name, N_("Specify the MCU name") } } - /* This macro is similar to `TARGET_SWITCHES' but defines names of - command options that have values. Its definition is an - initializer with a subgrouping for each command option. - - Each subgrouping contains a string constant, that defines the - fixed part of the option name, and the address of a variable. The - variable, type `char *', is set to the variable part of the given - option if the fixed part matches. The actual option name is made - by appending `-m' to the specified name. - - Here is an example which defines `-mshort-data-NUMBER'. If the - given option is `-mshort-data-512', the variable `m88k_short_data' - will be set to the string `"512"'. - - extern char *m88k_short_data; - #define TARGET_OPTIONS \ - { { "short-data-", &m88k_short_data } } */ #define TARGET_VERSION fprintf (stderr, " (GNU assembler syntax)"); /* This macro is a C statement to print on `stderr' a string --- 86,91 ---- *************** enum reg_class { *** 613,620 **** {(3 << REG_X)|(3 << REG_Y)|(3 << REG_Z)|(3 << REG_W)|(0xff << 16), \ 0x00000000}, /* LD_REGS, r16 - r31 */ \ {0x0000ffff,0x00000000}, /* NO_LD_REGS r0 - r15 */ \ ! {0xffffffffu,0x00000000}, /* GENERAL_REGS, r0 - r31 */ \ ! {0xffffffffu,0x00000003} /* ALL_REGS */ \ } /* An initializer containing the contents of the register classes, as integers which are bit masks. The Nth integer specifies the --- 539,546 ---- {(3 << REG_X)|(3 << REG_Y)|(3 << REG_Z)|(3 << REG_W)|(0xff << 16), \ 0x00000000}, /* LD_REGS, r16 - r31 */ \ {0x0000ffff,0x00000000}, /* NO_LD_REGS r0 - r15 */ \ ! {0xffffffff,0x00000000}, /* GENERAL_REGS, r0 - r31 */ \ ! {0xffffffff,0x00000003} /* ALL_REGS */ \ } /* An initializer containing the contents of the register classes, as integers which are bit masks. The Nth integer specifies the *************** enum reg_class { *** 791,797 **** class of registers. In that case, secondary reload registers are not needed and would not be helpful. Instead, a stack location must be used to perform the copy and the `movM' pattern should use ! memory as a intermediate storage. This case often occurs between floating-point and general registers. */ /* `SECONDARY_MEMORY_NEEDED (CLASS1, CLASS2, M)' --- 717,723 ---- class of registers. In that case, secondary reload registers are not needed and would not be helpful. Instead, a stack location must be used to perform the copy and the `movM' pattern should use ! memory as an intermediate storage. This case often occurs between floating-point and general registers. */ /* `SECONDARY_MEMORY_NEEDED (CLASS1, CLASS2, M)' *************** enum reg_class { *** 1110,1116 **** FUNDECL is a C variable whose value is a tree node that describes the function in question. Normally it is a node of type `FUNCTION_DECL' that describes the declaration of the function. ! From this you can obtain the DECL_MACHINE_ATTRIBUTES of the function. FUNTYPE is a C variable whose value is a tree node that describes --- 1036,1042 ---- FUNDECL is a C variable whose value is a tree node that describes the function in question. Normally it is a node of type `FUNCTION_DECL' that describes the declaration of the function. ! From this you can obtain the DECL_ATTRIBUTES of the function. FUNTYPE is a C variable whose value is a tree node that describes *************** enum reg_class { *** 1132,1138 **** argument popping will always be the responsibility of the calling function. ! On the Vax, all functions always pop their arguments, so the definition of this macro is STACK-SIZE. On the 68000, using the standard calling convention, no functions pop their arguments, so the value of the macro is always 0 in this case. But an --- 1058,1064 ---- argument popping will always be the responsibility of the calling function. ! On the VAX, all functions always pop their arguments, so the definition of this macro is STACK-SIZE. On the 68000, using the standard calling convention, no functions pop their arguments, so the value of the macro is always 0 in this case. But an *************** enum reg_class { *** 1157,1163 **** hard register in which to pass the argument, or zero to pass the argument on the stack. ! For machines like the Vax and 68000, where normally all arguments are pushed, zero suffices as a definition. The value of the expression can also be a `parallel' RTX. This is --- 1083,1089 ---- hard register in which to pass the argument, or zero to pass the argument on the stack. ! For machines like the VAX and 68000, where normally all arguments are pushed, zero suffices as a definition. The value of the expression can also be a `parallel' RTX. This is *************** extern int avr_reg_order[]; *** 1349,1481 **** the frame pointer. A definition of 0 means that the address is passed as an "invisible" first argument. */ - #define FUNCTION_PROLOGUE(FILE, SIZE) function_prologue (FILE, SIZE) - /* A C compound statement that outputs the assembler code for entry - to a function. The prologue is responsible for setting up the - stack frame, initializing the frame pointer register, saving - registers that must be saved, and allocating SIZE additional bytes - of storage for the local variables. SIZE is an integer. FILE is - a stdio stream to which the assembler code should be output. - - The label for the beginning of the function need not be output by - this macro. That has already been done when the macro is run. - - To determine which registers to save, the macro can refer to the - array `regs_ever_live': element R is nonzero if hard register R is - used anywhere within the function. This implies the function - prologue should save register R, provided it is not one of the - call-used registers. (`FUNCTION_EPILOGUE' must likewise use - `regs_ever_live'.) - - On machines that have "register windows", the function entry code - does not save on the stack the registers that are in the windows, - even if they are supposed to be preserved by function calls; - instead it takes appropriate steps to "push" the register stack, - if any non-call-used registers are used in the function. - - On machines where functions may or may not have frame-pointers, the - function entry code must vary accordingly; it must set up the frame - pointer if one is wanted, and not otherwise. To determine whether - a frame pointer is in wanted, the macro can refer to the variable - `frame_pointer_needed'. The variable's value will be 1 at run - time in a function that needs a frame pointer. *Note - Elimination::. - - The function entry code is responsible for allocating any stack - space required for the function. This stack space consists of the - regions listed below. In most cases, these regions are allocated - in the order listed, with the last listed region closest to the - top of the stack (the lowest address if `STACK_GROWS_DOWNWARD' is - defined, and the highest address if it is not defined). You can - use a different order for a machine if doing so is more convenient - or required for compatibility reasons. Except in cases where - required by standard or by a debugger, there is no reason why the - stack layout used by GCC need agree with that used by other - compilers for a machine. - - * A region of `current_function_pretend_args_size' bytes of - uninitialized space just underneath the first argument - arriving on the stack. (This may not be at the very start of - the allocated stack region if the calling sequence has pushed - anything else since pushing the stack arguments. But - usually, on such machines, nothing else has been pushed yet, - because the function prologue itself does all the pushing.) - This region is used on machines where an argument may be - passed partly in registers and partly in memory, and, in some - cases to support the features in `varargs.h' and `stdargs.h'. - - * An area of memory used to save certain registers used by the - function. The size of this area, which may also include - space for such things as the return address and pointers to - previous stack frames, is machine-specific and usually - depends on which registers have been used in the function. - Machines with register windows often do not require a save - area. - - * A region of at least SIZE bytes, possibly rounded up to an - allocation boundary, to contain the local variables of the - function. On some machines, this region and the save area - may occur in the opposite order, with the save area closer to - the top of the stack. - - * Optionally, when `ACCUMULATE_OUTGOING_ARGS' is defined, a - region of `current_function_outgoing_args_size' bytes to be - used for outgoing argument lists of the function. *Note - Stack Arguments::. - - Normally, it is necessary for the macros `FUNCTION_PROLOGUE' and - `FUNCTION_EPILOGE' to treat leaf functions specially. The C - variable `leaf_function' is nonzero for such a function. */ - #define EPILOGUE_USES(REGNO) 0 /* Define this macro as a C expression that is nonzero for registers are used by the epilogue or the `return' pattern. The stack and frame pointer registers are already be assumed to be used as needed. */ - #define FUNCTION_EPILOGUE(FILE, SIZE) function_epilogue (FILE, SIZE) - /* A C compound statement that outputs the assembler code for exit - from a function. The epilogue is responsible for restoring the - saved registers and stack pointer to their values when the - function was called, and returning control to the caller. This - macro takes the same arguments as the macro `FUNCTION_PROLOGUE', - and the registers to restore are determined from `regs_ever_live' - and `CALL_USED_REGISTERS' in the same way. - - On some machines, there is a single instruction that does all the - work of returning from the function. On these machines, give that - instruction the name `return' and do not define the macro - `FUNCTION_EPILOGUE' at all. - - Do not define a pattern named `return' if you want the - `FUNCTION_EPILOGUE' to be used. If you want the target switches - to control whether return instructions or epilogues are used, - define a `return' pattern with a validity condition that tests the - target switches appropriately. If the `return' pattern's validity - condition is false, epilogues will be used. - - On machines where functions may or may not have frame-pointers, the - function exit code must vary accordingly. Sometimes the code for - these two cases is completely different. To determine whether a - frame pointer is wanted, the macro can refer to the variable - `frame_pointer_needed'. The variable's value will be 1 when - compiling a function that needs a frame pointer. - - Normally, `FUNCTION_PROLOGUE' and `FUNCTION_EPILOGUE' must treat - leaf functions specially. The C variable `leaf_function' is - nonzero for such a function. *Note Leaf Functions::. - - On some machines, some functions pop their arguments on exit while - others leave that for the caller to do. For example, the 68020 - when given `-mrtd' pops arguments in functions that take a fixed - number of arguments. - - Your definition of the macro `RETURN_POPS_ARGS' decides which - functions pop their own arguments. `FUNCTION_EPILOGUE' needs to - know what was decided. The variable that is called - `current_function_pops_args' is the number of bytes of its - arguments that a function should pop. *Note Scalar Return::. */ - #define STRICT_ARGUMENT_NAMING 1 /* Define this macro if the location where a function argument is passed depends on whether or not it is a named argument. --- 1275,1286 ---- *************** do { \ *** 1677,1698 **** { \ int regno = REGNO (XEXP (X, 0)); \ rtx mem = make_memloc (X, regno); \ ! push_reload (XEXP (mem,0), NULL_PTR, &XEXP (mem,0), NULL_PTR, \ POINTER_REGS, Pmode, VOIDmode, 0, 0, \ 1, ADDR_TYPE (TYPE)); \ ! push_reload (mem, NULL_RTX, &XEXP (X, 0), NULL_PTR, \ BASE_POINTER_REGS, GET_MODE (X), VOIDmode, 0, 0, \ OPNUM, TYPE); \ goto WIN; \ } \ ! push_reload (XEXP (X, 0), NULL_RTX, &XEXP (X, 0), NULL_PTR, \ BASE_POINTER_REGS, GET_MODE (X), VOIDmode, 0, 0, \ OPNUM, TYPE); \ goto WIN; \ } \ else if (! (frame_pointer_needed && XEXP (X,0) == frame_pointer_rtx)) \ { \ ! push_reload (X, NULL_RTX, &X, NULL_PTR, \ POINTER_REGS, GET_MODE (X), VOIDmode, 0, 0, \ OPNUM, TYPE); \ goto WIN; \ --- 1482,1503 ---- { \ int regno = REGNO (XEXP (X, 0)); \ rtx mem = make_memloc (X, regno); \ ! push_reload (XEXP (mem,0), NULL, &XEXP (mem,0), NULL, \ POINTER_REGS, Pmode, VOIDmode, 0, 0, \ 1, ADDR_TYPE (TYPE)); \ ! push_reload (mem, NULL_RTX, &XEXP (X, 0), NULL, \ BASE_POINTER_REGS, GET_MODE (X), VOIDmode, 0, 0, \ OPNUM, TYPE); \ goto WIN; \ } \ ! push_reload (XEXP (X, 0), NULL_RTX, &XEXP (X, 0), NULL, \ BASE_POINTER_REGS, GET_MODE (X), VOIDmode, 0, 0, \ OPNUM, TYPE); \ goto WIN; \ } \ else if (! (frame_pointer_needed && XEXP (X,0) == frame_pointer_rtx)) \ { \ ! push_reload (X, NULL_RTX, &X, NULL, \ POINTER_REGS, GET_MODE (X), VOIDmode, 0, 0, \ OPNUM, TYPE); \ goto WIN; \ *************** do { \ *** 1918,1935 **** subsequent accesses occur to other fields in the same word of the structure, but to different bytes. - `SLOW_ZERO_EXTEND' - Define this macro if zero-extension (of a `char' or `short' to an - `int') can be done faster if the destination is a register that is - known to be zero. - - If you define this macro, you must have instruction patterns that - recognize RTL structures like this: - - (set (strict_low_part (subreg:QI (reg:SI ...) 0)) ...) - - and likewise for `HImode'. - `SLOW_UNALIGNED_ACCESS' Define this macro to be the value 1 if unaligned accesses have a cost many times greater than aligned accesses, for example if they --- 1723,1728 ---- *************** do { \ *** 1963,1985 **** #define NO_RECURSIVE_FUNCTION_CSE /* Define this macro if it is as good or better for a function to call itself with an explicit address than to call an address kept in a ! register. ! ! `ADJUST_COST (INSN, LINK, DEP_INSN, COST)' ! A C statement (sans semicolon) to update the integer variable COST ! based on the relationship between INSN that is dependent on ! DEP_INSN through the dependence LINK. The default is to make no ! adjustment to COST. This can be used for example to specify to ! the scheduler that an output- or anti-dependence does not incur ! the same cost as a data-dependence. ! ! `ADJUST_PRIORITY (INSN)' ! A C statement (sans semicolon) to update the integer scheduling ! priority `INSN_PRIORITY(INSN)'. Reduce the priority to execute ! the INSN earlier, increase the priority to execute INSN later. ! Do not define this macro if you do not need to adjust the ! scheduling priorities of insns. */ ! #define TEXT_SECTION_ASM_OP "\t.text" /* A C expression whose value is a string containing the assembler --- 1756,1762 ---- #define NO_RECURSIVE_FUNCTION_CSE /* Define this macro if it is as good or better for a function to call itself with an explicit address than to call an address kept in a ! register. */ #define TEXT_SECTION_ASM_OP "\t.text" /* A C expression whose value is a string containing the assembler *************** progmem_section (void) \ *** 2027,2033 **** If these items should be placed in the text section, this macro should not be defined. */ ! /* `SELECT_SECTION (EXP, RELOC)' A C statement or statements to switch to the appropriate section for output of EXP. You can assume that EXP is either a `VAR_DECL' node or a constant of some sort. RELOC indicates whether the --- 1804,1810 ---- If these items should be placed in the text section, this macro should not be defined. */ ! /* `SELECT_SECTION (EXP, RELOC, ALIGN)' A C statement or statements to switch to the appropriate section for output of EXP. You can assume that EXP is either a `VAR_DECL' node or a constant of some sort. RELOC indicates whether the *************** progmem_section (void) \ *** 2038,2044 **** Do not define this macro if you put all read-only variables and constants in the read-only data section (usually the text section). */ ! /* `SELECT_RTX_SECTION (MODE, RTX)' A C statement or statements to switch to the appropriate section for output of RTX in mode MODE. You can assume that RTX is some kind of constant in RTL. The argument MODE is redundant except in --- 1815,1821 ---- Do not define this macro if you put all read-only variables and constants in the read-only data section (usually the text section). */ ! /* `SELECT_RTX_SECTION (MODE, RTX, ALIGN)' A C statement or statements to switch to the appropriate section for output of RTX in mode MODE. You can assume that RTX is some kind of constant in RTL. The argument MODE is redundant except in *************** progmem_section (void) \ *** 2077,2088 **** Decode SYM_NAME and store the real name part in VAR, sans the characters that encode section info. Define this macro if `ENCODE_SECTION_INFO' alters the symbol's name string. */ - /* `UNIQUE_SECTION_P (DECL)' - A C expression which evaluates to true if DECL should be placed - into a unique section for some target-specific reason. If you do - not define this macro, the default is `0'. Note that the flag - `-ffunction-sections' will also cause functions to be placed into - unique sections. */ #define UNIQUE_SECTION(DECL, RELOC) unique_section (DECL, RELOC) /* `UNIQUE_SECTION (DECL, RELOC)' --- 1854,1859 ---- *************** progmem_section (void) \ *** 2092,2098 **** link-time relocations. If you do not define this macro, GNU CC will use the symbol name prefixed by `.' as the section name. */ - #define ASM_FILE_START(STREAM) asm_file_start (STREAM) /* A C expression which outputs to the stdio stream STREAM some appropriate text to go at the start of an assembler file. --- 1863,1868 ---- *************** progmem_section (void) \ *** 2143,2161 **** This macro need not be defined if the standard form of debugging information for the debugger in use is appropriate. */ ! #define ASM_OUTPUT_SECTION_NAME(FILE, DECL, NAME, RELOC) \ ! asm_output_section_name(FILE, DECL, NAME, RELOC) ! ! /* `ASM_OUTPUT_SECTION_NAME (STREAM, DECL, NAME, RELOC)' ! A C statement to output something to the assembler file to switch ! to section NAME for object DECL which is either a `FUNCTION_DECL', ! a `VAR_DECL' or `NULL_TREE'. RELOC indicates whether the initial ! value of EXP requires link-time relocations. Some target formats ! do not support arbitrary sections. Do not define this macro in ! such cases. ! ! At present this macro is only used to support section attributes. ! When this macro is undefined, section attributes are disabled. */ #define OBJC_PROLOGUE {} /* A C statement to output any assembler statements which are --- 1913,1920 ---- This macro need not be defined if the standard form of debugging information for the debugger in use is appropriate. */ ! /* Switch into a generic section. */ ! #define TARGET_ASM_NAMED_SECTION default_elf_asm_named_section #define OBJC_PROLOGUE {} /* A C statement to output any assembler statements which are *************** progmem_section (void) \ *** 2164,2218 **** Objective C program. */ - - #define ASM_OUTPUT_DOUBLE(STREAM, VALUE) fprintf (STREAM, "no double float %.20e\n", VALUE) - #define ASM_OUTPUT_FLOAT(STREAM, VALUE) asm_output_float (STREAM, VALUE) - /* `ASM_OUTPUT_LONG_DOUBLE (STREAM, VALUE)' - `ASM_OUTPUT_THREE_QUARTER_FLOAT (STREAM, VALUE)' - `ASM_OUTPUT_SHORT_FLOAT (STREAM, VALUE)' - `ASM_OUTPUT_BYTE_FLOAT (STREAM, VALUE)' - A C statement to output to the stdio stream STREAM an assembler - instruction to assemble a floating-point constant of `TFmode', - `DFmode', `SFmode', `TQFmode', `HFmode', or `QFmode', - respectively, whose value is VALUE. VALUE will be a C expression - of type `REAL_VALUE_TYPE'. Macros such as - `REAL_VALUE_TO_TARGET_DOUBLE' are useful for writing these - definitions. */ - - - #define ASM_OUTPUT_INT(FILE, VALUE) \ - ( fprintf (FILE, "\t.long "), \ - output_addr_const (FILE, (VALUE)), \ - fputs ("\n", FILE)) - - /* Likewise for `short' and `char' constants. */ - - #define ASM_OUTPUT_SHORT(FILE,VALUE) asm_output_short(FILE,VALUE) - #define ASM_OUTPUT_CHAR(FILE,VALUE) asm_output_char(FILE,VALUE) - - /* `ASM_OUTPUT_QUADRUPLE_INT (STREAM, EXP)' - A C statement to output to the stdio stream STREAM an assembler - instruction to assemble an integer of 16, 8, 4, 2 or 1 bytes, - respectively, whose value is VALUE. The argument EXP will be an - RTL expression which represents a constant value. Use - `output_addr_const (STREAM, EXP)' to output this value as an - assembler expression. - - For sizes larger than `UNITS_PER_WORD', if the action of a macro - would be identical to repeatedly calling the macro corresponding to - a size of `UNITS_PER_WORD', once for each word, you need not define - the macro. */ - - - #define ASM_OUTPUT_BYTE(FILE,VALUE) asm_output_byte (FILE,VALUE) - /* A C statement to output to the stdio stream STREAM an assembler - instruction to assemble a single byte containing the number VALUE. */ - - #define ASM_BYTE_OP "\t.byte " - /* A C string constant giving the pseudo-op to use for a sequence of - single-byte constants. If this macro is not defined, the default - is `"\t.byte\t"'. */ - #define ASM_OUTPUT_ASCII(FILE, P, SIZE) gas_output_ascii (FILE,P,SIZE) /* `ASM_OUTPUT_ASCII (STREAM, PTR, LEN)' output_ascii (FILE, P, SIZE) --- 1923,1928 ---- *************** progmem_section (void) \ *** 2232,2247 **** If you do not define this macro, the default is that only the character `;' is treated as a logical line separator. */ ! #define ASM_OPEN_PAREN "(" ! #define ASM_CLOSE_PAREN ")" ! /* These macros are defined as C string constant, describing the ! syntax in the assembler for grouping arithmetic expressions. The ! following definitions are correct for most assemblers: ! ! #define ASM_OPEN_PAREN "(" ! #define ASM_CLOSE_PAREN ")" ! ! These macros are provided by `real.h' for writing the definitions of `ASM_OUTPUT_DOUBLE' and the like: */ #define ASM_OUTPUT_COMMON(STREAM, NAME, SIZE, ROUNDED) \ --- 1942,1948 ---- If you do not define this macro, the default is that only the character `;' is treated as a logical line separator. */ ! /* These macros are provided by `real.h' for writing the definitions of `ASM_OUTPUT_DOUBLE' and the like: */ #define ASM_OUTPUT_COMMON(STREAM, NAME, SIZE, ROUNDED) \ *************** sprintf (STRING, "*.%s%d", PREFIX, NUM) *** 2751,2758 **** If this macro is not defined, nothing special is output at the end of the jump-table. */ ! #define ASM_OUTPUT_SKIP(STREAM, n) \ ! fprintf (STREAM, "\t.skip %d,0\n", n) /* A C statement to output to the stdio stream STREAM an assembler instruction to advance the location counter by NBYTES bytes. Those bytes should be zero when loaded. NBYTES will be a C --- 2452,2459 ---- If this macro is not defined, nothing special is output at the end of the jump-table. */ ! #define ASM_OUTPUT_SKIP(STREAM, N) \ ! fprintf (STREAM, "\t.skip %d,0\n", N) /* A C statement to output to the stdio stream STREAM an assembler instruction to advance the location counter by NBYTES bytes. Those bytes should be zero when loaded. NBYTES will be a C *************** extern int avr_case_values_threshold; *** 2783,2797 **** register. Most RISC machines have this property and most CISC machines do not. */ - #define EASY_DIV_EXPR TRUNC_DIV_EXPR - /* An alias for a tree code that is the easiest kind of division to - compile code for in the general case. It may be `TRUNC_DIV_EXPR', - `FLOOR_DIV_EXPR', `CEIL_DIV_EXPR' or `ROUND_DIV_EXPR'. These four - division operators differ in how they round the result to an - integer. `EASY_DIV_EXPR' is used when it is permissible to use - any of those kinds of division and the choice should be made on - the basis of efficiency. */ - #define MOVE_MAX 4 /* The maximum number of bytes that a single instruction can move quickly between memory and registers or between two memory --- 2484,2489 ---- *************** extern int avr_case_values_threshold; *** 2837,2856 **** of arguments that the function accepts. Some people think a larger threshold should be used on RISC machines. */ - #define VALID_MACHINE_DECL_ATTRIBUTE(DECL, ATTRIBUTES, IDENTIFIER, ARGS) \ - valid_machine_decl_attribute (DECL, ATTRIBUTES, IDENTIFIER, ARGS) - /* `VALID_MACHINE_DECL_ATTRIBUTE (DECL, ATTRIBUTES, IDENTIFIER, ARGS)' - If defined, a C expression whose value is nonzero if IDENTIFIER - with arguments ARGS is a valid machine specific attribute for DECL. - The attributes in ATTRIBUTES have previously been assigned to DECL. */ - - #define VALID_MACHINE_TYPE_ATTRIBUTE(TYPE, ATTRIBUTES, IDENTIFIER, ARGS) \ - valid_machine_type_attribute(TYPE, ATTRIBUTES, IDENTIFIER, ARGS) - /* `VALID_MACHINE_TYPE_ATTRIBUTE (TYPE, ATTRIBUTES, IDENTIFIER, ARGS)' - If defined, a C expression whose value is nonzero if IDENTIFIER - with arguments ARGS is a valid machine specific attribute for TYPE. - The attributes in ATTRIBUTES have previously been assigned to TYPE. */ - #define DOLLARS_IN_IDENTIFIERS 0 /* Define this macro to control use of the character `$' in identifier names. 0 means `$' is not allowed by default; 1 means it is --- 2529,2534 ---- *************** valid_machine_decl_attribute (DECL, ATTR *** 2884,2902 **** addresses. Thus sorting to put the smallest address first allows the most combinations to be found. */ - /* Define results of standard character escape sequences. */ - #define TARGET_BELL 007 - #define TARGET_BS 010 - #define TARGET_TAB 011 - #define TARGET_NEWLINE 012 - #define TARGET_VT 013 - #define TARGET_FF 014 - #define TARGET_CR 015 - - - #define TRAMPOLINE_TEMPLATE(FILE) \ ! internal_error ("Trampolines not supported\n") /* Length in units of the trampoline for entering a nested function. */ --- 2562,2569 ---- addresses. Thus sorting to put the smallest address first allows the most combinations to be found. */ #define TRAMPOLINE_TEMPLATE(FILE) \ ! internal_error ("trampolines not supported") /* Length in units of the trampoline for entering a nested function. */ *************** valid_machine_decl_attribute (DECL, ATTR *** 2973,2985 **** --- 2640,2660 ---- %{mmcu=avr3:%(cpp_avr3)} \ %{mmcu=atmega603:%(cpp_avr3) -D__AVR_ATmega603__} \ %{mmcu=atmega103:%(cpp_avr3) -D__AVR_ATmega103__} \ + %{mmcu=at43usb320:%(cpp_avr3) -D__AVR_AT43USB320__} \ + %{mmcu=at76c711: %(cpp_avr3) -D__AVR_AT76C711__} \ %{mmcu=avr4:%(cpp_avr4)} \ + %{mmcu=atmega8: %(cpp_avr4) -D__AVR_ATmega8__} \ %{mmcu=atmega83: %(cpp_avr4) -D__AVR_ATmega83__} \ %{mmcu=atmega85: %(cpp_avr4) -D__AVR_ATmega85__} \ %{mmcu=avr5:%(cpp_avr5)} \ + %{mmcu=atmega16: %(cpp_avr5) -D__AVR_ATmega16__} \ %{mmcu=atmega161:%(cpp_avr5) -D__AVR_ATmega161__} \ %{mmcu=atmega163:%(cpp_avr5) -D__AVR_ATmega163__} \ %{mmcu=atmega32: %(cpp_avr5) -D__AVR_ATmega32__} \ + %{mmcu=atmega323:%(cpp_avr5) -D__AVR_ATmega323__} \ + %{mmcu=atmega64: %(cpp_avr5) -D__AVR_ATmega64__} \ + %{mmcu=atmega128:%(cpp_avr5) -D__AVR_ATmega128__} \ + %{mmcu=at43usb355:%(cpp_avr5) -D__AVR_AT43USB355__} \ %{mmcu=at94k: %(cpp_avr5) -D__AVR_AT94K__} \ %{mmcu=avr1:%(cpp_avr1)} \ %{mmcu=at90s1200:%(cpp_avr1) -D__AVR_AT90S1200__} \ *************** valid_machine_decl_attribute (DECL, ATTR *** 3013,3028 **** This should be defined if `PTRDIFF_TYPE' depends on target dependent flags which are not accessible to the preprocessor. ! Otherwise, it should not be defined. ! ! `SIGNED_CHAR_SPEC' ! A C string constant that tells the GNU CC driver program options to ! pass to CPP. By default, this macro is defined to pass the option ! `-D__CHAR_UNSIGNED__' to CPP if `char' will be treated as ! `unsigned char' by `cc1'. ! ! Do not define this macro unless you need to override the default ! definition. */ #define CC1_SPEC "%{profile:-p}" /* A C string constant that tells the GNU CC driver program options to --- 2688,2694 ---- This should be defined if `PTRDIFF_TYPE' depends on target dependent flags which are not accessible to the preprocessor. ! Otherwise, it should not be defined. */ #define CC1_SPEC "%{profile:-p}" /* A C string constant that tells the GNU CC driver program options to *************** valid_machine_decl_attribute (DECL, ATTR *** 3051,3060 **** --- 2717,2734 ---- %{!mmcu*:-m avr85xx} \ %{mmcu=atmega603:-m avrmega603} \ %{mmcu=atmega103:-m avrmega103} \ + %{mmcu=at43usb320:-m avr3} \ + %{mmcu=at76c711:-m avr3} \ + %{mmcu=atmega16:-m avrmega161} \ %{mmcu=atmega161:-m avrmega161} \ %{mmcu=atmega163:-m avrmega161} \ %{mmcu=atmega32:-m avr5} \ + %{mmcu=atmega323:-m avr5} \ + %{mmcu=atmega64:-m avr5} \ + %{mmcu=atmega128:-m avr5} \ + %{mmcu=at43usb355:-m avr5} \ %{mmcu=at94k:-m avr5} \ + %{mmcu=atmega8:-m avr4} \ %{mmcu=atmega83:-m avr4} \ %{mmcu=atmega85:-m avr4} \ %{mmcu=at90s1200|mmcu=attiny1*:-m avr1200} \ *************** valid_machine_decl_attribute (DECL, ATTR *** 3131,3141 **** --- 2805,2823 ---- %{mmcu=at90s8535:crts8535.o%s} \ %{mmcu=atmega103|mmcu=avr3:crtm103.o%s} \ %{mmcu=atmega603:crtm603.o%s} \ + %{mmcu=at43usb320:crt43320.o%s} \ + %{mmcu=at76c711:crt76711.o%s } \ + %{mmcu=atmega8:crtm8.o%s} \ %{mmcu=atmega83|mmcu=avr4:crtm83.o%s} \ %{mmcu=atmega85:crtm85.o%s} \ + %{mmcu=atmega16:crtm16.o%s} \ %{mmcu=atmega161|mmcu=avr5:crtm161.o%s} \ %{mmcu=atmega163:crtm163.o%s} \ %{mmcu=atmega32:crtm32.o%s} \ + %{mmcu=atmega323:crtm323.o%s} \ + %{mmcu=atmega64:crtm64.o%s} \ + %{mmcu=atmega128:crtm128.o%s} \ + %{mmcu=at43usb355:crt43355.o%s} \ %{mmcu=at94k:crtat94k.o%s}" #define CPP_AVR1_SPEC "-D__AVR_ARCH__=1 -D__AVR_ASM_ONLY__ " *************** extern struct rtx_def *ldi_reg_rtx; *** 3252,3258 **** #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG - #define DBX_REGISTER_NUMBER(r) (r) - /* Get the standard ELF stabs definitions. */ #include "dbxelf.h" --- 2934,2938 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/avr/avr.md gcc-3.1/gcc/config/avr/avr.md *** gcc-3.0.4/gcc/config/avr/avr.md Wed Jun 27 21:35:37 2001 --- gcc-3.1/gcc/config/avr/avr.md Thu Mar 21 22:14:07 2002 *************** *** 68,74 **** (le (minus (pc) (match_dup 0)) (const_int 2045))) (const_int 2) ! (const_int 2))) (eq_attr "type" "branch1") (if_then_else (and (ge (minus (pc) (match_dup 0)) (const_int -62)) --- 68,74 ---- (le (minus (pc) (match_dup 0)) (const_int 2045))) (const_int 2) ! (const_int 3))) (eq_attr "type" "branch1") (if_then_else (and (ge (minus (pc) (match_dup 0)) (const_int -62)) *************** *** 80,86 **** (le (minus (pc) (match_dup 0)) (const_int 2043))) (const_int 3) ! (const_int 3)))] (const_int 2))) (define_insn "*pop1" --- 80,86 ---- (le (minus (pc) (match_dup 0)) (const_int 2043))) (const_int 3) ! (const_int 4)))] (const_int 2))) (define_insn "*pop1" *************** *** 224,230 **** { /* One of the ops has to be in a register */ if (!register_operand(operand0, HImode) ! && !(register_operand(operand1, HImode) || const0_rtx == operands[1])) { operands[1] = copy_to_mode_reg(HImode, operand1); } --- 224,230 ---- { /* One of the ops has to be in a register */ if (!register_operand(operand0, HImode) ! && !(register_operand(operand1, HImode) || const0_rtx == operands[1])) { operands[1] = copy_to_mode_reg(HImode, operand1); } *************** *** 605,610 **** --- 605,623 ---- [(set_attr "length" "4,3,3,4,5,5") (set_attr "cc" "set_n,set_n,set_czn,set_czn,set_n,set_n")]) + (define_insn "*addsi3_zero_extend" + [(set (match_operand:SI 0 "register_operand" "=r") + (plus:SI (zero_extend:SI + (match_operand:QI 1 "register_operand" "r")) + (match_operand:SI 2 "register_operand" "0")))] + "" + "add %A0,%1 + adc %B0,__zero_reg__ + adc %C0,__zero_reg__ + adc %D0,__zero_reg__" + [(set_attr "length" "4") + (set_attr "cc" "set_n")]) + ;----------------------------------------------------------------------------- ; sub bytes (define_insn "subqi3" *************** *** 629,634 **** --- 642,658 ---- [(set_attr "length" "2,2") (set_attr "cc" "set_czn,set_czn")]) + (define_insn "*subhi3_zero_extend1" + [(set (match_operand:HI 0 "register_operand" "=r") + (minus:HI (match_operand:HI 1 "register_operand" "0") + (zero_extend:HI + (match_operand:QI 2 "register_operand" "r"))))] + "" + "sub %A0,%2 + sbc %B0,__zero_reg__" + [(set_attr "length" "2") + (set_attr "cc" "set_n")]) + (define_insn "subsi3" [(set (match_operand:SI 0 "register_operand" "=r,d") (minus:SI (match_operand:SI 1 "register_operand" "0,0") *************** *** 640,645 **** --- 664,682 ---- [(set_attr "length" "4,4") (set_attr "cc" "set_czn,set_czn")]) + (define_insn "*subsi3_zero_extend" + [(set (match_operand:SI 0 "register_operand" "=r") + (minus:SI (match_operand:SI 1 "register_operand" "0") + (zero_extend:SI + (match_operand:QI 2 "register_operand" "r"))))] + "" + "sub %A0,%2 + sbc %B0,__zero_reg__ + sbc %C0,__zero_reg__ + sbc %D0,__zero_reg__" + [(set_attr "length" "4") + (set_attr "cc" "set_n")]) + ;****************************************************************************** ; mul *************** *** 996,1004 **** output_asm_insn (AS2 (andi,%A0,lo8(%2)), operands); if ((mask & 0xff00) != 0xff00) output_asm_insn (AS2 (andi,%B0,hi8(%2)), operands); ! if ((mask & 0xff0000UL) != 0xff0000UL) output_asm_insn (AS2 (andi,%C0,hlo8(%2)), operands); ! if ((mask & 0xff000000UL) != 0xff000000UL) output_asm_insn (AS2 (andi,%D0,hhi8(%2)), operands); return \"\"; } --- 1033,1041 ---- output_asm_insn (AS2 (andi,%A0,lo8(%2)), operands); if ((mask & 0xff00) != 0xff00) output_asm_insn (AS2 (andi,%B0,hi8(%2)), operands); ! if ((mask & 0xff0000L) != 0xff0000L) output_asm_insn (AS2 (andi,%C0,hlo8(%2)), operands); ! if ((mask & 0xff000000L) != 0xff000000L) output_asm_insn (AS2 (andi,%D0,hhi8(%2)), operands); return \"\"; } *************** *** 1080,1088 **** output_asm_insn (AS2 (ori,%A0,lo8(%2)), operands); if (mask & 0xff00) output_asm_insn (AS2 (ori,%B0,hi8(%2)), operands); ! if (mask & 0xff0000UL) output_asm_insn (AS2 (ori,%C0,hlo8(%2)), operands); ! if (mask & 0xff000000UL) output_asm_insn (AS2 (ori,%D0,hhi8(%2)), operands); return \"\"; } --- 1117,1125 ---- output_asm_insn (AS2 (ori,%A0,lo8(%2)), operands); if (mask & 0xff00) output_asm_insn (AS2 (ori,%B0,hi8(%2)), operands); ! if (mask & 0xff0000L) output_asm_insn (AS2 (ori,%C0,hlo8(%2)), operands); ! if (mask & 0xff000000L) output_asm_insn (AS2 (ori,%D0,hhi8(%2)), operands); return \"\"; } diff -Nrc3pad gcc-3.0.4/gcc/config/avr/t-avr gcc-3.1/gcc/config/avr/t-avr *** gcc-3.0.4/gcc/config/avr/t-avr Sat Jan 20 16:49:01 2001 --- gcc-3.1/gcc/config/avr/t-avr Mon Jan 7 15:04:34 2002 *************** *** 2,8 **** AR_FOR_TARGET = avr-ar RANLIB_FOR_TARGET = avr-ranlib - CROSS_LIBGCC1 = libgcc1-asm.a LIB1ASMSRC = avr/libgcc.S LIB1ASMFUNCS = \ _mulqi3 \ --- 2,7 ---- *************** LIB1ASMFUNCS = \ *** 20,28 **** _cleanup \ _tablejump - # libgcc... - LIBGCC1_TEST = - # We do not have the DF type. # Most of the C functions in libgcc2 use almost all registers, # so use -mcall-prologues for smaller code size. --- 19,24 ---- *************** MULTILIB_DIRNAMES = avr2 avr3 avr4 avr5 *** 47,54 **** --- 43,54 ---- # The many avr2 matches are not listed here - this is the default. MULTILIB_MATCHES = \ mmcu?avr3=mmcu?atmega103 mmcu?avr3=mmcu?atmega603 \ + mmcu?avr3=mmcu?at43usb320 mmcu?avr3=mmcu?at76c711 \ mmcu?avr4=mmcu?atmega83 mmcu?avr4=mmcu?atmega85 \ + mmcu?avr4=mmcu?atmega8 mmcu?avr5=mmcu?atmega16 \ mmcu?avr5=mmcu?atmega161 mmcu?avr5=mmcu?atmega163 \ + mmcu?avr5=mmcu?atmega64 mmcu?avr5=mmcu?atmega128 \ + mmcu?avr5=mmcu?at43usb355 mmcu?avr5=mmcu?atmega323 \ mmcu?avr5=mmcu?atmega32 mmcu?avr5=mmcu?at94k MULTILIB_EXCEPTIONS = diff -Nrc3pad gcc-3.0.4/gcc/config/avr/xm-avr.h gcc-3.1/gcc/config/avr/xm-avr.h *** gcc-3.0.4/gcc/config/avr/xm-avr.h Fri Feb 11 22:31:46 2000 --- gcc-3.1/gcc/config/avr/xm-avr.h Thu Jan 1 00:00:00 1970 *************** *** 1 **** - #include "tm.h" --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/c4x/c4x-c.c gcc-3.1/gcc/config/c4x/c4x-c.c *** gcc-3.0.4/gcc/config/c4x/c4x-c.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/c4x/c4x-c.c Wed Oct 17 20:39:11 2001 *************** *** 0 **** --- 1,159 ---- + /* Subroutines for the C front end on the TMS320C[34]x + Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 + Free Software Foundation, Inc. + + Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz) + and Herman Ten Brugge (Haj.Ten.Brugge@net.HCC.nl). + + 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 "config.h" + #include "system.h" + #include "tree.h" + #include "toplev.h" + #include "cpplib.h" + #include "c-pragma.h" + #include "c-lex.h" + #include "c4x-protos.h" + + static int c4x_parse_pragma PARAMS ((const char *, tree *, tree *)); + + /* Handle machine specific pragmas for compatibility with existing + compilers for the C3x/C4x. + + pragma attribute + ---------------------------------------------------------- + CODE_SECTION(symbol,"section") section("section") + DATA_SECTION(symbol,"section") section("section") + FUNC_CANNOT_INLINE(function) + FUNC_EXT_CALLED(function) + FUNC_IS_PURE(function) const + FUNC_IS_SYSTEM(function) + FUNC_NEVER_RETURNS(function) noreturn + FUNC_NO_GLOBAL_ASG(function) + FUNC_NO_IND_ASG(function) + INTERRUPT(function) interrupt + + */ + + /* Parse a C4x pragma, of the form ( function [, "section"] ) \n. + FUNC is loaded with the IDENTIFIER_NODE of the function, SECT with + the STRING_CST node of the string. If SECT is null, then this + pragma doesn't take a section string. Returns 0 for a good pragma, + -1 for a malformed pragma. */ + #define BAD(msgid, arg) do { warning (msgid, arg); return -1; } while (0) + + static int + c4x_parse_pragma (name, func, sect) + const char *name; + tree *func; + tree *sect; + { + tree f, s, x; + + if (c_lex (&x) != CPP_OPEN_PAREN) + BAD ("missing '(' after '#pragma %s' - ignored", name); + + if (c_lex (&f) != CPP_NAME) + BAD ("missing function name in '#pragma %s' - ignored", name); + + if (sect) + { + if (c_lex (&x) != CPP_COMMA) + BAD ("malformed '#pragma %s' - ignored", name); + if (c_lex (&s) != CPP_STRING) + BAD ("missing section name in '#pragma %s' - ignored", name); + *sect = s; + } + + if (c_lex (&x) != CPP_CLOSE_PAREN) + BAD ("missing ')' for '#pragma %s' - ignored", name); + + if (c_lex (&x) != CPP_EOF) + warning ("junk at end of '#pragma %s'", name); + + *func = f; + return 0; + } + + void + c4x_pr_CODE_SECTION (pfile) + cpp_reader *pfile ATTRIBUTE_UNUSED; + { + tree func, sect; + + if (c4x_parse_pragma ("CODE_SECTION", &func, §)) + return; + code_tree = chainon (code_tree, + build_tree_list (func, + build_tree_list (NULL_TREE, sect))); + } + + void + c4x_pr_DATA_SECTION (pfile) + cpp_reader *pfile ATTRIBUTE_UNUSED; + { + tree func, sect; + + if (c4x_parse_pragma ("DATA_SECTION", &func, §)) + return; + data_tree = chainon (data_tree, + build_tree_list (func, + build_tree_list (NULL_TREE, sect))); + } + + void + c4x_pr_FUNC_IS_PURE (pfile) + cpp_reader *pfile ATTRIBUTE_UNUSED; + { + tree func; + + if (c4x_parse_pragma ("FUNC_IS_PURE", &func, 0)) + return; + pure_tree = chainon (pure_tree, build_tree_list (func, NULL_TREE)); + } + + void + c4x_pr_FUNC_NEVER_RETURNS (pfile) + cpp_reader *pfile ATTRIBUTE_UNUSED; + { + tree func; + + if (c4x_parse_pragma ("FUNC_NEVER_RETURNS", &func, 0)) + return; + noreturn_tree = chainon (noreturn_tree, build_tree_list (func, NULL_TREE)); + } + + void + c4x_pr_INTERRUPT (pfile) + cpp_reader *pfile ATTRIBUTE_UNUSED; + { + tree func; + + if (c4x_parse_pragma ("INTERRUPT", &func, 0)) + return; + interrupt_tree = chainon (interrupt_tree, build_tree_list (func, NULL_TREE)); + } + + /* Used for FUNC_CANNOT_INLINE, FUNC_EXT_CALLED, FUNC_IS_SYSTEM, + FUNC_NO_GLOBAL_ASG, and FUNC_NO_IND_ASG. */ + void + c4x_pr_ignored (pfile) + cpp_reader *pfile ATTRIBUTE_UNUSED; + { + } diff -Nrc3pad gcc-3.0.4/gcc/config/c4x/c4x-protos.h gcc-3.1/gcc/config/c4x/c4x-protos.h *** gcc-3.0.4/gcc/config/c4x/c4x-protos.h Sat Feb 3 01:25:03 2001 --- gcc-3.1/gcc/config/c4x/c4x-protos.h Sun Dec 23 04:59:10 2001 *************** extern void c4x_expand_epilogue PARAMS ( *** 39,48 **** extern int c4x_null_epilogue_p PARAMS ((void)); - extern int c4x_handle_pragma PARAMS ((int (* p_getc) (void), - void (* p_ungetc) (int), - char *)); - extern void c4x_global_label (const char *); extern void c4x_external_ref (const char *); --- 39,44 ---- *************** extern void c4x_external_ref (const char *** 50,57 **** extern void c4x_file_end (FILE *); #ifdef TREE_CODE - extern void c4x_set_default_attributes PARAMS ((tree, tree *)); - extern void c4x_function_arg_advance PARAMS ((CUMULATIVE_ARGS *, enum machine_mode, tree, int)); --- 46,51 ---- *************** extern struct rtx_def *c4x_function_arg *** 61,68 **** extern void c4x_encode_section_info PARAMS ((tree)); - extern int c4x_valid_type_attribute_p PARAMS ((tree, tree, tree, tree)); - #endif /* TREE_CODE */ --- 55,60 ---- *************** extern void c4x_va_start PARAMS ((int, t *** 73,82 **** extern struct rtx_def *c4x_va_arg PARAMS ((tree, tree)); ! extern rtx c4x_expand_builtin PARAMS((tree, rtx, rtx, ! enum machine_mode, int)); ! extern void c4x_init_builtins PARAMS((tree)); #endif /* TREE_CODE and RTX_CODE*/ --- 65,74 ---- extern struct rtx_def *c4x_va_arg PARAMS ((tree, tree)); ! extern rtx c4x_expand_builtin PARAMS ((tree, rtx, rtx, ! enum machine_mode, int)); ! extern void c4x_init_builtins PARAMS ((void)); #endif /* TREE_CODE and RTX_CODE*/ *************** extern int c4x_label_conflict PARAMS ((r *** 111,118 **** extern int c4x_address_conflict PARAMS ((rtx, rtx, int, int)); - extern int c4x_adjust_cost PARAMS ((rtx, rtx, rtx, int)); - extern void c4x_process_after_reload PARAMS ((rtx)); extern void c4x_rptb_insert PARAMS ((rtx insn)); --- 103,108 ---- *************** extern struct rtx_def *c4x_compare_op1; *** 297,309 **** #endif /* RTX_CODE */ /* Smallest class containing REGNO. */ ! extern enum reg_class c4x_regclass_map[]; ! extern enum machine_mode c4x_caller_save_map[]; extern int c4x_rpts_cycles; /* Max cycles for RPTS. */ extern int c4x_cpu_version; /* Cpu version C30/31/32/40/44. */ ! #ifdef _C_PRAGMA_H extern void c4x_pr_CODE_SECTION PARAMS ((cpp_reader *)); extern void c4x_pr_DATA_SECTION PARAMS ((cpp_reader *)); extern void c4x_pr_FUNC_IS_PURE PARAMS ((cpp_reader *)); --- 287,299 ---- #endif /* RTX_CODE */ /* Smallest class containing REGNO. */ ! extern enum reg_class c4x_regclass_map[FIRST_PSEUDO_REGISTER]; ! extern enum machine_mode c4x_caller_save_map[FIRST_PSEUDO_REGISTER]; extern int c4x_rpts_cycles; /* Max cycles for RPTS. */ extern int c4x_cpu_version; /* Cpu version C30/31/32/40/44. */ ! #ifdef GCC_C_PRAGMA_H extern void c4x_pr_CODE_SECTION PARAMS ((cpp_reader *)); extern void c4x_pr_DATA_SECTION PARAMS ((cpp_reader *)); extern void c4x_pr_FUNC_IS_PURE PARAMS ((cpp_reader *)); *************** extern void c4x_pr_FUNC_NEVER_RETURNS PA *** 311,316 **** extern void c4x_pr_INTERRUPT PARAMS ((cpp_reader *)); extern void c4x_pr_ignored PARAMS ((cpp_reader *)); extern void c4x_init_pragma PARAMS ((int (*) (tree *))); #endif ! #endif --- 301,307 ---- extern void c4x_pr_INTERRUPT PARAMS ((cpp_reader *)); extern void c4x_pr_ignored PARAMS ((cpp_reader *)); extern void c4x_init_pragma PARAMS ((int (*) (tree *))); + extern tree code_tree, data_tree, pure_tree, noreturn_tree, interrupt_tree; #endif ! #endif /* ! GCC_C4X_PROTOS_H */ diff -Nrc3pad gcc-3.0.4/gcc/config/c4x/c4x.c gcc-3.1/gcc/config/c4x/c4x.c *** gcc-3.0.4/gcc/config/c4x/c4x.c Sat May 12 20:32:41 2001 --- gcc-3.1/gcc/config/c4x/c4x.c Mon Dec 17 15:05:27 2001 *************** Boston, MA 02111-1307, USA. */ *** 25,32 **** /* Some output-actions in c4x.md need these. */ #include "config.h" #include "system.h" - #include "toplev.h" #include "rtl.h" #include "regs.h" #include "hard-reg-set.h" #include "basic-block.h" --- 25,32 ---- /* Some output-actions in c4x.md need these. */ #include "config.h" #include "system.h" #include "rtl.h" + #include "tree.h" #include "regs.h" #include "hard-reg-set.h" #include "basic-block.h" *************** Boston, MA 02111-1307, USA. */ *** 35,52 **** #include "insn-attr.h" #include "conditions.h" #include "output.h" - #include "tree.h" #include "function.h" #include "expr.h" #include "flags.h" #include "loop.h" #include "recog.h" #include "c-tree.h" #include "ggc.h" #include "cpplib.h" ! #include "c-lex.h" ! #include "c-pragma.h" #include "c4x-protos.h" rtx smulhi3_libfunc; rtx umulhi3_libfunc; --- 35,54 ---- #include "insn-attr.h" #include "conditions.h" #include "output.h" #include "function.h" #include "expr.h" + #include "optabs.h" + #include "libfuncs.h" #include "flags.h" #include "loop.h" #include "recog.h" #include "c-tree.h" #include "ggc.h" #include "cpplib.h" ! #include "toplev.h" #include "c4x-protos.h" + #include "target.h" + #include "target-def.h" rtx smulhi3_libfunc; rtx umulhi3_libfunc; *************** rtx floatunshihf2_libfunc; *** 61,67 **** static int c4x_leaf_function; ! static const char *float_reg_names[] = FLOAT_REGISTER_NAMES; /* Array of the smallest class containing reg number REGNO, indexed by REGNO. Used by REGNO_REG_CLASS in c4x.h. We assume that all these --- 63,69 ---- static int c4x_leaf_function; ! static const char *const float_reg_names[] = FLOAT_REGISTER_NAMES; /* Array of the smallest class containing reg number REGNO, indexed by REGNO. Used by REGNO_REG_CLASS in c4x.h. We assume that all these *************** int c4x_cpu_version = 40; /* CPU version *** 156,166 **** /* Pragma definitions. */ ! static tree code_tree = NULL_TREE; ! static tree data_tree = NULL_TREE; ! static tree pure_tree = NULL_TREE; ! static tree noreturn_tree = NULL_TREE; ! static tree interrupt_tree = NULL_TREE; /* Forward declarations */ static void c4x_add_gc_roots PARAMS ((void)); --- 158,168 ---- /* Pragma definitions. */ ! tree code_tree = NULL_TREE; ! tree data_tree = NULL_TREE; ! tree pure_tree = NULL_TREE; ! tree noreturn_tree = NULL_TREE; ! tree interrupt_tree = NULL_TREE; /* Forward declarations */ static void c4x_add_gc_roots PARAMS ((void)); *************** static int c4x_valid_operands PARAMS ((e *** 183,193 **** static int c4x_arn_reg_operand PARAMS ((rtx, enum machine_mode, unsigned int)); static int c4x_arn_mem_operand PARAMS ((rtx, enum machine_mode, unsigned int)); static void c4x_check_attribute PARAMS ((const char *, tree, tree, tree *)); - static int c4x_parse_pragma PARAMS ((const char *, tree *, tree *)); static int c4x_r11_set_p PARAMS ((rtx)); static int c4x_rptb_valid_p PARAMS ((rtx, rtx)); static int c4x_label_ref_used_p PARAMS ((rtx, rtx)); /* Called to register all of our global variables with the garbage collector. */ --- 185,224 ---- static int c4x_arn_reg_operand PARAMS ((rtx, enum machine_mode, unsigned int)); static int c4x_arn_mem_operand PARAMS ((rtx, enum machine_mode, unsigned int)); static void c4x_check_attribute PARAMS ((const char *, tree, tree, tree *)); static int c4x_r11_set_p PARAMS ((rtx)); static int c4x_rptb_valid_p PARAMS ((rtx, rtx)); static int c4x_label_ref_used_p PARAMS ((rtx, rtx)); + static tree c4x_handle_fntype_attribute PARAMS ((tree *, tree, tree, int, bool *)); + const struct attribute_spec c4x_attribute_table[]; + static void c4x_insert_attributes PARAMS ((tree, tree *)); + static void c4x_asm_named_section PARAMS ((const char *, unsigned int)); + static int c4x_adjust_cost PARAMS ((rtx, rtx, rtx, int)); + + /* Initialize the GCC target structure. */ + #undef TARGET_ASM_BYTE_OP + #define TARGET_ASM_BYTE_OP "\t.word\t" + #undef TARGET_ASM_ALIGNED_HI_OP + #define TARGET_ASM_ALIGNED_HI_OP NULL + #undef TARGET_ASM_ALIGNED_SI_OP + #define TARGET_ASM_ALIGNED_SI_OP NULL + + #undef TARGET_ATTRIBUTE_TABLE + #define TARGET_ATTRIBUTE_TABLE c4x_attribute_table + + #undef TARGET_INSERT_ATTRIBUTES + #define TARGET_INSERT_ATTRIBUTES c4x_insert_attributes + + #undef TARGET_INIT_BUILTINS + #define TARGET_INIT_BUILTINS c4x_init_builtins + + #undef TARGET_EXPAND_BUILTIN + #define TARGET_EXPAND_BUILTIN c4x_expand_builtin + #undef TARGET_SCHED_ADJUST_COST + #define TARGET_SCHED_ADJUST_COST c4x_adjust_cost + + struct gcc_target targetm = TARGET_INITIALIZER; + /* Called to register all of our global variables with the garbage collector. */ *************** c4x_override_options () *** 265,271 **** case 40: target_flags |= C40_FLAG; break; case 44: target_flags |= C44_FLAG; break; default: ! warning ("Unknown CPU version %d, using 40.\n", c4x_cpu_version); c4x_cpu_version = 40; target_flags |= C40_FLAG; } --- 296,302 ---- case 40: target_flags |= C40_FLAG; break; case 44: target_flags |= C44_FLAG; break; default: ! warning ("unknown CPU version %d, using 40.\n", c4x_cpu_version); c4x_cpu_version = 40; target_flags |= C40_FLAG; } *************** c4x_override_options () *** 276,282 **** target_flags &= ~C3X_FLAG; /* Convert foo / 8.0 into foo * 0.125, etc. */ ! flag_fast_math = 1; /* We should phase out the following at some stage. This provides compatibility with the old -mno-aliases option. */ --- 307,313 ---- target_flags &= ~C3X_FLAG; /* Convert foo / 8.0 into foo * 0.125, etc. */ ! set_fast_math_flags(); /* We should phase out the following at some stage. This provides compatibility with the old -mno-aliases option. */ *************** c4x_hard_regno_rename_ok (regno1, regno2 *** 476,482 **** Don't use R0 to pass arguments in, we use 0 to indicate a stack argument. */ ! static int c4x_int_reglist[3][6] = { {AR2_REGNO, R2_REGNO, R3_REGNO, RC_REGNO, RS_REGNO, RE_REGNO}, {AR2_REGNO, R3_REGNO, RC_REGNO, RS_REGNO, RE_REGNO, 0}, --- 507,513 ---- Don't use R0 to pass arguments in, we use 0 to indicate a stack argument. */ ! static const int c4x_int_reglist[3][6] = { {AR2_REGNO, R2_REGNO, R3_REGNO, RC_REGNO, RS_REGNO, RE_REGNO}, {AR2_REGNO, R3_REGNO, RC_REGNO, RS_REGNO, RE_REGNO, 0}, *************** c4x_expand_prologue () *** 827,839 **** return; } - #ifdef FUNCTION_BLOCK_PROFILER_EXIT - if (profile_block_flag == 2) - { - FUNCTION_BLOCK_PROFILER_EXIT - } - #endif - /* For __interrupt__ function build specific prologue. */ if (c4x_interrupt_function_p ()) { --- 858,863 ---- *************** c4x_expand_prologue () *** 856,862 **** requires more than 32767 words of local temporary storage! */ if (size > 32767) ! error ("ISR %s requires %d words of local vars, max is 32767.", current_function_name, size); insn = emit_insn (gen_addqi3 (gen_rtx_REG (QImode, SP_REGNO), --- 880,886 ---- requires more than 32767 words of local temporary storage! */ if (size > 32767) ! error ("ISR %s requires %d words of local vars, max is 32767", current_function_name, size); insn = emit_insn (gen_addqi3 (gen_rtx_REG (QImode, SP_REGNO), *************** c4x_null_epilogue_p () *** 1215,1221 **** && ! c4x_interrupt_function_p () && ! current_function_calls_alloca && ! current_function_args_size - && ! (profile_block_flag == 2) && ! (optimize < 2) && ! get_frame_size ()) { --- 1239,1244 ---- *************** c4x_check_legit_addr (mode, addr, strict *** 1609,1615 **** return 0; case CONST_DOUBLE: ! fatal_insn ("Using CONST_DOUBLE for address", addr); default: return 0; --- 1632,1638 ---- return 0; case CONST_DOUBLE: ! fatal_insn ("using CONST_DOUBLE for address", addr); default: return 0; *************** c4x_print_operand (file, op, letter) *** 1912,1918 **** if (GET_CODE(op1) == CONST_INT || GET_CODE(op1) == SYMBOL_REF) { asm_fprintf (file, "\t%s\t@", TARGET_C3X ? "ldp" : "ldpk"); ! output_address (XEXP (adj_offsettable_operand (op, 1), 0)); asm_fprintf (file, "\n"); } } --- 1935,1941 ---- if (GET_CODE(op1) == CONST_INT || GET_CODE(op1) == SYMBOL_REF) { asm_fprintf (file, "\t%s\t@", TARGET_C3X ? "ldp" : "ldpk"); ! output_address (XEXP (adjust_address (op, VOIDmode, 1), 0)); asm_fprintf (file, "\n"); } } *************** c4x_print_operand (file, op, letter) *** 1934,1940 **** if (code == MEM && c4x_autoinc_operand (op, Pmode)) break; else if (code == MEM) ! output_address (XEXP (adj_offsettable_operand (op, 1), 0)); else if (code == REG) fprintf (file, "%s", reg_names[REGNO (op) + 1]); else --- 1957,1963 ---- if (code == MEM && c4x_autoinc_operand (op, Pmode)) break; else if (code == MEM) ! output_address (XEXP (adjust_address (op, VOIDmode, 1), 0)); else if (code == REG) fprintf (file, "%s", reg_names[REGNO (op) + 1]); else *************** lsrc_operand (op, mode) *** 3417,3423 **** mode = GET_MODE (op); if (mode != QImode && mode != Pmode) ! fatal_insn ("Mode not QImode", op); if (GET_CODE (op) == CONST_INT) return c4x_L_constant (op) || c4x_J_constant (op); --- 3440,3446 ---- mode = GET_MODE (op); if (mode != QImode && mode != Pmode) ! fatal_insn ("mode not QImode", op); if (GET_CODE (op) == CONST_INT) return c4x_L_constant (op) || c4x_J_constant (op); *************** tsrc_operand (op, mode) *** 3437,3443 **** mode = GET_MODE (op); if (mode != QImode && mode != Pmode) ! fatal_insn ("Mode not QImode", op); if (GET_CODE (op) == CONST_INT) return c4x_L_constant (op) || c4x_N_constant (op) || c4x_J_constant (op); --- 3460,3466 ---- mode = GET_MODE (op); if (mode != QImode && mode != Pmode) ! fatal_insn ("mode not QImode", op); if (GET_CODE (op) == CONST_INT) return c4x_L_constant (op) || c4x_N_constant (op) || c4x_J_constant (op); *************** c4x_S_address_parse (op, base, incdec, i *** 3494,3500 **** *disp = 0; if (GET_CODE (op) != MEM) ! fatal_insn ("Invalid indirect memory address", op); op = XEXP (op, 0); switch (GET_CODE (op)) --- 3517,3523 ---- *disp = 0; if (GET_CODE (op) != MEM) ! fatal_insn ("invalid indirect memory address", op); op = XEXP (op, 0); switch (GET_CODE (op)) *************** c4x_S_address_parse (op, base, incdec, i *** 3583,3589 **** /* Fallthrough. */ default: ! fatal_insn ("Invalid indirect (S) memory address", op); } } --- 3606,3612 ---- /* Fallthrough. */ default: ! fatal_insn ("invalid indirect (S) memory address", op); } } *************** c4x_operand_subword (op, i, validate_add *** 4460,4600 **** return operand_subword (op, i, validate_address, mode); } - /* Handle machine specific pragmas for compatibility with existing - compilers for the C3x/C4x. - - pragma attribute - ---------------------------------------------------------- - CODE_SECTION(symbol,"section") section("section") - DATA_SECTION(symbol,"section") section("section") - FUNC_CANNOT_INLINE(function) - FUNC_EXT_CALLED(function) - FUNC_IS_PURE(function) const - FUNC_IS_SYSTEM(function) - FUNC_NEVER_RETURNS(function) noreturn - FUNC_NO_GLOBAL_ASG(function) - FUNC_NO_IND_ASG(function) - INTERRUPT(function) interrupt - - */ - - /* Parse a C4x pragma, of the form ( function [, "section"] ) \n. - FUNC is loaded with the IDENTIFIER_NODE of the function, SECT with - the STRING_CST node of the string. If SECT is null, then this - pragma doesn't take a section string. Returns 0 for a good pragma, - -1 for a malformed pragma. */ - #define BAD(msgid, arg) do { warning (msgid, arg); return -1; } while (0) - - static int (*c_lex_func) (tree *); - - void - c4x_init_pragma (get_token) - int (*get_token) PARAMS ((tree *)); - { - c_lex_func = get_token; - } - - - static int - c4x_parse_pragma (name, func, sect) - const char *name; - tree *func; - tree *sect; - { - tree f, s, x; - - if (c_lex_func (&x) != CPP_OPEN_PAREN) - BAD ("missing '(' after '#pragma %s' - ignored", name); - - if (c_lex_func (&f) != CPP_NAME) - BAD ("missing function name in '#pragma %s' - ignored", name); - - if (sect) - { - if (c_lex_func (&x) != CPP_COMMA) - BAD ("malformed '#pragma %s' - ignored", name); - if (c_lex_func (&s) != CPP_STRING) - BAD ("missing section name in '#pragma %s' - ignored", name); - *sect = s; - } - - if (c_lex_func (&x) != CPP_CLOSE_PAREN) - BAD ("missing ')' for '#pragma %s' - ignored", name); - - if (c_lex_func (&x) != CPP_EOF) - warning ("junk at end of '#pragma %s'", name); - - *func = f; - return 0; - } - - void - c4x_pr_CODE_SECTION (pfile) - cpp_reader *pfile ATTRIBUTE_UNUSED; - { - tree func, sect; - - if (c4x_parse_pragma ("CODE_SECTION", &func, §)) - return; - code_tree = chainon (code_tree, - build_tree_list (func, - build_tree_list (NULL_TREE, sect))); - } - - void - c4x_pr_DATA_SECTION (pfile) - cpp_reader *pfile ATTRIBUTE_UNUSED; - { - tree func, sect; - - if (c4x_parse_pragma ("DATA_SECTION", &func, §)) - return; - data_tree = chainon (data_tree, - build_tree_list (func, - build_tree_list (NULL_TREE, sect))); - } - - void - c4x_pr_FUNC_IS_PURE (pfile) - cpp_reader *pfile ATTRIBUTE_UNUSED; - { - tree func; - - if (c4x_parse_pragma ("FUNC_IS_PURE", &func, 0)) - return; - pure_tree = chainon (pure_tree, build_tree_list (func, NULL_TREE)); - } - - void - c4x_pr_FUNC_NEVER_RETURNS (pfile) - cpp_reader *pfile ATTRIBUTE_UNUSED; - { - tree func; - - if (c4x_parse_pragma ("FUNC_NEVER_RETURNS", &func, 0)) - return; - noreturn_tree = chainon (noreturn_tree, build_tree_list (func, NULL_TREE)); - } - - void - c4x_pr_INTERRUPT (pfile) - cpp_reader *pfile ATTRIBUTE_UNUSED; - { - tree func; - - if (c4x_parse_pragma ("INTERRUPT", &func, 0)) - return; - interrupt_tree = chainon (interrupt_tree, build_tree_list (func, NULL_TREE)); - } - - /* Used for FUNC_CANNOT_INLINE, FUNC_EXT_CALLED, FUNC_IS_SYSTEM, - FUNC_NO_GLOBAL_ASG, and FUNC_NO_IND_ASG. */ - void - c4x_pr_ignored (pfile) - cpp_reader *pfile ATTRIBUTE_UNUSED; - { - } - struct name_list { struct name_list *next; --- 4483,4488 ---- *************** c4x_check_attribute (attrib, list, decl, *** 4708,4721 **** != IDENTIFIER_POINTER (DECL_NAME (decl))) list = TREE_CHAIN (list); if (list) ! *attributes = chainon (*attributes, ! build_tree_list (get_identifier (attrib), ! TREE_VALUE (list))); } ! void ! c4x_set_default_attributes(decl, attributes) tree decl, *attributes; { switch (TREE_CODE (decl)) --- 4596,4608 ---- != IDENTIFIER_POINTER (DECL_NAME (decl))) list = TREE_CHAIN (list); if (list) ! *attributes = tree_cons (get_identifier (attrib), TREE_VALUE (list), ! *attributes); } ! static void ! c4x_insert_attributes (decl, attributes) tree decl, *attributes; { switch (TREE_CODE (decl)) *************** c4x_set_default_attributes(decl, attribu *** 4736,4766 **** } } ! /* Return nonzero if IDENTIFIER with arguments ARGS is a valid machine ! specific attribute for TYPE. The attributes in ATTRIBUTES have ! previously been assigned to TYPE. */ ! ! int ! c4x_valid_type_attribute_p (type, attributes, identifier, args) ! tree type; ! tree attributes ATTRIBUTE_UNUSED; ! tree identifier; tree args ATTRIBUTE_UNUSED; { ! if (TREE_CODE (type) != FUNCTION_TYPE) ! return 0; ! ! if (is_attribute_p ("interrupt", identifier)) ! return 1; ! ! if (is_attribute_p ("assembler", identifier)) ! return 1; ! ! if (is_attribute_p ("leaf_pretend", identifier)) ! return 1; ! ! return 0; } --- 4623,4658 ---- } } + /* Table of valid machine attributes. */ + const struct attribute_spec c4x_attribute_table[] = + { + /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */ + { "interrupt", 0, 0, false, true, true, c4x_handle_fntype_attribute }, + /* FIXME: code elsewhere in this file treats "naked" as a synonym of + "interrupt"; should it be accepted here? */ + { "assembler", 0, 0, false, true, true, c4x_handle_fntype_attribute }, + { "leaf_pretend", 0, 0, false, true, true, c4x_handle_fntype_attribute }, + { NULL, 0, 0, false, false, false, NULL } + }; ! /* Handle an attribute requiring a FUNCTION_TYPE; ! arguments as in struct attribute_spec.handler. */ ! static tree ! c4x_handle_fntype_attribute (node, name, args, flags, no_add_attrs) ! tree *node; ! tree name; tree args ATTRIBUTE_UNUSED; + int flags ATTRIBUTE_UNUSED; + bool *no_add_attrs; { ! if (TREE_CODE (*node) != FUNCTION_TYPE) ! { ! warning ("`%s' attribute only applies to functions", ! IDENTIFIER_POINTER (name)); ! *no_add_attrs = true; ! } ! ! return NULL_TREE; } *************** c4x_check_laj_p (insn) *** 4886,4893 **** #define SETLDA_USE_COST 2 #define READ_USE_COST 2 ! ! int c4x_adjust_cost (insn, link, dep_insn, cost) rtx insn; rtx link; --- 4778,4784 ---- #define SETLDA_USE_COST 2 #define READ_USE_COST 2 ! static int c4x_adjust_cost (insn, link, dep_insn, cost) rtx insn; rtx link; *************** c4x_adjust_cost (insn, link, dep_insn, c *** 5025,5043 **** } void ! c4x_init_builtins (endlink) ! tree endlink; { builtin_function ("fast_ftoi", build_function_type (integer_type_node, tree_cons (NULL_TREE, double_type_node, endlink)), ! C4X_BUILTIN_FIX, BUILT_IN_MD, NULL_PTR); builtin_function ("ansi_ftoi", build_function_type (integer_type_node, tree_cons (NULL_TREE, double_type_node, endlink)), ! C4X_BUILTIN_FIX_ANSI, BUILT_IN_MD, NULL_PTR); if (TARGET_C3X) builtin_function ("fast_imult", build_function_type --- 4916,4935 ---- } void ! c4x_init_builtins () { + tree endlink = void_list_node; + builtin_function ("fast_ftoi", build_function_type (integer_type_node, tree_cons (NULL_TREE, double_type_node, endlink)), ! C4X_BUILTIN_FIX, BUILT_IN_MD, NULL); builtin_function ("ansi_ftoi", build_function_type (integer_type_node, tree_cons (NULL_TREE, double_type_node, endlink)), ! C4X_BUILTIN_FIX_ANSI, BUILT_IN_MD, NULL); if (TARGET_C3X) builtin_function ("fast_imult", build_function_type *************** c4x_init_builtins (endlink) *** 5045,5068 **** tree_cons (NULL_TREE, integer_type_node, tree_cons (NULL_TREE, integer_type_node, endlink))), ! C4X_BUILTIN_MPYI, BUILT_IN_MD, NULL_PTR); else { builtin_function ("toieee", build_function_type (double_type_node, tree_cons (NULL_TREE, double_type_node, endlink)), ! C4X_BUILTIN_TOIEEE, BUILT_IN_MD, NULL_PTR); builtin_function ("frieee", build_function_type (double_type_node, tree_cons (NULL_TREE, double_type_node, endlink)), ! C4X_BUILTIN_FRIEEE, BUILT_IN_MD, NULL_PTR); builtin_function ("fast_invf", build_function_type (double_type_node, tree_cons (NULL_TREE, double_type_node, endlink)), ! C4X_BUILTIN_RCPF, BUILT_IN_MD, NULL_PTR); } } --- 4937,4960 ---- tree_cons (NULL_TREE, integer_type_node, tree_cons (NULL_TREE, integer_type_node, endlink))), ! C4X_BUILTIN_MPYI, BUILT_IN_MD, NULL); else { builtin_function ("toieee", build_function_type (double_type_node, tree_cons (NULL_TREE, double_type_node, endlink)), ! C4X_BUILTIN_TOIEEE, BUILT_IN_MD, NULL); builtin_function ("frieee", build_function_type (double_type_node, tree_cons (NULL_TREE, double_type_node, endlink)), ! C4X_BUILTIN_FRIEEE, BUILT_IN_MD, NULL); builtin_function ("fast_invf", build_function_type (double_type_node, tree_cons (NULL_TREE, double_type_node, endlink)), ! C4X_BUILTIN_RCPF, BUILT_IN_MD, NULL); } } *************** c4x_expand_builtin (exp, target, subtarg *** 5158,5160 **** --- 5050,5060 ---- } return NULL_RTX; } + + static void + c4x_asm_named_section (name, flags) + const char *name; + unsigned int flags ATTRIBUTE_UNUSED; + { + fprintf (asm_out_file, "\t.sect\t\"%s\"\n", name); + } diff -Nrc3pad gcc-3.0.4/gcc/config/c4x/c4x.h gcc-3.1/gcc/config/c4x/c4x.h *** gcc-3.0.4/gcc/config/c4x/c4x.h Sat May 26 01:32:33 2001 --- gcc-3.1/gcc/config/c4x/c4x.h Thu Feb 21 21:11:06 2002 *************** *** 1,6 **** /* Definitions of target machine for GNU compiler. TMS320C[34]x Copyright (C) 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz) and Herman Ten Brugge (Haj.Ten.Brugge@net.HCC.nl). --- 1,6 ---- /* Definitions of target machine for GNU compiler. TMS320C[34]x Copyright (C) 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz) and Herman Ten Brugge (Haj.Ten.Brugge@net.HCC.nl). *************** extern int target_flags; *** 297,319 **** /* -mcpu=XX with XX = target DSP version number. */ - /* This macro is similar to `TARGET_SWITCHES' but defines names of - command options that have values. Its definition is an - initializer with a subgrouping for each command option. - - Each subgrouping contains a string constant, that defines the - fixed part of the option name, and the address of a variable. - The variable, type `char *', is set to the variable part of the - given option if the fixed part matches. The actual option name - is made by appending `-m' to the specified name. - - Here is an example which defines `-mshort-data-NUMBER'. If the - given option is `-mshort-data-512', the variable `m88k_short_data' - will be set to the string `"512"'. - - extern char *m88k_short_data; - #define TARGET_OPTIONS { { "short-data-", &m88k_short_data } } */ - extern const char *c4x_rpts_cycles_string, *c4x_cpu_version_string; #define TARGET_OPTIONS \ --- 297,302 ---- *************** extern const char *c4x_rpts_cycles_strin *** 653,659 **** /* Specify the modes required to caller save a given hard regno. */ ! #define HARD_REGNO_CALLER_SAVE_MODE(REGNO, NREGS) (c4x_caller_save_map[REGNO]) #define HARD_REGNO_MODE_OK(REGNO, MODE) c4x_hard_regno_mode_ok(REGNO, MODE) --- 636,642 ---- /* Specify the modes required to caller save a given hard regno. */ ! #define HARD_REGNO_CALLER_SAVE_MODE(REGNO, NREGS, MODE) (c4x_caller_save_map[REGNO]) #define HARD_REGNO_MODE_OK(REGNO, MODE) c4x_hard_regno_mode_ok(REGNO, MODE) *************** enum reg_class *** 1091,1099 **** /* Passing Function Arguments on the Stack. */ ! #if 0 #define PUSH_ROUNDING(BYTES) (BYTES) - #endif #define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, STACK_SIZE) 0 /* The following structure is used by calls.c, function.c, c4x.c. */ --- 1074,1081 ---- /* Passing Function Arguments on the Stack. */ ! #define PUSH_ARGS 1 #define PUSH_ROUNDING(BYTES) (BYTES) #define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, STACK_SIZE) 0 /* The following structure is used by calls.c, function.c, c4x.c. */ *************** CUMULATIVE_ARGS; *** 1194,1462 **** fprintf (FILE, "\tpop\tar2\n"); \ } - /* There are three profiling modes for basic blocks available. - The modes are selected at compile time by using the options - -a or -ax of the gnu compiler. - The variable `profile_block_flag' will be set according to the - selected option. - - profile_block_flag == 0, no option used: - - No profiling done. - - profile_block_flag == 1, -a option used. - - Count frequency of execution of every basic block. - - profile_block_flag == 2, -ax option used. - - Generate code to allow several different profiling modes at run time. - Available modes are: - Produce a trace of all basic blocks. - Count frequency of jump instructions executed. - In every mode it is possible to start profiling upon entering - certain functions and to disable profiling of some other functions. - - The result of basic-block profiling will be written to a file `bb.out'. - If the -ax option is used parameters for the profiling will be read - from file `bb.in'. - - */ - - #define FUNCTION_BLOCK_PROFILER(FILE, BLOCKNO) \ - if (profile_block_flag == 2) \ - { \ - if (! TARGET_C3X) \ - { \ - fprintf (FILE, "\tpush\tst\n"); \ - fprintf (FILE, "\tpush\tar2\n"); \ - fprintf (FILE, "\tpush\tr2\n"); \ - fprintf (FILE, "\tldhi\t^LPBX0,ar2\n"); \ - fprintf (FILE, "\tor\t#LPBX0,ar2\n"); \ - if (BLOCKNO > 32767) \ - { \ - fprintf (FILE, "\tldhi\t%d,r2\n", (BLOCKNO) >> 16); \ - fprintf (FILE, "\tor\t%d,r2\n", (BLOCKNO)); \ - } \ - else \ - { \ - fprintf (FILE, "\tldiu\t%d,r2\n", (BLOCKNO)); \ - } \ - fprintf (FILE, "\tcall\t___bb_init_trace_func\n"); \ - fprintf (FILE, "\tpop\tr2\n"); \ - fprintf (FILE, "\tpop\tar2\n"); \ - fprintf (FILE, "\tpop\tst\n"); \ - } \ - else \ - { \ - fprintf (FILE, "\tpush\tst\n"); \ - fprintf (FILE, "\tpush\tar2\n"); \ - fprintf (FILE, "\tpush\tr2\n"); \ - fprintf (FILE, "\tldiu\t^LPBX0,ar2\n"); \ - fprintf (FILE, "\tlsh\t16,ar2\n"); \ - fprintf (FILE, "\tor\t#LPBX0,ar2\n"); \ - if (BLOCKNO > 32767) \ - { \ - fprintf (FILE, "\tldi\t%d,r2\n", (BLOCKNO) >> 16); \ - fprintf (FILE, "\tlsh\t16,r2\n"); \ - fprintf (FILE, "\tor\t%d,r2\n", (BLOCKNO)); \ - } \ - else \ - { \ - fprintf (FILE, "\tldiu\t%d,r2\n", (BLOCKNO)); \ - } \ - fprintf (FILE, "\tcall\t___bb_init_trace_func\n"); \ - fprintf (FILE, "\tpop\tr2\n"); \ - fprintf (FILE, "\tpop\tar2\n"); \ - fprintf (FILE, "\tpop\tst\n"); \ - } \ - } \ - else \ - { \ - if (! TARGET_C3X) \ - { \ - fprintf (FILE, "\tpush\tst\n"); \ - fprintf (FILE, "\tpush\tar2\n"); \ - fprintf (FILE, "\tldhi\t^LPBX0,ar2\n"); \ - fprintf (FILE, "\tor\t#LPBX0,ar2\n"); \ - fprintf (FILE, "\tcmpi\t0,*ar2\n"); \ - fprintf (FILE, "\tbne\t$+2\n"); \ - fprintf (FILE, "\tcall\t___bb_init_func\n"); \ - fprintf (FILE, "\tpop\tar2\n"); \ - fprintf (FILE, "\tpop\tst\n"); \ - } \ - else \ - { \ - fprintf (FILE, "\tpush\tst\n"); \ - fprintf (FILE, "\tpush\tar2\n"); \ - fprintf (FILE, "\tpush\tr2\n"); \ - fprintf (FILE, "\tldiu\t^LPBX0,ar2\n"); \ - fprintf (FILE, "\tlsh\t16,ar2\n"); \ - fprintf (FILE, "\tor\t#LPBX0,ar2\n"); \ - fprintf (FILE, "\tldi\t*ar2,r2\n"); \ - fprintf (FILE, "\tbne\t$+2\n"); \ - fprintf (FILE, "\tcall\t___bb_init_func\n"); \ - fprintf (FILE, "\tpop\tr2\n"); \ - fprintf (FILE, "\tpop\tar2\n"); \ - fprintf (FILE, "\tpop\tst\n"); \ - } \ - } - - #define BLOCK_PROFILER(FILE, BLOCKNO) \ - if (profile_block_flag == 2) \ - { \ - if (! TARGET_C3X) \ - { \ - fprintf (FILE, "\tpush\tst\n"); \ - fprintf (FILE, "\tpush\tar2\n"); \ - fprintf (FILE, "\tpush\tar0\n"); \ - fprintf (FILE, "\tldhi\t^___bb,ar2\n"); \ - fprintf (FILE, "\tor\t#___bb,ar2\n"); \ - if (BLOCKNO > 32767) \ - { \ - fprintf (FILE, "\tldhi\t%d,ar0\n", (BLOCKNO) >> 16);\ - fprintf (FILE, "\tor\t%d,ar0\n", (BLOCKNO)); \ - } \ - else \ - { \ - fprintf (FILE, "\tldiu\t%d,ar0\n", (BLOCKNO)); \ - } \ - fprintf (FILE, "\tsti\tar0,*ar2\n"); \ - fprintf (FILE, "\tldhi\t^LPBX0,ar0\n"); \ - fprintf (FILE, "\tor\t#LPBX0,ar0\n"); \ - fprintf (FILE, "\tsti\tar0,*+ar2(1)\n"); \ - fprintf (FILE, "\tcall\t___bb_trace_func\n"); \ - fprintf (FILE, "\tpop\tar0\n"); \ - fprintf (FILE, "\tpop\tar2\n"); \ - fprintf (FILE, "\tpop\tst\n"); \ - } \ - else \ - { \ - fprintf (FILE, "\tpush\tst\n"); \ - fprintf (FILE, "\tpush\tar2\n"); \ - fprintf (FILE, "\tpush\tar0\n"); \ - fprintf (FILE, "\tldiu\t^___bb,ar2\n"); \ - fprintf (FILE, "\tlsh\t16,ar2\n"); \ - fprintf (FILE, "\tor\t#___bb,ar2\n"); \ - if (BLOCKNO > 32767) \ - { \ - fprintf (FILE, "\tldi\t%d,ar0\n", (BLOCKNO) >> 16); \ - fprintf (FILE, "\tlsh\t16,ar0\n"); \ - fprintf (FILE, "\tor\t%d,ar0\n", (BLOCKNO)); \ - } \ - else \ - { \ - fprintf (FILE, "\tldiu\t%d,ar0\n", (BLOCKNO)); \ - } \ - fprintf (FILE, "\tsti\tar0,*ar2\n"); \ - fprintf (FILE, "\tldiu\t^LPBX0,ar0\n"); \ - fprintf (FILE, "\tlsh\t16,ar0\n"); \ - fprintf (FILE, "\tor\t#LPBX0,ar0\n"); \ - fprintf (FILE, "\tsti\tar0,*+ar2(1)\n"); \ - fprintf (FILE, "\tcall\t___bb_trace_func\n"); \ - fprintf (FILE, "\tpop\tar0\n"); \ - fprintf (FILE, "\tpop\tar2\n"); \ - fprintf (FILE, "\tpop\tst\n"); \ - } \ - } \ - else \ - { \ - if (! TARGET_C3X) \ - { \ - fprintf (FILE, "\tpush\tar2\n"); \ - fprintf (FILE, "\tpush\tar0\n"); \ - fprintf (FILE, "\tldhi\t^LPBX2+%d,ar2\n", (BLOCKNO)); \ - fprintf (FILE, "\tor\t#LPBX2+%d,ar2\n", (BLOCKNO)); \ - fprintf (FILE, "\taddi3\t1,*ar2,ar0\n"); \ - fprintf (FILE, "\tsti\tar0,*ar2\n"); \ - fprintf (FILE, "\tpop\tar0\n"); \ - fprintf (FILE, "\tpop\tar2\n"); \ - } \ - else \ - { \ - fprintf (FILE, "\tpush\tar2\n"); \ - fprintf (FILE, "\tpush\tar0\n"); \ - fprintf (FILE, "\tldiu\t^LPBX2+%d,ar2\n", (BLOCKNO)); \ - fprintf (FILE, "\tlsh\t16,ar2\n"); \ - fprintf (FILE, "\tor\t#LPBX2+%d,ar2\n", (BLOCKNO)); \ - fprintf (FILE, "\tldiu\t*ar2,ar0\n"); \ - fprintf (FILE, "\taddi\t1,ar0\n"); \ - fprintf (FILE, "\tsti\tar0,*ar2\n"); \ - fprintf (FILE, "\tpop\tar0\n"); \ - fprintf (FILE, "\tpop\tar2\n"); \ - } \ - } - - #define FUNCTION_BLOCK_PROFILER_EXIT \ - { \ - emit_insn (gen_push_st ()); \ - emit_insn (gen_pushqi ( \ - gen_rtx_REG (QImode, AR2_REGNO))); \ - emit_call_insn (gen_nodb_call ( \ - gen_rtx_SYMBOL_REF (QImode, "__bb_trace_ret")));\ - emit_insn (gen_popqi_unspec ( \ - gen_rtx_REG (QImode, AR2_REGNO))); \ - emit_insn (gen_pop_st ()); \ - } - - #define MACHINE_STATE_SAVE(ID) \ - asm(" push r0"); \ - asm(" pushf r0"); \ - asm(" push r1"); \ - asm(" pushf r1"); \ - asm(" push r2"); \ - asm(" pushf r2"); \ - asm(" push r3"); \ - asm(" pushf r3"); \ - asm(" push ar0"); \ - asm(" push ar1"); \ - asm(" .if .BIGMODEL"); \ - asm(" push dp"); \ - asm(" .endif"); \ - asm(" push ir0"); \ - asm(" push ir1"); \ - asm(" push bk"); \ - asm(" push rs"); \ - asm(" push re"); \ - asm(" push rc"); \ - asm(" .if .tms320C40"); \ - asm(" push r9"); \ - asm(" pushf r9"); \ - asm(" push r10"); \ - asm(" pushf r10"); \ - asm(" push r11"); \ - asm(" pushf r11"); \ - asm(" .endif"); - - #define MACHINE_STATE_RESTORE(ID) \ - asm(" .if .tms320C40"); \ - asm(" popf r11"); \ - asm(" pop r11"); \ - asm(" popf r10"); \ - asm(" pop r10"); \ - asm(" popf r9"); \ - asm(" pop r9"); \ - asm(" .endif"); \ - asm(" pop rc"); \ - asm(" pop re"); \ - asm(" pop rs"); \ - asm(" pop bk"); \ - asm(" pop ir1"); \ - asm(" pop ir0"); \ - asm(" .if .BIGMODEL"); \ - asm(" pop dp"); \ - asm(" .endif"); \ - asm(" pop ar1"); \ - asm(" pop ar0"); \ - asm(" popf r3"); \ - asm(" pop r3"); \ - asm(" popf r2"); \ - asm(" pop r2"); \ - asm(" popf r1"); \ - asm(" pop r1"); \ - asm(" popf r0"); \ - asm(" pop r0"); \ - /* Implicit Calls to Library Routines. */ #define MULQI3_LIBCALL "__mulqi3" --- 1176,1181 ---- *************** CUMULATIVE_ARGS; *** 1502,1512 **** = init_one_libfunc (MODQI3_LIBCALL); \ umod_optab->handlers[(int) QImode].libfunc \ = init_one_libfunc (UMODQI3_LIBCALL); \ ! flodiv_optab->handlers[(int) QFmode].libfunc \ = init_one_libfunc (DIVQF3_LIBCALL); \ smul_optab->handlers[(int) HFmode].libfunc \ = init_one_libfunc (MULHF3_LIBCALL); \ ! flodiv_optab->handlers[(int) HFmode].libfunc \ = init_one_libfunc (DIVHF3_LIBCALL); \ smul_optab->handlers[(int) HImode].libfunc \ = init_one_libfunc (MULHI3_LIBCALL); \ --- 1221,1231 ---- = init_one_libfunc (MODQI3_LIBCALL); \ umod_optab->handlers[(int) QImode].libfunc \ = init_one_libfunc (UMODQI3_LIBCALL); \ ! sdiv_optab->handlers[(int) QFmode].libfunc \ = init_one_libfunc (DIVQF3_LIBCALL); \ smul_optab->handlers[(int) HFmode].libfunc \ = init_one_libfunc (MULHF3_LIBCALL); \ ! sdiv_optab->handlers[(int) HFmode].libfunc \ = init_one_libfunc (DIVHF3_LIBCALL); \ smul_optab->handlers[(int) HImode].libfunc \ = init_one_libfunc (MULHI3_LIBCALL); \ *************** CUMULATIVE_ARGS; *** 1555,1561 **** The problem is a subtle one and deals with the manner in which the negative condition (N) flag is used on the C4x. This flag does not reflect the status of the actual result but of the ideal result had ! no overflow occured (when considering signed operands). For example, 0x7fffffff + 1 => 0x80000000 Z=0 V=1 N=0 C=0. Here the flags reflect the untruncated result, not the actual result. --- 1274,1280 ---- The problem is a subtle one and deals with the manner in which the negative condition (N) flag is used on the C4x. This flag does not reflect the status of the actual result but of the ideal result had ! no overflow occurred (when considering signed operands). For example, 0x7fffffff + 1 => 0x80000000 Z=0 V=1 N=0 C=0. Here the flags reflect the untruncated result, not the actual result. *************** CUMULATIVE_ARGS; *** 1591,1597 **** To handle the problem where the N flag is set differently whenever there is an overflow we use a different CC mode, CC_NOOVmode which says that the CC reflects the comparison of the result against zero ! if no overflow occured. For example, --- 1310,1316 ---- To handle the problem where the N flag is set differently whenever there is an overflow we use a different CC mode, CC_NOOVmode which says that the CC reflects the comparison of the result against zero ! if no overflow occurred. For example, *************** CUMULATIVE_ARGS; *** 1734,1740 **** X = gen_rtx_LO_SUM (GET_MODE (X), \ gen_rtx_HIGH (GET_MODE (X), X), X); \ i = push_reload (XEXP (X, 0), NULL_RTX, \ ! &XEXP (X, 0), NULL_PTR, \ DP_REG, GET_MODE (X), VOIDmode, 0, 0, \ OPNUM, TYPE); \ /* The only valid reg is DP. This is a fixed reg and will \ --- 1453,1459 ---- X = gen_rtx_LO_SUM (GET_MODE (X), \ gen_rtx_HIGH (GET_MODE (X), X), X); \ i = push_reload (XEXP (X, 0), NULL_RTX, \ ! &XEXP (X, 0), NULL, \ DP_REG, GET_MODE (X), VOIDmode, 0, 0, \ OPNUM, TYPE); \ /* The only valid reg is DP. This is a fixed reg and will \ *************** CUMULATIVE_ARGS; *** 1757,1763 **** if (! TARGET_SMALL) \ { \ int i = push_reload (XEXP (X, 0), NULL_RTX, \ ! &XEXP (X, 0), NULL_PTR, \ DP_REG, GET_MODE (X), VOIDmode, 0, 0, \ OPNUM, TYPE); \ /* The only valid reg is DP. This is a fixed reg and will \ --- 1476,1482 ---- if (! TARGET_SMALL) \ { \ int i = push_reload (XEXP (X, 0), NULL_RTX, \ ! &XEXP (X, 0), NULL, \ DP_REG, GET_MODE (X), VOIDmode, 0, 0, \ OPNUM, TYPE); \ /* The only valid reg is DP. This is a fixed reg and will \ *************** if (REG_P (OP1) && ! REG_P (OP0)) \ *** 1953,1963 **** #define BRANCH_COST 8 - /* Adjust the cost of dependencies. */ - - #define ADJUST_COST(INSN,LINK,DEP,COST) \ - (COST) = c4x_adjust_cost (INSN, LINK, DEP, COST) - #define WORD_REGISTER_OPERATIONS /* Dividing the Output into Sections. */ --- 1672,1677 ---- *************** if (REG_P (OP1) && ! REG_P (OP0)) \ *** 1979,2028 **** #define FINI_SECTION_ASM_OP "\t.sect\t\".fini\"" - /* Support const sections and the ctors and dtors sections for g++. - Note that there appears to be two different ways to support const - sections at the moment. You can either #define the symbol - READONLY_DATA_SECTION (giving it some code which switches to the - readonly data section) or else you can #define the symbols - EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS, SELECT_SECTION, and - SELECT_RTX_SECTION. We do both here just to be on the safe side. */ - - /* Define a few machine-specific details of the implementation of - constructors. - - The __CTORS_LIST__ goes in the .ctors section. Define CTOR_LIST_BEGIN - and CTOR_LIST_END to contribute to the .ctors section an instruction to - push a word containing 0 (or some equivalent of that). - - Define ASM_OUTPUT_CONSTRUCTOR to push the address of the constructor. */ - - #define CTORS_SECTION_ASM_OP "\t.sect\t\".ctors\"" - #define DTORS_SECTION_ASM_OP "\t.sect\t\".dtors\"" - - /* Constructor list on stack is in reverse order. Go to the end of the - list and go backwards to call constructors in the right order. */ - - #define DO_GLOBAL_CTORS_BODY \ - do { \ - extern func_ptr __CTOR_LIST__[]; \ - func_ptr *p, *beg = __CTOR_LIST__ + 1; \ - for (p = beg; *p ; p++) ; \ - while (p != beg) \ - (*--p) (); \ - } while (0) - #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_const, in_init, in_fini, in_ctors, in_dtors #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ CONST_SECTION_FUNCTION \ INIT_SECTION_FUNCTION \ ! FINI_SECTION_FUNCTION \ ! CTORS_SECTION_FUNCTION \ ! DTORS_SECTION_FUNCTION #define INIT_SECTION_FUNCTION \ void \ init_section () \ { \ --- 1693,1709 ---- #define FINI_SECTION_ASM_OP "\t.sect\t\".fini\"" #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_const, in_init, in_fini #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ CONST_SECTION_FUNCTION \ INIT_SECTION_FUNCTION \ ! FINI_SECTION_FUNCTION #define INIT_SECTION_FUNCTION \ + extern void init_section PARAMS ((void)); \ void \ init_section () \ { \ *************** const_section () \ *** 2061,2124 **** #define ASM_STABS_OP "\t.stabs\t" ! /* The ctors and dtors sections are not normally put into use ! by EXTRA_SECTIONS and EXTRA_SECTION_FUNCTIONS as defined in svr3.h, ! but it can't hurt to define these macros for whatever systems use them. */ ! ! #define CTORS_SECTION_FUNCTION \ ! void \ ! ctors_section () \ ! { \ ! if (in_section != in_ctors) \ ! { \ ! fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP); \ ! in_section = in_ctors; \ ! } \ ! } ! ! #define DTORS_SECTION_FUNCTION \ ! void \ ! dtors_section () \ ! { \ ! if (in_section != in_dtors) \ ! { \ ! fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP); \ ! in_section = in_dtors; \ ! } \ ! } ! ! #define ASM_OUTPUT_SECTION_NAME(FILE, DECL, NAME, RELOC) \ ! fprintf (FILE, "\t.sect\t\"%s\"\n", NAME); ! ! /* This is machine-dependent because it needs to push something ! on the stack. */ ! ! /* A C statement (sans semicolon) to output an element in the table of ! global constructors. */ ! #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ ! do { \ ! ctors_section (); \ ! fprintf (FILE, "\t.word\t "); \ ! assemble_name (FILE, NAME); \ ! fprintf (FILE, "\n"); \ ! } while (0) ! ! /* A C statement (sans semicolon) to output an element in the table of ! global destructors. */ ! #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \ ! do { \ ! dtors_section (); \ ! fprintf (FILE, "\t.word\t "); \ ! assemble_name (FILE, NAME); \ ! fprintf (FILE, "\n"); \ ! } while (0) /* A C statement or statements to switch to the appropriate section for output of DECL. DECL is either a `VAR_DECL' node or a constant of some sort. RELOC indicates whether forming the initial value of DECL requires link-time relocations. */ ! #define SELECT_SECTION(DECL, RELOC) \ { \ if (TREE_CODE (DECL) == STRING_CST) \ { \ --- 1742,1756 ---- #define ASM_STABS_OP "\t.stabs\t" ! /* Switch into a generic section. */ ! #define TARGET_ASM_NAMED_SECTION c4x_asm_named_section /* A C statement or statements to switch to the appropriate section for output of DECL. DECL is either a `VAR_DECL' node or a constant of some sort. RELOC indicates whether forming the initial value of DECL requires link-time relocations. */ ! #define SELECT_SECTION(DECL, RELOC, ALIGN) \ { \ if (TREE_CODE (DECL) == STRING_CST) \ { \ *************** dtors_section () \ *** 2163,2169 **** in the case of a `const_int' rtx. Currently, these always go into the const section. */ ! #define SELECT_RTX_SECTION(MODE, RTX) const_section() /* Overall Framework of an Assembler File. */ --- 1795,1801 ---- in the case of a `const_int' rtx. Currently, these always go into the const section. */ ! #define SELECT_RTX_SECTION(MODE, RTX, ALIGN) const_section() /* Overall Framework of an Assembler File. */ *************** dtors_section () \ *** 2184,2191 **** fprintf (FILE, "\t.file\t"); \ if (TARGET_TI) \ { \ ! char *p; \ ! char *after_dir = main_input_filename; \ for (p = main_input_filename; *p; p++) \ if (*p == '/') \ after_dir = p + 1; \ --- 1816,1823 ---- fprintf (FILE, "\t.file\t"); \ if (TARGET_TI) \ { \ ! const char *p; \ ! const char *after_dir = main_input_filename; \ for (p = main_input_filename; *p; p++) \ if (*p == '/') \ after_dir = p + 1; \ *************** dtors_section () \ *** 2201,2262 **** #define ASM_APP_ON "" #define ASM_APP_OFF "" - /* Output float/double constants QFmode. */ - - #define ASM_OUTPUT_BYTE_FLOAT(FILE, VALUE) \ - do { \ - long l; \ - char str[30]; \ - REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ - REAL_VALUE_TO_DECIMAL (VALUE, "%20lf", str); \ - if (sizeof (int) == sizeof (long)) \ - fprintf (FILE, "\t.word\t0%08xh\t; %s\n", l, str);\ - else \ - fprintf (FILE, "\t.word\t0%08lxh\t; %s\n", l, str);\ - } while (0); - - /* Output long double constants HFmode. - The first word contains the exponent and first part of the mantissa - in the same manner as QFmode. The second word contains the full - mantissa. We should ensure that the two words are allocated within - the same page for the large memory model since we only output a single - LDP instruction. FIXME. The simplest solution probably is to output - a LDP for each load. */ - - #define ASM_OUTPUT_SHORT_FLOAT(FILE, VALUE) \ - do { \ - long l[2]; \ - char str[30]; \ - REAL_VALUE_TO_TARGET_DOUBLE (VALUE, l); \ - REAL_VALUE_TO_DECIMAL (VALUE, "%20lf", str); \ - l[1] = (l[0] << 8) | ((l[1] >> 24) & 0xff); \ - if (sizeof (int) == sizeof (long)) \ - fprintf (FILE, "\t.word\t0%08xh\t; %s\n\t.word\t0%08xh\n", \ - l[0], str, l[1]); \ - else \ - fprintf (FILE, "\t.word\t0%08lxh\t; %s\n\t.word\t0%08lxh\n", \ - l[0], str, l[1]); \ - } while (0); - - #define ASM_OUTPUT_CHAR(FILE, VALUE) \ - do { \ - fprintf (FILE, "\t.word\t"); \ - output_addr_const (FILE, VALUE); \ - if (GET_CODE (VALUE) != SYMBOL_REF) \ - fprintf (FILE, " ; 0%08xh\n", INTVAL (VALUE)); \ - else \ - fputc ('\n', FILE); \ - } while (0); - - #define ASM_OUTPUT_BYTE(FILE, VALUE) \ - fprintf (FILE, "\t.word\t0%xh\n", (VALUE)) - #define ASM_OUTPUT_ASCII(FILE, PTR, LEN) c4x_output_ascii (FILE, PTR, LEN) - #define ASM_OPEN_PAREN "(" - #define ASM_CLOSE_PAREN ")" - - /* Output and Generation of Labels. */ #define NO_DOT_IN_LABEL /* Only required for TI format. */ --- 1833,1840 ---- *************** do { \ *** 2440,2454 **** cpp_register_pragma (PFILE, 0, "FUNC_NO_GLOBAL_ASG", c4x_pr_ignored); \ cpp_register_pragma (PFILE, 0, "FUNC_NO_IND_ASG", c4x_pr_ignored); \ cpp_register_pragma (PFILE, 0, "INTERRUPT", c4x_pr_INTERRUPT); \ - c4x_init_pragma (&c_lex); \ } while (0) - #define SET_DEFAULT_DECL_ATTRIBUTES(DECL, ATTRIBUTES) \ - c4x_set_default_attributes (DECL, &ATTRIBUTES) - - #define VALID_MACHINE_TYPE_ATTRIBUTE(TYPE, ATTRIBUTES, NAME, ARGS) \ - (c4x_valid_type_attribute_p (TYPE, ATTRIBUTES, NAME, ARGS)) - /* Assembler Commands for Alignment. */ #define ASM_OUTPUT_SKIP(FILE, SIZE) \ --- 2018,2025 ---- *************** do { fprintf (asm_out_file, "\t.sdef\t") *** 2514,2534 **** "%s\t.val\t.%s\t.scl\t-1%s\t.endef\n", \ SDB_DELIM, SDB_DELIM, SDB_DELIM); } while (0) - - /* Define results of standard character escape sequences. */ - - #define TARGET_BELL 007 - #define TARGET_BS 010 - #define TARGET_TAB 011 - #define TARGET_NEWLINE 012 - #define TARGET_VT 013 - #define TARGET_FF 014 - #define TARGET_CR 015 - - /* This is the kind of divide that is easiest to do in the general case. */ - - #define EASY_DIV_EXPR TRUNC_DIV_EXPR - /* Define this as 1 if `char' should by default be signed; else as 0. */ #define DEFAULT_SIGNED_CHAR 1 --- 2085,2090 ---- *************** do { fprintf (asm_out_file, "\t.sdef\t") *** 2613,2644 **** tmp1 = expand_shift (RSHIFT_EXPR, QImode, FNADDR, \ size_int (16), 0, 1); \ tmp2 = expand_shift (LSHIFT_EXPR, QImode, \ ! gen_rtx (CONST_INT, VOIDmode, 0x5069), \ ! size_int (16), 0, 1); \ emit_insn (gen_iorqi3 (tmp1, tmp1, tmp2)); \ emit_move_insn (gen_rtx (MEM, QImode, \ plus_constant (tramp, 0)), tmp1); \ ! tmp1 = expand_and (FNADDR, gen_rtx (CONST_INT, VOIDmode, \ ! 0xffff), 0); \ tmp2 = expand_shift (LSHIFT_EXPR, QImode, \ ! gen_rtx (CONST_INT, VOIDmode, 0x1069), \ ! size_int (16), 0, 1); \ emit_insn (gen_iorqi3 (tmp1, tmp1, tmp2)); \ emit_move_insn (gen_rtx (MEM, QImode, \ plus_constant (tramp, 2)), tmp1); \ tmp1 = expand_shift (RSHIFT_EXPR, QImode, CXT, \ size_int (16), 0, 1); \ tmp2 = expand_shift (LSHIFT_EXPR, QImode, \ ! gen_rtx (CONST_INT, VOIDmode, 0x5068), \ ! size_int (16), 0, 1); \ emit_insn (gen_iorqi3 (tmp1, tmp1, tmp2)); \ emit_move_insn (gen_rtx (MEM, QImode, \ plus_constant (tramp, 3)), tmp1); \ ! tmp1 = expand_and (CXT, gen_rtx (CONST_INT, VOIDmode, \ ! 0xffff), 0); \ tmp2 = expand_shift (LSHIFT_EXPR, QImode, \ ! gen_rtx (CONST_INT, VOIDmode, 0x1068), \ ! size_int (16), 0, 1); \ emit_insn (gen_iorqi3 (tmp1, tmp1, tmp2)); \ emit_move_insn (gen_rtx (MEM, QImode, \ plus_constant (tramp, 6)), tmp1); \ --- 2169,2194 ---- tmp1 = expand_shift (RSHIFT_EXPR, QImode, FNADDR, \ size_int (16), 0, 1); \ tmp2 = expand_shift (LSHIFT_EXPR, QImode, \ ! GEN_INT (0x5069), size_int (16), 0, 1); \ emit_insn (gen_iorqi3 (tmp1, tmp1, tmp2)); \ emit_move_insn (gen_rtx (MEM, QImode, \ plus_constant (tramp, 0)), tmp1); \ ! tmp1 = expand_and (QImode, FNADDR, GEN_INT (0xffff), 0); \ tmp2 = expand_shift (LSHIFT_EXPR, QImode, \ ! GEN_INT (0x1069), size_int (16), 0, 1); \ emit_insn (gen_iorqi3 (tmp1, tmp1, tmp2)); \ emit_move_insn (gen_rtx (MEM, QImode, \ plus_constant (tramp, 2)), tmp1); \ tmp1 = expand_shift (RSHIFT_EXPR, QImode, CXT, \ size_int (16), 0, 1); \ tmp2 = expand_shift (LSHIFT_EXPR, QImode, \ ! GEN_INT (0x5068), size_int (16), 0, 1); \ emit_insn (gen_iorqi3 (tmp1, tmp1, tmp2)); \ emit_move_insn (gen_rtx (MEM, QImode, \ plus_constant (tramp, 3)), tmp1); \ ! tmp1 = expand_and (QImode, CXT, GEN_INT (0xffff), 0); \ tmp2 = expand_shift (LSHIFT_EXPR, QImode, \ ! GEN_INT (0x1068), size_int (16), 0, 1); \ emit_insn (gen_iorqi3 (tmp1, tmp1, tmp2)); \ emit_move_insn (gen_rtx (MEM, QImode, \ plus_constant (tramp, 6)), tmp1); \ *************** do { fprintf (asm_out_file, "\t.sdef\t") *** 2683,2690 **** #define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1 - #define DBX_REGISTER_NUMBER(REGNO) (REGNO) - /* We need to use direct addressing for large constants and addresses that cannot fit within an instruction. We must check for these after after the final jump optimisation pass, since this may --- 2233,2238 ---- *************** enum c4x_builtins *** 2765,2774 **** C4X_BUILTIN_FRIEEE, /* frieee (only C4x) */ C4X_BUILTIN_RCPF /* fast_invf (only C4x) */ }; - - #define MD_INIT_BUILTINS do { \ - c4x_init_builtins (void_list_node); \ - } while (0) - - #define MD_EXPAND_BUILTIN(EXP, TARGET, SUBTARGET, MODE, IGNORE) \ - c4x_expand_builtin ((EXP), (TARGET), (SUBTARGET), (MODE), (IGNORE)) --- 2313,2315 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/c4x/c4x.md gcc-3.1/gcc/config/c4x/c4x.md *** gcc-3.0.4/gcc/config/c4x/c4x.md Sat Feb 3 01:34:27 2001 --- gcc-3.1/gcc/config/c4x/c4x.md Thu Feb 21 21:11:06 2002 *************** *** 1,6 **** ;; Machine description for the TMS320C[34]x for GNU C compiler ;; Copyright (C) 1994, 1995, 1996, 1997, 1998, ! ;; 1999, 2000 Free Software Foundation, Inc. ;; Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz) ;; and Herman Ten Brugge (Haj.Ten.Brugge@net.HCC.nl) --- 1,6 ---- ;; Machine description for the TMS320C[34]x for GNU C compiler ;; Copyright (C) 1994, 1995, 1996, 1997, 1998, ! ;; 1999, 2000, 2002 Free Software Foundation, Inc. ;; Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz) ;; and Herman Ten Brugge (Haj.Ten.Brugge@net.HCC.nl) *************** *** 984,991 **** (set (match_dup 0) (ior:QI (match_dup 0) (match_dup 3)))] " { ! operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[1]) & ~0xffff); ! operands[3] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[1]) & 0xffff); }") (define_split --- 984,991 ---- (set (match_dup 0) (ior:QI (match_dup 0) (match_dup 3)))] " { ! operands[2] = GEN_INT (INTVAL (operands[1]) & ~0xffff); ! operands[3] = GEN_INT (INTVAL (operands[1]) & 0xffff); }") (define_split *************** *** 1000,1007 **** (set (match_dup 0) (ior:QI (match_dup 0) (match_dup 3)))] " { ! operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[1]) & ~0xffff); ! operands[3] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[1]) & 0xffff); }") (define_split --- 1000,1007 ---- (set (match_dup 0) (ior:QI (match_dup 0) (match_dup 3)))] " { ! operands[2] = GEN_INT (INTVAL (operands[1]) & ~0xffff); ! operands[3] = GEN_INT (INTVAL (operands[1]) & 0xffff); }") (define_split *************** *** 1022,1029 **** operands[2] = gen_rtx (CONST_INT, VOIDmode, (((INTVAL (operands[1]) >> 16) & 0xffff) - 0x8000) ^ ~0x7fff); ! operands[3] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[1]) & 0xffff); ! operands[4] = gen_rtx (CONST_INT, VOIDmode, 16); }") (define_split --- 1022,1029 ---- operands[2] = gen_rtx (CONST_INT, VOIDmode, (((INTVAL (operands[1]) >> 16) & 0xffff) - 0x8000) ^ ~0x7fff); ! operands[3] = GEN_INT (INTVAL (operands[1]) & 0xffff); ! operands[4] = GEN_INT (16); }") (define_split *************** *** 1043,1050 **** operands[2] = gen_rtx (CONST_INT, VOIDmode, (((INTVAL (operands[1]) >> 16) & 0xffff) - 0x8000) ^ ~0x7fff); ! operands[3] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[1]) & 0xffff); ! operands[4] = gen_rtx (CONST_INT, VOIDmode, 16); }") (define_split --- 1043,1050 ---- operands[2] = gen_rtx (CONST_INT, VOIDmode, (((INTVAL (operands[1]) >> 16) & 0xffff) - 0x8000) ^ ~0x7fff); ! operands[3] = GEN_INT (INTVAL (operands[1]) & 0xffff); ! operands[4] = GEN_INT (16); }") (define_split *************** *** 1063,1072 **** /* Generate two's complement value of MSBs. */ int shift = c4x_shiftable_constant (operands[1]); ! operands[2] = gen_rtx (CONST_INT, VOIDmode, ! (((INTVAL (operands[1]) >> shift) & 0xffff) - 0x8000) ^ ~0x7fff); ! operands[3] = gen_rtx (CONST_INT, VOIDmode, shift); }") (define_split --- 1063,1071 ---- /* Generate two's complement value of MSBs. */ int shift = c4x_shiftable_constant (operands[1]); ! operands[2] = GEN_INT ((((INTVAL (operands[1]) >> shift) & 0xffff) - 0x8000) ^ ~0x7fff); ! operands[3] = GEN_INT (shift); }") (define_split *************** *** 1084,1093 **** /* Generate two's complement value of MSBs. */ int shift = c4x_shiftable_constant (operands[1]); ! operands[2] = gen_rtx (CONST_INT, VOIDmode, ! (((INTVAL (operands[1]) >> shift) & 0xffff) ! - 0x8000) ^ ~0x7fff); ! operands[3] = gen_rtx (CONST_INT, VOIDmode, shift); }") (define_split --- 1083,1091 ---- /* Generate two's complement value of MSBs. */ int shift = c4x_shiftable_constant (operands[1]); ! operands[2] = GEN_INT ((((INTVAL (operands[1]) >> shift) & 0xffff) ! - 0x8000) ^ ~0x7fff); ! operands[3] = GEN_INT (shift); }") (define_split *************** *** 3420,3427 **** ; This can generate invalid stack slot displacements (define_split ! [(set (match_operand:QI 0 "reg_operand" "=r") ! (unspec:QI [(match_operand:QF 1 "reg_operand" "f")] 12))] "reload_completed" [(set (match_dup 3) (match_dup 1)) (set (match_dup 0) (match_dup 2))] --- 3418,3425 ---- ; This can generate invalid stack slot displacements (define_split ! [(set (match_operand:QI 0 "reg_operand" "") ! (unspec:QI [(match_operand:QF 1 "reg_operand" "")] 12))] "reload_completed" [(set (match_dup 3) (match_dup 1)) (set (match_dup 0) (match_dup 2))] *************** *** 3438,3445 **** [(set_attr "type" "multi")]) (define_split ! [(parallel [(set (match_operand:QI 0 "reg_operand" "=r") ! (unspec:QI [(match_operand:QF 1 "reg_operand" "f")] 12)) (clobber (reg:CC 21))])] "reload_completed" [(set (mem:QF (pre_inc:QI (reg:QI 20))) --- 3436,3443 ---- [(set_attr "type" "multi")]) (define_split ! [(parallel [(set (match_operand:QI 0 "reg_operand" "") ! (unspec:QI [(match_operand:QF 1 "reg_operand" "")] 12)) (clobber (reg:CC 21))])] "reload_completed" [(set (mem:QF (pre_inc:QI (reg:QI 20))) *************** *** 3473,3480 **** ; This can generate invalid stack slot displacements (define_split ! [(set (match_operand:QF 0 "reg_operand" "=f") ! (unspec:QF [(match_operand:QI 1 "reg_operand" "r")] 11))] "reload_completed" [(set (match_dup 2) (match_dup 1)) (set (match_dup 0) (match_dup 3))] --- 3471,3478 ---- ; This can generate invalid stack slot displacements (define_split ! [(set (match_operand:QF 0 "reg_operand" "") ! (unspec:QF [(match_operand:QI 1 "reg_operand" "")] 11))] "reload_completed" [(set (match_dup 2) (match_dup 1)) (set (match_dup 0) (match_dup 3))] *************** *** 3491,3498 **** [(set_attr "type" "multi")]) (define_split ! [(parallel [(set (match_operand:QF 0 "reg_operand" "=f") ! (unspec:QF [(match_operand:QI 1 "reg_operand" "r")] 11)) (clobber (reg:CC 21))])] "reload_completed" [(set (mem:QI (pre_inc:QI (reg:QI 20))) --- 3489,3496 ---- [(set_attr "type" "multi")]) (define_split ! [(parallel [(set (match_operand:QF 0 "reg_operand" "") ! (unspec:QF [(match_operand:QI 1 "reg_operand" "")] 11)) (clobber (reg:CC 21))])] "reload_completed" [(set (mem:QI (pre_inc:QI (reg:QI 20))) *************** *** 5614,5620 **** (use (label_ref (match_operand 4 "" "")))] "" "if (! TARGET_LOOP_UNSIGNED ! && (unsigned HOST_WIDE_INT) INTVAL (operands[2]) > (1U << 31)) FAIL; if (INTVAL (operands[3]) > 1 || ! TARGET_RPTB) { --- 5612,5618 ---- (use (label_ref (match_operand 4 "" "")))] "" "if (! TARGET_LOOP_UNSIGNED ! && (unsigned HOST_WIDE_INT) INTVAL (operands[2]) > ((unsigned) 1 << 31)) FAIL; if (INTVAL (operands[3]) > 1 || ! TARGET_RPTB) { *************** *** 5702,5708 **** ; BLOCK MOVE ; We should probably get RC loaded when using RPTB automagically... ; There's probably no need to call _memcpy() if we don't get ! ; a immediate operand for the size. We could do a better job here ; than most memcpy() implementations. ; operand 2 is the number of bytes ; operand 3 is the shared alignment --- 5700,5706 ---- ; BLOCK MOVE ; We should probably get RC loaded when using RPTB automagically... ; There's probably no need to call _memcpy() if we don't get ! ; an immediate operand for the size. We could do a better job here ; than most memcpy() implementations. ; operand 2 is the number of bytes ; operand 3 is the shared alignment *************** *** 6428,6435 **** [(set_attr "type" "multi")]) (define_split ! [(set (match_operand:HI 0 "reg_operand" "=?dc") ! (sign_extend:HI (match_operand:QI 1 "src_operand" "rIm"))) (clobber (reg:CC 21))] "reload_completed && TARGET_C3X" [(set (match_dup 2) (match_dup 1)) --- 6426,6433 ---- [(set_attr "type" "multi")]) (define_split ! [(set (match_operand:HI 0 "reg_operand" "") ! (sign_extend:HI (match_operand:QI 1 "src_operand" ""))) (clobber (reg:CC 21))] "reload_completed && TARGET_C3X" [(set (match_dup 2) (match_dup 1)) *************** *** 6440,6447 **** operands[3] = c4x_operand_subword (operands[0], 1, 0, HImode);") (define_split ! [(set (match_operand:HI 0 "reg_operand" "=?dc") ! (sign_extend:HI (match_operand:QI 1 "src_operand" "rIm"))) (clobber (reg:CC 21))] "reload_completed && ! TARGET_C3X" [(set (match_dup 2) (match_dup 1)) --- 6438,6445 ---- operands[3] = c4x_operand_subword (operands[0], 1, 0, HImode);") (define_split ! [(set (match_operand:HI 0 "reg_operand" "") ! (sign_extend:HI (match_operand:QI 1 "src_operand" ""))) (clobber (reg:CC 21))] "reload_completed && ! TARGET_C3X" [(set (match_dup 2) (match_dup 1)) *************** *** 6461,6468 **** ; If operand0 and operand1 are the same register we don't need ; the first set. (define_split ! [(set (match_operand:HI 0 "reg_operand" "=?dc") ! (zero_extend:HI (match_operand:QI 1 "src_operand" "rIm"))) (clobber (reg:CC 21))] "reload_completed" [(set (match_dup 2) (match_dup 1)) --- 6459,6466 ---- ; If operand0 and operand1 are the same register we don't need ; the first set. (define_split ! [(set (match_operand:HI 0 "reg_operand" "") ! (zero_extend:HI (match_operand:QI 1 "src_operand" ""))) (clobber (reg:CC 21))] "reload_completed" [(set (match_dup 2) (match_dup 1)) diff -Nrc3pad gcc-3.0.4/gcc/config/c4x/libgcc.S gcc-3.1/gcc/config/c4x/libgcc.S *** gcc-3.0.4/gcc/config/c4x/libgcc.S Sun Jul 30 08:12:12 2000 --- gcc-3.1/gcc/config/c4x/libgcc.S Sun Dec 9 20:13:07 2001 *************** *** 1,4 **** ! /* libgcc1 routines for the Texas Instruments TMS320C[34]x Copyright (C) 1997,98, 1999 Free Software Foundation, Inc. Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz) --- 1,4 ---- ! /* libgcc routines for the Texas Instruments TMS320C[34]x Copyright (C) 1997,98, 1999 Free Software Foundation, Inc. Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz) *************** mod3: *** 1021,1027 **** #endif ; ! ; double to signed long long converion ; input in r2 ; result in r0,r1 ; --- 1021,1027 ---- #endif ; ! ; double to signed long long conversion ; input in r2 ; result in r0,r1 ; *************** ___fix_truncqfhi2: *** 1049,1055 **** #endif ; ! ; double to unsigned long long converion ; input in r2 ; result in r0,r1 ; --- 1049,1055 ---- #endif ; ! ; double to unsigned long long conversion ; input in r2 ; result in r0,r1 ; *************** ufix1: *** 1095,1101 **** #endif ; ! ; signed long long to double converion ; input on stack ; result in r0 ; --- 1095,1101 ---- #endif ; ! ; signed long long to double conversion ; input on stack ; result in r0 ; *************** ___floathiqf2: *** 1116,1122 **** #endif ; ! ; unsigned long long to double converion ; input on stack ; result in r0 ; --- 1116,1122 ---- #endif ; ! ; unsigned long long to double conversion ; input on stack ; result in r0 ; *************** uflt2: *** 1166,1172 **** #endif ; ! ; long double to signed long long converion ; input in r2 ; result in r0,r1 ; --- 1166,1172 ---- #endif ; ! ; long double to signed long long conversion ; input in r2 ; result in r0,r1 ; *************** ___fix_trunchfhi2: *** 1195,1201 **** #endif ; ! ; long double to unsigned long long converion ; input in r2 ; result in r0,r1 ; --- 1195,1201 ---- #endif ; ! ; long double to unsigned long long conversion ; input in r2 ; result in r0,r1 ; *************** ufixh1: *** 1242,1248 **** #endif ; ! ; signed long long to long double converion ; input on stack ; result in r0 ; --- 1242,1248 ---- #endif ; ! ; signed long long to long double conversion ; input on stack ; result in r0 ; *************** ___floathihf2: *** 1263,1269 **** #endif ; ! ; unsigned long long to double converion ; input on stack ; result in r0 ; --- 1263,1269 ---- #endif ; ! ; unsigned long long to double conversion ; input on stack ; result in r0 ; diff -Nrc3pad gcc-3.0.4/gcc/config/c4x/rtems.h gcc-3.1/gcc/config/c4x/rtems.h *** gcc-3.0.4/gcc/config/c4x/rtems.h Fri Feb 15 14:42:56 2002 --- gcc-3.1/gcc/config/c4x/rtems.h Fri Apr 12 13:09:24 2002 *************** along with GNU CC; see the file COPYING. *** 19,37 **** the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - #include "c4x/c4x.h" - /* Specify predefined symbols in preprocessor. */ #undef CPP_PREDEFINES #define CPP_PREDEFINES "-D__rtems__ -Asystem=rtems -D__USE_INIT_FINI__" - - /* Generate calls to memcpy, memcmp and memset. */ - #ifndef TARGET_MEM_FUNCTIONS - #define TARGET_MEM_FUNCTIONS - #endif - - /* Include machine independent RTEMS configuration parameters. */ - #include - - /* End of c4x/rtems.h. */ --- 19,25 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/c4x/t-c4x gcc-3.1/gcc/config/c4x/t-c4x *** gcc-3.0.4/gcc/config/c4x/t-c4x Sat Jan 29 02:50:17 2000 --- gcc-3.1/gcc/config/c4x/t-c4x Wed Oct 17 20:39:12 2001 *************** *** 1,4 **** - CROSS_LIBGCC1 = libgcc1-asm.a LIB1ASMSRC = c4x/libgcc.S LIB1ASMFUNCS = _divsf3 _divsi3 _udivsi3 _umodsi3 _modsi3 _mulsi3 \ _muldf3 _divdf3 _unsfltconst _unsfltcompare \ --- 1,3 ---- *************** LIB1ASMFUNCS = _divsf3 _divsi3 _udivsi3 *** 8,13 **** --- 7,16 ---- TARGET_LIBGCC2_CFLAGS = -Dexit=unused_exit + c4x-c.o: $(srcdir)/config/c4x/c4x-c.c $(srcdir)/config/c4x/c4x-protos.h \ + $(CONFIG_H) $(SYSTEM_H) cpplib.h $(TREE_H) c-pragma.h c-lex.h toplev.h + $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< + MULTILIB_OPTIONS = m30 msmall mmemparm MULTILIB_DIRNAMES = c3x small mem MULTILIB_MATCHES = m30=mcpu?30 m30=mcpu?31 m30=mcpu?32 m30=m31 m30=m32 *************** MULTILIB_EXCEPTIONS = *** 15,20 **** MULTILIB_EXTRA_OPTS = LIBGCC = stmp-multilib INSTALL_LIBGCC = install-multilib - - # Don't make libgcc1-test since require crt0.o - LIBGCC1_TEST = --- 18,20 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/c4x/xm-c4x.h gcc-3.1/gcc/config/c4x/xm-c4x.h *** gcc-3.0.4/gcc/config/c4x/xm-c4x.h Thu Mar 15 19:02:01 2001 --- gcc-3.1/gcc/config/c4x/xm-c4x.h Thu Jan 1 00:00:00 1970 *************** *** 1,16 **** - /* This describes the machine the compiler is hosted on. */ - #define HOST_BITS_PER_CHAR 32 - #define HOST_BITS_PER_SHORT 32 - #define HOST_BITS_PER_INT 32 - #define HOST_BITS_PER_LONG 32 - #define HOST_BITS_PER_LONGLONG 64 - - #define HOST_WORDS_BIG_ENDIAN - - /* target machine dependencies. - tm.h is a symbolic link to the actual target specific file. */ - #include "tm.h" - - /* Arguments to use with `exit'. */ - #define SUCCESS_EXIT_CODE 0 - #define FATAL_EXIT_CODE 33 --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/chorus.h gcc-3.1/gcc/config/chorus.h *** gcc-3.0.4/gcc/config/chorus.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/chorus.h Tue Jul 17 21:53:11 2001 *************** *** 0 **** --- 1,42 ---- + /* Definitions of target machine for GNU compiler. + Sun Chorus OS big-endian + Copyright (c) 2001 Free Software Foundation, Inc. + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GNU CC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU CC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + #undef DWARF2_DEBUGGING_INFO + #define DWARF2_DEBUGGING_INFO + + #undef PREFERRED_DEBUGGING_TYPE + #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG + + #undef TARGET_VERSION + #define TARGET_VERSION fprintf (stderr, " (Sun Chorus OS Embedded)"); + + #undef SIZE_TYPE + #define SIZE_TYPE "unsigned int" + + #undef PTRDIFF_TYPE + #define PTRDIFF_TYPE "int" + + /* Type used for wchar_t, as a string used in a declaration. */ + #undef WCHAR_TYPE + #define WCHAR_TYPE "int" + + #undef LINK_SPEC + #define LINK_SPEC "" diff -Nrc3pad gcc-3.0.4/gcc/config/clipper/clipper-protos.h gcc-3.1/gcc/config/clipper/clipper-protos.h *** gcc-3.0.4/gcc/config/clipper/clipper-protos.h Thu Jan 13 17:48:08 2000 --- gcc-3.1/gcc/config/clipper/clipper-protos.h Fri Jul 6 18:40:03 2001 *************** extern int fp_reg_operand PARAMS ((rtx, *** 33,40 **** extern struct rtx_def *clipper_builtin_saveregs PARAMS ((void)); extern int clipper_frame_size PARAMS ((int)); - extern void output_function_prologue PARAMS ((FILE *, int)); - extern void output_function_epilogue PARAMS ((FILE *, int)); #ifdef TREE_CODE extern tree clipper_build_va_list PARAMS ((void)); #endif /* TREE_CODE */ --- 33,38 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/clipper/clipper.c gcc-3.1/gcc/config/clipper/clipper.c *** gcc-3.0.4/gcc/config/clipper/clipper.c Sat May 12 20:32:41 2001 --- gcc-3.1/gcc/config/clipper/clipper.c Mon Dec 17 15:05:27 2001 *************** *** 1,6 **** /* Subroutines for insn-output.c for Clipper ! Copyright (C) 1987, 1988, 1991, 1997, 1998, ! 1999, 2000 Free Software Foundation, Inc. Contributed by Holger Teutsch (holger@hotbso.rhein-main.de) This file is part of GNU CC. --- 1,6 ---- /* Subroutines for insn-output.c for Clipper ! Copyright (C) 1987, 1988, 1991, 1997, 1998, 1999, 2000, 2001 ! Free Software Foundation, Inc. Contributed by Holger Teutsch (holger@hotbso.rhein-main.de) This file is part of GNU CC. *************** Boston, MA 02111-1307, USA. */ *** 31,49 **** #include "output.h" #include "insn-attr.h" #include "tree.h" #include "c-tree.h" #include "function.h" - #include "expr.h" #include "flags.h" #include "recog.h" #include "tm_p.h" extern char regs_ever_live[]; extern int frame_pointer_needed; static int frame_size; /* Compute size of a clipper stack frame where 'lsize' is the required space for local variables. */ --- 31,69 ---- #include "output.h" #include "insn-attr.h" #include "tree.h" + #include "expr.h" + #include "optabs.h" + #include "libfuncs.h" #include "c-tree.h" #include "function.h" #include "flags.h" #include "recog.h" #include "tm_p.h" + #include "target.h" + #include "target-def.h" + + static void clipper_output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT)); + static void clipper_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT)); + static void clix_asm_out_constructor PARAMS ((rtx, int)); + static void clix_asm_out_destructor PARAMS ((rtx, int)); extern char regs_ever_live[]; extern int frame_pointer_needed; static int frame_size; + + /* Initialize the GCC target structure. */ + #undef TARGET_ASM_ALIGNED_HI_OP + #define TARGET_ASM_ALIGNED_HI_OP "\t.word\t" + #undef TARGET_ASM_FUNCTION_PROLOGUE + #define TARGET_ASM_FUNCTION_PROLOGUE clipper_output_function_prologue + #undef TARGET_ASM_FUNCTION_EPILOGUE + #define TARGET_ASM_FUNCTION_EPILOGUE clipper_output_function_epilogue + + struct gcc_target targetm = TARGET_INITIALIZER; + /* Compute size of a clipper stack frame where 'lsize' is the required space for local variables. */ *************** clipper_frame_size (lsize) *** 78,87 **** can run with misaligned stack -> subq $4,sp / add $4,sp on entry and exit can be omitted. */ ! void ! output_function_prologue (file, lsize) FILE *file; ! int lsize; /* size for locals */ { int i, offset; int size; --- 98,107 ---- can run with misaligned stack -> subq $4,sp / add $4,sp on entry and exit can be omitted. */ ! static void ! clipper_output_function_prologue (file, lsize) FILE *file; ! HOST_WIDE_INT lsize; /* size for locals */ { int i, offset; int size; *************** output_function_prologue (file, lsize) *** 132,141 **** } } ! void ! output_function_epilogue (file, size) FILE *file; ! int size ATTRIBUTE_UNUSED; { int i, offset; --- 152,161 ---- } } ! static void ! clipper_output_function_epilogue (file, size) FILE *file; ! HOST_WIDE_INT size ATTRIBUTE_UNUSED; { int i, offset; *************** void *** 206,212 **** clipper_movstr (operands) rtx *operands; { ! rtx dst,src,cnt,tmp,top,bottom,xops[3]; int align; int fixed; --- 226,232 ---- clipper_movstr (operands) rtx *operands; { ! rtx dst,src,cnt,tmp,top,bottom=NULL_RTX,xops[3]; int align; int fixed; *************** clipper_builtin_saveregs () *** 389,439 **** /* Store int regs */ mem = gen_rtx_MEM (SImode, r0_addr); ! MEM_ALIAS_SET (mem) = set; emit_move_insn (mem, gen_rtx_REG (SImode, 0)); mem = gen_rtx_MEM (SImode, r1_addr); ! MEM_ALIAS_SET (mem) = set; emit_move_insn (mem, gen_rtx_REG (SImode, 1)); /* Store float regs */ mem = gen_rtx_MEM (DFmode, f0_addr); ! MEM_ALIAS_SET (mem) = set; emit_move_insn (mem, gen_rtx_REG (DFmode, 16)); mem = gen_rtx_MEM (DFmode, f1_addr); ! MEM_ALIAS_SET (mem) = set; emit_move_insn (mem, gen_rtx_REG (DFmode, 17)); - if (current_function_check_memory_usage) - { - emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3, - f0_addr, ptr_mode, - GEN_INT (GET_MODE_SIZE (DFmode)), - TYPE_MODE (sizetype), - GEN_INT (MEMORY_USE_RW), - TYPE_MODE (integer_type_node)); - emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3, - f1_addr, ptr_mode, - GEN_INT (GET_MODE_SIZE (DFmode)), - TYPE_MODE (sizetype), - GEN_INT (MEMORY_USE_RW), - TYPE_MODE (integer_type_node)); - emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3, - r0_addr, ptr_mode, - GEN_INT (GET_MODE_SIZE (SImode)), - TYPE_MODE (sizetype), - GEN_INT (MEMORY_USE_RW), - TYPE_MODE (integer_type_node)); - emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3, - r1_addr, ptr_mode, - GEN_INT (GET_MODE_SIZE (SImode)), - TYPE_MODE (sizetype), - GEN_INT (MEMORY_USE_RW), - TYPE_MODE (integer_type_node)); - } - return addr; } --- 409,431 ---- /* Store int regs */ mem = gen_rtx_MEM (SImode, r0_addr); ! set_mem_alias_set (mem, set); emit_move_insn (mem, gen_rtx_REG (SImode, 0)); mem = gen_rtx_MEM (SImode, r1_addr); ! set_mem_alias_set (mem, set); emit_move_insn (mem, gen_rtx_REG (SImode, 1)); /* Store float regs */ mem = gen_rtx_MEM (DFmode, f0_addr); ! set_mem_alias_set (mem, set); emit_move_insn (mem, gen_rtx_REG (DFmode, 16)); mem = gen_rtx_MEM (DFmode, f1_addr); ! set_mem_alias_set (mem, set); emit_move_insn (mem, gen_rtx_REG (DFmode, 17)); return addr; } *************** clipper_va_arg (valist, type) *** 599,605 **** OPTAB_LIB_WIDEN), GEN_INT (2), GE, const0_rtx, TYPE_MODE (TREE_TYPE (num_field)), ! TREE_UNSIGNED (num_field), 0, false_label); inreg = fold (build (MULT_EXPR, integer_type_node, num_field, build_int_2 (2, 0))); --- 591,597 ---- OPTAB_LIB_WIDEN), GEN_INT (2), GE, const0_rtx, TYPE_MODE (TREE_TYPE (num_field)), ! TREE_UNSIGNED (num_field), false_label); inreg = fold (build (MULT_EXPR, integer_type_node, num_field, build_int_2 (2, 0))); *************** fp_reg_operand (op, mode) *** 678,680 **** --- 670,692 ---- GET_MODE_CLASS (GET_MODE (SUBREG_REG (op))) == MODE_FLOAT)); } + static void + clix_asm_out_constructor (symbol, priority) + rtx symbol; + int priority ATTRIBUTE_UNUSED; + { + init_section (); + fputs ("\tloada ", asm_out_file); + assemble_name (asm_out_file, XSTR (symbol, 0)); + fputs (",r0\n\tsubq $8,sp\n\tstorw r0,(sp)\n", asm_out_file); + } + + static void + clix_asm_out_destructor (symbol, priority) + rtx symbol; + int priority ATTRIBUTE_UNUSED; + { + fini_section (); + assemble_integer (symbol, POINTER_SIZE / BITS_PER_UNIT, POINTER_SIZE, 1); + assemble_integer (const0_rtx, POINTER_SIZE / BITS_PER_UNIT, POINTER_SIZE, 1); + } diff -Nrc3pad gcc-3.0.4/gcc/config/clipper/clipper.h gcc-3.1/gcc/config/clipper/clipper.h *** gcc-3.0.4/gcc/config/clipper/clipper.h Mon Sep 25 08:54:41 2000 --- gcc-3.1/gcc/config/clipper/clipper.h Wed Jan 16 02:37:19 2002 *************** *** 1,6 **** /* Definitions of target machine for GNU compiler. Clipper version. Copyright (C) 1987, 1988, 1991, 1993, 1994, 1995, 1996, 1998, ! 1999, 2000 Free Software Foundation, Inc. Contributed by Holger Teutsch (holger@hotbso.rhein-main.de) This file is part of GNU CC. --- 1,6 ---- /* Definitions of target machine for GNU compiler. Clipper version. Copyright (C) 1987, 1988, 1991, 1993, 1994, 1995, 1996, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Holger Teutsch (holger@hotbso.rhein-main.de) This file is part of GNU CC. *************** enum reg_class { NO_REGS, GENERAL_REGS, *** 338,347 **** makes the stack pointer a smaller address. */ #define STACK_GROWS_DOWNWARD - /* Define this if longjmp restores from saved registers - rather than from what setjmp saved. */ - /* #define LONGJMP_RESTORE_FROM_STACK */ - /* Define this if the nominal address of the stack frame is at the high-address end of the local variables; that is, each additional local variable allocated --- 338,343 ---- *************** do \ *** 550,565 **** #define EXPAND_BUILTIN_SAVEREGS() clipper_builtin_saveregs () - /* This macro generates the assembly code for function entry. - FILE is a stdio stream to output the code to. - SIZE is an int: how many units of temporary storage to allocate. - Refer to the array `regs_ever_live' to determine which registers - to save; `regs_ever_live[I]' is nonzero if register number I - is ever used in the function. This macro is responsible for - knowing which registers should not be saved even if used. */ - - #define FUNCTION_PROLOGUE(FILE, SIZE) output_function_prologue (FILE,SIZE) - /* Output assembler code to FILE to increment profiler label # LABELNO for profiling a function entry. */ --- 546,551 ---- *************** do \ *** 582,594 **** #define EXIT_IGNORE_STACK 1 - /* This macro generates the assembly code for function exit, - on machines that need it. If FUNCTION_EPILOGUE is not defined - then individual return instructions are generated for each - return statement. Args are same as for FUNCTION_PROLOGUE. */ - - #define FUNCTION_EPILOGUE(FILE, SIZE) output_function_epilogue(FILE,SIZE) - /* Store in the variable DEPTH the initial difference between the frame pointer reg contents and the stack pointer reg contents, as of the start of the function body. This depends on the layout --- 568,573 ---- *************** do \ *** 797,808 **** done, NIL if none. */ #define LOAD_EXTEND_OP(MODE) SIGN_EXTEND - /* Specify the tree operation to be used to convert reals to integers. */ - #define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR - - /* This is the kind of divide that is easiest to do in the general case. */ - #define EASY_DIV_EXPR TRUNC_DIV_EXPR - /* Define this as 1 if `char' should by default be signed; else as 0. */ #define DEFAULT_SIGNED_CHAR 1 --- 776,781 ---- *************** do \ *** 823,831 **** #define MOVE_RATIO 20 - /* Define this if zero-extension is slow (more than one real instruction). */ - /* #define SLOW_ZERO_EXTEND */ - /* Nonzero if access to memory by bytes is slow and undesirable. */ #define SLOW_BYTE_ACCESS 0 --- 796,801 ---- *************** do \ *** 984,995 **** "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", \ "f9", "f10", "f11", "f12", "f13", "f14", "f15" } - /* How to renumber registers for dbx and gdb. - Clipper needs no change in the numeration. */ - - #define DBX_REGISTER_NUMBER(REGNO) (REGNO) - - /* This is how to output the definition of a user-level label named NAME, such as the label on a static function or variable NAME. */ --- 954,959 ---- *************** do \ *** 1002,1031 **** #define ASM_GLOBALIZE_LABEL(FILE,NAME) \ do { fputs (".globl ", FILE); assemble_name (FILE, NAME); fputs ("\n", FILE);} while (0) - /* This is how to output an assembler line defining an `int' constant. */ - - #define ASM_OUTPUT_INT(FILE,VALUE) \ - ( fprintf (FILE, "\t.long "), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "\n")) - - /* Likewise for `char' and `short' constants. */ - - #define ASM_OUTPUT_SHORT(FILE,VALUE) \ - ( fprintf (FILE, "\t.word "), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "\n")) - - #define ASM_OUTPUT_CHAR(FILE,VALUE) \ - ( fprintf (FILE, "\t.byte "), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "\n")) - - /* This is how to output an assembler line for a numeric constant byte. */ - - #define ASM_OUTPUT_BYTE(FILE,VALUE) \ - fprintf (FILE, "\t.byte 0x%x\n", (VALUE)) - /* This is how to output an insn to push a register on the stack. It need not be very fast code. */ --- 966,971 ---- *************** do \ *** 1037,1043 **** It need not be very fast code. */ #define ASM_OUTPUT_REG_POP(FILE,REGNO) \ ! fprintf (FILE, "\t%s (sp),%s\n\t\addq $8,sp\n", \ (REGNO) < 16 ? "loadw" : "loadd", reg_names[REGNO]) /* This is how to output an element of a case-vector that is absolute */ --- 977,983 ---- It need not be very fast code. */ #define ASM_OUTPUT_REG_POP(FILE,REGNO) \ ! fprintf (FILE, "\t%s (sp),%s\n\taddq $8,sp\n", \ (REGNO) < 16 ? "loadw" : "loadd", reg_names[REGNO]) /* This is how to output an element of a case-vector that is absolute */ *************** do \ *** 1073,1093 **** ( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 10), \ sprintf ((OUTPUT), "%s.%d", (NAME), (LABELNO))) - /* Define the parentheses used to group arithmetic operations - in assembler code. */ - - #define ASM_OPEN_PAREN "(" - #define ASM_CLOSE_PAREN ")" - - /* Define results of standard character escape sequences. */ - #define TARGET_BELL 007 - #define TARGET_BS 010 - #define TARGET_TAB 011 - #define TARGET_NEWLINE 012 - #define TARGET_VT 013 - #define TARGET_FF 014 - #define TARGET_CR 015 - /* Print an instruction operand X on file FILE. CODE is the code from the %-spec that requested printing this operand; if `%z3' was used to print operand 3, then CODE is 'z'. --- 1013,1018 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/clipper/clipper.md gcc-3.1/gcc/config/clipper/clipper.md *** gcc-3.0.4/gcc/config/clipper/clipper.md Tue Aug 8 22:40:49 2000 --- gcc-3.1/gcc/config/clipper/clipper.md Sun Nov 4 02:12:08 2001 *************** *** 1,5 **** ;;- Machine description for GNU compiler, Clipper Version ! ;; Copyright (C) 1987, 88, 91, 93, 94, 97, 98, 1999 ;; Free Software Foundation, Inc. ;; Contributed by Holger Teutsch (holger@hotbso.rhein-main.de) --- 1,5 ---- ;;- Machine description for GNU compiler, Clipper Version ! ;; Copyright (C) 1987, 1988, 1991, 1993, 1994, 1997, 1998, 1999, 2001 ;; Free Software Foundation, Inc. ;; Contributed by Holger Teutsch (holger@hotbso.rhein-main.de) *************** *** 181,187 **** xops[0] = operands[0]; xops[1] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1); xops[2] = operands[1]; ! xops[3] = adj_offsettable_operand (operands[1], 4); output_asm_insn (\"loadw %2,%0\;loadw %3,%1\", xops); return \"\"; } --- 181,187 ---- xops[0] = operands[0]; xops[1] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1); xops[2] = operands[1]; ! xops[3] = adjust_address (operands[1], SImode, 4); output_asm_insn (\"loadw %2,%0\;loadw %3,%1\", xops); return \"\"; } *************** *** 214,220 **** return \"stord %1,%0\"; xops[0] = operands[0]; /* r -> o */ ! xops[1] = adj_offsettable_operand (operands[0], 4); xops[2] = operands[1]; xops[3] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1); output_asm_insn (\"storw %2,%0\;storw %3,%1\", xops); --- 214,220 ---- return \"stord %1,%0\"; xops[0] = operands[0]; /* r -> o */ ! xops[1] = adjust_address (operands[0], SImode, 4); xops[2] = operands[1]; xops[3] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1); output_asm_insn (\"storw %2,%0\;storw %3,%1\", xops); *************** *** 350,356 **** } /* m -> r */ output_asm_insn (\"loadw %1,%0\", operands); ! xoperands[1] = adj_offsettable_operand (operands[1], 4); output_asm_insn (\"loadw %1,%0\", xoperands); return \"\"; }" --- 350,356 ---- } /* m -> r */ output_asm_insn (\"loadw %1,%0\", operands); ! xoperands[1] = adjust_address (operands[1], SImode, 4); output_asm_insn (\"loadw %1,%0\", xoperands); return \"\"; }" *************** *** 365,371 **** { rtx xops[4]; xops[0] = operands[0]; ! xops[1] = adj_offsettable_operand (operands[0], 4); xops[2] = operands[1]; xops[3] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1); output_asm_insn (\"storw %2,%0\;storw %3,%1\", xops); --- 365,371 ---- { rtx xops[4]; xops[0] = operands[0]; ! xops[1] = adjust_address (operands[0], SImode, 4); xops[2] = operands[1]; xops[3] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1); output_asm_insn (\"storw %2,%0\;storw %3,%1\", xops); *************** *** 531,538 **** operands[6] = addr0; operands[7] = addr1; ! operands[0] = change_address (operands[0], VOIDmode, addr0); ! operands[1] = change_address (operands[1], VOIDmode, addr1); if (GET_CODE (operands[2]) != CONST_INT) operands[2] = force_reg (SImode, operands[2]); --- 531,538 ---- operands[6] = addr0; operands[7] = addr1; ! operands[0] = replace_equiv_address (operands[0], addr0); ! operands[1] = replace_equiv_address (operands[1], addr1); if (GET_CODE (operands[2]) != CONST_INT) operands[2] = force_reg (SImode, operands[2]); *************** *** 555,561 **** "" "* { - extern void clipper_movstr (); clipper_movstr (operands); return \"\"; }" --- 555,560 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/clipper/clix.h gcc-3.1/gcc/config/clipper/clix.h *** gcc-3.0.4/gcc/config/clipper/clix.h Thu Nov 2 23:29:08 2000 --- gcc-3.1/gcc/config/clipper/clix.h Thu Dec 20 17:36:33 2001 *************** Boston, MA 02111-1307, USA. */ *** 35,43 **** #define ASM_OUTPUT_ASCII(FILE,PTR,LEN) \ do { \ ! const unsigned char *s; \ ! int i; \ ! for (i = 0, s = (const unsigned char *)(PTR); i < (LEN); s++, i++) \ { \ if ((i % 8) == 0) \ fputs ("\n\t.byte\t", (FILE)); \ --- 35,43 ---- #define ASM_OUTPUT_ASCII(FILE,PTR,LEN) \ do { \ ! const unsigned char *s = (const unsigned char *)(PTR);\ ! size_t i, limit = (LEN); \ ! for (i = 0; i < limit; s++, i++) \ { \ if ((i % 8) == 0) \ fputs ("\n\t.byte\t", (FILE)); \ *************** do { \ *** 46,67 **** fputs ("\n", (FILE)); \ } while (0) - #undef ASM_OUTPUT_DOUBLE - #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - { \ - union { int i[2]; double d; } _d_; \ - _d_.d = VALUE; \ - fprintf (FILE, "\t.long 0x%08x,0x%08x\n", _d_.i[0],_d_.i[1]); \ - } - - #undef ASM_OUTPUT_FLOAT - #define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - { \ - union { int i; float f; } _f_; \ - _f_.f = VALUE; \ - fprintf (FILE, "\t.long 0x%08x\n", _f_.i); \ - } - /* This is how to output an assembler line that says to advance the location counter to a multiple of 2**LOG bytes. */ --- 46,51 ---- *************** do { \ *** 70,76 **** fprintf(FILE, "\t.align %d\n", 1 << (LOG)) - #define ASM_LONG ".long" #define BSS_SECTION_ASM_OP "\t.bss" #undef INIT_SECTION_ASM_OP #define INIT_SECTION_ASM_OP "\t.section .init,\"x\"" --- 54,59 ---- *************** do { \ *** 83,89 **** and CTOR_LIST_END to contribute to the .init section an instruction to push a word containing 0 (or some equivalent of that). ! ASM_OUTPUT_CONSTRUCTOR should be defined to push the address of the constructor. */ #define CTOR_LIST_BEGIN \ --- 66,72 ---- and CTOR_LIST_END to contribute to the .init section an instruction to push a word containing 0 (or some equivalent of that). ! TARGET_ASM_CONSTRUCTOR should be defined to push the address of the constructor. */ #define CTOR_LIST_BEGIN \ *************** do { \ *** 96,128 **** #undef CTOR_LIST_END - #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ - do { \ - init_section (); \ - fputs ("\tloada ", FILE); \ - assemble_name (FILE, NAME); \ - fputs (",r0\n\tsubq $8,sp\n\tstorw r0,(sp)\n", FILE); \ - } while (0) - - /* fini psect is 8 aligned */ #define DTOR_LIST_BEGIN \ asm (DTORS_SECTION_ASM_OP); \ func_ptr __DTOR_LIST__[2] = { (func_ptr) (-1), 0 }; ! /* A C statement (sans semicolon) to output an element in the table of ! global destructors. */ ! ! #undef ASM_OUTPUT_DESTRUCTOR ! #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \ ! do { \ ! fini_section (); \ ! fprintf (FILE, "%s\t ", ASM_LONG); \ ! assemble_name (FILE, NAME); \ ! fprintf (FILE, ",0\n"); \ ! } while (0) ! /* On clix crt1.o first calls init code and then sets environ and a valid chrclass. Unfortunately stdio routines bomb with unset chrclass. --- 79,94 ---- #undef CTOR_LIST_END /* fini psect is 8 aligned */ #define DTOR_LIST_BEGIN \ asm (DTORS_SECTION_ASM_OP); \ func_ptr __DTOR_LIST__[2] = { (func_ptr) (-1), 0 }; ! #undef TARGET_ASM_CONSTRUCTOR ! #define TARGET_ASM_CONSTRUCTOR clix_asm_out_constructor ! #undef TARGET_ASM_DESTRUCTOR ! #define TARGET_ASM_DESTRUCTOR clix_asm_out_destructor /* On clix crt1.o first calls init code and then sets environ and a valid chrclass. Unfortunately stdio routines bomb with unset chrclass. diff -Nrc3pad gcc-3.0.4/gcc/config/clipper/x-clix gcc-3.1/gcc/config/clipper/x-clix *** gcc-3.0.4/gcc/config/clipper/x-clix Wed Dec 16 21:02:22 1998 --- gcc-3.1/gcc/config/clipper/x-clix Thu Jan 1 00:00:00 1970 *************** *** 1 **** - ALLOCA = alloca.o --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/clipper/xm-clix.h gcc-3.1/gcc/config/clipper/xm-clix.h *** gcc-3.0.4/gcc/config/clipper/xm-clix.h Thu Mar 15 19:02:02 2001 --- gcc-3.1/gcc/config/clipper/xm-clix.h Thu Jan 1 00:00:00 1970 *************** *** 1,26 **** - /* Config file for Clipper running Clix, system V. 3.2 clone */ - - - /* target machine dependencies. - tm.h is a symbolic link to the actual target specific file. */ - - #include "tm.h" - - /* This describes the machine the compiler is hosted on. */ - #define HOST_BITS_PER_CHAR 8 - #define HOST_BITS_PER_SHORT 16 - #define HOST_BITS_PER_INT 32 - #define HOST_BITS_PER_LONG 32 - #define HOST_BITS_PER_LONGLONG 64 - - /* This machine uses IEEE floats. */ - /* #define HOST_FLOAT_FORMAT IEEE_FLOAT_FORMAT */ - - /* Arguments to use with `exit'. */ - #define SUCCESS_EXIT_CODE 0 - #define FATAL_EXIT_CODE 33 - - /* isinf isn't there, but finite is. */ - #define isinf(x) (!finite(x)) - - #define USG --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/convex/convex.c gcc-3.1/gcc/config/convex/convex.c *** gcc-3.0.4/gcc/config/convex/convex.c Sat May 12 20:32:41 2001 --- gcc-3.1/gcc/config/convex/convex.c Mon Dec 17 15:05:28 2001 *************** *** 1,6 **** /* Subroutines for insn-output.c for Convex. ! Copyright (C) 1988, 1993, 1994, 1997, 1998, ! 1999, 2000 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,6 ---- /* Subroutines for insn-output.c for Convex. ! Copyright (C) 1988, 1993, 1994, 1997, 1998, 1999, 2000, 2001 ! Free Software Foundation, Inc. This file is part of GNU CC. *************** Boston, MA 02111-1307, USA. */ *** 33,38 **** --- 33,40 ---- #include "function.h" #include "expr.h" #include "tm_p.h" + #include "target.h" + #include "target-def.h" /* Tables used in convex.h */ *************** char regno_ok_for_index_p_base[1 + LAST_ *** 40,55 **** enum reg_class regno_reg_class[FIRST_PSEUDO_REGISTER]; enum reg_class reg_class_from_letter[256]; ! /* Target cpu index. */ int target_cpu; /* Boolean to keep track of whether the current section is .text or not. ! Used by .align handler in convex.h. */ int current_section_is_text; ! /* Communication between output_compare and output_condjump. */ static rtx cmp_operand0, cmp_operand1; static char cmp_modech; --- 42,57 ---- enum reg_class regno_reg_class[FIRST_PSEUDO_REGISTER]; enum reg_class reg_class_from_letter[256]; ! /* Target cpu index. */ int target_cpu; /* Boolean to keep track of whether the current section is .text or not. ! Used by .align handler in convex.h. */ int current_section_is_text; ! /* Communication between output_compare and output_condjump. */ static rtx cmp_operand0, cmp_operand1; static char cmp_modech; *************** static int frame_argblock_size; *** 62,76 **** static rtx convert_arg_pushes (); #endif static void expand_movstr_call PARAMS ((rtx *)); ! /* Here from OVERRIDE_OPTIONS at startup. Initialize constant tables. */ void init_convex () { int regno; ! /* Set A and S reg classes. */ for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) if (A_REGNO_P (regno)) { --- 64,175 ---- static rtx convert_arg_pushes (); #endif static void expand_movstr_call PARAMS ((rtx *)); + static void convex_output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT)); + static void convex_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT)); + static int convex_adjust_cost PARAMS ((rtx, rtx, rtx, int)); + + /* Initialize the GCC target structure. */ + #undef TARGET_ASM_BYTE_OP + #define TARGET_ASM_BYTE_OP "\tds.b\t" + #undef TARGET_ASM_ALIGNED_HI_OP + #define TARGET_ASM_ALIGNED_HI_OP "\tds.h\t" + #undef TARGET_ASM_ALIGNED_SI_OP + #define TARGET_ASM_ALIGNED_SI_OP "\tds.w\t" ! #undef TARGET_ASM_FUNCTION_PROLOGUE ! #define TARGET_ASM_FUNCTION_PROLOGUE convex_output_function_prologue ! #undef TARGET_ASM_FUNCTION_EPILOGUE ! #define TARGET_ASM_FUNCTION_EPILOGUE convex_output_function_epilogue ! #undef TARGET_SCHED_ADJUST_COST ! #define TARGET_SCHED_ADJUST_COST convex_adjust_cost ! ! struct gcc_target targetm = TARGET_INITIALIZER; ! ! /* Generate the assembly code for function entry. FILE is a stdio ! stream to output the code to. SIZE is an int: how many units of ! temporary storage to allocate. ! ! Refer to the array `regs_ever_live' to determine which registers to ! save; `regs_ever_live[I]' is nonzero if register number I is ever ! used in the function. This function is responsible for knowing ! which registers should not be saved even if used. */ ! ! static void ! convex_output_function_prologue (file, size) ! FILE *file; ! HOST_WIDE_INT size; ! { ! size = ((size) + 7) & -8; ! if (size) ! { ! fprintf (file, "\tsub.w #"); ! fprintf (file, HOST_WIDE_INT_PRINT_DEC, size); ! fprintf (file, ",sp\n"); ! } ! } ! ! /* This function generates the assembly code for function exit. ! Args are as for output_function_prologue (). ! ! The function epilogue should not depend on the current stack ! pointer! It should use the frame pointer only. This is mandatory ! because of alloca; we also take advantage of it to omit stack ! adjustments before returning. */ ! ! static void ! convex_output_function_epilogue (file, size) ! FILE *file; ! HOST_WIDE_INT size ATTRIBUTE_UNUSED; ! { ! /* Follow function with a zero to stop c34 icache prefetching. */ ! fprintf (file, "\tds.h 0\n"); ! } ! ! /* Adjust the cost of dependences. */ ! static int ! convex_adjust_cost (insn, link, dep, cost) ! rtx insn; ! rtx link; ! rtx dep; ! int cost; ! { ! /* Antidependencies don't block issue. */ ! if (REG_NOTE_KIND (link) != 0) ! cost = 0; ! /* C38 situations where delay depends on context */ ! else if (TARGET_C38 ! && GET_CODE (PATTERN (insn)) == SET ! && GET_CODE (PATTERN (dep)) == SET) ! { ! enum attr_type insn_type = get_attr_type (insn); ! enum attr_type dep_type = get_attr_type (dep); ! /* index register must be ready one cycle early */ ! if (insn_type == TYPE_MLDW || insn_type == TYPE_MLDL ! || (insn_type == TYPE_MST ! && reg_mentioned_p (SET_DEST (PATTERN (dep)), ! SET_SRC (PATTERN (insn))))) ! cost += 1; ! /* alu forwarding off alu takes two */ ! if (dep_type == TYPE_ALU ! && insn_type != TYPE_ALU ! && ! (insn_type == TYPE_MST ! && SET_DEST (PATTERN (dep)) == SET_SRC (PATTERN (insn)))) ! cost += 1; ! } ! ! return cost; ! } ! ! ! ! /* Here from OVERRIDE_OPTIONS at startup. Initialize constant tables. */ void init_convex () { int regno; ! /* Set A and S reg classes. */ for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) if (A_REGNO_P (regno)) { *************** init_convex () *** 83,89 **** regno_reg_class[regno] = S_REGS; } ! /* Can't index off the stack pointer, register 0. */ regno_ok_for_index_p[STACK_POINTER_REGNUM] = 0; regno_reg_class[STACK_POINTER_REGNUM] = SP_REGS; --- 182,188 ---- regno_reg_class[regno] = S_REGS; } ! /* Can't index off the stack pointer, register 0. */ regno_ok_for_index_p[STACK_POINTER_REGNUM] = 0; regno_reg_class[STACK_POINTER_REGNUM] = SP_REGS; *************** init_convex () *** 101,107 **** reg_class_from_letter['A'] = INDEX_REGS; reg_class_from_letter['d'] = S_REGS; ! /* Turn off floating point exception enables in the psw. */ psw_disable_float (); } --- 200,206 ---- reg_class_from_letter['A'] = INDEX_REGS; reg_class_from_letter['d'] = S_REGS; ! /* Turn off floating point exception enables in the psw. */ psw_disable_float (); } *************** psw_disable_float () *** 120,126 **** } /* Here to output code for a compare insn. Output nothing, just ! record the operands and their mode. */ const char * output_cmp (operand0, operand1, modech) --- 219,225 ---- } /* Here to output code for a compare insn. Output nothing, just ! record the operands and their mode. */ const char * output_cmp (operand0, operand1, modech) *************** output_condjump (label, cond, jbr_sense) *** 158,164 **** /* [BL] mean the value is being compared against immediate 0. Use neg.x, which produces the same carry that eq.x #0 would if it existed. In this case operands[1] is a scratch register, not a ! compare operand. */ if (cmp_modech == 'B' || cmp_modech == 'L') { --- 257,263 ---- /* [BL] mean the value is being compared against immediate 0. Use neg.x, which produces the same carry that eq.x #0 would if it existed. In this case operands[1] is a scratch register, not a ! compare operand. */ if (cmp_modech == 'B' || cmp_modech == 'L') { *************** output_condjump (label, cond, jbr_sense) *** 168,174 **** /* [WH] mean the value being compared resulted from "add.[wh] #-1,rk" when rk was nonnegative -- we can omit equality compares against -1 ! or inequality compares against 0. */ else if (cmp_modech == 'W' || cmp_modech == 'H') { --- 267,273 ---- /* [WH] mean the value being compared resulted from "add.[wh] #-1,rk" when rk was nonnegative -- we can omit equality compares against -1 ! or inequality compares against 0. */ else if (cmp_modech == 'W' || cmp_modech == 'H') { *************** output_condjump (label, cond, jbr_sense) *** 182,188 **** /* Constant must be first; swap operands if necessary. If lt, le, ltu, leu are swapped, change to le, lt, leu, ltu ! and reverse the sense of the jump. */ if (! REG_P (cmp_operand1)) { --- 281,287 ---- /* Constant must be first; swap operands if necessary. If lt, le, ltu, leu are swapped, change to le, lt, leu, ltu ! and reverse the sense of the jump. */ if (! REG_P (cmp_operand1)) { *************** output_condjump (label, cond, jbr_sense) *** 221,227 **** /* Return 1 if OP is valid for cmpsf. In IEEE mode, +/- zero compares are not handled by the immediate versions of eq.s and on some machines, lt.s, and le.s. ! So disallow 0.0 as the immediate operand of xx.s compares in IEEE mode. */ int nonmemory_cmpsf_operand (op, mode) --- 320,326 ---- /* Return 1 if OP is valid for cmpsf. In IEEE mode, +/- zero compares are not handled by the immediate versions of eq.s and on some machines, lt.s, and le.s. ! So disallow 0.0 as the immediate operand of xx.s compares in IEEE mode. */ int nonmemory_cmpsf_operand (op, mode) *************** nonmemory_cmpsf_operand (op, mode) *** 237,243 **** } /* Convex /bin/as does not like unary minus in some contexts. ! Simplify CONST addresses to remove it. */ rtx simplify_for_convex (x) --- 336,342 ---- } /* Convex /bin/as does not like unary minus in some contexts. ! Simplify CONST addresses to remove it. */ rtx simplify_for_convex (x) *************** simplify_for_convex (x) *** 263,269 **** return x; } ! /* Routines to separate CONST_DOUBLEs into component parts. */ int const_double_high_int (x) --- 362,368 ---- return x; } ! /* Routines to separate CONST_DOUBLEs into component parts. */ int const_double_high_int (x) *************** const_double_low_int (x) *** 285,291 **** return CONST_DOUBLE_LOW (x); } ! /* Inline block copy. */ void expand_movstr (operands) --- 384,390 ---- return CONST_DOUBLE_LOW (x); } ! /* Inline block copy. */ void expand_movstr (operands) *************** expand_movstr (operands) *** 302,317 **** /* Decide how many regs to use, depending on load latency, and what size pieces to move, depending on whether machine does unaligned ! loads and stores efficiently. */ if (TARGET_C1) { ! /* ld.l latency is 4, no alignment problems. */ nregs = 3, maxsize = 8; } else if (TARGET_C2) { ! /* loads are latency 2 if we avoid ld.l not at least word aligned. */ if (align >= 4) nregs = 2, maxsize = 8; else --- 401,416 ---- /* Decide how many regs to use, depending on load latency, and what size pieces to move, depending on whether machine does unaligned ! loads and stores efficiently. */ if (TARGET_C1) { ! /* ld.l latency is 4, no alignment problems. */ nregs = 3, maxsize = 8; } else if (TARGET_C2) { ! /* loads are latency 2 if we avoid ld.l not at least word aligned. */ if (align >= 4) nregs = 2, maxsize = 8; else *************** expand_movstr (operands) *** 319,330 **** } else if (TARGET_C34) { ! /* latency is 4 if aligned, horrible if not. */ nregs = 3, maxsize = align; } else if (TARGET_C38) { ! /* latency is 2 if at least word aligned, 3 or 4 if unaligned. */ if (align >= 4) nregs = 2, maxsize = 8; else --- 418,429 ---- } else if (TARGET_C34) { ! /* latency is 4 if aligned, horrible if not. */ nregs = 3, maxsize = align; } else if (TARGET_C38) { ! /* latency is 2 if at least word aligned, 3 or 4 if unaligned. */ if (align >= 4) nregs = 2, maxsize = 8; else *************** expand_movstr (operands) *** 334,340 **** abort (); /* Caller is not necessarily prepared for us to fail in this ! expansion. So fall back by generating memcpy call here. */ if (GET_CODE (operands[2]) != CONST_INT || (len = INTVAL (operands[2])) > (unsigned) 32 * maxsize) --- 433,439 ---- abort (); /* Caller is not necessarily prepared for us to fail in this ! expansion. So fall back by generating memcpy call here. */ if (GET_CODE (operands[2]) != CONST_INT || (len = INTVAL (operands[2])) > (unsigned) 32 * maxsize) *************** expand_movstr (operands) *** 363,377 **** /* Get src and dest in the right mode */ if (GET_MODE (src) != mode) ! src = change_address (src, mode, 0), ! dest = change_address (dest, mode, 0); /* Make load and store patterns for this piece */ load = gen_rtx_SET (VOIDmode, reg, src); store = gen_rtx_SET (VOIDmode, dest, reg); /* Emit the load and the store from last time. ! When we emit a store, we can reuse its temp reg. */ emit_insn (load); if (prev_store) { --- 462,478 ---- /* Get src and dest in the right mode */ if (GET_MODE (src) != mode) ! { ! src = adjust_address (src, mode, 0); ! dest = adjust_address (dest, mode, 0); ! } /* Make load and store patterns for this piece */ load = gen_rtx_SET (VOIDmode, reg, src); store = gen_rtx_SET (VOIDmode, dest, reg); /* Emit the load and the store from last time. ! When we emit a store, we can reuse its temp reg. */ emit_insn (load); if (prev_store) { *************** expand_movstr (operands) *** 381,400 **** else reg = 0; ! /* Queue up the store, for next time or the time after that. */ if (nregs == 2) prev_store = store; else prev_store = prev_store_2, prev_store_2 = store; ! /* Advance to next piece. */ size = GET_MODE_SIZE (mode); ! src = adj_offsettable_operand (src, size); ! dest = adj_offsettable_operand (dest, size); len -= size; } ! /* Finally, emit the last stores. */ if (prev_store) emit_insn (prev_store); if (prev_store_2) --- 482,501 ---- else reg = 0; ! /* Queue up the store, for next time or the time after that. */ if (nregs == 2) prev_store = store; else prev_store = prev_store_2, prev_store_2 = store; ! /* Advance to next piece. */ size = GET_MODE_SIZE (mode); ! src = adjust_address (src, mode, size); ! dest = adjust_address (dest, mode, size); len -= size; } ! /* Finally, emit the last stores. */ if (prev_store) emit_insn (prev_store); if (prev_store_2) *************** check_float_value (mode, dp, overflow) *** 460,466 **** /* Output the label at the start of a function. Precede it with the number of formal args so debuggers will have ! some idea of how many args to print. */ void asm_declare_function_name (file, name, decl) --- 561,567 ---- /* Output the label at the start of a function. Precede it with the number of formal args so debuggers will have ! some idea of how many args to print. */ void asm_declare_function_name (file, name, decl) *************** asm_declare_function_name (file, name, d *** 478,484 **** p = version_string; for (i = 0; i < 3; ) { c = *p; ! if (c - '0' < (unsigned) 10) vers[i++] = c; if (c == 0 || c == ' ') vers[i++] = '0'; --- 579,585 ---- p = version_string; for (i = 0; i < 3; ) { c = *p; ! if (ISDIGIT (c)) vers[i++] = c; if (c == 0 || c == ' ') vers[i++] = '0'; *************** asm_declare_function_name (file, name, d *** 497,503 **** /* Print an instruction operand X on file FILE. CODE is the code from the %-spec that requested printing this operand; ! if `%z3' was used to print operand 3, then CODE is 'z'. */ /* Convex codes: %u prints a CONST_DOUBLE's high word %v prints a CONST_DOUBLE's low word --- 598,604 ---- /* Print an instruction operand X on file FILE. CODE is the code from the %-spec that requested printing this operand; ! if `%z3' was used to print operand 3, then CODE is 'z'. */ /* Convex codes: %u prints a CONST_DOUBLE's high word %v prints a CONST_DOUBLE's low word *************** print_operand (file, x, code) *** 549,557 **** break; default: if (code == 'u') ! fprintf (file, "#%d", CONST_DOUBLE_HIGH (x)); else ! fprintf (file, "#%d", CONST_DOUBLE_LOW (x)); } break; --- 650,664 ---- break; default: if (code == 'u') ! { ! fprintf (file, "#"); ! fprintf (file, HOST_WIDE_INT_PRINT_DEC, CONST_DOUBLE_HIGH (x)); ! } else ! { ! fprintf (file, "#"); ! fprintf (file, HOST_WIDE_INT_PRINT_DEC, CONST_DOUBLE_LOW (x)); ! } } break; *************** print_operand (file, x, code) *** 570,576 **** } } ! /* Print a memory operand whose address is X, on file FILE. */ void print_operand_address (file, addr) --- 677,683 ---- } } ! /* Print a memory operand whose address is X, on file FILE. */ void print_operand_address (file, addr) *************** print_operand_address (file, addr) *** 618,624 **** } /* Output a float to FILE, value VALUE, format FMT, preceded by PFX ! and followed by SFX. */ void outfloat (file, value, fmt, pfx, sfx) --- 725,731 ---- } /* Output a float to FILE, value VALUE, format FMT, preceded by PFX ! and followed by SFX. */ void outfloat (file, value, fmt, pfx, sfx) *************** outfloat (file, value, fmt, pfx, sfx) *** 643,649 **** void replace_arg_pushes () { ! /* Doesn't work yet. */ } /* Output the insns needed to do a call. operands[] are --- 750,756 ---- void replace_arg_pushes () { ! /* Doesn't work yet. */ } /* Output the insns needed to do a call. operands[] are *************** output_call (insn, operands) *** 677,687 **** } ! /* Here after reloading, before the second scheduling pass. */ void emit_ap_optimizations () { ! /* Removed for now. */ } --- 784,794 ---- } ! /* Here after reloading, before the second scheduling pass. */ void emit_ap_optimizations () { ! /* Removed for now. */ } diff -Nrc3pad gcc-3.0.4/gcc/config/convex/convex.h gcc-3.1/gcc/config/convex/convex.h *** gcc-3.0.4/gcc/config/convex/convex.h Thu Nov 30 06:31:19 2000 --- gcc-3.1/gcc/config/convex/convex.h Wed Jan 16 02:37:20 2002 *************** *** 1,5 **** /* Definitions of target machine for GNU compiler. Convex version. ! Copyright (C) 1988, 1994, 1995, 1996, 2000 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,6 ---- /* Definitions of target machine for GNU compiler. Convex version. ! Copyright (C) 1988, 1994, 1995, 1996, 2000, 2001, 2002 ! Free Software Foundation, Inc. This file is part of GNU CC. *************** the Free Software Foundation, 59 Temple *** 19,25 **** Boston, MA 02111-1307, USA. */ ! /* Standard GCC variables that we reference. */ extern int target_flags; --- 20,26 ---- Boston, MA 02111-1307, USA. */ ! /* Standard GCC variables that we reference. */ extern int target_flags; *************** extern int target_flags; *** 107,113 **** /* Target-dependent specs. Some libraries come in c1 and c2+ versions; use the appropriate ones. Make a target-dependent __convex_cxx__ define to relay the target cpu ! to the program being compiled. */ #if (TARGET_DEFAULT | TARGET_CPU_DEFAULT) & 1 --- 108,114 ---- /* Target-dependent specs. Some libraries come in c1 and c2+ versions; use the appropriate ones. Make a target-dependent __convex_cxx__ define to relay the target cpu ! to the program being compiled. */ #if (TARGET_DEFAULT | TARGET_CPU_DEFAULT) & 1 *************** extern int target_flags; *** 416,427 **** #endif ! /* Use /path/libgcc.a instead of -lgcc, makes bootstrap work more smoothly. */ #define LINK_LIBGCC_SPECIAL_1 /* Since IEEE support was added to gcc, most things seem to like it ! better if we disable exceptions and check afterward for infinity. */ #if __convex__ #if _IEEE_FLOAT_ --- 417,428 ---- #endif ! /* Use /path/libgcc.a instead of -lgcc, makes bootstrap work more smoothly. */ #define LINK_LIBGCC_SPECIAL_1 /* Since IEEE support was added to gcc, most things seem to like it ! better if we disable exceptions and check afterward for infinity. */ #if __convex__ #if _IEEE_FLOAT_ *************** extern int target_flags; *** 436,442 **** /* Target machine storage layout */ /* Define this if most significant bit is lowest numbered ! in instructions that operate on numbered bit-fields. */ #define BITS_BIG_ENDIAN 1 /* Define this if most significant byte of a word is the lowest numbered. */ --- 437,443 ---- /* Target machine storage layout */ /* Define this if most significant bit is lowest numbered ! in instructions that operate on numbered bit-fields. */ #define BITS_BIG_ENDIAN 1 /* Define this if most significant byte of a word is the lowest numbered. */ *************** extern int target_flags; *** 531,549 **** /* List the order in which to allocate registers. Each register must be listed once, even those in FIXED_REGISTERS. ! For Convex, put S0 (the return register) last. */ #define REG_ALLOC_ORDER \ { 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 0, 8, 14, 15 } /* Return number of consecutive hard regs needed starting at reg REGNO to hold something of mode MODE. This is ordinarily the length in words of a value of mode MODE ! but can be less for certain modes in special long registers. */ #define HARD_REGNO_NREGS(REGNO, MODE) \ ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD) /* Value is 1 if hard register REGNO can hold a value of machine-mode MODE. ! On Convex, S registers can hold any type, A registers any nonfloat. */ #define HARD_REGNO_MODE_OK(REGNO, MODE) \ (S_REGNO_P (REGNO) \ || (GET_MODE_SIZE (MODE) <= 4 && (MODE) != SFmode)) --- 532,550 ---- /* List the order in which to allocate registers. Each register must be listed once, even those in FIXED_REGISTERS. ! For Convex, put S0 (the return register) last. */ #define REG_ALLOC_ORDER \ { 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 0, 8, 14, 15 } /* Return number of consecutive hard regs needed starting at reg REGNO to hold something of mode MODE. This is ordinarily the length in words of a value of mode MODE ! but can be less for certain modes in special long registers. */ #define HARD_REGNO_NREGS(REGNO, MODE) \ ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD) /* Value is 1 if hard register REGNO can hold a value of machine-mode MODE. ! On Convex, S registers can hold any type, A registers any nonfloat. */ #define HARD_REGNO_MODE_OK(REGNO, MODE) \ (S_REGNO_P (REGNO) \ || (GET_MODE_SIZE (MODE) <= 4 && (MODE) != SFmode)) *************** extern int target_flags; *** 608,614 **** /* Convex has classes A (address) and S (scalar). A is further divided into SP_REGS (stack pointer) and INDEX_REGS. ! SI_REGS is S_REGS + INDEX_REGS -- all the regs except SP. */ enum reg_class { NO_REGS, S_REGS, INDEX_REGS, SP_REGS, A_REGS, SI_REGS, --- 609,615 ---- /* Convex has classes A (address) and S (scalar). A is further divided into SP_REGS (stack pointer) and INDEX_REGS. ! SI_REGS is S_REGS + INDEX_REGS -- all the regs except SP. */ enum reg_class { NO_REGS, S_REGS, INDEX_REGS, SP_REGS, A_REGS, SI_REGS, *************** enum reg_class { *** 642,649 **** #define REGNO_REG_CLASS(REGNO) (regno_reg_class[REGNO]) ! #define S_REGNO_P(REGNO) (((REGNO) - S0_REGNUM) < (unsigned) 8) ! #define A_REGNO_P(REGNO) (((REGNO) - A0_REGNUM) < (unsigned) 8) #define S_REG_P(X) (REG_P (X) && S_REGNO_P (REGNO (X))) #define A_REG_P(X) (REG_P (X) && A_REGNO_P (REGNO (X))) --- 643,650 ---- #define REGNO_REG_CLASS(REGNO) (regno_reg_class[REGNO]) ! #define S_REGNO_P(REGNO) ((unsigned)((REGNO) - S0_REGNUM) < 8) ! #define A_REGNO_P(REGNO) ((unsigned)((REGNO) - A0_REGNUM) < 8) #define S_REG_P(X) (REG_P (X) && S_REGNO_P (REGNO (X))) #define A_REG_P(X) (REG_P (X) && A_REGNO_P (REGNO (X))) *************** enum reg_class { *** 667,673 **** C is the letter, and VALUE is a constant value. Return 1 if VALUE is in the range specified by C. */ /* 'I' is used to pass any CONST_INT and reject any CONST_DOUBLE. ! CONST_DOUBLE integers are handled by G and H constraint chars. */ #define CONST_OK_FOR_LETTER_P(VALUE, C) 1 --- 668,674 ---- C is the letter, and VALUE is a constant value. Return 1 if VALUE is in the range specified by C. */ /* 'I' is used to pass any CONST_INT and reject any CONST_DOUBLE. ! CONST_DOUBLE integers are handled by G and H constraint chars. */ #define CONST_OK_FOR_LETTER_P(VALUE, C) 1 *************** enum reg_class { *** 689,695 **** /* Optional extra constraints for this machine. For Convex, 'Q' means that OP is a volatile MEM. ! For volatile scalars, we use instructions that bypass the data cache. */ #define EXTRA_CONSTRAINT(OP, C) \ ((C) == 'Q' ? (GET_CODE (OP) == MEM && MEM_VOLATILE_P (OP) \ --- 690,696 ---- /* Optional extra constraints for this machine. For Convex, 'Q' means that OP is a volatile MEM. ! For volatile scalars, we use instructions that bypass the data cache. */ #define EXTRA_CONSTRAINT(OP, C) \ ((C) == 'Q' ? (GET_CODE (OP) == MEM && MEM_VOLATILE_P (OP) \ *************** enum reg_class { *** 701,707 **** In general this is just CLASS; but on some machines in some cases it is preferable to use a more restrictive class. */ ! /* Put 2-word constants that can't be immediate operands into memory. */ #define PREFERRED_RELOAD_CLASS(X,CLASS) \ ((GET_CODE (X) != CONST_DOUBLE \ --- 702,708 ---- In general this is just CLASS; but on some machines in some cases it is preferable to use a more restrictive class. */ ! /* Put 2-word constants that can't be immediate operands into memory. */ #define PREFERRED_RELOAD_CLASS(X,CLASS) \ ((GET_CODE (X) != CONST_DOUBLE \ *************** enum reg_class { *** 734,740 **** #define STARTING_FRAME_OFFSET 0 /* If we generate an insn to push BYTES bytes, ! this says how many the stack pointer really advances by. */ #define PUSH_ROUNDING(BYTES) (((BYTES) + 3) & ~3) /* Offset of first parameter from the argument pointer register value. */ --- 735,741 ---- #define STARTING_FRAME_OFFSET 0 /* If we generate an insn to push BYTES bytes, ! this says how many the stack pointer really advances by. */ #define PUSH_ROUNDING(BYTES) (((BYTES) + 3) & ~3) /* Offset of first parameter from the argument pointer register value. */ *************** enum reg_class { *** 772,778 **** #define FUNCTION_VALUE_REGNO_P(N) ((N) == S0_REGNUM) ! /* 1 if N is a possible register number for function argument passing. */ #define FUNCTION_ARG_REGNO_P(N) 0 --- 773,779 ---- #define FUNCTION_VALUE_REGNO_P(N) ((N) == S0_REGNUM) ! /* 1 if N is a possible register number for function argument passing. */ #define FUNCTION_ARG_REGNO_P(N) 0 *************** enum reg_class { *** 780,793 **** during the scan of that argument list. This data type should hold all necessary information about the function itself and about the args processed so far, enough to enable macros ! such as FUNCTION_ARG to determine where the next arg should go. */ ! /* On convex, simply count the arguments in case TARGET_ARGCOUNT is set. */ #define CUMULATIVE_ARGS int /* Initialize a variable CUM of type CUMULATIVE_ARGS for a call to a function whose data type is FNTYPE. ! For a library call, FNTYPE is 0. */ #define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT) \ ((CUM) = 0) --- 781,794 ---- during the scan of that argument list. This data type should hold all necessary information about the function itself and about the args processed so far, enough to enable macros ! such as FUNCTION_ARG to determine where the next arg should go. */ ! /* On convex, simply count the arguments in case TARGET_ARGCOUNT is set. */ #define CUMULATIVE_ARGS int /* Initialize a variable CUM of type CUMULATIVE_ARGS for a call to a function whose data type is FNTYPE. ! For a library call, FNTYPE is 0. */ #define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT) \ ((CUM) = 0) *************** enum reg_class { *** 818,849 **** #define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \ ((MODE) == VOIDmode ? GEN_INT ((CUM)) : 0) - /* This macro generates the assembly code for function entry. - FILE is a stdio stream to output the code to. - SIZE is an int: how many units of temporary storage to allocate. - Refer to the array `regs_ever_live' to determine which registers - to save; `regs_ever_live[I]' is nonzero if register number I - is ever used in the function. This macro is responsible for - knowing which registers should not be saved even if used. */ - - #define FUNCTION_PROLOGUE(FILE, SIZE) \ - { \ - int size = ((SIZE) + 7) & -8; \ - if (size != 0) \ - fprintf (FILE, "\tsub.w #%d,sp\n", size); \ - } - - /* This macro generates the assembly code for function exit, - on machines that need it. If FUNCTION_EPILOGUE is not defined - then individual return instructions are generated for each - return statement. Args are same as for FUNCTION_PROLOGUE. */ - - #define FUNCTION_EPILOGUE(FILE, SIZE) \ - { \ - /* Follow function with a zero to stop c34 icache prefetching. */ \ - fprintf (FILE, "\tds.h 0\n"); \ - } - /* Output assembler code for a block containing the constant parts of a trampoline, leaving space for the variable parts. */ --- 819,824 ---- *************** enum reg_class { *** 932,938 **** /* Nonzero if the constant value X is a legitimate general operand. It is given that X satisfies CONSTANT_P or is a CONST_DOUBLE. */ ! /* For convex, bounce 2-word constants that can't be immediate operands. */ #define LEGITIMATE_CONSTANT_P(X) \ (GET_CODE (X) != CONST_DOUBLE \ --- 907,913 ---- /* Nonzero if the constant value X is a legitimate general operand. It is given that X satisfies CONSTANT_P or is a CONST_DOUBLE. */ ! /* For convex, bounce 2-word constants that can't be immediate operands. */ #define LEGITIMATE_CONSTANT_P(X) \ (GET_CODE (X) != CONST_DOUBLE \ *************** enum reg_class { *** 984,990 **** const, reg, (PLUS reg const) We don't use indirection since with insn scheduling, load + indexing ! is better. */ /* 1 if X is an address that we could indirect through. */ #define INDIRECTABLE_ADDRESS_P(X) \ --- 959,965 ---- const, reg, (PLUS reg const) We don't use indirection since with insn scheduling, load + indexing ! is better. */ /* 1 if X is an address that we could indirect through. */ #define INDIRECTABLE_ADDRESS_P(X) \ *************** enum reg_class { *** 999,1005 **** && REG_OK_FOR_BASE_P (XEXP (X, 1)) \ && CONSTANT_ADDRESS_P (XEXP (X, 0)))) ! /* Go to ADDR if X is a valid address. */ #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \ { register rtx xfoob = (X); \ if (INDIRECTABLE_ADDRESS_P (xfoob)) \ --- 974,980 ---- && REG_OK_FOR_BASE_P (XEXP (X, 1)) \ && CONSTANT_ADDRESS_P (XEXP (X, 0)))) ! /* Go to ADDR if X is a valid address. */ #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \ { register rtx xfoob = (X); \ if (INDIRECTABLE_ADDRESS_P (xfoob)) \ *************** enum reg_class { *** 1026,1032 **** #define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN) {} /* Go to LABEL if ADDR (a legitimate address expression) ! has an effect that depends on the machine mode it is used for. */ #define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL) {} --- 1001,1007 ---- #define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN) {} /* Go to LABEL if ADDR (a legitimate address expression) ! has an effect that depends on the machine mode it is used for. */ #define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL) {} *************** enum reg_class { *** 1037,1043 **** /* Define as C expression which evaluates to nonzero if the tablejump instruction expects the table to contain offsets from the address of the table. ! Do not define this if the table should contain absolute addresses. */ /* #define CASE_VECTOR_PC_RELATIVE 1 */ /* Define this if the case instruction drops through after the table --- 1012,1018 ---- /* Define as C expression which evaluates to nonzero if the tablejump instruction expects the table to contain offsets from the address of the table. ! Do not define this if the table should contain absolute addresses. */ /* #define CASE_VECTOR_PC_RELATIVE 1 */ /* Define this if the case instruction drops through after the table *************** enum reg_class { *** 1045,1056 **** jumps to the default label instead. */ /* #define CASE_DROPS_THROUGH */ - /* Specify the tree operation to be used to convert reals to integers. */ - #define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR - - /* This is the kind of divide that is easiest to do in the general case. */ - #define EASY_DIV_EXPR TRUNC_DIV_EXPR - /* Define this as 1 if `char' should by default be signed; else as 0. */ #define DEFAULT_SIGNED_CHAR 1 --- 1020,1025 ---- *************** enum reg_class { *** 1062,1070 **** in one reasonably fast instruction. */ #define MOVE_MAX 8 - /* Define this if zero-extension is slow (more than one real instruction). */ - /* #define SLOW_ZERO_EXTEND */ - /* Nonzero if access to memory by bytes is slow and undesirable. */ #define SLOW_BYTE_ACCESS (! TARGET_C2) --- 1031,1036 ---- *************** enum reg_class { *** 1078,1084 **** #define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1 /* On Convex, it is as good to call a constant function address as to ! call an address kept in a register. */ #define NO_FUNCTION_CSE /* When a prototype says `char' or `short', really pass an `int'. */ --- 1044,1050 ---- #define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1 /* On Convex, it is as good to call a constant function address as to ! call an address kept in a register. */ #define NO_FUNCTION_CSE /* When a prototype says `char' or `short', really pass an `int'. */ *************** enum reg_class { *** 1141,1180 **** #define BRANCH_COST 0 ! /* Adjust the cost of dependences. */ ! ! #define ADJUST_COST(INSN,LINK,DEP,COST) \ ! { \ ! /* Antidependencies don't block issue. */ \ ! if (REG_NOTE_KIND (LINK) != 0) \ ! (COST) = 0; \ ! /* C38 situations where delay depends on context */ \ ! else if (TARGET_C38 \ ! && GET_CODE (PATTERN (INSN)) == SET \ ! && GET_CODE (PATTERN (DEP)) == SET) \ ! { \ ! enum attr_type insn_type = get_attr_type (INSN); \ ! enum attr_type dep_type = get_attr_type (DEP); \ ! /* index register must be ready one cycle early */ \ ! if (insn_type == TYPE_MLDW || insn_type == TYPE_MLDL \ ! || (insn_type == TYPE_MST \ ! && reg_mentioned_p (SET_DEST (PATTERN (DEP)), \ ! SET_SRC (PATTERN (INSN))))) \ ! (COST) += 1; \ ! /* alu forwarding off alu takes two */ \ ! if (dep_type == TYPE_ALU \ ! && insn_type != TYPE_ALU \ ! && ! (insn_type == TYPE_MST \ ! && SET_DEST (PATTERN (DEP)) == SET_SRC (PATTERN (INSN)))) \ ! (COST) += 1; \ ! } \ ! } ! ! /* Convex uses Vax or IEEE floats. ! Follow the host format. */ #define TARGET_FLOAT_FORMAT HOST_FLOAT_FORMAT ! /* But must prevent real.c from constructing Vax dfloats */ #define REAL_VALUE_ATOF(X,S) atof (X) /* Check a `double' value for validity for a particular machine mode. */ --- 1107,1117 ---- #define BRANCH_COST 0 ! /* Convex uses VAX or IEEE floats. ! Follow the host format. */ #define TARGET_FLOAT_FORMAT HOST_FLOAT_FORMAT ! /* But must prevent real.c from constructing VAX dfloats */ #define REAL_VALUE_ATOF(X,S) atof (X) /* Check a `double' value for validity for a particular machine mode. */ *************** enum reg_class { *** 1259,1268 **** #define DBX_DEBUGGING_INFO - /* How to renumber registers for dbx and gdb. */ - - #define DBX_REGISTER_NUMBER(REGNO) (REGNO) - /* Do not break .stabs pseudos into continuations. */ #define DBX_CONTIN_LENGTH 0 --- 1196,1201 ---- *************** enum reg_class { *** 1272,1278 **** #define DBX_CONTIN_CHAR '?' ! /* Don't use stab extensions until GDB v4 port is available for convex. */ #define DEFAULT_GDB_EXTENSIONS 0 #define DBX_NO_XREFS --- 1205,1211 ---- #define DBX_CONTIN_CHAR '?' ! /* Don't use stab extensions until GDB v4 port is available for convex. */ #define DEFAULT_GDB_EXTENSIONS 0 #define DBX_NO_XREFS *************** enum reg_class { *** 1289,1295 **** #define ASM_GLOBALIZE_LABEL(FILE,NAME) \ do { fputs (".globl ", FILE); assemble_name (FILE, NAME); fputs ("\n", FILE);} while (0) ! /* The prefix to add to user-visible assembler symbols. */ #define USER_LABEL_PREFIX "_" --- 1222,1228 ---- #define ASM_GLOBALIZE_LABEL(FILE,NAME) \ do { fputs (".globl ", FILE); assemble_name (FILE, NAME); fputs ("\n", FILE);} while (0) ! /* The prefix to add to user-visible assembler symbols. */ #define USER_LABEL_PREFIX "_" *************** enum reg_class { *** 1316,1379 **** #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ sprintf (LABEL, "*%s%d", PREFIX, NUM) - /* This is how to output an assembler line defining a `double' constant. */ - - #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - outfloat (FILE, VALUE, "%.17e", "\tds.d ", "\n") - - /* This is how to output an assembler line defining a `float' constant. */ - - #define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - outfloat (FILE, VALUE, "%.9e", "\tds.s ", "\n") - - /* This is how to output an assembler line defining an `int' constant. */ - - #define ASM_OUTPUT_INT(FILE,VALUE) \ - { \ - fprintf (FILE, "\tds.w "); \ - output_addr_const (FILE, simplify_for_convex (VALUE)); \ - fprintf (FILE, "\n"); \ - } - - /* Likewise for a `long long int' constant. */ - - #define ASM_OUTPUT_DOUBLE_INT(FILE,VALUE) \ - { \ - if (GET_CODE (VALUE) == CONST_DOUBLE) \ - fprintf (FILE, "\tds.w %d,%d\n", \ - const_double_high_int (VALUE), const_double_low_int (VALUE)); \ - else if (GET_CODE (VALUE) == CONST_INT) \ - { \ - int val = INTVAL (VALUE); \ - fprintf (FILE, "\tds.w %d,%d\n", val < 0 ? -1 : 0, val); \ - } \ - else \ - abort (); \ - } - - /* Likewise for `char' and `short' constants. */ - - #define ASM_OUTPUT_SHORT(FILE,VALUE) \ - ( fprintf (FILE, "\tds.h "), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "\n")) - - #define ASM_OUTPUT_CHAR(FILE,VALUE) \ - ( fprintf (FILE, "\tds.b "), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "\n")) - - /* This is how to output an assembler line for a numeric constant byte. */ - - #define ASM_OUTPUT_BYTE(FILE,VALUE) \ - fprintf (FILE, "\tds.b %#x\n", (VALUE)) - /* This is how to output a string */ #define ASM_OUTPUT_ASCII(FILE,STR,SIZE) do { \ ! int i; \ fprintf ((FILE), "\tds.b \""); \ ! for (i = 0; i < (SIZE); i++) { \ register int c = (STR)[i] & 0377; \ if (c >= ' ' && c < 0177 && c != '\\' && c != '"') \ putc (c, (FILE)); \ --- 1249,1260 ---- #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ sprintf (LABEL, "*%s%d", PREFIX, NUM) /* This is how to output a string */ #define ASM_OUTPUT_ASCII(FILE,STR,SIZE) do { \ ! size_t i, limit = (SIZE); \ fprintf ((FILE), "\tds.b \""); \ ! for (i = 0; i < limit; i++) { \ register int c = (STR)[i] & 0377; \ if (c >= ' ' && c < 0177 && c != '\\' && c != '"') \ putc (c, (FILE)); \ *************** enum reg_class { *** 1397,1403 **** S_REGNO_P (REGNO) ? 'l' : 'w', \ reg_names[REGNO]) ! /* This is how to output an element of a case-vector that is absolute. */ #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ fprintf (FILE, "\tds.w L%d\n", VALUE) --- 1278,1284 ---- S_REGNO_P (REGNO) ? 'l' : 'w', \ reg_names[REGNO]) ! /* This is how to output an element of a case-vector that is absolute. */ #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ fprintf (FILE, "\tds.w L%d\n", VALUE) *************** enum reg_class { *** 1438,1471 **** ( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 10), \ sprintf ((OUTPUT), "%s.%d", (NAME), (LABELNO))) ! /* Output an arg count before function entries. */ #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ asm_declare_function_name (FILE, NAME, DECL) - /* Define the parentheses used to group arithmetic operations - in assembler code. */ - - #define ASM_OPEN_PAREN "(" - #define ASM_CLOSE_PAREN ")" - - /* Define results of standard character escape sequences. */ - #define TARGET_BELL 007 - #define TARGET_BS 010 - #define TARGET_TAB 011 - #define TARGET_NEWLINE 012 - #define TARGET_VT 013 - #define TARGET_FF 014 - #define TARGET_CR 015 - /* Print an instruction operand X on file FILE. CODE is the code from the %-spec that requested printing this operand; ! if `%z3' was used to print operand 3, then CODE is 'z'. */ #define PRINT_OPERAND(FILE, X, CODE) \ print_operand (FILE, X, CODE) ! /* Print a memory operand whose address is X, on file FILE. */ #define PRINT_OPERAND_ADDRESS(FILE, ADDR) \ print_operand_address (FILE, ADDR) --- 1319,1337 ---- ( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 10), \ sprintf ((OUTPUT), "%s.%d", (NAME), (LABELNO))) ! /* Output an arg count before function entries. */ #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ asm_declare_function_name (FILE, NAME, DECL) /* Print an instruction operand X on file FILE. CODE is the code from the %-spec that requested printing this operand; ! if `%z3' was used to print operand 3, then CODE is 'z'. */ #define PRINT_OPERAND(FILE, X, CODE) \ print_operand (FILE, X, CODE) ! /* Print a memory operand whose address is X, on file FILE. */ #define PRINT_OPERAND_ADDRESS(FILE, ADDR) \ print_operand_address (FILE, ADDR) *************** enum reg_class { *** 1476,1482 **** #define FASCIST_ASSEMBLER /* __gcc_cleanup is loader-aliased to __ap$do_registered_functions if we ! are linking against standard libc, 0 if old (-traditional) libc. */ #define EXIT_BODY \ { \ --- 1342,1348 ---- #define FASCIST_ASSEMBLER /* __gcc_cleanup is loader-aliased to __ap$do_registered_functions if we ! are linking against standard libc, 0 if old (-traditional) libc. */ #define EXIT_BODY \ { \ *************** enum reg_class { *** 1487,1498 **** } /* Header for convex.c. ! Here at the end so we can use types defined above. */ extern int target_cpu; extern int current_section_is_text; ! extern enum reg_class regno_reg_class[]; ! extern enum reg_class reg_class_from_letter[]; extern char regno_ok_for_index_p_base[]; #define regno_ok_for_index_p (regno_ok_for_index_p_base + 1) --- 1353,1364 ---- } /* Header for convex.c. ! Here at the end so we can use types defined above. */ extern int target_cpu; extern int current_section_is_text; ! extern enum reg_class regno_reg_class[FIRST_PSEUDO_REGISTER]; ! extern enum reg_class reg_class_from_letter[256]; extern char regno_ok_for_index_p_base[]; #define regno_ok_for_index_p (regno_ok_for_index_p_base + 1) diff -Nrc3pad gcc-3.0.4/gcc/config/convex/convex.md gcc-3.1/gcc/config/convex/convex.md *** gcc-3.0.4/gcc/config/convex/convex.md Tue Sep 12 14:58:46 2000 --- gcc-3.1/gcc/config/convex/convex.md Sun Nov 11 01:48:55 2001 *************** *** 206,212 **** (define_insn "" [(set (match_operand:DF 0 "register_operand" "=d") (match_operand:DF 1 "const_double_operand" "F"))] ! "CONST_DOUBLE_MEM (operands[1]) == const0_rtx" "ld.u %u1,%0\;ld.w %v1,%0" [(set_attr "type" "xalu")]) --- 206,212 ---- (define_insn "" [(set (match_operand:DF 0 "register_operand" "=d") (match_operand:DF 1 "const_double_operand" "F"))] ! "mem_for_const_double (operands[1]) == 0" "ld.u %u1,%0\;ld.w %v1,%0" [(set_attr "type" "xalu")]) *************** *** 260,266 **** (define_insn "" [(set (match_operand:DI 0 "register_operand" "=d") (match_operand:DI 1 "const_double_operand" "F"))] ! "CONST_DOUBLE_MEM (operands[1]) == const0_rtx" "ld.u %u1,%0\;ld.w %v1,%0" [(set_attr "type" "xalu")]) --- 260,266 ---- (define_insn "" [(set (match_operand:DI 0 "register_operand" "=d") (match_operand:DI 1 "const_double_operand" "F"))] ! "mem_for_const_double (operands[1]) == 0" "ld.u %u1,%0\;ld.w %v1,%0" [(set_attr "type" "xalu")]) *************** *** 1309,1347 **** (define_insn "sqrtdf2" [(set (match_operand:DF 0 "register_operand" "=d") (sqrt:DF (match_operand:DF 1 "register_operand" "0")))] ! "! TARGET_C1 && flag_fast_math" "sqrt.d %0" [(set_attr "type" "divd")]) (define_insn "sqrtsf2" [(set (match_operand:SF 0 "register_operand" "=d") (sqrt:SF (match_operand:SF 1 "register_operand" "0")))] ! "! TARGET_C1 && flag_fast_math" "sqrt.s %0" [(set_attr "type" "divs")]) (define_insn "sindf2" [(set (match_operand:DF 0 "register_operand" "=d") (unspec:DF [(match_operand:DF 1 "register_operand" "0")] 1))] ! "! TARGET_C1 && flag_fast_math" "sin.d %0") (define_insn "sinsf2" [(set (match_operand:SF 0 "register_operand" "=d") (unspec:SF [(match_operand:SF 1 "register_operand" "0")] 1))] ! "! TARGET_C1 && flag_fast_math" "sin.s %0") (define_insn "cosdf2" [(set (match_operand:DF 0 "register_operand" "=d") (unspec:DF [(match_operand:DF 1 "register_operand" "0")] 2))] ! "! TARGET_C1 && flag_fast_math" "cos.d %0") (define_insn "cossf2" [(set (match_operand:SF 0 "register_operand" "=d") (unspec:SF [(match_operand:SF 1 "register_operand" "0")] 2))] ! "! TARGET_C1 && flag_fast_math" "cos.s %0") (define_insn "ftruncdf2" --- 1309,1347 ---- (define_insn "sqrtdf2" [(set (match_operand:DF 0 "register_operand" "=d") (sqrt:DF (match_operand:DF 1 "register_operand" "0")))] ! "! TARGET_C1 && flag_unsafe_math_optimizations" "sqrt.d %0" [(set_attr "type" "divd")]) (define_insn "sqrtsf2" [(set (match_operand:SF 0 "register_operand" "=d") (sqrt:SF (match_operand:SF 1 "register_operand" "0")))] ! "! TARGET_C1 && flag_unsafe_math_optimizations" "sqrt.s %0" [(set_attr "type" "divs")]) (define_insn "sindf2" [(set (match_operand:DF 0 "register_operand" "=d") (unspec:DF [(match_operand:DF 1 "register_operand" "0")] 1))] ! "! TARGET_C1 && flag_unsafe_math_optimizations" "sin.d %0") (define_insn "sinsf2" [(set (match_operand:SF 0 "register_operand" "=d") (unspec:SF [(match_operand:SF 1 "register_operand" "0")] 1))] ! "! TARGET_C1 && flag_unsafe_math_optimizations" "sin.s %0") (define_insn "cosdf2" [(set (match_operand:DF 0 "register_operand" "=d") (unspec:DF [(match_operand:DF 1 "register_operand" "0")] 2))] ! "! TARGET_C1 && flag_unsafe_math_optimizations" "cos.d %0") (define_insn "cossf2" [(set (match_operand:SF 0 "register_operand" "=d") (unspec:SF [(match_operand:SF 1 "register_operand" "0")] 2))] ! "! TARGET_C1 && flag_unsafe_math_optimizations" "cos.s %0") (define_insn "ftruncdf2" diff -Nrc3pad gcc-3.0.4/gcc/config/convex/proto.h gcc-3.1/gcc/config/convex/proto.h *** gcc-3.0.4/gcc/config/convex/proto.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/convex/proto.h Tue Jan 1 23:21:01 2002 *************** *** 0 **** --- 1,4 ---- + /* This header file is to avoid trouble with semi-ANSI header files + on the Convex in system version 8.0. */ + + #define _PROTO(list) () diff -Nrc3pad gcc-3.0.4/gcc/config/convex/x-convex gcc-3.1/gcc/config/convex/x-convex *** gcc-3.0.4/gcc/config/convex/x-convex Wed Dec 16 21:02:29 1998 --- gcc-3.1/gcc/config/convex/x-convex Thu Jan 1 00:00:00 1970 *************** *** 1,5 **** - # ld can make exe's c2-only if this lib is searched even though not loaded - CCLIBFLAGS = -tm c1 - - # Use -pcc to avoid surprises. - CC = cc -pcc --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/convex/xm-convex.h gcc-3.1/gcc/config/convex/xm-convex.h *** gcc-3.0.4/gcc/config/convex/xm-convex.h Thu Mar 15 19:02:02 2001 --- gcc-3.1/gcc/config/convex/xm-convex.h Thu Jan 1 00:00:00 1970 *************** *** 1,44 **** - /* Configuration for GNU C-compiler for Convex. - Copyright (C) 1989, 1993, 1997 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. */ - - /* target machine dependencies. - tm.h is a symbolic link to the actual target specific file. */ - #include "tm.h" - - /* This describes the machine the compiler is hosted on. */ - #define HOST_BITS_PER_CHAR 8 - #define HOST_BITS_PER_SHORT 16 - #define HOST_BITS_PER_INT 32 - #define HOST_BITS_PER_LONG 32 - #define HOST_BITS_PER_LONGLONG 64 - - /* Arguments to use with `exit'. */ - #define SUCCESS_EXIT_CODE 0 - #define FATAL_EXIT_CODE 33 - - /* Convex ships /tmp as a separate file system - thus it - usually has more free space than /usr/tmp */ - - #define P_tmpdir "/tmp/" - - /* Convex uses Vax or IEEE floats. - Both formats have Vax semantics. */ - - #define HOST_FLOAT_FORMAT VAX_FLOAT_FORMAT --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/cris/aout.h gcc-3.1/gcc/config/cris/aout.h *** gcc-3.0.4/gcc/config/cris/aout.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/cris/aout.h Sat Apr 13 19:16:42 2002 *************** *** 0 **** --- 1,422 ---- + /* Definitions for GCC. Part of the machine description for CRIS. + Copyright (C) 2001, 2002 Free Software Foundation, Inc. + Contributed by Axis Communications. Written by Hans-Peter Nilsson. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GCC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + /* After the first "Node:" comment comes all preprocessor directives and + attached declarations described in the info files, the "Using and + Porting GCC" manual (uapgcc), in the same order as found in the "Target + macros" section in the gcc-2.9x CVS edition of 2000-03-17. FIXME: Not + really, but needs an update anyway. + + There is no generic copy-of-uapgcc comment, you'll have to see uapgcc + for that. If applicable, there is a CRIS-specific comment. The order + of macro definitions follow the order in the manual. Every section in + the manual (node in the info pages) has an introductory `Node: + ' comment. If no macros are defined for a section, only + the section-comment is present. */ + + /* This file defines the macros for a.out that are not covered by cris.h. + Many macros are copied from elfos.h and should be in some generic + config/gas-aout.h. */ + + /* Node: Driver */ + + #undef STARTFILE_SPEC + #define STARTFILE_SPEC \ + "%{melinux:crt0.o%s}\ + %{!melinux:\ + %{sim2:s2crt0.o%s}\ + %{!sim2:\ + %{sim:scrt0.o%s}\ + %{!sim:%{pg:gcrt0.o%s}\ + %{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}}}}}" + + /* Which library to get. The only difference from the default is to get + libsc.a if -sim is given to the driver. Repeat -lc -lsysX + {X=sim,linux}, because libsysX needs (at least) errno from libc, and + then we want to resolve new unknowns in libc against libsysX, not + libnosys. Assume everything is in libc for -mlinux. */ + #undef LIB_SPEC + #define LIB_SPEC \ + "%{melinux:-lc -lsyslinux -lc -lsyslinux -lic}\ + %{!melinux:\ + %{sim*:-lc -lsyssim -lc -lsyssim}\ + %{!sim*:%{g*:-lg}\ + %{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p} -lbsp}\ + -lnosys}" + + #undef CRIS_CPP_SUBTARGET_SPEC + #define CRIS_CPP_SUBTARGET_SPEC \ + "-D__AOUT__\ + %{melinux:-D__gnu_linux__ -D__linux__ -D__unix__ -D__elinux__ -D__uclinux__\ + %{!nostdinc:\ + %{!mbest-lib-options:%{isystem*}}\ + -isystem elinux/include%s\ + %{mbest-lib-options:%{isystem*}}}\ + %{!ansi:%{!std=*:%{!undef:-Dlinux -Dunix -Delinux -Duclinux}}}}\ + %{mbest-lib-options:\ + %{!moverride-best-lib-options:\ + %{!march=*:%{!metrax*:%{!mcpu=*:-D__tune_v8 -D__CRIS_arch_tune=8}}}}}" + + #undef CRIS_CC1_SUBTARGET_SPEC + #define CRIS_CC1_SUBTARGET_SPEC \ + "%{mbest-lib-options:\ + %{!moverride-best-lib-options:\ + %{!march=*:%{!mcpu=*:-mtune=v8}}}}" + + #undef CRIS_ASM_SUBTARGET_SPEC + #define CRIS_ASM_SUBTARGET_SPEC "--em=crisaout" + + #undef CRIS_LINK_SUBTARGET_SPEC + #define CRIS_LINK_SUBTARGET_SPEC \ + "-mcrisaout\ + %{sim2:%{!T*:-Tdata 0x4000000 -Tbss 0x8000000}}\ + %{melinux:-Ur -d\ + %{!shlib:%{!symbolic:-Bstatic}}\ + %{shlib:-Bdynamic}\ + %{symbolic:-Bdynamic}\ + %{static:-Bstatic}}\ + %{melinux-stacksize=*:-defsym __Stacksize=%*}" + + #undef CRIS_SUBTARGET_SWITCHES + #define CRIS_SUBTARGET_SWITCHES \ + {"elinux", (TARGET_MASK_SVINTO \ + + TARGET_MASK_STACK_ALIGN \ + + TARGET_MASK_CONST_ALIGN \ + + TARGET_MASK_DATA_ALIGN \ + + TARGET_MASK_ETRAX4_ADD \ + + TARGET_MASK_ALIGN_BY_32), \ + N_("Compile for the MMU-less Etrax 100-based elinux system")}, \ + /* Legacy option. */ \ + {"aout", 0, ""}, + + #undef CRIS_SUBTARGET_LONG_OPTIONS + #define CRIS_SUBTARGET_LONG_OPTIONS \ + {"elinux-stacksize=", &cris_elinux_stacksize_str, \ + N_("For elinux, request a specified stack-size for this program")}, \ + + #undef CRIS_SUBTARGET_VERSION + #define CRIS_SUBTARGET_VERSION " - a.out" + + #undef CRIS_SUBTARGET_DEFAULT + #define CRIS_SUBTARGET_DEFAULT 0 + + /* Node: Storage Layout */ + + /* We can align to 16 bits (only) with CRIS a.out. */ + #define MAX_OFILE_ALIGNMENT 16 + + + /* Node: Library Calls */ + + #define TARGET_MEM_FUNCTIONS + + + /* Node: Data Output */ + + #define ESCAPES \ + "\1\1\1\1\1\1\1\1btn\1fr\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\ + \0\0\"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ + \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\\\0\0\0\ + \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\ + \1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\ + \1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\ + \1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\ + \1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1" + + /* Some svr4 assemblers have a limit on the number of characters which + can appear in the operand of a .string directive. If your assembler + has such a limitation, you should define STRING_LIMIT to reflect that + limit. Note that at least some svr4 assemblers have a limit on the + actual number of bytes in the double-quoted string, and that they + count each character in an escape sequence as one byte. Thus, an + escape sequence like \377 would count as four bytes. + + If your target assembler doesn't support the .string directive, you + should define this to zero. */ + + #define STRING_LIMIT ((unsigned) 256) + + #define STRING_ASM_OP "\t.string\t" + #define ASCII_DATA_ASM_OP "\t.ascii\t" + #define TYPE_ASM_OP "\t.type\t" + #define SIZE_ASM_OP "\t.size\t" + #define TYPE_OPERAND_FMT "@%s" + + /* The routine used to output NUL terminated strings. We use a special + version of this for most svr4 targets because doing so makes the + generated assembly code more compact (and thus faster to assemble) + as well as more readable, especially for targets like the i386 + (where the only alternative is to output character sequences as + comma separated lists of numbers). */ + + #define ASM_OUTPUT_LIMITED_STRING(FILE, STR) \ + do \ + { \ + register const unsigned char *_limited_str = \ + (const unsigned char *) (STR); \ + register unsigned ch; \ + \ + fprintf ((FILE), "%s\"", STRING_ASM_OP); \ + \ + for (; (ch = *_limited_str); _limited_str++) \ + { \ + register int escape; \ + \ + switch (escape = ESCAPES[ch]) \ + { \ + case 0: \ + putc (ch, (FILE)); \ + break; \ + case 1: \ + fprintf ((FILE), "\\%03o", ch); \ + break; \ + default: \ + putc ('\\', (FILE)); \ + putc (escape, (FILE)); \ + break; \ + } \ + } \ + \ + fprintf ((FILE), "\"\n"); \ + } \ + while (0) + + /* The routine used to output sequences of byte values. We use a special + version of this for most svr4 targets because doing so makes the + generated assembly code more compact (and thus faster to assemble) + as well as more readable. Note that if we find subparts of the + character sequence which end with NUL (and which are shorter than + STRING_LIMIT) we output those using ASM_OUTPUT_LIMITED_STRING. */ + + #undef ASM_OUTPUT_ASCII + #define ASM_OUTPUT_ASCII(FILE, STR, LENGTH) \ + do \ + { \ + register const unsigned char *_ascii_bytes = \ + (const unsigned char *) (STR); \ + register const unsigned char *limit = _ascii_bytes + (LENGTH); \ + register unsigned bytes_in_chunk = 0; \ + \ + for (; _ascii_bytes < limit; _ascii_bytes++) \ + { \ + register const unsigned char *p; \ + \ + if (bytes_in_chunk >= 60) \ + { \ + fprintf ((FILE), "\"\n"); \ + bytes_in_chunk = 0; \ + } \ + \ + for (p = _ascii_bytes; p < limit && *p != '\0'; p++) \ + continue; \ + \ + if (p < limit && (p - _ascii_bytes) <= (long)STRING_LIMIT) \ + { \ + if (bytes_in_chunk > 0) \ + { \ + fprintf ((FILE), "\"\n"); \ + bytes_in_chunk = 0; \ + } \ + \ + ASM_OUTPUT_LIMITED_STRING ((FILE), _ascii_bytes); \ + _ascii_bytes = p; \ + } \ + else \ + { \ + register int escape; \ + register unsigned ch; \ + \ + if (bytes_in_chunk == 0) \ + fprintf ((FILE), "%s\"", ASCII_DATA_ASM_OP); \ + \ + switch (escape = ESCAPES[ch = *_ascii_bytes]) \ + { \ + case 0: \ + putc (ch, (FILE)); \ + bytes_in_chunk++; \ + break; \ + case 1: \ + fprintf ((FILE), "\\%03o", ch); \ + bytes_in_chunk += 4; \ + break; \ + default: \ + putc ('\\', (FILE)); \ + putc (escape, (FILE)); \ + bytes_in_chunk += 2; \ + break; \ + } \ + } \ + } \ + \ + if (bytes_in_chunk > 0) \ + fprintf ((FILE), "\"\n"); \ + } \ + while (0) + + + /* Node: Label Output */ + + #define SET_ASM_OP "\t.set\t" + + #define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, FUN) \ + ASM_GLOBALIZE_LABEL (FILE, XSTR (FUN, 0)) + + #define ASM_WEAKEN_LABEL(FILE, NAME) \ + do \ + { \ + fputs ("\t.weak\t", (FILE)); \ + assemble_name ((FILE), (NAME)); \ + fputc ('\n', (FILE)); \ + } \ + while (0) + + #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ + do \ + { \ + fprintf (FILE, "%s", TYPE_ASM_OP); \ + assemble_name (FILE, NAME); \ + putc (',', FILE); \ + fprintf (FILE, TYPE_OPERAND_FMT, "function"); \ + putc ('\n', FILE); \ + \ + ASM_OUTPUT_LABEL(FILE, NAME); \ + } \ + while (0) + + #define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL) \ + do \ + { \ + fprintf (FILE, "%s", TYPE_ASM_OP); \ + assemble_name (FILE, NAME); \ + putc (',', FILE); \ + fprintf (FILE, TYPE_OPERAND_FMT, "object"); \ + putc ('\n', FILE); \ + \ + size_directive_output = 0; \ + \ + if (!flag_inhibit_size_directive \ + && (DECL) && DECL_SIZE (DECL)) \ + { \ + size_directive_output = 1; \ + fprintf (FILE, "%s", SIZE_ASM_OP); \ + assemble_name (FILE, NAME); \ + putc (',', FILE); \ + fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, \ + int_size_in_bytes (TREE_TYPE (DECL))); \ + fputc ('\n', FILE); \ + } \ + \ + ASM_OUTPUT_LABEL (FILE, NAME); \ + } \ + while (0) + + #define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END)\ + do \ + { \ + const 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, "%s", SIZE_ASM_OP); \ + assemble_name (FILE, name); \ + putc (',', FILE); \ + fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, \ + int_size_in_bytes (TREE_TYPE (DECL))); \ + fputc ('\n', FILE); \ + } \ + } \ + while (0) + + #define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL) \ + do \ + { \ + if (!flag_inhibit_size_directive) \ + { \ + char label[256]; \ + static int labelno; \ + \ + labelno++; \ + \ + ASM_GENERATE_INTERNAL_LABEL (label, "Lfe", labelno); \ + ASM_OUTPUT_INTERNAL_LABEL (FILE, "Lfe", labelno); \ + \ + fprintf (FILE, "%s", SIZE_ASM_OP); \ + assemble_name (FILE, (FNAME)); \ + fprintf (FILE, ","); \ + assemble_name (FILE, label); \ + fprintf (FILE, "-"); \ + assemble_name (FILE, (FNAME)); \ + putc ('\n', FILE); \ + } \ + } \ + while (0) + + + /* Node: Alignment Output */ + + #define SKIP_ASM_OP "\t.zero\t" + + #undef ASM_OUTPUT_SKIP + #define ASM_OUTPUT_SKIP(FILE, SIZE) \ + fprintf (FILE, "%s%u\n", SKIP_ASM_OP, (SIZE)) + + /* Node: All Debuggers */ + + #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG + + + /* Node: Misc */ + + #define HANDLE_SYSV_PRAGMA + + /* In theory, this one isn't necessary, but over time, external tools have + been primed on names with "." rather than "$". */ + #define NO_DOLLAR_IN_LABEL + + /* These are undocumented, but to keep a single + CRIS_ASM_OUTPUT_ALIGNED_DECL_COMMON, we set this to an asm that will + emit an error if ever output. It will not be emitted for a.out modulo + careless hacking. */ + #define COMMON_ASM_OP "\t.err\t" + #define LOCAL_ASM_OP "\t.err\t" + + #if defined(__CRIS__) && defined (__AOUT__) && defined (IN_GCC) + + #define CRIS_ABI_VERSION_SYMBOL_STRING ".$CRIS_ABI_V2" + + /* Make all a.out library functions have undefined references to the + .$CRIS_ABI_V2 symbol, so it will be picked up. Used by GDB. GDB has + a bug with reading a.out symbols; it does not see the GNU weak + extensions, so we can't have .$CRIS_ABI_V2 weak. Weak. */ + __asm__ (".set .$abi_referer," CRIS_ABI_VERSION_SYMBOL_STRING); + #endif + + /* + * Local variables: + * eval: (c-set-style "gnu") + * indent-tabs-mode: t + * End: + */ diff -Nrc3pad gcc-3.0.4/gcc/config/cris/arit.c gcc-3.1/gcc/config/cris/arit.c *** gcc-3.0.4/gcc/config/cris/arit.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/cris/arit.c Fri Oct 12 19:44:38 2001 *************** *** 0 **** --- 1,302 ---- + /* Signed and unsigned multiplication and division and modulus for CRIS. + Contributed by Axis Communications. + Written by Hans-Peter Nilsson , c:a 1992. + + Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) any + later version. + + In addition to the permissions in the GNU General Public License, the + Free Software Foundation gives you unlimited permission to link the + compiled version of this file with other programs, and to distribute + those programs without any restriction coming from the use of this + file. (The General Public License restrictions do apply in other + respects; for example, they cover modification of the file, and + distribution when not linked into another program.) + + This file 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; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + + As a special exception, if you link this library with files, some of + which are compiled with GCC, this library does not by itself cause + the resulting object or executable to be covered by the GNU General + Public License. + This exception does not however invalidate any other reasons why + the executable file or object might be covered by the GNU General + Public License. */ + + + /* Note that we provide prototypes for all "const" functions, to attach + the const attribute. This is necessary in 2.7.2 - adding the + attribute to the function *definition* is a syntax error. + This did not work with e.g. 2.1; back then, the return type had to + be "const". */ + + #include "config.h" + + #if defined (__CRIS_arch_version) && __CRIS_arch_version >= 3 + #define LZ(v) __extension__ \ + ({ int tmp_; __asm__ ("lz %1,%0" : "=r" (tmp_) : "r" (v)); tmp_; }) + #endif + + + #if defined (L_udivsi3) || defined (L_divsi3) || defined (L_umodsi3) \ + || defined (L_modsi3) + /* Result type of divmod worker function. */ + struct quot_rem + { + long quot; + long rem; + }; + + /* This is the worker function for div and mod. It is inlined into the + respective library function. */ + static __inline__ struct quot_rem + do_31div (unsigned long a, unsigned long b) __attribute__ ((__const__)); + + static __inline__ struct quot_rem + do_31div (unsigned long a, unsigned long b) + { + /* Adjust operands and result if a is 31 bits. */ + long extra = 0; + int quot_digits = 0; + + if (b == 0) + { + struct quot_rem ret; + ret.quot = 0xffffffff; + ret.rem = 0xffffffff; + return ret; + } + + if (a < b) + return (struct quot_rem) { 0, a }; + + #ifdef LZ + if (b <= a) + { + quot_digits = LZ (b) - LZ (a); + quot_digits += (a >= (b << quot_digits)); + b <<= quot_digits; + } + #else + while (b <= a) + { + b <<= 1; + quot_digits++; + } + #endif + + /* Is a 31 bits? Note that bit 31 is handled by the caller. */ + if (a & 0x40000000) + { + /* Then make b:s highest bit max 0x40000000, because it must have + been 0x80000000 to be 1 bit higher than a. */ + b >>= 1; + + /* Adjust a to be maximum 0x3fffffff, i.e. two upper bits zero. */ + if (a >= b) + { + a -= b; + extra = 1 << (quot_digits - 1); + } + else + { + a -= b >> 1; + + /* Remember that we adjusted a by subtracting b * 2 ** Something. */ + extra = 1 << quot_digits; + } + + /* The number of quotient digits will be one less, because + we just adjusted b. */ + quot_digits--; + } + + /* Now do the division part. */ + + /* Subtract b and add ones to the right when a >= b + i.e. "a - (b - 1) == (a - b) + 1". */ + b--; + + #define DS __asm__ ("dstep %2,%0" : "=r" (a) : "0" (a), "r" (b)) + + switch (quot_digits) + { + case 32: DS; case 31: DS; case 30: DS; case 29: DS; + case 28: DS; case 27: DS; case 26: DS; case 25: DS; + case 24: DS; case 23: DS; case 22: DS; case 21: DS; + case 20: DS; case 19: DS; case 18: DS; case 17: DS; + case 16: DS; case 15: DS; case 14: DS; case 13: DS; + case 12: DS; case 11: DS; case 10: DS; case 9: DS; + case 8: DS; case 7: DS; case 6: DS; case 5: DS; + case 4: DS; case 3: DS; case 2: DS; case 1: DS; + case 0:; + } + + { + struct quot_rem ret; + ret.quot = (a & ((1 << quot_digits) - 1)) + extra; + ret.rem = a >> quot_digits; + return ret; + } + } + + /* Note that unsigned and signed division both build when L_divsi3, but + the unsigned variant is then inlined, as with do_31div above. */ + #if defined (L_udivsi3) || defined (L_divsi3) + #ifndef L_udivsi3 + static __inline__ + #endif + unsigned long + __Udiv (unsigned long a, unsigned long b) __attribute__ ((__const__)); + + #ifndef L_udivsi3 + static __inline__ + #endif + unsigned long + __Udiv (unsigned long a, unsigned long b) + { + long extra = 0; + + /* Adjust operands and result, if a and/or b is 32 bits. */ + /* Effectively: b & 0x80000000. */ + if ((long) b < 0) + return a >= b; + + /* Effectively: a & 0x80000000. */ + if ((long) a < 0) + { + int tmp = 0; + + if (b == 0) + return 0xffffffff; + #ifdef LZ + tmp = LZ (b); + #else + for (tmp = 31; (((long) b & (1 << tmp)) == 0); tmp--) + ; + + tmp = 31 - tmp; + #endif + + if ((b << tmp) > a) + { + extra = 1 << (tmp-1); + a -= b << (tmp - 1); + } + else + { + extra = 1 << tmp; + a -= b << tmp; + } + } + + return do_31div (a, b).quot+extra; + } + + + #ifdef L_divsi3 + long + __Div (long a, long b) __attribute__ ((__const__)); + + long + __Div (long a, long b) + { + long sign; + long result; + + /* Do *not* call do_31div since abs (-2147483648) == 2147483648 + <=> abs (-0x80000000) == 0x80000000 + which is still 32 bits. */ + + sign = a ^ b; + result = __Udiv (__builtin_labs (a), __builtin_labs (b)); + + return (sign < 0) ? -result : result; + } + #endif /* L_divsi3 */ + #endif /* L_udivsi3 || L_divsi3 */ + + + /* Note that unsigned and signed modulus both build when L_modsi3, but + then the unsigned variant is inlined, as with do_31div above. */ + #if defined (L_umodsi3) || defined (L_modsi3) + #ifndef L_umodsi3 + static __inline__ + #endif + unsigned long + __Umod (unsigned long a, unsigned long b) __attribute__ ((__const__)); + + #ifndef L_umodsi3 + static __inline__ + #endif + unsigned long + __Umod (unsigned long a, unsigned long b) + { + /* Adjust operands and result if a and/or b is 32 bits. */ + if ((long) b < 0) + return a >= b ? a - b : a; + + if ((long) a < 0) + { + int tmp = 0; + + if (b == 0) + return a; + #ifdef LZ + tmp = LZ (b); + #else + for (tmp = 31; (((long) b & (1 << tmp)) == 0); tmp--) + ; + tmp = 31 - tmp; + #endif + + if ((b << tmp) > a) + { + a -= b << (tmp - 1); + } + else + { + a -= b << tmp; + } + } + + return do_31div (a, b).rem; + } + + #ifdef L_modsi3 + long + __Mod (long a, long b) __attribute__ ((__const__)); + + long + __Mod (long a, long b) + { + long result; + + result = __Umod (__builtin_labs (a), __builtin_labs (b)); + + return (a < 0) ? -result : result; + } + #endif /* L_modsi3 */ + #endif /* L_umodsi3 || L_modsi3 */ + #endif /* L_udivsi3 || L_divsi3 || L_umodsi3 || L_modsi3 */ + + /* + * Local variables: + * eval: (c-set-style "gnu") + * indent-tabs-mode: t + * End: + */ diff -Nrc3pad gcc-3.0.4/gcc/config/cris/cris-protos.h gcc-3.1/gcc/config/cris/cris-protos.h *** gcc-3.0.4/gcc/config/cris/cris-protos.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/cris/cris-protos.h Thu Oct 11 17:02:36 2001 *************** *** 0 **** --- 1,75 ---- + /* Definitions for GCC. Part of the machine description for CRIS. + Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. + Contributed by Axis Communications. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GCC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + /* Prototypes for the CRIS port. */ + + #if defined(FILE) || defined(stdin) || defined(stdout) || defined(getc) || defined(putc) + #define STDIO_INCLUDED + #endif + + extern void cris_conditional_register_usage PARAMS ((void)); + extern int cris_simple_epilogue PARAMS ((void)); + #ifdef RTX_CODE + extern const char *cris_op_str PARAMS ((rtx)); + extern int cris_eligible_for_epilogue_delay PARAMS ((rtx)); + extern void cris_notice_update_cc PARAMS ((rtx, rtx)); + extern int cris_address_cost PARAMS ((rtx)); + extern void cris_print_operand PARAMS ((FILE *, rtx, int)); + extern void cris_print_operand_address PARAMS ((FILE *, rtx)); + extern int cris_side_effect_mode_ok PARAMS ((enum rtx_code, rtx *, int, int, + int, int, int)); + extern rtx cris_return_addr_rtx PARAMS ((int, rtx)); + extern rtx cris_split_movdx PARAMS ((rtx *)); + extern int cris_legitimate_pic_operand PARAMS ((rtx)); + extern int cris_gotless_symbol PARAMS ((rtx)); + extern int cris_got_symbol PARAMS ((rtx)); + extern int cris_symbol PARAMS ((rtx)); + extern void cris_output_addr_const PARAMS ((FILE *, rtx)); + extern int cris_cfun_uses_pic_table PARAMS ((void)); + extern void cris_target_asm_named_section + PARAMS ((const char *, unsigned int)); + + # ifdef TREE_CODE + extern rtx cris_expand_builtin_va_arg PARAMS ((tree, tree)); + extern void cris_encode_section_info PARAMS ((tree)); + # endif + #endif /* RTX_CODE */ + + #ifdef STDIO_INCLUDED + # ifdef TREE_CODE + extern void cris_asm_output_mi_thunk PARAMS ((FILE *, tree, int, tree)); + # endif + #endif + + #ifdef GCC_C_PRAGMA_H + extern void cris_pragma_expand_mul PARAMS ((cpp_reader *)); + #endif + + /* Need one that returns an int; usable in expressions. */ + extern int cris_fatal PARAMS ((char *)); + + extern void cris_override_options PARAMS ((void)); + + extern int cris_initial_elimination_offset PARAMS ((int, int)); + + extern void cris_init_expanders PARAMS ((void)); + + extern int cris_delay_slots_for_epilogue PARAMS ((void)); diff -Nrc3pad gcc-3.0.4/gcc/config/cris/cris.c gcc-3.1/gcc/config/cris/cris.c *** gcc-3.0.4/gcc/config/cris/cris.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/cris/cris.c Thu Apr 11 15:16:18 2002 *************** *** 0 **** --- 1,3141 ---- + /* Definitions for GCC. Part of the machine description for CRIS. + Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + Contributed by Axis Communications. Written by Hans-Peter Nilsson. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GCC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + #include "config.h" + #include "system.h" + #include "rtl.h" + #include "regs.h" + #include "hard-reg-set.h" + #include "real.h" + #include "insn-config.h" + #include "conditions.h" + #include "insn-attr.h" + #include "flags.h" + #include "tree.h" + #include "expr.h" + #include "except.h" + #include "function.h" + #include "toplev.h" + #include "recog.h" + #include "tm_p.h" + #include "debug.h" + #include "output.h" + #include "target.h" + #include "target-def.h" + + /* Usable when we have an amount to add or subtract, and want the + optimal size of the insn. */ + #define ADDITIVE_SIZE_MODIFIER(size) \ + ((size) <= 63 ? "q" : (size) <= 255 ? "u.b" : (size) <= 65535 ? "u.w" : ".d") + + #define ASSERT_PLT_UNSPEC(x) \ + do \ + { \ + if (XEXP (x, 1) != NULL_RTX \ + || (GET_CODE (XVECEXP (x, 0, 0)) != SYMBOL_REF \ + && GET_CODE (XVECEXP (x, 0, 0)) != LABEL_REF)) \ + abort (); \ + } while (0) + + #define LOSE_AND_RETURN(msgid, x) \ + do \ + { \ + cris_operand_lossage (msgid, x); \ + return; \ + } while (0) + + /* Per-function machine data. */ + struct machine_function + { + int needs_return_address_on_stack; + }; + + /* This little fix suppresses the 'u' or 's' when '%e' in assembly + pattern. */ + static char cris_output_insn_is_bound = 0; + + /* This one suppresses printing out the "rPIC+" in + "rPIC+sym:GOTOFF+offset" when doing PIC. For a PLT symbol, it + suppresses outputting it as [rPIC+sym:GOTPLT] and outputs similarly + just the "sym:GOTOFF" part. */ + static int cris_pic_sympart_only = 0; + + /* Fix for reg_overlap_mentioned_p. */ + static int cris_reg_overlap_mentioned_p PARAMS ((rtx, rtx)); + + static void cris_print_base PARAMS ((rtx, FILE *)); + + static void cris_print_index PARAMS ((rtx, FILE *)); + + static void cris_init_machine_status PARAMS ((struct function *)); + + static int cris_initial_frame_pointer_offset PARAMS ((void)); + + static int saved_regs_mentioned PARAMS ((rtx)); + + static void cris_target_asm_function_prologue + PARAMS ((FILE *, HOST_WIDE_INT)); + + static void cris_target_asm_function_epilogue + PARAMS ((FILE *, HOST_WIDE_INT)); + + static void cris_operand_lossage PARAMS ((const char *, rtx)); + + /* The function cris_target_asm_function_epilogue puts the last insn to + output here. It always fits; there won't be a symbol operand. Used in + delay_slots_for_epilogue and function_epilogue. */ + static char save_last[80]; + + /* This is the argument from the "-max-stack-stackframe=" option. */ + const char *cris_max_stackframe_str; + + /* This is the argument from the "-march=" option. */ + const char *cris_cpu_str; + + /* This is the argument from the "-mtune=" option. */ + const char *cris_tune_str; + + /* This is the argument from the "-melinux-stacksize=" option. */ + const char *cris_elinux_stacksize_str; + + /* This is the parsed result of the "-max-stack-stackframe=" option. If + it (still) is zero, then there was no such option given. */ + int cris_max_stackframe = 0; + + /* This is the parsed result of the "-march=" option, if given. */ + int cris_cpu_version = CRIS_DEFAULT_CPU_VERSION; + + #undef TARGET_ASM_ALIGNED_HI_OP + #define TARGET_ASM_ALIGNED_HI_OP "\t.word\t" + #undef TARGET_ASM_ALIGNED_SI_OP + #define TARGET_ASM_ALIGNED_SI_OP "\t.dword\t" + #undef TARGET_ASM_ALIGNED_DI_OP + #define TARGET_ASM_ALIGNED_DI_OP "\t.quad\t" + + /* We need to define these, since the 2byte, 4byte, 8byte op:s are only + available in ELF. These "normal" pseudos do not have any alignment + constraints or side-effects. */ + #undef TARGET_ASM_UNALIGNED_HI_OP + #define TARGET_ASM_UNALIGNED_HI_OP TARGET_ASM_ALIGNED_HI_OP + + #undef TARGET_ASM_UNALIGNED_SI_OP + #define TARGET_ASM_UNALIGNED_SI_OP TARGET_ASM_ALIGNED_SI_OP + + #undef TARGET_ASM_UNALIGNED_DI_OP + #define TARGET_ASM_UNALIGNED_DI_OP TARGET_ASM_ALIGNED_DI_OP + + #undef TARGET_ASM_FUNCTION_PROLOGUE + #define TARGET_ASM_FUNCTION_PROLOGUE cris_target_asm_function_prologue + + #undef TARGET_ASM_FUNCTION_EPILOGUE + #define TARGET_ASM_FUNCTION_EPILOGUE cris_target_asm_function_epilogue + + struct gcc_target targetm = TARGET_INITIALIZER; + + /* Predicate functions. */ + + /* This checks a part of an address, the one that is not a plain register + for an addressing mode using BDAP. + Allowed operands is either: + a) a register + b) a CONST operand (but not a symbol when generating PIC) + c) a [r] or [r+] in SImode, or sign-extend from HI or QI. */ + + int + cris_bdap_operand (op, mode) + rtx op; + enum machine_mode mode; + { + register enum rtx_code code = GET_CODE (op); + + if (mode != SImode && (mode != VOIDmode || GET_MODE (op) != VOIDmode)) + return 0; + + /* Just return whether this is a simple register or constant. */ + if (register_operand (op, mode) + || (CONSTANT_P (op) && !(flag_pic && cris_symbol (op)))) + return 1; + + /* Is it a [r] or possibly a [r+]? */ + if (code == MEM) + { + rtx tem = XEXP (op, 0); + + if (mode == SImode + && (register_operand (tem, SImode) + || (GET_CODE (tem) == POST_INC + && register_operand (XEXP (tem, 0), SImode)))) + return 1; + else + return 0; + } + + /* Perhaps a sign-extended mem: [r].(b|w) or [r+].(b|w)? */ + if (code == SIGN_EXTEND) + { + rtx tem = XEXP (op, 0); + + if (GET_CODE (tem) != MEM) + return 0; + + tem = XEXP (tem, 0); + if (mode == SImode + && (register_operand (tem, SImode) + || (GET_CODE (tem) == POST_INC + && register_operand (XEXP (tem, 0), SImode)))) + return 1; + else + return 0; + } + + return 0; + } + + /* This is similar to cris_bdap_operand: + It checks a part of an address, the one that is not a plain register + for an addressing mode using BDAP *or* BIAP. + Allowed operands is either: + a) a register + b) a CONST operand (but not a symbol when generating PIC) + c) a mult of (1, 2 or 4) and a register + d) a [r] or [r+] in SImode, or sign-extend from HI or QI. */ + + int + cris_bdap_biap_operand (op, mode) + rtx op; + enum machine_mode mode; + { + register enum rtx_code code = GET_CODE (op); + rtx reg; + rtx val; + + /* Check for bdap operand. */ + if (cris_bdap_operand (op, mode)) + return 1; + + if (mode != SImode && (mode != VOIDmode || GET_MODE (op) != VOIDmode)) + return 0; + + /* Check that we're looking at a BIAP operand. */ + if (code != MULT) + return 0; + + /* Canonicalize register and multiplicand. */ + if (GET_CODE (XEXP (op, 0)) == CONST_INT) + { + val = XEXP (op, 0); + reg = XEXP (op, 1); + } + else + { + val = XEXP (op, 1); + reg = XEXP (op, 0); + } + + /* Check that the operands are correct after canonicalization. */ + if (! register_operand (reg, SImode) || GET_CODE (val) != CONST_INT) + return 0; + + /* Check that the multiplicand has a valid value. */ + if ((code == MULT + && (INTVAL (val) == 1 || INTVAL (val) == 2 || INTVAL (val) == 4))) + return 1; + + return 0; + } + + /* Check if MODE is same as mode for X, and X is PLUS, MINUS, IOR or + AND or UMIN. */ + + int + cris_orthogonal_operator (x, mode) + rtx x; + enum machine_mode mode; + { + enum rtx_code code = GET_CODE (x); + + if (mode == VOIDmode) + mode = GET_MODE (x); + + return (GET_MODE (x) == mode + && (code == PLUS || code == MINUS + || code == IOR || code == AND || code == UMIN)); + } + + /* Check if MODE is same as mode for X, and X is PLUS, IOR or AND or + UMIN. */ + + int + cris_commutative_orth_op (x, mode) + rtx x; + enum machine_mode mode; + { + enum rtx_code code = GET_CODE (x); + + if (mode == VOIDmode) + mode = GET_MODE (x); + + return (GET_MODE (x) == mode && + (code == PLUS + || code == IOR || code == AND || code == UMIN)); + } + + /* Check if MODE is same as mode for X, and X is PLUS or MINUS or UMIN. */ + + int + cris_operand_extend_operator (x, mode) + rtx x; + enum machine_mode mode; + { + enum rtx_code code = GET_CODE (x); + + if (mode == VOIDmode) + mode = GET_MODE (x); + + return (GET_MODE (x) == mode + && (code == PLUS || code == MINUS || code == UMIN)); + } + + /* Check to see if MODE is same as mode for X, and X is SIGN_EXTEND or + ZERO_EXTEND. */ + + int + cris_extend_operator (x, mode) + rtx x; + enum machine_mode mode; + { + enum rtx_code code = GET_CODE (x); + + if (mode == VOIDmode) + mode = GET_MODE (x); + + return + (GET_MODE (x) == mode && (code == SIGN_EXTEND || code == ZERO_EXTEND)); + } + + /* Check to see if MODE is same as mode for X, and X is PLUS or BOUND. */ + + int + cris_plus_or_bound_operator (x, mode) + rtx x; + enum machine_mode mode; + { + enum rtx_code code = GET_CODE (x); + + if (mode == VOIDmode) + mode = GET_MODE (x); + + return + (GET_MODE (x) == mode && (code == UMIN || code == PLUS)); + } + + /* Since with -fPIC, not all symbols are valid PIC symbols or indeed + general_operands, we have to have a predicate that matches it for the + "movsi" expander. */ + + int + cris_general_operand_or_symbol (op, mode) + rtx op; + enum machine_mode mode; + { + return general_operand (op, mode) + || (CONSTANT_P (op) && cris_symbol (op)); + } + + /* Since a PIC symbol without a GOT entry is not a general_operand, we + have to have a predicate that matches it. We use this in the expanded + "movsi" anonymous pattern for PIC symbols. */ + + int + cris_general_operand_or_gotless_symbol (op, mode) + rtx op; + enum machine_mode mode; + { + return general_operand (op, mode) + || (CONSTANT_P (op) && cris_gotless_symbol (op)); + } + + /* Since a PLT symbol is not a general_operand, we have to have a + predicate that matches it when we need it. We use this in the expanded + "call" and "call_value" anonymous patterns. */ + + int + cris_general_operand_or_plt_symbol (op, mode) + rtx op; + enum machine_mode mode; + { + return general_operand (op, mode) + || (GET_CODE (op) == CONST + && GET_CODE (XEXP (op, 0)) == UNSPEC + && !TARGET_AVOID_GOTPLT); + } + + /* This matches a (MEM (general_operand)) or + (MEM (cris_general_operand_or_symbol)). The second one isn't a valid + memory_operand, so we need this predicate to recognize call + destinations before we change them to a PLT operand (by wrapping in + UNSPEC 0). */ + + int + cris_mem_call_operand (op, mode) + rtx op; + enum machine_mode mode; + { + rtx xmem; + + if (GET_CODE (op) != MEM) + return 0; + + if (memory_operand (op, mode)) + return 1; + + xmem = XEXP (op, 0); + + return cris_general_operand_or_symbol (xmem, GET_MODE (op)); + } + + /* The CONDITIONAL_REGISTER_USAGE worker. */ + + void + cris_conditional_register_usage () + { + /* FIXME: This isn't nice. We should be able to use that register for + something else if the PIC table isn't needed. */ + if (flag_pic) + fixed_regs[PIC_OFFSET_TABLE_REGNUM] + = call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1; + } + + /* Return current_function_uses_pic_offset_table. For use in cris.md, + since some generated files do not include function.h. */ + + int + cris_cfun_uses_pic_table () + { + return current_function_uses_pic_offset_table; + } + + /* Given an rtx, return the text string corresponding to the CODE of X. + Intended for use in the assembly language output section of a + define_insn. */ + + const char * + cris_op_str (x) + rtx x; + { + cris_output_insn_is_bound = 0; + switch (GET_CODE (x)) + { + case PLUS: + return "add"; + break; + + case MINUS: + return "sub"; + break; + + case MULT: + return "mul"; + break; + + case DIV: + return "div"; + break; + + case AND: + return "and"; + break; + + case IOR: + return "or"; + break; + + case XOR: + return "xor"; + break; + + case NOT: + return "not"; + break; + + case ASHIFT: + return "lsl"; + break; + + case LSHIFTRT: + return "lsr"; + break; + + case ASHIFTRT: + return "asr"; + break; + + case UMIN: + /* Used to control the sign/zero-extend character for the 'e' modifier. + BOUND has none. */ + cris_output_insn_is_bound = 1; + return "bound"; + break; + + default: + return "Unknown operator"; + break; + } + } + + /* Emit an error message when we're in an asm, and a fatal error for + "normal" insns. Formatted output isn't easily implemented, since we + use output_operand_lossage to output the actual message and handle the + categorization of the error. */ + + static void + cris_operand_lossage (msgid, op) + const char *msgid; + rtx op; + { + debug_rtx (op); + output_operand_lossage ("%s", msgid); + } + + /* Print an index part of an address to file. */ + + static void + cris_print_index (index, file) + rtx index; + FILE * file; + { + rtx inner = XEXP (index, 0); + + /* Make the index "additive" unless we'll output a negative number, in + which case the sign character is free (as in free beer). */ + if (GET_CODE (index) != CONST_INT || INTVAL (index) >= 0) + putc ('+', file); + + if (REG_P (index)) + fprintf (file, "$%s.b", reg_names[REGNO (index)]); + else if (CONSTANT_P (index)) + cris_output_addr_const (file, index); + else if (GET_CODE (index) == MULT) + { + fprintf (file, "$%s.", + reg_names[REGNO (XEXP (index, 0))]); + + putc (INTVAL (XEXP (index, 1)) == 2 ? 'w' : 'd', file); + } + else if (GET_CODE (index) == SIGN_EXTEND && + GET_CODE (inner) == MEM) + { + rtx inner_inner = XEXP (inner, 0); + + if (GET_CODE (inner_inner) == POST_INC) + { + fprintf (file, "[$%s+].", + reg_names[REGNO (XEXP (inner_inner, 0))]); + putc (GET_MODE (inner) == HImode ? 'w' : 'b', file); + } + else + { + fprintf (file, "[$%s].", reg_names[REGNO (inner_inner)]); + + putc (GET_MODE (inner) == HImode ? 'w' : 'b', file); + } + } + else if (GET_CODE (index) == MEM) + { + if (GET_CODE (inner) == POST_INC) + fprintf (file, "[$%s+].d", reg_names[REGNO (XEXP (inner, 0))]); + else + fprintf (file, "[$%s].d", reg_names[REGNO (inner)]); + } + else + cris_operand_lossage ("unexpected index-type in cris_print_index", + index); + } + + /* Print a base rtx of an address to file. */ + + static void + cris_print_base (base, file) + rtx base; + FILE *file; + { + if (REG_P (base)) + fprintf (file, "$%s", reg_names[REGNO (base)]); + else if (GET_CODE (base) == POST_INC) + fprintf (file, "$%s+", reg_names[REGNO (XEXP (base, 0))]); + else + cris_operand_lossage ("unexpected base-type in cris_print_base", + base); + } + + /* Usable as a guard in expressions. */ + + int + cris_fatal (arg) + char *arg; + { + internal_error (arg); + + /* We'll never get here; this is just to appease compilers. */ + return 0; + } + + /* Textual function prologue. */ + + static void + cris_target_asm_function_prologue (file, size) + FILE *file; + HOST_WIDE_INT size; + { + int regno; + + /* Shorten the used name for readability. */ + int cfoa_size = current_function_outgoing_args_size; + int last_movem_reg = -1; + int doing_dwarf = dwarf2out_do_frame (); + int framesize; + int faked_args_size = 0; + int cfa_write_offset = 0; + char *cfa_label = NULL; + int return_address_on_stack + = regs_ever_live[CRIS_SRP_REGNUM] + || cfun->machine->needs_return_address_on_stack != 0; + + /* Don't do anything if no prologues or epilogues are wanted. */ + if (!TARGET_PROLOGUE_EPILOGUE) + return; + + if (size < 0) + abort (); + + /* Align the size to what's best for the CPU model. */ + if (TARGET_STACK_ALIGN) + size = TARGET_ALIGN_BY_32 ? (size + 3) & ~3 : (size + 1) & ~1; + + if (current_function_pretend_args_size) + { + int pretend = current_function_pretend_args_size; + for (regno = CRIS_FIRST_ARG_REG + CRIS_MAX_ARGS_IN_REGS - 1; + pretend > 0; + regno--, pretend -= 4) + { + fprintf (file, "\tpush $%s\n", reg_names[regno]); + faked_args_size += 4; + } + } + + framesize = faked_args_size; + + if (doing_dwarf) + { + /* FIXME: Slightly redundant calculation, as we do the same in + pieces below. This offset must be the total adjustment of the + stack-pointer. We can then def_cfa call at the end of this + function with the current implementation of execute_cfa_insn, but + that wouldn't really be clean. */ + + int cfa_offset + = faked_args_size + + (return_address_on_stack ? 4 : 0) + + (frame_pointer_needed ? 4 : 0); + + int cfa_reg; + + if (frame_pointer_needed) + cfa_reg = FRAME_POINTER_REGNUM; + else + { + cfa_reg = STACK_POINTER_REGNUM; + cfa_offset += cris_initial_frame_pointer_offset (); + } + + cfa_label = dwarf2out_cfi_label (); + dwarf2out_def_cfa (cfa_label, cfa_reg, cfa_offset); + + cfa_write_offset = - faked_args_size - 4; + } + + /* Save SRP if not a leaf function. */ + if (return_address_on_stack) + { + fprintf (file, "\tPush $srp\n"); + framesize += 4; + + if (doing_dwarf) + { + dwarf2out_return_save (cfa_label, cfa_write_offset); + cfa_write_offset -= 4; + } + } + + /* Set up frame pointer if needed. */ + if (frame_pointer_needed) + { + fprintf (file, "\tpush $%s\n\tmove.d $sp,$%s\n", + reg_names[FRAME_POINTER_REGNUM], + reg_names[FRAME_POINTER_REGNUM]); + framesize += 4; + + if (doing_dwarf) + { + dwarf2out_reg_save (cfa_label, FRAME_POINTER_REGNUM, + cfa_write_offset); + cfa_write_offset -= 4; + } + } + + /* Local vars are located above saved regs. */ + cfa_write_offset -= size; + + /* Get a contiguous sequence of registers, starting with r0, that need + to be saved. */ + for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) + { + if ((((regs_ever_live[regno] + && !call_used_regs[regno]) + || (regno == (int) PIC_OFFSET_TABLE_REGNUM + && (current_function_uses_pic_offset_table + /* It is saved anyway, if there would be a gap. */ + || (flag_pic + && regs_ever_live[regno + 1] + && !call_used_regs[regno + 1])))) + && (regno != FRAME_POINTER_REGNUM || !frame_pointer_needed) + && regno != CRIS_SRP_REGNUM) + || (current_function_calls_eh_return + && (regno == EH_RETURN_DATA_REGNO (0) + || regno == EH_RETURN_DATA_REGNO (1) + || regno == EH_RETURN_DATA_REGNO (2) + || regno == EH_RETURN_DATA_REGNO (3)))) + { + /* Check if movem may be used for registers so far. */ + if (regno == last_movem_reg + 1) + /* Yes, update next expected register. */ + last_movem_reg++; + else + { + /* We cannot use movem for all registers. We have to flush + any movem:ed registers we got so far. */ + if (last_movem_reg != -1) + { + /* It is a win to use a side-effect assignment for + 64 <= size <= 128. But side-effect on movem was + not usable for CRIS v0..3. Also only do it if + side-effects insns are allowed. */ + if ((last_movem_reg + 1) * 4 + size >= 64 + && (last_movem_reg + 1) * 4 + size <= 128 + && cris_cpu_version >= CRIS_CPU_SVINTO + && TARGET_SIDE_EFFECT_PREFIXES) + fprintf (file, "\tmovem $%s,[$sp=$sp-%d]\n", + reg_names[last_movem_reg], + (last_movem_reg + 1) * 4 + size); + else + { + /* Avoid printing multiple subsequent sub:s for sp. */ + fprintf (file, "\tsub%s %d,$sp\n", + ADDITIVE_SIZE_MODIFIER ((last_movem_reg + 1) + * 4 + size), + (last_movem_reg + 1) * 4 + size); + + fprintf (file, "\tmovem $%s,[$sp]\n", + reg_names[last_movem_reg]); + } + + framesize += (last_movem_reg + 1) * 4 + size; + + if (TARGET_PDEBUG) + fprintf (file, "; frame %d, #regs %d, bytes %d args %d\n", + size, + last_movem_reg + 1, + (last_movem_reg + 1) * 4, + current_function_args_size); + + last_movem_reg = -1; + size = 0; + } + else if (size > 0) + { + /* Local vars on stack, but there are no movem:s. + Just allocate space. */ + fprintf (file, "\tSub%s %d,$sp\n", + ADDITIVE_SIZE_MODIFIER (size), + size); + framesize += size; + size = 0; + } + + fprintf (file, "\tPush $%s\n", reg_names[regno]); + framesize += 4; + } + + if (doing_dwarf) + { + /* Registers are stored lowest numbered at highest address, + which matches the loop order; we just need to update the + write-offset. */ + dwarf2out_reg_save (cfa_label, regno, cfa_write_offset); + cfa_write_offset -= 4; + } + } + } + + /* Check after, if we can movem all registers. This is the normal + case. */ + if (last_movem_reg != -1) + { + /* Side-effect assignment on movem was not supported for CRIS v0..3, + and don't do it if we're asked not to. + + The movem is already accounted for, for unwind. */ + + if ((last_movem_reg + 1) * 4 + size >= 64 + && (last_movem_reg + 1) * 4 + size <= 128 + && cris_cpu_version >= CRIS_CPU_SVINTO + && TARGET_SIDE_EFFECT_PREFIXES) + fprintf (file, "\tmovem $%s,[$sp=$sp-%d]\n", + reg_names[last_movem_reg], + (last_movem_reg+1) * 4 + size); + else + { + /* Avoid printing multiple subsequent sub:s for sp. FIXME: + Clean up the conditional expression. */ + fprintf (file, "\tsub%s %d,$sp\n", + ADDITIVE_SIZE_MODIFIER ((last_movem_reg + 1) * 4 + size), + (last_movem_reg + 1) * 4 + size); + /* To be compatible with v0..v3 means we do not use an assignment + addressing mode with movem. We normally don't need that + anyway. It would only be slightly more efficient for 64..128 + bytes frame size. */ + fprintf (file, "\tmovem $%s,[$sp]\n", reg_names[last_movem_reg]); + } + + framesize += (last_movem_reg + 1) * 4 + size; + + if (TARGET_PDEBUG) + fprintf (file, "; frame %d, #regs %d, bytes %d args %d\n", + size, + last_movem_reg + 1, + (last_movem_reg + 1) * 4, + current_function_args_size); + + /* We have to put outgoing argument space after regs. */ + if (cfoa_size) + { + /* This does not need to be accounted for, for unwind. */ + + fprintf (file, "\tSub%s %d,$sp\n", + ADDITIVE_SIZE_MODIFIER (cfoa_size), + cfoa_size); + framesize += cfoa_size; + } + } + else if ((size + cfoa_size) > 0) + { + /* This does not need to be accounted for, for unwind. */ + + /* Local vars on stack, and we could not use movem. Add a sub here. */ + fprintf (file, "\tSub%s %d,$sp\n", + ADDITIVE_SIZE_MODIFIER (size + cfoa_size), + cfoa_size + size); + framesize += size + cfoa_size; + } + + /* Set up the PIC register. */ + if (current_function_uses_pic_offset_table) + asm_fprintf (file, "\tmove.d $pc,$%s\n\tsub.d .:GOTOFF,$%s\n", + reg_names[PIC_OFFSET_TABLE_REGNUM], + reg_names[PIC_OFFSET_TABLE_REGNUM]); + + if (TARGET_PDEBUG) + fprintf (file, + "; parm #%d @ %d; frame %d, FP-SP is %d; leaf: %s%s; fp %s, outg: %d arg %d\n", + CRIS_MAX_ARGS_IN_REGS + 1, FIRST_PARM_OFFSET (0), + get_frame_size (), + cris_initial_frame_pointer_offset (), + leaf_function_p () ? "yes" : "no", + return_address_on_stack ? "no" :"yes", + frame_pointer_needed ? "yes" : "no", + cfoa_size, current_function_args_size); + + if (cris_max_stackframe && framesize > cris_max_stackframe) + warning ("stackframe too big: %d bytes", framesize); + } + + /* Return nonzero if there are regs mentioned in the insn that are not all + in the call_used regs. This is part of the decision whether an insn + can be put in the epilogue. */ + + static int + saved_regs_mentioned (x) + rtx x; + { + int i; + const char *fmt; + RTX_CODE code; + + /* Mainly stolen from refers_to_regno_p in rtlanal.c. */ + + code = GET_CODE (x); + + switch (code) + { + case REG: + i = REGNO (x); + return !call_used_regs[i]; + + case SUBREG: + /* If this is a SUBREG of a hard reg, we can see exactly which + registers are being modified. Otherwise, handle normally. */ + i = REGNO (SUBREG_REG (x)); + return !call_used_regs[i]; + + default: + ; + } + + fmt = GET_RTX_FORMAT (code); + for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) + { + if (fmt[i] == 'e') + { + if (saved_regs_mentioned (XEXP (x, i))) + return 1; + } + else if (fmt[i] == 'E') + { + int j; + for (j = XVECLEN (x, i) - 1; j >=0; j--) + if (saved_regs_mentioned (XEXP (x, i))) + return 1; + } + } + + return 0; + } + + /* Figure out if the insn may be put in the epilogue. */ + + int + cris_eligible_for_epilogue_delay (insn) + rtx insn; + { + /* First of all, it must be as slottable as for a delayed branch insn. */ + if (get_attr_slottable (insn) != SLOTTABLE_YES) + return 0; + + /* It must not refer to the stack pointer (may be valid for some cases + that I can't think of). */ + if (reg_mentioned_p (stack_pointer_rtx, PATTERN (insn))) + return 0; + + /* The frame pointer will be restored in the epilogue, before the + "ret", so it can't be referred to. */ + if (frame_pointer_needed + && reg_mentioned_p (frame_pointer_rtx, PATTERN (insn))) + return 0; + + /* All saved regs are restored before the delayed insn. + This means that we cannot have any instructions that mention the + registers that are restored by the epilogue. */ + if (saved_regs_mentioned (PATTERN (insn))) + return 0; + + /* It seems to be ok. */ + return 1; + } + + /* Return the number of delay-slots in the epilogue: return 1 if it + contains "ret", else 0. */ + + int + cris_delay_slots_for_epilogue () + { + /* Check if we use a return insn, which we only do for leaf functions. + Else there is no slot to fill. */ + if (regs_ever_live[CRIS_SRP_REGNUM] + || cfun->machine->needs_return_address_on_stack != 0) + return 0; + + /* By calling function_epilogue with the same parameters as from gcc + we can get info about if the epilogue can fill the delay-slot by itself. + If it is filled from the epilogue, then the corresponding string + is in save_last. + This depends on that the "size" argument to function_epilogue + always is get_frame_size. + FIXME: Kludgy. At least make it a separate function that is not + misnamed or abuses the stream parameter. */ + cris_target_asm_function_epilogue (NULL, get_frame_size ()); + + if (*save_last) + return 1; + return 0; + } + + /* Textual function epilogue. When file is NULL, it serves doubly as + a test for whether the epilogue can fill any "ret" delay-slots by + itself by storing the delay insn in save_last. */ + + static void + cris_target_asm_function_epilogue (file, size) + FILE *file; + HOST_WIDE_INT size; + { + int regno; + int last_movem_reg = -1; + rtx insn = get_last_insn (); + int argspace_offset = current_function_outgoing_args_size; + int pretend = current_function_pretend_args_size; + int return_address_on_stack + = regs_ever_live[CRIS_SRP_REGNUM] + || cfun->machine->needs_return_address_on_stack != 0; + + save_last[0] = 0; + + if (file && !TARGET_PROLOGUE_EPILOGUE) + return; + + if (TARGET_PDEBUG && file) + fprintf (file, ";;\n"); + + /* Align byte count of stack frame. */ + if (TARGET_STACK_ALIGN) + size = TARGET_ALIGN_BY_32 ? (size + 3) & ~3 : (size + 1) & ~1; + + /* If the last insn was a BARRIER, we don't have to write any code, + then all returns were covered by "return" insns. */ + if (GET_CODE (insn) == NOTE) + insn = prev_nonnote_insn (insn); + if (insn + && (GET_CODE (insn) == BARRIER + /* We must make sure that the insn really is a "return" and + not a conditional branch. Try to match the return exactly, + and if it doesn't match, assume it is a conditional branch + (and output an epilogue). */ + || (GET_CODE (insn) == JUMP_INSN + && GET_CODE (PATTERN (insn)) == RETURN))) + { + if (TARGET_PDEBUG && file) + fprintf (file, ";;;;;\n"); + return; + } + + /* Check how many saved regs we can movem. They start at r0 and must + be contiguous. */ + for (regno = 0; + regno < FIRST_PSEUDO_REGISTER; + regno++) + if ((((regs_ever_live[regno] + && !call_used_regs[regno]) + || (regno == (int) PIC_OFFSET_TABLE_REGNUM + && (current_function_uses_pic_offset_table + /* It is saved anyway, if there would be a gap. */ + || (flag_pic + && regs_ever_live[regno + 1] + && !call_used_regs[regno + 1])))) + && (regno != FRAME_POINTER_REGNUM || !frame_pointer_needed) + && regno != CRIS_SRP_REGNUM) + || (current_function_calls_eh_return + && (regno == EH_RETURN_DATA_REGNO (0) + || regno == EH_RETURN_DATA_REGNO (1) + || regno == EH_RETURN_DATA_REGNO (2) + || regno == EH_RETURN_DATA_REGNO (3)))) + + { + if (regno == last_movem_reg + 1) + last_movem_reg++; + else + break; + } + + for (regno = FIRST_PSEUDO_REGISTER - 1; + regno > last_movem_reg; + regno--) + if ((((regs_ever_live[regno] + && !call_used_regs[regno]) + || (regno == (int) PIC_OFFSET_TABLE_REGNUM + && (current_function_uses_pic_offset_table + /* It is saved anyway, if there would be a gap. */ + || (flag_pic + && regs_ever_live[regno + 1] + && !call_used_regs[regno + 1])))) + && (regno != FRAME_POINTER_REGNUM || !frame_pointer_needed) + && regno != CRIS_SRP_REGNUM) + || (current_function_calls_eh_return + && (regno == EH_RETURN_DATA_REGNO (0) + || regno == EH_RETURN_DATA_REGNO (1) + || regno == EH_RETURN_DATA_REGNO (2) + || regno == EH_RETURN_DATA_REGNO (3)))) + { + if (argspace_offset) + { + /* There is an area for outgoing parameters located before + the saved registers. We have to adjust for that. */ + if (file) + fprintf (file, "\tAdd%s %d,$sp\n", + ADDITIVE_SIZE_MODIFIER (argspace_offset), + argspace_offset); + + /* Make sure we only do this once. */ + argspace_offset = 0; + } + + /* Flush previous non-movem:ed registers. */ + if (*save_last && file) + fprintf (file, save_last); + sprintf (save_last, "\tPop $%s\n", reg_names[regno]); + } + + if (last_movem_reg != -1) + { + if (argspace_offset) + { + /* Adjust for the outgoing parameters area, if that's not + handled yet. */ + if (*save_last && file) + { + fprintf (file, save_last); + *save_last = 0; + } + + if (file) + fprintf (file, "\tAdd%s %d,$sp\n", + ADDITIVE_SIZE_MODIFIER (argspace_offset), + argspace_offset); + argspace_offset = 0; + } + /* Flush previous non-movem:ed registers. */ + else if (*save_last && file) + fprintf (file, save_last); + sprintf (save_last, "\tmovem [$sp+],$%s\n", reg_names[last_movem_reg]); + } + + /* Restore frame pointer if necessary. */ + if (frame_pointer_needed) + { + if (*save_last && file) + fprintf (file, save_last); + + if (file) + fprintf (file, "\tmove.d $%s,$sp\n", + reg_names[FRAME_POINTER_REGNUM]); + sprintf (save_last, "\tPop $%s\n", + reg_names[FRAME_POINTER_REGNUM]); + } + else + { + /* If there was no frame-pointer to restore sp from, we must + explicitly deallocate local variables. */ + + /* Handle space for outgoing parameters that hasn't been handled + yet. */ + size += argspace_offset; + + if (size) + { + if (*save_last && file) + fprintf (file, save_last); + + sprintf (save_last, "\tadd%s %d,$sp\n", + ADDITIVE_SIZE_MODIFIER (size), size); + } + + /* If the size was not in the range for a "quick", we must flush + it here. */ + if (size > 63) + { + if (file) + fprintf (file, save_last); + *save_last = 0; + } + } + + /* If this function has no pushed register parameters + (stdargs/varargs), and if it is not a leaf function, then we can + just jump-return here. */ + if (return_address_on_stack && pretend == 0) + { + if (*save_last && file) + fprintf (file, save_last); + *save_last = 0; + + if (file) + { + if (current_function_calls_eh_return) + { + /* The installed EH-return address is in *this* frame, so we + need to pop it before we return. */ + fprintf (file, "\tpop $srp\n"); + fprintf (file, "\tret\n"); + fprintf (file, "\tadd.d $%s,$sp\n", reg_names[CRIS_STACKADJ_REG]); + } + else + fprintf (file, "\tJump [$sp+]\n"); + + /* Do a sanity check to avoid generating invalid code. */ + if (current_function_epilogue_delay_list) + internal_error ("allocated but unused delay list in epilogue"); + } + return; + } + + /* Rather than add current_function_calls_eh_return conditions + everywhere in the following code (and not be able to test it + thoroughly), assert the assumption that all usage of + __builtin_eh_return are handled above. */ + if (current_function_calls_eh_return) + internal_error ("unexpected function type needing stack adjustment for\ + __builtin_eh_return"); + + /* If we pushed some register parameters, then adjust the stack for + them. */ + if (pretend) + { + /* Since srp is stored on the way, we need to restore it first. */ + if (return_address_on_stack) + { + if (*save_last && file) + fprintf (file, save_last); + *save_last = 0; + + if (file) + fprintf (file, "\tpop $srp\n"); + } + + if (*save_last && file) + fprintf (file, save_last); + + sprintf (save_last, "\tadd%s %d,$sp\n", + ADDITIVE_SIZE_MODIFIER (pretend), pretend); + } + + /* Here's where we have a delay-slot we need to fill. */ + if (file && current_function_epilogue_delay_list) + { + /* If gcc has allocated an insn for the epilogue delay slot, but + things were arranged so we now thought we could do it + ourselves, don't forget to flush that insn. */ + if (*save_last) + fprintf (file, save_last); + + fprintf (file, "\tRet\n"); + + /* Output the delay-slot-insn the mandated way. */ + final_scan_insn (XEXP (current_function_epilogue_delay_list, 0), + file, 1, -2, 1); + } + else if (file) + { + fprintf (file, "\tRet\n"); + + /* If the GCC did not do it, we have to use whatever insn we have, + or a nop. */ + if (*save_last) + fprintf (file, save_last); + else + fprintf (file, "\tnOp\n"); + } + } + + /* The PRINT_OPERAND worker. */ + + void + cris_print_operand (file, x, code) + FILE *file; + rtx x; + int code; + { + rtx operand = x; + + /* Size-strings corresponding to MULT expressions. */ + static const char *mults[] = { "BAD:0", ".b", ".w", "BAD:3", ".d" }; + + /* New code entries should just be added to the switch below. If + handling is finished, just return. If handling was just a + modification of the operand, the modified operand should be put in + "operand", and then do a break to let default handling + (zero-modifier) output the operand. */ + + switch (code) + { + case 'b': + /* Print the unsigned supplied integer as if it was signed + and < 0, i.e print 255 or 65535 as -1, 254, 65534 as -2, etc. */ + if (GET_CODE (x) != CONST_INT + || ! CONST_OK_FOR_LETTER_P (INTVAL (x), 'O')) + LOSE_AND_RETURN ("invalid operand for 'b' modifier", x); + fprintf (file, "%d", INTVAL (x)| (INTVAL (x) <= 255 ? ~255 : ~65535)); + return; + + case 'x': + /* Print assembler code for operator. */ + fprintf (file, "%s", cris_op_str (operand)); + return; + + case 'v': + /* Print the operand without the PIC register. */ + if (! flag_pic || ! CONSTANT_P (x) || ! cris_gotless_symbol (x)) + LOSE_AND_RETURN ("invalid operand for 'v' modifier", x); + cris_pic_sympart_only++; + cris_output_addr_const (file, x); + cris_pic_sympart_only--; + return; + + case 'P': + /* Print the PIC register. Applied to a GOT-less PIC symbol for + sanity. */ + if (! flag_pic || ! CONSTANT_P (x) || ! cris_gotless_symbol (x)) + LOSE_AND_RETURN ("invalid operand for 'P' modifier", x); + fprintf (file, "$%s", reg_names [PIC_OFFSET_TABLE_REGNUM]); + return; + + case 'p': + /* Adjust a power of two to its log2. */ + if (GET_CODE (x) != CONST_INT || exact_log2 (INTVAL (x)) < 0 ) + LOSE_AND_RETURN ("invalid operand for 'p' modifier", x); + fprintf (file, "%d", exact_log2 (INTVAL (x))); + return; + + case 's': + /* For an integer, print 'b' or 'w' if <= 255 or <= 65535 + respectively. This modifier also terminates the inhibiting + effects of the 'x' modifier. */ + cris_output_insn_is_bound = 0; + if (GET_MODE (x) == VOIDmode && GET_CODE (x) == CONST_INT) + { + if (INTVAL (x) >= 0) + { + if (INTVAL (x) <= 255) + putc ('b', file); + else if (INTVAL (x) <= 65535) + putc ('w', file); + else + putc ('d', file); + } + else + putc ('d', file); + return; + } + + /* For a non-integer, print the size of the operand. */ + putc ((GET_MODE (x) == SImode || GET_MODE (x) == SFmode) + ? 'd' : GET_MODE (x) == HImode ? 'w' + : GET_MODE (x) == QImode ? 'b' + /* If none of the above, emit an erroneous size letter. */ + : 'X', + file); + return; + + case 'z': + /* Const_int: print b for -127 <= x <= 255, + w for -32768 <= x <= 65535, else abort. */ + if (GET_CODE (x) != CONST_INT + || INTVAL (x) < -32768 || INTVAL (x) > 65535) + LOSE_AND_RETURN ("invalid operand for 'z' modifier", x); + putc (INTVAL (x) >= -128 && INTVAL (x) <= 255 ? 'b' : 'w', file); + return; + + case '#': + /* Output a 'nop' if there's nothing for the delay slot. + This method stolen from the sparc files. */ + if (dbr_sequence_length () == 0) + fputs ("\n\tnop", file); + return; + + case 'H': + /* Print high (most significant) part of something. */ + switch (GET_CODE (operand)) + { + case CONST_INT: + if (HOST_BITS_PER_WIDE_INT == 32) + /* Sign-extension from a normal int to a long long. */ + fprintf (file, INTVAL (operand) < 0 ? "-1" : "0"); + else + fprintf (file, "0x%x", (unsigned int)(INTVAL (x) >> 31 >> 1)); + return; + + case CONST_DOUBLE: + /* High part of a long long constant. */ + if (GET_MODE (operand) == VOIDmode) + { + fprintf (file, "0x%x", CONST_DOUBLE_HIGH (x)); + return; + } + else + LOSE_AND_RETURN ("invalid operand for 'H' modifier", x); + + case REG: + /* Print reg + 1. Check that there's not an attempt to print + high-parts of registers like stack-pointer or higher. */ + if (REGNO (operand) > STACK_POINTER_REGNUM - 2) + LOSE_AND_RETURN ("bad register", operand); + fprintf (file, "$%s", reg_names[REGNO (operand) + 1]); + return; + + case MEM: + /* Adjust memory address to high part. */ + { + rtx adj_mem = operand; + int size + = GET_MODE_BITSIZE (GET_MODE (operand)) / BITS_PER_UNIT; + + /* Adjust so we can use two SImode in DImode. + Calling adj_offsettable_operand will make sure it is an + offsettable address. Don't do this for a postincrement + though; it should remain as it was. */ + if (GET_CODE (XEXP (adj_mem, 0)) != POST_INC) + adj_mem + = adjust_address (adj_mem, GET_MODE (adj_mem), size / 2); + + output_address (XEXP (adj_mem, 0)); + return; + } + + default: + LOSE_AND_RETURN ("invalid operand for 'H' modifier", x); + } + + case 'L': + /* Strip the MEM expression. */ + operand = XEXP (operand, 0); + break; + + case 'e': + /* Print 's' if operand is SIGN_EXTEND or 'u' if ZERO_EXTEND unless + cris_output_insn_is_bound is nonzero. */ + if (GET_CODE (operand) != SIGN_EXTEND + && GET_CODE (operand) != ZERO_EXTEND + && GET_CODE (operand) != CONST_INT) + LOSE_AND_RETURN ("invalid operand for 'e' modifier", x); + + if (cris_output_insn_is_bound) + { + cris_output_insn_is_bound = 0; + return; + } + + putc (GET_CODE (operand) == SIGN_EXTEND + || (GET_CODE (operand) == CONST_INT && INTVAL (operand) < 0) + ? 's' : 'u', file); + return; + + case 'm': + /* Print the size letter of the inner element. We can do it by + calling ourselves with the 's' modifier. */ + if (GET_CODE (operand) != SIGN_EXTEND && GET_CODE (operand) != ZERO_EXTEND) + LOSE_AND_RETURN ("invalid operand for 'm' modifier", x); + cris_print_operand (file, XEXP (operand, 0), 's'); + return; + + case 'M': + /* Print the least significant part of operand. */ + if (GET_CODE (operand) == CONST_DOUBLE) + { + fprintf (file, "0x%x", CONST_DOUBLE_LOW (x)); + return; + } + else if (HOST_BITS_PER_WIDE_INT > 32 && GET_CODE (operand) == CONST_INT) + { + fprintf (file, "0x%x", + INTVAL (x) & ((unsigned int) 0x7fffffff * 2 + 1)); + return; + } + /* Otherwise the least significant part equals the normal part, + so handle it normally. */ + break; + + case 'A': + /* When emitting an add for the high part of a DImode constant, we + want to use addq for 0 and adds.w for -1. */ + if (GET_CODE (operand) != CONST_INT) + LOSE_AND_RETURN ("invalid operand for 'A' modifier", x); + fprintf (file, INTVAL (operand) < 0 ? "adds.w" : "addq"); + return; + + case 'D': + /* When emitting an sub for the high part of a DImode constant, we + want to use subq for 0 and subs.w for -1. */ + if (GET_CODE (operand) != CONST_INT) + LOSE_AND_RETURN ("invalid operand for 'D' modifier", x); + fprintf (file, INTVAL (operand) < 0 ? "subs.w" : "subq"); + return; + + case 'S': + /* Print the operand as the index-part of an address. + Easiest way out is to use cris_print_index. */ + cris_print_index (operand, file); + return; + + case 'T': + /* Print the size letter for an operand to a MULT, which must be a + const_int with a suitable value. */ + if (GET_CODE (operand) != CONST_INT || INTVAL (operand) > 4) + LOSE_AND_RETURN ("invalid operand for 'T' modifier", x); + fprintf (file, "%s", mults[INTVAL (operand)]); + return; + + case 0: + /* No code, print as usual. */ + break; + + default: + LOSE_AND_RETURN ("invalid operand modifier letter", x); + } + + /* Print an operand as without a modifier letter. */ + switch (GET_CODE (operand)) + { + case REG: + if (REGNO (operand) > 15) + internal_error ("internal error: bad register: %d", REGNO (operand)); + fprintf (file, "$%s", reg_names[REGNO (operand)]); + return; + + case MEM: + output_address (XEXP (operand, 0)); + return; + + case CONST_DOUBLE: + if (GET_MODE (operand) == VOIDmode) + /* A long long constant. */ + output_addr_const (file, operand); + else + { + /* Only single precision is allowed as plain operands the + moment. FIXME: REAL_VALUE_FROM_CONST_DOUBLE isn't + documented. */ + REAL_VALUE_TYPE r; + long l; + + /* FIXME: Perhaps check overflow of the "single". */ + REAL_VALUE_FROM_CONST_DOUBLE (r, operand); + REAL_VALUE_TO_TARGET_SINGLE (r, l); + + fprintf (file, "0x%lx", l); + } + return; + + case UNSPEC: + ASSERT_PLT_UNSPEC (operand); + /* Fall through. */ + + case CONST: + cris_output_addr_const (file, operand); + return; + + case MULT: + case ASHIFT: + { + /* For a (MULT (reg X) const_int) we output "rX.S". */ + int i = GET_CODE (XEXP (operand, 1)) == CONST_INT + ? INTVAL (XEXP (operand, 1)) : INTVAL (XEXP (operand, 0)); + rtx reg = GET_CODE (XEXP (operand, 1)) == CONST_INT + ? XEXP (operand, 0) : XEXP (operand, 1); + + if (GET_CODE (reg) != REG + || (GET_CODE (XEXP (operand, 0)) != CONST_INT + && GET_CODE (XEXP (operand, 1)) != CONST_INT)) + LOSE_AND_RETURN ("unexpected multiplicative operand", x); + + cris_print_base (reg, file); + fprintf (file, ".%c", + i == 0 || (i == 1 && GET_CODE (operand) == MULT) ? 'b' + : i == 4 ? 'd' + : (i == 2 && GET_CODE (operand) == MULT) || i == 1 ? 'w' + : 'd'); + return; + } + + default: + /* No need to handle all strange variants, let output_addr_const + do it for us. */ + if (CONSTANT_P (operand)) + { + cris_output_addr_const (file, operand); + return; + } + + LOSE_AND_RETURN ("unexpected operand", x); + } + } + + /* The PRINT_OPERAND_ADDRESS worker. */ + + void + cris_print_operand_address (file, x) + FILE *file; + rtx x; + { + /* All these were inside MEM:s so output indirection characters. */ + putc ('[', file); + + if (CONSTANT_ADDRESS_P (x)) + cris_output_addr_const (file, x); + else if (BASE_OR_AUTOINCR_P (x)) + cris_print_base (x, file); + else if (GET_CODE (x) == PLUS) + { + rtx x1, x2; + + x1 = XEXP (x, 0); + x2 = XEXP (x, 1); + if (BASE_P (x1)) + { + cris_print_base (x1, file); + cris_print_index (x2, file); + } + else if (BASE_P (x2)) + { + cris_print_base (x2, file); + cris_print_index (x1, file); + } + else + LOSE_AND_RETURN ("unrecognized address", x); + } + else if (GET_CODE (x) == MEM) + { + /* A DIP. Output more indirection characters. */ + putc ('[', file); + cris_print_base (XEXP (x, 0), file); + putc (']', file); + } + else + LOSE_AND_RETURN ("unrecognized address", x); + + putc (']', file); + } + + /* The RETURN_ADDR_RTX worker. + We mark that the return address is used, either by EH or + __builtin_return_address, for use by the function prologue and + epilogue. FIXME: This isn't optimal; we just use the mark in the + prologue and epilogue to say that the return address is to be stored + in the stack frame. We could return SRP for leaf-functions and use the + initial-value machinery. */ + + rtx + cris_return_addr_rtx (count, frameaddr) + int count; + rtx frameaddr ATTRIBUTE_UNUSED; + { + cfun->machine->needs_return_address_on_stack = 1; + + /* The return-address is stored just above the saved frame-pointer (if + present). Apparently we can't eliminate from the frame-pointer in + that direction, so use the incoming args (maybe pretended) pointer. */ + return count == 0 + ? gen_rtx_MEM (Pmode, plus_constant (virtual_incoming_args_rtx, -4)) + : NULL_RTX; + } + + /* This used to be the INITIAL_FRAME_POINTER_OFFSET worker; now only + handles FP -> SP elimination offset. */ + + static int + cris_initial_frame_pointer_offset () + { + int regno; + + /* Initial offset is 0 if we don't have a frame pointer. */ + int offs = 0; + + /* And 4 for each register pushed. */ + for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) + if ((((regs_ever_live[regno] + && !call_used_regs[regno]) + || (regno == (int) PIC_OFFSET_TABLE_REGNUM + && (current_function_uses_pic_offset_table + /* It is saved anyway, if there would be a gap. */ + || (flag_pic + && regs_ever_live[regno + 1] + && !call_used_regs[regno + 1])))) + && (regno != FRAME_POINTER_REGNUM || !frame_pointer_needed) + && regno != CRIS_SRP_REGNUM) + || (current_function_calls_eh_return + && (regno == EH_RETURN_DATA_REGNO (0) + || regno == EH_RETURN_DATA_REGNO (1) + || regno == EH_RETURN_DATA_REGNO (2) + || regno == EH_RETURN_DATA_REGNO (3)))) + offs += 4; + + /* And then, last, we add the locals allocated. */ + offs += get_frame_size (); + + /* And more; the accumulated args size. */ + offs += current_function_outgoing_args_size; + + /* Then round it off, in case we use aligned stack. */ + if (TARGET_STACK_ALIGN) + offs = TARGET_ALIGN_BY_32 ? (offs + 3) & ~3 : (offs + 1) & ~1; + + return offs; + } + + /* The INITIAL_ELIMINATION_OFFSET worker. + Calculate the difference between imaginary registers such as frame + pointer and the stack pointer. Used to eliminate the frame pointer + and imaginary arg pointer. */ + + int + cris_initial_elimination_offset (fromreg, toreg) + int fromreg; + int toreg; + { + int fp_sp_offset + = cris_initial_frame_pointer_offset (); + + /* We should be able to use regs_ever_live and related prologue + information here, or alpha should not as well. */ + int return_address_on_stack + = regs_ever_live[CRIS_SRP_REGNUM] + || cfun->machine->needs_return_address_on_stack != 0; + + /* Here we act as if the frame-pointer is needed. */ + int ap_fp_offset = 4 + (return_address_on_stack ? 4 : 0); + + if (fromreg == ARG_POINTER_REGNUM + && toreg == FRAME_POINTER_REGNUM) + return ap_fp_offset; + + /* Between the frame pointer and the stack are only "normal" stack + variables and saved registers. */ + if (fromreg == FRAME_POINTER_REGNUM + && toreg == STACK_POINTER_REGNUM) + return fp_sp_offset; + + /* We need to balance out the frame pointer here. */ + if (fromreg == ARG_POINTER_REGNUM + && toreg == STACK_POINTER_REGNUM) + return ap_fp_offset + fp_sp_offset - 4; + + abort (); + } + + /* This function looks into the pattern to see how this insn affects + condition codes. + + Used when to eliminate test insns before a condition-code user, + such as a "scc" insn or a conditional branch. This includes + checking if the entities that cc was updated by, are changed by the + operation. + + Currently a jumble of the old peek-inside-the-insn and the newer + check-cc-attribute methods. */ + + void + cris_notice_update_cc (exp, insn) + rtx exp; + rtx insn; + { + /* Check if user specified "-mcc-init" as a bug-workaround. FIXME: + TARGET_CCINIT does not work; we must set CC_REVERSED as below. + Several test-cases will otherwise fail, for example + gcc.c-torture/execute/20000217-1.c -O0 and -O1. */ + if (TARGET_CCINIT) + { + CC_STATUS_INIT; + return; + } + + /* Slowly, we're converting to using attributes to control the setting + of condition-code status. */ + switch (get_attr_cc (insn)) + { + case CC_NONE: + /* Even if it is "none", a setting may clobber a previous + cc-value, so check. */ + if (GET_CODE (exp) == SET) + { + if (cc_status.value1 + && cris_reg_overlap_mentioned_p (SET_DEST (exp), + cc_status.value1)) + cc_status.value1 = 0; + + if (cc_status.value2 + && cris_reg_overlap_mentioned_p (SET_DEST (exp), + cc_status.value2)) + cc_status.value2 = 0; + } + return; + + case CC_CLOBBER: + CC_STATUS_INIT; + break; + + case CC_NORMAL: + /* Which means, for: + (set (cc0) (...)): + CC is (...). + + (set (reg) (...)): + CC is (reg) and (...) - unless (...) is 0, then CC does not change. + CC_NO_OVERFLOW unless (...) is reg or mem. + + (set (mem) (...)): + CC does not change. + + (set (pc) (...)): + CC does not change. + + (parallel + (set (reg1) (mem (bdap/biap))) + (set (reg2) (bdap/biap))): + CC is (reg1) and (mem (reg2)) + + (parallel + (set (mem (bdap/biap)) (reg1)) [or 0] + (set (reg2) (bdap/biap))): + CC does not change. + + (where reg and mem includes strict_low_parts variants thereof) + + For all others, assume CC is clobbered. + Note that we do not have to care about setting CC_NO_OVERFLOW, + since the overflow flag is set to 0 (i.e. right) for + instructions where it does not have any sane sense, but where + other flags have meanings. (This includes shifts; the carry is + not set by them). + + Note that there are other parallel constructs we could match, + but we don't do that yet. */ + + if (GET_CODE (exp) == SET) + { + /* FIXME: Check when this happens. It looks like we should + actually do a CC_STATUS_INIT here to be safe. */ + if (SET_DEST (exp) == pc_rtx) + return; + + /* Record CC0 changes, so we do not have to output multiple + test insns. */ + if (SET_DEST (exp) == cc0_rtx) + { + cc_status.value1 = SET_SRC (exp); + cc_status.value2 = 0; + + /* Handle flags for the special btstq on one bit. */ + if (GET_CODE (SET_SRC (exp)) == ZERO_EXTRACT + && XEXP (SET_SRC (exp), 1) == const1_rtx) + { + if (GET_CODE (XEXP (SET_SRC (exp), 0)) == CONST_INT) + /* Using cmpq. */ + cc_status.flags = CC_INVERTED; + else + /* A one-bit btstq. */ + cc_status.flags = CC_Z_IN_NOT_N; + } + else + cc_status.flags = 0; + + if (GET_CODE (SET_SRC (exp)) == COMPARE) + { + if (!REG_P (XEXP (SET_SRC (exp), 0)) + && XEXP (SET_SRC (exp), 1) != const0_rtx) + /* For some reason gcc will not canonicalize compare + operations, reversing the sign by itself if + operands are in wrong order. */ + /* (But NOT inverted; eq is still eq.) */ + cc_status.flags = CC_REVERSED; + + /* This seems to be overlooked by gcc. FIXME: Check again. + FIXME: Is it really safe? */ + cc_status.value2 + = gen_rtx_MINUS (GET_MODE (SET_SRC (exp)), + XEXP (SET_SRC (exp), 0), + XEXP (SET_SRC (exp), 1)); + } + return; + } + else if (REG_P (SET_DEST (exp)) + || (GET_CODE (SET_DEST (exp)) == STRICT_LOW_PART + && REG_P (XEXP (SET_DEST (exp), 0)))) + { + /* A register is set; normally CC is set to show that no + test insn is needed. Catch the exceptions. */ + + /* If not to cc0, then no "set"s in non-natural mode give + ok cc0... */ + if (GET_MODE_SIZE (GET_MODE (SET_DEST (exp))) > UNITS_PER_WORD + || GET_MODE_CLASS (GET_MODE (SET_DEST (exp))) == MODE_FLOAT) + { + /* ... except add:s and sub:s in DImode. */ + if (GET_MODE (SET_DEST (exp)) == DImode + && (GET_CODE (SET_SRC (exp)) == PLUS + || GET_CODE (SET_SRC (exp)) == MINUS)) + { + cc_status.flags = 0; + cc_status.value1 = SET_DEST (exp); + cc_status.value2 = SET_SRC (exp); + + if (cris_reg_overlap_mentioned_p (cc_status.value1, + cc_status.value2)) + cc_status.value2 = 0; + + /* Add and sub may set V, which gets us + unoptimizable results in "gt" and "le" condition + codes. */ + cc_status.flags |= CC_NO_OVERFLOW; + + return; + } + } + else if (SET_SRC (exp) == const0_rtx) + { + /* There's no CC0 change when clearing a register or + memory. Just check for overlap. */ + if ((cc_status.value1 + && cris_reg_overlap_mentioned_p (SET_DEST (exp), + cc_status.value1))) + cc_status.value1 = 0; + + if ((cc_status.value2 + && cris_reg_overlap_mentioned_p (SET_DEST (exp), + cc_status.value2))) + cc_status.value2 = 0; + + return; + } + else + { + cc_status.flags = 0; + cc_status.value1 = SET_DEST (exp); + cc_status.value2 = SET_SRC (exp); + + if (cris_reg_overlap_mentioned_p (cc_status.value1, + cc_status.value2)) + cc_status.value2 = 0; + + /* Some operations may set V, which gets us + unoptimizable results in "gt" and "le" condition + codes. */ + if (GET_CODE (SET_SRC (exp)) == PLUS + || GET_CODE (SET_SRC (exp)) == MINUS + || GET_CODE (SET_SRC (exp)) == NEG) + cc_status.flags |= CC_NO_OVERFLOW; + + return; + } + } + else if (GET_CODE (SET_DEST (exp)) == MEM + || (GET_CODE (SET_DEST (exp)) == STRICT_LOW_PART + && GET_CODE (XEXP (SET_DEST (exp), 0)) == MEM)) + { + /* When SET to MEM, then CC is not changed (except for + overlap). */ + if ((cc_status.value1 + && cris_reg_overlap_mentioned_p (SET_DEST (exp), + cc_status.value1))) + cc_status.value1 = 0; + + if ((cc_status.value2 + && cris_reg_overlap_mentioned_p (SET_DEST (exp), + cc_status.value2))) + cc_status.value2 = 0; + + return; + } + } + else if (GET_CODE (exp) == PARALLEL) + { + if (GET_CODE (XVECEXP (exp, 0, 0)) == SET + && GET_CODE (XVECEXP (exp, 0, 1)) == SET + && REG_P (XEXP (XVECEXP (exp, 0, 1), 0))) + { + if (REG_P (XEXP (XVECEXP (exp, 0, 0), 0)) + && GET_CODE (XEXP (XVECEXP (exp, 0, 0), 1)) == MEM) + { + /* For "move.S [rx=ry+o],rz", say CC reflects + value1=rz and value2=[rx] */ + cc_status.value1 = XEXP (XVECEXP (exp, 0, 0), 0); + cc_status.value2 + = gen_rtx_MEM (GET_MODE (XEXP (XVECEXP (exp, 0, 0), 0)), + XEXP (XVECEXP (exp, 0, 1), 0)); + cc_status.flags = 0; + + /* Huh? A side-effect cannot change the destination + register. */ + if (cris_reg_overlap_mentioned_p (cc_status.value1, + cc_status.value2)) + internal_error ("internal error: sideeffect-insn affecting main effect"); + return; + } + else if ((REG_P (XEXP (XVECEXP (exp, 0, 0), 1)) + || XEXP (XVECEXP (exp, 0, 0), 1) == const0_rtx) + && GET_CODE (XEXP (XVECEXP (exp, 0, 0), 0)) == MEM) + { + /* For "move.S rz,[rx=ry+o]" and "clear.S [rx=ry+o]", + say flags are not changed, except for overlap. */ + if (cc_status.value1 + && cris_reg_overlap_mentioned_p (XEXP + (XVECEXP + (exp, 0, 0), 0), + cc_status.value1)) + cc_status.value1 = 0; + + if (cc_status.value1 + && cris_reg_overlap_mentioned_p (XEXP + (XVECEXP + (exp, 0, 1), 0), + cc_status.value1)) + cc_status.value1 = 0; + + if (cc_status.value2 + && cris_reg_overlap_mentioned_p (XEXP + (XVECEXP + (exp, 0, 0), 0), + cc_status.value2)) + cc_status.value2 = 0; + + if (cc_status.value2 + && cris_reg_overlap_mentioned_p (XEXP + (XVECEXP + (exp, 0, 1), 0), + cc_status.value2)) + cc_status.value2 = 0; + + return; + } + } + } + break; + + default: + /* Unknown cc_attr value. */ + abort (); + } + + CC_STATUS_INIT; + } + + /* Return != 0 if the return sequence for the current function is short, + like "ret" or "jump [sp+]". Prior to reloading, we can't tell how + many registers must be saved, so return 0 then. */ + + int + cris_simple_epilogue () + { + int regno; + int reglimit = STACK_POINTER_REGNUM; + int lastreg = -1; + + if (! reload_completed + || frame_pointer_needed + || get_frame_size () != 0 + || current_function_pretend_args_size + || current_function_args_size + || current_function_outgoing_args_size + || current_function_calls_eh_return + + /* If we're not supposed to emit prologue and epilogue, we must + not emit return-type instructions. */ + || !TARGET_PROLOGUE_EPILOGUE) + return 0; + + /* We allow a "movem [sp+],rN" to sit in front if the "jump [sp+]" or + in the delay-slot of the "ret". */ + for (regno = 0; regno < reglimit; regno++) + if ((regs_ever_live[regno] && ! call_used_regs[regno]) + || (regno == (int) PIC_OFFSET_TABLE_REGNUM + && (current_function_uses_pic_offset_table + /* It is saved anyway, if there would be a gap. */ + || (flag_pic + && regs_ever_live[regno + 1] + && !call_used_regs[regno + 1])))) + { + if (lastreg != regno - 1) + return 0; + lastreg = regno; + } + + return 1; + } + + /* The ADDRESS_COST worker. */ + + int + cris_address_cost (x) + rtx x; + { + /* The metric to use for the cost-macros is unclear. + The metric used here is (the number of cycles needed) / 2, + where we consider equal a cycle for a word of code and a cycle to + read memory. */ + + /* The cheapest addressing modes get 0, since nothing extra is needed. */ + if (BASE_OR_AUTOINCR_P (x)) + return 0; + + /* An indirect mem must be a DIP. This means two bytes extra for code, + and 4 bytes extra for memory read, i.e. (2 + 4) / 2. */ + if (GET_CODE (x) == MEM) + return (2 + 4) / 2; + + /* Assume (2 + 4) / 2 for a single constant; a dword, since it needs + an extra DIP prefix and 4 bytes of constant in most cases. + For PIC and a symbol with a GOT entry, we double the cost since we + add a [rPIC+...] offset. A GOT-less symbol uses a BDAP prefix + equivalent to the DIP prefix for non-PIC, hence the same cost. */ + if (CONSTANT_P (x)) + return flag_pic && cris_got_symbol (x) ? 2 * (2 + 4) / 2 : (2 + 4) / 2; + + /* Handle BIAP and BDAP prefixes. */ + if (GET_CODE (x) == PLUS) + { + rtx tem1 = XEXP (x, 0); + rtx tem2 = XEXP (x, 1); + + /* A BIAP is 2 extra bytes for the prefix insn, nothing more. We + recognize the typical MULT which is always in tem1 because of + insn canonicalization. */ + if ((GET_CODE (tem1) == MULT && BIAP_INDEX_P (tem1)) + || REG_P (tem1)) + return 2 / 2; + + /* A BDAP (quick) is 2 extra bytes. Any constant operand to the + PLUS is always found in tem2. */ + if (GET_CODE (tem2) == CONST_INT + && INTVAL (tem2) < 128 && INTVAL (tem2) >= -128) + return 2 / 2; + + /* A BDAP -32768 .. 32767 is like BDAP quick, but with 2 extra + bytes. */ + if (GET_CODE (tem2) == CONST_INT + && CONST_OK_FOR_LETTER_P (INTVAL (tem2), 'L')) + return (2 + 2) / 2; + + /* A BDAP with some other constant is 2 bytes extra. */ + if (CONSTANT_P (tem2)) + return (2 + 2 + 2) / 2; + + /* BDAP with something indirect should have a higher cost than + BIAP with register. FIXME: Should it cost like a MEM or more? */ + /* Don't need to check it, it's the only one left. + FIXME: There was a REG test missing, perhaps there are others. + Think more. */ + return (2 + 2 + 2) / 2; + } + + /* What else? Return a high cost. It matters only for valid + addressing modes. */ + return 10; + } + + /* Check various objections to the side-effect. Used in the test-part + of an anonymous insn describing an insn with a possible side-effect. + Returns nonzero if the implied side-effect is ok. + + code : PLUS or MULT + ops : An array of rtx:es. lreg, rreg, rval, + The variables multop and other_op are indexes into this, + or -1 if they are not applicable. + lreg : The register that gets assigned in the side-effect. + rreg : One register in the side-effect expression + rval : The other register, or an int. + multop : An integer to multiply rval with. + other_op : One of the entities of the main effect, + whose mode we must consider. */ + + int + cris_side_effect_mode_ok (code, ops, lreg, rreg, rval, multop, other_op) + enum rtx_code code; + rtx *ops; + int lreg, rreg, rval, multop, other_op; + { + /* Find what value to multiply with, for rx =ry + rz * n. */ + int mult = multop < 0 ? 1 : INTVAL (ops[multop]); + + rtx reg_rtx = ops[rreg]; + rtx val_rtx = ops[rval]; + + /* The operands may be swapped. Canonicalize them in reg_rtx and + val_rtx, where reg_rtx always is a reg (for this constraint to + match). */ + if (! BASE_P (reg_rtx)) + reg_rtx = val_rtx, val_rtx = ops[rreg]; + + /* Don't forget to check that reg_rtx really is a reg. If it isn't, + we have no business. */ + if (! BASE_P (reg_rtx)) + return 0; + + /* Don't do this when -mno-split. */ + if (!TARGET_SIDE_EFFECT_PREFIXES) + return 0; + + /* The mult expression may be hidden in lreg. FIXME: Add more + commentary about that. */ + if (GET_CODE (val_rtx) == MULT) + { + mult = INTVAL (XEXP (val_rtx, 1)); + val_rtx = XEXP (val_rtx, 0); + code = MULT; + } + + /* First check the "other operand". */ + if (other_op >= 0) + { + if (GET_MODE_SIZE (GET_MODE (ops[other_op])) > UNITS_PER_WORD) + return 0; + + /* Check if the lvalue register is the same as the "other + operand". If so, the result is undefined and we shouldn't do + this. FIXME: Check again. */ + if ((BASE_P (ops[lreg]) + && BASE_P (ops[other_op]) + && REGNO (ops[lreg]) == REGNO (ops[other_op])) + || rtx_equal_p (ops[other_op], ops[lreg])) + return 0; + } + + /* Do not accept frame_pointer_rtx as any operand. */ + if (ops[lreg] == frame_pointer_rtx || ops[rreg] == frame_pointer_rtx + || ops[rval] == frame_pointer_rtx + || (other_op >= 0 && ops[other_op] == frame_pointer_rtx)) + return 0; + + if (code == PLUS + && ! BASE_P (val_rtx)) + { + + /* Do not allow rx = rx + n if a normal add or sub with same size + would do. */ + if (rtx_equal_p (ops[lreg], reg_rtx) + && GET_CODE (val_rtx) == CONST_INT + && (INTVAL (val_rtx) <= 63 && INTVAL (val_rtx) >= -63)) + return 0; + + /* Check allowed cases, like [r(+)?].[bwd] and const. + A symbol is not allowed with PIC. */ + if (CONSTANT_P (val_rtx)) + return flag_pic == 0 || cris_symbol (val_rtx) == 0; + + if (GET_CODE (val_rtx) == MEM + && BASE_OR_AUTOINCR_P (XEXP (val_rtx, 0))) + return 1; + + if (GET_CODE (val_rtx) == SIGN_EXTEND + && GET_CODE (XEXP (val_rtx, 0)) == MEM + && BASE_OR_AUTOINCR_P (XEXP (XEXP (val_rtx, 0), 0))) + return 1; + + /* If we got here, it's not a valid addressing mode. */ + return 0; + } + else if (code == MULT + || (code == PLUS && BASE_P (val_rtx))) + { + /* Do not allow rx = rx + ry.S, since it doesn't give better code. */ + if (rtx_equal_p (ops[lreg], reg_rtx) + || (mult == 1 && rtx_equal_p (ops[lreg], val_rtx))) + return 0; + + /* Do not allow bad multiply-values. */ + if (mult != 1 && mult != 2 && mult != 4) + return 0; + + /* Only allow r + ... */ + if (! BASE_P (reg_rtx)) + return 0; + + /* If we got here, all seems ok. + (All checks need to be done above). */ + return 1; + } + + /* If we get here, the caller got its initial tests wrong. */ + internal_error ("internal error: cris_side_effect_mode_ok with bad operands"); + } + + /* The function reg_overlap_mentioned_p in CVS (still as of 2001-05-16) + does not handle the case where the IN operand is strict_low_part; it + does handle it for X. Test-case in Axis-20010516. This function takes + care of that for THIS port. FIXME: strict_low_part is going away + anyway. */ + + static int + cris_reg_overlap_mentioned_p (x, in) + rtx x, in; + { + /* The function reg_overlap_mentioned now handles when X is + strict_low_part, but not when IN is a STRICT_LOW_PART. */ + if (GET_CODE (in) == STRICT_LOW_PART) + in = XEXP (in, 0); + + return reg_overlap_mentioned_p (x, in); + } + + /* The TARGET_ASM_NAMED_SECTION worker. + We just dispatch to the functions for ELF and a.out. */ + + void + cris_target_asm_named_section (name, flags) + const char *name; + unsigned int flags; + { + if (! TARGET_ELF) + default_no_named_section (name, flags); + else + default_elf_asm_named_section (name, flags); + } + + /* The LEGITIMATE_PIC_OPERAND_P worker. */ + + int + cris_legitimate_pic_operand (x) + rtx x; + { + /* The PIC representation of a symbol with a GOT entry will be (for + example; relocations differ): + sym => [rPIC+sym:GOT] + and for a GOT-less symbol it will be (for example, relocation differ): + sym => rPIC+sym:GOTOFF + so only a symbol with a GOT is by itself a valid operand, and it + can't be a sum of a symbol and an offset. */ + return ! cris_symbol (x) || cris_got_symbol (x); + } + + /* Return non-zero if there's a SYMBOL_REF or LABEL_REF hiding inside this + CONSTANT_P. */ + + int + cris_symbol (x) + rtx x; + { + switch (GET_CODE (x)) + { + case SYMBOL_REF: + case LABEL_REF: + return 1; + + case UNSPEC: + /* A PLT reference. */ + ASSERT_PLT_UNSPEC (x); + return 1; + + case CONST: + return cris_symbol (XEXP (x, 0)); + + case PLUS: + case MINUS: + return cris_symbol (XEXP (x, 0)) || cris_symbol (XEXP (x, 1)); + + case CONST_INT: + case CONST_DOUBLE: + case CONSTANT_P_RTX: + return 0; + + default: + fatal_insn ("unrecognized supposed constant", x); + } + + return 1; + } + + /* Return non-zero if there's a SYMBOL_REF or LABEL_REF hiding inside this + CONSTANT_P, and the symbol does not need a GOT entry. Also set + current_function_uses_pic_offset_table if we're generating PIC and ever + see something that would need one. */ + + int + cris_gotless_symbol (x) + rtx x; + { + switch (GET_CODE (x)) + { + case UNSPEC: + ASSERT_PLT_UNSPEC (x); + return 1; + + case SYMBOL_REF: + if (flag_pic && cfun != NULL) + current_function_uses_pic_offset_table = 1; + return SYMBOL_REF_FLAG (x); + + case LABEL_REF: + /* We don't set current_function_uses_pic_offset_table for + LABEL_REF:s in here, since they are almost always originating + from some branch. The only time it does not come from a label is + when GCC does something like __builtin_setjmp. Then we get the + LABEL_REF from the movsi expander, so we mark it there as a + special case. */ + return 1; + + case CONST: + return cris_gotless_symbol (XEXP (x, 0)); + + case PLUS: + case MINUS: + { + int x0 = cris_gotless_symbol (XEXP (x, 0)) != 0; + int x1 = cris_gotless_symbol (XEXP (x, 1)) != 0; + + /* One and only one of them must be a local symbol. Neither must + be some other, more general kind of symbol. */ + return + (x0 ^ x1) + && ! (x0 == 0 && cris_symbol (XEXP (x, 0))) + && ! (x1 == 0 && cris_symbol (XEXP (x, 1))); + } + + case CONST_INT: + case CONST_DOUBLE: + case CONSTANT_P_RTX: + return 0; + + default: + fatal_insn ("unrecognized supposed constant", x); + } + + return 1; + } + + /* Return non-zero if there's a SYMBOL_REF or LABEL_REF hiding inside this + CONSTANT_P, and the symbol needs a GOT entry. */ + + int + cris_got_symbol (x) + rtx x; + { + switch (GET_CODE (x)) + { + case UNSPEC: + ASSERT_PLT_UNSPEC (x); + return 0; + + case SYMBOL_REF: + if (flag_pic && cfun != NULL) + current_function_uses_pic_offset_table = 1; + return ! SYMBOL_REF_FLAG (x); + + case CONST: + return cris_got_symbol (XEXP (x, 0)); + + case LABEL_REF: + /* A LABEL_REF is never visible as a symbol outside the local + function. */ + case PLUS: + case MINUS: + /* Nope, can't access the GOT for "symbol + offset". */ + return 0; + + case CONST_INT: + case CONST_DOUBLE: + case CONSTANT_P_RTX: + return 0; + + default: + fatal_insn ("unrecognized supposed constant in cris_global_pic_symbol", + x); + } + + return 1; + } + + /* The OVERRIDE_OPTIONS worker. + As is the norm, this also parses -mfoo=bar type parameters. */ + + void + cris_override_options () + { + if (cris_max_stackframe_str) + { + cris_max_stackframe = atoi (cris_max_stackframe_str); + + /* Do some sanity checking. */ + if (cris_max_stackframe < 0 || cris_max_stackframe > 0x20000000) + internal_error ("-max-stackframe=%d is not usable, not between 0 and %d", + cris_max_stackframe, 0x20000000); + } + + /* Let "-metrax4" and "-metrax100" change the cpu version. */ + if (TARGET_SVINTO && cris_cpu_version < CRIS_CPU_SVINTO) + cris_cpu_version = CRIS_CPU_SVINTO; + else if (TARGET_ETRAX4_ADD && cris_cpu_version < CRIS_CPU_ETRAX4) + cris_cpu_version = CRIS_CPU_ETRAX4; + + /* Parse -march=... and its synonym, the deprecated -mcpu=... */ + if (cris_cpu_str) + { + cris_cpu_version + = (*cris_cpu_str == 'v' ? atoi (cris_cpu_str + 1) : -1); + + if (strcmp ("etrax4", cris_cpu_str) == 0) + cris_cpu_version = 3; + + if (strcmp ("svinto", cris_cpu_str) == 0 + || strcmp ("etrax100", cris_cpu_str) == 0) + cris_cpu_version = 8; + + if (strcmp ("ng", cris_cpu_str) == 0 + || strcmp ("etrax100lx", cris_cpu_str) == 0) + cris_cpu_version = 10; + + if (cris_cpu_version < 0 || cris_cpu_version > 10) + error ("unknown CRIS version specification in -march= or -mcpu= : %s", + cris_cpu_str); + + /* Set the target flags. */ + if (cris_cpu_version >= CRIS_CPU_ETRAX4) + target_flags |= TARGET_MASK_ETRAX4_ADD; + + /* If this is Svinto or higher, align for 32 bit accesses. */ + if (cris_cpu_version >= CRIS_CPU_SVINTO) + target_flags + |= (TARGET_MASK_SVINTO | TARGET_MASK_ALIGN_BY_32 + | TARGET_MASK_STACK_ALIGN | TARGET_MASK_CONST_ALIGN + | TARGET_MASK_DATA_ALIGN); + + /* Note that we do not add new flags when it can be completely + described with a macro that uses -mcpu=X. So + TARGET_HAS_MUL_INSNS is (cris_cpu_version >= CRIS_CPU_NG). */ + } + + if (cris_tune_str) + { + int cris_tune + = (*cris_tune_str == 'v' ? atoi (cris_tune_str + 1) : -1); + + if (strcmp ("etrax4", cris_tune_str) == 0) + cris_tune = 3; + + if (strcmp ("svinto", cris_tune_str) == 0 + || strcmp ("etrax100", cris_tune_str) == 0) + cris_tune = 8; + + if (strcmp ("ng", cris_tune_str) == 0 + || strcmp ("etrax100lx", cris_tune_str) == 0) + cris_tune = 10; + + if (cris_tune < 0 || cris_tune > 10) + error ("unknown CRIS cpu version specification in -mtune= : %s", + cris_tune_str); + + if (cris_tune >= CRIS_CPU_SVINTO) + /* We have currently nothing more to tune than alignment for + memory accesses. */ + target_flags + |= (TARGET_MASK_STACK_ALIGN | TARGET_MASK_CONST_ALIGN + | TARGET_MASK_DATA_ALIGN | TARGET_MASK_ALIGN_BY_32); + } + + if (flag_pic) + { + /* Use error rather than warning, so invalid use is easily + detectable. Still change to the values we expect, to avoid + further errors. */ + if (! TARGET_LINUX) + { + error ("-fPIC and -fpic are not supported in this configuration"); + flag_pic = 0; + } + + /* Turn off function CSE. We need to have the addresses reach the + call expanders to get PLT-marked, as they could otherwise be + compared against zero directly or indirectly. After visiting the + call expanders they will then be cse:ed, as the call expanders + force_reg the addresses, effectively forcing flag_no_function_cse + to 0. */ + flag_no_function_cse = 1; + } + + if ((write_symbols == DWARF_DEBUG + || write_symbols == DWARF2_DEBUG) && ! TARGET_ELF) + { + warning ("that particular -g option is invalid with -maout and -melinux"); + write_symbols = DBX_DEBUG; + } + + /* Set the per-function-data initializer. */ + init_machine_status = cris_init_machine_status; + } + + /* The ASM_OUTPUT_MI_THUNK worker. */ + + void + cris_asm_output_mi_thunk (stream, thunkdecl, delta, funcdecl) + FILE *stream; + tree thunkdecl ATTRIBUTE_UNUSED; + int delta; + tree funcdecl; + { + if (delta > 0) + asm_fprintf (stream, "\tadd%s %d,$%s\n", + ADDITIVE_SIZE_MODIFIER (delta), delta, + reg_names[CRIS_FIRST_ARG_REG]); + else if (delta < 0) + asm_fprintf (stream, "\tsub%s %d,$%s\n", + ADDITIVE_SIZE_MODIFIER (-delta), -delta, + reg_names[CRIS_FIRST_ARG_REG]); + + if (flag_pic) + { + const char *name = XSTR (XEXP (DECL_RTL (funcdecl), 0), 0); + + STRIP_NAME_ENCODING (name, name); + fprintf (stream, "add.d "); + assemble_name (stream, name); + fprintf (stream, "%s,$pc\n", CRIS_PLT_PCOFFSET_SUFFIX); + } + else + { + fprintf (stream, "jump "); + assemble_name (stream, XSTR (XEXP (DECL_RTL (funcdecl), 0), 0)); + fprintf (stream, "\n"); + } + } + + /* The EXPAND_BUILTIN_VA_ARG worker. This is modified from the + "standard" implementation of va_arg: read the value from the current + address and increment by the size of one or two registers. The + important difference for CRIS is that if the type is + pass-by-reference, then perform an indirection. */ + + rtx + cris_expand_builtin_va_arg (valist, type) + tree valist; + tree type; + { + tree addr_tree, t; + rtx addr; + tree passed_size = size_zero_node; + tree type_size = NULL; + tree size3 = size_int (3); + tree size4 = size_int (4); + tree size8 = size_int (8); + tree rounded_size; + + /* Get AP. */ + addr_tree = valist; + + if (type == error_mark_node + || (type_size = TYPE_SIZE_UNIT (TYPE_MAIN_VARIANT (type))) == NULL + || TREE_OVERFLOW (type_size)) + /* Presumably an error; the size isn't computable. A message has + supposedly been emitted elsewhere. */ + rounded_size = size_zero_node; + else + rounded_size + = fold (build (MULT_EXPR, sizetype, + fold (build (TRUNC_DIV_EXPR, sizetype, + fold (build (PLUS_EXPR, sizetype, + type_size, size3)), + size4)), + size4)); + + if (!integer_zerop (rounded_size)) + { + /* Check if the type is passed by value or by reference. Values up + to 8 bytes are passed by-value, padded to register-size (4 + bytes). Larger values and varying-size types are passed + by reference. */ + passed_size + = (!really_constant_p (type_size) + ? size4 + : fold (build (COND_EXPR, sizetype, + fold (build (GT_EXPR, sizetype, + rounded_size, + size8)), + size4, + rounded_size))); + + addr_tree + = (!really_constant_p (type_size) + ? build1 (INDIRECT_REF, build_pointer_type (type), addr_tree) + : fold (build (COND_EXPR, TREE_TYPE (addr_tree), + fold (build (GT_EXPR, sizetype, + rounded_size, + size8)), + build1 (INDIRECT_REF, build_pointer_type (type), + addr_tree), + addr_tree))); + } + + addr = expand_expr (addr_tree, NULL_RTX, Pmode, EXPAND_NORMAL); + addr = copy_to_reg (addr); + + if (!integer_zerop (rounded_size)) + { + /* Compute new value for AP. */ + t = build (MODIFY_EXPR, TREE_TYPE (valist), valist, + build (PLUS_EXPR, TREE_TYPE (valist), valist, + passed_size)); + TREE_SIDE_EFFECTS (t) = 1; + expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); + } + + return addr; + } + + /* The INIT_EXPANDERS worker sets the per-function-data initializer and + mark functions. */ + + void + cris_init_expanders () + { + /* Nothing here at the moment. */ + } + + /* Zero initialization is OK for all current fields. */ + + static void + cris_init_machine_status (p) + struct function *p; + { + p->machine = xcalloc (1, sizeof (struct machine_function)); + } + + /* Split a 2 word move (DI or presumably DF) into component parts. + Originally a copy of gen_split_move_double in m32r.c. */ + + rtx + cris_split_movdx (operands) + rtx *operands; + { + enum machine_mode mode = GET_MODE (operands[0]); + rtx dest = operands[0]; + rtx src = operands[1]; + rtx val; + + /* We used to have to handle (SUBREG (MEM)) here, but that should no + longer happen; after reload there are no SUBREGs any more, and we're + only called after reload. */ + if (GET_CODE (dest) == SUBREG || GET_CODE (src) == SUBREG) + abort (); + + start_sequence (); + if (GET_CODE (dest) == REG) + { + int dregno = REGNO (dest); + + /* Reg-to-reg copy. */ + if (GET_CODE (src) == REG) + { + int sregno = REGNO (src); + + int reverse = (dregno == sregno + 1); + + /* We normally copy the low-numbered register first. However, if + the first register operand 0 is the same as the second register of + operand 1, we must copy in the opposite order. */ + emit_insn (gen_rtx_SET (VOIDmode, + operand_subword (dest, reverse, TRUE, mode), + operand_subword (src, reverse, TRUE, mode))); + + emit_insn (gen_rtx_SET (VOIDmode, + operand_subword (dest, !reverse, TRUE, mode), + operand_subword (src, !reverse, TRUE, mode))); + } + /* Constant-to-reg copy. */ + else if (GET_CODE (src) == CONST_INT || GET_CODE (src) == CONST_DOUBLE) + { + rtx words[2]; + split_double (src, &words[0], &words[1]); + emit_insn (gen_rtx_SET (VOIDmode, + operand_subword (dest, 0, TRUE, mode), + words[0])); + + emit_insn (gen_rtx_SET (VOIDmode, + operand_subword (dest, 1, TRUE, mode), + words[1])); + } + /* Mem-to-reg copy. */ + else if (GET_CODE (src) == MEM) + { + /* If the high-address word is used in the address, we must load it + last. Otherwise, load it first. */ + rtx addr = XEXP (src, 0); + int reverse + = (refers_to_regno_p (dregno, dregno + 1, addr, NULL) != 0); + + /* The original code imples that we can't do + move.x [rN+],rM move.x [rN],rM+1 + when rN is dead, because of REG_NOTES damage. That is + consistent with what I've seen, so don't try it. + + We have two different cases here; if the addr is POST_INC, + just pass it through, otherwise add constants. */ + + if (GET_CODE (addr) == POST_INC) + { + emit_insn (gen_rtx_SET (VOIDmode, + operand_subword (dest, 0, TRUE, mode), + change_address (src, SImode, addr))); + emit_insn (gen_rtx_SET (VOIDmode, + operand_subword (dest, 1, TRUE, mode), + change_address (src, SImode, addr))); + } + else + { + /* Make sure we don't get any other addresses with + embedded postincrements. They should be stopped in + GO_IF_LEGITIMATE_ADDRESS, but we're here for your + safety. */ + if (side_effects_p (addr)) + fatal_insn ("unexpected side-effects in address", addr); + + emit_insn (gen_rtx_SET + (VOIDmode, + operand_subword (dest, reverse, TRUE, mode), + change_address + (src, SImode, + plus_constant (addr, + reverse * UNITS_PER_WORD)))); + emit_insn (gen_rtx_SET + (VOIDmode, + operand_subword (dest, ! reverse, TRUE, mode), + change_address + (src, SImode, + plus_constant (addr, + (! reverse) * + UNITS_PER_WORD)))); + } + } + else + abort (); + } + /* Reg-to-mem copy or clear mem. */ + else if (GET_CODE (dest) == MEM + && (GET_CODE (src) == REG + || src == const0_rtx + || src == CONST0_RTX (DFmode))) + { + rtx addr = XEXP (dest, 0); + + if (GET_CODE (addr) == POST_INC) + { + emit_insn (gen_rtx_SET (VOIDmode, + change_address (dest, SImode, addr), + operand_subword (src, 0, TRUE, mode))); + emit_insn (gen_rtx_SET (VOIDmode, + change_address (dest, SImode, addr), + operand_subword (src, 1, TRUE, mode))); + } + else + { + /* Make sure we don't get any other addresses with embedded + postincrements. They should be stopped in + GO_IF_LEGITIMATE_ADDRESS, but we're here for your safety. */ + if (side_effects_p (addr)) + fatal_insn ("unexpected side-effects in address", addr); + + emit_insn (gen_rtx_SET + (VOIDmode, + change_address (dest, SImode, addr), + operand_subword (src, 0, TRUE, mode))); + + emit_insn (gen_rtx_SET + (VOIDmode, + change_address (dest, SImode, + plus_constant (addr, + UNITS_PER_WORD)), + operand_subword (src, 1, TRUE, mode))); + } + } + + else + abort (); + + val = gen_sequence (); + end_sequence (); + return val; + } + + /* This is in essence a copy of output_addr_const altered to output + symbolic operands as PIC. + + FIXME: Add hooks similar to ASM_OUTPUT_SYMBOL_REF to get this effect in + the "real" output_addr_const. All we need is one for LABEL_REF (and + one for CODE_LABEL?). */ + + void + cris_output_addr_const (file, x) + FILE *file; + rtx x; + { + int is_plt = 0; + + restart: + switch (GET_CODE (x)) + { + case UNSPEC: + ASSERT_PLT_UNSPEC (x); + x = XVECEXP (x, 0, 0); + is_plt = 1; + + /* Fall through. */ + case SYMBOL_REF: + if (flag_pic) + { + const char *origstr = XSTR (x, 0); + const char *str; + + STRIP_NAME_ENCODING (str, origstr); + + if (is_plt) + { + if (cris_pic_sympart_only) + { + assemble_name (file, str); + fprintf (file, ":PLTG"); + } + else + { + if (TARGET_AVOID_GOTPLT) + /* We shouldn't get here. */ + abort (); + + fprintf (file, "[$%s+", reg_names [PIC_OFFSET_TABLE_REGNUM]); + assemble_name (file, XSTR (x, 0)); + + if (flag_pic == 1) + fprintf (file, ":GOTPLT16]"); + else + fprintf (file, ":GOTPLT]"); + } + } + else if (cris_gotless_symbol (x)) + { + if (! cris_pic_sympart_only) + fprintf (file, "$%s+", reg_names [PIC_OFFSET_TABLE_REGNUM]); + assemble_name (file, str); + fprintf (file, ":GOTOFF"); + } + else if (cris_got_symbol (x)) + { + if (cris_pic_sympart_only) + abort (); + fprintf (file, "[$%s+", reg_names [PIC_OFFSET_TABLE_REGNUM]); + assemble_name (file, XSTR (x, 0)); + + if (flag_pic == 1) + fprintf (file, ":GOT16]"); + else + fprintf (file, ":GOT]"); + } + else + LOSE_AND_RETURN ("unexpected PIC symbol", x); + + /* Sanity check. */ + if (! current_function_uses_pic_offset_table) + output_operand_lossage ("PIC register isn't set up"); + } + else + assemble_name (file, XSTR (x, 0)); + break; + + case LABEL_REF: + /* If we get one of those here, it should be dressed as PIC. Branch + labels are normally output with the 'l' specifier, which means it + will go directly to output_asm_label and not end up here. */ + if (GET_CODE (XEXP (x, 0)) != CODE_LABEL + && (GET_CODE (XEXP (x, 0)) != NOTE + || NOTE_LINE_NUMBER (XEXP (x, 0)) != NOTE_INSN_DELETED_LABEL)) + fatal_insn ("unexpected address expression", x); + + if (flag_pic) + { + if (cris_gotless_symbol (x)) + { + if (! cris_pic_sympart_only) + fprintf (file, "$%s+", reg_names [PIC_OFFSET_TABLE_REGNUM]); + cris_output_addr_const (file, XEXP (x, 0)); + + fprintf (file, ":GOTOFF"); + } + else + /* Labels are never marked as global symbols. */ + fatal_insn ("unexpected PIC symbol", x); + + /* Sanity check. */ + if (! current_function_uses_pic_offset_table) + internal_error ("emitting PIC operand, but PIC register isn't set up"); + break; + } + + output_addr_const (file, x); + break; + + case NOTE: + if (NOTE_LINE_NUMBER (x) != NOTE_INSN_DELETED_LABEL) + fatal_insn ("unexpected NOTE as addr_const:", x); + case CODE_LABEL: + case CONST_INT: + case CONST_DOUBLE: + case ZERO_EXTEND: + case SIGN_EXTEND: + output_addr_const (file, x); + break; + + case CONST: + /* This used to output parentheses around the expression, + but that does not work on the 386 (either ATT or BSD assembler). */ + cris_output_addr_const (file, XEXP (x, 0)); + break; + + case PLUS: + /* Some assemblers need integer constants to appear last (eg masm). */ + if (GET_CODE (XEXP (x, 0)) == CONST_INT) + { + cris_output_addr_const (file, XEXP (x, 1)); + if (INTVAL (XEXP (x, 0)) >= 0) + fprintf (file, "+"); + output_addr_const (file, XEXP (x, 0)); + } + else + { + cris_output_addr_const (file, XEXP (x, 0)); + if (GET_CODE (XEXP (x, 1)) != CONST_INT + || INTVAL (XEXP (x, 1)) >= 0) + fprintf (file, "+"); + cris_output_addr_const (file, XEXP (x, 1)); + } + break; + + case MINUS: + /* Avoid outputting things like x-x or x+5-x, + since some assemblers can't handle that. */ + x = simplify_subtraction (x); + if (GET_CODE (x) != MINUS) + goto restart; + + cris_output_addr_const (file, XEXP (x, 0)); + fprintf (file, "-"); + if ((GET_CODE (XEXP (x, 1)) == CONST_INT + && INTVAL (XEXP (x, 1)) < 0) + || GET_CODE (XEXP (x, 1)) != CONST_INT) + { + fprintf (file, "%s", targetm.asm_out.open_paren); + cris_output_addr_const (file, XEXP (x, 1)); + fprintf (file, "%s", targetm.asm_out.close_paren); + } + else + output_addr_const (file, XEXP (x, 1)); + break; + + default: + LOSE_AND_RETURN ("unexpected address expression", x); + } + } + + /* The ENCODE_SECTION_INFO worker. Code-in whether we can get away + without a GOT entry (needed for externally visible objects but not for + functions) into SYMBOL_REF_FLAG and add the PLT suffix for global + functions. */ + + void + cris_encode_section_info (exp) + tree exp; + { + if (flag_pic) + { + if (DECL_P (exp)) + { + if (TREE_CODE (exp) == FUNCTION_DECL + && (TREE_PUBLIC (exp) || DECL_WEAK (exp))) + SYMBOL_REF_FLAG (XEXP (DECL_RTL (exp), 0)) = 0; + else + SYMBOL_REF_FLAG (XEXP (DECL_RTL (exp), 0)) + = ! TREE_PUBLIC (exp) && ! DECL_WEAK (exp); + } + else + /* Others are local entities. */ + SYMBOL_REF_FLAG (XEXP (TREE_CST_RTL (exp), 0)) = 1; + } + } + + #if 0 + /* Various small functions to replace macros. Only called from a + debugger. They might collide with gcc functions or system functions, + so only emit them when '#if 1' above. */ + + enum rtx_code Get_code PARAMS ((rtx)); + + enum rtx_code + Get_code (x) + rtx x; + { + return GET_CODE (x); + } + + const char *Get_mode PARAMS ((rtx)); + + const char * + Get_mode (x) + rtx x; + { + return GET_MODE_NAME (GET_MODE (x)); + } + + rtx Xexp PARAMS ((rtx, int)); + + rtx + Xexp (x, n) + rtx x; + int n; + { + return XEXP (x, n); + } + + rtx Xvecexp PARAMS ((rtx, int, int)); + + rtx + Xvecexp (x, n, m) + rtx x; + int n; + { + return XVECEXP (x, n, m); + } + + int Get_rtx_len PARAMS ((rtx)); + + int + Get_rtx_len (x) + rtx x; + { + return GET_RTX_LENGTH (GET_CODE (x)); + } + + /* Use upper-case to distinguish from local variables that are sometimes + called next_insn and prev_insn. */ + + rtx Next_insn PARAMS ((rtx)); + + rtx + Next_insn (insn) + rtx insn; + { + return NEXT_INSN (insn); + } + + rtx Prev_insn PARAMS ((rtx)); + + rtx + Prev_insn (insn) + rtx insn; + { + return PREV_INSN (insn); + } + #endif + + /* + * Local variables: + * eval: (c-set-style "gnu") + * indent-tabs-mode: t + * End: + */ diff -Nrc3pad gcc-3.0.4/gcc/config/cris/cris.h gcc-3.1/gcc/config/cris/cris.h *** gcc-3.0.4/gcc/config/cris/cris.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/cris/cris.h Thu Apr 18 17:04:14 2002 *************** *** 0 **** --- 1,1828 ---- + /* Definitions for GCC. Part of the machine description for CRIS. + Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + Contributed by Axis Communications. Written by Hans-Peter Nilsson. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GCC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + /* After the first "Node:" comment comes all preprocessor directives and + attached declarations described in the info files, the "Using and + Porting GCC" manual (uapgcc), in the same order as found in the "Target + macros" section in the gcc-2.9x CVS edition of 2000-03-17. FIXME: Not + really, but needs an update anyway. + + There is no generic copy-of-uapgcc comment, you'll have to see uapgcc + for that. If applicable, there is a CRIS-specific comment. The order + of macro definitions follow the order in the manual. Every section in + the manual (node in the info pages) has an introductory `Node: + ' comment. If no macros are defined for a section, only + the section-comment is present. */ + + /* Note that other header files (e.g. config/elfos.h, config/linux.h, + config/cris/linux.h and config/cris/aout.h) are responsible for lots of + settings not repeated below. This file contains general CRIS + definitions and definitions for the cris-*-elf subtarget. */ + + /* Replacement for REG_P since it does not match SUBREGs. Happens for + testcase Axis-20000320 with gcc-2.9x. */ + #define REG_S_P(x) \ + (REG_P (x) || (GET_CODE (x) == SUBREG && REG_P (XEXP (x, 0)))) + + /* Last register in main register bank r0..r15. */ + #define CRIS_LAST_GENERAL_REGISTER 15 + + /* Descriptions of registers used for arguments. */ + #define CRIS_FIRST_ARG_REG 10 + #define CRIS_MAX_ARGS_IN_REGS 4 + + /* Other convenience definitions. */ + #define CRIS_PC_REGNUM 15 + #define CRIS_SRP_REGNUM 16 + + /* Most of the time, we need the index into the register-names array. + When passing debug-info, we need the real register number. */ + #define CRIS_CANONICAL_SRP_REGNUM (16 + 11) + #define CRIS_CANONICAL_MOF_REGNUM (16 + 7) + + /* When generating PIC, these suffixes are added to the names of non-local + functions when being output. Contrary to other ports, we have offsets + relative to the GOT, not the PC. We might implement PC-relative PLT + semantics later for the general case; they are used in some cases right + now, such as MI thunks. */ + #define CRIS_GOTPLT_SUFFIX ":GOTPLT" + #define CRIS_PLT_GOTOFFSET_SUFFIX ":PLTG" + #define CRIS_PLT_PCOFFSET_SUFFIX ":PLT" + + /* If you tweak this, don't forget to check cris_expand_builtin_va_arg. */ + #define CRIS_FUNCTION_ARG_SIZE(MODE, TYPE) \ + ((MODE) != BLKmode ? GET_MODE_SIZE (MODE) \ + : (unsigned) int_size_in_bytes (TYPE)) + + /* Check for max allowed stackframe. A "const char *" to be parsed. */ + extern const char *cris_max_stackframe_str; + + /* Which CPU version this is. A "const char *" to be parsed. */ + extern const char *cris_cpu_str; + + /* Which CPU version this is. The parsed and adjusted cris_cpu_str. */ + extern int cris_cpu_version; + + /* Which CPU version to tune for. A "const char *" to be parsed. */ + extern const char *cris_tune_str; + + /* The argument to "-melinux-stacksize=". We don't parse it currently; + it's just passed on to the linker. We might want to do something + here someday. */ + extern const char *cris_elinux_stacksize_str; + + /* Changing the order used to be necessary to put the fourth __make_dp + argument (a DImode parameter) in registers, to fit with the libfunc + parameter passing scheme used for intrinsic functions. FIXME: Check + performance and maybe remove definition from TARGET_LIBGCC2_CFLAGS now + that it isn't strictly necessary. We used to do this through + TARGET_LIBGCC2_CFLAGS, but that became increasingly difficult as the + parenthesis (that needed quoting) travels through several layers of + make and shell invocations. */ + #ifdef IN_LIBGCC2 + #define __make_dp(a,b,c,d) __cris_make_dp(d,a,b,c) + #endif + + + /* Node: Driver */ + + /* When using make with defaults.mak for Sun this will handily remove + any "-target sun*" switches. */ + /* We need to override any previous definitions (linux.h) */ + #undef WORD_SWITCH_TAKES_ARG + #define WORD_SWITCH_TAKES_ARG(STR) \ + (DEFAULT_WORD_SWITCH_TAKES_ARG (STR) \ + || !strcmp (STR, "target")) + + /* Also provide canonical vN definitions when user specifies an alias. + Note that -melf overrides -maout. */ + + /* The `-$' is here mostly due to the integrated preprocessor not + handling the builtin expansion of "#define __REGISTER_PREFIX__ $" + gracefully. This is slightly redundant although not incorrect. + We're quite alone defining REGISTER_PREFIX as "$" so it's unlikely + someone will fight for us. This year in the mountains. + Note that for -melinux and -mlinux, command-line -isystem options are + emitted both before and after the synthesized one. We can't remove all + of them: a %{= CRIS_CPU_NG) + + #define TARGET_OPTIONS \ + {{"cpu=", &cris_cpu_str, ""}, \ + {"arch=", &cris_cpu_str, \ + N_("Generate code for the specified chip or CPU version")}, \ + {"tune=", &cris_tune_str, \ + N_("Tune alignment for the specified chip or CPU version")}, \ + {"max-stackframe=", &cris_max_stackframe_str, \ + N_("Warn when a stackframe is larger than the specified size")}, \ + CRIS_SUBTARGET_LONG_OPTIONS \ + {"ax-stackframe=", &cris_max_stackframe_str, ""}} + + #define CRIS_SUBTARGET_LONG_OPTIONS + + /* Print subsidiary information on the compiler version in use. + Do not use VD.D syntax (D=digit), since this will cause confusion + with the base gcc version among users, when we ask which version of + gcc-cris they are using. Please use some flavor of "R" for + the version (no need for major.minor versions, I believe). */ + #define TARGET_VERSION \ + fprintf (stderr, " [Axis CRIS%s]", CRIS_SUBTARGET_VERSION) + + /* For the cris-*-elf subtarget. */ + #define CRIS_SUBTARGET_VERSION " - generic ELF" + + #define OVERRIDE_OPTIONS cris_override_options () + + /* The following gives optimal code for gcc-2.7.2, but *may* be subject + to change. Omitting flag_force_addr gives .1-.7% faster code for gcc + *only*, but 1.3% larger code. On ipps it gives 5.3-10.6% slower + code(!) and 0.3% larger code. For products, images gets .1-1.8% + larger. Do not set strict aliasing from optimization options. */ + #define OPTIMIZATION_OPTIONS(OPTIMIZE, SIZE) \ + do \ + { \ + if ((OPTIMIZE) >= 2 || (SIZE)) \ + { \ + flag_force_addr = 1; \ + flag_omit_frame_pointer = 1; \ + } \ + } \ + while (0) + + + /* Node: Storage Layout */ + + #define BITS_BIG_ENDIAN 0 + + #define BYTES_BIG_ENDIAN 0 + + /* WORDS_BIG_ENDIAN is not defined in the hardware, but for consistency, + we use little-endianness, and we may also be able to use + post-increment on DImode indirect. */ + #define WORDS_BIG_ENDIAN 0 + + #define BITS_PER_UNIT 8 + + #define BITS_PER_WORD 32 + + #define UNITS_PER_WORD 4 + + #define POINTER_SIZE 32 + + /* A combination of defining PROMOTE_MODE, PROMOTE_FUNCTION_ARGS, + PROMOTE_FOR_CALL_ONLY and *not* defining PROMOTE_PROTOTYPES gives the + best code size and speed for gcc, ipps and products in gcc-2.7.2. */ + #define CRIS_PROMOTED_MODE(MODE, UNSIGNEDP, TYPE) \ + (GET_MODE_CLASS (MODE) == MODE_INT && GET_MODE_SIZE (MODE) < 4) \ + ? SImode : MODE + + #define PROMOTE_MODE(MODE, UNSIGNEDP, TYPE) \ + (MODE) = CRIS_PROMOTED_MODE (MODE, UNSIGNEDP, TYPE) + + #define PROMOTE_FUNCTION_ARGS + + /* Defining PROMOTE_FUNCTION_RETURN in gcc-2.7.2 uncovers bug 981110 (even + if defining FUNCTION_VALUE with MODE as PROMOTED_MODE ;-) + + FIXME: Report this when cris.h is part of GCC, so others can easily + see the problem. Maybe check other systems that define + PROMOTE_FUNCTION_RETURN. */ + #define PROMOTE_FOR_CALL_ONLY + + /* We will be using prototype promotion, so they will be 32 bit. */ + #define PARM_BOUNDARY 32 + + /* Stack boundary is guided by -mstack-align, -mno-stack-align, + -malign. + Old comment: (2.1: still valid in 2.7.2?) + Note that to make this macro affect the alignment of stack + locals, a fix was required, and special precautions when handling + the stack pointer in various other macros (TARGET_ASM_FUNCTION_PROLOGUE + et al) were required. See file "function.c". If you would just define + this macro, it would only affect the builtin alloca and variable + local data (non-ANSI, non-K&R, Gnu C extension). */ + #define STACK_BOUNDARY \ + (TARGET_STACK_ALIGN ? (TARGET_ALIGN_BY_32 ? 32 : 16) : 8) + + #define FUNCTION_BOUNDARY 16 + + /* Do not change BIGGEST_ALIGNMENT (when optimizing), as it will affect + strange places, at least in 2.1. */ + #define BIGGEST_ALIGNMENT 8 + + /* If -m16bit, -m16-bit, -malign or -mdata-align, + align everything to 16 bit. */ + #define DATA_ALIGNMENT(TYPE, BASIC_ALIGN) \ + (TARGET_DATA_ALIGN \ + ? (TARGET_ALIGN_BY_32 \ + ? (BASIC_ALIGN < 32 ? 32 : BASIC_ALIGN) \ + : (BASIC_ALIGN < 16 ? 16 : BASIC_ALIGN)) : BASIC_ALIGN) + + /* Note that CONSTANT_ALIGNMENT has the effect of making gcc believe that + ALL references to constant stuff (in code segment, like strings) has + this alignment. That is a rather rushed assumption. Luckily we do not + care about the "alignment" operand to builtin memcpy (only place where + it counts), so it doesn't affect any bad spots. */ + #define CONSTANT_ALIGNMENT(CONSTANT, BASIC_ALIGN) \ + (TARGET_CONST_ALIGN \ + ? (TARGET_ALIGN_BY_32 \ + ? (BASIC_ALIGN < 32 ? 32 : BASIC_ALIGN) \ + : (BASIC_ALIGN < 16 ? 16 : BASIC_ALIGN)) : BASIC_ALIGN) + + /* FIXME: Define LOCAL_ALIGNMENT for word and dword or arrays and + structures (if -mstack-align=), and check that it is good. */ + + #define EMPTY_FIELD_BOUNDARY 8 + + #define STRUCTURE_SIZE_BOUNDARY 8 + + #define STRICT_ALIGNMENT 0 + + /* Remove any previous definition (elfos.h). + ??? If it wasn't for all the other stuff that affects layout of + structures and bit-fields, this could presumably cause incompatibility + with other GNU/Linux ports (i.e. elfos.h users). */ + #undef PCC_BITFIELD_TYPE_MATTERS + + /* This is only used for non-scalars. Strange stuff happens to structs + (FIXME: What?) if we use anything larger than largest actually used + datum size, so lets make it 32. The type "long long" will still work + as usual. We can still have DImode insns, but they will only be used + for scalar data (i.e. long long). */ + #define MAX_FIXED_MODE_SIZE 32 + + + /* Node: Type Layout */ + + /* Note that DOUBLE_TYPE_SIZE is not defined anymore, since the default + value gives a 64-bit double, which is what we now use. */ + + /* For compatibility and historical reasons, a char should be signed. */ + #define DEFAULT_SIGNED_CHAR 1 + + /* No DEFAULT_SHORT_ENUMS, please. */ + + /* Note that WCHAR_TYPE_SIZE is used in cexp.y, + where TARGET_SHORT is not available. */ + #undef WCHAR_TYPE + #define WCHAR_TYPE "long int" + + #undef WCHAR_TYPE_SIZE + #define WCHAR_TYPE_SIZE 32 + + + /* Node: Register Basics */ + + /* We count all 16 non-special registers, SRP and a faked argument + pointer register. */ + #define FIRST_PSEUDO_REGISTER (16 + 1 + 1) + + /* For CRIS, these are r15 (pc) and r14 (sp). Register r8 is used as a + frame-pointer, but is not fixed. SRP is not included in general + registers and will not be used automatically. All other special + registers are fixed at the moment. The faked argument pointer register + is fixed too. */ + #define FIXED_REGISTERS \ + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1} + + /* Register r9 is used for structure-address, r10-r13 for parameters, + r10- for return values. */ + #define CALL_USED_REGISTERS \ + {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1} + + #define CONDITIONAL_REGISTER_USAGE cris_conditional_register_usage () + + + /* Node: Allocation Order */ + + /* We need this on CRIS, because call-used regs should be used first, + (so we don't need to push). Else start using registers from r0 and up. + This preference is mainly because if we put call-used-regs from r0 + and up, then we can't use movem to push the rest, (which have to be + saved if we use them, and movem has to start with r0). + Change here if you change which registers to use as call registers. + + The actual need to explicitly prefer call-used registers improved the + situation a lot for 2.1, but might not actually be needed anymore. + Still, this order reflects what GCC should find out by itself, so it + probably does not hurt. + + Order of preference: Call-used-regs first, then r0 and up, last fp & + sp & pc as fillers. + Call-used regs in opposite order, so they will cause less conflict if + a function has few args (<= 3) and it wants a scratch reg. + Use struct-return address first, since very few functions use + structure return values so it is likely to be available. */ + #define REG_ALLOC_ORDER \ + {9, 13, 12, 11, 10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 14, 15, 16, 17} + + + /* Node: Values in Registers */ + + /* The VOIDmode test is so we can omit mode on anonymous insns. FIXME: + Still needed in 2.9x, at least for Axis-20000319. */ + #define HARD_REGNO_NREGS(REGNO, MODE) \ + (MODE == VOIDmode \ + ? 1 : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)) + + /* CRIS permits all registers to hold all modes. */ + #define HARD_REGNO_MODE_OK(REGNO, MODE) 1 + + #define MODES_TIEABLE_P(MODE1, MODE2) 1 + + + /* Node: Leaf Functions */ + /* (no definitions) */ + + /* Node: Stack Registers */ + /* (no definitions) */ + + + /* Node: Register Classes */ + + /* CRIS has only one kind of registers, so NO_REGS and ALL_REGS + are the only classes. FIXME: It actually makes sense to have another + class for special registers, and yet another class for the + multiply-overflow register in v10; then a class for the return + register also makes sense. */ + enum reg_class {NO_REGS, ALL_REGS, LIM_REG_CLASSES}; + + #define N_REG_CLASSES (int) LIM_REG_CLASSES + + #define REG_CLASS_NAMES {"NO_REGS", "ALL_REGS"} + + #define GENERAL_REGS ALL_REGS + + /* Count in the faked argument register in GENERAL_REGS. Keep out SRP. */ + #define REG_CLASS_CONTENTS {{0}, {0x2ffff}} + + #define REGNO_REG_CLASS(REGNO) GENERAL_REGS + + #define BASE_REG_CLASS GENERAL_REGS + + #define INDEX_REG_CLASS GENERAL_REGS + + /* Get reg_class from a letter such as appears in the machine + description. No letters are used, since 'r' is used for any + register. */ + #define REG_CLASS_FROM_LETTER(C) NO_REGS + + /* Since it uses reg_renumber, it is safe only once reg_renumber + has been allocated, which happens in local-alloc.c. */ + #define REGNO_OK_FOR_BASE_P(REGNO) \ + ((REGNO) <= CRIS_LAST_GENERAL_REGISTER \ + || (REGNO) == ARG_POINTER_REGNUM \ + || (unsigned) reg_renumber[REGNO] <= CRIS_LAST_GENERAL_REGISTER \ + || (unsigned) reg_renumber[REGNO] == ARG_POINTER_REGNUM) + + /* See REGNO_OK_FOR_BASE_P. */ + #define REGNO_OK_FOR_INDEX_P(REGNO) REGNO_OK_FOR_BASE_P(REGNO) + + /* It seems like gcc (2.7.2 and 2.9x of 2000-03-22) may send "NO_REGS" as + the class for a constant (testcase: __Mul in arit.c). To avoid forcing + out a constant into the constant pool, we will trap this case and + return something a bit more sane. FIXME: Check if this is a bug. */ + #define PREFERRED_RELOAD_CLASS(X, CLASS) \ + ((CLASS) == NO_REGS ? GENERAL_REGS : (CLASS)) + + /* For CRIS, this is always the size of MODE in words, + since all registers are the same size. To use omitted modes in + patterns with reload constraints, you must say the widest size + which is allowed for VOIDmode. + FIXME: Does that still apply for gcc-2.9x? Keep poisoned until such + patterns are added back. News: 2001-03-16: Happens as early as the + underscore-test. */ + #define CLASS_MAX_NREGS(CLASS, MODE) \ + ((MODE) == VOIDmode \ + ? 1 /* + cris_fatal ("CLASS_MAX_NREGS with VOIDmode") */ \ + : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)) + + /* We are now out of letters; we could use ten more. This forces us to + use C-code in the 'md' file. FIXME: Use some EXTRA_CONSTRAINTS. */ + #define CONST_OK_FOR_LETTER_P(VALUE, C) \ + ( \ + /* MOVEQ, CMPQ, ANDQ, ORQ. */ \ + (C) == 'I' ? (VALUE) >= -32 && (VALUE) <= 31 : \ + /* ADDQ, SUBQ. */ \ + (C) == 'J' ? (VALUE) >= 0 && (VALUE) <= 63 : \ + /* ASRQ, BTSTQ, LSRQ, LSLQ. */ \ + (C) == 'K' ? (VALUE) >= 0 && (VALUE) <= 31 : \ + /* A 16-bit signed number. */ \ + (C) == 'L' ? (VALUE) >= -32768 && (VALUE) <= 32767 : \ + /* The constant 0 for CLEAR. */ \ + (C) == 'M' ? (VALUE) == 0 : \ + /* A negative ADDQ or SUBQ. */ \ + (C) == 'N' ? (VALUE) >= -63 && (VALUE) < 0 : \ + /* Quickened ints, QI and HI. */ \ + (C) == 'O' ? (VALUE) >= 0 && (VALUE) <= 65535 \ + && ((VALUE) >= (65535-31) \ + || ((VALUE) >= (255-31) \ + && (VALUE) <= 255 )) : \ + /* A 16-bit number signed *or* unsigned. */ \ + (C) == 'P' ? (VALUE) >= -32768 && (VALUE) <= 65535 : \ + 0) + + /* It is really simple to make up a 0.0; it is the same as int-0 in + IEEE754. */ + #define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) \ + ((C) == 'G' && ((VALUE) == CONST0_RTX (DFmode) \ + || (VALUE) == CONST0_RTX (SFmode))) + + /* We need this on cris to distinguish delay-slottable addressing modes. */ + #define EXTRA_CONSTRAINT(X, C) \ + ( \ + /* Slottable address mode? */ \ + (C) == 'Q' ? EXTRA_CONSTRAINT_Q (X) : \ + /* Operand to BDAP or BIAP? */ \ + (C) == 'R' ? EXTRA_CONSTRAINT_R (X) : \ + /* A local PIC symbol? */ \ + (C) == 'S' ? EXTRA_CONSTRAINT_S (X) : \ + /* A three-address addressing-mode? */ \ + (C) == 'T' ? EXTRA_CONSTRAINT_T (X) : \ + /* A global PIC symbol? */ \ + (C) == 'U' ? EXTRA_CONSTRAINT_U (X) : \ + 0) + + #define EXTRA_CONSTRAINT_Q(X) \ + ( \ + /* Slottable addressing modes: \ + A register? FIXME: Unnecessary. */ \ + (BASE_P (X) && REGNO (X) != CRIS_PC_REGNUM) \ + /* Indirect register: [reg]? */ \ + || (GET_CODE (X) == MEM && BASE_P (XEXP (X, 0)) \ + && REGNO (XEXP (X, 0)) != CRIS_PC_REGNUM) \ + ) + + #define EXTRA_CONSTRAINT_R(X) \ + ( \ + /* An operand to BDAP or BIAP: \ + A BIAP; r.S? */ \ + BIAP_INDEX_P (X) \ + /* A [reg] or (int) [reg], maybe with post-increment. */ \ + || BDAP_INDEX_P (X) \ + || CONSTANT_INDEX_P (X) \ + ) + + #define EXTRA_CONSTRAINT_T(X) \ + ( \ + /* Memory three-address operand. All are indirect-memory: */ \ + GET_CODE (X) == MEM \ + && ((GET_CODE (XEXP (X, 0)) == MEM \ + /* Double indirect: [[reg]] or [[reg+]]? */ \ + && (BASE_OR_AUTOINCR_P (XEXP (XEXP (X, 0), 0)))) \ + /* Just an explicit indirect reference: [const]? */ \ + || CONSTANT_P (XEXP (X, 0)) \ + /* Something that is indexed; [...+...]? */ \ + || (GET_CODE (XEXP (X, 0)) == PLUS \ + /* A BDAP constant: [reg+(8|16|32)bit offset]? */ \ + && ((BASE_P (XEXP (XEXP (X, 0), 0)) \ + && CONSTANT_INDEX_P (XEXP (XEXP (X, 0), 1))) \ + /* Swap arguments to the above. FIXME: gcc-2.9x? */ \ + || (BASE_P (XEXP (XEXP (X, 0), 1)) \ + && CONSTANT_INDEX_P (XEXP (XEXP (X, 0), 0))) \ + /* A BDAP register: [reg+[reg(+)].S]? */ \ + || (BASE_P (XEXP (XEXP (X, 0), 0)) \ + && BDAP_INDEX_P(XEXP(XEXP(X, 0), 1))) \ + /* Same, but with swapped arguments. */ \ + || (BASE_P (XEXP (XEXP (X, 0), 1)) \ + && BDAP_INDEX_P (XEXP (XEXP (X, 0), 0))) \ + /* A BIAP: [reg+reg.S]. */ \ + || (BASE_P (XEXP (XEXP (X, 0), 0)) \ + && BIAP_INDEX_P (XEXP (XEXP (X, 0), 1))) \ + /* Same, but with swapped arguments. */ \ + || (BASE_P (XEXP (XEXP (X, 0), 1)) \ + && BIAP_INDEX_P (XEXP (XEXP (X, 0), 0)))))) \ + ) + + #define EXTRA_CONSTRAINT_S(X) \ + (flag_pic && CONSTANT_P (X) && cris_gotless_symbol (X)) + + #define EXTRA_CONSTRAINT_U(X) \ + (flag_pic && CONSTANT_P (X) && cris_got_symbol (X)) + + + /* Node: Frame Layout */ + + #define STACK_GROWS_DOWNWARD + #define FRAME_GROWS_DOWNWARD + + /* It seems to be indicated in the code (at least 2.1) that this is + better a constant, and best 0. */ + #define STARTING_FRAME_OFFSET 0 + + #define FIRST_PARM_OFFSET(FNDECL) 0 + + #define RETURN_ADDR_RTX(COUNT, FRAMEADDR) \ + cris_return_addr_rtx (COUNT, FRAMEADDR) + + #define INCOMING_RETURN_ADDR_RTX gen_rtx (REG, Pmode, CRIS_SRP_REGNUM) + + /* FIXME: Any __builtin_eh_return callers must not return anything and + there must not be collisions with incoming parameters. Luckily the + number of __builtin_eh_return callers is limited. For now return + parameter registers in reverse order and hope for the best. */ + #define EH_RETURN_DATA_REGNO(N) \ + (IN_RANGE ((N), 0, 3) ? (CRIS_FIRST_ARG_REG + 3 - (N)) : INVALID_REGNUM) + + /* Store the stack adjustment in the structure-return-address register. */ + #define CRIS_STACKADJ_REG STRUCT_VALUE_REGNUM + #define EH_RETURN_STACKADJ_RTX gen_rtx_REG (SImode, CRIS_STACKADJ_REG) + + #define EH_RETURN_HANDLER_RTX \ + cris_return_addr_rtx (0, NULL) + + #define INIT_EXPANDERS cris_init_expanders () + + /* FIXME: Move this to right node (it's not documented properly yet). */ + #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (CRIS_SRP_REGNUM) + + /* FIXME: Move this to right node (it's not documented properly yet). + FIXME: Check what alignment we can assume regarding + TARGET_STACK_ALIGN and TARGET_ALIGN_BY_32. */ + #define DWARF_CIE_DATA_ALIGNMENT -1 + + /* If we would ever need an exact mapping between canonical register + number and dwarf frame register, we would either need to include all + registers in the gcc decription (with some marked fixed of course), or + an inverse mapping from dwarf register to gcc register. There is one + need in dwarf2out.c:expand_builtin_init_dwarf_reg_sizes. Right now, I + don't see that we need exact correspondence between DWARF *frame* + registers and DBX_REGISTER_NUMBER, so map them onto GCC registers. */ + #define DWARF_FRAME_REGNUM(REG) (REG) + + /* Node: Stack Checking */ + /* (no definitions) FIXME: Check. */ + + /* Node: Frame Registers */ + + #define STACK_POINTER_REGNUM 14 + + /* Register used for frame pointer. This is also the last of the saved + registers, when a frame pointer is not used. */ + #define FRAME_POINTER_REGNUM 8 + + /* Faked register, is always eliminated. We need it to eliminate + allocating stack slots for the return address and the frame pointer. */ + #define ARG_POINTER_REGNUM 17 + + #define STATIC_CHAIN_REGNUM 7 + + + /* Node: Elimination */ + + /* Really only needed if the stack frame has variable length (alloca + or variable sized local arguments (GNU C extension). */ + #define FRAME_POINTER_REQUIRED 0 + + #define ELIMINABLE_REGS \ + {{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \ + {ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \ + {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}} + + /* We need not worry about when the frame-pointer is required for other + reasons. */ + #define CAN_ELIMINATE(FROM, TO) 1 + + #define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \ + (OFFSET) = cris_initial_elimination_offset (FROM, TO) + + + /* Node: Stack Arguments */ + + /* Since many parameters take up one register each in any case, + PROMOTE_PROTOTYPES would seem like a good idea, but measurements + indicate that a combination using PROMOTE_MODE is better. */ + + #define ACCUMULATE_OUTGOING_ARGS 1 + + #define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, STACKSIZE) 0 + + + /* Node: Register Arguments */ + + /* The void_type_node is sent as a "closing" call. We have to stop it + since it's invalid to FUNCTION_ARG_PASS_BY_REFERENCE (or was invalid at + some time). */ + #define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \ + ((CUM).regs < CRIS_MAX_ARGS_IN_REGS \ + && (TYPE) != void_type_node \ + && ! FUNCTION_ARG_PASS_BY_REFERENCE (CUM, MODE, TYPE, NAMED) \ + ? gen_rtx (REG, MODE, (CRIS_FIRST_ARG_REG) + (CUM).regs) \ + : NULL_RTX) + + /* The differences between this and the previous, is that this one checks + that an argument is named, since incoming stdarg/varargs arguments are + pushed onto the stack, and we don't have to check against the "closing" + void_type_node TYPE parameter. */ + #define FUNCTION_INCOMING_ARG(CUM, MODE, TYPE, NAMED) \ + (((NAMED) && (CUM).regs < CRIS_MAX_ARGS_IN_REGS \ + && ! FUNCTION_ARG_PASS_BY_REFERENCE (CUM, MODE, TYPE, NAMED)) \ + ? gen_rtx (REG, MODE, CRIS_FIRST_ARG_REG + (CUM).regs) \ + : NULL_RTX) + + #define FUNCTION_ARG_PARTIAL_NREGS(CUM, MODE, TYPE, NAMED) \ + (((CUM).regs == (CRIS_MAX_ARGS_IN_REGS - 1) \ + && !MUST_PASS_IN_STACK (MODE, TYPE) \ + && CRIS_FUNCTION_ARG_SIZE (MODE, TYPE) > 4 \ + && CRIS_FUNCTION_ARG_SIZE (MODE, TYPE) <= 8) \ + ? 1 : 0) + + /* Structs may be passed by value, but they must not be more than 8 + bytes long. If you tweak this, don't forget to adjust + cris_expand_builtin_va_arg. */ + #define FUNCTION_ARG_PASS_BY_REFERENCE(CUM, MODE, TYPE, NAMED) \ + (MUST_PASS_IN_STACK (MODE, TYPE) \ + || CRIS_FUNCTION_ARG_SIZE (MODE, TYPE) > 8) \ + + /* Contrary to what you'd believe, defining FUNCTION_ARG_CALLEE_COPIES + seems like a (small total) loss, at least for gcc-2.7.2 compiling and + running gcc-2.1 (small win in size, small loss running -- 100.1%), + and similarly for size for products (.1 .. .3% bloat, sometimes win). + Due to the empirical likeliness of making slower code, it is not + defined. */ + + /* This no longer *needs* to be a structure; but keeping it as such should + not hurt (and hacking the ABI is simpler). */ + #define CUMULATIVE_ARGS struct cum_args + struct cum_args {int regs;}; + + /* The regs member is an integer, the number of arguments got into + registers so far, and lib is nonzero if init_cumulative_args was + found to generate a call to a library function. */ + #define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT) \ + ((CUM).regs = 0) + + #define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \ + ((CUM).regs \ + = (FUNCTION_ARG_PASS_BY_REFERENCE(CUM, MODE, TYPE, NAMED) \ + ? (CRIS_MAX_ARGS_IN_REGS) + 1 \ + : ((CUM).regs \ + + (3 + (CRIS_FUNCTION_ARG_SIZE (MODE, TYPE))) / 4))) + + #define FUNCTION_ARG_REGNO_P(REGNO) \ + ((REGNO) >= CRIS_FIRST_ARG_REG \ + && (REGNO) < CRIS_FIRST_ARG_REG + (CRIS_MAX_ARGS_IN_REGS)) + + + /* Node: Scalar Return */ + + /* Let's assume all functions return in r[CRIS_FIRST_ARG_REG] for the + time being. */ + #define FUNCTION_VALUE(VALTYPE, FUNC) \ + gen_rtx (REG, TYPE_MODE (VALTYPE), CRIS_FIRST_ARG_REG) + + #define LIBCALL_VALUE(MODE) gen_rtx (REG, MODE, CRIS_FIRST_ARG_REG) + + #define FUNCTION_VALUE_REGNO_P(N) ((N) == CRIS_FIRST_ARG_REG) + + + /* Node: Aggregate Return */ + + #if 0 + /* FIXME: Let's try this some time, so we return structures in registers. + We would cast the result of int_size_in_bytes to unsigned, so we will + get a huge number for "structures" of variable size (-1). */ + #define RETURN_IN_MEMORY(TYPE) \ + ((unsigned) int_size_in_bytes (TYPE) > CRIS_MAX_ARGS_IN_REGS * UNITS_PER_WORD) + #endif + + #define STRUCT_VALUE_REGNUM ((CRIS_FIRST_ARG_REG) - 1) + + + /* Node: Caller Saves */ + /* (no definitions) */ + + /* Node: Function entry */ + + /* See cris.c for TARGET_ASM_FUNCTION_PROLOGUE and + TARGET_ASM_FUNCTION_EPILOGUE. */ + + /* If the epilogue uses the "ret" insn, we need to fill the + delay slot. */ + #define DELAY_SLOTS_FOR_EPILOGUE cris_delay_slots_for_epilogue () + + #define ELIGIBLE_FOR_EPILOGUE_DELAY(INSN, N) \ + cris_eligible_for_epilogue_delay (INSN) + + #define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \ + cris_asm_output_mi_thunk(FILE, THUNK_FNDECL, DELTA, FUNCTION) + + + /* Node: Profiling */ + + #define FUNCTION_PROFILER(FILE, LABELNO) \ + error ("no FUNCTION_PROFILER for CRIS") + + /* FIXME: Some of the undefined macros might be mandatory. If so, fix + documentation. */ + + + /* Node: Varargs */ + + /* We save the register number of the first anonymous argument in + first_vararg_reg, and take care of this in the function prologue. + This behaviour is used by at least one more port (the ARM?), but + may be unsafe when compiling nested functions. (With varargs? Hairy.) + Note that nested-functions is a GNU C extension. + + FIXME: We can actually put the size in PRETEND and deduce the number + of registers from it in the prologue and epilogue. */ + #define SETUP_INCOMING_VARARGS(ARGSSF, MODE, TYPE, PRETEND, SECOND) \ + do \ + { \ + if ((ARGSSF).regs < (CRIS_MAX_ARGS_IN_REGS)) \ + (PRETEND) = ((CRIS_MAX_ARGS_IN_REGS) - (ARGSSF).regs) * 4; \ + if (TARGET_PDEBUG) \ + { \ + fprintf (asm_out_file, \ + "\n; VA:: %s: %d args before, anon @ #%d, %dtime\n", \ + current_function_varargs ? "OLD" : "ANSI", \ + (ARGSSF).regs, PRETEND, SECOND); \ + } \ + } \ + while (0) + + /* FIXME: This and other EXPAND_BUILTIN_VA_... target macros are not + documented, although used by several targets. */ + #define EXPAND_BUILTIN_VA_ARG(VALIST, TYPE) \ + cris_expand_builtin_va_arg (VALIST, TYPE) + + + /* Node: Trampolines */ + + /* This looks too complicated, and it is. I assigned r7 to be the + static chain register, but it is call-saved, so we have to save it, + and come back to restore it after the call, so we have to save srp... + Anyway, trampolines are rare enough that we can cope with this + somewhat lack of elegance. + (Do not be tempted to "straighten up" whitespace in the asms; the + assembler #NO_APP state mandates strict spacing). */ + #define TRAMPOLINE_TEMPLATE(FILE) \ + do \ + { \ + fprintf (FILE, "\tmove.d $%s,[$pc+20]\n", \ + reg_names[STATIC_CHAIN_REGNUM]); \ + fprintf (FILE, "\tmove $srp,[$pc+22]\n"); \ + fprintf (FILE, "\tmove.d 0,$%s\n", \ + reg_names[STATIC_CHAIN_REGNUM]); \ + fprintf (FILE, "\tjsr 0\n"); \ + fprintf (FILE, "\tmove.d 0,$%s\n", \ + reg_names[STATIC_CHAIN_REGNUM]); \ + fprintf (FILE, "\tjump 0\n"); \ + } \ + while (0) + + #define TRAMPOLINE_SIZE 32 + + /* CRIS wants instructions on word-boundary. + Note that due to a bug (reported) in 2.7.2 and earlier, this is + actually treated as alignment in _bytes_, not _bits_. (Obviously + this is not fatal, only a slight waste of stack space). */ + #define TRAMPOLINE_ALIGNMENT 16 + + #define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \ + do \ + { \ + emit_move_insn (gen_rtx (MEM, SImode, \ + plus_constant (TRAMP, 10)), \ + CXT); \ + emit_move_insn (gen_rtx (MEM, SImode, \ + plus_constant (TRAMP, 16)), \ + FNADDR); \ + } \ + while (0) + + /* Note that there is no need to do anything with the cache for sake of + a trampoline. */ + + + /* Node: Library Calls */ + + #define MULSI3_LIBCALL "__Mul" + #define DIVSI3_LIBCALL "__Div" + #define UDIVSI3_LIBCALL "__Udiv" + #define MODSI3_LIBCALL "__Mod" + #define UMODSI3_LIBCALL "__Umod" + + /* If you change this, you have to check whatever libraries and systems + that use it. */ + #define TARGET_EDOM 33 + + + /* Node: Addressing Modes */ + + #define HAVE_POST_INCREMENT 1 + + #define CONSTANT_ADDRESS_P(X) CONSTANT_P (X) + + #define MAX_REGS_PER_ADDRESS 2 + + /* There are helper macros defined here which are used only in + GO_IF_LEGITIMATE_ADDRESS. + + Note that you *have to* reject invalid addressing modes for mode + MODE, even if it is legal for normal addressing modes. You cannot + rely on the constraints to do this work. They can only be used to + doublecheck your intentions. One example is that you HAVE TO reject + (mem:DI (plus:SI (reg:SI x) (reg:SI y))) because for some reason + this cannot be reloaded. (Which of course you can argue that gcc + should have done.) FIXME: Strange. Check. */ + + /* No symbol can be used as an index (or more correct, as a base) together + with a register with PIC; the PIC register must be there. */ + #define CONSTANT_INDEX_P(X) \ + (CONSTANT_P (X) && !(flag_pic && cris_symbol (X))) + + /* True if X is a valid base register. */ + #define BASE_P(X) \ + (REG_P (X) && REG_OK_FOR_BASE_P (X)) + + /* True if X is a valid base register with or without autoincrement. */ + #define BASE_OR_AUTOINCR_P(X) \ + (BASE_P (X) || (GET_CODE (X) == POST_INC && BASE_P (XEXP (X, 0)))) + + /* True if X is a valid (register) index for BDAP, i.e. [Rs].S or [Rs+].S. */ + #define BDAP_INDEX_P(X) \ + ((GET_CODE (X) == MEM && GET_MODE (X) == SImode \ + && BASE_OR_AUTOINCR_P (XEXP (X, 0))) \ + || (GET_CODE (X) == SIGN_EXTEND \ + && GET_CODE (XEXP (X, 0)) == MEM \ + && (GET_MODE (XEXP (X, 0)) == HImode \ + || GET_MODE (XEXP (X, 0)) == QImode) \ + && BASE_OR_AUTOINCR_P (XEXP (XEXP (X, 0), 0)))) + + /* True if X is a valid (register) index for BIAP, i.e. Rd.m. */ + #define BIAP_INDEX_P(X) \ + ((BASE_P (X) && REG_OK_FOR_INDEX_P (X)) \ + || (GET_CODE (X) == MULT \ + && BASE_P (XEXP (X, 0)) \ + && REG_OK_FOR_INDEX_P (XEXP (X, 0)) \ + && GET_CODE (XEXP (X, 1)) == CONST_INT \ + && (INTVAL (XEXP (X, 1)) == 2 \ + || INTVAL (XEXP (X, 1)) == 4))) + + /* True if X is an address that doesn't need a prefix i.e. [Rs] or [Rs+]. */ + #define SIMPLE_ADDRESS_P(X) \ + (BASE_P (X) \ + || (GET_CODE (X) == POST_INC \ + && BASE_P (XEXP (X, 0)))) + + /* A PIC operand looks like a normal symbol here. At output we dress it + in "[rPIC+symbol:GOT]" (global symbol) or "rPIC+symbol:GOTOFF" (local + symbol) so we exclude all addressing modes where we can't replace a + plain "symbol" with that. A global PIC symbol does not fit anywhere + here (but is thankfully a general_operand in itself). A local PIC + symbol is valid for the plain "symbol + offset" case. */ + #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \ + { \ + rtx x1, x2; \ + if (SIMPLE_ADDRESS_P (X)) \ + goto ADDR; \ + if (CONSTANT_P (X) \ + && (! flag_pic \ + || cris_gotless_symbol (X) \ + || ! cris_symbol (X))) \ + goto ADDR; \ + /* Indexed? */ \ + if (GET_CODE (X) == PLUS) \ + { \ + x1 = XEXP (X, 0); \ + x2 = XEXP (X, 1); \ + /* BDAP o, Rd. */ \ + if ((BASE_P (x1) && CONSTANT_INDEX_P (x2)) \ + || (BASE_P (x2) && CONSTANT_INDEX_P (x1)) \ + /* BDAP Rs[+], Rd. */ \ + || (GET_MODE_SIZE (MODE) <= UNITS_PER_WORD \ + && ((BASE_P (x1) && BDAP_INDEX_P (x2)) \ + || (BASE_P (x2) && BDAP_INDEX_P (x1)) \ + /* BIAP.m Rs, Rd */ \ + || (BASE_P (x1) && BIAP_INDEX_P (x2)) \ + || (BASE_P (x2) && BIAP_INDEX_P (x1))))) \ + goto ADDR; \ + } \ + else if (GET_CODE (X) == MEM) \ + { \ + /* DIP (Rs). Reject [[reg+]] and [[reg]] for \ + DImode (long long). */ \ + if (GET_MODE_SIZE (MODE) <= UNITS_PER_WORD \ + && (BASE_P (XEXP (X, 0)) \ + || BASE_OR_AUTOINCR_P (XEXP (X, 0)))) \ + goto ADDR; \ + } \ + } + + #ifndef REG_OK_STRICT + /* Nonzero if X is a hard reg that can be used as a base reg + or if it is a pseudo reg. */ + # define REG_OK_FOR_BASE_P(X) \ + (REGNO (X) <= CRIS_LAST_GENERAL_REGISTER \ + || REGNO (X) == ARG_POINTER_REGNUM \ + || REGNO (X) >= FIRST_PSEUDO_REGISTER) + #else + /* Nonzero if X is a hard reg that can be used as a base reg. */ + # define REG_OK_FOR_BASE_P(X) REGNO_OK_FOR_BASE_P (REGNO (X)) + #endif + + #ifndef REG_OK_STRICT + /* Nonzero if X is a hard reg that can be used as an index + or if it is a pseudo reg. */ + # define REG_OK_FOR_INDEX_P(X) REG_OK_FOR_BASE_P (X) + #else + /* Nonzero if X is a hard reg that can be used as an index. */ + # define REG_OK_FOR_INDEX_P(X) REGNO_OK_FOR_INDEX_P (REGNO (X)) + #endif + + /* For now, don't do anything. GCC does a good job most often. + + Maybe we could do something about gcc:s misbehaviour when it + recalculates frame offsets for local variables, from fp+offs to + sp+offs. The resulting address expression gets screwed up + sometimes, but I'm not sure that it may be fixed here, since it is + already split up in several instructions (Is this still true?). + FIXME: Check and adjust for gcc-2.9x. */ + #define LEGITIMIZE_ADDRESS(X, OLDX, MODE, WIN) {} + + /* Functionality import from EGCS. + Kludge to solve Axis-990219: Work around imperfection in + reload_load_address1: + (plus (sign_extend (mem:qi (reg))) (reg)) + should be reloaded as (plus (reg) (reg)), not + (plus (sign_extend (reg)) (reg)). + There are no checks that reload_load_address_1 "reloads" + addresses correctly, so invalidness is not caught or + corrected. + When the right thing happens, the "something_reloaded" kludge can + be removed. The right thing does not appear to happen for + EGCS CVS as of this date (above). */ + + #define LEGITIMIZE_RELOAD_ADDRESS(X, MODE, OPNUM, TYPE, IND_LEVELS, WIN) \ + do \ + { \ + if (GET_CODE (X) == PLUS \ + && REG_P (XEXP (X, 1)) \ + && GET_CODE (XEXP (X, 0)) == SIGN_EXTEND \ + && GET_CODE (XEXP (XEXP (X, 0), 0)) == MEM \ + && (GET_MODE (XEXP (XEXP (X, 0), 0)) == HImode \ + || GET_MODE (XEXP (XEXP (X, 0), 0)) == QImode) \ + && (REG_P (XEXP (XEXP (XEXP (X, 0), 0), 0)) \ + || (GET_CODE (XEXP (XEXP (XEXP (X, 0), 0), 0)) \ + == POST_INC \ + && REG_P (XEXP (XEXP (XEXP (XEXP (X, 0), 0), 0), \ + 0))))) \ + { \ + int something_reloaded = 0; \ + \ + if (REGNO (XEXP (X, 1)) >= FIRST_PSEUDO_REGISTER) \ + { \ + /* Second reg is pseudo, reload it. */ \ + push_reload (XEXP (X, 1), NULL_RTX, &XEXP (X, 1), \ + NULL, \ + GENERAL_REGS, GET_MODE (X), VOIDmode, 0, 0, \ + OPNUM, TYPE); \ + something_reloaded = 1; \ + } \ + \ + if (REG_P (XEXP (XEXP (X, 0), 0)) \ + && (REGNO (XEXP (XEXP (X, 0), 0)) \ + >= FIRST_PSEUDO_REGISTER)) \ + { \ + /* First one is a pseudo - reload that. */ \ + push_reload (XEXP (XEXP (X, 0), 0), NULL_RTX, \ + &XEXP (XEXP (X, 0), 0), NULL, \ + GENERAL_REGS, \ + GET_MODE (X), VOIDmode, 0, 0, OPNUM, TYPE); \ + something_reloaded = 1; \ + } \ + \ + if (! something_reloaded \ + || (GET_CODE (XEXP (XEXP (X, 0), 0)) == POST_INC \ + && (REGNO (XEXP (XEXP (XEXP (X, 0), 0), 0)) \ + >= FIRST_PSEUDO_REGISTER))) \ + /* Reload the sign_extend. Happens if neither reg is a \ + pseudo, or the first one was inside post_increment. */ \ + push_reload (XEXP (X, 0), NULL_RTX, &XEXP (X, 0), NULL, \ + GENERAL_REGS, GET_MODE (X), VOIDmode, 0, 0, \ + OPNUM, TYPE); \ + goto WIN; \ + } \ + } \ + while (0) + + /* In CRIS, only the postincrement address mode depends thus, + since the increment depends on the size of the operand. */ + #define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL) \ + do \ + { \ + if (GET_CODE (ADDR) == POST_INC) \ + goto LABEL; \ + } \ + while (0) + + #define LEGITIMATE_CONSTANT_P(X) 1 + + + /* Node: Condition Code */ + + #define NOTICE_UPDATE_CC(EXP, INSN) cris_notice_update_cc (EXP, INSN) + + /* FIXME: Maybe define CANONICALIZE_COMPARISON later, when playing with + optimizations. It is needed; currently we do this with instruction + patterns and NOTICE_UPDATE_CC. */ + + + /* Node: Costs */ + + #define CONST_COSTS(RTX, CODE, OUTER_CODE) \ + case CONST_INT: \ + if (INTVAL (RTX) == 0) \ + return 0; \ + if (INTVAL (RTX) < 32 && INTVAL (RTX) >= -32) \ + return 1; \ + /* Eight or 16 bits are a word and cycle more expensive. */ \ + if (INTVAL (RTX) <= 32767 && INTVAL (RTX) >= -32768) \ + return 2; \ + /* A 32 bit constant (or very seldom, unsigned 16 bits) costs \ + another word. FIXME: This isn't linear to 16 bits. */ \ + return 4; \ + case LABEL_REF: \ + return 6; \ + case CONST: \ + case SYMBOL_REF: \ + /* For PIC, we need a prefix (if it isn't already there), \ + and the PIC register. For a global PIC symbol, we also need a \ + read of the GOT. */ \ + return \ + flag_pic ? (cris_got_symbol (RTX) ? (2 + 4 + 6) : (2 + 6)) : 6; \ + case CONST_DOUBLE: \ + if (RTX != CONST0_RTX (GET_MODE (RTX) == VOIDmode ? DImode \ + : GET_MODE (RTX))) \ + return 12; \ + /* Make 0.0 cheap, else test-insns will not be used. */ \ + return 0; + + #define RTX_COSTS(X, CODE, OUTER_CODE) \ + case MULT: \ + /* Identify values that are no powers of two. Powers of 2 are \ + taken care of already and those values should not be \ + changed. */ \ + if (GET_CODE (XEXP (X, 1)) != CONST_INT \ + || exact_log2 (INTVAL (XEXP (X, 1)) < 0)) \ + { \ + /* If we have a multiply insn, then the cost is between \ + 1 and 2 "fast" instructions. */ \ + if (TARGET_HAS_MUL_INSNS) \ + return COSTS_N_INSNS (1) + COSTS_N_INSNS (1) /2; \ + \ + /* Estimate as 4 + 4 * #ofbits. */ \ + return COSTS_N_INSNS (132); \ + } \ + break; \ + case UDIV: \ + case MOD: \ + case UMOD: \ + case DIV: \ + if (GET_CODE (XEXP (X, 1)) != CONST_INT \ + || exact_log2 (INTVAL (XEXP (X, 1)) < 0)) \ + /* Estimate this as 4 + 8 * #of bits. */ \ + return COSTS_N_INSNS (260); \ + \ + case AND: \ + if (GET_CODE (XEXP (X, 1)) == CONST_INT \ + /* Two constants may actually happen before optimization. */ \ + && GET_CODE (XEXP (X, 0)) != CONST_INT \ + && !CONST_OK_FOR_LETTER_P (INTVAL (XEXP (X, 1)), 'I')) \ + return \ + rtx_cost (XEXP (X, 0), OUTER_CODE) + 2 \ + + 2 * GET_MODE_NUNITS (GET_MODE (XEXP (X, 0))); \ + \ + case ZERO_EXTEND: case SIGN_EXTEND: \ + /* Same as move. If embedded in other insn, cost is 0. */ \ + return rtx_cost (XEXP (X, 0), OUTER_CODE); + + #define ADDRESS_COST(X) cris_address_cost (X) + + /* FIXME: Need to define REGISTER_MOVE_COST when more register classes are + introduced. */ + + /* This isn't strictly correct for v0..3 in buswidth-8bit mode, but + should suffice. */ + #define MEMORY_MOVE_COST(M, CLASS, IN) \ + (((M) == QImode) ? 4 : ((M) == HImode) ? 4 : 6) + + /* Regardless of the presence of delay slots, the default value of 1 for + BRANCH_COST is the best in the range (1, 2, 3), tested with gcc-2.7.2 + with testcases ipps and gcc, giving smallest and fastest code. */ + + #define SLOW_BYTE_ACCESS 0 + + /* This is the threshold *below* which inline move sequences of + word-length sizes will be emitted. The "9" will translate to + (9 - 1) * 4 = 32 bytes maximum moved, but using 16 instructions + (8 instruction sequences) or less. */ + #define MOVE_RATIO 9 + + + /* Node: Sections */ + + #define TEXT_SECTION_ASM_OP "\t.text" + + #define DATA_SECTION_ASM_OP "\t.data" + + #define FORCE_EH_FRAME_INFO_IN_DATA_SECTION (! TARGET_ELF) + + /* The jump table is immediately connected to the preceding insn. */ + #define JUMP_TABLES_IN_TEXT_SECTION 1 + + /* We need to code in PIC-specific flags into SYMBOL_REF_FLAG. */ + + #define ENCODE_SECTION_INFO(EXP) cris_encode_section_info (EXP) + + /* We pull a little trick to register the _fini function with atexit, + after (presumably) registering the eh frame info, since we don't handle + _fini (a.k.a. ___fini_start) in crt0 or have a crti for "pure" ELF. If + you change this, don't forget that you can't have library function + references (e.g. to atexit) in crtend.o, since those won't be resolved + to libraries; those are linked in *before* crtend.o. */ + #ifdef CRT_BEGIN + # define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \ + static void __attribute__((__used__)) \ + call_ ## FUNC (void) \ + { \ + asm (SECTION_OP); \ + FUNC (); \ + if (__builtin_strcmp (#FUNC, "frame_dummy") == 0) \ + { \ + extern void __fini__start (void); \ + atexit (__fini__start); \ + } \ + asm (TEXT_SECTION_ASM_OP); \ + } + #endif + + /* Node: PIC */ + + #define PIC_OFFSET_TABLE_REGNUM (flag_pic ? 0 : INVALID_REGNUM) + + #define LEGITIMATE_PIC_OPERAND_P(X) cris_legitimate_pic_operand (X) + + + /* Node: File Framework */ + + /* NO_APP *only at file start* means faster assembly. + It also means comments are not allowed. + In some cases comments will be output for debugging purposes. + Make sure they are allowed then. */ + /* Override previous definitions (elfos.h). */ + #undef ASM_FILE_START + #define ASM_FILE_START(STREAM) \ + do \ + { \ + if (TARGET_PDEBUG || flag_print_asm_name) \ + fprintf ((STREAM), "#APP\n"); \ + else \ + fprintf ((STREAM), "#NO_APP\n"); \ + if (TARGET_ELF) \ + output_file_directive ((STREAM), main_input_filename); \ + } \ + while (0) + + /* Override previous definitions (elfos.h). */ + #undef ASM_FILE_END + #define ASM_FILE_END(STREAM) + + /* We don't want an .ident for gcc. To avoid that but still support + #ident, we override ASM_OUTPUT_IDENT and, since the gcc .ident is its + only use besides ASM_OUTPUT_IDENT, undef IDENT_ASM_OP from elfos.h. */ + #undef IDENT_ASM_OP + #undef ASM_OUTPUT_IDENT + #define ASM_OUTPUT_IDENT(FILE, NAME) \ + fprintf (FILE, "%s\"%s\"\n", "\t.ident\t", NAME); + + #define ASM_APP_ON "#APP\n" + + #define ASM_APP_OFF "#NO_APP\n" + + + /* Node: Data Output */ + + #define IS_ASM_LOGICAL_LINE_SEPARATOR(C) (C) == '@' + + /* Node: Uninitialized Data */ + + /* Remember to round off odd values if we want data alignment, + since we cannot do that with an .align directive. + + Using .comm causes the space not to be reserved in .bss, but by + tricks with the symbol type. Not good if other tools than binutils + are used on the object files. Since ".global ... .lcomm ..." works, we + use that. Use .._ALIGNED_COMMON, since gcc whines when we only have + ..._COMMON, and we prefer to whine ourselves; BIGGEST_ALIGNMENT is not + the one to check. This done for a.out only. */ + /* FIXME: I suspect a bug in gcc with alignment. Do not warn until + investigated; it mucks up the testsuite results. */ + #define CRIS_ASM_OUTPUT_ALIGNED_DECL_COMMON(FILE, DECL, NAME, SIZE, ALIGN, LOCAL) \ + do \ + { \ + int align_ = (ALIGN) / BITS_PER_UNIT; \ + if (TARGET_DATA_ALIGN && TARGET_ALIGN_BY_32 && align_ < 4) \ + align_ = 4; \ + else if (TARGET_DATA_ALIGN && align_ < 2) \ + align_ = 2; \ + /* FIXME: Do we need this? */ \ + else if (align_ < 1) \ + align_ = 1; \ + \ + if (TARGET_ELF) \ + { \ + if (LOCAL) \ + { \ + fprintf ((FILE), "%s", LOCAL_ASM_OP); \ + assemble_name ((FILE), (NAME)); \ + fprintf ((FILE), "\n"); \ + } \ + fprintf ((FILE), "%s", COMMON_ASM_OP); \ + assemble_name ((FILE), (NAME)); \ + fprintf ((FILE), ",%u,%u\n", (SIZE), align_); \ + } \ + else \ + { \ + /* We can't tell a one-only or weak COMM from a "global \ + COMM" so just make all non-locals weak. */ \ + if (! (LOCAL)) \ + ASM_WEAKEN_LABEL (FILE, NAME); \ + fputs ("\t.lcomm ", (FILE)); \ + assemble_name ((FILE), (NAME)); \ + fprintf ((FILE), ",%u\n", \ + ((SIZE) + (align_ - 1)) & ~(align_ - 1)); \ + } \ + } \ + while (0) + + #define ASM_OUTPUT_ALIGNED_DECL_COMMON(FILE, DECL, NAME, SIZE, ALIGN) \ + CRIS_ASM_OUTPUT_ALIGNED_DECL_COMMON(FILE, DECL, NAME, SIZE, ALIGN, 0) + + #undef ASM_OUTPUT_ALIGNED_DECL_LOCAL + #define ASM_OUTPUT_ALIGNED_DECL_LOCAL(FILE, DECL, NAME, SIZE, ALIGN) \ + CRIS_ASM_OUTPUT_ALIGNED_DECL_COMMON(FILE, DECL, NAME, SIZE, ALIGN, 1) + + /* FIXME: define ASM_OUTPUT_SHARED_COMMON and emit an error when it is + used with -melinux and a.out. */ + + /* Node: Label Output */ + + #define ASM_OUTPUT_LABEL(FILE, NAME) \ + do \ + { \ + assemble_name (FILE, NAME); \ + fputs (":\n", FILE); \ + } \ + while (0) + + #define ASM_GLOBALIZE_LABEL(FILE, NAME) \ + do \ + { \ + fputs ("\t.global ", FILE); \ + assemble_name (FILE, NAME); \ + fputs ("\n", FILE); \ + } \ + while (0) + + #define SUPPORTS_WEAK 1 + + /* FIXME: This macro isn't documented, but this would probably be an + appropriate location. It's only used in crtstuff.c, else we'd have to + handle (to #undef or ignore it) in a.out. */ + #define HAVE_GAS_HIDDEN 1 + + #undef ASM_OUTPUT_INTERNAL_LABEL + #define ASM_OUTPUT_INTERNAL_LABEL(FILE, PREFIX, NUM) \ + do \ + { \ + asm_fprintf (FILE, "%L%s%d:\n", PREFIX, NUM); \ + } \ + while (0) + + /* Remove any previous definition (elfos.h). */ + #undef ASM_GENERATE_INTERNAL_LABEL + #define ASM_GENERATE_INTERNAL_LABEL(LABEL, PREFIX, NUM) \ + sprintf (LABEL, "*%s%s%ld", LOCAL_LABEL_PREFIX, PREFIX, (long) NUM) + + #define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \ + do \ + { \ + (OUTPUT) = (char *) alloca (strlen ((NAME)) + 10); \ + sprintf ((OUTPUT), "%s.%d", (NAME), (LABELNO)); \ + } \ + while (0) + + + /* Node: Initialization */ + /* (no definitions) */ + + /* Node: Macros for Initialization */ + /* (no definitions) */ + + /* Node: Instruction Output */ + + #define REGISTER_NAMES \ + {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", \ + "r9", "r10", "r11", "r12", "r13", "sp", "pc", "srp", "faked_ap"} + + #define ADDITIONAL_REGISTER_NAMES \ + {{"r14", 14}, {"r15", 15}} + + #define PRINT_OPERAND(FILE, X, CODE) \ + cris_print_operand (FILE, X, CODE) + + /* For delay-slot handling. */ + #define PRINT_OPERAND_PUNCT_VALID_P(CODE) (CODE == '#') + + #define PRINT_OPERAND_ADDRESS(FILE, ADDR) \ + cris_print_operand_address (FILE, ADDR) + + /* Output an empty line to illustrate the presence of the delay slot. */ + #define DBR_OUTPUT_SEQEND(FILE) \ + fprintf (FILE, "\n") + + #define LOCAL_LABEL_PREFIX (TARGET_ELF ? "." : "") + + /* cppinit.c initializes a const array from this, so it must be constant, + can't have it different based on options. Luckily, the prefix is + always allowed, so let's have it on all GCC-generated code. Note that + we have this verbatim everywhere in the back-end, not using %R or %s or + such. */ + #define REGISTER_PREFIX "$" + + /* Remove any previous definition (elfos.h). */ + /* We use -fno-leading-underscore to remove it, when necessary. */ + #undef USER_LABEL_PREFIX + #define USER_LABEL_PREFIX "_" + + #define ASM_OUTPUT_REG_PUSH(FILE, REGNO) \ + fprintf (FILE, "\tpush $%s\n", reg_names[REGNO]) + + #define ASM_OUTPUT_REG_POP(FILE, REGNO) \ + fprintf (FILE, "\tpop $%s\n", reg_names[REGNO]) + + + /* Node: Dispatch Tables */ + + #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ + asm_fprintf (FILE, "\t.word %LL%d-%LL%d\n", VALUE, REL) + + #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ + asm_fprintf (FILE, "\t.dword %LL%d\n", VALUE) + + /* Defined to also emit an .align in elfos.h. We don't want that. */ + #undef ASM_OUTPUT_CASE_LABEL + + /* Since the "bound" insn loads the comparison value if the compared< + value (register) is out of bounds (0..comparison value-1), we need + to output another case to catch it. + The way to find it is to look for the label_ref at the else-arm inside + the expanded casesi core-insn. + FIXME: Check this construct when changing to new version of gcc. */ + #define ASM_OUTPUT_CASE_END(STREAM, NUM, TABLE) \ + do \ + { \ + asm_fprintf (STREAM, "\t.word %LL%d-%LL%d%s\n", \ + CODE_LABEL_NUMBER \ + (XEXP (XEXP (XEXP \ + (XVECEXP \ + (PATTERN (PREV_INSN (PREV_INSN \ + (TABLE))), \ + 0, 0), 1), 2), 0)), \ + NUM, \ + (TARGET_PDEBUG ? "; default" : "")); \ + } \ + while (0) + + + /* Node: Exception Region Output */ + /* (no definitions) */ + /* FIXME: Fill in with our own optimized layout. */ + + /* Node: Alignment Output */ + + #define ASM_OUTPUT_ALIGN(FILE, LOG) \ + fprintf (FILE, "\t.align %d\n", (LOG)) + + + /* Node: All Debuggers */ + + #define DBX_REGISTER_NUMBER(REGNO) \ + ((REGNO) == CRIS_SRP_REGNUM ? CRIS_CANONICAL_SRP_REGNUM : (REGNO)) + + /* FIXME: Investigate DEBUGGER_AUTO_OFFSET, DEBUGGER_ARG_OFFSET. */ + + + /* Node: DBX Options */ + + /* Is this correct? Check later. */ + #define DBX_NO_XREFS + + #define DBX_CONTIN_LENGTH 0 + + /* FIXME: Is this needed when we have 0 DBX_CONTIN_LENGTH? */ + #define DBX_CONTIN_CHAR '?' + + + /* Node: DBX Hooks */ + /* (no definitions) */ + + /* Node: File names and DBX */ + /* (no definitions) */ + + + /* Node: SDB and DWARF */ + /* (no definitions) */ + + /* Node: Cross-compilation */ + #define REAL_ARITHMETIC + + + /* Node: Misc */ + + /* FIXME: Check this one more time. */ + #define PREDICATE_CODES \ + {"cris_orthogonal_operator", \ + {PLUS, MINUS, IOR, AND, UMIN}}, \ + {"cris_commutative_orth_op", \ + {PLUS, IOR, AND, UMIN}}, \ + {"cris_operand_extend_operator", \ + {PLUS, MINUS, UMIN}}, \ + {"cris_extend_operator", \ + {ZERO_EXTEND, SIGN_EXTEND}}, \ + {"cris_plus_or_bound_operator", \ + {PLUS, UMIN}}, \ + {"cris_bdap_operand", \ + {SUBREG, REG, LABEL_REF, SYMBOL_REF, MEM, CONST_INT, \ + CONST_DOUBLE, CONST, SIGN_EXTEND}}, \ + {"cris_bdap_biap_operand", \ + {SUBREG, REG, LABEL_REF, SYMBOL_REF, MEM, CONST_INT, \ + CONST_DOUBLE, CONST, SIGN_EXTEND, MULT}}, \ + {"cris_general_operand_or_gotless_symbol", \ + {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF, \ + LABEL_REF, SUBREG, REG, MEM}}, \ + {"cris_general_operand_or_symbol", \ + {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF, \ + LABEL_REF, SUBREG, REG, MEM}}, \ + {"cris_general_operand_or_plt_symbol", \ + {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF, \ + LABEL_REF, SUBREG, REG, MEM}}, \ + {"cris_mem_call_operand", \ + {MEM}}, + + /* A combination of the bound (umin) insn together with a + sign-extended add via the table to PC seems optimal. + If the table overflows, the assembler will take care of it. + Theoretically, in extreme cases (uncertain if they occur), an error + will be emitted, so FIXME: Check how large case-tables are emitted, + possible add an option to emit SImode case-tables. */ + #define CASE_VECTOR_MODE HImode + + #define CASE_VECTOR_PC_RELATIVE 1 + + /* FIXME: Investigate CASE_VECTOR_SHORTEN_MODE to make sure HImode is not + used when broken-.word could possibly fail (plus test-case). */ + + #define FIXUNS_TRUNC_LIKE_FIX_TRUNC + + /* This is the number of bytes that can be moved in one + reasonably fast instruction sequence. For CRIS, this is two + instructions: mem => reg, reg => mem. */ + #define MOVE_MAX 4 + + /* Maybe SHIFT_COUNT_TRUNCATED is safe to define? FIXME: Check later. */ + + #define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1 + + #define STORE_FLAG_VALUE 1 + + #define Pmode SImode + + #define FUNCTION_MODE QImode + + #define NO_IMPLICIT_EXTERN_C + + /* + * Local variables: + * eval: (c-set-style "gnu") + * indent-tabs-mode: t + * End: + */ diff -Nrc3pad gcc-3.0.4/gcc/config/cris/cris.md gcc-3.1/gcc/config/cris/cris.md *** gcc-3.0.4/gcc/config/cris/cris.md Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/cris/cris.md Sun Nov 4 02:51:23 2001 *************** *** 0 **** --- 1,5096 ---- + ;; GCC machine description for CRIS cpu cores. + ;; Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. + ;; Contributed by Axis Communications. + + ;; This file is part of GCC. + ;; + ;; GCC is free software; you can redistribute it and/or modify + ;; it under the terms of the GNU General Public License as published by + ;; the Free Software Foundation; either version 2, or (at your option) + ;; any later version. + ;; + ;; GCC is distributed in the hope that it will be useful, + ;; but WITHOUT ANY WARRANTY; without even the implied warranty of + ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ;; GNU General Public License for more details. + ;; + ;; You should have received a copy of the GNU General Public License + ;; along with GCC; see the file COPYING. If not, write to + ;; the Free Software Foundation, 59 Temple Place - Suite 330, + ;; Boston, MA 02111-1307, USA. + + ;; The original PO technology requires these to be ordered by speed, + ;; so that assigner will pick the fastest. + + ;; See files "md.texi" and "rtl.def" for documentation on define_insn, + ;; match_*, et. al. + ;; + ;; The function cris_notice_update_cc in cris.c handles condition code + ;; updates for most instructions, helped by the "cc" attribute. + + ;; There are several instructions that are orthogonal in size, and seems + ;; they could be matched by a single pattern without a specified size + ;; for the operand that is orthogonal. However, this did not work on + ;; gcc-2.7.2 (and problably not on gcc-2.8.1), relating to that when a + ;; constant is substituted into an operand, the actual mode must be + ;; deduced from the pattern. There is reasonable hope that that has been + ;; fixed in egcs post 1.1.1, so FIXME: try again. + + ;; You will notice that three-operand alternatives ("=r", "r", "!To") + ;; are marked with a "!" constraint modifier to avoid being reloaded + ;; into. This is because gcc would otherwise prefer to use the constant + ;; pool and its offsettable address instead of reloading to an + ;; ("=r", "0", "i") alternative. Also, the constant-pool support was not + ;; only suboptimal but also buggy in 2.7.2, ??? maybe only in 2.6.3. + + ;; All insns that look like (set (...) (plus (...) (reg:SI 8))) + ;; get problems when reloading r8 (frame pointer) to r14 + offs (stack + ;; pointer). Thus the instructions that get into trouble have specific + ;; checks against matching frame_pointer_rtx. + ;; ??? But it should be re-checked for gcc > 2.7.2 + ;; FIXME: This changed some time ago (from 2000-03-16) for gcc-2.9x. + + ;; FIXME: When PIC, all [rX=rY+S] could be enabled to match + ;; [rX=gotless_symbol]. + ;; The movsi for a gotless symbol could be split (post reload). + + ;; UNSPEC Usage: + ;; 0 PLT reference from call expansion: operand 0 is the address, + ;; the mode is VOIDmode. Always wrapped in CONST. + + ;; We need an attribute to define whether an instruction can be put in + ;; a branch-delay slot or not, and whether it has a delay slot. + ;; + ;; Branches and return instructions have a delay slot, and cannot + ;; themselves be put in a delay slot. This has changed *for short + ;; branches only* between architecture variants, but the possible win + ;; is presumed negligible compared to the added complexity of the machine + ;; description: one would have to add always-correct infrastructure to + ;; distinguish short branches. + ;; + ;; Whether an instruction can be put in a delay slot depends on the + ;; instruction (all short instructions except jumps and branches) + ;; and the addressing mode (must not be prefixed or referring to pc). + ;; In short, any "slottable" instruction must be 16 bit and not refer + ;; to pc, or alter it. + ;; + ;; The possible values are "yes", "no" and "has_slot". Yes/no means if + ;; the insn is slottable or not. Has_slot means that the insn is a + ;; return insn or branch insn (which are not considered slottable since + ;; that is generally true). Having the semmingly illogical value + ;; "has_slot" means we do not have to add another attribute just to say + ;; that an insn has a delay-slot, since it also infers that it is not + ;; slottable. Better names for the attribute were found to be longer and + ;; not add readability to the machine description. + ;; + ;; The default that is defined here for this attribute is "no", not + ;; slottable, not having a delay-slot, so there's no need to worry about + ;; it being wrong for non-branch and return instructions. + ;; The default could depend on the kind of insn and the addressing + ;; mode, but that would need more attributes and hairier, more error + ;; prone code. + ;; + ;; There is an extra constraint, 'Q', which recognizes indirect reg, + ;; except when the reg is pc. The constraints 'Q' and '>' together match + ;; all possible memory operands that are slottable. + ;; For other operands, you need to check if it has a valid "slottable" + ;; quick-immediate operand, where the particular signedness-variation + ;; may match the constraints 'I' or 'J'.), and include it in the + ;; constraint pattern for the slottable pattern. An alternative using + ;; only "r" constraints is most often slottable. + + (define_attr "slottable" "no,yes,has_slot" (const_string "no")) + + ;; We also need attributes to sanely determine the condition code + ;; state. See cris_notice_update_cc for how this is used. + + (define_attr "cc" "none,clobber,normal" (const_string "normal")) + + ;; A branch or return has one delay-slot. The instruction in the + ;; delay-slot is always executed, independent of whether the branch is + ;; taken or not. Note that besides setting "slottable" to "has_slot", + ;; there also has to be a "%#" at the end of a "delayed" instruction + ;; output pattern (for "jump" this means "ba %l0%#"), so print_operand can + ;; catch it and print a "nop" if necessary. This method was stolen from + ;; sparc.md. + + (define_delay (eq_attr "slottable" "has_slot") + [(eq_attr "slottable" "yes") (nil) (nil)]) + + ;; Test insns. + + ;; DImode + ;; + ;; Allow register and offsettable mem operands only; post-increment is + ;; not worth the trouble. + + (define_insn "tstdi" + [(set (cc0) + (match_operand:DI 0 "nonimmediate_operand" "r,o"))] + "" + "test.d %M0\;ax\;test.d %H0") + + ;; No test insns with side-effect on the mem addressing. + ;; + ;; See note on cmp-insns with side-effects (or lack of them) + + ;; Normal named test patterns from SI on. + ;; FIXME: Seems they should change to be in order smallest..largest. + + (define_insn "tstsi" + [(set (cc0) + (match_operand:SI 0 "nonimmediate_operand" "r,Q>,m"))] + "" + "test.d %0" + [(set_attr "slottable" "yes,yes,no")]) + + (define_insn "tsthi" + [(set (cc0) + (match_operand:HI 0 "nonimmediate_operand" "r,Q>,m"))] + "" + "test.w %0" + [(set_attr "slottable" "yes,yes,no")]) + + (define_insn "tstqi" + [(set (cc0) + (match_operand:QI 0 "nonimmediate_operand" "r,Q>,m"))] + "" + "test.b %0" + [(set_attr "slottable" "yes,yes,no")]) + + ;; It seems that the position of the sign-bit and the fact that 0.0 is + ;; all 0-bits would make "tstsf" a straight-forward implementation; + ;; either "test.d" it for positive/negative or "btstq 30,r" it for + ;; zeroness. + ;; + ;; FIXME: Do that some time; check next_cc0_user to determine if + ;; zero or negative is tested for. + + ;; Compare insns. + + ;; We could optimize the sizes of the immediate operands for various + ;; cases, but that is not worth it because of the very little usage of + ;; DImode for anything else but a structure/block-mode. Just do the + ;; obvious stuff for the straight-forward constraint letters. + + (define_insn "cmpdi" + [(set (cc0) + (compare (match_operand:DI 0 "nonimmediate_operand" "r,r,r,r,r,r,o") + (match_operand:DI 1 "general_operand" "K,I,P,n,r,o,r")))] + "" + "@ + cmpq %1,%M0\;ax\;cmpq 0,%H0 + cmpq %1,%M0\;ax\;cmpq -1,%H0 + cmp%e1.%z1 %1,%M0\;ax\;cmpq %H1,%H0 + cmp.d %M1,%M0\;ax\;cmp.d %H1,%H0 + cmp.d %M1,%M0\;ax\;cmp.d %H1,%H0 + cmp.d %M1,%M0\;ax\;cmp.d %H1,%H0 + cmp.d %M0,%M1\;ax\;cmp.d %H0,%H1") + + ;; Note that compare insns with side effect addressing mode (e.g.): + ;; + ;; cmp.S [rx=ry+i],rz; + ;; cmp.S [%3=%1+%2],%0 + ;; + ;; are *not* usable for gcc since the reloader *does not accept* + ;; cc0-changing insns with side-effects other than setting the condition + ;; codes. The reason is that the reload stage *may* cause another insn to + ;; be output after the main instruction, in turn invalidating cc0 for the + ;; insn using the test. (This does not apply to the CRIS case, since a + ;; reload for output -- move to memory -- does not change the condition + ;; code. Unfortunately we have no way to describe that at the moment. I + ;; think code would improve being in the order of one percent faster. + + ;; We have cmps and cmpu (compare reg w. sign/zero extended mem). + ;; These are mostly useful for compares in SImode, using 8 or 16-bit + ;; constants, but sometimes gcc will find its way to use it for other + ;; (memory) operands. Avoid side-effect patterns, though (see above). + ;; + ;; FIXME: These could have an anonymous mode for operand 1. + + ;; QImode + + (define_insn "*cmp_extsi" + [(set (cc0) + (compare + (match_operand:SI 0 "register_operand" "r,r") + (match_operator:SI 2 "cris_extend_operator" + [(match_operand:QI 1 "memory_operand" "Q>,m")])))] + "" + "cmp%e2.%s1 %1,%0" + [(set_attr "slottable" "yes,no")]) + + ;; HImode + (define_insn "*cmp_exthi" + [(set (cc0) + (compare + (match_operand:SI 0 "register_operand" "r,r") + (match_operator:SI 2 "cris_extend_operator" + [(match_operand:HI 1 "memory_operand" "Q>,m")])))] + "" + "cmp%e2.%s1 %1,%0" + [(set_attr "slottable" "yes,no")]) + + ;; Swap operands; it seems the canonical look (if any) is not enforced. + ;; + ;; FIXME: Investigate that. + ;; FIXME: These could have an anonymous mode for operand 1. + + ;; QImode + + (define_insn "*cmp_swapextqi" + [(set (cc0) + (compare + (match_operator:SI 2 "cris_extend_operator" + [(match_operand:QI 0 "memory_operand" "Q>,m")]) + (match_operand:SI 1 "register_operand" "r,r")))] + "" + "cmp%e2.%s0 %0,%1" ; The function cris_notice_update_cc knows about + ; swapped operands to compares. + [(set_attr "slottable" "yes,no")]) + + ;; HImode + + (define_insn "*cmp_swapexthi" + [(set (cc0) + (compare + (match_operator:SI 2 "cris_extend_operator" + [(match_operand:HI 0 "memory_operand" "Q>,m")]) + (match_operand:SI 1 "register_operand" "r,r")))] + "" + "cmp%e2.%s0 %0,%1" ; The function cris_notice_update_cc knows about + ; swapped operands to compares. + [(set_attr "slottable" "yes,no")]) + + ;; The "normal" compare patterns, from SI on. + + (define_insn "cmpsi" + [(set (cc0) + (compare + (match_operand:SI 0 "nonimmediate_operand" "r,r,r,r,Q>,Q>,r,r,m,m") + (match_operand:SI 1 "general_operand" "I,r,Q>,M,M,r,P,g,M,r")))] + "" + "@ + cmpq %1,%0 + cmp.d %1,%0 + cmp.d %1,%0 + test.d %0 + test.d %0 + cmp.d %0,%1 + cmp%e1.%z1 %1,%0 + cmp.d %1,%0 + test.d %0 + cmp.d %0,%1" + [(set_attr "slottable" "yes,yes,yes,yes,yes,yes,no,no,no,no")]) + + (define_insn "cmphi" + [(set (cc0) + (compare (match_operand:HI 0 "nonimmediate_operand" "r,r,Q>,Q>,r,m,m") + (match_operand:HI 1 "general_operand" "r,Q>,M,r,g,M,r")))] + "" + "@ + cmp.w %1,%0 + cmp.w %1,%0 + test.w %0 + cmp.w %0,%1 + cmp.w %1,%0 + test.w %0 + cmp.w %0,%1" + [(set_attr "slottable" "yes,yes,yes,yes,no,no,no")]) + + (define_insn "cmpqi" + [(set (cc0) + (compare + (match_operand:QI 0 "nonimmediate_operand" "r,r,r,Q>,Q>,r,m,m") + (match_operand:QI 1 "general_operand" "r,Q>,M,M,r,g,M,r")))] + "" + "@ + cmp.b %1,%0 + cmp.b %1,%0 + test.b %0 + test.b %0 + cmp.b %0,%1 + cmp.b %1,%0 + test.b %0 + cmp.b %0,%1" + [(set_attr "slottable" "yes,yes,yes,yes,yes,no,no,no")]) + + ;; Pattern matching the BTST insn. + ;; It is useful for "if (i & val)" constructs, where val is an exact + ;; power of 2, or if val + 1 is a power of two, where we check for a bunch + ;; of zeros starting at bit 0). + + ;; SImode. This mode is the only one needed, since gcc automatically + ;; extends subregs for lower-size modes. FIXME: Add test-case. + (define_insn "*btst" + [(set (cc0) + (zero_extract + (match_operand:SI 0 "nonmemory_operand" "r,r,r,r,r,r,n") + (match_operand:SI 1 "const_int_operand" "K,n,K,n,K,n,n") + (match_operand:SI 2 "nonmemory_operand" "M,M,K,n,r,r,r")))] + ;; Either it is a single bit, or consecutive ones starting at 0. + "GET_CODE (operands[1]) == CONST_INT + && (operands[1] == const1_rtx || operands[2] == const0_rtx) + && (REG_S_P (operands[0]) + || (operands[1] == const1_rtx + && REG_S_P (operands[2]) + && GET_CODE (operands[0]) == CONST_INT + && exact_log2 (INTVAL (operands[0])) >= 0))" + + ;; The last "&&" condition above should be caught by some kind of + ;; canonicalization in gcc, but we can easily help with it here. + ;; It results from expressions of the type + ;; "power_of_2_value & (1 << y)". + ;; + ;; Since there may be codes with tests in on bits (in constant position) + ;; beyond the size of a word, handle that by assuming those bits are 0. + ;; GCC should handle that, but it's a matter of easily-added belts while + ;; having suspenders. + + "@ + btstq (%1-1),%0 + test.d %0 + btstq %2,%0 + clearf nz + btst %2,%0 + clearf nz + cmpq %p0,%2" + [(set_attr "slottable" "yes")]) + + ;; Move insns. + + ;; The whole mandatory movdi family is here; expander, "anonymous" + ;; recognizer and splitter. We're forced to have a movdi pattern, + ;; although GCC should be able to split it up itself. Normally it can, + ;; but if other insns have DI operands (as is the case here), reload + ;; must be able to generate or match a movdi. many testcases fail at + ;; -O3 or -fssa if we don't have this. FIXME: Fix GCC... See + ;; . + ;; However, a patch from Richard Kenner (similar to the cause of + ;; discussion at the URL above), indicates otherwise. See + ;; . + ;; The truth has IMO is not been decided yet, so check from time to + ;; time by disabling the movdi patterns. + + (define_expand "movdi" + [(set (match_operand:DI 0 "nonimmediate_operand" "") + (match_operand:DI 1 "general_operand" ""))] + "" + " + { + if (GET_CODE (operands[0]) == MEM && operands[1] != const0_rtx) + operands[1] = copy_to_mode_reg (DImode, operands[1]); + + /* Some other ports (as of 2001-09-10 for example mcore and romp) also + prefer to split up constants early, like this. The testcase in + gcc.c-torture/execute/961213-1.c shows that CSE2 gets confused by the + resulting subreg sets when using the construct from mcore (as of FSF + CVS, version -r 1.5), and it believe that the high part (the last one + emitted) is the final value. This construct from romp seems more + robust, especially considering the head comments from + emit_no_conflict_block. */ + if ((GET_CODE (operands[1]) == CONST_INT + || GET_CODE (operands[1]) == CONST_DOUBLE) + && ! reload_completed + && ! reload_in_progress) + { + rtx insns; + rtx op0 = operands[0]; + rtx op1 = operands[1]; + + start_sequence (); + emit_move_insn (operand_subword (op0, 0, 1, DImode), + operand_subword (op1, 0, 1, DImode)); + emit_move_insn (operand_subword (op0, 1, 1, DImode), + operand_subword (op1, 1, 1, DImode)); + insns = get_insns (); + end_sequence (); + + emit_no_conflict_block (insns, op0, op1, 0, op1); + DONE; + } + }") + + (define_insn "*movdi_insn" + [(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,m") + (match_operand:DI 1 "general_operand" "r,g,rM"))] + "register_operand (operands[0], DImode) + || register_operand (operands[1], DImode) + || operands[1] == const0_rtx" + "#") + + (define_split + [(set (match_operand:DI 0 "nonimmediate_operand" "") + (match_operand:DI 1 "general_operand" ""))] + "reload_completed" + [(match_dup 2)] + "operands[2] = cris_split_movdx (operands);") + + ;; Side-effect patterns for move.S1 [rx=ry+rx.S2],rw + ;; and move.S1 [rx=ry+i],rz + ;; Then movs.S1 and movu.S1 for both modes. + ;; + ;; move.S1 [rx=ry+rz.S],rw avoiding when rx is ry, or rw is rx + ;; FIXME: These could have anonymous mode for operand 0. + + ;; QImode + + (define_insn "*mov_sideqi_biap" + [(set (match_operand:QI 0 "register_operand" "=r,r") + (mem:QI (plus:SI + (mult:SI (match_operand:SI 1 "register_operand" "r,r") + (match_operand:SI 2 "const_int_operand" "n,n")) + (match_operand:SI 3 "register_operand" "r,r")))) + (set (match_operand:SI 4 "register_operand" "=*3,r") + (plus:SI (mult:SI (match_dup 1) + (match_dup 2)) + (match_dup 3)))] + "cris_side_effect_mode_ok (MULT, operands, 4, 3, 1, 2, 0)" + "@ + # + move.%s0 [%4=%3+%1%T2],%0") + + ;; HImode + + (define_insn "*mov_sidehi_biap" + [(set (match_operand:HI 0 "register_operand" "=r,r") + (mem:HI (plus:SI + (mult:SI (match_operand:SI 1 "register_operand" "r,r") + (match_operand:SI 2 "const_int_operand" "n,n")) + (match_operand:SI 3 "register_operand" "r,r")))) + (set (match_operand:SI 4 "register_operand" "=*3,r") + (plus:SI (mult:SI (match_dup 1) + (match_dup 2)) + (match_dup 3)))] + "cris_side_effect_mode_ok (MULT, operands, 4, 3, 1, 2, 0)" + "@ + # + move.%s0 [%4=%3+%1%T2],%0") + + ;; SImode + + (define_insn "*mov_sidesi_biap" + [(set (match_operand:SI 0 "register_operand" "=r,r") + (mem:SI (plus:SI + (mult:SI (match_operand:SI 1 "register_operand" "r,r") + (match_operand:SI 2 "const_int_operand" "n,n")) + (match_operand:SI 3 "register_operand" "r,r")))) + (set (match_operand:SI 4 "register_operand" "=*3,r") + (plus:SI (mult:SI (match_dup 1) + (match_dup 2)) + (match_dup 3)))] + "cris_side_effect_mode_ok (MULT, operands, 4, 3, 1, 2, 0)" + "@ + # + move.%s0 [%4=%3+%1%T2],%0") + + ;; move.S1 [rx=ry+i],rz + ;; avoiding move.S1 [ry=ry+i],rz + ;; and move.S1 [rz=ry+i],rz + ;; Note that "i" is allowed to be a register. + ;; FIXME: These could have anonymous mode for operand 0. + + ;; QImode + + (define_insn "*mov_sideqi" + [(set (match_operand:QI 0 "register_operand" "=r,r,r") + (mem:QI + (plus:SI (match_operand:SI 1 "cris_bdap_operand" "%r,r,r") + (match_operand:SI 2 "cris_bdap_operand" "r>Ri,r,>Ri")))) + (set (match_operand:SI 3 "register_operand" "=*1,r,r") + (plus:SI (match_dup 1) + (match_dup 2)))] + "cris_side_effect_mode_ok (PLUS, operands, 3, 1, 2, -1, 0)" + "* + { + if (which_alternative == 0 + && (GET_CODE (operands[2]) != CONST_INT + || INTVAL (operands[2]) > 127 + || INTVAL (operands[2]) < -128 + || CONST_OK_FOR_LETTER_P (INTVAL (operands[2]), 'N') + || CONST_OK_FOR_LETTER_P (INTVAL (operands[2]), 'J'))) + return \"#\"; + return \"move.%s0 [%3=%1%S2],%0\"; + }") + + ;; HImode + + (define_insn "*mov_sidehi" + [(set (match_operand:HI 0 "register_operand" "=r,r,r") + (mem:HI + (plus:SI (match_operand:SI 1 "cris_bdap_operand" "%r,r,r") + (match_operand:SI 2 "cris_bdap_operand" "r>Ri,r,>Ri")))) + (set (match_operand:SI 3 "register_operand" "=*1,r,r") + (plus:SI (match_dup 1) + (match_dup 2)))] + "cris_side_effect_mode_ok (PLUS, operands, 3, 1, 2, -1, 0)" + "* + { + if (which_alternative == 0 + && (GET_CODE (operands[2]) != CONST_INT + || INTVAL (operands[2]) > 127 + || INTVAL (operands[2]) < -128 + || CONST_OK_FOR_LETTER_P (INTVAL (operands[2]), 'N') + || CONST_OK_FOR_LETTER_P (INTVAL (operands[2]), 'J'))) + return \"#\"; + return \"move.%s0 [%3=%1%S2],%0\"; + }") + + ;; SImode + + (define_insn "*mov_sidesi" + [(set (match_operand:SI 0 "register_operand" "=r,r,r") + (mem:SI + (plus:SI (match_operand:SI 1 "cris_bdap_operand" "%r,r,r") + (match_operand:SI 2 "cris_bdap_operand" "r>Ri,r,>Ri")))) + (set (match_operand:SI 3 "register_operand" "=*1,r,r") + (plus:SI (match_dup 1) + (match_dup 2)))] + "cris_side_effect_mode_ok (PLUS, operands, 3, 1, 2, -1, 0)" + "* + { + if (which_alternative == 0 + && (GET_CODE (operands[2]) != CONST_INT + || INTVAL (operands[2]) > 127 + || INTVAL (operands[2]) < -128 + || CONST_OK_FOR_LETTER_P (INTVAL (operands[2]), 'N') + || CONST_OK_FOR_LETTER_P (INTVAL (operands[2]), 'J'))) + return \"#\"; + return \"move.%s0 [%3=%1%S2],%0\"; + }") + + ;; Other way around; move to memory. + + ;; For all side-effect patterns, it seems to be the case that the + ;; predicate isn't consulted after combine. For sake of stability, we + ;; recognize and split the cases where dangerous register combinations are + ;; spotted: where a register is set in the side-effect, and used in the + ;; main insn. We don't handle the case where the set in the main insn + ;; overlaps the set in the side-effect; that would be too big a bug to + ;; paper over. We handle just the case where the set in the side-effect + ;; overlaps the input operand of the main insn (i.e. just moves to memory). + + ;; + ;; move.s rx,[ry=rx+rw.S] + ;; FIXME: These could have anonymous mode for operand 3. + + ;; QImode + + (define_insn "*mov_sideqi_biap_mem" + [(set (mem:QI (plus:SI + (mult:SI (match_operand:SI 0 "register_operand" "r,r,r") + (match_operand:SI 1 "const_int_operand" "n,n,n")) + (match_operand:SI 2 "register_operand" "r,r,r"))) + (match_operand:QI 3 "register_operand" "r,r,r")) + (set (match_operand:SI 4 "register_operand" "=*2,!*3,r") + (plus:SI (mult:SI (match_dup 0) + (match_dup 1)) + (match_dup 2)))] + "cris_side_effect_mode_ok (MULT, operands, 4, 2, 0, 1, 3)" + "@ + # + # + move.%s3 %3,[%4=%2+%0%T1]") + + ;; HImode + + (define_insn "*mov_sidehi_biap_mem" + [(set (mem:HI (plus:SI + (mult:SI (match_operand:SI 0 "register_operand" "r,r,r") + (match_operand:SI 1 "const_int_operand" "n,n,n")) + (match_operand:SI 2 "register_operand" "r,r,r"))) + (match_operand:HI 3 "register_operand" "r,r,r")) + (set (match_operand:SI 4 "register_operand" "=*2,!*3,r") + (plus:SI (mult:SI (match_dup 0) + (match_dup 1)) + (match_dup 2)))] + "cris_side_effect_mode_ok (MULT, operands, 4, 2, 0, 1, 3)" + "@ + # + # + move.%s3 %3,[%4=%2+%0%T1]") + + ;; SImode + + (define_insn "*mov_sidesi_biap_mem" + [(set (mem:SI (plus:SI + (mult:SI (match_operand:SI 0 "register_operand" "r,r,r") + (match_operand:SI 1 "const_int_operand" "n,n,n")) + (match_operand:SI 2 "register_operand" "r,r,r"))) + (match_operand:SI 3 "register_operand" "r,r,r")) + (set (match_operand:SI 4 "register_operand" "=*2,!*3,r") + (plus:SI (mult:SI (match_dup 0) + (match_dup 1)) + (match_dup 2)))] + "cris_side_effect_mode_ok (MULT, operands, 4, 2, 0, 1, 3)" + "@ + # + # + move.%s3 %3,[%4=%2+%0%T1]") + + ;; Split for the case above where the predicate isn't honored; only the + ;; constraint, and we end up with the set in the side-effect gets the same + ;; register as the input register. Arguably a GCC bug, but we'll spot it + ;; rarely enough that we need to catch it ourselves to be safe. + + (define_split + [(parallel + [(set (mem (plus:SI + (mult:SI (match_operand:SI 0 "register_operand" "") + (match_operand:SI 1 "const_int_operand" "")) + (match_operand:SI 2 "register_operand" ""))) + (match_operand 3 "register_operand" "")) + (set (match_operand:SI 4 "register_operand" "") + (plus:SI (mult:SI (match_dup 0) + (match_dup 1)) + (match_dup 2)))])] + "reload_completed && reg_overlap_mentioned_p (operands[4], operands[3])" + [(set (match_dup 5) (match_dup 3)) + (set (match_dup 4) (match_dup 2)) + (set (match_dup 4) + (plus:SI (mult:SI (match_dup 0) + (match_dup 1)) + (match_dup 4)))] + "operands[5] + = gen_rtx_MEM (GET_MODE (operands[3]), + gen_rtx_PLUS (SImode, + gen_rtx_MULT (SImode, + operands[0], operands[1]), + operands[2]));") + + ;; move.s rx,[ry=rz+i] + ;; FIXME: These could have anonymous mode for operand 2. + + ;; QImode + + (define_insn "*mov_sideqi_mem" + [(set (mem:QI + (plus:SI (match_operand:SI 0 "cris_bdap_operand" "%r,r,r,r") + (match_operand:SI 1 "cris_bdap_operand" "r>Ri,r>Ri,r,>Ri"))) + (match_operand:QI 2 "register_operand" "r,r,r,r")) + (set (match_operand:SI 3 "register_operand" "=*0,!*2,r,r") + (plus:SI (match_dup 0) + (match_dup 1)))] + "cris_side_effect_mode_ok (PLUS, operands, 3, 0, 1, -1, 2)" + "* + { + if (which_alternative == 0 + && (GET_CODE (operands[1]) != CONST_INT + || INTVAL (operands[1]) > 127 + || INTVAL (operands[1]) < -128 + || CONST_OK_FOR_LETTER_P (INTVAL (operands[1]), 'N') + || CONST_OK_FOR_LETTER_P (INTVAL (operands[1]), 'J'))) + return \"#\"; + if (which_alternative == 1) + return \"#\"; + return \"move.%s2 %2,[%3=%0%S1]\"; + }") + + ;; HImode + + (define_insn "*mov_sidehi_mem" + [(set (mem:HI + (plus:SI (match_operand:SI 0 "cris_bdap_operand" "%r,r,r,r") + (match_operand:SI 1 "cris_bdap_operand" "r>Ri,r>Ri,r,>Ri"))) + (match_operand:HI 2 "register_operand" "r,r,r,r")) + (set (match_operand:SI 3 "register_operand" "=*0,!*2,r,r") + (plus:SI (match_dup 0) + (match_dup 1)))] + "cris_side_effect_mode_ok (PLUS, operands, 3, 0, 1, -1, 2)" + "* + { + if (which_alternative == 0 + && (GET_CODE (operands[1]) != CONST_INT + || INTVAL (operands[1]) > 127 + || INTVAL (operands[1]) < -128 + || CONST_OK_FOR_LETTER_P (INTVAL (operands[1]), 'N') + || CONST_OK_FOR_LETTER_P (INTVAL (operands[1]), 'J'))) + return \"#\"; + if (which_alternative == 1) + return \"#\"; + return \"move.%s2 %2,[%3=%0%S1]\"; + }") + + ;; SImode + + (define_insn "*mov_sidesi_mem" + [(set (mem:SI + (plus:SI (match_operand:SI 0 "cris_bdap_operand" "%r,r,r,r") + (match_operand:SI 1 "cris_bdap_operand" "r>Ri,r>Ri,r,>Ri"))) + (match_operand:SI 2 "register_operand" "r,r,r,r")) + (set (match_operand:SI 3 "register_operand" "=*0,!*2,r,r") + (plus:SI (match_dup 0) + (match_dup 1)))] + "cris_side_effect_mode_ok (PLUS, operands, 3, 0, 1, -1, 2)" + "* + { + if (which_alternative == 0 + && (GET_CODE (operands[1]) != CONST_INT + || INTVAL (operands[1]) > 127 + || INTVAL (operands[1]) < -128 + || CONST_OK_FOR_LETTER_P (INTVAL (operands[1]), 'N') + || CONST_OK_FOR_LETTER_P (INTVAL (operands[1]), 'J'))) + return \"#\"; + if (which_alternative == 1) + return \"#\"; + return \"move.%s2 %2,[%3=%0%S1]\"; + }") + + ;; Like the biap case, a split where the set in the side-effect gets the + ;; same register as the input register to the main insn due to gcc not + ;; always checking the predicate. + + (define_split + [(parallel + [(set (mem (plus:SI + (match_operand:SI 0 "cris_bdap_operand" "") + (match_operand:SI 1 "cris_bdap_operand" ""))) + (match_operand:SI 2 "register_operand" "")) + (set (match_operand:SI 3 "register_operand" "") + (plus:SI (match_dup 0) (match_dup 1)))])] + "reload_completed && reg_overlap_mentioned_p (operands[3], operands[2])" + [(set (match_dup 4) (match_dup 2)) + (set (match_dup 3) (match_dup 0)) + (set (match_dup 3) (plus:SI (match_dup 3) (match_dup 1)))] + "operands[4] + = gen_rtx_MEM (GET_MODE (operands[2]), + gen_rtx_PLUS (SImode, operands[0], operands[1]));") + + ;; Clear memory side-effect patterns. It is hard to get to the mode if + ;; the MEM was anonymous, so there will be one for each mode. + + ;; clear.d [ry=rx+rw.s2] + + (define_insn "*clear_sidesi_biap" + [(set (mem:SI (plus:SI + (mult:SI (match_operand:SI 0 "register_operand" "r,r") + (match_operand:SI 1 "const_int_operand" "n,n")) + (match_operand:SI 2 "register_operand" "r,r"))) + (const_int 0)) + (set (match_operand:SI 3 "register_operand" "=*2,r") + (plus:SI (mult:SI (match_dup 0) + (match_dup 1)) + (match_dup 2)))] + "cris_side_effect_mode_ok (MULT, operands, 3, 2, 0, 1, -1)" + "@ + # + clear.d [%3=%2+%0%T1]") + + ;; clear.d [ry=rz+i] + + (define_insn "*clear_sidesi" + [(set (mem:SI + (plus:SI (match_operand:SI 0 "cris_bdap_operand" "%r,r,r") + (match_operand:SI 1 "cris_bdap_operand" "r>Ri,r,>Ri"))) + (const_int 0)) + (set (match_operand:SI 2 "register_operand" "=*0,r,r") + (plus:SI (match_dup 0) + (match_dup 1)))] + "cris_side_effect_mode_ok (PLUS, operands, 2, 0, 1, -1, -1)" + "* + { + if (which_alternative == 0 + && (GET_CODE (operands[1]) != CONST_INT + || INTVAL (operands[1]) > 127 + || INTVAL (operands[1]) < -128 + || CONST_OK_FOR_LETTER_P (INTVAL (operands[1]), 'N') + || CONST_OK_FOR_LETTER_P (INTVAL (operands[1]), 'J'))) + return \"#\"; + return \"clear.d [%2=%0%S1]\"; + }") + + ;; clear.w [ry=rx+rw.s2] + + (define_insn "*clear_sidehi_biap" + [(set (mem:HI (plus:SI + (mult:SI (match_operand:SI 0 "register_operand" "r,r") + (match_operand:SI 1 "const_int_operand" "n,n")) + (match_operand:SI 2 "register_operand" "r,r"))) + (const_int 0)) + (set (match_operand:SI 3 "register_operand" "=*2,r") + (plus:SI (mult:SI (match_dup 0) + (match_dup 1)) + (match_dup 2)))] + "cris_side_effect_mode_ok (MULT, operands, 3, 2, 0, 1, -1)" + "@ + # + clear.w [%3=%2+%0%T1]") + + ;; clear.w [ry=rz+i] + + (define_insn "*clear_sidehi" + [(set (mem:HI + (plus:SI (match_operand:SI 0 "cris_bdap_operand" "%r,r,r") + (match_operand:SI 1 "cris_bdap_operand" "r>Ri,r,>Ri"))) + (const_int 0)) + (set (match_operand:SI 2 "register_operand" "=*0,r,r") + (plus:SI (match_dup 0) + (match_dup 1)))] + "cris_side_effect_mode_ok (PLUS, operands, 2, 0, 1, -1, -1)" + "* + { + if (which_alternative == 0 + && (GET_CODE (operands[1]) != CONST_INT + || INTVAL (operands[1]) > 127 + || INTVAL (operands[1]) < -128 + || CONST_OK_FOR_LETTER_P (INTVAL (operands[1]), 'N') + || CONST_OK_FOR_LETTER_P (INTVAL (operands[1]), 'J'))) + return \"#\"; + return \"clear.w [%2=%0%S1]\"; + }") + + ;; clear.b [ry=rx+rw.s2] + + (define_insn "*clear_sideqi_biap" + [(set (mem:QI (plus:SI + (mult:SI (match_operand:SI 0 "register_operand" "r,r") + (match_operand:SI 1 "const_int_operand" "n,n")) + (match_operand:SI 2 "register_operand" "r,r"))) + (const_int 0)) + (set (match_operand:SI 3 "register_operand" "=*2,r") + (plus:SI (mult:SI (match_dup 0) + (match_dup 1)) + (match_dup 2)))] + "cris_side_effect_mode_ok (MULT, operands, 3, 2, 0, 1, -1)" + "@ + # + clear.b [%3=%2+%0%T1]") + + ;; clear.b [ry=rz+i] + + (define_insn "*clear_sideqi" + [(set (mem:QI + (plus:SI (match_operand:SI 0 "cris_bdap_operand" "%r,r,r") + (match_operand:SI 1 "cris_bdap_operand" "r>Ri,r,>Ri"))) + (const_int 0)) + (set (match_operand:SI 2 "register_operand" "=*0,r,r") + (plus:SI (match_dup 0) + (match_dup 1)))] + "cris_side_effect_mode_ok (PLUS, operands, 2, 0, 1, -1, -1)" + "* + { + if (which_alternative == 0 + && (GET_CODE (operands[1]) != CONST_INT + || INTVAL (operands[1]) > 127 + || INTVAL (operands[1]) < -128 + || CONST_OK_FOR_LETTER_P (INTVAL (operands[1]), 'N') + || CONST_OK_FOR_LETTER_P (INTVAL (operands[1]), 'J'))) + return \"#\"; + return \"clear.b [%2=%0%S1]\"; + }") + + ;; To appease test-case gcc.c-torture/execute/920501-2.c (and others) at + ;; -O0, we need a movdi as a temporary measure. Here's how things fail: + ;; A cmpdi RTX needs reloading (global): + ;; (insn 185 326 186 (set (cc0) + ;; (compare (mem/f:DI (reg/v:SI 22) 0) + ;; (const_int 1 [0x1]))) 4 {cmpdi} (nil) + ;; (nil)) + ;; Now, reg 22 is reloaded for input address, and the mem is also moved + ;; out of the instruction (into a register), since one of the operands + ;; must be a register. Reg 22 is reloaded (into reg 10), and the mem is + ;; moved out and synthesized in SImode parts (reg 9, reg 10 - should be ok + ;; wrt. overlap). The bad things happen with the synthesis in + ;; emit_move_insn_1; the location where to substitute reg 10 is lost into + ;; two new RTX:es, both still having reg 22. Later on, the left-over reg + ;; 22 is recognized to have an equivalent in memory which is substituted + ;; straight in, and we end up with an unrecognizable insn: + ;; (insn 325 324 326 (set (reg:SI 9 r9) + ;; (mem/f:SI (mem:SI (plus:SI (reg:SI 8 r8) + ;; (const_int -84 [0xffffffac])) 0) 0)) -1 (nil) + ;; (nil)) + ;; which is the first part of the reloaded synthesized "movdi". + ;; The right thing would be to add equivalent replacement locations for + ;; insn with pseudos that need more reloading. The question is where. + + ;; Normal move patterns from SI on. + + (define_expand "movsi" + [(set + (match_operand:SI 0 "nonimmediate_operand" "") + (match_operand:SI 1 "cris_general_operand_or_symbol" ""))] + "" + " + { + /* If the output goes to a MEM, make sure we have zero or a register as + input. */ + if (GET_CODE (operands[0]) == MEM + && ! REG_S_P (operands[1]) + && operands[1] != const0_rtx + && ! no_new_pseudos) + operands[1] = force_reg (SImode, operands[1]); + + /* If we're generating PIC and have an incoming symbol, validize it to a + general operand or something that will match a special pattern. + + FIXME: Do we *have* to recognize anything that would normally be a + valid symbol? Can we exclude global PIC addresses with an added + offset? */ + if (flag_pic + && CONSTANT_ADDRESS_P (operands[1]) + && cris_symbol (operands[1])) + { + /* We must have a register as destination for what we're about to + do, and for the patterns we generate. */ + if (! REG_S_P (operands[0])) + { + if (no_new_pseudos) + abort (); + operands[1] = force_reg (SImode, operands[1]); + } + else + { + /* Mark a needed PIC setup for a LABEL_REF:s coming in here: + they are so rare not-being-branch-targets that we don't mark + a function as needing PIC setup just because we have + inspected LABEL_REF:s as operands. It is only in + __builtin_setjmp and such that we can get a LABEL_REF + assigned to a register. */ + if (GET_CODE (operands[1]) == LABEL_REF) + current_function_uses_pic_offset_table = 1; + + /* We don't have to do anything for global PIC operands; they + look just like ``[rPIC+sym]''. */ + if (! cris_got_symbol (operands[1]) + /* We don't do anything for local PIC operands; we match + that with a special alternative. */ + && ! cris_gotless_symbol (operands[1])) + { + /* We get here when we have to change something that would + be recognizable if it wasn't PIC. A ``sym'' is ok for + PIC symbols both with and without a GOT entry. And ``sym + + offset'' is ok for local symbols, so the only thing it + could be, is a global symbol with an offset. Check and + abort if not. */ + rtx sym = get_related_value (operands[1]); + HOST_WIDE_INT offs = get_integer_term (operands[1]); + + if (sym == NULL_RTX || offs == 0) + abort (); + emit_move_insn (operands[0], sym); + if (expand_binop (SImode, add_optab, operands[0], + GEN_INT (offs), operands[0], 0, + OPTAB_LIB_WIDEN) != operands[0]) + abort (); + DONE; + } + } + } + }") + + (define_insn "*movsi_internal" + [(set + (match_operand:SI 0 "nonimmediate_operand" "=r,r,r,Q>,r,Q>,g,r,r,r,g") + (match_operand:SI 1 + ;; FIXME: We want to put S last, but apparently g matches S. + ;; It's a bug: an S is not a general_operand and shouldn't match g. + "cris_general_operand_or_gotless_symbol" "r,Q>,M,M,I,r,M,n,!S,g,r"))] + "" + "* + { + /* Better to have c-switch here; it is worth it to optimize the size of + move insns. The alternative would be to try to find more constraint + letters. FIXME: Check again. It seems this could shrink a bit. */ + switch (which_alternative) + { + case 0: + case 1: + case 5: + case 9: + case 10: + return \"move.d %1,%0\"; + + case 2: + case 3: + case 6: + return \"clear.d %0\"; + + /* Constants -32..31 except 0. */ + case 4: + return \"moveq %1,%0\"; + + /* We can win a little on constants -32768..-33, 32..65535. */ + case 7: + if (INTVAL (operands[1]) > 0 && INTVAL (operands[1]) < 65536) + { + if (INTVAL (operands[1]) < 256) + return \"movu.b %1,%0\"; + return \"movu.w %1,%0\"; + } + else if (INTVAL (operands[1]) >= -32768 && INTVAL (operands[1]) < 32768) + { + if (INTVAL (operands[1]) >= -128 && INTVAL (operands[1]) < 128) + return \"movs.b %1,%0\"; + return \"movs.w %1,%0\"; + } + return \"move.d %1,%0\"; + + case 8: + /* FIXME: Try and split this into pieces GCC makes better code of, + than this multi-insn pattern. Synopsis: wrap the GOT-relative + symbol into an unspec, and when PIC, recognize the unspec + everywhere a symbol is normally recognized. (The PIC register + should be recognized by GCC as pic_offset_table_rtx when needed + and similar for PC.) Each component can then be optimized with + the rest of the code; it should be possible to have a constant + term added on an unspec. Don't forget to add a REG_EQUAL (or + is it REG_EQUIV) note to the destination. It might not be + worth it. Measure. + + Note that the 'v' modifier makes PLT references be output as + sym:PLT rather than [rPIC+sym:GOTPLT]. */ + return \"move.d %v1,%0\;add.d %P1,%0\"; + + default: + return \"BOGUS: %1 to %0\"; + } + }" + [(set_attr "slottable" "yes,yes,yes,yes,yes,yes,no,no,no,no,no")]) + + ;; Extend operations with side-effect from mem to register, using + ;; MOVS/MOVU. These are from mem to register only. + ;; + ;; [rx=ry+rz.S] + ;; + ;; QImode to HImode + ;; + ;; FIXME: Can we omit extend to HImode, since GCC should truncate for + ;; HImode by itself? Perhaps use only anonymous modes? + + (define_insn "*ext_sideqihi_biap" + [(set (match_operand:HI 0 "register_operand" "=r,r") + (match_operator:HI + 5 "cris_extend_operator" + [(mem:QI (plus:SI + (mult:SI (match_operand:SI 1 "register_operand" "r,r") + (match_operand:SI 2 "const_int_operand" "n,n")) + (match_operand:SI 3 "register_operand" "r,r")))])) + (set (match_operand:SI 4 "register_operand" "=*3,r") + (plus:SI (mult:SI (match_dup 1) + (match_dup 2)) + (match_dup 3)))] + "cris_side_effect_mode_ok (MULT, operands, 4, 3, 1, 2, 0)" + "@ + # + mov%e5.%m5 [%4=%3+%1%T2],%0") + + ;; QImode to SImode + + (define_insn "*ext_sideqisi_biap" + [(set (match_operand:SI 0 "register_operand" "=r,r") + (match_operator:SI + 5 "cris_extend_operator" + [(mem:QI (plus:SI + (mult:SI (match_operand:SI 1 "register_operand" "r,r") + (match_operand:SI 2 "const_int_operand" "n,n")) + (match_operand:SI 3 "register_operand" "r,r")))])) + (set (match_operand:SI 4 "register_operand" "=*3,r") + (plus:SI (mult:SI (match_dup 1) + (match_dup 2)) + (match_dup 3)))] + "cris_side_effect_mode_ok (MULT, operands, 4, 3, 1, 2, 0)" + "@ + # + mov%e5.%m5 [%4=%3+%1%T2],%0") + + ;; HImode to SImode + + (define_insn "*ext_sidehisi_biap" + [(set (match_operand:SI 0 "register_operand" "=r,r") + (match_operator:SI + 5 "cris_extend_operator" + [(mem:HI (plus:SI + (mult:SI (match_operand:SI 1 "register_operand" "r,r") + (match_operand:SI 2 "const_int_operand" "n,n")) + (match_operand:SI 3 "register_operand" "r,r")))])) + (set (match_operand:SI 4 "register_operand" "=*3,r") + (plus:SI (mult:SI (match_dup 1) + (match_dup 2)) + (match_dup 3)))] + "cris_side_effect_mode_ok (MULT, operands, 4, 3, 1, 2, 0)" + "@ + # + mov%e5.%m5 [%4=%3+%1%T2],%0") + + ;; Same but [rx=ry+i] + + ;; QImode to HImode + + (define_insn "*ext_sideqihi" + [(set (match_operand:HI 0 "register_operand" "=r,r,r") + (match_operator:HI + 4 "cris_extend_operator" + [(mem:QI (plus:SI + (match_operand:SI 1 "cris_bdap_operand" "%r,r,r") + (match_operand:SI 2 "cris_bdap_operand" "r>Ri,r,>Ri")))])) + (set (match_operand:SI 3 "register_operand" "=*1,r,r") + (plus:SI (match_dup 1) + (match_dup 2)))] + "cris_side_effect_mode_ok (PLUS, operands, 3, 1, 2, -1, 0)" + "* + { + if (which_alternative == 0 + && (GET_CODE (operands[2]) != CONST_INT + || INTVAL (operands[2]) > 127 + || INTVAL (operands[2]) < -128 + || CONST_OK_FOR_LETTER_P (INTVAL (operands[2]), 'N') + || CONST_OK_FOR_LETTER_P (INTVAL (operands[2]), 'J'))) + return \"#\"; + return \"mov%e4.%m4 [%3=%1%S2],%0\"; + }") + + ;; QImode to SImode + + (define_insn "*ext_sideqisi" + [(set (match_operand:SI 0 "register_operand" "=r,r,r") + (match_operator:SI + 4 "cris_extend_operator" + [(mem:QI (plus:SI + (match_operand:SI 1 "cris_bdap_operand" "%r,r,r") + (match_operand:SI 2 "cris_bdap_operand" "r>Ri,r,>Ri")))])) + (set (match_operand:SI 3 "register_operand" "=*1,r,r") + (plus:SI (match_dup 1) + (match_dup 2)))] + "cris_side_effect_mode_ok (PLUS, operands, 3, 1, 2, -1, 0)" + "* + { + if (which_alternative == 0 + && (GET_CODE (operands[2]) != CONST_INT + || INTVAL (operands[2]) > 127 + || INTVAL (operands[2]) < -128 + || CONST_OK_FOR_LETTER_P (INTVAL (operands[2]), 'N') + || CONST_OK_FOR_LETTER_P (INTVAL (operands[2]), 'J'))) + return \"#\"; + return \"mov%e4.%m4 [%3=%1%S2],%0\"; + }") + + ;; HImode to SImode + + (define_insn "*ext_sidehisi" + [(set (match_operand:SI 0 "register_operand" "=r,r,r") + (match_operator:SI + 4 "cris_extend_operator" + [(mem:HI (plus:SI + (match_operand:SI 1 "cris_bdap_operand" "%r,r,r") + (match_operand:SI 2 "cris_bdap_operand" "r>Ri,r,>Ri")))])) + (set (match_operand:SI 3 "register_operand" "=*1,r,r") + (plus:SI (match_dup 1) + (match_dup 2)))] + "cris_side_effect_mode_ok (PLUS, operands, 3, 1, 2, -1, 0)" + "* + { + if (which_alternative == 0 + && (GET_CODE (operands[2]) != CONST_INT + || INTVAL (operands[2]) > 127 + || INTVAL (operands[2]) < -128 + || CONST_OK_FOR_LETTER_P (INTVAL (operands[2]), 'N') + || CONST_OK_FOR_LETTER_P (INTVAL (operands[2]), 'J'))) + return \"#\"; + return \"mov%e4.%m4 [%3=%1%S2],%0\"; + }") + + ;; FIXME: See movsi. + + (define_insn "movhi" + [(set + (match_operand:HI 0 "nonimmediate_operand" "=r,r,r,Q>,r,Q>,r,r,r,g,g,r") + (match_operand:HI 1 "general_operand" "r,Q>,M,M,I,r,L,O,n,M,r,g"))] + "" + "* + { + switch (which_alternative) + { + case 0: + case 1: + case 5: + case 10: + case 11: + return \"move.w %1,%0\"; + case 2: + case 3: + case 9: + return \"clear.w %0\"; + case 4: + return \"moveq %1,%0\"; + case 6: + case 8: + if (INTVAL (operands[1]) < 256 && INTVAL (operands[1]) >= -128) + { + if (INTVAL (operands[1]) > 0) + return \"movu.b %1,%0\"; + return \"movs.b %1,%0\"; + } + return \"move.w %1,%0\"; + case 7: + return \"movEq %b1,%0\"; + default: + return \"BOGUS: %1 to %0\"; + } + }" + [(set_attr "slottable" "yes,yes,yes,yes,yes,yes,no,yes,no,no,no,no") + (set (attr "cc") + (if_then_else (eq_attr "alternative" "7") + (const_string "clobber") + (const_string "normal")))]) + + (define_insn "movstricthi" + [(set + (strict_low_part + (match_operand:HI 0 "nonimmediate_operand" "+r,r,r,Q>,Q>,g,r,g")) + (match_operand:HI 1 "general_operand" "r,Q>,M,M,r,M,g,r"))] + "" + "@ + move.w %1,%0 + move.w %1,%0 + clear.w %0 + clear.w %0 + move.w %1,%0 + clear.w %0 + move.w %1,%0 + move.w %1,%0" + [(set_attr "slottable" "yes,yes,yes,yes,yes,no,no,no")]) + + (define_insn "movqi" + [(set (match_operand:QI 0 "nonimmediate_operand" "=r,Q>,r,r,Q>,r,g,g,r,r") + (match_operand:QI 1 "general_operand" "r,r,Q>,M,M,I,M,r,O,g"))] + "" + "@ + move.b %1,%0 + move.b %1,%0 + move.b %1,%0 + clear.b %0 + clear.b %0 + moveq %1,%0 + clear.b %0 + move.b %1,%0 + moveq %b1,%0 + move.b %1,%0" + [(set_attr "slottable" "yes,yes,yes,yes,yes,yes,no,no,yes,no") + (set (attr "cc") + (if_then_else (eq_attr "alternative" "8") + (const_string "clobber") + (const_string "normal")))]) + + (define_insn "movstrictqi" + [(set (strict_low_part + (match_operand:QI 0 "nonimmediate_operand" "+r,Q>,r,r,Q>,g,g,r")) + (match_operand:QI 1 "general_operand" "r,r,Q>,M,M,M,r,g"))] + "" + "@ + move.b %1,%0 + move.b %1,%0 + move.b %1,%0 + clear.b %0 + clear.b %0 + clear.b %0 + move.b %1,%0 + move.b %1,%0" + [(set_attr "slottable" "yes,yes,yes,yes,yes,no,no,no")]) + + ;; The valid "quick" bit-patterns are, except for 0.0, denormalized + ;; values REALLY close to 0, and some NaN:s (I think; their exponent is + ;; all ones); the worthwhile one is "0.0". + ;; It will use clear, so we know ALL types of immediate 0 never change cc. + + (define_insn "movsf" + [(set (match_operand:SF 0 "nonimmediate_operand" "=r,Q>,r,r,Q>,g,g,r") + (match_operand:SF 1 "general_operand" "r,r,Q>,G,G,G,r,g"))] + "" + "@ + move.d %1,%0 + move.d %1,%0 + move.d %1,%0 + clear.d %0 + clear.d %0 + clear.d %0 + move.d %1,%0 + move.d %1,%0" + [(set_attr "slottable" "yes,yes,yes,yes,yes,no,no,no")]) + + + ;; Sign- and zero-extend insns with standard names. + ;; Those for integer source operand are ordered with the widest source + ;; type first. + + ;; Sign-extend. + + (define_insn "extendsidi2" + [(set (match_operand:DI 0 "register_operand" "=r") + (sign_extend:DI (match_operand:SI 1 "general_operand" "g")))] + "" + "move.d %1,%M0\;smi %H0\;neg.d %H0,%H0") + + (define_insn "extendhidi2" + [(set (match_operand:DI 0 "register_operand" "=r") + (sign_extend:DI (match_operand:HI 1 "general_operand" "g")))] + "" + "movs.w %1,%M0\;smi %H0\;neg.d %H0,%H0") + + (define_insn "extendhisi2" + [(set (match_operand:SI 0 "register_operand" "=r,r,r") + (sign_extend:SI (match_operand:HI 1 "general_operand" "r,Q>,g")))] + "" + "movs.w %1,%0" + [(set_attr "slottable" "yes,yes,no")]) + + (define_insn "extendqidi2" + [(set (match_operand:DI 0 "register_operand" "=r") + (sign_extend:DI (match_operand:QI 1 "general_operand" "g")))] + "" + "movs.b %1,%M0\;smi %H0\;neg.d %H0,%H0") + + (define_insn "extendqisi2" + [(set (match_operand:SI 0 "register_operand" "=r,r,r") + (sign_extend:SI (match_operand:QI 1 "general_operand" "r,Q>,g")))] + "" + "movs.b %1,%0" + [(set_attr "slottable" "yes,yes,no")]) + + ;; To do a byte->word exension, extend to dword, exept that the top half + ;; of the register will be clobbered. FIXME: Perhaps this is not needed. + + (define_insn "extendqihi2" + [(set (match_operand:HI 0 "register_operand" "=r,r,r") + (sign_extend:HI (match_operand:QI 1 "general_operand" "r,Q>,g")))] + "" + "movs.b %1,%0" + [(set_attr "slottable" "yes,yes,no")]) + + + ;; Zero-extend. The DImode ones are synthesized by gcc, so we don't + ;; specify them here. + + (define_insn "zero_extendhisi2" + [(set (match_operand:SI 0 "register_operand" "=r,r,r") + (zero_extend:SI + (match_operand:HI 1 "nonimmediate_operand" "r,Q>,m")))] + "" + "movu.w %1,%0" + [(set_attr "slottable" "yes,yes,no")]) + + (define_insn "zero_extendqisi2" + [(set (match_operand:SI 0 "register_operand" "=r,r,r") + (zero_extend:SI + (match_operand:QI 1 "nonimmediate_operand" "r,Q>,m")))] + "" + "movu.b %1,%0" + [(set_attr "slottable" "yes,yes,no")]) + + ;; Same comment as sign-extend QImode to HImode above applies. + + (define_insn "zero_extendqihi2" + [(set (match_operand:HI 0 "register_operand" "=r,r,r") + (zero_extend:HI + (match_operand:QI 1 "nonimmediate_operand" "r,Q>,m")))] + "" + "movu.b %1,%0" + [(set_attr "slottable" "yes,yes,no")]) + + ;; All kinds of arithmetic and logical instructions. + ;; + ;; First, anonymous patterns to match addressing modes with + ;; side-effects. + ;; + ;; op.S [rx=ry+I],rz; (add, sub, or, and, bound). + ;; + ;; [rx=ry+rz.S] + ;; FIXME: These could have anonymous mode for operand 0. + + ;; QImode + + (define_insn "*op_sideqi_biap" + [(set (match_operand:QI 0 "register_operand" "=r,r") + (match_operator:QI + 6 "cris_orthogonal_operator" + [(match_operand:QI 1 "register_operand" "0,0") + (mem:QI (plus:SI + (mult:SI (match_operand:SI 2 "register_operand" "r,r") + (match_operand:SI 3 "const_int_operand" "n,n")) + (match_operand:SI 4 "register_operand" "r,r")))])) + (set (match_operand:SI 5 "register_operand" "=*4,r") + (plus:SI (mult:SI (match_dup 2) + (match_dup 3)) + (match_dup 4)))] + "cris_side_effect_mode_ok (MULT, operands, 5, 4, 2, 3, 0)" + "@ + # + %x6.%s0 [%5=%4+%2%T3],%0") + + ;; HImode + + (define_insn "*op_sidehi_biap" + [(set (match_operand:HI 0 "register_operand" "=r,r") + (match_operator:HI + 6 "cris_orthogonal_operator" + [(match_operand:HI 1 "register_operand" "0,0") + (mem:HI (plus:SI + (mult:SI (match_operand:SI 2 "register_operand" "r,r") + (match_operand:SI 3 "const_int_operand" "n,n")) + (match_operand:SI 4 "register_operand" "r,r")))])) + (set (match_operand:SI 5 "register_operand" "=*4,r") + (plus:SI (mult:SI (match_dup 2) + (match_dup 3)) + (match_dup 4)))] + "cris_side_effect_mode_ok (MULT, operands, 5, 4, 2, 3, 0)" + "@ + # + %x6.%s0 [%5=%4+%2%T3],%0") + + ;; SImode + + (define_insn "*op_sidesi_biap" + [(set (match_operand:SI 0 "register_operand" "=r,r") + (match_operator:SI + 6 "cris_orthogonal_operator" + [(match_operand:SI 1 "register_operand" "0,0") + (mem:SI (plus:SI + (mult:SI (match_operand:SI 2 "register_operand" "r,r") + (match_operand:SI 3 "const_int_operand" "n,n")) + (match_operand:SI 4 "register_operand" "r,r")))])) + (set (match_operand:SI 5 "register_operand" "=*4,r") + (plus:SI (mult:SI (match_dup 2) + (match_dup 3)) + (match_dup 4)))] + "cris_side_effect_mode_ok (MULT, operands, 5, 4, 2, 3, 0)" + "@ + # + %x6.%s0 [%5=%4+%2%T3],%0") + + ;; [rx=ry+i] ([%4=%2+%3]) + ;; FIXME: These could have anonymous mode for operand 0. + + ;; QImode + + (define_insn "*op_sideqi" + [(set (match_operand:QI 0 "register_operand" "=r,r,r") + (match_operator:QI + 5 "cris_orthogonal_operator" + [(match_operand:QI 1 "register_operand" "0,0,0") + (mem:QI (plus:SI + (match_operand:SI 2 "cris_bdap_operand" "%r,r,r") + (match_operand:SI 3 "cris_bdap_operand" "r>Ri,r,>Ri")))])) + (set (match_operand:SI 4 "register_operand" "=*2,r,r") + (plus:SI (match_dup 2) + (match_dup 3)))] + "cris_side_effect_mode_ok (PLUS, operands, 4, 2, 3, -1, 0)" + "* + { + if (which_alternative == 0 + && (GET_CODE (operands[3]) != CONST_INT + || INTVAL (operands[3]) > 127 + || INTVAL (operands[3]) < -128 + || CONST_OK_FOR_LETTER_P (INTVAL (operands[3]), 'N') + || CONST_OK_FOR_LETTER_P (INTVAL (operands[3]), 'J'))) + return \"#\"; + return \"%x5.%s0 [%4=%2%S3],%0\"; + }") + + ;; HImode + + (define_insn "*op_sidehi" + [(set (match_operand:HI 0 "register_operand" "=r,r,r") + (match_operator:HI + 5 "cris_orthogonal_operator" + [(match_operand:HI 1 "register_operand" "0,0,0") + (mem:HI (plus:SI + (match_operand:SI 2 "cris_bdap_operand" "%r,r,r") + (match_operand:SI 3 "cris_bdap_operand" "r>Ri,r,>Ri")))])) + (set (match_operand:SI 4 "register_operand" "=*2,r,r") + (plus:SI (match_dup 2) + (match_dup 3)))] + "cris_side_effect_mode_ok (PLUS, operands, 4, 2, 3, -1, 0)" + "* + { + if (which_alternative == 0 + && (GET_CODE (operands[3]) != CONST_INT + || INTVAL (operands[3]) > 127 + || INTVAL (operands[3]) < -128 + || CONST_OK_FOR_LETTER_P (INTVAL (operands[3]), 'N') + || CONST_OK_FOR_LETTER_P (INTVAL (operands[3]), 'J'))) + return \"#\"; + return \"%x5.%s0 [%4=%2%S3],%0\"; + }") + + ;; SImode + + (define_insn "*op_sidesi" + [(set (match_operand:SI 0 "register_operand" "=r,r,r") + (match_operator:SI + 5 "cris_orthogonal_operator" + [(match_operand:SI 1 "register_operand" "0,0,0") + (mem:SI (plus:SI + (match_operand:SI 2 "cris_bdap_operand" "%r,r,r") + (match_operand:SI 3 "cris_bdap_operand" "r>Ri,r,>Ri")))])) + (set (match_operand:SI 4 "register_operand" "=*2,r,r") + (plus:SI (match_dup 2) + (match_dup 3)))] + "cris_side_effect_mode_ok (PLUS, operands, 4, 2, 3, -1, 0)" + "* + { + if (which_alternative == 0 + && (GET_CODE (operands[3]) != CONST_INT + || INTVAL (operands[3]) > 127 + || INTVAL (operands[3]) < -128 + || CONST_OK_FOR_LETTER_P (INTVAL (operands[3]), 'N') + || CONST_OK_FOR_LETTER_P (INTVAL (operands[3]), 'J'))) + return \"#\"; + return \"%x5.%s0 [%4=%2%S3],%0\"; + }") + + ;; To match all cases for commutative operations we may have to have the + ;; following pattern for add, or & and. I do not know really, but it does + ;; not break anything. + ;; + ;; FIXME: This really ought to be checked. + ;; + ;; op.S [rx=ry+I],rz; + ;; + ;; [rx=ry+rz.S] + ;; FIXME: These could have anonymous mode for operand 0. + + ;; QImode + + (define_insn "*op_swap_sideqi_biap" + [(set (match_operand:QI 0 "register_operand" "=r,r") + (match_operator:QI + 6 "cris_commutative_orth_op" + [(mem:QI (plus:SI + (mult:SI (match_operand:SI 2 "register_operand" "r,r") + (match_operand:SI 3 "const_int_operand" "n,n")) + (match_operand:SI 4 "register_operand" "r,r"))) + (match_operand:QI 1 "register_operand" "0,0")])) + (set (match_operand:SI 5 "register_operand" "=*4,r") + (plus:SI (mult:SI (match_dup 2) + (match_dup 3)) + (match_dup 4)))] + "cris_side_effect_mode_ok (MULT, operands, 5, 4, 2, 3, 0)" + "@ + # + %x6.%s0 [%5=%4+%2%T3],%0") + + ;; HImode + + (define_insn "*op_swap_sidehi_biap" + [(set (match_operand:HI 0 "register_operand" "=r,r") + (match_operator:HI + 6 "cris_commutative_orth_op" + [(mem:HI (plus:SI + (mult:SI (match_operand:SI 2 "register_operand" "r,r") + (match_operand:SI 3 "const_int_operand" "n,n")) + (match_operand:SI 4 "register_operand" "r,r"))) + (match_operand:HI 1 "register_operand" "0,0")])) + (set (match_operand:SI 5 "register_operand" "=*4,r") + (plus:SI (mult:SI (match_dup 2) + (match_dup 3)) + (match_dup 4)))] + "cris_side_effect_mode_ok (MULT, operands, 5, 4, 2, 3, 0)" + "@ + # + %x6.%s0 [%5=%4+%2%T3],%0") + + ;; SImode + + (define_insn "*op_swap_sidesi_biap" + [(set (match_operand:SI 0 "register_operand" "=r,r") + (match_operator:SI + 6 "cris_commutative_orth_op" + [(mem:SI (plus:SI + (mult:SI (match_operand:SI 2 "register_operand" "r,r") + (match_operand:SI 3 "const_int_operand" "n,n")) + (match_operand:SI 4 "register_operand" "r,r"))) + (match_operand:SI 1 "register_operand" "0,0")])) + (set (match_operand:SI 5 "register_operand" "=*4,r") + (plus:SI (mult:SI (match_dup 2) + (match_dup 3)) + (match_dup 4)))] + "cris_side_effect_mode_ok (MULT, operands, 5, 4, 2, 3, 0)" + "@ + # + %x6.%s0 [%5=%4+%2%T3],%0") + + ;; [rx=ry+i] ([%4=%2+%3]) + ;; FIXME: These could have anonymous mode for operand 0. + + ;; QImode + + (define_insn "*op_swap_sideqi" + [(set (match_operand:QI 0 "register_operand" "=r,r,r") + (match_operator:QI + 5 "cris_commutative_orth_op" + [(mem:QI + (plus:SI (match_operand:SI 2 "cris_bdap_operand" "%r,r,r") + (match_operand:SI 3 "cris_bdap_operand" "r>Ri,r,>Ri"))) + (match_operand:QI 1 "register_operand" "0,0,0")])) + (set (match_operand:SI 4 "register_operand" "=*2,r,r") + (plus:SI (match_dup 2) + (match_dup 3)))] + "cris_side_effect_mode_ok (PLUS, operands, 4, 2, 3, -1, 0)" + "* + { + if (which_alternative == 0 + && (GET_CODE (operands[3]) != CONST_INT + || INTVAL (operands[3]) > 127 + || INTVAL (operands[3]) < -128 + || CONST_OK_FOR_LETTER_P (INTVAL (operands[3]), 'N') + || CONST_OK_FOR_LETTER_P (INTVAL (operands[3]), 'J'))) + return \"#\"; + return \"%x5.%s0 [%4=%2%S3],%0\"; + }") + + ;; HImode + + (define_insn "*op_swap_sidehi" + [(set (match_operand:HI 0 "register_operand" "=r,r,r") + (match_operator:HI + 5 "cris_commutative_orth_op" + [(mem:HI + (plus:SI (match_operand:SI 2 "cris_bdap_operand" "%r,r,r") + (match_operand:SI 3 "cris_bdap_operand" "r>Ri,r,>Ri"))) + (match_operand:HI 1 "register_operand" "0,0,0")])) + (set (match_operand:SI 4 "register_operand" "=*2,r,r") + (plus:SI (match_dup 2) + (match_dup 3)))] + "cris_side_effect_mode_ok (PLUS, operands, 4, 2, 3, -1, 0)" + "* + { + if (which_alternative == 0 + && (GET_CODE (operands[3]) != CONST_INT + || INTVAL (operands[3]) > 127 + || INTVAL (operands[3]) < -128 + || CONST_OK_FOR_LETTER_P (INTVAL (operands[3]), 'N') + || CONST_OK_FOR_LETTER_P (INTVAL (operands[3]), 'J'))) + return \"#\"; + return \"%x5.%s0 [%4=%2%S3],%0\"; + }") + + ;; SImode + + (define_insn "*op_swap_sidesi" + [(set (match_operand:SI 0 "register_operand" "=r,r,r") + (match_operator:SI + 5 "cris_commutative_orth_op" + [(mem:SI + (plus:SI (match_operand:SI 2 "cris_bdap_operand" "%r,r,r") + (match_operand:SI 3 "cris_bdap_operand" "r>Ri,r,>Ri"))) + (match_operand:SI 1 "register_operand" "0,0,0")])) + (set (match_operand:SI 4 "register_operand" "=*2,r,r") + (plus:SI (match_dup 2) + (match_dup 3)))] + "cris_side_effect_mode_ok (PLUS, operands, 4, 2, 3, -1, 0)" + "* + { + if (which_alternative == 0 + && (GET_CODE (operands[3]) != CONST_INT + || INTVAL (operands[3]) > 127 + || INTVAL (operands[3]) < -128 + || CONST_OK_FOR_LETTER_P (INTVAL (operands[3]), 'N') + || CONST_OK_FOR_LETTER_P (INTVAL (operands[3]), 'J'))) + return \"#\"; + return \"%x5.%s0 [%4=%2%S3],%0\"; + }") + + ;; Add operations, standard names. + + ;; Note that for the 'P' constraint, the high part can be -1 or 0. We + ;; output the insn through the 'A' output modifier as "adds.w" and "addq", + ;; respectively. + (define_insn "adddi3" + [(set (match_operand:DI 0 "register_operand" "=r,r,r,&r,&r") + (plus:DI (match_operand:DI 1 "register_operand" "%0,0,0,0,r") + (match_operand:DI 2 "general_operand" "J,N,P,g,!To")))] + "" + "@ + addq %2,%M0\;ax\;addq 0,%H0 + subq %n2,%M0\;ax\;subq 0,%H0 + add%e2.%z2 %2,%M0\;ax\;%A2 %H2,%H0 + add.d %M2,%M0\;ax\;add.d %H2,%H0 + add.d %M2,%M1,%M0\;ax\;add.d %H2,%H1,%H0") + + (define_insn "addsi3" + [(set (match_operand:SI 0 "register_operand" "=r,r,r,r,r,r,r,r") + (plus:SI + (match_operand:SI 1 "register_operand" "%0,0,0,0,0,0,r,r") + (match_operand:SI 2 "general_operand" "r,Q>,J,N,n,g,!To,0")))] + + ;; The last constraint is due to that after reload, the '%' is not + ;; honored, and canonicalization doesn't care about keeping the same + ;; register as in destination. This will happen after insn splitting. + ;; gcc <= 2.7.2. FIXME: Check for gcc-2.9x + + "" + "* + { + switch (which_alternative) + { + case 0: + case 1: + return \"add.d %2,%0\"; + case 2: + return \"addq %2,%0\"; + case 3: + return \"subq %n2,%0\"; + case 4: + /* 'Known value', but not in -63..63. + Check if addu/subu may be used. */ + if (INTVAL (operands[2]) > 0) + { + if (INTVAL (operands[2]) < 256) + return \"addu.b %2,%0\"; + if (INTVAL (operands[2]) < 65536) + return \"addu.w %2,%0\"; + } + else + { + if (INTVAL (operands[2]) >= -255) + return \"subu.b %n2,%0\"; + if (INTVAL (operands[2]) >= -65535) + return \"subu.w %n2,%0\"; + } + return \"add.d %2,%0\"; + case 6: + return \"add.d %2,%1,%0\"; + case 5: + return \"add.d %2,%0\"; + case 7: + return \"add.d %1,%0\"; + default: + return \"BOGUS addsi %2+%1 to %0\"; + } + }" + [(set_attr "slottable" "yes,yes,yes,yes,no,no,no,yes")]) + + (define_insn "addhi3" + [(set (match_operand:HI 0 "register_operand" "=r,r,r,r,r,r") + (plus:HI (match_operand:HI 1 "register_operand" "%0,0,0,0,0,r") + (match_operand:HI 2 "general_operand" "r,Q>,J,N,g,!To")))] + "" + "@ + add.w %2,%0 + add.w %2,%0 + addq %2,%0 + subq %n2,%0 + add.w %2,%0 + add.w %2,%1,%0" + [(set_attr "slottable" "yes,yes,yes,yes,no,no") + (set_attr "cc" "normal,normal,clobber,clobber,normal,normal")]) + + (define_insn "addqi3" + [(set (match_operand:QI 0 "register_operand" "=r,r,r,r,r,r,r") + (plus:QI (match_operand:QI 1 "register_operand" "%0,0,0,0,0,0,r") + (match_operand:QI 2 "general_operand" "r,Q>,J,N,O,g,!To")))] + "" + "@ + add.b %2,%0 + add.b %2,%0 + addq %2,%0 + subq %n2,%0 + subQ -%b2,%0 + add.b %2,%0 + add.b %2,%1,%0" + [(set_attr "slottable" "yes,yes,yes,yes,yes,no,no") + (set_attr "cc" "normal,normal,clobber,clobber,clobber,normal,normal")]) + + ;; Subtract. + ;; + ;; Note that because of insn canonicalization these will *seldom* but + ;; rarely be used with a known constant as an operand. + + ;; Note that for the 'P' constraint, the high part can be -1 or 0. We + ;; output the insn through the 'D' output modifier as "subs.w" and "subq", + ;; respectively. + (define_insn "subdi3" + [(set (match_operand:DI 0 "register_operand" "=r,r,r,&r,&r") + (minus:DI (match_operand:DI 1 "register_operand" "0,0,0,0,r") + (match_operand:DI 2 "general_operand" "J,N,P,g,!To")))] + "" + "@ + subq %2,%M0\;ax\;subq 0,%H0 + addq %n2,%M0\;ax\;addq 0,%H0 + sub%e2.%z2 %2,%M0\;ax\;%D2 %H2,%H0 + sub.d %M2,%M0\;ax\;sub.d %H2,%H0 + sub.d %M2,%M1,%M0\;ax\;sub.d %H2,%H1,%H0") + + (define_insn "subsi3" + [(set (match_operand:SI 0 "register_operand" "=r,r,r,r,r,r,r,r") + (minus:SI + (match_operand:SI 1 "register_operand" "0,0,0,0,0,0,0,r") + (match_operand:SI 2 "general_operand" "r,Q>,J,N,P,n,g,!To")))] + "" + + ;; This does not do the optimal: "addu.w 65535,r0" when %2 is negative. + ;; But then again, %2 should not be negative. + + "@ + sub.d %2,%0 + sub.d %2,%0 + subq %2,%0 + addq %n2,%0 + sub%e2.%z2 %2,%0 + sub.d %2,%0 + sub.d %2,%0 + sub.d %2,%1,%0" + [(set_attr "slottable" "yes,yes,yes,yes,no,no,no,no")]) + + (define_insn "subhi3" + [(set (match_operand:HI 0 "register_operand" "=r,r,r,r,r,r") + (minus:HI (match_operand:HI 1 "register_operand" "0,0,0,0,0,r") + (match_operand:HI 2 "general_operand" "r,Q>,J,N,g,!To")))] + "" + "@ + sub.w %2,%0 + sub.w %2,%0 + subq %2,%0 + addq %n2,%0 + sub.w %2,%0 + sub.w %2,%1,%0" + [(set_attr "slottable" "yes,yes,yes,yes,no,no") + (set_attr "cc" "normal,normal,clobber,clobber,normal,normal")]) + + (define_insn "subqi3" + [(set (match_operand:QI 0 "register_operand" "=r,r,r,r,r,r") + (minus:QI (match_operand:QI 1 "register_operand" "0,0,0,0,0,r") + (match_operand:QI 2 "general_operand" "r,Q>,J,N,g,!To")))] + "" + "@ + sub.b %2,%0 + sub.b %2,%0 + subq %2,%0 + addq %2,%0 + sub.b %2,%0 + sub.b %2,%1,%0" + [(set_attr "slottable" "yes,yes,yes,yes,no,no") + (set_attr "cc" "normal,normal,clobber,clobber,normal,normal")]) + + ;; CRIS has some add/sub-with-sign/zero-extend instructions. + ;; Although these perform sign/zero-extension to SImode, they are + ;; equally applicable for the HImode case. + ;; FIXME: Check; GCC should handle the widening. + ;; Note that these must be located after the normal add/sub patterns, + ;; so not to get constants into any less specific operands. + ;; + ;; Extend with add/sub and side-effect. + ;; + ;; ADDS/SUBS/ADDU/SUBU and BOUND, which needs a check for zero_extend + ;; + ;; adds/subs/addu/subu bound [rx=ry+rz.S] + ;; FIXME: These could have anonymous mode for operand 0. + + ;; QImode to HImode + ;; FIXME: GCC should widen. + + (define_insn "*extopqihi_side_biap" + [(set (match_operand:HI 0 "register_operand" "=r,r") + (match_operator:HI + 6 "cris_operand_extend_operator" + [(match_operand:HI 1 "register_operand" "0,0") + (match_operator:HI + 7 "cris_extend_operator" + [(mem:QI (plus:SI + (mult:SI (match_operand:SI 2 "register_operand" "r,r") + (match_operand:SI 3 "const_int_operand" "n,n")) + (match_operand:SI 4 "register_operand" "r,r")))])])) + (set (match_operand:SI 5 "register_operand" "=*4,r") + (plus:SI (mult:SI (match_dup 2) + (match_dup 3)) + (match_dup 4)))] + "(GET_CODE (operands[5]) != UMIN || GET_CODE (operands[7]) == ZERO_EXTEND) + && cris_side_effect_mode_ok (MULT, operands, 5, 4, 2, 3, 0)" + "@ + # + %x6%e7.%m7 [%5=%4+%2%T3],%0") + + ;; QImode to SImode + + (define_insn "*extopqisi_side_biap" + [(set (match_operand:SI 0 "register_operand" "=r,r") + (match_operator:SI + 6 "cris_operand_extend_operator" + [(match_operand:SI 1 "register_operand" "0,0") + (match_operator:SI + 7 "cris_extend_operator" + [(mem:QI (plus:SI + (mult:SI (match_operand:SI 2 "register_operand" "r,r") + (match_operand:SI 3 "const_int_operand" "n,n")) + (match_operand:SI 4 "register_operand" "r,r")))])])) + (set (match_operand:SI 5 "register_operand" "=*4,r") + (plus:SI (mult:SI (match_dup 2) + (match_dup 3)) + (match_dup 4)))] + "(GET_CODE (operands[5]) != UMIN || GET_CODE (operands[7]) == ZERO_EXTEND) + && cris_side_effect_mode_ok (MULT, operands, 5, 4, 2, 3, 0)" + "@ + # + %x6%e7.%m7 [%5=%4+%2%T3],%0") + + ;; HImode to SImode + + (define_insn "*extophisi_side_biap" + [(set (match_operand:SI 0 "register_operand" "=r,r") + (match_operator:SI + 6 "cris_operand_extend_operator" + [(match_operand:SI 1 "register_operand" "0,0") + (match_operator:SI + 7 "cris_extend_operator" + [(mem:HI (plus:SI + (mult:SI (match_operand:SI 2 "register_operand" "r,r") + (match_operand:SI 3 "const_int_operand" "n,n")) + (match_operand:SI 4 "register_operand" "r,r")))])])) + (set (match_operand:SI 5 "register_operand" "=*4,r") + (plus:SI (mult:SI (match_dup 2) + (match_dup 3)) + (match_dup 4)))] + "(GET_CODE (operands[5]) != UMIN || GET_CODE (operands[7]) == ZERO_EXTEND) + && cris_side_effect_mode_ok (MULT, operands, 5, 4, 2, 3, 0)" + "@ + # + %x6%e7.%m7 [%5=%4+%2%T3],%0") + + + ;; [rx=ry+i] + ;; FIXME: These could have anonymous mode for operand 0. + + ;; QImode to HImode + + (define_insn "*extopqihi_side" + [(set (match_operand:HI 0 "register_operand" "=r,r,r") + (match_operator:HI + 5 "cris_operand_extend_operator" + [(match_operand:HI 1 "register_operand" "0,0,0") + (match_operator:HI + 6 "cris_extend_operator" + [(mem:QI + (plus:SI (match_operand:SI 2 "cris_bdap_operand" "%r,r,r") + (match_operand:SI 3 "cris_bdap_operand" "r>Ri,r,>Ri") + ))])])) + (set (match_operand:SI 4 "register_operand" "=*2,r,r") + (plus:SI (match_dup 2) + (match_dup 3)))] + "(GET_CODE (operands[5]) != UMIN || GET_CODE (operands[6]) == ZERO_EXTEND) + && cris_side_effect_mode_ok (PLUS, operands, 4, 2, 3, -1, 0)" + "* + { + if (which_alternative == 0 + && (GET_CODE (operands[3]) != CONST_INT + || INTVAL (operands[3]) > 127 + || INTVAL (operands[3]) < -128 + || CONST_OK_FOR_LETTER_P (INTVAL (operands[3]), 'N') + || CONST_OK_FOR_LETTER_P (INTVAL (operands[3]), 'J'))) + return \"#\"; + return \"%x5%e6.%m6 [%4=%2%S3],%0\"; + }") + + ;; QImode to SImode + + (define_insn "*extopqisi_side" + [(set (match_operand:SI 0 "register_operand" "=r,r,r") + (match_operator:SI + 5 "cris_operand_extend_operator" + [(match_operand:SI 1 "register_operand" "0,0,0") + (match_operator:SI + 6 "cris_extend_operator" + [(mem:QI + (plus:SI (match_operand:SI 2 "cris_bdap_operand" "%r,r,r") + (match_operand:SI 3 "cris_bdap_operand" "r>Ri,r,>Ri") + ))])])) + (set (match_operand:SI 4 "register_operand" "=*2,r,r") + (plus:SI (match_dup 2) + (match_dup 3)))] + + "(GET_CODE (operands[5]) != UMIN || GET_CODE (operands[6]) == ZERO_EXTEND) + && cris_side_effect_mode_ok (PLUS, operands, 4, 2, 3, -1, 0)" + "* + { + if (which_alternative == 0 + && (GET_CODE (operands[3]) != CONST_INT + || INTVAL (operands[3]) > 127 + || INTVAL (operands[3]) < -128 + || CONST_OK_FOR_LETTER_P (INTVAL (operands[3]), 'N') + || CONST_OK_FOR_LETTER_P (INTVAL (operands[3]), 'J'))) + return \"#\"; + return \"%x5%e6.%m6 [%4=%2%S3],%0\"; + }") + + ;; HImode to SImode + + (define_insn "*extophisi_side" + [(set (match_operand:SI 0 "register_operand" "=r,r,r") + (match_operator:SI + 5 "cris_operand_extend_operator" + [(match_operand:SI 1 "register_operand" "0,0,0") + (match_operator:SI + 6 "cris_extend_operator" + [(mem:HI + (plus:SI (match_operand:SI 2 "cris_bdap_operand" "%r,r,r") + (match_operand:SI 3 "cris_bdap_operand" "r>Ri,r,>Ri") + ))])])) + (set (match_operand:SI 4 "register_operand" "=*2,r,r") + (plus:SI (match_dup 2) + (match_dup 3)))] + "(GET_CODE (operands[5]) != UMIN || GET_CODE (operands[6]) == ZERO_EXTEND) + && cris_side_effect_mode_ok (PLUS, operands, 4, 2, 3, -1, 0)" + "* + { + if (which_alternative == 0 + && (GET_CODE (operands[3]) != CONST_INT + || INTVAL (operands[3]) > 127 + || INTVAL (operands[3]) < -128 + || CONST_OK_FOR_LETTER_P (INTVAL (operands[3]), 'N') + || CONST_OK_FOR_LETTER_P (INTVAL (operands[3]), 'J'))) + return \"#\"; + return \"%x5%e6.%m6 [%4=%2%S3],%0\"; + }") + + + ;; As with op.S we may have to add special pattern to match commuted + ;; operands to adds/addu and bound + ;; + ;; adds/addu/bound [rx=ry+rz.S] + + ;; QImode to HImode + ;; FIXME: GCC should widen. + ;; FIXME: These could have anonymous mode for operand 0. + + (define_insn "*extopqihi_swap_side_biap" + [(set (match_operand:HI 0 "register_operand" "=r,r") + (match_operator:HI + 7 "cris_plus_or_bound_operator" + [(match_operator:HI + 6 "cris_extend_operator" + [(mem:QI (plus:SI + (mult:SI (match_operand:SI 2 "register_operand" "r,r") + (match_operand:SI 3 "const_int_operand" "n,n")) + (match_operand:SI 4 "register_operand" "r,r")))]) + (match_operand:HI 1 "register_operand" "0,0")])) + (set (match_operand:SI 5 "register_operand" "=*4,r") + (plus:SI (mult:SI (match_dup 2) + (match_dup 3)) + (match_dup 4)))] + "(GET_CODE (operands[6]) != UMIN || GET_CODE (operands[6]) == ZERO_EXTEND) + && cris_side_effect_mode_ok (MULT, operands, 5, 4, 2, 3, 0)" + "@ + # + %x7%e6.%m6 [%5=%4+%2%T3],%0") + + ;; QImode to SImode + + (define_insn "*extopqisi_swap_side_biap" + [(set (match_operand:SI 0 "register_operand" "=r,r") + (match_operator:SI + 7 "cris_plus_or_bound_operator" + [(match_operator:SI + 6 "cris_extend_operator" + [(mem:QI (plus:SI + (mult:SI (match_operand:SI 2 "register_operand" "r,r") + (match_operand:SI 3 "const_int_operand" "n,n")) + (match_operand:SI 4 "register_operand" "r,r")))]) + (match_operand:SI 1 "register_operand" "0,0")])) + (set (match_operand:SI 5 "register_operand" "=*4,r") + (plus:SI (mult:SI (match_dup 2) + (match_dup 3)) + (match_dup 4)))] + "(GET_CODE (operands[6]) != UMIN || GET_CODE (operands[6]) == ZERO_EXTEND) + && cris_side_effect_mode_ok (MULT, operands, 5, 4, 2, 3, 0)" + "@ + # + %x7%e6.%m6 [%5=%4+%2%T3],%0") + + ;; HImode to SImode + (define_insn "*extophisi_swap_side_biap" + [(set (match_operand:SI 0 "register_operand" "=r,r") + (match_operator:SI + 7 "cris_plus_or_bound_operator" + [(match_operator:SI + 6 "cris_extend_operator" + [(mem:HI (plus:SI + (mult:SI (match_operand:SI 2 "register_operand" "r,r") + (match_operand:SI 3 "const_int_operand" "n,n")) + (match_operand:SI 4 "register_operand" "r,r")))]) + (match_operand:SI 1 "register_operand" "0,0")])) + (set (match_operand:SI 5 "register_operand" "=*4,r") + (plus:SI (mult:SI (match_dup 2) + (match_dup 3)) + (match_dup 4)))] + "(GET_CODE (operands[6]) != UMIN || GET_CODE (operands[6]) == ZERO_EXTEND) + && cris_side_effect_mode_ok (MULT, operands, 5, 4, 2, 3, 0)" + "@ + # + %x7%e6.%m6 [%5=%4+%2%T3],%0") + + ;; [rx=ry+i] + ;; FIXME: These could have anonymous mode for operand 0. + ;; FIXME: GCC should widen. + + ;; QImode to HImode + + (define_insn "*extopqihi_swap_side" + [(set (match_operand:HI 0 "register_operand" "=r,r,r") + (match_operator:HI + 6 "cris_plus_or_bound_operator" + [(match_operator:HI + 5 "cris_extend_operator" + [(mem:QI (plus:SI + (match_operand:SI 2 "cris_bdap_operand" "%r,r,r") + (match_operand:SI 3 "cris_bdap_operand" "r>Ri,r,>Ri")))]) + (match_operand:HI 1 "register_operand" "0,0,0")])) + (set (match_operand:SI 4 "register_operand" "=*2,r,r") + (plus:SI (match_dup 2) + (match_dup 3)))] + "(GET_CODE (operands[6]) != UMIN || GET_CODE (operands[5]) == ZERO_EXTEND) + && cris_side_effect_mode_ok (PLUS, operands, 4, 2, 3, -1, 0)" + "* + { + if (which_alternative == 0 + && (GET_CODE (operands[3]) != CONST_INT + || INTVAL (operands[3]) > 127 + || INTVAL (operands[3]) < -128 + || CONST_OK_FOR_LETTER_P (INTVAL (operands[3]), 'N') + || CONST_OK_FOR_LETTER_P (INTVAL (operands[3]), 'J'))) + return \"#\"; + return \"%x6%e5.%m5 [%4=%2%S3],%0\"; + }") + + ;; QImode to SImode + + (define_insn "*extopqisi_swap_side" + [(set (match_operand:SI 0 "register_operand" "=r,r,r") + (match_operator:SI + 6 "cris_plus_or_bound_operator" + [(match_operator:SI + 5 "cris_extend_operator" + [(mem:QI (plus:SI + (match_operand:SI 2 "cris_bdap_operand" "%r,r,r") + (match_operand:SI 3 "cris_bdap_operand" "r>Ri,r,>Ri")))]) + (match_operand:SI 1 "register_operand" "0,0,0")])) + (set (match_operand:SI 4 "register_operand" "=*2,r,r") + (plus:SI (match_dup 2) + (match_dup 3)))] + "(GET_CODE (operands[6]) != UMIN || GET_CODE (operands[5]) == ZERO_EXTEND) + && cris_side_effect_mode_ok (PLUS, operands, 4, 2, 3, -1, 0)" + "* + { + if (which_alternative == 0 + && (GET_CODE (operands[3]) != CONST_INT + || INTVAL (operands[3]) > 127 + || INTVAL (operands[3]) < -128 + || CONST_OK_FOR_LETTER_P (INTVAL (operands[3]), 'N') + || CONST_OK_FOR_LETTER_P (INTVAL (operands[3]), 'J'))) + return \"#\"; + return \"%x6%e5.%m5 [%4=%2%S3],%0\"; + }") + + ;; HImode to SImode + + (define_insn "*extophisi_swap_side" + [(set (match_operand:SI 0 "register_operand" "=r,r,r") + (match_operator:SI + 6 "cris_plus_or_bound_operator" + [(match_operator:SI + 5 "cris_extend_operator" + [(mem:HI (plus:SI + (match_operand:SI 2 "cris_bdap_operand" "%r,r,r") + (match_operand:SI 3 "cris_bdap_operand" "r>Ri,r,>Ri")))]) + (match_operand:SI 1 "register_operand" "0,0,0")])) + (set (match_operand:SI 4 "register_operand" "=*2,r,r") + (plus:SI (match_dup 2) + (match_dup 3)))] + "(GET_CODE (operands[6]) != UMIN || GET_CODE (operands[5]) == ZERO_EXTEND) + && cris_side_effect_mode_ok (PLUS, operands, 4, 2, 3, -1, 0)" + "* + { + if (which_alternative == 0 + && (GET_CODE (operands[3]) != CONST_INT + || INTVAL (operands[3]) > 127 + || INTVAL (operands[3]) < -128 + || CONST_OK_FOR_LETTER_P (INTVAL (operands[3]), 'N') + || CONST_OK_FOR_LETTER_P (INTVAL (operands[3]), 'J'))) + return \"#\"; + return \"%x6%e5.%m5 [%4=%2%S3],%0\"; + }") + + ;; Extend versions (zero/sign) of normal add/sub (no side-effects). + ;; FIXME: These could have anonymous mode for operand 0. + + ;; QImode to HImode + ;; FIXME: GCC should widen. + + (define_insn "*extopqihi" + [(set (match_operand:HI 0 "register_operand" "=r,r,r,r") + (match_operator:HI + 3 "cris_operand_extend_operator" + [(match_operand:HI 1 "register_operand" "0,0,0,r") + (match_operator:HI + 4 "cris_extend_operator" + [(match_operand:QI 2 "nonimmediate_operand" "r,Q>,m,!To")])]))] + "(GET_CODE (operands[3]) != UMIN || GET_CODE (operands[4]) == ZERO_EXTEND) + && GET_MODE_SIZE (GET_MODE (operands[0])) <= UNITS_PER_WORD + && (operands[1] != frame_pointer_rtx || GET_CODE (operands[3]) != PLUS)" + "@ + %x3%e4.%m4 %2,%0 + %x3%e4.%m4 %2,%0 + %x3%e4.%m4 %2,%0 + %x3%e4.%m4 %2,%1,%0" + [(set_attr "slottable" "yes,yes,no,no") + (set_attr "cc" "clobber")]) + + ;; QImode to SImode + + (define_insn "*extopqisi" + [(set (match_operand:SI 0 "register_operand" "=r,r,r,r") + (match_operator:SI + 3 "cris_operand_extend_operator" + [(match_operand:SI 1 "register_operand" "0,0,0,r") + (match_operator:SI + 4 "cris_extend_operator" + [(match_operand:QI 2 "nonimmediate_operand" "r,Q>,m,!To")])]))] + "(GET_CODE (operands[3]) != UMIN || GET_CODE (operands[4]) == ZERO_EXTEND) + && GET_MODE_SIZE (GET_MODE (operands[0])) <= UNITS_PER_WORD + && (operands[1] != frame_pointer_rtx || GET_CODE (operands[3]) != PLUS)" + "@ + %x3%e4.%m4 %2,%0 + %x3%e4.%m4 %2,%0 + %x3%e4.%m4 %2,%0 + %x3%e4.%m4 %2,%1,%0" + [(set_attr "slottable" "yes,yes,no,no")]) + + ;; HImode to SImode + + (define_insn "*extophisi" + [(set (match_operand:SI 0 "register_operand" "=r,r,r,r") + (match_operator:SI + 3 "cris_operand_extend_operator" + [(match_operand:SI 1 "register_operand" "0,0,0,r") + (match_operator:SI + 4 "cris_extend_operator" + [(match_operand:HI 2 "nonimmediate_operand" "r,Q>,m,!To")])]))] + "(GET_CODE (operands[3]) != UMIN || GET_CODE (operands[4]) == ZERO_EXTEND) + && GET_MODE_SIZE (GET_MODE (operands[0])) <= UNITS_PER_WORD + && (operands[1] != frame_pointer_rtx || GET_CODE (operands[3]) != PLUS)" + "@ + %x3%e4.%m4 %2,%0 + %x3%e4.%m4 %2,%0 + %x3%e4.%m4 %2,%0 + %x3%e4.%m4 %2,%1,%0" + [(set_attr "slottable" "yes,yes,no,no")]) + + + ;; As with the side-effect patterns, may have to have swapped operands for add. + ;; FIXME: *should* be redundant to gcc. + + ;; QImode to HImode + + (define_insn "*extopqihi_swap" + [(set (match_operand:HI 0 "register_operand" "=r,r,r,r") + (match_operator:HI + 4 "cris_plus_or_bound_operator" + [(match_operator:HI + 3 "cris_extend_operator" + [(match_operand:QI 2 "nonimmediate_operand" "r,Q>,m,!To")]) + (match_operand:HI 1 "register_operand" "0,0,0,r")]))] + "(GET_CODE (operands[3]) != UMIN || GET_CODE (operands[4]) == ZERO_EXTEND) + && GET_MODE_SIZE (GET_MODE (operands[0])) <= UNITS_PER_WORD + && operands[1] != frame_pointer_rtx" + "@ + %x4%e3.%m3 %2,%0 + %x4%e3.%m3 %2,%0 + %x4%e3.%m3 %2,%0 + %x4%e3.%m3 %2,%1,%0" + [(set_attr "slottable" "yes,yes,no,no") + (set_attr "cc" "clobber")]) + + ;; QImode to SImode + + (define_insn "*extopqisi_swap" + [(set (match_operand:SI 0 "register_operand" "=r,r,r,r") + (match_operator:SI + 4 "cris_plus_or_bound_operator" + [(match_operator:SI + 3 "cris_extend_operator" + [(match_operand:QI 2 "nonimmediate_operand" "r,Q>,m,!To")]) + (match_operand:SI 1 "register_operand" "0,0,0,r")]))] + "(GET_CODE (operands[3]) != UMIN || GET_CODE (operands[4]) == ZERO_EXTEND) + && GET_MODE_SIZE (GET_MODE (operands[0])) <= UNITS_PER_WORD + && operands[1] != frame_pointer_rtx" + "@ + %x4%e3.%m3 %2,%0 + %x4%e3.%m3 %2,%0 + %x4%e3.%m3 %2,%0 + %x4%e3.%m3 %2,%1,%0" + [(set_attr "slottable" "yes,yes,no,no")]) + + ;; HImode to SImode + + (define_insn "*extophisi_swap" + [(set (match_operand:SI 0 "register_operand" "=r,r,r,r") + (match_operator:SI + 4 "cris_plus_or_bound_operator" + [(match_operator:SI + 3 "cris_extend_operator" + [(match_operand:HI 2 "nonimmediate_operand" "r,Q>,m,!To")]) + (match_operand:SI 1 "register_operand" "0,0,0,r")]))] + "(GET_CODE (operands[3]) != UMIN || GET_CODE (operands[4]) == ZERO_EXTEND) + && GET_MODE_SIZE (GET_MODE (operands[0])) <= UNITS_PER_WORD + && operands[1] != frame_pointer_rtx" + "@ + %x4%e3.%m3 %2,%0 + %x4%e3.%m3 %2,%0 + %x4%e3.%m3 %2,%0 + %x4%e3.%m3 %2,%1,%0" + [(set_attr "slottable" "yes,yes,no,no")]) + + ;; This is the special case when we use what corresponds to the + ;; instruction above in "casesi". Do *not* change it to use the generic + ;; pattern and "REG 15" as pc; I did that and it led to madness and + ;; maintenance problems: Instead of (as imagined) recognizing and removing + ;; or replacing this pattern with something simpler, other variant + ;; patterns were recognized or combined, including some prefix variants + ;; where the value in pc is not that of the next instruction (which means + ;; this instruction actually *is* special and *should* be marked as such). + ;; When switching from the "generic pattern match" approach to this simpler + ;; approach, there were insignificant differences in gcc, ipps and + ;; product code, somehow due to scratching reload behind the ear or + ;; something. Testcase "gcc" looked .01% slower and 4 bytes bigger; + ;; product code became .001% smaller but "looked better". The testcase + ;; "ipps" was just different at register allocation). + ;; + ;; Assumptions in the jump optimizer forces us to use IF_THEN_ELSE in this + ;; pattern with the default-label as the else, with the "if" being + ;; index-is-less-than the max number of cases plus one. The default-label + ;; is attached to the end of the case-table at time of output. + + (define_insn "*casesi_adds_w" + [(set (pc) + (if_then_else + (ltu (match_operand:SI 0 "register_operand" "r") + (match_operand:SI 1 "const_int_operand" "n")) + (plus:SI (sign_extend:SI + (mem:HI + (plus:SI (mult:SI (match_dup 0) (const_int 2)) + (pc)))) + (pc)) + (label_ref (match_operand 2 "" "")))) + (use (label_ref (match_operand 3 "" "")))] + + "operands[0] != frame_pointer_rtx" + + "adds.w [$pc+%0.w],$pc" + [(set_attr "cc" "clobber")]) + + ;; Multiply instructions. + + ;; Sometimes powers of 2 (which are normally canonicalized to a + ;; left-shift) appear here, as a result of address reloading. + ;; As a special, for values 3 and 5, we can match with an addi, so add those. + ;; + ;; FIXME: This may be unnecessary now. + ;; Explicitly named for convenience of having a gen_... function. + + (define_insn "addi_mul" + [(set (match_operand:SI 0 "register_operand" "=r") + (mult:SI + (match_operand:SI 1 "register_operand" "%0") + (match_operand:SI 2 "const_int_operand" "n")))] + "operands[0] != frame_pointer_rtx + && operands[1] != frame_pointer_rtx + && GET_CODE (operands[2]) == CONST_INT + && (INTVAL (operands[2]) == 2 + || INTVAL (operands[2]) == 4 || INTVAL (operands[2]) == 3 + || INTVAL (operands[2]) == 5)" + "* + { + if (INTVAL (operands[2]) == 2) + return \"lslq 1,%0\"; + else if (INTVAL (operands[2]) == 4) + return \"lslq 2,%0\"; + else if (INTVAL (operands[2]) == 3) + return \"addi %0.w,%0\"; + else if (INTVAL (operands[2]) == 5) + return \"addi %0.d,%0\"; + return \"BAD: adr_mulsi: %0=%1*%2\"; + }" + [(set_attr "slottable" "yes") + ;; No flags are changed if this insn is "addi", but it does not seem + ;; worth the trouble to distinguish that to the lslq cases. + (set_attr "cc" "clobber")]) + + ;; The addi insn as it is normally used. + + (define_insn "*addi" + [(set (match_operand:SI 0 "register_operand" "=r") + (plus:SI + (mult:SI (match_operand:SI 2 "register_operand" "r") + (match_operand:SI 3 "const_int_operand" "n")) + (match_operand:SI 1 "register_operand" "0")))] + "operands[0] != frame_pointer_rtx + && operands[1] != frame_pointer_rtx + && GET_CODE (operands[3]) == CONST_INT + && (INTVAL (operands[3]) == 1 + || INTVAL (operands[3]) == 2 || INTVAL (operands[3]) == 4)" + "addi %2%T3,%0" + [(set_attr "slottable" "yes") + (set_attr "cc" "none")]) + + ;; The mstep instruction. Probably not useful by itself; it's to + ;; non-linear wrt. the other insns. We used to expand to it, so at least + ;; it's correct. + + (define_insn "mstep_shift" + [(set (match_operand:SI 0 "register_operand" "=r") + (if_then_else:SI + (lt:SI (cc0) (const_int 0)) + (plus:SI (ashift:SI (match_operand:SI 1 "register_operand" "0") + (const_int 1)) + (match_operand:SI 2 "register_operand" "r")) + (ashift:SI (match_operand:SI 3 "register_operand" "0") + (const_int 1))))] + "" + "mstep %2,%0" + [(set_attr "slottable" "yes")]) + + ;; When illegitimate addresses are legitimized, sometimes gcc forgets + ;; to canonicalize the multiplications. + ;; + ;; FIXME: Check gcc > 2.7.2, remove and possibly fix in gcc. + + (define_insn "mstep_mul" + [(set (match_operand:SI 0 "register_operand" "=r") + (if_then_else:SI + (lt:SI (cc0) (const_int 0)) + (plus:SI (mult:SI (match_operand:SI 1 "register_operand" "0") + (const_int 2)) + (match_operand:SI 2 "register_operand" "r")) + (mult:SI (match_operand:SI 3 "register_operand" "0") + (const_int 2))))] + "operands[0] != frame_pointer_rtx + && operands[1] != frame_pointer_rtx + && operands[2] != frame_pointer_rtx + && operands[3] != frame_pointer_rtx" + "mstep %2,%0" + [(set_attr "slottable" "yes")]) + + (define_insn "umulhisi3" + [(set (match_operand:SI 0 "register_operand" "=r") + (mult:SI + (zero_extend:SI (match_operand:HI 1 "register_operand" "0")) + (zero_extend:SI (match_operand:HI 2 "register_operand" "r"))))] + "TARGET_HAS_MUL_INSNS" + "mulu.w %2,%0" + [(set_attr "slottable" "yes") + ;; Just N unusable here, but let's be safe. + (set_attr "cc" "clobber")]) + + (define_insn "umulqihi3" + [(set (match_operand:HI 0 "register_operand" "=r") + (mult:HI + (zero_extend:HI (match_operand:QI 1 "register_operand" "0")) + (zero_extend:HI (match_operand:QI 2 "register_operand" "r"))))] + "TARGET_HAS_MUL_INSNS" + "mulu.b %2,%0" + [(set_attr "slottable" "yes") + ;; Not exactly sure, but let's be safe. + (set_attr "cc" "clobber")]) + + ;; Note that gcc does not make use of such a thing as umulqisi3. It gets + ;; confused and will erroneously use it instead of umulhisi3, failing (at + ;; least) gcc.c-torture/execute/arith-rand.c at all optimization levels. + ;; Inspection of optab code shows that there must be only one widening + ;; multiplication per mode widened to. + + (define_insn "mulsi3" + [(set (match_operand:SI 0 "register_operand" "=r") + (mult:SI (match_operand:SI 1 "register_operand" "0") + (match_operand:SI 2 "register_operand" "r")))] + "TARGET_HAS_MUL_INSNS" + "muls.d %2,%0" + [(set_attr "slottable" "yes") + ;; Just N unusable here, but let's be safe. + (set_attr "cc" "clobber")]) + + ;; A few multiply variations. + + ;; This really extends to SImode, so cc should be considered clobbered. + + (define_insn "mulqihi3" + [(set (match_operand:HI 0 "register_operand" "=r") + (mult:HI + (sign_extend:HI (match_operand:QI 1 "register_operand" "0")) + (sign_extend:HI (match_operand:QI 2 "register_operand" "r"))))] + "TARGET_HAS_MUL_INSNS" + "muls.b %2,%0" + [(set_attr "slottable" "yes") + (set_attr "cc" "clobber")]) + + (define_insn "mulhisi3" + [(set (match_operand:SI 0 "register_operand" "=r") + (mult:SI + (sign_extend:SI (match_operand:HI 1 "register_operand" "0")) + (sign_extend:SI (match_operand:HI 2 "register_operand" "r"))))] + "TARGET_HAS_MUL_INSNS" + "muls.w %2,%0" + [(set_attr "slottable" "yes") + ;; Just N unusable here, but let's be safe. + (set_attr "cc" "clobber")]) + + ;; When needed, we can get the high 32 bits from the overflow + ;; register. We don't care to split and optimize these. + ;; + ;; Note that cc0 is still valid after the move-from-overflow-register + ;; insn; no special precaution need to be taken in cris_notice_update_cc. + + (define_insn "mulsidi3" + [(set (match_operand:DI 0 "register_operand" "=r") + (mult:DI + (sign_extend:DI (match_operand:SI 1 "register_operand" "0")) + (sign_extend:DI (match_operand:SI 2 "register_operand" "r"))))] + "TARGET_HAS_MUL_INSNS" + "muls.d %2,%M0\;move $mof,%H0") + + (define_insn "umulsidi3" + [(set (match_operand:DI 0 "register_operand" "=r") + (mult:DI + (zero_extend:DI (match_operand:SI 1 "register_operand" "0")) + (zero_extend:DI (match_operand:SI 2 "register_operand" "r"))))] + "TARGET_HAS_MUL_INSNS" + "mulu.d %2,%M0\;move $mof,%H0") + + ;; This pattern would probably not be needed if we add "mof" in its own + ;; register class (and open a can of worms about /not/ pairing it with a + ;; "normal" register). Having multiple register classes here, and + ;; applicable to the v10 variant only, seems worse than having these two + ;; patterns with multi-insn contents for now (may change; having a free + ;; call-clobbered register is worth some trouble). + + (define_insn "smulsi3_highpart" + [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,m") + (truncate:SI + (lshiftrt:DI + (mult:DI + (sign_extend:DI (match_operand:SI 1 "register_operand" "%0,r,r")) + (sign_extend:DI (match_operand:SI 2 "register_operand" "r,r,r"))) + (const_int 32)))) + (clobber (match_scratch:SI 3 "=X,1,1"))] + "TARGET_HAS_MUL_INSNS" + "muls.d %2,%1\;move $mof,%0" + [(set_attr "cc" "clobber")]) + + (define_insn "umulsi3_highpart" + [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,m") + (truncate:SI + (lshiftrt:DI + (mult:DI + (zero_extend:DI (match_operand:SI 1 "register_operand" "%0,r,r")) + (zero_extend:DI (match_operand:SI 2 "register_operand" "r,r,r"))) + (const_int 32)))) + (clobber (match_scratch:SI 3 "=X,1,1"))] + "TARGET_HAS_MUL_INSNS" + "mulu.d %2,%1\;move $mof,%0" + [(set_attr "cc" "clobber")]) + + ;; Divide and modulus instructions. CRIS only has a step instruction. + + (define_insn "dstep_shift" + [(set (match_operand:SI 0 "register_operand" "=r") + (if_then_else:SI + (geu:SI (ashift:SI (match_operand:SI 1 "register_operand" "0") + (const_int 1)) + (match_operand:SI 2 "register_operand" "r")) + (minus:SI (ashift:SI (match_operand:SI 3 "register_operand" "0") + (const_int 1)) + (match_operand:SI 4 "register_operand" "2")) + (ashift:SI (match_operand:SI 5 "register_operand" "0") + (const_int 1))))] + "" + "dstep %2,%0" + [(set_attr "slottable" "yes")]) + + ;; Here's a variant with mult instead of ashift. + ;; + ;; FIXME: This should be investigated. Which one matches through combination? + + (define_insn "dstep_mul" + [(set (match_operand:SI 0 "register_operand" "=r") + (if_then_else:SI + (geu:SI (mult:SI (match_operand:SI 1 "register_operand" "0") + (const_int 2)) + (match_operand:SI 2 "register_operand" "r")) + (minus:SI (mult:SI (match_operand:SI 3 "register_operand" "0") + (const_int 2)) + (match_operand:SI 4 "register_operand" "2")) + (mult:SI (match_operand:SI 5 "register_operand" "0") + (const_int 2))))] + "operands[0] != frame_pointer_rtx + && operands[1] != frame_pointer_rtx + && operands[2] != frame_pointer_rtx + && operands[3] != frame_pointer_rtx" + "dstep %2,%0" + [(set_attr "slottable" "yes")]) + + ;; Logical operators. + + ;; Bitwise "and". + + ;; There is no use in defining "anddi3", because gcc can expand this by + ;; itself, and make reasonable code without interference. + + ;; If the first operand is memory or a register and is the same as the + ;; second operand, and the third operand is -256 or -65536, we can use + ;; CLEAR instead. Or, if the first operand is a register, and the third + ;; operand is 255 or 65535, we can zero_extend. + ;; GCC isn't smart enough to recognize these cases (yet), and they seem + ;; to be common enough to be worthwhile. + ;; FIXME: This should be made obsolete. + + (define_expand "andsi3" + [(set (match_operand:SI 0 "nonimmediate_operand" "") + (and:SI (match_operand:SI 1 "nonimmediate_operand" "") + (match_operand:SI 2 "general_operand" "")))] + "" + " + { + if (! (GET_CODE (operands[2]) == CONST_INT + && (((INTVAL (operands[2]) == -256 + || INTVAL (operands[2]) == -65536) + && rtx_equal_p (operands[1], operands[0])) + || ((INTVAL (operands[2]) == 255 + || INTVAL (operands[2]) == 65535) + && REG_P (operands[0]))))) + { + /* Make intermediate steps if operand0 is not a register or + operand1 is not a register, and hope that the reload pass will + make something useful out of it. Note that the operands are + *not* canonicalized. For the moment, I chicken out on this, + because all or most ports do not describe 'and' with + canonicalized operands, and I seem to remember magic in reload, + checking that operand1 has constraint '%0', in which case + operand0 and operand1 must have similar predicates. + FIXME: Investigate. */ + rtx reg0 = REG_P (operands[0]) ? operands[0] : gen_reg_rtx (SImode); + rtx reg1 = operands[1]; + + if (! REG_P (reg1)) + { + emit_move_insn (reg0, reg1); + reg1 = reg0; + } + + emit_insn (gen_rtx_SET (SImode, reg0, + gen_rtx_AND (SImode, reg1, operands[2]))); + + /* Make sure we get the right *final* destination. */ + if (! REG_P (operands[0])) + emit_move_insn (operands[0], reg0); + + DONE; + } + }") + + ;; Some special cases of andsi3. + + (define_insn "*andsi_movu" + [(set (match_operand:SI 0 "register_operand" "=r,r,r") + (and:SI (match_operand:SI 1 "nonimmediate_operand" "%r,Q>,m") + (match_operand:SI 2 "const_int_operand" "n,n,n")))] + "INTVAL (operands[2]) == 255 || INTVAL (operands[2]) == 65535" + "movu.%z2 %1,%0" + [(set_attr "slottable" "yes,yes,no")]) + + (define_insn "*andsi_clear" + [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,Q>,Q>,m,m") + (and:SI (match_operand:SI 1 "nonimmediate_operand" "%0,0,0,0,0,0") + (match_operand:SI 2 "const_int_operand" "P,n,P,n,P,n")))] + "INTVAL (operands[2]) == -65536 || INTVAL (operands[2]) == -256" + "@ + cLear.b %0 + cLear.w %0 + cLear.b %0 + cLear.w %0 + cLear.b %0 + cLear.w %0" + [(set_attr "slottable" "yes,yes,yes,yes,no,no") + (set_attr "cc" "none")]) + + ;; This is a catch-all pattern, taking care of everything that was not + ;; matched in the insns above. + ;; + ;; Sidenote: the tightening from "nonimmediate_operand" to + ;; "register_operand" for operand 1 actually increased the register + ;; pressure (worse code). That will hopefully change with an + ;; improved reload pass. + + (define_insn "*expanded_andsi" + [(set (match_operand:SI 0 "register_operand" "=r,r,r,r,r") + (and:SI (match_operand:SI 1 "register_operand" "%0,0,0,0,r") + (match_operand:SI 2 "general_operand" "I,r,Q>,g,!To")))] + "" + "@ + andq %2,%0 + and.d %2,%0 + and.d %2,%0 + and.d %2,%0 + and.d %2,%1,%0" + [(set_attr "slottable" "yes,yes,yes,no,no")]) + + ;; For both QI and HI we may use the quick patterns. This results in + ;; useless condition codes, but that is used rarely enough for it to + ;; normally be a win (could check ahead for use of cc0, but seems to be + ;; more pain than win). + + ;; FIXME: See note for andsi3 + + (define_expand "andhi3" + [(set (match_operand:HI 0 "nonimmediate_operand" "") + (and:HI (match_operand:HI 1 "nonimmediate_operand" "") + (match_operand:HI 2 "general_operand" "")))] + "" + " + { + if (! (GET_CODE (operands[2]) == CONST_INT + && (((INTVAL (operands[2]) == -256 + || INTVAL (operands[2]) == 65280) + && rtx_equal_p (operands[1], operands[0])) + || (INTVAL (operands[2]) == 255 + && REG_P (operands[0]))))) + { + /* See comment for andsi3. */ + rtx reg0 = REG_P (operands[0]) ? operands[0] : gen_reg_rtx (HImode); + rtx reg1 = operands[1]; + + if (! REG_P (reg1)) + { + emit_move_insn (reg0, reg1); + reg1 = reg0; + } + + emit_insn (gen_rtx_SET (HImode, reg0, + gen_rtx_AND (HImode, reg1, operands[2]))); + + /* Make sure we get the right destination. */ + if (! REG_P (operands[0])) + emit_move_insn (operands[0], reg0); + + DONE; + } + }") + + ;; Some fast andhi3 special cases. + + (define_insn "*andhi_movu" + [(set (match_operand:HI 0 "register_operand" "=r,r,r") + (and:HI (match_operand:HI 1 "nonimmediate_operand" "r,Q>,m") + (const_int 255)))] + "" + "mOvu.b %1,%0" + [(set_attr "slottable" "yes,yes,no")]) + + (define_insn "*andhi_clear_signed" + [(set (match_operand:HI 0 "nonimmediate_operand" "=r,Q>,m") + (and:HI (match_operand:HI 1 "nonimmediate_operand" "0,0,0") + (const_int -256)))] + "" + "cLear.b %0" + [(set_attr "slottable" "yes,yes,no") + (set_attr "cc" "none")]) + + ;; FIXME: Either this or the pattern above should be redundant. + (define_insn "*andhi_clear_unsigned" + [(set (match_operand:HI 0 "nonimmediate_operand" "=r,Q>,m") + (and:HI (match_operand:HI 1 "nonimmediate_operand" "0,0,0") + (const_int 65280)))] + "" + "cLear.b %0" + [(set_attr "slottable" "yes,yes,no") + (set_attr "cc" "none")]) + + ;; Catch-all andhi3 pattern. + + (define_insn "*expanded_andhi" + [(set (match_operand:HI 0 "register_operand" "=r,r,r,r,r,r,r") + (and:HI (match_operand:HI 1 "register_operand" "%0,0,0,0,0,0,r") + (match_operand:HI 2 "general_operand" "I,r,Q>,L,O,g,!To")))] + + ;; Sidenote: the tightening from "general_operand" to + ;; "register_operand" for operand 1 actually increased the register + ;; pressure (worse code). That will hopefully change with an + ;; improved reload pass. + + "" + "@ + andq %2,%0 + and.w %2,%0 + and.w %2,%0 + and.w %2,%0 + anDq %b2,%0 + and.w %2,%0 + and.w %2,%1,%0" + [(set_attr "slottable" "yes,yes,yes,no,yes,no,no") + (set_attr "cc" "clobber,normal,normal,normal,clobber,normal,normal")]) + + ;; A strict_low_part pattern. + + (define_insn "*andhi_lowpart" + [(set (strict_low_part + (match_operand:HI 0 "register_operand" "=r,r,r,r,r,r")) + (and:HI (match_operand:HI 1 "register_operand" "%0,0,0,0,0,r") + (match_operand:HI 2 "general_operand" "r,Q>,L,O,g,!To")))] + "" + "@ + and.w %2,%0 + and.w %2,%0 + and.w %2,%0 + anDq %b2,%0 + and.w %2,%0 + and.w %2,%1,%0" + [(set_attr "slottable" "yes,yes,no,yes,no,no") + (set_attr "cc" "normal,normal,normal,clobber,normal,normal")]) + + (define_insn "andqi3" + [(set (match_operand:QI 0 "register_operand" "=r,r,r,r,r,r") + (and:QI (match_operand:QI 1 "register_operand" "%0,0,0,0,0,r") + (match_operand:QI 2 "general_operand" "I,r,Q>,O,g,!To")))] + "" + "@ + andq %2,%0 + and.b %2,%0 + and.b %2,%0 + andQ %b2,%0 + and.b %2,%0 + and.b %2,%1,%0" + [(set_attr "slottable" "yes,yes,yes,yes,no,no") + (set_attr "cc" "clobber,normal,normal,clobber,normal,normal")]) + + (define_insn "*andqi_lowpart" + [(set (strict_low_part + (match_operand:QI 0 "register_operand" "=r,r,r,r,r")) + (and:QI (match_operand:QI 1 "register_operand" "%0,0,0,0,r") + (match_operand:QI 2 "general_operand" "r,Q>,O,g,!To")))] + "" + "@ + and.b %2,%0 + and.b %2,%0 + andQ %b2,%0 + and.b %2,%0 + and.b %2,%1,%0" + [(set_attr "slottable" "yes,yes,yes,no,no") + (set_attr "cc" "normal,normal,clobber,normal,normal")]) + + ;; Bitwise or. + + ;; Same comment as anddi3 applies here - no need for such a pattern. + + ;; It seems there's no need to jump through hoops to get good code such as + ;; with andsi3. + + (define_insn "iorsi3" + [(set (match_operand:SI 0 "register_operand" "=r,r,r,r,r,r") + (ior:SI (match_operand:SI 1 "register_operand" "%0,0,0,0,0,r") + (match_operand:SI 2 "general_operand" "I,r,Q>,n,g,!To")))] + "" + "@ + orq %2,%0 + or.d %2,%0 + or.d %2,%0 + oR.%s2 %2,%0 + or.d %2,%0 + or.d %2,%1,%0" + [(set_attr "slottable" "yes,yes,yes,no,no,no") + (set_attr "cc" "normal,normal,normal,clobber,normal,normal")]) + + (define_insn "iorhi3" + [(set (match_operand:HI 0 "register_operand" "=r,r,r,r,r,r,r") + (ior:HI (match_operand:HI 1 "register_operand" "%0,0,0,0,0,0,r") + (match_operand:HI 2 "general_operand" "I,r,Q>,L,O,g,!To")))] + "" + "@ + orq %2,%0 + or.w %2,%0 + or.w %2,%0 + or.w %2,%0 + oRq %b2,%0 + or.w %2,%0 + or.w %2,%1,%0" + [(set_attr "slottable" "yes,yes,yes,no,yes,no,no") + (set_attr "cc" "clobber,normal,normal,normal,clobber,normal,normal")]) + + (define_insn "iorqi3" + [(set (match_operand:QI 0 "register_operand" "=r,r,r,r,r,r") + (ior:QI (match_operand:QI 1 "register_operand" "%0,0,0,0,0,r") + (match_operand:QI 2 "general_operand" "I,r,Q>,O,g,!To")))] + "" + "@ + orq %2,%0 + or.b %2,%0 + or.b %2,%0 + orQ %b2,%0 + or.b %2,%0 + or.b %2,%1,%0" + [(set_attr "slottable" "yes,yes,yes,yes,no,no") + (set_attr "cc" "clobber,normal,normal,clobber,normal,normal")]) + + ;; Exclusive-or + + ;; See comment about "anddi3" for xordi3 - no need for such a pattern. + + (define_insn "xorsi3" + [(set (match_operand:SI 0 "register_operand" "=r") + (xor:SI (match_operand:SI 1 "register_operand" "%0") + (match_operand:SI 2 "register_operand" "r")))] + "" + "xor %2,%0" + [(set_attr "slottable" "yes")]) + + (define_insn "xorhi3" + [(set (match_operand:HI 0 "register_operand" "=r") + (xor:HI (match_operand:HI 1 "register_operand" "%0") + (match_operand:HI 2 "register_operand" "r")))] + "" + "xor %2,%0" + [(set_attr "slottable" "yes") + (set_attr "cc" "clobber")]) + + (define_insn "xorqi3" + [(set (match_operand:QI 0 "register_operand" "=r") + (xor:QI (match_operand:QI 1 "register_operand" "%0") + (match_operand:QI 2 "register_operand" "r")))] + "" + "xor %2,%0" + [(set_attr "slottable" "yes") + (set_attr "cc" "clobber")]) + + ;; Negation insns. + + ;; Questionable use, here mostly as a (slightly usable) define_expand + ;; example. + + (define_expand "negsf2" + [(set (match_dup 2) + (match_dup 3)) + (parallel [(set (match_operand:SF 0 "register_operand" "=r") + (neg:SF (match_operand:SF 1 + "register_operand" "0"))) + (use (match_dup 2))])] + "" + " + { + operands[2] = gen_reg_rtx (SImode); + operands[3] = GEN_INT (1 << 31); + }") + + (define_insn "*expanded_negsf2" + [(set (match_operand:SF 0 "register_operand" "=r") + (neg:SF (match_operand:SF 1 "register_operand" "0"))) + (use (match_operand:SI 2 "register_operand" "r"))] + "" + "xor %2,%0" + [(set_attr "slottable" "yes")]) + + ;; No "negdi2" although we could make one up that may be faster than + ;; the one in libgcc. + + (define_insn "negsi2" + [(set (match_operand:SI 0 "register_operand" "=r") + (neg:SI (match_operand:SI 1 "register_operand" "r")))] + "" + "neg.d %1,%0" + [(set_attr "slottable" "yes")]) + + (define_insn "neghi2" + [(set (match_operand:HI 0 "register_operand" "=r") + (neg:HI (match_operand:HI 1 "register_operand" "r")))] + "" + "neg.w %1,%0" + [(set_attr "slottable" "yes")]) + + (define_insn "negqi2" + [(set (match_operand:QI 0 "register_operand" "=r") + (neg:QI (match_operand:QI 1 "register_operand" "r")))] + "" + "neg.b %1,%0" + [(set_attr "slottable" "yes")]) + + ;; One-complements. + + ;; See comment on anddi3 - no need for a DImode pattern. + + (define_insn "one_cmplsi2" + [(set (match_operand:SI 0 "register_operand" "=r") + (not:SI (match_operand:SI 1 "register_operand" "0")))] + "" + "not %0" + [(set_attr "slottable" "yes")]) + + (define_insn "one_cmplhi2" + [(set (match_operand:HI 0 "register_operand" "=r") + (not:HI (match_operand:HI 1 "register_operand" "0")))] + "" + "not %0" + [(set_attr "slottable" "yes") + (set_attr "cc" "clobber")]) + + (define_insn "one_cmplqi2" + [(set (match_operand:QI 0 "register_operand" "=r") + (not:QI (match_operand:QI 1 "register_operand" "0")))] + "" + "not %0" + [(set_attr "slottable" "yes") + (set_attr "cc" "clobber")]) + + ;; Arithmetic shift right. + + (define_insn "ashrsi3" + [(set (match_operand:SI 0 "register_operand" "=r") + (ashiftrt:SI (match_operand:SI 1 "register_operand" "0") + (match_operand:SI 2 "nonmemory_operand" "Kr")))] + "" + "* + { + if (REG_S_P (operands[2])) + return \"asr.d %2,%0\"; + + return \"asrq %2,%0\"; + }" + [(set_attr "slottable" "yes")]) + + ;; Since gcc gets lost, and forgets to zero-extend the source (or mask + ;; the destination) when it changes shifts of lower modes into SImode, + ;; it is better to make these expands an anonymous patterns instead of + ;; the more correct define_insns. This occurs when gcc thinks that is + ;; is better to widen to SImode and use immediate shift count. + + ;; FIXME: Is this legacy or still true for gcc >= 2.7.2? + + (define_expand "ashrhi3" + [(set (match_dup 3) + (sign_extend:SI (match_operand:HI 1 "nonimmediate_operand" "rm"))) + (set (match_dup 4) + (zero_extend:SI (match_operand:HI 2 "nonimmediate_operand" "rm"))) + (set (match_dup 5) (ashiftrt:SI (match_dup 3) (match_dup 4))) + (set (match_operand:HI 0 "general_operand" "=g") + (subreg:HI (match_dup 5) 0))] + "" + " + { + int i; + + for (i = 3; i < 6; i++) + operands[i] = gen_reg_rtx (SImode); + }") + + (define_insn "*expanded_ashrhi" + [(set (match_operand:HI 0 "register_operand" "=r") + (ashiftrt:HI (match_operand:HI 1 "register_operand" "0") + (match_operand:HI 2 "register_operand" "r")))] + "" + "asr.w %2,%0" + [(set_attr "slottable" "yes")]) + + (define_insn "*ashrhi_lowpart" + [(set (strict_low_part (match_operand:HI 0 "register_operand" "+r")) + (ashiftrt:HI (match_dup 0) + (match_operand:HI 1 "register_operand" "r")))] + "" + "asr.w %1,%0" + [(set_attr "slottable" "yes")]) + + ;; Same comment goes as for "ashrhi3". + + (define_expand "ashrqi3" + [(set (match_dup 3) + (sign_extend:SI (match_operand:QI 1 "nonimmediate_operand" "g"))) + (set (match_dup 4) + (zero_extend:SI (match_operand:QI 2 "nonimmediate_operand" "g"))) + (set (match_dup 5) (ashiftrt:SI (match_dup 3) (match_dup 4))) + (set (match_operand:QI 0 "general_operand" "=g") + (subreg:QI (match_dup 5) 0))] + "" + " + { + int i; + + for (i = 3; i < 6; i++) + operands[i] = gen_reg_rtx (SImode); + }") + + (define_insn "*expanded_ashrqi" + [(set (match_operand:QI 0 "register_operand" "=r") + (ashiftrt:QI (match_operand:QI 1 "register_operand" "0") + (match_operand:QI 2 "register_operand" "r")))] + "" + "asr.b %2,%0" + [(set_attr "slottable" "yes")]) + + ;; A strict_low_part matcher. + + (define_insn "*ashrqi_lowpart" + [(set (strict_low_part (match_operand:QI 0 "register_operand" "+r")) + (ashiftrt:QI (match_dup 0) + (match_operand:QI 1 "register_operand" "r")))] + "" + "asr.b %1,%0" + [(set_attr "slottable" "yes")]) + + ;; Logical shift right. + + (define_insn "lshrsi3" + [(set (match_operand:SI 0 "register_operand" "=r") + (lshiftrt:SI (match_operand:SI 1 "register_operand" "0") + (match_operand:SI 2 "nonmemory_operand" "Kr")))] + "" + "* + { + if (REG_S_P (operands[2])) + return \"lsr.d %2,%0\"; + + return \"lsrq %2,%0\"; + }" + [(set_attr "slottable" "yes")]) + + ;; Same comments as for ashrhi3. + + (define_expand "lshrhi3" + [(set (match_dup 3) + (zero_extend:SI (match_operand:HI 1 "nonimmediate_operand" "g"))) + (set (match_dup 4) + (zero_extend:SI (match_operand:HI 2 "nonimmediate_operand" "g"))) + (set (match_dup 5) (lshiftrt:SI (match_dup 3) (match_dup 4))) + (set (match_operand:HI 0 "general_operand" "=g") + (subreg:HI (match_dup 5) 0))] + "" + " + { + int i; + + for (i = 3; i < 6; i++) + operands[i] = gen_reg_rtx (SImode); + }") + + (define_insn "*expanded_lshrhi" + [(set (match_operand:HI 0 "register_operand" "=r") + (lshiftrt:HI (match_operand:HI 1 "register_operand" "0") + (match_operand:HI 2 "register_operand" "r")))] + "" + "lsr.w %2,%0" + [(set_attr "slottable" "yes")]) + + ;; A strict_low_part matcher. + + (define_insn "*lshrhi_lowpart" + [(set (strict_low_part (match_operand:HI 0 "register_operand" "+r")) + (lshiftrt:HI (match_dup 0) + (match_operand:HI 1 "register_operand" "r")))] + "" + "lsr.w %1,%0" + [(set_attr "slottable" "yes")]) + + ;; Same comments as for ashrhi3. + + (define_expand "lshrqi3" + [(set (match_dup 3) + (zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "g"))) + (set (match_dup 4) + (zero_extend:SI (match_operand:QI 2 "nonimmediate_operand" "g"))) + (set (match_dup 5) (lshiftrt:SI (match_dup 3) (match_dup 4))) + (set (match_operand:QI 0 "general_operand" "=g") + (subreg:QI (match_dup 5) 0))] + "" + " + { + int i; + + for (i = 3; i < 6; i++) + operands[i] = gen_reg_rtx (SImode); + }") + + (define_insn "*expanded_lshrqi" + [(set (match_operand:QI 0 "register_operand" "=r") + (lshiftrt:QI (match_operand:QI 1 "register_operand" "0") + (match_operand:QI 2 "register_operand" "r")))] + "" + "lsr.b %2,%0" + [(set_attr "slottable" "yes")]) + + ;; A strict_low_part matcher. + + (define_insn "*lshrqi_lowpart" + [(set (strict_low_part (match_operand:QI 0 "register_operand" "+r")) + (lshiftrt:QI (match_dup 0) + (match_operand:QI 1 "register_operand" "r")))] + "" + "lsr.b %1,%0" + [(set_attr "slottable" "yes")]) + + ;; Arithmetic/logical shift left. + + (define_insn "ashlsi3" + [(set (match_operand:SI 0 "register_operand" "=r") + (ashift:SI (match_operand:SI 1 "register_operand" "0") + (match_operand:SI 2 "nonmemory_operand" "Kr")))] + "" + "* + { + if (REG_S_P (operands[2])) + return \"lsl.d %2,%0\"; + + return \"lslq %2,%0\"; + }" + [(set_attr "slottable" "yes")]) + + ;; For narrower modes than SI, we can use lslq although it makes cc + ;; unusable. The win is that we do not have to reload the shift-count + ;; into a register. + + (define_insn "ashlhi3" + [(set (match_operand:HI 0 "register_operand" "=r,r") + (ashift:HI (match_operand:HI 1 "register_operand" "0,0") + (match_operand:HI 2 "nonmemory_operand" "r,K")))] + "" + "* + { + return + (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) > 15) + ? \"moveq 0,%0\" + : (CONSTANT_P (operands[2]) + ? \"lslq %2,%0\" : \"lsl.w %2,%0\"); + }" + [(set_attr "slottable" "yes") + (set_attr "cc" "normal,clobber")]) + + ;; A strict_low_part matcher. + + (define_insn "*ashlhi_lowpart" + [(set (strict_low_part (match_operand:HI 0 "register_operand" "+r")) + (ashift:HI (match_dup 0) + (match_operand:HI 1 "register_operand" "r")))] + "" + "lsl.w %1,%0" + [(set_attr "slottable" "yes")]) + + (define_insn "ashlqi3" + [(set (match_operand:QI 0 "register_operand" "=r,r") + (ashift:QI (match_operand:QI 1 "register_operand" "0,0") + (match_operand:QI 2 "nonmemory_operand" "r,K")))] + "" + "* + { + return + (GET_CODE (operands[2]) == CONST_INT + && INTVAL (operands[2]) > 7) + ? \"moveq 0,%0\" + : (CONSTANT_P (operands[2]) + ? \"lslq %2,%0\" : \"lsl.b %2,%0\"); + }" + [(set_attr "slottable" "yes") + (set_attr "cc" "normal,clobber")]) + + ;; A strict_low_part matcher. + + (define_insn "*ashlqi_lowpart" + [(set (strict_low_part (match_operand:QI 0 "register_operand" "+r")) + (ashift:QI (match_dup 0) + (match_operand:QI 1 "register_operand" "r")))] + "" + "lsl.b %1,%0" + [(set_attr "slottable" "yes")]) + + ;; Various strange insns that gcc likes. + + ;; Fortunately, it is simple to construct an abssf (although it may not + ;; be very much used in practice). + + (define_insn "abssf2" + [(set (match_operand:SF 0 "register_operand" "=r") + (abs:SF (match_operand:SF 1 "register_operand" "0")))] + "" + "lslq 1,%0\;lsrq 1,%0") + + (define_insn "abssi2" + [(set (match_operand:SI 0 "register_operand" "=r") + (abs:SI (match_operand:SI 1 "register_operand" "r")))] + "" + "abs %1,%0" + [(set_attr "slottable" "yes")]) + + ;; FIXME: GCC should be able to do these expansions itself. + + (define_expand "abshi2" + [(set (match_dup 2) + (sign_extend:SI (match_operand:HI 1 "general_operand" "g"))) + (set (match_dup 3) (abs:SI (match_dup 2))) + (set (match_operand:HI 0 "register_operand" "=r") + (subreg:HI (match_dup 3) 0))] + "" + "operands[2] = gen_reg_rtx (SImode); operands[3] = gen_reg_rtx (SImode);") + + (define_expand "absqi2" + [(set (match_dup 2) + (sign_extend:SI (match_operand:QI 1 "general_operand" "g"))) + (set (match_dup 3) (abs:SI (match_dup 2))) + (set (match_operand:QI 0 "register_operand" "=r") + (subreg:QI (match_dup 3) 0))] + "" + "operands[2] = gen_reg_rtx (SImode); operands[3] = gen_reg_rtx (SImode);") + + ;; Bound-insn. Defined to be the same as an unsigned minimum, which is an + ;; operation supported by gcc. Used in casesi, but used now and then in + ;; normal code too. + + (define_insn "uminsi3" + [(set (match_operand:SI 0 "register_operand" "=r,r,r,r") + (umin:SI (match_operand:SI 1 "register_operand" "%0,0,0,r") + (match_operand:SI 2 "general_operand" "r,Q>,g,!STo")))] + "" + "* + { + if (GET_CODE (operands[2]) == CONST_INT) + { + if (INTVAL (operands[2]) < 256) + return \"bound.b %2,%0\"; + + if (INTVAL (operands[2]) < 65536) + return \"bound.w %2,%0\"; + } + else if (which_alternative == 3) + return \"bound.d %2,%1,%0\"; + + return \"bound.d %2,%0\"; + }" + [(set_attr "slottable" "yes,yes,no,no")]) + + ;; Jump and branch insns. + + (define_insn "jump" + [(set (pc) + (label_ref (match_operand 0 "" "")))] + "" + "ba %l0%#" + [(set_attr "slottable" "has_slot")]) + + ;; Testcase gcc.c-torture/compile/991213-3.c fails if we allow a constant + ;; here, since the insn is not recognized as an indirect jump by + ;; jmp_uses_reg_or_mem used by computed_jump_p. Perhaps it is a kludge to + ;; change from general_operand to nonimmediate_operand (at least the docs + ;; should be changed), but then again the pattern is called indirect_jump. + (define_insn "indirect_jump" + [(set (pc) (match_operand:SI 0 "nonimmediate_operand" "rm"))] + "" + "jump %0") + + ;; Return insn. Used whenever the epilogue is very simple; if it is only + ;; a single ret or jump [sp+] or a contiguous sequence of movem:able saved + ;; registers. No allocated stack space is allowed. + ;; Note that for this pattern, although named, it is ok to check the + ;; context of the insn in the test, not only compiler switches. + + (define_insn "return" + [(return)] + "cris_simple_epilogue ()" + "* + { + int i; + + /* Just needs to hold a 'movem [sp+],rN'. */ + char rd[sizeof (\"movem [$sp+],$r99\")]; + + *rd = 0; + + /* Start from the last call-saved register. We know that we have a + simple epilogue, so we just have to find the last register in the + movem sequence. */ + for (i = 8; i >= 0; i--) + if (regs_ever_live[i] + || (i == PIC_OFFSET_TABLE_REGNUM + && current_function_uses_pic_offset_table)) + break; + + if (i >= 0) + sprintf (rd, \"movem [$sp+],$%s\", reg_names [i]); + + if (regs_ever_live[CRIS_SRP_REGNUM]) + { + if (*rd) + output_asm_insn (rd, operands); + return \"jump [$sp+]\"; + } + + if (*rd) + { + output_asm_insn (\"reT\", operands); + output_asm_insn (rd, operands); + return \"\"; + } + + return \"ret%#\"; + }" + [(set (attr "slottable") + (if_then_else + (ne (symbol_ref "regs_ever_live[CRIS_SRP_REGNUM]") (const_int 0)) + (const_string "no") ; If jump then not slottable. + (if_then_else + (ne (symbol_ref + "(regs_ever_live[0] + || (flag_pic != 0 && regs_ever_live[1]) + || (PIC_OFFSET_TABLE_REGNUM == 0 + && cris_cfun_uses_pic_table ()))") + (const_int 0)) + (const_string "no") ; ret+movem [sp+],rx: slot already filled. + (const_string "has_slot")))) ; If ret then need to fill a slot. + (set_attr "cc" "none")]) + + ;; Conditional branches. + + ;; We suffer from the same overflow-bit-gets-in-the-way problem as + ;; e.g. m68k, so we have to check if overflow bit is set on all "signed" + ;; conditions. + + (define_insn "beq" + [(set (pc) + (if_then_else (eq (cc0) + (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] + "" + "beq %l0%#" + [(set_attr "slottable" "has_slot")]) + + (define_insn "bne" + [(set (pc) + (if_then_else (ne (cc0) + (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] + "" + "bne %l0%#" + [(set_attr "slottable" "has_slot")]) + + (define_insn "bgt" + [(set (pc) + (if_then_else (gt (cc0) + (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] + "" + "* + { + return + (cc_prev_status.flags & CC_NO_OVERFLOW) + ? 0 : \"bgt %l0%#\"; + }" + [(set_attr "slottable" "has_slot")]) + + (define_insn "bgtu" + [(set (pc) + (if_then_else (gtu (cc0) + (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] + "" + "bhi %l0%#" + [(set_attr "slottable" "has_slot")]) + + (define_insn "blt" + [(set (pc) + (if_then_else (lt (cc0) + (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] + "" + "* + { + return + (cc_prev_status.flags & CC_NO_OVERFLOW) + ? \"bmi %l0%#\" : \"blt %l0%#\"; + }" + [(set_attr "slottable" "has_slot")]) + + (define_insn "bltu" + [(set (pc) + (if_then_else (ltu (cc0) + (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] + "" + "blo %l0%#" + [(set_attr "slottable" "has_slot")]) + + (define_insn "bge" + [(set (pc) + (if_then_else (ge (cc0) + (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] + "" + "* + { + return + (cc_prev_status.flags & CC_NO_OVERFLOW) + ? \"bpl %l0%#\" : \"bge %l0%#\"; + }" + [(set_attr "slottable" "has_slot")]) + + (define_insn "bgeu" + [(set (pc) + (if_then_else (geu (cc0) + (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] + "" + "bhs %l0%#" + [(set_attr "slottable" "has_slot")]) + + (define_insn "ble" + [(set (pc) + (if_then_else (le (cc0) + (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] + "" + "* + { + return + (cc_prev_status.flags & CC_NO_OVERFLOW) + ? 0 : \"ble %l0%#\"; + }" + [(set_attr "slottable" "has_slot")]) + + (define_insn "bleu" + [(set (pc) + (if_then_else (leu (cc0) + (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] + "" + "bls %l0%#" + [(set_attr "slottable" "has_slot")]) + + ;; Reversed anonymous patterns to the ones above, as mandated. + + (define_insn "*beq_reversed" + [(set (pc) + (if_then_else (eq (cc0) + (const_int 0)) + (pc) + (label_ref (match_operand 0 "" ""))))] + "" + "bne %l0%#" + [(set_attr "slottable" "has_slot")]) + + (define_insn "*bne_reversed" + [(set (pc) + (if_then_else (ne (cc0) + (const_int 0)) + (pc) + (label_ref (match_operand 0 "" ""))))] + "" + "beq %l0%#" + [(set_attr "slottable" "has_slot")]) + + (define_insn "*bgt_reversed" + [(set (pc) + (if_then_else (gt (cc0) + (const_int 0)) + (pc) + (label_ref (match_operand 0 "" ""))))] + "" + "* + { + return + (cc_prev_status.flags & CC_NO_OVERFLOW) + ? 0 : \"ble %l0%#\"; + }" + [(set_attr "slottable" "has_slot")]) + + (define_insn "*bgtu_reversed" + [(set (pc) + (if_then_else (gtu (cc0) + (const_int 0)) + (pc) + (label_ref (match_operand 0 "" ""))))] + "" + "bls %l0%#" + [(set_attr "slottable" "has_slot")]) + + (define_insn "*blt_reversed" + [(set (pc) + (if_then_else (lt (cc0) + (const_int 0)) + (pc) + (label_ref (match_operand 0 "" ""))))] + "" + "* + { + return + (cc_prev_status.flags & CC_NO_OVERFLOW) + ? \"bpl %l0%#\" : \"bge %l0%#\"; + }" + [(set_attr "slottable" "has_slot")]) + + (define_insn "*bltu_reversed" + [(set (pc) + (if_then_else (ltu (cc0) + (const_int 0)) + (pc) + (label_ref (match_operand 0 "" ""))))] + "" + "bhs %l0%#" + [(set_attr "slottable" "has_slot")]) + + (define_insn "*bge_reversed" + [(set (pc) + (if_then_else (ge (cc0) + (const_int 0)) + (pc) + (label_ref (match_operand 0 "" ""))))] + "" + "* + { + return + (cc_prev_status.flags & CC_NO_OVERFLOW) + ? \"bmi %l0%#\" : \"blt %l0%#\"; + }" + [(set_attr "slottable" "has_slot")]) + + (define_insn "*bgeu_reversed" + [(set (pc) + (if_then_else (geu (cc0) + (const_int 0)) + (pc) + (label_ref (match_operand 0 "" ""))))] + "" + "blo %l0%#" + [(set_attr "slottable" "has_slot")]) + + (define_insn "*ble_reversed" + [(set (pc) + (if_then_else (le (cc0) + (const_int 0)) + (pc) + (label_ref (match_operand 0 "" ""))))] + "" + "* + { + return + (cc_prev_status.flags & CC_NO_OVERFLOW) + ? 0 : \"bgt %l0%#\"; + }" + [(set_attr "slottable" "has_slot")]) + + (define_insn "*bleu_reversed" + [(set (pc) + (if_then_else (leu (cc0) + (const_int 0)) + (pc) + (label_ref (match_operand 0 "" ""))))] + "" + "bhi %l0%#" + [(set_attr "slottable" "has_slot")]) + + ;; Set on condition: sCC. + + ;; Like bCC, we have to check the overflow bit for + ;; signed conditions. + + (define_insn "sgeu" + [(set (match_operand:SI 0 "register_operand" "=r") + (geu:SI (cc0) (const_int 0)))] + "" + "shs %0" + [(set_attr "slottable" "yes") + (set_attr "cc" "none")]) + + (define_insn "sltu" + [(set (match_operand:SI 0 "register_operand" "=r") + (ltu:SI (cc0) (const_int 0)))] + "" + "slo %0" + [(set_attr "slottable" "yes") + (set_attr "cc" "none")]) + + (define_insn "seq" + [(set (match_operand:SI 0 "register_operand" "=r") + (eq:SI (cc0) (const_int 0)))] + "" + "seq %0" + [(set_attr "slottable" "yes") + (set_attr "cc" "none")]) + + (define_insn "sge" + [(set (match_operand:SI 0 "register_operand" "=r") + (ge:SI (cc0) (const_int 0)))] + "" + "* + { + return + (cc_prev_status.flags & CC_NO_OVERFLOW) + ? \"spl %0\" : \"sge %0\"; + }" + [(set_attr "slottable" "yes") + (set_attr "cc" "none")]) + + (define_insn "sgt" + [(set (match_operand:SI 0 "register_operand" "=r") + (gt:SI (cc0) (const_int 0)))] + "" + "* + { + return + (cc_prev_status.flags & CC_NO_OVERFLOW) + ? 0 : \"sgt %0\"; + }" + [(set_attr "slottable" "yes") + (set_attr "cc" "none")]) + + (define_insn "sgtu" + [(set (match_operand:SI 0 "register_operand" "=r") + (gtu:SI (cc0) (const_int 0)))] + "" + "shi %0" + [(set_attr "slottable" "yes") + (set_attr "cc" "none")]) + + (define_insn "sle" + [(set (match_operand:SI 0 "register_operand" "=r") + (le:SI (cc0) (const_int 0)))] + "" + "* + { + return + (cc_prev_status.flags & CC_NO_OVERFLOW) + ? 0 : \"sle %0\"; + }" + [(set_attr "slottable" "yes") + (set_attr "cc" "none")]) + + (define_insn "sleu" + [(set (match_operand:SI 0 "register_operand" "=r") + (leu:SI (cc0) (const_int 0)))] + "" + "sls %0" + [(set_attr "slottable" "yes")]) + + (define_insn "slt" + [(set (match_operand:SI 0 "register_operand" "=r") + (lt:SI (cc0) (const_int 0)))] + "" + "* + { + return + (cc_prev_status.flags & CC_NO_OVERFLOW) + ? \"smi %0\" : \"slt %0\"; + }" + [(set_attr "slottable" "yes") + (set_attr "cc" "none")]) + + (define_insn "sne" + [(set (match_operand:SI 0 "register_operand" "=r") + (ne:SI (cc0) (const_int 0)))] + "" + "sne %0" + [(set_attr "slottable" "yes") + (set_attr "cc" "none")]) + + ;; Call insns. + + ;; We need to make these patterns "expand", since the real operand is + ;; hidden in a (mem:QI ) inside operand[0] (call_value: operand[1]), + ;; and cannot be checked if it were a "normal" pattern. + ;; Note that "call" and "call_value" are *always* called with a + ;; mem-operand for operand 0 and 1 respective. What happens for combined + ;; instructions is a different issue. + + (define_expand "call" + [(parallel [(call (match_operand:QI 0 "cris_mem_call_operand" "") + (match_operand 1 "general_operand" "")) + ;; 16 is the srp (can't use the symbolic name here) + (clobber (reg:SI 16))])] + "" + " + { + rtx op0; + + if (GET_CODE (operands[0]) != MEM) + abort (); + + if (flag_pic) + { + op0 = XEXP (operands[0], 0); + + /* It might be that code can be generated that jumps to 0 (or to a + specific address). Don't abort on that. At least there's a + test-case. */ + if (CONSTANT_ADDRESS_P (op0) && GET_CODE (op0) != CONST_INT) + { + if (no_new_pseudos) + abort (); + + /* For local symbols (non-PLT), get the plain symbol reference + into a register. For symbols that can be PLT, make them PLT. */ + if (cris_gotless_symbol (op0) || GET_CODE (op0) != SYMBOL_REF) + op0 = force_reg (Pmode, op0); + else if (cris_symbol (op0)) + /* FIXME: Would hanging a REG_EQUIV/EQUAL on that register + for the symbol cause bad recombinatorial effects? */ + op0 = force_reg (Pmode, + gen_rtx_CONST + (VOIDmode, + gen_rtx_UNSPEC (VOIDmode, + gen_rtvec (1, op0), 0))); + else + abort (); + + operands[0] = gen_rtx_MEM (GET_MODE (operands[0]), op0); + } + } + }") + + ;; Accept *anything* as operand 1. Accept operands for operand 0 in + ;; order of preference (Q includes r, but r is shorter, faster) + + (define_insn "*expanded_call" + [(call (mem:QI (match_operand:SI + 0 "cris_general_operand_or_plt_symbol" "r,Q>,g,S")) + (match_operand 1 "" "")) + (clobber (reg:SI 16))] ;; 16 is the srp (can't use symbolic name) + "! TARGET_AVOID_GOTPLT" + "jsr %0") + + ;; Same as above, since can't afford wasting a constraint letter to mean + ;; "S unless TARGET_AVOID_GOTPLT". + (define_insn "*expanded_call_no_gotplt" + [(call (mem:QI (match_operand:SI + 0 "cris_general_operand_or_plt_symbol" "r,Q>,g")) + (match_operand 1 "" "")) + (clobber (reg:SI 16))] ;; 16 is the srp (can't use symbolic name) + "TARGET_AVOID_GOTPLT" + "jsr %0") + + (define_expand "call_value" + [(parallel [(set (match_operand 0 "" "") + (call (match_operand:QI 1 "cris_mem_call_operand" "") + (match_operand 2 "" ""))) + ;; 16 is the srp (can't use symbolic name) + (clobber (reg:SI 16))])] + "" + " + { + rtx op1; + + if (GET_CODE (operands[1]) != MEM) + abort (); + + if (flag_pic) + { + op1 = XEXP (operands[1], 0); + + /* It might be that code can be generated that jumps to 0 (or to a + specific address). Don't abort on that. At least there's a + test-case. */ + if (CONSTANT_ADDRESS_P (op1) && GET_CODE (op1) != CONST_INT) + { + if (no_new_pseudos) + abort (); + + if (cris_gotless_symbol (op1)) + op1 = force_reg (Pmode, op1); + else if (cris_symbol (op1)) + /* FIXME: Would hanging a REG_EQUIV/EQUAL on that register + for the symbol cause bad recombinatorial effects? */ + op1 = force_reg (Pmode, + gen_rtx_CONST + (VOIDmode, + gen_rtx_UNSPEC (VOIDmode, + gen_rtvec (1, op1), 0))); + else + abort (); + + operands[1] = gen_rtx_MEM (GET_MODE (operands[1]), op1); + } + } + }") + + ;; Accept *anything* as operand 2. The validity other than "general" of + ;; operand 0 will be checked elsewhere. Accept operands for operand 1 in + ;; order of preference (Q includes r, but r is shorter, faster). + ;; We also accept a PLT symbol. We output it as [rPIC+sym:GOTPLT] rather + ;; than requiring getting rPIC + sym:PLT into a register. + + (define_insn "*expanded_call_value" + [(set (match_operand 0 "nonimmediate_operand" "=g,g,g,g") + (call (mem:QI (match_operand:SI + 1 "cris_general_operand_or_plt_symbol" "r,Q>,g,S")) + (match_operand 2 "" ""))) + (clobber (reg:SI 16))] + "! TARGET_AVOID_GOTPLT" + "Jsr %1" + [(set_attr "cc" "clobber")]) + + ;; Same as above, since can't afford wasting a constraint letter to mean + ;; "S unless TARGET_AVOID_GOTPLT". + (define_insn "*expanded_call_value_no_gotplt" + [(set (match_operand 0 "nonimmediate_operand" "=g,g,g") + (call (mem:QI (match_operand:SI + 1 "cris_general_operand_or_plt_symbol" "r,Q>,g")) + (match_operand 2 "" ""))) + (clobber (reg:SI 16))] + "TARGET_AVOID_GOTPLT" + "Jsr %1" + [(set_attr "cc" "clobber")]) + + ;; Used in debugging. No use for the direct pattern; unfilled + ;; delayed-branches are taken care of by other means. + + (define_insn "nop" + [(const_int 0)] + "" + "nop" + [(set_attr "cc" "none")]) + + ;; We expand on casesi so we can use "bound" and "add offset fetched from + ;; a table to pc" (adds.w [pc+%0.w],pc). + + ;; Note: if you change the "parallel" (or add anything after it) in + ;; this expansion, you must change the macro ASM_OUTPUT_CASE_END + ;; accordingly, to add the default case at the end of the jump-table. + + (define_expand "casesi" + [(set (match_dup 5) (match_operand:SI 0 "general_operand" "")) + (set (match_dup 6) + (minus:SI (match_dup 5) + (match_operand:SI 1 "const_int_operand" "n"))) + (set (match_dup 7) + (umin:SI (match_dup 6) + (match_operand:SI 2 "const_int_operand" "n"))) + (parallel + [(set (pc) + (if_then_else + (ltu (match_dup 7) (match_dup 2)) + (plus:SI (sign_extend:SI + (mem:HI + (plus:SI (mult:SI (match_dup 7) (const_int 2)) + (pc)))) + (pc)) + (label_ref (match_operand 4 "" "")))) + (use (label_ref (match_operand 3 "" "")))])] + "" + " + { + operands[2] = plus_constant (operands[2], 1); + operands[5] = gen_reg_rtx (SImode); + operands[6] = gen_reg_rtx (SImode); + operands[7] = gen_reg_rtx (SImode); + }") + + ;; Split-patterns. Some of them have modes unspecified. This + ;; should always be ok; if for no other reason sparc.md has it as + ;; well. + ;; + ;; When register_operand is specified for an operand, we can get a + ;; subreg as well (Axis-990331), so don't just assume that REG_P is true + ;; for a register_operand and that REGNO can be used as is. It is best to + ;; guard with REG_P, unless it is worth it to adjust for the subreg case. + + ;; op [rx + 0],ry,rz + ;; The index to rx is optimized into zero, and gone. + + ;; First, recognize bound [rx],ry,rz; where [rx] is zero-extended, + ;; and add/sub [rx],ry,rz, with zero or sign-extend on [rx]. + ;; Split this into: + ;; move ry,rz + ;; op [rx],rz + ;; Lose if rz=ry or rx=rz. + ;; Call this op-extend-split + + (define_split + [(set (match_operand 0 "register_operand" "") + (match_operator + 4 "cris_operand_extend_operator" + [(match_operand 1 "register_operand" "") + (match_operator + 3 "cris_extend_operator" + [(match_operand 2 "memory_operand" "")])]))] + "REG_P (operands[0]) + && REG_P (operands[1]) + && REGNO (operands[1]) != REGNO (operands[0]) + && GET_MODE_SIZE (GET_MODE (operands[0])) <= UNITS_PER_WORD + && REG_P (XEXP (operands[2], 0)) + && REGNO (XEXP (operands[2], 0)) != REGNO (operands[0])" + [(set (match_dup 0) + (match_dup 1)) + (set (match_dup 0) + (match_op_dup + 4 [(match_dup 0) + (match_op_dup 3 [(match_dup 2)])]))] + "") + + ;; As op-extend-split, but recognize and split op [rz],ry,rz into + ;; ext [rz],rz + ;; op ry,rz + ;; Do this for plus or bound only, being commutative operations, since we + ;; have swapped the operands. + ;; Call this op-extend-split-rx=rz + + (define_split + [(set (match_operand 0 "register_operand" "") + (match_operator + 4 "cris_plus_or_bound_operator" + [(match_operand 1 "register_operand" "") + (match_operator + 3 "cris_extend_operator" + [(match_operand 2 "memory_operand" "")])]))] + "REG_P (operands[0]) + && REG_P (operands[1]) + && REGNO (operands[1]) != REGNO (operands[0]) + && GET_MODE_SIZE (GET_MODE (operands[0])) <= UNITS_PER_WORD + && REG_P (XEXP (operands[2], 0)) + && REGNO (XEXP (operands[2], 0)) == REGNO (operands[0])" + [(set (match_dup 0) + (match_op_dup 3 [(match_dup 2)])) + (set (match_dup 0) + (match_op_dup + 4 [(match_dup 0) + (match_dup 1)]))] + "") + + ;; As the op-extend-split, but swapped operands, and only for + ;; plus or bound, being the commutative extend-operators. FIXME: Why is + ;; this needed? Is it? + ;; Call this op-extend-split-swapped + + (define_split + [(set (match_operand 0 "register_operand" "") + (match_operator + 4 "cris_plus_or_bound_operator" + [(match_operator + 3 "cris_extend_operator" + [(match_operand 2 "memory_operand" "")]) + (match_operand 1 "register_operand" "")]))] + "REG_P (operands[0]) + && REG_P (operands[1]) + && REGNO (operands[1]) != REGNO (operands[0]) + && GET_MODE_SIZE (GET_MODE (operands[0])) <= UNITS_PER_WORD + && REG_P (XEXP (operands[2], 0)) + && REGNO (XEXP (operands[2], 0)) != REGNO (operands[0])" + [(set (match_dup 0) + (match_dup 1)) + (set (match_dup 0) + (match_op_dup + 4 [(match_dup 0) + (match_op_dup 3 [(match_dup 2)])]))] + "") + + ;; As op-extend-split-rx=rz, but swapped operands, only for plus or + ;; bound. Call this op-extend-split-swapped-rx=rz. + + (define_split + [(set (match_operand 0 "register_operand" "") + (match_operator + 4 "cris_plus_or_bound_operator" + [(match_operator + 3 "cris_extend_operator" + [(match_operand 2 "memory_operand" "")]) + (match_operand 1 "register_operand" "")]))] + "REG_P (operands[0]) + && REG_P (operands[1]) + && REGNO (operands[1]) != REGNO (operands[0]) + && GET_MODE_SIZE (GET_MODE (operands[0])) <= UNITS_PER_WORD + && REG_P (XEXP (operands[2], 0)) + && REGNO (XEXP (operands[2], 0)) == REGNO (operands[0])" + [(set (match_dup 0) + (match_op_dup 3 [(match_dup 2)])) + (set (match_dup 0) + (match_op_dup + 4 [(match_dup 0) + (match_dup 1)]))] + "") + + ;; As op-extend-split, but the mem operand is not extended. + ;; + ;; op [rx],ry,rz changed into + ;; move ry,rz + ;; op [rx],rz + ;; lose if ry=rz or rx=rz + ;; Call this op-extend. + + (define_split + [(set (match_operand 0 "register_operand" "") + (match_operator + 3 "cris_orthogonal_operator" + [(match_operand 1 "register_operand" "") + (match_operand 2 "memory_operand" "")]))] + "REG_P (operands[0]) + && REG_P (operands[1]) + && REGNO (operands[1]) != REGNO (operands[0]) + && GET_MODE_SIZE (GET_MODE (operands[0])) <= UNITS_PER_WORD + && REG_P (XEXP (operands[2], 0)) + && REGNO (XEXP (operands[2], 0)) != REGNO (operands[0])" + [(set (match_dup 0) + (match_dup 1)) + (set (match_dup 0) + (match_op_dup + 3 [(match_dup 0) + (match_dup 2)]))] + "") + + ;; As op-extend-split-rx=rz, non-extended. + ;; Call this op-split-rx=rz + + (define_split + [(set (match_operand 0 "register_operand" "") + (match_operator + 3 "cris_commutative_orth_op" + [(match_operand 2 "memory_operand" "") + (match_operand 1 "register_operand" "")]))] + "REG_P (operands[0]) + && REG_P (operands[1]) + && REGNO (operands[1]) != REGNO (operands[0]) + && GET_MODE_SIZE (GET_MODE (operands[0])) <= UNITS_PER_WORD + && REG_P (XEXP (operands[2], 0)) + && REGNO (XEXP (operands[2], 0)) != REGNO (operands[0])" + [(set (match_dup 0) + (match_dup 1)) + (set (match_dup 0) + (match_op_dup + 3 [(match_dup 0) + (match_dup 2)]))] + "") + + ;; As op-extend-split-swapped, nonextended. + ;; Call this op-split-swapped. + + (define_split + [(set (match_operand 0 "register_operand" "") + (match_operator + 3 "cris_commutative_orth_op" + [(match_operand 1 "register_operand" "") + (match_operand 2 "memory_operand" "")]))] + "REG_P (operands[0]) && REG_P (operands[1]) + && REGNO (operands[1]) != REGNO (operands[0]) + && GET_MODE_SIZE (GET_MODE (operands[0])) <= UNITS_PER_WORD + && REG_P (XEXP (operands[2], 0)) + && REGNO (XEXP (operands[2], 0)) == REGNO (operands[0])" + [(set (match_dup 0) + (match_dup 2)) + (set (match_dup 0) + (match_op_dup + 3 [(match_dup 0) + (match_dup 1)]))] + "") + + ;; As op-extend-split-swapped-rx=rz, non-extended. + ;; Call this op-split-swapped-rx=rz. + + (define_split + [(set (match_operand 0 "register_operand" "") + (match_operator + 3 "cris_orthogonal_operator" + [(match_operand 2 "memory_operand" "") + (match_operand 1 "register_operand" "")]))] + "REG_P (operands[0]) && REG_P (operands[1]) + && REGNO (operands[1]) != REGNO (operands[0]) + && GET_MODE_SIZE (GET_MODE (operands[0])) <= UNITS_PER_WORD + && REG_P (XEXP (operands[2], 0)) + && REGNO (XEXP (operands[2], 0)) == REGNO (operands[0])" + [(set (match_dup 0) + (match_dup 2)) + (set (match_dup 0) + (match_op_dup + 3 [(match_dup 0) + (match_dup 1)]))] + "") + + ;; Splits for all cases in side-effect insns where (possibly after reload + ;; and register allocation) rx and ry in [rx=ry+i] are equal. + + ;; move.S1 [rx=rx+rz.S2],ry + + (define_split + [(parallel + [(set (match_operand 0 "register_operand" "") + (mem (plus:SI + (mult:SI (match_operand:SI 1 "register_operand" "") + (match_operand:SI 2 "const_int_operand" "")) + (match_operand:SI 3 "register_operand" "")))) + (set (match_operand:SI 4 "register_operand" "") + (plus:SI (mult:SI (match_dup 1) + (match_dup 2)) + (match_dup 3)))])] + "REG_P (operands[3]) && REG_P (operands[4]) + && REGNO (operands[3]) == REGNO (operands[4])" + [(set (match_dup 4) (plus:SI (mult:SI (match_dup 1) (match_dup 2)) + (match_dup 3))) + (set (match_dup 0) (match_dup 5))] + "operands[5] = gen_rtx_MEM (GET_MODE (operands[0]), operands[3]);") + + ;; move.S1 [rx=rx+i],ry + + (define_split + [(parallel + [(set (match_operand 0 "register_operand" "") + (mem + (plus:SI (match_operand:SI 1 "cris_bdap_operand" "") + (match_operand:SI 2 "cris_bdap_operand" "")))) + (set (match_operand:SI 3 "register_operand" "") + (plus:SI (match_dup 1) + (match_dup 2)))])] + "(rtx_equal_p (operands[3], operands[1]) + || rtx_equal_p (operands[3], operands[2]))" + [(set (match_dup 3) (plus:SI (match_dup 1) (match_dup 2))) + (set (match_dup 0) (match_dup 4))] + "operands[4] = gen_rtx_MEM (GET_MODE (operands[0]), operands[3]);") + + ;; move.S1 ry,[rx=rx+rz.S2] + + (define_split + [(parallel + [(set (mem (plus:SI + (mult:SI (match_operand:SI 0 "register_operand" "") + (match_operand:SI 1 "const_int_operand" "")) + (match_operand:SI 2 "register_operand" ""))) + (match_operand 3 "register_operand" "")) + (set (match_operand:SI 4 "register_operand" "") + (plus:SI (mult:SI (match_dup 0) + (match_dup 1)) + (match_dup 2)))])] + "REG_P (operands[2]) && REG_P (operands[4]) + && REGNO (operands[4]) == REGNO (operands[2])" + [(set (match_dup 4) (plus:SI (mult:SI (match_dup 0) (match_dup 1)) + (match_dup 2))) + (set (match_dup 5) (match_dup 3))] + "operands[5] = gen_rtx_MEM (GET_MODE (operands[3]), operands[4]);") + + ;; move.S1 ry,[rx=rx+i] + + (define_split + [(parallel + [(set (mem + (plus:SI (match_operand:SI 0 "cris_bdap_operand" "") + (match_operand:SI 1 "cris_bdap_operand" ""))) + (match_operand 2 "register_operand" "")) + (set (match_operand:SI 3 "register_operand" "") + (plus:SI (match_dup 0) + (match_dup 1)))])] + "(rtx_equal_p (operands[3], operands[0]) + || rtx_equal_p (operands[3], operands[1]))" + [(set (match_dup 3) (plus:SI (match_dup 0) (match_dup 1))) + (set (match_dup 5) (match_dup 2))] + "operands[5] = gen_rtx_MEM (GET_MODE (operands[2]), operands[3]);") + + ;; clear.d ry,[rx=rx+rz.S2] + + (define_split + [(parallel + [(set (mem:SI (plus:SI + (mult:SI (match_operand:SI 0 "register_operand" "") + (match_operand:SI 1 "const_int_operand" "")) + (match_operand:SI 2 "register_operand" ""))) + (const_int 0)) + (set (match_operand:SI 3 "register_operand" "") + (plus:SI (mult:SI (match_dup 0) + (match_dup 1)) + (match_dup 2)))])] + "REG_P (operands[2]) && REG_P (operands[3]) + && REGNO (operands[3]) == REGNO (operands[2])" + [(set (match_dup 3) (plus:SI (mult:SI (match_dup 0) (match_dup 1)) + (match_dup 2))) + (set (mem:SI (match_dup 3)) (const_int 0))] + "") + + ;; clear.w ry,[rx=rx+rz.S2] + + (define_split + [(parallel + [(set (mem:HI (plus:SI + (mult:SI (match_operand:SI 0 "register_operand" "") + (match_operand:SI 1 "const_int_operand" "")) + (match_operand:SI 2 "register_operand" ""))) + (const_int 0)) + (set (match_operand:SI 3 "register_operand" "") + (plus:SI (mult:SI (match_dup 0) + (match_dup 1)) + (match_dup 2)))])] + "REG_P (operands[2]) && REG_P (operands[3]) + && REGNO (operands[3]) == REGNO (operands[2])" + [(set (match_dup 3) (plus:SI (mult:SI (match_dup 0) (match_dup 1)) + (match_dup 2))) + (set (mem:HI (match_dup 3)) (const_int 0))] + "") + + ;; clear.b ry,[rx=rx+rz.S2] + + (define_split + [(parallel + [(set (mem:QI (plus:SI + (mult:SI (match_operand:SI 0 "register_operand" "") + (match_operand:SI 1 "const_int_operand" "")) + (match_operand:SI 2 "register_operand" ""))) + (const_int 0)) + (set (match_operand:SI 3 "register_operand" "") + (plus:SI (mult:SI (match_dup 0) + (match_dup 1)) + (match_dup 2)))])] + "REG_P (operands[2]) && REG_P (operands[3]) + && REGNO (operands[3]) == REGNO (operands[2])" + [(set (match_dup 3) (plus:SI (mult:SI (match_dup 0) (match_dup 1)) + (match_dup 2))) + (set (mem:QI (match_dup 3)) (const_int 0))] + "") + + ;; clear.d ry,[rx=rx+i] + + (define_split + [(parallel + [(set (mem:SI + (plus:SI (match_operand:SI 0 "cris_bdap_operand" "") + (match_operand:SI 1 "cris_bdap_operand" ""))) + (const_int 0)) + (set (match_operand:SI 2 "register_operand" "") + (plus:SI (match_dup 0) + (match_dup 1)))])] + "(rtx_equal_p (operands[0], operands[2]) + || rtx_equal_p (operands[2], operands[1]))" + [(set (match_dup 2) (plus:SI (match_dup 0) (match_dup 1))) + (set (mem:SI (match_dup 2)) (const_int 0))] + "") + + ;; clear.w ry,[rx=rx+i] + + (define_split + [(parallel + [(set (mem:HI + (plus:SI (match_operand:SI 0 "cris_bdap_operand" "") + (match_operand:SI 1 "cris_bdap_operand" ""))) + (const_int 0)) + (set (match_operand:SI 2 "register_operand" "") + (plus:SI (match_dup 0) + (match_dup 1)))])] + "(rtx_equal_p (operands[0], operands[2]) + || rtx_equal_p (operands[2], operands[1]))" + [(set (match_dup 2) (plus:SI (match_dup 0) (match_dup 1))) + (set (mem:HI (match_dup 2)) (const_int 0))] + "") + + ;; clear.b ry,[rx=rx+i] + + (define_split + [(parallel + [(set (mem:QI + (plus:SI (match_operand:SI 0 "cris_bdap_operand" "") + (match_operand:SI 1 "cris_bdap_operand" ""))) + (const_int 0)) + (set (match_operand:SI 2 "register_operand" "") + (plus:SI (match_dup 0) + (match_dup 1)))])] + "(rtx_equal_p (operands[0], operands[2]) + || rtx_equal_p (operands[2], operands[1]))" + [(set (match_dup 2) (plus:SI (match_dup 0) (match_dup 1))) + (set (mem:QI (match_dup 2)) (const_int 0))] + "") + + ;; mov(s|u).S1 [rx=rx+rz.S2],ry + + (define_split + [(parallel + [(set (match_operand 0 "register_operand" "") + (match_operator + 5 "cris_extend_operator" + [(mem (plus:SI + (mult:SI (match_operand:SI 1 "register_operand" "") + (match_operand:SI 2 "const_int_operand" "")) + (match_operand:SI 3 "register_operand" "")))])) + (set (match_operand:SI 4 "register_operand" "") + (plus:SI (mult:SI (match_dup 1) + (match_dup 2)) + (match_dup 3)))])] + "REG_P (operands[3]) + && REG_P (operands[4]) + && REGNO (operands[3]) == REGNO (operands[4])" + [(set (match_dup 4) (plus:SI (mult:SI (match_dup 1) (match_dup 2)) + (match_dup 3))) + (set (match_dup 0) (match_op_dup 5 [(match_dup 6)]))] + "operands[6] = gen_rtx_MEM (GET_MODE (XEXP (operands[5],0)), + operands[4]);") + + ;; mov(s|u).S1 [rx=rx+i],ry + + (define_split + [(parallel + [(set (match_operand 0 "register_operand" "") + (match_operator + 4 "cris_extend_operator" + [(mem (plus:SI + (match_operand:SI 1 "cris_bdap_operand" "") + (match_operand:SI 2 "cris_bdap_operand" "")))])) + (set (match_operand:SI 3 "register_operand" "") + (plus:SI (match_dup 1) + (match_dup 2)))])] + "(rtx_equal_p (operands[1], operands[3]) + || rtx_equal_p (operands[2], operands[3]))" + [(set (match_dup 3) (plus:SI (match_dup 1) (match_dup 2))) + (set (match_dup 0) (match_op_dup 4 [(match_dup 5)]))] + "operands[5] = gen_rtx_MEM (GET_MODE (XEXP (operands[4], 0)), + operands[3]);") + + ;; op.S1 [rx=rx+i],ry + + (define_split + [(parallel + [(set (match_operand 0 "register_operand" "") + (match_operator + 5 "cris_orthogonal_operator" + [(match_operand 1 "register_operand" "") + (mem (plus:SI + (match_operand:SI 2 "cris_bdap_operand" "") + (match_operand:SI 3 "cris_bdap_operand" "")))])) + (set (match_operand:SI 4 "register_operand" "") + (plus:SI (match_dup 2) + (match_dup 3)))])] + "(rtx_equal_p (operands[4], operands[2]) + || rtx_equal_p (operands[4], operands[3]))" + [(set (match_dup 4) (plus:SI (match_dup 2) (match_dup 3))) + (set (match_dup 0) (match_op_dup 5 [(match_dup 1) (match_dup 6)]))] + "operands[6] = gen_rtx_MEM (GET_MODE (operands[0]), operands[4]);") + + ;; op.S1 [rx=rx+rz.S2],ry + + (define_split + [(parallel + [(set (match_operand 0 "register_operand" "") + (match_operator + 6 "cris_orthogonal_operator" + [(match_operand 1 "register_operand" "") + (mem (plus:SI + (mult:SI (match_operand:SI 2 "register_operand" "") + (match_operand:SI 3 "const_int_operand" "")) + (match_operand:SI 4 "register_operand" "")))])) + (set (match_operand:SI 5 "register_operand" "") + (plus:SI (mult:SI (match_dup 2) + (match_dup 3)) + (match_dup 4)))])] + "REG_P (operands[4]) + && REG_P (operands[5]) + && REGNO (operands[5]) == REGNO (operands[4])" + [(set (match_dup 5) (plus:SI (mult:SI (match_dup 2) (match_dup 3)) + (match_dup 4))) + (set (match_dup 0) (match_op_dup 6 [(match_dup 1) (match_dup 7)]))] + "operands[7] = gen_rtx_MEM (GET_MODE (operands[0]), operands[5]);") + + ;; op.S1 [rx=rx+rz.S2],ry (swapped) + + (define_split + [(parallel + [(set (match_operand 0 "register_operand" "") + (match_operator + 6 "cris_commutative_orth_op" + [(mem (plus:SI + (mult:SI (match_operand:SI 2 "register_operand" "") + (match_operand:SI 3 "const_int_operand" "")) + (match_operand:SI 4 "register_operand" ""))) + (match_operand 1 "register_operand" "")])) + (set (match_operand:SI 5 "register_operand" "") + (plus:SI (mult:SI (match_dup 2) + (match_dup 3)) + (match_dup 4)))])] + "REG_P (operands[4]) + && REG_P (operands[5]) + && REGNO (operands[5]) == REGNO (operands[4])" + [(set (match_dup 5) (plus:SI (mult:SI (match_dup 2) (match_dup 3)) + (match_dup 4))) + (set (match_dup 0) (match_op_dup 6 [(match_dup 7) (match_dup 1)]))] + "operands[7] = gen_rtx_MEM (GET_MODE (operands[0]), operands[5]);") + + ;; op.S1 [rx=rx+i],ry (swapped) + + (define_split + [(parallel + [(set (match_operand 0 "register_operand" "") + (match_operator + 5 "cris_commutative_orth_op" + [(mem + (plus:SI (match_operand:SI 2 "cris_bdap_operand" "") + (match_operand:SI 3 "cris_bdap_operand" ""))) + (match_operand 1 "register_operand" "")])) + (set (match_operand:SI 4 "register_operand" "") + (plus:SI (match_dup 2) + (match_dup 3)))])] + "(rtx_equal_p (operands[4], operands[2]) + || rtx_equal_p (operands[4], operands[3]))" + [(set (match_dup 4) (plus:SI (match_dup 2) (match_dup 3))) + (set (match_dup 0) (match_op_dup 5 [(match_dup 6) (match_dup 1)]))] + "operands[6] = gen_rtx_MEM (GET_MODE (operands[0]), operands[4]);") + + ;; op(s|u).S1 [rx=rx+rz.S2],ry + + (define_split + [(parallel + [(set (match_operand 0 "register_operand" "") + (match_operator + 6 "cris_operand_extend_operator" + [(match_operand 1 "register_operand" "") + (match_operator + 7 "cris_extend_operator" + [(mem (plus:SI + (mult:SI (match_operand:SI 2 "register_operand" "") + (match_operand:SI 3 "const_int_operand" "")) + (match_operand:SI 4 "register_operand" "")))])])) + (set (match_operand:SI 5 "register_operand" "") + (plus:SI (mult:SI (match_dup 2) + (match_dup 3)) + (match_dup 4)))])] + "REG_P (operands[4]) + && REG_P (operands[5]) + && REGNO (operands[5]) == REGNO (operands[4])" + [(set (match_dup 5) (plus:SI (mult:SI (match_dup 2) (match_dup 3)) + (match_dup 4))) + (set (match_dup 0) (match_op_dup 6 [(match_dup 1) (match_dup 8)]))] + "operands[8] = gen_rtx (GET_CODE (operands[7]), GET_MODE (operands[7]), + gen_rtx_MEM (GET_MODE (XEXP (operands[7], 0)), + operands[5]));") + + ;; op(s|u).S1 [rx=rx+i],ry + + (define_split + [(parallel + [(set (match_operand 0 "register_operand" "") + (match_operator + 5 "cris_operand_extend_operator" + [(match_operand 1 "register_operand" "") + (match_operator + 6 "cris_extend_operator" + [(mem + (plus:SI (match_operand:SI 2 "cris_bdap_operand" "") + (match_operand:SI 3 "cris_bdap_operand" "") + ))])])) + (set (match_operand:SI 4 "register_operand" "") + (plus:SI (match_dup 2) + (match_dup 3)))])] + "(rtx_equal_p (operands[4], operands[2]) + || rtx_equal_p (operands[4], operands[3]))" + [(set (match_dup 4) (plus:SI (match_dup 2) (match_dup 3))) + (set (match_dup 0) (match_op_dup 5 [(match_dup 1) (match_dup 7)]))] + "operands[7] = gen_rtx (GET_CODE (operands[6]), GET_MODE (operands[6]), + gen_rtx_MEM (GET_MODE (XEXP (operands[6], 0)), + operands[4]));") + + ;; op(s|u).S1 [rx=rx+rz.S2],ry (swapped, plus or bound) + + (define_split + [(parallel + [(set (match_operand 0 "register_operand" "") + (match_operator + 7 "cris_plus_or_bound_operator" + [(match_operator + 6 "cris_extend_operator" + [(mem (plus:SI + (mult:SI (match_operand:SI 2 "register_operand" "") + (match_operand:SI 3 "const_int_operand" "")) + (match_operand:SI 4 "register_operand" "")))]) + (match_operand 1 "register_operand" "")])) + (set (match_operand:SI 5 "register_operand" "") + (plus:SI (mult:SI (match_dup 2) + (match_dup 3)) + (match_dup 4)))])] + "REG_P (operands[4]) && REG_P (operands[5]) + && REGNO (operands[5]) == REGNO (operands[4])" + [(set (match_dup 5) (plus:SI (mult:SI (match_dup 2) (match_dup 3)) + (match_dup 4))) + (set (match_dup 0) (match_op_dup 6 [(match_dup 8) (match_dup 1)]))] + "operands[8] = gen_rtx (GET_CODE (operands[6]), GET_MODE (operands[6]), + gen_rtx_MEM (GET_MODE (XEXP (operands[6], 0)), + operands[5]));") + + ;; op(s|u).S1 [rx=rx+i],ry (swapped, plus or bound) + + (define_split + [(parallel + [(set (match_operand 0 "register_operand" "") + (match_operator + 6 "cris_plus_or_bound_operator" + [(match_operator + 5 "cris_extend_operator" + [(mem (plus:SI + (match_operand:SI 2 "cris_bdap_operand" "") + (match_operand:SI 3 "cris_bdap_operand" "")))]) + (match_operand 1 "register_operand" "")])) + (set (match_operand:SI 4 "register_operand" "") + (plus:SI (match_dup 2) + (match_dup 3)))])] + "(rtx_equal_p (operands[4], operands[2]) + || rtx_equal_p (operands[4], operands[3]))" + [(set (match_dup 4) (plus:SI (match_dup 2) (match_dup 3))) + (set (match_dup 0) (match_op_dup 6 [(match_dup 7) (match_dup 1)]))] + "operands[7] = gen_rtx (GET_CODE (operands[5]), GET_MODE (operands[5]), + gen_rtx_MEM (GET_MODE (XEXP (operands[5], 0)), + operands[4]));") + + ;; Splits for addressing prefixes that have no side-effects, so we can + ;; fill a delay slot. Never split if we lose something, though. + + ;; If we have a + ;; move [indirect_ref],rx + ;; where indirect ref = {const, [r+], [r]}, it costs as much as + ;; move indirect_ref,rx + ;; move [rx],rx + ;; Take care not to allow indirect_ref = register. + + ;; We're not allowed to generate copies of registers with different mode + ;; until after reload; copying pseudos upsets reload. CVS as of + ;; 2001-08-24, unwind-dw2-fde.c, _Unwind_Find_FDE ICE in + ;; cselib_invalidate_regno. + + (define_split + [(set (match_operand 0 "register_operand" "") + (match_operand 1 "indirect_operand" ""))] + "reload_completed + && REG_P (operands[0]) + && GET_MODE_SIZE (GET_MODE (operands[0])) <= UNITS_PER_WORD + && (GET_CODE (XEXP (operands[1], 0)) == MEM + || CONSTANT_P (XEXP (operands[1], 0)))" + [(set (match_dup 2) (match_dup 4)) + (set (match_dup 0) (match_dup 3))] + "operands[2] = gen_rtx_REG (Pmode, REGNO (operands[0])); + operands[3] = gen_rtx_MEM (GET_MODE (operands[0]), operands[2]); + operands[4] = XEXP (operands[1], 0);") + + ;; As the above, but MOVS and MOVU. + + (define_split + [(set (match_operand 0 "register_operand" "") + (match_operator + 4 "cris_extend_operator" + [(match_operand 1 "indirect_operand" "")]))] + "reload_completed + && REG_P (operands[0]) + && GET_MODE_SIZE (GET_MODE (operands[0])) <= UNITS_PER_WORD + && (GET_CODE (XEXP (operands[1], 0)) == MEM + || CONSTANT_P (XEXP (operands[1], 0)))" + [(set (match_dup 2) (match_dup 5)) + (set (match_dup 0) (match_op_dup 4 [(match_dup 3)]))] + "operands[2] = gen_rtx_REG (Pmode, REGNO (operands[0])); + operands[3] = gen_rtx_MEM (GET_MODE (XEXP (operands[4], 0)), operands[2]); + operands[5] = XEXP (operands[1], 0);") + + ;; Various peephole optimizations. + ;; + ;; Watch out: when you exchange one set of instructions for another, the + ;; condition codes setting must be the same, or you have to CC_INIT or + ;; whatever is appropriate, in the pattern before you emit the + ;; assembly text. This is best done here, not in cris_notice_update_cc, + ;; to keep changes local to their cause. + ;; + ;; Do not add patterns that you do not know will be matched. + ;; Please also add a self-contained test-case. + + ;; We have trouble with and:s and shifts. Maybe something is broken in + ;; gcc? Or it could just be that bitfield insn expansion is a bit + ;; suboptimal when not having extzv insns. + + (define_peephole + [(set (match_operand 0 "register_operand" "=r") + (ashiftrt:SI (match_dup 0) + (match_operand:SI 1 "const_int_operand" "n"))) + (set (match_dup 0) + (and:SI (match_dup 0) + (match_operand 2 "const_int_operand" "n")))] + "INTVAL (operands[2]) > 31 + && INTVAL (operands[2]) < 255 + && INTVAL (operands[1]) > 23" + + ;; The m flag should be ignored, because this will be a *byte* "and" + ;; operation. + + "* + { + cc_status.flags |= CC_NOT_NEGATIVE; + + return \"lsrq %1,%0\;and.b %2,%0\"; + }") + + (define_peephole + [(set (match_operand 0 "register_operand" "=r") + (ashiftrt:SI (match_dup 0) + (match_operand:SI 1 "const_int_operand" "n"))) + (set (match_dup 0) + (and:SI (match_dup 0) + (match_operand 2 "const_int_operand" "n")))] + "INTVAL (operands[2]) > 31 + && INTVAL (operands[2]) < 65535 + && INTVAL (operands[2]) != 255 + && INTVAL (operands[1]) > 15" + + ;; The m flag should be ignored, because this will be a *word* "and" + ;; operation. + + "* + { + cc_status.flags |= CC_NOT_NEGATIVE; + + return \"lsrq %1,%0\;and.w %2,%0\"; + }") + + (define_peephole + [(set (match_operand 0 "register_operand" "=r") + (lshiftrt:SI (match_dup 0) + (match_operand:SI 1 "const_int_operand" "n"))) + (set (match_dup 0) + (and:SI (match_dup 0) + (match_operand 2 "const_int_operand" "n")))] + "INTVAL (operands[2]) > 31 + && INTVAL (operands[2]) < 255 + && INTVAL (operands[1]) > 23" + + ;; The m flag should be ignored, because this will be a *byte* "and" + ;; operation. + + "* + { + cc_status.flags |= CC_NOT_NEGATIVE; + + return \"lsrq %1,%0\;and.b %2,%0\"; + }") + + (define_peephole + [(set (match_operand 0 "register_operand" "=r") + (lshiftrt:SI (match_dup 0) + (match_operand:SI 1 "const_int_operand" "n"))) + (set (match_dup 0) + (and:SI (match_dup 0) + (match_operand 2 "const_int_operand" "n")))] + "INTVAL (operands[2]) > 31 && INTVAL (operands[2]) < 65535 + && INTVAL (operands[2]) != 255 + && INTVAL (operands[1]) > 15" + + ;; The m flag should be ignored, because this will be a *word* "and" + ;; operation. + + "* + { + cc_status.flags |= CC_NOT_NEGATIVE; + + return \"lsrq %1,%0\;and.w %2,%0\"; + }") + + + ;; Change + ;; add.d n,rx + ;; move [rx],ry + ;; into + ;; move [rx=rx+n],ry + ;; when -128 <= n <= 127. + ;; This will reduce the size of the assembler code for n = [-128..127], + ;; and speed up accordingly. + + (define_peephole + [(set (match_operand:SI 0 "register_operand" "=r") + (plus:SI (match_operand:SI 1 "register_operand" "0") + (match_operand:SI 2 "const_int_operand" "n"))) + (set (match_operand 3 "register_operand" "=r") + (mem (match_dup 0)))] + "GET_MODE (operands[3]) != DImode + && REGNO (operands[3]) != REGNO (operands[0]) + && (BASE_P (operands[1]) || BASE_P (operands[2])) + && ! CONST_OK_FOR_LETTER_P (INTVAL (operands[2]), 'J') + && ! CONST_OK_FOR_LETTER_P (INTVAL (operands[2]), 'N') + && (INTVAL (operands[2]) >= -128 && INTVAL (operands[2]) < 128)" + "move.%s3 [%0=%1%S2],%3") + + ;; Vice versa: move ry,[rx=rx+n] + + (define_peephole + [(set (match_operand:SI 0 "register_operand" "=r") + (plus:SI (match_operand:SI 1 "register_operand" "0") + (match_operand:SI 2 "const_int_operand" "n"))) + (set (mem (match_dup 0)) + (match_operand 3 "register_operand" "=r"))] + "GET_MODE (operands[3]) != DImode + && REGNO (operands[3]) != REGNO (operands[0]) + && (BASE_P (operands[1]) || BASE_P (operands[2])) + && ! CONST_OK_FOR_LETTER_P (INTVAL (operands[2]), 'J') + && ! CONST_OK_FOR_LETTER_P (INTVAL (operands[2]), 'N') + && (INTVAL (operands[2]) >= -128 && INTVAL (operands[2]) < 128)" + "move.%s3 %3,[%0=%1%S2]" + [(set_attr "cc" "none")]) + + ;; As above, change: + ;; add.d n,rx + ;; op.d [rx],ry + ;; into: + ;; op.d [rx=rx+n],ry + ;; Saves when n = [-128..127]. + ;; + ;; Splitting and joining combinations for side-effect modes are slightly + ;; out of hand. They probably will not save the time they take typing in, + ;; not to mention the bugs that creep in. FIXME: Get rid of as many of + ;; the splits and peepholes as possible. + + (define_peephole + [(set (match_operand:SI 0 "register_operand" "=r") + (plus:SI (match_operand:SI 1 "register_operand" "0") + (match_operand:SI 2 "const_int_operand" "n"))) + (set (match_operand 3 "register_operand" "=r") + (match_operator 4 "cris_orthogonal_operator" + [(match_dup 3) + (mem (match_dup 0))]))] + "GET_MODE (operands[3]) != DImode + && REGNO (operands[0]) != REGNO (operands[3]) + && ! CONST_OK_FOR_LETTER_P (INTVAL (operands[2]), 'J') + && ! CONST_OK_FOR_LETTER_P (INTVAL (operands[2]), 'N') + && INTVAL (operands[2]) >= -128 + && INTVAL (operands[2]) <= 127" + "%x4.%s3 [%0=%1%S2],%3") + + ;; Sometimes, for some reason the pattern + ;; move x,rx + ;; add y,rx + ;; move [rx],rz + ;; will occur. Solve this, and likewise for to-memory. + + (define_peephole + [(set (match_operand:SI 0 "register_operand" "=r,r,r,r") + (match_operand:SI 1 "cris_bdap_biap_operand" "r,>Ri,r,>Ri")) + (set (match_dup 0) + (plus:SI (match_operand:SI 2 "cris_bdap_biap_operand" "0,0,r>Ri,r") + (match_operand:SI 3 "cris_bdap_biap_operand" "r>Ri,r,0,0"))) + (set (match_operand 4 "register_operand" "=r,r,r,r") + (mem (match_dup 0)))] + "(rtx_equal_p (operands[2], operands[0]) + || rtx_equal_p (operands[3], operands[0])) + && cris_side_effect_mode_ok (PLUS, operands, 0, + (REG_S_P (operands[1]) + ? 1 + : (rtx_equal_p (operands[2], operands[0]) + ? 3 : 2)), + (! REG_S_P (operands[1]) + ? 1 + : (rtx_equal_p (operands[2], operands[0]) + ? 3 : 2)), + -1, 4)" + "@ + move.%s4 [%0=%1%S3],%4 + move.%s4 [%0=%3%S1],%4 + move.%s4 [%0=%1%S2],%4 + move.%s4 [%0=%2%S1],%4") + + ;; As above but to memory. + + (define_peephole + [(set (match_operand:SI 0 "register_operand" "=r,r,r,r") + (match_operand:SI 1 "cris_bdap_biap_operand" "r,>Ri,r,>Ri")) + (set (match_dup 0) + (plus:SI (match_operand:SI 2 "cris_bdap_biap_operand" "0,0,r>Ri,r") + (match_operand:SI 3 "cris_bdap_biap_operand" "r>Ri,r,0,0"))) + (set (mem (match_dup 0)) + (match_operand 4 "register_operand" "=r,r,r,r"))] + "(rtx_equal_p (operands[2], operands[0]) + || rtx_equal_p (operands[3], operands[0])) + && cris_side_effect_mode_ok (PLUS, operands, 0, + (REG_S_P (operands[1]) + ? 1 + : (rtx_equal_p (operands[2], operands[0]) + ? 3 : 2)), + (! REG_S_P (operands[1]) + ? 1 + : (rtx_equal_p (operands[2], operands[0]) + ? 3 : 2)), + -1, 4)" + "@ + move.%s4 %4,[%0=%1%S3] + move.%s4 %4,[%0=%3%S1] + move.%s4 %4,[%0=%1%S2] + move.%s4 %4,[%0=%2%S1]" + [(set_attr "cc" "none")]) + + + ;; As the move from-memory above, but with an operation. + + (define_peephole + [(set (match_operand:SI 0 "register_operand" "=r,r,r,r") + (match_operand:SI 1 "cris_bdap_biap_operand" "r,>Ri,r,>Ri")) + (set (match_dup 0) + (plus:SI (match_operand:SI 2 "cris_bdap_biap_operand" "0,0,r>Ri,r") + (match_operand:SI 3 "cris_bdap_biap_operand" "r>Ri,r,0,0"))) + (set (match_operand 4 "register_operand" "=r,r,r,r") + (match_operator 5 "cris_orthogonal_operator" + [(match_dup 3) + (mem (match_dup 0))]))] + "(rtx_equal_p (operands[2], operands[0]) + || rtx_equal_p (operands[3], operands[0])) + && cris_side_effect_mode_ok (PLUS, operands, 0, + (REG_S_P (operands[1]) + ? 1 + : (rtx_equal_p (operands[2], operands[0]) + ? 3 : 2)), + (! REG_S_P (operands[1]) + ? 1 + : (rtx_equal_p (operands[2], operands[0]) + ? 3 : 2)), + -1, 4)" + "@ + %x5.%s4 [%0=%1%S3],%4 + %x5.%s4 [%0=%3%S1],%4 + %x5.%s4 [%0=%1%S2],%4 + %x5.%s4 [%0=%2%S1],%4") + + ;; Same, but with swapped operands (and commutative operation). + + (define_peephole + [(set (match_operand:SI 0 "register_operand" "=r,r,r,r") + (match_operand:SI 1 "cris_bdap_biap_operand" "r,>Ri,r,>Ri")) + (set (match_dup 0) + (plus:SI (match_operand:SI 2 "cris_bdap_biap_operand" "0,0,r>Ri,r") + (match_operand:SI 3 "cris_bdap_biap_operand" "r>Ri,r,0,0"))) + (set (match_operand 4 "register_operand" "=r,r,r,r") + (match_operator 5 "cris_commutative_orth_op" + [(mem (match_dup 0)) + (match_dup 3)]))] + "(rtx_equal_p (operands[2], operands[0]) + || rtx_equal_p (operands[3], operands[0])) + && cris_side_effect_mode_ok (PLUS, operands, 0, + (REG_S_P (operands[1]) + ? 1 + : (rtx_equal_p (operands[2], operands[0]) + ? 3 : 2)), + (! REG_S_P (operands[1]) + ? 1 + : (rtx_equal_p (operands[2], operands[0]) + ? 3 : 2)), + -1, 4)" + "@ + %x5.%s4 [%0=%1%S3],%4 + %x5.%s4 [%0=%3%S1],%4 + %x5.%s4 [%0=%1%S2],%4 + %x5.%s4 [%0=%2%S1],%4") + + ;; Another spotted bad code: + ;; move rx,ry + ;; move [ry],ry + + (define_peephole + [(set (match_operand:SI 0 "register_operand" "=r") + (match_operand:SI 1 "register_operand" "r")) + (set (match_operand 2 "register_operand" "=r") + (mem (match_dup 0)))] + "REGNO (operands[0]) == REGNO (operands[2]) + && GET_MODE_SIZE (GET_MODE (operands[2])) <= UNITS_PER_WORD" + "move.%s2 [%1],%0" + [(set_attr "slottable" "yes")]) + + ;; And a simple variant with extended operand. + + (define_peephole + [(set (match_operand:SI 0 "register_operand" "=r") + (match_operand:SI 1 "register_operand" "r")) + (set (match_operand 2 "register_operand" "=r") + (match_operator 3 "cris_extend_operator" [(mem (match_dup 0))]))] + "REGNO (operands[0]) == REGNO (operands[2]) + && GET_MODE_SIZE (GET_MODE (operands[2])) <= UNITS_PER_WORD" + "mov%e3.%m3 [%1],%0" + [(set_attr "slottable" "yes")]) + + ;; Here are all peepholes that have a saved testcase. + ;; Do not add new peepholes without testcases. + + ;; peep-1: + ;; move.d [r10+16],r9 + ;; and.d r12,r9 + ;; change to + ;; and.d [r10+16],r12,r9 + ;; With generalization of the operation, the size and the addressing mode. + ;; This seems to be the result of a quirk in register allocation + ;; missing the three-operand cases when having different predicates. + ;; Maybe that it matters that it is a commutative operation. + ;; This pattern helps that situation, but there's still the increased + ;; register pressure. + ;; Note that adding the noncommutative variant did not show any matches + ;; in ipps and cc1, so it's not here. + + (define_peephole + [(set (match_operand 0 "register_operand" "=r,r,r,r") + (mem (plus:SI + (match_operand:SI 1 "cris_bdap_biap_operand" "r,r>Ri,r,r>Ri") + (match_operand:SI 2 "cris_bdap_biap_operand" "r>Ri,r,r>Ri,r")))) + (set (match_dup 0) + (match_operator 5 "cris_commutative_orth_op" + [(match_operand 3 "register_operand" "0,0,r,r") + (match_operand 4 "register_operand" "r,r,0,0")]))] + "(rtx_equal_p (operands[3], operands[0]) + || rtx_equal_p (operands[4], operands[0])) + && ! rtx_equal_p (operands[3], operands[4]) + && (REG_S_P (operands[1]) || REG_S_P (operands[2])) + && GET_MODE_SIZE (GET_MODE (operands[0])) <= UNITS_PER_WORD" + "@ + %x5.%s0 [%1%S2],%4,%0 + %x5.%s0 [%2%S1],%4,%0 + %x5.%s0 [%1%S2],%3,%0 + %x5.%s0 [%2%S1],%3,%0") + + ;; peep-2: + ;; I cannot tell GCC (2.1, 2.7.2) how to correctly reload an instruction + ;; that looks like + ;; and.b some_byte,const,reg_32 + ;; where reg_32 is the destination of the "three-address" code optimally. + ;; It should be: + ;; movu.b some_byte,reg_32 + ;; and.b const,reg_32 + ;; but is turns into: + ;; move.b some_byte,reg_32 + ;; and.d const,reg_32 + ;; Fix it here. + + (define_peephole + [(set (match_operand:SI 0 "register_operand" "=r") + (match_operand:SI 1 "nonimmediate_operand" "rm")) + (set (match_operand:SI 2 "register_operand" "=0") + (and:SI (match_dup 0) + (match_operand:SI 3 "const_int_operand" "n")))] + + ;; Since the size of the memory access could be made different here, + ;; don't do this for a mem-volatile access. + + "REGNO (operands[2]) == REGNO (operands[0]) + && INTVAL (operands[3]) <= 65535 && INTVAL (operands[3]) >= 0 + && ! CONST_OK_FOR_LETTER_P (INTVAL (operands[3]), 'I') + && (GET_CODE (operands[1]) != MEM || ! MEM_VOLATILE_P (operands[1]))" + "* + { + if (CONST_OK_FOR_LETTER_P (INTVAL (operands[3]), 'O')) + return \"movu.%z3 %1,%0\;andq %b3,%0\"; + + cc_status.flags |= CC_NOT_NEGATIVE; + + return \"movu.%z3 %1,%0\;and.%z3 %3,%0\"; + }") + + ;; peep-3 + + (define_peephole + [(set (match_operand 0 "register_operand" "=r") + (match_operand 1 "nonimmediate_operand" "rm")) + (set (match_operand:SI 2 "register_operand" "=r") + (and:SI (subreg:SI (match_dup 0) 0) + (match_operand 3 "const_int_operand" "n")))] + + ;; Since the size of the memory access could be made different here, + ;; don't do this for a mem-volatile access. + + "REGNO (operands[0]) == REGNO (operands[2]) + && INTVAL (operands[3]) > 0 + && INTVAL (operands[3]) <= 65535 + && ! CONST_OK_FOR_LETTER_P (INTVAL (operands[3]), 'I') + && (GET_CODE (operands[1]) != MEM || ! MEM_VOLATILE_P (operands[1]))" + "* + { + if (CONST_OK_FOR_LETTER_P (INTVAL (operands[3]), 'O')) + return \"movu.%z3 %1,%0\;andq %b3,%0\"; + + cc_status.flags |= CC_NOT_NEGATIVE; + + return \"movu.%z3 %1,%0\;and.%z3 %3,%0\"; + }") + + ;; Local variables: + ;; mode:emacs-lisp + ;; comment-start: ";; " + ;; eval: (set-syntax-table (copy-sequence (syntax-table))) + ;; eval: (modify-syntax-entry ?[ "(]") + ;; eval: (modify-syntax-entry ?] ")[") + ;; eval: (modify-syntax-entry ?{ "(}") + ;; eval: (modify-syntax-entry ?} "){") + ;; eval: (setq indent-tabs-mode t) + ;; End: diff -Nrc3pad gcc-3.0.4/gcc/config/cris/cris_abi_symbol.c gcc-3.1/gcc/config/cris/cris_abi_symbol.c *** gcc-3.0.4/gcc/config/cris/cris_abi_symbol.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/cris/cris_abi_symbol.c Thu Oct 11 17:02:36 2001 *************** *** 0 **** --- 1,56 ---- + /* Define symbol to recognize CRIS ABI version 2, for a.out use. + Contributed by Axis Communications. + Written by Hans-Peter Nilsson , c:a 1992. + + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) any + later version. + + In addition to the permissions in the GNU General Public License, the + Free Software Foundation gives you unlimited permission to link the + compiled version of this file with other programs, and to distribute + those programs without any restriction coming from the use of this + file. (The General Public License restrictions do apply in other + respects; for example, they cover modification of the file, and + distribution when not linked into another program.) + + This file 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; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + + As a special exception, if you link this library with files, some of + which are compiled with GCC, this library does not by itself cause + the resulting object or executable to be covered by the GNU General + Public License. + This exception does not however invalidate any other reasons why + the executable file or object might be covered by the GNU General + Public License. */ + + #include "config.h" + + #ifdef __AOUT__ + + /* ELF support was not released before the ABI was changed, so we + restrict this awkwardness to a.out. This symbol is for gdb to + recognize, so it can debug both old and new programs successfully. */ + __asm__ (".global " CRIS_ABI_VERSION_SYMBOL_STRING); + __asm__ (".set " CRIS_ABI_VERSION_SYMBOL_STRING ",0"); + + #else /* not __AOUT__ */ + + /* The file must not be empty (declaration/definition-wise) according to + ISO, IIRC. */ + extern int _Dummy; + + #endif /* not __AOUT__ */ diff -Nrc3pad gcc-3.0.4/gcc/config/cris/linux.h gcc-3.1/gcc/config/cris/linux.h *** gcc-3.0.4/gcc/config/cris/linux.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/cris/linux.h Sat Apr 13 20:18:34 2002 *************** *** 0 **** --- 1,113 ---- + /* Definitions for GCC. Part of the machine description for CRIS. + Copyright (C) 2001, 2002 Free Software Foundation, Inc. + Contributed by Axis Communications. Written by Hans-Peter Nilsson. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GCC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + + /* After the first "Node:" comment comes all preprocessor directives and + attached declarations described in the info files, the "Using and + Porting GCC" manual (uapgcc), in the same order as found in the "Target + macros" section in the gcc-2.9x CVS edition of 2000-03-17. FIXME: Not + really, but needs an update anyway. + + There is no generic copy-of-uapgcc comment, you'll have to see uapgcc + for that. If applicable, there is a CRIS-specific comment. The order + of macro definitions follow the order in the manual. Every section in + the manual (node in the info pages) has an introductory `Node: + ' comment. If no macros are defined for a section, only + the section-comment is present. */ + + /* This file defines the macros for cris-axis-linux-gnu that are not + covered by cris.h, elfos.h and (config/)linux.h. */ + + + /* Node: Instruction Output */ + + #undef USER_LABEL_PREFIX + #define USER_LABEL_PREFIX "" + + /* Node: Driver */ + /* These macros are CRIS-specific, but used in target driver macros. */ + + #undef CRIS_CPP_SUBTARGET_SPEC + #define CRIS_CPP_SUBTARGET_SPEC \ + "-D__gnu_linux__ -D__linux__ -D__unix__ -D__ELF__\ + %{pthread:-D_REENTRANT}\ + %{fPIC|fpic: -D__PIC__ -D__pic__}\ + %{!fleading-underscore:-fno-leading-underscore -D__NO_UNDERSCORES__}\ + %{!march=*:%{!cpu=*:-D__arch_v10 -D__CRIS_arch_version=10}}\ + %{!ansi:%{!std=*:%{!undef:-Dlinux -Dunix}\ + -Asystem(unix) -Asystem(posix) -Acpu(cris) -Amachine(cris)}}" + + #undef CRIS_CC1_SUBTARGET_SPEC + #define CRIS_CC1_SUBTARGET_SPEC \ + "%{!march=*:%{!cpu=*:-march=v10}}" + + #undef CRIS_ASM_SUBTARGET_SPEC + #define CRIS_ASM_SUBTARGET_SPEC \ + "--em=criself\ + %{!fleading-underscore:--no-underscore}\ + %{fPIC|fpic: --pic}" + + /* Provide a legacy -mlinux option. */ + #undef CRIS_SUBTARGET_SWITCHES + #define CRIS_SUBTARGET_SWITCHES \ + {"linux", 0, ""}, \ + {"gotplt", -TARGET_MASK_AVOID_GOTPLT, ""}, \ + {"no-gotplt", TARGET_MASK_AVOID_GOTPLT, \ + N_("Together with -fpic and -fPIC, do not use GOTPLT references")}, + + #undef CRIS_SUBTARGET_DEFAULT + #define CRIS_SUBTARGET_DEFAULT \ + (TARGET_MASK_SVINTO \ + + TARGET_MASK_ETRAX4_ADD \ + + TARGET_MASK_ALIGN_BY_32 \ + + TARGET_MASK_ELF \ + + TARGET_MASK_LINUX) + + #undef CRIS_DEFAULT_CPU_VERSION + #define CRIS_DEFAULT_CPU_VERSION CRIS_CPU_NG + + #undef CRIS_SUBTARGET_VERSION + #define CRIS_SUBTARGET_VERSION " - cris-axis-linux-gnu" + + /* We need an -rpath-link to ld.so.1, and presumably to each directory + specified with -B. */ + #undef CRIS_LINK_SUBTARGET_SPEC + #define CRIS_LINK_SUBTARGET_SPEC \ + "-mcrislinux\ + -rpath-link include/asm/../..%s\ + %{shared} %{static}\ + %{symbolic:-Bdynamic} %{shlib:-Bdynamic} %{static:-Bstatic}\ + %{!shared:%{!static:%{rdynamic:-export-dynamic}}}\ + %{O2|O3: --gc-sections}" + + + /* Node: Sections */ + + /* GNU/Linux has crti and crtn and does not need the + CRT_CALL_STATIC_FUNCTION trick in cris.h. */ + #undef CRT_CALL_STATIC_FUNCTION + + /* + * Local variables: + * eval: (c-set-style "gnu") + * indent-tabs-mode: t + * End: + */ diff -Nrc3pad gcc-3.0.4/gcc/config/cris/mulsi3.asm gcc-3.1/gcc/config/cris/mulsi3.asm *** gcc-3.0.4/gcc/config/cris/mulsi3.asm Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/cris/mulsi3.asm Thu Oct 11 17:02:36 2001 *************** *** 0 **** --- 1,227 ---- + ;; This code used to be expanded through interesting expansions in + ;; the machine description, compiled from this code: + ;; + ;; #ifdef L_mulsi3 + ;; long __Mul (unsigned long a, unsigned long b) __attribute__ ((__const__)); + ;; + ;; /* This must be compiled with the -mexpand-mul flag, to synthesize the + ;; multiplication from the mstep instructions. The check for + ;; smaller-size multiplication pays off in the order of .5-10%; + ;; estimated median 1%, depending on application. + ;; FIXME: It can be further optimized if we go to assembler code, as + ;; gcc 2.7.2 adds a few unnecessary instructions and does not put the + ;; basic blocks in optimal order. */ + ;; long + ;; __Mul (unsigned long a, unsigned long b) + ;; { + ;; #if defined (__CRIS_arch_version) && __CRIS_arch_version >= 10 + ;; /* In case other code is compiled without -march=v10, they will + ;; contain calls to __Mul, regardless of flags at link-time. The + ;; "else"-code below will work, but is unnecessarily slow. This + ;; sometimes cuts a few minutes off from simulation time by just + ;; returning a "mulu.d". */ + ;; return a * b; + ;; #else + ;; unsigned long min; + ;; + ;; /* Get minimum via the bound insn. */ + ;; min = a < b ? a : b; + ;; + ;; /* Can we omit computation of the high part? */ + ;; if (min > 65535) + ;; /* No. Perform full multiplication. */ + ;; return a * b; + ;; else + ;; { + ;; /* Check if both operands are within 16 bits. */ + ;; unsigned long max; + ;; + ;; /* Get maximum, by knowing the minimum. + ;; This will partition a and b into max and min. + ;; This is not currently something GCC understands, + ;; so do this trick by asm. */ + ;; __asm__ ("xor %1,%0\n\txor %2,%0" + ;; : "=r" (max) + ;; : "r" (b), "r" (a), "0" (min)); + ;; + ;; if (max > 65535) + ;; /* Make GCC understand that only the low part of "min" will be + ;; used. */ + ;; return max * (unsigned short) min; + ;; else + ;; /* Only the low parts of both operands are necessary. */ + ;; return ((unsigned short) max) * (unsigned short) min; + ;; } + ;; #endif /* not __CRIS_arch_version >= 10 */ + ;; } + ;; #endif /* L_mulsi3 */ + ;; + ;; That approach was abandoned since the caveats outweighted the + ;; benefits. The expand-multiplication machinery is also removed, so you + ;; can't do this anymore. + ;; + ;; For doubters of there being any benefits, some where: insensitivity to: + ;; - ABI changes (mostly for experimentation) + ;; - assembler syntax differences (mostly debug format). + ;; - insn scheduling issues. + ;; Most ABI experiments will presumably happen with arches with mul insns, + ;; so that argument doesn't really hold anymore, and it's unlikely there + ;; being new arch variants needing insn scheduling and not having mul + ;; insns. + + ;; ELF and a.out have different syntax for local labels: the "wrong" + ;; one may not be omitted from the object. + #undef L + #ifdef __AOUT__ + # define L(x) x + #else + # define L(x) .x + #endif + + .global ___Mul + .type ___Mul,@function + ___Mul: + #if defined (__CRIS_arch_version) && __CRIS_arch_version >= 10 + ret + mulu.d $r11,$r10 + #else + move.d $r10,$r12 + move.d $r11,$r9 + bound.d $r12,$r9 + cmpu.w 65535,$r9 + bls L(L3) + move.d $r12,$r13 + + movu.w $r11,$r9 + lslq 16,$r13 + mstep $r9,$r13 + mstep $r9,$r13 + mstep $r9,$r13 + mstep $r9,$r13 + mstep $r9,$r13 + mstep $r9,$r13 + mstep $r9,$r13 + mstep $r9,$r13 + mstep $r9,$r13 + mstep $r9,$r13 + mstep $r9,$r13 + mstep $r9,$r13 + mstep $r9,$r13 + mstep $r9,$r13 + mstep $r9,$r13 + mstep $r9,$r13 + clear.w $r10 + test.d $r10 + mstep $r9,$r10 + mstep $r9,$r10 + mstep $r9,$r10 + mstep $r9,$r10 + mstep $r9,$r10 + mstep $r9,$r10 + mstep $r9,$r10 + mstep $r9,$r10 + mstep $r9,$r10 + mstep $r9,$r10 + mstep $r9,$r10 + mstep $r9,$r10 + mstep $r9,$r10 + mstep $r9,$r10 + mstep $r9,$r10 + mstep $r9,$r10 + movu.w $r12,$r12 + move.d $r11,$r9 + clear.w $r9 + test.d $r9 + mstep $r12,$r9 + mstep $r12,$r9 + mstep $r12,$r9 + mstep $r12,$r9 + mstep $r12,$r9 + mstep $r12,$r9 + mstep $r12,$r9 + mstep $r12,$r9 + mstep $r12,$r9 + mstep $r12,$r9 + mstep $r12,$r9 + mstep $r12,$r9 + mstep $r12,$r9 + mstep $r12,$r9 + mstep $r12,$r9 + mstep $r12,$r9 + add.w $r9,$r10 + lslq 16,$r10 + ret + add.d $r13,$r10 + + L(L3): + move.d $r9,$r10 + xor $r11,$r10 + xor $r12,$r10 + cmpu.w 65535,$r10 + bls L(L5) + movu.w $r9,$r13 + + movu.w $r13,$r13 + move.d $r10,$r9 + lslq 16,$r9 + mstep $r13,$r9 + mstep $r13,$r9 + mstep $r13,$r9 + mstep $r13,$r9 + mstep $r13,$r9 + mstep $r13,$r9 + mstep $r13,$r9 + mstep $r13,$r9 + mstep $r13,$r9 + mstep $r13,$r9 + mstep $r13,$r9 + mstep $r13,$r9 + mstep $r13,$r9 + mstep $r13,$r9 + mstep $r13,$r9 + mstep $r13,$r9 + clear.w $r10 + test.d $r10 + mstep $r13,$r10 + mstep $r13,$r10 + mstep $r13,$r10 + mstep $r13,$r10 + mstep $r13,$r10 + mstep $r13,$r10 + mstep $r13,$r10 + mstep $r13,$r10 + mstep $r13,$r10 + mstep $r13,$r10 + mstep $r13,$r10 + mstep $r13,$r10 + mstep $r13,$r10 + mstep $r13,$r10 + mstep $r13,$r10 + mstep $r13,$r10 + lslq 16,$r10 + ret + add.d $r9,$r10 + + L(L5): + movu.w $r9,$r9 + lslq 16,$r10 + mstep $r9,$r10 + mstep $r9,$r10 + mstep $r9,$r10 + mstep $r9,$r10 + mstep $r9,$r10 + mstep $r9,$r10 + mstep $r9,$r10 + mstep $r9,$r10 + mstep $r9,$r10 + mstep $r9,$r10 + mstep $r9,$r10 + mstep $r9,$r10 + mstep $r9,$r10 + mstep $r9,$r10 + mstep $r9,$r10 + ret + mstep $r9,$r10 + #endif + L(Lfe1): + .size ___Mul,L(Lfe1)-___Mul diff -Nrc3pad gcc-3.0.4/gcc/config/cris/t-aout gcc-3.1/gcc/config/cris/t-aout *** gcc-3.0.4/gcc/config/cris/t-aout Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/cris/t-aout Thu Oct 11 17:02:36 2001 *************** *** 0 **** --- 1,12 ---- + LIB2FUNCS_STATIC_EXTRA = \ + tmpabi_symbol.c $(srcdir)/config/cris/mulsi3.asm + + MULTILIB_OPTIONS = melinux + MULTILIB_DIRNAMES = elinux + MULTILIB_EXTRA_OPTS = mbest-lib-options + + INSTALL_LIBGCC = install-multilib + LIBGCC = stmp-multilib + + tmpabi_symbol.c: $(srcdir)/config/cris/cris_abi_symbol.c + cp $(srcdir)/config/cris/cris_abi_symbol.c $@ diff -Nrc3pad gcc-3.0.4/gcc/config/cris/t-cris gcc-3.1/gcc/config/cris/t-cris *** gcc-3.0.4/gcc/config/cris/t-cris Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/cris/t-cris Thu Apr 11 15:16:18 2002 *************** *** 0 **** --- 1,41 ---- + # + # t-cris + # + # The Makefile fragment to include when compiling gcc et al for CRIS. + # + # + # The makefile macros etc. are included in the order found in the + # section "Target Fragment" in the gcc info-files (or the paper copy) of + # "Using and Porting GCC" + # + # Don't run fixproto + STMP_FIXPROTO = + + LIB2FUNCS_EXTRA = _udivsi3.c _divsi3.c _umodsi3.c _modsi3.c + CRIS_LIB1CSRC = $(srcdir)/config/cris/arit.c + + FPBIT = tmplibgcc_fp_bit.c + DPBIT = dp-bit.c + + dp-bit.c: $(srcdir)/config/fp-bit.c + echo '#define FLOAT_BIT_ORDER_MISMATCH' > dp-bit.c + cat $(srcdir)/config/fp-bit.c >> dp-bit.c + + # Use another name to avoid confusing SUN make, if support for + # it is reinstated elsewhere. Prefixed with "tmplibgcc" means + # "make clean" will wipe it. We define a few L_ thingies + # because we can't select them individually through FPBIT_FUNCS; + # see above. + tmplibgcc_fp_bit.c: $(srcdir)/config/fp-bit.c + echo '#define FLOAT_BIT_ORDER_MISMATCH' > $@ + echo '#define FLOAT' >> $@ + cat $(srcdir)/config/fp-bit.c >> $@ + + # The fixed-point arithmetic code is in one file, arit.c, + # similar to libgcc2.c (or the old libgcc1.c). We need to + # "split it up" with one file per define. + $(LIB2FUNCS_EXTRA): $(CRIS_LIB1CSRC) + name=`echo $@ | sed -e 's,.*/,,' | sed -e 's,.c$$,,'`; \ + echo "#define L$$name" > tmp-$@ \ + && echo '#include "$<"' >> tmp-$@ \ + && mv -f tmp-$@ $@ diff -Nrc3pad gcc-3.0.4/gcc/config/cris/t-elfmulti gcc-3.1/gcc/config/cris/t-elfmulti *** gcc-3.0.4/gcc/config/cris/t-elfmulti Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/cris/t-elfmulti Thu Oct 11 17:02:36 2001 *************** *** 0 **** --- 1,16 ---- + LIB2FUNCS_STATIC_EXTRA = $(srcdir)/config/cris/mulsi3.asm + EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o + MULTILIB_OPTIONS = march=v10 + MULTILIB_DIRNAMES = v10 + MULTILIB_MATCHES = \ + march?v10=mcpu?etrax100lx \ + march?v10=mcpu?ng \ + march?v10=march?etrax100lx \ + march?v10=march?ng \ + march?v10=march?v11 \ + march?v10=mcpu?v11 \ + march?v10=mcpu?v10 + MULTILIB_EXTRA_OPTS = mbest-lib-options + INSTALL_LIBGCC = install-multilib + LIBGCC = stmp-multilib + CRTSTUFF_T_CFLAGS = $(LIBGCC2_CFLAGS) -moverride-best-lib-options diff -Nrc3pad gcc-3.0.4/gcc/config/cris/t-linux gcc-3.1/gcc/config/cris/t-linux *** gcc-3.0.4/gcc/config/cris/t-linux Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/cris/t-linux Wed May 8 23:23:21 2002 *************** *** 0 **** --- 1,2 ---- + TARGET_LIBGCC2_CFLAGS += -fPIC + CRTSTUFF_T_CFLAGS_S = $(TARGET_LIBGCC2_CFLAGS) diff -Nrc3pad gcc-3.0.4/gcc/config/d30v/d30v-protos.h gcc-3.1/gcc/config/d30v/d30v-protos.h *** gcc-3.0.4/gcc/config/d30v/d30v-protos.h Mon Nov 27 06:18:24 2000 --- gcc-3.1/gcc/config/d30v/d30v-protos.h Sun Nov 4 02:12:08 2001 *************** extern rtx d30v_expand_builtin_va_arg PA *** 110,118 **** #endif /* RTX_CODE */ #endif /* TREE_CODE */ - extern void d30v_function_prologue PARAMS ((FILE *, int)); extern void d30v_expand_prologue PARAMS ((void)); - extern void d30v_function_epilogue PARAMS ((FILE *, int)); extern void d30v_expand_epilogue PARAMS ((void)); extern void d30v_function_profiler PARAMS ((FILE *, int)); #ifdef RTX_CODE --- 110,116 ---- *************** extern rtx d30v_legitimize_address PARAM *** 128,140 **** enum machine_mode, int)); extern int d30v_mode_dependent_address_p PARAMS ((rtx)); extern rtx d30v_emit_comparison PARAMS ((int, rtx, rtx, rtx)); ! extern char *d30v_move_2words PARAMS ((rtx *, rtx)); extern int d30v_emit_cond_move PARAMS ((rtx, rtx, rtx, rtx)); extern void d30v_machine_dependent_reorg PARAMS ((rtx)); - extern int d30v_adjust_cost PARAMS ((rtx, rtx, rtx, int)); extern rtx d30v_return_addr PARAMS ((void)); #endif extern void d30v_init_expanders PARAMS ((void)); /* External variables referenced */ --- 126,138 ---- enum machine_mode, int)); extern int d30v_mode_dependent_address_p PARAMS ((rtx)); extern rtx d30v_emit_comparison PARAMS ((int, rtx, rtx, rtx)); ! extern const char *d30v_move_2words PARAMS ((rtx *, rtx)); extern int d30v_emit_cond_move PARAMS ((rtx, rtx, rtx, rtx)); extern void d30v_machine_dependent_reorg PARAMS ((rtx)); extern rtx d30v_return_addr PARAMS ((void)); #endif extern void d30v_init_expanders PARAMS ((void)); + extern void debug_stack_info PARAMS ((d30v_stack_t *)); /* External variables referenced */ diff -Nrc3pad gcc-3.0.4/gcc/config/d30v/d30v.c gcc-3.1/gcc/config/d30v/d30v.c *** gcc-3.0.4/gcc/config/d30v/d30v.c Sat May 12 20:32:41 2001 --- gcc-3.1/gcc/config/d30v/d30v.c Thu Jan 3 17:40:00 2002 *************** *** 1,5 **** /* Definitions of target machine for Mitsubishi D30V. ! Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This file is part of GNU CC. --- 1,5 ---- /* Definitions of target machine for Mitsubishi D30V. ! Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This file is part of GNU CC. *************** *** 38,44 **** --- 38,47 ---- #include "except.h" #include "function.h" #include "toplev.h" + #include "integrate.h" #include "ggc.h" + #include "target.h" + #include "target-def.h" static void d30v_print_operand_memory_reference PARAMS ((FILE *, rtx)); static void d30v_build_long_insn PARAMS ((HOST_WIDE_INT, HOST_WIDE_INT, *************** static void d30v_add_gc_roots PARAMS ((v *** 47,52 **** --- 50,59 ---- static void d30v_init_machine_status PARAMS ((struct function *)); static void d30v_mark_machine_status PARAMS ((struct function *)); static void d30v_free_machine_status PARAMS ((struct function *)); + static void d30v_output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT)); + static void d30v_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT)); + static int d30v_adjust_cost PARAMS ((rtx, rtx, rtx, int)); + static int d30v_issue_rate PARAMS ((void)); /* Define the information needed to generate branch and scc insns. This is stored from the compare operation. */ *************** enum reg_class regno_reg_class[FIRST_PSE *** 76,82 **** --- 83,105 ---- /* Map class letter into register class */ enum reg_class reg_class_from_letter[256]; + + /* Initialize the GCC target structure. */ + #undef TARGET_ASM_ALIGNED_HI_OP + #define TARGET_ASM_ALIGNED_HI_OP "\t.hword\t" + #undef TARGET_ASM_ALIGNED_SI_OP + #define TARGET_ASM_ALIGNED_SI_OP "\t.word\t" + + #undef TARGET_ASM_FUNCTION_PROLOGUE + #define TARGET_ASM_FUNCTION_PROLOGUE d30v_output_function_prologue + #undef TARGET_ASM_FUNCTION_EPILOGUE + #define TARGET_ASM_FUNCTION_EPILOGUE d30v_output_function_epilogue + #undef TARGET_SCHED_ADJUST_COST + #define TARGET_SCHED_ADJUST_COST d30v_adjust_cost + #undef TARGET_SCHED_ISSUE_RATE + #define TARGET_SCHED_ISSUE_RATE d30v_issue_rate + struct gcc_target targetm = TARGET_INITIALIZER; /* Sometimes certain combinations of command options do not make sense on a particular target machine. You can define a macro *************** override_options () *** 183,189 **** if (ok_p && (hard_regno_mode_ok[(int)mode1][regno] != hard_regno_mode_ok[(int)mode2][regno])) ! error ("Bad modes_tieable_p for register %s, mode1 %s, mode2 %s", reg_names[regno], GET_MODE_NAME (mode1), GET_MODE_NAME (mode2)); } --- 206,212 ---- if (ok_p && (hard_regno_mode_ok[(int)mode1][regno] != hard_regno_mode_ok[(int)mode2][regno])) ! error ("bad modes_tieable_p for register %s, mode1 %s, mode2 %s", reg_names[regno], GET_MODE_NAME (mode1), GET_MODE_NAME (mode2)); } *************** override_options () *** 230,236 **** #if 0 { ! static char *names[] = REG_CLASS_NAMES; fprintf (stderr, "Register %s class is %s, can hold modes", reg_names[regno], names[class]); for (mode1 = VOIDmode; (int)mode1 < NUM_MACHINE_MODES; --- 253,259 ---- #if 0 { ! static const char *const names[] = REG_CLASS_NAMES; fprintf (stderr, "Register %s class is %s, can hold modes", reg_names[regno], names[class]); for (mode1 = VOIDmode; (int)mode1 < NUM_MACHINE_MODES; *************** d30v_stack_info () *** 1691,1697 **** /* Zero all fields */ info = zero_info; ! if (profile_flag) regs_ever_live[GPR_LINK] = 1; /* Determine if this is a stdarg function */ --- 1714,1720 ---- /* Zero all fields */ info = zero_info; ! if (current_function_profile) regs_ever_live[GPR_LINK] = 1; /* Determine if this is a stdarg function */ *************** d30v_function_arg_boundary (mode, type) *** 1935,1941 **** { int size = ((mode == BLKmode && type) ? int_size_in_bytes (type) ! : GET_MODE_SIZE (mode)); return (size > UNITS_PER_WORD) ? 2*UNITS_PER_WORD : UNITS_PER_WORD; } --- 1958,1964 ---- { int size = ((mode == BLKmode && type) ? int_size_in_bytes (type) ! : (int) GET_MODE_SIZE (mode)); return (size > UNITS_PER_WORD) ? 2*UNITS_PER_WORD : UNITS_PER_WORD; } *************** d30v_function_arg_boundary (mode, type) *** 1955,1961 **** register in which to pass the argument, or zero to pass the argument on the stack. ! For machines like the Vax and 68000, where normally all arguments are pushed, zero suffices as a definition. The usual way to make the ANSI library `stdarg.h' work on a machine where --- 1978,1984 ---- register in which to pass the argument, or zero to pass the argument on the stack. ! For machines like the VAX and 68000, where normally all arguments are pushed, zero suffices as a definition. The usual way to make the ANSI library `stdarg.h' work on a machine where *************** d30v_function_arg (cum, mode, type, name *** 1980,1986 **** { int size = ((mode == BLKmode && type) ? int_size_in_bytes (type) ! : GET_MODE_SIZE (mode)); int adjust = (size > UNITS_PER_WORD && (*cum & 1) != 0); rtx ret; --- 2003,2009 ---- { int size = ((mode == BLKmode && type) ? int_size_in_bytes (type) ! : (int) GET_MODE_SIZE (mode)); int adjust = (size > UNITS_PER_WORD && (*cum & 1) != 0); rtx ret; *************** d30v_function_arg_partial_nregs (cum, mo *** 2029,2035 **** { int bytes = ((mode == BLKmode) ? int_size_in_bytes (type) ! : GET_MODE_SIZE (mode)); int words = (bytes + UNITS_PER_WORD - 1) / UNITS_PER_WORD; int adjust = (bytes > UNITS_PER_WORD && (*cum & 1) != 0); int arg_num = *cum + adjust; --- 2052,2058 ---- { int bytes = ((mode == BLKmode) ? int_size_in_bytes (type) ! : (int) GET_MODE_SIZE (mode)); int words = (bytes + UNITS_PER_WORD - 1) / UNITS_PER_WORD; int adjust = (bytes > UNITS_PER_WORD && (*cum & 1) != 0); int arg_num = *cum + adjust; *************** d30v_function_arg_advance (cum, mode, ty *** 2092,2098 **** { int bytes = ((mode == BLKmode) ? int_size_in_bytes (type) ! : GET_MODE_SIZE (mode)); int words = D30V_ALIGN (bytes, UNITS_PER_WORD) / UNITS_PER_WORD; int adjust = (bytes > UNITS_PER_WORD && (*cum & 1) != 0); --- 2115,2121 ---- { int bytes = ((mode == BLKmode) ? int_size_in_bytes (type) ! : (int) GET_MODE_SIZE (mode)); int words = D30V_ALIGN (bytes, UNITS_PER_WORD) / UNITS_PER_WORD; int adjust = (bytes > UNITS_PER_WORD && (*cum & 1) != 0); *************** d30v_expand_builtin_va_arg(valist, type) *** 2272,2278 **** build_int_2 (1, 0)); emit_cmp_and_jump_insns (expand_expr (t, NULL_RTX, QImode, EXPAND_NORMAL), ! GEN_INT (0), EQ, const1_rtx, QImode, 1, 1, lab_false); t = build (POSTINCREMENT_EXPR, TREE_TYPE (arg_num), arg_num, --- 2295,2301 ---- build_int_2 (1, 0)); emit_cmp_and_jump_insns (expand_expr (t, NULL_RTX, QImode, EXPAND_NORMAL), ! GEN_INT (0), EQ, const1_rtx, QImode, 1, lab_false); t = build (POSTINCREMENT_EXPR, TREE_TYPE (arg_num), arg_num, *************** d30v_expand_builtin_va_arg(valist, type) *** 2316,2411 **** return ptr_rtx; } ! /* A C compound statement that outputs the assembler code for entry to a ! function. The prologue is responsible for setting up the stack frame, ! initializing the frame pointer register, saving registers that must be ! saved, and allocating SIZE additional bytes of storage for the local ! variables. SIZE is an integer. FILE is a stdio stream to which the ! assembler code should be output. ! ! The label for the beginning of the function need not be output by this ! macro. That has already been done when the macro is run. ! ! To determine which registers to save, the macro can refer to the array ! `regs_ever_live': element R is nonzero if hard register R is used anywhere ! within the function. This implies the function prologue should save ! register R, provided it is not one of the call-used registers. ! (`FUNCTION_EPILOGUE' must likewise use `regs_ever_live'.) ! ! On machines that have "register windows", the function entry code does not ! save on the stack the registers that are in the windows, even if they are ! supposed to be preserved by function calls; instead it takes appropriate ! steps to "push" the register stack, if any non-call-used registers are used ! in the function. ! ! On machines where functions may or may not have frame-pointers, the function ! entry code must vary accordingly; it must set up the frame pointer if one is ! wanted, and not otherwise. To determine whether a frame pointer is in ! wanted, the macro can refer to the variable `frame_pointer_needed'. The ! variable's value will be 1 at run time in a function that needs a frame ! pointer. *Note Elimination::. ! ! The function entry code is responsible for allocating any stack space ! required for the function. This stack space consists of the regions listed ! below. In most cases, these regions are allocated in the order listed, with ! the last listed region closest to the top of the stack (the lowest address ! if `STACK_GROWS_DOWNWARD' is defined, and the highest address if it is not ! defined). You can use a different order for a machine if doing so is more ! convenient or required for compatibility reasons. Except in cases where ! required by standard or by a debugger, there is no reason why the stack ! layout used by GCC need agree with that used by other compilers for a ! machine. ! ! * A region of `current_function_pretend_args_size' bytes of ! uninitialized space just underneath the first argument ! arriving on the stack. (This may not be at the very start of ! the allocated stack region if the calling sequence has pushed ! anything else since pushing the stack arguments. But ! usually, on such machines, nothing else has been pushed yet, ! because the function prologue itself does all the pushing.) ! This region is used on machines where an argument may be ! passed partly in registers and partly in memory, and, in some ! cases to support the features in `varargs.h' and `stdargs.h'. ! ! * An area of memory used to save certain registers used by the ! function. The size of this area, which may also include ! space for such things as the return address and pointers to ! previous stack frames, is machine-specific and usually ! depends on which registers have been used in the function. ! Machines with register windows often do not require a save ! area. ! ! * A region of at least SIZE bytes, possibly rounded up to an ! allocation boundary, to contain the local variables of the ! function. On some machines, this region and the save area ! may occur in the opposite order, with the save area closer to ! the top of the stack. ! ! * Optionally, when `ACCUMULATE_OUTGOING_ARGS' is defined, a ! region of `current_function_outgoing_args_size' bytes to be ! used for outgoing argument lists of the function. *Note ! Stack Arguments::. ! ! Normally, it is necessary for the macros `FUNCTION_PROLOGUE' and ! `FUNCTION_EPILOGUE' to treat leaf functions specially. The C variable ! `leaf_function' is nonzero for such a function. */ ! /* For the d30v, move all of the prologue processing into separate insns. */ ! void ! d30v_function_prologue (stream, size) FILE *stream ATTRIBUTE_UNUSED; ! int size ATTRIBUTE_UNUSED; { } ! /* Called after register allocation to add any instructions needed for the ! prologue. Using a prologue insn is favored compared to putting all of the ! instructions in the FUNCTION_PROLOGUE macro, since it allows the scheduler ! to intermix instructions with the saves of the caller saved registers. In ! some cases, it might be necessary to emit a barrier instruction as the last ! insn to prevent such scheduling. */ void d30v_expand_prologue () --- 2339,2370 ---- return ptr_rtx; } + /* Generate the assembly code for function entry. FILE is a stdio + stream to output the code to. SIZE is an int: how many units of + temporary storage to allocate. ! Refer to the array `regs_ever_live' to determine which registers to ! save; `regs_ever_live[I]' is nonzero if register number I is ever ! used in the function. This function is responsible for knowing ! which registers should not be saved even if used. */ ! static void ! d30v_output_function_prologue (stream, size) FILE *stream ATTRIBUTE_UNUSED; ! HOST_WIDE_INT size ATTRIBUTE_UNUSED; { + /* For the d30v, move all of the prologue processing into separate + insns. */ } ! /* Called after register allocation to add any instructions needed for ! the prologue. Using a prologue insn is favored compared to putting ! all of the instructions in output_function_prologue (), since it ! allows the scheduler to intermix instructions with the saves of the ! caller saved registers. In some cases, it might be necessary to ! emit a barrier instruction as the last insn to prevent such ! scheduling. */ void d30v_expand_prologue () *************** d30v_expand_prologue () *** 2487,2546 **** } ! /* A C compound statement that outputs the assembler code for exit from a ! function. The epilogue is responsible for restoring the saved registers and ! stack pointer to their values when the function was called, and returning ! control to the caller. This macro takes the same arguments as the macro ! `FUNCTION_PROLOGUE', and the registers to restore are determined from ! `regs_ever_live' and `CALL_USED_REGISTERS' in the same way. ! ! On some machines, there is a single instruction that does all the work of ! returning from the function. On these machines, give that instruction the ! name `return' and do not define the macro `FUNCTION_EPILOGUE' at all. ! ! Do not define a pattern named `return' if you want the `FUNCTION_EPILOGUE' ! to be used. If you want the target switches to control whether return ! instructions or epilogues are used, define a `return' pattern with a ! validity condition that tests the target switches appropriately. If the ! `return' pattern's validity condition is false, epilogues will be used. ! ! On machines where functions may or may not have frame-pointers, the function ! exit code must vary accordingly. Sometimes the code for these two cases is ! completely different. To determine whether a frame pointer is wanted, the ! macro can refer to the variable `frame_pointer_needed'. The variable's ! value will be 1 when compiling a function that needs a frame pointer. ! ! Normally, `FUNCTION_PROLOGUE' and `FUNCTION_EPILOGUE' must treat leaf ! functions specially. The C variable `leaf_function' is nonzero for such a ! function. *Note Leaf Functions::. ! ! On some machines, some functions pop their arguments on exit while others ! leave that for the caller to do. For example, the 68020 when given `-mrtd' ! pops arguments in functions that take a fixed number of arguments. ! Your definition of the macro `RETURN_POPS_ARGS' decides which functions pop ! their own arguments. `FUNCTION_EPILOGUE' needs to know what was decided. ! The variable that is called `current_function_pops_args' is the number of ! bytes of its arguments that a function should pop. *Note Scalar Return::. */ ! /* For the d30v, move all processing to be as insns, but do any cleanup ! here, since it is done after handling all of the insns. */ ! void ! d30v_function_epilogue (stream, size) FILE *stream ATTRIBUTE_UNUSED; ! int size ATTRIBUTE_UNUSED; { d30v_stack_cache = (d30v_stack_t *)0; /* reset stack cache */ } ! /* Called after register allocation to add any instructions needed for the ! epilogue. Using a epilogue insn is favored compared to putting all of the ! instructions in the FUNCTION_PROLOGUE macro, since it allows the scheduler ! to intermix instructions with the saves of the caller saved registers. In ! some cases, it might be necessary to emit a barrier instruction as the last ! insn to prevent such scheduling. */ void d30v_expand_epilogue () --- 2446,2478 ---- } ! /* This function generates the assembly code for function exit. ! Args are as for output_function_prologue (). ! The function epilogue should not depend on the current stack ! pointer! It should use the frame pointer only. This is mandatory ! because of alloca; we also take advantage of it to omit stack ! adjustments before returning. */ ! static void ! d30v_output_function_epilogue (stream, size) FILE *stream ATTRIBUTE_UNUSED; ! HOST_WIDE_INT size ATTRIBUTE_UNUSED; { + /* For the d30v, move all processing to be as insns, but do any + cleanup here, since it is done after handling all of the insns. */ d30v_stack_cache = (d30v_stack_t *)0; /* reset stack cache */ } ! /* Called after register allocation to add any instructions needed for ! the epilogue. Using an epilogue insn is favored compared to putting ! all of the instructions in output_function_prologue(), since it ! allows the scheduler to intermix instructions with the saves of the ! caller saved registers. In some cases, it might be necessary to ! emit a barrier instruction as the last insn to prevent such ! scheduling. */ void d30v_expand_epilogue () *************** d30v_split_double (value, p_high, p_low) *** 2667,2676 **** switch (GET_CODE (value)) { case SUBREG: ! offset = SUBREG_WORD (value); ! value = SUBREG_REG (value); ! if (GET_CODE (value) != REG) abort (); /* fall through */ --- 2599,2611 ---- switch (GET_CODE (value)) { case SUBREG: ! if (GET_CODE (SUBREG_REG (value)) != REG) abort (); + offset = subreg_regno_offset (REGNO (SUBREG_REG (value)), + GET_MODE (SUBREG_REG (value)), + SUBREG_BYTE (value), + GET_MODE (value)); + value = SUBREG_REG (value); /* fall through */ *************** d30v_print_operand_address (stream, x) *** 2738,2744 **** return; } ! fatal_insn ("Bad insn to d30v_print_operand_address:", x); } --- 2673,2679 ---- return; } ! fatal_insn ("bad insn to d30v_print_operand_address:", x); } *************** d30v_print_operand_memory_reference (str *** 2755,2761 **** switch (GET_CODE (x)) { default: ! fatal_insn ("Bad insn to d30v_print_operand_memory_reference:", x); break; case SUBREG: --- 2690,2696 ---- switch (GET_CODE (x)) { default: ! fatal_insn ("bad insn to d30v_print_operand_memory_reference:", x); break; case SUBREG: *************** d30v_print_operand_memory_reference (str *** 2790,2801 **** else { ! char *suffix = ""; int offset0 = 0; if (GET_CODE (x0) == SUBREG) { ! offset0 = SUBREG_WORD (x0); x0 = SUBREG_REG (x0); } --- 2725,2739 ---- else { ! const char *suffix = ""; int offset0 = 0; if (GET_CODE (x0) == SUBREG) { ! offset0 = subreg_regno_offset (REGNO (SUBREG_REG (x0)), ! GET_MODE (SUBREG_REG (x0)), ! SUBREG_BYTE (x0), ! GET_MODE (x0)); x0 = SUBREG_REG (x0); } *************** d30v_print_operand_memory_reference (str *** 2813,2819 **** if (GET_CODE (x0) == REG && GPR_P (REGNO (x0))) fprintf (stream, "%s%s", reg_names[REGNO (x0) + offset0], suffix); else ! fatal_insn ("Bad insn to d30v_print_operand_memory_reference:", x); } fputs (",", stream); --- 2751,2757 ---- if (GET_CODE (x0) == REG && GPR_P (REGNO (x0))) fprintf (stream, "%s%s", reg_names[REGNO (x0) + offset0], suffix); else ! fatal_insn ("bad insn to d30v_print_operand_memory_reference:", x); } fputs (",", stream); *************** d30v_print_operand_memory_reference (str *** 2828,2837 **** switch (GET_CODE (x1)) { case SUBREG: ! offset1 = SUBREG_WORD (x1); x1 = SUBREG_REG (x1); if (GET_CODE (x1) != REG) ! fatal_insn ("Bad insn to d30v_print_operand_memory_reference:", x); /* fall through */ case REG: --- 2766,2778 ---- switch (GET_CODE (x1)) { case SUBREG: ! offset1 = subreg_regno_offset (REGNO (SUBREG_REG (x1)), ! GET_MODE (SUBREG_REG (x1)), ! SUBREG_BYTE (x1), ! GET_MODE (x1)); x1 = SUBREG_REG (x1); if (GET_CODE (x1) != REG) ! fatal_insn ("bad insn to d30v_print_operand_memory_reference:", x); /* fall through */ case REG: *************** d30v_print_operand_memory_reference (str *** 2849,2855 **** break; default: ! fatal_insn ("Bad insn to d30v_print_operand_memory_reference:", x); } } --- 2790,2796 ---- break; default: ! fatal_insn ("bad insn to d30v_print_operand_memory_reference:", x); } } *************** d30v_print_operand (stream, x, letter) *** 2917,2923 **** case 'f': /* Print a SF floating constant as an int */ if (GET_CODE (x) != CONST_DOUBLE) ! fatal_insn ("Bad insn to d30v_print_operand, 'f' modifier:", x); REAL_VALUE_FROM_CONST_DOUBLE (rv, x); REAL_VALUE_TO_TARGET_SINGLE (rv, num); --- 2858,2864 ---- case 'f': /* Print a SF floating constant as an int */ if (GET_CODE (x) != CONST_DOUBLE) ! fatal_insn ("bad insn to d30v_print_operand, 'f' modifier:", x); REAL_VALUE_FROM_CONST_DOUBLE (rv, x); REAL_VALUE_TO_TARGET_SINGLE (rv, num); *************** d30v_print_operand (stream, x, letter) *** 2926,2939 **** case 'A': /* Print accumulator number without an `a' in front of it. */ if (GET_CODE (x) != REG || !ACCUM_P (REGNO (x))) ! fatal_insn ("Bad insn to d30v_print_operand, 'A' modifier:", x); putc ('0' + REGNO (x) - ACCUM_FIRST, stream); break; case 'M': /* Print a memory reference for ld/st */ if (GET_CODE (x) != MEM) ! fatal_insn ("Bad insn to d30v_print_operand, 'M' modifier:", x); d30v_print_operand_memory_reference (stream, XEXP (x, 0)); break; --- 2867,2880 ---- case 'A': /* Print accumulator number without an `a' in front of it. */ if (GET_CODE (x) != REG || !ACCUM_P (REGNO (x))) ! fatal_insn ("bad insn to d30v_print_operand, 'A' modifier:", x); putc ('0' + REGNO (x) - ACCUM_FIRST, stream); break; case 'M': /* Print a memory reference for ld/st */ if (GET_CODE (x) != MEM) ! fatal_insn ("bad insn to d30v_print_operand, 'M' modifier:", x); d30v_print_operand_memory_reference (stream, XEXP (x, 0)); break; *************** d30v_print_operand (stream, x, letter) *** 2987,2993 **** fputs ((letter == 'T') ? "tnz" : "tzr", stream); else ! fatal_insn ("Bad insn to print_operand, 'F' or 'T' modifier:", x); break; case 'B': /* emit offset single bit to change */ --- 2928,2934 ---- fputs ((letter == 'T') ? "tnz" : "tzr", stream); else ! fatal_insn ("bad insn to print_operand, 'F' or 'T' modifier:", x); break; case 'B': /* emit offset single bit to change */ *************** d30v_print_operand (stream, x, letter) *** 2998,3011 **** fprintf (stream, "%d", 31 - log); else ! fatal_insn ("Bad insn to print_operand, 'B' modifier:", x); break; case 'E': /* Print u if this is zero extend, nothing if sign extend. */ if (GET_CODE (x) == ZERO_EXTEND) putc ('u', stream); else if (GET_CODE (x) != SIGN_EXTEND) ! fatal_insn ("Bad insn to print_operand, 'E' modifier:", x); break; case 'R': /* Return appropriate cmp instruction for relational test. */ --- 2939,2952 ---- fprintf (stream, "%d", 31 - log); else ! fatal_insn ("bad insn to print_operand, 'B' modifier:", x); break; case 'E': /* Print u if this is zero extend, nothing if sign extend. */ if (GET_CODE (x) == ZERO_EXTEND) putc ('u', stream); else if (GET_CODE (x) != SIGN_EXTEND) ! fatal_insn ("bad insn to print_operand, 'E' modifier:", x); break; case 'R': /* Return appropriate cmp instruction for relational test. */ *************** d30v_print_operand (stream, x, letter) *** 3023,3029 **** case GEU: fputs ("cmpuge", stream); break; default: ! fatal_insn ("Bad insn to print_operand, 'R' modifier:", x); } break; --- 2964,2970 ---- case GEU: fputs ("cmpuge", stream); break; default: ! fatal_insn ("bad insn to print_operand, 'R' modifier:", x); } break; *************** d30v_print_operand (stream, x, letter) *** 3032,3038 **** fprintf (stream, "%d", (int) (32 - INTVAL (x))); else ! fatal_insn ("Bad insn to print_operand, 's' modifier:", x); break; case 'S': /* Subtract 32. */ --- 2973,2979 ---- fprintf (stream, "%d", (int) (32 - INTVAL (x))); else ! fatal_insn ("bad insn to print_operand, 's' modifier:", x); break; case 'S': /* Subtract 32. */ *************** d30v_print_operand (stream, x, letter) *** 3040,3046 **** fprintf (stream, "%d", (int)(INTVAL (x) - 32)); else ! fatal_insn ("Bad insn to print_operand, 's' modifier:", x); break; --- 2981,2987 ---- fprintf (stream, "%d", (int)(INTVAL (x) - 32)); else ! fatal_insn ("bad insn to print_operand, 's' modifier:", x); break; *************** d30v_print_operand (stream, x, letter) *** 3069,3075 **** d30v_print_operand_address (stream, x); else ! fatal_insn ("Bad insn in d30v_print_operand, 0 case", x); return; --- 3010,3016 ---- d30v_print_operand_address (stream, x); else ! fatal_insn ("bad insn in d30v_print_operand, 0 case", x); return; *************** d30v_print_operand (stream, x, letter) *** 3077,3083 **** { char buf[80]; ! sprintf (buf, "Invalid asm template character '%%%c'", letter); fatal_insn (buf, x); } } --- 3018,3024 ---- { char buf[80]; ! sprintf (buf, "invalid asm template character '%%%c'", letter); fatal_insn (buf, x); } } *************** d30v_emit_comparison (test_int, result, *** 3431,3437 **** /* Return appropriate code to move 2 words. Since DImode registers must start on even register numbers, there is no possibility of overlap. */ ! char * d30v_move_2words (operands, insn) rtx operands[]; rtx insn; --- 3372,3378 ---- /* Return appropriate code to move 2 words. Since DImode registers must start on even register numbers, there is no possibility of overlap. */ ! const char * d30v_move_2words (operands, insn) rtx operands[]; rtx insn; *************** d30v_move_2words (operands, insn) *** 3468,3474 **** && GPR_P (REGNO (operands[1]))) return "st2w %1,%M0"; ! fatal_insn ("Bad call to d30v_move_2words", insn); } --- 3409,3415 ---- && GPR_P (REGNO (operands[1]))) return "st2w %1,%M0"; ! fatal_insn ("bad call to d30v_move_2words", insn); } *************** d30v_machine_dependent_reorg (insn) *** 3561,3567 **** /* For the d30v, try to insure that the source operands for a load/store are set 2 cycles before the memory reference. */ ! int d30v_adjust_cost (insn, link, dep_insn, cost) rtx insn; rtx link ATTRIBUTE_UNUSED; --- 3502,3508 ---- /* For the d30v, try to insure that the source operands for a load/store are set 2 cycles before the memory reference. */ ! static int d30v_adjust_cost (insn, link, dep_insn, cost) rtx insn; rtx link ATTRIBUTE_UNUSED; *************** d30v_adjust_cost (insn, link, dep_insn, *** 3582,3594 **** || (GET_CODE (mem = SET_DEST (set_insn)) == MEM && reg_mentioned_p (reg, XEXP (mem, 0)))) { ! return cost + ((HAIFA_P) ? 2 : 4); } } return cost; } /* Routine to allocate, mark and free a per-function, machine specific structure. */ --- 3523,3544 ---- || (GET_CODE (mem = SET_DEST (set_insn)) == MEM && reg_mentioned_p (reg, XEXP (mem, 0)))) { ! return cost + 2; } } return cost; } + /* Function which returns the number of insns that can be + scheduled in the same machine cycle. This must be constant + over an entire compilation. The default is 1. */ + static int + d30v_issue_rate () + { + return 2; + } + /* Routine to allocate, mark and free a per-function, machine specific structure. */ *************** d30v_mark_machine_status (p) *** 3608,3614 **** if (p->machine == NULL) return; - ggc_mark_rtx (p->machine->ra_rtx); ggc_mark_rtx (p->machine->eh_epilogue_sp_ofs); } --- 3558,3563 ---- *************** d30v_init_expanders () *** 3646,3668 **** rtx d30v_return_addr () { ! rtx ret; ! ! ret = cfun->machine->ra_rtx; ! ! if (ret == NULL) ! { ! rtx init; ! ! cfun->machine->ra_rtx = ret = gen_reg_rtx (Pmode); ! ! init = gen_rtx (SET, VOIDmode, ret, gen_rtx (REG, Pmode, GPR_LINK)); ! push_topmost_sequence (); ! emit_insn_after (init, get_insns ()); ! pop_topmost_sequence (); ! } ! ! return ret; } /* Called to register all of our global variables with the garbage --- 3595,3601 ---- rtx d30v_return_addr () { ! return get_hard_reg_initial_val (Pmode, GPR_LINK); } /* Called to register all of our global variables with the garbage diff -Nrc3pad gcc-3.0.4/gcc/config/d30v/d30v.h gcc-3.1/gcc/config/d30v/d30v.h *** gcc-3.0.4/gcc/config/d30v/d30v.h Mon Apr 16 18:25:42 2001 --- gcc-3.1/gcc/config/d30v/d30v.h Fri Apr 12 07:49:14 2002 *************** *** 1,5 **** /* Definitions of target machine for Mitsubishi D30V. ! Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Cygnus Solutions. --- 1,5 ---- /* Definitions of target machine for Mitsubishi D30V. ! Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Cygnus Solutions. *************** *** 28,150 **** #define D30V_ALIGN(addr,align) (((addr) + (align) - 1) & ~((align) - 1)) - /* Set up System V.4 (aka ELF) defaults. */ - #include "svr4.h" - - /* Driver configuration */ ! /* A C expression which determines whether the option `-CHAR' takes arguments. ! The value should be the number of arguments that option takes-zero, for many ! options. ! ! By default, this macro is defined to handle the standard options properly. ! You need not define it unless you wish to add additional options which take ! arguments. ! ! Defined in svr4.h. */ /* #define SWITCH_TAKES_ARG(CHAR) */ ! /* A C expression which determines whether the option `-NAME' takes arguments. ! The value should be the number of arguments that option takes-zero, for many ! options. This macro rather than `SWITCH_TAKES_ARG' is used for ! multi-character option names. ! ! By default, this macro is defined as `DEFAULT_WORD_SWITCH_TAKES_ARG', which ! handles the standard options properly. You need not define ! `WORD_SWITCH_TAKES_ARG' unless you wish to add additional options which take ! arguments. Any redefinition should call `DEFAULT_WORD_SWITCH_TAKES_ARG' and ! then check for additional options. ! ! Defined in svr4.h. */ /* #define WORD_SWITCH_TAKES_ARG(NAME) */ ! /* A string-valued C expression which is nonempty if the linker needs a space ! between the `-L' or `-o' option and its argument. ! ! If this macro is not defined, the default value is 0. */ ! /* #define SWITCHES_NEED_SPACES "" */ ! ! /* A C string constant that tells the GNU CC driver program options to pass to ! CPP. It can also specify how to translate options you give to GNU CC into ! options for GNU CC to pass to the CPP. ! ! Do not define this macro if it does not need to do anything. */ ! /* #define CPP_SPEC "" */ ! ! /* If this macro is defined, the preprocessor will not define the builtin macro ! `__SIZE_TYPE__'. The macro `__SIZE_TYPE__' must then be defined by ! `CPP_SPEC' instead. ! ! This should be defined if `SIZE_TYPE' depends on target dependent flags ! which are not accessible to the preprocessor. Otherwise, it should not be ! defined. */ ! /* #define NO_BUILTIN_SIZE_TYPE */ ! ! /* If this macro is defined, the preprocessor will not define the builtin macro ! `__PTRDIFF_TYPE__'. The macro `__PTRDIFF_TYPE__' must then be defined by ! `CPP_SPEC' instead. ! ! This should be defined if `PTRDIFF_TYPE' depends on target dependent flags ! which are not accessible to the preprocessor. Otherwise, it should not be ! defined. */ ! /* #define NO_BUILTIN_PTRDIFF_TYPE */ ! ! /* A C string constant that tells the GNU CC driver program options to pass to ! CPP. By default, this macro is defined to pass the option ! `-D__CHAR_UNSIGNED__' to CPP if `char' will be treated as `unsigned char' by ! `cc1'. ! ! Do not define this macro unless you need to override the default definition. */ ! /* #if DEFAULT_SIGNED_CHAR ! #define SIGNED_CHAR_SPEC "%{funsigned-char:-D__CHAR_UNSIGNED__}" ! #else ! #define SIGNED_CHAR_SPEC "%{!fsigned-char:-D__CHAR_UNSIGNED__}" ! #endif */ ! ! /* A C string constant that tells the GNU CC driver program options to pass to ! `cc1'. It can also specify how to translate options you give to GNU CC into ! options for GNU CC to pass to the `cc1'. ! ! Do not define this macro if it does not need to do anything. */ ! /* #define CC1_SPEC "" */ ! ! /* A C string constant that tells the GNU CC driver program options to pass to ! `cc1plus'. It can also specify how to translate options you give to GNU CC ! into options for GNU CC to pass to the `cc1plus'. ! ! Do not define this macro if it does not need to do anything. */ ! /* #define CC1PLUS_SPEC "" */ ! ! /* A C string constant that tells the GNU CC driver program options to pass to ! the assembler. It can also specify how to translate options you give to GNU ! CC into options for GNU CC to pass to the assembler. See the file `sun3.h' ! for an example of this. ! ! Do not define this macro if it does not need to do anything. ! ! Defined in svr4.h. */ #undef ASM_SPEC #define ASM_SPEC "\ %{!mno-asm-optimize: %{O*: %{!O0: -O} %{O0: %{masm-optimize: -O}}}} \ %{v} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*}" ! /* A C string constant that tells the GNU CC driver program how to run any ! programs which cleanup after the normal assembler. Normally, this is not ! needed. See the file `mips.h' for an example of this. ! ! Do not define this macro if it does not need to do anything. ! ! Defined in svr4.h. */ /* #define ASM_FINAL_SPEC "" */ ! /* A C string constant that tells the GNU CC driver program options to pass to ! the linker. It can also specify how to translate options you give to GNU CC ! into options for GNU CC to pass to the linker. ! ! Do not define this macro if it does not need to do anything. ! ! Defined in svr4.h. */ #undef LINK_SPEC #define LINK_SPEC "\ %{h*} %{v:-V} \ --- 28,51 ---- #define D30V_ALIGN(addr,align) (((addr) + (align) - 1) & ~((align) - 1)) /* Driver configuration */ ! /* Defined in svr4.h. */ /* #define SWITCH_TAKES_ARG(CHAR) */ ! /* Defined in svr4.h. */ /* #define WORD_SWITCH_TAKES_ARG(NAME) */ ! /* Defined in svr4.h. */ #undef ASM_SPEC #define ASM_SPEC "\ %{!mno-asm-optimize: %{O*: %{!O0: -O} %{O0: %{masm-optimize: -O}}}} \ %{v} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*}" ! /* Defined in svr4.h. */ /* #define ASM_FINAL_SPEC "" */ ! /* Defined in svr4.h. */ #undef LINK_SPEC #define LINK_SPEC "\ %{h*} %{v:-V} \ *************** *** 157,403 **** %{Qy:} %{!Qn:-Qy} \ %{mextmem: -m d30v_e} %{mextmemory: -m d30v_e} %{monchip: -m d30v_o}" ! /* Another C string constant used much like `LINK_SPEC'. The difference ! between the two is that `LIB_SPEC' is used at the end of the command given ! to the linker. ! ! If this macro is not defined, a default is provided that loads the standard ! C library from the usual place. See `gcc.c'. ! ! Defined in svr4.h. */ #undef LIB_SPEC #define LIB_SPEC "--start-group -lsim -lc --end-group" ! /* Another C string constant that tells the GNU CC driver program how and when ! to place a reference to `libgcc.a' into the linker command line. This ! constant is placed both before and after the value of `LIB_SPEC'. ! ! If this macro is not defined, the GNU CC driver provides a default that ! passes the string `-lgcc' to the linker unless the `-shared' option is ! specified. */ ! /* #define LIBGCC_SPEC "" */ ! ! /* Another C string constant used much like `LINK_SPEC'. The difference ! between the two is that `STARTFILE_SPEC' is used at the very beginning of ! the command given to the linker. ! ! If this macro is not defined, a default is provided that loads the standard ! C startup file from the usual place. See `gcc.c'. ! ! Defined in svr4.h. */ ! #undef STARTFILE_SPEC #define STARTFILE_SPEC "crt0%O%s crtbegin%O%s" ! /* Another C string constant used much like `LINK_SPEC'. The difference ! between the two is that `ENDFILE_SPEC' is used at the very end of the ! command given to the linker. ! ! Do not define this macro if it does not need to do anything. ! ! Defined in svr4.h. */ ! #undef ENDFILE_SPEC #define ENDFILE_SPEC "crtend%O%s" ! /* Define this macro if the driver program should find the library `libgcc.a' ! itself and should not pass `-L' options to the linker. If you do not define ! this macro, the driver program will pass the argument `-lgcc' to tell the ! linker to do the search and will pass `-L' options to it. */ ! /* #define LINK_LIBGCC_SPECIAL */ ! ! /* Define this macro if the driver program should find the library `libgcc.a'. ! If you do not define this macro, the driver program will pass the argument ! `-lgcc' to tell the linker to do the search. This macro is similar to ! `LINK_LIBGCC_SPECIAL', except that it does not affect `-L' options. */ ! /* #define LINK_LIBGCC_SPECIAL_1 */ ! ! /* Define this macro to provide additional specifications to put in the `specs' ! file that can be used in various specifications like `CC1_SPEC'. ! ! The definition should be an initializer for an array of structures, ! containing a string constant, that defines the specification name, and a ! string constant that provides the specification. ! ! Do not define this macro if it does not need to do anything. */ ! /* #define EXTRA_SPECS {{}} */ ! ! /* Define this macro as a C expression for the initializer of an array of ! string to tell the driver program which options are defaults for this target ! and thus do not need to be handled specially when using `MULTILIB_OPTIONS'. ! ! Do not define this macro if `MULTILIB_OPTIONS' is not defined in the target ! makefile fragment or if none of the options listed in `MULTILIB_OPTIONS' are ! set by default. *Note Target Fragment::. */ ! /* #define MULTILIB_DEFAULTS {} */ ! ! /* Define this macro to tell `gcc' that it should only translate a `-B' prefix ! into a `-L' linker option if the prefix indicates an absolute file name. */ ! /* #define RELATIVE_PREFIX_NOT_LINKDIR */ ! ! /* Define this macro as a C string constant if you wish to override the ! standard choice of `/usr/local/lib/gcc-lib/' as the default prefix to try ! when searching for the executable files of the compiler. */ ! /* #define STANDARD_EXEC_PREFIX "" */ ! ! /* If defined, this macro is an additional prefix to try after ! `STANDARD_EXEC_PREFIX'. `MD_EXEC_PREFIX' is not searched when the `-b' ! option is used, or the compiler is built as a cross compiler. ! ! Defined in svr4.h for host compilers. */ /* #define MD_EXEC_PREFIX "" */ ! /* Define this macro as a C string constant if you wish to override the ! standard choice of `/usr/local/lib/' as the default prefix to try when ! searching for startup files such as `crt0.o'. */ ! /* #define STANDARD_STARTFILE_PREFIX "" */ ! ! /* If defined, this macro supplies an additional prefix to try after the ! standard prefixes. `MD_EXEC_PREFIX' is not searched when the `-b' option is ! used, or when the compiler is built as a cross compiler. ! ! Defined in svr4.h for host compilers. */ /* #define MD_STARTFILE_PREFIX "" */ - /* If defined, this macro supplies yet another prefix to try after the standard - prefixes. It is not searched when the `-b' option is used, or when the - compiler is built as a cross compiler. */ - /* #define MD_STARTFILE_PREFIX_1 "" */ - - /* Define this macro as a C string constant if you with to set environment - variables for programs called by the driver, such as the assembler and - loader. The driver passes the value of this macro to `putenv' to initialize - the necessary environment variables. */ - /* #define INIT_ENVIRONMENT "" */ - - /* Define this macro as a C string constant if you wish to override the - standard choice of `/usr/local/include' as the default prefix to try when - searching for local header files. `LOCAL_INCLUDE_DIR' comes before - `SYSTEM_INCLUDE_DIR' in the search order. - - Cross compilers do not use this macro and do not search either - `/usr/local/include' or its replacement. */ - /* #define LOCAL_INCLUDE_DIR "" */ - - /* Define this macro as a C string constant if you wish to specify a - system-specific directory to search for header files before the standard - directory. `SYSTEM_INCLUDE_DIR' comes before `STANDARD_INCLUDE_DIR' in the - search order. - - Cross compilers do not use this macro and do not search the directory - specified. */ - /* #define SYSTEM_INCLUDE_DIR "" */ - - /* Define this macro as a C string constant if you wish to override the - standard choice of `/usr/include' as the default prefix to try when - searching for header files. - - Cross compilers do not use this macro and do not search either - `/usr/include' or its replacement. */ - /* #define STANDARD_INCLUDE_DIR "" */ - - /* Define this macro if you wish to override the entire default search path for - include files. The default search path includes `GCC_INCLUDE_DIR', - `LOCAL_INCLUDE_DIR', `SYSTEM_INCLUDE_DIR', `GPLUSPLUS_INCLUDE_DIR', and - `STANDARD_INCLUDE_DIR'. In addition, `GPLUSPLUS_INCLUDE_DIR' and - `GCC_INCLUDE_DIR' are defined automatically by `Makefile', and specify - private search areas for GCC. The directory `GPLUSPLUS_INCLUDE_DIR' is used - only for C++ programs. - - The definition should be an initializer for an array of structures. Each - array element should have two elements: the directory name (a string - constant) and a flag for C++-only directories. Mark the end of the array - with a null element. For example, here is the definition used for VMS: - - #define INCLUDE_DEFAULTS \ - { \ - { "GNU_GXX_INCLUDE:", 1}, \ - { "GNU_CC_INCLUDE:", 0}, \ - { "SYS$SYSROOT:[SYSLIB.]", 0}, \ - { ".", 0}, \ - { 0, 0} \ - } - - Here is the order of prefixes tried for exec files: - - 1. Any prefixes specified by the user with `-B'. - - 2. The environment variable `GCC_EXEC_PREFIX', if any. - - 3. The directories specified by the environment variable - `COMPILER_PATH'. - - 4. The macro `STANDARD_EXEC_PREFIX'. - - 5. `/usr/lib/gcc/'. - - 6. The macro `MD_EXEC_PREFIX', if any. - - Here is the order of prefixes tried for startfiles: - - 1. Any prefixes specified by the user with `-B'. - - 2. The environment variable `GCC_EXEC_PREFIX', if any. - - 3. The directories specified by the environment variable - `LIBRARY_PATH' (native only, cross compilers do not use this). - - 4. The macro `STANDARD_EXEC_PREFIX'. - - 5. `/usr/lib/gcc/'. - - 6. The macro `MD_EXEC_PREFIX', if any. - - 7. The macro `MD_STARTFILE_PREFIX', if any. - - 8. The macro `STANDARD_STARTFILE_PREFIX'. - - 9. `/lib/'. - - 10. `/usr/lib/'. */ - /* #define INCLUDE_DEFAULTS {{ }} */ - /* Run-time target specifications */ - /* Define this to be a string constant containing `-D' options to define the - predefined macros that identify this machine and system. These macros will - be predefined unless the `-ansi' option is specified. - - In addition, a parallel set of macros are predefined, whose names are made - by appending `__' at the beginning and at the end. These `__' macros are - permitted by the ANSI standard, so they are predefined regardless of whether - `-ansi' is specified. - - For example, on the Sun, one can use the following value: - - "-Dmc68000 -Dsun -Dunix" - - The result is to define the macros `__mc68000__', `__sun__' and `__unix__' - unconditionally, and the macros `mc68000', `sun' and `unix' provided `-ansi' - is not specified. */ #define CPP_PREDEFINES "-D__D30V__ -Amachine=d30v" /* This declaration should be present. */ extern int target_flags; - /* This series of macros is to allow compiler command arguments to enable or - disable the use of optional features of the target machine. For example, - one machine description serves both the 68000 and the 68020; a command - argument tells the compiler whether it should use 68020-only instructions or - not. This command argument works by means of a macro `TARGET_68020' that - tests a bit in `target_flags'. - - Define a macro `TARGET_FEATURENAME' for each such option. Its definition - should test a bit in `target_flags'; for example: - - #define TARGET_68020 (target_flags & 1) - - One place where these macros are used is in the condition-expressions of - instruction patterns. Note how `TARGET_68020' appears frequently in the - 68000 machine description file, `m68k.md'. Another place they are used is - in the definitions of the other macros in the `MACHINE.h' file. */ - #define MASK_NO_COND_MOVE 0x00000001 /* disable conditional moves */ #define MASK_DEBUG_ARG 0x10000000 /* debug argument handling */ --- 58,89 ---- %{Qy:} %{!Qn:-Qy} \ %{mextmem: -m d30v_e} %{mextmemory: -m d30v_e} %{monchip: -m d30v_o}" ! /* Defined in svr4.h. */ #undef LIB_SPEC #define LIB_SPEC "--start-group -lsim -lc --end-group" ! /* Defined in svr4.h. */ #undef STARTFILE_SPEC #define STARTFILE_SPEC "crt0%O%s crtbegin%O%s" ! /* Defined in svr4.h. */ #undef ENDFILE_SPEC #define ENDFILE_SPEC "crtend%O%s" ! /* Defined in svr4.h for host compilers. */ /* #define MD_EXEC_PREFIX "" */ ! /* Defined in svr4.h for host compilers. */ /* #define MD_STARTFILE_PREFIX "" */ /* Run-time target specifications */ #define CPP_PREDEFINES "-D__D30V__ -Amachine=d30v" /* This declaration should be present. */ extern int target_flags; #define MASK_NO_COND_MOVE 0x00000001 /* disable conditional moves */ #define MASK_DEBUG_ARG 0x10000000 /* debug argument handling */ *************** extern int target_flags; *** 416,446 **** #define TARGET_DEFAULT 0 #endif - /* This macro defines names of command options to set and clear bits in - `target_flags'. Its definition is an initializer with a subgrouping for - each command option. - - Each subgrouping contains a string constant, that defines the option name, a - number, which contains the bits to set in `target_flags', and a second - string which is the description displayed by `--help'. If the number is - negative then the bits specified by the number are cleared instead of being - set. If the description string is present but empty, then no help - information will be displayed for that option, but it will not count as an - undocumented option. The actual option name is made by appending `-m' to - the specified name. - - One of the subgroupings should have a null string. The number in this - grouping is the default value for target_flags. Any target options act - starting with that value. - - Here is an example which defines -m68000 and -m68020 with opposite meanings, - and picks the latter as the default: - - #define TARGET_SWITCHES \ - { { "68020", TARGET_MASK_68020, "" }, \ - { "68000", -TARGET_MASK_68020, "Compile for the 68000" }, \ - { "", TARGET_MASK_68020, "" }} */ - #define TARGET_SWITCHES \ { \ { "cond-move", -MASK_NO_COND_MOVE, \ --- 102,107 ---- *************** extern int target_flags; *** 459,468 **** N_("Debug memory address support in compiler") }, \ \ { "asm-optimize", 0, \ ! N_("Make adjacent short instructions parallel if possible.") }, \ \ { "no-asm-optimize", 0, \ ! N_("Do not make adjacent short instructions parallel.") }, \ \ { "extmem", 0, \ N_("Link programs/data to be in external memory by default") }, \ --- 120,129 ---- N_("Debug memory address support in compiler") }, \ \ { "asm-optimize", 0, \ ! N_("Make adjacent short instructions parallel if possible") }, \ \ { "no-asm-optimize", 0, \ ! N_("Do not make adjacent short instructions parallel") }, \ \ { "extmem", 0, \ N_("Link programs/data to be in external memory by default") }, \ *************** extern int target_flags; *** 476,500 **** { "", TARGET_DEFAULT, "" }, \ } - /* This macro is similar to `TARGET_SWITCHES' but defines names of command - options that have values. Its definition is an initializer with a - subgrouping for each command option. - - Each subgrouping contains a string constant, that defines the fixed part of - the option name, the address of a variable, and a description string. The - variable, type `char *', is set to the variable part of the given option if - the fixed part matches. The actual option name is made by appending `-m' to - the specified name. - - Here is an example which defines `-mshort-data-'. If the given - option is `-mshort-data-512', the variable `m88k_short_data' will be set to - the string "512". - - extern char *m88k_short_data; - #define TARGET_OPTIONS \ - { { "short-data-", &m88k_short_data, \ - "Specify the size of the short data section" } } */ - #define TARGET_OPTIONS \ { \ {"branch-cost=", &d30v_branch_cost_string, \ --- 137,142 ---- *************** extern int target_flags; *** 504,649 **** N_("Change the threshold for conversion to conditional execution") }, \ } - /* This macro is a C statement to print on `stderr' a string describing the - particular machine description choice. Every machine description should - define `TARGET_VERSION'. For example: - - #ifdef MOTOROLA - #define TARGET_VERSION \ - fprintf (stderr, " (68k, Motorola syntax)"); - #else - #define TARGET_VERSION \ - fprintf (stderr, " (68k, MIT syntax)"); - #endif */ #define TARGET_VERSION fprintf (stderr, " d30v") - /* Sometimes certain combinations of command options do not make sense on a - particular target machine. You can define a macro `OVERRIDE_OPTIONS' to - take account of this. This macro, if defined, is executed once just after - all the command options have been parsed. - - Don't use this macro to turn on various extra optimizations for `-O'. That - is what `OPTIMIZATION_OPTIONS' is for. */ - #define OVERRIDE_OPTIONS override_options () - /* Some machines may desire to change what optimizations are performed for - various optimization levels. This macro, if defined, is executed once just - after the optimization level is determined and before the remainder of the - command options have been parsed. Values set in this macro are used as the - default values for the other command line options. - - LEVEL is the optimization level specified; 2 if `-O2' is specified, 1 if - `-O' is specified, and 0 if neither is specified. - - SIZE is non-zero if `-Os' is specified, 0 otherwise. - - You should not use this macro to change options that are not - machine-specific. These should uniformly selected by the same optimization - level on all supported machines. Use this macro to enable machbine-specific - optimizations. - - *Do not examine `write_symbols' in this macro!* The debugging options are - *not supposed to alter the generated code. */ - - /* #define OPTIMIZATION_OPTIONS(LEVEL,SIZE) */ - - /* Define this macro if debugging can be performed even without a frame - pointer. If this macro is defined, GNU CC will turn on the - `-fomit-frame-pointer' option whenever `-O' is specified. */ #define CAN_DEBUG_WITHOUT_FP /* Storage Layout */ - /* Define this macro to have the value 1 if the most significant bit in a byte - has the lowest number; otherwise define it to have the value zero. This - means that bit-field instructions count from the most significant bit. If - the machine has no bit-field instructions, then this must still be defined, - but it doesn't matter which value it is defined to. This macro need not be - a constant. - - This macro does not affect the way structure fields are packed into bytes or - words; that is controlled by `BYTES_BIG_ENDIAN'. */ #define BITS_BIG_ENDIAN 1 - /* Define this macro to have the value 1 if the most significant byte in a word - has the lowest number. This macro need not be a constant. */ #define BYTES_BIG_ENDIAN 1 - /* Define this macro to have the value 1 if, in a multiword object, the most - significant word has the lowest number. This applies to both memory - locations and registers; GNU CC fundamentally assumes that the order of - words in memory is the same as the order in registers. This macro need not - be a constant. */ #define WORDS_BIG_ENDIAN 1 - /* Define this macro if WORDS_BIG_ENDIAN is not constant. This must be a - constant value with the same meaning as WORDS_BIG_ENDIAN, which will be used - only when compiling libgcc2.c. Typically the value will be set based on - preprocessor defines. */ - /* #define LIBGCC2_WORDS_BIG_ENDIAN */ - - /* Define this macro to have the value 1 if `DFmode', `XFmode' or `TFmode' - floating point numbers are stored in memory with the word containing the - sign bit at the lowest address; otherwise define it to have the value 0. - This macro need not be a constant. - - You need not define this macro if the ordering is the same as for multi-word - integers. */ - /* #define FLOAT_WORDS_BIG_EnNDIAN */ - - /* Define this macro to be the number of bits in an addressable storage unit - (byte); normally 8. */ #define BITS_PER_UNIT 8 - /* Number of bits in a word; normally 32. */ #define BITS_PER_WORD 32 - /* Maximum number of bits in a word. If this is undefined, the default is - `BITS_PER_WORD'. Otherwise, it is the constant value that is the largest - value that `BITS_PER_WORD' can have at run-time. */ - /* #define MAX_BITS_PER_WORD */ - - /* Number of storage units in a word; normally 4. */ #define UNITS_PER_WORD 4 - /* Minimum number of units in a word. If this is undefined, the default is - `UNITS_PER_WORD'. Otherwise, it is the constant value that is the smallest - value that `UNITS_PER_WORD' can have at run-time. */ - /* #define MIN_UNITS_PER_WORD */ - - /* Width of a pointer, in bits. You must specify a value no wider than the - width of `Pmode'. If it is not equal to the width of `Pmode', you must - define `POINTERS_EXTEND_UNSIGNED'. */ #define POINTER_SIZE 32 - /* A C expression whose value is nonzero if pointers that need to be extended - from being `POINTER_SIZE' bits wide to `Pmode' are sign-extended and zero if - they are zero-extended. - - You need not define this macro if the `POINTER_SIZE' is equal to the width - of `Pmode'. */ - /* #define POINTERS_EXTEND_UNSIGNED */ - - /* A macro to update M and UNSIGNEDP when an object whose type is TYPE and - which has the specified mode and signedness is to be stored in a register. - This macro is only called when TYPE is a scalar type. - - On most RISC machines, which only have operations that operate on a full - register, define this macro to set M to `word_mode' if M is an integer mode - narrower than `BITS_PER_WORD'. In most cases, only integer modes should be - widened because wider-precision floating-point operations are usually more - expensive than their narrower counterparts. - - For most machines, the macro definition does not change UNSIGNEDP. However, - some machines, have instructions that preferentially handle either signed or - unsigned quantities of certain modes. For example, on the DEC Alpha, 32-bit - loads from memory and 32-bit add instructions sign-extend the result to 64 - bits. On such machines, set UNSIGNEDP according to which kind of extension - is more efficient. - - Do not define this macro if it would never modify M. */ #define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE) \ do { \ if (GET_MODE_CLASS (MODE) == MODE_INT \ --- 146,174 ---- *************** do { \ *** 651,1048 **** (MODE) = SImode; \ } while (0) - /* Define this macro if the promotion described by `PROMOTE_MODE' should also - be done for outgoing function arguments. */ - /* #define PROMOTE_FUNCTION_ARGS */ - - /* Define this macro if the promotion described by `PROMOTE_MODE' should also - be done for the return value of functions. - - If this macro is defined, `FUNCTION_VALUE' must perform the same promotions - done by `PROMOTE_MODE'. */ - /* #define PROMOTE_FUNCTION_RETURN */ - - /* Define this macro if the promotion described by `PROMOTE_MODE' should *only* - be performed for outgoing function arguments or function return values, as - specified by `PROMOTE_FUNCTION_ARGS' and `PROMOTE_FUNCTION_RETURN', - respectively. */ - /* #define PROMOTE_FOR_CALL_ONLY */ - - /* Normal alignment required for function parameters on the stack, in bits. - All stack parameters receive at least this much alignment regardless of data - type. On most machines, this is the same as the size of an integer. */ - #define PARM_BOUNDARY 32 - /* Define this macro if you wish to preserve a certain alignment for the stack - pointer. The definition is a C expression for the desired alignment - (measured in bits). - - If `PUSH_ROUNDING' is not defined, the stack will always be aligned to the - specified boundary. If `PUSH_ROUNDING' is defined and specifies a less - strict alignment than `STACK_BOUNDARY', the stack may be momentarily - unaligned while pushing arguments. */ - #define STACK_BOUNDARY 64 - /* Alignment required for a function entry point, in bits. */ - #define FUNCTION_BOUNDARY 64 - /* Biggest alignment that any data type can require on this machine, - in bits. */ - #define BIGGEST_ALIGNMENT 64 ! /* Biggest alignment that any structure field can require on this machine, in ! bits. If defined, this overrides `BIGGEST_ALIGNMENT' for structure fields ! only. */ ! /* #define BIGGEST_FIELD_ALIGNMENT */ ! ! /* Biggest alignment supported by the object file format of this machine. Use ! this macro to limit the alignment which can be specified using the ! `__attribute__ ((aligned (N)))' construct. If not defined, the default ! value is `BIGGEST_ALIGNMENT'. ! ! Defined in svr4.h. */ /* #define MAX_OFILE_ALIGNMENT */ - /* If defined, a C expression to compute the alignment for a static variable. - TYPE is the data type, and BASIC-ALIGN is the alignment that the object - would ordinarily have. The value of this macro is used instead of that - alignment to align the object. - - If this macro is not defined, then BASIC-ALIGN is used. - - One use of this macro is to increase alignment of medium-size data to make - it all fit in fewer cache lines. Another is to cause character arrays to be - word-aligned so that `strcpy' calls that copy constants to character arrays - can be done inline. */ - #define DATA_ALIGNMENT(TYPE, ALIGN) \ (TREE_CODE (TYPE) == ARRAY_TYPE \ && TYPE_MODE (TREE_TYPE (TYPE)) == QImode \ && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN)) - /* If defined, a C expression to compute the alignment given to a constant that - is being placed in memory. CONSTANT is the constant and BASIC-ALIGN is the - alignment that the object would ordinarily have. The value of this macro is - used instead of that alignment to align the object. - - If this macro is not defined, then BASIC-ALIGN is used. - - The typical use of this macro is to increase alignment for string constants - to be word aligned so that `strcpy' calls that copy constants can be done - inline. */ - #define CONSTANT_ALIGNMENT(EXP, ALIGN) \ (TREE_CODE (EXP) == STRING_CST \ && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN)) - /* Alignment in bits to be given to a structure bit field that follows an empty - field such as `int : 0;'. - - Note that `PCC_BITFIELD_TYPE_MATTERS' also affects the alignment that - results from an empty field. */ - /* #define EMPTY_FIELD_BOUNDARY */ - - /* Number of bits which any structure or union's size must be a multiple of. - Each structure or union's size is rounded up to a multiple of this. - - If you do not define this macro, the default is the same as `BITS_PER_UNIT'. */ - /* #define STRUCTURE_SIZE_BOUNDARY */ - - /* Define this macro to be the value 1 if instructions will fail to work if - given data not on the nominal alignment. If instructions will merely go - slower in that case, define this macro as 0. */ - #define STRICT_ALIGNMENT 1 ! /* Define this if you wish to imitate the way many other C compilers handle ! alignment of bitfields and the structures that contain them. ! ! The behavior is that the type written for a bitfield (`int', `short', or ! other integer type) imposes an alignment for the entire structure, as if the ! structure really did contain an ordinary field of that type. In addition, ! the bitfield is placed within the structure so that it would fit within such ! a field, not crossing a boundary for it. ! ! Thus, on most machines, a bitfield whose type is written as `int' would not ! cross a four-byte boundary, and would force four-byte alignment for the ! whole structure. (The alignment used may not be four bytes; it is ! controlled by the other alignment parameters.) ! ! If the macro is defined, its definition should be a C expression; a nonzero ! value for the expression enables this behavior. ! ! Note that if this macro is not defined, or its value is zero, some bitfields ! may cross more than one alignment boundary. The compiler can support such ! references if there are `insv', `extv', and `extzv' insns that can directly ! reference memory. ! ! The other known way of making bitfields work is to define ! `STRUCTURE_SIZE_BOUNDARY' as large as `BIGGEST_ALIGNMENT'. Then every ! structure can be accessed with fullwords. ! ! Unless the machine has bitfield instructions or you define ! `STRUCTURE_SIZE_BOUNDARY' that way, you must define ! `PCC_BITFIELD_TYPE_MATTERS' to have a nonzero value. ! ! If your aim is to make GNU CC use the same conventions for laying out ! bitfields as are used by another compiler, here is how to investigate what ! the other compiler does. Compile and run this program: ! ! struct foo1 ! { ! char x; ! char :0; ! char y; ! }; ! ! struct foo2 ! { ! char x; ! int :0; ! char y; ! }; ! ! main () ! { ! printf ("Size of foo1 is %d\n", ! sizeof (struct foo1)); ! printf ("Size of foo2 is %d\n", ! sizeof (struct foo2)); ! exit (0); ! } ! ! If this prints 2 and 5, then the compiler's behavior is what you would get ! from `PCC_BITFIELD_TYPE_MATTERS'. ! ! Defined in svr4.h. */ #define PCC_BITFIELD_TYPE_MATTERS 1 - /* Like PCC_BITFIELD_TYPE_MATTERS except that its effect is limited to aligning - a bitfield within the structure. */ - /* #define BITFIELD_NBYTES_LIMITED */ - - /* Define this macro as an expression for the overall size of a structure - (given by STRUCT as a tree node) when the size computed from the fields is - SIZE and the alignment is ALIGN. - - The default is to round SIZE up to a multiple of ALIGN. */ - /* #define ROUND_TYPE_SIZE(STRUCT, SIZE, ALIGN) */ - - /* Define this macro as an expression for the alignment of a structure (given - by STRUCT as a tree node) if the alignment computed in the usual way is - COMPUTED and the alignment explicitly specified was SPECIFIED. - - The default is to use SPECIFIED if it is larger; otherwise, use the smaller - of COMPUTED and `BIGGEST_ALIGNMENT' */ - /* #define ROUND_TYPE_ALIGN(STRUCT, COMPUTED, SPECIFIED) */ - - /* An integer expression for the size in bits of the largest integer machine - mode that should actually be used. All integer machine modes of this size - or smaller can be used for structures and unions with the appropriate sizes. - If this macro is undefined, `GET_MODE_BITSIZE (DImode)' is assumed. */ - /* #define MAX_FIXED_MODE_SIZE */ - - /* A C statement to validate the value VALUE (of type `double') for mode MODE. - This means that you check whether VALUE fits within the possible range of - values for mode MODE on this target machine. The mode MODE is always a mode - of class `MODE_FLOAT'. OVERFLOW is nonzero if the value is already known to - be out of range. - - If VALUE is not valid or if OVERFLOW is nonzero, you should set OVERFLOW to - 1 and then assign some valid value to VALUE. Allowing an invalid value to - go through the compiler can produce incorrect assembler code which may even - cause Unix assemblers to crash. - - This macro need not be defined if there is no work for it to do. */ - /* #define CHECK_FLOAT_VALUE(MODE, VALUE, OVERFLOW) */ - - /* A code distinguishing the floating point format of the target machine. - There are three defined values: - - IEEE_FLOAT_FORMAT' - This code indicates IEEE floating point. It is the default; - there is no need to define this macro when the format is IEEE. - - VAX_FLOAT_FORMAT' - This code indicates the peculiar format used on the Vax. - - UNKNOWN_FLOAT_FORMAT' - This code indicates any other format. - - The value of this macro is compared with `HOST_FLOAT_FORMAT' (*note - Config::.) to determine whether the target machine has the same format as - the host machine. If any other formats are actually in use on supported - machines, new codes should be defined for them. - - The ordering of the component words of floating point values stored in - memory is controlled by `FLOAT_WORDS_BIG_ENDIAN' for the target machine and - `HOST_FLOAT_WORDS_BIG_ENDIAN' for the host. */ #define TARGET_FLOAT_FORMAT IEEE_FLOAT_FORMAT - /* GNU CC supports two ways of implementing C++ vtables: traditional or with - so-called "thunks". The flag `-fvtable-thunk' chooses between them. Define - this macro to be a C expression for the default value of that flag. If - `DEFAULT_VTABLE_THUNKS' is 0, GNU CC uses the traditional implementation by - default. The "thunk" implementation is more efficient (especially if you - have provided an implementation of `ASM_OUTPUT_MI_THUNK', see *Note Function - Entry::), but is not binary compatible with code compiled using the - traditional implementation. If you are writing a new ports, define - `DEFAULT_VTABLE_THUNKS' to 1. - - If you do not define this macro, the default for `-fvtable-thunk' is 0. */ - #define DEFAULT_VTABLE_THUNKS 0 - /* Layout of Source Language Data Types */ - /* A C expression for the size in bits of the type `int' on the target machine. - If you don't define this, the default is one word. */ #define INT_TYPE_SIZE 32 - /* Maximum number for the size in bits of the type `int' on the target machine. - If this is undefined, the default is `INT_TYPE_SIZE'. Otherwise, it is the - constant value that is the largest value that `INT_TYPE_SIZE' can have at - run-time. This is used in `cpp'. */ - /* #define MAX_INT_TYPE_SIZE */ - - /* A C expression for the size in bits of the type `short' on the target - machine. If you don't define this, the default is half a word. (If this - would be less than one storage unit, it is rounded up to one unit.) */ #define SHORT_TYPE_SIZE 16 - /* A C expression for the size in bits of the type `long' on the target - machine. If you don't define this, the default is one word. */ #define LONG_TYPE_SIZE 32 - /* Maximum number for the size in bits of the type `long' on the target - machine. If this is undefined, the default is `LONG_TYPE_SIZE'. Otherwise, - it is the constant value that is the largest value that `LONG_TYPE_SIZE' can - have at run-time. This is used in `cpp'. */ - /* #define MAX_LONG_TYPE_SIZE */ - - /* A C expression for the size in bits of the type `long long' on the target - machine. If you don't define this, the default is two words. If you want - to support GNU Ada on your machine, the value of macro must be at least 64. */ #define LONG_LONG_TYPE_SIZE 64 - /* A C expression for the size in bits of the type `char' on the target - machine. If you don't define this, the default is one quarter of a word. - (If this would be less than one storage unit, it is rounded up to one unit.) */ #define CHAR_TYPE_SIZE 8 - /* Maximum number for the size in bits of the type `char' on the target - machine. If this is undefined, the default is `CHAR_TYPE_SIZE'. Otherwise, - it is the constant value that is the largest value that `CHAR_TYPE_SIZE' can - have at run-time. This is used in `cpp'. */ - /* #define MAX_CHAR_TYPE_SIZE */ - - /* A C expression for the size in bits of the type `float' on the target - machine. If you don't define this, the default is one word. */ #define FLOAT_TYPE_SIZE 32 - /* A C expression for the size in bits of the type `double' on the target - machine. If you don't define this, the default is two words. */ #define DOUBLE_TYPE_SIZE 64 - /* A C expression for the size in bits of the type `long double' on the target - machine. If you don't define this, the default is two words. */ #define LONG_DOUBLE_TYPE_SIZE 64 - /* An expression whose value is 1 or 0, according to whether the type `char' - should be signed or unsigned by default. The user can always override this - default with the options `-fsigned-char' and `-funsigned-char'. */ #define DEFAULT_SIGNED_CHAR 1 ! /* A C expression to determine whether to give an `enum' type only as many ! bytes as it takes to represent the range of possible values of that type. A ! nonzero value means to do that; a zero value means all `enum' types should ! be allocated like `int'. ! ! If you don't define the macro, the default is 0. */ ! /* #define DEFAULT_SHORT_ENUMS */ ! ! /* A C expression for a string describing the name of the data type to use for ! size values. The typedef name `size_t' is defined using the contents of the ! string. ! ! The string can contain more than one keyword. If so, separate them with ! spaces, and write first any length keyword, then `unsigned' if appropriate, ! and finally `int'. The string must exactly match one of the data type names ! defined in the function `init_decl_processing' in the file `c-decl.c'. You ! may not omit `int' or change the order--that would cause the compiler to ! crash on startup. ! ! If you don't define this macro, the default is `"long unsigned int"'. ! ! Defined in svr4.h. */ /* #define SIZE_TYPE */ ! /* A C expression for a string describing the name of the data type to use for ! the result of subtracting two pointers. The typedef name `ptrdiff_t' is ! defined using the contents of the string. See `SIZE_TYPE' above for more ! information. ! ! If you don't define this macro, the default is `"long int"'. ! ! Defined in svr4.h. */ /* #define PTRDIFF_TYPE */ ! /* A C expression for a string describing the name of the data type to use for ! wide characters. The typedef name `wchar_t' is defined using the contents ! of the string. See `SIZE_TYPE' above for more information. ! ! If you don't define this macro, the default is `"int"'. ! ! Defined in svr4.h. */ /* #define WCHAR_TYPE */ ! /* A C expression for the size in bits of the data type for wide characters. ! This is used in `cpp', which cannot make use of `WCHAR_TYPE'. ! ! Defined in svr4.h. */ /* #define WCHAR_TYPE_SIZE */ - /* Maximum number for the size in bits of the data type for wide characters. - If this is undefined, the default is `WCHAR_TYPE_SIZE'. Otherwise, it is - the constant value that is the largest value that `WCHAR_TYPE_SIZE' can have - at run-time. This is used in `cpp'. */ - /* #define MAX_WCHAR_TYPE_SIZE */ - - /* Define this macro if the type of Objective C selectors should be `int'. - - If this macro is not defined, then selectors should have the type `struct - objc_selector *'. */ - /* #define OBJC_INT_SELECTORS */ - - /* Define this macro if the compiler can group all the selectors together into - a vector and use just one label at the beginning of the vector. Otherwise, - the compiler must give each selector its own assembler label. - - On certain machines, it is important to have a separate label for each - selector because this enables the linker to eliminate duplicate selectors. */ - /* #define OBJC_SELECTORS_WITHOUT_LABELS */ - - /* A C constant expression for the integer value for escape sequence - `\a'. */ - #define TARGET_BELL 0x7 - - /* C constant expressions for the integer values for escape sequences - `\b', `\t' and `\n'. */ - #define TARGET_BS 0x8 - #define TARGET_TAB 0x9 - #define TARGET_NEWLINE 0xa - - /* C constant expressions for the integer values for escape sequences - `\v', `\f' and `\r'. */ - #define TARGET_VT 0xb - #define TARGET_FF 0xc - #define TARGET_CR 0xd - /* D30V register layout. */ --- 176,242 ---- (MODE) = SImode; \ } while (0) #define PARM_BOUNDARY 32 #define STACK_BOUNDARY 64 #define FUNCTION_BOUNDARY 64 #define BIGGEST_ALIGNMENT 64 ! /* Defined in svr4.h. */ /* #define MAX_OFILE_ALIGNMENT */ #define DATA_ALIGNMENT(TYPE, ALIGN) \ (TREE_CODE (TYPE) == ARRAY_TYPE \ && TYPE_MODE (TREE_TYPE (TYPE)) == QImode \ && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN)) #define CONSTANT_ALIGNMENT(EXP, ALIGN) \ (TREE_CODE (EXP) == STRING_CST \ && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN)) #define STRICT_ALIGNMENT 1 ! /* Defined in svr4.h. */ #define PCC_BITFIELD_TYPE_MATTERS 1 #define TARGET_FLOAT_FORMAT IEEE_FLOAT_FORMAT /* Layout of Source Language Data Types */ #define INT_TYPE_SIZE 32 #define SHORT_TYPE_SIZE 16 #define LONG_TYPE_SIZE 32 #define LONG_LONG_TYPE_SIZE 64 #define CHAR_TYPE_SIZE 8 #define FLOAT_TYPE_SIZE 32 #define DOUBLE_TYPE_SIZE 64 #define LONG_DOUBLE_TYPE_SIZE 64 #define DEFAULT_SIGNED_CHAR 1 ! /* Defined in svr4.h. */ /* #define SIZE_TYPE */ ! /* Defined in svr4.h. */ /* #define PTRDIFF_TYPE */ ! /* Defined in svr4.h. */ /* #define WCHAR_TYPE */ ! /* Defined in svr4.h. */ /* #define WCHAR_TYPE_SIZE */ /* D30V register layout. */ *************** enum reg_class *** 1542,1548 **** REGNO. In general there is more than one such class; choose a class which is "minimal", meaning that no smaller class also contains the register. */ ! extern enum reg_class regno_reg_class[]; #define REGNO_REG_CLASS(REGNO) regno_reg_class[ (REGNO) ] /* A macro whose definition is the name of the class to which a valid base --- 736,742 ---- REGNO. In general there is more than one such class; choose a class which is "minimal", meaning that no smaller class also contains the register. */ ! extern enum reg_class regno_reg_class[FIRST_PSEUDO_REGISTER]; #define REGNO_REG_CLASS(REGNO) regno_reg_class[ (REGNO) ] /* A macro whose definition is the name of the class to which a valid base *************** extern enum reg_class regno_reg_class[]; *** 1572,1579 **** 'V', 'X' 'g', 'i', 'm', 'n', 'o', 'p', 'r', 's' */ ! extern enum reg_class reg_class_from_letter[]; ! #define REG_CLASS_FROM_LETTER(CHAR) reg_class_from_letter[ CHAR ] /* A C expression which is nonzero if register number NUM is suitable for use as a base register in operand addresses. It may be either a suitable hard --- 766,773 ---- 'V', 'X' 'g', 'i', 'm', 'n', 'o', 'p', 'r', 's' */ ! extern enum reg_class reg_class_from_letter[256]; ! #define REG_CLASS_FROM_LETTER(CHAR) reg_class_from_letter[(unsigned char)(CHAR)] /* A C expression which is nonzero if register number NUM is suitable for use as a base register in operand addresses. It may be either a suitable hard *************** extern enum reg_class reg_class_from_let *** 1688,1694 **** registers can only be copied to memory and not to another class of registers. In that case, secondary reload registers are not needed and would not be helpful. Instead, a stack location must be used to perform the ! copy and the `movM' pattern should use memory as a intermediate storage. This case often occurs between floating-point and general registers. */ #define SECONDARY_RELOAD_CLASS(CLASS, MODE, X) \ --- 882,888 ---- registers can only be copied to memory and not to another class of registers. In that case, secondary reload registers are not needed and would not be helpful. Instead, a stack location must be used to perform the ! copy and the `movM' pattern should use memory as an intermediate storage. This case often occurs between floating-point and general registers. */ #define SECONDARY_RELOAD_CLASS(CLASS, MODE, X) \ *************** typedef struct d30v_stack { *** 2001,2007 **** value of 4096 is suitable for most systems. */ /* #define STACK_CHECK_PROBE_INTERVAL */ ! /* A integer which is nonzero if GNU CC should perform the stack probe as a load instruction and zero if GNU CC should use a store instruction. The default is zero, which is the most efficient choice on most systems. */ /* #define STACK_CHECK_PROBE_LOAD */ --- 1195,1201 ---- value of 4096 is suitable for most systems. */ /* #define STACK_CHECK_PROBE_INTERVAL */ ! /* An integer which is nonzero if GNU CC should perform the stack probe as a load instruction and zero if GNU CC should use a store instruction. The default is zero, which is the most efficient choice on most systems. */ /* #define STACK_CHECK_PROBE_LOAD */ *************** typedef struct d30v_stack { *** 2204,2215 **** abort (); \ } - /* Define this macro if the `longjmp' function restores registers from the - stack frames, rather than from those saved specifically by `setjmp'. - Certain quantities must not be kept in registers across a call to `setjmp' - on such machines. */ - /* #define LONGJMP_RESTORE_FROM_STACK */ - /* Passing Function Arguments on the Stack */ --- 1398,1403 ---- *************** typedef struct d30v_stack { *** 2307,2313 **** FUNDECL is a C variable whose value is a tree node that describes the function in question. Normally it is a node of type `FUNCTION_DECL' that describes the declaration of the function. From this it is possible to ! obtain the DECL_MACHINE_ATTRIBUTES of the function. FUNTYPE is a C variable whose value is a tree node that describes the function in question. Normally it is a node of type `FUNCTION_TYPE' that --- 1495,1501 ---- FUNDECL is a C variable whose value is a tree node that describes the function in question. Normally it is a node of type `FUNCTION_DECL' that describes the declaration of the function. From this it is possible to ! obtain the DECL_ATTRIBUTES of the function. FUNTYPE is a C variable whose value is a tree node that describes the function in question. Normally it is a node of type `FUNCTION_TYPE' that *************** typedef struct d30v_stack { *** 2325,2331 **** variable number of bytes is passed, it is zero, and argument popping will always be the responsibility of the calling function. ! On the Vax, all functions always pop their arguments, so the definition of this macro is STACK-SIZE. On the 68000, using the standard calling convention, no functions pop their arguments, so the value of the macro is always 0 in this case. But an alternative calling convention is available --- 1513,1519 ---- variable number of bytes is passed, it is zero, and argument popping will always be the responsibility of the calling function. ! On the VAX, all functions always pop their arguments, so the definition of this macro is STACK-SIZE. On the 68000, using the standard calling convention, no functions pop their arguments, so the value of the macro is always 0 in this case. But an alternative calling convention is available *************** typedef struct d30v_stack { *** 2352,2358 **** register in which to pass the argument, or zero to pass the argument on the stack. ! For machines like the Vax and 68000, where normally all arguments are pushed, zero suffices as a definition. The usual way to make the ANSI library `stdarg.h' work on a machine where --- 1540,1546 ---- register in which to pass the argument, or zero to pass the argument on the stack. ! For machines like the VAX and 68000, where normally all arguments are pushed, zero suffices as a definition. The usual way to make the ANSI library `stdarg.h' work on a machine where *************** typedef int CUMULATIVE_ARGS; *** 2678,2770 **** /* #define CALLER_SAVE_PROFITABLE(REFS, CALLS) */ - /* Function Entry and Exit */ - - /* A C compound statement that outputs the assembler code for entry to a - function. The prologue is responsible for setting up the stack frame, - initializing the frame pointer register, saving registers that must be - saved, and allocating SIZE additional bytes of storage for the local - variables. SIZE is an integer. FILE is a stdio stream to which the - assembler code should be output. - - The label for the beginning of the function need not be output by this - macro. That has already been done when the macro is run. - - To determine which registers to save, the macro can refer to the array - `regs_ever_live': element R is nonzero if hard register R is used anywhere - within the function. This implies the function prologue should save - register R, provided it is not one of the call-used registers. - (`FUNCTION_EPILOGUE' must likewise use `regs_ever_live'.) - - On machines that have "register windows", the function entry code does not - save on the stack the registers that are in the windows, even if they are - supposed to be preserved by function calls; instead it takes appropriate - steps to "push" the register stack, if any non-call-used registers are used - in the function. - - On machines where functions may or may not have frame-pointers, the function - entry code must vary accordingly; it must set up the frame pointer if one is - wanted, and not otherwise. To determine whether a frame pointer is in - wanted, the macro can refer to the variable `frame_pointer_needed'. The - variable's value will be 1 at run time in a function that needs a frame - pointer. *Note Elimination::. - - The function entry code is responsible for allocating any stack space - required for the function. This stack space consists of the regions listed - below. In most cases, these regions are allocated in the order listed, with - the last listed region closest to the top of the stack (the lowest address - if `STACK_GROWS_DOWNWARD' is defined, and the highest address if it is not - defined). You can use a different order for a machine if doing so is more - convenient or required for compatibility reasons. Except in cases where - required by standard or by a debugger, there is no reason why the stack - layout used by GCC need agree with that used by other compilers for a - machine. - - * A region of `current_function_pretend_args_size' bytes of - uninitialized space just underneath the first argument - arriving on the stack. (This may not be at the very start of - the allocated stack region if the calling sequence has pushed - anything else since pushing the stack arguments. But - usually, on such machines, nothing else has been pushed yet, - because the function prologue itself does all the pushing.) - This region is used on machines where an argument may be - passed partly in registers and partly in memory, and, in some - cases to support the features in `varargs.h' and `stdargs.h'. - - * An area of memory used to save certain registers used by the - function. The size of this area, which may also include - space for such things as the return address and pointers to - previous stack frames, is machine-specific and usually - depends on which registers have been used in the function. - Machines with register windows often do not require a save - area. - - * A region of at least SIZE bytes, possibly rounded up to an - allocation boundary, to contain the local variables of the - function. On some machines, this region and the save area - may occur in the opposite order, with the save area closer to - the top of the stack. - - * Optionally, when `ACCUMULATE_OUTGOING_ARGS' is defined, a - region of `current_function_outgoing_args_size' bytes to be - used for outgoing argument lists of the function. *Note - Stack Arguments::. - - Normally, it is necessary for the macros `FUNCTION_PROLOGUE' and - `FUNCTION_EPILOGUE' to treat leaf functions specially. The C variable - `leaf_function' is nonzero for such a function. */ - - #define FUNCTION_PROLOGUE(FILE, SIZE) d30v_function_prologue (FILE, SIZE) - - /* Define this macro as a C expression that is nonzero if the return - instruction or the function epilogue ignores the value of the stack pointer; - in other words, if it is safe to delete an instruction to adjust the stack - pointer before a return from the function. - - Note that this macro's value is relevant only for functions for which frame - pointers are maintained. It is never safe to delete a final stack - adjustment in a function that has no frame pointer, and the compiler knows - this regardless of `EXIT_IGNORE_STACK'. */ /* #define EXIT_IGNORE_STACK */ /* Define this macro as a C expression that is nonzero for registers --- 1866,1871 ---- *************** typedef int CUMULATIVE_ARGS; *** 2773,2816 **** needed. */ #define EPILOGUE_USES(REGNO) ((REGNO) == GPR_LINK) - /* A C compound statement that outputs the assembler code for exit from a - function. The epilogue is responsible for restoring the saved registers and - stack pointer to their values when the function was called, and returning - control to the caller. This macro takes the same arguments as the macro - `FUNCTION_PROLOGUE', and the registers to restore are determined from - `regs_ever_live' and `CALL_USED_REGISTERS' in the same way. - - On some machines, there is a single instruction that does all the work of - returning from the function. On these machines, give that instruction the - name `return' and do not define the macro `FUNCTION_EPILOGUE' at all. - - Do not define a pattern named `return' if you want the `FUNCTION_EPILOGUE' - to be used. If you want the target switches to control whether return - instructions or epilogues are used, define a `return' pattern with a - validity condition that tests the target switches appropriately. If the - `return' pattern's validity condition is false, epilogues will be used. - - On machines where functions may or may not have frame-pointers, the function - exit code must vary accordingly. Sometimes the code for these two cases is - completely different. To determine whether a frame pointer is wanted, the - macro can refer to the variable `frame_pointer_needed'. The variable's - value will be 1 when compiling a function that needs a frame pointer. - - Normally, `FUNCTION_PROLOGUE' and `FUNCTION_EPILOGUE' must treat leaf - functions specially. The C variable `leaf_function' is nonzero for such a - function. *Note Leaf Functions::. - - On some machines, some functions pop their arguments on exit while others - leave that for the caller to do. For example, the 68020 when given `-mrtd' - pops arguments in functions that take a fixed number of arguments. - - Your definition of the macro `RETURN_POPS_ARGS' decides which functions pop - their own arguments. `FUNCTION_EPILOGUE' needs to know what was decided. - The variable that is called `current_function_pops_args' is the number of - bytes of its arguments that a function should pop. *Note Scalar Return::. */ - - #define FUNCTION_EPILOGUE(FILE, SIZE) d30v_function_epilogue (FILE, SIZE) - /* Define this macro if the function epilogue contains delay slots to which instructions from the rest of the function can be "moved". The definition should be a C expression whose value is an integer representing the number --- 1874,1879 ---- *************** typedef int CUMULATIVE_ARGS; *** 2831,2838 **** The insns accepted to fill the epilogue delay slots are put in an RTL list made with `insn_list' objects, stored in the variable `current_function_epilogue_delay_list'. The insn for the first ! delay slot comes first in the list. Your definition of the macro ! `FUNCTION_EPILOGUE' should fill the delay slots by outputting the insns in this list, usually by calling `final_scan_insn'. You need not define this macro if you did not define --- 1894,1901 ---- The insns accepted to fill the epilogue delay slots are put in an RTL list made with `insn_list' objects, stored in the variable `current_function_epilogue_delay_list'. The insn for the first ! delay slot comes first in the list. Your definition of the function ! output_function_epilogue() should fill the delay slots by outputting the insns in this list, usually by calling `final_scan_insn'. You need not define this macro if you did not define *************** typedef int CUMULATIVE_ARGS; *** 2855,2864 **** the return address. Hence returning from FUNCTION will return to whoever called the current `thunk'. ! The effect must be as if FUNCTION had been called directly with the adjusted ! first argument. This macro is responsible for emitting all of the code for ! a thunk function; `FUNCTION_PROLOGUE' and `FUNCTION_EPILOGUE' are not ! invoked. The THUNK_FNDECL is redundant. (DELTA and FUNCTION have already been extracted from it.) It might possibly be useful on some targets, but --- 1918,1927 ---- the return address. Hence returning from FUNCTION will return to whoever called the current `thunk'. ! The effect must be as if FUNCTION had been called directly with the ! adjusted first argument. This macro is responsible for emitting ! all of the code for a thunk function; output_function_prologue() ! and output_function_epilogue() are not invoked. The THUNK_FNDECL is redundant. (DELTA and FUNCTION have already been extracted from it.) It might possibly be useful on some targets, but *************** typedef struct machine_function *** 2876,2883 **** { /* Additionsl stack adjustment in __builtin_eh_throw. */ struct rtx_def * eh_epilogue_sp_ofs; - /* Records __builtin_return address. */ - struct rtx_def * ra_rtx; } machine_function; --- 1939,1944 ---- *************** typedef struct machine_function *** 2901,3036 **** function prologue. Normally, the profiling code comes after. */ /* #define PROFILE_BEFORE_PROLOGUE */ - /* A C statement or compound statement to output to FILE some assembler code to - initialize basic-block profiling for the current object module. The global - compile flag `profile_block_flag' distingishes two profile modes. - - profile_block_flag != 2' - Output code to call the subroutine `__bb_init_func' once per - object module, passing it as its sole argument the address of - a block allocated in the object module. - - The name of the block is a local symbol made with this - statement: - - ASM_GENERATE_INTERNAL_LABEL (BUFFER, "LPBX", 0); - - Of course, since you are writing the definition of - `ASM_GENERATE_INTERNAL_LABEL' as well as that of this macro, - you can take a short cut in the definition of this macro and - use the name that you know will result. - - The first word of this block is a flag which will be nonzero - if the object module has already been initialized. So test - this word first, and do not call `__bb_init_func' if the flag - is nonzero. BLOCK_OR_LABEL contains a unique number which - may be used to generate a label as a branch destination when - `__bb_init_func' will not be called. - - Described in assembler language, the code to be output looks - like: - - cmp (LPBX0),0 - bne local_label - parameter1 <- LPBX0 - call __bb_init_func - local_label: - - profile_block_flag == 2' - Output code to call the subroutine `__bb_init_trace_func' and - pass two parameters to it. The first parameter is the same as - for `__bb_init_func'. The second parameter is the number of - the first basic block of the function as given by - BLOCK_OR_LABEL. Note that `__bb_init_trace_func' has to be - called, even if the object module has been initialized - already. - - Described in assembler language, the code to be output looks - like: - parameter1 <- LPBX0 - parameter2 <- BLOCK_OR_LABEL - call __bb_init_trace_func */ - /* #define FUNCTION_BLOCK_PROFILER (FILE, LABELNO) */ - - /* A C statement or compound statement to output to FILE some assembler code to - increment the count associated with the basic block number BLOCKNO. The - global compile flag `profile_block_flag' distingishes two profile modes. - - profile_block_flag != 2' - Output code to increment the counter directly. Basic blocks - are numbered separately from zero within each compilation. - The count associated with block number BLOCKNO is at index - BLOCKNO in a vector of words; the name of this array is a - local symbol made with this statement: - - ASM_GENERATE_INTERNAL_LABEL (BUFFER, "LPBX", 2); - - Of course, since you are writing the definition of - `ASM_GENERATE_INTERNAL_LABEL' as well as that of this macro, - you can take a short cut in the definition of this macro and - use the name that you know will result. - - Described in assembler language, the code to be output looks - like: - - inc (LPBX2+4*BLOCKNO) - - profile_block_flag == 2' - Output code to initialize the global structure `__bb' and - call the function `__bb_trace_func', which will increment the - counter. - - `__bb' consists of two words. In the first word, the current - basic block number, as given by BLOCKNO, has to be stored. In - the second word, the address of a block allocated in the - object module has to be stored. The address is given by the - label created with this statement: - - ASM_GENERATE_INTERNAL_LABEL (BUFFER, "LPBX", 0); - - Described in assembler language, the code to be output looks - like: - move BLOCKNO -> (__bb) - move LPBX0 -> (__bb+4) - call __bb_trace_func */ - /* #define BLOCK_PROFILER(FILE, BLOCKNO) */ - - /* A C statement or compound statement to output to FILE assembler - code to call function `__bb_trace_ret'. The assembler code should - only be output if the global compile flag `profile_block_flag' == - 2. This macro has to be used at every place where code for - returning from a function is generated (e.g. `FUNCTION_EPILOGUE'). - Although you have to write the definition of `FUNCTION_EPILOGUE' - as well, you have to define this macro to tell the compiler, that - the proper call to `__bb_trace_ret' is produced. */ - /* #define FUNCTION_BLOCK_PROFILER_EXIT(FILE) */ - - /* A C statement or compound statement to save all registers, which may be - clobbered by a function call, including condition codes. The `asm' - statement will be mostly likely needed to handle this task. Local labels in - the assembler code can be concatenated with the string ID, to obtain a - unique lable name. - - Registers or condition codes clobbered by `FUNCTION_PROLOGUE' or - `FUNCTION_EPILOGUE' must be saved in the macros `FUNCTION_BLOCK_PROFILER', - `FUNCTION_BLOCK_PROFILER_EXIT' and `BLOCK_PROFILER' prior calling - `__bb_init_trace_func', `__bb_trace_ret' and `__bb_trace_func' respectively. */ - /* #define MACHINE_STATE_SAVE(ID) */ - - /* A C statement or compound statement to restore all registers, including - condition codes, saved by `MACHINE_STATE_SAVE'. - - Registers or condition codes clobbered by `FUNCTION_PROLOGUE' or - `FUNCTION_EPILOGUE' must be restored in the macros - `FUNCTION_BLOCK_PROFILER', `FUNCTION_BLOCK_PROFILER_EXIT' and - `BLOCK_PROFILER' after calling `__bb_init_trace_func', `__bb_trace_ret' and - `__bb_trace_func' respectively. */ - /* #define MACHINE_STATE_RESTORE(ID) */ - - /* A C function or functions which are needed in the library to support block - profiling. */ - /* #define BLOCK_PROFILER_CODE */ - /* Implementing the Varargs Macros. */ --- 1962,1967 ---- *************** typedef struct machine_function *** 3155,3161 **** stack slot. This default is right for most machines. The exceptions are machines where it is impossible to execute instructions in the stack area. On such machines, you may have to implement a separate stack, using this ! macro in conjunction with `FUNCTION_PROLOGUE' and `FUNCTION_EPILOGUE'. FP points to a data structure, a `struct function', which describes the compilation status of the immediate containing function of the function --- 2086,2093 ---- stack slot. This default is right for most machines. The exceptions are machines where it is impossible to execute instructions in the stack area. On such machines, you may have to implement a separate stack, using this ! macro in conjunction with output_function_prologue () and ! output_function_epilogue (). FP points to a data structure, a `struct function', which describes the compilation status of the immediate containing function of the function *************** typedef struct machine_function *** 3313,3388 **** Defined in svr4.h. */ /* #define TARGET_MEM_FUNCTIONS */ - /* Define this macro if only `float' arguments cannot be passed to library - routines (so they must be converted to `double'). This macro affects both - how library calls are generated and how the library routines in `libgcc1.c' - accept their arguments. It is useful on machines where floating and fixed - point arguments are passed differently, such as the i860. */ - /* #define LIBGCC_NEEDS_DOUBLE */ - - /* Define this macro to override the type used by the library routines to pick - up arguments of type `float'. (By default, they use a union of `float' and - `int'.) - - The obvious choice would be `float'--but that won't work with traditional C - compilers that expect all arguments declared as `float' to arrive as - `double'. To avoid this conversion, the library routines ask for the value - as some other type and then treat it as a `float'. - - On some systems, no other type will work for this. For these systems, you - must use `LIBGCC_NEEDS_DOUBLE' instead, to force conversion of the values - `double' before they are passed. */ - /* #define FLOAT_ARG_TYPE */ - - /* Define this macro to override the way library routines redesignate a `float' - argument as a `float' instead of the type it was passed as. The default is - an expression which takes the `float' field of the union. */ - /* #define FLOATIFY(PASSED_VALUE) */ - - /* Define this macro to override the type used by the library routines to - return values that ought to have type `float'. (By default, they use - `int'.) - - The obvious choice would be `float'--but that won't work with traditional C - compilers gratuitously convert values declared as `float' into `double'. */ - /* #define FLOAT_VALUE_TYPE */ - - /* Define this macro to override the way the value of a `float'-returning - library routine should be packaged in order to return it. These functions - are actually declared to return type `FLOAT_VALUE_TYPE' (normally `int'). - - These values can't be returned as type `float' because traditional C - compilers would gratuitously convert the value to a `double'. - - A local variable named `intify' is always available when the macro `INTIFY' - is used. It is a union of a `float' field named `f' and a field named `i' - whose type is `FLOAT_VALUE_TYPE' or `int'. - - If you don't define this macro, the default definition works by copying the - value through that union. */ - /* #define INTIFY(FLOAT_VALUE) */ - - /* Define this macro as the name of the data type corresponding to `SImode' in - the system's own C compiler. - - You need not define this macro if that type is `long int', as it usually is. */ - /* #define nongcc_SI_type */ - - /* Define this macro as the name of the data type corresponding to the - word_mode in the system's own C compiler. - - You need not define this macro if that type is `long int', as it usually is. */ - /* #define nongcc_word_type */ - - /* Define these macros to supply explicit C statements to carry out various - arithmetic operations on types `float' and `double' in the library routines - in `libgcc1.c'. See that file for a full list of these macros and their - arguments. - - On most machines, you don't need to define any of these macros, because the - C compiler that comes with the system takes care of doing them. */ - /* #define perform_... */ - /* Define this macro to generate code for Objective C message sending using the calling convention of the NeXT system. This calling convention involves passing the object, the selector and the method arguments all at once to the --- 2245,2250 ---- *************** extern const char *d30v_branch_cost_stri *** 3817,3833 **** same word of the structure, but to different bytes. */ #define SLOW_BYTE_ACCESS 1 - /* Define this macro if zero-extension (of a `char' or `short' to an `int') can - be done faster if the destination is a register that is known to be zero. - - If you define this macro, you must have instruction patterns that recognize - RTL structures like this: - - (set (strict_low_part (subreg:QI (reg:SI ...) 0)) ...) - - and likewise for `HImode'. */ - #define SLOW_ZERO_EXTEND 0 - /* Define this macro to be the value 1 if unaligned accesses have a cost many times greater than aligned accesses, for example if they are emulated in a trap handler. --- 2679,2684 ---- *************** extern const char *d30v_branch_cost_stri *** 3860,3888 **** with an explicit address than to call an address kept in a register. */ /* #define NO_RECURSIVE_FUNCTION_CSE */ - /* A C statement (sans semicolon) to update the integer variable COST based on - the relationship between INSN that is dependent on DEP_INSN through the - dependence LINK. The default is to make no adjustment to COST. This can be - used for example to specify to the scheduler that an output- or - anti-dependence does not incur the same cost as a data-dependence. */ - - #define ADJUST_COST(INSN,LINK,DEP_INSN,COST) \ - (COST) = d30v_adjust_cost (INSN, LINK, DEP_INSN, COST) - - /* A C statement (sans semicolon) to update the integer scheduling - priority `INSN_PRIORITY(INSN)'. Reduce the priority to execute - the INSN earlier, increase the priority to execute INSN later. - Do not define this macro if you do not need to adjust the - scheduling priorities of insns. */ - /* #define ADJUST_PRIORITY (INSN) */ - - /* Macro to determine whether the Haifa scheduler is used. */ - #ifdef HAIFA - #define HAIFA_P 1 - #else - #define HAIFA_P 0 - #endif - /* Dividing the output into sections. */ --- 2711,2716 ---- *************** extern const char *d30v_branch_cost_stri *** 3951,3957 **** the read-only data section (usually the text section). Defined in svr4.h. */ ! /* #define SELECT_SECTION(EXP, RELOC) */ /* A C statement or statements to switch to the appropriate section for output of RTX in mode MODE. You can assume that RTX is some kind of constant in --- 2779,2785 ---- the read-only data section (usually the text section). Defined in svr4.h. */ ! /* #define SELECT_SECTION(EXP, RELOC, ALIGN) */ /* A C statement or statements to switch to the appropriate section for output of RTX in mode MODE. You can assume that RTX is some kind of constant in *************** extern const char *d30v_branch_cost_stri *** 3963,3969 **** section. Defined in svr4.h. */ ! /* #define SELECT_RTX_SECTION(MODE, RTX) */ /* Define this macro if jump tables (for `tablejump' insns) should be output in the text section, along with the assembler instructions. Otherwise, the --- 2791,2797 ---- section. Defined in svr4.h. */ ! /* #define SELECT_RTX_SECTION(MODE, RTX, ALIGN) */ /* Define this macro if jump tables (for `tablejump' insns) should be output in the text section, along with the assembler instructions. Otherwise, the *************** extern const char *d30v_branch_cost_stri *** 3990,4004 **** the symbol's name string. */ /* #define STRIP_NAME_ENCODING(VAR, SYM_NAME) */ - /* A C expression which evaluates to true if DECL should be placed - into a unique section for some target-specific reason. If you do - not define this macro, the default is `0'. Note that the flag - `-ffunction-sections' will also cause functions to be placed into - unique sections. - - Defined in svr4.h. */ - /* #define UNIQUE_SECTION_P(DECL) */ - /* A C statement to build up a unique section name, expressed as a STRING_CST node, and assign it to `DECL_SECTION_NAME (DECL)'. RELOC indicates whether the initial value of EXP requires --- 2818,2823 ---- *************** extern const char *d30v_branch_cost_stri *** 4118,4134 **** Defined in svr4.h. */ /* #define ASM_OUTPUT_IDENT(STREAM, STRING) */ - /* A C statement to output something to the assembler file to switch to section - NAME for object DECL which is either a `FUNCTION_DECL', a `VAR_DECL' or - `NULL_TREE'. Some target formats do not support arbitrary sections. Do not - define this macro in such cases. - - At present this macro is only used to support section attributes. When this - macro is undefined, section attributes are disabled. - - Defined in svr4.h. */ - /* #define ASM_OUTPUT_SECTION_NAME(STREAM, DECL, NAME) */ - /* A C statement to output any assembler statements which are required to precede any Objective C object definitions or message sending. The statement is executed only when compiling an Objective C program. */ --- 2937,2942 ---- *************** extern const char *d30v_branch_cost_stri *** 4138,4239 **** /* Output of Data. */ /* A C statement to output to the stdio stream STREAM an assembler instruction - to assemble a floating-point constant of `TFmode', `DFmode', `SFmode', - `TQFmode', `HFmode', or `QFmode', respectively, whose value is VALUE. VALUE - will be a C expression of type `REAL_VALUE_TYPE'. Macros such as - `REAL_VALUE_TO_TARGET_DOUBLE' are useful for writing these definitions. */ - - /* #define ASM_OUTPUT_LONG_DOUBLE(STREAM, VALUE) */ - - #define ASM_OUTPUT_DOUBLE(FILE, VALUE) \ - { \ - if (REAL_VALUE_ISINF (VALUE) \ - || REAL_VALUE_ISNAN (VALUE) \ - || REAL_VALUE_MINUS_ZERO (VALUE)) \ - { \ - long t[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), t); \ - fprintf (FILE, "\t.long 0x%lx\n\t.long 0x%lx\n", \ - t[0] & 0xffffffff, t[1] & 0xffffffff); \ - } \ - else \ - { \ - char str[30]; \ - REAL_VALUE_TO_DECIMAL (VALUE, "%.20e", str); \ - fprintf (FILE, "\t.double 0d%s\n", str); \ - } \ - } - - #define ASM_OUTPUT_FLOAT(FILE, VALUE) \ - { \ - if (REAL_VALUE_ISINF (VALUE) \ - || REAL_VALUE_ISNAN (VALUE) \ - || REAL_VALUE_MINUS_ZERO (VALUE)) \ - { \ - long t; \ - REAL_VALUE_TO_TARGET_SINGLE ((VALUE), t); \ - fprintf (FILE, "\t.long 0x%lx\n", t & 0xffffffff); \ - } \ - else \ - { \ - char str[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", str); \ - fprintf (FILE, "\t.float 0d%s\n", str); \ - } \ - } - - /* #define ASM_OUTPUT_THREE_QUARTER_FLOAT(STREAM, VALUE) */ - /* #define ASM_OUTPUT_SHORT_FLOAT(STREAM, VALUE) */ - /* #define ASM_OUTPUT_BYTE_FLOAT(STREAM, VALUE) */ - - /* A C statement to output to the stdio stream STREAM an assembler instruction - to assemble an integer of 16, 8, 4, 2 or 1 bytes, respectively, whose value - is VALUE. The argument EXP will be an RTL expression which represents a - constant value. Use `output_addr_const (STREAM, EXP)' to output this value - as an assembler expression. - - For sizes larger than `UNITS_PER_WORD', if the action of a macro would be - identical to repeatedly calling the macro corresponding to a size of - `UNITS_PER_WORD', once for each word, you need not define the macro. */ - - /* #define ASM_OUTPUT_QUADRUPLE_INT(STREAM, EXP) */ - /* #define ASM_OUTPUT_DOUBLE_INT(STREAM, EXP) */ - - #define ASM_OUTPUT_INT(STREAM, EXP) \ - do { \ - fputs ("\t.word ", STREAM); \ - output_addr_const (STREAM, EXP); \ - putc ('\n', STREAM); \ - } while (0) - - #define ASM_OUTPUT_SHORT(STREAM, EXP) \ - do { \ - fputs ("\t.hword ", STREAM); \ - output_addr_const (STREAM, EXP); \ - putc ('\n', STREAM); \ - } while (0) - - #define ASM_OUTPUT_CHAR(STREAM, EXP) \ - do { \ - fputs ("\t.byte ", STREAM); \ - output_addr_const (STREAM, EXP); \ - putc ('\n', STREAM); \ - } while (0) - - /* A C statement to output to the stdio stream STREAM an assembler instruction - to assemble a single byte containing the number VALUE. */ - - #define ASM_OUTPUT_BYTE(STREAM, VALUE) \ - fprintf (STREAM, "%s%d\n", ASM_BYTE_OP, (int)(VALUE)) - - /* A C string constant giving the pseudo-op to use for a sequence of - single-byte constants. If this macro is not defined, the default - is `"byte"'. - - Defined in svr4.h. */ - /* #define ASM_BYTE_OP */ - - /* A C statement to output to the stdio stream STREAM an assembler instruction to assemble a string constant containing the LEN bytes at PTR. PTR will be a C expression of type `char *' and LEN a C expression of type `int'. --- 2946,2951 ---- *************** do { \ *** 4308,4322 **** is treated as a logical line separator. */ /* #define IS_ASM_LOGICAL_LINE_SEPARATOR(C) */ - /* These macros are defined as C string constant, describing the syntax in the - assembler for grouping arithmetic expressions. The following definitions - are correct for most assemblers: - - #define ASM_OPEN_PAREN "(" - #define ASM_CLOSE_PAREN ")" */ - #define ASM_OPEN_PAREN "(" - #define ASM_CLOSE_PAREN ")" - /* These macros are provided by `real.h' for writing the definitions of `ASM_OUTPUT_DOUBLE' and the like: */ --- 3020,3025 ---- *************** do { \ *** 4700,4706 **** Defined in svr4.h. */ /* #define INIT_SECTION_ASM_OP */ - #undef INIT_SECTION_ASM_OP /* If defined, `main' will not call `__main' as described above. This macro should be defined for systems that control the contents of the init section --- 3403,3408 ---- *************** do { \ *** 4722,4750 **** collecting the lists of constructors and destructors. */ #define INVOKE__main - /* Define this macro as a C statement to output on the stream STREAM the - assembler code to arrange to call the function named NAME at initialization - time. - - Assume that NAME is the name of a C function generated automatically by the - compiler. This function takes no arguments. Use the function - `assemble_name' to output the name NAME; this performs any system-specific - syntactic transformations such as adding an underscore. - - If you don't define this macro, nothing special is output to arrange to call - the function. This is correct when the function will be called in some - other manner--for example, by means of the `collect2' program, which looks - through the symbol table to find these functions by their names. - - Defined in svr4.h. */ - /* #define ASM_OUTPUT_CONSTRUCTOR(STREAM, NAME) */ - - /* This is like `ASM_OUTPUT_CONSTRUCTOR' but used for termination functions - rather than initialization functions. - - Defined in svr4.h. */ - /* #define ASM_OUTPUT_DESTRUCTOR(STREAM, NAME) */ - /* If your system uses `collect2' as the means of processing constructors, then that program normally uses `nm' to scan an object file for constructor functions to be called. On certain kinds of systems, you can define these --- 3424,3429 ---- *************** fprintf (STREAM, "\t.word .L%d\n", VALUE *** 5081,5130 **** /* Assembler Commands for Exception Regions. */ - /* A C expression to output text to mark the start of an exception region. - - This macro need not be defined on most platforms. */ - /* #define ASM_OUTPUT_EH_REGION_BEG() */ - - /* A C expression to output text to mark the end of an exception region. - - This macro need not be defined on most platforms. */ - /* #define ASM_OUTPUT_EH_REGION_END() */ - - /* A C expression to switch to the section in which the main exception table is - to be placed (*note Sections::.). The default is a section named - `.gcc_except_table' on machines that support named sections via - `ASM_OUTPUT_SECTION_NAME', otherwise if `-fpic' or `-fPIC' is in effect, the - `data_section', otherwise the `readonly_data_section'. */ - /* #define EXCEPTION_SECTION() */ - - /* If defined, a C string constant for the assembler operation to switch to the - section for exception handling frame unwind information. If not defined, - GNU CC will provide a default definition if the target supports named - sections. `crtstuff.c' uses this macro to switch to the appropriate - section. - - You should define this symbol if your target supports DWARF 2 frame unwind - information and the default definition does not work. */ - /* #define EH_FRAME_SECTION_ASM_OP */ - - /* A C expression that is nonzero if the normal exception table output should - be omitted. - - This macro need not be defined on most platforms. */ - /* #define OMIT_EH_TABLE() */ - - /* Alternate runtime support for looking up an exception at runtime and finding - the associated handler, if the default method won't work. - - This macro need not be defined on most platforms. */ - /* #define EH_TABLE_LOOKUP() */ - - /* A C expression that decides whether or not the current function needs to - have a function unwinder generated for it. See the file `except.c' for - details on when to define this, and how. */ - /* #define DOESNT_NEED_UNWINDER */ - /* An rtx used to mask the return address found via RETURN_ADDR_RTX, so that it does not contain any extraneous set bits in it. */ /* #define MASK_RETURN_ADDR */ --- 3760,3765 ---- *************** fprintf (STREAM, "\t.word .L%d\n", VALUE *** 5132,5139 **** /* Define this macro to 0 if your target supports DWARF 2 frame unwind information, but it does not yet work with exception handling. Otherwise, if your target supports this information (if it defines ! `INCOMING_RETURN_ADDR_RTX' and either `UNALIGNED_INT_ASM_OP' or ! `OBJECT_FORMAT_ELF'), GCC will provide a default definition of 1. If this macro is defined to 1, the DWARF 2 unwinder will be the default exception handling mechanism; otherwise, setjmp/longjmp will be used by --- 3767,3773 ---- /* Define this macro to 0 if your target supports DWARF 2 frame unwind information, but it does not yet work with exception handling. Otherwise, if your target supports this information (if it defines ! `INCOMING_RETURN_ADDR_RTX'), GCC will provide a default definition of 1. If this macro is defined to 1, the DWARF 2 unwinder will be the default exception handling mechanism; otherwise, setjmp/longjmp will be used by *************** fprintf (STREAM, "\t.word .L%d\n", VALUE *** 5426,5432 **** /* Some stabs encapsulation formats (in particular ECOFF), cannot handle the `.stabs "",N_FUN,,0,0,Lscope-function-1' gdb dbx ! extention construct. On those machines, define this macro to turn this feature off without disturbing the rest of the gdb extensions. */ /* #define NO_DBX_FUNCTION_END */ --- 4060,4066 ---- /* Some stabs encapsulation formats (in particular ECOFF), cannot handle the `.stabs "",N_FUN,,0,0,Lscope-function-1' gdb dbx ! extension construct. On those machines, define this macro to turn this feature off without disturbing the rest of the gdb extensions. */ /* #define NO_DBX_FUNCTION_END */ *************** fprintf (STREAM, "\t.word .L%d\n", VALUE *** 5493,5500 **** To support optional call frame debugging information, you must also define `INCOMING_RETURN_ADDR_RTX' and either set `RTX_FRAME_RELATED_P' on the prologue insns if you use RTL for the prologue, or call `dwarf2out_def_cfa' ! and `dwarf2out_reg_save' as appropriate from `FUNCTION_PROLOGUE' if you ! don't. Defined in svr4.h. */ /* #define DWARF2_DEBUGGING_INFO */ --- 4127,4134 ---- To support optional call frame debugging information, you must also define `INCOMING_RETURN_ADDR_RTX' and either set `RTX_FRAME_RELATED_P' on the prologue insns if you use RTL for the prologue, or call `dwarf2out_def_cfa' ! and `dwarf2out_reg_save' as appropriate from output_function_prologue() if ! you don't. Defined in svr4.h. */ /* #define DWARF2_DEBUGGING_INFO */ *************** fprintf (STREAM, "\t.word .L%d\n", VALUE *** 5792,5814 **** /* Define if loading short immediate values into registers sign extends. */ #define SHORT_IMMEDIATES_SIGN_EXTEND - /* An alias for a tree code that should be used by default for conversion of - floating point values to fixed point. Normally, `FIX_ROUND_EXPR' is used. */ - #define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR - /* Define this macro if the same instructions that convert a floating point number to a signed fixed point number also convert validly to an unsigned one. */ /* #define FIXUNS_TRUNC_LIKE_FIX_TRUNC */ - /* An alias for a tree code that is the easiest kind of division to compile - code for in the general case. It may be `TRUNC_DIV_EXPR', `FLOOR_DIV_EXPR', - `CEIL_DIV_EXPR' or `ROUND_DIV_EXPR'. These four division operators differ - in how they round the result to an integer. `EASY_DIV_EXPR' is used when it - is permissible to use any of those kinds of division and the choice should - be made on the basis of efficiency. */ - #define EASY_DIV_EXPR TRUNC_DIV_EXPR - /* The maximum number of bytes that a single instruction can move quickly from memory to memory. */ #define MOVE_MAX 8 --- 4426,4436 ---- *************** fprintf (STREAM, "\t.word .L%d\n", VALUE *** 5983,6007 **** must also be defined). */ /* #define HANDLE_WEAK_PRAGMA */ - /* If defined, a C expression whose value is nonzero if IDENTIFIER with - arguments ARGS is a valid machine specific attribute for DECL. The - attributes in ATTRIBUTES have previously been assigned to DECL. */ - /* #define VALID_MACHINE_DECL_ATTRIBUTE(DECL, ATTRIBUTES, IDENTIFIER, ARGS) */ - - /* If defined, a C expression whose value is nonzero if IDENTIFIER with - arguments ARGS is a valid machine specific attribute for TYPE. The - attributes in ATTRIBUTES have previously been assigned to TYPE. */ - /* #define VALID_MACHINE_TYPE_ATTRIBUTE(TYPE, ATTRIBUTES, IDENTIFIER, ARGS) */ - - /* If defined, a C expression whose value is zero if the attributes on TYPE1 - and TYPE2 are incompatible, one if they are compatible, and two if they are - nearly compatible (which causes a warning to be generated). */ - /* #define COMP_TYPE_ATTRIBUTES(TYPE1, TYPE2) */ - - /* If defined, a C statement that assigns default attributes to newly defined - TYPE. */ - /* #define SET_DEFAULT_TYPE_ATTRIBUTES(TYPE) */ - /* Define this macro to control use of the character `$' in identifier names. The value should be 0, 1, or 2. 0 means `$' is not allowed by default; 1 means it is allowed by default if `-traditional' is used; 2 means it is --- 4605,4610 ---- *************** fprintf (STREAM, "\t.word .L%d\n", VALUE *** 6082,6088 **** extern int d30v_cond_exec; extern const char *d30v_cond_exec_string; - /* Indicate how many instructions can be issued at the same time. */ - #define ISSUE_RATE 2 - #endif /* GCC_D30V_H */ --- 4685,4688 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/d30v/d30v.md gcc-3.1/gcc/config/d30v/d30v.md *** gcc-3.0.4/gcc/config/d30v/d30v.md Tue Jan 9 18:07:51 2001 --- gcc-3.1/gcc/config/d30v/d30v.md Wed Oct 31 14:08:00 2001 *************** *** 2934,2940 **** ;; Called after register allocation to add any instructions needed for the ;; prologue. Using a prologue insn is favored compared to putting all of the ! ;; instructions in the FUNCTION_PROLOGUE macro, since it allows the scheduler ;; to intermix instructions with the saves of the caller saved registers. In ;; some cases, it might be necessary to emit a barrier instruction as the last ;; insn to prevent such scheduling. --- 2934,2940 ---- ;; Called after register allocation to add any instructions needed for the ;; prologue. Using a prologue insn is favored compared to putting all of the ! ;; instructions in output_function_prologue (), since it allows the scheduler ;; to intermix instructions with the saves of the caller saved registers. In ;; some cases, it might be necessary to emit a barrier instruction as the last ;; insn to prevent such scheduling. *************** *** 2949,2956 **** }") ;; Called after register allocation to add any instructions needed for the ! ;; epilogue. Using a epilogue insn is favored compared to putting all of the ! ;; instructions in the FUNCTION_PROLOGUE macro, since it allows the scheduler ;; to intermix instructions with the saves of the caller saved registers. In ;; some cases, it might be necessary to emit a barrier instruction as the last ;; insn to prevent such scheduling. --- 2949,2956 ---- }") ;; Called after register allocation to add any instructions needed for the ! ;; epilogue. Using an epilogue insn is favored compared to putting all of the ! ;; instructions in output_function_epilogue (), since it allows the scheduler ;; to intermix instructions with the saves of the caller saved registers. In ;; some cases, it might be necessary to emit a barrier instruction as the last ;; insn to prevent such scheduling. diff -Nrc3pad gcc-3.0.4/gcc/config/d30v/libgcc1.asm gcc-3.1/gcc/config/d30v/libgcc1.asm *** gcc-3.0.4/gcc/config/d30v/libgcc1.asm Mon May 15 23:14:16 2000 --- gcc-3.1/gcc/config/d30v/libgcc1.asm Thu May 17 03:15:52 2001 *************** *** 1,4 **** ! /* Assembly support functions for libgcc1. * * Copyright (C) 1997 Free Software Foundation, Inc. * Contributed by Cygnus Support --- 1,4 ---- ! /* Assembly support functions for libgcc. * * Copyright (C) 1997 Free Software Foundation, Inc. * Contributed by Cygnus Support diff -Nrc3pad gcc-3.0.4/gcc/config/d30v/t-d30v gcc-3.1/gcc/config/d30v/t-d30v *** gcc-3.0.4/gcc/config/d30v/t-d30v Sun Apr 30 11:17:13 2000 --- gcc-3.1/gcc/config/d30v/t-d30v Thu May 17 03:15:52 2001 *************** *** 1,6 **** - # Build libgcc1 from assembler sources - LIBGCC1 = libgcc1-asm.a - CROSS_LIBGCC1 = libgcc1-asm.a LIB1ASMSRC = d30v/libgcc1.asm LIB1ASMFUNCS = _udivsi3 _divsi3 --- 1,3 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/d30v/xm-d30v.h gcc-3.1/gcc/config/d30v/xm-d30v.h *** gcc-3.0.4/gcc/config/d30v/xm-d30v.h Thu Mar 15 19:02:02 2001 --- gcc-3.1/gcc/config/d30v/xm-d30v.h Thu Jan 1 00:00:00 1970 *************** *** 1,189 **** - /* Configuration for GNU C-compiler for Mitsubishi D30V. - Copyright (C) 1997, 2000 Free Software Foundation, Inc. - Contributed by Cygnus Solutions. - - 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. */ - - /* Define this macro if the host system is System V. */ - /* #define USG */ - - /* Define this macro if the host system is VMS. */ - /* #define VMS */ - - /* A C expression for the status code to be returned when the compiler exits - after serious errors. */ - #define FATAL_EXIT_CODE 33 - - /* A C expression for the status code to be returned when the compiler exits - without serious errors. */ - #define SUCCESS_EXIT_CODE 0 - - /* Defined if the host machine stores words of multi-word values in big-endian - order. (GNU CC does not depend on the host byte ordering within a word.) */ - #define HOST_WORDS_BIG_ENDIAN - - /* Define this macro to be 1 if the host machine stores `DFmode', `XFmode' or - `TFmode' floating point numbers in memory with the word containing the sign - bit at the lowest address; otherwise, define it to be zero. - - This macro need not be defined if the ordering is the same as for multi-word - integers. */ - /* #define HOST_FLOAT_WORDS_BIG_ENDIAN */ - - /* A numeric code distinguishing the floating point format for the host - machine. See `TARGET_FLOAT_FORMAT' in *Note Storage Layout:: for the - alternatives and default. */ - /* #define HOST_FLOAT_FORMAT */ - - /* A C expression for the number of bits in `char' on the host machine. */ - #define HOST_BITS_PER_CHAR 8 - - /* A C expression for the number of bits in `short' on the host machine. */ - #define HOST_BITS_PER_SHORT 16 - - /* A C expression for the number of bits in `int' on the host machine. */ - #define HOST_BITS_PER_INT 32 - - /* A C expression for the number of bits in `long' on the host machine. */ - #define HOST_BITS_PER_LONG 32 - - /* Define this macro to indicate that the host compiler only supports `int' bit - fields, rather than other integral types, including `enum', as do most C - compilers. */ - /* #define ONLY_INT_FIELDS */ - - /* A C expression for the size of ordinary obstack chunks. If you don't define - this, a usually-reasonable default is used. */ - /* #define OBSTACK_CHUNK_SIZE */ - - /* The function used to allocate obstack chunks. If you don't define this, - `xmalloc' is used. */ - /* #define OBSTACK_CHUNK_ALLOC */ - - /* The function used to free obstack chunks. If you don't define this, `free' - is used. */ - /* #define OBSTACK_CHUNK_FREE */ - - /* Define this macro to indicate that the compiler is running with the `alloca' - implemented in C. This version of `alloca' can be found in the file - `alloca.c'; to use it, you must also alter the `Makefile' variable `ALLOCA'. - (This is done automatically for the systems on which we know it is needed.) - - If you do define this macro, you should probably do it as follows: - - #ifndef __GNUC__ - #define USE_C_ALLOCA - #else - #define alloca __builtin_alloca - #endif - - so that when the compiler is compiled with GNU CC it uses the more efficient - built-in `alloca' function. */ - - #ifndef __GNUC__ - #define USE_C_ALLOCA - #else - #define alloca __builtin_alloca - #endif - - /* Define this macro to indicate that the host compiler does not properly - handle converting a function value to a pointer-to-function when it is used - in an expression. */ - /* #define FUNCTION_CONVERSION_BUG */ - - /* Define this if the library function `vprintf' is available on your system. */ - /* #define HAVE_VPRINTF */ - - /* Define this macro to enable support for multibyte characters in the input to - GNU CC. This requires that the host system support the ANSI C library - functions for converting multibyte characters to wide characters. */ - /* #define MULTIBYTE_CHARS */ - - /* Define this if the library function `putenv' is available on your system. */ - /* #define HAVE_PUTENV */ - - /* Define this if your system is POSIX.1 compliant. */ - /* #define POSIX */ - - /* Define this if your system has the variable `sys_siglist', and there is - already a declaration of it in the system header files. */ - /* #define DONT_DECLARE_SYS_SIGLIST */ - - /* Define this to be 1 if you know that the host compiler supports prototypes, - even if it doesn't define __STDC__, or define it to be 0 if you do not want - any prototypes used in compiling GNU CC. If `USE_PROTOTYPES' is not - defined, it will be determined automatically whether your compiler supports - prototypes by checking if `__STDC__' is defined. */ - /* #define USE_PROTOTYPES */ - - /* Define this if you wish suppression of prototypes generated from the machine - description file, but to use other prototypes within GNU CC. If - `USE_PROTOTYPES' is defined to be 0, or the host compiler does not support - prototypes, this macro has no effect. */ - /* #define NO_MD_PROTOTYPES */ - - /* Define this if you wish to generate prototypes for the `gen_call' or - `gen_call_value' functions generated from the machine description file. If - `USE_PROTOTYPES' is defined to be 0, or the host compiler does not support - prototypes, or `NO_MD_PROTOTYPES' is defined, this macro has no effect. As - soon as all of the machine descriptions are modified to have the appropriate - number of arguments, this macro will be removed. - - Some systems do provide this variable, but with a different name such as - `_sys_siglist'. On these systems, you can define `sys_siglist' as a macro - which expands into the name actually provided. */ - /* #define MD_CALL_PROTOTYPES */ - - /* Define this macro to be a C character constant representing the character - used to separate components in paths. The default value is. the colon - character */ - /* #define PATH_SEPARATOR */ - - /* If your system uses some character other than slash to separate directory - names within a file specification, define this macro to be a C character - constant specifying that character. When GNU CC displays file names, the - character you specify will be used. GNU CC will test for both slash and the - character you specify when parsing filenames. */ - /* #define DIR_SEPARATOR */ - - /* Define this macro to be a C string representing the suffix for object files - on your machine. If you do not define this macro, GNU CC will use `.o' as - the suffix for object files. */ - /* #define OBJECT_SUFFIX */ - - /* Define this macro to be a C string representing the suffix for executable - files on your machine. If you do not define this macro, GNU CC will use the - null string as the suffix for object files. */ - /* #define EXECUTABLE_SUFFIX */ - - /* If defined, `collect2' will scan the individual object files specified on - its command line and create an export list for the linker. Define this - macro for systems like AIX, where the linker discards object files that are - not referenced from `main' and uses export lists. */ - /* #define COLLECT_EXPORT_LIST */ - - /* In addition, configuration files for system V define `bcopy', `bzero' and - `bcmp' as aliases. Some files define `alloca' as a macro when compiled with - GNU CC, in order to take advantage of the benefit of GNU CC's built-in - `alloca'. */ - - /* target machine dependencies. - tm.h is a symbolic link to the actual target specific file. */ - #include "tm.h" - - /* end of xm-generic.h */ --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/darwin-c.c gcc-3.1/gcc/config/darwin-c.c *** gcc-3.0.4/gcc/config/darwin-c.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/darwin-c.c Thu Jun 28 19:55:52 2001 *************** *** 0 **** --- 1,153 ---- + /* Darwin support needed only by C/C++ frontends. + Copyright (C) 2001 + Free Software Foundation, Inc. + Contributed by Apple Computer 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 "config.h" + #include "system.h" + #include "cpplib.h" + #include "tree.h" + #include "c-pragma.h" + #include "c-lex.h" + #include "c-tree.h" + #include "toplev.h" + #include "tm_p.h" + + /* Pragmas. */ + + #define BAD(msgid) do { warning (msgid); return; } while (0) + + /* Maintain a small stack of alignments. This is similar to pragma + pack's stack, but simpler. */ + + static void push_field_alignment PARAMS ((int)); + static void pop_field_alignment PARAMS ((void)); + + typedef struct align_stack + { + int alignment; + struct align_stack * prev; + } align_stack; + + static struct align_stack * field_align_stack = NULL; + + static void + push_field_alignment (bit_alignment) + int bit_alignment; + { + align_stack *entry = (align_stack *) xmalloc (sizeof (align_stack)); + + entry->alignment = maximum_field_alignment; + entry->prev = field_align_stack; + field_align_stack = entry; + + maximum_field_alignment = bit_alignment; + } + + static void + pop_field_alignment () + { + if (field_align_stack) + { + align_stack *entry = field_align_stack; + + maximum_field_alignment = entry->alignment; + field_align_stack = entry->prev; + free (entry); + } + else + error ("too many #pragma options align=reset"); + } + + /* Handlers for Darwin-specific pragmas. */ + + void + darwin_pragma_ignore (pfile) + cpp_reader *pfile ATTRIBUTE_UNUSED; + { + /* Do nothing. */ + } + + /* #pragma options align={mac68k|power|reset} */ + + void + darwin_pragma_options (pfile) + cpp_reader *pfile ATTRIBUTE_UNUSED; + { + char *arg; + tree t, x; + + if (c_lex (&t) != CPP_NAME) + BAD ("malformed '#pragma options', ignoring"); + arg = IDENTIFIER_POINTER (t); + if (strcmp (arg, "align")) + BAD ("malformed '#pragma options', ignoring"); + if (c_lex (&t) != CPP_EQ) + BAD ("malformed '#pragma options', ignoring"); + if (c_lex (&t) != CPP_NAME) + BAD ("malformed '#pragma options', ignoring"); + + if (c_lex (&x) != CPP_EOF) + warning ("junk at end of '#pragma options'"); + + arg = IDENTIFIER_POINTER (t); + if (!strcmp (arg, "mac68k")) + push_field_alignment (16); + else if (!strcmp (arg, "power")) + push_field_alignment (0); + else if (!strcmp (arg, "reset")) + pop_field_alignment (); + else + warning ("malformed '#pragma options align={mac68k|power|reset}', ignoring"); + } + + /* #pragma unused ([var {, var}*]) */ + + void + darwin_pragma_unused (pfile) + cpp_reader *pfile ATTRIBUTE_UNUSED; + { + tree decl, x; + int tok; + + if (c_lex (&x) != CPP_OPEN_PAREN) + BAD ("missing '(' after '#pragma unused', ignoring"); + + while (1) + { + tok = c_lex (&decl); + if (tok == CPP_NAME && decl) + { + tree local = IDENTIFIER_LOCAL_VALUE (decl); + if (local && (TREE_CODE (local) == PARM_DECL + || TREE_CODE (local) == VAR_DECL)) + TREE_USED (local) = 1; + tok = c_lex (&x); + if (tok != CPP_COMMA) + break; + } + } + + if (tok != CPP_CLOSE_PAREN) + BAD ("missing ')' after '#pragma unused', ignoring"); + + if (c_lex (&x) != CPP_EOF) + warning ("junk at end of '#pragma unused'"); + } diff -Nrc3pad gcc-3.0.4/gcc/config/darwin-protos.h gcc-3.1/gcc/config/darwin-protos.h *** gcc-3.0.4/gcc/config/darwin-protos.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/darwin-protos.h Fri Dec 21 10:44:50 2001 *************** *** 0 **** --- 1,76 ---- + /* Prototypes. + Copyright (C) 2001 Free Software Foundation, Inc. + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GNU CC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU CC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + extern int name_needs_quotes PARAMS ((const char *)); + + extern void machopic_validate_stub_or_non_lazy_ptr PARAMS ((const char *, int)); + + extern char *machopic_function_base_name PARAMS ((void)); + extern char *machopic_non_lazy_ptr_name PARAMS ((const char*)); + extern char *machopic_stub_name PARAMS ((const char*)); + + extern void machopic_add_gc_roots PARAMS ((void)); + + extern void machopic_picsymbol_stub_section PARAMS ((void)); + extern void machopic_symbol_stub_section PARAMS ((void)); + extern void machopic_lazy_symbol_ptr_section PARAMS ((void)); + extern void machopic_nl_symbol_ptr_section PARAMS ((void)); + + extern void constructor_section PARAMS ((void)); + extern void destructor_section PARAMS ((void)); + extern void mod_init_section PARAMS ((void)); + extern void mod_term_section PARAMS ((void)); + + #ifdef RTX_CODE + + extern int machopic_operand_p PARAMS ((rtx)); + extern enum machopic_addr_class machopic_classify_name PARAMS ((const char*)); + + extern rtx machopic_indirect_data_reference PARAMS ((rtx, rtx)); + extern rtx machopic_indirect_call_target PARAMS ((rtx)); + extern rtx machopic_legitimize_pic_address PARAMS ((rtx, enum machine_mode, rtx)); + + extern void machopic_asm_out_constructor PARAMS ((rtx, int)); + extern void machopic_asm_out_destructor PARAMS ((rtx, int)); + #endif /* RTX_CODE */ + + #ifdef TREE_CODE + + extern enum machopic_addr_class machopic_classify_ident PARAMS ((tree)); + extern void machopic_define_ident PARAMS ((tree)); + extern void machopic_define_name PARAMS ((const char*)); + extern int machopic_name_defined_p PARAMS ((const char*)); + extern int machopic_ident_defined_p PARAMS ((tree)); + extern void darwin_encode_section_info PARAMS ((tree)); + + #endif /* TREE_CODE */ + + extern void machopic_finish PARAMS ((FILE *)); + + extern void machopic_output_possible_stub_label PARAMS ((FILE *, const char*)); + + extern void darwin_exception_section PARAMS ((void)); + extern void darwin_eh_frame_section PARAMS ((void)); + + #ifdef GCC_C_PRAGMA_H + extern void darwin_pragma_ignore PARAMS ((cpp_reader *)); + extern void darwin_pragma_options PARAMS ((cpp_reader *)); + extern void darwin_pragma_unused PARAMS ((cpp_reader *)); + #endif diff -Nrc3pad gcc-3.0.4/gcc/config/darwin.c gcc-3.1/gcc/config/darwin.c *** gcc-3.0.4/gcc/config/darwin.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/darwin.c Thu Jan 3 17:13:37 2002 *************** *** 0 **** --- 1,1141 ---- + /* Functions for generic Darwin as target machine for GNU C compiler. + Copyright (C) 1989, 1990, 1991, 1992, 1993, 2000, 2001 + Free Software Foundation, Inc. + Contributed by Apple Computer 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 "config.h" + #include "system.h" + #include "rtl.h" + #include "regs.h" + #include "hard-reg-set.h" + #include "real.h" + #include "insn-config.h" + #include "conditions.h" + #include "insn-flags.h" + #include "output.h" + #include "insn-attr.h" + #include "flags.h" + #include "tree.h" + #include "expr.h" + #include "reload.h" + #include "function.h" + #include "ggc.h" + #include "langhooks.h" + + #include "darwin-protos.h" + + extern void machopic_output_stub PARAMS ((FILE *, const char *, const char *)); + + static int machopic_data_defined_p PARAMS ((const char *)); + static int func_name_maybe_scoped PARAMS ((const char *)); + static void update_non_lazy_ptrs PARAMS ((const char *)); + static void update_stubs PARAMS ((const char *)); + + int + name_needs_quotes (name) + const char *name; + { + int c; + while ((c = *name++) != '\0') + if (! ISIDNUM (c)) + return 1; + return 0; + } + + /* + * flag_pic = 1 ... generate only indirections + * flag_pic = 2 ... generate indirections and pure code + */ + + /* This module assumes that (const (symbol_ref "foo")) is a legal pic + reference, which will not be changed. */ + + static tree machopic_defined_list; + + enum machopic_addr_class + machopic_classify_ident (ident) + tree ident; + { + const char *name = IDENTIFIER_POINTER (ident); + int lprefix = (((name[0] == '*' || name[0] == '&') + && (name[1] == 'L' || (name[1] == '"' && name[2] == 'L'))) + || ( name[0] == '_' + && name[1] == 'O' + && name[2] == 'B' + && name[3] == 'J' + && name[4] == 'C' + && name[5] == '_')); + tree temp; + + if (name[0] != '!') + { + /* Here if no special encoding to be found. */ + if (lprefix) + { + const char *name = IDENTIFIER_POINTER (ident); + int len = strlen (name); + + if ((len > 5 && !strcmp (name + len - 5, "$stub")) + || (len > 6 && !strcmp (name + len - 6, "$stub\""))) + return MACHOPIC_DEFINED_FUNCTION; + return MACHOPIC_DEFINED_DATA; + } + + for (temp = machopic_defined_list; + temp != NULL_TREE; + temp = TREE_CHAIN (temp)) + { + if (ident == TREE_VALUE (temp)) + return MACHOPIC_DEFINED_DATA; + } + + if (TREE_ASM_WRITTEN (ident)) + return MACHOPIC_DEFINED_DATA; + + return MACHOPIC_UNDEFINED; + } + + else if (name[1] == 'D') + return MACHOPIC_DEFINED_DATA; + + else if (name[1] == 'T') + return MACHOPIC_DEFINED_FUNCTION; + + /* It is possible that someone is holding a "stale" name, which has + since been defined. See if there is a "defined" name (i.e, + different from NAME only in having a '!D_' or a '!T_' instead of + a '!d_' or '!t_' prefix) in the identifier hash tables. If so, say + that this identifier is defined. */ + else if (name[1] == 'd' || name[1] == 't') + { + char *new_name; + new_name = (char *)alloca (strlen (name) + 1); + strcpy (new_name, name); + new_name[1] = (name[1] == 'd') ? 'D' : 'T'; + if (maybe_get_identifier (new_name) != NULL) + return (name[1] == 'd') ? MACHOPIC_DEFINED_DATA + : MACHOPIC_DEFINED_FUNCTION; + } + + for (temp = machopic_defined_list; temp != NULL_TREE; temp = TREE_CHAIN (temp)) + { + if (ident == TREE_VALUE (temp)) + { + if (name[1] == 'T') + return MACHOPIC_DEFINED_FUNCTION; + else + return MACHOPIC_DEFINED_DATA; + } + } + + if (name[1] == 't' || name[1] == 'T') + { + if (lprefix) + return MACHOPIC_DEFINED_FUNCTION; + else + return MACHOPIC_UNDEFINED_FUNCTION; + } + else + { + if (lprefix) + return MACHOPIC_DEFINED_DATA; + else + return MACHOPIC_UNDEFINED_DATA; + } + } + + + enum machopic_addr_class + machopic_classify_name (name) + const char *name; + { + return machopic_classify_ident (get_identifier (name)); + } + + int + machopic_ident_defined_p (ident) + tree ident; + { + switch (machopic_classify_ident (ident)) + { + case MACHOPIC_UNDEFINED: + case MACHOPIC_UNDEFINED_DATA: + case MACHOPIC_UNDEFINED_FUNCTION: + return 0; + default: + return 1; + } + } + + static int + machopic_data_defined_p (name) + const char *name; + { + switch (machopic_classify_ident (get_identifier (name))) + { + case MACHOPIC_DEFINED_DATA: + return 1; + default: + return 0; + } + } + + int + machopic_name_defined_p (name) + const char *name; + { + return machopic_ident_defined_p (get_identifier (name)); + } + + void + machopic_define_ident (ident) + tree ident; + { + if (!machopic_ident_defined_p (ident)) + machopic_defined_list = + tree_cons (NULL_TREE, ident, machopic_defined_list); + } + + void + machopic_define_name (name) + const char *name; + { + machopic_define_ident (get_identifier (name)); + } + + /* This is a static to make inline functions work. The rtx + representing the PIC base symbol always points to here. */ + + static char function_base[32]; + + static int current_pic_label_num; + + char * + machopic_function_base_name () + { + static const char *name = NULL; + static const char *current_name; + + current_name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (current_function_decl)); + + if (name != current_name) + { + current_function_uses_pic_offset_table = 1; + + /* Save mucho space and time. Some of the C++ mangled names are over + 700 characters long! Note that we produce a label containing a '-' + if the function we're compiling is an Objective-C method, as evinced + by the incredibly scientific test below. This is because code in + rs6000.c makes the same ugly test when loading the PIC reg. */ + + ++current_pic_label_num; + if (*current_name == '+' || *current_name == '-') + sprintf (function_base, "*\"L-%d$pb\"", current_pic_label_num); + else + sprintf (function_base, "*L%d$pb", current_pic_label_num); + + name = current_name; + } + + return function_base; + } + + static tree machopic_non_lazy_pointers = NULL; + + /* Return a non-lazy pointer name corresponding to the given name, + either by finding it in our list of pointer names, or by generating + a new one. */ + + char * + machopic_non_lazy_ptr_name (name) + const char *name; + { + char *temp_name; + tree temp, ident = get_identifier (name); + + for (temp = machopic_non_lazy_pointers; + temp != NULL_TREE; + temp = TREE_CHAIN (temp)) + { + if (ident == TREE_VALUE (temp)) + return IDENTIFIER_POINTER (TREE_PURPOSE (temp)); + } + + STRIP_NAME_ENCODING (name, name); + + /* Try again, but comparing names this time. */ + for (temp = machopic_non_lazy_pointers; + temp != NULL_TREE; + temp = TREE_CHAIN (temp)) + { + if (TREE_VALUE (temp)) + { + temp_name = IDENTIFIER_POINTER (TREE_VALUE (temp)); + STRIP_NAME_ENCODING (temp_name, temp_name); + if (strcmp (name, temp_name) == 0) + return IDENTIFIER_POINTER (TREE_PURPOSE (temp)); + } + } + + { + char *buffer; + tree ptr_name; + + buffer = alloca (strlen (name) + 20); + + strcpy (buffer, "&L"); + if (name[0] == '*') + strcat (buffer, name+1); + else + { + strcat (buffer, "_"); + strcat (buffer, name); + } + + strcat (buffer, "$non_lazy_ptr"); + ptr_name = get_identifier (buffer); + + machopic_non_lazy_pointers + = tree_cons (ptr_name, ident, machopic_non_lazy_pointers); + + TREE_USED (machopic_non_lazy_pointers) = 0; + + return IDENTIFIER_POINTER (ptr_name); + } + } + + static tree machopic_stubs = 0; + + /* Make sure the GC knows about our homemade lists. */ + + void + machopic_add_gc_roots () + { + ggc_add_tree_root (&machopic_defined_list, 1); + ggc_add_tree_root (&machopic_non_lazy_pointers, 1); + ggc_add_tree_root (&machopic_stubs, 1); + } + + /* Return the name of the stub corresponding to the given name, + generating a new stub name if necessary. */ + + char * + machopic_stub_name (name) + const char *name; + { + tree temp, ident = get_identifier (name); + const char *tname; + + for (temp = machopic_stubs; + temp != NULL_TREE; + temp = TREE_CHAIN (temp)) + { + if (ident == TREE_VALUE (temp)) + return IDENTIFIER_POINTER (TREE_PURPOSE (temp)); + tname = IDENTIFIER_POINTER (TREE_VALUE (temp)); + if (strcmp (name, tname) == 0) + return IDENTIFIER_POINTER (TREE_PURPOSE (temp)); + /* A library call name might not be section-encoded yet, so try + it against a stripped name. */ + if (name[0] != '!' + && tname[0] == '!' + && strcmp (name, tname + 4) == 0) + return IDENTIFIER_POINTER (TREE_PURPOSE (temp)); + } + + STRIP_NAME_ENCODING (name, name); + + { + char *buffer; + tree ptr_name; + int needs_quotes = name_needs_quotes (name); + + buffer = alloca (strlen (name) + 20); + + if (needs_quotes) + strcpy (buffer, "&\"L"); + else + strcpy (buffer, "&L"); + if (name[0] == '*') + { + strcat (buffer, name+1); + } + else + { + strcat (buffer, "_"); + strcat (buffer, name); + } + + if (needs_quotes) + strcat (buffer, "$stub\""); + else + strcat (buffer, "$stub"); + ptr_name = get_identifier (buffer); + + machopic_stubs = tree_cons (ptr_name, ident, machopic_stubs); + TREE_USED (machopic_stubs) = 0; + + return IDENTIFIER_POINTER (ptr_name); + } + } + + void + machopic_validate_stub_or_non_lazy_ptr (name, validate_stub) + const char *name; + int validate_stub; + { + char *real_name; + tree temp, ident = get_identifier (name), id2; + + for (temp = (validate_stub ? machopic_stubs : machopic_non_lazy_pointers); + temp != NULL_TREE; + temp = TREE_CHAIN (temp)) + if (ident == TREE_PURPOSE (temp)) + { + /* Mark both the stub or non-lazy pointer as well as the + original symbol as being referenced. */ + TREE_USED (temp) = 1; + if (TREE_CODE (TREE_VALUE (temp)) == IDENTIFIER_NODE) + TREE_SYMBOL_REFERENCED (TREE_VALUE (temp)) = 1; + STRIP_NAME_ENCODING (real_name, IDENTIFIER_POINTER (TREE_VALUE (temp))); + id2 = maybe_get_identifier (real_name); + if (id2) + TREE_SYMBOL_REFERENCED (id2) = 1; + } + } + + /* Transform ORIG, which may be any data source, to the corresponding + source using indirections. */ + + rtx + machopic_indirect_data_reference (orig, reg) + rtx orig, reg; + { + rtx ptr_ref = orig; + + if (! MACHOPIC_INDIRECT) + return orig; + + if (GET_CODE (orig) == SYMBOL_REF) + { + const char *name = XSTR (orig, 0); + + if (machopic_data_defined_p (name)) + { + rtx pic_base = gen_rtx (SYMBOL_REF, Pmode, + machopic_function_base_name ()); + rtx offset = gen_rtx (CONST, Pmode, + gen_rtx (MINUS, Pmode, orig, pic_base)); + + #if defined (TARGET_TOC) /* i.e., PowerPC */ + rtx hi_sum_reg = reg; + + if (reg == NULL) + abort (); + + emit_insn (gen_rtx (SET, Pmode, hi_sum_reg, + gen_rtx (PLUS, Pmode, pic_offset_table_rtx, + gen_rtx (HIGH, Pmode, offset)))); + emit_insn (gen_rtx (SET, Pmode, reg, + gen_rtx (LO_SUM, Pmode, hi_sum_reg, offset))); + + orig = reg; + #else + #if defined (HAVE_lo_sum) + if (reg == 0) abort (); + + emit_insn (gen_rtx (SET, VOIDmode, reg, + gen_rtx (HIGH, Pmode, offset))); + emit_insn (gen_rtx (SET, VOIDmode, reg, + gen_rtx (LO_SUM, Pmode, reg, offset))); + emit_insn (gen_rtx (USE, VOIDmode, + gen_rtx_REG (Pmode, PIC_OFFSET_TABLE_REGNUM))); + + orig = gen_rtx (PLUS, Pmode, pic_offset_table_rtx, reg); + #endif + #endif + return orig; + } + + ptr_ref = gen_rtx (SYMBOL_REF, Pmode, + machopic_non_lazy_ptr_name (name)); + + ptr_ref = gen_rtx_MEM (Pmode, ptr_ref); + RTX_UNCHANGING_P (ptr_ref) = 1; + + return ptr_ref; + } + else if (GET_CODE (orig) == CONST) + { + rtx base, result; + + /* legitimize both operands of the PLUS */ + if (GET_CODE (XEXP (orig, 0)) == PLUS) + { + base = machopic_indirect_data_reference (XEXP (XEXP (orig, 0), 0), + reg); + orig = machopic_indirect_data_reference (XEXP (XEXP (orig, 0), 1), + (base == reg ? 0 : reg)); + } + else + return orig; + + if (MACHOPIC_PURE && GET_CODE (orig) == CONST_INT) + result = plus_constant (base, INTVAL (orig)); + else + result = gen_rtx (PLUS, Pmode, base, orig); + + if (RTX_UNCHANGING_P (base) && RTX_UNCHANGING_P (orig)) + RTX_UNCHANGING_P (result) = 1; + + if (MACHOPIC_JUST_INDIRECT && GET_CODE (base) == MEM) + { + if (reg) + { + emit_move_insn (reg, result); + result = reg; + } + else + { + result = force_reg (GET_MODE (result), result); + } + } + + return result; + + } + else if (GET_CODE (orig) == MEM) + XEXP (ptr_ref, 0) = machopic_indirect_data_reference (XEXP (orig, 0), reg); + /* When the target is i386, this code prevents crashes due to the + compiler's ignorance on how to move the PIC base register to + other registers. (The reload phase sometimes introduces such + insns.) */ + else if (GET_CODE (orig) == PLUS + && GET_CODE (XEXP (orig, 0)) == REG + && REGNO (XEXP (orig, 0)) == PIC_OFFSET_TABLE_REGNUM + #ifdef I386 + /* Prevent the same register from being erroneously used + as both the base and index registers. */ + && GET_CODE (XEXP (orig, 1)) == CONST + #endif + && reg) + { + emit_move_insn (reg, XEXP (orig, 0)); + XEXP (ptr_ref, 0) = reg; + } + return ptr_ref; + } + + /* Transform TARGET (a MEM), which is a function call target, to the + corresponding symbol_stub if necessary. Return a new MEM. */ + + rtx + machopic_indirect_call_target (target) + rtx target; + { + if (GET_CODE (target) != MEM) + return target; + + if (MACHOPIC_INDIRECT && GET_CODE (XEXP (target, 0)) == SYMBOL_REF) + { + enum machine_mode mode = GET_MODE (XEXP (target, 0)); + const char *name = XSTR (XEXP (target, 0), 0); + + /* If the name is already defined, we need do nothing. */ + if (name[0] == '!' && name[1] == 'T') + return target; + + if (!machopic_name_defined_p (name)) + { + const char *stub_name = machopic_stub_name (name); + + XEXP (target, 0) = gen_rtx (SYMBOL_REF, mode, stub_name); + RTX_UNCHANGING_P (target) = 1; + } + } + + return target; + } + + rtx + machopic_legitimize_pic_address (orig, mode, reg) + rtx orig, reg; + enum machine_mode mode; + { + rtx pic_ref = orig; + + if (! MACHOPIC_PURE) + return orig; + + /* First handle a simple SYMBOL_REF or LABEL_REF */ + if (GET_CODE (orig) == LABEL_REF + || (GET_CODE (orig) == SYMBOL_REF + )) + { + /* addr(foo) = &func+(foo-func) */ + rtx pic_base; + + orig = machopic_indirect_data_reference (orig, reg); + + if (GET_CODE (orig) == PLUS + && GET_CODE (XEXP (orig, 0)) == REG) + { + if (reg == 0) + return force_reg (mode, orig); + + emit_move_insn (reg, orig); + return reg; + } + + pic_base = gen_rtx (SYMBOL_REF, Pmode, machopic_function_base_name ()); + + if (GET_CODE (orig) == MEM) + { + if (reg == 0) + { + if (reload_in_progress) + abort (); + else + reg = gen_reg_rtx (Pmode); + } + + #ifdef HAVE_lo_sum + if (GET_CODE (XEXP (orig, 0)) == SYMBOL_REF + || GET_CODE (XEXP (orig, 0)) == LABEL_REF) + { + rtx offset = gen_rtx (CONST, Pmode, + gen_rtx (MINUS, Pmode, + XEXP (orig, 0), pic_base)); + #if defined (TARGET_TOC) /* i.e., PowerPC */ + /* Generating a new reg may expose opportunities for + common subexpression elimination. */ + rtx hi_sum_reg = + (reload_in_progress ? reg : gen_reg_rtx (SImode)); + + emit_insn (gen_rtx (SET, Pmode, hi_sum_reg, + gen_rtx (PLUS, Pmode, + pic_offset_table_rtx, + gen_rtx (HIGH, Pmode, offset)))); + emit_insn (gen_rtx (SET, VOIDmode, reg, + gen_rtx (MEM, GET_MODE (orig), + gen_rtx (LO_SUM, Pmode, + hi_sum_reg, offset)))); + pic_ref = reg; + + #else + emit_insn (gen_rtx (USE, VOIDmode, + gen_rtx_REG (Pmode, PIC_OFFSET_TABLE_REGNUM))); + + emit_insn (gen_rtx (SET, VOIDmode, reg, + gen_rtx (HIGH, Pmode, + gen_rtx (CONST, Pmode, offset)))); + emit_insn (gen_rtx (SET, VOIDmode, reg, + gen_rtx (LO_SUM, Pmode, reg, + gen_rtx (CONST, Pmode, offset)))); + pic_ref = gen_rtx (PLUS, Pmode, + pic_offset_table_rtx, reg); + #endif + } + else + #endif /* HAVE_lo_sum */ + { + rtx pic = pic_offset_table_rtx; + if (GET_CODE (pic) != REG) + { + emit_move_insn (reg, pic); + pic = reg; + } + #if 0 + emit_insn (gen_rtx (USE, VOIDmode, + gen_rtx (REG, Pmode, PIC_OFFSET_TABLE_REGNUM))); + #endif + + pic_ref = gen_rtx (PLUS, Pmode, + pic, + gen_rtx (CONST, Pmode, + gen_rtx (MINUS, Pmode, + XEXP (orig, 0), + pic_base))); + } + + #if !defined (TARGET_TOC) + RTX_UNCHANGING_P (pic_ref) = 1; + emit_move_insn (reg, pic_ref); + pic_ref = gen_rtx (MEM, GET_MODE (orig), reg); + #endif + } + else + { + + #ifdef HAVE_lo_sum + if (GET_CODE (orig) == SYMBOL_REF + || GET_CODE (orig) == LABEL_REF) + { + rtx offset = gen_rtx (CONST, Pmode, + gen_rtx (MINUS, Pmode, orig, pic_base)); + #if defined (TARGET_TOC) /* i.e., PowerPC */ + rtx hi_sum_reg; + + if (reg == 0) + { + if (reload_in_progress) + abort (); + else + reg = gen_reg_rtx (SImode); + } + + hi_sum_reg = reg; + + emit_insn (gen_rtx (SET, Pmode, hi_sum_reg, + gen_rtx (PLUS, Pmode, + pic_offset_table_rtx, + gen_rtx (HIGH, Pmode, offset)))); + emit_insn (gen_rtx (SET, VOIDmode, reg, + gen_rtx (LO_SUM, Pmode, + hi_sum_reg, offset))); + pic_ref = reg; + #else + emit_insn (gen_rtx (SET, VOIDmode, reg, + gen_rtx (HIGH, Pmode, offset))); + emit_insn (gen_rtx (SET, VOIDmode, reg, + gen_rtx (LO_SUM, Pmode, reg, offset))); + pic_ref = gen_rtx (PLUS, Pmode, + pic_offset_table_rtx, reg); + #endif + } + else + #endif /* HAVE_lo_sum */ + { + if (GET_CODE (orig) == REG) + { + return orig; + } + else + { + rtx pic = pic_offset_table_rtx; + if (GET_CODE (pic) != REG) + { + emit_move_insn (reg, pic); + pic = reg; + } + #if 0 + emit_insn (gen_rtx (USE, VOIDmode, + pic_offset_table_rtx)); + #endif + pic_ref = gen_rtx (PLUS, Pmode, + pic, + gen_rtx (CONST, Pmode, + gen_rtx (MINUS, Pmode, + orig, pic_base))); + } + } + } + + RTX_UNCHANGING_P (pic_ref) = 1; + + if (GET_CODE (pic_ref) != REG) + { + if (reg != 0) + { + emit_move_insn (reg, pic_ref); + return reg; + } + else + { + return force_reg (mode, pic_ref); + } + } + else + { + return pic_ref; + } + } + + else if (GET_CODE (orig) == SYMBOL_REF) + return orig; + + else if (GET_CODE (orig) == PLUS + && (GET_CODE (XEXP (orig, 0)) == MEM + || GET_CODE (XEXP (orig, 0)) == SYMBOL_REF + || GET_CODE (XEXP (orig, 0)) == LABEL_REF) + && XEXP (orig, 0) != pic_offset_table_rtx + && GET_CODE (XEXP (orig, 1)) != REG) + + { + rtx base; + int is_complex = (GET_CODE (XEXP (orig, 0)) == MEM); + + base = machopic_legitimize_pic_address (XEXP (orig, 0), Pmode, reg); + orig = machopic_legitimize_pic_address (XEXP (orig, 1), + Pmode, (base == reg ? 0 : reg)); + if (GET_CODE (orig) == CONST_INT) + { + pic_ref = plus_constant (base, INTVAL (orig)); + is_complex = 1; + } + else + pic_ref = gen_rtx (PLUS, Pmode, base, orig); + + if (RTX_UNCHANGING_P (base) && RTX_UNCHANGING_P (orig)) + RTX_UNCHANGING_P (pic_ref) = 1; + + if (reg && is_complex) + { + emit_move_insn (reg, pic_ref); + pic_ref = reg; + } + /* Likewise, should we set special REG_NOTEs here? */ + } + + else if (GET_CODE (orig) == CONST) + { + return machopic_legitimize_pic_address (XEXP (orig, 0), Pmode, reg); + } + + else if (GET_CODE (orig) == MEM + && GET_CODE (XEXP (orig, 0)) == SYMBOL_REF) + { + rtx addr = machopic_legitimize_pic_address (XEXP (orig, 0), Pmode, reg); + + addr = gen_rtx (MEM, GET_MODE (orig), addr); + RTX_UNCHANGING_P (addr) = RTX_UNCHANGING_P (orig); + emit_move_insn (reg, addr); + pic_ref = reg; + } + + return pic_ref; + } + + + void + machopic_finish (asm_out_file) + FILE *asm_out_file; + { + tree temp; + + for (temp = machopic_stubs; + temp != NULL_TREE; + temp = TREE_CHAIN (temp)) + { + const char *sym_name = IDENTIFIER_POINTER (TREE_VALUE (temp)); + const char *stub_name = IDENTIFIER_POINTER (TREE_PURPOSE (temp)); + char *sym; + char *stub; + + if (! TREE_USED (temp)) + continue; + + /* If the symbol is actually defined, we don't need a stub. */ + if (sym_name[0] == '!' && sym_name[1] == 'T') + continue; + + STRIP_NAME_ENCODING (sym_name, sym_name); + + sym = alloca (strlen (sym_name) + 2); + if (sym_name[0] == '*' || sym_name[0] == '&') + strcpy (sym, sym_name + 1); + else if (sym_name[0] == '-' || sym_name[0] == '+') + strcpy (sym, sym_name); + else + sym[0] = '_', strcpy (sym + 1, sym_name); + + stub = alloca (strlen (stub_name) + 2); + if (stub_name[0] == '*' || stub_name[0] == '&') + strcpy (stub, stub_name + 1); + else + stub[0] = '_', strcpy (stub + 1, stub_name); + + machopic_output_stub (asm_out_file, sym, stub); + } + + for (temp = machopic_non_lazy_pointers; + temp != NULL_TREE; + temp = TREE_CHAIN (temp)) + { + char *sym_name = IDENTIFIER_POINTER (TREE_VALUE (temp)); + char *lazy_name = IDENTIFIER_POINTER (TREE_PURPOSE (temp)); + #if 0 + tree decl = lookup_name_darwin (TREE_VALUE (temp)); + #endif + + if (! TREE_USED (temp)) + continue; + + if (machopic_ident_defined_p (TREE_VALUE (temp)) + #if 0 /* add back when we have private externs */ + || (decl && DECL_PRIVATE_EXTERN (decl)) + #endif + ) + { + data_section (); + assemble_align (GET_MODE_ALIGNMENT (Pmode)); + assemble_label (lazy_name); + assemble_integer (gen_rtx (SYMBOL_REF, Pmode, sym_name), + GET_MODE_SIZE (Pmode), + GET_MODE_ALIGNMENT (Pmode), 1); + } + else + { + machopic_nl_symbol_ptr_section (); + assemble_name (asm_out_file, lazy_name); + fprintf (asm_out_file, ":\n"); + + fprintf (asm_out_file, "\t.indirect_symbol "); + assemble_name (asm_out_file, sym_name); + fprintf (asm_out_file, "\n"); + + assemble_integer (const0_rtx, GET_MODE_SIZE (Pmode), + GET_MODE_ALIGNMENT (Pmode), 1); + } + } + } + + int + machopic_operand_p (op) + rtx op; + { + if (MACHOPIC_JUST_INDIRECT) + { + while (GET_CODE (op) == CONST) + op = XEXP (op, 0); + + if (GET_CODE (op) == SYMBOL_REF) + return machopic_name_defined_p (XSTR (op, 0)); + else + return 0; + } + + while (GET_CODE (op) == CONST) + op = XEXP (op, 0); + + if (GET_CODE (op) == MINUS + && GET_CODE (XEXP (op, 0)) == SYMBOL_REF + && GET_CODE (XEXP (op, 1)) == SYMBOL_REF + && machopic_name_defined_p (XSTR (XEXP (op, 0), 0)) + && machopic_name_defined_p (XSTR (XEXP (op, 1), 0))) + return 1; + + #if 0 /*def TARGET_TOC*/ /* i.e., PowerPC */ + /* Without this statement, the compiler crashes while compiling enquire.c + when targetting PowerPC. It is not known why this code is not needed + when targetting other processors. */ + else if (GET_CODE (op) == SYMBOL_REF + && (machopic_classify_name (XSTR (op, 0)) + == MACHOPIC_DEFINED_FUNCTION)) + { + return 1; + } + #endif + + return 0; + } + + /* This function records whether a given name corresponds to a defined + or undefined function or variable, for machopic_classify_ident to + use later. */ + + void + darwin_encode_section_info (decl) + tree decl; + { + char code = '\0'; + int defined = 0; + rtx sym_ref; + const char *orig_str; + char *new_str; + size_t len, new_len; + + if ((TREE_CODE (decl) == FUNCTION_DECL + || TREE_CODE (decl) == VAR_DECL) + && !DECL_EXTERNAL (decl) + && ((TREE_STATIC (decl) + && (!DECL_COMMON (decl) || !TREE_PUBLIC (decl))) + || (DECL_INITIAL (decl) + && DECL_INITIAL (decl) != error_mark_node))) + defined = 1; + + if (TREE_CODE (decl) == FUNCTION_DECL) + code = (defined ? 'T' : 't'); + else if (TREE_CODE (decl) == VAR_DECL) + code = (defined ? 'D' : 'd'); + + if (code == '\0') + return; + + sym_ref = XEXP (DECL_RTL (decl), 0); + orig_str = XSTR (sym_ref, 0); + len = strlen (orig_str) + 1; + + if (orig_str[0] == '!') + { + /* Already encoded; see if we need to change it. */ + if (code == orig_str[1]) + return; + /* Yes, tweak a copy of the name and put it in a new string. */ + new_str = alloca (len); + memcpy (new_str, orig_str, len); + new_str[1] = code; + XSTR (sym_ref, 0) = ggc_alloc_string (new_str, len); + } + else + { + /* Add the encoding. */ + new_len = len + 4; + new_str = alloca (new_len); + new_str[0] = '!'; + new_str[1] = code; + new_str[2] = '_'; + new_str[3] = '_'; + memcpy (new_str + 4, orig_str, len); + XSTR (sym_ref, 0) = ggc_alloc_string (new_str, new_len); + } + /* The non-lazy pointer list may have captured references to the + old encoded name, change them. */ + if (TREE_CODE (decl) == VAR_DECL) + update_non_lazy_ptrs (XSTR (sym_ref, 0)); + else + update_stubs (XSTR (sym_ref, 0)); + } + + /* Scan the list of non-lazy pointers and update any recorded names whose + stripped name matches the argument. */ + + static void + update_non_lazy_ptrs (name) + const char *name; + { + const char *name1, *name2; + tree temp; + + STRIP_NAME_ENCODING (name1, name); + + for (temp = machopic_non_lazy_pointers; + temp != NULL_TREE; + temp = TREE_CHAIN (temp)) + { + char *sym_name = IDENTIFIER_POINTER (TREE_VALUE (temp)); + + if (*sym_name == '!') + { + STRIP_NAME_ENCODING (name2, sym_name); + if (strcmp (name1, name2) == 0) + { + IDENTIFIER_POINTER (TREE_VALUE (temp)) = name; + break; + } + } + } + } + + /* Function NAME is being defined, and its label has just been output. + If there's already a reference to a stub for this function, we can + just emit the stub label now and we don't bother emitting the stub later. */ + + void + machopic_output_possible_stub_label (file, name) + FILE *file; + const char *name; + { + tree temp; + + + /* Ensure we're looking at a section-encoded name. */ + if (name[0] != '!' || (name[1] != 't' && name[1] != 'T')) + return; + + for (temp = machopic_stubs; + temp != NULL_TREE; + temp = TREE_CHAIN (temp)) + { + const char *sym_name; + + sym_name = IDENTIFIER_POINTER (TREE_VALUE (temp)); + if (sym_name[0] == '!' && sym_name[1] == 'T' + && ! strcmp (name+2, sym_name+2)) + { + ASM_OUTPUT_LABEL (file, IDENTIFIER_POINTER (TREE_PURPOSE (temp))); + /* Avoid generating a stub for this. */ + TREE_USED (temp) = 0; + break; + } + } + } + + /* Scan the list of stubs and update any recorded names whose + stripped name matches the argument. */ + + static void + update_stubs (name) + const char *name; + { + const char *name1, *name2; + tree temp; + + STRIP_NAME_ENCODING (name1, name); + + for (temp = machopic_stubs; + temp != NULL_TREE; + temp = TREE_CHAIN (temp)) + { + char *sym_name = IDENTIFIER_POINTER (TREE_VALUE (temp)); + + if (*sym_name == '!') + { + STRIP_NAME_ENCODING (name2, sym_name); + if (strcmp (name1, name2) == 0) + { + IDENTIFIER_POINTER (TREE_VALUE (temp)) = name; + break; + } + } + } + } + + void + machopic_asm_out_constructor (symbol, priority) + rtx symbol; + int priority ATTRIBUTE_UNUSED; + { + if (flag_pic) + mod_init_section (); + else + constructor_section (); + assemble_align (POINTER_SIZE); + assemble_integer (symbol, POINTER_SIZE / BITS_PER_UNIT, POINTER_SIZE, 1); + + if (!flag_pic) + fprintf (asm_out_file, ".reference .constructors_used\n"); + } + + void + machopic_asm_out_destructor (symbol, priority) + rtx symbol; + int priority ATTRIBUTE_UNUSED; + { + if (flag_pic) + mod_term_section (); + else + destructor_section (); + assemble_align (POINTER_SIZE); + assemble_integer (symbol, POINTER_SIZE / BITS_PER_UNIT, POINTER_SIZE, 1); + + if (!flag_pic) + fprintf (asm_out_file, ".reference .destructors_used\n"); + } diff -Nrc3pad gcc-3.0.4/gcc/config/darwin.h gcc-3.1/gcc/config/darwin.h *** gcc-3.0.4/gcc/config/darwin.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/darwin.h Tue Jan 15 20:20:20 2002 *************** *** 0 **** --- 1,799 ---- + /* Target definitions for Darwin (Mac OS X) systems. + Copyright (C) 1989, 1990, 1991, 1992, 1993, 2000, 2001, 2002 + Free Software Foundation, Inc. + Contributed by Apple Computer Inc. + + 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. */ + + /* The definitions in this file are common to all processor types + running Darwin, which is the kernel for Mac OS X. Darwin is + basically a BSD user layer laid over a Mach kernel, then evolved + for many years (at NeXT) in parallel with other Unix systems. So + while the runtime is a somewhat idiosyncratic Mach-based thing, + other definitions look like they would for a BSD variant. */ + + /* Although NeXT ran on many different architectures, as of Jan 2001 + the only supported Darwin targets are PowerPC and x86. */ + + /* Technically, STANDARD_EXEC_PREFIX should be /usr/libexec/, but in + practice this makes it hard to install new compilers elsewhere, so + leave it undefined and expect system builders to set configure args + correctly. */ + + /* Suppress g++ attempt to link in the math library automatically. + (Some Darwin versions have a libm, but they seem to cause problems + for C++ executables.) */ + + #define MATH_LIBRARY "" + + /* We have atexit. */ + + #define HAVE_ATEXIT + + /* Define an empty body for the function do_global_dtors() in libgcc2.c. */ + + #define DO_GLOBAL_DTORS_BODY + + /* The string value for __SIZE_TYPE__. */ + + #ifndef SIZE_TYPE + #define SIZE_TYPE "long unsigned int" + #endif + + /* Type used for ptrdiff_t, as a string used in a declaration. */ + + #undef PTRDIFF_TYPE + #define PTRDIFF_TYPE "int" + + /* wchar_t is int. */ + + #undef WCHAR_TYPE + #define WCHAR_TYPE "int" + #undef WCHAR_TYPE_SIZE + #define WCHAR_TYPE_SIZE 32 + + /* Default to using the NeXT-style runtime, since that's what is + pre-installed on Darwin systems. */ + + #define NEXT_OBJC_RUNTIME + + /* 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 + + /* Don't warn about MacOS-style 'APPL' four-char-constants. */ + + #undef WARN_FOUR_CHAR_CONSTANTS + #define WARN_FOUR_CHAR_CONSTANTS 0 + + /* Machine dependent cpp options. */ + + /* The sequence here allows us to get a more specific version number + glued into __APPLE_CC__. Normally this number would be updated as + part of submitting to a release engineering organization. */ + + #ifndef APPLE_CC + #define APPLE_CC 999 + #endif + + #define STRINGIFY_THIS(x) # x + #define REALLY_STRINGIFY(x) STRINGIFY_THIS(x) + + #undef CPP_SPEC + #define CPP_SPEC "-D__APPLE_CC__=" REALLY_STRINGIFY(APPLE_CC) " \ + %{static:-D__STATIC__}%{!static:-D__DYNAMIC__}" + + /* Machine dependent libraries. */ + + #undef LIB_SPEC + #define LIB_SPEC "%{!static:-lSystem}" + + /* We specify crt0.o as -lcrt0.o so that ld will search the library path. */ + + #undef STARTFILE_SPEC + #define STARTFILE_SPEC \ + "%{pg:%{static:-lgcrt0.o}%{!static:-lgcrt1.o}} \ + %{!pg:%{static:-lcrt0.o}%{!static:-lcrt1.o}}" + + #undef DOLLARS_IN_IDENTIFIERS + #define DOLLARS_IN_IDENTIFIERS 2 + + /* Allow #sccs (but don't do anything). */ + + #define SCCS_DIRECTIVE + + /* We use Dbx symbol format. */ + + #define DBX_DEBUGGING_INFO + + /* Also enable Dwarf 2 as an option. */ + + #define DWARF2_DEBUGGING_INFO + + #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG + + /* When generating stabs debugging, use N_BINCL entries. */ + + #define DBX_USE_BINCL + + /* There is no limit to the length of stabs strings. */ + + #define DBX_CONTIN_LENGTH 0 + + /* gdb needs a null N_SO at the end of each file for scattered loading. */ + + #undef DBX_OUTPUT_MAIN_SOURCE_FILE_END + #define DBX_OUTPUT_MAIN_SOURCE_FILE_END(FILE, FILENAME) \ + do { text_section (); \ + fprintf (FILE, \ + "\t.stabs \"%s\",%d,0,0,Letext\nLetext:\n", "" , N_SO); \ + } while (0) + + /* Our profiling scheme doesn't LP labels and counter words. */ + + #define NO_PROFILE_COUNTERS + + #undef INIT_SECTION_ASM_OP + #define INIT_SECTION_ASM_OP + + #undef INVOKE__main + + #define TARGET_ASM_CONSTRUCTOR machopic_asm_out_constructor + #define TARGET_ASM_DESTRUCTOR machopic_asm_out_destructor + + + /* Don't output a .file directive. That is only used by the assembler for + error reporting. */ + + #undef ASM_FILE_START + #define ASM_FILE_START(FILE) + + #undef ASM_FILE_END + #define ASM_FILE_END(FILE) \ + do { \ + machopic_finish (asm_out_file); \ + if (strcmp (lang_hooks.name, "GNU C++") == 0) \ + { \ + constructor_section (); \ + destructor_section (); \ + ASM_OUTPUT_ALIGN (FILE, 1); \ + } \ + } while (0) + + /* Give ObjcC methods pretty symbol names. */ + + #undef OBJC_GEN_METHOD_LABEL + #define OBJC_GEN_METHOD_LABEL(BUF,IS_INST,CLASS_NAME,CAT_NAME,SEL_NAME,NUM) \ + do { if (CAT_NAME) \ + sprintf (BUF, "%c[%s(%s) %s]", (IS_INST) ? '-' : '+', \ + (CLASS_NAME), (CAT_NAME), (SEL_NAME)); \ + else \ + sprintf (BUF, "%c[%s %s]", (IS_INST) ? '-' : '+', \ + (CLASS_NAME), (SEL_NAME)); \ + } while (0) + + /* The RTTI data (e.g., __ti4name) is common and public (and static), + but it does need to be referenced via indirect PIC data pointers. + The machopic_define_name calls are telling the machopic subsystem + that the name *is* defined in this module, so it doesn't need to + make them indirect. */ + + #undef ASM_DECLARE_OBJECT_NAME + #define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL) \ + do { \ + const char *xname = NAME; \ + if (GET_CODE (XEXP (DECL_RTL (DECL), 0)) != SYMBOL_REF) \ + xname = IDENTIFIER_POINTER (DECL_NAME (DECL)); \ + if ((TREE_STATIC (DECL) \ + && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \ + || DECL_INITIAL (DECL)) \ + machopic_define_name (xname); \ + if ((TREE_STATIC (DECL) \ + && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \ + || DECL_INITIAL (DECL)) \ + ENCODE_SECTION_INFO (DECL); \ + ASM_OUTPUT_LABEL (FILE, xname); \ + } while (0) + + #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ + do { \ + const char *xname = NAME; \ + if (GET_CODE (XEXP (DECL_RTL (DECL), 0)) != SYMBOL_REF) \ + xname = IDENTIFIER_POINTER (DECL_NAME (DECL)); \ + if ((TREE_STATIC (DECL) \ + && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \ + || DECL_INITIAL (DECL)) \ + machopic_define_name (xname); \ + if ((TREE_STATIC (DECL) \ + && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \ + || DECL_INITIAL (DECL)) \ + ENCODE_SECTION_INFO (DECL); \ + ASM_OUTPUT_LABEL (FILE, xname); \ + /* Avoid generating stubs for functions we've just defined by \ + outputting any required stub name label now. */ \ + machopic_output_possible_stub_label (FILE, xname); \ + } while (0) + + /* Wrap new method names in quotes so the assembler doesn't gag. + Make Objective-C internal symbols local. */ + + #undef ASM_OUTPUT_LABELREF + #define ASM_OUTPUT_LABELREF(FILE,NAME) \ + do { \ + STRIP_NAME_ENCODING (NAME, NAME); \ + if (NAME[0] == '&' || NAME[0] == '*') \ + { \ + int len = strlen (NAME); \ + if (len > 6 && !strcmp ("$stub", NAME + len - 5)) \ + machopic_validate_stub_or_non_lazy_ptr (NAME, 1); \ + else if (len > 7 && !strcmp ("$stub\"", NAME + len - 6)) \ + machopic_validate_stub_or_non_lazy_ptr (NAME, 1); \ + else if (len > 14 && !strcmp ("$non_lazy_ptr", NAME + len - 13)) \ + machopic_validate_stub_or_non_lazy_ptr (NAME, 0); \ + fputs (&NAME[1], FILE); \ + } \ + else if (NAME[0] == '+' || NAME[0] == '-') \ + fprintf (FILE, "\"%s\"", NAME); \ + else if (!strncmp (NAME, "_OBJC_", 6)) \ + fprintf (FILE, "L%s", NAME); \ + else if (!strncmp (NAME, ".objc_class_name_", 17)) \ + fprintf (FILE, "%s", NAME); \ + else \ + fprintf (FILE, "_%s", NAME); \ + } while (0) + + #undef ALIGN_ASM_OP + #define ALIGN_ASM_OP ".align" + + #undef ASM_OUTPUT_ALIGN + #define ASM_OUTPUT_ALIGN(FILE,LOG) \ + if ((LOG) != 0) \ + fprintf (FILE, "\t%s %d\n", ALIGN_ASM_OP, (LOG)) + + /* Ensure correct alignment of bss data. */ + + #undef ASM_OUTPUT_ALIGNED_DECL_LOCAL + #define ASM_OUTPUT_ALIGNED_DECL_LOCAL(FILE, DECL, NAME, SIZE, ALIGN) \ + do { \ + fputs (".lcomm ", (FILE)); \ + assemble_name ((FILE), (NAME)); \ + fprintf ((FILE), ",%u,%u\n", (SIZE), floor_log2 ((ALIGN) / BITS_PER_UNIT)); \ + if ((DECL) && ((TREE_STATIC (DECL) \ + && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \ + || DECL_INITIAL (DECL))) \ + ENCODE_SECTION_INFO (DECL); \ + if ((DECL) && ((TREE_STATIC (DECL) \ + && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \ + || DECL_INITIAL (DECL))) \ + machopic_define_name (NAME); \ + } while (0) + + /* Output nothing for #ident. */ + + #undef ASM_OUTPUT_IDENT + #define ASM_OUTPUT_IDENT(FILE, NAME) + + /* The maximum alignment which the object file format can support. + For Mach-O, this is 2^15. */ + + #undef MAX_OFILE_ALIGNMENT + #define MAX_OFILE_ALIGNMENT 0x8000 + + /* Create new Mach-O sections. */ + + #undef SECTION_FUNCTION + #define SECTION_FUNCTION(FUNCTION, SECTION, DIRECTIVE, OBJC) \ + extern void FUNCTION PARAMS ((void)); \ + void \ + FUNCTION () \ + { \ + if (in_section != SECTION) \ + { \ + if (OBJC) \ + objc_section_init (); \ + data_section (); \ + if (asm_out_file) \ + fprintf (asm_out_file, "%s\n", DIRECTIVE); \ + in_section = SECTION; \ + } \ + } \ + + #define ALIAS_SECTION(enum_value, alias_name) \ + do { if (!strcmp (alias_name, name)) \ + section_alias[enum_value] = (alias ? get_identifier (alias) : 0); \ + } while (0) + + /* Darwin uses many types of special sections. */ + + #undef EXTRA_SECTIONS + #define EXTRA_SECTIONS \ + in_const, in_const_data, in_cstring, in_literal4, in_literal8, \ + in_constructor, in_destructor, in_mod_init, in_mod_term, \ + in_objc_class, in_objc_meta_class, in_objc_category, \ + in_objc_class_vars, in_objc_instance_vars, \ + in_objc_cls_meth, in_objc_inst_meth, \ + in_objc_cat_cls_meth, in_objc_cat_inst_meth, \ + in_objc_selector_refs, \ + in_objc_selector_fixup, \ + in_objc_symbols, in_objc_module_info, \ + in_objc_protocol, in_objc_string_object, \ + in_objc_constant_string_object, \ + in_objc_class_names, in_objc_meth_var_names, \ + in_objc_meth_var_types, in_objc_cls_refs, \ + in_machopic_nl_symbol_ptr, \ + in_machopic_lazy_symbol_ptr, \ + in_machopic_symbol_stub, \ + in_machopic_picsymbol_stub, \ + in_darwin_exception, in_darwin_eh_frame, \ + num_sections + + #undef EXTRA_SECTION_FUNCTIONS + #define EXTRA_SECTION_FUNCTIONS \ + static void objc_section_init PARAMS ((void)); \ + SECTION_FUNCTION (const_section, \ + in_const, \ + ".const", 0) \ + SECTION_FUNCTION (const_data_section, \ + in_const_data, \ + ".const_data", 0) \ + SECTION_FUNCTION (cstring_section, \ + in_cstring, \ + ".cstring", 0) \ + SECTION_FUNCTION (literal4_section, \ + in_literal4, \ + ".literal4", 0) \ + SECTION_FUNCTION (literal8_section, \ + in_literal8, \ + ".literal8", 0) \ + SECTION_FUNCTION (constructor_section, \ + in_constructor, \ + ".constructor", 0) \ + SECTION_FUNCTION (mod_init_section, \ + in_mod_init, \ + ".mod_init_func", 0) \ + SECTION_FUNCTION (mod_term_section, \ + in_mod_term, \ + ".mod_term_func", 0) \ + SECTION_FUNCTION (destructor_section, \ + in_destructor, \ + ".destructor", 0) \ + SECTION_FUNCTION (objc_class_section, \ + in_objc_class, \ + ".objc_class", 1) \ + SECTION_FUNCTION (objc_meta_class_section, \ + in_objc_meta_class, \ + ".objc_meta_class", 1) \ + SECTION_FUNCTION (objc_category_section, \ + in_objc_category, \ + ".objc_category", 1) \ + SECTION_FUNCTION (objc_class_vars_section, \ + in_objc_class_vars, \ + ".objc_class_vars", 1) \ + SECTION_FUNCTION (objc_instance_vars_section, \ + in_objc_instance_vars, \ + ".objc_instance_vars", 1) \ + SECTION_FUNCTION (objc_cls_meth_section, \ + in_objc_cls_meth, \ + ".objc_cls_meth", 1) \ + SECTION_FUNCTION (objc_inst_meth_section, \ + in_objc_inst_meth, \ + ".objc_inst_meth", 1) \ + SECTION_FUNCTION (objc_cat_cls_meth_section, \ + in_objc_cat_cls_meth, \ + ".objc_cat_cls_meth", 1) \ + SECTION_FUNCTION (objc_cat_inst_meth_section, \ + in_objc_cat_inst_meth, \ + ".objc_cat_inst_meth", 1) \ + SECTION_FUNCTION (objc_selector_refs_section, \ + in_objc_selector_refs, \ + ".objc_message_refs", 1) \ + SECTION_FUNCTION (objc_selector_fixup_section, \ + in_objc_selector_fixup, \ + ".section __OBJC, __sel_fixup", 1) \ + SECTION_FUNCTION (objc_symbols_section, \ + in_objc_symbols, \ + ".objc_symbols", 1) \ + SECTION_FUNCTION (objc_module_info_section, \ + in_objc_module_info, \ + ".objc_module_info", 1) \ + SECTION_FUNCTION (objc_protocol_section, \ + in_objc_protocol, \ + ".objc_protocol", 1) \ + SECTION_FUNCTION (objc_string_object_section, \ + in_objc_string_object, \ + ".objc_string_object", 1) \ + SECTION_FUNCTION (objc_constant_string_object_section, \ + in_objc_constant_string_object, \ + ".section __OBJC, __cstring_object", 1) \ + SECTION_FUNCTION (objc_class_names_section, \ + in_objc_class_names, \ + ".objc_class_names", 1) \ + SECTION_FUNCTION (objc_meth_var_names_section, \ + in_objc_meth_var_names, \ + ".objc_meth_var_names", 1) \ + SECTION_FUNCTION (objc_meth_var_types_section, \ + in_objc_meth_var_types, \ + ".objc_meth_var_types", 1) \ + SECTION_FUNCTION (objc_cls_refs_section, \ + in_objc_cls_refs, \ + ".objc_cls_refs", 1) \ + \ + SECTION_FUNCTION (machopic_lazy_symbol_ptr_section, \ + in_machopic_lazy_symbol_ptr, \ + ".lazy_symbol_pointer", 0) \ + SECTION_FUNCTION (machopic_nl_symbol_ptr_section, \ + in_machopic_nl_symbol_ptr, \ + ".non_lazy_symbol_pointer", 0) \ + SECTION_FUNCTION (machopic_symbol_stub_section, \ + in_machopic_symbol_stub, \ + ".symbol_stub", 0) \ + SECTION_FUNCTION (machopic_picsymbol_stub_section, \ + in_machopic_picsymbol_stub, \ + ".picsymbol_stub", 0) \ + SECTION_FUNCTION (darwin_exception_section, \ + in_darwin_exception, \ + ".section __TEXT,__gcc_except_tab", 0) \ + SECTION_FUNCTION (darwin_eh_frame_section, \ + in_darwin_eh_frame, \ + ".section __TEXT,__eh_frame", 0) \ + \ + static void \ + objc_section_init () \ + { \ + static int been_here = 0; \ + \ + if (been_here == 0) \ + { \ + been_here = 1; \ + /* written, cold -> hot */ \ + objc_cat_cls_meth_section (); \ + objc_cat_inst_meth_section (); \ + objc_string_object_section (); \ + objc_constant_string_object_section (); \ + objc_selector_refs_section (); \ + objc_selector_fixup_section (); \ + objc_cls_refs_section (); \ + objc_class_section (); \ + objc_meta_class_section (); \ + /* shared, hot -> cold */ \ + objc_cls_meth_section (); \ + objc_inst_meth_section (); \ + objc_protocol_section (); \ + objc_class_names_section (); \ + objc_meth_var_types_section (); \ + objc_meth_var_names_section (); \ + objc_category_section (); \ + objc_class_vars_section (); \ + objc_instance_vars_section (); \ + objc_module_info_section (); \ + objc_symbols_section (); \ + } \ + } \ + static tree section_alias[(int) num_sections]; \ + static void try_section_alias PARAMS ((void)); \ + static void try_section_alias () \ + { \ + if (section_alias[in_section] && asm_out_file) \ + fprintf (asm_out_file, "%s\n", \ + IDENTIFIER_POINTER (section_alias[in_section])); \ + } \ + + #if 0 + static void alias_section PARAMS ((const char *, const char *)); \ + static void alias_section (name, alias) \ + const char *name, *alias; \ + { \ + ALIAS_SECTION (in_data, "data"); \ + ALIAS_SECTION (in_text, "text"); \ + ALIAS_SECTION (in_const, "const"); \ + ALIAS_SECTION (in_const_data, "const_data"); \ + ALIAS_SECTION (in_cstring, "cstring"); \ + ALIAS_SECTION (in_literal4, "literal4"); \ + ALIAS_SECTION (in_literal8, "literal8"); \ + } + #endif + + #undef READONLY_DATA_SECTION + #define READONLY_DATA_SECTION const_section + + #undef SELECT_SECTION + #define SELECT_SECTION(exp,reloc,align) \ + do \ + { \ + if (TREE_CODE (exp) == STRING_CST) \ + { \ + if (flag_writable_strings) \ + data_section (); \ + else if (TREE_STRING_LENGTH (exp) != \ + strlen (TREE_STRING_POINTER (exp)) + 1) \ + readonly_data_section (); \ + else \ + cstring_section (); \ + } \ + else if (TREE_CODE (exp) == INTEGER_CST \ + || TREE_CODE (exp) == REAL_CST) \ + { \ + tree size = TYPE_SIZE (TREE_TYPE (exp)); \ + \ + if (TREE_CODE (size) == INTEGER_CST && \ + TREE_INT_CST_LOW (size) == 4 && \ + TREE_INT_CST_HIGH (size) == 0) \ + literal4_section (); \ + else if (TREE_CODE (size) == INTEGER_CST && \ + TREE_INT_CST_LOW (size) == 8 && \ + TREE_INT_CST_HIGH (size) == 0) \ + literal8_section (); \ + else \ + readonly_data_section (); \ + } \ + else if (TREE_CODE (exp) == CONSTRUCTOR \ + && TREE_TYPE (exp) \ + && TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE \ + && TYPE_NAME (TREE_TYPE (exp))) \ + { \ + tree name = TYPE_NAME (TREE_TYPE (exp)); \ + if (TREE_CODE (name) == TYPE_DECL) \ + name = DECL_NAME (name); \ + if (!strcmp (IDENTIFIER_POINTER (name), "NSConstantString")) \ + objc_constant_string_object_section (); \ + else if (!strcmp (IDENTIFIER_POINTER (name), "NXConstantString")) \ + objc_string_object_section (); \ + else if (TREE_READONLY (exp) || TREE_CONSTANT (exp)) \ + { \ + if (TREE_SIDE_EFFECTS (exp) || flag_pic && reloc) \ + const_data_section (); \ + else \ + readonly_data_section (); \ + } \ + else \ + data_section (); \ + } \ + else if (TREE_CODE (exp) == VAR_DECL && \ + DECL_NAME (exp) && \ + TREE_CODE (DECL_NAME (exp)) == IDENTIFIER_NODE && \ + IDENTIFIER_POINTER (DECL_NAME (exp)) && \ + !strncmp (IDENTIFIER_POINTER (DECL_NAME (exp)), "_OBJC_", 6)) \ + { \ + const char *name = IDENTIFIER_POINTER (DECL_NAME (exp)); \ + \ + if (!strncmp (name, "_OBJC_CLASS_METHODS_", 20)) \ + objc_cls_meth_section (); \ + else if (!strncmp (name, "_OBJC_INSTANCE_METHODS_", 23)) \ + objc_inst_meth_section (); \ + else if (!strncmp (name, "_OBJC_CATEGORY_CLASS_METHODS_", 20)) \ + objc_cat_cls_meth_section (); \ + else if (!strncmp (name, "_OBJC_CATEGORY_INSTANCE_METHODS_", 23)) \ + objc_cat_inst_meth_section (); \ + else if (!strncmp (name, "_OBJC_CLASS_VARIABLES_", 22)) \ + objc_class_vars_section (); \ + else if (!strncmp (name, "_OBJC_INSTANCE_VARIABLES_", 25)) \ + objc_instance_vars_section (); \ + else if (!strncmp (name, "_OBJC_CLASS_PROTOCOLS_", 22)) \ + objc_cat_cls_meth_section (); \ + else if (!strncmp (name, "_OBJC_CLASS_NAME_", 17)) \ + objc_class_names_section (); \ + else if (!strncmp (name, "_OBJC_METH_VAR_NAME_", 20)) \ + objc_meth_var_names_section (); \ + else if (!strncmp (name, "_OBJC_METH_VAR_TYPE_", 20)) \ + objc_meth_var_types_section (); \ + else if (!strncmp (name, "_OBJC_CLASS_REFERENCES", 22)) \ + objc_cls_refs_section (); \ + else if (!strncmp (name, "_OBJC_CLASS_", 12)) \ + objc_class_section (); \ + else if (!strncmp (name, "_OBJC_METACLASS_", 16)) \ + objc_meta_class_section (); \ + else if (!strncmp (name, "_OBJC_CATEGORY_", 15)) \ + objc_category_section (); \ + else if (!strncmp (name, "_OBJC_SELECTOR_REFERENCES", 25)) \ + objc_selector_refs_section (); \ + else if (!strncmp (name, "_OBJC_SELECTOR_FIXUP", 20)) \ + objc_selector_fixup_section (); \ + else if (!strncmp (name, "_OBJC_SYMBOLS", 13)) \ + objc_symbols_section (); \ + else if (!strncmp (name, "_OBJC_MODULES", 13)) \ + objc_module_info_section (); \ + else if (!strncmp (name, "_OBJC_PROTOCOL_INSTANCE_METHODS_", 32)) \ + objc_cat_inst_meth_section (); \ + else if (!strncmp (name, "_OBJC_PROTOCOL_CLASS_METHODS_", 29)) \ + objc_cat_cls_meth_section (); \ + else if (!strncmp (name, "_OBJC_PROTOCOL_REFS_", 20)) \ + objc_cat_cls_meth_section (); \ + else if (!strncmp (name, "_OBJC_PROTOCOL_", 15)) \ + objc_protocol_section (); \ + else if ((TREE_READONLY (exp) || TREE_CONSTANT (exp)) \ + && !TREE_SIDE_EFFECTS (exp)) \ + { if (flag_pic && reloc ) const_data_section (); \ + else readonly_data_section (); } \ + else \ + data_section (); \ + } \ + else if (TREE_READONLY (exp) || TREE_CONSTANT (exp)) \ + { \ + if (TREE_SIDE_EFFECTS (exp) || flag_pic && reloc) \ + const_data_section (); \ + else \ + readonly_data_section (); \ + } \ + else \ + data_section (); \ + try_section_alias (); \ + } \ + while (0) + + /* This can be called with address expressions as "rtx". + They must go in "const". */ + #undef SELECT_RTX_SECTION + #define SELECT_RTX_SECTION(mode, rtx, align) \ + do \ + { \ + if (GET_MODE_SIZE (mode) == 8) \ + literal8_section (); \ + else if (GET_MODE_SIZE (mode) == 4 \ + && (GET_CODE (rtx) == CONST_INT \ + || GET_CODE (rtx) == CONST_DOUBLE)) \ + literal4_section (); \ + else \ + const_section (); \ + } \ + while (0) + + #define ASM_DECLARE_UNRESOLVED_REFERENCE(FILE,NAME) \ + do { \ + if (FILE) { \ + if (flag_pic) \ + fprintf (FILE, "\t.lazy_reference "); \ + else \ + fprintf (FILE, "\t.reference "); \ + assemble_name (FILE, NAME); \ + fprintf (FILE, "\n"); \ + } \ + } while (0) + + #define ASM_DECLARE_CLASS_REFERENCE(FILE,NAME) \ + do { \ + if (FILE) { \ + fprintf (FILE, "\t"); \ + assemble_name (FILE, NAME); \ + fprintf (FILE, "=0\n"); \ + assemble_global (NAME); \ + } \ + } while (0) + + #undef ASM_GLOBALIZE_LABEL + #define ASM_GLOBALIZE_LABEL(FILE,NAME) \ + do { const char *const _x = (NAME); if (!!strncmp (_x, "_OBJC_", 6)) { \ + (fputs (".globl ", FILE), assemble_name (FILE, _x), fputs ("\n", FILE)); \ + }} while (0) + + #undef ASM_GENERATE_INTERNAL_LABEL + #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ + sprintf (LABEL, "*%s%ld", PREFIX, (long)(NUM)) + + /* This is how to output an internal numbered label where PREFIX is + the class of label and NUM is the number within the class. */ + + #undef ASM_OUTPUT_INTERNAL_LABEL + #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \ + fprintf (FILE, "%s%d:\n", PREFIX, NUM) + + /* Since we have a separate readonly data section, define this so that + jump tables end up in text rather than data. */ + + #ifndef JUMP_TABLES_IN_TEXT_SECTION + #define JUMP_TABLES_IN_TEXT_SECTION 1 + #endif + + /* Symbolic names for various things we might know about a symbol. */ + + enum machopic_addr_class { + MACHOPIC_UNDEFINED, + MACHOPIC_DEFINED_DATA, + MACHOPIC_UNDEFINED_DATA, + MACHOPIC_DEFINED_FUNCTION, + MACHOPIC_UNDEFINED_FUNCTION + }; + + /* Macros defining the various PIC cases. */ + + #define MACHOPIC_INDIRECT (flag_pic) + #define MACHOPIC_JUST_INDIRECT (flag_pic == 1) + #define MACHOPIC_PURE (flag_pic == 2) + + #define ENCODE_SECTION_INFO(DECL) \ + darwin_encode_section_info (DECL) + + /* Be conservative and always redo the encoding. */ + + #define REDO_SECTION_INFO_P(DECL) (1) + + #define STRIP_NAME_ENCODING(VAR,SYMBOL_NAME) \ + ((VAR) = ((SYMBOL_NAME[0] == '!') ? (SYMBOL_NAME) + 4 : (SYMBOL_NAME))) + + #define GEN_BINDER_NAME_FOR_STUB(BUF,STUB,STUB_LENGTH) \ + do { \ + const char *const stub_ = (STUB); \ + char *buffer_ = (BUF); \ + strcpy (buffer_, stub_); \ + if (stub_[0] == '"') \ + { \ + strcpy (buffer_ + (STUB_LENGTH) - 1, "_binder\""); \ + } \ + else \ + { \ + strcpy (buffer_ + (STUB_LENGTH), "_binder"); \ + } \ + } while (0) + + #define GEN_SYMBOL_NAME_FOR_SYMBOL(BUF,SYMBOL,SYMBOL_LENGTH) \ + do { \ + const char *const symbol_ = (SYMBOL); \ + char *buffer_ = (BUF); \ + if (name_needs_quotes (symbol_) && symbol_[0] != '"') \ + { \ + sprintf (buffer_, "\"%s\"", symbol_); \ + } \ + else \ + { \ + strcpy (buffer_, symbol_); \ + } \ + } while (0) + + /* Given a symbol name string, create the lazy pointer version + of the symbol name. */ + + #define GEN_LAZY_PTR_NAME_FOR_SYMBOL(BUF,SYMBOL,SYMBOL_LENGTH) \ + do { \ + const char *symbol_ = (SYMBOL); \ + char *buffer_ = (BUF); \ + STRIP_NAME_ENCODING (symbol_, symbol_); \ + if (symbol_[0] == '"') \ + { \ + strcpy (buffer_, "\"L"); \ + strcpy (buffer_ + 2, symbol_ + 1); \ + strcpy (buffer_ + (SYMBOL_LENGTH), "$lazy_ptr\""); \ + } \ + else if (name_needs_quotes (symbol_)) \ + { \ + strcpy (buffer_, "\"L"); \ + strcpy (buffer_ + 2, symbol_); \ + strcpy (buffer_ + (SYMBOL_LENGTH) + 2, "$lazy_ptr\""); \ + } \ + else \ + { \ + strcpy (buffer_, "L"); \ + strcpy (buffer_ + 1, symbol_); \ + strcpy (buffer_ + (SYMBOL_LENGTH) + 1, "$lazy_ptr"); \ + } \ + } while (0) + + #define TARGET_ASM_EXCEPTION_SECTION darwin_exception_section + + #define TARGET_ASM_EH_FRAME_SECTION darwin_eh_frame_section + + #define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL) \ + (((CODE) == 1 || (GLOBAL) == 0) ? DW_EH_PE_pcrel : DW_EH_PE_absptr) + + #define REGISTER_TARGET_PRAGMAS(PFILE) \ + do { \ + cpp_register_pragma (PFILE, 0, "mark", darwin_pragma_ignore); \ + cpp_register_pragma (PFILE, 0, "options", darwin_pragma_options); \ + cpp_register_pragma (PFILE, 0, "segment", darwin_pragma_ignore); \ + cpp_register_pragma (PFILE, 0, "unused", darwin_pragma_unused); \ + } while (0) diff -Nrc3pad gcc-3.0.4/gcc/config/dbxelf.h gcc-3.1/gcc/config/dbxelf.h *** gcc-3.0.4/gcc/config/dbxelf.h Mon Apr 16 18:25:40 2001 --- gcc-3.1/gcc/config/dbxelf.h Sat May 26 01:31:36 2001 *************** Boston, MA 02111-1307, USA. */ *** 22,29 **** support -gstabs generating stabs in sections, as produced by gas and understood by gdb. */ ! #ifndef __DBX_ELF_H ! #define __DBX_ELF_H /* Output DBX (stabs) debugging information if doing -gstabs. */ --- 22,29 ---- support -gstabs generating stabs in sections, as produced by gas and understood by gdb. */ ! #ifndef GCC_DBX_ELF_H ! #define GCC_DBX_ELF_H /* Output DBX (stabs) debugging information if doing -gstabs. */ *************** while (0) *** 84,87 **** asm_fprintf (FILE, \ "\t.text\n\t.stabs \"\",%d,0,0,%LLetext\n%LLetext:\n", N_SO) ! #endif /* __DBX_ELF_H */ --- 84,87 ---- asm_fprintf (FILE, \ "\t.text\n\t.stabs \"\",%d,0,0,%LLetext\n%LLetext:\n", N_SO) ! #endif /* ! GCC_DBX_ELF_H */ diff -Nrc3pad gcc-3.0.4/gcc/config/dsp16xx/dsp16xx-protos.h gcc-3.1/gcc/config/dsp16xx/dsp16xx-protos.h *** gcc-3.0.4/gcc/config/dsp16xx/dsp16xx-protos.h Mon May 1 17:19:34 2000 --- gcc-3.1/gcc/config/dsp16xx/dsp16xx-protos.h Mon Dec 17 15:05:30 2001 *************** extern int sp_operand PARAMS ((rtx, enum *** 29,34 **** --- 29,36 ---- extern int sp_operand2 PARAMS ((rtx, enum machine_mode)); extern int nonmemory_arith_operand PARAMS ((rtx, enum machine_mode)); extern int dsp16xx_comparison_operator PARAMS ((rtx, enum machine_mode)); + extern int unx_comparison_operator PARAMS ((rtx, enum machine_mode)); + extern int signed_comparison_operator PARAMS ((rtx, enum machine_mode)); extern void notice_update_cc PARAMS ((rtx)); extern void double_reg_from_memory PARAMS ((rtx[])); *************** extern void output_dsp16xx_float_const P *** 47,52 **** --- 49,55 ---- extern void emit_1600_core_shift PARAMS ((enum rtx_code, rtx *, int)); extern int dsp16xx_address_cost PARAMS ((rtx)); extern int symbolic_address_p PARAMS ((rtx)); + extern int uns_comparison_operator PARAMS ((rtx, enum machine_mode)); #endif /* RTX_CODE */ *************** extern int initial_frame_pointer_offset *** 75,85 **** extern void asm_output_common PARAMS ((FILE *, const char *, int, int)); extern void asm_output_local PARAMS ((FILE *, const char *, int, int)); extern void asm_output_float PARAMS ((FILE *, double)); - extern void asm_output_long PARAMS ((FILE *, long)); extern void dsp16xx_file_start PARAMS ((void)); extern struct rtx_def *(*dsp16xx_compare_gen) PARAMS (()); extern int hard_regno_mode_ok PARAMS ((int, enum machine_mode)); extern enum reg_class dsp16xx_reg_class_from_letter PARAMS ((int)); extern int regno_reg_class PARAMS ((int)); extern void function_prologue PARAMS ((FILE *, int)); extern void function_epilogue PARAMS ((FILE *, int)); --- 78,90 ---- extern void asm_output_common PARAMS ((FILE *, const char *, int, int)); extern void asm_output_local PARAMS ((FILE *, const char *, int, int)); extern void asm_output_float PARAMS ((FILE *, double)); extern void dsp16xx_file_start PARAMS ((void)); + extern void coff_dsp16xx_file_start PARAMS ((FILE *)); + extern void luxworks_dsp16xx_file_start PARAMS ((FILE *)); extern struct rtx_def *(*dsp16xx_compare_gen) PARAMS (()); extern int hard_regno_mode_ok PARAMS ((int, enum machine_mode)); extern enum reg_class dsp16xx_reg_class_from_letter PARAMS ((int)); extern int regno_reg_class PARAMS ((int)); extern void function_prologue PARAMS ((FILE *, int)); extern void function_epilogue PARAMS ((FILE *, int)); + extern int num_1600_core_shifts PARAMS ((int)); diff -Nrc3pad gcc-3.0.4/gcc/config/dsp16xx/dsp16xx.c gcc-3.1/gcc/config/dsp16xx/dsp16xx.c *** gcc-3.0.4/gcc/config/dsp16xx/dsp16xx.c Sat May 12 20:32:41 2001 --- gcc-3.1/gcc/config/dsp16xx/dsp16xx.c Thu Dec 20 17:36:34 2001 *************** *** 1,6 **** /* Subroutines for assembler code output on the DSP1610. Copyright (C) 1994, 1995, 1997, 1998, 2001 Free Software Foundation, Inc. ! Contributed by Michael Collison (collison@world.std.com). This file is part of GNU CC. --- 1,6 ---- /* Subroutines for assembler code output on the DSP1610. Copyright (C) 1994, 1995, 1997, 1998, 2001 Free Software Foundation, Inc. ! Contributed by Michael Collison (collison@isisinc.net). This file is part of GNU CC. *************** Boston, MA 02111-1307, USA. */ *** 38,43 **** --- 38,45 ---- #include "toplev.h" #include "recog.h" #include "tm_p.h" + #include "target.h" + #include "target-def.h" const char *text_seg_name; const char *rsect_text; *************** const char *chip_name; *** 52,62 **** const char *save_chip_name; /* Save the operands of a compare. The 16xx has not lt or gt, so ! in these cases we swap the operands and reverse the condition */ rtx dsp16xx_compare_op0; rtx dsp16xx_compare_op1; ! struct rtx_def *(*dsp16xx_compare_gen)(); static const char *fp; static const char *sp; --- 54,64 ---- const char *save_chip_name; /* Save the operands of a compare. The 16xx has not lt or gt, so ! in these cases we swap the operands and reverse the condition. */ rtx dsp16xx_compare_op0; rtx dsp16xx_compare_op1; ! rtx (*dsp16xx_compare_gen) PARAMS (()); static const char *fp; static const char *sp; *************** static const char *const lshift_right_as *** 145,150 **** --- 147,169 ---- }; static int reg_save_size PARAMS ((void)); + static void dsp16xx_output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT)); + static void dsp16xx_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT)); + + /* Initialize the GCC target structure. */ + #undef TARGET_ASM_BYTE_OP + #define TARGET_ASM_BYTE_OP "\tint\t" + #undef TARGET_ASM_ALIGNED_HI_OP + #define TARGET_ASM_ALIGNED_HI_OP NULL + #undef TARGET_ASM_ALIGNED_SI_OP + #define TARGET_ASM_ALIGNED_SI_OP NULL + + #undef TARGET_ASM_FUNCTION_PROLOGUE + #define TARGET_ASM_FUNCTION_PROLOGUE dsp16xx_output_function_prologue + #undef TARGET_ASM_FUNCTION_EPILOGUE + #define TARGET_ASM_FUNCTION_EPILOGUE dsp16xx_output_function_epilogue + + struct gcc_target targetm = TARGET_INITIALIZER; int hard_regno_mode_ok (regno, mode) *************** hard_regno_mode_ok (regno, mode) *** 156,164 **** case VOIDmode: return 1; ! /* ! We can't use the c0-c2 for QImode, since they are only ! 8 bits in length */ case QImode: if (regno != REG_C0 && regno != REG_C1 && regno != REG_C2) --- 175,182 ---- case VOIDmode: return 1; ! /* We can't use the c0-c2 for QImode, since they are only ! 8 bits in length. */ case QImode: if (regno != REG_C0 && regno != REG_C1 && regno != REG_C2) *************** hard_regno_mode_ok (regno, mode) *** 168,174 **** /* We only allow a0, a1, y, and p to be allocated for 32-bit modes. Additionally we allow the virtual ybase registers to be used for 32-bit ! modes. */ case HFmode: case SFmode: --- 186,192 ---- /* We only allow a0, a1, y, and p to be allocated for 32-bit modes. Additionally we allow the virtual ybase registers to be used for 32-bit ! modes. */ case HFmode: case SFmode: *************** dsp16xx_reg_class_from_letter (c) *** 196,201 **** --- 214,225 ---- { case 'A': return ACCUM_REGS; + + case 'l': + return A0_REG; + + case 'C': + return A1_REG; case 'h': return ACCUM_HIGH_REGS; *************** dsp16xx_reg_class_from_letter (c) *** 230,238 **** case 'd': return ACCUM_Y_OR_P_REGS; - case 'C': - return NO_FRAME_Y_ADDR_REGS; - case 'a': return Y_ADDR_REGS; --- 254,259 ---- *************** dsp16xx_reg_class_from_letter (c) *** 267,277 **** return SLOW_MEM_LOAD_REGS; default: ! abort (); } } /* Return the class number of the smallest class containing ! reg number REGNO. */ int regno_reg_class(regno) --- 288,299 ---- return SLOW_MEM_LOAD_REGS; default: ! return NO_REGS; } } + /* Return the class number of the smallest class containing ! reg number REGNO. */ int regno_reg_class(regno) *************** regno_reg_class(regno) *** 344,350 **** } /* A C expression for the maximum number of consecutive registers of class CLASS ! needed to hold a value of mode MODE */ int class_max_nregs(class, mode) --- 366,372 ---- } /* A C expression for the maximum number of consecutive registers of class CLASS ! needed to hold a value of mode MODE. */ int class_max_nregs(class, mode) *************** class_max_nregs(class, mode) *** 356,565 **** enum reg_class limit_reload_class (mode, class) ! enum machine_mode mode; enum reg_class class; { ! switch ((int) class) ! { ! case NO_REGS: ! case A0H_REG: ! case A0L_REG: ! case A0_REG: ! case A1H_REG: ! return class; ! ! case ACCUM_HIGH_REGS: ! abort (); ! ! case A1L_REG: ! case ACCUM_LOW_REGS: ! case A1_REG: ! return class; ! ! case ACCUM_REGS: ! if (GET_MODE_SIZE(mode) == 1) ! return ACCUM_LOW_REGS; ! else ! return class; ! ! case X_REG: ! case X_OR_ACCUM_LOW_REGS: ! return class; ! ! case X_OR_ACCUM_REGS: ! if (GET_MODE_SIZE(mode) == 1) ! return X_OR_ACCUM_LOW_REGS; ! else ! return class; ! ! case YH_REG: ! return class; ! ! case YH_OR_ACCUM_HIGH_REGS: ! abort (); ! ! case X_OR_YH_REGS: ! return class; ! ! case YL_REG: ! /* Register 'yl' is invalid for QImode, so we should never ! see it. */ ! abort (); ! ! case YL_OR_ACCUM_LOW_REGS: ! case X_OR_YL_REGS: ! return class; ! ! case Y_REG: ! if (GET_MODE_SIZE(mode) > 1) ! return class; ! else ! return YH_REG; ! ! case ACCUM_OR_Y_REGS: ! if (GET_MODE_SIZE(mode) > 1) ! return class; ! else ! return YL_OR_ACCUM_LOW_REGS; ! ! case PH_REG: ! case X_OR_PH_REGS: ! case PL_REG: ! case PL_OR_ACCUM_LOW_REGS: ! case X_OR_PL_REGS: ! return class; ! ! case P_REG: ! if (GET_MODE_SIZE(mode) > 1) ! return class; ! else ! return PL_REG; ! ! case ACCUM_OR_P_REGS: ! if (GET_MODE_SIZE(mode) > 1) ! return class; ! else ! return PL_OR_ACCUM_LOW_REGS; ! ! case YL_OR_P_REGS: ! case ACCUM_LOW_OR_YL_OR_P_REGS: ! return class; ! ! case Y_OR_P_REGS: ! return class; ! ! case ACCUM_Y_OR_P_REGS: ! if (GET_MODE_SIZE(mode) > 1) ! return class; ! else ! return ACCUM_LOW_OR_YL_OR_P_REGS; ! ! case NO_FRAME_Y_ADDR_REGS: ! case Y_ADDR_REGS: ! case ACCUM_LOW_OR_Y_ADDR_REGS: ! return class; ! ! case ACCUM_OR_Y_ADDR_REGS: ! if (GET_MODE_SIZE(mode) > 1) ! return ACCUM_REGS; ! else ! return ACCUM_LOW_OR_Y_ADDR_REGS; ! ! case X_OR_Y_ADDR_REGS: ! return class; ! ! case Y_OR_Y_ADDR_REGS: ! case P_OR_Y_ADDR_REGS: ! case NON_HIGH_YBASE_ELIGIBLE_REGS: ! ! case J_REG: ! return class; ! ! case YBASE_ELIGIBLE_REGS: ! if (GET_MODE_SIZE(mode) > 1) ! return ACCUM_Y_P_OR_YBASE_REGS; ! else ! return NON_HIGH_YBASE_ELIGIBLE_REGS; ! ! case J_OR_DAU_16_BIT_REGS: ! if (GET_MODE_SIZE(mode) == 1) ! return J_REG; ! else ! return class; ! ! case BMU_REGS: ! case NOHIGH_NON_ADDR_REGS: ! return class; ! ! case NON_ADDR_REGS: ! if (GET_MODE_SIZE(mode) > 1) ! return class; ! else ! return NOHIGH_NON_ADDR_REGS; ! ! case NOHIGH_NON_YBASE_REGS: ! return class; ! ! case NON_YBASE_REGS: ! if (GET_MODE_SIZE(mode) > 1) ! return class; ! else ! return NOHIGH_NON_YBASE_REGS; ! ! case YBASE_VIRT_REGS: ! case ACCUM_LOW_OR_YBASE_REGS: ! return class; ! ! case ACCUM_OR_YBASE_REGS: ! if (GET_MODE_SIZE(mode) > 1) ! return class; ! else ! return ACCUM_LOW_OR_YBASE_REGS; ! ! case X_OR_YBASE_REGS: ! return class; ! ! case Y_OR_YBASE_REGS: ! case ACCUM_LOW_YL_PL_OR_YBASE_REGS: ! case P_OR_YBASE_REGS: ! return class; ! ! case ACCUM_Y_P_OR_YBASE_REGS: ! return ACCUM_LOW_YL_PL_OR_YBASE_REGS; ! ! case Y_ADDR_OR_YBASE_REGS: ! case YBASE_OR_NOHIGH_YBASE_ELIGIBLE_REGS: ! return class; ! ! case YBASE_OR_YBASE_ELIGIBLE_REGS: ! if (GET_MODE_SIZE(mode) > 1) ! return class; ! else ! return YBASE_OR_NOHIGH_YBASE_ELIGIBLE_REGS; ! ! case NO_HIGH_ALL_REGS: ! return class; ! ! case ALL_REGS: ! if (GET_MODE_SIZE(mode) > 1) ! return class; ! else ! return NO_HIGH_ALL_REGS; ! ! default: ! return class; ! } } int dsp16xx_register_move_cost (from, to) enum reg_class from, to; { - #if 0 - if (from == NO_REGS || to == NO_REGS || (from == to)) - return 2; - #endif - if (from == A0H_REG || from == A0L_REG || from == A0_REG || from == A1H_REG || from == ACCUM_HIGH_REGS || from == A1L_REG || from == ACCUM_LOW_REGS || from == A1_REG || from == ACCUM_REGS) --- 378,393 ---- enum reg_class limit_reload_class (mode, class) ! enum machine_mode mode ATTRIBUTE_UNUSED; enum reg_class class; { ! return class; } int dsp16xx_register_move_cost (from, to) enum reg_class from, to; { if (from == A0H_REG || from == A0L_REG || from == A0_REG || from == A1H_REG || from == ACCUM_HIGH_REGS || from == A1L_REG || from == ACCUM_LOW_REGS || from == A1_REG || from == ACCUM_REGS) *************** dsp16xx_register_move_cost (from, to) *** 577,594 **** return 2; } - #if 0 if (from == YBASE_VIRT_REGS) { if (to == X_REG || to == YH_REG || to == YL_REG || to == Y_REG || to == PL_REG || to == PH_REG || to == P_REG || to == Y_ADDR_REGS || to == YBASE_ELIGIBLE_REGS || to == Y_OR_P_REGS) { ! return 2; } else ! return 4; } if (to == YBASE_VIRT_REGS) --- 405,424 ---- return 2; } if (from == YBASE_VIRT_REGS) { + if (to == YBASE_VIRT_REGS) + return 16; + if (to == X_REG || to == YH_REG || to == YL_REG || to == Y_REG || to == PL_REG || to == PH_REG || to == P_REG || to == Y_ADDR_REGS || to == YBASE_ELIGIBLE_REGS || to == Y_OR_P_REGS) { ! return 8; } else ! return 10; } if (to == YBASE_VIRT_REGS) *************** dsp16xx_register_move_cost (from, to) *** 598,610 **** from == P_REG || from == Y_ADDR_REGS || from == YBASE_ELIGIBLE_REGS || from == Y_OR_P_REGS) { ! return 2; } else ! return 4; } ! #endif ! return 4; } /* Given an rtx X being reloaded into a reg required to be --- 428,440 ---- from == P_REG || from == Y_ADDR_REGS || from == YBASE_ELIGIBLE_REGS || from == Y_OR_P_REGS) { ! return 8; } else ! return 10; } ! ! return 8; } /* Given an rtx X being reloaded into a reg required to be *************** preferred_reload_class (x, class) *** 620,636 **** enum reg_class class; { /* The ybase registers cannot have constants copied directly ! to them. */ if (CONSTANT_P (x)) { ! if (class == ALL_REGS) ! return NON_YBASE_REGS; } ! if (class == ALL_REGS && REG_P (x) && !TARGET_RESERVE_YBASE && IS_YBASE_REGISTER_WINDOW (REGNO(x))) ! return YBASE_ELIGIBLE_REGS; if (GET_CODE (x) == PLUS) { --- 450,794 ---- enum reg_class class; { /* The ybase registers cannot have constants copied directly ! to them. */ if (CONSTANT_P (x)) { ! switch ((int) class) ! { ! case YBASE_VIRT_REGS: ! return (!reload_in_progress ? NO_REGS : class); ! ! case ACCUM_LOW_OR_YBASE_REGS: ! return ACCUM_LOW_REGS; ! ! case ACCUM_OR_YBASE_REGS: ! return ACCUM_REGS; ! ! case X_OR_YBASE_REGS: ! return X_REG; ! ! case Y_OR_YBASE_REGS: ! return Y_REG; ! ! case ACCUM_LOW_YL_PL_OR_YBASE_REGS: ! return YL_OR_PL_OR_ACCUM_LOW_REGS; ! ! case P_OR_YBASE_REGS: ! return P_REG; ! ! case ACCUM_Y_P_OR_YBASE_REGS: ! return ACCUM_Y_OR_P_REGS; ! ! case Y_ADDR_OR_YBASE_REGS: ! return Y_ADDR_REGS; ! ! case YBASE_OR_NOHIGH_YBASE_ELIGIBLE_REGS: ! return NON_HIGH_YBASE_ELIGIBLE_REGS;; ! ! case YBASE_OR_YBASE_ELIGIBLE_REGS: ! return YBASE_ELIGIBLE_REGS; ! ! case NO_HIGH_ALL_REGS: ! return NOHIGH_NON_YBASE_REGS; ! ! case ALL_REGS: ! return NON_YBASE_REGS; ! ! default: ! return class; ! } } ! /* If x is not an accumulator or a ybase register, restrict the class of registers ! we can copy the register into. */ ! ! if (REG_P (x) && !IS_ACCUM_REG (REGNO (x)) && !IS_YBASE_REGISTER_WINDOW (REGNO (x))) ! { ! switch ((int) class) ! { ! case NO_REGS: ! case A0H_REG: case A0L_REG: case A0_REG: case A1H_REG: ! case ACCUM_HIGH_REGS: case A1L_REG: case ACCUM_LOW_REGS: ! case A1_REG: case ACCUM_REGS: ! return class; ! ! case X_REG: ! return (!reload_in_progress ? NO_REGS : class); ! ! case X_OR_ACCUM_LOW_REGS: ! return ACCUM_LOW_REGS; ! ! case X_OR_ACCUM_REGS: ! return ACCUM_REGS; ! ! case YH_REG: ! return (!reload_in_progress ? NO_REGS : class); ! ! case YH_OR_ACCUM_HIGH_REGS: ! return ACCUM_HIGH_REGS; ! ! case X_OR_YH_REGS: ! case YL_REG: ! return (!reload_in_progress ? NO_REGS : class); ! ! case YL_OR_ACCUM_LOW_REGS: ! return ACCUM_LOW_REGS; ! ! case X_OR_YL_REGS: ! case X_OR_Y_REGS: case Y_REG: ! return (!reload_in_progress ? NO_REGS : class); ! ! case ACCUM_OR_Y_REGS: ! return ACCUM_REGS; ! ! case PH_REG: ! case X_OR_PH_REGS: case PL_REG: ! return (!reload_in_progress ? NO_REGS : class); ! ! case PL_OR_ACCUM_LOW_REGS: ! return ACCUM_LOW_REGS; ! ! case X_OR_PL_REGS: ! return (!reload_in_progress ? NO_REGS : class); ! ! case YL_OR_PL_OR_ACCUM_LOW_REGS: ! return ACCUM_LOW_REGS; ! ! case P_REG: ! return (!reload_in_progress ? NO_REGS : class); ! ! case ACCUM_OR_P_REGS: ! return ACCUM_REGS; ! ! case YL_OR_P_REGS: ! return (!reload_in_progress ? NO_REGS : class); ! ! case ACCUM_LOW_OR_YL_OR_P_REGS: ! return ACCUM_LOW_REGS; ! ! case Y_OR_P_REGS: ! return (!reload_in_progress ? NO_REGS : class); ! ! case ACCUM_Y_OR_P_REGS: ! return ACCUM_REGS; ! ! case NO_FRAME_Y_ADDR_REGS: ! case Y_ADDR_REGS: ! return (!reload_in_progress ? NO_REGS : class); ! ! case ACCUM_LOW_OR_Y_ADDR_REGS: ! return ACCUM_LOW_REGS; ! ! case ACCUM_OR_Y_ADDR_REGS: ! return ACCUM_REGS; ! ! case X_OR_Y_ADDR_REGS: ! case Y_OR_Y_ADDR_REGS: ! case P_OR_Y_ADDR_REGS: ! return (!reload_in_progress ? NO_REGS : class); ! ! case NON_HIGH_YBASE_ELIGIBLE_REGS: ! return ACCUM_LOW_REGS; ! ! case YBASE_ELIGIBLE_REGS: ! return ACCUM_REGS; ! ! case J_REG: ! case J_OR_DAU_16_BIT_REGS: ! case BMU_REGS: ! return (!reload_in_progress ? NO_REGS : class); ! ! case YBASE_VIRT_REGS: ! if (IS_YBASE_ELIGIBLE_REG (REGNO (x))) ! return class; ! else ! return (!reload_in_progress ? NO_REGS : class); ! ! case ACCUM_LOW_OR_YBASE_REGS: ! if (IS_YBASE_ELIGIBLE_REG (REGNO (x))) ! return class; ! else ! return ACCUM_LOW_REGS; ! ! case ACCUM_OR_YBASE_REGS: ! if (IS_YBASE_ELIGIBLE_REG (REGNO (x))) ! return class; ! else ! return ACCUM_REGS; ! ! case X_OR_YBASE_REGS: ! case Y_OR_YBASE_REGS: ! if (IS_YBASE_ELIGIBLE_REG (REGNO (x))) ! return YBASE_VIRT_REGS; ! else ! return (!reload_in_progress ? NO_REGS : class); ! ! case ACCUM_LOW_YL_PL_OR_YBASE_REGS: ! if (IS_YBASE_ELIGIBLE_REG (REGNO (x))) ! return ACCUM_LOW_OR_YBASE_REGS; ! else ! return ACCUM_LOW_REGS; ! ! case P_OR_YBASE_REGS: ! if (IS_YBASE_ELIGIBLE_REG (REGNO (x))) ! return YBASE_VIRT_REGS; ! else ! return (!reload_in_progress ? NO_REGS : class); ! ! case ACCUM_Y_P_OR_YBASE_REGS: ! if (IS_YBASE_ELIGIBLE_REG (REGNO (x))) ! return ACCUM_OR_YBASE_REGS; ! else ! return ACCUM_REGS; ! ! case Y_ADDR_OR_YBASE_REGS: ! if (IS_YBASE_ELIGIBLE_REG (REGNO (x))) ! return YBASE_VIRT_REGS; ! else ! return (!reload_in_progress ? NO_REGS : class); ! ! case YBASE_OR_NOHIGH_YBASE_ELIGIBLE_REGS: ! if (IS_YBASE_ELIGIBLE_REG (REGNO (x))) ! return ACCUM_LOW_OR_YBASE_REGS; ! else ! return ACCUM_LOW_REGS; ! ! case YBASE_OR_YBASE_ELIGIBLE_REGS: ! if (IS_YBASE_ELIGIBLE_REG (REGNO (x))) ! return ACCUM_OR_YBASE_REGS; ! else ! return ACCUM_REGS; ! ! case NO_HIGH_ALL_REGS: ! if (IS_YBASE_ELIGIBLE_REG (REGNO (x))) ! return ACCUM_LOW_OR_YBASE_REGS; ! else ! return ACCUM_LOW_REGS; ! ! case ALL_REGS: ! if (IS_YBASE_ELIGIBLE_REG (REGNO (x))) ! return ACCUM_OR_YBASE_REGS; ! else ! return ACCUM_REGS; ! ! case NOHIGH_NON_ADDR_REGS: ! return ACCUM_LOW_REGS; ! ! case NON_ADDR_REGS: ! case SLOW_MEM_LOAD_REGS: ! return ACCUM_REGS; ! ! case NOHIGH_NON_YBASE_REGS: ! return ACCUM_LOW_REGS; ! ! case NO_ACCUM_NON_YBASE_REGS: ! return (!reload_in_progress ? NO_REGS : class); ! ! case NON_YBASE_REGS: ! return ACCUM_REGS; ! ! default: ! return class; ! } ! } ! ! /* If x (the input) is a ybase register, restrict the class of registers ! we can copy the register into. */ ! ! if (REG_P (x) && !TARGET_RESERVE_YBASE && IS_YBASE_REGISTER_WINDOW (REGNO(x))) ! { ! switch ((int) class) ! { ! case NO_REGS: ! case A0H_REG: case A0L_REG: case A0_REG: case A1H_REG: ! case ACCUM_HIGH_REGS: case A1L_REG: case ACCUM_LOW_REGS: ! case A1_REG: case ACCUM_REGS: case X_REG: ! case X_OR_ACCUM_LOW_REGS: case X_OR_ACCUM_REGS: ! case YH_REG: case YH_OR_ACCUM_HIGH_REGS: ! case X_OR_YH_REGS: case YL_REG: ! case YL_OR_ACCUM_LOW_REGS: case X_OR_YL_REGS: ! case X_OR_Y_REGS: case Y_REG: ! case ACCUM_OR_Y_REGS: case PH_REG: ! case X_OR_PH_REGS: case PL_REG: ! case PL_OR_ACCUM_LOW_REGS: case X_OR_PL_REGS: ! case YL_OR_PL_OR_ACCUM_LOW_REGS: case P_REG: ! case ACCUM_OR_P_REGS: case YL_OR_P_REGS: ! case ACCUM_LOW_OR_YL_OR_P_REGS: case Y_OR_P_REGS: ! case ACCUM_Y_OR_P_REGS: case NO_FRAME_Y_ADDR_REGS: ! case Y_ADDR_REGS: case ACCUM_LOW_OR_Y_ADDR_REGS: ! case ACCUM_OR_Y_ADDR_REGS: case X_OR_Y_ADDR_REGS: ! case Y_OR_Y_ADDR_REGS: case P_OR_Y_ADDR_REGS: ! case NON_HIGH_YBASE_ELIGIBLE_REGS: case YBASE_ELIGIBLE_REGS: ! default: ! return class; ! ! case J_REG: ! return (!reload_in_progress ? NO_REGS : class); ! ! case J_OR_DAU_16_BIT_REGS: ! return ACCUM_HIGH_REGS; ! ! case BMU_REGS: ! case YBASE_VIRT_REGS: ! return (!reload_in_progress ? NO_REGS : class); ! ! case ACCUM_LOW_OR_YBASE_REGS: ! return ACCUM_LOW_REGS; ! ! case ACCUM_OR_YBASE_REGS: ! return ACCUM_REGS; ! ! case X_OR_YBASE_REGS: ! return X_REG; ! ! case Y_OR_YBASE_REGS: ! return Y_REG; ! ! case ACCUM_LOW_YL_PL_OR_YBASE_REGS: ! return YL_OR_PL_OR_ACCUM_LOW_REGS; ! ! case P_OR_YBASE_REGS: ! return P_REG; ! ! case ACCUM_Y_P_OR_YBASE_REGS: ! return ACCUM_Y_OR_P_REGS; ! ! case Y_ADDR_OR_YBASE_REGS: ! return Y_ADDR_REGS; ! ! case YBASE_OR_NOHIGH_YBASE_ELIGIBLE_REGS: ! return NON_HIGH_YBASE_ELIGIBLE_REGS; ! ! case YBASE_OR_YBASE_ELIGIBLE_REGS: ! return YBASE_ELIGIBLE_REGS; ! ! case NO_HIGH_ALL_REGS: ! return NON_HIGH_YBASE_ELIGIBLE_REGS; ! ! case ALL_REGS: ! return YBASE_ELIGIBLE_REGS; ! ! case NOHIGH_NON_ADDR_REGS: ! return ACCUM_LOW_OR_YL_OR_P_REGS; ! ! case NON_ADDR_REGS: ! return ACCUM_Y_OR_P_REGS; ! ! case SLOW_MEM_LOAD_REGS: ! return ACCUM_OR_Y_ADDR_REGS; ! ! case NOHIGH_NON_YBASE_REGS: ! return NON_HIGH_YBASE_ELIGIBLE_REGS; ! ! case NO_ACCUM_NON_YBASE_REGS: ! return Y_ADDR_REGS; ! ! case NON_YBASE_REGS: ! return YBASE_ELIGIBLE_REGS; ! } ! } if (GET_CODE (x) == PLUS) { *************** preferred_reload_class (x, class) *** 643,655 **** if (class == ACCUM_HIGH_REGS) return class; if (reg_class_subset_p (ACCUM_HIGH_REGS, class)) return ACCUM_HIGH_REGS; /* We will use accumulator 'a1l' for reloading a ! PLUS. We can only use one accumulator because 'reload_inqi' only allows one alternative to be ! used. */ else if (class == ACCUM_LOW_REGS) return A1L_REG; --- 801,819 ---- if (class == ACCUM_HIGH_REGS) return class; + /* If the accumulators are not part of the class + being reloaded into, return NO_REGS. */ + #if 0 + if (!reg_class_subset_p (ACCUM_REGS, class)) + return (!reload_in_progress ? NO_REGS : class); + #endif if (reg_class_subset_p (ACCUM_HIGH_REGS, class)) return ACCUM_HIGH_REGS; /* We will use accumulator 'a1l' for reloading a ! PLUS. We can only use one accumulator because 'reload_inqi' only allows one alternative to be ! used. */ else if (class == ACCUM_LOW_REGS) return A1L_REG; *************** preferred_reload_class (x, class) *** 666,679 **** } else if (GET_CODE (x) == MEM) { ! if (class == ALL_REGS) { ! #if 0 ! if (GET_MODE(x) == HImode) ! return NO_ACCUM_NON_YBASE_REGS; ! else ! #endif ! return NON_YBASE_REGS; } else return class; --- 830,883 ---- } else if (GET_CODE (x) == MEM) { ! /* We can't copy from a memory location into a ! ybase register. */ ! if (reg_class_subset_p(YBASE_VIRT_REGS, class)) { ! switch ((int) class) ! { ! case YBASE_VIRT_REGS: ! return (!reload_in_progress ? NO_REGS : class); ! ! case ACCUM_LOW_OR_YBASE_REGS: ! return ACCUM_LOW_REGS; ! ! case ACCUM_OR_YBASE_REGS: ! return ACCUM_REGS; ! ! case X_OR_YBASE_REGS: ! return X_REG; ! ! case Y_OR_YBASE_REGS: ! return Y_REG; ! ! case ACCUM_LOW_YL_PL_OR_YBASE_REGS: ! return YL_OR_PL_OR_ACCUM_LOW_REGS; ! ! case P_OR_YBASE_REGS: ! return P_REG; ! ! case ACCUM_Y_P_OR_YBASE_REGS: ! return ACCUM_Y_OR_P_REGS; ! ! case Y_ADDR_OR_YBASE_REGS: ! return Y_ADDR_REGS; ! ! case YBASE_OR_NOHIGH_YBASE_ELIGIBLE_REGS: ! return NON_HIGH_YBASE_ELIGIBLE_REGS; ! ! case YBASE_OR_YBASE_ELIGIBLE_REGS: ! return YBASE_ELIGIBLE_REGS; ! ! case NO_HIGH_ALL_REGS: ! return NOHIGH_NON_YBASE_REGS; ! ! case ALL_REGS: ! return NON_YBASE_REGS; ! ! default: ! return class; ! } } else return class; *************** secondary_reload_class (class, mode, in) *** 697,702 **** --- 901,918 ---- if (GET_CODE (in) == REG || GET_CODE (in) == SUBREG) regno = true_regnum (in); + /* If we are reloading a plus into a high accumulator register, + we need a scratch low accumulator, because the low half gets + clobbered. */ + + if (class == ACCUM_HIGH_REGS + || class == A1H_REG + || class == A0H_REG) + { + if (GET_CODE (in) == PLUS && mode == QImode) + return ACCUM_LOW_REGS; + } + if (class == ACCUM_HIGH_REGS || class == ACCUM_LOW_REGS || class == A1L_REG *************** secondary_reload_class (class, mode, in) *** 710,716 **** rtx addr1 = XEXP (in, 1); /* If we are reloading a plus (reg:QI) (reg:QI) ! we need an additional register. */ if (REG_P (addr0) && REG_P (addr1)) return NO_REGS; } --- 926,932 ---- rtx addr1 = XEXP (in, 1); /* If we are reloading a plus (reg:QI) (reg:QI) ! we need an additional register. */ if (REG_P (addr0) && REG_P (addr1)) return NO_REGS; } *************** secondary_reload_class (class, mode, in) *** 725,733 **** (regno >= REG_A0 && regno < REG_A1L + 1)) return NO_REGS; /* We can copy the ybase registers into: r0-r3, a0-a1, y, p, & x or the union of ! any of these. */ if (!TARGET_RESERVE_YBASE && IS_YBASE_REGISTER_WINDOW(regno)) { --- 941,955 ---- (regno >= REG_A0 && regno < REG_A1L + 1)) return NO_REGS; + if (class == ACCUM_OR_YBASE_REGS && REG_P(in) + && IS_YBASE_ELIGIBLE_REG(regno)) + { + return NO_REGS; + } + /* We can copy the ybase registers into: r0-r3, a0-a1, y, p, & x or the union of ! any of these. */ if (!TARGET_RESERVE_YBASE && IS_YBASE_REGISTER_WINDOW(regno)) { *************** secondary_reload_class (class, mode, in) *** 775,781 **** directly to the ybase registers. In addition we can use any of the ybase virtual registers as the secondary reload registers when copying ! between any of these registers. */ if (!TARGET_RESERVE_YBASE && regno != -1) { --- 997,1003 ---- directly to the ybase registers. In addition we can use any of the ybase virtual registers as the secondary reload registers when copying ! between any of these registers. */ if (!TARGET_RESERVE_YBASE && regno != -1) { *************** secondary_reload_class (class, mode, in) *** 841,847 **** } /* Memory or constants can be moved from or to any register ! except the ybase virtual registers */ if (regno == -1 && GET_CODE(in) != PLUS) { if (class == YBASE_VIRT_REGS) --- 1063,1069 ---- } /* Memory or constants can be moved from or to any register ! except the ybase virtual registers. */ if (regno == -1 && GET_CODE(in) != PLUS) { if (class == YBASE_VIRT_REGS) *************** secondary_reload_class (class, mode, in) *** 856,862 **** rtx addr1 = XEXP (in, 1); /* If we are reloading a plus (reg:QI) (reg:QI) ! we need a low accumulator, not a high one. */ if (REG_P (addr0) && REG_P (addr1)) return ACCUM_LOW_REGS; } --- 1078,1084 ---- rtx addr1 = XEXP (in, 1); /* If we are reloading a plus (reg:QI) (reg:QI) ! we need a low accumulator, not a high one. */ if (REG_P (addr0) && REG_P (addr1)) return ACCUM_LOW_REGS; } *************** symbolic_address_p (op) *** 902,908 **** /* For a Y address space operand we allow only *rn, *rn++, *rn--. This routine only recognizes *rn, the '<>' constraints recognize ! *rn++, *rn-- */ int Y_address_operand (op, mode) --- 1124,1130 ---- /* For a Y address space operand we allow only *rn, *rn++, *rn--. This routine only recognizes *rn, the '<>' constraints recognize ! (*rn++), and (*rn--). */ int Y_address_operand (op, mode) *************** notice_update_cc(exp) *** 1037,1051 **** cc_status.value1 = SET_SRC (exp); return; } ! /* Certain instructions effect the condition codes. */ else if (GET_MODE_CLASS (GET_MODE (SET_SRC (exp))) == MODE_INT) ! switch( GET_CODE (SET_SRC (exp)) ) { case PLUS: case MINUS: if (REG_P (SET_DEST (exp))) { ! /* Address registers don't set the condition codes */ if (IS_ADDRESS_REGISTER (REGNO (SET_DEST (exp)))) { CC_STATUS_INIT; --- 1259,1273 ---- cc_status.value1 = SET_SRC (exp); return; } ! /* Certain instructions effect the condition codes. */ else if (GET_MODE_CLASS (GET_MODE (SET_SRC (exp))) == MODE_INT) ! switch (GET_CODE (SET_SRC (exp))) { case PLUS: case MINUS: if (REG_P (SET_DEST (exp))) { ! /* Address registers don't set the condition codes. */ if (IS_ADDRESS_REGISTER (REGNO (SET_DEST (exp)))) { CC_STATUS_INIT; *************** compute_frame_size (size) *** 1116,1121 **** --- 1338,1346 ---- long extra_size; long reg_size; + /* This value is needed to compute reg_size. */ + current_frame_info.function_makes_calls = !leaf_function_p (); + reg_size = 0; extra_size = 0; var_size = size; *************** compute_frame_size (size) *** 1133,1139 **** current_frame_info.reg_size = reg_size; current_frame_info.initialized = reload_completed; current_frame_info.reg_size = reg_size / UNITS_PER_WORD; - current_frame_info.function_makes_calls = dsp16xx_makes_calls (); if (reg_size) { --- 1358,1363 ---- *************** int *** 1149,1157 **** dsp16xx_call_saved_register (regno) int regno; { return (regs_ever_live[regno] && !call_used_regs[regno] && !IS_YBASE_REGISTER_WINDOW(regno)); - } int --- 1373,1384 ---- dsp16xx_call_saved_register (regno) int regno; { + #if 0 + if (regno == REG_PR && current_frame_info.function_makes_calls) + return 1; + #endif return (regs_ever_live[regno] && !call_used_regs[regno] && !IS_YBASE_REGISTER_WINDOW(regno)); } int *************** ybase_regs_ever_used () *** 1170,1179 **** return live; } ! void ! function_prologue (file, size) FILE *file; ! int size; { int regno; long total_size; --- 1397,1406 ---- return live; } ! static void ! dsp16xx_output_function_prologue (file, size) FILE *file; ! HOST_WIDE_INT size; { int regno; long total_size; *************** function_prologue (file, size) *** 1184,1190 **** total_size = compute_frame_size (size); ! fprintf( file, "\t/* FUNCTION PROLOGUE: */\n" ); fprintf (file, "\t/* total=%ld, vars= %ld, regs= %d, args=%d, extra= %ld */\n", current_frame_info.total_size, current_frame_info.var_size, --- 1411,1417 ---- total_size = compute_frame_size (size); ! fprintf (file, "\t/* FUNCTION PROLOGUE: */\n"); fprintf (file, "\t/* total=%ld, vars= %ld, regs= %d, args=%d, extra= %ld */\n", current_frame_info.total_size, current_frame_info.var_size, *************** function_prologue (file, size) *** 1195,1201 **** fprintf (file, "\t/* fp save offset= %ld, sp save_offset= %ld */\n\n", current_frame_info.fp_save_offset, current_frame_info.sp_save_offset); ! /* Set up the 'ybase' register window. */ if (ybase_regs_ever_used()) { --- 1422,1428 ---- fprintf (file, "\t/* fp save offset= %ld, sp save_offset= %ld */\n\n", current_frame_info.fp_save_offset, current_frame_info.sp_save_offset); ! /* Set up the 'ybase' register window. */ if (ybase_regs_ever_used()) { *************** function_prologue (file, size) *** 1207,1255 **** fprintf (file, "\t%s=%s\n", reg_names[REG_YBASE], a1h); } - #if 0 - if (current_frame_info.function_makes_calls) - fprintf( file, "\t*%s++=%s\n", sp, rr ); /* Push return address */ - #endif - - if (current_frame_info.var_size) { if (current_frame_info.var_size == 1) fprintf (file, "\t*%s++\n", sp); - else if (SMALL_INTVAL (current_frame_info.var_size) - && ((current_frame_info.var_size & 0x8000) == 0)) - fprintf (file, "\t%s=%ld\n\t*%s++%s\n", reg_names[REG_J], - current_frame_info.var_size, sp, reg_names[REG_J]); else ! error ("Stack size > 32k"); } ! /* Save any registers this function uses, unless they are used in a call, ! in which case we don't need to. */ ! for (regno = 0; regno < FIRST_PSEUDO_REGISTER; ++ regno) if (dsp16xx_call_saved_register (regno)) { - #if OLD_REGISTER_SAVE - fprintf (file, "\t*%s++=%s\n", sp, reg_names[regno]); - #else fprintf (file, "\tpush(*%s)=%s\n", sp, reg_names[regno]); - #endif } ! if (current_frame_info.args_size) { if (current_frame_info.args_size == 1) fprintf (file, "\t*%s++\n", sp); - else if (SMALL_INTVAL (current_frame_info.args_size) - && (current_frame_info.args_size & 0x8000) == 0) - fprintf (file, "\t%s=%ld\n\t*%s++%s\n", reg_names[REG_J], - current_frame_info.args_size, sp, reg_names[REG_J]); else ! error ("Stack size > 32k"); } ! if (frame_pointer_needed) { fprintf (file, "\t%s=%s\n", a1h, sp); --- 1434,1474 ---- fprintf (file, "\t%s=%s\n", reg_names[REG_YBASE], a1h); } if (current_frame_info.var_size) { if (current_frame_info.var_size == 1) fprintf (file, "\t*%s++\n", sp); else ! { ! if (SMALL_INTVAL(current_frame_info.var_size) && ((current_frame_info.var_size & 0x8000) == 0)) ! fprintf (file, "\t%s=%ld\n\t*%s++%s\n", reg_names[REG_J], current_frame_info.var_size, sp, reg_names[REG_J]); ! else ! fatal_error ("stack size > 32k"); ! } } ! /* Save any registers this function uses, unless they are ! used in a call, in which case we don't need to. */ ! for(regno = 0; regno < FIRST_PSEUDO_REGISTER; ++ regno) if (dsp16xx_call_saved_register (regno)) { fprintf (file, "\tpush(*%s)=%s\n", sp, reg_names[regno]); } ! ! /* For debugging purposes, we want the return address to be at a predictable ! location. */ ! if (current_frame_info.function_makes_calls) ! fprintf (file, "\tpush(*%s)=%s\n", sp, reg_names[RETURN_ADDRESS_REGNUM]); ! if (current_frame_info.args_size) { if (current_frame_info.args_size == 1) fprintf (file, "\t*%s++\n", sp); else ! error ("stack size > 32k"); } ! if (frame_pointer_needed) { fprintf (file, "\t%s=%s\n", a1h, sp); *************** init_emulation_routines () *** 1288,1309 **** dsp16xx_lshrhi3_libcall = (rtx) 0; } ! void ! function_epilogue (file, size) FILE *file; ! int size ATTRIBUTE_UNUSED; { int regno; - #if OLD_REGISTER_SAVE - int initial_stack_dec = 0; - #endif fp = reg_names[FRAME_POINTER_REGNUM]; sp = reg_names[STACK_POINTER_REGNUM]; rr = reg_names[RETURN_ADDRESS_REGNUM]; /* return address register */ a1h = reg_names[REG_A1]; ! fprintf( file, "\n\t/* FUNCTION EPILOGUE: */\n" ); if (current_frame_info.args_size) { --- 1507,1525 ---- dsp16xx_lshrhi3_libcall = (rtx) 0; } ! static void ! dsp16xx_output_function_epilogue (file, size) FILE *file; ! HOST_WIDE_INT size ATTRIBUTE_UNUSED; { int regno; fp = reg_names[FRAME_POINTER_REGNUM]; sp = reg_names[STACK_POINTER_REGNUM]; rr = reg_names[RETURN_ADDRESS_REGNUM]; /* return address register */ a1h = reg_names[REG_A1]; ! fprintf (file, "\n\t/* FUNCTION EPILOGUE: */\n"); if (current_frame_info.args_size) { *************** function_epilogue (file, size) *** 1325,1357 **** fprintf (file, "\t%s=%sh-32\n", reg_names[REG_A1], a1h); fprintf (file, "\t%s=%s\n", reg_names[REG_YBASE], a1h); } for (regno = FIRST_PSEUDO_REGISTER - 1; regno >= 0; --regno) if (dsp16xx_call_saved_register(regno)) { ! #if OLD_REGISTER_SAVE ! if (!initial_stack_dec) ! { ! initial_stack_dec = 1; ! fprintf (file, "\t*%s--\n", sp); ! } ! #endif ! ! #if OLD_REGISTER_SAVE ! fprintf( file, "\t%s=*%s--\n", reg_names[regno], sp ); ! #else ! fprintf( file, "\t%s=pop(*%s)\n", reg_names[regno], sp ); ! #endif } - /* If we restored any registers we have to account for the - initial pre-decrement. But only if we had any local variables - or spills. */ - #if OLD_REGISTER_SAVE - if (initial_stack_dec) - fprintf (file, "\t*%s++\n", sp); - #endif - if (current_frame_info.var_size) { if (current_frame_info.var_size == 1) --- 1541,1556 ---- fprintf (file, "\t%s=%sh-32\n", reg_names[REG_A1], a1h); fprintf (file, "\t%s=%s\n", reg_names[REG_YBASE], a1h); } + + if (current_frame_info.function_makes_calls) + fprintf (file, "\t%s=pop(*%s)\n", reg_names[RETURN_ADDRESS_REGNUM], sp); for (regno = FIRST_PSEUDO_REGISTER - 1; regno >= 0; --regno) if (dsp16xx_call_saved_register(regno)) { ! fprintf (file, "\t%s=pop(*%s)\n", reg_names[regno], sp); } if (current_frame_info.var_size) { if (current_frame_info.var_size == 1) *************** function_epilogue (file, size) *** 1364,1370 **** } fprintf (file, "\treturn\n"); ! /* Reset the frame info for the next function */ current_frame_info = zero_frame_info; init_emulation_routines (); } --- 1563,1569 ---- } fprintf (file, "\treturn\n"); ! /* Reset the frame info for the next function. */ current_frame_info = zero_frame_info; init_emulation_routines (); } *************** double_reg_from_memory (operands) *** 1407,1420 **** xoperands[1] = XEXP (XEXP (operands[1], 0), 0); xoperands[0] = operands[0]; ! /* We can't use j anymore since the compiler can allocate it. */ /* output_asm_insn ("j=-3\n\t%u0=*%1++\n\t%w0=*%1++j", xoperands); */ output_asm_insn ("%u0=*%1++\n\t%w0=*%1--\n\t*%1--\n\t*%1--", xoperands); } else if (GET_CODE(XEXP(operands[1],0)) == PLUS) { rtx addr; ! int offset; output_asm_insn ("%u0=%1", operands); --- 1606,1619 ---- xoperands[1] = XEXP (XEXP (operands[1], 0), 0); xoperands[0] = operands[0]; ! /* We can't use j anymore since the compiler can allocate it. */ /* output_asm_insn ("j=-3\n\t%u0=*%1++\n\t%w0=*%1++j", xoperands); */ output_asm_insn ("%u0=*%1++\n\t%w0=*%1--\n\t*%1--\n\t*%1--", xoperands); } else if (GET_CODE(XEXP(operands[1],0)) == PLUS) { rtx addr; ! int offset = 0; output_asm_insn ("%u0=%1", operands); *************** double_reg_to_memory (operands) *** 1455,1461 **** xoperands[0] = XEXP (XEXP (operands[0], 0), 0); xoperands[1] = operands[1]; ! /* We can't use j anymore since the compiler can allocate it. */ /* output_asm_insn ("j=-3\n\t*%0++=%u1\n\t*%0++j=%w1", xoperands); */ output_asm_insn ("*%0++=%u1\n\t*%0--=%w1\n\t*%0--\n\t*%0--", xoperands); --- 1654,1660 ---- xoperands[0] = XEXP (XEXP (operands[0], 0), 0); xoperands[1] = operands[1]; ! /* We can't use j anymore since the compiler can allocate it. */ /* output_asm_insn ("j=-3\n\t*%0++=%u1\n\t*%0++j=%w1", xoperands); */ output_asm_insn ("*%0++=%u1\n\t*%0--=%w1\n\t*%0--\n\t*%0--", xoperands); *************** double_reg_to_memory (operands) *** 1464,1470 **** else if (GET_CODE(XEXP(operands[0],0)) == PLUS) { rtx addr; ! int offset; output_asm_insn ("%0=%u1", operands); --- 1663,1669 ---- else if (GET_CODE(XEXP(operands[0],0)) == PLUS) { rtx addr; ! int offset = 0; output_asm_insn ("%0=%u1", operands); *************** double_reg_to_memory (operands) *** 1476,1485 **** else if (GET_CODE (XEXP(addr,1)) == CONST_INT) offset = INTVAL(XEXP(addr,1)) + 1; else ! abort (); ! fprintf (asm_out_file, "\t*(%d)=%s\n", offset + 31, ! reg_names[REGNO(operands[1]) + 1]); } else { --- 1675,1683 ---- else if (GET_CODE (XEXP(addr,1)) == CONST_INT) offset = INTVAL(XEXP(addr,1)) + 1; else ! fatal_error ("invalid addressing mode"); ! fprintf (asm_out_file, "\t*(%d)=%s\n", offset + 31, reg_names[REGNO(operands[1]) + 1]); } else { *************** override_options () *** 1528,1542 **** strlen(const_seg_name) + 3); sprintf (tmp, ".rsect \"%s\"", const_seg_name); - if (optimize) - { - if (TARGET_OPTIMIZE_SPEED) - { - flag_unroll_loops = 1; - flag_inline_functions = 1; - } - } - /* Mark our global variables for GC. */ ggc_add_rtx_root (&dsp16xx_addhf3_libcall, 1); ggc_add_rtx_root (&dsp16xx_subhf3_libcall, 1); --- 1726,1731 ---- *************** override_options () *** 1561,1573 **** ggc_add_rtx_root (&dsp16xx_lshrhi3_libcall, 1); } enum rtx_code next_cc_user_code (insn) rtx insn; { ! if ( !(insn = next_cc0_user (insn))) ! abort (); else if (GET_CODE (insn) == JUMP_INSN && GET_CODE (PATTERN (insn)) == SET && GET_CODE (SET_SRC (PATTERN (insn))) == IF_THEN_ELSE) --- 1750,1780 ---- ggc_add_rtx_root (&dsp16xx_lshrhi3_libcall, 1); } + int + next_cc_user_unsigned (insn) + rtx insn; + { + switch (next_cc_user_code (insn)) + { + case GTU: + case GEU: + case LTU: + case LEU: + return 1; + default: + return 0; + } + } enum rtx_code next_cc_user_code (insn) rtx insn; { ! /* If no insn could be found we assume that the jump has been ! deleted and the compare will be deleted later. */ ! ! if (!(insn = next_cc0_user (insn))) ! return (enum rtx_code) 0; else if (GET_CODE (insn) == JUMP_INSN && GET_CODE (PATTERN (insn)) == SET && GET_CODE (SET_SRC (PATTERN (insn))) == IF_THEN_ELSE) *************** next_cc_user_code (insn) *** 1580,1601 **** abort (); } - int - next_cc_user_unsigned (insn) - rtx insn; - { - switch (next_cc_user_code (insn)) - { - case GTU: - case GEU: - case LTU: - case LEU: - return 1; - default: - return 0; - } - } - void print_operand(file, op, letter) FILE *file; --- 1787,1792 ---- *************** print_operand(file, op, letter) *** 1651,1659 **** break; } ! if( code == REG ) { ! /* Print the low half of a 32-bit register pair */ if (letter == 'w') fprintf (file, "%s", reg_names[REGNO (op) + 1]); else if (letter == 'u' || !letter) --- 1842,1850 ---- break; } ! if (code == REG) { ! /* Print the low half of a 32-bit register pair. */ if (letter == 'w') fprintf (file, "%s", reg_names[REGNO (op) + 1]); else if (letter == 'u' || !letter) *************** print_operand(file, op, letter) *** 1663,1669 **** else if (letter == 'm') fprintf (file, "%s", himode_reg_name[REGNO (op)]); else ! output_operand_lossgae ("Bad register extension code"); } else if (code == MEM) output_address (XEXP(op,0)); --- 1854,1860 ---- else if (letter == 'm') fprintf (file, "%s", himode_reg_name[REGNO (op)]); else ! output_operand_lossage ("bad register extension code"); } else if (code == MEM) output_address (XEXP(op,0)); *************** print_operand(file, op, letter) *** 1676,1694 **** else if (letter == 'h') fprintf (file, HOST_WIDE_INT_PRINT_DEC, val); else if (letter == 'U') ! fprint(f file, HOST_WIDE_INT_PRINT_HEX, (val >> 16) & 0xffff); else ! output_addr_const (file, op); ! } ! else if (code == CONST_DOUBLE && GET_MODE (op) != DImode) { ! union {double d; int i[2]; } u; ! union {float f; int i; } u1; ! ! u.i[0] = CONST_DOUBLE_LOW (op); ! u.i[1] = CONST_DOUBLE_HIGH (op); ! u1.f = u.d; ! fprintf (file, "0x%x", u1.i); } else output_addr_const (file, op); --- 1867,1923 ---- else if (letter == 'h') fprintf (file, HOST_WIDE_INT_PRINT_DEC, val); else if (letter == 'U') ! fprintf (file, HOST_WIDE_INT_PRINT_HEX, (val >> 16) & 0xffff); else ! output_addr_const(file, op); ! } ! else if (code == CONST_DOUBLE && GET_MODE(op) != DImode) ! { ! union { double d; int i[2]; } u; ! union { float f; int i; } u1; ! u.i[0] = CONST_DOUBLE_LOW (op); ! u.i[1] = CONST_DOUBLE_HIGH (op); ! u1.f = u.d; ! fprintf (file, "0x%x", u1.i); ! } ! else if (code == CONST) { ! rtx addr = XEXP (op, 0); ! ! if (GET_CODE (addr) != PLUS) ! { ! output_addr_const(file, op); ! return; ! } ! ! if ((GET_CODE (XEXP (addr, 0)) == SYMBOL_REF ! || GET_CODE (XEXP (addr, 0)) == LABEL_REF) ! && (GET_CODE (XEXP (addr, 1)) == CONST_INT)) ! { ! int n = INTVAL (XEXP(addr, 1)); ! output_addr_const (file, XEXP (addr, 0)); ! ! if (n >= 0) ! fprintf (file, "+"); ! ! n = (int) (short) n; ! fprintf (file, "%d", n); ! } ! else if ((GET_CODE (XEXP (addr, 1)) == SYMBOL_REF ! || GET_CODE (XEXP (addr, 1)) == LABEL_REF) ! && (GET_CODE (XEXP (addr, 0)) == CONST_INT)) ! { ! int n = INTVAL (XEXP(addr, 0)); ! output_addr_const (file, XEXP (addr, 1)); ! ! if (n >= 0) ! fprintf (file, "+"); ! ! n = (int) (short) n; ! fprintf (file, "%d", n); ! } ! else ! output_addr_const(file, op); } else output_addr_const (file, op); *************** print_operand_address(file, addr) *** 1701,1707 **** rtx addr; { rtx base; ! int offset; switch (GET_CODE (addr)) { --- 1930,1936 ---- rtx addr; { rtx base; ! int offset = 0;; switch (GET_CODE (addr)) { *************** print_operand_address(file, addr) *** 1719,1742 **** offset = INTVAL(XEXP(addr,0)), base = XEXP(addr,1); else if (GET_CODE (XEXP(addr,1)) == CONST_INT) offset = INTVAL(XEXP(addr,1)), base = XEXP(addr,0); if (GET_CODE (base) == REG && REGNO(base) == STACK_POINTER_REGNUM) { if (offset >= -31 && offset <= 0) offset = 31 + offset; else ! abort (); } else ! abort (); fprintf (file, "*(%d)", offset); break; default: ! if( FITS_5_BITS( addr ) ) ! fprintf( file, "*(0x%x)", (INTVAL(addr) & 0x20) ); else ! output_addr_const(file, addr); } } --- 1948,1973 ---- offset = INTVAL(XEXP(addr,0)), base = XEXP(addr,1); else if (GET_CODE (XEXP(addr,1)) == CONST_INT) offset = INTVAL(XEXP(addr,1)), base = XEXP(addr,0); + else + abort(); if (GET_CODE (base) == REG && REGNO(base) == STACK_POINTER_REGNUM) { if (offset >= -31 && offset <= 0) offset = 31 + offset; else ! fatal_error ("invalid offset in ybase addressing"); } else ! fatal_error ("invalid register in ybase addressing"); fprintf (file, "*(%d)", offset); break; default: ! if (FITS_5_BITS (addr)) ! fprintf (file, "*(0x%x)", (INTVAL (addr) & 0x20)); else ! output_addr_const (file, addr); } } *************** static int *** 1764,1780 **** reg_save_size () { int reg_save_size = 0; ! int regno; ! for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) if (dsp16xx_call_saved_register (regno)) { reg_save_size += UNITS_PER_WORD; } return (reg_save_size); } int dsp16xx_starting_frame_offset() { --- 1995,2016 ---- reg_save_size () { int reg_save_size = 0; ! int regno; ! for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) if (dsp16xx_call_saved_register (regno)) { reg_save_size += UNITS_PER_WORD; } + /* If the function makes calls we will save need to save the 'pr' register. */ + if (current_frame_info.function_makes_calls) + reg_save_size += 1; + return (reg_save_size); } + #if 0 int dsp16xx_starting_frame_offset() { *************** dsp16xx_starting_frame_offset() *** 1789,1794 **** --- 2025,2031 ---- return (reg_save_size); } + #endif int initial_frame_pointer_offset() *************** initial_frame_pointer_offset() *** 1805,1811 **** } /* Generate the minimum number of 1600 core shift instructions ! to shift by 'shift_amount'. */ #if 0 void --- 2042,2048 ---- } /* Generate the minimum number of 1600 core shift instructions ! to shift by 'shift_amount'. */ #if 0 void *************** emit_1600_core_shift (shift_op, operands *** 1900,1906 **** shift_asm_ptr_first = lshift_right_asm_first; } else ! abort (); while (shift_amount != 0) { --- 2137,2143 ---- shift_asm_ptr_first = lshift_right_asm_first; } else ! fatal_error ("invalid shift operator in emit_1600_core_shift"); while (shift_amount != 0) { *************** emit_1600_core_shift (shift_op, operands *** 1943,1948 **** --- 2180,2236 ---- } } #endif + + int + num_1600_core_shifts (shift_amount) + int shift_amount; + { + int quotient; + int i; + int first_shift_emitted = 0; + int num_shifts = 0; + + while (shift_amount != 0) + { + if (shift_amount/16) + { + quotient = shift_amount/16; + shift_amount = shift_amount - (quotient * 16); + for (i = 0; i < quotient; i++) + num_shifts++; + first_shift_emitted = 1; + } + else if (shift_amount/8) + { + quotient = shift_amount/8; + shift_amount = shift_amount - (quotient * 8); + for (i = 0; i < quotient; i++) + num_shifts++; + + first_shift_emitted = 1; + } + else if (shift_amount/4) + { + quotient = shift_amount/4; + shift_amount = shift_amount - (quotient * 4); + for (i = 0; i < quotient; i++) + num_shifts++; + + first_shift_emitted = 1; + } + else if (shift_amount/1) + { + quotient = shift_amount/1; + shift_amount = shift_amount - (quotient * 1); + for (i = 0; i < quotient; i++) + num_shifts++; + + first_shift_emitted = 1; + } + } + return num_shifts; + } + void asm_output_common(file, name, size, rounded) FILE *file; *************** asm_output_local(file, name, size, round *** 1976,2019 **** fprintf (file, "int\n"); } - void - asm_output_float (file, fp_const) - FILE *file; - double fp_const; - { - #if HOST_FLOAT_FORMAT == TARGET_FLOAT_FORMAT - REAL_VALUE_TYPE d = fp_const; - long value; - - REAL_VALUE_TO_TARGET_SINGLE (d, value); - fputs ("\tint ", file); - #ifdef WORDS_BIG_ENDIAN - fprintf (file, "0x%-4.4lx, 0x%-4.4lx", (value >> 16) & 0xffff, - value & 0xffff); - #else - fprintf (file, "0x%-4.4lx, 0x%-4.4lx", value & 0xffff, - (value >> 16) & 0xffff); - #endif - fputs ("\n", file); - #else - fatal_error ("inline float constants not supported on this host"); - #endif - } - - void - asm_output_long (file, value) - FILE *file; - long value; - { - fputs ("\tint ", file); - #ifdef WORDS_BIG_ENDIAN - fprintf (file, "0x%-4.4lx, 0x%-4.4lx", (value >> 16) & 0xffff, (value & 0xffff)); - #else - fprintf (file, "0x%-4.4lx, 0x%-4.4lx", (value & 0xffff), (value >> 16) & 0xffff); - #endif - fputs ("\n", file); - } - int dsp16xx_address_cost (addr) rtx addr; --- 2264,2269 ---- *************** dsp16xx_address_cost (addr) *** 2098,2112 **** On the dsp1610 the first four words of args are normally in registers and the rest are pushed. If we a long or on float mode, the argument ! must begin on a even register boundary Note that FUNCTION_ARG and FUNCTION_INCOMING_ARG were different. For structures that are passed in memory, but could have been passed in registers, we first load the structure into the register, and then when the last argument is passed, we store the registers into the stack locations. This fixes some bugs ! where GCC did not expect to have register arguments, followed */ ! struct rtx_def * dsp16xx_function_arg (args_so_far, mode, type, named) --- 2348,2361 ---- On the dsp1610 the first four words of args are normally in registers and the rest are pushed. If we a long or on float mode, the argument ! must begin on an even register boundary Note that FUNCTION_ARG and FUNCTION_INCOMING_ARG were different. For structures that are passed in memory, but could have been passed in registers, we first load the structure into the register, and then when the last argument is passed, we store the registers into the stack locations. This fixes some bugs ! where GCC did not expect to have register arguments, followed. */ struct rtx_def * dsp16xx_function_arg (args_so_far, mode, type, named) *************** dsp16xx_function_arg (args_so_far, mode, *** 2121,2126 **** --- 2370,2378 ---- && (mode == HImode || GET_MODE_CLASS(mode) == MODE_FLOAT)) args_so_far++; + if (type == void_type_node) + return (struct rtx_def *) 0; + if (named && args_so_far < 4 && !MUST_PASS_IN_STACK (mode,type)) return gen_rtx_REG (mode, args_so_far + FIRST_REG_FOR_FUNCTION_ARG); else *************** dsp16xx_function_arg_advance (cum, mode, *** 2153,2165 **** } void ! dsp16xx_file_start () { ! fprintf (asm_out_file, "#include <%s.h>\n", save_chip_name); ! #if 0 ! if (TARGET_BMU) ! fprintf (asm_out_file, "#include <1610.h>\n"); #endif } rtx --- 2405,2452 ---- } void ! coff_dsp16xx_file_start (file) ! FILE *file; { ! fprintf (file, "#include <%s.h>\n", save_chip_name); ! } ! ! void ! luxworks_dsp16xx_file_start (file) ! FILE *file; ! { ! char *temp_filename; ! int len, err_code; ! ! ! fprintf (file, "\t.debug "); ! err_code = (TARGET_DEBUG) ? fprintf (file, "yes, ") : fprintf (file, "no, "); ! err_code = (TARGET_SAVE_TEMPS) ? fprintf (file, "asm, ") : fprintf (file, "temp, "); ! len = strlen (main_input_filename); ! temp_filename = (char *) xmalloc (len + 2); ! strcpy (temp_filename, main_input_filename); ! #ifdef __CYGWIN32__ ! p = temp_filename; ! while (*p != '\0') { ! if (*p == '\\') ! *p = '/'; ! p++; ! } #endif + fprintf (file, "\"%s\"\n", temp_filename); + + fprintf (file, "#include <%s.h>\n", save_chip_name); + + /* + * Add dummy sections, so that they always exist in the + * object code. These have been created so that the number and + * type of sections remain consistent with and without -g option. Note + * that the .data, .text, .const and .bss are always created when -g + * is provided as an option. */ + fprintf (file, "\t.rsect \".text\" , nodelete\n"); + fprintf (file, "\t.rsect \".data\" , nodelete\n"); + fprintf (file, "\t.rsect \".const\" , nodelete\n"); + fprintf (file, "\t.rsect \".bss\" , nodelete\n"); } rtx *************** gen_tst_reg (x) *** 2179,2185 **** else if (mode == HImode) emit_insn (gen_rtx_SET (VOIDmode, cc0_rtx, x)); else ! abort (); return cc0_rtx; } --- 2466,2472 ---- else if (mode == HImode) emit_insn (gen_rtx_SET (VOIDmode, cc0_rtx, x)); else ! fatal_error ("invalid mode for gen_tst_reg"); return cc0_rtx; } *************** gen_compare_reg (code, x, y) *** 2193,2199 **** mode = GET_MODE (x); /* For floating point compare insns, a call is generated so don't ! do anything here. */ if (GET_MODE_CLASS (mode) == MODE_FLOAT) return cc0_rtx; --- 2480,2486 ---- mode = GET_MODE (x); /* For floating point compare insns, a call is generated so don't ! do anything here. */ if (GET_MODE_CLASS (mode) == MODE_FLOAT) return cc0_rtx; *************** gen_compare_reg (code, x, y) *** 2230,2257 **** if (code == GTU || code == GEU || code == LTU || code == LEU) { ! #if 1 ! emit_insn (gen_rtx_PARALLEL ! (VOIDmode, gen_rtvec (5, ! gen_rtx_SET (VOIDmode, cc0_rtx, ! gen_rtx_COMPARE (VOIDmode, ! x, y)), ! gen_rtx_CLOBBER (VOIDmode, gen_rtx_SCRATCH (QImode)), ! gen_rtx_CLOBBER (VOIDmode, gen_rtx_SCRATCH (QImode)), ! gen_rtx_CLOBBER (VOIDmode, gen_rtx_SCRATCH (QImode)), ! gen_rtx_CLOBBER (VOIDmode, gen_rtx_SCRATCH (QImode))))); - #else - if (!dsp16xx_ucmphi2_libcall) - dsp16xx_ucmphi2_libcall = gen_rtx_SYMBOL_REF (Pmode, UCMPHI2_LIBCALL); - emit_library_call (dsp16xx_ucmphi2_libcall, 1, HImode, 2, - x, HImode, y, HImode); - emit_insn (gen_tsthi_1 (copy_to_reg(hard_libcall_value (HImode)))); - #endif } else emit_insn (gen_rtx_SET (VOIDmode, cc0_rtx, --- 2517,2535 ---- if (code == GTU || code == GEU || code == LTU || code == LEU) { ! emit_insn (gen_rtx_PARALLEL ! (VOIDmode, gen_rtvec (5, ! gen_rtx_SET (VOIDmode, cc0_rtx, ! gen_rtx_COMPARE (VOIDmode, x, y)), ! gen_rtx_CLOBBER (VOIDmode, gen_rtx_SCRATCH (QImode)), ! gen_rtx_CLOBBER (VOIDmode, gen_rtx_SCRATCH (QImode)), ! gen_rtx_CLOBBER (VOIDmode, gen_rtx_SCRATCH (QImode)), ! gen_rtx_CLOBBER (VOIDmode, gen_rtx_SCRATCH (QImode))))); } else emit_insn (gen_rtx_SET (VOIDmode, cc0_rtx, *************** gen_compare_reg (code, x, y) *** 2260,2266 **** force_reg (HImode,y)))); } else ! abort (); return cc0_rtx; } --- 2538,2544 ---- force_reg (HImode,y)))); } else ! fatal_error ("invalid mode for integer comparison in gen_compare_reg"); return cc0_rtx; } *************** output_block_move (operands) *** 2284,2286 **** --- 2562,2610 ---- fprintf (asm_out_file, "\t}\n"); return ""; } + + int + uns_comparison_operator (op, mode) + rtx op; + enum machine_mode mode; + { + if (mode == VOIDmode || GET_MODE (op) == mode) + { + enum rtx_code code; + + code = GET_CODE(op); + + if (code == LEU || code == LTU || code == GEU + || code == GTU) + { + return 1; + } + else + return 0; + } + + return 0; + } + + int + signed_comparison_operator (op, mode) + rtx op; + enum machine_mode mode; + { + if (mode == VOIDmode || GET_MODE (op) == mode) + { + enum rtx_code code; + + code = GET_CODE(op); + + if (!(code == LEU || code == LTU || code == GEU + || code == GTU)) + { + return 1; + } + else + return 0; + } + + return 0; + } diff -Nrc3pad gcc-3.0.4/gcc/config/dsp16xx/dsp16xx.h gcc-3.1/gcc/config/dsp16xx/dsp16xx.h *** gcc-3.0.4/gcc/config/dsp16xx/dsp16xx.h Mon Apr 16 18:25:47 2001 --- gcc-3.1/gcc/config/dsp16xx/dsp16xx.h Mon Jan 21 06:22:09 2002 *************** *** 1,7 **** /* Definitions of target machine for GNU compiler. AT&T DSP1600. ! Copyright (C) 1994, 1995, 1996, 1997, 1998, 2000, 2001 Free Software Foundation, Inc. ! Contributed by Michael Collison (collison@world.std.com). This file is part of GNU CC. --- 1,7 ---- /* Definitions of target machine for GNU compiler. AT&T DSP1600. ! Copyright (C) 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002 Free Software Foundation, Inc. ! Contributed by Michael Collison (collison@isisinc.net). This file is part of GNU CC. *************** extern struct rtx_def *dsp16xx_lshrhi3_l *** 74,80 **** #ifdef CC1_SPEC #undef CC1_SPEC #endif ! #define CC1_SPEC "" /* Define this as a spec to call the AT&T assembler */ --- 74,82 ---- #ifdef CC1_SPEC #undef CC1_SPEC #endif ! #define CC1_SPEC "%{!O*:-O}" ! ! #define CPP_SPEC "%{!O*:-D__OPTIMIZE__}" /* Define this as a spec to call the AT&T assembler */ *************** extern struct rtx_def *dsp16xx_lshrhi3_l *** 92,104 **** circumstances */ #define LIB_SPEC "-lc" ! /* Specify the startup file to link with. */ #define STARTFILE_SPEC "%{mmap1:m1_crt0.o%s} \ %{mmap2:m2_crt0.o%s} \ %{mmap3:m3_crt0.o%s} \ %{mmap4:m4_crt0.o%s} \ %{!mmap*: %{!ifile*: m4_crt0.o%s} %{ifile*: \ ! %eA -ifile option requires a -map option}}" /* Specify the end file to link with */ --- 94,106 ---- circumstances */ #define LIB_SPEC "-lc" ! /* Specify the startup file to link with. */ #define STARTFILE_SPEC "%{mmap1:m1_crt0.o%s} \ %{mmap2:m2_crt0.o%s} \ %{mmap3:m3_crt0.o%s} \ %{mmap4:m4_crt0.o%s} \ %{!mmap*: %{!ifile*: m4_crt0.o%s} %{ifile*: \ ! %ea -ifile option requires a -map option}}" /* Specify the end file to link with */ *************** extern struct rtx_def *dsp16xx_lshrhi3_l *** 107,132 **** %{mmap3:m3_crtn.o%s} \ %{mmap4:m4_crtn.o%s} \ %{!mmap*: %{!ifile*: m4_crtn.o%s} %{ifile*: \ ! %eA -ifile option requires a -map option}}" /* Tell gcc where to look for the startfile */ ! #define STANDARD_STARTFILE_PREFIX "/d1600/lib" ! /* Tell gcc where to look for its executables */ ! #define STANDARD_EXEC_PREFIX "/d1600/bin" /* Command line options to the AT&T assembler */ ! #define ASM_SPEC "%{v:-V} %{g*:-g}" /* Command line options for the AT&T linker */ ! #define LINK_SPEC "%{v:-V} %{minit:-i} \ ! %{!ifile*:%{mmap1:-ifile m1_deflt.if%s} \ ! %{mmap2:-ifile m2_deflt.if%s} \ ! %{mmap3:-ifile m3_deflt.if%s} \ ! %{mmap4:-ifile m4_deflt.if%s} \ ! %{!mmap*:-ifile m4_deflt.if%s}} \ ! %{ifile*} %{!r:-a}" /* Names to predefine in the preprocessor for this target machine. */ #ifdef __MSDOS__ --- 109,141 ---- %{mmap3:m3_crtn.o%s} \ %{mmap4:m4_crtn.o%s} \ %{!mmap*: %{!ifile*: m4_crtn.o%s} %{ifile*: \ ! %ea -ifile option requires a -map option}}" /* Tell gcc where to look for the startfile */ ! /*#define STANDARD_STARTFILE_PREFIX "/d1600/lib"*/ ! /* Tell gcc where to look for it's executables */ ! /*#define STANDARD_EXEC_PREFIX "/d1600/bin"*/ /* Command line options to the AT&T assembler */ ! #define ASM_SPEC "%{V} %{v:%{!V:-V}} %{g*:-g}" /* Command line options for the AT&T linker */ ! ! #define LINK_SPEC "%{V} %{v:%{!V:-V}} %{minit:-i} \ ! %{!ifile*:%{mmap1:m1_deflt.if%s} \ ! %{mmap2:m2_deflt.if%s} \ ! %{mmap3:m3_deflt.if%s} \ ! %{mmap4:m4_deflt.if%s} \ ! %{!mmap*:m4_deflt.if%s}} \ ! %{ifile*:%*} %{r}" ! ! /* Include path is determined from the environment variable */ ! #define INCLUDE_DEFAULTS \ ! { \ ! { 0, 0, 0 } \ ! } /* Names to predefine in the preprocessor for this target machine. */ #ifdef __MSDOS__ *************** extern int target_flags; *** 145,152 **** #define MASK_NEAR_CALL 0x00000002 /* The call is on the same 4k page */ #define MASK_NEAR_JUMP 0x00000004 /* The jump is on the same 4k page */ #define MASK_BMU 0x00000008 /* Use the 'bmu' shift instructions */ - #define MASK_OPTIMIZE_MEMORY 0x00000010 /* Optimize to conserve memory */ - #define MASK_OPTIMIZE_SPEED 0x00000020 /* Optimize for speed */ #define MASK_MAP1 0x00000040 /* Link with map1 */ #define MASK_MAP2 0x00000080 /* Link with map2 */ #define MASK_MAP3 0x00000100 /* Link with map3 */ --- 154,159 ---- *************** extern int target_flags; *** 154,161 **** #define MASK_YBASE_HIGH 0x00000400 /* The ybase register window starts high */ #define MASK_INIT 0x00000800 /* Have the linker generate tables to initialize data at startup */ - #define MASK_INLINE_MULT 0x00001000 /* Inline 32 bit multiplies */ #define MASK_RESERVE_YBASE 0x00002000 /* Reserved the ybase registers */ /* Compile passing first two args in regs 0 and 1. This exists only to test compiler features that will --- 161,169 ---- #define MASK_YBASE_HIGH 0x00000400 /* The ybase register window starts high */ #define MASK_INIT 0x00000800 /* Have the linker generate tables to initialize data at startup */ #define MASK_RESERVE_YBASE 0x00002000 /* Reserved the ybase registers */ + #define MASK_DEBUG 0x00004000 /* Debugging turned on*/ + #define MASK_SAVE_TEMPS 0x00008000 /* Save temps. option seen */ /* Compile passing first two args in regs 0 and 1. This exists only to test compiler features that will *************** extern int target_flags; *** 174,188 **** #define TARGET_NEAR_JUMP (target_flags & MASK_NEAR_JUMP) /* Generate shift instructions to use the 1610 Bit Manipulation ! Unit. */ #define TARGET_BMU (target_flags & MASK_BMU) - /* Optimize to conserve memory */ - #define TARGET_OPTIMIZE_MEMORY (target_flags & MASK_OPTIMIZE_MEMORY) - - /* Optimize for maximum speed */ - #define TARGET_OPTIMIZE_SPEED (target_flags & MASK_OPTIMIZE_SPEED) - #define TARGET_YBASE_HIGH (target_flags & MASK_YBASE_HIGH) /* Direct the linker to output extra info for initialized data */ --- 182,190 ---- #define TARGET_NEAR_JUMP (target_flags & MASK_NEAR_JUMP) /* Generate shift instructions to use the 1610 Bit Manipulation ! Unit. */ #define TARGET_BMU (target_flags & MASK_BMU) #define TARGET_YBASE_HIGH (target_flags & MASK_YBASE_HIGH) /* Direct the linker to output extra info for initialized data */ *************** extern int target_flags; *** 193,198 **** --- 195,207 ---- /* Reserve the ybase registers *(0) - *(31) */ #define TARGET_RESERVE_YBASE (target_flags & MASK_RESERVE_YBASE) + /* We turn this option on internally after seeing "-g" */ + #define TARGET_DEBUG (target_flags & MASK_DEBUG) + + /* We turn this option on internally after seeing "-save-temps */ + #define TARGET_SAVE_TEMPS (target_flags & MASK_SAVE_TEMPS) + + /* Macro to define tables used to set the flags. This is a list in braces of pairs in braces, each pair being { "NAME", VALUE } *************** extern int target_flags; *** 200,256 **** An empty string NAME is used to identify the default VALUE. */ ! #define TARGET_SWITCHES \ ! { \ ! { "regparm", MASK_REGPARM}, \ ! { "no-regparm", -MASK_REGPARM}, \ ! { "no-near-call", -MASK_NEAR_CALL}, \ ! { "near-jump", MASK_NEAR_JUMP}, \ ! { "no-near-jump", -MASK_NEAR_JUMP}, \ ! { "bmu", MASK_BMU}, \ ! { "no-bmu", -MASK_BMU}, \ ! { "Om", MASK_OPTIMIZE_MEMORY}, \ ! { "Os", MASK_OPTIMIZE_SPEED}, \ ! { "map1", MASK_MAP1}, \ ! { "map2", MASK_MAP2}, \ ! { "map3", MASK_MAP3}, \ ! { "map4", MASK_MAP4}, \ ! { "ybase-high", MASK_YBASE_HIGH}, \ ! { "init", MASK_INIT}, \ ! { "inline-mult", MASK_INLINE_MULT}, \ ! { "reserve-ybase", MASK_RESERVE_YBASE}, \ ! { "", TARGET_DEFAULT} \ } /* Default target_flags if no switches are specified */ #ifndef TARGET_DEFAULT ! #define TARGET_DEFAULT MASK_OPTIMIZE_MEMORY|MASK_REGPARM|MASK_YBASE_HIGH #endif - /* This macro is similar to `TARGET_SWITCHES' but defines names of - command options that have values. Its definition is an - initializer with a subgrouping for each command option. - - Each subgrouping contains a string constant, that defines the - fixed part of the option name, and the address of a variable. - The variable, type `char *', is set to the variable part of the - given option if the fixed part matches. The actual option name - is made by appending `-m' to the specified name. - - Here is an example which defines `-mshort-data-NUMBER'. If the - given option is `-mshort-data-512', the variable `m88k_short_data' - will be set to the string `"512"'. - - extern char *m88k_short_data; - #define TARGET_OPTIONS { { "short-data-", &m88k_short_data } } */ - #define TARGET_OPTIONS \ { \ ! { "text=", &text_seg_name }, \ ! { "data=", &data_seg_name }, \ ! { "bss=", &bss_seg_name }, \ ! { "const=", &const_seg_name }, \ ! { "chip=", &chip_name } \ } /* Sometimes certain combinations of command options do not make sense --- 209,268 ---- An empty string NAME is used to identify the default VALUE. */ ! #define TARGET_SWITCHES \ ! { \ ! { "regparm", MASK_REGPARM, \ ! N_("Pass parameters in registers (default)") }, \ ! { "no-regparm", -MASK_REGPARM, \ ! N_("Don't pass parameters in registers") }, \ ! { "near-call", MASK_NEAR_JUMP, \ ! N_("Generate code for near calls") }, \ ! { "no-near-call", -MASK_NEAR_CALL, \ ! N_("Don't generate code for near calls") }, \ ! { "near-jump", MASK_NEAR_JUMP, \ ! N_("Generate code for near jumps") }, \ ! { "no-near-jump", -MASK_NEAR_JUMP, \ ! N_("Don't generate code for near jumps") }, \ ! { "bmu", MASK_BMU, \ ! N_("Generate code for a bit-manipulation unit") }, \ ! { "no-bmu", -MASK_BMU, \ ! N_("Don't generate code for a bit-manipulation unit") }, \ ! { "map1", MASK_MAP1, \ ! N_("Generate code for memory map1") }, \ ! { "map2", MASK_MAP2, \ ! N_("Generate code for memory map2") }, \ ! { "map3", MASK_MAP3, \ ! N_("Generate code for memory map3") }, \ ! { "map4", MASK_MAP4, \ ! N_("Generate code for memory map4") }, \ ! { "init", MASK_INIT, \ ! N_("Ouput extra code for initialized data") }, \ ! { "reserve-ybase", MASK_RESERVE_YBASE, \ ! N_("Don't let reg. allocator use ybase registers") }, \ ! { "debug", MASK_DEBUG, \ ! N_("Output extra debug info in Luxworks environment") }, \ ! { "save-temporaries", MASK_SAVE_TEMPS, \ ! N_("Save temp. files in Luxworks environment") }, \ ! { "", TARGET_DEFAULT, ""} \ } /* Default target_flags if no switches are specified */ #ifndef TARGET_DEFAULT ! #define TARGET_DEFAULT MASK_REGPARM|MASK_YBASE_HIGH #endif #define TARGET_OPTIONS \ { \ ! { "text=", &text_seg_name, \ ! N_("Specify alternate name for text section") }, \ ! { "data=", &data_seg_name, \ ! N_("Specify alternate name for data section") }, \ ! { "bss=", &bss_seg_name, \ ! N_("Specify alternate name for bss section") }, \ ! { "const=", &const_seg_name, \ ! N_("Specify alternate name for constant section") }, \ ! { "chip=", &chip_name, \ ! N_("Specify alternate name for dsp16xx chip") }, \ } /* Sometimes certain combinations of command options do not make sense *************** extern int target_flags; *** 264,301 **** #define OVERRIDE_OPTIONS override_options () ! #define OPTIMIZATION_OPTIONS(LEVEL,SIZE) \ ! do \ ! { \ ! flag_gnu_linker = FALSE; \ ! \ ! if (SIZE) \ ! { \ ! flag_strength_reduce = FALSE; \ ! flag_inline_functions = FALSE; \ ! } \ ! } \ ! while (0) /* STORAGE LAYOUT */ /* Define if you don't want extended real, but do want to use the software floating point emulator for REAL_ARITHMETIC and ! decimal <-> binary conversion. */ #define REAL_ARITHMETIC /* Define this if most significant bit is lowest numbered in instructions that operate on numbered bit-fields. */ ! #define BITS_BIG_ENDIAN 1 /* Define this if most significant byte of a word is the lowest numbered. We define big-endian, but since the 1600 series cannot address bytes ! it does not matter. */ #define BYTES_BIG_ENDIAN 1 /* Define this if most significant word of a multiword number is numbered. ! For the 1600 we can decide arbitrarily since there are no machine instructions for them. */ #define WORDS_BIG_ENDIAN 1 /* number of bits in an addressable storage unit */ --- 276,316 ---- #define OVERRIDE_OPTIONS override_options () ! #define OPTIMIZATION_OPTIONS(LEVEL,SIZE) \ ! { \ ! flag_gnu_linker = FALSE; \ ! \ ! if (LEVEL >= 2) \ ! { \ ! /* The dsp16xx family has so few registers \ ! * that running the first instruction \ ! * scheduling is bad for reg. allocation \ ! * since it increases lifetimes of pseudos. \ ! * So turn of first scheduling pass. \ ! */ \ ! flag_schedule_insns = FALSE; \ ! } \ ! } /* STORAGE LAYOUT */ /* Define if you don't want extended real, but do want to use the software floating point emulator for REAL_ARITHMETIC and ! decimal <-> binary conversion. */ #define REAL_ARITHMETIC /* Define this if most significant bit is lowest numbered in instructions that operate on numbered bit-fields. */ ! #define BITS_BIG_ENDIAN 0 /* Define this if most significant byte of a word is the lowest numbered. We define big-endian, but since the 1600 series cannot address bytes ! it does not matter. */ #define BYTES_BIG_ENDIAN 1 /* Define this if most significant word of a multiword number is numbered. ! For the 1600 we can decide arbitrarily since there are no machine instructions for them. */ #define WORDS_BIG_ENDIAN 1 /* number of bits in an addressable storage unit */ *************** while (0) *** 307,313 **** But on a machine with 16-bit registers, this would be 16. */ #define BITS_PER_WORD 16 ! /* Maximum number of bits in a word. */ #define MAX_BITS_PER_WORD 16 /* Width of a word, in units (bytes). */ --- 322,328 ---- But on a machine with 16-bit registers, this would be 16. */ #define BITS_PER_WORD 16 ! /* Maximum number of bits in a word. */ #define MAX_BITS_PER_WORD 16 /* Width of a word, in units (bytes). */ *************** while (0) *** 348,354 **** /* An integer expression for the size in bits of the largest integer machine mode that should actually be used. All integer machine modes of this size or smaller can be ! used for structures and unions with the appropriate sizes. */ #define MAX_FIXED_MODE_SIZE 32 /* LAYOUT OF SOURCE LANGUAGE DATA TYPES */ --- 363,369 ---- /* An integer expression for the size in bits of the largest integer machine mode that should actually be used. All integer machine modes of this size or smaller can be ! used for structures and unions with the appropriate sizes. */ #define MAX_FIXED_MODE_SIZE 32 /* LAYOUT OF SOURCE LANGUAGE DATA TYPES */ *************** while (0) *** 363,396 **** #define LONG_DOUBLE_TYPE_SIZE 32 /* An expression whose value is 1 or 0, according to whether the type char should be ! signed or unsigned by default. */ #define DEFAULT_SIGNED_CHAR 1 /* A C expression to determine whether to give an enum type only as many bytes as it takes to represent the range of possible values of that type. A nonzero value means to do that; a zero value means all enum types should be allocated ! like int. */ #define DEFAULT_SHORT_ENUMS 0 /* A C expression for a string describing the name of the data type to use for ! size values. */ ! #define SIZE_TYPE "long unsigned int" ! /* A C expression for a string describing the name of the datat type to use for the result of subtracting two pointers */ ! #define PTRDIFF_TYPE "long int" ! ! #define TARGET_BELL '\a' ! #define TARGET_BS '\b' ! #define TARGET_TAB '\t' ! #define TARGET_NEWLINE '\n' ! #define TARGET_VT '\v' ! #define TARGET_FF '\f' ! #define TARGET_CR '\r' /* REGISTER USAGE. */ --- 378,403 ---- #define LONG_DOUBLE_TYPE_SIZE 32 /* An expression whose value is 1 or 0, according to whether the type char should be ! signed or unsigned by default. */ #define DEFAULT_SIGNED_CHAR 1 /* A C expression to determine whether to give an enum type only as many bytes as it takes to represent the range of possible values of that type. A nonzero value means to do that; a zero value means all enum types should be allocated ! like int. */ #define DEFAULT_SHORT_ENUMS 0 /* A C expression for a string describing the name of the data type to use for ! size values. */ ! #define SIZE_TYPE "unsigned int" ! /* A C expression for a string describing the name of the data type to use for the result of subtracting two pointers */ ! #define PTRDIFF_TYPE "int" /* REGISTER USAGE. */ *************** while (0) *** 416,422 **** We reserve r2 for the Stack Pointer. We specify r3 for the Frame Pointer but allow the compiler ! to omit it when possible since we have so few pointer registers. */ #define REG_A0 0 #define REG_A0L 1 --- 423,429 ---- We reserve r2 for the Stack Pointer. We specify r3 for the Frame Pointer but allow the compiler ! to omit it when possible since we have so few pointer registers. */ #define REG_A0 0 #define REG_A0L 1 *************** while (0) *** 477,489 **** #define REG_YBASE30 56 #define REG_YBASE31 57 ! /* Do we have a accumulator register? */ ! #define IS_ACCUM_REG(REGNO) ((REGNO) >= REG_A0 && (REGNO) <= REG_A1L) #define IS_ACCUM_LOW_REG(REGNO) ((REGNO) == REG_A0L || (REGNO) == REG_A1L) /* Do we have a virtual ybase register */ #define IS_YBASE_REGISTER_WINDOW(REGNO) ((REGNO) >= REG_YBASE0 && (REGNO) <= REG_YBASE31) #define IS_ADDRESS_REGISTER(REGNO) ((REGNO) >= REG_R0 && (REGNO) <= REG_R3) #define FIXED_REGISTERS \ --- 484,500 ---- #define REG_YBASE30 56 #define REG_YBASE31 57 ! /* Do we have an accumulator register? */ ! #define IS_ACCUM_REG(REGNO) IN_RANGE ((REGNO), REG_A0, REG_A1L) #define IS_ACCUM_LOW_REG(REGNO) ((REGNO) == REG_A0L || (REGNO) == REG_A1L) /* Do we have a virtual ybase register */ #define IS_YBASE_REGISTER_WINDOW(REGNO) ((REGNO) >= REG_YBASE0 && (REGNO) <= REG_YBASE31) + #define IS_YBASE_ELIGIBLE_REG(REGNO) (IS_ACCUM_REG (REGNO) || IS_ADDRESS_REGISTER(REGNO) \ + || REGNO == REG_X || REGNO == REG_Y || REGNO == REG_YL \ + || REGNO == REG_PROD || REGNO == REG_PRODL) + #define IS_ADDRESS_REGISTER(REGNO) ((REGNO) >= REG_R0 && (REGNO) <= REG_R3) #define FIXED_REGISTERS \ *************** while (0) *** 492,498 **** 1, \ 0, 0, 0, 0, \ 1, 1, 1, \ ! 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, \ --- 503,509 ---- 1, \ 0, 0, 0, 0, \ 1, 1, 1, \ ! 1, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, \ *************** while (0) *** 510,526 **** bit manipulation registers. */ ! #define CALL_USED_REGISTERS \ ! {1, 1, 1, 1, 0, 1, 1, 1, 1, \ ! 1, 0, 0, 1, 1, 1, 1, \ ! 1, \ ! 0, 0, 1, 1, \ ! 1, 1, 1, \ ! 0, 1, \ ! 0, 0, 0, 0, 0, 0, 0, 0, \ ! 0, 0, 0, 0, 0, 0, 0, 0, \ ! 0, 0, 0, 0, 0, 0, 0, 0, \ ! 0, 0, 0, 0, 0, 0, 0, 0} /* List the order in which to allocate registers. Each register must be listed once, even those in FIXED_REGISTERS. --- 521,537 ---- bit manipulation registers. */ ! #define CALL_USED_REGISTERS \ ! {1, 1, 1, 1, 0, 1, 1, 1, 1, /* 0-8 */ \ ! 1, 0, 0, 1, 1, 1, 1, /* 9-15 */ \ ! 1, /* 16 */ \ ! 0, 0, 1, 1, /* 17-20 */ \ ! 1, 1, 1, /* 21-23 */ \ ! 1, 1, /* 24-25 */ \ ! 0, 0, 0, 0, 0, 0, 0, 0, /* 26-33 */ \ ! 0, 0, 0, 0, 0, 0, 0, 0, /* 34-41 */ \ ! 0, 0, 0, 0, 0, 0, 0, 0, /* 42-49 */ \ ! 0, 0, 0, 0, 0, 0, 0, 0} /* 50-57 */ /* List the order in which to allocate registers. Each register must be listed once, even those in FIXED_REGISTERS. *************** while (0) *** 528,533 **** --- 539,545 ---- We allocate in the following order: */ + #if 0 #define REG_ALLOC_ORDER \ { REG_R0, REG_R1, REG_R2, REG_PROD, REG_Y, REG_X, \ REG_PRODL, REG_YL, REG_AR0, REG_AR1, \ *************** while (0) *** 543,549 **** REG_YBASE20, REG_YBASE21, REG_YBASE22, REG_YBASE23, \ REG_YBASE24, REG_YBASE25, REG_YBASE26, REG_YBASE27, \ REG_YBASE28, REG_YBASE29, REG_YBASE30, REG_YBASE31 } ! /* Zero or more C statements that may conditionally modify two variables `fixed_regs' and `call_used_regs' (both of type `char []') after they have been initialized from the two preceding --- 555,578 ---- REG_YBASE20, REG_YBASE21, REG_YBASE22, REG_YBASE23, \ REG_YBASE24, REG_YBASE25, REG_YBASE26, REG_YBASE27, \ REG_YBASE28, REG_YBASE29, REG_YBASE30, REG_YBASE31 } ! #else ! #define REG_ALLOC_ORDER \ ! { \ ! REG_A0, REG_A0L, REG_A1, REG_A1L, REG_Y, REG_YL, \ ! REG_PROD, \ ! REG_PRODL, REG_R0, REG_J, REG_K, REG_AR2, REG_AR3, \ ! REG_X, REG_R1, REG_R2, REG_RB, REG_AR0, REG_AR1, \ ! REG_YBASE0, REG_YBASE1, REG_YBASE2, REG_YBASE3, \ ! REG_YBASE4, REG_YBASE5, REG_YBASE6, REG_YBASE7, \ ! REG_YBASE8, REG_YBASE9, REG_YBASE10, REG_YBASE11, \ ! REG_YBASE12, REG_YBASE13, REG_YBASE14, REG_YBASE15, \ ! REG_YBASE16, REG_YBASE17, REG_YBASE18, REG_YBASE19, \ ! REG_YBASE20, REG_YBASE21, REG_YBASE22, REG_YBASE23, \ ! REG_YBASE24, REG_YBASE25, REG_YBASE26, REG_YBASE27, \ ! REG_YBASE28, REG_YBASE29, REG_YBASE30, REG_YBASE31, \ ! REG_R3, REG_YBASE, REG_PT, REG_C0, REG_C1, REG_C2, \ ! REG_PR } ! #endif /* Zero or more C statements that may conditionally modify two variables `fixed_regs' and `call_used_regs' (both of type `char []') after they have been initialized from the two preceding *************** while (0) *** 598,609 **** /* Return number of consecutive hard regs needed starting at reg REGNO to hold something of mode MODE. This is ordinarily the length in words of a value of mode MODE ! but can be less for certain modes in special long registers. */ #define HARD_REGNO_NREGS(REGNO, MODE) \ (GET_MODE_SIZE(MODE)) ! /* Value is 1 if hard register REGNO can hold a value of machine-mode MODE. */ #define HARD_REGNO_MODE_OK(REGNO, MODE) hard_regno_mode_ok(REGNO, MODE) --- 627,638 ---- /* Return number of consecutive hard regs needed starting at reg REGNO to hold something of mode MODE. This is ordinarily the length in words of a value of mode MODE ! but can be less for certain modes in special long registers. */ #define HARD_REGNO_NREGS(REGNO, MODE) \ (GET_MODE_SIZE(MODE)) ! /* Value is 1 if hard register REGNO can hold a value of machine-mode MODE. */ #define HARD_REGNO_MODE_OK(REGNO, MODE) hard_regno_mode_ok(REGNO, MODE) *************** enum reg_class *** 743,749 **** #define N_REG_CLASSES (int) LIM_REG_CLASSES ! /* Give names of register classes as strings for dump file. */ #define REG_CLASS_NAMES \ { \ --- 772,778 ---- #define N_REG_CLASSES (int) LIM_REG_CLASSES ! /* Give names of register classes as strings for dump file. */ #define REG_CLASS_NAMES \ { \ *************** enum reg_class *** 900,906 **** #define INDEX_REG_CLASS NO_REGS #define BASE_REG_CLASS Y_ADDR_REGS ! /* Get reg_class from a letter such as appears in the machine description. */ #define REG_CLASS_FROM_LETTER(C) \ dsp16xx_reg_class_from_letter(C) --- 929,935 ---- #define INDEX_REG_CLASS NO_REGS #define BASE_REG_CLASS Y_ADDR_REGS ! /* Get reg_class from a letter such as appears in the machine description. */ #define REG_CLASS_FROM_LETTER(C) \ dsp16xx_reg_class_from_letter(C) *************** enum reg_class *** 910,916 **** /* When defined, the compiler allows registers explicitly used in the rtl to be used as spill registers but prevents the compiler from ! extending the lifetime of these registers. */ #define SMALL_REGISTER_CLASSES 1 --- 939,945 ---- /* When defined, the compiler allows registers explicitly used in the rtl to be used as spill registers but prevents the compiler from ! extending the lifetime of these registers. */ #define SMALL_REGISTER_CLASSES 1 *************** enum reg_class *** 966,972 **** smaller class. Don't define this macro unless the target machine has limitations ! which require the macro to do something nontrivial. */ #if 0 #define LIMIT_RELOAD_CLASS(MODE, CLASS) dsp16xx_limit_reload_class (MODE, CLASS) --- 995,1001 ---- smaller class. Don't define this macro unless the target machine has limitations ! which require the macro to do something nontrivial. */ #if 0 #define LIMIT_RELOAD_CLASS(MODE, CLASS) dsp16xx_limit_reload_class (MODE, CLASS) *************** enum reg_class *** 987,1009 **** 'I' requires a non-negative 16-bit value. 'J' requires a non-negative 9-bit value 'K' requires a constant 0 operand. ! 'L' requires 16-bit value 'M' 32-bit value -- low 16-bits zero */ #define SMALL_INT(X) (SMALL_INTVAL (INTVAL (X))) #define SMALL_INTVAL(I) ((unsigned) (I) < 0x10000) #define SHORT_IMMEDIATE(X) (SHORT_INTVAL (INTVAL(X))) #define SHORT_INTVAL(I) ((unsigned) (I) < 0x100) #define CONST_OK_FOR_LETTER_P(VALUE, C) \ ((C) == 'I' ? (SMALL_INTVAL(VALUE)) \ : (C) == 'J' ? (SHORT_INTVAL(VALUE)) \ : (C) == 'K' ? ((VALUE) == 0) \ ! : (C) == 'L' ? ! ((VALUE) & ~0x0000ffff) \ ! : (C) == 'M' ? ! ((VALUE) & ~0xffff0000) \ ! : (C) == 'N' ? ((VALUE) == -1 || (VALUE) == 1 || \ ! (VALUE) == -2 || (VALUE) == 2) \ : 0) #define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) 1 --- 1016,1047 ---- 'I' requires a non-negative 16-bit value. 'J' requires a non-negative 9-bit value 'K' requires a constant 0 operand. ! 'L' constant for use in add or sub from low 16-bits 'M' 32-bit value -- low 16-bits zero + 'N' constant for use incrementing or decrementing an address register + 'O' constant for use with and'ing only high 16-bit + 'P' constant for use with and'ing only low 16-bit */ #define SMALL_INT(X) (SMALL_INTVAL (INTVAL (X))) #define SMALL_INTVAL(I) ((unsigned) (I) < 0x10000) #define SHORT_IMMEDIATE(X) (SHORT_INTVAL (INTVAL(X))) #define SHORT_INTVAL(I) ((unsigned) (I) < 0x100) + #define ADD_LOW_16(I) ((I) >= 0 && (I) <= 32767) + #define ADD_HIGH_16(I) (((I) & 0x0000ffff) == 0) + #define AND_LOW_16(I) ((I) >= 0 && (I) <= 32767) + #define AND_HIGH_16(I) (((I) & 0x0000ffff) == 0) #define CONST_OK_FOR_LETTER_P(VALUE, C) \ ((C) == 'I' ? (SMALL_INTVAL(VALUE)) \ : (C) == 'J' ? (SHORT_INTVAL(VALUE)) \ : (C) == 'K' ? ((VALUE) == 0) \ ! : (C) == 'L' ? ((VALUE) >= 0 && (VALUE) <= 32767) \ ! : (C) == 'M' ? (((VALUE) & 0x0000ffff) == 0) \ ! : (C) == 'N' ? ((VALUE) == -1 || (VALUE) == 1 \ ! || (VALUE) == -2 || (VALUE) == 2) \ ! : (C) == 'O' ? (((VALUE) & 0xffff0000) == 0xffff0000) \ ! : (C) == 'P' ? (((VALUE) & 0x0000ffff) == 0xffff) \ : 0) #define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) 1 *************** enum reg_class *** 1030,1036 **** /* We use post decrement on the 1600 because there isn't a pre-decrement addressing mode. This means that we assume the stack pointer always points at the next ! FREE location on the stack. */ #define STACK_PUSH_CODE POST_INC /* Offset within stack frame to start allocating local variables at. --- 1068,1074 ---- /* We use post decrement on the 1600 because there isn't a pre-decrement addressing mode. This means that we assume the stack pointer always points at the next ! FREE location on the stack. */ #define STACK_PUSH_CODE POST_INC /* Offset within stack frame to start allocating local variables at. *************** enum reg_class *** 1040,1046 **** #define STARTING_FRAME_OFFSET 0 /* Offset from the stack pointer register to the first ! location at which outgoing arguments are placed. */ #define STACK_POINTER_OFFSET (0) struct dsp16xx_frame_info --- 1078,1084 ---- #define STARTING_FRAME_OFFSET 0 /* Offset from the stack pointer register to the first ! location at which outgoing arguments are placed. */ #define STACK_POINTER_OFFSET (0) struct dsp16xx_frame_info *************** struct dsp16xx_frame_info *** 1052,1057 **** --- 1090,1096 ---- unsigned int reg_size; /* # bytes needed to store regs */ long fp_save_offset; /* offset from vfp to store registers */ unsigned long sp_save_offset; /* offset from new sp to store registers */ + int pr_save_offset; /* offset to saved PR */ int initialized; /* != 0 if frame size already calculated */ int num_regs; /* number of registers saved */ int function_makes_calls; /* Does the function make calls */ *************** struct dsp16xx_frame_info *** 1059,1066 **** extern struct dsp16xx_frame_info current_frame_info; /* If we generate an insn to push BYTES bytes, ! this says how many the stack pointer really advances by. */ /* #define PUSH_ROUNDING(BYTES) ((BYTES)) */ /* If defined, the maximum amount of space required for outgoing --- 1098,1107 ---- extern struct dsp16xx_frame_info current_frame_info; + #define RETURN_ADDR_OFF current_frame_info.pr_save_offset + /* If we generate an insn to push BYTES bytes, ! this says how many the stack pointer really advances by. */ /* #define PUSH_ROUNDING(BYTES) ((BYTES)) */ /* If defined, the maximum amount of space required for outgoing *************** extern struct dsp16xx_frame_info current *** 1070,1080 **** increase the stack frame size by this amount. It is not proper to define both 'PUSH_ROUNDING' and ! 'ACCUMULATE_OUTGOING_ARGS'. */ #define ACCUMULATE_OUTGOING_ARGS 1 /* Offset of first parameter from the argument pointer ! register value. */ #define FIRST_PARM_OFFSET(FNDECL) (0) --- 1111,1121 ---- increase the stack frame size by this amount. It is not proper to define both 'PUSH_ROUNDING' and ! 'ACCUMULATE_OUTGOING_ARGS'. */ #define ACCUMULATE_OUTGOING_ARGS 1 /* Offset of first parameter from the argument pointer ! register value. */ #define FIRST_PARM_OFFSET(FNDECL) (0) *************** extern struct dsp16xx_frame_info current *** 1082,1088 **** pops the arguments described by the number-of-args field in the call. FUNDECL is the declaration node of the function (as a tree), FUNTYPE is the data type of the function (as a tree), ! or for a library call it is an identifier node for the subroutine name. */ #define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) 0 --- 1123,1129 ---- pops the arguments described by the number-of-args field in the call. FUNDECL is the declaration node of the function (as a tree), FUNTYPE is the data type of the function (as a tree), ! or for a library call it is an identifier node for the subroutine name. */ #define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) 0 *************** extern struct dsp16xx_frame_info current *** 1091,1097 **** If the precise function being called is known, FUNC is its FUNCTION_DECL; otherwise, FUNC is 0. On the 1610 all function return their values in a0 (i.e. the upper 16 bits). If the return value is 32-bits the ! entire register is significant. */ #define VALUE_REGNO(MODE) (REG_Y) --- 1132,1138 ---- If the precise function being called is known, FUNC is its FUNCTION_DECL; otherwise, FUNC is 0. On the 1610 all function return their values in a0 (i.e. the upper 16 bits). If the return value is 32-bits the ! entire register is significant. */ #define VALUE_REGNO(MODE) (REG_Y) *************** extern struct dsp16xx_frame_info current *** 1102,1108 **** assuming the value has mode MODE. */ #define LIBCALL_VALUE(MODE) gen_rtx_REG (MODE, VALUE_REGNO(MODE)) ! /* 1 if N is a possible register number for a function value. */ #define FUNCTION_VALUE_REGNO_P(N) ((N) == REG_Y) --- 1143,1149 ---- assuming the value has mode MODE. */ #define LIBCALL_VALUE(MODE) gen_rtx_REG (MODE, VALUE_REGNO(MODE)) ! /* 1 if N is a possible register number for a function value. */ #define FUNCTION_VALUE_REGNO_P(N) ((N) == REG_Y) *************** extern struct dsp16xx_frame_info current *** 1120,1126 **** (otherwise it is an extra parameter matching an ellipsis). */ /* On the 1610 all args are pushed, except if -mregparm is specified ! then the first two words of arguments are passed in a0, a1. */ #define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \ dsp16xx_function_arg (CUM, MODE, TYPE, NAMED) --- 1161,1167 ---- (otherwise it is an extra parameter matching an ellipsis). */ /* On the 1610 all args are pushed, except if -mregparm is specified ! then the first two words of arguments are passed in a0, a1. */ #define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \ dsp16xx_function_arg (CUM, MODE, TYPE, NAMED) *************** extern struct dsp16xx_frame_info current *** 1130,1136 **** /* Define the profitability of saving registers around calls. NOTE: For now we turn this off because of a bug in the caller-saves code and also because i'm not sure it is helpful ! on the 1610. */ #define CALLER_SAVE_PROFITABLE(REFS,CALLS) 0 --- 1171,1177 ---- /* Define the profitability of saving registers around calls. NOTE: For now we turn this off because of a bug in the caller-saves code and also because i'm not sure it is helpful ! on the 1610. */ #define CALLER_SAVE_PROFITABLE(REFS,CALLS) 0 *************** extern struct dsp16xx_frame_info current *** 1152,1163 **** during the scan of that argument list. This data type should hold all necessary information about the function itself and about the args processed so far, enough to enable macros ! such as FUNCTION_ARG to determine where the next arg should go. */ #define CUMULATIVE_ARGS int /* Initialize a variable CUM of type CUMULATIVE_ARGS for a call to a function whose data type is FNTYPE. ! For a library call, FNTYPE is 0. */ #define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT) ((CUM) = 0) /* Update the data in CUM to advance over an argument --- 1193,1204 ---- during the scan of that argument list. This data type should hold all necessary information about the function itself and about the args processed so far, enough to enable macros ! such as FUNCTION_ARG to determine where the next arg should go. */ #define CUMULATIVE_ARGS int /* Initialize a variable CUM of type CUMULATIVE_ARGS for a call to a function whose data type is FNTYPE. ! For a library call, FNTYPE is 0. */ #define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT) ((CUM) = 0) /* Update the data in CUM to advance over an argument *************** extern struct dsp16xx_frame_info current *** 1167,1201 **** #define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \ dsp16xx_function_arg_advance (&CUM, MODE,TYPE, NAMED) ! /* 1 if N is a possible register number for function argument passing. */ #define FUNCTION_ARG_REGNO_P(N) \ ((N) == REG_Y || (N) == REG_YL || (N) == REG_PROD || (N) == REG_PRODL) - /* This macro generates the assembly code for function entry. - FILE is a stdio stream to output the code to. - SIZE is an int: how many units of temporary storage to allocate. - Refer to the array `regs_ever_live' to determine which registers - to save; `regs_ever_live[I]' is nonzero if register number I - is ever used in the function. This macro is responsible for - knowing which registers should not be saved even if used. */ - - #define FUNCTION_PROLOGUE(FILE, SIZE) function_prologue(FILE, SIZE) - /* Output assembler code to FILE to increment profiler label # LABELNO ! for profiling a function entry. */ #define FUNCTION_PROFILER(FILE, LABELNO) \ ! internal_error ("Profiling not implemented yet.") /* Output assembler code to FILE to initialize this source file's ! basic block profiling info, if that has not already been done. */ #define FUNCTION_BLOCK_PROFILER(FILE, LABELNO) \ ! internal_error ("Profiling not implemented yet.") /* Output assembler code to FILE to increment the entry-count for ! the BLOCKNO'th basic block in this source file. */ #define BLOCK_PROFILER(FILE, BLOCKNO) \ ! internal_error ("Profiling not implemented yet.") /* EXIT_IGNORE_STACK should be nonzero if, when returning from a function, --- 1208,1232 ---- #define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \ dsp16xx_function_arg_advance (&CUM, MODE,TYPE, NAMED) ! /* 1 if N is a possible register number for function argument passing. */ #define FUNCTION_ARG_REGNO_P(N) \ ((N) == REG_Y || (N) == REG_YL || (N) == REG_PROD || (N) == REG_PRODL) /* Output assembler code to FILE to increment profiler label # LABELNO ! for profiling a function entry. */ #define FUNCTION_PROFILER(FILE, LABELNO) \ ! internal_error ("profiling not implemented yet") /* Output assembler code to FILE to initialize this source file's ! basic block profiling info, if that has not already been done. */ #define FUNCTION_BLOCK_PROFILER(FILE, LABELNO) \ ! internal_error ("profiling not implemented yet") /* Output assembler code to FILE to increment the entry-count for ! the BLOCKNO'th basic block in this source file. */ #define BLOCK_PROFILER(FILE, BLOCKNO) \ ! internal_error ("profiling not implemented yet") /* EXIT_IGNORE_STACK should be nonzero if, when returning from a function, *************** extern struct dsp16xx_frame_info current *** 1206,1212 **** #define EXIT_IGNORE_STACK (0) #define TRAMPOLINE_TEMPLATE(FILE) \ ! internal_error ("Trampolines not yet implemented"); /* Length in units of the trampoline for entering a nested function. This is a dummy value */ --- 1237,1243 ---- #define EXIT_IGNORE_STACK (0) #define TRAMPOLINE_TEMPLATE(FILE) \ ! internal_error ("trampolines not yet implemented"); /* Length in units of the trampoline for entering a nested function. This is a dummy value */ *************** extern struct dsp16xx_frame_info current *** 1215,1245 **** /* Emit RTL insns to initialize the variable parts of a trampoline. FNADDR is an RTX for the address of the function's pure code. ! CXT is an RTX for the static chain value for the function. */ #define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \ ! internal_error ("Trampolines not yet implemented"); ! ! /* This macro generates the assembly code for function exit, ! on machines that need it. If FUNCTION_EPILOGUE is not defined ! then individual return instructions are generated for each ! return statement. Args are same as for FUNCTION_PROLOGUE. ! ! The function epilogue should not depend on the current stack pointer! ! It should use the frame pointer only. This is mandatory because ! of alloca; we also take advantage of it to omit stack adjustments ! before returning. */ ! ! #define FUNCTION_EPILOGUE(FILE, SIZE) function_epilogue(FILE, SIZE) /* A C expression which is nonzero if a function must have and use a frame pointer. If its value is nonzero the functions will have a ! frame pointer. */ #define FRAME_POINTER_REQUIRED (current_function_calls_alloca) /* A C statement to store in the variable 'DEPTH' the difference between the frame pointer and the stack pointer values immediately ! after the function prologue. */ #define INITIAL_FRAME_POINTER_OFFSET(DEPTH) \ { (DEPTH) = initial_frame_pointer_offset(); \ } --- 1246,1264 ---- /* Emit RTL insns to initialize the variable parts of a trampoline. FNADDR is an RTX for the address of the function's pure code. ! CXT is an RTX for the static chain value for the function. */ #define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \ ! internal_error ("trampolines not yet implemented"); /* A C expression which is nonzero if a function must have and use a frame pointer. If its value is nonzero the functions will have a ! frame pointer. */ #define FRAME_POINTER_REQUIRED (current_function_calls_alloca) /* A C statement to store in the variable 'DEPTH' the difference between the frame pointer and the stack pointer values immediately ! after the function prologue. */ #define INITIAL_FRAME_POINTER_OFFSET(DEPTH) \ { (DEPTH) = initial_frame_pointer_offset(); \ } *************** extern struct dsp16xx_frame_info current *** 1271,1277 **** #define LSHLHI3_LIBCALL "__Emulate_lshlhi3" /* NOT USED */ /* Define this macro if calls to the ANSI C library functions memcpy and ! memset should be generated instead of the BSD function bcopy & bzero. */ #define TARGET_MEM_FUNCTIONS --- 1290,1296 ---- #define LSHLHI3_LIBCALL "__Emulate_lshlhi3" /* NOT USED */ /* Define this macro if calls to the ANSI C library functions memcpy and ! memset should be generated instead of the BSD function bcopy & bzero. */ #define TARGET_MEM_FUNCTIONS *************** extern struct dsp16xx_frame_info current *** 1420,1426 **** /* Store in cc_status the expressions that the condition codes will describe after execution of an instruction whose pattern is EXP. ! Do not alter them if the instruction would not alter the cc's. */ #define NOTICE_UPDATE_CC(EXP, INSN) \ notice_update_cc( (EXP) ) --- 1439,1445 ---- /* Store in cc_status the expressions that the condition codes will describe after execution of an instruction whose pattern is EXP. ! Do not alter them if the instruction would not alter the cc's. */ #define NOTICE_UPDATE_CC(EXP, INSN) \ notice_update_cc( (EXP) ) *************** extern struct dsp16xx_frame_info current *** 1430,1439 **** /* Compute the cost of computing a constant rtl expression RTX whose rtx-code is CODE. The body of this macro is a portion of a switch statement. If the code is computed here, ! return it with a return statement. */ #define CONST_COSTS(RTX,CODE,OUTER_CODE) \ case CONST_INT: \ ! return 0; \ case LABEL_REF: \ case SYMBOL_REF: \ case CONST: \ --- 1449,1458 ---- /* Compute the cost of computing a constant rtl expression RTX whose rtx-code is CODE. The body of this macro is a portion of a switch statement. If the code is computed here, ! return it with a return statement. */ #define CONST_COSTS(RTX,CODE,OUTER_CODE) \ case CONST_INT: \ ! return (unsigned) INTVAL (RTX) < 65536 ? 0 : 2; \ case LABEL_REF: \ case SYMBOL_REF: \ case CONST: \ *************** extern struct dsp16xx_frame_info current *** 1444,1450 **** /* Like CONST_COSTS but applies to nonconstant RTL expressions. This can be used, for example to indicate how costly a multiply ! instruction is. */ #define RTX_COSTS(X,CODE,OUTER_CODE) \ case MEM: \ return GET_MODE (X) == QImode ? COSTS_N_INSNS (2) : \ --- 1463,1469 ---- /* Like CONST_COSTS but applies to nonconstant RTL expressions. This can be used, for example to indicate how costly a multiply ! instruction is. */ #define RTX_COSTS(X,CODE,OUTER_CODE) \ case MEM: \ return GET_MODE (X) == QImode ? COSTS_N_INSNS (2) : \ *************** extern struct dsp16xx_frame_info current *** 1458,1502 **** else \ return COSTS_N_INSNS (38); \ case PLUS: \ - if (GET_MODE_CLASS (GET_MODE (X)) == MODE_INT) \ - { \ - if (GET_CODE (XEXP (X,1)) == CONST_INT) \ - { \ - int number = INTVAL(XEXP (X,1)); \ - if (number == 1) \ - return COSTS_N_INSNS (1); \ - if (INT_FITS_16_BITS(number)) \ - return COSTS_N_INSNS (2); \ - else \ - return COSTS_N_INSNS (4); \ - } \ - return COSTS_N_INSNS (1); \ - } \ - else \ - return COSTS_N_INSNS (38); \ case MINUS: \ if (GET_MODE_CLASS (GET_MODE (X)) == MODE_INT) \ - { \ - if (GET_CODE (XEXP (X,1)) == CONST_INT) \ { \ ! if (INT_FITS_16_BITS(INTVAL(XEXP(X,1)))) \ ! return COSTS_N_INSNS (2); \ ! else \ ! return COSTS_N_INSNS (4); \ } \ - return COSTS_N_INSNS (1); \ - } \ else \ return COSTS_N_INSNS (38); \ case AND: case IOR: case XOR: \ ! if (GET_CODE (XEXP (X,1)) == CONST_INT) \ ! { \ ! if (INT_FITS_16_BITS(INTVAL(XEXP(X,1)))) \ ! return COSTS_N_INSNS (2); \ ! else \ ! return COSTS_N_INSNS (4); \ ! } \ ! return COSTS_N_INSNS (1); \ case NEG: case NOT: \ return COSTS_N_INSNS (1); \ case ASHIFT: \ --- 1477,1497 ---- else \ return COSTS_N_INSNS (38); \ case PLUS: \ case MINUS: \ if (GET_MODE_CLASS (GET_MODE (X)) == MODE_INT) \ { \ ! return (1 + \ ! rtx_cost (XEXP (X, 0), CODE) + \ ! rtx_cost (XEXP (X, 1), CODE)); \ } \ else \ return COSTS_N_INSNS (38); \ + \ case AND: case IOR: case XOR: \ ! return (1 + \ ! rtx_cost (XEXP (X, 0), CODE) + \ ! rtx_cost (XEXP (X, 1), CODE)); \ ! \ case NEG: case NOT: \ return COSTS_N_INSNS (1); \ case ASHIFT: \ *************** extern struct dsp16xx_frame_info current *** 1509,1554 **** number == 16) \ return COSTS_N_INSNS (1); \ else \ return COSTS_N_INSNS (2); \ } \ ! return COSTS_N_INSNS (1); /* An expression giving the cost of an addressing mode that contains ! address. */ #define ADDRESS_COST(ADDR) dsp16xx_address_cost (ADDR) /* A c expression for the cost of moving data from a register in class FROM to one in class TO. The classes are expressed using the enumeration values such as GENERAL_REGS. A value of 2 is ! the default. */ #define REGISTER_MOVE_COST(MODE,FROM,TO) dsp16xx_register_move_cost (FROM, TO) /* A C expression for the cost of moving data of mode MODE between ! a register and memory. A value of 2 is the default. */ #define MEMORY_MOVE_COST(MODE,CLASS,IN) \ (GET_MODE_CLASS(MODE) == MODE_INT && MODE == QImode ? 12 \ : 16) /* A C expression for the cost of a branch instruction. A value of 1 is the default; */ ! #define BRANCH_COST 2 /* Define this because otherwise gcc will try to put the function address ! in any old pseudo register. We can only use pt. */ #define NO_FUNCTION_CSE /* Define this macro as a C expression which is nonzero if accessing less than a word of memory (i.e a char or short) is no faster than accessing a word of memory, i.e if such access require more than one instruction or if ther is no difference in cost between byte and (aligned) word ! loads. */ #define SLOW_BYTE_ACCESS 1 - /* Define this macro if zero-extension (of a char or short to an int) can - be done faster if the destination is a register that is know to be zero. */ - /* #define SLOW_ZERO_EXTEND */ - /* Define this macro if unaligned accesses have a cost many times greater than aligned accesses, for example if they are emulated in a trap handler */ /* define SLOW_UNALIGNED_ACCESS(MODE, ALIGN) */ --- 1504,1553 ---- number == 16) \ return COSTS_N_INSNS (1); \ else \ + { \ + if (TARGET_BMU) \ return COSTS_N_INSNS (2); \ + else \ + return COSTS_N_INSNS (num_1600_core_shifts(number)); \ + } \ } \ ! if (TARGET_BMU) \ ! return COSTS_N_INSNS (1); \ ! else \ ! return COSTS_N_INSNS (15); /* An expression giving the cost of an addressing mode that contains ! address. */ #define ADDRESS_COST(ADDR) dsp16xx_address_cost (ADDR) /* A c expression for the cost of moving data from a register in class FROM to one in class TO. The classes are expressed using the enumeration values such as GENERAL_REGS. A value of 2 is ! the default. */ #define REGISTER_MOVE_COST(MODE,FROM,TO) dsp16xx_register_move_cost (FROM, TO) /* A C expression for the cost of moving data of mode MODE between ! a register and memory. A value of 2 is the default. */ #define MEMORY_MOVE_COST(MODE,CLASS,IN) \ (GET_MODE_CLASS(MODE) == MODE_INT && MODE == QImode ? 12 \ : 16) /* A C expression for the cost of a branch instruction. A value of 1 is the default; */ ! #define BRANCH_COST 1 /* Define this because otherwise gcc will try to put the function address ! in any old pseudo register. We can only use pt. */ #define NO_FUNCTION_CSE /* Define this macro as a C expression which is nonzero if accessing less than a word of memory (i.e a char or short) is no faster than accessing a word of memory, i.e if such access require more than one instruction or if ther is no difference in cost between byte and (aligned) word ! loads. */ #define SLOW_BYTE_ACCESS 1 /* Define this macro if unaligned accesses have a cost many times greater than aligned accesses, for example if they are emulated in a trap handler */ /* define SLOW_UNALIGNED_ACCESS(MODE, ALIGN) */ *************** extern struct dsp16xx_frame_info current *** 1576,1589 **** #define BSS_SECTION_ASM_OP rsect_bss /* We will default to using 1610 if the user doesn't ! specify it. */ #define DEFAULT_CHIP_NAME "1610" /* A list of names for sections other than the standard ones, which are ! 'in_text' and 'in_data' (and .bss if BSS_SECTION_ASM_OP is defined). */ #define EXTRA_SECTIONS in_const #define EXTRA_SECTION_FUNCTIONS \ void \ const_section () \ { \ --- 1575,1589 ---- #define BSS_SECTION_ASM_OP rsect_bss /* We will default to using 1610 if the user doesn't ! specify it. */ #define DEFAULT_CHIP_NAME "1610" /* A list of names for sections other than the standard ones, which are ! 'in_text' and 'in_data' (and .bss if BSS_SECTION_ASM_OP is defined). */ #define EXTRA_SECTIONS in_const #define EXTRA_SECTION_FUNCTIONS \ + extern void const_section PARAMS ((void)); \ void \ const_section () \ { \ *************** const_section () *** 1597,1607 **** /* THE OVERALL FRAMEWORK OF AN ASSEMBLER FILE */ /* Output at beginning of assembler file. */ ! #define ASM_FILE_START(FILE) dsp16xx_file_start () /* A C string constant describing how to begin a comment in the target ! assembler language. */ ! /* define ASM_COMMENT_START */ /* Output to assembler file text saying following lines may contain character constants, extra white space, comments, etc. */ --- 1597,1608 ---- /* THE OVERALL FRAMEWORK OF AN ASSEMBLER FILE */ /* Output at beginning of assembler file. */ ! #define ASM_FILE_START(FILE) coff_dsp16xx_file_start (FILE) /* A C string constant describing how to begin a comment in the target ! assembler language. */ ! #define ASM_COMMENT_START "" ! #define ASM_COMMENT_END "" /* Output to assembler file text saying following lines may contain character constants, extra white space, comments, etc. */ *************** const_section () *** 1613,1645 **** /* OUTPUT OF DATA */ - /* This is how to output an assembler line defining a `double' constant. */ - #define ASM_OUTPUT_DOUBLE(FILE,VALUE) asm_output_float (FILE,VALUE) - - /* This is how to output an assembler line defining a `float' constant. */ - #define ASM_OUTPUT_FLOAT(FILE,VALUE) asm_output_float (FILE, VALUE) - - /* This is how to output an assembler line defining a 'float' constant of - size HFmode. */ - #define ASM_OUTPUT_SHORT_FLOAT(FILE,VALUE) asm_output_float (FILE, VALUE) - - /* This is how to output an assembler line defining an `char' constant. */ - #define ASM_OUTPUT_CHAR(FILE,VALUE) \ - ( fprintf (FILE, "\tint "), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "\n")) - - /* This is how to output an assembler line defining an `short' constant. */ - #define ASM_OUTPUT_SHORT(FILE,EXP) asm_output_long(FILE,INTVAL(EXP)) - - /* This is how to output an assembler line defining a 'int' constant. */ - #define ASM_OUTPUT_INT(FILE, EXP) asm_output_long(FILE,INTVAL(EXP)) - - /* This is how to output an assembler line for a numeric constant byte. */ - #define ASM_OUTPUT_BYTE(FILE,VALUE) \ - fprintf ((FILE), "\tint %ld\n", (long)(VALUE)) - - /* This is how we output a 'c' character string. For the 16xx assembler we have to do it one letter at a time */ --- 1614,1619 ---- *************** const_section () *** 1677,1684 **** The Vax assembler fails to stop reading the escape \ after three digits, so this is the only way we \ can get it to parse the data properly. \ ! if (i < thissize - 1 \ ! && p[i + 1] >= '0' && p[i + 1] <= '9') \ fprintf (asm_out_file, "\'\n\tint \'"); \ */ \ } \ --- 1651,1657 ---- The Vax assembler fails to stop reading the escape \ after three digits, so this is the only way we \ can get it to parse the data properly. \ ! if (i < thissize - 1 && ISDIGIT (p[i + 1])) \ fprintf (asm_out_file, "\'\n\tint \'"); \ */ \ } \ *************** const_section () *** 1701,1707 **** /* Store in OUTPUT a string (made with alloca) containing an assembler-name for a local static variable or function named NAME. LABELNO is an integer which is different for ! each call. */ #define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \ do { \ --- 1674,1680 ---- /* Store in OUTPUT a string (made with alloca) containing an assembler-name for a local static variable or function named NAME. LABELNO is an integer which is different for ! each call. */ #define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \ do { \ *************** const_section () *** 1714,1723 **** (OUTPUT) = (char *) alloca (strlen (NAME) + 11); \ ASM_GENERATE_INTERNAL_LABEL (OUTPUT, temp, LABELNO); \ } while (0) - - #define ASM_OPEN_PAREN "(" - #define ASM_CLOSE_PAREN ")" - /* OUTPUT OF UNINITIALIZED VARIABLES */ --- 1687,1692 ---- *************** const_section () *** 1748,1754 **** /* A C statement to output to the stdio stream any text necessary for declaring the name of an external symbol named name which ! is referenced in this compilation but not defined. */ #define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME) \ { \ --- 1717,1723 ---- /* A C statement to output to the stdio stream any text necessary for declaring the name of an external symbol named name which ! is referenced in this compilation but not defined. */ #define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME) \ { \ *************** const_section () *** 1757,1763 **** fprintf (FILE, "\n"); \ } /* A C statement to output on stream an assembler pseudo-op to ! declare a library function named external. */ #define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, FUN) \ { \ --- 1726,1732 ---- fprintf (FILE, "\n"); \ } /* A C statement to output on stream an assembler pseudo-op to ! declare a library function named external. */ #define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, FUN) \ { \ *************** const_section () *** 1766,1772 **** fprintf (FILE, "\n"); \ } ! /* The prefix to add to user-visible assembler symbols. */ #define USER_LABEL_PREFIX "_" --- 1735,1741 ---- fprintf (FILE, "\n"); \ } ! /* The prefix to add to user-visible assembler symbols. */ #define USER_LABEL_PREFIX "_" *************** const_section () *** 1830,1858 **** #define PRINT_OPERAND(FILE, X, CODE) print_operand(FILE, X, CODE) ! /* Print a memory address as an operand to reference that memory location. */ #define PRINT_OPERAND_ADDRESS(FILE, ADDR) print_operand_address (FILE, ADDR) /* This is how to output an insn to push a register on the stack. It need not be very fast code since it is used only for profiling */ #define ASM_OUTPUT_REG_PUSH(FILE,REGNO) \ ! internal_error ("Profiling not implemented yet."); /* This is how to output an insn to pop a register from the stack. It need not be very fast code since it is used only for profiling */ #define ASM_OUTPUT_REG_POP(FILE,REGNO) \ ! internal_error ("Profiling not implemented yet."); /* OUTPUT OF DISPATCH TABLES */ /* This macro should be provided on machines where the addresses in a dispatch ! table are relative to the table's own address. */ #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ fprintf (FILE, "\tint L%d-L%d\n", VALUE, REL) /* This macro should be provided on machines where the addresses in a dispatch ! table are absolute. */ #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ fprintf (FILE, "\tint L%d\n", VALUE) --- 1799,1827 ---- #define PRINT_OPERAND(FILE, X, CODE) print_operand(FILE, X, CODE) ! /* Print a memory address as an operand to reference that memory location. */ #define PRINT_OPERAND_ADDRESS(FILE, ADDR) print_operand_address (FILE, ADDR) /* This is how to output an insn to push a register on the stack. It need not be very fast code since it is used only for profiling */ #define ASM_OUTPUT_REG_PUSH(FILE,REGNO) \ ! internal_error ("profiling not implemented yet"); /* This is how to output an insn to pop a register from the stack. It need not be very fast code since it is used only for profiling */ #define ASM_OUTPUT_REG_POP(FILE,REGNO) \ ! internal_error ("profiling not implemented yet"); /* OUTPUT OF DISPATCH TABLES */ /* This macro should be provided on machines where the addresses in a dispatch ! table are relative to the table's own address. */ #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ fprintf (FILE, "\tint L%d-L%d\n", VALUE, REL) /* This macro should be provided on machines where the addresses in a dispatch ! table are absolute. */ #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ fprintf (FILE, "\tint L%d\n", VALUE) *************** const_section () *** 1860,1870 **** /* This is how to output an assembler line that says to advance the location counter to a multiple of 2**LOG bytes. We should ! not have to do any alignment since the 1610 is a word machine. */ #define ASM_OUTPUT_ALIGN(FILE,LOG) /* Define this macro if ASM_OUTPUT_SKIP should not be used in the text section ! because it fails to put zero1 in the bytes that are skipped. */ #define ASM_NO_SKIP_IN_TEXT 1 #define ASM_OUTPUT_SKIP(FILE,SIZE) \ --- 1829,1839 ---- /* This is how to output an assembler line that says to advance the location counter to a multiple of 2**LOG bytes. We should ! not have to do any alignment since the 1610 is a word machine. */ #define ASM_OUTPUT_ALIGN(FILE,LOG) /* Define this macro if ASM_OUTPUT_SKIP should not be used in the text section ! because it fails to put zero1 in the bytes that are skipped. */ #define ASM_NO_SKIP_IN_TEXT 1 #define ASM_OUTPUT_SKIP(FILE,SIZE) \ *************** const_section () *** 1872,1888 **** /* CONTROLLING DEBUGGING INFORMATION FORMAT */ ! /* Define this macro if GCC should produce COFF-style debugging output ! for SDB in response to the '-g' option */ ! #define SDB_DEBUGGING_INFO ! ! /* Support generating stabs for the listing file generator */ ! #define DBX_DEBUGGING_INFO ! /* The default format when -g is given is still COFF debug info */ ! #define PREFERRED_DEBUGGING_TYPE SDB_DEBUG - #define DBX_REGISTER_NUMBER(REGNO) (REGNO) /* MISCELLANEOUS PARAMETERS */ --- 1841,1857 ---- /* CONTROLLING DEBUGGING INFORMATION FORMAT */ ! #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG ! #define ASM_OUTPUT_DEF(asm_out_file, LABEL1, LABEL2) \ ! do { \ ! fprintf (asm_out_file, ".alias " ); \ ! ASM_OUTPUT_LABELREF(asm_out_file, LABEL1); \ ! fprintf (asm_out_file, "=" ); \ ! ASM_OUTPUT_LABELREF(asm_out_file, LABEL2); \ ! fprintf (asm_out_file, "\n" ); \ ! } while (0) /* MISCELLANEOUS PARAMETERS */ *************** const_section () *** 1893,1907 **** /* Define as C expression which evaluates to nonzero if the tablejump instruction expects the table to contain offsets from the address of the table. ! Do not define this if the table should contain absolute addresses. */ /* #define CASE_VECTOR_PC_RELATIVE 1 */ - /* Specify the tree operation to be used to convert reals to integers. */ - #define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR - - /* This is the kind of divide that is easiest to do in the general case. */ - #define EASY_DIV_EXPR TRUNC_DIV_EXPR - /* Max number of bytes we can move from memory to memory in one reasonably fast instruction. */ #define MOVE_MAX 1 --- 1862,1870 ---- /* Define as C expression which evaluates to nonzero if the tablejump instruction expects the table to contain offsets from the address of the table. ! Do not define this if the table should contain absolute addresses. */ /* #define CASE_VECTOR_PC_RELATIVE 1 */ /* Max number of bytes we can move from memory to memory in one reasonably fast instruction. */ #define MOVE_MAX 1 *************** const_section () *** 1910,1916 **** or bitwise 'and' instruction that truncates the count of a shift operation to a width equal to the number of bits needed to represent the size of the object being shifted. Do not define this macro unless the truncation applies ! to both shift operations and bit-field operations (if any). */ /* #define SHIFT_COUNT_TRUNCATED */ /* Value is 1 if truncating an integer of INPREC bits to OUTPREC bits --- 1873,1879 ---- or bitwise 'and' instruction that truncates the count of a shift operation to a width equal to the number of bits needed to represent the size of the object being shifted. Do not define this macro unless the truncation applies ! to both shift operations and bit-field operations (if any). */ /* #define SHIFT_COUNT_TRUNCATED */ /* Value is 1 if truncating an integer of INPREC bits to OUTPREC bits *************** const_section () *** 1934,1951 **** #define TARGET_VERSION fprintf (stderr, " (%s, %s)", VERSION_INFO1, __DATE__) #endif ! #define VERSION_INFO1 "AT&T DSP16xx C Cross Compiler, version 1.2.0" /* Define this as 1 if `char' should by default be signed; else as 0. */ #define DEFAULT_SIGNED_CHAR 1 - /* If this macro is defined, GNU CC gathers statistics about the number and - kind of tree node it allocates during each run. The option '-fstats' will - tell the compiler to print these statistics about the sizes of it obstacks. */ - #define GATHER_STATISTICS - /* Define this so gcc does not output a call to __main, since we ! are not currently supporting c++. */ #define INIT_SECTION_ASM_OP 1 --- 1897,1909 ---- #define TARGET_VERSION fprintf (stderr, " (%s, %s)", VERSION_INFO1, __DATE__) #endif ! #define VERSION_INFO1 "Lucent DSP16xx C Cross Compiler, version 1.3.0b" /* Define this as 1 if `char' should by default be signed; else as 0. */ #define DEFAULT_SIGNED_CHAR 1 /* Define this so gcc does not output a call to __main, since we ! are not currently supporting c++. */ #define INIT_SECTION_ASM_OP 1 diff -Nrc3pad gcc-3.0.4/gcc/config/dsp16xx/dsp16xx.md gcc-3.1/gcc/config/dsp16xx/dsp16xx.md *** gcc-3.0.4/gcc/config/dsp16xx/dsp16xx.md Sun Feb 4 22:44:11 2001 --- gcc-3.1/gcc/config/dsp16xx/dsp16xx.md Thu Jan 3 05:04:26 2002 *************** *** 1,6 **** ;;- Machine description for the AT&T DSP1600 for GNU C compiler ! ;; Copyright (C) 1994, 1995, 1997, 1998, 2001 Free Software Foundation, Inc. ! ;; Contributed by Michael Collison (collison@world.std.com). ;; This file is part of GNU CC. --- 1,7 ---- ;;- Machine description for the AT&T DSP1600 for GNU C compiler ! ;; Copyright (C) 1994, 1995, 1997, 1998, 2001, 2002 ! ;; Free Software Foundation, Inc. ! ;; Contributed by Michael Collison (collison@isisinc.net). ;; This file is part of GNU CC. *************** *** 36,50 **** ; Classification of each insn. Some insns of TYPE_BRANCH are multi-word. (define_attr "type" ! "jump,cond_jump,call,load_i,load,move,store,malu,malu_mul,special,f3_alu,f3_alu_i,shift_i,shift,bfield_i,bfield,nop,ld_short_i" (const_string "malu")) ! ; Length in # of instructions of each insn. The values are not exact, but ! ; are safe. ! (define_attr "length" "" ! (cond [(eq_attr "type" "cond_jump,f3_alu_i,shift_i,bfield_i,load_i") ! (const_int 2)] ! (const_int 1))) ;; .................... --- 37,61 ---- ; Classification of each insn. Some insns of TYPE_BRANCH are multi-word. (define_attr "type" ! "jump,cond_jump,call,load_i,load,move,store,malu,malu_mul,tstqi,special,special_2,f3_alu,f3_alu_i,f3_alu_i_mult,shift_i,shift,shift_multiple,shift_i_multiple,bfield_i,bfield,nop,ld_short_i,data_move,data_move_i,data_move_memory,data_move_memory_2,data_move_short_i,data_move_multiple,data_move_2,nothing" (const_string "malu")) ! ;; Data arithmetic unit ! (define_function_unit "dau" 1 1 (eq_attr "type" "data_move,data_move_i,f3_alu_i") 2 0) ! ! (define_function_unit "dau" 1 1 (eq_attr "type" "special_2") 3 0) ! ! (define_function_unit "dau" 1 1 (eq_attr "type" "data_move_2") 4 0) ! ! ;; Bit manipulation ! (define_function_unit "bmu" 1 1 (eq_attr "type" "shift_i,shift_i_multiple") 2 0) ! ! (define_function_unit "bmu" 1 1 (eq_attr "type" "shift_multiple") 4 0) ! ! ;; Y-memory addressing arithmetic unit ! (define_function_unit "yaau" 1 1 (eq_attr "type" "data_move_memory") 2 0) ! ! (define_function_unit "yaau" 1 1 (eq_attr "type" "data_move_memory_2") 4 0) ;; .................... *************** *** 84,89 **** --- 95,122 ---- DONE; }") + (define_split + [(set (cc0) + (match_operand:QI 0 "register_operand" "j,q")) + (clobber (match_scratch:QI 1 "=k,u"))] + "reload_completed" + [(set (match_dup 1) + (const_int 0)) + (parallel [(set (cc0) + (match_dup 0)) + (use (match_dup 1))])] + "") + + (define_insn "tstqi_split" + [(set (cc0) + (match_operand:QI 0 "register_operand" "j,q")) + (use (match_scratch:QI 1 "=k,u"))] + "" + "@ + %b0-0 + %b0-0" + [(set_attr "type" "f3_alu_i,f3_alu_i")]) + (define_insn "tstqi_1" [(set (cc0) (match_operand:QI 0 "register_operand" "j,q")) *************** *** 92,98 **** "@ %1=0\;%b0-0 %1=0\;%b0-0" ! [(set_attr "type" "malu,malu")]) ;; --- 125,131 ---- "@ %1=0\;%b0-0 %1=0\;%b0-0" ! [(set_attr "type" "tstqi,tstqi")]) ;; *************** *** 104,111 **** (define_insn "" [(set (cc0) ! (and:HI (match_operand:HI 0 "register_operand" "A,!A,A") ! (match_operand:HI 1 "nonmemory_operand" "Z,A,I")))] "" "* { --- 137,144 ---- (define_insn "" [(set (cc0) ! (and:HI (match_operand:HI 0 "register_operand" "A,!A") ! (match_operand:HI 1 "register_operand" "Z,A")))] "" "* { *************** *** 114,127 **** case 0: case 1: return \"%0&%1\"; - - case 2: - return \"%0&%H1\"; default: ! abort(); } }" ! [(set_attr "type" "f3_alu,malu,f3_alu_i")]) ;;(define_insn "" --- 147,157 ---- case 0: case 1: return \"%0&%1\"; default: ! abort(); } }" ! [(set_attr "type" "f3_alu,f3_alu")]) ;;(define_insn "" *************** *** 178,184 **** else if (IS_YBASE_REGISTER_WINDOW (REGNO (operands[0]))) output_asm_insn (\"a0=%u0\;a0l=%w0\", operands); else ! abort (); } else if (GET_CODE(operands[0]) == CONST_INT) output_asm_insn (\"a0=%U0\;a0l=%H0\", operands); --- 208,214 ---- else if (IS_YBASE_REGISTER_WINDOW (REGNO (operands[0]))) output_asm_insn (\"a0=%u0\;a0l=%w0\", operands); else ! fatal_error (\"Invalid register for compare\"); } else if (GET_CODE(operands[0]) == CONST_INT) output_asm_insn (\"a0=%U0\;a0l=%H0\", operands); *************** *** 198,204 **** else if (IS_YBASE_REGISTER_WINDOW (REGNO (operands[1]))) output_asm_insn (\"a1=%u1\;a1l=%w1\", operands); else ! abort (); } else if (GET_CODE (operands[1]) == MEM) { --- 228,234 ---- else if (IS_YBASE_REGISTER_WINDOW (REGNO (operands[1]))) output_asm_insn (\"a1=%u1\;a1l=%w1\", operands); else ! fatal_error (\"Invalid register for compare\"); } else if (GET_CODE (operands[1]) == MEM) { *************** *** 243,248 **** --- 273,336 ---- } }") + (define_split + [(set (cc0) + (compare (match_operand:QI 0 "register_operand" "") + (match_operand:QI 1 "register_operand" ""))) + (clobber (match_scratch:QI 2 "")) + (clobber (match_scratch:QI 3 ""))] + "reload_completed && next_cc_user_unsigned (insn)" + [(set (match_dup 2) + (const_int 0)) + (set (match_dup 3) + (const_int 0)) + (parallel [(set (cc0) + (compare (match_dup 0) + (match_dup 1))) + (use (match_dup 2)) + (use (match_dup 3))])] + "") + + (define_split + [(set (cc0) + (compare (match_operand:QI 0 "register_operand" "") + (match_operand:QI 1 "const_int_operand" ""))) + (clobber (match_scratch:QI 2 "")) + (clobber (match_scratch:QI 3 ""))] + "reload_completed && next_cc_user_unsigned (insn)" + [(set (match_dup 2) + (const_int 0)) + (parallel [(set (cc0) + (compare (match_dup 0) + (match_dup 1))) + (use (match_dup 2))])] + "") + + (define_insn "cmpqi_split_unsigned_reg" + [(set (cc0) (compare (match_operand:QI 0 "register_operand" "k,k,!k,u,u,!u") + (match_operand:QI 1 "register_operand" "w,z,u,w,z,k"))) + (use (match_scratch:QI 2 "=j,j,j,q,q,q")) + (use (match_scratch:QI 3 "=v,y,q,v,y,j"))] + "next_cc_user_unsigned (insn)" + "@ + %2-%3 + %2-%3 + %2-%3 + %2-%3 + %2-%3 + %2-%3" + [(set_attr "type" "malu,malu,malu,malu,malu,malu")]) + + (define_insn "cmpqi_split_unsigned_int" + [(set (cc0) (compare (match_operand:QI 0 "register_operand" "k,u") + (match_operand:QI 1 "const_int_operand" "i,i"))) + (use (match_scratch:QI 2 "=j,q"))] + "next_cc_user_unsigned (insn)" + "@ + %0-%H1 + %0-%H1" + [(set_attr "type" "f3_alu_i,f3_alu_i")]) + (define_insn "" [(set (cc0) (compare (match_operand:QI 0 "register_operand" "k,k,!k,k,u,u,!u,u") (match_operand:QI 1 "nonmemory_operand" "w,z,u,i,w,z,k,i"))) *************** *** 259,264 **** --- 347,410 ---- %2=0\;%3=0\;%2-%3 %2=0\;%0-%H1") + (define_split + [(set (cc0) + (compare (match_operand:QI 0 "register_operand" "") + (match_operand:QI 1 "register_operand" ""))) + (clobber (match_scratch:QI 2 "")) + (clobber (match_scratch:QI 3 ""))] + "reload_completed" + [(set (match_dup 2) + (const_int 0)) + (set (match_dup 3) + (const_int 0)) + (parallel [(set (cc0) + (compare (match_dup 0) + (match_dup 1))) + (use (match_dup 2)) + (use (match_dup 3))])] + "") + + (define_split + [(set (cc0) + (compare (match_operand:QI 0 "register_operand" "") + (match_operand:QI 1 "const_int_operand" ""))) + (clobber (match_scratch:QI 2 "")) + (clobber (match_scratch:QI 3 ""))] + "reload_completed" + [(set (match_dup 2) + (const_int 0)) + (parallel [(set (cc0) + (compare (match_dup 0) + (match_dup 1))) + (use (match_dup 2))])] + "") + + (define_insn "cmpqi_split_reg" + [(set (cc0) (compare (match_operand:QI 0 "register_operand" "j,j,!j,q,q,!q") + (match_operand:QI 1 "register_operand" "v,y,q,v,y,j"))) + (use (match_scratch:QI 2 "=k,k,k,u,u,u")) + (use (match_scratch:QI 3 "=w,z,u,w,z,k"))] + "" + "@ + %0-%1 + %0-%1 + %0-%1 + %0-%1 + %0-%1 + %0-%1" + [(set_attr "type" "malu,malu,malu,malu,malu,malu")]) + + + (define_insn "cmpqi_split_int" + [(set (cc0) (compare (match_operand:QI 0 "register_operand" "j,q") + (match_operand:QI 1 "const_int_operand" "i,i"))) + (use (match_scratch:QI 2 "=k,u"))] + "" + "@ + %b0-%H1 + %b0-%H1" + [(set_attr "type" "f3_alu_i,f3_alu_i")]) (define_insn "" [(set (cc0) (compare (match_operand:QI 0 "register_operand" "j,j,!j,j,q,q,!q,q") *************** *** 304,320 **** ;; ;; .................... (define_insn "addhi3" ! [(set (match_operand:HI 0 "register_operand" "=A,A,A") ! (plus:HI (match_operand:HI 1 "register_operand" "%A,A,A") ! (match_operand:HI 2 "nonmemory_operand" "Z,d,i")))] "" "@ %0=%1+%2 %0=%1+%2 %0=%w1+%H2\;%0=%b0+%U2" ! [(set_attr "type" "malu,malu,f3_alu_i")]) (define_insn "" [(set (match_operand:QI 0 "register_operand" "=k,u,!k,!u") --- 450,494 ---- ;; ;; .................... + (define_split + [(set (match_operand:HI 0 "register_operand" "") + (plus:HI (match_operand:HI 1 "register_operand" "") + (match_operand:HI 2 "const_int_operand" "")))] + "reload_completed && !ADD_LOW_16(INTVAL(operands[2])) && + !ADD_HIGH_16(INTVAL(operands[2]))" + [(parallel [(set (match_dup 3) + (plus:QI (match_dup 4) + (match_dup 5))) + (clobber (match_dup 6))]) + + (parallel [(set (match_dup 6) + (plus:QI (match_dup 7) + (match_dup 8))) + (clobber (match_scratch:QI 9 ""))])] + " + { + operands[3] = gen_lowpart(QImode, operands[0]); + operands[4] = gen_lowpart(QImode, operands[1]); + operands[5] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) & 0xffff); + + operands[6] = gen_highpart(QImode, operands[0]); + operands[7] = gen_highpart(QImode, operands[0]); + operands[8] = gen_rtx (CONST_INT, VOIDmode, (((INTVAL (operands[2]) & 0xffff0000) >> 16) & 0xffff)); + }") + (define_insn "addhi3" ! [(set (match_operand:HI 0 "register_operand" "=A,A,A,A,A") ! (plus:HI (match_operand:HI 1 "register_operand" "%A,A,A,A,A") ! (match_operand:HI 2 "nonmemory_operand" "Z,d,L,M,?i")))] "" "@ %0=%1+%2 %0=%1+%2 + %0=%w1+%H2 + %0=%b1+%U2 %0=%w1+%H2\;%0=%b0+%U2" ! [(set_attr "type" "malu,malu,f3_alu_i,f3_alu_i,f3_alu_i")]) (define_insn "" [(set (match_operand:QI 0 "register_operand" "=k,u,!k,!u") *************** *** 354,363 **** (define_insn "match_addqi3" ! [(set (match_operand:QI 0 "register_operand" "=!a,!a,k,u,!k,!u,h,!a") ! (plus:QI (match_operand:QI 1 "register_operand" "0,0,uk,uk,uk,uk,h,0") ! (match_operand:QI 2 "nonmemory_operand" "W,N,wzi,wzi,uk,uk,i,n"))) ! (clobber (match_scratch:QI 3 "=X,X,j,q,j,q,X,W"))] "" "* { --- 528,537 ---- (define_insn "match_addqi3" ! [(set (match_operand:QI 0 "register_operand" "=a,a,k,u,k,u,!k,!u,j,j,q,q") ! (plus:QI (match_operand:QI 1 "register_operand" "0,0,uk,uk,uk,uk,uk,uk,0,q,0,j") ! (match_operand:QI 2 "nonmemory_operand" "W,N,i,i,wz,wz,uk,uk,i,i,i,i"))) ! (clobber (match_scratch:QI 3 "=X,X,j,q,j,q,j,q,X,k,X,u"))] "" "* { *************** *** 380,407 **** case 2: return \"*%0++\;*%0++\"; } case 2: case 3: - if (!CONSTANT_P(operands[2])) - return \"%m0=%m1+%m2\"; - else return \"%m0=%1+%H2\"; case 4: case 5: ! return \"%m0=%m1+%m2\"; - case 6: - return \"%0=%b1+%H2\"; case 7: ! return \"%3=%2\;*%0++%3\"; default: abort(); } ! }") (define_expand "addhf3" [(set (match_operand:HF 0 "register_operand" "") --- 554,587 ---- case 2: return \"*%0++\;*%0++\"; + default: + abort(); } case 2: case 3: return \"%m0=%1+%H2\"; case 4: case 5: ! return \"%m0=%m1+%m2\"; + case 6: case 7: ! return \"%m0=%m1+%m2\"; ! ! case 8: ! case 9: ! case 10: ! case 11: ! return \"%0=%b1+%H2\"; default: abort(); } ! }" ! [(set_attr "type" "data_move_memory,data_move_multiple,f3_alu_i,f3_alu_i,f3_alu,f3_alu,f3_alu,f3_alu,f3_alu_i,f3_alu_i,f3_alu_i,f3_alu_i")]) ! (define_expand "addhf3" [(set (match_operand:HF 0 "register_operand" "") *************** *** 428,449 **** ;; ;; .................... (define_insn "subhi3" ! [(set (match_operand:HI 0 "register_operand" "=A,A,A") ! (minus:HI (match_operand:HI 1 "register_operand" "A,A,A") ! (match_operand:HI 2 "nonmemory_operand" "Z,d,i")))] "" "@ %0=%1-%2 %0=%1-%2 %0=%w1-%H2\;%0=%b0-%U2" ! [(set_attr "type" "malu,malu,f3_alu_i")]) (define_insn "subqi3" ! [(set (match_operand:QI 0 "register_operand" "=?*a,k,u,!k,!u") ! (minus:QI (match_operand:QI 1 "register_operand" "0,uk,uk,uk,uk") ! (match_operand:QI 2 "nonmemory_operand" "n,wzi,wzi,uk,uk"))) ! (clobber (match_scratch:QI 3 "=W,j,q,j,q"))] "" "* { --- 608,658 ---- ;; ;; .................... + (define_split + [(set (match_operand:HI 0 "register_operand" "") + (minus:HI (match_operand:HI 1 "register_operand" "") + (match_operand:HI 2 "const_int_operand" "")))] + "reload_completed && !ADD_LOW_16(INTVAL(operands[2])) && + !ADD_HIGH_16(INTVAL(operands[2]))" + [(parallel [(set (match_dup 3) + (minus:QI (match_dup 4) + (match_dup 5))) + (clobber (match_dup 6))]) + + (parallel [(set (match_dup 6) + (minus:QI (match_dup 7) + (match_dup 8))) + (clobber (match_scratch:QI 9 ""))])] + " + { + operands[3] = gen_lowpart(QImode, operands[0]); + operands[4] = gen_lowpart(QImode, operands[1]); + operands[5] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) & 0xffff); + + operands[6] = gen_highpart(QImode, operands[0]); + operands[7] = gen_highpart(QImode, operands[0]); + operands[8] = gen_rtx (CONST_INT, VOIDmode, (((INTVAL (operands[2]) & 0xffff0000) >> 16) & 0xffff)); + }") + + (define_insn "subhi3" ! [(set (match_operand:HI 0 "register_operand" "=A,A,A,A,A") ! (minus:HI (match_operand:HI 1 "register_operand" "A,A,A,A,A") ! (match_operand:HI 2 "nonmemory_operand" "Z,d,L,M,?i")))] "" "@ %0=%1-%2 %0=%1-%2 + %0=%w1-%H2 + %0=%b1-%U2 %0=%w1-%H2\;%0=%b0-%U2" ! [(set_attr "type" "malu,malu,f3_alu_i,f3_alu_i,f3_alu_i")]) (define_insn "subqi3" ! [(set (match_operand:QI 0 "register_operand" "=a,k,u,k,u,!k,!u,j,j,q,q") ! (minus:QI (match_operand:QI 1 "register_operand" "0,uk,uk,uk,uk,uk,uk,0,q,0,j") ! (match_operand:QI 2 "nonmemory_operand" "N,i,i,wz,wz,uk,uk,i,i,i,i"))) ! (clobber (match_scratch:QI 3 "=X,j,q,j,q,j,q,X,k,X,u"))] "" "* { *************** *** 452,466 **** case 0: switch (INTVAL (operands[2])) { - case 0: - return \"\"; - case 1: return \"*%0--\"; case -1: return \"*%0++\"; ! default: operands[2] = GEN_INT (-INTVAL (operands[2])); --- 661,672 ---- case 0: switch (INTVAL (operands[2])) { case 1: return \"*%0--\"; case -1: return \"*%0++\"; ! default: operands[2] = GEN_INT (-INTVAL (operands[2])); *************** *** 472,489 **** case 1: case 2: - if (!CONSTANT_P(operands[2])) - return \"%m0=%m1-%m2\"; - else return \"%m0=%1-%H2\"; case 3: case 4: return \"%m0=%m1-%m2\"; default: abort(); } ! }") (define_expand "subhf3" [(set (match_operand:HF 0 "register_operand" "") --- 678,701 ---- case 1: case 2: return \"%m0=%1-%H2\"; case 3: case 4: + return \"%m0=%m1-%m2\"; + + case 5: + case 6: return \"%m0=%m1-%m2\"; + + case 7: case 8: + case 9: case 10: + return \"%0=%b1-%H2\"; default: abort(); } ! }" ! [(set_attr "type" "data_move_multiple,f3_alu_i,f3_alu_i,f3_alu,f3_alu,f3_alu,f3_alu,f3_alu_i,f3_alu_i,f3_alu_i,f3_alu_i")]) (define_expand "subhf3" [(set (match_operand:HF 0 "register_operand" "") *************** *** 510,530 **** [(set_attr "type" "special")]) (define_expand "neghf2" ! [(set (match_operand:HF 0 "general_operand" "") ! (neg:HF (match_operand:HF 1 "general_operand" "")))] "" ! " { ! if (!dsp16xx_neghf2_libcall) ! dsp16xx_neghf2_libcall = gen_rtx_SYMBOL_REF (Pmode, NEGHF2_LIBCALL); ! ! emit_library_call (dsp16xx_neghf2_libcall, 1, HFmode, 1, ! operands[1], HFmode); ! emit_move_insn (operands[0], hard_libcall_value(HFmode)); ! DONE; ! }") ;; ;; .................... --- 722,751 ---- [(set_attr "type" "special")]) (define_expand "neghf2" ! [(set (match_operand:HF 0 "register_operand" "") ! (neg:HF (match_operand:HF 1 "register_operand" "")))] "" ! " { ! rtx result; ! rtx target; + { + target = gen_lowpart(HImode, operands[0]); + result = expand_binop (HImode, xor_optab, + gen_lowpart(HImode, operands[1]), + GEN_INT(0x80000000), target, 0, OPTAB_WIDEN); + if (result == 0) + abort (); + if (result != target) + emit_move_insn (result, target); + + /* Make a place for REG_EQUAL. */ + emit_move_insn (operands[0], operands[0]); + DONE; + } + }") ;; ;; .................... *************** *** 566,579 **** "%0=%1*%2" [(set_attr "type" "malu_mul")]) - (define_insn "umulqihi3" - [(set (match_operand:HI 0 "register_operand" "=t") - (mult:HI (zero_extend:HI (match_operand:QI 1 "register_operand" "%x")) - (zero_extend:HI (match_operand:QI 2 "register_operand" "y"))))] - "" - "%0=%1*%2" - [(set_attr "type" "malu_mul")]) - (define_expand "mulhf3" [(set (match_operand:HF 0 "register_operand" "") (mult:HF (match_operand:HF 1 "register_operand" "") --- 787,792 ---- *************** *** 767,860 **** ;; Logical Instructions ;; (define_insn "andhi3" ! [(set (match_operand:HI 0 "register_operand" "=A,A,?A") ! (and:HI (match_operand:HI 1 "register_operand" "%A,!A,A") ! (match_operand:HI 2 "nonmemory_operand" "Z,A,i")))] "" "@ %0=%1&%2 %0=%1&%2 %0=%w1&%H2\;%0=%b0&%U2" ! [(set_attr "type" "f3_alu,f3_alu,f3_alu_i")]) (define_insn "andqi3" ! [(set (match_operand:QI 0 "register_operand" "=k,u,uk,!k,!u,j,q,jq,!j,!q") ! (and:QI (match_operand:QI 1 "register_operand" "uk,uk,uk,uk,uk,jq,jq,jq,jq,jq") ! (match_operand:QI 2 "nonmemory_operand" "wz,wz,i,uk,uk,yv,yv,i,jq,jq"))) ! (clobber (match_scratch:QI 3 "=j,q,X,j,q,k,u,X,k,u"))] ! "" ! "@ %m0=%m1&%m2 %m0=%m1&%m2 - %m0=%1&%H2 %m0=%m1&%m2 %m0=%m1&%m2 %m0=%m1&%m2 %m0=%m1&%m2 %m0=%b1&%H2 %m0=%m1&%m2 ! %m0=%m1&%m2") (define_insn "iorhi3" ! [(set (match_operand:HI 0 "register_operand" "=A,A,A,?A") ! (ior:HI (match_operand:HI 1 "register_operand" "%A,!A,A,A") ! (match_operand:HI 2 "nonmemory_operand" "Z,A,I,i")))] "" "@ %0=%u1|%u2 %0=%u1|%u2 %0=%w1|%H2 %0=%w1|%H2\;%0=%b0|%U2" ! [(set_attr "type" "f3_alu,f3_alu,f3_alu_i,f3_alu_i")]) (define_insn "iorqi3" ! [(set (match_operand:QI 0 "register_operand" "=k,u,uk,!k,!u,j,q,jq,!j,!q") ! (ior:QI (match_operand:QI 1 "register_operand" "uk,uk,uk,uk,uk,jq,jq,jq,jq,jq") ! (match_operand:QI 2 "nonmemory_operand" "wz,wz,i,uk,uk,yv,yv,i,jq,jq"))) ! (clobber (match_scratch:QI 3 "=j,q,X,j,q,k,u,X,k,u"))] ! "" ! "@ %m0=%m1|%m2 %m0=%m1|%m2 - %m0=%1|%H2 %m0=%m1|%m2 %m0=%m1|%m2 %m0=%m1|%m2 %m0=%m1|%m2 %m0=%b1|%H2 %m0=%m1|%m2 ! %m0=%m1|%m2") (define_insn "xorhi3" ! [(set (match_operand:HI 0 "register_operand" "=A,A,A,?A") ! (xor:HI (match_operand:HI 1 "register_operand" "%A,!A,A,A") ! (match_operand:HI 2 "nonmemory_operand" "Z,A,I,i")))] "" "@ %0=%1^%2 %0=%1^%2 %0=%w1^%H2 %0=%w1^%H2\;%0=%b0^%U2" ! [(set_attr "type" "f3_alu,f3_alu,f3_alu_i,f3_alu_i")]) (define_insn "xorqi3" ! [(set (match_operand:QI 0 "register_operand" "=k,u,uk,!k,!u,j,q,jq,!j,!q") ! (xor:QI (match_operand:QI 1 "register_operand" "uk,uk,uk,uk,uk,jq,jq,jq,jq,jq") ! (match_operand:QI 2 "nonmemory_operand" "wz,wz,i,uk,uk,yv,yv,i,jq,jq"))) ! (clobber (match_scratch:QI 3 "=j,q,X,j,q,k,u,X,k,u"))] ! "" ! "@ %m0=%m1^%m2 %m0=%m1^%m2 - %m0=%1^%H2 %m0=%m1^%m2 %m0=%m1^%m2 %m0=%m1^%m2 %m0=%m1^%m2 %m0=%b1^%H2 %m0=%m1^%m2 ! %m0=%m1^%m2") (define_insn "one_cmplhi2" [(set (match_operand:HI 0 "register_operand" "=A") --- 980,1258 ---- ;; Logical Instructions ;; + (define_split + [(set (match_operand:HI 0 "register_operand" "") + (and:HI (match_operand:HI 1 "register_operand" "") + (match_operand:HI 2 "const_int_operand" "")))] + "reload_completed && !AND_LOW_16(INTVAL(operands[2])) && + !AND_HIGH_16(INTVAL(operands[2])) + && (REGNO (operands[0]) == REGNO (operands[1]))" + [(parallel [(set (match_dup 3) + (and:QI (match_dup 4) + (match_dup 5))) + (clobber (match_scratch:QI 6 ""))]) + (parallel [(set (match_dup 7) + (and:QI (match_dup 8) + (match_dup 9))) + (clobber (match_scratch:QI 10 ""))])] + " + { + operands[3] = gen_lowpart(QImode, operands[0]); + operands[4] = gen_lowpart(QImode, operands[1]); + operands[5] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) & 0xffff); + + operands[7] = gen_highpart(QImode, operands[0]); + operands[8] = gen_highpart(QImode, operands[0]); + operands[9] = gen_rtx (CONST_INT, VOIDmode, (((INTVAL (operands[2]) & 0xffff0000) >> 16) & 0xffff)); + }") + + (define_split + [(set (match_operand:HI 0 "register_operand" "") + (and:HI (match_operand:HI 1 "register_operand" "") + (match_operand:HI 2 "const_int_operand" "")))] + "reload_completed && !AND_LOW_16(INTVAL(operands[2])) && + !AND_HIGH_16(INTVAL(operands[2])) + && (REGNO (operands[0]) != REGNO (operands[1]))" + [(parallel [(set (match_dup 3) + (and:QI (match_dup 4) + (match_dup 5))) + (clobber (match_dup 6))]) + (parallel [(set (match_dup 6) + (and:QI (match_dup 7) + (match_dup 8))) + (clobber (match_scratch:QI 9 ""))])] + " + { + operands[3] = gen_lowpart(QImode, operands[0]); + operands[4] = gen_lowpart(QImode, operands[1]); + operands[5] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) & 0xffff); + + operands[6] = gen_highpart(QImode, operands[0]); + operands[7] = gen_highpart(QImode, operands[0]); + operands[8] = gen_rtx (CONST_INT, VOIDmode, (((INTVAL (operands[2]) & 0xffff0000) >> 16) & 0xffff)); + }") + (define_insn "andhi3" ! [(set (match_operand:HI 0 "register_operand" "=A,A,A,A,?A") ! (and:HI (match_operand:HI 1 "register_operand" "%A,!A,A,A,A") ! (match_operand:HI 2 "nonmemory_operand" "Z,A,O,P,i")))] "" "@ %0=%1&%2 %0=%1&%2 + %0=%w1&%H2 + %0=%b1&%U2 %0=%w1&%H2\;%0=%b0&%U2" ! [(set_attr "type" "f3_alu,f3_alu,f3_alu_i,f3_alu_i,f3_alu_i_mult")]) (define_insn "andqi3" ! [(set (match_operand:QI 0 "register_operand" "=k,u,!k,!u,k,u,k,u,j,q,j,q,j,q,!j,!q") ! (and:QI (match_operand:QI 1 "register_operand" "%uk,uk,uk,uk,0,0,u,k,jq,jq,0,0,q,j,jq,jq") ! (match_operand:QI 2 "nonmemory_operand" "wz,wz,uk,uk,i,i,i,i,yv,yv,i,i,i,i,jq,jq"))) ! (clobber (match_scratch:QI 3 "=j,q,j,q,X,X,j,q,k,u,X,X,k,u,k,u"))] ! "" ! "@ %m0=%m1&%m2 %m0=%m1&%m2 %m0=%m1&%m2 %m0=%m1&%m2 + %m0=%1&%H2 + %m0=%1&%H2 + %m0=%1&%H2 + %m0=%1&%H2 %m0=%m1&%m2 %m0=%m1&%m2 %m0=%b1&%H2 + %m0=%b1&%H2 + %m0=%b1&%H2 + %m0=%b1&%H2 %m0=%m1&%m2 ! %m0=%m1&%m2" ! [(set_attr "type" "f3_alu,f3_alu,f3_alu,f3_alu,f3_alu_i,f3_alu_i,f3_alu_i,f3_alu_i,f3_alu,f3_alu,f3_alu_i,f3_alu_i,f3_alu_i,f3_alu_i,f3_alu,f3_alu")]) ! ! ! (define_split ! [(set (match_operand:HI 0 "register_operand" "") ! (ior:HI (match_operand:HI 1 "register_operand" "") ! (match_operand:HI 2 "const_int_operand" "")))] ! "reload_completed && !SMALL_INTVAL(INTVAL(operands[2])) && ! !ADD_HIGH_16(INTVAL(operands[2])) ! && (REGNO (operands[0]) == REGNO (operands[1]))" ! [(parallel [(set (match_dup 3) ! (ior:QI (match_dup 4) ! (match_dup 5))) ! (clobber (match_scratch:QI 6 ""))]) ! (parallel [(set (match_dup 7) ! (ior:QI (match_dup 8) ! (match_dup 9))) ! (clobber (match_scratch:QI 10 ""))])] ! " ! { ! operands[3] = gen_lowpart(QImode, operands[0]); ! operands[4] = gen_lowpart(QImode, operands[1]); ! operands[5] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) & 0xffff); ! ! operands[7] = gen_highpart(QImode, operands[0]); ! operands[8] = gen_highpart(QImode, operands[0]); ! operands[9] = gen_rtx (CONST_INT, VOIDmode, (((INTVAL (operands[2]) & 0xffff0000) >> 16) & 0xffff)); ! }") ! ! (define_split ! [(set (match_operand:HI 0 "register_operand" "") ! (ior:HI (match_operand:HI 1 "register_operand" "") ! (match_operand:HI 2 "const_int_operand" "")))] ! "reload_completed && !SMALL_INTVAL(INTVAL(operands[2])) && ! !ADD_HIGH_16(INTVAL(operands[2])) ! && (REGNO (operands[0]) != REGNO (operands[1]))" ! [(parallel [(set (match_dup 3) ! (ior:QI (match_dup 4) ! (match_dup 5))) ! (clobber (match_dup 6))]) ! (parallel [(set (match_dup 6) ! (ior:QI (match_dup 7) ! (match_dup 8))) ! (clobber (match_scratch:QI 9 ""))])] ! " ! { ! operands[3] = gen_lowpart(QImode, operands[0]); ! operands[4] = gen_lowpart(QImode, operands[1]); ! operands[5] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) & 0xffff); ! ! operands[6] = gen_highpart(QImode, operands[0]); ! operands[7] = gen_highpart(QImode, operands[0]); ! operands[8] = gen_rtx (CONST_INT, VOIDmode, (((INTVAL (operands[2]) & 0xffff0000) >> 16) & 0xffff)); ! }") ! (define_insn "iorhi3" ! [(set (match_operand:HI 0 "register_operand" "=A,A,A,A,?A") ! (ior:HI (match_operand:HI 1 "register_operand" "%A,!A,A,A,A") ! (match_operand:HI 2 "nonmemory_operand" "Z,A,I,M,i")))] "" "@ %0=%u1|%u2 %0=%u1|%u2 %0=%w1|%H2 + %0=%b1|%U2 %0=%w1|%H2\;%0=%b0|%U2" ! [(set_attr "type" "f3_alu,f3_alu,f3_alu_i,f3_alu_i,f3_alu_i_mult")]) (define_insn "iorqi3" ! [(set (match_operand:QI 0 "register_operand" "=k,u,!k,!u,k,u,k,u,j,q,j,q,j,q,!j,!q") ! (ior:QI (match_operand:QI 1 "register_operand" "%uk,uk,uk,uk,0,0,u,k,jq,jq,0,0,q,j,jq,jq") ! (match_operand:QI 2 "nonmemory_operand" "wz,wz,uk,uk,i,i,i,i,yv,yv,i,i,i,i,jq,jq"))) ! (clobber (match_scratch:QI 3 "=j,q,j,q,X,X,j,q,k,u,X,X,k,u,k,u"))] ! "" ! "@ %m0=%m1|%m2 %m0=%m1|%m2 %m0=%m1|%m2 %m0=%m1|%m2 + %m0=%1|%H2 + %m0=%1|%H2 + %m0=%1|%H2 + %m0=%1|%H2 %m0=%m1|%m2 %m0=%m1|%m2 %m0=%b1|%H2 + %m0=%b1|%H2 + %m0=%b1|%H2 + %m0=%b1|%H2 %m0=%m1|%m2 ! %m0=%m1|%m2" ! [(set_attr "type" "f3_alu,f3_alu,f3_alu,f3_alu,f3_alu_i,f3_alu_i,f3_alu_i,f3_alu_i,f3_alu,f3_alu,f3_alu_i,f3_alu_i,f3_alu_i,f3_alu_i,f3_alu,f3_alu")]) ! ! ! ! (define_split ! [(set (match_operand:HI 0 "register_operand" "") ! (xor:HI (match_operand:HI 1 "register_operand" "") ! (match_operand:HI 2 "const_int_operand" "")))] ! "reload_completed && !SMALL_INTVAL(INTVAL(operands[2])) && ! !ADD_HIGH_16(INTVAL(operands[2])) ! && (REGNO (operands[0]) == REGNO (operands[1]))" ! [(parallel [(set (match_dup 3) ! (xor:QI (match_dup 4) ! (match_dup 5))) ! (clobber (match_scratch:QI 6 ""))]) ! (parallel [(set (match_dup 7) ! (xor:QI (match_dup 8) ! (match_dup 9))) ! (clobber (match_scratch:QI 10 ""))])] ! " ! { ! operands[3] = gen_lowpart(QImode, operands[0]); ! operands[4] = gen_lowpart(QImode, operands[1]); ! operands[5] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) & 0xffff); ! ! operands[7] = gen_highpart(QImode, operands[0]); ! operands[8] = gen_highpart(QImode, operands[0]); ! operands[9] = gen_rtx (CONST_INT, VOIDmode, (((INTVAL (operands[2]) & 0xffff0000) >> 16) & 0xffff)); ! }") ! ! (define_split ! [(set (match_operand:HI 0 "register_operand" "") ! (xor:HI (match_operand:HI 1 "register_operand" "") ! (match_operand:HI 2 "const_int_operand" "")))] ! "reload_completed && !SMALL_INTVAL(INTVAL(operands[2])) && ! !ADD_HIGH_16(INTVAL(operands[2])) ! && (REGNO (operands[0]) != REGNO (operands[1]))" ! [(parallel [(set (match_dup 3) ! (xor:QI (match_dup 4) ! (match_dup 5))) ! (clobber (match_dup 6))]) ! (parallel [(set (match_dup 6) ! (xor:QI (match_dup 7) ! (match_dup 8))) ! (clobber (match_scratch:QI 9 ""))])] ! " ! { ! operands[3] = gen_lowpart(QImode, operands[0]); ! operands[4] = gen_lowpart(QImode, operands[1]); ! operands[5] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) & 0xffff); ! ! operands[6] = gen_highpart(QImode, operands[0]); ! operands[7] = gen_highpart(QImode, operands[0]); ! operands[8] = gen_rtx (CONST_INT, VOIDmode, (((INTVAL (operands[2]) & 0xffff0000) >> 16) & 0xffff)); ! }") (define_insn "xorhi3" ! [(set (match_operand:HI 0 "register_operand" "=A,A,A,A,?A") ! (xor:HI (match_operand:HI 1 "register_operand" "%A,!A,A,A,A") ! (match_operand:HI 2 "nonmemory_operand" "Z,A,I,M,i")))] "" "@ %0=%1^%2 %0=%1^%2 %0=%w1^%H2 + %0=%b1^%U2 %0=%w1^%H2\;%0=%b0^%U2" ! [(set_attr "type" "f3_alu,f3_alu,f3_alu_i,f3_alu_i,f3_alu_i_mult")]) (define_insn "xorqi3" ! [(set (match_operand:QI 0 "register_operand" "=k,u,!k,!u,k,u,k,u,j,q,j,q,j,q,!j,!q") ! (xor:QI (match_operand:QI 1 "register_operand" "%uk,uk,uk,uk,0,0,u,k,jq,jq,0,0,q,j,jq,jq") ! (match_operand:QI 2 "nonmemory_operand" "wz,wz,uk,uk,i,i,i,i,yv,yv,i,i,i,i,jq,jq"))) ! (clobber (match_scratch:QI 3 "=j,q,j,q,X,X,j,q,k,u,X,X,k,u,k,u"))] ! "" ! "@ %m0=%m1^%m2 %m0=%m1^%m2 %m0=%m1^%m2 %m0=%m1^%m2 + %m0=%1^%H2 + %m0=%1^%H2 + %m0=%1^%H2 + %m0=%1^%H2 %m0=%m1^%m2 %m0=%m1^%m2 %m0=%b1^%H2 + %m0=%b1^%H2 + %m0=%b1^%H2 + %m0=%b1^%H2 %m0=%m1^%m2 ! %m0=%m1^%m2" ! [(set_attr "type" "f3_alu,f3_alu,f3_alu,f3_alu,f3_alu_i,f3_alu_i,f3_alu_i,f3_alu_i,f3_alu,f3_alu,f3_alu_i,f3_alu_i,f3_alu_i,f3_alu_i,f3_alu,f3_alu")]) (define_insn "one_cmplhi2" [(set (match_operand:HI 0 "register_operand" "=A") *************** *** 863,882 **** "%0= ~%1" [(set_attr "type" "special")]) (define_insn "one_cmplqi2" ! [(set (match_operand:QI 0 "register_operand" "=ku,jq") ! (not:QI (match_operand:QI 1 "register_operand" "ku,jq")))] "" "@ %m0= %1 ^ 0xffff %m0= %b1 ^ 0xffff" ! [(set_attr "type" "special")]) ;; ;; MOVE INSTRUCTIONS ;; (define_expand "movhi" [(set (match_operand:HI 0 "general_operand" "") (match_operand:HI 1 "general_operand" ""))] --- 1261,1381 ---- "%0= ~%1" [(set_attr "type" "special")]) + (define_insn "one_cmplqi2" ! [(set (match_operand:QI 0 "register_operand" "=k,k,u,u,j,j,q,q") ! (not:QI (match_operand:QI 1 "register_operand" "0,u,0,q,0,q,0,j"))) ! (clobber (match_scratch:QI 2 "=X,j,X,q,X,k,X,u"))] "" "@ %m0= %1 ^ 0xffff + %m0= %1 ^ 0xffff + %m0= %1 ^ 0xffff + %m0= %1 ^ 0xffff + %m0= %b1 ^ 0xffff + %m0= %b1 ^ 0xffff + %m0= %b1 ^ 0xffff %m0= %b1 ^ 0xffff" ! [(set_attr "type" "f3_alu_i,f3_alu_i,f3_alu_i,f3_alu_i,f3_alu_i,f3_alu_i,f3_alu_i,f3_alu_i")]) ;; ;; MOVE INSTRUCTIONS ;; + (define_split + [(set (mem:HI (match_operand:QI 0 "register_operand" "")) + (match_operand:HI 1 "register_operand" ""))] + "reload_completed && (operands[0] != stack_pointer_rtx)" + [(set (mem:QI (post_inc:QI (match_dup 0))) + (match_dup 2)) + (set (mem:QI (post_dec:QI (match_dup 0))) + (match_dup 3))] + " + { + operands[2] = gen_highpart(QImode, operands[1]); + operands[3] = gen_lowpart(QImode, operands[1]); + }") + + + (define_split + [(set (match_operand:HI 0 "register_operand" "") + (mem:HI (match_operand:QI 1 "register_operand" "")))] + "reload_completed && (operands[1] != stack_pointer_rtx)" + [(set (match_dup 2) + (mem:QI (post_inc:QI (match_dup 1)))) + (set (match_dup 3) + (mem:QI (post_dec:QI (match_dup 1))))] + " + { + operands[2] = gen_highpart(QImode, operands[0]); + operands[3] = gen_lowpart(QImode, operands[0]); + }") + + (define_split + [(set (mem:HI (post_inc:HI (match_operand:QI 0 "register_operand" ""))) + (match_operand:HI 1 "register_operand" ""))] + "reload_completed" + [(set (mem:QI (post_inc:QI (match_dup 0))) + (match_dup 2)) + (set (mem:QI (post_inc:QI (match_dup 0))) + (match_dup 3))] + " + { + operands[2] = gen_highpart(QImode, operands[1]); + operands[3] = gen_lowpart(QImode, operands[1]); + }") + + (define_split + [(set (match_operand:HI 0 "register_operand" "") + (mem:HI (post_inc:HI (match_operand:QI 1 "register_operand" ""))))] + "reload_completed" + [(set (match_dup 2) + (mem:QI (post_inc:QI (match_dup 1)))) + (set (match_dup 3) + (mem:QI (post_inc:QI (match_dup 1))))] + " + { + operands[2] = gen_highpart(QImode, operands[0]); + operands[3] = gen_lowpart(QImode, operands[0]); + }") + + + (define_split + [(set (match_operand:HI 0 "register_operand" "") + (match_operand:HI 1 "register_operand" ""))] + "reload_completed && + !(IS_ACCUM_REG (REGNO(operands[0])) && + (REGNO(operands[1]) == REG_PROD || REGNO(operands[1]) == REG_Y))" + [(set (match_dup 2) + (match_dup 3)) + (set (match_dup 4) + (match_dup 5))] + " + { + operands[2] = gen_highpart(QImode, operands[0]); + operands[3] = gen_highpart(QImode, operands[1]); + operands[4] = gen_lowpart(QImode, operands[0]); + operands[5] = gen_lowpart(QImode, operands[1]); + }") + + (define_split + [(set (match_operand:HI 0 "register_operand" "") + (match_operand:HI 1 "const_int_operand" ""))] + "reload_completed" + [(set (match_dup 2) + (match_dup 3)) + (set (match_dup 4) + (match_dup 5))] + " + { + operands[2] = gen_lowpart(QImode, operands[0]); + operands[3] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[1]) & 0xffff); + + operands[4] = gen_highpart(QImode, operands[0]); + operands[5] = gen_rtx (CONST_INT, VOIDmode, (((INTVAL (operands[1]) & 0xffff0000) >> 16) & 0xffff)); + }") + (define_expand "movhi" [(set (match_operand:HI 0 "general_operand" "") (match_operand:HI 1 "general_operand" ""))] *************** *** 919,928 **** case 9: return \"\"; default: ! abort(); } }" ! [(set_attr "type" "move,move,load_i,load_i,load,store,load,store,move,move")]) ;; NOTE: It is cheaper to do 'y = *r0', than 'r0 = *r0'. --- 1418,1427 ---- case 9: return \"\"; default: ! abort(); } }" ! [(set_attr "type" "special,data_move_multiple,f3_alu,data_move_multiple,data_move_multiple,data_move_multiple,data_move_multiple,data_move_multiple,nothing,nothing")]) ;; NOTE: It is cheaper to do 'y = *r0', than 'r0 = *r0'. *************** *** 938,944 **** }") ;; The movqi pattern with the parallel is used for addqi insns (which have a parallel) ! ;; that are turned into moveqi insns by the flow phase. This happens when a auto-increment ;; is detected. (define_insn "match_movqi1" --- 1437,1443 ---- }") ;; The movqi pattern with the parallel is used for addqi insns (which have a parallel) ! ;; that are turned into moveqi insns by the flow phase. This happens when an auto-increment ;; is detected. (define_insn "match_movqi1" *************** *** 952,958 **** switch (which_alternative) { case 0: ! /* We have to use the move mnemonic otherwise the 1610 will attempt to transfer all 32-bits of 'y', 'p' or an accumulator , which we don't want */ if (REGNO(operands[1]) == REG_Y || REGNO(operands[1]) == REG_PROD --- 1451,1457 ---- switch (which_alternative) { case 0: ! /* We have to use the move mneumonic otherwise the 1610 will attempt to transfer all 32-bits of 'y', 'p' or an accumulator , which we don't want */ if (REGNO(operands[1]) == REG_Y || REGNO(operands[1]) == REG_PROD *************** *** 986,994 **** case 9: case 10: return \"%0=%1\"; default: ! abort(); } ! }") (define_insn "match_movqi2" [(set (match_operand:QI 0 "nonimmediate_operand" "=A,r,aW,c,?D,m<>,e,Y,r,xyz,m<>") --- 1485,1494 ---- case 9: case 10: return \"%0=%1\"; default: ! abort(); } ! }" ! [(set_attr "type" "data_move,data_move,data_move_short_i,data_move_i,data_move_memory,data_move_memory,data_move_memory,data_move_memory,nothing,malu,malu")]) (define_insn "match_movqi2" [(set (match_operand:QI 0 "nonimmediate_operand" "=A,r,aW,c,?D,m<>,e,Y,r,xyz,m<>") *************** *** 1000,1006 **** switch (which_alternative) { case 0: ! /* We have to use the move mnemonic otherwise the 1610 will attempt to transfer all 32-bits of 'y', 'p' or an accumulator , which we don't want */ if (REGNO(operands[1]) == REG_Y || REGNO(operands[1]) == REG_PROD --- 1500,1506 ---- switch (which_alternative) { case 0: ! /* We have to use the move mneumonic otherwise the 1610 will attempt to transfer all 32-bits of 'y', 'p' or an accumulator , which we don't want */ if (REGNO(operands[1]) == REG_Y || REGNO(operands[1]) == REG_PROD *************** *** 1034,1042 **** case 9: case 10: return \"%0=%1\"; default: ! abort(); } ! }") (define_expand "reload_inqi" [(set (match_operand:QI 0 "register_operand" "=u") --- 1534,1543 ---- case 9: case 10: return \"%0=%1\"; default: ! abort(); } ! }" ! [(set_attr "type" "data_move,data_move,data_move_short_i,data_move_i,data_move_memory,data_move_memory,data_move_memory,data_move_memory,nothing,malu,malu")]) (define_expand "reload_inqi" [(set (match_operand:QI 0 "register_operand" "=u") *************** *** 1071,1077 **** { /* Check for an overlap of operand 2 (an accumulator) with the msw of operand 0. If we have an overlap we must reverse ! the order of the moves. */ if (REGNO(operands[2]) == REGNO(operands[0])) { --- 1572,1578 ---- { /* Check for an overlap of operand 2 (an accumulator) with the msw of operand 0. If we have an overlap we must reverse ! the order of the moves. */ if (REGNO(operands[2]) == REGNO(operands[0])) { *************** *** 1191,1197 **** case 6: return \"%u0=%u1\;%w0=%w1\"; default: ! abort(); } }" [(set_attr "type" "move,move,load_i,load,store,load,store")]) --- 1692,1698 ---- case 6: return \"%u0=%u1\;%w0=%w1\"; default: ! abort(); } }" [(set_attr "type" "move,move,load_i,load,store,load,store")]) *************** *** 1207,1213 **** { /* Check for an overlap of operand 2 (an accumulator) with the msw of operand 0. If we have an overlap we must reverse ! the order of the moves. */ if (REGNO(operands[2]) == REGNO(operands[0])) { --- 1708,1714 ---- { /* Check for an overlap of operand 2 (an accumulator) with the msw of operand 0. If we have an overlap we must reverse ! the order of the moves. */ if (REGNO(operands[2]) == REGNO(operands[0])) { *************** *** 1261,1266 **** --- 1762,1774 ---- operands[3] = gen_rtx_SUBREG (QImode, operands[2], 1); }") + (define_insn "internal_extendqihi2" + [(set (match_operand:HI 0 "register_operand" "=A") + (sign_extend:HI (match_operand:QI 1 "register_operand" "ku")))] + "TARGET_BMU" + "%0 = extracts(%m1, 0x1000)" + [(set_attr "type" "shift_i")]) + ;;(define_insn "extendqihi2" ;; [(set (match_operand:HI 0 "register_operand" "=A") ;; (sign_extend:HI (match_operand:QI 1 "register_operand" "h")))] *************** *** 1293,1317 **** ;; return \"move %w0=%1\;%0=0\"; ;; else ;; return \"%w0=%1\;%0=0\"; ;; } ;; }") (define_expand "zero_extendqihi2" ! [(clobber (match_dup 2)) ! (set (match_dup 3) (match_operand:QI 1 "register_operand" "")) ! (set (match_operand:HI 0 "register_operand" "") ! (ashift:HI (match_dup 2) ! (const_int 16))) ! (set (match_dup 0) ! (lshiftrt:HI (match_dup 0) (const_int 16)))] "" ! " ! { ! operands[2] = gen_reg_rtx (HImode); ! operands[3] = gen_rtx_SUBREG (QImode, operands[2], 1); ! }") (define_expand "floathihf2" [(set (match_operand:HF 0 "register_operand" "") (float:HF (match_operand:HI 1 "register_operand" "")))] --- 1801,1899 ---- ;; return \"move %w0=%1\;%0=0\"; ;; else ;; return \"%w0=%1\;%0=0\"; + ;; default: + ;; abort(); ;; } ;; }") + ;;(define_expand "zero_extendqihi2" + ;; [(clobber (match_dup 2)) + ;; (set (match_dup 3) (match_operand:QI 1 "register_operand" "")) + ;; (set (match_operand:HI 0 "register_operand" "") + ;; (ashift:HI (match_dup 2) + ;; (const_int 16))) + ;; (set (match_dup 0) + ;; (lshiftrt:HI (match_dup 0) (const_int 16)))] + ;; "" + ;; " + ;;{ + ;; operands[2] = gen_reg_rtx (HImode); + ;; operands[3] = gen_rtx (SUBREG, QImode, operands[2], 1); + ;;}") + (define_expand "zero_extendqihi2" ! [(set (match_operand:HI 0 "register_operand" "") ! (zero_extend:HI (match_operand:QI 1 "register_operand" "")))] "" ! "") ! ! ! (define_insn "match_zero_extendqihi_bmu" ! [(set (match_operand:HI 0 "register_operand" "=?*Z,?*Z,?A,A") ! (zero_extend:HI (match_operand:QI 1 "register_operand" "?A,?*Y,*Z*x*a*W*Y,ku")))] ! "TARGET_BMU" ! "* ! { ! switch (which_alternative) ! { ! case 0: ! return \"%w0=%1\;%0=0\"; ! ! case 1: ! return \"%w0=%1\;%0=0\"; ! ! case 2: ! if (REGNO(operands[1]) == (REGNO(operands[0]) + 1)) ! return \"%0=0\"; ! else if (REGNO(operands[1]) == REG_Y || REGNO(operands[1]) == REG_PROD ! || IS_ACCUM_REG(REGNO(operands[1]))) ! { ! return \"move %w0=%1\;%0=0\"; ! } ! else ! return \"%w0=%1\;%0=0\"; ! ! case 3: ! return \"%0 = extractz(%m1, 0x1000)\"; ! default: ! abort(); ! } ! }" ! [(set_attr "type" "data_move_2,data_move_2,data_move_2,shift_i")]) ! ! (define_insn "match_zero_extendqihi2_nobmu" ! [(set (match_operand:HI 0 "register_operand" "=?Z,?Z,A") ! (zero_extend:HI (match_operand:QI 1 "register_operand" "A,Y,r")))] ! "" ! "* ! { ! switch (which_alternative) ! { ! case 0: ! return \"%w0=%1\;%0=0\"; + case 1: + return \"%w0=%1\;%0=0\"; + case 2: + if (REGNO(operands[1]) + 1 == (REGNO(operands[0]) + 1)) + return \"%0=0\"; + else if (REGNO(operands[1]) == REG_Y || REGNO(operands[1]) == REG_PROD + || IS_ACCUM_REG(REGNO(operands[1]))) + { + return \"move %w0=%1\;%0=0\"; + } + else + return \"%w0=%1\;%0=0\"; + default: + abort(); + } + }" + [(set_attr "type" "data_move_2,data_move_2,data_move_2")]) + + ;; + ;; Floating point conversions + ;; (define_expand "floathihf2" [(set (match_operand:HF 0 "register_operand" "") (float:HF (match_operand:HI 1 "register_operand" "")))] *************** *** 1434,1440 **** { /* If we are shifting by a constant we can do it in 1 or more 1600 core shift instructions. The core instructions can ! shift by 1, 4, 8, or 16. */ if (GET_CODE(operands[2]) == CONST_INT) ; --- 2016,2022 ---- { /* If we are shifting by a constant we can do it in 1 or more 1600 core shift instructions. The core instructions can ! shift by 1, 4, 8, or 16. */ if (GET_CODE(operands[2]) == CONST_INT) ; *************** *** 1506,1514 **** else { output_asm_insn (\"cloop=%2\", operands); ! output_asm_insn (\"do 0 \{\", operands); output_asm_insn (\"%0=%0>>1\", operands); ! return \"\}\"; } }") --- 2088,2096 ---- else { output_asm_insn (\"cloop=%2\", operands); ! output_asm_insn (\"do 0 {\", operands); output_asm_insn (\"%0=%0>>1\", operands); ! return \"}\"; } }") *************** *** 1521,1527 **** [(set (match_operand:HI 0 "register_operand" "=A") (lshiftrt:HI (match_operand:HI 1 "register_operand" "A") (const_int 1)))] ! "" "%0=%1>>1\;%0=%b0&0x7fff" [(set_attr "type" "special")]) --- 2103,2109 ---- [(set (match_operand:HI 0 "register_operand" "=A") (lshiftrt:HI (match_operand:HI 1 "register_operand" "A") (const_int 1)))] ! "!TARGET_BMU" "%0=%1>>1\;%0=%b0&0x7fff" [(set_attr "type" "special")]) *************** *** 1529,1535 **** [(set (match_operand:HI 0 "register_operand" "=A") (lshiftrt:HI (match_operand:HI 1 "register_operand" "A") (const_int 4)))] ! "" "%0=%1>>4\;%0=%b0&0x0fff" [(set_attr "type" "special")]) --- 2111,2117 ---- [(set (match_operand:HI 0 "register_operand" "=A") (lshiftrt:HI (match_operand:HI 1 "register_operand" "A") (const_int 4)))] ! "!TARGET_BMU" "%0=%1>>4\;%0=%b0&0x0fff" [(set_attr "type" "special")]) *************** *** 1537,1543 **** [(set (match_operand:HI 0 "register_operand" "=A") (lshiftrt:HI (match_operand:HI 1 "register_operand" "A") (const_int 8)))] ! "" "%0=%1>>8\;%0=%b0&0x00ff" [(set_attr "type" "special")]) --- 2119,2125 ---- [(set (match_operand:HI 0 "register_operand" "=A") (lshiftrt:HI (match_operand:HI 1 "register_operand" "A") (const_int 8)))] ! "!TARGET_BMU" "%0=%1>>8\;%0=%b0&0x00ff" [(set_attr "type" "special")]) *************** *** 1545,1551 **** [(set (match_operand:HI 0 "register_operand" "=A") (lshiftrt:HI (match_operand:HI 1 "register_operand" "A") (const_int 16)))] ! "" "%0=%1>>16\;%0=%b0&0x0000" [(set_attr "type" "special")]) --- 2127,2133 ---- [(set (match_operand:HI 0 "register_operand" "=A") (lshiftrt:HI (match_operand:HI 1 "register_operand" "A") (const_int 16)))] ! "!TARGET_BMU" "%0=%1>>16\;%0=%b0&0x0000" [(set_attr "type" "special")]) *************** *** 1560,1566 **** { /* If we are shifting by a constant we can do it in 1 or more 1600 core shift instructions. The core instructions can ! shift by 1, 4, 8, or 16. */ if (GET_CODE(operands[2]) == CONST_INT) emit_insn (gen_match_lshrhi3_nobmu (operands[0], operands[1], operands[2])); --- 2142,2148 ---- { /* If we are shifting by a constant we can do it in 1 or more 1600 core shift instructions. The core instructions can ! shift by 1, 4, 8, or 16. */ if (GET_CODE(operands[2]) == CONST_INT) emit_insn (gen_match_lshrhi3_nobmu (operands[0], operands[1], operands[2])); *************** *** 1633,1641 **** { output_asm_insn (\"%3=psw\;psw=0\",operands); output_asm_insn (\"cloop=%2\", operands); ! output_asm_insn (\"do 0 \{\", operands); output_asm_insn (\"%0=%0>>1\", operands); ! output_asm_insn (\"\}\", operands); return \"psw=%3\"; } }") --- 2215,2223 ---- { output_asm_insn (\"%3=psw\;psw=0\",operands); output_asm_insn (\"cloop=%2\", operands); ! output_asm_insn (\"do 0 {\", operands); output_asm_insn (\"%0=%0>>1\", operands); ! output_asm_insn (\"}\", operands); return \"psw=%3\"; } }") *************** *** 1673,1686 **** (define_insn "" [(set (match_operand:HI 0 "register_operand" "=A") - (ashift:HI (zero_extend:HI (match_operand:QI 1 "register_operand" "A")) - (const_int 16)))] - "" - "%0=%1<<16" - [(set_attr "type" "special")]) - - (define_insn "" - [(set (match_operand:HI 0 "register_operand" "=A") (ashift:HI (match_operand:HI 1 "general_operand" "A") (const_int 16)))] "" --- 2255,2260 ---- *************** *** 1703,1709 **** { /* If we are shifting by a constant we can do it in 1 or more 1600 core shift instructions. The core instructions can ! shift by 1, 4, 8, or 16. */ if (GET_CODE(operands[2]) == CONST_INT) ; --- 2277,2283 ---- { /* If we are shifting by a constant we can do it in 1 or more 1600 core shift instructions. The core instructions can ! shift by 1, 4, 8, or 16. */ if (GET_CODE(operands[2]) == CONST_INT) ; *************** *** 1755,1761 **** %0=%1<<%2\;move %u0=%u0 %0=%1<<%H2\;move %u0=%u0 %0=%1<<%2\;move %u0=%u0" ! [(set_attr "type" "shift,shift_i,shift")]) (define_insn "match_ashlhi3_nobmu" [(set (match_operand:HI 0 "register_operand" "=A,A") --- 2329,2335 ---- %0=%1<<%2\;move %u0=%u0 %0=%1<<%H2\;move %u0=%u0 %0=%1<<%2\;move %u0=%u0" ! [(set_attr "type" "shift_multiple,shift_multiple,shift_multiple")]) (define_insn "match_ashlhi3_nobmu" [(set (match_operand:HI 0 "register_operand" "=A,A") *************** *** 1772,1785 **** else { output_asm_insn (\"cloop=%2\", operands); ! output_asm_insn (\"do 0 \{\", operands); output_asm_insn (\"%0=%0<<1\", operands); ! return \"\}\"; } }") ;; ;; Jump Instructions ;; --- 2346,2529 ---- else { output_asm_insn (\"cloop=%2\", operands); ! output_asm_insn (\"do 0 {\", operands); output_asm_insn (\"%0=%0<<1\", operands); ! return \"}\"; } }") + + (define_insn "extv" + [(set (match_operand:QI 0 "register_operand" "=k,u") + (sign_extract:QI (match_operand:QI 1 "register_operand" "ku,ku") + (match_operand:QI 2 "const_int_operand" "n,n") + (match_operand:QI 3 "const_int_operand" "n,n"))) + (clobber (match_scratch:QI 4 "=j,q"))] + "TARGET_BMU" + "* + { + operands[5] + = GEN_INT ((INTVAL (operands[2]) << 8) + (INTVAL (operands[3]) & 0xff)); + return \"%m0 = extracts (%m1, %H5)\"; + }" + [(set_attr "type" "shift_i")]) + + (define_insn "extzv" + [(set (match_operand:QI 0 "register_operand" "=k,u") + (zero_extract:QI (match_operand:QI 1 "register_operand" "ku,ku") + (match_operand:QI 2 "const_int_operand" "n,n") + (match_operand:QI 3 "const_int_operand" "n,n"))) + (clobber (match_scratch:QI 4 "=j,q"))] + "TARGET_BMU" + "* + { + operands[5] + = GEN_INT ((INTVAL (operands[2]) << 8) + (INTVAL (operands[3]) & 0xff)); + return \"%m0 = extractz (%m1, %H5)\"; + }" + [(set_attr "type" "shift_i")]) + + ;; + ;; conditional instructions + ;; + + (define_expand "seq" + [(set (match_operand:QI 0 "register_operand" "") + (eq:QI (match_dup 1) (const_int 0)))] + "" + " + { + if (dsp16xx_compare_gen == gen_compare_reg) + operands[1] = (*dsp16xx_compare_gen)(EQ, dsp16xx_compare_op0, dsp16xx_compare_op1); + else + operands[1] = (*dsp16xx_compare_gen)(dsp16xx_compare_op0); + }") + + (define_expand "sne" + [(set (match_operand:QI 0 "register_operand" "") + (ne:QI (match_dup 1) (const_int 0)))] + "" + " + { + if (dsp16xx_compare_gen == gen_compare_reg) + operands[1] = (*dsp16xx_compare_gen)(NE, dsp16xx_compare_op0, dsp16xx_compare_op1); + else + operands[1] = (*dsp16xx_compare_gen)(dsp16xx_compare_op0); + }") + + + (define_expand "sgt" + [(set (match_operand:QI 0 "register_operand" "") + (gt:QI (match_dup 1) (const_int 0)))] + "" + " + { + if (dsp16xx_compare_gen == gen_compare_reg) + operands[1] = (*dsp16xx_compare_gen)(GT, dsp16xx_compare_op0, dsp16xx_compare_op1); + else + operands[1] = (*dsp16xx_compare_gen)(dsp16xx_compare_op0); + }") + + + (define_expand "slt" + [(set (match_operand:QI 0 "register_operand" "") + (lt:QI (match_dup 1) (const_int 0)))] + "" + " + { + if (dsp16xx_compare_gen == gen_compare_reg) + operands[1] = (*dsp16xx_compare_gen)(LT, dsp16xx_compare_op0, dsp16xx_compare_op1); + else + operands[1] = (*dsp16xx_compare_gen)(dsp16xx_compare_op0); + }") + + (define_expand "sge" + [(set (match_operand:QI 0 "register_operand" "") + (ge:QI (match_dup 1) (const_int 0)))] + "" + " + { + if (dsp16xx_compare_gen == gen_compare_reg) + operands[1] = (*dsp16xx_compare_gen)(GE, dsp16xx_compare_op0, dsp16xx_compare_op1); + else + operands[1] = (*dsp16xx_compare_gen)(dsp16xx_compare_op0); + }") + + + (define_expand "sle" + [(set (match_operand:QI 0 "register_operand" "") + (le:QI (match_dup 1) (const_int 0)))] + "" + " + { + if (dsp16xx_compare_gen == gen_compare_reg) + operands[1] = (*dsp16xx_compare_gen)(LE, dsp16xx_compare_op0, dsp16xx_compare_op1); + else + operands[1] = (*dsp16xx_compare_gen)(dsp16xx_compare_op0); + }") + + + (define_expand "sgtu" + [(set (match_operand:QI 0 "register_operand" "") + (gtu:QI (match_dup 1) (const_int 0)))] + "" + " + { + if (dsp16xx_compare_gen == gen_compare_reg) + operands[1] = (*dsp16xx_compare_gen)(GTU, dsp16xx_compare_op0, dsp16xx_compare_op1); + else + operands[1] = (*dsp16xx_compare_gen)(dsp16xx_compare_op0); + }") + + + (define_expand "sltu" + [(set (match_operand:QI 0 "register_operand" "") + (ltu:QI (match_dup 1) (const_int 0)))] + "" + " + { + if (dsp16xx_compare_gen == gen_compare_reg) + operands[1] = (*dsp16xx_compare_gen)(LTU, dsp16xx_compare_op0, dsp16xx_compare_op1); + else + operands[1] = (*dsp16xx_compare_gen)(dsp16xx_compare_op0); + }") + + + (define_expand "sgeu" + [(set (match_operand:QI 0 "register_operand" "") + (geu:QI (match_dup 1) (const_int 0)))] + "" + " + { + if (dsp16xx_compare_gen == gen_compare_reg) + operands[1] = (*dsp16xx_compare_gen)(GEU, dsp16xx_compare_op0, dsp16xx_compare_op1); + else + operands[1] = (*dsp16xx_compare_gen)(dsp16xx_compare_op0); + }") + + + (define_expand "sleu" + [(set (match_operand:QI 0 "register_operand" "") + (leu:QI (match_dup 1) (const_int 0)))] + "" + " + { + if (dsp16xx_compare_gen == gen_compare_reg) + operands[1] = (*dsp16xx_compare_gen)(LEU, dsp16xx_compare_op0, dsp16xx_compare_op1); + else + operands[1] = (*dsp16xx_compare_gen)(dsp16xx_compare_op0); + }") + + + (define_insn "scc" + [(set (match_operand:QI 0 "register_operand" "=jq") + (match_operator:QI 1 "comparison_operator" [(cc0) (const_int 0)]))] + "" + "%0 = 0\;if %C1 %b0 = %b0 + 1" + [(set_attr "type" "special_2")]) + ;; ;; Jump Instructions ;; *************** *** 2136,2180 **** (define_peephole ! [(set (match_operand:QI 0 "register_operand" "=A") ! (reg:QI 16)) ! (call (mem:QI (match_dup 0)) ! (match_operand 1 "" "i"))] ! "" ! "call pt") (define_peephole ! [(set (match_operand:QI 0 "register_operand" "=A") ! (reg:QI 16)) ! (set (match_operand 1 "" "") ! (call (mem:QI (match_dup 0)) ! (match_operand 2 "" "i")))] ! "" ! "call pt") (define_peephole ! [(set (match_operand:HI 0 "register_operand" "=A") ! (ashift:HI (match_operand:HI 1 "register_operand" "A") ! (const_int 16))) ! (set (match_operand:HI 2 "register_operand" "") ! (match_dup 0)) ! (set (match_dup 0) ! (ashiftrt:HI (match_dup 0) (const_int 16))) ! (set (match_dup 2) ! (match_dup 0))] ! "" ! "%0=%1<<16\;%0=%0>>16\;%u2=%u0\;%w2=%w0") (define_peephole ! [(set (match_operand:HI 0 "register_operand" "=A") ! (ashift:HI (match_operand:HI 1 "register_operand" "A") ! (const_int 16))) ! (set (match_operand:HI 2 "register_operand" "") ! (match_dup 0)) ! (set (match_dup 0) ! (lshiftrt:HI (match_dup 0) (const_int 16))) ! (set (match_dup 2) ! (match_dup 0))] ! "" ! "%0=%1<<16\;%0=%0>>16\;%0=%b0&0x0000\;%u2=%u0\;%w2=%w0") --- 2880,3047 ---- (define_peephole ! [(parallel [(set (cc0) ! (compare (match_operand:QI 0 "register_operand" "k,k,!k,u,u,!u") ! (match_operand:QI 1 "register_operand" "w,z,u,w,z,k"))) ! (use (match_operand:QI 2 "register_operand" "=j,j,j,q,q,q")) ! (use (match_operand:QI 3 "register_operand" "=v,y,q,v,y,j"))]) ! (set (pc) ! (if_then_else (match_operator 5 "uns_comparison_operator" ! [(cc0) (const_int 0)]) ! (label_ref (match_operand 4 "" "")) ! (pc)))] ! "!TARGET_NEAR_JUMP" ! "pt=%l4\;%2-%3\;if %C5 goto pt") ! ! (define_peephole ! [(parallel [(set (cc0) ! (compare (match_operand:QI 0 "register_operand" "k,k,!k,u,u,!u") ! (match_operand:QI 1 "register_operand" "w,z,u,w,z,k"))) ! (use (match_operand:QI 2 "register_operand" "=j,j,j,q,q,q")) ! (use (match_operand:QI 3 "register_operand" "=v,y,q,v,y,j"))]) ! (set (pc) ! (if_then_else (match_operator 5 "uns_comparison_operator" ! [(cc0) (const_int 0)]) ! (pc) ! (label_ref (match_operand 4 "" ""))))] ! "!TARGET_NEAR_JUMP" ! "pt=%l4\;%2-%3\;if %I5 goto pt") (define_peephole ! [(parallel [(set (cc0) ! (compare (match_operand:QI 0 "register_operand" "k,u") ! (match_operand:QI 1 "const_int_operand" "i,i"))) ! (use (match_operand:QI 2 "register_operand" "=j,q"))]) ! (set (pc) ! (if_then_else (match_operator 4 "uns_comparison_operator" ! [(cc0) (const_int 0)]) ! (label_ref (match_operand 3 "" "")) ! (pc)))] ! "!TARGET_NEAR_JUMP" ! "pt=%l3\;%0-%H1\;if %C4 goto pt") (define_peephole ! [(parallel [(set (cc0) ! (compare (match_operand:QI 0 "register_operand" "k,u") ! (match_operand:QI 1 "const_int_operand" "i,i"))) ! (use (match_operand:QI 2 "register_operand" "=j,q"))]) ! (set (pc) ! (if_then_else (match_operator 4 "uns_comparison_operator" ! [(cc0) (const_int 0)]) ! (pc) ! (label_ref (match_operand 3 "" ""))))] ! "!TARGET_NEAR_JUMP" ! "pt=%l3\;%0-%H1\;if %I4 goto pt") ! ! ;; ! ;;; QImode SIGNED COMPARE PEEPHOLE OPTIMIZATIONS ! ;; (define_peephole ! [(parallel [(set (cc0) ! (compare (match_operand:QI 0 "register_operand" "j,j,h,q,q,q") ! (match_operand:QI 1 "register_operand" "v,y,q,v,y,j"))) ! (use (match_operand:QI 2 "register_operand" "=k,k,k,u,u,u")) ! (use (match_operand:QI 3 "register_operand" "=w,z,u,w,z,k"))]) ! (set (pc) ! (if_then_else (match_operator 5 "signed_comparison_operator" ! [(cc0) (const_int 0)]) ! (label_ref (match_operand 4 "" "")) ! (pc)))] ! "!TARGET_NEAR_JUMP" ! "pt=%l4\;%0-%1\;if %C5 goto pt") ! ! ! (define_peephole ! [(parallel [(set (cc0) ! (compare (match_operand:QI 0 "register_operand" "j,j,j,q,q,q") ! (match_operand:QI 1 "register_operand" "v,y,q,v,y,j"))) ! (use (match_operand:QI 2 "register_operand" "=k,k,k,u,u,u")) ! (use (match_operand:QI 3 "register_operand" "=w,z,u,w,z,k"))]) ! (set (pc) ! (if_then_else (match_operator 5 "signed_comparison_operator" ! [(cc0) (const_int 0)]) ! (pc) ! (label_ref (match_operand 4 "" ""))))] ! "!TARGET_NEAR_JUMP" ! "pt=%l4\;%0-%1\;if %I5 goto pt") ! ! ! (define_peephole ! [(parallel [(set (cc0) ! (compare (match_operand:QI 0 "register_operand" "j,q") ! (match_operand:QI 1 "const_int_operand" "i,i"))) ! (use (match_operand:QI 2 "register_operand" "=k,u"))]) ! (set (pc) ! (if_then_else (match_operator 4 "signed_comparison_operator" ! [(cc0) (const_int 0)]) ! (label_ref (match_operand 3 "" "")) ! (pc)))] ! "!TARGET_NEAR_JUMP" ! "pt=%l3\;%b0-%H1\;if %C4 goto pt") ! ! (define_peephole ! [(parallel [(set (cc0) ! (compare (match_operand:QI 0 "register_operand" "j,q") ! (match_operand:QI 1 "const_int_operand" "i,i"))) ! (use (match_operand:QI 2 "register_operand" "=k,u"))]) ! (set (pc) ! (if_then_else (match_operator 4 "signed_comparison_operator" ! [(cc0) (const_int 0)]) ! (pc) ! (label_ref (match_operand 3 "" ""))))] ! "!TARGET_NEAR_JUMP" ! "pt=%l3\;%b0-%H1\;if %I4 goto pt") ! ! ;; TST PEEPHOLE PATTERNS ! ! (define_peephole ! [(parallel [(set (cc0) ! (match_operand:QI 0 "register_operand" "j,q")) ! (use (match_operand:QI 1 "register_operand" "=k,u"))]) ! (set (pc) ! (if_then_else (match_operator 3 "signed_comparison_operator" ! [(cc0) (const_int 0)]) ! (pc) ! (label_ref (match_operand 2 "" ""))))] ! "!TARGET_NEAR_JUMP" ! "pt=%l2\;%b0-0\;if %I3 goto pt") ! ! (define_peephole ! [(parallel [(set (cc0) ! (match_operand:QI 0 "register_operand" "j,q")) ! (use (match_operand:QI 1 "register_operand" "=k,u"))]) ! (set (pc) ! (if_then_else (match_operator 3 "signed_comparison_operator" ! [(cc0) (const_int 0)]) ! (label_ref (match_operand 2 "" "")) ! (pc)))] ! "!TARGET_NEAR_JUMP" ! "pt=%l2\;%b0-0\;if %C3 goto pt") ! ! ;; HImode peephole patterns ! ! (define_peephole ! [(set (cc0) ! (compare (match_operand:HI 0 "register_operand" "A,A") ! (match_operand:HI 1 "register_operand" "Z,A"))) ! (set (pc) ! (if_then_else (match_operator 3 "signed_comparison_operator" ! [(cc0) (const_int 0)]) ! (label_ref (match_operand 2 "" "")) ! (pc)))] ! "!TARGET_NEAR_JUMP" ! "pt=%l2\;%0-%1\;if %C3 goto pt") ! ! (define_peephole ! [(set (cc0) ! (compare (match_operand:HI 0 "register_operand" "A,A") ! (match_operand:HI 1 "register_operand" "Z,A"))) ! (set (pc) ! (if_then_else (match_operator 3 "signed_comparison_operator" ! [(cc0) (const_int 0)]) ! (pc) ! (label_ref (match_operand 2 "" ""))))] ! "!TARGET_NEAR_JUMP" ! "pt=%l2\;%0-%1\;if %I3 goto pt") diff -Nrc3pad gcc-3.0.4/gcc/config/dsp16xx/xm-dsp16xx.h gcc-3.1/gcc/config/dsp16xx/xm-dsp16xx.h *** gcc-3.0.4/gcc/config/dsp16xx/xm-dsp16xx.h Thu Mar 15 19:02:02 2001 --- gcc-3.1/gcc/config/dsp16xx/xm-dsp16xx.h Thu Jan 1 00:00:00 1970 *************** *** 1,42 **** - /* Configuration file for GNU CC for AT&T DSP1600. - Copyright (C) 1993 Free Software Foundation, Inc. - Contributed by Michael Collison (collison@world.std.com). - - This file is part of GNU CC. - - GNU CC is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU CC is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNU CC; see the file COPYING. If not, write to - the Free Software Foundation, 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - - /* This describes the machine the compiler is hosted on. */ - #define HOST_BITS_PER_CHAR 8 - #define HOST_BITS_PER_SHORT 16 - #define HOST_BITS_PER_INT 16 - #define HOST_BITS_PER_LONG 32 - #define HOST_BITS_PER_LONGLONG 64 - - /* Arguments to use with `exit'. */ - #define SUCCESS_EXIT_CODE 0 - #define FATAL_EXIT_CODE 33 - - /* If compiled with GNU C, use the built-in alloca */ - #ifdef __GNUC__ - #define alloca __builtin_alloca - #else - #define USE_C_ALLOCA - #endif - - /* target machine dependencies. - tm.h is a symbolic link to the actual target specific file. */ - #include "tm.h" --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/elfos.h gcc-3.1/gcc/config/elfos.h *** gcc-3.0.4/gcc/config/elfos.h Fri Dec 7 21:10:58 2001 --- gcc-3.1/gcc/config/elfos.h Tue Dec 18 10:42:32 2001 *************** the Free Software Foundation, 59 Temple *** 22,28 **** Boston, MA 02111-1307, USA. */ ! /* Define a symbol indicating that we are using elfos.h. */ #define USING_ELFOS_H /* The prefix to add to user-visible assembler symbols. --- 22,29 ---- Boston, MA 02111-1307, USA. */ ! /* Define a symbol indicating that we are using elfos.h. ! Some CPU specific configuration files use this. */ #define USING_ELFOS_H /* The prefix to add to user-visible assembler symbols. *************** Boston, MA 02111-1307, USA. */ *** 41,55 **** #define MAX_OFILE_ALIGNMENT (32768 * 8) #endif - #undef ENDFILE_SPEC - #define ENDFILE_SPEC "crtend.o%s" - - #undef STARTFILE_SPEC - #define STARTFILE_SPEC "%{!shared: \ - %{!symbolic: \ - %{pg:gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}}}}\ - crtbegin.o%s" - /* Use periods rather than dollar signs in special g++ assembler names. */ #define NO_DOLLAR_IN_LABEL --- 42,47 ---- *************** Boston, MA 02111-1307, USA. */ *** 78,92 **** #define DWARF2_DEBUGGING_INFO 1 #endif ! /* Also allow them to support STABS debugging. */ ! ! #include "dbxelf.h" ! ! /* The GNU tools operate better with stabs. Since we don't have ! any native tools to be compatible with, default to stabs. */ #ifndef PREFERRED_DEBUGGING_TYPE ! #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG #endif /* All SVR4 targets use the ELF object file format. */ --- 70,81 ---- #define DWARF2_DEBUGGING_INFO 1 #endif ! /* The GNU tools operate better with dwarf2, and it is required by some ! psABI's. Since we don't have any native tools to be compatible with, ! default to dwarf2. */ #ifndef PREFERRED_DEBUGGING_TYPE ! #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG #endif /* All SVR4 targets use the ELF object file format. */ *************** Boston, MA 02111-1307, USA. */ *** 100,108 **** #define IDENT_ASM_OP "\t.ident\t" - #undef ASM_BYTE_OP - #define ASM_BYTE_OP "\t.byte\t" - #undef SET_ASM_OP #define SET_ASM_OP "\t.set\t" --- 89,94 ---- *************** Boston, MA 02111-1307, USA. */ *** 133,143 **** with a period is not put into the linker symbol table by the assembler. */ #undef ASM_OUTPUT_INTERNAL_LABEL ! #define ASM_OUTPUT_INTERNAL_LABEL(FILE, PREFIX, NUM) \ ! do \ ! { \ ! fprintf (FILE, ".%s%d:\n", PREFIX, NUM); \ ! } \ while (0) /* This is how to store into the string LABEL --- 119,129 ---- with a period is not put into the linker symbol table by the assembler. */ #undef ASM_OUTPUT_INTERNAL_LABEL ! #define ASM_OUTPUT_INTERNAL_LABEL(FILE, PREFIX, NUM) \ ! do \ ! { \ ! fprintf (FILE, ".%s%u:\n", PREFIX, (unsigned) (NUM)); \ ! } \ while (0) /* This is how to store into the string LABEL *************** Boston, MA 02111-1307, USA. */ *** 164,169 **** --- 150,156 ---- make sure that the location counter for the .rodata section gets pro- perly re-aligned prior to the actual beginning of the jump table. */ + #undef ALIGN_ASM_OP #define ALIGN_ASM_OP "\t.align\t" #ifndef ASM_OUTPUT_BEFORE_CASE_LABEL *************** Boston, MA 02111-1307, USA. */ *** 222,239 **** } \ while (0) - /* This is the pseudo-op used to generate a reference to a specific - symbol in some section. It is only used in machine-specific - configuration files, typically only in ASM_OUTPUT_CONSTRUCTOR and - ASM_OUTPUT_DESTRUCTOR. This is the same for all known svr4 - assemblers, except those in targets that don't use 32-bit pointers. - Those should override INT_ASM_OP. Yes, the name of the macro is - misleading. */ - - #ifndef INT_ASM_OP - #define INT_ASM_OP "\t.long\t" - #endif - /* This is the pseudo-op used to generate a contiguous sequence of byte values from a double-quoted string WITHOUT HAVING A TERMINATING NUL AUTOMATICALLY APPENDED. This is the same for most svr4 assemblers. */ --- 209,214 ---- *************** Boston, MA 02111-1307, USA. */ *** 253,276 **** #define CONST_SECTION_ASM_OP "\t.section\t.rodata" - /* Define the pseudo-ops used to switch to the .ctors and .dtors sections. - - Note that we want to give these sections the SHF_WRITE attribute - because these sections will actually contain data (i.e. tables of - addresses of functions in the current root executable or shared library - file) and, in the case of a shared library, the relocatable addresses - will have to be properly resolved/relocated (and then written into) by - the dynamic linker when it actually attaches the given shared library - to the executing process. (Note that on SVR4, you may wish to use the - `-z text' option to the ELF linker, when building a shared library, as - an additional check that you are doing everything right. But if you do - use the `-z text' option when building a shared library, you will get - errors unless the .ctors and .dtors sections are marked as writable - via the SHF_WRITE attribute.) */ - - #define CTORS_SECTION_ASM_OP "\t.section\t.ctors,\"aw\"" - #define DTORS_SECTION_ASM_OP "\t.section\t.dtors,\"aw\"" - /* On svr4, we *do* have support for the .init and .fini sections, and we can put stuff in there to be executed before and after `main'. We let crtstuff.c and other files know this by defining the following symbols. --- 228,233 ---- *************** Boston, MA 02111-1307, USA. */ *** 280,292 **** #define INIT_SECTION_ASM_OP "\t.section\t.init" #define FINI_SECTION_ASM_OP "\t.section\t.fini" /* A default list of other sections which we might be "in" at any given time. For targets that use additional sections (e.g. .tdesc) you should override this definition in the target-specific file which includes this file. */ #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_const, in_ctors, in_dtors /* A default list of extra section function definitions. For targets that use additional sections (e.g. .tdesc) you should override this --- 237,259 ---- #define INIT_SECTION_ASM_OP "\t.section\t.init" #define FINI_SECTION_ASM_OP "\t.section\t.fini" + #ifdef HAVE_GAS_SUBSECTION_ORDERING + + #define ASM_SECTION_START_OP "\t.subsection\t-1" + + /* Output assembly directive to move to the beginning of current section. */ + #define ASM_OUTPUT_SECTION_START(FILE) \ + fprintf ((FILE), "%s\n", ASM_SECTION_START_OP) + + #endif + /* A default list of other sections which we might be "in" at any given time. For targets that use additional sections (e.g. .tdesc) you should override this definition in the target-specific file which includes this file. */ #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_const /* A default list of extra section function definitions. For targets that use additional sections (e.g. .tdesc) you should override this *************** Boston, MA 02111-1307, USA. */ *** 294,302 **** #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ ! CONST_SECTION_FUNCTION \ ! CTORS_SECTION_FUNCTION \ ! DTORS_SECTION_FUNCTION #define READONLY_DATA_SECTION() const_section () --- 261,267 ---- #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ ! CONST_SECTION_FUNCTION #define READONLY_DATA_SECTION() const_section () *************** const_section () \ *** 313,344 **** } \ } - #define CTORS_SECTION_FUNCTION \ - void \ - ctors_section () \ - { \ - if (in_section != in_ctors) \ - { \ - fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP); \ - in_section = in_ctors; \ - } \ - } - - #define DTORS_SECTION_FUNCTION \ - void \ - dtors_section () \ - { \ - if (in_section != in_dtors) \ - { \ - fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP); \ - in_section = in_dtors; \ - } \ - } - #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1) - #define UNIQUE_SECTION_P(DECL) (DECL_ONE_ONLY (DECL)) - #define UNIQUE_SECTION(DECL, RELOC) \ do \ { \ --- 278,285 ---- *************** dtors_section () \ *** 347,368 **** const char *name; \ char *string; \ const char *prefix; \ ! static const char *prefixes[/*4*/3][2] = \ { \ { ".text.", ".gnu.linkonce.t." }, \ { ".rodata.", ".gnu.linkonce.r." }, \ ! { ".data.", ".gnu.linkonce.d." } \ ! /* Do not generate unique sections for uninitialised \ ! data since we do not have support for this in the \ ! linker scripts yet... \ ! ,{ ".bss.", ".gnu.linkonce.b." } */ \ }; \ \ if (TREE_CODE (DECL) == FUNCTION_DECL) \ sec = 0; \ ! /* else if (DECL_INITIAL (DECL) == 0 \ || DECL_INITIAL (DECL) == error_mark_node) \ ! sec = 3; */ \ else if (DECL_READONLY_SECTION (DECL, RELOC)) \ sec = 1; \ else \ --- 288,306 ---- const char *name; \ char *string; \ const char *prefix; \ ! static const char *const prefixes[4][2] = \ { \ { ".text.", ".gnu.linkonce.t." }, \ { ".rodata.", ".gnu.linkonce.r." }, \ ! { ".data.", ".gnu.linkonce.d." }, \ ! { ".bss.", ".gnu.linkonce.b." } \ }; \ \ if (TREE_CODE (DECL) == FUNCTION_DECL) \ sec = 0; \ ! else if (DECL_INITIAL (DECL) == 0 \ || DECL_INITIAL (DECL) == error_mark_node) \ ! sec = 3; \ else if (DECL_READONLY_SECTION (DECL, RELOC)) \ sec = 1; \ else \ *************** dtors_section () \ *** 381,512 **** } \ while (0) ! /* A C statement (sans semicolon) to output an ! element in the table of global constructors. */ ! #define ASM_OUTPUT_CONSTRUCTOR(FILE, NAME) \ ! do \ ! { \ ! ctors_section (); \ ! fprintf (FILE, "%s", INT_ASM_OP); \ ! assemble_name (FILE, NAME); \ ! fprintf (FILE, "\n"); \ ! } \ ! while (0) ! ! /* A C statement (sans semicolon) to output an ! element in the table of global destructors. */ ! #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \ ! do \ ! { \ ! dtors_section (); \ ! fprintf (FILE, "%s", INT_ASM_OP); \ ! assemble_name (FILE, NAME); \ ! fprintf (FILE, "\n"); \ ! } \ ! while (0) ! ! /* Switch into a generic section. ! ! We make the section read-only and executable for a function decl, ! read-only for a const data decl, and writable for a non-const data decl. ! ! If the section has already been defined, we must not ! emit the attributes here. The SVR4 assembler does not ! recognize section redefinitions. ! If DECL is NULL, no attributes are emitted. */ ! ! #define ASM_OUTPUT_SECTION_NAME(FILE, DECL, NAME, RELOC) \ ! do \ ! { \ ! static htab_t htab; \ ! \ ! struct section_info \ ! { \ ! enum sect_enum {SECT_RW, SECT_RO, SECT_EXEC} type; \ ! }; \ ! \ ! struct section_info *s; \ ! const char *mode; \ ! enum sect_enum type; \ ! PTR* slot; \ ! \ ! /* The names we put in the hashtable will always be the unique \ ! versions gived to us by the stringtable, so we can just use \ ! their addresses as the keys. */ \ ! if (!htab) \ ! htab = htab_create (31, \ ! htab_hash_pointer, \ ! htab_eq_pointer, \ ! NULL); \ ! \ ! if (DECL && TREE_CODE (DECL) == FUNCTION_DECL) \ ! type = SECT_EXEC, mode = "ax"; \ ! else if (DECL && DECL_READONLY_SECTION (DECL, RELOC)) \ ! type = SECT_RO, mode = "a"; \ ! else \ ! type = SECT_RW, mode = "aw"; \ ! \ ! \ ! /* See if we already have an entry for this section. */ \ ! slot = htab_find_slot (htab, NAME, INSERT); \ ! if (!*slot) \ ! { \ ! s = (struct section_info *) xmalloc (sizeof (* s)); \ ! s->type = type; \ ! *slot = s; \ ! fprintf (FILE, "\t.section\t%s,\"%s\",@progbits\n", \ ! NAME, mode); \ ! } \ ! else \ ! { \ ! s = (struct section_info *) *slot; \ ! if (DECL && s->type != type) \ ! error_with_decl (DECL, \ ! "%s causes a section type conflict"); \ ! \ ! fprintf (FILE, "\t.section\t%s\n", NAME); \ ! } \ ! } \ ! while (0) /* A C statement or statements to switch to the appropriate section for output of RTX in mode MODE. RTX is some kind of constant in RTL. The argument MODE is redundant except ! in the case of a `const_int' rtx. Currently, these always ! go into the const section. */ #undef SELECT_RTX_SECTION ! #define SELECT_RTX_SECTION(MODE, RTX) const_section () /* A C statement or statements to switch to the appropriate section for output of DECL. DECL is either a `VAR_DECL' node or a constant of some sort. RELOC indicates whether forming ! the initial value of DECL requires link-time relocations. */ ! #define SELECT_SECTION(DECL, RELOC) \ { \ if (TREE_CODE (DECL) == STRING_CST) \ { \ if (! flag_writable_strings) \ ! const_section (); \ else \ data_section (); \ } \ else if (TREE_CODE (DECL) == VAR_DECL) \ { \ ! if ((flag_pic && RELOC) \ ! || !TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL) \ || !DECL_INITIAL (DECL) \ || (DECL_INITIAL (DECL) != error_mark_node \ && !TREE_CONSTANT (DECL_INITIAL (DECL)))) \ ! data_section (); \ ! else \ const_section (); \ } \ else if (TREE_CODE (DECL) == CONSTRUCTOR) \ { \ if ((flag_pic && RELOC) \ ! || !TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL) \ || ! TREE_CONSTANT (DECL)) \ data_section (); \ else \ --- 319,404 ---- } \ while (0) ! /* Switch into a generic section. */ ! #define TARGET_ASM_NAMED_SECTION default_elf_asm_named_section /* A C statement or statements to switch to the appropriate section for output of RTX in mode MODE. RTX is some kind of constant in RTL. The argument MODE is redundant except ! in the case of a `const_int' rtx. ! If assembler supports SHF_MERGE sections, put it into ! a .rodata.cstN section where N is size of the constant, ! otherwise into const section. */ #undef SELECT_RTX_SECTION ! #define SELECT_RTX_SECTION(MODE, RTX, ALIGN) \ ! mergeable_constant_section ((MODE), (ALIGN), 0) /* A C statement or statements to switch to the appropriate section for output of DECL. DECL is either a `VAR_DECL' node or a constant of some sort. RELOC indicates whether forming ! the initial value of DECL requires link-time relocations. ! ! To optimize loading of shared programs, define following subsections ! of data section by attaching: ! .rel ! Section with this string in name contains data that do have ! relocations, so they get grouped together and dynamic linker ! will visit fewer pages in memory. ! .ro ! Marks data read only otherwise. This is useful with prelinking ! as most of relocations won't be dynamically linked and thus ! stay read only. ! .local ! Marks data containing relocations only to local objects. These ! relocation will get fully resolved by prelinking. ! */ ! ! #undef SELECT_SECTION ! #define SELECT_SECTION(DECL, RELOC, ALIGN) \ { \ if (TREE_CODE (DECL) == STRING_CST) \ { \ if (! flag_writable_strings) \ ! mergeable_string_section ((DECL), (ALIGN), 0); \ else \ data_section (); \ } \ else if (TREE_CODE (DECL) == VAR_DECL) \ { \ ! if (!TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL) \ || !DECL_INITIAL (DECL) \ || (DECL_INITIAL (DECL) != error_mark_node \ && !TREE_CONSTANT (DECL_INITIAL (DECL)))) \ ! { \ ! if (flag_pic && ((RELOC) & 2)) \ ! named_section (NULL_TREE, ".data.rel", RELOC); \ ! else if (flag_pic && (RELOC)) \ ! named_section (NULL_TREE, ".data.rel.local", RELOC);\ ! else \ ! data_section (); \ ! } \ ! else if (flag_pic && ((RELOC) & 2)) \ ! named_section (NULL_TREE, ".data.rel.ro", RELOC); \ ! else if (flag_pic && (RELOC)) \ ! named_section (NULL_TREE, ".data.rel.ro.local", RELOC); \ ! else if (flag_merge_constants < 2) \ ! /* C and C++ don't allow different variables to share \ ! the same location. -fmerge-all-constants allows \ ! even that (at the expense of not conforming). */ \ const_section (); \ + else if (TREE_CODE (DECL_INITIAL (DECL)) == STRING_CST) \ + mergeable_string_section (DECL_INITIAL (DECL), (ALIGN), \ + 0); \ + else \ + mergeable_constant_section (DECL_MODE (DECL), (ALIGN), \ + 0); \ } \ else if (TREE_CODE (DECL) == CONSTRUCTOR) \ { \ if ((flag_pic && RELOC) \ ! || TREE_SIDE_EFFECTS (DECL) \ || ! TREE_CONSTANT (DECL)) \ data_section (); \ else \ diff -Nrc3pad gcc-3.0.4/gcc/config/elxsi/elxsi.c gcc-3.1/gcc/config/elxsi/elxsi.c *** gcc-3.0.4/gcc/config/elxsi/elxsi.c Mon May 1 17:21:40 2000 --- gcc-3.1/gcc/config/elxsi/elxsi.c Sat Dec 22 20:55:03 2001 *************** Boston, MA 02111-1307, USA. */ *** 26,32 **** --- 26,39 ---- #include "rtl.h" #include "function.h" #include "output.h" + #include "tree.h" + #include "expr.h" + #include "regs.h" + #include "flags.h" + #include "hard-reg-set.h" #include "tm_p.h" + #include "target.h" + #include "target-def.h" extern const char *reg_names[]; rtx cmp_op0=0, cmp_op1=0; *************** static const char *const cmp_tab[] = { *** 36,41 **** --- 43,177 ---- "gt", "gt", "eq", "eq", "ge", "ge", "lt", "lt", "ne", "ne", "le", "le" }; + static bool elxsi_assemble_integer PARAMS ((rtx, unsigned int, int)); + static void elxsi_output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT)); + static void elxsi_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT)); + + /* Initialize the GCC target structure. */ + #undef TARGET_ASM_BYTE_OP + #define TARGET_ASM_BYTE_OP NULL + #undef TARGET_ASM_ALIGNED_HI_OP + #define TARGET_ASM_ALIGNED_HI_OP NULL + #undef TARGET_ASM_ALIGNED_SI_OP + #define TARGET_ASM_ALIGNED_SI_OP NULL + #undef TARGET_ASM_INTEGER + #define TARGET_ASM_INTEGER elxsi_assemble_integer + + #undef TARGET_ASM_FUNCTION_PROLOGUE + #define TARGET_ASM_FUNCTION_PROLOGUE elxsi_output_function_prologue + #undef TARGET_ASM_FUNCTION_EPILOGUE + #define TARGET_ASM_FUNCTION_EPILOGUE elxsi_output_function_epilogue + + struct gcc_target targetm = TARGET_INITIALIZER; + + /* Target hook for assembling integer objects. The ELXSI assembler + syntax uses a suffix to indicate the size of data, so we can't use + the usual string hooks. */ + + static bool + elxsi_assemble_integer (x, size, aligned_p) + rtx x; + unsigned int size; + int aligned_p; + { + if (aligned_p) + switch (size) + { + case 1: + case 2: + case 4: + fputs ("\t.data\t", asm_out_file); + output_addr_const (asm_out_file, x); + fprintf (asm_out_file, "{%d}\n", size * BITS_PER_UNIT); + return true; + } + return default_assemble_integer (x, size, aligned_p); + } + + /* Generate the assembly code for function entry. FILE is a stdio + stream to output the code to. SIZE is an int: how many units of + temporary storage to allocate. + + Refer to the array `regs_ever_live' to determine which registers to + save; `regs_ever_live[I]' is nonzero if register number I is ever + used in the function. This function is responsible for knowing + which registers should not be saved even if used. */ + + static void + elxsi_output_function_prologue (file, size) + FILE *file; + HOST_WIDE_INT size; + { + register int regno; + register int cnt = 0; + + /* the below two lines are a HACK, and should be deleted, but + for now are very much needed (1.35) */ + if (frame_pointer_needed) + regs_ever_live[14] = 1, call_used_regs[14] = 0; + + for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) + if (regs_ever_live[regno] && !call_used_regs[regno]) + cnt += 8; + + if (size + cnt) + fprintf (file, "\tadd.64\t.sp,=%d\n", -size - cnt); + + cnt = 0; + for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) + if (regs_ever_live[regno] && !call_used_regs[regno]) + fprintf (file, "\tst.64\t.r%d,[.sp]%d\n", regno, (cnt += 8) - 12); + + if (frame_pointer_needed) + fprintf (file, "\tadd.64\t.r14,.sp,=%d\n", size + cnt); + } + + /* This function generates the assembly code for function exit. + Args are as for output_function_prologue (). + + The function epilogue should not depend on the current stack + pointer! It should use the frame pointer only. This is mandatory + because of alloca; we also take advantage of it to omit stack + adjustments before returning. */ + + static void + elxsi_output_function_epilogue (file, size) + FILE *file; + HOST_WIDE_INT size; + { + register int regno; + register int cnt = 0; + + /* this conditional is ONLY here because there is a BUG; + EXIT_IGNORE_STACK is ignored itself when the first part of + the condition is true! (at least in version 1.35) */ + /* the 8*10 is for 64 bits of .r5 - .r14 */ + if (current_function_calls_alloca || size >= (256 - 8 * 10)) + { + /* use .r4 as a temporary! Ok for now.... */ + fprintf (file, "\tld.64\t.r4,.r14\n"); + + for (regno = FIRST_PSEUDO_REGISTER-1; regno >= 0; --regno) + if (regs_ever_live[regno] && !call_used_regs[regno]) + cnt += 8; + + for (regno = 0; regno < FIRST_PSEUDO_REGISTER; ++regno) + if (regs_ever_live[regno] && !call_used_regs[regno]) + fprintf (file, "\tld.64\t.r%d,[.r14]%d\n", regno, + -((cnt -= 8) + 8) - 4 - size); + + fprintf (file, "\tld.64\t.sp,.r4\n\texit\t0\n"); + } + else + { + for (regno = 0; regno < FIRST_PSEUDO_REGISTER; ++regno) + if (regs_ever_live[regno] && !call_used_regs[regno]) + fprintf (file, "\tld.64\t.r%d,[.sp]%d\n", regno, (cnt += 8) - 12); + + fprintf (file, "\texit\t%d\n", size + cnt); + } + } + /* type is the index into the above table */ /* s is "" for signed, or "u" for unsigned */ const char * diff -Nrc3pad gcc-3.0.4/gcc/config/elxsi/elxsi.h gcc-3.1/gcc/config/elxsi/elxsi.h *** gcc-3.0.4/gcc/config/elxsi/elxsi.h Thu Dec 7 01:58:24 2000 --- gcc-3.1/gcc/config/elxsi/elxsi.h Wed Jan 16 02:37:22 2002 *************** *** 1,5 **** /* Definitions of target machine for GNU compiler. Elxsi version. ! Copyright (C) 1987, 1988, 1992, 1995, 1996, 1998, 1999, 2000 Free Software Foundation, Inc. Contributed by Mike Stump in 1988. This is the first 64 bit port of GNU CC. --- 1,5 ---- /* Definitions of target machine for GNU compiler. Elxsi version. ! Copyright (C) 1987, 1988, 1992, 1995, 1996, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Mike Stump in 1988. This is the first 64 bit port of GNU CC. *************** extern int target_flags; *** 62,68 **** /* Define this if most significant bit is lowest numbered in instructions that operate on numbered bit-fields. ! This is not true on the vax. */ #define BITS_BIG_ENDIAN 0 /* Define this if most significant byte of a word is the lowest numbered. */ --- 62,68 ---- /* Define this if most significant bit is lowest numbered in instructions that operate on numbered bit-fields. ! This is not true on the VAX. */ #define BITS_BIG_ENDIAN 0 /* Define this if most significant byte of a word is the lowest numbered. */ *************** extern int target_flags; *** 79,85 **** if using 16-bit ints on a 68000, this would still be 32. But on a machine with 16-bit registers, this would be 16. */ #define BITS_PER_WORD 64 - #define Rmode DImode #define INT_TYPE_SIZE 32 --- 79,84 ---- *************** extern int target_flags; *** 106,111 **** --- 105,113 ---- /* Allocation boundary (in *bits*) for storing arguments in argument list. */ #define PARM_BOUNDARY 32 + /* Boundary (in *bits*) on which stack pointer should be aligned. */ + #define STACK_BOUNDARY 32 + /* Allocation boundary (in *bits*) for the code of a function. */ #define FUNCTION_BOUNDARY 8 *************** extern int target_flags; *** 151,157 **** to hold something of mode MODE. This is ordinarily the length in words of a value of mode MODE but can be less for certain modes in special long registers. ! On the vax, all registers are one word long. */ #define HARD_REGNO_NREGS(REGNO, MODE) \ ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD) --- 153,159 ---- to hold something of mode MODE. This is ordinarily the length in words of a value of mode MODE but can be less for certain modes in special long registers. ! On the VAX, all registers are one word long. */ #define HARD_REGNO_NREGS(REGNO, MODE) \ ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD) *************** extern int target_flags; *** 219,225 **** For any two classes, it is very desirable that there be another class that represents their union. */ ! /* The vax has only one kind of registers, so NO_REGS and ALL_REGS are the only classes. */ enum reg_class { NO_REGS, GENERAL_REGS, ALL_REGS, LIM_REG_CLASSES }; --- 221,227 ---- For any two classes, it is very desirable that there be another class that represents their union. */ ! /* The VAX has only one kind of registers, so NO_REGS and ALL_REGS are the only classes. */ enum reg_class { NO_REGS, GENERAL_REGS, ALL_REGS, LIM_REG_CLASSES }; *************** enum reg_class { NO_REGS, GENERAL_REGS, *** 276,282 **** /* Return the maximum number of consecutive registers needed to represent mode MODE in a register of class CLASS. */ ! /* On the vax, this is always the size of MODE in words, since all registers are the same size. */ #define CLASS_MAX_NREGS(CLASS, MODE) \ ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD) --- 278,284 ---- /* Return the maximum number of consecutive registers needed to represent mode MODE in a register of class CLASS. */ ! /* On the VAX, this is always the size of MODE in words, since all registers are the same size. */ #define CLASS_MAX_NREGS(CLASS, MODE) \ ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD) *************** enum reg_class { NO_REGS, GENERAL_REGS, *** 308,314 **** FUNTYPE is the data type of the function (as a tree), or for a library call it is an identifier node for the subroutine name. ! On the Vax, the RET insn always pops all the args for any function. */ #define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) (SIZE) --- 310,316 ---- FUNTYPE is the data type of the function (as a tree), or for a library call it is an identifier node for the subroutine name. ! On the VAX, the RET insn always pops all the args for any function. */ #define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) (SIZE) *************** enum reg_class { NO_REGS, GENERAL_REGS, *** 317,323 **** If the precise function being called is known, FUNC is its FUNCTION_DECL; otherwise, FUNC is 0. */ ! /* On the Vax the return value is in R0 regardless. */ #define FUNCTION_VALUE(VALTYPE, FUNC) \ gen_rtx_REG (TYPE_MODE (VALTYPE), 0) --- 319,325 ---- If the precise function being called is known, FUNC is its FUNCTION_DECL; otherwise, FUNC is 0. */ ! /* On the VAX the return value is in R0 regardless. */ #define FUNCTION_VALUE(VALTYPE, FUNC) \ gen_rtx_REG (TYPE_MODE (VALTYPE), 0) *************** enum reg_class { NO_REGS, GENERAL_REGS, *** 325,331 **** /* Define how to find the value returned by a library function assuming the value has mode MODE. */ ! /* On the Vax the return value is in R0 regardless. */ #define LIBCALL_VALUE(MODE) gen_rtx_REG (MODE, 0) --- 327,333 ---- /* Define how to find the value returned by a library function assuming the value has mode MODE. */ ! /* On the VAX the return value is in R0 regardless. */ #define LIBCALL_VALUE(MODE) gen_rtx_REG (MODE, 0) *************** enum reg_class { NO_REGS, GENERAL_REGS, *** 335,346 **** #define PCC_STATIC_STRUCT_RETURN /* 1 if N is a possible register number for a function value. ! On the Vax, R0 is the only register thus used. */ #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0) /* 1 if N is a possible register number for function argument passing. ! On the Vax, no registers are used in this way. */ #define FUNCTION_ARG_REGNO_P(N) 0 --- 337,348 ---- #define PCC_STATIC_STRUCT_RETURN /* 1 if N is a possible register number for a function value. ! On the VAX, R0 is the only register thus used. */ #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0) /* 1 if N is a possible register number for function argument passing. ! On the VAX, no registers are used in this way. */ #define FUNCTION_ARG_REGNO_P(N) 0 *************** enum reg_class { NO_REGS, GENERAL_REGS, *** 350,356 **** and about the args processed so far, enough to enable macros such as FUNCTION_ARG to determine where the next arg should go. ! On the vax, this is a single integer, which is a number of bytes of arguments scanned so far. */ #define CUMULATIVE_ARGS int --- 352,358 ---- and about the args processed so far, enough to enable macros such as FUNCTION_ARG to determine where the next arg should go. ! On the VAX, this is a single integer, which is a number of bytes of arguments scanned so far. */ #define CUMULATIVE_ARGS int *************** enum reg_class { NO_REGS, GENERAL_REGS, *** 359,365 **** for a call to a function whose data type is FNTYPE. For a library call, FNTYPE is 0. ! On the vax, the offset starts at 0. */ #define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,x,INDIRECT) \ ((CUM) = 0) --- 361,367 ---- for a call to a function whose data type is FNTYPE. For a library call, FNTYPE is 0. ! On the VAX, the offset starts at 0. */ #define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,x,INDIRECT) \ ((CUM) = 0) *************** enum reg_class { NO_REGS, GENERAL_REGS, *** 386,424 **** NAMED is nonzero if this argument is a named parameter (otherwise it is an extra parameter matching an ellipsis). */ ! /* On the vax all args are pushed. */ #define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) 0 - /* This macro generates the assembly code for function entry. - FILE is a stdio stream to output the code to. - SIZE is an int: how many units of temporary storage to allocate. - Refer to the array `regs_ever_live' to determine which registers - to save; `regs_ever_live[I]' is nonzero if register number I - is ever used in the function. This macro is responsible for - knowing which registers should not be saved even if used. */ - - #define FUNCTION_PROLOGUE(FILE, SIZE) \ - { register int regno; \ - register int cnt = 0; \ - extern char call_used_regs[]; \ - /* the below two lines are a HACK, and should be deleted, but \ - for now are very much needed (1.35) */ \ - if (frame_pointer_needed) \ - regs_ever_live[14]=1, call_used_regs[14]=0; \ - for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) \ - if (regs_ever_live[regno] && !call_used_regs[regno]) \ - cnt+=8; \ - if ((SIZE)+cnt) \ - fprintf (FILE, "\tadd.64\t.sp,=%d\n", -(SIZE)-cnt); \ - cnt = 0; \ - for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) \ - if (regs_ever_live[regno] && !call_used_regs[regno]) \ - fprintf (FILE, "\tst.64\t.r%d,[.sp]%d\n", regno, (cnt+=8)-12); \ - if (frame_pointer_needed) \ - fprintf (FILE, "\tadd.64\t.r14,.sp,=%d\n", (SIZE)+cnt); \ - } - /* Output assembler code to FILE to increment profiler label # LABELNO for profiling a function entry. */ --- 388,397 ---- NAMED is nonzero if this argument is a named parameter (otherwise it is an extra parameter matching an ellipsis). */ ! /* On the VAX all args are pushed. */ #define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) 0 /* Output assembler code to FILE to increment profiler label # LABELNO for profiling a function entry. */ *************** enum reg_class { NO_REGS, GENERAL_REGS, *** 432,468 **** #define EXIT_IGNORE_STACK 0 - /* This macro generates the assembly code for function exit, - on machines that need it. If FUNCTION_EPILOGUE is not defined - then individual return instructions are generated for each - return statement. Args are same as for FUNCTION_PROLOGUE. */ - - #define FUNCTION_EPILOGUE(FILE, SIZE) \ - { register int regno; \ - register int cnt = 0; \ - extern char call_used_regs[]; \ - /* this conditional is ONLY here because there is a BUG; \ - EXIT_IGNORE_STACK is ignored itself when the first part of \ - the condition is true! (at least in version 1.35) */ \ - /* the 8*10 is for 64 bits of .r5 - .r14 */ \ - if (current_function_calls_alloca || (SIZE)>=(256-8*10)) { \ - /* use .r4 as a temporary! Ok for now.... */ \ - fprintf (FILE, "\tld.64\t.r4,.r14\n"); \ - for (regno = FIRST_PSEUDO_REGISTER-1; regno >= 0; --regno) \ - if (regs_ever_live[regno] && !call_used_regs[regno]) \ - cnt+=8; \ - for (regno = 0; regno < FIRST_PSEUDO_REGISTER; ++regno) \ - if (regs_ever_live[regno] && !call_used_regs[regno]) \ - fprintf (FILE, "\tld.64\t.r%d,[.r14]%d\n", regno, \ - -((cnt-=8) + 8)-4-(SIZE)); \ - fprintf (FILE, "\tld.64\t.sp,.r4\n\texit\t0\n"); \ - } else { \ - for (regno = 0; regno < FIRST_PSEUDO_REGISTER; ++regno) \ - if (regs_ever_live[regno] && !call_used_regs[regno]) \ - fprintf (FILE, "\tld.64\t.r%d,[.sp]%d\n", regno, (cnt+=8)-12); \ - fprintf (FILE, "\texit\t%d\n", (SIZE)+cnt); \ - } } - /* If the memory address ADDR is relative to the frame pointer, correct it to be relative to the stack pointer instead. This is for when we don't use a frame pointer. --- 405,410 ---- *************** enum reg_class { NO_REGS, GENERAL_REGS, *** 605,611 **** It is always safe for this macro to do nothing. It exists to recognize opportunities to optimize the output. ! For the vax, nothing needs to be done. */ #define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN) {} --- 547,553 ---- It is always safe for this macro to do nothing. It exists to recognize opportunities to optimize the output. ! For the VAX, nothing needs to be done. */ #define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN) {} *************** enum reg_class { NO_REGS, GENERAL_REGS, *** 624,635 **** Do not define this if the table should contain absolute addresses. */ /* #define CASE_VECTOR_PC_RELATIVE 1 */ - /* Specify the tree operation to be used to convert reals to integers. */ - #define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR - - /* This is the kind of divide that is easiest to do in the general case. */ - #define EASY_DIV_EXPR TRUNC_DIV_EXPR - /* Define this as 1 if `char' should by default be signed; else as 0. */ #define DEFAULT_SIGNED_CHAR 1 --- 566,571 ---- *************** enum reg_class { NO_REGS, GENERAL_REGS, *** 641,649 **** in one reasonably fast instruction. */ #define MOVE_MAX 8 - /* Define this if zero-extension is slow (more than one real instruction). */ - /* #define SLOW_ZERO_EXTEND */ - /* Nonzero if access to memory by bytes is slow and undesirable. */ #define SLOW_BYTE_ACCESS 0 --- 577,582 ---- *************** enum reg_class { NO_REGS, GENERAL_REGS, *** 694,700 **** /* Tell final.c how to eliminate redundant test instructions. */ /* Here we define machine-dependent flags and fields in cc_status ! (see `conditions.h'). No extra ones are needed for the vax. */ /* Store in cc_status the expressions that the condition codes will describe --- 627,633 ---- /* Tell final.c how to eliminate redundant test instructions. */ /* Here we define machine-dependent flags and fields in cc_status ! (see `conditions.h'). No extra ones are needed for the VAX. */ /* Store in cc_status the expressions that the condition codes will describe *************** enum reg_class { NO_REGS, GENERAL_REGS, *** 746,756 **** /* #define DBX_DEBUGGING_INFO */ - /* How to renumber registers for dbx and gdb. - Vax needs no change in the numeration. */ - - #define DBX_REGISTER_NUMBER(REGNO) (REGNO) - /* Do not break .stabs pseudos into continuations. */ #define DBX_CONTIN_LENGTH 0 --- 679,684 ---- *************** enum reg_class { NO_REGS, GENERAL_REGS, *** 795,859 **** #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ sprintf (LABEL, ".%s%d", PREFIX, NUM) - /* This is how to output an assembler line defining a `double' constant. - It is .dfloat or .gfloat, depending. */ - - #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - { union {double d; int i[2]; } tem; \ - tem.d = (VALUE); \ - fprintf (FILE, "\t.data\t%d{32}, %d{32}\n", tem.i[0], tem.i[1]); } - - /* This is how to output an assembler line defining a `float' constant. */ - - #define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - { union {float f; int i; } tem; \ - tem.f = (VALUE); \ - fprintf (FILE, "\t.data %d{32}\n", tem.i); } - - /* This is how to output an assembler line defining an `int' constant. */ - - #define ASM_OUTPUT_INT(FILE,VALUE) \ - ( \ - fprintf (FILE, "\t.data\t"), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "{32}\n")) - - #define ASM_OUTPUT_DOUBLE_INT(FILE,VALUE) \ - { \ - fprintf (FILE, "\t.data\t"); \ - if (GET_CODE (VALUE) == CONST_DOUBLE) \ - { \ - fprintf (FILE, "%d", CONST_DOUBLE_HIGH (VALUE)); \ - fprintf (FILE, "{32}, "); \ - fprintf (FILE, "%d", CONST_DOUBLE_LOW (VALUE)); \ - fprintf (FILE, "{32}\n"); \ - } else if (GET_CODE (VALUE) == CONST_INT) \ - { \ - int val = INTVAL (VALUE); \ - fprintf (FILE, "%d", val < 0 ? -1 : 0); \ - fprintf (FILE, "{32}, "); \ - fprintf (FILE, "%d", val); \ - fprintf (FILE, "{32}\n"); \ - } else abort (); \ - } - - /* Likewise for `char' and `short' constants. */ - - #define ASM_OUTPUT_SHORT(FILE,VALUE) \ - ( fprintf (FILE, "\t.data\t"), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "{16}\n")) - - #define ASM_OUTPUT_CHAR(FILE,VALUE) \ - ( fprintf (FILE, "\t.data\t"), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "{8}\n")) - - /* This is how to output an assembler line for a numeric constant byte. */ - - #define ASM_OUTPUT_BYTE(FILE,VALUE) \ - fprintf (FILE, "\t.data\t%d{8}\n", (VALUE)) - /* This is how to output an insn to push a register on the stack. It need not be very fast code. */ --- 723,728 ---- *************** enum reg_class { NO_REGS, GENERAL_REGS, *** 867,873 **** fprintf (FILE, "\tld.32\t%s,[.sp]\n\taddi.64\t4,.sp\n", reg_names[REGNO]) /* This is how to output an element of a case-vector that is absolute. ! (The Vax does not use such vectors, but we must define this macro anyway.) */ #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ --- 736,742 ---- fprintf (FILE, "\tld.32\t%s,[.sp]\n\taddi.64\t4,.sp\n", reg_names[REGNO]) /* This is how to output an element of a case-vector that is absolute. ! (The VAX does not use such vectors, but we must define this macro anyway.) */ #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ *************** enum reg_class { NO_REGS, GENERAL_REGS, *** 915,935 **** ( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 10), \ sprintf ((OUTPUT), "%s.%d", (NAME), (LABELNO))) - /* Define the parentheses used to group arithmetic operations - in assembler code. */ - - #define ASM_OPEN_PAREN "(" - #define ASM_CLOSE_PAREN ")" - - /* Define results of standard character escape sequences. */ - #define TARGET_BELL 007 - #define TARGET_BS 010 - #define TARGET_TAB 011 - #define TARGET_NEWLINE 012 - #define TARGET_VT 013 - #define TARGET_FF 014 - #define TARGET_CR 015 - /* Print an instruction operand X on file FILE. CODE is the code from the %-spec that requested printing this operand; if `%z3' was used to print operand 3, then CODE is 'z'. */ --- 784,789 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/elxsi/x-elxsi gcc-3.1/gcc/config/elxsi/x-elxsi *** gcc-3.0.4/gcc/config/elxsi/x-elxsi Wed Dec 16 21:02:39 1998 --- gcc-3.1/gcc/config/elxsi/x-elxsi Thu Jan 1 00:00:00 1970 *************** *** 1,9 **** - # Our make needs a little help... - MAKE=make - - # We don't support -g yet, so don't try and use it. - CFLAGS = - LIBGCC2_CFLAGS = -O2 $(GCC_CFLAGS) - - # Hide xmalloc so that it does not conflict with the one in libc.a, Ick! - X_CFLAGS = -Dxmalloc=my_xmalloc --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/elxsi/xm-elxsi.h gcc-3.1/gcc/config/elxsi/xm-elxsi.h *** gcc-3.0.4/gcc/config/elxsi/xm-elxsi.h Thu Mar 15 19:02:03 2001 --- gcc-3.1/gcc/config/elxsi/xm-elxsi.h Thu Jan 1 00:00:00 1970 *************** *** 1,33 **** - /* Configuration for GNU C-compiler for Elxsi. - Copyright (C) 1987, 1993 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. */ - - /* target machine dependencies. - tm.h is a symbolic link to the actual target specific file. */ - #include "tm.h" - - /* This describes the machine the compiler is hosted on. */ - #define HOST_BITS_PER_CHAR 8 - #define HOST_BITS_PER_SHORT 16 - #define HOST_BITS_PER_INT 32 - #define HOST_BITS_PER_LONG 32 - - /* Arguments to use with `exit'. */ - #define SUCCESS_EXIT_CODE 0 - #define FATAL_EXIT_CODE 33 --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/float-sparc.h gcc-3.1/gcc/config/float-sparc.h *** gcc-3.0.4/gcc/config/float-sparc.h Wed Oct 10 19:03:47 2001 --- gcc-3.1/gcc/config/float-sparc.h Thu May 2 21:28:50 2002 *************** *** 66,72 **** #undef DBL_MAX_10_EXP #define DBL_MAX_10_EXP 308 ! #if defined(__sparcv9) || defined(__arch64__) /* Number of base-FLT_RADIX digits in the significand of a long double */ #undef LDBL_MANT_DIG --- 66,72 ---- #undef DBL_MAX_10_EXP #define DBL_MAX_10_EXP 308 ! #if defined(__sparcv9) || defined(__arch64__) || defined(__LONG_DOUBLE_128__) /* Number of base-FLT_RADIX digits in the significand of a long double */ #undef LDBL_MANT_DIG diff -Nrc3pad gcc-3.0.4/gcc/config/fp-bit.c gcc-3.1/gcc/config/fp-bit.c *** gcc-3.0.4/gcc/config/fp-bit.c Fri Feb 2 11:02:05 2001 --- gcc-3.1/gcc/config/fp-bit.c Wed Dec 12 06:59:23 2001 *************** *** 1,6 **** ! /* This is a software floating point library which can be used instead of ! the floating point routines in libgcc1.c for targets without hardware ! floating point. Copyright (C) 1994, 1995, 1996, 1997, 1998, 2000, 2001 Free Software Foundation, Inc. --- 1,5 ---- ! /* This is a software floating point library which can be used ! for targets without hardware floating point. Copyright (C) 1994, 1995, 1996, 1997, 1998, 2000, 2001 Free Software Foundation, Inc. *************** Boston, MA 02111-1307, USA. */ *** 44,51 **** /* The intended way to use this file is to make two copies, add `#define FLOAT' to one copy, then compile both copies and add them to libgcc.a. */ #include "fp-bit.h" - #include "tm.h" /* The following macros can be defined to change the behaviour of this file: FLOAT: Implement a `float', aka SFmode, fp library. If this is not --- 43,50 ---- /* The intended way to use this file is to make two copies, add `#define FLOAT' to one copy, then compile both copies and add them to libgcc.a. */ + #include "tconfig.h" #include "fp-bit.h" /* The following macros can be defined to change the behaviour of this file: FLOAT: Implement a `float', aka SFmode, fp library. If this is not *************** Boston, MA 02111-1307, USA. */ *** 57,64 **** CMPtype: Specify the type that floating point compares should return. This defaults to SItype, aka int. US_SOFTWARE_GOFAST: This makes all entry points use the same names as the ! US Software goFast library. If this is not defined, the entry points use ! the same names as libgcc1.c. _DEBUG_BITFLOAT: This makes debugging the code a little easier, by adding two integers to the FLO_union_type. NO_DENORMALS: Disable handling of denormals. --- 56,62 ---- CMPtype: Specify the type that floating point compares should return. This defaults to SItype, aka int. US_SOFTWARE_GOFAST: This makes all entry points use the same names as the ! US Software goFast library. _DEBUG_BITFLOAT: This makes debugging the code a little easier, by adding two integers to the FLO_union_type. NO_DENORMALS: Disable handling of denormals. *************** pack_d ( fp_number_type * src) *** 224,230 **** } else { ! int lowbit = (fraction & ((1 << shift) - 1)) ? 1 : 0; fraction = (fraction >> shift) | lowbit; } if ((fraction & GARDMASK) == GARDMSB) --- 222,228 ---- } else { ! int lowbit = (fraction & (((fractype)1 << shift) - 1)) ? 1 : 0; fraction = (fraction >> shift) | lowbit; } if ((fraction & GARDMASK) == GARDMSB) diff -Nrc3pad gcc-3.0.4/gcc/config/fp-bit.h gcc-3.1/gcc/config/fp-bit.h *** gcc-3.0.4/gcc/config/fp-bit.h Thu Nov 8 18:56:00 2001 --- gcc-3.1/gcc/config/fp-bit.h Thu Nov 8 18:56:45 2001 *************** Boston, MA 02111-1307, USA. */ *** 26,33 **** This exception does not however invalidate any other reasons why the executable file might be covered by the GNU General Public License. */ ! #ifndef __FP_BIT_H__ ! #define __FP_BIT_H__ /* Defining FINE_GRAINED_LIBRARIES allows one to select which routines from this file are compiled via additional -D options. --- 26,33 ---- This exception does not however invalidate any other reasons why the executable file might be covered by the GNU General Public License. */ ! #ifndef GCC_FP_BIT_H ! #define GCC_FP_BIT_H /* Defining FINE_GRAINED_LIBRARIES allows one to select which routines from this file are compiled via additional -D options. *************** extern SFtype df_to_sf (DFtype); *** 416,419 **** #endif #endif /* ! FLOAT */ ! #endif /* __FP_BIT_H__ */ --- 416,419 ---- #endif #endif /* ! FLOAT */ ! #endif /* ! GCC_FP_BIT_H */ diff -Nrc3pad gcc-3.0.4/gcc/config/fr30/fr30.c gcc-3.1/gcc/config/fr30/fr30.c *** gcc-3.0.4/gcc/config/fr30/fr30.c Sat May 12 20:32:42 2001 --- gcc-3.1/gcc/config/fr30/fr30.c Sun Feb 17 14:23:51 2002 *************** *** 1,7 **** - /*{{{ Introduction */ - /* FR30 specific functions. ! Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This file is part of GNU CC. --- 1,5 ---- /* FR30 specific functions. ! Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This file is part of GNU CC. *************** Boston, MA 02111-1307, USA. */ *** 42,47 **** --- 40,47 ---- #include "except.h" #include "function.h" #include "tm_p.h" + #include "target.h" + #include "target-def.h" /*}}}*/ /*{{{ Function Prologues & Epilogues */ *************** static struct fr30_frame_info current_f *** 118,123 **** --- 118,126 ---- /* Zero structure to initialize current_frame_info. */ static struct fr30_frame_info zero_frame_info; + static rtx fr30_pass_by_reference PARAMS ((tree, tree)); + static rtx fr30_pass_by_value PARAMS ((tree, tree)); + #define FRAME_POINTER_MASK (1 << (FRAME_POINTER_REGNUM)) #define RETURN_POINTER_MASK (1 << (RETURN_POINTER_REGNUM)) *************** static struct fr30_frame_info zero_fram *** 131,142 **** && ! call_used_regs [regno] ) #define MUST_SAVE_FRAME_POINTER (regs_ever_live [FRAME_POINTER_REGNUM] || frame_pointer_needed) ! #define MUST_SAVE_RETURN_POINTER (regs_ever_live [RETURN_POINTER_REGNUM] || profile_flag) #if UNITS_PER_WORD == 4 #define WORD_ALIGN(SIZE) (((SIZE) + 3) & ~3) #endif ! /* Returns the number of bytes offset between FROM_REG and TO_REG for the current function. As a side effect it fills in the current_frame_info structure, if the data is available. */ --- 134,153 ---- && ! call_used_regs [regno] ) #define MUST_SAVE_FRAME_POINTER (regs_ever_live [FRAME_POINTER_REGNUM] || frame_pointer_needed) ! #define MUST_SAVE_RETURN_POINTER (regs_ever_live [RETURN_POINTER_REGNUM] || current_function_profile) #if UNITS_PER_WORD == 4 #define WORD_ALIGN(SIZE) (((SIZE) + 3) & ~3) #endif ! ! /* Initialize the GCC target structure. */ ! #undef TARGET_ASM_ALIGNED_HI_OP ! #define TARGET_ASM_ALIGNED_HI_OP "\t.hword\t" ! #undef TARGET_ASM_ALIGNED_SI_OP ! #define TARGET_ASM_ALIGNED_SI_OP "\t.word\t" ! ! struct gcc_target targetm = TARGET_INITIALIZER; ! /* Returns the number of bytes offset between FROM_REG and TO_REG for the current function. As a side effect it fills in the current_frame_info structure, if the data is available. */ *************** fr30_compute_frame_size (from_reg, to_re *** 200,206 **** /* Called after register allocation to add any instructions needed for the prologue. Using a prologue insn is favored compared to putting all of the ! instructions in the FUNCTION_PROLOGUE macro, since it allows the scheduler to intermix instructions with the saves of the caller saved registers. In some cases, it might be necessary to emit a barrier instruction as the last insn to prevent such scheduling. */ --- 211,217 ---- /* Called after register allocation to add any instructions needed for the prologue. Using a prologue insn is favored compared to putting all of the ! instructions in output_function_prologue(), since it allows the scheduler to intermix instructions with the saves of the caller saved registers. In some cases, it might be necessary to emit a barrier instruction as the last insn to prevent such scheduling. */ *************** fr30_expand_prologue () *** 323,335 **** RTX_FRAME_RELATED_P (insn) = 1; } ! if (profile_flag || profile_block_flag) emit_insn (gen_blockage ()); } /* Called after register allocation to add any instructions needed for the ! epilogue. Using a epilogue insn is favored compared to putting all of the ! instructions in the FUNCTION_EPILOGUE macro, since it allows the scheduler to intermix instructions with the restores of the caller saved registers. In some cases, it might be necessary to emit a barrier instruction as the first insn to prevent such scheduling. */ --- 334,346 ---- RTX_FRAME_RELATED_P (insn) = 1; } ! if (current_function_profile) emit_insn (gen_blockage ()); } /* Called after register allocation to add any instructions needed for the ! epilogue. Using an epilogue insn is favored compared to putting all of the ! instructions in output_function_epilogue(), since it allows the scheduler to intermix instructions with the restores of the caller saved registers. In some cases, it might be necessary to emit a barrier instruction as the first insn to prevent such scheduling. */ *************** fr30_print_operand (file, x, code) *** 469,475 **** /* Compute the register name of the second register in a hi/lo register pair. */ if (GET_CODE (x) != REG) ! output_operand_lossage ("fr30_print_operand: unrecognised %p code"); else fprintf (file, "r%d", REGNO (x) + 1); return; --- 480,486 ---- /* Compute the register name of the second register in a hi/lo register pair. */ if (GET_CODE (x) != REG) ! output_operand_lossage ("fr30_print_operand: unrecognized %%p code"); else fprintf (file, "r%d", REGNO (x) + 1); return; *************** fr30_print_operand (file, x, code) *** 489,495 **** case GTU: fprintf (file, "hi"); break; case GEU: fprintf (file, "nc"); break; default: ! output_operand_lossage ("fr30_print_operand: unrecognised %b code"); break; } return; --- 500,506 ---- case GTU: fprintf (file, "hi"); break; case GEU: fprintf (file, "nc"); break; default: ! output_operand_lossage ("fr30_print_operand: unrecognized %%b code"); break; } return; *************** fr30_print_operand (file, x, code) *** 510,516 **** case GTU: fprintf (file, "ls"); break; case GEU: fprintf (file, "c"); break; default: ! output_operand_lossage ("fr30_print_operand: unrecognised %B code"); break; } return; --- 521,527 ---- case GTU: fprintf (file, "ls"); break; case GEU: fprintf (file, "c"); break; default: ! output_operand_lossage ("fr30_print_operand: unrecognized %%B code"); break; } return; *************** fr30_print_operand (file, x, code) *** 518,524 **** case 'A': /* Print a signed byte value as an unsigned value. */ if (GET_CODE (x) != CONST_INT) ! output_operand_lossage ("fr30_print_operand: invalid operand to %A code"); else { HOST_WIDE_INT val; --- 529,535 ---- case 'A': /* Print a signed byte value as an unsigned value. */ if (GET_CODE (x) != CONST_INT) ! output_operand_lossage ("fr30_print_operand: invalid operand to %%A code"); else { HOST_WIDE_INT val; *************** fr30_print_operand (file, x, code) *** 535,548 **** if (GET_CODE (x) != CONST_INT || INTVAL (x) < 16 || INTVAL (x) > 32) ! output_operand_lossage ("fr30_print_operand: invalid %x code"); else fprintf (file, "%d", INTVAL (x) - 16); return; case 'F': if (GET_CODE (x) != CONST_DOUBLE) ! output_operand_lossage ("fr30_print_operand: invalid %F code"); else { REAL_VALUE_TYPE d; --- 546,559 ---- if (GET_CODE (x) != CONST_INT || INTVAL (x) < 16 || INTVAL (x) > 32) ! output_operand_lossage ("fr30_print_operand: invalid %%x code"); else fprintf (file, "%d", INTVAL (x) - 16); return; case 'F': if (GET_CODE (x) != CONST_DOUBLE) ! output_operand_lossage ("fr30_print_operand: invalid %%F code"); else { REAL_VALUE_TYPE d; *************** fr30_move_double (operands) *** 1002,1010 **** if (reverse) { ! emit_insn (gen_rtx_SET (VOIDmode, dest1, change_address (src, SImode, addr))); ! emit_insn (gen_rtx_SET (SImode, dest0, gen_rtx_REG (SImode, REGNO (addr)))); ! emit_insn (gen_rtx_SET (SImode, dest0, plus_constant (dest0, UNITS_PER_WORD))); new_mem = gen_rtx_MEM (SImode, dest0); MEM_COPY_ATTRIBUTES (new_mem, src); --- 1013,1024 ---- if (reverse) { ! emit_insn (gen_rtx_SET (VOIDmode, dest1, ! adjust_address (src, SImode, 0))); ! emit_insn (gen_rtx_SET (SImode, dest0, ! gen_rtx_REG (SImode, REGNO (addr)))); ! emit_insn (gen_rtx_SET (SImode, dest0, ! plus_constant (dest0, UNITS_PER_WORD))); new_mem = gen_rtx_MEM (SImode, dest0); MEM_COPY_ATTRIBUTES (new_mem, src); *************** fr30_move_double (operands) *** 1013,1021 **** } else { ! emit_insn (gen_rtx_SET (VOIDmode, dest0, change_address (src, SImode, addr))); ! emit_insn (gen_rtx_SET (SImode, dest1, gen_rtx_REG (SImode, REGNO (addr)))); ! emit_insn (gen_rtx_SET (SImode, dest1, plus_constant (dest1, UNITS_PER_WORD))); new_mem = gen_rtx_MEM (SImode, dest1); MEM_COPY_ATTRIBUTES (new_mem, src); --- 1027,1038 ---- } else { ! emit_insn (gen_rtx_SET (VOIDmode, dest0, ! adjust_address (src, SImode, 0))); ! emit_insn (gen_rtx_SET (SImode, dest1, ! gen_rtx_REG (SImode, REGNO (addr)))); ! emit_insn (gen_rtx_SET (SImode, dest1, ! plus_constant (dest1, UNITS_PER_WORD))); new_mem = gen_rtx_MEM (SImode, dest1); MEM_COPY_ATTRIBUTES (new_mem, src); *************** fr30_move_double (operands) *** 1048,1059 **** src0 = operand_subword (src, 0, TRUE, mode); src1 = operand_subword (src, 1, TRUE, mode); ! emit_insn (gen_rtx_SET (VOIDmode, change_address (dest, SImode, addr), src0)); ! if (REGNO (addr) == STACK_POINTER_REGNUM) ! emit_insn (gen_rtx_SET (VOIDmode, change_address (dest, SImode, plus_constant (stack_pointer_rtx, UNITS_PER_WORD)), src1)); ! else if (REGNO (addr) == FRAME_POINTER_REGNUM) ! emit_insn (gen_rtx_SET (VOIDmode, change_address (dest, SImode, plus_constant (frame_pointer_rtx, UNITS_PER_WORD)), src1)); else { rtx new_mem; --- 1065,1078 ---- src0 = operand_subword (src, 0, TRUE, mode); src1 = operand_subword (src, 1, TRUE, mode); ! emit_insn (gen_rtx_SET (VOIDmode, adjust_address (dest, SImode, 0), ! src0)); ! if (REGNO (addr) == STACK_POINTER_REGNUM ! || REGNO (addr) == FRAME_POINTER_REGNUM) ! emit_insn (gen_rtx_SET (VOIDmode, ! adjust_address (dest, SImode, UNITS_PER_WORD), ! src1)); else { rtx new_mem; *************** fr30_move_double (operands) *** 1073,1079 **** } } else ! /* This should have been prevented by the contraints on movdi_insn. */ abort (); val = gen_sequence (); --- 1092,1098 ---- } } else ! /* This should have been prevented by the constraints on movdi_insn. */ abort (); val = gen_sequence (); *************** fr30_move_double (operands) *** 1081,1090 **** return val; } - - /*}}}*/ - - /* Local Variables: */ - /* folded-file: t */ - /* End: */ - --- 1100,1102 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/fr30/fr30.h gcc-3.1/gcc/config/fr30/fr30.h *** gcc-3.0.4/gcc/config/fr30/fr30.h Thu Nov 2 23:29:09 2000 --- gcc-3.1/gcc/config/fr30/fr30.h Wed Feb 20 18:31:17 2002 *************** *** 1,7 **** /*{{{ Comment. */ /* Definitions of FR30 target. ! Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This file is part of GNU CC. --- 1,7 ---- /*{{{ Comment. */ /* Definitions of FR30 target. ! Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This file is part of GNU CC. *************** the Free Software Foundation, 59 Temple *** 22,61 **** Boston, MA 02111-1307, USA. */ /*}}}*/ - /*{{{ Includes. */ - - /* Set up System V.4 (aka ELF) defaults. */ - #include "svr4.h" - - /* Include prototyping macros */ - #include "gansidecl.h" - - /*}}}*/ /*{{{ Driver configuration. */ ! /* A C expression which determines whether the option `-CHAR' takes arguments. ! The value should be the number of arguments that option takes-zero, for many ! options. ! ! By default, this macro is defined to handle the standard options properly. ! You need not define it unless you wish to add additional options which take ! arguments. ! ! Defined in svr4.h. */ #undef SWITCH_TAKES_ARG ! /* A C expression which determines whether the option `-NAME' takes arguments. ! The value should be the number of arguments that option takes-zero, for many ! options. This macro rather than `SWITCH_TAKES_ARG' is used for ! multi-character option names. ! ! By default, this macro is defined as `DEFAULT_WORD_SWITCH_TAKES_ARG', which ! handles the standard options properly. You need not define ! `WORD_SWITCH_TAKES_ARG' unless you wish to add additional options which take ! arguments. Any redefinition should call `DEFAULT_WORD_SWITCH_TAKES_ARG' and ! then check for additional options. ! ! Defined in svr4.h. */ #undef WORD_SWITCH_TAKES_ARG /*}}}*/ --- 22,33 ---- Boston, MA 02111-1307, USA. */ /*}}}*/ /*{{{ Driver configuration. */ ! /* Defined in svr4.h. */ #undef SWITCH_TAKES_ARG ! /* Defined in svr4.h. */ #undef WORD_SWITCH_TAKES_ARG /*}}}*/ *************** extern int target_flags; *** 90,98 **** #define TARGET_VERSION fprintf (stderr, " (fr30)"); - /* Define this macro if debugging can be performed even without a frame - pointer. If this macro is defined, GNU CC will turn on the - `-fomit-frame-pointer' option whenever `-O' is specified. */ #define CAN_DEBUG_WITHOUT_FP #undef STARTFILE_SPEC --- 62,67 ---- *************** extern int target_flags; *** 108,168 **** /*}}}*/ /*{{{ Storage Layout. */ - /* Define this macro to have the value 1 if the most significant bit in a byte - has the lowest number; otherwise define it to have the value zero. This - means that bit-field instructions count from the most significant bit. If - the machine has no bit-field instructions, then this must still be defined, - but it doesn't matter which value it is defined to. This macro need not be - a constant. - - This macro does not affect the way structure fields are packed into bytes or - words; that is controlled by `BYTES_BIG_ENDIAN'. */ #define BITS_BIG_ENDIAN 1 - /* Define this macro to have the value 1 if the most significant byte in a word - has the lowest number. This macro need not be a constant. */ #define BYTES_BIG_ENDIAN 1 - /* Define this macro to have the value 1 if, in a multiword object, the most - significant word has the lowest number. This applies to both memory - locations and registers; GNU CC fundamentally assumes that the order of - words in memory is the same as the order in registers. This macro need not - be a constant. */ #define WORDS_BIG_ENDIAN 1 - /* Define this macro to be the number of bits in an addressable storage unit - (byte); normally 8. */ #define BITS_PER_UNIT 8 - /* Number of bits in a word; normally 32. */ #define BITS_PER_WORD 32 - /* Number of storage units in a word; normally 4. */ #define UNITS_PER_WORD 4 - /* Width of a pointer, in bits. You must specify a value no wider than the - width of `Pmode'. If it is not equal to the width of `Pmode', you must - define `POINTERS_EXTEND_UNSIGNED'. */ #define POINTER_SIZE 32 - /* A macro to update MODE and UNSIGNEDP when an object whose type is TYPE and - which has the specified mode and signedness is to be stored in a register. - This macro is only called when TYPE is a scalar type. - - On most RISC machines, which only have operations that operate on a full - register, define this macro to set M to `word_mode' if M is an integer mode - narrower than `BITS_PER_WORD'. In most cases, only integer modes should be - widened because wider-precision floating-point operations are usually more - expensive than their narrower counterparts. - - For most machines, the macro definition does not change UNSIGNEDP. However, - some machines, have instructions that preferentially handle either signed or - unsigned quantities of certain modes. For example, on the DEC Alpha, 32-bit - loads from memory and 32-bit add instructions sign-extend the result to 64 - bits. On such machines, set UNSIGNEDP according to which kind of extension - is more efficient. - - Do not define this macro if it would never modify MODE. */ #define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE) \ do \ { \ --- 77,96 ---- *************** extern int target_flags; *** 172,332 **** } \ while (0) - /* Normal alignment required for function parameters on the stack, in bits. - All stack parameters receive at least this much alignment regardless of data - type. On most machines, this is the same as the size of an integer. */ #define PARM_BOUNDARY 32 - /* Define this macro if you wish to preserve a certain alignment for the stack - pointer. The definition is a C expression for the desired alignment - (measured in bits). - - If `PUSH_ROUNDING' is not defined, the stack will always be aligned to the - specified boundary. If `PUSH_ROUNDING' is defined and specifies a less - strict alignment than `STACK_BOUNDARY', the stack may be momentarily - unaligned while pushing arguments. */ #define STACK_BOUNDARY 32 - /* Alignment required for a function entry point, in bits. */ #define FUNCTION_BOUNDARY 32 - /* Biggest alignment that any data type can require on this machine, - in bits. */ #define BIGGEST_ALIGNMENT 32 - /* If defined, a C expression to compute the alignment for a static variable. - TYPE is the data type, and ALIGN is the alignment that the object - would ordinarily have. The value of this macro is used instead of that - alignment to align the object. - - If this macro is not defined, then ALIGN is used. - - One use of this macro is to increase alignment of medium-size data to make - it all fit in fewer cache lines. Another is to cause character arrays to be - word-aligned so that `strcpy' calls that copy constants to character arrays - can be done inline. */ #define DATA_ALIGNMENT(TYPE, ALIGN) \ (TREE_CODE (TYPE) == ARRAY_TYPE \ && TYPE_MODE (TREE_TYPE (TYPE)) == QImode \ && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN)) - /* If defined, a C expression to compute the alignment given to a constant that - is being placed in memory. CONSTANT is the constant and ALIGN is the - alignment that the object would ordinarily have. The value of this macro is - used instead of that alignment to align the object. - - If this macro is not defined, then ALIGN is used. - - The typical use of this macro is to increase alignment for string constants - to be word aligned so that `strcpy' calls that copy constants can be done - inline. */ #define CONSTANT_ALIGNMENT(EXP, ALIGN) \ (TREE_CODE (EXP) == STRING_CST \ && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN)) - /* Define this macro to be the value 1 if instructions will fail to work if - given data not on the nominal alignment. If instructions will merely go - slower in that case, define this macro as 0. */ #define STRICT_ALIGNMENT 1 ! /* Define this if you wish to imitate the way many other C compilers handle ! alignment of bitfields and the structures that contain them. ! ! The behavior is that the type written for a bitfield (`int', `short', or ! other integer type) imposes an alignment for the entire structure, as if the ! structure really did contain an ordinary field of that type. In addition, ! the bitfield is placed within the structure so that it would fit within such ! a field, not crossing a boundary for it. ! ! Thus, on most machines, a bitfield whose type is written as `int' would not ! cross a four-byte boundary, and would force four-byte alignment for the ! whole structure. (The alignment used may not be four bytes; it is ! controlled by the other alignment parameters.) ! ! If the macro is defined, its definition should be a C expression; a nonzero ! value for the expression enables this behavior. ! ! Note that if this macro is not defined, or its value is zero, some bitfields ! may cross more than one alignment boundary. The compiler can support such ! references if there are `insv', `extv', and `extzv' insns that can directly ! reference memory. ! ! The other known way of making bitfields work is to define ! `STRUCTURE_SIZE_BOUNDARY' as large as `BIGGEST_ALIGNMENT'. Then every ! structure can be accessed with fullwords. ! ! Unless the machine has bitfield instructions or you define ! `STRUCTURE_SIZE_BOUNDARY' that way, you must define ! `PCC_BITFIELD_TYPE_MATTERS' to have a nonzero value. ! ! If your aim is to make GNU CC use the same conventions for laying out ! bitfields as are used by another compiler, here is how to investigate what ! the other compiler does. Compile and run this program: ! ! struct foo1 ! { ! char x; ! char :0; ! char y; ! }; ! ! struct foo2 ! { ! char x; ! int :0; ! char y; ! }; ! ! main () ! { ! printf ("Size of foo1 is %d\n", ! sizeof (struct foo1)); ! printf ("Size of foo2 is %d\n", ! sizeof (struct foo2)); ! exit (0); ! } ! ! If this prints 2 and 5, then the compiler's behavior is what you would get ! from `PCC_BITFIELD_TYPE_MATTERS'. ! ! Defined in svr4.h. */ #define PCC_BITFIELD_TYPE_MATTERS 1 - /* A code distinguishing the floating point format of the target machine. - There are three defined values: - - IEEE_FLOAT_FORMAT' - This code indicates IEEE floating point. It is the default; - there is no need to define this macro when the format is IEEE. - - VAX_FLOAT_FORMAT' - This code indicates the peculiar format used on the Vax. - - UNKNOWN_FLOAT_FORMAT' - This code indicates any other format. - - The value of this macro is compared with `HOST_FLOAT_FORMAT' - to determine whether the target machine has the same format as - the host machine. If any other formats are actually in use on supported - machines, new codes should be defined for them. - - The ordering of the component words of floating point values stored in - memory is controlled by `FLOAT_WORDS_BIG_ENDIAN' for the target machine and - `HOST_FLOAT_WORDS_BIG_ENDIAN' for the host. */ #define TARGET_FLOAT_FORMAT IEEE_FLOAT_FORMAT - /* GNU CC supports two ways of implementing C++ vtables: traditional or with - so-called "thunks". The flag `-fvtable-thunk' chooses between them. Define - this macro to be a C expression for the default value of that flag. If - `DEFAULT_VTABLE_THUNKS' is 0, GNU CC uses the traditional implementation by - default. The "thunk" implementation is more efficient (especially if you - have provided an implementation of `ASM_OUTPUT_MI_THUNK', but is not binary - compatible with code compiled using the traditional implementation. If you - are writing a new ports, define `DEFAULT_VTABLE_THUNKS' to 1. - - If you do not define this macro, the default for `-fvtable-thunk' is 0. */ - #define DEFAULT_VTABLE_THUNKS 1 - /*}}}*/ /*{{{ Layout of Source Language Data Types. */ --- 100,129 ---- } \ while (0) #define PARM_BOUNDARY 32 #define STACK_BOUNDARY 32 #define FUNCTION_BOUNDARY 32 #define BIGGEST_ALIGNMENT 32 #define DATA_ALIGNMENT(TYPE, ALIGN) \ (TREE_CODE (TYPE) == ARRAY_TYPE \ && TYPE_MODE (TREE_TYPE (TYPE)) == QImode \ && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN)) #define CONSTANT_ALIGNMENT(EXP, ALIGN) \ (TREE_CODE (EXP) == STRING_CST \ && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN)) #define STRICT_ALIGNMENT 1 ! /* Defined in svr4.h. */ #define PCC_BITFIELD_TYPE_MATTERS 1 #define TARGET_FLOAT_FORMAT IEEE_FLOAT_FORMAT /*}}}*/ /*{{{ Layout of Source Language Data Types. */ *************** extern int target_flags; *** 339,357 **** #define DOUBLE_TYPE_SIZE 64 #define LONG_DOUBLE_TYPE_SIZE 64 - /* An expression whose value is 1 or 0, according to whether the type `char' - should be signed or unsigned by default. The user can always override this - default with the options `-fsigned-char' and `-funsigned-char'. */ #define DEFAULT_SIGNED_CHAR 1 - #define TARGET_BELL 0x7 /* '\a' */ - #define TARGET_BS 0x8 /* '\b' */ - #define TARGET_TAB 0x9 /* '\t' */ - #define TARGET_NEWLINE 0xa /* '\n' */ - #define TARGET_VT 0xb /* '\v' */ - #define TARGET_FF 0xc /* '\f' */ - #define TARGET_CR 0xd /* '\r' */ - /*}}}*/ /*{{{ REGISTER BASICS. */ --- 136,143 ---- *************** enum reg_class *** 646,656 **** /*}}}*/ /*{{{ CONSTANTS. */ - /* Return true if a value is inside a range */ - #define IN_RANGE(VALUE, LOW, HIGH) \ - ( ((unsigned HOST_WIDE_INT)((VALUE) - (LOW))) \ - <= ((unsigned HOST_WIDE_INT)( (HIGH) - (LOW)))) - /* A C expression that defines the machine-dependent operand constraint letters (`I', `J', `K', .. 'P') that specify particular ranges of integer values. If C is one of those letters, the expression should check that VALUE, an --- 432,437 ---- *************** enum reg_class *** 847,853 **** FUNDECL is a C variable whose value is a tree node that describes the function in question. Normally it is a node of type `FUNCTION_DECL' that describes the declaration of the function. From this it is possible to ! obtain the DECL_MACHINE_ATTRIBUTES of the function. FUNTYPE is a C variable whose value is a tree node that describes the function in question. Normally it is a node of type `FUNCTION_TYPE' that --- 628,634 ---- FUNDECL is a C variable whose value is a tree node that describes the function in question. Normally it is a node of type `FUNCTION_DECL' that describes the declaration of the function. From this it is possible to ! obtain the DECL_ATTRIBUTES of the function. FUNTYPE is a C variable whose value is a tree node that describes the function in question. Normally it is a node of type `FUNCTION_TYPE' that *************** enum reg_class *** 865,871 **** variable number of bytes is passed, it is zero, and argument popping will always be the responsibility of the calling function. ! On the Vax, all functions always pop their arguments, so the definition of this macro is STACK-SIZE. On the 68000, using the standard calling convention, no functions pop their arguments, so the value of the macro is always 0 in this case. But an alternative calling convention is available --- 646,652 ---- variable number of bytes is passed, it is zero, and argument popping will always be the responsibility of the calling function. ! On the VAX, all functions always pop their arguments, so the definition of this macro is STACK-SIZE. On the 68000, using the standard calling convention, no functions pop their arguments, so the value of the macro is always 0 in this case. But an alternative calling convention is available *************** do \ *** 1393,1409 **** same word of the structure, but to different bytes. */ #define SLOW_BYTE_ACCESS 1 - /* Define this macro if zero-extension (of a `char' or `short' to an `int') can - be done faster if the destination is a register that is known to be zero. - - If you define this macro, you must have instruction patterns that recognize - RTL structures like this: - - (set (strict_low_part (subreg:QI (reg:SI ...) 0)) ...) - - and likewise for `HImode'. */ - #define SLOW_ZERO_EXTEND 0 - /*}}}*/ /*{{{ Dividing the output into sections. */ --- 1174,1179 ---- *************** do \ *** 1447,1530 **** #define ASM_APP_OFF "#NO_APP\n" /*}}}*/ - /*{{{ Output of Data. */ - - /* This is how to output an assembler line defining a `float' constant. */ - #define ASM_OUTPUT_FLOAT(FILE, VALUE) \ - do \ - { \ - long t; \ - char str[30]; \ - \ - REAL_VALUE_TO_TARGET_SINGLE ((VALUE), t); \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", str); \ - \ - fprintf (FILE, "\t.word\t0x%lx %s %s\n", \ - t, ASM_COMMENT_START, str); \ - } \ - while (0) - - /* This is how to output an assembler line defining a `double' constant. */ - #define ASM_OUTPUT_DOUBLE(FILE, VALUE) \ - do \ - { \ - long t[2]; \ - char str[30]; \ - \ - REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), t); \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", str); \ - \ - fprintf (FILE, "\t.word\t0x%lx %s %s\n\t.word\t0x%lx\n", \ - t[0], ASM_COMMENT_START, str, t[1]); \ - } \ - while (0) - - /* This is how to output an assembler line defining a `char' constant. */ - #define ASM_OUTPUT_CHAR(FILE, VALUE) \ - do \ - { \ - fprintf (FILE, "\t.byte\t"); \ - output_addr_const (FILE, (VALUE)); \ - fprintf (FILE, "\n"); \ - } \ - while (0) - - /* This is how to output an assembler line defining a `short' constant. */ - #define ASM_OUTPUT_SHORT(FILE, VALUE) \ - do \ - { \ - fprintf (FILE, "\t.hword\t"); \ - output_addr_const (FILE, (VALUE)); \ - fprintf (FILE, "\n"); \ - } \ - while (0) - - /* This is how to output an assembler line defining an `int' constant. - We also handle symbol output here. */ - #define ASM_OUTPUT_INT(FILE, VALUE) \ - do \ - { \ - fprintf (FILE, "\t.word\t"); \ - output_addr_const (FILE, (VALUE)); \ - fprintf (FILE, "\n"); \ - } \ - while (0) - - /* A C statement to output to the stdio stream STREAM an assembler instruction - to assemble a single byte containing the number VALUE. */ - #define ASM_OUTPUT_BYTE(STREAM, VALUE) \ - fprintf (STREAM, "%s0x%x\n", ASM_BYTE_OP, (VALUE)) - - /* These macros are defined as C string constant, describing the syntax in the - assembler for grouping arithmetic expressions. The following definitions - are correct for most assemblers: - - #define ASM_OPEN_PAREN "(" - #define ASM_CLOSE_PAREN ")" */ - #define ASM_OPEN_PAREN "(" - #define ASM_CLOSE_PAREN ")" - - /*}}}*/ /*{{{ Output and Generation of Labels. */ /* A C statement (sans semicolon) to output to the stdio stream STREAM the --- 1217,1222 ---- *************** fprintf (STREAM, "\t.word .L%d\n", VALUE *** 1664,1713 **** fprintf ((STREAM), "\t.p2align %d\n", (POWER)) /*}}}*/ - /*{{{ Macros Affecting all Debug Formats. */ - - /* A C expression that returns the DBX register number for the compiler - register number REGNO. In simple cases, the value of this expression may be - REGNO itself. But sometimes there are some registers that the compiler - knows about and DBX does not, or vice versa. In such cases, some register - may need to have one number in the compiler and another for DBX. - - If two registers have consecutive numbers inside GNU CC, and they can be - used as a pair to hold a multiword value, then they *must* have consecutive - numbers after renumbering with `DBX_REGISTER_NUMBER'. Otherwise, debuggers - will be unable to access such a pair, because they expect register pairs to - be consecutive in their own numbering scheme. - - If you find yourself defining `DBX_REGISTER_NUMBER' in way that does not - preserve register pairs, then what you must do instead is redefine the - actual register numbering scheme. */ - #define DBX_REGISTER_NUMBER(REGNO) (REGNO) - - /*}}}*/ - /*{{{ Macros for SDB and Dwarf Output. */ - - /* Define this macro to allow references to structure, union, or enumeration - tags that have not yet been seen to be handled. Some assemblers choke if - forward tags are used, while some require it. */ - /* #define SDB_ALLOW_FORWARD_REFERENCES */ - - #define DWARF_LINE_MIN_INSTR_LENGTH 2 - - /*}}}*/ /*{{{ Miscellaneous Parameters. */ /* An alias for a machine mode name. This is the machine mode that elements of a jump-table should have. */ #define CASE_VECTOR_MODE SImode - /* An alias for a tree code that is the easiest kind of division to compile - code for in the general case. It may be `TRUNC_DIV_EXPR', `FLOOR_DIV_EXPR', - `CEIL_DIV_EXPR' or `ROUND_DIV_EXPR'. These four division operators differ - in how they round the result to an integer. `EASY_DIV_EXPR' is used when it - is permissible to use any of those kinds of division and the choice should - be made on the basis of efficiency. */ - #define EASY_DIV_EXPR TRUNC_DIV_EXPR - /* The maximum number of bytes that a single instruction can move quickly from memory to memory. */ #define MOVE_MAX 8 --- 1356,1367 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/fr30/fr30.md gcc-3.1/gcc/config/fr30/fr30.md *** gcc-3.0.4/gcc/config/fr30/fr30.md Fri May 12 20:57:57 2000 --- gcc-3.1/gcc/config/fr30/fr30.md Wed Mar 20 21:54:51 2002 *************** *** 1,5 **** - ;;{{{ Comment - ;; FR30 machine description. ;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. ;; Contributed by Cygnus Solutions. --- 1,3 ---- *************** *** 570,576 **** "" "* { ! char * ldi_instr; const char * tmp_reg; static char buffer[100]; REAL_VALUE_TYPE d; --- 568,574 ---- "" "* { ! const char * ldi_instr; const char * tmp_reg; static char buffer[100]; REAL_VALUE_TYPE d; *************** *** 1191,1197 **** { static char buffer [100]; const char * tmp_reg; ! char * ldi_insn; tmp_reg = reg_names [COMPILER_SCRATCH_REGISTER]; --- 1189,1195 ---- { static char buffer [100]; const char * tmp_reg; ! const char * ldi_insn; tmp_reg = reg_names [COMPILER_SCRATCH_REGISTER]; *************** *** 1245,1251 **** { static char buffer [100]; const char * tmp_reg; ! char * ldi_insn; tmp_reg = reg_names [COMPILER_SCRATCH_REGISTER]; --- 1243,1249 ---- { static char buffer [100]; const char * tmp_reg; ! const char * ldi_insn; tmp_reg = reg_names [COMPILER_SCRATCH_REGISTER]; *************** *** 1305,1313 **** ;; Normal unconditional jump. ;; For a description of the computation of the length ;; attribute see the branch patterns above. (define_insn "jump" ! [(set (pc) (label_ref (match_operand 0 "" ""))) ! (clobber (reg:SI 0))] "" "* { --- 1303,1314 ---- ;; Normal unconditional jump. ;; For a description of the computation of the length ;; attribute see the branch patterns above. + ;; + ;; Although this instruction really clobbers r0, flow + ;; relies on jump being simplejump_p in several places + ;; and as r0 is fixed, this doesn't change anything (define_insn "jump" ! [(set (pc) (label_ref (match_operand 0 "" "")))] "" "* { *************** *** 1317,1323 **** { static char buffer [100]; const char * tmp_reg; ! char * ldi_insn; tmp_reg = reg_names [COMPILER_SCRATCH_REGISTER]; --- 1318,1324 ---- { static char buffer [100]; const char * tmp_reg; ! const char * ldi_insn; tmp_reg = reg_names [COMPILER_SCRATCH_REGISTER]; *************** *** 1360,1366 **** ;; Called after register allocation to add any instructions needed for the ;; prologue. Using a prologue insn is favored compared to putting all of the ! ;; instructions in the FUNCTION_PROLOGUE macro, since it allows the scheduler ;; to intermix instructions with the saves of the caller saved registers. In ;; some cases, it might be necessary to emit a barrier instruction as the last ;; insn to prevent such scheduling. --- 1361,1367 ---- ;; Called after register allocation to add any instructions needed for the ;; prologue. Using a prologue insn is favored compared to putting all of the ! ;; instructions in output_function_prologue(), since it allows the scheduler ;; to intermix instructions with the saves of the caller saved registers. In ;; some cases, it might be necessary to emit a barrier instruction as the last ;; insn to prevent such scheduling. *************** *** 1374,1381 **** ) ;; Called after register allocation to add any instructions needed for the ! ;; epilogue. Using a epilogue insn is favored compared to putting all of the ! ;; instructions in the FUNCTION_EPILOGUE macro, since it allows the scheduler ;; to intermix instructions with the restores of the caller saved registers. ;; In some cases, it might be necessary to emit a barrier instruction as the ;; first insn to prevent such scheduling. --- 1375,1382 ---- ) ;; Called after register allocation to add any instructions needed for the ! ;; epilogue. Using an epilogue insn is favored compared to putting all of the ! ;; instructions in output_function_epilogue(), since it allows the scheduler ;; to intermix instructions with the restores of the caller saved registers. ;; In some cases, it might be necessary to emit a barrier instruction as the ;; first insn to prevent such scheduling. *************** *** 1441,1445 **** ;; mode: md ;; folded-file: t ;; End: - - ;;}}} --- 1442,1444 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/fr30/lib1funcs.asm gcc-3.1/gcc/config/fr30/lib1funcs.asm *** gcc-3.0.4/gcc/config/fr30/lib1funcs.asm Mon May 15 23:14:16 2000 --- gcc-3.1/gcc/config/fr30/lib1funcs.asm Thu May 17 03:15:53 2001 *************** *** 1,4 **** ! /* libgcc1 routines for the FR30. Copyright (C) 1998, 1999 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- ! /* libgcc routines for the FR30. Copyright (C) 1998, 1999 Free Software Foundation, Inc. This file is part of GNU CC. diff -Nrc3pad gcc-3.0.4/gcc/config/fr30/t-fr30 gcc-3.1/gcc/config/fr30/t-fr30 *** gcc-3.0.4/gcc/config/fr30/t-fr30 Sun Oct 3 20:14:14 1999 --- gcc-3.1/gcc/config/fr30/t-fr30 Thu May 17 03:15:53 2001 *************** *** 1,12 **** - - # Name of assembly file containing libgcc1 functions. - # This entry must be present, but it can be empty if the target does - # not need any assembler functions to support its code generation. - # CROSS_LIBGCC1 = - # - # Alternatively if assembler functions *are* needed then define the - # entries below: - CROSS_LIBGCC1 = libgcc1-asm.a LIB1ASMSRC = fr30/lib1funcs.asm LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 --- 1,3 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/fr30/xm-fr30.h gcc-3.1/gcc/config/fr30/xm-fr30.h *** gcc-3.0.4/gcc/config/fr30/xm-fr30.h Thu Mar 15 19:02:03 2001 --- gcc-3.1/gcc/config/fr30/xm-fr30.h Thu Jan 1 00:00:00 1970 *************** *** 1,43 **** - /* Definitions of FR30 target. - Copyright (C) 1998, 1999 Free Software Foundation, Inc. - Contributed by Cygnus Solutions. - - 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. */ - - /* A C expression for the status code to be returned when the compiler exits - after serious errors. */ - #define FATAL_EXIT_CODE 33 - - /* A C expression for the status code to be returned when the compiler exits - without serious errors. */ - #define SUCCESS_EXIT_CODE 0 - - /* Defined if the host machine stores words of multi-word values in big-endian - order. (GNU CC does not depend on the host byte ordering within a word.) */ - /* #define HOST_WORDS_BIG_ENDIAN 1 */ - - /* In addition, configuration files for system V define `bcopy', `bzero' and - `bcmp' as aliases. Some files define `alloca' as a macro when compiled with - GNU CC, in order to take advantage of the benefit of GNU CC's built-in - `alloca'. */ - - /* target machine dependencies. - tm.h is a symbolic link to the actual target specific file. */ - #include "tm.h" - - /* end of xm-fr30.h */ --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/freebsd-spec.h gcc-3.1/gcc/config/freebsd-spec.h *** gcc-3.0.4/gcc/config/freebsd-spec.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/freebsd-spec.h Wed Nov 21 02:06:45 2001 *************** *** 0 **** --- 1,149 ---- + /* Base configuration file for all FreeBSD targets. + Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GNU CC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU CC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + /* Common FreeBSD configuration. + All FreeBSD architectures should include this file, which will specify + their commonalities. + Adapted from gcc/config/freebsd.h by + David O'Brien + Loren J. Rittle . */ + + + /* In case we need to know. */ + #define USING_CONFIG_FREEBSD_SPEC 1 + + /* This defines which switch letters take arguments. On FreeBSD, most of + the normal cases (defined in gcc.c) apply, and we also have -h* and + -z* options (for the linker) (coming from SVR4). + We also have -R (alias --rpath), no -z, --soname (-h), --assert etc. */ + + #define FBSD_SWITCH_TAKES_ARG(CHAR) \ + (DEFAULT_SWITCH_TAKES_ARG (CHAR) \ + || (CHAR) == 'h' \ + || (CHAR) == 'z' /* ignored by ld */ \ + || (CHAR) == 'R') + + /* This defines which multi-letter switches take arguments. */ + + #define FBSD_WORD_SWITCH_TAKES_ARG(STR) \ + (DEFAULT_WORD_SWITCH_TAKES_ARG (STR) \ + || !strcmp ((STR), "rpath") || !strcmp ((STR), "rpath-link") \ + || !strcmp ((STR), "soname") || !strcmp ((STR), "defsym") \ + || !strcmp ((STR), "assert") || !strcmp ((STR), "dynamic-linker")) + + #if FBSD_MAJOR == 6 + #define FBSD_CPP_PREDEFINES \ + "-D__FreeBSD__=6 -Dunix -D__ELF__ -D__KPRINTF_ATTRIBUTE__ -Asystem=unix -Asystem=bsd -Asystem=FreeBSD" + #endif + + #if FBSD_MAJOR == 5 + #define FBSD_CPP_PREDEFINES \ + "-D__FreeBSD__=5 -Dunix -D__ELF__ -D__KPRINTF_ATTRIBUTE__ -Asystem=unix -Asystem=bsd -Asystem=FreeBSD" + #endif + + #if FBSD_MAJOR == 4 + #define FBSD_CPP_PREDEFINES \ + "-D__FreeBSD__=4 -Dunix -D__ELF__ -D__KPRINTF_ATTRIBUTE__ -Asystem=unix -Asystem=bsd -Asystem=FreeBSD" + #endif + + #if FBSD_MAJOR == 3 + #define FBSD_CPP_PREDEFINES \ + "-D__FreeBSD__=3 -Dunix -D__ELF__ -D__KPRINTF_ATTRIBUTE__ -Asystem=unix -Asystem=bsd -Asystem=FreeBSD" + #endif + + #ifndef FBSD_CPP_PREDEFINES + #define FBSD_CPP_PREDEFINES \ + "-D__FreeBSD__ -Dunix -D__ELF__ -D__KPRINTF_ATTRIBUTE__ -Asystem=unix -Asystem=bsd -Asystem=FreeBSD" + #endif + + /* Provide a CPP_SPEC appropriate for FreeBSD. We just deal with the GCC + option `-posix', and PIC issues. */ + + #define FBSD_CPP_SPEC " \ + %(cpp_cpu) \ + %{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} \ + %{posix:-D_POSIX_SOURCE}" + + /* Provide a STARTFILE_SPEC appropriate for FreeBSD. Here we add + the magical crtbegin.o file (see crtstuff.c) which provides part + of the support for getting C++ file-scope static object constructed + before entering `main'. */ + + #define FBSD_STARTFILE_SPEC \ + "%{!shared: \ + %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} \ + %{!p:%{profile:gcrt1.o%s} \ + %{!profile:crt1.o%s}}}} \ + crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}" + + /* Provide a ENDFILE_SPEC appropriate for FreeBSD. Here we tack on + the magical crtend.o file (see crtstuff.c) which provides part of + the support for getting C++ file-scope static object constructed + before entering `main', followed by a normal "finalizer" file, + `crtn.o'. */ + + #define FBSD_ENDFILE_SPEC \ + "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s" + + /* Provide a LIB_SPEC appropriate for FreeBSD as configured and as + required by the user-land thread model. Before __FreeBSD_version + 500016, select the appropriate libc, depending on whether we're + doing profiling or need threads support. At __FreeBSD_version + 500016 and later, when threads support is requested include both + -lc and -lc_r instead of only -lc_r. To make matters interesting, + we can't actually use __FreeBSD_version provided by + directly since it breaks cross-compiling. As a final twist, make + it a hard error if -pthread is provided on the command line and gcc + was configured with --disable-threads (this will help avoid bug + reports from users complaining about threading when they + misconfigured the gcc bootstrap but are later consulting FreeBSD + manual pages that refer to the mythical -pthread option). */ + + /* Provide a LIB_SPEC appropriate for FreeBSD. Just select the appropriate + libc, depending on whether we're doing profiling or need threads support. + (simular to the default, except no -lg, and no -p). */ + + #ifdef FBSD_NO_THREADS + #define FBSD_LIB_SPEC " \ + %{pthread: %eThe -pthread option is only supported on FreeBSD when gcc \ + is built with the --enable-threads configure-time option.} \ + %{!shared: \ + %{!pg: -lc} \ + %{pg: -lc_p} \ + }" + #else + #if FBSD_MAJOR >= 5 + #define FBSD_LIB_SPEC " \ + %{!shared: \ + %{!pg: %{pthread:-lc_r} -lc} \ + %{pg: %{pthread:-lc_r_p} -lc_p} \ + }" + #else + #define FBSD_LIB_SPEC " \ + %{!shared: \ + %{!pg: \ + %{!pthread:-lc} \ + %{pthread:-lc_r}} \ + %{pg: \ + %{!pthread:-lc_p} \ + %{pthread:-lc_r_p}} \ + }" + #endif + #endif diff -Nrc3pad gcc-3.0.4/gcc/config/freebsd.h gcc-3.1/gcc/config/freebsd.h *** gcc-3.0.4/gcc/config/freebsd.h Sat Nov 3 20:28:24 2001 --- gcc-3.1/gcc/config/freebsd.h Tue Apr 23 16:43:44 2002 *************** Boston, MA 02111-1307, USA. */ *** 27,165 **** Loren J. Rittle . */ ! /* To help with rs6000/sysv4.h carnal knowledge problem. */ ! #define _USING_CONFIG_FREEBSD 1 /* This defines which switch letters take arguments. On FreeBSD, most of the normal cases (defined in gcc.c) apply, and we also have -h* and -z* options (for the linker) (coming from SVR4). We also have -R (alias --rpath), no -z, --soname (-h), --assert etc. */ - #define FBSD_SWITCH_TAKES_ARG(CHAR) \ - (DEFAULT_SWITCH_TAKES_ARG (CHAR) \ - || (CHAR) == 'h' \ - || (CHAR) == 'z' /* ignored by ld */ \ - || (CHAR) == 'R') - #undef SWITCH_TAKES_ARG #define SWITCH_TAKES_ARG(CHAR) (FBSD_SWITCH_TAKES_ARG(CHAR)) - /* This defines which multi-letter switches take arguments. */ - - #define FBSD_WORD_SWITCH_TAKES_ARG(STR) \ - (DEFAULT_WORD_SWITCH_TAKES_ARG (STR) \ - || !strcmp ((STR), "rpath") || !strcmp ((STR), "rpath-link") \ - || !strcmp ((STR), "soname") || !strcmp ((STR), "defsym") \ - || !strcmp ((STR), "assert") || !strcmp ((STR), "dynamic-linker")) - #undef WORD_SWITCH_TAKES_ARG #define WORD_SWITCH_TAKES_ARG(STR) (FBSD_WORD_SWITCH_TAKES_ARG(STR)) - #if FBSD_MAJOR == 6 - #define FBSD_CPP_PREDEFINES \ - "-D__FreeBSD__=6 -Dunix -D__ELF__ -D__KPRINTF_ATTRIBUTE__ -Asystem=unix -Asystem=bsd -Asystem=FreeBSD" - #endif - - #if FBSD_MAJOR == 5 - #define FBSD_CPP_PREDEFINES \ - "-D__FreeBSD__=5 -Dunix -D__ELF__ -D__KPRINTF_ATTRIBUTE__ -Asystem=unix -Asystem=bsd -Asystem=FreeBSD" - #endif - - #if FBSD_MAJOR == 4 - #define FBSD_CPP_PREDEFINES \ - "-D__FreeBSD__=4 -Dunix -D__ELF__ -D__KPRINTF_ATTRIBUTE__ -Asystem=unix -Asystem=bsd -Asystem=FreeBSD" - #endif - - #if FBSD_MAJOR == 3 - #define FBSD_CPP_PREDEFINES \ - "-D__FreeBSD__=3 -Dunix -D__ELF__ -D__KPRINTF_ATTRIBUTE__ -Asystem=unix -Asystem=bsd -Asystem=FreeBSD" - #endif - - #ifndef FBSD_CPP_PREDEFINES - #define FBSD_CPP_PREDEFINES \ - "-D__FreeBSD__ -Dunix -D__ELF__ -D__KPRINTF_ATTRIBUTE__ -Asystem=unix -Asystem=bsd -Asystem=FreeBSD" - #endif - #undef CPP_PREDEFINES #define CPP_PREDEFINES FBSD_CPP_PREDEFINES - /* Provide a CPP_SPEC appropriate for FreeBSD. We just deal with the GCC - option `-posix', and PIC issues. */ - - #define FBSD_CPP_SPEC " \ - %(cpp_cpu) \ - %{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} \ - %{posix:-D_POSIX_SOURCE}" - #undef CPP_SPEC #define CPP_SPEC FBSD_CPP_SPEC ! /* Provide a STARTFILE_SPEC appropriate for FreeBSD. Here we add ! the magical crtbegin.o file (see crtstuff.c) which provides part ! of the support for getting C++ file-scope static object constructed ! before entering `main'. */ ! ! #define FBSD_STARTFILE_SPEC \ ! "%{!shared: \ ! %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} \ ! %{!p:%{profile:gcrt1.o%s} \ ! %{!profile:crt1.o%s}}}} \ ! crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}" ! ! /* Provide a ENDFILE_SPEC appropriate for FreeBSD. Here we tack on ! the magical crtend.o file (see crtstuff.c) which provides part of ! the support for getting C++ file-scope static object constructed ! before entering `main', followed by a normal "finalizer" file, ! `crtn.o'. */ ! ! #define FBSD_ENDFILE_SPEC \ ! "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s" ! ! /* Provide a LIB_SPEC appropriate for FreeBSD as configured and as ! required by the user-land thread model. Before __FreeBSD_version ! 500016, select the appropriate libc, depending on whether we're ! doing profiling or need threads support. At __FreeBSD_version ! 500016 and later, when threads support is requested include both ! -lc and -lc_r instead of only -lc_r. To make matters interesting, ! we can't actually use __FreeBSD_version provided by ! directly since it breaks cross-compiling. As a final twist, make ! it a hard error if -pthread is provided on the command line and gcc ! was configured with --disable-threads (this will help avoid bug ! reports from users complaining about threading when they ! misconfigured the gcc bootstrap but are later consulting FreeBSD ! manual pages that refer to the mythical -pthread option). */ ! ! /* Provide a LIB_SPEC appropriate for FreeBSD. Just select the appropriate ! libc, depending on whether we're doing profiling or need threads support. ! (simular to the default, except no -lg, and no -p). */ ! #ifdef FBSD_NO_THREADS ! #define FBSD_LIB_SPEC " \ ! %{pthread: %eThe -pthread option is only supported on FreeBSD when gcc \ ! is built with the --enable-threads configure-time option.} \ ! %{!shared: \ ! %{!pg: -lc} \ ! %{pg: -lc_p} \ ! }" ! #else ! #if FBSD_MAJOR >= 5 ! #define FBSD_LIB_SPEC " \ ! %{!shared: \ ! %{!pg: %{pthread:-lc_r} -lc} \ ! %{pg: %{pthread:-lc_r_p} -lc_p} \ ! }" ! #else ! #define FBSD_LIB_SPEC " \ ! %{!shared: \ ! %{!pg: \ ! %{!pthread:-lc} \ ! %{pthread:-lc_r}} \ ! %{pg: \ ! %{!pthread:-lc_p} \ ! %{pthread:-lc_r_p}} \ ! }" ! #endif ! #endif #undef LIB_SPEC #define LIB_SPEC FBSD_LIB_SPEC --- 27,57 ---- Loren J. Rittle . */ ! /* In case we need to know. */ ! #define USING_CONFIG_FREEBSD 1 /* This defines which switch letters take arguments. On FreeBSD, most of the normal cases (defined in gcc.c) apply, and we also have -h* and -z* options (for the linker) (coming from SVR4). We also have -R (alias --rpath), no -z, --soname (-h), --assert etc. */ #undef SWITCH_TAKES_ARG #define SWITCH_TAKES_ARG(CHAR) (FBSD_SWITCH_TAKES_ARG(CHAR)) #undef WORD_SWITCH_TAKES_ARG #define WORD_SWITCH_TAKES_ARG(STR) (FBSD_WORD_SWITCH_TAKES_ARG(STR)) #undef CPP_PREDEFINES #define CPP_PREDEFINES FBSD_CPP_PREDEFINES #undef CPP_SPEC #define CPP_SPEC FBSD_CPP_SPEC ! #undef STARTFILE_SPEC ! #define STARTFILE_SPEC FBSD_STARTFILE_SPEC ! #undef ENDFILE_SPEC ! #define ENDFILE_SPEC FBSD_ENDFILE_SPEC #undef LIB_SPEC #define LIB_SPEC FBSD_LIB_SPEC *************** is built with the --enable-threads confi *** 167,238 **** /************************[ Target stuff ]***********************************/ /* Don't assume anything about the header files. */ #undef NO_IMPLICIT_EXTERN_C ! #define NO_IMPLICIT_EXTERN_C /* Allow #sccs in preprocessor. */ #undef SCCS_DIRECTIVE ! #define SCCS_DIRECTIVE /* Make gcc agree with FreeBSD's standard headers (, etc...) */ #undef WCHAR_TYPE ! #define WCHAR_TYPE "int" ! /* Code generation parameters. */ ! /* Don't default to pcc-struct-return, because gcc is the only compiler, and ! we want to retain compatibility with older gcc versions ! (even though the SVR4 ABI for the i386 says that records and unions are ! returned in memory). */ ! #undef DEFAULT_PCC_STRUCT_RETURN ! #define DEFAULT_PCC_STRUCT_RETURN 0 /* Use periods rather than dollar signs in special g++ assembler names. This ensures the configuration knows our system correctly so we can link with libraries compiled with the native cc. */ #undef NO_DOLLAR_IN_LABEL ! /* The prefix to add to user-visible assembler symbols. ! For System V Release 4 & ELF the convention is *not* to prepend a leading ! underscore onto user-level symbol names. Some CPU files such as ! config/sparc/sparc.h set this wrong for ELF. */ ! ! #undef USER_LABEL_PREFIX ! #define USER_LABEL_PREFIX "" ! ! /* Handle #pragma weak and #pragma pack. */ ! #undef HANDLE_SYSV_PRAGMA ! #define HANDLE_SYSV_PRAGMA ! ! /* Use more efficient ``thunks'' to implement C++ vtables. */ ! #undef DEFAULT_VTABLE_THUNKS ! #define DEFAULT_VTABLE_THUNKS 1 ! ! /************************[ Assembler stuff ]********************************/ ! ! #undef IDENT_ASM_OP ! #define IDENT_ASM_OP "\t.ident\t" ! ! /* Output #ident as a .ident. */ ! ! #undef ASM_OUTPUT_IDENT ! #define ASM_OUTPUT_IDENT(FILE, NAME) \ ! fprintf ((FILE), "%s\"%s\"\n", IDENT_ASM_OP, (NAME)); ! ! /************************[ Debugger stuff ]*********************************/ ! ! /* All ELF targets can support DWARF-2. */ ! #undef DWARF2_DEBUGGING_INFO ! #define DWARF2_DEBUGGING_INFO ! ! /* This is BSD, so we want the DBX format. */ ! #undef DBX_DEBUGGING_INFO ! #define DBX_DEBUGGING_INFO ! ! /* Even though this is BSD, ELF and the GNU tools operates better with dwarf2 ! than stabs. Since we don't have any native tools to be compatible with, ! defaulting to dwarf2 is OK. */ ! #undef PREFERRED_DEBUGGING_TYPE ! #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG --- 59,94 ---- /************************[ Target stuff ]***********************************/ + /* All FreeBSD Architectures support the ELF object file format. */ + #undef OBJECT_FORMAT_ELF + #define OBJECT_FORMAT_ELF + /* Don't assume anything about the header files. */ #undef NO_IMPLICIT_EXTERN_C ! #define NO_IMPLICIT_EXTERN_C 1 /* Allow #sccs in preprocessor. */ #undef SCCS_DIRECTIVE ! #define SCCS_DIRECTIVE 1 /* Make gcc agree with FreeBSD's standard headers (, etc...) */ #undef WCHAR_TYPE ! #define WCHAR_TYPE "int" ! #undef WCHAR_UNSIGNED ! #define WCHAR_UNSIGNED 0 ! #define MATH_LIBRARY_PROFILE "-lm_p" ! ! /* Code generation parameters. */ /* Use periods rather than dollar signs in special g++ assembler names. This ensures the configuration knows our system correctly so we can link with libraries compiled with the native cc. */ #undef NO_DOLLAR_IN_LABEL ! /* Used by libgcc2.c. We support file locking with fcntl / F_SETLKW. ! This enables the test coverage code to use file locking when exiting a ! program, which avoids race conditions if the program has forked. */ ! #define TARGET_HAS_F_SETLKW 1 diff -Nrc3pad gcc-3.0.4/gcc/config/gofast.h gcc-3.1/gcc/config/gofast.h *** gcc-3.0.4/gcc/config/gofast.h Thu Sep 9 07:07:41 1999 --- gcc-3.1/gcc/config/gofast.h Sat Aug 18 19:59:46 2001 *************** Boston, MA 02111-1307, USA. */ *** 50,57 **** sub_optab->handlers[(int) DFmode].libfunc = init_one_libfunc ("dpsub"); \ smul_optab->handlers[(int) SFmode].libfunc = init_one_libfunc ("fpmul"); \ smul_optab->handlers[(int) DFmode].libfunc = init_one_libfunc ("dpmul"); \ ! flodiv_optab->handlers[(int) SFmode].libfunc = init_one_libfunc ("fpdiv"); \ ! flodiv_optab->handlers[(int) DFmode].libfunc = init_one_libfunc ("dpdiv"); \ cmp_optab->handlers[(int) SFmode].libfunc = init_one_libfunc ("fpcmp"); \ cmp_optab->handlers[(int) DFmode].libfunc = init_one_libfunc ("dpcmp"); \ \ --- 50,57 ---- sub_optab->handlers[(int) DFmode].libfunc = init_one_libfunc ("dpsub"); \ smul_optab->handlers[(int) SFmode].libfunc = init_one_libfunc ("fpmul"); \ smul_optab->handlers[(int) DFmode].libfunc = init_one_libfunc ("dpmul"); \ ! sdiv_optab->handlers[(int) SFmode].libfunc = init_one_libfunc ("fpdiv"); \ ! sdiv_optab->handlers[(int) DFmode].libfunc = init_one_libfunc ("dpdiv"); \ cmp_optab->handlers[(int) SFmode].libfunc = init_one_libfunc ("fpcmp"); \ cmp_optab->handlers[(int) DFmode].libfunc = init_one_libfunc ("dpcmp"); \ \ diff -Nrc3pad gcc-3.0.4/gcc/config/h8300/crti.asm gcc-3.1/gcc/config/h8300/crti.asm *** gcc-3.0.4/gcc/config/h8300/crti.asm Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/h8300/crti.asm Fri Aug 31 10:24:46 2001 *************** *** 0 **** --- 1,53 ---- + /* Copyright (C) 2001 Free Software Foundation, Inc. + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) any + later version. + + In addition to the permissions in the GNU General Public License, the + Free Software Foundation gives you unlimited permission to link the + compiled version of this file into combinations with other programs, + and to distribute those combinations without any restriction coming + from the use of this file. (The General Public License restrictions + do apply in other respects; for example, they cover modification of + the file, and distribution when not linked into a combine + executable.) + + 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 this program; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + /* The code in sections .init and .fini is supposed to be a single + regular function. The function in .init is called directly from + start in crt0.asm. The function in .fini is atexit()ed in crt0.asm + too. + + crti.asm contributes the prologue of a function to these sections, + and crtn.asm comes up the epilogue. STARTFILE_SPEC should list + crti.o before any other object files that might add code to .init + or .fini sections, and ENDFILE_SPEC should list crtn.o after any + such object files. */ + + #ifdef __H8300H__ + .h8300h + #endif + + #ifdef __H8300S__ + .h8300s + #endif + + .section .init + .global __init + __init: + .section .fini + .global __fini + __fini: diff -Nrc3pad gcc-3.0.4/gcc/config/h8300/crtn.asm gcc-3.1/gcc/config/h8300/crtn.asm *** gcc-3.0.4/gcc/config/h8300/crtn.asm Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/h8300/crtn.asm Thu Aug 30 18:20:33 2001 *************** *** 0 **** --- 1,43 ---- + /* Copyright (C) 2001 Free Software Foundation, Inc. + This file was adapted from glibc sources. + + 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. + + In addition to the permissions in the GNU General Public License, the + Free Software Foundation gives you unlimited permission to link the + compiled version of this file into combinations with other programs, + and to distribute those combinations without any restriction coming + from the use of this file. (The General Public License restrictions + do apply in other respects; for example, they cover modification of + the file, and distribution when not linked into a combine + executable.) + + 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 this program; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + /* See an explanation about .init and .fini in crti.asm. */ + + #ifdef __H8300H__ + .h8300h + #endif + + #ifdef __H8300S__ + .h8300s + #endif + .section .init + rts + + .section .fini + rts diff -Nrc3pad gcc-3.0.4/gcc/config/h8300/elf.h gcc-3.1/gcc/config/h8300/elf.h *** gcc-3.0.4/gcc/config/h8300/elf.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/h8300/elf.h Tue Dec 11 18:21:03 2001 *************** *** 0 **** --- 1,49 ---- + #undef SUBTARGET_CPP_SPEC + #define SUBTARGET_CPP_SPEC "-D__ELF__" + + /* Undefine some macros defined in h8300 that conflict with elfos.h . */ + #undef SDB_DEBUGGING_INFO + #undef DBX_DEBUGGING_INFO + #undef ASM_OUTPUT_IDENT + #undef IDENT_ASM_OP + #undef CTORS_SECTION_ASM_OP + #undef DTORS_SECTION_ASM_OP + #undef INIT_SECTION_ASM_OP + #undef READONLY_DATA_SECTION + #undef TARGET_ASM_NAMED_SECTION + #undef TARGET_MEM_FUNCTIONS + #undef PREFERRED_DEBUGGING_TYPE + /* ??? h8300.h defines PCC_BITFIELD_TYPE_MATTERS to 0, but it + doesn't define STRUCTURE_SIZE_BOUNDARY, nor does h8300.md + have a full set of bit field instructions. */ + #undef PCC_BITFIELD_TYPE_MATTERS + + #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG + + #include "dbxelf.h" + #include "elfos.h" + + + #undef ENDFILE_SPEC + #define ENDFILE_SPEC "crtend.o%s %{pg:gcrtn.o%s}%{!pg:crtn.o%s}" + + #undef STARTFILE_SPEC + #define STARTFILE_SPEC "%{!shared: \ + %{!symbolic: \ + %{pg:gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}}}}\ + %{pg:gcrti.o%s}%{!pg:crti.o%s} \ + crtbegin.o%s" + + /* Output at beginning/end of assembler file. */ + #undef ASM_FILE_START + #define ASM_FILE_START(FILE) \ + (output_file_directive ((FILE), main_input_filename), \ + asm_file_start (FILE)) + + #undef USER_LABEL_PREFIX + #define USER_LABEL_PREFIX "_" + + #define JUMP_TABLES_IN_TEXT_SECTION (flag_pic) + + #undef LINK_SPEC + #define LINK_SPEC "%{mh:-m h8300helf} %{ms:-m h8300self}" diff -Nrc3pad gcc-3.0.4/gcc/config/h8300/fixunssfsi.c gcc-3.1/gcc/config/h8300/fixunssfsi.c *** gcc-3.0.4/gcc/config/h8300/fixunssfsi.c Fri Aug 31 01:12:21 2001 --- gcc-3.1/gcc/config/h8300/fixunssfsi.c Wed Jan 2 07:57:15 2002 *************** *** 1,6 **** /* More subroutines needed by GCC output code on some machines. */ /* Compile this one with gcc. */ ! /* Copyright (C) 1989, 1992, 2001 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,6 ---- /* More subroutines needed by GCC output code on some machines. */ /* Compile this one with gcc. */ ! /* Copyright (C) 1989, 1992, 2001, 2002 Free Software Foundation, Inc. This file is part of GNU CC. *************** the Free Software Foundation, 59 Temple *** 29,43 **** Boston, MA 02111-1307, USA. */ /* The libgcc2.c implementation gets confused by our type setup and creates ! a directly recursive call, so we do our own implementation. For the h8300, ! that's in lib1funcs.asm, for h8300h / h8s, it's here. */ #ifndef __H8300__ long __fixunssfsi (float a) { if (a >= (float) 32768L) ! return (long) (a -32768L) +32768L; return (long) a; } #endif --- 29,43 ---- Boston, MA 02111-1307, USA. */ /* The libgcc2.c implementation gets confused by our type setup and creates ! a directly recursive call, so we do our own implementation. For ! the H8/300, that's in lib1funcs.asm, for H8/300H and H8/S, it's here. */ #ifndef __H8300__ long __fixunssfsi (float a) { if (a >= (float) 32768L) ! return (long) (a - 32768L) + 32768L; return (long) a; } #endif diff -Nrc3pad gcc-3.0.4/gcc/config/h8300/h8300-protos.h gcc-3.1/gcc/config/h8300/h8300-protos.h *** gcc-3.0.4/gcc/config/h8300/h8300-protos.h Thu Sep 7 22:24:33 2000 --- gcc-3.1/gcc/config/h8300/h8300-protos.h Mon Feb 18 22:07:42 2002 *************** Boston, MA 02111-1307, USA. */ *** 26,44 **** /* Declarations for functions used in insn-output.c. */ #ifdef RTX_CODE ! extern const char *emit_a_shift PARAMS ((rtx, rtx *)); ! extern const char *emit_a_rotate PARAMS ((int, rtx *)); ! extern const char *output_adds_subs PARAMS ((rtx *)); ! extern const char *output_simode_bld PARAMS ((int, int, rtx[])); extern void print_operand_address PARAMS ((FILE *, rtx)); ! extern const char *byte_reg PARAMS ((rtx, int)); ! extern int const_costs PARAMS ((rtx, enum rtx_code)); extern void print_operand PARAMS ((FILE *, rtx, int)); extern void final_prescan_insn PARAMS ((rtx, rtx *, int)); extern int do_movsi PARAMS ((rtx[])); extern void notice_update_cc PARAMS ((rtx, rtx)); extern int expand_a_shift PARAMS ((enum machine_mode, int, rtx[])); ! extern int expand_a_rotate PARAMS ((int, rtx[])); extern int fix_bit_operand PARAMS ((rtx *, int, enum rtx_code)); extern int h8300_adjust_insn_length PARAMS ((rtx, int)); extern void split_adds_subs PARAMS ((enum machine_mode, rtx[])); --- 26,43 ---- /* Declarations for functions used in insn-output.c. */ #ifdef RTX_CODE ! extern const char *output_a_shift PARAMS ((rtx *)); ! extern const char *emit_a_rotate PARAMS ((enum rtx_code, rtx *)); ! extern const char *output_simode_bld PARAMS ((int, rtx[])); extern void print_operand_address PARAMS ((FILE *, rtx)); ! extern int const_costs PARAMS ((rtx, enum rtx_code, enum rtx_code)); extern void print_operand PARAMS ((FILE *, rtx, int)); extern void final_prescan_insn PARAMS ((rtx, rtx *, int)); extern int do_movsi PARAMS ((rtx[])); extern void notice_update_cc PARAMS ((rtx, rtx)); + extern const char *output_logical_op PARAMS ((enum machine_mode, int, rtx *)); extern int expand_a_shift PARAMS ((enum machine_mode, int, rtx[])); ! extern int expand_a_rotate PARAMS ((enum rtx_code, rtx[])); extern int fix_bit_operand PARAMS ((rtx *, int, enum rtx_code)); extern int h8300_adjust_insn_length PARAMS ((rtx, int)); extern void split_adds_subs PARAMS ((enum machine_mode, rtx[])); *************** extern void split_adds_subs PARAMS ((enu *** 46,68 **** extern int general_operand_src PARAMS ((rtx, enum machine_mode)); extern int general_operand_dst PARAMS ((rtx, enum machine_mode)); extern int o_operand PARAMS ((rtx, enum machine_mode)); - extern int p_operand PARAMS ((rtx, enum machine_mode)); extern int call_insn_operand PARAMS ((rtx, enum machine_mode)); extern int two_insn_adds_subs_operand PARAMS ((rtx, enum machine_mode)); extern int small_call_insn_operand PARAMS ((rtx, enum machine_mode)); extern int jump_address_operand PARAMS ((rtx, enum machine_mode)); extern int bit_operand PARAMS ((rtx, enum machine_mode)); extern int bit_memory_operand PARAMS ((rtx, enum machine_mode)); - extern int eq_operator PARAMS ((rtx, enum machine_mode)); extern int bit_operator PARAMS ((rtx, enum machine_mode)); extern int nshift_operator PARAMS ((rtx, enum machine_mode)); #endif /* RTX_CODE */ #ifdef TREE_CODE extern struct rtx_def *function_arg PARAMS ((CUMULATIVE_ARGS *, enum machine_mode, tree, int)); - extern int h8300_valid_machine_decl_attribute PARAMS ((tree, tree, tree, - tree)); extern int h8300_funcvec_function_p PARAMS ((tree)); extern int h8300_eightbit_data_p PARAMS ((tree)); extern int h8300_tiny_data_p PARAMS ((tree)); --- 45,66 ---- extern int general_operand_src PARAMS ((rtx, enum machine_mode)); extern int general_operand_dst PARAMS ((rtx, enum machine_mode)); extern int o_operand PARAMS ((rtx, enum machine_mode)); extern int call_insn_operand PARAMS ((rtx, enum machine_mode)); extern int two_insn_adds_subs_operand PARAMS ((rtx, enum machine_mode)); extern int small_call_insn_operand PARAMS ((rtx, enum machine_mode)); extern int jump_address_operand PARAMS ((rtx, enum machine_mode)); extern int bit_operand PARAMS ((rtx, enum machine_mode)); extern int bit_memory_operand PARAMS ((rtx, enum machine_mode)); extern int bit_operator PARAMS ((rtx, enum machine_mode)); extern int nshift_operator PARAMS ((rtx, enum machine_mode)); + + /* Used in builtins.c */ + extern rtx h8300_return_addr_rtx PARAMS ((int, rtx)); #endif /* RTX_CODE */ #ifdef TREE_CODE extern struct rtx_def *function_arg PARAMS ((CUMULATIVE_ARGS *, enum machine_mode, tree, int)); extern int h8300_funcvec_function_p PARAMS ((tree)); extern int h8300_eightbit_data_p PARAMS ((tree)); extern int h8300_tiny_data_p PARAMS ((tree)); *************** extern void h8300_encode_label PARAMS (( *** 70,86 **** #endif /* TREE_CODE */ extern void h8300_init_once PARAMS ((void)); - extern void function_prologue PARAMS ((FILE *, int)); - extern void function_epilogue PARAMS ((FILE *, int)); extern void asm_file_start PARAMS ((FILE *)); extern void asm_file_end PARAMS ((FILE *)); extern int ok_for_bclr PARAMS ((HOST_WIDE_INT)); extern int small_power_of_two PARAMS ((HOST_WIDE_INT)); extern int initial_offset PARAMS ((int, int)); ! #ifdef _C_PRAGMA_H extern void h8300_pr_interrupt PARAMS ((cpp_reader *)); extern void h8300_pr_saveall PARAMS ((cpp_reader *)); #endif ! #endif /* GCC_H8300_PROTOS_H */ --- 68,82 ---- #endif /* TREE_CODE */ extern void h8300_init_once PARAMS ((void)); extern void asm_file_start PARAMS ((FILE *)); extern void asm_file_end PARAMS ((FILE *)); extern int ok_for_bclr PARAMS ((HOST_WIDE_INT)); extern int small_power_of_two PARAMS ((HOST_WIDE_INT)); extern int initial_offset PARAMS ((int, int)); ! #ifdef GCC_C_PRAGMA_H extern void h8300_pr_interrupt PARAMS ((cpp_reader *)); extern void h8300_pr_saveall PARAMS ((cpp_reader *)); #endif ! #endif /* ! GCC_H8300_PROTOS_H */ diff -Nrc3pad gcc-3.0.4/gcc/config/h8300/h8300.c gcc-3.1/gcc/config/h8300/h8300.c *** gcc-3.0.4/gcc/config/h8300/h8300.c Thu Nov 15 14:50:57 2001 --- gcc-3.1/gcc/config/h8300/h8300.c Sat Feb 23 14:17:25 2002 *************** *** 1,6 **** /* Subroutines for insn-output.c for Hitachi H8/300. ! Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 ! Free Software Foundation, Inc. Contributed by Steve Chamberlain (sac@cygnus.com), Jim Wilson (wilson@cygnus.com), and Doug Evans (dje@cygnus.com). --- 1,6 ---- /* Subroutines for insn-output.c for Hitachi H8/300. ! Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, ! 2001, 2002 Free Software Foundation, Inc. Contributed by Steve Chamberlain (sac@cygnus.com), Jim Wilson (wilson@cygnus.com), and Doug Evans (dje@cygnus.com). *************** Boston, MA 02111-1307, USA. */ *** 40,47 **** --- 40,50 ---- #include "c-pragma.h" #include "tm_p.h" #include "ggc.h" + #include "target.h" + #include "target-def.h" /* Forward declarations. */ + static const char *byte_reg PARAMS ((rtx, int)); static int h8300_interrupt_function_p PARAMS ((tree)); static int h8300_monitor_function_p PARAMS ((tree)); static int h8300_os_task_function_p PARAMS ((tree)); *************** static unsigned int compute_saved_regs P *** 51,74 **** static void push PARAMS ((FILE *, int)); static void pop PARAMS ((FILE *, int)); static const char *cond_string PARAMS ((enum rtx_code)); /* CPU_TYPE, says what cpu we're compiling for. */ int cpu_type; /* True if the current function is an interrupt handler (either via #pragma or an attribute specification). */ ! int interrupt_handler; /* True if the current function is an OS Task (via an attribute specification). */ ! int os_task; /* True if the current function is a monitor (via an attribute specification). */ ! int monitor; /* True if a #pragma saveall has been seen for the current function. */ ! int pragma_saveall; static const char *const names_big[] = { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7" }; --- 54,86 ---- static void push PARAMS ((FILE *, int)); static void pop PARAMS ((FILE *, int)); static const char *cond_string PARAMS ((enum rtx_code)); + const struct attribute_spec h8300_attribute_table[]; + static tree h8300_handle_fndecl_attribute PARAMS ((tree *, tree, tree, int, bool *)); + static tree h8300_handle_eightbit_data_attribute PARAMS ((tree *, tree, tree, int, bool *)); + static tree h8300_handle_tiny_data_attribute PARAMS ((tree *, tree, tree, int, bool *)); + static void h8300_output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT)); + static void h8300_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT)); + #ifndef OBJECT_FORMAT_ELF + static void h8300_asm_named_section PARAMS ((const char *, unsigned int)); + #endif /* CPU_TYPE, says what cpu we're compiling for. */ int cpu_type; /* True if the current function is an interrupt handler (either via #pragma or an attribute specification). */ ! static int interrupt_handler; /* True if the current function is an OS Task (via an attribute specification). */ ! static int os_task; /* True if the current function is a monitor (via an attribute specification). */ ! static int monitor; /* True if a #pragma saveall has been seen for the current function. */ ! static int pragma_saveall; static const char *const names_big[] = { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7" }; *************** const char * const *h8_reg_names; *** 85,101 **** /* Various operations needed by the following, indexed by CPU_TYPE. */ - static const char *const h8_push_ops[2] = { "push", "push.l" }; - static const char *const h8_pop_ops[2] = { "pop", "pop.l" }; - static const char *const h8_mov_ops[2] = { "mov.w", "mov.l" }; - const char *h8_push_op, *h8_pop_op, *h8_mov_op; /* Initialize various cpu specific globals at start up. */ void h8300_init_once () { if (TARGET_H8300) { cpu_type = (int) CPU_H8300; --- 97,127 ---- /* Various operations needed by the following, indexed by CPU_TYPE. */ const char *h8_push_op, *h8_pop_op, *h8_mov_op; + + /* Initialize the GCC target structure. */ + #undef TARGET_ATTRIBUTE_TABLE + #define TARGET_ATTRIBUTE_TABLE h8300_attribute_table + #undef TARGET_ASM_ALIGNED_HI_OP + #define TARGET_ASM_ALIGNED_HI_OP "\t.word\t" + + #undef TARGET_ASM_FUNCTION_PROLOGUE + #define TARGET_ASM_FUNCTION_PROLOGUE h8300_output_function_prologue + #undef TARGET_ASM_FUNCTION_EPILOGUE + #define TARGET_ASM_FUNCTION_EPILOGUE h8300_output_function_epilogue + + struct gcc_target targetm = TARGET_INITIALIZER; + /* Initialize various cpu specific globals at start up. */ void h8300_init_once () { + static const char *const h8_push_ops[2] = { "push" , "push.l" }; + static const char *const h8_pop_ops[2] = { "pop" , "pop.l" }; + static const char *const h8_mov_ops[2] = { "mov.w", "mov.l" }; + if (TARGET_H8300) { cpu_type = (int) CPU_H8300; *************** h8300_init_once () *** 113,152 **** if (!TARGET_H8300S && TARGET_MAC) { ! error ("-ms2600 is used without -ms."); target_flags |= 1; } } ! const char * byte_reg (x, b) rtx x; int b; { ! static const char *const names_small[] = ! {"r0l", "r0h", "r1l", "r1h", "r2l", "r2h", "r3l", "r3h", ! "r4l", "r4h", "r5l", "r5h", "r6l", "r6h", "r7l", "r7h"}; return names_small[REGNO (x) * 2 + b]; } /* REGNO must be saved/restored across calls if this macro is true. */ ! #define WORD_REG_USED(regno) \ ! (regno < 7 \ ! /* No need to save registers if this function will not return. */\ ! && ! TREE_THIS_VOLATILE (current_function_decl) \ ! && (pragma_saveall \ ! /* Save any call saved register that was used. */ \ ! || (regs_ever_live[regno] && !call_used_regs[regno]) \ ! /* Save the frame pointer if it was used. */ \ ! || (regno == FRAME_POINTER_REGNUM && regs_ever_live[regno])\ ! /* Save any register used in an interrupt handler. */ \ ! || (interrupt_handler && regs_ever_live[regno]) \ ! /* Save call clobbered registers in non-leaf interrupt \ ! handlers. */ \ ! || (interrupt_handler \ ! && call_used_regs[regno] \ && !current_function_is_leaf))) /* Output assembly language to FILE for the operation OP with operand size --- 139,179 ---- if (!TARGET_H8300S && TARGET_MAC) { ! error ("-ms2600 is used without -ms"); target_flags |= 1; } } ! static const char * byte_reg (x, b) rtx x; int b; { ! static const char *const names_small[] = { ! "r0l", "r0h", "r1l", "r1h", "r2l", "r2h", "r3l", "r3h", ! "r4l", "r4h", "r5l", "r5h", "r6l", "r6h", "r7l", "r7h" ! }; return names_small[REGNO (x) * 2 + b]; } /* REGNO must be saved/restored across calls if this macro is true. */ ! #define WORD_REG_USED(regno) \ ! (regno < 7 \ ! /* No need to save registers if this function will not return. */ \ ! && ! TREE_THIS_VOLATILE (current_function_decl) \ ! && (pragma_saveall \ ! /* Save any call saved register that was used. */ \ ! || (regs_ever_live[regno] && !call_used_regs[regno]) \ ! /* Save the frame pointer if it was used. */ \ ! || (regno == FRAME_POINTER_REGNUM && regs_ever_live[regno]) \ ! /* Save any register used in an interrupt handler. */ \ ! || (interrupt_handler && regs_ever_live[regno]) \ ! /* Save call clobbered registers in non-leaf interrupt \ ! handlers. */ \ ! || (interrupt_handler \ ! && call_used_regs[regno] \ && !current_function_is_leaf))) /* Output assembly language to FILE for the operation OP with operand size *************** pop (file, rn) *** 263,272 **** /* Output assembly language code for the function prologue. */ ! void ! function_prologue (file, size) FILE *file; ! int size; { int fsize = round_frame_size (size); int idx; --- 290,299 ---- /* Output assembly language code for the function prologue. */ ! static void ! h8300_output_function_prologue (file, size) FILE *file; ! HOST_WIDE_INT size; { int fsize = round_frame_size (size); int idx; *************** function_prologue (file, size) *** 374,383 **** /* Output assembly language code for the function epilogue. */ ! void ! function_epilogue (file, size) FILE *file; ! int size; { int fsize = round_frame_size (size); int idx; --- 401,410 ---- /* Output assembly language code for the function epilogue. */ ! static void ! h8300_output_function_epilogue (file, size) FILE *file; ! HOST_WIDE_INT size; { int fsize = round_frame_size (size); int idx; *************** asm_file_start (file) *** 466,472 **** { fprintf (file, ";\tGCC For the Hitachi H8/300\n"); fprintf (file, ";\tBy Hitachi America Ltd and Cygnus Support\n"); - fprintf (file, ";\trelease F-1\n"); if (optimize) fprintf (file, "; -O%d\n", optimize); if (TARGET_H8300H) --- 493,498 ---- *************** o_operand (operand, mode) *** 546,562 **** && CONST_OK_FOR_O (INTVAL (operand))); } - /* Return true if OP is a const valid for a bit set or bit xor instruction. */ - - int - p_operand (operand, mode) - rtx operand; - enum machine_mode mode ATTRIBUTE_UNUSED; - { - return (GET_CODE (operand) == CONST_INT - && CONST_OK_FOR_P (INTVAL (operand))); - } - /* Return true if OP is a valid call operand. */ int --- 572,577 ---- *************** two_insn_adds_subs_operand (op, mode) *** 607,618 **** } else { ! /* A constant addition/subtraction takes 2 states in ! QImode. It takes 6 states in HImode, requiring the ! constant to be loaded to a register first, and a lot more ! in SImode. Thus the only case we can win is when either ! HImode or SImode is used. */ ! if (mode != QImode && (value == 2 + 1 || value == 2 + 2)) return 1; --- 622,632 ---- } else { ! /* We do not profit directly by splitting addition or ! subtraction of 3 and 4. However, since these are ! implemented as a sequence of adds or subs, they do not ! clobber (cc0) unlike a sequence of add.b and add.x. */ ! if (mode == HImode && (value == 2 + 1 || value == 2 + 2)) return 1; *************** bit_memory_operand (op, mode) *** 745,760 **** && EXTRA_CONSTRAINT (op, 'U')); } - /* Recognize valid operators for bit test. */ - - int - eq_operator (x, mode) - rtx x; - enum machine_mode mode ATTRIBUTE_UNUSED; - { - return (GET_CODE (x) == EQ || GET_CODE (x) == NE); - } - /* Handle machine specific pragmas for compatibility with existing compilers for the H8/300. --- 759,764 ---- *************** h8300_pr_saveall (pfile) *** 779,810 **** pragma_saveall = 1; } ! /* If the next arg with MODE and TYPE is to be passed in a register, return ! the rtx to represent where it is passed. CUM represents the state after ! the last argument. NAMED is not used. */ ! ! static const char *const hand_list[] = ! { ! "__main", ! "__cmpsi2", ! "__divhi3", ! "__modhi3", ! "__udivhi3", ! "__umodhi3", ! "__divsi3", ! "__modsi3", ! "__udivsi3", ! "__umodsi3", ! "__mulhi3", ! "__mulsi3", ! "__reg_memcpy", ! "__reg_memset", ! "__ucmpsi2", ! 0, ! }; ! ! /* Return an RTX to represent where a value with mode MODE will be returned ! from a function. If the result is 0, the argument is pushed. */ rtx function_arg (cum, mode, type, named) --- 783,792 ---- pragma_saveall = 1; } ! /* If the next function argument with MODE and TYPE is to be passed in ! a register, return a reg RTX for the hard register in which to pass ! the argument. CUM represents the state after the last argument. ! If the argument is to be pushed, NULL_RTX is returned. */ rtx function_arg (cum, mode, type, named) *************** function_arg (cum, mode, type, named) *** 813,832 **** tree type; int named; { ! rtx result = 0; const char *fname; int regpass = 0; /* Never pass unnamed arguments in registers. */ if (!named) ! return 0; /* Pass 3 regs worth of data in regs when user asked on the command line. */ if (TARGET_QUICKCALL) regpass = 3; /* If calling hand written assembler, use 4 regs of args. */ - if (cum->libcall) { const char * const *p; --- 795,832 ---- tree type; int named; { ! static const char *const hand_list[] = { ! "__main", ! "__cmpsi2", ! "__divhi3", ! "__modhi3", ! "__udivhi3", ! "__umodhi3", ! "__divsi3", ! "__modsi3", ! "__udivsi3", ! "__umodsi3", ! "__mulhi3", ! "__mulsi3", ! "__reg_memcpy", ! "__reg_memset", ! "__ucmpsi2", ! 0, ! }; ! ! rtx result = NULL_RTX; const char *fname; int regpass = 0; /* Never pass unnamed arguments in registers. */ if (!named) ! return NULL_RTX; /* Pass 3 regs worth of data in regs when user asked on the command line. */ if (TARGET_QUICKCALL) regpass = 3; /* If calling hand written assembler, use 4 regs of args. */ if (cum->libcall) { const char * const *p; *************** function_arg (cum, mode, type, named) *** 834,840 **** fname = XSTR (cum->libcall, 0); /* See if this libcall is one of the hand coded ones. */ - for (p = hand_list; *p && strcmp (*p, fname) != 0; p++) ; --- 834,839 ---- *************** function_arg (cum, mode, type, named) *** 851,880 **** else size = GET_MODE_SIZE (mode); ! if (size + cum->nbytes > regpass * UNITS_PER_WORD) ! { ! result = 0; ! } ! else ! { ! switch (cum->nbytes / UNITS_PER_WORD) ! { ! case 0: ! result = gen_rtx_REG (mode, 0); ! break; ! case 1: ! result = gen_rtx_REG (mode, 1); ! break; ! case 2: ! result = gen_rtx_REG (mode, 2); ! break; ! case 3: ! result = gen_rtx_REG (mode, 3); ! break; ! default: ! result = 0; ! } ! } } return result; --- 850,858 ---- else size = GET_MODE_SIZE (mode); ! if (size + cum->nbytes <= regpass * UNITS_PER_WORD ! && cum->nbytes / UNITS_PER_WORD <= 3) ! result = gen_rtx_REG (mode, cum->nbytes / UNITS_PER_WORD); } return result; *************** function_arg (cum, mode, type, named) *** 883,891 **** /* Return the cost of the rtx R with code CODE. */ int ! const_costs (r, c) rtx r; enum rtx_code c; { switch (c) { --- 861,870 ---- /* Return the cost of the rtx R with code CODE. */ int ! const_costs (r, c, outer_code) rtx r; enum rtx_code c; + enum rtx_code outer_code; { switch (c) { *************** const_costs (r, c) *** 893,907 **** switch (INTVAL (r)) { case 0: case 1: case 2: case -1: case -2: ! return 0; case 4: case -4: if (TARGET_H8300H || TARGET_H8300S) ! return 0; else return 1; default: --- 872,887 ---- switch (INTVAL (r)) { case 0: + return 0; case 1: case 2: case -1: case -2: ! return 0 + (outer_code == SET); case 4: case -4: if (TARGET_H8300H || TARGET_H8300S) ! return 0 + (outer_code == SET); else return 1; default: *************** const_costs (r, c) *** 923,940 **** /* Documentation for the machine specific operand escapes: - 'A' print rn in H8/300 mode, erN in H8/300H mode - 'C' print (operand - 2). 'E' like s but negative. 'F' like t but negative. 'G' constant just the negative - 'M' turn a 'M' constant into its negative mod 2. - 'P' if operand is incing/decing sp, print .w, otherwise .b. 'R' print operand as a byte:8 address if appropriate, else fall back to 'X' handling. 'S' print operand as a long word 'T' print operand as a word - 'U' if operand is incing/decing sp, print l, otherwise nothing. 'V' find the set bit, and print its number. 'W' find the clear bit, and print its number. 'X' print operand as a byte --- 903,915 ---- *************** const_costs (r, c) *** 942,954 **** If this operand isn't a register, fall back to 'R' handling. 'Z' print int & 7. 'b' print the bit opcode - 'c' print the ibit opcode - 'd' bcc if EQ, bcs if NE 'e' first word of 32 bit value - if reg, then least reg. if mem then least. if const then most sig word 'f' second word of 32 bit value - if reg, then biggest reg. if mem then +2. if const then least sig word - 'g' bcs if EQ, bcc if NE 'j' print operand as condition code. 'k' print operand as reverse condition code. 's' print as low byte of 16 bit value --- 917,926 ---- *************** print_operand (file, x, code) *** 1001,1023 **** rtx x; int code; { - /* This is used for communication between the 'P' and 'U' codes. */ - static const char *last_p; - /* This is used for communication between codes V,W,Z and Y. */ static int bitint; switch (code) { - case 'A': - if (GET_CODE (x) == REG) - fprintf (file, "%s", h8_reg_names[REGNO (x)]); - else - goto def; - break; - case 'C': - fprintf (file, "#%d", INTVAL (x) - 2); - break; case 'E': switch (GET_CODE (x)) { --- 973,983 ---- *************** print_operand (file, x, code) *** 1049,1086 **** abort (); fprintf (file, "#%d", 0xff & (-INTVAL (x))); break; - case 'M': - /* For 3/-3 and 4/-4, the other 2 is handled separately. */ - switch (INTVAL (x)) - { - case 2: - case 4: - case -2: - case -4: - fprintf (file, "#2"); - break; - case 1: - case 3: - case -1: - case -3: - fprintf (file, "#1"); - break; - default: - abort (); - } - break; - case 'P': - if (REGNO (XEXP (XEXP (x, 0), 0)) == STACK_POINTER_REGNUM) - { - last_p = ""; - fprintf (file, ".w"); - } - else - { - last_p = "l"; - fprintf (file, ".b"); - } - break; case 'S': if (GET_CODE (x) == REG) fprintf (file, "%s", names_extended[REGNO (x)]); --- 1009,1014 ---- *************** print_operand (file, x, code) *** 1093,1101 **** else goto def; break; - case 'U': - fprintf (file, "%s%s", names_big[REGNO (x)], last_p); - break; case 'V': bitint = exact_log2 (INTVAL (x)); if (bitint == -1) --- 1021,1026 ---- *************** print_operand (file, x, code) *** 1144,1178 **** break; } break; - case 'c': - switch (GET_CODE (x)) - { - case IOR: - fprintf (file, "bior"); - break; - case XOR: - fprintf (file, "bixor"); - break; - case AND: - fprintf (file, "biand"); - break; - default: - break; - } - break; - case 'd': - switch (GET_CODE (x)) - { - case EQ: - fprintf (file, "bcc"); - break; - case NE: - fprintf (file, "bcs"); - break; - default: - abort (); - } - break; case 'e': switch (GET_CODE (x)) { --- 1069,1074 ---- *************** print_operand (file, x, code) *** 1183,1189 **** fprintf (file, "%s", names_upper_extended[REGNO (x)]); break; case MEM: - x = adj_offsettable_operand (x, 0); print_operand (file, x, 0); break; case CONST_INT: --- 1079,1084 ---- *************** print_operand (file, x, code) *** 1213,1219 **** fprintf (file, "%s", names_big[REGNO (x)]); break; case MEM: ! x = adj_offsettable_operand (x, 2); print_operand (file, x, 0); break; case CONST_INT: --- 1108,1114 ---- fprintf (file, "%s", names_big[REGNO (x)]); break; case MEM: ! x = adjust_address (x, HImode, 2); print_operand (file, x, 0); break; case CONST_INT: *************** print_operand (file, x, code) *** 1232,1250 **** abort (); } break; - case 'g': - switch (GET_CODE (x)) - { - case NE: - fprintf (file, "bcc"); - break; - case EQ: - fprintf (file, "bcs"); - break; - default: - abort (); - } - break; case 'j': asm_fprintf (file, cond_string (GET_CODE (x))); break; --- 1127,1132 ---- *************** print_operand (file, x, code) *** 1322,1343 **** break; case MEM: ! fprintf (file, "@"); ! output_address (XEXP (x, 0)); ! /* If this is an 'R' operand (reference into the 8-bit ! area), then specify a symbolic address as "foo:8", ! otherwise if operand is still in eight bit section, use ! "foo:16". */ ! if (GET_CODE (XEXP (x, 0)) == SYMBOL_REF ! && SYMBOL_REF_FLAG (XEXP (x, 0))) ! fprintf (file, (code == 'R' ? ":8" : ":16")); ! else if (GET_CODE (XEXP (x, 0)) == SYMBOL_REF ! && TINY_DATA_NAME_P (XSTR (XEXP (x, 0), 0))) ! fprintf (file, ":16"); ! else if ((code == 'R') ! && EIGHTBIT_CONSTANT_ADDRESS_P (XEXP (x, 0))) ! fprintf (file, ":8"); break; case CONST_INT: --- 1204,1229 ---- break; case MEM: ! { ! rtx addr = XEXP (x, 0); ! fprintf (file, "@"); ! output_address (addr); ! ! /* If this is an 'R' operand (reference into the 8-bit ! area), then specify a symbolic address as "foo:8", ! otherwise if operand is still in eight bit section, use ! "foo:16". */ ! if (GET_CODE (addr) == SYMBOL_REF ! && SYMBOL_REF_FLAG (addr)) ! fprintf (file, (code == 'R' ? ":8" : ":16")); ! else if (GET_CODE (addr) == SYMBOL_REF ! && TINY_DATA_NAME_P (XSTR (addr, 0))) ! fprintf (file, ":16"); ! else if ((code == 'R') ! && EIGHTBIT_CONSTANT_ADDRESS_P (addr)) ! fprintf (file, ":8"); ! } break; case CONST_INT: *************** initial_offset (from, to) *** 1488,1493 **** --- 1374,1381 ---- if (from == ARG_POINTER_REGNUM && to == FRAME_POINTER_REGNUM) offset = UNITS_PER_WORD + frame_pointer_needed * UNITS_PER_WORD; + else if (from == RETURN_ADDRESS_POINTER_REGNUM && to == FRAME_POINTER_REGNUM) + offset = frame_pointer_needed * UNITS_PER_WORD; else { int regno; *************** initial_offset (from, to) *** 1508,1513 **** --- 1396,1421 ---- return offset; } + rtx + h8300_return_addr_rtx (count, frame) + int count; + rtx frame; + { + rtx ret; + + if (count == 0) + ret = gen_rtx_MEM (Pmode, + gen_rtx_REG (Pmode, RETURN_ADDRESS_POINTER_REGNUM)); + else if (flag_omit_frame_pointer) + return (rtx) 0; + else + ret = gen_rtx_MEM (Pmode, + memory_address (Pmode, + plus_constant (frame, UNITS_PER_WORD))); + set_mem_alias_set (ret, get_frame_alias_set ()); + return ret; + } + /* Update the condition code from the insn. */ void *************** notice_update_cc (body, insn) *** 1526,1531 **** --- 1434,1442 ---- if (cc_status.value1 != 0 && reg_overlap_mentioned_p (recog_data.operand[0], cc_status.value1)) cc_status.value1 = 0; + if (cc_status.value2 != 0 + && reg_overlap_mentioned_p (recog_data.operand[0], cc_status.value2)) + cc_status.value2 = 0; break; case CC_SET_ZN: *************** notice_update_cc (body, insn) *** 1544,1549 **** --- 1455,1462 ---- CC_STATUS_INIT; cc_status.flags |= CC_NO_CARRY; cc_status.value1 = recog_data.operand[0]; + if (GET_CODE (body) == SET && REG_P (SET_SRC (body))) + cc_status.value2 = SET_SRC (body); break; case CC_COMPARE: *************** bit_operator (x, mode) *** 1573,1627 **** || code == IOR); } ! /* Shifts. ! We devote a fair bit of code to getting efficient shifts since we can only ! shift one bit at a time on the H8/300 and H8/300H and only one or two ! bits at a time on the H8/S. ! The basic shift methods: ! * loop shifts -- emit a loop using one (or two on H8/S) bit shifts; ! this is the default. SHIFT_LOOP ! * inlined shifts -- emit straight line code for the shift; this is ! used when a straight line shift is about the same size or smaller ! than a loop. We allow the inline version to be slightly longer in ! some cases as it saves a register. SHIFT_INLINE ! * rotate + and -- rotate the value the opposite direction, then ! mask off the values we don't need. This is used when only a few ! of the bits in the original value will survive in the shifted value. ! Again, this is used when it's about the same size or smaller than ! a loop. We allow this version to be slightly longer as it is usually ! much faster than a loop. SHIFT_ROT_AND ! * swap (+ shifts) -- often it's possible to swap bytes/words to ! simulate a shift by 8/16. Once swapped a few inline shifts can be ! added if the shift count is slightly more than 8 or 16. This is used ! when it's about the same size or smaller than a loop. We allow this ! version to be slightly longer as it is usually much faster than a loop. ! SHIFT_SPECIAL ! * There other oddballs. Not worth explaining. SHIFT_SPECIAL ! Here are some thoughts on what the absolutely positively best code is. ! "Best" here means some rational trade-off between code size and speed, ! where speed is more preferred but not at the expense of generating 20 insns. ! A trailing '*' after the shift count indicates the "best" mode isn't ! implemented. H8/300 QImode shifts ! 1-4 - do them inline ! 5-6 - ASHIFT | LSHIFTRT: rotate, mask off other bits ! ASHIFTRT: loop ! 7 - ASHIFT | LSHIFTRT: rotate, mask off other bits ! ASHIFTRT: shll, subx (propagate carry bit to all bits) H8/300 HImode shifts - 1-4 - do them inline - 5-6 - loop 7 - shift 2nd half other way into carry. copy 1st half into 2nd half rotate 2nd half other way with carry --- 1486,1671 ---- || code == IOR); } ! const char * ! output_logical_op (mode, code, operands) ! enum machine_mode mode; ! int code; ! rtx *operands; ! { ! /* Pretend that every byte is affected if both operands are registers. */ ! unsigned HOST_WIDE_INT intval = ! (unsigned HOST_WIDE_INT) ((GET_CODE (operands[2]) == CONST_INT) ! ? INTVAL (operands[2]) : 0x55555555); ! /* The determinant of the algorithm. If we perform an AND, 0 ! affects a bit. Otherwise, 1 affects a bit. */ ! unsigned HOST_WIDE_INT det = (code != AND) ? intval : ~intval; ! /* The name of an insn. */ ! const char *opname; ! char insn_buf[100]; ! switch (code) ! { ! case AND: ! opname = "and"; ! break; ! case IOR: ! opname = "or"; ! break; ! case XOR: ! opname = "xor"; ! break; ! default: ! abort (); ! } ! switch (mode) ! { ! case HImode: ! /* First, see if we can finish with one insn. */ ! if ((TARGET_H8300H || TARGET_H8300S) ! && ((det & 0x00ff) != 0) ! && ((det & 0xff00) != 0)) ! { ! sprintf (insn_buf, "%s.w\t%%T2,%%T0", opname); ! output_asm_insn (insn_buf, operands); ! } ! else ! { ! /* Take care of the lower byte. */ ! if ((det & 0x00ff) != 0) ! { ! sprintf (insn_buf, "%s\t%%s2,%%s0", opname); ! output_asm_insn (insn_buf, operands); ! } ! /* Take care of the upper byte. */ ! if ((det & 0xff00) != 0) ! { ! sprintf (insn_buf, "%s\t%%t2,%%t0", opname); ! output_asm_insn (insn_buf, operands); ! } ! } ! break; ! case SImode: ! /* First, see if we can finish with one insn. ! If code is either AND or XOR, we exclude two special cases, ! 0xffffff00 and 0xffff00ff, because insns like sub.w or not.w ! can do a better job. */ ! if ((TARGET_H8300H || TARGET_H8300S) ! && ((det & 0x0000ffff) != 0) ! && ((det & 0xffff0000) != 0) ! && (code == IOR || det != 0xffffff00) ! && (code == IOR || det != 0xffff00ff)) ! { ! sprintf (insn_buf, "%s.l\t%%S2,%%S0", opname); ! output_asm_insn (insn_buf, operands); ! } ! else ! { ! /* Take care of the lower and upper words individually. For ! each word, we try different methods in the order of ! 1) the special insn (in case of AND or XOR), ! 2) the word-wise insn, and ! 3) The byte-wise insn. */ ! if ((det & 0x0000ffff) == 0x0000ffff ! && (TARGET_H8300 ? (code == AND) : (code != IOR))) ! output_asm_insn ((code == AND) ! ? "sub.w\t%f0,%f0" : "not.w\t%f0", ! operands); ! else if ((TARGET_H8300H || TARGET_H8300S) ! && ((det & 0x000000ff) != 0) ! && ((det & 0x0000ff00) != 0)) ! { ! sprintf (insn_buf, "%s.w\t%%f2,%%f0", opname); ! output_asm_insn (insn_buf, operands); ! } ! else ! { ! if ((det & 0x000000ff) != 0) ! { ! sprintf (insn_buf, "%s\t%%w2,%%w0", opname); ! output_asm_insn (insn_buf, operands); ! } ! if ((det & 0x0000ff00) != 0) ! { ! sprintf (insn_buf, "%s\t%%x2,%%x0", opname); ! output_asm_insn (insn_buf, operands); ! } ! } ! if ((det & 0xffff0000) == 0xffff0000 ! && (TARGET_H8300 ? (code == AND) : (code != IOR))) ! output_asm_insn ((code == AND) ! ? "sub.w\t%e0,%e0" : "not.w\t%e0", ! operands); ! else if (TARGET_H8300H || TARGET_H8300S) ! { ! if ((det & 0xffff0000) != 0) ! { ! sprintf (insn_buf, "%s.w\t%%e2,%%e0", opname); ! output_asm_insn (insn_buf, operands); ! } ! } ! else ! { ! if ((det & 0x00ff0000) != 0) ! { ! sprintf (insn_buf, "%s\t%%y2,%%y0", opname); ! output_asm_insn (insn_buf, operands); ! } ! if ((det & 0xff000000) != 0) ! { ! sprintf (insn_buf, "%s\t%%z2,%%z0", opname); ! output_asm_insn (insn_buf, operands); ! } ! } ! } ! break; ! default: ! abort (); ! } ! return ""; ! } ! ! /* Shifts. ! We devote a fair bit of code to getting efficient shifts since we ! can only shift one bit at a time on the H8/300 and H8/300H and only ! one or two bits at a time on the H8/S. ! All shift code falls into one of the following ways of ! implementation: ! o SHIFT_INLINE: Emit straight line code for the shift; this is used ! when a straight line shift is about the same size or smaller than ! a loop. ! o SHIFT_ROT_AND: Rotate the value the opposite direction, then mask ! off the bits we don't need. This is used when only a few of the ! bits in the original value will survive in the shifted value. ! ! o SHIFT_SPECIAL: Often it's possible to move a byte or a word to ! simulate a shift by 8, 16, or 24 bits. Once moved, a few inline ! shifts can be added if the shift count is slightly more than 8 or ! 16. This case also includes other oddballs that are not worth ! explaning here. ! ! o SHIFT_LOOP: Emit a loop using one (or two on H8/S) bit shifts. ! ! Here are some thoughts on what the absolutely positively best code ! is. "Best" here means some rational trade-off between code size ! and speed, where speed is more preferred but not at the expense of ! generating 20 insns. ! ! Below, a trailing '*' after the shift count indicates the "best" ! mode isn't implemented. We only describe SHIFT_SPECIAL cases to ! simplify the table. For other cases, refer to shift_alg_[qhs]i. H8/300 QImode shifts ! 7 - ASHIFTRT: shll, subx (propagate carry bit to all bits) H8/300 HImode shifts 7 - shift 2nd half other way into carry. copy 1st half into 2nd half rotate 2nd half other way with carry *************** bit_operator (x, mode) *** 1630,1669 **** sign extend 1st half (ASHIFTRT) 8 - move byte, zero (ASHIFT | LSHIFTRT) or sign extend other (ASHIFTRT) 9-12 - do shift by 8, inline remaining shifts ! 13-14* - ASHIFT | LSHIFTRT: rotate 3/2, mask, move byte, set other byte to 0 ! - ASHIFTRT: loop ! 15 - ASHIFT | LSHIFTRT: rotate 1, mask, move byte, set other byte to 0 ! - ASHIFTRT: shll, subx, set other byte H8/300 SImode shifts - 1-2 - do them inline - 3-6 - loop 7* - shift other way once, move bytes into place, move carry into place (possibly with sign extension) 8 - move bytes into place, zero or sign extend other - 9-14 - loop 15* - shift other way once, move word into place, move carry into place 16 - move word, zero or sign extend other - 17-23 - loop 24* - move bytes into place, zero or sign extend other ! 25-27 - loop ! 28-30* - ASHIFT | LSHIFTRT: rotate top byte, mask, move byte into place, ! zero others ! ASHIFTRT: loop ! 31 - ASHIFT | LSHIFTRT: rotate top byte, mask, move byte into place, ! zero others ! ASHIFTRT: shll top byte, subx, copy to other bytes H8/300H QImode shifts (same as H8/300 QImode shifts) ! 1-4 - do them inline ! 5-6 - ASHIFT | LSHIFTRT: rotate, mask off other bits ! ASHIFTRT: loop ! 7 - ASHIFT | LSHIFTRT: rotate, mask off other bits ! ASHIFTRT: shll, subx (propagate carry bit to all bits) H8/300H HImode shifts - 1-4 - do them inline - 5-6 - loop 7 - shift 2nd half other way into carry. copy 1st half into 2nd half rotate entire word other way using carry --- 1674,1694 ---- sign extend 1st half (ASHIFTRT) 8 - move byte, zero (ASHIFT | LSHIFTRT) or sign extend other (ASHIFTRT) 9-12 - do shift by 8, inline remaining shifts ! 15 - ASHIFTRT: shll, subx, set other byte H8/300 SImode shifts 7* - shift other way once, move bytes into place, move carry into place (possibly with sign extension) 8 - move bytes into place, zero or sign extend other 15* - shift other way once, move word into place, move carry into place 16 - move word, zero or sign extend other 24* - move bytes into place, zero or sign extend other ! 31 - ASHIFTRT: shll top byte, subx, copy to other bytes H8/300H QImode shifts (same as H8/300 QImode shifts) ! 7 - ASHIFTRT: shll, subx (propagate carry bit to all bits) H8/300H HImode shifts 7 - shift 2nd half other way into carry. copy 1st half into 2nd half rotate entire word other way using carry *************** bit_operator (x, mode) *** 1671,1692 **** sign extend remaining bits (ASHIFTRT) 8 - move byte, zero (ASHIFT | LSHIFTRT) or sign extend other (ASHIFTRT) 9-12 - do shift by 8, inline remaining shifts ! 13-14 - ASHIFT | LSHIFTRT: rotate 3/2, mask, move byte, set other byte to 0 ! - ASHIFTRT: loop ! 15 - ASHIFT | LSHIFTRT: rotate 1, mask, move byte, set other byte to 0 ! - ASHIFTRT: shll, subx, set other byte H8/300H SImode shifts (These are complicated by the fact that we don't have byte level access to the top word.) A word is: bytes 3,2,1,0 (msb -> lsb), word 1,0 (msw -> lsw) - 1-4 - do them inline - 5-14 - loop 15* - shift other way once, move word into place, move carry into place (with sign extension for ASHIFTRT) 16 - move word into place, zero or sign extend other 17-20 - do 16bit shift, then inline remaining shifts - 20-23 - loop 24* - ASHIFT: move byte 0(msb) to byte 1, zero byte 0, move word 0 to word 1, zero word 0 LSHIFTRT: move word 1 to word 0, move byte 1 to byte 0, --- 1696,1711 ---- sign extend remaining bits (ASHIFTRT) 8 - move byte, zero (ASHIFT | LSHIFTRT) or sign extend other (ASHIFTRT) 9-12 - do shift by 8, inline remaining shifts ! 15 - ASHIFTRT: shll, subx, set other byte H8/300H SImode shifts (These are complicated by the fact that we don't have byte level access to the top word.) A word is: bytes 3,2,1,0 (msb -> lsb), word 1,0 (msw -> lsw) 15* - shift other way once, move word into place, move carry into place (with sign extension for ASHIFTRT) 16 - move word into place, zero or sign extend other 17-20 - do 16bit shift, then inline remaining shifts 24* - ASHIFT: move byte 0(msb) to byte 1, zero byte 0, move word 0 to word 1, zero word 0 LSHIFTRT: move word 1 to word 0, move byte 1 to byte 0, *************** bit_operator (x, mode) *** 1695,1730 **** sign extend byte 0, sign extend word 0 25-27* - either loop, or do 24 bit shift, inline rest - 28-30 - ASHIFT: rotate 4/3/2, mask - LSHIFTRT: rotate 4/3/2, mask - ASHIFTRT: loop 31 - shll, subx byte 0, sign extend byte 0, sign extend word 0 H8/S QImode shifts ! 1-6 - do them inline ! 7 - ASHIFT | LSHIFTRT: rotate, mask off other bits ! ASHIFTRT: shll, subx (propagate carry bit to all bits) H8/S HImode shifts - 1-7 - do them inline 8 - move byte, zero (ASHIFT | LSHIFTRT) or sign extend other (ASHIFTRT) 9-12 - do shift by 8, inline remaining shifts ! 13-14 - ASHIFT | LSHIFTRT: rotate 3/2, mask, move byte, set other byte to 0 ! - ASHIFTRT: loop ! 15 - ASHIFT | LSHIFTRT: rotate 1, mask, move byte, set other byte to 0 ! - ASHIFTRT: shll, subx, set other byte H8/S SImode shifts (These are complicated by the fact that we don't have byte level access to the top word.) A word is: bytes 3,2,1,0 (msb -> lsb), word 1,0 (msw -> lsw) - 1-10 - do them inline - 11-14 - loop 15* - shift other way once, move word into place, move carry into place (with sign extension for ASHIFTRT) 16 - move word into place, zero or sign extend other 17-20 - do 16bit shift, then inline remaining shifts - 21-23 - loop 24* - ASHIFT: move byte 0(msb) to byte 1, zero byte 0, move word 0 to word 1, zero word 0 LSHIFTRT: move word 1 to word 0, move byte 1 to byte 0, --- 1714,1737 ---- sign extend byte 0, sign extend word 0 25-27* - either loop, or do 24 bit shift, inline rest 31 - shll, subx byte 0, sign extend byte 0, sign extend word 0 H8/S QImode shifts ! 7 - ASHIFTRT: shll, subx (propagate carry bit to all bits) H8/S HImode shifts 8 - move byte, zero (ASHIFT | LSHIFTRT) or sign extend other (ASHIFTRT) 9-12 - do shift by 8, inline remaining shifts ! 15 - ASHIFTRT: shll, subx, set other byte H8/S SImode shifts (These are complicated by the fact that we don't have byte level access to the top word.) A word is: bytes 3,2,1,0 (msb -> lsb), word 1,0 (msw -> lsw) 15* - shift other way once, move word into place, move carry into place (with sign extension for ASHIFTRT) 16 - move word into place, zero or sign extend other 17-20 - do 16bit shift, then inline remaining shifts 24* - ASHIFT: move byte 0(msb) to byte 1, zero byte 0, move word 0 to word 1, zero word 0 LSHIFTRT: move word 1 to word 0, move byte 1 to byte 0, *************** bit_operator (x, mode) *** 1733,1741 **** sign extend byte 0, sign extend word 0 25-27* - either loop, or do 24 bit shift, inline rest - 28-30 - ASHIFT: rotate 4/3/2, mask - LSHIFTRT: rotate 4/3/2, mask - ASHIFTRT: loop 31 - shll, subx byte 0, sign extend byte 0, sign extend word 0 Panic!!! */ --- 1740,1745 ---- *************** expand_a_shift (mode, code, operands) *** 1784,1806 **** return 1; } ! /* Shift algorithm determination. ! ! There are various ways of doing a shift: ! SHIFT_INLINE: If the amount is small enough, just generate as many one-bit ! shifts as we need. ! SHIFT_ROT_AND: If the amount is large but close to either end, rotate the ! necessary bits into position and then set the rest to zero. ! SHIFT_SPECIAL: Hand crafted assembler. ! SHIFT_LOOP: If the above methods fail, just loop. */ enum shift_alg { SHIFT_INLINE, SHIFT_ROT_AND, SHIFT_SPECIAL, ! SHIFT_LOOP, ! SHIFT_MAX }; /* Symbols of the various shifts which can be used as indices. */ --- 1788,1801 ---- return 1; } ! /* See above for explanation of this enum. */ enum shift_alg { SHIFT_INLINE, SHIFT_ROT_AND, SHIFT_SPECIAL, ! SHIFT_LOOP }; /* Symbols of the various shifts which can be used as indices. */ *************** enum shift_mode *** 1823,1830 **** struct shift_insn { ! const char *assembler; ! int cc_valid; }; /* Assembler instruction shift table. --- 1818,1825 ---- struct shift_insn { ! const char *const assembler; ! const int cc_valid; }; /* Assembler instruction shift table. *************** static const char *const rotate_two[3][3 *** 1972,1977 **** --- 1967,2108 ---- } }; + /* Macros to keep the shift algorithm tables small. */ + #define INL SHIFT_INLINE + #define ROT SHIFT_ROT_AND + #define LOP SHIFT_LOOP + #define SPC SHIFT_SPECIAL + + /* The shift algorithms for each machine, mode, shift type, and shift + count are defined below. The three tables below correspond to + QImode, HImode, and SImode, respectively. Each table is organized + by, in the order of indecies, machine, shift type, and shift count. */ + + static const enum shift_alg shift_alg_qi[3][3][8] = { + { + /* TARGET_H8300 */ + /* 0 1 2 3 4 5 6 7 */ + { INL, INL, INL, INL, INL, ROT, ROT, ROT }, /* SHIFT_ASHIFT */ + { INL, INL, INL, INL, INL, ROT, ROT, ROT }, /* SHIFT_LSHIFTRT */ + { INL, INL, INL, INL, INL, LOP, LOP, SPC } /* SHIFT_ASHIFTRT */ + }, + { + /* TARGET_H8300H */ + /* 0 1 2 3 4 5 6 7 */ + { INL, INL, INL, INL, INL, ROT, ROT, ROT }, /* SHIFT_ASHIFT */ + { INL, INL, INL, INL, INL, ROT, ROT, ROT }, /* SHIFT_LSHIFTRT */ + { INL, INL, INL, INL, INL, LOP, LOP, SPC } /* SHIFT_ASHIFTRT */ + }, + { + /* TARGET_H8300S */ + /* 0 1 2 3 4 5 6 7 */ + { INL, INL, INL, INL, INL, INL, ROT, ROT }, /* SHIFT_ASHIFT */ + { INL, INL, INL, INL, INL, INL, ROT, ROT }, /* SHIFT_LSHIFTRT */ + { INL, INL, INL, INL, INL, INL, INL, SPC } /* SHIFT_ASHIFTRT */ + } + }; + + static const enum shift_alg shift_alg_hi[3][3][16] = { + { + /* TARGET_H8300 */ + /* 0 1 2 3 4 5 6 7 */ + /* 8 9 10 11 12 13 14 15 */ + { INL, INL, INL, INL, INL, LOP, LOP, SPC, + SPC, SPC, SPC, SPC, SPC, LOP, LOP, SPC }, /* SHIFT_ASHIFT */ + { INL, INL, INL, INL, INL, LOP, LOP, SPC, + SPC, SPC, SPC, SPC, SPC, LOP, LOP, SPC }, /* SHIFT_LSHIFTRT */ + { INL, INL, INL, INL, INL, LOP, LOP, SPC, + SPC, SPC, SPC, SPC, SPC, LOP, LOP, SPC }, /* SHIFT_ASHIFTRT */ + }, + { + /* TARGET_H8300H */ + /* 0 1 2 3 4 5 6 7 */ + /* 8 9 10 11 12 13 14 15 */ + { INL, INL, INL, INL, INL, LOP, LOP, SPC, + SPC, SPC, SPC, SPC, SPC, ROT, ROT, ROT }, /* SHIFT_ASHIFT */ + { INL, INL, INL, INL, INL, LOP, LOP, SPC, + SPC, SPC, SPC, SPC, SPC, ROT, ROT, ROT }, /* SHIFT_LSHIFTRT */ + { INL, INL, INL, INL, INL, LOP, LOP, SPC, + SPC, SPC, SPC, SPC, SPC, LOP, LOP, SPC }, /* SHIFT_ASHIFTRT */ + }, + { + /* TARGET_H8300S */ + /* 0 1 2 3 4 5 6 7 */ + /* 8 9 10 11 12 13 14 15 */ + { INL, INL, INL, INL, INL, INL, INL, INL, + SPC, SPC, SPC, SPC, SPC, ROT, ROT, ROT }, /* SHIFT_ASHIFT */ + { INL, INL, INL, INL, INL, INL, INL, INL, + SPC, SPC, SPC, SPC, SPC, ROT, ROT, ROT }, /* SHIFT_LSHIFTRT */ + { INL, INL, INL, INL, INL, INL, INL, INL, + SPC, SPC, SPC, SPC, SPC, LOP, LOP, SPC }, /* SHIFT_ASHIFTRT */ + } + }; + + static const enum shift_alg shift_alg_si[3][3][32] = { + { + /* TARGET_H8300 */ + /* 0 1 2 3 4 5 6 7 */ + /* 8 9 10 11 12 13 14 15 */ + /* 16 17 18 19 20 21 22 23 */ + /* 24 25 26 27 28 29 30 31 */ + { INL, INL, INL, LOP, LOP, LOP, LOP, LOP, + SPC, LOP, LOP, LOP, LOP, LOP, LOP, LOP, + SPC, SPC, SPC, SPC, SPC, LOP, LOP, LOP, + SPC, SPC, SPC, SPC, LOP, LOP, LOP, SPC }, /* SHIFT_ASHIFT */ + { INL, INL, INL, LOP, LOP, LOP, LOP, LOP, + SPC, SPC, LOP, LOP, LOP, LOP, LOP, SPC, + SPC, SPC, SPC, LOP, LOP, LOP, LOP, LOP, + SPC, SPC, SPC, SPC, SPC, LOP, LOP, SPC }, /* SHIFT_LSHIFTRT */ + { INL, INL, INL, LOP, LOP, LOP, LOP, LOP, + SPC, LOP, LOP, LOP, LOP, LOP, LOP, SPC, + SPC, SPC, LOP, LOP, LOP, LOP, LOP, LOP, + SPC, SPC, SPC, LOP, LOP, LOP, LOP, SPC }, /* SHIFT_ASHIFTRT */ + }, + { + /* TARGET_H8300H */ + /* 0 1 2 3 4 5 6 7 */ + /* 8 9 10 11 12 13 14 15 */ + /* 16 17 18 19 20 21 22 23 */ + /* 24 25 26 27 28 29 30 31 */ + { INL, INL, INL, INL, INL, LOP, LOP, LOP, + SPC, LOP, LOP, LOP, LOP, LOP, LOP, SPC, + SPC, SPC, SPC, SPC, LOP, LOP, LOP, LOP, + SPC, LOP, LOP, LOP, ROT, ROT, ROT, SPC }, /* SHIFT_ASHIFT */ + { INL, INL, INL, INL, INL, LOP, LOP, LOP, + SPC, LOP, LOP, LOP, LOP, LOP, LOP, SPC, + SPC, SPC, SPC, SPC, LOP, LOP, LOP, LOP, + SPC, LOP, LOP, LOP, ROT, ROT, ROT, SPC }, /* SHIFT_LSHIFTRT */ + { INL, INL, INL, INL, INL, LOP, LOP, LOP, + SPC, LOP, LOP, LOP, LOP, LOP, LOP, LOP, + SPC, SPC, SPC, SPC, LOP, LOP, LOP, LOP, + SPC, LOP, LOP, LOP, LOP, LOP, LOP, SPC }, /* SHIFT_ASHIFTRT */ + }, + { + /* TARGET_H8300S */ + /* 0 1 2 3 4 5 6 7 */ + /* 8 9 10 11 12 13 14 15 */ + /* 16 17 18 19 20 21 22 23 */ + /* 24 25 26 27 28 29 30 31 */ + { INL, INL, INL, INL, INL, INL, INL, INL, + INL, INL, INL, LOP, LOP, LOP, LOP, SPC, + SPC, SPC, SPC, SPC, SPC, SPC, LOP, LOP, + SPC, SPC, LOP, LOP, ROT, ROT, ROT, SPC }, /* SHIFT_ASHIFT */ + { INL, INL, INL, INL, INL, INL, INL, INL, + INL, INL, INL, LOP, LOP, LOP, LOP, SPC, + SPC, SPC, SPC, SPC, SPC, SPC, LOP, LOP, + SPC, SPC, LOP, LOP, ROT, ROT, ROT, SPC }, /* SHIFT_LSHIFTRT */ + { INL, INL, INL, INL, INL, INL, INL, INL, + INL, INL, INL, LOP, LOP, LOP, LOP, LOP, + SPC, SPC, SPC, SPC, SPC, SPC, LOP, LOP, + SPC, SPC, LOP, LOP, LOP, LOP, LOP, SPC }, /* SHIFT_ASHIFTRT */ + } + }; + + #undef INL + #undef ROT + #undef LOP + #undef SPC + struct shift_info { /* Shift algorithm. */ enum shift_alg alg; *************** struct shift_info { *** 1995,2003 **** int cc_valid_p; }; ! static enum shift_alg get_shift_alg PARAMS ((enum shift_type, ! enum shift_mode, int, ! struct shift_info *)); /* Given SHIFT_TYPE, SHIFT_MODE, and shift count COUNT, determine the best algorithm for doing the shift. The assembler code is stored --- 2126,2134 ---- int cc_valid_p; }; ! static void get_shift_alg PARAMS ((enum shift_type, ! enum shift_mode, unsigned int, ! struct shift_info *)); /* Given SHIFT_TYPE, SHIFT_MODE, and shift count COUNT, determine the best algorithm for doing the shift. The assembler code is stored *************** static enum shift_alg get_shift_alg PARA *** 2012,2282 **** WARNING: The constraints on insns shiftbyn_QI/HI/SI assume shifts of 1,2,3,4 will be inlined (1,2 for SI). */ ! static enum shift_alg get_shift_alg (shift_type, shift_mode, count, info) enum shift_type shift_type; enum shift_mode shift_mode; ! int count; struct shift_info *info; { ! /* Assume either SHIFT_LOOP or SHIFT_INLINE. ! It is up to the caller to know that looping clobbers cc. */ ! info->shift1 = shift_one[cpu_type][shift_type][shift_mode].assembler; ! if (TARGET_H8300S) ! info->shift2 = shift_two[shift_type][shift_mode].assembler; ! else ! info->shift2 = NULL; ! info->cc_valid_p = shift_one[cpu_type][shift_type][shift_mode].cc_valid; ! /* Now look for cases we want to optimize. */ switch (shift_mode) { case QIshift: ! if (count <= 4) ! return SHIFT_INLINE; else ! { ! /* Shift by 5/6 are only 3 insns on the H8/S, so it's just as ! fast as SHIFT_ROT_AND, plus CC is valid. */ ! if (TARGET_H8300S && count <= 6) ! return SHIFT_INLINE; ! /* For ASHIFTRT by 7 bits, the sign bit is simply replicated ! through the entire value. */ ! if (shift_type == SHIFT_ASHIFTRT && count == 7) ! { ! info->special = "shll\t%X0\n\tsubx\t%X0,%X0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; ! } ! /* Other ASHIFTRTs are too much of a pain. */ ! if (shift_type == SHIFT_ASHIFTRT) ! return SHIFT_LOOP; ! /* Other shifts by 5, 6, or 7 bits use SHIFT_ROT_AND. */ ! info->shift1 = rotate_one[cpu_type][shift_type][shift_mode]; ! if (TARGET_H8300S) ! info->shift2 = rotate_two[shift_type][shift_mode]; ! info->cc_valid_p = 0; ! return SHIFT_ROT_AND; ! } ! case HIshift: ! if (count <= 4) ! return SHIFT_INLINE; ! else if (TARGET_H8300S && count <= 7) ! return SHIFT_INLINE; ! else if (count == 7) ! { ! if (shift_type == SHIFT_ASHIFT && TARGET_H8300) ! { ! info->special = "shar.b\t%t0\n\tmov.b\t%s0,%t0\n\trotxr.b\t%t0\n\trotr.b\t%s0\n\tand.b\t#0x80,%s0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; ! } ! if (shift_type == SHIFT_ASHIFT && TARGET_H8300H) ! { ! info->special = "shar.b\t%t0\n\tmov.b\t%s0,%t0\n\trotxr.w\t%T0\n\tand.b\t#0x80,%s0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; ! } ! if (shift_type == SHIFT_LSHIFTRT && TARGET_H8300) ! { ! info->special = "shal.b\t%s0\n\tmov.b\t%t0,%s0\n\trotxl.b\t%s0\n\trotl.b\t%t0\n\tand.b\t#0x01,%t0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; ! } ! if (shift_type == SHIFT_LSHIFTRT && TARGET_H8300H) ! { ! info->special = "shal.b\t%s0\n\tmov.b\t%t0,%s0\n\trotxl.w\t%T0\n\tand.b\t#0x01,%t0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; ! } ! if (shift_type == SHIFT_ASHIFTRT) ! { ! info->special = "shal.b\t%s0\n\tmov.b\t%t0,%s0\n\trotxl.b\t%s0\n\tsubx\t%t0,%t0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; ! } ! } ! else if (count == 8) { ! switch (shift_type) ! { ! case SHIFT_ASHIFT: ! info->special = "mov.b\t%s0,%t0\n\tsub.b\t%s0,%s0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; ! case SHIFT_LSHIFTRT: ! info->special = "mov.b\t%t0,%s0\n\tsub.b\t%t0,%t0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; ! case SHIFT_ASHIFTRT: ! if (TARGET_H8300) ! info->special = "mov.b\t%t0,%s0\n\tshll\t%t0\n\tsubx\t%t0,%t0"; ! else ! info->special = "mov.b\t%t0,%s0\n\texts.w\t%T0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; ! } } ! else if (count == 9) { switch (shift_type) { case SHIFT_ASHIFT: - info->special = "mov.b\t%s0,%t0\n\tsub.b\t%s0,%s0\n\tshal.b\t%t0"; - info->cc_valid_p = 0; - return SHIFT_SPECIAL; - case SHIFT_LSHIFTRT: - info->special = "mov.b\t%t0,%s0\n\tsub.b\t%t0,%t0\n\tshlr.b\t%s0"; - info->cc_valid_p = 0; - return SHIFT_SPECIAL; - case SHIFT_ASHIFTRT: if (TARGET_H8300) ! info->special = "mov.b\t%t0,%s0\n\tbld\t#7,%s0\n\tsubx\t%t0,%t0\n\tshar.b\t%s0"; ! else ! info->special = "mov.b\t%t0,%s0\n\texts.w\t%T0\n\tshar.b\t%s0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; ! } ! } ! else if (count == 10) ! { ! switch (shift_type) ! { ! case SHIFT_ASHIFT: ! if (TARGET_H8300S) ! info->special = "mov.b\t%s0,%t0\n\tsub.b\t%s0,%s0\n\tshal.b\t#2,%t0"; else ! info->special = "mov.b\t%s0,%t0\n\tsub.b\t%s0,%s0\n\tshal.b\t%t0\n\tshal.b\t%t0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; case SHIFT_LSHIFTRT: ! if (TARGET_H8300S) ! info->special = "mov.b\t%t0,%s0\n\tsub.b\t%t0,%t0\n\tshlr.b\t#2,%s0"; else ! info->special = "mov.b\t%t0,%s0\n\tsub.b\t%t0,%t0\n\tshlr.b\t%s0\n\tshlr.b\t%s0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; case SHIFT_ASHIFTRT: ! if (TARGET_H8300) ! info->special = "mov.b\t%t0,%s0\n\tbld\t#7,%s0\n\tsubx\t%t0,%t0\n\tshar.b\t%s0\n\tshar.b\t%s0"; ! else if (TARGET_H8300H) ! info->special = "mov.b\t%t0,%s0\n\texts.w\t%T0\n\tshar.b\t%s0\n\tshar.b\t%s0"; ! else if (TARGET_H8300S) ! info->special = "mov.b\t%t0,%s0\n\texts.w\t%T0\n\tshar.b\t#2,%s0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; } } ! else if (count == 11) { switch (shift_type) { case SHIFT_ASHIFT: ! if (TARGET_H8300S) ! info->special = "mov.b\t%s0,%t0\n\tsub.b\t%s0,%s0\n\tshal.b\t#2,%t0\n\tshal.b\t%t0"; ! else ! info->special = "mov.b\t%s0,%t0\n\tsub.b\t%s0,%s0\n\tshal.b\t%t0\n\tshal.b\t%t0\n\tshal.b\t%t0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; case SHIFT_LSHIFTRT: ! if (TARGET_H8300S) ! info->special = "mov.b\t%t0,%s0\n\tsub.b\t%t0,%t0\n\tshlr.b\t#2,%s0\n\tshlr.b\t%s0"; ! else ! info->special = "mov.b\t%t0,%s0\n\tsub.b\t%t0,%t0\n\tshlr.b\t%s0\n\tshlr.b\t%s0\n\tshlr.b\t%s0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; case SHIFT_ASHIFTRT: if (TARGET_H8300) ! info->special = "mov.b\t%t0,%s0\n\tbld\t#7,%s0\n\tsubx\t%t0,%t0\n\tshar.b\t%s0\n\tshar.b\t%s0\n\tshar.b\t%s0"; ! else if (TARGET_H8300H) ! info->special = "mov.b\t%t0,%s0\n\texts.w\t%T0\n\tshar.b\t%s0\n\tshar.b\t%s0\n\tshar.b\t%s0"; ! else if (TARGET_H8300S) ! info->special = "mov.b\t%t0,%s0\n\texts.w\t%T0\n\tshar.b\t#2,%s0\n\tshar.b\t%s0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; } } ! else if (count == 12) { switch (shift_type) { case SHIFT_ASHIFT: ! if (TARGET_H8300S) ! info->special = "mov.b\t%s0,%t0\n\tsub.b\t%s0,%s0\n\tshal.b\t#2,%t0\n\tshal.b\t#2,%t0"; ! else ! info->special = "mov.b\t%s0,%t0\n\tsub.b\t%s0,%s0\n\tshal.b\t%t0\n\tshal.b\t%t0\n\tshal.b\t%t0\n\tshal.b\t%t0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; case SHIFT_LSHIFTRT: ! if (TARGET_H8300S) ! info->special = "mov.b\t%t0,%s0\n\tsub.b\t%t0,%t0\n\tshlr.b\t#2,%s0\n\tshlr.b\t#2,%s0"; ! else ! info->special = "mov.b\t%t0,%s0\n\tsub.b\t%t0,%t0\n\tshlr.b\t%s0\n\tshlr.b\t%s0\n\tshlr.b\t%s0\n\tshlr.b\t%s0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; case SHIFT_ASHIFTRT: - if (TARGET_H8300) - info->special = "mov.b\t%t0,%s0\n\tbld\t#7,%s0\n\tsubx\t%t0,%t0\n\tshar.b\t%s0\n\tshar.b\t%s0\n\tshar.b\t%s0\n\tshar.b\t%s0"; - else if (TARGET_H8300H) - info->special = "mov.b\t%t0,%s0\n\texts.w\t%T0\n\tshar.b\t%s0\n\tshar.b\t%s0\n\tshar.b\t%s0\n\tshar.b\t%s0"; - else if (TARGET_H8300S) - info->special = "mov.b\t%t0,%s0\n\texts.w\t%T0\n\tshar.b\t#2,%s0\n\tshar.b\t#2,%s0"; - info->cc_valid_p = 0; - return SHIFT_SPECIAL; - } - } - else if ((!TARGET_H8300 && (count == 13 || count == 14)) - || count == 15) - { - if (count == 15 && shift_type == SHIFT_ASHIFTRT) - { info->special = "shll\t%t0\n\tsubx\t%t0,%t0\n\tmov.b\t%t0,%s0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; ! } ! else if (shift_type != SHIFT_ASHIFTRT) ! { ! info->shift1 = rotate_one[cpu_type][shift_type][shift_mode]; ! if (TARGET_H8300S) ! info->shift2 = rotate_two[shift_type][shift_mode]; ! else ! info->shift2 = NULL; ! info->cc_valid_p = 0; ! return SHIFT_ROT_AND; } } ! break; case SIshift: ! if (count <= (TARGET_H8300 ? 2 : 4)) ! return SHIFT_INLINE; ! else if (TARGET_H8300S && count <= 10) ! return SHIFT_INLINE; ! else if (count == 8 && TARGET_H8300) { switch (shift_type) { case SHIFT_ASHIFT: info->special = "mov.b\t%y0,%z0\n\tmov.b\t%x0,%y0\n\tmov.b\t%w0,%x0\n\tsub.b\t%w0,%w0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; case SHIFT_LSHIFTRT: info->special = "mov.b\t%x0,%w0\n\tmov.b\t%y0,%x0\n\tmov.b\t%z0,%y0\n\tsub.b\t%z0,%z0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; case SHIFT_ASHIFTRT: info->special = "mov.b\t%x0,%w0\n\tmov.b\t%y0,%x0\n\tmov.b\t%z0,%y0\n\tshll\t%z0\n\tsubx\t%z0,%z0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; } } else if (count == 8 && !TARGET_H8300) --- 2143,2317 ---- WARNING: The constraints on insns shiftbyn_QI/HI/SI assume shifts of 1,2,3,4 will be inlined (1,2 for SI). */ ! static void get_shift_alg (shift_type, shift_mode, count, info) enum shift_type shift_type; enum shift_mode shift_mode; ! unsigned int count; struct shift_info *info; { ! int cpu; ! /* Find the target CPU. */ ! if (TARGET_H8300) ! cpu = 0; ! else if (TARGET_H8300H) ! cpu = 1; ! else ! cpu = 2; + /* Find the shift algorithm. */ switch (shift_mode) { case QIshift: ! if (GET_MODE_BITSIZE (QImode) <= count) ! info->alg = SHIFT_LOOP; else ! info->alg = shift_alg_qi[cpu][shift_type][count]; ! break; ! case HIshift: ! if (GET_MODE_BITSIZE (HImode) <= count) ! info->alg = SHIFT_LOOP; ! else ! info->alg = shift_alg_hi[cpu][shift_type][count]; ! break; ! case SIshift: ! if (GET_MODE_BITSIZE (SImode) <= count) ! info->alg = SHIFT_LOOP; ! else ! info->alg = shift_alg_si[cpu][shift_type][count]; ! break; ! default: ! abort (); ! } ! /* Fill in INFO. Return unless we have SHIFT_SPECIAL. */ ! switch (info->alg) ! { ! case SHIFT_INLINE: ! info->remainder = count; ! /* Fall through. */ ! case SHIFT_LOOP: ! /* It is up to the caller to know that looping clobbers cc. */ ! info->shift1 = shift_one[cpu_type][shift_type][shift_mode].assembler; ! info->shift2 = shift_two[shift_type][shift_mode].assembler; ! info->cc_valid_p = shift_one[cpu_type][shift_type][shift_mode].cc_valid; ! goto end; ! case SHIFT_ROT_AND: ! info->shift1 = rotate_one[cpu_type][shift_type][shift_mode]; ! info->shift2 = rotate_two[shift_type][shift_mode]; ! info->cc_valid_p = 0; ! goto end; ! case SHIFT_SPECIAL: ! /* REMAINDER is 0 for most cases, so initialize it to 0. */ ! info->remainder = 0; ! info->shift1 = shift_one[cpu_type][shift_type][shift_mode].assembler; ! info->shift2 = shift_two[shift_type][shift_mode].assembler; ! info->cc_valid_p = 0; ! break; ! } ! /* Here we only deal with SHIFT_SPECIAL. */ ! switch (shift_mode) ! { ! case QIshift: ! /* For ASHIFTRT by 7 bits, the sign bit is simply replicated ! through the entire value. */ ! if (shift_type == SHIFT_ASHIFTRT && count == 7) { ! info->special = "shll\t%X0\n\tsubx\t%X0,%X0"; ! goto end; } ! abort (); ! ! case HIshift: ! if (count == 7) { switch (shift_type) { case SHIFT_ASHIFT: if (TARGET_H8300) ! info->special = "shar.b\t%t0\n\tmov.b\t%s0,%t0\n\trotxr.b\t%t0\n\trotr.b\t%s0\n\tand.b\t#0x80,%s0"; else ! info->special = "shar.b\t%t0\n\tmov.b\t%s0,%t0\n\trotxr.w\t%T0\n\tand.b\t#0x80,%s0"; ! goto end; case SHIFT_LSHIFTRT: ! if (TARGET_H8300) ! info->special = "shal.b\t%s0\n\tmov.b\t%t0,%s0\n\trotxl.b\t%s0\n\trotl.b\t%t0\n\tand.b\t#0x01,%t0"; else ! info->special = "shal.b\t%s0\n\tmov.b\t%t0,%s0\n\trotxl.w\t%T0\n\tand.b\t#0x01,%t0"; ! goto end; case SHIFT_ASHIFTRT: ! info->special = "shal.b\t%s0\n\tmov.b\t%t0,%s0\n\trotxl.b\t%s0\n\tsubx\t%t0,%t0"; ! goto end; } } ! else if (8 <= count && count <= 12) { + info->remainder = count - 8; + switch (shift_type) { case SHIFT_ASHIFT: ! info->special = "mov.b\t%s0,%t0\n\tsub.b\t%s0,%s0"; ! info->shift1 = "shal.b\t%t0"; ! info->shift2 = "shal.b\t#2,%t0"; ! goto end; case SHIFT_LSHIFTRT: ! info->special = "mov.b\t%t0,%s0\n\tsub.b\t%t0,%t0"; ! info->shift1 = "shlr.b\t%s0"; ! info->shift2 = "shlr.b\t#2,%s0"; ! goto end; case SHIFT_ASHIFTRT: if (TARGET_H8300) ! info->special = "mov.b\t%t0,%s0\n\tbld\t#7,%s0\n\tsubx\t%t0,%t0"; ! else ! info->special = "mov.b\t%t0,%s0\n\texts.w\t%T0"; ! info->shift1 = "shar.b\t%s0"; ! info->shift2 = "shar.b\t#2,%s0"; ! goto end; } } ! else if (count == 15) { switch (shift_type) { case SHIFT_ASHIFT: ! info->special = "bld\t#0,%s0\n\txor\t%s0,%s0\n\txor\t%t0,%t0\n\tbst\t#7,%t0"; ! goto end; case SHIFT_LSHIFTRT: ! info->special = "bld\t#7,%t0\n\txor\t%s0,%s0\n\txor\t%t0,%t0\n\tbst\t#0,%s0"; ! goto end; case SHIFT_ASHIFTRT: info->special = "shll\t%t0\n\tsubx\t%t0,%t0\n\tmov.b\t%t0,%s0"; ! goto end; } } ! abort (); case SIshift: ! if (TARGET_H8300 && 8 <= count && count <= 9) { + info->remainder = count - 8; + switch (shift_type) { case SHIFT_ASHIFT: info->special = "mov.b\t%y0,%z0\n\tmov.b\t%x0,%y0\n\tmov.b\t%w0,%x0\n\tsub.b\t%w0,%w0"; ! goto end; case SHIFT_LSHIFTRT: info->special = "mov.b\t%x0,%w0\n\tmov.b\t%y0,%x0\n\tmov.b\t%z0,%y0\n\tsub.b\t%z0,%z0"; ! info->shift1 = "shlr\t%y0\n\trotxr\t%x0\n\trotxr\t%w0"; ! goto end; case SHIFT_ASHIFTRT: info->special = "mov.b\t%x0,%w0\n\tmov.b\t%y0,%x0\n\tmov.b\t%z0,%y0\n\tshll\t%z0\n\tsubx\t%z0,%z0"; ! goto end; } } else if (count == 8 && !TARGET_H8300) *************** get_shift_alg (shift_type, shift_mode, c *** 2285,2497 **** { case SHIFT_ASHIFT: info->special = "mov.w\t%e0,%f4\n\tmov.b\t%s4,%t4\n\tmov.b\t%t0,%s4\n\tmov.b\t%s0,%t0\n\tsub.b\t%s0,%s0\n\tmov.w\t%f4,%e0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; case SHIFT_LSHIFTRT: info->special = "mov.w\t%e0,%f4\n\tmov.b\t%t0,%s0\n\tmov.b\t%s4,%t0\n\tmov.b\t%t4,%s4\n\textu.w\t%f4\n\tmov.w\t%f4,%e0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; case SHIFT_ASHIFTRT: info->special = "mov.w\t%e0,%f4\n\tmov.b\t%t0,%s0\n\tmov.b\t%s4,%t0\n\tmov.b\t%t4,%s4\n\texts.w\t%f4\n\tmov.w\t%f4,%e0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; ! } ! } ! else if (count == 16) ! { ! switch (shift_type) ! { ! case SHIFT_ASHIFT: ! info->special = "mov.w\t%f0,%e0\n\tsub.w\t%f0,%f0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; ! case SHIFT_LSHIFTRT: ! info->special = "mov.w\t%e0,%f0\n\tsub.w\t%e0,%e0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; ! case SHIFT_ASHIFTRT: ! if (TARGET_H8300) ! info->special = "mov.w\t%e0,%f0\n\tshll\t%z0\n\tsubx\t%z0,%z0\n\tmov.b\t%z0,%y0"; ! else ! info->special = "mov.w\t%e0,%f0\n\texts.l\t%S0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; } } ! else if (count == 17 && !TARGET_H8300) { switch (shift_type) { case SHIFT_ASHIFT: ! info->special = "mov.w\t%f0,%e0\n\tsub.w\t%f0,%f0\n\tshll.l\t%S0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; case SHIFT_LSHIFTRT: ! info->special = "mov.w\t%e0,%f0\n\tsub.w\t%e0,%e0\n\tshlr.l\t%S0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; case SHIFT_ASHIFTRT: ! info->special = "mov.w\t%e0,%f0\n\texts.l\t%S0\n\tshar.l\t%S0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; } } ! else if (count == 18 && !TARGET_H8300) { switch (shift_type) { case SHIFT_ASHIFT: ! if (TARGET_H8300S) ! info->special = "mov.w\t%f0,%e0\n\tsub.w\t%f0,%f0\n\tshll.l\t#2,%S0"; ! else ! info->special = "mov.w\t%f0,%e0\n\tsub.w\t%f0,%f0\n\tshll.l\t%S0\n\tshll.l\t%S0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; case SHIFT_LSHIFTRT: ! if (TARGET_H8300S) ! info->special = "mov.w\t%e0,%f0\n\tsub.w\t%e0,%e0\n\tshlr.l\t#2,%S0"; ! else ! info->special = "mov.w\t%e0,%f0\n\tsub.w\t%e0,%e0\n\tshlr.l\t%S0\n\tshlr.l\t%S0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; case SHIFT_ASHIFTRT: ! if (TARGET_H8300S) ! info->special = "mov.w\t%e0,%f0\n\texts.l\t%S0\n\tshar.l\t#2,%S0"; ! else ! info->special = "mov.w\t%e0,%f0\n\texts.l\t%S0\n\tshar.l\t%S0\n\tshar.l\t%S0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; } } ! else if (count == 19 && !TARGET_H8300) { switch (shift_type) { case SHIFT_ASHIFT: ! if (TARGET_H8300S) ! info->special = "mov.w\t%f0,%e0\n\tsub.w\t%f0,%f0\n\tshll.l\t#2,%S0\n\tshll.l\t%S0"; else ! info->special = "mov.w\t%f0,%e0\n\tsub.w\t%f0,%f0\n\tshll.l\t%S0\n\tshll.l\t%S0\n\tshll.l\t%S0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; case SHIFT_LSHIFTRT: ! if (TARGET_H8300S) ! info->special = "mov.w\t%e0,%f0\n\tsub.w\t%e0,%e0\n\tshlr.l\t#2,%S0\n\tshlr.l\t%S0"; else ! info->special = "mov.w\t%e0,%f0\n\tsub.w\t%e0,%e0\n\tshlr.l\t%S0\n\tshlr.l\t%S0\n\tshlr.l\t%S0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; case SHIFT_ASHIFTRT: ! if (TARGET_H8300S) ! info->special = "mov.w\t%e0,%f0\n\texts.l\t%S0\n\tshar.l\t#2,%S0\n\tshar.l\t%S0"; else ! info->special = "mov.w\t%e0,%f0\n\texts.l\t%S0\n\tshar.l\t%S0\n\tshar.l\t%S0\n\tshar.l\t%S0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; } } ! else if (count == 20 && TARGET_H8300S) { switch (shift_type) { case SHIFT_ASHIFT: ! info->special = "mov.w\t%f0,%e0\n\tsub.w\t%f0,%f0\n\tshll.l\t#2,%S0\n\tshll.l\t#2,%S0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; case SHIFT_LSHIFTRT: ! info->special = "mov.w\t%e0,%f0\n\tsub.w\t%e0,%e0\n\tshlr.l\t#2,%S0\n\tshlr.l\t#2,%S0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; case SHIFT_ASHIFTRT: ! info->special = "mov.w\t%e0,%f0\n\texts.l\t%S0\n\tshar.l\t#2,%S0\n\tshar.l\t#2,%S0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; ! } ! } ! else if (count == 24 && !TARGET_H8300) { switch (shift_type) { case SHIFT_ASHIFT: info->special = "mov.b\t%s0,%t0\n\tsub.b\t%s0,%s0\n\tmov.w\t%f0,%e0\n\tsub.w\t%f0,%f0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; case SHIFT_LSHIFTRT: info->special = "mov.w\t%e0,%f0\n\tmov.b\t%t0,%s0\n\textu.w\t%f0\n\textu.l\t%S0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; case SHIFT_ASHIFTRT: info->special = "mov.w\t%e0,%f0\n\tmov.b\t%t0,%s0\n\texts.w\t%f0\n\texts.l\t%S0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; ! } ! } ! else if (count >= 28 && count <= 30 && !TARGET_H8300) ! { ! if (shift_type == SHIFT_ASHIFTRT) ! { ! return SHIFT_LOOP; ! } ! else ! { ! info->shift1 = rotate_one[cpu_type][shift_type][shift_mode]; ! if (TARGET_H8300S) ! info->shift2 = rotate_two[shift_type][shift_mode]; ! else ! info->shift2 = NULL; ! info->cc_valid_p = 0; ! return SHIFT_ROT_AND; } } else if (count == 31) { ! if (shift_type == SHIFT_ASHIFTRT) { ! if (TARGET_H8300) ! info->special = "shll\t%z0\n\tsubx\t%w0,%w0\n\tmov.b\t%w0,%x0\n\tmov.w\t%f0,%e0"; ! else ! info->special = "shll\t%e0\n\tsubx\t%w0,%w0\n\tmov.b\t%w0,%x0\n\tmov.w\t%f0,%e0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; } else { ! if (TARGET_H8300) ! { ! if (shift_type == SHIFT_ASHIFT) ! info->special = "sub.w\t%e0,%e0\n\tshlr\t%w0\n\tmov.w\t%e0,%f0\n\trotxr\t%z0"; ! else ! info->special = "sub.w\t%f0,%f0\n\tshll\t%z0\n\tmov.w\t%f0,%e0\n\trotxl\t%w0"; ! info->cc_valid_p = 0; ! return SHIFT_SPECIAL; ! } ! else { ! info->shift1 = rotate_one[cpu_type][shift_type][shift_mode]; ! if (TARGET_H8300S) ! info->shift2 = rotate_two[shift_type][shift_mode]; ! else ! info->shift2 = NULL; ! info->cc_valid_p = 0; ! return SHIFT_ROT_AND; } } } ! break; default: abort (); } ! /* No fancy method is available. Just loop. */ ! return SHIFT_LOOP; } /* Emit the assembler code for doing shifts. */ const char * ! emit_a_shift (insn, operands) ! rtx insn ATTRIBUTE_UNUSED; rtx *operands; { static int loopend_lab; --- 2320,2501 ---- { case SHIFT_ASHIFT: info->special = "mov.w\t%e0,%f4\n\tmov.b\t%s4,%t4\n\tmov.b\t%t0,%s4\n\tmov.b\t%s0,%t0\n\tsub.b\t%s0,%s0\n\tmov.w\t%f4,%e0"; ! goto end; case SHIFT_LSHIFTRT: info->special = "mov.w\t%e0,%f4\n\tmov.b\t%t0,%s0\n\tmov.b\t%s4,%t0\n\tmov.b\t%t4,%s4\n\textu.w\t%f4\n\tmov.w\t%f4,%e0"; ! goto end; case SHIFT_ASHIFTRT: info->special = "mov.w\t%e0,%f4\n\tmov.b\t%t0,%s0\n\tmov.b\t%s4,%t0\n\tmov.b\t%t4,%s4\n\texts.w\t%f4\n\tmov.w\t%f4,%e0"; ! goto end; } } ! else if (count == 15 && TARGET_H8300) { switch (shift_type) { case SHIFT_ASHIFT: ! abort (); case SHIFT_LSHIFTRT: ! info->special = "bld\t#7,%z0\n\tmov.w\t%e0,%f0\n\txor\t%y0,%y0\n\txor\t%z0,%z0\n\trotxl\t%w0,%w0\n\trotxl\t%x0,%x0\n\trotxl\t%y0,%y0"; ! goto end; case SHIFT_ASHIFTRT: ! info->special = "bld\t#7,%z0\n\tmov.w\t%e0,%f0\n\trotxl\t%w0,%w0\n\trotxl\t%x0,%x0\n\tsubx\t%y0,%y0\n\tsubx\t%z0,%z0"; ! goto end; } } ! else if (count == 15 && !TARGET_H8300) { switch (shift_type) { case SHIFT_ASHIFT: ! info->special = "shlr.w\t%e0\n\tmov.w\t%f0,%e0\n\txor.w\t%f0,%f0\n\trotxr.l\t%S0"; ! goto end; case SHIFT_LSHIFTRT: ! info->special = "shll.w\t%f0\n\tmov.w\t%e0,%f0\n\txor.w\t%e0,%e0\n\trotxl.l\t%S0"; ! goto end; case SHIFT_ASHIFTRT: ! abort (); } } ! else if ((TARGET_H8300 && 16 <= count && count <= 20) ! || (TARGET_H8300H && 16 <= count && count <= 19) ! || (TARGET_H8300S && 16 <= count && count <= 21)) { + info->remainder = count - 16; + switch (shift_type) { case SHIFT_ASHIFT: ! info->special = "mov.w\t%f0,%e0\n\tsub.w\t%f0,%f0"; ! if (TARGET_H8300) ! { ! info->shift1 = "add.w\t%e0,%e0"; ! } else ! { ! info->shift1 = "shll.l\t%S0"; ! info->shift2 = "shll.l\t#2,%S0"; ! } ! goto end; case SHIFT_LSHIFTRT: ! info->special = "mov.w\t%e0,%f0\n\tsub.w\t%e0,%e0"; ! if (TARGET_H8300) ! { ! info->shift1 = "shlr\t%x0\n\trotxr\t%w0"; ! } else ! { ! info->shift1 = "shlr.l\t%S0"; ! info->shift2 = "shlr.l\t#2,%S0"; ! } ! goto end; case SHIFT_ASHIFTRT: ! if (TARGET_H8300) ! { ! info->special = "mov.w\t%e0,%f0\n\tshll\t%z0\n\tsubx\t%z0,%z0\n\tmov.b\t%z0,%y0"; ! info->shift1 = "shar\t%x0\n\trotxr\t%w0"; ! } else ! { ! info->special = "mov.w\t%e0,%f0\n\texts.l\t%S0"; ! info->shift1 = "shar.l\t%S0"; ! info->shift2 = "shar.l\t#2,%S0"; ! } ! goto end; } } ! else if (TARGET_H8300 && 24 <= count && count <= 28) { + info->remainder = count - 24; + switch (shift_type) { case SHIFT_ASHIFT: ! info->special = "mov.b\t%w0,%z0\n\tsub.b\t%y0,%y0\n\tsub.w\t%f0,%f0"; ! info->shift1 = "shll.b\t%z0"; ! goto end; case SHIFT_LSHIFTRT: ! info->special = "mov.b\t%z0,%w0\n\tsub.b\t%x0,%x0\n\tsub.w\t%e0,%e0"; ! info->shift1 = "shlr.b\t%w0"; ! goto end; case SHIFT_ASHIFTRT: ! info->special = "mov.b\t%z0,%w0\n\tbld\t#7,%w0\n\tsubx\t%x0,%x0\n\tsubx\t%x0,%x0\n\tsubx\t%x0,%x0"; ! info->shift1 = "shar.b\t%w0"; ! goto end; ! } ! } ! else if ((TARGET_H8300H && count == 24) ! || (TARGET_H8300S && 24 <= count && count <= 25)) { + info->remainder = count - 24; + switch (shift_type) { case SHIFT_ASHIFT: info->special = "mov.b\t%s0,%t0\n\tsub.b\t%s0,%s0\n\tmov.w\t%f0,%e0\n\tsub.w\t%f0,%f0"; ! info->shift1 = "shll.l\t%S0"; ! info->shift2 = "shll.l\t#2,%S0"; ! goto end; case SHIFT_LSHIFTRT: info->special = "mov.w\t%e0,%f0\n\tmov.b\t%t0,%s0\n\textu.w\t%f0\n\textu.l\t%S0"; ! info->shift1 = "shlr.l\t%S0"; ! info->shift2 = "shlr.l\t#2,%S0"; ! goto end; case SHIFT_ASHIFTRT: info->special = "mov.w\t%e0,%f0\n\tmov.b\t%t0,%s0\n\texts.w\t%f0\n\texts.l\t%S0"; ! info->shift1 = "shar.l\t%S0"; ! info->shift2 = "shar.l\t#2,%S0"; ! goto end; } } else if (count == 31) { ! if (TARGET_H8300) { ! switch (shift_type) ! { ! case SHIFT_ASHIFT: ! info->special = "sub.w\t%e0,%e0\n\tshlr\t%w0\n\tmov.w\t%e0,%f0\n\trotxr\t%z0"; ! goto end; ! case SHIFT_LSHIFTRT: ! info->special = "sub.w\t%f0,%f0\n\tshll\t%z0\n\tmov.w\t%f0,%e0\n\trotxl\t%w0"; ! goto end; ! case SHIFT_ASHIFTRT: ! info->special = "shll\t%z0\n\tsubx\t%w0,%w0\n\tmov.b\t%w0,%x0\n\tmov.w\t%f0,%e0"; ! goto end; ! } } else { ! switch (shift_type) { ! case SHIFT_ASHIFT: ! info->special = "shlr.l\t%S0\n\txor.l\t%S0,%S0\n\trotxr.l\t%S0"; ! goto end; ! case SHIFT_LSHIFTRT: ! info->special = "shll.l\t%S0\n\txor.l\t%S0,%S0\n\trotxl.l\t%S0"; ! goto end; ! case SHIFT_ASHIFTRT: ! info->special = "shll\t%e0\n\tsubx\t%w0,%w0\n\tmov.b\t%w0,%x0\n\tmov.w\t%f0,%e0"; ! goto end; } } } ! abort (); default: abort (); } ! end: ! if (!TARGET_H8300S) ! info->shift2 = NULL; } /* Emit the assembler code for doing shifts. */ const char * ! output_a_shift (operands) rtx *operands; { static int loopend_lab; *************** emit_a_shift (insn, operands) *** 2554,2560 **** else { int n = INTVAL (operands[2]); - enum shift_alg alg; /* If the count is negative, make it 0. */ if (n < 0) --- 2558,2563 ---- *************** emit_a_shift (insn, operands) *** 2565,2588 **** else if ((unsigned int) n > GET_MODE_BITSIZE (mode)) n = GET_MODE_BITSIZE (mode); ! alg = get_shift_alg (shift_type, shift_mode, n, &info); ! switch (alg) { case SHIFT_INLINE: /* Emit two bit shifts first. */ ! while (n > 1 && info.shift2 != NULL) { ! output_asm_insn (info.shift2, operands); ! n -= 2; } /* Now emit one bit shifts for any residual. */ ! while (n > 0) ! { ! output_asm_insn (info.shift1, operands); ! n -= 1; ! } /* Keep track of CC. */ if (info.cc_valid_p) --- 2568,2594 ---- else if ((unsigned int) n > GET_MODE_BITSIZE (mode)) n = GET_MODE_BITSIZE (mode); ! get_shift_alg (shift_type, shift_mode, n, &info); ! switch (info.alg) { + case SHIFT_SPECIAL: + output_asm_insn (info.special, operands); + /* Fall through. */ + case SHIFT_INLINE: + n = info.remainder; + /* Emit two bit shifts first. */ ! if (info.shift2 != NULL) { ! for (; n > 1; n -= 2) ! output_asm_insn (info.shift2, operands); } /* Now emit one bit shifts for any residual. */ ! for (; n > 0; n--) ! output_asm_insn (info.shift1, operands); /* Keep track of CC. */ if (info.cc_valid_p) *************** emit_a_shift (insn, operands) *** 2596,2603 **** { int m = GET_MODE_BITSIZE (mode) - n; int mask = (shift_type == SHIFT_ASHIFT ! ? ((1 << (GET_MODE_BITSIZE (mode) - n)) - 1) << n ! : (1 << (GET_MODE_BITSIZE (mode) - n)) - 1); char insn_buf[200]; /* Not all possibilities of rotate are supported. They shouldn't --- 2602,2609 ---- { int m = GET_MODE_BITSIZE (mode) - n; int mask = (shift_type == SHIFT_ASHIFT ! ? ((1 << m) - 1) << n ! : (1 << m) - 1); char insn_buf[200]; /* Not all possibilities of rotate are supported. They shouldn't *************** emit_a_shift (insn, operands) *** 2606,2623 **** abort (); /* Emit two bit rotates first. */ ! while (m > 1 && info.shift2 != NULL) { ! output_asm_insn (info.shift2, operands); ! m -= 2; } /* Now single bit rotates for any residual. */ ! while (m > 0) ! { ! output_asm_insn (info.shift1, operands); ! m -= 1; ! } /* Now mask off the high bits. */ if (TARGET_H8300) --- 2612,2626 ---- abort (); /* Emit two bit rotates first. */ ! if (info.shift2 != NULL) { ! for (; m > 1; m -= 2) ! output_asm_insn (info.shift2, operands); } /* Now single bit rotates for any residual. */ ! for (; m > 0; m--) ! output_asm_insn (info.shift1, operands); /* Now mask off the high bits. */ if (TARGET_H8300) *************** emit_a_shift (insn, operands) *** 2633,2642 **** sprintf (insn_buf, "and\t#%d,%%s0\n\tand\t#%d,%%t0", mask & 255, mask >> 8); break; - case SImode: - abort (); default: ! break; } } else --- 2636,2643 ---- sprintf (insn_buf, "and\t#%d,%%s0\n\tand\t#%d,%%t0", mask & 255, mask >> 8); break; default: ! abort (); } } else *************** emit_a_shift (insn, operands) *** 2651,2660 **** return ""; } - case SHIFT_SPECIAL: - output_asm_insn (info.special, operands); - return ""; - case SHIFT_LOOP: /* A loop to shift by a "large" constant value. If we have shift-by-2 insns, use them. */ --- 2652,2657 ---- *************** emit_a_shift (insn, operands) *** 2693,2699 **** int expand_a_rotate (code, operands) ! int code; rtx operands[]; { rtx dst = operands[0]; --- 2690,2696 ---- int expand_a_rotate (code, operands) ! enum rtx_code code; rtx operands[]; { rtx dst = operands[0]; *************** expand_a_rotate (code, operands) *** 2713,2720 **** /* If the rotate amount is less than or equal to 0, we go out of the loop. */ ! emit_cmp_and_jump_insns (rotate_amount, GEN_INT (0), ! LE, NULL_RTX, QImode, 0, 0, end_label); /* Initialize the loop counter. */ emit_move_insn (counter, rotate_amount); --- 2710,2717 ---- /* If the rotate amount is less than or equal to 0, we go out of the loop. */ ! emit_cmp_and_jump_insns (rotate_amount, GEN_INT (0), LE, NULL_RTX, ! QImode, 0, end_label); /* Initialize the loop counter. */ emit_move_insn (counter, rotate_amount); *************** expand_a_rotate (code, operands) *** 2731,2738 **** /* If the loop counter is non-zero, we go back to the beginning of the loop. */ ! emit_cmp_and_jump_insns (counter, GEN_INT (0), ! NE, NULL_RTX, QImode, 1, 0, start_label); emit_label (end_label); } --- 2728,2735 ---- /* If the loop counter is non-zero, we go back to the beginning of the loop. */ ! emit_cmp_and_jump_insns (counter, GEN_INT (0), NE, NULL_RTX, QImode, 1, ! start_label); emit_label (end_label); } *************** expand_a_rotate (code, operands) *** 2750,2756 **** const char * emit_a_rotate (code, operands) ! int code; rtx *operands; { rtx dst = operands[0]; --- 2747,2753 ---- const char * emit_a_rotate (code, operands) ! enum rtx_code code; rtx *operands; { rtx dst = operands[0]; *************** emit_a_rotate (code, operands) *** 2802,2808 **** /* Determine the faster direction. After this phase, amount will be at most a half of GET_MODE_BITSIZE (mode). */ ! if ((unsigned int) amount > GET_MODE_BITSIZE (mode) / 2) { /* Flip the direction. */ amount = GET_MODE_BITSIZE (mode) - amount; --- 2799,2805 ---- /* Determine the faster direction. After this phase, amount will be at most a half of GET_MODE_BITSIZE (mode). */ ! if ((unsigned int) amount > GET_MODE_BITSIZE (mode) / 2U) { /* Flip the direction. */ amount = GET_MODE_BITSIZE (mode) - amount; *************** h8300_interrupt_function_p (func) *** 2922,2928 **** if (TREE_CODE (func) != FUNCTION_DECL) return 0; ! a = lookup_attribute ("interrupt_handler", DECL_MACHINE_ATTRIBUTES (func)); return a != NULL_TREE; } --- 2919,2925 ---- if (TREE_CODE (func) != FUNCTION_DECL) return 0; ! a = lookup_attribute ("interrupt_handler", DECL_ATTRIBUTES (func)); return a != NULL_TREE; } *************** h8300_os_task_function_p (func) *** 2938,2944 **** if (TREE_CODE (func) != FUNCTION_DECL) return 0; ! a = lookup_attribute ("OS_Task", DECL_MACHINE_ATTRIBUTES (func)); return a != NULL_TREE; } --- 2935,2941 ---- if (TREE_CODE (func) != FUNCTION_DECL) return 0; ! a = lookup_attribute ("OS_Task", DECL_ATTRIBUTES (func)); return a != NULL_TREE; } *************** h8300_monitor_function_p (func) *** 2954,2960 **** if (TREE_CODE (func) != FUNCTION_DECL) return 0; ! a = lookup_attribute ("monitor", DECL_MACHINE_ATTRIBUTES (func)); return a != NULL_TREE; } --- 2951,2957 ---- if (TREE_CODE (func) != FUNCTION_DECL) return 0; ! a = lookup_attribute ("monitor", DECL_ATTRIBUTES (func)); return a != NULL_TREE; } *************** h8300_funcvec_function_p (func) *** 2970,2976 **** if (TREE_CODE (func) != FUNCTION_DECL) return 0; ! a = lookup_attribute ("function_vector", DECL_MACHINE_ATTRIBUTES (func)); return a != NULL_TREE; } --- 2967,2973 ---- if (TREE_CODE (func) != FUNCTION_DECL) return 0; ! a = lookup_attribute ("function_vector", DECL_ATTRIBUTES (func)); return a != NULL_TREE; } *************** h8300_eightbit_data_p (decl) *** 2986,2992 **** if (TREE_CODE (decl) != VAR_DECL) return 0; ! a = lookup_attribute ("eightbit_data", DECL_MACHINE_ATTRIBUTES (decl)); return a != NULL_TREE; } --- 2983,2989 ---- if (TREE_CODE (decl) != VAR_DECL) return 0; ! a = lookup_attribute ("eightbit_data", DECL_ATTRIBUTES (decl)); return a != NULL_TREE; } *************** h8300_tiny_data_p (decl) *** 3002,3016 **** if (TREE_CODE (decl) != VAR_DECL) return 0; ! a = lookup_attribute ("tiny_data", DECL_MACHINE_ATTRIBUTES (decl)); return a != NULL_TREE; } ! /* Return nonzero if ATTR is a valid attribute for DECL. ! ATTRIBUTES are any existing attributes and ARGS are the arguments ! supplied with ATTR. ! ! Supported attributes: interrupt_handler: output a prologue and epilogue suitable for an interrupt handler. --- 2999,3009 ---- if (TREE_CODE (decl) != VAR_DECL) return 0; ! a = lookup_attribute ("tiny_data", DECL_ATTRIBUTES (decl)); return a != NULL_TREE; } ! /* Supported attributes: interrupt_handler: output a prologue and epilogue suitable for an interrupt handler. *************** h8300_tiny_data_p (decl) *** 3024,3070 **** tiny_data: This variable lives in the tiny data area and can be referenced with 16-bit absolute memory references. */ ! int ! h8300_valid_machine_decl_attribute (decl, attributes, attr, args) ! tree decl; ! tree attributes ATTRIBUTE_UNUSED; ! tree attr; ! tree args; { ! if (args != NULL_TREE) ! return 0; - if (is_attribute_p ("interrupt_handler", attr) - || is_attribute_p ("OS_Task", attr) - || is_attribute_p ("monitor", attr) - || is_attribute_p ("function_vector", attr)) - return TREE_CODE (decl) == FUNCTION_DECL; ! if (is_attribute_p ("eightbit_data", attr) ! && (TREE_STATIC (decl) || DECL_EXTERNAL (decl))) { - if (DECL_INITIAL (decl) == NULL_TREE) - { - warning ("Only initialized variables can be placed into the 8-bit area."); - return 0; - } DECL_SECTION_NAME (decl) = build_string (7, ".eight"); ! return 1; } ! if (is_attribute_p ("tiny_data", attr) ! && (TREE_STATIC (decl) || DECL_EXTERNAL (decl))) { - if (DECL_INITIAL (decl) == NULL_TREE) - { - warning ("Only initialized variables can be placed into the 8-bit area."); - return 0; - } DECL_SECTION_NAME (decl) = build_string (6, ".tiny"); ! return 1; } ! return 0; } void --- 3017,3103 ---- tiny_data: This variable lives in the tiny data area and can be referenced with 16-bit absolute memory references. */ ! const struct attribute_spec h8300_attribute_table[] = { ! /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */ ! { "interrupt_handler", 0, 0, true, false, false, h8300_handle_fndecl_attribute }, ! { "OS_Task", 0, 0, true, false, false, h8300_handle_fndecl_attribute }, ! { "monitor", 0, 0, true, false, false, h8300_handle_fndecl_attribute }, ! { "function_vector", 0, 0, true, false, false, h8300_handle_fndecl_attribute }, ! { "eightbit_data", 0, 0, true, false, false, h8300_handle_eightbit_data_attribute }, ! { "tiny_data", 0, 0, true, false, false, h8300_handle_tiny_data_attribute }, ! { NULL, 0, 0, false, false, false, NULL } ! }; ! /* Handle an attribute requiring a FUNCTION_DECL; arguments as in ! struct attribute_spec.handler. */ ! static tree ! h8300_handle_fndecl_attribute (node, name, args, flags, no_add_attrs) ! tree *node; ! tree name; ! tree args ATTRIBUTE_UNUSED; ! int flags ATTRIBUTE_UNUSED; ! bool *no_add_attrs; ! { ! if (TREE_CODE (*node) != FUNCTION_DECL) ! { ! warning ("`%s' attribute only applies to functions", ! IDENTIFIER_POINTER (name)); ! *no_add_attrs = true; ! } ! ! return NULL_TREE; ! } ! ! /* Handle an "eightbit_data" attribute; arguments as in ! struct attribute_spec.handler. */ ! static tree ! h8300_handle_eightbit_data_attribute (node, name, args, flags, no_add_attrs) ! tree *node; ! tree name; ! tree args ATTRIBUTE_UNUSED; ! int flags ATTRIBUTE_UNUSED; ! bool *no_add_attrs; ! { ! tree decl = *node; ! ! if (TREE_STATIC (decl) || DECL_EXTERNAL (decl)) { DECL_SECTION_NAME (decl) = build_string (7, ".eight"); ! } ! else ! { ! warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); ! *no_add_attrs = true; } ! return NULL_TREE; ! } ! ! /* Handle an "tiny_data" attribute; arguments as in ! struct attribute_spec.handler. */ ! static tree ! h8300_handle_tiny_data_attribute (node, name, args, flags, no_add_attrs) ! tree *node; ! tree name; ! tree args ATTRIBUTE_UNUSED; ! int flags ATTRIBUTE_UNUSED; ! bool *no_add_attrs; ! { ! tree decl = *node; ! ! if (TREE_STATIC (decl) || DECL_EXTERNAL (decl)) { DECL_SECTION_NAME (decl) = build_string (6, ".tiny"); ! } ! else ! { ! warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); ! *no_add_attrs = true; } ! return NULL_TREE; } void *************** h8300_encode_label (decl) *** 3083,3109 **** } const char * ! output_simode_bld (bild, log2, operands) int bild; - int log2; rtx operands[]; { ! /* Clear the destination register. */ ! if (TARGET_H8300H || TARGET_H8300S) ! output_asm_insn ("sub.l\t%S0,%S0", operands); ! else ! output_asm_insn ("sub.w\t%e0,%e0\n\tsub.w\t%f0,%f0", operands); ! /* Get the bit number we want to load. */ ! if (log2) ! operands[2] = GEN_INT (exact_log2 (INTVAL (operands[2]))); ! /* Now output the bit load or bit inverse load, and store it in ! the destination. */ ! if (bild) ! output_asm_insn ("bild\t%Z2,%Y1\n\tbst\t#0,%w0", operands); else ! output_asm_insn ("bld\t%Z2,%Y1\n\tbst\t#0,%w0", operands); /* All done. */ return ""; --- 3116,3150 ---- } const char * ! output_simode_bld (bild, operands) int bild; rtx operands[]; { ! if (TARGET_H8300) ! { ! /* Clear the destination register. */ ! output_asm_insn ("sub.w\t%e0,%e0\n\tsub.w\t%f0,%f0", operands); ! /* Now output the bit load or bit inverse load, and store it in ! the destination. */ ! if (bild) ! output_asm_insn ("bild\t%Z2,%Y1", operands); ! else ! output_asm_insn ("bld\t%Z2,%Y1", operands); ! output_asm_insn ("bst\t#0,%w0", operands); ! } else ! { ! /* Output the bit load or bit inverse load. */ ! if (bild) ! output_asm_insn ("bild\t%Z2,%Y1", operands); ! else ! output_asm_insn ("bld\t%Z2,%Y1", operands); ! ! /* Clear the destination register and perform the bit store. */ ! output_asm_insn ("xor.l\t%S0,%S0\n\tbst\t#0,%w0", operands); ! } /* All done. */ return ""; *************** h8300_adjust_insn_length (insn, length) *** 3119,3139 **** rtx insn; int length ATTRIBUTE_UNUSED; { ! rtx pat; ! /* We must filter these ou before calling get_attr_adjust_length. */ ! if (GET_CODE (PATTERN (insn)) == USE ! || GET_CODE (PATTERN (insn)) == CLOBBER ! || GET_CODE (PATTERN (insn)) == SEQUENCE ! || GET_CODE (PATTERN (insn)) == ADDR_VEC ! || GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC) return 0; if (get_attr_adjust_length (insn) == ADJUST_LENGTH_NO) return 0; - pat = PATTERN (insn); - /* Adjust length for reg->mem and mem->reg copies. */ if (GET_CODE (pat) == SET && (GET_CODE (SET_SRC (pat)) == MEM --- 3160,3178 ---- rtx insn; int length ATTRIBUTE_UNUSED; { ! rtx pat = PATTERN (insn); ! /* We must filter these out before calling get_attr_adjust_length. */ ! if (GET_CODE (pat) == USE ! || GET_CODE (pat) == CLOBBER ! || GET_CODE (pat) == SEQUENCE ! || GET_CODE (pat) == ADDR_VEC ! || GET_CODE (pat) == ADDR_DIFF_VEC) return 0; if (get_attr_adjust_length (insn) == ADJUST_LENGTH_NO) return 0; /* Adjust length for reg->mem and mem->reg copies. */ if (GET_CODE (pat) == SET && (GET_CODE (SET_SRC (pat)) == MEM *************** h8300_adjust_insn_length (insn, length) *** 3159,3166 **** && GET_CODE (addr) == REG) return -6; ! /* On the H8/300H and H8/300S, reg + d, for small displacements is 4 ! bytes shorter than indicated in the machine description. */ if ((TARGET_H8300H || TARGET_H8300S) && GET_CODE (addr) == PLUS && GET_CODE (XEXP (addr, 0)) == REG --- 3198,3205 ---- && GET_CODE (addr) == REG) return -6; ! /* On the H8/300H and H8/S, reg + d, for small displacements is ! 4 bytes shorter than indicated in the machine description. */ if ((TARGET_H8300H || TARGET_H8300S) && GET_CODE (addr) == PLUS && GET_CODE (XEXP (addr, 0)) == REG *************** h8300_adjust_insn_length (insn, length) *** 3169,3175 **** && INTVAL (XEXP (addr, 1)) < 32767) return -4; ! /* On the H8/300H and H8/300S, abs:16 is two bytes shorter than the more general abs:24. */ if ((TARGET_H8300H || TARGET_H8300S) && GET_CODE (addr) == SYMBOL_REF --- 3208,3214 ---- && INTVAL (XEXP (addr, 1)) < 32767) return -4; ! /* On the H8/300H and H8/S, abs:16 is two bytes shorter than the more general abs:24. */ if ((TARGET_H8300H || TARGET_H8300S) && GET_CODE (addr) == SYMBOL_REF *************** h8300_adjust_insn_length (insn, length) *** 3194,3203 **** { if (val == (val & 0xff) || val == (val & 0xff00)) ! return -6; ! if (val == -4 || val == -2 || val == -1) ! return -6; } } --- 3233,3253 ---- { if (val == (val & 0xff) || val == (val & 0xff00)) ! return 4 - 6; ! switch (val & 0xffffffff) ! { ! case 0xffffffff: ! case 0xfffffffe: ! case 0xfffffffc: ! case 0x0000ffff: ! case 0x0000fffe: ! case 0xffff0000: ! case 0xfffe0000: ! case 0x00010000: ! case 0x00020000: ! return 4 - 6; ! } } } *************** h8300_adjust_insn_length (insn, length) *** 3218,3224 **** shift = INTVAL (XEXP (src, 1)); /* According to ANSI, negative shift is undefined. It is considered to be zero in this case (see function ! emit_a_shift above). */ if (shift < 0) shift = 0; --- 3268,3274 ---- shift = INTVAL (XEXP (src, 1)); /* According to ANSI, negative shift is undefined. It is considered to be zero in this case (see function ! output_a_shift above). */ if (shift < 0) shift = 0; *************** h8300_adjust_insn_length (insn, length) *** 3228,3235 **** if (mode == QImode && shift <= 4) return -(20 - shift * 2); ! /* Similarly for HImode and SImode shifts by ! small constants on the H8/300H and H8/300S. */ if ((TARGET_H8300H || TARGET_H8300S) && (mode == HImode || mode == SImode) && shift <= 4) return -(20 - shift * 2); --- 3278,3285 ---- if (mode == QImode && shift <= 4) return -(20 - shift * 2); ! /* Similarly for HImode and SImode shifts by small constants on ! the H8/300H and H8/S. */ if ((TARGET_H8300H || TARGET_H8300S) && (mode == HImode || mode == SImode) && shift <= 4) return -(20 - shift * 2); *************** h8300_adjust_insn_length (insn, length) *** 3268,3274 **** /* Determine the faster direction. After this phase, amount will be at most a half of GET_MODE_BITSIZE (mode). */ ! if ((unsigned int) amount > GET_MODE_BITSIZE (mode) / 2) /* Flip the direction. */ amount = GET_MODE_BITSIZE (mode) - amount; --- 3318,3324 ---- /* Determine the faster direction. After this phase, amount will be at most a half of GET_MODE_BITSIZE (mode). */ ! if ((unsigned int) amount > GET_MODE_BITSIZE (mode) / 2U) /* Flip the direction. */ amount = GET_MODE_BITSIZE (mode) - amount; *************** h8300_adjust_insn_length (insn, length) *** 3298,3300 **** --- 3348,3361 ---- return 0; } + + #ifndef OBJECT_FORMAT_ELF + static void + h8300_asm_named_section (name, flags) + const char *name; + unsigned int flags ATTRIBUTE_UNUSED; + { + /* ??? Perhaps we should be using default_coff_asm_named_section. */ + fprintf (asm_out_file, "\t.section %s\n", name); + } + #endif /* ! OBJECT_FORMAT_ELF */ diff -Nrc3pad gcc-3.0.4/gcc/config/h8300/h8300.h gcc-3.1/gcc/config/h8300/h8300.h *** gcc-3.0.4/gcc/config/h8300/h8300.h Wed Aug 29 16:06:26 2001 --- gcc-3.1/gcc/config/h8300/h8300.h Tue Feb 19 07:36:55 2002 *************** *** 1,7 **** /* Definitions of target machine for GNU compiler. Hitachi H8/300 version generating coff Copyright (C) 1992, 1993, 1994, 1995, 1996, 1996, 1997, 1998, 1999, ! 2000, 2001 Free Software Foundation, Inc. Contributed by Steve Chamberlain (sac@cygnus.com), Jim Wilson (wilson@cygnus.com), and Doug Evans (dje@cygnus.com). --- 1,7 ---- /* Definitions of target machine for GNU compiler. Hitachi H8/300 version generating coff Copyright (C) 1992, 1993, 1994, 1995, 1996, 1996, 1997, 1998, 1999, ! 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Steve Chamberlain (sac@cygnus.com), Jim Wilson (wilson@cygnus.com), and Doug Evans (dje@cygnus.com). *************** extern const char * const *h8_reg_names; *** 50,61 **** %{!mh:%{!ms:-Acpu=h8300 -Amachine=h8300}} \ %{mh:-Acpu=h8300h -Amachine=h8300h} \ %{ms:-Acpu=h8300s -Amachine=h8300s} \ ! %{!mint32:-D__INT_MAX__=32767} %{mint32:-D__INT_MAX__=2147483647}" #define LINK_SPEC "%{mh:-m h8300h} %{ms:-m h8300s}" #define LIB_SPEC "%{mrelax:-relax} %{g:-lg} %{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}" /* Print subsidiary information on the compiler version in use. */ #define TARGET_VERSION fprintf (stderr, " (Hitachi H8/300)"); --- 50,70 ---- %{!mh:%{!ms:-Acpu=h8300 -Amachine=h8300}} \ %{mh:-Acpu=h8300h -Amachine=h8300h} \ %{ms:-Acpu=h8300s -Amachine=h8300s} \ ! %{!mint32:-D__INT_MAX__=32767} %{mint32:-D__INT_MAX__=2147483647} \ ! %(subtarget_cpp_spec)" ! ! #define SUBTARGET_CPP_SPEC "" #define LINK_SPEC "%{mh:-m h8300h} %{ms:-m h8300s}" #define LIB_SPEC "%{mrelax:-relax} %{g:-lg} %{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}" + #define EXTRA_SPECS \ + { "subtarget_cpp_spec", SUBTARGET_CPP_SPEC }, \ + SUBTARGET_EXTRA_SPECS + + #define SUBTARGET_EXTRA_SPECS + /* Print subsidiary information on the compiler version in use. */ #define TARGET_VERSION fprintf (stderr, " (Hitachi H8/300)"); *************** extern int target_flags; *** 112,118 **** {"int32", 8, N_("Make integers 32 bits wide")}, \ {"addresses", 64, NULL}, \ {"quickcall", 128, \ ! N_("Use registers for argument passing")}, \ {"no-quickcall", -128, \ N_("Do not use registers for argument passing")}, \ {"slowbyte", 256, \ --- 121,127 ---- {"int32", 8, N_("Make integers 32 bits wide")}, \ {"addresses", 64, NULL}, \ {"quickcall", 128, \ ! N_("Use registers for argument passing")}, \ {"no-quickcall", -128, \ N_("Do not use registers for argument passing")}, \ {"slowbyte", 256, \ *************** extern int target_flags; *** 172,178 **** /* Target machine storage layout */ /* Define to use software floating point emulator for REAL_ARITHMETIC and ! decimal <-> binary conversion. */ #define REAL_ARITHMETIC /* Define this if most significant bit is lowest numbered --- 181,187 ---- /* Target machine storage layout */ /* Define to use software floating point emulator for REAL_ARITHMETIC and ! decimal <-> binary conversion. */ #define REAL_ARITHMETIC /* Define this if most significant bit is lowest numbered *************** extern int target_flags; *** 208,222 **** See also the macro `Pmode' defined below. */ #define POINTER_SIZE (TARGET_H8300H || TARGET_H8300S ? 32 : 16) ! #define SHORT_TYPE_SIZE 16 ! #define INT_TYPE_SIZE (TARGET_INT32 ? 32 : 16) ! #define LONG_TYPE_SIZE 32 #define LONG_LONG_TYPE_SIZE 32 ! #define FLOAT_TYPE_SIZE 32 ! #define DOUBLE_TYPE_SIZE 32 ! #define LONG_DOUBLE_TYPE_SIZE DOUBLE_TYPE_SIZE ! #define MAX_FIXED_MODE_SIZE 32 /* Allocation boundary (in *bits*) for storing arguments in argument list. */ #define PARM_BOUNDARY (TARGET_H8300H || TARGET_H8300S ? 32 : 16) --- 217,231 ---- See also the macro `Pmode' defined below. */ #define POINTER_SIZE (TARGET_H8300H || TARGET_H8300S ? 32 : 16) ! #define SHORT_TYPE_SIZE 16 ! #define INT_TYPE_SIZE (TARGET_INT32 ? 32 : 16) ! #define LONG_TYPE_SIZE 32 #define LONG_LONG_TYPE_SIZE 32 ! #define FLOAT_TYPE_SIZE 32 ! #define DOUBLE_TYPE_SIZE 32 ! #define LONG_DOUBLE_TYPE_SIZE DOUBLE_TYPE_SIZE ! #define MAX_FIXED_MODE_SIZE 32 /* Allocation boundary (in *bits*) for storing arguments in argument list. */ #define PARM_BOUNDARY (TARGET_H8300H || TARGET_H8300S ? 32 : 16) *************** extern int target_flags; *** 234,240 **** #define PCC_BITFIELD_TYPE_MATTERS 0 /* No data type wants to be aligned rounder than this. ! 32 bit values are aligned as such on the 300h for speed. */ #define BIGGEST_ALIGNMENT \ (((TARGET_H8300H || TARGET_H8300S) && ! TARGET_ALIGN_300) ? 32 : 16) --- 243,249 ---- #define PCC_BITFIELD_TYPE_MATTERS 0 /* No data type wants to be aligned rounder than this. ! 32 bit values are aligned as such on the H8/300H and H8/S for speed. */ #define BIGGEST_ALIGNMENT \ (((TARGET_H8300H || TARGET_H8300S) && ! TARGET_ALIGN_300) ? 32 : 16) *************** extern int target_flags; *** 261,273 **** eliminated during reloading in favor of either the stack or frame pointer. */ ! #define FIRST_PSEUDO_REGISTER 10 /* 1 for registers that have pervasive standard uses and are not available for the register allocator. */ #define FIXED_REGISTERS \ ! { 0, 0, 0, 0, 0, 0, 0, 1, 0, 1} /* 1 for registers not available across function calls. These must include the FIXED_REGISTERS and also any --- 270,282 ---- eliminated during reloading in favor of either the stack or frame pointer. */ ! #define FIRST_PSEUDO_REGISTER 11 /* 1 for registers that have pervasive standard uses and are not available for the register allocator. */ #define FIXED_REGISTERS \ ! { 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1} /* 1 for registers not available across function calls. These must include the FIXED_REGISTERS and also any *************** extern int target_flags; *** 280,294 **** H8 destroys r0,r1,r2,r3. */ #define CALL_USED_REGISTERS \ ! { 1, 1, 1, 1, 0, 0, 0, 1, 1, 1 } #define REG_ALLOC_ORDER \ ! { 2, 3, 0, 1, 4, 5, 6, 8, 7, 9} ! #define CONDITIONAL_REGISTER_USAGE \ ! { \ ! if (!TARGET_MAC) \ ! fixed_regs[8] = call_used_regs[8] = 1; \ } /* Return number of consecutive hard regs needed starting at reg REGNO --- 289,303 ---- H8 destroys r0,r1,r2,r3. */ #define CALL_USED_REGISTERS \ ! { 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1 } #define REG_ALLOC_ORDER \ ! { 2, 3, 0, 1, 4, 5, 6, 8, 7, 9, 10} ! #define CONDITIONAL_REGISTER_USAGE \ ! { \ ! if (!TARGET_MAC) \ ! fixed_regs[MAC_REG] = call_used_regs[MAC_REG] = 1; \ } /* Return number of consecutive hard regs needed starting at reg REGNO *************** extern int target_flags; *** 310,330 **** or HI. H8/300H: Anything goes. */ ! #define HARD_REGNO_MODE_OK(REGNO, MODE) \ ! (TARGET_H8300 ? (((REGNO)&1)==0) || (MODE==HImode) || (MODE==QImode) \ ! : REGNO == 8 ? MODE == SImode : 1) /* Value is 1 if it is a good idea to tie two pseudo registers when one has mode MODE1 and one has mode MODE2. If HARD_REGNO_MODE_OK could produce different values for MODE1 and MODE2, for any hard reg, then this must be 0 for correct output. */ ! #define MODES_TIEABLE_P(MODE1, MODE2) \ ! ((MODE1) == (MODE2) \ ! || ((MODE1) == HImode && (MODE2) == QImode) \ ! || ((MODE1) == QImode && (MODE2) == HImode) \ ! || ((TARGET_H8300H || TARGET_H8300S) \ ! && (((MODE1) == SImode && (MODE2) == HImode) \ ! || ((MODE1) == HImode && (MODE2) == SImode)))) /* Specify the registers used for certain standard purposes. The values of these macros are register numbers. */ --- 319,339 ---- or HI. H8/300H: Anything goes. */ ! #define HARD_REGNO_MODE_OK(REGNO, MODE) \ ! (TARGET_H8300 \ ! ? ((((REGNO) & 1) == 0) || ((MODE) == HImode) || ((MODE) == QImode)) \ ! : (REGNO) == MAC_REG ? (MODE) == SImode : 1) /* Value is 1 if it is a good idea to tie two pseudo registers when one has mode MODE1 and one has mode MODE2. If HARD_REGNO_MODE_OK could produce different values for MODE1 and MODE2, for any hard reg, then this must be 0 for correct output. */ ! #define MODES_TIEABLE_P(MODE1, MODE2) \ ! ((MODE1) == (MODE2) \ ! || (((MODE1) == QImode || (MODE1) == HImode \ ! || ((TARGET_H8300H || TARGET_H8300S) && (MODE1) == SImode)) \ ! && ((MODE2) == QImode || (MODE2) == HImode \ ! || ((TARGET_H8300H || TARGET_H8300S) && (MODE2) == SImode)))) /* Specify the registers used for certain standard purposes. The values of these macros are register numbers. */ *************** extern int target_flags; *** 334,343 **** /*#define PC_REGNUM 15*/ /* Register to use for pushing function arguments. */ ! #define STACK_POINTER_REGNUM 7 /* Base register for access to local variables of the function. */ ! #define FRAME_POINTER_REGNUM 6 /* Value should be nonzero if functions must have frame pointers. Zero means the frame pointer need not be set up (and parms --- 343,352 ---- /*#define PC_REGNUM 15*/ /* Register to use for pushing function arguments. */ ! #define STACK_POINTER_REGNUM SP_REG /* Base register for access to local variables of the function. */ ! #define FRAME_POINTER_REGNUM FP_REG /* Value should be nonzero if functions must have frame pointers. Zero means the frame pointer need not be set up (and parms *************** extern int target_flags; *** 346,355 **** #define FRAME_POINTER_REQUIRED 0 /* Base register for access to arguments of the function. */ ! #define ARG_POINTER_REGNUM 9 /* Register in which static-chain is passed to a function. */ ! #define STATIC_CHAIN_REGNUM 3 /* Define the classes of registers for register constraints in the machine description. Also define ranges of constants. --- 355,374 ---- #define FRAME_POINTER_REQUIRED 0 /* Base register for access to arguments of the function. */ ! #define ARG_POINTER_REGNUM AP_REG /* Register in which static-chain is passed to a function. */ ! #define STATIC_CHAIN_REGNUM SC_REG ! ! /* Fake register that holds the address on the stack of the ! current function's return address. */ ! #define RETURN_ADDRESS_POINTER_REGNUM RAP_REG ! ! /* A C expression whose value is RTL representing the value of the return ! address for the frame COUNT steps up from the current frame. ! FRAMEADDR is already the frame pointer of the COUNT frame, assuming ! a stack layout with the frame pointer as the first saved register. */ ! #define RETURN_ADDR_RTX(COUNT, FRAME) h8300_return_addr_rtx ((COUNT), (FRAME)) /* Define the classes of registers for register constraints in the machine description. Also define ranges of constants. *************** enum reg_class { *** 377,383 **** #define N_REG_CLASSES (int) LIM_REG_CLASSES ! /* Give names of register classes as strings for dump file. */ #define REG_CLASS_NAMES \ { "NO_REGS", "GENERAL_REGS", "MAC_REGS", "ALL_REGS", "LIM_REGS" } --- 396,402 ---- #define N_REG_CLASSES (int) LIM_REG_CLASSES ! /* Give names of register classes as strings for dump file. */ #define REG_CLASS_NAMES \ { "NO_REGS", "GENERAL_REGS", "MAC_REGS", "ALL_REGS", "LIM_REGS" } *************** enum reg_class { *** 386,396 **** This is an initializer for a vector of HARD_REG_SET of length N_REG_CLASSES. */ ! #define REG_CLASS_CONTENTS \ { {0}, /* No regs */ \ ! {0x2ff}, /* GENERAL_REGS */ \ ! {0x100}, /* MAC_REGS */ \ ! {0x3ff}, /* ALL_REGS */ \ } /* The same information, inverted: --- 405,415 ---- This is an initializer for a vector of HARD_REG_SET of length N_REG_CLASSES. */ ! #define REG_CLASS_CONTENTS \ { {0}, /* No regs */ \ ! {0x6ff}, /* GENERAL_REGS */ \ ! {0x100}, /* MAC_REGS */ \ ! {0x7ff}, /* ALL_REGS */ \ } /* The same information, inverted: *************** enum reg_class { *** 398,404 **** reg number REGNO. This could be a conditional expression or could index an array. */ ! #define REGNO_REG_CLASS(REGNO) (REGNO != 8 ? GENERAL_REGS : MAC_REGS) /* The class value for index registers, and the one for base regs. */ --- 417,423 ---- reg number REGNO. This could be a conditional expression or could index an array. */ ! #define REGNO_REG_CLASS(REGNO) (REGNO != MAC_REG ? GENERAL_REGS : MAC_REGS) /* The class value for index registers, and the one for base regs. */ *************** enum reg_class { *** 457,463 **** In general this is just CLASS; but on some machines in some cases it is preferable to use a more restrictive class. */ ! #define PREFERRED_RELOAD_CLASS(X,CLASS) (CLASS) /* Return the maximum number of consecutive registers needed to represent mode MODE in a register of class CLASS. */ --- 476,482 ---- In general this is just CLASS; but on some machines in some cases it is preferable to use a more restrictive class. */ ! #define PREFERRED_RELOAD_CLASS(X, CLASS) (CLASS) /* Return the maximum number of consecutive registers needed to represent mode MODE in a register of class CLASS. */ *************** enum reg_class { *** 467,473 **** #define CLASS_MAX_NREGS(CLASS, MODE) \ ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD) ! /* Any SI register to register move may need to be reloaded, so define REGISTER_MOVE_COST to be > 2 so that reload never shortcuts. */ --- 486,492 ---- #define CLASS_MAX_NREGS(CLASS, MODE) \ ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD) ! /* Any SI register-to-register move may need to be reloaded, so define REGISTER_MOVE_COST to be > 2 so that reload never shortcuts. */ *************** enum reg_class { *** 495,509 **** #define STARTING_FRAME_OFFSET 0 - /* We do not know if the caller has a frame pointer, so we cannot go - beyond level 0. */ - - #define RETURN_ADDR_RTX(COUNT, FRAME) \ - ((COUNT) == 0 \ - ? gen_rtx_MEM (Pmode, \ - plus_constant (arg_pointer_rtx, -GET_MODE_SIZE (Pmode))) \ - : 0) - /* If we generate an insn to push BYTES bytes, this says how many the stack pointer really advances by. --- 514,519 ---- *************** enum reg_class { *** 532,538 **** On the H8 the return does not pop anything. */ ! #define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) 0 /* Definitions for register eliminations. --- 542,548 ---- On the H8 the return does not pop anything. */ ! #define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, SIZE) 0 /* Definitions for register eliminations. *************** enum reg_class { *** 544,566 **** We have two registers that can be eliminated on the h8300. First, the frame pointer register can often be eliminated in favor of the stack pointer register. Secondly, the argument pointer register can always be ! eliminated; it is replaced with either the stack or frame pointer. */ ! #define ELIMINABLE_REGS \ ! {{ ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \ ! { ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \ { FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}} /* Given FROM and TO register numbers, say whether this elimination is allowed. Frame pointer elimination is automatically handled. For the h8300, if frame pointer elimination is being done, we would like to ! convert ap into sp, not fp. All other eliminations are valid. */ #define CAN_ELIMINATE(FROM, TO) \ ! ((FROM) == ARG_POINTER_REGNUM && (TO) == STACK_POINTER_REGNUM \ ? ! frame_pointer_needed \ : 1) --- 554,579 ---- We have two registers that can be eliminated on the h8300. First, the frame pointer register can often be eliminated in favor of the stack pointer register. Secondly, the argument pointer register can always be ! eliminated; it is replaced with either the stack or frame pointer. */ ! #define ELIMINABLE_REGS \ ! {{ ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \ ! { ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \ ! { RETURN_ADDRESS_POINTER_REGNUM, STACK_POINTER_REGNUM},\ ! { RETURN_ADDRESS_POINTER_REGNUM, FRAME_POINTER_REGNUM},\ { FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}} /* Given FROM and TO register numbers, say whether this elimination is allowed. Frame pointer elimination is automatically handled. For the h8300, if frame pointer elimination is being done, we would like to ! convert ap and rp into sp, not fp. All other eliminations are valid. */ #define CAN_ELIMINATE(FROM, TO) \ ! ((((FROM) == ARG_POINTER_REGNUM || (FROM) == RETURN_ADDRESS_POINTER_REGNUM) \ ! && (TO) == STACK_POINTER_REGNUM) \ ? ! frame_pointer_needed \ : 1) *************** enum reg_class { *** 614,620 **** /* When defined, the compiler allows registers explicitly used in the rtl to be used as spill registers but prevents the compiler from ! extending the lifetime of these registers. */ #define SMALL_REGISTER_CLASSES 1 --- 627,633 ---- /* When defined, the compiler allows registers explicitly used in the rtl to be used as spill registers but prevents the compiler from ! extending the lifetime of these registers. */ #define SMALL_REGISTER_CLASSES 1 *************** struct cum_arg *** 641,647 **** On the H8/300, the offset starts at 0. */ ! #define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT) \ ((CUM).nbytes = 0, (CUM).libcall = LIBNAME) /* Update the data in CUM to advance over an argument --- 654,660 ---- On the H8/300, the offset starts at 0. */ ! #define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT) \ ((CUM).nbytes = 0, (CUM).libcall = LIBNAME) /* Update the data in CUM to advance over an argument *************** struct cum_arg *** 673,683 **** #define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \ function_arg (&CUM, MODE, TYPE, NAMED) - /* Generate assembly output for the start of a function. */ - - #define FUNCTION_PROLOGUE(FILE, SIZE) \ - function_prologue (FILE, SIZE) - /* Output assembler code to FILE to increment profiler label # LABELNO for profiling a function entry. */ --- 686,691 ---- *************** struct cum_arg *** 719,732 **** #define EXIT_IGNORE_STACK 0 - /* This macro generates the assembly code for function exit, - on machines that need it. If FUNCTION_EPILOGUE is not defined - then individual return instructions are generated for each - return statement. Args are same as for FUNCTION_PROLOGUE. */ - - #define FUNCTION_EPILOGUE(FILE, SIZE) \ - function_epilogue (FILE, SIZE) - /* Output assembler code for a block containing the constant parts of a trampoline, leaving space for the variable parts. --- 727,732 ---- *************** struct cum_arg *** 743,761 **** ^^^^^^ function */ ! #define TRAMPOLINE_TEMPLATE(FILE) \ ! do { \ ! if (TARGET_H8300) \ ! { \ ! fprintf (FILE, "\tmov.w #0x1234,r3\n"); \ ! fprintf (FILE, "\tjmp @0x1234\n"); \ ! } \ ! else \ ! { \ ! fprintf (FILE, "\tmov.l #0x12345678,er3\n"); \ ! fprintf (FILE, "\tjmp @0x123456\n"); \ ! } \ ! } while (0) /* Length in units of the trampoline for entering a nested function. */ --- 743,763 ---- ^^^^^^ function */ ! #define TRAMPOLINE_TEMPLATE(FILE) \ ! do \ ! { \ ! if (TARGET_H8300) \ ! { \ ! fprintf (FILE, "\tmov.w #0x1234,r3\n"); \ ! fprintf (FILE, "\tjmp @0x1234\n"); \ ! } \ ! else \ ! { \ ! fprintf (FILE, "\tmov.l #0x12345678,er3\n"); \ ! fprintf (FILE, "\tjmp @0x123456\n"); \ ! } \ ! } \ ! while (0) /* Length in units of the trampoline for entering a nested function. */ *************** struct cum_arg *** 765,787 **** FNADDR is an RTX for the address of the function's pure code. CXT is an RTX for the static chain value for the function. */ ! #define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \ ! { \ ! enum machine_mode mode = TARGET_H8300H || TARGET_H8300S? SImode : HImode; \ ! emit_move_insn (gen_rtx_MEM (mode, plus_constant ((TRAMP), 2)), CXT); \ ! emit_move_insn (gen_rtx_MEM (mode, plus_constant ((TRAMP), 6)), FNADDR); \ ! if (TARGET_H8300H || TARGET_H8300S) \ ! emit_move_insn (gen_rtx_MEM (QImode, plus_constant ((TRAMP), 6)), \ ! GEN_INT (0x5A)); \ } /* Addressing modes, and classification of registers for them. */ #define HAVE_POST_INCREMENT 1 - /*#define HAVE_POST_DECREMENT 0 */ - #define HAVE_PRE_DECREMENT 1 - /*#define HAVE_PRE_INCREMENT 0 */ /* Macros to check register numbers against specific register classes. */ --- 767,785 ---- FNADDR is an RTX for the address of the function's pure code. CXT is an RTX for the static chain value for the function. */ ! #define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \ ! { \ ! emit_move_insn (gen_rtx_MEM (Pmode, plus_constant ((TRAMP), 2)), CXT); \ ! emit_move_insn (gen_rtx_MEM (Pmode, plus_constant ((TRAMP), 6)), FNADDR); \ ! if (TARGET_H8300H || TARGET_H8300S) \ ! emit_move_insn (gen_rtx_MEM (QImode, plus_constant ((TRAMP), 6)), \ ! GEN_INT (0x5A)); \ } /* Addressing modes, and classification of registers for them. */ #define HAVE_POST_INCREMENT 1 #define HAVE_PRE_DECREMENT 1 /* Macros to check register numbers against specific register classes. */ *************** struct cum_arg *** 906,914 **** || (GET_CODE (X) == SUBREG && REG_P (SUBREG_REG (X)) \ && REG_OK_FOR_BASE_P (SUBREG_REG (X)))) ! #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \ if (RTX_OK_FOR_BASE_P (X)) goto ADDR; \ ! if (CONSTANT_ADDRESS_P (X)) goto ADDR; \ if (GET_CODE (X) == PLUS \ && CONSTANT_ADDRESS_P (XEXP (X, 1)) \ && RTX_OK_FOR_BASE_P (XEXP (X, 0))) goto ADDR; --- 904,912 ---- || (GET_CODE (X) == SUBREG && REG_P (SUBREG_REG (X)) \ && REG_OK_FOR_BASE_P (SUBREG_REG (X)))) ! #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \ if (RTX_OK_FOR_BASE_P (X)) goto ADDR; \ ! if (CONSTANT_ADDRESS_P (X)) goto ADDR; \ if (GET_CODE (X) == PLUS \ && CONSTANT_ADDRESS_P (XEXP (X, 1)) \ && RTX_OK_FOR_BASE_P (XEXP (X, 0))) goto ADDR; *************** struct cum_arg *** 928,934 **** For the H8/300, don't do anything. */ ! #define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN) {} /* Go to LABEL if ADDR (a legitimate address expression) has an effect that depends on the machine mode it is used for. --- 926,932 ---- For the H8/300, don't do anything. */ ! #define LEGITIMIZE_ADDRESS(X, OLDX, MODE, WIN) {} /* Go to LABEL if ADDR (a legitimate address expression) has an effect that depends on the machine mode it is used for. *************** struct cum_arg *** 936,942 **** On the H8/300, the predecrement and postincrement address depend thus (the amount of decrement or increment being the length of the operand). */ ! #define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL) \ if (GET_CODE (ADDR) == POST_INC || GET_CODE (ADDR) == PRE_DEC) goto LABEL; /* Specify the machine mode that this machine uses --- 934,940 ---- On the H8/300, the predecrement and postincrement address depend thus (the amount of decrement or increment being the length of the operand). */ ! #define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL) \ if (GET_CODE (ADDR) == POST_INC || GET_CODE (ADDR) == PRE_DEC) goto LABEL; /* Specify the machine mode that this machine uses *************** struct cum_arg *** 946,960 **** /* Define as C expression which evaluates to nonzero if the tablejump instruction expects the table to contain offsets from the address of the table. ! Do not define this if the table should contain absolute addresses. */ /*#define CASE_VECTOR_PC_RELATIVE 1 */ - /* Specify the tree operation to be used to convert reals to integers. */ - #define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR - - /* This is the kind of divide that is easiest to do in the general case. */ - #define EASY_DIV_EXPR TRUNC_DIV_EXPR - /* Define this as 1 if `char' should by default be signed; else as 0. On the H8/300, sign extension is expensive, so we'll say that chars --- 944,952 ---- /* Define as C expression which evaluates to nonzero if the tablejump instruction expects the table to contain offsets from the address of the table. ! Do not define this if the table should contain absolute addresses. */ /*#define CASE_VECTOR_PC_RELATIVE 1 */ /* Define this as 1 if `char' should by default be signed; else as 0. On the H8/300, sign extension is expensive, so we'll say that chars *************** struct cum_arg *** 970,978 **** #define MOVE_MAX (TARGET_H8300H || TARGET_H8300S ? 4 : 2) #define MAX_MOVE_MAX 4 - /* Define this if zero-extension is slow (more than one real instruction). */ - /* #define SLOW_ZERO_EXTEND */ - /* Nonzero if access to memory by bytes is slow and undesirable. */ #define SLOW_BYTE_ACCESS TARGET_SLOWBYTE --- 962,967 ---- *************** struct cum_arg *** 1007,1018 **** so give the MEM rtx a byte's mode. */ #define FUNCTION_MODE QImode - /* A C expression whose value is nonzero if IDENTIFIER with arguments ARGS - is a valid machine specific attribute for DECL. - The attributes in ATTRIBUTES have previously been assigned to DECL. */ - #define VALID_MACHINE_DECL_ATTRIBUTE(DECL, ATTRIBUTES, IDENTIFIER, ARGS) \ - h8300_valid_machine_decl_attribute (DECL, ATTRIBUTES, IDENTIFIER, ARGS) - #define ADJUST_INSN_LENGTH(INSN, LENGTH) \ LENGTH += h8300_adjust_insn_length (INSN, LENGTH); --- 996,1001 ---- *************** h8300_valid_machine_decl_attribute (DECL *** 1021,1028 **** of a switch statement. If the code is computed here, return it with a return statement. Otherwise, break from the switch. */ ! #define DEFAULT_RTX_COSTS(RTX,CODE,OUTER_CODE) \ ! return (const_costs (RTX, CODE)); #define BRANCH_COST 0 --- 1004,1011 ---- of a switch statement. If the code is computed here, return it with a return statement. Otherwise, break from the switch. */ ! #define DEFAULT_RTX_COSTS(RTX, CODE, OUTER_CODE) \ ! return (const_costs (RTX, CODE, OUTER_CODE)); #define BRANCH_COST 0 *************** h8300_valid_machine_decl_attribute (DECL *** 1033,1039 **** switch on CODE. */ /* ??? Shifts need to have a *much* higher cost than this. */ ! #define RTX_COSTS(RTX,CODE,OUTER_CODE) \ case MOD: \ case DIV: \ return 60; \ --- 1016,1022 ---- switch on CODE. */ /* ??? Shifts need to have a *much* higher cost than this. */ ! #define RTX_COSTS(RTX, CODE, OUTER_CODE) \ case MOD: \ case DIV: \ return 60; \ *************** h8300_valid_machine_decl_attribute (DECL *** 1057,1067 **** after execution of an instruction whose pattern is EXP. Do not alter them if the instruction would not alter the cc's. */ ! #define NOTICE_UPDATE_CC(EXP, INSN) notice_update_cc(EXP, INSN) /* The add insns don't set overflow in a usable way. */ #define CC_OVERFLOW_UNUSABLE 01000 ! /* The mov,and,or,xor insns don't set carry. That's ok though as the Z bit is all we need when doing unsigned comparisons on the result of these insns (since they're always with 0). However, conditions.h has CC_NO_OVERFLOW defined for this purpose. Rename it to something more --- 1040,1050 ---- after execution of an instruction whose pattern is EXP. Do not alter them if the instruction would not alter the cc's. */ ! #define NOTICE_UPDATE_CC(EXP, INSN) notice_update_cc (EXP, INSN) /* The add insns don't set overflow in a usable way. */ #define CC_OVERFLOW_UNUSABLE 01000 ! /* The mov,and,or,xor insns don't set carry. That's OK though as the Z bit is all we need when doing unsigned comparisons on the result of these insns (since they're always with 0). However, conditions.h has CC_NO_OVERFLOW defined for this purpose. Rename it to something more *************** h8300_valid_machine_decl_attribute (DECL *** 1072,1080 **** /* Output at beginning/end of assembler file. */ ! #define ASM_FILE_START(FILE) asm_file_start(FILE) ! #define ASM_FILE_END(FILE) asm_file_end(FILE) /* Output to assembler file text saying following lines may contain character constants, extra white space, comments, etc. */ --- 1055,1063 ---- /* Output at beginning/end of assembler file. */ ! #define ASM_FILE_START(FILE) asm_file_start (FILE) ! #define ASM_FILE_END(FILE) asm_file_end (FILE) /* Output to assembler file text saying following lines may contain character constants, extra white space, comments, etc. */ *************** h8300_valid_machine_decl_attribute (DECL *** 1105,1138 **** #define DATA_SECTION_ASM_OP "\t.section .data" #define BSS_SECTION_ASM_OP "\t.section .bss" #define INIT_SECTION_ASM_OP "\t.section .init" - #define CTORS_SECTION_ASM_OP "\t.section .ctors" - #define DTORS_SECTION_ASM_OP "\t.section .dtors" #define READONLY_DATA_SECTION_ASM_OP "\t.section .rodata" ! #define EXTRA_SECTIONS in_ctors, in_dtors, in_readonly_data #define EXTRA_SECTION_FUNCTIONS \ ! \ ! void \ ! ctors_section () \ ! { \ ! if (in_section != in_ctors) \ ! { \ ! fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP); \ ! in_section = in_ctors; \ ! } \ ! } \ ! \ ! void \ ! dtors_section () \ ! { \ ! if (in_section != in_dtors) \ ! { \ ! fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP); \ ! in_section = in_dtors; \ ! } \ ! } \ ! \ void \ readonly_data () \ { \ --- 1088,1099 ---- #define DATA_SECTION_ASM_OP "\t.section .data" #define BSS_SECTION_ASM_OP "\t.section .bss" #define INIT_SECTION_ASM_OP "\t.section .init" #define READONLY_DATA_SECTION_ASM_OP "\t.section .rodata" ! #define EXTRA_SECTIONS in_readonly_data #define EXTRA_SECTION_FUNCTIONS \ ! extern void readonly_data PARAMS ((void)); \ void \ readonly_data () \ { \ *************** readonly_data () \ *** 1143,1164 **** } \ } - #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ - do \ - { \ - ctors_section (); \ - fprintf (FILE, "%s_%s\n", ASM_WORD_OP, NAME); \ - } \ - while (0) - - #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \ - do \ - { \ - dtors_section (); \ - fprintf (FILE, "%s_%s\n", ASM_WORD_OP, NAME); \ - } \ - while (0) - #undef DO_GLOBAL_CTORS_BODY #define DO_GLOBAL_CTORS_BODY \ { \ --- 1104,1109 ---- *************** readonly_data () \ *** 1173,1179 **** } #undef DO_GLOBAL_DTORS_BODY ! #define DO_GLOBAL_DTORS_BODY \ { \ typedef (*pfunc)(); \ extern pfunc __dtors[]; \ --- 1118,1124 ---- } #undef DO_GLOBAL_DTORS_BODY ! #define DO_GLOBAL_DTORS_BODY \ { \ typedef (*pfunc)(); \ extern pfunc __dtors[]; \ *************** readonly_data () \ *** 1190,1211 **** /* If we are referencing a function that is supposed to be called through the function vector, the SYMBOL_REF_FLAG in the rtl so the call patterns can generate the correct code. */ ! #define ENCODE_SECTION_INFO(DECL) \ ! if (TREE_CODE (DECL) == FUNCTION_DECL \ ! && h8300_funcvec_function_p (DECL)) \ ! SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0)) = 1; \ ! else if ((TREE_STATIC (DECL) || DECL_EXTERNAL (DECL)) \ ! && TREE_CODE (DECL) == VAR_DECL \ ! && h8300_eightbit_data_p (DECL)) \ ! SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0)) = 1; \ ! else if ((TREE_STATIC (DECL) || DECL_EXTERNAL (DECL)) \ ! && TREE_CODE (DECL) == VAR_DECL \ ! && h8300_tiny_data_p (DECL)) \ h8300_encode_label (DECL); /* 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] == '@' \ || (SYMBOL_NAME)[0] == '&'); --- 1135,1156 ---- /* If we are referencing a function that is supposed to be called through the function vector, the SYMBOL_REF_FLAG in the rtl so the call patterns can generate the correct code. */ ! #define ENCODE_SECTION_INFO(DECL) \ ! if (TREE_CODE (DECL) == FUNCTION_DECL \ ! && h8300_funcvec_function_p (DECL)) \ ! SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0)) = 1; \ ! else if (TREE_CODE (DECL) == VAR_DECL \ ! && (TREE_STATIC (DECL) || DECL_EXTERNAL (DECL)) \ ! && h8300_eightbit_data_p (DECL)) \ ! SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0)) = 1; \ ! else if (TREE_CODE (DECL) == VAR_DECL \ ! && (TREE_STATIC (DECL) || DECL_EXTERNAL (DECL)) \ ! && h8300_tiny_data_p (DECL)) \ h8300_encode_label (DECL); /* 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] == '@' \ || (SYMBOL_NAME)[0] == '&'); *************** readonly_data () \ *** 1214,1230 **** This sequence is indexed by compiler's hard-register-number (see above). */ #define REGISTER_NAMES \ ! { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "sp", "mac", "ap" } #define ADDITIONAL_REGISTER_NAMES \ { {"er0", 0}, {"er1", 1}, {"er2", 2}, {"er3", 3}, {"er4", 4}, \ {"er5", 5}, {"er6", 6}, {"er7", 7}, {"r7", 7} } - /* How to renumber registers for dbx and gdb. - H8/300 needs no change in the numeration. */ - - #define DBX_REGISTER_NUMBER(REGNO) (REGNO) - #define SDB_DEBUGGING_INFO #define SDB_DELIM "\n" --- 1159,1170 ---- This sequence is indexed by compiler's hard-register-number (see above). */ #define REGISTER_NAMES \ ! { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "sp", "mac", "ap", "rap" } #define ADDITIONAL_REGISTER_NAMES \ { {"er0", 0}, {"er1", 1}, {"er2", 2}, {"er3", 3}, {"er4", 4}, \ {"er5", 5}, {"er6", 6}, {"er7", 7}, {"r7", 7} } #define SDB_DEBUGGING_INFO #define SDB_DELIM "\n" *************** readonly_data () \ *** 1242,1254 **** fprintf (FILE, \ "\t.text\n.stabs \"\",%d,0,0,.Letext\n.Letext:\n", N_SO) ! /* A C statement to output something to the assembler file to switch to section ! NAME for object DECL which is either a FUNCTION_DECL, a VAR_DECL or ! NULL_TREE. Some target formats do not support arbitrary sections. Do not ! define this macro in such cases. */ ! ! #define ASM_OUTPUT_SECTION_NAME(FILE, DECL, NAME, RELOC) \ ! fprintf (FILE, "\t.section %s\n", NAME) /* This is how to output the definition of a user-level label named NAME, such as the label on a static function or variable NAME. */ --- 1182,1189 ---- fprintf (FILE, \ "\t.text\n.stabs \"\",%d,0,0,.Letext\n.Letext:\n", N_SO) ! /* Switch into a generic section. */ ! #define TARGET_ASM_NAMED_SECTION h8300_asm_named_section /* This is how to output the definition of a user-level label named NAME, such as the label on a static function or variable NAME. */ *************** readonly_data () \ *** 1261,1267 **** } \ 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) --- 1196,1202 ---- } \ 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) *************** readonly_data () \ *** 1279,1287 **** while (0) #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ ! ASM_OUTPUT_LABEL(FILE, NAME) ! /* The prefix to add to user-visible assembler symbols. */ #define USER_LABEL_PREFIX "_" --- 1214,1222 ---- while (0) #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ ! ASM_OUTPUT_LABEL (FILE, NAME) ! /* The prefix to add to user-visible assembler symbols. */ #define USER_LABEL_PREFIX "_" *************** readonly_data () \ *** 1302,1350 **** #define ASM_GENERATE_INTERNAL_LABEL(LABEL, PREFIX, NUM) \ sprintf (LABEL, "*.%s%d", PREFIX, NUM) - /* This is how to output an assembler line defining a `double' constant. - It is .dfloat or .gfloat, depending. */ - - #define ASM_OUTPUT_DOUBLE(FILE, VALUE) \ - do \ - { \ - char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \ - fprintf (FILE, "\t.double %s\n", dstr); \ - } while (0) - - /* This is how to output an assembler line defining a `float' constant. */ - #define ASM_OUTPUT_FLOAT(FILE, VALUE) \ - do \ - { \ - char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \ - fprintf (FILE, "\t.float %s\n", dstr); \ - } while (0) - - /* This is how to output an assembler line defining an `int' constant. */ - - #define ASM_OUTPUT_INT(FILE, VALUE) \ - ( fprintf (FILE, "\t.long "), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "\n")) - - /* Likewise for `char' and `short' constants. */ - - #define ASM_OUTPUT_SHORT(FILE, VALUE) \ - ( fprintf (FILE, "\t.word "), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "\n")) - - #define ASM_OUTPUT_CHAR(FILE, VALUE) \ - ( fprintf (FILE, "\t.byte "), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "\n")) - - /* This is how to output an assembler line for a numeric constant byte. */ - #define ASM_OUTPUT_BYTE(FILE, VALUE) \ - fprintf (FILE, "\t.byte 0x%x\n", (VALUE)) - /* This is how to output an insn to push a register on the stack. It need not be very fast code. */ --- 1237,1242 ---- *************** readonly_data () \ *** 1354,1360 **** /* This is how to output an insn to pop a register from the stack. It need not be very fast code. */ ! #define ASM_OUTPUT_REG_POP(FILE,REGNO) \ fprintf (FILE, "\t%s\t%s\n", h8_pop_op, h8_reg_names[REGNO]) /* This is how to output an element of a case-vector that is absolute. */ --- 1246,1252 ---- /* This is how to output an insn to pop a register from the stack. It need not be very fast code. */ ! #define ASM_OUTPUT_REG_POP(FILE, REGNO) \ fprintf (FILE, "\t%s\t%s\n", h8_pop_op, h8_reg_names[REGNO]) /* This is how to output an element of a case-vector that is absolute. */ *************** readonly_data () \ *** 1371,1377 **** that says to advance the location counter to a multiple of 2**LOG bytes. */ ! #define ASM_OUTPUT_ALIGN(FILE,LOG) \ if ((LOG) != 0) \ fprintf (FILE, "\t.align %d\n", (LOG)) --- 1263,1269 ---- that says to advance the location counter to a multiple of 2**LOG bytes. */ ! #define ASM_OUTPUT_ALIGN(FILE, LOG) \ if ((LOG) != 0) \ fprintf (FILE, "\t.align %d\n", (LOG)) *************** readonly_data () \ *** 1402,1408 **** /* This says how to output an assembler line to define a local common symbol. */ ! #define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE,ROUNDED) \ ( fputs ("\t.lcomm ", (FILE)), \ assemble_name ((FILE), (NAME)), \ fprintf ((FILE), ",%d\n", (SIZE))) --- 1294,1300 ---- /* This says how to output an assembler line to define a local common symbol. */ ! #define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED) \ ( fputs ("\t.lcomm ", (FILE)), \ assemble_name ((FILE), (NAME)), \ fprintf ((FILE), ",%d\n", (SIZE))) *************** readonly_data () \ *** 1415,1442 **** ( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 10), \ sprintf ((OUTPUT), "%s___%d", (NAME), (LABELNO))) - /* Define the parentheses used to group arithmetic operations - in assembler code. */ - - #define ASM_OPEN_PAREN "(" - #define ASM_CLOSE_PAREN ")" - - /* Define results of standard character escape sequences. */ - #define TARGET_BELL 007 - #define TARGET_BS 010 - #define TARGET_TAB 011 - #define TARGET_NEWLINE 012 - #define TARGET_VT 013 - #define TARGET_FF 014 - #define TARGET_CR 015 - /* Print an instruction operand X on file FILE. Look in h8300.c for details. */ #define PRINT_OPERAND_PUNCT_VALID_P(CODE) \ ((CODE) == '#') ! #define PRINT_OPERAND(FILE, X, CODE) print_operand(FILE,X,CODE) /* Print a memory operand whose address is X, on file FILE. This uses a function in h8300.c. */ --- 1307,1319 ---- ( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 10), \ sprintf ((OUTPUT), "%s___%d", (NAME), (LABELNO))) /* Print an instruction operand X on file FILE. Look in h8300.c for details. */ #define PRINT_OPERAND_PUNCT_VALID_P(CODE) \ ((CODE) == '#') ! #define PRINT_OPERAND(FILE, X, CODE) print_operand (FILE, X, CODE) /* Print a memory operand whose address is X, on file FILE. This uses a function in h8300.c. */ *************** readonly_data () \ *** 1487,1490 **** #define MOVE_RATIO 3 ! #endif /* GCC_H8300_H */ --- 1364,1367 ---- #define MOVE_RATIO 3 ! #endif /* ! GCC_H8300_H */ diff -Nrc3pad gcc-3.0.4/gcc/config/h8300/h8300.md gcc-3.1/gcc/config/h8300/h8300.md *** gcc-3.0.4/gcc/config/h8300/h8300.md Thu Nov 15 20:52:24 2001 --- gcc-3.1/gcc/config/h8300/h8300.md Sat Feb 23 14:17:25 2002 *************** *** 1,6 **** ;; GCC machine description for Hitachi H8/300 ;; Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, ! ;; 2001 Free Software Foundation, Inc. ;; Contributed by Steve Chamberlain (sac@cygnus.com), ;; Jim Wilson (wilson@cygnus.com), and Doug Evans (dje@cygnus.com). --- 1,6 ---- ;; GCC machine description for Hitachi H8/300 ;; Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, ! ;; 2001, 2002 Free Software Foundation, Inc. ;; Contributed by Steve Chamberlain (sac@cygnus.com), ;; Jim Wilson (wilson@cygnus.com), and Doug Evans (dje@cygnus.com). *************** *** 22,54 **** ;; the Free Software Foundation, 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. - ;; The original PO technology requires these to be ordered by speed, - ;; so that assigner will pick the fastest. - - ;; See file "rtl.def" for documentation on define_insn, match_*, et. al. - - (define_attr "cpu" "h8300,h8300h" - (const (symbol_ref "cpu_type"))) - - ;; Many logical operations should have "bit" variants if only one - ;; bit is going to be operated on. - - ;; (and (logical op) (const_int X)) - ;; If const_int only specifies a few bits (like a single byte in a 4 byte - ;; operation, then it's more efficient to only apply the and and logical_op - ;; to the bits we care about. - ;; Some of the extend instructions accept a general_operand_src, which ;; allows all the normal memory addressing modes. The length computations ;; don't take this into account. The lengths in the MD file should be ;; "worst case" and then be adjusted to their correct values by ;; h8300_adjust_insn_length. ! ;; On the h8300h, adds/subs operate on the 32bit "er" registers. Right ! ;; now GCC doesn't expose the "e" half to the compiler, so using add/subs ! ;; for addhi and subhi is safe. ! ;; Long term, we want to expose the "e" half to the compiler (gives us ! ;; 8 more 16bit registers). At that point addhi and subhi can't use adds/subs. ;; There's currently no way to have a insv/extzv expander for the H8/300H ;; because word_mode is different for the H8/300 and H8/300H. --- 22,39 ---- ;; the Free Software Foundation, 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;; Some of the extend instructions accept a general_operand_src, which ;; allows all the normal memory addressing modes. The length computations ;; don't take this into account. The lengths in the MD file should be ;; "worst case" and then be adjusted to their correct values by ;; h8300_adjust_insn_length. ! ;; On the H8/300H and H8/S, adds/subs operate on the 32bit "er" ! ;; registers. Right now GCC doesn't expose the "e" half to the ! ;; compiler, so using add/subs for addhi and subhi is safe. Long ! ;; term, we want to expose the "e" half to the compiler (gives us 8 ! ;; more 16bit registers). At that point addhi and subhi can't use ! ;; adds/subs. ;; There's currently no way to have a insv/extzv expander for the H8/300H ;; because word_mode is different for the H8/300 and H8/300H. *************** *** 61,66 **** --- 46,70 ---- ;; ??? Implement remaining bit ops available on the h8300 + ;; ---------------------------------------------------------------------- + ;; CONSTANTS + ;; ---------------------------------------------------------------------- + + (define_constants + [(SC_REG 3) + (FP_REG 6) + (SP_REG 7) + (MAC_REG 8) + (AP_REG 9) + (RAP_REG 10)]) + + ;; ---------------------------------------------------------------------- + ;; ATTRIBUTES + ;; ---------------------------------------------------------------------- + + (define_attr "cpu" "h8300,h8300h" + (const (symbol_ref "cpu_type"))) + (define_attr "type" "branch,arith" (const_string "arith")) *************** *** 68,77 **** (define_attr "length" "" (cond [(eq_attr "type" "branch") ! (if_then_else (and (ge (minus (pc) (match_dup 0)) ! (const_int -120)) ! (le (minus (pc) (match_dup 0)) ! (const_int 120))) (const_int 2) (if_then_else (and (eq_attr "cpu" "h8300h") (and (ge (minus (pc) (match_dup 0)) --- 72,81 ---- (define_attr "length" "" (cond [(eq_attr "type" "branch") ! (if_then_else (and (ge (minus (match_dup 0) (pc)) ! (const_int -126)) ! (le (minus (match_dup 0) (pc)) ! (const_int 126))) (const_int 2) (if_then_else (and (eq_attr "cpu" "h8300h") (and (ge (minus (pc) (match_dup 0)) *************** *** 89,94 **** --- 93,99 ---- (const_string "yes"))) ;; Condition code settings. + ;; ;; none - insn does not affect cc ;; none_0hit - insn does not affect cc but it does modify operand 0 ;; This attribute is used to keep track of when operand 0 changes. *************** *** 97,102 **** --- 102,108 ---- ;; set_zn - insn sets z,n to usable values; v,c are unknown. ;; compare - compare instruction ;; clobber - value of cc is unknown + (define_attr "cc" "none,none_0hit,set_znv,set_zn,compare,clobber" (const_string "clobber")) *************** *** 106,130 **** ;; movqi ! (define_insn "movqi_push" ! [(set (match_operand:QI 0 "push_operand" "=<") ! (match_operand:QI 1 "register_operand" "r"))] "" ! "* { if (TARGET_H8300) ! return \"push.w %T1\"; else ! return \"push.l %S1\"; ! }" ! [(set (attr "length") (if_then_else (eq_attr "cpu" "h8300") (const_int 2) (const_int 4))) ! (set_attr "cc" "set_znv")]) (define_insn "" ! [(set (match_operand:QI 0 "general_operand_dst" "=r,r,<,r,r,m") ! (match_operand:QI 1 "general_operand_src" "I,r>,r,n,m,r"))] ! "register_operand (operands[0],QImode) ! || register_operand (operands[1], QImode)" "@ sub.b %X0,%X0 mov.b %R1,%X0 --- 112,155 ---- ;; movqi ! (define_insn "pushqi1_h8300" ! [(parallel [(set (reg:HI SP_REG) ! (plus:HI (reg:HI SP_REG) (const_int -2))) ! (set (mem:QI (plus:HI (reg:HI SP_REG) (const_int -1))) ! (match_operand:QI 0 "register_operand" "r"))])] ! "TARGET_H8300" ! "mov.w\\t%T0,@-r7" ! [(set_attr "length" "2") ! (set_attr "cc" "clobber")]) ! ! (define_insn "pushqi1_h8300hs" ! [(parallel [(set (reg:SI SP_REG) ! (plus:SI (reg:SI SP_REG) (const_int -4))) ! (set (mem:QI (plus:SI (reg:SI SP_REG) (const_int -3))) ! (match_operand:QI 0 "register_operand" "r"))])] ! "TARGET_H8300H || TARGET_H8300S" ! "mov.l\\t%S0,@-er7" ! [(set_attr "length" "4") ! (set_attr "cc" "clobber")]) ! ! (define_expand "pushqi1" ! [(use (match_operand:QI 0 "register_operand" ""))] "" ! " { if (TARGET_H8300) ! emit_insn (gen_pushqi1_h8300 (operands[0])); else ! emit_insn (gen_pushqi1_h8300hs (operands[0])); ! DONE; ! }") (define_insn "" ! [(set (match_operand:QI 0 "general_operand_dst" "=r,r ,<,r,r,m") ! (match_operand:QI 1 "general_operand_src" " I,r>,r,n,m,r"))] ! "TARGET_H8300 ! && (register_operand (operands[0], QImode) ! || register_operand (operands[1], QImode))" "@ sub.b %X0,%X0 mov.b %R1,%X0 *************** *** 132,143 **** mov.b %R1,%X0 mov.b %R1,%X0 mov.b %X1,%R0" ! [(set_attr_alternative "length" ! [(const_int 2) (const_int 2) (const_int 2) (const_int 2) ! (if_then_else (eq_attr "cpu" "h8300") (const_int 4) (const_int 8)) ! (if_then_else (eq_attr "cpu" "h8300") (const_int 4) (const_int 8))]) (set_attr "cc" "set_zn,set_znv,set_znv,set_znv,set_znv,set_znv")]) (define_expand "movqi" [(set (match_operand:QI 0 "general_operand_dst" "") (match_operand:QI 1 "general_operand_src" ""))] --- 157,181 ---- mov.b %R1,%X0 mov.b %R1,%X0 mov.b %X1,%R0" ! [(set_attr "length" "2,2,2,2,4,4") (set_attr "cc" "set_zn,set_znv,set_znv,set_znv,set_znv,set_znv")]) + (define_insn "" + [(set (match_operand:QI 0 "general_operand_dst" "=r,r ,<,r,r,m") + (match_operand:QI 1 "general_operand_src" " I,r>,r,n,m,r"))] + "(TARGET_H8300H || TARGET_H8300S) + && (register_operand (operands[0], QImode) + || register_operand (operands[1], QImode))" + "@ + sub.b %X0,%X0 + mov.b %R1,%X0 + mov.b %X1,%R0 + mov.b %R1,%X0 + mov.b %R1,%X0 + mov.b %X1,%R0" + [(set_attr "length" "2,2,2,2,8,8") + (set_attr "cc" "set_zn,set_znv,set_znv,clobber,set_znv,set_znv")]) + (define_expand "movqi" [(set (match_operand:QI 0 "general_operand_dst" "") (match_operand:QI 1 "general_operand_src" ""))] *************** *** 168,194 **** ;; movhi ! ;; ??? We use push.l on the h8300h to push a 16bit value?!? We have ! ;; 16bit push insns! ! (define_insn "movhi_push" ! [(set (match_operand:HI 0 "push_operand" "=<") ! (match_operand:HI 1 "register_operand" "r"))] "" ! "* { if (TARGET_H8300) ! return \"push.w %T1\"; else ! return \"push.l %S1\"; ! }" ! [(set (attr "length") (if_then_else (eq_attr "cpu" "h8300") (const_int 2) (const_int 4))) ! (set_attr "cc" "set_znv")]) (define_insn "" [(set (match_operand:HI 0 "general_operand_dst" "=r,r,<,r,r,m") (match_operand:HI 1 "general_operand_src" "I,r>,r,i,m,r"))] ! "(register_operand (operands[0],HImode) ! || register_operand (operands[1], HImode)) && !(GET_CODE (operands[0]) == MEM && GET_CODE (XEXP (operands[0], 0)) == PRE_DEC && GET_CODE (XEXP (XEXP (operands[0], 0), 0)) == REG --- 206,245 ---- ;; movhi ! (define_expand "pushhi1_h8300" ! [(set (mem:HI (pre_dec:HI (reg:HI SP_REG))) ! (match_operand:HI 0 "register_operand" ""))] ! "TARGET_H8300" ! "") ! ! (define_insn "pushhi1_h8300hs" ! [(parallel [(set (reg:SI SP_REG) ! (plus:SI (reg:SI SP_REG) (const_int -4))) ! (set (mem:HI (plus:SI (reg:SI SP_REG) (const_int -2))) ! (match_operand:HI 0 "register_operand" "r"))])] ! "TARGET_H8300H || TARGET_H8300S" ! "mov.l\\t%S0,@-er7" ! [(set_attr "length" "4") ! (set_attr "cc" "clobber")]) ! ! (define_expand "pushhi1" ! [(use (match_operand:HI 0 "register_operand" ""))] "" ! " { if (TARGET_H8300) ! emit_insn (gen_pushhi1_h8300 (operands[0])); else ! emit_insn (gen_pushhi1_h8300hs (operands[0])); ! DONE; ! }") (define_insn "" [(set (match_operand:HI 0 "general_operand_dst" "=r,r,<,r,r,m") (match_operand:HI 1 "general_operand_src" "I,r>,r,i,m,r"))] ! "TARGET_H8300 ! && (register_operand (operands[0], HImode) ! || register_operand (operands[1], HImode)) && !(GET_CODE (operands[0]) == MEM && GET_CODE (XEXP (operands[0], 0)) == PRE_DEC && GET_CODE (XEXP (XEXP (operands[0], 0), 0)) == REG *************** *** 201,210 **** mov.w %T1,%T0 mov.w %T1,%T0 mov.w %T1,%T0" ! [(set_attr_alternative "length" ! [(const_int 2) (const_int 2) (const_int 2) (const_int 4) ! (if_then_else (eq_attr "cpu" "h8300") (const_int 4) (const_int 8)) ! (if_then_else (eq_attr "cpu" "h8300") (const_int 4) (const_int 8))]) (set_attr "cc" "set_zn,set_znv,set_znv,set_znv,set_znv,set_znv")]) (define_expand "movhi" --- 252,274 ---- mov.w %T1,%T0 mov.w %T1,%T0 mov.w %T1,%T0" ! [(set_attr "length" "2,2,2,4,4,4") ! (set_attr "cc" "set_zn,set_znv,set_znv,set_znv,set_znv,set_znv")]) ! ! (define_insn "" ! [(set (match_operand:HI 0 "general_operand_dst" "=r,r,<,r,r,m") ! (match_operand:HI 1 "general_operand_src" "I,r>,r,i,m,r"))] ! "(TARGET_H8300H || TARGET_H8300S) ! && (register_operand (operands[0], HImode) ! || register_operand (operands[1], HImode))" ! "@ ! sub.w %T0,%T0 ! mov.w %T1,%T0 ! mov.w %T1,%T0 ! mov.w %T1,%T0 ! mov.w %T1,%T0 ! mov.w %T1,%T0" ! [(set_attr "length" "2,2,2,4,8,8") (set_attr "cc" "set_zn,set_znv,set_znv,set_znv,set_znv,set_znv")]) (define_expand "movhi" *************** *** 303,317 **** /* Make sure we don't trample the register we index with. */ if (GET_CODE (operands[1]) == MEM) { ! rtx inside = XEXP (operands[1],0); if (REG_P (inside)) { rn = REGNO (inside); } else if (GET_CODE (inside) == PLUS) { ! rtx lhs = XEXP (inside,0); ! rtx rhs = XEXP (inside,1); if (REG_P (lhs)) rn = REGNO (lhs); if (REG_P (rhs)) rn = REGNO (rhs); } --- 367,381 ---- /* Make sure we don't trample the register we index with. */ if (GET_CODE (operands[1]) == MEM) { ! rtx inside = XEXP (operands[1], 0); if (REG_P (inside)) { rn = REGNO (inside); } else if (GET_CODE (inside) == PLUS) { ! rtx lhs = XEXP (inside, 0); ! rtx rhs = XEXP (inside, 1); if (REG_P (lhs)) rn = REGNO (lhs); if (REG_P (rhs)) rn = REGNO (rhs); } *************** *** 341,347 **** case 5: return \"mov.w %T1,%e0\;mov.w %T1,%f0\"; default: ! abort(); } }" [(set_attr "length" "4,4,8,8,4,4") --- 405,411 ---- case 5: return \"mov.w %T1,%e0\;mov.w %T1,%f0\"; default: ! abort (); } }" [(set_attr "length" "4,4,8,8,4,4") *************** *** 370,384 **** /* Make sure we don't trample the register we index with. */ if (GET_CODE (operands[1]) == MEM) { ! rtx inside = XEXP (operands[1],0); if (REG_P (inside)) { rn = REGNO (inside); } else if (GET_CODE (inside) == PLUS) { ! rtx lhs = XEXP (inside,0); ! rtx rhs = XEXP (inside,1); if (REG_P (lhs)) rn = REGNO (lhs); if (REG_P (rhs)) rn = REGNO (rhs); } --- 434,448 ---- /* Make sure we don't trample the register we index with. */ if (GET_CODE (operands[1]) == MEM) { ! rtx inside = XEXP (operands[1], 0); if (REG_P (inside)) { rn = REGNO (inside); } else if (GET_CODE (inside) == PLUS) { ! rtx lhs = XEXP (inside, 0); ! rtx rhs = XEXP (inside, 1); if (REG_P (lhs)) rn = REGNO (lhs); if (REG_P (rhs)) rn = REGNO (rhs); } *************** *** 397,403 **** case 5: return \"mov.w %T1,%e0\;mov.w %T1,%f0\"; default: ! abort(); } }" [(set_attr "length" "4,4,8,8,4,4") --- 461,467 ---- case 5: return \"mov.w %T1,%e0\;mov.w %T1,%f0\"; default: ! abort (); } }" [(set_attr "length" "4,4,8,8,4,4") *************** *** 445,462 **** return \"sub.l\\t%S0,%S0\;add.b\\t%1,%x0\"; } ! /* Now look for small negative numbers. We can subtract them ! from zero to get the desired constant. */ ! if (val == -4 || val == -2 || val == -1) { ! operands[1] = GEN_INT (-INTVAL (operands[1])); ! return \"sub.l\\t%S0,%S0\;subs\\t%1,%S0\"; } } } return \"mov.l %S1,%S0\"; }" ! [(set_attr "length" "2,2,10,10,10,4,4,2,6,4") (set_attr "cc" "set_zn,set_znv,clobber,set_znv,set_znv,set_znv,set_znv,none_0hit,none_0hit,set_znv")]) (define_insn "movsf_h8300h" --- 509,545 ---- return \"sub.l\\t%S0,%S0\;add.b\\t%1,%x0\"; } ! /* Look for constants that can be obtained by subs, inc, and ! dec to 0. */ ! switch (val & 0xffffffff) { ! case 0xffffffff: ! return \"sub.l\\t%S0,%S0\;subs\\t#1,%S0\"; ! case 0xfffffffe: ! return \"sub.l\\t%S0,%S0\;subs\\t#2,%S0\"; ! case 0xfffffffc: ! return \"sub.l\\t%S0,%S0\;subs\\t#4,%S0\"; ! ! case 0x0000ffff: ! return \"sub.l\\t%S0,%S0\;dec.w\\t#1,%f0\"; ! case 0x0000fffe: ! return \"sub.l\\t%S0,%S0\;dec.w\\t#2,%f0\"; ! ! case 0xffff0000: ! return \"sub.l\\t%S0,%S0\;dec.w\\t#1,%e0\"; ! case 0xfffe0000: ! return \"sub.l\\t%S0,%S0\;dec.w\\t#2,%e0\"; ! ! case 0x00010000: ! return \"sub.l\\t%S0,%S0\;inc.w\\t#1,%e0\"; ! case 0x00020000: ! return \"sub.l\\t%S0,%S0\;inc.w\\t#2,%e0\"; } } } return \"mov.l %S1,%S0\"; }" ! [(set_attr "length" "2,2,6,10,10,4,4,2,6,4") (set_attr "cc" "set_zn,set_znv,clobber,set_znv,set_znv,set_znv,set_znv,none_0hit,none_0hit,set_znv")]) (define_insn "movsf_h8300h" *************** *** 480,534 **** ;; ---------------------------------------------------------------------- (define_insn "" - [(set (cc0) (zero_extract:QI (match_operand:QI 0 "bit_memory_operand" "r,U") - (const_int 1) - (match_operand:QI 1 "const_int_operand" "n,n")))] - "" - "btst %Z1,%R0" - [(set_attr "length" "2,8") - (set_attr "cc" "set_zn,set_zn")]) - - (define_insn "" [(set (cc0) (zero_extract:HI (match_operand:QI 0 "bit_memory_operand" "r,U") (const_int 1) ! (match_operand:QI 1 "const_int_operand" "n,n")))] ! "" "btst %Z1,%Y0" ! [(set_attr "length" "2,8") (set_attr "cc" "set_zn,set_zn")]) (define_insn "" ! [(set (cc0) (zero_extract:SI (match_operand:QI 0 "bit_memory_operand" "r,U") (const_int 1) ! (match_operand:QI 1 "const_int_operand" "n,n")))] ! "" "btst %Z1,%Y0" - [(set_attr "length" "2,8") - (set_attr "cc" "set_zn,set_zn")]) - - (define_insn "" - [(set (cc0) (zero_extract:QI (match_operand:HI 0 "register_operand" "r") - (const_int 1) - (match_operand:HI 1 "const_int_operand" "n")))] - "" - "btst %Z1,%R0" [(set_attr "length" "2") (set_attr "cc" "set_zn")]) (define_insn "" ! [(set (cc0) (zero_extract:HI (match_operand:HI 0 "register_operand" "r") (const_int 1) ! (match_operand:HI 1 "const_int_operand" "n")))] ! "" "btst %Z1,%Y0" ! [(set_attr "length" "2") ! (set_attr "cc" "set_zn")]) (define_insn "" ! [(set (cc0) (zero_extract:SI (match_operand:HI 0 "register_operand" "r") (const_int 1) ! (match_operand:HI 1 "const_int_operand" "n")))] ! "" "btst %Z1,%Y0" [(set_attr "length" "2") (set_attr "cc" "set_zn")]) --- 563,600 ---- ;; ---------------------------------------------------------------------- (define_insn "" [(set (cc0) (zero_extract:HI (match_operand:QI 0 "bit_memory_operand" "r,U") (const_int 1) ! (match_operand 1 "const_int_operand" "n,n")))] ! "TARGET_H8300" "btst %Z1,%Y0" ! [(set_attr "length" "2,4") (set_attr "cc" "set_zn,set_zn")]) (define_insn "" ! [(set (cc0) (zero_extract:HI (match_operand:HI 0 "register_operand" "r") (const_int 1) ! (match_operand 1 "const_int_operand" "n")))] ! "TARGET_H8300" "btst %Z1,%Y0" [(set_attr "length" "2") (set_attr "cc" "set_zn")]) (define_insn "" ! [(set (cc0) (zero_extract:SI (match_operand:QI 0 "bit_memory_operand" "r,U") (const_int 1) ! (match_operand 1 "const_int_operand" "n,n")))] ! "TARGET_H8300H || TARGET_H8300S" "btst %Z1,%Y0" ! [(set_attr "length" "2,8") ! (set_attr "cc" "set_zn,set_zn")]) (define_insn "" ! [(set (cc0) (zero_extract:SI (match_operand:SI 0 "register_operand" "r") (const_int 1) ! (match_operand 1 "const_int_operand" "n")))] ! "(TARGET_H8300H || TARGET_H8300S) ! && INTVAL (operands[1]) <= 15" "btst %Z1,%Y0" [(set_attr "length" "2") (set_attr "cc" "set_zn")]) *************** *** 629,636 **** (match_operand:HI 2 "nonmemory_operand" "L,N,n,r,r")))] "TARGET_H8300" "@ ! adds %2,%A0 ! subs %G2,%A0 add.b %s2,%s0\;addx %t2,%t0 add.w %T2,%T0 mov.w %T1,%T0\;add.w %T2,%T0" --- 695,702 ---- (match_operand:HI 2 "nonmemory_operand" "L,N,n,r,r")))] "TARGET_H8300" "@ ! adds %2,%T0 ! subs %G2,%T0 add.b %s2,%s0\;addx %t2,%t0 add.w %T2,%T0 mov.w %T1,%T0\;add.w %T2,%T0" *************** *** 643,650 **** (match_operand:HI 2 "nonmemory_operand" "L,N,n,r")))] "TARGET_H8300H || TARGET_H8300S" "@ ! adds %2,%A0 ! subs %G2,%A0 add.w %T2,%T0 add.w %T2,%T0" [(set_attr "length" "2,2,4,2") --- 709,716 ---- (match_operand:HI 2 "nonmemory_operand" "L,N,n,r")))] "TARGET_H8300H || TARGET_H8300S" "@ ! adds %2,%S0 ! subs %G2,%S0 add.w %T2,%T0 add.w %T2,%T0" [(set_attr "length" "2,2,4,2") *************** *** 683,690 **** (match_operand:SI 2 "nonmemory_operand" "L,N,i,r")))] "TARGET_H8300H || TARGET_H8300S" "@ ! adds %2,%A0 ! subs %G2,%A0 add.l %S2,%S0 add.l %S2,%S0" [(set_attr "length" "2,2,6,2") --- 749,756 ---- (match_operand:SI 2 "nonmemory_operand" "L,N,i,r")))] "TARGET_H8300H || TARGET_H8300S" "@ ! adds %2,%S0 ! subs %G2,%S0 add.l %S2,%S0 add.l %S2,%S0" [(set_attr "length" "2,2,6,2") *************** *** 703,715 **** ;; ---------------------------------------------------------------------- (define_insn "subqi3" ! [(set (match_operand:QI 0 "register_operand" "=r,r") ! (minus:QI (match_operand:QI 1 "register_operand" "0,0") ! (match_operand:QI 2 "nonmemory_operand" "r,n")))] "" ! "@ ! sub.b %X2,%X0 ! add.b %G2,%X0" [(set_attr "length" "2") (set_attr "cc" "set_zn")]) --- 769,779 ---- ;; ---------------------------------------------------------------------- (define_insn "subqi3" ! [(set (match_operand:QI 0 "register_operand" "=r") ! (minus:QI (match_operand:QI 1 "register_operand" "0") ! (match_operand:QI 2 "register_operand" "r")))] "" ! "sub.b %X2,%X0" [(set_attr "length" "2") (set_attr "cc" "set_zn")]) *************** *** 777,783 **** (define_insn "mulqihi3" [(set (match_operand:HI 0 "register_operand" "=r") ! (mult:HI (sign_extend:HI (match_operand:QI 1 "general_operand" "%0")) (sign_extend:HI (match_operand:QI 2 "register_operand" "r"))))] "TARGET_H8300H || TARGET_H8300S" "mulxs.b %X2,%T0" --- 841,847 ---- (define_insn "mulqihi3" [(set (match_operand:HI 0 "register_operand" "=r") ! (mult:HI (sign_extend:HI (match_operand:QI 1 "register_operand" "%0")) (sign_extend:HI (match_operand:QI 2 "register_operand" "r"))))] "TARGET_H8300H || TARGET_H8300S" "mulxs.b %X2,%T0" *************** *** 786,792 **** (define_insn "mulhisi3" [(set (match_operand:SI 0 "register_operand" "=r") ! (mult:SI (sign_extend:SI (match_operand:HI 1 "general_operand" "%0")) (sign_extend:SI (match_operand:HI 2 "register_operand" "r"))))] "TARGET_H8300H || TARGET_H8300S" "mulxs.w %T2,%S0" --- 850,856 ---- (define_insn "mulhisi3" [(set (match_operand:SI 0 "register_operand" "=r") ! (mult:SI (sign_extend:SI (match_operand:HI 1 "register_operand" "%0")) (sign_extend:SI (match_operand:HI 2 "register_operand" "r"))))] "TARGET_H8300H || TARGET_H8300S" "mulxs.w %T2,%S0" *************** *** 795,801 **** (define_insn "umulqihi3" [(set (match_operand:HI 0 "register_operand" "=r") ! (mult:HI (zero_extend:HI (match_operand:QI 1 "general_operand" "%0")) (zero_extend:HI (match_operand:QI 2 "register_operand" "r"))))] "" "mulxu %X2,%T0" --- 859,865 ---- (define_insn "umulqihi3" [(set (match_operand:HI 0 "register_operand" "=r") ! (mult:HI (zero_extend:HI (match_operand:QI 1 "register_operand" "%0")) (zero_extend:HI (match_operand:QI 2 "register_operand" "r"))))] "" "mulxu %X2,%T0" *************** *** 804,810 **** (define_insn "umulhisi3" [(set (match_operand:SI 0 "register_operand" "=r") ! (mult:SI (zero_extend:SI (match_operand:HI 1 "general_operand" "%0")) (zero_extend:SI (match_operand:HI 2 "register_operand" "r"))))] "TARGET_H8300H || TARGET_H8300S" "mulxu.w %T2,%S0" --- 868,874 ---- (define_insn "umulhisi3" [(set (match_operand:SI 0 "register_operand" "=r") ! (mult:SI (zero_extend:SI (match_operand:HI 1 "register_operand" "%0")) (zero_extend:SI (match_operand:HI 2 "register_operand" "r"))))] "TARGET_H8300H || TARGET_H8300S" "mulxu.w %T2,%S0" *************** *** 832,838 **** (define_insn "" [(set (match_operand:SI 0 "register_operand" "=a") ! (plus (mult:SI (sign_extend:SI (mem:HI (post_inc:SI (match_operand:SI 1 "register_operand" "r")))) (sign_extend:SI (mem:HI --- 896,902 ---- (define_insn "" [(set (match_operand:SI 0 "register_operand" "=a") ! (plus:SI (mult:SI (sign_extend:SI (mem:HI (post_inc:SI (match_operand:SI 1 "register_operand" "r")))) (sign_extend:SI (mem:HI *************** *** 844,943 **** (set_attr "cc" "none_0hit")]) ;; ---------------------------------------------------------------------- ! ;; DIVIDE INSTRUCTIONS ;; ---------------------------------------------------------------------- ! (define_insn "udivqi3" [(set (match_operand:QI 0 "register_operand" "=r") (truncate:QI (udiv:HI ! (match_operand:HI 1 "general_operand" "0") ! (zero_extend:HI (match_operand:QI 2 "register_operand" "r")))))] ! "" ! "divxu %X2,%T0" ! [(set_attr "length" "2") ! (set_attr "cc" "clobber")]) ! ! ;; ??? Will divxu always work here? ! ! (define_insn "divqi3" ! [(set (match_operand:QI 0 "register_operand" "=r") (truncate:QI ! (div:HI ! (match_operand:HI 1 "general_operand" "0") ! (sign_extend:HI (match_operand:QI 2 "register_operand" "r")))))] ! "" ! "divxu %X2,%T0" ! [(set_attr "length" "2") ! (set_attr "cc" "clobber")]) ! ! (define_insn "udivhi3" ! [(set (match_operand:HI 0 "register_operand" "=r") ! (truncate:HI ! (udiv:SI ! (match_operand:SI 1 "general_operand" "0") ! (zero_extend:SI (match_operand:HI 2 "register_operand" "r")))))] ! "TARGET_H8300H || TARGET_H8300S" ! "divxu.w %T2,%S0" ! [(set_attr "length" "2") ! (set_attr "cc" "clobber")]) ! ! (define_insn "divhi3" ! [(set (match_operand:HI 0 "register_operand" "=r") ! (truncate:HI ! (div:SI ! (match_operand:SI 1 "general_operand" "0") ! (sign_extend:SI (match_operand:HI 2 "register_operand" "r")))))] "TARGET_H8300H || TARGET_H8300S" ! "divxs.w %T2,%S0" [(set_attr "length" "4") (set_attr "cc" "clobber")]) ! ;; ---------------------------------------------------------------------- ! ;; MOD INSTRUCTIONS ! ;; ---------------------------------------------------------------------- ! ! (define_insn "umodqi3" [(set (match_operand:QI 0 "register_operand" "=r") (truncate:QI ! (umod:HI ! (match_operand:HI 1 "general_operand" "0") ! (zero_extend:HI (match_operand:QI 2 "register_operand" "r")))))] ! "" ! "divxu %X2,%T0\;mov %t0,%s0" ! [(set_attr "length" "4") ! (set_attr "cc" "clobber")]) ! ! (define_insn "modqi3" ! [(set (match_operand:QI 0 "register_operand" "=r") (truncate:QI (mod:HI ! (match_operand:HI 1 "general_operand" "0") ! (sign_extend:HI (match_operand:QI 2 "register_operand" "r")))))] "TARGET_H8300H || TARGET_H8300S" ! "divxs.b %X2,%T0\;mov %t0,%s0" [(set_attr "length" "6") (set_attr "cc" "clobber")]) ! (define_insn "umodhi3" [(set (match_operand:HI 0 "register_operand" "=r") (truncate:HI (umod:SI ! (match_operand:SI 1 "general_operand" "0") ! (zero_extend:SI (match_operand:HI 2 "register_operand" "r")))))] "TARGET_H8300H || TARGET_H8300S" ! "divxu.w %T2,%S0\;mov %e0,%f0" [(set_attr "length" "4") (set_attr "cc" "clobber")]) ! (define_insn "modhi3" [(set (match_operand:HI 0 "register_operand" "=r") (truncate:HI (mod:SI ! (match_operand:SI 1 "general_operand" "0") ! (sign_extend:SI (match_operand:HI 2 "register_operand" "r")))))] "TARGET_H8300H || TARGET_H8300S" ! "divxs.w %T2,%S0\;mov %e0,%f0" [(set_attr "length" "6") (set_attr "cc" "clobber")]) --- 908,1001 ---- (set_attr "cc" "none_0hit")]) ;; ---------------------------------------------------------------------- ! ;; DIVIDE/MOD INSTRUCTIONS ;; ---------------------------------------------------------------------- ! (define_insn "udivmodqi4" [(set (match_operand:QI 0 "register_operand" "=r") (truncate:QI (udiv:HI ! (match_operand:HI 1 "register_operand" "0") ! (zero_extend:HI (match_operand:QI 2 "register_operand" "r"))))) ! (set (match_operand:QI 3 "register_operand" "=r") (truncate:QI ! (umod:HI ! (match_dup 1) ! (zero_extend:HI (match_dup 2)))))] "TARGET_H8300H || TARGET_H8300S" ! "* ! { ! if (find_reg_note (insn, REG_UNUSED, operands[3])) ! return \"divxu.b\\t%X2,%T0\"; ! else ! return \"divxu.b\\t%X2,%T0\;mov.b\\t%t0,%s3\"; ! }" [(set_attr "length" "4") (set_attr "cc" "clobber")]) ! (define_insn "divmodqi4" [(set (match_operand:QI 0 "register_operand" "=r") (truncate:QI ! (div:HI ! (match_operand:HI 1 "register_operand" "0") ! (sign_extend:HI (match_operand:QI 2 "register_operand" "r"))))) ! (set (match_operand:QI 3 "register_operand" "=r") (truncate:QI (mod:HI ! (match_dup 1) ! (sign_extend:HI (match_dup 2)))))] "TARGET_H8300H || TARGET_H8300S" ! "* ! { ! if (find_reg_note (insn, REG_UNUSED, operands[3])) ! return \"divxs.b\\t%X2,%T0\"; ! else ! return \"divxs.b\\t%X2,%T0\;mov.b\\t%t0,%s3\"; ! }" [(set_attr "length" "6") (set_attr "cc" "clobber")]) ! (define_insn "udivmodhi4" [(set (match_operand:HI 0 "register_operand" "=r") (truncate:HI + (udiv:SI + (match_operand:SI 1 "register_operand" "0") + (zero_extend:SI (match_operand:HI 2 "register_operand" "r"))))) + (set (match_operand:HI 3 "register_operand" "=r") + (truncate:HI (umod:SI ! (match_dup 1) ! (zero_extend:SI (match_dup 2)))))] "TARGET_H8300H || TARGET_H8300S" ! "* ! { ! if (find_reg_note (insn, REG_UNUSED, operands[3])) ! return \"divxu.w\\t%T2,%S0\"; ! else ! return \"divxu.w\\t%T2,%S0\;mov.w\\t%e0,%f3\"; ! }" [(set_attr "length" "4") (set_attr "cc" "clobber")]) ! (define_insn "divmodhi4" [(set (match_operand:HI 0 "register_operand" "=r") (truncate:HI + (div:SI + (match_operand:SI 1 "register_operand" "0") + (sign_extend:SI (match_operand:HI 2 "register_operand" "r"))))) + (set (match_operand:HI 3 "register_operand" "=r") + (truncate:HI (mod:SI ! (match_dup 1) ! (sign_extend:SI (match_dup 2)))))] "TARGET_H8300H || TARGET_H8300S" ! "* ! { ! if (find_reg_note (insn, REG_UNUSED, operands[3])) ! return \"divxs.w\\t%T2,%S0\"; ! else ! return \"divxs.w\\t%T2,%S0\;mov.w\\t%e0,%f3\"; ! }" [(set_attr "length" "6") (set_attr "cc" "clobber")]) *************** *** 968,1050 **** DONE; }") ! (define_insn "andhi3" [(set (match_operand:HI 0 "register_operand" "=r") (and:HI (match_operand:HI 1 "register_operand" "%0") (match_operand:HI 2 "nonmemory_operand" "rn")))] ! "" "* { ! if (GET_CODE (operands[2]) == CONST_INT) { ! int i = INTVAL (operands[2]); ! ! if ((i & 0x00ff) != 0x00ff) ! output_asm_insn (\"and %s2,%s0\", operands); ! if ((i & 0xff00) != 0xff00) ! output_asm_insn (\"and %t2,%t0\", operands); ! return \"\"; } ! if (TARGET_H8300H || TARGET_H8300S) ! return \"and.w %T2,%T0\"; ! return \"and %s2,%s0\;and %t2,%t0;\"; }" [(set_attr "length" "4") (set_attr "cc" "clobber")]) ! (define_insn "andsi3" [(set (match_operand:SI 0 "register_operand" "=r") (and:SI (match_operand:SI 1 "register_operand" "%0") (match_operand:SI 2 "nonmemory_operand" "rn")))] ! "" ! "* ! { ! if (GET_CODE (operands[2]) == CONST_INT) ! { ! int i = INTVAL (operands[2]); ! int upper_cleared, lower_cleared; ! ! /* The h8300h can't do byte-wise operations on the ! upper 16bits of 32bit registers. However, if ! those bits aren't going to change, or they're ! going to be zero'd out, then we can work on the ! low-order bits. */ ! if ((TARGET_H8300H || TARGET_H8300S) ! && ((i & 0xffff0000) != 0xffff0000 ! || (i & 0xffff0000) == 0x00000000)) ! return \"and.l %S2,%S0\"; ! ! lower_cleared = 0; ! if ((i & 0x0000ffff) == 0x00000000) ! { ! output_asm_insn (\"sub.w %f0,%f0\", operands); ! lower_cleared = 1; ! } ! ! upper_cleared = 0; ! if ((i & 0xffff0000) == 0x00000000) ! { ! output_asm_insn (\"sub.w %e0,%e0\", operands); ! upper_cleared = 1; ! } ! ! if ((i & 0x000000ff) != 0x000000ff && !lower_cleared) ! output_asm_insn (\"and %w2,%w0\", operands); ! if ((i & 0x0000ff00) != 0x0000ff00 && !lower_cleared) ! output_asm_insn (\"and %x2,%x0\", operands); ! if ((i & 0x00ff0000) != 0x00ff0000 && !upper_cleared) ! output_asm_insn (\"and %y2,%y0\", operands); ! if ((i & 0xff000000) != 0xff000000 && !upper_cleared) ! output_asm_insn (\"and %z2,%z0\", operands); ! return \"\"; ! } ! if (TARGET_H8300H || TARGET_H8300S) ! return \"and.l %S2,%S0\"; ! return \"and %w2,%w0\;and %x2,%x0\;and %y2,%y0\;and %z2,%z0\"; ! }" [(set_attr "length" "8") (set_attr "cc" "clobber")]) ;; ---------------------------------------------------------------------- ;; OR INSTRUCTIONS --- 1026,1099 ---- DONE; }") ! (define_expand "andhi3" ! [(set (match_operand:HI 0 "register_operand" "") ! (and:HI (match_operand:HI 1 "register_operand" "") ! (match_operand:HI 2 "nonmemory_operand" "")))] ! "" ! "") ! ! (define_insn "" [(set (match_operand:HI 0 "register_operand" "=r") (and:HI (match_operand:HI 1 "register_operand" "%0") (match_operand:HI 2 "nonmemory_operand" "rn")))] ! "TARGET_H8300" ! "* return output_logical_op (HImode, AND, operands);" ! [(set_attr "length" "4") ! (set_attr "cc" "clobber")]) ! ! (define_insn "" ! [(set (match_operand:HI 0 "register_operand" "=r,r") ! (and:HI (match_operand:HI 1 "register_operand" "%0,0") ! (match_operand:HI 2 "nonmemory_operand" "r,n")))] ! "TARGET_H8300H || TARGET_H8300S" ! "* return output_logical_op (HImode, AND, operands);" ! [(set_attr "length" "2,4") ! (set_attr "cc" "set_znv,clobber")]) ! ! (define_insn "*andorhi3" ! [(set (match_operand:HI 0 "register_operand" "=r") ! (ior:HI (and:HI (match_operand:HI 2 "register_operand" "r") ! (match_operand:HI 3 "const_int_operand" "n")) ! (match_operand:HI 1 "register_operand" "0")))] ! "exact_log2 (INTVAL (operands[3]) & 0xffff) != -1" "* { ! operands[3] = GEN_INT (INTVAL (operands[3]) & 0xffff); ! if (INTVAL (operands[3]) > 128) { ! operands[3] = GEN_INT (INTVAL (operands[3]) >> 8); ! return \"bld\\t%V3,%t2\;bst\\t%V3,%t0\"; } ! return \"bld\\t%V3,%s2\;bst\\t%V3,%s0\"; }" [(set_attr "length" "4") (set_attr "cc" "clobber")]) ! (define_expand "andsi3" ! [(set (match_operand:SI 0 "register_operand" "") ! (and:SI (match_operand:SI 1 "register_operand" "") ! (match_operand:SI 2 "nonmemory_operand" "")))] ! "" ! "") ! ! (define_insn "" [(set (match_operand:SI 0 "register_operand" "=r") (and:SI (match_operand:SI 1 "register_operand" "%0") (match_operand:SI 2 "nonmemory_operand" "rn")))] ! "TARGET_H8300" ! "* return output_logical_op (SImode, AND, operands);" [(set_attr "length" "8") (set_attr "cc" "clobber")]) + (define_insn "" + [(set (match_operand:SI 0 "register_operand" "=r,r") + (and:SI (match_operand:SI 1 "register_operand" "%0,0") + (match_operand:SI 2 "nonmemory_operand" "r,n")))] + "TARGET_H8300H || TARGET_H8300S" + "* return output_logical_op (SImode, AND, operands);" + [(set_attr "length" "4,6") + (set_attr "cc" "set_znv,clobber")]) ;; ---------------------------------------------------------------------- ;; OR INSTRUCTIONS *************** *** 1053,1071 **** (define_insn "" [(set (match_operand:QI 0 "bit_operand" "=r,U") (ior:QI (match_operand:QI 1 "bit_operand" "%0,0") ! (match_operand:QI 2 "nonmemory_operand" "rn,P")))] ! "register_operand (operands[0], QImode) || p_operand (operands[2], QImode)" ! "@ ! or %X2,%X0 ! bset %V2,%R0" [(set_attr "length" "2,8") (set_attr "adjust_length" "no") (set_attr "cc" "set_znv,none_0hit")]) (define_expand "iorqi3" ! [(set (match_operand:QI 0 "bit_operand" "=r,U") ! (ior:QI (match_operand:QI 1 "bit_operand" "%0,0") ! (match_operand:QI 2 "nonmemory_operand" "rn,P")))] "" " { --- 1102,1132 ---- (define_insn "" [(set (match_operand:QI 0 "bit_operand" "=r,U") (ior:QI (match_operand:QI 1 "bit_operand" "%0,0") ! (match_operand:QI 2 "nonmemory_operand" "rn,n")))] ! "register_operand (operands[0], QImode) ! || (GET_CODE (operands[2]) == CONST_INT ! && exact_log2 (INTVAL (operands[2]) & 0xff) != -1)" ! "* ! { ! switch (which_alternative) ! { ! case 0: ! return \"or\t%X2,%X0\"; ! case 1: ! operands[2] = GEN_INT (INTVAL (operands[2]) & 0xff); ! return \"bset\t%V2,%R0\"; ! default: ! abort (); ! } ! }" [(set_attr "length" "2,8") (set_attr "adjust_length" "no") (set_attr "cc" "set_znv,none_0hit")]) (define_expand "iorqi3" ! [(set (match_operand:QI 0 "bit_operand" "") ! (ior:QI (match_operand:QI 1 "bit_operand" "") ! (match_operand:QI 2 "nonmemory_operand" "")))] "" " { *************** *** 1073,1138 **** DONE; }") ! (define_insn "iorhi3" [(set (match_operand:HI 0 "general_operand" "=r,r") (ior:HI (match_operand:HI 1 "general_operand" "%0,0") (match_operand:HI 2 "general_operand" "J,rn")))] ! "" ! "* ! { ! if (GET_CODE (operands[2]) == CONST_INT) ! { ! int i = INTVAL (operands[2]); ! ! if ((i & 0x00ff) != 0) ! output_asm_insn (\"or %s2,%s0\", operands); ! if ((i & 0xff00) != 0) ! output_asm_insn (\"or %t2,%t0\", operands); ! return \"\"; ! } ! if (TARGET_H8300H || TARGET_H8300S) ! return \"or.w %T2,%T0\"; ! return \"or %s2,%s0\;or %t2,%t0; %2 or2\"; ! }" [(set_attr "length" "2,4") (set_attr "cc" "clobber,clobber")]) ! (define_insn "iorsi3" [(set (match_operand:SI 0 "register_operand" "=r,r") (ior:SI (match_operand:SI 1 "register_operand" "%0,0") (match_operand:SI 2 "nonmemory_operand" "J,rn")))] ! "" ! "* ! { ! if (GET_CODE (operands[2]) == CONST_INT) ! { ! int i = INTVAL (operands[2]); ! ! /* The h8300h can't do byte-wise operations on the ! upper 16bits of 32bit registers. However, if ! those bits aren't going to change, then we can ! work on the low-order bits. */ ! if ((TARGET_H8300H || TARGET_H8300S) ! && (i & 0xffff0000) != 0x00000000) ! return \"or.l %S2,%S0\"; ! ! if ((i & 0x000000ff) != 0) ! output_asm_insn (\"or %w2,%w0\", operands); ! if ((i & 0x0000ff00) != 0) ! output_asm_insn (\"or %x2,%x0\", operands); ! if ((i & 0x00ff0000) != 0) ! output_asm_insn (\"or %y2,%y0\", operands); ! if ((i & 0xff000000) != 0) ! output_asm_insn (\"or %z2,%z0\", operands); ! return \"\"; ! } ! if (TARGET_H8300H || TARGET_H8300S) ! return \"or.l %S2,%S0\"; ! return \"or %w2,%w0\;or %x2,%x0\;or %y2,%y0\;or %z2,%z0\"; ! }" [(set_attr "length" "2,8") (set_attr "cc" "clobber,clobber")]) ;; ---------------------------------------------------------------------- ;; XOR INSTRUCTIONS ;; ---------------------------------------------------------------------- --- 1134,1189 ---- DONE; }") ! (define_expand "iorhi3" ! [(set (match_operand:HI 0 "register_operand" "") ! (ior:HI (match_operand:HI 1 "register_operand" "") ! (match_operand:HI 2 "nonmemory_operand" "")))] ! "" ! "") ! ! (define_insn "" [(set (match_operand:HI 0 "general_operand" "=r,r") (ior:HI (match_operand:HI 1 "general_operand" "%0,0") (match_operand:HI 2 "general_operand" "J,rn")))] ! "TARGET_H8300" ! "* return output_logical_op (HImode, IOR, operands);" [(set_attr "length" "2,4") (set_attr "cc" "clobber,clobber")]) ! (define_insn "" ! [(set (match_operand:HI 0 "general_operand" "=r,r,r") ! (ior:HI (match_operand:HI 1 "general_operand" "%0,0,0") ! (match_operand:HI 2 "general_operand" "J,r,n")))] ! "TARGET_H8300H || TARGET_H8300S" ! "* return output_logical_op (HImode, IOR, operands);" ! [(set_attr "length" "2,2,4") ! (set_attr "cc" "clobber,set_znv,clobber")]) ! ! (define_expand "iorsi3" ! [(set (match_operand:SI 0 "register_operand" "") ! (ior:SI (match_operand:SI 1 "register_operand" "") ! (match_operand:SI 2 "nonmemory_operand" "")))] ! "" ! "") ! ! (define_insn "" [(set (match_operand:SI 0 "register_operand" "=r,r") (ior:SI (match_operand:SI 1 "register_operand" "%0,0") (match_operand:SI 2 "nonmemory_operand" "J,rn")))] ! "TARGET_H8300" ! "* return output_logical_op (SImode, IOR, operands);" [(set_attr "length" "2,8") (set_attr "cc" "clobber,clobber")]) + (define_insn "" + [(set (match_operand:SI 0 "register_operand" "=r,r,r") + (ior:SI (match_operand:SI 1 "register_operand" "%0,0,0") + (match_operand:SI 2 "nonmemory_operand" "J,r,n")))] + "TARGET_H8300H || TARGET_H8300S" + "* return output_logical_op (SImode, IOR, operands);" + [(set_attr "length" "2,4,6") + (set_attr "cc" "clobber,set_znv,clobber")]) + ;; ---------------------------------------------------------------------- ;; XOR INSTRUCTIONS ;; ---------------------------------------------------------------------- *************** *** 1140,1158 **** (define_insn "" [(set (match_operand:QI 0 "bit_operand" "=r,U") (xor:QI (match_operand:QI 1 "bit_operand" "%0,0") ! (match_operand:QI 2 "nonmemory_operand" "rn,P")))] ! "register_operand (operands[0], QImode) || p_operand (operands[2], QImode)" ! "@ ! xor %X2,%X0 ! bnot %V2,%R0" [(set_attr "length" "2,8") (set_attr "adjust_length" "no") (set_attr "cc" "set_znv,none_0hit")]) (define_expand "xorqi3" ! [(set (match_operand:QI 0 "bit_operand" "=r,U") ! (xor:QI (match_operand:QI 1 "bit_operand" "%0,0") ! (match_operand:QI 2 "nonmemory_operand" "rn,O")))] "" " { --- 1191,1221 ---- (define_insn "" [(set (match_operand:QI 0 "bit_operand" "=r,U") (xor:QI (match_operand:QI 1 "bit_operand" "%0,0") ! (match_operand:QI 2 "nonmemory_operand" "rn,n")))] ! "register_operand (operands[0], QImode) ! || (GET_CODE (operands[2]) == CONST_INT ! && exact_log2 (INTVAL (operands[2]) & 0xff) != -1)" ! "* ! { ! switch (which_alternative) ! { ! case 0: ! return \"xor\t%X2,%X0\"; ! case 1: ! operands[2] = GEN_INT (INTVAL (operands[2]) & 0xff); ! return \"bnot\t%V2,%R0\"; ! default: ! abort (); ! } ! }" [(set_attr "length" "2,8") (set_attr "adjust_length" "no") (set_attr "cc" "set_znv,none_0hit")]) (define_expand "xorqi3" ! [(set (match_operand:QI 0 "bit_operand" "") ! (xor:QI (match_operand:QI 1 "bit_operand" "") ! (match_operand:QI 2 "nonmemory_operand" "")))] "" " { *************** *** 1160,1224 **** DONE; }") ! (define_insn "xorhi3" ! [(set (match_operand:HI 0 "register_operand" "=r,r") ! (xor:HI (match_operand:HI 1 "general_operand" "%0,0") ! (match_operand:HI 2 "nonmemory_operand" "J,rn")))] "" ! "* ! { ! if (GET_CODE (operands[2]) == CONST_INT) ! { ! int i = INTVAL (operands[2]); ! if ((i & 0x00ff) != 0) ! output_asm_insn (\"xor %s2,%s0\", operands); ! if ((i & 0xff00) != 0) ! output_asm_insn (\"xor %t2,%t0\", operands); ! return \"\"; ! } ! if (TARGET_H8300H || TARGET_H8300S) ! return \"xor.w %T2,%T0\"; ! return \"xor %s2,%s0\;xor %t2,%t0\"; ! }" [(set_attr "length" "2,4") (set_attr "cc" "clobber,clobber")]) ! (define_insn "xorsi3" [(set (match_operand:SI 0 "register_operand" "=r,r") (xor:SI (match_operand:SI 1 "register_operand" "%0,0") (match_operand:SI 2 "nonmemory_operand" "J,rn")))] ! "" ! "* ! { ! if (GET_CODE (operands[2]) == CONST_INT) ! { ! int i = INTVAL (operands[2]); ! ! /* The h8300h can't do byte-wise operations on the ! upper 16bits of 32bit registers. However, if ! those bits aren't going to change, then we can ! work on the low-order bits. */ ! if ((TARGET_H8300H || TARGET_H8300S) ! && (i & 0xffff0000) != 0x00000000) ! return \"xor.l %S2,%S0\"; ! ! if ((i & 0x000000ff) != 0) ! output_asm_insn (\"xor %w2,%w0\", operands); ! if ((i & 0x0000ff00) != 0) ! output_asm_insn (\"xor %x2,%x0\", operands); ! if ((i & 0x00ff0000) != 0) ! output_asm_insn (\"xor %y2,%y0\", operands); ! if ((i & 0xff000000) != 0) ! output_asm_insn (\"xor %z2,%z0\", operands); ! return \"\"; ! } ! if (TARGET_H8300H || TARGET_H8300S) ! return \"xor.l %S2,%S0\"; ! return \"xor %w2,%w0\;xor %x2,%x0\;xor %y2,%y0\;xor %z2,%z0\"; ! }" [(set_attr "length" "2,8") (set_attr "cc" "clobber,clobber")]) ;; ---------------------------------------------------------------------- ;; NEGATION INSTRUCTIONS --- 1223,1277 ---- DONE; }") ! (define_expand "xorhi3" ! [(set (match_operand:HI 0 "register_operand" "") ! (xor:HI (match_operand:HI 1 "register_operand" "") ! (match_operand:HI 2 "nonmemory_operand" "")))] "" ! "") ! (define_insn "" ! [(set (match_operand:HI 0 "register_operand" "=r,r") ! (xor:HI (match_operand:HI 1 "register_operand" "%0,0") ! (match_operand:HI 2 "nonmemory_operand" "J,rn")))] ! "TARGET_H8300" ! "* return output_logical_op (HImode, XOR, operands);" [(set_attr "length" "2,4") (set_attr "cc" "clobber,clobber")]) ! (define_insn "" ! [(set (match_operand:HI 0 "register_operand" "=r,r,r") ! (xor:HI (match_operand:HI 1 "register_operand" "%0,0,0") ! (match_operand:HI 2 "nonmemory_operand" "J,r,n")))] ! "TARGET_H8300H || TARGET_H8300S" ! "* return output_logical_op (HImode, XOR, operands);" ! [(set_attr "length" "2,2,4") ! (set_attr "cc" "clobber,set_znv,clobber")]) ! ! (define_expand "xorsi3" ! [(set (match_operand:SI 0 "register_operand" "") ! (xor:SI (match_operand:SI 1 "register_operand" "") ! (match_operand:SI 2 "nonmemory_operand" "")))] ! "" ! "") ! ! (define_insn "" [(set (match_operand:SI 0 "register_operand" "=r,r") (xor:SI (match_operand:SI 1 "register_operand" "%0,0") (match_operand:SI 2 "nonmemory_operand" "J,rn")))] ! "TARGET_H8300" ! "* return output_logical_op (SImode, XOR, operands);" [(set_attr "length" "2,8") (set_attr "cc" "clobber,clobber")]) + + (define_insn "" + [(set (match_operand:SI 0 "register_operand" "=r,r,r") + (xor:SI (match_operand:SI 1 "register_operand" "%0,0,0") + (match_operand:SI 2 "nonmemory_operand" "J,r,n")))] + "TARGET_H8300H || TARGET_H8300S" + "* return output_logical_op (SImode, XOR, operands);" + [(set_attr "length" "2,4,6") + (set_attr "cc" "clobber,set_znv,clobber")]) ;; ---------------------------------------------------------------------- ;; NEGATION INSTRUCTIONS *************** *** 1226,1240 **** (define_insn "negqi2" [(set (match_operand:QI 0 "register_operand" "=r") ! (neg:QI (match_operand:QI 1 "general_operand" "0")))] "" "neg %X0" [(set_attr "length" "2") (set_attr "cc" "set_zn")]) (define_expand "neghi2" ! [(set (match_operand:HI 0 "register_operand" "=r") ! (neg:HI (match_operand:HI 1 "general_operand" "0")))] "" " { --- 1279,1293 ---- (define_insn "negqi2" [(set (match_operand:QI 0 "register_operand" "=r") ! (neg:QI (match_operand:QI 1 "register_operand" "0")))] "" "neg %X0" [(set_attr "length" "2") (set_attr "cc" "set_zn")]) (define_expand "neghi2" ! [(set (match_operand:HI 0 "register_operand" "") ! (neg:HI (match_operand:HI 1 "register_operand" "")))] "" " { *************** *** 1247,1270 **** (define_expand "neghi2_h8300" [(set (match_dup 2) ! (not:HI (match_operand:HI 1 "register_operand" "r"))) (set (match_dup 2) (plus:HI (match_dup 2) (const_int 1))) ! (set (match_operand:HI 0 "register_operand" "=r") (match_dup 2))] "" ! "{ operands[2] = gen_reg_rtx (HImode); }") (define_insn "neghi2_h8300h" [(set (match_operand:HI 0 "register_operand" "=r") ! (neg:HI (match_operand:HI 1 "general_operand" "0")))] "TARGET_H8300H || TARGET_H8300S" "neg %T0" [(set_attr "length" "2") (set_attr "cc" "set_zn")]) (define_expand "negsi2" ! [(set (match_operand:SI 0 "register_operand" "=r") ! (neg:SI (match_operand:SI 1 "general_operand" "0")))] "" " { --- 1300,1323 ---- (define_expand "neghi2_h8300" [(set (match_dup 2) ! (not:HI (match_operand:HI 1 "register_operand" ""))) (set (match_dup 2) (plus:HI (match_dup 2) (const_int 1))) ! (set (match_operand:HI 0 "register_operand" "") (match_dup 2))] "" ! "operands[2] = gen_reg_rtx (HImode);") (define_insn "neghi2_h8300h" [(set (match_operand:HI 0 "register_operand" "=r") ! (neg:HI (match_operand:HI 1 "register_operand" "0")))] "TARGET_H8300H || TARGET_H8300S" "neg %T0" [(set_attr "length" "2") (set_attr "cc" "set_zn")]) (define_expand "negsi2" ! [(set (match_operand:SI 0 "register_operand" "") ! (neg:SI (match_operand:SI 1 "register_operand" "")))] "" " { *************** *** 1277,1292 **** (define_expand "negsi2_h8300" [(set (match_dup 2) ! (not:SI (match_operand:SI 1 "register_operand" "r"))) (set (match_dup 2) (plus:SI (match_dup 2) (const_int 1))) ! (set (match_operand:SI 0 "register_operand" "=r") (match_dup 2))] "" ! "{ operands[2] = gen_reg_rtx(SImode); }") (define_insn "negsi2_h8300h" [(set (match_operand:SI 0 "register_operand" "=r") ! (neg:SI (match_operand:SI 1 "general_operand" "0")))] "TARGET_H8300H || TARGET_H8300S" "neg %S0" [(set_attr "length" "2") --- 1330,1345 ---- (define_expand "negsi2_h8300" [(set (match_dup 2) ! (not:SI (match_operand:SI 1 "register_operand" ""))) (set (match_dup 2) (plus:SI (match_dup 2) (const_int 1))) ! (set (match_operand:SI 0 "register_operand" "") (match_dup 2))] "" ! "operands[2] = gen_reg_rtx (SImode);") (define_insn "negsi2_h8300h" [(set (match_operand:SI 0 "register_operand" "=r") ! (neg:SI (match_operand:SI 1 "register_operand" "0")))] "TARGET_H8300H || TARGET_H8300S" "neg %S0" [(set_attr "length" "2") *************** *** 1298,1344 **** (define_insn "one_cmplqi2" [(set (match_operand:QI 0 "register_operand" "=r") ! (not:QI (match_operand:QI 1 "general_operand" "0")))] "" "not %X0" [(set_attr "length" "2") (set_attr "cc" "set_znv")]) ! (define_insn "one_cmplhi2" [(set (match_operand:HI 0 "register_operand" "=r") ! (not:HI (match_operand:HI 1 "general_operand" "0")))] "" ! "* ! { ! if (TARGET_H8300) ! return \"not %s0\;not %t0\"; ! else ! return \"not %T0\"; ! }" [(set_attr "cc" "clobber") ! (set (attr "length") ! (if_then_else (eq (symbol_ref "TARGET_H8300H || TARGET_H8300S") ! (const_int 0)) ! (const_int 4) ! (const_int 2)))]) ! (define_insn "one_cmplsi2" [(set (match_operand:SI 0 "register_operand" "=r") ! (not:SI (match_operand:SI 1 "general_operand" "0")))] "" ! "* ! { ! if (TARGET_H8300) ! return \"not %w0\;not %x0\;not %y0\;not %z0\"; ! else ! return \"not %S0\"; ! }" [(set_attr "cc" "clobber") ! (set (attr "length") ! (if_then_else (eq (symbol_ref "TARGET_H8300H || TARGET_H8300S") ! (const_int 0)) ! (const_int 8) ! (const_int 2)))]) ;; ---------------------------------------------------------------------- ;; JUMP INSTRUCTIONS --- 1351,1405 ---- (define_insn "one_cmplqi2" [(set (match_operand:QI 0 "register_operand" "=r") ! (not:QI (match_operand:QI 1 "register_operand" "0")))] "" "not %X0" [(set_attr "length" "2") (set_attr "cc" "set_znv")]) ! (define_expand "one_cmplhi2" [(set (match_operand:HI 0 "register_operand" "=r") ! (not:HI (match_operand:HI 1 "register_operand" "0")))] "" ! "") ! ! (define_insn "" ! [(set (match_operand:HI 0 "register_operand" "=r") ! (not:HI (match_operand:HI 1 "register_operand" "0")))] ! "TARGET_H8300" ! "not %s0\;not %t0" [(set_attr "cc" "clobber") ! (set_attr "length" "4")]) ! (define_insn "" ! [(set (match_operand:HI 0 "register_operand" "=r") ! (not:HI (match_operand:HI 1 "register_operand" "0")))] ! "TARGET_H8300H || TARGET_H8300S" ! "not %T0" ! [(set_attr "cc" "set_znv") ! (set_attr "length" "2")]) ! ! (define_expand "one_cmplsi2" [(set (match_operand:SI 0 "register_operand" "=r") ! (not:SI (match_operand:SI 1 "register_operand" "0")))] "" ! "") ! ! (define_insn "" ! [(set (match_operand:SI 0 "register_operand" "=r") ! (not:SI (match_operand:SI 1 "register_operand" "0")))] ! "TARGET_H8300" ! "not %w0\;not %x0\;not %y0\;not %z0" [(set_attr "cc" "clobber") ! (set_attr "length" "8")]) ! ! (define_insn "" ! [(set (match_operand:SI 0 "register_operand" "=r") ! (not:SI (match_operand:SI 1 "register_operand" "0")))] ! "TARGET_H8300H || TARGET_H8300S" ! "not %S0" ! [(set_attr "cc" "set_znv") ! (set_attr "length" "2")]) ;; ---------------------------------------------------------------------- ;; JUMP INSTRUCTIONS *************** *** 1515,1521 **** ;; This is a define expand, because pointers may be either 16 or 32 bits. (define_expand "tablejump" ! [(parallel [(set (pc) (match_operand 0 "register_operand" "r")) (use (label_ref (match_operand 1 "" "")))])] "" "") --- 1576,1582 ---- ;; This is a define expand, because pointers may be either 16 or 32 bits. (define_expand "tablejump" ! [(parallel [(set (pc) (match_operand 0 "register_operand" "")) (use (label_ref (match_operand 1 "" "")))])] "" "") *************** *** 1559,1565 **** ;; Call subroutine with no return value. ! ;; ??? Even though we use HImode here, this works for the 300h. (define_insn "call" [(call (match_operand:QI 0 "call_insn_operand" "or") --- 1620,1626 ---- ;; Call subroutine with no return value. ! ;; ??? Even though we use HImode here, this works on the H8/300H and H8/S. (define_insn "call" [(call (match_operand:QI 0 "call_insn_operand" "or") *************** *** 1569,1588 **** { if (GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF && SYMBOL_REF_FLAG (XEXP (operands[0], 0))) ! return \"jsr\\t\@%0:8\"; else return \"jsr\\t%0\"; }" [(set_attr "cc" "clobber") (set (attr "length") ! (if_then_else (match_operand:QI 0 "small_call_insn_operand" "") ! (const_int 4) ! (const_int 8)))]) ;; Call subroutine, returning value in operand 0 ;; (which must be a hard register). ! ;; ??? Even though we use HImode here, this works on the 300h. (define_insn "call_value" [(set (match_operand 0 "" "=r") --- 1630,1649 ---- { if (GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF && SYMBOL_REF_FLAG (XEXP (operands[0], 0))) ! return \"jsr\\t@%0:8\"; else return \"jsr\\t%0\"; }" [(set_attr "cc" "clobber") (set (attr "length") ! (if_then_else (match_operand:QI 0 "small_call_insn_operand" "") ! (const_int 4) ! (const_int 8)))]) ;; Call subroutine, returning value in operand 0 ;; (which must be a hard register). ! ;; ??? Even though we use HImode here, this works on the H8/300H and H8/S. (define_insn "call_value" [(set (match_operand 0 "" "=r") *************** *** 1593,1607 **** { if (GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF && SYMBOL_REF_FLAG (XEXP (operands[1], 0))) ! return \"jsr\\t\@%1:8\"; else return \"jsr\\t%1\"; }" [(set_attr "cc" "clobber") (set (attr "length") ! (if_then_else (match_operand:QI 0 "small_call_insn_operand" "") ! (const_int 4) ! (const_int 8)))]) (define_insn "nop" [(const_int 0)] --- 1654,1668 ---- { if (GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF && SYMBOL_REF_FLAG (XEXP (operands[1], 0))) ! return \"jsr\\t@%1:8\"; else return \"jsr\\t%1\"; }" [(set_attr "cc" "clobber") (set (attr "length") ! (if_then_else (match_operand:QI 0 "small_call_insn_operand" "") ! (const_int 4) ! (const_int 8)))]) (define_insn "nop" [(const_int 0)] *************** *** 1614,1629 **** ;; EXTEND INSTRUCTIONS ;; ---------------------------------------------------------------------- ! (define_insn "zero_extendqihi2" [(set (match_operand:HI 0 "register_operand" "=r,r") (zero_extend:HI (match_operand:QI 1 "general_operand_src" "0,g>")))] ! "" "@ mov.b #0,%t0 mov.b %R1,%s0\;mov.b #0,%t0" [(set_attr "length" "2,10") (set_attr "cc" "clobber,clobber")]) ;; The compiler can synthesize a 300H variant of this which is ;; just as efficient as one that we'd create (define_insn "zero_extendqisi2" --- 1675,1706 ---- ;; EXTEND INSTRUCTIONS ;; ---------------------------------------------------------------------- ! (define_expand "zero_extendqihi2" ! [(set (match_operand:HI 0 "register_operand" "") ! (zero_extend:HI (match_operand:QI 1 "general_operand_src" "")))] ! "" ! "") ! ! (define_insn "" [(set (match_operand:HI 0 "register_operand" "=r,r") (zero_extend:HI (match_operand:QI 1 "general_operand_src" "0,g>")))] ! "TARGET_H8300" "@ mov.b #0,%t0 mov.b %R1,%s0\;mov.b #0,%t0" [(set_attr "length" "2,10") (set_attr "cc" "clobber,clobber")]) + (define_insn "" + [(set (match_operand:HI 0 "register_operand" "=r,r") + (zero_extend:HI (match_operand:QI 1 "general_operand_src" "0,g>")))] + "TARGET_H8300H || TARGET_H8300S" + "@ + extu.w %T0 + mov.b %R1,%s0\;extu.w %T0" + [(set_attr "length" "2,10") + (set_attr "cc" "set_znv,set_znv")]) + ;; The compiler can synthesize a 300H variant of this which is ;; just as efficient as one that we'd create (define_insn "zero_extendqisi2" *************** *** 1675,1681 **** "@ bld #7,%s0\;subx %t0,%t0 mov.b %R1,%s0\;bld #7,%s0\;subx %t0,%t0" ! [(set_attr "length" "4,6") (set_attr "cc" "clobber,clobber")]) (define_insn "" --- 1752,1758 ---- "@ bld #7,%s0\;subx %t0,%t0 mov.b %R1,%s0\;bld #7,%s0\;subx %t0,%t0" ! [(set_attr "length" "4,8") (set_attr "cc" "clobber,clobber")]) (define_insn "" *************** *** 1748,1768 **** (ashift:QI (match_operand:QI 1 "register_operand" "") (match_operand:QI 2 "nonmemory_operand" "")))] "" ! "if (expand_a_shift (QImode, ASHIFT, operands)) DONE;else FAIL;") (define_expand "ashrqi3" [(set (match_operand:QI 0 "register_operand" "") (ashiftrt:QI (match_operand:QI 1 "register_operand" "") (match_operand:QI 2 "nonmemory_operand" "")))] "" ! "if (expand_a_shift (QImode, ASHIFTRT, operands)) DONE;else FAIL;") (define_expand "lshrqi3" [(set (match_operand:QI 0 "register_operand" "") (lshiftrt:QI (match_operand:QI 1 "register_operand" "") (match_operand:QI 2 "nonmemory_operand" "")))] "" ! "if (expand_a_shift (QImode, LSHIFTRT, operands)) DONE;else FAIL;") (define_insn "" [(set (match_operand:QI 0 "register_operand" "=r,r") --- 1825,1845 ---- (ashift:QI (match_operand:QI 1 "register_operand" "") (match_operand:QI 2 "nonmemory_operand" "")))] "" ! "if (expand_a_shift (QImode, ASHIFT, operands)) DONE; else FAIL;") (define_expand "ashrqi3" [(set (match_operand:QI 0 "register_operand" "") (ashiftrt:QI (match_operand:QI 1 "register_operand" "") (match_operand:QI 2 "nonmemory_operand" "")))] "" ! "if (expand_a_shift (QImode, ASHIFTRT, operands)) DONE; else FAIL;") (define_expand "lshrqi3" [(set (match_operand:QI 0 "register_operand" "") (lshiftrt:QI (match_operand:QI 1 "register_operand" "") (match_operand:QI 2 "nonmemory_operand" "")))] "" ! "if (expand_a_shift (QImode, LSHIFTRT, operands)) DONE; else FAIL;") (define_insn "" [(set (match_operand:QI 0 "register_operand" "=r,r") *************** *** 1771,1777 **** (match_operand:QI 2 "nonmemory_operand" "KM,rn")])) (clobber (match_scratch:QI 4 "=X,&r"))] "" ! "* return emit_a_shift (insn, operands);" [(set_attr "length" "20") (set_attr "cc" "clobber")]) --- 1848,1854 ---- (match_operand:QI 2 "nonmemory_operand" "KM,rn")])) (clobber (match_scratch:QI 4 "=X,&r"))] "" ! "* return output_a_shift (operands);" [(set_attr "length" "20") (set_attr "cc" "clobber")]) *************** *** 1782,1802 **** (ashift:HI (match_operand:HI 1 "nonmemory_operand" "") (match_operand:QI 2 "nonmemory_operand" "")))] "" ! "if (expand_a_shift (HImode, ASHIFT, operands)) DONE;else FAIL;") (define_expand "lshrhi3" [(set (match_operand:HI 0 "register_operand" "") (lshiftrt:HI (match_operand:HI 1 "general_operand" "") (match_operand:QI 2 "nonmemory_operand" "")))] "" ! "if (expand_a_shift (HImode, LSHIFTRT, operands)) DONE;else FAIL;") (define_expand "ashrhi3" [(set (match_operand:HI 0 "register_operand" "") (ashiftrt:HI (match_operand:HI 1 "register_operand" "") (match_operand:QI 2 "nonmemory_operand" "")))] "" ! "if (expand_a_shift (HImode, ASHIFTRT, operands)) DONE;else FAIL;") (define_insn "" [(set (match_operand:HI 0 "register_operand" "=r,r") --- 1859,1879 ---- (ashift:HI (match_operand:HI 1 "nonmemory_operand" "") (match_operand:QI 2 "nonmemory_operand" "")))] "" ! "if (expand_a_shift (HImode, ASHIFT, operands)) DONE; else FAIL;") (define_expand "lshrhi3" [(set (match_operand:HI 0 "register_operand" "") (lshiftrt:HI (match_operand:HI 1 "general_operand" "") (match_operand:QI 2 "nonmemory_operand" "")))] "" ! "if (expand_a_shift (HImode, LSHIFTRT, operands)) DONE; else FAIL;") (define_expand "ashrhi3" [(set (match_operand:HI 0 "register_operand" "") (ashiftrt:HI (match_operand:HI 1 "register_operand" "") (match_operand:QI 2 "nonmemory_operand" "")))] "" ! "if (expand_a_shift (HImode, ASHIFTRT, operands)) DONE; else FAIL;") (define_insn "" [(set (match_operand:HI 0 "register_operand" "=r,r") *************** *** 1805,1811 **** (match_operand:QI 2 "nonmemory_operand" "KM,rn")])) (clobber (match_scratch:QI 4 "=X,&r"))] "" ! "* return emit_a_shift (insn, operands);" [(set_attr "length" "20") (set_attr "cc" "clobber")]) --- 1882,1888 ---- (match_operand:QI 2 "nonmemory_operand" "KM,rn")])) (clobber (match_scratch:QI 4 "=X,&r"))] "" ! "* return output_a_shift (operands);" [(set_attr "length" "20") (set_attr "cc" "clobber")]) *************** *** 1813,1839 **** (define_expand "ashlsi3" [(set (match_operand:SI 0 "register_operand" "") ! (ashift:SI ! (match_operand:SI 1 "general_operand" "") ! (match_operand:QI 2 "nonmemory_operand" "")))] "" ! "if (expand_a_shift (SImode, ASHIFT, operands)) DONE;else FAIL;") (define_expand "lshrsi3" [(set (match_operand:SI 0 "register_operand" "") ! (lshiftrt:SI ! (match_operand:SI 1 "general_operand" "") ! (match_operand:QI 2 "nonmemory_operand" "")))] "" ! "if (expand_a_shift (SImode, LSHIFTRT, operands)) DONE;else FAIL;") (define_expand "ashrsi3" [(set (match_operand:SI 0 "register_operand" "") ! (ashiftrt:SI ! (match_operand:SI 1 "general_operand" "") ! (match_operand:QI 2 "nonmemory_operand" "")))] "" ! "if (expand_a_shift (SImode, ASHIFTRT, operands)) DONE;else FAIL;") (define_insn "" [(set (match_operand:SI 0 "register_operand" "=r,r") --- 1890,1913 ---- (define_expand "ashlsi3" [(set (match_operand:SI 0 "register_operand" "") ! (ashift:SI (match_operand:SI 1 "general_operand" "") ! (match_operand:QI 2 "nonmemory_operand" "")))] "" ! "if (expand_a_shift (SImode, ASHIFT, operands)) DONE; else FAIL;") (define_expand "lshrsi3" [(set (match_operand:SI 0 "register_operand" "") ! (lshiftrt:SI (match_operand:SI 1 "general_operand" "") ! (match_operand:QI 2 "nonmemory_operand" "")))] "" ! "if (expand_a_shift (SImode, LSHIFTRT, operands)) DONE; else FAIL;") (define_expand "ashrsi3" [(set (match_operand:SI 0 "register_operand" "") ! (ashiftrt:SI (match_operand:SI 1 "general_operand" "") ! (match_operand:QI 2 "nonmemory_operand" "")))] "" ! "if (expand_a_shift (SImode, ASHIFTRT, operands)) DONE; else FAIL;") (define_insn "" [(set (match_operand:SI 0 "register_operand" "=r,r") *************** *** 1842,1848 **** (match_operand:QI 2 "nonmemory_operand" "K,rn")])) (clobber (match_scratch:QI 4 "=X,&r"))] "" ! "* return emit_a_shift (insn, operands);" [(set_attr "length" "20") (set_attr "cc" "clobber")]) --- 1916,1922 ---- (match_operand:QI 2 "nonmemory_operand" "K,rn")])) (clobber (match_scratch:QI 4 "=X,&r"))] "" ! "* return output_a_shift (operands);" [(set_attr "length" "20") (set_attr "cc" "clobber")]) *************** *** 1855,1861 **** (rotate:QI (match_operand:QI 1 "register_operand" "") (match_operand:QI 2 "nonmemory_operand" "")))] "" ! "if (expand_a_rotate (ROTATE, operands)) DONE;else FAIL;") (define_insn "*rotlqi3_1" [(set (match_operand:QI 0 "register_operand" "=r") --- 1929,1935 ---- (rotate:QI (match_operand:QI 1 "register_operand" "") (match_operand:QI 2 "nonmemory_operand" "")))] "" ! "if (expand_a_rotate (ROTATE, operands)) DONE; else FAIL;") (define_insn "*rotlqi3_1" [(set (match_operand:QI 0 "register_operand" "=r") *************** *** 1871,1877 **** (rotate:HI (match_operand:HI 1 "register_operand" "") (match_operand:QI 2 "nonmemory_operand" "")))] "" ! "if (expand_a_rotate (ROTATE, operands)) DONE;else FAIL;") (define_insn "*rotlhi3_1" [(set (match_operand:HI 0 "register_operand" "=r") --- 1945,1951 ---- (rotate:HI (match_operand:HI 1 "register_operand" "") (match_operand:QI 2 "nonmemory_operand" "")))] "" ! "if (expand_a_rotate (ROTATE, operands)) DONE; else FAIL;") (define_insn "*rotlhi3_1" [(set (match_operand:HI 0 "register_operand" "=r") *************** *** 1887,1893 **** (rotate:SI (match_operand:SI 1 "register_operand" "") (match_operand:QI 2 "nonmemory_operand" "")))] "TARGET_H8300H || TARGET_H8300S" ! "if (expand_a_rotate (ROTATE, operands)) DONE;else FAIL;") (define_insn "*rotlsi3_1" [(set (match_operand:SI 0 "register_operand" "=r") --- 1961,1967 ---- (rotate:SI (match_operand:SI 1 "register_operand" "") (match_operand:QI 2 "nonmemory_operand" "")))] "TARGET_H8300H || TARGET_H8300S" ! "if (expand_a_rotate (ROTATE, operands)) DONE; else FAIL;") (define_insn "*rotlsi3_1" [(set (match_operand:SI 0 "register_operand" "=r") *************** *** 1914,1938 **** ;; ;; Normal loads with a 16bit destination. ;; ! ;; Yes, both cases are needed. ! ;; (define_insn "" [(set (match_operand:HI 0 "register_operand" "=&r") (zero_extract:HI (match_operand:HI 1 "register_operand" "r") (const_int 1) (match_operand:HI 2 "immediate_operand" "n")))] ! "" ! "sub.w %0,%0\;bld %Z2,%Y1\;bst #0,%X0" ! [(set_attr "cc" "clobber") ! (set_attr "length" "6")]) ! ! (define_insn "" ! [(set (match_operand:HI 0 "register_operand" "=&r") ! (subreg:HI (zero_extract:SI ! (match_operand:HI 1 "register_operand" "r") ! (const_int 1) ! (match_operand:HI 2 "immediate_operand" "n")) 1))] ! "" "sub.w %0,%0\;bld %Z2,%Y1\;bst #0,%X0" [(set_attr "cc" "clobber") (set_attr "length" "6")]) --- 1988,2000 ---- ;; ;; Normal loads with a 16bit destination. ;; ! (define_insn "" [(set (match_operand:HI 0 "register_operand" "=&r") (zero_extract:HI (match_operand:HI 1 "register_operand" "r") (const_int 1) (match_operand:HI 2 "immediate_operand" "n")))] ! "TARGET_H8300" "sub.w %0,%0\;bld %Z2,%Y1\;bst #0,%X0" [(set_attr "cc" "clobber") (set_attr "length" "6")]) *************** *** 1940,1994 **** ;; ;; Inverted loads with a 16bit destination. ;; - ;; Yes, all four cases are needed. - ;; (define_insn "" [(set (match_operand:HI 0 "register_operand" "=&r") (zero_extract:HI (xor:HI (match_operand:HI 1 "register_operand" "r") ! (match_operand:HI 3 "p_operand" "P")) (const_int 1) (match_operand:HI 2 "const_int_operand" "n")))] ! "(1 << INTVAL (operands[2])) == INTVAL (operands[3])" ! "sub.w %0,%0\;bild %Z2,%Y1\;bst #0,%X0" ! [(set_attr "cc" "clobber") ! (set_attr "length" "8")]) ! ! (define_insn "" ! [(set (match_operand:HI 0 "register_operand" "=&r") ! (and:HI (not:HI ! (lshiftrt:HI ! (match_operand:HI 1 "bit_operand" "Ur") ! (match_operand:HI 2 "const_int_operand" "n"))) ! (const_int 1)))] ! "" ! "sub.w %0,%0\;bild %Z2,%Y1\;bst #0,%X0" ! [(set_attr "cc" "clobber") ! (set_attr "length" "8")]) ! ! (define_insn "" ! [(set (match_operand:HI 0 "register_operand" "=&r") ! (and:HI (not:HI ! (subreg:HI ! (lshiftrt:SI ! (match_operand:SI 1 "register_operand" "Ur") ! (match_operand:SI 2 "const_int_operand" "n")) 1)) ! (const_int 1)))] ! "INTVAL (operands[2]) < 16" ! "sub.w %0,%0\;bild %Z2,%Y1\;bst #0,%X0" ! [(set_attr "cc" "clobber") ! (set_attr "length" "8")]) ! ! (define_insn "" ! [(set (match_operand:HI 0 "register_operand" "=&r") ! (and:HI (not:HI ! (subreg:HI ! (lshiftrt:SI ! (match_operand:SI 1 "bit_operand" "Ur") ! (match_operand:SI 2 "const_int_operand" "n")) 0)) ! (const_int 1)))] ! "(TARGET_H8300H || TARGET_H8300S) ! && INTVAL (operands[2]) < 16" "sub.w %0,%0\;bild %Z2,%Y1\;bst #0,%X0" [(set_attr "cc" "clobber") (set_attr "length" "8")]) --- 2002,2016 ---- ;; ;; Inverted loads with a 16bit destination. ;; (define_insn "" [(set (match_operand:HI 0 "register_operand" "=&r") (zero_extract:HI (xor:HI (match_operand:HI 1 "register_operand" "r") ! (match_operand:HI 3 "const_int_operand" "n")) (const_int 1) (match_operand:HI 2 "const_int_operand" "n")))] ! "TARGET_H8300 ! && (1 << INTVAL (operands[2])) == INTVAL (operands[3])" "sub.w %0,%0\;bild %Z2,%Y1\;bst #0,%X0" [(set_attr "cc" "clobber") (set_attr "length" "8")]) *************** *** 1996,2156 **** ;; ;; Normal loads with a 32bit destination. ;; ! ;; Yes, all three cases are needed. ! ;; (define_insn "" [(set (match_operand:SI 0 "register_operand" "=&r") (zero_extract:SI (match_operand:HI 1 "register_operand" "r") (const_int 1) ! (match_operand:HI 2 "const_int_operand" "n")))] ! "" ! "* return output_simode_bld (0, 0, operands);" ! [(set_attr "cc" "clobber") ! (set (attr "length") ! (if_then_else (eq (symbol_ref "TARGET_H8300H || TARGET_H8300S") ! (const_int 0)) ! (const_int 10) ! (const_int 8)))]) ! ! (define_insn "" ! [(set (match_operand:SI 0 "register_operand" "=&r") ! (and:SI (zero_extend:SI ! (lshiftrt:QI ! (match_operand:QI 1 "bit_operand" "Ur") ! (match_operand:QI 2 "const_int_operand" "n"))) ! (const_int 1)))] ! "" ! "* return output_simode_bld (0, 0, operands);" [(set_attr "cc" "clobber") ! (set (attr "length") ! (if_then_else (eq (symbol_ref "TARGET_H8300H || TARGET_H8300S") ! (const_int 0)) ! (const_int 10) ! (const_int 8)))]) (define_insn "" ! [(set (match_operand:SI 0 "register_operand" "=&r") ! (and:SI (zero_extend:SI ! (lshiftrt:HI ! (match_operand:HI 1 "bit_operand" "Ur") ! (match_operand:HI 2 "const_int_operand" "n"))) ! (const_int 1)))] ! "" ! "* return output_simode_bld (0, 0, operands);" [(set_attr "cc" "clobber") ! (set (attr "length") ! (if_then_else (eq (symbol_ref "TARGET_H8300H || TARGET_H8300S") ! (const_int 0)) ! (const_int 10) ! (const_int 8)))]) ;; ;; Inverted loads with a 32bit destination. ;; - ;; Yes, all seven cases are needed. - ;; - (define_insn "" - [(set (match_operand:SI 0 "register_operand" "=&r") - (and:SI (not:SI - (zero_extend:SI (match_operand:HI 1 "register_operand" "r"))) - (match_operand:SI 2 "p_operand" "P")))] - "" - "* return output_simode_bld (1, 1, operands);" - [(set_attr "cc" "clobber") - (set (attr "length") - (if_then_else (eq (symbol_ref "TARGET_H8300H || TARGET_H8300S") - (const_int 0)) - (const_int 10) - (const_int 8)))]) - (define_insn "" - [(set (match_operand:SI 0 "register_operand" "=&r") - (and:SI (not:SI - (zero_extend:SI - (lshiftrt:HI (match_operand:HI 1 "bit_operand" "Ur") - (match_operand:HI 2 "const_int_operand" "n")))) - (const_int 1)))] - "" - "* return output_simode_bld (1, 0, operands);" - [(set_attr "cc" "clobber") - (set (attr "length") - (if_then_else (eq (symbol_ref "TARGET_H8300H || TARGET_H8300S") - (const_int 0)) - (const_int 10) - (const_int 8)))]) - - (define_insn "" - [(set (match_operand:SI 0 "register_operand" "=&r") - (and:SI (not:SI - (zero_extend:SI (match_operand:QI 1 "register_operand" "r"))) - (match_operand:SI 2 "p_operand" "P")))] - "" - "* return output_simode_bld (1, 1, operands);" - [(set_attr "cc" "clobber") - (set (attr "length") - (if_then_else (eq (symbol_ref "TARGET_H8300H || TARGET_H8300S") - (const_int 0)) - (const_int 10) - (const_int 8)))]) - (define_insn "" - [(set (match_operand:SI 0 "register_operand" "=&r") - (and:SI (not:SI - (zero_extend:SI - (lshiftrt:QI (match_operand:QI 1 "bit_operand" "Ur") - (match_operand:QI 2 "const_int_operand" "n")))) - (const_int 1)))] - "" - "* return output_simode_bld (1, 0, operands);" - [(set_attr "cc" "clobber") - (set (attr "length") - (if_then_else (eq (symbol_ref "TARGET_H8300H || TARGET_H8300S") - (const_int 0)) - (const_int 10) - (const_int 8)))]) - - (define_insn "" - [(set (match_operand:SI 0 "register_operand" "=&r") - (and:SI (not:SI - (subreg:SI - (lshiftrt:HI - (match_operand:HI 1 "bit_operand" "Ur") - (match_operand:HI 2 "const_int_operand" "n")) 0)) - (const_int 1)))] - "1" - "* return output_simode_bld (1, 0, operands);" - [(set_attr "cc" "clobber") - (set (attr "length") - (if_then_else (eq (symbol_ref "TARGET_H8300H || TARGET_H8300S") - (const_int 0)) - (const_int 10) - (const_int 8)))]) (define_insn "" [(set (match_operand:SI 0 "register_operand" "=&r") ! (and:SI (not:SI ! (subreg:SI ! (lshiftrt:QI ! (match_operand:QI 1 "bit_operand" "Ur") ! (match_operand:QI 2 "const_int_operand" "n")) 0)) ! (const_int 1)))] ! "1" ! "* return output_simode_bld (1, 0, operands);" [(set_attr "cc" "clobber") ! (set (attr "length") ! (if_then_else (eq (symbol_ref "TARGET_H8300H || TARGET_H8300S") ! (const_int 0)) ! (const_int 10) ! (const_int 8)))]) (define_insn "" ! [(set (match_operand:SI 0 "register_operand" "=&r") ! (zero_extract:SI (xor:HI (match_operand:HI 1 "register_operand" "r") ! (match_operand:HI 3 "p_operand" "P")) (const_int 1) ! (match_operand:HI 2 "const_int_operand" "n")))] ! "(1 << INTVAL (operands[2])) == INTVAL (operands[3])" ! "sub.w %0,%0\;bild %Z2,%Y1\;bst #0,%X0" [(set_attr "cc" "clobber") ! (set_attr "length" "8")]) (define_expand "insv" [(set (zero_extract:HI (match_operand:HI 0 "general_operand" "") --- 2018,2075 ---- ;; ;; Normal loads with a 32bit destination. ;; ! (define_insn "" [(set (match_operand:SI 0 "register_operand" "=&r") (zero_extract:SI (match_operand:HI 1 "register_operand" "r") (const_int 1) ! (match_operand 2 "const_int_operand" "n")))] ! "TARGET_H8300 ! && INTVAL (operands[2]) < 16" ! "* return output_simode_bld (0, operands);" [(set_attr "cc" "clobber") ! (set_attr "length" "6")]) (define_insn "" ! [(set (match_operand:SI 0 "register_operand" "=r") ! (zero_extract:SI (match_operand:SI 1 "register_operand" "r") ! (const_int 1) ! (match_operand 2 "const_int_operand" "n")))] ! "(TARGET_H8300H || TARGET_H8300S) ! && INTVAL (operands[2]) < 16" ! "* return output_simode_bld (0, operands);" [(set_attr "cc" "clobber") ! (set_attr "length" "6")]) ;; ;; Inverted loads with a 32bit destination. ;; (define_insn "" [(set (match_operand:SI 0 "register_operand" "=&r") ! (zero_extract:SI (xor:HI (match_operand:HI 1 "register_operand" "r") ! (match_operand:HI 3 "const_int_operand" "n")) ! (const_int 1) ! (match_operand 2 "const_int_operand" "n")))] ! "TARGET_H8300 ! && INTVAL (operands[2]) < 16 ! && (1 << INTVAL (operands[2])) == INTVAL (operands[3])" ! "* return output_simode_bld (1, operands);" [(set_attr "cc" "clobber") ! (set_attr "length" "6")]) (define_insn "" ! [(set (match_operand:SI 0 "register_operand" "=r") ! (zero_extract:SI (xor:SI (match_operand:SI 1 "register_operand" "r") ! (match_operand 3 "const_int_operand" "n")) (const_int 1) ! (match_operand 2 "const_int_operand" "n")))] ! "(TARGET_H8300H || TARGET_H8300S) ! && INTVAL (operands[2]) < 16 ! && (1 << INTVAL (operands[2])) == INTVAL (operands[3])" ! "* return output_simode_bld (1, operands);" [(set_attr "cc" "clobber") ! (set_attr "length" "6")]) (define_expand "insv" [(set (zero_extract:HI (match_operand:HI 0 "general_operand" "") *************** *** 2226,2228 **** --- 2145,2244 ---- [(set_attr "cc" "clobber") (set_attr "length" "6") (set_attr "adjust_length" "no")]) + + ;; ----------------------------------------------------------------- + ;; COMBINE PATTERNS + ;; ----------------------------------------------------------------- + + (define_insn "" + [(set (match_operand:HI 0 "register_operand" "=r") + (ior:HI (zero_extend:HI (match_operand:QI 1 "register_operand" "r")) + (match_operand:HI 2 "register_operand" "0")))] + "REG_P (operands[0]) + && REG_P (operands[1]) + && REGNO (operands[0]) != REGNO (operands[1])" + "or\\t%X1,%s0" + [(set_attr "cc" "clobber") + (set_attr "length" "2")]) + + (define_insn "" + [(set (match_operand:SI 0 "register_operand" "=r") + (ior:SI (zero_extend:SI (match_operand:HI 1 "register_operand" "r")) + (match_operand:SI 2 "register_operand" "0")))] + "(TARGET_H8300H || TARGET_H8300S) + && REG_P (operands[0]) + && REG_P (operands[1]) + && (REGNO (operands[0]) != REGNO (operands[1]))" + "or.w\\t%T1,%f0" + [(set_attr "cc" "clobber") + (set_attr "length" "2")]) + + (define_insn "" + [(set (match_operand:SI 0 "register_operand" "=r") + (ior:SI (zero_extend:SI (match_operand:QI 1 "register_operand" "r")) + (match_operand:SI 2 "register_operand" "0")))] + "REG_P (operands[0]) + && REG_P (operands[1]) + && REGNO (operands[0]) != REGNO (operands[1])" + "or\\t%X1,%s0" + [(set_attr "cc" "clobber") + (set_attr "length" "2")]) + + (define_insn "" + [(set (match_operand:HI 0 "register_operand" "=r") + (xor:HI (zero_extend:HI (match_operand:QI 1 "register_operand" "r")) + (match_operand:HI 2 "register_operand" "0")))] + "REG_P (operands[0]) + && REG_P (operands[1]) + && REGNO (operands[0]) != REGNO (operands[1])" + "xor\\t%X1,%s0" + [(set_attr "cc" "clobber") + (set_attr "length" "2")]) + + (define_insn "" + [(set (match_operand:SI 0 "register_operand" "=r") + (xor:SI (zero_extend:SI (match_operand:HI 1 "register_operand" "r")) + (match_operand:SI 2 "register_operand" "0")))] + "(TARGET_H8300H || TARGET_H8300S) + && REG_P (operands[0]) + && REG_P (operands[1]) + && (REGNO (operands[0]) != REGNO (operands[1]))" + "xor.w\\t%T1,%f0" + [(set_attr "cc" "clobber") + (set_attr "length" "2")]) + + (define_insn "" + [(set (match_operand:SI 0 "register_operand" "=r") + (xor:SI (zero_extend:SI (match_operand:QI 1 "register_operand" "r")) + (match_operand:SI 2 "register_operand" "0")))] + "REG_P (operands[0]) + && REG_P (operands[1]) + && REGNO (operands[0]) != REGNO (operands[1])" + "xor\\t%X1,%s0" + [(set_attr "cc" "clobber") + (set_attr "length" "2")]) + + (define_insn "" + [(set (match_operand:HI 0 "register_operand" "=r") + (ior:HI (zero_extend:HI (match_operand:QI 1 "register_operand" "0")) + (ashift:HI (match_operand:HI 2 "register_operand" "r") + (const_int 8))))] + "REG_P (operands[0]) + && REG_P (operands[2]) + && REGNO (operands[0]) != REGNO (operands[2])" + "mov.b\\t%s2,%t0" + [(set_attr "cc" "clobber") + (set_attr "length" "2")]) + + (define_insn "" + [(set (match_operand:SI 0 "register_operand" "=r") + (ior:SI (zero_extend:SI (match_operand:HI 1 "register_operand" "0")) + (ashift:SI (match_operand:SI 2 "register_operand" "r") + (const_int 16))))] + "(TARGET_H8300H || TARGET_H8300S) + && REG_P (operands[0]) + && REG_P (operands[2]) + && (REGNO (operands[0]) != REGNO (operands[2]))" + "mov.w\\t%f2,%e0" + [(set_attr "cc" "clobber") + (set_attr "length" "2")]) diff -Nrc3pad gcc-3.0.4/gcc/config/h8300/lib1funcs.asm gcc-3.1/gcc/config/h8300/lib1funcs.asm *** gcc-3.0.4/gcc/config/h8300/lib1funcs.asm Fri Aug 31 01:13:48 2001 --- gcc-3.1/gcc/config/h8300/lib1funcs.asm Thu Jan 10 21:30:32 2002 *************** *** 1,4 **** ! ;; libgcc1 routines for the Hitachi H8/300 CPU. ;; Contributed by Steve Chamberlain /* Copyright (C) 1994, 2000, 2001 Free Software Foundation, Inc. --- 1,4 ---- ! ;; libgcc routines for the Hitachi H8/300 CPU. ;; Contributed by Steve Chamberlain /* Copyright (C) 1994, 2000, 2001 Free Software Foundation, Inc. *************** _done: *** 767,773 **** #ifdef L_fixunssfsi_asm /* For the h8300 we use asm to save some bytes, to allow more programs to fit into the tiny address ! space. For h8300h / h8s, the C version is good enough. */ #ifdef __H8300__ /* We still treat NANs different than libgcc2.c, but then, the behaviour is undefined anyways. */ --- 767,773 ---- #ifdef L_fixunssfsi_asm /* For the h8300 we use asm to save some bytes, to allow more programs to fit into the tiny address ! space. For the H8/300H and H8S, the C version is good enough. */ #ifdef __H8300__ /* We still treat NANs different than libgcc2.c, but then, the behaviour is undefined anyways. */ diff -Nrc3pad gcc-3.0.4/gcc/config/h8300/rtems.h gcc-3.1/gcc/config/h8300/rtems.h *** gcc-3.0.4/gcc/config/h8300/rtems.h Fri Feb 15 14:42:57 2002 --- gcc-3.1/gcc/config/h8300/rtems.h Fri Apr 12 13:09:27 2002 *************** along with GNU CC; see the file COPYING. *** 19,37 **** the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - #include "h8300/h8300.h" - - /* Specify predefined symbols in preprocessor. */ - #undef CPP_PREDEFINES #define CPP_PREDEFINES "-Dh8300 \ -D__LONG_MAX__=2147483647L -D__LONG_LONG_MAX__=2147483647L \ ! -D__rtems__ -Asystem(rtems) -Acpu(h8300) -Amachine(h8300)" ! ! /* Generate calls to memcpy, memcmp and memset. */ ! #ifndef TARGET_MEM_FUNCTIONS ! #define TARGET_MEM_FUNCTIONS ! #endif ! ! /* Get machine-independent configuration parameters for RTEMS. */ ! #include --- 19,25 ---- the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #undef CPP_PREDEFINES #define CPP_PREDEFINES "-Dh8300 \ -D__LONG_MAX__=2147483647L -D__LONG_LONG_MAX__=2147483647L \ ! -D__rtems__ -Asystem=rtems" diff -Nrc3pad gcc-3.0.4/gcc/config/h8300/t-elf gcc-3.1/gcc/config/h8300/t-elf *** gcc-3.0.4/gcc/config/h8300/t-elf Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/h8300/t-elf Thu Aug 30 18:20:33 2001 *************** *** 0 **** --- 1,6 ---- + EXTRA_MULTILIB_PARTS= crti.o crtn.o crtbegin.o crtend.o + + $(T)crti.o: $(srcdir)/config/h8300/crti.asm $(GCC_PASSES) + $(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -o $(T)crti.o -x assembler-with-cpp $(srcdir)/config/h8300/crti.asm + $(T)crtn.o: $(srcdir)/config/h8300/crtn.asm $(GCC_PASSES) + $(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -o $(T)crtn.o -x assembler-with-cpp $(srcdir)/config/h8300/crtn.asm diff -Nrc3pad gcc-3.0.4/gcc/config/h8300/t-h8300 gcc-3.1/gcc/config/h8300/t-h8300 *** gcc-3.0.4/gcc/config/h8300/t-h8300 Fri Aug 31 01:12:21 2001 --- gcc-3.1/gcc/config/h8300/t-h8300 Thu Aug 30 17:51:04 2001 *************** *** 1,7 **** # The three first floating point functions listed in LIB1ASMFUNCS (_fixsfdi, # _floatdisf, and _fixunssfdi) are used to disable the inclusion of those # from libgcc2.c. They do not actually exist in lib1funcs.asm. - CROSS_LIBGCC1 = libgcc1-asm.a LIB1ASMSRC = h8300/lib1funcs.asm LIB1ASMFUNCS = _cmpsi2 _ucmpsi2 _divhi3 _divsi3 _mulhi3 _mulsi3 \ _floatdisf _fixsfdi _fixunssfdi _fixunssfsi_asm --- 1,6 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/h8300/xm-h8300.h gcc-3.1/gcc/config/h8300/xm-h8300.h *** gcc-3.0.4/gcc/config/h8300/xm-h8300.h Thu Mar 15 19:02:03 2001 --- gcc-3.1/gcc/config/h8300/xm-h8300.h Thu Jan 1 00:00:00 1970 *************** *** 1,41 **** - /* Configuration for GNU C-compiler for H8/300. - Copyright (C) 1993 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 describes the machine the compiler is hosted on. */ - #define HOST_BITS_PER_CHAR 8 - #define HOST_BITS_PER_SHORT 16 - #define HOST_BITS_PER_INT 16 - #define HOST_BITS_PER_LONG 32 - #define HOST_BITS_PER_LONGLONG 64 - - /* Arguments to use with `exit'. */ - #define SUCCESS_EXIT_CODE 0 - #define FATAL_EXIT_CODE 33 - - /* If compiled with GNU C, use the built-in alloca */ - #ifdef __GNUC__ - #define alloca __builtin_alloca - #else - #define USE_C_ALLOCA - #endif - - /* target machine dependencies. - tm.h is a symbolic link to the actual target specific file. */ - #include "tm.h" --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i370/i370-c.c gcc-3.1/gcc/config/i370/i370-c.c *** gcc-3.0.4/gcc/config/i370/i370-c.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/i370/i370-c.c Wed Oct 17 20:39:12 2001 *************** *** 0 **** --- 1,63 ---- + /* Subroutines for the C front end for System/370. + Copyright (C) 1989, 1993, 1995, 1997, 1998, 1999, 2000 + Free Software Foundation, Inc. + Contributed by Jan Stein (jan@cd.chalmers.se). + Modified for OS/390 LanguageEnvironment C by Dave Pitts (dpitts@cozx.com) + Hacked for Linux-ELF/390 by Linas Vepstas (linas@linas.org) + + 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 "config.h" + #include "system.h" + #include "tree.h" + #include "toplev.h" + #include "cpplib.h" + #include "c-pragma.h" + #include "c-lex.h" + #include "i370-protos.h" + + #ifdef TARGET_HLASM + + /* #pragma map (name, alias) - + In this implementation both name and alias are required to be + identifiers. The older code seemed to be more permissive. Can + anyone clarify? */ + + void + i370_pr_map (pfile) + cpp_reader *pfile ATTRIBUTE_UNUSED; + { + tree name, alias, x; + + if (c_lex (&x) == CPP_OPEN_PAREN + && c_lex (&name) == CPP_NAME + && c_lex (&x) == CPP_COMMA + && c_lex (&alias) == CPP_NAME + && c_lex (&x) == CPP_CLOSE_PAREN) + { + if (c_lex (&x) != CPP_EOF) + warning ("junk at end of #pragma map"); + + mvs_add_alias (IDENTIFIER_POINTER (name), IDENTIFIER_POINTER (alias), 1); + return; + } + + warning ("malformed #pragma map, ignored"); + } + + #endif diff -Nrc3pad gcc-3.0.4/gcc/config/i370/i370-protos.h gcc-3.1/gcc/config/i370/i370-protos.h *** gcc-3.0.4/gcc/config/i370/i370-protos.h Thu Sep 7 22:24:33 2000 --- gcc-3.1/gcc/config/i370/i370-protos.h Fri Jul 6 18:40:10 2001 *************** extern void mvs_add_alias PARAMS ((const *** 46,57 **** extern int mvs_need_alias PARAMS ((const char *)); extern int mvs_get_alias PARAMS ((const char *, char *)); extern int mvs_check_alias PARAMS ((const char *, char *)); - extern void i370_function_prolog PARAMS ((FILE *, int)); extern void check_label_emit PARAMS ((void)); extern void mvs_free_label_list PARAMS ((void)); ! #ifdef _C_PRAGMA_H extern void i370_pr_map PARAMS ((cpp_reader *)); #endif ! #endif --- 46,56 ---- extern int mvs_need_alias PARAMS ((const char *)); extern int mvs_get_alias PARAMS ((const char *, char *)); extern int mvs_check_alias PARAMS ((const char *, char *)); extern void check_label_emit PARAMS ((void)); extern void mvs_free_label_list PARAMS ((void)); ! #ifdef GCC_C_PRAGMA_H extern void i370_pr_map PARAMS ((cpp_reader *)); #endif ! #endif /* ! GCC_I370_PROTOS_H */ diff -Nrc3pad gcc-3.0.4/gcc/config/i370/i370.c gcc-3.1/gcc/config/i370/i370.c *** gcc-3.0.4/gcc/config/i370/i370.c Sat May 12 20:32:43 2001 --- gcc-3.1/gcc/config/i370/i370.c Sun Jan 20 23:48:10 2002 *************** *** 1,5 **** /* Subroutines for insn-output.c for System/370. ! Copyright (C) 1989, 1993, 1995, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. Contributed by Jan Stein (jan@cd.chalmers.se). Modified for OS/390 LanguageEnvironment C by Dave Pitts (dpitts@cozx.com) --- 1,5 ---- /* Subroutines for insn-output.c for System/370. ! Copyright (C) 1989, 1993, 1995, 1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc. Contributed by Jan Stein (jan@cd.chalmers.se). Modified for OS/390 LanguageEnvironment C by Dave Pitts (dpitts@cozx.com) *************** Boston, MA 02111-1307, USA. */ *** 34,46 **** #include "output.h" #include "insn-attr.h" #include "function.h" #include "flags.h" #include "recog.h" #include "toplev.h" #include "cpplib.h" - #include "c-pragma.h" - #include "c-lex.h" #include "tm_p.h" extern FILE *asm_out_file; --- 34,47 ---- #include "output.h" #include "insn-attr.h" #include "function.h" + #include "expr.h" #include "flags.h" #include "recog.h" #include "toplev.h" #include "cpplib.h" #include "tm_p.h" + #include "target.h" + #include "target-def.h" extern FILE *asm_out_file; *************** extern FILE *asm_out_file; *** 51,57 **** The first_ref_page is the page on which the true first ref appears. The label_addr is an estimate of its location in the current routine, The label_first & last_ref are estimates of where the earliest and ! latest references to this label occur. */ typedef struct label_node { --- 52,58 ---- The first_ref_page is the page on which the true first ref appears. The label_addr is an estimate of its location in the current routine, The label_first & last_ref are estimates of where the earliest and ! latest references to this label occur. */ typedef struct label_node { *************** static FILE *assembler_source = 0; *** 98,103 **** --- 99,112 ---- static label_node_t * mvs_get_label PARAMS ((int)); static void i370_label_scan PARAMS ((void)); + #ifdef TARGET_HLASM + static bool i370_hlasm_assemble_integer PARAMS ((rtx, unsigned int, int)); + #endif + static void i370_output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT)); + static void i370_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT)); + #ifdef LONGEXTERNAL + static int mvs_hash_alias PARAMS ((const char *)); + #endif /* ===================================================== */ /* defines and functions specific to the HLASM assembler */ *************** alias_node_t; *** 132,140 **** /* Alias node list anchor. */ static alias_node_t *alias_anchor = 0; - /* Alias number */ - static int alias_number = 0; - /* Define the length of the internal MVS function table. */ #define MVS_FUNCTION_TABLE_LENGTH 32 --- 141,146 ---- *************** static const unsigned char ebcasc[256] = *** 283,289 **** --- 289,314 ---- /*F8 8 9 */ 0x38, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF }; + + /* Initialize the GCC target structure. */ + #ifdef TARGET_HLASM + #undef TARGET_ASM_BYTE_OP + #define TARGET_ASM_BYTE_OP NULL + #undef TARGET_ASM_ALIGNED_HI_OP + #define TARGET_ASM_ALIGNED_HI_OP NULL + #undef TARGET_ASM_ALIGNED_SI_OP + #define TARGET_ASM_ALIGNED_SI_OP NULL + #undef TARGET_ASM_INTEGER + #define TARGET_ASM_INTEGER i370_hlasm_assemble_integer + #endif + #undef TARGET_ASM_FUNCTION_PROLOGUE + #define TARGET_ASM_FUNCTION_PROLOGUE i370_output_function_prologue + #undef TARGET_ASM_FUNCTION_EPILOGUE + #define TARGET_ASM_FUNCTION_EPILOGUE i370_output_function_epilogue + + struct gcc_target targetm = TARGET_INITIALIZER; + /* Map characters from one character set to another. C is the character to be translated. */ *************** i370_short_branch (insn) *** 400,406 **** if (addr > lp -> label_last_ref) lp->label_last_ref = addr; \ } ! void i370_label_scan () { rtx insn; --- 425,431 ---- if (addr > lp -> label_last_ref) lp->label_last_ref = addr; \ } ! static void i370_label_scan () { rtx insn; *************** i370_label_scan () *** 417,423 **** here += tablejump_offset; INSN_ADDRESSES (INSN_UID (insn)) = here; ! /* check to see if this insn is a label ... */ if (CODE_LABEL == code) { int labelno = CODE_LABEL_NUMBER (insn); --- 442,448 ---- here += tablejump_offset; INSN_ADDRESSES (INSN_UID (insn)) = here; ! /* check to see if this insn is a label ... */ if (CODE_LABEL == code) { int labelno = CODE_LABEL_NUMBER (insn); *************** i370_label_scan () *** 444,450 **** /* If there is no label for this jump, then this had better be a ADDR_VEC or an ADDR_DIFF_VEC ! and there had better be a vector of labels. */ if (!label) { int j; --- 469,475 ---- /* If there is no label for this jump, then this had better be a ADDR_VEC or an ADDR_DIFF_VEC ! and there had better be a vector of labels. */ if (!label) { int j; *************** i370_label_scan () *** 493,499 **** else { /* XXX hack alert. ! Compiling the execption handling (L_eh) in libgcc2.a will trip up right here, with something that looks like (set (pc) (mem:SI (plus:SI (reg/v:SI 1 r1) (const_int 4)))) {indirect_jump} --- 518,524 ---- else { /* XXX hack alert. ! Compiling the exception handling (L_eh) in libgcc2.a will trip up right here, with something that looks like (set (pc) (mem:SI (plus:SI (reg/v:SI 1 r1) (const_int 4)))) {indirect_jump} *************** check_label_emit () *** 579,591 **** allocated from memory. ID is the label number of the label being added to the list. */ ! label_node_t * mvs_get_label (id) int id; { label_node_t *lp; ! /* first, lets see if we already go one, if so, use that. */ for (lp = label_anchor; lp; lp = lp->label_next) { if (lp->label_id == id) return lp; --- 604,616 ---- allocated from memory. ID is the label number of the label being added to the list. */ ! static label_node_t * mvs_get_label (id) int id; { label_node_t *lp; ! /* first, lets see if we already go one, if so, use that. */ for (lp = label_anchor; lp; lp = lp->label_next) { if (lp->label_id == id) return lp; *************** mvs_add_label (id) *** 630,636 **** if ((-1 != lp->first_ref_page) && (lp->first_ref_page != mvs_page_num)) { ! /* Yep; the first label_ref was on a different page. */ mvs_need_base_reload ++; return; } --- 655,661 ---- if ((-1 != lp->first_ref_page) && (lp->first_ref_page != mvs_page_num)) { ! /* Yep; the first label_ref was on a different page. */ mvs_need_base_reload ++; return; } *************** mvs_check_label (id) *** 691,696 **** --- 716,722 ---- /* Get the page on which the label sits. This will be used to determine is a register reload is really needed. */ + #if 0 int mvs_get_label_page(int id) { *************** mvs_get_label_page(int id) *** 703,708 **** --- 729,735 ---- } return -1; } + #endif /* The label list for the current page freed by linking the list onto the free label element chain. */ *************** mvs_check_page (file, code, lit) *** 749,755 **** fprintf (assembler_source, "\tDROP\t%d\n", BASE_REGISTER); mvs_page_num++; /* Safe to use BASR not BALR, since we are ! * not switching addressing mode here ... */ fprintf (assembler_source, "\tBASR\t%d,0\n", BASE_REGISTER); fprintf (assembler_source, "PG%d\tEQU\t*\n", mvs_page_num); fprintf (assembler_source, "\tUSING\t*,%d\n", BASE_REGISTER); --- 776,782 ---- fprintf (assembler_source, "\tDROP\t%d\n", BASE_REGISTER); mvs_page_num++; /* Safe to use BASR not BALR, since we are ! * not switching addressing mode here ... */ fprintf (assembler_source, "\tBASR\t%d,0\n", BASE_REGISTER); fprintf (assembler_source, "PG%d\tEQU\t*\n", mvs_page_num); fprintf (assembler_source, "\tUSING\t*,%d\n", BASE_REGISTER); *************** mvs_check_page (file, code, lit) *** 785,791 **** fprintf (assembler_source, "\t.LTORG\n"); fprintf (assembler_source, "\t.balign\t4\n"); ! /* we continue execution here ... */ fprintf (assembler_source, ".LPGE%d:\n", mvs_page_num); fprintf (assembler_source, "\t.DROP\t%d\n", BASE_REGISTER); mvs_page_num++; --- 812,818 ---- fprintf (assembler_source, "\t.LTORG\n"); fprintf (assembler_source, "\t.balign\t4\n"); ! /* we continue execution here ... */ fprintf (assembler_source, ".LPGE%d:\n", mvs_page_num); fprintf (assembler_source, "\t.DROP\t%d\n", BASE_REGISTER); mvs_page_num++; *************** mvs_function_check (name) *** 836,846 **** return 0; } ! /* Generate a hash for a given key. */ static int mvs_hash_alias (key) ! char *key; { int h; int i; --- 863,874 ---- return 0; } ! /* Generate a hash for a given key. */ + #ifdef LONGEXTERNAL static int mvs_hash_alias (key) ! const char *key; { int h; int i; *************** mvs_hash_alias (key) *** 851,857 **** h = ((h * MVS_SET_SIZE) + key[i]) % MVS_HASH_PRIME; return (h); } ! /* Add the alias to the current alias list. */ --- 879,885 ---- h = ((h * MVS_SET_SIZE) + key[i]) % MVS_HASH_PRIME; return (h); } ! #endif /* Add the alias to the current alias list. */ *************** mvs_check_alias (realname, aliasname) *** 1018,1050 **** return 0; } - /* #pragma map (name, alias) - - In this implementation both name and alias are required to be - identifiers. The older code seemed to be more permissive. Can - anyone clarify? */ - - void - i370_pr_map (pfile) - cpp_reader *pfile ATTRIBUTE_UNUSED; - { - tree name, alias, x; - - if (c_lex (&x) == CPP_OPEN_PAREN - && c_lex (&name) == CPP_NAME - && c_lex (&x) == CPP_COMMA - && c_lex (&alias) == CPP_NAME - && c_lex (&x) == CPP_CLOSE_PAREN) - { - if (c_lex (&x) != CPP_EOF) - warning ("junk at end of #pragma map"); - - mvs_add_alias (IDENTIFIER_POINTER (name), IDENTIFIER_POINTER (alias), 1); - return; - } - - warning ("malformed #pragma map, ignored"); - } - /* defines and functions specific to the HLASM assembler */ #endif /* TARGET_HLASM */ /* ===================================================== */ --- 1046,1051 ---- *************** unsigned_jump_follows_p (insn) *** 1189,1201 **** } } - #ifdef TARGET_HLASM ! void ! i370_function_prolog (f, l) FILE *f; ! int l; { #if MACROPROLOGUE == 1 fprintf (f, "* Function %s prologue\n", mvs_function_name); --- 1190,1256 ---- } } #ifdef TARGET_HLASM ! /* Target hook for assembling integer objects. This version handles all ! objects when TARGET_HLASM is defined. */ ! ! static bool ! i370_hlasm_assemble_integer (x, size, aligned_p) ! rtx x; ! unsigned int size; ! int aligned_p; ! { ! const char *int_format = NULL; ! ! if (aligned_p) ! switch (size) ! { ! case 1: ! int_format = "\tDC\tX'%02X'\n"; ! break; ! ! case 2: ! int_format = "\tDC\tX'%04X'\n"; ! break; ! ! case 4: ! if (GET_CODE (x) == CONST_INT) ! { ! fputs ("\tDC\tF'", asm_out_file); ! output_addr_const (asm_out_file, x); ! fputs ("'\n", asm_out_file); ! } ! else ! { ! fputs ("\tDC\tA(", asm_out_file); ! output_addr_const (asm_out_file, x); ! fputs (")\n", asm_out_file); ! } ! return true; ! } ! ! if (int_format && GET_CODE (x) == CONST_INT) ! { ! fprintf (asm_out_file, int_format, INTVAL (x)); ! return true; ! } ! return default_assemble_integer (x, size, aligned_p); ! } ! ! /* Generate the assembly code for function entry. FILE is a stdio ! stream to output the code to. SIZE is an int: how many units of ! temporary storage to allocate. ! ! Refer to the array `regs_ever_live' to determine which registers to ! save; `regs_ever_live[I]' is nonzero if register number I is ever ! used in the function. This function is responsible for knowing ! which registers should not be saved even if used. */ ! ! static void ! i370_output_function_prologue (f, l) FILE *f; ! HOST_WIDE_INT l; { #if MACROPROLOGUE == 1 fprintf (f, "* Function %s prologue\n", mvs_function_name); *************** i370_function_prolog (f, l) *** 1382,1391 **** also, to quite using addresses 136, 140, etc. */ ! void ! i370_function_prolog (f, frame_size) FILE *f; ! int frame_size; { static int function_label_index = 1; static int function_first = 0; --- 1437,1446 ---- also, to quite using addresses 136, 140, etc. */ ! static void ! i370_output_function_prologue (f, frame_size) FILE *f; ! HOST_WIDE_INT frame_size; { static int function_label_index = 1; static int function_first = 0; *************** i370_function_prolog (f, frame_size) *** 1405,1411 **** fprintf (f, "\t.using\t.,r15\n"); ! /* Branch to exectuable part of prologue. */ fprintf (f, "\tB\t.LFENT%03d\n", function_label_index); /* write the length of the stackframe */ --- 1460,1466 ---- fprintf (f, "\t.using\t.,r15\n"); ! /* Branch to exectuable part of prologue. */ fprintf (f, "\tB\t.LFENT%03d\n", function_label_index); /* write the length of the stackframe */ *************** i370_function_prolog (f, frame_size) *** 1428,1434 **** fprintf (f, "\tLR\tr11,r2\n"); /* store callee stack pointer at 8(sp) */ ! /* fprintf (f, "\tST\tsp,8(,r3)\n "); wasted cycles, no one uses this ... */ /* backchain -- store caller sp at 4(callee_sp) */ fprintf (f, "\tST\tr3,4(,sp)\n "); --- 1483,1489 ---- fprintf (f, "\tLR\tr11,r2\n"); /* store callee stack pointer at 8(sp) */ ! /* fprintf (f, "\tST\tsp,8(,r3)\n "); wasted cycles, no one uses this ... */ /* backchain -- store caller sp at 4(callee_sp) */ fprintf (f, "\tST\tr3,4(,sp)\n "); *************** i370_function_prolog (f, frame_size) *** 1455,1457 **** --- 1510,1556 ---- i370_label_scan (); } #endif /* TARGET_ELF_ABI */ + + /* This function generates the assembly code for function exit. + Args are as for output_function_prologue (). + + The function epilogue should not depend on the current stack + pointer! It should use the frame pointer only. This is mandatory + because of alloca; we also take advantage of it to omit stack + adjustments before returning. */ + + static void + i370_output_function_epilogue (file, l) + FILE *file; + HOST_WIDE_INT l ATTRIBUTE_UNUSED; + { + int i; + + check_label_emit (); + mvs_check_page (file, 14, 0); + fprintf (file, "* Function %s epilogue\n", mvs_function_name); + mvs_page_num++; + + #if MACROEPILOGUE == 1 + fprintf (file, "\tEDCEPIL\n"); + #else /* MACROEPILOGUE != 1 */ + fprintf (file, "\tL\t13,4(,13)\n"); + fprintf (file, "\tL\t14,12(,13)\n"); + fprintf (file, "\tLM\t2,12,28(13)\n"); + fprintf (file, "\tBALR\t1,14\n"); + fprintf (file, "\tDC\tA("); + assemble_name (file, mvs_function_name); + fprintf (file, ")\n" ); + #endif /* MACROEPILOGUE */ + + fprintf (file, "* Function %s literal pool\n", mvs_function_name); + fprintf (file, "\tDS\t0F\n" ); + fprintf (file, "\tLTORG\n"); + fprintf (file, "* Function %s page table\n", mvs_function_name); + fprintf (file, "\tDS\t0F\n"); + fprintf (file, "PGT%d\tEQU\t*\n", function_base_page); + + mvs_free_label_list(); + for (i = function_base_page; i < mvs_page_num; i++) + fprintf (file, "\tDC\tA(PG%d)\n", i); + } diff -Nrc3pad gcc-3.0.4/gcc/config/i370/i370.h gcc-3.1/gcc/config/i370/i370.h *** gcc-3.0.4/gcc/config/i370/i370.h Mon Apr 16 18:25:49 2001 --- gcc-3.1/gcc/config/i370/i370.h Sun Jan 20 23:48:11 2002 *************** *** 1,5 **** /* Definitions of target machine for GNU compiler. System/370 version. ! Copyright (C) 1989, 1993, 1995, 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. Contributed by Jan Stein (jan@cd.chalmers.se). Modified for OS/390 LanguageEnvironment C by Dave Pitts (dpitts@cozx.com) --- 1,5 ---- /* Definitions of target machine for GNU compiler. System/370 version. ! Copyright (C) 1989, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Jan Stein (jan@cd.chalmers.se). Modified for OS/390 LanguageEnvironment C by Dave Pitts (dpitts@cozx.com) *************** along with GNU CC; see the file COPYING. *** 22,29 **** the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ! #ifndef __I370_H__ ! #define __I370_H__ /* Run-time compilation parameters selecting different hardware subsets. */ extern int target_flags; --- 22,29 ---- the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ! #ifndef GCC_I370_H ! #define GCC_I370_H /* Run-time compilation parameters selecting different hardware subsets. */ extern int target_flags; *************** enum reg_class *** 629,644 **** #define TRAMPOLINE_TEMPLATE(FILE) \ { \ ! ASM_OUTPUT_SHORT (FILE, GEN_INT (0x05E0)); \ ! ASM_OUTPUT_SHORT (FILE, GEN_INT (0x5800 | STATIC_CHAIN_REGNUM << 4)); \ ! ASM_OUTPUT_SHORT (FILE, GEN_INT (0xE00A)); \ ! ASM_OUTPUT_SHORT (FILE, GEN_INT (0x58F0)); \ ! ASM_OUTPUT_SHORT (FILE, GEN_INT (0xE00E)); \ ! ASM_OUTPUT_SHORT (FILE, GEN_INT (0x07FF)); \ ! ASM_OUTPUT_SHORT (FILE, const0_rtx); \ ! ASM_OUTPUT_SHORT (FILE, const0_rtx); \ ! ASM_OUTPUT_SHORT (FILE, const0_rtx); \ ! ASM_OUTPUT_SHORT (FILE, const0_rtx); \ } /* Length in units of the trampoline for entering a nested function. */ --- 629,644 ---- #define TRAMPOLINE_TEMPLATE(FILE) \ { \ ! assemble_aligned_integer (2, GEN_INT (0x05E0)); \ ! assemble_aligned_integer (2, GEN_INT (0x5800 | STATIC_CHAIN_REGNUM << 4)); \ ! assemble_aligned_integer (2, GEN_INT (0xE00A)); \ ! assemble_aligned_integer (2, GEN_INT (0x58F0)); \ ! assemble_aligned_integer (2, GEN_INT (0xE00E)); \ ! assemble_aligned_integer (2, GEN_INT (0x07FF)); \ ! assemble_aligned_integer (2, const0_rtx); \ ! assemble_aligned_integer (2, const0_rtx); \ ! assemble_aligned_integer (2, const0_rtx); \ ! assemble_aligned_integer (2, const0_rtx); \ } /* Length in units of the trampoline for entering a nested function. */ *************** enum reg_class *** 861,870 **** /* #define CASE_VECTOR_PC_RELATIVE */ - /* Specify the tree operation to be used to convert reals to integers. */ - - #define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR - /* Define this if fixuns_trunc is the same as fix_trunc. */ #define FIXUNS_TRUNC_LIKE_FIX_TRUNC --- 861,866 ---- *************** enum reg_class *** 873,891 **** #define DEFAULT_SIGNED_CHAR 0 - /* This is the kind of divide that is easiest to do in the general case. */ - - #define EASY_DIV_EXPR TRUNC_DIV_EXPR - /* Max number of bytes we can move from memory to memory in one reasonably fast instruction. */ #define MOVE_MAX 256 - /* Define this if zero-extension is slow (more than one real instruction). */ - - #define SLOW_ZERO_EXTEND 1 - /* Nonzero if access to memory by bytes is slow and undesirable. */ #define SLOW_BYTE_ACCESS 1 --- 869,879 ---- *************** enum reg_class *** 1009,1015 **** case MULT: /* case UMULT: */ case DIV: case UDIV: \ /* and, or and xor set the cc's the wrong way !! */ \ case AND: case IOR: case XOR: \ ! /* some shifts set the CC some don't. */ \ case ASHIFT: case ASHIFTRT: \ do {} while (0); \ default: \ --- 997,1003 ---- case MULT: /* case UMULT: */ case DIV: case UDIV: \ /* and, or and xor set the cc's the wrong way !! */ \ case AND: case IOR: case XOR: \ ! /* some shifts set the CC some don't. */ \ case ASHIFT: case ASHIFTRT: \ do {} while (0); \ default: \ *************** enum reg_class *** 1036,1048 **** /* ------------------------------------------ */ /* Control the assembler format that we output. */ ! /* Define the parentheses used to group arithmetic operations ! in assembler code. */ ! ! #define ASM_OPEN_PAREN "(" ! #define ASM_CLOSE_PAREN ")" ! ! /* Define results of standard character escape sequences. */ #ifdef TARGET_EBCDIC #define TARGET_ESC 39 --- 1024,1031 ---- /* ------------------------------------------ */ /* Control the assembler format that we output. */ ! /* Define standard character escape sequences for non-ASCII targets ! only. */ #ifdef TARGET_EBCDIC #define TARGET_ESC 39 *************** enum reg_class *** 1053,1066 **** #define TARGET_VT 11 #define TARGET_FF 12 #define TARGET_CR 13 - #else - #define TARGET_BELL 007 - #define TARGET_BS 010 - #define TARGET_TAB 011 - #define TARGET_NEWLINE 012 - #define TARGET_VT 013 - #define TARGET_FF 014 - #define TARGET_CR 015 #endif /* ======================================================== */ --- 1036,1041 ---- *************** enum reg_class *** 1083,1091 **** "0", "2", "4", "6" \ } - /* How to renumber registers for dbx and gdb. */ - #define DBX_REGISTER_NUMBER(REGNO) (REGNO) - #define ASM_FILE_START(FILE) \ { fputs ("\tRMODE\tANY\n", FILE); \ fputs ("\tCSECT\n", FILE); } --- 1058,1063 ---- *************** enum reg_class *** 1156,1162 **** /* Generate case label. For HLASM we can change to the data CSECT and put the vectors out of the code body. The assembler just ! concatenates CSECTs with the same name. */ #define ASM_OUTPUT_CASE_LABEL(FILE, PREFIX, NUM, TABLE) \ fprintf (FILE, "\tDS\t0F\n"); \ --- 1128,1134 ---- /* Generate case label. For HLASM we can change to the data CSECT and put the vectors out of the code body. The assembler just ! concatenates CSECTs with the same name. */ #define ASM_OUTPUT_CASE_LABEL(FILE, PREFIX, NUM, TABLE) \ fprintf (FILE, "\tDS\t0F\n"); \ *************** enum reg_class *** 1199,1245 **** fprintf (FILE, "\tL\t%s,%d(13)\n\tLA\t13,4(13)\n", \ reg_names[REGNO], STACK_POINTER_OFFSET) - /* This is how to output an assembler line defining a `double' constant. */ - #define ASM_OUTPUT_DOUBLE(FILE, VALUE) \ - fprintf (FILE, "\tDC\tD'%.18G'\n", (VALUE)) - - /* This is how to output an assembler line defining a `float' constant. */ - #define ASM_OUTPUT_FLOAT(FILE, VALUE) \ - fprintf (FILE, "\tDC\tE'%.9G'\n", (VALUE)) - - /* This outputs an integer, if not a CONST_INT must be address constant. */ - - #define ASM_OUTPUT_INT(FILE, EXP) \ - { \ - if (GET_CODE (EXP) == CONST_INT) \ - { \ - fprintf (FILE, "\tDC\tF'"); \ - output_addr_const (FILE, EXP); \ - fprintf (FILE, "'\n"); \ - } \ - else \ - { \ - fprintf (FILE, "\tDC\tA("); \ - output_addr_const (FILE, EXP); \ - fprintf (FILE, ")\n"); \ - } \ - } - - /* This outputs a short integer. */ - - #define ASM_OUTPUT_SHORT(FILE, EXP) \ - { \ - fprintf (FILE, "\tDC\tX'%04X'\n", INTVAL(EXP) & 0xFFFF); \ - } - - /* This outputs a byte sized integer. */ - - #define ASM_OUTPUT_CHAR(FILE, EXP) \ - fprintf (FILE, "\tDC\tX'%02X'\n", INTVAL (EXP) ) - - #define ASM_OUTPUT_BYTE(FILE, VALUE) \ - fprintf (FILE, "\tDC\tX'%02X'\n", VALUE) - /* This outputs a text string. The string are chopped up to fit into an 80 byte record. Also, control and special characters, interpreted by the IBM assembler, are output numerically. */ --- 1171,1176 ---- *************** enum reg_class *** 1248,1258 **** #define ASM_OUTPUT_ASCII(FILE, PTR, LEN) \ { \ ! int i, j; \ ! int c; \ ! for (j = 0, i = 0; i < LEN; j++, i++) \ { \ ! c = PTR[i]; \ if (ISCNTRL (c) || c == '&') \ { \ if (j % MVS_ASCII_TEXT_LENGTH != 0 ) \ --- 1179,1189 ---- #define ASM_OUTPUT_ASCII(FILE, PTR, LEN) \ { \ ! size_t i, limit = (LEN); \ ! int j; \ ! for (j = 0, i = 0; i < limit; j++, i++) \ { \ ! int c = (PTR)[i]; \ if (ISCNTRL (c) || c == '&') \ { \ if (j % MVS_ASCII_TEXT_LENGTH != 0 ) \ *************** enum reg_class *** 1355,1361 **** /* Print operand XV (an rtx) in assembler syntax to file FILE. CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified. ! For `%' followed by punctuation, CODE is the punctuation and XV is null. */ #define PRINT_OPERAND(FILE, XV, CODE) \ { \ --- 1286,1292 ---- /* Print operand XV (an rtx) in assembler syntax to file FILE. CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified. ! For `%' followed by punctuation, CODE is the punctuation and XV is null. */ #define PRINT_OPERAND(FILE, XV, CODE) \ { \ *************** enum reg_class *** 1597,1606 **** } \ } - /* This macro generates the assembly code for function entry. - All of the C/370 environment is preserved. */ - #define FUNCTION_PROLOGUE(FILE, LSIZE) i370_function_prolog ((FILE), (LSIZE)); - #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ { \ if (strlen (NAME) + 1 > mvs_function_name_length) \ --- 1528,1533 ---- *************** enum reg_class *** 1625,1686 **** fputs ("\tCSECT\n", FILE); \ } - /* This macro generates the assembly code for function exit, on machines - that need it. If FUNCTION_EPILOGUE is not defined then individual - return instructions are generated for each return statement. Args are - same as for FUNCTION_PROLOGUE. - - The function epilogue should not depend on the current stack pointer! - It should use the frame pointer only. This is mandatory because - of alloca; we also take advantage of it to omit stack adjustments - before returning. */ - - #if MACROEPILOGUE == 1 - #define FUNCTION_EPILOGUE(FILE, LSIZE) \ - { \ - int i; \ - check_label_emit(); \ - mvs_check_page (FILE,14,0); \ - fprintf (FILE, "* Function %s epilogue\n", mvs_function_name); \ - fprintf (FILE, "\tEDCEPIL\n"); \ - mvs_page_num++; \ - fprintf (FILE, "* Function %s literal pool\n", mvs_function_name); \ - fprintf (FILE, "\tDS\t0F\n" ); \ - fprintf (FILE, "\tLTORG\n"); \ - fprintf (FILE, "* Function %s page table\n", mvs_function_name); \ - fprintf (FILE, "\tDS\t0F\n"); \ - fprintf (FILE, "PGT%d\tEQU\t*\n", function_base_page); \ - mvs_free_label_list(); \ - for ( i = function_base_page; i < mvs_page_num; i++ ) \ - fprintf (FILE, "\tDC\tA(PG%d)\n", i); \ - } - #else /* MACROEPILOGUE != 1 */ - #define FUNCTION_EPILOGUE(FILE, LSIZE) \ - { \ - int i; \ - check_label_emit(); \ - mvs_check_page (FILE,14,0); \ - fprintf (FILE, "* Function %s epilogue\n", mvs_function_name); \ - fprintf (FILE, "\tL\t13,4(,13)\n"); \ - fprintf (FILE, "\tL\t14,12(,13)\n"); \ - fprintf (FILE, "\tLM\t2,12,28(13)\n"); \ - fprintf (FILE, "\tBALR\t1,14\n"); \ - fprintf (FILE, "\tDC\tA("); \ - mvs_page_num++; \ - assemble_name (FILE, mvs_function_name); \ - fprintf (FILE, ")\n" ); \ - fprintf (FILE, "* Function %s literal pool\n", mvs_function_name); \ - fprintf (FILE, "\tDS\t0F\n" ); \ - fprintf (FILE, "\tLTORG\n"); \ - fprintf (FILE, "* Function %s page table\n", mvs_function_name); \ - fprintf (FILE, "\tDS\t0F\n"); \ - fprintf (FILE, "PGT%d\tEQU\t*\n", function_base_page); \ - mvs_free_label_list(); \ - for ( i = function_base_page; i < mvs_page_num; i++ ) \ - fprintf (FILE, "\tDC\tA(PG%d)\n", i); \ - } - #endif /* MACROEPILOGUE */ - /* Output assembler code to FILE to increment profiler label # LABELNO for profiling a function entry. */ --- 1552,1557 ---- *************** enum reg_class *** 1702,1713 **** "f0", "f2", "f4", "f6" \ } - /* How to renumber registers for dbx and gdb. */ - #define DBX_REGISTER_NUMBER(REGNO) (REGNO) - /* Print operand XV (an rtx) in assembler syntax to file FILE. CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified. ! For `%' followed by punctuation, CODE is the punctuation and XV is null. */ #define PRINT_OPERAND(FILE, XV, CODE) \ { \ --- 1573,1581 ---- "f0", "f2", "f4", "f6" \ } /* Print operand XV (an rtx) in assembler syntax to file FILE. CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified. ! For `%' followed by punctuation, CODE is the punctuation and XV is null. */ #define PRINT_OPERAND(FILE, XV, CODE) \ { \ *************** enum reg_class *** 1822,1828 **** mvs_page_lit += 8; \ fprintf (FILE, "=D'%s'", buf); \ } \ ! else /* VOIDmode !?!? strange but true ... */ \ { \ mvs_page_lit += 8; \ fprintf (FILE, "=XL8'%08X%08X'", \ --- 1690,1696 ---- mvs_page_lit += 8; \ fprintf (FILE, "=D'%s'", buf); \ } \ ! else /* VOIDmode !?!? strange but true ... */ \ { \ mvs_page_lit += 8; \ fprintf (FILE, "=XL8'%08X%08X'", \ *************** abort(); \ *** 1958,1997 **** } \ } - /* This macro generates the assembly code for function exit, on machines - that need it. If FUNCTION_EPILOGUE is not defined then individual - return instructions are generated for each return statement. Args are - same as for FUNCTION_PROLOGUE. - - The function epilogue should not depend on the current stack pointer! - It should use the frame pointer only. This is mandatory because - of alloca; we also take advantage of it to omit stack adjustments - before returning. */ - - #define FUNCTION_EPILOGUE(FILE, LSIZE) \ - { \ - int i; \ - check_label_emit(); \ - mvs_check_page (FILE,14,0); \ - fprintf (FILE, "# Function epilogue\n"); \ - fprintf (FILE, "\tL\tsp,4(0,sp)\n"); \ - fprintf (FILE, "\tL\tlr,12(0,sp)\n"); \ - fprintf (FILE, "\tLM\t2,12,28(sp)\n"); \ - fprintf (FILE, "\tBASR\t1,lr\n"); \ - mvs_page_num++; \ - fprintf (FILE, "# Function literal pool\n"); \ - fprintf (FILE, "\t.balign\t4\n"); \ - fprintf (FILE, "\t.ltorg\n"); \ - fprintf (FILE, "# Function page table\n"); \ - fprintf (FILE, "\t.balign\t4\n"); \ - fprintf (FILE, ".LPGT%d:\n", function_base_page); \ - mvs_free_label_list(); \ - for ( i = function_base_page; i < mvs_page_num; i++ ) \ - fprintf (FILE, "\t.long\t.LPG%d\n", i); \ - } - - #define FUNCTION_PROLOGUE(FILE, LSIZE) i370_function_prolog ((FILE), (LSIZE)); - /* Output assembler code to FILE to increment profiler label # LABELNO for profiling a function entry. */ /* Make it a no-op for now, so we can at least compile glibc */ --- 1826,1831 ---- *************** abort(); \ *** 2011,2060 **** #undef ASM_OUTPUT_EXTERNAL #define ASM_DOUBLE "\t.double" - #define ASM_LONG "\t.long" - #define ASM_SHORT "\t.short" - #define ASM_BYTE "\t.byte" - - /* Argument to the flt pt. macros is a REAL_VALUE_TYPE which - may or may not be a float/double, depending on whther we - are running in cross-compiler mode. */ - /* This is how to output an assembler line defining a `double' constant. */ - #define ASM_OUTPUT_DOUBLE(FILE, RVAL) { \ - char buf[50]; \ - REAL_VALUE_TO_DECIMAL (RVAL, HOST_WIDE_INT_PRINT_DOUBLE_HEX, buf); \ - fprintf (FILE, "\tDC\tD'%s'\n", buf); \ - } - /* This is how to output an assembler line defining a `float' constant. */ - #define ASM_OUTPUT_FLOAT(FILE, RVAL) { \ - char buf[50]; \ - REAL_VALUE_TO_DECIMAL (RVAL, HOST_WIDE_INT_PRINT_DEC, buf); \ - fprintf (FILE, "\tDC\tE'%s'\n", buf); \ - } - - - /* This is how to output an assembler line defining an `int' constant. */ - #define ASM_OUTPUT_INT(FILE,VALUE) \ - ( fprintf (FILE, "%s ", ASM_LONG), \ - output_addr_const (FILE,(VALUE)), \ - putc('\n',FILE)) - - /* Likewise for `char' and `short' constants. */ - #define ASM_OUTPUT_SHORT(FILE,VALUE) \ - ( fprintf (FILE, "%s ", ASM_SHORT), \ - output_addr_const (FILE,(VALUE)), \ - putc('\n',FILE)) - - - #define ASM_OUTPUT_CHAR(FILE,VALUE) \ - ( fprintf (FILE, "%s", ASM_BYTE_OP), \ - output_addr_const (FILE, (VALUE)), \ - putc ('\n', FILE)) - - /* This is how to output an assembler line for a numeric constant byte. */ - #define ASM_OUTPUT_BYTE(FILE,VALUE) \ - fprintf ((FILE), "%s0x%x\n", ASM_BYTE_OP, (VALUE)) - /* This is how to output the definition of a user-level label named NAME, such as the label on a static function or variable NAME. */ #define ASM_OUTPUT_LABEL(FILE,NAME) \ --- 1845,1851 ---- *************** abort(); \ *** 2064,2070 **** /* Generate internal label. Since we can branch here from off page, we must reload the base register. Note that internal labels are generated ! for loops, goto's and case labels. */ #undef ASM_OUTPUT_INTERNAL_LABEL #define ASM_OUTPUT_INTERNAL_LABEL(FILE, PREFIX, NUM) \ { \ --- 1855,1861 ---- /* Generate internal label. Since we can branch here from off page, we must reload the base register. Note that internal labels are generated ! for loops, goto's and case labels. */ #undef ASM_OUTPUT_INTERNAL_LABEL #define ASM_OUTPUT_INTERNAL_LABEL(FILE, PREFIX, NUM) \ { \ *************** abort(); \ *** 2106,2112 **** count is in %cl. Some assemblers require %cl as an argument; some don't. ! GAS requires the %cl argument, so override i386/unix.h. */ #undef SHIFT_DOUBLE_OMITS_COUNT #define SHIFT_DOUBLE_OMITS_COUNT 0 --- 1897,1903 ---- count is in %cl. Some assemblers require %cl as an argument; some don't. ! GAS requires the %cl argument, so override i386/unix.h. */ #undef SHIFT_DOUBLE_OMITS_COUNT #define SHIFT_DOUBLE_OMITS_COUNT 0 *************** abort(); \ *** 2165,2168 **** fprintf ((FILE), ",%u\n", (ROUNDED))) #endif /* TARGET_ELF_ABI */ ! #endif /* __I370_H__ */ --- 1956,1959 ---- fprintf ((FILE), ",%u\n", (ROUNDED))) #endif /* TARGET_ELF_ABI */ ! #endif /* ! GCC_I370_H */ diff -Nrc3pad gcc-3.0.4/gcc/config/i370/i370.md gcc-3.1/gcc/config/i370/i370.md *** gcc-3.0.4/gcc/config/i370/i370.md Sun May 27 10:31:45 2001 --- gcc-3.1/gcc/config/i370/i370.md Sun Jan 20 23:48:11 2002 *************** *** 1,5 **** ;;- Machine description for GNU compiler -- System/370 version. ! ;; Copyright (C) 1989, 1993, 1994, 1995, 1997, 1998, 1999, 2000 ;; Free Software Foundation, Inc. ;; Contributed by Jan Stein (jan@cd.chalmers.se). ;; Modified for OS/390 LanguageEnvironment C by Dave Pitts (dpitts@cozx.com) --- 1,5 ---- ;;- Machine description for GNU compiler -- System/370 version. ! ;; Copyright (C) 1989, 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2002 ;; Free Software Foundation, Inc. ;; Contributed by Jan Stein (jan@cd.chalmers.se). ;; Modified for OS/390 LanguageEnvironment C by Dave Pitts (dpitts@cozx.com) *************** *** 168,174 **** check_label_emit (); if (REG_P (operands[0])) { ! /* an unsigned compare to zero is always zero/not-zero... */ mvs_check_page (0, 4, 4); return \"N %0,=XL4'000000FF'\"; } --- 168,174 ---- check_label_emit (); if (REG_P (operands[0])) { ! /* an unsigned compare to zero is always zero/not-zero... */ mvs_check_page (0, 4, 4); return \"N %0,=XL4'000000FF'\"; } *************** *** 187,193 **** check_label_emit (); if (unsigned_jump_follows_p (insn)) { ! /* an unsigned compare to zero is always zero/not-zero... */ mvs_check_page (0, 4, 4); return \"N %0,=XL4'000000FF'\"; } --- 187,193 ---- check_label_emit (); if (unsigned_jump_follows_p (insn)) { ! /* an unsigned compare to zero is always zero/not-zero... */ mvs_check_page (0, 4, 4); return \"N %0,=XL4'000000FF'\"; } *************** check_label_emit (); *** 537,548 **** emit_insn (gen_rtx_CLOBBER (VOIDmode, reg1)); emit_move_insn (gen_rtx_SUBREG (SImode, reg1, 0), force_operand (XEXP (mem1, 0), NULL_RTX)); ! emit_move_insn (gen_rtx_SUBREG (SImode, reg1, 1), len); emit_insn (gen_rtx_CLOBBER (VOIDmode, reg2)); emit_move_insn (gen_rtx_SUBREG (SImode, reg2, 0), force_operand (XEXP (mem2, 0), NULL_RTX)); ! emit_move_insn (gen_rtx_SUBREG (SImode, reg2, 1), len); /* Compare! */ emit_insn (gen_cmpstrsi_1 (result, reg1, reg2)); --- 537,548 ---- emit_insn (gen_rtx_CLOBBER (VOIDmode, reg1)); emit_move_insn (gen_rtx_SUBREG (SImode, reg1, 0), force_operand (XEXP (mem1, 0), NULL_RTX)); ! emit_move_insn (gen_rtx_SUBREG (SImode, reg1, GET_MODE_SIZE (SImode)), len); emit_insn (gen_rtx_CLOBBER (VOIDmode, reg2)); emit_move_insn (gen_rtx_SUBREG (SImode, reg2, 0), force_operand (XEXP (mem2, 0), NULL_RTX)); ! emit_move_insn (gen_rtx_SUBREG (SImode, reg2, GET_MODE_SIZE (SImode)), len); /* Compare! */ emit_insn (gen_cmpstrsi_1 (result, reg1, reg2)); *************** check_label_emit (); *** 1380,1400 **** "" " { - /* - XXX bogus, i think, unless change_address has a side effet we need - rtx op0; - - op0 = XEXP (operands[0], 0); - if (GET_CODE (op0) == REG - || (GET_CODE (op0) == PLUS && GET_CODE (XEXP (op0, 0)) == REG - && GET_CODE (XEXP (op0, 1)) == CONST_INT - && (unsigned) INTVAL (XEXP (op0, 1)) < 4096)) - op0 = operands[0]; - else - op0 = change_address (operands[0], VOIDmode, - copy_to_mode_reg (SImode, op0)); - - */ { /* implementation suggested by Richard Henderson */ rtx reg1 = gen_reg_rtx (DImode); --- 1380,1385 ---- *************** check_label_emit (); *** 1409,1419 **** emit_insn (gen_rtx_CLOBBER (VOIDmode, reg1)); emit_move_insn (gen_rtx_SUBREG (SImode, reg1, 0), force_operand (XEXP (mem1, 0), NULL_RTX)); ! emit_move_insn (gen_rtx_SUBREG (SImode, reg1, 1), len); emit_insn (gen_rtx_CLOBBER (VOIDmode, reg2)); emit_move_insn (gen_rtx_SUBREG (SImode, reg2, 0), zippo); ! emit_move_insn (gen_rtx_SUBREG (SImode, reg2, 1), zippo); /* Copy! */ emit_insn (gen_movstrsi_1 (reg1, reg2)); --- 1394,1404 ---- emit_insn (gen_rtx_CLOBBER (VOIDmode, reg1)); emit_move_insn (gen_rtx_SUBREG (SImode, reg1, 0), force_operand (XEXP (mem1, 0), NULL_RTX)); ! emit_move_insn (gen_rtx_SUBREG (SImode, reg1, GET_MODE_SIZE (SImode)), len); emit_insn (gen_rtx_CLOBBER (VOIDmode, reg2)); emit_move_insn (gen_rtx_SUBREG (SImode, reg2, 0), zippo); ! emit_move_insn (gen_rtx_SUBREG (SImode, reg2, GET_MODE_SIZE (SImode)), zippo); /* Copy! */ emit_insn (gen_movstrsi_1 (reg1, reg2)); *************** check_label_emit (); *** 1442,1449 **** && (unsigned) INTVAL (XEXP (op0, 1)) < 4096)) op0 = operands[0]; else ! op0 = change_address (operands[0], VOIDmode, ! copy_to_mode_reg (SImode, op0)); op1 = XEXP (operands[1], 0); if (GET_CODE (op1) == REG --- 1427,1433 ---- && (unsigned) INTVAL (XEXP (op0, 1)) < 4096)) op0 = operands[0]; else ! op0 = replace_equiv_address (operands[0], copy_to_mode_reg (SImode, op0)); op1 = XEXP (operands[1], 0); if (GET_CODE (op1) == REG *************** check_label_emit (); *** 1452,1459 **** && (unsigned) INTVAL (XEXP (op1, 1)) < 4096)) op1 = operands[1]; else ! op1 = change_address (operands[1], VOIDmode, ! copy_to_mode_reg (SImode, op1)); if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) < 256) emit_insn (gen_rtx_PARALLEL (VOIDmode, --- 1436,1442 ---- && (unsigned) INTVAL (XEXP (op1, 1)) < 4096)) op1 = operands[1]; else ! op1 = replace_equiv_address (operands[1], copy_to_mode_reg (SImode, op1)); if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) < 256) emit_insn (gen_rtx_PARALLEL (VOIDmode, *************** check_label_emit (); *** 1476,1487 **** emit_insn (gen_rtx_CLOBBER (VOIDmode, reg1)); emit_move_insn (gen_rtx_SUBREG (SImode, reg1, 0), force_operand (XEXP (mem1, 0), NULL_RTX)); ! emit_move_insn (gen_rtx_SUBREG (SImode, reg1, 1), len); emit_insn (gen_rtx_CLOBBER (VOIDmode, reg2)); emit_move_insn (gen_rtx_SUBREG (SImode, reg2, 0), force_operand (XEXP (mem2, 0), NULL_RTX)); ! emit_move_insn (gen_rtx_SUBREG (SImode, reg2, 1), len); /* Copy! */ emit_insn (gen_movstrsi_1 (reg1, reg2)); --- 1459,1470 ---- emit_insn (gen_rtx_CLOBBER (VOIDmode, reg1)); emit_move_insn (gen_rtx_SUBREG (SImode, reg1, 0), force_operand (XEXP (mem1, 0), NULL_RTX)); ! emit_move_insn (gen_rtx_SUBREG (SImode, reg1, GET_MODE_SIZE (SImode)), len); emit_insn (gen_rtx_CLOBBER (VOIDmode, reg2)); emit_move_insn (gen_rtx_SUBREG (SImode, reg2, 0), force_operand (XEXP (mem2, 0), NULL_RTX)); ! emit_move_insn (gen_rtx_SUBREG (SImode, reg2, GET_MODE_SIZE (SImode)), len); /* Copy! */ emit_insn (gen_movstrsi_1 (reg1, reg2)); *************** check_label_emit (); *** 1700,1706 **** "* { check_label_emit (); ! /* AND only sets zero/not-zero bits not the arithmetic bits ... */ CC_STATUS_INIT; mvs_check_page (0, 4, 4); return \"N %1,=XL4'0000FFFF'\"; --- 1683,1689 ---- "* { check_label_emit (); ! /* AND only sets zero/not-zero bits not the arithmetic bits ... */ CC_STATUS_INIT; mvs_check_page (0, 4, 4); return \"N %1,=XL4'0000FFFF'\"; *************** check_label_emit (); *** 1721,1727 **** check_label_emit (); if (REG_P (operands[1])) { ! /* AND only sets zero/not-zero bits not the arithmetic bits ... */ CC_STATUS_INIT; mvs_check_page (0, 4, 4); return \"N %0,=XL4'000000FF'\"; --- 1704,1710 ---- check_label_emit (); if (REG_P (operands[1])) { ! /* AND only sets zero/not-zero bits not the arithmetic bits ... */ CC_STATUS_INIT; mvs_check_page (0, 4, 4); return \"N %0,=XL4'000000FF'\"; *************** check_label_emit (); *** 1751,1757 **** check_label_emit (); if (REG_P (operands[1])) { ! /* AND only sets zero/not-zero bits not the arithmetic bits ... */ CC_STATUS_INIT; mvs_check_page (0, 4, 4); return \"N %0,=XL4'000000FF'\"; --- 1734,1740 ---- check_label_emit (); if (REG_P (operands[1])) { ! /* AND only sets zero/not-zero bits not the arithmetic bits ... */ CC_STATUS_INIT; mvs_check_page (0, 4, 4); return \"N %0,=XL4'000000FF'\"; *************** check_label_emit (); *** 1981,1987 **** "* { check_label_emit (); ! CC_STATUS_INIT; /* add assumes CC but LA doesnt set CC */ mvs_check_page (0, 4, 0); return \"LA %0,%c2(,%1)\"; }" --- 1964,1970 ---- "* { check_label_emit (); ! CC_STATUS_INIT; /* add assumes CC but LA doesn't set CC */ mvs_check_page (0, 4, 0); return \"LA %0,%c2(,%1)\"; }" *************** check_label_emit (); *** 2000,2006 **** check_label_emit (); if ((unsigned) INTVAL (operands[2]) < 4096) { ! CC_STATUS_INIT; /* add assumes CC but LA doesnt set CC */ mvs_check_page (0, 4, 0); return \"LA %0,%c2(,%1)\"; } --- 1983,1989 ---- check_label_emit (); if ((unsigned) INTVAL (operands[2]) < 4096) { ! CC_STATUS_INIT; /* add assumes CC but LA doesn't set CC */ mvs_check_page (0, 4, 0); return \"LA %0,%c2(,%1)\"; } *************** check_label_emit (); *** 2040,2046 **** { if (INTVAL (operands[2]) == -1) { ! CC_STATUS_INIT; /* add assumes CC but BCTR doesnt set CC */ mvs_check_page (0, 2, 0); return \"BCTR %0,0\"; } --- 2023,2029 ---- { if (INTVAL (operands[2]) == -1) { ! CC_STATUS_INIT; /* add assumes CC but BCTR doesn't set CC */ mvs_check_page (0, 2, 0); return \"BCTR %0,0\"; } *************** check_label_emit (); *** 2072,2078 **** { if (INTVAL (operands[2]) == -1) { ! CC_STATUS_INIT; /* add assumes CC but BCTR doesnt set CC */ mvs_check_page (0, 2, 0); return \"BCTR %0,0\"; } --- 2055,2061 ---- { if (INTVAL (operands[2]) == -1) { ! CC_STATUS_INIT; /* add assumes CC but BCTR doesn't set CC */ mvs_check_page (0, 2, 0); return \"BCTR %0,0\"; } *************** check_label_emit (); *** 2097,2103 **** "* { check_label_emit (); ! CC_STATUS_INIT; /* add assumes CC but LA doesnt set CC */ mvs_check_page (0, 4, 0); if (REG_P (operands[2])) return \"LA %0,0(%1,%2)\"; --- 2080,2086 ---- "* { check_label_emit (); ! CC_STATUS_INIT; /* add assumes CC but LA doesn't set CC */ mvs_check_page (0, 4, 0); if (REG_P (operands[2])) return \"LA %0,0(%1,%2)\"; *************** check_label_emit (); *** 2252,2258 **** } if (operands[2] == const1_rtx) { ! CC_STATUS_INIT; /* subtract assumes CC but BCTR doesnt set CC */ mvs_check_page (0, 2, 0); return \"BCTR %0,0\"; } --- 2235,2241 ---- } if (operands[2] == const1_rtx) { ! CC_STATUS_INIT; /* subtract assumes CC but BCTR doesn't set CC */ mvs_check_page (0, 2, 0); return \"BCTR %0,0\"; } *************** check_label_emit (); *** 2281,2287 **** } if (operands[2] == const1_rtx) { ! CC_STATUS_INIT; /* subtract assumes CC but BCTR doesnt set CC */ mvs_check_page (0, 2, 0); return \"BCTR %0,0\"; } --- 2264,2270 ---- } if (operands[2] == const1_rtx) { ! CC_STATUS_INIT; /* subtract assumes CC but BCTR doesn't set CC */ mvs_check_page (0, 2, 0); return \"BCTR %0,0\"; } *************** check_label_emit (); *** 2425,2435 **** * Dunno how to untwist it elegantly; but it seems to work for now. */ emit_insn (gen_rtx_SET (VOIDmode, ! gen_rtx_SUBREG (SImode, r, 1), operands[1])); emit_insn (gen_rtx_SET (VOIDmode, r, gen_rtx_MULT (DImode, r, operands[2]))); emit_insn (gen_rtx_SET (VOIDmode, operands[0], ! gen_rtx_SUBREG (SImode, r, 1))); } DONE; }") --- 2408,2419 ---- * Dunno how to untwist it elegantly; but it seems to work for now. */ emit_insn (gen_rtx_SET (VOIDmode, ! gen_rtx_SUBREG (SImode, r, GET_MODE_SIZE (SImode)), ! operands[1])); emit_insn (gen_rtx_SET (VOIDmode, r, gen_rtx_MULT (DImode, r, operands[2]))); emit_insn (gen_rtx_SET (VOIDmode, operands[0], ! gen_rtx_SUBREG (SImode, r, GET_MODE_SIZE (SImode)))); } DONE; }") *************** check_label_emit (); *** 2534,2540 **** emit_insn (gen_rtx_SET (VOIDmode, r, gen_rtx_DIV (DImode, r, operands[2]))); emit_insn (gen_rtx_SET (VOIDmode, operands[0], ! gen_rtx_SUBREG (SImode, r, 1))); DONE; }") --- 2518,2524 ---- emit_insn (gen_rtx_SET (VOIDmode, r, gen_rtx_DIV (DImode, r, operands[2]))); emit_insn (gen_rtx_SET (VOIDmode, operands[0], ! gen_rtx_SUBREG (SImode, r, GET_MODE_SIZE (SImode)))); DONE; }") *************** check_label_emit (); *** 2552,2558 **** { rtx dr = gen_reg_rtx (DImode); rtx dr_0 = gen_rtx_SUBREG (SImode, dr, 0); ! rtx dr_1 = gen_rtx_SUBREG (SImode, dr, 1); if (GET_CODE (operands[2]) == CONST_INT) --- 2536,2542 ---- { rtx dr = gen_reg_rtx (DImode); rtx dr_0 = gen_rtx_SUBREG (SImode, dr, 0); ! rtx dr_1 = gen_rtx_SUBREG (SImode, dr, GET_MODE_SIZE (SImode)); if (GET_CODE (operands[2]) == CONST_INT) diff -Nrc3pad gcc-3.0.4/gcc/config/i370/linux.h gcc-3.1/gcc/config/i370/linux.h *** gcc-3.0.4/gcc/config/i370/linux.h Thu Nov 2 23:29:09 2000 --- gcc-3.1/gcc/config/i370/linux.h Mon Apr 15 20:27:25 2002 *************** *** 1,5 **** /* Definitions of target machine for GNU compiler. System/370 version. ! Copyright (C) 1989, 1993, 1995, 1996, 1997 Free Software Foundation, Inc. Contributed by Jan Stein (jan@cd.chalmers.se). Modified for Linux/390 by Linas Vepstas (linas@linas.org) --- 1,6 ---- /* Definitions of target machine for GNU compiler. System/370 version. ! Copyright (C) 1989, 1993, 1995, 1996, 1997, 1999, 2000, 2001, 2002 ! Free Software Foundation, Inc. Contributed by Jan Stein (jan@cd.chalmers.se). Modified for Linux/390 by Linas Vepstas (linas@linas.org) *************** Boston, MA 02111-1307, USA. */ *** 30,52 **** /* hack alert define to get dbx/gdb/dwarf to compile */ ! /* problem is that host float format is not target float format. */ /* define REAL_ARITHMETIC for software emulation of float to * int conversion. This seems to have somethings to do with ! * cross-compiling ... */ #define REAL_ARITHMETIC /* Include system common definitions */ ! ! #include "config/linux.h" ! #include "config/i370/i370.h" /* Names to predefine in the preprocessor for this target machine. */ #undef CPP_PREDEFINES ! #define CPP_PREDEFINES "-DGCC -Dgcc -D__ELF__ -Dunix -Dlinux -Asystem=posix -Acpu=i370 -Amachine=i370" ! /* Options for this target machine. */ #define LIBGCC_SPEC "libgcc.a%s" --- 31,52 ---- /* hack alert define to get dbx/gdb/dwarf to compile */ ! /* problem is that host float format is not target float format. */ /* define REAL_ARITHMETIC for software emulation of float to * int conversion. This seems to have somethings to do with ! * cross-compiling ... */ #define REAL_ARITHMETIC /* Include system common definitions */ ! /* TODO: convert include to ${tm_file} list in config.gcc. */ ! #include "i370/i370.h" /* Names to predefine in the preprocessor for this target machine. */ #undef CPP_PREDEFINES ! #define CPP_PREDEFINES "-DGCC -Dgcc -D__ELF__ -Dunix -D__gnu_linux__ -Dlinux -Asystem=posix -Acpu=i370 -Amachine=i370" ! /* Options for this target machine. */ #define LIBGCC_SPEC "libgcc.a%s" *************** Boston, MA 02111-1307, USA. */ *** 95,101 **** #endif #ifndef CPP_OS_LINUX_SPEC ! #define CPP_OS_LINUX_SPEC "-D__unix__ -D__linux__ \ %{!ansi: -Dunix -Dlinux } \ -Asystem=unix -Asystem=linux" #endif --- 95,101 ---- #endif #ifndef CPP_OS_LINUX_SPEC ! #define CPP_OS_LINUX_SPEC "-D__unix__ -D__gnu_linux__ -D__linux__ \ %{!ansi: -Dunix -Dlinux } \ -Asystem=unix -Asystem=linux" #endif diff -Nrc3pad gcc-3.0.4/gcc/config/i370/t-i370 gcc-3.1/gcc/config/i370/t-i370 *** gcc-3.0.4/gcc/config/i370/t-i370 Wed Dec 16 21:03:02 1998 --- gcc-3.1/gcc/config/i370/t-i370 Wed Oct 17 20:39:13 2001 *************** *** 1,4 **** ! # There is no libgcc for mvs ! LIBGCC = ! INSTALL_LIBGCC = ! LIBGCC1_TEST = --- 1,3 ---- ! i370-c.o: $(srcdir)/config/i370/i370-c.c $(srcdir)/config/i370/i370-protos.h \ ! $(CONFIG_H) $(SYSTEM_H) cpplib.h $(TREE_H) c-pragma.h c-lex.h toplev.h ! $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< diff -Nrc3pad gcc-3.0.4/gcc/config/i370/t-linux gcc-3.1/gcc/config/i370/t-linux *** gcc-3.0.4/gcc/config/i370/t-linux Sat Sep 4 15:08:56 1999 --- gcc-3.1/gcc/config/i370/t-linux Thu Jan 1 00:00:00 1970 *************** *** 1,4 **** - # config/i370/t-linux: this file defines Makefile overrides when building - # for a Linux target. Thes definitions are in addition to config/t-linux. - # pretty busted at the moment - CROSS_LIBGCC1 = --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i370/t-mvs gcc-3.1/gcc/config/i370/t-mvs *** gcc-3.0.4/gcc/config/i370/t-mvs Sat Sep 4 15:08:56 1999 --- gcc-3.1/gcc/config/i370/t-mvs Thu Jan 1 00:00:00 1970 *************** *** 1,4 **** - # There is no libgcc for mvs - LIBGCC = - INSTALL_LIBGCC = - LIBGCC1_TEST = --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i370/t-oe gcc-3.1/gcc/config/i370/t-oe *** gcc-3.0.4/gcc/config/i370/t-oe Sat Sep 4 15:08:56 1999 --- gcc-3.1/gcc/config/i370/t-oe Thu Nov 15 13:05:53 2001 *************** *** 1,4 **** ! # There is no libgcc for OpenEdition ! LIBGCC = ! INSTALL_LIBGCC = ! LIBGCC1_TEST = --- 1,6 ---- ! # ! # Target is an i370 running OpenEdition ! # ! ! # Don't bother fixing up header files, they're weird ! STMP_FIXPROTO = diff -Nrc3pad gcc-3.0.4/gcc/config/i370/x-oe gcc-3.1/gcc/config/i370/x-oe *** gcc-3.0.4/gcc/config/i370/x-oe Wed Sep 8 06:23:46 1999 --- gcc-3.1/gcc/config/i370/x-oe Thu Jan 1 00:00:00 1970 *************** *** 1,28 **** - # - # Host is an i370 running OpenEdition - # - - # Use GCC alloca - - ALLOCA = alloca.o - - # Don't bother fixing up header files, they're wierd - - STMP_FIXPROTO = - - # Set up to make using c89 - - X_CFLAGS=-D_ALL_SOURCE - CC=c89 - - # Explicitly use libiberty - - CLIB=-liberty - LDFLAGS=-L../libiberty - - # TAR Options - # Please note that OpenEdition confuses tar and pax, and - # thus uses the non-standard options 'xpf' - - TAROUTOPTS=xpf - --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i370/xm-i370.h gcc-3.1/gcc/config/i370/xm-i370.h *** gcc-3.0.4/gcc/config/i370/xm-i370.h Thu Mar 15 19:02:03 2001 --- gcc-3.1/gcc/config/i370/xm-i370.h Thu Jan 1 00:00:00 1970 *************** *** 1,49 **** - /* Configuration for GNU C-compiler for System/370. - Copyright (C) 1989, 1993, 1997 Free Software Foundation, Inc. - Contributed by Jan Stein (jan@cd.chalmers.se). - Modified for MVS C/370 by Dave Pitts (dpitts@nyx.cs.du.edu) - - 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 describes the machine the compiler is hosted on. */ - - #define HOST_BITS_PER_CHAR 8 - #define HOST_BITS_PER_SHORT 16 - #define HOST_BITS_PER_INT 32 - #define HOST_BITS_PER_LONG 32 - #define HOST_BITS_PER_LONGLONG 64 - #define HOST_FLOAT_FORMAT IBM_FLOAT_FORMAT - #define HOST_EBCDIC 1 - - #define USG - #ifndef MVS - #define MVS - #endif - - /* Target machine dependencies. tm.h is a symbolic link to the actual - target specific file. */ - - #include "tm.h" - - /* Arguments to use with `exit'. */ - - #define SUCCESS_EXIT_CODE 0 - #define FATAL_EXIT_CODE 12 - - #define NO_DBX_FORMAT - --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i370/xm-linux.h gcc-3.1/gcc/config/i370/xm-linux.h *** gcc-3.0.4/gcc/config/i370/xm-linux.h Thu Mar 15 19:02:03 2001 --- gcc-3.1/gcc/config/i370/xm-linux.h Thu Jan 1 00:00:00 1970 *************** *** 1,63 **** - /* Configuration for GNU C-compiler for System/370. - Copyright (C) 1989, 1993, 1997 Free Software Foundation, Inc. - Contributed by Jan Stein (jan@cd.chalmers.se). - Modified for OS/390 OpenEdition by Dave Pitts (dpitts@cozx.com) - Modified for 390/Linux by Linas Vepstas (linas@linas.org) - - 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. */ - - /* #defines that need visibility everywhere. */ - - #define USE_STDARGS 1 - #define USE_PROTOTYPES 1 - - /* This describes the machine the compiler is hosted on. */ - - #define HOST_BITS_PER_CHAR 8 - #define HOST_BITS_PER_SHORT 16 - #define HOST_BITS_PER_INT 32 - #define HOST_BITS_PER_LONG 32 - #define HOST_BITS_PER_LONGLONG 64 - #define HOST_FLOAT_FORMAT IEEE_FLOAT_FORMAT - - #define HOST_WORDS_BIG_ENDIAN - - /* If not compiled with GNU C, use the C alloca and use only int bitfields. */ - #ifndef __GNUC__ - #define USE_C_ALLOCA - #if __STDC__ - extern void *alloca (); - #else - extern char *alloca (); - #endif - #define ONLY_INT_FIELDS - #endif - - // #define USG - - /* Target machine dependencies. tm.h is a symbolic link to the actual - target specific file. */ - - #include "tm.h" - - /* Arguments to use with `exit'. */ - #define SUCCESS_EXIT_CODE 0 - #define FATAL_EXIT_CODE 12 - - // #define NO_DBX_FORMAT - --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i370/xm-mvs.h gcc-3.1/gcc/config/i370/xm-mvs.h *** gcc-3.0.4/gcc/config/i370/xm-mvs.h Thu Mar 15 19:02:03 2001 --- gcc-3.1/gcc/config/i370/xm-mvs.h Thu Jan 1 00:00:00 1970 *************** *** 1,49 **** - /* Configuration for GNU C-compiler for System/370. - Copyright (C) 1989, 1993, 1997 Free Software Foundation, Inc. - Contributed by Jan Stein (jan@cd.chalmers.se). - Modified for OS/390 LanguageEnvironment C by Dave Pitts (dpitts@cozx.com) - - This file is part of GNU CC. - - GNU CC is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU CC is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNU CC; see the file COPYING. If not, write to - the Free Software Foundation, 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - - /* This describes the machine the compiler is hosted on. */ - - #define HOST_BITS_PER_CHAR 8 - #define HOST_BITS_PER_SHORT 16 - #define HOST_BITS_PER_INT 32 - #define HOST_BITS_PER_LONG 32 - #define HOST_BITS_PER_LONGLONG 64 - #define HOST_FLOAT_FORMAT IBM_FLOAT_FORMAT - #define HOST_EBCDIC 1 - - #define USG - #ifndef MVS - #define MVS - #endif - - /* Target machine dependencies. tm.h is a symbolic link to the actual - target specific file. */ - - #include "tm.h" - - /* Arguments to use with `exit'. */ - - #define SUCCESS_EXIT_CODE 0 - #define FATAL_EXIT_CODE 12 - - #define NO_DBX_FORMAT - --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i370/xm-oe.h gcc-3.1/gcc/config/i370/xm-oe.h *** gcc-3.0.4/gcc/config/i370/xm-oe.h Thu Mar 15 19:02:03 2001 --- gcc-3.1/gcc/config/i370/xm-oe.h Thu Jan 1 00:00:00 1970 *************** *** 1,53 **** - /* Configuration for GNU C-compiler for System/370. - Copyright (C) 1989, 1993, 1997 Free Software Foundation, Inc. - Contributed by Jan Stein (jan@cd.chalmers.se). - Modified for OS/390 OpenEdition by Dave Pitts (dpitts@cozx.com) - - This file is part of GNU CC. - - GNU CC is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU CC is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNU CC; see the file COPYING. If not, write to - the Free Software Foundation, 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - - /* #defines that need visibility everywhere. */ - - #define USE_STDARGS 1 - #define USE_PROTOTYPES 1 - - /* This describes the machine the compiler is hosted on. */ - - #define HOST_BITS_PER_CHAR 8 - #define HOST_BITS_PER_SHORT 16 - #define HOST_BITS_PER_INT 32 - #define HOST_BITS_PER_LONG 32 - #define HOST_BITS_PER_LONGLONG 32 - #define HOST_FLOAT_FORMAT IBM_FLOAT_FORMAT - #define HOST_EBCDIC 1 - - #define ONLY_INT_FIELDS 1 - - #define USG - - /* Target machine dependencies. tm.h is a symbolic link to the actual - target specific file. */ - - #include "tm.h" - - /* Arguments to use with `exit'. */ - - #define SUCCESS_EXIT_CODE 0 - #define FATAL_EXIT_CODE 12 - - #define NO_DBX_FORMAT - --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/386bsd.h gcc-3.1/gcc/config/i386/386bsd.h *** gcc-3.0.4/gcc/config/i386/386bsd.h Thu Nov 2 23:29:09 2000 --- gcc-3.1/gcc/config/i386/386bsd.h Wed Oct 17 01:39:46 2001 *************** *** 5,13 **** #include "i386/gstabs.h" - /* Get perform_* macros to build libgcc.a. */ - #include "i386/perform.h" - #undef CPP_PREDEFINES #define CPP_PREDEFINES "-Dunix -D____386BSD____ -D__386BSD__ -DBSD_NET2 -Asystem=unix -Asystem=bsd" --- 5,10 ---- *************** *** 50,71 **** #undef ASM_APP_OFF #define ASM_APP_OFF "#NO_APP\n" - - /* The following macros are stolen from i386v4.h */ - /* These have to be defined to get PIC code correct */ - - /* This is 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) - - /* Indicate that jump tables go in the text section. This is - necessary when compiling PIC code. */ - - #define JUMP_TABLES_IN_TEXT_SECTION 1 /* Don't default to pcc-struct-return, because gcc is the only compiler, and we want to retain compatibility with older gcc versions. */ --- 47,52 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/aix386.h gcc-3.1/gcc/config/i386/aix386.h *** gcc-3.0.4/gcc/config/i386/aix386.h Mon Sep 25 09:16:37 2000 --- gcc-3.1/gcc/config/i386/aix386.h Thu Aug 9 22:33:23 2001 *************** Boston, MA 02111-1307, USA. */ *** 60,69 **** asm ("pushl $0") #define CTOR_LIST_END CTOR_LIST_BEGIN ! #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ ! do { \ ! init_section (); \ ! fprintf (FILE, "\tpushl $"); \ ! assemble_name (FILE, NAME); \ ! fprintf (FILE, "\n"); \ ! } while (0) --- 60,64 ---- asm ("pushl $0") #define CTOR_LIST_END CTOR_LIST_BEGIN ! #undef TARGET_ASM_CONSTRUCTOR ! #define TARGET_ASM_CONSTRUCTOR ix86_svr3_asm_out_constructor diff -Nrc3pad gcc-3.0.4/gcc/config/i386/aix386ng.h gcc-3.1/gcc/config/i386/aix386ng.h *** gcc-3.0.4/gcc/config/i386/aix386ng.h Thu Nov 2 23:29:09 2000 --- gcc-3.1/gcc/config/i386/aix386ng.h Thu Aug 9 22:33:23 2001 *************** Boston, MA 02111-1307, USA. */ *** 106,113 **** # undef FINI_SECTION_ASM_OP # undef CTORS_SECTION_ASM_OP # undef DTORS_SECTION_ASM_OP ! # undef ASM_OUTPUT_CONSTRUCTOR ! # undef ASM_OUTPUT_DESTRUCTOR # undef DO_GLOBAL_CTORS_BODY # undef CTOR_LIST_BEGIN --- 106,113 ---- # undef FINI_SECTION_ASM_OP # undef CTORS_SECTION_ASM_OP # undef DTORS_SECTION_ASM_OP ! # undef TARGET_ASM_CONSTRUCTOR ! # undef TARGET_ASM_DESTRUCTOR # undef DO_GLOBAL_CTORS_BODY # undef CTOR_LIST_BEGIN diff -Nrc3pad gcc-3.0.4/gcc/config/i386/att.h gcc-3.1/gcc/config/i386/att.h *** gcc-3.0.4/gcc/config/i386/att.h Sun May 20 19:49:17 2001 --- gcc-3.1/gcc/config/i386/att.h Tue Dec 18 15:41:09 2001 *************** Boston, MA 02111-1307, USA. */ *** 32,48 **** #define ASM_SHORT "\t.value\t" #define ASM_LONG "\t.long\t" /* How to output an ASCII string constant. */ ! #define ASM_OUTPUT_ASCII(FILE, p, size) \ do \ ! { int i = 0; \ ! while (i < (size)) \ { if (i%10 == 0) { if (i!=0) fprintf ((FILE), "\n"); \ ! fprintf ((FILE), "%s", ASM_BYTE_OP); } \ else fprintf ((FILE), ","); \ ! fprintf ((FILE), "0x%x", ((p)[i++] & 0377)) ;} \ fprintf ((FILE), "\n"); \ } while (0) --- 32,49 ---- #define ASM_SHORT "\t.value\t" #define ASM_LONG "\t.long\t" + #define ASM_QUAD "\t.quad\t" /* Should not be used for 32bit compilation. */ /* How to output an ASCII string constant. */ ! #define ASM_OUTPUT_ASCII(FILE, PTR, SIZE) \ do \ ! { size_t i = 0, limit = (SIZE); \ ! while (i < limit) \ { if (i%10 == 0) { if (i!=0) fprintf ((FILE), "\n"); \ ! fputs ("\t.byte\t", (FILE)); } \ else fprintf ((FILE), ","); \ ! fprintf ((FILE), "0x%x", ((PTR)[i++] & 0377)) ;} \ fprintf ((FILE), "\n"); \ } while (0) *************** do \ *** 52,58 **** #define ASM_FILE_START(FILE) \ do { \ output_file_directive (FILE, main_input_filename); \ ! if (target_flags & MASK_INTEL_SYNTAX) \ fputs ("\t.intel_syntax\n", FILE); \ } while (0) --- 53,59 ---- #define ASM_FILE_START(FILE) \ do { \ output_file_directive (FILE, main_input_filename); \ ! if (ix86_asm_dialect == ASM_INTEL) \ fputs ("\t.intel_syntax\n", FILE); \ } while (0) *************** do \ *** 90,96 **** #undef ASM_GENERATE_INTERNAL_LABEL #define ASM_GENERATE_INTERNAL_LABEL(BUF,PREFIX,NUMBER) \ ! sprintf ((BUF), "%s%s%d", LOCAL_LABEL_PREFIX, (PREFIX), (NUMBER)) /* This is how to output an internal numbered label where PREFIX is the class of label and NUM is the number within the class. */ --- 91,97 ---- #undef ASM_GENERATE_INTERNAL_LABEL #define ASM_GENERATE_INTERNAL_LABEL(BUF,PREFIX,NUMBER) \ ! sprintf ((BUF), "%s%s%ld", LOCAL_LABEL_PREFIX, (PREFIX), (long)(NUMBER)) /* This is how to output an internal numbered label where PREFIX is the class of label and NUM is the number within the class. */ *************** do \ *** 99,105 **** #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \ fprintf (FILE, "%s%s%d:\n", LOCAL_LABEL_PREFIX, PREFIX, NUM) ! /* The prefix to add to user-visible assembler symbols. */ #undef USER_LABEL_PREFIX #define USER_LABEL_PREFIX "" --- 100,106 ---- #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \ fprintf (FILE, "%s%s%d:\n", LOCAL_LABEL_PREFIX, PREFIX, NUM) ! /* The prefix to add to user-visible assembler symbols. */ #undef USER_LABEL_PREFIX #define USER_LABEL_PREFIX "" diff -Nrc3pad gcc-3.0.4/gcc/config/i386/beos-elf.h gcc-3.1/gcc/config/i386/beos-elf.h *** gcc-3.0.4/gcc/config/i386/beos-elf.h Mon Apr 16 18:25:49 2001 --- gcc-3.1/gcc/config/i386/beos-elf.h Mon Nov 19 18:30:00 2001 *************** *** 1,5 **** /* Definitions for Intel x86 running BeOS ! Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,5 ---- /* Definitions for Intel x86 running BeOS ! Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of GNU CC. *************** along with GNU CC; see the file COPYING. *** 18,26 **** the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - #include /* Base i386 target machine definitions */ - #include /* Use the i386 AT&T assembler syntax */ - #include /* some common stuff */ #undef TARGET_VERSION #define TARGET_VERSION fprintf (stderr, " (i386 BeOS/ELF)"); --- 18,23 ---- *************** Boston, MA 02111-1307, USA. */ *** 37,55 **** #undef ASM_COMMENT_START #define ASM_COMMENT_START " #" - /* This is 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) - - /* Indicate that jump tables go in the text section. This is - necessary when compiling PIC code. */ - #define JUMP_TABLES_IN_TEXT_SECTION (flag_pic) - #undef DBX_REGISTER_NUMBER ! #define DBX_REGISTER_NUMBER(n) svr4_dbx_register_map[n] /* Output assembler code to FILE to increment profiler label # LABELNO for profiling a function entry. */ --- 34,42 ---- #undef ASM_COMMENT_START #define ASM_COMMENT_START " #" #undef DBX_REGISTER_NUMBER ! #define DBX_REGISTER_NUMBER(n) \ ! (TARGET_64BIT ? dbx64_register_map[n] : svr4_dbx_register_map[n]) /* Output assembler code to FILE to increment profiler label # LABELNO for profiling a function entry. */ *************** Boston, MA 02111-1307, USA. */ *** 97,103 **** /* BeOS uses lots of multichars, so don't warn about them unless the user explicitly asks for the warnings with -Wmultichar. Note that ! CC1_SPEC is used for both cc1 and cc1plus. */ #undef CC1_SPEC #define CC1_SPEC "%{!no-fpic:%{!fPIC:-fpic}} %{!Wmultichar: -Wno-multichar} %(cc1_cpu) %{profile:-p}" --- 84,90 ---- /* BeOS uses lots of multichars, so don't warn about them unless the user explicitly asks for the warnings with -Wmultichar. Note that ! CC1_SPEC is used for both cc1 and cc1plus. */ #undef CC1_SPEC #define CC1_SPEC "%{!no-fpic:%{!fPIC:-fpic}} %{!Wmultichar: -Wno-multichar} %(cc1_cpu) %{profile:-p}" *************** Boston, MA 02111-1307, USA. */ *** 108,116 **** /* Provide a LINK_SPEC appropriate for BeOS. Here we provide support for the special GCC options -static and -shared, which allow us to link things in one of these three modes by applying the appropriate ! combinations of options at link-time. */ ! /* If ELF is the default format, we should not use /lib/elf. */ #undef LINK_SPEC #define LINK_SPEC "%{!o*:-o %b} -m elf_i386_be -shared -Bsymbolic %{nostart:-e 0}" --- 95,103 ---- /* Provide a LINK_SPEC appropriate for BeOS. Here we provide support for the special GCC options -static and -shared, which allow us to link things in one of these three modes by applying the appropriate ! combinations of options at link-time. */ ! /* If ELF is the default format, we should not use /lib/elf. */ #undef LINK_SPEC #define LINK_SPEC "%{!o*:-o %b} -m elf_i386_be -shared -Bsymbolic %{nostart:-e 0}" *************** Boston, MA 02111-1307, USA. */ *** 133,141 **** #undef ENDFILE_SPEC #define ENDFILE_SPEC "crtend.o%s crtn.o%s" - /* Get perform_* macros to build libgcc.a. */ - #include "i386/perform.h" - /* A C statement (sans semicolon) to output to the stdio stream FILE the assembler definition of uninitialized global DECL named NAME whose size is SIZE bytes and alignment is ALIGN bytes. --- 120,125 ---- *************** Boston, MA 02111-1307, USA. */ *** 204,210 **** { "/boot/develop/headers/posix", 0, 0, 0 },\ { "/boot/develop/headers", 0, 0, 0 }, \ { 0, 0, 0, 0 } \ ! }; #else /* CROSS_COMPILE */ #undef INCLUDE_DEFAULTS #define INCLUDE_DEFAULTS \ --- 188,194 ---- { "/boot/develop/headers/posix", 0, 0, 0 },\ { "/boot/develop/headers", 0, 0, 0 }, \ { 0, 0, 0, 0 } \ ! } #else /* CROSS_COMPILE */ #undef INCLUDE_DEFAULTS #define INCLUDE_DEFAULTS \ *************** Boston, MA 02111-1307, USA. */ *** 246,252 **** { CROSS_INCLUDE_DIR "/posix", 0, 0, 0 },\ { CROSS_INCLUDE_DIR , 0, 0, 0 }, \ { 0, 0, 0, 0 } \ ! }; #endif /* Whee. LIBRARY_PATH is Be's LD_LIBRARY_PATH, which of course will --- 230,236 ---- { CROSS_INCLUDE_DIR "/posix", 0, 0, 0 },\ { CROSS_INCLUDE_DIR , 0, 0, 0 }, \ { 0, 0, 0, 0 } \ ! } #endif /* Whee. LIBRARY_PATH is Be's LD_LIBRARY_PATH, which of course will diff -Nrc3pad gcc-3.0.4/gcc/config/i386/biarch64.h gcc-3.1/gcc/config/i386/biarch64.h *** gcc-3.0.4/gcc/config/i386/biarch64.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/i386/biarch64.h Tue Oct 2 10:59:38 2001 *************** *** 0 **** --- 1,25 ---- + /* Make configure files to produce biarch compiler defaulting to 64bit mode. + This file must be included very first, while the OS specific file later + to overwrite otherwise wrong defaults. + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Bo Thorsen . + + 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. */ + + #define TARGET_64BIT_DEFAULT + #define TARGET_BI_ARCH diff -Nrc3pad gcc-3.0.4/gcc/config/i386/bsd.h gcc-3.1/gcc/config/i386/bsd.h *** gcc-3.0.4/gcc/config/i386/bsd.h Sun May 20 19:49:17 2001 --- gcc-3.1/gcc/config/i386/bsd.h Mon Dec 17 15:05:32 2001 *************** Boston, MA 02111-1307, USA. */ *** 40,48 **** /* Assembler pseudos to introduce constants of various size. */ - #define ASM_BYTE_OP "\t.byte\t" #define ASM_SHORT "\t.word\t" #define ASM_LONG "\t.long\t" /* Output at beginning of assembler file. ??? I am skeptical of this -- RMS. */ --- 40,48 ---- /* Assembler pseudos to introduce constants of various size. */ #define ASM_SHORT "\t.word\t" #define ASM_LONG "\t.long\t" + #define ASM_QUAD "\t.quad\t" /* Should not be used for 32bit compilation. */ /* Output at beginning of assembler file. ??? I am skeptical of this -- RMS. */ *************** Boston, MA 02111-1307, USA. */ *** 95,104 **** #ifdef NO_UNDERSCORES #define ASM_GENERATE_INTERNAL_LABEL(BUF,PREFIX,NUMBER) \ ! sprintf ((BUF), "*.%s%d", (PREFIX), (NUMBER)) #else #define ASM_GENERATE_INTERNAL_LABEL(BUF,PREFIX,NUMBER) \ ! sprintf ((BUF), "*%s%d", (PREFIX), (NUMBER)) #endif /* This is how to output an internal numbered label where --- 95,104 ---- #ifdef NO_UNDERSCORES #define ASM_GENERATE_INTERNAL_LABEL(BUF,PREFIX,NUMBER) \ ! sprintf ((BUF), "*.%s%ld", (PREFIX), (long)(NUMBER)) #else #define ASM_GENERATE_INTERNAL_LABEL(BUF,PREFIX,NUMBER) \ ! sprintf ((BUF), "*%s%ld", (PREFIX), (long)(NUMBER)) #endif /* This is how to output an internal numbered label where *************** Boston, MA 02111-1307, USA. */ *** 112,118 **** fprintf (FILE, "%s%d:\n", PREFIX, NUM) #endif ! /* The prefix to add to user-visible assembler symbols. */ #ifdef NO_UNDERSCORES #define USER_LABEL_PREFIX "" --- 112,118 ---- fprintf (FILE, "%s%d:\n", PREFIX, NUM) #endif ! /* The prefix to add to user-visible assembler symbols. */ #ifdef NO_UNDERSCORES #define USER_LABEL_PREFIX "" diff -Nrc3pad gcc-3.0.4/gcc/config/i386/bsd386.h gcc-3.1/gcc/config/i386/bsd386.h *** gcc-3.0.4/gcc/config/i386/bsd386.h Thu Nov 2 23:29:09 2000 --- gcc-3.1/gcc/config/i386/bsd386.h Wed Oct 31 14:32:27 2001 *************** *** 1,9 **** /* Configuration for an i386 running BSDI's BSD/OS (formerly known as BSD/386) as the target machine. */ ! #include "i386/386bsd.h" ! ! /* We exist mostly to add -Dbsdi and such to the predefines. */ #undef CPP_PREDEFINES #define CPP_PREDEFINES "-Dunix -Dbsdi -D____386BSD____ -D__386BSD__\ --- 1,7 ---- /* Configuration for an i386 running BSDI's BSD/OS (formerly known as BSD/386) as the target machine. */ ! /* We exist mostly to add -Dbsdi and such to the predefines. */ #undef CPP_PREDEFINES #define CPP_PREDEFINES "-Dunix -Dbsdi -D____386BSD____ -D__386BSD__\ diff -Nrc3pad gcc-3.0.4/gcc/config/i386/chorus.h gcc-3.1/gcc/config/i386/chorus.h *** gcc-3.0.4/gcc/config/i386/chorus.h Thu Feb 8 22:09:06 2001 --- gcc-3.1/gcc/config/i386/chorus.h Thu Jan 1 00:00:00 1970 *************** *** 1,45 **** - /* Definitions of target machine for GNU compiler. - Sun Chorus OS big-endian - Copyright (c) 2001 Free Software Foundation, Inc. - - This file is part of GNU CC. - - GNU CC is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU CC is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNU CC; see the file COPYING. If not, write to - the Free Software Foundation, 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - - #undef DWARF2_DEBUGGING_INFO - #define DWARF2_DEBUGGING_INFO - - #undef PREFERRED_DEBUGGING_TYPE - #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG - - #undef TARGET_VERSION - #define TARGET_VERSION fprintf (stderr, " (IA-32 Sun Chorus OS Embedded)"); - - #undef SIZE_TYPE - #define SIZE_TYPE "unsigned int" - - #undef PTRDIFF_TYPE - #define PTRDIFF_TYPE "int" - - /* Type used for wchar_t, as a string used in a declaration. */ - #undef WCHAR_TYPE - #define WCHAR_TYPE "int" - - #undef LINK_SPEC - #define LINK_SPEC "-r" - - #undef LIB_SPEC - #define LIB_SPEC "" --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/config-nt.sed gcc-3.1/gcc/config/i386/config-nt.sed *** gcc-3.0.4/gcc/config/i386/config-nt.sed Wed Dec 16 21:03:10 1998 --- gcc-3.1/gcc/config/i386/config-nt.sed Thu Jan 1 00:00:00 1970 *************** *** 1,38 **** - /^Makefile/,/^ rm -f config.run/d - s/rm -f/del/ - s/|| cp/|| copy/ - /^config.status/,/ fi/d - s/config.status//g - s/\/dev\/null/NUL/g - s/$(srcdir)\/c-parse/c-parse/g - s/$(srcdir)\/c-gperf/c-gperf/g - /^multilib.h/ s/multilib/not-multilib/ - /^target=/ c\ - target=winnt3.5 - /^xmake_file=/ d - /^tmake_file=/ d - /^out_file/ c\ - out_file=config/i386/i386.c - /^out_object_file/ c\ - out_object_file=i386.obj - /^md_file/ c\ - md_file=config/i386/i386.md - /^tm_file/ c\ - tm_file=config/i386/win-nt.h - /^build_xm_file/ c\ - build_xm_file=config/i386/xm-winnt.h - /^host_xm_file/ c\ - host_xm_file=config/i386/xm-winnt.h - /^####target/ i\ - CC = cl \ - CLIB = libc.lib kernel32.lib \ - CFLAGS = -Di386 -DWIN32 -D_WIN32 -D_M_IX86=300 -D_X86_=1 \\\ - -DALMOST_STDC -D_MSC_VER=800 \ - LDFLAGS = -align:0x1000 -subsystem:console -entry:mainCRTStartup \\\ - -stack:1000000,1000 \ - \ - EXTRA_OBJS=winnt.obj \ - winnt.obj: $(srcdir)/config/i386/winnt.c \ - \ $(CC) $(CFLAGS) \\\ - \ -I. -I$(srcdir) -I$(srcdir)/config -c $(srcdir)/config/i386/winnt.c \ - --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/crtdll.h gcc-3.1/gcc/config/i386/crtdll.h *** gcc-3.0.4/gcc/config/i386/crtdll.h Thu Nov 2 23:29:09 2000 --- gcc-3.1/gcc/config/i386/crtdll.h Wed Oct 31 14:32:27 2001 *************** *** 1,7 **** /* Operating system specific defines to be used when targeting GCC for ! hosting on Windows32, using GNU tools and the Windows32 API Library, ! as distinct from winnt.h, which is used to build GCC for use with a ! windows style library and tool set and uses the Microsoft tools. This variant uses CRTDLL.DLL insted of MSVCRTDLL.DLL. Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. --- 1,5 ---- /* Operating system specific defines to be used when targeting GCC for ! hosting on Windows32, using GNU tools and the Windows32 API Library. This variant uses CRTDLL.DLL insted of MSVCRTDLL.DLL. Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. *************** GNU General Public License for more deta *** 20,26 **** 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. */ #undef CPP_PREDEFINES #define CPP_PREDEFINES "-D_WIN32 -DWIN32 \ --- 18,24 ---- 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. */ #undef CPP_PREDEFINES #define CPP_PREDEFINES "-D_WIN32 -DWIN32 \ diff -Nrc3pad gcc-3.0.4/gcc/config/i386/cygwin.asm gcc-3.1/gcc/config/i386/cygwin.asm *** gcc-3.0.4/gcc/config/i386/cygwin.asm Wed Dec 16 21:03:13 1998 --- gcc-3.1/gcc/config/i386/cygwin.asm Wed Oct 31 14:32:27 2001 *************** *** 1,4 **** ! /* stuff needed for libgcc1 on win32. */ #ifdef L_chkstk --- 1,4 ---- ! /* stuff needed for libgcc on win32. */ #ifdef L_chkstk diff -Nrc3pad gcc-3.0.4/gcc/config/i386/cygwin.h gcc-3.1/gcc/config/i386/cygwin.h *** gcc-3.0.4/gcc/config/i386/cygwin.h Sat Nov 17 17:39:20 2001 --- gcc-3.1/gcc/config/i386/cygwin.h Thu Mar 21 00:24:03 2002 *************** *** 1,6 **** /* Operating system specific defines to be used when targeting GCC for hosting on Windows32, using a Unix style C library and tools. ! Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,6 ---- /* Operating system specific defines to be used when targeting GCC for hosting on Windows32, using a Unix style C library and tools. ! Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This file is part of GNU CC. *************** GNU General Public License for more deta *** 18,24 **** 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. */ #define YES_UNDERSCORES --- 18,24 ---- 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. */ #define YES_UNDERSCORES *************** Boston, MA 02111-1307, USA. */ *** 26,36 **** #define SDB_DEBUGGING_INFO #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG ! #include /* Required for FILE use below */ #include "i386/gas.h" #include "dbxcoff.h" ! /* Augment TARGET_SWITCHES with the cygwin/no-cygwin options. */ #define MASK_WIN32 0x40000000 /* Use -lming32 interface */ #define MASK_CYGWIN 0x20000000 /* Use -lcygwin interface */ #define MASK_WINDOWS 0x10000000 /* Use windows interface */ --- 26,38 ---- #define SDB_DEBUGGING_INFO #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG ! #define TARGET_EXECUTABLE_SUFFIX ".exe" ! ! #include #include "i386/gas.h" #include "dbxcoff.h" ! /* Augment TARGET_SWITCHES with the cygwin/no-cygwin options. */ #define MASK_WIN32 0x40000000 /* Use -lming32 interface */ #define MASK_CYGWIN 0x20000000 /* Use -lcygwin interface */ #define MASK_WINDOWS 0x10000000 /* Use windows interface */ *************** Boston, MA 02111-1307, USA. */ *** 89,94 **** --- 91,100 ---- "-idirafter /usr/include/mingw}" #endif + /* Get tree.c to declare a target-specific specialization of + merge_decl_attributes. */ + #define TARGET_DLLIMPORT_DECL_ATTRIBUTES + /* Support the __declspec keyword by turning them into attributes. We currently only support: dllimport and dllexport. Note that the current way we do this may result in a collision with *************** Boston, MA 02111-1307, USA. */ *** 108,116 **** %{mno-win32:%{mno-cygwin: %emno-cygwin and mno-win32 are not compatible}} \ %{mno-cygwin:-D__MSVCRT__ -D__MINGW32__ %{mthreads:-D_MT} "\ MINGW_INCLUDES "} \ ! %{!mno-cygwin:-D__CYGWIN32__ -D__CYGWIN__ -Dunix -D__unix__ -D__unix "\ CYGWIN_INCLUDES "}\ ! %{mwin32|mno-cygwin:-DWIN32 -D_WIN32 -D__WIN32 -D__WIN32__ -DWINNT}\ %{!mno-win32:" W32API_INC "}\ " --- 114,122 ---- %{mno-win32:%{mno-cygwin: %emno-cygwin and mno-win32 are not compatible}} \ %{mno-cygwin:-D__MSVCRT__ -D__MINGW32__ %{mthreads:-D_MT} "\ MINGW_INCLUDES "} \ ! %{!mno-cygwin:-D__CYGWIN32__ -D__CYGWIN__ %{!ansi:-Dunix} -D__unix__ -D__unix "\ CYGWIN_INCLUDES "}\ ! %{mwin32|mno-cygwin:-DWIN32 -D_WIN32 -D__WIN32 -D__WIN32__ %{!ansi:-DWINNT}}\ %{!mno-win32:" W32API_INC "}\ " *************** Boston, MA 02111-1307, USA. */ *** 124,130 **** /* Normally, -lgcc is not needed since everything in it is in the DLL, but we want to allow things to be added to it when installing new versions of GCC without making a new CYGWIN.DLL, so we leave it. Profiling is handled ! by calling the init function from the prologue. */ #undef LIBGCC_SPEC #define LIBGCC_SPEC "%{mno-cygwin: %{mthreads:-lmingwthrd} -lmingw32} -lgcc %{mno-cygwin:-lmoldname -lmsvcrt}" --- 130,136 ---- /* Normally, -lgcc is not needed since everything in it is in the DLL, but we want to allow things to be added to it when installing new versions of GCC without making a new CYGWIN.DLL, so we leave it. Profiling is handled ! by calling the init function from the prologue. */ #undef LIBGCC_SPEC #define LIBGCC_SPEC "%{mno-cygwin: %{mthreads:-lmingwthrd} -lmingw32} -lgcc %{mno-cygwin:-lmoldname -lmsvcrt}" *************** Boston, MA 02111-1307, USA. */ *** 181,219 **** /* Enable parsing of #pragma pack(push,) and #pragma pack(pop). */ #define HANDLE_PRAGMA_PACK_PUSH_POP 1 - /* A C expression whose value is nonzero if IDENTIFIER with arguments ARGS - is a valid machine specific attribute for DECL. - The attributes in ATTRIBUTES have previously been assigned to DECL. */ - union tree_node; #define TREE union tree_node * - #undef VALID_MACHINE_DECL_ATTRIBUTE - #define VALID_MACHINE_DECL_ATTRIBUTE(DECL, ATTRIBUTES, IDENTIFIER, ARGS) \ - i386_pe_valid_decl_attribute_p (DECL, ATTRIBUTES, IDENTIFIER, ARGS) - extern int i386_pe_valid_decl_attribute_p PARAMS ((TREE, TREE, TREE, TREE)); - - /* A C expression whose value is nonzero if IDENTIFIER with arguments ARGS - is a valid machine specific attribute for TYPE. - The attributes in ATTRIBUTES have previously been assigned to TYPE. */ - - #undef VALID_MACHINE_TYPE_ATTRIBUTE - #define VALID_MACHINE_TYPE_ATTRIBUTE(TYPE, ATTRIBUTES, IDENTIFIER, ARGS) \ - i386_pe_valid_type_attribute_p (TYPE, ATTRIBUTES, IDENTIFIER, ARGS) - extern int i386_pe_valid_type_attribute_p PARAMS ((TREE, TREE, TREE, TREE)); - - extern union tree_node *i386_pe_merge_decl_attributes PARAMS ((TREE, TREE)); - #define MERGE_MACHINE_DECL_ATTRIBUTES(OLD, NEW) \ - i386_pe_merge_decl_attributes ((OLD), (NEW)) - extern TREE i386_pe_merge_decl_attributes PARAMS ((TREE, TREE)); - /* Used to implement dllexport overriding dllimport semantics. It's also used to handle vtables - the first pass won't do anything because DECL_CONTEXT (DECL) will be 0 so i386_pe_dll{ex,im}port_p will return 0. It's also used to handle dllimport override semantics. */ #if 0 #define REDO_SECTION_INFO_P(DECL) \ ! ((DECL_MACHINE_ATTRIBUTES (DECL) != NULL_TREE) \ || (TREE_CODE (DECL) == VAR_DECL && DECL_VIRTUAL_P (DECL))) #else #define REDO_SECTION_INFO_P(DECL) 1 --- 187,202 ---- /* Enable parsing of #pragma pack(push,) and #pragma pack(pop). */ #define HANDLE_PRAGMA_PACK_PUSH_POP 1 union tree_node; #define TREE union tree_node * /* Used to implement dllexport overriding dllimport semantics. It's also used to handle vtables - the first pass won't do anything because DECL_CONTEXT (DECL) will be 0 so i386_pe_dll{ex,im}port_p will return 0. It's also used to handle dllimport override semantics. */ #if 0 #define REDO_SECTION_INFO_P(DECL) \ ! ((DECL_ATTRIBUTES (DECL) != NULL_TREE) \ || (TREE_CODE (DECL) == VAR_DECL && DECL_VIRTUAL_P (DECL))) #else #define REDO_SECTION_INFO_P(DECL) 1 *************** extern TREE i386_pe_merge_decl_attribute *** 221,259 **** #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_ctor, in_dtor, in_drectve #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ - CTOR_SECTION_FUNCTION \ - DTOR_SECTION_FUNCTION \ DRECTVE_SECTION_FUNCTION \ SWITCH_TO_SECTION_FUNCTION - #define CTOR_SECTION_FUNCTION \ - void \ - ctor_section () \ - { \ - if (in_section != in_ctor) \ - { \ - fprintf (asm_out_file, "\t.section .ctor\n"); \ - in_section = in_ctor; \ - } \ - } - void ctor_section PARAMS ((void)); - - #define DTOR_SECTION_FUNCTION \ - void \ - dtor_section () \ - { \ - if (in_section != in_dtor) \ - { \ - fprintf (asm_out_file, "\t.section .dtor\n"); \ - in_section = in_dtor; \ - } \ - } - void dtor_section PARAMS ((void)); - #define DRECTVE_SECTION_FUNCTION \ void \ drectve_section () \ --- 204,216 ---- #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_drectve #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ DRECTVE_SECTION_FUNCTION \ SWITCH_TO_SECTION_FUNCTION #define DRECTVE_SECTION_FUNCTION \ void \ drectve_section () \ *************** switch_to_section (section, decl) \ *** 284,314 **** case in_text: text_section (); break; \ case in_data: data_section (); break; \ case in_named: named_section (decl, NULL, 0); break; \ - case in_ctor: ctor_section (); break; \ - case in_dtor: dtor_section (); break; \ case in_drectve: drectve_section (); break; \ default: abort (); break; \ } \ } - #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ - do { \ - ctor_section (); \ - fputs (ASM_LONG, FILE); \ - assemble_name (FILE, NAME); \ - fprintf (FILE, "\n"); \ - } while (0) - - #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \ - do { \ - dtor_section (); \ - fputs (ASM_LONG, FILE); \ - assemble_name (FILE, NAME); \ - fprintf (FILE, "\n"); \ - } while (0) - /* Don't allow flag_pic to propagate since gas may produce invalid code ! otherwise. */ #undef SUBTARGET_OVERRIDE_OPTIONS #define SUBTARGET_OVERRIDE_OPTIONS \ --- 241,253 ---- case in_text: text_section (); break; \ case in_data: data_section (); break; \ case in_named: named_section (decl, NULL, 0); break; \ case in_drectve: drectve_section (); break; \ default: abort (); break; \ } \ } /* Don't allow flag_pic to propagate since gas may produce invalid code ! otherwise. */ #undef SUBTARGET_OVERRIDE_OPTIONS #define SUBTARGET_OVERRIDE_OPTIONS \ *************** extern void i386_pe_encode_section_info *** 347,353 **** /* Utility used only in this file. */ #define I386_PE_STRIP_ENCODING(SYM_NAME) \ ! ((SYM_NAME) + ((SYM_NAME)[0] == '@' ? 3 : 0)) /* This macro gets just the user-specified name out of the string in a SYMBOL_REF. Discard --- 286,294 ---- /* Utility used only in this file. */ #define I386_PE_STRIP_ENCODING(SYM_NAME) \ ! ((SYM_NAME) + ((SYM_NAME)[0] == '@' \ ! ? ((SYM_NAME)[3] == '*' ? 4 : 3) : 0) \ ! + ((SYM_NAME)[0] == '*' ? 1 : 0)) /* This macro gets just the user-specified name out of the string in a SYMBOL_REF. Discard *************** do { \ *** 404,418 **** /* Emit code to check the stack when allocating more that 4000 ! bytes in one go. */ #define CHECK_STACK_LIMIT 4000 /* By default, target has a 80387, uses IEEE compatible arithmetic, and returns float values in the 387 and needs stack probes */ ! #undef TARGET_DEFAULT ! #define TARGET_DEFAULT \ (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS | MASK_STACK_PROBE) /* This is how to output an assembler line --- 345,359 ---- /* Emit code to check the stack when allocating more that 4000 ! bytes in one go. */ #define CHECK_STACK_LIMIT 4000 /* By default, target has a 80387, uses IEEE compatible arithmetic, and returns float values in the 387 and needs stack probes */ ! #undef TARGET_SUBTARGET_DEFAULT ! #define TARGET_SUBTARGET_DEFAULT \ (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS | MASK_STACK_PROBE) /* This is how to output an assembler line *************** do { \ *** 429,497 **** symbols must be explicitly imported from shared libraries (DLLs). */ #define MULTIPLE_SYMBOL_SPACES - #define UNIQUE_SECTION_P(DECL) DECL_ONE_ONLY (DECL) extern void i386_pe_unique_section PARAMS ((TREE, int)); #define UNIQUE_SECTION(DECL,RELOC) i386_pe_unique_section (DECL, RELOC) #define SUPPORTS_ONE_ONLY 1 ! /* A C statement to output something to the assembler file to switch to section ! NAME for object DECL which is either a FUNCTION_DECL, a VAR_DECL or ! NULL_TREE. Some target formats do not support arbitrary sections. Do not ! define this macro in such cases. */ ! #undef ASM_OUTPUT_SECTION_NAME ! #define ASM_OUTPUT_SECTION_NAME(STREAM, DECL, NAME, RELOC) \ ! do { \ ! static struct section_info \ ! { \ ! struct section_info *next; \ ! char *name; \ ! enum sect_enum {SECT_RW, SECT_RO, SECT_EXEC} type; \ ! } *sections; \ ! struct section_info *s; \ ! const char *mode; \ ! enum sect_enum type; \ ! \ ! for (s = sections; s; s = s->next) \ ! if (!strcmp (NAME, s->name)) \ ! break; \ ! \ ! if (DECL && TREE_CODE (DECL) == FUNCTION_DECL) \ ! type = SECT_EXEC, mode = "x"; \ ! else if (DECL && DECL_READONLY_SECTION (DECL, RELOC)) \ ! type = SECT_RO, mode = ""; \ ! else \ ! { \ ! type = SECT_RW; \ ! if (DECL && TREE_CODE (DECL) == VAR_DECL \ ! && lookup_attribute ("shared", DECL_MACHINE_ATTRIBUTES (DECL))) \ ! mode = "ws"; \ ! else \ ! mode = "w"; \ ! } \ ! \ ! if (s == 0) \ ! { \ ! s = (struct section_info *) xmalloc (sizeof (struct section_info)); \ ! s->name = xmalloc ((strlen (NAME) + 1) * sizeof (*NAME)); \ ! strcpy (s->name, NAME); \ ! s->type = type; \ ! s->next = sections; \ ! sections = s; \ ! fprintf (STREAM, ".section\t%s,\"%s\"\n", NAME, mode); \ ! /* Functions may have been compiled at various levels of \ ! optimization so we can't use `same_size' here. Instead, \ ! have the linker pick one. */ \ ! if ((DECL) && DECL_ONE_ONLY (DECL)) \ ! fprintf (STREAM, "\t.linkonce %s\n", \ ! TREE_CODE (DECL) == FUNCTION_DECL \ ! ? "discard" : "same_size"); \ ! } \ ! else \ ! { \ ! fprintf (STREAM, ".section\t%s,\"%s\"\n", NAME, mode); \ ! } \ ! } while (0) /* Write the extra assembler code needed to declare a function properly. If we are generating SDB debugging information, this --- 370,385 ---- symbols must be explicitly imported from shared libraries (DLLs). */ #define MULTIPLE_SYMBOL_SPACES extern void i386_pe_unique_section PARAMS ((TREE, int)); #define UNIQUE_SECTION(DECL,RELOC) i386_pe_unique_section (DECL, RELOC) #define SUPPORTS_ONE_ONLY 1 ! /* Switch into a generic section. */ ! #define TARGET_ASM_NAMED_SECTION i386_pe_asm_named_section ! ! /* Select attributes for named sections. */ ! #define TARGET_SECTION_TYPE_FLAGS i386_pe_section_type_flags /* Write the extra assembler code needed to declare a function properly. If we are generating SDB debugging information, this *************** do { \ *** 522,528 **** #define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, FUN) \ i386_pe_declare_function_type (FILE, XSTR (FUN, 0), 1) ! /* This says out to put a global symbol in the BSS section. */ #undef ASM_OUTPUT_ALIGNED_BSS #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ asm_output_aligned_bss ((FILE), (DECL), (NAME), (SIZE), (ALIGN)) --- 410,416 ---- #define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, FUN) \ i386_pe_declare_function_type (FILE, XSTR (FUN, 0), 1) ! /* This says out to put a global symbol in the BSS section. */ #undef ASM_OUTPUT_ALIGNED_BSS #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ asm_output_aligned_bss ((FILE), (DECL), (NAME), (SIZE), (ALIGN)) *************** do { \ *** 535,548 **** #undef ASM_COMMENT_START #define ASM_COMMENT_START " #" ! /* DWARF2 Unwinding doesn't work with exception handling yet. */ #define DWARF2_UNWIND_INFO 0 ! /* Don't assume anything about the header files. */ #define NO_IMPLICIT_EXTERN_C #define SUBTARGET_PROLOGUE \ ! if (profile_flag \ && MAIN_NAME_P (DECL_NAME (current_function_decl))) \ { \ emit_call_insn (gen_rtx (CALL, VOIDmode, \ --- 423,438 ---- #undef ASM_COMMENT_START #define ASM_COMMENT_START " #" ! /* DWARF2 Unwinding doesn't work with exception handling yet. To make it ! work, we need to build a libgcc_s.dll, and dcrt0.o should be changed to ! call __register_frame_info/__deregister_frame_info. */ #define DWARF2_UNWIND_INFO 0 ! /* Don't assume anything about the header files. */ #define NO_IMPLICIT_EXTERN_C #define SUBTARGET_PROLOGUE \ ! if (current_function_profile \ && MAIN_NAME_P (DECL_NAME (current_function_decl))) \ { \ emit_call_insn (gen_rtx (CALL, VOIDmode, \ *************** extern int i386_pe_dllimport_name_p PARA *** 573,580 **** #define BIGGEST_FIELD_ALIGNMENT 64 /* A bitfield declared as `int' forces `int' alignment for the struct. */ ! #undef PCC_BITFIELDS_TYPE_MATTERS ! #define PCC_BITFIELDS_TYPE_MATTERS 1 #define GROUP_BITFIELDS_BY_ALIGN TYPE_NATIVE(rec) --- 463,470 ---- #define BIGGEST_FIELD_ALIGNMENT 64 /* A bitfield declared as `int' forces `int' alignment for the struct. */ ! #undef PCC_BITFIELD_TYPE_MATTERS ! #define PCC_BITFIELD_TYPE_MATTERS 1 #define GROUP_BITFIELDS_BY_ALIGN TYPE_NATIVE(rec) *************** extern int i386_pe_dllimport_name_p PARA *** 583,590 **** #define SET_ASM_OP "\t.set\t" #endif ! /* Override GCC's relative pathname lookup unless otherwise told ! by other subtargets. */ #ifndef WIN32_NO_ABSOLUTE_INST_DIRS #undef MD_STARTFILE_PREFIX #define MD_STARTFILE_PREFIX "/usr/lib/" --- 473,480 ---- #define SET_ASM_OP "\t.set\t" #endif ! /* Override GCC's relative pathname lookup (ie., relocatability) unless ! otherwise told by other subtargets. */ #ifndef WIN32_NO_ABSOLUTE_INST_DIRS #undef MD_STARTFILE_PREFIX #define MD_STARTFILE_PREFIX "/usr/lib/" diff -Nrc3pad gcc-3.0.4/gcc/config/i386/dgux.c gcc-3.1/gcc/config/i386/dgux.c *** gcc-3.0.4/gcc/config/i386/dgux.c Mon Apr 16 18:25:49 2001 --- gcc-3.1/gcc/config/i386/dgux.c Thu Jan 1 00:00:00 1970 *************** *** 1,198 **** - /* Subroutines for GNU compiler for Intel 80x86 running DG/ux - Copyright (C) 1993, 1995, 1997, 1999, 2000 Free Software Foundation, Inc. - Currently maintained by (gcc@dg-rtp.dg.com) - - This file is part of GNU CC. - - GNU CC is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU CC is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNU CC; see the file COPYING. If not, write to - the Free Software Foundation, 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - - #include - #include "i386/i386.c" - - struct lang_independent_option - { - char *string; - int *variable; - int on_value; - char *description; - }; - - static int - output_option (file, sep, type, name, indent, pos, max) - FILE *file; - char *sep; - char *type; - char *name; - char *indent; - int pos; - int max; - { - if (strlen (sep) + strlen (type) + strlen (name) + pos > max) - { - fprintf (file, indent); - return fprintf (file, "%s%s", type, name); - } - return pos + fprintf (file, "%s%s%s", sep, type, name); - } - - static struct { - char *name; - int value; - const char * description; - } m_options[] = TARGET_SWITCHES; - - static void - output_options (file, f_options, f_len, W_options, W_len, - pos, max, sep, indent, term) - FILE *file; - struct lang_independent_option *f_options; - struct lang_independent_option *W_options; - int f_len, W_len; - int pos; - int max; - int sep; - char *indent; - char *term; - { - register int j; - - if (optimize) - pos = output_option (file, sep, "-O", "", indent, pos, max); - if (write_symbols != NO_DEBUG) - pos = output_option (file, sep, "-g", "", indent, pos, max); - /* if (flag_traditional) - pos = output_option (file, sep, "-traditional", "", indent, pos, max);*/ - if (profile_flag) - pos = output_option (file, sep, "-p", "", indent, pos, max); - if (profile_block_flag) - pos = output_option (file, sep, "-a", "", indent, pos, max); - - for (j = 0; j < f_len; j++) - if (*f_options[j].variable == f_options[j].on_value) - pos = output_option (file, sep, "-f", f_options[j].string, - indent, pos, max); - - for (j = 0; j < W_len; j++) - if (*W_options[j].variable == W_options[j].on_value) - pos = output_option (file, sep, "-W", W_options[j].string, - indent, pos, max); - - for (j = 0; j < ARRAY_SIZE (m_options); j++) - if (m_options[j].name[0] != '\0' - && m_options[j].value > 0 - && ((m_options[j].value & target_flags) - == m_options[j].value)) - pos = output_option (file, sep, "-m", m_options[j].name, - indent, pos, max); - - if (ix86_cpu_string) - pos = output_option (file, sep, "-mcpu=", ix86_cpu_string, - indent, pos, max); - if (ix86_arch_string) - pos = output_option (file, sep, "-march=", ix86_arch_string, - indent, pos, max); - fprintf (file, term); - } - - /* Output to FILE the start of the assembler file. */ - - void - output_file_start (file, f_options, f_len, W_options, W_len) - FILE *file; - struct lang_independent_option *f_options; - struct lang_independent_option *W_options; - int f_len, W_len; - { - register int pos; - - output_file_directive (file, main_input_filename); - fprintf (file, "\t.version\t\"01.01\"\n"); \ - /* Switch to the data section so that the coffsem symbol - isn't in the text section. */ - data_section (); - - pos = fprintf (file, "\n// cc1 (%s) arguments:", VERSION_STRING); - output_options (file, f_options, f_len, W_options, W_len, - pos, 75, " ", "\n// ", "\n\n"); - - #ifdef TARGET_IDENTIFY_REVISION - if (TARGET_IDENTIFY_REVISION) - { - char indent[256]; - - time_t now = time ((time_t *)0); - sprintf (indent, "]\"\n%s\"@(#)%s [", IDENT_ASM_OP, main_input_filename); - fprintf (file, indent+3); - pos = fprintf (file, "gcc %s, %.24s,", VERSION_STRING, ctime (&now)); - output_options (file, f_options, f_len, W_options, W_len, - pos, 150 - strlen (indent), " ", indent, "]\"\n\n"); - } - #endif /* TARGET_IDENTIFY_REVISION */ - } - - #ifndef CROSS_COMPILE - #if defined (_abort_aux) - /* Debugging aid to be registered via `atexit'. See the definition - of abort in dgux.h. */ - void - abort_aux () - { - extern int insn_; - extern char * file_; - extern int line_; - static int done; - rtx line_note; - - if (done++) - return; - if (file_ || line_) - { - if (write_symbols != NO_DEBUG) - { - for (line_note = (rtx) insn_ ; line_note != 0 ; line_note = PREV_INSN (line_note)) - if (GET_CODE (line_note) == NOTE && NOTE_LINE_NUMBER (line_note) > 0) - break; - if (line_note != 0) - { - error_with_file_and_line (NOTE_SOURCE_FILE (line_note), - NOTE_LINE_NUMBER (line_note), - "Internal gcc abort from %s:%d", - file_ ? file_ : "", line_); - if (insn_ && file_ && strcmp (file_, "toplev.c")) - { - error_with_file_and_line (NOTE_SOURCE_FILE (line_note), - NOTE_LINE_NUMBER (line_note), - "The local variable `insn' has the value:", 0); - debug_rtx ((rtx) insn_); - } - } - } - if (write_symbols == NO_DEBUG || line_note == 0) - { - error ("Internal gcc abort from %s:%d", - file_ ? file_ : "", line_); - if (insn_ && file_ && strcmp (file_, "toplev.c")) - { - error ("The local variable `insn' has the value:", 0); - debug_rtx ((rtx) insn_); - } - } - } - } - #endif - #endif - - --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/dgux.h gcc-3.1/gcc/config/i386/dgux.h *** gcc-3.0.4/gcc/config/i386/dgux.h Thu Nov 2 23:29:09 2000 --- gcc-3.1/gcc/config/i386/dgux.h Sat Nov 10 04:40:58 2001 *************** *** 1,5 **** /* Target definitions for GNU compiler for Intel 80x86 running DG/ux ! Copyright (C) 1993, 1995, 1996, 1997, 1998, 2000 Free Software Foundation, Inc. Currently maintained by gcc@dg-rtp.dg.com. --- 1,5 ---- /* Target definitions for GNU compiler for Intel 80x86 running DG/ux ! Copyright (C) 1993, 1995, 1996, 1997, 1998, 2000, 2001 Free Software Foundation, Inc. Currently maintained by gcc@dg-rtp.dg.com. *************** Boston, MA 02111-1307, USA. */ *** 24,33 **** few hacks */ - #include "i386/sysv4.h" - #ifndef VERSION_INFO2 ! #define VERSION_INFO2 "$Revision: 1.13 $" #endif #ifndef VERSION_STRING --- 24,31 ---- few hacks */ #ifndef VERSION_INFO2 ! #define VERSION_INFO2 "$Revision: 1.16 $" #endif #ifndef VERSION_STRING *************** Boston, MA 02111-1307, USA. */ *** 80,92 **** #undef DBX_DEBUGGING_INFO #define DBX_DEBUGGING_INFO #define PREFERRED_DEBUGGING_TYPE DWARF_DEBUG ! /* Override svr[34].h. */ #undef ASM_FILE_START #define ASM_FILE_START(FILE) \ ! output_file_start (FILE, f_options, ARRAY_SIZE (f_options), \ ! W_options, ARRAY_SIZE (W_options)) /* ix86 abi specified type for wchar_t */ --- 78,95 ---- #undef DBX_DEBUGGING_INFO #define DBX_DEBUGGING_INFO + #undef PREFERRED_DEBUGGING_TYPE #define PREFERRED_DEBUGGING_TYPE DWARF_DEBUG ! /* Override svr[34].h. Switch to the data section so that the coffsem ! symbol isn't in the text section. */ #undef ASM_FILE_START #define ASM_FILE_START(FILE) \ ! do { \ ! output_file_directive (FILE, main_input_filename); \ ! fprintf (FILE, "\t.version\t\"01.01\"\n"); \ ! data_section (); \ ! } while (0) /* ix86 abi specified type for wchar_t */ *************** Boston, MA 02111-1307, USA. */ *** 232,238 **** /* Must use data section for relocatable constants when pic. */ #undef SELECT_RTX_SECTION ! #define SELECT_RTX_SECTION(MODE,RTX) \ { \ if (flag_pic && symbolic_operand (RTX, VOIDmode)) \ data_section (); \ --- 235,241 ---- /* Must use data section for relocatable constants when pic. */ #undef SELECT_RTX_SECTION ! #define SELECT_RTX_SECTION(MODE,RTX,ALIGN) \ { \ if (flag_pic && symbolic_operand (RTX, VOIDmode)) \ data_section (); \ diff -Nrc3pad gcc-3.0.4/gcc/config/i386/djgpp-rtems.h gcc-3.1/gcc/config/i386/djgpp-rtems.h *** gcc-3.0.4/gcc/config/i386/djgpp-rtems.h Thu Nov 2 23:29:09 2000 --- gcc-3.1/gcc/config/i386/djgpp-rtems.h Wed Feb 13 22:48:52 2002 *************** *** 1,7 **** /* Configuration for an i386 running RTEMS on top of MS-DOS with DJGPP v2.x. ! Copyright (C) 1996,1999 Free Software Foundation, Inc. Contributed by Joel Sherrill (joel@OARcorp.com). This file is part of GNU CC. --- 1,7 ---- /* Configuration for an i386 running RTEMS on top of MS-DOS with DJGPP v2.x. ! Copyright (C) 1996, 1999, 2002 Free Software Foundation, Inc. Contributed by Joel Sherrill (joel@OARcorp.com). This file is part of GNU CC. *************** along with GNU CC; see the file COPYING. *** 21,40 **** the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - #include "i386/djgpp.h" - /* Specify predefined symbols in preprocessor. */ #ifdef CPP_PREDEFINES #undef CPP_PREDEFINES #endif ! #define CPP_PREDEFINES "-Dunix -DGO32 -DDJGPP=2 -DMSDOS \ -Asystem=unix -Asystem=msdos -Asystem=rtems" /* Generate calls to memcpy, memcmp and memset. */ #ifndef TARGET_MEM_FUNCTIONS #define TARGET_MEM_FUNCTIONS #endif - - /* end of i386/djgpp-rtems.h */ - --- 21,35 ---- the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Specify predefined symbols in preprocessor. */ #ifdef CPP_PREDEFINES #undef CPP_PREDEFINES #endif ! #define CPP_PREDEFINES "-Dunix -DGO32 -DDJGPP=2 -DMSDOS -D__rtems__ \ -Asystem=unix -Asystem=msdos -Asystem=rtems" /* Generate calls to memcpy, memcmp and memset. */ #ifndef TARGET_MEM_FUNCTIONS #define TARGET_MEM_FUNCTIONS #endif diff -Nrc3pad gcc-3.0.4/gcc/config/i386/djgpp.h gcc-3.1/gcc/config/i386/djgpp.h *** gcc-3.0.4/gcc/config/i386/djgpp.h Sun May 20 19:49:17 2001 --- gcc-3.1/gcc/config/i386/djgpp.h Sun Mar 31 18:26:21 2002 *************** Boston, MA 02111-1307, USA. */ *** 23,29 **** /* Support generation of DWARF2 debugging info. */ #define DWARF2_DEBUGGING_INFO ! /* Don't assume anything about the header files. */ #define NO_IMPLICIT_EXTERN_C #define HANDLE_SYSV_PRAGMA --- 23,29 ---- /* Support generation of DWARF2 debugging info. */ #define DWARF2_DEBUGGING_INFO ! /* Don't assume anything about the header files. */ #define NO_IMPLICIT_EXTERN_C #define HANDLE_SYSV_PRAGMA *************** Boston, MA 02111-1307, USA. */ *** 45,74 **** #undef BSS_SECTION_ASM_OP #define BSS_SECTION_ASM_OP "\t.section\t.bss" - /* Define the name of the .ctor section. */ - #undef CTORS_SECTION_ASM_OP - #define CTORS_SECTION_ASM_OP "\t.section .ctor" - /* Define the name of the .data section. */ #undef DATA_SECTION_ASM_OP #define DATA_SECTION_ASM_OP "\t.section .data" - /* Define the name of the .dtor section. */ - #undef DTORS_SECTION_ASM_OP - #define DTORS_SECTION_ASM_OP "\t.section .dtor" - - /* Define the name of the .eh_frame section. */ - #undef EH_FRAME_SECTION_ASM_OP - #define EH_FRAME_SECTION_ASM_OP "\t.section .eh_frame" - /* Define the name of the .ident op. */ #undef IDENT_ASM_OP #define IDENT_ASM_OP "\t.ident\t" - /* Define the name of the .int op. */ - #undef INT_ASM_OP - #define INT_ASM_OP "\t.long\t" - /* Enable alias attribute support. */ #ifndef SET_ASM_OP #define SET_ASM_OP "\t.set\t" --- 45,58 ---- *************** Boston, MA 02111-1307, USA. */ *** 78,95 **** #undef TEXT_SECTION_ASM_OP #define TEXT_SECTION_ASM_OP "\t.section .text" - /* How to output an unaligned integer. */ - #undef UNALIGNED_INT_ASM_OP - #define UNALIGNED_INT_ASM_OP "\t.long\t" - - /* How to output an unaligned double length integer. */ - #undef UNALIGNED_DOUBLE_INT_ASM_OP - #define UNALIGNED_DOUBLE_INT_ASM_OP "\t.quad\t" - - /* How to output an unaligned half length intenger. */ - #undef UNALIGNED_SHORT_ASM_OP - #define UNALIGNED_SHORT_ASM_OP "\t.short\t" - /* Define standard DJGPP installation paths. */ /* We override default /usr or /usr/local part with /dev/env/DJDIR which */ /* points to actual DJGPP instalation directory. */ --- 62,67 ---- *************** Boston, MA 02111-1307, USA. */ *** 98,104 **** #undef STANDARD_INCLUDE_DIR #define STANDARD_INCLUDE_DIR "/dev/env/DJDIR/include/" ! /* Search for as.exe and ld.exe in DJGPP's binary directory. */ #undef MD_EXEC_PREFIX #define MD_EXEC_PREFIX "/dev/env/DJDIR/bin/" --- 70,76 ---- #undef STANDARD_INCLUDE_DIR #define STANDARD_INCLUDE_DIR "/dev/env/DJDIR/include/" ! /* Search for as.exe and ld.exe in DJGPP's binary directory. */ #undef MD_EXEC_PREFIX #define MD_EXEC_PREFIX "/dev/env/DJDIR/bin/" *************** Boston, MA 02111-1307, USA. */ *** 151,215 **** unless user explicitly requests it. */ #undef LOCAL_INCLUDE_DIR ! /* Do not make only .exe if no executable file suffix was specified. */ ! /* Let the linker handle that. */ ! #undef NO_AUTO_EXE_SUFFIX ! #define NO_AUTO_EXE_SUFFIX ! ! #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_ctor, in_dtor ! ! #undef EXTRA_SECTION_FUNCTIONS ! #define EXTRA_SECTION_FUNCTIONS \ ! CTOR_SECTION_FUNCTION \ ! DTOR_SECTION_FUNCTION ! ! #define CTOR_SECTION_FUNCTION \ ! void \ ! ctor_section () \ ! { \ ! if (in_section != in_ctor) \ ! { \ ! fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP); \ ! in_section = in_ctor; \ ! } \ ! } ! ! #define DTOR_SECTION_FUNCTION \ ! void \ ! dtor_section () \ ! { \ ! if (in_section != in_dtor) \ ! { \ ! fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP); \ ! in_section = in_dtor; \ ! } \ ! } ! ! #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ ! do { \ ! ctor_section (); \ ! fputs (ASM_LONG, FILE); \ ! assemble_name (FILE, NAME); \ ! fprintf (FILE, "\n"); \ ! } while (0) ! ! /* Tell GCC how to output a section name. Add "x" for code sections. */ ! #define ASM_OUTPUT_SECTION_NAME(FILE, DECL, NAME, RELOC)\ ! do { \ ! if ((DECL) && TREE_CODE (DECL) == FUNCTION_DECL) \ ! fprintf ((FILE), "\t.section %s,\"x\"\n", (NAME)); \ ! else \ ! fprintf ((FILE), "\t.section %s\n", (NAME)); \ ! } while (0) ! ! #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \ ! do { \ ! dtor_section (); \ ! fputs (ASM_LONG, FILE); \ ! assemble_name (FILE, NAME); \ ! fprintf (FILE, "\n"); \ ! } while (0) /* Output at beginning of assembler file. */ /* The .file command should always begin the output. */ --- 123,130 ---- unless user explicitly requests it. */ #undef LOCAL_INCLUDE_DIR ! /* Switch into a generic section. */ ! #define TARGET_ASM_NAMED_SECTION default_coff_asm_named_section /* Output at beginning of assembler file. */ /* The .file command should always begin the output. */ *************** dtor_section () \ *** 273,280 **** #undef SUBTARGET_SWITCHES #define SUBTARGET_SWITCHES \ ! { "no-bnu210", -MASK_BNU210, "Ignored (obsolete)." }, \ ! { "bnu210", MASK_BNU210, "Ignored (obsolete)." }, /* Warn that -mbnu210 is now obsolete. */ #undef SUBTARGET_OVERRIDE_OPTIONS --- 188,195 ---- #undef SUBTARGET_SWITCHES #define SUBTARGET_SWITCHES \ ! { "no-bnu210", -MASK_BNU210, "Ignored (obsolete)" }, \ ! { "bnu210", MASK_BNU210, "Ignored (obsolete)" }, /* Warn that -mbnu210 is now obsolete. */ #undef SUBTARGET_OVERRIDE_OPTIONS *************** do \ *** 283,289 **** { \ if (target_flags & MASK_BNU210) \ { \ ! warning ("-mbnu210 is ignored (option is obsolete)."); \ } \ } \ while (0) --- 198,204 ---- { \ if (target_flags & MASK_BNU210) \ { \ ! warning ("-mbnu210 is ignored (option is obsolete)"); \ } \ } \ while (0) *************** while (0) *** 292,302 **** #undef MAKE_DECL_ONE_ONLY #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1) - /* Additional support for C++ templates and support for - garbage collection. */ - #undef UNIQUE_SECTION_P - #define UNIQUE_SECTION_P(DECL) (DECL_ONE_ONLY (DECL)) - #undef UNIQUE_SECTION #define UNIQUE_SECTION(DECL,RELOC) \ do { \ --- 207,212 ---- *************** do { \ *** 305,310 **** --- 215,222 ---- char *string; \ \ name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (DECL)); \ + /* Strip off any encoding in fnname. */ \ + STRIP_NAME_ENCODING (name, name); \ \ if (! DECL_ONE_ONLY (DECL)) \ { \ diff -Nrc3pad gcc-3.0.4/gcc/config/i386/freebsd-aout.h gcc-3.1/gcc/config/i386/freebsd-aout.h *** gcc-3.0.4/gcc/config/i386/freebsd-aout.h Sun Jul 22 20:50:46 2001 --- gcc-3.1/gcc/config/i386/freebsd-aout.h Wed Jan 23 00:56:28 2002 *************** *** 1,6 **** /* Definitions of target machine for GNU compiler for Intel 80386 running FreeBSD. ! Copyright (C) 1988, 1992, 1994, 1996, 1997, 1999, 2000 Free Software Foundation, Inc. Contributed by Poul-Henning Kamp --- 1,6 ---- /* Definitions of target machine for GNU compiler for Intel 80386 running FreeBSD. ! Copyright (C) 1988, 1992, 1994, 1996, 1997, 1999, 2000, 2002 Free Software Foundation, Inc. Contributed by Poul-Henning Kamp *************** Boston, MA 02111-1307, USA. */ *** 24,37 **** /* This is tested by i386gas.h. */ #define YES_UNDERSCORES ! /* Don't assume anything about the header files. */ #define NO_IMPLICIT_EXTERN_C #include "i386/gstabs.h" /* This goes away when the math-emulator is fixed */ ! #undef TARGET_DEFAULT ! #define TARGET_DEFAULT \ (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS | MASK_NO_FANCY_MATH_387) /* The macro defined in i386.h doesn't work with the old gas of --- 24,37 ---- /* This is tested by i386gas.h. */ #define YES_UNDERSCORES ! /* Don't assume anything about the header files. */ #define NO_IMPLICIT_EXTERN_C #include "i386/gstabs.h" /* This goes away when the math-emulator is fixed */ ! #undef TARGET_SUBTARGET_DEFAULT ! #define TARGET_SUBTARGET_DEFAULT \ (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS | MASK_NO_FANCY_MATH_387) /* The macro defined in i386.h doesn't work with the old gas of *************** Boston, MA 02111-1307, USA. */ *** 76,103 **** /* FreeBSD using a.out does not support DWARF2 unwinding mechanisms. */ #define DWARF2_UNWIND_INFO 0 - /* The following macros are stolen from i386v4.h */ - /* These have to be defined to get PIC code correct */ - - /* This is 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) - - /* Indicate that jump tables go in the text section. This is - necessary when compiling PIC code. */ - - #define JUMP_TABLES_IN_TEXT_SECTION 1 - /* Don't default to pcc-struct-return, because in FreeBSD we prefer the superior nature of the older gcc way. */ #define DEFAULT_PCC_STRUCT_RETURN 0 /* Ensure we the configuration knows our system correctly so we can link with ! libraries compiled with the native cc. */ #undef NO_DOLLAR_IN_LABEL /* i386 freebsd still uses old binutils that don't insert nops by default --- 76,87 ---- /* FreeBSD using a.out does not support DWARF2 unwinding mechanisms. */ #define DWARF2_UNWIND_INFO 0 /* Don't default to pcc-struct-return, because in FreeBSD we prefer the superior nature of the older gcc way. */ #define DEFAULT_PCC_STRUCT_RETURN 0 /* Ensure we the configuration knows our system correctly so we can link with ! libraries compiled with the native cc. */ #undef NO_DOLLAR_IN_LABEL /* i386 freebsd still uses old binutils that don't insert nops by default *************** do { *** 252,254 **** --- 236,242 ---- /* Define this so we can compile MS code for use with WINE. */ #define HANDLE_PRAGMA_PACK_PUSH_POP + + /* FreeBSD 2.2.7's assembler does not support .quad properly. Do not + use it. */ + #undef ASM_QUAD diff -Nrc3pad gcc-3.0.4/gcc/config/i386/freebsd.h gcc-3.1/gcc/config/i386/freebsd.h *** gcc-3.0.4/gcc/config/i386/freebsd.h Wed May 30 23:05:31 2001 --- gcc-3.1/gcc/config/i386/freebsd.h Fri Apr 12 01:58:38 2002 *************** *** 1,5 **** /* Definitions for Intel 386 running FreeBSD with ELF format ! Copyright (C) 1996, 2000 Free Software Foundation, Inc. Contributed by Eric Youngdale. Modified for stabs-in-ELF by H.J. Lu. Adapted from GNU/Linux version by John Polstra. --- 1,5 ---- /* Definitions for Intel 386 running FreeBSD with ELF format ! Copyright (C) 1996, 2000, 2002 Free Software Foundation, Inc. Contributed by Eric Youngdale. Modified for stabs-in-ELF by H.J. Lu. Adapted from GNU/Linux version by John Polstra. *************** along with GNU CC; see the file COPYING. *** 22,63 **** the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ! #undef TARGET_VERSION #define TARGET_VERSION fprintf (stderr, " (i386 FreeBSD/ELF)"); /* Override the default comment-starter of "/". */ ! #undef ASM_COMMENT_START #define ASM_COMMENT_START "#" ! #undef ASM_APP_ON #define ASM_APP_ON "#APP\n" ! #undef ASM_APP_OFF #define ASM_APP_OFF "#NO_APP\n" ! #undef SET_ASM_OP #define SET_ASM_OP "\t.set\t" ! /* This is 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) ! ! /* Indicate that jump tables go in the text section. This is ! necessary when compiling PIC code. */ ! #define JUMP_TABLES_IN_TEXT_SECTION (flag_pic) ! ! #undef DBX_REGISTER_NUMBER ! #define DBX_REGISTER_NUMBER(n) svr4_dbx_register_map[n] #undef NO_PROFILE_COUNTERS #define NO_PROFILE_COUNTERS /* Tell final.c that we don't need a label passed to mcount. */ ! #undef FUNCTION_PROFILER #define FUNCTION_PROFILER(FILE, LABELNO) \ { \ if (flag_pic) \ --- 22,54 ---- the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ! ! #undef TARGET_VERSION #define TARGET_VERSION fprintf (stderr, " (i386 FreeBSD/ELF)"); /* Override the default comment-starter of "/". */ ! #undef ASM_COMMENT_START #define ASM_COMMENT_START "#" ! #undef ASM_APP_ON #define ASM_APP_ON "#APP\n" ! #undef ASM_APP_OFF #define ASM_APP_OFF "#NO_APP\n" ! #undef SET_ASM_OP #define SET_ASM_OP "\t.set\t" ! #undef DBX_REGISTER_NUMBER ! #define DBX_REGISTER_NUMBER(n) \ ! (TARGET_64BIT ? dbx64_register_map[n] : svr4_dbx_register_map[n]) #undef NO_PROFILE_COUNTERS #define NO_PROFILE_COUNTERS /* Tell final.c that we don't need a label passed to mcount. */ ! #undef FUNCTION_PROFILER #define FUNCTION_PROFILER(FILE, LABELNO) \ { \ if (flag_pic) \ *************** Boston, MA 02111-1307, USA. */ *** 68,86 **** /* Make gcc agree with . */ ! #undef SIZE_TYPE #define SIZE_TYPE "unsigned int" ! #undef PTRDIFF_TYPE #define PTRDIFF_TYPE "int" ! #undef WCHAR_TYPE_SIZE #define WCHAR_TYPE_SIZE BITS_PER_WORD /* Provide a STARTFILE_SPEC appropriate for FreeBSD. Here we add the magical crtbegin.o file (see crtstuff.c) which provides part of the support for getting C++ file-scope static object constructed ! before entering `main'. */ #undef STARTFILE_SPEC #define STARTFILE_SPEC \ --- 59,77 ---- /* Make gcc agree with . */ ! #undef SIZE_TYPE #define SIZE_TYPE "unsigned int" ! #undef PTRDIFF_TYPE #define PTRDIFF_TYPE "int" ! #undef WCHAR_TYPE_SIZE #define WCHAR_TYPE_SIZE BITS_PER_WORD /* Provide a STARTFILE_SPEC appropriate for FreeBSD. Here we add the magical crtbegin.o file (see crtstuff.c) which provides part of the support for getting C++ file-scope static object constructed ! before entering `main'. */ #undef STARTFILE_SPEC #define STARTFILE_SPEC \ *************** Boston, MA 02111-1307, USA. */ *** 115,121 **** done. */ #undef LINK_SPEC ! #define LINK_SPEC "-m elf_i386 \ %{Wl,*:%*} \ %{v:-V} \ %{assert*} %{R*} %{rpath*} %{defsym*} \ --- 106,112 ---- done. */ #undef LINK_SPEC ! #define LINK_SPEC "\ %{Wl,*:%*} \ %{v:-V} \ %{assert*} %{R*} %{rpath*} %{defsym*} \ *************** Boston, MA 02111-1307, USA. */ *** 140,142 **** --- 131,141 ---- else fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \ } #endif + + /* Don't default to pcc-struct-return, we want to retain compatibility with + older gcc versions AND pcc-struct-return is nonreentrant. + (even though the SVR4 ABI for the i386 says that records and unions are + returned in memory). */ + + #undef DEFAULT_PCC_STRUCT_RETURN + #define DEFAULT_PCC_STRUCT_RETURN 0 diff -Nrc3pad gcc-3.0.4/gcc/config/i386/freebsd64.h gcc-3.1/gcc/config/i386/freebsd64.h *** gcc-3.0.4/gcc/config/i386/freebsd64.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/i386/freebsd64.h Sat Jan 26 07:24:57 2002 *************** *** 0 **** --- 1,43 ---- + /* Definitions for AMD x86-64 running FreeBSD with ELF format + Copyright (C) 2002 Free Software Foundation, Inc. + Contributed by David O'Brien + + 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. */ + + + #undef TARGET_VERSION + #define TARGET_VERSION fprintf (stderr, " (FreeBSD/x86-64 ELF)"); + + /* Provide a LINK_SPEC appropriate for the FreeBSD/x86-64 ELF target. + This is a copy of LINK_SPEC from tweaked for + the x86-64 target. */ + + #undef LINK_SPEC + #define LINK_SPEC "\ + %{!m32:-m elf_x86_64} \ + %{m32:-m elf_i386} \ + %{Wl,*:%*} \ + %{v:-V} \ + %{assert*} %{R*} %{rpath*} %{defsym*} \ + %{shared:-Bshareable %{h*} %{soname*}} \ + %{!shared: \ + %{!static: \ + %{rdynamic:-export-dynamic} \ + %{!dynamic-linker:-dynamic-linker /usr/libexec/ld-elf.so.1}} \ + %{static:-Bstatic}} \ + %{symbolic:-Bsymbolic}" diff -Nrc3pad gcc-3.0.4/gcc/config/i386/gas.h gcc-3.1/gcc/config/i386/gas.h *** gcc-3.0.4/gcc/config/i386/gas.h Mon Apr 16 18:25:49 2001 --- gcc-3.1/gcc/config/i386/gas.h Tue Dec 18 15:41:09 2001 *************** the Free Software Foundation, 59 Temple *** 19,25 **** Boston, MA 02111-1307, USA. */ /* Note that i386/seq-gas.h is a GAS configuration that does not use this ! file. */ #include "i386/i386.h" --- 19,25 ---- Boston, MA 02111-1307, USA. */ /* Note that i386/seq-gas.h is a GAS configuration that does not use this ! file. */ #include "i386/i386.h" *************** Boston, MA 02111-1307, USA. */ *** 131,142 **** count is in %cl. Some assemblers require %cl as an argument; some don't. ! GAS requires the %cl argument, so override i386/unix.h. */ #undef SHIFT_DOUBLE_OMITS_COUNT #define SHIFT_DOUBLE_OMITS_COUNT 0 ! /* Print opcodes the way that GAS expects them. */ #define GAS_MNEMONICS 1 #ifdef NO_UNDERSCORES /* If user-symbols don't have underscores, --- 131,142 ---- count is in %cl. Some assemblers require %cl as an argument; some don't. ! GAS requires the %cl argument, so override i386/unix.h. */ #undef SHIFT_DOUBLE_OMITS_COUNT #define SHIFT_DOUBLE_OMITS_COUNT 0 ! /* Print opcodes the way that GAS expects them. */ #define GAS_MNEMONICS 1 #ifdef NO_UNDERSCORES /* If user-symbols don't have underscores, *************** Boston, MA 02111-1307, USA. */ *** 150,156 **** #undef ASM_GENERATE_INTERNAL_LABEL #define ASM_GENERATE_INTERNAL_LABEL(BUF,PREFIX,NUMBER) \ ! sprintf ((BUF), ".%s%d", (PREFIX), (NUMBER)) /* This is how to output an internal numbered label where PREFIX is the class of label and NUM is the number within the class. */ --- 150,156 ---- #undef ASM_GENERATE_INTERNAL_LABEL #define ASM_GENERATE_INTERNAL_LABEL(BUF,PREFIX,NUMBER) \ ! sprintf ((BUF), ".%s%ld", (PREFIX), (long)(NUMBER)) /* This is how to output an internal numbered label where PREFIX is the class of label and NUM is the number within the class. */ *************** Boston, MA 02111-1307, USA. */ *** 166,172 **** #undef ASM_FILE_START #define ASM_FILE_START(FILE) \ do { \ ! if (target_flags & MASK_INTEL_SYNTAX) \ fputs ("\t.intel_syntax\n", FILE); \ output_file_directive (FILE, main_input_filename); \ } while (0) --- 166,172 ---- #undef ASM_FILE_START #define ASM_FILE_START(FILE) \ do { \ ! if (ix86_asm_dialect == ASM_INTEL) \ fputs ("\t.intel_syntax\n", FILE); \ output_file_directive (FILE, main_input_filename); \ } while (0) diff -Nrc3pad gcc-3.0.4/gcc/config/i386/gnu.h gcc-3.1/gcc/config/i386/gnu.h *** gcc-3.0.4/gcc/config/i386/gnu.h Sun Jun 10 18:53:24 2001 --- gcc-3.1/gcc/config/i386/gnu.h Sat Apr 13 22:09:30 2002 *************** *** 5,11 **** #undef CPP_PREDEFINES #define CPP_PREDEFINES "-D__ELF__ -DMACH -Asystem=mach \ ! -Dunix -Asystem=unix -Asystem=posix -D__GNU__ -Asystem=gnu" #undef CPP_SPEC #define CPP_SPEC "%(cpp_cpu) \ --- 5,11 ---- #undef CPP_PREDEFINES #define CPP_PREDEFINES "-D__ELF__ -DMACH -Asystem=mach \ ! -Dunix -Asystem=unix -Asystem=posix -D__gnu_hurd__ -D__GNU__ -Asystem=gnu" #undef CPP_SPEC #define CPP_SPEC "%(cpp_cpu) \ *************** *** 29,35 **** %{!static: \ %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}} \ %{static:crt0.o%s}} \ ! crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}" /* FIXME: Is a Hurd-specific fallback mechanism necessary? */ #undef MD_FALLBACK_FRAME_STATE_FOR --- 29,36 ---- %{!static: \ %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}} \ %{static:crt0.o%s}} \ ! crti.o%s %{static:crtbeginT.o%s}\ ! %{!static:%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}}" /* FIXME: Is a Hurd-specific fallback mechanism necessary? */ #undef MD_FALLBACK_FRAME_STATE_FOR diff -Nrc3pad gcc-3.0.4/gcc/config/i386/i386-coff.h gcc-3.1/gcc/config/i386/i386-coff.h *** gcc-3.0.4/gcc/config/i386/i386-coff.h Sun May 20 19:49:17 2001 --- gcc-3.1/gcc/config/i386/i386-coff.h Thu Aug 9 22:33:23 2001 *************** Boston, MA 02111-1307, USA. */ *** 37,101 **** #undef PREFERRED_DEBUGGING_TYPE #define PREFERRED_DEBUGGING_TYPE SDB_DEBUG ! /* Support the ctors and dtors sections for g++. */ ! ! #define CTORS_SECTION_ASM_OP "\t.section\t.ctors,\"x\"" ! #define DTORS_SECTION_ASM_OP "\t.section\t.dtors,\"x\"" ! ! /* A list of other sections which the compiler might be "in" at any ! given time. */ ! ! #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_ctors, in_dtors ! ! /* A list of extra section function definitions. */ ! ! #undef EXTRA_SECTION_FUNCTIONS ! #define EXTRA_SECTION_FUNCTIONS \ ! CTORS_SECTION_FUNCTION \ ! DTORS_SECTION_FUNCTION ! ! #define CTORS_SECTION_FUNCTION \ ! void \ ! ctors_section () \ ! { \ ! if (in_section != in_ctors) \ ! { \ ! fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP); \ ! in_section = in_ctors; \ ! } \ ! } ! ! #define DTORS_SECTION_FUNCTION \ ! void \ ! dtors_section () \ ! { \ ! if (in_section != in_dtors) \ ! { \ ! fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP); \ ! in_section = in_dtors; \ ! } \ ! } ! ! /* A C statement (sans semicolon) to output an element in the table of ! global constructors. */ ! #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ ! do { \ ! ctors_section (); \ ! fprintf (FILE, "%s", INT_ASM_OP); \ ! assemble_name (FILE, NAME); \ ! fprintf (FILE, "\n"); \ ! } while (0) ! ! /* A C statement (sans semicolon) to output an element in the table of ! global destructors. */ ! #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \ ! do { \ ! dtors_section (); \ ! fprintf (FILE, "%s", INT_ASM_OP); \ ! assemble_name (FILE, NAME); \ ! fprintf (FILE, "\n"); \ ! } while (0) ! /* end of i386-coff.h */ --- 37,43 ---- #undef PREFERRED_DEBUGGING_TYPE #define PREFERRED_DEBUGGING_TYPE SDB_DEBUG ! /* Switch into a generic section. */ ! #define TARGET_ASM_NAMED_SECTION default_coff_asm_named_section /* end of i386-coff.h */ diff -Nrc3pad gcc-3.0.4/gcc/config/i386/i386-interix.h gcc-3.1/gcc/config/i386/i386-interix.h *** gcc-3.0.4/gcc/config/i386/i386-interix.h Sun May 20 19:49:17 2001 --- gcc-3.1/gcc/config/i386/i386-interix.h Fri Apr 12 19:52:34 2002 *************** Boston, MA 02111-1307, USA. */ *** 26,34 **** #define YES_UNDERSCORES ! /* YES_UNDERSCORES must preceed gas.h */ #include ! /* The rest must follow. */ #define DBX_DEBUGGING_INFO #define SDB_DEBUGGING_INFO --- 26,34 ---- #define YES_UNDERSCORES ! /* YES_UNDERSCORES must precede gas.h */ #include ! /* The rest must follow. */ #define DBX_DEBUGGING_INFO #define SDB_DEBUGGING_INFO *************** Boston, MA 02111-1307, USA. */ *** 39,47 **** /* By default, target has a 80387, uses IEEE compatible arithmetic, and returns float values in the 387 and needs stack probes ! We also align doubles to 64-bits for MSVC default compatability */ ! #undef TARGET_DEFAULT ! #define TARGET_DEFAULT \ (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS | MASK_STACK_PROBE | \ MASK_ALIGN_DOUBLE) --- 39,47 ---- /* By default, target has a 80387, uses IEEE compatible arithmetic, and returns float values in the 387 and needs stack probes ! We also align doubles to 64-bits for MSVC default compatibility */ ! #undef TARGET_SUBTARGET_DEFAULT ! #define TARGET_SUBTARGET_DEFAULT \ (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS | MASK_STACK_PROBE | \ MASK_ALIGN_DOUBLE) *************** Boston, MA 02111-1307, USA. */ *** 65,70 **** --- 65,71 ---- -D_M_IX86=300 -D_X86_=1 \ -D__stdcall=__attribute__((__stdcall__)) \ -D__cdecl=__attribute__((__cdecl__)) \ + -D__declspec(x)=__attribute__((x)) \ -Asystem=unix -Asystem=interix" #undef CPP_SPEC *************** Boston, MA 02111-1307, USA. */ *** 90,96 **** /* The global __fltused is necessary to cause the printf/scanf routines for outputting/inputting floating point numbers to be loaded. Since this ! is kind of hard to detect, we just do it all the time. */ #ifdef ASM_FILE_START #undef ASM_FILE_START --- 91,97 ---- /* The global __fltused is necessary to cause the printf/scanf routines for outputting/inputting floating point numbers to be loaded. Since this ! is kind of hard to detect, we just do it all the time. */ #ifdef ASM_FILE_START #undef ASM_FILE_START *************** Boston, MA 02111-1307, USA. */ *** 202,208 **** } \ for (p = _ascii_bytes; p < limit && *p != '\0'; p++) \ continue; \ ! if (p < limit && (p - _ascii_bytes) <= STRING_LIMIT) \ { \ if (bytes_in_chunk > 0) \ { \ --- 203,209 ---- } \ for (p = _ascii_bytes; p < limit && *p != '\0'; p++) \ continue; \ ! if (p < limit && (p - _ascii_bytes) <= (long) STRING_LIMIT) \ { \ if (bytes_in_chunk > 0) \ { \ *************** Boston, MA 02111-1307, USA. */ *** 227,249 **** } \ while (0) - /* This is 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. - PE format differs on what PC-relative offsets look like (see - coff_i386_rtype_to_howto), and we need to compensate (by one word) here. */ - - #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+4]\n", LPREFIX, VALUE) - - /* Indicate that jump tables go in the text section. This is - necessary when compiling PIC code. */ - - #define JUMP_TABLES_IN_TEXT_SECTION 1 - /* Emit code to check the stack when allocating more that 4000 ! bytes in one go. */ #define CHECK_STACK_LIMIT 0x1000 --- 228,235 ---- } \ while (0) /* Emit code to check the stack when allocating more that 4000 ! bytes in one go. */ #define CHECK_STACK_LIMIT 0x1000 *************** Boston, MA 02111-1307, USA. */ *** 252,262 **** #undef LD_INIT_SWITCH #undef LD_FINI_SWITCH ! /* The following are needed for C++, but also needed for profiling */ ! ! /* Support const sections and the ctors and dtors sections for g++. ! Note that there appears to be two different ways to support const sections at the moment. You can either #define the symbol READONLY_DATA_SECTION (giving it some code which switches to the readonly data section) or else you can #define the symbols --- 238,246 ---- #undef LD_INIT_SWITCH #undef LD_FINI_SWITCH + #define EH_FRAME_IN_DATA_SECTION ! /* Note that there appears to be two different ways to support const sections at the moment. You can either #define the symbol READONLY_DATA_SECTION (giving it some code which switches to the readonly data section) or else you can #define the symbols *************** Boston, MA 02111-1307, USA. */ *** 267,297 **** #define CONST_SECTION_ASM_OP "\t.section\t.rdata,\"r\"" - /* Define the pseudo-ops used to switch to the .ctors and .dtors sections. - - Note that we want to give these sections the SHF_WRITE attribute - because these sections will actually contain data (i.e. tables of - addresses of functions in the current root executable or shared library - file) and, in the case of a shared library, the relocatable addresses - will have to be properly resolved/relocated (and then written into) by - the dynamic linker when it actually attaches the given shared library - to the executing process. (Note that on SVR4, you may wish to use the - `-z text' option to the ELF linker, when building a shared library, as - an additional check that you are doing everything right. But if you do - use the `-z text' option when building a shared library, you will get - errors unless the .ctors and .dtors sections are marked as writable - via the SHF_WRITE attribute.) */ - - #define CTORS_SECTION_ASM_OP "\t.section\t.ctors,\"x\"" - #define DTORS_SECTION_ASM_OP "\t.section\t.dtors,\"x\"" - /* A default list of other sections which we might be "in" at any given time. For targets that use additional sections (e.g. .tdesc) you should override this definition in the target-specific file which includes this file. */ #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_const, in_ctors, in_dtors /* A default list of extra section function definitions. For targets that use additional sections (e.g. .tdesc) you should override this --- 251,263 ---- #define CONST_SECTION_ASM_OP "\t.section\t.rdata,\"r\"" /* A default list of other sections which we might be "in" at any given time. For targets that use additional sections (e.g. .tdesc) you should override this definition in the target-specific file which includes this file. */ #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_const /* A default list of extra section function definitions. For targets that use additional sections (e.g. .tdesc) you should override this *************** Boston, MA 02111-1307, USA. */ *** 299,307 **** #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ ! CONST_SECTION_FUNCTION \ ! CTORS_SECTION_FUNCTION \ ! DTORS_SECTION_FUNCTION #undef READONLY_DATA_SECTION #define READONLY_DATA_SECTION() const_section () --- 265,271 ---- #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ ! CONST_SECTION_FUNCTION #undef READONLY_DATA_SECTION #define READONLY_DATA_SECTION() const_section () *************** const_section () \ *** 319,393 **** } \ } - #define CTORS_SECTION_FUNCTION \ - void \ - ctors_section () \ - { \ - if (in_section != in_ctors) \ - { \ - fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP); \ - in_section = in_ctors; \ - } \ - } - - #define DTORS_SECTION_FUNCTION \ - void \ - dtors_section () \ - { \ - if (in_section != in_dtors) \ - { \ - fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP); \ - in_section = in_dtors; \ - } \ - } - - #if 0 - /* Currently gas chokes on this; that's not too hard to fix, but there's - not a lot of impeteus to do it, either. If it is done, gas will have - to handle long section name escapes (which are defined in the COFF/PE - document as /nnn where nnn is a string table index). The benefit: - section attributes and -ffunction-sections, neither of which seem to - be critical. */ - /* gas may have been fixed? bfd was. */ - - /* Switch into a generic section. - This is currently only used to support section attributes. - - We make the section read-only and executable for a function decl, - read-only for a const data decl, and writable for a non-const data decl. */ - #define ASM_OUTPUT_SECTION_NAME(FILE, DECL, NAME) \ - fprintf (FILE, ".section\t%s,\"%s\",@progbits\n", NAME, \ - (DECL) && TREE_CODE (DECL) == FUNCTION_DECL ? "ax" : \ - (DECL) && TREE_READONLY (DECL) ? "a" : "aw") - #endif - /* The MS compilers take alignment as a number of bytes, so we do as well */ #undef ASM_OUTPUT_ALIGN #define ASM_OUTPUT_ALIGN(FILE,LOG) \ if ((LOG)!=0) fprintf ((FILE), "\t.balign %d\n", 1<<(LOG)) - /* A C statement (sans semicolon) to output an element in the table of - global constructors. */ - #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ - do { \ - ctors_section (); \ - fprintf (FILE, "%s", INT_ASM_OP); \ - assemble_name (FILE, NAME); \ - fprintf (FILE, "\n"); \ - } while (0) - - /* A C statement (sans semicolon) to output an element in the table of - global destructors. */ - #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \ - do { \ - dtors_section (); \ - fprintf (FILE, "%s", INT_ASM_OP); \ - assemble_name (FILE, NAME); \ - fprintf (FILE, "\n"); \ - } while (0) - /* The linker will take care of this, and having them causes problems with ! ld -r (specifically -rU). */ #define CTOR_LISTS_DEFINED_EXTERNALLY 1 #define SET_ASM_OP "\t.set\t" --- 283,295 ---- } \ } /* The MS compilers take alignment as a number of bytes, so we do as well */ #undef ASM_OUTPUT_ALIGN #define ASM_OUTPUT_ALIGN(FILE,LOG) \ if ((LOG)!=0) fprintf ((FILE), "\t.balign %d\n", 1<<(LOG)) /* The linker will take care of this, and having them causes problems with ! ld -r (specifically -rU). */ #define CTOR_LISTS_DEFINED_EXTERNALLY 1 #define SET_ASM_OP "\t.set\t" *************** while (0) *** 412,418 **** /* The following two flags are usually "off" for i386, because some non-gnu tools (for the i386) don't handle them. However, we don't have that ! problem, so.... */ /* Forward references to tags are allowed. */ #define SDB_ALLOW_FORWARD_REFERENCES --- 314,320 ---- /* The following two flags are usually "off" for i386, because some non-gnu tools (for the i386) don't handle them. However, we don't have that ! problem, so.... */ /* Forward references to tags are allowed. */ #define SDB_ALLOW_FORWARD_REFERENCES *************** while (0) *** 430,436 **** #undef DBX_REGISTER_NUMBER #define DBX_REGISTER_NUMBER(n) \ ! ((n) == 0 ? 0 \ : (n) == 1 ? 2 \ : (n) == 2 ? 1 \ : (n) == 3 ? 3 \ --- 332,339 ---- #undef DBX_REGISTER_NUMBER #define DBX_REGISTER_NUMBER(n) \ ! (TARGET_64BIT ? dbx64_register_map[n] \ ! : (n) == 0 ? 0 \ : (n) == 1 ? 2 \ : (n) == 2 ? 1 \ : (n) == 3 ? 3 \ *************** while (0) *** 447,455 **** Apply stddef, handle (as yet unimplemented) pic. ! stddef renaming does NOT apply to Alpha. */ ! char *gen_stdcall_suffix (); #undef ENCODE_SECTION_INFO #define ENCODE_SECTION_INFO(DECL) \ --- 350,359 ---- Apply stddef, handle (as yet unimplemented) pic. ! stddef renaming does NOT apply to Alpha. */ ! union tree_node; ! const char *gen_stdcall_suffix PARAMS ((union tree_node *)); #undef ENCODE_SECTION_INFO #define ENCODE_SECTION_INFO(DECL) \ *************** do { \ *** 496,502 **** #if 0 /* Turn this back on when the linker is updated to handle grouped .data$ sections correctly. See corresponding note in i386/interix.c. ! MK. */ /* Define this macro if in some cases global symbols from one translation unit may not be bound to undefined symbols in another translation unit --- 400,406 ---- #if 0 /* Turn this back on when the linker is updated to handle grouped .data$ sections correctly. See corresponding note in i386/interix.c. ! MK. */ /* Define this macro if in some cases global symbols from one translation unit may not be bound to undefined symbols in another translation unit *************** do { \ *** 504,571 **** symbols must be explicitly imported from shared libraries (DLLs). */ #define MULTIPLE_SYMBOL_SPACES - #define UNIQUE_SECTION_P(DECL) DECL_ONE_ONLY (DECL) extern void i386_pe_unique_section (); #define UNIQUE_SECTION(DECL,RELOC) i386_pe_unique_section (DECL, RELOC) #define SUPPORTS_ONE_ONLY 1 - - /* A C statement to output something to the assembler file to switch to section - NAME for object DECL which is either a FUNCTION_DECL, a VAR_DECL or - NULL_TREE. Some target formats do not support arbitrary sections. Do not - define this macro in such cases. */ - #undef ASM_OUTPUT_SECTION_NAME - #define ASM_OUTPUT_SECTION_NAME(STREAM, DECL, NAME, RELOC) \ - do { \ - static struct section_info \ - { \ - struct section_info *next; \ - char *name; \ - enum sect_enum {SECT_RW, SECT_RO, SECT_EXEC} type; \ - } *sections; \ - struct section_info *s; \ - const char *mode; \ - enum sect_enum type; \ - \ - for (s = sections; s; s = s->next) \ - if (!strcmp (NAME, s->name)) \ - break; \ - \ - if (DECL && TREE_CODE (DECL) == FUNCTION_DECL) \ - type = SECT_EXEC, mode = "x"; \ - else if (DECL && DECL_READONLY_SECTION (DECL, RELOC)) \ - type = SECT_RO, mode = "r"; \ - else \ - type = SECT_RW, mode = "w"; \ - \ - if (s == 0) \ - { \ - s = (struct section_info *) xmalloc (sizeof (struct section_info)); \ - s->name = xmalloc ((strlen (NAME) + 1) * sizeof (*NAME)); \ - strcpy (s->name, NAME); \ - s->type = type; \ - s->next = sections; \ - sections = s; \ - fprintf (STREAM, ".section\t%s,\"%s\"\n", NAME, mode); \ - /* Functions may have been compiled at various levels of \ - optimization so we can't use `same_size' here. Instead, \ - have the linker pick one. */ \ - if ((DECL) && DECL_ONE_ONLY (DECL)) \ - fprintf (STREAM, "\t.linkonce %s\n", \ - TREE_CODE (DECL) == FUNCTION_DECL \ - ? "discard" : "same_size"); \ - } \ - else \ - { \ - fprintf (STREAM, ".section\t%s,\"%s\"\n", NAME, mode); \ - } \ - } while (0) - #endif /* 0 */ ! /* DWARF2 Unwinding doesn't work with exception handling yet. */ #define DWARF2_UNWIND_INFO 0 ! /* Don't assume anything about the header files. */ #define NO_IMPLICIT_EXTERN_C --- 408,433 ---- symbols must be explicitly imported from shared libraries (DLLs). */ #define MULTIPLE_SYMBOL_SPACES extern void i386_pe_unique_section (); #define UNIQUE_SECTION(DECL,RELOC) i386_pe_unique_section (DECL, RELOC) #define SUPPORTS_ONE_ONLY 1 #endif /* 0 */ ! /* Switch into a generic section. */ ! #define TARGET_ASM_NAMED_SECTION default_pe_asm_named_section ! ! /* DWARF2 Unwinding doesn't work with exception handling yet. */ #define DWARF2_UNWIND_INFO 0 ! /* Don't assume anything about the header files. */ #define NO_IMPLICIT_EXTERN_C + /* MSVC returns structs of up to 8 bytes via registers. */ + + #define DEFAULT_PCC_STRUCT_RETURN 0 + + #undef RETURN_IN_MEMORY + #define RETURN_IN_MEMORY(TYPE) \ + (TYPE_MODE (TYPE) == BLKmode || \ + (AGGREGATE_TYPE_P (TYPE) && int_size_in_bytes(TYPE) > 8 )) diff -Nrc3pad gcc-3.0.4/gcc/config/i386/i386-interix3.h gcc-3.1/gcc/config/i386/i386-interix3.h *** gcc-3.0.4/gcc/config/i386/i386-interix3.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/i386/i386-interix3.h Wed Nov 28 21:41:54 2001 *************** *** 0 **** --- 1,32 ---- + /* Target definitions for GNU compiler for Intel 80386 running Interix V3. + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Douglas B. Rupp (rupp@gnat.com) + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GNU CC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU CC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + #undef CPP_SPEC + #define CPP_SPEC "\ + %{!.S: -D__LANGUAGE_C__ -D__LANGUAGE_C %{!ansi:-DLANGUAGE_C}} \ + %{.S: -D__LANGUAGE_ASSEMBLY__ -D__LANGUAGE_ASSEMBLY %{!ansi:-DLANGUAGE_ASSEMBLY}} \ + %{.cc: -D__LANGUAGE_C_PLUS_PLUS__ -D__LANGUAGE_C_PLUS_PLUS -D__cplusplus} \ + %{.cxx: -D__LANGUAGE_C_PLUS_PLUS__ -D__LANGUAGE_C_PLUS_PLUS -D__cplusplus} \ + %{.C: -D__LANGUAGE_C_PLUS_PLUS__ -D__LANGUAGE_C_PLUS_PLUS -D__cplusplus} \ + %{.m: -D__LANGUAGE_OBJECTIVE_C__ -D__LANGUAGE_OBJECTIVE_C} \ + %(cpp_cpu) \ + %{posix:-D_POSIX_SOURCE}" + diff -Nrc3pad gcc-3.0.4/gcc/config/i386/i386-protos.h gcc-3.1/gcc/config/i386/i386-protos.h *** gcc-3.0.4/gcc/config/i386/i386-protos.h Mon Aug 6 21:26:24 2001 --- gcc-3.1/gcc/config/i386/i386-protos.h Thu Feb 7 11:18:32 2002 *************** GNU General Public License for more deta *** 17,27 **** 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. */ /* Functions in i386.c */ extern void override_options PARAMS ((void)); - extern void order_regs_for_local_alloc PARAMS ((void)); extern void optimization_options PARAMS ((int, int)); extern int ix86_can_use_return_insn_p PARAMS ((void)); --- 17,26 ---- 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. */ /* Functions in i386.c */ extern void override_options PARAMS ((void)); extern void optimization_options PARAMS ((int, int)); extern int ix86_can_use_return_insn_p PARAMS ((void)); *************** extern void ix86_expand_epilogue PARAMS *** 37,48 **** --- 36,57 ---- extern void ix86_output_function_block_profiler PARAMS ((FILE *, int)); extern void ix86_output_block_profiler PARAMS ((FILE *, int)); + extern void ix86_output_addr_vec_elt PARAMS ((FILE *, int)); + extern void ix86_output_addr_diff_elt PARAMS ((FILE *, int, int)); + #ifdef RTX_CODE extern int ix86_aligned_p PARAMS ((rtx)); extern int standard_80387_constant_p PARAMS ((rtx)); + extern int standard_sse_constant_p PARAMS ((rtx)); extern int symbolic_reference_mentioned_p PARAMS ((rtx)); + extern int x86_64_general_operand PARAMS ((rtx, enum machine_mode)); + extern int x86_64_szext_general_operand PARAMS ((rtx, enum machine_mode)); + extern int x86_64_nonmemory_operand PARAMS ((rtx, enum machine_mode)); + extern int x86_64_szext_nonmemory_operand PARAMS ((rtx, enum machine_mode)); + extern int x86_64_immediate_operand PARAMS ((rtx, enum machine_mode)); + extern int x86_64_zext_immediate_operand PARAMS ((rtx, enum machine_mode)); extern int const_int_1_operand PARAMS ((rtx, enum machine_mode)); extern int symbolic_operand PARAMS ((rtx, enum machine_mode)); extern int pic_symbolic_operand PARAMS ((rtx, enum machine_mode)); *************** extern int long_memory_operand PARAMS (( *** 74,79 **** --- 83,91 ---- extern int aligned_operand PARAMS ((rtx, enum machine_mode)); extern enum machine_mode ix86_cc_mode PARAMS ((enum rtx_code, rtx, rtx)); + extern int ix86_expand_movstr PARAMS ((rtx, rtx, rtx, rtx)); + extern int ix86_expand_clrstr PARAMS ((rtx, rtx, rtx)); + extern int ix86_expand_strlen PARAMS ((rtx, rtx, rtx, rtx)); extern int legitimate_pic_address_disp_p PARAMS ((rtx)); extern int legitimate_address_p PARAMS ((enum machine_mode, rtx, int)); *************** extern void print_operand PARAMS ((FILE* *** 85,90 **** --- 97,103 ---- extern void print_operand_address PARAMS ((FILE*, rtx)); extern void split_di PARAMS ((rtx[], int, rtx[], rtx[])); + extern void split_ti PARAMS ((rtx[], int, rtx[], rtx[])); extern const char *output_387_binary_op PARAMS ((rtx, rtx*)); extern const char *output_fix_trunc PARAMS ((rtx, rtx*)); *************** extern const char *output_fp_compare PAR *** 93,99 **** --- 106,114 ---- extern void i386_dwarf_output_addr_const PARAMS ((FILE*, rtx)); extern rtx i386_simplify_dwarf_addr PARAMS ((rtx)); + extern void ix86_expand_clear PARAMS ((rtx)); extern void ix86_expand_move PARAMS ((enum machine_mode, rtx[])); + extern void ix86_expand_vector_move PARAMS ((enum machine_mode, rtx[])); extern void ix86_expand_binary_operator PARAMS ((enum rtx_code, enum machine_mode, rtx[])); extern int ix86_binary_operator_ok PARAMS ((enum rtx_code, enum machine_mode, *************** extern void ix86_expand_branch PARAMS (( *** 109,119 **** extern int ix86_expand_setcc PARAMS ((enum rtx_code, rtx)); extern int ix86_expand_int_movcc PARAMS ((rtx[])); extern int ix86_expand_fp_movcc PARAMS ((rtx[])); ! extern int ix86_split_long_move PARAMS ((rtx[])); extern void ix86_split_ashldi PARAMS ((rtx *, rtx)); extern void ix86_split_ashrdi PARAMS ((rtx *, rtx)); extern void ix86_split_lshrdi PARAMS ((rtx *, rtx)); - extern void ix86_expand_strlensi_unroll_1 PARAMS ((rtx, rtx, rtx)); extern int ix86_address_cost PARAMS ((rtx)); extern rtx ix86_find_base_term PARAMS ((rtx)); --- 124,135 ---- extern int ix86_expand_setcc PARAMS ((enum rtx_code, rtx)); extern int ix86_expand_int_movcc PARAMS ((rtx[])); extern int ix86_expand_fp_movcc PARAMS ((rtx[])); ! extern void x86_initialize_trampoline PARAMS ((rtx, rtx, rtx)); ! extern rtx ix86_zero_extend_to_Pmode PARAMS ((rtx)); ! extern void ix86_split_long_move PARAMS ((rtx[])); extern void ix86_split_ashldi PARAMS ((rtx *, rtx)); extern void ix86_split_ashrdi PARAMS ((rtx *, rtx)); extern void ix86_split_lshrdi PARAMS ((rtx *, rtx)); extern int ix86_address_cost PARAMS ((rtx)); extern rtx ix86_find_base_term PARAMS ((rtx)); *************** extern rtx assign_386_stack_local PARAMS *** 121,159 **** extern int ix86_attr_length_immediate_default PARAMS ((rtx, int)); extern int ix86_attr_length_address_default PARAMS ((rtx)); - extern int ix86_issue_rate PARAMS ((void)); - extern int ix86_adjust_cost PARAMS ((rtx, rtx, rtx, int)); - extern void ix86_sched_init PARAMS ((FILE *, int)); - extern int ix86_sched_reorder PARAMS ((FILE *, int, rtx *, int, int)); - extern int ix86_variable_issue PARAMS ((FILE *, int, rtx, int)); extern enum machine_mode ix86_fp_compare_mode PARAMS ((enum rtx_code)); extern rtx ix86_force_to_memory PARAMS ((enum machine_mode, rtx)); extern void ix86_free_from_memory PARAMS ((enum machine_mode)); ! extern void ix86_split_fp_branch PARAMS ((rtx, rtx, rtx, rtx, rtx, rtx)); #ifdef TREE_CODE extern void init_cumulative_args PARAMS ((CUMULATIVE_ARGS *, tree, rtx)); extern rtx function_arg PARAMS ((CUMULATIVE_ARGS *, enum machine_mode, tree, int)); extern void function_arg_advance PARAMS ((CUMULATIVE_ARGS *, enum machine_mode, tree, int)); extern void ix86_init_builtins PARAMS ((void)); extern rtx ix86_expand_builtin PARAMS ((tree, rtx, rtx, enum machine_mode, int)); #endif - extern void ix86_set_move_mem_attrs PARAMS ((rtx, rtx, rtx, rtx, rtx)); - #endif #ifdef TREE_CODE - extern int ix86_valid_decl_attribute_p PARAMS ((tree, tree, tree, tree)); - extern int ix86_valid_type_attribute_p PARAMS ((tree, tree, tree, tree)); - extern int ix86_comp_type_attributes PARAMS ((tree, tree)); extern int ix86_return_pops_args PARAMS ((tree, tree, int)); extern int ix86_data_alignment PARAMS ((tree, int)); extern int ix86_local_alignment PARAMS ((tree, int)); extern int ix86_constant_alignment PARAMS ((tree, int)); ! #endif ! --- 137,200 ---- extern int ix86_attr_length_immediate_default PARAMS ((rtx, int)); extern int ix86_attr_length_address_default PARAMS ((rtx)); extern enum machine_mode ix86_fp_compare_mode PARAMS ((enum rtx_code)); + extern int x86_64_sign_extended_value PARAMS ((rtx)); + extern int x86_64_zero_extended_value PARAMS ((rtx)); + extern rtx ix86_libcall_value PARAMS ((enum machine_mode)); + extern bool ix86_function_value_regno_p PARAMS ((int)); + extern bool ix86_function_arg_regno_p PARAMS ((int)); + extern int ix86_function_arg_boundary PARAMS ((enum machine_mode, tree)); + extern int ix86_return_in_memory PARAMS ((tree)); + extern void ix86_va_start PARAMS ((int, tree, rtx)); + extern rtx ix86_va_arg PARAMS ((tree, tree)); + extern void ix86_setup_incoming_varargs PARAMS ((CUMULATIVE_ARGS *, + enum machine_mode, + tree, int *, int)); + extern rtx ix86_force_to_memory PARAMS ((enum machine_mode, rtx)); extern void ix86_free_from_memory PARAMS ((enum machine_mode)); ! extern void ix86_split_fp_branch PARAMS ((enum rtx_code code, rtx, ! rtx, rtx, rtx, rtx)); ! extern int ix86_hard_regno_mode_ok PARAMS ((int, enum machine_mode)); ! extern int ix86_register_move_cost PARAMS ((enum machine_mode, enum reg_class, ! enum reg_class)); ! extern int ix86_secondary_memory_needed PARAMS ((enum reg_class, ! enum reg_class, ! enum machine_mode, int)); ! extern enum reg_class ix86_preferred_reload_class PARAMS ((rtx, ! enum reg_class)); ! extern int ix86_memory_move_cost PARAMS ((enum machine_mode, enum reg_class, ! int)); ! extern void ix86_set_move_mem_attrs PARAMS ((rtx, rtx, rtx, rtx, rtx)); ! extern void emit_i387_cw_initialization PARAMS ((rtx, rtx)); ! extern bool ix86_fp_jump_nontrivial_p PARAMS ((enum rtx_code)); ! extern void x86_order_regs_for_local_alloc PARAMS ((void)); ! #ifdef TREE_CODE extern void init_cumulative_args PARAMS ((CUMULATIVE_ARGS *, tree, rtx)); extern rtx function_arg PARAMS ((CUMULATIVE_ARGS *, enum machine_mode, tree, int)); extern void function_arg_advance PARAMS ((CUMULATIVE_ARGS *, enum machine_mode, tree, int)); + extern rtx ix86_function_value PARAMS ((tree)); extern void ix86_init_builtins PARAMS ((void)); extern rtx ix86_expand_builtin PARAMS ((tree, rtx, rtx, enum machine_mode, int)); #endif #endif #ifdef TREE_CODE extern int ix86_return_pops_args PARAMS ((tree, tree, int)); + extern tree ix86_build_va_list PARAMS ((void)); extern int ix86_data_alignment PARAMS ((tree, int)); extern int ix86_local_alignment PARAMS ((tree, int)); extern int ix86_constant_alignment PARAMS ((tree, int)); ! extern tree ix86_handle_dll_attribute PARAMS ((tree *, tree, tree, int, bool *)); ! extern tree ix86_handle_shared_attribute PARAMS ((tree *, tree, tree, int, bool *)); + extern unsigned int i386_pe_section_type_flags PARAMS ((tree, const char *, + int)); + extern void i386_pe_asm_named_section PARAMS ((const char *, unsigned int)); + #endif diff -Nrc3pad gcc-3.0.4/gcc/config/i386/i386.c gcc-3.1/gcc/config/i386/i386.c *** gcc-3.0.4/gcc/config/i386/i386.c Thu Nov 29 21:48:41 2001 --- gcc-3.1/gcc/config/i386/i386.c Tue Apr 23 08:11:22 2002 *************** *** 1,6 **** /* Subroutines used for code generation on IA-32. ! Copyright (C) 1988, 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 ! Free Software Foundation, Inc. This file is part of GNU CC. --- 1,6 ---- /* Subroutines used for code generation on IA-32. ! Copyright (C) 1988, 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, ! 2002 Free Software Foundation, Inc. This file is part of GNU CC. *************** the Free Software Foundation, 59 Temple *** 20,26 **** Boston, MA 02111-1307, USA. */ #include "config.h" - #include #include "system.h" #include "rtl.h" #include "tree.h" --- 20,25 ---- *************** Boston, MA 02111-1307, USA. */ *** 37,51 **** #include "function.h" #include "recog.h" #include "expr.h" #include "toplev.h" #include "basic-block.h" #include "ggc.h" #ifndef CHECK_STACK_LIMIT ! #define CHECK_STACK_LIMIT -1 #endif /* Processor costs (relative to an add) */ struct processor_costs i386_cost = { /* 386 specific costs */ 1, /* cost of an add instruction */ 1, /* cost of a lea instruction */ --- 36,91 ---- #include "function.h" #include "recog.h" #include "expr.h" + #include "optabs.h" #include "toplev.h" #include "basic-block.h" #include "ggc.h" + #include "target.h" + #include "target-def.h" #ifndef CHECK_STACK_LIMIT ! #define CHECK_STACK_LIMIT (-1) #endif /* Processor costs (relative to an add) */ + static const + struct processor_costs size_cost = { /* costs for tunning for size */ + 2, /* cost of an add instruction */ + 3, /* cost of a lea instruction */ + 2, /* variable shift costs */ + 3, /* constant shift costs */ + 3, /* cost of starting a multiply */ + 0, /* cost of multiply per each bit set */ + 3, /* cost of a divide/mod */ + 3, /* cost of movsx */ + 3, /* cost of movzx */ + 0, /* "large" insn */ + 2, /* MOVE_RATIO */ + 2, /* cost for loading QImode using movzbl */ + {2, 2, 2}, /* cost of loading integer registers + in QImode, HImode and SImode. + Relative to reg-reg move (2). */ + {2, 2, 2}, /* cost of storing integer registers */ + 2, /* cost of reg,reg fld/fst */ + {2, 2, 2}, /* cost of loading fp registers + in SFmode, DFmode and XFmode */ + {2, 2, 2}, /* cost of loading integer registers */ + 3, /* cost of moving MMX register */ + {3, 3}, /* cost of loading MMX registers + in SImode and DImode */ + {3, 3}, /* cost of storing MMX registers + in SImode and DImode */ + 3, /* cost of moving SSE register */ + {3, 3, 3}, /* cost of loading SSE registers + in SImode, DImode and TImode */ + {3, 3, 3}, /* cost of storing SSE registers + in SImode, DImode and TImode */ + 3, /* MMX or SSE register to integer */ + 0, /* size of prefetch block */ + 0, /* number of parallel prefetches */ + }; + /* Processor costs (relative to an add) */ + static const struct processor_costs i386_cost = { /* 386 specific costs */ 1, /* cost of an add instruction */ 1, /* cost of a lea instruction */ *************** struct processor_costs i386_cost = { /* *** 54,59 **** --- 94,101 ---- 6, /* cost of starting a multiply */ 1, /* cost of multiply per each bit set */ 23, /* cost of a divide/mod */ + 3, /* cost of movsx */ + 2, /* cost of movzx */ 15, /* "large" insn */ 3, /* MOVE_RATIO */ 4, /* cost for loading QImode using movzbl */ *************** struct processor_costs i386_cost = { /* *** 64,72 **** 2, /* cost of reg,reg fld/fst */ {8, 8, 8}, /* cost of loading fp registers in SFmode, DFmode and XFmode */ ! {8, 8, 8} /* cost of loading integer registers */ }; struct processor_costs i486_cost = { /* 486 specific costs */ 1, /* cost of an add instruction */ 1, /* cost of a lea instruction */ --- 106,128 ---- 2, /* cost of reg,reg fld/fst */ {8, 8, 8}, /* cost of loading fp registers in SFmode, DFmode and XFmode */ ! {8, 8, 8}, /* cost of loading integer registers */ ! 2, /* cost of moving MMX register */ ! {4, 8}, /* cost of loading MMX registers ! in SImode and DImode */ ! {4, 8}, /* cost of storing MMX registers ! in SImode and DImode */ ! 2, /* cost of moving SSE register */ ! {4, 8, 16}, /* cost of loading SSE registers ! in SImode, DImode and TImode */ ! {4, 8, 16}, /* cost of storing SSE registers ! in SImode, DImode and TImode */ ! 3, /* MMX or SSE register to integer */ ! 0, /* size of prefetch block */ ! 0, /* number of parallel prefetches */ }; + static const struct processor_costs i486_cost = { /* 486 specific costs */ 1, /* cost of an add instruction */ 1, /* cost of a lea instruction */ *************** struct processor_costs i486_cost = { /* *** 75,80 **** --- 131,138 ---- 12, /* cost of starting a multiply */ 1, /* cost of multiply per each bit set */ 40, /* cost of a divide/mod */ + 3, /* cost of movsx */ + 2, /* cost of movzx */ 15, /* "large" insn */ 3, /* MOVE_RATIO */ 4, /* cost for loading QImode using movzbl */ *************** struct processor_costs i486_cost = { /* *** 85,93 **** 2, /* cost of reg,reg fld/fst */ {8, 8, 8}, /* cost of loading fp registers in SFmode, DFmode and XFmode */ ! {8, 8, 8} /* cost of loading integer registers */ }; struct processor_costs pentium_cost = { 1, /* cost of an add instruction */ 1, /* cost of a lea instruction */ --- 143,165 ---- 2, /* cost of reg,reg fld/fst */ {8, 8, 8}, /* cost of loading fp registers in SFmode, DFmode and XFmode */ ! {8, 8, 8}, /* cost of loading integer registers */ ! 2, /* cost of moving MMX register */ ! {4, 8}, /* cost of loading MMX registers ! in SImode and DImode */ ! {4, 8}, /* cost of storing MMX registers ! in SImode and DImode */ ! 2, /* cost of moving SSE register */ ! {4, 8, 16}, /* cost of loading SSE registers ! in SImode, DImode and TImode */ ! {4, 8, 16}, /* cost of storing SSE registers ! in SImode, DImode and TImode */ ! 3, /* MMX or SSE register to integer */ ! 0, /* size of prefetch block */ ! 0, /* number of parallel prefetches */ }; + static const struct processor_costs pentium_cost = { 1, /* cost of an add instruction */ 1, /* cost of a lea instruction */ *************** struct processor_costs pentium_cost = { *** 96,101 **** --- 168,175 ---- 11, /* cost of starting a multiply */ 0, /* cost of multiply per each bit set */ 25, /* cost of a divide/mod */ + 3, /* cost of movsx */ + 2, /* cost of movzx */ 8, /* "large" insn */ 6, /* MOVE_RATIO */ 6, /* cost for loading QImode using movzbl */ *************** struct processor_costs pentium_cost = { *** 106,114 **** 2, /* cost of reg,reg fld/fst */ {2, 2, 6}, /* cost of loading fp registers in SFmode, DFmode and XFmode */ ! {4, 4, 6} /* cost of loading integer registers */ }; struct processor_costs pentiumpro_cost = { 1, /* cost of an add instruction */ 1, /* cost of a lea instruction */ --- 180,202 ---- 2, /* cost of reg,reg fld/fst */ {2, 2, 6}, /* cost of loading fp registers in SFmode, DFmode and XFmode */ ! {4, 4, 6}, /* cost of loading integer registers */ ! 8, /* cost of moving MMX register */ ! {8, 8}, /* cost of loading MMX registers ! in SImode and DImode */ ! {8, 8}, /* cost of storing MMX registers ! in SImode and DImode */ ! 2, /* cost of moving SSE register */ ! {4, 8, 16}, /* cost of loading SSE registers ! in SImode, DImode and TImode */ ! {4, 8, 16}, /* cost of storing SSE registers ! in SImode, DImode and TImode */ ! 3, /* MMX or SSE register to integer */ ! 0, /* size of prefetch block */ ! 0, /* number of parallel prefetches */ }; + static const struct processor_costs pentiumpro_cost = { 1, /* cost of an add instruction */ 1, /* cost of a lea instruction */ *************** struct processor_costs pentiumpro_cost = *** 117,122 **** --- 205,212 ---- 4, /* cost of starting a multiply */ 0, /* cost of multiply per each bit set */ 17, /* cost of a divide/mod */ + 1, /* cost of movsx */ + 1, /* cost of movzx */ 8, /* "large" insn */ 6, /* MOVE_RATIO */ 2, /* cost for loading QImode using movzbl */ *************** struct processor_costs pentiumpro_cost = *** 127,135 **** 2, /* cost of reg,reg fld/fst */ {2, 2, 6}, /* cost of loading fp registers in SFmode, DFmode and XFmode */ ! {4, 4, 6} /* cost of loading integer registers */ }; struct processor_costs k6_cost = { 1, /* cost of an add instruction */ 2, /* cost of a lea instruction */ --- 217,239 ---- 2, /* cost of reg,reg fld/fst */ {2, 2, 6}, /* cost of loading fp registers in SFmode, DFmode and XFmode */ ! {4, 4, 6}, /* cost of loading integer registers */ ! 2, /* cost of moving MMX register */ ! {2, 2}, /* cost of loading MMX registers ! in SImode and DImode */ ! {2, 2}, /* cost of storing MMX registers ! in SImode and DImode */ ! 2, /* cost of moving SSE register */ ! {2, 2, 8}, /* cost of loading SSE registers ! in SImode, DImode and TImode */ ! {2, 2, 8}, /* cost of storing SSE registers ! in SImode, DImode and TImode */ ! 3, /* MMX or SSE register to integer */ ! 32, /* size of prefetch block */ ! 6, /* number of parallel prefetches */ }; + static const struct processor_costs k6_cost = { 1, /* cost of an add instruction */ 2, /* cost of a lea instruction */ *************** struct processor_costs k6_cost = { *** 138,143 **** --- 242,249 ---- 3, /* cost of starting a multiply */ 0, /* cost of multiply per each bit set */ 18, /* cost of a divide/mod */ + 2, /* cost of movsx */ + 2, /* cost of movzx */ 8, /* "large" insn */ 4, /* MOVE_RATIO */ 3, /* cost for loading QImode using movzbl */ *************** struct processor_costs k6_cost = { *** 148,156 **** 4, /* cost of reg,reg fld/fst */ {6, 6, 6}, /* cost of loading fp registers in SFmode, DFmode and XFmode */ ! {4, 4, 4} /* cost of loading integer registers */ }; struct processor_costs athlon_cost = { 1, /* cost of an add instruction */ 2, /* cost of a lea instruction */ --- 254,276 ---- 4, /* cost of reg,reg fld/fst */ {6, 6, 6}, /* cost of loading fp registers in SFmode, DFmode and XFmode */ ! {4, 4, 4}, /* cost of loading integer registers */ ! 2, /* cost of moving MMX register */ ! {2, 2}, /* cost of loading MMX registers ! in SImode and DImode */ ! {2, 2}, /* cost of storing MMX registers ! in SImode and DImode */ ! 2, /* cost of moving SSE register */ ! {2, 2, 8}, /* cost of loading SSE registers ! in SImode, DImode and TImode */ ! {2, 2, 8}, /* cost of storing SSE registers ! in SImode, DImode and TImode */ ! 6, /* MMX or SSE register to integer */ ! 32, /* size of prefetch block */ ! 1, /* number of parallel prefetches */ }; + static const struct processor_costs athlon_cost = { 1, /* cost of an add instruction */ 2, /* cost of a lea instruction */ *************** struct processor_costs athlon_cost = { *** 159,164 **** --- 279,286 ---- 5, /* cost of starting a multiply */ 0, /* cost of multiply per each bit set */ 42, /* cost of a divide/mod */ + 1, /* cost of movsx */ + 1, /* cost of movzx */ 8, /* "large" insn */ 9, /* MOVE_RATIO */ 4, /* cost for loading QImode using movzbl */ *************** struct processor_costs athlon_cost = { *** 169,178 **** 4, /* cost of reg,reg fld/fst */ {6, 6, 20}, /* cost of loading fp registers in SFmode, DFmode and XFmode */ ! {4, 4, 16} /* cost of loading integer registers */ }; ! struct processor_costs *ix86_cost = &pentium_cost; /* Processor feature/optimization bitmasks. */ #define m_386 (1<machine->stack_locals) /* Structure describing stack frame layout. Stack grows downward: --- 523,555 ---- { 0, 2, 1, 3, 6, 7, 5, 4, /* general regs */ 11, 12, 13, 14, 15, 16, 17, 18, /* fp regs */ ! -1, 9, -1, -1, -1, /* arg, flags, fpsr, dir, frame */ 21, 22, 23, 24, 25, 26, 27, 28, /* SSE registers */ 29, 30, 31, 32, 33, 34, 35, 36, /* MMX registers */ + -1, -1, -1, -1, -1, -1, -1, -1, /* extemded integer registers */ + -1, -1, -1, -1, -1, -1, -1, -1, /* extemded SSE registers */ }; /* Test and compare insns in i386.md store the information needed to generate branch and scc insns here. */ ! rtx ix86_compare_op0 = NULL_RTX; ! rtx ix86_compare_op1 = NULL_RTX; ! #define MAX_386_STACK_LOCALS 3 ! /* Size of the register save area. */ ! #define X86_64_VARARGS_SIZE (REGPARM_MAX * UNITS_PER_WORD + SSE_REGPARM_MAX * 16) /* Define the structure for the machine field in struct function. */ struct machine_function { rtx stack_locals[(int) MAX_MACHINE_MODE][MAX_386_STACK_LOCALS]; + int save_varrargs_registers; int accesses_prev_frame; }; #define ix86_stack_locals (cfun->machine->stack_locals) + #define ix86_save_varrargs_registers (cfun->machine->save_varrargs_registers) /* Structure describing stack frame layout. Stack grows downward: *************** struct ix86_frame *** 359,367 **** --- 574,584 ---- { int nregs; int padding1; + int va_arg_size; HOST_WIDE_INT frame; int padding2; int outgoing_arguments_size; + int red_zone_size; HOST_WIDE_INT to_allocate; /* The offsets relative to ARG_POINTER. */ *************** struct ix86_frame *** 370,392 **** HOST_WIDE_INT stack_pointer_offset; }; /* which cpu are we scheduling for */ enum processor_type ix86_cpu; /* which instruction set architecture to use. */ int ix86_arch; /* Strings to hold which cpu and instruction set architecture to use. */ const char *ix86_cpu_string; /* for -mcpu= */ const char *ix86_arch_string; /* for -march= */ ! ! /* Register allocation order */ ! const char *ix86_reg_alloc_order; ! static char regs_allocated[FIRST_PSEUDO_REGISTER]; /* # of registers to use to pass arguments. */ const char *ix86_regparm_string; /* ix86_regparm_string as a number */ int ix86_regparm; --- 587,622 ---- HOST_WIDE_INT stack_pointer_offset; }; + /* Used to enable/disable debugging features. */ + const char *ix86_debug_arg_string, *ix86_debug_addr_string; + /* Code model option as passed by user. */ + const char *ix86_cmodel_string; + /* Parsed value. */ + enum cmodel ix86_cmodel; + /* Asm dialect. */ + const char *ix86_asm_string; + enum asm_dialect ix86_asm_dialect = ASM_ATT; + /* which cpu are we scheduling for */ enum processor_type ix86_cpu; + /* which unit we are generating floating point math for */ + enum fpmath_unit ix86_fpmath; + /* which instruction set architecture to use. */ int ix86_arch; /* Strings to hold which cpu and instruction set architecture to use. */ const char *ix86_cpu_string; /* for -mcpu= */ const char *ix86_arch_string; /* for -march= */ ! const char *ix86_fpmath_string; /* for -mfpmath= */ /* # of registers to use to pass arguments. */ const char *ix86_regparm_string; + /* true if sse prefetch instruction is not NOOP. */ + int x86_prefetch_sse; + /* ix86_regparm_string as a number */ int ix86_regparm; *************** int ix86_branch_cost; *** 409,423 **** const char *ix86_branch_cost_string; /* Power of two alignment for functions. */ - int ix86_align_funcs; const char *ix86_align_funcs_string; - /* Power of two alignment for loops. */ - int ix86_align_loops; - - /* Power of two alignment for non-loop jumps. */ - int ix86_align_jumps; - /* Prefix built by ASM_GENERATE_INTERNAL_LABEL. */ static char internal_label_prefix[16]; static int internal_label_prefix_len; --- 639,646 ---- *************** static void ix86_mark_machine_status PAR *** 446,459 **** static void ix86_free_machine_status PARAMS ((struct function *)); static int ix86_split_to_parts PARAMS ((rtx, rtx *, enum machine_mode)); static int ix86_safe_length_prefix PARAMS ((rtx)); ! static int ix86_nsaved_regs PARAMS((void)); ! static void ix86_emit_save_regs PARAMS((void)); static void ix86_emit_restore_regs_using_mov PARAMS ((rtx, int, int)); - static void ix86_emit_epilogue_esp_adjustment PARAMS((int)); static void ix86_set_move_mem_attrs_1 PARAMS ((rtx, rtx, rtx, rtx, rtx)); ! static void ix86_sched_reorder_pentium PARAMS((rtx *, rtx *)); ! static void ix86_sched_reorder_ppro PARAMS((rtx *, rtx *)); static HOST_WIDE_INT ix86_GOT_alias_set PARAMS ((void)); struct ix86_address { --- 669,691 ---- static void ix86_free_machine_status PARAMS ((struct function *)); static int ix86_split_to_parts PARAMS ((rtx, rtx *, enum machine_mode)); static int ix86_safe_length_prefix PARAMS ((rtx)); ! static int ix86_nsaved_regs PARAMS ((void)); ! static void ix86_emit_save_regs PARAMS ((void)); ! static void ix86_emit_save_regs_using_mov PARAMS ((rtx, HOST_WIDE_INT)); static void ix86_emit_restore_regs_using_mov PARAMS ((rtx, int, int)); static void ix86_set_move_mem_attrs_1 PARAMS ((rtx, rtx, rtx, rtx, rtx)); ! static void ix86_sched_reorder_pentium PARAMS ((rtx *, rtx *)); ! static void ix86_sched_reorder_ppro PARAMS ((rtx *, rtx *)); static HOST_WIDE_INT ix86_GOT_alias_set PARAMS ((void)); + static void ix86_adjust_counter PARAMS ((rtx, HOST_WIDE_INT)); + static rtx ix86_expand_aligntest PARAMS ((rtx, int)); + static void ix86_expand_strlensi_unroll_1 PARAMS ((rtx, rtx)); + static int ix86_issue_rate PARAMS ((void)); + static int ix86_adjust_cost PARAMS ((rtx, rtx, rtx, int)); + static void ix86_sched_init PARAMS ((FILE *, int, int)); + static int ix86_sched_reorder PARAMS ((FILE *, int, rtx *, int *, int)); + static int ix86_variable_issue PARAMS ((FILE *, int, rtx, int)); + static void ix86_init_mmx_sse_builtins PARAMS ((void)); struct ix86_address { *************** struct ix86_address *** 464,477 **** static int ix86_decompose_address PARAMS ((rtx, struct ix86_address *)); struct builtin_description; ! static rtx ix86_expand_sse_comi PARAMS ((struct builtin_description *, tree, ! rtx)); ! static rtx ix86_expand_sse_compare PARAMS ((struct builtin_description *, tree, ! rtx)); static rtx ix86_expand_unop1_builtin PARAMS ((enum insn_code, tree, rtx)); static rtx ix86_expand_unop_builtin PARAMS ((enum insn_code, tree, rtx, int)); static rtx ix86_expand_binop_builtin PARAMS ((enum insn_code, tree, rtx)); ! static rtx ix86_expand_store_builtin PARAMS ((enum insn_code, tree, int)); static rtx safe_vector_operand PARAMS ((rtx, enum machine_mode)); static enum rtx_code ix86_fp_compare_code_to_integer PARAMS ((enum rtx_code)); static void ix86_fp_comparison_codes PARAMS ((enum rtx_code code, --- 696,711 ---- static int ix86_decompose_address PARAMS ((rtx, struct ix86_address *)); struct builtin_description; ! static rtx ix86_expand_sse_comi PARAMS ((const struct builtin_description *, ! tree, rtx)); ! static rtx ix86_expand_sse_compare PARAMS ((const struct builtin_description *, ! tree, rtx)); static rtx ix86_expand_unop1_builtin PARAMS ((enum insn_code, tree, rtx)); static rtx ix86_expand_unop_builtin PARAMS ((enum insn_code, tree, rtx, int)); static rtx ix86_expand_binop_builtin PARAMS ((enum insn_code, tree, rtx)); ! static rtx ix86_expand_timode_binop_builtin PARAMS ((enum insn_code, ! tree, rtx)); ! static rtx ix86_expand_store_builtin PARAMS ((enum insn_code, tree)); static rtx safe_vector_operand PARAMS ((rtx, enum machine_mode)); static enum rtx_code ix86_fp_compare_code_to_integer PARAMS ((enum rtx_code)); static void ix86_fp_comparison_codes PARAMS ((enum rtx_code code, *************** static int ix86_fp_comparison_sahf_cost *** 486,491 **** --- 720,826 ---- static int ix86_fp_comparison_cost PARAMS ((enum rtx_code code)); static int ix86_save_reg PARAMS ((int, int)); static void ix86_compute_frame_layout PARAMS ((struct ix86_frame *)); + static int ix86_comp_type_attributes PARAMS ((tree, tree)); + const struct attribute_spec ix86_attribute_table[]; + static tree ix86_handle_cdecl_attribute PARAMS ((tree *, tree, tree, int, bool *)); + static tree ix86_handle_regparm_attribute PARAMS ((tree *, tree, tree, int, bool *)); + + #ifdef DO_GLOBAL_CTORS_BODY + static void ix86_svr3_asm_out_constructor PARAMS ((rtx, int)); + #endif + + /* Register class used for passing given 64bit part of the argument. + These represent classes as documented by the PS ABI, with the exception + of SSESF, SSEDF classes, that are basically SSE class, just gcc will + use SF or DFmode move instead of DImode to avoid reformating penalties. + + Similary we play games with INTEGERSI_CLASS to use cheaper SImode moves + whenever possible (upper half does contain padding). + */ + enum x86_64_reg_class + { + X86_64_NO_CLASS, + X86_64_INTEGER_CLASS, + X86_64_INTEGERSI_CLASS, + X86_64_SSE_CLASS, + X86_64_SSESF_CLASS, + X86_64_SSEDF_CLASS, + X86_64_SSEUP_CLASS, + X86_64_X87_CLASS, + X86_64_X87UP_CLASS, + X86_64_MEMORY_CLASS + }; + static const char * const x86_64_reg_class_name[] = + {"no", "integer", "integerSI", "sse", "sseSF", "sseDF", "sseup", "x87", "x87up", "no"}; + + #define MAX_CLASSES 4 + static int classify_argument PARAMS ((enum machine_mode, tree, + enum x86_64_reg_class [MAX_CLASSES], + int)); + static int examine_argument PARAMS ((enum machine_mode, tree, int, int *, + int *)); + static rtx construct_container PARAMS ((enum machine_mode, tree, int, int, int, + const int *, int)); + static enum x86_64_reg_class merge_classes PARAMS ((enum x86_64_reg_class, + enum x86_64_reg_class)); + + /* Initialize the GCC target structure. */ + #undef TARGET_ATTRIBUTE_TABLE + #define TARGET_ATTRIBUTE_TABLE ix86_attribute_table + #ifdef TARGET_DLLIMPORT_DECL_ATTRIBUTES + # undef TARGET_MERGE_DECL_ATTRIBUTES + # define TARGET_MERGE_DECL_ATTRIBUTES merge_dllimport_decl_attributes + #endif + + #undef TARGET_COMP_TYPE_ATTRIBUTES + #define TARGET_COMP_TYPE_ATTRIBUTES ix86_comp_type_attributes + + #undef TARGET_INIT_BUILTINS + #define TARGET_INIT_BUILTINS ix86_init_builtins + + #undef TARGET_EXPAND_BUILTIN + #define TARGET_EXPAND_BUILTIN ix86_expand_builtin + + #if defined (OSF_OS) || defined (TARGET_OSF1ELF) + static void ix86_osf_output_function_prologue PARAMS ((FILE *, + HOST_WIDE_INT)); + # undef TARGET_ASM_FUNCTION_PROLOGUE + # define TARGET_ASM_FUNCTION_PROLOGUE ix86_osf_output_function_prologue + #endif + + #undef TARGET_ASM_OPEN_PAREN + #define TARGET_ASM_OPEN_PAREN "" + #undef TARGET_ASM_CLOSE_PAREN + #define TARGET_ASM_CLOSE_PAREN "" + + #undef TARGET_ASM_ALIGNED_HI_OP + #define TARGET_ASM_ALIGNED_HI_OP ASM_SHORT + #undef TARGET_ASM_ALIGNED_SI_OP + #define TARGET_ASM_ALIGNED_SI_OP ASM_LONG + #ifdef ASM_QUAD + #undef TARGET_ASM_ALIGNED_DI_OP + #define TARGET_ASM_ALIGNED_DI_OP ASM_QUAD + #endif + + #undef TARGET_ASM_UNALIGNED_HI_OP + #define TARGET_ASM_UNALIGNED_HI_OP TARGET_ASM_ALIGNED_HI_OP + #undef TARGET_ASM_UNALIGNED_SI_OP + #define TARGET_ASM_UNALIGNED_SI_OP TARGET_ASM_ALIGNED_SI_OP + #undef TARGET_ASM_UNALIGNED_DI_OP + #define TARGET_ASM_UNALIGNED_DI_OP TARGET_ASM_ALIGNED_DI_OP + + #undef TARGET_SCHED_ADJUST_COST + #define TARGET_SCHED_ADJUST_COST ix86_adjust_cost + #undef TARGET_SCHED_ISSUE_RATE + #define TARGET_SCHED_ISSUE_RATE ix86_issue_rate + #undef TARGET_SCHED_VARIABLE_ISSUE + #define TARGET_SCHED_VARIABLE_ISSUE ix86_variable_issue + #undef TARGET_SCHED_INIT + #define TARGET_SCHED_INIT ix86_sched_init + #undef TARGET_SCHED_REORDER + #define TARGET_SCHED_REORDER ix86_sched_reorder + + struct gcc_target targetm = TARGET_INITIALIZER; /* Sometimes certain combinations of command options do not make sense on a particular target machine. You can define a macro *************** override_options () *** 505,543 **** static struct ptt { ! struct processor_costs *cost; /* Processor costs */ ! int target_enable; /* Target flags to enable. */ ! int target_disable; /* Target flags to disable. */ ! int align_loop; /* Default alignments. */ ! int align_jump; ! int align_func; ! int branch_cost; } const processor_target_table[PROCESSOR_max] = { ! {&i386_cost, 0, 0, 2, 2, 2, 1}, ! {&i486_cost, 0, 0, 4, 4, 4, 1}, ! {&pentium_cost, 0, 0, -4, -4, -4, 1}, ! {&pentiumpro_cost, 0, 0, 4, -4, 4, 1}, ! {&k6_cost, 0, 0, -5, -5, 4, 1}, ! {&athlon_cost, 0, 0, 4, -4, 4, 1} }; static struct pta { ! const char *name; /* processor name or nickname. */ ! enum processor_type processor; } const processor_alias_table[] = { ! {"i386", PROCESSOR_I386}, ! {"i486", PROCESSOR_I486}, ! {"i586", PROCESSOR_PENTIUM}, ! {"pentium", PROCESSOR_PENTIUM}, ! {"i686", PROCESSOR_PENTIUMPRO}, ! {"pentiumpro", PROCESSOR_PENTIUMPRO}, ! {"k6", PROCESSOR_K6}, ! {"athlon", PROCESSOR_ATHLON}, }; int const pta_size = sizeof (processor_alias_table) / sizeof (struct pta); --- 840,907 ---- static struct ptt { ! const struct processor_costs *cost; /* Processor costs */ ! const int target_enable; /* Target flags to enable. */ ! const int target_disable; /* Target flags to disable. */ ! const int align_loop; /* Default alignments. */ ! const int align_loop_max_skip; ! const int align_jump; ! const int align_jump_max_skip; ! const int align_func; ! const int branch_cost; } const processor_target_table[PROCESSOR_max] = { ! {&i386_cost, 0, 0, 4, 3, 4, 3, 4, 1}, ! {&i486_cost, 0, 0, 16, 15, 16, 15, 16, 1}, ! {&pentium_cost, 0, 0, 16, 7, 16, 7, 16, 1}, ! {&pentiumpro_cost, 0, 0, 16, 15, 16, 7, 16, 1}, ! {&k6_cost, 0, 0, 32, 7, 32, 7, 32, 1}, ! {&athlon_cost, 0, 0, 16, 7, 64, 7, 16, 1}, ! {&pentium4_cost, 0, 0, 0, 0, 0, 0, 0, 1} }; + static const char * const cpu_names[] = TARGET_CPU_DEFAULT_NAMES; static struct pta { ! const char *const name; /* processor name or nickname. */ ! const enum processor_type processor; ! const enum pta_flags ! { ! PTA_SSE = 1, ! PTA_SSE2 = 2, ! PTA_MMX = 4, ! PTA_PREFETCH_SSE = 8, ! PTA_3DNOW = 16, ! PTA_3DNOW_A = 64 ! } flags; } const processor_alias_table[] = { ! {"i386", PROCESSOR_I386, 0}, ! {"i486", PROCESSOR_I486, 0}, ! {"i586", PROCESSOR_PENTIUM, 0}, ! {"pentium", PROCESSOR_PENTIUM, 0}, ! {"pentium-mmx", PROCESSOR_PENTIUM, PTA_MMX}, ! {"i686", PROCESSOR_PENTIUMPRO, 0}, ! {"pentiumpro", PROCESSOR_PENTIUMPRO, 0}, ! {"pentium2", PROCESSOR_PENTIUMPRO, PTA_MMX}, ! {"pentium3", PROCESSOR_PENTIUMPRO, PTA_MMX | PTA_SSE | PTA_PREFETCH_SSE}, ! {"pentium4", PROCESSOR_PENTIUM4, PTA_SSE | PTA_SSE2 | ! PTA_MMX | PTA_PREFETCH_SSE}, ! {"k6", PROCESSOR_K6, PTA_MMX}, ! {"k6-2", PROCESSOR_K6, PTA_MMX | PTA_3DNOW}, ! {"k6-3", PROCESSOR_K6, PTA_MMX | PTA_3DNOW}, ! {"athlon", PROCESSOR_ATHLON, PTA_MMX | PTA_PREFETCH_SSE | PTA_3DNOW ! | PTA_3DNOW_A}, ! {"athlon-tbird", PROCESSOR_ATHLON, PTA_MMX | PTA_PREFETCH_SSE ! | PTA_3DNOW | PTA_3DNOW_A}, ! {"athlon-4", PROCESSOR_ATHLON, PTA_MMX | PTA_PREFETCH_SSE | PTA_3DNOW ! | PTA_3DNOW_A | PTA_SSE}, ! {"athlon-xp", PROCESSOR_ATHLON, PTA_MMX | PTA_PREFETCH_SSE | PTA_3DNOW ! | PTA_3DNOW_A | PTA_SSE}, ! {"athlon-mp", PROCESSOR_ATHLON, PTA_MMX | PTA_PREFETCH_SSE | PTA_3DNOW ! | PTA_3DNOW_A | PTA_SSE}, }; int const pta_size = sizeof (processor_alias_table) / sizeof (struct pta); *************** override_options () *** 546,582 **** SUBTARGET_OVERRIDE_OPTIONS; #endif ! ix86_arch = PROCESSOR_I386; ! ix86_cpu = (enum processor_type) TARGET_CPU_DEFAULT; ! if (ix86_arch_string != 0) { ! for (i = 0; i < pta_size; i++) ! if (! strcmp (ix86_arch_string, processor_alias_table[i].name)) ! { ! ix86_arch = processor_alias_table[i].processor; ! /* Default cpu tuning to the architecture. */ ! ix86_cpu = ix86_arch; ! break; ! } ! ! if (i == pta_size) ! error ("bad value (%s) for -march= switch", ix86_arch_string); } ! ! if (ix86_cpu_string != 0) { ! for (i = 0; i < pta_size; i++) ! if (! strcmp (ix86_cpu_string, processor_alias_table[i].name)) ! { ! ix86_cpu = processor_alias_table[i].processor; ! break; ! } ! if (i == pta_size) ! error ("bad value (%s) for -mcpu= switch", ix86_cpu_string); } ! ix86_cost = processor_target_table[ix86_cpu].cost; target_flags |= processor_target_table[ix86_cpu].target_enable; target_flags &= ~processor_target_table[ix86_cpu].target_disable; --- 910,1007 ---- SUBTARGET_OVERRIDE_OPTIONS; #endif ! if (!ix86_cpu_string && ix86_arch_string) ! ix86_cpu_string = ix86_arch_string; ! if (!ix86_cpu_string) ! ix86_cpu_string = cpu_names [TARGET_CPU_DEFAULT]; ! if (!ix86_arch_string) ! ix86_arch_string = TARGET_64BIT ? "athlon-4" : "i386"; ! if (ix86_cmodel_string != 0) { ! if (!strcmp (ix86_cmodel_string, "small")) ! ix86_cmodel = flag_pic ? CM_SMALL_PIC : CM_SMALL; ! else if (flag_pic) ! sorry ("code model %s not supported in PIC mode", ix86_cmodel_string); ! else if (!strcmp (ix86_cmodel_string, "32")) ! ix86_cmodel = CM_32; ! else if (!strcmp (ix86_cmodel_string, "kernel") && !flag_pic) ! ix86_cmodel = CM_KERNEL; ! else if (!strcmp (ix86_cmodel_string, "medium") && !flag_pic) ! ix86_cmodel = CM_MEDIUM; ! else if (!strcmp (ix86_cmodel_string, "large") && !flag_pic) ! ix86_cmodel = CM_LARGE; ! else ! error ("bad value (%s) for -mcmodel= switch", ix86_cmodel_string); } ! else { ! ix86_cmodel = CM_32; ! if (TARGET_64BIT) ! ix86_cmodel = flag_pic ? CM_SMALL_PIC : CM_SMALL; ! } ! if (ix86_asm_string != 0) ! { ! if (!strcmp (ix86_asm_string, "intel")) ! ix86_asm_dialect = ASM_INTEL; ! else if (!strcmp (ix86_asm_string, "att")) ! ix86_asm_dialect = ASM_ATT; ! else ! error ("bad value (%s) for -masm= switch", ix86_asm_string); } + if ((TARGET_64BIT == 0) != (ix86_cmodel == CM_32)) + error ("code model `%s' not supported in the %s bit mode", + ix86_cmodel_string, TARGET_64BIT ? "64" : "32"); + if (ix86_cmodel == CM_LARGE) + sorry ("code model `large' not supported yet"); + if ((TARGET_64BIT != 0) != ((target_flags & MASK_64BIT) != 0)) + sorry ("%i-bit mode not compiled in", + (target_flags & MASK_64BIT) ? 64 : 32); ! for (i = 0; i < pta_size; i++) ! if (! strcmp (ix86_arch_string, processor_alias_table[i].name)) ! { ! ix86_arch = processor_alias_table[i].processor; ! /* Default cpu tuning to the architecture. */ ! ix86_cpu = ix86_arch; ! if (processor_alias_table[i].flags & PTA_MMX ! && !(target_flags & MASK_MMX_SET)) ! target_flags |= MASK_MMX; ! if (processor_alias_table[i].flags & PTA_3DNOW ! && !(target_flags & MASK_3DNOW_SET)) ! target_flags |= MASK_3DNOW; ! if (processor_alias_table[i].flags & PTA_3DNOW_A ! && !(target_flags & MASK_3DNOW_A_SET)) ! target_flags |= MASK_3DNOW_A; ! if (processor_alias_table[i].flags & PTA_SSE ! && !(target_flags & MASK_SSE_SET)) ! target_flags |= MASK_SSE; ! if (processor_alias_table[i].flags & PTA_SSE2 ! && !(target_flags & MASK_SSE2_SET)) ! target_flags |= MASK_SSE2; ! if (processor_alias_table[i].flags & PTA_PREFETCH_SSE) ! x86_prefetch_sse = true; ! break; ! } ! ! if (i == pta_size) ! error ("bad value (%s) for -march= switch", ix86_arch_string); ! ! for (i = 0; i < pta_size; i++) ! if (! strcmp (ix86_cpu_string, processor_alias_table[i].name)) ! { ! ix86_cpu = processor_alias_table[i].processor; ! break; ! } ! if (processor_alias_table[i].flags & PTA_PREFETCH_SSE) ! x86_prefetch_sse = true; ! if (i == pta_size) ! error ("bad value (%s) for -mcpu= switch", ix86_cpu_string); ! ! if (optimize_size) ! ix86_cost = &size_cost; ! else ! ix86_cost = processor_target_table[ix86_cpu].cost; target_flags |= processor_target_table[ix86_cpu].target_enable; target_flags &= ~processor_target_table[ix86_cpu].target_disable; *************** override_options () *** 585,623 **** mark_machine_status = ix86_mark_machine_status; free_machine_status = ix86_free_machine_status; - /* Validate registers in register allocation order. */ - if (ix86_reg_alloc_order) - { - int ch; - - for (i = 0; (ch = ix86_reg_alloc_order[i]) != '\0'; i++) - { - int regno = -1; - - switch (ch) - { - case 'a': regno = 0; break; - case 'd': regno = 1; break; - case 'c': regno = 2; break; - case 'b': regno = 3; break; - case 'S': regno = 4; break; - case 'D': regno = 5; break; - case 'B': regno = 6; break; - - default: error ("Register '%c' is unknown", ch); - } - - if (regno >= 0) - { - if (regs_allocated[regno]) - error ("Register '%c' already specified in allocation order", - ch); - - regs_allocated[regno] = 1; - } - } - } - /* Validate -mregparm= value. */ if (ix86_regparm_string) { --- 1010,1015 ---- *************** override_options () *** 627,675 **** else ix86_regparm = i; } ! /* Validate -malign-loops= value, or provide default. */ ! ix86_align_loops = processor_target_table[ix86_cpu].align_loop; if (ix86_align_loops_string) { ! i = atoi (ix86_align_loops_string); ! if (i < 0 || i > MAX_CODE_ALIGN) ! error ("-malign-loops=%d is not between 0 and %d", i, MAX_CODE_ALIGN); ! else ! ix86_align_loops = i; } - /* Validate -malign-jumps= value, or provide default. */ - ix86_align_jumps = processor_target_table[ix86_cpu].align_jump; if (ix86_align_jumps_string) { ! i = atoi (ix86_align_jumps_string); ! if (i < 0 || i > MAX_CODE_ALIGN) ! error ("-malign-jumps=%d is not between 0 and %d", i, MAX_CODE_ALIGN); ! else ! ix86_align_jumps = i; } - /* Validate -malign-functions= value, or provide default. */ - ix86_align_funcs = processor_target_table[ix86_cpu].align_func; if (ix86_align_funcs_string) { ! i = atoi (ix86_align_funcs_string); ! if (i < 0 || i > MAX_CODE_ALIGN) ! error ("-malign-functions=%d is not between 0 and %d", ! i, MAX_CODE_ALIGN); ! else ! ix86_align_funcs = i; } /* Validate -mpreferred-stack-boundary= value, or provide default. ! The default of 128 bits is for Pentium III's SSE __m128. */ ! ix86_preferred_stack_boundary = 128; if (ix86_preferred_stack_boundary_string) { i = atoi (ix86_preferred_stack_boundary_string); ! if (i < 2 || i > 31) ! error ("-mpreferred-stack-boundary=%d is not between 2 and 31", i); else ix86_preferred_stack_boundary = (1 << i) * BITS_PER_UNIT; } --- 1019,1099 ---- else ix86_regparm = i; } + else + if (TARGET_64BIT) + ix86_regparm = REGPARM_MAX; ! /* If the user has provided any of the -malign-* options, ! warn and use that value only if -falign-* is not set. ! Remove this code in GCC 3.2 or later. */ if (ix86_align_loops_string) { ! warning ("-malign-loops is obsolete, use -falign-loops"); ! if (align_loops == 0) ! { ! i = atoi (ix86_align_loops_string); ! if (i < 0 || i > MAX_CODE_ALIGN) ! error ("-malign-loops=%d is not between 0 and %d", i, MAX_CODE_ALIGN); ! else ! align_loops = 1 << i; ! } } if (ix86_align_jumps_string) { ! warning ("-malign-jumps is obsolete, use -falign-jumps"); ! if (align_jumps == 0) ! { ! i = atoi (ix86_align_jumps_string); ! if (i < 0 || i > MAX_CODE_ALIGN) ! error ("-malign-loops=%d is not between 0 and %d", i, MAX_CODE_ALIGN); ! else ! align_jumps = 1 << i; ! } } if (ix86_align_funcs_string) { ! warning ("-malign-functions is obsolete, use -falign-functions"); ! if (align_functions == 0) ! { ! i = atoi (ix86_align_funcs_string); ! if (i < 0 || i > MAX_CODE_ALIGN) ! error ("-malign-loops=%d is not between 0 and %d", i, MAX_CODE_ALIGN); ! else ! align_functions = 1 << i; ! } ! } ! ! /* Default align_* from the processor table. */ ! if (align_loops == 0) ! { ! align_loops = processor_target_table[ix86_cpu].align_loop; ! align_loops_max_skip = processor_target_table[ix86_cpu].align_loop_max_skip; ! } ! if (align_jumps == 0) ! { ! align_jumps = processor_target_table[ix86_cpu].align_jump; ! align_jumps_max_skip = processor_target_table[ix86_cpu].align_jump_max_skip; ! } ! if (align_functions == 0) ! { ! align_functions = processor_target_table[ix86_cpu].align_func; } /* Validate -mpreferred-stack-boundary= value, or provide default. ! The default of 128 bits is for Pentium III's SSE __m128, but we ! don't want additional code to keep the stack aligned when ! optimizing for code size. */ ! ix86_preferred_stack_boundary = (optimize_size ! ? TARGET_64BIT ? 128 : 32 ! : 128); if (ix86_preferred_stack_boundary_string) { i = atoi (ix86_preferred_stack_boundary_string); ! if (i < (TARGET_64BIT ? 4 : 2) || i > 12) ! error ("-mpreferred-stack-boundary=%d is not between %d and 12", i, ! TARGET_64BIT ? 4 : 2); else ix86_preferred_stack_boundary = (1 << i) * BITS_PER_UNIT; } *************** override_options () *** 691,767 **** /* If we're doing fast math, we don't care about comparison order wrt NaNs. This lets us use a shorter comparison sequence. */ ! if (flag_fast_math) target_flags &= ~MASK_IEEE_FP; ! /* It makes no sense to ask for just SSE builtins, so MMX is also turned ! on by -msse. */ ! if (TARGET_SSE) ! target_flags |= MASK_MMX; ! ! /* Figure out what ASM_GENERATE_INTERNAL_LABEL builds as a prefix. */ ! { ! char *p; ! ASM_GENERATE_INTERNAL_LABEL (internal_label_prefix, "LX", 0); ! p = strchr (internal_label_prefix, 'X'); ! internal_label_prefix_len = p - internal_label_prefix; ! *p = '\0'; ! } ! } ! ! /* A C statement (sans semicolon) to choose the order in which to ! allocate hard registers for pseudo-registers local to a basic ! block. ! ! Store the desired register order in the array `reg_alloc_order'. ! Element 0 should be the register to allocate first; element 1, the ! next register; and so on. ! ! The macro body should not assume anything about the contents of ! `reg_alloc_order' before execution of the macro. ! ! On most machines, it is not necessary to define this macro. */ ! ! void ! order_regs_for_local_alloc () ! { ! int i, ch, order; ! /* User specified the register allocation order. */ ! if (ix86_reg_alloc_order) { ! for (i = order = 0; (ch = ix86_reg_alloc_order[i]) != '\0'; i++) { ! int regno = 0; ! ! switch (ch) { ! case 'a': regno = 0; break; ! case 'd': regno = 1; break; ! case 'c': regno = 2; break; ! case 'b': regno = 3; break; ! case 'S': regno = 4; break; ! case 'D': regno = 5; break; ! case 'B': regno = 6; break; } ! ! reg_alloc_order[order++] = regno; } ! ! for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) { ! if (! regs_allocated[i]) ! reg_alloc_order[order++] = i; } } ! /* If user did not specify a register allocation order, use natural order. */ ! else { ! for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) ! reg_alloc_order[i] = i; } } void --- 1115,1205 ---- /* If we're doing fast math, we don't care about comparison order wrt NaNs. This lets us use a shorter comparison sequence. */ ! if (flag_unsafe_math_optimizations) target_flags &= ~MASK_IEEE_FP; ! /* If the architecture always has an FPU, turn off NO_FANCY_MATH_387, ! since the insns won't need emulation. */ ! if (x86_arch_always_fancy_math_387 & (1 << ix86_arch)) ! target_flags &= ~MASK_NO_FANCY_MATH_387; ! if (TARGET_64BIT) ! { ! if (TARGET_ALIGN_DOUBLE) ! error ("-malign-double makes no sense in the 64bit mode"); ! if (TARGET_RTD) ! error ("-mrtd calling convention not supported in the 64bit mode"); ! /* Enable by default the SSE and MMX builtins. */ ! target_flags |= (MASK_SSE2 | MASK_SSE | MASK_MMX | MASK_128BIT_LONG_DOUBLE); ! ix86_fpmath = FPMATH_SSE; ! } ! else ! ix86_fpmath = FPMATH_387; ! if (ix86_fpmath_string != 0) { ! if (! strcmp (ix86_fpmath_string, "387")) ! ix86_fpmath = FPMATH_387; ! else if (! strcmp (ix86_fpmath_string, "sse")) { ! if (!TARGET_SSE) { ! warning ("SSE instruction set disabled, using 387 arithmetics"); ! ix86_fpmath = FPMATH_387; } ! else ! ix86_fpmath = FPMATH_SSE; } ! else if (! strcmp (ix86_fpmath_string, "387,sse") ! || ! strcmp (ix86_fpmath_string, "sse,387")) { ! if (!TARGET_SSE) ! { ! warning ("SSE instruction set disabled, using 387 arithmetics"); ! ix86_fpmath = FPMATH_387; ! } ! else if (!TARGET_80387) ! { ! warning ("387 instruction set disabled, using SSE arithmetics"); ! ix86_fpmath = FPMATH_SSE; ! } ! else ! ix86_fpmath = FPMATH_SSE | FPMATH_387; } + else + error ("bad value (%s) for -mfpmath= switch", ix86_fpmath_string); } ! /* It makes no sense to ask for just SSE builtins, so MMX is also turned ! on by -msse. */ ! if (TARGET_SSE) { ! target_flags |= MASK_MMX; ! x86_prefetch_sse = true; ! } ! ! /* If it has 3DNow! it also has MMX so MMX is also turned on by -m3dnow */ ! if (TARGET_3DNOW) ! { ! target_flags |= MASK_MMX; ! /* If we are targetting the Athlon architecture, enable the 3Dnow/MMX ! extensions it adds. */ ! if (x86_3dnow_a & (1 << ix86_arch)) ! target_flags |= MASK_3DNOW_A; } + if ((x86_accumulate_outgoing_args & CPUMASK) + && !(target_flags & MASK_ACCUMULATE_OUTGOING_ARGS_SET) + && !optimize_size) + target_flags |= MASK_ACCUMULATE_OUTGOING_ARGS; + + /* Figure out what ASM_GENERATE_INTERNAL_LABEL builds as a prefix. */ + { + char *p; + ASM_GENERATE_INTERNAL_LABEL (internal_label_prefix, "LX", 0); + p = strchr (internal_label_prefix, 'X'); + internal_label_prefix_len = p - internal_label_prefix; + *p = '\0'; + } } void *************** optimization_options (level, size) *** 775,857 **** if (level > 1) flag_schedule_insns = 0; #endif } ! /* Return nonzero if IDENTIFIER with arguments ARGS is a valid machine specific ! attribute for DECL. The attributes in ATTRIBUTES have previously been ! assigned to DECL. */ ! int ! ix86_valid_decl_attribute_p (decl, attributes, identifier, args) ! tree decl ATTRIBUTE_UNUSED; ! tree attributes ATTRIBUTE_UNUSED; ! tree identifier ATTRIBUTE_UNUSED; tree args ATTRIBUTE_UNUSED; { ! return 0; ! } ! /* Return nonzero if IDENTIFIER with arguments ARGS is a valid machine specific ! attribute for TYPE. The attributes in ATTRIBUTES have previously been ! assigned to TYPE. */ ! int ! ix86_valid_type_attribute_p (type, attributes, identifier, args) ! tree type; ! tree attributes ATTRIBUTE_UNUSED; ! tree identifier; tree args; { ! if (TREE_CODE (type) != FUNCTION_TYPE ! && TREE_CODE (type) != METHOD_TYPE ! && TREE_CODE (type) != FIELD_DECL ! && TREE_CODE (type) != TYPE_DECL) ! return 0; ! /* Stdcall attribute says callee is responsible for popping arguments ! if they are not variable. */ ! if (is_attribute_p ("stdcall", identifier)) ! return (args == NULL_TREE); ! /* Cdecl attribute says the callee is a normal C declaration. */ ! if (is_attribute_p ("cdecl", identifier)) ! return (args == NULL_TREE); ! /* Regparm attribute specifies how many integer arguments are to be ! passed in registers. */ ! if (is_attribute_p ("regparm", identifier)) { ! tree cst; ! if (! args || TREE_CODE (args) != TREE_LIST ! || TREE_CHAIN (args) != NULL_TREE ! || TREE_VALUE (args) == NULL_TREE) ! return 0; ! cst = TREE_VALUE (args); ! if (TREE_CODE (cst) != INTEGER_CST) ! return 0; ! if (compare_tree_int (cst, REGPARM_MAX) > 0) ! return 0; ! return 1; } ! return 0; } /* Return 0 if the attributes for two types are incompatible, 1 if they are compatible, and 2 if they are nearly compatible (which causes a warning to be generated). */ ! int ix86_comp_type_attributes (type1, type2) tree type1; tree type2; { /* Check for mismatch of non-default calling convention. */ ! const char *rtdstr = TARGET_RTD ? "cdecl" : "stdcall"; if (TREE_CODE (type1) != FUNCTION_TYPE) return 1; --- 1213,1427 ---- if (level > 1) flag_schedule_insns = 0; #endif + if (TARGET_64BIT && optimize >= 1) + flag_omit_frame_pointer = 1; + if (TARGET_64BIT) + { + flag_pcc_struct_return = 0; + flag_asynchronous_unwind_tables = 1; + } } ! /* Table of valid machine attributes. */ ! const struct attribute_spec ix86_attribute_table[] = ! { ! /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */ ! /* Stdcall attribute says callee is responsible for popping arguments ! if they are not variable. */ ! { "stdcall", 0, 0, false, true, true, ix86_handle_cdecl_attribute }, ! /* Cdecl attribute says the callee is a normal C declaration */ ! { "cdecl", 0, 0, false, true, true, ix86_handle_cdecl_attribute }, ! /* Regparm attribute specifies how many integer arguments are to be ! passed in registers. */ ! { "regparm", 1, 1, false, true, true, ix86_handle_regparm_attribute }, ! #ifdef TARGET_DLLIMPORT_DECL_ATTRIBUTES ! { "dllimport", 0, 0, false, false, false, ix86_handle_dll_attribute }, ! { "dllexport", 0, 0, false, false, false, ix86_handle_dll_attribute }, ! { "shared", 0, 0, true, false, false, ix86_handle_shared_attribute }, ! #endif ! { NULL, 0, 0, false, false, false, NULL } ! }; ! /* Handle a "cdecl" or "stdcall" attribute; ! arguments as in struct attribute_spec.handler. */ ! static tree ! ix86_handle_cdecl_attribute (node, name, args, flags, no_add_attrs) ! tree *node; ! tree name; tree args ATTRIBUTE_UNUSED; + int flags ATTRIBUTE_UNUSED; + bool *no_add_attrs; { ! if (TREE_CODE (*node) != FUNCTION_TYPE ! && TREE_CODE (*node) != METHOD_TYPE ! && TREE_CODE (*node) != FIELD_DECL ! && TREE_CODE (*node) != TYPE_DECL) ! { ! warning ("`%s' attribute only applies to functions", ! IDENTIFIER_POINTER (name)); ! *no_add_attrs = true; ! } ! if (TARGET_64BIT) ! { ! warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); ! *no_add_attrs = true; ! } ! return NULL_TREE; ! } ! ! /* Handle a "regparm" attribute; ! arguments as in struct attribute_spec.handler. */ ! static tree ! ix86_handle_regparm_attribute (node, name, args, flags, no_add_attrs) ! tree *node; ! tree name; tree args; + int flags ATTRIBUTE_UNUSED; + bool *no_add_attrs; { ! if (TREE_CODE (*node) != FUNCTION_TYPE ! && TREE_CODE (*node) != METHOD_TYPE ! && TREE_CODE (*node) != FIELD_DECL ! && TREE_CODE (*node) != TYPE_DECL) ! { ! warning ("`%s' attribute only applies to functions", ! IDENTIFIER_POINTER (name)); ! *no_add_attrs = true; ! } ! else ! { ! tree cst; ! cst = TREE_VALUE (args); ! if (TREE_CODE (cst) != INTEGER_CST) ! { ! warning ("`%s' attribute requires an integer constant argument", ! IDENTIFIER_POINTER (name)); ! *no_add_attrs = true; ! } ! else if (compare_tree_int (cst, REGPARM_MAX) > 0) ! { ! warning ("argument to `%s' attribute larger than %d", ! IDENTIFIER_POINTER (name), REGPARM_MAX); ! *no_add_attrs = true; ! } ! } ! return NULL_TREE; ! } ! #if defined (OSF_OS) || defined (TARGET_OSF1ELF) ! ! /* Generate the assembly code for function entry. FILE is a stdio ! stream to output the code to. SIZE is an int: how many units of ! temporary storage to allocate. ! ! Refer to the array `regs_ever_live' to determine which registers to ! save; `regs_ever_live[I]' is nonzero if register number I is ever ! used in the function. This function is responsible for knowing ! which registers should not be saved even if used. ! ! We override it here to allow for the new profiling code to go before ! the prologue and the old mcount code to go after the prologue (and ! after %ebx has been set up for ELF shared library support). */ ! ! static void ! ix86_osf_output_function_prologue (file, size) ! FILE *file; ! HOST_WIDE_INT size; ! { ! const char *prefix = ""; ! const char *const lprefix = LPREFIX; ! int labelno = current_function_profile_label_no; ! ! #ifdef OSF_OS ! ! if (TARGET_UNDERSCORES) ! prefix = "_"; ! ! if (current_function_profile && OSF_PROFILE_BEFORE_PROLOGUE) { ! if (!flag_pic && !HALF_PIC_P ()) ! { ! fprintf (file, "\tmovl $%sP%d,%%edx\n", lprefix, labelno); ! fprintf (file, "\tcall *%s_mcount_ptr\n", prefix); ! } ! else if (HALF_PIC_P ()) ! { ! rtx symref; ! HALF_PIC_EXTERNAL ("_mcount_ptr"); ! symref = HALF_PIC_PTR (gen_rtx_SYMBOL_REF (Pmode, ! "_mcount_ptr")); ! fprintf (file, "\tmovl $%sP%d,%%edx\n", lprefix, labelno); ! fprintf (file, "\tmovl %s%s,%%eax\n", prefix, ! XSTR (symref, 0)); ! fprintf (file, "\tcall *(%%eax)\n"); ! } ! else ! { ! static int call_no = 0; ! ! fprintf (file, "\tcall %sPc%d\n", lprefix, call_no); ! fprintf (file, "%sPc%d:\tpopl %%eax\n", lprefix, call_no); ! fprintf (file, "\taddl $_GLOBAL_OFFSET_TABLE_+[.-%sPc%d],%%eax\n", ! lprefix, call_no++); ! fprintf (file, "\tleal %sP%d@GOTOFF(%%eax),%%edx\n", ! lprefix, labelno); ! fprintf (file, "\tmovl %s_mcount_ptr@GOT(%%eax),%%eax\n", ! prefix); ! fprintf (file, "\tcall *(%%eax)\n"); ! } } ! #else /* !OSF_OS */ ! ! if (current_function_profile && OSF_PROFILE_BEFORE_PROLOGUE) ! { ! if (!flag_pic) ! { ! fprintf (file, "\tmovl $%sP%d,%%edx\n", lprefix, labelno); ! fprintf (file, "\tcall *%s_mcount_ptr\n", prefix); ! } ! ! else ! { ! static int call_no = 0; ! ! fprintf (file, "\tcall %sPc%d\n", lprefix, call_no); ! fprintf (file, "%sPc%d:\tpopl %%eax\n", lprefix, call_no); ! fprintf (file, "\taddl $_GLOBAL_OFFSET_TABLE_+[.-%sPc%d],%%eax\n", ! lprefix, call_no++); ! fprintf (file, "\tleal %sP%d@GOTOFF(%%eax),%%edx\n", ! lprefix, labelno); ! fprintf (file, "\tmovl %s_mcount_ptr@GOT(%%eax),%%eax\n", ! prefix); ! fprintf (file, "\tcall *(%%eax)\n"); ! } ! } ! #endif /* !OSF_OS */ ! ! function_prologue (file, size); } + #endif /* OSF_OS || TARGET_OSF1ELF */ + /* Return 0 if the attributes for two types are incompatible, 1 if they are compatible, and 2 if they are nearly compatible (which causes a warning to be generated). */ ! static int ix86_comp_type_attributes (type1, type2) tree type1; tree type2; { /* Check for mismatch of non-default calling convention. */ ! const char *const rtdstr = TARGET_RTD ? "cdecl" : "stdcall"; if (TREE_CODE (type1) != FUNCTION_TYPE) return 1; *************** ix86_return_pops_args (fundecl, funtype, *** 902,916 **** return size; } ! /* Lose any fake structure return argument. */ ! if (aggregate_value_p (TREE_TYPE (funtype))) ! return GET_MODE_SIZE (Pmode); ! return 0; } /* Argument support functions. */ /* Initialize a variable CUM of type CUMULATIVE_ARGS for a call to a function whose data type is FNTYPE. For a library call, FNTYPE is 0. */ --- 1472,1520 ---- return size; } ! /* Lose any fake structure return argument if it is passed on the stack. */ ! if (aggregate_value_p (TREE_TYPE (funtype)) ! && !TARGET_64BIT) ! { ! int nregs = ix86_regparm; ! if (funtype) ! { ! tree attr = lookup_attribute ("regparm", TYPE_ATTRIBUTES (funtype)); ! ! if (attr) ! nregs = TREE_INT_CST_LOW (TREE_VALUE (TREE_VALUE (attr))); ! } ! ! if (!nregs) ! return GET_MODE_SIZE (Pmode); ! } ! ! return 0; } /* Argument support functions. */ + /* Return true when register may be used to pass function parameters. */ + bool + ix86_function_arg_regno_p (regno) + int regno; + { + int i; + if (!TARGET_64BIT) + return (regno < REGPARM_MAX + || (TARGET_SSE && SSE_REGNO_P (regno) && !fixed_regs[regno])); + if (SSE_REGNO_P (regno) && TARGET_SSE) + return true; + /* RAX is used as hidden argument to va_arg functions. */ + if (!regno) + return true; + for (i = 0; i < REGPARM_MAX; i++) + if (regno == x86_64_int_parameter_registers[i]) + return true; + return false; + } + /* Initialize a variable CUM of type CUMULATIVE_ARGS for a call to a function whose data type is FNTYPE. For a library call, FNTYPE is 0. */ *************** init_cumulative_args (cum, fntype, libna *** 942,954 **** /* Set up the number of registers to use for passing arguments. */ cum->nregs = ix86_regparm; ! if (fntype) { tree attr = lookup_attribute ("regparm", TYPE_ATTRIBUTES (fntype)); if (attr) cum->nregs = TREE_INT_CST_LOW (TREE_VALUE (TREE_VALUE (attr))); } /* Determine if this function has variable arguments. This is indicated by the last argument being 'void_type_mode' if there --- 1546,1560 ---- /* Set up the number of registers to use for passing arguments. */ cum->nregs = ix86_regparm; ! cum->sse_nregs = SSE_REGPARM_MAX; ! if (fntype && !TARGET_64BIT) { tree attr = lookup_attribute ("regparm", TYPE_ATTRIBUTES (fntype)); if (attr) cum->nregs = TREE_INT_CST_LOW (TREE_VALUE (TREE_VALUE (attr))); } + cum->maybe_vaarg = false; /* Determine if this function has variable arguments. This is indicated by the last argument being 'void_type_mode' if there *************** init_cumulative_args (cum, fntype, libna *** 962,970 **** { next_param = TREE_CHAIN (param); if (next_param == 0 && TREE_VALUE (param) != void_type_node) ! cum->nregs = 0; } } if (TARGET_DEBUG_ARG) fprintf (stderr, ", nregs=%d )\n", cum->nregs); --- 1568,1583 ---- { next_param = TREE_CHAIN (param); if (next_param == 0 && TREE_VALUE (param) != void_type_node) ! { ! if (!TARGET_64BIT) ! cum->nregs = 0; ! cum->maybe_vaarg = true; ! } } } + if ((!fntype && !libname) + || (fntype && !TYPE_ARG_TYPES (fntype))) + cum->maybe_vaarg = 1; if (TARGET_DEBUG_ARG) fprintf (stderr, ", nregs=%d )\n", cum->nregs); *************** init_cumulative_args (cum, fntype, libna *** 972,977 **** --- 1585,2042 ---- return; } + /* x86-64 register passing impleemntation. See x86-64 ABI for details. Goal + of this code is to classify each 8bytes of incoming argument by the register + class and assign registers accordingly. */ + + /* Return the union class of CLASS1 and CLASS2. + See the x86-64 PS ABI for details. */ + + static enum x86_64_reg_class + merge_classes (class1, class2) + enum x86_64_reg_class class1, class2; + { + /* Rule #1: If both classes are equal, this is the resulting class. */ + if (class1 == class2) + return class1; + + /* Rule #2: If one of the classes is NO_CLASS, the resulting class is + the other class. */ + if (class1 == X86_64_NO_CLASS) + return class2; + if (class2 == X86_64_NO_CLASS) + return class1; + + /* Rule #3: If one of the classes is MEMORY, the result is MEMORY. */ + if (class1 == X86_64_MEMORY_CLASS || class2 == X86_64_MEMORY_CLASS) + return X86_64_MEMORY_CLASS; + + /* Rule #4: If one of the classes is INTEGER, the result is INTEGER. */ + if ((class1 == X86_64_INTEGERSI_CLASS && class2 == X86_64_SSESF_CLASS) + || (class2 == X86_64_INTEGERSI_CLASS && class1 == X86_64_SSESF_CLASS)) + return X86_64_INTEGERSI_CLASS; + if (class1 == X86_64_INTEGER_CLASS || class1 == X86_64_INTEGERSI_CLASS + || class2 == X86_64_INTEGER_CLASS || class2 == X86_64_INTEGERSI_CLASS) + return X86_64_INTEGER_CLASS; + + /* Rule #5: If one of the classes is X87 or X87UP class, MEMORY is used. */ + if (class1 == X86_64_X87_CLASS || class1 == X86_64_X87UP_CLASS + || class2 == X86_64_X87_CLASS || class2 == X86_64_X87UP_CLASS) + return X86_64_MEMORY_CLASS; + + /* Rule #6: Otherwise class SSE is used. */ + return X86_64_SSE_CLASS; + } + + /* Classify the argument of type TYPE and mode MODE. + CLASSES will be filled by the register class used to pass each word + of the operand. The number of words is returned. In case the parameter + should be passed in memory, 0 is returned. As a special case for zero + sized containers, classes[0] will be NO_CLASS and 1 is returned. + + BIT_OFFSET is used internally for handling records and specifies offset + of the offset in bits modulo 256 to avoid overflow cases. + + See the x86-64 PS ABI for details. + */ + + static int + classify_argument (mode, type, classes, bit_offset) + enum machine_mode mode; + tree type; + enum x86_64_reg_class classes[MAX_CLASSES]; + int bit_offset; + { + int bytes = + (mode == BLKmode) ? int_size_in_bytes (type) : (int) GET_MODE_SIZE (mode); + int words = (bytes + UNITS_PER_WORD - 1) / UNITS_PER_WORD; + + if (type && AGGREGATE_TYPE_P (type)) + { + int i; + tree field; + enum x86_64_reg_class subclasses[MAX_CLASSES]; + + /* On x86-64 we pass structures larger than 16 bytes on the stack. */ + if (bytes > 16) + return 0; + + for (i = 0; i < words; i++) + classes[i] = X86_64_NO_CLASS; + + /* Zero sized arrays or structures are NO_CLASS. We return 0 to + signalize memory class, so handle it as special case. */ + if (!words) + { + classes[0] = X86_64_NO_CLASS; + return 1; + } + + /* Classify each field of record and merge classes. */ + if (TREE_CODE (type) == RECORD_TYPE) + { + for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field)) + { + if (TREE_CODE (field) == FIELD_DECL) + { + int num; + + /* Bitfields are always classified as integer. Handle them + early, since later code would consider them to be + misaligned integers. */ + if (DECL_BIT_FIELD (field)) + { + for (i = int_bit_position (field) / 8 / 8; + i < (int_bit_position (field) + + tree_low_cst (DECL_SIZE (field), 0) + + 63) / 8 / 8; i++) + classes[i] = + merge_classes (X86_64_INTEGER_CLASS, + classes[i]); + } + else + { + num = classify_argument (TYPE_MODE (TREE_TYPE (field)), + TREE_TYPE (field), subclasses, + (int_bit_position (field) + + bit_offset) % 256); + if (!num) + return 0; + for (i = 0; i < num; i++) + { + int pos = + (int_bit_position (field) + bit_offset) / 8 / 8; + classes[i + pos] = + merge_classes (subclasses[i], classes[i + pos]); + } + } + } + } + } + /* Arrays are handled as small records. */ + else if (TREE_CODE (type) == ARRAY_TYPE) + { + int num; + num = classify_argument (TYPE_MODE (TREE_TYPE (type)), + TREE_TYPE (type), subclasses, bit_offset); + if (!num) + return 0; + + /* The partial classes are now full classes. */ + if (subclasses[0] == X86_64_SSESF_CLASS && bytes != 4) + subclasses[0] = X86_64_SSE_CLASS; + if (subclasses[0] == X86_64_INTEGERSI_CLASS && bytes != 4) + subclasses[0] = X86_64_INTEGER_CLASS; + + for (i = 0; i < words; i++) + classes[i] = subclasses[i % num]; + } + /* Unions are similar to RECORD_TYPE but offset is always 0. */ + else if (TREE_CODE (type) == UNION_TYPE + || TREE_CODE (type) == QUAL_UNION_TYPE) + { + for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field)) + { + if (TREE_CODE (field) == FIELD_DECL) + { + int num; + num = classify_argument (TYPE_MODE (TREE_TYPE (field)), + TREE_TYPE (field), subclasses, + bit_offset); + if (!num) + return 0; + for (i = 0; i < num; i++) + classes[i] = merge_classes (subclasses[i], classes[i]); + } + } + } + else + abort (); + + /* Final merger cleanup. */ + for (i = 0; i < words; i++) + { + /* If one class is MEMORY, everything should be passed in + memory. */ + if (classes[i] == X86_64_MEMORY_CLASS) + return 0; + + /* The X86_64_SSEUP_CLASS should be always preceded by + X86_64_SSE_CLASS. */ + if (classes[i] == X86_64_SSEUP_CLASS + && (i == 0 || classes[i - 1] != X86_64_SSE_CLASS)) + classes[i] = X86_64_SSE_CLASS; + + /* X86_64_X87UP_CLASS should be preceded by X86_64_X87_CLASS. */ + if (classes[i] == X86_64_X87UP_CLASS + && (i == 0 || classes[i - 1] != X86_64_X87_CLASS)) + classes[i] = X86_64_SSE_CLASS; + } + return words; + } + + /* Compute alignment needed. We align all types to natural boundaries with + exception of XFmode that is aligned to 64bits. */ + if (mode != VOIDmode && mode != BLKmode) + { + int mode_alignment = GET_MODE_BITSIZE (mode); + + if (mode == XFmode) + mode_alignment = 128; + else if (mode == XCmode) + mode_alignment = 256; + /* Misaligned fields are always returned in memory. */ + if (bit_offset % mode_alignment) + return 0; + } + + /* Classification of atomic types. */ + switch (mode) + { + case DImode: + case SImode: + case HImode: + case QImode: + case CSImode: + case CHImode: + case CQImode: + if (bit_offset + GET_MODE_BITSIZE (mode) <= 32) + classes[0] = X86_64_INTEGERSI_CLASS; + else + classes[0] = X86_64_INTEGER_CLASS; + return 1; + case CDImode: + case TImode: + classes[0] = classes[1] = X86_64_INTEGER_CLASS; + return 2; + case CTImode: + classes[0] = classes[1] = X86_64_INTEGER_CLASS; + classes[2] = classes[3] = X86_64_INTEGER_CLASS; + return 4; + case SFmode: + if (!(bit_offset % 64)) + classes[0] = X86_64_SSESF_CLASS; + else + classes[0] = X86_64_SSE_CLASS; + return 1; + case DFmode: + classes[0] = X86_64_SSEDF_CLASS; + return 1; + case TFmode: + classes[0] = X86_64_X87_CLASS; + classes[1] = X86_64_X87UP_CLASS; + return 2; + case TCmode: + classes[0] = X86_64_X87_CLASS; + classes[1] = X86_64_X87UP_CLASS; + classes[2] = X86_64_X87_CLASS; + classes[3] = X86_64_X87UP_CLASS; + return 4; + case DCmode: + classes[0] = X86_64_SSEDF_CLASS; + classes[1] = X86_64_SSEDF_CLASS; + return 2; + case SCmode: + classes[0] = X86_64_SSE_CLASS; + return 1; + case V4SFmode: + case V4SImode: + classes[0] = X86_64_SSE_CLASS; + classes[1] = X86_64_SSEUP_CLASS; + return 2; + case V2SFmode: + case V2SImode: + case V4HImode: + case V8QImode: + classes[0] = X86_64_SSE_CLASS; + return 1; + case BLKmode: + case VOIDmode: + return 0; + default: + abort (); + } + } + + /* Examine the argument and return set number of register required in each + class. Return 0 iff parameter should be passed in memory. */ + static int + examine_argument (mode, type, in_return, int_nregs, sse_nregs) + enum machine_mode mode; + tree type; + int *int_nregs, *sse_nregs; + int in_return; + { + enum x86_64_reg_class class[MAX_CLASSES]; + int n = classify_argument (mode, type, class, 0); + + *int_nregs = 0; + *sse_nregs = 0; + if (!n) + return 0; + for (n--; n >= 0; n--) + switch (class[n]) + { + case X86_64_INTEGER_CLASS: + case X86_64_INTEGERSI_CLASS: + (*int_nregs)++; + break; + case X86_64_SSE_CLASS: + case X86_64_SSESF_CLASS: + case X86_64_SSEDF_CLASS: + (*sse_nregs)++; + break; + case X86_64_NO_CLASS: + case X86_64_SSEUP_CLASS: + break; + case X86_64_X87_CLASS: + case X86_64_X87UP_CLASS: + if (!in_return) + return 0; + break; + case X86_64_MEMORY_CLASS: + abort (); + } + return 1; + } + /* Construct container for the argument used by GCC interface. See + FUNCTION_ARG for the detailed description. */ + static rtx + construct_container (mode, type, in_return, nintregs, nsseregs, intreg, sse_regno) + enum machine_mode mode; + tree type; + int in_return; + int nintregs, nsseregs; + const int * intreg; + int sse_regno; + { + enum machine_mode tmpmode; + int bytes = + (mode == BLKmode) ? int_size_in_bytes (type) : (int) GET_MODE_SIZE (mode); + enum x86_64_reg_class class[MAX_CLASSES]; + int n; + int i; + int nexps = 0; + int needed_sseregs, needed_intregs; + rtx exp[MAX_CLASSES]; + rtx ret; + + n = classify_argument (mode, type, class, 0); + if (TARGET_DEBUG_ARG) + { + if (!n) + fprintf (stderr, "Memory class\n"); + else + { + fprintf (stderr, "Classes:"); + for (i = 0; i < n; i++) + { + fprintf (stderr, " %s", x86_64_reg_class_name[class[i]]); + } + fprintf (stderr, "\n"); + } + } + if (!n) + return NULL; + if (!examine_argument (mode, type, in_return, &needed_intregs, &needed_sseregs)) + return NULL; + if (needed_intregs > nintregs || needed_sseregs > nsseregs) + return NULL; + + /* First construct simple cases. Avoid SCmode, since we want to use + single register to pass this type. */ + if (n == 1 && mode != SCmode) + switch (class[0]) + { + case X86_64_INTEGER_CLASS: + case X86_64_INTEGERSI_CLASS: + return gen_rtx_REG (mode, intreg[0]); + case X86_64_SSE_CLASS: + case X86_64_SSESF_CLASS: + case X86_64_SSEDF_CLASS: + return gen_rtx_REG (mode, SSE_REGNO (sse_regno)); + case X86_64_X87_CLASS: + return gen_rtx_REG (mode, FIRST_STACK_REG); + case X86_64_NO_CLASS: + /* Zero sized array, struct or class. */ + return NULL; + default: + abort (); + } + if (n == 2 && class[0] == X86_64_SSE_CLASS && class[1] == X86_64_SSEUP_CLASS) + return gen_rtx_REG (mode, SSE_REGNO (sse_regno)); + if (n == 2 + && class[0] == X86_64_X87_CLASS && class[1] == X86_64_X87UP_CLASS) + return gen_rtx_REG (TFmode, FIRST_STACK_REG); + if (n == 2 && class[0] == X86_64_INTEGER_CLASS + && class[1] == X86_64_INTEGER_CLASS + && (mode == CDImode || mode == TImode) + && intreg[0] + 1 == intreg[1]) + return gen_rtx_REG (mode, intreg[0]); + if (n == 4 + && class[0] == X86_64_X87_CLASS && class[1] == X86_64_X87UP_CLASS + && class[2] == X86_64_X87_CLASS && class[3] == X86_64_X87UP_CLASS) + return gen_rtx_REG (TCmode, FIRST_STACK_REG); + + /* Otherwise figure out the entries of the PARALLEL. */ + for (i = 0; i < n; i++) + { + switch (class[i]) + { + case X86_64_NO_CLASS: + break; + case X86_64_INTEGER_CLASS: + case X86_64_INTEGERSI_CLASS: + /* Merge TImodes on aligned occassions here too. */ + if (i * 8 + 8 > bytes) + tmpmode = mode_for_size ((bytes - i * 8) * BITS_PER_UNIT, MODE_INT, 0); + else if (class[i] == X86_64_INTEGERSI_CLASS) + tmpmode = SImode; + else + tmpmode = DImode; + /* We've requested 24 bytes we don't have mode for. Use DImode. */ + if (tmpmode == BLKmode) + tmpmode = DImode; + exp [nexps++] = gen_rtx_EXPR_LIST (VOIDmode, + gen_rtx_REG (tmpmode, *intreg), + GEN_INT (i*8)); + intreg++; + break; + case X86_64_SSESF_CLASS: + exp [nexps++] = gen_rtx_EXPR_LIST (VOIDmode, + gen_rtx_REG (SFmode, + SSE_REGNO (sse_regno)), + GEN_INT (i*8)); + sse_regno++; + break; + case X86_64_SSEDF_CLASS: + exp [nexps++] = gen_rtx_EXPR_LIST (VOIDmode, + gen_rtx_REG (DFmode, + SSE_REGNO (sse_regno)), + GEN_INT (i*8)); + sse_regno++; + break; + case X86_64_SSE_CLASS: + if (i < n - 1 && class[i + 1] == X86_64_SSEUP_CLASS) + tmpmode = TImode, i++; + else + tmpmode = DImode; + exp [nexps++] = gen_rtx_EXPR_LIST (VOIDmode, + gen_rtx_REG (tmpmode, + SSE_REGNO (sse_regno)), + GEN_INT (i*8)); + sse_regno++; + break; + default: + abort (); + } + } + ret = gen_rtx_PARALLEL (mode, rtvec_alloc (nexps)); + for (i = 0; i < nexps; i++) + XVECEXP (ret, 0, i) = exp [i]; + return ret; + } + /* Update the data in CUM to advance over an argument of mode MODE and data type TYPE. (TYPE is null for libcalls where that information may not be available.) */ *************** function_arg_advance (cum, mode, type, n *** 991,1007 **** fprintf (stderr, "function_adv (sz=%d, wds=%2d, nregs=%d, mode=%s, named=%d)\n\n", words, cum->words, cum->nregs, GET_MODE_NAME (mode), named); ! ! cum->words += words; ! cum->nregs -= words; ! cum->regno += words; ! ! if (cum->nregs <= 0) { ! cum->nregs = 0; ! cum->regno = 0; } return; } --- 2056,2102 ---- fprintf (stderr, "function_adv (sz=%d, wds=%2d, nregs=%d, mode=%s, named=%d)\n\n", words, cum->words, cum->nregs, GET_MODE_NAME (mode), named); ! if (TARGET_64BIT) { ! int int_nregs, sse_nregs; ! if (!examine_argument (mode, type, 0, &int_nregs, &sse_nregs)) ! cum->words += words; ! else if (sse_nregs <= cum->sse_nregs && int_nregs <= cum->nregs) ! { ! cum->nregs -= int_nregs; ! cum->sse_nregs -= sse_nregs; ! cum->regno += int_nregs; ! cum->sse_regno += sse_nregs; ! } ! else ! cum->words += words; } + else + { + if (TARGET_SSE && mode == TImode) + { + cum->sse_words += words; + cum->sse_nregs -= 1; + cum->sse_regno += 1; + if (cum->sse_nregs <= 0) + { + cum->sse_nregs = 0; + cum->sse_regno = 0; + } + } + else + { + cum->words += words; + cum->nregs -= words; + cum->regno += words; + if (cum->nregs <= 0) + { + cum->nregs = 0; + cum->regno = 0; + } + } + } return; } *************** function_arg_advance (cum, mode, type, n *** 1018,1024 **** NAMED is nonzero if this argument is a named parameter (otherwise it is an extra parameter matching an ellipsis). */ ! struct rtx_def * function_arg (cum, mode, type, named) CUMULATIVE_ARGS *cum; /* current arg information */ enum machine_mode mode; /* current arg mode */ --- 2113,2119 ---- NAMED is nonzero if this argument is a named parameter (otherwise it is an extra parameter matching an ellipsis). */ ! rtx function_arg (cum, mode, type, named) CUMULATIVE_ARGS *cum; /* current arg information */ enum machine_mode mode; /* current arg mode */ *************** function_arg (cum, mode, type, named) *** 1030,1050 **** (mode == BLKmode) ? int_size_in_bytes (type) : (int) GET_MODE_SIZE (mode); int words = (bytes + UNITS_PER_WORD - 1) / UNITS_PER_WORD; ! switch (mode) { ! /* For now, pass fp/complex values on the stack. */ ! default: ! break; ! ! case BLKmode: ! case DImode: ! case SImode: ! case HImode: ! case QImode: ! if (words <= cum->nregs) ! ret = gen_rtx_REG (mode, cum->regno); ! break; } if (TARGET_DEBUG_ARG) { --- 2125,2168 ---- (mode == BLKmode) ? int_size_in_bytes (type) : (int) GET_MODE_SIZE (mode); int words = (bytes + UNITS_PER_WORD - 1) / UNITS_PER_WORD; ! /* Handle an hidden AL argument containing number of registers for varargs ! x86-64 functions. For i386 ABI just return constm1_rtx to avoid ! any AL settings. */ ! if (mode == VOIDmode) { ! if (TARGET_64BIT) ! return GEN_INT (cum->maybe_vaarg ! ? (cum->sse_nregs < 0 ! ? SSE_REGPARM_MAX ! : cum->sse_regno) ! : -1); ! else ! return constm1_rtx; } + if (TARGET_64BIT) + ret = construct_container (mode, type, 0, cum->nregs, cum->sse_nregs, + &x86_64_int_parameter_registers [cum->regno], + cum->sse_regno); + else + switch (mode) + { + /* For now, pass fp/complex values on the stack. */ + default: + break; + + case BLKmode: + case DImode: + case SImode: + case HImode: + case QImode: + if (words <= cum->nregs) + ret = gen_rtx_REG (mode, cum->regno); + break; + case TImode: + if (cum->sse_nregs) + ret = gen_rtx_REG (mode, cum->sse_regno); + break; + } if (TARGET_DEBUG_ARG) { *************** function_arg (cum, mode, type, named) *** 1053,1059 **** words, cum->words, cum->nregs, GET_MODE_NAME (mode), named); if (ret) ! fprintf (stderr, ", reg=%%e%s", reg_names[ REGNO(ret) ]); else fprintf (stderr, ", stack"); --- 2171,2177 ---- words, cum->words, cum->nregs, GET_MODE_NAME (mode), named); if (ret) ! fprintf (stderr, ", reg=%%e%s", reg_names[ REGNO (ret) ]); else fprintf (stderr, ", stack"); *************** function_arg (cum, mode, type, named) *** 1062,1068 **** --- 2180,2835 ---- return ret; } + + /* Gives the alignment boundary, in bits, of an argument with the specified mode + and type. */ + + int + ix86_function_arg_boundary (mode, type) + enum machine_mode mode; + tree type; + { + int align; + if (!TARGET_64BIT) + return PARM_BOUNDARY; + if (type) + align = TYPE_ALIGN (type); + else + align = GET_MODE_ALIGNMENT (mode); + if (align < PARM_BOUNDARY) + align = PARM_BOUNDARY; + if (align > 128) + align = 128; + return align; + } + + /* Return true if N is a possible register number of function value. */ + bool + ix86_function_value_regno_p (regno) + int regno; + { + if (!TARGET_64BIT) + { + return ((regno) == 0 + || ((regno) == FIRST_FLOAT_REG && TARGET_FLOAT_RETURNS_IN_80387) + || ((regno) == FIRST_SSE_REG && TARGET_SSE)); + } + return ((regno) == 0 || (regno) == FIRST_FLOAT_REG + || ((regno) == FIRST_SSE_REG && TARGET_SSE) + || ((regno) == FIRST_FLOAT_REG && TARGET_FLOAT_RETURNS_IN_80387)); + } + + /* Define how to find the value returned by a function. + VALTYPE is the data type of the value (as a tree). + If the precise function being called is known, FUNC is its FUNCTION_DECL; + otherwise, FUNC is 0. */ + rtx + ix86_function_value (valtype) + tree valtype; + { + if (TARGET_64BIT) + { + rtx ret = construct_container (TYPE_MODE (valtype), valtype, 1, + REGPARM_MAX, SSE_REGPARM_MAX, + x86_64_int_return_registers, 0); + /* For zero sized structures, construct_continer return NULL, but we need + to keep rest of compiler happy by returning meaningfull value. */ + if (!ret) + ret = gen_rtx_REG (TYPE_MODE (valtype), 0); + return ret; + } + else + return gen_rtx_REG (TYPE_MODE (valtype), VALUE_REGNO (TYPE_MODE (valtype))); + } + + /* Return false iff type is returned in memory. */ + int + ix86_return_in_memory (type) + tree type; + { + int needed_intregs, needed_sseregs; + if (TARGET_64BIT) + { + return !examine_argument (TYPE_MODE (type), type, 1, + &needed_intregs, &needed_sseregs); + } + else + { + if (TYPE_MODE (type) == BLKmode + || (VECTOR_MODE_P (TYPE_MODE (type)) + && int_size_in_bytes (type) == 8) + || (int_size_in_bytes (type) > 12 && TYPE_MODE (type) != TImode + && TYPE_MODE (type) != TFmode + && !VECTOR_MODE_P (TYPE_MODE (type)))) + return 1; + return 0; + } + } + + /* Define how to find the value returned by a library function + assuming the value has mode MODE. */ + rtx + ix86_libcall_value (mode) + enum machine_mode mode; + { + if (TARGET_64BIT) + { + switch (mode) + { + case SFmode: + case SCmode: + case DFmode: + case DCmode: + return gen_rtx_REG (mode, FIRST_SSE_REG); + case TFmode: + case TCmode: + return gen_rtx_REG (mode, FIRST_FLOAT_REG); + default: + return gen_rtx_REG (mode, 0); + } + } + else + return gen_rtx_REG (mode, VALUE_REGNO (mode)); + } + /* Create the va_list data type. */ + + tree + ix86_build_va_list () + { + tree f_gpr, f_fpr, f_ovf, f_sav, record, type_decl; + + /* For i386 we use plain pointer to argument area. */ + if (!TARGET_64BIT) + return build_pointer_type (char_type_node); + + record = make_lang_type (RECORD_TYPE); + type_decl = build_decl (TYPE_DECL, get_identifier ("__va_list_tag"), record); + + f_gpr = build_decl (FIELD_DECL, get_identifier ("gp_offset"), + unsigned_type_node); + f_fpr = build_decl (FIELD_DECL, get_identifier ("fp_offset"), + unsigned_type_node); + f_ovf = build_decl (FIELD_DECL, get_identifier ("overflow_arg_area"), + ptr_type_node); + f_sav = build_decl (FIELD_DECL, get_identifier ("reg_save_area"), + ptr_type_node); + + DECL_FIELD_CONTEXT (f_gpr) = record; + DECL_FIELD_CONTEXT (f_fpr) = record; + DECL_FIELD_CONTEXT (f_ovf) = record; + DECL_FIELD_CONTEXT (f_sav) = record; + + TREE_CHAIN (record) = type_decl; + TYPE_NAME (record) = type_decl; + TYPE_FIELDS (record) = f_gpr; + TREE_CHAIN (f_gpr) = f_fpr; + TREE_CHAIN (f_fpr) = f_ovf; + TREE_CHAIN (f_ovf) = f_sav; + + layout_type (record); + + /* The correct type is an array type of one element. */ + return build_array_type (record, build_index_type (size_zero_node)); + } + + /* Perform any needed actions needed for a function that is receiving a + variable number of arguments. + + CUM is as above. + + MODE and TYPE are the mode and type of the current parameter. + + PRETEND_SIZE is a variable that should be set to the amount of stack + that must be pushed by the prolog to pretend that our caller pushed + it. + + Normally, this macro will push all remaining incoming registers on the + stack and set PRETEND_SIZE to the length of the registers pushed. */ + + void + ix86_setup_incoming_varargs (cum, mode, type, pretend_size, no_rtl) + CUMULATIVE_ARGS *cum; + enum machine_mode mode; + tree type; + int *pretend_size ATTRIBUTE_UNUSED; + int no_rtl; + + { + CUMULATIVE_ARGS next_cum; + rtx save_area = NULL_RTX, mem; + rtx label; + rtx label_ref; + rtx tmp_reg; + rtx nsse_reg; + int set; + tree fntype; + int stdarg_p; + int i; + + if (!TARGET_64BIT) + return; + + /* Indicate to allocate space on the stack for varargs save area. */ + ix86_save_varrargs_registers = 1; + + fntype = TREE_TYPE (current_function_decl); + stdarg_p = (TYPE_ARG_TYPES (fntype) != 0 + && (TREE_VALUE (tree_last (TYPE_ARG_TYPES (fntype))) + != void_type_node)); + + /* For varargs, we do not want to skip the dummy va_dcl argument. + For stdargs, we do want to skip the last named argument. */ + next_cum = *cum; + if (stdarg_p) + function_arg_advance (&next_cum, mode, type, 1); + + if (!no_rtl) + save_area = frame_pointer_rtx; + + set = get_varargs_alias_set (); + + for (i = next_cum.regno; i < ix86_regparm; i++) + { + mem = gen_rtx_MEM (Pmode, + plus_constant (save_area, i * UNITS_PER_WORD)); + set_mem_alias_set (mem, set); + emit_move_insn (mem, gen_rtx_REG (Pmode, + x86_64_int_parameter_registers[i])); + } + + if (next_cum.sse_nregs) + { + /* Now emit code to save SSE registers. The AX parameter contains number + of SSE parameter regsiters used to call this function. We use + sse_prologue_save insn template that produces computed jump across + SSE saves. We need some preparation work to get this working. */ + + label = gen_label_rtx (); + label_ref = gen_rtx_LABEL_REF (Pmode, label); + + /* Compute address to jump to : + label - 5*eax + nnamed_sse_arguments*5 */ + tmp_reg = gen_reg_rtx (Pmode); + nsse_reg = gen_reg_rtx (Pmode); + emit_insn (gen_zero_extendqidi2 (nsse_reg, gen_rtx_REG (QImode, 0))); + emit_insn (gen_rtx_SET (VOIDmode, tmp_reg, + gen_rtx_MULT (Pmode, nsse_reg, + GEN_INT (4)))); + if (next_cum.sse_regno) + emit_move_insn + (nsse_reg, + gen_rtx_CONST (DImode, + gen_rtx_PLUS (DImode, + label_ref, + GEN_INT (next_cum.sse_regno * 4)))); + else + emit_move_insn (nsse_reg, label_ref); + emit_insn (gen_subdi3 (nsse_reg, nsse_reg, tmp_reg)); + + /* Compute address of memory block we save into. We always use pointer + pointing 127 bytes after first byte to store - this is needed to keep + instruction size limited by 4 bytes. */ + tmp_reg = gen_reg_rtx (Pmode); + emit_insn (gen_rtx_SET (VOIDmode, tmp_reg, + plus_constant (save_area, + 8 * REGPARM_MAX + 127))); + mem = gen_rtx_MEM (BLKmode, plus_constant (tmp_reg, -127)); + set_mem_alias_set (mem, set); + set_mem_align (mem, BITS_PER_WORD); + + /* And finally do the dirty job! */ + emit_insn (gen_sse_prologue_save (mem, nsse_reg, + GEN_INT (next_cum.sse_regno), label)); + } + + } + + /* Implement va_start. */ + + void + ix86_va_start (stdarg_p, valist, nextarg) + int stdarg_p; + tree valist; + rtx nextarg; + { + HOST_WIDE_INT words, n_gpr, n_fpr; + tree f_gpr, f_fpr, f_ovf, f_sav; + tree gpr, fpr, ovf, sav, t; + + /* Only 64bit target needs something special. */ + if (!TARGET_64BIT) + { + std_expand_builtin_va_start (stdarg_p, valist, nextarg); + return; + } + + f_gpr = TYPE_FIELDS (TREE_TYPE (va_list_type_node)); + f_fpr = TREE_CHAIN (f_gpr); + f_ovf = TREE_CHAIN (f_fpr); + f_sav = TREE_CHAIN (f_ovf); + + valist = build1 (INDIRECT_REF, TREE_TYPE (TREE_TYPE (valist)), valist); + gpr = build (COMPONENT_REF, TREE_TYPE (f_gpr), valist, f_gpr); + fpr = build (COMPONENT_REF, TREE_TYPE (f_fpr), valist, f_fpr); + ovf = build (COMPONENT_REF, TREE_TYPE (f_ovf), valist, f_ovf); + sav = build (COMPONENT_REF, TREE_TYPE (f_sav), valist, f_sav); + + /* Count number of gp and fp argument registers used. */ + words = current_function_args_info.words; + n_gpr = current_function_args_info.regno; + n_fpr = current_function_args_info.sse_regno; + + if (TARGET_DEBUG_ARG) + fprintf (stderr, "va_start: words = %d, n_gpr = %d, n_fpr = %d\n", + (int) words, (int) n_gpr, (int) n_fpr); + + t = build (MODIFY_EXPR, TREE_TYPE (gpr), gpr, + build_int_2 (n_gpr * 8, 0)); + TREE_SIDE_EFFECTS (t) = 1; + expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); + + t = build (MODIFY_EXPR, TREE_TYPE (fpr), fpr, + build_int_2 (n_fpr * 16 + 8*REGPARM_MAX, 0)); + TREE_SIDE_EFFECTS (t) = 1; + expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); + + /* Find the overflow area. */ + t = make_tree (TREE_TYPE (ovf), virtual_incoming_args_rtx); + if (words != 0) + t = build (PLUS_EXPR, TREE_TYPE (ovf), t, + build_int_2 (words * UNITS_PER_WORD, 0)); + t = build (MODIFY_EXPR, TREE_TYPE (ovf), ovf, t); + TREE_SIDE_EFFECTS (t) = 1; + expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); + + /* Find the register save area. + Prologue of the function save it right above stack frame. */ + t = make_tree (TREE_TYPE (sav), frame_pointer_rtx); + t = build (MODIFY_EXPR, TREE_TYPE (sav), sav, t); + TREE_SIDE_EFFECTS (t) = 1; + expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); + cfun->preferred_stack_boundary = 128; + } + + /* Implement va_arg. */ + rtx + ix86_va_arg (valist, type) + tree valist, type; + { + static int intreg[6] = { 0, 1, 2, 3, 4, 5 }; + tree f_gpr, f_fpr, f_ovf, f_sav; + tree gpr, fpr, ovf, sav, t; + int size, rsize; + rtx lab_false, lab_over = NULL_RTX; + rtx addr_rtx, r; + rtx container; + + /* Only 64bit target needs something special. */ + if (!TARGET_64BIT) + { + return std_expand_builtin_va_arg (valist, type); + } + + f_gpr = TYPE_FIELDS (TREE_TYPE (va_list_type_node)); + f_fpr = TREE_CHAIN (f_gpr); + f_ovf = TREE_CHAIN (f_fpr); + f_sav = TREE_CHAIN (f_ovf); + + valist = build1 (INDIRECT_REF, TREE_TYPE (TREE_TYPE (valist)), valist); + gpr = build (COMPONENT_REF, TREE_TYPE (f_gpr), valist, f_gpr); + fpr = build (COMPONENT_REF, TREE_TYPE (f_fpr), valist, f_fpr); + ovf = build (COMPONENT_REF, TREE_TYPE (f_ovf), valist, f_ovf); + sav = build (COMPONENT_REF, TREE_TYPE (f_sav), valist, f_sav); + + size = int_size_in_bytes (type); + rsize = (size + UNITS_PER_WORD - 1) / UNITS_PER_WORD; + + container = construct_container (TYPE_MODE (type), type, 0, + REGPARM_MAX, SSE_REGPARM_MAX, intreg, 0); + /* + * Pull the value out of the saved registers ... + */ + + addr_rtx = gen_reg_rtx (Pmode); + + if (container) + { + rtx int_addr_rtx, sse_addr_rtx; + int needed_intregs, needed_sseregs; + int need_temp; + + lab_over = gen_label_rtx (); + lab_false = gen_label_rtx (); + + examine_argument (TYPE_MODE (type), type, 0, + &needed_intregs, &needed_sseregs); + + + need_temp = ((needed_intregs && TYPE_ALIGN (type) > 64) + || TYPE_ALIGN (type) > 128); + + /* In case we are passing structure, verify that it is consetuctive block + on the register save area. If not we need to do moves. */ + if (!need_temp && !REG_P (container)) + { + /* Verify that all registers are strictly consetuctive */ + if (SSE_REGNO_P (REGNO (XEXP (XVECEXP (container, 0, 0), 0)))) + { + int i; + + for (i = 0; i < XVECLEN (container, 0) && !need_temp; i++) + { + rtx slot = XVECEXP (container, 0, i); + if (REGNO (XEXP (slot, 0)) != FIRST_SSE_REG + (unsigned int) i + || INTVAL (XEXP (slot, 1)) != i * 16) + need_temp = 1; + } + } + else + { + int i; + + for (i = 0; i < XVECLEN (container, 0) && !need_temp; i++) + { + rtx slot = XVECEXP (container, 0, i); + if (REGNO (XEXP (slot, 0)) != (unsigned int) i + || INTVAL (XEXP (slot, 1)) != i * 8) + need_temp = 1; + } + } + } + if (!need_temp) + { + int_addr_rtx = addr_rtx; + sse_addr_rtx = addr_rtx; + } + else + { + int_addr_rtx = gen_reg_rtx (Pmode); + sse_addr_rtx = gen_reg_rtx (Pmode); + } + /* First ensure that we fit completely in registers. */ + if (needed_intregs) + { + emit_cmp_and_jump_insns (expand_expr + (gpr, NULL_RTX, SImode, EXPAND_NORMAL), + GEN_INT ((REGPARM_MAX - needed_intregs + + 1) * 8), GE, const1_rtx, SImode, + 1, lab_false); + } + if (needed_sseregs) + { + emit_cmp_and_jump_insns (expand_expr + (fpr, NULL_RTX, SImode, EXPAND_NORMAL), + GEN_INT ((SSE_REGPARM_MAX - + needed_sseregs + 1) * 16 + + REGPARM_MAX * 8), GE, const1_rtx, + SImode, 1, lab_false); + } + + /* Compute index to start of area used for integer regs. */ + if (needed_intregs) + { + t = build (PLUS_EXPR, ptr_type_node, sav, gpr); + r = expand_expr (t, int_addr_rtx, Pmode, EXPAND_NORMAL); + if (r != int_addr_rtx) + emit_move_insn (int_addr_rtx, r); + } + if (needed_sseregs) + { + t = build (PLUS_EXPR, ptr_type_node, sav, fpr); + r = expand_expr (t, sse_addr_rtx, Pmode, EXPAND_NORMAL); + if (r != sse_addr_rtx) + emit_move_insn (sse_addr_rtx, r); + } + if (need_temp) + { + int i; + rtx mem; + + /* Never use the memory itself, as it has the alias set. */ + addr_rtx = XEXP (assign_temp (type, 0, 1, 0), 0); + mem = gen_rtx_MEM (BLKmode, addr_rtx); + set_mem_alias_set (mem, get_varargs_alias_set ()); + set_mem_align (mem, BITS_PER_UNIT); + + for (i = 0; i < XVECLEN (container, 0); i++) + { + rtx slot = XVECEXP (container, 0, i); + rtx reg = XEXP (slot, 0); + enum machine_mode mode = GET_MODE (reg); + rtx src_addr; + rtx src_mem; + int src_offset; + rtx dest_mem; + + if (SSE_REGNO_P (REGNO (reg))) + { + src_addr = sse_addr_rtx; + src_offset = (REGNO (reg) - FIRST_SSE_REG) * 16; + } + else + { + src_addr = int_addr_rtx; + src_offset = REGNO (reg) * 8; + } + src_mem = gen_rtx_MEM (mode, src_addr); + set_mem_alias_set (src_mem, get_varargs_alias_set ()); + src_mem = adjust_address (src_mem, mode, src_offset); + dest_mem = adjust_address (mem, mode, INTVAL (XEXP (slot, 1))); + emit_move_insn (dest_mem, src_mem); + } + } + + if (needed_intregs) + { + t = + build (PLUS_EXPR, TREE_TYPE (gpr), gpr, + build_int_2 (needed_intregs * 8, 0)); + t = build (MODIFY_EXPR, TREE_TYPE (gpr), gpr, t); + TREE_SIDE_EFFECTS (t) = 1; + expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); + } + if (needed_sseregs) + { + t = + build (PLUS_EXPR, TREE_TYPE (fpr), fpr, + build_int_2 (needed_sseregs * 16, 0)); + t = build (MODIFY_EXPR, TREE_TYPE (fpr), fpr, t); + TREE_SIDE_EFFECTS (t) = 1; + expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); + } + + emit_jump_insn (gen_jump (lab_over)); + emit_barrier (); + emit_label (lab_false); + } + + /* ... otherwise out of the overflow area. */ + + /* Care for on-stack alignment if needed. */ + if (FUNCTION_ARG_BOUNDARY (VOIDmode, type) <= 64) + t = ovf; + else + { + HOST_WIDE_INT align = FUNCTION_ARG_BOUNDARY (VOIDmode, type) / 8; + t = build (PLUS_EXPR, TREE_TYPE (ovf), ovf, build_int_2 (align - 1, 0)); + t = build (BIT_AND_EXPR, TREE_TYPE (t), t, build_int_2 (-align, -1)); + } + t = save_expr (t); + + r = expand_expr (t, addr_rtx, Pmode, EXPAND_NORMAL); + if (r != addr_rtx) + emit_move_insn (addr_rtx, r); + + t = + build (PLUS_EXPR, TREE_TYPE (t), t, + build_int_2 (rsize * UNITS_PER_WORD, 0)); + t = build (MODIFY_EXPR, TREE_TYPE (ovf), ovf, t); + TREE_SIDE_EFFECTS (t) = 1; + expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); + + if (container) + emit_label (lab_over); + + return addr_rtx; + } + + /* Return nonzero if OP is general operand representable on x86_64. */ + + int + x86_64_general_operand (op, mode) + rtx op; + enum machine_mode mode; + { + if (!TARGET_64BIT) + return general_operand (op, mode); + if (nonimmediate_operand (op, mode)) + return 1; + return x86_64_sign_extended_value (op); + } + + /* Return nonzero if OP is general operand representable on x86_64 + as either sign extended or zero extended constant. */ + + int + x86_64_szext_general_operand (op, mode) + rtx op; + enum machine_mode mode; + { + if (!TARGET_64BIT) + return general_operand (op, mode); + if (nonimmediate_operand (op, mode)) + return 1; + return x86_64_sign_extended_value (op) || x86_64_zero_extended_value (op); + } + + /* Return nonzero if OP is nonmemory operand representable on x86_64. */ + + int + x86_64_nonmemory_operand (op, mode) + rtx op; + enum machine_mode mode; + { + if (!TARGET_64BIT) + return nonmemory_operand (op, mode); + if (register_operand (op, mode)) + return 1; + return x86_64_sign_extended_value (op); + } + + /* Return nonzero if OP is nonmemory operand acceptable by movabs patterns. */ + + int + x86_64_movabs_operand (op, mode) + rtx op; + enum machine_mode mode; + { + if (!TARGET_64BIT || !flag_pic) + return nonmemory_operand (op, mode); + if (register_operand (op, mode) || x86_64_sign_extended_value (op)) + return 1; + if (CONSTANT_P (op) && !symbolic_reference_mentioned_p (op)) + return 1; + return 0; + } + + /* Return nonzero if OP is nonmemory operand representable on x86_64. */ + + int + x86_64_szext_nonmemory_operand (op, mode) + rtx op; + enum machine_mode mode; + { + if (!TARGET_64BIT) + return nonmemory_operand (op, mode); + if (register_operand (op, mode)) + return 1; + return x86_64_sign_extended_value (op) || x86_64_zero_extended_value (op); + } + + /* Return nonzero if OP is immediate operand representable on x86_64. */ + + int + x86_64_immediate_operand (op, mode) + rtx op; + enum machine_mode mode; + { + if (!TARGET_64BIT) + return immediate_operand (op, mode); + return x86_64_sign_extended_value (op); + } + + /* Return nonzero if OP is immediate operand representable on x86_64. */ + + int + x86_64_zext_immediate_operand (op, mode) + rtx op; + enum machine_mode mode ATTRIBUTE_UNUSED; + { + return x86_64_zero_extended_value (op); + } /* Return nonzero if OP is (const_int 1), else return zero. */ *************** symbolic_operand (op, mode) *** 1093,1100 **** if (GET_CODE (op) == SYMBOL_REF || GET_CODE (op) == LABEL_REF || (GET_CODE (op) == UNSPEC ! && XINT (op, 1) >= 6 ! && XINT (op, 1) <= 7)) return 1; if (GET_CODE (op) != PLUS || GET_CODE (XEXP (op, 1)) != CONST_INT) --- 2860,2868 ---- if (GET_CODE (op) == SYMBOL_REF || GET_CODE (op) == LABEL_REF || (GET_CODE (op) == UNSPEC ! && (XINT (op, 1) == 6 ! || XINT (op, 1) == 7 ! || XINT (op, 1) == 15))) return 1; if (GET_CODE (op) != PLUS || GET_CODE (XEXP (op, 1)) != CONST_INT) *************** pic_symbolic_operand (op, mode) *** 1127,1135 **** register rtx op; enum machine_mode mode ATTRIBUTE_UNUSED; { ! if (GET_CODE (op) == CONST) { - op = XEXP (op, 0); if (GET_CODE (op) == UNSPEC) return 1; if (GET_CODE (op) != PLUS --- 2895,2910 ---- register rtx op; enum machine_mode mode ATTRIBUTE_UNUSED; { ! if (GET_CODE (op) != CONST) ! return 0; ! op = XEXP (op, 0); ! if (TARGET_64BIT) ! { ! if (GET_CODE (XEXP (op, 0)) == UNSPEC) ! return 1; ! } ! else { if (GET_CODE (op) == UNSPEC) return 1; if (GET_CODE (op) != PLUS *************** local_symbolic_operand (op, mode) *** 1168,1174 **** /* There is, however, a not insubstantial body of code in the rest of the compiler that assumes it can just stick the results of ASM_GENERATE_INTERNAL_LABEL in a symbol_ref and have done. */ ! if (strncmp (XSTR (op, 0), internal_label_prefix, internal_label_prefix_len) == 0) return 1; --- 2943,2950 ---- /* There is, however, a not insubstantial body of code in the rest of the compiler that assumes it can just stick the results of ASM_GENERATE_INTERNAL_LABEL in a symbol_ref and have done. */ ! /* ??? This is a hack. Should update the body of the compiler to ! always create a DECL an invoke ENCODE_SECTION_INFO. */ if (strncmp (XSTR (op, 0), internal_label_prefix, internal_label_prefix_len) == 0) return 1; *************** const248_operand (op, mode) *** 1258,1276 **** int incdec_operand (op, mode) register rtx op; ! enum machine_mode mode; { ! if (op == const1_rtx || op == constm1_rtx) ! return 1; ! if (GET_CODE (op) != CONST_INT) return 0; ! if (mode == SImode && INTVAL (op) == (HOST_WIDE_INT) 0xffffffff) ! return 1; ! if (mode == HImode && INTVAL (op) == (HOST_WIDE_INT) 0xffff) ! return 1; ! if (mode == QImode && INTVAL (op) == (HOST_WIDE_INT) 0xff) ! return 1; ! return 0; } /* Return false if this is the stack pointer, or any other fake --- 3034,3060 ---- int incdec_operand (op, mode) register rtx op; ! enum machine_mode mode ATTRIBUTE_UNUSED; { ! /* On Pentium4, the inc and dec operations causes extra dependency on flag ! registers, since carry flag is not set. */ ! if (TARGET_PENTIUM4 && !optimize_size) return 0; ! return op == const1_rtx || op == constm1_rtx; ! } ! ! /* Return nonzero if OP is acceptable as operand of DImode shift ! expander. */ ! ! int ! shiftdi_operand (op, mode) ! rtx op; ! enum machine_mode mode ATTRIBUTE_UNUSED; ! { ! if (TARGET_64BIT) ! return nonimmediate_operand (op, mode); ! else ! return register_operand (op, mode); } /* Return false if this is the stack pointer, or any other fake *************** sse_comparison_operator (op, mode) *** 1380,1386 **** enum machine_mode mode ATTRIBUTE_UNUSED; { enum rtx_code code = GET_CODE (op); ! return code == EQ || code == LT || code == LE || code == UNORDERED; } /* Return 1 if OP is a valid comparison operator in valid mode. */ int --- 3164,3192 ---- enum machine_mode mode ATTRIBUTE_UNUSED; { enum rtx_code code = GET_CODE (op); ! switch (code) ! { ! /* Operations supported directly. */ ! case EQ: ! case LT: ! case LE: ! case UNORDERED: ! case NE: ! case UNGE: ! case UNGT: ! case ORDERED: ! return 1; ! /* These are equivalent to ones above in non-IEEE comparisons. */ ! case UNEQ: ! case UNLT: ! case UNLE: ! case LTGT: ! case GE: ! case GT: ! return !TARGET_IEEE_FP; ! default: ! return 0; ! } } /* Return 1 if OP is a valid comparison operator in valid mode. */ int *************** ext_register_operand (op, mode) *** 1508,1516 **** register rtx op; enum machine_mode mode ATTRIBUTE_UNUSED; { ! if (GET_MODE (op) != SImode && GET_MODE (op) != HImode) return 0; ! return register_operand (op, VOIDmode); } /* Return 1 if this is a valid binary floating-point operation. --- 3314,3330 ---- register rtx op; enum machine_mode mode ATTRIBUTE_UNUSED; { ! int regno; ! if ((!TARGET_64BIT || GET_MODE (op) != DImode) ! && GET_MODE (op) != SImode && GET_MODE (op) != HImode) return 0; ! ! if (!register_operand (op, VOIDmode)) ! return 0; ! ! /* Be curefull to accept only registers having upper parts. */ ! regno = REG_P (op) ? REGNO (op) : REGNO (SUBREG_REG (op)); ! return (regno > LAST_VIRTUAL_REGISTER || regno < 4); } /* Return 1 if this is a valid binary floating-point operation. *************** binary_fp_operator (op, mode) *** 1538,1544 **** } int ! mult_operator(op, mode) register rtx op; enum machine_mode mode ATTRIBUTE_UNUSED; { --- 3352,3358 ---- } int ! mult_operator (op, mode) register rtx op; enum machine_mode mode ATTRIBUTE_UNUSED; { *************** mult_operator(op, mode) *** 1546,1552 **** } int ! div_operator(op, mode) register rtx op; enum machine_mode mode ATTRIBUTE_UNUSED; { --- 3360,3366 ---- } int ! div_operator (op, mode) register rtx op; enum machine_mode mode ATTRIBUTE_UNUSED; { *************** cmpsi_operand (op, mode) *** 1592,1598 **** rtx op; enum machine_mode mode; { ! if (general_operand (op, mode)) return 1; if (GET_CODE (op) == AND --- 3406,3412 ---- rtx op; enum machine_mode mode; { ! if (nonimmediate_operand (op, mode)) return 1; if (GET_CODE (op) == AND *************** int *** 1684,1723 **** standard_80387_constant_p (x) rtx x; { ! if (GET_CODE (x) != CONST_DOUBLE) return -1; ! ! #if ! defined (REAL_IS_NOT_DOUBLE) || defined (REAL_ARITHMETIC) ! { ! REAL_VALUE_TYPE d; ! jmp_buf handler; ! int is0, is1; ! ! if (setjmp (handler)) ! return 0; ! ! set_float_handler (handler); ! REAL_VALUE_FROM_CONST_DOUBLE (d, x); ! is0 = REAL_VALUES_EQUAL (d, dconst0) && !REAL_VALUE_MINUS_ZERO (d); ! is1 = REAL_VALUES_EQUAL (d, dconst1); ! set_float_handler (NULL_PTR); ! ! if (is0) ! return 1; ! ! if (is1) ! return 2; ! ! /* Note that on the 80387, other constants, such as pi, ! are much slower to load as standard constants ! than to load from doubles in memory! */ ! /* ??? Not true on K6: all constants are equal cost. */ ! } ! #endif ! return 0; } /* Returns 1 if OP contains a symbol reference */ int --- 3498,3526 ---- standard_80387_constant_p (x) rtx x; { ! if (GET_CODE (x) != CONST_DOUBLE || !FLOAT_MODE_P (GET_MODE (x))) return -1; ! /* Note that on the 80387, other constants, such as pi, that we should support ! too. On some machines, these are much slower to load as standard constant, ! than to load from doubles in memory. */ ! if (x == CONST0_RTX (GET_MODE (x))) ! return 1; ! if (x == CONST1_RTX (GET_MODE (x))) ! return 2; return 0; } + /* Return 1 if X is FP constant we can load to SSE register w/o using memory. + */ + int + standard_sse_constant_p (x) + rtx x; + { + if (GET_CODE (x) != CONST_DOUBLE) + return -1; + return (x == CONST0_RTX (GET_MODE (x))); + } + /* Returns 1 if OP contains a symbol reference */ int *************** ix86_can_use_return_insn_p () *** 1770,1779 **** if (NON_SAVING_SETJMP && current_function_calls_setjmp) return 0; #endif - #ifdef FUNCTION_BLOCK_PROFILER_EXIT - if (profile_block_flag == 2) - return 0; - #endif if (! reload_completed || frame_pointer_needed) return 0; --- 3573,3578 ---- *************** ix86_can_use_return_insn_p () *** 1787,1792 **** --- 3586,3756 ---- ix86_compute_frame_layout (&frame); return frame.to_allocate == 0 && frame.nregs == 0; } + + /* Return 1 if VALUE can be stored in the sign extended immediate field. */ + int + x86_64_sign_extended_value (value) + rtx value; + { + switch (GET_CODE (value)) + { + /* CONST_DOUBLES never match, since HOST_BITS_PER_WIDE_INT is known + to be at least 32 and this all acceptable constants are + represented as CONST_INT. */ + case CONST_INT: + if (HOST_BITS_PER_WIDE_INT == 32) + return 1; + else + { + HOST_WIDE_INT val = trunc_int_for_mode (INTVAL (value), DImode); + return trunc_int_for_mode (val, SImode) == val; + } + break; + + /* For certain code models, the symbolic references are known to fit. */ + case SYMBOL_REF: + return ix86_cmodel == CM_SMALL || ix86_cmodel == CM_KERNEL; + + /* For certain code models, the code is near as well. */ + case LABEL_REF: + return ix86_cmodel != CM_LARGE && ix86_cmodel != CM_SMALL_PIC; + + /* We also may accept the offsetted memory references in certain special + cases. */ + case CONST: + if (GET_CODE (XEXP (value, 0)) == UNSPEC + && XVECLEN (XEXP (value, 0), 0) == 1 + && XINT (XEXP (value, 0), 1) == 15) + return 1; + else if (GET_CODE (XEXP (value, 0)) == PLUS) + { + rtx op1 = XEXP (XEXP (value, 0), 0); + rtx op2 = XEXP (XEXP (value, 0), 1); + HOST_WIDE_INT offset; + + if (ix86_cmodel == CM_LARGE) + return 0; + if (GET_CODE (op2) != CONST_INT) + return 0; + offset = trunc_int_for_mode (INTVAL (op2), DImode); + switch (GET_CODE (op1)) + { + case SYMBOL_REF: + /* For CM_SMALL assume that latest object is 1MB before + end of 31bits boundary. We may also accept pretty + large negative constants knowing that all objects are + in the positive half of address space. */ + if (ix86_cmodel == CM_SMALL + && offset < 1024*1024*1024 + && trunc_int_for_mode (offset, SImode) == offset) + return 1; + /* For CM_KERNEL we know that all object resist in the + negative half of 32bits address space. We may not + accept negative offsets, since they may be just off + and we may accept pretty large positive ones. */ + if (ix86_cmodel == CM_KERNEL + && offset > 0 + && trunc_int_for_mode (offset, SImode) == offset) + return 1; + break; + case LABEL_REF: + /* These conditions are similar to SYMBOL_REF ones, just the + constraints for code models differ. */ + if ((ix86_cmodel == CM_SMALL || ix86_cmodel == CM_MEDIUM) + && offset < 1024*1024*1024 + && trunc_int_for_mode (offset, SImode) == offset) + return 1; + if (ix86_cmodel == CM_KERNEL + && offset > 0 + && trunc_int_for_mode (offset, SImode) == offset) + return 1; + break; + default: + return 0; + } + } + return 0; + default: + return 0; + } + } + + /* Return 1 if VALUE can be stored in the zero extended immediate field. */ + int + x86_64_zero_extended_value (value) + rtx value; + { + switch (GET_CODE (value)) + { + case CONST_DOUBLE: + if (HOST_BITS_PER_WIDE_INT == 32) + return (GET_MODE (value) == VOIDmode + && !CONST_DOUBLE_HIGH (value)); + else + return 0; + case CONST_INT: + if (HOST_BITS_PER_WIDE_INT == 32) + return INTVAL (value) >= 0; + else + return !(INTVAL (value) & ~(HOST_WIDE_INT) 0xffffffff); + break; + + /* For certain code models, the symbolic references are known to fit. */ + case SYMBOL_REF: + return ix86_cmodel == CM_SMALL; + + /* For certain code models, the code is near as well. */ + case LABEL_REF: + return ix86_cmodel == CM_SMALL || ix86_cmodel == CM_MEDIUM; + + /* We also may accept the offsetted memory references in certain special + cases. */ + case CONST: + if (GET_CODE (XEXP (value, 0)) == PLUS) + { + rtx op1 = XEXP (XEXP (value, 0), 0); + rtx op2 = XEXP (XEXP (value, 0), 1); + + if (ix86_cmodel == CM_LARGE) + return 0; + switch (GET_CODE (op1)) + { + case SYMBOL_REF: + return 0; + /* For small code model we may accept pretty large positive + offsets, since one bit is available for free. Negative + offsets are limited by the size of NULL pointer area + specified by the ABI. */ + if (ix86_cmodel == CM_SMALL + && GET_CODE (op2) == CONST_INT + && trunc_int_for_mode (INTVAL (op2), DImode) > -0x10000 + && (trunc_int_for_mode (INTVAL (op2), SImode) + == INTVAL (op2))) + return 1; + /* ??? For the kernel, we may accept adjustment of + -0x10000000, since we know that it will just convert + negative address space to positive, but perhaps this + is not worthwhile. */ + break; + case LABEL_REF: + /* These conditions are similar to SYMBOL_REF ones, just the + constraints for code models differ. */ + if ((ix86_cmodel == CM_SMALL || ix86_cmodel == CM_MEDIUM) + && GET_CODE (op2) == CONST_INT + && trunc_int_for_mode (INTVAL (op2), DImode) > -0x10000 + && (trunc_int_for_mode (INTVAL (op2), SImode) + == INTVAL (op2))) + return 1; + break; + default: + return 0; + } + } + return 0; + default: + return 0; + } + } /* Value should be nonzero if functions must have frame pointers. Zero means the frame pointer need not be set up (and parms may *************** ix86_frame_pointer_required () *** 1799,1805 **** to be able to access the saved ebp value in our frame. */ if (cfun->machine->accesses_prev_frame) return 1; ! /* Several x86 os'es need a frame pointer for other reasons, usually pertaining to setjmp. */ if (SUBTARGET_FRAME_POINTER_REQUIRED) --- 3763,3769 ---- to be able to access the saved ebp value in our frame. */ if (cfun->machine->accesses_prev_frame) return 1; ! /* Several x86 os'es need a frame pointer for other reasons, usually pertaining to setjmp. */ if (SUBTARGET_FRAME_POINTER_REQUIRED) *************** ix86_asm_file_end (file) *** 1839,1845 **** /* ??? Binutils 2.10 and earlier has a linkonce elimination bug related to updating relocations to a section being discarded such that this doesn't work. Ought to detect this at configure time. */ ! #if 0 && defined (ASM_OUTPUT_SECTION_NAME) /* The trick here is to create a linkonce section containing the pic label thunk, but to refer to it with an internal label. Because the label is internal, we don't have inter-dso name --- 3803,3809 ---- /* ??? Binutils 2.10 and earlier has a linkonce elimination bug related to updating relocations to a section being discarded such that this doesn't work. Ought to detect this at configure time. */ ! #if 0 /* The trick here is to create a linkonce section containing the pic label thunk, but to refer to it with an internal label. Because the label is internal, we don't have inter-dso name *************** ix86_asm_file_end (file) *** 1847,1862 **** In order to use these macros, however, we must create a fake function decl. */ ! { ! tree decl = build_decl (FUNCTION_DECL, ! get_identifier ("i686.get_pc_thunk"), ! error_mark_node); ! DECL_ONE_ONLY (decl) = 1; ! UNIQUE_SECTION (decl, 0); ! named_section (decl, NULL, 0); ! } #else ! text_section (); #endif /* This used to call ASM_DECLARE_FUNCTION_NAME() but since it's an --- 3811,3828 ---- In order to use these macros, however, we must create a fake function decl. */ ! if (targetm.have_named_sections) ! { ! tree decl = build_decl (FUNCTION_DECL, ! get_identifier ("i686.get_pc_thunk"), ! error_mark_node); ! DECL_ONE_ONLY (decl) = 1; ! UNIQUE_SECTION (decl, 0); ! named_section (decl, NULL); ! } ! else #else ! text_section (); #endif /* This used to call ASM_DECLARE_FUNCTION_NAME() but since it's an *************** load_pic_register () *** 1879,1884 **** --- 3845,3853 ---- { rtx gotsym, pclab; + if (TARGET_64BIT) + abort (); + gotsym = gen_rtx_SYMBOL_REF (Pmode, "_GLOBAL_OFFSET_TABLE_"); if (TARGET_DEEP_BRANCH_PREDICTION) *************** load_pic_register () *** 1900,1926 **** emit_insn (gen_prologue_set_got (pic_offset_table_rtx, gotsym, pclab)); } ! /* Generate an SImode "push" pattern for input ARG. */ static rtx gen_push (arg) rtx arg; { return gen_rtx_SET (VOIDmode, ! gen_rtx_MEM (SImode, ! gen_rtx_PRE_DEC (SImode, stack_pointer_rtx)), arg); } /* Return 1 if we need to save REGNO. */ ! static int ix86_save_reg (regno, maybe_eh_return) int regno; int maybe_eh_return; { ! if (flag_pic ! && regno == PIC_OFFSET_TABLE_REGNUM && (current_function_uses_pic_offset_table || current_function_uses_const_pool || current_function_calls_eh_return)) --- 3869,3894 ---- emit_insn (gen_prologue_set_got (pic_offset_table_rtx, gotsym, pclab)); } ! /* Generate an "push" pattern for input ARG. */ static rtx gen_push (arg) rtx arg; { return gen_rtx_SET (VOIDmode, ! gen_rtx_MEM (Pmode, ! gen_rtx_PRE_DEC (Pmode, stack_pointer_rtx)), arg); } /* Return 1 if we need to save REGNO. */ ! static int ix86_save_reg (regno, maybe_eh_return) int regno; int maybe_eh_return; { ! if (regno == PIC_OFFSET_TABLE_REGNUM && (current_function_uses_pic_offset_table || current_function_uses_const_pool || current_function_calls_eh_return)) *************** ix86_save_reg (regno, maybe_eh_return) *** 1931,1937 **** unsigned i; for (i = 0; ; i++) { ! unsigned test = EH_RETURN_DATA_REGNO(i); if (test == INVALID_REGNUM) break; if (test == (unsigned) regno) --- 3899,3905 ---- unsigned i; for (i = 0; ; i++) { ! unsigned test = EH_RETURN_DATA_REGNO (i); if (test == INVALID_REGNUM) break; if (test == (unsigned) regno) *************** ix86_compute_frame_layout (frame) *** 2010,2016 **** /* Do some sanity checking of stack_alignment_needed and preferred_alignment, since i386 port is the only using those features ! that may break easilly. */ if (size && !stack_alignment_needed) abort (); --- 3978,3984 ---- /* Do some sanity checking of stack_alignment_needed and preferred_alignment, since i386 port is the only using those features ! that may break easily. */ if (size && !stack_alignment_needed) abort (); *************** ix86_compute_frame_layout (frame) *** 2027,2032 **** --- 3995,4009 ---- /* Register save area */ offset += frame->nregs * UNITS_PER_WORD; + /* Va-arg area */ + if (ix86_save_varrargs_registers) + { + offset += X86_64_VARARGS_SIZE; + frame->va_arg_size = X86_64_VARARGS_SIZE; + } + else + frame->va_arg_size = 0; + /* Align start of frame for local function. */ frame->padding1 = ((offset + stack_alignment_needed - 1) & -stack_alignment_needed) - offset; *************** ix86_compute_frame_layout (frame) *** 2059,2073 **** /* Size prologue needs to allocate. */ frame->to_allocate = (size + frame->padding1 + frame->padding2 ! + frame->outgoing_arguments_size); #if 0 fprintf (stderr, "nregs: %i\n", frame->nregs); fprintf (stderr, "size: %i\n", size); fprintf (stderr, "alignment1: %i\n", stack_alignment_needed); fprintf (stderr, "padding1: %i\n", frame->padding1); fprintf (stderr, "padding2: %i\n", frame->padding2); fprintf (stderr, "to_allocate: %i\n", frame->to_allocate); fprintf (stderr, "frame_pointer_offset: %i\n", frame->frame_pointer_offset); fprintf (stderr, "hard_frame_pointer_offset: %i\n", frame->hard_frame_pointer_offset); --- 4036,4063 ---- /* Size prologue needs to allocate. */ frame->to_allocate = (size + frame->padding1 + frame->padding2 ! + frame->outgoing_arguments_size + frame->va_arg_size); + if (TARGET_64BIT && TARGET_RED_ZONE && current_function_sp_is_unchanging + && current_function_is_leaf) + { + frame->red_zone_size = frame->to_allocate; + if (frame->red_zone_size > RED_ZONE_SIZE - RED_ZONE_RESERVE) + frame->red_zone_size = RED_ZONE_SIZE - RED_ZONE_RESERVE; + } + else + frame->red_zone_size = 0; + frame->to_allocate -= frame->red_zone_size; + frame->stack_pointer_offset -= frame->red_zone_size; #if 0 fprintf (stderr, "nregs: %i\n", frame->nregs); fprintf (stderr, "size: %i\n", size); fprintf (stderr, "alignment1: %i\n", stack_alignment_needed); fprintf (stderr, "padding1: %i\n", frame->padding1); + fprintf (stderr, "va_arg: %i\n", frame->va_arg_size); fprintf (stderr, "padding2: %i\n", frame->padding2); fprintf (stderr, "to_allocate: %i\n", frame->to_allocate); + fprintf (stderr, "red_zone_size: %i\n", frame->red_zone_size); fprintf (stderr, "frame_pointer_offset: %i\n", frame->frame_pointer_offset); fprintf (stderr, "hard_frame_pointer_offset: %i\n", frame->hard_frame_pointer_offset); *************** ix86_emit_save_regs () *** 2086,2106 **** for (regno = FIRST_PSEUDO_REGISTER - 1; regno >= 0; regno--) if (ix86_save_reg (regno, true)) { ! insn = emit_insn (gen_push (gen_rtx_REG (SImode, regno))); RTX_FRAME_RELATED_P (insn) = 1; } } /* Expand the prologue into a bunch of separate insns. */ void ix86_expand_prologue () { rtx insn; ! int pic_reg_used = flag_pic && (current_function_uses_pic_offset_table ! || current_function_uses_const_pool); struct ix86_frame frame; ix86_compute_frame_layout (&frame); /* Note: AT&T enter does NOT have reversed args. Enter is probably --- 4076,4127 ---- for (regno = FIRST_PSEUDO_REGISTER - 1; regno >= 0; regno--) if (ix86_save_reg (regno, true)) { ! insn = emit_insn (gen_push (gen_rtx_REG (Pmode, regno))); RTX_FRAME_RELATED_P (insn) = 1; } } + /* Emit code to save registers using MOV insns. First register + is restored from POINTER + OFFSET. */ + static void + ix86_emit_save_regs_using_mov (pointer, offset) + rtx pointer; + HOST_WIDE_INT offset; + { + int regno; + rtx insn; + + for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) + if (ix86_save_reg (regno, true)) + { + insn = emit_move_insn (adjust_address (gen_rtx_MEM (Pmode, pointer), + Pmode, offset), + gen_rtx_REG (Pmode, regno)); + RTX_FRAME_RELATED_P (insn) = 1; + offset += UNITS_PER_WORD; + } + } + /* Expand the prologue into a bunch of separate insns. */ void ix86_expand_prologue () { rtx insn; ! int pic_reg_used = (flag_pic && (current_function_uses_pic_offset_table ! || current_function_uses_const_pool) ! && !TARGET_64BIT); struct ix86_frame frame; + int use_mov = 0; + HOST_WIDE_INT allocate; + if (!optimize_size) + { + use_fast_prologue_epilogue + = !expensive_function_p (FAST_PROLOGUE_INSN_COUNT); + if (TARGET_PROLOGUE_USING_MOVE) + use_mov = use_fast_prologue_epilogue; + } ix86_compute_frame_layout (&frame); /* Note: AT&T enter does NOT have reversed args. Enter is probably *************** ix86_expand_prologue () *** 2115,2129 **** RTX_FRAME_RELATED_P (insn) = 1; } ! ix86_emit_save_regs (); ! if (frame.to_allocate == 0) ; ! else if (! TARGET_STACK_PROBE || frame.to_allocate < CHECK_STACK_LIMIT) { insn = emit_insn (gen_pro_epilogue_adjust_stack (stack_pointer_rtx, stack_pointer_rtx, ! GEN_INT (-frame.to_allocate))); RTX_FRAME_RELATED_P (insn) = 1; } else --- 4136,4159 ---- RTX_FRAME_RELATED_P (insn) = 1; } ! allocate = frame.to_allocate; ! /* In case we are dealing only with single register and empty frame, ! push is equivalent of the mov+add sequence. */ ! if (allocate == 0 && frame.nregs <= 1) ! use_mov = 0; ! if (!use_mov) ! ix86_emit_save_regs (); ! else ! allocate += frame.nregs * UNITS_PER_WORD; ! ! if (allocate == 0) ; ! else if (! TARGET_STACK_PROBE || allocate < CHECK_STACK_LIMIT) { insn = emit_insn (gen_pro_epilogue_adjust_stack (stack_pointer_rtx, stack_pointer_rtx, ! GEN_INT (-allocate))); RTX_FRAME_RELATED_P (insn) = 1; } else *************** ix86_expand_prologue () *** 2132,2148 **** rtx arg0, sym; arg0 = gen_rtx_REG (SImode, 0); ! emit_move_insn (arg0, GEN_INT (frame.to_allocate)); sym = gen_rtx_MEM (FUNCTION_MODE, gen_rtx_SYMBOL_REF (Pmode, "_alloca")); ! insn = emit_call_insn (gen_call (sym, const0_rtx)); CALL_INSN_FUNCTION_USAGE (insn) = gen_rtx_EXPR_LIST (VOIDmode, gen_rtx_USE (VOIDmode, arg0), CALL_INSN_FUNCTION_USAGE (insn)); } #ifdef SUBTARGET_PROLOGUE SUBTARGET_PROLOGUE; --- 4162,4189 ---- rtx arg0, sym; + if (TARGET_64BIT) + abort (); + arg0 = gen_rtx_REG (SImode, 0); ! emit_move_insn (arg0, GEN_INT (allocate)); sym = gen_rtx_MEM (FUNCTION_MODE, gen_rtx_SYMBOL_REF (Pmode, "_alloca")); ! insn = emit_call_insn (gen_call (sym, const0_rtx, constm1_rtx)); CALL_INSN_FUNCTION_USAGE (insn) = gen_rtx_EXPR_LIST (VOIDmode, gen_rtx_USE (VOIDmode, arg0), CALL_INSN_FUNCTION_USAGE (insn)); } + if (use_mov) + { + if (!frame_pointer_needed || !frame.to_allocate) + ix86_emit_save_regs_using_mov (stack_pointer_rtx, frame.to_allocate); + else + ix86_emit_save_regs_using_mov (hard_frame_pointer_rtx, + -frame.nregs * UNITS_PER_WORD); + } #ifdef SUBTARGET_PROLOGUE SUBTARGET_PROLOGUE; *************** ix86_expand_prologue () *** 2154,2175 **** /* If we are profiling, make sure no instructions are scheduled before the call to mcount. However, if -fpic, the above call will have done that. */ ! if ((profile_flag || profile_block_flag) && ! pic_reg_used) emit_insn (gen_blockage ()); } - /* Emit code to add TSIZE to esp value. Use POP instruction when - profitable. */ - - static void - ix86_emit_epilogue_esp_adjustment (tsize) - int tsize; - { - emit_insn (gen_pro_epilogue_adjust_stack (stack_pointer_rtx, - stack_pointer_rtx, - GEN_INT (tsize))); - } - /* Emit code to restore saved registers using MOV insns. First register is restored from POINTER + OFFSET. */ static void --- 4195,4204 ---- /* If we are profiling, make sure no instructions are scheduled before the call to mcount. However, if -fpic, the above call will have done that. */ ! if (current_function_profile && ! pic_reg_used) emit_insn (gen_blockage ()); } /* Emit code to restore saved registers using MOV insns. First register is restored from POINTER + OFFSET. */ static void *************** ix86_emit_restore_regs_using_mov (pointe *** 2183,2193 **** for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) if (ix86_save_reg (regno, maybe_eh_return)) { ! emit_move_insn (gen_rtx_REG (SImode, regno), ! adj_offsettable_operand (gen_rtx_MEM (SImode, ! pointer), ! offset)); ! offset += 4; } } --- 4212,4221 ---- for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) if (ix86_save_reg (regno, maybe_eh_return)) { ! emit_move_insn (gen_rtx_REG (Pmode, regno), ! adjust_address (gen_rtx_MEM (Pmode, pointer), ! Pmode, offset)); ! offset += UNITS_PER_WORD; } } *************** ix86_expand_epilogue (style) *** 2204,2210 **** ix86_compute_frame_layout (&frame); ! /* Calculate start of saved registers relative to ebp. Special care must be taken for the normal return case of a function using eh_return: the eax and edx registers are marked as saved, but not restored along this path. */ --- 4232,4238 ---- ix86_compute_frame_layout (&frame); ! /* Calculate start of saved registers relative to ebp. Special care must be taken for the normal return case of a function using eh_return: the eax and edx registers are marked as saved, but not restored along this path. */ *************** ix86_expand_epilogue (style) *** 2213,2225 **** offset -= 2; offset *= -UNITS_PER_WORD; - #ifdef FUNCTION_BLOCK_PROFILER_EXIT - if (profile_block_flag == 2) - { - FUNCTION_BLOCK_PROFILER_EXIT; - } - #endif - /* If we're only restoring one register and sp is not valid then using a move instruction to restore the register since it's less work than reloading sp and popping the register. --- 4241,4246 ---- *************** ix86_expand_epilogue (style) *** 2231,2240 **** and there is exactly one register to pop. This heruistic may need some tuning in future. */ if ((!sp_valid && frame.nregs <= 1) || (frame_pointer_needed && !frame.nregs && frame.to_allocate) ! || (frame_pointer_needed && TARGET_USE_LEAVE && !optimize_size ! && frame.nregs == 1) ! || style == 2) { /* Restore registers. We can use ebp or esp to address the memory locations. If both are available, default to ebp, since offsets --- 4252,4264 ---- and there is exactly one register to pop. This heruistic may need some tuning in future. */ if ((!sp_valid && frame.nregs <= 1) + || (TARGET_EPILOGUE_USING_MOVE + && use_fast_prologue_epilogue + && (frame.nregs > 1 || frame.to_allocate)) || (frame_pointer_needed && !frame.nregs && frame.to_allocate) ! || (frame_pointer_needed && TARGET_USE_LEAVE ! && use_fast_prologue_epilogue && frame.nregs == 1) ! || current_function_calls_eh_return) { /* Restore registers. We can use ebp or esp to address the memory locations. If both are available, default to ebp, since offsets *************** ix86_expand_epilogue (style) *** 2275,2291 **** } } else if (!frame_pointer_needed) ! ix86_emit_epilogue_esp_adjustment (frame.to_allocate ! + frame.nregs * UNITS_PER_WORD); /* If not an i386, mov & pop is faster than "leave". */ ! else if (TARGET_USE_LEAVE || optimize_size) ! emit_insn (gen_leave ()); else { emit_insn (gen_pro_epilogue_adjust_stack (stack_pointer_rtx, hard_frame_pointer_rtx, const0_rtx)); ! emit_insn (gen_popsi1 (hard_frame_pointer_rtx)); } } else --- 4299,4320 ---- } } else if (!frame_pointer_needed) ! emit_insn (gen_pro_epilogue_adjust_stack ! (stack_pointer_rtx, stack_pointer_rtx, ! GEN_INT (frame.to_allocate ! + frame.nregs * UNITS_PER_WORD))); /* If not an i386, mov & pop is faster than "leave". */ ! else if (TARGET_USE_LEAVE || optimize_size || !use_fast_prologue_epilogue) ! emit_insn (TARGET_64BIT ? gen_leave_rex64 () : gen_leave ()); else { emit_insn (gen_pro_epilogue_adjust_stack (stack_pointer_rtx, hard_frame_pointer_rtx, const0_rtx)); ! if (TARGET_64BIT) ! emit_insn (gen_popdi1 (hard_frame_pointer_rtx)); ! else ! emit_insn (gen_popsi1 (hard_frame_pointer_rtx)); } } else *************** ix86_expand_epilogue (style) *** 2301,2313 **** GEN_INT (offset))); } else if (frame.to_allocate) ! ix86_emit_epilogue_esp_adjustment (frame.to_allocate); for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) if (ix86_save_reg (regno, false)) ! emit_insn (gen_popsi1 (gen_rtx_REG (SImode, regno))); if (frame_pointer_needed) ! emit_insn (gen_popsi1 (hard_frame_pointer_rtx)); } /* Sibcall epilogues don't want a return instruction. */ --- 4330,4358 ---- GEN_INT (offset))); } else if (frame.to_allocate) ! emit_insn (gen_pro_epilogue_adjust_stack ! (stack_pointer_rtx, stack_pointer_rtx, ! GEN_INT (frame.to_allocate))); for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) if (ix86_save_reg (regno, false)) ! { ! if (TARGET_64BIT) ! emit_insn (gen_popdi1 (gen_rtx_REG (Pmode, regno))); ! else ! emit_insn (gen_popsi1 (gen_rtx_REG (Pmode, regno))); ! } if (frame_pointer_needed) ! { ! /* Leave results in shorter dependency chains on CPUs that are ! able to grok it fast. */ ! if (TARGET_USE_LEAVE) ! emit_insn (TARGET_64BIT ? gen_leave_rex64 () : gen_leave ()); ! else if (TARGET_64BIT) ! emit_insn (gen_popdi1 (hard_frame_pointer_rtx)); ! else ! emit_insn (gen_popsi1 (hard_frame_pointer_rtx)); ! } } /* Sibcall epilogues don't want a return instruction. */ *************** ix86_expand_epilogue (style) *** 2326,2331 **** --- 4371,4380 ---- { rtx ecx = gen_rtx_REG (SImode, 2); + /* There are is no "pascal" calling convention in 64bit ABI. */ + if (TARGET_64BIT) + abort (); + emit_insn (gen_popsi1 (ecx)); emit_insn (gen_addsi3 (stack_pointer_rtx, stack_pointer_rtx, popc)); emit_jump_insn (gen_return_indirect_internal (ecx)); *************** ix86_expand_epilogue (style) *** 2338,2345 **** } /* Extract the parts of an RTL expression that is a valid memory address ! for an instruction. Return false if the structure of the address is ! grossly off. */ static int ix86_decompose_address (addr, out) --- 4387,4396 ---- } /* Extract the parts of an RTL expression that is a valid memory address ! for an instruction. Return 0 if the structure of the address is ! grossly off. Return -1 if the address contains ASHIFT, so it is not ! strictly valid, but still used for computing length of lea instruction. ! */ static int ix86_decompose_address (addr, out) *************** ix86_decompose_address (addr, out) *** 2351,2356 **** --- 4402,4408 ---- rtx disp = NULL_RTX; HOST_WIDE_INT scale = 1; rtx scale_rtx = NULL_RTX; + int retval = 1; if (GET_CODE (addr) == REG || GET_CODE (addr) == SUBREG) base = addr; *************** ix86_decompose_address (addr, out) *** 2391,2397 **** disp = op1; } else ! return FALSE; } else if (GET_CODE (addr) == MULT) { --- 4443,4449 ---- disp = op1; } else ! return 0; } else if (GET_CODE (addr) == MULT) { *************** ix86_decompose_address (addr, out) *** 2406,2416 **** index = XEXP (addr, 0); tmp = XEXP (addr, 1); if (GET_CODE (tmp) != CONST_INT) ! return FALSE; scale = INTVAL (tmp); if ((unsigned HOST_WIDE_INT) scale > 3) ! return FALSE; scale = 1 << scale; } else disp = addr; /* displacement */ --- 4458,4469 ---- index = XEXP (addr, 0); tmp = XEXP (addr, 1); if (GET_CODE (tmp) != CONST_INT) ! return 0; scale = INTVAL (tmp); if ((unsigned HOST_WIDE_INT) scale > 3) ! return 0; scale = 1 << scale; + retval = -1; } else disp = addr; /* displacement */ *************** ix86_decompose_address (addr, out) *** 2419,2425 **** if (scale_rtx) { if (GET_CODE (scale_rtx) != CONST_INT) ! return FALSE; scale = INTVAL (scale_rtx); } --- 4472,4478 ---- if (scale_rtx) { if (GET_CODE (scale_rtx) != CONST_INT) ! return 0; scale = INTVAL (scale_rtx); } *************** ix86_decompose_address (addr, out) *** 2460,2466 **** out->disp = disp; out->scale = scale; ! return TRUE; } /* Return cost of the memory address x. --- 4513,4519 ---- out->disp = disp; out->scale = scale; ! return retval; } /* Return cost of the memory address x. *************** ix86_find_base_term (x) *** 2531,2536 **** --- 4584,4612 ---- { rtx term; + if (TARGET_64BIT) + { + if (GET_CODE (x) != CONST) + return x; + term = XEXP (x, 0); + if (GET_CODE (term) == PLUS + && (GET_CODE (XEXP (term, 1)) == CONST_INT + || GET_CODE (XEXP (term, 1)) == CONST_DOUBLE)) + term = XEXP (term, 0); + if (GET_CODE (term) != UNSPEC + || XVECLEN (term, 0) != 1 + || XINT (term, 1) != 15) + return x; + + term = XVECEXP (term, 0, 0); + + if (GET_CODE (term) != SYMBOL_REF + && GET_CODE (term) != LABEL_REF) + return x; + + return term; + } + if (GET_CODE (x) != PLUS || XEXP (x, 0) != pic_offset_table_rtx || GET_CODE (XEXP (x, 1)) != CONST) *************** int *** 2562,2571 **** --- 4638,4679 ---- legitimate_pic_address_disp_p (disp) register rtx disp; { + /* In 64bit mode we can allow direct addresses of symbols and labels + when they are not dynamic symbols. */ + if (TARGET_64BIT) + { + rtx x = disp; + if (GET_CODE (disp) == CONST) + x = XEXP (disp, 0); + /* ??? Handle PIC code models */ + if (GET_CODE (x) == PLUS + && (GET_CODE (XEXP (x, 1)) == CONST_INT + && ix86_cmodel == CM_SMALL_PIC + && INTVAL (XEXP (x, 1)) < 1024*1024*1024 + && INTVAL (XEXP (x, 1)) > -1024*1024*1024)) + x = XEXP (x, 0); + if (local_symbolic_operand (x, Pmode)) + return 1; + } if (GET_CODE (disp) != CONST) return 0; disp = XEXP (disp, 0); + if (TARGET_64BIT) + { + /* We are unsafe to allow PLUS expressions. This limit allowed distance + of GOT tables. We should not need these anyway. */ + if (GET_CODE (disp) != UNSPEC + || XVECLEN (disp, 0) != 1 + || XINT (disp, 1) != 15) + return 0; + + if (GET_CODE (XVECEXP (disp, 0, 0)) != SYMBOL_REF + && GET_CODE (XVECEXP (disp, 0, 0)) != LABEL_REF) + return 0; + return 1; + } + if (GET_CODE (disp) == PLUS) { if (GET_CODE (XEXP (disp, 1)) != CONST_INT) *************** legitimate_address_p (mode, addr, strict *** 2618,2624 **** debug_rtx (addr); } ! if (! ix86_decompose_address (addr, &parts)) { reason = "decomposition failed"; goto report_error; --- 4726,4732 ---- debug_rtx (addr); } ! if (ix86_decompose_address (addr, &parts) <= 0) { reason = "decomposition failed"; goto report_error; *************** legitimate_address_p (mode, addr, strict *** 2717,2730 **** goto report_error; } ! if (GET_CODE (disp) == CONST_DOUBLE) { ! reason = "displacement is a const_double"; ! goto report_error; } if (flag_pic && SYMBOLIC_CONST (disp)) { if (! legitimate_pic_address_disp_p (disp)) { reason = "displacement is an invalid pic construct"; --- 4825,4854 ---- goto report_error; } ! if (TARGET_64BIT) { ! if (!x86_64_sign_extended_value (disp)) ! { ! reason = "displacement is out of range"; ! goto report_error; ! } ! } ! else ! { ! if (GET_CODE (disp) == CONST_DOUBLE) ! { ! reason = "displacement is a const_double"; ! goto report_error; ! } } if (flag_pic && SYMBOLIC_CONST (disp)) { + if (TARGET_64BIT && (index || base)) + { + reason = "non-constant pic memory reference"; + goto report_error; + } if (! legitimate_pic_address_disp_p (disp)) { reason = "displacement is an invalid pic construct"; *************** legitimate_address_p (mode, addr, strict *** 2746,2752 **** This code is nonsensical, but results in addressing GOT table with pic_offset_table_rtx base. We can't ! just refuse it easilly, since it gets matched by "addsi3" pattern, that later gets split to lea in the case output register differs from input. While this can be handled by separate addsi pattern for this case --- 4870,4876 ---- This code is nonsensical, but results in addressing GOT table with pic_offset_table_rtx base. We can't ! just refuse it easily, since it gets matched by "addsi3" pattern, that later gets split to lea in the case output register differs from input. While this can be handled by separate addsi pattern for this case *************** legitimize_pic_address (orig, reg) *** 2818,2865 **** if (local_symbolic_operand (addr, Pmode)) { ! /* This symbol may be referenced via a displacement from the PIC ! base address (@GOTOFF). */ ! current_function_uses_pic_offset_table = 1; ! new = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, addr), 7); ! new = gen_rtx_CONST (Pmode, new); ! new = gen_rtx_PLUS (Pmode, pic_offset_table_rtx, new); ! if (reg != 0) ! { ! emit_move_insn (reg, new); ! new = reg; ! } } else if (GET_CODE (addr) == SYMBOL_REF) { ! /* This symbol must be referenced via a load from the ! Global Offset Table (@GOT). */ ! current_function_uses_pic_offset_table = 1; ! new = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, addr), 6); ! new = gen_rtx_CONST (Pmode, new); ! new = gen_rtx_PLUS (Pmode, pic_offset_table_rtx, new); ! new = gen_rtx_MEM (Pmode, new); ! RTX_UNCHANGING_P (new) = 1; ! MEM_ALIAS_SET (new) = ix86_GOT_alias_set (); ! if (reg == 0) ! reg = gen_reg_rtx (Pmode); ! emit_move_insn (reg, new); ! new = reg; } else { if (GET_CODE (addr) == CONST) { addr = XEXP (addr, 0); ! if (GET_CODE (addr) == UNSPEC) ! { ! /* Check that the unspec is one of the ones we generate? */ ! } ! else if (GET_CODE (addr) != PLUS) abort (); } if (GET_CODE (addr) == PLUS) --- 4942,5019 ---- if (local_symbolic_operand (addr, Pmode)) { ! /* In 64bit mode we can address such objects directly. */ ! if (TARGET_64BIT) ! new = addr; ! else ! { ! /* This symbol may be referenced via a displacement from the PIC ! base address (@GOTOFF). */ ! current_function_uses_pic_offset_table = 1; ! new = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, addr), 7); ! new = gen_rtx_CONST (Pmode, new); ! new = gen_rtx_PLUS (Pmode, pic_offset_table_rtx, new); ! if (reg != 0) ! { ! emit_move_insn (reg, new); ! new = reg; ! } ! } } else if (GET_CODE (addr) == SYMBOL_REF) { ! if (TARGET_64BIT) ! { ! current_function_uses_pic_offset_table = 1; ! new = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, addr), 15); ! new = gen_rtx_CONST (Pmode, new); ! new = gen_rtx_MEM (Pmode, new); ! RTX_UNCHANGING_P (new) = 1; ! set_mem_alias_set (new, ix86_GOT_alias_set ()); ! if (reg == 0) ! reg = gen_reg_rtx (Pmode); ! /* Use directly gen_movsi, otherwise the address is loaded ! into register for CSE. We don't want to CSE this addresses, ! instead we CSE addresses from the GOT table, so skip this. */ ! emit_insn (gen_movsi (reg, new)); ! new = reg; ! } ! else ! { ! /* This symbol must be referenced via a load from the ! Global Offset Table (@GOT). */ ! current_function_uses_pic_offset_table = 1; ! new = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, addr), 6); ! new = gen_rtx_CONST (Pmode, new); ! new = gen_rtx_PLUS (Pmode, pic_offset_table_rtx, new); ! new = gen_rtx_MEM (Pmode, new); ! RTX_UNCHANGING_P (new) = 1; ! set_mem_alias_set (new, ix86_GOT_alias_set ()); ! ! if (reg == 0) ! reg = gen_reg_rtx (Pmode); ! emit_move_insn (reg, new); ! new = reg; ! } } else { if (GET_CODE (addr) == CONST) { addr = XEXP (addr, 0); ! ! /* We must match stuff we generate before. Assume the only ! unspecs that can get here are ours. Not that we could do ! anything with them anyway... */ ! if (GET_CODE (addr) == UNSPEC ! || (GET_CODE (addr) == PLUS ! && GET_CODE (XEXP (addr, 0)) == UNSPEC)) ! return orig; ! if (GET_CODE (addr) != PLUS) abort (); } if (GET_CODE (addr) == PLUS) *************** legitimize_pic_address (orig, reg) *** 2871,2886 **** if (local_symbolic_operand (op0, Pmode) && GET_CODE (op1) == CONST_INT) { ! current_function_uses_pic_offset_table = 1; ! new = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, op0), 7); ! new = gen_rtx_PLUS (Pmode, new, op1); ! new = gen_rtx_CONST (Pmode, new); ! new = gen_rtx_PLUS (Pmode, pic_offset_table_rtx, new); ! if (reg != 0) { ! emit_move_insn (reg, new); ! new = reg; } } else --- 5025,5047 ---- if (local_symbolic_operand (op0, Pmode) && GET_CODE (op1) == CONST_INT) { ! if (!TARGET_64BIT) ! { ! current_function_uses_pic_offset_table = 1; ! new = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, op0), 7); ! new = gen_rtx_PLUS (Pmode, new, op1); ! new = gen_rtx_CONST (Pmode, new); ! new = gen_rtx_PLUS (Pmode, pic_offset_table_rtx, new); ! if (reg != 0) ! { ! emit_move_insn (reg, new); ! new = reg; ! } ! } ! else { ! /* ??? We need to limit offsets here. */ } } else *************** legitimize_address (x, oldx, mode) *** 2949,2955 **** /* Canonicalize shifts by 0, 1, 2, 3 into multiply */ if (GET_CODE (x) == ASHIFT && GET_CODE (XEXP (x, 1)) == CONST_INT ! && (log = (unsigned)exact_log2 (INTVAL (XEXP (x, 1)))) < 4) { changed = 1; x = gen_rtx_MULT (Pmode, force_reg (Pmode, XEXP (x, 0)), --- 5110,5116 ---- /* Canonicalize shifts by 0, 1, 2, 3 into multiply */ if (GET_CODE (x) == ASHIFT && GET_CODE (XEXP (x, 1)) == CONST_INT ! && (log = (unsigned) exact_log2 (INTVAL (XEXP (x, 1)))) < 4) { changed = 1; x = gen_rtx_MULT (Pmode, force_reg (Pmode, XEXP (x, 0)), *************** legitimize_address (x, oldx, mode) *** 2962,2968 **** if (GET_CODE (XEXP (x, 0)) == ASHIFT && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT ! && (log = (unsigned)exact_log2 (INTVAL (XEXP (XEXP (x, 0), 1)))) < 4) { changed = 1; XEXP (x, 0) = gen_rtx_MULT (Pmode, --- 5123,5129 ---- if (GET_CODE (XEXP (x, 0)) == ASHIFT && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT ! && (log = (unsigned) exact_log2 (INTVAL (XEXP (XEXP (x, 0), 1)))) < 4) { changed = 1; XEXP (x, 0) = gen_rtx_MULT (Pmode, *************** legitimize_address (x, oldx, mode) *** 2972,2978 **** if (GET_CODE (XEXP (x, 1)) == ASHIFT && GET_CODE (XEXP (XEXP (x, 1), 1)) == CONST_INT ! && (log = (unsigned)exact_log2 (INTVAL (XEXP (XEXP (x, 1), 1)))) < 4) { changed = 1; XEXP (x, 1) = gen_rtx_MULT (Pmode, --- 5133,5139 ---- if (GET_CODE (XEXP (x, 1)) == ASHIFT && GET_CODE (XEXP (XEXP (x, 1), 1)) == CONST_INT ! && (log = (unsigned) exact_log2 (INTVAL (XEXP (XEXP (x, 1), 1)))) < 4) { changed = 1; XEXP (x, 1) = gen_rtx_MULT (Pmode, *************** output_pic_addr_const (file, x, code) *** 3173,3183 **** break; case MINUS: ! putc (ASSEMBLER_DIALECT ? '(' : '[', file); output_pic_addr_const (file, XEXP (x, 0), code); putc ('-', file); output_pic_addr_const (file, XEXP (x, 1), code); ! putc (ASSEMBLER_DIALECT ? ')' : ']', file); break; case UNSPEC: --- 5334,5344 ---- break; case MINUS: ! putc (ASSEMBLER_DIALECT == ASM_INTEL ? '(' : '[', file); output_pic_addr_const (file, XEXP (x, 0), code); putc ('-', file); output_pic_addr_const (file, XEXP (x, 1), code); ! putc (ASSEMBLER_DIALECT == ASM_INTEL ? ')' : ']', file); break; case UNSPEC: *************** output_pic_addr_const (file, x, code) *** 3195,3200 **** --- 5356,5364 ---- case 8: fputs ("@PLT", file); break; + case 15: + fputs ("@GOTPCREL(%RIP)", file); + break; default: output_operand_lossage ("invalid UNSPEC as operand"); break; *************** i386_dwarf_output_addr_const (file, x) *** 3214,3220 **** FILE *file; rtx x; { ! fprintf (file, "%s", INT_ASM_OP); if (flag_pic) output_pic_addr_const (file, x, '\0'); else --- 5378,5390 ---- FILE *file; rtx x; { ! #ifdef ASM_QUAD ! fprintf (file, "%s", TARGET_64BIT ? ASM_QUAD : ASM_LONG); ! #else ! if (TARGET_64BIT) ! abort (); ! fprintf (file, "%s", ASM_LONG); ! #endif if (flag_pic) output_pic_addr_const (file, x, '\0'); else *************** rtx *** 3230,3254 **** i386_simplify_dwarf_addr (orig_x) rtx orig_x; { ! rtx x = orig_x; if (GET_CODE (x) != PLUS - || GET_CODE (XEXP (x, 0)) != REG || GET_CODE (XEXP (x, 1)) != CONST) return orig_x; x = XEXP (XEXP (x, 1), 0); if (GET_CODE (x) == UNSPEC ! && (XINT (x, 1) == 6 ! || XINT (x, 1) == 7)) ! return XVECEXP (x, 0, 0); if (GET_CODE (x) == PLUS && GET_CODE (XEXP (x, 0)) == UNSPEC && GET_CODE (XEXP (x, 1)) == CONST_INT ! && (XINT (XEXP (x, 0), 1) == 6 ! || XINT (XEXP (x, 0), 1) == 7)) ! return gen_rtx_PLUS (VOIDmode, XVECEXP (XEXP (x, 0), 0, 0), XEXP (x, 1)); return orig_x; } --- 5400,5469 ---- i386_simplify_dwarf_addr (orig_x) rtx orig_x; { ! rtx x = orig_x, y; ! ! if (GET_CODE (x) == MEM) ! x = XEXP (x, 0); ! ! if (TARGET_64BIT) ! { ! if (GET_CODE (x) != CONST ! || GET_CODE (XEXP (x, 0)) != UNSPEC ! || XINT (XEXP (x, 0), 1) != 15 ! || GET_CODE (orig_x) != MEM) ! return orig_x; ! return XVECEXP (XEXP (x, 0), 0, 0); ! } if (GET_CODE (x) != PLUS || GET_CODE (XEXP (x, 1)) != CONST) return orig_x; + if (GET_CODE (XEXP (x, 0)) == REG + && REGNO (XEXP (x, 0)) == PIC_OFFSET_TABLE_REGNUM) + /* %ebx + GOT/GOTOFF */ + y = NULL; + else if (GET_CODE (XEXP (x, 0)) == PLUS) + { + /* %ebx + %reg * scale + GOT/GOTOFF */ + y = XEXP (x, 0); + if (GET_CODE (XEXP (y, 0)) == REG + && REGNO (XEXP (y, 0)) == PIC_OFFSET_TABLE_REGNUM) + y = XEXP (y, 1); + else if (GET_CODE (XEXP (y, 1)) == REG + && REGNO (XEXP (y, 1)) == PIC_OFFSET_TABLE_REGNUM) + y = XEXP (y, 0); + else + return orig_x; + if (GET_CODE (y) != REG + && GET_CODE (y) != MULT + && GET_CODE (y) != ASHIFT) + return orig_x; + } + else + return orig_x; + x = XEXP (XEXP (x, 1), 0); if (GET_CODE (x) == UNSPEC ! && ((XINT (x, 1) == 6 && GET_CODE (orig_x) == MEM) ! || (XINT (x, 1) == 7 && GET_CODE (orig_x) != MEM))) ! { ! if (y) ! return gen_rtx_PLUS (Pmode, y, XVECEXP (x, 0, 0)); ! return XVECEXP (x, 0, 0); ! } if (GET_CODE (x) == PLUS && GET_CODE (XEXP (x, 0)) == UNSPEC && GET_CODE (XEXP (x, 1)) == CONST_INT ! && ((XINT (XEXP (x, 0), 1) == 6 && GET_CODE (orig_x) == MEM) ! || (XINT (XEXP (x, 0), 1) == 7 && GET_CODE (orig_x) != MEM))) ! { ! x = gen_rtx_PLUS (VOIDmode, XVECEXP (XEXP (x, 0), 0, 0), XEXP (x, 1)); ! if (y) ! return gen_rtx_PLUS (Pmode, y, x); ! return x; ! } return orig_x; } *************** put_condition_code (code, mode, reverse, *** 3267,3273 **** enum rtx_code second_code, bypass_code; ix86_fp_comparison_codes (code, &bypass_code, &code, &second_code); if (bypass_code != NIL || second_code != NIL) ! abort(); code = ix86_fp_compare_code_to_integer (code); mode = CCmode; } --- 5482,5488 ---- enum rtx_code second_code, bypass_code; ix86_fp_comparison_codes (code, &bypass_code, &code, &second_code); if (bypass_code != NIL || second_code != NIL) ! abort (); code = ix86_fp_compare_code_to_integer (code); mode = CCmode; } *************** print_reg (x, code, file) *** 3355,3383 **** || REGNO (x) == FPSR_REG) abort (); ! if (ASSEMBLER_DIALECT == 0 || USER_LABEL_PREFIX[0] == 0) putc ('%', file); ! if (code == 'w') code = 2; else if (code == 'b') code = 1; else if (code == 'k') code = 4; else if (code == 'y') code = 3; else if (code == 'h') code = 0; - else if (code == 'm' || MMX_REG_P (x)) - code = 5; else code = GET_MODE_SIZE (GET_MODE (x)); switch (code) { - case 5: - fputs (hi_reg_name[REGNO (x)], file); - break; case 3: if (STACK_TOP_P (x)) { --- 5570,5624 ---- || REGNO (x) == FPSR_REG) abort (); ! if (ASSEMBLER_DIALECT == ASM_ATT || USER_LABEL_PREFIX[0] == 0) putc ('%', file); ! if (code == 'w' || MMX_REG_P (x)) code = 2; else if (code == 'b') code = 1; else if (code == 'k') code = 4; + else if (code == 'q') + code = 8; else if (code == 'y') code = 3; else if (code == 'h') code = 0; else code = GET_MODE_SIZE (GET_MODE (x)); + /* Irritatingly, AMD extended registers use different naming convention + from the normal registers. */ + if (REX_INT_REG_P (x)) + { + if (!TARGET_64BIT) + abort (); + switch (code) + { + case 0: + error ("extended registers have no high halves"); + break; + case 1: + fprintf (file, "r%ib", REGNO (x) - FIRST_REX_INT_REG + 8); + break; + case 2: + fprintf (file, "r%iw", REGNO (x) - FIRST_REX_INT_REG + 8); + break; + case 4: + fprintf (file, "r%id", REGNO (x) - FIRST_REX_INT_REG + 8); + break; + case 8: + fprintf (file, "r%i", REGNO (x) - FIRST_REX_INT_REG + 8); + break; + default: + error ("unsupported operand size for extended register"); + break; + } + return; + } switch (code) { case 3: if (STACK_TOP_P (x)) { *************** print_reg (x, code, file) *** 3385,3395 **** break; } /* FALLTHRU */ - case 4: case 8: case 12: ! if (! FP_REG_P (x)) ! putc ('e', file); /* FALLTHRU */ case 16: case 2: --- 5626,5636 ---- break; } /* FALLTHRU */ case 8: + case 4: case 12: ! if (! ANY_FP_REG_P (x)) ! putc (code == 8 && TARGET_64BIT ? 'r' : 'e', file); /* FALLTHRU */ case 16: case 2: *************** print_reg (x, code, file) *** 3410,3415 **** --- 5651,5659 ---- L,W,B,Q,S,T -- print the opcode suffix for specified size of operand. C -- print opcode suffix for set/cmov insn. c -- like C, but print reversed condition + F,f -- likewise, but for floating-point. + O -- if CMOV_SUN_AS_SYNTAX, expand to "w.", "l." or "q.", otherwise + nothing R -- print the prefix for register names. z -- print the opcode suffix for the size of the current operand. * -- print a star (in certain assembler syntax) *************** print_reg (x, code, file) *** 3421,3429 **** %b0 would print %al if operands[0] is reg 0. w -- likewise, print the HImode name of the register. k -- likewise, print the SImode name of the register. ! h -- print the QImode name for a "high" register, either ah, bh, ch or dh. ! y -- print "st(0)" instead of "st" as a register. ! m -- print "st(n)" as an mmx register. */ void print_operand (file, x, code) --- 5665,5677 ---- %b0 would print %al if operands[0] is reg 0. w -- likewise, print the HImode name of the register. k -- likewise, print the SImode name of the register. ! q -- likewise, print the DImode name of the register. ! h -- print the QImode name for a "high" register, either ah, bh, ch or dh. ! y -- print "st(0)" instead of "st" as a register. ! D -- print condition for SSE cmp instruction. ! P -- if PIC, print an @PLT suffix. ! X -- don't print any sort of PIC '@' suffix for a symbol. ! */ void print_operand (file, x, code) *************** print_operand (file, x, code) *** 3436,3449 **** switch (code) { case '*': ! if (ASSEMBLER_DIALECT == 0) putc ('*', file); return; case 'A': ! if (ASSEMBLER_DIALECT == 0) putc ('*', file); ! else if (ASSEMBLER_DIALECT == 1) { /* Intel syntax. For absolute addresses, registers should not be surrounded by braces. */ --- 5684,5697 ---- switch (code) { case '*': ! if (ASSEMBLER_DIALECT == ASM_ATT) putc ('*', file); return; case 'A': ! if (ASSEMBLER_DIALECT == ASM_ATT) putc ('*', file); ! else if (ASSEMBLER_DIALECT == ASM_INTEL) { /* Intel syntax. For absolute addresses, registers should not be surrounded by braces. */ *************** print_operand (file, x, code) *** 3455,3503 **** return; } } PRINT_OPERAND (file, x, 0); return; case 'L': ! if (ASSEMBLER_DIALECT == 0) putc ('l', file); return; case 'W': ! if (ASSEMBLER_DIALECT == 0) putc ('w', file); return; case 'B': ! if (ASSEMBLER_DIALECT == 0) putc ('b', file); return; case 'Q': ! if (ASSEMBLER_DIALECT == 0) putc ('l', file); return; case 'S': ! if (ASSEMBLER_DIALECT == 0) putc ('s', file); return; case 'T': ! if (ASSEMBLER_DIALECT == 0) putc ('t', file); return; case 'z': /* 387 opcodes don't get size suffixes if the operands are registers. */ - if (STACK_REG_P (x)) return; ! /* this is the size of op from size of operand */ switch (GET_MODE_SIZE (GET_MODE (x))) { case 2: --- 5703,5756 ---- return; } } + else + abort (); PRINT_OPERAND (file, x, 0); return; case 'L': ! if (ASSEMBLER_DIALECT == ASM_ATT) putc ('l', file); return; case 'W': ! if (ASSEMBLER_DIALECT == ASM_ATT) putc ('w', file); return; case 'B': ! if (ASSEMBLER_DIALECT == ASM_ATT) putc ('b', file); return; case 'Q': ! if (ASSEMBLER_DIALECT == ASM_ATT) putc ('l', file); return; case 'S': ! if (ASSEMBLER_DIALECT == ASM_ATT) putc ('s', file); return; case 'T': ! if (ASSEMBLER_DIALECT == ASM_ATT) putc ('t', file); return; case 'z': /* 387 opcodes don't get size suffixes if the operands are registers. */ if (STACK_REG_P (x)) return; ! /* Likewise if using Intel opcodes. */ ! if (ASSEMBLER_DIALECT == ASM_INTEL) ! return; ! ! /* This is the size of op from size of operand. */ switch (GET_MODE_SIZE (GET_MODE (x))) { case 2: *************** print_operand (file, x, code) *** 3542,3550 **** case 'b': case 'w': case 'k': case 'h': case 'y': - case 'm': case 'X': case 'P': break; --- 5795,5803 ---- case 'b': case 'w': case 'k': + case 'q': case 'h': case 'y': case 'X': case 'P': break; *************** print_operand (file, x, code) *** 3557,3590 **** } return; case 'C': put_condition_code (GET_CODE (x), GET_MODE (XEXP (x, 0)), 0, 0, file); return; case 'F': put_condition_code (GET_CODE (x), GET_MODE (XEXP (x, 0)), 0, 1, file); return; /* Like above, but reverse condition */ case 'c': ! /* Check to see if argument to %c is really a constant and not a condition code which needs to be reversed. */ if (GET_RTX_CLASS (GET_CODE (x)) != '<') { output_operand_lossage ("operand is neither a constant nor a condition code, invalid operand code 'c'"); ! return; } put_condition_code (GET_CODE (x), GET_MODE (XEXP (x, 0)), 1, 0, file); return; case 'f': put_condition_code (GET_CODE (x), GET_MODE (XEXP (x, 0)), 1, 1, file); return; ! ! default: { ! char str[50]; ! sprintf (str, "invalid operand code `%c'", code); ! output_operand_lossage (str); } } } --- 5810,5937 ---- } return; + case 'D': + /* Little bit of braindamage here. The SSE compare instructions + does use completely different names for the comparisons that the + fp conditional moves. */ + switch (GET_CODE (x)) + { + case EQ: + case UNEQ: + fputs ("eq", file); + break; + case LT: + case UNLT: + fputs ("lt", file); + break; + case LE: + case UNLE: + fputs ("le", file); + break; + case UNORDERED: + fputs ("unord", file); + break; + case NE: + case LTGT: + fputs ("neq", file); + break; + case UNGE: + case GE: + fputs ("nlt", file); + break; + case UNGT: + case GT: + fputs ("nle", file); + break; + case ORDERED: + fputs ("ord", file); + break; + default: + abort (); + break; + } + return; + case 'O': + #ifdef CMOV_SUN_AS_SYNTAX + if (ASSEMBLER_DIALECT == ASM_ATT) + { + switch (GET_MODE (x)) + { + case HImode: putc ('w', file); break; + case SImode: + case SFmode: putc ('l', file); break; + case DImode: + case DFmode: putc ('q', file); break; + default: abort (); + } + putc ('.', file); + } + #endif + return; case 'C': put_condition_code (GET_CODE (x), GET_MODE (XEXP (x, 0)), 0, 0, file); return; case 'F': + #ifdef CMOV_SUN_AS_SYNTAX + if (ASSEMBLER_DIALECT == ASM_ATT) + putc ('.', file); + #endif put_condition_code (GET_CODE (x), GET_MODE (XEXP (x, 0)), 0, 1, file); return; /* Like above, but reverse condition */ case 'c': ! /* Check to see if argument to %c is really a constant and not a condition code which needs to be reversed. */ if (GET_RTX_CLASS (GET_CODE (x)) != '<') { output_operand_lossage ("operand is neither a constant nor a condition code, invalid operand code 'c'"); ! return; } put_condition_code (GET_CODE (x), GET_MODE (XEXP (x, 0)), 1, 0, file); return; case 'f': + #ifdef CMOV_SUN_AS_SYNTAX + if (ASSEMBLER_DIALECT == ASM_ATT) + putc ('.', file); + #endif put_condition_code (GET_CODE (x), GET_MODE (XEXP (x, 0)), 1, 1, file); return; ! case '+': { ! rtx x; ! ! if (!optimize || optimize_size || !TARGET_BRANCH_PREDICTION_HINTS) ! return; ! ! x = find_reg_note (current_output_insn, REG_BR_PROB, 0); ! if (x) ! { ! int pred_val = INTVAL (XEXP (x, 0)); ! ! if (pred_val < REG_BR_PROB_BASE * 45 / 100 ! || pred_val > REG_BR_PROB_BASE * 55 / 100) ! { ! int taken = pred_val > REG_BR_PROB_BASE / 2; ! int cputaken = final_forward_branch_p (current_output_insn) == 0; ! ! /* Emit hints only in the case default branch prediction ! heruistics would fail. */ ! if (taken != cputaken) ! { ! /* We use 3e (DS) prefix for taken branches and ! 2e (CS) prefix for not taken branches. */ ! if (taken) ! fputs ("ds ; ", file); ! else ! fputs ("cs ; ", file); ! } ! } ! } ! return; } + default: + output_operand_lossage ("invalid operand code `%c'", code); } } *************** print_operand (file, x, code) *** 3596,3602 **** else if (GET_CODE (x) == MEM) { /* No `byte ptr' prefix for call instructions. */ ! if (ASSEMBLER_DIALECT != 0 && code != 'X' && code != 'P') { const char * size; switch (GET_MODE_SIZE (GET_MODE (x))) --- 5943,5949 ---- else if (GET_CODE (x) == MEM) { /* No `byte ptr' prefix for call instructions. */ ! if (ASSEMBLER_DIALECT == ASM_INTEL && code != 'X' && code != 'P') { const char * size; switch (GET_MODE_SIZE (GET_MODE (x))) *************** print_operand (file, x, code) *** 3626,3631 **** --- 5973,5982 ---- x = XEXP (x, 0); if (flag_pic && CONSTANT_ADDRESS_P (x)) output_pic_addr_const (file, x, code); + /* Avoid (%rip) for call operands. */ + else if (CONSTANT_ADDRESS_P (x) && code =='P' + && GET_CODE (x) != CONST_INT) + output_addr_const (file, x); else output_address (x); } *************** print_operand (file, x, code) *** 3638,3644 **** REAL_VALUE_FROM_CONST_DOUBLE (r, x); REAL_VALUE_TO_TARGET_SINGLE (r, l); ! if (ASSEMBLER_DIALECT == 0) putc ('$', file); fprintf (file, "0x%lx", l); } --- 5989,5995 ---- REAL_VALUE_FROM_CONST_DOUBLE (r, x); REAL_VALUE_TO_TARGET_SINGLE (r, l); ! if (ASSEMBLER_DIALECT == ASM_ATT) putc ('$', file); fprintf (file, "0x%lx", l); } *************** print_operand (file, x, code) *** 3670,3682 **** { if (GET_CODE (x) == CONST_INT || GET_CODE (x) == CONST_DOUBLE) { ! if (ASSEMBLER_DIALECT == 0) putc ('$', file); } else if (GET_CODE (x) == CONST || GET_CODE (x) == SYMBOL_REF || GET_CODE (x) == LABEL_REF) { ! if (ASSEMBLER_DIALECT == 0) putc ('$', file); else fputs ("OFFSET FLAT:", file); --- 6021,6033 ---- { if (GET_CODE (x) == CONST_INT || GET_CODE (x) == CONST_DOUBLE) { ! if (ASSEMBLER_DIALECT == ASM_ATT) putc ('$', file); } else if (GET_CODE (x) == CONST || GET_CODE (x) == SYMBOL_REF || GET_CODE (x) == LABEL_REF) { ! if (ASSEMBLER_DIALECT == ASM_ATT) putc ('$', file); else fputs ("OFFSET FLAT:", file); *************** print_operand_address (file, addr) *** 3716,3722 **** if (GET_CODE (disp) == CONST_INT) { ! if (ASSEMBLER_DIALECT != 0) { if (USER_LABEL_PREFIX[0] == 0) putc ('%', file); --- 6067,6073 ---- if (GET_CODE (disp) == CONST_INT) { ! if (ASSEMBLER_DIALECT == ASM_INTEL) { if (USER_LABEL_PREFIX[0] == 0) putc ('%', file); *************** print_operand_address (file, addr) *** 3728,3737 **** output_pic_addr_const (file, addr, 0); else output_addr_const (file, addr); } else { ! if (ASSEMBLER_DIALECT == 0) { if (disp) { --- 6079,6092 ---- output_pic_addr_const (file, addr, 0); else output_addr_const (file, addr); + + /* Use one byte shorter RIP relative addressing for 64bit mode. */ + if (GET_CODE (disp) != CONST_INT && TARGET_64BIT) + fputs ("(%rip)", file); } else { ! if (ASSEMBLER_DIALECT == ASM_ATT) { if (disp) { *************** split_di (operands, num, lo_half, hi_hal *** 3824,3850 **** while (num--) { rtx op = operands[num]; ! if (CONSTANT_P (op)) ! split_double (op, &lo_half[num], &hi_half[num]); ! else if (! reload_completed) { ! lo_half[num] = gen_lowpart (SImode, op); ! hi_half[num] = gen_highpart (SImode, op); } ! else if (GET_CODE (op) == REG) { ! lo_half[num] = gen_rtx_REG (SImode, REGNO (op)); ! hi_half[num] = gen_rtx_REG (SImode, REGNO (op) + 1); } ! else if (offsettable_memref_p (op)) { ! rtx lo_addr = XEXP (op, 0); ! rtx hi_addr = XEXP (adj_offsettable_operand (op, 4), 0); ! lo_half[num] = change_address (op, SImode, lo_addr); ! hi_half[num] = change_address (op, SImode, hi_addr); } else ! abort (); } } --- 6179,6231 ---- while (num--) { rtx op = operands[num]; ! ! /* simplify_subreg refuse to split volatile memory addresses, ! but we still have to handle it. */ ! if (GET_CODE (op) == MEM) { ! lo_half[num] = adjust_address (op, SImode, 0); ! hi_half[num] = adjust_address (op, SImode, 4); } ! else { ! lo_half[num] = simplify_gen_subreg (SImode, op, ! GET_MODE (op) == VOIDmode ! ? DImode : GET_MODE (op), 0); ! hi_half[num] = simplify_gen_subreg (SImode, op, ! GET_MODE (op) == VOIDmode ! ? DImode : GET_MODE (op), 4); } ! } ! } ! /* Split one or more TImode RTL references into pairs of SImode ! references. The RTL can be REG, offsettable MEM, integer constant, or ! CONST_DOUBLE. "operands" is a pointer to an array of DImode RTL to ! split and "num" is its length. lo_half and hi_half are output arrays ! that parallel "operands". */ ! ! void ! split_ti (operands, num, lo_half, hi_half) ! rtx operands[]; ! int num; ! rtx lo_half[], hi_half[]; ! { ! while (num--) ! { ! rtx op = operands[num]; ! ! /* simplify_subreg refuse to split volatile memory addresses, but we ! still have to handle it. */ ! if (GET_CODE (op) == MEM) { ! lo_half[num] = adjust_address (op, DImode, 0); ! hi_half[num] = adjust_address (op, DImode, 8); } else ! { ! lo_half[num] = simplify_gen_subreg (DImode, op, TImode, 0); ! hi_half[num] = simplify_gen_subreg (DImode, op, TImode, 8); ! } } } *************** output_387_binary_op (insn, operands) *** 3872,3877 **** --- 6253,6260 ---- { static char buf[30]; const char *p; + const char *ssep; + int is_sse = SSE_REG_P (operands[0]) | SSE_REG_P (operands[1]) | SSE_REG_P (operands[2]); #ifdef ENABLE_CHECKING /* Even if we do not want to check the inputs, this documents input *************** output_387_binary_op (insn, operands) *** 3885,3891 **** && (STACK_REG_P (operands[1]) || GET_CODE (operands[1]) == MEM))) && (STACK_TOP_P (operands[1]) || STACK_TOP_P (operands[2]))) ; /* ok */ ! else abort (); #endif --- 6268,6274 ---- && (STACK_REG_P (operands[1]) || GET_CODE (operands[1]) == MEM))) && (STACK_TOP_P (operands[1]) || STACK_TOP_P (operands[2]))) ; /* ok */ ! else if (!is_sse) abort (); #endif *************** output_387_binary_op (insn, operands) *** 3897,3902 **** --- 6280,6286 ---- p = "fiadd"; else p = "fadd"; + ssep = "add"; break; case MINUS: *************** output_387_binary_op (insn, operands) *** 3905,3910 **** --- 6289,6295 ---- p = "fisub"; else p = "fsub"; + ssep = "sub"; break; case MULT: *************** output_387_binary_op (insn, operands) *** 3913,3918 **** --- 6298,6304 ---- p = "fimul"; else p = "fmul"; + ssep = "mul"; break; case DIV: *************** output_387_binary_op (insn, operands) *** 3921,3932 **** --- 6307,6328 ---- p = "fidiv"; else p = "fdiv"; + ssep = "div"; break; default: abort (); } + if (is_sse) + { + strcpy (buf, ssep); + if (GET_MODE (operands[0]) == SFmode) + strcat (buf, "ss\t{%2, %0|%0, %2}"); + else + strcat (buf, "sd\t{%2, %0|%0, %2}"); + return buf; + } strcpy (buf, p); switch (GET_CODE (operands[3])) *************** output_387_binary_op (insn, operands) *** 4057,4062 **** --- 6453,6477 ---- return buf; } + /* Output code to initialize control word copies used by + trunc?f?i patterns. NORMAL is set to current control word, while ROUND_DOWN + is set to control word rounding downwards. */ + void + emit_i387_cw_initialization (normal, round_down) + rtx normal, round_down; + { + rtx reg = gen_reg_rtx (HImode); + + emit_insn (gen_x86_fnstcw_1 (normal)); + emit_move_insn (reg, normal); + if (!TARGET_PARTIAL_REG_STALL && !optimize_size + && !TARGET_64BIT) + emit_insn (gen_movsi_insv_1 (reg, GEN_INT (0xc))); + else + emit_insn (gen_iorhi3 (reg, reg, GEN_INT (0xc00))); + emit_move_insn (round_down, reg); + } + /* Output code for INSN to convert a float to a signed int. OPERANDS are the insn operands. The output may be [HSD]Imode and the input operand may be [SDX]Fmode. */ *************** output_fix_trunc (insn, operands) *** 4068,4074 **** { int stack_top_dies = find_regno_note (insn, REG_DEAD, FIRST_STACK_REG) != 0; int dimode_p = GET_MODE (operands[0]) == DImode; - rtx xops[4]; /* Jump through a hoop or two for DImode, since the hardware has no non-popping instruction. We used to do this a different way, but --- 6483,6488 ---- *************** output_fix_trunc (insn, operands) *** 4076,4120 **** if (dimode_p && !stack_top_dies) output_asm_insn ("fld\t%y1", operands); ! if (! STACK_TOP_P (operands[1])) abort (); - xops[0] = GEN_INT (12); - xops[1] = adj_offsettable_operand (operands[2], 1); - xops[1] = change_address (xops[1], QImode, NULL_RTX); - - xops[2] = operands[0]; if (GET_CODE (operands[0]) != MEM) ! xops[2] = operands[3]; ! ! output_asm_insn ("fnstcw\t%2", operands); ! output_asm_insn ("mov{l}\t{%2, %4|%4, %2}", operands); ! output_asm_insn ("mov{b}\t{%0, %1|%1, %0}", xops); ! output_asm_insn ("fldcw\t%2", operands); ! output_asm_insn ("mov{l}\t{%4, %2|%2, %4}", operands); if (stack_top_dies || dimode_p) ! output_asm_insn ("fistp%z2\t%2", xops); else ! output_asm_insn ("fist%z2\t%2", xops); ! output_asm_insn ("fldcw\t%2", operands); - if (GET_CODE (operands[0]) != MEM) - { - if (dimode_p) - { - split_di (operands+0, 1, xops+0, xops+1); - split_di (operands+3, 1, xops+2, xops+3); - output_asm_insn ("mov{l}\t{%2, %0|%0, %2}", xops); - output_asm_insn ("mov{l}\t{%3, %1|%1, %3}", xops); - } - else if (GET_MODE (operands[0]) == SImode) - output_asm_insn ("mov{l}\t{%3, %0|%0, %3}", operands); - else - output_asm_insn ("mov{w}\t{%3, %0|%0, %3}", operands); - } - return ""; } --- 6490,6508 ---- if (dimode_p && !stack_top_dies) output_asm_insn ("fld\t%y1", operands); ! if (!STACK_TOP_P (operands[1])) abort (); if (GET_CODE (operands[0]) != MEM) ! abort (); + output_asm_insn ("fldcw\t%3", operands); if (stack_top_dies || dimode_p) ! output_asm_insn ("fistp%z0\t%0", operands); else ! output_asm_insn ("fist%z0\t%0", operands); output_asm_insn ("fldcw\t%2", operands); return ""; } *************** output_fp_compare (insn, operands, eflag *** 4131,4142 **** --- 6519,6544 ---- int stack_top_dies; rtx cmp_op0 = operands[0]; rtx cmp_op1 = operands[1]; + int is_sse = SSE_REG_P (operands[0]) | SSE_REG_P (operands[1]); if (eflags_p == 2) { cmp_op0 = cmp_op1; cmp_op1 = operands[2]; } + if (is_sse) + { + if (GET_MODE (operands[0]) == SFmode) + if (unordered_p) + return "ucomiss\t{%1, %0|%0, %1}"; + else + return "comiss\t{%1, %0|%0, %y}"; + else + if (unordered_p) + return "ucomisd\t{%1, %0|%0, %1}"; + else + return "comisd\t{%1, %0|%0, %y}"; + } if (! STACK_TOP_P (cmp_op0)) abort (); *************** output_fp_compare (insn, operands, eflag *** 4235,4486 **** } } - /* Output assembler code to FILE to initialize basic-block profiling. - - If profile_block_flag == 2 - - Output code to call the subroutine `__bb_init_trace_func' - and pass two parameters to it. The first parameter is - the address of a block allocated in the object module. - The second parameter is the number of the first basic block - of the function. - - The name of the block is a local symbol made with this statement: - - ASM_GENERATE_INTERNAL_LABEL (BUFFER, "LPBX", 0); - - Of course, since you are writing the definition of - `ASM_GENERATE_INTERNAL_LABEL' as well as that of this macro, you - can take a short cut in the definition of this macro and use the - name that you know will result. - - The number of the first basic block of the function is - passed to the macro in BLOCK_OR_LABEL. - - If described in a virtual assembler language the code to be - output looks like: - - parameter1 <- LPBX0 - parameter2 <- BLOCK_OR_LABEL - call __bb_init_trace_func - - else if profile_block_flag != 0 - - Output code to call the subroutine `__bb_init_func' - and pass one single parameter to it, which is the same - as the first parameter to `__bb_init_trace_func'. - - The first word of this parameter is a flag which will be nonzero if - the object module has already been initialized. So test this word - first, and do not call `__bb_init_func' if the flag is nonzero. - Note: When profile_block_flag == 2 the test need not be done - but `__bb_init_trace_func' *must* be called. - - BLOCK_OR_LABEL may be used to generate a label number as a - branch destination in case `__bb_init_func' will not be called. - - If described in a virtual assembler language the code to be - output looks like: - - cmp (LPBX0),0 - jne local_label - parameter1 <- LPBX0 - call __bb_init_func - local_label: - */ - void ! ix86_output_function_block_profiler (file, block_or_label) FILE *file; ! int block_or_label; { ! static int num_func = 0; ! rtx xops[8]; ! char block_table[80], false_label[80]; ! ! ASM_GENERATE_INTERNAL_LABEL (block_table, "LPBX", 0); ! ! xops[1] = gen_rtx_SYMBOL_REF (VOIDmode, block_table); ! xops[5] = stack_pointer_rtx; ! xops[7] = gen_rtx_REG (Pmode, 0); /* eax */ ! ! CONSTANT_POOL_ADDRESS_P (xops[1]) = TRUE; ! switch (profile_block_flag) { ! case 2: ! xops[2] = GEN_INT (block_or_label); ! xops[3] = gen_rtx_MEM (Pmode, ! gen_rtx_SYMBOL_REF (VOIDmode, "__bb_init_trace_func")); ! xops[6] = GEN_INT (8); ! ! output_asm_insn ("push{l}\t%2", xops); ! if (!flag_pic) ! output_asm_insn ("push{l}\t%1", xops); ! else ! { ! output_asm_insn ("lea{l}\t{%a1, %7|%7, %a1}", xops); ! output_asm_insn ("push{l}\t%7", xops); ! } ! output_asm_insn ("call\t%P3", xops); ! output_asm_insn ("add{l}\t{%6, %5|%5, %6}", xops); ! break; ! ! default: ! ASM_GENERATE_INTERNAL_LABEL (false_label, "LPBZ", num_func); ! ! xops[0] = const0_rtx; ! xops[2] = gen_rtx_MEM (Pmode, ! gen_rtx_SYMBOL_REF (VOIDmode, false_label)); ! xops[3] = gen_rtx_MEM (Pmode, ! gen_rtx_SYMBOL_REF (VOIDmode, "__bb_init_func")); ! xops[4] = gen_rtx_MEM (Pmode, xops[1]); ! xops[6] = GEN_INT (4); ! ! CONSTANT_POOL_ADDRESS_P (xops[2]) = TRUE; ! ! output_asm_insn ("cmp{l}\t{%0, %4|%4, %0}", xops); ! output_asm_insn ("jne\t%2", xops); ! ! if (!flag_pic) ! output_asm_insn ("push{l}\t%1", xops); ! else ! { ! output_asm_insn ("lea{l}\t{%a1, %7|%7, %a2}", xops); ! output_asm_insn ("push{l}\t%7", xops); ! } ! output_asm_insn ("call\t%P3", xops); ! output_asm_insn ("add{l}\t{%6, %5|%5, %6}", xops); ! ASM_OUTPUT_INTERNAL_LABEL (file, "LPBZ", num_func); ! num_func++; ! break; } - } - - /* Output assembler code to FILE to increment a counter associated - with basic block number BLOCKNO. - - If profile_block_flag == 2 ! Output code to initialize the global structure `__bb' and ! call the function `__bb_trace_func' which will increment the ! counter. ! ! `__bb' consists of two words. In the first word the number ! of the basic block has to be stored. In the second word ! the address of a block allocated in the object module ! has to be stored. ! ! The basic block number is given by BLOCKNO. ! ! The address of the block is given by the label created with ! ! ASM_GENERATE_INTERNAL_LABEL (BUFFER, "LPBX", 0); ! ! by FUNCTION_BLOCK_PROFILER. ! ! Of course, since you are writing the definition of ! `ASM_GENERATE_INTERNAL_LABEL' as well as that of this macro, you ! can take a short cut in the definition of this macro and use the ! name that you know will result. ! ! If described in a virtual assembler language the code to be ! output looks like: ! ! move BLOCKNO -> (__bb) ! move LPBX0 -> (__bb+4) ! call __bb_trace_func ! ! Note that function `__bb_trace_func' must not change the ! machine state, especially the flag register. To grant ! this, you must output code to save and restore registers ! either in this macro or in the macros MACHINE_STATE_SAVE ! and MACHINE_STATE_RESTORE. The last two macros will be ! used in the function `__bb_trace_func', so you must make ! sure that the function prologue does not change any ! register prior to saving it with MACHINE_STATE_SAVE. ! ! else if profile_block_flag != 0 ! ! Output code to increment the counter directly. ! Basic blocks are numbered separately from zero within each ! compiled object module. The count associated with block number ! BLOCKNO is at index BLOCKNO in an array of words; the name of ! this array is a local symbol made with this statement: ! ! ASM_GENERATE_INTERNAL_LABEL (BUFFER, "LPBX", 2); ! ! Of course, since you are writing the definition of ! `ASM_GENERATE_INTERNAL_LABEL' as well as that of this macro, you ! can take a short cut in the definition of this macro and use the ! name that you know will result. ! ! If described in a virtual assembler language the code to be ! output looks like: ! ! inc (LPBX2+4*BLOCKNO) ! */ void ! ix86_output_block_profiler (file, blockno) ! FILE *file ATTRIBUTE_UNUSED; ! int blockno; { ! rtx xops[8], cnt_rtx; ! char counts[80]; ! char *block_table = counts; ! ! switch (profile_block_flag) ! { ! case 2: ! ASM_GENERATE_INTERNAL_LABEL (block_table, "LPBX", 0); ! ! xops[1] = gen_rtx_SYMBOL_REF (VOIDmode, block_table); ! xops[2] = GEN_INT (blockno); ! xops[3] = gen_rtx_MEM (Pmode, ! gen_rtx_SYMBOL_REF (VOIDmode, "__bb_trace_func")); ! xops[4] = gen_rtx_SYMBOL_REF (VOIDmode, "__bb"); ! xops[5] = plus_constant (xops[4], 4); ! xops[0] = gen_rtx_MEM (SImode, xops[4]); ! xops[6] = gen_rtx_MEM (SImode, xops[5]); ! ! CONSTANT_POOL_ADDRESS_P (xops[1]) = TRUE; ! ! output_asm_insn ("pushf", xops); ! output_asm_insn ("mov{l}\t{%2, %0|%0, %2}", xops); ! if (flag_pic) ! { ! xops[7] = gen_rtx_REG (Pmode, 0); /* eax */ ! output_asm_insn ("push{l}\t%7", xops); ! output_asm_insn ("lea{l}\t{%a1, %7|%7, %a1}", xops); ! output_asm_insn ("mov{l}\t{%7, %6|%6, %7}", xops); ! output_asm_insn ("pop{l}\t%7", xops); ! } ! else ! output_asm_insn ("mov{l}\t{%1, %6|%6, %1}", xops); ! output_asm_insn ("call\t%P3", xops); ! output_asm_insn ("popf", xops); ! ! break; ! default: ! ASM_GENERATE_INTERNAL_LABEL (counts, "LPBX", 2); ! cnt_rtx = gen_rtx_SYMBOL_REF (VOIDmode, counts); ! SYMBOL_REF_FLAG (cnt_rtx) = TRUE; ! if (blockno) ! cnt_rtx = plus_constant (cnt_rtx, blockno*4); ! if (flag_pic) ! cnt_rtx = gen_rtx_PLUS (Pmode, pic_offset_table_rtx, cnt_rtx); ! xops[0] = gen_rtx_MEM (SImode, cnt_rtx); ! output_asm_insn ("inc{l}\t%0", xops); ! break; } } ! void ix86_expand_move (mode, operands) enum machine_mode mode; --- 6637,6705 ---- } } void ! ix86_output_addr_vec_elt (file, value) FILE *file; ! int value; { ! const char *directive = ASM_LONG; ! if (TARGET_64BIT) { ! #ifdef ASM_QUAD ! directive = ASM_QUAD; ! #else ! abort (); ! #endif } ! fprintf (file, "%s%s%d\n", directive, LPREFIX, value); ! } void ! ix86_output_addr_diff_elt (file, value, rel) ! FILE *file; ! int value, rel; { ! if (TARGET_64BIT) ! fprintf (file, "%s%s%d-.+(.-%s%d)\n", ! ASM_LONG, LPREFIX, value, LPREFIX, rel); ! else if (HAVE_AS_GOTOFF_IN_DATA) ! fprintf (file, "%s%s%d@GOTOFF\n", ASM_LONG, LPREFIX, value); ! else ! asm_fprintf (file, "%s%U_GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", ! ASM_LONG, LPREFIX, value); ! } ! ! /* Generate either "mov $0, reg" or "xor reg, reg", as appropriate ! for the target. */ ! void ! ix86_expand_clear (dest) ! rtx dest; ! { ! rtx tmp; ! /* We play register width games, which are only valid after reload. */ ! if (!reload_completed) ! abort (); ! /* Avoid HImode and its attendant prefix byte. */ ! if (GET_MODE_SIZE (GET_MODE (dest)) < 4) ! dest = gen_rtx_REG (SImode, REGNO (dest)); ! tmp = gen_rtx_SET (VOIDmode, dest, const0_rtx); ! /* This predicate should match that for movsi_xor and movdi_xor_rex64. */ ! if (reload_completed && (!TARGET_USE_MOV0 || optimize_size)) ! { ! rtx clob = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (CCmode, 17)); ! tmp = gen_rtx_PARALLEL (VOIDmode, gen_rtvec (2, tmp, clob)); } + + emit_insn (tmp); } ! void ix86_expand_move (mode, operands) enum machine_mode mode; *************** ix86_expand_move (mode, operands) *** 4509,4515 **** else { if (GET_CODE (operands[0]) == MEM ! && (GET_MODE (operands[0]) == QImode || !push_operand (operands[0], mode)) && GET_CODE (operands[1]) == MEM) operands[1] = force_reg (mode, operands[1]); --- 6728,6734 ---- else { if (GET_CODE (operands[0]) == MEM ! && (PUSH_ROUNDING (GET_MODE_SIZE (mode)) != GET_MODE_SIZE (mode) || !push_operand (operands[0], mode)) && GET_CODE (operands[1]) == MEM) operands[1] = force_reg (mode, operands[1]); *************** ix86_expand_move (mode, operands) *** 4518,4523 **** --- 6737,6751 ---- && ! general_no_elim_operand (operands[1], mode)) operands[1] = copy_to_mode_reg (mode, operands[1]); + /* Force large constants in 64bit compilation into register + to get them CSEed. */ + if (TARGET_64BIT && mode == DImode + && immediate_operand (operands[1], mode) + && !x86_64_zero_extended_value (operands[1]) + && !register_operand (operands[0], mode) + && optimize && !reload_completed && !reload_in_progress) + operands[1] = copy_to_mode_reg (mode, operands[1]); + if (FLOAT_MODE_P (mode)) { /* If we are loading a floating point constant to a register, *************** ix86_expand_move (mode, operands) *** 4537,4542 **** --- 6765,6802 ---- emit_insn (insn); } + void + ix86_expand_vector_move (mode, operands) + enum machine_mode mode; + rtx operands[]; + { + /* Force constants other than zero into memory. We do not know how + the instructions used to build constants modify the upper 64 bits + of the register, once we have that information we may be able + to handle some of them more efficiently. */ + if ((reload_in_progress | reload_completed) == 0 + && register_operand (operands[0], mode) + && CONSTANT_P (operands[1])) + { + rtx addr = gen_reg_rtx (Pmode); + emit_move_insn (addr, XEXP (force_const_mem (mode, operands[1]), 0)); + operands[1] = gen_rtx_MEM (mode, addr); + } + + /* Make operand1 a register if it isn't already. */ + if ((reload_in_progress | reload_completed) == 0 + && !register_operand (operands[0], mode) + && !register_operand (operands[1], mode) + && operands[1] != CONST0_RTX (mode)) + { + rtx temp = force_reg (GET_MODE (operands[1]), operands[1]); + emit_move_insn (operands[0], temp); + return; + } + + emit_insn (gen_rtx_SET (VOIDmode, operands[0], operands[1])); + } + /* Attempt to expand a binary operator. Make the expansion closer to the actual machine, then just general_operand, which will allow 3 separate memory references (one output, two input) in a single insn. */ *************** ix86_binary_operator_ok (code, mode, ope *** 4649,4655 **** && rtx_equal_p (operands[0], operands[2])))) return 0; /* If the operation is not commutable and the source 1 is memory, we must ! have a matching destionation. */ if (GET_CODE (operands[1]) == MEM && GET_RTX_CLASS (code) != 'c' && ! rtx_equal_p (operands[0], operands[1])) --- 6909,6915 ---- && rtx_equal_p (operands[0], operands[2])))) return 0; /* If the operation is not commutable and the source 1 is memory, we must ! have a matching destination. */ if (GET_CODE (operands[1]) == MEM && GET_RTX_CLASS (code) != 'c' && ! rtx_equal_p (operands[0], operands[1])) *************** ix86_cc_mode (code, op0, op1) *** 4863,4868 **** --- 7123,7132 ---- return CCNOmode; else return CCGCmode; + /* strcmp pattern do (use flags) and combine may ask us for proper + mode. */ + case USE: + return CCmode; default: abort (); } *************** ix86_prepare_fp_compare_args (code, pop0 *** 4892,4906 **** enum machine_mode fpcmp_mode = ix86_fp_compare_mode (code); rtx op0 = *pop0, op1 = *pop1; enum machine_mode op_mode = GET_MODE (op0); /* All of the unordered compare instructions only work on registers. The same is true of the XFmode compare instructions. The same is true of the fcomi compare instructions. */ ! if (fpcmp_mode == CCFPUmode ! || op_mode == XFmode ! || op_mode == TFmode ! || ix86_use_fcomi_compare (code)) { op0 = force_reg (op_mode, op0); op1 = force_reg (op_mode, op1); --- 7156,7172 ---- enum machine_mode fpcmp_mode = ix86_fp_compare_mode (code); rtx op0 = *pop0, op1 = *pop1; enum machine_mode op_mode = GET_MODE (op0); + int is_sse = SSE_REG_P (op0) | SSE_REG_P (op1); /* All of the unordered compare instructions only work on registers. The same is true of the XFmode compare instructions. The same is true of the fcomi compare instructions. */ ! if (!is_sse ! && (fpcmp_mode == CCFPUmode ! || op_mode == XFmode ! || op_mode == TFmode ! || ix86_use_fcomi_compare (code))) { op0 = force_reg (op_mode, op0); op1 = force_reg (op_mode, op1); *************** ix86_prepare_fp_compare_args (code, pop0 *** 4936,4942 **** /* Try to rearrange the comparison to make it cheaper. */ if (ix86_fp_comparison_cost (code) > ix86_fp_comparison_cost (swap_condition (code)) ! && (GET_CODE (op0) == REG || !reload_completed)) { rtx tmp; tmp = op0, op0 = op1, op1 = tmp; --- 7202,7208 ---- /* Try to rearrange the comparison to make it cheaper. */ if (ix86_fp_comparison_cost (code) > ix86_fp_comparison_cost (swap_condition (code)) ! && (GET_CODE (op1) == REG || !no_new_pseudos)) { rtx tmp; tmp = op0, op0 = op1, op1 = tmp; *************** ix86_expand_fp_compare (code, op0, op1, *** 5178,5183 **** --- 7444,7451 ---- { tmp = gen_rtx_COMPARE (fpcmp_mode, op0, op1); tmp2 = gen_rtx_UNSPEC (HImode, gen_rtvec (1, tmp), 9); + if (!scratch) + scratch = gen_reg_rtx (HImode); emit_insn (gen_rtx_SET (VOIDmode, scratch, tmp2)); emit_insn (gen_x86_sahf_1 (scratch)); } *************** ix86_expand_fp_compare (code, op0, op1, *** 5199,5204 **** --- 7467,7474 ---- /* Sadness wrt reg-stack pops killing fpsr -- gotta get fnstsw first. */ tmp = gen_rtx_COMPARE (fpcmp_mode, op0, op1); tmp2 = gen_rtx_UNSPEC (HImode, gen_rtvec (1, tmp), 9); + if (!scratch) + scratch = gen_reg_rtx (HImode); emit_insn (gen_rtx_SET (VOIDmode, scratch, tmp2)); /* In the unordered case, we have to check C2 for NaN's, which *************** ix86_expand_compare (code, second_test, *** 5339,5345 **** *bypass_test = NULL_RTX; if (GET_MODE_CLASS (GET_MODE (op0)) == MODE_FLOAT) ! ret = ix86_expand_fp_compare (code, op0, op1, gen_reg_rtx (HImode), second_test, bypass_test); else ret = ix86_expand_int_compare (code, op0, op1); --- 7609,7615 ---- *bypass_test = NULL_RTX; if (GET_MODE_CLASS (GET_MODE (op0)) == MODE_FLOAT) ! ret = ix86_expand_fp_compare (code, op0, op1, NULL_RTX, second_test, bypass_test); else ret = ix86_expand_int_compare (code, op0, op1); *************** ix86_expand_compare (code, second_test, *** 5347,5352 **** --- 7617,7634 ---- return ret; } + /* Return true if the CODE will result in nontrivial jump sequence. */ + bool + ix86_fp_jump_nontrivial_p (code) + enum rtx_code code; + { + enum rtx_code bypass_code, first_code, second_code; + if (!TARGET_CMOVE) + return true; + ix86_fp_comparison_codes (code, &bypass_code, &first_code, &second_code); + return bypass_code != NIL || second_code != NIL; + } + void ix86_expand_branch (code, label) enum rtx_code code; *************** ix86_expand_branch (code, label) *** 5359,5364 **** --- 7641,7647 ---- case QImode: case HImode: case SImode: + simple: tmp = ix86_expand_compare (code, NULL, NULL); tmp = gen_rtx_IF_THEN_ELSE (VOIDmode, tmp, gen_rtx_LABEL_REF (VOIDmode, label), *************** ix86_expand_branch (code, label) *** 5370,5407 **** case DFmode: case XFmode: case TFmode: - /* Don't expand the comparison early, so that we get better code - when jump or whoever decides to reverse the comparison. */ { rtvec vec; int use_fcomi; code = ix86_prepare_fp_compare_args (code, &ix86_compare_op0, &ix86_compare_op1); ! tmp = gen_rtx_fmt_ee (code, VOIDmode, ! ix86_compare_op0, ix86_compare_op1); ! tmp = gen_rtx_IF_THEN_ELSE (VOIDmode, tmp, ! gen_rtx_LABEL_REF (VOIDmode, label), ! pc_rtx); ! tmp = gen_rtx_SET (VOIDmode, pc_rtx, tmp); ! use_fcomi = ix86_use_fcomi_compare (code); ! vec = rtvec_alloc (3 + !use_fcomi); ! RTVEC_ELT (vec, 0) = tmp; ! RTVEC_ELT (vec, 1) ! = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (CCFPmode, 18)); ! RTVEC_ELT (vec, 2) ! = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (CCFPmode, 17)); ! if (! use_fcomi) ! RTVEC_ELT (vec, 3) ! = gen_rtx_CLOBBER (VOIDmode, gen_rtx_SCRATCH (HImode)); ! emit_jump_insn (gen_rtx_PARALLEL (VOIDmode, vec)); return; } case DImode: /* Expand DImode branch into multiple compare+branch. */ { rtx lo[2], hi[2], label2; --- 7653,7706 ---- case DFmode: case XFmode: case TFmode: { rtvec vec; int use_fcomi; + enum rtx_code bypass_code, first_code, second_code; code = ix86_prepare_fp_compare_args (code, &ix86_compare_op0, &ix86_compare_op1); + + ix86_fp_comparison_codes (code, &bypass_code, &first_code, &second_code); ! /* Check whether we will use the natural sequence with one jump. If ! so, we can expand jump early. Otherwise delay expansion by ! creating compound insn to not confuse optimizers. */ ! if (bypass_code == NIL && second_code == NIL ! && TARGET_CMOVE) ! { ! ix86_split_fp_branch (code, ix86_compare_op0, ix86_compare_op1, ! gen_rtx_LABEL_REF (VOIDmode, label), ! pc_rtx, NULL_RTX); ! } ! else ! { ! tmp = gen_rtx_fmt_ee (code, VOIDmode, ! ix86_compare_op0, ix86_compare_op1); ! tmp = gen_rtx_IF_THEN_ELSE (VOIDmode, tmp, ! gen_rtx_LABEL_REF (VOIDmode, label), ! pc_rtx); ! tmp = gen_rtx_SET (VOIDmode, pc_rtx, tmp); ! use_fcomi = ix86_use_fcomi_compare (code); ! vec = rtvec_alloc (3 + !use_fcomi); ! RTVEC_ELT (vec, 0) = tmp; ! RTVEC_ELT (vec, 1) ! = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (CCFPmode, 18)); ! RTVEC_ELT (vec, 2) ! = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (CCFPmode, 17)); ! if (! use_fcomi) ! RTVEC_ELT (vec, 3) ! = gen_rtx_CLOBBER (VOIDmode, gen_rtx_SCRATCH (HImode)); ! emit_jump_insn (gen_rtx_PARALLEL (VOIDmode, vec)); ! } return; } case DImode: + if (TARGET_64BIT) + goto simple; /* Expand DImode branch into multiple compare+branch. */ { rtx lo[2], hi[2], label2; *************** ix86_expand_branch (code, label) *** 5519,5530 **** /* Split branch based on floating point condition. */ void ! ix86_split_fp_branch (condition, op1, op2, target1, target2, tmp) ! rtx condition, op1, op2, target1, target2, tmp; { rtx second, bypass; rtx label = NULL_RTX; ! enum rtx_code code = GET_CODE (condition); if (target2 != pc_rtx) { --- 7818,7832 ---- /* Split branch based on floating point condition. */ void ! ix86_split_fp_branch (code, op1, op2, target1, target2, tmp) ! enum rtx_code code; ! rtx op1, op2, target1, target2, tmp; { rtx second, bypass; rtx label = NULL_RTX; ! rtx condition; ! int bypass_probability = -1, second_probability = -1, probability = -1; ! rtx i; if (target2 != pc_rtx) { *************** ix86_split_fp_branch (condition, op1, op *** 5536,5570 **** condition = ix86_expand_fp_compare (code, op1, op2, tmp, &second, &bypass); if (bypass != NULL_RTX) { label = gen_label_rtx (); ! emit_jump_insn (gen_rtx_SET (VOIDmode, pc_rtx, gen_rtx_IF_THEN_ELSE (VOIDmode, ! bypass, ! gen_rtx_LABEL_REF (VOIDmode, ! label), ! pc_rtx))); ! } ! /* AMD Athlon and probably other CPUs too have fast bypass path between the ! comparison and first branch. The second branch takes longer to execute ! so place first branch the worse predicable one if possible. */ ! if (second != NULL_RTX ! && (GET_CODE (second) == UNORDERED || GET_CODE (second) == ORDERED)) { ! rtx tmp = condition; ! condition = second; ! second = tmp; } - emit_jump_insn (gen_rtx_SET - (VOIDmode, pc_rtx, - gen_rtx_IF_THEN_ELSE (VOIDmode, - condition, target1, target2))); - if (second != NULL_RTX) - emit_jump_insn (gen_rtx_SET - (VOIDmode, pc_rtx, - gen_rtx_IF_THEN_ELSE (VOIDmode, second, target1, target2))); if (label != NULL_RTX) emit_label (label); } --- 7838,7896 ---- condition = ix86_expand_fp_compare (code, op1, op2, tmp, &second, &bypass); + + if (split_branch_probability >= 0) + { + /* Distribute the probabilities across the jumps. + Assume the BYPASS and SECOND to be always test + for UNORDERED. */ + probability = split_branch_probability; + + /* Value of 1 is low enough to make no need for probability + to be updated. Later we may run some experiments and see + if unordered values are more frequent in practice. */ + if (bypass) + bypass_probability = 1; + if (second) + second_probability = 1; + } if (bypass != NULL_RTX) { label = gen_label_rtx (); ! i = emit_jump_insn (gen_rtx_SET ! (VOIDmode, pc_rtx, ! gen_rtx_IF_THEN_ELSE (VOIDmode, ! bypass, ! gen_rtx_LABEL_REF (VOIDmode, ! label), ! pc_rtx))); ! if (bypass_probability >= 0) ! REG_NOTES (i) ! = gen_rtx_EXPR_LIST (REG_BR_PROB, ! GEN_INT (bypass_probability), ! REG_NOTES (i)); ! } ! i = emit_jump_insn (gen_rtx_SET (VOIDmode, pc_rtx, gen_rtx_IF_THEN_ELSE (VOIDmode, ! condition, target1, target2))); ! if (probability >= 0) ! REG_NOTES (i) ! = gen_rtx_EXPR_LIST (REG_BR_PROB, ! GEN_INT (probability), ! REG_NOTES (i)); ! if (second != NULL_RTX) { ! i = emit_jump_insn (gen_rtx_SET ! (VOIDmode, pc_rtx, ! gen_rtx_IF_THEN_ELSE (VOIDmode, second, target1, ! target2))); ! if (second_probability >= 0) ! REG_NOTES (i) ! = gen_rtx_EXPR_LIST (REG_BR_PROB, ! GEN_INT (second_probability), ! REG_NOTES (i)); } if (label != NULL_RTX) emit_label (label); } *************** ix86_expand_setcc (code, dest) *** 5576,5628 **** { rtx ret, tmp, tmpreg; rtx second_test, bypass_test; - int type; ! if (GET_MODE (ix86_compare_op0) == DImode) return 0; /* FAIL */ ! /* Three modes of generation: ! 0 -- destination does not overlap compare sources: ! clear dest first, emit strict_low_part setcc. ! 1 -- destination does overlap compare sources: ! emit subreg setcc, zero extend. ! 2 -- destination is in QImode: ! emit setcc only. ! ! We don't use mode 0 early in compilation because it confuses CSE. ! There are peepholes to turn mode 1 into mode 0 if things work out ! nicely after reload. */ ! ! type = cse_not_expected ? 0 : 1; ! ! if (GET_MODE (dest) == QImode) ! type = 2; ! else if (reg_overlap_mentioned_p (dest, ix86_compare_op0) ! || reg_overlap_mentioned_p (dest, ix86_compare_op1)) ! type = 1; ! ! if (type == 0) ! emit_move_insn (dest, const0_rtx); ret = ix86_expand_compare (code, &second_test, &bypass_test); PUT_MODE (ret, QImode); tmp = dest; tmpreg = dest; - if (type == 0) - { - tmp = gen_lowpart (QImode, dest); - tmpreg = tmp; - tmp = gen_rtx_STRICT_LOW_PART (VOIDmode, tmp); - } - else if (type == 1) - { - if (!cse_not_expected) - tmp = gen_reg_rtx (QImode); - else - tmp = gen_lowpart (QImode, dest); - tmpreg = tmp; - } emit_insn (gen_rtx_SET (VOIDmode, tmp, ret)); if (bypass_test || second_test) --- 7902,7920 ---- { rtx ret, tmp, tmpreg; rtx second_test, bypass_test; ! if (GET_MODE (ix86_compare_op0) == DImode ! && !TARGET_64BIT) return 0; /* FAIL */ ! if (GET_MODE (dest) != QImode) ! abort (); ret = ix86_expand_compare (code, &second_test, &bypass_test); PUT_MODE (ret, QImode); tmp = dest; tmpreg = dest; emit_insn (gen_rtx_SET (VOIDmode, tmp, ret)); if (bypass_test || second_test) *************** ix86_expand_setcc (code, dest) *** 5633,5639 **** if (bypass_test) { if (second_test) ! abort(); test = bypass_test; bypass = 1; PUT_CODE (test, reverse_condition_maybe_unordered (GET_CODE (test))); --- 7925,7931 ---- if (bypass_test) { if (second_test) ! abort (); test = bypass_test; bypass = 1; PUT_CODE (test, reverse_condition_maybe_unordered (GET_CODE (test))); *************** ix86_expand_setcc (code, dest) *** 5647,5663 **** emit_insn (gen_iorqi3 (tmp, tmpreg, tmp2)); } - if (type == 1) - { - rtx clob; - - tmp = gen_rtx_ZERO_EXTEND (GET_MODE (dest), tmp); - tmp = gen_rtx_SET (VOIDmode, dest, tmp); - clob = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (CCmode, FLAGS_REG)); - tmp = gen_rtx_PARALLEL (VOIDmode, gen_rtvec (2, tmp, clob)); - emit_insn (tmp); - } - return 1; /* DONE */ } --- 7939,7944 ---- *************** ix86_expand_int_movcc (operands) *** 5668,5673 **** --- 7949,7955 ---- enum rtx_code code = GET_CODE (operands[1]), compare_code; rtx compare_seq, compare_op; rtx second_test, bypass_test; + enum machine_mode mode = GET_MODE (operands[0]); /* When the compare code is not LTU or GEU, we can not use sbbl case. In case comparsion is done with immediate, we can convert it to LTU or *************** ix86_expand_int_movcc (operands) *** 5675,5682 **** if ((code == LEU || code == GTU) && GET_CODE (ix86_compare_op1) == CONST_INT ! && GET_MODE (operands[0]) != HImode ! && (unsigned int)INTVAL (ix86_compare_op1) != 0xffffffff && GET_CODE (operands[2]) == CONST_INT && GET_CODE (operands[3]) == CONST_INT) { --- 7957,7964 ---- if ((code == LEU || code == GTU) && GET_CODE (ix86_compare_op1) == CONST_INT ! && mode != HImode ! && (unsigned int) INTVAL (ix86_compare_op1) != 0xffffffff && GET_CODE (operands[2]) == CONST_INT && GET_CODE (operands[3]) == CONST_INT) { *************** ix86_expand_int_movcc (operands) *** 5697,5703 **** /* Don't attempt mode expansion here -- if we had to expand 5 or 6 HImode insns, we'd be swallowed in word prefix ops. */ ! if (GET_MODE (operands[0]) != HImode && GET_CODE (operands[2]) == CONST_INT && GET_CODE (operands[3]) == CONST_INT) { --- 7979,7986 ---- /* Don't attempt mode expansion here -- if we had to expand 5 or 6 HImode insns, we'd be swallowed in word prefix ops. */ ! if (mode != HImode ! && (mode != DImode || TARGET_64BIT) && GET_CODE (operands[2]) == CONST_INT && GET_CODE (operands[3]) == CONST_INT) { *************** ix86_expand_int_movcc (operands) *** 5726,5735 **** if (reg_overlap_mentioned_p (out, ix86_compare_op0) || reg_overlap_mentioned_p (out, ix86_compare_op1)) ! tmp = gen_reg_rtx (SImode); emit_insn (compare_seq); ! emit_insn (gen_x86_movsicc_0_m1 (tmp)); if (diff == 1) { --- 8009,8021 ---- if (reg_overlap_mentioned_p (out, ix86_compare_op0) || reg_overlap_mentioned_p (out, ix86_compare_op1)) ! tmp = gen_reg_rtx (mode); emit_insn (compare_seq); ! if (mode == DImode) ! emit_insn (gen_x86_movdicc_0_m1_rex64 (tmp)); ! else ! emit_insn (gen_x86_movsicc_0_m1 (tmp)); if (diff == 1) { *************** ix86_expand_int_movcc (operands) *** 5741,5747 **** * Size 5 - 8. */ if (ct) ! emit_insn (gen_addsi3 (tmp, tmp, GEN_INT (ct))); } else if (cf == -1) { --- 8027,8035 ---- * Size 5 - 8. */ if (ct) ! tmp = expand_simple_binop (mode, PLUS, ! tmp, GEN_INT (ct), ! tmp, 1, OPTAB_DIRECT); } else if (cf == -1) { *************** ix86_expand_int_movcc (operands) *** 5752,5758 **** * * Size 8. */ ! emit_insn (gen_iorsi3 (tmp, tmp, GEN_INT (ct))); } else if (diff == -1 && ct) { --- 8040,8048 ---- * * Size 8. */ ! tmp = expand_simple_binop (mode, IOR, ! tmp, GEN_INT (ct), ! tmp, 1, OPTAB_DIRECT); } else if (diff == -1 && ct) { *************** ix86_expand_int_movcc (operands) *** 5764,5772 **** * * Size 8 - 11. */ ! emit_insn (gen_one_cmplsi2 (tmp, tmp)); if (cf) ! emit_insn (gen_addsi3 (tmp, tmp, GEN_INT (cf))); } else { --- 8054,8064 ---- * * Size 8 - 11. */ ! tmp = expand_simple_unop (mode, NOT, tmp, tmp, 1); if (cf) ! tmp = expand_simple_binop (mode, PLUS, ! tmp, GEN_INT (cf), ! tmp, 1, OPTAB_DIRECT); } else { *************** ix86_expand_int_movcc (operands) *** 5778,5786 **** * * Size 8 - 11. */ ! emit_insn (gen_andsi3 (tmp, tmp, GEN_INT (cf - ct))); if (ct) ! emit_insn (gen_addsi3 (tmp, tmp, GEN_INT (ct))); } if (tmp != out) --- 8070,8084 ---- * * Size 8 - 11. */ ! tmp = expand_simple_binop (mode, AND, ! tmp, ! GEN_INT (trunc_int_for_mode ! (cf - ct, mode)), ! tmp, 1, OPTAB_DIRECT); if (ct) ! tmp = expand_simple_binop (mode, PLUS, ! tmp, GEN_INT (ct), ! tmp, 1, OPTAB_DIRECT); } if (tmp != out) *************** ix86_expand_int_movcc (operands) *** 5810,5817 **** code = reverse_condition (code); } } ! if (diff == 1 || diff == 2 || diff == 4 || diff == 8 ! || diff == 3 || diff == 5 || diff == 9) { /* * xorl dest,dest --- 8108,8116 ---- code = reverse_condition (code); } } ! if ((diff == 1 || diff == 2 || diff == 4 || diff == 8 ! || diff == 3 || diff == 5 || diff == 9) ! && (mode != DImode || x86_64_sign_extended_value (GEN_INT (cf)))) { /* * xorl dest,dest *************** ix86_expand_int_movcc (operands) *** 5831,5858 **** ix86_compare_op1, VOIDmode, 0, 1); nops = 0; if (diff == 1) ! tmp = out; else { ! tmp = gen_rtx_MULT (SImode, out, GEN_INT (diff & ~1)); nops++; if (diff & 1) { ! tmp = gen_rtx_PLUS (SImode, tmp, out); nops++; } } if (cf != 0) { ! tmp = gen_rtx_PLUS (SImode, tmp, GEN_INT (cf)); nops++; } ! if (tmp != out) { ! if (nops == 0) ! emit_move_insn (out, tmp); ! else if (nops == 1) { rtx clob; --- 8130,8160 ---- ix86_compare_op1, VOIDmode, 0, 1); nops = 0; + /* On x86_64 the lea instruction operates on Pmode, so we need to get arithmetics + done in proper mode to match. */ if (diff == 1) ! tmp = out; else { ! rtx out1; ! out1 = out; ! tmp = gen_rtx_MULT (mode, out1, GEN_INT (diff & ~1)); nops++; if (diff & 1) { ! tmp = gen_rtx_PLUS (mode, tmp, out1); nops++; } } if (cf != 0) { ! tmp = gen_rtx_PLUS (mode, tmp, GEN_INT (cf)); nops++; } ! if (tmp != out ! && (GET_CODE (tmp) != SUBREG || SUBREG_REG (tmp) != out)) { ! if (nops == 1) { rtx clob; *************** ix86_expand_int_movcc (operands) *** 5916,5925 **** out = emit_store_flag (out, code, ix86_compare_op0, ix86_compare_op1, VOIDmode, 0, 1); ! emit_insn (gen_addsi3 (out, out, constm1_rtx)); ! emit_insn (gen_andsi3 (out, out, GEN_INT (cf-ct))); ! if (ct != 0) ! emit_insn (gen_addsi3 (out, out, GEN_INT (ct))); if (out != operands[0]) emit_move_insn (operands[0], out); --- 8218,8234 ---- out = emit_store_flag (out, code, ix86_compare_op0, ix86_compare_op1, VOIDmode, 0, 1); ! out = expand_simple_binop (mode, PLUS, ! out, constm1_rtx, ! out, 1, OPTAB_DIRECT); ! out = expand_simple_binop (mode, AND, ! out, ! GEN_INT (trunc_int_for_mode ! (cf - ct, mode)), ! out, 1, OPTAB_DIRECT); ! out = expand_simple_binop (mode, PLUS, ! out, GEN_INT (ct), ! out, 1, OPTAB_DIRECT); if (out != operands[0]) emit_move_insn (operands[0], out); *************** ix86_expand_int_movcc (operands) *** 5964,5970 **** return 0; /* FAIL */ orig_out = operands[0]; ! tmp = gen_reg_rtx (GET_MODE (orig_out)); operands[0] = tmp; /* Recurse to get the constant loaded. */ --- 8273,8279 ---- return 0; /* FAIL */ orig_out = operands[0]; ! tmp = gen_reg_rtx (mode); operands[0] = tmp; /* Recurse to get the constant loaded. */ *************** ix86_expand_int_movcc (operands) *** 5972,5978 **** return 0; /* FAIL */ /* Mask in the interesting variable. */ ! out = expand_binop (GET_MODE (orig_out), op, var, tmp, orig_out, 0, OPTAB_WIDEN); if (out != orig_out) emit_move_insn (orig_out, out); --- 8281,8287 ---- return 0; /* FAIL */ /* Mask in the interesting variable. */ ! out = expand_binop (mode, op, var, tmp, orig_out, 0, OPTAB_WIDEN); if (out != orig_out) emit_move_insn (orig_out, out); *************** ix86_expand_int_movcc (operands) *** 5991,6031 **** * Size 15. */ ! if (! nonimmediate_operand (operands[2], GET_MODE (operands[0]))) ! operands[2] = force_reg (GET_MODE (operands[0]), operands[2]); ! if (! nonimmediate_operand (operands[3], GET_MODE (operands[0]))) ! operands[3] = force_reg (GET_MODE (operands[0]), operands[3]); if (bypass_test && reg_overlap_mentioned_p (operands[0], operands[3])) { ! rtx tmp = gen_reg_rtx (GET_MODE (operands[0])); emit_move_insn (tmp, operands[3]); operands[3] = tmp; } if (second_test && reg_overlap_mentioned_p (operands[0], operands[2])) { ! rtx tmp = gen_reg_rtx (GET_MODE (operands[0])); emit_move_insn (tmp, operands[2]); operands[2] = tmp; } if (! register_operand (operands[2], VOIDmode) && ! register_operand (operands[3], VOIDmode)) ! operands[2] = force_reg (GET_MODE (operands[0]), operands[2]); emit_insn (compare_seq); emit_insn (gen_rtx_SET (VOIDmode, operands[0], ! gen_rtx_IF_THEN_ELSE (GET_MODE (operands[0]), compare_op, operands[2], operands[3]))); if (bypass_test) emit_insn (gen_rtx_SET (VOIDmode, operands[0], ! gen_rtx_IF_THEN_ELSE (GET_MODE (operands[0]), bypass_test, operands[3], operands[0]))); if (second_test) emit_insn (gen_rtx_SET (VOIDmode, operands[0], ! gen_rtx_IF_THEN_ELSE (GET_MODE (operands[0]), second_test, operands[2], operands[0]))); --- 8300,8340 ---- * Size 15. */ ! if (! nonimmediate_operand (operands[2], mode)) ! operands[2] = force_reg (mode, operands[2]); ! if (! nonimmediate_operand (operands[3], mode)) ! operands[3] = force_reg (mode, operands[3]); if (bypass_test && reg_overlap_mentioned_p (operands[0], operands[3])) { ! rtx tmp = gen_reg_rtx (mode); emit_move_insn (tmp, operands[3]); operands[3] = tmp; } if (second_test && reg_overlap_mentioned_p (operands[0], operands[2])) { ! rtx tmp = gen_reg_rtx (mode); emit_move_insn (tmp, operands[2]); operands[2] = tmp; } if (! register_operand (operands[2], VOIDmode) && ! register_operand (operands[3], VOIDmode)) ! operands[2] = force_reg (mode, operands[2]); emit_insn (compare_seq); emit_insn (gen_rtx_SET (VOIDmode, operands[0], ! gen_rtx_IF_THEN_ELSE (mode, compare_op, operands[2], operands[3]))); if (bypass_test) emit_insn (gen_rtx_SET (VOIDmode, operands[0], ! gen_rtx_IF_THEN_ELSE (mode, bypass_test, operands[3], operands[0]))); if (second_test) emit_insn (gen_rtx_SET (VOIDmode, operands[0], ! gen_rtx_IF_THEN_ELSE (mode, second_test, operands[2], operands[0]))); *************** ix86_expand_fp_movcc (operands) *** 6041,6046 **** --- 8350,8447 ---- rtx tmp; rtx compare_op, second_test, bypass_test; + /* For SF/DFmode conditional moves based on comparisons + in same mode, we may want to use SSE min/max instructions. */ + if (((TARGET_SSE_MATH && GET_MODE (operands[0]) == SFmode) + || (TARGET_SSE2 && TARGET_SSE_MATH && GET_MODE (operands[0]) == DFmode)) + && GET_MODE (ix86_compare_op0) == GET_MODE (operands[0]) + /* The SSE comparisons does not support the LTGT/UNEQ pair. */ + && (!TARGET_IEEE_FP + || (GET_CODE (operands[1]) != LTGT && GET_CODE (operands[1]) != UNEQ)) + /* We may be called from the post-reload splitter. */ + && (!REG_P (operands[0]) + || SSE_REG_P (operands[0]) + || REGNO (operands[0]) >= FIRST_PSEUDO_REGISTER)) + { + rtx op0 = ix86_compare_op0, op1 = ix86_compare_op1; + code = GET_CODE (operands[1]); + + /* See if we have (cross) match between comparison operands and + conditional move operands. */ + if (rtx_equal_p (operands[2], op1)) + { + rtx tmp = op0; + op0 = op1; + op1 = tmp; + code = reverse_condition_maybe_unordered (code); + } + if (rtx_equal_p (operands[2], op0) && rtx_equal_p (operands[3], op1)) + { + /* Check for min operation. */ + if (code == LT) + { + operands[0] = force_reg (GET_MODE (operands[0]), operands[0]); + if (memory_operand (op0, VOIDmode)) + op0 = force_reg (GET_MODE (operands[0]), op0); + if (GET_MODE (operands[0]) == SFmode) + emit_insn (gen_minsf3 (operands[0], op0, op1)); + else + emit_insn (gen_mindf3 (operands[0], op0, op1)); + return 1; + } + /* Check for max operation. */ + if (code == GT) + { + operands[0] = force_reg (GET_MODE (operands[0]), operands[0]); + if (memory_operand (op0, VOIDmode)) + op0 = force_reg (GET_MODE (operands[0]), op0); + if (GET_MODE (operands[0]) == SFmode) + emit_insn (gen_maxsf3 (operands[0], op0, op1)); + else + emit_insn (gen_maxdf3 (operands[0], op0, op1)); + return 1; + } + } + /* Manage condition to be sse_comparison_operator. In case we are + in non-ieee mode, try to canonicalize the destination operand + to be first in the comparison - this helps reload to avoid extra + moves. */ + if (!sse_comparison_operator (operands[1], VOIDmode) + || (rtx_equal_p (operands[0], ix86_compare_op1) && !TARGET_IEEE_FP)) + { + rtx tmp = ix86_compare_op0; + ix86_compare_op0 = ix86_compare_op1; + ix86_compare_op1 = tmp; + operands[1] = gen_rtx_fmt_ee (swap_condition (GET_CODE (operands[1])), + VOIDmode, ix86_compare_op0, + ix86_compare_op1); + } + /* Similary try to manage result to be first operand of conditional + move. We also don't support the NE comparison on SSE, so try to + avoid it. */ + if ((rtx_equal_p (operands[0], operands[3]) + && (!TARGET_IEEE_FP || GET_CODE (operands[1]) != EQ)) + || (GET_CODE (operands[1]) == NE && TARGET_IEEE_FP)) + { + rtx tmp = operands[2]; + operands[2] = operands[3]; + operands[3] = tmp; + operands[1] = gen_rtx_fmt_ee (reverse_condition_maybe_unordered + (GET_CODE (operands[1])), + VOIDmode, ix86_compare_op0, + ix86_compare_op1); + } + if (GET_MODE (operands[0]) == SFmode) + emit_insn (gen_sse_movsfcc (operands[0], operands[1], + operands[2], operands[3], + ix86_compare_op0, ix86_compare_op1)); + else + emit_insn (gen_sse_movdfcc (operands[0], operands[1], + operands[2], operands[3], + ix86_compare_op0, ix86_compare_op1)); + return 1; + } + /* The floating point conditional move instructions don't directly support conditions resulting from a signed integer comparison. */ *************** ix86_expand_fp_movcc (operands) *** 6053,6059 **** if (!fcmov_comparison_operator (compare_op, VOIDmode)) { if (second_test != NULL || bypass_test != NULL) ! abort(); tmp = gen_reg_rtx (QImode); ix86_expand_setcc (code, tmp); code = NE; --- 8454,8460 ---- if (!fcmov_comparison_operator (compare_op, VOIDmode)) { if (second_test != NULL || bypass_test != NULL) ! abort (); tmp = gen_reg_rtx (QImode); ix86_expand_setcc (code, tmp); code = NE; *************** ix86_split_to_parts (operand, parts, mod *** 6106,6112 **** rtx *parts; enum machine_mode mode; { ! int size = mode == TFmode ? 3 : GET_MODE_SIZE (mode) / 4; if (GET_CODE (operand) == REG && MMX_REGNO_P (REGNO (operand))) abort (); --- 8507,8518 ---- rtx *parts; enum machine_mode mode; { ! int size; ! ! if (!TARGET_64BIT) ! size = mode == TFmode ? 3 : (GET_MODE_SIZE (mode) / 4); ! else ! size = (GET_MODE_SIZE (mode) + 4) / 8; if (GET_CODE (operand) == REG && MMX_REGNO_P (REGNO (operand))) abort (); *************** ix86_split_to_parts (operand, parts, mod *** 6127,6136 **** if (! push_operand (operand, VOIDmode)) abort (); ! PUT_MODE (operand, SImode); parts[0] = parts[1] = parts[2] = operand; } ! else { if (mode == DImode) split_di (&operand, 1, &parts[0], &parts[1]); --- 8533,8543 ---- if (! push_operand (operand, VOIDmode)) abort (); ! operand = copy_rtx (operand); ! PUT_MODE (operand, Pmode); parts[0] = parts[1] = parts[2] = operand; } ! else if (!TARGET_64BIT) { if (mode == DImode) split_di (&operand, 1, &parts[0], &parts[1]); *************** ix86_split_to_parts (operand, parts, mod *** 6147,6157 **** } else if (offsettable_memref_p (operand)) { ! PUT_MODE (operand, SImode); parts[0] = operand; ! parts[1] = adj_offsettable_operand (operand, 4); if (size == 3) ! parts[2] = adj_offsettable_operand (operand, 8); } else if (GET_CODE (operand) == CONST_DOUBLE) { --- 8554,8564 ---- } else if (offsettable_memref_p (operand)) { ! operand = adjust_address (operand, SImode, 0); parts[0] = operand; ! parts[1] = adjust_address (operand, SImode, 4); if (size == 3) ! parts[2] = adjust_address (operand, SImode, 8); } else if (GET_CODE (operand) == CONST_DOUBLE) { *************** ix86_split_to_parts (operand, parts, mod *** 6164,6170 **** case XFmode: case TFmode: REAL_VALUE_TO_TARGET_LONG_DOUBLE (r, l); ! parts[2] = GEN_INT (l[2]); break; case DFmode: REAL_VALUE_TO_TARGET_DOUBLE (r, l); --- 8571,8577 ---- case XFmode: case TFmode: REAL_VALUE_TO_TARGET_LONG_DOUBLE (r, l); ! parts[2] = GEN_INT (trunc_int_for_mode (l[2], SImode)); break; case DFmode: REAL_VALUE_TO_TARGET_DOUBLE (r, l); *************** ix86_split_to_parts (operand, parts, mod *** 6172,6179 **** default: abort (); } ! parts[1] = GEN_INT (l[1]); ! parts[0] = GEN_INT (l[0]); } else abort (); --- 8579,8627 ---- default: abort (); } ! parts[1] = GEN_INT (trunc_int_for_mode (l[1], SImode)); ! parts[0] = GEN_INT (trunc_int_for_mode (l[0], SImode)); ! } ! else ! abort (); ! } ! } ! else ! { ! if (mode == TImode) ! split_ti (&operand, 1, &parts[0], &parts[1]); ! if (mode == XFmode || mode == TFmode) ! { ! if (REG_P (operand)) ! { ! if (!reload_completed) ! abort (); ! parts[0] = gen_rtx_REG (DImode, REGNO (operand) + 0); ! parts[1] = gen_rtx_REG (SImode, REGNO (operand) + 1); ! } ! else if (offsettable_memref_p (operand)) ! { ! operand = adjust_address (operand, DImode, 0); ! parts[0] = operand; ! parts[1] = adjust_address (operand, SImode, 8); ! } ! else if (GET_CODE (operand) == CONST_DOUBLE) ! { ! REAL_VALUE_TYPE r; ! long l[3]; ! ! REAL_VALUE_FROM_CONST_DOUBLE (r, operand); ! REAL_VALUE_TO_TARGET_LONG_DOUBLE (r, l); ! /* Do not use shift by 32 to avoid warning on 32bit systems. */ ! if (HOST_BITS_PER_WIDE_INT >= 64) ! parts[0] ! = GEN_INT (trunc_int_for_mode ! ((l[0] & (((HOST_WIDE_INT) 2 << 31) - 1)) ! + ((((HOST_WIDE_INT) l[1]) << 31) << 1), ! DImode)); ! else ! parts[0] = immed_double_const (l[0], l[1], DImode); ! parts[1] = GEN_INT (trunc_int_for_mode (l[2], SImode)); } else abort (); *************** ix86_split_to_parts (operand, parts, mod *** 6188,6206 **** insns have been emitted. Operands 2-4 contain the input values int the correct order; operands 5-7 contain the output values. */ ! int ! ix86_split_long_move (operands1) ! rtx operands1[]; { rtx part[2][3]; ! rtx operands[2]; ! int size; int push = 0; int collisions = 0; ! /* Make our own copy to avoid clobbering the operands. */ ! operands[0] = copy_rtx (operands1[0]); ! operands[1] = copy_rtx (operands1[1]); /* The only non-offsettable memory we handle is push. */ if (push_operand (operands[0], VOIDmode)) --- 8636,8674 ---- insns have been emitted. Operands 2-4 contain the input values int the correct order; operands 5-7 contain the output values. */ ! void ! ix86_split_long_move (operands) ! rtx operands[]; { rtx part[2][3]; ! int nparts; int push = 0; int collisions = 0; + enum machine_mode mode = GET_MODE (operands[0]); ! /* The DFmode expanders may ask us to move double. ! For 64bit target this is single move. By hiding the fact ! here we simplify i386.md splitters. */ ! if (GET_MODE_SIZE (GET_MODE (operands[0])) == 8 && TARGET_64BIT) ! { ! /* Optimize constant pool reference to immediates. This is used by ! fp moves, that force all constants to memory to allow combining. */ ! ! if (GET_CODE (operands[1]) == MEM ! && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF ! && CONSTANT_POOL_ADDRESS_P (XEXP (operands[1], 0))) ! operands[1] = get_pool_constant (XEXP (operands[1], 0)); ! if (push_operand (operands[0], VOIDmode)) ! { ! operands[0] = copy_rtx (operands[0]); ! PUT_MODE (operands[0], Pmode); ! } ! else ! operands[0] = gen_lowpart (DImode, operands[0]); ! operands[1] = gen_lowpart (DImode, operands[1]); ! emit_move_insn (operands[0], operands[1]); ! return; ! } /* The only non-offsettable memory we handle is push. */ if (push_operand (operands[0], VOIDmode)) *************** ix86_split_long_move (operands1) *** 6209,6224 **** && ! offsettable_memref_p (operands[0])) abort (); ! size = ix86_split_to_parts (operands[0], part[0], GET_MODE (operands1[0])); ! ix86_split_to_parts (operands[1], part[1], GET_MODE (operands1[0])); /* When emitting push, take care for source operands on the stack. */ if (push && GET_CODE (operands[1]) == MEM && reg_overlap_mentioned_p (stack_pointer_rtx, operands[1])) { ! if (size == 3) ! part[1][1] = part[1][2]; ! part[1][0] = part[1][1]; } /* We need to do copy in the right order in case an address register --- 8677,8694 ---- && ! offsettable_memref_p (operands[0])) abort (); ! nparts = ix86_split_to_parts (operands[1], part[1], GET_MODE (operands[0])); ! ix86_split_to_parts (operands[0], part[0], GET_MODE (operands[0])); /* When emitting push, take care for source operands on the stack. */ if (push && GET_CODE (operands[1]) == MEM && reg_overlap_mentioned_p (stack_pointer_rtx, operands[1])) { ! if (nparts == 3) ! part[1][1] = change_address (part[1][1], GET_MODE (part[1][1]), ! XEXP (part[1][2], 0)); ! part[1][0] = change_address (part[1][0], GET_MODE (part[1][0]), ! XEXP (part[1][1], 0)); } /* We need to do copy in the right order in case an address register *************** ix86_split_long_move (operands1) *** 6229,6240 **** collisions++; if (reg_overlap_mentioned_p (part[0][1], XEXP (part[1][0], 0))) collisions++; ! if (size == 3 && reg_overlap_mentioned_p (part[0][2], XEXP (part[1][0], 0))) collisions++; /* Collision in the middle part can be handled by reordering. */ ! if (collisions == 1 && size == 3 && reg_overlap_mentioned_p (part[0][1], XEXP (part[1][0], 0))) { rtx tmp; --- 8699,8710 ---- collisions++; if (reg_overlap_mentioned_p (part[0][1], XEXP (part[1][0], 0))) collisions++; ! if (nparts == 3 && reg_overlap_mentioned_p (part[0][2], XEXP (part[1][0], 0))) collisions++; /* Collision in the middle part can be handled by reordering. */ ! if (collisions == 1 && nparts == 3 && reg_overlap_mentioned_p (part[0][1], XEXP (part[1][0], 0))) { rtx tmp; *************** ix86_split_long_move (operands1) *** 6247,6325 **** else if (collisions > 1) { collisions = 1; ! emit_insn (gen_rtx_SET (VOIDmode, part[0][size - 1], XEXP (part[1][0], 0))); ! part[1][0] = change_address (part[1][0], SImode, part[0][size - 1]); ! part[1][1] = adj_offsettable_operand (part[1][0], 4); ! if (size == 3) ! part[1][2] = adj_offsettable_operand (part[1][0], 8); } } if (push) { ! if (size == 3) { ! /* We use only first 12 bytes of TFmode value, but for pushing we ! are required to adjust stack as if we were pushing real 16byte ! value. */ ! if (GET_MODE (operands1[0]) == TFmode) ! emit_insn (gen_addsi3 (stack_pointer_rtx, stack_pointer_rtx, ! GEN_INT (-4))); ! emit_insn (gen_push (part[1][2])); } ! emit_insn (gen_push (part[1][1])); ! emit_insn (gen_push (part[1][0])); ! return 1; } /* Choose correct order to not overwrite the source before it is copied. */ if ((REG_P (part[0][0]) && REG_P (part[1][1]) && (REGNO (part[0][0]) == REGNO (part[1][1]) ! || (size == 3 && REGNO (part[0][0]) == REGNO (part[1][2])))) || (collisions > 0 && reg_overlap_mentioned_p (part[0][0], XEXP (part[1][0], 0)))) { ! if (size == 3) { ! operands1[2] = part[0][2]; ! operands1[3] = part[0][1]; ! operands1[4] = part[0][0]; ! operands1[5] = part[1][2]; ! operands1[6] = part[1][1]; ! operands1[7] = part[1][0]; } else { ! operands1[2] = part[0][1]; ! operands1[3] = part[0][0]; ! operands1[5] = part[1][1]; ! operands1[6] = part[1][0]; } } else { ! if (size == 3) { ! operands1[2] = part[0][0]; ! operands1[3] = part[0][1]; ! operands1[4] = part[0][2]; ! operands1[5] = part[1][0]; ! operands1[6] = part[1][1]; ! operands1[7] = part[1][2]; } else { ! operands1[2] = part[0][0]; ! operands1[3] = part[0][1]; ! operands1[5] = part[1][0]; ! operands1[6] = part[1][1]; } } ! return 0; } void --- 8717,8822 ---- else if (collisions > 1) { collisions = 1; ! emit_insn (gen_rtx_SET (VOIDmode, part[0][nparts - 1], XEXP (part[1][0], 0))); ! part[1][0] = change_address (part[1][0], ! TARGET_64BIT ? DImode : SImode, ! part[0][nparts - 1]); ! part[1][1] = adjust_address (part[1][0], VOIDmode, UNITS_PER_WORD); ! if (nparts == 3) ! part[1][2] = adjust_address (part[1][0], VOIDmode, 8); } } if (push) { ! if (!TARGET_64BIT) { ! if (nparts == 3) ! { ! /* We use only first 12 bytes of TFmode value, but for pushing we ! are required to adjust stack as if we were pushing real 16byte ! value. */ ! if (mode == TFmode && !TARGET_64BIT) ! emit_insn (gen_addsi3 (stack_pointer_rtx, stack_pointer_rtx, ! GEN_INT (-4))); ! emit_move_insn (part[0][2], part[1][2]); ! } } ! else ! { ! /* In 64bit mode we don't have 32bit push available. In case this is ! register, it is OK - we will just use larger counterpart. We also ! retype memory - these comes from attempt to avoid REX prefix on ! moving of second half of TFmode value. */ ! if (GET_MODE (part[1][1]) == SImode) ! { ! if (GET_CODE (part[1][1]) == MEM) ! part[1][1] = adjust_address (part[1][1], DImode, 0); ! else if (REG_P (part[1][1])) ! part[1][1] = gen_rtx_REG (DImode, REGNO (part[1][1])); ! else ! abort (); ! if (GET_MODE (part[1][0]) == SImode) ! part[1][0] = part[1][1]; ! } ! } ! emit_move_insn (part[0][1], part[1][1]); ! emit_move_insn (part[0][0], part[1][0]); ! return; } /* Choose correct order to not overwrite the source before it is copied. */ if ((REG_P (part[0][0]) && REG_P (part[1][1]) && (REGNO (part[0][0]) == REGNO (part[1][1]) ! || (nparts == 3 && REGNO (part[0][0]) == REGNO (part[1][2])))) || (collisions > 0 && reg_overlap_mentioned_p (part[0][0], XEXP (part[1][0], 0)))) { ! if (nparts == 3) { ! operands[2] = part[0][2]; ! operands[3] = part[0][1]; ! operands[4] = part[0][0]; ! operands[5] = part[1][2]; ! operands[6] = part[1][1]; ! operands[7] = part[1][0]; } else { ! operands[2] = part[0][1]; ! operands[3] = part[0][0]; ! operands[5] = part[1][1]; ! operands[6] = part[1][0]; } } else { ! if (nparts == 3) { ! operands[2] = part[0][0]; ! operands[3] = part[0][1]; ! operands[4] = part[0][2]; ! operands[5] = part[1][0]; ! operands[6] = part[1][1]; ! operands[7] = part[1][2]; } else { ! operands[2] = part[0][0]; ! operands[3] = part[0][1]; ! operands[5] = part[1][0]; ! operands[6] = part[1][1]; } } + emit_move_insn (operands[2], operands[5]); + emit_move_insn (operands[3], operands[6]); + if (nparts == 3) + emit_move_insn (operands[4], operands[7]); ! return; } void *************** ix86_split_lshrdi (operands, scratch) *** 6488,6493 **** --- 8985,9526 ---- } } + /* Helper function for the string operations below. Dest VARIABLE whether + it is aligned to VALUE bytes. If true, jump to the label. */ + static rtx + ix86_expand_aligntest (variable, value) + rtx variable; + int value; + { + rtx label = gen_label_rtx (); + rtx tmpcount = gen_reg_rtx (GET_MODE (variable)); + if (GET_MODE (variable) == DImode) + emit_insn (gen_anddi3 (tmpcount, variable, GEN_INT (value))); + else + emit_insn (gen_andsi3 (tmpcount, variable, GEN_INT (value))); + emit_cmp_and_jump_insns (tmpcount, const0_rtx, EQ, 0, GET_MODE (variable), + 1, label); + return label; + } + + /* Adjust COUNTER by the VALUE. */ + static void + ix86_adjust_counter (countreg, value) + rtx countreg; + HOST_WIDE_INT value; + { + if (GET_MODE (countreg) == DImode) + emit_insn (gen_adddi3 (countreg, countreg, GEN_INT (-value))); + else + emit_insn (gen_addsi3 (countreg, countreg, GEN_INT (-value))); + } + + /* Zero extend possibly SImode EXP to Pmode register. */ + rtx + ix86_zero_extend_to_Pmode (exp) + rtx exp; + { + rtx r; + if (GET_MODE (exp) == VOIDmode) + return force_reg (Pmode, exp); + if (GET_MODE (exp) == Pmode) + return copy_to_mode_reg (Pmode, exp); + r = gen_reg_rtx (Pmode); + emit_insn (gen_zero_extendsidi2 (r, exp)); + return r; + } + + /* Expand string move (memcpy) operation. Use i386 string operations when + profitable. expand_clrstr contains similar code. */ + int + ix86_expand_movstr (dst, src, count_exp, align_exp) + rtx dst, src, count_exp, align_exp; + { + rtx srcreg, destreg, countreg; + enum machine_mode counter_mode; + HOST_WIDE_INT align = 0; + unsigned HOST_WIDE_INT count = 0; + rtx insns; + + start_sequence (); + + if (GET_CODE (align_exp) == CONST_INT) + align = INTVAL (align_exp); + + /* This simple hack avoids all inlining code and simplifies code below. */ + if (!TARGET_ALIGN_STRINGOPS) + align = 64; + + if (GET_CODE (count_exp) == CONST_INT) + count = INTVAL (count_exp); + + /* Figure out proper mode for counter. For 32bits it is always SImode, + for 64bits use SImode when possible, otherwise DImode. + Set count to number of bytes copied when known at compile time. */ + if (!TARGET_64BIT || GET_MODE (count_exp) == SImode + || x86_64_zero_extended_value (count_exp)) + counter_mode = SImode; + else + counter_mode = DImode; + + if (counter_mode != SImode && counter_mode != DImode) + abort (); + + destreg = copy_to_mode_reg (Pmode, XEXP (dst, 0)); + srcreg = copy_to_mode_reg (Pmode, XEXP (src, 0)); + + emit_insn (gen_cld ()); + + /* When optimizing for size emit simple rep ; movsb instruction for + counts not divisible by 4. */ + + if ((!optimize || optimize_size) && (count == 0 || (count & 0x03))) + { + countreg = ix86_zero_extend_to_Pmode (count_exp); + if (TARGET_64BIT) + emit_insn (gen_rep_movqi_rex64 (destreg, srcreg, countreg, + destreg, srcreg, countreg)); + else + emit_insn (gen_rep_movqi (destreg, srcreg, countreg, + destreg, srcreg, countreg)); + } + + /* For constant aligned (or small unaligned) copies use rep movsl + followed by code copying the rest. For PentiumPro ensure 8 byte + alignment to allow rep movsl acceleration. */ + + else if (count != 0 + && (align >= 8 + || (!TARGET_PENTIUMPRO && !TARGET_64BIT && align >= 4) + || optimize_size || count < (unsigned int) 64)) + { + int size = TARGET_64BIT && !optimize_size ? 8 : 4; + if (count & ~(size - 1)) + { + countreg = copy_to_mode_reg (counter_mode, + GEN_INT ((count >> (size == 4 ? 2 : 3)) + & (TARGET_64BIT ? -1 : 0x3fffffff))); + countreg = ix86_zero_extend_to_Pmode (countreg); + if (size == 4) + { + if (TARGET_64BIT) + emit_insn (gen_rep_movsi_rex64 (destreg, srcreg, countreg, + destreg, srcreg, countreg)); + else + emit_insn (gen_rep_movsi (destreg, srcreg, countreg, + destreg, srcreg, countreg)); + } + else + emit_insn (gen_rep_movdi_rex64 (destreg, srcreg, countreg, + destreg, srcreg, countreg)); + } + if (size == 8 && (count & 0x04)) + emit_insn (gen_strmovsi (destreg, srcreg)); + if (count & 0x02) + emit_insn (gen_strmovhi (destreg, srcreg)); + if (count & 0x01) + emit_insn (gen_strmovqi (destreg, srcreg)); + } + /* The generic code based on the glibc implementation: + - align destination to 4 bytes (8 byte alignment is used for PentiumPro + allowing accelerated copying there) + - copy the data using rep movsl + - copy the rest. */ + else + { + rtx countreg2; + rtx label = NULL; + + /* In case we don't know anything about the alignment, default to + library version, since it is usually equally fast and result in + shorter code. */ + if (!TARGET_INLINE_ALL_STRINGOPS && align < UNITS_PER_WORD) + { + end_sequence (); + return 0; + } + + if (TARGET_SINGLE_STRINGOP) + emit_insn (gen_cld ()); + + countreg2 = gen_reg_rtx (Pmode); + countreg = copy_to_mode_reg (counter_mode, count_exp); + + /* We don't use loops to align destination and to copy parts smaller + than 4 bytes, because gcc is able to optimize such code better (in + the case the destination or the count really is aligned, gcc is often + able to predict the branches) and also it is friendlier to the + hardware branch prediction. + + Using loops is benefical for generic case, because we can + handle small counts using the loops. Many CPUs (such as Athlon) + have large REP prefix setup costs. + + This is quite costy. Maybe we can revisit this decision later or + add some customizability to this code. */ + + if (count == 0 + && align < (TARGET_PENTIUMPRO && (count == 0 + || count >= (unsigned int) 260) + ? 8 : UNITS_PER_WORD)) + { + label = gen_label_rtx (); + emit_cmp_and_jump_insns (countreg, GEN_INT (UNITS_PER_WORD - 1), + LEU, 0, counter_mode, 1, label); + } + if (align <= 1) + { + rtx label = ix86_expand_aligntest (destreg, 1); + emit_insn (gen_strmovqi (destreg, srcreg)); + ix86_adjust_counter (countreg, 1); + emit_label (label); + LABEL_NUSES (label) = 1; + } + if (align <= 2) + { + rtx label = ix86_expand_aligntest (destreg, 2); + emit_insn (gen_strmovhi (destreg, srcreg)); + ix86_adjust_counter (countreg, 2); + emit_label (label); + LABEL_NUSES (label) = 1; + } + if (align <= 4 + && ((TARGET_PENTIUMPRO && (count == 0 + || count >= (unsigned int) 260)) + || TARGET_64BIT)) + { + rtx label = ix86_expand_aligntest (destreg, 4); + emit_insn (gen_strmovsi (destreg, srcreg)); + ix86_adjust_counter (countreg, 4); + emit_label (label); + LABEL_NUSES (label) = 1; + } + + if (!TARGET_SINGLE_STRINGOP) + emit_insn (gen_cld ()); + if (TARGET_64BIT) + { + emit_insn (gen_lshrdi3 (countreg2, ix86_zero_extend_to_Pmode (countreg), + GEN_INT (3))); + emit_insn (gen_rep_movdi_rex64 (destreg, srcreg, countreg2, + destreg, srcreg, countreg2)); + } + else + { + emit_insn (gen_lshrsi3 (countreg2, countreg, GEN_INT (2))); + emit_insn (gen_rep_movsi (destreg, srcreg, countreg2, + destreg, srcreg, countreg2)); + } + + if (label) + { + emit_label (label); + LABEL_NUSES (label) = 1; + } + if (TARGET_64BIT && align > 4 && count != 0 && (count & 4)) + emit_insn (gen_strmovsi (destreg, srcreg)); + if ((align <= 4 || count == 0) && TARGET_64BIT) + { + rtx label = ix86_expand_aligntest (countreg, 4); + emit_insn (gen_strmovsi (destreg, srcreg)); + emit_label (label); + LABEL_NUSES (label) = 1; + } + if (align > 2 && count != 0 && (count & 2)) + emit_insn (gen_strmovhi (destreg, srcreg)); + if (align <= 2 || count == 0) + { + rtx label = ix86_expand_aligntest (countreg, 2); + emit_insn (gen_strmovhi (destreg, srcreg)); + emit_label (label); + LABEL_NUSES (label) = 1; + } + if (align > 1 && count != 0 && (count & 1)) + emit_insn (gen_strmovqi (destreg, srcreg)); + if (align <= 1 || count == 0) + { + rtx label = ix86_expand_aligntest (countreg, 1); + emit_insn (gen_strmovqi (destreg, srcreg)); + emit_label (label); + LABEL_NUSES (label) = 1; + } + } + + insns = get_insns (); + end_sequence (); + + ix86_set_move_mem_attrs (insns, dst, src, destreg, srcreg); + emit_insns (insns); + return 1; + } + + /* Expand string clear operation (bzero). Use i386 string operations when + profitable. expand_movstr contains similar code. */ + int + ix86_expand_clrstr (src, count_exp, align_exp) + rtx src, count_exp, align_exp; + { + rtx destreg, zeroreg, countreg; + enum machine_mode counter_mode; + HOST_WIDE_INT align = 0; + unsigned HOST_WIDE_INT count = 0; + + if (GET_CODE (align_exp) == CONST_INT) + align = INTVAL (align_exp); + + /* This simple hack avoids all inlining code and simplifies code below. */ + if (!TARGET_ALIGN_STRINGOPS) + align = 32; + + if (GET_CODE (count_exp) == CONST_INT) + count = INTVAL (count_exp); + /* Figure out proper mode for counter. For 32bits it is always SImode, + for 64bits use SImode when possible, otherwise DImode. + Set count to number of bytes copied when known at compile time. */ + if (!TARGET_64BIT || GET_MODE (count_exp) == SImode + || x86_64_zero_extended_value (count_exp)) + counter_mode = SImode; + else + counter_mode = DImode; + + destreg = copy_to_mode_reg (Pmode, XEXP (src, 0)); + + emit_insn (gen_cld ()); + + /* When optimizing for size emit simple rep ; movsb instruction for + counts not divisible by 4. */ + + if ((!optimize || optimize_size) && (count == 0 || (count & 0x03))) + { + countreg = ix86_zero_extend_to_Pmode (count_exp); + zeroreg = copy_to_mode_reg (QImode, const0_rtx); + if (TARGET_64BIT) + emit_insn (gen_rep_stosqi_rex64 (destreg, countreg, zeroreg, + destreg, countreg)); + else + emit_insn (gen_rep_stosqi (destreg, countreg, zeroreg, + destreg, countreg)); + } + else if (count != 0 + && (align >= 8 + || (!TARGET_PENTIUMPRO && !TARGET_64BIT && align >= 4) + || optimize_size || count < (unsigned int) 64)) + { + int size = TARGET_64BIT && !optimize_size ? 8 : 4; + zeroreg = copy_to_mode_reg (size == 4 ? SImode : DImode, const0_rtx); + if (count & ~(size - 1)) + { + countreg = copy_to_mode_reg (counter_mode, + GEN_INT ((count >> (size == 4 ? 2 : 3)) + & (TARGET_64BIT ? -1 : 0x3fffffff))); + countreg = ix86_zero_extend_to_Pmode (countreg); + if (size == 4) + { + if (TARGET_64BIT) + emit_insn (gen_rep_stossi_rex64 (destreg, countreg, zeroreg, + destreg, countreg)); + else + emit_insn (gen_rep_stossi (destreg, countreg, zeroreg, + destreg, countreg)); + } + else + emit_insn (gen_rep_stosdi_rex64 (destreg, countreg, zeroreg, + destreg, countreg)); + } + if (size == 8 && (count & 0x04)) + emit_insn (gen_strsetsi (destreg, + gen_rtx_SUBREG (SImode, zeroreg, 0))); + if (count & 0x02) + emit_insn (gen_strsethi (destreg, + gen_rtx_SUBREG (HImode, zeroreg, 0))); + if (count & 0x01) + emit_insn (gen_strsetqi (destreg, + gen_rtx_SUBREG (QImode, zeroreg, 0))); + } + else + { + rtx countreg2; + rtx label = NULL; + + /* In case we don't know anything about the alignment, default to + library version, since it is usually equally fast and result in + shorter code. */ + if (!TARGET_INLINE_ALL_STRINGOPS && align < UNITS_PER_WORD) + return 0; + + if (TARGET_SINGLE_STRINGOP) + emit_insn (gen_cld ()); + + countreg2 = gen_reg_rtx (Pmode); + countreg = copy_to_mode_reg (counter_mode, count_exp); + zeroreg = copy_to_mode_reg (Pmode, const0_rtx); + + if (count == 0 + && align < (TARGET_PENTIUMPRO && (count == 0 + || count >= (unsigned int) 260) + ? 8 : UNITS_PER_WORD)) + { + label = gen_label_rtx (); + emit_cmp_and_jump_insns (countreg, GEN_INT (UNITS_PER_WORD - 1), + LEU, 0, counter_mode, 1, label); + } + if (align <= 1) + { + rtx label = ix86_expand_aligntest (destreg, 1); + emit_insn (gen_strsetqi (destreg, + gen_rtx_SUBREG (QImode, zeroreg, 0))); + ix86_adjust_counter (countreg, 1); + emit_label (label); + LABEL_NUSES (label) = 1; + } + if (align <= 2) + { + rtx label = ix86_expand_aligntest (destreg, 2); + emit_insn (gen_strsethi (destreg, + gen_rtx_SUBREG (HImode, zeroreg, 0))); + ix86_adjust_counter (countreg, 2); + emit_label (label); + LABEL_NUSES (label) = 1; + } + if (align <= 4 && TARGET_PENTIUMPRO && (count == 0 + || count >= (unsigned int) 260)) + { + rtx label = ix86_expand_aligntest (destreg, 4); + emit_insn (gen_strsetsi (destreg, (TARGET_64BIT + ? gen_rtx_SUBREG (SImode, zeroreg, 0) + : zeroreg))); + ix86_adjust_counter (countreg, 4); + emit_label (label); + LABEL_NUSES (label) = 1; + } + + if (!TARGET_SINGLE_STRINGOP) + emit_insn (gen_cld ()); + if (TARGET_64BIT) + { + emit_insn (gen_lshrdi3 (countreg2, ix86_zero_extend_to_Pmode (countreg), + GEN_INT (3))); + emit_insn (gen_rep_stosdi_rex64 (destreg, countreg2, zeroreg, + destreg, countreg2)); + } + else + { + emit_insn (gen_lshrsi3 (countreg2, countreg, GEN_INT (2))); + emit_insn (gen_rep_stossi (destreg, countreg2, zeroreg, + destreg, countreg2)); + } + + if (label) + { + emit_label (label); + LABEL_NUSES (label) = 1; + } + if (TARGET_64BIT && align > 4 && count != 0 && (count & 4)) + emit_insn (gen_strsetsi (destreg, + gen_rtx_SUBREG (SImode, zeroreg, 0))); + if (TARGET_64BIT && (align <= 4 || count == 0)) + { + rtx label = ix86_expand_aligntest (destreg, 2); + emit_insn (gen_strsetsi (destreg, + gen_rtx_SUBREG (SImode, zeroreg, 0))); + emit_label (label); + LABEL_NUSES (label) = 1; + } + if (align > 2 && count != 0 && (count & 2)) + emit_insn (gen_strsethi (destreg, + gen_rtx_SUBREG (HImode, zeroreg, 0))); + if (align <= 2 || count == 0) + { + rtx label = ix86_expand_aligntest (destreg, 2); + emit_insn (gen_strsethi (destreg, + gen_rtx_SUBREG (HImode, zeroreg, 0))); + emit_label (label); + LABEL_NUSES (label) = 1; + } + if (align > 1 && count != 0 && (count & 1)) + emit_insn (gen_strsetqi (destreg, + gen_rtx_SUBREG (QImode, zeroreg, 0))); + if (align <= 1 || count == 0) + { + rtx label = ix86_expand_aligntest (destreg, 1); + emit_insn (gen_strsetqi (destreg, + gen_rtx_SUBREG (QImode, zeroreg, 0))); + emit_label (label); + LABEL_NUSES (label) = 1; + } + } + return 1; + } + /* Expand strlen. */ + int + ix86_expand_strlen (out, src, eoschar, align) + rtx out, src, eoschar, align; + { + rtx addr, scratch1, scratch2, scratch3, scratch4; + + /* The generic case of strlen expander is long. Avoid it's + expanding unless TARGET_INLINE_ALL_STRINGOPS. */ + + if (TARGET_UNROLL_STRLEN && eoschar == const0_rtx && optimize > 1 + && !TARGET_INLINE_ALL_STRINGOPS + && !optimize_size + && (GET_CODE (align) != CONST_INT || INTVAL (align) < 4)) + return 0; + + addr = force_reg (Pmode, XEXP (src, 0)); + scratch1 = gen_reg_rtx (Pmode); + + if (TARGET_UNROLL_STRLEN && eoschar == const0_rtx && optimize > 1 + && !optimize_size) + { + /* Well it seems that some optimizer does not combine a call like + foo(strlen(bar), strlen(bar)); + when the move and the subtraction is done here. It does calculate + the length just once when these instructions are done inside of + output_strlen_unroll(). But I think since &bar[strlen(bar)] is + often used and I use one fewer register for the lifetime of + output_strlen_unroll() this is better. */ + + emit_move_insn (out, addr); + + ix86_expand_strlensi_unroll_1 (out, align); + + /* strlensi_unroll_1 returns the address of the zero at the end of + the string, like memchr(), so compute the length by subtracting + the start address. */ + if (TARGET_64BIT) + emit_insn (gen_subdi3 (out, out, addr)); + else + emit_insn (gen_subsi3 (out, out, addr)); + } + else + { + scratch2 = gen_reg_rtx (Pmode); + scratch3 = gen_reg_rtx (Pmode); + scratch4 = force_reg (Pmode, constm1_rtx); + + emit_move_insn (scratch3, addr); + eoschar = force_reg (QImode, eoschar); + + emit_insn (gen_cld ()); + if (TARGET_64BIT) + { + emit_insn (gen_strlenqi_rex_1 (scratch1, scratch3, eoschar, + align, scratch4, scratch3)); + emit_insn (gen_one_cmpldi2 (scratch2, scratch1)); + emit_insn (gen_adddi3 (out, scratch2, constm1_rtx)); + } + else + { + emit_insn (gen_strlenqi_1 (scratch1, scratch3, eoschar, + align, scratch4, scratch3)); + emit_insn (gen_one_cmplsi2 (scratch2, scratch1)); + emit_insn (gen_addsi3 (out, scratch2, constm1_rtx)); + } + } + return 1; + } + /* Expand the appropriate insns for doing strlen if not just doing repnz; scasb *************** ix86_split_lshrdi (operands, scratch) *** 6499,6507 **** This is just the body. It needs the initialisations mentioned above and some address computing at the end. These things are done in i386.md. */ ! void ! ix86_expand_strlensi_unroll_1 (out, align_rtx, scratch) ! rtx out, align_rtx, scratch; { int align; rtx tmp; --- 9532,9540 ---- This is just the body. It needs the initialisations mentioned above and some address computing at the end. These things are done in i386.md. */ ! static void ! ix86_expand_strlensi_unroll_1 (out, align_rtx) ! rtx out, align_rtx; { int align; rtx tmp; *************** ix86_expand_strlensi_unroll_1 (out, alig *** 6511,6516 **** --- 9544,9550 ---- rtx end_0_label = gen_label_rtx (); rtx mem; rtx tmpreg = gen_reg_rtx (SImode); + rtx scratch = gen_reg_rtx (SImode); align = 0; if (GET_CODE (align_rtx) == CONST_INT) *************** ix86_expand_strlensi_unroll_1 (out, alig *** 6521,6526 **** --- 9555,9562 ---- /* Is there a known alignment and is it less than 4? */ if (align < 4) { + rtx scratch1 = gen_reg_rtx (Pmode); + emit_move_insn (scratch1, out); /* Is there a known alignment and is it not 2? */ if (align != 2) { *************** ix86_expand_strlensi_unroll_1 (out, alig *** 6528,6553 **** align_2_label = gen_label_rtx (); /* Label when aligned to 2-byte */ /* Leave just the 3 lower bits. */ ! align_rtx = expand_binop (SImode, and_optab, scratch, GEN_INT (3), NULL_RTX, 0, OPTAB_WIDEN); emit_cmp_and_jump_insns (align_rtx, const0_rtx, EQ, NULL, ! SImode, 1, 0, align_4_label); emit_cmp_and_jump_insns (align_rtx, GEN_INT (2), EQ, NULL, ! SImode, 1, 0, align_2_label); emit_cmp_and_jump_insns (align_rtx, GEN_INT (2), GTU, NULL, ! SImode, 1, 0, align_3_label); } else { /* Since the alignment is 2, we have to check 2 or 0 bytes; check if is aligned to 4 - byte. */ ! align_rtx = expand_binop (SImode, and_optab, scratch, GEN_INT (2), NULL_RTX, 0, OPTAB_WIDEN); emit_cmp_and_jump_insns (align_rtx, const0_rtx, EQ, NULL, ! SImode, 1, 0, align_4_label); } mem = gen_rtx_MEM (QImode, out); --- 9564,9589 ---- align_2_label = gen_label_rtx (); /* Label when aligned to 2-byte */ /* Leave just the 3 lower bits. */ ! align_rtx = expand_binop (Pmode, and_optab, scratch1, GEN_INT (3), NULL_RTX, 0, OPTAB_WIDEN); emit_cmp_and_jump_insns (align_rtx, const0_rtx, EQ, NULL, ! Pmode, 1, align_4_label); emit_cmp_and_jump_insns (align_rtx, GEN_INT (2), EQ, NULL, ! Pmode, 1, align_2_label); emit_cmp_and_jump_insns (align_rtx, GEN_INT (2), GTU, NULL, ! Pmode, 1, align_3_label); } else { /* Since the alignment is 2, we have to check 2 or 0 bytes; check if is aligned to 4 - byte. */ ! align_rtx = expand_binop (Pmode, and_optab, scratch1, GEN_INT (2), NULL_RTX, 0, OPTAB_WIDEN); emit_cmp_and_jump_insns (align_rtx, const0_rtx, EQ, NULL, ! Pmode, 1, align_4_label); } mem = gen_rtx_MEM (QImode, out); *************** ix86_expand_strlensi_unroll_1 (out, alig *** 6556,6583 **** /* Compare the first n unaligned byte on a byte per byte basis. */ emit_cmp_and_jump_insns (mem, const0_rtx, EQ, NULL, ! QImode, 1, 0, end_0_label); /* Increment the address. */ ! emit_insn (gen_addsi3 (out, out, const1_rtx)); /* Not needed with an alignment of 2 */ if (align != 2) { emit_label (align_2_label); ! emit_cmp_and_jump_insns (mem, const0_rtx, EQ, NULL, ! QImode, 1, 0, end_0_label); ! emit_insn (gen_addsi3 (out, out, const1_rtx)); emit_label (align_3_label); } ! emit_cmp_and_jump_insns (mem, const0_rtx, EQ, NULL, ! QImode, 1, 0, end_0_label); ! emit_insn (gen_addsi3 (out, out, const1_rtx)); } /* Generate loop to check 4 bytes at a time. It is not a good idea to --- 9592,9628 ---- /* Compare the first n unaligned byte on a byte per byte basis. */ emit_cmp_and_jump_insns (mem, const0_rtx, EQ, NULL, ! QImode, 1, end_0_label); /* Increment the address. */ ! if (TARGET_64BIT) ! emit_insn (gen_adddi3 (out, out, const1_rtx)); ! else ! emit_insn (gen_addsi3 (out, out, const1_rtx)); /* Not needed with an alignment of 2 */ if (align != 2) { emit_label (align_2_label); ! emit_cmp_and_jump_insns (mem, const0_rtx, EQ, NULL, QImode, 1, ! end_0_label); ! if (TARGET_64BIT) ! emit_insn (gen_adddi3 (out, out, const1_rtx)); ! else ! emit_insn (gen_addsi3 (out, out, const1_rtx)); emit_label (align_3_label); } ! emit_cmp_and_jump_insns (mem, const0_rtx, EQ, NULL, QImode, 1, ! end_0_label); ! if (TARGET_64BIT) ! emit_insn (gen_adddi3 (out, out, const1_rtx)); ! else ! emit_insn (gen_addsi3 (out, out, const1_rtx)); } /* Generate loop to check 4 bytes at a time. It is not a good idea to *************** ix86_expand_strlensi_unroll_1 (out, alig *** 6587,6593 **** mem = gen_rtx_MEM (SImode, out); emit_move_insn (scratch, mem); ! emit_insn (gen_addsi3 (out, out, GEN_INT (4))); /* This formula yields a nonzero result iff one of the bytes is zero. This saves three branches inside loop and many cycles. */ --- 9632,9641 ---- mem = gen_rtx_MEM (SImode, out); emit_move_insn (scratch, mem); ! if (TARGET_64BIT) ! emit_insn (gen_adddi3 (out, out, GEN_INT (4))); ! else ! emit_insn (gen_addsi3 (out, out, GEN_INT (4))); /* This formula yields a nonzero result iff one of the bytes is zero. This saves three branches inside loop and many cycles. */ *************** ix86_expand_strlensi_unroll_1 (out, alig *** 6595,6607 **** emit_insn (gen_addsi3 (tmpreg, scratch, GEN_INT (-0x01010101))); emit_insn (gen_one_cmplsi2 (scratch, scratch)); emit_insn (gen_andsi3 (tmpreg, tmpreg, scratch)); ! emit_insn (gen_andsi3 (tmpreg, tmpreg, GEN_INT (0x80808080))); ! emit_cmp_and_jump_insns (tmpreg, const0_rtx, EQ, 0, ! SImode, 1, 0, align_4_label); if (TARGET_CMOVE) { rtx reg = gen_reg_rtx (SImode); emit_move_insn (reg, tmpreg); emit_insn (gen_lshrsi3 (reg, reg, GEN_INT (16))); --- 9643,9658 ---- emit_insn (gen_addsi3 (tmpreg, scratch, GEN_INT (-0x01010101))); emit_insn (gen_one_cmplsi2 (scratch, scratch)); emit_insn (gen_andsi3 (tmpreg, tmpreg, scratch)); ! emit_insn (gen_andsi3 (tmpreg, tmpreg, ! GEN_INT (trunc_int_for_mode ! (0x80808080, SImode)))); ! emit_cmp_and_jump_insns (tmpreg, const0_rtx, EQ, 0, SImode, 1, ! align_4_label); if (TARGET_CMOVE) { rtx reg = gen_reg_rtx (SImode); + rtx reg2 = gen_reg_rtx (Pmode); emit_move_insn (reg, tmpreg); emit_insn (gen_lshrsi3 (reg, reg, GEN_INT (16))); *************** ix86_expand_strlensi_unroll_1 (out, alig *** 6614,6627 **** reg, tmpreg))); /* Emit lea manually to avoid clobbering of flags. */ ! emit_insn (gen_rtx_SET (SImode, reg, ! gen_rtx_PLUS (SImode, out, GEN_INT (2)))); tmp = gen_rtx_REG (CCNOmode, FLAGS_REG); tmp = gen_rtx_EQ (VOIDmode, tmp, const0_rtx); emit_insn (gen_rtx_SET (VOIDmode, out, ! gen_rtx_IF_THEN_ELSE (SImode, tmp, ! reg, out))); } --- 9665,9678 ---- reg, tmpreg))); /* Emit lea manually to avoid clobbering of flags. */ ! emit_insn (gen_rtx_SET (SImode, reg2, ! gen_rtx_PLUS (Pmode, out, GEN_INT (2)))); tmp = gen_rtx_REG (CCNOmode, FLAGS_REG); tmp = gen_rtx_EQ (VOIDmode, tmp, const0_rtx); emit_insn (gen_rtx_SET (VOIDmode, out, ! gen_rtx_IF_THEN_ELSE (Pmode, tmp, ! reg2, out))); } *************** ix86_expand_strlensi_unroll_1 (out, alig *** 6641,6647 **** /* Not in the first two. Move two bytes forward. */ emit_insn (gen_lshrsi3 (tmpreg, tmpreg, GEN_INT (16))); ! emit_insn (gen_addsi3 (out, out, GEN_INT (2))); emit_label (end_2_label); --- 9692,9701 ---- /* Not in the first two. Move two bytes forward. */ emit_insn (gen_lshrsi3 (tmpreg, tmpreg, GEN_INT (16))); ! if (TARGET_64BIT) ! emit_insn (gen_adddi3 (out, out, GEN_INT (2))); ! else ! emit_insn (gen_addsi3 (out, out, GEN_INT (2))); emit_label (end_2_label); *************** ix86_expand_strlensi_unroll_1 (out, alig *** 6650,6656 **** /* Avoid branch in fixing the byte. */ tmpreg = gen_lowpart (QImode, tmpreg); emit_insn (gen_addqi3_cc (tmpreg, tmpreg, tmpreg)); ! emit_insn (gen_subsi3_carry (out, out, GEN_INT (3))); emit_label (end_0_label); } --- 9704,9713 ---- /* Avoid branch in fixing the byte. */ tmpreg = gen_lowpart (QImode, tmpreg); emit_insn (gen_addqi3_cc (tmpreg, tmpreg, tmpreg)); ! if (TARGET_64BIT) ! emit_insn (gen_subdi3_carry_rex64 (out, out, GEN_INT (3))); ! else ! emit_insn (gen_subsi3_carry (out, out, GEN_INT (3))); emit_label (end_0_label); } *************** memory_address_length (addr) *** 6726,6732 **** int len; if (GET_CODE (addr) == PRE_DEC ! || GET_CODE (addr) == POST_INC) return 0; if (! ix86_decompose_address (addr, &parts)) --- 9783,9791 ---- int len; if (GET_CODE (addr) == PRE_DEC ! || GET_CODE (addr) == POST_INC ! || GET_CODE (addr) == PRE_MODIFY ! || GET_CODE (addr) == POST_MODIFY) return 0; if (! ix86_decompose_address (addr, &parts)) *************** ix86_attr_length_immediate_default (insn *** 6804,6811 **** case MODE_SI: len+=4; break; default: ! fatal_insn ("Unknown insn mode", insn); } } } --- 9863,9874 ---- case MODE_SI: len+=4; break; + /* Immediates for DImode instructions are encoded as 32bit sign extended values. */ + case MODE_DI: + len+=4; + break; default: ! fatal_insn ("unknown insn mode", insn); } } } *************** ix86_attr_length_address_default (insn) *** 6829,6835 **** /* Return the maximum number of instructions a cpu can issue. */ ! int ix86_issue_rate () { switch (ix86_cpu) --- 9892,9898 ---- /* Return the maximum number of instructions a cpu can issue. */ ! static int ix86_issue_rate () { switch (ix86_cpu) *************** ix86_issue_rate () *** 6839,6844 **** --- 9902,9909 ---- return 2; case PROCESSOR_PENTIUMPRO: + case PROCESSOR_PENTIUM4: + case PROCESSOR_ATHLON: return 3; default: *************** ix86_flags_dependant (insn, dep_insn, in *** 6882,6888 **** if (GET_CODE (set) != REG || REGNO (set) != FLAGS_REG) return 0; ! /* This test is true if the dependant insn reads the flags but not any other potentially set register. */ if (!reg_overlap_mentioned_p (set, PATTERN (insn))) return 0; --- 9947,9953 ---- if (GET_CODE (set) != REG || REGNO (set) != FLAGS_REG) return 0; ! /* This test is true if the dependent insn reads the flags but not any other potentially set register. */ if (!reg_overlap_mentioned_p (set, PATTERN (insn))) return 0; *************** ix86_agi_dependant (insn, dep_insn, insn *** 6903,6909 **** { rtx addr; ! if (insn_type == TYPE_LEA) { addr = PATTERN (insn); if (GET_CODE (addr) == SET) --- 9968,9975 ---- { rtx addr; ! if (insn_type == TYPE_LEA ! && TARGET_PENTIUM) { addr = PATTERN (insn); if (GET_CODE (addr) == SET) *************** ix86_agi_dependant (insn, dep_insn, insn *** 6932,6944 **** return modified_in_p (addr, dep_insn); } ! int ix86_adjust_cost (insn, link, dep_insn, cost) rtx insn, link, dep_insn; int cost; { enum attr_type insn_type, dep_insn_type; ! enum attr_memory memory; rtx set, set2; int dep_insn_code_number; --- 9998,10010 ---- return modified_in_p (addr, dep_insn); } ! static int ix86_adjust_cost (insn, link, dep_insn, cost) rtx insn, link, dep_insn; int cost; { enum attr_type insn_type, dep_insn_type; ! enum attr_memory memory, dep_memory; rtx set, set2; int dep_insn_code_number; *************** ix86_adjust_cost (insn, link, dep_insn, *** 6955,6968 **** insn_type = get_attr_type (insn); dep_insn_type = get_attr_type (dep_insn); - /* Prologue and epilogue allocators can have a false dependency on ebp. - This results in one cycle extra stall on Pentium prologue scheduling, - so handle this important case manually. */ - if (dep_insn_code_number == CODE_FOR_pro_epilogue_adjust_stack - && dep_insn_type == TYPE_ALU - && !reg_mentioned_p (stack_pointer_rtx, insn)) - return 0; - switch (ix86_cpu) { case PROCESSOR_PENTIUM: --- 10021,10026 ---- *************** ix86_adjust_cost (insn, link, dep_insn, *** 6982,6993 **** break; case PROCESSOR_PENTIUMPRO: /* Since we can't represent delayed latencies of load+operation, increase the cost here for non-imov insns. */ if (dep_insn_type != TYPE_IMOV ! && dep_insn_type != TYPE_FMOV ! && ((memory = get_attr_memory (dep_insn) == MEMORY_LOAD) ! || memory == MEMORY_BOTH)) cost += 1; /* INT->FP conversion is expensive. */ --- 10040,10053 ---- break; case PROCESSOR_PENTIUMPRO: + memory = get_attr_memory (insn); + dep_memory = get_attr_memory (dep_insn); + /* Since we can't represent delayed latencies of load+operation, increase the cost here for non-imov insns. */ if (dep_insn_type != TYPE_IMOV ! && dep_insn_type != TYPE_FMOV ! && (dep_memory == MEMORY_LOAD || dep_memory == MEMORY_BOTH)) cost += 1; /* INT->FP conversion is expensive. */ *************** ix86_adjust_cost (insn, link, dep_insn, *** 7001,7009 **** --- 10061,10086 ---- && rtx_equal_p (SET_DEST (set), SET_SRC (set2)) && GET_CODE (SET_DEST (set2)) == MEM) cost += 1; + + /* Show ability of reorder buffer to hide latency of load by executing + in parallel with previous instruction in case + previous instruction is not needed to compute the address. */ + if ((memory == MEMORY_LOAD || memory == MEMORY_BOTH) + && !ix86_agi_dependant (insn, dep_insn, insn_type)) + { + /* Claim moves to take one cycle, as core can issue one load + at time and the next load can start cycle later. */ + if (dep_insn_type == TYPE_IMOV + || dep_insn_type == TYPE_FMOV) + cost = 1; + else if (cost > 1) + cost--; + } break; case PROCESSOR_K6: + memory = get_attr_memory (insn); + dep_memory = get_attr_memory (dep_insn); /* The esp dependency is resolved before the instruction is really finished. */ if ((insn_type == TYPE_PUSH || insn_type == TYPE_POP) *************** ix86_adjust_cost (insn, link, dep_insn, *** 7012,7035 **** /* Since we can't represent delayed latencies of load+operation, increase the cost here for non-imov insns. */ ! if ((memory = get_attr_memory (dep_insn) == MEMORY_LOAD) ! || memory == MEMORY_BOTH) cost += (dep_insn_type != TYPE_IMOV) ? 2 : 1; /* INT->FP conversion is expensive. */ if (get_attr_fp_int_src (dep_insn)) cost += 5; break; case PROCESSOR_ATHLON: ! if ((memory = get_attr_memory (dep_insn)) == MEMORY_LOAD ! || memory == MEMORY_BOTH) { if (dep_insn_type == TYPE_IMOV || dep_insn_type == TYPE_FMOV) cost += 2; else cost += 3; } default: break; --- 10089,10146 ---- /* Since we can't represent delayed latencies of load+operation, increase the cost here for non-imov insns. */ ! if (dep_memory == MEMORY_LOAD || dep_memory == MEMORY_BOTH) cost += (dep_insn_type != TYPE_IMOV) ? 2 : 1; /* INT->FP conversion is expensive. */ if (get_attr_fp_int_src (dep_insn)) cost += 5; + + /* Show ability of reorder buffer to hide latency of load by executing + in parallel with previous instruction in case + previous instruction is not needed to compute the address. */ + if ((memory == MEMORY_LOAD || memory == MEMORY_BOTH) + && !ix86_agi_dependant (insn, dep_insn, insn_type)) + { + /* Claim moves to take one cycle, as core can issue one load + at time and the next load can start cycle later. */ + if (dep_insn_type == TYPE_IMOV + || dep_insn_type == TYPE_FMOV) + cost = 1; + else if (cost > 2) + cost -= 2; + else + cost = 1; + } break; case PROCESSOR_ATHLON: ! memory = get_attr_memory (insn); ! dep_memory = get_attr_memory (dep_insn); ! ! if (dep_memory == MEMORY_LOAD || dep_memory == MEMORY_BOTH) { if (dep_insn_type == TYPE_IMOV || dep_insn_type == TYPE_FMOV) cost += 2; else cost += 3; } + /* Show ability of reorder buffer to hide latency of load by executing + in parallel with previous instruction in case + previous instruction is not needed to compute the address. */ + if ((memory == MEMORY_LOAD || memory == MEMORY_BOTH) + && !ix86_agi_dependant (insn, dep_insn, insn_type)) + { + /* Claim moves to take one cycle, as core can issue one load + at time and the next load can start cycle later. */ + if (dep_insn_type == TYPE_IMOV + || dep_insn_type == TYPE_FMOV) + cost = 0; + else if (cost >= 3) + cost -= 3; + else + cost = 0; + } default: break; *************** ix86_safe_length (insn) *** 7052,7058 **** rtx insn; { if (recog_memoized (insn) >= 0) ! return get_attr_length(insn); else return 128; } --- 10163,10169 ---- rtx insn; { if (recog_memoized (insn) >= 0) ! return get_attr_length (insn); else return 128; } *************** ix86_safe_length_prefix (insn) *** 7062,7068 **** rtx insn; { if (recog_memoized (insn) >= 0) ! return get_attr_length(insn); else return 0; } --- 10173,10179 ---- rtx insn; { if (recog_memoized (insn) >= 0) ! return get_attr_length (insn); else return 0; } *************** ix86_safe_memory (insn) *** 7072,7078 **** rtx insn; { if (recog_memoized (insn) >= 0) ! return get_attr_memory(insn); else return MEMORY_UNKNOWN; } --- 10183,10189 ---- rtx insn; { if (recog_memoized (insn) >= 0) ! return get_attr_memory (insn); else return MEMORY_UNKNOWN; } *************** ix86_safe_pent_pair (insn) *** 7082,7088 **** rtx insn; { if (recog_memoized (insn) >= 0) ! return get_attr_pent_pair(insn); else return PENT_PAIR_NP; } --- 10193,10199 ---- rtx insn; { if (recog_memoized (insn) >= 0) ! return get_attr_pent_pair (insn); else return PENT_PAIR_NP; } *************** ix86_dump_ppro_packet (dump) *** 7115,7124 **** /* We're beginning a new block. Initialize data structures as necessary. */ ! void ! ix86_sched_init (dump, sched_verbose) FILE *dump ATTRIBUTE_UNUSED; int sched_verbose ATTRIBUTE_UNUSED; { memset (&ix86_sched_data, 0, sizeof (ix86_sched_data)); } --- 10226,10236 ---- /* We're beginning a new block. Initialize data structures as necessary. */ ! static void ! ix86_sched_init (dump, sched_verbose, veclen) FILE *dump ATTRIBUTE_UNUSED; int sched_verbose ATTRIBUTE_UNUSED; + int veclen ATTRIBUTE_UNUSED; { memset (&ix86_sched_data, 0, sizeof (ix86_sched_data)); } *************** ix86_sched_reorder_ppro (ready, e_ready) *** 7349,7362 **** /* We are about to being issuing insns for this clock cycle. Override the default sort algorithm to better slot instructions. */ ! int ! ix86_sched_reorder (dump, sched_verbose, ready, n_ready, clock_var) FILE *dump ATTRIBUTE_UNUSED; int sched_verbose ATTRIBUTE_UNUSED; rtx *ready; ! int n_ready; int clock_var ATTRIBUTE_UNUSED; { rtx *e_ready = ready + n_ready - 1; if (n_ready < 2) --- 10461,10475 ---- /* We are about to being issuing insns for this clock cycle. Override the default sort algorithm to better slot instructions. */ ! static int ! ix86_sched_reorder (dump, sched_verbose, ready, n_readyp, clock_var) FILE *dump ATTRIBUTE_UNUSED; int sched_verbose ATTRIBUTE_UNUSED; rtx *ready; ! int *n_readyp; int clock_var ATTRIBUTE_UNUSED; { + int n_ready = *n_readyp; rtx *e_ready = ready + n_ready - 1; if (n_ready < 2) *************** out: *** 7383,7389 **** /* We are about to issue INSN. Return the number of insns left on the ready queue that can be issued this cycle. */ ! int ix86_variable_issue (dump, sched_verbose, insn, can_issue_more) FILE *dump; int sched_verbose; --- 10496,10502 ---- /* We are about to issue INSN. Return the number of insns left on the ready queue that can be issued this cycle. */ ! static int ix86_variable_issue (dump, sched_verbose, insn, can_issue_more) FILE *dump; int sched_verbose; *************** ix86_data_alignment (type, align) *** 7531,7536 **** --- 10644,10661 ---- || TREE_INT_CST_HIGH (TYPE_SIZE (type))) && align < 256) return 256; + /* x86-64 ABI requires arrays greater than 16 bytes to be aligned + to 16byte boundary. */ + if (TARGET_64BIT) + { + if (AGGREGATE_TYPE_P (type) + && TYPE_SIZE (type) + && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST + && (TREE_INT_CST_LOW (TYPE_SIZE (type)) >= 128 + || TREE_INT_CST_HIGH (TYPE_SIZE (type))) && align < 128) + return 128; + } + if (TREE_CODE (type) == ARRAY_TYPE) { if (TYPE_MODE (TREE_TYPE (type)) == DFmode && align < 64) *************** ix86_local_alignment (type, align) *** 7578,7583 **** --- 10703,10719 ---- tree type; int align; { + /* x86-64 ABI requires arrays greater than 16 bytes to be aligned + to 16byte boundary. */ + if (TARGET_64BIT) + { + if (AGGREGATE_TYPE_P (type) + && TYPE_SIZE (type) + && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST + && (TREE_INT_CST_LOW (TYPE_SIZE (type)) >= 16 + || TREE_INT_CST_HIGH (TYPE_SIZE (type))) && align < 128) + return 128; + } if (TREE_CODE (type) == ARRAY_TYPE) { if (TYPE_MODE (TREE_TYPE (type)) == DFmode && align < 64) *************** ix86_local_alignment (type, align) *** 7613,7802 **** } return align; } - #define def_builtin(NAME, TYPE, CODE) \ - builtin_function ((NAME), (TYPE), (CODE), BUILT_IN_MD, NULL_PTR) struct builtin_description { ! enum insn_code icode; ! const char * name; ! enum ix86_builtins code; ! enum rtx_code comparison; ! unsigned int flag; }; ! static struct builtin_description bdesc_comi[] = { ! { CODE_FOR_sse_comi, "__builtin_ia32_comieq", IX86_BUILTIN_COMIEQSS, EQ, 0 }, ! { CODE_FOR_sse_comi, "__builtin_ia32_comilt", IX86_BUILTIN_COMILTSS, LT, 0 }, ! { CODE_FOR_sse_comi, "__builtin_ia32_comile", IX86_BUILTIN_COMILESS, LE, 0 }, ! { CODE_FOR_sse_comi, "__builtin_ia32_comigt", IX86_BUILTIN_COMIGTSS, LT, 1 }, ! { CODE_FOR_sse_comi, "__builtin_ia32_comige", IX86_BUILTIN_COMIGESS, LE, 1 }, ! { CODE_FOR_sse_comi, "__builtin_ia32_comineq", IX86_BUILTIN_COMINEQSS, NE, 0 }, ! { CODE_FOR_sse_ucomi, "__builtin_ia32_ucomieq", IX86_BUILTIN_UCOMIEQSS, EQ, 0 }, ! { CODE_FOR_sse_ucomi, "__builtin_ia32_ucomilt", IX86_BUILTIN_UCOMILTSS, LT, 0 }, ! { CODE_FOR_sse_ucomi, "__builtin_ia32_ucomile", IX86_BUILTIN_UCOMILESS, LE, 0 }, ! { CODE_FOR_sse_ucomi, "__builtin_ia32_ucomigt", IX86_BUILTIN_UCOMIGTSS, LT, 1 }, ! { CODE_FOR_sse_ucomi, "__builtin_ia32_ucomige", IX86_BUILTIN_UCOMIGESS, LE, 1 }, ! { CODE_FOR_sse_ucomi, "__builtin_ia32_ucomineq", IX86_BUILTIN_UCOMINEQSS, NE, 0 } }; ! static struct builtin_description bdesc_2arg[] = { /* SSE */ ! { CODE_FOR_addv4sf3, "__builtin_ia32_addps", IX86_BUILTIN_ADDPS, 0, 0 }, ! { CODE_FOR_subv4sf3, "__builtin_ia32_subps", IX86_BUILTIN_SUBPS, 0, 0 }, ! { CODE_FOR_mulv4sf3, "__builtin_ia32_mulps", IX86_BUILTIN_MULPS, 0, 0 }, ! { CODE_FOR_divv4sf3, "__builtin_ia32_divps", IX86_BUILTIN_DIVPS, 0, 0 }, ! { CODE_FOR_vmaddv4sf3, "__builtin_ia32_addss", IX86_BUILTIN_ADDSS, 0, 0 }, ! { CODE_FOR_vmsubv4sf3, "__builtin_ia32_subss", IX86_BUILTIN_SUBSS, 0, 0 }, ! { CODE_FOR_vmmulv4sf3, "__builtin_ia32_mulss", IX86_BUILTIN_MULSS, 0, 0 }, ! { CODE_FOR_vmdivv4sf3, "__builtin_ia32_divss", IX86_BUILTIN_DIVSS, 0, 0 }, ! ! { CODE_FOR_maskcmpv4sf3, "__builtin_ia32_cmpeqps", IX86_BUILTIN_CMPEQPS, EQ, 0 }, ! { CODE_FOR_maskcmpv4sf3, "__builtin_ia32_cmpltps", IX86_BUILTIN_CMPLTPS, LT, 0 }, ! { CODE_FOR_maskcmpv4sf3, "__builtin_ia32_cmpleps", IX86_BUILTIN_CMPLEPS, LE, 0 }, ! { CODE_FOR_maskcmpv4sf3, "__builtin_ia32_cmpgtps", IX86_BUILTIN_CMPGTPS, LT, 1 }, ! { CODE_FOR_maskcmpv4sf3, "__builtin_ia32_cmpgeps", IX86_BUILTIN_CMPGEPS, LE, 1 }, ! { CODE_FOR_maskcmpv4sf3, "__builtin_ia32_cmpunordps", IX86_BUILTIN_CMPUNORDPS, UNORDERED, 0 }, ! { CODE_FOR_maskncmpv4sf3, "__builtin_ia32_cmpneqps", IX86_BUILTIN_CMPNEQPS, EQ, 0 }, ! { CODE_FOR_maskncmpv4sf3, "__builtin_ia32_cmpnltps", IX86_BUILTIN_CMPNLTPS, LT, 0 }, ! { CODE_FOR_maskncmpv4sf3, "__builtin_ia32_cmpnleps", IX86_BUILTIN_CMPNLEPS, LE, 0 }, ! { CODE_FOR_maskncmpv4sf3, "__builtin_ia32_cmpngtps", IX86_BUILTIN_CMPNGTPS, LT, 1 }, ! { CODE_FOR_maskncmpv4sf3, "__builtin_ia32_cmpngeps", IX86_BUILTIN_CMPNGEPS, LE, 1 }, ! { CODE_FOR_maskncmpv4sf3, "__builtin_ia32_cmpordps", IX86_BUILTIN_CMPORDPS, UNORDERED, 0 }, ! { CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpeqss", IX86_BUILTIN_CMPEQSS, EQ, 0 }, ! { CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpltss", IX86_BUILTIN_CMPLTSS, LT, 0 }, ! { CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpless", IX86_BUILTIN_CMPLESS, LE, 0 }, ! { CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpgtss", IX86_BUILTIN_CMPGTSS, LT, 1 }, ! { CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpgess", IX86_BUILTIN_CMPGESS, LE, 1 }, ! { CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpunordss", IX86_BUILTIN_CMPUNORDSS, UNORDERED, 0 }, ! { CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpneqss", IX86_BUILTIN_CMPNEQSS, EQ, 0 }, ! { CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpnltss", IX86_BUILTIN_CMPNLTSS, LT, 0 }, ! { CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpnless", IX86_BUILTIN_CMPNLESS, LE, 0 }, ! { CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpngtss", IX86_BUILTIN_CMPNGTSS, LT, 1 }, ! { CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpngess", IX86_BUILTIN_CMPNGESS, LE, 1 }, ! { CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpordss", IX86_BUILTIN_CMPORDSS, UNORDERED, 0 }, ! { CODE_FOR_sminv4sf3, "__builtin_ia32_minps", IX86_BUILTIN_MINPS, 0, 0 }, ! { CODE_FOR_smaxv4sf3, "__builtin_ia32_maxps", IX86_BUILTIN_MAXPS, 0, 0 }, ! { CODE_FOR_vmsminv4sf3, "__builtin_ia32_minss", IX86_BUILTIN_MINSS, 0, 0 }, ! { CODE_FOR_vmsmaxv4sf3, "__builtin_ia32_maxss", IX86_BUILTIN_MAXSS, 0, 0 }, ! { CODE_FOR_sse_andti3, "__builtin_ia32_andps", IX86_BUILTIN_ANDPS, 0, 0 }, ! { CODE_FOR_sse_nandti3, "__builtin_ia32_andnps", IX86_BUILTIN_ANDNPS, 0, 0 }, ! { CODE_FOR_sse_iorti3, "__builtin_ia32_orps", IX86_BUILTIN_ORPS, 0, 0 }, ! { CODE_FOR_sse_xorti3, "__builtin_ia32_xorps", IX86_BUILTIN_XORPS, 0, 0 }, ! { CODE_FOR_sse_movss, "__builtin_ia32_movss", IX86_BUILTIN_MOVSS, 0, 0 }, ! { CODE_FOR_sse_movhlps, "__builtin_ia32_movhlps", IX86_BUILTIN_MOVHLPS, 0, 0 }, ! { CODE_FOR_sse_movlhps, "__builtin_ia32_movlhps", IX86_BUILTIN_MOVLHPS, 0, 0 }, ! { CODE_FOR_sse_unpckhps, "__builtin_ia32_unpckhps", IX86_BUILTIN_UNPCKHPS, 0, 0 }, ! { CODE_FOR_sse_unpcklps, "__builtin_ia32_unpcklps", IX86_BUILTIN_UNPCKLPS, 0, 0 }, /* MMX */ ! { CODE_FOR_addv8qi3, "__builtin_ia32_paddb", IX86_BUILTIN_PADDB, 0, 0 }, ! { CODE_FOR_addv4hi3, "__builtin_ia32_paddw", IX86_BUILTIN_PADDW, 0, 0 }, ! { CODE_FOR_addv2si3, "__builtin_ia32_paddd", IX86_BUILTIN_PADDD, 0, 0 }, ! { CODE_FOR_subv8qi3, "__builtin_ia32_psubb", IX86_BUILTIN_PSUBB, 0, 0 }, ! { CODE_FOR_subv4hi3, "__builtin_ia32_psubw", IX86_BUILTIN_PSUBW, 0, 0 }, ! { CODE_FOR_subv2si3, "__builtin_ia32_psubd", IX86_BUILTIN_PSUBD, 0, 0 }, ! { CODE_FOR_ssaddv8qi3, "__builtin_ia32_paddsb", IX86_BUILTIN_PADDSB, 0, 0 }, ! { CODE_FOR_ssaddv4hi3, "__builtin_ia32_paddsw", IX86_BUILTIN_PADDSW, 0, 0 }, ! { CODE_FOR_sssubv8qi3, "__builtin_ia32_psubsb", IX86_BUILTIN_PSUBSB, 0, 0 }, ! { CODE_FOR_sssubv4hi3, "__builtin_ia32_psubsw", IX86_BUILTIN_PSUBSW, 0, 0 }, ! { CODE_FOR_usaddv8qi3, "__builtin_ia32_paddusb", IX86_BUILTIN_PADDUSB, 0, 0 }, ! { CODE_FOR_usaddv4hi3, "__builtin_ia32_paddusw", IX86_BUILTIN_PADDUSW, 0, 0 }, ! { CODE_FOR_ussubv8qi3, "__builtin_ia32_psubusb", IX86_BUILTIN_PSUBUSB, 0, 0 }, ! { CODE_FOR_ussubv4hi3, "__builtin_ia32_psubusw", IX86_BUILTIN_PSUBUSW, 0, 0 }, ! { CODE_FOR_mulv4hi3, "__builtin_ia32_pmullw", IX86_BUILTIN_PMULLW, 0, 0 }, ! { CODE_FOR_smulv4hi3_highpart, "__builtin_ia32_pmulhw", IX86_BUILTIN_PMULHW, 0, 0 }, ! { CODE_FOR_umulv4hi3_highpart, "__builtin_ia32_pmulhuw", IX86_BUILTIN_PMULHUW, 0, 0 }, ! { CODE_FOR_mmx_anddi3, "__builtin_ia32_pand", IX86_BUILTIN_PAND, 0, 0 }, ! { CODE_FOR_mmx_nanddi3, "__builtin_ia32_pandn", IX86_BUILTIN_PANDN, 0, 0 }, ! { CODE_FOR_mmx_iordi3, "__builtin_ia32_por", IX86_BUILTIN_POR, 0, 0 }, ! { CODE_FOR_mmx_xordi3, "__builtin_ia32_pxor", IX86_BUILTIN_PXOR, 0, 0 }, ! { CODE_FOR_mmx_uavgv8qi3, "__builtin_ia32_pavgb", IX86_BUILTIN_PAVGB, 0, 0 }, ! { CODE_FOR_mmx_uavgv4hi3, "__builtin_ia32_pavgw", IX86_BUILTIN_PAVGW, 0, 0 }, ! { CODE_FOR_eqv8qi3, "__builtin_ia32_pcmpeqb", IX86_BUILTIN_PCMPEQB, 0, 0 }, ! { CODE_FOR_eqv4hi3, "__builtin_ia32_pcmpeqw", IX86_BUILTIN_PCMPEQW, 0, 0 }, ! { CODE_FOR_eqv2si3, "__builtin_ia32_pcmpeqd", IX86_BUILTIN_PCMPEQD, 0, 0 }, ! { CODE_FOR_gtv8qi3, "__builtin_ia32_pcmpgtb", IX86_BUILTIN_PCMPGTB, 0, 0 }, ! { CODE_FOR_gtv4hi3, "__builtin_ia32_pcmpgtw", IX86_BUILTIN_PCMPGTW, 0, 0 }, ! { CODE_FOR_gtv2si3, "__builtin_ia32_pcmpgtd", IX86_BUILTIN_PCMPGTD, 0, 0 }, ! { CODE_FOR_umaxv8qi3, "__builtin_ia32_pmaxub", IX86_BUILTIN_PMAXUB, 0, 0 }, ! { CODE_FOR_smaxv4hi3, "__builtin_ia32_pmaxsw", IX86_BUILTIN_PMAXSW, 0, 0 }, ! { CODE_FOR_uminv8qi3, "__builtin_ia32_pminub", IX86_BUILTIN_PMINUB, 0, 0 }, ! { CODE_FOR_sminv4hi3, "__builtin_ia32_pminsw", IX86_BUILTIN_PMINSW, 0, 0 }, ! { CODE_FOR_mmx_punpckhbw, "__builtin_ia32_punpckhbw", IX86_BUILTIN_PUNPCKHBW, 0, 0 }, ! { CODE_FOR_mmx_punpckhwd, "__builtin_ia32_punpckhwd", IX86_BUILTIN_PUNPCKHWD, 0, 0 }, ! { CODE_FOR_mmx_punpckhdq, "__builtin_ia32_punpckhdq", IX86_BUILTIN_PUNPCKHDQ, 0, 0 }, ! { CODE_FOR_mmx_punpcklbw, "__builtin_ia32_punpcklbw", IX86_BUILTIN_PUNPCKLBW, 0, 0 }, ! { CODE_FOR_mmx_punpcklwd, "__builtin_ia32_punpcklwd", IX86_BUILTIN_PUNPCKLWD, 0, 0 }, ! { CODE_FOR_mmx_punpckldq, "__builtin_ia32_punpckldq", IX86_BUILTIN_PUNPCKLDQ, 0, 0 }, /* Special. */ ! { CODE_FOR_mmx_packsswb, 0, IX86_BUILTIN_PACKSSWB, 0, 0 }, ! { CODE_FOR_mmx_packssdw, 0, IX86_BUILTIN_PACKSSDW, 0, 0 }, ! { CODE_FOR_mmx_packuswb, 0, IX86_BUILTIN_PACKUSWB, 0, 0 }, ! { CODE_FOR_cvtpi2ps, 0, IX86_BUILTIN_CVTPI2PS, 0, 0 }, ! { CODE_FOR_cvtsi2ss, 0, IX86_BUILTIN_CVTSI2SS, 0, 0 }, ! { CODE_FOR_ashlv4hi3, 0, IX86_BUILTIN_PSLLW, 0, 0 }, ! { CODE_FOR_ashlv4hi3, 0, IX86_BUILTIN_PSLLWI, 0, 0 }, ! { CODE_FOR_ashlv2si3, 0, IX86_BUILTIN_PSLLD, 0, 0 }, ! { CODE_FOR_ashlv2si3, 0, IX86_BUILTIN_PSLLDI, 0, 0 }, ! { CODE_FOR_mmx_ashldi3, 0, IX86_BUILTIN_PSLLQ, 0, 0 }, ! { CODE_FOR_mmx_ashldi3, 0, IX86_BUILTIN_PSLLQI, 0, 0 }, ! { CODE_FOR_lshrv4hi3, 0, IX86_BUILTIN_PSRLW, 0, 0 }, ! { CODE_FOR_lshrv4hi3, 0, IX86_BUILTIN_PSRLWI, 0, 0 }, ! { CODE_FOR_lshrv2si3, 0, IX86_BUILTIN_PSRLD, 0, 0 }, ! { CODE_FOR_lshrv2si3, 0, IX86_BUILTIN_PSRLDI, 0, 0 }, ! { CODE_FOR_mmx_lshrdi3, 0, IX86_BUILTIN_PSRLQ, 0, 0 }, ! { CODE_FOR_mmx_lshrdi3, 0, IX86_BUILTIN_PSRLQI, 0, 0 }, ! { CODE_FOR_ashrv4hi3, 0, IX86_BUILTIN_PSRAW, 0, 0 }, ! { CODE_FOR_ashrv4hi3, 0, IX86_BUILTIN_PSRAWI, 0, 0 }, ! { CODE_FOR_ashrv2si3, 0, IX86_BUILTIN_PSRAD, 0, 0 }, ! { CODE_FOR_ashrv2si3, 0, IX86_BUILTIN_PSRADI, 0, 0 }, ! { CODE_FOR_mmx_psadbw, 0, IX86_BUILTIN_PSADBW, 0, 0 }, ! { CODE_FOR_mmx_pmaddwd, 0, IX86_BUILTIN_PMADDWD, 0, 0 } }; ! static struct builtin_description bdesc_1arg[] = { ! { CODE_FOR_mmx_pmovmskb, 0, IX86_BUILTIN_PMOVMSKB, 0, 0 }, ! { CODE_FOR_sse_movmskps, 0, IX86_BUILTIN_MOVMSKPS, 0, 0 }, ! { CODE_FOR_sqrtv4sf2, 0, IX86_BUILTIN_SQRTPS, 0, 0 }, ! { CODE_FOR_rsqrtv4sf2, 0, IX86_BUILTIN_RSQRTPS, 0, 0 }, ! { CODE_FOR_rcpv4sf2, 0, IX86_BUILTIN_RCPPS, 0, 0 }, ! { CODE_FOR_cvtps2pi, 0, IX86_BUILTIN_CVTPS2PI, 0, 0 }, ! { CODE_FOR_cvtss2si, 0, IX86_BUILTIN_CVTSS2SI, 0, 0 }, ! { CODE_FOR_cvttps2pi, 0, IX86_BUILTIN_CVTTPS2PI, 0, 0 }, ! { CODE_FOR_cvttss2si, 0, IX86_BUILTIN_CVTTSS2SI, 0, 0 } }; - /* Expand all the target specific builtins. This is not called if TARGET_MMX - is zero. Otherwise, if TARGET_SSE is not set, only expand the MMX - builtins. */ void ix86_init_builtins () { ! struct builtin_description * d; size_t i; tree endlink = void_list_node; --- 10749,11005 ---- } return align; } + + /* Emit RTL insns to initialize the variable parts of a trampoline. + FNADDR is an RTX for the address of the function's pure code. + CXT is an RTX for the static chain value for the function. */ + void + x86_initialize_trampoline (tramp, fnaddr, cxt) + rtx tramp, fnaddr, cxt; + { + if (!TARGET_64BIT) + { + /* Compute offset from the end of the jmp to the target function. */ + rtx disp = expand_binop (SImode, sub_optab, fnaddr, + plus_constant (tramp, 10), + NULL_RTX, 1, OPTAB_DIRECT); + emit_move_insn (gen_rtx_MEM (QImode, tramp), + GEN_INT (trunc_int_for_mode (0xb9, QImode))); + emit_move_insn (gen_rtx_MEM (SImode, plus_constant (tramp, 1)), cxt); + emit_move_insn (gen_rtx_MEM (QImode, plus_constant (tramp, 5)), + GEN_INT (trunc_int_for_mode (0xe9, QImode))); + emit_move_insn (gen_rtx_MEM (SImode, plus_constant (tramp, 6)), disp); + } + else + { + int offset = 0; + /* Try to load address using shorter movl instead of movabs. + We may want to support movq for kernel mode, but kernel does not use + trampolines at the moment. */ + if (x86_64_zero_extended_value (fnaddr)) + { + fnaddr = copy_to_mode_reg (DImode, fnaddr); + emit_move_insn (gen_rtx_MEM (HImode, plus_constant (tramp, offset)), + GEN_INT (trunc_int_for_mode (0xbb41, HImode))); + emit_move_insn (gen_rtx_MEM (SImode, plus_constant (tramp, offset + 2)), + gen_lowpart (SImode, fnaddr)); + offset += 6; + } + else + { + emit_move_insn (gen_rtx_MEM (HImode, plus_constant (tramp, offset)), + GEN_INT (trunc_int_for_mode (0xbb49, HImode))); + emit_move_insn (gen_rtx_MEM (DImode, plus_constant (tramp, offset + 2)), + fnaddr); + offset += 10; + } + /* Load static chain using movabs to r10. */ + emit_move_insn (gen_rtx_MEM (HImode, plus_constant (tramp, offset)), + GEN_INT (trunc_int_for_mode (0xba49, HImode))); + emit_move_insn (gen_rtx_MEM (DImode, plus_constant (tramp, offset + 2)), + cxt); + offset += 10; + /* Jump to the r11 */ + emit_move_insn (gen_rtx_MEM (HImode, plus_constant (tramp, offset)), + GEN_INT (trunc_int_for_mode (0xff49, HImode))); + emit_move_insn (gen_rtx_MEM (QImode, plus_constant (tramp, offset+2)), + GEN_INT (trunc_int_for_mode (0xe3, QImode))); + offset += 3; + if (offset > TRAMPOLINE_SIZE) + abort (); + } + } + + #define def_builtin(MASK, NAME, TYPE, CODE) \ + do { \ + if ((MASK) & target_flags) \ + builtin_function ((NAME), (TYPE), (CODE), BUILT_IN_MD, NULL); \ + } while (0) struct builtin_description { ! const unsigned int mask; ! const enum insn_code icode; ! const char *const name; ! const enum ix86_builtins code; ! const enum rtx_code comparison; ! const unsigned int flag; }; ! static const struct builtin_description bdesc_comi[] = { ! { MASK_SSE, CODE_FOR_sse_comi, "__builtin_ia32_comieq", IX86_BUILTIN_COMIEQSS, EQ, 0 }, ! { MASK_SSE, CODE_FOR_sse_comi, "__builtin_ia32_comilt", IX86_BUILTIN_COMILTSS, LT, 0 }, ! { MASK_SSE, CODE_FOR_sse_comi, "__builtin_ia32_comile", IX86_BUILTIN_COMILESS, LE, 0 }, ! { MASK_SSE, CODE_FOR_sse_comi, "__builtin_ia32_comigt", IX86_BUILTIN_COMIGTSS, LT, 1 }, ! { MASK_SSE, CODE_FOR_sse_comi, "__builtin_ia32_comige", IX86_BUILTIN_COMIGESS, LE, 1 }, ! { MASK_SSE, CODE_FOR_sse_comi, "__builtin_ia32_comineq", IX86_BUILTIN_COMINEQSS, NE, 0 }, ! { MASK_SSE, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomieq", IX86_BUILTIN_UCOMIEQSS, EQ, 0 }, ! { MASK_SSE, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomilt", IX86_BUILTIN_UCOMILTSS, LT, 0 }, ! { MASK_SSE, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomile", IX86_BUILTIN_UCOMILESS, LE, 0 }, ! { MASK_SSE, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomigt", IX86_BUILTIN_UCOMIGTSS, LT, 1 }, ! { MASK_SSE, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomige", IX86_BUILTIN_UCOMIGESS, LE, 1 }, ! { MASK_SSE, CODE_FOR_sse_ucomi, "__builtin_ia32_ucomineq", IX86_BUILTIN_UCOMINEQSS, NE, 0 } }; ! static const struct builtin_description bdesc_2arg[] = { /* SSE */ ! { MASK_SSE, CODE_FOR_addv4sf3, "__builtin_ia32_addps", IX86_BUILTIN_ADDPS, 0, 0 }, ! { MASK_SSE, CODE_FOR_subv4sf3, "__builtin_ia32_subps", IX86_BUILTIN_SUBPS, 0, 0 }, ! { MASK_SSE, CODE_FOR_mulv4sf3, "__builtin_ia32_mulps", IX86_BUILTIN_MULPS, 0, 0 }, ! { MASK_SSE, CODE_FOR_divv4sf3, "__builtin_ia32_divps", IX86_BUILTIN_DIVPS, 0, 0 }, ! { MASK_SSE, CODE_FOR_vmaddv4sf3, "__builtin_ia32_addss", IX86_BUILTIN_ADDSS, 0, 0 }, ! { MASK_SSE, CODE_FOR_vmsubv4sf3, "__builtin_ia32_subss", IX86_BUILTIN_SUBSS, 0, 0 }, ! { MASK_SSE, CODE_FOR_vmmulv4sf3, "__builtin_ia32_mulss", IX86_BUILTIN_MULSS, 0, 0 }, ! { MASK_SSE, CODE_FOR_vmdivv4sf3, "__builtin_ia32_divss", IX86_BUILTIN_DIVSS, 0, 0 }, ! { MASK_SSE, CODE_FOR_maskcmpv4sf3, "__builtin_ia32_cmpeqps", IX86_BUILTIN_CMPEQPS, EQ, 0 }, ! { MASK_SSE, CODE_FOR_maskcmpv4sf3, "__builtin_ia32_cmpltps", IX86_BUILTIN_CMPLTPS, LT, 0 }, ! { MASK_SSE, CODE_FOR_maskcmpv4sf3, "__builtin_ia32_cmpleps", IX86_BUILTIN_CMPLEPS, LE, 0 }, ! { MASK_SSE, CODE_FOR_maskcmpv4sf3, "__builtin_ia32_cmpgtps", IX86_BUILTIN_CMPGTPS, LT, 1 }, ! { MASK_SSE, CODE_FOR_maskcmpv4sf3, "__builtin_ia32_cmpgeps", IX86_BUILTIN_CMPGEPS, LE, 1 }, ! { MASK_SSE, CODE_FOR_maskcmpv4sf3, "__builtin_ia32_cmpunordps", IX86_BUILTIN_CMPUNORDPS, UNORDERED, 0 }, ! { MASK_SSE, CODE_FOR_maskncmpv4sf3, "__builtin_ia32_cmpneqps", IX86_BUILTIN_CMPNEQPS, EQ, 0 }, ! { MASK_SSE, CODE_FOR_maskncmpv4sf3, "__builtin_ia32_cmpnltps", IX86_BUILTIN_CMPNLTPS, LT, 0 }, ! { MASK_SSE, CODE_FOR_maskncmpv4sf3, "__builtin_ia32_cmpnleps", IX86_BUILTIN_CMPNLEPS, LE, 0 }, ! { MASK_SSE, CODE_FOR_maskncmpv4sf3, "__builtin_ia32_cmpngtps", IX86_BUILTIN_CMPNGTPS, LT, 1 }, ! { MASK_SSE, CODE_FOR_maskncmpv4sf3, "__builtin_ia32_cmpngeps", IX86_BUILTIN_CMPNGEPS, LE, 1 }, ! { MASK_SSE, CODE_FOR_maskncmpv4sf3, "__builtin_ia32_cmpordps", IX86_BUILTIN_CMPORDPS, UNORDERED, 0 }, ! { MASK_SSE, CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpeqss", IX86_BUILTIN_CMPEQSS, EQ, 0 }, ! { MASK_SSE, CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpltss", IX86_BUILTIN_CMPLTSS, LT, 0 }, ! { MASK_SSE, CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpless", IX86_BUILTIN_CMPLESS, LE, 0 }, ! { MASK_SSE, CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpgtss", IX86_BUILTIN_CMPGTSS, LT, 1 }, ! { MASK_SSE, CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpgess", IX86_BUILTIN_CMPGESS, LE, 1 }, ! { MASK_SSE, CODE_FOR_vmmaskcmpv4sf3, "__builtin_ia32_cmpunordss", IX86_BUILTIN_CMPUNORDSS, UNORDERED, 0 }, ! { MASK_SSE, CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpneqss", IX86_BUILTIN_CMPNEQSS, EQ, 0 }, ! { MASK_SSE, CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpnltss", IX86_BUILTIN_CMPNLTSS, LT, 0 }, ! { MASK_SSE, CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpnless", IX86_BUILTIN_CMPNLESS, LE, 0 }, ! { MASK_SSE, CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpngtss", IX86_BUILTIN_CMPNGTSS, LT, 1 }, ! { MASK_SSE, CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpngess", IX86_BUILTIN_CMPNGESS, LE, 1 }, ! { MASK_SSE, CODE_FOR_vmmaskncmpv4sf3, "__builtin_ia32_cmpordss", IX86_BUILTIN_CMPORDSS, UNORDERED, 0 }, ! { MASK_SSE, CODE_FOR_sminv4sf3, "__builtin_ia32_minps", IX86_BUILTIN_MINPS, 0, 0 }, ! { MASK_SSE, CODE_FOR_smaxv4sf3, "__builtin_ia32_maxps", IX86_BUILTIN_MAXPS, 0, 0 }, ! { MASK_SSE, CODE_FOR_vmsminv4sf3, "__builtin_ia32_minss", IX86_BUILTIN_MINSS, 0, 0 }, ! { MASK_SSE, CODE_FOR_vmsmaxv4sf3, "__builtin_ia32_maxss", IX86_BUILTIN_MAXSS, 0, 0 }, ! { MASK_SSE, CODE_FOR_sse_movss, "__builtin_ia32_movss", IX86_BUILTIN_MOVSS, 0, 0 }, ! { MASK_SSE, CODE_FOR_sse_movhlps, "__builtin_ia32_movhlps", IX86_BUILTIN_MOVHLPS, 0, 0 }, ! { MASK_SSE, CODE_FOR_sse_movlhps, "__builtin_ia32_movlhps", IX86_BUILTIN_MOVLHPS, 0, 0 }, ! { MASK_SSE, CODE_FOR_sse_unpckhps, "__builtin_ia32_unpckhps", IX86_BUILTIN_UNPCKHPS, 0, 0 }, ! { MASK_SSE, CODE_FOR_sse_unpcklps, "__builtin_ia32_unpcklps", IX86_BUILTIN_UNPCKLPS, 0, 0 }, /* MMX */ ! { MASK_MMX, CODE_FOR_addv8qi3, "__builtin_ia32_paddb", IX86_BUILTIN_PADDB, 0, 0 }, ! { MASK_MMX, CODE_FOR_addv4hi3, "__builtin_ia32_paddw", IX86_BUILTIN_PADDW, 0, 0 }, ! { MASK_MMX, CODE_FOR_addv2si3, "__builtin_ia32_paddd", IX86_BUILTIN_PADDD, 0, 0 }, ! { MASK_MMX, CODE_FOR_subv8qi3, "__builtin_ia32_psubb", IX86_BUILTIN_PSUBB, 0, 0 }, ! { MASK_MMX, CODE_FOR_subv4hi3, "__builtin_ia32_psubw", IX86_BUILTIN_PSUBW, 0, 0 }, ! { MASK_MMX, CODE_FOR_subv2si3, "__builtin_ia32_psubd", IX86_BUILTIN_PSUBD, 0, 0 }, ! { MASK_MMX, CODE_FOR_ssaddv8qi3, "__builtin_ia32_paddsb", IX86_BUILTIN_PADDSB, 0, 0 }, ! { MASK_MMX, CODE_FOR_ssaddv4hi3, "__builtin_ia32_paddsw", IX86_BUILTIN_PADDSW, 0, 0 }, ! { MASK_MMX, CODE_FOR_sssubv8qi3, "__builtin_ia32_psubsb", IX86_BUILTIN_PSUBSB, 0, 0 }, ! { MASK_MMX, CODE_FOR_sssubv4hi3, "__builtin_ia32_psubsw", IX86_BUILTIN_PSUBSW, 0, 0 }, ! { MASK_MMX, CODE_FOR_usaddv8qi3, "__builtin_ia32_paddusb", IX86_BUILTIN_PADDUSB, 0, 0 }, ! { MASK_MMX, CODE_FOR_usaddv4hi3, "__builtin_ia32_paddusw", IX86_BUILTIN_PADDUSW, 0, 0 }, ! { MASK_MMX, CODE_FOR_ussubv8qi3, "__builtin_ia32_psubusb", IX86_BUILTIN_PSUBUSB, 0, 0 }, ! { MASK_MMX, CODE_FOR_ussubv4hi3, "__builtin_ia32_psubusw", IX86_BUILTIN_PSUBUSW, 0, 0 }, ! { MASK_MMX, CODE_FOR_mulv4hi3, "__builtin_ia32_pmullw", IX86_BUILTIN_PMULLW, 0, 0 }, ! { MASK_MMX, CODE_FOR_smulv4hi3_highpart, "__builtin_ia32_pmulhw", IX86_BUILTIN_PMULHW, 0, 0 }, ! { MASK_SSE | MASK_3DNOW_A, CODE_FOR_umulv4hi3_highpart, "__builtin_ia32_pmulhuw", IX86_BUILTIN_PMULHUW, 0, 0 }, ! { MASK_MMX, CODE_FOR_mmx_anddi3, "__builtin_ia32_pand", IX86_BUILTIN_PAND, 0, 0 }, ! { MASK_MMX, CODE_FOR_mmx_nanddi3, "__builtin_ia32_pandn", IX86_BUILTIN_PANDN, 0, 0 }, ! { MASK_MMX, CODE_FOR_mmx_iordi3, "__builtin_ia32_por", IX86_BUILTIN_POR, 0, 0 }, ! { MASK_MMX, CODE_FOR_mmx_xordi3, "__builtin_ia32_pxor", IX86_BUILTIN_PXOR, 0, 0 }, ! { MASK_SSE | MASK_3DNOW_A, CODE_FOR_mmx_uavgv8qi3, "__builtin_ia32_pavgb", IX86_BUILTIN_PAVGB, 0, 0 }, ! { MASK_SSE | MASK_3DNOW_A, CODE_FOR_mmx_uavgv4hi3, "__builtin_ia32_pavgw", IX86_BUILTIN_PAVGW, 0, 0 }, ! { MASK_MMX, CODE_FOR_eqv8qi3, "__builtin_ia32_pcmpeqb", IX86_BUILTIN_PCMPEQB, 0, 0 }, ! { MASK_MMX, CODE_FOR_eqv4hi3, "__builtin_ia32_pcmpeqw", IX86_BUILTIN_PCMPEQW, 0, 0 }, ! { MASK_MMX, CODE_FOR_eqv2si3, "__builtin_ia32_pcmpeqd", IX86_BUILTIN_PCMPEQD, 0, 0 }, ! { MASK_MMX, CODE_FOR_gtv8qi3, "__builtin_ia32_pcmpgtb", IX86_BUILTIN_PCMPGTB, 0, 0 }, ! { MASK_MMX, CODE_FOR_gtv4hi3, "__builtin_ia32_pcmpgtw", IX86_BUILTIN_PCMPGTW, 0, 0 }, ! { MASK_MMX, CODE_FOR_gtv2si3, "__builtin_ia32_pcmpgtd", IX86_BUILTIN_PCMPGTD, 0, 0 }, ! { MASK_SSE | MASK_3DNOW_A, CODE_FOR_umaxv8qi3, "__builtin_ia32_pmaxub", IX86_BUILTIN_PMAXUB, 0, 0 }, ! { MASK_SSE | MASK_3DNOW_A, CODE_FOR_smaxv4hi3, "__builtin_ia32_pmaxsw", IX86_BUILTIN_PMAXSW, 0, 0 }, ! { MASK_SSE | MASK_3DNOW_A, CODE_FOR_uminv8qi3, "__builtin_ia32_pminub", IX86_BUILTIN_PMINUB, 0, 0 }, ! { MASK_SSE | MASK_3DNOW_A, CODE_FOR_sminv4hi3, "__builtin_ia32_pminsw", IX86_BUILTIN_PMINSW, 0, 0 }, ! { MASK_MMX, CODE_FOR_mmx_punpckhbw, "__builtin_ia32_punpckhbw", IX86_BUILTIN_PUNPCKHBW, 0, 0 }, ! { MASK_MMX, CODE_FOR_mmx_punpckhwd, "__builtin_ia32_punpckhwd", IX86_BUILTIN_PUNPCKHWD, 0, 0 }, ! { MASK_MMX, CODE_FOR_mmx_punpckhdq, "__builtin_ia32_punpckhdq", IX86_BUILTIN_PUNPCKHDQ, 0, 0 }, ! { MASK_MMX, CODE_FOR_mmx_punpcklbw, "__builtin_ia32_punpcklbw", IX86_BUILTIN_PUNPCKLBW, 0, 0 }, ! { MASK_MMX, CODE_FOR_mmx_punpcklwd, "__builtin_ia32_punpcklwd", IX86_BUILTIN_PUNPCKLWD, 0, 0 }, ! { MASK_MMX, CODE_FOR_mmx_punpckldq, "__builtin_ia32_punpckldq", IX86_BUILTIN_PUNPCKLDQ, 0, 0 }, /* Special. */ ! { MASK_MMX, CODE_FOR_mmx_packsswb, 0, IX86_BUILTIN_PACKSSWB, 0, 0 }, ! { MASK_MMX, CODE_FOR_mmx_packssdw, 0, IX86_BUILTIN_PACKSSDW, 0, 0 }, ! { MASK_MMX, CODE_FOR_mmx_packuswb, 0, IX86_BUILTIN_PACKUSWB, 0, 0 }, ! { MASK_SSE, CODE_FOR_cvtpi2ps, 0, IX86_BUILTIN_CVTPI2PS, 0, 0 }, ! { MASK_SSE, CODE_FOR_cvtsi2ss, 0, IX86_BUILTIN_CVTSI2SS, 0, 0 }, ! { MASK_MMX, CODE_FOR_ashlv4hi3, 0, IX86_BUILTIN_PSLLW, 0, 0 }, ! { MASK_MMX, CODE_FOR_ashlv4hi3, 0, IX86_BUILTIN_PSLLWI, 0, 0 }, ! { MASK_MMX, CODE_FOR_ashlv2si3, 0, IX86_BUILTIN_PSLLD, 0, 0 }, ! { MASK_MMX, CODE_FOR_ashlv2si3, 0, IX86_BUILTIN_PSLLDI, 0, 0 }, ! { MASK_MMX, CODE_FOR_mmx_ashldi3, 0, IX86_BUILTIN_PSLLQ, 0, 0 }, ! { MASK_MMX, CODE_FOR_mmx_ashldi3, 0, IX86_BUILTIN_PSLLQI, 0, 0 }, ! { MASK_MMX, CODE_FOR_lshrv4hi3, 0, IX86_BUILTIN_PSRLW, 0, 0 }, ! { MASK_MMX, CODE_FOR_lshrv4hi3, 0, IX86_BUILTIN_PSRLWI, 0, 0 }, ! { MASK_MMX, CODE_FOR_lshrv2si3, 0, IX86_BUILTIN_PSRLD, 0, 0 }, ! { MASK_MMX, CODE_FOR_lshrv2si3, 0, IX86_BUILTIN_PSRLDI, 0, 0 }, ! { MASK_MMX, CODE_FOR_mmx_lshrdi3, 0, IX86_BUILTIN_PSRLQ, 0, 0 }, ! { MASK_MMX, CODE_FOR_mmx_lshrdi3, 0, IX86_BUILTIN_PSRLQI, 0, 0 }, ! { MASK_MMX, CODE_FOR_ashrv4hi3, 0, IX86_BUILTIN_PSRAW, 0, 0 }, ! { MASK_MMX, CODE_FOR_ashrv4hi3, 0, IX86_BUILTIN_PSRAWI, 0, 0 }, ! { MASK_MMX, CODE_FOR_ashrv2si3, 0, IX86_BUILTIN_PSRAD, 0, 0 }, ! { MASK_MMX, CODE_FOR_ashrv2si3, 0, IX86_BUILTIN_PSRADI, 0, 0 }, ! { MASK_SSE | MASK_3DNOW_A, CODE_FOR_mmx_psadbw, 0, IX86_BUILTIN_PSADBW, 0, 0 }, ! { MASK_MMX, CODE_FOR_mmx_pmaddwd, 0, IX86_BUILTIN_PMADDWD, 0, 0 } }; ! static const struct builtin_description bdesc_1arg[] = { ! { MASK_SSE | MASK_3DNOW_A, CODE_FOR_mmx_pmovmskb, 0, IX86_BUILTIN_PMOVMSKB, 0, 0 }, ! { MASK_SSE, CODE_FOR_sse_movmskps, 0, IX86_BUILTIN_MOVMSKPS, 0, 0 }, ! { MASK_SSE, CODE_FOR_sqrtv4sf2, 0, IX86_BUILTIN_SQRTPS, 0, 0 }, ! { MASK_SSE, CODE_FOR_rsqrtv4sf2, 0, IX86_BUILTIN_RSQRTPS, 0, 0 }, ! { MASK_SSE, CODE_FOR_rcpv4sf2, 0, IX86_BUILTIN_RCPPS, 0, 0 }, ! { MASK_SSE, CODE_FOR_cvtps2pi, 0, IX86_BUILTIN_CVTPS2PI, 0, 0 }, ! { MASK_SSE, CODE_FOR_cvtss2si, 0, IX86_BUILTIN_CVTSS2SI, 0, 0 }, ! { MASK_SSE, CODE_FOR_cvttps2pi, 0, IX86_BUILTIN_CVTTPS2PI, 0, 0 }, ! { MASK_SSE, CODE_FOR_cvttss2si, 0, IX86_BUILTIN_CVTTSS2SI, 0, 0 } }; void ix86_init_builtins () { ! if (TARGET_MMX) ! ix86_init_mmx_sse_builtins (); ! } ! ! /* Set up all the MMX/SSE builtins. This is not called if TARGET_MMX ! is zero. Otherwise, if TARGET_SSE is not set, only expand the MMX ! builtins. */ ! static void ! ix86_init_mmx_sse_builtins () ! { ! const struct builtin_description * d; size_t i; tree endlink = void_list_node; *************** ix86_init_builtins () *** 7819,7830 **** V4SF_type_node, endlink))); /* MMX/SSE/integer conversions. */ - tree int_ftype_v4sf_int - = build_function_type (integer_type_node, - tree_cons (NULL_TREE, V4SF_type_node, - tree_cons (NULL_TREE, - integer_type_node, - endlink))); tree int_ftype_v4sf = build_function_type (integer_type_node, tree_cons (NULL_TREE, V4SF_type_node, --- 11022,11027 ---- *************** ix86_init_builtins () *** 7833,7848 **** = build_function_type (integer_type_node, tree_cons (NULL_TREE, V8QI_type_node, endlink)); - tree int_ftype_v2si - = build_function_type (integer_type_node, - tree_cons (NULL_TREE, V2SI_type_node, - endlink)); - tree v2si_ftype_int - = build_function_type (V2SI_type_node, - tree_cons (NULL_TREE, integer_type_node, - endlink)); tree v4sf_ftype_v4sf_int ! = build_function_type (integer_type_node, tree_cons (NULL_TREE, V4SF_type_node, tree_cons (NULL_TREE, integer_type_node, endlink))); --- 11030,11037 ---- = build_function_type (integer_type_node, tree_cons (NULL_TREE, V8QI_type_node, endlink)); tree v4sf_ftype_v4sf_int ! = build_function_type (V4SF_type_node, tree_cons (NULL_TREE, V4SF_type_node, tree_cons (NULL_TREE, integer_type_node, endlink))); *************** ix86_init_builtins () *** 7896,7912 **** tree_cons (NULL_TREE, V4HI_type_node, tree_cons (NULL_TREE, integer_type_node, endlink))); - tree di_ftype_di_int - = build_function_type (long_long_unsigned_type_node, - tree_cons (NULL_TREE, long_long_unsigned_type_node, - tree_cons (NULL_TREE, integer_type_node, - endlink))); - tree v8qi_ftype_v8qi_di - = build_function_type (V8QI_type_node, - tree_cons (NULL_TREE, V8QI_type_node, - tree_cons (NULL_TREE, - long_long_integer_type_node, - endlink))); tree v4hi_ftype_v4hi_di = build_function_type (V4HI_type_node, tree_cons (NULL_TREE, V4HI_type_node, --- 11085,11090 ---- *************** ix86_init_builtins () *** 7921,7931 **** endlink))); tree void_ftype_void = build_function_type (void_type_node, endlink); - tree void_ftype_pchar_int - = build_function_type (void_type_node, - tree_cons (NULL_TREE, pchar_type_node, - tree_cons (NULL_TREE, integer_type_node, - endlink))); tree void_ftype_unsigned = build_function_type (void_type_node, tree_cons (NULL_TREE, unsigned_type_node, --- 11099,11104 ---- *************** ix86_init_builtins () *** 7934,7941 **** = build_function_type (unsigned_type_node, endlink); tree di_ftype_void = build_function_type (long_long_unsigned_type_node, endlink); ! tree ti_ftype_void ! = build_function_type (intTI_type_node, endlink); tree v2si_ftype_v4sf = build_function_type (V2SI_type_node, tree_cons (NULL_TREE, V4SF_type_node, --- 11107,11114 ---- = build_function_type (unsigned_type_node, endlink); tree di_ftype_void = build_function_type (long_long_unsigned_type_node, endlink); ! tree v4sf_ftype_void ! = build_function_type (V4SF_type_node, endlink); tree v2si_ftype_v4sf = build_function_type (V2SI_type_node, tree_cons (NULL_TREE, V4SF_type_node, *************** ix86_init_builtins () *** 7952,7980 **** = build_function_type (V4SF_type_node, tree_cons (NULL_TREE, pfloat_type_node, endlink)); - tree v4sf_ftype_float - = build_function_type (V4SF_type_node, - tree_cons (NULL_TREE, float_type_node, - endlink)); - tree v4sf_ftype_float_float_float_float - = build_function_type (V4SF_type_node, - tree_cons (NULL_TREE, float_type_node, - tree_cons (NULL_TREE, float_type_node, - tree_cons (NULL_TREE, - float_type_node, - tree_cons (NULL_TREE, - float_type_node, - endlink))))); /* @@@ the type is bogus */ tree v4sf_ftype_v4sf_pv2si = build_function_type (V4SF_type_node, tree_cons (NULL_TREE, V4SF_type_node, tree_cons (NULL_TREE, pv2si_type_node, endlink))); ! tree v4sf_ftype_pv2si_v4sf ! = build_function_type (V4SF_type_node, ! tree_cons (NULL_TREE, V4SF_type_node, ! tree_cons (NULL_TREE, pv2si_type_node, endlink))); tree void_ftype_pfloat_v4sf = build_function_type (void_type_node, --- 11125,11140 ---- = build_function_type (V4SF_type_node, tree_cons (NULL_TREE, pfloat_type_node, endlink)); /* @@@ the type is bogus */ tree v4sf_ftype_v4sf_pv2si = build_function_type (V4SF_type_node, tree_cons (NULL_TREE, V4SF_type_node, tree_cons (NULL_TREE, pv2si_type_node, endlink))); ! tree void_ftype_pv2si_v4sf ! = build_function_type (void_type_node, ! tree_cons (NULL_TREE, pv2si_type_node, ! tree_cons (NULL_TREE, V4SF_type_node, endlink))); tree void_ftype_pfloat_v4sf = build_function_type (void_type_node, *************** ix86_init_builtins () *** 8014,8024 **** tree_cons (NULL_TREE, V2SI_type_node, tree_cons (NULL_TREE, V2SI_type_node, endlink))); - tree ti_ftype_ti_ti - = build_function_type (intTI_type_node, - tree_cons (NULL_TREE, intTI_type_node, - tree_cons (NULL_TREE, intTI_type_node, - endlink))); tree di_ftype_di_di = build_function_type (long_long_unsigned_type_node, tree_cons (NULL_TREE, long_long_unsigned_type_node, --- 11174,11179 ---- *************** ix86_init_builtins () *** 8026,8031 **** --- 11181,11215 ---- long_long_unsigned_type_node, endlink))); + tree v2si_ftype_v2sf + = build_function_type (V2SI_type_node, + tree_cons (NULL_TREE, V2SF_type_node, + endlink)); + tree v2sf_ftype_v2si + = build_function_type (V2SF_type_node, + tree_cons (NULL_TREE, V2SI_type_node, + endlink)); + tree v2si_ftype_v2si + = build_function_type (V2SI_type_node, + tree_cons (NULL_TREE, V2SI_type_node, + endlink)); + tree v2sf_ftype_v2sf + = build_function_type (V2SF_type_node, + tree_cons (NULL_TREE, V2SF_type_node, + endlink)); + tree v2sf_ftype_v2sf_v2sf + = build_function_type (V2SF_type_node, + tree_cons (NULL_TREE, V2SF_type_node, + tree_cons (NULL_TREE, + V2SF_type_node, + endlink))); + tree v2si_ftype_v2sf_v2sf + = build_function_type (V2SI_type_node, + tree_cons (NULL_TREE, V2SF_type_node, + tree_cons (NULL_TREE, + V2SF_type_node, + endlink))); + /* Add all builtins that are more or less simple operations on two operands. */ for (i = 0, d = bdesc_2arg; i < sizeof (bdesc_2arg) / sizeof *d; i++, d++) *************** ix86_init_builtins () *** 8039,8047 **** continue; mode = insn_data[d->icode].operand[1].mode; - if (! TARGET_SSE && ! VALID_MMX_REG_MODE (mode)) - continue; - switch (mode) { case V4SFmode: --- 11223,11228 ---- *************** ix86_init_builtins () *** 8056,8064 **** case V2SImode: type = v2si_ftype_v2si_v2si; break; - case TImode: - type = ti_ftype_ti_ti; - break; case DImode: type = di_ftype_di_di; break; --- 11237,11242 ---- *************** ix86_init_builtins () *** 8074,8166 **** || d->icode == CODE_FOR_vmmaskncmpv4sf3) type = v4si_ftype_v4sf_v4sf; ! def_builtin (d->name, type, d->code); } /* Add the remaining MMX insns with somewhat more complicated types. */ ! def_builtin ("__builtin_ia32_m_from_int", v2si_ftype_int, IX86_BUILTIN_M_FROM_INT); ! def_builtin ("__builtin_ia32_m_to_int", int_ftype_v2si, IX86_BUILTIN_M_TO_INT); ! def_builtin ("__builtin_ia32_mmx_zero", di_ftype_void, IX86_BUILTIN_MMX_ZERO); ! def_builtin ("__builtin_ia32_emms", void_ftype_void, IX86_BUILTIN_EMMS); ! def_builtin ("__builtin_ia32_ldmxcsr", void_ftype_unsigned, IX86_BUILTIN_LDMXCSR); ! def_builtin ("__builtin_ia32_stmxcsr", unsigned_ftype_void, IX86_BUILTIN_STMXCSR); ! def_builtin ("__builtin_ia32_psllw", v4hi_ftype_v4hi_di, IX86_BUILTIN_PSLLW); ! def_builtin ("__builtin_ia32_pslld", v2si_ftype_v2si_di, IX86_BUILTIN_PSLLD); ! def_builtin ("__builtin_ia32_psllq", di_ftype_di_di, IX86_BUILTIN_PSLLQ); ! ! def_builtin ("__builtin_ia32_psrlw", v4hi_ftype_v4hi_di, IX86_BUILTIN_PSRLW); ! def_builtin ("__builtin_ia32_psrld", v2si_ftype_v2si_di, IX86_BUILTIN_PSRLD); ! def_builtin ("__builtin_ia32_psrlq", di_ftype_di_di, IX86_BUILTIN_PSRLQ); ! def_builtin ("__builtin_ia32_psraw", v4hi_ftype_v4hi_di, IX86_BUILTIN_PSRAW); ! def_builtin ("__builtin_ia32_psrad", v2si_ftype_v2si_di, IX86_BUILTIN_PSRAD); ! def_builtin ("__builtin_ia32_pshufw", v4hi_ftype_v4hi_int, IX86_BUILTIN_PSHUFW); ! def_builtin ("__builtin_ia32_pmaddwd", v2si_ftype_v4hi_v4hi, IX86_BUILTIN_PMADDWD); ! /* Everything beyond this point is SSE only. */ ! if (! TARGET_SSE) ! return; /* comi/ucomi insns. */ for (i = 0, d = bdesc_comi; i < sizeof (bdesc_comi) / sizeof *d; i++, d++) ! def_builtin (d->name, int_ftype_v4sf_v4sf, d->code); ! def_builtin ("__builtin_ia32_packsswb", v8qi_ftype_v4hi_v4hi, IX86_BUILTIN_PACKSSWB); ! def_builtin ("__builtin_ia32_packssdw", v4hi_ftype_v2si_v2si, IX86_BUILTIN_PACKSSDW); ! def_builtin ("__builtin_ia32_packuswb", v8qi_ftype_v4hi_v4hi, IX86_BUILTIN_PACKUSWB); ! def_builtin ("__builtin_ia32_cvtpi2ps", v4sf_ftype_v4sf_v2si, IX86_BUILTIN_CVTPI2PS); ! def_builtin ("__builtin_ia32_cvtps2pi", v2si_ftype_v4sf, IX86_BUILTIN_CVTPS2PI); ! def_builtin ("__builtin_ia32_cvtsi2ss", v4sf_ftype_v4sf_int, IX86_BUILTIN_CVTSI2SS); ! def_builtin ("__builtin_ia32_cvtss2si", int_ftype_v4sf, IX86_BUILTIN_CVTSS2SI); ! def_builtin ("__builtin_ia32_cvttps2pi", v2si_ftype_v4sf, IX86_BUILTIN_CVTTPS2PI); ! def_builtin ("__builtin_ia32_cvttss2si", int_ftype_v4sf, IX86_BUILTIN_CVTTSS2SI); ! def_builtin ("__builtin_ia32_pextrw", int_ftype_v4hi_int, IX86_BUILTIN_PEXTRW); ! def_builtin ("__builtin_ia32_pinsrw", v4hi_ftype_v4hi_int_int, IX86_BUILTIN_PINSRW); ! def_builtin ("__builtin_ia32_maskmovq", void_ftype_v8qi_v8qi_pchar, IX86_BUILTIN_MASKMOVQ); ! def_builtin ("__builtin_ia32_loadaps", v4sf_ftype_pfloat, IX86_BUILTIN_LOADAPS); ! def_builtin ("__builtin_ia32_loadups", v4sf_ftype_pfloat, IX86_BUILTIN_LOADUPS); ! def_builtin ("__builtin_ia32_loadss", v4sf_ftype_pfloat, IX86_BUILTIN_LOADSS); ! def_builtin ("__builtin_ia32_storeaps", void_ftype_pfloat_v4sf, IX86_BUILTIN_STOREAPS); ! def_builtin ("__builtin_ia32_storeups", void_ftype_pfloat_v4sf, IX86_BUILTIN_STOREUPS); ! def_builtin ("__builtin_ia32_storess", void_ftype_pfloat_v4sf, IX86_BUILTIN_STORESS); ! def_builtin ("__builtin_ia32_loadhps", v4sf_ftype_v4sf_pv2si, IX86_BUILTIN_LOADHPS); ! def_builtin ("__builtin_ia32_loadlps", v4sf_ftype_v4sf_pv2si, IX86_BUILTIN_LOADLPS); ! def_builtin ("__builtin_ia32_storehps", v4sf_ftype_pv2si_v4sf, IX86_BUILTIN_STOREHPS); ! def_builtin ("__builtin_ia32_storelps", v4sf_ftype_pv2si_v4sf, IX86_BUILTIN_STORELPS); ! def_builtin ("__builtin_ia32_movmskps", int_ftype_v4sf, IX86_BUILTIN_MOVMSKPS); ! def_builtin ("__builtin_ia32_pmovmskb", int_ftype_v8qi, IX86_BUILTIN_PMOVMSKB); ! def_builtin ("__builtin_ia32_movntps", void_ftype_pfloat_v4sf, IX86_BUILTIN_MOVNTPS); ! def_builtin ("__builtin_ia32_movntq", void_ftype_pdi_di, IX86_BUILTIN_MOVNTQ); ! def_builtin ("__builtin_ia32_sfence", void_ftype_void, IX86_BUILTIN_SFENCE); ! def_builtin ("__builtin_ia32_prefetch", void_ftype_pchar_int, IX86_BUILTIN_PREFETCH); ! def_builtin ("__builtin_ia32_psadbw", v4hi_ftype_v8qi_v8qi, IX86_BUILTIN_PSADBW); ! def_builtin ("__builtin_ia32_rcpps", v4sf_ftype_v4sf, IX86_BUILTIN_RCPPS); ! def_builtin ("__builtin_ia32_rcpss", v4sf_ftype_v4sf, IX86_BUILTIN_RCPSS); ! def_builtin ("__builtin_ia32_rsqrtps", v4sf_ftype_v4sf, IX86_BUILTIN_RSQRTPS); ! def_builtin ("__builtin_ia32_rsqrtss", v4sf_ftype_v4sf, IX86_BUILTIN_RSQRTSS); ! def_builtin ("__builtin_ia32_sqrtps", v4sf_ftype_v4sf, IX86_BUILTIN_SQRTPS); ! def_builtin ("__builtin_ia32_sqrtss", v4sf_ftype_v4sf, IX86_BUILTIN_SQRTSS); ! def_builtin ("__builtin_ia32_shufps", v4sf_ftype_v4sf_v4sf_int, IX86_BUILTIN_SHUFPS); ! /* Composite intrinsics. */ ! def_builtin ("__builtin_ia32_setps1", v4sf_ftype_float, IX86_BUILTIN_SETPS1); ! def_builtin ("__builtin_ia32_setps", v4sf_ftype_float_float_float_float, IX86_BUILTIN_SETPS); ! def_builtin ("__builtin_ia32_setzerops", ti_ftype_void, IX86_BUILTIN_CLRPS); ! def_builtin ("__builtin_ia32_loadps1", v4sf_ftype_pfloat, IX86_BUILTIN_LOADPS1); ! def_builtin ("__builtin_ia32_loadrps", v4sf_ftype_pfloat, IX86_BUILTIN_LOADRPS); ! def_builtin ("__builtin_ia32_storeps1", void_ftype_pfloat_v4sf, IX86_BUILTIN_STOREPS1); ! def_builtin ("__builtin_ia32_storerps", void_ftype_pfloat_v4sf, IX86_BUILTIN_STORERPS); } /* Errors in the source file can cause expand_expr to return const0_rtx --- 11252,11365 ---- || d->icode == CODE_FOR_vmmaskncmpv4sf3) type = v4si_ftype_v4sf_v4sf; ! def_builtin (d->mask, d->name, type, d->code); } /* Add the remaining MMX insns with somewhat more complicated types. */ ! def_builtin (MASK_MMX, "__builtin_ia32_mmx_zero", di_ftype_void, IX86_BUILTIN_MMX_ZERO); ! def_builtin (MASK_MMX, "__builtin_ia32_emms", void_ftype_void, IX86_BUILTIN_EMMS); ! def_builtin (MASK_MMX, "__builtin_ia32_ldmxcsr", void_ftype_unsigned, IX86_BUILTIN_LDMXCSR); ! def_builtin (MASK_MMX, "__builtin_ia32_stmxcsr", unsigned_ftype_void, IX86_BUILTIN_STMXCSR); ! def_builtin (MASK_MMX, "__builtin_ia32_psllw", v4hi_ftype_v4hi_di, IX86_BUILTIN_PSLLW); ! def_builtin (MASK_MMX, "__builtin_ia32_pslld", v2si_ftype_v2si_di, IX86_BUILTIN_PSLLD); ! def_builtin (MASK_MMX, "__builtin_ia32_psllq", di_ftype_di_di, IX86_BUILTIN_PSLLQ); ! def_builtin (MASK_MMX, "__builtin_ia32_psrlw", v4hi_ftype_v4hi_di, IX86_BUILTIN_PSRLW); ! def_builtin (MASK_MMX, "__builtin_ia32_psrld", v2si_ftype_v2si_di, IX86_BUILTIN_PSRLD); ! def_builtin (MASK_MMX, "__builtin_ia32_psrlq", di_ftype_di_di, IX86_BUILTIN_PSRLQ); ! def_builtin (MASK_MMX, "__builtin_ia32_psraw", v4hi_ftype_v4hi_di, IX86_BUILTIN_PSRAW); ! def_builtin (MASK_MMX, "__builtin_ia32_psrad", v2si_ftype_v2si_di, IX86_BUILTIN_PSRAD); ! def_builtin (MASK_MMX, "__builtin_ia32_pshufw", v4hi_ftype_v4hi_int, IX86_BUILTIN_PSHUFW); ! def_builtin (MASK_MMX, "__builtin_ia32_pmaddwd", v2si_ftype_v4hi_v4hi, IX86_BUILTIN_PMADDWD); /* comi/ucomi insns. */ for (i = 0, d = bdesc_comi; i < sizeof (bdesc_comi) / sizeof *d; i++, d++) ! def_builtin (d->mask, d->name, int_ftype_v4sf_v4sf, d->code); ! def_builtin (MASK_MMX, "__builtin_ia32_packsswb", v8qi_ftype_v4hi_v4hi, IX86_BUILTIN_PACKSSWB); ! def_builtin (MASK_MMX, "__builtin_ia32_packssdw", v4hi_ftype_v2si_v2si, IX86_BUILTIN_PACKSSDW); ! def_builtin (MASK_MMX, "__builtin_ia32_packuswb", v8qi_ftype_v4hi_v4hi, IX86_BUILTIN_PACKUSWB); ! def_builtin (MASK_SSE, "__builtin_ia32_cvtpi2ps", v4sf_ftype_v4sf_v2si, IX86_BUILTIN_CVTPI2PS); ! def_builtin (MASK_SSE, "__builtin_ia32_cvtps2pi", v2si_ftype_v4sf, IX86_BUILTIN_CVTPS2PI); ! def_builtin (MASK_SSE, "__builtin_ia32_cvtsi2ss", v4sf_ftype_v4sf_int, IX86_BUILTIN_CVTSI2SS); ! def_builtin (MASK_SSE, "__builtin_ia32_cvtss2si", int_ftype_v4sf, IX86_BUILTIN_CVTSS2SI); ! def_builtin (MASK_SSE, "__builtin_ia32_cvttps2pi", v2si_ftype_v4sf, IX86_BUILTIN_CVTTPS2PI); ! def_builtin (MASK_SSE, "__builtin_ia32_cvttss2si", int_ftype_v4sf, IX86_BUILTIN_CVTTSS2SI); ! def_builtin (MASK_SSE, "__builtin_ia32_andps", v4sf_ftype_v4sf_v4sf, IX86_BUILTIN_ANDPS); ! def_builtin (MASK_SSE, "__builtin_ia32_andnps", v4sf_ftype_v4sf_v4sf, IX86_BUILTIN_ANDNPS); ! def_builtin (MASK_SSE, "__builtin_ia32_orps", v4sf_ftype_v4sf_v4sf, IX86_BUILTIN_ORPS); ! def_builtin (MASK_SSE, "__builtin_ia32_xorps", v4sf_ftype_v4sf_v4sf, IX86_BUILTIN_XORPS); ! def_builtin (MASK_SSE | MASK_3DNOW_A, "__builtin_ia32_pextrw", int_ftype_v4hi_int, IX86_BUILTIN_PEXTRW); ! def_builtin (MASK_SSE | MASK_3DNOW_A, "__builtin_ia32_pinsrw", v4hi_ftype_v4hi_int_int, IX86_BUILTIN_PINSRW); ! def_builtin (MASK_SSE | MASK_3DNOW_A, "__builtin_ia32_maskmovq", void_ftype_v8qi_v8qi_pchar, IX86_BUILTIN_MASKMOVQ); ! def_builtin (MASK_SSE, "__builtin_ia32_loadaps", v4sf_ftype_pfloat, IX86_BUILTIN_LOADAPS); ! def_builtin (MASK_SSE, "__builtin_ia32_loadups", v4sf_ftype_pfloat, IX86_BUILTIN_LOADUPS); ! def_builtin (MASK_SSE, "__builtin_ia32_loadss", v4sf_ftype_pfloat, IX86_BUILTIN_LOADSS); ! def_builtin (MASK_SSE, "__builtin_ia32_storeaps", void_ftype_pfloat_v4sf, IX86_BUILTIN_STOREAPS); ! def_builtin (MASK_SSE, "__builtin_ia32_storeups", void_ftype_pfloat_v4sf, IX86_BUILTIN_STOREUPS); ! def_builtin (MASK_SSE, "__builtin_ia32_storess", void_ftype_pfloat_v4sf, IX86_BUILTIN_STORESS); ! def_builtin (MASK_SSE, "__builtin_ia32_loadhps", v4sf_ftype_v4sf_pv2si, IX86_BUILTIN_LOADHPS); ! def_builtin (MASK_SSE, "__builtin_ia32_loadlps", v4sf_ftype_v4sf_pv2si, IX86_BUILTIN_LOADLPS); ! def_builtin (MASK_SSE, "__builtin_ia32_storehps", void_ftype_pv2si_v4sf, IX86_BUILTIN_STOREHPS); ! def_builtin (MASK_SSE, "__builtin_ia32_storelps", void_ftype_pv2si_v4sf, IX86_BUILTIN_STORELPS); ! def_builtin (MASK_SSE, "__builtin_ia32_movmskps", int_ftype_v4sf, IX86_BUILTIN_MOVMSKPS); ! def_builtin (MASK_SSE | MASK_3DNOW_A, "__builtin_ia32_pmovmskb", int_ftype_v8qi, IX86_BUILTIN_PMOVMSKB); ! def_builtin (MASK_SSE, "__builtin_ia32_movntps", void_ftype_pfloat_v4sf, IX86_BUILTIN_MOVNTPS); ! def_builtin (MASK_SSE | MASK_3DNOW_A, "__builtin_ia32_movntq", void_ftype_pdi_di, IX86_BUILTIN_MOVNTQ); ! def_builtin (MASK_SSE | MASK_3DNOW_A, "__builtin_ia32_sfence", void_ftype_void, IX86_BUILTIN_SFENCE); ! def_builtin (MASK_SSE | MASK_3DNOW_A, "__builtin_ia32_psadbw", v4hi_ftype_v8qi_v8qi, IX86_BUILTIN_PSADBW); ! def_builtin (MASK_SSE, "__builtin_ia32_rcpps", v4sf_ftype_v4sf, IX86_BUILTIN_RCPPS); ! def_builtin (MASK_SSE, "__builtin_ia32_rcpss", v4sf_ftype_v4sf, IX86_BUILTIN_RCPSS); ! def_builtin (MASK_SSE, "__builtin_ia32_rsqrtps", v4sf_ftype_v4sf, IX86_BUILTIN_RSQRTPS); ! def_builtin (MASK_SSE, "__builtin_ia32_rsqrtss", v4sf_ftype_v4sf, IX86_BUILTIN_RSQRTSS); ! def_builtin (MASK_SSE, "__builtin_ia32_sqrtps", v4sf_ftype_v4sf, IX86_BUILTIN_SQRTPS); ! def_builtin (MASK_SSE, "__builtin_ia32_sqrtss", v4sf_ftype_v4sf, IX86_BUILTIN_SQRTSS); ! def_builtin (MASK_SSE, "__builtin_ia32_shufps", v4sf_ftype_v4sf_v4sf_int, IX86_BUILTIN_SHUFPS); ! ! /* Original 3DNow! */ ! def_builtin (MASK_3DNOW, "__builtin_ia32_femms", void_ftype_void, IX86_BUILTIN_FEMMS); ! def_builtin (MASK_3DNOW, "__builtin_ia32_pavgusb", v8qi_ftype_v8qi_v8qi, IX86_BUILTIN_PAVGUSB); ! def_builtin (MASK_3DNOW, "__builtin_ia32_pf2id", v2si_ftype_v2sf, IX86_BUILTIN_PF2ID); ! def_builtin (MASK_3DNOW, "__builtin_ia32_pfacc", v2sf_ftype_v2sf_v2sf, IX86_BUILTIN_PFACC); ! def_builtin (MASK_3DNOW, "__builtin_ia32_pfadd", v2sf_ftype_v2sf_v2sf, IX86_BUILTIN_PFADD); ! def_builtin (MASK_3DNOW, "__builtin_ia32_pfcmpeq", v2si_ftype_v2sf_v2sf, IX86_BUILTIN_PFCMPEQ); ! def_builtin (MASK_3DNOW, "__builtin_ia32_pfcmpge", v2si_ftype_v2sf_v2sf, IX86_BUILTIN_PFCMPGE); ! def_builtin (MASK_3DNOW, "__builtin_ia32_pfcmpgt", v2si_ftype_v2sf_v2sf, IX86_BUILTIN_PFCMPGT); ! def_builtin (MASK_3DNOW, "__builtin_ia32_pfmax", v2sf_ftype_v2sf_v2sf, IX86_BUILTIN_PFMAX); ! def_builtin (MASK_3DNOW, "__builtin_ia32_pfmin", v2sf_ftype_v2sf_v2sf, IX86_BUILTIN_PFMIN); ! def_builtin (MASK_3DNOW, "__builtin_ia32_pfmul", v2sf_ftype_v2sf_v2sf, IX86_BUILTIN_PFMUL); ! def_builtin (MASK_3DNOW, "__builtin_ia32_pfrcp", v2sf_ftype_v2sf, IX86_BUILTIN_PFRCP); ! def_builtin (MASK_3DNOW, "__builtin_ia32_pfrcpit1", v2sf_ftype_v2sf_v2sf, IX86_BUILTIN_PFRCPIT1); ! def_builtin (MASK_3DNOW, "__builtin_ia32_pfrcpit2", v2sf_ftype_v2sf_v2sf, IX86_BUILTIN_PFRCPIT2); ! def_builtin (MASK_3DNOW, "__builtin_ia32_pfrsqrt", v2sf_ftype_v2sf, IX86_BUILTIN_PFRSQRT); ! def_builtin (MASK_3DNOW, "__builtin_ia32_pfrsqit1", v2sf_ftype_v2sf_v2sf, IX86_BUILTIN_PFRSQIT1); ! def_builtin (MASK_3DNOW, "__builtin_ia32_pfsub", v2sf_ftype_v2sf_v2sf, IX86_BUILTIN_PFSUB); ! def_builtin (MASK_3DNOW, "__builtin_ia32_pfsubr", v2sf_ftype_v2sf_v2sf, IX86_BUILTIN_PFSUBR); ! def_builtin (MASK_3DNOW, "__builtin_ia32_pi2fd", v2sf_ftype_v2si, IX86_BUILTIN_PI2FD); ! def_builtin (MASK_3DNOW, "__builtin_ia32_pmulhrw", v4hi_ftype_v4hi_v4hi, IX86_BUILTIN_PMULHRW); ! ! /* 3DNow! extension as used in the Athlon CPU. */ ! def_builtin (MASK_3DNOW_A, "__builtin_ia32_pf2iw", v2si_ftype_v2sf, IX86_BUILTIN_PF2IW); ! def_builtin (MASK_3DNOW_A, "__builtin_ia32_pfnacc", v2sf_ftype_v2sf_v2sf, IX86_BUILTIN_PFNACC); ! def_builtin (MASK_3DNOW_A, "__builtin_ia32_pfpnacc", v2sf_ftype_v2sf_v2sf, IX86_BUILTIN_PFPNACC); ! def_builtin (MASK_3DNOW_A, "__builtin_ia32_pi2fw", v2sf_ftype_v2si, IX86_BUILTIN_PI2FW); ! def_builtin (MASK_3DNOW_A, "__builtin_ia32_pswapdsf", v2sf_ftype_v2sf, IX86_BUILTIN_PSWAPDSF); ! def_builtin (MASK_3DNOW_A, "__builtin_ia32_pswapdsi", v2si_ftype_v2si, IX86_BUILTIN_PSWAPDSI); ! ! def_builtin (MASK_SSE, "__builtin_ia32_setzerops", v4sf_ftype_void, IX86_BUILTIN_SSE_ZERO); } /* Errors in the source file can cause expand_expr to return const0_rtx *************** safe_vector_operand (x, mode) *** 8175,8186 **** return x; x = gen_reg_rtx (mode); ! if (VALID_MMX_REG_MODE (mode)) emit_insn (gen_mmx_clrdi (mode == DImode ? x : gen_rtx_SUBREG (DImode, x, 0))); else ! emit_insn (gen_sse_clrti (mode == TImode ? x ! : gen_rtx_SUBREG (TImode, x, 0))); return x; } --- 11374,11385 ---- return x; x = gen_reg_rtx (mode); ! if (VALID_MMX_REG_MODE (mode) || VALID_MMX_REG_MODE_3DNOW (mode)) emit_insn (gen_mmx_clrdi (mode == DImode ? x : gen_rtx_SUBREG (DImode, x, 0))); else ! emit_insn (gen_sse_clrv4sf (mode == V4SFmode ? x ! : gen_rtx_SUBREG (V4SFmode, x, 0))); return x; } *************** ix86_expand_binop_builtin (icode, arglis *** 8221,8226 **** --- 11420,11431 ---- if (! (*insn_data[icode].operand[2].predicate) (op1, mode1)) op1 = copy_to_mode_reg (mode1, op1); + /* In the commutative cases, both op0 and op1 are nonimmediate_operand, + yet one of the two must not be a memory. This is normally enforced + by expanders, but we didn't bother to create one here. */ + if (GET_CODE (op0) == MEM && GET_CODE (op1) == MEM) + op0 = copy_to_mode_reg (mode0, op0); + pat = GEN_FCN (icode) (target, op0, op1); if (! pat) return 0; *************** ix86_expand_binop_builtin (icode, arglis *** 8228,8240 **** return target; } /* Subroutine of ix86_expand_builtin to take care of stores. */ static rtx ! ix86_expand_store_builtin (icode, arglist, shuffle) enum insn_code icode; tree arglist; - int shuffle; { rtx pat; tree arg0 = TREE_VALUE (arglist); --- 11433,11483 ---- return target; } + /* In type_for_mode we restrict the ability to create TImode types + to hosts with 64-bit H_W_I. So we've defined the SSE logicals + to have a V4SFmode signature. Convert them in-place to TImode. */ + + static rtx + ix86_expand_timode_binop_builtin (icode, arglist, target) + enum insn_code icode; + tree arglist; + rtx target; + { + rtx pat; + tree arg0 = TREE_VALUE (arglist); + tree arg1 = TREE_VALUE (TREE_CHAIN (arglist)); + rtx op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0); + rtx op1 = expand_expr (arg1, NULL_RTX, VOIDmode, 0); + + op0 = gen_lowpart (TImode, op0); + op1 = gen_lowpart (TImode, op1); + target = gen_reg_rtx (TImode); + + if (! (*insn_data[icode].operand[1].predicate) (op0, TImode)) + op0 = copy_to_mode_reg (TImode, op0); + if (! (*insn_data[icode].operand[2].predicate) (op1, TImode)) + op1 = copy_to_mode_reg (TImode, op1); + + /* In the commutative cases, both op0 and op1 are nonimmediate_operand, + yet one of the two must not be a memory. This is normally enforced + by expanders, but we didn't bother to create one here. */ + if (GET_CODE (op0) == MEM && GET_CODE (op1) == MEM) + op0 = copy_to_mode_reg (TImode, op0); + + pat = GEN_FCN (icode) (target, op0, op1); + if (! pat) + return 0; + emit_insn (pat); + + return gen_lowpart (V4SFmode, target); + } + /* Subroutine of ix86_expand_builtin to take care of stores. */ static rtx ! ix86_expand_store_builtin (icode, arglist) enum insn_code icode; tree arglist; { rtx pat; tree arg0 = TREE_VALUE (arglist); *************** ix86_expand_store_builtin (icode, arglis *** 8248,8257 **** op1 = safe_vector_operand (op1, mode1); op0 = gen_rtx_MEM (mode0, copy_to_mode_reg (Pmode, op0)); ! if (shuffle >= 0 || ! (*insn_data[icode].operand[1].predicate) (op1, mode1)) op1 = copy_to_mode_reg (mode1, op1); ! if (shuffle >= 0) ! emit_insn (gen_sse_shufps (op1, op1, op1, GEN_INT (shuffle))); pat = GEN_FCN (icode) (op0, op1); if (pat) emit_insn (pat); --- 11491,11500 ---- op1 = safe_vector_operand (op1, mode1); op0 = gen_rtx_MEM (mode0, copy_to_mode_reg (Pmode, op0)); ! ! if (! (*insn_data[icode].operand[1].predicate) (op1, mode1)) op1 = copy_to_mode_reg (mode1, op1); ! pat = GEN_FCN (icode) (op0, op1); if (pat) emit_insn (pat); *************** ix86_expand_unop1_builtin (icode, arglis *** 8306,8312 **** { rtx pat; tree arg0 = TREE_VALUE (arglist); ! rtx op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0); enum machine_mode tmode = insn_data[icode].operand[0].mode; enum machine_mode mode0 = insn_data[icode].operand[1].mode; --- 11549,11555 ---- { rtx pat; tree arg0 = TREE_VALUE (arglist); ! rtx op1, op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0); enum machine_mode tmode = insn_data[icode].operand[0].mode; enum machine_mode mode0 = insn_data[icode].operand[1].mode; *************** ix86_expand_unop1_builtin (icode, arglis *** 8320,8327 **** if (! (*insn_data[icode].operand[1].predicate) (op0, mode0)) op0 = copy_to_mode_reg (mode0, op0); ! ! pat = GEN_FCN (icode) (target, op0, op0); if (! pat) return 0; emit_insn (pat); --- 11563,11574 ---- if (! (*insn_data[icode].operand[1].predicate) (op0, mode0)) op0 = copy_to_mode_reg (mode0, op0); ! ! op1 = op0; ! if (! (*insn_data[icode].operand[2].predicate) (op1, mode0)) ! op1 = copy_to_mode_reg (mode0, op1); ! ! pat = GEN_FCN (icode) (target, op0, op1); if (! pat) return 0; emit_insn (pat); *************** ix86_expand_unop1_builtin (icode, arglis *** 8332,8338 **** static rtx ix86_expand_sse_compare (d, arglist, target) ! struct builtin_description *d; tree arglist; rtx target; { --- 11579,11585 ---- static rtx ix86_expand_sse_compare (d, arglist, target) ! const struct builtin_description *d; tree arglist; rtx target; { *************** ix86_expand_sse_compare (d, arglist, tar *** 8356,8370 **** hardware. */ if (d->flag) { ! target = gen_reg_rtx (tmode); ! emit_move_insn (target, op1); op1 = op0; ! op0 = target; ! comparison = swap_condition (comparison); } ! else if (! target ! || GET_MODE (target) != tmode ! || ! (*insn_data[d->icode].operand[0].predicate) (target, tmode)) target = gen_reg_rtx (tmode); if (! (*insn_data[d->icode].operand[1].predicate) (op0, mode0)) --- 11603,11617 ---- hardware. */ if (d->flag) { ! rtx tmp = gen_reg_rtx (mode1); ! emit_move_insn (tmp, op1); op1 = op0; ! op0 = tmp; } ! ! if (! target ! || GET_MODE (target) != tmode ! || ! (*insn_data[d->icode].operand[0].predicate) (target, tmode)) target = gen_reg_rtx (tmode); if (! (*insn_data[d->icode].operand[1].predicate) (op0, mode0)) *************** ix86_expand_sse_compare (d, arglist, tar *** 8384,8390 **** static rtx ix86_expand_sse_comi (d, arglist, target) ! struct builtin_description *d; tree arglist; rtx target; { --- 11631,11637 ---- static rtx ix86_expand_sse_comi (d, arglist, target) ! const struct builtin_description *d; tree arglist; rtx target; { *************** ix86_expand_sse_comi (d, arglist, target *** 8410,8416 **** rtx tmp = op1; op1 = op0; op0 = tmp; - comparison = swap_condition (comparison); } target = gen_reg_rtx (SImode); --- 11657,11662 ---- *************** ix86_expand_sse_comi (d, arglist, target *** 8427,8435 **** if (! pat) return 0; emit_insn (pat); ! emit_insn (gen_setcc_2 (target, op2)); ! return target; } /* Expand an expression EXP that calls a built-in function, --- 11673,11685 ---- if (! pat) return 0; emit_insn (pat); ! emit_insn (gen_rtx_SET (VOIDmode, ! gen_rtx_STRICT_LOW_PART (VOIDmode, target), ! gen_rtx_fmt_ee (comparison, QImode, ! gen_rtx_REG (CCmode, FLAGS_REG), ! const0_rtx))); ! return SUBREG_REG (target); } /* Expand an expression EXP that calls a built-in function, *************** ix86_expand_builtin (exp, target, subtar *** 8446,8457 **** enum machine_mode mode ATTRIBUTE_UNUSED; int ignore ATTRIBUTE_UNUSED; { ! struct builtin_description *d; size_t i; enum insn_code icode; tree fndecl = TREE_OPERAND (TREE_OPERAND (exp, 0), 0); tree arglist = TREE_OPERAND (exp, 1); ! tree arg0, arg1, arg2, arg3; rtx op0, op1, op2, pat; enum machine_mode tmode, mode0, mode1, mode2; unsigned int fcode = DECL_FUNCTION_CODE (fndecl); --- 11696,11707 ---- enum machine_mode mode ATTRIBUTE_UNUSED; int ignore ATTRIBUTE_UNUSED; { ! const struct builtin_description *d; size_t i; enum insn_code icode; tree fndecl = TREE_OPERAND (TREE_OPERAND (exp, 0), 0); tree arglist = TREE_OPERAND (exp, 1); ! tree arg0, arg1, arg2; rtx op0, op1, op2, pat; enum machine_mode tmode, mode0, mode1, mode2; unsigned int fcode = DECL_FUNCTION_CODE (fndecl); *************** ix86_expand_builtin (exp, target, subtar *** 8466,8484 **** emit_insn (gen_sfence ()); return 0; - case IX86_BUILTIN_M_FROM_INT: - target = gen_reg_rtx (DImode); - op0 = expand_expr (TREE_VALUE (arglist), NULL_RTX, VOIDmode, 0); - emit_move_insn (gen_rtx_SUBREG (SImode, target, 0), op0); - return target; - - case IX86_BUILTIN_M_TO_INT: - op0 = expand_expr (TREE_VALUE (arglist), NULL_RTX, VOIDmode, 0); - op0 = copy_to_mode_reg (DImode, op0); - target = gen_reg_rtx (SImode); - emit_move_insn (target, gen_rtx_SUBREG (SImode, op0, 0)); - return target; - case IX86_BUILTIN_PEXTRW: icode = CODE_FOR_mmx_pextrw; arg0 = TREE_VALUE (arglist); --- 11716,11721 ---- *************** ix86_expand_builtin (exp, target, subtar *** 8495,8501 **** { /* @@@ better error message */ error ("selector must be an immediate"); ! return const0_rtx; } if (target == 0 || GET_MODE (target) != tmode --- 11732,11738 ---- { /* @@@ better error message */ error ("selector must be an immediate"); ! return gen_reg_rtx (tmode); } if (target == 0 || GET_MODE (target) != tmode *************** ix86_expand_builtin (exp, target, subtar *** 8541,8547 **** return target; case IX86_BUILTIN_MASKMOVQ: ! icode = CODE_FOR_mmx_maskmovq; /* Note the arg order is different from the operand order. */ arg1 = TREE_VALUE (arglist); arg2 = TREE_VALUE (TREE_CHAIN (arglist)); --- 11778,11784 ---- return target; case IX86_BUILTIN_MASKMOVQ: ! icode = TARGET_64BIT ? CODE_FOR_mmx_maskmovq_rex : CODE_FOR_mmx_maskmovq; /* Note the arg order is different from the operand order. */ arg1 = TREE_VALUE (arglist); arg2 = TREE_VALUE (TREE_CHAIN (arglist)); *************** ix86_expand_builtin (exp, target, subtar *** 8553,8559 **** mode1 = insn_data[icode].operand[1].mode; mode2 = insn_data[icode].operand[2].mode; ! if (! (*insn_data[icode].operand[1].predicate) (op0, mode0)) op0 = copy_to_mode_reg (mode0, op0); if (! (*insn_data[icode].operand[1].predicate) (op1, mode1)) op1 = copy_to_mode_reg (mode1, op1); --- 11790,11796 ---- mode1 = insn_data[icode].operand[1].mode; mode2 = insn_data[icode].operand[2].mode; ! if (! (*insn_data[icode].operand[0].predicate) (op0, mode0)) op0 = copy_to_mode_reg (mode0, op0); if (! (*insn_data[icode].operand[1].predicate) (op1, mode1)) op1 = copy_to_mode_reg (mode1, op1); *************** ix86_expand_builtin (exp, target, subtar *** 8572,8577 **** --- 11809,11827 ---- case IX86_BUILTIN_RCPSS: return ix86_expand_unop1_builtin (CODE_FOR_vmrcpv4sf2, arglist, target); + case IX86_BUILTIN_ANDPS: + return ix86_expand_timode_binop_builtin (CODE_FOR_sse_andti3, + arglist, target); + case IX86_BUILTIN_ANDNPS: + return ix86_expand_timode_binop_builtin (CODE_FOR_sse_nandti3, + arglist, target); + case IX86_BUILTIN_ORPS: + return ix86_expand_timode_binop_builtin (CODE_FOR_sse_iorti3, + arglist, target); + case IX86_BUILTIN_XORPS: + return ix86_expand_timode_binop_builtin (CODE_FOR_sse_xorti3, + arglist, target); + case IX86_BUILTIN_LOADAPS: return ix86_expand_unop_builtin (CODE_FOR_sse_movaps, arglist, target, 1); *************** ix86_expand_builtin (exp, target, subtar *** 8579,8593 **** return ix86_expand_unop_builtin (CODE_FOR_sse_movups, arglist, target, 1); case IX86_BUILTIN_STOREAPS: ! return ix86_expand_store_builtin (CODE_FOR_sse_movaps, arglist, -1); case IX86_BUILTIN_STOREUPS: ! return ix86_expand_store_builtin (CODE_FOR_sse_movups, arglist, -1); case IX86_BUILTIN_LOADSS: return ix86_expand_unop_builtin (CODE_FOR_sse_loadss, arglist, target, 1); case IX86_BUILTIN_STORESS: ! return ix86_expand_store_builtin (CODE_FOR_sse_storess, arglist, -1); case IX86_BUILTIN_LOADHPS: case IX86_BUILTIN_LOADLPS: --- 11829,11843 ---- return ix86_expand_unop_builtin (CODE_FOR_sse_movups, arglist, target, 1); case IX86_BUILTIN_STOREAPS: ! return ix86_expand_store_builtin (CODE_FOR_sse_movaps, arglist); case IX86_BUILTIN_STOREUPS: ! return ix86_expand_store_builtin (CODE_FOR_sse_movups, arglist); case IX86_BUILTIN_LOADSS: return ix86_expand_unop_builtin (CODE_FOR_sse_loadss, arglist, target, 1); case IX86_BUILTIN_STORESS: ! return ix86_expand_store_builtin (CODE_FOR_sse_storess, arglist); case IX86_BUILTIN_LOADHPS: case IX86_BUILTIN_LOADLPS: *************** ix86_expand_builtin (exp, target, subtar *** 8636,8644 **** return 0; case IX86_BUILTIN_MOVNTPS: ! return ix86_expand_store_builtin (CODE_FOR_sse_movntv4sf, arglist, -1); case IX86_BUILTIN_MOVNTQ: ! return ix86_expand_store_builtin (CODE_FOR_sse_movntdi, arglist, -1); case IX86_BUILTIN_LDMXCSR: op0 = expand_expr (TREE_VALUE (arglist), NULL_RTX, VOIDmode, 0); --- 11886,11894 ---- return 0; case IX86_BUILTIN_MOVNTPS: ! return ix86_expand_store_builtin (CODE_FOR_sse_movntv4sf, arglist); case IX86_BUILTIN_MOVNTQ: ! return ix86_expand_store_builtin (CODE_FOR_sse_movntdi, arglist); case IX86_BUILTIN_LDMXCSR: op0 = expand_expr (TREE_VALUE (arglist), NULL_RTX, VOIDmode, 0); *************** ix86_expand_builtin (exp, target, subtar *** 8652,8680 **** emit_insn (gen_stmxcsr (target)); return copy_to_mode_reg (SImode, target); - case IX86_BUILTIN_PREFETCH: - icode = CODE_FOR_prefetch; - arg0 = TREE_VALUE (arglist); - arg1 = TREE_VALUE (TREE_CHAIN (arglist)); - op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0); - op1 = expand_expr (arg1, NULL_RTX, VOIDmode, 0); - mode0 = insn_data[icode].operand[0].mode; - mode1 = insn_data[icode].operand[1].mode; - - if (! (*insn_data[icode].operand[1].predicate) (op1, mode1)) - { - /* @@@ better error message */ - error ("selector must be an immediate"); - return const0_rtx; - } - - op0 = copy_to_mode_reg (Pmode, op0); - pat = GEN_FCN (icode) (op0, op1); - if (! pat) - return 0; - emit_insn (pat); - return target; - case IX86_BUILTIN_SHUFPS: icode = CODE_FOR_sse_shufps; arg0 = TREE_VALUE (arglist); --- 11902,11907 ---- *************** ix86_expand_builtin (exp, target, subtar *** 8696,8702 **** { /* @@@ better error message */ error ("mask must be an immediate"); ! return const0_rtx; } if (target == 0 || GET_MODE (target) != tmode --- 11923,11929 ---- { /* @@@ better error message */ error ("mask must be an immediate"); ! return gen_reg_rtx (tmode); } if (target == 0 || GET_MODE (target) != tmode *************** ix86_expand_builtin (exp, target, subtar *** 8715,8726 **** op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0); op1 = expand_expr (arg1, NULL_RTX, VOIDmode, 0); tmode = insn_data[icode].operand[0].mode; ! mode0 = insn_data[icode].operand[2].mode; ! mode1 = insn_data[icode].operand[3].mode; ! if (! (*insn_data[icode].operand[1].predicate) (op0, mode0)) ! op0 = copy_to_mode_reg (mode0, op0); ! if (! (*insn_data[icode].operand[3].predicate) (op1, mode1)) { /* @@@ better error message */ error ("mask must be an immediate"); --- 11942,11953 ---- op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0); op1 = expand_expr (arg1, NULL_RTX, VOIDmode, 0); tmode = insn_data[icode].operand[0].mode; ! mode1 = insn_data[icode].operand[1].mode; ! mode2 = insn_data[icode].operand[2].mode; ! if (! (*insn_data[icode].operand[1].predicate) (op0, mode1)) ! op0 = copy_to_mode_reg (mode1, op0); ! if (! (*insn_data[icode].operand[2].predicate) (op1, mode2)) { /* @@@ better error message */ error ("mask must be an immediate"); *************** ix86_expand_builtin (exp, target, subtar *** 8730,8793 **** || GET_MODE (target) != tmode || ! (*insn_data[icode].operand[0].predicate) (target, tmode)) target = gen_reg_rtx (tmode); ! pat = GEN_FCN (icode) (target, target, op0, op1); if (! pat) return 0; emit_insn (pat); return target; ! /* Composite intrinsics. */ ! case IX86_BUILTIN_SETPS1: ! target = assign_386_stack_local (SFmode, 0); ! arg0 = TREE_VALUE (arglist); ! emit_move_insn (change_address (target, SFmode, XEXP (target, 0)), ! expand_expr (arg0, NULL_RTX, VOIDmode, 0)); ! op0 = gen_reg_rtx (V4SFmode); ! emit_insn (gen_sse_loadss (op0, change_address (target, V4SFmode, ! XEXP (target, 0)))); ! emit_insn (gen_sse_shufps (op0, op0, op0, GEN_INT (0))); ! return op0; ! case IX86_BUILTIN_SETPS: ! target = assign_386_stack_local (V4SFmode, 0); ! op0 = change_address (target, SFmode, XEXP (target, 0)); ! arg0 = TREE_VALUE (arglist); ! arg1 = TREE_VALUE (TREE_CHAIN (arglist)); ! arg2 = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist))); ! arg3 = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (TREE_CHAIN (arglist)))); ! emit_move_insn (op0, ! expand_expr (arg0, NULL_RTX, VOIDmode, 0)); ! emit_move_insn (adj_offsettable_operand (op0, 4), ! expand_expr (arg1, NULL_RTX, VOIDmode, 0)); ! emit_move_insn (adj_offsettable_operand (op0, 8), ! expand_expr (arg2, NULL_RTX, VOIDmode, 0)); ! emit_move_insn (adj_offsettable_operand (op0, 12), ! expand_expr (arg3, NULL_RTX, VOIDmode, 0)); ! op0 = gen_reg_rtx (V4SFmode); ! emit_insn (gen_sse_movaps (op0, target)); ! return op0; ! case IX86_BUILTIN_CLRPS: ! target = gen_reg_rtx (TImode); ! emit_insn (gen_sse_clrti (target)); ! return target; ! case IX86_BUILTIN_LOADRPS: ! target = ix86_expand_unop_builtin (CODE_FOR_sse_movaps, arglist, ! gen_reg_rtx (V4SFmode), 1); ! emit_insn (gen_sse_shufps (target, target, target, GEN_INT (0x1b))); ! return target; ! case IX86_BUILTIN_LOADPS1: ! target = ix86_expand_unop_builtin (CODE_FOR_sse_loadss, arglist, ! gen_reg_rtx (V4SFmode), 1); ! emit_insn (gen_sse_shufps (target, target, target, const0_rtx)); ! return target; ! case IX86_BUILTIN_STOREPS1: ! return ix86_expand_store_builtin (CODE_FOR_sse_movaps, arglist, 0); ! case IX86_BUILTIN_STORERPS: ! return ix86_expand_store_builtin (CODE_FOR_sse_movaps, arglist, 0x1B); case IX86_BUILTIN_MMX_ZERO: target = gen_reg_rtx (DImode); --- 11957,12051 ---- || GET_MODE (target) != tmode || ! (*insn_data[icode].operand[0].predicate) (target, tmode)) target = gen_reg_rtx (tmode); ! pat = GEN_FCN (icode) (target, op0, op1); if (! pat) return 0; emit_insn (pat); return target; ! case IX86_BUILTIN_FEMMS: ! emit_insn (gen_femms ()); ! return NULL_RTX; ! case IX86_BUILTIN_PAVGUSB: ! return ix86_expand_binop_builtin (CODE_FOR_pavgusb, arglist, target); ! case IX86_BUILTIN_PF2ID: ! return ix86_expand_unop_builtin (CODE_FOR_pf2id, arglist, target, 0); ! case IX86_BUILTIN_PFACC: ! return ix86_expand_binop_builtin (CODE_FOR_pfacc, arglist, target); ! case IX86_BUILTIN_PFADD: ! return ix86_expand_binop_builtin (CODE_FOR_addv2sf3, arglist, target); ! case IX86_BUILTIN_PFCMPEQ: ! return ix86_expand_binop_builtin (CODE_FOR_eqv2sf3, arglist, target); ! ! case IX86_BUILTIN_PFCMPGE: ! return ix86_expand_binop_builtin (CODE_FOR_gev2sf3, arglist, target); ! ! case IX86_BUILTIN_PFCMPGT: ! return ix86_expand_binop_builtin (CODE_FOR_gtv2sf3, arglist, target); ! ! case IX86_BUILTIN_PFMAX: ! return ix86_expand_binop_builtin (CODE_FOR_pfmaxv2sf3, arglist, target); ! ! case IX86_BUILTIN_PFMIN: ! return ix86_expand_binop_builtin (CODE_FOR_pfminv2sf3, arglist, target); ! ! case IX86_BUILTIN_PFMUL: ! return ix86_expand_binop_builtin (CODE_FOR_mulv2sf3, arglist, target); ! ! case IX86_BUILTIN_PFRCP: ! return ix86_expand_unop_builtin (CODE_FOR_pfrcpv2sf2, arglist, target, 0); ! ! case IX86_BUILTIN_PFRCPIT1: ! return ix86_expand_binop_builtin (CODE_FOR_pfrcpit1v2sf3, arglist, target); ! ! case IX86_BUILTIN_PFRCPIT2: ! return ix86_expand_binop_builtin (CODE_FOR_pfrcpit2v2sf3, arglist, target); ! ! case IX86_BUILTIN_PFRSQIT1: ! return ix86_expand_binop_builtin (CODE_FOR_pfrsqit1v2sf3, arglist, target); ! ! case IX86_BUILTIN_PFRSQRT: ! return ix86_expand_unop_builtin (CODE_FOR_pfrsqrtv2sf2, arglist, target, 0); ! ! case IX86_BUILTIN_PFSUB: ! return ix86_expand_binop_builtin (CODE_FOR_subv2sf3, arglist, target); ! ! case IX86_BUILTIN_PFSUBR: ! return ix86_expand_binop_builtin (CODE_FOR_subrv2sf3, arglist, target); ! ! case IX86_BUILTIN_PI2FD: ! return ix86_expand_unop_builtin (CODE_FOR_floatv2si2, arglist, target, 0); ! ! case IX86_BUILTIN_PMULHRW: ! return ix86_expand_binop_builtin (CODE_FOR_pmulhrwv4hi3, arglist, target); ! ! case IX86_BUILTIN_PF2IW: ! return ix86_expand_unop_builtin (CODE_FOR_pf2iw, arglist, target, 0); ! ! case IX86_BUILTIN_PFNACC: ! return ix86_expand_binop_builtin (CODE_FOR_pfnacc, arglist, target); ! ! case IX86_BUILTIN_PFPNACC: ! return ix86_expand_binop_builtin (CODE_FOR_pfpnacc, arglist, target); ! ! case IX86_BUILTIN_PI2FW: ! return ix86_expand_unop_builtin (CODE_FOR_pi2fw, arglist, target, 0); ! ! case IX86_BUILTIN_PSWAPDSI: ! return ix86_expand_unop_builtin (CODE_FOR_pswapdv2si2, arglist, target, 0); ! ! case IX86_BUILTIN_PSWAPDSF: ! return ix86_expand_unop_builtin (CODE_FOR_pswapdv2sf2, arglist, target, 0); ! ! case IX86_BUILTIN_SSE_ZERO: ! target = gen_reg_rtx (V4SFmode); ! emit_insn (gen_sse_clrv4sf (target)); ! return target; case IX86_BUILTIN_MMX_ZERO: target = gen_reg_rtx (DImode); *************** ix86_expand_builtin (exp, target, subtar *** 8824,8874 **** } /* Store OPERAND to the memory after reload is completed. This means ! that we can't easilly use assign_stack_local. */ rtx ix86_force_to_memory (mode, operand) enum machine_mode mode; rtx operand; { if (!reload_completed) abort (); ! switch (mode) { ! case DImode: { ! rtx operands[2]; ! split_di (&operand, 1, operands, operands+1); emit_insn ( ! gen_rtx_SET (VOIDmode, ! gen_rtx_MEM (SImode, ! gen_rtx_PRE_DEC (Pmode, ! stack_pointer_rtx)), ! operands[1])); emit_insn ( ! gen_rtx_SET (VOIDmode, ! gen_rtx_MEM (SImode, ! gen_rtx_PRE_DEC (Pmode, ! stack_pointer_rtx)), ! operands[0])); } ! break; ! case HImode: ! /* It is better to store HImodes as SImodes. */ ! if (!TARGET_PARTIAL_REG_STALL) ! operand = gen_lowpart (SImode, operand); ! /* FALLTHRU */ ! case SImode: ! emit_insn ( ! gen_rtx_SET (VOIDmode, ! gen_rtx_MEM (GET_MODE (operand), ! gen_rtx_PRE_DEC (SImode, ! stack_pointer_rtx)), ! operand)); ! break; ! default: ! abort(); } ! return gen_rtx_MEM (mode, stack_pointer_rtx); } /* Free operand from the memory. */ --- 12082,12166 ---- } /* Store OPERAND to the memory after reload is completed. This means ! that we can't easily use assign_stack_local. */ rtx ix86_force_to_memory (mode, operand) enum machine_mode mode; rtx operand; { + rtx result; if (!reload_completed) abort (); ! if (TARGET_64BIT && TARGET_RED_ZONE) { ! result = gen_rtx_MEM (mode, ! gen_rtx_PLUS (Pmode, ! stack_pointer_rtx, ! GEN_INT (-RED_ZONE_SIZE))); ! emit_move_insn (result, operand); ! } ! else if (TARGET_64BIT && !TARGET_RED_ZONE) ! { ! switch (mode) { ! case HImode: ! case SImode: ! operand = gen_lowpart (DImode, operand); ! /* FALLTHRU */ ! case DImode: emit_insn ( ! gen_rtx_SET (VOIDmode, ! gen_rtx_MEM (DImode, ! gen_rtx_PRE_DEC (DImode, ! stack_pointer_rtx)), ! operand)); ! break; ! default: ! abort (); ! } ! result = gen_rtx_MEM (mode, stack_pointer_rtx); ! } ! else ! { ! switch (mode) ! { ! case DImode: ! { ! rtx operands[2]; ! split_di (&operand, 1, operands, operands + 1); ! emit_insn ( ! gen_rtx_SET (VOIDmode, ! gen_rtx_MEM (SImode, ! gen_rtx_PRE_DEC (Pmode, ! stack_pointer_rtx)), ! operands[1])); ! emit_insn ( ! gen_rtx_SET (VOIDmode, ! gen_rtx_MEM (SImode, ! gen_rtx_PRE_DEC (Pmode, ! stack_pointer_rtx)), ! operands[0])); ! } ! break; ! case HImode: ! /* It is better to store HImodes as SImodes. */ ! if (!TARGET_PARTIAL_REG_STALL) ! operand = gen_lowpart (SImode, operand); ! /* FALLTHRU */ ! case SImode: emit_insn ( ! gen_rtx_SET (VOIDmode, ! gen_rtx_MEM (GET_MODE (operand), ! gen_rtx_PRE_DEC (SImode, ! stack_pointer_rtx)), ! operand)); ! break; ! default: ! abort (); } ! result = gen_rtx_MEM (mode, stack_pointer_rtx); } ! return result; } /* Free operand from the memory. */ *************** void *** 8876,8888 **** ix86_free_from_memory (mode) enum machine_mode mode; { ! /* Use LEA to deallocate stack space. In peephole2 it will be converted ! to pop or add instruction if registers are available. */ ! emit_insn (gen_rtx_SET (VOIDmode, stack_pointer_rtx, ! gen_rtx_PLUS (Pmode, stack_pointer_rtx, ! GEN_INT (mode == DImode ! ? 8 ! : mode == HImode && TARGET_PARTIAL_REG_STALL ! ? 2 ! : 4)))); } --- 12168,12475 ---- ix86_free_from_memory (mode) enum machine_mode mode; { ! if (!TARGET_64BIT || !TARGET_RED_ZONE) ! { ! int size; ! ! if (mode == DImode || TARGET_64BIT) ! size = 8; ! else if (mode == HImode && TARGET_PARTIAL_REG_STALL) ! size = 2; ! else ! size = 4; ! /* Use LEA to deallocate stack space. In peephole2 it will be converted ! to pop or add instruction if registers are available. */ ! emit_insn (gen_rtx_SET (VOIDmode, stack_pointer_rtx, ! gen_rtx_PLUS (Pmode, stack_pointer_rtx, ! GEN_INT (size)))); ! } ! } ! ! /* Put float CONST_DOUBLE in the constant pool instead of fp regs. ! QImode must go into class Q_REGS. ! Narrow ALL_REGS to GENERAL_REGS. This supports allowing movsf and ! movdf to do mem-to-mem moves through integer regs. */ ! enum reg_class ! ix86_preferred_reload_class (x, class) ! rtx x; ! enum reg_class class; ! { ! if (GET_CODE (x) == CONST_DOUBLE && GET_MODE (x) != VOIDmode) ! { ! /* SSE can't load any constant directly yet. */ ! if (SSE_CLASS_P (class)) ! return NO_REGS; ! /* Floats can load 0 and 1. */ ! if (MAYBE_FLOAT_CLASS_P (class) && standard_80387_constant_p (x)) ! { ! /* Limit class to non-SSE. Use GENERAL_REGS if possible. */ ! if (MAYBE_SSE_CLASS_P (class)) ! return (reg_class_subset_p (class, GENERAL_REGS) ! ? GENERAL_REGS : FLOAT_REGS); ! else ! return class; ! } ! /* General regs can load everything. */ ! if (reg_class_subset_p (class, GENERAL_REGS)) ! return GENERAL_REGS; ! /* In case we haven't resolved FLOAT or SSE yet, give up. */ ! if (MAYBE_FLOAT_CLASS_P (class) || MAYBE_SSE_CLASS_P (class)) ! return NO_REGS; ! } ! if (MAYBE_MMX_CLASS_P (class) && CONSTANT_P (x)) ! return NO_REGS; ! if (GET_MODE (x) == QImode && ! reg_class_subset_p (class, Q_REGS)) ! return Q_REGS; ! return class; ! } ! ! /* If we are copying between general and FP registers, we need a memory ! location. The same is true for SSE and MMX registers. ! ! The macro can't work reliably when one of the CLASSES is class containing ! registers from multiple units (SSE, MMX, integer). We avoid this by never ! combining those units in single alternative in the machine description. ! Ensure that this constraint holds to avoid unexpected surprises. ! ! When STRICT is false, we are being called from REGISTER_MOVE_COST, so do not ! enforce these sanity checks. */ ! int ! ix86_secondary_memory_needed (class1, class2, mode, strict) ! enum reg_class class1, class2; ! enum machine_mode mode; ! int strict; ! { ! if (MAYBE_FLOAT_CLASS_P (class1) != FLOAT_CLASS_P (class1) ! || MAYBE_FLOAT_CLASS_P (class2) != FLOAT_CLASS_P (class2) ! || MAYBE_SSE_CLASS_P (class1) != SSE_CLASS_P (class1) ! || MAYBE_SSE_CLASS_P (class2) != SSE_CLASS_P (class2) ! || MAYBE_MMX_CLASS_P (class1) != MMX_CLASS_P (class1) ! || MAYBE_MMX_CLASS_P (class2) != MMX_CLASS_P (class2)) ! { ! if (strict) ! abort (); ! else ! return 1; ! } ! return (FLOAT_CLASS_P (class1) != FLOAT_CLASS_P (class2) ! || (SSE_CLASS_P (class1) != SSE_CLASS_P (class2) ! && (mode) != SImode) ! || (MMX_CLASS_P (class1) != MMX_CLASS_P (class2) ! && (mode) != SImode)); ! } ! /* Return the cost of moving data from a register in class CLASS1 to ! one in class CLASS2. ! ! It is not required that the cost always equal 2 when FROM is the same as TO; ! on some machines it is expensive to move between registers if they are not ! general registers. */ ! int ! ix86_register_move_cost (mode, class1, class2) ! enum machine_mode mode; ! enum reg_class class1, class2; ! { ! /* In case we require secondary memory, compute cost of the store followed ! by load. In case of copying from general_purpose_register we may emit ! multiple stores followed by single load causing memory size mismatch ! stall. Count this as arbitarily high cost of 20. */ ! if (ix86_secondary_memory_needed (class1, class2, mode, 0)) ! { ! int add_cost = 0; ! if (CLASS_MAX_NREGS (class1, mode) > CLASS_MAX_NREGS (class2, mode)) ! add_cost = 20; ! return (MEMORY_MOVE_COST (mode, class1, 0) ! + MEMORY_MOVE_COST (mode, class2, 1) + add_cost); ! } ! /* Moves between SSE/MMX and integer unit are expensive. */ ! if (MMX_CLASS_P (class1) != MMX_CLASS_P (class2) ! || SSE_CLASS_P (class1) != SSE_CLASS_P (class2)) ! return ix86_cost->mmxsse_to_integer; ! if (MAYBE_FLOAT_CLASS_P (class1)) ! return ix86_cost->fp_move; ! if (MAYBE_SSE_CLASS_P (class1)) ! return ix86_cost->sse_move; ! if (MAYBE_MMX_CLASS_P (class1)) ! return ix86_cost->mmx_move; ! return 2; ! } ! ! /* Return 1 if hard register REGNO can hold a value of machine-mode MODE. */ ! int ! ix86_hard_regno_mode_ok (regno, mode) ! int regno; ! enum machine_mode mode; ! { ! /* Flags and only flags can only hold CCmode values. */ ! if (CC_REGNO_P (regno)) ! return GET_MODE_CLASS (mode) == MODE_CC; ! if (GET_MODE_CLASS (mode) == MODE_CC ! || GET_MODE_CLASS (mode) == MODE_RANDOM ! || GET_MODE_CLASS (mode) == MODE_PARTIAL_INT) ! return 0; ! if (FP_REGNO_P (regno)) ! return VALID_FP_MODE_P (mode); ! if (SSE_REGNO_P (regno)) ! return VALID_SSE_REG_MODE (mode); ! if (MMX_REGNO_P (regno)) ! return VALID_MMX_REG_MODE (mode) || VALID_MMX_REG_MODE_3DNOW (mode); ! /* We handle both integer and floats in the general purpose registers. ! In future we should be able to handle vector modes as well. */ ! if (!VALID_INT_MODE_P (mode) && !VALID_FP_MODE_P (mode)) ! return 0; ! /* Take care for QImode values - they can be in non-QI regs, but then ! they do cause partial register stalls. */ ! if (regno < 4 || mode != QImode || TARGET_64BIT) ! return 1; ! return reload_in_progress || reload_completed || !TARGET_PARTIAL_REG_STALL; ! } ! ! /* Return the cost of moving data of mode M between a ! register and memory. A value of 2 is the default; this cost is ! relative to those in `REGISTER_MOVE_COST'. ! ! If moving between registers and memory is more expensive than ! between two registers, you should define this macro to express the ! relative cost. ! ! Model also increased moving costs of QImode registers in non ! Q_REGS classes. ! */ ! int ! ix86_memory_move_cost (mode, class, in) ! enum machine_mode mode; ! enum reg_class class; ! int in; ! { ! if (FLOAT_CLASS_P (class)) ! { ! int index; ! switch (mode) ! { ! case SFmode: ! index = 0; ! break; ! case DFmode: ! index = 1; ! break; ! case XFmode: ! case TFmode: ! index = 2; ! break; ! default: ! return 100; ! } ! return in ? ix86_cost->fp_load [index] : ix86_cost->fp_store [index]; ! } ! if (SSE_CLASS_P (class)) ! { ! int index; ! switch (GET_MODE_SIZE (mode)) ! { ! case 4: ! index = 0; ! break; ! case 8: ! index = 1; ! break; ! case 16: ! index = 2; ! break; ! default: ! return 100; ! } ! return in ? ix86_cost->sse_load [index] : ix86_cost->sse_store [index]; ! } ! if (MMX_CLASS_P (class)) ! { ! int index; ! switch (GET_MODE_SIZE (mode)) ! { ! case 4: ! index = 0; ! break; ! case 8: ! index = 1; ! break; ! default: ! return 100; ! } ! return in ? ix86_cost->mmx_load [index] : ix86_cost->mmx_store [index]; ! } ! switch (GET_MODE_SIZE (mode)) ! { ! case 1: ! if (in) ! return (Q_CLASS_P (class) ? ix86_cost->int_load[0] ! : ix86_cost->movzbl_load); ! else ! return (Q_CLASS_P (class) ? ix86_cost->int_store[0] ! : ix86_cost->int_store[0] + 4); ! break; ! case 2: ! return in ? ix86_cost->int_load[1] : ix86_cost->int_store[1]; ! default: ! /* Compute number of 32bit moves needed. TFmode is moved as XFmode. */ ! if (mode == TFmode) ! mode = XFmode; ! return ((in ? ix86_cost->int_load[2] : ix86_cost->int_store[2]) ! * (int) GET_MODE_SIZE (mode) / 4); ! } ! } ! ! #ifdef DO_GLOBAL_CTORS_BODY ! static void ! ix86_svr3_asm_out_constructor (symbol, priority) ! rtx symbol; ! int priority ATTRIBUTE_UNUSED; ! { ! init_section (); ! fputs ("\tpushl $", asm_out_file); ! assemble_name (asm_out_file, XSTR (symbol, 0)); ! fputc ('\n', asm_out_file); ! } ! #endif ! ! /* Order the registers for register allocator. */ ! ! void ! x86_order_regs_for_local_alloc () ! { ! int pos = 0; ! int i; ! ! /* First allocate the local general purpose registers. */ ! for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) ! if (GENERAL_REGNO_P (i) && call_used_regs[i]) ! reg_alloc_order [pos++] = i; ! ! /* Global general purpose registers. */ ! for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) ! if (GENERAL_REGNO_P (i) && !call_used_regs[i]) ! reg_alloc_order [pos++] = i; ! ! /* x87 registers come first in case we are doing FP math ! using them. */ ! if (!TARGET_SSE_MATH) ! for (i = FIRST_STACK_REG; i <= LAST_STACK_REG; i++) ! reg_alloc_order [pos++] = i; ! ! /* SSE registers. */ ! for (i = FIRST_SSE_REG; i <= LAST_SSE_REG; i++) ! reg_alloc_order [pos++] = i; ! for (i = FIRST_REX_SSE_REG; i <= LAST_REX_SSE_REG; i++) ! reg_alloc_order [pos++] = i; ! ! /* x87 registerts. */ ! if (TARGET_SSE_MATH) ! for (i = FIRST_STACK_REG; i <= LAST_STACK_REG; i++) ! reg_alloc_order [pos++] = i; ! ! for (i = FIRST_MMX_REG; i <= LAST_MMX_REG; i++) ! reg_alloc_order [pos++] = i; ! ! /* Initialize the rest of array as we do not allocate some registers ! at all. */ ! while (pos < FIRST_PSEUDO_REGISTER) ! reg_alloc_order [pos++] = 0; } diff -Nrc3pad gcc-3.0.4/gcc/config/i386/i386.h gcc-3.1/gcc/config/i386/i386.h *** gcc-3.0.4/gcc/config/i386/i386.h Mon Aug 6 21:26:25 2001 --- gcc-3.1/gcc/config/i386/i386.h Thu Apr 18 16:06:23 2002 *************** *** 1,6 **** /* Definitions of target machine for GNU compiler for IA-32. Copyright (C) 1988, 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000, ! 2001 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,6 ---- /* Definitions of target machine for GNU compiler for IA-32. Copyright (C) 1988, 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000, ! 2001, 2002 Free Software Foundation, Inc. This file is part of GNU CC. *************** GNU General Public License for more deta *** 17,23 **** 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. */ /* The purpose of this file is to define the characteristics of the i386, independent of assembler syntax or operating system. --- 17,23 ---- 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. */ /* The purpose of this file is to define the characteristics of the i386, independent of assembler syntax or operating system. *************** Boston, MA 02111-1307, USA. */ *** 42,80 **** #define HALF_PIC_NUMBER_REFS 0 #define HALF_PIC_ENCODE(DECL) #define HALF_PIC_DECLARE(NAME) ! #define HALF_PIC_INIT() error ("half-pic init called on systems that don't support it.") #define HALF_PIC_ADDRESS_P(X) 0 ! #define HALF_PIC_PTR(X) X #define HALF_PIC_FINISH(STREAM) #endif /* Define the specific costs for a given cpu */ struct processor_costs { ! int add; /* cost of an add instruction */ ! int lea; /* cost of a lea instruction */ ! int shift_var; /* variable shift costs */ ! int shift_const; /* constant shift costs */ ! int mult_init; /* cost of starting a multiply */ ! int mult_bit; /* cost of multiply per each bit set */ ! int divide; /* cost of a divide/mod */ ! int large_insn; /* insns larger than this cost more */ ! int move_ratio; /* The threshold of number of scalar memory-to-memory move insns. */ ! int movzbl_load; /* cost of loading using movzbl */ ! int int_load[3]; /* cost of loading integer registers in QImode, HImode and SImode relative to reg-reg move (2). */ ! int int_store[3]; /* cost of storing integer register in QImode, HImode and SImode */ ! int fp_move; /* cost of reg,reg fld/fst */ ! int fp_load[3]; /* cost of loading FP register in SFmode, DFmode and XFmode */ ! int fp_store[3]; /* cost of storing FP register in SFmode, DFmode and XFmode */ }; ! extern struct processor_costs *ix86_cost; /* Run-time compilation parameters selecting different hardware subsets. */ --- 42,97 ---- #define HALF_PIC_NUMBER_REFS 0 #define HALF_PIC_ENCODE(DECL) #define HALF_PIC_DECLARE(NAME) ! #define HALF_PIC_INIT() error ("half-pic init called on systems that don't support it") #define HALF_PIC_ADDRESS_P(X) 0 ! #define HALF_PIC_PTR(X) (X) #define HALF_PIC_FINISH(STREAM) #endif /* Define the specific costs for a given cpu */ struct processor_costs { ! const int add; /* cost of an add instruction */ ! const int lea; /* cost of a lea instruction */ ! const int shift_var; /* variable shift costs */ ! const int shift_const; /* constant shift costs */ ! const int mult_init; /* cost of starting a multiply */ ! const int mult_bit; /* cost of multiply per each bit set */ ! const int divide; /* cost of a divide/mod */ ! int movsx; /* The cost of movsx operation. */ ! int movzx; /* The cost of movzx operation. */ ! const int large_insn; /* insns larger than this cost more */ ! const int move_ratio; /* The threshold of number of scalar memory-to-memory move insns. */ ! const int movzbl_load; /* cost of loading using movzbl */ ! const int int_load[3]; /* cost of loading integer registers in QImode, HImode and SImode relative to reg-reg move (2). */ ! const int int_store[3]; /* cost of storing integer register in QImode, HImode and SImode */ ! const int fp_move; /* cost of reg,reg fld/fst */ ! const int fp_load[3]; /* cost of loading FP register in SFmode, DFmode and XFmode */ ! const int fp_store[3]; /* cost of storing FP register in SFmode, DFmode and XFmode */ + const int mmx_move; /* cost of moving MMX register. */ + const int mmx_load[2]; /* cost of loading MMX register + in SImode and DImode */ + const int mmx_store[2]; /* cost of storing MMX register + in SImode and DImode */ + const int sse_move; /* cost of moving SSE register. */ + const int sse_load[3]; /* cost of loading SSE register + in SImode, DImode and TImode*/ + const int sse_store[3]; /* cost of storing SSE register + in SImode, DImode and TImode*/ + const int mmxsse_to_integer; /* cost of moving mmxsse register to + integer and vice versa. */ + const int prefetch_block; /* bytes moved to cache for prefetch. */ + const int simultaneous_prefetches; /* number of parallel prefetch + operations. */ }; ! extern const struct processor_costs *ix86_cost; /* Run-time compilation parameters selecting different hardware subsets. */ *************** extern int target_flags; *** 98,115 **** #define MASK_NO_FANCY_MATH_387 0x00000040 /* Disable sin, cos, sqrt */ #define MASK_OMIT_LEAF_FRAME_POINTER 0x080 /* omit leaf frame pointers */ #define MASK_STACK_PROBE 0x00000100 /* Enable stack probing */ ! #define MASK_NO_ALIGN_STROPS 0x00001000 /* Enable aligning of string ops. */ ! #define MASK_INLINE_ALL_STROPS 0x00002000 /* Inline stringops in all cases */ ! #define MASK_NO_PUSH_ARGS 0x00004000 /* Use push instructions */ ! #define MASK_ACCUMULATE_OUTGOING_ARGS 0x00008000/* Accumulate outgoing args */ ! #define MASK_MMX 0x00010000 /* Support MMX regs/builtins */ ! #define MASK_SSE 0x00020000 /* Support SSE regs/builtins */ ! #define MASK_128BIT_LONG_DOUBLE 0x00040000 /* long double size is 128bit */ ! ! /* Temporary codegen switches */ ! #define MASK_INTEL_SYNTAX 0x00000200 ! #define MASK_DEBUG_ARG 0x00000400 /* function_arg */ ! #define MASK_DEBUG_ADDR 0x00000800 /* GO_IF_LEGITIMATE_ADDRESS */ /* Use the floating point instructions */ #define TARGET_80387 (target_flags & MASK_80387) --- 115,139 ---- #define MASK_NO_FANCY_MATH_387 0x00000040 /* Disable sin, cos, sqrt */ #define MASK_OMIT_LEAF_FRAME_POINTER 0x080 /* omit leaf frame pointers */ #define MASK_STACK_PROBE 0x00000100 /* Enable stack probing */ ! #define MASK_NO_ALIGN_STROPS 0x00000200 /* Enable aligning of string ops. */ ! #define MASK_INLINE_ALL_STROPS 0x00000400 /* Inline stringops in all cases */ ! #define MASK_NO_PUSH_ARGS 0x00000800 /* Use push instructions */ ! #define MASK_ACCUMULATE_OUTGOING_ARGS 0x00001000/* Accumulate outgoing args */ ! #define MASK_ACCUMULATE_OUTGOING_ARGS_SET 0x00002000 ! #define MASK_MMX 0x00004000 /* Support MMX regs/builtins */ ! #define MASK_MMX_SET 0x00008000 ! #define MASK_SSE 0x00010000 /* Support SSE regs/builtins */ ! #define MASK_SSE_SET 0x00020000 ! #define MASK_SSE2 0x00040000 /* Support SSE2 regs/builtins */ ! #define MASK_SSE2_SET 0x00080000 ! #define MASK_3DNOW 0x00100000 /* Support 3Dnow builtins */ ! #define MASK_3DNOW_SET 0x00200000 ! #define MASK_3DNOW_A 0x00400000 /* Support Athlon 3Dnow builtins */ ! #define MASK_3DNOW_A_SET 0x00800000 ! #define MASK_128BIT_LONG_DOUBLE 0x01000000 /* long double size is 128bit */ ! #define MASK_64BIT 0x02000000 /* Produce 64bit code */ ! /* ... overlap with subtarget options starts by 0x04000000. */ ! #define MASK_NO_RED_ZONE 0x04000000 /* Do not use red zone */ /* Use the floating point instructions */ #define TARGET_80387 (target_flags & MASK_80387) *************** extern int target_flags; *** 142,152 **** /* Functions that return a floating point value may return that value in the 387 FPU or in 386 integer registers. If set, this flag causes ! the 387 to be used, which is compatible with most calling conventions. */ #define TARGET_FLOAT_RETURNS_IN_80387 (target_flags & MASK_FLOAT_RETURNS) /* Long double is 128bit instead of 96bit, even when only 80bits are used. ! This mode wastes cache, but avoid missaligned data accesses and simplifies address calculations. */ #define TARGET_128BIT_LONG_DOUBLE (target_flags & MASK_128BIT_LONG_DOUBLE) --- 166,176 ---- /* Functions that return a floating point value may return that value in the 387 FPU or in 386 integer registers. If set, this flag causes ! the 387 to be used, which is compatible with most calling conventions. */ #define TARGET_FLOAT_RETURNS_IN_80387 (target_flags & MASK_FLOAT_RETURNS) /* Long double is 128bit instead of 96bit, even when only 80bits are used. ! This mode wastes cache, but avoid misaligned data accesses and simplifies address calculations. */ #define TARGET_128BIT_LONG_DOUBLE (target_flags & MASK_128BIT_LONG_DOUBLE) *************** extern int target_flags; *** 159,168 **** (target_flags & MASK_OMIT_LEAF_FRAME_POINTER) /* Debug GO_IF_LEGITIMATE_ADDRESS */ ! #define TARGET_DEBUG_ADDR (target_flags & MASK_DEBUG_ADDR) /* Debug FUNCTION_ARG macros */ ! #define TARGET_DEBUG_ARG (target_flags & MASK_DEBUG_ARG) #define TARGET_386 (ix86_cpu == PROCESSOR_I386) #define TARGET_486 (ix86_cpu == PROCESSOR_I486) --- 183,203 ---- (target_flags & MASK_OMIT_LEAF_FRAME_POINTER) /* Debug GO_IF_LEGITIMATE_ADDRESS */ ! #define TARGET_DEBUG_ADDR (ix86_debug_addr_string != 0) /* Debug FUNCTION_ARG macros */ ! #define TARGET_DEBUG_ARG (ix86_debug_arg_string != 0) ! ! /* 64bit Sledgehammer mode */ ! #ifdef TARGET_BI_ARCH ! #define TARGET_64BIT (target_flags & MASK_64BIT) ! #else ! #ifdef TARGET_64BIT_DEFAULT ! #define TARGET_64BIT 1 ! #else ! #define TARGET_64BIT 0 ! #endif ! #endif #define TARGET_386 (ix86_cpu == PROCESSOR_I386) #define TARGET_486 (ix86_cpu == PROCESSOR_I486) *************** extern int target_flags; *** 170,180 **** #define TARGET_PENTIUMPRO (ix86_cpu == PROCESSOR_PENTIUMPRO) #define TARGET_K6 (ix86_cpu == PROCESSOR_K6) #define TARGET_ATHLON (ix86_cpu == PROCESSOR_ATHLON) #define CPUMASK (1 << ix86_cpu) extern const int x86_use_leave, x86_push_memory, x86_zero_extend_with_and; extern const int x86_use_bit_test, x86_cmove, x86_deep_branch; ! extern const int x86_unroll_strlen, x86_use_q_reg, x86_use_any_reg; extern const int x86_double_with_add, x86_partial_reg_stall, x86_movx; extern const int x86_use_loop, x86_use_fiop, x86_use_mov0; extern const int x86_use_cltd, x86_read_modify_write; --- 205,216 ---- #define TARGET_PENTIUMPRO (ix86_cpu == PROCESSOR_PENTIUMPRO) #define TARGET_K6 (ix86_cpu == PROCESSOR_K6) #define TARGET_ATHLON (ix86_cpu == PROCESSOR_ATHLON) + #define TARGET_PENTIUM4 (ix86_cpu == PROCESSOR_PENTIUM4) #define CPUMASK (1 << ix86_cpu) extern const int x86_use_leave, x86_push_memory, x86_zero_extend_with_and; extern const int x86_use_bit_test, x86_cmove, x86_deep_branch; ! extern const int x86_branch_hints, x86_unroll_strlen; extern const int x86_double_with_add, x86_partial_reg_stall, x86_movx; extern const int x86_use_loop, x86_use_fiop, x86_use_mov0; extern const int x86_use_cltd, x86_read_modify_write; *************** extern const int x86_himode_math, x86_qi *** 184,201 **** extern const int x86_promote_hi_regs, x86_integer_DFmode_moves; extern const int x86_add_esp_4, x86_add_esp_8, x86_sub_esp_4, x86_sub_esp_8; extern const int x86_partial_reg_dependency, x86_memory_mismatch_stall; #define TARGET_USE_LEAVE (x86_use_leave & CPUMASK) #define TARGET_PUSH_MEMORY (x86_push_memory & CPUMASK) #define TARGET_ZERO_EXTEND_WITH_AND (x86_zero_extend_with_and & CPUMASK) #define TARGET_USE_BIT_TEST (x86_use_bit_test & CPUMASK) #define TARGET_UNROLL_STRLEN (x86_unroll_strlen & CPUMASK) ! #define TARGET_USE_Q_REG (x86_use_q_reg & CPUMASK) ! #define TARGET_USE_ANY_REG (x86_use_any_reg & CPUMASK) ! #define TARGET_CMOVE (x86_cmove & (1 << ix86_arch)) #define TARGET_DEEP_BRANCH_PREDICTION (x86_deep_branch & CPUMASK) #define TARGET_DOUBLE_WITH_ADD (x86_double_with_add & CPUMASK) ! #define TARGET_USE_SAHF (x86_use_sahf & CPUMASK) #define TARGET_MOVX (x86_movx & CPUMASK) #define TARGET_PARTIAL_REG_STALL (x86_partial_reg_stall & CPUMASK) #define TARGET_USE_LOOP (x86_use_loop & CPUMASK) --- 220,242 ---- extern const int x86_promote_hi_regs, x86_integer_DFmode_moves; extern const int x86_add_esp_4, x86_add_esp_8, x86_sub_esp_4, x86_sub_esp_8; extern const int x86_partial_reg_dependency, x86_memory_mismatch_stall; + extern const int x86_accumulate_outgoing_args, x86_prologue_using_move; + extern const int x86_epilogue_using_move, x86_decompose_lea; + extern const int x86_arch_always_fancy_math_387; + extern int x86_prefetch_sse; #define TARGET_USE_LEAVE (x86_use_leave & CPUMASK) #define TARGET_PUSH_MEMORY (x86_push_memory & CPUMASK) #define TARGET_ZERO_EXTEND_WITH_AND (x86_zero_extend_with_and & CPUMASK) #define TARGET_USE_BIT_TEST (x86_use_bit_test & CPUMASK) #define TARGET_UNROLL_STRLEN (x86_unroll_strlen & CPUMASK) ! /* For sane SSE instruction set generation we need fcomi instruction. It is ! safe to enable all CMOVE instructions. */ ! #define TARGET_CMOVE ((x86_cmove & (1 << ix86_arch)) || TARGET_SSE) #define TARGET_DEEP_BRANCH_PREDICTION (x86_deep_branch & CPUMASK) + #define TARGET_BRANCH_PREDICTION_HINTS (x86_branch_hints & CPUMASK) #define TARGET_DOUBLE_WITH_ADD (x86_double_with_add & CPUMASK) ! #define TARGET_USE_SAHF ((x86_use_sahf & CPUMASK) && !TARGET_64BIT) #define TARGET_MOVX (x86_movx & CPUMASK) #define TARGET_PARTIAL_REG_STALL (x86_partial_reg_stall & CPUMASK) #define TARGET_USE_LOOP (x86_use_loop & CPUMASK) *************** extern const int x86_partial_reg_depende *** 218,233 **** #define TARGET_INTEGER_DFMODE_MOVES (x86_integer_DFmode_moves & CPUMASK) #define TARGET_PARTIAL_REG_DEPENDENCY (x86_partial_reg_dependency & CPUMASK) #define TARGET_MEMORY_MISMATCH_STALL (x86_memory_mismatch_stall & CPUMASK) #define TARGET_STACK_PROBE (target_flags & MASK_STACK_PROBE) #define TARGET_ALIGN_STRINGOPS (!(target_flags & MASK_NO_ALIGN_STROPS)) #define TARGET_INLINE_ALL_STRINGOPS (target_flags & MASK_INLINE_ALL_STROPS) ! #define ASSEMBLER_DIALECT ((target_flags & MASK_INTEL_SYNTAX) != 0) ! #define TARGET_SSE ((target_flags & MASK_SSE) != 0) #define TARGET_MMX ((target_flags & MASK_MMX) != 0) #define TARGET_SWITCHES \ { { "80387", MASK_80387, N_("Use hardware fp") }, \ --- 259,291 ---- #define TARGET_INTEGER_DFMODE_MOVES (x86_integer_DFmode_moves & CPUMASK) #define TARGET_PARTIAL_REG_DEPENDENCY (x86_partial_reg_dependency & CPUMASK) #define TARGET_MEMORY_MISMATCH_STALL (x86_memory_mismatch_stall & CPUMASK) + #define TARGET_PROLOGUE_USING_MOVE (x86_prologue_using_move & CPUMASK) + #define TARGET_EPILOGUE_USING_MOVE (x86_epilogue_using_move & CPUMASK) + #define TARGET_DECOMPOSE_LEA (x86_decompose_lea & CPUMASK) + #define TARGET_PREFETCH_SSE (x86_prefetch_sse) #define TARGET_STACK_PROBE (target_flags & MASK_STACK_PROBE) #define TARGET_ALIGN_STRINGOPS (!(target_flags & MASK_NO_ALIGN_STROPS)) #define TARGET_INLINE_ALL_STRINGOPS (target_flags & MASK_INLINE_ALL_STROPS) ! #define ASSEMBLER_DIALECT (ix86_asm_dialect) ! #define TARGET_SSE ((target_flags & (MASK_SSE | MASK_SSE2)) != 0) ! #define TARGET_SSE2 ((target_flags & MASK_SSE2) != 0) ! #define TARGET_SSE_MATH ((ix86_fpmath & FPMATH_SSE) != 0) ! #define TARGET_MIX_SSE_I387 ((ix86_fpmath & FPMATH_SSE) \ ! && (ix86_fpmath & FPMATH_387)) #define TARGET_MMX ((target_flags & MASK_MMX) != 0) + #define TARGET_3DNOW ((target_flags & MASK_3DNOW) != 0) + #define TARGET_3DNOW_A ((target_flags & MASK_3DNOW_A) != 0) + + #define TARGET_RED_ZONE (!(target_flags & MASK_NO_RED_ZONE)) + + /* WARNING: Do not mark empty strings for translation, as calling + gettext on an empty string does NOT return an empty + string. */ + #define TARGET_SWITCHES \ { { "80387", MASK_80387, N_("Use hardware fp") }, \ *************** extern const int x86_partial_reg_depende *** 235,244 **** { "hard-float", MASK_80387, N_("Use hardware fp") }, \ { "soft-float", -MASK_80387, N_("Do not use hardware fp") }, \ { "no-soft-float", MASK_80387, N_("Use hardware fp") }, \ ! { "386", 0, N_("Same as -mcpu=i386") }, \ ! { "486", 0, N_("Same as -mcpu=i486") }, \ ! { "pentium", 0, N_("Same as -mcpu=pentium") }, \ ! { "pentiumpro", 0, N_("Same as -mcpu=pentiumpro") }, \ { "rtd", MASK_RTD, \ N_("Alternate calling convention") }, \ { "no-rtd", -MASK_RTD, \ --- 293,304 ---- { "hard-float", MASK_80387, N_("Use hardware fp") }, \ { "soft-float", -MASK_80387, N_("Do not use hardware fp") }, \ { "no-soft-float", MASK_80387, N_("Use hardware fp") }, \ ! { "386", 0, "" /*Deprecated.*/}, \ ! { "486", 0, "" /*Deprecated.*/}, \ ! { "pentium", 0, "" /*Deprecated.*/}, \ ! { "pentiumpro", 0, "" /*Deprecated.*/}, \ ! { "intel-syntax", 0, "" /*Deprecated.*/}, \ ! { "no-intel-syntax", 0, "" /*Deprecated.*/}, \ { "rtd", MASK_RTD, \ N_("Alternate calling convention") }, \ { "no-rtd", -MASK_RTD, \ *************** extern const int x86_partial_reg_depende *** 266,283 **** { "omit-leaf-frame-pointer", MASK_OMIT_LEAF_FRAME_POINTER, \ N_("Omit the frame pointer in leaf functions") }, \ { "no-omit-leaf-frame-pointer",-MASK_OMIT_LEAF_FRAME_POINTER, "" }, \ - { "debug-addr", MASK_DEBUG_ADDR, 0 /* undocumented */ }, \ - { "no-debug-addr", -MASK_DEBUG_ADDR, 0 /* undocumented */ }, \ - { "debug-arg", MASK_DEBUG_ARG, 0 /* undocumented */ }, \ - { "no-debug-arg", -MASK_DEBUG_ARG, 0 /* undocumented */ }, \ { "stack-arg-probe", MASK_STACK_PROBE, \ N_("Enable stack probing") }, \ { "no-stack-arg-probe", -MASK_STACK_PROBE, "" }, \ { "windows", 0, 0 /* undocumented */ }, \ { "dll", 0, 0 /* undocumented */ }, \ - { "intel-syntax", MASK_INTEL_SYNTAX, \ - N_("Emit Intel syntax assembler opcodes") }, \ - { "no-intel-syntax", -MASK_INTEL_SYNTAX, "" }, \ { "align-stringops", -MASK_NO_ALIGN_STROPS, \ N_("Align destination of the string operations") }, \ { "no-align-stringops", MASK_NO_ALIGN_STROPS, \ --- 326,336 ---- *************** extern const int x86_partial_reg_depende *** 290,306 **** N_("Use push instructions to save outgoing arguments") }, \ { "no-push-args", MASK_NO_PUSH_ARGS, \ N_("Do not use push instructions to save outgoing arguments") }, \ ! { "accumulate-outgoing-args", MASK_ACCUMULATE_OUTGOING_ARGS, \ N_("Use push instructions to save outgoing arguments") }, \ ! { "no-accumulate-outgoing-args",-MASK_ACCUMULATE_OUTGOING_ARGS, \ N_("Do not use push instructions to save outgoing arguments") }, \ { "128bit-long-double", MASK_128BIT_LONG_DOUBLE, \ ! N_("sizeof(long double) is 16.") }, \ { "96bit-long-double", -MASK_128BIT_LONG_DOUBLE, \ ! N_("sizeof(long double) is 12.") }, \ SUBTARGET_SWITCHES \ { "", TARGET_DEFAULT, 0 }} /* Which processor to schedule for. The cpu attribute defines a list that mirrors this list, so changes to i386.md must be made at the same time. */ --- 343,394 ---- N_("Use push instructions to save outgoing arguments") }, \ { "no-push-args", MASK_NO_PUSH_ARGS, \ N_("Do not use push instructions to save outgoing arguments") }, \ ! { "accumulate-outgoing-args", (MASK_ACCUMULATE_OUTGOING_ARGS \ ! | MASK_ACCUMULATE_OUTGOING_ARGS_SET), \ N_("Use push instructions to save outgoing arguments") }, \ ! { "no-accumulate-outgoing-args",MASK_ACCUMULATE_OUTGOING_ARGS_SET, \ N_("Do not use push instructions to save outgoing arguments") }, \ + { "mmx", MASK_MMX | MASK_MMX_SET, \ + N_("Support MMX built-in functions") }, \ + { "no-mmx", -MASK_MMX, \ + N_("Do not support MMX built-in functions") }, \ + { "no-mmx", MASK_MMX_SET, "" }, \ + { "3dnow", MASK_3DNOW | MASK_3DNOW_SET, \ + N_("Support 3DNow! built-in functions") }, \ + { "no-3dnow", -MASK_3DNOW, "" }, \ + { "no-3dnow", MASK_3DNOW_SET, \ + N_("Do not support 3DNow! built-in functions") }, \ + { "sse", MASK_SSE | MASK_SSE_SET, \ + N_("Support MMX and SSE built-in functions and code generation") }, \ + { "no-sse", -MASK_SSE, "" }, \ + { "no-sse", MASK_SSE_SET, \ + N_("Do not support MMX and SSE built-in functions and code generation") },\ + { "sse2", MASK_SSE2 | MASK_SSE2_SET, \ + N_("Support MMX, SSE and SSE2 built-in functions and code generation") }, \ + { "no-sse2", -MASK_SSE2, "" }, \ + { "no-sse2", MASK_SSE2_SET, \ + N_("Do not support MMX, SSE and SSE2 built-in functions and code generation") }, \ { "128bit-long-double", MASK_128BIT_LONG_DOUBLE, \ ! N_("sizeof(long double) is 16") }, \ { "96bit-long-double", -MASK_128BIT_LONG_DOUBLE, \ ! N_("sizeof(long double) is 12") }, \ ! { "64", MASK_64BIT, \ ! N_("Generate 64bit x86-64 code") }, \ ! { "32", -MASK_64BIT, \ ! N_("Generate 32bit i386 code") }, \ ! { "red-zone", -MASK_NO_RED_ZONE, \ ! N_("Use red-zone in the x86-64 code") }, \ ! { "no-red-zone", MASK_NO_RED_ZONE, \ ! N_("Do not use red-zone in the x86-64 code") }, \ SUBTARGET_SWITCHES \ { "", TARGET_DEFAULT, 0 }} + #ifdef TARGET_64BIT_DEFAULT + #define TARGET_DEFAULT (MASK_64BIT | TARGET_SUBTARGET_DEFAULT) + #else + #define TARGET_DEFAULT TARGET_SUBTARGET_DEFAULT + #endif + /* Which processor to schedule for. The cpu attribute defines a list that mirrors this list, so changes to i386.md must be made at the same time. */ *************** enum processor_type *** 312,321 **** --- 400,416 ---- PROCESSOR_PENTIUMPRO, PROCESSOR_K6, PROCESSOR_ATHLON, + PROCESSOR_PENTIUM4, PROCESSOR_max }; + enum fpmath_unit + { + FPMATH_387 = 1, + FPMATH_SSE = 2 + }; extern enum processor_type ix86_cpu; + extern enum fpmath_unit ix86_fpmath; extern int ix86_arch; *************** extern int ix86_arch; *** 331,340 **** #define TARGET_OPTIONS \ { { "cpu=", &ix86_cpu_string, \ N_("Schedule code for given CPU")}, \ { "arch=", &ix86_arch_string, \ N_("Generate code for given CPU")}, \ - { "reg-alloc=", &ix86_reg_alloc_order, \ - N_("Control allocation order of integer registers") }, \ { "regparm=", &ix86_regparm_string, \ N_("Number of registers used to pass integer arguments") }, \ { "align-loops=", &ix86_align_loops_string, \ --- 426,435 ---- #define TARGET_OPTIONS \ { { "cpu=", &ix86_cpu_string, \ N_("Schedule code for given CPU")}, \ + { "fpmath=", &ix86_fpmath_string, \ + N_("Generate floating point mathematics using given instruction set")},\ { "arch=", &ix86_arch_string, \ N_("Generate code for given CPU")}, \ { "regparm=", &ix86_regparm_string, \ N_("Number of registers used to pass integer arguments") }, \ { "align-loops=", &ix86_align_loops_string, \ *************** extern int ix86_arch; *** 348,353 **** --- 443,456 ---- N_("Attempt to keep stack aligned to this power of 2") }, \ { "branch-cost=", &ix86_branch_cost_string, \ N_("Branches are this expensive (1-5, arbitrary units)") }, \ + { "cmodel=", &ix86_cmodel_string, \ + N_("Use given x86-64 code model") }, \ + { "debug-arg", &ix86_debug_arg_string, \ + "" /* Undocumented. */ }, \ + { "debug-addr", &ix86_debug_addr_string, \ + "" /* Undocumented. */ }, \ + { "asm=", &ix86_asm_string, \ + N_("Use given assembler dialect") }, \ SUBTARGET_OPTIONS \ } *************** extern int ix86_arch; *** 367,373 **** #define SUBTARGET_OPTIONS /* Define this to change the optimizations performed by default. */ ! #define OPTIMIZATION_OPTIONS(LEVEL,SIZE) optimization_options(LEVEL,SIZE) /* Specs for the compiler proper */ --- 470,477 ---- #define SUBTARGET_OPTIONS /* Define this to change the optimizations performed by default. */ ! #define OPTIMIZATION_OPTIONS(LEVEL, SIZE) \ ! optimization_options ((LEVEL), (SIZE)) /* Specs for the compiler proper */ *************** extern int ix86_arch; *** 381,430 **** %{mpentium:-mcpu=pentium \ %n`-mpentium' is deprecated. Use `-march=pentium' or `-mcpu=pentium' instead.\n} \ %{mpentiumpro:-mcpu=pentiumpro \ ! %n`-mpentiumpro' is deprecated. Use `-march=pentiumpro' or `-mcpu=pentiumpro' instead.\n}}" #endif #ifndef CPP_CPU_DEFAULT_SPEC ! #if TARGET_CPU_DEFAULT == 1 #define CPP_CPU_DEFAULT_SPEC "-D__tune_i486__" #endif ! #if TARGET_CPU_DEFAULT == 2 #define CPP_CPU_DEFAULT_SPEC "-D__tune_i586__ -D__tune_pentium__" #endif ! #if TARGET_CPU_DEFAULT == 3 #define CPP_CPU_DEFAULT_SPEC "-D__tune_i686__ -D__tune_pentiumpro__" #endif ! #if TARGET_CPU_DEFAULT == 4 #define CPP_CPU_DEFAULT_SPEC "-D__tune_k6__" #endif ! #if TARGET_CPU_DEFAULT == 5 #define CPP_CPU_DEFAULT_SPEC "-D__tune_athlon__" #endif #ifndef CPP_CPU_DEFAULT_SPEC #define CPP_CPU_DEFAULT_SPEC "-D__tune_i386__" #endif #endif /* CPP_CPU_DEFAULT_SPEC */ ! #ifndef CPP_CPU_SPEC ! #define CPP_CPU_SPEC "\ ! -Acpu=i386 -Amachine=i386 \ ! %{!ansi:%{!std=c*:%{!std=i*:-Di386}}} -D__i386 -D__i386__ \ %{march=i386:%{!mcpu*:-D__tune_i386__ }}\ %{march=i486:-D__i486 -D__i486__ %{!mcpu*:-D__tune_i486__ }}\ %{march=pentium|march=i586:-D__i586 -D__i586__ -D__pentium -D__pentium__ \ %{!mcpu*:-D__tune_i586__ -D__tune_pentium__ }}\ %{march=pentiumpro|march=i686:-D__i686 -D__i686__ \ -D__pentiumpro -D__pentiumpro__ \ %{!mcpu*:-D__tune_i686__ -D__tune_pentiumpro__ }}\ %{march=k6:-D__k6 -D__k6__ %{!mcpu*:-D__tune_k6__ }}\ ! %{march=athlon:-D__athlon -D__athlon__ %{!mcpu*:-D__tune_athlon__ }}\ %{m386|mcpu=i386:-D__tune_i386__ }\ %{m486|mcpu=i486:-D__tune_i486__ }\ ! %{mpentium|mcpu=pentium|mcpu=i586:-D__tune_i586__ -D__tune_pentium__ }\ ! %{mpentiumpro|mcpu=pentiumpro|mcpu=i686:-D__tune_i686__ -D__tune_pentiumpro__ }\ ! %{mcpu=k6:-D__tune_k6__ }\ ! %{mcpu=athlon:-D__tune_athlon__ }\ %{!march*:%{!mcpu*:%{!m386:%{!m486:%{!mpentium*:%(cpp_cpu_default)}}}}}" #endif #ifndef CC1_SPEC --- 485,641 ---- %{mpentium:-mcpu=pentium \ %n`-mpentium' is deprecated. Use `-march=pentium' or `-mcpu=pentium' instead.\n} \ %{mpentiumpro:-mcpu=pentiumpro \ ! %n`-mpentiumpro' is deprecated. Use `-march=pentiumpro' or `-mcpu=pentiumpro' instead.\n}} \ ! %{mintel-syntax:-masm=intel \ ! %n`-mintel-syntax' is deprecated. Use `-masm=intel' instead.\n} \ ! %{mno-intel-syntax:-masm=att \ ! %n`-mno-intel-syntax' is deprecated. Use `-masm=att' instead.\n}" #endif + #define TARGET_CPU_DEFAULT_i386 0 + #define TARGET_CPU_DEFAULT_i486 1 + #define TARGET_CPU_DEFAULT_pentium 2 + #define TARGET_CPU_DEFAULT_pentium_mmx 3 + #define TARGET_CPU_DEFAULT_pentiumpro 4 + #define TARGET_CPU_DEFAULT_pentium2 5 + #define TARGET_CPU_DEFAULT_pentium3 6 + #define TARGET_CPU_DEFAULT_pentium4 7 + #define TARGET_CPU_DEFAULT_k6 8 + #define TARGET_CPU_DEFAULT_k6_2 9 + #define TARGET_CPU_DEFAULT_k6_3 10 + #define TARGET_CPU_DEFAULT_athlon 11 + #define TARGET_CPU_DEFAULT_athlon_sse 12 + + #define TARGET_CPU_DEFAULT_NAMES {"i386", "i486", "pentium", "pentium-mmx",\ + "pentiumpro", "pentium2", "pentium3", \ + "pentium4", "k6", "k6-2", "k6-3",\ + "athlon", "athlon-4"} #ifndef CPP_CPU_DEFAULT_SPEC ! #if TARGET_CPU_DEFAULT == TARGET_CPU_DEFAULT_i486 #define CPP_CPU_DEFAULT_SPEC "-D__tune_i486__" #endif ! #if TARGET_CPU_DEFAULT == TARGET_CPU_DEFAULT_pentium #define CPP_CPU_DEFAULT_SPEC "-D__tune_i586__ -D__tune_pentium__" #endif ! #if TARGET_CPU_DEFAULT == TARGET_CPU_DEFAULT_pentium_mmx ! #define CPP_CPU_DEFAULT_SPEC "-D__tune_i586__ -D__tune_pentium__ -D__tune_pentium_mmx__" ! #endif ! #if TARGET_CPU_DEFAULT == TARGET_CPU_DEFAULT_pentiumpro #define CPP_CPU_DEFAULT_SPEC "-D__tune_i686__ -D__tune_pentiumpro__" #endif ! #if TARGET_CPU_DEFAULT == TARGET_CPU_DEFAULT_pentium2 ! #define CPP_CPU_DEFAULT_SPEC "-D__tune_i686__ -D__tune_pentiumpro__\ ! -D__tune_pentium2__" ! #endif ! #if TARGET_CPU_DEFAULT == TARGET_CPU_DEFAULT_pentium3 ! #define CPP_CPU_DEFAULT_SPEC "-D__tune_i686__ -D__tune_pentiumpro__\ ! -D__tune_pentium2__ -D__tune_pentium3__" ! #endif ! #if TARGET_CPU_DEFAULT == TARGET_CPU_DEFAULT_pentium4 ! #define CPP_CPU_DEFAULT_SPEC "-D__tune_pentium4__" ! #endif ! #if TARGET_CPU_DEFAULT == TARGET_CPU_DEFAULT_k6 #define CPP_CPU_DEFAULT_SPEC "-D__tune_k6__" #endif ! #if TARGET_CPU_DEFAULT == TARGET_CPU_DEFAULT_k6_2 ! #define CPP_CPU_DEFAULT_SPEC "-D__tune_k6__ -D__tune_k6_2__" ! #endif ! #if TARGET_CPU_DEFAULT == TARGET_CPU_DEFAULT_k6_3 ! #define CPP_CPU_DEFAULT_SPEC "-D__tune_k6__ -D__tune_k6_3__" ! #endif ! #if TARGET_CPU_DEFAULT == TARGET_CPU_DEFAULT_athlon #define CPP_CPU_DEFAULT_SPEC "-D__tune_athlon__" #endif + #if TARGET_CPU_DEFAULT == TARGET_CPU_DEFAULT_athlon_sse + #define CPP_CPU_DEFAULT_SPEC "-D__tune_athlon__ -D__tune_athlon_sse__" + #endif #ifndef CPP_CPU_DEFAULT_SPEC #define CPP_CPU_DEFAULT_SPEC "-D__tune_i386__" #endif #endif /* CPP_CPU_DEFAULT_SPEC */ ! #ifdef TARGET_BI_ARCH ! #define NO_BUILTIN_SIZE_TYPE ! #define NO_BUILTIN_PTRDIFF_TYPE ! #endif ! ! #ifdef NO_BUILTIN_SIZE_TYPE ! #define CPP_CPU32_SIZE_TYPE_SPEC \ ! " -D__SIZE_TYPE__=unsigned\\ int -D__PTRDIFF_TYPE__=int" ! #define CPP_CPU64_SIZE_TYPE_SPEC \ ! " -D__SIZE_TYPE__=unsigned\\ long\\ int -D__PTRDIFF_TYPE__=long\\ int" ! #else ! #define CPP_CPU32_SIZE_TYPE_SPEC "" ! #define CPP_CPU64_SIZE_TYPE_SPEC "" ! #endif ! ! #define CPP_CPU32_SPEC \ ! "-Acpu=i386 -Amachine=i386 %{!ansi:%{!std=c*:%{!std=i*:-Di386}}} -D__i386 \ ! -D__i386__ %(cpp_cpu32sizet)" ! ! #define CPP_CPU64_SPEC \ ! "-Acpu=x86_64 -Amachine=x86_64 -D__x86_64 -D__x86_64__ %(cpp_cpu64sizet)" ! ! #define CPP_CPUCOMMON_SPEC "\ %{march=i386:%{!mcpu*:-D__tune_i386__ }}\ %{march=i486:-D__i486 -D__i486__ %{!mcpu*:-D__tune_i486__ }}\ %{march=pentium|march=i586:-D__i586 -D__i586__ -D__pentium -D__pentium__ \ %{!mcpu*:-D__tune_i586__ -D__tune_pentium__ }}\ + %{march=pentium-mmx:-D__i586 -D__i586__ -D__pentium -D__pentium__ \ + -D__pentium__mmx__ \ + %{!mcpu*:-D__tune_i586__ -D__tune_pentium__ -D__tune_pentium_mmx__}}\ %{march=pentiumpro|march=i686:-D__i686 -D__i686__ \ -D__pentiumpro -D__pentiumpro__ \ %{!mcpu*:-D__tune_i686__ -D__tune_pentiumpro__ }}\ %{march=k6:-D__k6 -D__k6__ %{!mcpu*:-D__tune_k6__ }}\ ! %{march=k6-2:-D__k6 -D__k6__ -D__k6_2__ \ ! %{!mcpu*:-D__tune_k6__ -D__tune_k6_2__ }}\ ! %{march=k6-3:-D__k6 -D__k6__ -D__k6_3__ \ ! %{!mcpu*:-D__tune_k6__ -D__tune_k6_3__ }}\ ! %{march=athlon|march=athlon-tbird:-D__athlon -D__athlon__ \ ! %{!mcpu*:-D__tune_athlon__ }}\ ! %{march=athlon-4|march=athlon-xp|march=athlon-mp:-D__athlon -D__athlon__ \ ! -D__athlon_sse__ \ ! %{!mcpu*:-D__tune_athlon__ -D__tune_athlon_sse__ }}\ ! %{march=pentium4:-D__pentium4 -D__pentium4__ %{!mcpu*:-D__tune_pentium4__ }}\ %{m386|mcpu=i386:-D__tune_i386__ }\ %{m486|mcpu=i486:-D__tune_i486__ }\ ! %{mpentium|mcpu=pentium|mcpu=i586|mcpu=pentium-mmx:-D__tune_i586__ -D__tune_pentium__ }\ ! %{mpentiumpro|mcpu=pentiumpro|mcpu=i686|cpu=pentium2|cpu=pentium3:-D__tune_i686__ \ ! -D__tune_pentiumpro__ }\ ! %{mcpu=k6|mcpu=k6-2|mcpu=k6-3:-D__tune_k6__ }\ ! %{mcpu=athlon|mcpu=athlon-tbird|mcpu=athlon-4|mcpu=athlon-xp|mcpu=athlon-mp:\ ! -D__tune_athlon__ }\ ! %{mcpu=athlon-4|mcpu=athlon-xp|mcpu=athlon-mp:\ ! -D__tune_athlon_sse__ }\ ! %{mcpu=pentium4:-D__tune_pentium4__ }\ ! %{march=athlon-tbird|march=athlon-xp|march=athlon-mp|march=pentium3|march=pentium4:\ ! -D__SSE__ }\ ! %{march=pentium-mmx|march=k6|march=k6-2|march=k6-3\ ! |march=athlon|march=athlon-tbird|march=athlon-4|march=athlon-xp\ ! |march=athlon-mp|march=pentium2|march=pentium3|march=pentium4: -D__MMX__ }\ ! %{march=k6-2|march=k6-3\ ! |march=athlon|march=athlon-tbird|march=athlon-4|march=athlon-xp\ ! |march=athlon-mp: -D__3dNOW__ }\ ! %{march=athlon|march=athlon-tbird|march=athlon-4|march=athlon-xp\ ! |march=athlon-mp: -D__3dNOW_A__ }\ ! %{march=pentium4: -D__SSE2__ }\ %{!march*:%{!mcpu*:%{!m386:%{!m486:%{!mpentium*:%(cpp_cpu_default)}}}}}" + + #ifndef CPP_CPU_SPEC + #ifdef TARGET_BI_ARCH + #ifdef TARGET_64BIT_DEFAULT + #define CPP_CPU_SPEC "%{m32:%(cpp_cpu32)}%{!m32:%(cpp_cpu64)} %(cpp_cpucommon)" + #else + #define CPP_CPU_SPEC "%{m64:%(cpp_cpu64)}%{!m64:%(cpp_cpu32)} %(cpp_cpucommon)" + #endif + #else + #ifdef TARGET_64BIT_DEFAULT + #define CPP_CPU_SPEC "%(cpp_cpu64) %(cpp_cpucommon)" + #else + #define CPP_CPU_SPEC "%(cpp_cpu32) %(cpp_cpucommon)" + #endif + #endif #endif #ifndef CC1_SPEC *************** extern int ix86_arch; *** 448,453 **** --- 659,669 ---- #define EXTRA_SPECS \ { "cpp_cpu_default", CPP_CPU_DEFAULT_SPEC }, \ { "cpp_cpu", CPP_CPU_SPEC }, \ + { "cpp_cpu32", CPP_CPU32_SPEC }, \ + { "cpp_cpu64", CPP_CPU64_SPEC }, \ + { "cpp_cpu32sizet", CPP_CPU32_SIZE_TYPE_SPEC }, \ + { "cpp_cpu64sizet", CPP_CPU64_SIZE_TYPE_SPEC }, \ + { "cpp_cpucommon", CPP_CPUCOMMON_SPEC }, \ { "cc1_cpu", CC1_CPU_SPEC }, \ SUBTARGET_EXTRA_SPECS *************** extern int ix86_arch; *** 461,474 **** */ #define LONG_DOUBLE_TYPE_SIZE (TARGET_128BIT_LONG_DOUBLE ? 128 : 96) #define MAX_LONG_DOUBLE_TYPE_SIZE 128 /* Tell real.c that this is the 80-bit Intel extended float format packaged in a 128-bit or 96bit entity. */ ! #define INTEL_EXTENDED_IEEE_FORMAT /* Define if you don't want extended real, but do want to use the software floating point emulator for REAL_ARITHMETIC and ! decimal <-> binary conversion. */ /* #define REAL_ARITHMETIC */ /* Define this if most significant byte of a word is the lowest numbered. */ --- 677,711 ---- */ #define LONG_DOUBLE_TYPE_SIZE (TARGET_128BIT_LONG_DOUBLE ? 128 : 96) #define MAX_LONG_DOUBLE_TYPE_SIZE 128 + #ifdef __x86_64__ + #define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 128 + #else + #define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 96 + #endif /* Tell real.c that this is the 80-bit Intel extended float format packaged in a 128-bit or 96bit entity. */ ! #define INTEL_EXTENDED_IEEE_FORMAT 1 + #define SHORT_TYPE_SIZE 16 + #define INT_TYPE_SIZE 32 + #define FLOAT_TYPE_SIZE 32 + #define LONG_TYPE_SIZE BITS_PER_WORD + #define MAX_WCHAR_TYPE_SIZE 32 + #define DOUBLE_TYPE_SIZE 64 + #define LONG_LONG_TYPE_SIZE 64 + + #if defined (TARGET_BI_ARCH) || defined (TARGET_64BIT_DEFAULT) + #define MAX_BITS_PER_WORD 64 + #define MAX_LONG_TYPE_SIZE 64 + #else + #define MAX_BITS_PER_WORD 32 + #define MAX_LONG_TYPE_SIZE 32 + #endif + /* Define if you don't want extended real, but do want to use the software floating point emulator for REAL_ARITHMETIC and ! decimal <-> binary conversion. */ /* #define REAL_ARITHMETIC */ /* Define this if most significant byte of a word is the lowest numbered. */ *************** extern int ix86_arch; *** 492,511 **** Note that this is not necessarily the width of data type `int'; if using 16-bit ints on a 80386, this would still be 32. But on a machine with 16-bit registers, this would be 16. */ ! #define BITS_PER_WORD 32 /* Width of a word, in units (bytes). */ ! #define UNITS_PER_WORD 4 /* Width in bits of a pointer. See also the macro `Pmode' defined below. */ ! #define POINTER_SIZE 32 /* Allocation boundary (in *bits*) for storing arguments in argument list. */ ! #define PARM_BOUNDARY 32 /* Boundary (in *bits*) on which stack pointer should be aligned. */ ! #define STACK_BOUNDARY 32 /* Boundary (in *bits*) on which the stack pointer preferrs to be aligned; the compiler cannot rely on having this alignment. */ --- 729,749 ---- Note that this is not necessarily the width of data type `int'; if using 16-bit ints on a 80386, this would still be 32. But on a machine with 16-bit registers, this would be 16. */ ! #define BITS_PER_WORD (TARGET_64BIT ? 64 : 32) /* Width of a word, in units (bytes). */ ! #define UNITS_PER_WORD (TARGET_64BIT ? 8 : 4) ! #define MIN_UNITS_PER_WORD 4 /* Width in bits of a pointer. See also the macro `Pmode' defined below. */ ! #define POINTER_SIZE BITS_PER_WORD /* Allocation boundary (in *bits*) for storing arguments in argument list. */ ! #define PARM_BOUNDARY BITS_PER_WORD /* Boundary (in *bits*) on which stack pointer should be aligned. */ ! #define STACK_BOUNDARY BITS_PER_WORD /* Boundary (in *bits*) on which the stack pointer preferrs to be aligned; the compiler cannot rely on having this alignment. */ *************** extern int ix86_arch; *** 516,537 **** the stack, which results in aligned frames for functions called from main, though it does nothing for the alignment of main itself. */ #define FORCE_PREFERRED_STACK_BOUNDARY_IN_MAIN \ ! (ix86_preferred_stack_boundary > STACK_BOUNDARY) ! /* Allocation boundary for the code of a function. */ ! #define FUNCTION_BOUNDARY \ ! (1 << ((ix86_align_funcs >= 0 ? ix86_align_funcs : -ix86_align_funcs) + 3)) ! /* Alignment of field after `int : 0' in a structure. */ ! #define EMPTY_FIELD_BOUNDARY 32 /* Minimum size in bits of the largest boundary to which any and all fundamental data types supported by the hardware might need to be aligned. No data type wants to be aligned rounder than this. ! Pentium+ preferrs DFmode values to be alignmed to 64 bit boundary and Pentium Pro XFmode values at 128 bit boundaries. */ #define BIGGEST_ALIGNMENT 128 --- 754,774 ---- the stack, which results in aligned frames for functions called from main, though it does nothing for the alignment of main itself. */ #define FORCE_PREFERRED_STACK_BOUNDARY_IN_MAIN \ ! (ix86_preferred_stack_boundary > STACK_BOUNDARY && !TARGET_64BIT) ! /* Allocation boundary for the code of a function. */ ! #define FUNCTION_BOUNDARY 16 ! /* Alignment of field after `int : 0' in a structure. */ ! #define EMPTY_FIELD_BOUNDARY BITS_PER_WORD /* Minimum size in bits of the largest boundary to which any and all fundamental data types supported by the hardware might need to be aligned. No data type wants to be aligned rounder than this. ! Pentium+ preferrs DFmode values to be aligned to 64 bit boundary and Pentium Pro XFmode values at 128 bit boundaries. */ #define BIGGEST_ALIGNMENT 128 *************** extern int ix86_arch; *** 547,553 **** /* BIGGEST_FIELD_ALIGNMENT is also used in libobjc, where it must be constant. Use the smaller value in that context. */ #ifndef IN_TARGET_LIBS ! #define BIGGEST_FIELD_ALIGNMENT (TARGET_ALIGN_DOUBLE ? 64 : 32) #else #define BIGGEST_FIELD_ALIGNMENT 32 #endif --- 784,790 ---- /* BIGGEST_FIELD_ALIGNMENT is also used in libobjc, where it must be constant. Use the smaller value in that context. */ #ifndef IN_TARGET_LIBS ! #define BIGGEST_FIELD_ALIGNMENT (TARGET_64BIT ? 128 : (TARGET_ALIGN_DOUBLE ? 64 : 32)) #else #define BIGGEST_FIELD_ALIGNMENT 32 #endif *************** extern int ix86_arch; *** 564,570 **** constants to be word aligned so that `strcpy' calls that copy constants can be done inline. */ ! #define CONSTANT_ALIGNMENT(EXP, ALIGN) ix86_constant_alignment (EXP, ALIGN) /* If defined, a C expression to compute the alignment for a static variable. TYPE is the data type, and ALIGN is the alignment that --- 801,807 ---- constants to be word aligned so that `strcpy' calls that copy constants can be done inline. */ ! #define CONSTANT_ALIGNMENT(EXP, ALIGN) ix86_constant_alignment ((EXP), (ALIGN)) /* If defined, a C expression to compute the alignment for a static variable. TYPE is the data type, and ALIGN is the alignment that *************** extern int ix86_arch; *** 578,584 **** cause character arrays to be word-aligned so that `strcpy' calls that copy constants to character arrays can be done inline. */ ! #define DATA_ALIGNMENT(TYPE, ALIGN) ix86_data_alignment (TYPE, ALIGN) /* If defined, a C expression to compute the alignment for a local variable. TYPE is the data type, and ALIGN is the alignment that --- 815,821 ---- cause character arrays to be word-aligned so that `strcpy' calls that copy constants to character arrays can be done inline. */ ! #define DATA_ALIGNMENT(TYPE, ALIGN) ix86_data_alignment ((TYPE), (ALIGN)) /* If defined, a C expression to compute the alignment for a local variable. TYPE is the data type, and ALIGN is the alignment that *************** extern int ix86_arch; *** 590,596 **** One use of this macro is to increase alignment of medium-size data to make it all fit in fewer cache lines. */ ! #define LOCAL_ALIGNMENT(TYPE, ALIGN) ix86_local_alignment (TYPE, ALIGN) /* Set this non-zero if move instructions will actually fail to work when given unaligned data. */ --- 827,840 ---- One use of this macro is to increase alignment of medium-size data to make it all fit in fewer cache lines. */ ! #define LOCAL_ALIGNMENT(TYPE, ALIGN) ix86_local_alignment ((TYPE), (ALIGN)) ! ! /* If defined, a C expression that gives the alignment boundary, in ! bits, of an argument with the specified mode and type. If it is ! not defined, `PARM_BOUNDARY' is used for all arguments. */ ! ! #define FUNCTION_ARG_BOUNDARY(MODE, TYPE) \ ! ix86_function_arg_boundary ((MODE), (TYPE)) /* Set this non-zero if move instructions will actually fail to work when given unaligned data. */ *************** extern int ix86_arch; *** 600,626 **** and give entire struct the alignment of an int. */ /* Required on the 386 since it doesn't have bitfield insns. */ #define PCC_BITFIELD_TYPE_MATTERS 1 - - /* Align loop starts for optimal branching. */ - #define LOOP_ALIGN(LABEL) \ - (ix86_align_loops < 0 ? -ix86_align_loops : ix86_align_loops) - #define LOOP_ALIGN_MAX_SKIP \ - (ix86_align_loops < -3 ? (1<<(-ix86_align_loops-1))-1 : 0) - - /* This is how to align an instruction for optimal branching. */ - #define LABEL_ALIGN_AFTER_BARRIER(LABEL) \ - (ix86_align_jumps < 0 ? -ix86_align_jumps : ix86_align_jumps) - #define LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP \ - (ix86_align_jumps < -3 ? (1<<(-ix86_align_jumps-1))-1 : 0) /* Standard register usage. */ /* This processor has special stack-like registers. See reg-stack.c ! for details. */ #define STACK_REGS ! #define IS_STACK_MODE(mode) (mode==DFmode || mode==SFmode \ ! || mode==XFmode || mode==TFmode) /* Number of actual hardware registers. The hardware registers are assigned numbers for the compiler --- 844,859 ---- and give entire struct the alignment of an int. */ /* Required on the 386 since it doesn't have bitfield insns. */ #define PCC_BITFIELD_TYPE_MATTERS 1 /* Standard register usage. */ /* This processor has special stack-like registers. See reg-stack.c ! for details. */ #define STACK_REGS ! #define IS_STACK_MODE(MODE) \ ! ((MODE) == DFmode || (MODE) == SFmode || (MODE) == XFmode \ ! || (MODE) == TFmode) /* Number of actual hardware registers. The hardware registers are assigned numbers for the compiler *************** extern int ix86_arch; *** 636,644 **** Reg 16 does not correspond to any hardware register, but instead appears in the RTL as an argument pointer prior to reload, and is eliminated during reloading in favor of either the stack or frame ! pointer. */ ! #define FIRST_PSEUDO_REGISTER 37 /* Number of hardware registers that go into the DWARF-2 unwind info. If not defined, equals FIRST_PSEUDO_REGISTER. */ --- 869,877 ---- Reg 16 does not correspond to any hardware register, but instead appears in the RTL as an argument pointer prior to reload, and is eliminated during reloading in favor of either the stack or frame ! pointer. */ ! #define FIRST_PSEUDO_REGISTER 53 /* Number of hardware registers that go into the DWARF-2 unwind info. If not defined, equals FIRST_PSEUDO_REGISTER. */ *************** extern int ix86_arch; *** 647,679 **** /* 1 for registers that have pervasive standard uses and are not available for the register allocator. ! On the 80386, the stack pointer is such, as is the arg pointer. */ #define FIXED_REGISTERS \ /*ax,dx,cx,bx,si,di,bp,sp,st,st1,st2,st3,st4,st5,st6,st7*/ \ ! { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, \ /*arg,flags,fpsr,dir,frame*/ \ ! 1, 1, 1, 1, 1, \ /*xmm0,xmm1,xmm2,xmm3,xmm4,xmm5,xmm6,xmm7*/ \ 0, 0, 0, 0, 0, 0, 0, 0, \ /*mmx0,mmx1,mmx2,mmx3,mmx4,mmx5,mmx6,mmx7*/ \ ! 0, 0, 0, 0, 0, 0, 0, 0} /* 1 for registers not available across function calls. These must include the FIXED_REGISTERS and also any registers that can be used without being saved. The latter must include the registers where values are returned and the register where structure-value addresses are passed. ! Aside from that, you can include as many other registers as you like. */ ! #define CALL_USED_REGISTERS \ /*ax,dx,cx,bx,si,di,bp,sp,st,st1,st2,st3,st4,st5,st6,st7*/ \ ! { 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ /*arg,flags,fpsr,dir,frame*/ \ ! 1, 1, 1, 1, 1, \ /*xmm0,xmm1,xmm2,xmm3,xmm4,xmm5,xmm6,xmm7*/ \ ! 1, 1, 1, 1, 1, 1, 1, 1, \ /*mmx0,mmx1,mmx2,mmx3,mmx4,mmx5,mmx6,mmx7*/ \ ! 1, 1, 1, 1, 1, 1, 1, 1} /* Order in which to allocate registers. Each register must be listed once, even those in FIXED_REGISTERS. List frame pointer --- 880,930 ---- /* 1 for registers that have pervasive standard uses and are not available for the register allocator. ! On the 80386, the stack pointer is such, as is the arg pointer. ! ! The value is an mask - bit 1 is set for fixed registers ! for 32bit target, while 2 is set for fixed registers for 64bit. ! Proper value is computed in the CONDITIONAL_REGISTER_USAGE. ! */ #define FIXED_REGISTERS \ /*ax,dx,cx,bx,si,di,bp,sp,st,st1,st2,st3,st4,st5,st6,st7*/ \ ! { 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, \ /*arg,flags,fpsr,dir,frame*/ \ ! 3, 3, 3, 3, 3, \ /*xmm0,xmm1,xmm2,xmm3,xmm4,xmm5,xmm6,xmm7*/ \ 0, 0, 0, 0, 0, 0, 0, 0, \ /*mmx0,mmx1,mmx2,mmx3,mmx4,mmx5,mmx6,mmx7*/ \ ! 0, 0, 0, 0, 0, 0, 0, 0, \ ! /* r8, r9, r10, r11, r12, r13, r14, r15*/ \ ! 1, 1, 1, 1, 1, 1, 1, 1, \ ! /*xmm8,xmm9,xmm10,xmm11,xmm12,xmm13,xmm14,xmm15*/ \ ! 1, 1, 1, 1, 1, 1, 1, 1} ! /* 1 for registers not available across function calls. These must include the FIXED_REGISTERS and also any registers that can be used without being saved. The latter must include the registers where values are returned and the register where structure-value addresses are passed. ! Aside from that, you can include as many other registers as you like. ! ! The value is an mask - bit 1 is set for call used ! for 32bit target, while 2 is set for call used for 64bit. ! Proper value is computed in the CONDITIONAL_REGISTER_USAGE. ! */ #define CALL_USED_REGISTERS \ /*ax,dx,cx,bx,si,di,bp,sp,st,st1,st2,st3,st4,st5,st6,st7*/ \ ! { 3, 3, 3, 0, 2, 2, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, \ /*arg,flags,fpsr,dir,frame*/ \ ! 3, 3, 3, 3, 3, \ /*xmm0,xmm1,xmm2,xmm3,xmm4,xmm5,xmm6,xmm7*/ \ ! 3, 3, 3, 3, 3, 3, 3, 3, \ /*mmx0,mmx1,mmx2,mmx3,mmx4,mmx5,mmx6,mmx7*/ \ ! 3, 3, 3, 3, 3, 3, 3, 3, \ ! /* r8, r9, r10, r11, r12, r13, r14, r15*/ \ ! 3, 3, 3, 3, 1, 1, 1, 1, \ ! /*xmm8,xmm9,xmm10,xmm11,xmm12,xmm13,xmm14,xmm15*/ \ ! 3, 3, 3, 3, 3, 3, 3, 3} \ /* Order in which to allocate registers. Each register must be listed once, even those in FIXED_REGISTERS. List frame pointer *************** extern int ix86_arch; *** 681,728 **** registers listed in CALL_USED_REGISTERS, keeping the others available for storage of persistent values. ! Three different versions of REG_ALLOC_ORDER have been tried: ! ! If the order is edx, ecx, eax, ... it produces a slightly faster compiler, ! but slower code on simple functions returning values in eax. ! ! If the order is eax, ecx, edx, ... it causes reload to abort when compiling ! perl 4.036 due to not being able to create a DImode register (to hold a 2 ! word union). ! ! If the order is eax, edx, ecx, ... it produces better code for simple ! functions, and a slightly slower compiler. Users complained about the code ! generated by allocating edx first, so restore the 'natural' order of things. */ #define REG_ALLOC_ORDER \ ! /*ax,dx,cx,bx,si,di,bp,sp,st,st1,st2,st3,st4,st5,st6,st7*/ \ ! { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, \ ! /*,arg,cc,fpsr,dir,frame*/ \ ! 16,17, 18, 19, 20, \ ! /*xmm0,xmm1,xmm2,xmm3,xmm4,xmm5,xmm6,xmm7*/ \ ! 21, 22, 23, 24, 25, 26, 27, 28, \ ! /*mmx0,mmx1,mmx2,mmx3,mmx4,mmx5,mmx6,mmx7*/ \ ! 29, 30, 31, 32, 33, 34, 35, 36 } ! ! /* A C statement (sans semicolon) to choose the order in which to ! allocate hard registers for pseudo-registers local to a basic ! block. ! ! Store the desired register order in the array `reg_alloc_order'. ! Element 0 should be the register to allocate first; element 1, the ! next register; and so on. ! The macro body should not assume anything about the contents of ! `reg_alloc_order' before execution of the macro. ! On most machines, it is not necessary to define this macro. */ - #define ORDER_REGS_FOR_LOCAL_ALLOC order_regs_for_local_alloc () /* Macro to conditionally modify fixed_regs/call_used_regs. */ #define CONDITIONAL_REGISTER_USAGE \ ! { \ ! if (flag_pic) \ { \ fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \ call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \ --- 932,964 ---- registers listed in CALL_USED_REGISTERS, keeping the others available for storage of persistent values. ! The ORDER_REGS_FOR_LOCAL_ALLOC actually overwrite the order, ! so this is just empty initializer for array. */ #define REG_ALLOC_ORDER \ ! { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,\ ! 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, \ ! 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, \ ! 48, 49, 50, 51, 52 } ! /* ORDER_REGS_FOR_LOCAL_ALLOC is a macro which permits reg_alloc_order ! to be rearranged based on a particular function. When using sse math, ! we want to allocase SSE before x87 registers and vice vera. */ ! #define ORDER_REGS_FOR_LOCAL_ALLOC x86_order_regs_for_local_alloc () /* Macro to conditionally modify fixed_regs/call_used_regs. */ #define CONDITIONAL_REGISTER_USAGE \ ! do { \ ! int i; \ ! for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) \ ! { \ ! fixed_regs[i] = (fixed_regs[i] & (TARGET_64BIT ? 2 : 1)) != 0; \ ! call_used_regs[i] = (call_used_regs[i] \ ! & (TARGET_64BIT ? 2 : 1)) != 0; \ ! } \ ! if (PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM) \ { \ fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \ call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \ *************** extern int ix86_arch; *** 750,756 **** if (TEST_HARD_REG_BIT (x, i)) \ fixed_regs[i] = call_used_regs[i] = 1; \ } \ ! } /* Return number of consecutive hard regs needed starting at reg REGNO to hold something of mode MODE. --- 986,992 ---- if (TEST_HARD_REG_BIT (x, i)) \ fixed_regs[i] = call_used_regs[i] = 1; \ } \ ! } while (0) /* Return number of consecutive hard regs needed starting at reg REGNO to hold something of mode MODE. *************** extern int ix86_arch; *** 763,806 **** */ #define HARD_REGNO_NREGS(REGNO, MODE) \ ! (FP_REGNO_P (REGNO) || SSE_REGNO_P (REGNO) || MMX_REGNO_P (REGNO) ? 1 \ ! : (MODE == TFmode \ ! ? 3 \ : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD))) ! #define VALID_SSE_REG_MODE(MODE) \ ! ((MODE) == TImode || (MODE) == V4SFmode || (MODE) == V4SImode) ! #define VALID_MMX_REG_MODE(MODE) \ ! ((MODE) == DImode || (MODE) == V8QImode || (MODE) == V4HImode \ || (MODE) == V2SImode || (MODE) == SImode) #define VECTOR_MODE_SUPPORTED_P(MODE) \ (VALID_SSE_REG_MODE (MODE) && TARGET_SSE ? 1 \ ! : VALID_MMX_REG_MODE (MODE) && TARGET_MMX ? 1 : 0) /* Value is 1 if hard register REGNO can hold a value of machine-mode MODE. */ ! #define HARD_REGNO_MODE_OK(REGNO, MODE) \ ! /* Flags and only flags can only hold CCmode values. */ \ ! (CC_REGNO_P (REGNO) \ ! ? GET_MODE_CLASS (MODE) == MODE_CC \ ! : GET_MODE_CLASS (MODE) == MODE_CC ? 0 \ ! /* FP regs can only hold floating point; make it clear they \ ! cannot hold TFmode floats. */ \ ! : FP_REGNO_P (REGNO) \ ! ? ((GET_MODE_CLASS (MODE) == MODE_FLOAT \ ! || GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT) \ ! && GET_MODE_UNIT_SIZE (MODE) <= 16)\ ! : SSE_REGNO_P (REGNO) ? VALID_SSE_REG_MODE (MODE) \ ! : MMX_REGNO_P (REGNO) ? VALID_MMX_REG_MODE (MODE) \ ! /* Only SSE and MMX regs can hold vector modes. */ \ ! : VECTOR_MODE_P (MODE) || (MODE) == TImode ? 0 \ ! : (REGNO) < 4 ? 1 \ ! /* Other regs cannot do byte accesses. */ \ ! : (MODE) != QImode ? 1 \ ! : reload_in_progress || reload_completed \ ! || !TARGET_PARTIAL_REG_STALL) /* Value is 1 if it is a good idea to tie two pseudo registers when one has mode MODE1 and one has mode MODE2. --- 999,1046 ---- */ #define HARD_REGNO_NREGS(REGNO, MODE) \ ! (FP_REGNO_P (REGNO) || SSE_REGNO_P (REGNO) || MMX_REGNO_P (REGNO) \ ! ? (COMPLEX_MODE_P (MODE) ? 2 : 1) \ ! : ((MODE) == TFmode \ ! ? (TARGET_64BIT ? 2 : 3) \ ! : (MODE) == TCmode \ ! ? (TARGET_64BIT ? 4 : 6) \ : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD))) ! #define VALID_SSE_REG_MODE(MODE) \ ! ((MODE) == TImode || (MODE) == V4SFmode || (MODE) == V4SImode \ ! || (MODE) == SFmode \ ! || (TARGET_SSE2 && ((MODE) == DFmode || VALID_MMX_REG_MODE (MODE)))) ! #define VALID_MMX_REG_MODE_3DNOW(MODE) \ ! ((MODE) == V2SFmode || (MODE) == SFmode) ! ! #define VALID_MMX_REG_MODE(MODE) \ ! ((MODE) == DImode || (MODE) == V8QImode || (MODE) == V4HImode \ || (MODE) == V2SImode || (MODE) == SImode) #define VECTOR_MODE_SUPPORTED_P(MODE) \ (VALID_SSE_REG_MODE (MODE) && TARGET_SSE ? 1 \ ! : VALID_MMX_REG_MODE (MODE) && TARGET_MMX ? 1 \ ! : VALID_MMX_REG_MODE_3DNOW (MODE) && TARGET_3DNOW ? 1 : 0) ! ! #define VALID_FP_MODE_P(MODE) \ ! ((MODE) == SFmode || (MODE) == DFmode || (MODE) == TFmode \ ! || (!TARGET_64BIT && (MODE) == XFmode) \ ! || (MODE) == SCmode || (MODE) == DCmode || (MODE) == TCmode \ ! || (!TARGET_64BIT && (MODE) == XCmode)) ! ! #define VALID_INT_MODE_P(MODE) \ ! ((MODE) == QImode || (MODE) == HImode || (MODE) == SImode \ ! || (MODE) == DImode \ ! || (MODE) == CQImode || (MODE) == CHImode || (MODE) == CSImode \ ! || (MODE) == CDImode \ ! || (TARGET_64BIT && ((MODE) == TImode || (MODE) == CTImode))) /* Value is 1 if hard register REGNO can hold a value of machine-mode MODE. */ ! #define HARD_REGNO_MODE_OK(REGNO, MODE) \ ! ix86_hard_regno_mode_ok ((REGNO), (MODE)) /* Value is 1 if it is a good idea to tie two pseudo registers when one has mode MODE1 and one has mode MODE2. *************** extern int ix86_arch; *** 809,824 **** #define MODES_TIEABLE_P(MODE1, MODE2) \ ((MODE1) == (MODE2) \ ! || ((MODE1) == SImode && (MODE2) == HImode) \ ! || ((MODE1) == HImode && (MODE2) == SImode)) /* Specify the modes required to caller save a given hard regno. ! We do this on i386 to prevent flags from being saved at all. */ ! #define HARD_REGNO_CALLER_SAVE_MODE(REGNO, NREGS) \ ! (CC_REGNO_P (REGNO) ? VOIDmode \ ! : choose_hard_reg_mode ((REGNO), (NREGS))) /* Specify the registers used for certain standard purposes. The values of these macros are register numbers. */ --- 1049,1076 ---- #define MODES_TIEABLE_P(MODE1, MODE2) \ ((MODE1) == (MODE2) \ ! || (((MODE1) == HImode || (MODE1) == SImode \ ! || ((MODE1) == QImode \ ! && (TARGET_64BIT || !TARGET_PARTIAL_REG_STALL)) \ ! || ((MODE1) == DImode && TARGET_64BIT)) \ ! && ((MODE2) == HImode || (MODE2) == SImode \ ! || ((MODE1) == QImode \ ! && (TARGET_64BIT || !TARGET_PARTIAL_REG_STALL)) \ ! || ((MODE2) == DImode && TARGET_64BIT)))) ! /* Specify the modes required to caller save a given hard regno. ! We do this on i386 to prevent flags from being saved at all. ! Kill any attempts to combine saving of modes. */ + #define HARD_REGNO_CALLER_SAVE_MODE(REGNO, NREGS, MODE) \ + (CC_REGNO_P (REGNO) ? VOIDmode \ + : (MODE) == VOIDmode && (NREGS) != 1 ? VOIDmode \ + : (MODE) == VOIDmode ? choose_hard_reg_mode ((REGNO), (NREGS)) \ + : (MODE) == HImode && !TARGET_PARTIAL_REG_STALL ? SImode \ + : (MODE) == QImode && (REGNO) >= 4 && !TARGET_64BIT ? SImode \ + : (MODE)) /* Specify the registers used for certain standard purposes. The values of these macros are register numbers. */ *************** extern int ix86_arch; *** 852,857 **** --- 1104,1115 ---- #define FIRST_MMX_REG (LAST_SSE_REG + 1) #define LAST_MMX_REG (FIRST_MMX_REG + 7) + #define FIRST_REX_INT_REG (LAST_MMX_REG + 1) + #define LAST_REX_INT_REG (FIRST_REX_INT_REG + 7) + + #define FIRST_REX_SSE_REG (LAST_REX_INT_REG + 1) + #define LAST_REX_SSE_REG (FIRST_REX_SSE_REG + 7) + /* Value should be nonzero if functions must have frame pointers. Zero means the frame pointer need not be set up (and parms may be accessed via the stack pointer) in functions that seem suitable. *************** extern int ix86_arch; *** 870,881 **** /* Base register for access to arguments of the function. */ #define ARG_POINTER_REGNUM 16 ! /* Register in which static-chain is passed to a function. */ ! #define STATIC_CHAIN_REGNUM 2 /* Register to hold the addressing base for position independent ! code access to data items. */ ! #define PIC_OFFSET_TABLE_REGNUM 3 /* Register in which address to store a structure value arrives in the function. On the 386, the prologue --- 1128,1144 ---- /* Base register for access to arguments of the function. */ #define ARG_POINTER_REGNUM 16 ! /* Register in which static-chain is passed to a function. ! We do use ECX as static chain register for 32 bit ABI. On the ! 64bit ABI, ECX is an argument register, so we use R10 instead. */ ! #define STATIC_CHAIN_REGNUM (TARGET_64BIT ? FIRST_REX_INT_REG + 10 - 8 : 2) /* Register to hold the addressing base for position independent ! code access to data items. We don't use PIC pointer for 64bit ! mode. Define the regnum to dummy value to prevent gcc from ! pessimizing code dealing with EBX. */ ! #define PIC_OFFSET_TABLE_REGNUM \ ! (TARGET_64BIT || !flag_pic ? INVALID_REGNUM : 3) /* Register in which address to store a structure value arrives in the function. On the 386, the prologue *************** extern int ix86_arch; *** 903,913 **** should always be returned in memory. You should instead use `DEFAULT_PCC_STRUCT_RETURN' to indicate this. */ ! #define RETURN_IN_MEMORY(TYPE) \ ! ((TYPE_MODE (TYPE) == BLKmode) \ ! || (VECTOR_MODE_P (TYPE_MODE (TYPE)) && int_size_in_bytes (TYPE) == 8)\ ! || (int_size_in_bytes (TYPE) > 12 && TYPE_MODE (TYPE) != TImode \ ! && TYPE_MODE (TYPE) != TFmode && ! VECTOR_MODE_P (TYPE_MODE (TYPE)))) /* Define the classes of registers for register constraints in the --- 1166,1173 ---- should always be returned in memory. You should instead use `DEFAULT_PCC_STRUCT_RETURN' to indicate this. */ ! #define RETURN_IN_MEMORY(TYPE) \ ! ix86_return_in_memory (TYPE) /* Define the classes of registers for register constraints in the *************** enum reg_class *** 944,963 **** Q_REGS, /* %eax %ebx %ecx %edx */ NON_Q_REGS, /* %esi %edi %ebp %esp */ INDEX_REGS, /* %eax %ebx %ecx %edx %esi %edi %ebp */ ! GENERAL_REGS, /* %eax %ebx %ecx %edx %esi %edi %ebp %esp */ FP_TOP_REG, FP_SECOND_REG, /* %st(0) %st(1) */ FLOAT_REGS, SSE_REGS, MMX_REGS, ! FLOAT_INT_REGS, /* FLOAT_REGS and GENERAL_REGS. */ ALL_REGS, LIM_REG_CLASSES }; ! #define N_REG_CLASSES (int) LIM_REG_CLASSES ! #define FLOAT_CLASS_P(CLASS) (reg_class_subset_p (CLASS, FLOAT_REGS)) ! #define Q_CLASS_P(CLASS) (reg_class_subset_p (CLASS, Q_REGS)) /* Give names of register classes as strings for dump file. */ --- 1204,1245 ---- Q_REGS, /* %eax %ebx %ecx %edx */ NON_Q_REGS, /* %esi %edi %ebp %esp */ INDEX_REGS, /* %eax %ebx %ecx %edx %esi %edi %ebp */ ! LEGACY_REGS, /* %eax %ebx %ecx %edx %esi %edi %ebp %esp */ ! GENERAL_REGS, /* %eax %ebx %ecx %edx %esi %edi %ebp %esp %r8 - %r15*/ FP_TOP_REG, FP_SECOND_REG, /* %st(0) %st(1) */ FLOAT_REGS, SSE_REGS, MMX_REGS, ! FP_TOP_SSE_REGS, ! FP_SECOND_SSE_REGS, ! FLOAT_SSE_REGS, ! FLOAT_INT_REGS, ! INT_SSE_REGS, ! FLOAT_INT_SSE_REGS, ALL_REGS, LIM_REG_CLASSES }; ! #define N_REG_CLASSES ((int) LIM_REG_CLASSES) ! #define INTEGER_CLASS_P(CLASS) \ ! reg_class_subset_p ((CLASS), GENERAL_REGS) ! #define FLOAT_CLASS_P(CLASS) \ ! reg_class_subset_p ((CLASS), FLOAT_REGS) ! #define SSE_CLASS_P(CLASS) \ ! reg_class_subset_p ((CLASS), SSE_REGS) ! #define MMX_CLASS_P(CLASS) \ ! reg_class_subset_p ((CLASS), MMX_REGS) ! #define MAYBE_INTEGER_CLASS_P(CLASS) \ ! reg_classes_intersect_p ((CLASS), GENERAL_REGS) ! #define MAYBE_FLOAT_CLASS_P(CLASS) \ ! reg_classes_intersect_p ((CLASS), FLOAT_REGS) ! #define MAYBE_SSE_CLASS_P(CLASS) \ ! reg_classes_intersect_p (SSE_REGS, (CLASS)) ! #define MAYBE_MMX_CLASS_P(CLASS) \ ! reg_classes_intersect_p (MMX_REGS, (CLASS)) ! #define Q_CLASS_P(CLASS) \ ! reg_class_subset_p ((CLASS), Q_REGS) /* Give names of register classes as strings for dump file. */ *************** enum reg_class *** 968,979 **** --- 1250,1267 ---- "AD_REGS", \ "Q_REGS", "NON_Q_REGS", \ "INDEX_REGS", \ + "LEGACY_REGS", \ "GENERAL_REGS", \ "FP_TOP_REG", "FP_SECOND_REG", \ "FLOAT_REGS", \ "SSE_REGS", \ "MMX_REGS", \ + "FP_TOP_SSE_REGS", \ + "FP_SECOND_SSE_REGS", \ + "FLOAT_SSE_REGS", \ "FLOAT_INT_REGS", \ + "INT_SSE_REGS", \ + "FLOAT_INT_SSE_REGS", \ "ALL_REGS" } /* Define which registers fit in which classes. *************** enum reg_class *** 981,1001 **** of length N_REG_CLASSES. */ #define REG_CLASS_CONTENTS \ ! { { 0x00, 0x0 }, \ ! { 0x01, 0x0 }, { 0x02, 0x0 }, /* AREG, DREG */ \ ! { 0x04, 0x0 }, { 0x08, 0x0 }, /* CREG, BREG */ \ ! { 0x10, 0x0 }, { 0x20, 0x0 }, /* SIREG, DIREG */ \ ! { 0x03, 0x0 }, /* AD_REGS */ \ ! { 0x0f, 0x0 }, /* Q_REGS */ \ ! { 0x1100f0, 0x0 }, /* NON_Q_REGS */ \ ! { 0x7f, 0x0 }, /* INDEX_REGS */ \ ! { 0x1100ff, 0x0 }, /* GENERAL_REGS */ \ ! { 0x100, 0x0 }, { 0x0200, 0x0 }, /* FP_TOP_REG, FP_SECOND_REG */ \ ! { 0xff00, 0x0 }, /* FLOAT_REGS */ \ ! { 0x1fe00000, 0x0 }, /* SSE_REGS */ \ ! { 0xe0000000, 0x1f }, /* MMX_REGS */ \ ! { 0x1ffff, 0x0 }, /* FLOAT_INT_REGS */ \ ! { 0xffffffff, 0x1f } \ } /* The same information, inverted: --- 1269,1295 ---- of length N_REG_CLASSES. */ #define REG_CLASS_CONTENTS \ ! { { 0x00, 0x0 }, \ ! { 0x01, 0x0 }, { 0x02, 0x0 }, /* AREG, DREG */ \ ! { 0x04, 0x0 }, { 0x08, 0x0 }, /* CREG, BREG */ \ ! { 0x10, 0x0 }, { 0x20, 0x0 }, /* SIREG, DIREG */ \ ! { 0x03, 0x0 }, /* AD_REGS */ \ ! { 0x0f, 0x0 }, /* Q_REGS */ \ ! { 0x1100f0, 0x1fe0 }, /* NON_Q_REGS */ \ ! { 0x7f, 0x1fe0 }, /* INDEX_REGS */ \ ! { 0x1100ff, 0x0 }, /* LEGACY_REGS */ \ ! { 0x1100ff, 0x1fe0 }, /* GENERAL_REGS */ \ ! { 0x100, 0x0 }, { 0x0200, 0x0 },/* FP_TOP_REG, FP_SECOND_REG */\ ! { 0xff00, 0x0 }, /* FLOAT_REGS */ \ ! { 0x1fe00000,0x1fe000 }, /* SSE_REGS */ \ ! { 0xe0000000, 0x1f }, /* MMX_REGS */ \ ! { 0x1fe00100,0x1fe000 }, /* FP_TOP_SSE_REG */ \ ! { 0x1fe00200,0x1fe000 }, /* FP_SECOND_SSE_REG */ \ ! { 0x1fe0ff00,0x1fe000 }, /* FLOAT_SSE_REGS */ \ ! { 0x1ffff, 0x1fe0 }, /* FLOAT_INT_REGS */ \ ! { 0x1fe100ff,0x1fffe0 }, /* INT_SSE_REGS */ \ ! { 0x1fe1ffff,0x1fffe0 }, /* FLOAT_INT_SSE_REGS */ \ ! { 0xffffffff,0x1fffff } \ } /* The same information, inverted: *************** enum reg_class *** 1007,1036 **** /* When defined, the compiler allows registers explicitly used in the rtl to be used as spill registers but prevents the compiler from ! extending the lifetime of these registers. */ #define SMALL_REGISTER_CLASSES 1 #define QI_REG_P(X) \ (REG_P (X) && REGNO (X) < 4) #define NON_QI_REG_P(X) \ (REG_P (X) && REGNO (X) >= 4 && REGNO (X) < FIRST_PSEUDO_REGISTER) #define FP_REG_P(X) (REG_P (X) && FP_REGNO_P (REGNO (X))) ! #define FP_REGNO_P(n) ((n) >= FIRST_STACK_REG && (n) <= LAST_STACK_REG) ! #define SSE_REGNO_P(n) ((n) >= FIRST_SSE_REG && (n) <= LAST_SSE_REG) ! #define MMX_REGNO_P(n) ((n) >= FIRST_MMX_REG && (n) <= LAST_MMX_REG) ! #define MMX_REG_P(xop) (REG_P (xop) && MMX_REGNO_P (REGNO (xop))) ! #define STACK_REG_P(xop) (REG_P (xop) && \ ! REGNO (xop) >= FIRST_STACK_REG && \ ! REGNO (xop) <= LAST_STACK_REG) ! #define NON_STACK_REG_P(xop) (REG_P (xop) && ! STACK_REG_P (xop)) ! #define STACK_TOP_P(xop) (REG_P (xop) && REGNO (xop) == FIRST_STACK_REG) #define CC_REG_P(X) (REG_P (X) && CC_REGNO_P (REGNO (X))) #define CC_REGNO_P(X) ((X) == FLAGS_REG || (X) == FPSR_REG) --- 1301,1354 ---- /* When defined, the compiler allows registers explicitly used in the rtl to be used as spill registers but prevents the compiler from ! extending the lifetime of these registers. */ #define SMALL_REGISTER_CLASSES 1 #define QI_REG_P(X) \ (REG_P (X) && REGNO (X) < 4) + + #define GENERAL_REGNO_P(N) \ + ((N) < 8 || REX_INT_REGNO_P (N)) + + #define GENERAL_REG_P(X) \ + (REG_P (X) && GENERAL_REGNO_P (REGNO (X))) + + #define ANY_QI_REG_P(X) (TARGET_64BIT ? GENERAL_REG_P(X) : QI_REG_P (X)) + #define NON_QI_REG_P(X) \ (REG_P (X) && REGNO (X) >= 4 && REGNO (X) < FIRST_PSEUDO_REGISTER) + #define REX_INT_REGNO_P(N) ((N) >= FIRST_REX_INT_REG && (N) <= LAST_REX_INT_REG) + #define REX_INT_REG_P(X) (REG_P (X) && REX_INT_REGNO_P (REGNO (X))) + #define FP_REG_P(X) (REG_P (X) && FP_REGNO_P (REGNO (X))) ! #define FP_REGNO_P(N) ((N) >= FIRST_STACK_REG && (N) <= LAST_STACK_REG) ! #define ANY_FP_REG_P(X) (REG_P (X) && ANY_FP_REGNO_P (REGNO (X))) ! #define ANY_FP_REGNO_P(N) (FP_REGNO_P (N) || SSE_REGNO_P (N)) ! #define SSE_REGNO_P(N) \ ! (((N) >= FIRST_SSE_REG && (N) <= LAST_SSE_REG) \ ! || ((N) >= FIRST_REX_SSE_REG && (N) <= LAST_REX_SSE_REG)) ! #define SSE_REGNO(N) \ ! ((N) < 8 ? FIRST_SSE_REG + (N) : FIRST_REX_SSE_REG + (N) - 8) ! #define SSE_REG_P(N) (REG_P (N) && SSE_REGNO_P (REGNO (N))) ! ! #define SSE_FLOAT_MODE_P(MODE) \ ! ((TARGET_SSE && (MODE) == SFmode) || (TARGET_SSE2 && (MODE) == DFmode)) ! ! #define MMX_REGNO_P(N) ((N) >= FIRST_MMX_REG && (N) <= LAST_MMX_REG) ! #define MMX_REG_P(XOP) (REG_P (XOP) && MMX_REGNO_P (REGNO (XOP))) ! #define STACK_REG_P(XOP) \ ! (REG_P (XOP) && \ ! REGNO (XOP) >= FIRST_STACK_REG && \ ! REGNO (XOP) <= LAST_STACK_REG) ! #define NON_STACK_REG_P(XOP) (REG_P (XOP) && ! STACK_REG_P (XOP)) ! #define STACK_TOP_P(XOP) (REG_P (XOP) && REGNO (XOP) == FIRST_STACK_REG) #define CC_REG_P(X) (REG_P (X) && CC_REGNO_P (REGNO (X))) #define CC_REGNO_P(X) ((X) == FLAGS_REG || (X) == FPSR_REG) *************** enum reg_class *** 1038,1044 **** /* Indicate whether hard register numbered REG_NO should be converted to SSA form. */ #define CONVERT_HARD_REGISTER_TO_SSA_P(REG_NO) \ ! (REG_NO == FLAGS_REG || REG_NO == ARG_POINTER_REGNUM) /* The class value for index registers, and the one for base regs. */ --- 1356,1362 ---- /* Indicate whether hard register numbered REG_NO should be converted to SSA form. */ #define CONVERT_HARD_REGISTER_TO_SSA_P(REG_NO) \ ! ((REG_NO) == FLAGS_REG || (REG_NO) == ARG_POINTER_REGNUM) /* The class value for index registers, and the one for base regs. */ *************** enum reg_class *** 1049,1055 **** #define REG_CLASS_FROM_LETTER(C) \ ((C) == 'r' ? GENERAL_REGS : \ ! (C) == 'q' ? Q_REGS : \ (C) == 'f' ? (TARGET_80387 || TARGET_FLOAT_RETURNS_IN_80387 \ ? FLOAT_REGS \ : NO_REGS) : \ --- 1367,1375 ---- #define REG_CLASS_FROM_LETTER(C) \ ((C) == 'r' ? GENERAL_REGS : \ ! (C) == 'R' ? LEGACY_REGS : \ ! (C) == 'q' ? TARGET_64BIT ? GENERAL_REGS : Q_REGS : \ ! (C) == 'Q' ? Q_REGS : \ (C) == 'f' ? (TARGET_80387 || TARGET_FLOAT_RETURNS_IN_80387 \ ? FLOAT_REGS \ : NO_REGS) : \ *************** enum reg_class *** 1063,1070 **** (C) == 'b' ? BREG : \ (C) == 'c' ? CREG : \ (C) == 'd' ? DREG : \ ! (C) == 'x' ? SSE_REGS : \ ! (C) == 'y' ? MMX_REGS : \ (C) == 'A' ? AD_REGS : \ (C) == 'D' ? DIREG : \ (C) == 'S' ? SIREG : NO_REGS) --- 1383,1391 ---- (C) == 'b' ? BREG : \ (C) == 'c' ? CREG : \ (C) == 'd' ? DREG : \ ! (C) == 'x' ? TARGET_SSE ? SSE_REGS : NO_REGS : \ ! (C) == 'Y' ? TARGET_SSE2? SSE_REGS : NO_REGS : \ ! (C) == 'y' ? TARGET_MMX ? MMX_REGS : NO_REGS : \ (C) == 'A' ? AD_REGS : \ (C) == 'D' ? DIREG : \ (C) == 'S' ? SIREG : NO_REGS) *************** enum reg_class *** 1098,1111 **** load 0.0 into the function value register. */ #define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) \ ! ((C) == 'G' ? standard_80387_constant_p (VALUE) : 0) /* Place additional restrictions on the register class to use when it is necessary to be able to hold a value of mode MODE in a reload ! register for which class CLASS would ordinarily be used. */ ! #define LIMIT_RELOAD_CLASS(MODE, CLASS) \ ! ((MODE) == QImode && ((CLASS) == ALL_REGS || (CLASS) == GENERAL_REGS) \ ? Q_REGS : (CLASS)) /* Given an rtx X being reloaded into a reg required to be --- 1419,1452 ---- load 0.0 into the function value register. */ #define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) \ ! ((C) == 'G' ? standard_80387_constant_p (VALUE) \ ! : ((C) == 'H' ? standard_sse_constant_p (VALUE) : 0)) ! ! /* A C expression that defines the optional machine-dependent ! constraint letters that can be used to segregate specific types of ! operands, usually memory references, for the target machine. Any ! letter that is not elsewhere defined and not matched by ! `REG_CLASS_FROM_LETTER' may be used. Normally this macro will not ! be defined. ! ! If it is required for a particular target machine, it should ! return 1 if VALUE corresponds to the operand type represented by ! the constraint letter C. If C is not defined as an extra ! constraint, the value returned should be 0 regardless of VALUE. */ ! ! #define EXTRA_CONSTRAINT(VALUE, C) \ ! ((C) == 'e' ? x86_64_sign_extended_value (VALUE) \ ! : (C) == 'Z' ? x86_64_zero_extended_value (VALUE) \ ! : 0) /* Place additional restrictions on the register class to use when it is necessary to be able to hold a value of mode MODE in a reload ! register for which class CLASS would ordinarily be used. */ ! #define LIMIT_RELOAD_CLASS(MODE, CLASS) \ ! ((MODE) == QImode && !TARGET_64BIT \ ! && ((CLASS) == ALL_REGS || (CLASS) == GENERAL_REGS \ ! || (CLASS) == LEGACY_REGS || (CLASS) == INDEX_REGS) \ ? Q_REGS : (CLASS)) /* Given an rtx X being reloaded into a reg required to be *************** enum reg_class *** 1119,1159 **** /* Put float CONST_DOUBLE in the constant pool instead of fp regs. QImode must go into class Q_REGS. Narrow ALL_REGS to GENERAL_REGS. This supports allowing movsf and ! movdf to do mem-to-mem moves through integer regs. */ ! #define PREFERRED_RELOAD_CLASS(X,CLASS) \ ! (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) != VOIDmode \ ! ? (standard_80387_constant_p (X) \ ! ? CLASS \ ! : (reg_class_subset_p (CLASS, FLOAT_REGS) \ ! ? NO_REGS \ ! : reg_class_subset_p (CLASS, GENERAL_REGS) ? CLASS : GENERAL_REGS)) \ ! : GET_MODE (X) == QImode && ! reg_class_subset_p (CLASS, Q_REGS) ? Q_REGS \ ! : (CLASS)) /* If we are copying between general and FP registers, we need a memory ! location. */ ! /* The same is true for SSE and MMX registers. */ ! #define SECONDARY_MEMORY_NEEDED(CLASS1,CLASS2,MODE) \ ! (FLOAT_CLASS_P (CLASS1) != FLOAT_CLASS_P (CLASS2) \ ! || ((CLASS1 == SSE_REGS) != (CLASS2 == SSE_REGS)) \ ! || ((CLASS1 == MMX_REGS) != (CLASS2 == MMX_REGS) && (MODE) != SImode)) /* QImode spills from non-QI registers need a scratch. This does not happen often -- the only example so far requires an uninitialized pseudo. */ ! #define SECONDARY_OUTPUT_RELOAD_CLASS(CLASS,MODE,OUT) \ ! ((CLASS) == GENERAL_REGS && (MODE) == QImode ? Q_REGS : NO_REGS) /* Return the maximum number of consecutive registers needed to represent mode MODE in a register of class CLASS. */ /* On the 80386, this is the size of MODE in words, ! except in the FP regs, where a single reg is always enough. */ #define CLASS_MAX_NREGS(CLASS, MODE) \ ! (FLOAT_CLASS_P (CLASS) || (CLASS) == SSE_REGS || (CLASS) == MMX_REGS \ ! ? 1 \ ! : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)) /* A C expression whose value is nonzero if pseudos that have been assigned to registers of class CLASS would likely be spilled --- 1460,1496 ---- /* Put float CONST_DOUBLE in the constant pool instead of fp regs. QImode must go into class Q_REGS. Narrow ALL_REGS to GENERAL_REGS. This supports allowing movsf and ! movdf to do mem-to-mem moves through integer regs. */ ! #define PREFERRED_RELOAD_CLASS(X, CLASS) \ ! ix86_preferred_reload_class ((X), (CLASS)) /* If we are copying between general and FP registers, we need a memory ! location. The same is true for SSE and MMX registers. */ ! #define SECONDARY_MEMORY_NEEDED(CLASS1, CLASS2, MODE) \ ! ix86_secondary_memory_needed ((CLASS1), (CLASS2), (MODE), 1) /* QImode spills from non-QI registers need a scratch. This does not happen often -- the only example so far requires an uninitialized pseudo. */ ! #define SECONDARY_OUTPUT_RELOAD_CLASS(CLASS, MODE, OUT) \ ! (((CLASS) == GENERAL_REGS || (CLASS) == LEGACY_REGS \ ! || (CLASS) == INDEX_REGS) && !TARGET_64BIT && (MODE) == QImode \ ! ? Q_REGS : NO_REGS) /* Return the maximum number of consecutive registers needed to represent mode MODE in a register of class CLASS. */ /* On the 80386, this is the size of MODE in words, ! except in the FP regs, where a single reg is always enough. ! The TFmodes are really just 80bit values, so we use only 3 registers ! to hold them, instead of 4, as the size would suggest. ! */ #define CLASS_MAX_NREGS(CLASS, MODE) \ ! (!MAYBE_INTEGER_CLASS_P (CLASS) \ ! ? (COMPLEX_MODE_P (MODE) ? 2 : 1) \ ! : ((GET_MODE_SIZE ((MODE) == TFmode ? XFmode : (MODE)) \ ! + UNITS_PER_WORD - 1) / UNITS_PER_WORD)) /* A C expression whose value is nonzero if pseudos that have been assigned to registers of class CLASS would likely be spilled *************** enum reg_class *** 1186,1196 **** We do this in the new i386 backend to maintain source compatibility with the old cc0-based compiler. */ ! #define MD_ASM_CLOBBERS(CLOBBERS) \ ! do { \ ! (CLOBBERS) = tree_cons (NULL_TREE, build_string (5, "flags"), (CLOBBERS));\ ! (CLOBBERS) = tree_cons (NULL_TREE, build_string (4, "fpsr"), (CLOBBERS)); \ ! (CLOBBERS) = tree_cons (NULL_TREE, build_string (7, "dirflag"), (CLOBBERS)); \ } while (0) /* Stack layout; function entry, exit and calling. */ --- 1523,1536 ---- We do this in the new i386 backend to maintain source compatibility with the old cc0-based compiler. */ ! #define MD_ASM_CLOBBERS(CLOBBERS) \ ! do { \ ! (CLOBBERS) = tree_cons (NULL_TREE, build_string (5, "flags"), \ ! (CLOBBERS)); \ ! (CLOBBERS) = tree_cons (NULL_TREE, build_string (4, "fpsr"), \ ! (CLOBBERS)); \ ! (CLOBBERS) = tree_cons (NULL_TREE, build_string (7, "dirflag"), \ ! (CLOBBERS)); \ } while (0) /* Stack layout; function entry, exit and calling. */ *************** enum reg_class *** 1215,1223 **** this says how many the stack pointer really advances by. On 386 pushw decrements by exactly 2 no matter what the position was. On the 386 there is no pushb; we use pushw instead, and this ! has the effect of rounding up to 2. */ ! #define PUSH_ROUNDING(BYTES) (((BYTES) + 1) & (-2)) /* If defined, the maximum amount of space required for outgoing arguments will be computed and placed into the variable --- 1555,1569 ---- this says how many the stack pointer really advances by. On 386 pushw decrements by exactly 2 no matter what the position was. On the 386 there is no pushb; we use pushw instead, and this ! has the effect of rounding up to 2. ! ! For 64bit ABI we round up to 8 bytes. ! */ ! #define PUSH_ROUNDING(BYTES) \ ! (TARGET_64BIT \ ! ? (((BYTES) + 7) & (-8)) \ ! : (((BYTES) + 1) & (-2))) /* If defined, the maximum amount of space required for outgoing arguments will be computed and placed into the variable *************** enum reg_class *** 1251,1266 **** definition that is usually appropriate, refer to expr.h for additional documentation. If `REG_PARM_STACK_SPACE' is defined, the argument will be computed in the stack and then loaded into a register. */ ! #define MUST_PASS_IN_STACK(MODE,TYPE) \ ! ((TYPE) != 0 \ ! && (TREE_CODE (TYPE_SIZE (TYPE)) != INTEGER_CST \ ! || TREE_ADDRESSABLE (TYPE) \ ! || ((MODE) == TImode) \ ! || ((MODE) == BLKmode \ ! && ! ((TYPE) != 0 && TREE_CODE (TYPE_SIZE (TYPE)) == INTEGER_CST \ ! && 0 == (int_size_in_bytes (TYPE) \ ! % (PARM_BOUNDARY / BITS_PER_UNIT))) \ ! && (FUNCTION_ARG_PADDING (MODE, TYPE) \ == (BYTES_BIG_ENDIAN ? upward : downward))))) /* Value is the number of bytes of arguments automatically --- 1597,1613 ---- definition that is usually appropriate, refer to expr.h for additional documentation. If `REG_PARM_STACK_SPACE' is defined, the argument will be computed in the stack and then loaded into a register. */ ! #define MUST_PASS_IN_STACK(MODE, TYPE) \ ! ((TYPE) != 0 \ ! && (TREE_CODE (TYPE_SIZE (TYPE)) != INTEGER_CST \ ! || TREE_ADDRESSABLE (TYPE) \ ! || ((MODE) == TImode) \ ! || ((MODE) == BLKmode \ ! && ! ((TYPE) != 0 \ ! && TREE_CODE (TYPE_SIZE (TYPE)) == INTEGER_CST \ ! && 0 == (int_size_in_bytes (TYPE) \ ! % (PARM_BOUNDARY / BITS_PER_UNIT))) \ ! && (FUNCTION_ARG_PADDING (MODE, TYPE) \ == (BYTES_BIG_ENDIAN ? upward : downward))))) /* Value is the number of bytes of arguments automatically *************** enum reg_class *** 1280,1301 **** The attribute stdcall is equivalent to RTD on a per module basis. */ ! #define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) \ ! (ix86_return_pops_args (FUNDECL, FUNTYPE, SIZE)) /* Define how to find the value returned by a function. VALTYPE is the data type of the value (as a tree). If the precise function being called is known, FUNC is its FUNCTION_DECL; otherwise, FUNC is 0. */ #define FUNCTION_VALUE(VALTYPE, FUNC) \ ! gen_rtx_REG (TYPE_MODE (VALTYPE), \ ! VALUE_REGNO (TYPE_MODE (VALTYPE))) /* Define how to find the value returned by a library function assuming the value has mode MODE. */ #define LIBCALL_VALUE(MODE) \ ! gen_rtx_REG (MODE, VALUE_REGNO (MODE)) /* Define the size of the result block used for communication between untyped_call and untyped_return. The block contains a DImode value --- 1627,1650 ---- The attribute stdcall is equivalent to RTD on a per module basis. */ ! #define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, SIZE) \ ! ix86_return_pops_args ((FUNDECL), (FUNTYPE), (SIZE)) /* Define how to find the value returned by a function. VALTYPE is the data type of the value (as a tree). If the precise function being called is known, FUNC is its FUNCTION_DECL; otherwise, FUNC is 0. */ #define FUNCTION_VALUE(VALTYPE, FUNC) \ ! ix86_function_value (VALTYPE) ! ! #define FUNCTION_VALUE_REGNO_P(N) \ ! ix86_function_value_regno_p (N) /* Define how to find the value returned by a library function assuming the value has mode MODE. */ #define LIBCALL_VALUE(MODE) \ ! ix86_libcall_value (MODE) /* Define the size of the result block used for communication between untyped_call and untyped_return. The block contains a DImode value *************** enum reg_class *** 1304,1310 **** #define APPLY_RESULT_SIZE (8+108) /* 1 if N is a possible register number for function argument passing. */ ! #define FUNCTION_ARG_REGNO_P(N) ((N) < REGPARM_MAX) /* Define a data type for recording info about an argument list during the scan of that argument list. This data type should --- 1653,1659 ---- #define APPLY_RESULT_SIZE (8+108) /* 1 if N is a possible register number for function argument passing. */ ! #define FUNCTION_ARG_REGNO_P(N) ix86_function_arg_regno_p (N) /* Define a data type for recording info about an argument list during the scan of that argument list. This data type should *************** typedef struct ix86_args { *** 1319,1339 **** int sse_words; /* # sse words passed so far */ int sse_nregs; /* # sse registers available for passing */ int sse_regno; /* next available sse register number */ } CUMULATIVE_ARGS; /* Initialize a variable CUM of type CUMULATIVE_ARGS for a call to a function whose data type is FNTYPE. For a library call, FNTYPE is 0. */ ! #define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT) \ ! (init_cumulative_args (&CUM, FNTYPE, LIBNAME)) /* Update the data in CUM to advance over an argument of mode MODE and data type TYPE. (TYPE is null for libcalls where that information may not be available.) */ ! #define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \ ! (function_arg_advance (&CUM, MODE, TYPE, NAMED)) /* Define where to put the arguments to a function. Value is zero to push the argument on the stack, --- 1668,1689 ---- int sse_words; /* # sse words passed so far */ int sse_nregs; /* # sse registers available for passing */ int sse_regno; /* next available sse register number */ + int maybe_vaarg; /* true for calls to possibly vardic fncts. */ } CUMULATIVE_ARGS; /* Initialize a variable CUM of type CUMULATIVE_ARGS for a call to a function whose data type is FNTYPE. For a library call, FNTYPE is 0. */ ! #define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT) \ ! init_cumulative_args (&(CUM), (FNTYPE), (LIBNAME)) /* Update the data in CUM to advance over an argument of mode MODE and data type TYPE. (TYPE is null for libcalls where that information may not be available.) */ ! #define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \ ! function_arg_advance (&(CUM), (MODE), (TYPE), (NAMED)) /* Define where to put the arguments to a function. Value is zero to push the argument on the stack, *************** typedef struct ix86_args { *** 1349,1355 **** (otherwise it is an extra parameter matching an ellipsis). */ #define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \ ! (function_arg (&CUM, MODE, TYPE, NAMED)) /* For an arg passed partly in registers and partly in memory, this is the number of registers used. --- 1699,1705 ---- (otherwise it is an extra parameter matching an ellipsis). */ #define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \ ! function_arg (&(CUM), (MODE), (TYPE), (NAMED)) /* For an arg passed partly in registers and partly in memory, this is the number of registers used. *************** typedef struct ix86_args { *** 1362,1374 **** If we are returning floats on the register stack, we cannot make sibling calls to functions that return floats. (The stack adjust instruction will wind up after the sibcall jump, and not be executed.) */ ! #define FUNCTION_OK_FOR_SIBCALL(DECL) \ ! (DECL \ ! && (! flag_pic || ! TREE_PUBLIC (DECL)) \ ! && (! TARGET_FLOAT_RETURNS_IN_80387 \ ! || ! FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (TREE_TYPE (DECL)))) \ || FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (TREE_TYPE (cfun->decl)))))) /* This macro is invoked at the end of compilation. It is used here to output code for -fpic that will load the return address into %ebx. */ --- 1712,1754 ---- If we are returning floats on the register stack, we cannot make sibling calls to functions that return floats. (The stack adjust instruction will wind up after the sibcall jump, and not be executed.) */ ! #define FUNCTION_OK_FOR_SIBCALL(DECL) \ ! ((DECL) \ ! && (! flag_pic || ! TREE_PUBLIC (DECL)) \ ! && (! TARGET_FLOAT_RETURNS_IN_80387 \ ! || ! FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (TREE_TYPE (DECL)))) \ || FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (TREE_TYPE (cfun->decl)))))) + /* Perform any needed actions needed for a function that is receiving a + variable number of arguments. + + CUM is as above. + + MODE and TYPE are the mode and type of the current parameter. + + PRETEND_SIZE is a variable that should be set to the amount of stack + that must be pushed by the prolog to pretend that our caller pushed + it. + + Normally, this macro will push all remaining incoming registers on the + stack and set PRETEND_SIZE to the length of the registers pushed. */ + + #define SETUP_INCOMING_VARARGS(CUM, MODE, TYPE, PRETEND_SIZE, NO_RTL) \ + ix86_setup_incoming_varargs (&(CUM), (MODE), (TYPE), &(PRETEND_SIZE), \ + (NO_RTL)) + + /* Define the `__builtin_va_list' type for the ABI. */ + #define BUILD_VA_LIST_TYPE(VALIST) \ + ((VALIST) = ix86_build_va_list ()) + + /* Implement `va_start' for varargs and stdarg. */ + #define EXPAND_BUILTIN_VA_START(STDARG, VALIST, NEXTARG) \ + ix86_va_start ((STDARG), (VALIST), (NEXTARG)) + + /* Implement `va_arg'. */ + #define EXPAND_BUILTIN_VA_ARG(VALIST, TYPE) \ + ix86_va_arg ((VALIST), (TYPE)) + /* This macro is invoked at the end of compilation. It is used here to output code for -fpic that will load the return address into %ebx. */ *************** typedef struct ix86_args { *** 1378,1515 **** /* Output assembler code to FILE to increment profiler label # LABELNO for profiling a function entry. */ ! #define FUNCTION_PROFILER(FILE, LABELNO) \ ! { \ if (flag_pic) \ { \ ! fprintf (FILE, "\tleal\t%sP%d@GOTOFF(%%ebx),%%edx\n", \ LPREFIX, (LABELNO)); \ ! fprintf (FILE, "\tcall\t*_mcount@GOT(%%ebx)\n"); \ } \ else \ { \ ! fprintf (FILE, "\tmovl\t$%sP%d,%%edx\n", LPREFIX, (LABELNO)); \ ! fprintf (FILE, "\tcall\t_mcount\n"); \ } \ ! } ! ! ! /* There are three profiling modes for basic blocks available. ! The modes are selected at compile time by using the options ! -a or -ax of the gnu compiler. ! The variable `profile_block_flag' will be set according to the ! selected option. ! ! profile_block_flag == 0, no option used: ! ! No profiling done. ! ! profile_block_flag == 1, -a option used. ! ! Count frequency of execution of every basic block. ! ! profile_block_flag == 2, -ax option used. ! ! Generate code to allow several different profiling modes at run time. ! Available modes are: ! Produce a trace of all basic blocks. ! Count frequency of jump instructions executed. ! In every mode it is possible to start profiling upon entering ! certain functions and to disable profiling of some other functions. ! ! The result of basic-block profiling will be written to a file `bb.out'. ! If the -ax option is used parameters for the profiling will be read ! from file `bb.in'. ! ! */ ! ! /* The following macro shall output assembler code to FILE ! to initialize basic-block profiling. */ ! ! #undef FUNCTION_BLOCK_PROFILER ! #define FUNCTION_BLOCK_PROFILER(FILE, BLOCK_OR_LABEL) \ ! ix86_output_function_block_profiler (FILE, BLOCK_OR_LABEL) ! ! /* The following macro shall output assembler code to FILE ! to increment a counter associated with basic block number BLOCKNO. */ ! ! #define BLOCK_PROFILER(FILE, BLOCKNO) \ ! ix86_output_block_profiler (FILE, BLOCKNO) ! ! /* The following macro shall output rtl for the epilogue ! to indicate a return from function during basic-block profiling. ! ! If profiling_block_flag == 2: ! ! Output assembler code to call function `__bb_trace_ret'. ! ! Note that function `__bb_trace_ret' must not change the ! machine state, especially the flag register. To grant ! this, you must output code to save and restore registers ! either in this macro or in the macros MACHINE_STATE_SAVE ! and MACHINE_STATE_RESTORE. The last two macros will be ! used in the function `__bb_trace_ret', so you must make ! sure that the function prologue does not change any ! register prior to saving it with MACHINE_STATE_SAVE. ! ! else if profiling_block_flag != 0: ! ! The macro will not be used, so it need not distinguish ! these cases. ! */ ! ! #define FUNCTION_BLOCK_PROFILER_EXIT \ ! emit_call_insn (gen_call (gen_rtx_MEM (QImode, \ ! gen_rtx_SYMBOL_REF (VOIDmode, "__bb_trace_ret")), \ ! const0_rtx)) ! ! /* The function `__bb_trace_func' is called in every basic block ! and is not allowed to change the machine state. Saving (restoring) ! the state can either be done in the BLOCK_PROFILER macro, ! before calling function (rsp. after returning from function) ! `__bb_trace_func', or it can be done inside the function by ! defining the macros: ! ! MACHINE_STATE_SAVE(ID) ! MACHINE_STATE_RESTORE(ID) ! ! In the latter case care must be taken, that the prologue code ! of function `__bb_trace_func' does not already change the ! state prior to saving it with MACHINE_STATE_SAVE. ! ! The parameter `ID' is a string identifying a unique macro use. ! ! On the i386 the initialization code at the begin of ! function `__bb_trace_func' contains a `sub' instruction ! therefore we handle save and restore of the flag register ! in the BLOCK_PROFILER macro. ! ! Note that ebx, esi, and edi are callee-save, so we don't have to ! preserve them explicitly. */ ! ! #define MACHINE_STATE_SAVE(ID) \ ! do { \ ! register int eax_ __asm__("eax"); \ ! register int ecx_ __asm__("ecx"); \ ! register int edx_ __asm__("edx"); \ ! __asm__ __volatile__ ("\ ! push{l} %0\n\t\ ! push{l} %1\n\t\ ! push{l} %2" \ ! : : "r"(eax_), "r"(ecx_), "r"(edx_)); \ ! } while (0); ! ! #define MACHINE_STATE_RESTORE(ID) \ ! do { \ ! register int eax_ __asm__("eax"); \ ! register int ecx_ __asm__("ecx"); \ ! register int edx_ __asm__("edx"); \ ! __asm__ __volatile__ ("\ ! pop{l} %2\n\t\ ! pop{l} %1\n\t\ ! pop{l} %0" \ ! : "=r"(eax_), "=r"(ecx_), "=r"(edx_)); \ ! } while (0); /* EXIT_IGNORE_STACK should be nonzero if, when returning from a function, the stack pointer does not matter. The value is tested only in --- 1758,1777 ---- /* Output assembler code to FILE to increment profiler label # LABELNO for profiling a function entry. */ ! #define FUNCTION_PROFILER(FILE, LABELNO) \ ! do { \ if (flag_pic) \ { \ ! fprintf ((FILE), "\tleal\t%sP%d@GOTOFF(%%ebx),%%edx\n", \ LPREFIX, (LABELNO)); \ ! fprintf ((FILE), "\tcall\t*_mcount@GOT(%%ebx)\n"); \ } \ else \ { \ ! fprintf ((FILE), "\tmovl\t$%sP%d,%%edx\n", LPREFIX, (LABELNO)); \ ! fprintf ((FILE), "\tcall\t_mcount\n"); \ } \ ! } while (0) /* EXIT_IGNORE_STACK should be nonzero if, when returning from a function, the stack pointer does not matter. The value is tested only in *************** pop{l} %0" \ *** 1533,1555 **** /* Length in units of the trampoline for entering a nested function. */ ! #define TRAMPOLINE_SIZE 10 /* Emit RTL insns to initialize the variable parts of a trampoline. FNADDR is an RTX for the address of the function's pure code. CXT is an RTX for the static chain value for the function. */ ! #define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \ ! { \ ! /* Compute offset from the end of the jmp to the target function. */ \ ! rtx disp = expand_binop (SImode, sub_optab, FNADDR, \ ! plus_constant (TRAMP, 10), \ ! NULL_RTX, 1, OPTAB_DIRECT); \ ! emit_move_insn (gen_rtx_MEM (QImode, TRAMP), GEN_INT (0xb9)); \ ! emit_move_insn (gen_rtx_MEM (SImode, plus_constant (TRAMP, 1)), CXT); \ ! emit_move_insn (gen_rtx_MEM (QImode, plus_constant (TRAMP, 5)), GEN_INT (0xe9));\ ! emit_move_insn (gen_rtx_MEM (SImode, plus_constant (TRAMP, 6)), disp); \ ! } /* Definitions for register eliminations. --- 1795,1808 ---- /* Length in units of the trampoline for entering a nested function. */ ! #define TRAMPOLINE_SIZE (TARGET_64BIT ? 23 : 10) /* Emit RTL insns to initialize the variable parts of a trampoline. FNADDR is an RTX for the address of the function's pure code. CXT is an RTX for the static chain value for the function. */ ! #define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \ ! x86_initialize_trampoline ((TRAMP), (FNADDR), (CXT)) /* Definitions for register eliminations. *************** pop{l} %0" \ *** 1581,1588 **** /* Define the offset between two registers, one to be eliminated, and the other its replacement, at the start of a routine. */ ! #define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \ ! (OFFSET) = ix86_initial_elimination_offset (FROM, TO) /* Addressing modes, and classification of registers for them. */ --- 1834,1841 ---- /* Define the offset between two registers, one to be eliminated, and the other its replacement, at the start of a routine. */ ! #define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \ ! ((OFFSET) = ix86_initial_elimination_offset ((FROM), (TO))) /* Addressing modes, and classification of registers for them. */ *************** pop{l} %0" \ *** 1600,1617 **** Since they use reg_renumber, they are safe only once reg_renumber has been allocated, which happens in local-alloc.c. */ ! #define REGNO_OK_FOR_INDEX_P(REGNO) \ ! ((REGNO) < STACK_POINTER_REGNUM \ ! || (unsigned) reg_renumber[REGNO] < STACK_POINTER_REGNUM) ! #define REGNO_OK_FOR_BASE_P(REGNO) \ ! ((REGNO) <= STACK_POINTER_REGNUM \ ! || (REGNO) == ARG_POINTER_REGNUM \ ! || (REGNO) == FRAME_POINTER_REGNUM \ ! || (unsigned) reg_renumber[REGNO] <= STACK_POINTER_REGNUM) ! #define REGNO_OK_FOR_SIREG_P(REGNO) ((REGNO) == 4 || reg_renumber[REGNO] == 4) ! #define REGNO_OK_FOR_DIREG_P(REGNO) ((REGNO) == 5 || reg_renumber[REGNO] == 5) /* The macros REG_OK_FOR..._P assume that the arg is a REG rtx and check its validity for a certain class. --- 1853,1880 ---- Since they use reg_renumber, they are safe only once reg_renumber has been allocated, which happens in local-alloc.c. */ ! #define REGNO_OK_FOR_INDEX_P(REGNO) \ ! ((REGNO) < STACK_POINTER_REGNUM \ ! || (REGNO >= FIRST_REX_INT_REG \ ! && (REGNO) <= LAST_REX_INT_REG) \ ! || ((unsigned) reg_renumber[(REGNO)] >= FIRST_REX_INT_REG \ ! && (unsigned) reg_renumber[(REGNO)] <= LAST_REX_INT_REG) \ ! || (unsigned) reg_renumber[(REGNO)] < STACK_POINTER_REGNUM) ! #define REGNO_OK_FOR_BASE_P(REGNO) \ ! ((REGNO) <= STACK_POINTER_REGNUM \ ! || (REGNO) == ARG_POINTER_REGNUM \ ! || (REGNO) == FRAME_POINTER_REGNUM \ ! || (REGNO >= FIRST_REX_INT_REG \ ! && (REGNO) <= LAST_REX_INT_REG) \ ! || ((unsigned) reg_renumber[(REGNO)] >= FIRST_REX_INT_REG \ ! && (unsigned) reg_renumber[(REGNO)] <= LAST_REX_INT_REG) \ ! || (unsigned) reg_renumber[(REGNO)] <= STACK_POINTER_REGNUM) ! #define REGNO_OK_FOR_SIREG_P(REGNO) \ ! ((REGNO) == 4 || reg_renumber[(REGNO)] == 4) ! #define REGNO_OK_FOR_DIREG_P(REGNO) \ ! ((REGNO) == 5 || reg_renumber[(REGNO)] == 5) /* The macros REG_OK_FOR..._P assume that the arg is a REG rtx and check its validity for a certain class. *************** pop{l} %0" \ *** 1630,1661 **** /* Non strict versions, pseudos are ok */ #define REG_OK_FOR_INDEX_NONSTRICT_P(X) \ (REGNO (X) < STACK_POINTER_REGNUM \ || REGNO (X) >= FIRST_PSEUDO_REGISTER) #define REG_OK_FOR_BASE_NONSTRICT_P(X) \ (REGNO (X) <= STACK_POINTER_REGNUM \ || REGNO (X) == ARG_POINTER_REGNUM \ ! || REGNO (X) == FRAME_POINTER_REGNUM \ || REGNO (X) >= FIRST_PSEUDO_REGISTER) - #define REG_OK_FOR_STRREG_NONSTRICT_P(X) \ - (REGNO (X) == 4 || REGNO (X) == 5 || REGNO (X) >= FIRST_PSEUDO_REGISTER) - /* Strict versions, hard registers only */ #define REG_OK_FOR_INDEX_STRICT_P(X) REGNO_OK_FOR_INDEX_P (REGNO (X)) #define REG_OK_FOR_BASE_STRICT_P(X) REGNO_OK_FOR_BASE_P (REGNO (X)) - #define REG_OK_FOR_STRREG_STRICT_P(X) \ - (REGNO_OK_FOR_DIREG_P (REGNO (X)) || REGNO_OK_FOR_SIREG_P (REGNO (X))) #ifndef REG_OK_STRICT ! #define REG_OK_FOR_INDEX_P(X) REG_OK_FOR_INDEX_NONSTRICT_P(X) ! #define REG_OK_FOR_BASE_P(X) REG_OK_FOR_BASE_NONSTRICT_P(X) ! #define REG_OK_FOR_STRREG_P(X) REG_OK_FOR_STRREG_NONSTRICT_P(X) #else ! #define REG_OK_FOR_INDEX_P(X) REG_OK_FOR_INDEX_STRICT_P(X) ! #define REG_OK_FOR_BASE_P(X) REG_OK_FOR_BASE_STRICT_P(X) ! #define REG_OK_FOR_STRREG_P(X) REG_OK_FOR_STRREG_STRICT_P(X) #endif /* GO_IF_LEGITIMATE_ADDRESS recognizes an RTL expression --- 1893,1921 ---- /* Non strict versions, pseudos are ok */ #define REG_OK_FOR_INDEX_NONSTRICT_P(X) \ (REGNO (X) < STACK_POINTER_REGNUM \ + || (REGNO (X) >= FIRST_REX_INT_REG \ + && REGNO (X) <= LAST_REX_INT_REG) \ || REGNO (X) >= FIRST_PSEUDO_REGISTER) #define REG_OK_FOR_BASE_NONSTRICT_P(X) \ (REGNO (X) <= STACK_POINTER_REGNUM \ || REGNO (X) == ARG_POINTER_REGNUM \ ! || REGNO (X) == FRAME_POINTER_REGNUM \ ! || (REGNO (X) >= FIRST_REX_INT_REG \ ! && REGNO (X) <= LAST_REX_INT_REG) \ || REGNO (X) >= FIRST_PSEUDO_REGISTER) /* Strict versions, hard registers only */ #define REG_OK_FOR_INDEX_STRICT_P(X) REGNO_OK_FOR_INDEX_P (REGNO (X)) #define REG_OK_FOR_BASE_STRICT_P(X) REGNO_OK_FOR_BASE_P (REGNO (X)) #ifndef REG_OK_STRICT ! #define REG_OK_FOR_INDEX_P(X) REG_OK_FOR_INDEX_NONSTRICT_P (X) ! #define REG_OK_FOR_BASE_P(X) REG_OK_FOR_BASE_NONSTRICT_P (X) #else ! #define REG_OK_FOR_INDEX_P(X) REG_OK_FOR_INDEX_STRICT_P (X) ! #define REG_OK_FOR_BASE_P(X) REG_OK_FOR_BASE_STRICT_P (X) #endif /* GO_IF_LEGITIMATE_ADDRESS recognizes an RTL expression *************** pop{l} %0" \ *** 1673,1679 **** #define CONSTANT_ADDRESS_P(X) \ (GET_CODE (X) == LABEL_REF || GET_CODE (X) == SYMBOL_REF \ ! || GET_CODE (X) == CONST_INT || GET_CODE (X) == CONST) /* Nonzero if the constant value X is a legitimate general operand. It is given that X satisfies CONSTANT_P or is a CONST_DOUBLE. */ --- 1933,1940 ---- #define CONSTANT_ADDRESS_P(X) \ (GET_CODE (X) == LABEL_REF || GET_CODE (X) == SYMBOL_REF \ ! || GET_CODE (X) == CONST_INT || GET_CODE (X) == CONST \ ! || GET_CODE (X) == CONST_DOUBLE) /* Nonzero if the constant value X is a legitimate general operand. It is given that X satisfies CONSTANT_P or is a CONST_DOUBLE. */ *************** pop{l} %0" \ *** 1682,1698 **** #ifdef REG_OK_STRICT #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \ ! { \ ! if (legitimate_address_p (MODE, X, 1)) \ goto ADDR; \ ! } #else #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \ ! { \ ! if (legitimate_address_p (MODE, X, 0)) \ goto ADDR; \ ! } #endif --- 1943,1959 ---- #ifdef REG_OK_STRICT #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \ ! do { \ ! if (legitimate_address_p ((MODE), (X), 1)) \ goto ADDR; \ ! } while (0) #else #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \ ! do { \ ! if (legitimate_address_p ((MODE), (X), 0)) \ goto ADDR; \ ! } while (0) #endif *************** pop{l} %0" \ *** 1705,1711 **** The typical use of this macro is to handle addresses containing a label_ref or symbol_ref within an UNSPEC. */ ! #define FIND_BASE_TERM(X) ix86_find_base_term (x) /* Try machine-dependent ways of modifying an illegitimate address to be legitimate. If we find one, return the new, valid address. --- 1966,1972 ---- The typical use of this macro is to handle addresses containing a label_ref or symbol_ref within an UNSPEC. */ ! #define FIND_BASE_TERM(X) ix86_find_base_term (X) /* Try machine-dependent ways of modifying an illegitimate address to be legitimate. If we find one, return the new, valid address. *************** pop{l} %0" \ *** 1729,1741 **** See comments by legitimize_pic_address in i386.c for details. */ #define LEGITIMIZE_ADDRESS(X, OLDX, MODE, WIN) \ ! { \ ! (X) = legitimize_address (X, OLDX, MODE); \ ! if (memory_address_p (MODE, X)) \ goto WIN; \ ! } ! #define REWRITE_ADDRESS(x) rewrite_address(x) /* Nonzero if the constant value X is a legitimate general operand when generating PIC code. It is given that flag_pic is on and --- 1990,2002 ---- See comments by legitimize_pic_address in i386.c for details. */ #define LEGITIMIZE_ADDRESS(X, OLDX, MODE, WIN) \ ! do { \ ! (X) = legitimize_address ((X), (OLDX), (MODE)); \ ! if (memory_address_p ((MODE), (X))) \ goto WIN; \ ! } while (0) ! #define REWRITE_ADDRESS(X) rewrite_address (X) /* Nonzero if the constant value X is a legitimate general operand when generating PIC code. It is given that flag_pic is on and *************** pop{l} %0" \ *** 1746,1761 **** || legitimate_pic_address_disp_p (X)) #define SYMBOLIC_CONST(X) \ ! (GET_CODE (X) == SYMBOL_REF \ ! || GET_CODE (X) == LABEL_REF \ ! || (GET_CODE (X) == CONST && symbolic_reference_mentioned_p (X))) /* Go to LABEL if ADDR (a legitimate address expression) has an effect that depends on the machine mode it is used for. On the 80386, only postdecrement and postincrement address depend thus (the amount of decrement or increment being the length of the operand). */ ! #define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL) \ ! if (GET_CODE (ADDR) == POST_INC || GET_CODE (ADDR) == POST_DEC) goto LABEL /* Codes for all the SSE/MMX builtins. */ enum ix86_builtins --- 2007,2026 ---- || legitimate_pic_address_disp_p (X)) #define SYMBOLIC_CONST(X) \ ! (GET_CODE (X) == SYMBOL_REF \ ! || GET_CODE (X) == LABEL_REF \ ! || (GET_CODE (X) == CONST && symbolic_reference_mentioned_p (X))) /* Go to LABEL if ADDR (a legitimate address expression) has an effect that depends on the machine mode it is used for. On the 80386, only postdecrement and postincrement address depend thus (the amount of decrement or increment being the length of the operand). */ ! #define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL) \ ! do { \ ! if (GET_CODE (ADDR) == POST_INC \ ! || GET_CODE (ADDR) == POST_DEC) \ ! goto LABEL; \ ! } while (0) /* Codes for all the SSE/MMX builtins. */ enum ix86_builtins *************** enum ix86_builtins *** 1815,1822 **** IX86_BUILTIN_CVTSS2SI, IX86_BUILTIN_CVTTPS2PI, IX86_BUILTIN_CVTTSS2SI, - IX86_BUILTIN_M_FROM_INT, - IX86_BUILTIN_M_TO_INT, IX86_BUILTIN_MAXPS, IX86_BUILTIN_MAXSS, --- 2080,2085 ---- *************** enum ix86_builtins *** 1941,1977 **** IX86_BUILTIN_LDMXCSR, IX86_BUILTIN_STMXCSR, IX86_BUILTIN_SFENCE, - IX86_BUILTIN_PREFETCH, ! /* Composite builtins, expand to more than one insn. */ ! IX86_BUILTIN_SETPS1, ! IX86_BUILTIN_SETPS, ! IX86_BUILTIN_CLRPS, ! IX86_BUILTIN_SETRPS, ! IX86_BUILTIN_LOADPS1, ! IX86_BUILTIN_LOADRPS, ! IX86_BUILTIN_STOREPS1, ! IX86_BUILTIN_STORERPS, IX86_BUILTIN_MMX_ZERO, IX86_BUILTIN_MAX }; - - /* Initialize the target-specific builtin functions. Only do something - if TARGET_MMX is nonzero; we take care in ix86_init_builtins not to - enable any SSE builtins if TARGET_SSE is zero. */ - #define MD_INIT_BUILTINS \ - do \ - { \ - if (TARGET_MMX) \ - ix86_init_builtins (); \ - } \ - while (0) - - /* Expand a target-specific builtin function. */ - #define MD_EXPAND_BUILTIN(EXP, TARGET, SUBTARGET, MODE, IGNORE) \ - ix86_expand_builtin (EXP, TARGET, SUBTARGET, MODE, IGNORE) /* Define this macro if references to a symbol must be treated differently depending on something about the variable or --- 2204,2245 ---- IX86_BUILTIN_LDMXCSR, IX86_BUILTIN_STMXCSR, IX86_BUILTIN_SFENCE, ! /* 3DNow! Original */ ! IX86_BUILTIN_FEMMS, ! IX86_BUILTIN_PAVGUSB, ! IX86_BUILTIN_PF2ID, ! IX86_BUILTIN_PFACC, ! IX86_BUILTIN_PFADD, ! IX86_BUILTIN_PFCMPEQ, ! IX86_BUILTIN_PFCMPGE, ! IX86_BUILTIN_PFCMPGT, ! IX86_BUILTIN_PFMAX, ! IX86_BUILTIN_PFMIN, ! IX86_BUILTIN_PFMUL, ! IX86_BUILTIN_PFRCP, ! IX86_BUILTIN_PFRCPIT1, ! IX86_BUILTIN_PFRCPIT2, ! IX86_BUILTIN_PFRSQIT1, ! IX86_BUILTIN_PFRSQRT, ! IX86_BUILTIN_PFSUB, ! IX86_BUILTIN_PFSUBR, ! IX86_BUILTIN_PI2FD, ! IX86_BUILTIN_PMULHRW, + /* 3DNow! Athlon Extensions */ + IX86_BUILTIN_PF2IW, + IX86_BUILTIN_PFNACC, + IX86_BUILTIN_PFPNACC, + IX86_BUILTIN_PI2FW, + IX86_BUILTIN_PSWAPDSI, + IX86_BUILTIN_PSWAPDSF, + + IX86_BUILTIN_SSE_ZERO, IX86_BUILTIN_MMX_ZERO, IX86_BUILTIN_MAX }; /* Define this macro if references to a symbol must be treated differently depending on something about the variable or *************** enum ix86_builtins *** 1981,1988 **** so that we may access it directly in the GOT. */ #define ENCODE_SECTION_INFO(DECL) \ ! do \ ! { \ if (flag_pic) \ { \ rtx rtl = (TREE_CODE_CLASS (TREE_CODE (DECL)) != 'd' \ --- 2249,2255 ---- so that we may access it directly in the GOT. */ #define ENCODE_SECTION_INFO(DECL) \ ! do { \ if (flag_pic) \ { \ rtx rtl = (TREE_CODE_CLASS (TREE_CODE (DECL)) != 'd' \ *************** do \ *** 2003,2010 **** || ! TREE_PUBLIC (DECL)); \ } \ } \ ! } \ ! while (0) /* The `FINALIZE_PIC' macro serves as a hook to emit these special codes once the function is being compiled into assembly code, but --- 2270,2276 ---- || ! TREE_PUBLIC (DECL)); \ } \ } \ ! } while (0) /* The `FINALIZE_PIC' macro serves as a hook to emit these special codes once the function is being compiled into assembly code, but *************** while (0) *** 2013,2085 **** prologues being included in functions which used inline functions and were compiled to assembly language.) */ ! #define FINALIZE_PIC \ ! do \ ! { \ ! current_function_uses_pic_offset_table |= profile_flag | profile_block_flag; \ ! } \ ! while (0) - /* If defined, a C expression whose value is nonzero if IDENTIFIER - with arguments ARGS is a valid machine specific attribute for DECL. - The attributes in ATTRIBUTES have previously been assigned to DECL. */ - - #define VALID_MACHINE_DECL_ATTRIBUTE(DECL, ATTRIBUTES, NAME, ARGS) \ - (ix86_valid_decl_attribute_p (DECL, ATTRIBUTES, NAME, ARGS)) - - /* If defined, a C expression whose value is nonzero if IDENTIFIER - with arguments ARGS is a valid machine specific attribute for TYPE. - The attributes in ATTRIBUTES have previously been assigned to TYPE. */ - - #define VALID_MACHINE_TYPE_ATTRIBUTE(TYPE, ATTRIBUTES, NAME, ARGS) \ - (ix86_valid_type_attribute_p (TYPE, ATTRIBUTES, NAME, ARGS)) - - /* If defined, a C expression whose value is zero if the attributes on - TYPE1 and TYPE2 are incompatible, one if they are compatible, and - two if they are nearly compatible (which causes a warning to be - generated). */ - - #define COMP_TYPE_ATTRIBUTES(TYPE1, TYPE2) \ - (ix86_comp_type_attributes (TYPE1, TYPE2)) - - /* If defined, a C statement that assigns default attributes to newly - defined TYPE. */ - - /* #define SET_DEFAULT_TYPE_ATTRIBUTES (TYPE) */ - /* Max number of args passed in registers. If this is more than 3, we will have problems with ebx (register #4), since it is a caller save register and is also used as the pic register in ELF. So for now, don't allow more than 3 registers to be passed in registers. */ ! #define REGPARM_MAX 3 /* Specify the machine mode that this machine uses for the index in the tablejump instruction. */ ! #define CASE_VECTOR_MODE Pmode /* Define as C expression which evaluates to nonzero if the tablejump instruction expects the table to contain offsets from the address of the table. ! Do not define this if the table should contain absolute addresses. */ /* #define CASE_VECTOR_PC_RELATIVE 1 */ - /* Specify the tree operation to be used to convert reals to integers. - This should be changed to take advantage of fist --wfs ?? - */ - #define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR - - /* This is the kind of divide that is easiest to do in the general case. */ - #define EASY_DIV_EXPR TRUNC_DIV_EXPR - /* Define this as 1 if `char' should by default be signed; else as 0. */ #define DEFAULT_SIGNED_CHAR 1 /* Max number of bytes we can move from memory to memory in one reasonably fast instruction. */ ! #define MOVE_MAX 4 /* If a memory-to-memory move would take MOVE_RATIO or more simple move-instruction pairs, we will do a movstr or libcall instead. --- 2279,2325 ---- prologues being included in functions which used inline functions and were compiled to assembly language.) */ ! #define FINALIZE_PIC \ ! (current_function_uses_pic_offset_table |= current_function_profile) /* Max number of args passed in registers. If this is more than 3, we will have problems with ebx (register #4), since it is a caller save register and is also used as the pic register in ELF. So for now, don't allow more than 3 registers to be passed in registers. */ ! #define REGPARM_MAX (TARGET_64BIT ? 6 : 3) ! ! #define SSE_REGPARM_MAX (TARGET_64BIT ? 8 : 0) /* Specify the machine mode that this machine uses for the index in the tablejump instruction. */ ! #define CASE_VECTOR_MODE (!TARGET_64BIT || flag_pic ? SImode : DImode) /* Define as C expression which evaluates to nonzero if the tablejump instruction expects the table to contain offsets from the address of the table. ! Do not define this if the table should contain absolute addresses. */ /* #define CASE_VECTOR_PC_RELATIVE 1 */ /* Define this as 1 if `char' should by default be signed; else as 0. */ #define DEFAULT_SIGNED_CHAR 1 + /* Number of bytes moved into a data cache for a single prefetch operation. */ + #define PREFETCH_BLOCK ix86_cost->prefetch_block + + /* Number of prefetch operations that can be done in parallel. */ + #define SIMULTANEOUS_PREFETCHES ix86_cost->simultaneous_prefetches + /* Max number of bytes we can move from memory to memory in one reasonably fast instruction. */ ! #define MOVE_MAX 16 ! ! /* MOVE_MAX_PIECES is the number of bytes at a time which we can ! move efficiently, as opposed to MOVE_MAX which is the maximum ! number of bytes we can move with a single instruction. */ ! #define MOVE_MAX_PIECES (TARGET_64BIT ? 8 : 4) /* If a memory-to-memory move would take MOVE_RATIO or more simple move-instruction pairs, we will do a movstr or libcall instead. *************** while (0) *** 2093,2099 **** /* Define if shifts truncate the shift count which implies one can omit a sign-extension or zero-extension of a shift count. */ ! /* On i386, shifts do truncate the count. But bit opcodes don't. */ /* #define SHIFT_COUNT_TRUNCATED */ --- 2333,2339 ---- /* Define if shifts truncate the shift count which implies one can omit a sign-extension or zero-extension of a shift count. */ ! /* On i386, shifts do truncate the count. But bit opcodes don't. */ /* #define SHIFT_COUNT_TRUNCATED */ *************** while (0) *** 2109,2133 **** /* When a prototype says `char' or `short', really pass an `int'. (The 386 can't easily push less than an int.) */ ! #define PROMOTE_PROTOTYPES 1 /* A macro to update M and UNSIGNEDP when an object whose type is TYPE and which has the specified mode and signedness is to be stored in a register. This macro is only called when TYPE is a scalar type. ! On i386 it is sometimes usefull to promote HImode and QImode quantities to SImode. The choice depends on target type. */ #define PROMOTE_MODE(MODE, UNSIGNEDP, TYPE) \ if (((MODE) == HImode && TARGET_PROMOTE_HI_REGS) \ || ((MODE) == QImode && TARGET_PROMOTE_QI_REGS)) \ ! (MODE) = SImode; /* Specify the machine mode that pointers have. After generation of rtl, the compiler makes no further distinction between pointers and any other objects of this machine mode. */ ! #define Pmode SImode /* A function address in a call instruction is a byte address (for indexing purposes) --- 2349,2375 ---- /* When a prototype says `char' or `short', really pass an `int'. (The 386 can't easily push less than an int.) */ ! #define PROMOTE_PROTOTYPES (!TARGET_64BIT) /* A macro to update M and UNSIGNEDP when an object whose type is TYPE and which has the specified mode and signedness is to be stored in a register. This macro is only called when TYPE is a scalar type. ! On i386 it is sometimes useful to promote HImode and QImode quantities to SImode. The choice depends on target type. */ #define PROMOTE_MODE(MODE, UNSIGNEDP, TYPE) \ + do { \ if (((MODE) == HImode && TARGET_PROMOTE_HI_REGS) \ || ((MODE) == QImode && TARGET_PROMOTE_QI_REGS)) \ ! (MODE) = SImode; \ ! } while (0) /* Specify the machine mode that pointers have. After generation of rtl, the compiler makes no further distinction between pointers and any other objects of this machine mode. */ ! #define Pmode (TARGET_64BIT ? DImode : SImode) /* A function address in a call instruction is a byte address (for indexing purposes) *************** while (0) *** 2147,2170 **** CODE is the expression code--redundant, since it can be obtained with `GET_CODE (X)'. */ ! #define CONST_COSTS(RTX,CODE,OUTER_CODE) \ case CONST_INT: \ - return (unsigned) INTVAL (RTX) < 256 ? 0 : 1; \ case CONST: \ case LABEL_REF: \ case SYMBOL_REF: \ ! return flag_pic && SYMBOLIC_CONST (RTX) ? 2 : 1; \ \ case CONST_DOUBLE: \ { \ int code; \ if (GET_MODE (RTX) == VOIDmode) \ ! return 2; \ \ code = standard_80387_constant_p (RTX); \ ! return code == 1 ? 0 : \ ! code == 2 ? 1 : \ ! 2; \ } /* Delete the definition here when TOPLEVEL_COSTS_N_INSNS gets added to cse.c */ --- 2389,2415 ---- CODE is the expression code--redundant, since it can be obtained with `GET_CODE (X)'. */ ! #define CONST_COSTS(RTX, CODE, OUTER_CODE) \ case CONST_INT: \ case CONST: \ case LABEL_REF: \ case SYMBOL_REF: \ ! if (TARGET_64BIT && !x86_64_sign_extended_value (RTX)) \ ! return 3; \ ! if (TARGET_64BIT && !x86_64_zero_extended_value (RTX)) \ ! return 2; \ ! return flag_pic && SYMBOLIC_CONST (RTX) ? 1 : 0; \ \ case CONST_DOUBLE: \ { \ int code; \ if (GET_MODE (RTX) == VOIDmode) \ ! return 0; \ \ code = standard_80387_constant_p (RTX); \ ! return code == 1 ? 1 : \ ! code == 2 ? 2 : \ ! 3; \ } /* Delete the definition here when TOPLEVEL_COSTS_N_INSNS gets added to cse.c */ *************** while (0) *** 2181,2195 **** This macro is optional; do not define it if the default cost assumptions are adequate for the target machine. */ ! #define RTX_COSTS(X,CODE,OUTER_CODE) \ case ASHIFT: \ if (GET_CODE (XEXP (X, 1)) == CONST_INT \ ! && GET_MODE (XEXP (X, 0)) == SImode) \ { \ HOST_WIDE_INT value = INTVAL (XEXP (X, 1)); \ if (value == 1) \ TOPLEVEL_COSTS_N_INSNS (ix86_cost->add); \ ! if (value == 2 || value == 3) \ TOPLEVEL_COSTS_N_INSNS (ix86_cost->lea); \ } \ /* fall through */ \ --- 2426,2457 ---- This macro is optional; do not define it if the default cost assumptions are adequate for the target machine. */ ! #define RTX_COSTS(X, CODE, OUTER_CODE) \ ! case ZERO_EXTEND: \ ! /* The zero extensions is often completely free on x86_64, so make \ ! it as cheap as possible. */ \ ! if (TARGET_64BIT && GET_MODE (X) == DImode \ ! && GET_MODE (XEXP (X, 0)) == SImode) \ ! { \ ! total = 1; goto egress_rtx_costs; \ ! } \ ! else \ ! TOPLEVEL_COSTS_N_INSNS (TARGET_ZERO_EXTEND_WITH_AND ? \ ! ix86_cost->add : ix86_cost->movzx); \ ! break; \ ! case SIGN_EXTEND: \ ! TOPLEVEL_COSTS_N_INSNS (ix86_cost->movsx); \ ! break; \ case ASHIFT: \ if (GET_CODE (XEXP (X, 1)) == CONST_INT \ ! && (GET_MODE (XEXP (X, 0)) != DImode || TARGET_64BIT)) \ { \ HOST_WIDE_INT value = INTVAL (XEXP (X, 1)); \ if (value == 1) \ TOPLEVEL_COSTS_N_INSNS (ix86_cost->add); \ ! if ((value == 2 || value == 3) \ ! && !TARGET_DECOMPOSE_LEA \ ! && ix86_cost->lea <= ix86_cost->shift_const) \ TOPLEVEL_COSTS_N_INSNS (ix86_cost->lea); \ } \ /* fall through */ \ *************** while (0) *** 2198,2204 **** case ASHIFTRT: \ case LSHIFTRT: \ case ROTATERT: \ ! if (GET_MODE (XEXP (X, 0)) == DImode) \ { \ if (GET_CODE (XEXP (X, 1)) == CONST_INT) \ { \ --- 2460,2466 ---- case ASHIFTRT: \ case LSHIFTRT: \ case ROTATERT: \ ! if (!TARGET_64BIT && GET_MODE (XEXP (X, 0)) == DImode) \ { \ if (GET_CODE (XEXP (X, 1)) == CONST_INT) \ { \ *************** while (0) *** 2250,2304 **** TOPLEVEL_COSTS_N_INSNS (ix86_cost->divide); \ \ case PLUS: \ ! if (GET_CODE (XEXP (X, 0)) == PLUS \ ! && GET_CODE (XEXP (XEXP (X, 0), 0)) == MULT \ ! && GET_CODE (XEXP (XEXP (XEXP (X, 0), 0), 1)) == CONST_INT \ ! && GET_CODE (XEXP (X, 1)) == CONST_INT) \ { \ ! HOST_WIDE_INT val = INTVAL (XEXP (XEXP (XEXP (X, 0), 0), 1)); \ ! if (val == 2 || val == 4 || val == 8) \ { \ ! return (COSTS_N_INSNS (ix86_cost->lea) \ ! + rtx_cost (XEXP (XEXP (X, 0), 1), OUTER_CODE) \ ! + rtx_cost (XEXP (XEXP (XEXP (X, 0), 0), 0), OUTER_CODE) \ ! + rtx_cost (XEXP (X, 1), OUTER_CODE)); \ } \ ! } \ ! else if (GET_CODE (XEXP (X, 0)) == MULT \ ! && GET_CODE (XEXP (XEXP (X, 0), 1)) == CONST_INT) \ ! { \ ! HOST_WIDE_INT val = INTVAL (XEXP (XEXP (X, 0), 1)); \ ! if (val == 2 || val == 4 || val == 8) \ { \ return (COSTS_N_INSNS (ix86_cost->lea) \ ! + rtx_cost (XEXP (XEXP (X, 0), 0), OUTER_CODE) \ ! + rtx_cost (XEXP (X, 1), OUTER_CODE)); \ } \ } \ - else if (GET_CODE (XEXP (X, 0)) == PLUS) \ - { \ - return (COSTS_N_INSNS (ix86_cost->lea) \ - + rtx_cost (XEXP (XEXP (X, 0), 0), OUTER_CODE) \ - + rtx_cost (XEXP (XEXP (X, 0), 1), OUTER_CODE) \ - + rtx_cost (XEXP (X, 1), OUTER_CODE)); \ - } \ \ /* fall through */ \ case AND: \ case IOR: \ case XOR: \ case MINUS: \ ! if (GET_MODE (X) == DImode) \ return (COSTS_N_INSNS (ix86_cost->add) * 2 \ ! + (rtx_cost (XEXP (X, 0), OUTER_CODE) \ << (GET_MODE (XEXP (X, 0)) != DImode)) \ ! + (rtx_cost (XEXP (X, 1), OUTER_CODE) \ << (GET_MODE (XEXP (X, 1)) != DImode))); \ \ /* fall through */ \ case NEG: \ case NOT: \ ! if (GET_MODE (X) == DImode) \ TOPLEVEL_COSTS_N_INSNS (ix86_cost->add * 2); \ TOPLEVEL_COSTS_N_INSNS (ix86_cost->add); \ \ --- 2512,2574 ---- TOPLEVEL_COSTS_N_INSNS (ix86_cost->divide); \ \ case PLUS: \ ! if (!TARGET_DECOMPOSE_LEA \ ! && INTEGRAL_MODE_P (GET_MODE (X)) \ ! && GET_MODE_BITSIZE (GET_MODE (X)) <= GET_MODE_BITSIZE (Pmode)) \ { \ ! if (GET_CODE (XEXP (X, 0)) == PLUS \ ! && GET_CODE (XEXP (XEXP (X, 0), 0)) == MULT \ ! && GET_CODE (XEXP (XEXP (XEXP (X, 0), 0), 1)) == CONST_INT \ ! && CONSTANT_P (XEXP (X, 1))) \ { \ ! HOST_WIDE_INT val = INTVAL (XEXP (XEXP (XEXP (X, 0), 0), 1));\ ! if (val == 2 || val == 4 || val == 8) \ ! { \ ! return (COSTS_N_INSNS (ix86_cost->lea) \ ! + rtx_cost (XEXP (XEXP (X, 0), 1), \ ! (OUTER_CODE)) \ ! + rtx_cost (XEXP (XEXP (XEXP (X, 0), 0), 0), \ ! (OUTER_CODE)) \ ! + rtx_cost (XEXP (X, 1), (OUTER_CODE))); \ ! } \ } \ ! else if (GET_CODE (XEXP (X, 0)) == MULT \ ! && GET_CODE (XEXP (XEXP (X, 0), 1)) == CONST_INT) \ ! { \ ! HOST_WIDE_INT val = INTVAL (XEXP (XEXP (X, 0), 1)); \ ! if (val == 2 || val == 4 || val == 8) \ ! { \ ! return (COSTS_N_INSNS (ix86_cost->lea) \ ! + rtx_cost (XEXP (XEXP (X, 0), 0), \ ! (OUTER_CODE)) \ ! + rtx_cost (XEXP (X, 1), (OUTER_CODE))); \ ! } \ ! } \ ! else if (GET_CODE (XEXP (X, 0)) == PLUS) \ { \ return (COSTS_N_INSNS (ix86_cost->lea) \ ! + rtx_cost (XEXP (XEXP (X, 0), 0), (OUTER_CODE)) \ ! + rtx_cost (XEXP (XEXP (X, 0), 1), (OUTER_CODE)) \ ! + rtx_cost (XEXP (X, 1), (OUTER_CODE))); \ } \ } \ \ /* fall through */ \ case AND: \ case IOR: \ case XOR: \ case MINUS: \ ! if (!TARGET_64BIT && GET_MODE (X) == DImode) \ return (COSTS_N_INSNS (ix86_cost->add) * 2 \ ! + (rtx_cost (XEXP (X, 0), (OUTER_CODE)) \ << (GET_MODE (XEXP (X, 0)) != DImode)) \ ! + (rtx_cost (XEXP (X, 1), (OUTER_CODE)) \ << (GET_MODE (XEXP (X, 1)) != DImode))); \ \ /* fall through */ \ case NEG: \ case NOT: \ ! if (!TARGET_64BIT && GET_MODE (X) == DImode) \ TOPLEVEL_COSTS_N_INSNS (ix86_cost->add * 2); \ TOPLEVEL_COSTS_N_INSNS (ix86_cost->add); \ \ *************** while (0) *** 2362,2386 **** It is not required that the cost always equal 2 when FROM is the same as TO; on some machines it is expensive to move between registers if they are not ! general registers. ! ! On the i386, copying between floating-point and fixed-point ! registers is done trough memory. ! ! Integer -> fp moves are noticeably slower than the opposite direction ! because of the partial memory stall they cause. Give it an ! arbitary high cost. ! */ ! #define REGISTER_MOVE_COST(MODE, CLASS1, CLASS2) \ ! ((FLOAT_CLASS_P (CLASS1) && ! FLOAT_CLASS_P (CLASS2)) \ ! ? (MEMORY_MOVE_COST (DFmode, CLASS1, 0) \ ! + MEMORY_MOVE_COST (DFmode, CLASS2, 1)) \ ! : (! FLOAT_CLASS_P (CLASS1) && FLOAT_CLASS_P (CLASS2)) ? 10 \ ! : ((CLASS1) == MMX_REGS && (CLASS2) == SSE_REGS) ? 10 \ ! : ((CLASS1) == SSE_REGS && (CLASS2) == MMX_REGS) ? 10 \ ! : ((CLASS1) == MMX_REGS) != ((CLASS2) == MMX_REGS) ? 3 \ ! : 2) /* A C expression for the cost of moving data of mode M between a register and memory. A value of 2 is the default; this cost is --- 2632,2641 ---- It is not required that the cost always equal 2 when FROM is the same as TO; on some machines it is expensive to move between registers if they are not ! general registers. */ ! #define REGISTER_MOVE_COST(MODE, CLASS1, CLASS2) \ ! ix86_register_move_cost ((MODE), (CLASS1), (CLASS2)) /* A C expression for the cost of moving data of mode M between a register and memory. A value of 2 is the default; this cost is *************** while (0) *** 2388,2415 **** If moving between registers and memory is more expensive than between two registers, you should define this macro to express the ! relative cost. ! ! Model also increased moving costs of QImode registers in non ! Q_REGS classes. ! */ ! #define MEMORY_MOVE_COST(MODE,CLASS,IN) \ ! (FLOAT_CLASS_P (CLASS) \ ! ? (GET_MODE_SIZE (MODE)==4 \ ! ? (IN ? ix86_cost->fp_load[0] : ix86_cost->fp_store[0]) \ ! : (GET_MODE_SIZE (MODE)==8 \ ! ? (IN ? ix86_cost->fp_load[1] : ix86_cost->fp_store[1]) \ ! : (IN ? ix86_cost->fp_load[2] : ix86_cost->fp_store[2]))) \ ! : (GET_MODE_SIZE (MODE)==1 \ ! ? (IN ? (Q_CLASS_P (CLASS) ? ix86_cost->int_load[0] \ ! : ix86_cost->movzbl_load) \ ! : (Q_CLASS_P (CLASS) ? ix86_cost->int_store[0] \ ! : ix86_cost->int_store[0] + 4)) \ ! : (GET_MODE_SIZE (MODE)==2 \ ! ? (IN ? ix86_cost->int_load[1] : ix86_cost->int_store[1]) \ ! : ((IN ? ix86_cost->int_load[2] : ix86_cost->int_store[2]) \ ! * (int) GET_MODE_SIZE (MODE) / 4)))) /* A C expression for the cost of a branch instruction. A value of 1 is the default; other values are interpreted relative to that. */ --- 2643,2652 ---- If moving between registers and memory is more expensive than between two registers, you should define this macro to express the ! relative cost. */ ! #define MEMORY_MOVE_COST(MODE, CLASS, IN) \ ! ix86_memory_move_cost ((MODE), (CLASS), (IN)) /* A C expression for the cost of a branch instruction. A value of 1 is the default; other values are interpreted relative to that. */ *************** while (0) *** 2435,2453 **** /* Nonzero if access to memory by shorts is slow and undesirable. */ #define SLOW_SHORT_ACCESS 0 - /* Define this macro if zero-extension (of a `char' or `short' to an - `int') can be done faster if the destination is a register that is - known to be zero. - - If you define this macro, you must have instruction patterns that - recognize RTL structures like this: - - (set (strict_low_part (subreg:QI (reg:SI ...) 0)) ...) - - and likewise for `HImode'. */ - - /* #define SLOW_ZERO_EXTEND */ - /* Define this macro to be the value 1 if unaligned accesses have a cost many times greater than aligned accesses, for example if they are emulated in a trap handler. --- 2672,2677 ---- *************** while (0) *** 2481,2509 **** register. */ #define NO_RECURSIVE_FUNCTION_CSE - - /* A C statement (sans semicolon) to update the integer variable COST - based on the relationship between INSN that is dependent on - DEP_INSN through the dependence LINK. The default is to make no - adjustment to COST. This can be used for example to specify to - the scheduler that an output- or anti-dependence does not incur - the same cost as a data-dependence. */ - - #define ADJUST_COST(insn,link,dep_insn,cost) \ - (cost) = ix86_adjust_cost(insn, link, dep_insn, cost) - - #define ISSUE_RATE \ - ix86_issue_rate () - - #define MD_SCHED_INIT(DUMP, SCHED_VERBOSE, MAX_READY) \ - ix86_sched_init (DUMP, SCHED_VERBOSE) - - #define MD_SCHED_REORDER(DUMP, SCHED_VERBOSE, READY, N_READY, CLOCK, CIM) \ - (CIM) = ix86_sched_reorder (DUMP, SCHED_VERBOSE, READY, N_READY, CLOCK) - - #define MD_SCHED_VARIABLE_ISSUE(DUMP, SCHED_VERBOSE, INSN, CAN_ISSUE_MORE) \ - ((CAN_ISSUE_MORE) = \ - ix86_variable_issue (DUMP, SCHED_VERBOSE, INSN, CAN_ISSUE_MORE)) /* Add any extra modes needed to represent the condition code. --- 2705,2710 ---- *************** while (0) *** 2525,2537 **** Add CCZ to indicate that only the Zero flag is valid. */ ! #define EXTRA_CC_MODES \ ! CC(CCGCmode, "CCGC") \ ! CC(CCGOCmode, "CCGOC") \ ! CC(CCNOmode, "CCNO") \ ! CC(CCZmode, "CCZ") \ ! CC(CCFPmode, "CCFP") \ ! CC(CCFPUmode, "CCFPU") /* Given a comparison code (EQ, NE, etc.) and the first operand of a COMPARE, return the mode to be used for the comparison. --- 2726,2738 ---- Add CCZ to indicate that only the Zero flag is valid. */ ! #define EXTRA_CC_MODES \ ! CC (CCGCmode, "CCGC") \ ! CC (CCGOCmode, "CCGOC") \ ! CC (CCNOmode, "CCNO") \ ! CC (CCZmode, "CCZ") \ ! CC (CCFPmode, "CCFP") \ ! CC (CCFPUmode, "CCFPU") /* Given a comparison code (EQ, NE, etc.) and the first operand of a COMPARE, return the mode to be used for the comparison. *************** while (0) *** 2542,2548 **** For integer comparisons against zero, reduce to CCNOmode or CCZmode if possible, to allow for more combinations. */ ! #define SELECT_CC_MODE(OP,X,Y) ix86_cc_mode (OP, X, Y) /* Return non-zero if MODE implies a floating point inequality can be reversed. */ --- 2743,2749 ---- For integer comparisons against zero, reduce to CCNOmode or CCZmode if possible, to allow for more combinations. */ ! #define SELECT_CC_MODE(OP, X, Y) ix86_cc_mode ((OP), (X), (Y)) /* Return non-zero if MODE implies a floating point inequality can be reversed. */ *************** while (0) *** 2560,2566 **** this does not vary between assemblers. */ /* How to refer to registers in assembler output. ! This sequence is indexed by compiler's hard-register-number (see above). */ /* In order to refer to the first 8 regs as 32 bit regs prefix an "e" For non floating point regs, the following are the HImode names. --- 2761,2767 ---- this does not vary between assemblers. */ /* How to refer to registers in assembler output. ! This sequence is indexed by compiler's hard-register-number (see above). */ /* In order to refer to the first 8 regs as 32 bit regs prefix an "e" For non floating point regs, the following are the HImode names. *************** while (0) *** 2568,2585 **** For float regs, the stack top is sometimes referred to as "%st(0)" instead of just "%st". PRINT_REG handles this with the "y" code. */ - #define HI_REGISTER_NAMES \ - {"ax","dx","cx","bx","si","di","bp","sp", \ - "st","st(1)","st(2)","st(3)","st(4)","st(5)","st(6)","st(7)","", \ - "flags","fpsr", "dirflag", "frame" } - #undef HI_REGISTER_NAMES #define HI_REGISTER_NAMES \ {"ax","dx","cx","bx","si","di","bp","sp", \ "st","st(1)","st(2)","st(3)","st(4)","st(5)","st(6)","st(7)","", \ "flags","fpsr", "dirflag", "frame", \ "xmm0","xmm1","xmm2","xmm3","xmm4","xmm5","xmm6","xmm7", \ ! "mm0", "mm1", "mm2", "mm3", "mm4", "mm5", "mm6", "mm7" } #define REGISTER_NAMES HI_REGISTER_NAMES --- 2769,2783 ---- For float regs, the stack top is sometimes referred to as "%st(0)" instead of just "%st". PRINT_REG handles this with the "y" code. */ #undef HI_REGISTER_NAMES #define HI_REGISTER_NAMES \ {"ax","dx","cx","bx","si","di","bp","sp", \ "st","st(1)","st(2)","st(3)","st(4)","st(5)","st(6)","st(7)","", \ "flags","fpsr", "dirflag", "frame", \ "xmm0","xmm1","xmm2","xmm3","xmm4","xmm5","xmm6","xmm7", \ ! "mm0", "mm1", "mm2", "mm3", "mm4", "mm5", "mm6", "mm7" , \ ! "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", \ ! "xmm8", "xmm9", "xmm10", "xmm11", "xmm12", "xmm13", "xmm14", "xmm15"} #define REGISTER_NAMES HI_REGISTER_NAMES *************** while (0) *** 2588,2593 **** --- 2786,2793 ---- #define ADDITIONAL_REGISTER_NAMES \ { { "eax", 0 }, { "edx", 1 }, { "ecx", 2 }, { "ebx", 3 }, \ { "esi", 4 }, { "edi", 5 }, { "ebp", 6 }, { "esp", 7 }, \ + { "rax", 0 }, { "rdx", 1 }, { "rcx", 2 }, { "rbx", 3 }, \ + { "rsi", 4 }, { "rdi", 5 }, { "rbp", 6 }, { "rsp", 7 }, \ { "al", 0 }, { "dl", 1 }, { "cl", 2 }, { "bl", 3 }, \ { "ah", 0 }, { "dh", 1 }, { "ch", 2 }, { "bh", 3 }, \ { "mm0", 8}, { "mm1", 9}, { "mm2", 10}, { "mm3", 11}, \ *************** to get gcc to use these, since they want *** 2598,2624 **** number as al, and ax. */ - /* note the last four are not really qi_registers, but - the md will have to never output movb into one of them - only a movw . There is no movb into the last four regs */ - #define QI_REGISTER_NAMES \ ! {"al", "dl", "cl", "bl", "si", "di", "bp", "sp",} /* These parallel the array above, and can be used to access bits 8:15 ! of regs 0 through 3. */ #define QI_HIGH_REGISTER_NAMES \ {"ah", "dh", "ch", "bh", } - #define MMX_REGISTER_NAMES \ - {0,0,0,0,0,0,0,0,"mm0","mm1","mm2","mm3","mm4","mm5","mm6","mm7"} - /* How to renumber registers for dbx and gdb. */ ! #define DBX_REGISTER_NUMBER(n) dbx_register_map[n] extern int const dbx_register_map[FIRST_PSEUDO_REGISTER]; extern int const svr4_dbx_register_map[FIRST_PSEUDO_REGISTER]; /* Before the prologue, RA is at 0(%esp). */ --- 2798,2819 ---- number as al, and ax. */ #define QI_REGISTER_NAMES \ ! {"al", "dl", "cl", "bl", "sil", "dil", "bpl", "spl",} /* These parallel the array above, and can be used to access bits 8:15 ! of regs 0 through 3. */ #define QI_HIGH_REGISTER_NAMES \ {"ah", "dh", "ch", "bh", } /* How to renumber registers for dbx and gdb. */ ! #define DBX_REGISTER_NUMBER(N) \ ! (TARGET_64BIT ? dbx64_register_map[(N)] : dbx_register_map[(N)]) extern int const dbx_register_map[FIRST_PSEUDO_REGISTER]; + extern int const dbx64_register_map[FIRST_PSEUDO_REGISTER]; extern int const svr4_dbx_register_map[FIRST_PSEUDO_REGISTER]; /* Before the prologue, RA is at 0(%esp). */ *************** extern int const svr4_dbx_register_map[F *** 2626,2645 **** gen_rtx_MEM (VOIDmode, gen_rtx_REG (VOIDmode, STACK_POINTER_REGNUM)) /* After the prologue, RA is at -4(AP) in the current frame. */ ! #define RETURN_ADDR_RTX(COUNT, FRAME) \ ! ((COUNT) == 0 \ ! ? gen_rtx_MEM (Pmode, plus_constant (arg_pointer_rtx, -4))\ ! : gen_rtx_MEM (Pmode, plus_constant (FRAME, 4))) ! /* PC is dbx register 8; let's use that column for RA. */ ! #define DWARF_FRAME_RETURN_COLUMN 8 /* Before the prologue, the top of the frame is at 4(%esp). */ ! #define INCOMING_FRAME_SP_OFFSET 4 /* Describe how we implement __builtin_eh_return. */ ! #define EH_RETURN_DATA_REGNO(N) ((N) < 2 ? (N) : INVALID_REGNUM) ! #define EH_RETURN_STACKADJ_RTX gen_rtx_REG (Pmode, 2) /* Select a format to encode pointers in exception handling data. CODE is 0 for data, 1 for code labels, 2 for function pointers. GLOBAL is --- 2821,2841 ---- gen_rtx_MEM (VOIDmode, gen_rtx_REG (VOIDmode, STACK_POINTER_REGNUM)) /* After the prologue, RA is at -4(AP) in the current frame. */ ! #define RETURN_ADDR_RTX(COUNT, FRAME) \ ! ((COUNT) == 0 \ ! ? gen_rtx_MEM (Pmode, plus_constant (arg_pointer_rtx, -UNITS_PER_WORD)) \ ! : gen_rtx_MEM (Pmode, plus_constant (FRAME, UNITS_PER_WORD))) ! /* PC is dbx register 8; let's use that column for RA. */ ! #define DWARF_FRAME_RETURN_COLUMN (TARGET_64BIT ? 16 : 8) /* Before the prologue, the top of the frame is at 4(%esp). */ ! #define INCOMING_FRAME_SP_OFFSET UNITS_PER_WORD /* Describe how we implement __builtin_eh_return. */ ! #define EH_RETURN_DATA_REGNO(N) ((N) < 2 ? (N) : INVALID_REGNUM) ! #define EH_RETURN_STACKADJ_RTX gen_rtx_REG (Pmode, 2) ! /* Select a format to encode pointers in exception handling data. CODE is 0 for data, 1 for code labels, 2 for function pointers. GLOBAL is *************** extern int const svr4_dbx_register_map[F *** 2649,2691 **** After all, the relocation needed is the same as for the call insn. Whether or not a particular assembler allows us to enter such, I guess we'll have to see. */ ! #define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL) \ ! (flag_pic ? (GLOBAL ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel \ : DW_EH_PE_absptr) /* This is how to output the definition of a user-level label named NAME, such as the label on a static function or variable NAME. */ ! #define ASM_OUTPUT_LABEL(FILE,NAME) \ ! (assemble_name (FILE, NAME), fputs (":\n", FILE)) ! ! /* This is how to output an assembler line defining a `double' constant. */ ! ! #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ ! do { long l[2]; \ ! REAL_VALUE_TO_TARGET_DOUBLE (VALUE, l); \ ! fprintf (FILE, "%s0x%lx,0x%lx\n", ASM_LONG, l[0], l[1]); \ ! } while (0) ! ! /* This is how to output a `long double' extended real constant. */ ! ! #undef ASM_OUTPUT_LONG_DOUBLE ! #define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \ ! do { long l[4]; \ ! REAL_VALUE_TO_TARGET_LONG_DOUBLE (VALUE, l); \ ! if (TARGET_128BIT_LONG_DOUBLE) \ ! fprintf (FILE, "%s0x%lx,0x%lx,0x%lx,0x0\n", ASM_LONG, l[0], l[1], l[2]); \ ! else \ ! fprintf (FILE, "%s0x%lx,0x%lx,0x%lx\n", ASM_LONG, l[0], l[1], l[2]); \ ! } while (0) ! ! /* This is how to output an assembler line defining a `float' constant. */ ! ! #define ASM_OUTPUT_FLOAT(FILE,VALUE) \ ! do { long l; \ ! REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ ! fprintf ((FILE), "%s0x%lx\n", ASM_LONG, l); \ ! } while (0) /* Store in OUTPUT a string (made with alloca) containing an assembler-name for a local static variable named NAME. --- 2845,2860 ---- After all, the relocation needed is the same as for the call insn. Whether or not a particular assembler allows us to enter such, I guess we'll have to see. */ ! #define ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL) \ ! (flag_pic \ ! ? ((GLOBAL) ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | DW_EH_PE_sdata4\ : DW_EH_PE_absptr) /* This is how to output the definition of a user-level label named NAME, such as the label on a static function or variable NAME. */ ! #define ASM_OUTPUT_LABEL(FILE, NAME) \ ! (assemble_name ((FILE), (NAME)), fputs (":\n", (FILE))) /* Store in OUTPUT a string (made with alloca) containing an assembler-name for a local static variable named NAME. *************** do { long l; \ *** 2695,2821 **** ( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 10), \ sprintf ((OUTPUT), "%s.%d", (NAME), (LABELNO))) - /* This is how to output an assembler line defining an `int' constant. */ - - #define ASM_OUTPUT_INT(FILE,VALUE) \ - ( fputs (ASM_LONG, FILE), \ - output_addr_const (FILE,(VALUE)), \ - putc('\n',FILE)) - - /* Likewise for `char' and `short' constants. */ - - #define ASM_OUTPUT_SHORT(FILE,VALUE) \ - ( fputs (ASM_SHORT, FILE), \ - output_addr_const (FILE,(VALUE)), \ - putc('\n',FILE)) - - #define ASM_OUTPUT_CHAR(FILE,VALUE) \ - ( fputs (ASM_BYTE_OP, FILE), \ - output_addr_const (FILE, (VALUE)), \ - putc ('\n', FILE)) - - /* Given that x86 natively supports unaligned data, it's reasonable to - assume that all x86 assemblers don't auto-align data. Thus the - unaligned output macros required by dwarf2 frame unwind information - degenerate to the macros used above. */ - #define UNALIGNED_SHORT_ASM_OP ASM_SHORT - #define UNALIGNED_INT_ASM_OP ASM_LONG - #define INT_ASM_OP ASM_LONG - - /* This is how to output an assembler line for a numeric constant byte. */ - - #define ASM_OUTPUT_BYTE(FILE,VALUE) \ - asm_fprintf ((FILE), "%s0x%x\n", ASM_BYTE_OP, (VALUE)) - /* This is how to output an insn to push a register on the stack. It need not be very fast code. */ ! #define ASM_OUTPUT_REG_PUSH(FILE,REGNO) \ ! asm_fprintf (FILE, "\tpush{l}\t%%e%s\n", reg_names[REGNO]) /* This is how to output an insn to pop a register from the stack. It need not be very fast code. */ ! #define ASM_OUTPUT_REG_POP(FILE,REGNO) \ ! asm_fprintf (FILE, "\tpop{l}\t%%e%s\n", reg_names[REGNO]) ! /* This is how to output an element of a case-vector that is absolute. ! */ #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ ! fprintf (FILE, "%s%s%d\n", ASM_LONG, LPREFIX, VALUE) ! /* This is how to output an element of a case-vector that is relative. ! We don't use these on the 386 yet, because the ATT assembler can't do ! forward reference the differences. ! */ #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ ! fprintf (FILE, "%s%s%d-%s%d\n",ASM_LONG, LPREFIX, VALUE, LPREFIX, REL) /* A C statement that outputs an address constant appropriate to for DWARF debugging. */ ! #define ASM_OUTPUT_DWARF_ADDR_CONST(FILE,X) \ ! i386_dwarf_output_addr_const((FILE),(X)) /* Either simplify a location expression, or return the original. */ #define ASM_SIMPLIFY_DWARF_ADDR(X) \ ! i386_simplify_dwarf_addr(X) ! ! /* Define the parentheses used to group arithmetic operations ! in assembler code. */ ! ! #define ASM_OPEN_PAREN "" ! #define ASM_CLOSE_PAREN "" ! /* Define results of standard character escape sequences. */ ! #define TARGET_BELL 007 ! #define TARGET_BS 010 ! #define TARGET_TAB 011 ! #define TARGET_NEWLINE 012 ! #define TARGET_VT 013 ! #define TARGET_FF 014 ! #define TARGET_CR 015 /* Print operand X (an rtx) in assembler syntax to file FILE. CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified. ! The CODE z takes the size of operand from the following digit, and ! outputs b,w,or l respectively. ! ! On the 80386, we use several such letters: ! f -- float insn (print a CONST_DOUBLE as a float rather than in hex). ! L,W,B,Q,S,T -- print the opcode suffix for specified size of operand. ! R -- print the prefix for register names. ! z -- print the opcode suffix for the size of the current operand. ! * -- print a star (in certain assembler syntax) ! A -- print an absolute memory reference. ! P -- if PIC, print an @PLT suffix. ! X -- don't print any sort of PIC '@' suffix for a symbol. ! s -- ??? something to do with double shifts. not actually used, afaik. ! C -- print a conditional move suffix corresponding to the op code. ! c -- likewise, but reverse the condition. ! F,f -- likewise, but for floating-point. */ ! #define PRINT_OPERAND_PUNCT_VALID_P(CODE) \ ! ((CODE) == '*') /* Print the name of a register based on its machine mode and number. If CODE is 'w', pretend the mode is HImode. If CODE is 'b', pretend the mode is QImode. If CODE is 'k', pretend the mode is SImode. If CODE is 'h', pretend the reg is the `high' byte register. ! If CODE is 'y', print "st(0)" instead of "st", if the reg is stack op. */ #define PRINT_REG(X, CODE, FILE) \ ! print_reg (X, CODE, FILE) #define PRINT_OPERAND(FILE, X, CODE) \ ! print_operand (FILE, X, CODE) #define PRINT_OPERAND_ADDRESS(FILE, ADDR) \ ! print_operand_address (FILE, ADDR) /* Print the name of a register for based on its machine mode and number. This macro is used to print debugging output. --- 2864,2940 ---- ( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 10), \ sprintf ((OUTPUT), "%s.%d", (NAME), (LABELNO))) /* This is how to output an insn to push a register on the stack. It need not be very fast code. */ ! #define ASM_OUTPUT_REG_PUSH(FILE, REGNO) \ ! asm_fprintf ((FILE), "\tpush{l}\t%%e%s\n", reg_names[(REGNO)]) /* This is how to output an insn to pop a register from the stack. It need not be very fast code. */ ! #define ASM_OUTPUT_REG_POP(FILE, REGNO) \ ! asm_fprintf ((FILE), "\tpop{l}\t%%e%s\n", reg_names[(REGNO)]) ! /* This is how to output an element of a case-vector that is absolute. */ #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ ! ix86_output_addr_vec_elt ((FILE), (VALUE)) ! /* This is how to output an element of a case-vector that is relative. */ #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ ! ix86_output_addr_diff_elt ((FILE), (VALUE), (REL)) ! ! /* Under some conditions we need jump tables in the text section, because ! the assembler cannot handle label differences between sections. */ ! ! #define JUMP_TABLES_IN_TEXT_SECTION \ ! (!TARGET_64BIT && flag_pic && !HAVE_AS_GOTOFF_IN_DATA) /* A C statement that outputs an address constant appropriate to for DWARF debugging. */ ! #define ASM_OUTPUT_DWARF_ADDR_CONST(FILE, X) \ ! i386_dwarf_output_addr_const ((FILE), (X)) /* Either simplify a location expression, or return the original. */ #define ASM_SIMPLIFY_DWARF_ADDR(X) \ ! i386_simplify_dwarf_addr (X) ! /* Switch to init or fini section via SECTION_OP, emit a call to FUNC, ! and switch back. For x86 we do this only to save a few bytes that ! would otherwise be unused in the text section. */ ! #define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \ ! asm (SECTION_OP "\n\t" \ ! "call " USER_LABEL_PREFIX #FUNC "\n" \ ! TEXT_SECTION_ASM_OP); /* Print operand X (an rtx) in assembler syntax to file FILE. CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified. ! Effect of various CODE letters is described in i386.c near ! print_operand function. */ ! #define PRINT_OPERAND_PUNCT_VALID_P(CODE) \ ! ((CODE) == '*' || (CODE) == '+') /* Print the name of a register based on its machine mode and number. If CODE is 'w', pretend the mode is HImode. If CODE is 'b', pretend the mode is QImode. If CODE is 'k', pretend the mode is SImode. + If CODE is 'q', pretend the mode is DImode. If CODE is 'h', pretend the reg is the `high' byte register. ! If CODE is 'y', print "st(0)" instead of "st", if the reg is stack op. */ #define PRINT_REG(X, CODE, FILE) \ ! print_reg ((X), (CODE), (FILE)) #define PRINT_OPERAND(FILE, X, CODE) \ ! print_operand ((FILE), (X), (CODE)) #define PRINT_OPERAND_ADDRESS(FILE, ADDR) \ ! print_operand_address ((FILE), (ADDR)) /* Print the name of a register for based on its machine mode and number. This macro is used to print debugging output. *************** do { long l; \ *** 2825,2875 **** #define DEBUG_PRINT_REG(X, CODE, FILE) \ do { static const char * const hi_name[] = HI_REGISTER_NAMES; \ static const char * const qi_name[] = QI_REGISTER_NAMES; \ ! fprintf (FILE, "%d ", REGNO (X)); \ if (REGNO (X) == FLAGS_REG) \ ! { fputs ("flags", FILE); break; } \ if (REGNO (X) == DIRFLAG_REG) \ ! { fputs ("dirflag", FILE); break; } \ if (REGNO (X) == FPSR_REG) \ ! { fputs ("fpsr", FILE); break; } \ if (REGNO (X) == ARG_POINTER_REGNUM) \ ! { fputs ("argp", FILE); break; } \ if (REGNO (X) == FRAME_POINTER_REGNUM) \ ! { fputs ("frame", FILE); break; } \ if (STACK_TOP_P (X)) \ ! { fputs ("st(0)", FILE); break; } \ if (FP_REG_P (X)) \ ! { fputs (hi_name[REGNO(X)], FILE); break; } \ switch (GET_MODE_SIZE (GET_MODE (X))) \ { \ default: \ ! fputs ("e", FILE); \ case 2: \ ! fputs (hi_name[REGNO (X)], FILE); \ break; \ case 1: \ ! fputs (qi_name[REGNO (X)], FILE); \ break; \ } \ } while (0) - /* Routines in libgcc that return floats must return them in an fp reg, - just as other functions do which return such values. - These macros make that happen. */ - - #define FLOAT_VALUE_TYPE float - #define INTIFY(FLOATVAL) FLOATVAL - /* a letter which is not needed by the normal asm syntax, which we can use for operand syntax in the extended asm */ #define ASM_OPERAND_LETTER '#' #define RET return "" ! #define AT_SP(mode) (gen_rtx_MEM ((mode), stack_pointer_rtx)) /* Define the codes that are matched by predicates in i386.c. */ #define PREDICATE_CODES \ {"const_int_1_operand", {CONST_INT}}, \ {"symbolic_operand", {SYMBOL_REF, LABEL_REF, CONST}}, \ {"aligned_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF, \ --- 2944,3030 ---- #define DEBUG_PRINT_REG(X, CODE, FILE) \ do { static const char * const hi_name[] = HI_REGISTER_NAMES; \ static const char * const qi_name[] = QI_REGISTER_NAMES; \ ! fprintf ((FILE), "%d ", REGNO (X)); \ if (REGNO (X) == FLAGS_REG) \ ! { fputs ("flags", (FILE)); break; } \ if (REGNO (X) == DIRFLAG_REG) \ ! { fputs ("dirflag", (FILE)); break; } \ if (REGNO (X) == FPSR_REG) \ ! { fputs ("fpsr", (FILE)); break; } \ if (REGNO (X) == ARG_POINTER_REGNUM) \ ! { fputs ("argp", (FILE)); break; } \ if (REGNO (X) == FRAME_POINTER_REGNUM) \ ! { fputs ("frame", (FILE)); break; } \ if (STACK_TOP_P (X)) \ ! { fputs ("st(0)", (FILE)); break; } \ if (FP_REG_P (X)) \ ! { fputs (hi_name[REGNO(X)], (FILE)); break; } \ ! if (REX_INT_REG_P (X)) \ ! { \ ! switch (GET_MODE_SIZE (GET_MODE (X))) \ ! { \ ! default: \ ! case 8: \ ! fprintf ((FILE), "r%i", REGNO (X) \ ! - FIRST_REX_INT_REG + 8); \ ! break; \ ! case 4: \ ! fprintf ((FILE), "r%id", REGNO (X) \ ! - FIRST_REX_INT_REG + 8); \ ! break; \ ! case 2: \ ! fprintf ((FILE), "r%iw", REGNO (X) \ ! - FIRST_REX_INT_REG + 8); \ ! break; \ ! case 1: \ ! fprintf ((FILE), "r%ib", REGNO (X) \ ! - FIRST_REX_INT_REG + 8); \ ! break; \ ! } \ ! break; \ ! } \ switch (GET_MODE_SIZE (GET_MODE (X))) \ { \ + case 8: \ + fputs ("r", (FILE)); \ + fputs (hi_name[REGNO (X)], (FILE)); \ + break; \ default: \ ! fputs ("e", (FILE)); \ case 2: \ ! fputs (hi_name[REGNO (X)], (FILE)); \ break; \ case 1: \ ! fputs (qi_name[REGNO (X)], (FILE)); \ break; \ } \ } while (0) /* a letter which is not needed by the normal asm syntax, which we can use for operand syntax in the extended asm */ #define ASM_OPERAND_LETTER '#' #define RET return "" ! #define AT_SP(MODE) (gen_rtx_MEM ((MODE), stack_pointer_rtx)) /* Define the codes that are matched by predicates in i386.c. */ #define PREDICATE_CODES \ + {"x86_64_immediate_operand", {CONST_INT, SUBREG, REG, \ + SYMBOL_REF, LABEL_REF, CONST}}, \ + {"x86_64_nonmemory_operand", {CONST_INT, SUBREG, REG, \ + SYMBOL_REF, LABEL_REF, CONST}}, \ + {"x86_64_movabs_operand", {CONST_INT, SUBREG, REG, \ + SYMBOL_REF, LABEL_REF, CONST}}, \ + {"x86_64_szext_nonmemory_operand", {CONST_INT, SUBREG, REG, \ + SYMBOL_REF, LABEL_REF, CONST}}, \ + {"x86_64_general_operand", {CONST_INT, SUBREG, REG, MEM, \ + SYMBOL_REF, LABEL_REF, CONST}}, \ + {"x86_64_szext_general_operand", {CONST_INT, SUBREG, REG, MEM, \ + SYMBOL_REF, LABEL_REF, CONST}}, \ + {"x86_64_zext_immediate_operand", {CONST_INT, CONST_DOUBLE, CONST, \ + SYMBOL_REF, LABEL_REF}}, \ + {"shiftdi_operand", {SUBREG, REG, MEM}}, \ {"const_int_1_operand", {CONST_INT}}, \ {"symbolic_operand", {SYMBOL_REF, LABEL_REF, CONST}}, \ {"aligned_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF, \ *************** do { long l; \ *** 2891,2897 **** {"fcmov_comparison_operator", {EQ, NE, LTU, GTU, LEU, GEU, UNORDERED, \ ORDERED, LT, UNLT, GT, UNGT, LE, UNLE, \ GE, UNGE, LTGT, UNEQ}}, \ ! {"sse_comparison_operator", {EQ, LT, LE, UNORDERED }}, \ {"ix86_comparison_operator", {EQ, NE, LE, LT, GE, GT, LEU, LTU, GEU, \ GTU, UNORDERED, ORDERED, UNLE, UNLT, \ UNGE, UNGT, LTGT, UNEQ }}, \ --- 3046,3054 ---- {"fcmov_comparison_operator", {EQ, NE, LTU, GTU, LEU, GEU, UNORDERED, \ ORDERED, LT, UNLT, GT, UNGT, LE, UNLE, \ GE, UNGE, LTGT, UNEQ}}, \ ! {"sse_comparison_operator", {EQ, LT, LE, UNORDERED, NE, UNGE, UNGT, \ ! ORDERED, UNEQ, UNLT, UNLE, LTGT, GE, GT \ ! }}, \ {"ix86_comparison_operator", {EQ, NE, LE, LT, GE, GT, LEU, LTU, GEU, \ GTU, UNORDERED, ORDERED, UNLE, UNLT, \ UNGE, UNGT, LTGT, UNEQ }}, \ *************** do { long l; \ *** 2916,2925 **** #define SPECIAL_MODE_PREDICATES \ "ext_register_operand", /* Variables in i386.c */ extern const char *ix86_cpu_string; /* for -mcpu= */ extern const char *ix86_arch_string; /* for -march= */ ! extern const char *ix86_reg_alloc_order; /* register allocation order */ extern const char *ix86_regparm_string; /* # registers to use to pass args */ extern const char *ix86_align_loops_string; /* power of two alignment for loops */ extern const char *ix86_align_jumps_string; /* power of two alignment for non-loop jumps */ --- 3073,3119 ---- #define SPECIAL_MODE_PREDICATES \ "ext_register_operand", + /* CM_32 is used by 32bit ABI + CM_SMALL is small model assuming that all code and data fits in the first + 31bits of address space. + CM_KERNEL is model assuming that all code and data fits in the negative + 31bits of address space. + CM_MEDIUM is model assuming that code fits in the first 31bits of address + space. Size of data is unlimited. + CM_LARGE is model making no assumptions about size of particular sections. + + CM_SMALL_PIC is model for PIC libraries assuming that code+data+got/plt + tables first in 31bits of address space. + */ + enum cmodel { + CM_32, + CM_SMALL, + CM_KERNEL, + CM_MEDIUM, + CM_LARGE, + CM_SMALL_PIC + }; + + /* Size of the RED_ZONE area. */ + #define RED_ZONE_SIZE 128 + /* Reserved area of the red zone for temporaries. */ + #define RED_ZONE_RESERVE 8 + extern const char *ix86_debug_arg_string, *ix86_debug_addr_string; + + enum asm_dialect { + ASM_ATT, + ASM_INTEL + }; + extern const char *ix86_asm_string; + extern enum asm_dialect ix86_asm_dialect; + /* Value of -mcmodel specified by user. */ + extern const char *ix86_cmodel_string; + extern enum cmodel ix86_cmodel; + /* Variables in i386.c */ extern const char *ix86_cpu_string; /* for -mcpu= */ extern const char *ix86_arch_string; /* for -march= */ ! extern const char *ix86_fpmath_string; /* for -mfpmath= */ extern const char *ix86_regparm_string; /* # registers to use to pass args */ extern const char *ix86_align_loops_string; /* power of two alignment for loops */ extern const char *ix86_align_jumps_string; /* power of two alignment for non-loop jumps */ *************** extern const char *ix86_align_funcs_stri *** 2927,2943 **** extern const char *ix86_preferred_stack_boundary_string;/* power of two alignment for stack boundary */ extern const char *ix86_branch_cost_string; /* values 1-5: see jump.c */ extern int ix86_regparm; /* ix86_regparm_string as a number */ - extern int ix86_align_loops; /* power of two alignment for loops */ - extern int ix86_align_jumps; /* power of two alignment for non-loop jumps */ - extern int ix86_align_funcs; /* power of two alignment for functions */ extern int ix86_preferred_stack_boundary; /* preferred stack boundary alignment in bits */ extern int ix86_branch_cost; /* values 1-5: see jump.c */ ! extern const char * const hi_reg_name[]; /* names for 16 bit regs */ ! extern const char * const qi_reg_name[]; /* names for 8 bit regs (low) */ ! extern const char * const qi_high_reg_name[]; /* names for 8 bit regs (high) */ ! extern enum reg_class const regclass_map[]; /* smalled class containing REGNO */ ! extern struct rtx_def *ix86_compare_op0; /* operand 0 for comparisons */ ! extern struct rtx_def *ix86_compare_op1; /* operand 1 for comparisons */ /* Local variables: --- 3121,3203 ---- extern const char *ix86_preferred_stack_boundary_string;/* power of two alignment for stack boundary */ extern const char *ix86_branch_cost_string; /* values 1-5: see jump.c */ extern int ix86_regparm; /* ix86_regparm_string as a number */ extern int ix86_preferred_stack_boundary; /* preferred stack boundary alignment in bits */ extern int ix86_branch_cost; /* values 1-5: see jump.c */ ! extern enum reg_class const regclass_map[FIRST_PSEUDO_REGISTER]; /* smalled class containing REGNO */ ! extern rtx ix86_compare_op0; /* operand 0 for comparisons */ ! extern rtx ix86_compare_op1; /* operand 1 for comparisons */ ! ! /* To properly truncate FP values into integers, we need to set i387 control ! word. We can't emit proper mode switching code before reload, as spills ! generated by reload may truncate values incorrectly, but we still can avoid ! redundant computation of new control word by the mode switching pass. ! The fldcw instructions are still emitted redundantly, but this is probably ! not going to be noticeable problem, as most CPUs do have fast path for ! the sequence. ! ! The machinery is to emit simple truncation instructions and split them ! before reload to instructions having USEs of two memory locations that ! are filled by this code to old and new control word. ! ! Post-reload pass may be later used to eliminate the redundant fildcw if ! needed. */ ! ! enum fp_cw_mode {FP_CW_STORED, FP_CW_UNINITIALIZED, FP_CW_ANY}; ! ! /* Define this macro if the port needs extra instructions inserted ! for mode switching in an optimizing compilation. */ ! ! #define OPTIMIZE_MODE_SWITCHING(ENTITY) 1 ! ! /* If you define `OPTIMIZE_MODE_SWITCHING', you have to define this as ! initializer for an array of integers. Each initializer element N ! refers to an entity that needs mode switching, and specifies the ! number of different modes that might need to be set for this ! entity. The position of the initializer in the initializer - ! starting counting at zero - determines the integer that is used to ! refer to the mode-switched entity in question. */ ! ! #define NUM_MODES_FOR_MODE_SWITCHING { FP_CW_ANY } ! ! /* ENTITY is an integer specifying a mode-switched entity. If ! `OPTIMIZE_MODE_SWITCHING' is defined, you must define this macro to ! return an integer value not larger than the corresponding element ! in `NUM_MODES_FOR_MODE_SWITCHING', to denote the mode that ENTITY ! must be switched into prior to the execution of INSN. */ ! ! #define MODE_NEEDED(ENTITY, I) \ ! (GET_CODE (I) == CALL_INSN \ ! || (GET_CODE (I) == INSN && (asm_noperands (PATTERN (I)) >= 0 \ ! || GET_CODE (PATTERN (I)) == ASM_INPUT))\ ! ? FP_CW_UNINITIALIZED \ ! : recog_memoized (I) < 0 || get_attr_type (I) != TYPE_FISTP \ ! ? FP_CW_ANY \ ! : FP_CW_STORED) ! ! /* This macro specifies the order in which modes for ENTITY are ! processed. 0 is the highest priority. */ ! ! #define MODE_PRIORITY_TO_MODE(ENTITY, N) (N) ! ! /* Generate one or more insns to set ENTITY to MODE. HARD_REG_LIVE ! is the set of hard registers live at the point where the insn(s) ! are to be inserted. */ ! ! #define EMIT_MODE_SET(ENTITY, MODE, HARD_REGS_LIVE) \ ! ((MODE) == FP_CW_STORED \ ! ? emit_i387_cw_initialization (assign_386_stack_local (HImode, 1), \ ! assign_386_stack_local (HImode, 2)), 0\ ! : 0) ! ! /* Avoid renaming of stack registers, as doing so in combination with ! scheduling just increases amount of live registers at time and in ! the turn amount of fxch instructions needed. ! ! ??? Maybe Pentium chips benefits from renaming, someone can try... */ ! ! #define HARD_REGNO_RENAME_OK(SRC, TARGET) \ ! ((SRC) < FIRST_STACK_REG || (SRC) > LAST_STACK_REG) ! /* Local variables: diff -Nrc3pad gcc-3.0.4/gcc/config/i386/i386.md gcc-3.1/gcc/config/i386/i386.md *** gcc-3.0.4/gcc/config/i386/i386.md Mon Nov 26 21:59:47 2001 --- gcc-3.1/gcc/config/i386/i386.md Mon Apr 29 15:07:26 2002 *************** *** 1,7 **** ! ;; GCC machine description for IA-32. ! ;; Copyright (C) 1988, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 ;; Free Software Foundation, Inc. ;; Mostly by William Schelter. ;; ;; This file is part of GNU CC. ;; --- 1,8 ---- ! ;; GCC machine description for IA-32 and x86-64. ! ;; Copyright (C) 1988, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 ;; Free Software Foundation, Inc. ;; Mostly by William Schelter. + ;; x86_64 support added by Jan Hubicka ;; ;; This file is part of GNU CC. ;; *************** *** 18,24 **** ;; 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. */ ;; ;; The original PO technology requires these to be ordered by speed, ;; so that assigner will pick the fastest. --- 19,25 ---- ;; 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. */ ;; ;; The original PO technology requires these to be ordered by speed, ;; so that assigner will pick the fastest. *************** *** 80,86 **** ;; 32 This is a `maskmov' operation. ;; 33 This is a `movmsk' operation. ;; 34 This is a `non-temporal' move. - ;; 35 This is a `prefetch' operation. ;; 36 This is used to distinguish COMISS from UCOMISS. ;; 37 This is a `ldmxcsr' operation. ;; 38 This is a forced `movaps' instruction (rather than whatever movti does) --- 81,86 ---- *************** *** 91,119 **** ;; 43 This is a `rsqsrt' operation. ;; 44 This is a `sfence' operation. ;; 45 This is a noop to prevent excessive combiner cleverness. ;; Insns whose names begin with "x86_" are emitted by gen_FOO calls ;; from i386.c. ;; Processor type. This attribute must exactly match the processor_type ;; enumeration in i386.h. ! (define_attr "cpu" "i386,i486,pentium,pentiumpro,k6,athlon" (const (symbol_ref "ix86_cpu"))) ;; A basic instruction type. Refinements due to arguments to be ;; provided in other attributes. (define_attr "type" ! "other,multi,alu1,negnot,alu,icmp,test,imov,imovx,lea,incdec,ishift,imul,idiv,ibr,setcc,push,pop,call,callv,icmov,fmov,fop,fop1,fsgn,fmul,fdiv,fpspc,fcmov,fcmp,fxch,str,cld,sse,mmx" (const_string "other")) ;; Main data type used by the insn ! (define_attr "mode" "unknown,none,QI,HI,SI,DI,unknownfp,SF,DF,XF" (const_string "unknown")) ;; Set for i387 operations. (define_attr "i387" "" ! (if_then_else (eq_attr "type" "fmov,fop,fop1,fsgn,fmul,fdiv,fpspc,fcmov,fcmp,fxch") (const_int 1) (const_int 0))) --- 91,131 ---- ;; 43 This is a `rsqsrt' operation. ;; 44 This is a `sfence' operation. ;; 45 This is a noop to prevent excessive combiner cleverness. + ;; 46 This is a `femms' operation. + ;; 49 This is a 'pavgusb' operation. + ;; 50 This is a `pfrcp' operation. + ;; 51 This is a `pfrcpit1' operation. + ;; 52 This is a `pfrcpit2' operation. + ;; 53 This is a `pfrsqrt' operation. + ;; 54 This is a `pfrsqrit1' operation. ;; Insns whose names begin with "x86_" are emitted by gen_FOO calls ;; from i386.c. + ;; In C guard expressions, put expressions which may be compile-time + ;; constants first. This allows for better optimization. For + ;; example, write "TARGET_64BIT && reload_completed", not + ;; "reload_completed && TARGET_64BIT". + ;; Processor type. This attribute must exactly match the processor_type ;; enumeration in i386.h. ! (define_attr "cpu" "i386,i486,pentium,pentiumpro,k6,athlon,pentium4" (const (symbol_ref "ix86_cpu"))) ;; A basic instruction type. Refinements due to arguments to be ;; provided in other attributes. (define_attr "type" ! "other,multi,alu1,negnot,alu,icmp,test,imov,imovx,lea,incdec,ishift,imul,idiv,ibr,setcc,push,pop,call,callv,icmov,fmov,fop,fop1,fsgn,fmul,fdiv,fpspc,fcmov,fcmp,fxch,str,cld,sse,mmx,fistp" (const_string "other")) ;; Main data type used by the insn ! (define_attr "mode" "unknown,none,QI,HI,SI,DI,unknownfp,SF,DF,XF,TI" (const_string "unknown")) ;; Set for i387 operations. (define_attr "i387" "" ! (if_then_else (eq_attr "type" "fmov,fop,fop1,fsgn,fmul,fdiv,fpspc,fcmov,fcmp,fxch,fistp") (const_int 1) (const_int 0))) *************** *** 197,204 **** (const_int 1))) ;; The (bounding maximum) length of an instruction in bytes. (define_attr "length" "" ! (cond [(eq_attr "type" "other,multi") (const_int 16) ] (plus (plus (attr "modrm") --- 209,218 ---- (const_int 1))) ;; The (bounding maximum) length of an instruction in bytes. + ;; ??? fistp is in fact fldcw/fistp/fldcw sequence. Later we may want + ;; to split it and compute proper length as for other insns. (define_attr "length" "" ! (cond [(eq_attr "type" "other,multi,fistp") (const_int 16) ] (plus (plus (attr "modrm") *************** *** 219,224 **** --- 233,240 ---- (const_string "unknown") (eq_attr "type" "lea,fcmov,fpspc,cld") (const_string "none") + (eq_attr "type" "fistp") + (const_string "both") (eq_attr "type" "push") (if_then_else (match_operand 1 "memory_operand" "") (const_string "both") *************** *** 502,510 **** ; integer instructions, because of the inpaired fxch instruction. (define_function_unit "pent_np" 1 0 (and (eq_attr "cpu" "pentium") ! (eq_attr "type" "fmov,fop,fop1,fsgn,fmul,fpspc,fcmov,fcmp")) 2 2 ! [(eq_attr "type" "!fmov,fop,fop1,fsgn,fmul,fpspc,fcmov,fcmp")]) (define_function_unit "fpu" 1 0 (and (eq_attr "cpu" "pentium") --- 518,526 ---- ; integer instructions, because of the inpaired fxch instruction. (define_function_unit "pent_np" 1 0 (and (eq_attr "cpu" "pentium") ! (eq_attr "type" "fmov,fop,fop1,fsgn,fmul,fpspc,fcmov,fcmp,fistp")) 2 2 ! [(eq_attr "type" "!fmov,fop,fop1,fsgn,fmul,fpspc,fcmov,fcmp,fistp")]) (define_function_unit "fpu" 1 0 (and (eq_attr "cpu" "pentium") *************** *** 515,521 **** ; ??? Trivial fp operations such as fabs or fchs takes only one cycle. (define_function_unit "fpu" 1 0 (and (eq_attr "cpu" "pentium") ! (eq_attr "type" "fop,fop1")) 3 1) ; Multiplication takes 3 cycles and is only half pipelined. --- 531,537 ---- ; ??? Trivial fp operations such as fabs or fchs takes only one cycle. (define_function_unit "fpu" 1 0 (and (eq_attr "cpu" "pentium") ! (eq_attr "type" "fop,fop1,fistp")) 3 1) ; Multiplication takes 3 cycles and is only half pipelined. *************** *** 613,619 **** (define_function_unit "ppro_p0" 1 0 (and (eq_attr "cpu" "pentiumpro") ! (eq_attr "type" "fop,fop1,fsgn")) 3 1) (define_function_unit "ppro_p0" 1 0 --- 629,635 ---- (define_function_unit "ppro_p0" 1 0 (and (eq_attr "cpu" "pentiumpro") ! (eq_attr "type" "fop,fop1,fsgn,fistp")) 3 1) (define_function_unit "ppro_p0" 1 0 *************** *** 666,672 **** (define_function_unit "fpu" 1 0 (and (eq_attr "cpu" "pentiumpro") ! (eq_attr "type" "fop,fop1,fsgn,fmov,fcmp,fcmov")) 1 1) (define_function_unit "fpu" 1 0 --- 682,688 ---- (define_function_unit "fpu" 1 0 (and (eq_attr "cpu" "pentiumpro") ! (eq_attr "type" "fop,fop1,fsgn,fmov,fcmp,fcmov,fistp")) 1 1) (define_function_unit "fpu" 1 0 *************** *** 769,775 **** (define_function_unit "k6_fpu" 1 1 (and (eq_attr "cpu" "k6") ! (eq_attr "type" "fop,fop1,fmov,fcmp")) 2 2) (define_function_unit "k6_fpu" 1 1 --- 785,791 ---- (define_function_unit "k6_fpu" 1 1 (and (eq_attr "cpu" "k6") ! (eq_attr "type" "fop,fop1,fmov,fcmp,fistp")) 2 2) (define_function_unit "k6_fpu" 1 1 *************** *** 821,827 **** ;; it to the specialized integer (18 entry) and fp (36 entry) schedulers. ;; ;; The load/store queue unit is not attached to the schedulers but ! ;; communicates with all the execution units seperately instead. (define_attr "athlon_decode" "direct,vector" (cond [(eq_attr "type" "call,imul,idiv,other,multi,fcmov,fpspc,str,pop,cld,fcmov") --- 837,843 ---- ;; it to the specialized integer (18 entry) and fp (36 entry) schedulers. ;; ;; The load/store queue unit is not attached to the schedulers but ! ;; communicates with all the execution units separately instead. (define_attr "athlon_decode" "direct,vector" (cond [(eq_attr "type" "call,imul,idiv,other,multi,fcmov,fpspc,str,pop,cld,fcmov") *************** *** 881,887 **** 42 42) (define_attr "athlon_fpunits" "none,store,mul,add,muladd,any" ! (cond [(eq_attr "type" "fop,fop1,fcmp") (const_string "add") (eq_attr "type" "fmul,fdiv,fpspc,fsgn,fcmov") (const_string "mul") --- 897,903 ---- 42 42) (define_attr "athlon_fpunits" "none,store,mul,add,muladd,any" ! (cond [(eq_attr "type" "fop,fop1,fcmp,fistp") (const_string "add") (eq_attr "type" "fmul,fdiv,fpspc,fsgn,fcmov") (const_string "mul") *************** *** 916,922 **** (define_function_unit "athlon_fp" 3 0 (and (eq_attr "cpu" "athlon") ! (eq_attr "type" "fop,fop1,fmul")) 4 1) ;; XFmode loads are slow. --- 932,938 ---- (define_function_unit "athlon_fp" 3 0 (and (eq_attr "cpu" "athlon") ! (eq_attr "type" "fop,fop1,fmul,fistp")) 4 1) ;; XFmode loads are slow. *************** *** 974,980 **** (eq_attr "athlon_fpunits" "store")) 1 1) ! ;; We don't need to model the Adress Generation Unit, since we don't model ;; the re-order buffer yet and thus we never schedule more than three operations ;; at time. Later we may want to experiment with MD_SCHED macros modeling the ;; decoders independently on the functional units. --- 990,996 ---- (eq_attr "athlon_fpunits" "store")) 1 1) ! ;; We don't need to model the Address Generation Unit, since we don't model ;; the re-order buffer yet and thus we never schedule more than three operations ;; at time. Later we may want to experiment with MD_SCHED macros modeling the ;; decoders independently on the functional units. *************** *** 1002,1064 **** (define_expand "cmpdi" [(set (reg:CC 17) ! (compare:CC (match_operand:DI 0 "general_operand" "") ! (match_operand:DI 1 "general_operand" "")))] "" - " { ! if ((GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM) ! || (CONSTANT_P (operands[0]) && CONSTANT_P (operands[1]))) operands[0] = force_reg (DImode, operands[0]); ix86_compare_op0 = operands[0]; ix86_compare_op1 = operands[1]; DONE; ! }") (define_expand "cmpsi" [(set (reg:CC 17) (compare:CC (match_operand:SI 0 "cmpsi_operand" "") (match_operand:SI 1 "general_operand" "")))] "" - " { ! if ((GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM) ! || (CONSTANT_P (operands[0]) && CONSTANT_P (operands[1]))) operands[0] = force_reg (SImode, operands[0]); ix86_compare_op0 = operands[0]; ix86_compare_op1 = operands[1]; DONE; ! }") (define_expand "cmphi" [(set (reg:CC 17) ! (compare:CC (match_operand:HI 0 "general_operand" "") (match_operand:HI 1 "general_operand" "")))] "" - " { ! if ((GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM) ! || (CONSTANT_P (operands[0]) && CONSTANT_P (operands[1]))) operands[0] = force_reg (HImode, operands[0]); ix86_compare_op0 = operands[0]; ix86_compare_op1 = operands[1]; DONE; ! }") (define_expand "cmpqi" [(set (reg:CC 17) ! (compare:CC (match_operand:QI 0 "general_operand" "") (match_operand:QI 1 "general_operand" "")))] "TARGET_QIMODE_MATH" - " { ! if ((GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM) ! || (CONSTANT_P (operands[0]) && CONSTANT_P (operands[1]))) operands[0] = force_reg (QImode, operands[0]); ix86_compare_op0 = operands[0]; ix86_compare_op1 = operands[1]; DONE; ! }") (define_insn "*cmpsi_ccno_1" [(set (reg 17) --- 1018,1111 ---- (define_expand "cmpdi" [(set (reg:CC 17) ! (compare:CC (match_operand:DI 0 "nonimmediate_operand" "") ! (match_operand:DI 1 "x86_64_general_operand" "")))] "" { ! if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM) operands[0] = force_reg (DImode, operands[0]); ix86_compare_op0 = operands[0]; ix86_compare_op1 = operands[1]; DONE; ! }) (define_expand "cmpsi" [(set (reg:CC 17) (compare:CC (match_operand:SI 0 "cmpsi_operand" "") (match_operand:SI 1 "general_operand" "")))] "" { ! if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM) operands[0] = force_reg (SImode, operands[0]); ix86_compare_op0 = operands[0]; ix86_compare_op1 = operands[1]; DONE; ! }) (define_expand "cmphi" [(set (reg:CC 17) ! (compare:CC (match_operand:HI 0 "nonimmediate_operand" "") (match_operand:HI 1 "general_operand" "")))] "" { ! if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM) operands[0] = force_reg (HImode, operands[0]); ix86_compare_op0 = operands[0]; ix86_compare_op1 = operands[1]; DONE; ! }) (define_expand "cmpqi" [(set (reg:CC 17) ! (compare:CC (match_operand:QI 0 "nonimmediate_operand" "") (match_operand:QI 1 "general_operand" "")))] "TARGET_QIMODE_MATH" { ! if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM) operands[0] = force_reg (QImode, operands[0]); ix86_compare_op0 = operands[0]; ix86_compare_op1 = operands[1]; DONE; ! }) ! ! (define_insn "cmpdi_ccno_1_rex64" ! [(set (reg 17) ! (compare (match_operand:DI 0 "nonimmediate_operand" "r,?mr") ! (match_operand:DI 1 "const0_operand" "n,n")))] ! "TARGET_64BIT && ix86_match_ccmode (insn, CCNOmode)" ! "@ ! test{q}\t{%0, %0|%0, %0} ! cmp{q}\t{%1, %0|%0, %1}" ! [(set_attr "type" "test,icmp") ! (set_attr "length_immediate" "0,1") ! (set_attr "mode" "DI")]) ! ! (define_insn "*cmpdi_minus_1_rex64" ! [(set (reg 17) ! (compare (minus:DI (match_operand:DI 0 "nonimmediate_operand" "rm,r") ! (match_operand:DI 1 "x86_64_general_operand" "re,mr")) ! (const_int 0)))] ! "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode)" ! "cmp{q}\t{%1, %0|%0, %1}" ! [(set_attr "type" "icmp") ! (set_attr "mode" "DI")]) ! ! (define_expand "cmpdi_1_rex64" ! [(set (reg:CC 17) ! (compare:CC (match_operand:DI 0 "nonimmediate_operand" "") ! (match_operand:DI 1 "general_operand" "")))] ! "TARGET_64BIT" ! "") ! ! (define_insn "cmpdi_1_insn_rex64" ! [(set (reg 17) ! (compare (match_operand:DI 0 "nonimmediate_operand" "mr,r") ! (match_operand:DI 1 "x86_64_general_operand" "re,mr")))] ! "TARGET_64BIT && ix86_match_ccmode (insn, CCmode)" ! "cmp{q}\t{%1, %0|%0, %1}" ! [(set_attr "type" "icmp") ! (set_attr "mode" "DI")]) ! (define_insn "*cmpsi_ccno_1" [(set (reg 17) *************** *** 1066,1073 **** (match_operand:SI 1 "const0_operand" "n,n")))] "ix86_match_ccmode (insn, CCNOmode)" "@ ! test{l}\\t{%0, %0|%0, %0} ! cmp{l}\\t{%1, %0|%0, %1}" [(set_attr "type" "test,icmp") (set_attr "length_immediate" "0,1") (set_attr "mode" "SI")]) --- 1113,1120 ---- (match_operand:SI 1 "const0_operand" "n,n")))] "ix86_match_ccmode (insn, CCNOmode)" "@ ! test{l}\t{%0, %0|%0, %0} ! cmp{l}\t{%1, %0|%0, %1}" [(set_attr "type" "test,icmp") (set_attr "length_immediate" "0,1") (set_attr "mode" "SI")]) *************** *** 1078,1084 **** (match_operand:SI 1 "general_operand" "ri,mr")) (const_int 0)))] "ix86_match_ccmode (insn, CCGOCmode)" ! "cmp{l}\\t{%1, %0|%0, %1}" [(set_attr "type" "icmp") (set_attr "mode" "SI")]) --- 1125,1131 ---- (match_operand:SI 1 "general_operand" "ri,mr")) (const_int 0)))] "ix86_match_ccmode (insn, CCGOCmode)" ! "cmp{l}\t{%1, %0|%0, %1}" [(set_attr "type" "icmp") (set_attr "mode" "SI")]) *************** *** 1095,1101 **** (match_operand:SI 1 "general_operand" "ri,mr")))] "(GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM) && ix86_match_ccmode (insn, CCmode)" ! "cmp{l}\\t{%1, %0|%0, %1}" [(set_attr "type" "icmp") (set_attr "mode" "SI")]) --- 1142,1148 ---- (match_operand:SI 1 "general_operand" "ri,mr")))] "(GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM) && ix86_match_ccmode (insn, CCmode)" ! "cmp{l}\t{%1, %0|%0, %1}" [(set_attr "type" "icmp") (set_attr "mode" "SI")]) *************** *** 1105,1112 **** (match_operand:HI 1 "const0_operand" "n,n")))] "ix86_match_ccmode (insn, CCNOmode)" "@ ! test{w}\\t{%0, %0|%0, %0} ! cmp{w}\\t{%1, %0|%0, %1}" [(set_attr "type" "test,icmp") (set_attr "length_immediate" "0,1") (set_attr "mode" "HI")]) --- 1152,1159 ---- (match_operand:HI 1 "const0_operand" "n,n")))] "ix86_match_ccmode (insn, CCNOmode)" "@ ! test{w}\t{%0, %0|%0, %0} ! cmp{w}\t{%1, %0|%0, %1}" [(set_attr "type" "test,icmp") (set_attr "length_immediate" "0,1") (set_attr "mode" "HI")]) *************** *** 1117,1123 **** (match_operand:HI 1 "general_operand" "ri,mr")) (const_int 0)))] "ix86_match_ccmode (insn, CCGOCmode)" ! "cmp{w}\\t{%1, %0|%0, %1}" [(set_attr "type" "icmp") (set_attr "mode" "HI")]) --- 1164,1170 ---- (match_operand:HI 1 "general_operand" "ri,mr")) (const_int 0)))] "ix86_match_ccmode (insn, CCGOCmode)" ! "cmp{w}\t{%1, %0|%0, %1}" [(set_attr "type" "icmp") (set_attr "mode" "HI")]) *************** *** 1127,1133 **** (match_operand:HI 1 "general_operand" "ri,mr")))] "(GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM) && ix86_match_ccmode (insn, CCmode)" ! "cmp{w}\\t{%1, %0|%0, %1}" [(set_attr "type" "icmp") (set_attr "mode" "HI")]) --- 1174,1180 ---- (match_operand:HI 1 "general_operand" "ri,mr")))] "(GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM) && ix86_match_ccmode (insn, CCmode)" ! "cmp{w}\t{%1, %0|%0, %1}" [(set_attr "type" "icmp") (set_attr "mode" "HI")]) *************** *** 1137,1144 **** (match_operand:QI 1 "const0_operand" "n,n")))] "ix86_match_ccmode (insn, CCNOmode)" "@ ! test{b}\\t{%0, %0|%0, %0} ! cmp{b}\\t{$0, %0|%0, 0}" [(set_attr "type" "test,icmp") (set_attr "length_immediate" "0,1") (set_attr "mode" "QI")]) --- 1184,1191 ---- (match_operand:QI 1 "const0_operand" "n,n")))] "ix86_match_ccmode (insn, CCNOmode)" "@ ! test{b}\t{%0, %0|%0, %0} ! cmp{b}\t{$0, %0|%0, 0}" [(set_attr "type" "test,icmp") (set_attr "length_immediate" "0,1") (set_attr "mode" "QI")]) *************** *** 1149,1155 **** (match_operand:QI 1 "general_operand" "qi,mq")))] "(GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM) && ix86_match_ccmode (insn, CCmode)" ! "cmp{b}\\t{%1, %0|%0, %1}" [(set_attr "type" "icmp") (set_attr "mode" "QI")]) --- 1196,1202 ---- (match_operand:QI 1 "general_operand" "qi,mq")))] "(GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM) && ix86_match_ccmode (insn, CCmode)" ! "cmp{b}\t{%1, %0|%0, %1}" [(set_attr "type" "icmp") (set_attr "mode" "QI")]) *************** *** 1159,1179 **** (match_operand:QI 1 "general_operand" "qi,mq")) (const_int 0)))] "ix86_match_ccmode (insn, CCGOCmode)" ! "cmp{b}\\t{%1, %0|%0, %1}" [(set_attr "type" "icmp") (set_attr "mode" "QI")]) (define_insn "*cmpqi_ext_1" [(set (reg 17) (compare ! (match_operand:QI 0 "general_operand" "qm") (subreg:QI (zero_extract:SI ! (match_operand 1 "ext_register_operand" "q") (const_int 8) (const_int 8)) 0)))] ! "ix86_match_ccmode (insn, CCmode)" ! "cmp{b}\\t{%h1, %0|%0, %h1}" [(set_attr "type" "icmp") (set_attr "mode" "QI")]) --- 1206,1240 ---- (match_operand:QI 1 "general_operand" "qi,mq")) (const_int 0)))] "ix86_match_ccmode (insn, CCGOCmode)" ! "cmp{b}\t{%1, %0|%0, %1}" [(set_attr "type" "icmp") (set_attr "mode" "QI")]) (define_insn "*cmpqi_ext_1" [(set (reg 17) (compare ! (match_operand:QI 0 "general_operand" "Qm") (subreg:QI (zero_extract:SI ! (match_operand 1 "ext_register_operand" "Q") (const_int 8) (const_int 8)) 0)))] ! "!TARGET_64BIT && ix86_match_ccmode (insn, CCmode)" ! "cmp{b}\t{%h1, %0|%0, %h1}" ! [(set_attr "type" "icmp") ! (set_attr "mode" "QI")]) ! ! (define_insn "*cmpqi_ext_1_rex64" ! [(set (reg 17) ! (compare ! (match_operand:QI 0 "register_operand" "Q") ! (subreg:QI ! (zero_extract:SI ! (match_operand 1 "ext_register_operand" "Q") ! (const_int 8) ! (const_int 8)) 0)))] ! "TARGET_64BIT && ix86_match_ccmode (insn, CCmode)" ! "cmp{b}\t{%h1, %0|%0, %h1}" [(set_attr "type" "icmp") (set_attr "mode" "QI")]) *************** *** 1182,1193 **** (compare (subreg:QI (zero_extract:SI ! (match_operand 0 "ext_register_operand" "q") (const_int 8) (const_int 8)) 0) (match_operand:QI 1 "const0_operand" "n")))] "ix86_match_ccmode (insn, CCNOmode)" ! "test{b}\\t%h0, %h0" [(set_attr "type" "test") (set_attr "length_immediate" "0") (set_attr "mode" "QI")]) --- 1243,1254 ---- (compare (subreg:QI (zero_extract:SI ! (match_operand 0 "ext_register_operand" "Q") (const_int 8) (const_int 8)) 0) (match_operand:QI 1 "const0_operand" "n")))] "ix86_match_ccmode (insn, CCNOmode)" ! "test{b}\t%h0, %h0" [(set_attr "type" "test") (set_attr "length_immediate" "0") (set_attr "mode" "QI")]) *************** *** 1197,1206 **** (compare:CC (subreg:QI (zero_extract:SI ! (match_operand 0 "ext_register_operand" "q") (const_int 8) (const_int 8)) 0) ! (match_operand:QI 1 "general_operand" "qmn")))] "" "") --- 1258,1267 ---- (compare:CC (subreg:QI (zero_extract:SI ! (match_operand 0 "ext_register_operand" "") (const_int 8) (const_int 8)) 0) ! (match_operand:QI 1 "general_operand" "")))] "" "") *************** *** 1209,1220 **** (compare (subreg:QI (zero_extract:SI ! (match_operand 0 "ext_register_operand" "q") (const_int 8) (const_int 8)) 0) ! (match_operand:QI 1 "general_operand" "qmn")))] ! "ix86_match_ccmode (insn, CCmode)" ! "cmp{b}\\t{%1, %h0|%h0, %1}" [(set_attr "type" "icmp") (set_attr "mode" "QI")]) --- 1270,1295 ---- (compare (subreg:QI (zero_extract:SI ! (match_operand 0 "ext_register_operand" "Q") (const_int 8) (const_int 8)) 0) ! (match_operand:QI 1 "general_operand" "Qmn")))] ! "!TARGET_64BIT && ix86_match_ccmode (insn, CCmode)" ! "cmp{b}\t{%1, %h0|%h0, %1}" ! [(set_attr "type" "icmp") ! (set_attr "mode" "QI")]) ! ! (define_insn "cmpqi_ext_3_insn_rex64" ! [(set (reg 17) ! (compare ! (subreg:QI ! (zero_extract:SI ! (match_operand 0 "ext_register_operand" "Q") ! (const_int 8) ! (const_int 8)) 0) ! (match_operand:QI 1 "nonmemory_operand" "Qn")))] ! "TARGET_64BIT && ix86_match_ccmode (insn, CCmode)" ! "cmp{b}\t{%1, %h0|%h0, %1}" [(set_attr "type" "icmp") (set_attr "mode" "QI")]) *************** *** 1223,1238 **** (compare (subreg:QI (zero_extract:SI ! (match_operand 0 "ext_register_operand" "q") (const_int 8) (const_int 8)) 0) (subreg:QI (zero_extract:SI ! (match_operand 1 "ext_register_operand" "q") (const_int 8) (const_int 8)) 0)))] "ix86_match_ccmode (insn, CCmode)" ! "cmp{b}\\t{%h1, %h0|%h0, %h1}" [(set_attr "type" "icmp") (set_attr "mode" "QI")]) --- 1298,1313 ---- (compare (subreg:QI (zero_extract:SI ! (match_operand 0 "ext_register_operand" "Q") (const_int 8) (const_int 8)) 0) (subreg:QI (zero_extract:SI ! (match_operand 1 "ext_register_operand" "Q") (const_int 8) (const_int 8)) 0)))] "ix86_match_ccmode (insn, CCmode)" ! "cmp{b}\t{%h1, %h0|%h0, %h1}" [(set_attr "type" "icmp") (set_attr "mode" "QI")]) *************** *** 1245,1293 **** [(set (reg:CC 17) (compare:CC (match_operand:XF 0 "cmp_fp_expander_operand" "") (match_operand:XF 1 "cmp_fp_expander_operand" "")))] ! "TARGET_80387" ! " { ix86_compare_op0 = operands[0]; ix86_compare_op1 = operands[1]; DONE; ! }") (define_expand "cmptf" [(set (reg:CC 17) (compare:CC (match_operand:TF 0 "cmp_fp_expander_operand" "") (match_operand:TF 1 "cmp_fp_expander_operand" "")))] "TARGET_80387" - " { ix86_compare_op0 = operands[0]; ix86_compare_op1 = operands[1]; DONE; ! }") (define_expand "cmpdf" [(set (reg:CC 17) (compare:CC (match_operand:DF 0 "cmp_fp_expander_operand" "") (match_operand:DF 1 "cmp_fp_expander_operand" "")))] ! "TARGET_80387" ! " { ix86_compare_op0 = operands[0]; ix86_compare_op1 = operands[1]; DONE; ! }") (define_expand "cmpsf" [(set (reg:CC 17) (compare:CC (match_operand:SF 0 "cmp_fp_expander_operand" "") (match_operand:SF 1 "cmp_fp_expander_operand" "")))] ! "TARGET_80387" ! " { ix86_compare_op0 = operands[0]; ix86_compare_op1 = operands[1]; DONE; ! }") ;; FP compares, step 1: ;; Set the FP condition codes. --- 1320,1364 ---- [(set (reg:CC 17) (compare:CC (match_operand:XF 0 "cmp_fp_expander_operand" "") (match_operand:XF 1 "cmp_fp_expander_operand" "")))] ! "!TARGET_64BIT && TARGET_80387" { ix86_compare_op0 = operands[0]; ix86_compare_op1 = operands[1]; DONE; ! }) (define_expand "cmptf" [(set (reg:CC 17) (compare:CC (match_operand:TF 0 "cmp_fp_expander_operand" "") (match_operand:TF 1 "cmp_fp_expander_operand" "")))] "TARGET_80387" { ix86_compare_op0 = operands[0]; ix86_compare_op1 = operands[1]; DONE; ! }) (define_expand "cmpdf" [(set (reg:CC 17) (compare:CC (match_operand:DF 0 "cmp_fp_expander_operand" "") (match_operand:DF 1 "cmp_fp_expander_operand" "")))] ! "TARGET_80387 || TARGET_SSE2" { ix86_compare_op0 = operands[0]; ix86_compare_op1 = operands[1]; DONE; ! }) (define_expand "cmpsf" [(set (reg:CC 17) (compare:CC (match_operand:SF 0 "cmp_fp_expander_operand" "") (match_operand:SF 1 "cmp_fp_expander_operand" "")))] ! "TARGET_80387 || TARGET_SSE" { ix86_compare_op0 = operands[0]; ix86_compare_op1 = operands[1]; DONE; ! }) ;; FP compares, step 1: ;; Set the FP condition codes. *************** *** 1315,1327 **** "TARGET_80387 && FLOAT_MODE_P (GET_MODE (operands[1])) && GET_MODE (operands[1]) == GET_MODE (operands[2])" - "* { if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"ftst\;fnstsw\\t%0\;fstp\\t%y0\"; else ! return \"ftst\;fnstsw\\t%0\"; ! }" [(set_attr "type" "multi") (set_attr "mode" "unknownfp")]) --- 1386,1397 ---- "TARGET_80387 && FLOAT_MODE_P (GET_MODE (operands[1])) && GET_MODE (operands[1]) == GET_MODE (operands[2])" { if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "ftst\;fnstsw\t%0\;fstp\t%y0"; else ! return "ftst\;fnstsw\t%0"; ! } [(set_attr "type" "multi") (set_attr "mode" "unknownfp")]) *************** *** 1375,1381 **** (compare:CCFP (match_operand:XF 0 "register_operand" "f") (match_operand:XF 1 "register_operand" "f")))] ! "TARGET_80387" "* return output_fp_compare (insn, operands, 0, 0);" [(set_attr "type" "fcmp") (set_attr "mode" "XF")]) --- 1445,1451 ---- (compare:CCFP (match_operand:XF 0 "register_operand" "f") (match_operand:XF 1 "register_operand" "f")))] ! "!TARGET_64BIT && TARGET_80387" "* return output_fp_compare (insn, operands, 0, 0);" [(set_attr "type" "fcmp") (set_attr "mode" "XF")]) *************** *** 1396,1402 **** [(compare:CCFP (match_operand:XF 1 "register_operand" "f") (match_operand:XF 2 "register_operand" "f"))] 9))] ! "TARGET_80387" "* return output_fp_compare (insn, operands, 2, 0);" [(set_attr "type" "multi") (set_attr "mode" "XF")]) --- 1466,1472 ---- [(compare:CCFP (match_operand:XF 1 "register_operand" "f") (match_operand:XF 2 "register_operand" "f"))] 9))] ! "!TARGET_64BIT && TARGET_80387" "* return output_fp_compare (insn, operands, 2, 0);" [(set_attr "type" "multi") (set_attr "mode" "XF")]) *************** *** 1479,1485 **** [(set (match_operand:HI 0 "register_operand" "=a") (unspec:HI [(reg 18)] 9))] "TARGET_80387" ! "fnstsw\\t%0" [(set_attr "length" "2") (set_attr "mode" "SI") (set_attr "i387" "1") --- 1549,1555 ---- [(set (match_operand:HI 0 "register_operand" "=a") (unspec:HI [(reg 18)] 9))] "TARGET_80387" ! "fnstsw\t%0" [(set_attr "length" "2") (set_attr "mode" "SI") (set_attr "i387" "1") *************** *** 1491,1497 **** (define_insn "x86_sahf_1" [(set (reg:CC 17) (unspec:CC [(match_operand:HI 0 "register_operand" "a")] 10))] ! "" "sahf" [(set_attr "length" "1") (set_attr "athlon_decode" "vector") --- 1561,1567 ---- (define_insn "x86_sahf_1" [(set (reg:CC 17) (unspec:CC [(match_operand:HI 0 "register_operand" "a")] 10))] ! "!TARGET_64BIT" "sahf" [(set_attr "length" "1") (set_attr "athlon_decode" "vector") *************** *** 1505,1510 **** --- 1575,1581 ---- (compare:CCFP (match_operand 0 "register_operand" "f") (match_operand 1 "register_operand" "f")))] "TARGET_80387 && TARGET_CMOVE + && !SSE_FLOAT_MODE_P (GET_MODE (operands[0])) && FLOAT_MODE_P (GET_MODE (operands[0])) && GET_MODE (operands[0]) == GET_MODE (operands[0])" "* return output_fp_compare (insn, operands, 1, 0);" *************** *** 1512,1528 **** --- 1583,1646 ---- (set_attr "mode" "unknownfp") (set_attr "athlon_decode" "vector")]) + (define_insn "*cmpfp_i_sse" + [(set (reg:CCFP 17) + (compare:CCFP (match_operand 0 "register_operand" "f#x,x#f") + (match_operand 1 "nonimmediate_operand" "f#x,xm#f")))] + "TARGET_80387 + && SSE_FLOAT_MODE_P (GET_MODE (operands[0])) + && GET_MODE (operands[0]) == GET_MODE (operands[0])" + "* return output_fp_compare (insn, operands, 1, 0);" + [(set_attr "type" "fcmp,sse") + (set_attr "mode" "unknownfp") + (set_attr "athlon_decode" "vector")]) + + (define_insn "*cmpfp_i_sse_only" + [(set (reg:CCFP 17) + (compare:CCFP (match_operand 0 "register_operand" "x") + (match_operand 1 "nonimmediate_operand" "xm")))] + "SSE_FLOAT_MODE_P (GET_MODE (operands[0])) + && GET_MODE (operands[0]) == GET_MODE (operands[0])" + "* return output_fp_compare (insn, operands, 1, 0);" + [(set_attr "type" "sse") + (set_attr "mode" "unknownfp") + (set_attr "athlon_decode" "vector")]) + (define_insn "*cmpfp_iu" [(set (reg:CCFPU 17) (compare:CCFPU (match_operand 0 "register_operand" "f") (match_operand 1 "register_operand" "f")))] "TARGET_80387 && TARGET_CMOVE + && !SSE_FLOAT_MODE_P (GET_MODE (operands[0])) && FLOAT_MODE_P (GET_MODE (operands[0])) && GET_MODE (operands[0]) == GET_MODE (operands[1])" "* return output_fp_compare (insn, operands, 1, 1);" [(set_attr "type" "fcmp") (set_attr "mode" "unknownfp") (set_attr "athlon_decode" "vector")]) + + (define_insn "*cmpfp_iu_sse" + [(set (reg:CCFPU 17) + (compare:CCFPU (match_operand 0 "register_operand" "f#x,x#f") + (match_operand 1 "nonimmediate_operand" "f#x,xm#f")))] + "TARGET_80387 + && SSE_FLOAT_MODE_P (GET_MODE (operands[0])) + && GET_MODE (operands[0]) == GET_MODE (operands[1])" + "* return output_fp_compare (insn, operands, 1, 1);" + [(set_attr "type" "fcmp,sse") + (set_attr "mode" "unknownfp") + (set_attr "athlon_decode" "vector")]) + + (define_insn "*cmpfp_iu_sse_only" + [(set (reg:CCFPU 17) + (compare:CCFPU (match_operand 0 "register_operand" "x") + (match_operand 1 "nonimmediate_operand" "xm")))] + "SSE_FLOAT_MODE_P (GET_MODE (operands[0])) + && GET_MODE (operands[0]) == GET_MODE (operands[1])" + "* return output_fp_compare (insn, operands, 1, 1);" + [(set_attr "type" "sse") + (set_attr "mode" "unknownfp") + (set_attr "athlon_decode" "vector")]) ;; Move instructions. *************** *** 1546,1553 **** (define_insn "*pushsi2" [(set (match_operand:SI 0 "push_operand" "=<") (match_operand:SI 1 "general_no_elim_operand" "ri*m"))] ! "" ! "push{l}\\t%1" [(set_attr "type" "push") (set_attr "mode" "SI")]) --- 1664,1680 ---- (define_insn "*pushsi2" [(set (match_operand:SI 0 "push_operand" "=<") (match_operand:SI 1 "general_no_elim_operand" "ri*m"))] ! "!TARGET_64BIT" ! "push{l}\t%1" ! [(set_attr "type" "push") ! (set_attr "mode" "SI")]) ! ! ;; For 64BIT abi we always round up to 8 bytes. ! (define_insn "*pushsi2_rex64" ! [(set (match_operand:SI 0 "push_operand" "=X") ! (match_operand:SI 1 "nonmemory_no_elim_operand" "ri"))] ! "TARGET_64BIT" ! "push{q}\t%q1" [(set_attr "type" "push") (set_attr "mode" "SI")]) *************** *** 1555,1562 **** [(set (match_operand:SI 0 "push_operand" "=<") (match_operand:SI 1 "general_no_elim_operand" "ri*m")) (clobber (mem:BLK (scratch)))] ! "" ! "push{l}\\t%1" [(set_attr "type" "push") (set_attr "mode" "SI")]) --- 1682,1689 ---- [(set (match_operand:SI 0 "push_operand" "=<") (match_operand:SI 1 "general_no_elim_operand" "ri*m")) (clobber (mem:BLK (scratch)))] ! "!TARGET_64BIT" ! "push{l}\t%1" [(set_attr "type" "push") (set_attr "mode" "SI")]) *************** *** 1566,1573 **** (set (reg:SI 7) (plus:SI (reg:SI 7) (const_int 4))) (clobber (mem:BLK (scratch)))] ! "" ! "pop{l}\\t%0" [(set_attr "type" "pop") (set_attr "mode" "SI")]) --- 1693,1700 ---- (set (reg:SI 7) (plus:SI (reg:SI 7) (const_int 4))) (clobber (mem:BLK (scratch)))] ! "!TARGET_64BIT" ! "pop{l}\t%0" [(set_attr "type" "pop") (set_attr "mode" "SI")]) *************** *** 1576,1592 **** (mem:SI (reg:SI 7))) (set (reg:SI 7) (plus:SI (reg:SI 7) (const_int 4)))] ! "" ! "pop{l}\\t%0" [(set_attr "type" "pop") (set_attr "mode" "SI")]) ! (define_insn "movsi_xor" [(set (match_operand:SI 0 "register_operand" "=r") (match_operand:SI 1 "const0_operand" "i")) (clobber (reg:CC 17))] "reload_completed && (!TARGET_USE_MOV0 || optimize_size)" ! "xor{l}\\t{%0, %0|%0, %0}" [(set_attr "type" "alu1") (set_attr "mode" "SI") (set_attr "length_immediate" "0")]) --- 1703,1719 ---- (mem:SI (reg:SI 7))) (set (reg:SI 7) (plus:SI (reg:SI 7) (const_int 4)))] ! "!TARGET_64BIT" ! "pop{l}\t%0" [(set_attr "type" "pop") (set_attr "mode" "SI")]) ! (define_insn "*movsi_xor" [(set (match_operand:SI 0 "register_operand" "=r") (match_operand:SI 1 "const0_operand" "i")) (clobber (reg:CC 17))] "reload_completed && (!TARGET_USE_MOV0 || optimize_size)" ! "xor{l}\t{%0, %0|%0, %0}" [(set_attr "type" "alu1") (set_attr "mode" "SI") (set_attr "length_immediate" "0")]) *************** *** 1598,1642 **** "reload_completed && GET_CODE (operands[1]) == CONST_INT && INTVAL (operands[1]) == -1 && (TARGET_PENTIUM || optimize_size)" - "* { operands[1] = constm1_rtx; ! return \"or{l}\\t{%1, %0|%0, %1}\"; ! }" [(set_attr "type" "alu1") (set_attr "mode" "SI") (set_attr "length_immediate" "1")]) (define_insn "*movsi_1" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=*a,r,*a,m,!*y,!r") ! (match_operand:SI 1 "general_operand" "im,rinm,rinm,rin,r,*y"))] "GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM" - "* { switch (get_attr_type (insn)) { case TYPE_MMX: ! return \"movd\\t{%1, %0|%0, %1}\"; case TYPE_LEA: ! return \"lea{l}\\t{%1, %0|%0, %1}\"; default: if (flag_pic && SYMBOLIC_CONST (operands[1])) abort(); ! return \"mov{l}\\t{%1, %0|%0, %1}\"; } ! }" [(set (attr "type") ! (cond [(ior (match_operand:SI 0 "mmx_reg_operand" "") ! (match_operand:SI 1 "mmx_reg_operand" "")) (const_string "mmx") (and (ne (symbol_ref "flag_pic") (const_int 0)) (match_operand:SI 1 "symbolic_operand" "")) (const_string "lea") ] (const_string "imov"))) ! (set_attr "modrm" "0,*,0,*,*,*") (set_attr "mode" "SI")]) (define_insn "*swapsi" --- 1725,1812 ---- "reload_completed && GET_CODE (operands[1]) == CONST_INT && INTVAL (operands[1]) == -1 && (TARGET_PENTIUM || optimize_size)" { operands[1] = constm1_rtx; ! return "or{l}\t{%1, %0|%0, %1}"; ! } [(set_attr "type" "alu1") (set_attr "mode" "SI") (set_attr "length_immediate" "1")]) + ; The first alternative is used only to compute proper length of instruction. + ; Reload's algorithm does not take into account the cost of spill instructions + ; needed to free register in given class, so avoid it from choosing the first + ; alternative when eax is not available. + (define_insn "*movsi_1" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=*?a,r,*?a,m,!*y,!rm,!*y,!*Y,!rm,!*Y") ! (match_operand:SI 1 "general_operand" "im,rinm,rinm,rin,rm,*y,*y,rm,*Y,*Y"))] "GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM" { switch (get_attr_type (insn)) { + case TYPE_SSE: + if (get_attr_mode (insn) == TImode) + return "movdqa\t{%1, %0|%0, %1}"; + return "movd\t{%1, %0|%0, %1}"; + case TYPE_MMX: ! if (get_attr_mode (insn) == DImode) ! return "movq\t{%1, %0|%0, %1}"; ! return "movd\t{%1, %0|%0, %1}"; case TYPE_LEA: ! return "lea{l}\t{%1, %0|%0, %1}"; default: if (flag_pic && SYMBOLIC_CONST (operands[1])) abort(); ! return "mov{l}\t{%1, %0|%0, %1}"; } ! } [(set (attr "type") ! (cond [(eq_attr "alternative" "4,5,6") (const_string "mmx") + (eq_attr "alternative" "7,8,9") + (const_string "sse") (and (ne (symbol_ref "flag_pic") (const_int 0)) (match_operand:SI 1 "symbolic_operand" "")) (const_string "lea") ] (const_string "imov"))) ! (set_attr "modrm" "0,*,0,*,*,*,*,*,*,*") ! (set_attr "mode" "SI,SI,SI,SI,SI,SI,DI,TI,SI,SI")]) ! ! ;; Stores and loads of ax to arbitary constant address. ! ;; We fake an second form of instruction to force reload to load address ! ;; into register when rax is not available ! (define_insn "*movabssi_1_rex64" ! [(set (mem:SI (match_operand:DI 0 "x86_64_movabs_operand" "i,r,r")) ! (match_operand:SI 1 "nonmemory_operand" "a,er,i"))] ! "TARGET_64BIT" ! "@ ! movabs{l}\t{%1, %P0|%P0, %1} ! mov{l}\t{%1, %a0|%a0, %1} ! movabs{l}\t{%1, %a0|%a0, %1}" ! [(set_attr "type" "imov") ! (set_attr "modrm" "0,*,*") ! (set_attr "length_address" "8,0,0") ! (set_attr "length_immediate" "0,*,*") ! (set_attr "memory" "store") ! (set_attr "mode" "SI")]) ! ! (define_insn "*movabssi_2_rex64" ! [(set (match_operand:SI 0 "register_operand" "=a,r") ! (mem:SI (match_operand:DI 1 "x86_64_movabs_operand" "i,r")))] ! "TARGET_64BIT" ! "@ ! movabs{l}\t{%P1, %0|%0, %P1} ! mov{l}\t{%a1, %0|%0, %a1}" ! [(set_attr "type" "imov") ! (set_attr "modrm" "0,*") ! (set_attr "length_address" "8,0") ! (set_attr "length_immediate" "0") ! (set_attr "memory" "load") (set_attr "mode" "SI")]) (define_insn "*swapsi" *************** *** 1645,1651 **** (set (match_dup 1) (match_dup 0))] "" ! "xchg{l}\\t%1, %0" [(set_attr "type" "imov") (set_attr "pent_pair" "np") (set_attr "athlon_decode" "vector") --- 1815,1821 ---- (set (match_dup 1) (match_dup 0))] "" ! "xchg{l}\t%1, %0" [(set_attr "type" "imov") (set_attr "pent_pair" "np") (set_attr "athlon_decode" "vector") *************** *** 1662,1703 **** (define_insn "*pushhi2" [(set (match_operand:HI 0 "push_operand" "=<,<") (match_operand:HI 1 "general_no_elim_operand" "n,r*m"))] ! "" "@ ! push{w}\\t{|WORD PTR }%1 ! push{w}\\t%1" [(set_attr "type" "push") (set_attr "mode" "HI")]) ! (define_insn "*pophi1" ! [(set (match_operand:HI 0 "nonimmediate_operand" "=r*m") ! (mem:HI (reg:SI 7))) ! (set (reg:SI 7) ! (plus:SI (reg:SI 7) (const_int 2)))] ! "" ! "pop{w}\\t%0" ! [(set_attr "type" "pop") ! (set_attr "mode" "HI")]) (define_insn "*movhi_1" ! [(set (match_operand:HI 0 "nonimmediate_operand" "=*a,r,r,*a,r,m") (match_operand:HI 1 "general_operand" "i,r,rn,rm,rm,rn"))] "GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM" - "* { switch (get_attr_type (insn)) { case TYPE_IMOVX: /* movzwl is faster than movw on p2 due to partial word stalls, though not as fast as an aligned movl. */ ! return \"movz{wl|x}\\t{%1, %k0|%k0, %1}\"; default: if (get_attr_mode (insn) == MODE_SI) ! return \"mov{l}\\t{%k1, %k0|%k0, %k1}\"; else ! return \"mov{w}\\t{%1, %0|%0, %1}\"; } ! }" [(set (attr "type") (cond [(and (eq_attr "alternative" "0,1") (ior (eq (symbol_ref "TARGET_PARTIAL_REG_STALL") --- 1832,1876 ---- (define_insn "*pushhi2" [(set (match_operand:HI 0 "push_operand" "=<,<") (match_operand:HI 1 "general_no_elim_operand" "n,r*m"))] ! "!TARGET_64BIT" "@ ! push{w}\t{|WORD PTR }%1 ! push{w}\t%1" [(set_attr "type" "push") (set_attr "mode" "HI")]) ! ;; For 64BIT abi we always round up to 8 bytes. ! (define_insn "*pushhi2_rex64" ! [(set (match_operand:HI 0 "push_operand" "=X") ! (match_operand:HI 1 "nonmemory_no_elim_operand" "ri"))] ! "TARGET_64BIT" ! "push{q}\t%q1" ! [(set_attr "type" "push") ! (set_attr "mode" "QI")]) ! ! ; The first alternative is used only to compute proper length of instruction. ! ; Reload's algorithm does not take into account the cost of spill instructions ! ; needed to free register in given class, so avoid it from choosing the first ! ; alternative when eax is not available. (define_insn "*movhi_1" ! [(set (match_operand:HI 0 "nonimmediate_operand" "=*?a,r,r,*?a,r,m") (match_operand:HI 1 "general_operand" "i,r,rn,rm,rm,rn"))] "GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM" { switch (get_attr_type (insn)) { case TYPE_IMOVX: /* movzwl is faster than movw on p2 due to partial word stalls, though not as fast as an aligned movl. */ ! return "movz{wl|x}\t{%1, %k0|%k0, %1}"; default: if (get_attr_mode (insn) == MODE_SI) ! return "mov{l}\t{%k1, %k0|%k0, %k1}"; else ! return "mov{w}\t{%1, %0|%0, %1}"; } ! } [(set (attr "type") (cond [(and (eq_attr "alternative" "0,1") (ior (eq (symbol_ref "TARGET_PARTIAL_REG_STALL") *************** *** 1730,1742 **** (const_string "HI"))) (set_attr "modrm" "0,*,*,0,*,*")]) (define_insn "*swaphi_1" [(set (match_operand:HI 0 "register_operand" "+r") (match_operand:HI 1 "register_operand" "+r")) (set (match_dup 1) (match_dup 0))] "TARGET_PARTIAL_REG_STALL" ! "xchg{w}\\t%1, %0" [(set_attr "type" "imov") (set_attr "pent_pair" "np") (set_attr "mode" "HI") --- 1903,1947 ---- (const_string "HI"))) (set_attr "modrm" "0,*,*,0,*,*")]) + ;; Stores and loads of ax to arbitary constant address. + ;; We fake an second form of instruction to force reload to load address + ;; into register when rax is not available + (define_insn "*movabshi_1_rex64" + [(set (mem:HI (match_operand:DI 0 "x86_64_movabs_operand" "i,r,r")) + (match_operand:HI 1 "nonmemory_operand" "a,er,i"))] + "TARGET_64BIT" + "@ + movabs{w}\t{%1, %P0|%P0, %1} + mov{w}\t{%1, %a0|%a0, %1} + movabs{w}\t{%1, %a0|%a0, %1}" + [(set_attr "type" "imov") + (set_attr "modrm" "0,*,*") + (set_attr "length_address" "8,0,0") + (set_attr "length_immediate" "0,*,*") + (set_attr "memory" "store") + (set_attr "mode" "HI")]) + + (define_insn "*movabshi_2_rex64" + [(set (match_operand:HI 0 "register_operand" "=a,r") + (mem:HI (match_operand:DI 1 "x86_64_movabs_operand" "i,r")))] + "TARGET_64BIT" + "@ + movabs{w}\t{%P1, %0|%0, %P1} + mov{w}\t{%a1, %0|%0, %a1}" + [(set_attr "type" "imov") + (set_attr "modrm" "0,*") + (set_attr "length_address" "8,0") + (set_attr "length_immediate" "0") + (set_attr "memory" "load") + (set_attr "mode" "HI")]) + (define_insn "*swaphi_1" [(set (match_operand:HI 0 "register_operand" "+r") (match_operand:HI 1 "register_operand" "+r")) (set (match_dup 1) (match_dup 0))] "TARGET_PARTIAL_REG_STALL" ! "xchg{w}\t%1, %0" [(set_attr "type" "imov") (set_attr "pent_pair" "np") (set_attr "mode" "HI") *************** *** 1749,1755 **** (set (match_dup 1) (match_dup 0))] "! TARGET_PARTIAL_REG_STALL" ! "xchg{l}\\t%k1, %k0" [(set_attr "type" "imov") (set_attr "pent_pair" "np") (set_attr "mode" "SI") --- 1954,1960 ---- (set (match_dup 1) (match_dup 0))] "! TARGET_PARTIAL_REG_STALL" ! "xchg{l}\t%k1, %k0" [(set_attr "type" "imov") (set_attr "pent_pair" "np") (set_attr "mode" "SI") *************** *** 1759,1778 **** (define_expand "movstricthi" [(set (strict_low_part (match_operand:HI 0 "nonimmediate_operand" "")) (match_operand:HI 1 "general_operand" ""))] ! "! TARGET_PARTIAL_REG_STALL" ! " { /* Don't generate memory->memory moves, go through a register */ if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM) operands[1] = force_reg (HImode, operands[1]); ! }") (define_insn "*movstricthi_1" [(set (strict_low_part (match_operand:HI 0 "nonimmediate_operand" "+rm,r")) (match_operand:HI 1 "general_operand" "rn,m"))] ! "! TARGET_PARTIAL_REG_STALL && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)" ! "mov{w}\\t{%1, %0|%0, %1}" [(set_attr "type" "imov") (set_attr "mode" "HI")]) --- 1964,1982 ---- (define_expand "movstricthi" [(set (strict_low_part (match_operand:HI 0 "nonimmediate_operand" "")) (match_operand:HI 1 "general_operand" ""))] ! "! TARGET_PARTIAL_REG_STALL || optimize_size" { /* Don't generate memory->memory moves, go through a register */ if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM) operands[1] = force_reg (HImode, operands[1]); ! }) (define_insn "*movstricthi_1" [(set (strict_low_part (match_operand:HI 0 "nonimmediate_operand" "+rm,r")) (match_operand:HI 1 "general_operand" "rn,m"))] ! "(! TARGET_PARTIAL_REG_STALL || optimize_size) && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)" ! "mov{w}\t{%1, %0|%0, %1}" [(set_attr "type" "imov") (set_attr "mode" "HI")]) *************** *** 1780,1787 **** [(set (strict_low_part (match_operand:HI 0 "register_operand" "+r")) (match_operand:HI 1 "const0_operand" "i")) (clobber (reg:CC 17))] ! "reload_completed && (!TARGET_USE_MOV0 || optimize_size)" ! "xor{w}\\t{%0, %0|%0, %0}" [(set_attr "type" "alu1") (set_attr "mode" "HI") (set_attr "length_immediate" "0")]) --- 1984,1992 ---- [(set (strict_low_part (match_operand:HI 0 "register_operand" "+r")) (match_operand:HI 1 "const0_operand" "i")) (clobber (reg:CC 17))] ! "reload_completed ! && ((!TARGET_USE_MOV0 && !TARGET_PARTIAL_REG_STALL) || optimize_size)" ! "xor{w}\t{%0, %0|%0, %0}" [(set_attr "type" "alu1") (set_attr "mode" "HI") (set_attr "length_immediate" "0")]) *************** *** 1797,1820 **** ;; of rounding the amount pushed up to a halfword. (define_insn "*pushqi2" ! [(set (match_operand:QI 0 "push_operand" "=<,<") (match_operand:QI 1 "nonmemory_no_elim_operand" "n,r"))] ! "" "@ ! push{w}\\t{|word ptr }%1 ! push{w}\\t%w1" [(set_attr "type" "push") (set_attr "mode" "HI")]) ! (define_insn "*popqi1" ! [(set (match_operand:QI 0 "nonimmediate_operand" "=r*m") ! (mem:QI (reg:SI 7))) ! (set (reg:SI 7) ! (plus:SI (reg:SI 7) (const_int 2)))] ! "" ! "pop{w}\\t%0" ! [(set_attr "type" "pop") ! (set_attr "mode" "HI")]) ;; Situation is quite tricky about when to choose full sized (SImode) move ;; over QImode moves. For Q_REG -> Q_REG move we use full size only for --- 2002,2024 ---- ;; of rounding the amount pushed up to a halfword. (define_insn "*pushqi2" ! [(set (match_operand:QI 0 "push_operand" "=X,X") (match_operand:QI 1 "nonmemory_no_elim_operand" "n,r"))] ! "!TARGET_64BIT" "@ ! push{w}\t{|word ptr }%1 ! push{w}\t%w1" [(set_attr "type" "push") (set_attr "mode" "HI")]) ! ;; For 64BIT abi we always round up to 8 bytes. ! (define_insn "*pushqi2_rex64" ! [(set (match_operand:QI 0 "push_operand" "=X") ! (match_operand:QI 1 "nonmemory_no_elim_operand" "ri"))] ! "TARGET_64BIT" ! "push{q}\t%q1" ! [(set_attr "type" "push") ! (set_attr "mode" "QI")]) ;; Situation is quite tricky about when to choose full sized (SImode) move ;; over QImode moves. For Q_REG -> Q_REG move we use full size only for *************** *** 1830,1850 **** [(set (match_operand:QI 0 "nonimmediate_operand" "=q,q ,q ,r,r ,?r,m") (match_operand:QI 1 "general_operand" " q,qn,qm,q,rn,qm,qn"))] "GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM" - "* { switch (get_attr_type (insn)) { case TYPE_IMOVX: ! if (!QI_REG_P (operands[1]) && GET_CODE (operands[1]) != MEM) abort (); ! return \"movz{bl|x}\\t{%1, %k0|%k0, %1}\"; default: if (get_attr_mode (insn) == MODE_SI) ! return \"mov{l}\\t{%k1, %k0|%k0, %k1}\"; else ! return \"mov{b}\\t{%1, %0|%0, %1}\"; } ! }" [(set (attr "type") (cond [(and (eq_attr "alternative" "3") (ior (eq (symbol_ref "TARGET_PARTIAL_REG_STALL") --- 2034,2053 ---- [(set (match_operand:QI 0 "nonimmediate_operand" "=q,q ,q ,r,r ,?r,m") (match_operand:QI 1 "general_operand" " q,qn,qm,q,rn,qm,qn"))] "GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM" { switch (get_attr_type (insn)) { case TYPE_IMOVX: ! if (!ANY_QI_REG_P (operands[1]) && GET_CODE (operands[1]) != MEM) abort (); ! return "movz{bl|x}\t{%1, %k0|%k0, %1}"; default: if (get_attr_mode (insn) == MODE_SI) ! return "mov{l}\t{%k1, %k0|%k0, %k1}"; else ! return "mov{b}\t{%1, %0|%0, %1}"; } ! } [(set (attr "type") (cond [(and (eq_attr "alternative" "3") (ior (eq (symbol_ref "TARGET_PARTIAL_REG_STALL") *************** *** 1888,1894 **** (match_operand:QI 1 "register_operand" "r") (match_operand:QI 2 "register_operand" "=&q")])] "" - " { rtx op0, op1, op2; op0 = operands[0]; op1 = operands[1]; op2 = operands[2]; --- 2091,2096 ---- *************** *** 1902,1908 **** } emit_insn (gen_movqi (op0, op1)); DONE; ! }") (define_insn "*swapqi" [(set (match_operand:QI 0 "register_operand" "+r") --- 2104,2110 ---- } emit_insn (gen_movqi (op0, op1)); DONE; ! }) (define_insn "*swapqi" [(set (match_operand:QI 0 "register_operand" "+r") *************** *** 1910,1916 **** (set (match_dup 1) (match_dup 0))] "" ! "xchg{b}\\t%1, %0" [(set_attr "type" "imov") (set_attr "pent_pair" "np") (set_attr "mode" "QI") --- 2112,2118 ---- (set (match_dup 1) (match_dup 0))] "" ! "xchg{b}\t%1, %0" [(set_attr "type" "imov") (set_attr "pent_pair" "np") (set_attr "mode" "QI") *************** *** 1921,1939 **** [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "")) (match_operand:QI 1 "general_operand" ""))] "! TARGET_PARTIAL_REG_STALL" - " { ! /* Don't generate memory->memory moves, go through a register */ if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM) operands[1] = force_reg (QImode, operands[1]); ! }") (define_insn "*movstrictqi_1" [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+qm,q")) (match_operand:QI 1 "general_operand" "*qn,m"))] "! TARGET_PARTIAL_REG_STALL && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)" ! "mov{b}\\t{%1, %0|%0, %1}" [(set_attr "type" "imov") (set_attr "mode" "QI")]) --- 2123,2140 ---- [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "")) (match_operand:QI 1 "general_operand" ""))] "! TARGET_PARTIAL_REG_STALL" { ! /* Don't generate memory->memory moves, go through a register. */ if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM) operands[1] = force_reg (QImode, operands[1]); ! }) (define_insn "*movstrictqi_1" [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+qm,q")) (match_operand:QI 1 "general_operand" "*qn,m"))] "! TARGET_PARTIAL_REG_STALL && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)" ! "mov{b}\t{%1, %0|%0, %1}" [(set_attr "type" "imov") (set_attr "mode" "QI")]) *************** *** 1942,1988 **** (match_operand:QI 1 "const0_operand" "i")) (clobber (reg:CC 17))] "reload_completed && (!TARGET_USE_MOV0 || optimize_size)" ! "xor{b}\\t{%0, %0|%0, %0}" [(set_attr "type" "alu1") (set_attr "mode" "QI") (set_attr "length_immediate" "0")]) (define_insn "*movsi_extv_1" ! [(set (match_operand:SI 0 "register_operand" "=r") ! (sign_extract:SI (match_operand:SI 1 "register_operand" "q") (const_int 8) (const_int 8)))] "" ! "movs{bl|x}\\t{%h1, %0|%0, %h1}" [(set_attr "type" "imovx") (set_attr "mode" "SI")]) (define_insn "*movhi_extv_1" ! [(set (match_operand:HI 0 "register_operand" "=r") ! (sign_extract:HI (match_operand:SI 1 "register_operand" "q") (const_int 8) (const_int 8)))] "" ! "movs{bl|x}\\t{%h1, %k0|%k0, %h1}" [(set_attr "type" "imovx") (set_attr "mode" "SI")]) (define_insn "*movqi_extv_1" ! [(set (match_operand:QI 0 "nonimmediate_operand" "=qm,?r") ! (sign_extract:QI (match_operand:SI 1 "register_operand" "q,q") (const_int 8) (const_int 8)))] ! "" ! "* { switch (get_attr_type (insn)) { case TYPE_IMOVX: ! return \"movs{bl|x}\\t{%h1, %k0|%k0, %h1}\"; default: ! return \"mov{b}\\t{%h1, %0|%0, %h1}\"; } ! }" [(set (attr "type") (if_then_else (and (match_operand:QI 0 "register_operand" "") (ior (not (match_operand:QI 0 "q_regs_operand" "")) --- 2143,2215 ---- (match_operand:QI 1 "const0_operand" "i")) (clobber (reg:CC 17))] "reload_completed && (!TARGET_USE_MOV0 || optimize_size)" ! "xor{b}\t{%0, %0|%0, %0}" [(set_attr "type" "alu1") (set_attr "mode" "QI") (set_attr "length_immediate" "0")]) (define_insn "*movsi_extv_1" ! [(set (match_operand:SI 0 "register_operand" "=R") ! (sign_extract:SI (match_operand 1 "ext_register_operand" "Q") (const_int 8) (const_int 8)))] "" ! "movs{bl|x}\t{%h1, %0|%0, %h1}" [(set_attr "type" "imovx") (set_attr "mode" "SI")]) (define_insn "*movhi_extv_1" ! [(set (match_operand:HI 0 "register_operand" "=R") ! (sign_extract:HI (match_operand 1 "ext_register_operand" "Q") (const_int 8) (const_int 8)))] "" ! "movs{bl|x}\t{%h1, %k0|%k0, %h1}" [(set_attr "type" "imovx") (set_attr "mode" "SI")]) (define_insn "*movqi_extv_1" ! [(set (match_operand:QI 0 "nonimmediate_operand" "=Qm,?r") ! (sign_extract:QI (match_operand 1 "ext_register_operand" "Q,Q") (const_int 8) (const_int 8)))] ! "!TARGET_64BIT" { switch (get_attr_type (insn)) { case TYPE_IMOVX: ! return "movs{bl|x}\t{%h1, %k0|%k0, %h1}"; default: ! return "mov{b}\t{%h1, %0|%0, %h1}"; } ! } ! [(set (attr "type") ! (if_then_else (and (match_operand:QI 0 "register_operand" "") ! (ior (not (match_operand:QI 0 "q_regs_operand" "")) ! (ne (symbol_ref "TARGET_MOVX") ! (const_int 0)))) ! (const_string "imovx") ! (const_string "imov"))) ! (set (attr "mode") ! (if_then_else (eq_attr "type" "imovx") ! (const_string "SI") ! (const_string "QI")))]) ! ! (define_insn "*movqi_extv_1_rex64" ! [(set (match_operand:QI 0 "register_operand" "=Q,?R") ! (sign_extract:QI (match_operand 1 "ext_register_operand" "Q,Q") ! (const_int 8) ! (const_int 8)))] ! "TARGET_64BIT" ! { ! switch (get_attr_type (insn)) ! { ! case TYPE_IMOVX: ! return "movs{bl|x}\t{%h1, %k0|%k0, %h1}"; ! default: ! return "mov{b}\t{%h1, %0|%0, %h1}"; ! } ! } [(set (attr "type") (if_then_else (and (match_operand:QI 0 "register_operand" "") (ior (not (match_operand:QI 0 "q_regs_operand" "")) *************** *** 1995,2026 **** (const_string "SI") (const_string "QI")))]) (define_insn "*movsi_extzv_1" ! [(set (match_operand:SI 0 "register_operand" "=r") ! (zero_extract:SI (match_operand 1 "ext_register_operand" "q") (const_int 8) (const_int 8)))] "" ! "movz{bl|x}\\t{%h1, %0|%0, %h1}" [(set_attr "type" "imovx") (set_attr "mode" "SI")]) ! (define_insn "*movqi_extzv_1" ! [(set (match_operand:QI 0 "nonimmediate_operand" "=qm,?r") ! (subreg:QI (zero_extract:SI (match_operand 1 "ext_register_operand" "q,q") (const_int 8) (const_int 8)) 0))] ! "" ! "* { switch (get_attr_type (insn)) { case TYPE_IMOVX: ! return \"movz{bl|x}\\t{%h1, %k0|%k0, %h1}\"; default: ! return \"mov{b}\\t{%h1, %0|%0, %h1}\"; } ! }" [(set (attr "type") (if_then_else (and (match_operand:QI 0 "register_operand" "") (ior (not (match_operand:QI 0 "q_regs_operand" "")) --- 2222,2284 ---- (const_string "SI") (const_string "QI")))]) + ;; Stores and loads of ax to arbitary constant address. + ;; We fake an second form of instruction to force reload to load address + ;; into register when rax is not available + (define_insn "*movabsqi_1_rex64" + [(set (mem:QI (match_operand:DI 0 "x86_64_movabs_operand" "i,r,r")) + (match_operand:QI 1 "nonmemory_operand" "a,er,i"))] + "TARGET_64BIT" + "@ + movabs{b}\t{%1, %P0|%P0, %1} + mov{b}\t{%1, %a0|%a0, %1} + movabs{b}\t{%1, %a0|%a0, %1}" + [(set_attr "type" "imov") + (set_attr "modrm" "0,*,*") + (set_attr "length_address" "8,0,0") + (set_attr "length_immediate" "0,*,*") + (set_attr "memory" "store") + (set_attr "mode" "QI")]) + + (define_insn "*movabsqi_2_rex64" + [(set (match_operand:QI 0 "register_operand" "=a,r") + (mem:QI (match_operand:DI 1 "x86_64_movabs_operand" "i,r")))] + "TARGET_64BIT" + "@ + movabs{b}\t{%P1, %0|%0, %P1} + mov{b}\t{%a1, %0|%0, %a1}" + [(set_attr "type" "imov") + (set_attr "modrm" "0,*") + (set_attr "length_address" "8,0") + (set_attr "length_immediate" "0") + (set_attr "memory" "load") + (set_attr "mode" "QI")]) + (define_insn "*movsi_extzv_1" ! [(set (match_operand:SI 0 "register_operand" "=R") ! (zero_extract:SI (match_operand 1 "ext_register_operand" "Q") (const_int 8) (const_int 8)))] "" ! "movz{bl|x}\t{%h1, %0|%0, %h1}" [(set_attr "type" "imovx") (set_attr "mode" "SI")]) ! (define_insn "*movqi_extzv_2" ! [(set (match_operand:QI 0 "nonimmediate_operand" "=Qm,?R") ! (subreg:QI (zero_extract:SI (match_operand 1 "ext_register_operand" "Q,Q") (const_int 8) (const_int 8)) 0))] ! "!TARGET_64BIT" { switch (get_attr_type (insn)) { case TYPE_IMOVX: ! return "movz{bl|x}\t{%h1, %k0|%k0, %h1}"; default: ! return "mov{b}\t{%h1, %0|%0, %h1}"; } ! } [(set (attr "type") (if_then_else (and (match_operand:QI 0 "register_operand" "") (ior (not (match_operand:QI 0 "q_regs_operand" "")) *************** *** 2033,2057 **** (const_string "SI") (const_string "QI")))]) ! (define_insn "*movsi_insv_1" ! [(set (zero_extract:SI (match_operand 0 "ext_register_operand" "+q") (const_int 8) (const_int 8)) ! (match_operand:SI 1 "nonimmediate_operand" "qm"))] ! "" ! "mov{b}\\t{%b1, %h0|%h0, %b1}" [(set_attr "type" "imov") (set_attr "mode" "QI")]) (define_insn "*movqi_insv_2" ! [(set (zero_extract:SI (match_operand 0 "ext_register_operand" "+q") (const_int 8) (const_int 8)) ! (and:SI (lshiftrt:SI (match_operand:SI 1 "register_operand" "q") (const_int 8)) (const_int 255)))] "" ! "mov{b}\\t{%h1, %h0|%h0, %h1}" [(set_attr "type" "imov") (set_attr "mode" "QI")]) --- 2291,2351 ---- (const_string "SI") (const_string "QI")))]) ! (define_insn "*movqi_extzv_2_rex64" ! [(set (match_operand:QI 0 "register_operand" "=Q,?R") ! (subreg:QI (zero_extract:SI (match_operand 1 "ext_register_operand" "Q,Q") ! (const_int 8) ! (const_int 8)) 0))] ! "TARGET_64BIT" ! { ! switch (get_attr_type (insn)) ! { ! case TYPE_IMOVX: ! return "movz{bl|x}\t{%h1, %k0|%k0, %h1}"; ! default: ! return "mov{b}\t{%h1, %0|%0, %h1}"; ! } ! } ! [(set (attr "type") ! (if_then_else (ior (not (match_operand:QI 0 "q_regs_operand" "")) ! (ne (symbol_ref "TARGET_MOVX") ! (const_int 0))) ! (const_string "imovx") ! (const_string "imov"))) ! (set (attr "mode") ! (if_then_else (eq_attr "type" "imovx") ! (const_string "SI") ! (const_string "QI")))]) ! ! (define_insn "movsi_insv_1" ! [(set (zero_extract:SI (match_operand 0 "ext_register_operand" "+Q") (const_int 8) (const_int 8)) ! (match_operand:SI 1 "general_operand" "Qmn"))] ! "!TARGET_64BIT" ! "mov{b}\t{%b1, %h0|%h0, %b1}" ! [(set_attr "type" "imov") ! (set_attr "mode" "QI")]) ! ! (define_insn "*movsi_insv_1_rex64" ! [(set (zero_extract:SI (match_operand 0 "ext_register_operand" "+Q") ! (const_int 8) ! (const_int 8)) ! (match_operand:SI 1 "nonmemory_operand" "Qn"))] ! "TARGET_64BIT" ! "mov{b}\t{%b1, %h0|%h0, %b1}" [(set_attr "type" "imov") (set_attr "mode" "QI")]) (define_insn "*movqi_insv_2" ! [(set (zero_extract:SI (match_operand 0 "ext_register_operand" "+Q") (const_int 8) (const_int 8)) ! (and:SI (lshiftrt:SI (match_operand:SI 1 "register_operand" "Q") (const_int 8)) (const_int 255)))] "" ! "mov{b}\t{%h1, %h0|%h0, %h1}" [(set_attr "type" "imov") (set_attr "mode" "QI")]) *************** *** 2064,2098 **** (define_insn "*pushdi" [(set (match_operand:DI 0 "push_operand" "=<") (match_operand:DI 1 "general_no_elim_operand" "riF*m"))] ! "" "#") (define_insn "*movdi_2" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=r,o,!m*y,!*y") ! (match_operand:DI 1 "general_operand" "riFo,riF,*y,m"))] ! "GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM" "@ # # ! movq\\t{%1, %0|%0, %1} ! movq\\t{%1, %0|%0, %1}" ! [(set_attr "type" "*,*,mmx,mmx")]) (define_split [(set (match_operand:DI 0 "push_operand" "") (match_operand:DI 1 "general_operand" ""))] ! "reload_completed && ! MMX_REG_P (operands[1])" [(const_int 0)] ! "if (!ix86_split_long_move (operands)) abort (); DONE;") ;; %%% This multiword shite has got to go. (define_split [(set (match_operand:DI 0 "nonimmediate_operand" "") (match_operand:DI 1 "general_operand" ""))] ! "reload_completed && ! MMX_REG_P (operands[0]) && ! MMX_REG_P (operands[1])" ! [(set (match_dup 2) (match_dup 5)) ! (set (match_dup 3) (match_dup 6))] ! "if (ix86_split_long_move (operands)) DONE;") (define_expand "movsf" [(set (match_operand:SF 0 "nonimmediate_operand" "") --- 2358,2636 ---- (define_insn "*pushdi" [(set (match_operand:DI 0 "push_operand" "=<") (match_operand:DI 1 "general_no_elim_operand" "riF*m"))] ! "!TARGET_64BIT" "#") + (define_insn "pushdi2_rex64" + [(set (match_operand:DI 0 "push_operand" "=<,!<") + (match_operand:DI 1 "general_no_elim_operand" "re*m,n"))] + "TARGET_64BIT" + "@ + push{q}\t%1 + #" + [(set_attr "type" "push,multi") + (set_attr "mode" "DI")]) + + ;; Convert impossible pushes of immediate to existing instructions. + ;; First try to get scratch register and go through it. In case this + ;; fails, push sign extended lower part first and then overwrite + ;; upper part by 32bit move. + (define_peephole2 + [(match_scratch:DI 2 "r") + (set (match_operand:DI 0 "push_operand" "") + (match_operand:DI 1 "immediate_operand" ""))] + "TARGET_64BIT && !symbolic_operand (operands[1], DImode) + && !x86_64_immediate_operand (operands[1], DImode)" + [(set (match_dup 2) (match_dup 1)) + (set (match_dup 0) (match_dup 2))] + "") + + ;; We need to define this as both peepholer and splitter for case + ;; peephole2 pass is not run. + (define_peephole2 + [(set (match_operand:DI 0 "push_operand" "") + (match_operand:DI 1 "immediate_operand" ""))] + "TARGET_64BIT && !symbolic_operand (operands[1], DImode) + && !x86_64_immediate_operand (operands[1], DImode) && 1" + [(set (match_dup 0) (match_dup 1)) + (set (match_dup 2) (match_dup 3))] + "split_di (operands + 1, 1, operands + 2, operands + 3); + operands[1] = gen_lowpart (DImode, operands[2]); + operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (DImode, stack_pointer_rtx, + GEN_INT (4))); + ") + + (define_split + [(set (match_operand:DI 0 "push_operand" "") + (match_operand:DI 1 "immediate_operand" ""))] + "TARGET_64BIT && (flow2_completed || (reload_completed && !flag_peephole2)) + && !symbolic_operand (operands[1], DImode) + && !x86_64_immediate_operand (operands[1], DImode)" + [(set (match_dup 0) (match_dup 1)) + (set (match_dup 2) (match_dup 3))] + "split_di (operands + 1, 1, operands + 2, operands + 3); + operands[1] = gen_lowpart (DImode, operands[2]); + operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (DImode, stack_pointer_rtx, + GEN_INT (4))); + ") + + (define_insn "*pushdi2_prologue_rex64" + [(set (match_operand:DI 0 "push_operand" "=<") + (match_operand:DI 1 "general_no_elim_operand" "re*m")) + (clobber (mem:BLK (scratch)))] + "TARGET_64BIT" + "push{q}\t%1" + [(set_attr "type" "push") + (set_attr "mode" "DI")]) + + (define_insn "*popdi1_epilogue_rex64" + [(set (match_operand:DI 0 "nonimmediate_operand" "=r*m") + (mem:DI (reg:DI 7))) + (set (reg:DI 7) + (plus:DI (reg:DI 7) (const_int 8))) + (clobber (mem:BLK (scratch)))] + "TARGET_64BIT" + "pop{q}\t%0" + [(set_attr "type" "pop") + (set_attr "mode" "DI")]) + + (define_insn "popdi1" + [(set (match_operand:DI 0 "nonimmediate_operand" "=r*m") + (mem:DI (reg:DI 7))) + (set (reg:DI 7) + (plus:DI (reg:DI 7) (const_int 8)))] + "TARGET_64BIT" + "pop{q}\t%0" + [(set_attr "type" "pop") + (set_attr "mode" "DI")]) + + (define_insn "*movdi_xor_rex64" + [(set (match_operand:DI 0 "register_operand" "=r") + (match_operand:DI 1 "const0_operand" "i")) + (clobber (reg:CC 17))] + "TARGET_64BIT && (!TARGET_USE_MOV0 || optimize_size) + && reload_completed" + "xor{l}\t{%k0, %k0|%k0, %k0}" + [(set_attr "type" "alu1") + (set_attr "mode" "SI") + (set_attr "length_immediate" "0")]) + + (define_insn "*movdi_or_rex64" + [(set (match_operand:DI 0 "register_operand" "=r") + (match_operand:DI 1 "const_int_operand" "i")) + (clobber (reg:CC 17))] + "TARGET_64BIT && (TARGET_PENTIUM || optimize_size) + && reload_completed + && GET_CODE (operands[1]) == CONST_INT + && INTVAL (operands[1]) == -1" + { + operands[1] = constm1_rtx; + return "or{q}\t{%1, %0|%0, %1}"; + } + [(set_attr "type" "alu1") + (set_attr "mode" "DI") + (set_attr "length_immediate" "1")]) + (define_insn "*movdi_2" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=r,o,!m*y,!*y,!m,!*Y,!*Y") ! (match_operand:DI 1 "general_operand" "riFo,riF,*y,m,*Y,*Y,m"))] ! "!TARGET_64BIT ! && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)" "@ # # ! movq\t{%1, %0|%0, %1} ! movq\t{%1, %0|%0, %1} ! movq\t{%1, %0|%0, %1} ! movdqa\t{%1, %0|%0, %1} ! movq\t{%1, %0|%0, %1}" ! [(set_attr "type" "*,*,mmx,mmx,sse,sse,sse") ! (set_attr "mode" "DI,DI,DI,DI,DI,TI,DI")]) (define_split [(set (match_operand:DI 0 "push_operand" "") (match_operand:DI 1 "general_operand" ""))] ! "!TARGET_64BIT && reload_completed ! && (! MMX_REG_P (operands[1]) && !SSE_REG_P (operands[1]))" [(const_int 0)] ! "ix86_split_long_move (operands); DONE;") ;; %%% This multiword shite has got to go. (define_split [(set (match_operand:DI 0 "nonimmediate_operand" "") (match_operand:DI 1 "general_operand" ""))] ! "!TARGET_64BIT && reload_completed ! && (!MMX_REG_P (operands[0]) && !SSE_REG_P (operands[0])) ! && (!MMX_REG_P (operands[1]) && !SSE_REG_P (operands[1]))" ! [(const_int 0)] ! "ix86_split_long_move (operands); DONE;") ! ! (define_insn "*movdi_1_rex64" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,r,mr,!mr,!m*y,!*y,!*Y,!m,!*Y") ! (match_operand:DI 1 "general_operand" "Z,rem,i,re,n,*y,m,*Y,*Y,*m"))] ! "TARGET_64BIT ! && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)" ! { ! switch (get_attr_type (insn)) ! { ! case TYPE_SSE: ! if (register_operand (operands[0], DImode) ! && register_operand (operands[1], DImode)) ! return "movdqa\t{%1, %0|%0, %1}"; ! /* FALLTHRU */ ! case TYPE_MMX: ! return "movq\t{%1, %0|%0, %1}"; ! case TYPE_MULTI: ! return "#"; ! case TYPE_LEA: ! return "lea{q}\t{%a1, %0|%0, %a1}"; ! default: ! if (flag_pic && SYMBOLIC_CONST (operands[1])) ! abort (); ! if (get_attr_mode (insn) == MODE_SI) ! return "mov{l}\t{%k1, %k0|%k0, %k1}"; ! else if (which_alternative == 2) ! return "movabs{q}\t{%1, %0|%0, %1}"; ! else ! return "mov{q}\t{%1, %0|%0, %1}"; ! } ! } ! [(set (attr "type") ! (cond [(eq_attr "alternative" "5,6") ! (const_string "mmx") ! (eq_attr "alternative" "7,8") ! (const_string "sse") ! (eq_attr "alternative" "4") ! (const_string "multi") ! (and (ne (symbol_ref "flag_pic") (const_int 0)) ! (match_operand:DI 1 "symbolic_operand" "")) ! (const_string "lea") ! ] ! (const_string "imov"))) ! (set_attr "modrm" "*,0,0,*,*,*,*,*,*,*") ! (set_attr "length_immediate" "*,4,8,*,*,*,*,*,*,*") ! (set_attr "mode" "SI,DI,DI,DI,SI,DI,DI,DI,TI,DI")]) ! ! ;; Stores and loads of ax to arbitary constant address. ! ;; We fake an second form of instruction to force reload to load address ! ;; into register when rax is not available ! (define_insn "*movabsdi_1_rex64" ! [(set (mem:DI (match_operand:DI 0 "x86_64_movabs_operand" "i,r,r")) ! (match_operand:DI 1 "nonmemory_operand" "a,er,i"))] ! "TARGET_64BIT" ! "@ ! movabs{q}\t{%1, %P0|%P0, %1} ! mov{q}\t{%1, %a0|%a0, %1} ! movabs{q}\t{%1, %a0|%a0, %1}" ! [(set_attr "type" "imov") ! (set_attr "modrm" "0,*,*") ! (set_attr "length_address" "8,0,0") ! (set_attr "length_immediate" "0,*,*") ! (set_attr "memory" "store") ! (set_attr "mode" "DI")]) ! ! (define_insn "*movabsdi_2_rex64" ! [(set (match_operand:DI 0 "register_operand" "=a,r") ! (mem:DI (match_operand:DI 1 "x86_64_movabs_operand" "i,r")))] ! "TARGET_64BIT" ! "@ ! movabs{q}\t{%P1, %0|%0, %P1} ! mov{q}\t{%a1, %0|%0, %a1}" ! [(set_attr "type" "imov") ! (set_attr "modrm" "0,*") ! (set_attr "length_address" "8,0") ! (set_attr "length_immediate" "0") ! (set_attr "memory" "load") ! (set_attr "mode" "DI")]) ! ! ;; Convert impossible stores of immediate to existing instructions. ! ;; First try to get scratch register and go through it. In case this ! ;; fails, move by 32bit parts. ! (define_peephole2 ! [(match_scratch:DI 2 "r") ! (set (match_operand:DI 0 "memory_operand" "") ! (match_operand:DI 1 "immediate_operand" ""))] ! "TARGET_64BIT && !symbolic_operand (operands[1], DImode) ! && !x86_64_immediate_operand (operands[1], DImode)" ! [(set (match_dup 2) (match_dup 1)) ! (set (match_dup 0) (match_dup 2))] ! "") ! ! ;; We need to define this as both peepholer and splitter for case ! ;; peephole2 pass is not run. ! (define_peephole2 ! [(set (match_operand:DI 0 "memory_operand" "") ! (match_operand:DI 1 "immediate_operand" ""))] ! "TARGET_64BIT && !symbolic_operand (operands[1], DImode) ! && !x86_64_immediate_operand (operands[1], DImode) && 1" ! [(set (match_dup 2) (match_dup 3)) ! (set (match_dup 4) (match_dup 5))] ! "split_di (operands, 2, operands + 2, operands + 4);") ! ! (define_split ! [(set (match_operand:DI 0 "memory_operand" "") ! (match_operand:DI 1 "immediate_operand" ""))] ! "TARGET_64BIT && (flow2_completed || (reload_completed && !flag_peephole2)) ! && !symbolic_operand (operands[1], DImode) ! && !x86_64_immediate_operand (operands[1], DImode)" ! [(set (match_dup 2) (match_dup 3)) ! (set (match_dup 4) (match_dup 5))] ! "split_di (operands, 2, operands + 2, operands + 4);") ! ! (define_insn "*swapdi_rex64" ! [(set (match_operand:DI 0 "register_operand" "+r") ! (match_operand:DI 1 "register_operand" "+r")) ! (set (match_dup 1) ! (match_dup 0))] ! "TARGET_64BIT" ! "xchg{q}\t%1, %0" ! [(set_attr "type" "imov") ! (set_attr "pent_pair" "np") ! (set_attr "athlon_decode" "vector") ! (set_attr "mode" "DI") ! (set_attr "modrm" "0") ! (set_attr "ppro_uops" "few")]) ! (define_expand "movsf" [(set (match_operand:SF 0 "nonimmediate_operand" "") *************** *** 2101,2110 **** "ix86_expand_move (SFmode, operands); DONE;") (define_insn "*pushsf" ! [(set (match_operand:SF 0 "push_operand" "=<,<") ! (match_operand:SF 1 "general_no_elim_operand" "f#r,rFm#f"))] ! "" ! "* { switch (which_alternative) { --- 2639,2647 ---- "ix86_expand_move (SFmode, operands); DONE;") (define_insn "*pushsf" ! [(set (match_operand:SF 0 "push_operand" "=<,<,<") ! (match_operand:SF 1 "general_no_elim_operand" "f#rx,rFm#fx,x#rf"))] ! "!TARGET_64BIT" { switch (which_alternative) { *************** *** 2114,2132 **** operands[2] = stack_pointer_rtx; operands[3] = GEN_INT (4); if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"sub{l}\\t{%3, %2|%2, %3}\;fstp%z0\\t%y0\"; else ! return \"sub{l}\\t{%3, %2|%2, %3}\;fst%z0\\t%y0\"; case 1: ! return \"push{l}\\t%1\"; default: abort (); } ! }" ! [(set_attr "type" "multi,push") ! (set_attr "mode" "SF,SI")]) (define_split [(set (match_operand:SF 0 "push_operand" "") --- 2651,2701 ---- operands[2] = stack_pointer_rtx; operands[3] = GEN_INT (4); if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "sub{l}\t{%3, %2|%2, %3}\;fstp%z0\t%y0"; else ! return "sub{l}\t{%3, %2|%2, %3}\;fst%z0\t%y0"; case 1: ! return "push{l}\t%1"; ! case 2: ! return "#"; default: abort (); } ! } ! [(set_attr "type" "multi,push,multi") ! (set_attr "mode" "SF,SI,SF")]) ! ! (define_insn "*pushsf_rex64" ! [(set (match_operand:SF 0 "push_operand" "=X,X,X") ! (match_operand:SF 1 "nonmemory_no_elim_operand" "f#rx,rF#fx,x#rf"))] ! "TARGET_64BIT" ! { ! switch (which_alternative) ! { ! case 0: ! /* %%% We loose REG_DEAD notes for controling pops if we split late. */ ! operands[0] = gen_rtx_MEM (SFmode, stack_pointer_rtx); ! operands[2] = stack_pointer_rtx; ! operands[3] = GEN_INT (8); ! if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "sub{q}\t{%3, %2|%2, %3}\;fstp%z0\t%y0"; ! else ! return "sub{q}\t{%3, %2|%2, %3}\;fst%z0\t%y0"; ! ! case 1: ! return "push{q}\t%q1"; ! ! case 2: ! return "#"; ! ! default: ! abort (); ! } ! } ! [(set_attr "type" "multi,push,multi") ! (set_attr "mode" "SF,DI,SF")]) (define_split [(set (match_operand:SF 0 "push_operand" "") *************** *** 2144,2228 **** (define_split [(set (match_operand:SF 0 "push_operand" "") (match_operand:SF 1 "register_operand" ""))] ! "FP_REGNO_P (REGNO (operands[1]))" [(set (reg:SI 7) (plus:SI (reg:SI 7) (const_int -4))) (set (mem:SF (reg:SI 7)) (match_dup 1))]) (define_insn "*movsf_1" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=f#r,m,f#r,r#f,m") ! (match_operand:SF 1 "general_operand" "fm#r,f#r,G,rmF#f,Fr#f"))] "(GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM) && (reload_in_progress || reload_completed || GET_CODE (operands[1]) != CONST_DOUBLE || memory_operand (operands[0], SFmode))" - "* { switch (which_alternative) { case 0: if (REG_P (operands[1]) && find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"fstp\\t%y0\"; else if (STACK_TOP_P (operands[0])) ! return \"fld%z1\\t%y1\"; else ! return \"fst\\t%y0\"; case 1: if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"fstp%z0\\t%y0\"; else ! return \"fst%z0\\t%y0\"; case 2: switch (standard_80387_constant_p (operands[1])) { case 1: ! return \"fldz\"; case 2: ! return \"fld1\"; } abort(); case 3: case 4: ! return \"mov{l}\\t{%1, %0|%0, %1}\"; default: abort(); } ! }" ! [(set_attr "type" "fmov,fmov,fmov,imov,imov") ! (set_attr "mode" "SF,SF,SF,SI,SI")]) ! ! (define_split ! [(set (match_operand:SF 0 "nonimmediate_operand" "") ! (match_operand:SF 1 "memory_operand" ""))] ! "reload_completed ! && GET_CODE (operands[1]) == MEM ! && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF ! && CONSTANT_POOL_ADDRESS_P (XEXP (operands[1], 0)) ! && (!(FP_REG_P (operands[0]) || ! (GET_CODE (operands[0]) == SUBREG ! && FP_REG_P (SUBREG_REG (operands[0])))) ! || standard_80387_constant_p (get_pool_constant (XEXP (operands[1], 0))))" ! [(set (match_dup 0) ! (match_dup 1))] ! "operands[1] = get_pool_constant (XEXP (operands[1], 0));") (define_insn "*swapsf" [(set (match_operand:SF 0 "register_operand" "+f") (match_operand:SF 1 "register_operand" "+f")) (set (match_dup 1) (match_dup 0))] ! "" ! "* { if (STACK_TOP_P (operands[0])) ! return \"fxch\\t%1\"; else ! return \"fxch\\t%0\"; ! }" [(set_attr "type" "fxch") (set_attr "mode" "SF")]) --- 2713,2808 ---- (define_split [(set (match_operand:SF 0 "push_operand" "") (match_operand:SF 1 "register_operand" ""))] ! "!TARGET_64BIT && ANY_FP_REGNO_P (REGNO (operands[1]))" [(set (reg:SI 7) (plus:SI (reg:SI 7) (const_int -4))) (set (mem:SF (reg:SI 7)) (match_dup 1))]) + (define_split + [(set (match_operand:SF 0 "push_operand" "") + (match_operand:SF 1 "register_operand" ""))] + "TARGET_64BIT && ANY_FP_REGNO_P (REGNO (operands[1]))" + [(set (reg:DI 7) (plus:DI (reg:DI 7) (const_int -8))) + (set (mem:SF (reg:DI 7)) (match_dup 1))]) + (define_insn "*movsf_1" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=f#xr,m,f#xr,r#xf,m,x#rf,x#rf,x#rf,m,!*y,!rm,!*y") ! (match_operand:SF 1 "general_operand" "fm#rx,f#rx,G,rmF#fx,Fr#fx,H,x,xm#rf,x#rf,rm,*y,*y"))] "(GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM) && (reload_in_progress || reload_completed + || (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE) || GET_CODE (operands[1]) != CONST_DOUBLE || memory_operand (operands[0], SFmode))" { switch (which_alternative) { case 0: if (REG_P (operands[1]) && find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "fstp\t%y0"; else if (STACK_TOP_P (operands[0])) ! return "fld%z1\t%y1"; else ! return "fst\t%y0"; case 1: if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "fstp%z0\t%y0"; else ! return "fst%z0\t%y0"; case 2: switch (standard_80387_constant_p (operands[1])) { case 1: ! return "fldz"; case 2: ! return "fld1"; } abort(); case 3: case 4: ! return "mov{l}\t{%1, %0|%0, %1}"; ! case 5: ! if (TARGET_SSE2) ! return "pxor\t%0, %0"; ! else ! return "xorps\t%0, %0"; ! case 6: ! if (TARGET_PARTIAL_REG_DEPENDENCY) ! return "movaps\t{%1, %0|%0, %1}"; ! else ! return "movss\t{%1, %0|%0, %1}"; ! case 7: ! case 8: ! return "movss\t{%1, %0|%0, %1}"; ! ! case 9: ! case 10: ! return "movd\t{%1, %0|%0, %1}"; ! ! case 11: ! return "movq\t{%1, %0|%0, %1}"; default: abort(); } ! } ! [(set_attr "type" "fmov,fmov,fmov,imov,imov,sse,sse,sse,sse,mmx,mmx,mmx") ! (set_attr "mode" "SF,SF,SF,SI,SI,TI,SF,SF,SF,SI,SI,DI")]) (define_insn "*swapsf" [(set (match_operand:SF 0 "register_operand" "+f") (match_operand:SF 1 "register_operand" "+f")) (set (match_dup 1) (match_dup 0))] ! "reload_completed || !TARGET_SSE" { if (STACK_TOP_P (operands[0])) ! return "fxch\t%1"; else ! return "fxch\t%0"; ! } [(set_attr "type" "fxch") (set_attr "mode" "SF")]) *************** *** 2238,2247 **** ;; pattern for optimize_size too. (define_insn "*pushdf_nointeger" ! [(set (match_operand:DF 0 "push_operand" "=<,<,<") ! (match_operand:DF 1 "general_no_elim_operand" "f,Fo#f,*r#f"))] ! "!TARGET_INTEGER_DFMODE_MOVES" ! "* { switch (which_alternative) { --- 2818,2826 ---- ;; pattern for optimize_size too. (define_insn "*pushdf_nointeger" ! [(set (match_operand:DF 0 "push_operand" "=<,<,<,<") ! (match_operand:DF 1 "general_no_elim_operand" "f#Y,Fo#fY,*r#fY,Y#f"))] ! "!TARGET_64BIT && !TARGET_INTEGER_DFMODE_MOVES" { switch (which_alternative) { *************** *** 2251,2276 **** operands[2] = stack_pointer_rtx; operands[3] = GEN_INT (8); if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"sub{l}\\t{%3, %2|%2, %3}\;fstp%z0\\t%y0\"; else ! return \"sub{l}\\t{%3, %2|%2, %3}\;fst%z0\\t%y0\"; case 1: case 2: ! return \"#\"; default: abort (); } ! }" [(set_attr "type" "multi") ! (set_attr "mode" "DF,SI,SI")]) (define_insn "*pushdf_integer" ! [(set (match_operand:DF 0 "push_operand" "=<,<") ! (match_operand:DF 1 "general_no_elim_operand" "f#r,rFo#f"))] ! "TARGET_INTEGER_DFMODE_MOVES" ! "* { switch (which_alternative) { --- 2830,2855 ---- operands[2] = stack_pointer_rtx; operands[3] = GEN_INT (8); if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "sub{l}\t{%3, %2|%2, %3}\;fstp%z0\t%y0"; else ! return "sub{l}\t{%3, %2|%2, %3}\;fst%z0\t%y0"; case 1: case 2: ! case 3: ! return "#"; default: abort (); } ! } [(set_attr "type" "multi") ! (set_attr "mode" "DF,SI,SI,DF")]) (define_insn "*pushdf_integer" ! [(set (match_operand:DF 0 "push_operand" "=<,<,<") ! (match_operand:DF 1 "general_no_elim_operand" "f#rY,rFo#fY,Y#rf"))] ! "TARGET_64BIT || TARGET_INTEGER_DFMODE_MOVES" { switch (which_alternative) { *************** *** 2279,2462 **** operands[0] = gen_rtx_MEM (DFmode, stack_pointer_rtx); operands[2] = stack_pointer_rtx; operands[3] = GEN_INT (8); ! if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"sub{l}\\t{%3, %2|%2, %3}\;fstp%z0\\t%y0\"; else ! return \"sub{l}\\t{%3, %2|%2, %3}\;fst%z0\\t%y0\"; case 1: ! return \"#\"; default: abort (); } ! }" [(set_attr "type" "multi") ! (set_attr "mode" "DF,SI")]) ;; %%% Kill this when call knows how to work this out. (define_split [(set (match_operand:DF 0 "push_operand" "") (match_operand:DF 1 "register_operand" ""))] ! "reload_completed && FP_REGNO_P (REGNO (operands[1]))" [(set (reg:SI 7) (plus:SI (reg:SI 7) (const_int -8))) (set (mem:DF (reg:SI 7)) (match_dup 1))] "") (define_split [(set (match_operand:DF 0 "push_operand" "") (match_operand:DF 1 "general_operand" ""))] "reload_completed" [(const_int 0)] ! "if (!ix86_split_long_move (operands)) abort (); DONE;") ;; Moving is usually shorter when only FP registers are used. This separate ;; movdf pattern avoids the use of integer registers for FP operations ;; when optimizing for size. (define_insn "*movdf_nointeger" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=f,m,f,*r,o") ! (match_operand:DF 1 "general_operand" "fm,f,G,*roF,F*r"))] "(GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM) && (optimize_size || !TARGET_INTEGER_DFMODE_MOVES) && (reload_in_progress || reload_completed || GET_CODE (operands[1]) != CONST_DOUBLE || memory_operand (operands[0], DFmode))" - "* { switch (which_alternative) { case 0: if (REG_P (operands[1]) && find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"fstp\\t%y0\"; else if (STACK_TOP_P (operands[0])) ! return \"fld%z1\\t%y1\"; else ! return \"fst\\t%y0\"; case 1: if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"fstp%z0\\t%y0\"; else ! return \"fst%z0\\t%y0\"; case 2: switch (standard_80387_constant_p (operands[1])) { case 1: ! return \"fldz\"; case 2: ! return \"fld1\"; } abort(); case 3: case 4: ! return \"#\"; default: abort(); } ! }" ! [(set_attr "type" "fmov,fmov,fmov,multi,multi") ! (set_attr "mode" "DF,DF,DF,SI,SI")]) (define_insn "*movdf_integer" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=f#r,m,f#r,r#f,o") ! (match_operand:DF 1 "general_operand" "fm#r,f#r,G,roF#f,Fr#f"))] "(GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM) && !optimize_size && TARGET_INTEGER_DFMODE_MOVES && (reload_in_progress || reload_completed || GET_CODE (operands[1]) != CONST_DOUBLE || memory_operand (operands[0], DFmode))" - "* { switch (which_alternative) { case 0: if (REG_P (operands[1]) && find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"fstp\\t%y0\"; else if (STACK_TOP_P (operands[0])) ! return \"fld%z1\\t%y1\"; else ! return \"fst\\t%y0\"; case 1: if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"fstp%z0\\t%y0\"; else ! return \"fst%z0\\t%y0\"; case 2: switch (standard_80387_constant_p (operands[1])) { case 1: ! return \"fldz\"; case 2: ! return \"fld1\"; } abort(); case 3: case 4: ! return \"#\"; default: abort(); } ! }" ! [(set_attr "type" "fmov,fmov,fmov,multi,multi") ! (set_attr "mode" "DF,DF,DF,SI,SI")]) (define_split [(set (match_operand:DF 0 "nonimmediate_operand" "") (match_operand:DF 1 "general_operand" ""))] "reload_completed && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM) ! && ! (FP_REG_P (operands[0]) || (GET_CODE (operands[0]) == SUBREG ! && FP_REG_P (SUBREG_REG (operands[0])))) ! && ! (FP_REG_P (operands[1]) || (GET_CODE (operands[1]) == SUBREG ! && FP_REG_P (SUBREG_REG (operands[1]))))" ! [(set (match_dup 2) (match_dup 5)) ! (set (match_dup 3) (match_dup 6))] ! "if (ix86_split_long_move (operands)) DONE;") ! ! (define_split ! [(set (match_operand:DF 0 "register_operand" "") ! (match_operand:DF 1 "memory_operand" ""))] ! "reload_completed ! && GET_CODE (operands[1]) == MEM ! && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF ! && CONSTANT_POOL_ADDRESS_P (XEXP (operands[1], 0)) ! && standard_80387_constant_p (get_pool_constant (XEXP (operands[1], 0)))" ! [(set (match_dup 0) ! (match_dup 1))] ! "operands[1] = get_pool_constant (XEXP (operands[1], 0));") (define_insn "*swapdf" [(set (match_operand:DF 0 "register_operand" "+f") (match_operand:DF 1 "register_operand" "+f")) (set (match_dup 1) (match_dup 0))] ! "" ! "* { if (STACK_TOP_P (operands[0])) ! return \"fxch\\t%1\"; else ! return \"fxch\\t%0\"; ! }" [(set_attr "type" "fxch") (set_attr "mode" "DF")]) (define_expand "movxf" [(set (match_operand:XF 0 "nonimmediate_operand" "") (match_operand:XF 1 "general_operand" ""))] ! "" "ix86_expand_move (XFmode, operands); DONE;") (define_expand "movtf" --- 2858,3064 ---- operands[0] = gen_rtx_MEM (DFmode, stack_pointer_rtx); operands[2] = stack_pointer_rtx; operands[3] = GEN_INT (8); ! if (TARGET_64BIT) ! if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "sub{q}\t{%3, %2|%2, %3}\;fstp%z0\t%y0"; ! else ! return "sub{q}\t{%3, %2|%2, %3}\;fst%z0\t%y0"; else ! if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "sub{l}\t{%3, %2|%2, %3}\;fstp%z0\t%y0"; ! else ! return "sub{l}\t{%3, %2|%2, %3}\;fst%z0\t%y0"; ! case 1: ! case 2: ! return "#"; default: abort (); } ! } [(set_attr "type" "multi") ! (set_attr "mode" "DF,SI,DF")]) ;; %%% Kill this when call knows how to work this out. (define_split [(set (match_operand:DF 0 "push_operand" "") (match_operand:DF 1 "register_operand" ""))] ! "!TARGET_64BIT && reload_completed && ANY_FP_REGNO_P (REGNO (operands[1]))" [(set (reg:SI 7) (plus:SI (reg:SI 7) (const_int -8))) (set (mem:DF (reg:SI 7)) (match_dup 1))] "") (define_split [(set (match_operand:DF 0 "push_operand" "") + (match_operand:DF 1 "register_operand" ""))] + "TARGET_64BIT && reload_completed && ANY_FP_REGNO_P (REGNO (operands[1]))" + [(set (reg:DI 7) (plus:DI (reg:DI 7) (const_int -8))) + (set (mem:DF (reg:DI 7)) (match_dup 1))] + "") + + (define_split + [(set (match_operand:DF 0 "push_operand" "") (match_operand:DF 1 "general_operand" ""))] "reload_completed" [(const_int 0)] ! "ix86_split_long_move (operands); DONE;") ;; Moving is usually shorter when only FP registers are used. This separate ;; movdf pattern avoids the use of integer registers for FP operations ;; when optimizing for size. (define_insn "*movdf_nointeger" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=f#Y,m,f#Y,*r,o,Y#f,Y#f,Y#f,m") ! (match_operand:DF 1 "general_operand" "fm#Y,f#Y,G,*roF,F*r,H,Y#f,YHm#f,Y#f"))] "(GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM) && (optimize_size || !TARGET_INTEGER_DFMODE_MOVES) && (reload_in_progress || reload_completed + || (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE) || GET_CODE (operands[1]) != CONST_DOUBLE || memory_operand (operands[0], DFmode))" { switch (which_alternative) { case 0: if (REG_P (operands[1]) && find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "fstp\t%y0"; else if (STACK_TOP_P (operands[0])) ! return "fld%z1\t%y1"; else ! return "fst\t%y0"; case 1: if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "fstp%z0\t%y0"; else ! return "fst%z0\t%y0"; case 2: switch (standard_80387_constant_p (operands[1])) { case 1: ! return "fldz"; case 2: ! return "fld1"; } abort(); case 3: case 4: ! return "#"; ! case 5: ! return "pxor\t%0, %0"; ! case 6: ! if (TARGET_PARTIAL_REG_DEPENDENCY) ! return "movapd\t{%1, %0|%0, %1}"; ! else ! return "movsd\t{%1, %0|%0, %1}"; ! case 7: ! case 8: ! return "movsd\t{%1, %0|%0, %1}"; default: abort(); } ! } ! [(set_attr "type" "fmov,fmov,fmov,multi,multi,sse,sse,sse,sse") ! (set_attr "mode" "DF,DF,DF,SI,SI,TI,DF,DF,DF")]) (define_insn "*movdf_integer" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=f#Yr,m,f#Yr,r#Yf,o,Y#rf,Y#rf,Y#rf,m") ! (match_operand:DF 1 "general_operand" "fm#Yr,f#Yr,G,roF#Yf,Fr#Yf,H,Y#rf,Ym#rf,Y#rf"))] "(GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM) && !optimize_size && TARGET_INTEGER_DFMODE_MOVES && (reload_in_progress || reload_completed + || (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE) || GET_CODE (operands[1]) != CONST_DOUBLE || memory_operand (operands[0], DFmode))" { switch (which_alternative) { case 0: if (REG_P (operands[1]) && find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "fstp\t%y0"; else if (STACK_TOP_P (operands[0])) ! return "fld%z1\t%y1"; else ! return "fst\t%y0"; case 1: if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "fstp%z0\t%y0"; else ! return "fst%z0\t%y0"; case 2: switch (standard_80387_constant_p (operands[1])) { case 1: ! return "fldz"; case 2: ! return "fld1"; } abort(); case 3: case 4: ! return "#"; ! ! case 5: ! return "pxor\t%0, %0"; ! case 6: ! if (TARGET_PARTIAL_REG_DEPENDENCY) ! return "movapd\t{%1, %0|%0, %1}"; ! else ! return "movsd\t{%1, %0|%0, %1}"; ! case 7: ! case 8: ! return "movsd\t{%1, %0|%0, %1}"; default: abort(); } ! } ! [(set_attr "type" "fmov,fmov,fmov,multi,multi,sse,sse,sse,sse") ! (set_attr "mode" "DF,DF,DF,SI,SI,TI,DF,DF,DF")]) (define_split [(set (match_operand:DF 0 "nonimmediate_operand" "") (match_operand:DF 1 "general_operand" ""))] "reload_completed && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM) ! && ! (ANY_FP_REG_P (operands[0]) || (GET_CODE (operands[0]) == SUBREG ! && ANY_FP_REG_P (SUBREG_REG (operands[0])))) ! && ! (ANY_FP_REG_P (operands[1]) || (GET_CODE (operands[1]) == SUBREG ! && ANY_FP_REG_P (SUBREG_REG (operands[1]))))" ! [(const_int 0)] ! "ix86_split_long_move (operands); DONE;") (define_insn "*swapdf" [(set (match_operand:DF 0 "register_operand" "+f") (match_operand:DF 1 "register_operand" "+f")) (set (match_dup 1) (match_dup 0))] ! "reload_completed || !TARGET_SSE2" { if (STACK_TOP_P (operands[0])) ! return "fxch\t%1"; else ! return "fxch\t%0"; ! } [(set_attr "type" "fxch") (set_attr "mode" "DF")]) (define_expand "movxf" [(set (match_operand:XF 0 "nonimmediate_operand" "") (match_operand:XF 1 "general_operand" ""))] ! "!TARGET_64BIT" "ix86_expand_move (XFmode, operands); DONE;") (define_expand "movtf" *************** *** 2473,2482 **** ;; handled elsewhere). (define_insn "*pushxf_nointeger" ! [(set (match_operand:XF 0 "push_operand" "=<,<,<") (match_operand:XF 1 "general_no_elim_operand" "f,Fo,*r"))] ! "optimize_size" ! "* { switch (which_alternative) { --- 3075,3083 ---- ;; handled elsewhere). (define_insn "*pushxf_nointeger" ! [(set (match_operand:XF 0 "push_operand" "=X,X,X") (match_operand:XF 1 "general_no_elim_operand" "f,Fo,*r"))] ! "!TARGET_64BIT && optimize_size" { switch (which_alternative) { *************** *** 2486,2503 **** operands[2] = stack_pointer_rtx; operands[3] = GEN_INT (12); if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"sub{l}\\t{%3, %2|%2, %3}\;fstp%z0\\t%y0\"; else ! return \"sub{l}\\t{%3, %2|%2, %3}\;fst%z0\\t%y0\"; case 1: case 2: ! return \"#\"; default: abort (); } ! }" [(set_attr "type" "multi") (set_attr "mode" "XF,SI,SI")]) --- 3087,3104 ---- operands[2] = stack_pointer_rtx; operands[3] = GEN_INT (12); if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "sub{l}\t{%3, %2|%2, %3}\;fstp%z0\t%y0"; else ! return "sub{l}\t{%3, %2|%2, %3}\;fst%z0\t%y0"; case 1: case 2: ! return "#"; default: abort (); } ! } [(set_attr "type" "multi") (set_attr "mode" "XF,SI,SI")]) *************** *** 2505,2511 **** [(set (match_operand:TF 0 "push_operand" "=<,<,<") (match_operand:TF 1 "general_no_elim_operand" "f,Fo,*r"))] "optimize_size" - "* { switch (which_alternative) { --- 3106,3111 ---- *************** *** 2515,2540 **** operands[2] = stack_pointer_rtx; operands[3] = GEN_INT (16); if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"sub{l}\\t{%3, %2|%2, %3}\;fstp%z0\\t%y0\"; else ! return \"sub{l}\\t{%3, %2|%2, %3}\;fst%z0\\t%y0\"; case 1: case 2: ! return \"#\"; default: abort (); } ! }" [(set_attr "type" "multi") (set_attr "mode" "XF,SI,SI")]) (define_insn "*pushxf_integer" [(set (match_operand:XF 0 "push_operand" "=<,<") ! (match_operand:XF 1 "general_no_elim_operand" "f#r,rFo#f"))] ! "!optimize_size" ! "* { switch (which_alternative) { --- 3115,3139 ---- operands[2] = stack_pointer_rtx; operands[3] = GEN_INT (16); if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "sub{l}\t{%3, %2|%2, %3}\;fstp%z0\t%y0"; else ! return "sub{l}\t{%3, %2|%2, %3}\;fst%z0\t%y0"; case 1: case 2: ! return "#"; default: abort (); } ! } [(set_attr "type" "multi") (set_attr "mode" "XF,SI,SI")]) (define_insn "*pushxf_integer" [(set (match_operand:XF 0 "push_operand" "=<,<") ! (match_operand:XF 1 "general_no_elim_operand" "f#r,ro#f"))] ! "!TARGET_64BIT && !optimize_size" { switch (which_alternative) { *************** *** 2544,2560 **** operands[2] = stack_pointer_rtx; operands[3] = GEN_INT (12); if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"sub{l}\\t{%3, %2|%2, %3}\;fstp%z0\\t%y0\"; else ! return \"sub{l}\\t{%3, %2|%2, %3}\;fst%z0\\t%y0\"; case 1: ! return \"#\"; default: abort (); } ! }" [(set_attr "type" "multi") (set_attr "mode" "XF,SI")]) --- 3143,3159 ---- operands[2] = stack_pointer_rtx; operands[3] = GEN_INT (12); if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "sub{l}\t{%3, %2|%2, %3}\;fstp%z0\t%y0"; else ! return "sub{l}\t{%3, %2|%2, %3}\;fst%z0\t%y0"; case 1: ! return "#"; default: abort (); } ! } [(set_attr "type" "multi") (set_attr "mode" "XF,SI")]) *************** *** 2562,2568 **** [(set (match_operand:TF 0 "push_operand" "=<,<") (match_operand:TF 1 "general_no_elim_operand" "f#r,rFo#f"))] "!optimize_size" - "* { switch (which_alternative) { --- 3161,3166 ---- *************** *** 2571,2588 **** operands[0] = gen_rtx_MEM (XFmode, stack_pointer_rtx); operands[2] = stack_pointer_rtx; operands[3] = GEN_INT (16); ! if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"sub{l}\\t{%3, %2|%2, %3}\;fstp%z0\\t%y0\"; else ! return \"sub{l}\\t{%3, %2|%2, %3}\;fst%z0\\t%y0\"; case 1: ! return \"#\"; default: abort (); } ! }" [(set_attr "type" "multi") (set_attr "mode" "XF,SI")]) --- 3169,3192 ---- operands[0] = gen_rtx_MEM (XFmode, stack_pointer_rtx); operands[2] = stack_pointer_rtx; operands[3] = GEN_INT (16); ! if (TARGET_64BIT) ! if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "sub{q}\t{%3, %2|%2, %3}\;fstp%z0\t%y0"; ! else ! return "sub{q}\t{%3, %2|%2, %3}\;fst%z0\t%y0"; else ! if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "sub{l}\t{%3, %2|%2, %3}\;fstp%z0\t%y0"; ! else ! return "sub{l}\t{%3, %2|%2, %3}\;fst%z0\t%y0"; case 1: ! return "#"; default: abort (); } ! } [(set_attr "type" "multi") (set_attr "mode" "XF,SI")]) *************** *** 2593,2661 **** && (GET_MODE (operands[0]) == XFmode || GET_MODE (operands[0]) == TFmode || GET_MODE (operands[0]) == DFmode) ! && (!REG_P (operands[1]) || !FP_REGNO_P (REGNO (operands[1])))" [(const_int 0)] ! "if (!ix86_split_long_move (operands)) abort (); DONE;") (define_split [(set (match_operand:XF 0 "push_operand" "") (match_operand:XF 1 "register_operand" ""))] ! "FP_REGNO_P (REGNO (operands[1]))" [(set (reg:SI 7) (plus:SI (reg:SI 7) (const_int -12))) (set (mem:XF (reg:SI 7)) (match_dup 1))]) (define_split [(set (match_operand:TF 0 "push_operand" "") (match_operand:TF 1 "register_operand" ""))] ! "FP_REGNO_P (REGNO (operands[1]))" [(set (reg:SI 7) (plus:SI (reg:SI 7) (const_int -16))) (set (mem:TF (reg:SI 7)) (match_dup 1))]) ;; Do not use integer registers when optimizing for size (define_insn "*movxf_nointeger" [(set (match_operand:XF 0 "nonimmediate_operand" "=f,m,f,*r,o") (match_operand:XF 1 "general_operand" "fm,f,G,*roF,F*r"))] ! "(GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM) && optimize_size && (reload_in_progress || reload_completed || GET_CODE (operands[1]) != CONST_DOUBLE || memory_operand (operands[0], XFmode))" - "* { switch (which_alternative) { case 0: if (REG_P (operands[1]) && find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"fstp\\t%y0\"; else if (STACK_TOP_P (operands[0])) ! return \"fld%z1\\t%y1\"; else ! return \"fst\\t%y0\"; case 1: /* There is no non-popping store to memory for XFmode. So if we need one, follow the store with a load. */ if (! find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"fstp%z0\\t%y0\;fld%z0\\t%y0\"; else ! return \"fstp%z0\\t%y0\"; case 2: switch (standard_80387_constant_p (operands[1])) { case 1: ! return \"fldz\"; case 2: ! return \"fld1\"; } break; case 3: case 4: ! return \"#\"; } abort(); ! }" [(set_attr "type" "fmov,fmov,fmov,multi,multi") (set_attr "mode" "XF,XF,XF,SI,SI")]) --- 3197,3272 ---- && (GET_MODE (operands[0]) == XFmode || GET_MODE (operands[0]) == TFmode || GET_MODE (operands[0]) == DFmode) ! && (!REG_P (operands[1]) || !ANY_FP_REGNO_P (REGNO (operands[1])))" [(const_int 0)] ! "ix86_split_long_move (operands); DONE;") (define_split [(set (match_operand:XF 0 "push_operand" "") (match_operand:XF 1 "register_operand" ""))] ! "!TARGET_64BIT && ANY_FP_REGNO_P (REGNO (operands[1]))" [(set (reg:SI 7) (plus:SI (reg:SI 7) (const_int -12))) (set (mem:XF (reg:SI 7)) (match_dup 1))]) (define_split [(set (match_operand:TF 0 "push_operand" "") (match_operand:TF 1 "register_operand" ""))] ! "!TARGET_64BIT && ANY_FP_REGNO_P (REGNO (operands[1]))" [(set (reg:SI 7) (plus:SI (reg:SI 7) (const_int -16))) (set (mem:TF (reg:SI 7)) (match_dup 1))]) + (define_split + [(set (match_operand:TF 0 "push_operand" "") + (match_operand:TF 1 "register_operand" ""))] + "TARGET_64BIT && ANY_FP_REGNO_P (REGNO (operands[1]))" + [(set (reg:DI 7) (plus:DI (reg:DI 7) (const_int -16))) + (set (mem:TF (reg:DI 7)) (match_dup 1))]) + ;; Do not use integer registers when optimizing for size (define_insn "*movxf_nointeger" [(set (match_operand:XF 0 "nonimmediate_operand" "=f,m,f,*r,o") (match_operand:XF 1 "general_operand" "fm,f,G,*roF,F*r"))] ! "!TARGET_64BIT && optimize_size + && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM) && (reload_in_progress || reload_completed || GET_CODE (operands[1]) != CONST_DOUBLE || memory_operand (operands[0], XFmode))" { switch (which_alternative) { case 0: if (REG_P (operands[1]) && find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "fstp\t%y0"; else if (STACK_TOP_P (operands[0])) ! return "fld%z1\t%y1"; else ! return "fst\t%y0"; case 1: /* There is no non-popping store to memory for XFmode. So if we need one, follow the store with a load. */ if (! find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "fstp%z0\t%y0\;fld%z0\t%y0"; else ! return "fstp%z0\t%y0"; case 2: switch (standard_80387_constant_p (operands[1])) { case 1: ! return "fldz"; case 2: ! return "fld1"; } break; case 3: case 4: ! return "#"; } abort(); ! } [(set_attr "type" "fmov,fmov,fmov,multi,multi") (set_attr "mode" "XF,XF,XF,SI,SI")]) *************** *** 2666,2755 **** && optimize_size && (reload_in_progress || reload_completed || GET_CODE (operands[1]) != CONST_DOUBLE || memory_operand (operands[0], TFmode))" - "* { switch (which_alternative) { case 0: if (REG_P (operands[1]) && find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"fstp\\t%y0\"; else if (STACK_TOP_P (operands[0])) ! return \"fld%z1\\t%y1\"; else ! return \"fst\\t%y0\"; case 1: /* There is no non-popping store to memory for XFmode. So if we need one, follow the store with a load. */ if (! find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"fstp%z0\\t%y0\;fld%z0\\t%y0\"; else ! return \"fstp%z0\\t%y0\"; case 2: switch (standard_80387_constant_p (operands[1])) { case 1: ! return \"fldz\"; case 2: ! return \"fld1\"; } break; case 3: case 4: ! return \"#\"; } abort(); ! }" [(set_attr "type" "fmov,fmov,fmov,multi,multi") (set_attr "mode" "XF,XF,XF,SI,SI")]) (define_insn "*movxf_integer" [(set (match_operand:XF 0 "nonimmediate_operand" "=f#r,m,f#r,r#f,o") (match_operand:XF 1 "general_operand" "fm#r,f#r,G,roF#f,Fr#f"))] ! "(GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM) && !optimize_size && (reload_in_progress || reload_completed || GET_CODE (operands[1]) != CONST_DOUBLE || memory_operand (operands[0], XFmode))" - "* { switch (which_alternative) { case 0: if (REG_P (operands[1]) && find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"fstp\\t%y0\"; else if (STACK_TOP_P (operands[0])) ! return \"fld%z1\\t%y1\"; else ! return \"fst\\t%y0\"; case 1: /* There is no non-popping store to memory for XFmode. So if we need one, follow the store with a load. */ if (! find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"fstp%z0\\t%y0\;fld%z0\\t%y0\"; else ! return \"fstp%z0\\t%y0\"; case 2: switch (standard_80387_constant_p (operands[1])) { case 1: ! return \"fldz\"; case 2: ! return \"fld1\"; } break; case 3: case 4: ! return \"#\"; } abort(); ! }" [(set_attr "type" "fmov,fmov,fmov,multi,multi") (set_attr "mode" "XF,XF,XF,SI,SI")]) --- 3277,3366 ---- && optimize_size && (reload_in_progress || reload_completed || GET_CODE (operands[1]) != CONST_DOUBLE + || (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE) || memory_operand (operands[0], TFmode))" { switch (which_alternative) { case 0: if (REG_P (operands[1]) && find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "fstp\t%y0"; else if (STACK_TOP_P (operands[0])) ! return "fld%z1\t%y1"; else ! return "fst\t%y0"; case 1: /* There is no non-popping store to memory for XFmode. So if we need one, follow the store with a load. */ if (! find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "fstp%z0\t%y0\;fld%z0\t%y0"; else ! return "fstp%z0\t%y0"; case 2: switch (standard_80387_constant_p (operands[1])) { case 1: ! return "fldz"; case 2: ! return "fld1"; } break; case 3: case 4: ! return "#"; } abort(); ! } [(set_attr "type" "fmov,fmov,fmov,multi,multi") (set_attr "mode" "XF,XF,XF,SI,SI")]) (define_insn "*movxf_integer" [(set (match_operand:XF 0 "nonimmediate_operand" "=f#r,m,f#r,r#f,o") (match_operand:XF 1 "general_operand" "fm#r,f#r,G,roF#f,Fr#f"))] ! "!TARGET_64BIT && !optimize_size + && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM) && (reload_in_progress || reload_completed || GET_CODE (operands[1]) != CONST_DOUBLE || memory_operand (operands[0], XFmode))" { switch (which_alternative) { case 0: if (REG_P (operands[1]) && find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "fstp\t%y0"; else if (STACK_TOP_P (operands[0])) ! return "fld%z1\t%y1"; else ! return "fst\t%y0"; case 1: /* There is no non-popping store to memory for XFmode. So if we need one, follow the store with a load. */ if (! find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "fstp%z0\t%y0\;fld%z0\t%y0"; else ! return "fstp%z0\t%y0"; case 2: switch (standard_80387_constant_p (operands[1])) { case 1: ! return "fldz"; case 2: ! return "fld1"; } break; case 3: case 4: ! return "#"; } abort(); ! } [(set_attr "type" "fmov,fmov,fmov,multi,multi") (set_attr "mode" "XF,XF,XF,SI,SI")]) *************** *** 2760,2802 **** && !optimize_size && (reload_in_progress || reload_completed || GET_CODE (operands[1]) != CONST_DOUBLE || memory_operand (operands[0], TFmode))" - "* { switch (which_alternative) { case 0: if (REG_P (operands[1]) && find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"fstp\\t%y0\"; else if (STACK_TOP_P (operands[0])) ! return \"fld%z1\\t%y1\"; else ! return \"fst\\t%y0\"; case 1: /* There is no non-popping store to memory for XFmode. So if we need one, follow the store with a load. */ if (! find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"fstp%z0\\t%y0\;fld%z0\\t%y0\"; else ! return \"fstp%z0\\t%y0\"; case 2: switch (standard_80387_constant_p (operands[1])) { case 1: ! return \"fldz\"; case 2: ! return \"fld1\"; } break; case 3: case 4: ! return \"#\"; } abort(); ! }" [(set_attr "type" "fmov,fmov,fmov,multi,multi") (set_attr "mode" "XF,XF,XF,SI,SI")]) --- 3371,3413 ---- && !optimize_size && (reload_in_progress || reload_completed || GET_CODE (operands[1]) != CONST_DOUBLE + || (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE) || memory_operand (operands[0], TFmode))" { switch (which_alternative) { case 0: if (REG_P (operands[1]) && find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "fstp\t%y0"; else if (STACK_TOP_P (operands[0])) ! return "fld%z1\t%y1"; else ! return "fst\t%y0"; case 1: /* There is no non-popping store to memory for XFmode. So if we need one, follow the store with a load. */ if (! find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "fstp%z0\t%y0\;fld%z0\t%y0"; else ! return "fstp%z0\t%y0"; case 2: switch (standard_80387_constant_p (operands[1])) { case 1: ! return "fldz"; case 2: ! return "fld1"; } break; case 3: case 4: ! return "#"; } abort(); ! } [(set_attr "type" "fmov,fmov,fmov,multi,multi") (set_attr "mode" "XF,XF,XF,SI,SI")]) *************** *** 2806,2831 **** "reload_completed && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM) && (GET_MODE (operands[0]) == XFmode || GET_MODE (operands[0]) == TFmode) ! && ! (FP_REG_P (operands[0]) || (GET_CODE (operands[0]) == SUBREG ! && FP_REG_P (SUBREG_REG (operands[0])))) ! && ! (FP_REG_P (operands[1]) || (GET_CODE (operands[1]) == SUBREG ! && FP_REG_P (SUBREG_REG (operands[1]))))" ! [(set (match_dup 2) (match_dup 5)) ! (set (match_dup 3) (match_dup 6)) ! (set (match_dup 4) (match_dup 7))] ! "if (ix86_split_long_move (operands)) DONE;") (define_split [(set (match_operand 0 "register_operand" "") (match_operand 1 "memory_operand" ""))] "reload_completed && GET_CODE (operands[1]) == MEM ! && (GET_MODE (operands[0]) == XFmode || GET_MODE (operands[0]) == TFmode) && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (XEXP (operands[1], 0)) ! && standard_80387_constant_p (get_pool_constant (XEXP (operands[1], 0)))" [(set (match_dup 0) (match_dup 1))] "operands[1] = get_pool_constant (XEXP (operands[1], 0));") --- 3417,3448 ---- "reload_completed && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM) && (GET_MODE (operands[0]) == XFmode || GET_MODE (operands[0]) == TFmode) ! && ! (ANY_FP_REG_P (operands[0]) || (GET_CODE (operands[0]) == SUBREG ! && ANY_FP_REG_P (SUBREG_REG (operands[0])))) ! && ! (ANY_FP_REG_P (operands[1]) || (GET_CODE (operands[1]) == SUBREG ! && ANY_FP_REG_P (SUBREG_REG (operands[1]))))" ! [(const_int 0)] ! "ix86_split_long_move (operands); DONE;") (define_split [(set (match_operand 0 "register_operand" "") (match_operand 1 "memory_operand" ""))] "reload_completed && GET_CODE (operands[1]) == MEM ! && (GET_MODE (operands[0]) == XFmode || GET_MODE (operands[0]) == TFmode ! || GET_MODE (operands[0]) == SFmode || GET_MODE (operands[0]) == DFmode) && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (XEXP (operands[1], 0)) ! && (!(SSE_REG_P (operands[0]) || ! (GET_CODE (operands[0]) == SUBREG ! && SSE_REG_P (SUBREG_REG (operands[0])))) ! || standard_sse_constant_p (get_pool_constant (XEXP (operands[1], 0)))) ! && (!(FP_REG_P (operands[0]) || ! (GET_CODE (operands[0]) == SUBREG ! && FP_REG_P (SUBREG_REG (operands[0])))) ! || standard_80387_constant_p (get_pool_constant (XEXP (operands[1], 0))))" [(set (match_dup 0) (match_dup 1))] "operands[1] = get_pool_constant (XEXP (operands[1], 0));") *************** *** 2836,2848 **** (set (match_dup 1) (match_dup 0))] "" - "* { if (STACK_TOP_P (operands[0])) ! return \"fxch\\t%1\"; else ! return \"fxch\\t%0\"; ! }" [(set_attr "type" "fxch") (set_attr "mode" "XF")]) --- 3453,3464 ---- (set (match_dup 1) (match_dup 0))] "" { if (STACK_TOP_P (operands[0])) ! return "fxch\t%1"; else ! return "fxch\t%0"; ! } [(set_attr "type" "fxch") (set_attr "mode" "XF")]) *************** *** 2852,2864 **** (set (match_dup 1) (match_dup 0))] "" - "* { if (STACK_TOP_P (operands[0])) ! return \"fxch\\t%1\"; else ! return \"fxch\\t%0\"; ! }" [(set_attr "type" "fxch") (set_attr "mode" "XF")]) --- 3468,3479 ---- (set (match_dup 1) (match_dup 0))] "" { if (STACK_TOP_P (operands[0])) ! return "fxch\t%1"; else ! return "fxch\t%0"; ! } [(set_attr "type" "fxch") (set_attr "mode" "XF")]) *************** *** 2868,2874 **** [(set (match_operand:SI 0 "register_operand" "") (zero_extend:SI (match_operand:HI 1 "nonimmediate_operand" "")))] "" - " { if (TARGET_ZERO_EXTEND_WITH_AND && !optimize_size) { --- 3483,3488 ---- *************** *** 2876,2882 **** emit_insn (gen_zero_extendhisi2_and (operands[0], operands[1])); DONE; } ! }") (define_insn "zero_extendhisi2_and" [(set (match_operand:SI 0 "register_operand" "=r") --- 3490,3496 ---- emit_insn (gen_zero_extendhisi2_and (operands[0], operands[1])); DONE; } ! }) (define_insn "zero_extendhisi2_and" [(set (match_operand:SI 0 "register_operand" "=r") *************** *** 2900,2906 **** [(set (match_operand:SI 0 "register_operand" "=r") (zero_extend:SI (match_operand:HI 1 "nonimmediate_operand" "rm")))] "!TARGET_ZERO_EXTEND_WITH_AND || optimize_size" ! "movz{wl|x}\\t{%1, %0|%0, %1}" [(set_attr "type" "imovx") (set_attr "mode" "SI")]) --- 3514,3520 ---- [(set (match_operand:SI 0 "register_operand" "=r") (zero_extend:SI (match_operand:HI 1 "nonimmediate_operand" "rm")))] "!TARGET_ZERO_EXTEND_WITH_AND || optimize_size" ! "movz{wl|x}\t{%1, %0|%0, %1}" [(set_attr "type" "imovx") (set_attr "mode" "SI")]) *************** *** 2934,2940 **** [(set (match_operand:HI 0 "register_operand" "=r") (zero_extend:HI (match_operand:QI 1 "nonimmediate_operand" "qm")))] "(!TARGET_ZERO_EXTEND_WITH_AND || optimize_size) && reload_completed" ! "movz{bw|x}\\t{%1, %0|%0, %1}" [(set_attr "type" "imovx") (set_attr "mode" "HI")]) --- 3548,3554 ---- [(set (match_operand:HI 0 "register_operand" "=r") (zero_extend:HI (match_operand:QI 1 "nonimmediate_operand" "qm")))] "(!TARGET_ZERO_EXTEND_WITH_AND || optimize_size) && reload_completed" ! "movz{bw|x}\t{%1, %0|%0, %1}" [(set_attr "type" "imovx") (set_attr "mode" "HI")]) *************** *** 2945,2951 **** (clobber (reg:CC 17))] "reload_completed && (!TARGET_ZERO_EXTEND_WITH_AND || optimize_size) ! && (!REG_P (operands[1]) || QI_REG_P (operands[1]))" [(set (match_operand:HI 0 "register_operand" "") (zero_extend:HI (match_operand:QI 1 "nonimmediate_operand" "")))]) --- 3559,3565 ---- (clobber (reg:CC 17))] "reload_completed && (!TARGET_ZERO_EXTEND_WITH_AND || optimize_size) ! && (!REG_P (operands[1]) || ANY_QI_REG_P (operands[1]))" [(set (match_operand:HI 0 "register_operand" "") (zero_extend:HI (match_operand:QI 1 "nonimmediate_operand" "")))]) *************** *** 2956,2962 **** (zero_extend:HI (match_operand:QI 1 "nonimmediate_operand" ""))) (clobber (reg:CC 17))] "reload_completed ! && QI_REG_P (operands[0]) && (TARGET_ZERO_EXTEND_WITH_AND && !optimize_size) && !reg_overlap_mentioned_p (operands[0], operands[1])" [(set (match_dup 0) (const_int 0)) --- 3570,3576 ---- (zero_extend:HI (match_operand:QI 1 "nonimmediate_operand" ""))) (clobber (reg:CC 17))] "reload_completed ! && ANY_QI_REG_P (operands[0]) && (TARGET_ZERO_EXTEND_WITH_AND && !optimize_size) && !reg_overlap_mentioned_p (operands[0], operands[1])" [(set (match_dup 0) (const_int 0)) *************** *** 3004,3010 **** [(set (match_operand:SI 0 "register_operand" "=r") (zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "qm")))] "(!TARGET_ZERO_EXTEND_WITH_AND || optimize_size) && reload_completed" ! "movz{bl|x}\\t{%1, %0|%0, %1}" [(set_attr "type" "imovx") (set_attr "mode" "SI")]) --- 3618,3624 ---- [(set (match_operand:SI 0 "register_operand" "=r") (zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "qm")))] "(!TARGET_ZERO_EXTEND_WITH_AND || optimize_size) && reload_completed" ! "movz{bl|x}\t{%1, %0|%0, %1}" [(set_attr "type" "imovx") (set_attr "mode" "SI")]) *************** *** 3015,3021 **** (clobber (reg:CC 17))] "reload_completed && (!TARGET_ZERO_EXTEND_WITH_AND || optimize_size) ! && (!REG_P (operands[1]) || QI_REG_P (operands[1]))" [(set (match_dup 0) (zero_extend:SI (match_dup 1)))]) --- 3629,3635 ---- (clobber (reg:CC 17))] "reload_completed && (!TARGET_ZERO_EXTEND_WITH_AND || optimize_size) ! && (!REG_P (operands[1]) || ANY_QI_REG_P (operands[1]))" [(set (match_dup 0) (zero_extend:SI (match_dup 1)))]) *************** *** 3026,3033 **** (zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" ""))) (clobber (reg:CC 17))] "reload_completed ! && QI_REG_P (operands[0]) ! && (QI_REG_P (operands[1]) || GET_CODE (operands[1]) == MEM) && (TARGET_ZERO_EXTEND_WITH_AND && !optimize_size) && !reg_overlap_mentioned_p (operands[0], operands[1])" [(set (match_dup 0) (const_int 0)) --- 3640,3647 ---- (zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" ""))) (clobber (reg:CC 17))] "reload_completed ! && ANY_QI_REG_P (operands[0]) ! && (ANY_QI_REG_P (operands[1]) || GET_CODE (operands[1]) == MEM) && (TARGET_ZERO_EXTEND_WITH_AND && !optimize_size) && !reg_overlap_mentioned_p (operands[0], operands[1])" [(set (match_dup 0) (const_int 0)) *************** *** 3046,3064 **** "") ;; %%% Kill me once multi-word ops are sane. ! (define_insn "zero_extendsidi2" [(set (match_operand:DI 0 "nonimmediate_operand" "=r,?r,?*o") ! (zero_extend:DI (match_operand:SI 1 "general_operand" "0,rm,r"))) (clobber (reg:CC 17))] ! "" "#" [(set_attr "mode" "SI")]) (define_split [(set (match_operand:DI 0 "register_operand" "") (zero_extend:DI (match_operand:SI 1 "register_operand" ""))) (clobber (reg:CC 17))] ! "reload_completed && true_regnum (operands[0]) == true_regnum (operands[1])" [(set (match_dup 4) (const_int 0))] "split_di (&operands[0], 1, &operands[3], &operands[4]);") --- 3660,3707 ---- "") ;; %%% Kill me once multi-word ops are sane. ! (define_expand "zero_extendsidi2" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (zero_extend:DI (match_operand:SI 1 "nonimmediate_operand" "rm")))] ! "" ! "if (!TARGET_64BIT) ! { ! emit_insn (gen_zero_extendsidi2_32 (operands[0], operands[1])); ! DONE; ! } ! ") ! ! (define_insn "zero_extendsidi2_32" [(set (match_operand:DI 0 "nonimmediate_operand" "=r,?r,?*o") ! (zero_extend:DI (match_operand:SI 1 "nonimmediate_operand" "0,rm,r"))) (clobber (reg:CC 17))] ! "!TARGET_64BIT" "#" [(set_attr "mode" "SI")]) + (define_insn "zero_extendsidi2_rex64" + [(set (match_operand:DI 0 "nonimmediate_operand" "=r,o") + (zero_extend:DI (match_operand:SI 1 "nonimmediate_operand" "rm,0")))] + "TARGET_64BIT" + "@ + mov\t{%k1, %k0|%k0, %k1} + #" + [(set_attr "type" "imovx,imov") + (set_attr "mode" "SI,DI")]) + + (define_split + [(set (match_operand:DI 0 "memory_operand" "") + (zero_extend:DI (match_dup 0)))] + "TARGET_64BIT" + [(set (match_dup 4) (const_int 0))] + "split_di (&operands[0], 1, &operands[3], &operands[4]);") + (define_split [(set (match_operand:DI 0 "register_operand" "") (zero_extend:DI (match_operand:SI 1 "register_operand" ""))) (clobber (reg:CC 17))] ! "!TARGET_64BIT && reload_completed ! && true_regnum (operands[0]) == true_regnum (operands[1])" [(set (match_dup 4) (const_int 0))] "split_di (&operands[0], 1, &operands[3], &operands[4]);") *************** *** 3066,3086 **** [(set (match_operand:DI 0 "nonimmediate_operand" "") (zero_extend:DI (match_operand:SI 1 "general_operand" ""))) (clobber (reg:CC 17))] ! "reload_completed" [(set (match_dup 3) (match_dup 1)) (set (match_dup 4) (const_int 0))] "split_di (&operands[0], 1, &operands[3], &operands[4]);") ;; Sign extension instructions ! (define_insn "extendsidi2" [(set (match_operand:DI 0 "nonimmediate_operand" "=*A,r,?r,?*o") (sign_extend:DI (match_operand:SI 1 "register_operand" "0,0,r,r"))) (clobber (reg:CC 17)) (clobber (match_scratch:SI 2 "=X,X,X,&r"))] ! "" "#") ;; Extend to memory case when source register does die. (define_split [(set (match_operand:DI 0 "memory_operand" "") --- 3709,3791 ---- [(set (match_operand:DI 0 "nonimmediate_operand" "") (zero_extend:DI (match_operand:SI 1 "general_operand" ""))) (clobber (reg:CC 17))] ! "!TARGET_64BIT && reload_completed" [(set (match_dup 3) (match_dup 1)) (set (match_dup 4) (const_int 0))] "split_di (&operands[0], 1, &operands[3], &operands[4]);") + + (define_insn "zero_extendhidi2" + [(set (match_operand:DI 0 "register_operand" "=r,r") + (zero_extend:DI (match_operand:HI 1 "nonimmediate_operand" "r,m")))] + "TARGET_64BIT" + "@ + movz{wl|x}\t{%1, %k0|%k0, %1} + movz{wq|x}\t{%1, %0|%0, %1}" + [(set_attr "type" "imovx") + (set_attr "mode" "SI,DI")]) + + (define_insn "zero_extendqidi2" + [(set (match_operand:DI 0 "register_operand" "=r,r") + (zero_extend:DI (match_operand:QI 1 "nonimmediate_operand" "Q,m")))] + "TARGET_64BIT" + "@ + movz{bl|x}\t{%1, %k0|%k0, %1} + movz{bq|x}\t{%1, %0|%0, %1}" + [(set_attr "type" "imovx") + (set_attr "mode" "SI,DI")]) ;; Sign extension instructions ! (define_expand "extendsidi2" ! [(parallel [(set (match_operand:DI 0 "register_operand" "") ! (sign_extend:DI (match_operand:SI 1 "register_operand" ""))) ! (clobber (reg:CC 17)) ! (clobber (match_scratch:SI 2 ""))])] ! "" ! { ! if (TARGET_64BIT) ! { ! emit_insn (gen_extendsidi2_rex64 (operands[0], operands[1])); ! DONE; ! } ! }) ! ! (define_insn "*extendsidi2_1" [(set (match_operand:DI 0 "nonimmediate_operand" "=*A,r,?r,?*o") (sign_extend:DI (match_operand:SI 1 "register_operand" "0,0,r,r"))) (clobber (reg:CC 17)) (clobber (match_scratch:SI 2 "=X,X,X,&r"))] ! "!TARGET_64BIT" "#") + (define_insn "extendsidi2_rex64" + [(set (match_operand:DI 0 "register_operand" "=*a,r") + (sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" "*0,rm")))] + "TARGET_64BIT" + "@ + {cltq|cdqe} + movs{lq|x}\t{%1,%0|%0, %1}" + [(set_attr "type" "imovx") + (set_attr "mode" "DI") + (set_attr "prefix_0f" "0") + (set_attr "modrm" "0,1")]) + + (define_insn "extendhidi2" + [(set (match_operand:DI 0 "register_operand" "=r") + (sign_extend:DI (match_operand:HI 1 "nonimmediate_operand" "rm")))] + "TARGET_64BIT" + "movs{wq|x}\t{%1,%0|%0, %1}" + [(set_attr "type" "imovx") + (set_attr "mode" "DI")]) + + (define_insn "extendqidi2" + [(set (match_operand:DI 0 "register_operand" "=r") + (sign_extend:DI (match_operand:QI 1 "nonimmediate_operand" "qm")))] + "TARGET_64BIT" + "movs{bq|x}\t{%1,%0|%0, %1}" + [(set_attr "type" "imovx") + (set_attr "mode" "DI")]) + ;; Extend to memory case when source register does die. (define_split [(set (match_operand:DI 0 "memory_operand" "") *************** *** 3104,3110 **** (clobber (match_operand:SI 2 "register_operand" ""))] "reload_completed" [(const_int 0)] - " { split_di (&operands[0], 1, &operands[3], &operands[4]); --- 3809,3814 ---- *************** *** 3124,3130 **** } emit_move_insn (operands[4], operands[2]); DONE; ! }") ;; Extend to register case. Optimize case where source and destination ;; registers match and cases where we can use cltd. --- 3828,3834 ---- } emit_move_insn (operands[4], operands[2]); DONE; ! }) ;; Extend to register case. Optimize case where source and destination ;; registers match and cases where we can use cltd. *************** *** 3135,3141 **** (clobber (match_scratch:SI 2 ""))] "reload_completed" [(const_int 0)] - " { split_di (&operands[0], 1, &operands[3], &operands[4]); --- 3839,3844 ---- *************** *** 3155,3176 **** emit_insn (gen_ashrsi3_31 (operands[4], operands[4], GEN_INT (31))); DONE; ! }") (define_insn "extendhisi2" [(set (match_operand:SI 0 "register_operand" "=*a,r") (sign_extend:SI (match_operand:HI 1 "nonimmediate_operand" "*0,rm")))] "" - "* { switch (get_attr_prefix_0f (insn)) { case 0: ! return \"{cwtl|cwde}\"; default: ! return \"movs{wl|x}\\t{%1,%0|%0, %1}\"; } ! }" [(set_attr "type" "imovx") (set_attr "mode" "SI") (set (attr "prefix_0f") --- 3858,3905 ---- emit_insn (gen_ashrsi3_31 (operands[4], operands[4], GEN_INT (31))); DONE; ! }) (define_insn "extendhisi2" [(set (match_operand:SI 0 "register_operand" "=*a,r") (sign_extend:SI (match_operand:HI 1 "nonimmediate_operand" "*0,rm")))] "" { switch (get_attr_prefix_0f (insn)) { case 0: ! return "{cwtl|cwde}"; default: ! return "movs{wl|x}\t{%1,%0|%0, %1}"; } ! } ! [(set_attr "type" "imovx") ! (set_attr "mode" "SI") ! (set (attr "prefix_0f") ! ;; movsx is short decodable while cwtl is vector decoded. ! (if_then_else (and (eq_attr "cpu" "!k6") ! (eq_attr "alternative" "0")) ! (const_string "0") ! (const_string "1"))) ! (set (attr "modrm") ! (if_then_else (eq_attr "prefix_0f" "0") ! (const_string "0") ! (const_string "1")))]) ! ! (define_insn "*extendhisi2_zext" ! [(set (match_operand:DI 0 "register_operand" "=*a,r") ! (zero_extend:DI ! (sign_extend:SI (match_operand:HI 1 "nonimmediate_operand" "*0,rm"))))] ! "TARGET_64BIT" ! { ! switch (get_attr_prefix_0f (insn)) ! { ! case 0: ! return "{cwtl|cwde}"; ! default: ! return "movs{wl|x}\t{%1,%k0|%k0, %1}"; ! } ! } [(set_attr "type" "imovx") (set_attr "mode" "SI") (set (attr "prefix_0f") *************** *** 3188,3203 **** [(set (match_operand:HI 0 "register_operand" "=*a,r") (sign_extend:HI (match_operand:QI 1 "nonimmediate_operand" "*0,qm")))] "" - "* { switch (get_attr_prefix_0f (insn)) { case 0: ! return \"{cbtw|cbw}\"; default: ! return \"movs{bw|x}\\t{%1,%0|%0, %1}\"; } ! }" [(set_attr "type" "imovx") (set_attr "mode" "HI") (set (attr "prefix_0f") --- 3917,3931 ---- [(set (match_operand:HI 0 "register_operand" "=*a,r") (sign_extend:HI (match_operand:QI 1 "nonimmediate_operand" "*0,qm")))] "" { switch (get_attr_prefix_0f (insn)) { case 0: ! return "{cbtw|cbw}"; default: ! return "movs{bw|x}\t{%1,%0|%0, %1}"; } ! } [(set_attr "type" "imovx") (set_attr "mode" "HI") (set (attr "prefix_0f") *************** *** 3215,3221 **** [(set (match_operand:SI 0 "register_operand" "=r") (sign_extend:SI (match_operand:QI 1 "nonimmediate_operand" "qm")))] "" ! "movs{bl|x}\\t{%1,%0|%0, %1}" [(set_attr "type" "imovx") (set_attr "mode" "SI")]) --- 3943,3958 ---- [(set (match_operand:SI 0 "register_operand" "=r") (sign_extend:SI (match_operand:QI 1 "nonimmediate_operand" "qm")))] "" ! "movs{bl|x}\t{%1,%0|%0, %1}" ! [(set_attr "type" "imovx") ! (set_attr "mode" "SI")]) ! ! (define_insn "*extendqisi2_zext" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (zero_extend:DI ! (sign_extend:SI (match_operand:QI 1 "nonimmediate_operand" "qm"))))] ! "TARGET_64BIT" ! "movs{bl|x}\t{%1,%k0|%k0, %1}" [(set_attr "type" "imovx") (set_attr "mode" "SI")]) *************** *** 3227,3243 **** ;; %%% Kill these when call knows how to work out a DFmode push earlier. (define_insn "*dummy_extendsfdf2" [(set (match_operand:DF 0 "push_operand" "=<") ! (float_extend:DF (match_operand:SF 1 "nonimmediate_operand" "f")))] "0" "#") (define_split [(set (match_operand:DF 0 "push_operand" "") (float_extend:DF (match_operand:SF 1 "register_operand" "")))] ! "FP_REGNO_P (REGNO (operands[1]))" [(set (reg:SI 7) (plus:SI (reg:SI 7) (const_int -8))) (set (mem:DF (reg:SI 7)) (float_extend:DF (match_dup 1)))]) (define_insn "*dummy_extendsfxf2" [(set (match_operand:XF 0 "push_operand" "=<") (float_extend:XF (match_operand:SF 1 "nonimmediate_operand" "f")))] --- 3964,3987 ---- ;; %%% Kill these when call knows how to work out a DFmode push earlier. (define_insn "*dummy_extendsfdf2" [(set (match_operand:DF 0 "push_operand" "=<") ! (float_extend:DF (match_operand:SF 1 "nonimmediate_operand" "fY")))] "0" "#") (define_split [(set (match_operand:DF 0 "push_operand" "") (float_extend:DF (match_operand:SF 1 "register_operand" "")))] ! "!TARGET_64BIT && FP_REGNO_P (REGNO (operands[1]))" [(set (reg:SI 7) (plus:SI (reg:SI 7) (const_int -8))) (set (mem:DF (reg:SI 7)) (float_extend:DF (match_dup 1)))]) + (define_split + [(set (match_operand:DF 0 "push_operand" "") + (float_extend:DF (match_operand:SF 1 "register_operand" "")))] + "TARGET_64BIT && FP_REGNO_P (REGNO (operands[1]))" + [(set (reg:DI 7) (plus:DI (reg:DI 7) (const_int -8))) + (set (mem:DF (reg:DI 7)) (float_extend:DF (match_dup 1)))]) + (define_insn "*dummy_extendsfxf2" [(set (match_operand:XF 0 "push_operand" "=<") (float_extend:XF (match_operand:SF 1 "nonimmediate_operand" "f")))] *************** *** 3247,3253 **** (define_split [(set (match_operand:XF 0 "push_operand" "") (float_extend:XF (match_operand:SF 1 "register_operand" "")))] ! "FP_REGNO_P (REGNO (operands[1]))" [(set (reg:SI 7) (plus:SI (reg:SI 7) (const_int -12))) (set (mem:XF (reg:SI 7)) (float_extend:XF (match_dup 1)))]) --- 3991,3997 ---- (define_split [(set (match_operand:XF 0 "push_operand" "") (float_extend:XF (match_operand:SF 1 "register_operand" "")))] ! "!TARGET_64BIT && FP_REGNO_P (REGNO (operands[1]))" [(set (reg:SI 7) (plus:SI (reg:SI 7) (const_int -12))) (set (mem:XF (reg:SI 7)) (float_extend:XF (match_dup 1)))]) *************** *** 3260,3268 **** (define_split [(set (match_operand:TF 0 "push_operand" "") (float_extend:TF (match_operand:SF 1 "register_operand" "")))] ! "FP_REGNO_P (REGNO (operands[1]))" [(set (reg:SI 7) (plus:SI (reg:SI 7) (const_int -16))) ! (set (mem:TF (reg:SI 7)) (float_extend:XF (match_dup 1)))]) (define_insn "*dummy_extenddfxf2" [(set (match_operand:XF 0 "push_operand" "=<") --- 4004,4019 ---- (define_split [(set (match_operand:TF 0 "push_operand" "") (float_extend:TF (match_operand:SF 1 "register_operand" "")))] ! "!TARGET_64BIT && FP_REGNO_P (REGNO (operands[1]))" [(set (reg:SI 7) (plus:SI (reg:SI 7) (const_int -16))) ! (set (mem:TF (reg:SI 7)) (float_extend:TF (match_dup 1)))]) ! ! (define_split ! [(set (match_operand:TF 0 "push_operand" "") ! (float_extend:TF (match_operand:SF 1 "register_operand" "")))] ! "TARGET_64BIT && FP_REGNO_P (REGNO (operands[1]))" ! [(set (reg:DI 7) (plus:DI (reg:DI 7) (const_int -16))) ! (set (mem:DF (reg:DI 7)) (float_extend:TF (match_dup 1)))]) (define_insn "*dummy_extenddfxf2" [(set (match_operand:XF 0 "push_operand" "=<") *************** *** 3273,3281 **** (define_split [(set (match_operand:XF 0 "push_operand" "") (float_extend:XF (match_operand:DF 1 "register_operand" "")))] ! "FP_REGNO_P (REGNO (operands[1]))" [(set (reg:SI 7) (plus:SI (reg:SI 7) (const_int -12))) ! (set (mem:XF (reg:SI 7)) (float_extend:XF (match_dup 1)))]) (define_insn "*dummy_extenddftf2" [(set (match_operand:TF 0 "push_operand" "=<") --- 4024,4032 ---- (define_split [(set (match_operand:XF 0 "push_operand" "") (float_extend:XF (match_operand:DF 1 "register_operand" "")))] ! "!TARGET_64BIT && FP_REGNO_P (REGNO (operands[1]))" [(set (reg:SI 7) (plus:SI (reg:SI 7) (const_int -12))) ! (set (mem:DF (reg:SI 7)) (float_extend:XF (match_dup 1)))]) (define_insn "*dummy_extenddftf2" [(set (match_operand:TF 0 "push_operand" "=<") *************** *** 3286,3377 **** (define_split [(set (match_operand:TF 0 "push_operand" "") (float_extend:TF (match_operand:DF 1 "register_operand" "")))] ! "FP_REGNO_P (REGNO (operands[1]))" [(set (reg:SI 7) (plus:SI (reg:SI 7) (const_int -16))) (set (mem:TF (reg:SI 7)) (float_extend:XF (match_dup 1)))]) (define_expand "extendsfdf2" [(set (match_operand:DF 0 "nonimmediate_operand" "") (float_extend:DF (match_operand:SF 1 "nonimmediate_operand" "")))] ! "TARGET_80387" ! " { if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM) operands[1] = force_reg (SFmode, operands[1]); ! }") (define_insn "*extendsfdf2_1" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=f,m") ! (float_extend:DF (match_operand:SF 1 "nonimmediate_operand" "fm,f")))] ! "TARGET_80387 && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)" - "* { switch (which_alternative) { case 0: if (REG_P (operands[1]) && find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"fstp\\t%y0\"; else if (STACK_TOP_P (operands[0])) ! return \"fld%z1\\t%y1\"; else ! return \"fst\\t%y0\"; case 1: if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"fstp%z0\\t%y0\"; else ! return \"fst%z0\\t%y0\"; default: abort (); } ! }" ! [(set_attr "type" "fmov") ! (set_attr "mode" "SF,XF")]) (define_expand "extendsfxf2" [(set (match_operand:XF 0 "nonimmediate_operand" "") (float_extend:XF (match_operand:SF 1 "nonimmediate_operand" "")))] ! "TARGET_80387" ! " { if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM) operands[1] = force_reg (SFmode, operands[1]); ! }") (define_insn "*extendsfxf2_1" [(set (match_operand:XF 0 "nonimmediate_operand" "=f,m") (float_extend:XF (match_operand:SF 1 "nonimmediate_operand" "fm,f")))] ! "TARGET_80387 && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)" - "* { switch (which_alternative) { case 0: if (REG_P (operands[1]) && find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"fstp\\t%y0\"; else if (STACK_TOP_P (operands[0])) ! return \"fld%z1\\t%y1\"; else ! return \"fst\\t%y0\"; case 1: /* There is no non-popping store to memory for XFmode. So if we need one, follow the store with a load. */ if (! find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"fstp%z0\\t%y0\\n\\tfld%z0\\t%y0\"; else ! return \"fstp%z0\\t%y0\"; default: abort (); } ! }" [(set_attr "type" "fmov") (set_attr "mode" "SF,XF")]) --- 4037,4142 ---- (define_split [(set (match_operand:TF 0 "push_operand" "") (float_extend:TF (match_operand:DF 1 "register_operand" "")))] ! "!TARGET_64BIT && FP_REGNO_P (REGNO (operands[1]))" [(set (reg:SI 7) (plus:SI (reg:SI 7) (const_int -16))) (set (mem:TF (reg:SI 7)) (float_extend:XF (match_dup 1)))]) + (define_split + [(set (match_operand:TF 0 "push_operand" "") + (float_extend:TF (match_operand:DF 1 "register_operand" "")))] + "TARGET_64BIT && FP_REGNO_P (REGNO (operands[1]))" + [(set (reg:DI 7) (plus:DI (reg:DI 7) (const_int -16))) + (set (mem:TF (reg:DI 7)) (float_extend:TF (match_dup 1)))]) + (define_expand "extendsfdf2" [(set (match_operand:DF 0 "nonimmediate_operand" "") (float_extend:DF (match_operand:SF 1 "nonimmediate_operand" "")))] ! "TARGET_80387 || TARGET_SSE2" { if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM) operands[1] = force_reg (SFmode, operands[1]); ! }) (define_insn "*extendsfdf2_1" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=f#Y,mf#Y,Y#f") ! (float_extend:DF (match_operand:SF 1 "nonimmediate_operand" "fm#Y,f#Y,mY#f")))] ! "(TARGET_80387 || TARGET_SSE2) && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)" { switch (which_alternative) { case 0: if (REG_P (operands[1]) && find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "fstp\t%y0"; else if (STACK_TOP_P (operands[0])) ! return "fld%z1\t%y1"; else ! return "fst\t%y0"; case 1: if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "fstp%z0\t%y0"; else ! return "fst%z0\t%y0"; ! case 2: ! return "cvtss2sd\t{%1, %0|%0, %1}"; default: abort (); } ! } ! [(set_attr "type" "fmov,fmov,sse") ! (set_attr "mode" "SF,XF,DF")]) ! ! (define_insn "*extendsfdf2_1_sse_only" ! [(set (match_operand:DF 0 "register_operand" "=Y") ! (float_extend:DF (match_operand:SF 1 "nonimmediate_operand" "mY")))] ! "!TARGET_80387 && TARGET_SSE2 ! && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)" ! "cvtss2sd\t{%1, %0|%0, %1}" ! [(set_attr "type" "sse") ! (set_attr "mode" "DF")]) (define_expand "extendsfxf2" [(set (match_operand:XF 0 "nonimmediate_operand" "") (float_extend:XF (match_operand:SF 1 "nonimmediate_operand" "")))] ! "!TARGET_64BIT && TARGET_80387" { if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM) operands[1] = force_reg (SFmode, operands[1]); ! }) (define_insn "*extendsfxf2_1" [(set (match_operand:XF 0 "nonimmediate_operand" "=f,m") (float_extend:XF (match_operand:SF 1 "nonimmediate_operand" "fm,f")))] ! "!TARGET_64BIT && TARGET_80387 && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)" { switch (which_alternative) { case 0: if (REG_P (operands[1]) && find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "fstp\t%y0"; else if (STACK_TOP_P (operands[0])) ! return "fld%z1\t%y1"; else ! return "fst\t%y0"; case 1: /* There is no non-popping store to memory for XFmode. So if we need one, follow the store with a load. */ if (! find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "fstp%z0\t%y0\n\tfld%z0\t%y0"; else ! return "fstp%z0\t%y0"; default: abort (); } ! } [(set_attr "type" "fmov") (set_attr "mode" "SF,XF")]) *************** *** 3379,3463 **** [(set (match_operand:TF 0 "nonimmediate_operand" "") (float_extend:TF (match_operand:SF 1 "nonimmediate_operand" "")))] "TARGET_80387" - " { if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM) operands[1] = force_reg (SFmode, operands[1]); ! }") (define_insn "*extendsftf2_1" [(set (match_operand:TF 0 "nonimmediate_operand" "=f,m") (float_extend:TF (match_operand:SF 1 "nonimmediate_operand" "fm,f")))] "TARGET_80387 && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)" - "* { switch (which_alternative) { case 0: if (REG_P (operands[1]) && find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"fstp\\t%y0\"; else if (STACK_TOP_P (operands[0])) ! return \"fld%z1\\t%y1\"; else ! return \"fst\\t%y0\"; case 1: /* There is no non-popping store to memory for XFmode. So if we need one, follow the store with a load. */ if (! find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"fstp%z0\\t%y0\\n\\tfld%z0\\t%y0\"; else ! return \"fstp%z0\\t%y0\"; default: abort (); } ! }" [(set_attr "type" "fmov") (set_attr "mode" "SF,XF")]) (define_expand "extenddfxf2" [(set (match_operand:XF 0 "nonimmediate_operand" "") (float_extend:XF (match_operand:DF 1 "nonimmediate_operand" "")))] ! "TARGET_80387" ! " { if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM) operands[1] = force_reg (DFmode, operands[1]); ! }") (define_insn "*extenddfxf2_1" [(set (match_operand:XF 0 "nonimmediate_operand" "=f,m") (float_extend:XF (match_operand:DF 1 "nonimmediate_operand" "fm,f")))] ! "TARGET_80387 && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)" - "* { switch (which_alternative) { case 0: if (REG_P (operands[1]) && find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"fstp\\t%y0\"; else if (STACK_TOP_P (operands[0])) ! return \"fld%z1\\t%y1\"; else ! return \"fst\\t%y0\"; case 1: /* There is no non-popping store to memory for XFmode. So if we need one, follow the store with a load. */ if (! find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"fstp%z0\\t%y0\\n\\tfld%z0\\t%y0\"; else ! return \"fstp%z0\\t%y0\"; default: abort (); } ! }" [(set_attr "type" "fmov") (set_attr "mode" "DF,XF")]) --- 4144,4224 ---- [(set (match_operand:TF 0 "nonimmediate_operand" "") (float_extend:TF (match_operand:SF 1 "nonimmediate_operand" "")))] "TARGET_80387" { if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM) operands[1] = force_reg (SFmode, operands[1]); ! }) (define_insn "*extendsftf2_1" [(set (match_operand:TF 0 "nonimmediate_operand" "=f,m") (float_extend:TF (match_operand:SF 1 "nonimmediate_operand" "fm,f")))] "TARGET_80387 && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)" { switch (which_alternative) { case 0: if (REG_P (operands[1]) && find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "fstp\t%y0"; else if (STACK_TOP_P (operands[0])) ! return "fld%z1\t%y1"; else ! return "fst\t%y0"; case 1: /* There is no non-popping store to memory for XFmode. So if we need one, follow the store with a load. */ if (! find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "fstp%z0\t%y0\n\tfld%z0\t%y0"; else ! return "fstp%z0\t%y0"; default: abort (); } ! } [(set_attr "type" "fmov") (set_attr "mode" "SF,XF")]) (define_expand "extenddfxf2" [(set (match_operand:XF 0 "nonimmediate_operand" "") (float_extend:XF (match_operand:DF 1 "nonimmediate_operand" "")))] ! "!TARGET_64BIT && TARGET_80387" { if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM) operands[1] = force_reg (DFmode, operands[1]); ! }) (define_insn "*extenddfxf2_1" [(set (match_operand:XF 0 "nonimmediate_operand" "=f,m") (float_extend:XF (match_operand:DF 1 "nonimmediate_operand" "fm,f")))] ! "!TARGET_64BIT && TARGET_80387 && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)" { switch (which_alternative) { case 0: if (REG_P (operands[1]) && find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "fstp\t%y0"; else if (STACK_TOP_P (operands[0])) ! return "fld%z1\t%y1"; else ! return "fst\t%y0"; case 1: /* There is no non-popping store to memory for XFmode. So if we need one, follow the store with a load. */ if (! find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "fstp%z0\t%y0\n\tfld%z0\t%y0"; else ! return "fstp%z0\t%y0"; default: abort (); } ! } [(set_attr "type" "fmov") (set_attr "mode" "DF,XF")]) *************** *** 3465,3506 **** [(set (match_operand:TF 0 "nonimmediate_operand" "") (float_extend:TF (match_operand:DF 1 "nonimmediate_operand" "")))] "TARGET_80387" - " { if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM) operands[1] = force_reg (DFmode, operands[1]); ! }") (define_insn "*extenddftf2_1" [(set (match_operand:TF 0 "nonimmediate_operand" "=f,m") (float_extend:TF (match_operand:DF 1 "nonimmediate_operand" "fm,f")))] "TARGET_80387 && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)" - "* { switch (which_alternative) { case 0: if (REG_P (operands[1]) && find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"fstp\\t%y0\"; else if (STACK_TOP_P (operands[0])) ! return \"fld%z1\\t%y1\"; else ! return \"fst\\t%y0\"; case 1: /* There is no non-popping store to memory for XFmode. So if we need one, follow the store with a load. */ if (! find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"fstp%z0\\t%y0\\n\\tfld%z0\\t%y0\"; else ! return \"fstp%z0\\t%y0\"; default: abort (); } ! }" [(set_attr "type" "fmov") (set_attr "mode" "DF,XF")]) --- 4226,4265 ---- [(set (match_operand:TF 0 "nonimmediate_operand" "") (float_extend:TF (match_operand:DF 1 "nonimmediate_operand" "")))] "TARGET_80387" { if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM) operands[1] = force_reg (DFmode, operands[1]); ! }) (define_insn "*extenddftf2_1" [(set (match_operand:TF 0 "nonimmediate_operand" "=f,m") (float_extend:TF (match_operand:DF 1 "nonimmediate_operand" "fm,f")))] "TARGET_80387 && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)" { switch (which_alternative) { case 0: if (REG_P (operands[1]) && find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "fstp\t%y0"; else if (STACK_TOP_P (operands[0])) ! return "fld%z1\t%y1"; else ! return "fst\t%y0"; case 1: /* There is no non-popping store to memory for XFmode. So if we need one, follow the store with a load. */ if (! find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "fstp%z0\t%y0\n\tfld%z0\t%y0"; else ! return "fstp%z0\t%y0"; default: abort (); } ! } [(set_attr "type" "fmov") (set_attr "mode" "DF,XF")]) *************** *** 3515,3561 **** (float_truncate:SF (match_operand:DF 1 "register_operand" ""))) (clobber (match_dup 2))])] ! "TARGET_80387" ! "operands[2] = assign_386_stack_local (SFmode, 0);") (define_insn "*truncdfsf2_1" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=m,f") (float_truncate:SF ! (match_operand:DF 1 "register_operand" "f,0"))) ! (clobber (match_operand:SF 2 "memory_operand" "=m,m"))] ! "TARGET_80387" ! "* { switch (which_alternative) { case 0: if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"fstp%z0\\t%y0\"; else ! return \"fst%z0\\t%y0\"; ! case 1: ! return \"fstp%z2\\t%y2\;fld%z2\\t%y2\"; } ! abort (); ! }" ! [(set_attr "type" "fmov,multi") ! (set_attr "mode" "SF")]) (define_insn "*truncdfsf2_2" [(set (match_operand:SF 0 "memory_operand" "=m") (float_truncate:SF (match_operand:DF 1 "register_operand" "f")))] "TARGET_80387" - "* { if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"fstp%z0\\t%y0\"; else ! return \"fst%z0\\t%y0\"; ! }" [(set_attr "type" "fmov") (set_attr "mode" "SF")]) (define_split [(set (match_operand:SF 0 "memory_operand" "") (float_truncate:SF --- 4274,4380 ---- (float_truncate:SF (match_operand:DF 1 "register_operand" ""))) (clobber (match_dup 2))])] ! "TARGET_80387 || TARGET_SSE2" ! " ! if (TARGET_80387) ! operands[2] = assign_386_stack_local (SFmode, 0); ! else ! { ! emit_insn (gen_truncdfsf2_sse_only (operands[0], operands[1])); ! DONE; ! } ! ") (define_insn "*truncdfsf2_1" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=m,?f#rx,?r#fx,?x#rf") (float_truncate:SF ! (match_operand:DF 1 "register_operand" "f,f,f,f"))) ! (clobber (match_operand:SF 2 "memory_operand" "=X,m,m,m"))] ! "TARGET_80387 && !TARGET_SSE2" { switch (which_alternative) { case 0: if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "fstp%z0\t%y0"; else ! return "fst%z0\t%y0"; ! default: ! abort (); } ! } ! [(set_attr "type" "fmov,multi,multi,multi") ! (set_attr "mode" "SF,SF,SF,SF")]) ! ! (define_insn "*truncdfsf2_1_sse" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=*!m,?f#rx,?r#fx,?x#rf,Y") ! (float_truncate:SF ! (match_operand:DF 1 "nonimmediate_operand" "f,f,f,f,mY"))) ! (clobber (match_operand:SF 2 "memory_operand" "=X,m,m,m,X"))] ! "TARGET_80387 && TARGET_SSE2" ! { ! switch (which_alternative) ! { ! case 0: ! if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "fstp%z0\t%y0"; ! else ! return "fst%z0\t%y0"; ! case 4: ! return "cvtsd2ss\t{%1, %0|%0, %1}"; ! default: ! abort (); ! } ! } ! [(set_attr "type" "fmov,multi,multi,multi,sse") ! (set_attr "mode" "SF,SF,SF,SF,DF")]) (define_insn "*truncdfsf2_2" + [(set (match_operand:SF 0 "nonimmediate_operand" "=Y,!m") + (float_truncate:SF + (match_operand:DF 1 "nonimmediate_operand" "mY,f")))] + "TARGET_80387 && TARGET_SSE2 + && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)" + { + switch (which_alternative) + { + case 0: + return "cvtsd2ss\t{%1, %0|%0, %1}"; + case 1: + if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) + return "fstp%z0\t%y0"; + else + return "fst%z0\t%y0"; + default: + abort (); + } + } + [(set_attr "type" "sse,fmov") + (set_attr "mode" "DF,SF")]) + + (define_insn "truncdfsf2_3" [(set (match_operand:SF 0 "memory_operand" "=m") (float_truncate:SF (match_operand:DF 1 "register_operand" "f")))] "TARGET_80387" { if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "fstp%z0\t%y0"; else ! return "fst%z0\t%y0"; ! } [(set_attr "type" "fmov") (set_attr "mode" "SF")]) + (define_insn "truncdfsf2_sse_only" + [(set (match_operand:SF 0 "register_operand" "=Y") + (float_truncate:SF + (match_operand:DF 1 "nonimmediate_operand" "mY")))] + "!TARGET_80387 && TARGET_SSE2" + "cvtsd2ss\t{%1, %0|%0, %1}" + [(set_attr "type" "sse") + (set_attr "mode" "DF")]) + (define_split [(set (match_operand:SF 0 "memory_operand" "") (float_truncate:SF *************** *** 3566,3576 **** "") (define_split [(set (match_operand:SF 0 "register_operand" "") (float_truncate:SF (match_operand:DF 1 "register_operand" ""))) (clobber (match_operand:SF 2 "memory_operand" ""))] ! "TARGET_80387 && reload_completed" [(set (match_dup 2) (float_truncate:SF (match_dup 1))) (set (match_dup 0) (match_dup 2))] "") --- 4385,4406 ---- "") (define_split + [(set (match_operand:SF 0 "nonimmediate_operand" "") + (float_truncate:SF + (match_operand:DF 1 "nonimmediate_operand" ""))) + (clobber (match_operand 2 "" ""))] + "TARGET_80387 && reload_completed + && !FP_REG_P (operands[0]) && !FP_REG_P (operands[1])" + [(set (match_dup 0) (float_truncate:SF (match_dup 1)))] + "") + + (define_split [(set (match_operand:SF 0 "register_operand" "") (float_truncate:SF (match_operand:DF 1 "register_operand" ""))) (clobber (match_operand:SF 2 "memory_operand" ""))] ! "TARGET_80387 && reload_completed ! && FP_REG_P (operands[1])" [(set (match_dup 2) (float_truncate:SF (match_dup 1))) (set (match_dup 0) (match_dup 2))] "") *************** *** 3580,3623 **** (float_truncate:SF (match_operand:XF 1 "register_operand" ""))) (clobber (match_dup 2))])] ! "TARGET_80387" "operands[2] = assign_386_stack_local (SFmode, 0);") (define_insn "*truncxfsf2_1" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=m,f") (float_truncate:SF ! (match_operand:XF 1 "register_operand" "f,0"))) ! (clobber (match_operand:SF 2 "memory_operand" "=m,m"))] ! "TARGET_80387" ! "* { switch (which_alternative) { case 0: if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"fstp%z0\\t%y0\"; else ! return \"fst%z0\\t%y0\"; ! case 1: ! return \"fstp%z2\\t%y2\;fld%z2\\t%y2\"; } ! abort (); ! }" ! [(set_attr "type" "fmov,multi") (set_attr "mode" "SF")]) (define_insn "*truncxfsf2_2" [(set (match_operand:SF 0 "memory_operand" "=m") (float_truncate:SF (match_operand:XF 1 "register_operand" "f")))] ! "TARGET_80387" ! "* { if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"fstp%z0\\t%y0\"; else ! return \"fst%z0\\t%y0\"; ! }" [(set_attr "type" "fmov") (set_attr "mode" "SF")]) --- 4410,4450 ---- (float_truncate:SF (match_operand:XF 1 "register_operand" ""))) (clobber (match_dup 2))])] ! "!TARGET_64BIT && TARGET_80387" "operands[2] = assign_386_stack_local (SFmode, 0);") (define_insn "*truncxfsf2_1" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=m,?f#rx,?r#fx,?x#rf") (float_truncate:SF ! (match_operand:XF 1 "register_operand" "f,f,f,f"))) ! (clobber (match_operand:SF 2 "memory_operand" "=X,m,m,m"))] ! "!TARGET_64BIT && TARGET_80387" { switch (which_alternative) { case 0: if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "fstp%z0\t%y0"; else ! return "fst%z0\t%y0"; ! default: ! abort(); } ! } ! [(set_attr "type" "fmov,multi,multi,multi") (set_attr "mode" "SF")]) (define_insn "*truncxfsf2_2" [(set (match_operand:SF 0 "memory_operand" "=m") (float_truncate:SF (match_operand:XF 1 "register_operand" "f")))] ! "!TARGET_64BIT && TARGET_80387" { if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "fstp%z0\t%y0"; else ! return "fst%z0\t%y0"; ! } [(set_attr "type" "fmov") (set_attr "mode" "SF")]) *************** *** 3649,3688 **** "operands[2] = assign_386_stack_local (SFmode, 0);") (define_insn "*trunctfsf2_1" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=m,f") (float_truncate:SF ! (match_operand:TF 1 "register_operand" "f,0"))) ! (clobber (match_operand:SF 2 "memory_operand" "=m,m"))] "TARGET_80387" - "* { switch (which_alternative) { case 0: if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"fstp%z0\\t%y0\"; else ! return \"fst%z0\\t%y0\"; ! case 1: ! return \"fstp%z2\\t%y2\;fld%z2\\t%y2\"; } ! abort (); ! }" ! [(set_attr "type" "fmov,multi") (set_attr "mode" "SF")]) ! (define_insn "*truncxfsf2_2" [(set (match_operand:SF 0 "memory_operand" "=m") (float_truncate:SF (match_operand:TF 1 "register_operand" "f")))] "TARGET_80387" - "* { if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"fstp%z0\\t%y0\"; else ! return \"fst%z0\\t%y0\"; ! }" [(set_attr "type" "fmov") (set_attr "mode" "SF")]) --- 4476,4512 ---- "operands[2] = assign_386_stack_local (SFmode, 0);") (define_insn "*trunctfsf2_1" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=m,?f#rx,?r#fx,?x#rf") (float_truncate:SF ! (match_operand:TF 1 "register_operand" "f,f,f,f"))) ! (clobber (match_operand:SF 2 "memory_operand" "=X,m,m,m"))] "TARGET_80387" { switch (which_alternative) { case 0: if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "fstp%z0\t%y0"; else ! return "fst%z0\t%y0"; ! default: ! abort(); } ! } ! [(set_attr "type" "fmov,multi,multi,multi") (set_attr "mode" "SF")]) ! (define_insn "*trunctfsf2_2" [(set (match_operand:SF 0 "memory_operand" "=m") (float_truncate:SF (match_operand:TF 1 "register_operand" "f")))] "TARGET_80387" { if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "fstp%z0\t%y0"; else ! return "fst%z0\t%y0"; ! } [(set_attr "type" "fmov") (set_attr "mode" "SF")]) *************** *** 3711,3754 **** (float_truncate:DF (match_operand:XF 1 "register_operand" ""))) (clobber (match_dup 2))])] ! "TARGET_80387" "operands[2] = assign_386_stack_local (DFmode, 0);") (define_insn "*truncxfdf2_1" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=m,f") (float_truncate:DF ! (match_operand:XF 1 "register_operand" "f,0"))) ! (clobber (match_operand:DF 2 "memory_operand" "=m,m"))] ! "TARGET_80387" ! "* { switch (which_alternative) { case 0: if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"fstp%z0\\t%y0\"; else ! return \"fst%z0\\t%y0\"; ! case 1: ! return \"fstp%z2\\t%y2\;fld%z2\\t%y2\"; } abort (); ! }" ! [(set_attr "type" "fmov,multi") (set_attr "mode" "DF")]) (define_insn "*truncxfdf2_2" [(set (match_operand:DF 0 "memory_operand" "=m") (float_truncate:DF (match_operand:XF 1 "register_operand" "f")))] ! "TARGET_80387" ! "* { if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"fstp%z0\\t%y0\"; else ! return \"fst%z0\\t%y0\"; ! }" [(set_attr "type" "fmov") (set_attr "mode" "DF")]) --- 4535,4576 ---- (float_truncate:DF (match_operand:XF 1 "register_operand" ""))) (clobber (match_dup 2))])] ! "!TARGET_64BIT && TARGET_80387" "operands[2] = assign_386_stack_local (DFmode, 0);") (define_insn "*truncxfdf2_1" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=m,?f#rY,?r#fY,?Y#rf") (float_truncate:DF ! (match_operand:XF 1 "register_operand" "f,f,f,f"))) ! (clobber (match_operand:DF 2 "memory_operand" "=X,m,m,m"))] ! "!TARGET_64BIT && TARGET_80387" { switch (which_alternative) { case 0: if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "fstp%z0\t%y0"; else ! return "fst%z0\t%y0"; ! default: ! abort(); } abort (); ! } ! [(set_attr "type" "fmov,multi,multi,multi") (set_attr "mode" "DF")]) (define_insn "*truncxfdf2_2" [(set (match_operand:DF 0 "memory_operand" "=m") (float_truncate:DF (match_operand:XF 1 "register_operand" "f")))] ! "!TARGET_64BIT && TARGET_80387" { if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "fstp%z0\t%y0"; else ! return "fst%z0\t%y0"; ! } [(set_attr "type" "fmov") (set_attr "mode" "DF")]) *************** *** 3780,3819 **** "operands[2] = assign_386_stack_local (DFmode, 0);") (define_insn "*trunctfdf2_1" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=m,f") (float_truncate:DF ! (match_operand:TF 1 "register_operand" "f,0"))) ! (clobber (match_operand:DF 2 "memory_operand" "=m,m"))] "TARGET_80387" - "* { switch (which_alternative) { case 0: if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"fstp%z0\\t%y0\"; else ! return \"fst%z0\\t%y0\"; ! case 1: ! return \"fstp%z2\\t%y2\;fld%z2\\t%y2\"; } abort (); ! }" ! [(set_attr "type" "fmov,multi") (set_attr "mode" "DF")]) ! (define_insn "*truncxfdf2_2" [(set (match_operand:DF 0 "memory_operand" "=m") (float_truncate:DF (match_operand:TF 1 "register_operand" "f")))] "TARGET_80387" - "* { if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return \"fstp%z0\\t%y0\"; else ! return \"fst%z0\\t%y0\"; ! }" [(set_attr "type" "fmov") (set_attr "mode" "DF")]) --- 4602,4639 ---- "operands[2] = assign_386_stack_local (DFmode, 0);") (define_insn "*trunctfdf2_1" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=m,?f#rY,?r#fY,?Y#rf") (float_truncate:DF ! (match_operand:TF 1 "register_operand" "f,f,f,f"))) ! (clobber (match_operand:DF 2 "memory_operand" "=X,m,m,m"))] "TARGET_80387" { switch (which_alternative) { case 0: if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "fstp%z0\t%y0"; else ! return "fst%z0\t%y0"; ! default: ! abort(); } abort (); ! } ! [(set_attr "type" "fmov,multi,multi,multi") (set_attr "mode" "DF")]) ! (define_insn "*trunctfdf2_2" [(set (match_operand:DF 0 "memory_operand" "=m") (float_truncate:DF (match_operand:TF 1 "register_operand" "f")))] "TARGET_80387" { if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) ! return "fstp%z0\t%y0"; else ! return "fst%z0\t%y0"; ! } [(set_attr "type" "fmov") (set_attr "mode" "DF")]) *************** *** 3842,4047 **** ;; Signed conversion to DImode. (define_expand "fix_truncxfdi2" ! [(parallel [(set (match_operand:DI 0 "nonimmediate_operand" "") ! (fix:DI (match_operand:XF 1 "register_operand" ""))) ! (clobber (match_dup 2)) ! (clobber (match_dup 3)) ! (clobber (match_scratch:SI 4 "")) ! (clobber (match_scratch:XF 5 ""))])] ! "TARGET_80387" ! "operands[2] = assign_386_stack_local (SImode, 0); ! operands[3] = assign_386_stack_local (DImode, 1);") (define_expand "fix_trunctfdi2" ! [(parallel [(set (match_operand:DI 0 "nonimmediate_operand" "") ! (fix:DI (match_operand:TF 1 "register_operand" ""))) ! (clobber (match_dup 2)) ! (clobber (match_dup 3)) ! (clobber (match_scratch:SI 4 "")) ! (clobber (match_scratch:TF 5 ""))])] "TARGET_80387" ! "operands[2] = assign_386_stack_local (SImode, 0); ! operands[3] = assign_386_stack_local (DImode, 1);") (define_expand "fix_truncdfdi2" ! [(parallel [(set (match_operand:DI 0 "nonimmediate_operand" "") ! (fix:DI (match_operand:DF 1 "register_operand" ""))) ! (clobber (match_dup 2)) ! (clobber (match_dup 3)) ! (clobber (match_scratch:SI 4 "")) ! (clobber (match_scratch:DF 5 ""))])] ! "TARGET_80387" ! "operands[2] = assign_386_stack_local (SImode, 0); ! operands[3] = assign_386_stack_local (DImode, 1);") (define_expand "fix_truncsfdi2" ! [(parallel [(set (match_operand:DI 0 "nonimmediate_operand" "") ! (fix:DI (match_operand:SF 1 "register_operand" ""))) ! (clobber (match_dup 2)) ! (clobber (match_dup 3)) ! (clobber (match_scratch:SI 4 "")) ! (clobber (match_scratch:SF 5 ""))])] ! "TARGET_80387" ! "operands[2] = assign_386_stack_local (SImode, 0); ! operands[3] = assign_386_stack_local (DImode, 1);") ! (define_insn "*fix_truncdi_1" [(set (match_operand:DI 0 "nonimmediate_operand" "=m,?r") (fix:DI (match_operand 1 "register_operand" "f,f"))) ! (clobber (match_operand:SI 2 "memory_operand" "=o,o")) ! (clobber (match_operand:DI 3 "memory_operand" "=m,m")) ! (clobber (match_scratch:SI 4 "=&r,&r")) ! (clobber (match_scratch 5 "=&f,&f"))] ! "TARGET_80387 && FLOAT_MODE_P (GET_MODE (operands[1]))" ! "* return output_fix_trunc (insn, operands);" ! [(set_attr "type" "multi")]) (define_split [(set (match_operand:DI 0 "register_operand" "") (fix:DI (match_operand 1 "register_operand" ""))) ! (clobber (match_operand:SI 2 "memory_operand" "")) ! (clobber (match_operand:DI 3 "memory_operand" "")) ! (clobber (match_scratch:SI 4 "")) (clobber (match_scratch 5 ""))] ! "reload_completed && !reg_overlap_mentioned_p (operands[4], operands[3])" ! [(parallel [(set (match_dup 3) (fix:DI (match_dup 1))) ! (clobber (match_dup 2)) ! (clobber (match_dup 3)) ! (clobber (match_dup 4)) (clobber (match_dup 5))]) ! (set (match_dup 0) (match_dup 3))] "") ;; Signed conversion to SImode. (define_expand "fix_truncxfsi2" ! [(parallel [(set (match_operand:SI 0 "nonimmediate_operand" "") ! (fix:SI (match_operand:XF 1 "register_operand" ""))) ! (clobber (match_dup 2)) ! (clobber (match_dup 3)) ! (clobber (match_scratch:SI 4 ""))])] ! "TARGET_80387" ! "operands[2] = assign_386_stack_local (SImode, 0); ! operands[3] = assign_386_stack_local (SImode, 1);") (define_expand "fix_trunctfsi2" ! [(parallel [(set (match_operand:SI 0 "nonimmediate_operand" "") ! (fix:SI (match_operand:TF 1 "register_operand" ""))) ! (clobber (match_dup 2)) ! (clobber (match_dup 3)) ! (clobber (match_scratch:SI 4 ""))])] "TARGET_80387" ! "operands[2] = assign_386_stack_local (SImode, 0); ! operands[3] = assign_386_stack_local (SImode, 1);") (define_expand "fix_truncdfsi2" ! [(parallel [(set (match_operand:SI 0 "nonimmediate_operand" "") ! (fix:SI (match_operand:DF 1 "register_operand" ""))) ! (clobber (match_dup 2)) ! (clobber (match_dup 3)) ! (clobber (match_scratch:SI 4 ""))])] ! "TARGET_80387" ! "operands[2] = assign_386_stack_local (SImode, 0); ! operands[3] = assign_386_stack_local (SImode, 1);") (define_expand "fix_truncsfsi2" ! [(parallel [(set (match_operand:SI 0 "nonimmediate_operand" "") ! (fix:SI (match_operand:SF 1 "register_operand" ""))) ! (clobber (match_dup 2)) ! (clobber (match_dup 3)) ! (clobber (match_scratch:SI 4 ""))])] ! "TARGET_80387" ! "operands[2] = assign_386_stack_local (SImode, 0); ! operands[3] = assign_386_stack_local (SImode, 1);") ! (define_insn "*fix_truncsi_1" [(set (match_operand:SI 0 "nonimmediate_operand" "=m,?r") (fix:SI (match_operand 1 "register_operand" "f,f"))) ! (clobber (match_operand:SI 2 "memory_operand" "=o,o")) ! (clobber (match_operand:SI 3 "memory_operand" "=m,m")) ! (clobber (match_scratch:SI 4 "=&r,r"))] ! "TARGET_80387 && FLOAT_MODE_P (GET_MODE (operands[1]))" "* return output_fix_trunc (insn, operands);" ! [(set_attr "type" "multi")]) (define_split [(set (match_operand:SI 0 "register_operand" "") (fix:SI (match_operand 1 "register_operand" ""))) ! (clobber (match_operand:SI 2 "memory_operand" "")) ! (clobber (match_operand:SI 3 "memory_operand" "")) ! (clobber (match_scratch:SI 4 ""))] "reload_completed" ! [(parallel [(set (match_dup 3) (fix:SI (match_dup 1))) ! (clobber (match_dup 2)) ! (clobber (match_dup 3)) ! (clobber (match_dup 4))]) ! (set (match_dup 0) (match_dup 3))] "") ;; Signed conversion to HImode. (define_expand "fix_truncxfhi2" ! [(parallel [(set (match_operand:HI 0 "nonimmediate_operand" "") ! (fix:HI (match_operand:XF 1 "register_operand" ""))) ! (clobber (match_dup 2)) ! (clobber (match_dup 3)) ! (clobber (match_scratch:SI 4 ""))])] ! "TARGET_80387" ! "operands[2] = assign_386_stack_local (SImode, 0); ! operands[3] = assign_386_stack_local (HImode, 1);") (define_expand "fix_trunctfhi2" ! [(parallel [(set (match_operand:HI 0 "nonimmediate_operand" "") ! (fix:HI (match_operand:TF 1 "register_operand" ""))) ! (clobber (match_dup 2)) ! (clobber (match_dup 3)) ! (clobber (match_scratch:SI 4 ""))])] "TARGET_80387" ! "operands[2] = assign_386_stack_local (SImode, 0); ! operands[3] = assign_386_stack_local (HImode, 1);") (define_expand "fix_truncdfhi2" ! [(parallel [(set (match_operand:HI 0 "nonimmediate_operand" "") ! (fix:HI (match_operand:DF 1 "register_operand" ""))) ! (clobber (match_dup 2)) ! (clobber (match_dup 3)) ! (clobber (match_scratch:SI 4 ""))])] ! "TARGET_80387" ! "operands[2] = assign_386_stack_local (SImode, 0); ! operands[3] = assign_386_stack_local (HImode, 1);") (define_expand "fix_truncsfhi2" ! [(parallel [(set (match_operand:HI 0 "nonimmediate_operand" "") ! (fix:HI (match_operand:SF 1 "register_operand" ""))) ! (clobber (match_dup 2)) ! (clobber (match_dup 3)) ! (clobber (match_scratch:SI 4 ""))])] ! "TARGET_80387" ! "operands[2] = assign_386_stack_local (SImode, 0); ! operands[3] = assign_386_stack_local (HImode, 1);") ! (define_insn "*fix_trunchi_1" [(set (match_operand:HI 0 "nonimmediate_operand" "=m,?r") (fix:HI (match_operand 1 "register_operand" "f,f"))) ! (clobber (match_operand:SI 2 "memory_operand" "=o,o")) ! (clobber (match_operand:HI 3 "memory_operand" "=m,m")) ! (clobber (match_scratch:SI 4 "=&r,r"))] ! "TARGET_80387 && FLOAT_MODE_P (GET_MODE (operands[1]))" "* return output_fix_trunc (insn, operands);" ! [(set_attr "type" "multi")]) (define_split [(set (match_operand:HI 0 "register_operand" "") (fix:HI (match_operand 1 "register_operand" ""))) ! (clobber (match_operand:SI 2 "memory_operand" "")) ! (clobber (match_operand:HI 3 "memory_operand" "")) ! (clobber (match_scratch:SI 4 ""))] "reload_completed" ! [(parallel [(set (match_dup 3) (fix:HI (match_dup 1))) ! (clobber (match_dup 2)) ! (clobber (match_dup 3)) (clobber (match_dup 4))]) ! (set (match_dup 0) (match_dup 3))] "") ;; %% Not used yet. --- 4662,5035 ---- ;; Signed conversion to DImode. (define_expand "fix_truncxfdi2" ! [(set (match_operand:DI 0 "nonimmediate_operand" "") ! (fix:DI (match_operand:XF 1 "register_operand" "")))] ! "!TARGET_64BIT && TARGET_80387" ! "") (define_expand "fix_trunctfdi2" ! [(set (match_operand:DI 0 "nonimmediate_operand" "") ! (fix:DI (match_operand:TF 1 "register_operand" "")))] "TARGET_80387" ! "") (define_expand "fix_truncdfdi2" ! [(set (match_operand:DI 0 "nonimmediate_operand" "") ! (fix:DI (match_operand:DF 1 "register_operand" "")))] ! "TARGET_80387 || (TARGET_SSE2 && TARGET_64BIT)" ! { ! if (TARGET_64BIT && TARGET_SSE2) ! { ! rtx out = REG_P (operands[0]) ? operands[0] : gen_reg_rtx (DImode); ! emit_insn (gen_fix_truncdfdi_sse (out, operands[1])); ! if (out != operands[0]) ! emit_move_insn (operands[0], out); ! DONE; ! } ! }) (define_expand "fix_truncsfdi2" ! [(set (match_operand:DI 0 "nonimmediate_operand" "") ! (fix:DI (match_operand:SF 1 "register_operand" "")))] ! "TARGET_80387 || (TARGET_SSE && TARGET_64BIT)" ! { ! if (TARGET_SSE && TARGET_64BIT) ! { ! rtx out = REG_P (operands[0]) ? operands[0] : gen_reg_rtx (DImode); ! emit_insn (gen_fix_truncsfdi_sse (out, operands[1])); ! if (out != operands[0]) ! emit_move_insn (operands[0], out); ! DONE; ! } ! }) ! ;; See the comments in i386.h near OPTIMIZE_MODE_SWITCHING for the description ! ;; of the machinery. ! (define_insn_and_split "*fix_truncdi_1" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=m,?r") ! (fix:DI (match_operand 1 "register_operand" "f,f")))] ! "TARGET_80387 && FLOAT_MODE_P (GET_MODE (operands[1])) ! && !reload_completed && !reload_in_progress ! && (!SSE_FLOAT_MODE_P (GET_MODE (operands[1])) || !TARGET_64BIT)" ! "#" ! "&& 1" ! [(const_int 0)] ! { ! operands[2] = assign_386_stack_local (HImode, 1); ! operands[3] = assign_386_stack_local (HImode, 2); ! if (memory_operand (operands[0], VOIDmode)) ! emit_insn (gen_fix_truncdi_memory (operands[0], operands[1], ! operands[2], operands[3])); ! else ! { ! operands[4] = assign_386_stack_local (DImode, 0); ! emit_insn (gen_fix_truncdi_nomemory (operands[0], operands[1], ! operands[2], operands[3], ! operands[4])); ! } ! DONE; ! } ! [(set_attr "type" "fistp")]) ! ! (define_insn "fix_truncdi_nomemory" [(set (match_operand:DI 0 "nonimmediate_operand" "=m,?r") (fix:DI (match_operand 1 "register_operand" "f,f"))) ! (use (match_operand:HI 2 "memory_operand" "m,m")) ! (use (match_operand:HI 3 "memory_operand" "m,m")) ! (clobber (match_operand:DI 4 "memory_operand" "=m,m")) ! (clobber (match_scratch:DF 5 "=&1f,&1f"))] ! "TARGET_80387 && FLOAT_MODE_P (GET_MODE (operands[1])) ! && (!SSE_FLOAT_MODE_P (GET_MODE (operands[1])) || !TARGET_64BIT)" ! "#" ! [(set_attr "type" "fistp")]) ! ! (define_insn "fix_truncdi_memory" ! [(set (match_operand:DI 0 "memory_operand" "=m") ! (fix:DI (match_operand 1 "register_operand" "f"))) ! (use (match_operand:HI 2 "memory_operand" "m")) ! (use (match_operand:HI 3 "memory_operand" "m")) ! (clobber (match_scratch:DF 4 "=&1f"))] ! "TARGET_80387 && FLOAT_MODE_P (GET_MODE (operands[1])) ! && (!SSE_FLOAT_MODE_P (GET_MODE (operands[1])) || !TARGET_64BIT)" ! "* operands[5] = operands[4]; return output_fix_trunc (insn, operands);" ! [(set_attr "type" "fistp")]) (define_split [(set (match_operand:DI 0 "register_operand" "") (fix:DI (match_operand 1 "register_operand" ""))) ! (use (match_operand:HI 2 "memory_operand" "")) ! (use (match_operand:HI 3 "memory_operand" "")) ! (clobber (match_operand:DI 4 "memory_operand" "")) (clobber (match_scratch 5 ""))] ! "reload_completed" ! [(parallel [(set (match_dup 4) (fix:DI (match_dup 1))) ! (use (match_dup 2)) ! (use (match_dup 3)) (clobber (match_dup 5))]) ! (set (match_dup 0) (match_dup 4))] ! "") ! ! (define_split ! [(set (match_operand:DI 0 "memory_operand" "") ! (fix:DI (match_operand 1 "register_operand" ""))) ! (use (match_operand:HI 2 "memory_operand" "")) ! (use (match_operand:HI 3 "memory_operand" "")) ! (clobber (match_operand:DI 4 "memory_operand" "")) ! (clobber (match_scratch 5 ""))] ! "reload_completed" ! [(parallel [(set (match_dup 0) (fix:DI (match_dup 1))) ! (use (match_dup 2)) ! (use (match_dup 3)) ! (clobber (match_dup 5))])] "") + ;; When SSE available, it is always faster to use it! + (define_insn "fix_truncsfdi_sse" + [(set (match_operand:DI 0 "register_operand" "=r") + (fix:DI (match_operand:SF 1 "nonimmediate_operand" "xm")))] + "TARGET_64BIT && TARGET_SSE" + "cvttss2si{q}\t{%1, %0|%0, %1}" + [(set_attr "type" "sse")]) + + (define_insn "fix_truncdfdi_sse" + [(set (match_operand:DI 0 "register_operand" "=r") + (fix:DI (match_operand:DF 1 "nonimmediate_operand" "Ym")))] + "TARGET_64BIT && TARGET_SSE2" + "cvttsd2si{q}\t{%1, %0|%0, %1}" + [(set_attr "type" "sse")]) + ;; Signed conversion to SImode. (define_expand "fix_truncxfsi2" ! [(set (match_operand:SI 0 "nonimmediate_operand" "") ! (fix:SI (match_operand:XF 1 "register_operand" "")))] ! "!TARGET_64BIT && TARGET_80387" ! "") (define_expand "fix_trunctfsi2" ! [(set (match_operand:SI 0 "nonimmediate_operand" "") ! (fix:SI (match_operand:TF 1 "register_operand" "")))] "TARGET_80387" ! "") (define_expand "fix_truncdfsi2" ! [(set (match_operand:SI 0 "nonimmediate_operand" "") ! (fix:SI (match_operand:DF 1 "register_operand" "")))] ! "TARGET_80387 || TARGET_SSE2" ! { ! if (TARGET_SSE2) ! { ! rtx out = REG_P (operands[0]) ? operands[0] : gen_reg_rtx (SImode); ! emit_insn (gen_fix_truncdfsi_sse (out, operands[1])); ! if (out != operands[0]) ! emit_move_insn (operands[0], out); ! DONE; ! } ! }) (define_expand "fix_truncsfsi2" ! [(set (match_operand:SI 0 "nonimmediate_operand" "") ! (fix:SI (match_operand:SF 1 "register_operand" "")))] ! "TARGET_80387 || TARGET_SSE" ! { ! if (TARGET_SSE) ! { ! rtx out = REG_P (operands[0]) ? operands[0] : gen_reg_rtx (SImode); ! emit_insn (gen_fix_truncsfsi_sse (out, operands[1])); ! if (out != operands[0]) ! emit_move_insn (operands[0], out); ! DONE; ! } ! }) ! ;; See the comments in i386.h near OPTIMIZE_MODE_SWITCHING for the description ! ;; of the machinery. ! (define_insn_and_split "*fix_truncsi_1" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=m,?r") ! (fix:SI (match_operand 1 "register_operand" "f,f")))] ! "TARGET_80387 && FLOAT_MODE_P (GET_MODE (operands[1])) ! && !reload_completed && !reload_in_progress ! && !SSE_FLOAT_MODE_P (GET_MODE (operands[1]))" ! "#" ! "&& 1" ! [(const_int 0)] ! { ! operands[2] = assign_386_stack_local (HImode, 1); ! operands[3] = assign_386_stack_local (HImode, 2); ! if (memory_operand (operands[0], VOIDmode)) ! emit_insn (gen_fix_truncsi_memory (operands[0], operands[1], ! operands[2], operands[3])); ! else ! { ! operands[4] = assign_386_stack_local (SImode, 0); ! emit_insn (gen_fix_truncsi_nomemory (operands[0], operands[1], ! operands[2], operands[3], ! operands[4])); ! } ! DONE; ! } ! [(set_attr "type" "fistp")]) ! ! (define_insn "fix_truncsi_nomemory" [(set (match_operand:SI 0 "nonimmediate_operand" "=m,?r") (fix:SI (match_operand 1 "register_operand" "f,f"))) ! (use (match_operand:HI 2 "memory_operand" "m,m")) ! (use (match_operand:HI 3 "memory_operand" "m,m")) ! (clobber (match_operand:SI 4 "memory_operand" "=m,m"))] ! "TARGET_80387 && FLOAT_MODE_P (GET_MODE (operands[1])) ! && !SSE_FLOAT_MODE_P (GET_MODE (operands[1]))" ! "#" ! [(set_attr "type" "fistp")]) ! ! (define_insn "fix_truncsi_memory" ! [(set (match_operand:SI 0 "memory_operand" "=m") ! (fix:SI (match_operand 1 "register_operand" "f"))) ! (use (match_operand:HI 2 "memory_operand" "m")) ! (use (match_operand:HI 3 "memory_operand" "m"))] ! "TARGET_80387 && FLOAT_MODE_P (GET_MODE (operands[1])) ! && !SSE_FLOAT_MODE_P (GET_MODE (operands[1]))" "* return output_fix_trunc (insn, operands);" ! [(set_attr "type" "fistp")]) ! ! ;; When SSE available, it is always faster to use it! ! (define_insn "fix_truncsfsi_sse" ! [(set (match_operand:SI 0 "register_operand" "=r") ! (fix:SI (match_operand:SF 1 "nonimmediate_operand" "xm")))] ! "TARGET_SSE" ! "cvttss2si\t{%1, %0|%0, %1}" ! [(set_attr "type" "sse")]) ! ! (define_insn "fix_truncdfsi_sse" ! [(set (match_operand:SI 0 "register_operand" "=r") ! (fix:SI (match_operand:DF 1 "nonimmediate_operand" "Ym")))] ! "TARGET_SSE2" ! "cvttsd2si\t{%1, %0|%0, %1}" ! [(set_attr "type" "sse")]) (define_split [(set (match_operand:SI 0 "register_operand" "") (fix:SI (match_operand 1 "register_operand" ""))) ! (use (match_operand:HI 2 "memory_operand" "")) ! (use (match_operand:HI 3 "memory_operand" "")) ! (clobber (match_operand:SI 4 "memory_operand" ""))] "reload_completed" ! [(parallel [(set (match_dup 4) (fix:SI (match_dup 1))) ! (use (match_dup 2)) ! (use (match_dup 3))]) ! (set (match_dup 0) (match_dup 4))] ! "") ! ! (define_split ! [(set (match_operand:SI 0 "memory_operand" "") ! (fix:SI (match_operand 1 "register_operand" ""))) ! (use (match_operand:HI 2 "memory_operand" "")) ! (use (match_operand:HI 3 "memory_operand" "")) ! (clobber (match_operand:SI 4 "memory_operand" ""))] ! "reload_completed" ! [(parallel [(set (match_dup 0) (fix:SI (match_dup 1))) ! (use (match_dup 2)) ! (use (match_dup 3))])] "") ;; Signed conversion to HImode. (define_expand "fix_truncxfhi2" ! [(set (match_operand:HI 0 "nonimmediate_operand" "") ! (fix:HI (match_operand:XF 1 "register_operand" "")))] ! "!TARGET_64BIT && TARGET_80387" ! "") (define_expand "fix_trunctfhi2" ! [(set (match_operand:HI 0 "nonimmediate_operand" "") ! (fix:HI (match_operand:TF 1 "register_operand" "")))] "TARGET_80387" ! "") (define_expand "fix_truncdfhi2" ! [(set (match_operand:HI 0 "nonimmediate_operand" "") ! (fix:HI (match_operand:DF 1 "register_operand" "")))] ! "TARGET_80387 && !TARGET_SSE2" ! "") (define_expand "fix_truncsfhi2" ! [(set (match_operand:HI 0 "nonimmediate_operand" "") ! (fix:HI (match_operand:SF 1 "register_operand" "")))] ! "TARGET_80387 && !TARGET_SSE" ! "") ! ;; See the comments in i386.h near OPTIMIZE_MODE_SWITCHING for the description ! ;; of the machinery. ! (define_insn_and_split "*fix_trunchi_1" ! [(set (match_operand:HI 0 "nonimmediate_operand" "=m,?r") ! (fix:HI (match_operand 1 "register_operand" "f,f")))] ! "TARGET_80387 && FLOAT_MODE_P (GET_MODE (operands[1])) ! && !reload_completed && !reload_in_progress ! && !SSE_FLOAT_MODE_P (GET_MODE (operands[1]))" ! "#" ! "" ! [(const_int 0)] ! { ! operands[2] = assign_386_stack_local (HImode, 1); ! operands[3] = assign_386_stack_local (HImode, 2); ! if (memory_operand (operands[0], VOIDmode)) ! emit_insn (gen_fix_trunchi_memory (operands[0], operands[1], ! operands[2], operands[3])); ! else ! { ! operands[4] = assign_386_stack_local (HImode, 0); ! emit_insn (gen_fix_trunchi_nomemory (operands[0], operands[1], ! operands[2], operands[3], ! operands[4])); ! } ! DONE; ! } ! [(set_attr "type" "fistp")]) ! ! (define_insn "fix_trunchi_nomemory" [(set (match_operand:HI 0 "nonimmediate_operand" "=m,?r") (fix:HI (match_operand 1 "register_operand" "f,f"))) ! (use (match_operand:HI 2 "memory_operand" "m,m")) ! (use (match_operand:HI 3 "memory_operand" "m,m")) ! (clobber (match_operand:HI 4 "memory_operand" "=m,m"))] ! "TARGET_80387 && FLOAT_MODE_P (GET_MODE (operands[1])) ! && !SSE_FLOAT_MODE_P (GET_MODE (operands[1]))" ! "#" ! [(set_attr "type" "fistp")]) ! ! (define_insn "fix_trunchi_memory" ! [(set (match_operand:HI 0 "memory_operand" "=m") ! (fix:HI (match_operand 1 "register_operand" "f"))) ! (use (match_operand:HI 2 "memory_operand" "m")) ! (use (match_operand:HI 3 "memory_operand" "m"))] ! "TARGET_80387 && FLOAT_MODE_P (GET_MODE (operands[1])) ! && !SSE_FLOAT_MODE_P (GET_MODE (operands[1]))" "* return output_fix_trunc (insn, operands);" ! [(set_attr "type" "fistp")]) ! ! (define_split ! [(set (match_operand:HI 0 "memory_operand" "") ! (fix:HI (match_operand 1 "register_operand" ""))) ! (use (match_operand:HI 2 "memory_operand" "")) ! (use (match_operand:HI 3 "memory_operand" "")) ! (clobber (match_operand:HI 4 "memory_operand" ""))] ! "reload_completed" ! [(parallel [(set (match_dup 0) (fix:HI (match_dup 1))) ! (use (match_dup 2)) ! (use (match_dup 3))])] ! "") (define_split [(set (match_operand:HI 0 "register_operand" "") (fix:HI (match_operand 1 "register_operand" ""))) ! (use (match_operand:HI 2 "memory_operand" "")) ! (use (match_operand:HI 3 "memory_operand" "")) ! (clobber (match_operand:HI 4 "memory_operand" ""))] "reload_completed" ! [(parallel [(set (match_dup 4) (fix:HI (match_dup 1))) ! (use (match_dup 2)) ! (use (match_dup 3)) (clobber (match_dup 4))]) ! (set (match_dup 0) (match_dup 4))] "") ;; %% Not used yet. *************** *** 4049,4055 **** [(set (match_operand:HI 0 "memory_operand" "=m") (unspec:HI [(reg:HI 18)] 11))] "TARGET_80387" ! "fnstcw\\t%0" [(set_attr "length" "2") (set_attr "mode" "HI") (set_attr "i387" "1") --- 5037,5043 ---- [(set (match_operand:HI 0 "memory_operand" "=m") (unspec:HI [(reg:HI 18)] 11))] "TARGET_80387" ! "fnstcw\t%0" [(set_attr "length" "2") (set_attr "mode" "HI") (set_attr "i387" "1") *************** *** 4059,4065 **** [(set (reg:HI 18) (unspec:HI [(match_operand:HI 0 "memory_operand" "m")] 12))] "TARGET_80387" ! "fldcw\\t%0" [(set_attr "length" "2") (set_attr "mode" "HI") (set_attr "i387" "1") --- 5047,5053 ---- [(set (reg:HI 18) (unspec:HI [(match_operand:HI 0 "memory_operand" "m")] 12))] "TARGET_80387" ! "fldcw\t%0" [(set_attr "length" "2") (set_attr "mode" "HI") (set_attr "i387" "1") *************** *** 4074,4148 **** (define_insn "floathisf2" [(set (match_operand:SF 0 "register_operand" "=f,f") (float:SF (match_operand:HI 1 "nonimmediate_operand" "m,r")))] ! "TARGET_80387" "@ ! fild%z1\\t%1 #" [(set_attr "type" "fmov,multi") (set_attr "mode" "SF") (set_attr "fp_int_src" "true")]) ! (define_insn "floatsisf2" ! [(set (match_operand:SF 0 "register_operand" "=f,f") ! (float:SF (match_operand:SI 1 "nonimmediate_operand" "m,r")))] ! "TARGET_80387" "@ ! fild%z1\\t%1 ! #" ! [(set_attr "type" "fmov,multi") (set_attr "mode" "SF") (set_attr "fp_int_src" "true")]) ! (define_insn "floatdisf2" ! [(set (match_operand:SF 0 "register_operand" "=f,f") (float:SF (match_operand:DI 1 "nonimmediate_operand" "m,r")))] ! "TARGET_80387" "@ ! fild%z1\\t%1 #" [(set_attr "type" "fmov,multi") (set_attr "mode" "SF") (set_attr "fp_int_src" "true")]) (define_insn "floathidf2" [(set (match_operand:DF 0 "register_operand" "=f,f") (float:DF (match_operand:HI 1 "nonimmediate_operand" "m,r")))] ! "TARGET_80387" "@ ! fild%z1\\t%1 #" [(set_attr "type" "fmov,multi") (set_attr "mode" "DF") (set_attr "fp_int_src" "true")]) ! (define_insn "floatsidf2" ! [(set (match_operand:DF 0 "register_operand" "=f,f") ! (float:DF (match_operand:SI 1 "nonimmediate_operand" "m,r")))] ! "TARGET_80387" "@ ! fild%z1\\t%1 ! #" ! [(set_attr "type" "fmov,multi") (set_attr "mode" "DF") (set_attr "fp_int_src" "true")]) ! (define_insn "floatdidf2" ! [(set (match_operand:DF 0 "register_operand" "=f,f") (float:DF (match_operand:DI 1 "nonimmediate_operand" "m,r")))] ! "TARGET_80387" "@ ! fild%z1\\t%1 #" [(set_attr "type" "fmov,multi") (set_attr "mode" "DF") (set_attr "fp_int_src" "true")]) (define_insn "floathixf2" [(set (match_operand:XF 0 "register_operand" "=f,f") (float:XF (match_operand:HI 1 "nonimmediate_operand" "m,r")))] ! "TARGET_80387" "@ ! fild%z1\\t%1 #" [(set_attr "type" "fmov,multi") (set_attr "mode" "XF") --- 5062,5222 ---- (define_insn "floathisf2" [(set (match_operand:SF 0 "register_operand" "=f,f") (float:SF (match_operand:HI 1 "nonimmediate_operand" "m,r")))] ! "TARGET_80387 && !TARGET_SSE" "@ ! fild%z1\t%1 #" [(set_attr "type" "fmov,multi") (set_attr "mode" "SF") (set_attr "fp_int_src" "true")]) ! (define_expand "floatsisf2" ! [(set (match_operand:SF 0 "register_operand" "") ! (float:SF (match_operand:SI 1 "nonimmediate_operand" "")))] ! "TARGET_SSE || TARGET_80387" ! "") ! ! (define_insn "*floatsisf2_i387" ! [(set (match_operand:SF 0 "register_operand" "=f,?f,x") ! (float:SF (match_operand:SI 1 "nonimmediate_operand" "m,r,mr")))] ! "TARGET_80387 && (!TARGET_SSE || TARGET_MIX_SSE_I387)" "@ ! fild%z1\t%1 ! # ! cvtsi2ss\t{%1, %0|%0, %1}" ! [(set_attr "type" "fmov,multi,sse") (set_attr "mode" "SF") (set_attr "fp_int_src" "true")]) ! (define_insn "*floatsisf2_sse" ! [(set (match_operand:SF 0 "register_operand" "=x") ! (float:SF (match_operand:SI 1 "nonimmediate_operand" "mr")))] ! "TARGET_SSE" ! "cvtsi2ss\t{%1, %0|%0, %1}" ! [(set_attr "type" "sse") ! (set_attr "mode" "SF") ! (set_attr "fp_int_src" "true")]) ! ! (define_expand "floatdisf2" ! [(set (match_operand:SF 0 "register_operand" "") ! (float:SF (match_operand:DI 1 "nonimmediate_operand" "")))] ! "(TARGET_64BIT && TARGET_SSE) || TARGET_80387" ! "") ! ! (define_insn "*floatdisf2_i387_only" ! [(set (match_operand:SF 0 "register_operand" "=f,?f") (float:SF (match_operand:DI 1 "nonimmediate_operand" "m,r")))] ! "TARGET_80387 && (!TARGET_SSE || !TARGET_64BIT || TARGET_MIX_SSE_I387)" "@ ! fild%z1\t%1 #" [(set_attr "type" "fmov,multi") (set_attr "mode" "SF") (set_attr "fp_int_src" "true")]) + (define_insn "*floatdisf2_i387" + [(set (match_operand:SF 0 "register_operand" "=f,?f,x") + (float:SF (match_operand:DI 1 "nonimmediate_operand" "m,r,mr")))] + "TARGET_64BIT && TARGET_80387 && (!TARGET_SSE || TARGET_MIX_SSE_I387)" + "@ + fild%z1\t%1 + # + cvtsi2ss{q}\t{%1, %0|%0, %1}" + [(set_attr "type" "fmov,multi,sse") + (set_attr "mode" "SF") + (set_attr "fp_int_src" "true")]) + + (define_insn "*floatdisf2_sse" + [(set (match_operand:SF 0 "register_operand" "=x") + (float:SF (match_operand:DI 1 "nonimmediate_operand" "mr")))] + "TARGET_64BIT && TARGET_SSE" + "cvtsi2ss{q}\t{%1, %0|%0, %1}" + [(set_attr "type" "sse") + (set_attr "mode" "SF") + (set_attr "fp_int_src" "true")]) + (define_insn "floathidf2" [(set (match_operand:DF 0 "register_operand" "=f,f") (float:DF (match_operand:HI 1 "nonimmediate_operand" "m,r")))] ! "TARGET_80387 && !TARGET_SSE2" "@ ! fild%z1\t%1 #" [(set_attr "type" "fmov,multi") (set_attr "mode" "DF") (set_attr "fp_int_src" "true")]) ! (define_expand "floatsidf2" ! [(set (match_operand:DF 0 "register_operand" "") ! (float:DF (match_operand:SI 1 "nonimmediate_operand" "")))] ! "TARGET_80387 || TARGET_SSE2" ! "") ! ! (define_insn "*floatsidf2_i387" ! [(set (match_operand:DF 0 "register_operand" "=f,?f,Y") ! (float:DF (match_operand:SI 1 "nonimmediate_operand" "m,r,mr")))] ! "TARGET_80387 && (!TARGET_SSE2 || TARGET_MIX_SSE_I387)" "@ ! fild%z1\t%1 ! # ! cvtsi2sd\t{%1, %0|%0, %1}" ! [(set_attr "type" "fmov,multi,sse") (set_attr "mode" "DF") (set_attr "fp_int_src" "true")]) ! (define_insn "*floatsidf2_sse" ! [(set (match_operand:DF 0 "register_operand" "=Y") ! (float:DF (match_operand:SI 1 "nonimmediate_operand" "mr")))] ! "TARGET_SSE2" ! "cvtsi2sd\t{%1, %0|%0, %1}" ! [(set_attr "type" "sse") ! (set_attr "mode" "DF") ! (set_attr "fp_int_src" "true")]) ! ! (define_expand "floatdidf2" ! [(set (match_operand:DF 0 "register_operand" "") ! (float:DF (match_operand:DI 1 "nonimmediate_operand" "")))] ! "(TARGET_64BIT && TARGET_SSE2) || TARGET_80387" ! "") ! ! (define_insn "*floatdidf2_i387_only" ! [(set (match_operand:DF 0 "register_operand" "=f,?f") (float:DF (match_operand:DI 1 "nonimmediate_operand" "m,r")))] ! "TARGET_80387 && (!TARGET_SSE2 || !TARGET_64BIT)" "@ ! fild%z1\t%1 #" [(set_attr "type" "fmov,multi") (set_attr "mode" "DF") (set_attr "fp_int_src" "true")]) + (define_insn "*floatdidf2_i387" + [(set (match_operand:DF 0 "register_operand" "=f,?f,Y") + (float:DF (match_operand:DI 1 "nonimmediate_operand" "m,r,mr")))] + "TARGET_64BIT && TARGET_80387 && (!TARGET_SSE2 || TARGET_MIX_SSE_I387)" + "@ + fild%z1\t%1 + # + cvtsi2sd{q}\t{%1, %0|%0, %1}" + [(set_attr "type" "fmov,multi,sse") + (set_attr "mode" "DF") + (set_attr "fp_int_src" "true")]) + + (define_insn "*floatdidf2_sse" + [(set (match_operand:DF 0 "register_operand" "=Y") + (float:DF (match_operand:DI 1 "nonimmediate_operand" "mr")))] + "TARGET_SSE2" + "cvtsi2sd{q}\t{%1, %0|%0, %1}" + [(set_attr "type" "sse") + (set_attr "mode" "DF") + (set_attr "fp_int_src" "true")]) + (define_insn "floathixf2" [(set (match_operand:XF 0 "register_operand" "=f,f") (float:XF (match_operand:HI 1 "nonimmediate_operand" "m,r")))] ! "!TARGET_64BIT && TARGET_80387" "@ ! fild%z1\t%1 #" [(set_attr "type" "fmov,multi") (set_attr "mode" "XF") *************** *** 4153,4159 **** (float:TF (match_operand:HI 1 "nonimmediate_operand" "m,r")))] "TARGET_80387" "@ ! fild%z1\\t%1 #" [(set_attr "type" "fmov,multi") (set_attr "mode" "XF") --- 5227,5233 ---- (float:TF (match_operand:HI 1 "nonimmediate_operand" "m,r")))] "TARGET_80387" "@ ! fild%z1\t%1 #" [(set_attr "type" "fmov,multi") (set_attr "mode" "XF") *************** *** 4162,4170 **** (define_insn "floatsixf2" [(set (match_operand:XF 0 "register_operand" "=f,f") (float:XF (match_operand:SI 1 "nonimmediate_operand" "m,r")))] ! "TARGET_80387" "@ ! fild%z1\\t%1 #" [(set_attr "type" "fmov,multi") (set_attr "mode" "XF") --- 5236,5244 ---- (define_insn "floatsixf2" [(set (match_operand:XF 0 "register_operand" "=f,f") (float:XF (match_operand:SI 1 "nonimmediate_operand" "m,r")))] ! "!TARGET_64BIT && TARGET_80387" "@ ! fild%z1\t%1 #" [(set_attr "type" "fmov,multi") (set_attr "mode" "XF") *************** *** 4175,4181 **** (float:TF (match_operand:SI 1 "nonimmediate_operand" "m,r")))] "TARGET_80387" "@ ! fild%z1\\t%1 #" [(set_attr "type" "fmov,multi") (set_attr "mode" "XF") --- 5249,5255 ---- (float:TF (match_operand:SI 1 "nonimmediate_operand" "m,r")))] "TARGET_80387" "@ ! fild%z1\t%1 #" [(set_attr "type" "fmov,multi") (set_attr "mode" "XF") *************** *** 4184,4192 **** (define_insn "floatdixf2" [(set (match_operand:XF 0 "register_operand" "=f,f") (float:XF (match_operand:DI 1 "nonimmediate_operand" "m,r")))] ! "TARGET_80387" "@ ! fild%z1\\t%1 #" [(set_attr "type" "fmov,multi") (set_attr "mode" "XF") --- 5258,5266 ---- (define_insn "floatdixf2" [(set (match_operand:XF 0 "register_operand" "=f,f") (float:XF (match_operand:DI 1 "nonimmediate_operand" "m,r")))] ! "!TARGET_64BIT && TARGET_80387" "@ ! fild%z1\t%1 #" [(set_attr "type" "fmov,multi") (set_attr "mode" "XF") *************** *** 4197,4203 **** (float:TF (match_operand:DI 1 "nonimmediate_operand" "m,r")))] "TARGET_80387" "@ ! fild%z1\\t%1 #" [(set_attr "type" "fmov,multi") (set_attr "mode" "XF") --- 5271,5277 ---- (float:TF (match_operand:DI 1 "nonimmediate_operand" "m,r")))] "TARGET_80387" "@ ! fild%z1\t%1 #" [(set_attr "type" "fmov,multi") (set_attr "mode" "XF") *************** *** 4207,4237 **** (define_split [(set (match_operand 0 "register_operand" "") (float (match_operand 1 "register_operand" "")))] ! "reload_completed && FLOAT_MODE_P (GET_MODE (operands[0]))" [(const_int 0)] - " { operands[2] = ix86_force_to_memory (GET_MODE (operands[1]), operands[1]); operands[2] = gen_rtx_FLOAT (GET_MODE (operands[0]), operands[2]); emit_insn (gen_rtx_SET (VOIDmode, operands[0], operands[2])); ix86_free_from_memory (GET_MODE (operands[1])); DONE; ! }") ;; Add instructions - ;; %%% define_expand from the very first? ;; %%% splits for addsidi3 ; [(set (match_operand:DI 0 "nonimmediate_operand" "") ; (plus:DI (match_operand:DI 1 "general_operand" "") ; (zero_extend:DI (match_operand:SI 2 "general_operand" ""))))] ! (define_insn "adddi3" [(set (match_operand:DI 0 "nonimmediate_operand" "=r,o") (plus:DI (match_operand:DI 1 "nonimmediate_operand" "%0,0") (match_operand:DI 2 "general_operand" "roiF,riF"))) (clobber (reg:CC 17))] ! "" "#") (define_split --- 5281,5318 ---- (define_split [(set (match_operand 0 "register_operand" "") (float (match_operand 1 "register_operand" "")))] ! "reload_completed && FLOAT_MODE_P (GET_MODE (operands[0])) ! && FP_REG_P (operands[0])" [(const_int 0)] { operands[2] = ix86_force_to_memory (GET_MODE (operands[1]), operands[1]); operands[2] = gen_rtx_FLOAT (GET_MODE (operands[0]), operands[2]); emit_insn (gen_rtx_SET (VOIDmode, operands[0], operands[2])); ix86_free_from_memory (GET_MODE (operands[1])); DONE; ! }) ;; Add instructions ;; %%% splits for addsidi3 ; [(set (match_operand:DI 0 "nonimmediate_operand" "") ; (plus:DI (match_operand:DI 1 "general_operand" "") ; (zero_extend:DI (match_operand:SI 2 "general_operand" ""))))] ! (define_expand "adddi3" ! [(set (match_operand:DI 0 "nonimmediate_operand" "") ! (plus:DI (match_operand:DI 1 "nonimmediate_operand" "") ! (match_operand:DI 2 "x86_64_general_operand" ""))) ! (clobber (reg:CC 17))] ! "" ! "ix86_expand_binary_operator (PLUS, DImode, operands); DONE;") ! ! (define_insn "*adddi3_1" [(set (match_operand:DI 0 "nonimmediate_operand" "=r,o") (plus:DI (match_operand:DI 1 "nonimmediate_operand" "%0,0") (match_operand:DI 2 "general_operand" "roiF,riF"))) (clobber (reg:CC 17))] ! "!TARGET_64BIT" "#") (define_split *************** *** 4239,4245 **** (plus:DI (match_operand:DI 1 "nonimmediate_operand" "") (match_operand:DI 2 "general_operand" ""))) (clobber (reg:CC 17))] ! "reload_completed" [(parallel [(set (reg:CC 17) (unspec:CC [(match_dup 1) (match_dup 2)] 12)) (set (match_dup 0) (plus:SI (match_dup 1) (match_dup 2)))]) (parallel [(set (match_dup 3) --- 5320,5326 ---- (plus:DI (match_operand:DI 1 "nonimmediate_operand" "") (match_operand:DI 2 "general_operand" ""))) (clobber (reg:CC 17))] ! "!TARGET_64BIT && reload_completed" [(parallel [(set (reg:CC 17) (unspec:CC [(match_dup 1) (match_dup 2)] 12)) (set (match_dup 0) (plus:SI (match_dup 1) (match_dup 2)))]) (parallel [(set (match_dup 3) *************** *** 4251,4256 **** --- 5332,5360 ---- split_di (operands+1, 1, operands+1, operands+4); split_di (operands+2, 1, operands+2, operands+5);") + (define_insn "*adddi3_carry_rex64" + [(set (match_operand:DI 0 "nonimmediate_operand" "=rm,r") + (plus:DI (plus:DI (ltu:DI (reg:CC 17) (const_int 0)) + (match_operand:DI 1 "nonimmediate_operand" "%0,0")) + (match_operand:DI 2 "x86_64_general_operand" "re,rm"))) + (clobber (reg:CC 17))] + "TARGET_64BIT && ix86_binary_operator_ok (PLUS, DImode, operands)" + "adc{q}\t{%2, %0|%0, %2}" + [(set_attr "type" "alu") + (set_attr "pent_pair" "pu") + (set_attr "mode" "DI") + (set_attr "ppro_uops" "few")]) + + (define_insn "*adddi3_cc_rex64" + [(set (reg:CC 17) (unspec:CC [(match_operand:DI 1 "nonimmediate_operand" "%0,0") + (match_operand:DI 2 "x86_64_general_operand" "re,rm")] 12)) + (set (match_operand:DI 0 "nonimmediate_operand" "=rm,r") + (plus:DI (match_dup 1) (match_dup 2)))] + "TARGET_64BIT && ix86_binary_operator_ok (PLUS, DImode, operands)" + "add{q}\t{%2, %0|%0, %2}" + [(set_attr "type" "alu") + (set_attr "mode" "DI")]) + (define_insn "*addsi3_carry" [(set (match_operand:SI 0 "nonimmediate_operand" "=rm,r") (plus:SI (plus:SI (ltu:SI (reg:CC 17) (const_int 0)) *************** *** 4258,4264 **** (match_operand:SI 2 "general_operand" "ri,rm"))) (clobber (reg:CC 17))] "ix86_binary_operator_ok (PLUS, SImode, operands)" ! "adc{l}\\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "pent_pair" "pu") (set_attr "mode" "SI") --- 5362,5382 ---- (match_operand:SI 2 "general_operand" "ri,rm"))) (clobber (reg:CC 17))] "ix86_binary_operator_ok (PLUS, SImode, operands)" ! "adc{l}\t{%2, %0|%0, %2}" ! [(set_attr "type" "alu") ! (set_attr "pent_pair" "pu") ! (set_attr "mode" "SI") ! (set_attr "ppro_uops" "few")]) ! ! (define_insn "*addsi3_carry_zext" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (zero_extend:DI ! (plus:SI (plus:SI (ltu:SI (reg:CC 17) (const_int 0)) ! (match_operand:SI 1 "nonimmediate_operand" "%0")) ! (match_operand:SI 2 "general_operand" "rim")))) ! (clobber (reg:CC 17))] ! "TARGET_64BIT && ix86_binary_operator_ok (PLUS, SImode, operands)" ! "adc{l}\t{%2, %k0|%k0, %2}" [(set_attr "type" "alu") (set_attr "pent_pair" "pu") (set_attr "mode" "SI") *************** *** 4270,4276 **** (set (match_operand:SI 0 "nonimmediate_operand" "=rm,r") (plus:SI (match_dup 1) (match_dup 2)))] "ix86_binary_operator_ok (PLUS, SImode, operands)" ! "add{l}\\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "SI")]) --- 5388,5394 ---- (set (match_operand:SI 0 "nonimmediate_operand" "=rm,r") (plus:SI (match_dup 1) (match_dup 2)))] "ix86_binary_operator_ok (PLUS, SImode, operands)" ! "add{l}\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "SI")]) *************** *** 4280,4286 **** (set (match_operand:QI 0 "nonimmediate_operand" "=qm,q") (plus:QI (match_dup 1) (match_dup 2)))] "ix86_binary_operator_ok (PLUS, QImode, operands)" ! "add{b}\\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "QI")]) --- 5398,5404 ---- (set (match_operand:QI 0 "nonimmediate_operand" "=qm,q") (plus:QI (match_dup 1) (match_dup 2)))] "ix86_binary_operator_ok (PLUS, QImode, operands)" ! "add{b}\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "QI")]) *************** *** 4292,4305 **** "" "ix86_expand_binary_operator (PLUS, SImode, operands); DONE;") ! (define_insn "*lea_0" [(set (match_operand:SI 0 "register_operand" "=r") (match_operand:SI 1 "address_operand" "p"))] ! "" ! "lea{l}\\t{%a1, %0|%0, %a1}" [(set_attr "type" "lea") (set_attr "mode" "SI")]) ;; The lea patterns for non-Pmodes needs to be matched by several ;; insns converted to real lea by splitters. --- 5410,5447 ---- "" "ix86_expand_binary_operator (PLUS, SImode, operands); DONE;") ! (define_insn "*lea_1" [(set (match_operand:SI 0 "register_operand" "=r") (match_operand:SI 1 "address_operand" "p"))] ! "!TARGET_64BIT" ! "lea{l}\t{%a1, %0|%0, %a1}" ! [(set_attr "type" "lea") ! (set_attr "mode" "SI")]) ! ! (define_insn "*lea_1_rex64" ! [(set (match_operand:SI 0 "register_operand" "=r") ! (subreg:SI (match_operand:DI 1 "address_operand" "p") 0))] ! "TARGET_64BIT" ! "lea{l}\t{%a1, %0|%0, %a1}" ! [(set_attr "type" "lea") ! (set_attr "mode" "SI")]) ! ! (define_insn "*lea_1_zext" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (zero_extend:DI (subreg:SI (match_operand:DI 1 "address_operand" "p") 0)))] ! "TARGET_64BIT" ! "lea{l}\t{%a1, %k0|%k0, %a1}" [(set_attr "type" "lea") (set_attr "mode" "SI")]) + (define_insn "*lea_2_rex64" + [(set (match_operand:DI 0 "register_operand" "=r") + (match_operand:DI 1 "address_operand" "p"))] + "TARGET_64BIT" + "lea{q}\t{%a1, %0|%0, %a1}" + [(set_attr "type" "lea") + (set_attr "mode" "DI")]) + ;; The lea patterns for non-Pmodes needs to be matched by several ;; insns converted to real lea by splitters. *************** *** 4308,4314 **** (plus (plus (match_operand 1 "register_operand" "r") (match_operand 2 "register_operand" "r")) (match_operand 3 "immediate_operand" "i")))] ! "(GET_MODE (operands[0]) == QImode || GET_MODE (operands[0]) == HImode) && (!TARGET_PARTIAL_REG_STALL || optimize_size) && GET_MODE (operands[0]) == GET_MODE (operands[1]) && GET_MODE (operands[0]) == GET_MODE (operands[2]) --- 5450,5457 ---- (plus (plus (match_operand 1 "register_operand" "r") (match_operand 2 "register_operand" "r")) (match_operand 3 "immediate_operand" "i")))] ! "(GET_MODE (operands[0]) == QImode || GET_MODE (operands[0]) == HImode ! || (TARGET_64BIT && GET_MODE (operands[0]) == SImode)) && (!TARGET_PARTIAL_REG_STALL || optimize_size) && GET_MODE (operands[0]) == GET_MODE (operands[1]) && GET_MODE (operands[0]) == GET_MODE (operands[2]) *************** *** 4317,4323 **** "#" "&& reload_completed" [(const_int 0)] - " { rtx pat; operands[0] = gen_lowpart (SImode, operands[0]); --- 5460,5465 ---- *************** *** 4330,4336 **** pat = gen_rtx_SUBREG (SImode, pat, 0); emit_insn (gen_rtx_SET (VOIDmode, operands[0], pat)); DONE; ! }" [(set_attr "type" "lea") (set_attr "mode" "SI")]) --- 5472,5499 ---- pat = gen_rtx_SUBREG (SImode, pat, 0); emit_insn (gen_rtx_SET (VOIDmode, operands[0], pat)); DONE; ! } ! [(set_attr "type" "lea") ! (set_attr "mode" "SI")]) ! ! (define_insn_and_split "*lea_general_1_zext" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (zero_extend:DI ! (plus:SI (plus:SI (match_operand:SI 1 "register_operand" "r") ! (match_operand:SI 2 "register_operand" "r")) ! (match_operand:SI 3 "immediate_operand" "i"))))] ! "TARGET_64BIT" ! "#" ! "&& reload_completed" ! [(set (match_dup 0) ! (zero_extend:DI (subreg:SI (plus:DI (plus:DI (match_dup 1) ! (match_dup 2)) ! (match_dup 3)) 0)))] ! { ! operands[1] = gen_lowpart (Pmode, operands[1]); ! operands[2] = gen_lowpart (Pmode, operands[2]); ! operands[3] = gen_lowpart (Pmode, operands[3]); ! } [(set_attr "type" "lea") (set_attr "mode" "SI")]) *************** *** 4339,4345 **** (plus (mult (match_operand 1 "register_operand" "r") (match_operand 2 "const248_operand" "i")) (match_operand 3 "nonmemory_operand" "ri")))] ! "(GET_MODE (operands[0]) == QImode || GET_MODE (operands[0]) == HImode) && (!TARGET_PARTIAL_REG_STALL || optimize_size) && GET_MODE (operands[0]) == GET_MODE (operands[1]) && (GET_MODE (operands[0]) == GET_MODE (operands[3]) --- 5502,5509 ---- (plus (mult (match_operand 1 "register_operand" "r") (match_operand 2 "const248_operand" "i")) (match_operand 3 "nonmemory_operand" "ri")))] ! "(GET_MODE (operands[0]) == QImode || GET_MODE (operands[0]) == HImode ! || (TARGET_64BIT && GET_MODE (operands[0]) == SImode)) && (!TARGET_PARTIAL_REG_STALL || optimize_size) && GET_MODE (operands[0]) == GET_MODE (operands[1]) && (GET_MODE (operands[0]) == GET_MODE (operands[3]) *************** *** 4347,4353 **** "#" "&& reload_completed" [(const_int 0)] - " { rtx pat; operands[0] = gen_lowpart (SImode, operands[0]); --- 5511,5516 ---- *************** *** 4359,4365 **** pat = gen_rtx_SUBREG (SImode, pat, 0); emit_insn (gen_rtx_SET (VOIDmode, operands[0], pat)); DONE; ! }" [(set_attr "type" "lea") (set_attr "mode" "SI")]) --- 5522,5548 ---- pat = gen_rtx_SUBREG (SImode, pat, 0); emit_insn (gen_rtx_SET (VOIDmode, operands[0], pat)); DONE; ! } ! [(set_attr "type" "lea") ! (set_attr "mode" "SI")]) ! ! (define_insn_and_split "*lea_general_2_zext" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (zero_extend:DI ! (plus:SI (mult:SI (match_operand:SI 1 "register_operand" "r") ! (match_operand:SI 2 "const248_operand" "n")) ! (match_operand:SI 3 "nonmemory_operand" "ri"))))] ! "TARGET_64BIT" ! "#" ! "&& reload_completed" ! [(set (match_dup 0) ! (zero_extend:DI (subreg:SI (plus:DI (mult:DI (match_dup 1) ! (match_dup 2)) ! (match_dup 3)) 0)))] ! { ! operands[1] = gen_lowpart (Pmode, operands[1]); ! operands[3] = gen_lowpart (Pmode, operands[3]); ! } [(set_attr "type" "lea") (set_attr "mode" "SI")]) *************** *** 4369,4382 **** (match_operand 2 "const248_operand" "i")) (match_operand 3 "register_operand" "r")) (match_operand 4 "immediate_operand" "i")))] ! "(GET_MODE (operands[0]) == QImode || GET_MODE (operands[0]) == HImode) && (!TARGET_PARTIAL_REG_STALL || optimize_size) && GET_MODE (operands[0]) == GET_MODE (operands[1]) && GET_MODE (operands[0]) == GET_MODE (operands[3])" "#" "&& reload_completed" [(const_int 0)] - " { rtx pat; operands[0] = gen_lowpart (SImode, operands[0]); --- 5552,5565 ---- (match_operand 2 "const248_operand" "i")) (match_operand 3 "register_operand" "r")) (match_operand 4 "immediate_operand" "i")))] ! "(GET_MODE (operands[0]) == QImode || GET_MODE (operands[0]) == HImode ! || (TARGET_64BIT && GET_MODE (operands[0]) == SImode)) && (!TARGET_PARTIAL_REG_STALL || optimize_size) && GET_MODE (operands[0]) == GET_MODE (operands[1]) && GET_MODE (operands[0]) == GET_MODE (operands[3])" "#" "&& reload_completed" [(const_int 0)] { rtx pat; operands[0] = gen_lowpart (SImode, operands[0]); *************** *** 4392,4422 **** pat = gen_rtx_SUBREG (SImode, pat, 0); emit_insn (gen_rtx_SET (VOIDmode, operands[0], pat)); DONE; ! }" [(set_attr "type" "lea") (set_attr "mode" "SI")]) (define_insn "*addsi_1" [(set (match_operand:SI 0 "nonimmediate_operand" "=r,rm,r") (plus:SI (match_operand:SI 1 "nonimmediate_operand" "%0,0,r") (match_operand:SI 2 "general_operand" "rmni,rni,rni"))) (clobber (reg:CC 17))] "ix86_binary_operator_ok (PLUS, SImode, operands)" - "* { switch (get_attr_type (insn)) { case TYPE_LEA: operands[2] = SET_SRC (XVECEXP (PATTERN (insn), 0, 0)); ! return \"lea{l}\\t{%a2, %0|%0, %a2}\"; case TYPE_INCDEC: if (! rtx_equal_p (operands[0], operands[1])) abort (); if (operands[2] == const1_rtx) ! return \"inc{l}\\t%0\"; else if (operands[2] == constm1_rtx) ! return \"dec{l}\\t%0\"; else abort(); --- 5575,5895 ---- pat = gen_rtx_SUBREG (SImode, pat, 0); emit_insn (gen_rtx_SET (VOIDmode, operands[0], pat)); DONE; ! } ! [(set_attr "type" "lea") ! (set_attr "mode" "SI")]) ! ! (define_insn_and_split "*lea_general_3_zext" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (zero_extend:DI ! (plus:SI (plus:SI (mult:SI (match_operand:SI 1 "register_operand" "r") ! (match_operand:SI 2 "const248_operand" "n")) ! (match_operand:SI 3 "register_operand" "r")) ! (match_operand:SI 4 "immediate_operand" "i"))))] ! "TARGET_64BIT" ! "#" ! "&& reload_completed" ! [(set (match_dup 0) ! (zero_extend:DI (subreg:SI (plus:DI (plus:DI (mult:DI (match_dup 1) ! (match_dup 2)) ! (match_dup 3)) ! (match_dup 4)) 0)))] ! { ! operands[1] = gen_lowpart (Pmode, operands[1]); ! operands[3] = gen_lowpart (Pmode, operands[3]); ! operands[4] = gen_lowpart (Pmode, operands[4]); ! } [(set_attr "type" "lea") (set_attr "mode" "SI")]) + (define_insn "*adddi_1_rex64" + [(set (match_operand:DI 0 "nonimmediate_operand" "=r,rm,r") + (plus:DI (match_operand:DI 1 "nonimmediate_operand" "%0,0,r") + (match_operand:DI 2 "x86_64_general_operand" "rme,re,re"))) + (clobber (reg:CC 17))] + "TARGET_64BIT && ix86_binary_operator_ok (PLUS, DImode, operands)" + { + switch (get_attr_type (insn)) + { + case TYPE_LEA: + operands[2] = SET_SRC (XVECEXP (PATTERN (insn), 0, 0)); + return "lea{q}\t{%a2, %0|%0, %a2}"; + + case TYPE_INCDEC: + if (! rtx_equal_p (operands[0], operands[1])) + abort (); + if (operands[2] == const1_rtx) + return "inc{q}\t%0"; + else if (operands[2] == constm1_rtx) + return "dec{q}\t%0"; + else + abort (); + + default: + if (! rtx_equal_p (operands[0], operands[1])) + abort (); + + /* Make things pretty and `subl $4,%eax' rather than `addl $-4, %eax'. + Exceptions: -128 encodes smaller than 128, so swap sign and op. */ + if (GET_CODE (operands[2]) == CONST_INT + /* Avoid overflows. */ + && ((INTVAL (operands[2]) & ((((unsigned int) 1) << 31) - 1))) + && (INTVAL (operands[2]) == 128 + || (INTVAL (operands[2]) < 0 + && INTVAL (operands[2]) != -128))) + { + operands[2] = GEN_INT (-INTVAL (operands[2])); + return "sub{q}\t{%2, %0|%0, %2}"; + } + return "add{q}\t{%2, %0|%0, %2}"; + } + } + [(set (attr "type") + (cond [(eq_attr "alternative" "2") + (const_string "lea") + ; Current assemblers are broken and do not allow @GOTOFF in + ; ought but a memory context. + (match_operand:DI 2 "pic_symbolic_operand" "") + (const_string "lea") + (match_operand:DI 2 "incdec_operand" "") + (const_string "incdec") + ] + (const_string "alu"))) + (set_attr "mode" "DI")]) + + ;; Convert lea to the lea pattern to avoid flags dependency. + (define_split + [(set (match_operand:DI 0 "register_operand" "") + (plus:DI (match_operand:DI 1 "register_operand" "") + (match_operand:DI 2 "x86_64_nonmemory_operand" ""))) + (clobber (reg:CC 17))] + "TARGET_64BIT && reload_completed + && true_regnum (operands[0]) != true_regnum (operands[1])" + [(set (match_dup 0) + (plus:DI (match_dup 1) + (match_dup 2)))] + "") + + (define_insn "*adddi_2_rex64" + [(set (reg 17) + (compare + (plus:DI (match_operand:DI 1 "nonimmediate_operand" "%0,0") + (match_operand:DI 2 "x86_64_general_operand" "rme,re")) + (const_int 0))) + (set (match_operand:DI 0 "nonimmediate_operand" "=r,rm") + (plus:DI (match_dup 1) (match_dup 2)))] + "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode) + && ix86_binary_operator_ok (PLUS, DImode, operands) + /* Current assemblers are broken and do not allow @GOTOFF in + ought but a memory context. */ + && ! pic_symbolic_operand (operands[2], VOIDmode)" + { + switch (get_attr_type (insn)) + { + case TYPE_INCDEC: + if (! rtx_equal_p (operands[0], operands[1])) + abort (); + if (operands[2] == const1_rtx) + return "inc{q}\t%0"; + else if (operands[2] == constm1_rtx) + return "dec{q}\t%0"; + else + abort (); + + default: + if (! rtx_equal_p (operands[0], operands[1])) + abort (); + /* ???? We ought to handle there the 32bit case too + - do we need new constrant? */ + /* Make things pretty and `subl $4,%eax' rather than `addl $-4, %eax'. + Exceptions: -128 encodes smaller than 128, so swap sign and op. */ + if (GET_CODE (operands[2]) == CONST_INT + /* Avoid overflows. */ + && ((INTVAL (operands[2]) & ((((unsigned int) 1) << 31) - 1))) + && (INTVAL (operands[2]) == 128 + || (INTVAL (operands[2]) < 0 + && INTVAL (operands[2]) != -128))) + { + operands[2] = GEN_INT (-INTVAL (operands[2])); + return "sub{q}\t{%2, %0|%0, %2}"; + } + return "add{q}\t{%2, %0|%0, %2}"; + } + } + [(set (attr "type") + (if_then_else (match_operand:DI 2 "incdec_operand" "") + (const_string "incdec") + (const_string "alu"))) + (set_attr "mode" "DI")]) + + (define_insn "*adddi_3_rex64" + [(set (reg 17) + (compare (neg:DI (match_operand:DI 2 "x86_64_general_operand" "rme")) + (match_operand:DI 1 "x86_64_general_operand" "%0"))) + (clobber (match_scratch:DI 0 "=r"))] + "TARGET_64BIT + && ix86_match_ccmode (insn, CCZmode) + && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM) + /* Current assemblers are broken and do not allow @GOTOFF in + ought but a memory context. */ + && ! pic_symbolic_operand (operands[2], VOIDmode)" + { + switch (get_attr_type (insn)) + { + case TYPE_INCDEC: + if (! rtx_equal_p (operands[0], operands[1])) + abort (); + if (operands[2] == const1_rtx) + return "inc{q}\t%0"; + else if (operands[2] == constm1_rtx) + return "dec{q}\t%0"; + else + abort (); + + default: + if (! rtx_equal_p (operands[0], operands[1])) + abort (); + /* ???? We ought to handle there the 32bit case too + - do we need new constrant? */ + /* Make things pretty and `subl $4,%eax' rather than `addl $-4, %eax'. + Exceptions: -128 encodes smaller than 128, so swap sign and op. */ + if (GET_CODE (operands[2]) == CONST_INT + /* Avoid overflows. */ + && ((INTVAL (operands[2]) & ((((unsigned int) 1) << 31) - 1))) + && (INTVAL (operands[2]) == 128 + || (INTVAL (operands[2]) < 0 + && INTVAL (operands[2]) != -128))) + { + operands[2] = GEN_INT (-INTVAL (operands[2])); + return "sub{q}\t{%2, %0|%0, %2}"; + } + return "add{q}\t{%2, %0|%0, %2}"; + } + } + [(set (attr "type") + (if_then_else (match_operand:DI 2 "incdec_operand" "") + (const_string "incdec") + (const_string "alu"))) + (set_attr "mode" "DI")]) + + ; For comparisons against 1, -1 and 128, we may generate better code + ; by converting cmp to add, inc or dec as done by peephole2. This pattern + ; is matched then. We can't accept general immediate, because for + ; case of overflows, the result is messed up. + ; This pattern also don't hold of 0x8000000000000000, since the value overflows + ; when negated. + ; Also carry flag is reversed compared to cmp, so this conversion is valid + ; only for comparisons not depending on it. + (define_insn "*adddi_4_rex64" + [(set (reg 17) + (compare (match_operand:DI 1 "nonimmediate_operand" "0") + (match_operand:DI 2 "x86_64_immediate_operand" "e"))) + (clobber (match_scratch:DI 0 "=rm"))] + "TARGET_64BIT + && ix86_match_ccmode (insn, CCGCmode)" + { + switch (get_attr_type (insn)) + { + case TYPE_INCDEC: + if (operands[2] == constm1_rtx) + return "inc{q}\t%0"; + else if (operands[2] == const1_rtx) + return "dec{q}\t%0"; + else + abort(); + + default: + if (! rtx_equal_p (operands[0], operands[1])) + abort (); + /* Make things pretty and `subl $4,%eax' rather than `addl $-4, %eax'. + Exceptions: -128 encodes smaller than 128, so swap sign and op. */ + if ((INTVAL (operands[2]) == -128 + || (INTVAL (operands[2]) > 0 + && INTVAL (operands[2]) != 128)) + /* Avoid overflows. */ + && ((INTVAL (operands[2]) & ((((unsigned int) 1) << 31) - 1)))) + return "sub{q}\t{%2, %0|%0, %2}"; + operands[2] = GEN_INT (-INTVAL (operands[2])); + return "add{q}\t{%2, %0|%0, %2}"; + } + } + [(set (attr "type") + (if_then_else (match_operand:DI 2 "incdec_operand" "") + (const_string "incdec") + (const_string "alu"))) + (set_attr "mode" "DI")]) + + (define_insn "*adddi_5_rex64" + [(set (reg 17) + (compare + (plus:DI (match_operand:DI 1 "nonimmediate_operand" "%0") + (match_operand:DI 2 "x86_64_general_operand" "rme")) + (const_int 0))) + (clobber (match_scratch:DI 0 "=r"))] + "TARGET_64BIT + && ix86_match_ccmode (insn, CCGOCmode) + && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM) + /* Current assemblers are broken and do not allow @GOTOFF in + ought but a memory context. */ + && ! pic_symbolic_operand (operands[2], VOIDmode)" + { + switch (get_attr_type (insn)) + { + case TYPE_INCDEC: + if (! rtx_equal_p (operands[0], operands[1])) + abort (); + if (operands[2] == const1_rtx) + return "inc{q}\t%0"; + else if (operands[2] == constm1_rtx) + return "dec{q}\t%0"; + else + abort(); + + default: + if (! rtx_equal_p (operands[0], operands[1])) + abort (); + /* Make things pretty and `subl $4,%eax' rather than `addl $-4, %eax'. + Exceptions: -128 encodes smaller than 128, so swap sign and op. */ + if (GET_CODE (operands[2]) == CONST_INT + /* Avoid overflows. */ + && ((INTVAL (operands[2]) & ((((unsigned int) 1) << 31) - 1))) + && (INTVAL (operands[2]) == 128 + || (INTVAL (operands[2]) < 0 + && INTVAL (operands[2]) != -128))) + { + operands[2] = GEN_INT (-INTVAL (operands[2])); + return "sub{q}\t{%2, %0|%0, %2}"; + } + return "add{q}\t{%2, %0|%0, %2}"; + } + } + [(set (attr "type") + (if_then_else (match_operand:DI 2 "incdec_operand" "") + (const_string "incdec") + (const_string "alu"))) + (set_attr "mode" "DI")]) + + (define_insn "*addsi_1" [(set (match_operand:SI 0 "nonimmediate_operand" "=r,rm,r") (plus:SI (match_operand:SI 1 "nonimmediate_operand" "%0,0,r") (match_operand:SI 2 "general_operand" "rmni,rni,rni"))) (clobber (reg:CC 17))] "ix86_binary_operator_ok (PLUS, SImode, operands)" { switch (get_attr_type (insn)) { case TYPE_LEA: operands[2] = SET_SRC (XVECEXP (PATTERN (insn), 0, 0)); ! return "lea{l}\t{%a2, %0|%0, %a2}"; case TYPE_INCDEC: if (! rtx_equal_p (operands[0], operands[1])) abort (); if (operands[2] == const1_rtx) ! return "inc{l}\t%0"; else if (operands[2] == constm1_rtx) ! return "dec{l}\t%0"; else abort(); *************** *** 4432,4442 **** && INTVAL (operands[2]) != -128))) { operands[2] = GEN_INT (-INTVAL (operands[2])); ! return \"sub{l}\\t{%2, %0|%0, %2}\"; } ! return \"add{l}\\t{%2, %0|%0, %2}\"; } ! }" [(set (attr "type") (cond [(eq_attr "alternative" "2") (const_string "lea") --- 5905,5915 ---- && INTVAL (operands[2]) != -128))) { operands[2] = GEN_INT (-INTVAL (operands[2])); ! return "sub{l}\t{%2, %0|%0, %2}"; } ! return "add{l}\t{%2, %0|%0, %2}"; } ! } [(set (attr "type") (cond [(eq_attr "alternative" "2") (const_string "lea") *************** *** 4459,4465 **** "reload_completed && true_regnum (operands[0]) != true_regnum (operands[1])" [(const_int 0)] - " { rtx pat; /* In -fPIC mode the constructs like (const (unspec [symbol_ref])) --- 5932,5937 ---- *************** *** 4475,4481 **** pat = gen_rtx_SUBREG (SImode, pat, 0); emit_insn (gen_rtx_SET (VOIDmode, operands[0], pat)); DONE; ! }") (define_insn "*addsi_2" [(set (reg 17) --- 5947,6023 ---- pat = gen_rtx_SUBREG (SImode, pat, 0); emit_insn (gen_rtx_SET (VOIDmode, operands[0], pat)); DONE; ! }) ! ! ;; It may seem that nonimmediate operand is proper one for operand 1. ! ;; The addsi_1 pattern allows nonimmediate operand at that place and ! ;; we take care in ix86_binary_operator_ok to not allow two memory ! ;; operands so proper swapping will be done in reload. This allow ! ;; patterns constructed from addsi_1 to match. ! (define_insn "addsi_1_zext" ! [(set (match_operand:DI 0 "register_operand" "=r,r") ! (zero_extend:DI ! (plus:SI (match_operand:SI 1 "nonimmediate_operand" "%0,r") ! (match_operand:SI 2 "general_operand" "rmni,rni")))) ! (clobber (reg:CC 17))] ! "TARGET_64BIT && ix86_binary_operator_ok (PLUS, SImode, operands)" ! { ! switch (get_attr_type (insn)) ! { ! case TYPE_LEA: ! operands[2] = SET_SRC (XVECEXP (PATTERN (insn), 0, 0)); ! return "lea{l}\t{%a2, %k0|%k0, %a2}"; ! ! case TYPE_INCDEC: ! if (operands[2] == const1_rtx) ! return "inc{l}\t%k0"; ! else if (operands[2] == constm1_rtx) ! return "dec{l}\t%k0"; ! else ! abort(); ! ! default: ! /* Make things pretty and `subl $4,%eax' rather than `addl $-4, %eax'. ! Exceptions: -128 encodes smaller than 128, so swap sign and op. */ ! if (GET_CODE (operands[2]) == CONST_INT ! && (INTVAL (operands[2]) == 128 ! || (INTVAL (operands[2]) < 0 ! && INTVAL (operands[2]) != -128))) ! { ! operands[2] = GEN_INT (-INTVAL (operands[2])); ! return "sub{l}\t{%2, %k0|%k0, %2}"; ! } ! return "add{l}\t{%2, %k0|%k0, %2}"; ! } ! } ! [(set (attr "type") ! (cond [(eq_attr "alternative" "1") ! (const_string "lea") ! ; Current assemblers are broken and do not allow @GOTOFF in ! ; ought but a memory context. ! (match_operand:SI 2 "pic_symbolic_operand" "") ! (const_string "lea") ! (match_operand:SI 2 "incdec_operand" "") ! (const_string "incdec") ! ] ! (const_string "alu"))) ! (set_attr "mode" "SI")]) ! ! ;; Convert lea to the lea pattern to avoid flags dependency. ! (define_split ! [(set (match_operand:DI 0 "register_operand" "") ! (zero_extend:DI ! (plus:SI (match_operand:SI 1 "register_operand" "") ! (match_operand:SI 2 "nonmemory_operand" "")))) ! (clobber (reg:CC 17))] ! "reload_completed ! && true_regnum (operands[0]) != true_regnum (operands[1])" ! [(set (match_dup 0) ! (zero_extend:DI (subreg:SI (plus:DI (match_dup 1) (match_dup 2)) 0)))] ! { ! operands[1] = gen_lowpart (Pmode, operands[1]); ! operands[2] = gen_lowpart (Pmode, operands[2]); ! }) (define_insn "*addsi_2" [(set (reg 17) *************** *** 4488,4496 **** "ix86_match_ccmode (insn, CCGOCmode) && ix86_binary_operator_ok (PLUS, SImode, operands) /* Current assemblers are broken and do not allow @GOTOFF in ! ought but a memory context. */ && ! pic_symbolic_operand (operands[2], VOIDmode)" - "* { switch (get_attr_type (insn)) { --- 6030,6037 ---- "ix86_match_ccmode (insn, CCGOCmode) && ix86_binary_operator_ok (PLUS, SImode, operands) /* Current assemblers are broken and do not allow @GOTOFF in ! ought but a memory context. */ && ! pic_symbolic_operand (operands[2], VOIDmode)" { switch (get_attr_type (insn)) { *************** *** 4498,4506 **** if (! rtx_equal_p (operands[0], operands[1])) abort (); if (operands[2] == const1_rtx) ! return \"inc{l}\\t%0\"; else if (operands[2] == constm1_rtx) ! return \"dec{l}\\t%0\"; else abort(); --- 6039,6047 ---- if (! rtx_equal_p (operands[0], operands[1])) abort (); if (operands[2] == const1_rtx) ! return "inc{l}\t%0"; else if (operands[2] == constm1_rtx) ! return "dec{l}\t%0"; else abort(); *************** *** 4515,4525 **** && INTVAL (operands[2]) != -128))) { operands[2] = GEN_INT (-INTVAL (operands[2])); ! return \"sub{l}\\t{%2, %0|%0, %2}\"; } ! return \"add{l}\\t{%2, %0|%0, %2}\"; } ! }" [(set (attr "type") (if_then_else (match_operand:SI 2 "incdec_operand" "") (const_string "incdec") --- 6056,6111 ---- && INTVAL (operands[2]) != -128))) { operands[2] = GEN_INT (-INTVAL (operands[2])); ! return "sub{l}\t{%2, %0|%0, %2}"; } ! return "add{l}\t{%2, %0|%0, %2}"; } ! } ! [(set (attr "type") ! (if_then_else (match_operand:SI 2 "incdec_operand" "") ! (const_string "incdec") ! (const_string "alu"))) ! (set_attr "mode" "SI")]) ! ! ;; See comment for addsi_1_zext why we do use nonimmediate_operand ! (define_insn "*addsi_2_zext" ! [(set (reg 17) ! (compare ! (plus:SI (match_operand:SI 1 "nonimmediate_operand" "%0") ! (match_operand:SI 2 "general_operand" "rmni")) ! (const_int 0))) ! (set (match_operand:DI 0 "register_operand" "=r") ! (zero_extend:DI (plus:SI (match_dup 1) (match_dup 2))))] ! "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode) ! && ix86_binary_operator_ok (PLUS, SImode, operands) ! /* Current assemblers are broken and do not allow @GOTOFF in ! ought but a memory context. */ ! && ! pic_symbolic_operand (operands[2], VOIDmode)" ! { ! switch (get_attr_type (insn)) ! { ! case TYPE_INCDEC: ! if (operands[2] == const1_rtx) ! return "inc{l}\t%k0"; ! else if (operands[2] == constm1_rtx) ! return "dec{l}\t%k0"; ! else ! abort(); ! ! default: ! /* Make things pretty and `subl $4,%eax' rather than `addl $-4, %eax'. ! Exceptions: -128 encodes smaller than 128, so swap sign and op. */ ! if (GET_CODE (operands[2]) == CONST_INT ! && (INTVAL (operands[2]) == 128 ! || (INTVAL (operands[2]) < 0 ! && INTVAL (operands[2]) != -128))) ! { ! operands[2] = GEN_INT (-INTVAL (operands[2])); ! return "sub{l}\t{%2, %k0|%k0, %2}"; ! } ! return "add{l}\t{%2, %k0|%k0, %2}"; ! } ! } [(set (attr "type") (if_then_else (match_operand:SI 2 "incdec_operand" "") (const_string "incdec") *************** *** 4534,4542 **** "ix86_match_ccmode (insn, CCZmode) && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM) /* Current assemblers are broken and do not allow @GOTOFF in ! ought but a memory context. */ && ! pic_symbolic_operand (operands[2], VOIDmode)" - "* { switch (get_attr_type (insn)) { --- 6120,6127 ---- "ix86_match_ccmode (insn, CCZmode) && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM) /* Current assemblers are broken and do not allow @GOTOFF in ! ought but a memory context. */ && ! pic_symbolic_operand (operands[2], VOIDmode)" { switch (get_attr_type (insn)) { *************** *** 4544,4552 **** if (! rtx_equal_p (operands[0], operands[1])) abort (); if (operands[2] == const1_rtx) ! return \"inc{l}\\t%0\"; else if (operands[2] == constm1_rtx) ! return \"dec{l}\\t%0\"; else abort(); --- 6129,6137 ---- if (! rtx_equal_p (operands[0], operands[1])) abort (); if (operands[2] == const1_rtx) ! return "inc{l}\t%0"; else if (operands[2] == constm1_rtx) ! return "dec{l}\t%0"; else abort(); *************** *** 4561,4571 **** && INTVAL (operands[2]) != -128))) { operands[2] = GEN_INT (-INTVAL (operands[2])); ! return \"sub{l}\\t{%2, %0|%0, %2}\"; } ! return \"add{l}\\t{%2, %0|%0, %2}\"; } ! }" [(set (attr "type") (if_then_else (match_operand:SI 2 "incdec_operand" "") (const_string "incdec") --- 6146,6199 ---- && INTVAL (operands[2]) != -128))) { operands[2] = GEN_INT (-INTVAL (operands[2])); ! return "sub{l}\t{%2, %0|%0, %2}"; } ! return "add{l}\t{%2, %0|%0, %2}"; } ! } ! [(set (attr "type") ! (if_then_else (match_operand:SI 2 "incdec_operand" "") ! (const_string "incdec") ! (const_string "alu"))) ! (set_attr "mode" "SI")]) ! ! ;; See comment for addsi_1_zext why we do use nonimmediate_operand ! (define_insn "*addsi_3_zext" ! [(set (reg 17) ! (compare (neg:SI (match_operand:SI 2 "general_operand" "rmni")) ! (match_operand:SI 1 "nonimmediate_operand" "%0"))) ! (set (match_operand:DI 0 "register_operand" "=r") ! (zero_extend:DI (plus:SI (match_dup 1) (match_dup 2))))] ! "TARGET_64BIT && ix86_match_ccmode (insn, CCZmode) ! && ix86_binary_operator_ok (PLUS, SImode, operands) ! /* Current assemblers are broken and do not allow @GOTOFF in ! ought but a memory context. */ ! && ! pic_symbolic_operand (operands[2], VOIDmode)" ! { ! switch (get_attr_type (insn)) ! { ! case TYPE_INCDEC: ! if (operands[2] == const1_rtx) ! return "inc{l}\t%k0"; ! else if (operands[2] == constm1_rtx) ! return "dec{l}\t%k0"; ! else ! abort(); ! ! default: ! /* Make things pretty and `subl $4,%eax' rather than `addl $-4, %eax'. ! Exceptions: -128 encodes smaller than 128, so swap sign and op. */ ! if (GET_CODE (operands[2]) == CONST_INT ! && (INTVAL (operands[2]) == 128 ! || (INTVAL (operands[2]) < 0 ! && INTVAL (operands[2]) != -128))) ! { ! operands[2] = GEN_INT (-INTVAL (operands[2])); ! return "sub{l}\t{%2, %k0|%k0, %2}"; ! } ! return "add{l}\t{%2, %k0|%k0, %2}"; ! } ! } [(set (attr "type") (if_then_else (match_operand:SI 2 "incdec_operand" "") (const_string "incdec") *************** *** 4578,4584 **** ; case of overflows, the result is messed up. ; This pattern also don't hold of 0x80000000, since the value overflows ; when negated. ! ; Also carry flag is reversed compared to cmp, so this converison is valid ; only for comparisons not depending on it. (define_insn "*addsi_4" [(set (reg 17) --- 6206,6212 ---- ; case of overflows, the result is messed up. ; This pattern also don't hold of 0x80000000, since the value overflows ; when negated. ! ; Also carry flag is reversed compared to cmp, so this conversion is valid ; only for comparisons not depending on it. (define_insn "*addsi_4" [(set (reg 17) *************** *** 4587,4601 **** (clobber (match_scratch:SI 0 "=rm"))] "ix86_match_ccmode (insn, CCGCmode) && (INTVAL (operands[2]) & 0xffffffff) != 0x80000000" - "* { switch (get_attr_type (insn)) { case TYPE_INCDEC: if (operands[2] == constm1_rtx) ! return \"inc{l}\\t%0\"; else if (operands[2] == const1_rtx) ! return \"dec{l}\\t%0\"; else abort(); --- 6215,6228 ---- (clobber (match_scratch:SI 0 "=rm"))] "ix86_match_ccmode (insn, CCGCmode) && (INTVAL (operands[2]) & 0xffffffff) != 0x80000000" { switch (get_attr_type (insn)) { case TYPE_INCDEC: if (operands[2] == constm1_rtx) ! return "inc{l}\t%0"; else if (operands[2] == const1_rtx) ! return "dec{l}\t%0"; else abort(); *************** *** 4607,4617 **** if ((INTVAL (operands[2]) == -128 || (INTVAL (operands[2]) > 0 && INTVAL (operands[2]) != 128))) ! return \"sub{l}\\t{%2, %0|%0, %2}\"; operands[2] = GEN_INT (-INTVAL (operands[2])); ! return \"add{l}\\t{%2, %0|%0, %2}\"; } ! }" [(set (attr "type") (if_then_else (match_operand:SI 2 "incdec_operand" "") (const_string "incdec") --- 6234,6244 ---- if ((INTVAL (operands[2]) == -128 || (INTVAL (operands[2]) > 0 && INTVAL (operands[2]) != 128))) ! return "sub{l}\t{%2, %0|%0, %2}"; operands[2] = GEN_INT (-INTVAL (operands[2])); ! return "add{l}\t{%2, %0|%0, %2}"; } ! } [(set (attr "type") (if_then_else (match_operand:SI 2 "incdec_operand" "") (const_string "incdec") *************** *** 4628,4636 **** "ix86_match_ccmode (insn, CCGOCmode) && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM) /* Current assemblers are broken and do not allow @GOTOFF in ! ought but a memory context. */ && ! pic_symbolic_operand (operands[2], VOIDmode)" - "* { switch (get_attr_type (insn)) { --- 6255,6262 ---- "ix86_match_ccmode (insn, CCGOCmode) && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM) /* Current assemblers are broken and do not allow @GOTOFF in ! ought but a memory context. */ && ! pic_symbolic_operand (operands[2], VOIDmode)" { switch (get_attr_type (insn)) { *************** *** 4638,4646 **** if (! rtx_equal_p (operands[0], operands[1])) abort (); if (operands[2] == const1_rtx) ! return \"inc{l}\\t%0\"; else if (operands[2] == constm1_rtx) ! return \"dec{l}\\t%0\"; else abort(); --- 6264,6272 ---- if (! rtx_equal_p (operands[0], operands[1])) abort (); if (operands[2] == const1_rtx) ! return "inc{l}\t%0"; else if (operands[2] == constm1_rtx) ! return "dec{l}\t%0"; else abort(); *************** *** 4655,4665 **** && INTVAL (operands[2]) != -128))) { operands[2] = GEN_INT (-INTVAL (operands[2])); ! return \"sub{l}\\t{%2, %0|%0, %2}\"; } ! return \"add{l}\\t{%2, %0|%0, %2}\"; } ! }" [(set (attr "type") (if_then_else (match_operand:SI 2 "incdec_operand" "") (const_string "incdec") --- 6281,6291 ---- && INTVAL (operands[2]) != -128))) { operands[2] = GEN_INT (-INTVAL (operands[2])); ! return "sub{l}\t{%2, %0|%0, %2}"; } ! return "add{l}\t{%2, %0|%0, %2}"; } ! } [(set (attr "type") (if_then_else (match_operand:SI 2 "incdec_operand" "") (const_string "incdec") *************** *** 4685,4703 **** (clobber (reg:CC 17))] "!TARGET_PARTIAL_REG_STALL && ix86_binary_operator_ok (PLUS, HImode, operands)" - "* { switch (get_attr_type (insn)) { case TYPE_LEA: ! return \"#\"; case TYPE_INCDEC: if (operands[2] == const1_rtx) ! return \"inc{w}\\t%0\"; else if (operands[2] == constm1_rtx || (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 65535)) ! return \"dec{w}\\t%0\"; abort(); default: --- 6311,6328 ---- (clobber (reg:CC 17))] "!TARGET_PARTIAL_REG_STALL && ix86_binary_operator_ok (PLUS, HImode, operands)" { switch (get_attr_type (insn)) { case TYPE_LEA: ! return "#"; case TYPE_INCDEC: if (operands[2] == const1_rtx) ! return "inc{w}\t%0"; else if (operands[2] == constm1_rtx || (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 65535)) ! return "dec{w}\t%0"; abort(); default: *************** *** 4709,4719 **** && INTVAL (operands[2]) != -128))) { operands[2] = GEN_INT (-INTVAL (operands[2])); ! return \"sub{w}\\t{%2, %0|%0, %2}\"; } ! return \"add{w}\\t{%2, %0|%0, %2}\"; } ! }" [(set (attr "type") (if_then_else (eq_attr "alternative" "2") (const_string "lea") --- 6334,6344 ---- && INTVAL (operands[2]) != -128))) { operands[2] = GEN_INT (-INTVAL (operands[2])); ! return "sub{w}\t{%2, %0|%0, %2}"; } ! return "add{w}\t{%2, %0|%0, %2}"; } ! } [(set (attr "type") (if_then_else (eq_attr "alternative" "2") (const_string "lea") *************** *** 4729,4745 **** (clobber (reg:CC 17))] "TARGET_PARTIAL_REG_STALL && ix86_binary_operator_ok (PLUS, HImode, operands)" - "* { switch (get_attr_type (insn)) { case TYPE_INCDEC: if (operands[2] == const1_rtx) ! return \"inc{w}\\t%0\"; else if (operands[2] == constm1_rtx || (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 65535)) ! return \"dec{w}\\t%0\"; abort(); default: --- 6354,6369 ---- (clobber (reg:CC 17))] "TARGET_PARTIAL_REG_STALL && ix86_binary_operator_ok (PLUS, HImode, operands)" { switch (get_attr_type (insn)) { case TYPE_INCDEC: if (operands[2] == const1_rtx) ! return "inc{w}\t%0"; else if (operands[2] == constm1_rtx || (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 65535)) ! return "dec{w}\t%0"; abort(); default: *************** *** 4751,4761 **** && INTVAL (operands[2]) != -128))) { operands[2] = GEN_INT (-INTVAL (operands[2])); ! return \"sub{w}\\t{%2, %0|%0, %2}\"; } ! return \"add{w}\\t{%2, %0|%0, %2}\"; } ! }" [(set (attr "type") (if_then_else (match_operand:HI 2 "incdec_operand" "") (const_string "incdec") --- 6375,6385 ---- && INTVAL (operands[2]) != -128))) { operands[2] = GEN_INT (-INTVAL (operands[2])); ! return "sub{w}\t{%2, %0|%0, %2}"; } ! return "add{w}\t{%2, %0|%0, %2}"; } ! } [(set (attr "type") (if_then_else (match_operand:HI 2 "incdec_operand" "") (const_string "incdec") *************** *** 4772,4788 **** (plus:HI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) && ix86_binary_operator_ok (PLUS, HImode, operands)" - "* { switch (get_attr_type (insn)) { case TYPE_INCDEC: if (operands[2] == const1_rtx) ! return \"inc{w}\\t%0\"; else if (operands[2] == constm1_rtx || (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 65535)) ! return \"dec{w}\\t%0\"; abort(); default: --- 6396,6411 ---- (plus:HI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) && ix86_binary_operator_ok (PLUS, HImode, operands)" { switch (get_attr_type (insn)) { case TYPE_INCDEC: if (operands[2] == const1_rtx) ! return "inc{w}\t%0"; else if (operands[2] == constm1_rtx || (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 65535)) ! return "dec{w}\t%0"; abort(); default: *************** *** 4794,4804 **** && INTVAL (operands[2]) != -128))) { operands[2] = GEN_INT (-INTVAL (operands[2])); ! return \"sub{w}\\t{%2, %0|%0, %2}\"; } ! return \"add{w}\\t{%2, %0|%0, %2}\"; } ! }" [(set (attr "type") (if_then_else (match_operand:HI 2 "incdec_operand" "") (const_string "incdec") --- 6417,6427 ---- && INTVAL (operands[2]) != -128))) { operands[2] = GEN_INT (-INTVAL (operands[2])); ! return "sub{w}\t{%2, %0|%0, %2}"; } ! return "add{w}\t{%2, %0|%0, %2}"; } ! } [(set (attr "type") (if_then_else (match_operand:HI 2 "incdec_operand" "") (const_string "incdec") *************** *** 4812,4828 **** (clobber (match_scratch:HI 0 "=r"))] "ix86_match_ccmode (insn, CCZmode) && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" - "* { switch (get_attr_type (insn)) { case TYPE_INCDEC: if (operands[2] == const1_rtx) ! return \"inc{w}\\t%0\"; else if (operands[2] == constm1_rtx || (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 65535)) ! return \"dec{w}\\t%0\"; abort(); default: --- 6435,6450 ---- (clobber (match_scratch:HI 0 "=r"))] "ix86_match_ccmode (insn, CCZmode) && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" { switch (get_attr_type (insn)) { case TYPE_INCDEC: if (operands[2] == const1_rtx) ! return "inc{w}\t%0"; else if (operands[2] == constm1_rtx || (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 65535)) ! return "dec{w}\t%0"; abort(); default: *************** *** 4834,4844 **** && INTVAL (operands[2]) != -128))) { operands[2] = GEN_INT (-INTVAL (operands[2])); ! return \"sub{w}\\t{%2, %0|%0, %2}\"; } ! return \"add{w}\\t{%2, %0|%0, %2}\"; } ! }" [(set (attr "type") (if_then_else (match_operand:HI 2 "incdec_operand" "") (const_string "incdec") --- 6456,6466 ---- && INTVAL (operands[2]) != -128))) { operands[2] = GEN_INT (-INTVAL (operands[2])); ! return "sub{w}\t{%2, %0|%0, %2}"; } ! return "add{w}\t{%2, %0|%0, %2}"; } ! } [(set (attr "type") (if_then_else (match_operand:HI 2 "incdec_operand" "") (const_string "incdec") *************** *** 4853,4859 **** (clobber (match_scratch:HI 0 "=rm"))] "ix86_match_ccmode (insn, CCGCmode) && (INTVAL (operands[2]) & 0xffff) != 0x8000" - "* { switch (get_attr_type (insn)) { --- 6475,6480 ---- *************** *** 4861,4869 **** if (operands[2] == constm1_rtx || (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 65535)) ! return \"inc{w}\\t%0\"; else if (operands[2] == const1_rtx) ! return \"dec{w}\\t%0\"; else abort(); --- 6482,6490 ---- if (operands[2] == constm1_rtx || (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 65535)) ! return "inc{w}\t%0"; else if (operands[2] == const1_rtx) ! return "dec{w}\t%0"; else abort(); *************** *** 4875,4885 **** if ((INTVAL (operands[2]) == -128 || (INTVAL (operands[2]) > 0 && INTVAL (operands[2]) != 128))) ! return \"sub{w}\\t{%2, %0|%0, %2}\"; operands[2] = GEN_INT (-INTVAL (operands[2])); ! return \"add{w}\\t{%2, %0|%0, %2}\"; } ! }" [(set (attr "type") (if_then_else (match_operand:HI 2 "incdec_operand" "") (const_string "incdec") --- 6496,6506 ---- if ((INTVAL (operands[2]) == -128 || (INTVAL (operands[2]) > 0 && INTVAL (operands[2]) != 128))) ! return "sub{w}\t{%2, %0|%0, %2}"; operands[2] = GEN_INT (-INTVAL (operands[2])); ! return "add{w}\t{%2, %0|%0, %2}"; } ! } [(set (attr "type") (if_then_else (match_operand:HI 2 "incdec_operand" "") (const_string "incdec") *************** *** 4896,4912 **** (clobber (match_scratch:HI 0 "=r"))] "ix86_match_ccmode (insn, CCGOCmode) && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" - "* { switch (get_attr_type (insn)) { case TYPE_INCDEC: if (operands[2] == const1_rtx) ! return \"inc{w}\\t%0\"; else if (operands[2] == constm1_rtx || (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 65535)) ! return \"dec{w}\\t%0\"; abort(); default: --- 6517,6532 ---- (clobber (match_scratch:HI 0 "=r"))] "ix86_match_ccmode (insn, CCGOCmode) && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" { switch (get_attr_type (insn)) { case TYPE_INCDEC: if (operands[2] == const1_rtx) ! return "inc{w}\t%0"; else if (operands[2] == constm1_rtx || (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 65535)) ! return "dec{w}\t%0"; abort(); default: *************** *** 4918,4928 **** && INTVAL (operands[2]) != -128))) { operands[2] = GEN_INT (-INTVAL (operands[2])); ! return \"sub{w}\\t{%2, %0|%0, %2}\"; } ! return \"add{w}\\t{%2, %0|%0, %2}\"; } ! }" [(set (attr "type") (if_then_else (match_operand:HI 2 "incdec_operand" "") (const_string "incdec") --- 6538,6548 ---- && INTVAL (operands[2]) != -128))) { operands[2] = GEN_INT (-INTVAL (operands[2])); ! return "sub{w}\t{%2, %0|%0, %2}"; } ! return "add{w}\t{%2, %0|%0, %2}"; } ! } [(set (attr "type") (if_then_else (match_operand:HI 2 "incdec_operand" "") (const_string "incdec") *************** *** 4945,4964 **** (clobber (reg:CC 17))] "!TARGET_PARTIAL_REG_STALL && ix86_binary_operator_ok (PLUS, QImode, operands)" - "* { int widen = (which_alternative == 2); switch (get_attr_type (insn)) { case TYPE_LEA: ! return \"#\"; case TYPE_INCDEC: if (operands[2] == const1_rtx) ! return widen ? \"inc{l}\\t%k0\" : \"inc{b}\\t%0\"; else if (operands[2] == constm1_rtx || (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 255)) ! return widen ? \"dec{l}\\t%k0\" : \"dec{b}\\t%0\"; abort(); default: --- 6565,6583 ---- (clobber (reg:CC 17))] "!TARGET_PARTIAL_REG_STALL && ix86_binary_operator_ok (PLUS, QImode, operands)" { int widen = (which_alternative == 2); switch (get_attr_type (insn)) { case TYPE_LEA: ! return "#"; case TYPE_INCDEC: if (operands[2] == const1_rtx) ! return widen ? "inc{l}\t%k0" : "inc{b}\t%0"; else if (operands[2] == constm1_rtx || (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 255)) ! return widen ? "dec{l}\t%k0" : "dec{b}\t%0"; abort(); default: *************** *** 4971,4986 **** { operands[2] = GEN_INT (-INTVAL (operands[2])); if (widen) ! return \"sub{l}\\t{%2, %k0|%k0, %2}\"; else ! return \"sub{b}\\t{%2, %0|%0, %2}\"; } if (widen) ! return \"add{l}\\t{%k2, %k0|%k0, %k2}\"; else ! return \"add{b}\\t{%2, %0|%0, %2}\"; } ! }" [(set (attr "type") (if_then_else (eq_attr "alternative" "3") (const_string "lea") --- 6590,6605 ---- { operands[2] = GEN_INT (-INTVAL (operands[2])); if (widen) ! return "sub{l}\t{%2, %k0|%k0, %2}"; else ! return "sub{b}\t{%2, %0|%0, %2}"; } if (widen) ! return "add{l}\t{%k2, %k0|%k0, %k2}"; else ! return "add{b}\t{%2, %0|%0, %2}"; } ! } [(set (attr "type") (if_then_else (eq_attr "alternative" "3") (const_string "lea") *************** *** 4996,5013 **** (clobber (reg:CC 17))] "TARGET_PARTIAL_REG_STALL && ix86_binary_operator_ok (PLUS, QImode, operands)" - "* { int widen = (which_alternative == 2); switch (get_attr_type (insn)) { case TYPE_INCDEC: if (operands[2] == const1_rtx) ! return widen ? \"inc{l}\\t%k0\" : \"inc{b}\\t%0\"; else if (operands[2] == constm1_rtx || (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 255)) ! return widen ? \"dec{l}\\t%k0\" : \"dec{b}\\t%0\"; abort(); default: --- 6615,6631 ---- (clobber (reg:CC 17))] "TARGET_PARTIAL_REG_STALL && ix86_binary_operator_ok (PLUS, QImode, operands)" { int widen = (which_alternative == 2); switch (get_attr_type (insn)) { case TYPE_INCDEC: if (operands[2] == const1_rtx) ! return widen ? "inc{l}\t%k0" : "inc{b}\t%0"; else if (operands[2] == constm1_rtx || (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 255)) ! return widen ? "dec{l}\t%k0" : "dec{b}\t%0"; abort(); default: *************** *** 5020,5035 **** { operands[2] = GEN_INT (-INTVAL (operands[2])); if (widen) ! return \"sub{l}\\t{%2, %k0|%k0, %2}\"; else ! return \"sub{b}\\t{%2, %0|%0, %2}\"; } if (widen) ! return \"add{l}\\t{%k2, %k0|%k0, %k2}\"; else ! return \"add{b}\\t{%2, %0|%0, %2}\"; } ! }" [(set (attr "type") (if_then_else (match_operand:QI 2 "incdec_operand" "") (const_string "incdec") --- 6638,6653 ---- { operands[2] = GEN_INT (-INTVAL (operands[2])); if (widen) ! return "sub{l}\t{%2, %k0|%k0, %2}"; else ! return "sub{b}\t{%2, %0|%0, %2}"; } if (widen) ! return "add{l}\t{%k2, %k0|%k0, %k2}"; else ! return "add{b}\t{%2, %0|%0, %2}"; } ! } [(set (attr "type") (if_then_else (match_operand:QI 2 "incdec_operand" "") (const_string "incdec") *************** *** 5046,5062 **** (plus:QI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) && ix86_binary_operator_ok (PLUS, QImode, operands)" - "* { switch (get_attr_type (insn)) { case TYPE_INCDEC: if (operands[2] == const1_rtx) ! return \"inc{b}\\t%0\"; else if (operands[2] == constm1_rtx || (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 255)) ! return \"dec{b}\\t%0\"; abort(); default: --- 6664,6679 ---- (plus:QI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) && ix86_binary_operator_ok (PLUS, QImode, operands)" { switch (get_attr_type (insn)) { case TYPE_INCDEC: if (operands[2] == const1_rtx) ! return "inc{b}\t%0"; else if (operands[2] == constm1_rtx || (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 255)) ! return "dec{b}\t%0"; abort(); default: *************** *** 5065,5075 **** && INTVAL (operands[2]) < 0) { operands[2] = GEN_INT (-INTVAL (operands[2])); ! return \"sub{b}\\t{%2, %0|%0, %2}\"; } ! return \"add{b}\\t{%2, %0|%0, %2}\"; } ! }" [(set (attr "type") (if_then_else (match_operand:QI 2 "incdec_operand" "") (const_string "incdec") --- 6682,6692 ---- && INTVAL (operands[2]) < 0) { operands[2] = GEN_INT (-INTVAL (operands[2])); ! return "sub{b}\t{%2, %0|%0, %2}"; } ! return "add{b}\t{%2, %0|%0, %2}"; } ! } [(set (attr "type") (if_then_else (match_operand:QI 2 "incdec_operand" "") (const_string "incdec") *************** *** 5083,5099 **** (clobber (match_scratch:QI 0 "=q"))] "ix86_match_ccmode (insn, CCZmode) && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" - "* { switch (get_attr_type (insn)) { case TYPE_INCDEC: if (operands[2] == const1_rtx) ! return \"inc{b}\\t%0\"; else if (operands[2] == constm1_rtx || (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 255)) ! return \"dec{b}\\t%0\"; abort(); default: --- 6700,6715 ---- (clobber (match_scratch:QI 0 "=q"))] "ix86_match_ccmode (insn, CCZmode) && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" { switch (get_attr_type (insn)) { case TYPE_INCDEC: if (operands[2] == const1_rtx) ! return "inc{b}\t%0"; else if (operands[2] == constm1_rtx || (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 255)) ! return "dec{b}\t%0"; abort(); default: *************** *** 5102,5112 **** && INTVAL (operands[2]) < 0) { operands[2] = GEN_INT (-INTVAL (operands[2])); ! return \"sub{b}\\t{%2, %0|%0, %2}\"; } ! return \"add{b}\\t{%2, %0|%0, %2}\"; } ! }" [(set (attr "type") (if_then_else (match_operand:QI 2 "incdec_operand" "") (const_string "incdec") --- 6718,6728 ---- && INTVAL (operands[2]) < 0) { operands[2] = GEN_INT (-INTVAL (operands[2])); ! return "sub{b}\t{%2, %0|%0, %2}"; } ! return "add{b}\t{%2, %0|%0, %2}"; } ! } [(set (attr "type") (if_then_else (match_operand:QI 2 "incdec_operand" "") (const_string "incdec") *************** *** 5121,5127 **** (clobber (match_scratch:QI 0 "=qm"))] "ix86_match_ccmode (insn, CCGCmode) && (INTVAL (operands[2]) & 0xff) != 0x80" - "* { switch (get_attr_type (insn)) { --- 6737,6742 ---- *************** *** 5129,5137 **** if (operands[2] == constm1_rtx || (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 255)) ! return \"inc{b}\\t%0\"; else if (operands[2] == const1_rtx) ! return \"dec{b}\\t%0\"; else abort(); --- 6744,6752 ---- if (operands[2] == constm1_rtx || (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 255)) ! return "inc{b}\t%0"; else if (operands[2] == const1_rtx) ! return "dec{b}\t%0"; else abort(); *************** *** 5141,5151 **** if (INTVAL (operands[2]) < 0) { operands[2] = GEN_INT (-INTVAL (operands[2])); ! return \"add{b}\\t{%2, %0|%0, %2}\"; } ! return \"sub{b}\\t{%2, %0|%0, %2}\"; } ! }" [(set (attr "type") (if_then_else (match_operand:HI 2 "incdec_operand" "") (const_string "incdec") --- 6756,6766 ---- if (INTVAL (operands[2]) < 0) { operands[2] = GEN_INT (-INTVAL (operands[2])); ! return "add{b}\t{%2, %0|%0, %2}"; } ! return "sub{b}\t{%2, %0|%0, %2}"; } ! } [(set (attr "type") (if_then_else (match_operand:HI 2 "incdec_operand" "") (const_string "incdec") *************** *** 5162,5178 **** (clobber (match_scratch:QI 0 "=q"))] "ix86_match_ccmode (insn, CCGOCmode) && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" - "* { switch (get_attr_type (insn)) { case TYPE_INCDEC: if (operands[2] == const1_rtx) ! return \"inc{b}\\t%0\"; else if (operands[2] == constm1_rtx || (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 255)) ! return \"dec{b}\\t%0\"; abort(); default: --- 6777,6792 ---- (clobber (match_scratch:QI 0 "=q"))] "ix86_match_ccmode (insn, CCGOCmode) && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" { switch (get_attr_type (insn)) { case TYPE_INCDEC: if (operands[2] == const1_rtx) ! return "inc{b}\t%0"; else if (operands[2] == constm1_rtx || (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 255)) ! return "dec{b}\t%0"; abort(); default: *************** *** 5181,5191 **** && INTVAL (operands[2]) < 0) { operands[2] = GEN_INT (-INTVAL (operands[2])); ! return \"sub{b}\\t{%2, %0|%0, %2}\"; } ! return \"add{b}\\t{%2, %0|%0, %2}\"; } ! }" [(set (attr "type") (if_then_else (match_operand:QI 2 "incdec_operand" "") (const_string "incdec") --- 6795,6805 ---- && INTVAL (operands[2]) < 0) { operands[2] = GEN_INT (-INTVAL (operands[2])); ! return "sub{b}\t{%2, %0|%0, %2}"; } ! return "add{b}\t{%2, %0|%0, %2}"; } ! } [(set (attr "type") (if_then_else (match_operand:QI 2 "incdec_operand" "") (const_string "incdec") *************** *** 5194,5200 **** (define_insn "addqi_ext_1" ! [(set (zero_extract:SI (match_operand 0 "ext_register_operand" "=q") (const_int 8) (const_int 8)) (plus:SI --- 6808,6814 ---- (define_insn "addqi_ext_1" ! [(set (zero_extract:SI (match_operand 0 "ext_register_operand" "=Q") (const_int 8) (const_int 8)) (plus:SI *************** *** 5202,5227 **** (match_operand 1 "ext_register_operand" "0") (const_int 8) (const_int 8)) ! (match_operand:QI 2 "general_operand" "qmn"))) (clobber (reg:CC 17))] ! "" ! "* { switch (get_attr_type (insn)) { case TYPE_INCDEC: if (operands[2] == const1_rtx) ! return \"inc{b}\\t%h0\"; else if (operands[2] == constm1_rtx || (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 255)) ! return \"dec{b}\\t%h0\"; abort(); default: ! return \"add{b}\\t{%2, %h0|%h0, %2}\"; } ! }" [(set (attr "type") (if_then_else (match_operand:QI 2 "incdec_operand" "") (const_string "incdec") --- 6816,6874 ---- (match_operand 1 "ext_register_operand" "0") (const_int 8) (const_int 8)) ! (match_operand:QI 2 "general_operand" "Qmn"))) (clobber (reg:CC 17))] ! "!TARGET_64BIT" { switch (get_attr_type (insn)) { case TYPE_INCDEC: if (operands[2] == const1_rtx) ! return "inc{b}\t%h0"; else if (operands[2] == constm1_rtx || (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 255)) ! return "dec{b}\t%h0"; abort(); default: ! return "add{b}\t{%2, %h0|%h0, %2}"; } ! } ! [(set (attr "type") ! (if_then_else (match_operand:QI 2 "incdec_operand" "") ! (const_string "incdec") ! (const_string "alu"))) ! (set_attr "mode" "QI")]) ! ! (define_insn "*addqi_ext_1_rex64" ! [(set (zero_extract:SI (match_operand 0 "ext_register_operand" "=Q") ! (const_int 8) ! (const_int 8)) ! (plus:SI ! (zero_extract:SI ! (match_operand 1 "ext_register_operand" "0") ! (const_int 8) ! (const_int 8)) ! (match_operand:QI 2 "nonmemory_operand" "Qn"))) ! (clobber (reg:CC 17))] ! "TARGET_64BIT" ! { ! switch (get_attr_type (insn)) ! { ! case TYPE_INCDEC: ! if (operands[2] == const1_rtx) ! return "inc{b}\t%h0"; ! else if (operands[2] == constm1_rtx ! || (GET_CODE (operands[2]) == CONST_INT ! && INTVAL (operands[2]) == 255)) ! return "dec{b}\t%h0"; ! abort(); ! ! default: ! return "add{b}\t{%2, %h0|%h0, %2}"; ! } ! } [(set (attr "type") (if_then_else (match_operand:QI 2 "incdec_operand" "") (const_string "incdec") *************** *** 5229,5235 **** (set_attr "mode" "QI")]) (define_insn "*addqi_ext_2" ! [(set (zero_extract:SI (match_operand 0 "ext_register_operand" "=q") (const_int 8) (const_int 8)) (plus:SI --- 6876,6882 ---- (set_attr "mode" "QI")]) (define_insn "*addqi_ext_2" ! [(set (zero_extract:SI (match_operand 0 "ext_register_operand" "=Q") (const_int 8) (const_int 8)) (plus:SI *************** *** 5238,5249 **** (const_int 8) (const_int 8)) (zero_extract:SI ! (match_operand 2 "ext_register_operand" "q") (const_int 8) (const_int 8)))) (clobber (reg:CC 17))] "" ! "add{b}\\t{%h2, %h0|%h0, %h2}" [(set_attr "type" "alu") (set_attr "mode" "QI")]) --- 6885,6896 ---- (const_int 8) (const_int 8)) (zero_extract:SI ! (match_operand 2 "ext_register_operand" "Q") (const_int 8) (const_int 8)))) (clobber (reg:CC 17))] "" ! "add{b}\t{%h2, %h0|%h0, %h2}" [(set_attr "type" "alu") (set_attr "mode" "QI")]) *************** *** 5253,5259 **** [(set (match_operand:XF 0 "register_operand" "") (plus:XF (match_operand:XF 1 "register_operand" "") (match_operand:XF 2 "register_operand" "")))] ! "TARGET_80387" "") (define_expand "addtf3" --- 6900,6906 ---- [(set (match_operand:XF 0 "register_operand" "") (plus:XF (match_operand:XF 1 "register_operand" "") (match_operand:XF 2 "register_operand" "")))] ! "!TARGET_64BIT && TARGET_80387" "") (define_expand "addtf3" *************** *** 5267,5293 **** [(set (match_operand:DF 0 "register_operand" "") (plus:DF (match_operand:DF 1 "register_operand" "") (match_operand:DF 2 "nonimmediate_operand" "")))] ! "TARGET_80387" "") (define_expand "addsf3" [(set (match_operand:SF 0 "register_operand" "") (plus:SF (match_operand:SF 1 "register_operand" "") (match_operand:SF 2 "nonimmediate_operand" "")))] ! "TARGET_80387" "") ;; Subtract instructions - ;; %%% define_expand from the very first? ;; %%% splits for subsidi3 ! (define_insn "subdi3" [(set (match_operand:DI 0 "nonimmediate_operand" "=r,o") (minus:DI (match_operand:DI 1 "nonimmediate_operand" "0,0") (match_operand:DI 2 "general_operand" "roiF,riF"))) (clobber (reg:CC 17))] ! "" "#") (define_split --- 6914,6947 ---- [(set (match_operand:DF 0 "register_operand" "") (plus:DF (match_operand:DF 1 "register_operand" "") (match_operand:DF 2 "nonimmediate_operand" "")))] ! "TARGET_80387 || (TARGET_SSE2 && TARGET_SSE_MATH)" "") (define_expand "addsf3" [(set (match_operand:SF 0 "register_operand" "") (plus:SF (match_operand:SF 1 "register_operand" "") (match_operand:SF 2 "nonimmediate_operand" "")))] ! "TARGET_80387 || TARGET_SSE_MATH" "") ;; Subtract instructions ;; %%% splits for subsidi3 ! (define_expand "subdi3" ! [(parallel [(set (match_operand:DI 0 "nonimmediate_operand" "") ! (minus:DI (match_operand:DI 1 "nonimmediate_operand" "") ! (match_operand:DI 2 "x86_64_general_operand" ""))) ! (clobber (reg:CC 17))])] ! "" ! "ix86_expand_binary_operator (MINUS, DImode, operands); DONE;") ! ! (define_insn "*subdi3_1" [(set (match_operand:DI 0 "nonimmediate_operand" "=r,o") (minus:DI (match_operand:DI 1 "nonimmediate_operand" "0,0") (match_operand:DI 2 "general_operand" "roiF,riF"))) (clobber (reg:CC 17))] ! "!TARGET_64BIT" "#") (define_split *************** *** 5295,5301 **** (minus:DI (match_operand:DI 1 "nonimmediate_operand" "") (match_operand:DI 2 "general_operand" ""))) (clobber (reg:CC 17))] ! "reload_completed" [(parallel [(set (reg:CC 17) (compare:CC (match_dup 1) (match_dup 2))) (set (match_dup 0) (minus:SI (match_dup 1) (match_dup 2)))]) (parallel [(set (match_dup 3) --- 6949,6955 ---- (minus:DI (match_operand:DI 1 "nonimmediate_operand" "") (match_operand:DI 2 "general_operand" ""))) (clobber (reg:CC 17))] ! "!TARGET_64BIT && reload_completed" [(parallel [(set (reg:CC 17) (compare:CC (match_dup 1) (match_dup 2))) (set (match_dup 0) (minus:SI (match_dup 1) (match_dup 2)))]) (parallel [(set (match_dup 3) *************** *** 5307,5312 **** --- 6961,7016 ---- split_di (operands+1, 1, operands+1, operands+4); split_di (operands+2, 1, operands+2, operands+5);") + (define_insn "subdi3_carry_rex64" + [(set (match_operand:DI 0 "nonimmediate_operand" "=rm,r") + (minus:DI (match_operand:DI 1 "nonimmediate_operand" "0,0") + (plus:DI (ltu:DI (reg:CC 17) (const_int 0)) + (match_operand:DI 2 "x86_64_general_operand" "re,rm")))) + (clobber (reg:CC 17))] + "TARGET_64BIT && ix86_binary_operator_ok (MINUS, DImode, operands)" + "sbb{q}\t{%2, %0|%0, %2}" + [(set_attr "type" "alu") + (set_attr "pent_pair" "pu") + (set_attr "ppro_uops" "few") + (set_attr "mode" "DI")]) + + (define_insn "*subdi_1_rex64" + [(set (match_operand:DI 0 "nonimmediate_operand" "=rm,r") + (minus:DI (match_operand:DI 1 "nonimmediate_operand" "0,0") + (match_operand:DI 2 "x86_64_general_operand" "re,rm"))) + (clobber (reg:CC 17))] + "TARGET_64BIT && ix86_binary_operator_ok (MINUS, DImode, operands)" + "sub{q}\t{%2, %0|%0, %2}" + [(set_attr "type" "alu") + (set_attr "mode" "DI")]) + + (define_insn "*subdi_2_rex64" + [(set (reg 17) + (compare + (minus:DI (match_operand:DI 1 "nonimmediate_operand" "0,0") + (match_operand:DI 2 "x86_64_general_operand" "re,rm")) + (const_int 0))) + (set (match_operand:DI 0 "nonimmediate_operand" "=rm,r") + (minus:DI (match_dup 1) (match_dup 2)))] + "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode) + && ix86_binary_operator_ok (MINUS, DImode, operands)" + "sub{q}\t{%2, %0|%0, %2}" + [(set_attr "type" "alu") + (set_attr "mode" "DI")]) + + (define_insn "*subdi_3_rex63" + [(set (reg 17) + (compare (match_operand:DI 1 "nonimmediate_operand" "0,0") + (match_operand:DI 2 "x86_64_general_operand" "re,rm"))) + (set (match_operand:DI 0 "nonimmediate_operand" "=rm,r") + (minus:DI (match_dup 1) (match_dup 2)))] + "TARGET_64BIT && ix86_match_ccmode (insn, CCmode) + && ix86_binary_operator_ok (MINUS, SImode, operands)" + "sub{q}\t{%2, %0|%0, %2}" + [(set_attr "type" "alu") + (set_attr "mode" "DI")]) + + (define_insn "subsi3_carry" [(set (match_operand:SI 0 "nonimmediate_operand" "=rm,r") (minus:SI (match_operand:SI 1 "nonimmediate_operand" "0,0") *************** *** 5314,5320 **** (match_operand:SI 2 "general_operand" "ri,rm")))) (clobber (reg:CC 17))] "ix86_binary_operator_ok (MINUS, SImode, operands)" ! "sbb{l}\\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "pent_pair" "pu") (set_attr "ppro_uops" "few") --- 7018,7038 ---- (match_operand:SI 2 "general_operand" "ri,rm")))) (clobber (reg:CC 17))] "ix86_binary_operator_ok (MINUS, SImode, operands)" ! "sbb{l}\t{%2, %0|%0, %2}" ! [(set_attr "type" "alu") ! (set_attr "pent_pair" "pu") ! (set_attr "ppro_uops" "few") ! (set_attr "mode" "SI")]) ! ! (define_insn "subsi3_carry_zext" ! [(set (match_operand:DI 0 "register_operand" "=rm,r") ! (zero_extend:DI ! (minus:SI (match_operand:SI 1 "register_operand" "0,0") ! (plus:SI (ltu:SI (reg:CC 17) (const_int 0)) ! (match_operand:SI 2 "general_operand" "ri,rm"))))) ! (clobber (reg:CC 17))] ! "TARGET_64BIT && ix86_binary_operator_ok (MINUS, SImode, operands)" ! "sbb{l}\t{%2, %k0|%k0, %2}" [(set_attr "type" "alu") (set_attr "pent_pair" "pu") (set_attr "ppro_uops" "few") *************** *** 5334,5340 **** (match_operand:SI 2 "general_operand" "ri,rm"))) (clobber (reg:CC 17))] "ix86_binary_operator_ok (MINUS, SImode, operands)" ! "sub{l}\\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "SI")]) --- 7052,7069 ---- (match_operand:SI 2 "general_operand" "ri,rm"))) (clobber (reg:CC 17))] "ix86_binary_operator_ok (MINUS, SImode, operands)" ! "sub{l}\t{%2, %0|%0, %2}" ! [(set_attr "type" "alu") ! (set_attr "mode" "SI")]) ! ! (define_insn "*subsi_1_zext" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (zero_extend:DI ! (minus:SI (match_operand:SI 1 "register_operand" "0") ! (match_operand:SI 2 "general_operand" "rim")))) ! (clobber (reg:CC 17))] ! "TARGET_64BIT && ix86_binary_operator_ok (MINUS, SImode, operands)" ! "sub{l}\t{%2, %k0|%k0, %2}" [(set_attr "type" "alu") (set_attr "mode" "SI")]) *************** *** 5348,5354 **** (minus:SI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) && ix86_binary_operator_ok (MINUS, SImode, operands)" ! "sub{l}\\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "SI")]) --- 7077,7099 ---- (minus:SI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) && ix86_binary_operator_ok (MINUS, SImode, operands)" ! "sub{l}\t{%2, %0|%0, %2}" ! [(set_attr "type" "alu") ! (set_attr "mode" "SI")]) ! ! (define_insn "*subsi_2_zext" ! [(set (reg 17) ! (compare ! (minus:SI (match_operand:SI 1 "register_operand" "0") ! (match_operand:SI 2 "general_operand" "rim")) ! (const_int 0))) ! (set (match_operand:DI 0 "register_operand" "=r") ! (zero_extend:DI ! (minus:SI (match_dup 1) ! (match_dup 2))))] ! "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode) ! && ix86_binary_operator_ok (MINUS, SImode, operands)" ! "sub{l}\t{%2, %k0|%k0, %2}" [(set_attr "type" "alu") (set_attr "mode" "SI")]) *************** *** 5360,5369 **** (minus:SI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCmode) && ix86_binary_operator_ok (MINUS, SImode, operands)" ! "sub{l}\\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "SI")]) (define_expand "subhi3" [(parallel [(set (match_operand:HI 0 "nonimmediate_operand" "") (minus:HI (match_operand:HI 1 "nonimmediate_operand" "") --- 7105,7128 ---- (minus:SI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCmode) && ix86_binary_operator_ok (MINUS, SImode, operands)" ! "sub{l}\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "SI")]) + (define_insn "*subsi_3_zext" + [(set (reg 17) + (compare (match_operand:SI 1 "nonimmediate_operand" "0") + (match_operand:SI 2 "general_operand" "rim"))) + (set (match_operand:DI 0 "register_operand" "=r") + (zero_extend:DI + (minus:SI (match_dup 1) + (match_dup 2))))] + "TARGET_64BIT && ix86_match_ccmode (insn, CCmode) + && ix86_binary_operator_ok (MINUS, SImode, operands)" + "sub{q}\t{%2, %0|%0, %2}" + [(set_attr "type" "alu") + (set_attr "mode" "DI")]) + (define_expand "subhi3" [(parallel [(set (match_operand:HI 0 "nonimmediate_operand" "") (minus:HI (match_operand:HI 1 "nonimmediate_operand" "") *************** *** 5378,5384 **** (match_operand:HI 2 "general_operand" "ri,rm"))) (clobber (reg:CC 17))] "ix86_binary_operator_ok (MINUS, HImode, operands)" ! "sub{w}\\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "HI")]) --- 7137,7143 ---- (match_operand:HI 2 "general_operand" "ri,rm"))) (clobber (reg:CC 17))] "ix86_binary_operator_ok (MINUS, HImode, operands)" ! "sub{w}\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "HI")]) *************** *** 5392,5398 **** (minus:HI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) && ix86_binary_operator_ok (MINUS, HImode, operands)" ! "sub{w}\\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "HI")]) --- 7151,7157 ---- (minus:HI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) && ix86_binary_operator_ok (MINUS, HImode, operands)" ! "sub{w}\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "HI")]) *************** *** 5404,5410 **** (minus:HI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCmode) && ix86_binary_operator_ok (MINUS, HImode, operands)" ! "sub{w}\\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "HI")]) --- 7163,7169 ---- (minus:HI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCmode) && ix86_binary_operator_ok (MINUS, HImode, operands)" ! "sub{w}\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "HI")]) *************** *** 5422,5428 **** (match_operand:QI 2 "general_operand" "qn,qmn"))) (clobber (reg:CC 17))] "ix86_binary_operator_ok (MINUS, QImode, operands)" ! "sub{b}\\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "QI")]) --- 7181,7187 ---- (match_operand:QI 2 "general_operand" "qn,qmn"))) (clobber (reg:CC 17))] "ix86_binary_operator_ok (MINUS, QImode, operands)" ! "sub{b}\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "QI")]) *************** *** 5436,5442 **** (minus:HI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) && ix86_binary_operator_ok (MINUS, QImode, operands)" ! "sub{b}\\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "QI")]) --- 7195,7201 ---- (minus:HI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) && ix86_binary_operator_ok (MINUS, QImode, operands)" ! "sub{b}\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "QI")]) *************** *** 5448,5454 **** (minus:HI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCmode) && ix86_binary_operator_ok (MINUS, QImode, operands)" ! "sub{b}\\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "QI")]) --- 7207,7213 ---- (minus:HI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCmode) && ix86_binary_operator_ok (MINUS, QImode, operands)" ! "sub{b}\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "QI")]) *************** *** 5458,5464 **** [(set (match_operand:XF 0 "register_operand" "") (minus:XF (match_operand:XF 1 "register_operand" "") (match_operand:XF 2 "register_operand" "")))] ! "TARGET_80387" "") (define_expand "subtf3" --- 7217,7223 ---- [(set (match_operand:XF 0 "register_operand" "") (minus:XF (match_operand:XF 1 "register_operand" "") (match_operand:XF 2 "register_operand" "")))] ! "!TARGET_64BIT && TARGET_80387" "") (define_expand "subtf3" *************** *** 5472,5489 **** [(set (match_operand:DF 0 "register_operand" "") (minus:DF (match_operand:DF 1 "register_operand" "") (match_operand:DF 2 "nonimmediate_operand" "")))] ! "TARGET_80387" "") (define_expand "subsf3" [(set (match_operand:SF 0 "register_operand" "") (minus:SF (match_operand:SF 1 "register_operand" "") (match_operand:SF 2 "nonimmediate_operand" "")))] ! "TARGET_80387" "") ;; Multiply instructions (define_expand "mulsi3" [(parallel [(set (match_operand:SI 0 "register_operand" "") (mult:SI (match_operand:SI 1 "register_operand" "") --- 7231,7271 ---- [(set (match_operand:DF 0 "register_operand" "") (minus:DF (match_operand:DF 1 "register_operand" "") (match_operand:DF 2 "nonimmediate_operand" "")))] ! "TARGET_80387 || (TARGET_SSE2 && TARGET_SSE_MATH)" "") (define_expand "subsf3" [(set (match_operand:SF 0 "register_operand" "") (minus:SF (match_operand:SF 1 "register_operand" "") (match_operand:SF 2 "nonimmediate_operand" "")))] ! "TARGET_80387 || TARGET_SSE_MATH" "") ;; Multiply instructions + (define_expand "muldi3" + [(parallel [(set (match_operand:DI 0 "register_operand" "") + (mult:DI (match_operand:DI 1 "register_operand" "") + (match_operand:DI 2 "x86_64_general_operand" ""))) + (clobber (reg:CC 17))])] + "TARGET_64BIT" + "") + + (define_insn "*muldi3_1_rex64" + [(set (match_operand:DI 0 "register_operand" "=r,r,r") + (mult:DI (match_operand:DI 1 "nonimmediate_operand" "%rm,0,0") + (match_operand:DI 2 "x86_64_general_operand" "K,e,mr"))) + (clobber (reg:CC 17))] + "TARGET_64BIT + && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" + "@ + imul{q}\t{%2, %1, %0|%0, %1, %2} + imul{q}\t{%2, %1, %0|%0, %1, %2} + imul{q}\t{%2, %0|%0, %2}" + [(set_attr "type" "imul") + (set_attr "prefix_0f" "0,0,1") + (set_attr "mode" "DI")]) + (define_expand "mulsi3" [(parallel [(set (match_operand:SI 0 "register_operand" "") (mult:SI (match_operand:SI 1 "register_operand" "") *************** *** 5511,5519 **** ; The first is simply short-hand for the latter. But, some assemblers, ; like the SCO OSR5 COFF assembler, don't handle the first form. "@ ! imul{l}\\t{%2, %1, %0|%0, %1, %2} ! imul{l}\\t{%2, %1, %0|%0, %1, %2} ! imul{l}\\t{%2, %0|%0, %2}" [(set_attr "type" "imul") (set_attr "prefix_0f" "0,0,1") (set_attr "mode" "SI")]) --- 7293,7329 ---- ; The first is simply short-hand for the latter. But, some assemblers, ; like the SCO OSR5 COFF assembler, don't handle the first form. "@ ! imul{l}\t{%2, %1, %0|%0, %1, %2} ! imul{l}\t{%2, %1, %0|%0, %1, %2} ! imul{l}\t{%2, %0|%0, %2}" ! [(set_attr "type" "imul") ! (set_attr "prefix_0f" "0,0,1") ! (set_attr "mode" "SI")]) ! ! (define_insn "*mulsi3_1_zext" ! [(set (match_operand:DI 0 "register_operand" "=r,r,r") ! (zero_extend:DI ! (mult:SI (match_operand:SI 1 "nonimmediate_operand" "%rm,0,0") ! (match_operand:SI 2 "general_operand" "K,i,mr")))) ! (clobber (reg:CC 17))] ! "TARGET_64BIT ! && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" ! ; For the {r,0,i} alternative (i.e., register <- register * immediate), ! ; there are two ways of writing the exact same machine instruction ! ; in assembly language. One, for example, is: ! ; ! ; imul $12, %eax ! ; ! ; while the other is: ! ; ! ; imul $12, %eax, %eax ! ; ! ; The first is simply short-hand for the latter. But, some assemblers, ! ; like the SCO OSR5 COFF assembler, don't handle the first form. ! "@ ! imul{l}\t{%2, %1, %k0|%k0, %1, %2} ! imul{l}\t{%2, %1, %k0|%k0, %1, %2} ! imul{l}\t{%2, %k0|%k0, %2}" [(set_attr "type" "imul") (set_attr "prefix_0f" "0,0,1") (set_attr "mode" "SI")]) *************** *** 5535,5634 **** ; %%% There was a note about "Assembler has weird restrictions", ; concerning alternative 1 when op1 == op0. True? "@ ! imul{w}\\t{%2, %1, %0|%0, %1, %2} ! imul{w}\\t{%2, %1, %0|%0, %1, %2} ! imul{w}\\t{%2, %0|%0, %2}" [(set_attr "type" "imul") (set_attr "prefix_0f" "0,0,1") (set_attr "mode" "HI")]) ! (define_insn "mulqi3" [(set (match_operand:QI 0 "register_operand" "=a") ! (mult:QI (match_operand:QI 1 "register_operand" "%0") (match_operand:QI 2 "nonimmediate_operand" "qm"))) (clobber (reg:CC 17))] ! "TARGET_QIMODE_MATH" ! "mul{b}\\t%2" [(set_attr "type" "imul") (set_attr "length_immediate" "0") (set_attr "mode" "QI")]) ! (define_insn "umulqihi3" [(set (match_operand:HI 0 "register_operand" "=a") ! (mult:HI (zero_extend:HI (match_operand:QI 1 "register_operand" "%0")) (zero_extend:HI (match_operand:QI 2 "nonimmediate_operand" "qm")))) (clobber (reg:CC 17))] ! "TARGET_QIMODE_MATH" ! "mul{b}\\t%2" [(set_attr "type" "imul") (set_attr "length_immediate" "0") (set_attr "mode" "QI")]) ! (define_insn "mulqihi3" [(set (match_operand:HI 0 "register_operand" "=a") ! (mult:HI (sign_extend:HI (match_operand:QI 1 "register_operand" "%0")) (sign_extend:HI (match_operand:QI 2 "nonimmediate_operand" "qm")))) (clobber (reg:CC 17))] ! "TARGET_QIMODE_MATH" ! "imul{b}\\t%2" [(set_attr "type" "imul") (set_attr "length_immediate" "0") (set_attr "mode" "QI")]) ! (define_insn "umulsidi3" [(set (match_operand:DI 0 "register_operand" "=A") ! (mult:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "%0")) (zero_extend:DI (match_operand:SI 2 "nonimmediate_operand" "rm")))) (clobber (reg:CC 17))] ! "" ! "mul{l}\\t%2" [(set_attr "type" "imul") (set_attr "ppro_uops" "few") (set_attr "length_immediate" "0") (set_attr "mode" "SI")]) ! (define_insn "mulsidi3" [(set (match_operand:DI 0 "register_operand" "=A") ! (mult:DI (sign_extend:DI (match_operand:SI 1 "register_operand" "%0")) (sign_extend:DI (match_operand:SI 2 "nonimmediate_operand" "rm")))) (clobber (reg:CC 17))] ! "" ! "imul{l}\\t%2" [(set_attr "type" "imul") (set_attr "length_immediate" "0") (set_attr "mode" "SI")]) ! (define_insn "umulsi3_highpart" [(set (match_operand:SI 0 "register_operand" "=d") (truncate:SI (lshiftrt:DI (mult:DI (zero_extend:DI ! (match_operand:SI 1 "register_operand" "%a")) (zero_extend:DI (match_operand:SI 2 "nonimmediate_operand" "rm"))) (const_int 32)))) ! (clobber (match_scratch:SI 3 "=a")) (clobber (reg:CC 17))] ! "" ! "mul{l}\\t%2" [(set_attr "type" "imul") (set_attr "ppro_uops" "few") (set_attr "length_immediate" "0") (set_attr "mode" "SI")]) ! (define_insn "smulsi3_highpart" [(set (match_operand:SI 0 "register_operand" "=d") (truncate:SI (lshiftrt:DI (mult:DI (sign_extend:DI ! (match_operand:SI 1 "register_operand" "%a")) (sign_extend:DI (match_operand:SI 2 "nonimmediate_operand" "rm"))) (const_int 32)))) ! (clobber (match_scratch:SI 3 "=a")) (clobber (reg:CC 17))] ! "" ! "imul{l}\\t%2" [(set_attr "type" "imul") (set_attr "ppro_uops" "few") (set_attr "mode" "SI")]) --- 7345,7671 ---- ; %%% There was a note about "Assembler has weird restrictions", ; concerning alternative 1 when op1 == op0. True? "@ ! imul{w}\t{%2, %1, %0|%0, %1, %2} ! imul{w}\t{%2, %1, %0|%0, %1, %2} ! imul{w}\t{%2, %0|%0, %2}" [(set_attr "type" "imul") (set_attr "prefix_0f" "0,0,1") (set_attr "mode" "HI")]) ! (define_expand "mulqi3" ! [(parallel [(set (match_operand:QI 0 "register_operand" "") ! (mult:QI (match_operand:QI 1 "nonimmediate_operand" "") ! (match_operand:QI 2 "register_operand" ""))) ! (clobber (reg:CC 17))])] ! "TARGET_QIMODE_MATH" ! "") ! ! (define_insn "*mulqi3_1" [(set (match_operand:QI 0 "register_operand" "=a") ! (mult:QI (match_operand:QI 1 "nonimmediate_operand" "%0") (match_operand:QI 2 "nonimmediate_operand" "qm"))) (clobber (reg:CC 17))] ! "TARGET_QIMODE_MATH ! && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" ! "mul{b}\t%2" [(set_attr "type" "imul") (set_attr "length_immediate" "0") (set_attr "mode" "QI")]) ! (define_expand "umulqihi3" ! [(parallel [(set (match_operand:HI 0 "register_operand" "") ! (mult:HI (zero_extend:HI ! (match_operand:QI 1 "nonimmediate_operand" "")) ! (zero_extend:HI ! (match_operand:QI 2 "register_operand" "")))) ! (clobber (reg:CC 17))])] ! "TARGET_QIMODE_MATH" ! "") ! ! (define_insn "*umulqihi3_1" [(set (match_operand:HI 0 "register_operand" "=a") ! (mult:HI (zero_extend:HI (match_operand:QI 1 "nonimmediate_operand" "%0")) (zero_extend:HI (match_operand:QI 2 "nonimmediate_operand" "qm")))) (clobber (reg:CC 17))] ! "TARGET_QIMODE_MATH ! && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" ! "mul{b}\t%2" [(set_attr "type" "imul") (set_attr "length_immediate" "0") (set_attr "mode" "QI")]) ! (define_expand "mulqihi3" ! [(parallel [(set (match_operand:HI 0 "register_operand" "") ! (mult:HI (sign_extend:HI (match_operand:QI 1 "nonimmediate_operand" "")) ! (sign_extend:HI (match_operand:QI 2 "register_operand" "")))) ! (clobber (reg:CC 17))])] ! "TARGET_QIMODE_MATH" ! "") ! ! (define_insn "*mulqihi3_insn" [(set (match_operand:HI 0 "register_operand" "=a") ! (mult:HI (sign_extend:HI (match_operand:QI 1 "nonimmediate_operand" "%0")) (sign_extend:HI (match_operand:QI 2 "nonimmediate_operand" "qm")))) (clobber (reg:CC 17))] ! "TARGET_QIMODE_MATH ! && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" ! "imul{b}\t%2" [(set_attr "type" "imul") (set_attr "length_immediate" "0") (set_attr "mode" "QI")]) ! (define_expand "umulditi3" ! [(parallel [(set (match_operand:TI 0 "register_operand" "") ! (mult:TI (zero_extend:TI ! (match_operand:DI 1 "nonimmediate_operand" "")) ! (zero_extend:TI ! (match_operand:DI 2 "register_operand" "")))) ! (clobber (reg:CC 17))])] ! "TARGET_64BIT" ! "") ! ! (define_insn "*umulditi3_insn" ! [(set (match_operand:TI 0 "register_operand" "=A") ! (mult:TI (zero_extend:TI (match_operand:DI 1 "nonimmediate_operand" "%0")) ! (zero_extend:TI (match_operand:DI 2 "nonimmediate_operand" "rm")))) ! (clobber (reg:CC 17))] ! "TARGET_64BIT ! && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" ! "mul{q}\t%2" ! [(set_attr "type" "imul") ! (set_attr "ppro_uops" "few") ! (set_attr "length_immediate" "0") ! (set_attr "mode" "DI")]) ! ! ;; We can't use this pattern in 64bit mode, since it results in two separate 32bit registers ! (define_expand "umulsidi3" ! [(parallel [(set (match_operand:DI 0 "register_operand" "") ! (mult:DI (zero_extend:DI ! (match_operand:SI 1 "nonimmediate_operand" "")) ! (zero_extend:DI ! (match_operand:SI 2 "register_operand" "")))) ! (clobber (reg:CC 17))])] ! "!TARGET_64BIT" ! "") ! ! (define_insn "*umulsidi3_insn" [(set (match_operand:DI 0 "register_operand" "=A") ! (mult:DI (zero_extend:DI (match_operand:SI 1 "nonimmediate_operand" "%0")) (zero_extend:DI (match_operand:SI 2 "nonimmediate_operand" "rm")))) (clobber (reg:CC 17))] ! "!TARGET_64BIT ! && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" ! "mul{l}\t%2" [(set_attr "type" "imul") (set_attr "ppro_uops" "few") (set_attr "length_immediate" "0") (set_attr "mode" "SI")]) ! (define_expand "mulditi3" ! [(parallel [(set (match_operand:TI 0 "register_operand" "") ! (mult:TI (sign_extend:TI ! (match_operand:DI 1 "nonimmediate_operand" "")) ! (sign_extend:TI ! (match_operand:DI 2 "register_operand" "")))) ! (clobber (reg:CC 17))])] ! "TARGET_64BIT" ! "") ! ! (define_insn "*mulditi3_insn" ! [(set (match_operand:TI 0 "register_operand" "=A") ! (mult:TI (sign_extend:TI (match_operand:DI 1 "nonimmediate_operand" "%0")) ! (sign_extend:TI (match_operand:DI 2 "nonimmediate_operand" "rm")))) ! (clobber (reg:CC 17))] ! "TARGET_64BIT ! && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" ! "imul{q}\t%2" ! [(set_attr "type" "imul") ! (set_attr "length_immediate" "0") ! (set_attr "mode" "DI")]) ! ! (define_expand "mulsidi3" ! [(parallel [(set (match_operand:DI 0 "register_operand" "") ! (mult:DI (sign_extend:DI ! (match_operand:SI 1 "nonimmediate_operand" "")) ! (sign_extend:DI ! (match_operand:SI 2 "register_operand" "")))) ! (clobber (reg:CC 17))])] ! "!TARGET_64BIT" ! "") ! ! (define_insn "*mulsidi3_insn" [(set (match_operand:DI 0 "register_operand" "=A") ! (mult:DI (sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" "%0")) (sign_extend:DI (match_operand:SI 2 "nonimmediate_operand" "rm")))) (clobber (reg:CC 17))] ! "!TARGET_64BIT ! && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" ! "imul{l}\t%2" [(set_attr "type" "imul") (set_attr "length_immediate" "0") (set_attr "mode" "SI")]) ! (define_expand "umuldi3_highpart" ! [(parallel [(set (match_operand:DI 0 "register_operand" "") ! (truncate:DI ! (lshiftrt:TI ! (mult:TI (zero_extend:TI ! (match_operand:DI 1 "nonimmediate_operand" "")) ! (zero_extend:TI ! (match_operand:DI 2 "register_operand" ""))) ! (const_int 64)))) ! (clobber (match_scratch:DI 3 "")) ! (clobber (reg:CC 17))])] ! "TARGET_64BIT" ! "") ! ! (define_insn "*umuldi3_highpart_rex64" ! [(set (match_operand:DI 0 "register_operand" "=d") ! (truncate:DI ! (lshiftrt:TI ! (mult:TI (zero_extend:TI ! (match_operand:DI 1 "nonimmediate_operand" "%a")) ! (zero_extend:TI ! (match_operand:DI 2 "nonimmediate_operand" "rm"))) ! (const_int 64)))) ! (clobber (match_scratch:DI 3 "=1")) ! (clobber (reg:CC 17))] ! "TARGET_64BIT ! && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" ! "mul{q}\t%2" ! [(set_attr "type" "imul") ! (set_attr "ppro_uops" "few") ! (set_attr "length_immediate" "0") ! (set_attr "mode" "DI")]) ! ! (define_expand "umulsi3_highpart" ! [(parallel [(set (match_operand:SI 0 "register_operand" "") ! (truncate:SI ! (lshiftrt:DI ! (mult:DI (zero_extend:DI ! (match_operand:SI 1 "nonimmediate_operand" "")) ! (zero_extend:DI ! (match_operand:SI 2 "register_operand" ""))) ! (const_int 32)))) ! (clobber (match_scratch:SI 3 "")) ! (clobber (reg:CC 17))])] ! "" ! "") ! ! (define_insn "*umulsi3_highpart_insn" [(set (match_operand:SI 0 "register_operand" "=d") (truncate:SI (lshiftrt:DI (mult:DI (zero_extend:DI ! (match_operand:SI 1 "nonimmediate_operand" "%a")) (zero_extend:DI (match_operand:SI 2 "nonimmediate_operand" "rm"))) (const_int 32)))) ! (clobber (match_scratch:SI 3 "=1")) (clobber (reg:CC 17))] ! "GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM" ! "mul{l}\t%2" [(set_attr "type" "imul") (set_attr "ppro_uops" "few") (set_attr "length_immediate" "0") (set_attr "mode" "SI")]) ! (define_insn "*umulsi3_highpart_zext" ! [(set (match_operand:DI 0 "register_operand" "=d") ! (zero_extend:DI (truncate:SI ! (lshiftrt:DI ! (mult:DI (zero_extend:DI ! (match_operand:SI 1 "nonimmediate_operand" "%a")) ! (zero_extend:DI ! (match_operand:SI 2 "nonimmediate_operand" "rm"))) ! (const_int 32))))) ! (clobber (match_scratch:SI 3 "=1")) ! (clobber (reg:CC 17))] ! "TARGET_64BIT ! && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" ! "mul{l}\t%2" ! [(set_attr "type" "imul") ! (set_attr "ppro_uops" "few") ! (set_attr "length_immediate" "0") ! (set_attr "mode" "SI")]) ! ! (define_expand "smuldi3_highpart" ! [(parallel [(set (match_operand:DI 0 "register_operand" "=d") ! (truncate:DI ! (lshiftrt:TI ! (mult:TI (sign_extend:TI ! (match_operand:DI 1 "nonimmediate_operand" "")) ! (sign_extend:TI ! (match_operand:DI 2 "register_operand" ""))) ! (const_int 64)))) ! (clobber (match_scratch:DI 3 "")) ! (clobber (reg:CC 17))])] ! "TARGET_64BIT" ! "") ! ! (define_insn "*smuldi3_highpart_rex64" ! [(set (match_operand:DI 0 "register_operand" "=d") ! (truncate:DI ! (lshiftrt:TI ! (mult:TI (sign_extend:TI ! (match_operand:DI 1 "nonimmediate_operand" "%a")) ! (sign_extend:TI ! (match_operand:DI 2 "nonimmediate_operand" "rm"))) ! (const_int 64)))) ! (clobber (match_scratch:DI 3 "=1")) ! (clobber (reg:CC 17))] ! "TARGET_64BIT ! && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" ! "imul{q}\t%2" ! [(set_attr "type" "imul") ! (set_attr "ppro_uops" "few") ! (set_attr "mode" "DI")]) ! ! (define_expand "smulsi3_highpart" ! [(parallel [(set (match_operand:SI 0 "register_operand" "") ! (truncate:SI ! (lshiftrt:DI ! (mult:DI (sign_extend:DI ! (match_operand:SI 1 "nonimmediate_operand" "")) ! (sign_extend:DI ! (match_operand:SI 2 "register_operand" ""))) ! (const_int 32)))) ! (clobber (match_scratch:SI 3 "")) ! (clobber (reg:CC 17))])] ! "" ! "") ! ! (define_insn "*smulsi3_highpart_insn" [(set (match_operand:SI 0 "register_operand" "=d") (truncate:SI (lshiftrt:DI (mult:DI (sign_extend:DI ! (match_operand:SI 1 "nonimmediate_operand" "%a")) (sign_extend:DI (match_operand:SI 2 "nonimmediate_operand" "rm"))) (const_int 32)))) ! (clobber (match_scratch:SI 3 "=1")) (clobber (reg:CC 17))] ! "GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM" ! "imul{l}\t%2" ! [(set_attr "type" "imul") ! (set_attr "ppro_uops" "few") ! (set_attr "mode" "SI")]) ! ! (define_insn "*smulsi3_highpart_zext" ! [(set (match_operand:DI 0 "register_operand" "=d") ! (zero_extend:DI (truncate:SI ! (lshiftrt:DI ! (mult:DI (sign_extend:DI ! (match_operand:SI 1 "nonimmediate_operand" "%a")) ! (sign_extend:DI ! (match_operand:SI 2 "nonimmediate_operand" "rm"))) ! (const_int 32))))) ! (clobber (match_scratch:SI 3 "=1")) ! (clobber (reg:CC 17))] ! "TARGET_64BIT ! && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" ! "imul{l}\t%2" [(set_attr "type" "imul") (set_attr "ppro_uops" "few") (set_attr "mode" "SI")]) *************** *** 5639,5645 **** [(set (match_operand:XF 0 "register_operand" "") (mult:XF (match_operand:XF 1 "register_operand" "") (match_operand:XF 2 "register_operand" "")))] ! "TARGET_80387" "") (define_expand "multf3" --- 7676,7682 ---- [(set (match_operand:XF 0 "register_operand" "") (mult:XF (match_operand:XF 1 "register_operand" "") (match_operand:XF 2 "register_operand" "")))] ! "!TARGET_64BIT && TARGET_80387" "") (define_expand "multf3" *************** *** 5653,5666 **** [(set (match_operand:DF 0 "register_operand" "") (mult:DF (match_operand:DF 1 "register_operand" "") (match_operand:DF 2 "nonimmediate_operand" "")))] ! "TARGET_80387" "") (define_expand "mulsf3" [(set (match_operand:SF 0 "register_operand" "") (mult:SF (match_operand:SF 1 "register_operand" "") (match_operand:SF 2 "nonimmediate_operand" "")))] ! "TARGET_80387" "") ;; Divide instructions --- 7690,7703 ---- [(set (match_operand:DF 0 "register_operand" "") (mult:DF (match_operand:DF 1 "register_operand" "") (match_operand:DF 2 "nonimmediate_operand" "")))] ! "TARGET_80387 || (TARGET_SSE2 && TARGET_SSE_MATH)" "") (define_expand "mulsf3" [(set (match_operand:SF 0 "register_operand" "") (mult:SF (match_operand:SF 1 "register_operand" "") (match_operand:SF 2 "nonimmediate_operand" "")))] ! "TARGET_80387 || TARGET_SSE_MATH" "") ;; Divide instructions *************** *** 5671,5677 **** (match_operand:QI 2 "nonimmediate_operand" "qm"))) (clobber (reg:CC 17))] "TARGET_QIMODE_MATH" ! "idiv{b}\\t%2" [(set_attr "type" "idiv") (set_attr "mode" "QI") (set_attr "ppro_uops" "few")]) --- 7708,7714 ---- (match_operand:QI 2 "nonimmediate_operand" "qm"))) (clobber (reg:CC 17))] "TARGET_QIMODE_MATH" ! "idiv{b}\t%2" [(set_attr "type" "idiv") (set_attr "mode" "QI") (set_attr "ppro_uops" "few")]) *************** *** 5682,5688 **** (match_operand:QI 2 "nonimmediate_operand" "qm"))) (clobber (reg:CC 17))] "TARGET_QIMODE_MATH" ! "div{b}\\t%2" [(set_attr "type" "idiv") (set_attr "mode" "QI") (set_attr "ppro_uops" "few")]) --- 7719,7725 ---- (match_operand:QI 2 "nonimmediate_operand" "qm"))) (clobber (reg:CC 17))] "TARGET_QIMODE_MATH" ! "div{b}\t%2" [(set_attr "type" "idiv") (set_attr "mode" "QI") (set_attr "ppro_uops" "few")]) *************** *** 5693,5699 **** [(set (match_operand:XF 0 "register_operand" "") (div:XF (match_operand:XF 1 "register_operand" "") (match_operand:XF 2 "register_operand" "")))] ! "TARGET_80387" "") (define_expand "divtf3" --- 7730,7736 ---- [(set (match_operand:XF 0 "register_operand" "") (div:XF (match_operand:XF 1 "register_operand" "") (match_operand:XF 2 "register_operand" "")))] ! "!TARGET_64BIT && TARGET_80387" "") (define_expand "divtf3" *************** *** 5707,5723 **** [(set (match_operand:DF 0 "register_operand" "") (div:DF (match_operand:DF 1 "register_operand" "") (match_operand:DF 2 "nonimmediate_operand" "")))] ! "TARGET_80387" "") (define_expand "divsf3" [(set (match_operand:SF 0 "register_operand" "") (div:SF (match_operand:SF 1 "register_operand" "") (match_operand:SF 2 "nonimmediate_operand" "")))] ! "TARGET_80387" "") ;; Remainder instructions. (define_expand "divmodsi4" [(parallel [(set (match_operand:SI 0 "register_operand" "") (div:SI (match_operand:SI 1 "register_operand" "") --- 7744,7846 ---- [(set (match_operand:DF 0 "register_operand" "") (div:DF (match_operand:DF 1 "register_operand" "") (match_operand:DF 2 "nonimmediate_operand" "")))] ! "TARGET_80387 || (TARGET_SSE2 && TARGET_SSE_MATH)" "") (define_expand "divsf3" [(set (match_operand:SF 0 "register_operand" "") (div:SF (match_operand:SF 1 "register_operand" "") (match_operand:SF 2 "nonimmediate_operand" "")))] ! "TARGET_80387 || TARGET_SSE_MATH" "") ;; Remainder instructions. + + (define_expand "divmoddi4" + [(parallel [(set (match_operand:DI 0 "register_operand" "") + (div:DI (match_operand:DI 1 "register_operand" "") + (match_operand:DI 2 "nonimmediate_operand" ""))) + (set (match_operand:DI 3 "register_operand" "") + (mod:DI (match_dup 1) (match_dup 2))) + (clobber (reg:CC 17))])] + "TARGET_64BIT" + "") + + ;; Allow to come the parameter in eax or edx to avoid extra moves. + ;; Penalize eax case sligthly because it results in worse scheduling + ;; of code. + (define_insn "*divmoddi4_nocltd_rex64" + [(set (match_operand:DI 0 "register_operand" "=&a,?a") + (div:DI (match_operand:DI 2 "register_operand" "1,0") + (match_operand:DI 3 "nonimmediate_operand" "rm,rm"))) + (set (match_operand:DI 1 "register_operand" "=&d,&d") + (mod:DI (match_dup 2) (match_dup 3))) + (clobber (reg:CC 17))] + "TARGET_64BIT && !optimize_size && !TARGET_USE_CLTD" + "#" + [(set_attr "type" "multi")]) + + (define_insn "*divmoddi4_cltd_rex64" + [(set (match_operand:DI 0 "register_operand" "=a") + (div:DI (match_operand:DI 2 "register_operand" "a") + (match_operand:DI 3 "nonimmediate_operand" "rm"))) + (set (match_operand:DI 1 "register_operand" "=&d") + (mod:DI (match_dup 2) (match_dup 3))) + (clobber (reg:CC 17))] + "TARGET_64BIT && (optimize_size || TARGET_USE_CLTD)" + "#" + [(set_attr "type" "multi")]) + + (define_insn "*divmoddi_noext_rex64" + [(set (match_operand:DI 0 "register_operand" "=a") + (div:DI (match_operand:DI 1 "register_operand" "0") + (match_operand:DI 2 "nonimmediate_operand" "rm"))) + (set (match_operand:DI 3 "register_operand" "=d") + (mod:DI (match_dup 1) (match_dup 2))) + (use (match_operand:DI 4 "register_operand" "3")) + (clobber (reg:CC 17))] + "TARGET_64BIT" + "idiv{q}\t%2" + [(set_attr "type" "idiv") + (set_attr "mode" "DI") + (set_attr "ppro_uops" "few")]) + + (define_split + [(set (match_operand:DI 0 "register_operand" "") + (div:DI (match_operand:DI 1 "register_operand" "") + (match_operand:DI 2 "nonimmediate_operand" ""))) + (set (match_operand:DI 3 "register_operand" "") + (mod:DI (match_dup 1) (match_dup 2))) + (clobber (reg:CC 17))] + "TARGET_64BIT && reload_completed" + [(parallel [(set (match_dup 3) + (ashiftrt:DI (match_dup 4) (const_int 63))) + (clobber (reg:CC 17))]) + (parallel [(set (match_dup 0) + (div:DI (reg:DI 0) (match_dup 2))) + (set (match_dup 3) + (mod:DI (reg:DI 0) (match_dup 2))) + (use (match_dup 3)) + (clobber (reg:CC 17))])] + { + /* Avoid use of cltd in favour of a mov+shift. */ + if (!TARGET_USE_CLTD && !optimize_size) + { + if (true_regnum (operands[1])) + emit_move_insn (operands[0], operands[1]); + else + emit_move_insn (operands[3], operands[1]); + operands[4] = operands[3]; + } + else + { + if (true_regnum (operands[1])) + abort(); + operands[4] = operands[1]; + } + }) + + (define_expand "divmodsi4" [(parallel [(set (match_operand:SI 0 "register_operand" "") (div:SI (match_operand:SI 1 "register_operand" "") *************** *** 5762,5768 **** (use (match_operand:SI 4 "register_operand" "3")) (clobber (reg:CC 17))] "" ! "idiv{l}\\t%2" [(set_attr "type" "idiv") (set_attr "mode" "SI") (set_attr "ppro_uops" "few")]) --- 7885,7891 ---- (use (match_operand:SI 4 "register_operand" "3")) (clobber (reg:CC 17))] "" ! "idiv{l}\t%2" [(set_attr "type" "idiv") (set_attr "mode" "SI") (set_attr "ppro_uops" "few")]) *************** *** 5784,5790 **** (mod:SI (reg:SI 0) (match_dup 2))) (use (match_dup 3)) (clobber (reg:CC 17))])] - " { /* Avoid use of cltd in favour of a mov+shift. */ if (!TARGET_USE_CLTD && !optimize_size) --- 7907,7912 ---- *************** *** 5801,5807 **** abort(); operands[4] = operands[1]; } ! }") ;; %%% Split me. (define_insn "divmodhi4" [(set (match_operand:HI 0 "register_operand" "=a") --- 7923,7929 ---- abort(); operands[4] = operands[1]; } ! }) ;; %%% Split me. (define_insn "divmodhi4" [(set (match_operand:HI 0 "register_operand" "=a") *************** *** 5811,5821 **** (mod:HI (match_dup 1) (match_dup 2))) (clobber (reg:CC 17))] "TARGET_HIMODE_MATH" ! "cwtd\;idiv{w}\\t%2" [(set_attr "type" "multi") (set_attr "length_immediate" "0") (set_attr "mode" "SI")]) (define_insn "udivmodsi4" [(set (match_operand:SI 0 "register_operand" "=a") (udiv:SI (match_operand:SI 1 "register_operand" "0") --- 7933,7987 ---- (mod:HI (match_dup 1) (match_dup 2))) (clobber (reg:CC 17))] "TARGET_HIMODE_MATH" ! "cwtd\;idiv{w}\t%2" [(set_attr "type" "multi") (set_attr "length_immediate" "0") (set_attr "mode" "SI")]) + (define_insn "udivmoddi4" + [(set (match_operand:DI 0 "register_operand" "=a") + (udiv:DI (match_operand:DI 1 "register_operand" "0") + (match_operand:DI 2 "nonimmediate_operand" "rm"))) + (set (match_operand:DI 3 "register_operand" "=&d") + (umod:DI (match_dup 1) (match_dup 2))) + (clobber (reg:CC 17))] + "TARGET_64BIT" + "xor{q}\t%3, %3\;div{q}\t%2" + [(set_attr "type" "multi") + (set_attr "length_immediate" "0") + (set_attr "mode" "DI")]) + + (define_insn "*udivmoddi4_noext" + [(set (match_operand:DI 0 "register_operand" "=a") + (udiv:DI (match_operand:DI 1 "register_operand" "0") + (match_operand:DI 2 "nonimmediate_operand" "rm"))) + (set (match_operand:DI 3 "register_operand" "=d") + (umod:DI (match_dup 1) (match_dup 2))) + (use (match_dup 3)) + (clobber (reg:CC 17))] + "TARGET_64BIT" + "div{q}\t%2" + [(set_attr "type" "idiv") + (set_attr "ppro_uops" "few") + (set_attr "mode" "DI")]) + + (define_split + [(set (match_operand:DI 0 "register_operand" "") + (udiv:DI (match_operand:DI 1 "register_operand" "") + (match_operand:DI 2 "nonimmediate_operand" ""))) + (set (match_operand:DI 3 "register_operand" "") + (umod:DI (match_dup 1) (match_dup 2))) + (clobber (reg:CC 17))] + "TARGET_64BIT && reload_completed" + [(set (match_dup 3) (const_int 0)) + (parallel [(set (match_dup 0) + (udiv:DI (match_dup 1) (match_dup 2))) + (set (match_dup 3) + (umod:DI (match_dup 1) (match_dup 2))) + (use (match_dup 3)) + (clobber (reg:CC 17))])] + "") + (define_insn "udivmodsi4" [(set (match_operand:SI 0 "register_operand" "=a") (udiv:SI (match_operand:SI 1 "register_operand" "0") *************** *** 5824,5830 **** (umod:SI (match_dup 1) (match_dup 2))) (clobber (reg:CC 17))] "" ! "xor{l}\\t%3, %3\;div{l}\\t%2" [(set_attr "type" "multi") (set_attr "length_immediate" "0") (set_attr "mode" "SI")]) --- 7990,7996 ---- (umod:SI (match_dup 1) (match_dup 2))) (clobber (reg:CC 17))] "" ! "xor{l}\t%3, %3\;div{l}\t%2" [(set_attr "type" "multi") (set_attr "length_immediate" "0") (set_attr "mode" "SI")]) *************** *** 5838,5844 **** (use (match_dup 3)) (clobber (reg:CC 17))] "" ! "div{l}\\t%2" [(set_attr "type" "idiv") (set_attr "ppro_uops" "few") (set_attr "mode" "SI")]) --- 8004,8010 ---- (use (match_dup 3)) (clobber (reg:CC 17))] "" ! "div{l}\t%2" [(set_attr "type" "idiv") (set_attr "ppro_uops" "few") (set_attr "mode" "SI")]) *************** *** 5881,5887 **** (use (match_operand:HI 4 "register_operand" "3")) (clobber (reg:CC 17))] "" ! "div{w}\\t%2" [(set_attr "type" "idiv") (set_attr "mode" "HI") (set_attr "ppro_uops" "few")]) --- 8047,8053 ---- (use (match_operand:HI 4 "register_operand" "3")) (clobber (reg:CC 17))] "" ! "div{w}\t%2" [(set_attr "type" "idiv") (set_attr "mode" "HI") (set_attr "ppro_uops" "few")]) *************** *** 5902,5908 **** ; (umod:DI (match_dup 1) (zero_extend:DI (match_dup 2))))) ; (clobber (reg:CC 17))] ; "" ! ; "div{l}\\t{%2, %0|%0, %2}" ; [(set_attr "type" "idiv") ; (set_attr "ppro_uops" "few")]) --- 8068,8074 ---- ; (umod:DI (match_dup 1) (zero_extend:DI (match_dup 2))))) ; (clobber (reg:CC 17))] ; "" ! ; "div{l}\t{%2, %0|%0, %2}" ; [(set_attr "type" "idiv") ; (set_attr "ppro_uops" "few")]) *************** *** 5911,5916 **** --- 8077,8099 ---- ;; On Pentium, "test imm, reg" is pairable only with eax, ax, and al. ;; Note that this excludes ah. + (define_insn "*testdi_1_rex64" + [(set (reg 17) + (compare + (and:DI (match_operand:DI 0 "nonimmediate_operand" "%*a,r,*a,r,rm") + (match_operand:DI 1 "x86_64_szext_nonmemory_operand" "Z,Z,e,e,re")) + (const_int 0)))] + "TARGET_64BIT && ix86_match_ccmode (insn, CCNOmode)" + "@ + test{l}\t{%k1, %k0|%k0, %k1} + test{l}\t{%k1, %k0|%k0, %k1} + test{q}\t{%1, %0|%0, %1} + test{q}\t{%1, %0|%0, %1} + test{q}\t{%1, %0|%0, %1}" + [(set_attr "type" "test") + (set_attr "modrm" "0,1,0,1,1") + (set_attr "mode" "SI,SI,DI,DI,DI") + (set_attr "pent_pair" "uv,np,uv,np,uv")]) (define_insn "testsi_1" [(set (reg 17) *************** *** 5919,5925 **** (match_operand:SI 1 "nonmemory_operand" "in,in,rin")) (const_int 0)))] "ix86_match_ccmode (insn, CCNOmode)" ! "test{l}\\t{%1, %0|%0, %1}" [(set_attr "type" "test") (set_attr "modrm" "0,1,1") (set_attr "mode" "SI") --- 8102,8108 ---- (match_operand:SI 1 "nonmemory_operand" "in,in,rin")) (const_int 0)))] "ix86_match_ccmode (insn, CCNOmode)" ! "test{l}\t{%1, %0|%0, %1}" [(set_attr "type" "test") (set_attr "modrm" "0,1,1") (set_attr "mode" "SI") *************** *** 5940,5946 **** (match_operand:HI 1 "nonmemory_operand" "n,n,rn")) (const_int 0)))] "ix86_match_ccmode (insn, CCNOmode)" ! "test{w}\\t{%1, %0|%0, %1}" [(set_attr "type" "test") (set_attr "modrm" "0,1,1") (set_attr "mode" "HI") --- 8123,8129 ---- (match_operand:HI 1 "nonmemory_operand" "n,n,rn")) (const_int 0)))] "ix86_match_ccmode (insn, CCNOmode)" ! "test{w}\t{%1, %0|%0, %1}" [(set_attr "type" "test") (set_attr "modrm" "0,1,1") (set_attr "mode" "HI") *************** *** 5960,5976 **** (match_operand:QI 1 "nonmemory_operand" "n,n,qn,n")) (const_int 0)))] "ix86_match_ccmode (insn, CCNOmode)" - "* { if (which_alternative == 3) { if (GET_CODE (operands[1]) == CONST_INT && (INTVAL (operands[1]) & 0xffffff00)) operands[1] = GEN_INT (INTVAL (operands[1]) & 0xff); ! return \"test{l}\\t{%1, %k0|%k0, %1}\"; } ! return \"test{b}\\t{%1, %0|%0, %1}\"; ! }" [(set_attr "type" "test") (set_attr "modrm" "0,1,1,1") (set_attr "mode" "QI,QI,QI,SI") --- 8143,8158 ---- (match_operand:QI 1 "nonmemory_operand" "n,n,qn,n")) (const_int 0)))] "ix86_match_ccmode (insn, CCNOmode)" { if (which_alternative == 3) { if (GET_CODE (operands[1]) == CONST_INT && (INTVAL (operands[1]) & 0xffffff00)) operands[1] = GEN_INT (INTVAL (operands[1]) & 0xff); ! return "test{l}\t{%1, %k0|%k0, %1}"; } ! return "test{b}\t{%1, %0|%0, %1}"; ! } [(set_attr "type" "test") (set_attr "modrm" "0,1,1,1") (set_attr "mode" "QI,QI,QI,SI") *************** *** 5994,6007 **** (compare (and:SI (zero_extract:SI ! (match_operand 0 "ext_register_operand" "q") (const_int 8) (const_int 8)) (match_operand 1 "const_int_operand" "n")) (const_int 0)))] "(unsigned HOST_WIDE_INT) INTVAL (operands[1]) <= 0xff && ix86_match_ccmode (insn, CCNOmode)" ! "test{b}\\t{%1, %h0|%h0, %1}" [(set_attr "type" "test") (set_attr "mode" "QI") (set_attr "length_immediate" "1") --- 8176,8189 ---- (compare (and:SI (zero_extract:SI ! (match_operand 0 "ext_register_operand" "Q") (const_int 8) (const_int 8)) (match_operand 1 "const_int_operand" "n")) (const_int 0)))] "(unsigned HOST_WIDE_INT) INTVAL (operands[1]) <= 0xff && ix86_match_ccmode (insn, CCNOmode)" ! "test{b}\t{%1, %h0|%h0, %1}" [(set_attr "type" "test") (set_attr "mode" "QI") (set_attr "length_immediate" "1") *************** *** 6012,6025 **** (compare (and:SI (zero_extract:SI ! (match_operand 0 "ext_register_operand" "q") (const_int 8) (const_int 8)) (zero_extend:SI ! (match_operand:QI 1 "nonimmediate_operand" "qm"))) (const_int 0)))] ! "ix86_match_ccmode (insn, CCNOmode)" ! "test{b}\\t{%1, %h0|%h0, %1}" [(set_attr "type" "test") (set_attr "mode" "QI")]) --- 8194,8223 ---- (compare (and:SI (zero_extract:SI ! (match_operand 0 "ext_register_operand" "Q") (const_int 8) (const_int 8)) (zero_extend:SI ! (match_operand:QI 1 "nonimmediate_operand" "Qm"))) (const_int 0)))] ! "!TARGET_64BIT && ix86_match_ccmode (insn, CCNOmode)" ! "test{b}\t{%1, %h0|%h0, %1}" ! [(set_attr "type" "test") ! (set_attr "mode" "QI")]) ! ! (define_insn "*testqi_ext_1_rex64" ! [(set (reg 17) ! (compare ! (and:SI ! (zero_extract:SI ! (match_operand 0 "ext_register_operand" "Q") ! (const_int 8) ! (const_int 8)) ! (zero_extend:SI ! (match_operand:QI 1 "register_operand" "Q"))) ! (const_int 0)))] ! "TARGET_64BIT && ix86_match_ccmode (insn, CCNOmode)" ! "test{b}\t{%1, %h0|%h0, %1}" [(set_attr "type" "test") (set_attr "mode" "QI")]) *************** *** 6028,6043 **** (compare (and:SI (zero_extract:SI ! (match_operand 0 "ext_register_operand" "q") (const_int 8) (const_int 8)) (zero_extract:SI ! (match_operand 1 "ext_register_operand" "q") (const_int 8) (const_int 8))) (const_int 0)))] "ix86_match_ccmode (insn, CCNOmode)" ! "test{b}\\t{%h1, %h0|%h0, %h1}" [(set_attr "type" "test") (set_attr "mode" "QI")]) --- 8226,8241 ---- (compare (and:SI (zero_extract:SI ! (match_operand 0 "ext_register_operand" "Q") (const_int 8) (const_int 8)) (zero_extract:SI ! (match_operand 1 "ext_register_operand" "Q") (const_int 8) (const_int 8))) (const_int 0)))] "ix86_match_ccmode (insn, CCNOmode)" ! "test{b}\t{%h1, %h0|%h0, %h1}" [(set_attr "type" "test") (set_attr "mode" "QI")]) *************** *** 6051,6075 **** (const_int 0)))] "ix86_match_ccmode (insn, CCNOmode) && (GET_MODE (operands[0]) == SImode || GET_MODE (operands[0]) == HImode || GET_MODE (operands[0]) == QImode)" "#") ! (define_split [(set (reg 17) ! (compare (zero_extract:SI (match_operand 0 "nonimmediate_operand" "rm") ! (match_operand:SI 1 "const_int_operand" "") ! (match_operand:SI 2 "const_int_operand" "")) (const_int 0)))] "ix86_match_ccmode (insn, CCNOmode)" [(set (reg:CCNO 17) (compare:CCNO (match_dup 3) (const_int 0)))] - " { HOST_WIDE_INT len = INTVAL (operands[1]); HOST_WIDE_INT pos = INTVAL (operands[2]); HOST_WIDE_INT mask; ! enum machine_mode mode; mode = GET_MODE (operands[0]); if (GET_CODE (operands[0]) == MEM) --- 8249,8294 ---- (const_int 0)))] "ix86_match_ccmode (insn, CCNOmode) && (GET_MODE (operands[0]) == SImode + || (TARGET_64BIT && GET_MODE (operands[0]) == DImode) || GET_MODE (operands[0]) == HImode || GET_MODE (operands[0]) == QImode)" "#") ! (define_insn "*testqi_ext_3_rex64" [(set (reg 17) ! (compare (zero_extract:DI (match_operand 0 "nonimmediate_operand" "rm") ! (match_operand:DI 1 "const_int_operand" "") ! (match_operand:DI 2 "const_int_operand" "")) ! (const_int 0)))] ! "TARGET_64BIT ! && ix86_match_ccmode (insn, CCNOmode) ! /* The code below cannot deal with constants outside HOST_WIDE_INT. */ ! && INTVAL (operands[1]) + INTVAL (operands[2]) < HOST_BITS_PER_WIDE_INT ! /* Ensure that resulting mask is zero or sign extended operand. */ ! && (INTVAL (operands[1]) + INTVAL (operands[2]) <= 32 ! || (INTVAL (operands[1]) + INTVAL (operands[2]) == 64 ! && INTVAL (operands[1]) > 32)) ! && (GET_MODE (operands[0]) == SImode ! || GET_MODE (operands[0]) == DImode ! || GET_MODE (operands[0]) == HImode ! || GET_MODE (operands[0]) == QImode)" ! "#") ! ! (define_split ! [(set (reg 17) ! (compare (zero_extract ! (match_operand 0 "nonimmediate_operand" "") ! (match_operand 1 "const_int_operand" "") ! (match_operand 2 "const_int_operand" "")) (const_int 0)))] "ix86_match_ccmode (insn, CCNOmode)" [(set (reg:CCNO 17) (compare:CCNO (match_dup 3) (const_int 0)))] { HOST_WIDE_INT len = INTVAL (operands[1]); HOST_WIDE_INT pos = INTVAL (operands[2]); HOST_WIDE_INT mask; ! enum machine_mode mode, submode; mode = GET_MODE (operands[0]); if (GET_CODE (operands[0]) == MEM) *************** *** 6079,6087 **** if (! MEM_VOLATILE_P (operands[0])) { mode = smallest_mode_for_size (pos + len, MODE_INT); ! operands[0] = change_address (operands[0], mode, NULL_RTX); } } else if (mode == HImode && pos + len <= 8) { /* Small HImode tests can be converted to QImode. */ --- 8298,8315 ---- if (! MEM_VOLATILE_P (operands[0])) { mode = smallest_mode_for_size (pos + len, MODE_INT); ! operands[0] = adjust_address (operands[0], mode, 0); } } + else if (GET_CODE (operands[0]) == SUBREG + && (submode = GET_MODE (SUBREG_REG (operands[0])), + GET_MODE_BITSIZE (mode) > GET_MODE_BITSIZE (submode)) + && pos + len <= GET_MODE_BITSIZE (submode)) + { + /* Narrow a paradoxical subreg to prevent partial register stalls. */ + mode = submode; + operands[0] = SUBREG_REG (operands[0]); + } else if (mode == HImode && pos + len <= 8) { /* Small HImode tests can be converted to QImode. */ *************** *** 6092,6104 **** mask = ((HOST_WIDE_INT)1 << (pos + len)) - 1; mask &= ~(((HOST_WIDE_INT)1 << pos) - 1); ! operands[3] = gen_rtx_AND (mode, operands[0], GEN_INT (mask)); ! }") ;; %%% This used to optimize known byte-wide and operations to memory, ;; and sometimes to QImode registers. If this is considered useful, ;; it should be done with splitters. (define_expand "andsi3" [(set (match_operand:SI 0 "nonimmediate_operand" "") (and:SI (match_operand:SI 1 "nonimmediate_operand" "") --- 8320,8399 ---- mask = ((HOST_WIDE_INT)1 << (pos + len)) - 1; mask &= ~(((HOST_WIDE_INT)1 << pos) - 1); ! operands[3] = gen_rtx_AND (mode, operands[0], ! GEN_INT (trunc_int_for_mode (mask, mode))); ! }) ;; %%% This used to optimize known byte-wide and operations to memory, ;; and sometimes to QImode registers. If this is considered useful, ;; it should be done with splitters. + (define_expand "anddi3" + [(set (match_operand:DI 0 "nonimmediate_operand" "") + (and:DI (match_operand:DI 1 "nonimmediate_operand" "") + (match_operand:DI 2 "x86_64_szext_general_operand" ""))) + (clobber (reg:CC 17))] + "TARGET_64BIT" + "ix86_expand_binary_operator (AND, DImode, operands); DONE;") + + (define_insn "*anddi_1_rex64" + [(set (match_operand:DI 0 "nonimmediate_operand" "=r,rm,r,r") + (and:DI (match_operand:DI 1 "nonimmediate_operand" "%0,0,0,qm") + (match_operand:DI 2 "x86_64_szext_general_operand" "Z,re,rm,L"))) + (clobber (reg:CC 17))] + "TARGET_64BIT && ix86_binary_operator_ok (AND, DImode, operands)" + { + switch (get_attr_type (insn)) + { + case TYPE_IMOVX: + { + enum machine_mode mode; + + if (GET_CODE (operands[2]) != CONST_INT) + abort (); + if (INTVAL (operands[2]) == 0xff) + mode = QImode; + else if (INTVAL (operands[2]) == 0xffff) + mode = HImode; + else + abort (); + + operands[1] = gen_lowpart (mode, operands[1]); + if (mode == QImode) + return "movz{bq|x}\t{%1,%0|%0, %1}"; + else + return "movz{wq|x}\t{%1,%0|%0, %1}"; + } + + default: + if (! rtx_equal_p (operands[0], operands[1])) + abort (); + if (get_attr_mode (insn) == MODE_SI) + return "and{l}\t{%k2, %k0|%k0, %k2}"; + else + return "and{q}\t{%2, %0|%0, %2}"; + } + } + [(set_attr "type" "alu,alu,alu,imovx") + (set_attr "length_immediate" "*,*,*,0") + (set_attr "mode" "SI,DI,DI,DI")]) + + (define_insn "*anddi_2" + [(set (reg 17) + (compare (and:DI (match_operand:DI 1 "nonimmediate_operand" "%0,0,0") + (match_operand:DI 2 "x86_64_szext_general_operand" "Z,rem,re")) + (const_int 0))) + (set (match_operand:DI 0 "nonimmediate_operand" "=r,r,rm") + (and:DI (match_dup 1) (match_dup 2)))] + "TARGET_64BIT && ix86_match_ccmode (insn, CCNOmode) + && ix86_binary_operator_ok (AND, DImode, operands)" + "@ + and{l}\t{%k2, %k0|%k0, %k2} + and{q}\t{%2, %0|%0, %2} + and{q}\t{%2, %0|%0, %2}" + [(set_attr "type" "alu") + (set_attr "mode" "SI,DI,DI")]) + (define_expand "andsi3" [(set (match_operand:SI 0 "nonimmediate_operand" "") (and:SI (match_operand:SI 1 "nonimmediate_operand" "") *************** *** 6113,6119 **** (match_operand:SI 2 "general_operand" "ri,rm,L"))) (clobber (reg:CC 17))] "ix86_binary_operator_ok (AND, SImode, operands)" - "* { switch (get_attr_type (insn)) { --- 8408,8413 ---- *************** *** 6132,6178 **** operands[1] = gen_lowpart (mode, operands[1]); if (mode == QImode) ! return \"movz{bl|x}\\t{%1,%0|%0, %1}\"; else ! return \"movz{wl|x}\\t{%1,%0|%0, %1}\"; } default: if (! rtx_equal_p (operands[0], operands[1])) abort (); ! return \"and{l}\\t{%2, %0|%0, %2}\"; } ! }" [(set_attr "type" "alu,alu,imovx") (set_attr "length_immediate" "*,*,0") (set_attr "mode" "SI")]) (define_split ! [(set (match_operand:SI 0 "register_operand" "") ! (and:SI (match_dup 0) ! (const_int -65536))) (clobber (reg:CC 17))] "optimize_size" [(set (strict_low_part (match_dup 1)) (const_int 0))] "operands[1] = gen_lowpart (HImode, operands[0]);") (define_split ! [(set (match_operand 0 "q_regs_operand" "") (and (match_dup 0) ! (const_int -256))) (clobber (reg:CC 17))] ! "(optimize_size || !TARGET_PARTIAL_REG_STALL) ! && (GET_MODE (operands[0]) == SImode || GET_MODE (operands[0]) == HImode)" [(set (strict_low_part (match_dup 1)) (const_int 0))] "operands[1] = gen_lowpart (QImode, operands[0]);") (define_split ! [(set (match_operand 0 "q_regs_operand" "") (and (match_dup 0) (const_int -65281))) (clobber (reg:CC 17))] ! "(optimize_size || !TARGET_PARTIAL_REG_STALL) ! && (GET_MODE (operands[0]) == SImode || GET_MODE (operands[0]) == HImode)" [(parallel [(set (zero_extract:SI (match_dup 0) (const_int 8) (const_int 8)) --- 8426,8470 ---- operands[1] = gen_lowpart (mode, operands[1]); if (mode == QImode) ! return "movz{bl|x}\t{%1,%0|%0, %1}"; else ! return "movz{wl|x}\t{%1,%0|%0, %1}"; } default: if (! rtx_equal_p (operands[0], operands[1])) abort (); ! return "and{l}\t{%2, %0|%0, %2}"; } ! } [(set_attr "type" "alu,alu,imovx") (set_attr "length_immediate" "*,*,0") (set_attr "mode" "SI")]) (define_split ! [(set (match_operand 0 "register_operand" "") ! (and (match_dup 0) ! (const_int -65536))) (clobber (reg:CC 17))] "optimize_size" [(set (strict_low_part (match_dup 1)) (const_int 0))] "operands[1] = gen_lowpart (HImode, operands[0]);") (define_split ! [(set (match_operand 0 "ext_register_operand" "") (and (match_dup 0) ! (const_int -256))) (clobber (reg:CC 17))] ! "(optimize_size || !TARGET_PARTIAL_REG_STALL) && reload_completed" [(set (strict_low_part (match_dup 1)) (const_int 0))] "operands[1] = gen_lowpart (QImode, operands[0]);") (define_split ! [(set (match_operand 0 "ext_register_operand" "") (and (match_dup 0) (const_int -65281))) (clobber (reg:CC 17))] ! "(optimize_size || !TARGET_PARTIAL_REG_STALL) && reload_completed" [(parallel [(set (zero_extract:SI (match_dup 0) (const_int 8) (const_int 8)) *************** *** 6186,6191 **** --- 8478,8495 ---- (clobber (reg:CC 17))])] "operands[0] = gen_lowpart (SImode, operands[0]);") + ;; See comment for addsi_1_zext why we do use nonimmediate_operand + (define_insn "*andsi_1_zext" + [(set (match_operand:DI 0 "register_operand" "=r") + (zero_extend:DI + (and:SI (match_operand:SI 1 "nonimmediate_operand" "%0") + (match_operand:SI 2 "general_operand" "rim")))) + (clobber (reg:CC 17))] + "TARGET_64BIT && ix86_binary_operator_ok (AND, SImode, operands)" + "and{l}\t{%2, %k0|%k0, %2}" + [(set_attr "type" "alu") + (set_attr "mode" "SI")]) + (define_insn "*andsi_2" [(set (reg 17) (compare (and:SI (match_operand:SI 1 "nonimmediate_operand" "%0,0") *************** *** 6195,6201 **** (and:SI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCNOmode) && ix86_binary_operator_ok (AND, SImode, operands)" ! "and{l}\\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "SI")]) --- 8499,8519 ---- (and:SI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCNOmode) && ix86_binary_operator_ok (AND, SImode, operands)" ! "and{l}\t{%2, %0|%0, %2}" ! [(set_attr "type" "alu") ! (set_attr "mode" "SI")]) ! ! ;; See comment for addsi_1_zext why we do use nonimmediate_operand ! (define_insn "*andsi_2_zext" ! [(set (reg 17) ! (compare (and:SI (match_operand:SI 1 "nonimmediate_operand" "%0") ! (match_operand:SI 2 "general_operand" "rim")) ! (const_int 0))) ! (set (match_operand:DI 0 "register_operand" "=r") ! (zero_extend:DI (and:SI (match_dup 1) (match_dup 2))))] ! "TARGET_64BIT && ix86_match_ccmode (insn, CCNOmode) ! && ix86_binary_operator_ok (AND, SImode, operands)" ! "and{l}\t{%2, %k0|%k0, %2}" [(set_attr "type" "alu") (set_attr "mode" "SI")]) *************** *** 6213,6219 **** (match_operand:HI 2 "general_operand" "ri,rm,L"))) (clobber (reg:CC 17))] "ix86_binary_operator_ok (AND, HImode, operands)" - "* { switch (get_attr_type (insn)) { --- 8531,8536 ---- *************** *** 6221,6236 **** if (GET_CODE (operands[2]) != CONST_INT) abort (); if (INTVAL (operands[2]) == 0xff) ! return \"movz{bl|x}\\t{%b1, %k0|%k0, %b1}\"; abort (); default: if (! rtx_equal_p (operands[0], operands[1])) abort (); ! return \"and{w}\\t{%2, %0|%0, %2}\"; } ! }" [(set_attr "type" "alu,alu,imovx") (set_attr "length_immediate" "*,*,0") (set_attr "mode" "HI,HI,SI")]) --- 8538,8553 ---- if (GET_CODE (operands[2]) != CONST_INT) abort (); if (INTVAL (operands[2]) == 0xff) ! return "movz{bl|x}\t{%b1, %k0|%k0, %b1}"; abort (); default: if (! rtx_equal_p (operands[0], operands[1])) abort (); ! return "and{w}\t{%2, %0|%0, %2}"; } ! } [(set_attr "type" "alu,alu,imovx") (set_attr "length_immediate" "*,*,0") (set_attr "mode" "HI,HI,SI")]) *************** *** 6244,6250 **** (and:HI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCNOmode) && ix86_binary_operator_ok (AND, HImode, operands)" ! "and{w}\\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "HI")]) --- 8561,8567 ---- (and:HI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCNOmode) && ix86_binary_operator_ok (AND, HImode, operands)" ! "and{w}\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "HI")]) *************** *** 6264,6272 **** (clobber (reg:CC 17))] "ix86_binary_operator_ok (AND, QImode, operands)" "@ ! and{b}\\t{%2, %0|%0, %2} ! and{b}\\t{%2, %0|%0, %2} ! and{l}\\t{%k2, %k0|%k0, %k2}" [(set_attr "type" "alu") (set_attr "mode" "QI,QI,SI")]) --- 8581,8589 ---- (clobber (reg:CC 17))] "ix86_binary_operator_ok (AND, QImode, operands)" "@ ! and{b}\t{%2, %0|%0, %2} ! and{b}\t{%2, %0|%0, %2} ! and{l}\t{%k2, %k0|%k0, %k2}" [(set_attr "type" "alu") (set_attr "mode" "QI,QI,SI")]) *************** *** 6276,6282 **** (match_operand:QI 1 "general_operand" "qi,qmi"))) (clobber (reg:CC 17))] "" ! "and{b}\\t{%1, %0|%0, %1}" [(set_attr "type" "alu1") (set_attr "mode" "QI")]) --- 8593,8599 ---- (match_operand:QI 1 "general_operand" "qi,qmi"))) (clobber (reg:CC 17))] "" ! "and{b}\t{%1, %0|%0, %1}" [(set_attr "type" "alu1") (set_attr "mode" "QI")]) *************** *** 6290,6306 **** (and:QI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCNOmode) && ix86_binary_operator_ok (AND, QImode, operands)" - "* { if (which_alternative == 2) { if (GET_CODE (operands[2]) == CONST_INT && (INTVAL (operands[2]) & 0xffffff00)) operands[2] = GEN_INT (INTVAL (operands[2]) & 0xff); ! return \"and{l}\\t{%2, %k0|%k0, %2}\"; } ! return \"and{b}\\t{%2, %0|%0, %2}\"; ! }" [(set_attr "type" "alu") (set_attr "mode" "QI,QI,SI")]) --- 8607,8622 ---- (and:QI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCNOmode) && ix86_binary_operator_ok (AND, QImode, operands)" { if (which_alternative == 2) { if (GET_CODE (operands[2]) == CONST_INT && (INTVAL (operands[2]) & 0xffffff00)) operands[2] = GEN_INT (INTVAL (operands[2]) & 0xff); ! return "and{l}\t{%2, %k0|%k0, %2}"; } ! return "and{b}\t{%2, %0|%0, %2}"; ! } [(set_attr "type" "alu") (set_attr "mode" "QI,QI,SI")]) *************** *** 6313,6319 **** (set (strict_low_part (match_dup 0)) (and:QI (match_dup 0) (match_dup 1)))] "ix86_match_ccmode (insn, CCNOmode)" ! "and{b}\\t{%1, %0|%0, %1}" [(set_attr "type" "alu1") (set_attr "mode" "QI")]) --- 8629,8635 ---- (set (strict_low_part (match_dup 0)) (and:QI (match_dup 0) (match_dup 1)))] "ix86_match_ccmode (insn, CCNOmode)" ! "and{b}\t{%1, %0|%0, %1}" [(set_attr "type" "alu1") (set_attr "mode" "QI")]) *************** *** 6322,6328 **** ;; for a QImode operand, which of course failed. (define_insn "andqi_ext_0" ! [(set (zero_extract:SI (match_operand 0 "ext_register_operand" "=q") (const_int 8) (const_int 8)) (and:SI --- 8638,8644 ---- ;; for a QImode operand, which of course failed. (define_insn "andqi_ext_0" ! [(set (zero_extract:SI (match_operand 0 "ext_register_operand" "=Q") (const_int 8) (const_int 8)) (and:SI *************** *** 6333,6339 **** (match_operand 2 "const_int_operand" "n"))) (clobber (reg:CC 17))] "(unsigned HOST_WIDE_INT)INTVAL (operands[2]) <= 0xff" ! "and{b}\\t{%2, %h0|%h0, %2}" [(set_attr "type" "alu") (set_attr "length_immediate" "1") (set_attr "mode" "QI")]) --- 8649,8655 ---- (match_operand 2 "const_int_operand" "n"))) (clobber (reg:CC 17))] "(unsigned HOST_WIDE_INT)INTVAL (operands[2]) <= 0xff" ! "and{b}\t{%2, %h0|%h0, %2}" [(set_attr "type" "alu") (set_attr "length_immediate" "1") (set_attr "mode" "QI")]) *************** *** 6351,6357 **** (const_int 8)) (match_operand 2 "const_int_operand" "n")) (const_int 0))) ! (set (zero_extract:SI (match_operand 0 "ext_register_operand" "=q") (const_int 8) (const_int 8)) (and:SI --- 8667,8673 ---- (const_int 8)) (match_operand 2 "const_int_operand" "n")) (const_int 0))) ! (set (zero_extract:SI (match_operand 0 "ext_register_operand" "=Q") (const_int 8) (const_int 8)) (and:SI *************** *** 6362,6374 **** (match_dup 2)))] "ix86_match_ccmode (insn, CCNOmode) && (unsigned HOST_WIDE_INT)INTVAL (operands[2]) <= 0xff" ! "and{b}\\t{%2, %h0|%h0, %2}" [(set_attr "type" "alu") (set_attr "length_immediate" "1") (set_attr "mode" "QI")]) (define_insn "*andqi_ext_1" ! [(set (zero_extract:SI (match_operand 0 "ext_register_operand" "=q") (const_int 8) (const_int 8)) (and:SI --- 8678,8690 ---- (match_dup 2)))] "ix86_match_ccmode (insn, CCNOmode) && (unsigned HOST_WIDE_INT)INTVAL (operands[2]) <= 0xff" ! "and{b}\t{%2, %h0|%h0, %2}" [(set_attr "type" "alu") (set_attr "length_immediate" "1") (set_attr "mode" "QI")]) (define_insn "*andqi_ext_1" ! [(set (zero_extract:SI (match_operand 0 "ext_register_operand" "=Q") (const_int 8) (const_int 8)) (and:SI *************** *** 6377,6392 **** (const_int 8) (const_int 8)) (zero_extend:SI ! (match_operand:QI 2 "general_operand" "qm")))) (clobber (reg:CC 17))] ! "" ! "and{b}\\t{%2, %h0|%h0, %2}" [(set_attr "type" "alu") (set_attr "length_immediate" "0") (set_attr "mode" "QI")]) (define_insn "*andqi_ext_2" ! [(set (zero_extract:SI (match_operand 0 "ext_register_operand" "=q") (const_int 8) (const_int 8)) (and:SI --- 8693,8726 ---- (const_int 8) (const_int 8)) (zero_extend:SI ! (match_operand:QI 2 "general_operand" "Qm")))) (clobber (reg:CC 17))] ! "!TARGET_64BIT" ! "and{b}\t{%2, %h0|%h0, %2}" ! [(set_attr "type" "alu") ! (set_attr "length_immediate" "0") ! (set_attr "mode" "QI")]) ! ! (define_insn "*andqi_ext_1_rex64" ! [(set (zero_extract:SI (match_operand 0 "ext_register_operand" "=Q") ! (const_int 8) ! (const_int 8)) ! (and:SI ! (zero_extract:SI ! (match_operand 1 "ext_register_operand" "0") ! (const_int 8) ! (const_int 8)) ! (zero_extend:SI ! (match_operand 2 "ext_register_operand" "Q")))) ! (clobber (reg:CC 17))] ! "TARGET_64BIT" ! "and{b}\t{%2, %h0|%h0, %2}" [(set_attr "type" "alu") (set_attr "length_immediate" "0") (set_attr "mode" "QI")]) (define_insn "*andqi_ext_2" ! [(set (zero_extract:SI (match_operand 0 "ext_register_operand" "=Q") (const_int 8) (const_int 8)) (and:SI *************** *** 6395,6406 **** (const_int 8) (const_int 8)) (zero_extract:SI ! (match_operand 2 "ext_register_operand" "q") (const_int 8) (const_int 8)))) (clobber (reg:CC 17))] "" ! "and{b}\\t{%h2, %h0|%h0, %h2}" [(set_attr "type" "alu") (set_attr "length_immediate" "0") (set_attr "mode" "QI")]) --- 8729,8740 ---- (const_int 8) (const_int 8)) (zero_extract:SI ! (match_operand 2 "ext_register_operand" "Q") (const_int 8) (const_int 8)))) (clobber (reg:CC 17))] "" ! "and{b}\t{%h2, %h0|%h0, %h2}" [(set_attr "type" "alu") (set_attr "length_immediate" "0") (set_attr "mode" "QI")]) *************** *** 6410,6415 **** --- 8744,8796 ---- ;; %%% This used to optimize known byte-wide and operations to memory. ;; If this is considered useful, it should be done with splitters. + (define_expand "iordi3" + [(set (match_operand:DI 0 "nonimmediate_operand" "") + (ior:DI (match_operand:DI 1 "nonimmediate_operand" "") + (match_operand:DI 2 "x86_64_general_operand" ""))) + (clobber (reg:CC 17))] + "TARGET_64BIT" + "ix86_expand_binary_operator (IOR, DImode, operands); DONE;") + + (define_insn "*iordi_1_rex64" + [(set (match_operand:DI 0 "nonimmediate_operand" "=rm,r") + (ior:DI (match_operand:DI 1 "nonimmediate_operand" "%0,0") + (match_operand:DI 2 "x86_64_general_operand" "re,rme"))) + (clobber (reg:CC 17))] + "TARGET_64BIT + && ix86_binary_operator_ok (IOR, DImode, operands)" + "or{q}\t{%2, %0|%0, %2}" + [(set_attr "type" "alu") + (set_attr "mode" "DI")]) + + (define_insn "*iordi_2_rex64" + [(set (reg 17) + (compare (ior:DI (match_operand:DI 1 "nonimmediate_operand" "%0,0") + (match_operand:DI 2 "x86_64_general_operand" "rem,re")) + (const_int 0))) + (set (match_operand:DI 0 "nonimmediate_operand" "=r,rm") + (ior:DI (match_dup 1) (match_dup 2)))] + "TARGET_64BIT + && ix86_match_ccmode (insn, CCNOmode) + && ix86_binary_operator_ok (IOR, DImode, operands)" + "or{q}\t{%2, %0|%0, %2}" + [(set_attr "type" "alu") + (set_attr "mode" "DI")]) + + (define_insn "*iordi_3_rex64" + [(set (reg 17) + (compare (ior:DI (match_operand:DI 1 "nonimmediate_operand" "%0") + (match_operand:DI 2 "x86_64_general_operand" "rem")) + (const_int 0))) + (clobber (match_scratch:DI 0 "=r"))] + "TARGET_64BIT + && ix86_match_ccmode (insn, CCNOmode) + && ix86_binary_operator_ok (IOR, DImode, operands)" + "or{q}\t{%2, %0|%0, %2}" + [(set_attr "type" "alu") + (set_attr "mode" "DI")]) + + (define_expand "iorsi3" [(set (match_operand:SI 0 "nonimmediate_operand" "") (ior:SI (match_operand:SI 1 "nonimmediate_operand" "") *************** *** 6424,6430 **** (match_operand:SI 2 "general_operand" "ri,rmi"))) (clobber (reg:CC 17))] "ix86_binary_operator_ok (IOR, SImode, operands)" ! "or{l}\\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "SI")]) --- 8805,8833 ---- (match_operand:SI 2 "general_operand" "ri,rmi"))) (clobber (reg:CC 17))] "ix86_binary_operator_ok (IOR, SImode, operands)" ! "or{l}\t{%2, %0|%0, %2}" ! [(set_attr "type" "alu") ! (set_attr "mode" "SI")]) ! ! ;; See comment for addsi_1_zext why we do use nonimmediate_operand ! (define_insn "*iorsi_1_zext" ! [(set (match_operand:DI 0 "register_operand" "=rm") ! (zero_extend:DI ! (ior:SI (match_operand:SI 1 "nonimmediate_operand" "%0") ! (match_operand:SI 2 "general_operand" "rim")))) ! (clobber (reg:CC 17))] ! "TARGET_64BIT && ix86_binary_operator_ok (IOR, SImode, operands)" ! "or{l}\t{%2, %k0|%k0, %2}" ! [(set_attr "type" "alu") ! (set_attr "mode" "SI")]) ! ! (define_insn "*iorsi_1_zext_imm" ! [(set (match_operand:DI 0 "register_operand" "=rm") ! (ior:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "%0")) ! (match_operand:DI 2 "x86_64_zext_immediate_operand" "Z"))) ! (clobber (reg:CC 17))] ! "TARGET_64BIT" ! "or{l}\t{%2, %k0|%k0, %2}" [(set_attr "type" "alu") (set_attr "mode" "SI")]) *************** *** 6437,6443 **** (ior:SI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCNOmode) && ix86_binary_operator_ok (IOR, SImode, operands)" ! "or{l}\\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "SI")]) --- 8840,8874 ---- (ior:SI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCNOmode) && ix86_binary_operator_ok (IOR, SImode, operands)" ! "or{l}\t{%2, %0|%0, %2}" ! [(set_attr "type" "alu") ! (set_attr "mode" "SI")]) ! ! ;; See comment for addsi_1_zext why we do use nonimmediate_operand ! ;; ??? Special case for immediate operand is missing - it is tricky. ! (define_insn "*iorsi_2_zext" ! [(set (reg 17) ! (compare (ior:SI (match_operand:SI 1 "nonimmediate_operand" "%0") ! (match_operand:SI 2 "general_operand" "rim")) ! (const_int 0))) ! (set (match_operand:DI 0 "register_operand" "=r") ! (zero_extend:DI (ior:SI (match_dup 1) (match_dup 2))))] ! "TARGET_64BIT && ix86_match_ccmode (insn, CCNOmode) ! && ix86_binary_operator_ok (IOR, SImode, operands)" ! "or{l}\t{%2, %k0|%k0, %2}" ! [(set_attr "type" "alu") ! (set_attr "mode" "SI")]) ! ! (define_insn "*iorsi_2_zext_imm" ! [(set (reg 17) ! (compare (ior:SI (match_operand:SI 1 "nonimmediate_operand" "%0") ! (match_operand 2 "x86_64_zext_immediate_operand" "Z")) ! (const_int 0))) ! (set (match_operand:DI 0 "register_operand" "=r") ! (ior:DI (zero_extend:DI (match_dup 1)) (match_dup 2)))] ! "TARGET_64BIT && ix86_match_ccmode (insn, CCNOmode) ! && ix86_binary_operator_ok (IOR, SImode, operands)" ! "or{l}\t{%2, %k0|%k0, %2}" [(set_attr "type" "alu") (set_attr "mode" "SI")]) *************** *** 6449,6455 **** (clobber (match_scratch:SI 0 "=r"))] "ix86_match_ccmode (insn, CCNOmode) && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" ! "or{l}\\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "SI")]) --- 8880,8886 ---- (clobber (match_scratch:SI 0 "=r"))] "ix86_match_ccmode (insn, CCNOmode) && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" ! "or{l}\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "SI")]) *************** *** 6467,6473 **** (match_operand:HI 2 "general_operand" "rmi,ri"))) (clobber (reg:CC 17))] "ix86_binary_operator_ok (IOR, HImode, operands)" ! "or{w}\\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "HI")]) --- 8898,8904 ---- (match_operand:HI 2 "general_operand" "rmi,ri"))) (clobber (reg:CC 17))] "ix86_binary_operator_ok (IOR, HImode, operands)" ! "or{w}\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "HI")]) *************** *** 6480,6486 **** (ior:HI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCNOmode) && ix86_binary_operator_ok (IOR, HImode, operands)" ! "or{w}\\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "HI")]) --- 8911,8917 ---- (ior:HI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCNOmode) && ix86_binary_operator_ok (IOR, HImode, operands)" ! "or{w}\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "HI")]) *************** *** 6492,6498 **** (clobber (match_scratch:HI 0 "=r"))] "ix86_match_ccmode (insn, CCNOmode) && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" ! "or{w}\\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "HI")]) --- 8923,8929 ---- (clobber (match_scratch:HI 0 "=r"))] "ix86_match_ccmode (insn, CCNOmode) && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" ! "or{w}\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "HI")]) *************** *** 6512,6520 **** (clobber (reg:CC 17))] "ix86_binary_operator_ok (IOR, QImode, operands)" "@ ! or{b}\\t{%2, %0|%0, %2} ! or{b}\\t{%2, %0|%0, %2} ! or{l}\\t{%k2, %k0|%k0, %k2}" [(set_attr "type" "alu") (set_attr "mode" "QI,QI,SI")]) --- 8943,8951 ---- (clobber (reg:CC 17))] "ix86_binary_operator_ok (IOR, QImode, operands)" "@ ! or{b}\t{%2, %0|%0, %2} ! or{b}\t{%2, %0|%0, %2} ! or{l}\t{%k2, %k0|%k0, %k2}" [(set_attr "type" "alu") (set_attr "mode" "QI,QI,SI")]) *************** *** 6524,6530 **** (match_operand:QI 1 "general_operand" "qmi,qi"))) (clobber (reg:CC 17))] "" ! "or{b}\\t{%1, %0|%0, %1}" [(set_attr "type" "alu1") (set_attr "mode" "QI")]) --- 8955,8961 ---- (match_operand:QI 1 "general_operand" "qmi,qi"))) (clobber (reg:CC 17))] "" ! "or{b}\t{%1, %0|%0, %1}" [(set_attr "type" "alu1") (set_attr "mode" "QI")]) *************** *** 6537,6543 **** (ior:QI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCNOmode) && ix86_binary_operator_ok (IOR, QImode, operands)" ! "or{b}\\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "QI")]) --- 8968,8974 ---- (ior:QI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCNOmode) && ix86_binary_operator_ok (IOR, QImode, operands)" ! "or{b}\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "QI")]) *************** *** 6549,6555 **** (set (strict_low_part (match_dup 0)) (ior:QI (match_dup 0) (match_dup 1)))] "ix86_match_ccmode (insn, CCNOmode)" ! "or{b}\\t{%1, %0|%0, %1}" [(set_attr "type" "alu1") (set_attr "mode" "QI")]) --- 8980,8986 ---- (set (strict_low_part (match_dup 0)) (ior:QI (match_dup 0) (match_dup 1)))] "ix86_match_ccmode (insn, CCNOmode)" ! "or{b}\t{%1, %0|%0, %1}" [(set_attr "type" "alu1") (set_attr "mode" "QI")]) *************** *** 6561,6567 **** (clobber (match_scratch:QI 0 "=q"))] "ix86_match_ccmode (insn, CCNOmode) && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" ! "or{b}\\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "QI")]) --- 8992,8998 ---- (clobber (match_scratch:QI 0 "=q"))] "ix86_match_ccmode (insn, CCNOmode) && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" ! "or{b}\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "QI")]) *************** *** 6571,6576 **** --- 9002,9057 ---- ;; %%% This used to optimize known byte-wide and operations to memory. ;; If this is considered useful, it should be done with splitters. + (define_expand "xordi3" + [(set (match_operand:DI 0 "nonimmediate_operand" "") + (xor:DI (match_operand:DI 1 "nonimmediate_operand" "") + (match_operand:DI 2 "x86_64_general_operand" ""))) + (clobber (reg:CC 17))] + "TARGET_64BIT" + "ix86_expand_binary_operator (XOR, DImode, operands); DONE;") + + (define_insn "*xordi_1_rex64" + [(set (match_operand:DI 0 "nonimmediate_operand" "=rm,r") + (xor:DI (match_operand:DI 1 "nonimmediate_operand" "%0,0") + (match_operand:DI 2 "x86_64_general_operand" "re,rm"))) + (clobber (reg:CC 17))] + "TARGET_64BIT + && ix86_binary_operator_ok (XOR, DImode, operands)" + "@ + xor{q}\t{%2, %0|%0, %2} + xor{q}\t{%2, %0|%0, %2}" + [(set_attr "type" "alu") + (set_attr "mode" "DI,DI")]) + + (define_insn "*xordi_2_rex64" + [(set (reg 17) + (compare (xor:DI (match_operand:DI 1 "nonimmediate_operand" "%0,0") + (match_operand:DI 2 "x86_64_general_operand" "rem,re")) + (const_int 0))) + (set (match_operand:DI 0 "nonimmediate_operand" "=r,rm") + (xor:DI (match_dup 1) (match_dup 2)))] + "TARGET_64BIT + && ix86_match_ccmode (insn, CCNOmode) + && ix86_binary_operator_ok (XOR, DImode, operands)" + "@ + xor{q}\t{%2, %0|%0, %2} + xor{q}\t{%2, %0|%0, %2}" + [(set_attr "type" "alu") + (set_attr "mode" "DI,DI")]) + + (define_insn "*xordi_3_rex64" + [(set (reg 17) + (compare (xor:DI (match_operand:DI 1 "nonimmediate_operand" "%0") + (match_operand:DI 2 "x86_64_general_operand" "rem")) + (const_int 0))) + (clobber (match_scratch:DI 0 "=r"))] + "TARGET_64BIT + && ix86_match_ccmode (insn, CCNOmode) + && ix86_binary_operator_ok (XOR, DImode, operands)" + "xor{q}\t{%2, %0|%0, %2}" + [(set_attr "type" "alu") + (set_attr "mode" "DI")]) + (define_expand "xorsi3" [(set (match_operand:SI 0 "nonimmediate_operand" "") (xor:SI (match_operand:SI 1 "nonimmediate_operand" "") *************** *** 6585,6591 **** (match_operand:SI 2 "general_operand" "ri,rm"))) (clobber (reg:CC 17))] "ix86_binary_operator_ok (XOR, SImode, operands)" ! "xor{l}\\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "SI")]) --- 9066,9095 ---- (match_operand:SI 2 "general_operand" "ri,rm"))) (clobber (reg:CC 17))] "ix86_binary_operator_ok (XOR, SImode, operands)" ! "xor{l}\t{%2, %0|%0, %2}" ! [(set_attr "type" "alu") ! (set_attr "mode" "SI")]) ! ! ;; See comment for addsi_1_zext why we do use nonimmediate_operand ! ;; Add speccase for immediates ! (define_insn "*xorsi_1_zext" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (zero_extend:DI ! (xor:SI (match_operand:SI 1 "nonimmediate_operand" "%0") ! (match_operand:SI 2 "general_operand" "rim")))) ! (clobber (reg:CC 17))] ! "TARGET_64BIT && ix86_binary_operator_ok (XOR, SImode, operands)" ! "xor{l}\t{%2, %k0|%k0, %2}" ! [(set_attr "type" "alu") ! (set_attr "mode" "SI")]) ! ! (define_insn "*xorsi_1_zext_imm" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (xor:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "%0")) ! (match_operand:DI 2 "x86_64_zext_immediate_operand" "Z"))) ! (clobber (reg:CC 17))] ! "TARGET_64BIT && ix86_binary_operator_ok (XOR, SImode, operands)" ! "xor{l}\t{%2, %k0|%k0, %2}" [(set_attr "type" "alu") (set_attr "mode" "SI")]) *************** *** 6598,6604 **** (xor:SI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCNOmode) && ix86_binary_operator_ok (XOR, SImode, operands)" ! "xor{l}\\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "SI")]) --- 9102,9136 ---- (xor:SI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCNOmode) && ix86_binary_operator_ok (XOR, SImode, operands)" ! "xor{l}\t{%2, %0|%0, %2}" ! [(set_attr "type" "alu") ! (set_attr "mode" "SI")]) ! ! ;; See comment for addsi_1_zext why we do use nonimmediate_operand ! ;; ??? Special case for immediate operand is missing - it is tricky. ! (define_insn "*xorsi_2_zext" ! [(set (reg 17) ! (compare (xor:SI (match_operand:SI 1 "nonimmediate_operand" "%0") ! (match_operand:SI 2 "general_operand" "rim")) ! (const_int 0))) ! (set (match_operand:DI 0 "register_operand" "=r") ! (zero_extend:DI (xor:SI (match_dup 1) (match_dup 2))))] ! "TARGET_64BIT && ix86_match_ccmode (insn, CCNOmode) ! && ix86_binary_operator_ok (XOR, SImode, operands)" ! "xor{l}\t{%2, %k0|%k0, %2}" ! [(set_attr "type" "alu") ! (set_attr "mode" "SI")]) ! ! (define_insn "*xorsi_2_zext_imm" ! [(set (reg 17) ! (compare (xor:SI (match_operand:SI 1 "nonimmediate_operand" "%0") ! (match_operand 2 "x86_64_zext_immediate_operand" "Z")) ! (const_int 0))) ! (set (match_operand:DI 0 "register_operand" "=r") ! (xor:DI (zero_extend:DI (match_dup 1)) (match_dup 2)))] ! "TARGET_64BIT && ix86_match_ccmode (insn, CCNOmode) ! && ix86_binary_operator_ok (XOR, SImode, operands)" ! "xor{l}\t{%2, %k0|%k0, %2}" [(set_attr "type" "alu") (set_attr "mode" "SI")]) *************** *** 6610,6616 **** (clobber (match_scratch:SI 0 "=r"))] "ix86_match_ccmode (insn, CCNOmode) && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" ! "xor{l}\\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "SI")]) --- 9142,9148 ---- (clobber (match_scratch:SI 0 "=r"))] "ix86_match_ccmode (insn, CCNOmode) && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" ! "xor{l}\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "SI")]) *************** *** 6628,6634 **** (match_operand:HI 2 "general_operand" "rmi,ri"))) (clobber (reg:CC 17))] "ix86_binary_operator_ok (XOR, HImode, operands)" ! "xor{w}\\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "HI")]) --- 9160,9166 ---- (match_operand:HI 2 "general_operand" "rmi,ri"))) (clobber (reg:CC 17))] "ix86_binary_operator_ok (XOR, HImode, operands)" ! "xor{w}\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "HI")]) *************** *** 6641,6647 **** (xor:HI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCNOmode) && ix86_binary_operator_ok (XOR, HImode, operands)" ! "xor{w}\\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "HI")]) --- 9173,9179 ---- (xor:HI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCNOmode) && ix86_binary_operator_ok (XOR, HImode, operands)" ! "xor{w}\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "HI")]) *************** *** 6653,6659 **** (clobber (match_scratch:HI 0 "=r"))] "ix86_match_ccmode (insn, CCNOmode) && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" ! "xor{w}\\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "HI")]) --- 9185,9191 ---- (clobber (match_scratch:HI 0 "=r"))] "ix86_match_ccmode (insn, CCNOmode) && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" ! "xor{w}\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "HI")]) *************** *** 6673,6698 **** (clobber (reg:CC 17))] "ix86_binary_operator_ok (XOR, QImode, operands)" "@ ! xor{b}\\t{%2, %0|%0, %2} ! xor{b}\\t{%2, %0|%0, %2} ! xor{l}\\t{%k2, %k0|%k0, %k2}" [(set_attr "type" "alu") (set_attr "mode" "QI,QI,SI")]) (define_insn "*xorqi_ext_1" ! [(set (zero_extract:SI (match_operand 0 "ext_register_operand" "=q") (const_int 8) (const_int 8)) (xor:SI (zero_extract:SI (match_operand 1 "ext_register_operand" "0") (const_int 8) (const_int 8)) ! (zero_extract:SI (match_operand 2 "ext_register_operand" "q") (const_int 8) (const_int 8)))) (clobber (reg:CC 17))] "" ! "xor{b}\\t{%h2, %h0|%h0, %h2}" [(set_attr "type" "alu") (set_attr "length_immediate" "0") (set_attr "mode" "QI")]) --- 9205,9230 ---- (clobber (reg:CC 17))] "ix86_binary_operator_ok (XOR, QImode, operands)" "@ ! xor{b}\t{%2, %0|%0, %2} ! xor{b}\t{%2, %0|%0, %2} ! xor{l}\t{%k2, %k0|%k0, %k2}" [(set_attr "type" "alu") (set_attr "mode" "QI,QI,SI")]) (define_insn "*xorqi_ext_1" ! [(set (zero_extract:SI (match_operand 0 "ext_register_operand" "=Q") (const_int 8) (const_int 8)) (xor:SI (zero_extract:SI (match_operand 1 "ext_register_operand" "0") (const_int 8) (const_int 8)) ! (zero_extract:SI (match_operand 2 "ext_register_operand" "Q") (const_int 8) (const_int 8)))) (clobber (reg:CC 17))] "" ! "xor{b}\t{%h2, %h0|%h0, %h2}" [(set_attr "type" "alu") (set_attr "length_immediate" "0") (set_attr "mode" "QI")]) *************** *** 6707,6713 **** (xor:QI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCNOmode) && ix86_binary_operator_ok (XOR, QImode, operands)" ! "xor{b}\\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "QI")]) --- 9239,9245 ---- (xor:QI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCNOmode) && ix86_binary_operator_ok (XOR, QImode, operands)" ! "xor{b}\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "QI")]) *************** *** 6720,6726 **** (clobber (match_scratch:QI 0 "=q"))] "ix86_match_ccmode (insn, CCNOmode) && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" ! "xor{b}\\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "QI")]) --- 9252,9258 ---- (clobber (match_scratch:QI 0 "=q"))] "ix86_match_ccmode (insn, CCNOmode) && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" ! "xor{b}\t{%2, %0|%0, %2}" [(set_attr "type" "alu") (set_attr "mode" "QI")]) *************** *** 6740,6747 **** (xor:SI (zero_extract:SI (match_dup 1) (const_int 8) (const_int 8)) (match_dup 2)))] ! "ix86_match_ccmode (insn, CCNOmode)" ! "xor{b}\\t{%2, %h0|%h0, %2}" [(set_attr "type" "alu") (set_attr "mode" "QI")]) --- 9272,9300 ---- (xor:SI (zero_extract:SI (match_dup 1) (const_int 8) (const_int 8)) (match_dup 2)))] ! "!TARGET_64BIT && ix86_match_ccmode (insn, CCNOmode)" ! "xor{b}\t{%2, %h0|%h0, %2}" ! [(set_attr "type" "alu") ! (set_attr "mode" "QI")]) ! ! (define_insn "*xorqi_cc_ext_1_rex64" ! [(set (reg 17) ! (compare ! (xor:SI ! (zero_extract:SI ! (match_operand 1 "ext_register_operand" "0") ! (const_int 8) ! (const_int 8)) ! (match_operand:QI 2 "nonmemory_operand" "Qn")) ! (const_int 0))) ! (set (zero_extract:SI (match_operand 0 "ext_register_operand" "=Q") ! (const_int 8) ! (const_int 8)) ! (xor:SI ! (zero_extract:SI (match_dup 1) (const_int 8) (const_int 8)) ! (match_dup 2)))] ! "TARGET_64BIT && ix86_match_ccmode (insn, CCNOmode)" ! "xor{b}\t{%2, %h0|%h0, %2}" [(set_attr "type" "alu") (set_attr "mode" "QI")]) *************** *** 6767,6774 **** ;; Negation instructions - ;; %%% define_expand from the very first? - (define_expand "negdi2" [(parallel [(set (match_operand:DI 0 "nonimmediate_operand" "") (neg:DI (match_operand:DI 1 "nonimmediate_operand" ""))) --- 9320,9325 ---- *************** *** 6780,6793 **** [(set (match_operand:DI 0 "nonimmediate_operand" "=ro") (neg:DI (match_operand:DI 1 "general_operand" "0"))) (clobber (reg:CC 17))] ! "ix86_unary_operator_ok (NEG, DImode, operands)" "#") (define_split [(set (match_operand:DI 0 "nonimmediate_operand" "") (neg:DI (match_operand:DI 1 "general_operand" ""))) (clobber (reg:CC 17))] ! "reload_completed" [(parallel [(set (reg:CCZ 17) (compare:CCZ (neg:SI (match_dup 2)) (const_int 0))) --- 9331,9345 ---- [(set (match_operand:DI 0 "nonimmediate_operand" "=ro") (neg:DI (match_operand:DI 1 "general_operand" "0"))) (clobber (reg:CC 17))] ! "!TARGET_64BIT ! && ix86_unary_operator_ok (NEG, DImode, operands)" "#") (define_split [(set (match_operand:DI 0 "nonimmediate_operand" "") (neg:DI (match_operand:DI 1 "general_operand" ""))) (clobber (reg:CC 17))] ! "!TARGET_64BIT && reload_completed" [(parallel [(set (reg:CCZ 17) (compare:CCZ (neg:SI (match_dup 2)) (const_int 0))) *************** *** 6805,6810 **** --- 9357,9387 ---- "split_di (operands+1, 1, operands+2, operands+3); split_di (operands+0, 1, operands+0, operands+1);") + (define_insn "*negdi2_1_rex64" + [(set (match_operand:DI 0 "nonimmediate_operand" "=rm") + (neg:DI (match_operand:DI 1 "nonimmediate_operand" "0"))) + (clobber (reg:CC 17))] + "TARGET_64BIT && ix86_unary_operator_ok (NEG, DImode, operands)" + "neg{q}\t%0" + [(set_attr "type" "negnot") + (set_attr "mode" "DI")]) + + ;; The problem with neg is that it does not perform (compare x 0), + ;; it really performs (compare 0 x), which leaves us with the zero + ;; flag being the only useful item. + + (define_insn "*negdi2_cmpz_rex64" + [(set (reg:CCZ 17) + (compare:CCZ (neg:DI (match_operand:DI 1 "nonimmediate_operand" "0")) + (const_int 0))) + (set (match_operand:DI 0 "nonimmediate_operand" "=rm") + (neg:DI (match_dup 1)))] + "TARGET_64BIT && ix86_unary_operator_ok (NEG, DImode, operands)" + "neg{q}\t%0" + [(set_attr "type" "negnot") + (set_attr "mode" "DI")]) + + (define_expand "negsi2" [(parallel [(set (match_operand:SI 0 "nonimmediate_operand" "") (neg:SI (match_operand:SI 1 "nonimmediate_operand" ""))) *************** *** 6817,6823 **** (neg:SI (match_operand:SI 1 "nonimmediate_operand" "0"))) (clobber (reg:CC 17))] "ix86_unary_operator_ok (NEG, SImode, operands)" ! "neg{l}\\t%0" [(set_attr "type" "negnot") (set_attr "mode" "SI")]) --- 9394,9412 ---- (neg:SI (match_operand:SI 1 "nonimmediate_operand" "0"))) (clobber (reg:CC 17))] "ix86_unary_operator_ok (NEG, SImode, operands)" ! "neg{l}\t%0" ! [(set_attr "type" "negnot") ! (set_attr "mode" "SI")]) ! ! ;; Combine is quite creative about this pattern. ! (define_insn "*negsi2_1_zext" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (lshiftrt:DI (neg:DI (ashift:DI (match_operand:DI 1 "register_operand" "0") ! (const_int 32))) ! (const_int 32))) ! (clobber (reg:CC 17))] ! "TARGET_64BIT && ix86_unary_operator_ok (NEG, SImode, operands)" ! "neg{l}\t%k0" [(set_attr "type" "negnot") (set_attr "mode" "SI")]) *************** *** 6832,6838 **** (set (match_operand:SI 0 "nonimmediate_operand" "=rm") (neg:SI (match_dup 1)))] "ix86_unary_operator_ok (NEG, SImode, operands)" ! "neg{l}\\t%0" [(set_attr "type" "negnot") (set_attr "mode" "SI")]) --- 9421,9444 ---- (set (match_operand:SI 0 "nonimmediate_operand" "=rm") (neg:SI (match_dup 1)))] "ix86_unary_operator_ok (NEG, SImode, operands)" ! "neg{l}\t%0" ! [(set_attr "type" "negnot") ! (set_attr "mode" "SI")]) ! ! (define_insn "*negsi2_cmpz_zext" ! [(set (reg:CCZ 17) ! (compare:CCZ (lshiftrt:DI ! (neg:DI (ashift:DI ! (match_operand:DI 1 "register_operand" "0") ! (const_int 32))) ! (const_int 32)) ! (const_int 0))) ! (set (match_operand:DI 0 "register_operand" "=r") ! (lshiftrt:DI (neg:DI (ashift:DI (match_dup 1) ! (const_int 32))) ! (const_int 32)))] ! "TARGET_64BIT && ix86_unary_operator_ok (NEG, SImode, operands)" ! "neg{l}\t%k0" [(set_attr "type" "negnot") (set_attr "mode" "SI")]) *************** *** 6848,6854 **** (neg:HI (match_operand:HI 1 "nonimmediate_operand" "0"))) (clobber (reg:CC 17))] "ix86_unary_operator_ok (NEG, HImode, operands)" ! "neg{w}\\t%0" [(set_attr "type" "negnot") (set_attr "mode" "HI")]) --- 9454,9460 ---- (neg:HI (match_operand:HI 1 "nonimmediate_operand" "0"))) (clobber (reg:CC 17))] "ix86_unary_operator_ok (NEG, HImode, operands)" ! "neg{w}\t%0" [(set_attr "type" "negnot") (set_attr "mode" "HI")]) *************** *** 6859,6865 **** (set (match_operand:HI 0 "nonimmediate_operand" "=rm") (neg:HI (match_dup 1)))] "ix86_unary_operator_ok (NEG, HImode, operands)" ! "neg{w}\\t%0" [(set_attr "type" "negnot") (set_attr "mode" "HI")]) --- 9465,9471 ---- (set (match_operand:HI 0 "nonimmediate_operand" "=rm") (neg:HI (match_dup 1)))] "ix86_unary_operator_ok (NEG, HImode, operands)" ! "neg{w}\t%0" [(set_attr "type" "negnot") (set_attr "mode" "HI")]) *************** *** 6875,6881 **** (neg:QI (match_operand:QI 1 "nonimmediate_operand" "0"))) (clobber (reg:CC 17))] "ix86_unary_operator_ok (NEG, QImode, operands)" ! "neg{b}\\t%0" [(set_attr "type" "negnot") (set_attr "mode" "QI")]) --- 9481,9487 ---- (neg:QI (match_operand:QI 1 "nonimmediate_operand" "0"))) (clobber (reg:CC 17))] "ix86_unary_operator_ok (NEG, QImode, operands)" ! "neg{b}\t%0" [(set_attr "type" "negnot") (set_attr "mode" "QI")]) *************** *** 6886,6892 **** (set (match_operand:QI 0 "nonimmediate_operand" "=qm") (neg:QI (match_dup 1)))] "ix86_unary_operator_ok (NEG, QImode, operands)" ! "neg{b}\\t%0" [(set_attr "type" "negnot") (set_attr "mode" "QI")]) --- 9492,9498 ---- (set (match_operand:QI 0 "nonimmediate_operand" "=qm") (neg:QI (match_dup 1)))] "ix86_unary_operator_ok (NEG, QImode, operands)" ! "neg{b}\t%0" [(set_attr "type" "negnot") (set_attr "mode" "QI")]) *************** *** 6897,6903 **** (neg:SF (match_operand:SF 1 "nonimmediate_operand" ""))) (clobber (reg:CC 17))])] "TARGET_80387" ! "ix86_expand_unary_operator (NEG, SFmode, operands); DONE;") ;; Keep 'f' and 'r' in separate alternatives to avoid reload problems ;; because of secondary memory needed to reload from class FLOAT_INT_REGS --- 9503,9592 ---- (neg:SF (match_operand:SF 1 "nonimmediate_operand" ""))) (clobber (reg:CC 17))])] "TARGET_80387" ! "if (TARGET_SSE) ! { ! /* In case operand is in memory, we will not use SSE. */ ! if (memory_operand (operands[0], VOIDmode) ! && rtx_equal_p (operands[0], operands[1])) ! emit_insn (gen_negsf2_memory (operands[0], operands[1])); ! else ! { ! /* Using SSE is tricky, since we need bitwise negation of -0 ! in register. */ ! rtx reg = gen_reg_rtx (SFmode); ! rtx dest = operands[0]; ! ! operands[1] = force_reg (SFmode, operands[1]); ! operands[0] = force_reg (SFmode, operands[0]); ! emit_move_insn (reg, ! gen_lowpart (SFmode, ! GEN_INT (trunc_int_for_mode (0x80000000, ! SImode)))); ! emit_insn (gen_negsf2_ifs (operands[0], operands[1], reg)); ! if (dest != operands[0]) ! emit_move_insn (dest, operands[0]); ! } ! DONE; ! } ! ix86_expand_unary_operator (NEG, SFmode, operands); DONE;") ! ! (define_insn "negsf2_memory" ! [(set (match_operand:SF 0 "memory_operand" "=m") ! (neg:SF (match_operand:SF 1 "memory_operand" "0"))) ! (clobber (reg:CC 17))] ! "ix86_unary_operator_ok (NEG, SFmode, operands)" ! "#") ! ! (define_insn "negsf2_ifs" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=x#fr,x#fr,f#xr,rm#xf") ! (neg:SF (match_operand:SF 1 "nonimmediate_operand" "0,x#fr,0,0"))) ! (use (match_operand:SF 2 "nonmemory_operand" "x,0#x,*g#x,*g#x")) ! (clobber (reg:CC 17))] ! "TARGET_SSE ! && (reload_in_progress || reload_completed ! || (register_operand (operands[0], VOIDmode) ! && register_operand (operands[1], VOIDmode)))" ! "#") ! ! (define_split ! [(set (match_operand:SF 0 "memory_operand" "") ! (neg:SF (match_operand:SF 1 "memory_operand" ""))) ! (use (match_operand:SF 2 "" "")) ! (clobber (reg:CC 17))] ! "" ! [(parallel [(set (match_dup 0) ! (neg:SF (match_dup 1))) ! (clobber (reg:CC 17))])]) ! ! (define_split ! [(set (match_operand:SF 0 "register_operand" "") ! (neg:SF (match_operand:SF 1 "register_operand" ""))) ! (use (match_operand:SF 2 "" "")) ! (clobber (reg:CC 17))] ! "reload_completed && !SSE_REG_P (operands[0])" ! [(parallel [(set (match_dup 0) ! (neg:SF (match_dup 1))) ! (clobber (reg:CC 17))])]) ! ! (define_split ! [(set (match_operand:SF 0 "register_operand" "") ! (neg:SF (match_operand:SF 1 "register_operand" ""))) ! (use (match_operand:SF 2 "register_operand" "")) ! (clobber (reg:CC 17))] ! "reload_completed && SSE_REG_P (operands[0])" ! [(set (subreg:TI (match_dup 0) 0) ! (xor:TI (subreg:TI (match_dup 1) 0) ! (subreg:TI (match_dup 2) 0)))] ! { ! if (operands_match_p (operands[0], operands[2])) ! { ! rtx tmp; ! tmp = operands[1]; ! operands[1] = operands[2]; ! operands[2] = tmp; ! } ! }) ! ;; Keep 'f' and 'r' in separate alternatives to avoid reload problems ;; because of secondary memory needed to reload from class FLOAT_INT_REGS *************** *** 6906,6912 **** [(set (match_operand:SF 0 "nonimmediate_operand" "=f#r,rm#f") (neg:SF (match_operand:SF 1 "nonimmediate_operand" "0,0"))) (clobber (reg:CC 17))] ! "TARGET_80387 && ix86_unary_operator_ok (NEG, SFmode, operands)" "#") (define_split --- 9595,9602 ---- [(set (match_operand:SF 0 "nonimmediate_operand" "=f#r,rm#f") (neg:SF (match_operand:SF 1 "nonimmediate_operand" "0,0"))) (clobber (reg:CC 17))] ! "TARGET_80387 && !TARGET_SSE ! && ix86_unary_operator_ok (NEG, SFmode, operands)" "#") (define_split *************** *** 6925,6931 **** "TARGET_80387 && reload_completed && !FP_REGNO_P (REGNO (operands[0]))" [(parallel [(set (match_dup 0) (xor:SI (match_dup 0) (match_dup 1))) (clobber (reg:CC 17))])] ! "operands[1] = GEN_INT (0x80000000); operands[0] = gen_rtx_REG (SImode, REGNO (operands[0]));") (define_split --- 9615,9621 ---- "TARGET_80387 && reload_completed && !FP_REGNO_P (REGNO (operands[0]))" [(parallel [(set (match_dup 0) (xor:SI (match_dup 0) (match_dup 1))) (clobber (reg:CC 17))])] ! "operands[1] = GEN_INT (trunc_int_for_mode (0x80000000, SImode)); operands[0] = gen_rtx_REG (SImode, REGNO (operands[0]));") (define_split *************** *** 6935,6958 **** "TARGET_80387 && reload_completed && FLOAT_MODE_P (GET_MODE (operands[0]))" [(parallel [(set (match_dup 0) (xor:QI (match_dup 0) (match_dup 1))) (clobber (reg:CC 17))])] - " { int size = GET_MODE_SIZE (GET_MODE (operands[1])); ! /* XFmode's size is 12, but only 10 bytes are used. */ ! if (size == 12) size = 10; ! operands[0] = gen_rtx_MEM (QImode, XEXP (operands[0], 0)); ! operands[0] = adj_offsettable_operand (operands[0], size - 1); ! operands[1] = GEN_INT (0x80); ! }") (define_expand "negdf2" [(parallel [(set (match_operand:DF 0 "nonimmediate_operand" "") (neg:DF (match_operand:DF 1 "nonimmediate_operand" ""))) (clobber (reg:CC 17))])] "TARGET_80387" ! "ix86_expand_unary_operator (NEG, DFmode, operands); DONE;") ;; Keep 'f' and 'r' in separate alternatives to avoid reload problems ;; because of secondary memory needed to reload from class FLOAT_INT_REGS --- 9625,9756 ---- "TARGET_80387 && reload_completed && FLOAT_MODE_P (GET_MODE (operands[0]))" [(parallel [(set (match_dup 0) (xor:QI (match_dup 0) (match_dup 1))) (clobber (reg:CC 17))])] { int size = GET_MODE_SIZE (GET_MODE (operands[1])); ! /* XFmode's size is 12, TFmode 16, but only 10 bytes are used. */ ! if (size >= 12) size = 10; ! operands[0] = adjust_address (operands[0], QImode, size - 1); ! operands[1] = GEN_INT (trunc_int_for_mode (0x80, QImode)); ! }) (define_expand "negdf2" [(parallel [(set (match_operand:DF 0 "nonimmediate_operand" "") (neg:DF (match_operand:DF 1 "nonimmediate_operand" ""))) (clobber (reg:CC 17))])] "TARGET_80387" ! "if (TARGET_SSE2) ! { ! /* In case operand is in memory, we will not use SSE. */ ! if (memory_operand (operands[0], VOIDmode) ! && rtx_equal_p (operands[0], operands[1])) ! emit_insn (gen_negdf2_memory (operands[0], operands[1])); ! else ! { ! /* Using SSE is tricky, since we need bitwise negation of -0 ! in register. */ ! rtx reg = gen_reg_rtx (DFmode); ! #if HOST_BITS_PER_WIDE_INT >= 64 ! rtx imm = GEN_INT (trunc_int_for_mode(((HOST_WIDE_INT)1) << 63, ! DImode)); ! #else ! rtx imm = immed_double_const (0, 0x80000000, DImode); ! #endif ! rtx dest = operands[0]; ! ! operands[1] = force_reg (DFmode, operands[1]); ! operands[0] = force_reg (DFmode, operands[0]); ! emit_move_insn (reg, gen_lowpart (DFmode, imm)); ! emit_insn (gen_negdf2_ifs (operands[0], operands[1], reg)); ! if (dest != operands[0]) ! emit_move_insn (dest, operands[0]); ! } ! DONE; ! } ! ix86_expand_unary_operator (NEG, DFmode, operands); DONE;") ! ! (define_insn "negdf2_memory" ! [(set (match_operand:DF 0 "memory_operand" "=m") ! (neg:DF (match_operand:DF 1 "memory_operand" "0"))) ! (clobber (reg:CC 17))] ! "ix86_unary_operator_ok (NEG, DFmode, operands)" ! "#") ! ! (define_insn "negdf2_ifs" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=Y#fr,Y#fr,f#Yr,rm#Yf") ! (neg:DF (match_operand:DF 1 "nonimmediate_operand" "0,Y#fr,0,0"))) ! (use (match_operand:DF 2 "nonmemory_operand" "Y,0,*g#Y,*g#Y")) ! (clobber (reg:CC 17))] ! "!TARGET_64BIT && TARGET_SSE2 ! && (reload_in_progress || reload_completed ! || (register_operand (operands[0], VOIDmode) ! && register_operand (operands[1], VOIDmode)))" ! "#") ! ! (define_insn "*negdf2_ifs_rex64" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=Y#fr,Y#fr,fm#Yr,r#Yf") ! (neg:DF (match_operand:DF 1 "nonimmediate_operand" "0,Y#fr,0,0"))) ! (use (match_operand:DF 2 "general_operand" "Y,0,*g#Yr,*rm")) ! (clobber (reg:CC 17))] ! "TARGET_64BIT && TARGET_SSE2 ! && (reload_in_progress || reload_completed ! || (register_operand (operands[0], VOIDmode) ! && register_operand (operands[1], VOIDmode)))" ! "#") ! ! (define_split ! [(set (match_operand:DF 0 "memory_operand" "") ! (neg:DF (match_operand:DF 1 "memory_operand" ""))) ! (use (match_operand:DF 2 "" "")) ! (clobber (reg:CC 17))] ! "" ! [(parallel [(set (match_dup 0) ! (neg:DF (match_dup 1))) ! (clobber (reg:CC 17))])]) ! ! (define_split ! [(set (match_operand:DF 0 "register_operand" "") ! (neg:DF (match_operand:DF 1 "register_operand" ""))) ! (use (match_operand:DF 2 "" "")) ! (clobber (reg:CC 17))] ! "reload_completed && !SSE_REG_P (operands[0]) ! && (!TARGET_64BIT || FP_REG_P (operands[0]))" ! [(parallel [(set (match_dup 0) ! (neg:DF (match_dup 1))) ! (clobber (reg:CC 17))])]) ! ! (define_split ! [(set (match_operand:DF 0 "register_operand" "") ! (neg:DF (match_operand:DF 1 "register_operand" ""))) ! (use (match_operand:DF 2 "" "")) ! (clobber (reg:CC 17))] ! "TARGET_64BIT && reload_completed && GENERAL_REG_P (operands[0])" ! [(parallel [(set (match_dup 0) ! (xor:DI (match_dup 1) (match_dup 2))) ! (clobber (reg:CC 17))])] ! "operands[0] = gen_lowpart (DImode, operands[0]); ! operands[1] = gen_lowpart (DImode, operands[1]); ! operands[2] = gen_lowpart (DImode, operands[2]);") ! ! (define_split ! [(set (match_operand:DF 0 "register_operand" "") ! (neg:DF (match_operand:DF 1 "register_operand" ""))) ! (use (match_operand:DF 2 "register_operand" "")) ! (clobber (reg:CC 17))] ! "reload_completed && SSE_REG_P (operands[0])" ! [(set (subreg:TI (match_dup 0) 0) ! (xor:TI (subreg:TI (match_dup 1) 0) ! (subreg:TI (match_dup 2) 0)))] ! { ! if (operands_match_p (operands[0], operands[2])) ! { ! rtx tmp; ! tmp = operands[1]; ! operands[1] = operands[2]; ! operands[2] = tmp; ! } ! }) ;; Keep 'f' and 'r' in separate alternatives to avoid reload problems ;; because of secondary memory needed to reload from class FLOAT_INT_REGS *************** *** 6961,6967 **** [(set (match_operand:DF 0 "nonimmediate_operand" "=f#r,rm#f") (neg:DF (match_operand:DF 1 "nonimmediate_operand" "0,0"))) (clobber (reg:CC 17))] ! "TARGET_80387 && ix86_unary_operator_ok (NEG, DFmode, operands)" "#") (define_split --- 9759,9778 ---- [(set (match_operand:DF 0 "nonimmediate_operand" "=f#r,rm#f") (neg:DF (match_operand:DF 1 "nonimmediate_operand" "0,0"))) (clobber (reg:CC 17))] ! "!TARGET_64BIT && TARGET_80387 ! && ix86_unary_operator_ok (NEG, DFmode, operands)" ! "#") ! ! ;; FIXME: We should to allow integer registers here. Problem is that ! ;; we need another scratch register to get constant from. ! ;; Forcing constant to mem if no register available in peep2 should be ! ;; safe even for PIC mode, because of RIP relative addressing. ! (define_insn "*negdf2_if_rex64" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=f,mf") ! (neg:DF (match_operand:DF 1 "nonimmediate_operand" "0,0"))) ! (clobber (reg:CC 17))] ! "TARGET_64BIT && TARGET_80387 ! && ix86_unary_operator_ok (NEG, DFmode, operands)" "#") (define_split *************** *** 6977,6993 **** [(set (match_operand:DF 0 "register_operand" "") (neg:DF (match_operand:DF 1 "register_operand" ""))) (clobber (reg:CC 17))] ! "TARGET_80387 && reload_completed && !FP_REGNO_P (REGNO (operands[0]))" [(parallel [(set (match_dup 3) (xor:SI (match_dup 3) (match_dup 4))) (clobber (reg:CC 17))])] ! "operands[4] = GEN_INT (0x80000000); split_di (operands+0, 1, operands+2, operands+3);") (define_expand "negxf2" [(parallel [(set (match_operand:XF 0 "nonimmediate_operand" "") (neg:XF (match_operand:XF 1 "nonimmediate_operand" ""))) (clobber (reg:CC 17))])] ! "TARGET_80387" "ix86_expand_unary_operator (NEG, XFmode, operands); DONE;") (define_expand "negtf2" --- 9788,9805 ---- [(set (match_operand:DF 0 "register_operand" "") (neg:DF (match_operand:DF 1 "register_operand" ""))) (clobber (reg:CC 17))] ! "!TARGET_64BIT && TARGET_80387 && reload_completed ! && !FP_REGNO_P (REGNO (operands[0]))" [(parallel [(set (match_dup 3) (xor:SI (match_dup 3) (match_dup 4))) (clobber (reg:CC 17))])] ! "operands[4] = GEN_INT (trunc_int_for_mode (0x80000000, SImode)); split_di (operands+0, 1, operands+2, operands+3);") (define_expand "negxf2" [(parallel [(set (match_operand:XF 0 "nonimmediate_operand" "") (neg:XF (match_operand:XF 1 "nonimmediate_operand" ""))) (clobber (reg:CC 17))])] ! "!TARGET_64BIT && TARGET_80387" "ix86_expand_unary_operator (NEG, XFmode, operands); DONE;") (define_expand "negtf2" *************** *** 7004,7010 **** [(set (match_operand:XF 0 "nonimmediate_operand" "=f#r,rm#f") (neg:XF (match_operand:XF 1 "nonimmediate_operand" "0,0"))) (clobber (reg:CC 17))] ! "TARGET_80387 && ix86_unary_operator_ok (NEG, XFmode, operands)" "#") (define_split --- 9816,9823 ---- [(set (match_operand:XF 0 "nonimmediate_operand" "=f#r,rm#f") (neg:XF (match_operand:XF 1 "nonimmediate_operand" "0,0"))) (clobber (reg:CC 17))] ! "!TARGET_64BIT && TARGET_80387 ! && ix86_unary_operator_ok (NEG, XFmode, operands)" "#") (define_split *************** *** 7024,7030 **** [(parallel [(set (match_dup 0) (xor:SI (match_dup 0) (match_dup 1))) (clobber (reg:CC 17))])] "operands[1] = GEN_INT (0x8000); ! operands[0] = gen_rtx_REG (SImode, true_regnum (operands[0]) + 2);") ;; Keep 'f' and 'r' in separate alternatives to avoid reload problems ;; because of secondary memory needed to reload from class FLOAT_INT_REGS --- 9837,9844 ---- [(parallel [(set (match_dup 0) (xor:SI (match_dup 0) (match_dup 1))) (clobber (reg:CC 17))])] "operands[1] = GEN_INT (0x8000); ! operands[0] = gen_rtx_REG (SImode, ! true_regnum (operands[0]) + (TARGET_64BIT ? 1 : 2));") ;; Keep 'f' and 'r' in separate alternatives to avoid reload problems ;; because of secondary memory needed to reload from class FLOAT_INT_REGS *************** *** 7053,7059 **** [(parallel [(set (match_dup 0) (xor:SI (match_dup 0) (match_dup 1))) (clobber (reg:CC 17))])] "operands[1] = GEN_INT (0x8000); ! operands[0] = gen_rtx_REG (SImode, true_regnum (operands[0]) + 2);") ;; Conditionize these after reload. If they matches before reload, we ;; lose the clobber and ability to use integer instructions. --- 9867,9874 ---- [(parallel [(set (match_dup 0) (xor:SI (match_dup 0) (match_dup 1))) (clobber (reg:CC 17))])] "operands[1] = GEN_INT (0x8000); ! operands[0] = gen_rtx_REG (SImode, ! true_regnum (operands[0]) + (TARGET_64BIT ? 1 : 2));") ;; Conditionize these after reload. If they matches before reload, we ;; lose the clobber and ability to use integer instructions. *************** *** 7089,7095 **** (define_insn "*negxf2_1" [(set (match_operand:XF 0 "register_operand" "=f") (neg:XF (match_operand:XF 1 "register_operand" "0")))] ! "TARGET_80387 && reload_completed" "fchs" [(set_attr "type" "fsgn") (set_attr "mode" "XF") --- 9904,9910 ---- (define_insn "*negxf2_1" [(set (match_operand:XF 0 "register_operand" "=f") (neg:XF (match_operand:XF 1 "register_operand" "0")))] ! "!TARGET_64BIT && TARGET_80387 && reload_completed" "fchs" [(set_attr "type" "fsgn") (set_attr "mode" "XF") *************** *** 7099,7105 **** [(set (match_operand:XF 0 "register_operand" "=f") (neg:XF (float_extend:XF (match_operand:DF 1 "register_operand" "0"))))] ! "TARGET_80387" "fchs" [(set_attr "type" "fsgn") (set_attr "mode" "XF") --- 9914,9920 ---- [(set (match_operand:XF 0 "register_operand" "=f") (neg:XF (float_extend:XF (match_operand:DF 1 "register_operand" "0"))))] ! "!TARGET_64BIT && TARGET_80387" "fchs" [(set_attr "type" "fsgn") (set_attr "mode" "XF") *************** *** 7109,7115 **** [(set (match_operand:XF 0 "register_operand" "=f") (neg:XF (float_extend:XF (match_operand:SF 1 "register_operand" "0"))))] ! "TARGET_80387" "fchs" [(set_attr "type" "fsgn") (set_attr "mode" "XF") --- 9924,9930 ---- [(set (match_operand:XF 0 "register_operand" "=f") (neg:XF (float_extend:XF (match_operand:SF 1 "register_operand" "0"))))] ! "!TARGET_64BIT && TARGET_80387" "fchs" [(set_attr "type" "fsgn") (set_attr "mode" "XF") *************** *** 7151,7157 **** (neg:SF (match_operand:SF 1 "nonimmediate_operand" ""))) (clobber (reg:CC 17))])] "TARGET_80387" ! "ix86_expand_unary_operator (ABS, SFmode, operands); DONE;") ;; Keep 'f' and 'r' in separate alternatives to avoid reload problems ;; because of secondary memory needed to reload from class FLOAT_INT_REGS --- 9966,10045 ---- (neg:SF (match_operand:SF 1 "nonimmediate_operand" ""))) (clobber (reg:CC 17))])] "TARGET_80387" ! "if (TARGET_SSE) ! { ! /* In case operand is in memory, we will not use SSE. */ ! if (memory_operand (operands[0], VOIDmode) ! && rtx_equal_p (operands[0], operands[1])) ! emit_insn (gen_abssf2_memory (operands[0], operands[1])); ! else ! { ! /* Using SSE is tricky, since we need bitwise negation of -0 ! in register. */ ! rtx reg = gen_reg_rtx (SFmode); ! rtx dest = operands[0]; ! ! operands[1] = force_reg (SFmode, operands[1]); ! operands[0] = force_reg (SFmode, operands[0]); ! emit_move_insn (reg, ! gen_lowpart (SFmode, ! GEN_INT (trunc_int_for_mode (0x80000000, ! SImode)))); ! emit_insn (gen_abssf2_ifs (operands[0], operands[1], reg)); ! if (dest != operands[0]) ! emit_move_insn (dest, operands[0]); ! } ! DONE; ! } ! ix86_expand_unary_operator (ABS, SFmode, operands); DONE;") ! ! (define_insn "abssf2_memory" ! [(set (match_operand:SF 0 "memory_operand" "=m") ! (abs:SF (match_operand:SF 1 "memory_operand" "0"))) ! (clobber (reg:CC 17))] ! "ix86_unary_operator_ok (ABS, SFmode, operands)" ! "#") ! ! (define_insn "abssf2_ifs" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=x#fr,f#xr,rm#xf") ! (abs:SF (match_operand:SF 1 "nonimmediate_operand" "x,0,0"))) ! (use (match_operand:SF 2 "nonmemory_operand" "*0#x,*g#x,*g#x")) ! (clobber (reg:CC 17))] ! "TARGET_SSE ! && (reload_in_progress || reload_completed ! || (register_operand (operands[0], VOIDmode) ! && register_operand (operands[1], VOIDmode)))" ! "#") ! ! (define_split ! [(set (match_operand:SF 0 "memory_operand" "") ! (abs:SF (match_operand:SF 1 "memory_operand" ""))) ! (use (match_operand:SF 2 "" "")) ! (clobber (reg:CC 17))] ! "" ! [(parallel [(set (match_dup 0) ! (abs:SF (match_dup 1))) ! (clobber (reg:CC 17))])]) ! ! (define_split ! [(set (match_operand:SF 0 "register_operand" "") ! (abs:SF (match_operand:SF 1 "register_operand" ""))) ! (use (match_operand:SF 2 "" "")) ! (clobber (reg:CC 17))] ! "reload_completed && !SSE_REG_P (operands[0])" ! [(parallel [(set (match_dup 0) ! (abs:SF (match_dup 1))) ! (clobber (reg:CC 17))])]) ! ! (define_split ! [(set (match_operand:SF 0 "register_operand" "") ! (abs:SF (match_operand:SF 1 "register_operand" ""))) ! (use (match_operand:SF 2 "register_operand" "")) ! (clobber (reg:CC 17))] ! "reload_completed && SSE_REG_P (operands[0])" ! [(set (subreg:TI (match_dup 0) 0) ! (and:TI (not:TI (subreg:TI (match_dup 2) 0)) ! (subreg:TI (match_dup 1) 0)))]) ;; Keep 'f' and 'r' in separate alternatives to avoid reload problems ;; because of secondary memory needed to reload from class FLOAT_INT_REGS *************** *** 7160,7166 **** [(set (match_operand:SF 0 "nonimmediate_operand" "=f#r,rm#f") (abs:SF (match_operand:SF 1 "nonimmediate_operand" "0,0"))) (clobber (reg:CC 17))] ! "TARGET_80387 && ix86_unary_operator_ok (ABS, SFmode, operands)" "#") (define_split --- 10048,10054 ---- [(set (match_operand:SF 0 "nonimmediate_operand" "=f#r,rm#f") (abs:SF (match_operand:SF 1 "nonimmediate_operand" "0,0"))) (clobber (reg:CC 17))] ! "TARGET_80387 && ix86_unary_operator_ok (ABS, SFmode, operands) && !TARGET_SSE" "#") (define_split *************** *** 7179,7185 **** "TARGET_80387 && reload_completed && !FP_REGNO_P (REGNO (operands[0]))" [(parallel [(set (match_dup 0) (and:SI (match_dup 0) (match_dup 1))) (clobber (reg:CC 17))])] ! "operands[1] = GEN_INT (~0x80000000); operands[0] = gen_rtx_REG (SImode, REGNO (operands[0]));") (define_split --- 10067,10073 ---- "TARGET_80387 && reload_completed && !FP_REGNO_P (REGNO (operands[0]))" [(parallel [(set (match_dup 0) (and:SI (match_dup 0) (match_dup 1))) (clobber (reg:CC 17))])] ! "operands[1] = GEN_INT (trunc_int_for_mode (~0x80000000, SImode)); operands[0] = gen_rtx_REG (SImode, REGNO (operands[0]));") (define_split *************** *** 7189,7212 **** "TARGET_80387 && reload_completed && FLOAT_MODE_P (GET_MODE (operands[0]))" [(parallel [(set (match_dup 0) (and:QI (match_dup 0) (match_dup 1))) (clobber (reg:CC 17))])] - " { int size = GET_MODE_SIZE (GET_MODE (operands[1])); ! /* XFmode's size is 12, but only 10 bytes are used. */ ! if (size == 12) size = 10; ! operands[0] = gen_rtx_MEM (QImode, XEXP (operands[0], 0)); ! operands[0] = adj_offsettable_operand (operands[0], size - 1); ! operands[1] = GEN_INT (~0x80); ! }") (define_expand "absdf2" [(parallel [(set (match_operand:DF 0 "nonimmediate_operand" "") (neg:DF (match_operand:DF 1 "nonimmediate_operand" ""))) (clobber (reg:CC 17))])] "TARGET_80387" ! "ix86_expand_unary_operator (ABS, DFmode, operands); DONE;") ;; Keep 'f' and 'r' in separate alternatives to avoid reload problems ;; because of secondary memory needed to reload from class FLOAT_INT_REGS --- 10077,10186 ---- "TARGET_80387 && reload_completed && FLOAT_MODE_P (GET_MODE (operands[0]))" [(parallel [(set (match_dup 0) (and:QI (match_dup 0) (match_dup 1))) (clobber (reg:CC 17))])] { int size = GET_MODE_SIZE (GET_MODE (operands[1])); ! /* XFmode's size is 12, TFmode 16, but only 10 bytes are used. */ ! if (size >= 12) size = 10; ! operands[0] = adjust_address (operands[0], QImode, size - 1); ! operands[1] = GEN_INT (trunc_int_for_mode (~0x80, QImode)); ! }) (define_expand "absdf2" [(parallel [(set (match_operand:DF 0 "nonimmediate_operand" "") (neg:DF (match_operand:DF 1 "nonimmediate_operand" ""))) (clobber (reg:CC 17))])] "TARGET_80387" ! "if (TARGET_SSE2) ! { ! /* In case operand is in memory, we will not use SSE. */ ! if (memory_operand (operands[0], VOIDmode) ! && rtx_equal_p (operands[0], operands[1])) ! emit_insn (gen_absdf2_memory (operands[0], operands[1])); ! else ! { ! /* Using SSE is tricky, since we need bitwise negation of -0 ! in register. */ ! rtx reg = gen_reg_rtx (DFmode); ! #if HOST_BITS_PER_WIDE_INT >= 64 ! rtx imm = GEN_INT (trunc_int_for_mode(((HOST_WIDE_INT)1) << 63, ! DImode)); ! #else ! rtx imm = immed_double_const (0, 0x80000000, DImode); ! #endif ! rtx dest = operands[0]; ! ! operands[1] = force_reg (DFmode, operands[1]); ! operands[0] = force_reg (DFmode, operands[0]); ! emit_move_insn (reg, gen_lowpart (DFmode, imm)); ! emit_insn (gen_absdf2_ifs (operands[0], operands[1], reg)); ! if (dest != operands[0]) ! emit_move_insn (dest, operands[0]); ! } ! DONE; ! } ! ix86_expand_unary_operator (ABS, DFmode, operands); DONE;") ! ! (define_insn "absdf2_memory" ! [(set (match_operand:DF 0 "memory_operand" "=m") ! (abs:DF (match_operand:DF 1 "memory_operand" "0"))) ! (clobber (reg:CC 17))] ! "ix86_unary_operator_ok (ABS, DFmode, operands)" ! "#") ! ! (define_insn "absdf2_ifs" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=Y#fr,mf#Yr,mr#Yf") ! (abs:DF (match_operand:DF 1 "nonimmediate_operand" "Y,0,0"))) ! (use (match_operand:DF 2 "nonmemory_operand" "*0#Y,*g#Y,*g#Y")) ! (clobber (reg:CC 17))] ! "!TARGET_64BIT && TARGET_SSE2 ! && (reload_in_progress || reload_completed ! || (register_operand (operands[0], VOIDmode) ! && register_operand (operands[1], VOIDmode)))" ! "#") ! ! (define_insn "*absdf2_ifs_rex64" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=Y#fr,mf#Yr") ! (abs:DF (match_operand:DF 1 "nonimmediate_operand" "Y,0"))) ! (use (match_operand:DF 2 "nonmemory_operand" "*0#Y,*g#Y")) ! (clobber (reg:CC 17))] ! "TARGET_64BIT && TARGET_SSE2 ! && (reload_in_progress || reload_completed ! || (register_operand (operands[0], VOIDmode) ! && register_operand (operands[1], VOIDmode)))" ! "#") ! ! (define_split ! [(set (match_operand:DF 0 "memory_operand" "") ! (abs:DF (match_operand:DF 1 "memory_operand" ""))) ! (use (match_operand:DF 2 "" "")) ! (clobber (reg:CC 17))] ! "" ! [(parallel [(set (match_dup 0) ! (abs:DF (match_dup 1))) ! (clobber (reg:CC 17))])]) ! ! (define_split ! [(set (match_operand:DF 0 "register_operand" "") ! (abs:DF (match_operand:DF 1 "register_operand" ""))) ! (use (match_operand:DF 2 "" "")) ! (clobber (reg:CC 17))] ! "reload_completed && !SSE_REG_P (operands[0])" ! [(parallel [(set (match_dup 0) ! (abs:DF (match_dup 1))) ! (clobber (reg:CC 17))])]) ! ! (define_split ! [(set (match_operand:DF 0 "register_operand" "") ! (abs:DF (match_operand:DF 1 "register_operand" ""))) ! (use (match_operand:DF 2 "register_operand" "")) ! (clobber (reg:CC 17))] ! "reload_completed && SSE_REG_P (operands[0])" ! [(set (subreg:TI (match_dup 0) 0) ! (and:TI (not:TI (subreg:TI (match_dup 2) 0)) ! (subreg:TI (match_dup 1) 0)))]) ! ;; Keep 'f' and 'r' in separate alternatives to avoid reload problems ;; because of secondary memory needed to reload from class FLOAT_INT_REGS *************** *** 7215,7221 **** [(set (match_operand:DF 0 "nonimmediate_operand" "=f#r,rm#f") (abs:DF (match_operand:DF 1 "nonimmediate_operand" "0,0"))) (clobber (reg:CC 17))] ! "TARGET_80387 && ix86_unary_operator_ok (ABS, DFmode, operands)" "#") (define_split --- 10189,10208 ---- [(set (match_operand:DF 0 "nonimmediate_operand" "=f#r,rm#f") (abs:DF (match_operand:DF 1 "nonimmediate_operand" "0,0"))) (clobber (reg:CC 17))] ! "!TARGET_64BIT && TARGET_80387 ! && ix86_unary_operator_ok (ABS, DFmode, operands)" ! "#") ! ! ;; FIXME: We should to allow integer registers here. Problem is that ! ;; we need another scratch register to get constant from. ! ;; Forcing constant to mem if no register available in peep2 should be ! ;; safe even for PIC mode, because of RIP relative addressing. ! (define_insn "*absdf2_if_rex64" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=f,mf") ! (abs:DF (match_operand:DF 1 "nonimmediate_operand" "0,0"))) ! (clobber (reg:CC 17))] ! "TARGET_64BIT && TARGET_80387 ! && ix86_unary_operator_ok (ABS, DFmode, operands)" "#") (define_split *************** *** 7231,7247 **** [(set (match_operand:DF 0 "register_operand" "") (abs:DF (match_operand:DF 1 "register_operand" ""))) (clobber (reg:CC 17))] ! "TARGET_80387 && reload_completed && !FP_REGNO_P (REGNO (operands[0]))" [(parallel [(set (match_dup 3) (and:SI (match_dup 3) (match_dup 4))) (clobber (reg:CC 17))])] ! "operands[4] = GEN_INT (~0x80000000); split_di (operands+0, 1, operands+2, operands+3);") (define_expand "absxf2" [(parallel [(set (match_operand:XF 0 "nonimmediate_operand" "") (neg:XF (match_operand:XF 1 "nonimmediate_operand" ""))) (clobber (reg:CC 17))])] ! "TARGET_80387" "ix86_expand_unary_operator (ABS, XFmode, operands); DONE;") (define_expand "abstf2" --- 10218,10235 ---- [(set (match_operand:DF 0 "register_operand" "") (abs:DF (match_operand:DF 1 "register_operand" ""))) (clobber (reg:CC 17))] ! "!TARGET_64BIT && TARGET_80387 && reload_completed && ! !FP_REGNO_P (REGNO (operands[0]))" [(parallel [(set (match_dup 3) (and:SI (match_dup 3) (match_dup 4))) (clobber (reg:CC 17))])] ! "operands[4] = GEN_INT (trunc_int_for_mode (~0x80000000, SImode)); split_di (operands+0, 1, operands+2, operands+3);") (define_expand "absxf2" [(parallel [(set (match_operand:XF 0 "nonimmediate_operand" "") (neg:XF (match_operand:XF 1 "nonimmediate_operand" ""))) (clobber (reg:CC 17))])] ! "!TARGET_64BIT && TARGET_80387" "ix86_expand_unary_operator (ABS, XFmode, operands); DONE;") (define_expand "abstf2" *************** *** 7258,7264 **** [(set (match_operand:XF 0 "nonimmediate_operand" "=f#r,rm#f") (abs:XF (match_operand:XF 1 "nonimmediate_operand" "0,0"))) (clobber (reg:CC 17))] ! "TARGET_80387 && ix86_unary_operator_ok (ABS, XFmode, operands)" "#") (define_split --- 10246,10253 ---- [(set (match_operand:XF 0 "nonimmediate_operand" "=f#r,rm#f") (abs:XF (match_operand:XF 1 "nonimmediate_operand" "0,0"))) (clobber (reg:CC 17))] ! "!TARGET_64BIT && TARGET_80387 ! && ix86_unary_operator_ok (ABS, XFmode, operands)" "#") (define_split *************** *** 7278,7284 **** [(parallel [(set (match_dup 0) (and:SI (match_dup 0) (match_dup 1))) (clobber (reg:CC 17))])] "operands[1] = GEN_INT (~0x8000); ! operands[0] = gen_rtx_REG (SImode, true_regnum (operands[0]) + 2);") (define_insn "*abstf2_if" [(set (match_operand:TF 0 "nonimmediate_operand" "=f#r,rm#f") --- 10267,10274 ---- [(parallel [(set (match_dup 0) (and:SI (match_dup 0) (match_dup 1))) (clobber (reg:CC 17))])] "operands[1] = GEN_INT (~0x8000); ! operands[0] = gen_rtx_REG (SImode, ! true_regnum (operands[0]) + (TARGET_64BIT ? 1 : 2));") (define_insn "*abstf2_if" [(set (match_operand:TF 0 "nonimmediate_operand" "=f#r,rm#f") *************** *** 7304,7310 **** [(parallel [(set (match_dup 0) (and:SI (match_dup 0) (match_dup 1))) (clobber (reg:CC 17))])] "operands[1] = GEN_INT (~0x8000); ! operands[0] = gen_rtx_REG (SImode, true_regnum (operands[0]) + 2);") (define_insn "*abssf2_1" [(set (match_operand:SF 0 "register_operand" "=f") --- 10294,10301 ---- [(parallel [(set (match_dup 0) (and:SI (match_dup 0) (match_dup 1))) (clobber (reg:CC 17))])] "operands[1] = GEN_INT (~0x8000); ! operands[0] = gen_rtx_REG (SImode, ! true_regnum (operands[0]) + (TARGET_64BIT ? 1 : 2));") (define_insn "*abssf2_1" [(set (match_operand:SF 0 "register_operand" "=f") *************** *** 7334,7340 **** (define_insn "*absxf2_1" [(set (match_operand:XF 0 "register_operand" "=f") (abs:XF (match_operand:XF 1 "register_operand" "0")))] ! "TARGET_80387 && reload_completed" "fabs" [(set_attr "type" "fsgn") (set_attr "mode" "DF")]) --- 10325,10331 ---- (define_insn "*absxf2_1" [(set (match_operand:XF 0 "register_operand" "=f") (abs:XF (match_operand:XF 1 "register_operand" "0")))] ! "!TARGET_64BIT && TARGET_80387 && reload_completed" "fabs" [(set_attr "type" "fsgn") (set_attr "mode" "DF")]) *************** *** 7343,7349 **** [(set (match_operand:XF 0 "register_operand" "=f") (abs:XF (float_extend:XF (match_operand:DF 1 "register_operand" "0"))))] ! "TARGET_80387" "fabs" [(set_attr "type" "fsgn") (set_attr "mode" "XF")]) --- 10334,10340 ---- [(set (match_operand:XF 0 "register_operand" "=f") (abs:XF (float_extend:XF (match_operand:DF 1 "register_operand" "0"))))] ! "!TARGET_64BIT && TARGET_80387" "fabs" [(set_attr "type" "fsgn") (set_attr "mode" "XF")]) *************** *** 7352,7358 **** [(set (match_operand:XF 0 "register_operand" "=f") (abs:XF (float_extend:XF (match_operand:SF 1 "register_operand" "0"))))] ! "TARGET_80387" "fabs" [(set_attr "type" "fsgn") (set_attr "mode" "XF")]) --- 10343,10349 ---- [(set (match_operand:XF 0 "register_operand" "=f") (abs:XF (float_extend:XF (match_operand:SF 1 "register_operand" "0"))))] ! "!TARGET_64BIT && TARGET_80387" "fabs" [(set_attr "type" "fsgn") (set_attr "mode" "XF")]) *************** *** 7385,7390 **** --- 10376,10421 ---- ;; One complement instructions + (define_expand "one_cmpldi2" + [(set (match_operand:DI 0 "nonimmediate_operand" "") + (not:DI (match_operand:DI 1 "nonimmediate_operand" "")))] + "TARGET_64BIT" + "ix86_expand_unary_operator (NOT, DImode, operands); DONE;") + + (define_insn "*one_cmpldi2_1_rex64" + [(set (match_operand:DI 0 "nonimmediate_operand" "=rm") + (not:DI (match_operand:DI 1 "nonimmediate_operand" "0")))] + "TARGET_64BIT && ix86_unary_operator_ok (NOT, DImode, operands)" + "not{q}\t%0" + [(set_attr "type" "negnot") + (set_attr "mode" "DI")]) + + (define_insn "*one_cmpldi2_2_rex64" + [(set (reg 17) + (compare (not:DI (match_operand:DI 1 "nonimmediate_operand" "0")) + (const_int 0))) + (set (match_operand:DI 0 "nonimmediate_operand" "=rm") + (not:DI (match_dup 1)))] + "TARGET_64BIT && ix86_match_ccmode (insn, CCNOmode) + && ix86_unary_operator_ok (NOT, DImode, operands)" + "#" + [(set_attr "type" "alu1") + (set_attr "mode" "DI")]) + + (define_split + [(set (reg 17) + (compare (not:DI (match_operand:DI 1 "nonimmediate_operand" "")) + (const_int 0))) + (set (match_operand:DI 0 "nonimmediate_operand" "") + (not:DI (match_dup 1)))] + "TARGET_64BIT && ix86_match_ccmode (insn, CCNOmode)" + [(parallel [(set (reg:CCNO 17) + (compare:CCNO (xor:DI (match_dup 1) (const_int -1)) + (const_int 0))) + (set (match_dup 0) + (xor:DI (match_dup 1) (const_int -1)))])] + "") + (define_expand "one_cmplsi2" [(set (match_operand:SI 0 "nonimmediate_operand" "") (not:SI (match_operand:SI 1 "nonimmediate_operand" "")))] *************** *** 7395,7401 **** [(set (match_operand:SI 0 "nonimmediate_operand" "=rm") (not:SI (match_operand:SI 1 "nonimmediate_operand" "0")))] "ix86_unary_operator_ok (NOT, SImode, operands)" ! "not{l}\\t%0" [(set_attr "type" "negnot") (set_attr "mode" "SI")]) --- 10426,10441 ---- [(set (match_operand:SI 0 "nonimmediate_operand" "=rm") (not:SI (match_operand:SI 1 "nonimmediate_operand" "0")))] "ix86_unary_operator_ok (NOT, SImode, operands)" ! "not{l}\t%0" ! [(set_attr "type" "negnot") ! (set_attr "mode" "SI")]) ! ! ;; ??? Currently never generated - xor is used instead. ! (define_insn "*one_cmplsi2_1_zext" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (zero_extend:DI (not:SI (match_operand:SI 1 "register_operand" "0"))))] ! "TARGET_64BIT && ix86_unary_operator_ok (NOT, SImode, operands)" ! "not{l}\t%k0" [(set_attr "type" "negnot") (set_attr "mode" "SI")]) *************** *** 7425,7430 **** --- 10465,10497 ---- (xor:SI (match_dup 1) (const_int -1)))])] "") + ;; ??? Currently never generated - xor is used instead. + (define_insn "*one_cmplsi2_2_zext" + [(set (reg 17) + (compare (not:SI (match_operand:SI 1 "register_operand" "0")) + (const_int 0))) + (set (match_operand:DI 0 "register_operand" "=r") + (zero_extend:DI (not:SI (match_dup 1))))] + "TARGET_64BIT && ix86_match_ccmode (insn, CCNOmode) + && ix86_unary_operator_ok (NOT, SImode, operands)" + "#" + [(set_attr "type" "alu1") + (set_attr "mode" "SI")]) + + (define_split + [(set (reg 17) + (compare (not:SI (match_operand:SI 1 "register_operand" "")) + (const_int 0))) + (set (match_operand:DI 0 "register_operand" "") + (zero_extend:DI (not:SI (match_dup 1))))] + "ix86_match_ccmode (insn, CCNOmode)" + [(parallel [(set (reg:CCNO 17) + (compare:CCNO (xor:SI (match_dup 1) (const_int -1)) + (const_int 0))) + (set (match_dup 0) + (zero_extend:DI (xor:SI (match_dup 1) (const_int -1))))])] + "") + (define_expand "one_cmplhi2" [(set (match_operand:HI 0 "nonimmediate_operand" "") (not:HI (match_operand:HI 1 "nonimmediate_operand" "")))] *************** *** 7435,7441 **** [(set (match_operand:HI 0 "nonimmediate_operand" "=rm") (not:HI (match_operand:HI 1 "nonimmediate_operand" "0")))] "ix86_unary_operator_ok (NOT, HImode, operands)" ! "not{w}\\t%0" [(set_attr "type" "negnot") (set_attr "mode" "HI")]) --- 10502,10508 ---- [(set (match_operand:HI 0 "nonimmediate_operand" "=rm") (not:HI (match_operand:HI 1 "nonimmediate_operand" "0")))] "ix86_unary_operator_ok (NOT, HImode, operands)" ! "not{w}\t%0" [(set_attr "type" "negnot") (set_attr "mode" "HI")]) *************** *** 7477,7484 **** (not:QI (match_operand:QI 1 "nonimmediate_operand" "0,0")))] "ix86_unary_operator_ok (NOT, QImode, operands)" "@ ! not{b}\\t%0 ! not{l}\\t%k0" [(set_attr "type" "negnot") (set_attr "mode" "QI,SI")]) --- 10544,10551 ---- (not:QI (match_operand:QI 1 "nonimmediate_operand" "0,0")))] "ix86_unary_operator_ok (NOT, QImode, operands)" "@ ! not{b}\t%0 ! not{l}\t%k0" [(set_attr "type" "negnot") (set_attr "mode" "QI,SI")]) *************** *** 7533,7551 **** ;; than 31. (define_expand "ashldi3" ! [(parallel [(set (match_operand:DI 0 "register_operand" "=r") ! (ashift:DI (match_operand:DI 1 "register_operand" "0") ! (match_operand:QI 2 "nonmemory_operand" "Jc"))) (clobber (reg:CC 17))])] "" - " { ! if (TARGET_CMOVE && ! immediate_operand (operands[2], QImode)) { emit_insn (gen_ashldi3_1 (operands[0], operands[1], operands[2])); DONE; } ! }") (define_insn "ashldi3_1" [(set (match_operand:DI 0 "register_operand" "=r") --- 10600,10722 ---- ;; than 31. (define_expand "ashldi3" ! [(parallel [(set (match_operand:DI 0 "shiftdi_operand" "") ! (ashift:DI (match_operand:DI 1 "shiftdi_operand" "") ! (match_operand:QI 2 "nonmemory_operand" ""))) (clobber (reg:CC 17))])] "" { ! if (!TARGET_64BIT && TARGET_CMOVE && ! immediate_operand (operands[2], QImode)) { emit_insn (gen_ashldi3_1 (operands[0], operands[1], operands[2])); DONE; } ! ix86_expand_binary_operator (ASHIFT, DImode, operands); ! DONE; ! }) ! ! (define_insn "*ashldi3_1_rex64" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=rm,r") ! (ashift:DI (match_operand:DI 1 "nonimmediate_operand" "0,r") ! (match_operand:QI 2 "nonmemory_operand" "cJ,M"))) ! (clobber (reg:CC 17))] ! "TARGET_64BIT && ix86_binary_operator_ok (ASHIFT, DImode, operands)" ! { ! switch (get_attr_type (insn)) ! { ! case TYPE_ALU: ! if (operands[2] != const1_rtx) ! abort (); ! if (!rtx_equal_p (operands[0], operands[1])) ! abort (); ! return "add{q}\t{%0, %0|%0, %0}"; ! ! case TYPE_LEA: ! if (GET_CODE (operands[2]) != CONST_INT ! || (unsigned HOST_WIDE_INT) INTVAL (operands[2]) > 3) ! abort (); ! operands[1] = gen_rtx_MULT (DImode, operands[1], ! GEN_INT (1 << INTVAL (operands[2]))); ! return "lea{q}\t{%a1, %0|%0, %a1}"; ! ! default: ! if (REG_P (operands[2])) ! return "sal{q}\t{%b2, %0|%0, %b2}"; ! else if (GET_CODE (operands[2]) == CONST_INT ! && INTVAL (operands[2]) == 1 ! && (TARGET_PENTIUM || TARGET_PENTIUMPRO)) ! return "sal{q}\t%0"; ! else ! return "sal{q}\t{%2, %0|%0, %2}"; ! } ! } ! [(set (attr "type") ! (cond [(eq_attr "alternative" "1") ! (const_string "lea") ! (and (and (ne (symbol_ref "TARGET_DOUBLE_WITH_ADD") ! (const_int 0)) ! (match_operand 0 "register_operand" "")) ! (match_operand 2 "const1_operand" "")) ! (const_string "alu") ! ] ! (const_string "ishift"))) ! (set_attr "mode" "DI")]) ! ! ;; Convert lea to the lea pattern to avoid flags dependency. ! (define_split ! [(set (match_operand:DI 0 "register_operand" "") ! (ashift:DI (match_operand:DI 1 "register_operand" "") ! (match_operand:QI 2 "immediate_operand" ""))) ! (clobber (reg:CC 17))] ! "TARGET_64BIT && reload_completed ! && true_regnum (operands[0]) != true_regnum (operands[1])" ! [(set (match_dup 0) ! (mult:DI (match_dup 1) ! (match_dup 2)))] ! "operands[2] = GEN_INT (trunc_int_for_mode (1 << INTVAL (operands[2]), ! DImode));") ! ! ;; This pattern can't accept a variable shift count, since shifts by ! ;; zero don't affect the flags. We assume that shifts by constant ! ;; zero are optimized away. ! (define_insn "*ashldi3_cmp_rex64" ! [(set (reg 17) ! (compare ! (ashift:DI (match_operand:DI 1 "nonimmediate_operand" "0") ! (match_operand:QI 2 "immediate_operand" "e")) ! (const_int 0))) ! (set (match_operand:DI 0 "nonimmediate_operand" "=rm") ! (ashift:DI (match_dup 1) (match_dup 2)))] ! "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode) ! && ix86_binary_operator_ok (ASHIFT, DImode, operands)" ! { ! switch (get_attr_type (insn)) ! { ! case TYPE_ALU: ! if (operands[2] != const1_rtx) ! abort (); ! return "add{q}\t{%0, %0|%0, %0}"; ! ! default: ! if (REG_P (operands[2])) ! return "sal{q}\t{%b2, %0|%0, %b2}"; ! else if (GET_CODE (operands[2]) == CONST_INT ! && INTVAL (operands[2]) == 1 ! && (TARGET_PENTIUM || TARGET_PENTIUMPRO)) ! return "sal{q}\t%0"; ! else ! return "sal{q}\t{%2, %0|%0, %2}"; ! } ! } ! [(set (attr "type") ! (cond [(and (and (ne (symbol_ref "TARGET_DOUBLE_WITH_ADD") ! (const_int 0)) ! (match_operand 0 "register_operand" "")) ! (match_operand 2 "const1_operand" "")) ! (const_string "alu") ! ] ! (const_string "ishift"))) ! (set_attr "mode" "DI")]) (define_insn "ashldi3_1" [(set (match_operand:DI 0 "register_operand" "=r") *************** *** 7553,7559 **** (match_operand:QI 2 "nonmemory_operand" "Jc"))) (clobber (match_scratch:SI 3 "=&r")) (clobber (reg:CC 17))] ! "TARGET_CMOVE" "#" [(set_attr "type" "multi")]) --- 10724,10730 ---- (match_operand:QI 2 "nonmemory_operand" "Jc"))) (clobber (match_scratch:SI 3 "=&r")) (clobber (reg:CC 17))] ! "!TARGET_64BIT && TARGET_CMOVE" "#" [(set_attr "type" "multi")]) *************** *** 7562,7568 **** (ashift:DI (match_operand:DI 1 "register_operand" "0") (match_operand:QI 2 "nonmemory_operand" "Jc"))) (clobber (reg:CC 17))] ! "" "#" [(set_attr "type" "multi")]) --- 10733,10739 ---- (ashift:DI (match_operand:DI 1 "register_operand" "0") (match_operand:QI 2 "nonmemory_operand" "Jc"))) (clobber (reg:CC 17))] ! "!TARGET_64BIT" "#" [(set_attr "type" "multi")]) *************** *** 7572,7578 **** (match_operand:QI 2 "nonmemory_operand" ""))) (clobber (match_scratch:SI 3 "")) (clobber (reg:CC 17))] ! "TARGET_CMOVE && reload_completed" [(const_int 0)] "ix86_split_ashldi (operands, operands[3]); DONE;") --- 10743,10749 ---- (match_operand:QI 2 "nonmemory_operand" ""))) (clobber (match_scratch:SI 3 "")) (clobber (reg:CC 17))] ! "!TARGET_64BIT && TARGET_CMOVE && reload_completed" [(const_int 0)] "ix86_split_ashldi (operands, operands[3]); DONE;") *************** *** 7581,7587 **** (ashift:DI (match_operand:DI 1 "register_operand" "") (match_operand:QI 2 "nonmemory_operand" ""))) (clobber (reg:CC 17))] ! "reload_completed" [(const_int 0)] "ix86_split_ashldi (operands, NULL_RTX); DONE;") --- 10752,10758 ---- (ashift:DI (match_operand:DI 1 "register_operand" "") (match_operand:QI 2 "nonmemory_operand" ""))) (clobber (reg:CC 17))] ! "!TARGET_64BIT && reload_completed" [(const_int 0)] "ix86_split_ashldi (operands, NULL_RTX); DONE;") *************** *** 7594,7601 **** (clobber (reg:CC 17))] "" "@ ! shld{l}\\t{%2, %1, %0|%0, %1, %2} ! shld{l}\\t{%s2%1, %0|%0, %1, %2}" [(set_attr "type" "ishift") (set_attr "prefix_0f" "1") (set_attr "mode" "SI") --- 10765,10772 ---- (clobber (reg:CC 17))] "" "@ ! shld{l}\t{%2, %1, %0|%0, %1, %2} ! shld{l}\t{%s2%1, %0|%0, %1, %2}" [(set_attr "type" "ishift") (set_attr "prefix_0f" "1") (set_attr "mode" "SI") *************** *** 7624,7630 **** (use (match_operand:SI 1 "register_operand" "")) (use (match_operand:QI 2 "register_operand" ""))] "" - " { rtx label = gen_label_rtx (); rtx tmp; --- 10795,10800 ---- *************** *** 7646,7652 **** LABEL_NUSES (label) = 1; DONE; ! }") (define_expand "ashlsi3" [(set (match_operand:SI 0 "nonimmediate_operand" "") --- 10816,10822 ---- LABEL_NUSES (label) = 1; DONE; ! }) (define_expand "ashlsi3" [(set (match_operand:SI 0 "nonimmediate_operand" "") *************** *** 7662,7668 **** (match_operand:QI 2 "nonmemory_operand" "cI,M"))) (clobber (reg:CC 17))] "ix86_binary_operator_ok (ASHIFT, SImode, operands)" - "* { switch (get_attr_type (insn)) { --- 10832,10837 ---- *************** *** 7671,7697 **** abort (); if (!rtx_equal_p (operands[0], operands[1])) abort (); ! return \"add{l}\\t{%0, %0|%0, %0}\"; case TYPE_LEA: ! if (GET_CODE (operands[2]) != CONST_INT ! || (unsigned HOST_WIDE_INT) INTVAL (operands[2]) > 3) ! abort (); ! operands[1] = gen_rtx_MULT (SImode, operands[1], ! GEN_INT (1 << INTVAL (operands[2]))); ! return \"lea{l}\\t{%a1, %0|%0, %a1}\"; default: if (REG_P (operands[2])) ! return \"sal{l}\\t{%b2, %0|%0, %b2}\"; else if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 1 && (TARGET_PENTIUM || TARGET_PENTIUMPRO)) ! return \"sal{l}\\t%0\"; else ! return \"sal{l}\\t{%2, %0|%0, %2}\"; } ! }" [(set (attr "type") (cond [(eq_attr "alternative" "1") (const_string "lea") --- 10840,10861 ---- abort (); if (!rtx_equal_p (operands[0], operands[1])) abort (); ! return "add{l}\t{%0, %0|%0, %0}"; case TYPE_LEA: ! return "#"; default: if (REG_P (operands[2])) ! return "sal{l}\t{%b2, %0|%0, %b2}"; else if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 1 && (TARGET_PENTIUM || TARGET_PENTIUMPRO)) ! return "sal{l}\t%0"; else ! return "sal{l}\t{%2, %0|%0, %2}"; } ! } [(set (attr "type") (cond [(eq_attr "alternative" "1") (const_string "lea") *************** *** 7713,7730 **** "reload_completed && true_regnum (operands[0]) != true_regnum (operands[1])" [(const_int 0)] - " { rtx pat; operands[0] = gen_lowpart (SImode, operands[0]); operands[1] = gen_lowpart (Pmode, operands[1]); ! operands[2] = GEN_INT (1 << INTVAL (operands[2])); pat = gen_rtx_MULT (Pmode, operands[1], operands[2]); if (Pmode != SImode) pat = gen_rtx_SUBREG (SImode, pat, 0); emit_insn (gen_rtx_SET (VOIDmode, operands[0], pat)); DONE; ! }") ;; This pattern can't accept a variable shift count, since shifts by ;; zero don't affect the flags. We assume that shifts by constant --- 10877,10948 ---- "reload_completed && true_regnum (operands[0]) != true_regnum (operands[1])" [(const_int 0)] { rtx pat; operands[0] = gen_lowpart (SImode, operands[0]); operands[1] = gen_lowpart (Pmode, operands[1]); ! operands[2] = GEN_INT (trunc_int_for_mode (1 << INTVAL (operands[2]), ! Pmode)); pat = gen_rtx_MULT (Pmode, operands[1], operands[2]); if (Pmode != SImode) pat = gen_rtx_SUBREG (SImode, pat, 0); emit_insn (gen_rtx_SET (VOIDmode, operands[0], pat)); DONE; ! }) ! ! (define_insn "*ashlsi3_1_zext" ! [(set (match_operand:DI 0 "register_operand" "=r,r") ! (zero_extend:DI (ashift:SI (match_operand:SI 1 "register_operand" "0,r") ! (match_operand:QI 2 "nonmemory_operand" "cI,M")))) ! (clobber (reg:CC 17))] ! "TARGET_64BIT && ix86_binary_operator_ok (ASHIFT, SImode, operands)" ! { ! switch (get_attr_type (insn)) ! { ! case TYPE_ALU: ! if (operands[2] != const1_rtx) ! abort (); ! return "add{l}\t{%k0, %k0|%k0, %k0}"; ! ! case TYPE_LEA: ! return "#"; ! ! default: ! if (REG_P (operands[2])) ! return "sal{l}\t{%b2, %k0|%k0, %b2}"; ! else if (GET_CODE (operands[2]) == CONST_INT ! && INTVAL (operands[2]) == 1 ! && (TARGET_PENTIUM || TARGET_PENTIUMPRO)) ! return "sal{l}\t%k0"; ! else ! return "sal{l}\t{%2, %k0|%k0, %2}"; ! } ! } ! [(set (attr "type") ! (cond [(eq_attr "alternative" "1") ! (const_string "lea") ! (and (ne (symbol_ref "TARGET_DOUBLE_WITH_ADD") ! (const_int 0)) ! (match_operand 2 "const1_operand" "")) ! (const_string "alu") ! ] ! (const_string "ishift"))) ! (set_attr "mode" "SI")]) ! ! ;; Convert lea to the lea pattern to avoid flags dependency. ! (define_split ! [(set (match_operand:DI 0 "register_operand" "") ! (zero_extend:DI (ashift (match_operand 1 "register_operand" "") ! (match_operand:QI 2 "const_int_operand" "")))) ! (clobber (reg:CC 17))] ! "reload_completed ! && true_regnum (operands[0]) != true_regnum (operands[1])" ! [(set (match_dup 0) (zero_extend:DI (subreg:SI (mult:SI (match_dup 1) (match_dup 2)) 0)))] ! { ! operands[1] = gen_lowpart (Pmode, operands[1]); ! operands[2] = GEN_INT (trunc_int_for_mode (1 << INTVAL (operands[2]), ! Pmode)); ! }) ;; This pattern can't accept a variable shift count, since shifts by ;; zero don't affect the flags. We assume that shifts by constant *************** *** 7739,7764 **** (ashift:SI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) && ix86_binary_operator_ok (ASHIFT, SImode, operands)" - "* { switch (get_attr_type (insn)) { case TYPE_ALU: if (operands[2] != const1_rtx) abort (); ! return \"add{l}\\t{%0, %0|%0, %0}\"; default: if (REG_P (operands[2])) ! return \"sal{l}\\t{%b2, %0|%0, %b2}\"; else if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 1 && (TARGET_PENTIUM || TARGET_PENTIUMPRO)) ! return \"sal{l}\\t%0\"; else ! return \"sal{l}\\t{%2, %0|%0, %2}\"; } ! }" [(set (attr "type") (cond [(and (and (ne (symbol_ref "TARGET_DOUBLE_WITH_ADD") (const_int 0)) --- 10957,10981 ---- (ashift:SI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) && ix86_binary_operator_ok (ASHIFT, SImode, operands)" { switch (get_attr_type (insn)) { case TYPE_ALU: if (operands[2] != const1_rtx) abort (); ! return "add{l}\t{%0, %0|%0, %0}"; default: if (REG_P (operands[2])) ! return "sal{l}\t{%b2, %0|%0, %b2}"; else if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 1 && (TARGET_PENTIUM || TARGET_PENTIUMPRO)) ! return "sal{l}\t%0"; else ! return "sal{l}\t{%2, %0|%0, %2}"; } ! } [(set (attr "type") (cond [(and (and (ne (symbol_ref "TARGET_DOUBLE_WITH_ADD") (const_int 0)) *************** *** 7769,7774 **** --- 10986,11029 ---- (const_string "ishift"))) (set_attr "mode" "SI")]) + (define_insn "*ashlsi3_cmp_zext" + [(set (reg 17) + (compare + (ashift:SI (match_operand:SI 1 "register_operand" "0") + (match_operand:QI 2 "immediate_operand" "I")) + (const_int 0))) + (set (match_operand:DI 0 "register_operand" "=r") + (zero_extend:DI (ashift:SI (match_dup 1) (match_dup 2))))] + "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode) + && ix86_binary_operator_ok (ASHIFT, SImode, operands)" + { + switch (get_attr_type (insn)) + { + case TYPE_ALU: + if (operands[2] != const1_rtx) + abort (); + return "add{l}\t{%k0, %k0|%k0, %k0}"; + + default: + if (REG_P (operands[2])) + return "sal{l}\t{%b2, %k0|%k0, %b2}"; + else if (GET_CODE (operands[2]) == CONST_INT + && INTVAL (operands[2]) == 1 + && (TARGET_PENTIUM || TARGET_PENTIUMPRO)) + return "sal{l}\t%k0"; + else + return "sal{l}\t{%2, %k0|%k0, %2}"; + } + } + [(set (attr "type") + (cond [(and (ne (symbol_ref "TARGET_DOUBLE_WITH_ADD") + (const_int 0)) + (match_operand 2 "const1_operand" "")) + (const_string "alu") + ] + (const_string "ishift"))) + (set_attr "mode" "SI")]) + (define_expand "ashlhi3" [(set (match_operand:HI 0 "nonimmediate_operand" "") (ashift:HI (match_operand:HI 1 "nonimmediate_operand" "") *************** *** 7784,7811 **** (clobber (reg:CC 17))] "!TARGET_PARTIAL_REG_STALL && ix86_binary_operator_ok (ASHIFT, HImode, operands)" - "* { switch (get_attr_type (insn)) { case TYPE_LEA: ! return \"#\"; case TYPE_ALU: if (operands[2] != const1_rtx) abort (); ! return \"add{w}\\t{%0, %0|%0, %0}\"; default: if (REG_P (operands[2])) ! return \"sal{w}\\t{%b2, %0|%0, %b2}\"; else if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 1 && (TARGET_PENTIUM || TARGET_PENTIUMPRO)) ! return \"sal{w}\\t%0\"; else ! return \"sal{w}\\t{%2, %0|%0, %2}\"; } ! }" [(set (attr "type") (cond [(eq_attr "alternative" "1") (const_string "lea") --- 11039,11065 ---- (clobber (reg:CC 17))] "!TARGET_PARTIAL_REG_STALL && ix86_binary_operator_ok (ASHIFT, HImode, operands)" { switch (get_attr_type (insn)) { case TYPE_LEA: ! return "#"; case TYPE_ALU: if (operands[2] != const1_rtx) abort (); ! return "add{w}\t{%0, %0|%0, %0}"; default: if (REG_P (operands[2])) ! return "sal{w}\t{%b2, %0|%0, %b2}"; else if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 1 && (TARGET_PENTIUM || TARGET_PENTIUMPRO)) ! return "sal{w}\t%0"; else ! return "sal{w}\t{%2, %0|%0, %2}"; } ! } [(set (attr "type") (cond [(eq_attr "alternative" "1") (const_string "lea") *************** *** 7825,7850 **** (clobber (reg:CC 17))] "TARGET_PARTIAL_REG_STALL && ix86_binary_operator_ok (ASHIFT, HImode, operands)" - "* { switch (get_attr_type (insn)) { case TYPE_ALU: if (operands[2] != const1_rtx) abort (); ! return \"add{w}\\t{%0, %0|%0, %0}\"; default: if (REG_P (operands[2])) ! return \"sal{w}\\t{%b2, %0|%0, %b2}\"; else if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 1 && (TARGET_PENTIUM || TARGET_PENTIUMPRO)) ! return \"sal{w}\\t%0\"; else ! return \"sal{w}\\t{%2, %0|%0, %2}\"; } ! }" [(set (attr "type") (cond [(and (and (ne (symbol_ref "TARGET_DOUBLE_WITH_ADD") (const_int 0)) --- 11079,11103 ---- (clobber (reg:CC 17))] "TARGET_PARTIAL_REG_STALL && ix86_binary_operator_ok (ASHIFT, HImode, operands)" { switch (get_attr_type (insn)) { case TYPE_ALU: if (operands[2] != const1_rtx) abort (); ! return "add{w}\t{%0, %0|%0, %0}"; default: if (REG_P (operands[2])) ! return "sal{w}\t{%b2, %0|%0, %b2}"; else if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 1 && (TARGET_PENTIUM || TARGET_PENTIUMPRO)) ! return "sal{w}\t%0"; else ! return "sal{w}\t{%2, %0|%0, %2}"; } ! } [(set (attr "type") (cond [(and (and (ne (symbol_ref "TARGET_DOUBLE_WITH_ADD") (const_int 0)) *************** *** 7868,7893 **** (ashift:HI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) && ix86_binary_operator_ok (ASHIFT, HImode, operands)" - "* { switch (get_attr_type (insn)) { case TYPE_ALU: if (operands[2] != const1_rtx) abort (); ! return \"add{w}\\t{%0, %0|%0, %0}\"; default: if (REG_P (operands[2])) ! return \"sal{w}\\t{%b2, %0|%0, %b2}\"; else if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 1 && (TARGET_PENTIUM || TARGET_PENTIUMPRO)) ! return \"sal{w}\\t%0\"; else ! return \"sal{w}\\t{%2, %0|%0, %2}\"; } ! }" [(set (attr "type") (cond [(and (and (ne (symbol_ref "TARGET_DOUBLE_WITH_ADD") (const_int 0)) --- 11121,11145 ---- (ashift:HI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) && ix86_binary_operator_ok (ASHIFT, HImode, operands)" { switch (get_attr_type (insn)) { case TYPE_ALU: if (operands[2] != const1_rtx) abort (); ! return "add{w}\t{%0, %0|%0, %0}"; default: if (REG_P (operands[2])) ! return "sal{w}\t{%b2, %0|%0, %b2}"; else if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 1 && (TARGET_PENTIUM || TARGET_PENTIUMPRO)) ! return "sal{w}\t%0"; else ! return "sal{w}\t{%2, %0|%0, %2}"; } ! } [(set (attr "type") (cond [(and (and (ne (symbol_ref "TARGET_DOUBLE_WITH_ADD") (const_int 0)) *************** *** 7915,7960 **** (clobber (reg:CC 17))] "!TARGET_PARTIAL_REG_STALL && ix86_binary_operator_ok (ASHIFT, QImode, operands)" - "* { switch (get_attr_type (insn)) { case TYPE_LEA: ! return \"#\"; case TYPE_ALU: if (operands[2] != const1_rtx) abort (); ! if (NON_QI_REG_P (operands[1])) ! return \"add{l}\\t{%k0, %k0|%k0, %k0}\"; else ! return \"add{b}\\t{%0, %0|%0, %0}\"; default: if (REG_P (operands[2])) { if (get_attr_mode (insn) == MODE_SI) ! return \"sal{l}\\t{%b2, %k0|%k0, %b2}\"; else ! return \"sal{b}\\t{%b2, %0|%0, %b2}\"; } else if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 1 && (TARGET_PENTIUM || TARGET_PENTIUMPRO)) { if (get_attr_mode (insn) == MODE_SI) ! return \"sal{l}\\t%0\"; else ! return \"sal{b}\\t%0\"; } else { if (get_attr_mode (insn) == MODE_SI) ! return \"sal{l}\\t{%2, %k0|%k0, %2}\"; else ! return \"sal{b}\\t{%2, %0|%0, %2}\"; } } ! }" [(set (attr "type") (cond [(eq_attr "alternative" "2") (const_string "lea") --- 11167,11211 ---- (clobber (reg:CC 17))] "!TARGET_PARTIAL_REG_STALL && ix86_binary_operator_ok (ASHIFT, QImode, operands)" { switch (get_attr_type (insn)) { case TYPE_LEA: ! return "#"; case TYPE_ALU: if (operands[2] != const1_rtx) abort (); ! if (REG_P (operands[1]) && !ANY_QI_REG_P (operands[1])) ! return "add{l}\t{%k0, %k0|%k0, %k0}"; else ! return "add{b}\t{%0, %0|%0, %0}"; default: if (REG_P (operands[2])) { if (get_attr_mode (insn) == MODE_SI) ! return "sal{l}\t{%b2, %k0|%k0, %b2}"; else ! return "sal{b}\t{%b2, %0|%0, %b2}"; } else if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 1 && (TARGET_PENTIUM || TARGET_PENTIUMPRO)) { if (get_attr_mode (insn) == MODE_SI) ! return "sal{l}\t%0"; else ! return "sal{b}\t%0"; } else { if (get_attr_mode (insn) == MODE_SI) ! return "sal{l}\t{%2, %k0|%k0, %2}"; else ! return "sal{b}\t{%2, %0|%0, %2}"; } } ! } [(set (attr "type") (cond [(eq_attr "alternative" "2") (const_string "lea") *************** *** 7974,8017 **** (clobber (reg:CC 17))] "TARGET_PARTIAL_REG_STALL && ix86_binary_operator_ok (ASHIFT, QImode, operands)" - "* { switch (get_attr_type (insn)) { case TYPE_ALU: if (operands[2] != const1_rtx) abort (); ! if (NON_QI_REG_P (operands[1])) ! return \"add{l}\\t{%k0, %k0|%k0, %k0}\"; else ! return \"add{b}\\t{%0, %0|%0, %0}\"; default: if (REG_P (operands[2])) { ! if (NON_QI_REG_P (operands[1])) ! return \"sal{l}\\t{%b2, %k0|%k0, %b2}\"; else ! return \"sal{b}\\t{%b2, %0|%0, %b2}\"; } else if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 1 && (TARGET_PENTIUM || TARGET_PENTIUMPRO)) { ! if (NON_QI_REG_P (operands[1])) ! return \"sal{l}\\t%0\"; else ! return \"sal{b}\\t%0\"; } else { ! if (NON_QI_REG_P (operands[1])) ! return \"sal{l}\\t{%2, %k0|%k0, %2}\"; else ! return \"sal{b}\\t{%2, %0|%0, %2}\"; } } ! }" [(set (attr "type") (cond [(and (and (ne (symbol_ref "TARGET_DOUBLE_WITH_ADD") (const_int 0)) --- 11225,11267 ---- (clobber (reg:CC 17))] "TARGET_PARTIAL_REG_STALL && ix86_binary_operator_ok (ASHIFT, QImode, operands)" { switch (get_attr_type (insn)) { case TYPE_ALU: if (operands[2] != const1_rtx) abort (); ! if (REG_P (operands[1]) && !ANY_QI_REG_P (operands[1])) ! return "add{l}\t{%k0, %k0|%k0, %k0}"; else ! return "add{b}\t{%0, %0|%0, %0}"; default: if (REG_P (operands[2])) { ! if (get_attr_mode (insn) == MODE_SI) ! return "sal{l}\t{%b2, %k0|%k0, %b2}"; else ! return "sal{b}\t{%b2, %0|%0, %b2}"; } else if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 1 && (TARGET_PENTIUM || TARGET_PENTIUMPRO)) { ! if (get_attr_mode (insn) == MODE_SI) ! return "sal{l}\t%0"; else ! return "sal{b}\t%0"; } else { ! if (get_attr_mode (insn) == MODE_SI) ! return "sal{l}\t{%2, %k0|%k0, %2}"; else ! return "sal{b}\t{%2, %0|%0, %2}"; } } ! } [(set (attr "type") (cond [(and (and (ne (symbol_ref "TARGET_DOUBLE_WITH_ADD") (const_int 0)) *************** *** 8035,8060 **** (ashift:QI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) && ix86_binary_operator_ok (ASHIFT, QImode, operands)" - "* { switch (get_attr_type (insn)) { case TYPE_ALU: if (operands[2] != const1_rtx) abort (); ! return \"add{b}\\t{%0, %0|%0, %0}\"; default: if (REG_P (operands[2])) ! return \"sal{b}\\t{%b2, %0|%0, %b2}\"; else if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 1 && (TARGET_PENTIUM || TARGET_PENTIUMPRO)) ! return \"sal{b}\\t%0\"; else ! return \"sal{b}\\t{%2, %0|%0, %2}\"; } ! }" [(set (attr "type") (cond [(and (and (ne (symbol_ref "TARGET_DOUBLE_WITH_ADD") (const_int 0)) --- 11285,11309 ---- (ashift:QI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) && ix86_binary_operator_ok (ASHIFT, QImode, operands)" { switch (get_attr_type (insn)) { case TYPE_ALU: if (operands[2] != const1_rtx) abort (); ! return "add{b}\t{%0, %0|%0, %0}"; default: if (REG_P (operands[2])) ! return "sal{b}\t{%b2, %0|%0, %b2}"; else if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 1 && (TARGET_PENTIUM || TARGET_PENTIUMPRO)) ! return "sal{b}\t%0"; else ! return "sal{b}\t{%2, %0|%0, %2}"; } ! } [(set (attr "type") (cond [(and (and (ne (symbol_ref "TARGET_DOUBLE_WITH_ADD") (const_int 0)) *************** *** 8068,8086 **** ;; See comment above `ashldi3' about how this works. (define_expand "ashrdi3" ! [(parallel [(set (match_operand:DI 0 "register_operand" "=r") ! (ashiftrt:DI (match_operand:DI 1 "register_operand" "0") ! (match_operand:QI 2 "nonmemory_operand" "Jc"))) (clobber (reg:CC 17))])] "" - " { ! if (TARGET_CMOVE && ! immediate_operand (operands[2], QImode)) { emit_insn (gen_ashrdi3_1 (operands[0], operands[1], operands[2])); DONE; } ! }") (define_insn "ashrdi3_1" [(set (match_operand:DI 0 "register_operand" "=r") --- 11317,11417 ---- ;; See comment above `ashldi3' about how this works. (define_expand "ashrdi3" ! [(parallel [(set (match_operand:DI 0 "shiftdi_operand" "") ! (ashiftrt:DI (match_operand:DI 1 "shiftdi_operand" "") ! (match_operand:QI 2 "nonmemory_operand" ""))) (clobber (reg:CC 17))])] "" { ! if (!TARGET_64BIT && TARGET_CMOVE && ! immediate_operand (operands[2], QImode)) { emit_insn (gen_ashrdi3_1 (operands[0], operands[1], operands[2])); DONE; } ! ix86_expand_binary_operator (ASHIFTRT, DImode, operands); ! DONE; ! }) ! ! (define_insn "ashrdi3_63_rex64" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=*d,rm") ! (ashiftrt:DI (match_operand:DI 1 "nonimmediate_operand" "*a,0") ! (match_operand:DI 2 "const_int_operand" "i,i"))) ! (clobber (reg:CC 17))] ! "TARGET_64BIT && INTVAL (operands[2]) == 63 && (TARGET_USE_CLTD || optimize_size) ! && ix86_binary_operator_ok (ASHIFTRT, DImode, operands)" ! "@ ! {cqto|cqo} ! sar{q}\t{%2, %0|%0, %2}" ! [(set_attr "type" "imovx,ishift") ! (set_attr "prefix_0f" "0,*") ! (set_attr "length_immediate" "0,*") ! (set_attr "modrm" "0,1") ! (set_attr "mode" "DI")]) ! ! (define_insn "*ashrdi3_1_one_bit_rex64" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=rm") ! (ashiftrt:DI (match_operand:DI 1 "nonimmediate_operand" "0") ! (match_operand:QI 2 "const_int_1_operand" ""))) ! (clobber (reg:CC 17))] ! "TARGET_64BIT && ix86_binary_operator_ok (ASHIFTRT, DImode, operands) ! && (TARGET_PENTIUM || TARGET_PENTIUMPRO)" ! "sar{q}\t%0" ! [(set_attr "type" "ishift") ! (set (attr "length") ! (if_then_else (match_operand:DI 0 "register_operand" "") ! (const_string "2") ! (const_string "*")))]) ! ! (define_insn "*ashrdi3_1_rex64" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=rm,rm") ! (ashiftrt:DI (match_operand:DI 1 "nonimmediate_operand" "0,0") ! (match_operand:QI 2 "nonmemory_operand" "J,c"))) ! (clobber (reg:CC 17))] ! "TARGET_64BIT && ix86_binary_operator_ok (ASHIFTRT, DImode, operands)" ! "@ ! sar{q}\t{%2, %0|%0, %2} ! sar{q}\t{%b2, %0|%0, %b2}" ! [(set_attr "type" "ishift") ! (set_attr "mode" "DI")]) ! ! ;; This pattern can't accept a variable shift count, since shifts by ! ;; zero don't affect the flags. We assume that shifts by constant ! ;; zero are optimized away. ! (define_insn "*ashrdi3_one_bit_cmp_rex64" ! [(set (reg 17) ! (compare ! (ashiftrt:DI (match_operand:DI 1 "nonimmediate_operand" "0") ! (match_operand:QI 2 "const_int_1_operand" "")) ! (const_int 0))) ! (set (match_operand:DI 0 "nonimmediate_operand" "=rm") ! (ashiftrt:DI (match_dup 1) (match_dup 2)))] ! "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode) ! && (TARGET_PENTIUM || TARGET_PENTIUMPRO) ! && ix86_binary_operator_ok (ASHIFTRT, DImode, operands)" ! "sar{q}\t%0" ! [(set_attr "type" "ishift") ! (set (attr "length") ! (if_then_else (match_operand:DI 0 "register_operand" "") ! (const_string "2") ! (const_string "*")))]) ! ! ;; This pattern can't accept a variable shift count, since shifts by ! ;; zero don't affect the flags. We assume that shifts by constant ! ;; zero are optimized away. ! (define_insn "*ashrdi3_cmp_rex64" ! [(set (reg 17) ! (compare ! (ashiftrt:DI (match_operand:DI 1 "nonimmediate_operand" "0") ! (match_operand:QI 2 "const_int_operand" "n")) ! (const_int 0))) ! (set (match_operand:DI 0 "nonimmediate_operand" "=rm") ! (ashiftrt:DI (match_dup 1) (match_dup 2)))] ! "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode) ! && ix86_binary_operator_ok (ASHIFTRT, DImode, operands)" ! "sar{q}\t{%2, %0|%0, %2}" ! [(set_attr "type" "ishift") ! (set_attr "mode" "DI")]) ! (define_insn "ashrdi3_1" [(set (match_operand:DI 0 "register_operand" "=r") *************** *** 8088,8094 **** (match_operand:QI 2 "nonmemory_operand" "Jc"))) (clobber (match_scratch:SI 3 "=&r")) (clobber (reg:CC 17))] ! "TARGET_CMOVE" "#" [(set_attr "type" "multi")]) --- 11419,11425 ---- (match_operand:QI 2 "nonmemory_operand" "Jc"))) (clobber (match_scratch:SI 3 "=&r")) (clobber (reg:CC 17))] ! "!TARGET_64BIT && TARGET_CMOVE" "#" [(set_attr "type" "multi")]) *************** *** 8097,8103 **** (ashiftrt:DI (match_operand:DI 1 "register_operand" "0") (match_operand:QI 2 "nonmemory_operand" "Jc"))) (clobber (reg:CC 17))] ! "" "#" [(set_attr "type" "multi")]) --- 11428,11434 ---- (ashiftrt:DI (match_operand:DI 1 "register_operand" "0") (match_operand:QI 2 "nonmemory_operand" "Jc"))) (clobber (reg:CC 17))] ! "!TARGET_64BIT" "#" [(set_attr "type" "multi")]) *************** *** 8107,8113 **** (match_operand:QI 2 "nonmemory_operand" ""))) (clobber (match_scratch:SI 3 "")) (clobber (reg:CC 17))] ! "TARGET_CMOVE && reload_completed" [(const_int 0)] "ix86_split_ashrdi (operands, operands[3]); DONE;") --- 11438,11444 ---- (match_operand:QI 2 "nonmemory_operand" ""))) (clobber (match_scratch:SI 3 "")) (clobber (reg:CC 17))] ! "!TARGET_64BIT && TARGET_CMOVE && reload_completed" [(const_int 0)] "ix86_split_ashrdi (operands, operands[3]); DONE;") *************** *** 8116,8122 **** (ashiftrt:DI (match_operand:DI 1 "register_operand" "") (match_operand:QI 2 "nonmemory_operand" ""))) (clobber (reg:CC 17))] ! "reload_completed" [(const_int 0)] "ix86_split_ashrdi (operands, NULL_RTX); DONE;") --- 11447,11453 ---- (ashiftrt:DI (match_operand:DI 1 "register_operand" "") (match_operand:QI 2 "nonmemory_operand" ""))) (clobber (reg:CC 17))] ! "!TARGET_64BIT && reload_completed" [(const_int 0)] "ix86_split_ashrdi (operands, NULL_RTX); DONE;") *************** *** 8129,8136 **** (clobber (reg:CC 17))] "" "@ ! shrd{l}\\t{%2, %1, %0|%0, %1, %2} ! shrd{l}\\t{%s2%1, %0|%0, %1, %2}" [(set_attr "type" "ishift") (set_attr "prefix_0f" "1") (set_attr "pent_pair" "np") --- 11460,11467 ---- (clobber (reg:CC 17))] "" "@ ! shrd{l}\t{%2, %1, %0|%0, %1, %2} ! shrd{l}\t{%s2%1, %0|%0, %1, %2}" [(set_attr "type" "ishift") (set_attr "prefix_0f" "1") (set_attr "pent_pair" "np") *************** *** 8142,8148 **** (use (match_operand:SI 1 "register_operand" "")) (use (match_operand:QI 2 "register_operand" ""))] "" - " { rtx label = gen_label_rtx (); rtx tmp; --- 11473,11478 ---- *************** *** 8164,8170 **** LABEL_NUSES (label) = 1; DONE; ! }") (define_insn "ashrsi3_31" [(set (match_operand:SI 0 "nonimmediate_operand" "=*d,rm") --- 11494,11500 ---- LABEL_NUSES (label) = 1; DONE; ! }) (define_insn "ashrsi3_31" [(set (match_operand:SI 0 "nonimmediate_operand" "=*d,rm") *************** *** 8175,8181 **** && ix86_binary_operator_ok (ASHIFTRT, SImode, operands)" "@ {cltd|cdq} ! sar{l}\\t{%2, %0|%0, %2}" [(set_attr "type" "imovx,ishift") (set_attr "prefix_0f" "0,*") (set_attr "length_immediate" "0,*") --- 11505,11528 ---- && ix86_binary_operator_ok (ASHIFTRT, SImode, operands)" "@ {cltd|cdq} ! sar{l}\t{%2, %0|%0, %2}" ! [(set_attr "type" "imovx,ishift") ! (set_attr "prefix_0f" "0,*") ! (set_attr "length_immediate" "0,*") ! (set_attr "modrm" "0,1") ! (set_attr "mode" "SI")]) ! ! (define_insn "*ashrsi3_31_zext" ! [(set (match_operand:DI 0 "register_operand" "=*d,r") ! (zero_extend:DI (ashiftrt:SI (match_operand:SI 1 "register_operand" "*a,0") ! (match_operand:SI 2 "const_int_operand" "i,i")))) ! (clobber (reg:CC 17))] ! "TARGET_64BIT && (TARGET_USE_CLTD || optimize_size) ! && INTVAL (operands[2]) == 31 ! && ix86_binary_operator_ok (ASHIFTRT, SImode, operands)" ! "@ ! {cltd|cdq} ! sar{l}\t{%2, %k0|%k0, %2}" [(set_attr "type" "imovx,ishift") (set_attr "prefix_0f" "0,*") (set_attr "length_immediate" "0,*") *************** *** 8197,8209 **** (clobber (reg:CC 17))] "ix86_binary_operator_ok (ASHIFTRT, SImode, operands) && (TARGET_PENTIUM || TARGET_PENTIUMPRO)" ! "sar{l}\\t%0" [(set_attr "type" "ishift") (set (attr "length") (if_then_else (match_operand:SI 0 "register_operand" "") (const_string "2") (const_string "*")))]) (define_insn "*ashrsi3_1" [(set (match_operand:SI 0 "nonimmediate_operand" "=rm,rm") (ashiftrt:SI (match_operand:SI 1 "nonimmediate_operand" "0,0") --- 11544,11567 ---- (clobber (reg:CC 17))] "ix86_binary_operator_ok (ASHIFTRT, SImode, operands) && (TARGET_PENTIUM || TARGET_PENTIUMPRO)" ! "sar{l}\t%0" [(set_attr "type" "ishift") (set (attr "length") (if_then_else (match_operand:SI 0 "register_operand" "") (const_string "2") (const_string "*")))]) + (define_insn "*ashrsi3_1_one_bit_zext" + [(set (match_operand:DI 0 "register_operand" "=r") + (zero_extend:DI (ashiftrt:SI (match_operand:SI 1 "register_operand" "0") + (match_operand:QI 2 "const_int_1_operand" "")))) + (clobber (reg:CC 17))] + "TARGET_64BIT && ix86_binary_operator_ok (ASHIFTRT, SImode, operands) + && (TARGET_PENTIUM || TARGET_PENTIUMPRO)" + "sar{l}\t%k0" + [(set_attr "type" "ishift") + (set_attr "length" "2")]) + (define_insn "*ashrsi3_1" [(set (match_operand:SI 0 "nonimmediate_operand" "=rm,rm") (ashiftrt:SI (match_operand:SI 1 "nonimmediate_operand" "0,0") *************** *** 8211,8218 **** (clobber (reg:CC 17))] "ix86_binary_operator_ok (ASHIFTRT, SImode, operands)" "@ ! sar{l}\\t{%2, %0|%0, %2} ! sar{l}\\t{%b2, %0|%0, %b2}" [(set_attr "type" "ishift") (set_attr "mode" "SI")]) --- 11569,11588 ---- (clobber (reg:CC 17))] "ix86_binary_operator_ok (ASHIFTRT, SImode, operands)" "@ ! sar{l}\t{%2, %0|%0, %2} ! sar{l}\t{%b2, %0|%0, %b2}" ! [(set_attr "type" "ishift") ! (set_attr "mode" "SI")]) ! ! (define_insn "*ashrsi3_1_zext" ! [(set (match_operand:DI 0 "register_operand" "=r,r") ! (zero_extend:DI (ashiftrt:SI (match_operand:SI 1 "register_operand" "0,0") ! (match_operand:QI 2 "nonmemory_operand" "I,c")))) ! (clobber (reg:CC 17))] ! "TARGET_64BIT && ix86_binary_operator_ok (ASHIFTRT, SImode, operands)" ! "@ ! sar{l}\t{%2, %k0|%k0, %2} ! sar{l}\t{%b2, %k0|%k0, %b2}" [(set_attr "type" "ishift") (set_attr "mode" "SI")]) *************** *** 8230,8242 **** "ix86_match_ccmode (insn, CCGOCmode) && (TARGET_PENTIUM || TARGET_PENTIUMPRO) && ix86_binary_operator_ok (ASHIFTRT, SImode, operands)" ! "sar{l}\\t%0" [(set_attr "type" "ishift") (set (attr "length") (if_then_else (match_operand:SI 0 "register_operand" "") (const_string "2") (const_string "*")))]) ;; This pattern can't accept a variable shift count, since shifts by ;; zero don't affect the flags. We assume that shifts by constant ;; zero are optimized away. --- 11600,11627 ---- "ix86_match_ccmode (insn, CCGOCmode) && (TARGET_PENTIUM || TARGET_PENTIUMPRO) && ix86_binary_operator_ok (ASHIFTRT, SImode, operands)" ! "sar{l}\t%0" [(set_attr "type" "ishift") (set (attr "length") (if_then_else (match_operand:SI 0 "register_operand" "") (const_string "2") (const_string "*")))]) + (define_insn "*ashrsi3_one_bit_cmp_zext" + [(set (reg 17) + (compare + (ashiftrt:SI (match_operand:SI 1 "register_operand" "0") + (match_operand:QI 2 "const_int_1_operand" "")) + (const_int 0))) + (set (match_operand:DI 0 "register_operand" "=r") + (zero_extend:DI (ashiftrt:SI (match_dup 1) (match_dup 2))))] + "TARGET_64BIT && ix86_match_ccmode (insn, CCmode) + && (TARGET_PENTIUM || TARGET_PENTIUMPRO) + && ix86_binary_operator_ok (ASHIFTRT, SImode, operands)" + "sar{l}\t%k0" + [(set_attr "type" "ishift") + (set_attr "length" "2")]) + ;; This pattern can't accept a variable shift count, since shifts by ;; zero don't affect the flags. We assume that shifts by constant ;; zero are optimized away. *************** *** 8250,8256 **** (ashiftrt:SI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) && ix86_binary_operator_ok (ASHIFTRT, SImode, operands)" ! "sar{l}\\t{%2, %0|%0, %2}" [(set_attr "type" "ishift") (set_attr "mode" "SI")]) --- 11635,11655 ---- (ashiftrt:SI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) && ix86_binary_operator_ok (ASHIFTRT, SImode, operands)" ! "sar{l}\t{%2, %0|%0, %2}" ! [(set_attr "type" "ishift") ! (set_attr "mode" "SI")]) ! ! (define_insn "*ashrsi3_cmp_zext" ! [(set (reg 17) ! (compare ! (ashiftrt:SI (match_operand:SI 1 "register_operand" "0") ! (match_operand:QI 2 "immediate_operand" "I")) ! (const_int 0))) ! (set (match_operand:DI 0 "register_operand" "=r") ! (zero_extend:DI (ashiftrt:SI (match_dup 1) (match_dup 2))))] ! "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode) ! && ix86_binary_operator_ok (ASHIFTRT, SImode, operands)" ! "sar{l}\t{%2, %k0|%k0, %2}" [(set_attr "type" "ishift") (set_attr "mode" "SI")]) *************** *** 8269,8278 **** (clobber (reg:CC 17))] "ix86_binary_operator_ok (ASHIFTRT, HImode, operands) && (TARGET_PENTIUM || TARGET_PENTIUMPRO)" ! "sar{w}\\t%0" [(set_attr "type" "ishift") (set (attr "length") ! (if_then_else (match_operand:SI 0 "register_operand" "") (const_string "2") (const_string "*")))]) --- 11668,11677 ---- (clobber (reg:CC 17))] "ix86_binary_operator_ok (ASHIFTRT, HImode, operands) && (TARGET_PENTIUM || TARGET_PENTIUMPRO)" ! "sar{w}\t%0" [(set_attr "type" "ishift") (set (attr "length") ! (if_then_else (match_operand 0 "register_operand" "") (const_string "2") (const_string "*")))]) *************** *** 8283,8290 **** (clobber (reg:CC 17))] "ix86_binary_operator_ok (ASHIFTRT, HImode, operands)" "@ ! sar{w}\\t{%2, %0|%0, %2} ! sar{w}\\t{%b2, %0|%0, %b2}" [(set_attr "type" "ishift") (set_attr "mode" "HI")]) --- 11682,11689 ---- (clobber (reg:CC 17))] "ix86_binary_operator_ok (ASHIFTRT, HImode, operands)" "@ ! sar{w}\t{%2, %0|%0, %2} ! sar{w}\t{%b2, %0|%0, %b2}" [(set_attr "type" "ishift") (set_attr "mode" "HI")]) *************** *** 8302,8311 **** "ix86_match_ccmode (insn, CCGOCmode) && (TARGET_PENTIUM || TARGET_PENTIUMPRO) && ix86_binary_operator_ok (ASHIFTRT, HImode, operands)" ! "sar{w}\\t%0" [(set_attr "type" "ishift") (set (attr "length") ! (if_then_else (match_operand:SI 0 "register_operand" "") (const_string "2") (const_string "*")))]) --- 11701,11710 ---- "ix86_match_ccmode (insn, CCGOCmode) && (TARGET_PENTIUM || TARGET_PENTIUMPRO) && ix86_binary_operator_ok (ASHIFTRT, HImode, operands)" ! "sar{w}\t%0" [(set_attr "type" "ishift") (set (attr "length") ! (if_then_else (match_operand 0 "register_operand" "") (const_string "2") (const_string "*")))]) *************** *** 8322,8328 **** (ashiftrt:HI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) && ix86_binary_operator_ok (ASHIFTRT, HImode, operands)" ! "sar{w}\\t{%2, %0|%0, %2}" [(set_attr "type" "ishift") (set_attr "mode" "HI")]) --- 11721,11727 ---- (ashiftrt:HI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) && ix86_binary_operator_ok (ASHIFTRT, HImode, operands)" ! "sar{w}\t{%2, %0|%0, %2}" [(set_attr "type" "ishift") (set_attr "mode" "HI")]) *************** *** 8341,8350 **** (clobber (reg:CC 17))] "ix86_binary_operator_ok (ASHIFTRT, QImode, operands) && (TARGET_PENTIUM || TARGET_PENTIUMPRO)" ! "sar{b}\\t%0" [(set_attr "type" "ishift") (set (attr "length") ! (if_then_else (match_operand:SI 0 "register_operand" "") (const_string "2") (const_string "*")))]) --- 11740,11749 ---- (clobber (reg:CC 17))] "ix86_binary_operator_ok (ASHIFTRT, QImode, operands) && (TARGET_PENTIUM || TARGET_PENTIUMPRO)" ! "sar{b}\t%0" [(set_attr "type" "ishift") (set (attr "length") ! (if_then_else (match_operand 0 "register_operand" "") (const_string "2") (const_string "*")))]) *************** *** 8355,8362 **** (clobber (reg:CC 17))] "ix86_binary_operator_ok (ASHIFTRT, QImode, operands)" "@ ! sar{b}\\t{%2, %0|%0, %2} ! sar{b}\\t{%b2, %0|%0, %b2}" [(set_attr "type" "ishift") (set_attr "mode" "QI")]) --- 11754,11761 ---- (clobber (reg:CC 17))] "ix86_binary_operator_ok (ASHIFTRT, QImode, operands)" "@ ! sar{b}\t{%2, %0|%0, %2} ! sar{b}\t{%b2, %0|%0, %b2}" [(set_attr "type" "ishift") (set_attr "mode" "QI")]) *************** *** 8374,8383 **** "ix86_match_ccmode (insn, CCGOCmode) && (TARGET_PENTIUM || TARGET_PENTIUMPRO) && ix86_binary_operator_ok (ASHIFTRT, QImode, operands)" ! "sar{b}\\t%0" [(set_attr "type" "ishift") (set (attr "length") ! (if_then_else (match_operand:SI 0 "register_operand" "") (const_string "2") (const_string "*")))]) --- 11773,11782 ---- "ix86_match_ccmode (insn, CCGOCmode) && (TARGET_PENTIUM || TARGET_PENTIUMPRO) && ix86_binary_operator_ok (ASHIFTRT, QImode, operands)" ! "sar{b}\t%0" [(set_attr "type" "ishift") (set (attr "length") ! (if_then_else (match_operand 0 "register_operand" "") (const_string "2") (const_string "*")))]) *************** *** 8394,8400 **** (ashiftrt:QI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) && ix86_binary_operator_ok (ASHIFTRT, QImode, operands)" ! "sar{b}\\t{%2, %0|%0, %2}" [(set_attr "type" "ishift") (set_attr "mode" "QI")]) --- 11793,11799 ---- (ashiftrt:QI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) && ix86_binary_operator_ok (ASHIFTRT, QImode, operands)" ! "sar{b}\t{%2, %0|%0, %2}" [(set_attr "type" "ishift") (set_attr "mode" "QI")]) *************** *** 8403,8421 **** ;; See comment above `ashldi3' about how this works. (define_expand "lshrdi3" ! [(parallel [(set (match_operand:DI 0 "register_operand" "=r") ! (lshiftrt:DI (match_operand:DI 1 "register_operand" "0") ! (match_operand:QI 2 "nonmemory_operand" "Jc"))) (clobber (reg:CC 17))])] "" - " { ! if (TARGET_CMOVE && ! immediate_operand (operands[2], QImode)) { emit_insn (gen_lshrdi3_1 (operands[0], operands[1], operands[2])); DONE; } ! }") (define_insn "lshrdi3_1" [(set (match_operand:DI 0 "register_operand" "=r") --- 11802,11885 ---- ;; See comment above `ashldi3' about how this works. (define_expand "lshrdi3" ! [(parallel [(set (match_operand:DI 0 "shiftdi_operand" "") ! (lshiftrt:DI (match_operand:DI 1 "shiftdi_operand" "") ! (match_operand:QI 2 "nonmemory_operand" ""))) (clobber (reg:CC 17))])] "" { ! if (!TARGET_64BIT && TARGET_CMOVE && ! immediate_operand (operands[2], QImode)) { emit_insn (gen_lshrdi3_1 (operands[0], operands[1], operands[2])); DONE; } ! ix86_expand_binary_operator (LSHIFTRT, DImode, operands); ! DONE; ! }) ! ! (define_insn "*lshrdi3_1_one_bit_rex64" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=rm") ! (lshiftrt:DI (match_operand:DI 1 "nonimmediate_operand" "0") ! (match_operand:QI 2 "const_int_1_operand" ""))) ! (clobber (reg:CC 17))] ! "TARGET_64BIT && ix86_binary_operator_ok (LSHIFTRT, HImode, operands) ! && (TARGET_PENTIUM || TARGET_PENTIUMPRO)" ! "shr{q}\t%0" ! [(set_attr "type" "ishift") ! (set (attr "length") ! (if_then_else (match_operand:DI 0 "register_operand" "") ! (const_string "2") ! (const_string "*")))]) ! ! (define_insn "*lshrdi3_1_rex64" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=rm,rm") ! (lshiftrt:DI (match_operand:DI 1 "nonimmediate_operand" "0,0") ! (match_operand:QI 2 "nonmemory_operand" "J,c"))) ! (clobber (reg:CC 17))] ! "TARGET_64BIT && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)" ! "@ ! shr{q}\t{%2, %0|%0, %2} ! shr{q}\t{%b2, %0|%0, %b2}" ! [(set_attr "type" "ishift") ! (set_attr "mode" "DI")]) ! ! ;; This pattern can't accept a variable shift count, since shifts by ! ;; zero don't affect the flags. We assume that shifts by constant ! ;; zero are optimized away. ! (define_insn "*lshrdi3_cmp_one_bit_rex64" ! [(set (reg 17) ! (compare ! (lshiftrt:DI (match_operand:DI 1 "nonimmediate_operand" "0") ! (match_operand:QI 2 "const_int_1_operand" "")) ! (const_int 0))) ! (set (match_operand:DI 0 "nonimmediate_operand" "=rm") ! (lshiftrt:DI (match_dup 1) (match_dup 2)))] ! "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode) ! && (TARGET_PENTIUM || TARGET_PENTIUMPRO) ! && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)" ! "shr{q}\t%0" ! [(set_attr "type" "ishift") ! (set (attr "length") ! (if_then_else (match_operand:DI 0 "register_operand" "") ! (const_string "2") ! (const_string "*")))]) ! ! ;; This pattern can't accept a variable shift count, since shifts by ! ;; zero don't affect the flags. We assume that shifts by constant ! ;; zero are optimized away. ! (define_insn "*lshrdi3_cmp_rex64" ! [(set (reg 17) ! (compare ! (lshiftrt:DI (match_operand:DI 1 "nonimmediate_operand" "0") ! (match_operand:QI 2 "const_int_operand" "e")) ! (const_int 0))) ! (set (match_operand:DI 0 "nonimmediate_operand" "=rm") ! (lshiftrt:DI (match_dup 1) (match_dup 2)))] ! "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode) ! && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)" ! "shr{q}\t{%2, %0|%0, %2}" ! [(set_attr "type" "ishift") ! (set_attr "mode" "DI")]) (define_insn "lshrdi3_1" [(set (match_operand:DI 0 "register_operand" "=r") *************** *** 8423,8429 **** (match_operand:QI 2 "nonmemory_operand" "Jc"))) (clobber (match_scratch:SI 3 "=&r")) (clobber (reg:CC 17))] ! "TARGET_CMOVE" "#" [(set_attr "type" "multi")]) --- 11887,11893 ---- (match_operand:QI 2 "nonmemory_operand" "Jc"))) (clobber (match_scratch:SI 3 "=&r")) (clobber (reg:CC 17))] ! "!TARGET_64BIT && TARGET_CMOVE" "#" [(set_attr "type" "multi")]) *************** *** 8432,8438 **** (lshiftrt:DI (match_operand:DI 1 "register_operand" "0") (match_operand:QI 2 "nonmemory_operand" "Jc"))) (clobber (reg:CC 17))] ! "" "#" [(set_attr "type" "multi")]) --- 11896,11902 ---- (lshiftrt:DI (match_operand:DI 1 "register_operand" "0") (match_operand:QI 2 "nonmemory_operand" "Jc"))) (clobber (reg:CC 17))] ! "!TARGET_64BIT" "#" [(set_attr "type" "multi")]) *************** *** 8442,8448 **** (match_operand:QI 2 "nonmemory_operand" ""))) (clobber (match_scratch:SI 3 "")) (clobber (reg:CC 17))] ! "TARGET_CMOVE && reload_completed" [(const_int 0)] "ix86_split_lshrdi (operands, operands[3]); DONE;") --- 11906,11912 ---- (match_operand:QI 2 "nonmemory_operand" ""))) (clobber (match_scratch:SI 3 "")) (clobber (reg:CC 17))] ! "!TARGET_64BIT && TARGET_CMOVE && reload_completed" [(const_int 0)] "ix86_split_lshrdi (operands, operands[3]); DONE;") *************** *** 8451,8457 **** (lshiftrt:DI (match_operand:DI 1 "register_operand" "") (match_operand:QI 2 "nonmemory_operand" ""))) (clobber (reg:CC 17))] ! "reload_completed" [(const_int 0)] "ix86_split_lshrdi (operands, NULL_RTX); DONE;") --- 11915,11921 ---- (lshiftrt:DI (match_operand:DI 1 "register_operand" "") (match_operand:QI 2 "nonmemory_operand" ""))) (clobber (reg:CC 17))] ! "!TARGET_64BIT && reload_completed" [(const_int 0)] "ix86_split_lshrdi (operands, NULL_RTX); DONE;") *************** *** 8470,8482 **** (clobber (reg:CC 17))] "ix86_binary_operator_ok (LSHIFTRT, HImode, operands) && (TARGET_PENTIUM || TARGET_PENTIUMPRO)" ! "shr{l}\\t%0" [(set_attr "type" "ishift") (set (attr "length") (if_then_else (match_operand:SI 0 "register_operand" "") (const_string "2") (const_string "*")))]) (define_insn "*lshrsi3_1" [(set (match_operand:SI 0 "nonimmediate_operand" "=rm,rm") (lshiftrt:SI (match_operand:SI 1 "nonimmediate_operand" "0,0") --- 11934,11957 ---- (clobber (reg:CC 17))] "ix86_binary_operator_ok (LSHIFTRT, HImode, operands) && (TARGET_PENTIUM || TARGET_PENTIUMPRO)" ! "shr{l}\t%0" [(set_attr "type" "ishift") (set (attr "length") (if_then_else (match_operand:SI 0 "register_operand" "") (const_string "2") (const_string "*")))]) + (define_insn "*lshrsi3_1_one_bit_zext" + [(set (match_operand:DI 0 "register_operand" "=r") + (lshiftrt:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "0")) + (match_operand:QI 2 "const_int_1_operand" ""))) + (clobber (reg:CC 17))] + "TARGET_64BIT && ix86_binary_operator_ok (LSHIFTRT, HImode, operands) + && (TARGET_PENTIUM || TARGET_PENTIUMPRO)" + "shr{l}\t%k0" + [(set_attr "type" "ishift") + (set_attr "length" "2")]) + (define_insn "*lshrsi3_1" [(set (match_operand:SI 0 "nonimmediate_operand" "=rm,rm") (lshiftrt:SI (match_operand:SI 1 "nonimmediate_operand" "0,0") *************** *** 8484,8491 **** (clobber (reg:CC 17))] "ix86_binary_operator_ok (LSHIFTRT, HImode, operands)" "@ ! shr{l}\\t{%2, %0|%0, %2} ! shr{l}\\t{%b2, %0|%0, %b2}" [(set_attr "type" "ishift") (set_attr "mode" "SI")]) --- 11959,11979 ---- (clobber (reg:CC 17))] "ix86_binary_operator_ok (LSHIFTRT, HImode, operands)" "@ ! shr{l}\t{%2, %0|%0, %2} ! shr{l}\t{%b2, %0|%0, %b2}" ! [(set_attr "type" "ishift") ! (set_attr "mode" "SI")]) ! ! (define_insn "*lshrsi3_1_zext" ! [(set (match_operand:DI 0 "register_operand" "=r,r") ! (zero_extend:DI ! (lshiftrt:SI (match_operand:SI 1 "nonimmediate_operand" "0,0") ! (match_operand:QI 2 "nonmemory_operand" "I,c")))) ! (clobber (reg:CC 17))] ! "TARGET_64BIT && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)" ! "@ ! shr{l}\t{%2, %k0|%k0, %2} ! shr{l}\t{%b2, %k0|%k0, %b2}" [(set_attr "type" "ishift") (set_attr "mode" "SI")]) *************** *** 8503,8515 **** "ix86_match_ccmode (insn, CCGOCmode) && (TARGET_PENTIUM || TARGET_PENTIUMPRO) && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)" ! "shr{l}\\t%0" [(set_attr "type" "ishift") (set (attr "length") (if_then_else (match_operand:SI 0 "register_operand" "") (const_string "2") (const_string "*")))]) ;; This pattern can't accept a variable shift count, since shifts by ;; zero don't affect the flags. We assume that shifts by constant ;; zero are optimized away. --- 11991,12018 ---- "ix86_match_ccmode (insn, CCGOCmode) && (TARGET_PENTIUM || TARGET_PENTIUMPRO) && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)" ! "shr{l}\t%0" [(set_attr "type" "ishift") (set (attr "length") (if_then_else (match_operand:SI 0 "register_operand" "") (const_string "2") (const_string "*")))]) + (define_insn "*lshrsi3_cmp_one_bit_zext" + [(set (reg 17) + (compare + (lshiftrt:SI (match_operand:SI 1 "register_operand" "0") + (match_operand:QI 2 "const_int_1_operand" "")) + (const_int 0))) + (set (match_operand:DI 0 "register_operand" "=r") + (lshiftrt:DI (zero_extend:DI (match_dup 1)) (match_dup 2)))] + "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode) + && (TARGET_PENTIUM || TARGET_PENTIUMPRO) + && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)" + "shr{l}\t%k0" + [(set_attr "type" "ishift") + (set_attr "length" "2")]) + ;; This pattern can't accept a variable shift count, since shifts by ;; zero don't affect the flags. We assume that shifts by constant ;; zero are optimized away. *************** *** 8523,8529 **** (lshiftrt:SI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)" ! "shr{l}\\t{%2, %0|%0, %2}" [(set_attr "type" "ishift") (set_attr "mode" "SI")]) --- 12026,12046 ---- (lshiftrt:SI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)" ! "shr{l}\t{%2, %0|%0, %2}" ! [(set_attr "type" "ishift") ! (set_attr "mode" "SI")]) ! ! (define_insn "*lshrsi3_cmp_zext" ! [(set (reg 17) ! (compare ! (lshiftrt:SI (match_operand:SI 1 "register_operand" "0") ! (match_operand:QI 2 "immediate_operand" "I")) ! (const_int 0))) ! (set (match_operand:DI 0 "register_operand" "=r") ! (lshiftrt:DI (zero_extend:DI (match_dup 1)) (match_dup 2)))] ! "TARGET_64BIT && ix86_match_ccmode (insn, CCGOCmode) ! && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)" ! "shr{l}\t{%2, %k0|%k0, %2}" [(set_attr "type" "ishift") (set_attr "mode" "SI")]) *************** *** 8542,8551 **** (clobber (reg:CC 17))] "ix86_binary_operator_ok (LSHIFTRT, HImode, operands) && (TARGET_PENTIUM || TARGET_PENTIUMPRO)" ! "shr{w}\\t%0" [(set_attr "type" "ishift") (set (attr "length") ! (if_then_else (match_operand:SI 0 "register_operand" "") (const_string "2") (const_string "*")))]) --- 12059,12068 ---- (clobber (reg:CC 17))] "ix86_binary_operator_ok (LSHIFTRT, HImode, operands) && (TARGET_PENTIUM || TARGET_PENTIUMPRO)" ! "shr{w}\t%0" [(set_attr "type" "ishift") (set (attr "length") ! (if_then_else (match_operand 0 "register_operand" "") (const_string "2") (const_string "*")))]) *************** *** 8556,8563 **** (clobber (reg:CC 17))] "ix86_binary_operator_ok (LSHIFTRT, HImode, operands)" "@ ! shr{w}\\t{%2, %0|%0, %2} ! shr{w}\\t{%b2, %0|%0, %b2}" [(set_attr "type" "ishift") (set_attr "mode" "HI")]) --- 12073,12080 ---- (clobber (reg:CC 17))] "ix86_binary_operator_ok (LSHIFTRT, HImode, operands)" "@ ! shr{w}\t{%2, %0|%0, %2} ! shr{w}\t{%b2, %0|%0, %b2}" [(set_attr "type" "ishift") (set_attr "mode" "HI")]) *************** *** 8575,8581 **** "ix86_match_ccmode (insn, CCGOCmode) && (TARGET_PENTIUM || TARGET_PENTIUMPRO) && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)" ! "shr{w}\\t%0" [(set_attr "type" "ishift") (set (attr "length") (if_then_else (match_operand:SI 0 "register_operand" "") --- 12092,12098 ---- "ix86_match_ccmode (insn, CCGOCmode) && (TARGET_PENTIUM || TARGET_PENTIUMPRO) && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)" ! "shr{w}\t%0" [(set_attr "type" "ishift") (set (attr "length") (if_then_else (match_operand:SI 0 "register_operand" "") *************** *** 8595,8601 **** (lshiftrt:HI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)" ! "shr{w}\\t{%2, %0|%0, %2}" [(set_attr "type" "ishift") (set_attr "mode" "HI")]) --- 12112,12118 ---- (lshiftrt:HI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) && ix86_binary_operator_ok (LSHIFTRT, HImode, operands)" ! "shr{w}\t{%2, %0|%0, %2}" [(set_attr "type" "ishift") (set_attr "mode" "HI")]) *************** *** 8614,8623 **** (clobber (reg:CC 17))] "ix86_binary_operator_ok (LSHIFTRT, QImode, operands) && (TARGET_PENTIUM || TARGET_PENTIUMPRO)" ! "shr{b}\\t%0" [(set_attr "type" "ishift") (set (attr "length") ! (if_then_else (match_operand:SI 0 "register_operand" "") (const_string "2") (const_string "*")))]) --- 12131,12140 ---- (clobber (reg:CC 17))] "ix86_binary_operator_ok (LSHIFTRT, QImode, operands) && (TARGET_PENTIUM || TARGET_PENTIUMPRO)" ! "shr{b}\t%0" [(set_attr "type" "ishift") (set (attr "length") ! (if_then_else (match_operand 0 "register_operand" "") (const_string "2") (const_string "*")))]) *************** *** 8628,8635 **** (clobber (reg:CC 17))] "ix86_binary_operator_ok (LSHIFTRT, QImode, operands)" "@ ! shr{b}\\t{%2, %0|%0, %2} ! shr{b}\\t{%b2, %0|%0, %b2}" [(set_attr "type" "ishift") (set_attr "mode" "QI")]) --- 12145,12152 ---- (clobber (reg:CC 17))] "ix86_binary_operator_ok (LSHIFTRT, QImode, operands)" "@ ! shr{b}\t{%2, %0|%0, %2} ! shr{b}\t{%b2, %0|%0, %b2}" [(set_attr "type" "ishift") (set_attr "mode" "QI")]) *************** *** 8647,8653 **** "ix86_match_ccmode (insn, CCGOCmode) && (TARGET_PENTIUM || TARGET_PENTIUMPRO) && ix86_binary_operator_ok (LSHIFTRT, QImode, operands)" ! "shr{b}\\t%0" [(set_attr "type" "ishift") (set (attr "length") (if_then_else (match_operand:SI 0 "register_operand" "") --- 12164,12170 ---- "ix86_match_ccmode (insn, CCGOCmode) && (TARGET_PENTIUM || TARGET_PENTIUMPRO) && ix86_binary_operator_ok (LSHIFTRT, QImode, operands)" ! "shr{b}\t%0" [(set_attr "type" "ishift") (set (attr "length") (if_then_else (match_operand:SI 0 "register_operand" "") *************** *** 8667,8678 **** (lshiftrt:QI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) && ix86_binary_operator_ok (LSHIFTRT, QImode, operands)" ! "shr{b}\\t{%2, %0|%0, %2}" [(set_attr "type" "ishift") (set_attr "mode" "QI")]) ;; Rotate instructions (define_expand "rotlsi3" [(set (match_operand:SI 0 "nonimmediate_operand" "") (rotate:SI (match_operand:SI 1 "nonimmediate_operand" "") --- 12184,12229 ---- (lshiftrt:QI (match_dup 1) (match_dup 2)))] "ix86_match_ccmode (insn, CCGOCmode) && ix86_binary_operator_ok (LSHIFTRT, QImode, operands)" ! "shr{b}\t{%2, %0|%0, %2}" [(set_attr "type" "ishift") (set_attr "mode" "QI")]) ;; Rotate instructions + (define_expand "rotldi3" + [(set (match_operand:DI 0 "nonimmediate_operand" "") + (rotate:DI (match_operand:DI 1 "nonimmediate_operand" "") + (match_operand:QI 2 "nonmemory_operand" ""))) + (clobber (reg:CC 17))] + "TARGET_64BIT" + "ix86_expand_binary_operator (ROTATE, DImode, operands); DONE;") + + (define_insn "*rotlsi3_1_one_bit_rex64" + [(set (match_operand:DI 0 "nonimmediate_operand" "=rm") + (rotate:DI (match_operand:DI 1 "nonimmediate_operand" "0") + (match_operand:QI 2 "const_int_1_operand" ""))) + (clobber (reg:CC 17))] + "TARGET_64BIT && ix86_binary_operator_ok (ROTATE, DImode, operands) + && (TARGET_PENTIUM || TARGET_PENTIUMPRO)" + "rol{q}\t%0" + [(set_attr "type" "ishift") + (set (attr "length") + (if_then_else (match_operand:DI 0 "register_operand" "") + (const_string "2") + (const_string "*")))]) + + (define_insn "*rotldi3_1_rex64" + [(set (match_operand:DI 0 "nonimmediate_operand" "=rm,rm") + (rotate:DI (match_operand:DI 1 "nonimmediate_operand" "0,0") + (match_operand:QI 2 "nonmemory_operand" "e,c"))) + (clobber (reg:CC 17))] + "TARGET_64BIT && ix86_binary_operator_ok (ROTATE, DImode, operands)" + "@ + rol{q}\t{%2, %0|%0, %2} + rol{q}\t{%b2, %0|%0, %b2}" + [(set_attr "type" "ishift") + (set_attr "mode" "DI")]) + (define_expand "rotlsi3" [(set (match_operand:SI 0 "nonimmediate_operand" "") (rotate:SI (match_operand:SI 1 "nonimmediate_operand" "") *************** *** 8688,8700 **** (clobber (reg:CC 17))] "ix86_binary_operator_ok (ROTATE, SImode, operands) && (TARGET_PENTIUM || TARGET_PENTIUMPRO)" ! "rol{l}\\t%0" [(set_attr "type" "ishift") (set (attr "length") (if_then_else (match_operand:SI 0 "register_operand" "") (const_string "2") (const_string "*")))]) (define_insn "*rotlsi3_1" [(set (match_operand:SI 0 "nonimmediate_operand" "=rm,rm") (rotate:SI (match_operand:SI 1 "nonimmediate_operand" "0,0") --- 12239,12263 ---- (clobber (reg:CC 17))] "ix86_binary_operator_ok (ROTATE, SImode, operands) && (TARGET_PENTIUM || TARGET_PENTIUMPRO)" ! "rol{l}\t%0" [(set_attr "type" "ishift") (set (attr "length") (if_then_else (match_operand:SI 0 "register_operand" "") (const_string "2") (const_string "*")))]) + (define_insn "*rotlsi3_1_one_bit_zext" + [(set (match_operand:DI 0 "register_operand" "=r") + (zero_extend:DI + (rotate:SI (match_operand:SI 1 "register_operand" "0") + (match_operand:QI 2 "const_int_1_operand" "")))) + (clobber (reg:CC 17))] + "TARGET_64BIT && ix86_binary_operator_ok (ROTATE, SImode, operands) + && (TARGET_PENTIUM || TARGET_PENTIUMPRO)" + "rol{l}\t%k0" + [(set_attr "type" "ishift") + (set_attr "length" "2")]) + (define_insn "*rotlsi3_1" [(set (match_operand:SI 0 "nonimmediate_operand" "=rm,rm") (rotate:SI (match_operand:SI 1 "nonimmediate_operand" "0,0") *************** *** 8702,8709 **** (clobber (reg:CC 17))] "ix86_binary_operator_ok (ROTATE, SImode, operands)" "@ ! rol{l}\\t{%2, %0|%0, %2} ! rol{l}\\t{%b2, %0|%0, %b2}" [(set_attr "type" "ishift") (set_attr "mode" "SI")]) --- 12265,12285 ---- (clobber (reg:CC 17))] "ix86_binary_operator_ok (ROTATE, SImode, operands)" "@ ! rol{l}\t{%2, %0|%0, %2} ! rol{l}\t{%b2, %0|%0, %b2}" ! [(set_attr "type" "ishift") ! (set_attr "mode" "SI")]) ! ! (define_insn "*rotlsi3_1_zext" ! [(set (match_operand:DI 0 "register_operand" "=r,r") ! (zero_extend:DI ! (rotate:SI (match_operand:SI 1 "register_operand" "0,0") ! (match_operand:QI 2 "nonmemory_operand" "I,c")))) ! (clobber (reg:CC 17))] ! "TARGET_64BIT && ix86_binary_operator_ok (ROTATE, SImode, operands)" ! "@ ! rol{l}\t{%2, %k0|%k0, %2} ! rol{l}\t{%b2, %k0|%k0, %b2}" [(set_attr "type" "ishift") (set_attr "mode" "SI")]) *************** *** 8722,8731 **** (clobber (reg:CC 17))] "ix86_binary_operator_ok (ROTATE, HImode, operands) && (TARGET_PENTIUM || TARGET_PENTIUMPRO)" ! "rol{w}\\t%0" [(set_attr "type" "ishift") (set (attr "length") ! (if_then_else (match_operand:SI 0 "register_operand" "") (const_string "2") (const_string "*")))]) --- 12298,12307 ---- (clobber (reg:CC 17))] "ix86_binary_operator_ok (ROTATE, HImode, operands) && (TARGET_PENTIUM || TARGET_PENTIUMPRO)" ! "rol{w}\t%0" [(set_attr "type" "ishift") (set (attr "length") ! (if_then_else (match_operand 0 "register_operand" "") (const_string "2") (const_string "*")))]) *************** *** 8736,8743 **** (clobber (reg:CC 17))] "ix86_binary_operator_ok (ROTATE, HImode, operands)" "@ ! rol{w}\\t{%2, %0|%0, %2} ! rol{w}\\t{%b2, %0|%0, %b2}" [(set_attr "type" "ishift") (set_attr "mode" "HI")]) --- 12312,12319 ---- (clobber (reg:CC 17))] "ix86_binary_operator_ok (ROTATE, HImode, operands)" "@ ! rol{w}\t{%2, %0|%0, %2} ! rol{w}\t{%b2, %0|%0, %b2}" [(set_attr "type" "ishift") (set_attr "mode" "HI")]) *************** *** 8756,8765 **** (clobber (reg:CC 17))] "ix86_binary_operator_ok (ROTATE, QImode, operands) && (TARGET_PENTIUM || TARGET_PENTIUMPRO)" ! "rol{b}\\t%0" [(set_attr "type" "ishift") (set (attr "length") ! (if_then_else (match_operand:SI 0 "register_operand" "") (const_string "2") (const_string "*")))]) --- 12332,12341 ---- (clobber (reg:CC 17))] "ix86_binary_operator_ok (ROTATE, QImode, operands) && (TARGET_PENTIUM || TARGET_PENTIUMPRO)" ! "rol{b}\t%0" [(set_attr "type" "ishift") (set (attr "length") ! (if_then_else (match_operand 0 "register_operand" "") (const_string "2") (const_string "*")))]) *************** *** 8770,8780 **** (clobber (reg:CC 17))] "ix86_binary_operator_ok (ROTATE, QImode, operands)" "@ ! rol{b}\\t{%2, %0|%0, %2} ! rol{b}\\t{%b2, %0|%0, %b2}" [(set_attr "type" "ishift") (set_attr "mode" "QI")]) (define_expand "rotrsi3" [(set (match_operand:SI 0 "nonimmediate_operand" "") (rotatert:SI (match_operand:SI 1 "nonimmediate_operand" "") --- 12346,12390 ---- (clobber (reg:CC 17))] "ix86_binary_operator_ok (ROTATE, QImode, operands)" "@ ! rol{b}\t{%2, %0|%0, %2} ! rol{b}\t{%b2, %0|%0, %b2}" [(set_attr "type" "ishift") (set_attr "mode" "QI")]) + (define_expand "rotrdi3" + [(set (match_operand:DI 0 "nonimmediate_operand" "") + (rotatert:DI (match_operand:DI 1 "nonimmediate_operand" "") + (match_operand:QI 2 "nonmemory_operand" ""))) + (clobber (reg:CC 17))] + "TARGET_64BIT" + "ix86_expand_binary_operator (ROTATERT, DImode, operands); DONE;") + + (define_insn "*rotrdi3_1_one_bit_rex64" + [(set (match_operand:DI 0 "nonimmediate_operand" "=rm") + (rotatert:DI (match_operand:DI 1 "nonimmediate_operand" "0") + (match_operand:QI 2 "const_int_1_operand" ""))) + (clobber (reg:CC 17))] + "TARGET_64BIT && ix86_binary_operator_ok (ROTATERT, DImode, operands) + && (TARGET_PENTIUM || TARGET_PENTIUMPRO)" + "ror{q}\t%0" + [(set_attr "type" "ishift") + (set (attr "length") + (if_then_else (match_operand:DI 0 "register_operand" "") + (const_string "2") + (const_string "*")))]) + + (define_insn "*rotrdi3_1_rex64" + [(set (match_operand:DI 0 "nonimmediate_operand" "=rm,rm") + (rotatert:DI (match_operand:DI 1 "nonimmediate_operand" "0,0") + (match_operand:QI 2 "nonmemory_operand" "J,c"))) + (clobber (reg:CC 17))] + "TARGET_64BIT && ix86_binary_operator_ok (ROTATERT, DImode, operands)" + "@ + ror{q}\t{%2, %0|%0, %2} + ror{q}\t{%b2, %0|%0, %b2}" + [(set_attr "type" "ishift") + (set_attr "mode" "DI")]) + (define_expand "rotrsi3" [(set (match_operand:SI 0 "nonimmediate_operand" "") (rotatert:SI (match_operand:SI 1 "nonimmediate_operand" "") *************** *** 8790,8796 **** (clobber (reg:CC 17))] "ix86_binary_operator_ok (ROTATERT, SImode, operands) && (TARGET_PENTIUM || TARGET_PENTIUMPRO)" ! "ror{l}\\t%0" [(set_attr "type" "ishift") (set (attr "length") (if_then_else (match_operand:SI 0 "register_operand" "") --- 12400,12421 ---- (clobber (reg:CC 17))] "ix86_binary_operator_ok (ROTATERT, SImode, operands) && (TARGET_PENTIUM || TARGET_PENTIUMPRO)" ! "ror{l}\t%0" ! [(set_attr "type" "ishift") ! (set (attr "length") ! (if_then_else (match_operand:SI 0 "register_operand" "") ! (const_string "2") ! (const_string "*")))]) ! ! (define_insn "*rotrsi3_1_one_bit_zext" ! [(set (match_operand:DI 0 "register_operand" "=r") ! (zero_extend:DI ! (rotatert:SI (match_operand:SI 1 "register_operand" "0") ! (match_operand:QI 2 "const_int_1_operand" "")))) ! (clobber (reg:CC 17))] ! "TARGET_64BIT && ix86_binary_operator_ok (ROTATERT, SImode, operands) ! && (TARGET_PENTIUM || TARGET_PENTIUMPRO)" ! "ror{l}\t%k0" [(set_attr "type" "ishift") (set (attr "length") (if_then_else (match_operand:SI 0 "register_operand" "") *************** *** 8804,8811 **** (clobber (reg:CC 17))] "ix86_binary_operator_ok (ROTATERT, SImode, operands)" "@ ! ror{l}\\t{%2, %0|%0, %2} ! ror{l}\\t{%b2, %0|%0, %b2}" [(set_attr "type" "ishift") (set_attr "mode" "SI")]) --- 12429,12449 ---- (clobber (reg:CC 17))] "ix86_binary_operator_ok (ROTATERT, SImode, operands)" "@ ! ror{l}\t{%2, %0|%0, %2} ! ror{l}\t{%b2, %0|%0, %b2}" ! [(set_attr "type" "ishift") ! (set_attr "mode" "SI")]) ! ! (define_insn "*rotrsi3_1_zext" ! [(set (match_operand:DI 0 "register_operand" "=r,r") ! (zero_extend:DI ! (rotatert:SI (match_operand:SI 1 "register_operand" "0,0") ! (match_operand:QI 2 "nonmemory_operand" "I,c")))) ! (clobber (reg:CC 17))] ! "TARGET_64BIT && ix86_binary_operator_ok (ROTATERT, SImode, operands)" ! "@ ! ror{l}\t{%2, %k0|%k0, %2} ! ror{l}\t{%b2, %k0|%k0, %b2}" [(set_attr "type" "ishift") (set_attr "mode" "SI")]) *************** *** 8824,8833 **** (clobber (reg:CC 17))] "ix86_binary_operator_ok (ROTATERT, HImode, operands) && (TARGET_PENTIUM || TARGET_PENTIUMPRO)" ! "ror{w}\\t%0" [(set_attr "type" "ishift") (set (attr "length") ! (if_then_else (match_operand:SI 0 "register_operand" "") (const_string "2") (const_string "*")))]) --- 12462,12471 ---- (clobber (reg:CC 17))] "ix86_binary_operator_ok (ROTATERT, HImode, operands) && (TARGET_PENTIUM || TARGET_PENTIUMPRO)" ! "ror{w}\t%0" [(set_attr "type" "ishift") (set (attr "length") ! (if_then_else (match_operand 0 "register_operand" "") (const_string "2") (const_string "*")))]) *************** *** 8838,8845 **** (clobber (reg:CC 17))] "ix86_binary_operator_ok (ROTATERT, HImode, operands)" "@ ! ror{w}\\t{%2, %0|%0, %2} ! ror{w}\\t{%b2, %0|%0, %b2}" [(set_attr "type" "ishift") (set_attr "mode" "HI")]) --- 12476,12483 ---- (clobber (reg:CC 17))] "ix86_binary_operator_ok (ROTATERT, HImode, operands)" "@ ! ror{w}\t{%2, %0|%0, %2} ! ror{w}\t{%b2, %0|%0, %b2}" [(set_attr "type" "ishift") (set_attr "mode" "HI")]) *************** *** 8858,8867 **** (clobber (reg:CC 17))] "ix86_binary_operator_ok (ROTATERT, QImode, operands) && (TARGET_PENTIUM || TARGET_PENTIUMPRO)" ! "ror{b}\\t%0" [(set_attr "type" "ishift") (set (attr "length") ! (if_then_else (match_operand:SI 0 "register_operand" "") (const_string "2") (const_string "*")))]) --- 12496,12505 ---- (clobber (reg:CC 17))] "ix86_binary_operator_ok (ROTATERT, QImode, operands) && (TARGET_PENTIUM || TARGET_PENTIUMPRO)" ! "ror{b}\t%0" [(set_attr "type" "ishift") (set (attr "length") ! (if_then_else (match_operand 0 "register_operand" "") (const_string "2") (const_string "*")))]) *************** *** 8872,8879 **** (clobber (reg:CC 17))] "ix86_binary_operator_ok (ROTATERT, QImode, operands)" "@ ! ror{b}\\t{%2, %0|%0, %2} ! ror{b}\\t{%b2, %0|%0, %b2}" [(set_attr "type" "ishift") (set_attr "mode" "QI")]) --- 12510,12517 ---- (clobber (reg:CC 17))] "ix86_binary_operator_ok (ROTATERT, QImode, operands)" "@ ! ror{b}\t{%2, %0|%0, %2} ! ror{b}\t{%b2, %0|%0, %b2}" [(set_attr "type" "ishift") (set_attr "mode" "QI")]) *************** *** 8885,8891 **** (match_operand:SI 2 "immediate_operand" "") (match_operand:SI 3 "immediate_operand" "")))] "" - " { /* Handle extractions from %ah et al. */ if (INTVAL (operands[2]) != 8 || INTVAL (operands[3]) != 8) --- 12523,12528 ---- *************** *** 8895,8901 **** matches the predicate, so check it again here. */ if (! register_operand (operands[1], VOIDmode)) FAIL; ! }") (define_expand "extzv" [(set (match_operand:SI 0 "register_operand" "") --- 12532,12538 ---- matches the predicate, so check it again here. */ if (! register_operand (operands[1], VOIDmode)) FAIL; ! }) (define_expand "extzv" [(set (match_operand:SI 0 "register_operand" "") *************** *** 8903,8909 **** (match_operand:SI 2 "immediate_operand" "") (match_operand:SI 3 "immediate_operand" "")))] "" - " { /* Handle extractions from %ah et al. */ if (INTVAL (operands[2]) != 8 || INTVAL (operands[3]) != 8) --- 12540,12545 ---- *************** *** 8913,8919 **** matches the predicate, so check it again here. */ if (! register_operand (operands[1], VOIDmode)) FAIL; ! }") (define_expand "insv" [(set (zero_extract:SI (match_operand 0 "ext_register_operand" "") --- 12549,12555 ---- matches the predicate, so check it again here. */ if (! register_operand (operands[1], VOIDmode)) FAIL; ! }) (define_expand "insv" [(set (zero_extract:SI (match_operand 0 "ext_register_operand" "") *************** *** 8921,8927 **** (match_operand:SI 2 "immediate_operand" "")) (match_operand:SI 3 "register_operand" ""))] "" - " { /* Handle extractions from %ah et al. */ if (INTVAL (operands[1]) != 8 || INTVAL (operands[2]) != 8) --- 12557,12562 ---- *************** *** 8931,8937 **** matches the predicate, so check it again here. */ if (! register_operand (operands[0], VOIDmode)) FAIL; ! }") ;; %%% bts, btr, btc, bt. --- 12566,12572 ---- matches the predicate, so check it again here. */ if (! register_operand (operands[0], VOIDmode)) FAIL; ! }) ;; %%% bts, btr, btc, bt. *************** *** 8945,9055 **** ;; way, which can later delete the movzx if only QImode is needed. (define_expand "seq" ! [(set (match_operand:SI 0 "register_operand" "") ! (eq:SI (reg:CC 17) (const_int 0)))] "" "if (ix86_expand_setcc (EQ, operands[0])) DONE; else FAIL;") (define_expand "sne" ! [(set (match_operand:SI 0 "register_operand" "") ! (ne:SI (reg:CC 17) (const_int 0)))] "" "if (ix86_expand_setcc (NE, operands[0])) DONE; else FAIL;") (define_expand "sgt" ! [(set (match_operand:SI 0 "register_operand" "") ! (gt:SI (reg:CC 17) (const_int 0)))] "" "if (ix86_expand_setcc (GT, operands[0])) DONE; else FAIL;") (define_expand "sgtu" ! [(set (match_operand:SI 0 "register_operand" "") ! (gtu:SI (reg:CC 17) (const_int 0)))] "" "if (ix86_expand_setcc (GTU, operands[0])) DONE; else FAIL;") (define_expand "slt" ! [(set (match_operand:SI 0 "register_operand" "") ! (lt:SI (reg:CC 17) (const_int 0)))] "" "if (ix86_expand_setcc (LT, operands[0])) DONE; else FAIL;") (define_expand "sltu" ! [(set (match_operand:SI 0 "register_operand" "") ! (ltu:SI (reg:CC 17) (const_int 0)))] "" "if (ix86_expand_setcc (LTU, operands[0])) DONE; else FAIL;") (define_expand "sge" ! [(set (match_operand:SI 0 "register_operand" "") ! (ge:SI (reg:CC 17) (const_int 0)))] "" "if (ix86_expand_setcc (GE, operands[0])) DONE; else FAIL;") (define_expand "sgeu" ! [(set (match_operand:SI 0 "register_operand" "") ! (geu:SI (reg:CC 17) (const_int 0)))] "" "if (ix86_expand_setcc (GEU, operands[0])) DONE; else FAIL;") (define_expand "sle" ! [(set (match_operand:SI 0 "register_operand" "") ! (le:SI (reg:CC 17) (const_int 0)))] "" "if (ix86_expand_setcc (LE, operands[0])) DONE; else FAIL;") (define_expand "sleu" ! [(set (match_operand:SI 0 "register_operand" "") ! (leu:SI (reg:CC 17) (const_int 0)))] "" "if (ix86_expand_setcc (LEU, operands[0])) DONE; else FAIL;") (define_expand "sunordered" ! [(set (match_operand:SI 0 "register_operand" "") ! (unordered:SI (reg:CC 17) (const_int 0)))] ! "TARGET_80387" "if (ix86_expand_setcc (UNORDERED, operands[0])) DONE; else FAIL;") (define_expand "sordered" ! [(set (match_operand:SI 0 "register_operand" "") ! (ordered:SI (reg:CC 17) (const_int 0)))] "TARGET_80387" "if (ix86_expand_setcc (ORDERED, operands[0])) DONE; else FAIL;") (define_expand "suneq" ! [(set (match_operand:SI 0 "register_operand" "") ! (uneq:SI (reg:CC 17) (const_int 0)))] ! "TARGET_80387" "if (ix86_expand_setcc (UNEQ, operands[0])) DONE; else FAIL;") (define_expand "sunge" ! [(set (match_operand:SI 0 "register_operand" "") ! (unge:SI (reg:CC 17) (const_int 0)))] ! "TARGET_80387" "if (ix86_expand_setcc (UNGE, operands[0])) DONE; else FAIL;") (define_expand "sungt" ! [(set (match_operand:SI 0 "register_operand" "") ! (ungt:SI (reg:CC 17) (const_int 0)))] ! "TARGET_80387" "if (ix86_expand_setcc (UNGT, operands[0])) DONE; else FAIL;") (define_expand "sunle" ! [(set (match_operand:SI 0 "register_operand" "") ! (unle:SI (reg:CC 17) (const_int 0)))] ! "TARGET_80387" "if (ix86_expand_setcc (UNLE, operands[0])) DONE; else FAIL;") (define_expand "sunlt" ! [(set (match_operand:SI 0 "register_operand" "") ! (unlt:SI (reg:CC 17) (const_int 0)))] ! "TARGET_80387" "if (ix86_expand_setcc (UNLT, operands[0])) DONE; else FAIL;") (define_expand "sltgt" ! [(set (match_operand:SI 0 "register_operand" "") ! (ltgt:SI (reg:CC 17) (const_int 0)))] ! "TARGET_80387" "if (ix86_expand_setcc (LTGT, operands[0])) DONE; else FAIL;") (define_insn "*setcc_1" --- 12580,12690 ---- ;; way, which can later delete the movzx if only QImode is needed. (define_expand "seq" ! [(set (match_operand:QI 0 "register_operand" "") ! (eq:QI (reg:CC 17) (const_int 0)))] "" "if (ix86_expand_setcc (EQ, operands[0])) DONE; else FAIL;") (define_expand "sne" ! [(set (match_operand:QI 0 "register_operand" "") ! (ne:QI (reg:CC 17) (const_int 0)))] "" "if (ix86_expand_setcc (NE, operands[0])) DONE; else FAIL;") (define_expand "sgt" ! [(set (match_operand:QI 0 "register_operand" "") ! (gt:QI (reg:CC 17) (const_int 0)))] "" "if (ix86_expand_setcc (GT, operands[0])) DONE; else FAIL;") (define_expand "sgtu" ! [(set (match_operand:QI 0 "register_operand" "") ! (gtu:QI (reg:CC 17) (const_int 0)))] "" "if (ix86_expand_setcc (GTU, operands[0])) DONE; else FAIL;") (define_expand "slt" ! [(set (match_operand:QI 0 "register_operand" "") ! (lt:QI (reg:CC 17) (const_int 0)))] "" "if (ix86_expand_setcc (LT, operands[0])) DONE; else FAIL;") (define_expand "sltu" ! [(set (match_operand:QI 0 "register_operand" "") ! (ltu:QI (reg:CC 17) (const_int 0)))] "" "if (ix86_expand_setcc (LTU, operands[0])) DONE; else FAIL;") (define_expand "sge" ! [(set (match_operand:QI 0 "register_operand" "") ! (ge:QI (reg:CC 17) (const_int 0)))] "" "if (ix86_expand_setcc (GE, operands[0])) DONE; else FAIL;") (define_expand "sgeu" ! [(set (match_operand:QI 0 "register_operand" "") ! (geu:QI (reg:CC 17) (const_int 0)))] "" "if (ix86_expand_setcc (GEU, operands[0])) DONE; else FAIL;") (define_expand "sle" ! [(set (match_operand:QI 0 "register_operand" "") ! (le:QI (reg:CC 17) (const_int 0)))] "" "if (ix86_expand_setcc (LE, operands[0])) DONE; else FAIL;") (define_expand "sleu" ! [(set (match_operand:QI 0 "register_operand" "") ! (leu:QI (reg:CC 17) (const_int 0)))] "" "if (ix86_expand_setcc (LEU, operands[0])) DONE; else FAIL;") (define_expand "sunordered" ! [(set (match_operand:QI 0 "register_operand" "") ! (unordered:QI (reg:CC 17) (const_int 0)))] ! "TARGET_80387 || TARGET_SSE" "if (ix86_expand_setcc (UNORDERED, operands[0])) DONE; else FAIL;") (define_expand "sordered" ! [(set (match_operand:QI 0 "register_operand" "") ! (ordered:QI (reg:CC 17) (const_int 0)))] "TARGET_80387" "if (ix86_expand_setcc (ORDERED, operands[0])) DONE; else FAIL;") (define_expand "suneq" ! [(set (match_operand:QI 0 "register_operand" "") ! (uneq:QI (reg:CC 17) (const_int 0)))] ! "TARGET_80387 || TARGET_SSE" "if (ix86_expand_setcc (UNEQ, operands[0])) DONE; else FAIL;") (define_expand "sunge" ! [(set (match_operand:QI 0 "register_operand" "") ! (unge:QI (reg:CC 17) (const_int 0)))] ! "TARGET_80387 || TARGET_SSE" "if (ix86_expand_setcc (UNGE, operands[0])) DONE; else FAIL;") (define_expand "sungt" ! [(set (match_operand:QI 0 "register_operand" "") ! (ungt:QI (reg:CC 17) (const_int 0)))] ! "TARGET_80387 || TARGET_SSE" "if (ix86_expand_setcc (UNGT, operands[0])) DONE; else FAIL;") (define_expand "sunle" ! [(set (match_operand:QI 0 "register_operand" "") ! (unle:QI (reg:CC 17) (const_int 0)))] ! "TARGET_80387 || TARGET_SSE" "if (ix86_expand_setcc (UNLE, operands[0])) DONE; else FAIL;") (define_expand "sunlt" ! [(set (match_operand:QI 0 "register_operand" "") ! (unlt:QI (reg:CC 17) (const_int 0)))] ! "TARGET_80387 || TARGET_SSE" "if (ix86_expand_setcc (UNLT, operands[0])) DONE; else FAIL;") (define_expand "sltgt" ! [(set (match_operand:QI 0 "register_operand" "") ! (ltgt:QI (reg:CC 17) (const_int 0)))] ! "TARGET_80387 || TARGET_SSE" "if (ix86_expand_setcc (LTGT, operands[0])) DONE; else FAIL;") (define_insn "*setcc_1" *************** *** 9057,9063 **** (match_operator:QI 1 "ix86_comparison_operator" [(reg 17) (const_int 0)]))] "" ! "set%C1\\t%0" [(set_attr "type" "setcc") (set_attr "mode" "QI")]) --- 12692,12698 ---- (match_operator:QI 1 "ix86_comparison_operator" [(reg 17) (const_int 0)]))] "" ! "set%C1\t%0" [(set_attr "type" "setcc") (set_attr "mode" "QI")]) *************** *** 9066,9075 **** (match_operator:QI 1 "ix86_comparison_operator" [(reg 17) (const_int 0)]))] "" ! "set%C1\\t%0" [(set_attr "type" "setcc") (set_attr "mode" "QI")]) ;; Basic conditional jump instructions. ;; We ignore the overflow flag for signed branch instructions. --- 12701,12807 ---- (match_operator:QI 1 "ix86_comparison_operator" [(reg 17) (const_int 0)]))] "" ! "set%C1\t%0" [(set_attr "type" "setcc") (set_attr "mode" "QI")]) + ;; In general it is not safe to assume too much about CCmode registers, + ;; so simplify-rtx stops when it sees a second one. Under certain + ;; conditions this is safe on x86, so help combine not create + ;; + ;; seta %al + ;; testb %al, %al + ;; sete %al + + (define_split + [(set (match_operand:QI 0 "nonimmediate_operand" "") + (ne:QI (match_operator 1 "ix86_comparison_operator" + [(reg 17) (const_int 0)]) + (const_int 0)))] + "" + [(set (match_dup 0) (match_dup 1))] + { + PUT_MODE (operands[1], QImode); + }) + + (define_split + [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "")) + (ne:QI (match_operator 1 "ix86_comparison_operator" + [(reg 17) (const_int 0)]) + (const_int 0)))] + "" + [(set (match_dup 0) (match_dup 1))] + { + PUT_MODE (operands[1], QImode); + }) + + (define_split + [(set (match_operand:QI 0 "nonimmediate_operand" "") + (eq:QI (match_operator 1 "ix86_comparison_operator" + [(reg 17) (const_int 0)]) + (const_int 0)))] + "" + [(set (match_dup 0) (match_dup 1))] + { + rtx new_op1 = copy_rtx (operands[1]); + operands[1] = new_op1; + PUT_MODE (new_op1, QImode); + PUT_CODE (new_op1, REVERSE_CONDITION (GET_CODE (new_op1), + GET_MODE (XEXP (new_op1, 0)))); + + /* Make sure that (a) the CCmode we have for the flags is strong + enough for the reversed compare or (b) we have a valid FP compare. */ + if (! ix86_comparison_operator (new_op1, VOIDmode)) + FAIL; + }) + + (define_split + [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "")) + (eq:QI (match_operator 1 "ix86_comparison_operator" + [(reg 17) (const_int 0)]) + (const_int 0)))] + "" + [(set (match_dup 0) (match_dup 1))] + { + rtx new_op1 = copy_rtx (operands[1]); + operands[1] = new_op1; + PUT_MODE (new_op1, QImode); + PUT_CODE (new_op1, REVERSE_CONDITION (GET_CODE (new_op1), + GET_MODE (XEXP (new_op1, 0)))); + + /* Make sure that (a) the CCmode we have for the flags is strong + enough for the reversed compare or (b) we have a valid FP compare. */ + if (! ix86_comparison_operator (new_op1, VOIDmode)) + FAIL; + }) + + ;; The SSE store flag instructions saves 0 or 0xffffffff to the result. + ;; subsequent logical operations are used to imitate conditional moves. + ;; 0xffffffff is NaN, but not in normalized form, so we can't represent + ;; it directly. Futher holding this value in pseudo register might bring + ;; problem in implicit normalization in spill code. + ;; So we don't define FLOAT_STORE_FLAG_VALUE and create these + ;; instructions after reload by splitting the conditional move patterns. + + (define_insn "*sse_setccsf" + [(set (match_operand:SF 0 "register_operand" "=x") + (match_operator:SF 1 "sse_comparison_operator" + [(match_operand:SF 2 "register_operand" "0") + (match_operand:SF 3 "nonimmediate_operand" "xm")]))] + "TARGET_SSE && reload_completed" + "cmp%D1ss\t{%3, %0|%0, %3}" + [(set_attr "type" "sse") + (set_attr "mode" "SF")]) + + (define_insn "*sse_setccdf" + [(set (match_operand:DF 0 "register_operand" "=Y") + (match_operator:DF 1 "sse_comparison_operator" + [(match_operand:DF 2 "register_operand" "0") + (match_operand:DF 3 "nonimmediate_operand" "Ym")]))] + "TARGET_SSE2 && reload_completed" + "cmp%D1sd\t{%3, %0|%0, %3}" + [(set_attr "type" "sse") + (set_attr "mode" "DF")]) ;; Basic conditional jump instructions. ;; We ignore the overflow flag for signed branch instructions. *************** *** 9162,9168 **** (if_then_else (match_dup 1) (label_ref (match_operand 0 "" "")) (pc)))] ! "TARGET_80387" "ix86_expand_branch (UNORDERED, operands[0]); DONE;") (define_expand "bordered" --- 12894,12900 ---- (if_then_else (match_dup 1) (label_ref (match_operand 0 "" "")) (pc)))] ! "TARGET_80387 || TARGET_SSE" "ix86_expand_branch (UNORDERED, operands[0]); DONE;") (define_expand "bordered" *************** *** 9170,9176 **** (if_then_else (match_dup 1) (label_ref (match_operand 0 "" "")) (pc)))] ! "TARGET_80387" "ix86_expand_branch (ORDERED, operands[0]); DONE;") (define_expand "buneq" --- 12902,12908 ---- (if_then_else (match_dup 1) (label_ref (match_operand 0 "" "")) (pc)))] ! "TARGET_80387 || TARGET_SSE" "ix86_expand_branch (ORDERED, operands[0]); DONE;") (define_expand "buneq" *************** *** 9178,9184 **** (if_then_else (match_dup 1) (label_ref (match_operand 0 "" "")) (pc)))] ! "TARGET_80387" "ix86_expand_branch (UNEQ, operands[0]); DONE;") (define_expand "bunge" --- 12910,12916 ---- (if_then_else (match_dup 1) (label_ref (match_operand 0 "" "")) (pc)))] ! "TARGET_80387 || TARGET_SSE" "ix86_expand_branch (UNEQ, operands[0]); DONE;") (define_expand "bunge" *************** *** 9186,9192 **** (if_then_else (match_dup 1) (label_ref (match_operand 0 "" "")) (pc)))] ! "TARGET_80387" "ix86_expand_branch (UNGE, operands[0]); DONE;") (define_expand "bungt" --- 12918,12924 ---- (if_then_else (match_dup 1) (label_ref (match_operand 0 "" "")) (pc)))] ! "TARGET_80387 || TARGET_SSE" "ix86_expand_branch (UNGE, operands[0]); DONE;") (define_expand "bungt" *************** *** 9194,9200 **** (if_then_else (match_dup 1) (label_ref (match_operand 0 "" "")) (pc)))] ! "TARGET_80387" "ix86_expand_branch (UNGT, operands[0]); DONE;") (define_expand "bunle" --- 12926,12932 ---- (if_then_else (match_dup 1) (label_ref (match_operand 0 "" "")) (pc)))] ! "TARGET_80387 || TARGET_SSE" "ix86_expand_branch (UNGT, operands[0]); DONE;") (define_expand "bunle" *************** *** 9202,9208 **** (if_then_else (match_dup 1) (label_ref (match_operand 0 "" "")) (pc)))] ! "TARGET_80387" "ix86_expand_branch (UNLE, operands[0]); DONE;") (define_expand "bunlt" --- 12934,12940 ---- (if_then_else (match_dup 1) (label_ref (match_operand 0 "" "")) (pc)))] ! "TARGET_80387 || TARGET_SSE" "ix86_expand_branch (UNLE, operands[0]); DONE;") (define_expand "bunlt" *************** *** 9210,9216 **** (if_then_else (match_dup 1) (label_ref (match_operand 0 "" "")) (pc)))] ! "TARGET_80387" "ix86_expand_branch (UNLT, operands[0]); DONE;") (define_expand "bltgt" --- 12942,12948 ---- (if_then_else (match_dup 1) (label_ref (match_operand 0 "" "")) (pc)))] ! "TARGET_80387 || TARGET_SSE" "ix86_expand_branch (UNLT, operands[0]); DONE;") (define_expand "bltgt" *************** *** 9218,9224 **** (if_then_else (match_dup 1) (label_ref (match_operand 0 "" "")) (pc)))] ! "TARGET_80387" "ix86_expand_branch (LTGT, operands[0]); DONE;") (define_insn "*jcc_1" --- 12950,12956 ---- (if_then_else (match_dup 1) (label_ref (match_operand 0 "" "")) (pc)))] ! "TARGET_80387 || TARGET_SSE" "ix86_expand_branch (LTGT, operands[0]); DONE;") (define_insn "*jcc_1" *************** *** 9228,9234 **** (label_ref (match_operand 0 "" "")) (pc)))] "" ! "j%C1\\t%l0" [(set_attr "type" "ibr") (set (attr "prefix_0f") (if_then_else (and (ge (minus (match_dup 0) (pc)) --- 12960,12966 ---- (label_ref (match_operand 0 "" "")) (pc)))] "" ! "%+j%C1\t%l0" [(set_attr "type" "ibr") (set (attr "prefix_0f") (if_then_else (and (ge (minus (match_dup 0) (pc)) *************** *** 9245,9251 **** (pc) (label_ref (match_operand 0 "" ""))))] "" ! "j%c1\\t%l0" [(set_attr "type" "ibr") (set (attr "prefix_0f") (if_then_else (and (ge (minus (match_dup 0) (pc)) --- 12977,12983 ---- (pc) (label_ref (match_operand 0 "" ""))))] "" ! "%+j%c1\t%l0" [(set_attr "type" "ibr") (set (attr "prefix_0f") (if_then_else (and (ge (minus (match_dup 0) (pc)) *************** *** 9255,9260 **** --- 12987,13041 ---- (const_int 0) (const_int 1)))]) + ;; In general it is not safe to assume too much about CCmode registers, + ;; so simplify-rtx stops when it sees a second one. Under certain + ;; conditions this is safe on x86, so help combine not create + ;; + ;; seta %al + ;; testb %al, %al + ;; je Lfoo + + (define_split + [(set (pc) + (if_then_else (ne (match_operator 0 "ix86_comparison_operator" + [(reg 17) (const_int 0)]) + (const_int 0)) + (label_ref (match_operand 1 "" "")) + (pc)))] + "" + [(set (pc) + (if_then_else (match_dup 0) + (label_ref (match_dup 1)) + (pc)))] + { + PUT_MODE (operands[0], VOIDmode); + }) + + (define_split + [(set (pc) + (if_then_else (eq (match_operator 0 "ix86_comparison_operator" + [(reg 17) (const_int 0)]) + (const_int 0)) + (label_ref (match_operand 1 "" "")) + (pc)))] + "" + [(set (pc) + (if_then_else (match_dup 0) + (label_ref (match_dup 1)) + (pc)))] + { + rtx new_op0 = copy_rtx (operands[0]); + operands[0] = new_op0; + PUT_MODE (new_op0, VOIDmode); + PUT_CODE (new_op0, REVERSE_CONDITION (GET_CODE (new_op0), + GET_MODE (XEXP (new_op0, 0)))); + + /* Make sure that (a) the CCmode we have for the flags is strong + enough for the reversed compare or (b) we have a valid FP compare. */ + if (! ix86_comparison_operator (new_op0, VOIDmode)) + FAIL; + }) + ;; Define combination compare-and-branch fp compare instructions to use ;; during early optimization. Splitting the operation apart early makes ;; for bad code when we want to reverse the operation. *************** *** 9269,9276 **** (clobber (reg:CCFP 18)) (clobber (reg:CCFP 17))] "TARGET_CMOVE && TARGET_80387 && FLOAT_MODE_P (GET_MODE (operands[1])) ! && GET_MODE (operands[1]) == GET_MODE (operands[2])" "#") (define_insn "*fp_jcc_2" --- 13050,13088 ---- (clobber (reg:CCFP 18)) (clobber (reg:CCFP 17))] "TARGET_CMOVE && TARGET_80387 + && !SSE_FLOAT_MODE_P (GET_MODE (operands[1])) && FLOAT_MODE_P (GET_MODE (operands[1])) ! && GET_MODE (operands[1]) == GET_MODE (operands[2]) ! && ix86_fp_jump_nontrivial_p (GET_CODE (operands[0]))" ! "#") ! ! (define_insn "*fp_jcc_1_sse" ! [(set (pc) ! (if_then_else (match_operator 0 "comparison_operator" ! [(match_operand 1 "register_operand" "f#x,x#f") ! (match_operand 2 "nonimmediate_operand" "f#x,xm#f")]) ! (label_ref (match_operand 3 "" "")) ! (pc))) ! (clobber (reg:CCFP 18)) ! (clobber (reg:CCFP 17))] ! "TARGET_80387 ! && SSE_FLOAT_MODE_P (GET_MODE (operands[1])) ! && GET_MODE (operands[1]) == GET_MODE (operands[2]) ! && ix86_fp_jump_nontrivial_p (GET_CODE (operands[0]))" ! "#") ! ! (define_insn "*fp_jcc_1_sse_only" ! [(set (pc) ! (if_then_else (match_operator 0 "comparison_operator" ! [(match_operand 1 "register_operand" "x") ! (match_operand 2 "nonimmediate_operand" "xm")]) ! (label_ref (match_operand 3 "" "")) ! (pc))) ! (clobber (reg:CCFP 18)) ! (clobber (reg:CCFP 17))] ! "SSE_FLOAT_MODE_P (GET_MODE (operands[1])) ! && GET_MODE (operands[1]) == GET_MODE (operands[2]) ! && ix86_fp_jump_nontrivial_p (GET_CODE (operands[0]))" "#") (define_insn "*fp_jcc_2" *************** *** 9283,9290 **** (clobber (reg:CCFP 18)) (clobber (reg:CCFP 17))] "TARGET_CMOVE && TARGET_80387 && FLOAT_MODE_P (GET_MODE (operands[1])) ! && GET_MODE (operands[1]) == GET_MODE (operands[2])" "#") (define_insn "*fp_jcc_3" --- 13095,13133 ---- (clobber (reg:CCFP 18)) (clobber (reg:CCFP 17))] "TARGET_CMOVE && TARGET_80387 + && !SSE_FLOAT_MODE_P (GET_MODE (operands[1])) && FLOAT_MODE_P (GET_MODE (operands[1])) ! && GET_MODE (operands[1]) == GET_MODE (operands[2]) ! && ix86_fp_jump_nontrivial_p (GET_CODE (operands[0]))" ! "#") ! ! (define_insn "*fp_jcc_2_sse" ! [(set (pc) ! (if_then_else (match_operator 0 "comparison_operator" ! [(match_operand 1 "register_operand" "f#x,x#f") ! (match_operand 2 "nonimmediate_operand" "f#x,xm#f")]) ! (pc) ! (label_ref (match_operand 3 "" "")))) ! (clobber (reg:CCFP 18)) ! (clobber (reg:CCFP 17))] ! "TARGET_80387 ! && SSE_FLOAT_MODE_P (GET_MODE (operands[1])) ! && GET_MODE (operands[1]) == GET_MODE (operands[2]) ! && ix86_fp_jump_nontrivial_p (GET_CODE (operands[0]))" ! "#") ! ! (define_insn "*fp_jcc_2_sse_only" ! [(set (pc) ! (if_then_else (match_operator 0 "comparison_operator" ! [(match_operand 1 "register_operand" "x") ! (match_operand 2 "nonimmediate_operand" "xm")]) ! (pc) ! (label_ref (match_operand 3 "" "")))) ! (clobber (reg:CCFP 18)) ! (clobber (reg:CCFP 17))] ! "SSE_FLOAT_MODE_P (GET_MODE (operands[1])) ! && GET_MODE (operands[1]) == GET_MODE (operands[2]) ! && ix86_fp_jump_nontrivial_p (GET_CODE (operands[0]))" "#") (define_insn "*fp_jcc_3" *************** *** 9302,9308 **** && GET_MODE (operands[1]) == GET_MODE (operands[2]) && !ix86_use_fcomi_compare (GET_CODE (operands[0])) && SELECT_CC_MODE (GET_CODE (operands[0]), ! operands[1], operands[2]) == CCFPmode" "#") (define_insn "*fp_jcc_4" --- 13145,13152 ---- && GET_MODE (operands[1]) == GET_MODE (operands[2]) && !ix86_use_fcomi_compare (GET_CODE (operands[0])) && SELECT_CC_MODE (GET_CODE (operands[0]), ! operands[1], operands[2]) == CCFPmode ! && ix86_fp_jump_nontrivial_p (GET_CODE (operands[0]))" "#") (define_insn "*fp_jcc_4" *************** *** 9320,9326 **** && GET_MODE (operands[1]) == GET_MODE (operands[2]) && !ix86_use_fcomi_compare (GET_CODE (operands[0])) && SELECT_CC_MODE (GET_CODE (operands[0]), ! operands[1], operands[2]) == CCFPmode" "#") (define_insn "*fp_jcc_5" --- 13164,13171 ---- && GET_MODE (operands[1]) == GET_MODE (operands[2]) && !ix86_use_fcomi_compare (GET_CODE (operands[0])) && SELECT_CC_MODE (GET_CODE (operands[0]), ! operands[1], operands[2]) == CCFPmode ! && ix86_fp_jump_nontrivial_p (GET_CODE (operands[0]))" "#") (define_insn "*fp_jcc_5" *************** *** 9335,9341 **** (clobber (match_scratch:HI 4 "=a"))] "TARGET_80387 && FLOAT_MODE_P (GET_MODE (operands[1])) ! && GET_MODE (operands[1]) == GET_MODE (operands[2])" "#") (define_insn "*fp_jcc_6" --- 13180,13187 ---- (clobber (match_scratch:HI 4 "=a"))] "TARGET_80387 && FLOAT_MODE_P (GET_MODE (operands[1])) ! && GET_MODE (operands[1]) == GET_MODE (operands[2]) ! && ix86_fp_jump_nontrivial_p (GET_CODE (operands[0]))" "#") (define_insn "*fp_jcc_6" *************** *** 9350,9356 **** (clobber (match_scratch:HI 4 "=a"))] "TARGET_80387 && FLOAT_MODE_P (GET_MODE (operands[1])) ! && GET_MODE (operands[1]) == GET_MODE (operands[2])" "#") (define_split --- 13196,13203 ---- (clobber (match_scratch:HI 4 "=a"))] "TARGET_80387 && FLOAT_MODE_P (GET_MODE (operands[1])) ! && GET_MODE (operands[1]) == GET_MODE (operands[2]) ! && ix86_fp_jump_nontrivial_p (GET_CODE (operands[0]))" "#") (define_split *************** *** 9364,9375 **** (clobber (reg:CCFP 17))] "reload_completed" [(const_int 0)] - " { ! ix86_split_fp_branch (operands[0], operands[1], operands[2], operands[3], operands[4], NULL_RTX); DONE; ! }") (define_split [(set (pc) --- 13211,13221 ---- (clobber (reg:CCFP 17))] "reload_completed" [(const_int 0)] { ! ix86_split_fp_branch (GET_CODE (operands[0]), operands[1], operands[2], operands[3], operands[4], NULL_RTX); DONE; ! }) (define_split [(set (pc) *************** *** 9386,9397 **** (if_then_else (match_dup 6) (match_dup 3) (match_dup 4)))] - " { ! ix86_split_fp_branch (operands[0], operands[1], operands[2], operands[3], operands[4], operands[5]); DONE; ! }") ;; Unconditional and other jump instructions --- 13232,13242 ---- (if_then_else (match_dup 6) (match_dup 3) (match_dup 4)))] { ! ix86_split_fp_branch (GET_CODE (operands[0]), operands[1], operands[2], operands[3], operands[4], operands[5]); DONE; ! }) ;; Unconditional and other jump instructions *************** *** 9399,9493 **** [(set (pc) (label_ref (match_operand 0 "" "")))] "" ! "jmp\\t%l0" [(set_attr "type" "ibr")]) ! (define_insn "indirect_jump" ! [(set (pc) (match_operand:SI 0 "nonimmediate_operand" "rm"))] "" ! "jmp\\t%A0" [(set_attr "type" "ibr") (set_attr "length_immediate" "0")]) ! (define_insn "tablejump" ! [(set (pc) (match_operand:SI 0 "nonimmediate_operand" "rm")) ! (use (label_ref (match_operand 1 "" "")))] ! "! flag_pic" ! "jmp\\t%A0" [(set_attr "type" "ibr") (set_attr "length_immediate" "0")]) ! ;; Implement switch statements when generating PIC code. Switches are ! ;; implemented by `tablejump' when not using -fpic. ! ;; ! ;; Emit code here to do the range checking and make the index zero based. ! ;; ! ;; Each entry in the "addr_diff_vec" looks like this as the result of the ! ;; two rules below: ! ;; ! ;; .long _GLOBAL_OFFSET_TABLE_+[.-.L2] ! ;; ! ;; 1. An expression involving an external reference may only use the ! ;; addition operator, and only with an assembly-time constant. ! ;; The example above satisfies this because ".-.L2" is a constant. ! ;; ! ;; 2. The symbol _GLOBAL_OFFSET_TABLE_ is magic, and at link time is ! ;; given the value of "GOT - .", where GOT is the actual address of ! ;; the Global Offset Table. Therefore, the .long above actually ! ;; stores the value "( GOT - . ) + [ . - .L2 ]", or "GOT - .L2". The ! ;; expression "GOT - .L2" by itself would generate an error from as(1). ! ;; ! ;; The pattern below emits code that looks like this: ! ;; ! ;; movl %ebx,reg ! ;; subl TABLE@GOTOFF(%ebx,index,4),reg ! ;; jmp reg ! ;; ! ;; The addr_diff_vec contents may be directly referenced with @GOTOFF, since ! ;; the addr_diff_vec is known to be part of this module. ! ;; ! ;; The subl above calculates "GOT - (( GOT - . ) + [ . - .L2 ])", which ! ;; evaluates to just ".L2". ! ! (define_expand "casesi" ! [(set (match_dup 5) ! (match_operand:SI 0 "general_operand" "")) ! (parallel [(set (match_dup 6) ! (minus:SI (match_dup 5) ! (match_operand:SI 1 "general_operand" ""))) ! (clobber (reg:CC 17))]) ! (set (reg:CC 17) ! (compare:CC (match_dup 6) ! (match_operand:SI 2 "general_operand" ""))) ! (set (pc) ! (if_then_else (gtu (reg:CC 17) ! (const_int 0)) ! (label_ref (match_operand 4 "" "")) ! (pc))) ! (parallel ! [(set (match_dup 7) ! (minus:SI (match_dup 8) ! (mem:SI (plus:SI (plus:SI (mult:SI (match_dup 6) (const_int 4)) ! (match_dup 8)) ! (const (unspec [(label_ref (match_operand 3 "" ""))] 7)))))) ! (clobber (reg:CC 17))]) ! (parallel [(set (pc) (match_dup 7)) ! (use (label_ref (match_dup 3)))])] ! "flag_pic" ! " { ! operands[5] = gen_reg_rtx (SImode); ! operands[6] = gen_reg_rtx (SImode); ! operands[7] = gen_reg_rtx (SImode); ! operands[8] = pic_offset_table_rtx; ! current_function_uses_pic_offset_table = 1; ! }") ! (define_insn "*tablejump_pic" [(set (pc) (match_operand:SI 0 "nonimmediate_operand" "rm")) (use (label_ref (match_operand 1 "" "")))] ! "" ! "jmp\\t%A0" [(set_attr "type" "ibr") (set_attr "length_immediate" "0")]) --- 13244,13315 ---- [(set (pc) (label_ref (match_operand 0 "" "")))] "" ! "jmp\t%l0" [(set_attr "type" "ibr")]) ! (define_expand "indirect_jump" ! [(set (pc) (match_operand 0 "nonimmediate_operand" "rm"))] "" ! "") ! ! (define_insn "*indirect_jump" ! [(set (pc) (match_operand:SI 0 "nonimmediate_operand" "rm"))] ! "!TARGET_64BIT" ! "jmp\t%A0" [(set_attr "type" "ibr") (set_attr "length_immediate" "0")]) ! (define_insn "*indirect_jump_rtx64" ! [(set (pc) (match_operand:DI 0 "nonimmediate_operand" "rm"))] ! "TARGET_64BIT" ! "jmp\t%A0" [(set_attr "type" "ibr") (set_attr "length_immediate" "0")]) ! (define_expand "tablejump" ! [(parallel [(set (pc) (match_operand 0 "nonimmediate_operand" "rm")) ! (use (label_ref (match_operand 1 "" "")))])] ! "" { ! /* In PIC mode, the table entries are stored GOT-relative. Convert ! the relative address to an absolute address. */ ! if (flag_pic) ! { ! if (TARGET_64BIT) ! operands[0] = expand_simple_binop (Pmode, PLUS, operands[0], ! gen_rtx_LABEL_REF (Pmode, operands[1]), ! NULL_RTX, 0, ! OPTAB_DIRECT); ! else if (HAVE_AS_GOTOFF_IN_DATA) ! { ! operands[0] = expand_simple_binop (Pmode, PLUS, operands[0], ! pic_offset_table_rtx, NULL_RTX, ! 1, OPTAB_DIRECT); ! current_function_uses_pic_offset_table = 1; ! } ! else ! { ! operands[0] = expand_simple_binop (Pmode, MINUS, pic_offset_table_rtx, ! operands[0], NULL_RTX, 1, ! OPTAB_DIRECT); ! current_function_uses_pic_offset_table = 1; ! } ! } ! }) ! (define_insn "*tablejump_1" [(set (pc) (match_operand:SI 0 "nonimmediate_operand" "rm")) (use (label_ref (match_operand 1 "" "")))] ! "!TARGET_64BIT" ! "jmp\t%A0" ! [(set_attr "type" "ibr") ! (set_attr "length_immediate" "0")]) ! ! (define_insn "*tablejump_1_rtx64" ! [(set (pc) (match_operand:DI 0 "nonimmediate_operand" "rm")) ! (use (label_ref (match_operand 1 "" "")))] ! "TARGET_64BIT" ! "jmp\t%A0" [(set_attr "type" "ibr") (set_attr "length_immediate" "0")]) *************** *** 9502,9508 **** (use (match_operand 2 "" "")) ; max iterations (use (match_operand 3 "" "")) ; loop level (use (match_operand 4 "" ""))] ; label ! "TARGET_USE_LOOP" " { /* Only use cloop on innermost loops. */ --- 13324,13330 ---- (use (match_operand 2 "" "")) ; max iterations (use (match_operand 3 "" "")) ; loop level (use (match_operand 4 "" ""))] ; label ! "!TARGET_64BIT && TARGET_USE_LOOP" " { /* Only use cloop on innermost loops. */ *************** *** 9526,9541 **** (const_int -1))) (clobber (match_scratch:SI 3 "=X,X,r")) (clobber (reg:CC 17))] ! "TARGET_USE_LOOP" ! "* { if (which_alternative != 0) ! return \"#\"; if (get_attr_length (insn) == 2) ! return \"loop\\t%l0\"; else ! return \"dec{l}\\t%1\;jne\\t%l0\"; ! }" [(set_attr "ppro_uops" "many") (set (attr "type") (if_then_else (and (eq_attr "alternative" "0") --- 13348,13362 ---- (const_int -1))) (clobber (match_scratch:SI 3 "=X,X,r")) (clobber (reg:CC 17))] ! "!TARGET_64BIT && TARGET_USE_LOOP" { if (which_alternative != 0) ! return "#"; if (get_attr_length (insn) == 2) ! return "%+loop\t%l0"; else ! return "dec{l}\t%1\;%+jne\t%l0"; ! } [(set_attr "ppro_uops" "many") (set (attr "type") (if_then_else (and (eq_attr "alternative" "0") *************** *** 9557,9563 **** (const_int -1))) (clobber (match_scratch:SI 2 "")) (clobber (reg:CC 17))] ! "TARGET_USE_LOOP && reload_completed && REGNO (operands[1]) != 2" [(parallel [(set (reg:CCZ 17) --- 13378,13384 ---- (const_int -1))) (clobber (match_scratch:SI 2 "")) (clobber (reg:CC 17))] ! "!TARGET_64BIT && TARGET_USE_LOOP && reload_completed && REGNO (operands[1]) != 2" [(parallel [(set (reg:CCZ 17) *************** *** 9580,9586 **** (const_int -1))) (clobber (match_scratch:SI 3 "")) (clobber (reg:CC 17))] ! "TARGET_USE_LOOP && reload_completed && (! REG_P (operands[2]) || ! rtx_equal_p (operands[1], operands[2]))" --- 13401,13407 ---- (const_int -1))) (clobber (match_scratch:SI 3 "")) (clobber (reg:CC 17))] ! "!TARGET_64BIT && TARGET_USE_LOOP && reload_completed && (! REG_P (operands[2]) || ! rtx_equal_p (operands[1], operands[2]))" *************** *** 9604,9623 **** [(reg 17) (const_int 0)])) (set (match_operand 3 "q_regs_operand" "") (zero_extend (match_dup 1)))] ! "peep2_reg_dead_p (3, operands[1]) && ! reg_overlap_mentioned_p (operands[3], operands[0])" [(set (match_dup 4) (match_dup 0)) (set (strict_low_part (match_dup 5)) (match_dup 2))] - " { operands[4] = gen_rtx_REG (GET_MODE (operands[0]), 17); operands[5] = gen_rtx_REG (QImode, REGNO (operands[3])); ! if (HAVE_movsi_xor) ! emit_insn (gen_movsi_xor (operands[3], const0_rtx)); ! else ! emit_insn (gen_movsi (operands[3], const0_rtx)); ! }") ;; Call instructions. --- 13425,13463 ---- [(reg 17) (const_int 0)])) (set (match_operand 3 "q_regs_operand" "") (zero_extend (match_dup 1)))] ! "(peep2_reg_dead_p (3, operands[1]) ! || operands_match_p (operands[1], operands[3])) && ! reg_overlap_mentioned_p (operands[3], operands[0])" [(set (match_dup 4) (match_dup 0)) (set (strict_low_part (match_dup 5)) (match_dup 2))] { operands[4] = gen_rtx_REG (GET_MODE (operands[0]), 17); operands[5] = gen_rtx_REG (QImode, REGNO (operands[3])); ! ix86_expand_clear (operands[3]); ! }) ! ! ;; Similar, but match zero_extendhisi2_and, which adds a clobber. ! ! (define_peephole2 ! [(set (reg 17) (match_operand 0 "" "")) ! (set (match_operand:QI 1 "register_operand" "") ! (match_operator:QI 2 "ix86_comparison_operator" ! [(reg 17) (const_int 0)])) ! (parallel [(set (match_operand 3 "q_regs_operand" "") ! (zero_extend (match_dup 1))) ! (clobber (reg:CC 17))])] ! "(peep2_reg_dead_p (3, operands[1]) ! || operands_match_p (operands[1], operands[3])) ! && ! reg_overlap_mentioned_p (operands[3], operands[0])" ! [(set (match_dup 4) (match_dup 0)) ! (set (strict_low_part (match_dup 5)) ! (match_dup 2))] ! { ! operands[4] = gen_rtx_REG (GET_MODE (operands[0]), 17); ! operands[5] = gen_rtx_REG (QImode, REGNO (operands[3])); ! ix86_expand_clear (operands[3]); ! }) ;; Call instructions. *************** *** 9633,9644 **** (set (reg:SI 7) (plus:SI (reg:SI 7) (match_operand:SI 3 "" "")))])] ! "" ! " { if (operands[3] == const0_rtx) { ! emit_insn (gen_call (operands[0], operands[1])); DONE; } /* Static functions and indirect calls don't need --- 13473,13483 ---- (set (reg:SI 7) (plus:SI (reg:SI 7) (match_operand:SI 3 "" "")))])] ! "!TARGET_64BIT" { if (operands[3] == const0_rtx) { ! emit_insn (gen_call (operands[0], operands[1], constm1_rtx)); DONE; } /* Static functions and indirect calls don't need *************** *** 9649,9669 **** current_function_uses_pic_offset_table = 1; if (! call_insn_operand (XEXP (operands[0], 0), Pmode)) XEXP (operands[0], 0) = copy_to_mode_reg (Pmode, XEXP (operands[0], 0)); ! }") (define_insn "*call_pop_0" [(call (mem:QI (match_operand:SI 0 "constant_call_address_operand" "")) (match_operand:SI 1 "" "")) (set (reg:SI 7) (plus:SI (reg:SI 7) (match_operand:SI 2 "immediate_operand" "")))] ! "" ! "* { if (SIBLING_CALL_P (insn)) ! return \"jmp\\t%P0\"; else ! return \"call\\t%P0\"; ! }" [(set_attr "type" "call")]) (define_insn "*call_pop_1" --- 13488,13509 ---- current_function_uses_pic_offset_table = 1; if (! call_insn_operand (XEXP (operands[0], 0), Pmode)) XEXP (operands[0], 0) = copy_to_mode_reg (Pmode, XEXP (operands[0], 0)); ! if (TARGET_64BIT) ! abort(); ! }) (define_insn "*call_pop_0" [(call (mem:QI (match_operand:SI 0 "constant_call_address_operand" "")) (match_operand:SI 1 "" "")) (set (reg:SI 7) (plus:SI (reg:SI 7) (match_operand:SI 2 "immediate_operand" "")))] ! "!TARGET_64BIT" { if (SIBLING_CALL_P (insn)) ! return "jmp\t%P0"; else ! return "call\t%P0"; ! } [(set_attr "type" "call")]) (define_insn "*call_pop_1" *************** *** 9671,9741 **** (match_operand:SI 1 "" "")) (set (reg:SI 7) (plus:SI (reg:SI 7) (match_operand:SI 2 "immediate_operand" "i")))] ! "" ! "* { if (constant_call_address_operand (operands[0], Pmode)) { if (SIBLING_CALL_P (insn)) ! return \"jmp\\t%P0\"; else ! return \"call\\t%P0\"; } if (SIBLING_CALL_P (insn)) ! return \"jmp\\t%A0\"; else ! return \"call\\t%A0\"; ! }" [(set_attr "type" "call")]) (define_expand "call" [(call (match_operand:QI 0 "" "") ! (match_operand:SI 1 "" ""))] ;; Operand 1 not used on the i386. "" - " { /* Static functions and indirect calls don't need current_function_uses_pic_offset_table. */ if (flag_pic && GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF && ! SYMBOL_REF_FLAG (XEXP (operands[0], 0))) current_function_uses_pic_offset_table = 1; if (! call_insn_operand (XEXP (operands[0], 0), Pmode)) XEXP (operands[0], 0) = copy_to_mode_reg (Pmode, XEXP (operands[0], 0)); ! }") (define_insn "*call_0" ! [(call (mem:QI (match_operand:SI 0 "constant_call_address_operand" "")) ! (match_operand:SI 1 "" ""))] "" - "* { if (SIBLING_CALL_P (insn)) ! return \"jmp\\t%P0\"; else ! return \"call\\t%P0\"; ! }" [(set_attr "type" "call")]) (define_insn "*call_1" [(call (mem:QI (match_operand:SI 0 "call_insn_operand" "rsm")) ! (match_operand:SI 1 "" ""))] ! "" ! "* { if (constant_call_address_operand (operands[0], QImode)) { if (SIBLING_CALL_P (insn)) ! return \"jmp\\t%P0\"; else ! return \"call\\t%P0\"; } if (SIBLING_CALL_P (insn)) ! return \"jmp\\t%A0\"; else ! return \"call\\t%A0\"; ! }" [(set_attr "type" "call")]) ;; Call subroutine, returning value in operand 0 --- 13511,13615 ---- (match_operand:SI 1 "" "")) (set (reg:SI 7) (plus:SI (reg:SI 7) (match_operand:SI 2 "immediate_operand" "i")))] ! "!TARGET_64BIT" { if (constant_call_address_operand (operands[0], Pmode)) { if (SIBLING_CALL_P (insn)) ! return "jmp\t%P0"; else ! return "call\t%P0"; } if (SIBLING_CALL_P (insn)) ! return "jmp\t%A0"; else ! return "call\t%A0"; ! } [(set_attr "type" "call")]) (define_expand "call" [(call (match_operand:QI 0 "" "") ! (match_operand 1 "" "")) ! (use (match_operand 2 "" ""))] ;; Operand 1 not used on the i386. "" { + rtx insn; /* Static functions and indirect calls don't need current_function_uses_pic_offset_table. */ if (flag_pic && GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF && ! SYMBOL_REF_FLAG (XEXP (operands[0], 0))) current_function_uses_pic_offset_table = 1; + if (! call_insn_operand (XEXP (operands[0], 0), Pmode)) XEXP (operands[0], 0) = copy_to_mode_reg (Pmode, XEXP (operands[0], 0)); ! if (TARGET_64BIT && INTVAL (operands[2]) >= 0) ! { ! rtx reg = gen_rtx_REG (QImode, 0); ! emit_move_insn (reg, operands[2]); ! insn = emit_call_insn (gen_call_exp (operands[0], operands[1])); ! use_reg (&CALL_INSN_FUNCTION_USAGE (insn), reg); ! DONE; ! } ! insn = emit_call_insn (gen_call_exp (operands[0], operands[1])); ! DONE; ! }) ! ! (define_expand "call_exp" ! [(call (match_operand:QI 0 "" "") ! (match_operand 1 "" ""))] ! "" ! "") (define_insn "*call_0" ! [(call (mem:QI (match_operand 0 "constant_call_address_operand" "")) ! (match_operand 1 "" ""))] "" { if (SIBLING_CALL_P (insn)) ! return "jmp\t%P0"; else ! return "call\t%P0"; ! } [(set_attr "type" "call")]) (define_insn "*call_1" [(call (mem:QI (match_operand:SI 0 "call_insn_operand" "rsm")) ! (match_operand 1 "" ""))] ! "!TARGET_64BIT" { if (constant_call_address_operand (operands[0], QImode)) { if (SIBLING_CALL_P (insn)) ! return "jmp\t%P0"; else ! return "call\t%P0"; } if (SIBLING_CALL_P (insn)) ! return "jmp\t%A0"; else ! return "call\t%A0"; ! } ! [(set_attr "type" "call")]) ! ! (define_insn "*call_1_rex64" ! [(call (mem:QI (match_operand:DI 0 "call_insn_operand" "rsm")) ! (match_operand 1 "" ""))] ! "TARGET_64BIT" ! { ! if (constant_call_address_operand (operands[0], QImode)) ! { ! if (SIBLING_CALL_P (insn)) ! return "jmp\t%P0"; ! else ! return "call\t%P0"; ! } ! if (SIBLING_CALL_P (insn)) ! return "jmp\t%A0"; ! else ! return "call\t%A0"; ! } [(set_attr "type" "call")]) ;; Call subroutine, returning value in operand 0 *************** *** 9748,9759 **** (set (reg:SI 7) (plus:SI (reg:SI 7) (match_operand:SI 4 "" "")))])] ! "" ! " { if (operands[4] == const0_rtx) { ! emit_insn (gen_call_value (operands[0], operands[1], operands[2])); DONE; } /* Static functions and indirect calls don't need --- 13622,13633 ---- (set (reg:SI 7) (plus:SI (reg:SI 7) (match_operand:SI 4 "" "")))])] ! "!TARGET_64BIT" { if (operands[4] == const0_rtx) { ! emit_insn (gen_call_value (operands[0], operands[1], operands[2], ! constm1_rtx)); DONE; } /* Static functions and indirect calls don't need *************** *** 9764,9779 **** current_function_uses_pic_offset_table = 1; if (! call_insn_operand (XEXP (operands[1], 0), Pmode)) XEXP (operands[1], 0) = copy_to_mode_reg (Pmode, XEXP (operands[1], 0)); ! }") (define_expand "call_value" [(set (match_operand 0 "" "") (call (match_operand:QI 1 "" "") ! (match_operand:SI 2 "" "")))] ;; Operand 2 not used on the i386. "" - " { /* Static functions and indirect calls don't need current_function_uses_pic_offset_table. */ if (flag_pic --- 13638,13654 ---- current_function_uses_pic_offset_table = 1; if (! call_insn_operand (XEXP (operands[1], 0), Pmode)) XEXP (operands[1], 0) = copy_to_mode_reg (Pmode, XEXP (operands[1], 0)); ! }) (define_expand "call_value" [(set (match_operand 0 "" "") (call (match_operand:QI 1 "" "") ! (match_operand:SI 2 "" ""))) ! (use (match_operand:SI 3 "" ""))] ;; Operand 2 not used on the i386. "" { + rtx insn; /* Static functions and indirect calls don't need current_function_uses_pic_offset_table. */ if (flag_pic *************** *** 9782,9788 **** current_function_uses_pic_offset_table = 1; if (! call_insn_operand (XEXP (operands[1], 0), Pmode)) XEXP (operands[1], 0) = copy_to_mode_reg (Pmode, XEXP (operands[1], 0)); ! }") ;; Call subroutine returning any type. --- 13657,13682 ---- current_function_uses_pic_offset_table = 1; if (! call_insn_operand (XEXP (operands[1], 0), Pmode)) XEXP (operands[1], 0) = copy_to_mode_reg (Pmode, XEXP (operands[1], 0)); ! if (TARGET_64BIT && INTVAL (operands[3]) >= 0) ! { ! rtx reg = gen_rtx_REG (QImode, 0); ! emit_move_insn (reg, operands[3]); ! insn = emit_call_insn (gen_call_value_exp (operands[0], operands[1], ! operands[2])); ! use_reg (&CALL_INSN_FUNCTION_USAGE (insn), reg); ! DONE; ! } ! insn = emit_call_insn (gen_call_value_exp (operands[0], operands[1], ! operands[2])); ! DONE; ! }) ! ! (define_expand "call_value_exp" ! [(set (match_operand 0 "" "") ! (call (match_operand:QI 1 "" "") ! (match_operand:SI 2 "" "")))] ! "" ! "") ;; Call subroutine returning any type. *************** *** 9792,9798 **** (match_operand 1 "" "") (match_operand 2 "" "")])] "" - " { int i; --- 13686,13691 ---- *************** *** 9801,9810 **** simply pretend the untyped call returns a complex long double value. */ ! emit_call_insn (TARGET_80387 ? gen_call_value (gen_rtx_REG (XCmode, FIRST_FLOAT_REG), ! operands[0], const0_rtx) ! : gen_call (operands[0], const0_rtx)); for (i = 0; i < XVECLEN (operands[2], 0); i++) { --- 13694,13705 ---- simply pretend the untyped call returns a complex long double value. */ ! emit_call_insn (TARGET_FLOAT_RETURNS_IN_80387 ? gen_call_value (gen_rtx_REG (XCmode, FIRST_FLOAT_REG), ! operands[0], const0_rtx, ! GEN_INT (SSE_REGPARM_MAX - 1)) ! : gen_call (operands[0], const0_rtx, ! GEN_INT (SSE_REGPARM_MAX - 1))); for (i = 0; i < XVECLEN (operands[2], 0); i++) { *************** *** 9819,9825 **** emit_insn (gen_blockage ()); DONE; ! }") ;; Prologue and epilogue instructions --- 13714,13720 ---- emit_insn (gen_blockage ()); DONE; ! }) ;; Prologue and epilogue instructions *************** *** 9839,9845 **** (define_expand "return" [(return)] "ix86_can_use_return_insn_p ()" - " { if (current_function_pops_args) { --- 13734,13739 ---- *************** *** 9847,9853 **** emit_jump_insn (gen_return_pop_internal (popc)); DONE; } ! }") (define_insn "return_internal" [(return)] --- 13741,13747 ---- emit_jump_insn (gen_return_pop_internal (popc)); DONE; } ! }) (define_insn "return_internal" [(return)] *************** *** 9861,9867 **** [(return) (use (match_operand:SI 0 "const_int_operand" ""))] "reload_completed" ! "ret\\t%0" [(set_attr "length" "3") (set_attr "length_immediate" "2") (set_attr "modrm" "0")]) --- 13755,13761 ---- [(return) (use (match_operand:SI 0 "const_int_operand" ""))] "reload_completed" ! "ret\t%0" [(set_attr "length" "3") (set_attr "length_immediate" "2") (set_attr "modrm" "0")]) *************** *** 9870,9876 **** [(return) (use (match_operand:SI 0 "register_operand" "r"))] "reload_completed" ! "jmp\\t%A0" [(set_attr "type" "ibr") (set_attr "length_immediate" "0")]) --- 13764,13770 ---- [(return) (use (match_operand:SI 0 "register_operand" "r"))] "reload_completed" ! "jmp\t%A0" [(set_attr "type" "ibr") (set_attr "length_immediate" "0")]) *************** *** 9895,9910 **** (plus:SI (match_operand:SI 1 "symbolic_operand" "") (minus:SI (pc) (match_operand 2 "" ""))))] 1)) (clobber (reg:CC 17))] ! "" ! "* { if (GET_CODE (operands[2]) == LABEL_REF) operands[2] = XEXP (operands[2], 0); if (TARGET_DEEP_BRANCH_PREDICTION) ! return \"add{l}\\t{%1, %0|%0, %1}\"; else ! return \"add{l}\\t{%1+[.-%X2], %0|%0, %a1+(.-%X2)}\"; ! }" [(set_attr "type" "alu") ; Since this insn may have two constant operands, we must set the ; length manually. --- 13789,13803 ---- (plus:SI (match_operand:SI 1 "symbolic_operand" "") (minus:SI (pc) (match_operand 2 "" ""))))] 1)) (clobber (reg:CC 17))] ! "!TARGET_64BIT" { if (GET_CODE (operands[2]) == LABEL_REF) operands[2] = XEXP (operands[2], 0); if (TARGET_DEEP_BRANCH_PREDICTION) ! return "add{l}\t{%1, %0|%0, %1}"; else ! return "add{l}\t{%1+[.-%X2], %0|%0, %a1+(.-%X2)}"; ! } [(set_attr "type" "alu") ; Since this insn may have two constant operands, we must set the ; length manually. *************** *** 9914,9932 **** (define_insn "prologue_get_pc" [(set (match_operand:SI 0 "register_operand" "=r") (unspec_volatile:SI [(plus:SI (pc) (match_operand 1 "" ""))] 2))] ! "" ! "* { if (GET_CODE (operands[1]) == LABEL_REF) operands[1] = XEXP (operands[1], 0); ! output_asm_insn (\"call\\t%X1\", operands); if (! TARGET_DEEP_BRANCH_PREDICTION) { ! ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", CODE_LABEL_NUMBER (operands[1])); } RET; ! }" [(set_attr "type" "multi")]) (define_expand "epilogue" --- 13807,13824 ---- (define_insn "prologue_get_pc" [(set (match_operand:SI 0 "register_operand" "=r") (unspec_volatile:SI [(plus:SI (pc) (match_operand 1 "" ""))] 2))] ! "!TARGET_64BIT" { if (GET_CODE (operands[1]) == LABEL_REF) operands[1] = XEXP (operands[1], 0); ! output_asm_insn ("call\t%X1", operands); if (! TARGET_DEEP_BRANCH_PREDICTION) { ! ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "L", CODE_LABEL_NUMBER (operands[1])); } RET; ! } [(set_attr "type" "multi")]) (define_expand "epilogue" *************** *** 9943,9949 **** [(use (match_operand 0 "register_operand" "")) (use (match_operand 1 "register_operand" ""))] "" - " { rtx tmp, sa = operands[0], ra = operands[1]; --- 13835,13840 ---- *************** *** 9955,9978 **** tmp = gen_rtx_MEM (Pmode, tmp); emit_move_insn (tmp, ra); ! emit_insn (gen_eh_return_1 (sa)); emit_barrier (); DONE; ! }") ! (define_insn_and_split "eh_return_1" ! [(unspec_volatile [(match_operand 0 "register_operand" "c")] 13)] ! "" "#" "reload_completed" [(const_int 1)] "ix86_expand_epilogue (2); DONE;") (define_insn "leave" ! [(set (reg:SI 7) (reg:SI 6)) ! (set (reg:SI 6) (mem:SI (pre_dec:SI (reg:SI 7)))) (clobber (mem:BLK (scratch)))] ! "" "leave" [(set_attr "length_immediate" "0") (set_attr "length" "1") --- 13846,13893 ---- tmp = gen_rtx_MEM (Pmode, tmp); emit_move_insn (tmp, ra); ! if (Pmode == SImode) ! emit_insn (gen_eh_return_si (sa)); ! else ! emit_insn (gen_eh_return_di (sa)); emit_barrier (); DONE; ! }) ! (define_insn_and_split "eh_return_si" ! [(unspec_volatile [(match_operand:SI 0 "register_operand" "c")] 13)] ! "!TARGET_64BIT" ! "#" ! "reload_completed" ! [(const_int 1)] ! "ix86_expand_epilogue (2); DONE;") ! ! (define_insn_and_split "eh_return_di" ! [(unspec_volatile [(match_operand:DI 0 "register_operand" "c")] 13)] ! "TARGET_64BIT" "#" "reload_completed" [(const_int 1)] "ix86_expand_epilogue (2); DONE;") (define_insn "leave" ! [(set (reg:SI 7) (plus:SI (reg:SI 6) (const_int 4))) ! (set (reg:SI 6) (mem:SI (reg:SI 6))) (clobber (mem:BLK (scratch)))] ! "!TARGET_64BIT" ! "leave" ! [(set_attr "length_immediate" "0") ! (set_attr "length" "1") ! (set_attr "modrm" "0") ! (set_attr "modrm" "0") ! (set_attr "athlon_decode" "vector") ! (set_attr "ppro_uops" "few")]) ! ! (define_insn "leave_rex64" ! [(set (reg:DI 7) (plus:DI (reg:DI 6) (const_int 8))) ! (set (reg:DI 6) (mem:DI (reg:DI 6))) ! (clobber (mem:BLK (scratch)))] ! "TARGET_64BIT" "leave" [(set_attr "length_immediate" "0") (set_attr "length" "1") *************** *** 9985,9991 **** [(set (match_operand:SI 0 "nonimmediate_operand" "") (ffs:SI (match_operand:SI 1 "general_operand" "")))] "" - " { rtx out = gen_reg_rtx (SImode), tmp = gen_reg_rtx (SImode); rtx in = operands[1]; --- 13900,13905 ---- *************** *** 10035,10041 **** emit_move_insn (out, const0_rtx); ! emit_cmp_and_jump_insns (in, const0_rtx, EQ, 0, SImode, 1, 0, label); emit_move_insn (hi, out); emit_insn (gen_subsi3 (out, out, in)); --- 13949,13955 ---- emit_move_insn (out, const0_rtx); ! emit_cmp_and_jump_insns (in, const0_rtx, EQ, 0, SImode, 1, label); emit_move_insn (hi, out); emit_insn (gen_subsi3 (out, out, in)); *************** *** 10066,10072 **** emit_move_insn (operands[0], out); } DONE; ! }") (define_insn "ffssi_1" [(set (reg:CCZ 17) --- 13980,13986 ---- emit_move_insn (operands[0], out); } DONE; ! }) (define_insn "ffssi_1" [(set (reg:CCZ 17) *************** *** 10075,10081 **** (set (match_operand:SI 0 "register_operand" "=r") (unspec:SI [(match_dup 1)] 5))] "" ! "bsf{l}\\t{%1, %0|%0, %1}" [(set_attr "prefix_0f" "1") (set_attr "ppro_uops" "few")]) --- 13989,13995 ---- (set (match_operand:SI 0 "register_operand" "=r") (unspec:SI [(match_dup 1)] 5))] "" ! "bsf{l}\t{%1, %0|%0, %1}" [(set_attr "prefix_0f" "1") (set_attr "ppro_uops" "few")]) *************** *** 10092,10121 **** ;; Gcc is slightly more smart about handling normal two address instructions ;; so use special patterns for add and mull. ! (define_insn "*fop_sf_comm" [(set (match_operand:SF 0 "register_operand" "=f") (match_operator:SF 3 "binary_fp_operator" ! [(match_operand:SF 1 "register_operand" "%0") (match_operand:SF 2 "nonimmediate_operand" "fm")]))] ! "TARGET_80387 && GET_RTX_CLASS (GET_CODE (operands[3])) == 'c'" "* return output_387_binary_op (insn, operands);" [(set (attr "type") ! (if_then_else (match_operand:SF 3 "mult_operator" "") ! (const_string "fmul") ! (const_string "fop"))) (set_attr "mode" "SF")]) ! (define_insn "*fop_df_comm" [(set (match_operand:DF 0 "register_operand" "=f") (match_operator:DF 3 "binary_fp_operator" ! [(match_operand:DF 1 "register_operand" "%0") (match_operand:DF 2 "nonimmediate_operand" "fm")]))] ! "TARGET_80387 && GET_RTX_CLASS (GET_CODE (operands[3])) == 'c'" "* return output_387_binary_op (insn, operands);" [(set (attr "type") ! (if_then_else (match_operand:DF 3 "mult_operator" "") ! (const_string "fmul") ! (const_string "fop"))) (set_attr "mode" "DF")]) (define_insn "*fop_xf_comm" --- 14006,14096 ---- ;; Gcc is slightly more smart about handling normal two address instructions ;; so use special patterns for add and mull. ! (define_insn "*fop_sf_comm_nosse" [(set (match_operand:SF 0 "register_operand" "=f") (match_operator:SF 3 "binary_fp_operator" ! [(match_operand:SF 1 "nonimmediate_operand" "%0") (match_operand:SF 2 "nonimmediate_operand" "fm")]))] ! "TARGET_80387 && !TARGET_SSE_MATH ! && GET_RTX_CLASS (GET_CODE (operands[3])) == 'c' ! && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" "* return output_387_binary_op (insn, operands);" [(set (attr "type") ! (if_then_else (match_operand:SF 3 "mult_operator" "") ! (const_string "fmul") ! (const_string "fop"))) (set_attr "mode" "SF")]) ! (define_insn "*fop_sf_comm" ! [(set (match_operand:SF 0 "register_operand" "=f#x,x#f") ! (match_operator:SF 3 "binary_fp_operator" ! [(match_operand:SF 1 "nonimmediate_operand" "%0,0") ! (match_operand:SF 2 "nonimmediate_operand" "fm#x,xm#f")]))] ! "TARGET_80387 && TARGET_SSE_MATH && TARGET_MIX_SSE_I387 ! && GET_RTX_CLASS (GET_CODE (operands[3])) == 'c' ! && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" ! "* return output_387_binary_op (insn, operands);" ! [(set (attr "type") ! (if_then_else (eq_attr "alternative" "1") ! (const_string "sse") ! (if_then_else (match_operand:SF 3 "mult_operator" "") ! (const_string "fmul") ! (const_string "fop")))) ! (set_attr "mode" "SF")]) ! ! (define_insn "*fop_sf_comm_sse" ! [(set (match_operand:SF 0 "register_operand" "=x") ! (match_operator:SF 3 "binary_fp_operator" ! [(match_operand:SF 1 "nonimmediate_operand" "%0") ! (match_operand:SF 2 "nonimmediate_operand" "xm")]))] ! "TARGET_SSE_MATH && GET_RTX_CLASS (GET_CODE (operands[3])) == 'c' ! && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" ! "* return output_387_binary_op (insn, operands);" ! [(set_attr "type" "sse") ! (set_attr "mode" "SF")]) ! ! (define_insn "*fop_df_comm_nosse" [(set (match_operand:DF 0 "register_operand" "=f") (match_operator:DF 3 "binary_fp_operator" ! [(match_operand:DF 1 "nonimmediate_operand" "%0") (match_operand:DF 2 "nonimmediate_operand" "fm")]))] ! "TARGET_80387 && (!TARGET_SSE2 || !TARGET_SSE_MATH) ! && GET_RTX_CLASS (GET_CODE (operands[3])) == 'c' ! && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" "* return output_387_binary_op (insn, operands);" [(set (attr "type") ! (if_then_else (match_operand:SF 3 "mult_operator" "") ! (const_string "fmul") ! (const_string "fop"))) ! (set_attr "mode" "DF")]) ! ! (define_insn "*fop_df_comm" ! [(set (match_operand:DF 0 "register_operand" "=f#Y,Y#f") ! (match_operator:DF 3 "binary_fp_operator" ! [(match_operand:DF 1 "nonimmediate_operand" "%0,0") ! (match_operand:DF 2 "nonimmediate_operand" "fm#Y,Ym#f")]))] ! "TARGET_80387 && TARGET_SSE_MATH && TARGET_SSE2 && TARGET_MIX_SSE_I387 ! && GET_RTX_CLASS (GET_CODE (operands[3])) == 'c' ! && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" ! "* return output_387_binary_op (insn, operands);" ! [(set (attr "type") ! (if_then_else (eq_attr "alternative" "1") ! (const_string "sse") ! (if_then_else (match_operand:SF 3 "mult_operator" "") ! (const_string "fmul") ! (const_string "fop")))) ! (set_attr "mode" "DF")]) ! ! (define_insn "*fop_df_comm_sse" ! [(set (match_operand:DF 0 "register_operand" "=Y") ! (match_operator:DF 3 "binary_fp_operator" ! [(match_operand:DF 1 "nonimmediate_operand" "%0") ! (match_operand:DF 2 "nonimmediate_operand" "Ym")]))] ! "TARGET_SSE2 && TARGET_SSE_MATH ! && GET_RTX_CLASS (GET_CODE (operands[3])) == 'c' ! && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" ! "* return output_387_binary_op (insn, operands);" ! [(set_attr "type" "sse") (set_attr "mode" "DF")]) (define_insn "*fop_xf_comm" *************** *** 10123,10129 **** (match_operator:XF 3 "binary_fp_operator" [(match_operand:XF 1 "register_operand" "%0") (match_operand:XF 2 "register_operand" "f")]))] ! "TARGET_80387 && GET_RTX_CLASS (GET_CODE (operands[3])) == 'c'" "* return output_387_binary_op (insn, operands);" [(set (attr "type") (if_then_else (match_operand:XF 3 "mult_operator" "") --- 14098,14105 ---- (match_operator:XF 3 "binary_fp_operator" [(match_operand:XF 1 "register_operand" "%0") (match_operand:XF 2 "register_operand" "f")]))] ! "!TARGET_64BIT && TARGET_80387 ! && GET_RTX_CLASS (GET_CODE (operands[3])) == 'c'" "* return output_387_binary_op (insn, operands);" [(set (attr "type") (if_then_else (match_operand:XF 3 "mult_operator" "") *************** *** 10144,10155 **** (const_string "fop"))) (set_attr "mode" "XF")]) ! (define_insn "*fop_sf_1" [(set (match_operand:SF 0 "register_operand" "=f,f") (match_operator:SF 3 "binary_fp_operator" [(match_operand:SF 1 "nonimmediate_operand" "0,fm") (match_operand:SF 2 "nonimmediate_operand" "fm,0")]))] ! "TARGET_80387 && GET_RTX_CLASS (GET_CODE (operands[3])) != 'c' && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" "* return output_387_binary_op (insn, operands);" --- 14120,14131 ---- (const_string "fop"))) (set_attr "mode" "XF")]) ! (define_insn "*fop_sf_1_nosse" [(set (match_operand:SF 0 "register_operand" "=f,f") (match_operator:SF 3 "binary_fp_operator" [(match_operand:SF 1 "nonimmediate_operand" "0,fm") (match_operand:SF 2 "nonimmediate_operand" "fm,0")]))] ! "TARGET_80387 && !TARGET_SSE_MATH && GET_RTX_CLASS (GET_CODE (operands[3])) != 'c' && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" "* return output_387_binary_op (insn, operands);" *************** *** 10162,10173 **** (const_string "fop"))) (set_attr "mode" "SF")]) (define_insn "*fop_sf_2" [(set (match_operand:SF 0 "register_operand" "=f,f") (match_operator:SF 3 "binary_fp_operator" [(float:SF (match_operand:SI 1 "nonimmediate_operand" "m,?r")) (match_operand:SF 2 "register_operand" "0,0")]))] ! "TARGET_80387 && TARGET_USE_FIOP" "* return which_alternative ? \"#\" : output_387_binary_op (insn, operands);" [(set (attr "type") (cond [(match_operand:SF 3 "mult_operator" "") --- 14138,14181 ---- (const_string "fop"))) (set_attr "mode" "SF")]) + (define_insn "*fop_sf_1" + [(set (match_operand:SF 0 "register_operand" "=f,f,x") + (match_operator:SF 3 "binary_fp_operator" + [(match_operand:SF 1 "nonimmediate_operand" "0,fm,0") + (match_operand:SF 2 "nonimmediate_operand" "fm,0,xm#f")]))] + "TARGET_80387 && TARGET_SSE_MATH && TARGET_MIX_SSE_I387 + && GET_RTX_CLASS (GET_CODE (operands[3])) != 'c' + && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" + "* return output_387_binary_op (insn, operands);" + [(set (attr "type") + (cond [(eq_attr "alternative" "2") + (const_string "sse") + (match_operand:SF 3 "mult_operator" "") + (const_string "fmul") + (match_operand:SF 3 "div_operator" "") + (const_string "fdiv") + ] + (const_string "fop"))) + (set_attr "mode" "SF")]) + + (define_insn "*fop_sf_1_sse" + [(set (match_operand:SF 0 "register_operand" "=x") + (match_operator:SF 3 "binary_fp_operator" + [(match_operand:SF 1 "register_operand" "0") + (match_operand:SF 2 "nonimmediate_operand" "xm")]))] + "TARGET_SSE_MATH + && GET_RTX_CLASS (GET_CODE (operands[3])) != 'c'" + "* return output_387_binary_op (insn, operands);" + [(set_attr "type" "sse") + (set_attr "mode" "SF")]) + + ;; ??? Add SSE splitters for these! (define_insn "*fop_sf_2" [(set (match_operand:SF 0 "register_operand" "=f,f") (match_operator:SF 3 "binary_fp_operator" [(float:SF (match_operand:SI 1 "nonimmediate_operand" "m,?r")) (match_operand:SF 2 "register_operand" "0,0")]))] ! "TARGET_80387 && TARGET_USE_FIOP && !TARGET_SSE_MATH" "* return which_alternative ? \"#\" : output_387_binary_op (insn, operands);" [(set (attr "type") (cond [(match_operand:SF 3 "mult_operator" "") *************** *** 10185,10191 **** (match_operator:SF 3 "binary_fp_operator" [(match_operand:SF 1 "register_operand" "0,0") (float:SF (match_operand:SI 2 "nonimmediate_operand" "m,?r"))]))] ! "TARGET_80387 && TARGET_USE_FIOP" "* return which_alternative ? \"#\" : output_387_binary_op (insn, operands);" [(set (attr "type") (cond [(match_operand:SF 3 "mult_operator" "") --- 14193,14199 ---- (match_operator:SF 3 "binary_fp_operator" [(match_operand:SF 1 "register_operand" "0,0") (float:SF (match_operand:SI 2 "nonimmediate_operand" "m,?r"))]))] ! "TARGET_80387 && TARGET_USE_FIOP && !TARGET_SSE_MATH" "* return which_alternative ? \"#\" : output_387_binary_op (insn, operands);" [(set (attr "type") (cond [(match_operand:SF 3 "mult_operator" "") *************** *** 10198,10209 **** (set_attr "ppro_uops" "many") (set_attr "mode" "SI")]) ! (define_insn "*fop_df_1" [(set (match_operand:DF 0 "register_operand" "=f,f") (match_operator:DF 3 "binary_fp_operator" [(match_operand:DF 1 "nonimmediate_operand" "0,fm") (match_operand:DF 2 "nonimmediate_operand" "fm,0")]))] ! "TARGET_80387 && GET_RTX_CLASS (GET_CODE (operands[3])) != 'c' && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" "* return output_387_binary_op (insn, operands);" --- 14206,14217 ---- (set_attr "ppro_uops" "many") (set_attr "mode" "SI")]) ! (define_insn "*fop_df_1_nosse" [(set (match_operand:DF 0 "register_operand" "=f,f") (match_operator:DF 3 "binary_fp_operator" [(match_operand:DF 1 "nonimmediate_operand" "0,fm") (match_operand:DF 2 "nonimmediate_operand" "fm,0")]))] ! "TARGET_80387 && (!TARGET_SSE2 || !TARGET_SSE_MATH) && GET_RTX_CLASS (GET_CODE (operands[3])) != 'c' && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" "* return output_387_binary_op (insn, operands);" *************** *** 10216,10227 **** (const_string "fop"))) (set_attr "mode" "DF")]) (define_insn "*fop_df_2" [(set (match_operand:DF 0 "register_operand" "=f,f") (match_operator:DF 3 "binary_fp_operator" [(float:DF (match_operand:SI 1 "nonimmediate_operand" "m,?r")) (match_operand:DF 2 "register_operand" "0,0")]))] ! "TARGET_80387 && TARGET_USE_FIOP" "* return which_alternative ? \"#\" : output_387_binary_op (insn, operands);" [(set (attr "type") (cond [(match_operand:DF 3 "mult_operator" "") --- 14224,14267 ---- (const_string "fop"))) (set_attr "mode" "DF")]) + + (define_insn "*fop_df_1" + [(set (match_operand:DF 0 "register_operand" "=f#Y,f#Y,Y#f") + (match_operator:DF 3 "binary_fp_operator" + [(match_operand:DF 1 "nonimmediate_operand" "0,fm,0") + (match_operand:DF 2 "nonimmediate_operand" "fm,0,Ym#f")]))] + "TARGET_80387 && TARGET_SSE2 && TARGET_SSE_MATH && TARGET_MIX_SSE_I387 + && GET_RTX_CLASS (GET_CODE (operands[3])) != 'c' + && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" + "* return output_387_binary_op (insn, operands);" + [(set (attr "type") + (cond [(eq_attr "alternative" "2") + (const_string "sse") + (match_operand:DF 3 "mult_operator" "") + (const_string "fmul") + (match_operand:DF 3 "div_operator" "") + (const_string "fdiv") + ] + (const_string "fop"))) + (set_attr "mode" "DF")]) + + (define_insn "*fop_df_1_sse" + [(set (match_operand:DF 0 "register_operand" "=Y") + (match_operator:DF 3 "binary_fp_operator" + [(match_operand:DF 1 "register_operand" "0") + (match_operand:DF 2 "nonimmediate_operand" "Ym")]))] + "TARGET_SSE2 && TARGET_SSE_MATH + && GET_RTX_CLASS (GET_CODE (operands[3])) != 'c'" + "* return output_387_binary_op (insn, operands);" + [(set_attr "type" "sse")]) + + ;; ??? Add SSE splitters for these! (define_insn "*fop_df_2" [(set (match_operand:DF 0 "register_operand" "=f,f") (match_operator:DF 3 "binary_fp_operator" [(float:DF (match_operand:SI 1 "nonimmediate_operand" "m,?r")) (match_operand:DF 2 "register_operand" "0,0")]))] ! "TARGET_80387 && TARGET_USE_FIOP && !(TARGET_SSE2 && TARGET_SSE_MATH)" "* return which_alternative ? \"#\" : output_387_binary_op (insn, operands);" [(set (attr "type") (cond [(match_operand:DF 3 "mult_operator" "") *************** *** 10239,10245 **** (match_operator:DF 3 "binary_fp_operator" [(match_operand:DF 1 "register_operand" "0,0") (float:DF (match_operand:SI 2 "nonimmediate_operand" "m,?r"))]))] ! "TARGET_80387 && TARGET_USE_FIOP" "* return which_alternative ? \"#\" : output_387_binary_op (insn, operands);" [(set (attr "type") (cond [(match_operand:DF 3 "mult_operator" "") --- 14279,14285 ---- (match_operator:DF 3 "binary_fp_operator" [(match_operand:DF 1 "register_operand" "0,0") (float:DF (match_operand:SI 2 "nonimmediate_operand" "m,?r"))]))] ! "TARGET_80387 && TARGET_USE_FIOP && !(TARGET_SSE2 && TARGET_SSE_MATH)" "* return which_alternative ? \"#\" : output_387_binary_op (insn, operands);" [(set (attr "type") (cond [(match_operand:DF 3 "mult_operator" "") *************** *** 10257,10263 **** (match_operator:DF 3 "binary_fp_operator" [(float_extend:DF (match_operand:SF 1 "nonimmediate_operand" "fm,0")) (match_operand:DF 2 "register_operand" "0,f")]))] ! "TARGET_80387 && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" "* return output_387_binary_op (insn, operands);" [(set (attr "type") --- 14297,14303 ---- (match_operator:DF 3 "binary_fp_operator" [(float_extend:DF (match_operand:SF 1 "nonimmediate_operand" "fm,0")) (match_operand:DF 2 "register_operand" "0,f")]))] ! "TARGET_80387 && (!TARGET_SSE2 || !TARGET_SSE_MATH) && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" "* return output_387_binary_op (insn, operands);" [(set (attr "type") *************** *** 10275,10281 **** [(match_operand:DF 1 "register_operand" "0,f") (float_extend:DF (match_operand:SF 2 "nonimmediate_operand" "fm,0"))]))] ! "TARGET_80387" "* return output_387_binary_op (insn, operands);" [(set (attr "type") (cond [(match_operand:DF 3 "mult_operator" "") --- 14315,14321 ---- [(match_operand:DF 1 "register_operand" "0,f") (float_extend:DF (match_operand:SF 2 "nonimmediate_operand" "fm,0"))]))] ! "TARGET_80387 && !(TARGET_SSE2 && TARGET_SSE_MATH)" "* return output_387_binary_op (insn, operands);" [(set (attr "type") (cond [(match_operand:DF 3 "mult_operator" "") *************** *** 10291,10297 **** (match_operator:XF 3 "binary_fp_operator" [(match_operand:XF 1 "register_operand" "0,f") (match_operand:XF 2 "register_operand" "f,0")]))] ! "TARGET_80387 && GET_RTX_CLASS (GET_CODE (operands[3])) != 'c'" "* return output_387_binary_op (insn, operands);" [(set (attr "type") --- 14331,14337 ---- (match_operator:XF 3 "binary_fp_operator" [(match_operand:XF 1 "register_operand" "0,f") (match_operand:XF 2 "register_operand" "f,0")]))] ! "!TARGET_64BIT && TARGET_80387 && GET_RTX_CLASS (GET_CODE (operands[3])) != 'c'" "* return output_387_binary_op (insn, operands);" [(set (attr "type") *************** *** 10325,10331 **** (match_operator:XF 3 "binary_fp_operator" [(float:XF (match_operand:SI 1 "nonimmediate_operand" "m,?r")) (match_operand:XF 2 "register_operand" "0,0")]))] ! "TARGET_80387 && TARGET_USE_FIOP" "* return which_alternative ? \"#\" : output_387_binary_op (insn, operands);" [(set (attr "type") (cond [(match_operand:XF 3 "mult_operator" "") --- 14365,14371 ---- (match_operator:XF 3 "binary_fp_operator" [(float:XF (match_operand:SI 1 "nonimmediate_operand" "m,?r")) (match_operand:XF 2 "register_operand" "0,0")]))] ! "!TARGET_64BIT && TARGET_80387 && TARGET_USE_FIOP" "* return which_alternative ? \"#\" : output_387_binary_op (insn, operands);" [(set (attr "type") (cond [(match_operand:XF 3 "mult_operator" "") *************** *** 10361,10367 **** (match_operator:XF 3 "binary_fp_operator" [(match_operand:XF 1 "register_operand" "0,0") (float:XF (match_operand:SI 2 "nonimmediate_operand" "m,?r"))]))] ! "TARGET_80387 && TARGET_USE_FIOP" "* return which_alternative ? \"#\" : output_387_binary_op (insn, operands);" [(set (attr "type") (cond [(match_operand:XF 3 "mult_operator" "") --- 14401,14407 ---- (match_operator:XF 3 "binary_fp_operator" [(match_operand:XF 1 "register_operand" "0,0") (float:XF (match_operand:SI 2 "nonimmediate_operand" "m,?r"))]))] ! "!TARGET_64BIT && TARGET_80387 && TARGET_USE_FIOP" "* return which_alternative ? \"#\" : output_387_binary_op (insn, operands);" [(set (attr "type") (cond [(match_operand:XF 3 "mult_operator" "") *************** *** 10397,10403 **** (match_operator:XF 3 "binary_fp_operator" [(float_extend:XF (match_operand:SF 1 "nonimmediate_operand" "fm,0")) (match_operand:XF 2 "register_operand" "0,f")]))] ! "TARGET_80387" "* return output_387_binary_op (insn, operands);" [(set (attr "type") (cond [(match_operand:XF 3 "mult_operator" "") --- 14437,14443 ---- (match_operator:XF 3 "binary_fp_operator" [(float_extend:XF (match_operand:SF 1 "nonimmediate_operand" "fm,0")) (match_operand:XF 2 "register_operand" "0,f")]))] ! "!TARGET_64BIT && TARGET_80387" "* return output_387_binary_op (insn, operands);" [(set (attr "type") (cond [(match_operand:XF 3 "mult_operator" "") *************** *** 10430,10436 **** [(match_operand:XF 1 "register_operand" "0,f") (float_extend:XF (match_operand:SF 2 "nonimmediate_operand" "fm,0"))]))] ! "TARGET_80387" "* return output_387_binary_op (insn, operands);" [(set (attr "type") (cond [(match_operand:XF 3 "mult_operator" "") --- 14470,14476 ---- [(match_operand:XF 1 "register_operand" "0,f") (float_extend:XF (match_operand:SF 2 "nonimmediate_operand" "fm,0"))]))] ! "!TARGET_64BIT && TARGET_80387" "* return output_387_binary_op (insn, operands);" [(set (attr "type") (cond [(match_operand:XF 3 "mult_operator" "") *************** *** 10463,10469 **** (match_operator:XF 3 "binary_fp_operator" [(float_extend:XF (match_operand:DF 1 "nonimmediate_operand" "fm,0")) (match_operand:XF 2 "register_operand" "0,f")]))] ! "TARGET_80387" "* return output_387_binary_op (insn, operands);" [(set (attr "type") (cond [(match_operand:XF 3 "mult_operator" "") --- 14503,14509 ---- (match_operator:XF 3 "binary_fp_operator" [(float_extend:XF (match_operand:DF 1 "nonimmediate_operand" "fm,0")) (match_operand:XF 2 "register_operand" "0,f")]))] ! "!TARGET_64BIT && TARGET_80387" "* return output_387_binary_op (insn, operands);" [(set (attr "type") (cond [(match_operand:XF 3 "mult_operator" "") *************** *** 10496,10502 **** [(match_operand:XF 1 "register_operand" "0,f") (float_extend:XF (match_operand:DF 2 "nonimmediate_operand" "fm,0"))]))] ! "TARGET_80387" "* return output_387_binary_op (insn, operands);" [(set (attr "type") (cond [(match_operand:XF 3 "mult_operator" "") --- 14536,14542 ---- [(match_operand:XF 1 "register_operand" "0,f") (float_extend:XF (match_operand:DF 2 "nonimmediate_operand" "fm,0"))]))] ! "!TARGET_64BIT && TARGET_80387" "* return output_387_binary_op (insn, operands);" [(set (attr "type") (cond [(match_operand:XF 3 "mult_operator" "") *************** *** 10532,10538 **** "TARGET_80387 && reload_completed && FLOAT_MODE_P (GET_MODE (operands[0]))" [(const_int 0)] - " { operands[4] = ix86_force_to_memory (GET_MODE (operands[1]), operands[1]); operands[4] = gen_rtx_FLOAT (GET_MODE (operands[0]), operands[4]); --- 14572,14577 ---- *************** *** 10543,10549 **** operands[2]))); ix86_free_from_memory (GET_MODE (operands[1])); DONE; ! }") (define_split [(set (match_operand 0 "register_operand" "") --- 14582,14588 ---- operands[2]))); ix86_free_from_memory (GET_MODE (operands[1])); DONE; ! }) (define_split [(set (match_operand 0 "register_operand" "") *************** *** 10553,10559 **** "TARGET_80387 && reload_completed && FLOAT_MODE_P (GET_MODE (operands[0]))" [(const_int 0)] - " { operands[4] = ix86_force_to_memory (GET_MODE (operands[2]), operands[2]); operands[4] = gen_rtx_FLOAT (GET_MODE (operands[0]), operands[4]); --- 14592,14597 ---- *************** *** 10564,10587 **** operands[4]))); ix86_free_from_memory (GET_MODE (operands[2])); DONE; ! }") ;; FPU special functions. ! (define_insn "sqrtsf2" [(set (match_operand:SF 0 "register_operand" "=f") (sqrt:SF (match_operand:SF 1 "register_operand" "0")))] ! "! TARGET_NO_FANCY_MATH_387 && TARGET_80387" "fsqrt" [(set_attr "type" "fpspc") (set_attr "mode" "SF") (set_attr "athlon_decode" "direct")]) ! (define_insn "sqrtdf2" [(set (match_operand:DF 0 "register_operand" "=f") (sqrt:DF (match_operand:DF 1 "register_operand" "0")))] "! TARGET_NO_FANCY_MATH_387 && TARGET_80387 ! && (TARGET_IEEE_FP || flag_fast_math) " "fsqrt" [(set_attr "type" "fpspc") (set_attr "mode" "DF") --- 14602,14687 ---- operands[4]))); ix86_free_from_memory (GET_MODE (operands[2])); DONE; ! }) ;; FPU special functions. ! (define_expand "sqrtsf2" ! [(set (match_operand:SF 0 "register_operand" "") ! (sqrt:SF (match_operand:SF 1 "nonimmediate_operand" "")))] ! "(! TARGET_NO_FANCY_MATH_387 && TARGET_80387) || TARGET_SSE_MATH" ! { ! if (!TARGET_SSE_MATH) ! operands[1] = force_reg (SFmode, operands[1]); ! }) ! ! (define_insn "sqrtsf2_1" ! [(set (match_operand:SF 0 "register_operand" "=f#x,x#f") ! (sqrt:SF (match_operand:SF 1 "nonimmediate_operand" "0#x,xm#f")))] ! "! TARGET_NO_FANCY_MATH_387 && TARGET_80387 ! && (TARGET_SSE_MATH && TARGET_MIX_SSE_I387)" ! "@ ! fsqrt ! sqrtss\t{%1, %0|%0, %1}" ! [(set_attr "type" "fpspc,sse") ! (set_attr "mode" "SF,SF") ! (set_attr "athlon_decode" "direct,*")]) ! ! (define_insn "sqrtsf2_1_sse_only" ! [(set (match_operand:SF 0 "register_operand" "=x") ! (sqrt:SF (match_operand:SF 1 "nonimmediate_operand" "xm")))] ! "TARGET_SSE_MATH && (!TARGET_80387 || !TARGET_MIX_SSE_I387)" ! "sqrtss\t{%1, %0|%0, %1}" ! [(set_attr "type" "sse") ! (set_attr "mode" "SF") ! (set_attr "athlon_decode" "*")]) ! ! (define_insn "sqrtsf2_i387" [(set (match_operand:SF 0 "register_operand" "=f") (sqrt:SF (match_operand:SF 1 "register_operand" "0")))] ! "! TARGET_NO_FANCY_MATH_387 && TARGET_80387 ! && !TARGET_SSE_MATH" "fsqrt" [(set_attr "type" "fpspc") (set_attr "mode" "SF") (set_attr "athlon_decode" "direct")]) ! (define_expand "sqrtdf2" ! [(set (match_operand:DF 0 "register_operand" "") ! (sqrt:DF (match_operand:DF 1 "nonimmediate_operand" "")))] ! "(! TARGET_NO_FANCY_MATH_387 && TARGET_80387) ! || (TARGET_SSE2 && TARGET_SSE_MATH)" ! { ! if (!TARGET_SSE2 || !TARGET_SSE_MATH) ! operands[1] = force_reg (DFmode, operands[1]); ! }) ! ! (define_insn "sqrtdf2_1" ! [(set (match_operand:DF 0 "register_operand" "=f#Y,Y#f") ! (sqrt:DF (match_operand:DF 1 "nonimmediate_operand" "0#Y,Ym#f")))] ! "! TARGET_NO_FANCY_MATH_387 && TARGET_80387 ! && (TARGET_SSE2 && TARGET_SSE_MATH && TARGET_MIX_SSE_I387)" ! "@ ! fsqrt ! sqrtsd\t{%1, %0|%0, %1}" ! [(set_attr "type" "fpspc,sse") ! (set_attr "mode" "DF,DF") ! (set_attr "athlon_decode" "direct,*")]) ! ! (define_insn "sqrtdf2_1_sse_only" ! [(set (match_operand:DF 0 "register_operand" "=Y") ! (sqrt:DF (match_operand:DF 1 "nonimmediate_operand" "Ym")))] ! "TARGET_SSE2 && TARGET_SSE_MATH && (!TARGET_80387 || !TARGET_MIX_SSE_I387)" ! "sqrtsd\t{%1, %0|%0, %1}" ! [(set_attr "type" "sse") ! (set_attr "mode" "DF") ! (set_attr "athlon_decode" "*")]) ! ! (define_insn "sqrtdf2_i387" [(set (match_operand:DF 0 "register_operand" "=f") (sqrt:DF (match_operand:DF 1 "register_operand" "0")))] "! TARGET_NO_FANCY_MATH_387 && TARGET_80387 ! && (!TARGET_SSE2 || !TARGET_SSE_MATH)" "fsqrt" [(set_attr "type" "fpspc") (set_attr "mode" "DF") *************** *** 10591,10597 **** [(set (match_operand:DF 0 "register_operand" "=f") (sqrt:DF (float_extend:DF (match_operand:SF 1 "register_operand" "0"))))] ! "! TARGET_NO_FANCY_MATH_387 && TARGET_80387" "fsqrt" [(set_attr "type" "fpspc") (set_attr "mode" "DF") --- 14691,14698 ---- [(set (match_operand:DF 0 "register_operand" "=f") (sqrt:DF (float_extend:DF (match_operand:SF 1 "register_operand" "0"))))] ! "! TARGET_NO_FANCY_MATH_387 && TARGET_80387 ! && !(TARGET_SSE2 && TARGET_SSE_MATH)" "fsqrt" [(set_attr "type" "fpspc") (set_attr "mode" "DF") *************** *** 10600,10607 **** (define_insn "sqrtxf2" [(set (match_operand:XF 0 "register_operand" "=f") (sqrt:XF (match_operand:XF 1 "register_operand" "0")))] ! "! TARGET_NO_FANCY_MATH_387 && TARGET_80387 ! && (TARGET_IEEE_FP || flag_fast_math) " "fsqrt" [(set_attr "type" "fpspc") (set_attr "mode" "XF") --- 14701,14708 ---- (define_insn "sqrtxf2" [(set (match_operand:XF 0 "register_operand" "=f") (sqrt:XF (match_operand:XF 1 "register_operand" "0")))] ! "!TARGET_64BIT && TARGET_80387 && !TARGET_NO_FANCY_MATH_387 ! && (TARGET_IEEE_FP || flag_unsafe_math_optimizations) " "fsqrt" [(set_attr "type" "fpspc") (set_attr "mode" "XF") *************** *** 10611,10617 **** [(set (match_operand:TF 0 "register_operand" "=f") (sqrt:TF (match_operand:TF 1 "register_operand" "0")))] "! TARGET_NO_FANCY_MATH_387 && TARGET_80387 ! && (TARGET_IEEE_FP || flag_fast_math) " "fsqrt" [(set_attr "type" "fpspc") (set_attr "mode" "XF") --- 14712,14718 ---- [(set (match_operand:TF 0 "register_operand" "=f") (sqrt:TF (match_operand:TF 1 "register_operand" "0")))] "! TARGET_NO_FANCY_MATH_387 && TARGET_80387 ! && (TARGET_IEEE_FP || flag_unsafe_math_optimizations) " "fsqrt" [(set_attr "type" "fpspc") (set_attr "mode" "XF") *************** *** 10621,10627 **** [(set (match_operand:XF 0 "register_operand" "=f") (sqrt:XF (float_extend:XF (match_operand:DF 1 "register_operand" "0"))))] ! "! TARGET_NO_FANCY_MATH_387 && TARGET_80387" "fsqrt" [(set_attr "type" "fpspc") (set_attr "mode" "XF") --- 14722,14728 ---- [(set (match_operand:XF 0 "register_operand" "=f") (sqrt:XF (float_extend:XF (match_operand:DF 1 "register_operand" "0"))))] ! "!TARGET_64BIT && TARGET_80387 && !TARGET_NO_FANCY_MATH_387" "fsqrt" [(set_attr "type" "fpspc") (set_attr "mode" "XF") *************** *** 10641,10647 **** [(set (match_operand:XF 0 "register_operand" "=f") (sqrt:XF (float_extend:XF (match_operand:SF 1 "register_operand" "0"))))] ! "! TARGET_NO_FANCY_MATH_387 && TARGET_80387" "fsqrt" [(set_attr "type" "fpspc") (set_attr "mode" "XF") --- 14742,14748 ---- [(set (match_operand:XF 0 "register_operand" "=f") (sqrt:XF (float_extend:XF (match_operand:SF 1 "register_operand" "0"))))] ! "!TARGET_64BIT && TARGET_80387 && !TARGET_NO_FANCY_MATH_387" "fsqrt" [(set_attr "type" "fpspc") (set_attr "mode" "XF") *************** *** 10660,10666 **** (define_insn "sindf2" [(set (match_operand:DF 0 "register_operand" "=f") (unspec:DF [(match_operand:DF 1 "register_operand" "0")] 1))] ! "! TARGET_NO_FANCY_MATH_387 && TARGET_80387 && flag_fast_math" "fsin" [(set_attr "type" "fpspc") (set_attr "mode" "DF")]) --- 14761,14768 ---- (define_insn "sindf2" [(set (match_operand:DF 0 "register_operand" "=f") (unspec:DF [(match_operand:DF 1 "register_operand" "0")] 1))] ! "! TARGET_NO_FANCY_MATH_387 && TARGET_80387 ! && flag_unsafe_math_optimizations" "fsin" [(set_attr "type" "fpspc") (set_attr "mode" "DF")]) *************** *** 10668,10674 **** (define_insn "sinsf2" [(set (match_operand:SF 0 "register_operand" "=f") (unspec:SF [(match_operand:SF 1 "register_operand" "0")] 1))] ! "! TARGET_NO_FANCY_MATH_387 && TARGET_80387 && flag_fast_math" "fsin" [(set_attr "type" "fpspc") (set_attr "mode" "SF")]) --- 14770,14777 ---- (define_insn "sinsf2" [(set (match_operand:SF 0 "register_operand" "=f") (unspec:SF [(match_operand:SF 1 "register_operand" "0")] 1))] ! "! TARGET_NO_FANCY_MATH_387 && TARGET_80387 ! && flag_unsafe_math_optimizations" "fsin" [(set_attr "type" "fpspc") (set_attr "mode" "SF")]) *************** *** 10677,10683 **** [(set (match_operand:DF 0 "register_operand" "=f") (unspec:DF [(float_extend:DF (match_operand:SF 1 "register_operand" "0"))] 1))] ! "! TARGET_NO_FANCY_MATH_387 && TARGET_80387 && flag_fast_math" "fsin" [(set_attr "type" "fpspc") (set_attr "mode" "DF")]) --- 14780,14787 ---- [(set (match_operand:DF 0 "register_operand" "=f") (unspec:DF [(float_extend:DF (match_operand:SF 1 "register_operand" "0"))] 1))] ! "! TARGET_NO_FANCY_MATH_387 && TARGET_80387 ! && flag_unsafe_math_optimizations" "fsin" [(set_attr "type" "fpspc") (set_attr "mode" "DF")]) *************** *** 10685,10691 **** (define_insn "sinxf2" [(set (match_operand:XF 0 "register_operand" "=f") (unspec:XF [(match_operand:XF 1 "register_operand" "0")] 1))] ! "! TARGET_NO_FANCY_MATH_387 && TARGET_80387 && flag_fast_math" "fsin" [(set_attr "type" "fpspc") (set_attr "mode" "XF")]) --- 14789,14796 ---- (define_insn "sinxf2" [(set (match_operand:XF 0 "register_operand" "=f") (unspec:XF [(match_operand:XF 1 "register_operand" "0")] 1))] ! "!TARGET_64BIT && TARGET_80387 && !TARGET_NO_FANCY_MATH_387 ! && flag_unsafe_math_optimizations" "fsin" [(set_attr "type" "fpspc") (set_attr "mode" "XF")]) *************** *** 10693,10699 **** (define_insn "sintf2" [(set (match_operand:TF 0 "register_operand" "=f") (unspec:TF [(match_operand:TF 1 "register_operand" "0")] 1))] ! "! TARGET_NO_FANCY_MATH_387 && TARGET_80387 && flag_fast_math" "fsin" [(set_attr "type" "fpspc") (set_attr "mode" "XF")]) --- 14798,14805 ---- (define_insn "sintf2" [(set (match_operand:TF 0 "register_operand" "=f") (unspec:TF [(match_operand:TF 1 "register_operand" "0")] 1))] ! "! TARGET_NO_FANCY_MATH_387 && TARGET_80387 ! && flag_unsafe_math_optimizations" "fsin" [(set_attr "type" "fpspc") (set_attr "mode" "XF")]) *************** *** 10701,10707 **** (define_insn "cosdf2" [(set (match_operand:DF 0 "register_operand" "=f") (unspec:DF [(match_operand:DF 1 "register_operand" "0")] 2))] ! "! TARGET_NO_FANCY_MATH_387 && TARGET_80387 && flag_fast_math" "fcos" [(set_attr "type" "fpspc") (set_attr "mode" "DF")]) --- 14807,14814 ---- (define_insn "cosdf2" [(set (match_operand:DF 0 "register_operand" "=f") (unspec:DF [(match_operand:DF 1 "register_operand" "0")] 2))] ! "! TARGET_NO_FANCY_MATH_387 && TARGET_80387 ! && flag_unsafe_math_optimizations" "fcos" [(set_attr "type" "fpspc") (set_attr "mode" "DF")]) *************** *** 10709,10715 **** (define_insn "cossf2" [(set (match_operand:SF 0 "register_operand" "=f") (unspec:SF [(match_operand:SF 1 "register_operand" "0")] 2))] ! "! TARGET_NO_FANCY_MATH_387 && TARGET_80387 && flag_fast_math" "fcos" [(set_attr "type" "fpspc") (set_attr "mode" "SF")]) --- 14816,14823 ---- (define_insn "cossf2" [(set (match_operand:SF 0 "register_operand" "=f") (unspec:SF [(match_operand:SF 1 "register_operand" "0")] 2))] ! "! TARGET_NO_FANCY_MATH_387 && TARGET_80387 ! && flag_unsafe_math_optimizations" "fcos" [(set_attr "type" "fpspc") (set_attr "mode" "SF")]) *************** *** 10718,10724 **** [(set (match_operand:DF 0 "register_operand" "=f") (unspec:DF [(float_extend:DF (match_operand:SF 1 "register_operand" "0"))] 2))] ! "! TARGET_NO_FANCY_MATH_387 && TARGET_80387 && flag_fast_math" "fcos" [(set_attr "type" "fpspc") (set_attr "mode" "DF")]) --- 14826,14833 ---- [(set (match_operand:DF 0 "register_operand" "=f") (unspec:DF [(float_extend:DF (match_operand:SF 1 "register_operand" "0"))] 2))] ! "! TARGET_NO_FANCY_MATH_387 && TARGET_80387 ! && flag_unsafe_math_optimizations" "fcos" [(set_attr "type" "fpspc") (set_attr "mode" "DF")]) *************** *** 10726,10732 **** (define_insn "cosxf2" [(set (match_operand:XF 0 "register_operand" "=f") (unspec:XF [(match_operand:XF 1 "register_operand" "0")] 2))] ! "! TARGET_NO_FANCY_MATH_387 && TARGET_80387 && flag_fast_math" "fcos" [(set_attr "type" "fpspc") (set_attr "mode" "XF")]) --- 14835,14842 ---- (define_insn "cosxf2" [(set (match_operand:XF 0 "register_operand" "=f") (unspec:XF [(match_operand:XF 1 "register_operand" "0")] 2))] ! "! TARGET_NO_FANCY_MATH_387 && TARGET_80387 ! && flag_unsafe_math_optimizations" "fcos" [(set_attr "type" "fpspc") (set_attr "mode" "XF")]) *************** *** 10734,10740 **** (define_insn "costf2" [(set (match_operand:TF 0 "register_operand" "=f") (unspec:TF [(match_operand:TF 1 "register_operand" "0")] 2))] ! "! TARGET_NO_FANCY_MATH_387 && TARGET_80387 && flag_fast_math" "fcos" [(set_attr "type" "fpspc") (set_attr "mode" "XF")]) --- 14844,14851 ---- (define_insn "costf2" [(set (match_operand:TF 0 "register_operand" "=f") (unspec:TF [(match_operand:TF 1 "register_operand" "0")] 2))] ! "! TARGET_NO_FANCY_MATH_387 && TARGET_80387 ! && flag_unsafe_math_optimizations" "fcos" [(set_attr "type" "fpspc") (set_attr "mode" "XF")]) *************** *** 10753,10946 **** (use (match_operand:SI 2 "nonmemory_operand" "")) (use (match_operand:SI 3 "const_int_operand" ""))] "" - " { ! rtx srcreg, destreg, countreg; ! int align = 0; ! int count = -1; ! rtx insns; ! ! start_sequence (); ! ! if (GET_CODE (operands[3]) == CONST_INT) ! align = INTVAL (operands[3]); ! ! /* This simple hack avoids all inlining code and simplifies code bellow. */ ! if (!TARGET_ALIGN_STRINGOPS) ! align = 32; ! ! if (GET_CODE (operands[2]) == CONST_INT) ! count = INTVAL (operands[2]); ! ! destreg = copy_to_mode_reg (Pmode, XEXP (operands[0], 0)); ! srcreg = copy_to_mode_reg (Pmode, XEXP (operands[1], 0)); ! ! emit_insn (gen_cld ()); ! ! /* When optimizing for size emit simple rep ; movsb instruction for ! counts not divisible by 4. */ ! if ((!optimize || optimize_size) ! && (count < 0 || (count & 0x03))) ! { ! countreg = copy_to_mode_reg (SImode, operands[2]); ! emit_insn (gen_rep_movqi (destreg, srcreg, countreg, ! destreg, srcreg, countreg)); ! } ! /* For constant aligned (or small unaligned) copies use rep movsl ! followed by code copying the rest. For PentiumPro ensure 8 byte ! alignment to allow rep movsl acceleration. */ ! else if (count >= 0 ! && (align >= 8 ! || (!TARGET_PENTIUMPRO && align >= 4) ! || optimize_size || count < 64)) ! { ! if (count & ~0x03) ! { ! countreg = copy_to_mode_reg (SImode, ! GEN_INT ((count >> 2) ! & 0x3fffffff)); ! emit_insn (gen_rep_movsi (destreg, srcreg, countreg, ! destreg, srcreg, countreg)); ! } ! if (count & 0x02) ! emit_insn (gen_strmovhi (destreg, srcreg)); ! if (count & 0x01) ! emit_insn (gen_strmovqi (destreg, srcreg)); ! } ! /* The generic code based on the glibc implementation: ! - align destination to 4 bytes (8 byte alignment is used for PentiumPro ! allowing accelerated copying there) ! - copy the data using rep movsl ! - copy the rest. */ ! else { ! rtx countreg2; ! rtx label = NULL; ! ! /* In case we don't know anything about the alignment, default to ! library version, since it is usually equally fast and result in ! shorter code. */ ! if (!TARGET_INLINE_ALL_STRINGOPS && align < 4) ! { ! end_sequence (); ! FAIL; ! } ! ! if (TARGET_SINGLE_STRINGOP) ! emit_insn (gen_cld ()); ! ! countreg2 = gen_reg_rtx (SImode); ! countreg = copy_to_mode_reg (SImode, operands[2]); ! ! /* We don't use loops to align destination and to copy parts smaller ! than 4 bytes, because gcc is able to optimize such code better (in ! the case the destination or the count really is aligned, gcc is often ! able to predict the branches) and also it is friendlier to the ! hardware branch prediction. ! ! Using loops is benefical for generic case, because we can ! handle small counts using the loops. Many CPUs (such as Athlon) ! have large REP prefix setup costs. ! ! This is quite costy. Maybe we can revisit this decision later or ! add some customizability to this code. */ ! ! if (count < 0 ! && align < (TARGET_PENTIUMPRO && (count < 0 || count >= 260) ? 8 : 4)) ! { ! label = gen_label_rtx (); ! emit_cmp_and_jump_insns (countreg, GEN_INT (3), ! LEU, 0, SImode, 1, 0, label); ! } ! if (align <= 1) ! { ! rtx label = gen_label_rtx (); ! rtx tmpcount = gen_reg_rtx (SImode); ! emit_insn (gen_andsi3 (tmpcount, destreg, GEN_INT (1))); ! emit_cmp_and_jump_insns (tmpcount, GEN_INT (0), EQ, 0, ! SImode, 1, 0, label); ! emit_insn (gen_strmovqi (destreg, srcreg)); ! emit_insn (gen_addsi3 (countreg, countreg, constm1_rtx)); ! emit_label (label); ! LABEL_NUSES (label) = 1; ! } ! if (align <= 2) ! { ! rtx label = gen_label_rtx (); ! rtx tmpcount = gen_reg_rtx (SImode); ! emit_insn (gen_andsi3 (tmpcount, destreg, GEN_INT (2))); ! emit_cmp_and_jump_insns (tmpcount, GEN_INT (0), EQ, 0, ! SImode, 1, 0, label); ! emit_insn (gen_strmovhi (destreg, srcreg)); ! emit_insn (gen_addsi3 (countreg, countreg, GEN_INT (-2))); ! emit_label (label); ! LABEL_NUSES (label) = 1; ! } ! if (align <= 4 && TARGET_PENTIUMPRO && (count < 1 || count >= 260)) ! { ! rtx label = gen_label_rtx (); ! rtx tmpcount = gen_reg_rtx (SImode); ! emit_insn (gen_andsi3 (tmpcount, destreg, GEN_INT (4))); ! emit_cmp_and_jump_insns (tmpcount, GEN_INT (0), EQ, 0, ! SImode, 1, 0, label); ! emit_insn (gen_strmovsi (destreg, srcreg)); ! emit_insn (gen_addsi3 (countreg, countreg, GEN_INT (-4))); ! emit_label (label); ! LABEL_NUSES (label) = 1; ! } ! ! if (!TARGET_SINGLE_STRINGOP) ! emit_insn (gen_cld()); ! emit_insn (gen_lshrsi3 (countreg2, countreg, GEN_INT (2))); ! emit_insn (gen_rep_movsi (destreg, srcreg, countreg2, ! destreg, srcreg, countreg2)); ! ! if (label) ! { ! emit_label (label); ! LABEL_NUSES (label) = 1; ! } ! if (align > 2 && count > 0 && (count & 2)) ! emit_insn (gen_strmovhi (destreg, srcreg)); ! if (align <= 2 || count < 0) ! { ! rtx label = gen_label_rtx (); ! rtx tmpcount = gen_reg_rtx (SImode); ! emit_insn (gen_andsi3 (tmpcount, countreg, GEN_INT (2))); ! emit_cmp_and_jump_insns (tmpcount, GEN_INT (0), EQ, 0, ! SImode, 1, 0, label); ! emit_insn (gen_strmovhi (destreg, srcreg)); ! emit_label (label); ! LABEL_NUSES (label) = 1; ! } ! if (align > 1 && count > 0 && (count & 1)) ! emit_insn (gen_strmovqi (destreg, srcreg)); ! if (align <= 1 || count < 0) ! { ! rtx label = gen_label_rtx (); ! rtx tmpcount = gen_reg_rtx (SImode); ! emit_insn (gen_andsi3 (tmpcount, countreg, GEN_INT (1))); ! emit_cmp_and_jump_insns (tmpcount, GEN_INT (0), EQ, 0, ! SImode, 1, 0, label); ! emit_insn (gen_strmovqi (destreg, srcreg)); ! emit_label (label); ! LABEL_NUSES (label) = 1; ! } } - insns = get_insns (); - end_sequence (); - - ix86_set_move_mem_attrs (insns, operands[0], operands[1], destreg, srcreg); - emit_insns (insns); - DONE; - }") - - ;; Most CPUs don't like single string operations - ;; Handle this case here to simplify previous expander. (define_expand "strmovsi" [(set (match_dup 2) --- 14864,14913 ---- (use (match_operand:SI 2 "nonmemory_operand" "")) (use (match_operand:SI 3 "const_int_operand" ""))] "" { ! if (ix86_expand_movstr (operands[0], operands[1], operands[2], operands[3])) ! DONE; ! else ! FAIL; ! }) ! (define_expand "movstrdi" ! [(use (match_operand:BLK 0 "memory_operand" "")) ! (use (match_operand:BLK 1 "memory_operand" "")) ! (use (match_operand:DI 2 "nonmemory_operand" "")) ! (use (match_operand:DI 3 "const_int_operand" ""))] ! "TARGET_64BIT" ! { ! if (ix86_expand_movstr (operands[0], operands[1], operands[2], operands[3])) ! DONE; ! else ! FAIL; ! }) ! ;; Most CPUs don't like single string operations ! ;; Handle this case here to simplify previous expander. ! (define_expand "strmovdi_rex64" ! [(set (match_dup 2) ! (mem:DI (match_operand:DI 1 "register_operand" ""))) ! (set (mem:DI (match_operand:DI 0 "register_operand" "")) ! (match_dup 2)) ! (parallel [(set (match_dup 0) (plus:DI (match_dup 0) (const_int 8))) ! (clobber (reg:CC 17))]) ! (parallel [(set (match_dup 1) (plus:DI (match_dup 1) (const_int 8))) ! (clobber (reg:CC 17))])] ! "TARGET_64BIT" ! { ! if (TARGET_SINGLE_STRINGOP || optimize_size) { ! emit_insn (gen_strmovdi_rex_1 (operands[0], operands[1], operands[0], ! operands[1])); ! DONE; } + else + operands[2] = gen_reg_rtx (DImode); + }) (define_expand "strmovsi" [(set (match_dup 2) *************** *** 10952,10959 **** (parallel [(set (match_dup 1) (plus:SI (match_dup 1) (const_int 4))) (clobber (reg:CC 17))])] "" - " { if (TARGET_SINGLE_STRINGOP || optimize_size) { emit_insn (gen_strmovsi_1 (operands[0], operands[1], operands[0], --- 14919,14930 ---- (parallel [(set (match_dup 1) (plus:SI (match_dup 1) (const_int 4))) (clobber (reg:CC 17))])] "" { + if (TARGET_64BIT) + { + emit_insn (gen_strmovsi_rex64 (operands[0], operands[1])); + DONE; + } if (TARGET_SINGLE_STRINGOP || optimize_size) { emit_insn (gen_strmovsi_1 (operands[0], operands[1], operands[0], *************** *** 10962,10968 **** } else operands[2] = gen_reg_rtx (SImode); ! }") (define_expand "strmovhi" [(set (match_dup 2) --- 14933,14960 ---- } else operands[2] = gen_reg_rtx (SImode); ! }) ! ! (define_expand "strmovsi_rex64" ! [(set (match_dup 2) ! (mem:SI (match_operand:DI 1 "register_operand" ""))) ! (set (mem:SI (match_operand:DI 0 "register_operand" "")) ! (match_dup 2)) ! (parallel [(set (match_dup 0) (plus:DI (match_dup 0) (const_int 4))) ! (clobber (reg:CC 17))]) ! (parallel [(set (match_dup 1) (plus:DI (match_dup 1) (const_int 4))) ! (clobber (reg:CC 17))])] ! "TARGET_64BIT" ! { ! if (TARGET_SINGLE_STRINGOP || optimize_size) ! { ! emit_insn (gen_strmovsi_rex_1 (operands[0], operands[1], operands[0], ! operands[1])); ! DONE; ! } ! else ! operands[2] = gen_reg_rtx (SImode); ! }) (define_expand "strmovhi" [(set (match_dup 2) *************** *** 10974,10981 **** (parallel [(set (match_dup 1) (plus:SI (match_dup 1) (const_int 2))) (clobber (reg:CC 17))])] "" - " { if (TARGET_SINGLE_STRINGOP || optimize_size) { emit_insn (gen_strmovhi_1 (operands[0], operands[1], operands[0], --- 14966,14977 ---- (parallel [(set (match_dup 1) (plus:SI (match_dup 1) (const_int 2))) (clobber (reg:CC 17))])] "" { + if (TARGET_64BIT) + { + emit_insn (gen_strmovhi_rex64 (operands[0], operands[1])); + DONE; + } if (TARGET_SINGLE_STRINGOP || optimize_size) { emit_insn (gen_strmovhi_1 (operands[0], operands[1], operands[0], *************** *** 10984,10990 **** } else operands[2] = gen_reg_rtx (HImode); ! }") (define_expand "strmovqi" [(set (match_dup 2) --- 14980,15007 ---- } else operands[2] = gen_reg_rtx (HImode); ! }) ! ! (define_expand "strmovhi_rex64" ! [(set (match_dup 2) ! (mem:HI (match_operand:DI 1 "register_operand" ""))) ! (set (mem:HI (match_operand:DI 0 "register_operand" "")) ! (match_dup 2)) ! (parallel [(set (match_dup 0) (plus:DI (match_dup 0) (const_int 2))) ! (clobber (reg:CC 17))]) ! (parallel [(set (match_dup 1) (plus:DI (match_dup 1) (const_int 2))) ! (clobber (reg:CC 17))])] ! "TARGET_64BIT" ! { ! if (TARGET_SINGLE_STRINGOP || optimize_size) ! { ! emit_insn (gen_strmovhi_rex_1 (operands[0], operands[1], operands[0], ! operands[1])); ! DONE; ! } ! else ! operands[2] = gen_reg_rtx (HImode); ! }) (define_expand "strmovqi" [(set (match_dup 2) *************** *** 10996,11003 **** (parallel [(set (match_dup 1) (plus:SI (match_dup 1) (const_int 1))) (clobber (reg:CC 17))])] "" - " { if (TARGET_SINGLE_STRINGOP || optimize_size) { emit_insn (gen_strmovqi_1 (operands[0], operands[1], operands[0], --- 15013,15024 ---- (parallel [(set (match_dup 1) (plus:SI (match_dup 1) (const_int 1))) (clobber (reg:CC 17))])] "" { + if (TARGET_64BIT) + { + emit_insn (gen_strmovqi_rex64 (operands[0], operands[1])); + DONE; + } if (TARGET_SINGLE_STRINGOP || optimize_size) { emit_insn (gen_strmovqi_1 (operands[0], operands[1], operands[0], *************** *** 11006,11012 **** } else operands[2] = gen_reg_rtx (QImode); ! }") (define_insn "strmovsi_1" [(set (mem:SI (match_operand:SI 2 "register_operand" "0")) --- 15027,15070 ---- } else operands[2] = gen_reg_rtx (QImode); ! }) ! ! (define_expand "strmovqi_rex64" ! [(set (match_dup 2) ! (mem:QI (match_operand:DI 1 "register_operand" ""))) ! (set (mem:QI (match_operand:DI 0 "register_operand" "")) ! (match_dup 2)) ! (parallel [(set (match_dup 0) (plus:DI (match_dup 0) (const_int 1))) ! (clobber (reg:CC 17))]) ! (parallel [(set (match_dup 1) (plus:DI (match_dup 1) (const_int 1))) ! (clobber (reg:CC 17))])] ! "TARGET_64BIT" ! { ! if (TARGET_SINGLE_STRINGOP || optimize_size) ! { ! emit_insn (gen_strmovqi_rex_1 (operands[0], operands[1], operands[0], ! operands[1])); ! DONE; ! } ! else ! operands[2] = gen_reg_rtx (QImode); ! }) ! ! (define_insn "strmovdi_rex_1" ! [(set (mem:DI (match_operand:DI 2 "register_operand" "0")) ! (mem:DI (match_operand:DI 3 "register_operand" "1"))) ! (set (match_operand:DI 0 "register_operand" "=D") ! (plus:DI (match_dup 2) ! (const_int 8))) ! (set (match_operand:DI 1 "register_operand" "=S") ! (plus:DI (match_dup 3) ! (const_int 8))) ! (use (reg:SI 19))] ! "TARGET_64BIT && (TARGET_SINGLE_STRINGOP || optimize_size)" ! "movsq" ! [(set_attr "type" "str") ! (set_attr "mode" "DI") ! (set_attr "memory" "both")]) (define_insn "strmovsi_1" [(set (mem:SI (match_operand:SI 2 "register_operand" "0")) *************** *** 11018,11025 **** (plus:SI (match_dup 3) (const_int 4))) (use (reg:SI 19))] ! "TARGET_SINGLE_STRINGOP || optimize_size" ! "movsl" [(set_attr "type" "str") (set_attr "mode" "SI") (set_attr "memory" "both")]) --- 15076,15099 ---- (plus:SI (match_dup 3) (const_int 4))) (use (reg:SI 19))] ! "!TARGET_64BIT && (TARGET_SINGLE_STRINGOP || optimize_size)" ! "{movsl|movsd}" ! [(set_attr "type" "str") ! (set_attr "mode" "SI") ! (set_attr "memory" "both")]) ! ! (define_insn "strmovsi_rex_1" ! [(set (mem:SI (match_operand:DI 2 "register_operand" "0")) ! (mem:SI (match_operand:DI 3 "register_operand" "1"))) ! (set (match_operand:DI 0 "register_operand" "=D") ! (plus:DI (match_dup 2) ! (const_int 4))) ! (set (match_operand:DI 1 "register_operand" "=S") ! (plus:DI (match_dup 3) ! (const_int 4))) ! (use (reg:SI 19))] ! "TARGET_64BIT && (TARGET_SINGLE_STRINGOP || optimize_size)" ! "{movsl|movsd}" [(set_attr "type" "str") (set_attr "mode" "SI") (set_attr "memory" "both")]) *************** *** 11034,11040 **** (plus:SI (match_dup 3) (const_int 2))) (use (reg:SI 19))] ! "TARGET_SINGLE_STRINGOP || optimize_size" "movsw" [(set_attr "type" "str") (set_attr "memory" "both") --- 15108,15130 ---- (plus:SI (match_dup 3) (const_int 2))) (use (reg:SI 19))] ! "!TARGET_64BIT && (TARGET_SINGLE_STRINGOP || optimize_size)" ! "movsw" ! [(set_attr "type" "str") ! (set_attr "memory" "both") ! (set_attr "mode" "HI")]) ! ! (define_insn "strmovhi_rex_1" ! [(set (mem:HI (match_operand:DI 2 "register_operand" "0")) ! (mem:HI (match_operand:DI 3 "register_operand" "1"))) ! (set (match_operand:DI 0 "register_operand" "=D") ! (plus:DI (match_dup 2) ! (const_int 2))) ! (set (match_operand:DI 1 "register_operand" "=S") ! (plus:DI (match_dup 3) ! (const_int 2))) ! (use (reg:SI 19))] ! "TARGET_64BIT && (TARGET_SINGLE_STRINGOP || optimize_size)" "movsw" [(set_attr "type" "str") (set_attr "memory" "both") *************** *** 11050,11061 **** (plus:SI (match_dup 3) (const_int 1))) (use (reg:SI 19))] ! "TARGET_SINGLE_STRINGOP || optimize_size" "movsb" [(set_attr "type" "str") (set_attr "memory" "both") (set_attr "mode" "QI")]) (define_insn "rep_movsi" [(set (match_operand:SI 2 "register_operand" "=c") (const_int 0)) (set (match_operand:SI 0 "register_operand" "=D") --- 15140,15187 ---- (plus:SI (match_dup 3) (const_int 1))) (use (reg:SI 19))] ! "!TARGET_64BIT && (TARGET_SINGLE_STRINGOP || optimize_size)" "movsb" [(set_attr "type" "str") (set_attr "memory" "both") (set_attr "mode" "QI")]) + (define_insn "strmovqi_rex_1" + [(set (mem:QI (match_operand:DI 2 "register_operand" "0")) + (mem:QI (match_operand:DI 3 "register_operand" "1"))) + (set (match_operand:DI 0 "register_operand" "=D") + (plus:DI (match_dup 2) + (const_int 1))) + (set (match_operand:DI 1 "register_operand" "=S") + (plus:DI (match_dup 3) + (const_int 1))) + (use (reg:SI 19))] + "TARGET_64BIT && (TARGET_SINGLE_STRINGOP || optimize_size)" + "movsb" + [(set_attr "type" "str") + (set_attr "memory" "both") + (set_attr "mode" "QI")]) + + (define_insn "rep_movdi_rex64" + [(set (match_operand:DI 2 "register_operand" "=c") (const_int 0)) + (set (match_operand:DI 0 "register_operand" "=D") + (plus:DI (ashift:DI (match_operand:DI 5 "register_operand" "2") + (const_int 3)) + (match_operand:DI 3 "register_operand" "0"))) + (set (match_operand:DI 1 "register_operand" "=S") + (plus:DI (ashift:DI (match_dup 5) (const_int 3)) + (match_operand:DI 4 "register_operand" "1"))) + (set (mem:BLK (match_dup 3)) + (mem:BLK (match_dup 4))) + (use (match_dup 5)) + (use (reg:SI 19))] + "TARGET_64BIT" + "{rep\;movsq|rep movsq}" + [(set_attr "type" "str") + (set_attr "prefix_rep" "1") + (set_attr "memory" "both") + (set_attr "mode" "DI")]) + (define_insn "rep_movsi" [(set (match_operand:SI 2 "register_operand" "=c") (const_int 0)) (set (match_operand:SI 0 "register_operand" "=D") *************** *** 11069,11076 **** (mem:BLK (match_dup 4))) (use (match_dup 5)) (use (reg:SI 19))] ! "" ! "rep\;movsl|rep movsd" [(set_attr "type" "str") (set_attr "prefix_rep" "1") (set_attr "memory" "both") --- 15195,15222 ---- (mem:BLK (match_dup 4))) (use (match_dup 5)) (use (reg:SI 19))] ! "!TARGET_64BIT" ! "{rep\;movsl|rep movsd}" ! [(set_attr "type" "str") ! (set_attr "prefix_rep" "1") ! (set_attr "memory" "both") ! (set_attr "mode" "SI")]) ! ! (define_insn "rep_movsi_rex64" ! [(set (match_operand:DI 2 "register_operand" "=c") (const_int 0)) ! (set (match_operand:DI 0 "register_operand" "=D") ! (plus:DI (ashift:DI (match_operand:DI 5 "register_operand" "2") ! (const_int 2)) ! (match_operand:DI 3 "register_operand" "0"))) ! (set (match_operand:DI 1 "register_operand" "=S") ! (plus:DI (ashift:DI (match_dup 5) (const_int 2)) ! (match_operand:DI 4 "register_operand" "1"))) ! (set (mem:BLK (match_dup 3)) ! (mem:BLK (match_dup 4))) ! (use (match_dup 5)) ! (use (reg:SI 19))] ! "TARGET_64BIT" ! "{rep\;movsl|rep movsd}" [(set_attr "type" "str") (set_attr "prefix_rep" "1") (set_attr "memory" "both") *************** *** 11087,11094 **** (mem:BLK (match_dup 4))) (use (match_dup 5)) (use (reg:SI 19))] ! "" ! "rep\;movsb|rep movsb" [(set_attr "type" "str") (set_attr "prefix_rep" "1") (set_attr "memory" "both") --- 15233,15258 ---- (mem:BLK (match_dup 4))) (use (match_dup 5)) (use (reg:SI 19))] ! "!TARGET_64BIT" ! "{rep\;movsb|rep movsb}" ! [(set_attr "type" "str") ! (set_attr "prefix_rep" "1") ! (set_attr "memory" "both") ! (set_attr "mode" "SI")]) ! ! (define_insn "rep_movqi_rex64" ! [(set (match_operand:DI 2 "register_operand" "=c") (const_int 0)) ! (set (match_operand:DI 0 "register_operand" "=D") ! (plus:DI (match_operand:DI 3 "register_operand" "0") ! (match_operand:DI 5 "register_operand" "2"))) ! (set (match_operand:DI 1 "register_operand" "=S") ! (plus:DI (match_operand:DI 4 "register_operand" "1") (match_dup 5))) ! (set (mem:BLK (match_dup 3)) ! (mem:BLK (match_dup 4))) ! (use (match_dup 5)) ! (use (reg:SI 19))] ! "TARGET_64BIT" ! "{rep\;movsb|rep movsb}" [(set_attr "type" "str") (set_attr "prefix_rep" "1") (set_attr "memory" "both") *************** *** 11097,11282 **** (define_expand "clrstrsi" [(use (match_operand:BLK 0 "memory_operand" "")) (use (match_operand:SI 1 "nonmemory_operand" "")) ! (use (match_operand:SI 2 "const_int_operand" ""))] "" - " { ! /* See comments in movstr expanders. The code is mostly identical. */ ! ! rtx destreg, zeroreg, countreg; ! int align = 0; ! int count = -1; ! rtx insns; ! ! start_sequence (); ! ! if (GET_CODE (operands[2]) == CONST_INT) ! align = INTVAL (operands[2]); ! ! /* This simple hack avoids all inlining code and simplifies code bellow. */ ! if (!TARGET_ALIGN_STRINGOPS) ! align = 32; ! ! if (GET_CODE (operands[1]) == CONST_INT) ! count = INTVAL (operands[1]); ! ! destreg = copy_to_mode_reg (Pmode, XEXP (operands[0], 0)); ! emit_insn (gen_cld ()); ! /* When optimizing for size emit simple rep ; movsb instruction for ! counts not divisible by 4. */ ! if ((!optimize || optimize_size) ! && (count < 0 || (count & 0x03))) ! { ! countreg = copy_to_mode_reg (SImode, operands[1]); ! zeroreg = copy_to_mode_reg (QImode, const0_rtx); ! emit_insn (gen_rep_stosqi (destreg, countreg, zeroreg, ! destreg, countreg)); ! } ! else if (count >= 0 ! && (align >= 8 ! || (!TARGET_PENTIUMPRO && align >= 4) ! || optimize_size || count < 64)) ! { ! zeroreg = copy_to_mode_reg (SImode, const0_rtx); ! if (INTVAL (operands[1]) & ~0x03) ! { ! countreg = copy_to_mode_reg (SImode, ! GEN_INT ((INTVAL (operands[1]) >> 2) ! & 0x3fffffff)); ! emit_insn (gen_rep_stossi (destreg, countreg, zeroreg, ! destreg, countreg)); ! } ! if (INTVAL (operands[1]) & 0x02) ! emit_insn (gen_strsethi (destreg, ! gen_rtx_SUBREG (HImode, zeroreg, 0))); ! if (INTVAL (operands[1]) & 0x01) ! emit_insn (gen_strsetqi (destreg, ! gen_rtx_SUBREG (QImode, zeroreg, 0))); ! } ! else { ! rtx countreg2; ! rtx label = NULL; ! ! /* In case we don't know anything about the alignment, default to ! library version, since it is usually equally fast and result in ! shorter code. */ ! if (!TARGET_INLINE_ALL_STRINGOPS && align < 4) ! { ! end_sequence (); ! FAIL; ! } ! ! if (TARGET_SINGLE_STRINGOP) ! emit_insn (gen_cld ()); ! ! countreg2 = gen_reg_rtx (SImode); ! countreg = copy_to_mode_reg (SImode, operands[1]); ! zeroreg = copy_to_mode_reg (SImode, const0_rtx); ! ! if (count < 0 ! && align < (TARGET_PENTIUMPRO && (count < 0 || count >= 260) ? 8 : 4)) ! { ! label = gen_label_rtx (); ! emit_cmp_and_jump_insns (countreg, GEN_INT (3), ! LEU, 0, SImode, 1, 0, label); ! } ! if (align <= 1) ! { ! rtx label = gen_label_rtx (); ! rtx tmpcount = gen_reg_rtx (SImode); ! emit_insn (gen_andsi3 (tmpcount, destreg, GEN_INT (1))); ! emit_cmp_and_jump_insns (tmpcount, GEN_INT (0), EQ, 0, ! SImode, 1, 0, label); ! emit_insn (gen_strsetqi (destreg, ! gen_rtx_SUBREG (QImode, zeroreg, 0))); ! emit_insn (gen_addsi3 (countreg, countreg, constm1_rtx)); ! emit_label (label); ! LABEL_NUSES (label) = 1; ! } ! if (align <= 2) ! { ! rtx label = gen_label_rtx (); ! rtx tmpcount = gen_reg_rtx (SImode); ! emit_insn (gen_andsi3 (tmpcount, destreg, GEN_INT (2))); ! emit_cmp_and_jump_insns (tmpcount, GEN_INT (0), EQ, 0, ! SImode, 1, 0, label); ! emit_insn (gen_strsethi (destreg, ! gen_rtx_SUBREG (HImode, zeroreg, 0))); ! emit_insn (gen_addsi3 (countreg, countreg, GEN_INT (-2))); ! emit_label (label); ! LABEL_NUSES (label) = 1; ! } ! if (align <= 4 && TARGET_PENTIUMPRO && (count < 1 || count >= 260)) ! { ! rtx label = gen_label_rtx (); ! rtx tmpcount = gen_reg_rtx (SImode); ! emit_insn (gen_andsi3 (tmpcount, destreg, GEN_INT (4))); ! emit_cmp_and_jump_insns (tmpcount, GEN_INT (0), EQ, 0, ! SImode, 1, 0, label); ! emit_insn (gen_strsetsi (destreg, zeroreg)); ! emit_insn (gen_addsi3 (countreg, countreg, GEN_INT (-4))); ! emit_label (label); ! LABEL_NUSES (label) = 1; ! } ! ! if (!TARGET_SINGLE_STRINGOP) ! emit_insn (gen_cld()); ! emit_insn (gen_lshrsi3 (countreg2, countreg, GEN_INT (2))); ! emit_insn (gen_rep_stossi (destreg, countreg2, zeroreg, ! destreg, countreg2)); ! ! if (label) ! { ! emit_label (label); ! LABEL_NUSES (label) = 1; ! } ! if (align > 2 && count > 0 && (count & 2)) ! emit_insn (gen_strsethi (destreg, ! gen_rtx_SUBREG (HImode, zeroreg, 0))); ! if (align <= 2 || count < 0) ! { ! rtx label = gen_label_rtx (); ! rtx tmpcount = gen_reg_rtx (SImode); ! emit_insn (gen_andsi3 (tmpcount, countreg, GEN_INT (2))); ! emit_cmp_and_jump_insns (tmpcount, GEN_INT (0), EQ, 0, ! SImode, 1, 0, label); ! emit_insn (gen_strsethi (destreg, ! gen_rtx_SUBREG (HImode, zeroreg, 0))); ! emit_label (label); ! LABEL_NUSES (label) = 1; ! } ! if (align > 1 && count > 0 && (count & 1)) ! emit_insn (gen_strsetqi (destreg, ! gen_rtx_SUBREG (QImode, zeroreg, 0))); ! if (align <= 1 || count < 0) ! { ! rtx label = gen_label_rtx (); ! rtx tmpcount = gen_reg_rtx (SImode); ! emit_insn (gen_andsi3 (tmpcount, countreg, GEN_INT (1))); ! emit_cmp_and_jump_insns (tmpcount, GEN_INT (0), EQ, 0, ! SImode, 1, 0, label); ! emit_insn (gen_strsetqi (destreg, ! gen_rtx_SUBREG (QImode, zeroreg, 0))); ! emit_label (label); ! LABEL_NUSES (label) = 1; ! } } ! ! insns = get_insns (); ! end_sequence (); ! ! ix86_set_move_mem_attrs (insns, operands[0], operands[0], destreg, destreg); ! emit_insns (insns); ! ! DONE; ! }") ! ! ;; Most CPUs don't like single string operations ! ;; Handle this case here to simplify previous expander. (define_expand "strsetsi" [(set (mem:SI (match_operand:SI 0 "register_operand" "")) --- 15261,15303 ---- (define_expand "clrstrsi" [(use (match_operand:BLK 0 "memory_operand" "")) (use (match_operand:SI 1 "nonmemory_operand" "")) ! (use (match_operand 2 "const_int_operand" ""))] "" { ! if (ix86_expand_clrstr (operands[0], operands[1], operands[2])) ! DONE; ! else ! FAIL; ! }) ! (define_expand "clrstrdi" ! [(use (match_operand:BLK 0 "memory_operand" "")) ! (use (match_operand:DI 1 "nonmemory_operand" "")) ! (use (match_operand 2 "const_int_operand" ""))] ! "TARGET_64BIT" ! { ! if (ix86_expand_clrstr (operands[0], operands[1], operands[2])) ! DONE; ! else ! FAIL; ! }) ! ;; Most CPUs don't like single string operations ! ;; Handle this case here to simplify previous expander. ! (define_expand "strsetdi_rex64" ! [(set (mem:DI (match_operand:DI 0 "register_operand" "")) ! (match_operand:DI 1 "register_operand" "")) ! (parallel [(set (match_dup 0) (plus:DI (match_dup 0) (const_int 8))) ! (clobber (reg:CC 17))])] ! "TARGET_64BIT" ! { ! if (TARGET_SINGLE_STRINGOP || optimize_size) { ! emit_insn (gen_strsetdi_rex_1 (operands[0], operands[0], operands[1])); ! DONE; } ! }) (define_expand "strsetsi" [(set (mem:SI (match_operand:SI 0 "register_operand" "")) *************** *** 11284,11297 **** (parallel [(set (match_dup 0) (plus:SI (match_dup 0) (const_int 4))) (clobber (reg:CC 17))])] "" - " { ! if (TARGET_SINGLE_STRINGOP || optimize_size) { emit_insn (gen_strsetsi_1 (operands[0], operands[0], operands[1])); DONE; } ! }") (define_expand "strsethi" [(set (mem:HI (match_operand:SI 0 "register_operand" "")) --- 15305,15336 ---- (parallel [(set (match_dup 0) (plus:SI (match_dup 0) (const_int 4))) (clobber (reg:CC 17))])] "" { ! if (TARGET_64BIT) ! { ! emit_insn (gen_strsetsi_rex64 (operands[0], operands[1])); ! DONE; ! } ! else if (TARGET_SINGLE_STRINGOP || optimize_size) { emit_insn (gen_strsetsi_1 (operands[0], operands[0], operands[1])); DONE; } ! }) ! ! (define_expand "strsetsi_rex64" ! [(set (mem:SI (match_operand:DI 0 "register_operand" "")) ! (match_operand:SI 1 "register_operand" "")) ! (parallel [(set (match_dup 0) (plus:DI (match_dup 0) (const_int 4))) ! (clobber (reg:CC 17))])] ! "TARGET_64BIT" ! { ! if (TARGET_SINGLE_STRINGOP || optimize_size) ! { ! emit_insn (gen_strsetsi_rex_1 (operands[0], operands[0], operands[1])); ! DONE; ! } ! }) (define_expand "strsethi" [(set (mem:HI (match_operand:SI 0 "register_operand" "")) *************** *** 11299,11312 **** (parallel [(set (match_dup 0) (plus:SI (match_dup 0) (const_int 2))) (clobber (reg:CC 17))])] "" - " { ! if (TARGET_SINGLE_STRINGOP || optimize_size) { emit_insn (gen_strsethi_1 (operands[0], operands[0], operands[1])); DONE; } ! }") (define_expand "strsetqi" [(set (mem:QI (match_operand:SI 0 "register_operand" "")) --- 15338,15369 ---- (parallel [(set (match_dup 0) (plus:SI (match_dup 0) (const_int 2))) (clobber (reg:CC 17))])] "" { ! if (TARGET_64BIT) ! { ! emit_insn (gen_strsethi_rex64 (operands[0], operands[1])); ! DONE; ! } ! else if (TARGET_SINGLE_STRINGOP || optimize_size) { emit_insn (gen_strsethi_1 (operands[0], operands[0], operands[1])); DONE; } ! }) ! ! (define_expand "strsethi_rex64" ! [(set (mem:HI (match_operand:DI 0 "register_operand" "")) ! (match_operand:HI 1 "register_operand" "")) ! (parallel [(set (match_dup 0) (plus:DI (match_dup 0) (const_int 2))) ! (clobber (reg:CC 17))])] ! "TARGET_64BIT" ! { ! if (TARGET_SINGLE_STRINGOP || optimize_size) ! { ! emit_insn (gen_strsethi_rex_1 (operands[0], operands[0], operands[1])); ! DONE; ! } ! }) (define_expand "strsetqi" [(set (mem:QI (match_operand:SI 0 "register_operand" "")) *************** *** 11314,11327 **** (parallel [(set (match_dup 0) (plus:SI (match_dup 0) (const_int 1))) (clobber (reg:CC 17))])] "" - " { ! if (TARGET_SINGLE_STRINGOP || optimize_size) { emit_insn (gen_strsetqi_1 (operands[0], operands[0], operands[1])); DONE; } ! }") (define_insn "strsetsi_1" [(set (mem:SI (match_operand:SI 1 "register_operand" "0")) --- 15371,15415 ---- (parallel [(set (match_dup 0) (plus:SI (match_dup 0) (const_int 1))) (clobber (reg:CC 17))])] "" { ! if (TARGET_64BIT) ! { ! emit_insn (gen_strsetqi_rex64 (operands[0], operands[1])); ! DONE; ! } ! else if (TARGET_SINGLE_STRINGOP || optimize_size) { emit_insn (gen_strsetqi_1 (operands[0], operands[0], operands[1])); DONE; } ! }) ! ! (define_expand "strsetqi_rex64" ! [(set (mem:QI (match_operand:DI 0 "register_operand" "")) ! (match_operand:QI 1 "register_operand" "")) ! (parallel [(set (match_dup 0) (plus:DI (match_dup 0) (const_int 1))) ! (clobber (reg:CC 17))])] ! "TARGET_64BIT" ! { ! if (TARGET_SINGLE_STRINGOP || optimize_size) ! { ! emit_insn (gen_strsetqi_rex_1 (operands[0], operands[0], operands[1])); ! DONE; ! } ! }) ! ! (define_insn "strsetdi_rex_1" ! [(set (mem:SI (match_operand:DI 1 "register_operand" "0")) ! (match_operand:SI 2 "register_operand" "a")) ! (set (match_operand:DI 0 "register_operand" "=D") ! (plus:DI (match_dup 1) ! (const_int 8))) ! (use (reg:SI 19))] ! "TARGET_64BIT && (TARGET_SINGLE_STRINGOP || optimize_size)" ! "stosq" ! [(set_attr "type" "str") ! (set_attr "memory" "store") ! (set_attr "mode" "DI")]) (define_insn "strsetsi_1" [(set (mem:SI (match_operand:SI 1 "register_operand" "0")) *************** *** 11330,11337 **** (plus:SI (match_dup 1) (const_int 4))) (use (reg:SI 19))] ! "TARGET_SINGLE_STRINGOP || optimize_size" ! "stosl" [(set_attr "type" "str") (set_attr "memory" "store") (set_attr "mode" "SI")]) --- 15418,15438 ---- (plus:SI (match_dup 1) (const_int 4))) (use (reg:SI 19))] ! "!TARGET_64BIT && (TARGET_SINGLE_STRINGOP || optimize_size)" ! "{stosl|stosd}" ! [(set_attr "type" "str") ! (set_attr "memory" "store") ! (set_attr "mode" "SI")]) ! ! (define_insn "strsetsi_rex_1" ! [(set (mem:SI (match_operand:DI 1 "register_operand" "0")) ! (match_operand:SI 2 "register_operand" "a")) ! (set (match_operand:DI 0 "register_operand" "=D") ! (plus:DI (match_dup 1) ! (const_int 4))) ! (use (reg:SI 19))] ! "TARGET_64BIT && (TARGET_SINGLE_STRINGOP || optimize_size)" ! "{stosl|stosd}" [(set_attr "type" "str") (set_attr "memory" "store") (set_attr "mode" "SI")]) *************** *** 11343,11349 **** (plus:SI (match_dup 1) (const_int 2))) (use (reg:SI 19))] ! "TARGET_SINGLE_STRINGOP || optimize_size" "stosw" [(set_attr "type" "str") (set_attr "memory" "store") --- 15444,15463 ---- (plus:SI (match_dup 1) (const_int 2))) (use (reg:SI 19))] ! "!TARGET_64BIT && (TARGET_SINGLE_STRINGOP || optimize_size)" ! "stosw" ! [(set_attr "type" "str") ! (set_attr "memory" "store") ! (set_attr "mode" "HI")]) ! ! (define_insn "strsethi_rex_1" ! [(set (mem:HI (match_operand:DI 1 "register_operand" "0")) ! (match_operand:HI 2 "register_operand" "a")) ! (set (match_operand:DI 0 "register_operand" "=D") ! (plus:DI (match_dup 1) ! (const_int 2))) ! (use (reg:SI 19))] ! "TARGET_64BIT && (TARGET_SINGLE_STRINGOP || optimize_size)" "stosw" [(set_attr "type" "str") (set_attr "memory" "store") *************** *** 11356,11367 **** (plus:SI (match_dup 1) (const_int 1))) (use (reg:SI 19))] ! "TARGET_SINGLE_STRINGOP || optimize_size" "stosb" [(set_attr "type" "str") (set_attr "memory" "store") (set_attr "mode" "QI")]) (define_insn "rep_stossi" [(set (match_operand:SI 1 "register_operand" "=c") (const_int 0)) (set (match_operand:SI 0 "register_operand" "=D") --- 15470,15512 ---- (plus:SI (match_dup 1) (const_int 1))) (use (reg:SI 19))] ! "!TARGET_64BIT && (TARGET_SINGLE_STRINGOP || optimize_size)" "stosb" [(set_attr "type" "str") (set_attr "memory" "store") (set_attr "mode" "QI")]) + (define_insn "strsetqi_rex_1" + [(set (mem:QI (match_operand:DI 1 "register_operand" "0")) + (match_operand:QI 2 "register_operand" "a")) + (set (match_operand:DI 0 "register_operand" "=D") + (plus:DI (match_dup 1) + (const_int 1))) + (use (reg:SI 19))] + "TARGET_64BIT && (TARGET_SINGLE_STRINGOP || optimize_size)" + "stosb" + [(set_attr "type" "str") + (set_attr "memory" "store") + (set_attr "mode" "QI")]) + + (define_insn "rep_stosdi_rex64" + [(set (match_operand:DI 1 "register_operand" "=c") (const_int 0)) + (set (match_operand:DI 0 "register_operand" "=D") + (plus:DI (ashift:DI (match_operand:DI 4 "register_operand" "1") + (const_int 3)) + (match_operand:DI 3 "register_operand" "0"))) + (set (mem:BLK (match_dup 3)) + (const_int 0)) + (use (match_operand:DI 2 "register_operand" "a")) + (use (match_dup 4)) + (use (reg:SI 19))] + "TARGET_64BIT" + "{rep\;stosq|rep stosq}" + [(set_attr "type" "str") + (set_attr "prefix_rep" "1") + (set_attr "memory" "store") + (set_attr "mode" "DI")]) + (define_insn "rep_stossi" [(set (match_operand:SI 1 "register_operand" "=c") (const_int 0)) (set (match_operand:SI 0 "register_operand" "=D") *************** *** 11373,11380 **** (use (match_operand:SI 2 "register_operand" "a")) (use (match_dup 4)) (use (reg:SI 19))] ! "" ! "rep\;stosl|rep stosd" [(set_attr "type" "str") (set_attr "prefix_rep" "1") (set_attr "memory" "store") --- 15518,15543 ---- (use (match_operand:SI 2 "register_operand" "a")) (use (match_dup 4)) (use (reg:SI 19))] ! "!TARGET_64BIT" ! "{rep\;stosl|rep stosd}" ! [(set_attr "type" "str") ! (set_attr "prefix_rep" "1") ! (set_attr "memory" "store") ! (set_attr "mode" "SI")]) ! ! (define_insn "rep_stossi_rex64" ! [(set (match_operand:DI 1 "register_operand" "=c") (const_int 0)) ! (set (match_operand:DI 0 "register_operand" "=D") ! (plus:DI (ashift:DI (match_operand:DI 4 "register_operand" "1") ! (const_int 2)) ! (match_operand:DI 3 "register_operand" "0"))) ! (set (mem:BLK (match_dup 3)) ! (const_int 0)) ! (use (match_operand:SI 2 "register_operand" "a")) ! (use (match_dup 4)) ! (use (reg:SI 19))] ! "TARGET_64BIT" ! "{rep\;stosl|rep stosd}" [(set_attr "type" "str") (set_attr "prefix_rep" "1") (set_attr "memory" "store") *************** *** 11390,11397 **** (use (match_operand:QI 2 "register_operand" "a")) (use (match_dup 4)) (use (reg:SI 19))] ! "" ! "rep\;stosb|rep stosb" [(set_attr "type" "str") (set_attr "prefix_rep" "1") (set_attr "memory" "store") --- 15553,15577 ---- (use (match_operand:QI 2 "register_operand" "a")) (use (match_dup 4)) (use (reg:SI 19))] ! "!TARGET_64BIT" ! "{rep\;stosb|rep stosb}" ! [(set_attr "type" "str") ! (set_attr "prefix_rep" "1") ! (set_attr "memory" "store") ! (set_attr "mode" "QI")]) ! ! (define_insn "rep_stosqi_rex64" ! [(set (match_operand:DI 1 "register_operand" "=c") (const_int 0)) ! (set (match_operand:DI 0 "register_operand" "=D") ! (plus:DI (match_operand:DI 3 "register_operand" "0") ! (match_operand:DI 4 "register_operand" "1"))) ! (set (mem:BLK (match_dup 3)) ! (const_int 0)) ! (use (match_operand:QI 2 "register_operand" "a")) ! (use (match_dup 4)) ! (use (reg:DI 19))] ! "TARGET_64BIT" ! "{rep\;stosb|rep stosb}" [(set_attr "type" "str") (set_attr "prefix_rep" "1") (set_attr "memory" "store") *************** *** 11401,11410 **** [(set (match_operand:SI 0 "register_operand" "") (compare:SI (match_operand:BLK 1 "general_operand" "") (match_operand:BLK 2 "general_operand" ""))) ! (use (match_operand:SI 3 "general_operand" "")) ! (use (match_operand:SI 4 "immediate_operand" ""))] "" - " { rtx addr1, addr2, out, outlow, count, countreg, align; --- 15581,15589 ---- [(set (match_operand:SI 0 "register_operand" "") (compare:SI (match_operand:BLK 1 "general_operand" "") (match_operand:BLK 2 "general_operand" ""))) ! (use (match_operand 3 "general_operand" "")) ! (use (match_operand 4 "immediate_operand" ""))] "" { rtx addr1, addr2, out, outlow, count, countreg, align; *************** *** 11416,11422 **** addr2 = copy_to_mode_reg (Pmode, XEXP (operands[2], 0)); count = operands[3]; ! countreg = copy_to_mode_reg (SImode, count); /* %%% Iff we are testing strict equality, we can use known alignment to good advantage. This may be possible with combine, particularly --- 15595,15601 ---- addr2 = copy_to_mode_reg (Pmode, XEXP (operands[2], 0)); count = operands[3]; ! countreg = ix86_zero_extend_to_Pmode (count); /* %%% Iff we are testing strict equality, we can use known alignment to good advantage. This may be possible with combine, particularly *************** *** 11431,11444 **** emit_move_insn (operands[0], const0_rtx); DONE; } ! emit_insn (gen_cmpstrsi_nz_1 (addr1, addr2, countreg, align, ! addr1, addr2, countreg)); } else { ! emit_insn (gen_cmpsi_1 (countreg, countreg)); ! emit_insn (gen_cmpstrsi_1 (addr1, addr2, countreg, align, ! addr1, addr2, countreg)); } outlow = gen_lowpart (QImode, out); --- 15610,15636 ---- emit_move_insn (operands[0], const0_rtx); DONE; } ! if (TARGET_64BIT) ! emit_insn (gen_cmpstrqi_nz_rex_1 (addr1, addr2, countreg, align, ! addr1, addr2, countreg)); ! else ! emit_insn (gen_cmpstrqi_nz_1 (addr1, addr2, countreg, align, ! addr1, addr2, countreg)); } else { ! if (TARGET_64BIT) ! { ! emit_insn (gen_cmpdi_1_rex64 (countreg, countreg)); ! emit_insn (gen_cmpstrqi_rex_1 (addr1, addr2, countreg, align, ! addr1, addr2, countreg)); ! } ! else ! { ! emit_insn (gen_cmpsi_1 (countreg, countreg)); ! emit_insn (gen_cmpstrqi_1 (addr1, addr2, countreg, align, ! addr1, addr2, countreg)); ! } } outlow = gen_lowpart (QImode, out); *************** *** 11449,11455 **** emit_move_insn (operands[0], out); DONE; ! }") ;; Produce a tri-state integer (-1, 0, 1) from condition codes. --- 15641,15647 ---- emit_move_insn (operands[0], out); DONE; ! }) ;; Produce a tri-state integer (-1, 0, 1) from condition codes. *************** *** 11469,11475 **** ;; memcmp recognizers. The `cmpsb' opcode does nothing if the count is ;; zero. Emit extra code to make sure that a zero-length compare is EQ. ! (define_insn "cmpstrsi_nz_1" [(set (reg:CC 17) (compare:CC (mem:BLK (match_operand:SI 4 "register_operand" "0")) (mem:BLK (match_operand:SI 5 "register_operand" "1")))) --- 15661,15667 ---- ;; memcmp recognizers. The `cmpsb' opcode does nothing if the count is ;; zero. Emit extra code to make sure that a zero-length compare is EQ. ! (define_insn "cmpstrqi_nz_1" [(set (reg:CC 17) (compare:CC (mem:BLK (match_operand:SI 4 "register_operand" "0")) (mem:BLK (match_operand:SI 5 "register_operand" "1")))) *************** *** 11479,11485 **** (clobber (match_operand:SI 0 "register_operand" "=S")) (clobber (match_operand:SI 1 "register_operand" "=D")) (clobber (match_operand:SI 2 "register_operand" "=c"))] ! "" "repz{\;| }cmpsb" [(set_attr "type" "str") (set_attr "mode" "QI") --- 15671,15693 ---- (clobber (match_operand:SI 0 "register_operand" "=S")) (clobber (match_operand:SI 1 "register_operand" "=D")) (clobber (match_operand:SI 2 "register_operand" "=c"))] ! "!TARGET_64BIT" ! "repz{\;| }cmpsb" ! [(set_attr "type" "str") ! (set_attr "mode" "QI") ! (set_attr "prefix_rep" "1")]) ! ! (define_insn "cmpstrqi_nz_rex_1" ! [(set (reg:CC 17) ! (compare:CC (mem:BLK (match_operand:DI 4 "register_operand" "0")) ! (mem:BLK (match_operand:DI 5 "register_operand" "1")))) ! (use (match_operand:DI 6 "register_operand" "2")) ! (use (match_operand:SI 3 "immediate_operand" "i")) ! (use (reg:SI 19)) ! (clobber (match_operand:DI 0 "register_operand" "=S")) ! (clobber (match_operand:DI 1 "register_operand" "=D")) ! (clobber (match_operand:DI 2 "register_operand" "=c"))] ! "TARGET_64BIT" "repz{\;| }cmpsb" [(set_attr "type" "str") (set_attr "mode" "QI") *************** *** 11487,11493 **** ;; The same, but the count is not known to not be zero. ! (define_insn "cmpstrsi_1" [(set (reg:CC 17) (if_then_else:CC (ne (match_operand:SI 6 "register_operand" "2") (const_int 0)) --- 15695,15701 ---- ;; The same, but the count is not known to not be zero. ! (define_insn "cmpstrqi_1" [(set (reg:CC 17) (if_then_else:CC (ne (match_operand:SI 6 "register_operand" "2") (const_int 0)) *************** *** 11500,11506 **** (clobber (match_operand:SI 0 "register_operand" "=S")) (clobber (match_operand:SI 1 "register_operand" "=D")) (clobber (match_operand:SI 2 "register_operand" "=c"))] ! "" "repz{\;| }cmpsb" [(set_attr "type" "str") (set_attr "mode" "QI") --- 15708,15733 ---- (clobber (match_operand:SI 0 "register_operand" "=S")) (clobber (match_operand:SI 1 "register_operand" "=D")) (clobber (match_operand:SI 2 "register_operand" "=c"))] ! "!TARGET_64BIT" ! "repz{\;| }cmpsb" ! [(set_attr "type" "str") ! (set_attr "mode" "QI") ! (set_attr "prefix_rep" "1")]) ! ! (define_insn "cmpstrqi_rex_1" ! [(set (reg:CC 17) ! (if_then_else:CC (ne (match_operand:DI 6 "register_operand" "2") ! (const_int 0)) ! (compare:CC (mem:BLK (match_operand:DI 4 "register_operand" "0")) ! (mem:BLK (match_operand:DI 5 "register_operand" "1"))) ! (const_int 0))) ! (use (match_operand:SI 3 "immediate_operand" "i")) ! (use (reg:CC 17)) ! (use (reg:SI 19)) ! (clobber (match_operand:DI 0 "register_operand" "=S")) ! (clobber (match_operand:DI 1 "register_operand" "=D")) ! (clobber (match_operand:DI 2 "register_operand" "=c"))] ! "TARGET_64BIT" "repz{\;| }cmpsb" [(set_attr "type" "str") (set_attr "mode" "QI") *************** *** 11510,11585 **** [(set (match_operand:SI 0 "register_operand" "") (unspec:SI [(match_operand:BLK 1 "general_operand" "") (match_operand:QI 2 "immediate_operand" "") ! (match_operand:SI 3 "immediate_operand" "")] 0))] "" - " { ! rtx out, addr, scratch1, scratch2, scratch3; ! rtx eoschar = operands[2]; ! rtx align = operands[3]; ! ! /* The generic case of strlen expander is long. Avoid it's ! expanding unless TARGET_INLINE_ALL_STRINGOPS. */ ! ! if (TARGET_UNROLL_STRLEN && eoschar == const0_rtx && optimize > 1 ! && !TARGET_INLINE_ALL_STRINGOPS ! && !optimize_size ! && (GET_CODE (align) != CONST_INT || INTVAL (align) < 4)) ! FAIL; ! ! out = operands[0]; ! addr = force_reg (Pmode, XEXP (operands[1], 0)); ! scratch1 = gen_reg_rtx (SImode); ! ! if (TARGET_UNROLL_STRLEN && eoschar == const0_rtx && optimize > 1 ! && !optimize_size) ! { ! /* Well it seems that some optimizer does not combine a call like ! foo(strlen(bar), strlen(bar)); ! when the move and the subtraction is done here. It does calculate ! the length just once when these instructions are done inside of ! output_strlen_unroll(). But I think since &bar[strlen(bar)] is ! often used and I use one fewer register for the lifetime of ! output_strlen_unroll() this is better. */ ! ! if (GET_CODE (align) != CONST_INT || INTVAL (align) < 4) ! emit_move_insn (scratch1, addr); ! ! emit_move_insn (out, addr); ! ! ix86_expand_strlensi_unroll_1 (out, align, scratch1); ! ! /* strlensi_unroll_1 returns the address of the zero at the end of ! the string, like memchr(), so compute the length by subtracting ! the start address. */ ! emit_insn (gen_subsi3 (out, out, addr)); ! } ! else ! { ! scratch2 = gen_reg_rtx (SImode); ! scratch3 = gen_reg_rtx (SImode); ! ! emit_move_insn (scratch3, addr); ! emit_insn (gen_cld ()); ! emit_insn (gen_strlensi_1 (scratch1, scratch3, eoschar, ! align, constm1_rtx, scratch3)); ! emit_insn (gen_one_cmplsi2 (scratch2, scratch1)); ! emit_insn (gen_addsi3 (out, scratch2, constm1_rtx)); ! } ! DONE; ! }") ! (define_insn "strlensi_1" [(set (match_operand:SI 0 "register_operand" "=&c") (unspec:SI [(mem:BLK (match_operand:SI 5 "register_operand" "1")) ! (match_operand:QI 2 "general_operand" "a") (match_operand:SI 3 "immediate_operand" "i") ! (match_operand:SI 4 "immediate_operand" "0")] 0)) (use (reg:SI 19)) (clobber (match_operand:SI 1 "register_operand" "=D")) (clobber (reg:CC 17))] ! "" "repnz{\;| }scasb" [(set_attr "type" "str") (set_attr "mode" "QI") --- 15737,15789 ---- [(set (match_operand:SI 0 "register_operand" "") (unspec:SI [(match_operand:BLK 1 "general_operand" "") (match_operand:QI 2 "immediate_operand" "") ! (match_operand 3 "immediate_operand" "")] 0))] "" { ! if (ix86_expand_strlen (operands[0], operands[1], operands[2], operands[3])) ! DONE; ! else ! FAIL; ! }) ! (define_expand "strlendi" ! [(set (match_operand:DI 0 "register_operand" "") ! (unspec:DI [(match_operand:BLK 1 "general_operand" "") ! (match_operand:QI 2 "immediate_operand" "") ! (match_operand 3 "immediate_operand" "")] 0))] ! "" ! { ! if (ix86_expand_strlen (operands[0], operands[1], operands[2], operands[3])) ! DONE; ! else ! FAIL; ! }) ! (define_insn "strlenqi_1" [(set (match_operand:SI 0 "register_operand" "=&c") (unspec:SI [(mem:BLK (match_operand:SI 5 "register_operand" "1")) ! (match_operand:QI 2 "register_operand" "a") (match_operand:SI 3 "immediate_operand" "i") ! (match_operand:SI 4 "register_operand" "0")] 0)) (use (reg:SI 19)) (clobber (match_operand:SI 1 "register_operand" "=D")) (clobber (reg:CC 17))] ! "!TARGET_64BIT" ! "repnz{\;| }scasb" ! [(set_attr "type" "str") ! (set_attr "mode" "QI") ! (set_attr "prefix_rep" "1")]) ! ! (define_insn "strlenqi_rex_1" ! [(set (match_operand:DI 0 "register_operand" "=&c") ! (unspec:DI [(mem:BLK (match_operand:DI 5 "register_operand" "1")) ! (match_operand:QI 2 "register_operand" "a") ! (match_operand:DI 3 "immediate_operand" "i") ! (match_operand:DI 4 "register_operand" "0")] 0)) ! (use (reg:SI 19)) ! (clobber (match_operand:DI 1 "register_operand" "=D")) ! (clobber (reg:CC 17))] ! "TARGET_64BIT" "repnz{\;| }scasb" [(set_attr "type" "str") (set_attr "mode" "QI") *************** *** 11672,11677 **** --- 15876,15919 ---- ;; Conditional move instructions. + (define_expand "movdicc" + [(set (match_operand:DI 0 "register_operand" "") + (if_then_else:DI (match_operand 1 "comparison_operator" "") + (match_operand:DI 2 "general_operand" "") + (match_operand:DI 3 "general_operand" "")))] + "TARGET_64BIT" + "if (!ix86_expand_int_movcc (operands)) FAIL; DONE;") + + (define_insn "x86_movdicc_0_m1_rex64" + [(set (match_operand:DI 0 "register_operand" "=r") + (if_then_else:DI (ltu (reg:CC 17) (const_int 0)) + (const_int -1) + (const_int 0))) + (clobber (reg:CC 17))] + "TARGET_64BIT" + "sbb{q}\t%0, %0" + ; Since we don't have the proper number of operands for an alu insn, + ; fill in all the blanks. + [(set_attr "type" "alu") + (set_attr "memory" "none") + (set_attr "imm_disp" "false") + (set_attr "mode" "DI") + (set_attr "length_immediate" "0")]) + + (define_insn "*movdicc_c_rex64" + [(set (match_operand:DI 0 "register_operand" "=r,r") + (if_then_else:DI (match_operator 1 "ix86_comparison_operator" + [(reg 17) (const_int 0)]) + (match_operand:DI 2 "nonimmediate_operand" "rm,0") + (match_operand:DI 3 "nonimmediate_operand" "0,rm")))] + "TARGET_64BIT && TARGET_CMOVE + && (GET_CODE (operands[2]) != MEM || GET_CODE (operands[3]) != MEM)" + "@ + cmov%O2%C1\t{%2, %0|%0, %2} + cmov%O2%c1\t{%3, %0|%0, %3}" + [(set_attr "type" "icmov") + (set_attr "mode" "DI")]) + (define_expand "movsicc" [(set (match_operand:SI 0 "register_operand" "") (if_then_else:SI (match_operand 1 "comparison_operator" "") *************** *** 11691,11697 **** (const_int 0))) (clobber (reg:CC 17))] "" ! "sbb{l}\\t%0, %0" ; Since we don't have the proper number of operands for an alu insn, ; fill in all the blanks. [(set_attr "type" "alu") --- 15933,15939 ---- (const_int 0))) (clobber (reg:CC 17))] "" ! "sbb{l}\t%0, %0" ; Since we don't have the proper number of operands for an alu insn, ; fill in all the blanks. [(set_attr "type" "alu") *************** *** 11709,11716 **** "TARGET_CMOVE && (GET_CODE (operands[2]) != MEM || GET_CODE (operands[3]) != MEM)" "@ ! cmov%C1\\t{%2, %0|%0, %2} ! cmov%c1\\t{%3, %0|%0, %3}" [(set_attr "type" "icmov") (set_attr "mode" "SI")]) --- 15951,15958 ---- "TARGET_CMOVE && (GET_CODE (operands[2]) != MEM || GET_CODE (operands[3]) != MEM)" "@ ! cmov%O2%C1\t{%2, %0|%0, %2} ! cmov%O2%c1\t{%3, %0|%0, %3}" [(set_attr "type" "icmov") (set_attr "mode" "SI")]) *************** *** 11731,11738 **** "TARGET_CMOVE && (GET_CODE (operands[2]) != MEM || GET_CODE (operands[3]) != MEM)" "@ ! cmov%C1\\t{%2, %0|%0, %2} ! cmov%c1\\t{%3, %0|%0, %3}" [(set_attr "type" "icmov") (set_attr "mode" "HI")]) --- 15973,15980 ---- "TARGET_CMOVE && (GET_CODE (operands[2]) != MEM || GET_CODE (operands[3]) != MEM)" "@ ! cmov%O2%C1\t{%2, %0|%0, %2} ! cmov%O2%c1\t{%3, %0|%0, %3}" [(set_attr "type" "icmov") (set_attr "mode" "HI")]) *************** *** 11745,11761 **** "if (! ix86_expand_fp_movcc (operands)) FAIL; DONE;") (define_insn "*movsfcc_1" ! [(set (match_operand:SF 0 "register_operand" "=f,f") (if_then_else:SF (match_operator 1 "fcmov_comparison_operator" [(reg 17) (const_int 0)]) ! (match_operand:SF 2 "register_operand" "f,0") ! (match_operand:SF 3 "register_operand" "0,f")))] ! "TARGET_CMOVE" "@ ! fcmov%F1\\t{%2, %0|%0, %2} ! fcmov%f1\\t{%3, %0|%0, %3}" ! [(set_attr "type" "fcmov") ! (set_attr "mode" "SF")]) (define_expand "movdfcc" [(set (match_operand:DF 0 "register_operand" "") --- 15987,16006 ---- "if (! ix86_expand_fp_movcc (operands)) FAIL; DONE;") (define_insn "*movsfcc_1" ! [(set (match_operand:SF 0 "register_operand" "=f,f,r,r") (if_then_else:SF (match_operator 1 "fcmov_comparison_operator" [(reg 17) (const_int 0)]) ! (match_operand:SF 2 "nonimmediate_operand" "f,0,rm,0") ! (match_operand:SF 3 "nonimmediate_operand" "0,f,0,rm")))] ! "TARGET_CMOVE ! && (GET_CODE (operands[2]) != MEM || GET_CODE (operands[3]) != MEM)" "@ ! fcmov%F1\t{%2, %0|%0, %2} ! fcmov%f1\t{%3, %0|%0, %3} ! cmov%O2%C1\t{%2, %0|%0, %2} ! cmov%O2%c1\t{%3, %0|%0, %3}" ! [(set_attr "type" "fcmov,fcmov,icmov,icmov") ! (set_attr "mode" "SF,SF,SI,SI")]) (define_expand "movdfcc" [(set (match_operand:DF 0 "register_operand" "") *************** *** 11766,11789 **** "if (! ix86_expand_fp_movcc (operands)) FAIL; DONE;") (define_insn "*movdfcc_1" ! [(set (match_operand:DF 0 "register_operand" "=f,f") (if_then_else:DF (match_operator 1 "fcmov_comparison_operator" [(reg 17) (const_int 0)]) ! (match_operand:DF 2 "register_operand" "f,0") ! (match_operand:DF 3 "register_operand" "0,f")))] ! "TARGET_CMOVE" "@ ! fcmov%F1\\t{%2, %0|%0, %2} ! fcmov%f1\\t{%3, %0|%0, %3}" ! [(set_attr "type" "fcmov") (set_attr "mode" "DF")]) (define_expand "movxfcc" [(set (match_operand:XF 0 "register_operand" "") (if_then_else:XF (match_operand 1 "comparison_operator" "") (match_operand:XF 2 "register_operand" "") (match_operand:XF 3 "register_operand" "")))] ! "TARGET_CMOVE" "if (! ix86_expand_fp_movcc (operands)) FAIL; DONE;") (define_expand "movtfcc" --- 16011,16072 ---- "if (! ix86_expand_fp_movcc (operands)) FAIL; DONE;") (define_insn "*movdfcc_1" ! [(set (match_operand:DF 0 "register_operand" "=f,f,&r,&r") (if_then_else:DF (match_operator 1 "fcmov_comparison_operator" [(reg 17) (const_int 0)]) ! (match_operand:DF 2 "nonimmediate_operand" "f,0,rm,0") ! (match_operand:DF 3 "nonimmediate_operand" "0,f,0,rm")))] ! "!TARGET_64BIT && TARGET_CMOVE ! && (GET_CODE (operands[2]) != MEM || GET_CODE (operands[3]) != MEM)" "@ ! fcmov%F1\t{%2, %0|%0, %2} ! fcmov%f1\t{%3, %0|%0, %3} ! # ! #" ! [(set_attr "type" "fcmov,fcmov,multi,multi") ! (set_attr "mode" "DF")]) ! ! (define_insn "*movdfcc_1_rex64" ! [(set (match_operand:DF 0 "register_operand" "=f,f,&r,&r") ! (if_then_else:DF (match_operator 1 "fcmov_comparison_operator" ! [(reg 17) (const_int 0)]) ! (match_operand:DF 2 "nonimmediate_operand" "f,0,rm,0") ! (match_operand:DF 3 "nonimmediate_operand" "0,f,0,rm")))] ! "TARGET_64BIT && TARGET_CMOVE ! && (GET_CODE (operands[2]) != MEM || GET_CODE (operands[3]) != MEM)" ! "@ ! fcmov%F1\t{%2, %0|%0, %2} ! fcmov%f1\t{%3, %0|%0, %3} ! cmov%O2%C1\t{%2, %0|%0, %2} ! cmov%O2%c1\t{%3, %0|%0, %3}" ! [(set_attr "type" "fcmov,fcmov,icmov,icmov") (set_attr "mode" "DF")]) + (define_split + [(set (match_operand:DF 0 "register_operand" "") + (if_then_else:DF (match_operator 1 "fcmov_comparison_operator" + [(match_operand 4 "" "") (const_int 0)]) + (match_operand:DF 2 "nonimmediate_operand" "") + (match_operand:DF 3 "nonimmediate_operand" "")))] + "!TARGET_64BIT && !ANY_FP_REG_P (operands[0]) && reload_completed" + [(set (match_dup 2) + (if_then_else:SI (match_op_dup 1 [(match_dup 4) (const_int 0)]) + (match_dup 5) + (match_dup 7))) + (set (match_dup 3) + (if_then_else:SI (match_op_dup 1 [(match_dup 4) (const_int 0)]) + (match_dup 6) + (match_dup 8)))] + "split_di (operands+2, 1, operands+5, operands+6); + split_di (operands+3, 1, operands+7, operands+8); + split_di (operands, 1, operands+2, operands+3);") + (define_expand "movxfcc" [(set (match_operand:XF 0 "register_operand" "") (if_then_else:XF (match_operand 1 "comparison_operator" "") (match_operand:XF 2 "register_operand" "") (match_operand:XF 3 "register_operand" "")))] ! "!TARGET_64BIT && TARGET_CMOVE" "if (! ix86_expand_fp_movcc (operands)) FAIL; DONE;") (define_expand "movtfcc" *************** *** 11800,11809 **** [(reg 17) (const_int 0)]) (match_operand:XF 2 "register_operand" "f,0") (match_operand:XF 3 "register_operand" "0,f")))] ! "TARGET_CMOVE" "@ ! fcmov%F1\\t{%2, %0|%0, %2} ! fcmov%f1\\t{%3, %0|%0, %3}" [(set_attr "type" "fcmov") (set_attr "mode" "XF")]) --- 16083,16092 ---- [(reg 17) (const_int 0)]) (match_operand:XF 2 "register_operand" "f,0") (match_operand:XF 3 "register_operand" "0,f")))] ! "!TARGET_64BIT && TARGET_CMOVE" "@ ! fcmov%F1\t{%2, %0|%0, %2} ! fcmov%f1\t{%3, %0|%0, %3}" [(set_attr "type" "fcmov") (set_attr "mode" "XF")]) *************** *** 11815,11828 **** (match_operand:TF 3 "register_operand" "0,f")))] "TARGET_CMOVE" "@ ! fcmov%F1\\t{%2, %0|%0, %2} ! fcmov%f1\\t{%3, %0|%0, %3}" [(set_attr "type" "fcmov") (set_attr "mode" "XF")]) ;; Misc patterns (?) ! ;; This pattern exists to put a dependancy on all ebp-based memory accesses. ;; Otherwise there will be nothing to keep ;; ;; [(set (reg ebp) (reg esp))] --- 16098,16438 ---- (match_operand:TF 3 "register_operand" "0,f")))] "TARGET_CMOVE" "@ ! fcmov%F1\t{%2, %0|%0, %2} ! fcmov%f1\t{%3, %0|%0, %3}" [(set_attr "type" "fcmov") (set_attr "mode" "XF")]) + + (define_expand "minsf3" + [(parallel [ + (set (match_operand:SF 0 "register_operand" "") + (if_then_else:SF (lt (match_operand:SF 1 "register_operand" "") + (match_operand:SF 2 "nonimmediate_operand" "")) + (match_dup 1) + (match_dup 2))) + (clobber (reg:CC 17))])] + "TARGET_SSE" + "") + + (define_insn "*minsf" + [(set (match_operand:SF 0 "register_operand" "=x#f,f#x,f#x") + (if_then_else:SF (lt (match_operand:SF 1 "register_operand" "0,0,f#x") + (match_operand:SF 2 "nonimmediate_operand" "xm#f,f#x,0")) + (match_dup 1) + (match_dup 2))) + (clobber (reg:CC 17))] + "TARGET_SSE && TARGET_IEEE_FP" + "#") + + (define_insn "*minsf_nonieee" + [(set (match_operand:SF 0 "register_operand" "=x#f,f#x") + (if_then_else:SF (lt (match_operand:SF 1 "nonimmediate_operand" "%0,0") + (match_operand:SF 2 "nonimmediate_operand" "xm#f,f#x")) + (match_dup 1) + (match_dup 2))) + (clobber (reg:CC 17))] + "TARGET_SSE && !TARGET_IEEE_FP + && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" + "#") + + (define_split + [(set (match_operand:SF 0 "register_operand" "") + (if_then_else:SF (lt (match_operand:SF 1 "register_operand" "") + (match_operand:SF 2 "nonimmediate_operand" "")) + (match_operand:SF 3 "register_operand" "") + (match_operand:SF 4 "nonimmediate_operand" ""))) + (clobber (reg:CC 17))] + "SSE_REG_P (operands[0]) && reload_completed + && ((operands_match_p (operands[1], operands[3]) + && operands_match_p (operands[2], operands[4])) + || (operands_match_p (operands[1], operands[4]) + && operands_match_p (operands[2], operands[3])))" + [(set (match_dup 0) + (if_then_else:SF (lt (match_dup 1) + (match_dup 2)) + (match_dup 1) + (match_dup 2)))]) + + ;; We can't represent the LT test directly. Do this by swapping the operands. + + (define_split + [(set (match_operand:SF 0 "register_operand" "") + (if_then_else:SF (lt (match_operand:SF 1 "register_operand" "") + (match_operand:SF 2 "register_operand" "")) + (match_operand:SF 3 "register_operand" "") + (match_operand:SF 4 "register_operand" ""))) + (clobber (reg:CC 17))] + "FP_REG_P (operands[0]) && reload_completed + && ((operands_match_p (operands[1], operands[3]) + && operands_match_p (operands[2], operands[4])) + || (operands_match_p (operands[1], operands[4]) + && operands_match_p (operands[2], operands[3])))" + [(set (reg:CCFP 17) + (compare:CCFP (match_dup 2) + (match_dup 1))) + (set (match_dup 0) + (if_then_else:SF (ge (reg:CCFP 17) (const_int 0)) + (match_dup 1) + (match_dup 2)))]) + + (define_insn "*minsf_sse" + [(set (match_operand:SF 0 "register_operand" "=x") + (if_then_else:SF (lt (match_operand:SF 1 "register_operand" "0") + (match_operand:SF 2 "nonimmediate_operand" "xm")) + (match_dup 1) + (match_dup 2)))] + "TARGET_SSE && reload_completed" + "minss\t{%2, %0|%0, %2}" + [(set_attr "type" "sse") + (set_attr "mode" "SF")]) + + (define_expand "mindf3" + [(parallel [ + (set (match_operand:DF 0 "register_operand" "") + (if_then_else:DF (lt (match_operand:DF 1 "register_operand" "") + (match_operand:DF 2 "nonimmediate_operand" "")) + (match_dup 1) + (match_dup 2))) + (clobber (reg:CC 17))])] + "TARGET_SSE2 && TARGET_SSE_MATH" + "#") + + (define_insn "*mindf" + [(set (match_operand:DF 0 "register_operand" "=Y#f,f#Y,f#Y") + (if_then_else:DF (lt (match_operand:DF 1 "register_operand" "0,0,f#Y") + (match_operand:DF 2 "nonimmediate_operand" "Ym#f,f#Y,0")) + (match_dup 1) + (match_dup 2))) + (clobber (reg:CC 17))] + "TARGET_SSE2 && TARGET_IEEE_FP && TARGET_SSE_MATH" + "#") + + (define_insn "*mindf_nonieee" + [(set (match_operand:DF 0 "register_operand" "=Y#f,f#Y") + (if_then_else:DF (lt (match_operand:DF 1 "nonimmediate_operand" "%0,0") + (match_operand:DF 2 "nonimmediate_operand" "Ym#f,f#Y")) + (match_dup 1) + (match_dup 2))) + (clobber (reg:CC 17))] + "TARGET_SSE2 && TARGET_SSE_MATH && !TARGET_IEEE_FP + && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" + "#") + + (define_split + [(set (match_operand:DF 0 "register_operand" "") + (if_then_else:DF (lt (match_operand:DF 1 "register_operand" "") + (match_operand:DF 2 "nonimmediate_operand" "")) + (match_operand:DF 3 "register_operand" "") + (match_operand:DF 4 "nonimmediate_operand" ""))) + (clobber (reg:CC 17))] + "SSE_REG_P (operands[0]) && reload_completed + && ((operands_match_p (operands[1], operands[3]) + && operands_match_p (operands[2], operands[4])) + || (operands_match_p (operands[1], operands[4]) + && operands_match_p (operands[2], operands[3])))" + [(set (match_dup 0) + (if_then_else:DF (lt (match_dup 1) + (match_dup 2)) + (match_dup 1) + (match_dup 2)))]) + + ;; We can't represent the LT test directly. Do this by swapping the operands. + (define_split + [(set (match_operand:DF 0 "register_operand" "") + (if_then_else:DF (lt (match_operand:DF 1 "register_operand" "") + (match_operand:DF 2 "register_operand" "")) + (match_operand:DF 3 "register_operand" "") + (match_operand:DF 4 "register_operand" ""))) + (clobber (reg:CC 17))] + "FP_REG_P (operands[0]) && reload_completed + && ((operands_match_p (operands[1], operands[3]) + && operands_match_p (operands[2], operands[4])) + || (operands_match_p (operands[1], operands[4]) + && operands_match_p (operands[2], operands[3])))" + [(set (reg:CCFP 17) + (compare:CCFP (match_dup 2) + (match_dup 2))) + (set (match_dup 0) + (if_then_else:DF (ge (reg:CCFP 17) (const_int 0)) + (match_dup 1) + (match_dup 2)))]) + + (define_insn "*mindf_sse" + [(set (match_operand:DF 0 "register_operand" "=Y") + (if_then_else:DF (lt (match_operand:DF 1 "register_operand" "0") + (match_operand:DF 2 "nonimmediate_operand" "Ym")) + (match_dup 1) + (match_dup 2)))] + "TARGET_SSE2 && TARGET_SSE_MATH && reload_completed" + "minsd\t{%2, %0|%0, %2}" + [(set_attr "type" "sse") + (set_attr "mode" "DF")]) + + (define_expand "maxsf3" + [(parallel [ + (set (match_operand:SF 0 "register_operand" "") + (if_then_else:SF (gt (match_operand:SF 1 "register_operand" "") + (match_operand:SF 2 "nonimmediate_operand" "")) + (match_dup 1) + (match_dup 2))) + (clobber (reg:CC 17))])] + "TARGET_SSE" + "#") + + (define_insn "*maxsf" + [(set (match_operand:SF 0 "register_operand" "=x#f,f#x,f#x") + (if_then_else:SF (gt (match_operand:SF 1 "register_operand" "0,0,f#x") + (match_operand:SF 2 "nonimmediate_operand" "xm#f,f#x,0")) + (match_dup 1) + (match_dup 2))) + (clobber (reg:CC 17))] + "TARGET_SSE && TARGET_IEEE_FP" + "#") + + (define_insn "*maxsf_nonieee" + [(set (match_operand:SF 0 "register_operand" "=x#f,f#x") + (if_then_else:SF (gt (match_operand:SF 1 "nonimmediate_operand" "%0,0") + (match_operand:SF 2 "nonimmediate_operand" "xm#f,f#x")) + (match_dup 1) + (match_dup 2))) + (clobber (reg:CC 17))] + "TARGET_SSE && !TARGET_IEEE_FP + && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" + "#") + + (define_split + [(set (match_operand:SF 0 "register_operand" "") + (if_then_else:SF (gt (match_operand:SF 1 "register_operand" "") + (match_operand:SF 2 "nonimmediate_operand" "")) + (match_operand:SF 3 "register_operand" "") + (match_operand:SF 4 "nonimmediate_operand" ""))) + (clobber (reg:CC 17))] + "SSE_REG_P (operands[0]) && reload_completed + && ((operands_match_p (operands[1], operands[3]) + && operands_match_p (operands[2], operands[4])) + || (operands_match_p (operands[1], operands[4]) + && operands_match_p (operands[2], operands[3])))" + [(set (match_dup 0) + (if_then_else:SF (gt (match_dup 1) + (match_dup 2)) + (match_dup 1) + (match_dup 2)))]) + + (define_split + [(set (match_operand:SF 0 "register_operand" "") + (if_then_else:SF (gt (match_operand:SF 1 "register_operand" "") + (match_operand:SF 2 "register_operand" "")) + (match_operand:SF 3 "register_operand" "") + (match_operand:SF 4 "register_operand" ""))) + (clobber (reg:CC 17))] + "FP_REG_P (operands[0]) && reload_completed + && ((operands_match_p (operands[1], operands[3]) + && operands_match_p (operands[2], operands[4])) + || (operands_match_p (operands[1], operands[4]) + && operands_match_p (operands[2], operands[3])))" + [(set (reg:CCFP 17) + (compare:CCFP (match_dup 1) + (match_dup 2))) + (set (match_dup 0) + (if_then_else:SF (gt (reg:CCFP 17) (const_int 0)) + (match_dup 1) + (match_dup 2)))]) + + (define_insn "*maxsf_sse" + [(set (match_operand:SF 0 "register_operand" "=x") + (if_then_else:SF (gt (match_operand:SF 1 "register_operand" "0") + (match_operand:SF 2 "nonimmediate_operand" "xm")) + (match_dup 1) + (match_dup 2)))] + "TARGET_SSE && reload_completed" + "maxss\t{%2, %0|%0, %2}" + [(set_attr "type" "sse") + (set_attr "mode" "SF")]) + + (define_expand "maxdf3" + [(parallel [ + (set (match_operand:DF 0 "register_operand" "") + (if_then_else:DF (gt (match_operand:DF 1 "register_operand" "") + (match_operand:DF 2 "nonimmediate_operand" "")) + (match_dup 1) + (match_dup 2))) + (clobber (reg:CC 17))])] + "TARGET_SSE2 && TARGET_SSE_MATH" + "#") + + (define_insn "*maxdf" + [(set (match_operand:DF 0 "register_operand" "=Y#f,f#Y,f#Y") + (if_then_else:DF (gt (match_operand:DF 1 "register_operand" "0,0,f#Y") + (match_operand:DF 2 "nonimmediate_operand" "Ym#f,f#Y,0")) + (match_dup 1) + (match_dup 2))) + (clobber (reg:CC 17))] + "TARGET_SSE2 && TARGET_SSE_MATH && TARGET_IEEE_FP" + "#") + + (define_insn "*maxdf_nonieee" + [(set (match_operand:DF 0 "register_operand" "=Y#f,f#Y") + (if_then_else:DF (gt (match_operand:DF 1 "nonimmediate_operand" "%0,0") + (match_operand:DF 2 "nonimmediate_operand" "Ym#f,f#Y")) + (match_dup 1) + (match_dup 2))) + (clobber (reg:CC 17))] + "TARGET_SSE2 && TARGET_SSE_MATH && !TARGET_IEEE_FP + && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" + "#") + + (define_split + [(set (match_operand:DF 0 "register_operand" "") + (if_then_else:DF (gt (match_operand:DF 1 "register_operand" "") + (match_operand:DF 2 "nonimmediate_operand" "")) + (match_operand:DF 3 "register_operand" "") + (match_operand:DF 4 "nonimmediate_operand" ""))) + (clobber (reg:CC 17))] + "SSE_REG_P (operands[0]) && reload_completed + && ((operands_match_p (operands[1], operands[3]) + && operands_match_p (operands[2], operands[4])) + || (operands_match_p (operands[1], operands[4]) + && operands_match_p (operands[2], operands[3])))" + [(set (match_dup 0) + (if_then_else:DF (gt (match_dup 1) + (match_dup 2)) + (match_dup 1) + (match_dup 2)))]) + + (define_split + [(set (match_operand:DF 0 "register_operand" "") + (if_then_else:DF (gt (match_operand:DF 1 "register_operand" "") + (match_operand:DF 2 "register_operand" "")) + (match_operand:DF 3 "register_operand" "") + (match_operand:DF 4 "register_operand" ""))) + (clobber (reg:CC 17))] + "FP_REG_P (operands[0]) && reload_completed + && ((operands_match_p (operands[1], operands[3]) + && operands_match_p (operands[2], operands[4])) + || (operands_match_p (operands[1], operands[4]) + && operands_match_p (operands[2], operands[3])))" + [(set (reg:CCFP 17) + (compare:CCFP (match_dup 1) + (match_dup 2))) + (set (match_dup 0) + (if_then_else:DF (gt (reg:CCFP 17) (const_int 0)) + (match_dup 1) + (match_dup 2)))]) + + (define_insn "*maxdf_sse" + [(set (match_operand:DF 0 "register_operand" "=Y") + (if_then_else:DF (gt (match_operand:DF 1 "register_operand" "0") + (match_operand:DF 2 "nonimmediate_operand" "Ym")) + (match_dup 1) + (match_dup 2)))] + "TARGET_SSE2 && TARGET_SSE_MATH && reload_completed" + "maxsd\t{%2, %0|%0, %2}" + [(set_attr "type" "sse") + (set_attr "mode" "DF")]) ;; Misc patterns (?) ! ;; This pattern exists to put a dependency on all ebp-based memory accesses. ;; Otherwise there will be nothing to keep ;; ;; [(set (reg ebp) (reg esp))] *************** *** 11831,11850 **** ;; [(set (mem (plus (reg ebp) (const_int -160000))) (const_int 0))] ;; ;; in proper program order. ! (define_insn "pro_epilogue_adjust_stack" [(set (match_operand:SI 0 "register_operand" "=r,r") (plus:SI (match_operand:SI 1 "register_operand" "0,r") (match_operand:SI 2 "immediate_operand" "i,i"))) (clobber (reg:CC 17)) (clobber (mem:BLK (scratch)))] ! "" ! "* { switch (get_attr_type (insn)) { case TYPE_IMOV: ! return \"mov{l}\\t{%1, %0|%0, %1}\"; case TYPE_ALU: if (GET_CODE (operands[2]) == CONST_INT --- 16441,16474 ---- ;; [(set (mem (plus (reg ebp) (const_int -160000))) (const_int 0))] ;; ;; in proper program order. + (define_expand "pro_epilogue_adjust_stack" + [(parallel [(set (match_operand:SI 0 "register_operand" "=r,r") + (plus:SI (match_operand:SI 1 "register_operand" "0,r") + (match_operand:SI 2 "immediate_operand" "i,i"))) + (clobber (reg:CC 17)) + (clobber (mem:BLK (scratch)))])] + "" + { + if (TARGET_64BIT) + { + emit_insn (gen_pro_epilogue_adjust_stack_rex64 + (operands[0], operands[1], operands[2])); + DONE; + } + }) ! (define_insn "*pro_epilogue_adjust_stack_1" [(set (match_operand:SI 0 "register_operand" "=r,r") (plus:SI (match_operand:SI 1 "register_operand" "0,r") (match_operand:SI 2 "immediate_operand" "i,i"))) (clobber (reg:CC 17)) (clobber (mem:BLK (scratch)))] ! "!TARGET_64BIT" { switch (get_attr_type (insn)) { case TYPE_IMOV: ! return "mov{l}\t{%1, %0|%0, %1}"; case TYPE_ALU: if (GET_CODE (operands[2]) == CONST_INT *************** *** 11853,11870 **** && INTVAL (operands[2]) != -128))) { operands[2] = GEN_INT (-INTVAL (operands[2])); ! return \"sub{l}\\t{%2, %0|%0, %2}\"; } ! return \"add{l}\\t{%2, %0|%0, %2}\"; case TYPE_LEA: operands[2] = SET_SRC (XVECEXP (PATTERN (insn), 0, 0)); ! return \"lea{l}\\t{%a2, %0|%0, %a2}\"; default: abort (); } ! }" [(set (attr "type") (cond [(eq_attr "alternative" "0") (const_string "alu") --- 16477,16494 ---- && INTVAL (operands[2]) != -128))) { operands[2] = GEN_INT (-INTVAL (operands[2])); ! return "sub{l}\t{%2, %0|%0, %2}"; } ! return "add{l}\t{%2, %0|%0, %2}"; case TYPE_LEA: operands[2] = SET_SRC (XVECEXP (PATTERN (insn), 0, 0)); ! return "lea{l}\t{%a2, %0|%0, %a2}"; default: abort (); } ! } [(set (attr "type") (cond [(eq_attr "alternative" "0") (const_string "alu") *************** *** 11874,11886 **** (const_string "lea"))) (set_attr "mode" "SI")]) ! (define_insn "allocate_stack_worker" [(unspec:SI [(match_operand:SI 0 "register_operand" "a")] 3) (set (reg:SI 7) (minus:SI (reg:SI 7) (match_dup 0))) (clobber (match_dup 0)) (clobber (reg:CC 17))] ! "TARGET_STACK_PROBE" ! "call\\t__alloca" [(set_attr "type" "multi") (set_attr "length" "5")]) --- 16498,16805 ---- (const_string "lea"))) (set_attr "mode" "SI")]) ! (define_insn "pro_epilogue_adjust_stack_rex64" ! [(set (match_operand:DI 0 "register_operand" "=r,r") ! (plus:DI (match_operand:DI 1 "register_operand" "0,r") ! (match_operand:DI 2 "x86_64_immediate_operand" "e,e"))) ! (clobber (reg:CC 17)) ! (clobber (mem:BLK (scratch)))] ! "TARGET_64BIT" ! { ! switch (get_attr_type (insn)) ! { ! case TYPE_IMOV: ! return "mov{q}\t{%1, %0|%0, %1}"; ! ! case TYPE_ALU: ! if (GET_CODE (operands[2]) == CONST_INT ! && (INTVAL (operands[2]) == 128 ! || (INTVAL (operands[2]) < 0 ! && INTVAL (operands[2]) != -128))) ! { ! operands[2] = GEN_INT (-INTVAL (operands[2])); ! return "sub{q}\t{%2, %0|%0, %2}"; ! } ! return "add{q}\t{%2, %0|%0, %2}"; ! ! case TYPE_LEA: ! operands[2] = SET_SRC (XVECEXP (PATTERN (insn), 0, 0)); ! return "lea{q}\t{%a2, %0|%0, %a2}"; ! ! default: ! abort (); ! } ! } ! [(set (attr "type") ! (cond [(eq_attr "alternative" "0") ! (const_string "alu") ! (match_operand:DI 2 "const0_operand" "") ! (const_string "imov") ! ] ! (const_string "lea"))) ! (set_attr "mode" "DI")]) ! ! ! ;; Placeholder for the conditional moves. This one is split either to SSE ! ;; based moves emulation or to usual cmove sequence. Little bit unfortunate ! ;; fact is that compares supported by the cmp??ss instructions are exactly ! ;; swapped of those supported by cmove sequence. ! ;; The EQ/NE comparisons also needs bit care, since they are not directly ! ;; supported by i387 comparisons and we do need to emit two conditional moves ! ;; in tandem. ! ! (define_insn "sse_movsfcc" ! [(set (match_operand:SF 0 "register_operand" "=&x#rf,x#rf,?f#xr,?f#xr,?f#xr,?f#xr,?r#xf,?r#xf,?r#xf,?r#xf") ! (if_then_else:SF (match_operator 1 "sse_comparison_operator" ! [(match_operand:SF 4 "nonimmediate_operand" "0#fx,x#fx,f#x,f#x,xm#f,xm#f,f#x,f#x,xm#f,xm#f") ! (match_operand:SF 5 "nonimmediate_operand" "xm#f,xm#f,f#x,f#x,x#f,x#f,f#x,f#x,x#f,x#f")]) ! (match_operand:SF 2 "nonimmediate_operand" "x#fr,0#fr,f#fx,0#fx,f#fx,0#fx,rm#rx,0#rx,rm#rx,0#rx") ! (match_operand:SF 3 "nonimmediate_operand" "x#fr,x#fr,0#fx,f#fx,0#fx,f#fx,0#fx,rm#rx,0#rx,rm#rx"))) ! (clobber (match_scratch:SF 6 "=2,&4,X,X,X,X,X,X,X,X")) ! (clobber (reg:CC 17))] ! "TARGET_SSE ! && (GET_CODE (operands[2]) != MEM || GET_CODE (operands[3]) != MEM) ! && (!TARGET_IEEE_FP ! || (GET_CODE (operands[1]) != EQ && GET_CODE (operands[1]) != NE))" ! "#") ! ! (define_insn "sse_movsfcc_eq" ! [(set (match_operand:SF 0 "register_operand" "=&x#rf,x#rf,?f#xr,?f#xr,?r#xf,?r#xf") ! (if_then_else:SF (eq (match_operand:SF 3 "nonimmediate_operand" "%0#fx,x#fx,f#x,xm#f,f#x,xm#f") ! (match_operand:SF 4 "nonimmediate_operand" "xm#f,xm#f,f#x,x#f,f#x,x#f")) ! (match_operand:SF 1 "nonimmediate_operand" "x#fr,0#fr,0#fx,0#fx,0#rx,0#rx") ! (match_operand:SF 2 "nonimmediate_operand" "x#fr,x#fr,f#fx,f#fx,rm#rx,rm#rx"))) ! (clobber (match_scratch:SF 5 "=1,&3,X,X,X,X")) ! (clobber (reg:CC 17))] ! "TARGET_SSE ! && (GET_CODE (operands[2]) != MEM || GET_CODE (operands[3]) != MEM)" ! "#") ! ! (define_insn "sse_movdfcc" ! [(set (match_operand:DF 0 "register_operand" "=&x#rf,x#rf,?f#xr,?f#xr,?f#xr,?f#xr,?r#xf,?r#xf,?r#xf,?r#xf") ! (if_then_else:DF (match_operator 1 "sse_comparison_operator" ! [(match_operand:DF 4 "nonimmediate_operand" "0#fx,x#fx,f#x,f#x,xm#f,xm#f,f#x,f#x,xm#f,xm#f") ! (match_operand:DF 5 "nonimmediate_operand" "xm#f,xm#f,f#x,f#x,x#f,x#f,f#x,f#x,x#f,x#f")]) ! (match_operand:DF 2 "nonimmediate_operand" "x#fr,0#fr,f#fx,0#fx,f#fx,0#fx,rm#rx,0#rx,rm#rx,0#rx") ! (match_operand:DF 3 "nonimmediate_operand" "x#fr,x#fr,0#fx,f#fx,0#fx,f#fx,0#fx,rm#rx,0#rx,rm#rx"))) ! (clobber (match_scratch:DF 6 "=2,&4,X,X,X,X,X,X,X,X")) ! (clobber (reg:CC 17))] ! "TARGET_SSE2 ! && (GET_CODE (operands[2]) != MEM || GET_CODE (operands[3]) != MEM) ! && (!TARGET_IEEE_FP ! || (GET_CODE (operands[1]) != EQ && GET_CODE (operands[1]) != NE))" ! "#") ! ! (define_insn "sse_movdfcc_eq" ! [(set (match_operand:DF 0 "register_operand" "=&x#rf,x#rf,?f#xr,?f#xr,?r#xf,?r#xf") ! (if_then_else:DF (eq (match_operand:DF 3 "nonimmediate_operand" "%0#fx,x#fx,f#x,xm#f,f#x,xm#f") ! (match_operand:DF 4 "nonimmediate_operand" "xm#f,xm#f,f#x,x#f,f#x,x#f")) ! (match_operand:DF 1 "nonimmediate_operand" "x#fr,0#fr,0#fx,0#fx,0#rx,0#rx") ! (match_operand:DF 2 "nonimmediate_operand" "x#fr,x#fr,f#fx,f#fx,rm#rx,rm#rx"))) ! (clobber (match_scratch:DF 5 "=1,&3,X,X,X,X")) ! (clobber (reg:CC 17))] ! "TARGET_SSE ! && (GET_CODE (operands[2]) != MEM || GET_CODE (operands[3]) != MEM)" ! "#") ! ! ;; For non-sse moves just expand the usual cmove sequence. ! (define_split ! [(set (match_operand 0 "register_operand" "") ! (if_then_else (match_operator 1 "comparison_operator" ! [(match_operand 4 "nonimmediate_operand" "") ! (match_operand 5 "register_operand" "")]) ! (match_operand 2 "nonimmediate_operand" "") ! (match_operand 3 "nonimmediate_operand" ""))) ! (clobber (match_operand 6 "" "")) ! (clobber (reg:CC 17))] ! "!SSE_REG_P (operands[0]) && reload_completed ! && VALID_SSE_REG_MODE (GET_MODE (operands[0]))" ! [(const_int 0)] ! { ! ix86_compare_op0 = operands[5]; ! ix86_compare_op1 = operands[4]; ! operands[1] = gen_rtx_fmt_ee (swap_condition (GET_CODE (operands[1])), ! VOIDmode, operands[5], operands[4]); ! ix86_expand_fp_movcc (operands); ! DONE; ! }) ! ! ;; Split SSE based conditional move into seqence: ! ;; cmpCC op0, op4 - set op0 to 0 or ffffffff depending on the comparison ! ;; and op2, op0 - zero op2 if comparison was false ! ;; nand op0, op3 - load op3 to op0 if comparison was false ! ;; or op2, op0 - get the non-zero one into the result. ! (define_split ! [(set (match_operand 0 "register_operand" "") ! (if_then_else (match_operator 1 "sse_comparison_operator" ! [(match_operand 4 "register_operand" "") ! (match_operand 5 "nonimmediate_operand" "")]) ! (match_operand 2 "register_operand" "") ! (match_operand 3 "register_operand" ""))) ! (clobber (match_operand 6 "" "")) ! (clobber (reg:CC 17))] ! "SSE_REG_P (operands[0]) && reload_completed" ! [(set (match_dup 4) (match_op_dup 1 [(match_dup 4) (match_dup 5)])) ! (set (subreg:TI (match_dup 2) 0) (and:TI (subreg:TI (match_dup 2) 0) ! (subreg:TI (match_dup 4) 0))) ! (set (subreg:TI (match_dup 4) 0) (and:TI (not:TI (subreg:TI (match_dup 4) 0)) ! (subreg:TI (match_dup 3) 0))) ! (set (subreg:TI (match_dup 0) 0) (ior:TI (subreg:TI (match_dup 6) 0) ! (subreg:TI (match_dup 7) 0)))] ! { ! PUT_MODE (operands[1], GET_MODE (operands[0])); ! if (operands_match_p (operands[0], operands[4])) ! operands[6] = operands[4], operands[7] = operands[2]; ! else ! operands[6] = operands[2], operands[7] = operands[4]; ! }) ! ! ;; Special case of conditional move we can handle effectivly. ! ;; Do not brother with the integer/floating point case, since these are ! ;; bot considerably slower, unlike in the generic case. ! (define_insn "*sse_movsfcc_const0_1" ! [(set (match_operand:SF 0 "register_operand" "=x") ! (if_then_else:SF (match_operator 1 "sse_comparison_operator" ! [(match_operand:SF 4 "register_operand" "0") ! (match_operand:SF 5 "nonimmediate_operand" "xm")]) ! (match_operand:SF 2 "register_operand" "x") ! (match_operand:SF 3 "const0_operand" "X")))] ! "TARGET_SSE" ! "#") ! ! (define_insn "*sse_movsfcc_const0_2" ! [(set (match_operand:SF 0 "register_operand" "=x") ! (if_then_else:SF (match_operator 1 "sse_comparison_operator" ! [(match_operand:SF 4 "register_operand" "0") ! (match_operand:SF 5 "nonimmediate_operand" "xm")]) ! (match_operand:SF 2 "const0_operand" "X") ! (match_operand:SF 3 "register_operand" "x")))] ! "TARGET_SSE" ! "#") ! ! (define_insn "*sse_movsfcc_const0_3" ! [(set (match_operand:SF 0 "register_operand" "=x") ! (if_then_else:SF (match_operator 1 "fcmov_comparison_operator" ! [(match_operand:SF 4 "nonimmediate_operand" "xm") ! (match_operand:SF 5 "register_operand" "0")]) ! (match_operand:SF 2 "register_operand" "x") ! (match_operand:SF 3 "const0_operand" "X")))] ! "TARGET_SSE" ! "#") ! ! (define_insn "*sse_movsfcc_const0_4" ! [(set (match_operand:SF 0 "register_operand" "=x") ! (if_then_else:SF (match_operator 1 "fcmov_comparison_operator" ! [(match_operand:SF 4 "nonimmediate_operand" "xm") ! (match_operand:SF 5 "register_operand" "0")]) ! (match_operand:SF 2 "const0_operand" "X") ! (match_operand:SF 3 "register_operand" "x")))] ! "TARGET_SSE" ! "#") ! ! (define_insn "*sse_movdfcc_const0_1" ! [(set (match_operand:SF 0 "register_operand" "=x") ! (if_then_else:SF (match_operator 1 "sse_comparison_operator" ! [(match_operand:SF 4 "register_operand" "0") ! (match_operand:SF 5 "nonimmediate_operand" "xm")]) ! (match_operand:SF 2 "register_operand" "x") ! (match_operand:SF 3 "const0_operand" "X")))] ! "TARGET_SSE2" ! "#") ! ! (define_insn "*sse_movdfcc_const0_2" ! [(set (match_operand:SF 0 "register_operand" "=x") ! (if_then_else:SF (match_operator 1 "sse_comparison_operator" ! [(match_operand:SF 4 "register_operand" "0") ! (match_operand:SF 5 "nonimmediate_operand" "xm")]) ! (match_operand:SF 2 "const0_operand" "X") ! (match_operand:SF 3 "register_operand" "x")))] ! "TARGET_SSE2" ! "#") ! ! (define_insn "*sse_movdfcc_const0_3" ! [(set (match_operand:SF 0 "register_operand" "=x") ! (if_then_else:SF (match_operator 1 "fcmov_comparison_operator" ! [(match_operand:SF 4 "nonimmediate_operand" "xm") ! (match_operand:SF 5 "register_operand" "0")]) ! (match_operand:SF 2 "register_operand" "x") ! (match_operand:SF 3 "const0_operand" "X")))] ! "TARGET_SSE2" ! "#") ! ! (define_insn "*sse_movdfcc_const0_4" ! [(set (match_operand:SF 0 "register_operand" "=x") ! (if_then_else:SF (match_operator 1 "fcmov_comparison_operator" ! [(match_operand:SF 4 "nonimmediate_operand" "xm") ! (match_operand:SF 5 "register_operand" "0")]) ! (match_operand:SF 2 "const0_operand" "X") ! (match_operand:SF 3 "register_operand" "x")))] ! "TARGET_SSE2" ! "#") ! ! (define_split ! [(set (match_operand 0 "register_operand" "") ! (if_then_else (match_operator 1 "comparison_operator" ! [(match_operand 4 "register_operand" "") ! (match_operand 5 "nonimmediate_operand" "")]) ! (match_operand 2 "nonmemory_operand" "") ! (match_operand 3 "nonmemory_operand" "")))] ! "SSE_REG_P (operands[0]) && reload_completed ! && (const0_operand (operands[2], GET_MODE (operands[0])) ! || const0_operand (operands[3], GET_MODE (operands[0])))" ! [(set (match_dup 0) (match_op_dup 1 [(match_dup 0) (match_dup 5)])) ! (set (subreg:TI (match_dup 0) 0) (and:TI (match_dup 6) ! (subreg:TI (match_dup 7) 0)))] ! { ! PUT_MODE (operands[1], GET_MODE (operands[0])); ! if (!sse_comparison_operator (operands[1], VOIDmode)) ! { ! rtx tmp = operands[5]; ! operands[5] = operands[4]; ! operands[4] = tmp; ! PUT_CODE (operands[1], swap_condition (GET_CODE (operands[1]))); ! } ! if (const0_operand (operands[2], GET_MODE (operands[0]))) ! { ! operands[7] = operands[3]; ! operands[6] = gen_rtx_NOT (TImode, gen_rtx_SUBREG (TImode, operands[0], ! 0)); ! } ! else ! { ! operands[7] = operands[2]; ! operands[6] = gen_rtx_SUBREG (TImode, operands[0], 0); ! } ! }) ! ! (define_expand "allocate_stack_worker" ! [(match_operand:SI 0 "register_operand" "")] ! "TARGET_STACK_PROBE" ! { ! if (TARGET_64BIT) ! emit_insn (gen_allocate_stack_worker_rex64 (operands[0])); ! else ! emit_insn (gen_allocate_stack_worker_1 (operands[0])); ! DONE; ! }) ! ! (define_insn "allocate_stack_worker_1" [(unspec:SI [(match_operand:SI 0 "register_operand" "a")] 3) (set (reg:SI 7) (minus:SI (reg:SI 7) (match_dup 0))) (clobber (match_dup 0)) (clobber (reg:CC 17))] ! "!TARGET_64BIT && TARGET_STACK_PROBE" ! "call\t__alloca" ! [(set_attr "type" "multi") ! (set_attr "length" "5")]) ! ! (define_insn "allocate_stack_worker_rex64" ! [(unspec:DI [(match_operand:DI 0 "register_operand" "a")] 3) ! (set (reg:DI 7) (minus:DI (reg:DI 7) (match_dup 0))) ! (clobber (match_dup 0)) ! (clobber (reg:CC 17))] ! "TARGET_64BIT && TARGET_STACK_PROBE" ! "call\t__alloca" [(set_attr "type" "multi") (set_attr "length" "5")]) *************** *** 11893,11899 **** (minus:SI (reg:SI 7) (match_dup 1))) (clobber (reg:CC 17))])] "TARGET_STACK_PROBE" - " { #ifdef CHECK_STACK_LIMIT if (GET_CODE (operands[1]) == CONST_INT --- 16812,16817 ---- *************** *** 11907,11922 **** emit_move_insn (operands[0], virtual_stack_dynamic_rtx); DONE; ! }") (define_expand "builtin_setjmp_receiver" [(label_ref (match_operand 0 "" ""))] ! "flag_pic" ! " { load_pic_register (); DONE; ! }") ;; Avoid redundant prefixes by splitting HImode arithmetic to SImode. --- 16825,16839 ---- emit_move_insn (operands[0], virtual_stack_dynamic_rtx); DONE; ! }) (define_expand "builtin_setjmp_receiver" [(label_ref (match_operand 0 "" ""))] ! "!TARGET_64BIT && flag_pic" { load_pic_register (); DONE; ! }) ;; Avoid redundant prefixes by splitting HImode arithmetic to SImode. *************** *** 11959,11965 **** (set (match_dup 0) (and:SI (match_dup 1) (match_dup 2)))])] "operands[2] ! = GEN_INT (INTVAL (operands[2]) & GET_MODE_MASK (GET_MODE (operands[0]))); operands[0] = gen_lowpart (SImode, operands[0]); operands[1] = gen_lowpart (SImode, operands[1]);") --- 16876,16884 ---- (set (match_dup 0) (and:SI (match_dup 1) (match_dup 2)))])] "operands[2] ! = GEN_INT (trunc_int_for_mode (INTVAL (operands[2]) ! & GET_MODE_MASK (GET_MODE (operands[0])), ! SImode)); operands[0] = gen_lowpart (SImode, operands[0]); operands[1] = gen_lowpart (SImode, operands[1]);") *************** *** 11977,11983 **** (compare:CCNO (and:SI (match_dup 0) (match_dup 1)) (const_int 0)))] "operands[1] ! = GEN_INT (INTVAL (operands[1]) & GET_MODE_MASK (GET_MODE (operands[0]))); operands[0] = gen_lowpart (SImode, operands[0]);") (define_split --- 16896,16904 ---- (compare:CCNO (and:SI (match_dup 0) (match_dup 1)) (const_int 0)))] "operands[1] ! = GEN_INT (trunc_int_for_mode (INTVAL (operands[1]) ! & GET_MODE_MASK (GET_MODE (operands[0])), ! SImode)); operands[0] = gen_lowpart (SImode, operands[0]);") (define_split *************** *** 12036,12041 **** --- 16957,16971 ---- (set (match_dup 0) (match_dup 2))] "") + (define_peephole2 + [(set (match_operand:DI 0 "push_operand" "") + (match_operand:DI 1 "memory_operand" "")) + (match_scratch:DI 2 "r")] + "! optimize_size && ! TARGET_PUSH_MEMORY" + [(set (match_dup 2) (match_dup 1)) + (set (match_dup 0) (match_dup 2))] + "") + ;; We need to handle SFmode only, because DFmode and XFmode is split to ;; SImode pushes. (define_peephole2 *************** *** 12163,12170 **** ;; lifetime information then. (define_peephole2 ! [(set (match_operand:SI 0 "nonimmediate_operand" "=rm") ! (not:SI (match_operand:SI 1 "nonimmediate_operand" "0")))] "!optimize_size && peep2_regno_dead_p (0, FLAGS_REG) && ((TARGET_PENTIUM --- 17093,17100 ---- ;; lifetime information then. (define_peephole2 ! [(set (match_operand:SI 0 "nonimmediate_operand" "") ! (not:SI (match_operand:SI 1 "nonimmediate_operand" "")))] "!optimize_size && peep2_regno_dead_p (0, FLAGS_REG) && ((TARGET_PENTIUM *************** *** 12177,12184 **** "") (define_peephole2 ! [(set (match_operand:HI 0 "nonimmediate_operand" "=rm") ! (not:HI (match_operand:HI 1 "nonimmediate_operand" "0")))] "!optimize_size && peep2_regno_dead_p (0, FLAGS_REG) && ((TARGET_PENTIUM --- 17107,17114 ---- "") (define_peephole2 ! [(set (match_operand:HI 0 "nonimmediate_operand" "") ! (not:HI (match_operand:HI 1 "nonimmediate_operand" "")))] "!optimize_size && peep2_regno_dead_p (0, FLAGS_REG) && ((TARGET_PENTIUM *************** *** 12191,12198 **** "") (define_peephole2 ! [(set (match_operand:QI 0 "nonimmediate_operand" "=rm") ! (not:QI (match_operand:QI 1 "nonimmediate_operand" "0")))] "!optimize_size && peep2_regno_dead_p (0, FLAGS_REG) && ((TARGET_PENTIUM --- 17121,17128 ---- "") (define_peephole2 ! [(set (match_operand:QI 0 "nonimmediate_operand" "") ! (not:QI (match_operand:QI 1 "nonimmediate_operand" "")))] "!optimize_size && peep2_regno_dead_p (0, FLAGS_REG) && ((TARGET_PENTIUM *************** *** 12208,12214 **** ;; "and imm, reg" if reg dies. The "and" form is also shorter (one ;; byte opcode instead of two, have a short form for byte operands), ;; so do it for other CPUs as well. Given that the value was dead, ! ;; this should not create any new dependancies. Pass on the sub-word ;; versions if we're concerned about partial register stalls. (define_peephole2 --- 17138,17144 ---- ;; "and imm, reg" if reg dies. The "and" form is also shorter (one ;; byte opcode instead of two, have a short form for byte operands), ;; so do it for other CPUs as well. Given that the value was dead, ! ;; this should not create any new dependencies. Pass on the sub-word ;; versions if we're concerned about partial register stalls. (define_peephole2 *************** *** 12255,12264 **** (compare (and:SI (zero_extract:SI ! (match_operand 0 "ext_register_operand" "q") (const_int 8) (const_int 8)) ! (match_operand 1 "const_int_operand" "n")) (const_int 0)))] "! TARGET_PARTIAL_REG_STALL && ix86_match_ccmode (insn, CCNOmode) --- 17185,17194 ---- (compare (and:SI (zero_extract:SI ! (match_operand 0 "ext_register_operand" "") (const_int 8) (const_int 8)) ! (match_operand 1 "const_int_operand" "")) (const_int 0)))] "! TARGET_PARTIAL_REG_STALL && ix86_match_ccmode (insn, CCNOmode) *************** *** 12355,12366 **** (const_int 0))] "(GET_MODE (operands[0]) == QImode || GET_MODE (operands[0]) == HImode ! || GET_MODE (operands[0]) == SImode) && (! TARGET_USE_MOV0 || optimize_size) && peep2_regno_dead_p (0, FLAGS_REG)" [(parallel [(set (match_dup 0) (const_int 0)) (clobber (reg:CC 17))])] ! "operands[0] = gen_rtx_REG (SImode, true_regnum (operands[0]));") (define_peephole2 [(set (strict_low_part (match_operand 0 "register_operand" "")) --- 17285,17298 ---- (const_int 0))] "(GET_MODE (operands[0]) == QImode || GET_MODE (operands[0]) == HImode ! || GET_MODE (operands[0]) == SImode ! || (GET_MODE (operands[0]) == DImode && TARGET_64BIT)) && (! TARGET_USE_MOV0 || optimize_size) && peep2_regno_dead_p (0, FLAGS_REG)" [(parallel [(set (match_dup 0) (const_int 0)) (clobber (reg:CC 17))])] ! "operands[0] = gen_rtx_REG (GET_MODE (operands[0]) == DImode ? DImode : SImode, ! true_regnum (operands[0]));") (define_peephole2 [(set (strict_low_part (match_operand 0 "register_operand" "")) *************** *** 12377,12388 **** [(set (match_operand 0 "register_operand" "") (const_int -1))] "(GET_MODE (operands[0]) == HImode ! || GET_MODE (operands[0]) == SImode) && (optimize_size || TARGET_PENTIUM) && peep2_regno_dead_p (0, FLAGS_REG)" [(parallel [(set (match_dup 0) (const_int -1)) (clobber (reg:CC 17))])] ! "operands[0] = gen_rtx_REG (SImode, true_regnum (operands[0]));") ;; Attempt to convert simple leas to adds. These can be created by ;; move expanders. --- 17309,17322 ---- [(set (match_operand 0 "register_operand" "") (const_int -1))] "(GET_MODE (operands[0]) == HImode ! || GET_MODE (operands[0]) == SImode ! || (GET_MODE (operands[0]) == DImode && TARGET_64BIT)) && (optimize_size || TARGET_PENTIUM) && peep2_regno_dead_p (0, FLAGS_REG)" [(parallel [(set (match_dup 0) (const_int -1)) (clobber (reg:CC 17))])] ! "operands[0] = gen_rtx_REG (GET_MODE (operands[0]) == DImode ? DImode : SImode, ! true_regnum (operands[0]));") ;; Attempt to convert simple leas to adds. These can be created by ;; move expanders. *************** *** 12397,12419 **** (define_peephole2 [(set (match_operand:SI 0 "register_operand" "") (mult:SI (match_dup 0) ! (match_operand:SI 1 "immediate_operand" "")))] "exact_log2 (INTVAL (operands[1])) >= 0 && peep2_regno_dead_p (0, FLAGS_REG)" [(parallel [(set (match_dup 0) (ashift:SI (match_dup 0) (match_dup 2))) (clobber (reg:CC 17))])] "operands[2] = GEN_INT (exact_log2 (INTVAL (operands[1])));") ;; The ESP adjustments can be done by the push and pop instructions. Resulting ;; code is shorter, since push is only 1 byte, while add imm, %esp 3 bytes. On ;; many CPUs it is also faster, since special hardware to avoid esp ! ;; dependancies is present. ! ;; While some of these converisons may be done using splitters, we use peepholes ;; in order to allow combine_stack_adjustments pass to see nonobfuscated RTL. ! ;; Convert prologue esp substractions to push. ;; We need register to push. In order to keep verify_flow_info happy we have ;; two choices ;; - use scratch and clobber it in order to avoid dependencies --- 17331,17392 ---- (define_peephole2 [(set (match_operand:SI 0 "register_operand" "") + (subreg:SI (plus:DI (match_operand:DI 1 "register_operand" "") + (match_operand:DI 2 "nonmemory_operand" "")) 0))] + "peep2_regno_dead_p (0, FLAGS_REG) && REGNO (operands[0]) == REGNO (operands[1])" + [(parallel [(set (match_dup 0) (plus:SI (match_dup 0) (match_dup 2))) + (clobber (reg:CC 17))])] + "operands[2] = gen_lowpart (SImode, operands[2]);") + + (define_peephole2 + [(set (match_operand:DI 0 "register_operand" "") + (plus:DI (match_dup 0) + (match_operand:DI 1 "x86_64_general_operand" "")))] + "peep2_regno_dead_p (0, FLAGS_REG)" + [(parallel [(set (match_dup 0) (plus:DI (match_dup 0) (match_dup 1))) + (clobber (reg:CC 17))])] + "") + + (define_peephole2 + [(set (match_operand:SI 0 "register_operand" "") (mult:SI (match_dup 0) ! (match_operand:SI 1 "const_int_operand" "")))] "exact_log2 (INTVAL (operands[1])) >= 0 && peep2_regno_dead_p (0, FLAGS_REG)" [(parallel [(set (match_dup 0) (ashift:SI (match_dup 0) (match_dup 2))) (clobber (reg:CC 17))])] "operands[2] = GEN_INT (exact_log2 (INTVAL (operands[1])));") + (define_peephole2 + [(set (match_operand:DI 0 "register_operand" "") + (mult:DI (match_dup 0) + (match_operand:DI 1 "const_int_operand" "")))] + "exact_log2 (INTVAL (operands[1])) >= 0 + && peep2_regno_dead_p (0, FLAGS_REG)" + [(parallel [(set (match_dup 0) (ashift:DI (match_dup 0) (match_dup 2))) + (clobber (reg:CC 17))])] + "operands[2] = GEN_INT (exact_log2 (INTVAL (operands[1])));") + + (define_peephole2 + [(set (match_operand:SI 0 "register_operand" "") + (subreg:SI (mult:DI (match_operand:DI 1 "register_operand" "") + (match_operand:DI 2 "const_int_operand" "")) 0))] + "exact_log2 (INTVAL (operands[1])) >= 0 + && REGNO (operands[0]) == REGNO (operands[1]) + && peep2_regno_dead_p (0, FLAGS_REG)" + [(parallel [(set (match_dup 0) (ashift:SI (match_dup 0) (match_dup 2))) + (clobber (reg:CC 17))])] + "operands[2] = GEN_INT (exact_log2 (INTVAL (operands[2])));") + ;; The ESP adjustments can be done by the push and pop instructions. Resulting ;; code is shorter, since push is only 1 byte, while add imm, %esp 3 bytes. On ;; many CPUs it is also faster, since special hardware to avoid esp ! ;; dependencies is present. ! ;; While some of these conversions may be done using splitters, we use peepholes ;; in order to allow combine_stack_adjustments pass to see nonobfuscated RTL. ! ;; Convert prologue esp subtractions to push. ;; We need register to push. In order to keep verify_flow_info happy we have ;; two choices ;; - use scratch and clobber it in order to avoid dependencies *************** *** 12445,12451 **** (parallel [(set (mem:SI (pre_dec:SI (reg:SI 7))) (match_dup 0)) (clobber (mem:BLK (scratch)))])]) ! ;; Convert esp substractions to push. (define_peephole2 [(match_scratch:SI 0 "r") (parallel [(set (reg:SI 7) (plus:SI (reg:SI 7) (const_int -4))) --- 17418,17424 ---- (parallel [(set (mem:SI (pre_dec:SI (reg:SI 7))) (match_dup 0)) (clobber (mem:BLK (scratch)))])]) ! ;; Convert esp subtractions to push. (define_peephole2 [(match_scratch:SI 0 "r") (parallel [(set (reg:SI 7) (plus:SI (reg:SI 7) (const_int -4))) *************** *** 12601,12625 **** (const_int 128))) (clobber (match_dup 0))])] "") ! ;; Convert setcc + movzbl to xor + setcc if operands don't overlap. (define_peephole2 ! [(set (reg 17) (match_operand 0 "" "")) ! (set (match_operand:QI 1 "register_operand" "") ! (match_operator:QI 2 "ix86_comparison_operator" ! [(reg 17) (const_int 0)])) ! (set (match_operand 3 "q_regs_operand" "") ! (zero_extend (match_dup 1)))] ! "peep2_reg_dead_p (3, operands[1]) ! && ! reg_overlap_mentioned_p (operands[3], operands[0])" ! [(parallel [(set (match_dup 3) (const_int 0)) ! (clobber (reg:CC 17))]) ! (set (match_dup 4) (match_dup 0)) ! (set (strict_low_part (match_dup 5)) ! (match_dup 2))] ! "operands[4] = gen_rtx_REG (GET_MODE (operands[0]), 17); ! operands[5] = gen_rtx_REG (QImode, REGNO (operands[3]));") ;; Call-value patterns last so that the wildcard operand does not ;; disrupt insn-recog's switch tables. --- 17574,17694 ---- (const_int 128))) (clobber (match_dup 0))])] "") + + (define_peephole2 + [(match_scratch:DI 0 "r") + (parallel [(set (reg:DI 7) (plus:DI (reg:DI 7) (const_int -8))) + (clobber (reg:CC 17)) + (clobber (mem:BLK (scratch)))])] + "optimize_size || !TARGET_SUB_ESP_4" + [(clobber (match_dup 0)) + (parallel [(set (mem:DI (pre_dec:DI (reg:DI 7))) (match_dup 0)) + (clobber (mem:BLK (scratch)))])]) ! (define_peephole2 ! [(match_scratch:DI 0 "r") ! (parallel [(set (reg:DI 7) (plus:DI (reg:DI 7) (const_int -16))) ! (clobber (reg:CC 17)) ! (clobber (mem:BLK (scratch)))])] ! "optimize_size || !TARGET_SUB_ESP_8" ! [(clobber (match_dup 0)) ! (set (mem:DI (pre_dec:DI (reg:DI 7))) (match_dup 0)) ! (parallel [(set (mem:DI (pre_dec:DI (reg:DI 7))) (match_dup 0)) ! (clobber (mem:BLK (scratch)))])]) + ;; Convert esp subtractions to push. (define_peephole2 ! [(match_scratch:DI 0 "r") ! (parallel [(set (reg:DI 7) (plus:DI (reg:DI 7) (const_int -8))) ! (clobber (reg:CC 17))])] ! "optimize_size || !TARGET_SUB_ESP_4" ! [(clobber (match_dup 0)) ! (set (mem:DI (pre_dec:DI (reg:DI 7))) (match_dup 0))]) ! ! (define_peephole2 ! [(match_scratch:DI 0 "r") ! (parallel [(set (reg:DI 7) (plus:DI (reg:DI 7) (const_int -16))) ! (clobber (reg:CC 17))])] ! "optimize_size || !TARGET_SUB_ESP_8" ! [(clobber (match_dup 0)) ! (set (mem:DI (pre_dec:DI (reg:DI 7))) (match_dup 0)) ! (set (mem:DI (pre_dec:DI (reg:DI 7))) (match_dup 0))]) ! ! ;; Convert epilogue deallocator to pop. ! (define_peephole2 ! [(match_scratch:DI 0 "r") ! (parallel [(set (reg:DI 7) (plus:DI (reg:DI 7) (const_int 8))) ! (clobber (reg:CC 17)) ! (clobber (mem:BLK (scratch)))])] ! "optimize_size || !TARGET_ADD_ESP_4" ! [(parallel [(set (match_dup 0) (mem:DI (reg:DI 7))) ! (set (reg:DI 7) (plus:DI (reg:DI 7) (const_int 8))) ! (clobber (mem:BLK (scratch)))])] ! "") ! ! ;; Two pops case is tricky, since pop causes dependency on destination register. ! ;; We use two registers if available. ! (define_peephole2 ! [(match_scratch:DI 0 "r") ! (match_scratch:DI 1 "r") ! (parallel [(set (reg:DI 7) (plus:DI (reg:DI 7) (const_int 16))) ! (clobber (reg:CC 17)) ! (clobber (mem:BLK (scratch)))])] ! "optimize_size || !TARGET_ADD_ESP_8" ! [(parallel [(set (match_dup 0) (mem:DI (reg:DI 7))) ! (set (reg:DI 7) (plus:DI (reg:DI 7) (const_int 8))) ! (clobber (mem:BLK (scratch)))]) ! (parallel [(set (match_dup 1) (mem:DI (reg:DI 7))) ! (set (reg:DI 7) (plus:DI (reg:DI 7) (const_int 8)))])] ! "") ! ! (define_peephole2 ! [(match_scratch:DI 0 "r") ! (parallel [(set (reg:DI 7) (plus:DI (reg:DI 7) (const_int 16))) ! (clobber (reg:CC 17)) ! (clobber (mem:BLK (scratch)))])] ! "optimize_size" ! [(parallel [(set (match_dup 0) (mem:DI (reg:DI 7))) ! (set (reg:DI 7) (plus:DI (reg:DI 7) (const_int 8))) ! (clobber (mem:BLK (scratch)))]) ! (parallel [(set (match_dup 0) (mem:DI (reg:DI 7))) ! (set (reg:DI 7) (plus:DI (reg:DI 7) (const_int 8)))])] ! "") ! ! ;; Convert esp additions to pop. ! (define_peephole2 ! [(match_scratch:DI 0 "r") ! (parallel [(set (reg:DI 7) (plus:DI (reg:DI 7) (const_int 8))) ! (clobber (reg:CC 17))])] ! "" ! [(parallel [(set (match_dup 0) (mem:DI (reg:DI 7))) ! (set (reg:DI 7) (plus:DI (reg:DI 7) (const_int 8)))])] ! "") ! ! ;; Two pops case is tricky, since pop causes dependency on destination register. ! ;; We use two registers if available. ! (define_peephole2 ! [(match_scratch:DI 0 "r") ! (match_scratch:DI 1 "r") ! (parallel [(set (reg:DI 7) (plus:DI (reg:DI 7) (const_int 16))) ! (clobber (reg:CC 17))])] ! "" ! [(parallel [(set (match_dup 0) (mem:DI (reg:DI 7))) ! (set (reg:DI 7) (plus:DI (reg:DI 7) (const_int 8)))]) ! (parallel [(set (match_dup 1) (mem:DI (reg:DI 7))) ! (set (reg:DI 7) (plus:DI (reg:DI 7) (const_int 8)))])] ! "") ! ! (define_peephole2 ! [(match_scratch:DI 0 "r") ! (parallel [(set (reg:DI 7) (plus:DI (reg:DI 7) (const_int 16))) ! (clobber (reg:CC 17))])] ! "optimize_size" ! [(parallel [(set (match_dup 0) (mem:DI (reg:DI 7))) ! (set (reg:DI 7) (plus:DI (reg:DI 7) (const_int 8)))]) ! (parallel [(set (match_dup 0) (mem:DI (reg:DI 7))) ! (set (reg:DI 7) (plus:DI (reg:DI 7) (const_int 8)))])] ! "") ;; Call-value patterns last so that the wildcard operand does not ;; disrupt insn-recog's switch tables. *************** *** 12630,12643 **** (match_operand:SI 2 "" ""))) (set (reg:SI 7) (plus:SI (reg:SI 7) (match_operand:SI 3 "immediate_operand" "")))] ! "" ! "* { if (SIBLING_CALL_P (insn)) ! return \"jmp\\t%P1\"; else ! return \"call\\t%P1\"; ! }" [(set_attr "type" "callv")]) (define_insn "*call_value_pop_1" --- 17699,17711 ---- (match_operand:SI 2 "" ""))) (set (reg:SI 7) (plus:SI (reg:SI 7) (match_operand:SI 3 "immediate_operand" "")))] ! "!TARGET_64BIT" { if (SIBLING_CALL_P (insn)) ! return "jmp\t%P1"; else ! return "call\t%P1"; ! } [(set_attr "type" "callv")]) (define_insn "*call_value_pop_1" *************** *** 12646,12707 **** (match_operand:SI 2 "" ""))) (set (reg:SI 7) (plus:SI (reg:SI 7) (match_operand:SI 3 "immediate_operand" "i")))] ! "" ! "* { if (constant_call_address_operand (operands[1], QImode)) { if (SIBLING_CALL_P (insn)) ! return \"jmp\\t%P1\"; else ! return \"call\\t%P1\"; } if (SIBLING_CALL_P (insn)) ! return \"jmp\\t%A1\"; else ! return \"call\\t%A1\"; ! }" [(set_attr "type" "callv")]) (define_insn "*call_value_0" [(set (match_operand 0 "" "") (call (mem:QI (match_operand:SI 1 "constant_call_address_operand" "")) (match_operand:SI 2 "" "")))] ! "" ! "* { if (SIBLING_CALL_P (insn)) ! return \"jmp\\t%P1\"; else ! return \"call\\t%P1\"; ! }" [(set_attr "type" "callv")]) (define_insn "*call_value_1" [(set (match_operand 0 "" "") (call (mem:QI (match_operand:SI 1 "call_insn_operand" "rsm")) (match_operand:SI 2 "" "")))] ! "" ! "* { if (constant_call_address_operand (operands[1], QImode)) { if (SIBLING_CALL_P (insn)) ! return \"jmp\\t%P1\"; else ! return \"call\\t%P1\"; } if (SIBLING_CALL_P (insn)) ! return \"jmp\\t%A1\"; else ! return \"call\\t%A1\"; ! }" [(set_attr "type" "callv")]) (define_insn "trap" [(trap_if (const_int 1) (const_int 5))] "" ! "int\\t$5") ;;; ix86 doesn't have conditional trap instructions, but we fake them ;;; for the sake of bounds checking. By emitting bounds checks as --- 17714,17805 ---- (match_operand:SI 2 "" ""))) (set (reg:SI 7) (plus:SI (reg:SI 7) (match_operand:SI 3 "immediate_operand" "i")))] ! "!TARGET_64BIT" { if (constant_call_address_operand (operands[1], QImode)) { if (SIBLING_CALL_P (insn)) ! return "jmp\t%P1"; else ! return "call\t%P1"; } if (SIBLING_CALL_P (insn)) ! return "jmp\t%A1"; else ! return "call\t%A1"; ! } [(set_attr "type" "callv")]) (define_insn "*call_value_0" [(set (match_operand 0 "" "") (call (mem:QI (match_operand:SI 1 "constant_call_address_operand" "")) (match_operand:SI 2 "" "")))] ! "!TARGET_64BIT" { if (SIBLING_CALL_P (insn)) ! return "jmp\t%P1"; else ! return "call\t%P1"; ! } ! [(set_attr "type" "callv")]) ! ! (define_insn "*call_value_0_rex64" ! [(set (match_operand 0 "" "") ! (call (mem:QI (match_operand:DI 1 "constant_call_address_operand" "")) ! (match_operand:DI 2 "const_int_operand" "")))] ! "TARGET_64BIT" ! { ! if (SIBLING_CALL_P (insn)) ! return "jmp\t%P1"; ! else ! return "call\t%P1"; ! } [(set_attr "type" "callv")]) (define_insn "*call_value_1" [(set (match_operand 0 "" "") (call (mem:QI (match_operand:SI 1 "call_insn_operand" "rsm")) (match_operand:SI 2 "" "")))] ! "!TARGET_64BIT" { if (constant_call_address_operand (operands[1], QImode)) { if (SIBLING_CALL_P (insn)) ! return "jmp\t%P1"; else ! return "call\t%P1"; } if (SIBLING_CALL_P (insn)) ! return "jmp\t%*%1"; else ! return "call\t%*%1"; ! } ! [(set_attr "type" "callv")]) ! ! (define_insn "*call_value_1_rex64" ! [(set (match_operand 0 "" "") ! (call (mem:QI (match_operand:DI 1 "call_insn_operand" "rsm")) ! (match_operand:DI 2 "" "")))] ! "TARGET_64BIT" ! { ! if (constant_call_address_operand (operands[1], QImode)) ! { ! if (SIBLING_CALL_P (insn)) ! return "jmp\t%P1"; ! else ! return "call\t%P1"; ! } ! if (SIBLING_CALL_P (insn)) ! return "jmp\t%A1"; ! else ! return "call\t%A1"; ! } [(set_attr "type" "callv")]) (define_insn "trap" [(trap_if (const_int 1) (const_int 5))] "" ! "int\t$5") ;;; ix86 doesn't have conditional trap instructions, but we fake them ;;; for the sake of bounds checking. By emitting bounds checks as *************** *** 12725,12752 **** [(match_dup 2) (const_int 0)]) (match_operand 1 "const_int_operand" ""))] "" - " { emit_insn (gen_rtx_TRAP_IF (VOIDmode, ix86_expand_compare (GET_CODE (operands[0]), ! NULL_RTX, NULL_RTX), operands[1])); DONE; ! }") ! (define_insn "" [(trap_if (match_operator 0 "comparison_operator" [(reg 17) (const_int 0)]) (match_operand 1 "const_int_operand" ""))] "" - "* { operands[2] = gen_label_rtx (); ! output_asm_insn (\"j%c0\\t%l2\; int\\t%1\", operands); ! ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", CODE_LABEL_NUMBER (operands[2])); RET; ! }") ;; Pentium III SIMD instructions. --- 17823,17848 ---- [(match_dup 2) (const_int 0)]) (match_operand 1 "const_int_operand" ""))] "" { emit_insn (gen_rtx_TRAP_IF (VOIDmode, ix86_expand_compare (GET_CODE (operands[0]), ! NULL, NULL), operands[1])); DONE; ! }) ! (define_insn "*conditional_trap_1" [(trap_if (match_operator 0 "comparison_operator" [(reg 17) (const_int 0)]) (match_operand 1 "const_int_operand" ""))] "" { operands[2] = gen_label_rtx (); ! output_asm_insn ("j%c0\t%l2\; int\t%1", operands); ! ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "L", CODE_LABEL_NUMBER (operands[2])); RET; ! }) ;; Pentium III SIMD instructions. *************** *** 12754,12985 **** (define_insn "movv4sf_internal" [(set (match_operand:V4SF 0 "nonimmediate_operand" "=x,m") ! (match_operand:V4SF 1 "general_operand" "xm,x"))] "TARGET_SSE" ;; @@@ let's try to use movaps here. ! "movaps\\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "movv4si_internal" [(set (match_operand:V4SI 0 "nonimmediate_operand" "=x,m") ! (match_operand:V4SI 1 "general_operand" "xm,x"))] "TARGET_SSE" ;; @@@ let's try to use movaps here. ! "movaps\\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "movv8qi_internal" [(set (match_operand:V8QI 0 "nonimmediate_operand" "=y,m") ! (match_operand:V8QI 1 "general_operand" "ym,y"))] "TARGET_MMX" ! "movq\\t{%1, %0|%0, %1}" [(set_attr "type" "mmx")]) (define_insn "movv4hi_internal" [(set (match_operand:V4HI 0 "nonimmediate_operand" "=y,m") ! (match_operand:V4HI 1 "general_operand" "ym,y"))] "TARGET_MMX" ! "movq\\t{%1, %0|%0, %1}" [(set_attr "type" "mmx")]) (define_insn "movv2si_internal" [(set (match_operand:V2SI 0 "nonimmediate_operand" "=y,m") ! (match_operand:V2SI 1 "general_operand" "ym,y"))] "TARGET_MMX" "movq\\t{%1, %0|%0, %1}" [(set_attr "type" "mmx")]) (define_expand "movti" [(set (match_operand:TI 0 "general_operand" "") (match_operand:TI 1 "general_operand" ""))] ! "TARGET_SSE" ! " { ! /* For constants other than zero into memory. We do not know how the ! instructions used to build constants modify the upper 64 bits ! of the register, once we have that information we may be able ! to handle some of them more efficiently. */ ! if ((reload_in_progress | reload_completed) == 0 ! && register_operand (operands[0], TImode) ! && CONSTANT_P (operands[1])) ! { ! rtx addr = gen_reg_rtx (Pmode); ! ! emit_move_insn (addr, XEXP (force_const_mem (TImode, operands[1]), 0)); ! operands[1] = gen_rtx_MEM (TImode, addr); ! } ! ! /* Make operand1 a register if it isn't already. */ ! if ((reload_in_progress | reload_completed) == 0 ! && !register_operand (operands[0], TImode) ! && !register_operand (operands[1], TImode) ! && operands[1] != CONST0_RTX (TImode)) ! { ! rtx temp = force_reg (TImode, operands[1]); ! emit_move_insn (operands[0], temp); ! DONE; ! } ! }") (define_expand "movv4sf" [(set (match_operand:V4SF 0 "general_operand" "") (match_operand:V4SF 1 "general_operand" ""))] "TARGET_SSE" - " { ! /* For constants other than zero into memory. We do not know how the ! instructions used to build constants modify the upper 64 bits ! of the register, once we have that information we may be able ! to handle some of them more efficiently. */ ! if ((reload_in_progress | reload_completed) == 0 ! && register_operand (operands[0], V4SFmode) ! && CONSTANT_P (operands[1])) ! { ! rtx addr = gen_reg_rtx (Pmode); ! ! emit_move_insn (addr, XEXP (force_const_mem (V4SFmode, operands[1]), 0)); ! operands[1] = gen_rtx_MEM (V4SFmode, addr); ! } ! ! /* Make operand1 a register if it isn't already. */ ! if ((reload_in_progress | reload_completed) == 0 ! && !register_operand (operands[0], V4SFmode) ! && !register_operand (operands[1], V4SFmode) ! && operands[1] != CONST0_RTX (V4SFmode)) ! { ! rtx temp = force_reg (V4SFmode, operands[1]); ! emit_move_insn (operands[0], temp); ! DONE; ! } ! }") (define_expand "movv4si" [(set (match_operand:V4SI 0 "general_operand" "") (match_operand:V4SI 1 "general_operand" ""))] "TARGET_MMX" - " { ! /* For constants other than zero into memory. We do not know how the ! instructions used to build constants modify the upper 64 bits ! of the register, once we have that information we may be able ! to handle some of them more efficiently. */ ! if ((reload_in_progress | reload_completed) == 0 ! && register_operand (operands[0], V4SImode) ! && CONSTANT_P (operands[1])) ! { ! rtx addr = gen_reg_rtx (Pmode); ! ! emit_move_insn (addr, XEXP (force_const_mem (V4SImode, operands[1]), 0)); ! operands[1] = gen_rtx_MEM (V4SImode, addr); ! } ! ! /* Make operand1 a register if it isn't already. */ ! if ((reload_in_progress | reload_completed) == 0 ! && !register_operand (operands[0], V4SImode) ! && !register_operand (operands[1], V4SImode) ! && operands[1] != CONST0_RTX (V4SImode)) ! { ! rtx temp = force_reg (V4SImode, operands[1]); ! emit_move_insn (operands[0], temp); ! DONE; ! } ! }") (define_expand "movv2si" [(set (match_operand:V2SI 0 "general_operand" "") (match_operand:V2SI 1 "general_operand" ""))] "TARGET_MMX" - " { ! /* For constants other than zero into memory. We do not know how the ! instructions used to build constants modify the upper 64 bits ! of the register, once we have that information we may be able ! to handle some of them more efficiently. */ ! if ((reload_in_progress | reload_completed) == 0 ! && register_operand (operands[0], V2SImode) ! && CONSTANT_P (operands[1])) ! { ! rtx addr = gen_reg_rtx (Pmode); ! ! emit_move_insn (addr, XEXP (force_const_mem (V2SImode, operands[1]), 0)); ! operands[1] = gen_rtx_MEM (V2SImode, addr); ! } ! ! /* Make operand1 a register if it isn't already. */ ! if ((reload_in_progress | reload_completed) == 0 ! && !register_operand (operands[0], V2SImode) ! && !register_operand (operands[1], V2SImode) ! && operands[1] != CONST0_RTX (V2SImode)) ! { ! rtx temp = force_reg (V2SImode, operands[1]); ! emit_move_insn (operands[0], temp); ! DONE; ! } ! }") (define_expand "movv4hi" [(set (match_operand:V4HI 0 "general_operand" "") (match_operand:V4HI 1 "general_operand" ""))] "TARGET_MMX" - " { ! /* For constants other than zero into memory. We do not know how the ! instructions used to build constants modify the upper 64 bits ! of the register, once we have that information we may be able ! to handle some of them more efficiently. */ ! if ((reload_in_progress | reload_completed) == 0 ! && register_operand (operands[0], V4HImode) ! && CONSTANT_P (operands[1])) ! { ! rtx addr = gen_reg_rtx (Pmode); ! ! emit_move_insn (addr, XEXP (force_const_mem (V4HImode, operands[1]), 0)); ! operands[1] = gen_rtx_MEM (V4HImode, addr); ! } ! ! /* Make operand1 a register if it isn't already. */ ! if ((reload_in_progress | reload_completed) == 0 ! && !register_operand (operands[0], V4HImode) ! && !register_operand (operands[1], V4HImode) ! && operands[1] != CONST0_RTX (V4HImode)) ! { ! rtx temp = force_reg (V4HImode, operands[1]); ! emit_move_insn (operands[0], temp); ! DONE; ! } ! }") (define_expand "movv8qi" [(set (match_operand:V8QI 0 "general_operand" "") (match_operand:V8QI 1 "general_operand" ""))] "TARGET_MMX" - " { ! /* For constants other than zero into memory. We do not know how the ! instructions used to build constants modify the upper 64 bits ! of the register, once we have that information we may be able ! to handle some of them more efficiently. */ ! if ((reload_in_progress | reload_completed) == 0 ! && register_operand (operands[0], V8QImode) ! && CONSTANT_P (operands[1])) ! { ! rtx addr = gen_reg_rtx (Pmode); ! ! emit_move_insn (addr, XEXP (force_const_mem (V8QImode, operands[1]), 0)); ! operands[1] = gen_rtx_MEM (V8QImode, addr); ! } ! /* Make operand1 a register if it isn't already. */ ! if ((reload_in_progress | reload_completed) == 0 ! && !register_operand (operands[0], V8QImode) ! && !register_operand (operands[1], V8QImode) ! && operands[1] != CONST0_RTX (V8QImode)) ! { ! rtx temp = force_reg (V8QImode, operands[1]); ! emit_move_insn (operands[0], temp); ! DONE; ! } ! }") (define_insn_and_split "*pushti" [(set (match_operand:TI 0 "push_operand" "=<") --- 17850,17962 ---- (define_insn "movv4sf_internal" [(set (match_operand:V4SF 0 "nonimmediate_operand" "=x,m") ! (match_operand:V4SF 1 "nonimmediate_operand" "xm,x"))] "TARGET_SSE" ;; @@@ let's try to use movaps here. ! "movaps\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "movv4si_internal" [(set (match_operand:V4SI 0 "nonimmediate_operand" "=x,m") ! (match_operand:V4SI 1 "nonimmediate_operand" "xm,x"))] "TARGET_SSE" ;; @@@ let's try to use movaps here. ! "movaps\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "movv8qi_internal" [(set (match_operand:V8QI 0 "nonimmediate_operand" "=y,m") ! (match_operand:V8QI 1 "nonimmediate_operand" "ym,y"))] "TARGET_MMX" ! "movq\t{%1, %0|%0, %1}" [(set_attr "type" "mmx")]) (define_insn "movv4hi_internal" [(set (match_operand:V4HI 0 "nonimmediate_operand" "=y,m") ! (match_operand:V4HI 1 "nonimmediate_operand" "ym,y"))] "TARGET_MMX" ! "movq\t{%1, %0|%0, %1}" [(set_attr "type" "mmx")]) (define_insn "movv2si_internal" [(set (match_operand:V2SI 0 "nonimmediate_operand" "=y,m") ! (match_operand:V2SI 1 "nonimmediate_operand" "ym,y"))] "TARGET_MMX" + "movq\t{%1, %0|%0, %1}" + [(set_attr "type" "mmx")]) + + (define_insn "movv2sf_internal" + [(set (match_operand:V2SF 0 "nonimmediate_operand" "=y,m") + (match_operand:V2SF 1 "nonimmediate_operand" "ym,y"))] + "TARGET_3DNOW" "movq\\t{%1, %0|%0, %1}" [(set_attr "type" "mmx")]) (define_expand "movti" [(set (match_operand:TI 0 "general_operand" "") (match_operand:TI 1 "general_operand" ""))] ! "TARGET_SSE || TARGET_64BIT" { ! if (TARGET_64BIT) ! ix86_expand_move (TImode, operands); ! else ! ix86_expand_vector_move (TImode, operands); ! DONE; ! }) (define_expand "movv4sf" [(set (match_operand:V4SF 0 "general_operand" "") (match_operand:V4SF 1 "general_operand" ""))] "TARGET_SSE" { ! ix86_expand_vector_move (V4SFmode, operands); ! DONE; ! }) (define_expand "movv4si" [(set (match_operand:V4SI 0 "general_operand" "") (match_operand:V4SI 1 "general_operand" ""))] "TARGET_MMX" { ! ix86_expand_vector_move (V4SImode, operands); ! DONE; ! }) (define_expand "movv2si" [(set (match_operand:V2SI 0 "general_operand" "") (match_operand:V2SI 1 "general_operand" ""))] "TARGET_MMX" { ! ix86_expand_vector_move (V2SImode, operands); ! DONE; ! }) (define_expand "movv4hi" [(set (match_operand:V4HI 0 "general_operand" "") (match_operand:V4HI 1 "general_operand" ""))] "TARGET_MMX" { ! ix86_expand_vector_move (V4HImode, operands); ! DONE; ! }) (define_expand "movv8qi" [(set (match_operand:V8QI 0 "general_operand" "") (match_operand:V8QI 1 "general_operand" ""))] "TARGET_MMX" { ! ix86_expand_vector_move (V8QImode, operands); ! DONE; ! }) ! (define_expand "movv2sf" ! [(set (match_operand:V2SF 0 "general_operand" "") ! (match_operand:V2SF 1 "general_operand" ""))] ! "TARGET_3DNOW" ! { ! ix86_expand_vector_move (V2SFmode, operands); ! DONE; ! }) (define_insn_and_split "*pushti" [(set (match_operand:TI 0 "push_operand" "=<") *************** *** 13047,13079 **** "" [(set_attr "type" "mmx")]) (define_insn "movti_internal" ! [(set (match_operand:TI 0 "nonimmediate_operand" "=x,m") ! (match_operand:TI 1 "general_operand" "xm,x"))] ! "TARGET_SSE" "@ movaps\\t{%1, %0|%0, %1} movaps\\t{%1, %0|%0, %1}" ! [(set_attr "type" "sse")]) ;; These two patterns are useful for specifying exactly whether to use ;; movaps or movups (define_insn "sse_movaps" [(set (match_operand:V4SF 0 "nonimmediate_operand" "=x,m") ! (unspec:V4SF [(match_operand:V4SF 1 "general_operand" "xm,x")] 38))] "TARGET_SSE" "@ ! movaps\\t{%1, %0|%0, %1} ! movaps\\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "sse_movups" [(set (match_operand:V4SF 0 "nonimmediate_operand" "=x,m") ! (unspec:V4SF [(match_operand:V4SF 1 "general_operand" "xm,x")] 39))] "TARGET_SSE" "@ ! movups\\t{%1, %0|%0, %1} ! movups\\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) --- 18024,18092 ---- "" [(set_attr "type" "mmx")]) + (define_insn_and_split "*pushv2sf" + [(set (match_operand:V2SF 0 "push_operand" "=<") + (match_operand:V2SF 1 "nonmemory_operand" "y"))] + "TARGET_3DNOW" + "#" + "" + [(set (reg:SI 7) (plus:SI (reg:SI 7) (const_int -8))) + (set (mem:V2SF (reg:SI 7)) (match_dup 1))] + "" + [(set_attr "type" "mmx")]) + (define_insn "movti_internal" ! [(set (match_operand:TI 0 "nonimmediate_operand" "=x,x,m") ! (match_operand:TI 1 "general_operand" "O,xm,x"))] ! "TARGET_SSE && !TARGET_64BIT" "@ + xorps\t%0, %0 + movaps\t{%1, %0|%0, %1} + movaps\t{%1, %0|%0, %1}" + [(set_attr "type" "sse")]) + + (define_insn "*movti_rex64" + [(set (match_operand:TI 0 "nonimmediate_operand" "=r,o,x,mx,x") + (match_operand:TI 1 "general_operand" "riFo,riF,O,x,m"))] + "TARGET_64BIT + && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)" + "@ + # + # + xorps\t%0, %0 movaps\\t{%1, %0|%0, %1} movaps\\t{%1, %0|%0, %1}" ! [(set_attr "type" "*,*,sse,sse,sse") ! (set_attr "mode" "TI")]) ! ! (define_split ! [(set (match_operand:TI 0 "nonimmediate_operand" "") ! (match_operand:TI 1 "general_operand" ""))] ! "reload_completed && !SSE_REG_P (operands[0]) ! && !SSE_REG_P (operands[1])" ! [(const_int 0)] ! "ix86_split_long_move (operands); DONE;") ;; These two patterns are useful for specifying exactly whether to use ;; movaps or movups (define_insn "sse_movaps" [(set (match_operand:V4SF 0 "nonimmediate_operand" "=x,m") ! (unspec:V4SF ! [(match_operand:V4SF 1 "nonimmediate_operand" "xm,x")] 38))] "TARGET_SSE" "@ ! movaps\t{%1, %0|%0, %1} ! movaps\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "sse_movups" [(set (match_operand:V4SF 0 "nonimmediate_operand" "=x,m") ! (unspec:V4SF ! [(match_operand:V4SF 1 "nonimmediate_operand" "xm,x")] 39))] "TARGET_SSE" "@ ! movups\t{%1, %0|%0, %1} ! movups\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) *************** *** 13083,13119 **** [(set (match_operand:SI 0 "register_operand" "=r") (unspec:SI [(match_operand:V4SF 1 "register_operand" "x")] 33))] "TARGET_SSE" ! "movmskps\\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "mmx_pmovmskb" [(set (match_operand:SI 0 "register_operand" "=r") (unspec:SI [(match_operand:V8QI 1 "register_operand" "y")] 33))] ! "TARGET_SSE" ! "pmovmskb\\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "mmx_maskmovq" [(set (mem:V8QI (match_operand:SI 0 "register_operand" "D")) (unspec:V8QI [(match_operand:V8QI 1 "register_operand" "y") (match_operand:V8QI 2 "register_operand" "y")] 32))] ! "TARGET_SSE" ;; @@@ check ordering of operands in intel/nonintel syntax ! "maskmovq\\t{%2, %1|%1, %2}" [(set_attr "type" "sse")]) (define_insn "sse_movntv4sf" [(set (match_operand:V4SF 0 "memory_operand" "=m") (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "x")] 34))] "TARGET_SSE" ! "movntps\\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "sse_movntdi" [(set (match_operand:DI 0 "memory_operand" "=m") (unspec:DI [(match_operand:DI 1 "register_operand" "y")] 34))] ! "TARGET_SSE" ! "movntq\\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "sse_movhlps" --- 18096,18141 ---- [(set (match_operand:SI 0 "register_operand" "=r") (unspec:SI [(match_operand:V4SF 1 "register_operand" "x")] 33))] "TARGET_SSE" ! "movmskps\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "mmx_pmovmskb" [(set (match_operand:SI 0 "register_operand" "=r") (unspec:SI [(match_operand:V8QI 1 "register_operand" "y")] 33))] ! "TARGET_SSE || TARGET_3DNOW_A" ! "pmovmskb\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "mmx_maskmovq" [(set (mem:V8QI (match_operand:SI 0 "register_operand" "D")) (unspec:V8QI [(match_operand:V8QI 1 "register_operand" "y") (match_operand:V8QI 2 "register_operand" "y")] 32))] ! "(TARGET_SSE || TARGET_3DNOW_A) && !TARGET_64BIT" ;; @@@ check ordering of operands in intel/nonintel syntax ! "maskmovq\t{%2, %1|%1, %2}" ! [(set_attr "type" "sse")]) ! ! (define_insn "mmx_maskmovq_rex" ! [(set (mem:V8QI (match_operand:DI 0 "register_operand" "D")) ! (unspec:V8QI [(match_operand:V8QI 1 "register_operand" "y") ! (match_operand:V8QI 2 "register_operand" "y")] 32))] ! "(TARGET_SSE || TARGET_3DNOW_A) && TARGET_64BIT" ! ;; @@@ check ordering of operands in intel/nonintel syntax ! "maskmovq\t{%2, %1|%1, %2}" [(set_attr "type" "sse")]) (define_insn "sse_movntv4sf" [(set (match_operand:V4SF 0 "memory_operand" "=m") (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "x")] 34))] "TARGET_SSE" ! "movntps\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "sse_movntdi" [(set (match_operand:DI 0 "memory_operand" "=m") (unspec:DI [(match_operand:DI 1 "register_operand" "y")] 34))] ! "TARGET_SSE || TARGET_3DNOW_A" ! "movntq\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "sse_movhlps" *************** *** 13127,13133 **** (const_int 1)])) (const_int 3)))] "TARGET_SSE" ! "movhlps\\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "sse_movlhps" --- 18149,18155 ---- (const_int 1)])) (const_int 3)))] "TARGET_SSE" ! "movhlps\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "sse_movlhps" *************** *** 13141,13147 **** (const_int 1)])) (const_int 12)))] "TARGET_SSE" ! "movlhps\\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "sse_movhps" --- 18163,18169 ---- (const_int 1)])) (const_int 12)))] "TARGET_SSE" ! "movlhps\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "sse_movhps" *************** *** 13150,13157 **** (match_operand:V4SF 1 "nonimmediate_operand" "0,0") (match_operand:V4SF 2 "nonimmediate_operand" "m,x") (const_int 12)))] ! "TARGET_SSE && (GET_CODE (operands[1]) == MEM || GET_CODE (operands[2]) == MEM)" ! "movhps\\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "sse_movlps" --- 18172,18180 ---- (match_operand:V4SF 1 "nonimmediate_operand" "0,0") (match_operand:V4SF 2 "nonimmediate_operand" "m,x") (const_int 12)))] ! "TARGET_SSE ! && (GET_CODE (operands[1]) == MEM || GET_CODE (operands[2]) == MEM)" ! "movhps\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "sse_movlps" *************** *** 13160,13167 **** (match_operand:V4SF 1 "nonimmediate_operand" "0,0") (match_operand:V4SF 2 "nonimmediate_operand" "m,x") (const_int 3)))] ! "TARGET_SSE && (GET_CODE (operands[1]) == MEM || GET_CODE (operands[2]) == MEM)" ! "movlps\\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "sse_loadss" --- 18183,18191 ---- (match_operand:V4SF 1 "nonimmediate_operand" "0,0") (match_operand:V4SF 2 "nonimmediate_operand" "m,x") (const_int 3)))] ! "TARGET_SSE ! && (GET_CODE (operands[1]) == MEM || GET_CODE (operands[2]) == MEM)" ! "movlps\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "sse_loadss" *************** *** 13171,13177 **** (vec_duplicate:V4SF (float:SF (const_int 0))) (const_int 1)))] "TARGET_SSE" ! "movss\\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "sse_movss" --- 18195,18201 ---- (vec_duplicate:V4SF (float:SF (const_int 0))) (const_int 1)))] "TARGET_SSE" ! "movss\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "sse_movss" *************** *** 13181,13187 **** (match_operand:V4SF 2 "register_operand" "x") (const_int 1)))] "TARGET_SSE" ! "movss\\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "sse_storess" --- 18205,18211 ---- (match_operand:V4SF 2 "register_operand" "x") (const_int 1)))] "TARGET_SSE" ! "movss\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "sse_storess" *************** *** 13190,13196 **** (match_operand:V4SF 1 "register_operand" "x") (parallel [(const_int 0)])))] "TARGET_SSE" ! "movss\\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "sse_shufps" --- 18214,18220 ---- (match_operand:V4SF 1 "register_operand" "x") (parallel [(const_int 0)])))] "TARGET_SSE" ! "movss\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "sse_shufps" *************** *** 13200,13206 **** (match_operand:SI 3 "immediate_operand" "i")] 41))] "TARGET_SSE" ;; @@@ check operand order for intel/nonintel syntax ! "shufps\\t{%3, %2, %0|%0, %2, %3}" [(set_attr "type" "sse")]) --- 18224,18230 ---- (match_operand:SI 3 "immediate_operand" "i")] 41))] "TARGET_SSE" ;; @@@ check operand order for intel/nonintel syntax ! "shufps\t{%3, %2, %0|%0, %2, %3}" [(set_attr "type" "sse")]) *************** *** 13211,13245 **** (plus:V4SF (match_operand:V4SF 1 "register_operand" "0") (match_operand:V4SF 2 "nonimmediate_operand" "xm")))] "TARGET_SSE" ! "addps\\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "vmaddv4sf3" [(set (match_operand:V4SF 0 "register_operand" "=x") ! (vec_merge:V4SF (plus:V4SF (match_operand:V4SF 1 "register_operand" "0") ! (match_operand:V4SF 2 "nonimmediate_operand" "xm")) ! (match_dup 1) ! (const_int 1)))] "TARGET_SSE" ! "addss\\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "subv4sf3" [(set (match_operand:V4SF 0 "register_operand" "=x") (minus:V4SF (match_operand:V4SF 1 "register_operand" "0") ! (match_operand:V4SF 2 "nonimmediate_operand" "xm")))] "TARGET_SSE" ! "subps\\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "vmsubv4sf3" [(set (match_operand:V4SF 0 "register_operand" "=x") ! (vec_merge:V4SF (minus:V4SF (match_operand:V4SF 1 "register_operand" "0") ! (match_operand:V4SF 2 "nonimmediate_operand" "xm")) ! (match_dup 1) ! (const_int 1)))] "TARGET_SSE" ! "subss\\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "mulv4sf3" --- 18235,18271 ---- (plus:V4SF (match_operand:V4SF 1 "register_operand" "0") (match_operand:V4SF 2 "nonimmediate_operand" "xm")))] "TARGET_SSE" ! "addps\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "vmaddv4sf3" [(set (match_operand:V4SF 0 "register_operand" "=x") ! (vec_merge:V4SF ! (plus:V4SF (match_operand:V4SF 1 "register_operand" "0") ! (match_operand:V4SF 2 "nonimmediate_operand" "xm")) ! (match_dup 1) ! (const_int 1)))] "TARGET_SSE" ! "addss\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "subv4sf3" [(set (match_operand:V4SF 0 "register_operand" "=x") (minus:V4SF (match_operand:V4SF 1 "register_operand" "0") ! (match_operand:V4SF 2 "nonimmediate_operand" "xm")))] "TARGET_SSE" ! "subps\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "vmsubv4sf3" [(set (match_operand:V4SF 0 "register_operand" "=x") ! (vec_merge:V4SF ! (minus:V4SF (match_operand:V4SF 1 "register_operand" "0") ! (match_operand:V4SF 2 "nonimmediate_operand" "xm")) ! (match_dup 1) ! (const_int 1)))] "TARGET_SSE" ! "subss\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "mulv4sf3" *************** *** 13247,13263 **** (mult:V4SF (match_operand:V4SF 1 "register_operand" "0") (match_operand:V4SF 2 "nonimmediate_operand" "xm")))] "TARGET_SSE" ! "mulps\\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "vmmulv4sf3" [(set (match_operand:V4SF 0 "register_operand" "=x") ! (vec_merge:V4SF (mult:V4SF (match_operand:V4SF 1 "register_operand" "0") ! (match_operand:V4SF 2 "nonimmediate_operand" "xm")) ! (match_dup 1) ! (const_int 1)))] "TARGET_SSE" ! "mulss\\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "divv4sf3" --- 18273,18290 ---- (mult:V4SF (match_operand:V4SF 1 "register_operand" "0") (match_operand:V4SF 2 "nonimmediate_operand" "xm")))] "TARGET_SSE" ! "mulps\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "vmmulv4sf3" [(set (match_operand:V4SF 0 "register_operand" "=x") ! (vec_merge:V4SF ! (mult:V4SF (match_operand:V4SF 1 "register_operand" "0") ! (match_operand:V4SF 2 "nonimmediate_operand" "xm")) ! (match_dup 1) ! (const_int 1)))] "TARGET_SSE" ! "mulss\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "divv4sf3" *************** *** 13265,13281 **** (div:V4SF (match_operand:V4SF 1 "register_operand" "0") (match_operand:V4SF 2 "nonimmediate_operand" "xm")))] "TARGET_SSE" ! "divps\\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "vmdivv4sf3" [(set (match_operand:V4SF 0 "register_operand" "=x") ! (vec_merge:V4SF (div:V4SF (match_operand:V4SF 1 "register_operand" "0") ! (match_operand:V4SF 2 "nonimmediate_operand" "xm")) ! (match_dup 1) ! (const_int 1)))] "TARGET_SSE" ! "divss\\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) --- 18292,18309 ---- (div:V4SF (match_operand:V4SF 1 "register_operand" "0") (match_operand:V4SF 2 "nonimmediate_operand" "xm")))] "TARGET_SSE" ! "divps\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "vmdivv4sf3" [(set (match_operand:V4SF 0 "register_operand" "=x") ! (vec_merge:V4SF ! (div:V4SF (match_operand:V4SF 1 "register_operand" "0") ! (match_operand:V4SF 2 "nonimmediate_operand" "xm")) ! (match_dup 1) ! (const_int 1)))] "TARGET_SSE" ! "divss\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) *************** *** 13283,13335 **** (define_insn "rcpv4sf2" [(set (match_operand:V4SF 0 "register_operand" "=x") ! (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "xm")] 42))] "TARGET_SSE" ! "rcpps\\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "vmrcpv4sf2" [(set (match_operand:V4SF 0 "register_operand" "=x") ! (vec_merge:V4SF (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "xm")] 42) ! (match_operand:V4SF 2 "register_operand" "0") ! (const_int 1)))] "TARGET_SSE" ! "rcpss\\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "rsqrtv4sf2" [(set (match_operand:V4SF 0 "register_operand" "=x") ! (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "xm")] 43))] "TARGET_SSE" ! "rsqrtps\\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "vmrsqrtv4sf2" [(set (match_operand:V4SF 0 "register_operand" "=x") ! (vec_merge:V4SF (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "xm")] 43) ! (match_operand:V4SF 2 "register_operand" "0") ! (const_int 1)))] "TARGET_SSE" ! "rsqrtss\\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "sqrtv4sf2" [(set (match_operand:V4SF 0 "register_operand" "=x") ! (sqrt:V4SF (match_operand:V4SF 1 "register_operand" "xm")))] "TARGET_SSE" ! "sqrtps\\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "vmsqrtv4sf2" [(set (match_operand:V4SF 0 "register_operand" "=x") ! (vec_merge:V4SF (sqrt:V4SF (match_operand:V4SF 1 "register_operand" "xm")) ! (match_operand:V4SF 2 "register_operand" "0") ! (const_int 1)))] "TARGET_SSE" ! "sqrtss\\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) - ;; SSE logical operations. ;; These are not called andti3 etc. because we really really don't want --- 18311,18367 ---- (define_insn "rcpv4sf2" [(set (match_operand:V4SF 0 "register_operand" "=x") ! (unspec:V4SF ! [(match_operand:V4SF 1 "nonimmediate_operand" "xm")] 42))] "TARGET_SSE" ! "rcpps\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "vmrcpv4sf2" [(set (match_operand:V4SF 0 "register_operand" "=x") ! (vec_merge:V4SF ! (unspec:V4SF [(match_operand:V4SF 1 "nonimmediate_operand" "xm")] 42) ! (match_operand:V4SF 2 "register_operand" "0") ! (const_int 1)))] "TARGET_SSE" ! "rcpss\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "rsqrtv4sf2" [(set (match_operand:V4SF 0 "register_operand" "=x") ! (unspec:V4SF ! [(match_operand:V4SF 1 "nonimmediate_operand" "xm")] 43))] "TARGET_SSE" ! "rsqrtps\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "vmrsqrtv4sf2" [(set (match_operand:V4SF 0 "register_operand" "=x") ! (vec_merge:V4SF ! (unspec:V4SF [(match_operand:V4SF 1 "nonimmediate_operand" "xm")] 43) ! (match_operand:V4SF 2 "register_operand" "0") ! (const_int 1)))] "TARGET_SSE" ! "rsqrtss\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "sqrtv4sf2" [(set (match_operand:V4SF 0 "register_operand" "=x") ! (sqrt:V4SF (match_operand:V4SF 1 "nonimmediate_operand" "xm")))] "TARGET_SSE" ! "sqrtps\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "vmsqrtv4sf2" [(set (match_operand:V4SF 0 "register_operand" "=x") ! (vec_merge:V4SF ! (sqrt:V4SF (match_operand:V4SF 1 "nonimmediate_operand" "xm")) ! (match_operand:V4SF 2 "register_operand" "0") ! (const_int 1)))] "TARGET_SSE" ! "sqrtss\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) ;; SSE logical operations. ;; These are not called andti3 etc. because we really really don't want *************** *** 13337,13460 **** ;; into DImode subregs of SSE registers, and them together, and move out ;; of DImode subregs again! (define_insn "sse_andti3" [(set (match_operand:TI 0 "register_operand" "=x") ! (and:TI (match_operand:TI 1 "register_operand" "0") (match_operand:TI 2 "nonimmediate_operand" "xm")))] "TARGET_SSE" ! "andps\\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "sse_nandti3" [(set (match_operand:TI 0 "register_operand" "=x") (and:TI (not:TI (match_operand:TI 1 "register_operand" "0")) (match_operand:TI 2 "nonimmediate_operand" "xm")))] "TARGET_SSE" ! "andnps\\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "sse_iorti3" [(set (match_operand:TI 0 "register_operand" "=x") ! (ior:TI (match_operand:TI 1 "register_operand" "0") (match_operand:TI 2 "nonimmediate_operand" "xm")))] "TARGET_SSE" ! "iorps\\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "sse_xorti3" [(set (match_operand:TI 0 "register_operand" "=x") ! (xor:TI (match_operand:TI 1 "register_operand" "0") (match_operand:TI 2 "nonimmediate_operand" "xm")))] ! "TARGET_SSE" ! "xorps\\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) ! ;; Use xor, but don't show input operands so they aren't live before ! ;; this insn. ! (define_insn "sse_clrti" [(set (match_operand:TI 0 "register_operand" "=x") ! (unspec:TI [(const_int 0)] 45))] ! "TARGET_SSE" ! "xorps\\t{%0, %0|%0, %0}" [(set_attr "type" "sse")]) ;; SSE mask-generating compares (define_insn "maskcmpv4sf3" [(set (match_operand:V4SI 0 "register_operand" "=x") (match_operator:V4SI 3 "sse_comparison_operator" ! [(match_operand:V4SF 1 "register_operand" "0") ! (match_operand:V4SF 2 "nonimmediate_operand" "x")]))] "TARGET_SSE" ! "* ! { ! switch (GET_CODE (operands[3])) ! { ! case EQ: ! return \"cmpeqps\\t{%2, %0|%0, %2}\"; ! case LT: ! return \"cmpltps\\t{%2, %0|%0, %2}\"; ! case LE: ! return \"cmpleps\\t{%2, %0|%0, %2}\"; ! case UNORDERED: ! return \"cmpunordps\\t{%2, %0|%0, %2}\"; ! default: ! abort (); ! } ! }" [(set_attr "type" "sse")]) (define_insn "maskncmpv4sf3" [(set (match_operand:V4SI 0 "register_operand" "=x") (not:V4SI (match_operator:V4SI 3 "sse_comparison_operator" ! [(match_operand:V4SF 1 "register_operand" "0") ! (match_operand:V4SF 2 "nonimmediate_operand" "x")])))] "TARGET_SSE" - "* { ! switch (GET_CODE (operands[3])) ! { ! case EQ: ! return \"cmpneqps\\t{%2, %0|%0, %2}\"; ! case LT: ! return \"cmpnltps\\t{%2, %0|%0, %2}\"; ! case LE: ! return \"cmpnleps\\t{%2, %0|%0, %2}\"; ! case UNORDERED: ! return \"cmpordps\\t{%2, %0|%0, %2}\"; ! default: ! abort (); ! } ! }" [(set_attr "type" "sse")]) (define_insn "vmmaskcmpv4sf3" [(set (match_operand:V4SI 0 "register_operand" "=x") (vec_merge:V4SI (match_operator:V4SI 3 "sse_comparison_operator" ! [(match_operand:V4SF 1 "register_operand" "0") ! (match_operand:V4SF 2 "nonimmediate_operand" "x")]) (match_dup 1) (const_int 1)))] "TARGET_SSE" ! "* ! { ! switch (GET_CODE (operands[3])) ! { ! case EQ: ! return \"cmpeqss\\t{%2, %0|%0, %2}\"; ! case LT: ! return \"cmpltss\\t{%2, %0|%0, %2}\"; ! case LE: ! return \"cmpless\\t{%2, %0|%0, %2}\"; ! case UNORDERED: ! return \"cmpunordss\\t{%2, %0|%0, %2}\"; ! default: ! abort (); ! } ! }" [(set_attr "type" "sse")]) (define_insn "vmmaskncmpv4sf3" --- 18369,18602 ---- ;; into DImode subregs of SSE registers, and them together, and move out ;; of DImode subregs again! + (define_insn "*sse_andti3_df_1" + [(set (subreg:TI (match_operand:DF 0 "register_operand" "=Y") 0) + (and:TI (subreg:TI (match_operand:DF 1 "register_operand" "%0") 0) + (subreg:TI (match_operand:DF 2 "register_operand" "Y") 0)))] + "TARGET_SSE2" + "andpd\t{%2, %0|%0, %2}" + [(set_attr "type" "sse")]) + + (define_insn "*sse_andti3_df_2" + [(set (subreg:TI (match_operand:DF 0 "register_operand" "=Y") 0) + (and:TI (subreg:TI (match_operand:DF 1 "register_operand" "0") 0) + (match_operand:TI 2 "nonimmediate_operand" "Ym")))] + "TARGET_SSE2" + "andpd\t{%2, %0|%0, %2}" + [(set_attr "type" "sse")]) + + (define_insn "*sse_andti3_sf_1" + [(set (subreg:TI (match_operand:SF 0 "register_operand" "=x") 0) + (and:TI (subreg:TI (match_operand:SF 1 "register_operand" "%0") 0) + (subreg:TI (match_operand:SF 2 "register_operand" "x") 0)))] + "TARGET_SSE" + "andps\t{%2, %0|%0, %2}" + [(set_attr "type" "sse")]) + + (define_insn "*sse_andti3_sf_2" + [(set (subreg:TI (match_operand:SF 0 "register_operand" "=x") 0) + (and:TI (subreg:TI (match_operand:SF 1 "register_operand" "0") 0) + (match_operand:TI 2 "nonimmediate_operand" "xm")))] + "TARGET_SSE" + "andps\t{%2, %0|%0, %2}" + [(set_attr "type" "sse")]) + (define_insn "sse_andti3" [(set (match_operand:TI 0 "register_operand" "=x") ! (and:TI (match_operand:TI 1 "nonimmediate_operand" "%0") ! (match_operand:TI 2 "nonimmediate_operand" "xm")))] ! "TARGET_SSE && !TARGET_SSE2 ! && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" ! "andps\t{%2, %0|%0, %2}" ! [(set_attr "type" "sse")]) ! ! (define_insn "*sse_andti3_sse2" ! [(set (match_operand:TI 0 "register_operand" "=x") ! (and:TI (match_operand:TI 1 "nonimmediate_operand" "%0") ! (match_operand:TI 2 "nonimmediate_operand" "xm")))] ! "TARGET_SSE2 ! && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" ! "pand\t{%2, %0|%0, %2}" ! [(set_attr "type" "sse")]) ! ! (define_insn "*sse_nandti3_df" ! [(set (subreg:TI (match_operand:DF 0 "register_operand" "=Y") 0) ! (and:TI (not:TI (subreg:TI (match_operand:DF 1 "register_operand" "0") 0)) ! (match_operand:TI 2 "nonimmediate_operand" "Ym")))] ! "TARGET_SSE2" ! "andnpd\t{%2, %0|%0, %2}" ! [(set_attr "type" "sse")]) ! ! (define_insn "*sse_nandti3_sf" ! [(set (subreg:TI (match_operand:SF 0 "register_operand" "=x") 0) ! (and:TI (not:TI (subreg:TI (match_operand:SF 1 "register_operand" "0") 0)) (match_operand:TI 2 "nonimmediate_operand" "xm")))] "TARGET_SSE" ! "andnps\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "sse_nandti3" [(set (match_operand:TI 0 "register_operand" "=x") (and:TI (not:TI (match_operand:TI 1 "register_operand" "0")) (match_operand:TI 2 "nonimmediate_operand" "xm")))] + "TARGET_SSE && !TARGET_SSE2" + "andnps\t{%2, %0|%0, %2}" + [(set_attr "type" "sse")]) + + (define_insn "*sse_nandti3_sse2" + [(set (match_operand:TI 0 "register_operand" "=x") + (and:TI (not:TI (match_operand:TI 1 "register_operand" "0")) + (match_operand:TI 2 "nonimmediate_operand" "xm")))] + "TARGET_SSE2" + "pnand\t{%2, %0|%0, %2}" + [(set_attr "type" "sse")]) + + (define_insn "*sse_iorti3_df_1" + [(set (subreg:TI (match_operand:DF 0 "register_operand" "=Y") 0) + (ior:TI (subreg:TI (match_operand:DF 1 "register_operand" "%0") 0) + (subreg:TI (match_operand:DF 2 "register_operand" "Y") 0)))] + "TARGET_SSE2" + "orpd\t{%2, %0|%0, %2}" + [(set_attr "type" "sse")]) + + (define_insn "*sse_iorti3_df_2" + [(set (subreg:TI (match_operand:DF 0 "register_operand" "=Y") 0) + (ior:TI (subreg:TI (match_operand:DF 1 "register_operand" "0") 0) + (match_operand:TI 2 "nonimmediate_operand" "Ym")))] + "TARGET_SSE2" + "orpd\t{%2, %0|%0, %2}" + [(set_attr "type" "sse")]) + + (define_insn "*sse_iorti3_sf_1" + [(set (subreg:TI (match_operand:SF 0 "register_operand" "=x") 0) + (ior:TI (subreg:TI (match_operand:SF 1 "register_operand" "%0") 0) + (subreg:TI (match_operand:SF 2 "register_operand" "x") 0)))] + "TARGET_SSE" + "orps\t{%2, %0|%0, %2}" + [(set_attr "type" "sse")]) + + (define_insn "*sse_iorti3_sf_2" + [(set (subreg:TI (match_operand:SF 0 "register_operand" "=x") 0) + (ior:TI (subreg:TI (match_operand:SF 1 "register_operand" "0") 0) + (match_operand:TI 2 "nonimmediate_operand" "xm")))] "TARGET_SSE" ! "orps\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "sse_iorti3" [(set (match_operand:TI 0 "register_operand" "=x") ! (ior:TI (match_operand:TI 1 "nonimmediate_operand" "%0") ! (match_operand:TI 2 "nonimmediate_operand" "xm")))] ! "TARGET_SSE && !TARGET_SSE2 ! && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" ! "orps\t{%2, %0|%0, %2}" ! [(set_attr "type" "sse")]) ! ! (define_insn "*sse_iorti3_sse2" ! [(set (match_operand:TI 0 "register_operand" "=x") ! (ior:TI (match_operand:TI 1 "nonimmediate_operand" "%0") ! (match_operand:TI 2 "nonimmediate_operand" "xm")))] ! "TARGET_SSE2 ! && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" ! "por\t{%2, %0|%0, %2}" ! [(set_attr "type" "sse")]) ! ! (define_insn "*sse_xorti3_df_1" ! [(set (subreg:TI (match_operand:DF 0 "register_operand" "=Y") 0) ! (xor:TI (subreg:TI (match_operand:DF 1 "register_operand" "%0") 0) ! (subreg:TI (match_operand:DF 2 "register_operand" "Y") 0)))] ! "TARGET_SSE2" ! "xorpd\t{%2, %0|%0, %2}" ! [(set_attr "type" "sse")]) ! ! (define_insn "*sse_xorti3_df_2" ! [(set (subreg:TI (match_operand:DF 0 "register_operand" "=Y") 0) ! (xor:TI (subreg:TI (match_operand:DF 1 "register_operand" "0") 0) ! (match_operand:TI 2 "nonimmediate_operand" "Ym")))] ! "TARGET_SSE2" ! "xorpd\t{%2, %0|%0, %2}" ! [(set_attr "type" "sse")]) ! ! (define_insn "*sse_xorti3_sf_1" ! [(set (subreg:TI (match_operand:SF 0 "register_operand" "=x") 0) ! (xor:TI (subreg:TI (match_operand:SF 1 "register_operand" "%0") 0) ! (subreg:TI (match_operand:SF 2 "register_operand" "x") 0)))] ! "TARGET_SSE" ! "xorps\t{%2, %0|%0, %2}" ! [(set_attr "type" "sse")]) ! ! (define_insn "*sse_xorti3_sf_2" ! [(set (subreg:TI (match_operand:SF 0 "register_operand" "=x") 0) ! (xor:TI (subreg:TI (match_operand:SF 1 "register_operand" "0") 0) (match_operand:TI 2 "nonimmediate_operand" "xm")))] "TARGET_SSE" ! "xorps\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "sse_xorti3" [(set (match_operand:TI 0 "register_operand" "=x") ! (xor:TI (match_operand:TI 1 "nonimmediate_operand" "%0") (match_operand:TI 2 "nonimmediate_operand" "xm")))] ! "TARGET_SSE && !TARGET_SSE2 ! && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" ! "xorps\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) ! (define_insn "*sse_xorti3_sse2" [(set (match_operand:TI 0 "register_operand" "=x") ! (xor:TI (match_operand:TI 1 "nonimmediate_operand" "%0") ! (match_operand:TI 2 "nonimmediate_operand" "xm")))] ! "TARGET_SSE2 ! && (GET_CODE (operands[1]) != MEM || GET_CODE (operands[2]) != MEM)" ! "pxor\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) + ;; Use xor, but don't show input operands so they aren't live before + ;; this insn. + (define_insn "sse_clrv4sf" + [(set (match_operand:V4SF 0 "register_operand" "=x") + (unspec:V4SF [(const_int 0)] 45))] + "TARGET_SSE" + "xorps\t{%0, %0|%0, %0}" + [(set_attr "type" "sse") + (set_attr "memory" "none")]) ;; SSE mask-generating compares (define_insn "maskcmpv4sf3" [(set (match_operand:V4SI 0 "register_operand" "=x") (match_operator:V4SI 3 "sse_comparison_operator" ! [(match_operand:V4SF 1 "register_operand" "0") ! (match_operand:V4SF 2 "register_operand" "x")]))] "TARGET_SSE" ! "cmp%D3ps\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "maskncmpv4sf3" [(set (match_operand:V4SI 0 "register_operand" "=x") (not:V4SI (match_operator:V4SI 3 "sse_comparison_operator" ! [(match_operand:V4SF 1 "register_operand" "0") ! (match_operand:V4SF 2 "register_operand" "x")])))] "TARGET_SSE" { ! if (GET_CODE (operands[3]) == UNORDERED) ! return "cmpordps\t{%2, %0|%0, %2}"; ! else ! return "cmpn%D3ps\t{%2, %0|%0, %2}"; ! } [(set_attr "type" "sse")]) (define_insn "vmmaskcmpv4sf3" [(set (match_operand:V4SI 0 "register_operand" "=x") (vec_merge:V4SI (match_operator:V4SI 3 "sse_comparison_operator" ! [(match_operand:V4SF 1 "register_operand" "0") ! (match_operand:V4SF 2 "register_operand" "x")]) (match_dup 1) (const_int 1)))] "TARGET_SSE" ! "cmp%D3ss\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "vmmaskncmpv4sf3" *************** *** 13462,13488 **** (vec_merge:V4SI (not:V4SI (match_operator:V4SI 3 "sse_comparison_operator" ! [(match_operand:V4SF 1 "register_operand" "0") ! (match_operand:V4SF 2 "nonimmediate_operand" "x")])) (subreg:V4SI (match_dup 1) 0) (const_int 1)))] "TARGET_SSE" - "* { ! switch (GET_CODE (operands[3])) ! { ! case EQ: ! return \"cmpneqss\\t{%2, %0|%0, %2}\"; ! case LT: ! return \"cmpnltss\\t{%2, %0|%0, %2}\"; ! case LE: ! return \"cmpnless\\t{%2, %0|%0, %2}\"; ! case UNORDERED: ! return \"cmpordss\\t{%2, %0|%0, %2}\"; ! default: ! abort (); ! } ! }" [(set_attr "type" "sse")]) (define_insn "sse_comi" --- 18604,18620 ---- (vec_merge:V4SI (not:V4SI (match_operator:V4SI 3 "sse_comparison_operator" ! [(match_operand:V4SF 1 "register_operand" "0") ! (match_operand:V4SF 2 "register_operand" "x")])) (subreg:V4SI (match_dup 1) 0) (const_int 1)))] "TARGET_SSE" { ! if (GET_CODE (operands[3]) == UNORDERED) ! return "cmpordss\t{%2, %0|%0, %2}"; ! else ! return "cmpn%D3ss\t{%2, %0|%0, %2}"; ! } [(set_attr "type" "sse")]) (define_insn "sse_comi" *************** *** 13495,13501 **** (match_operand:V4SF 1 "register_operand" "x") (parallel [(const_int 0)]))]))] "TARGET_SSE" ! "comiss\\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "sse_ucomi" --- 18627,18633 ---- (match_operand:V4SF 1 "register_operand" "x") (parallel [(const_int 0)]))]))] "TARGET_SSE" ! "comiss\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "sse_ucomi" *************** *** 13508,13514 **** (match_operand:V4SF 1 "register_operand" "x") (parallel [(const_int 0)]))]))] "TARGET_SSE" ! "ucomiss\\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) --- 18640,18646 ---- (match_operand:V4SF 1 "register_operand" "x") (parallel [(const_int 0)]))]))] "TARGET_SSE" ! "ucomiss\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) *************** *** 13522,13535 **** (const_int 0) (const_int 3) (const_int 1)])) ! (vec_select:V8QI (match_operand:V8QI 2 "register_operand" "x") (parallel [(const_int 0) (const_int 2) (const_int 1) (const_int 3)])) (const_int 5)))] "TARGET_SSE" ! "unpckhps\\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "sse_unpcklps" --- 18654,18667 ---- (const_int 0) (const_int 3) (const_int 1)])) ! (vec_select:V4SF (match_operand:V4SF 2 "register_operand" "x") (parallel [(const_int 0) (const_int 2) (const_int 1) (const_int 3)])) (const_int 5)))] "TARGET_SSE" ! "unpckhps\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "sse_unpcklps" *************** *** 13540,13553 **** (const_int 2) (const_int 1) (const_int 3)])) ! (vec_select:V8QI (match_operand:V8QI 2 "register_operand" "x") (parallel [(const_int 2) (const_int 0) (const_int 3) (const_int 1)])) (const_int 5)))] "TARGET_SSE" ! "unpcklps\\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) --- 18672,18685 ---- (const_int 2) (const_int 1) (const_int 3)])) ! (vec_select:V4SF (match_operand:V4SF 2 "register_operand" "x") (parallel [(const_int 2) (const_int 0) (const_int 3) (const_int 1)])) (const_int 5)))] "TARGET_SSE" ! "unpcklps\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) *************** *** 13558,13574 **** (smax:V4SF (match_operand:V4SF 1 "register_operand" "0") (match_operand:V4SF 2 "nonimmediate_operand" "xm")))] "TARGET_SSE" ! "maxps\\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "vmsmaxv4sf3" [(set (match_operand:V4SF 0 "register_operand" "=x") ! (vec_merge:V4SF (smax:V4SF (match_operand:V4SF 1 "register_operand" "0") ! (match_operand:V4SF 2 "nonimmediate_operand" "xm")) ! (match_dup 1) ! (const_int 1)))] "TARGET_SSE" ! "maxss\\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "sminv4sf3" --- 18690,18707 ---- (smax:V4SF (match_operand:V4SF 1 "register_operand" "0") (match_operand:V4SF 2 "nonimmediate_operand" "xm")))] "TARGET_SSE" ! "maxps\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "vmsmaxv4sf3" [(set (match_operand:V4SF 0 "register_operand" "=x") ! (vec_merge:V4SF ! (smax:V4SF (match_operand:V4SF 1 "register_operand" "0") ! (match_operand:V4SF 2 "nonimmediate_operand" "xm")) ! (match_dup 1) ! (const_int 1)))] "TARGET_SSE" ! "maxss\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "sminv4sf3" *************** *** 13576,13592 **** (smin:V4SF (match_operand:V4SF 1 "register_operand" "0") (match_operand:V4SF 2 "nonimmediate_operand" "xm")))] "TARGET_SSE" ! "minps\\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "vmsminv4sf3" [(set (match_operand:V4SF 0 "register_operand" "=x") ! (vec_merge:V4SF (smin:V4SF (match_operand:V4SF 1 "register_operand" "0") ! (match_operand:V4SF 2 "nonimmediate_operand" "xm")) ! (match_dup 1) ! (const_int 1)))] "TARGET_SSE" ! "minss\\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) --- 18709,18726 ---- (smin:V4SF (match_operand:V4SF 1 "register_operand" "0") (match_operand:V4SF 2 "nonimmediate_operand" "xm")))] "TARGET_SSE" ! "minps\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "vmsminv4sf3" [(set (match_operand:V4SF 0 "register_operand" "=x") ! (vec_merge:V4SF ! (smin:V4SF (match_operand:V4SF 1 "register_operand" "0") ! (match_operand:V4SF 2 "nonimmediate_operand" "xm")) ! (match_dup 1) ! (const_int 1)))] "TARGET_SSE" ! "minss\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) *************** *** 13594,13651 **** (define_insn "cvtpi2ps" [(set (match_operand:V4SF 0 "register_operand" "=x") ! (vec_merge:V4SF (match_operand:V4SF 1 "register_operand" "0") ! (vec_duplicate:V4SF ! (float:V2SF (match_operand:V2SI 2 "register_operand" "ym"))) ! (const_int 12)))] "TARGET_SSE" ! "cvtpi2ps\\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "cvtps2pi" [(set (match_operand:V2SI 0 "register_operand" "=y") ! (vec_select:V2SI (fix:V4SI (match_operand:V4SF 1 "register_operand" "xm")) ! (parallel ! [(const_int 0) ! (const_int 1)])))] "TARGET_SSE" ! "cvtps2pi\\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "cvttps2pi" [(set (match_operand:V2SI 0 "register_operand" "=y") ! (vec_select:V2SI (unspec:V4SI [(match_operand:V4SF 1 "register_operand" "xm")] 30) ! (parallel ! [(const_int 0) ! (const_int 1)])))] "TARGET_SSE" ! "cvttps2pi\\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "cvtsi2ss" [(set (match_operand:V4SF 0 "register_operand" "=x") ! (vec_merge:V4SF (match_operand:V4SF 1 "register_operand" "0") ! (vec_duplicate:V4SF ! (float:SF (match_operand:SI 2 "register_operand" "rm"))) ! (const_int 15)))] "TARGET_SSE" ! "cvtsi2ss\\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "cvtss2si" ! [(set (match_operand:SI 0 "register_operand" "=y") ! (vec_select:SI (fix:V4SI (match_operand:V4SF 1 "register_operand" "xm")) ! (parallel [(const_int 0)])))] "TARGET_SSE" ! "cvtss2si\\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "cvttss2si" ! [(set (match_operand:SI 0 "register_operand" "=y") ! (vec_select:SI (unspec:V4SI [(match_operand:V4SF 1 "register_operand" "xm")] 30) ! (parallel [(const_int 0)])))] "TARGET_SSE" ! "cvttss2si\\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) --- 18728,18787 ---- (define_insn "cvtpi2ps" [(set (match_operand:V4SF 0 "register_operand" "=x") ! (vec_merge:V4SF ! (match_operand:V4SF 1 "register_operand" "0") ! (vec_duplicate:V4SF ! (float:V2SF (match_operand:V2SI 2 "nonimmediate_operand" "ym"))) ! (const_int 12)))] "TARGET_SSE" ! "cvtpi2ps\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "cvtps2pi" [(set (match_operand:V2SI 0 "register_operand" "=y") ! (vec_select:V2SI ! (fix:V4SI (match_operand:V4SF 1 "nonimmediate_operand" "xm")) ! (parallel [(const_int 0) (const_int 1)])))] "TARGET_SSE" ! "cvtps2pi\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "cvttps2pi" [(set (match_operand:V2SI 0 "register_operand" "=y") ! (vec_select:V2SI ! (unspec:V4SI [(match_operand:V4SF 1 "nonimmediate_operand" "xm")] 30) ! (parallel [(const_int 0) (const_int 1)])))] "TARGET_SSE" ! "cvttps2pi\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "cvtsi2ss" [(set (match_operand:V4SF 0 "register_operand" "=x") ! (vec_merge:V4SF ! (match_operand:V4SF 1 "register_operand" "0") ! (vec_duplicate:V4SF ! (float:SF (match_operand:SI 2 "nonimmediate_operand" "rm"))) ! (const_int 14)))] "TARGET_SSE" ! "cvtsi2ss\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "cvtss2si" ! [(set (match_operand:SI 0 "register_operand" "=r") ! (vec_select:SI ! (fix:V4SI (match_operand:V4SF 1 "nonimmediate_operand" "xm")) ! (parallel [(const_int 0)])))] "TARGET_SSE" ! "cvtss2si\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) (define_insn "cvttss2si" ! [(set (match_operand:SI 0 "register_operand" "=r") ! (vec_select:SI ! (unspec:V4SI [(match_operand:V4SF 1 "nonimmediate_operand" "xm")] 30) ! (parallel [(const_int 0)])))] "TARGET_SSE" ! "cvttss2si\t{%1, %0|%0, %1}" [(set_attr "type" "sse")]) *************** *** 13658,13664 **** (plus:V8QI (match_operand:V8QI 1 "register_operand" "0") (match_operand:V8QI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "paddb\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "addv4hi3" --- 18794,18800 ---- (plus:V8QI (match_operand:V8QI 1 "register_operand" "0") (match_operand:V8QI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "paddb\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "addv4hi3" *************** *** 13666,13672 **** (plus:V4HI (match_operand:V4HI 1 "register_operand" "0") (match_operand:V4HI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "paddw\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "addv2si3" --- 18802,18808 ---- (plus:V4HI (match_operand:V4HI 1 "register_operand" "0") (match_operand:V4HI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "paddw\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "addv2si3" *************** *** 13674,13680 **** (plus:V2SI (match_operand:V2SI 1 "register_operand" "0") (match_operand:V2SI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "paddd\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "ssaddv8qi3" --- 18810,18816 ---- (plus:V2SI (match_operand:V2SI 1 "register_operand" "0") (match_operand:V2SI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "paddd\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "ssaddv8qi3" *************** *** 13682,13688 **** (ss_plus:V8QI (match_operand:V8QI 1 "register_operand" "0") (match_operand:V8QI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "paddsb\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "ssaddv4hi3" --- 18818,18824 ---- (ss_plus:V8QI (match_operand:V8QI 1 "register_operand" "0") (match_operand:V8QI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "paddsb\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "ssaddv4hi3" *************** *** 13690,13696 **** (ss_plus:V4HI (match_operand:V4HI 1 "register_operand" "0") (match_operand:V4HI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "paddsw\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "usaddv8qi3" --- 18826,18832 ---- (ss_plus:V4HI (match_operand:V4HI 1 "register_operand" "0") (match_operand:V4HI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "paddsw\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "usaddv8qi3" *************** *** 13698,13704 **** (us_plus:V8QI (match_operand:V8QI 1 "register_operand" "0") (match_operand:V8QI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "paddusb\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "usaddv4hi3" --- 18834,18840 ---- (us_plus:V8QI (match_operand:V8QI 1 "register_operand" "0") (match_operand:V8QI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "paddusb\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "usaddv4hi3" *************** *** 13706,13712 **** (us_plus:V4HI (match_operand:V4HI 1 "register_operand" "0") (match_operand:V4HI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "paddusw\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "subv8qi3" --- 18842,18848 ---- (us_plus:V4HI (match_operand:V4HI 1 "register_operand" "0") (match_operand:V4HI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "paddusw\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "subv8qi3" *************** *** 13714,13720 **** (minus:V8QI (match_operand:V8QI 1 "register_operand" "0") (match_operand:V8QI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "psubb\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "subv4hi3" --- 18850,18856 ---- (minus:V8QI (match_operand:V8QI 1 "register_operand" "0") (match_operand:V8QI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "psubb\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "subv4hi3" *************** *** 13722,13728 **** (minus:V4HI (match_operand:V4HI 1 "register_operand" "0") (match_operand:V4HI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "psubw\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "subv2si3" --- 18858,18864 ---- (minus:V4HI (match_operand:V4HI 1 "register_operand" "0") (match_operand:V4HI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "psubw\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "subv2si3" *************** *** 13730,13736 **** (minus:V2SI (match_operand:V2SI 1 "register_operand" "0") (match_operand:V2SI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "psubd\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "sssubv8qi3" --- 18866,18872 ---- (minus:V2SI (match_operand:V2SI 1 "register_operand" "0") (match_operand:V2SI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "psubd\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "sssubv8qi3" *************** *** 13738,13744 **** (ss_minus:V8QI (match_operand:V8QI 1 "register_operand" "0") (match_operand:V8QI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "psubsb\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "sssubv4hi3" --- 18874,18880 ---- (ss_minus:V8QI (match_operand:V8QI 1 "register_operand" "0") (match_operand:V8QI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "psubsb\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "sssubv4hi3" *************** *** 13746,13752 **** (ss_minus:V4HI (match_operand:V4HI 1 "register_operand" "0") (match_operand:V4HI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "psubsw\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "ussubv8qi3" --- 18882,18888 ---- (ss_minus:V4HI (match_operand:V4HI 1 "register_operand" "0") (match_operand:V4HI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "psubsw\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "ussubv8qi3" *************** *** 13754,13760 **** (us_minus:V8QI (match_operand:V8QI 1 "register_operand" "0") (match_operand:V8QI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "psubusb\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "ussubv4hi3" --- 18890,18896 ---- (us_minus:V8QI (match_operand:V8QI 1 "register_operand" "0") (match_operand:V8QI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "psubusb\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "ussubv4hi3" *************** *** 13762,13768 **** (us_minus:V4HI (match_operand:V4HI 1 "register_operand" "0") (match_operand:V4HI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "psubusw\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "mulv4hi3" --- 18898,18904 ---- (us_minus:V4HI (match_operand:V4HI 1 "register_operand" "0") (match_operand:V4HI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "psubusw\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "mulv4hi3" *************** *** 13770,13810 **** (mult:V4HI (match_operand:V4HI 1 "register_operand" "0") (match_operand:V4HI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "pmullw\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "smulv4hi3_highpart" [(set (match_operand:V4HI 0 "register_operand" "=y") (truncate:V4HI (lshiftrt:V4SI ! (mult:V4SI (sign_extend:V4SI (match_operand:V4HI 1 "register_operand" "0")) ! (sign_extend:V4SI (match_operand:V4HI 2 "nonimmediate_operand" "ym"))) (const_int 16))))] "TARGET_MMX" ! "pmulhw\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "umulv4hi3_highpart" [(set (match_operand:V4HI 0 "register_operand" "=y") (truncate:V4HI (lshiftrt:V4SI ! (mult:V4SI (zero_extend:V4SI (match_operand:V4HI 1 "register_operand" "0")) ! (zero_extend:V4SI (match_operand:V4HI 2 "nonimmediate_operand" "ym"))) (const_int 16))))] ! "TARGET_MMX" ! "pmulhuw\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "mmx_pmaddwd" [(set (match_operand:V2SI 0 "register_operand" "=y") (plus:V2SI (mult:V2SI ! (sign_extend:V2SI (vec_select:V2HI (match_operand:V4HI 1 "register_operand" "0") ! (parallel [(const_int 0) ! (const_int 2)]))) ! (sign_extend:V2SI (vec_select:V2HI (match_operand:V4HI 2 "nonimmediate_operand" "ym") ! (parallel [(const_int 0) ! (const_int 2)])))) (mult:V2SI (sign_extend:V2SI (vec_select:V2HI (match_dup 1) (parallel [(const_int 1) --- 18906,18950 ---- (mult:V4HI (match_operand:V4HI 1 "register_operand" "0") (match_operand:V4HI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "pmullw\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "smulv4hi3_highpart" [(set (match_operand:V4HI 0 "register_operand" "=y") (truncate:V4HI (lshiftrt:V4SI ! (mult:V4SI (sign_extend:V4SI ! (match_operand:V4HI 1 "register_operand" "0")) ! (sign_extend:V4SI ! (match_operand:V4HI 2 "nonimmediate_operand" "ym"))) (const_int 16))))] "TARGET_MMX" ! "pmulhw\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "umulv4hi3_highpart" [(set (match_operand:V4HI 0 "register_operand" "=y") (truncate:V4HI (lshiftrt:V4SI ! (mult:V4SI (zero_extend:V4SI ! (match_operand:V4HI 1 "register_operand" "0")) ! (zero_extend:V4SI ! (match_operand:V4HI 2 "nonimmediate_operand" "ym"))) (const_int 16))))] ! "TARGET_SSE || TARGET_3DNOW_A" ! "pmulhuw\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "mmx_pmaddwd" [(set (match_operand:V2SI 0 "register_operand" "=y") (plus:V2SI (mult:V2SI ! (sign_extend:V2SI ! (vec_select:V2HI (match_operand:V4HI 1 "register_operand" "0") ! (parallel [(const_int 0) (const_int 2)]))) ! (sign_extend:V2SI ! (vec_select:V2HI (match_operand:V4HI 2 "nonimmediate_operand" "ym") ! (parallel [(const_int 0) (const_int 2)])))) (mult:V2SI (sign_extend:V2SI (vec_select:V2HI (match_dup 1) (parallel [(const_int 1) *************** *** 13813,13819 **** (parallel [(const_int 1) (const_int 3)]))))))] "TARGET_MMX" ! "pmaddwd\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) --- 18953,18959 ---- (parallel [(const_int 1) (const_int 3)]))))))] "TARGET_MMX" ! "pmaddwd\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) *************** *** 13827,13833 **** [(ior:DI (match_operand:DI 1 "register_operand" "0") (match_operand:DI 2 "nonimmediate_operand" "ym"))] 45))] "TARGET_MMX" ! "por\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "mmx_xordi3" --- 18967,18973 ---- [(ior:DI (match_operand:DI 1 "register_operand" "0") (match_operand:DI 2 "nonimmediate_operand" "ym"))] 45))] "TARGET_MMX" ! "por\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "mmx_xordi3" *************** *** 13836,13843 **** [(xor:DI (match_operand:DI 1 "register_operand" "0") (match_operand:DI 2 "nonimmediate_operand" "ym"))] 45))] "TARGET_MMX" ! "pxor\\t{%2, %0|%0, %2}" ! [(set_attr "type" "mmx")]) ;; Same as pxor, but don't show input operands so that we don't think ;; they are live. --- 18976,18984 ---- [(xor:DI (match_operand:DI 1 "register_operand" "0") (match_operand:DI 2 "nonimmediate_operand" "ym"))] 45))] "TARGET_MMX" ! "pxor\t{%2, %0|%0, %2}" ! [(set_attr "type" "mmx") ! (set_attr "memory" "none")]) ;; Same as pxor, but don't show input operands so that we don't think ;; they are live. *************** *** 13845,13852 **** [(set (match_operand:DI 0 "register_operand" "=y") (unspec:DI [(const_int 0)] 45))] "TARGET_MMX" ! "pxor\\t{%0, %0|%0, %0}" ! [(set_attr "type" "mmx")]) (define_insn "mmx_anddi3" [(set (match_operand:DI 0 "register_operand" "=y") --- 18986,18994 ---- [(set (match_operand:DI 0 "register_operand" "=y") (unspec:DI [(const_int 0)] 45))] "TARGET_MMX" ! "pxor\t{%0, %0|%0, %0}" ! [(set_attr "type" "mmx") ! (set_attr "memory" "none")]) (define_insn "mmx_anddi3" [(set (match_operand:DI 0 "register_operand" "=y") *************** *** 13854,13860 **** [(and:DI (match_operand:DI 1 "register_operand" "0") (match_operand:DI 2 "nonimmediate_operand" "ym"))] 45))] "TARGET_MMX" ! "pand\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "mmx_nanddi3" --- 18996,19002 ---- [(and:DI (match_operand:DI 1 "register_operand" "0") (match_operand:DI 2 "nonimmediate_operand" "ym"))] 45))] "TARGET_MMX" ! "pand\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "mmx_nanddi3" *************** *** 13863,13869 **** [(and:DI (not:DI (match_operand:DI 1 "register_operand" "0")) (match_operand:DI 2 "nonimmediate_operand" "ym"))] 45))] "TARGET_MMX" ! "pandn\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) --- 19005,19011 ---- [(and:DI (not:DI (match_operand:DI 1 "register_operand" "0")) (match_operand:DI 2 "nonimmediate_operand" "ym"))] 45))] "TARGET_MMX" ! "pandn\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) *************** *** 13875,13891 **** (plus:V8QI (plus:V8QI (match_operand:V8QI 1 "register_operand" "0") (match_operand:V8QI 2 "nonimmediate_operand" "ym")) ! (vec_const:V8QI (parallel [(const_int 1) ! (const_int 1) ! (const_int 1) ! (const_int 1) ! (const_int 1) ! (const_int 1) ! (const_int 1) ! (const_int 1)]))) (const_int 1)))] ! "TARGET_SSE" ! "pavgb\\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "mmx_uavgv4hi3" --- 19017,19033 ---- (plus:V8QI (plus:V8QI (match_operand:V8QI 1 "register_operand" "0") (match_operand:V8QI 2 "nonimmediate_operand" "ym")) ! (const_vector:V8QI [(const_int 1) ! (const_int 1) ! (const_int 1) ! (const_int 1) ! (const_int 1) ! (const_int 1) ! (const_int 1) ! (const_int 1)])) (const_int 1)))] ! "TARGET_SSE || TARGET_3DNOW_A" ! "pavgb\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "mmx_uavgv4hi3" *************** *** 13894,13914 **** (plus:V4HI (plus:V4HI (match_operand:V4HI 1 "register_operand" "0") (match_operand:V4HI 2 "nonimmediate_operand" "ym")) ! (vec_const:V4HI (parallel [(const_int 1) ! (const_int 1) ! (const_int 1) ! (const_int 1)]))) (const_int 1)))] ! "TARGET_SSE" ! "pavgw\\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "mmx_psadbw" [(set (match_operand:V8QI 0 "register_operand" "=y") (abs:V8QI (minus:V8QI (match_operand:V8QI 1 "register_operand" "0") (match_operand:V8QI 2 "nonimmediate_operand" "ym"))))] ! "TARGET_SSE" ! "psadbw\\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) --- 19036,19056 ---- (plus:V4HI (plus:V4HI (match_operand:V4HI 1 "register_operand" "0") (match_operand:V4HI 2 "nonimmediate_operand" "ym")) ! (const_vector:V4HI [(const_int 1) ! (const_int 1) ! (const_int 1) ! (const_int 1)])) (const_int 1)))] ! "TARGET_SSE || TARGET_3DNOW_A" ! "pavgw\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "mmx_psadbw" [(set (match_operand:V8QI 0 "register_operand" "=y") (abs:V8QI (minus:V8QI (match_operand:V8QI 1 "register_operand" "0") (match_operand:V8QI 2 "nonimmediate_operand" "ym"))))] ! "TARGET_SSE || TARGET_3DNOW_A" ! "psadbw\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) *************** *** 13920,13927 **** (vec_duplicate:V4HI (truncate:HI (match_operand:SI 2 "nonimmediate_operand" "rm"))) (match_operand:SI 3 "immediate_operand" "i")))] ! "TARGET_SSE" ! "pinsrw\\t{%3, %2, %0|%0, %2, %3}" [(set_attr "type" "sse")]) (define_insn "mmx_pextrw" --- 19062,19069 ---- (vec_duplicate:V4HI (truncate:HI (match_operand:SI 2 "nonimmediate_operand" "rm"))) (match_operand:SI 3 "immediate_operand" "i")))] ! "TARGET_SSE || TARGET_3DNOW_A" ! "pinsrw\t{%3, %2, %0|%0, %2, %3}" [(set_attr "type" "sse")]) (define_insn "mmx_pextrw" *************** *** 13929,13945 **** (zero_extend:SI (vec_select:HI (match_operand:V4HI 1 "register_operand" "y") (parallel [(match_operand:SI 2 "immediate_operand" "i")]))))] ! "TARGET_SSE" ! "pextrw\\t{%2, %1, %0|%0, %1, %2}" [(set_attr "type" "sse")]) (define_insn "mmx_pshufw" [(set (match_operand:V4HI 0 "register_operand" "=y") (unspec:V4HI [(match_operand:V4HI 1 "register_operand" "0") ! (match_operand:V4HI 2 "nonimmediate_operand" "ym") ! (match_operand:SI 3 "immediate_operand" "i")] 41))] ! "TARGET_SSE" ! "pshufw\\t{%3, %2, %0|%0, %2, %3}" [(set_attr "type" "sse")]) --- 19071,19086 ---- (zero_extend:SI (vec_select:HI (match_operand:V4HI 1 "register_operand" "y") (parallel [(match_operand:SI 2 "immediate_operand" "i")]))))] ! "TARGET_SSE || TARGET_3DNOW_A" ! "pextrw\t{%2, %1, %0|%0, %1, %2}" [(set_attr "type" "sse")]) (define_insn "mmx_pshufw" [(set (match_operand:V4HI 0 "register_operand" "=y") (unspec:V4HI [(match_operand:V4HI 1 "register_operand" "0") ! (match_operand:SI 2 "immediate_operand" "i")] 41))] ! "TARGET_SSE || TARGET_3DNOW_A" ! "pshufw\t{%2, %1, %0|%0, %1, %2}" [(set_attr "type" "sse")]) *************** *** 13950,13956 **** (eq:V8QI (match_operand:V8QI 1 "register_operand" "0") (match_operand:V8QI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "pcmpeqb\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "eqv4hi3" --- 19091,19097 ---- (eq:V8QI (match_operand:V8QI 1 "register_operand" "0") (match_operand:V8QI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "pcmpeqb\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "eqv4hi3" *************** *** 13958,13964 **** (eq:V4HI (match_operand:V4HI 1 "register_operand" "0") (match_operand:V4HI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "pcmpeqw\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "eqv2si3" --- 19099,19105 ---- (eq:V4HI (match_operand:V4HI 1 "register_operand" "0") (match_operand:V4HI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "pcmpeqw\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "eqv2si3" *************** *** 13966,13972 **** (eq:V2SI (match_operand:V2SI 1 "register_operand" "0") (match_operand:V2SI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "pcmpeqd\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "gtv8qi3" --- 19107,19113 ---- (eq:V2SI (match_operand:V2SI 1 "register_operand" "0") (match_operand:V2SI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "pcmpeqd\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "gtv8qi3" *************** *** 13974,13980 **** (gt:V8QI (match_operand:V8QI 1 "register_operand" "0") (match_operand:V8QI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "pcmpgtb\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "gtv4hi3" --- 19115,19121 ---- (gt:V8QI (match_operand:V8QI 1 "register_operand" "0") (match_operand:V8QI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "pcmpgtb\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "gtv4hi3" *************** *** 13982,13988 **** (gt:V4HI (match_operand:V4HI 1 "register_operand" "0") (match_operand:V4HI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "pcmpgtw\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "gtv2si3" --- 19123,19129 ---- (gt:V4HI (match_operand:V4HI 1 "register_operand" "0") (match_operand:V4HI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "pcmpgtw\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "gtv2si3" *************** *** 13990,13996 **** (gt:V2SI (match_operand:V2SI 1 "register_operand" "0") (match_operand:V2SI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "pcmpgtd\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) --- 19131,19137 ---- (gt:V2SI (match_operand:V2SI 1 "register_operand" "0") (match_operand:V2SI 2 "nonimmediate_operand" "ym")))] "TARGET_MMX" ! "pcmpgtd\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) *************** *** 14000,14031 **** [(set (match_operand:V8QI 0 "register_operand" "=y") (umax:V8QI (match_operand:V8QI 1 "register_operand" "0") (match_operand:V8QI 2 "nonimmediate_operand" "ym")))] ! "TARGET_SSE" ! "pmaxub\\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "smaxv4hi3" [(set (match_operand:V4HI 0 "register_operand" "=y") (smax:V4HI (match_operand:V4HI 1 "register_operand" "0") (match_operand:V4HI 2 "nonimmediate_operand" "ym")))] ! "TARGET_SSE" ! "pmaxsw\\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "uminv8qi3" [(set (match_operand:V8QI 0 "register_operand" "=y") (umin:V8QI (match_operand:V8QI 1 "register_operand" "0") (match_operand:V8QI 2 "nonimmediate_operand" "ym")))] ! "TARGET_SSE" ! "pminub\\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "sminv4hi3" [(set (match_operand:V4HI 0 "register_operand" "=y") (smin:V4HI (match_operand:V4HI 1 "register_operand" "0") (match_operand:V4HI 2 "nonimmediate_operand" "ym")))] ! "TARGET_SSE" ! "pminsw\\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) --- 19141,19172 ---- [(set (match_operand:V8QI 0 "register_operand" "=y") (umax:V8QI (match_operand:V8QI 1 "register_operand" "0") (match_operand:V8QI 2 "nonimmediate_operand" "ym")))] ! "TARGET_SSE || TARGET_3DNOW_A" ! "pmaxub\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "smaxv4hi3" [(set (match_operand:V4HI 0 "register_operand" "=y") (smax:V4HI (match_operand:V4HI 1 "register_operand" "0") (match_operand:V4HI 2 "nonimmediate_operand" "ym")))] ! "TARGET_SSE || TARGET_3DNOW_A" ! "pmaxsw\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "uminv8qi3" [(set (match_operand:V8QI 0 "register_operand" "=y") (umin:V8QI (match_operand:V8QI 1 "register_operand" "0") (match_operand:V8QI 2 "nonimmediate_operand" "ym")))] ! "TARGET_SSE || TARGET_3DNOW_A" ! "pminub\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) (define_insn "sminv4hi3" [(set (match_operand:V4HI 0 "register_operand" "=y") (smin:V4HI (match_operand:V4HI 1 "register_operand" "0") (match_operand:V4HI 2 "nonimmediate_operand" "ym")))] ! "TARGET_SSE || TARGET_3DNOW_A" ! "pminsw\t{%2, %0|%0, %2}" [(set_attr "type" "sse")]) *************** *** 14036,14042 **** (ashiftrt:V4HI (match_operand:V4HI 1 "register_operand" "0") (match_operand:DI 2 "nonmemory_operand" "yi")))] "TARGET_MMX" ! "psraw\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "ashrv2si3" --- 19177,19183 ---- (ashiftrt:V4HI (match_operand:V4HI 1 "register_operand" "0") (match_operand:DI 2 "nonmemory_operand" "yi")))] "TARGET_MMX" ! "psraw\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "ashrv2si3" *************** *** 14044,14050 **** (ashiftrt:V2SI (match_operand:V2SI 1 "register_operand" "0") (match_operand:DI 2 "nonmemory_operand" "yi")))] "TARGET_MMX" ! "psrad\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "lshrv4hi3" --- 19185,19191 ---- (ashiftrt:V2SI (match_operand:V2SI 1 "register_operand" "0") (match_operand:DI 2 "nonmemory_operand" "yi")))] "TARGET_MMX" ! "psrad\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "lshrv4hi3" *************** *** 14052,14058 **** (lshiftrt:V4HI (match_operand:V4HI 1 "register_operand" "0") (match_operand:DI 2 "nonmemory_operand" "yi")))] "TARGET_MMX" ! "psrlw\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "lshrv2si3" --- 19193,19199 ---- (lshiftrt:V4HI (match_operand:V4HI 1 "register_operand" "0") (match_operand:DI 2 "nonmemory_operand" "yi")))] "TARGET_MMX" ! "psrlw\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "lshrv2si3" *************** *** 14060,14066 **** (lshiftrt:V2SI (match_operand:V2SI 1 "register_operand" "0") (match_operand:DI 2 "nonmemory_operand" "yi")))] "TARGET_MMX" ! "psrld\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) ;; See logical MMX insns. --- 19201,19207 ---- (lshiftrt:V2SI (match_operand:V2SI 1 "register_operand" "0") (match_operand:DI 2 "nonmemory_operand" "yi")))] "TARGET_MMX" ! "psrld\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) ;; See logical MMX insns. *************** *** 14070,14076 **** [(lshiftrt:DI (match_operand:DI 1 "register_operand" "0") (match_operand:DI 2 "nonmemory_operand" "yi"))] 45))] "TARGET_MMX" ! "psrlq\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "ashlv4hi3" --- 19211,19217 ---- [(lshiftrt:DI (match_operand:DI 1 "register_operand" "0") (match_operand:DI 2 "nonmemory_operand" "yi"))] 45))] "TARGET_MMX" ! "psrlq\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "ashlv4hi3" *************** *** 14078,14084 **** (ashift:V4HI (match_operand:V4HI 1 "register_operand" "0") (match_operand:DI 2 "nonmemory_operand" "yi")))] "TARGET_MMX" ! "psllw\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "ashlv2si3" --- 19219,19225 ---- (ashift:V4HI (match_operand:V4HI 1 "register_operand" "0") (match_operand:DI 2 "nonmemory_operand" "yi")))] "TARGET_MMX" ! "psllw\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "ashlv2si3" *************** *** 14086,14092 **** (ashift:V2SI (match_operand:V2SI 1 "register_operand" "0") (match_operand:DI 2 "nonmemory_operand" "yi")))] "TARGET_MMX" ! "pslld\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) ;; See logical MMX insns. --- 19227,19233 ---- (ashift:V2SI (match_operand:V2SI 1 "register_operand" "0") (match_operand:DI 2 "nonmemory_operand" "yi")))] "TARGET_MMX" ! "pslld\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) ;; See logical MMX insns. *************** *** 14096,14102 **** [(ashift:DI (match_operand:DI 1 "register_operand" "0") (match_operand:DI 2 "nonmemory_operand" "yi"))] 45))] "TARGET_MMX" ! "psllq\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) --- 19237,19243 ---- [(ashift:DI (match_operand:DI 1 "register_operand" "0") (match_operand:DI 2 "nonmemory_operand" "yi"))] 45))] "TARGET_MMX" ! "psllq\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) *************** *** 14108,14114 **** (ss_truncate:V4QI (match_operand:V4HI 1 "register_operand" "0")) (ss_truncate:V4QI (match_operand:V4HI 2 "register_operand" "y"))))] "TARGET_MMX" ! "packsswb\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "mmx_packssdw" --- 19249,19255 ---- (ss_truncate:V4QI (match_operand:V4HI 1 "register_operand" "0")) (ss_truncate:V4QI (match_operand:V4HI 2 "register_operand" "y"))))] "TARGET_MMX" ! "packsswb\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "mmx_packssdw" *************** *** 14117,14123 **** (ss_truncate:V2HI (match_operand:V2SI 1 "register_operand" "0")) (ss_truncate:V2HI (match_operand:V2SI 2 "register_operand" "y"))))] "TARGET_MMX" ! "packssdw\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "mmx_packuswb" --- 19258,19264 ---- (ss_truncate:V2HI (match_operand:V2SI 1 "register_operand" "0")) (ss_truncate:V2HI (match_operand:V2SI 2 "register_operand" "y"))))] "TARGET_MMX" ! "packssdw\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "mmx_packuswb" *************** *** 14126,14132 **** (us_truncate:V4QI (match_operand:V4HI 1 "register_operand" "0")) (us_truncate:V4QI (match_operand:V4HI 2 "register_operand" "y"))))] "TARGET_MMX" ! "packuswb\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "mmx_punpckhbw" --- 19267,19273 ---- (us_truncate:V4QI (match_operand:V4HI 1 "register_operand" "0")) (us_truncate:V4QI (match_operand:V4HI 2 "register_operand" "y"))))] "TARGET_MMX" ! "packuswb\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "mmx_punpckhbw" *************** *** 14152,14158 **** (const_int 7)])) (const_int 85)))] "TARGET_MMX" ! "punpckhbw\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "mmx_punpckhwd" --- 19293,19299 ---- (const_int 7)])) (const_int 85)))] "TARGET_MMX" ! "punpckhbw\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "mmx_punpckhwd" *************** *** 14170,14176 **** (const_int 1)])) (const_int 5)))] "TARGET_MMX" ! "punpckhwd\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "mmx_punpckhdq" --- 19311,19317 ---- (const_int 1)])) (const_int 5)))] "TARGET_MMX" ! "punpckhwd\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "mmx_punpckhdq" *************** *** 14184,14190 **** (const_int 0)])) (const_int 1)))] "TARGET_MMX" ! "punpckhdq\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "mmx_punpcklbw" --- 19325,19331 ---- (const_int 0)])) (const_int 1)))] "TARGET_MMX" ! "punpckhdq\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "mmx_punpcklbw" *************** *** 14210,14216 **** (const_int 3)])) (const_int 85)))] "TARGET_MMX" ! "punpcklbw\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "mmx_punpcklwd" --- 19351,19357 ---- (const_int 3)])) (const_int 85)))] "TARGET_MMX" ! "punpcklbw\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "mmx_punpcklwd" *************** *** 14228,14234 **** (const_int 3)])) (const_int 5)))] "TARGET_MMX" ! "punpcklwd\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "mmx_punpckldq" --- 19369,19375 ---- (const_int 3)])) (const_int 5)))] "TARGET_MMX" ! "punpcklwd\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) (define_insn "mmx_punpckldq" *************** *** 14242,14248 **** (const_int 1)])) (const_int 1)))] "TARGET_MMX" ! "punpckldq\\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) --- 19383,19389 ---- (const_int 1)])) (const_int 1)))] "TARGET_MMX" ! "punpckldq\t{%2, %0|%0, %2}" [(set_attr "type" "mmx")]) *************** *** 14274,14326 **** (define_insn "ldmxcsr" [(unspec_volatile [(match_operand:SI 0 "memory_operand" "m")] 37)] "TARGET_MMX" ! "ldmxcsr\\t%0" ! [(set_attr "type" "mmx")]) (define_insn "stmxcsr" [(set (match_operand:SI 0 "memory_operand" "=m") (unspec_volatile:SI [(const_int 0)] 40))] "TARGET_MMX" ! "stmxcsr\\t%0" ! [(set_attr "type" "mmx")]) (define_expand "sfence" [(set (match_dup 0) (unspec:BLK [(match_dup 0)] 44))] ! "TARGET_SSE" ! " { operands[0] = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (Pmode)); MEM_VOLATILE_P (operands[0]) = 1; ! }") (define_insn "*sfence_insn" [(set (match_operand:BLK 0 "" "") (unspec:BLK [(match_dup 0)] 44))] ! "TARGET_SSE" "sfence" [(set_attr "type" "sse") (set_attr "memory" "unknown")]) ! (define_insn "prefetch" ! [(unspec [(match_operand:SI 0 "address_operand" "p") ! (match_operand:SI 1 "immediate_operand" "n")] 35)] ! "TARGET_SSE" "* { ! switch (INTVAL (operands[1])) { ! case 0: ! return \"prefetchnta\\t%a0\"; ! case 1: ! return \"prefetcht0\\t%a0\"; ! case 2: ! return \"prefetcht1\\t%a0\"; ! case 3: ! return \"prefetcht2\\t%a0\"; ! default: ! abort (); } ! }" [(set_attr "type" "sse")]) --- 19415,19834 ---- (define_insn "ldmxcsr" [(unspec_volatile [(match_operand:SI 0 "memory_operand" "m")] 37)] "TARGET_MMX" ! "ldmxcsr\t%0" ! [(set_attr "type" "mmx") ! (set_attr "memory" "load")]) (define_insn "stmxcsr" [(set (match_operand:SI 0 "memory_operand" "=m") (unspec_volatile:SI [(const_int 0)] 40))] "TARGET_MMX" ! "stmxcsr\t%0" ! [(set_attr "type" "mmx") ! (set_attr "memory" "store")]) (define_expand "sfence" [(set (match_dup 0) (unspec:BLK [(match_dup 0)] 44))] ! "TARGET_SSE || TARGET_3DNOW_A" { operands[0] = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (Pmode)); MEM_VOLATILE_P (operands[0]) = 1; ! }) (define_insn "*sfence_insn" [(set (match_operand:BLK 0 "" "") (unspec:BLK [(match_dup 0)] 44))] ! "TARGET_SSE || TARGET_3DNOW_A" "sfence" [(set_attr "type" "sse") (set_attr "memory" "unknown")]) ! (define_expand "sse_prologue_save" ! [(parallel [(set (match_operand:BLK 0 "" "") ! (unspec:BLK [(reg:DI 21) ! (reg:DI 22) ! (reg:DI 23) ! (reg:DI 24) ! (reg:DI 25) ! (reg:DI 26) ! (reg:DI 27) ! (reg:DI 28)] 13)) ! (use (match_operand:DI 1 "register_operand" "")) ! (use (match_operand:DI 2 "immediate_operand" "")) ! (use (label_ref:DI (match_operand 3 "" "")))])] ! "TARGET_64BIT" ! "") ! ! (define_insn "*sse_prologue_save_insn" ! [(set (mem:BLK (plus:DI (match_operand:DI 0 "register_operand" "R") ! (match_operand:DI 4 "const_int_operand" "n"))) ! (unspec:BLK [(reg:DI 21) ! (reg:DI 22) ! (reg:DI 23) ! (reg:DI 24) ! (reg:DI 25) ! (reg:DI 26) ! (reg:DI 27) ! (reg:DI 28)] 13)) ! (use (match_operand:DI 1 "register_operand" "r")) ! (use (match_operand:DI 2 "const_int_operand" "i")) ! (use (label_ref:DI (match_operand 3 "" "X")))] ! "TARGET_64BIT ! && INTVAL (operands[4]) + SSE_REGPARM_MAX * 16 - 16 < 128 ! && INTVAL (operands[4]) + INTVAL (operands[2]) * 16 >= -128" "* { ! int i; ! operands[0] = gen_rtx_MEM (Pmode, ! gen_rtx_PLUS (Pmode, operands[0], operands[4])); ! output_asm_insn (\"jmp\\t%A1\", operands); ! for (i = SSE_REGPARM_MAX - 1; i >= INTVAL (operands[2]); i--) { ! operands[4] = adjust_address (operands[0], DImode, i*16); ! operands[5] = gen_rtx_REG (TImode, SSE_REGNO (i)); ! PUT_MODE (operands[4], TImode); ! if (GET_CODE (XEXP (operands[0], 0)) != PLUS) ! output_asm_insn (\"rex\", operands); ! output_asm_insn (\"movaps\\t{%5, %4|%4, %5}\", operands); } ! ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", ! CODE_LABEL_NUMBER (operands[3])); ! RET; ! } ! " ! [(set_attr "type" "other") ! (set_attr "length_immediate" "0") ! (set_attr "length_address" "0") ! (set_attr "length" "135") ! (set_attr "memory" "store") ! (set_attr "modrm" "0") ! (set_attr "mode" "DI")]) ! ! ;; 3Dnow! instructions ! ! (define_insn "addv2sf3" ! [(set (match_operand:V2SF 0 "register_operand" "=y") ! (plus:V2SF (match_operand:V2SF 1 "register_operand" "0") ! (match_operand:V2SF 2 "nonimmediate_operand" "ym")))] ! "TARGET_3DNOW" ! "pfadd\\t{%2, %0|%0, %2}" ! [(set_attr "type" "mmx")]) ! ! (define_insn "subv2sf3" ! [(set (match_operand:V2SF 0 "register_operand" "=y") ! (minus:V2SF (match_operand:V2SF 1 "register_operand" "0") ! (match_operand:V2SF 2 "nonimmediate_operand" "ym")))] ! "TARGET_3DNOW" ! "pfsub\\t{%2, %0|%0, %2}" ! [(set_attr "type" "mmx")]) ! ! (define_insn "subrv2sf3" ! [(set (match_operand:V2SF 0 "register_operand" "=y") ! (minus:V2SF (match_operand:V2SF 2 "nonimmediate_operand" "ym") ! (match_operand:V2SF 1 "register_operand" "0")))] ! "TARGET_3DNOW" ! "pfsubr\\t{%2, %0|%0, %2}" ! [(set_attr "type" "mmx")]) ! ! (define_insn "gtv2sf3" ! [(set (match_operand:V2SI 0 "register_operand" "=y") ! (gt:V2SI (match_operand:V2SF 1 "register_operand" "0") ! (match_operand:V2SF 2 "nonimmediate_operand" "ym")))] ! "TARGET_3DNOW" ! "pfcmpgt\\t{%2, %0|%0, %2}" ! [(set_attr "type" "mmx")]) ! ! (define_insn "gev2sf3" ! [(set (match_operand:V2SI 0 "register_operand" "=y") ! (ge:V2SI (match_operand:V2SF 1 "register_operand" "0") ! (match_operand:V2SF 2 "nonimmediate_operand" "ym")))] ! "TARGET_3DNOW" ! "pfcmpge\\t{%2, %0|%0, %2}" ! [(set_attr "type" "mmx")]) ! ! (define_insn "eqv2sf3" ! [(set (match_operand:V2SI 0 "register_operand" "=y") ! (eq:V2SI (match_operand:V2SF 1 "register_operand" "0") ! (match_operand:V2SF 2 "nonimmediate_operand" "ym")))] ! "TARGET_3DNOW" ! "pfcmpeq\\t{%2, %0|%0, %2}" ! [(set_attr "type" "mmx")]) ! ! (define_insn "pfmaxv2sf3" ! [(set (match_operand:V2SF 0 "register_operand" "=y") ! (smax:V2SF (match_operand:V2SF 1 "register_operand" "0") ! (match_operand:V2SF 2 "nonimmediate_operand" "ym")))] ! "TARGET_3DNOW" ! "pfmax\\t{%2, %0|%0, %2}" ! [(set_attr "type" "mmx")]) ! ! (define_insn "pfminv2sf3" ! [(set (match_operand:V2SF 0 "register_operand" "=y") ! (smin:V2SF (match_operand:V2SF 1 "register_operand" "0") ! (match_operand:V2SF 2 "nonimmediate_operand" "ym")))] ! "TARGET_3DNOW" ! "pfmin\\t{%2, %0|%0, %2}" ! [(set_attr "type" "mmx")]) ! ! (define_insn "mulv2sf3" ! [(set (match_operand:V2SF 0 "register_operand" "=y") ! (mult:V2SF (match_operand:V2SF 1 "register_operand" "0") ! (match_operand:V2SF 2 "nonimmediate_operand" "ym")))] ! "TARGET_3DNOW" ! "pfmul\\t{%2, %0|%0, %2}" ! [(set_attr "type" "mmx")]) ! ! (define_insn "femms" ! [(unspec_volatile [(const_int 0)] 46) ! (clobber (reg:XF 8)) ! (clobber (reg:XF 9)) ! (clobber (reg:XF 10)) ! (clobber (reg:XF 11)) ! (clobber (reg:XF 12)) ! (clobber (reg:XF 13)) ! (clobber (reg:XF 14)) ! (clobber (reg:XF 15)) ! (clobber (reg:DI 29)) ! (clobber (reg:DI 30)) ! (clobber (reg:DI 31)) ! (clobber (reg:DI 32)) ! (clobber (reg:DI 33)) ! (clobber (reg:DI 34)) ! (clobber (reg:DI 35)) ! (clobber (reg:DI 36))] ! "TARGET_3DNOW" ! "femms" ! [(set_attr "type" "mmx")]) ! ! (define_insn "pf2id" ! [(set (match_operand:V2SI 0 "register_operand" "=y") ! (fix:V2SI (match_operand:V2SF 1 "nonimmediate_operand" "ym")))] ! "TARGET_3DNOW" ! "pf2id\\t{%1, %0|%0, %1}" ! [(set_attr "type" "mmx")]) ! ! (define_insn "pf2iw" ! [(set (match_operand:V2SI 0 "register_operand" "=y") ! (sign_extend:V2SI ! (ss_truncate:V2HI ! (fix:V2SI (match_operand:V2SF 1 "nonimmediate_operand" "ym")))))] ! "TARGET_3DNOW_A" ! "pf2iw\\t{%1, %0|%0, %1}" ! [(set_attr "type" "mmx")]) ! ! (define_insn "pfacc" ! [(set (match_operand:V2SF 0 "register_operand" "=y") ! (vec_concat:V2SF ! (plus:SF ! (vec_select:SF (match_operand:V2SF 1 "register_operand" "0") ! (parallel [(const_int 0)])) ! (vec_select:SF (match_dup 1) ! (parallel [(const_int 1)]))) ! (plus:SF ! (vec_select:SF (match_operand:V2SF 2 "nonimmediate_operand" "y") ! (parallel [(const_int 0)])) ! (vec_select:SF (match_dup 2) ! (parallel [(const_int 1)])))))] ! "TARGET_3DNOW" ! "pfacc\\t{%2, %0|%0, %2}" ! [(set_attr "type" "mmx")]) ! ! (define_insn "pfnacc" ! [(set (match_operand:V2SF 0 "register_operand" "=y") ! (vec_concat:V2SF ! (minus:SF ! (vec_select:SF (match_operand:V2SF 1 "register_operand" "0") ! (parallel [(const_int 0)])) ! (vec_select:SF (match_dup 1) ! (parallel [(const_int 1)]))) ! (minus:SF ! (vec_select:SF (match_operand:V2SF 2 "nonimmediate_operand" "y") ! (parallel [(const_int 0)])) ! (vec_select:SF (match_dup 2) ! (parallel [(const_int 1)])))))] ! "TARGET_3DNOW_A" ! "pfnacc\\t{%2, %0|%0, %2}" ! [(set_attr "type" "mmx")]) ! ! (define_insn "pfpnacc" ! [(set (match_operand:V2SF 0 "register_operand" "=y") ! (vec_concat:V2SF ! (minus:SF ! (vec_select:SF (match_operand:V2SF 1 "register_operand" "0") ! (parallel [(const_int 0)])) ! (vec_select:SF (match_dup 1) ! (parallel [(const_int 1)]))) ! (plus:SF ! (vec_select:SF (match_operand:V2SF 2 "nonimmediate_operand" "y") ! (parallel [(const_int 0)])) ! (vec_select:SF (match_dup 2) ! (parallel [(const_int 1)])))))] ! "TARGET_3DNOW_A" ! "pfpnacc\\t{%2, %0|%0, %2}" ! [(set_attr "type" "mmx")]) ! ! (define_insn "pi2fw" ! [(set (match_operand:V2SF 0 "register_operand" "=y") ! (float:V2SF ! (vec_concat:V2SI ! (sign_extend:SI ! (truncate:HI ! (vec_select:SI (match_operand:V2SI 1 "nonimmediate_operand" "ym") ! (parallel [(const_int 0)])))) ! (sign_extend:SI ! (truncate:HI ! (vec_select:SI (match_dup 1) ! (parallel [(const_int 1)])))))))] ! "TARGET_3DNOW_A" ! "pi2fw\\t{%1, %0|%0, %1}" ! [(set_attr "type" "mmx")]) ! ! (define_insn "floatv2si2" ! [(set (match_operand:V2SF 0 "register_operand" "=y") ! (float:V2SF (match_operand:V2SI 1 "nonimmediate_operand" "ym")))] ! "TARGET_3DNOW" ! "pi2fd\\t{%1, %0|%0, %1}" ! [(set_attr "type" "mmx")]) ! ! ;; This insn is identical to pavgb in operation, but the opcode is ! ;; different. To avoid accidentally matching pavgb, use an unspec. ! ! (define_insn "pavgusb" ! [(set (match_operand:V8QI 0 "register_operand" "=y") ! (unspec:V8QI ! [(match_operand:V8QI 1 "register_operand" "0") ! (match_operand:V8QI 2 "nonimmediate_operand" "ym")] 49))] ! "TARGET_3DNOW" ! "pavgusb\\t{%2, %0|%0, %2}" ! [(set_attr "type" "mmx")]) ! ! ;; 3DNow reciprical and sqrt ! ! (define_insn "pfrcpv2sf2" ! [(set (match_operand:V2SF 0 "register_operand" "=y") ! (unspec:V2SF [(match_operand:V2SF 1 "nonimmediate_operand" "ym")] 50))] ! "TARGET_3DNOW" ! "pfrcp\\t{%1, %0|%0, %1}" ! [(set_attr "type" "mmx")]) ! ! (define_insn "pfrcpit1v2sf3" ! [(set (match_operand:V2SF 0 "register_operand" "=y") ! (unspec:V2SF [(match_operand:V2SF 1 "register_operand" "0") ! (match_operand:V2SF 2 "nonimmediate_operand" "ym")] 51))] ! "TARGET_3DNOW" ! "pfrcpit1\\t{%2, %0|%0, %2}" ! [(set_attr "type" "mmx")]) ! ! (define_insn "pfrcpit2v2sf3" ! [(set (match_operand:V2SF 0 "register_operand" "=y") ! (unspec:V2SF [(match_operand:V2SF 1 "register_operand" "0") ! (match_operand:V2SF 2 "nonimmediate_operand" "ym")] 52))] ! "TARGET_3DNOW" ! "pfrcpit2\\t{%2, %0|%0, %2}" ! [(set_attr "type" "mmx")]) ! ! (define_insn "pfrsqrtv2sf2" ! [(set (match_operand:V2SF 0 "register_operand" "=y") ! (unspec:V2SF [(match_operand:V2SF 1 "nonimmediate_operand" "ym")] 53))] ! "TARGET_3DNOW" ! "pfrsqrt\\t{%1, %0|%0, %1}" ! [(set_attr "type" "mmx")]) ! ! (define_insn "pfrsqit1v2sf3" ! [(set (match_operand:V2SF 0 "register_operand" "=y") ! (unspec:V2SF [(match_operand:V2SF 1 "register_operand" "0") ! (match_operand:V2SF 2 "nonimmediate_operand" "ym")] 54))] ! "TARGET_3DNOW" ! "pfrsqit1\\t{%2, %0|%0, %2}" ! [(set_attr "type" "mmx")]) ! ! (define_insn "pmulhrwv4hi3" ! [(set (match_operand:V4HI 0 "register_operand" "=y") ! (truncate:V4HI ! (lshiftrt:V4SI ! (plus:V4SI ! (mult:V4SI ! (sign_extend:V4SI ! (match_operand:V4HI 1 "register_operand" "0")) ! (sign_extend:V4SI ! (match_operand:V4HI 2 "nonimmediate_operand" "ym"))) ! (const_vector:V4SI [(const_int 32768) ! (const_int 32768) ! (const_int 32768) ! (const_int 32768)])) ! (const_int 16))))] ! "TARGET_3DNOW" ! "pmulhrw\\t{%2, %0|%0, %2}" ! [(set_attr "type" "mmx")]) ! ! (define_insn "pswapdv2si2" ! [(set (match_operand:V2SI 0 "register_operand" "=y") ! (vec_select:V2SI (match_operand:V2SI 1 "nonimmediate_operand" "ym") ! (parallel [(const_int 1) (const_int 0)])))] ! "TARGET_3DNOW_A" ! "pswapd\\t{%1, %0|%0, %1}" ! [(set_attr "type" "mmx")]) ! ! (define_insn "pswapdv2sf2" ! [(set (match_operand:V2SF 0 "register_operand" "=y") ! (vec_select:V2SF (match_operand:V2SF 1 "nonimmediate_operand" "ym") ! (parallel [(const_int 1) (const_int 0)])))] ! "TARGET_3DNOW_A" ! "pswapd\\t{%1, %0|%0, %1}" ! [(set_attr "type" "mmx")]) ! ! (define_expand "prefetch" ! [(prefetch (match_operand:SI 0 "address_operand" "") ! (match_operand:SI 1 "const_int_operand" "") ! (match_operand:SI 2 "const_int_operand" ""))] ! "TARGET_PREFETCH_SSE || TARGET_3DNOW" ! { ! int rw = INTVAL (operands[1]); ! int locality = INTVAL (operands[2]); ! ! if (rw != 0 && rw != 1) ! abort (); ! if (locality < 0 || locality > 3) ! abort (); ! ! /* Use 3dNOW prefetch in case we are asking for write prefetch not ! suported by SSE counterpart or the SSE prefetch is not available ! (K6 machines). Otherwise use SSE prefetch as it allows specifying ! of locality. */ ! if (TARGET_3DNOW && (!TARGET_PREFETCH_SSE || rw)) ! operands[2] = GEN_INT (3); ! else ! operands[1] = const0_rtx; ! }) ! ! (define_insn "*prefetch_sse" ! [(prefetch (match_operand:SI 0 "address_operand" "p") ! (const_int 0) ! (match_operand:SI 1 "const_int_operand" ""))] ! "TARGET_PREFETCH_SSE" ! { ! static const char * const patterns[4] = { ! "prefetchnta\t%a0", "prefetcht2\t%a0", "prefetcht1\t%a0", "prefetcht0\t%a0" ! }; ! ! int locality = INTVAL (operands[1]); ! if (locality < 0 || locality > 3) ! abort (); ! ! return patterns[locality]; ! } [(set_attr "type" "sse")]) + (define_insn "*prefetch_3dnow" + [(prefetch (match_operand:SI 0 "address_operand" "p") + (match_operand:SI 1 "const_int_operand" "n") + (const_int 3))] + "TARGET_3DNOW" + { + if (INTVAL (operands[1]) == 0) + return "prefetch\t%a0"; + else + return "prefetchw\t%a0"; + } + [(set_attr "type" "mmx")]) diff -Nrc3pad gcc-3.0.4/gcc/config/i386/i386elf.h gcc-3.1/gcc/config/i386/i386elf.h *** gcc-3.0.4/gcc/config/i386/i386elf.h Sun May 20 19:49:17 2001 --- gcc-3.1/gcc/config/i386/i386elf.h Thu Dec 20 17:36:35 2001 *************** GNU General Public License for more deta *** 17,23 **** 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, 675 Mass Ave, Cambridge, MA 02139, USA. */ /* Use stabs instead of DWARF debug format. */ #undef PREFERRED_DEBUGGING_TYPE --- 17,24 ---- 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. */ /* Use stabs instead of DWARF debug format. */ #undef PREFERRED_DEBUGGING_TYPE *************** the Free Software Foundation, 675 Mass A *** 29,35 **** /* By default, target has a 80387, uses IEEE compatible arithmetic, and returns float values in the 387. */ ! #define TARGET_DEFAULT (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS) /* The ELF ABI for the i386 says that records and unions are returned in memory. */ --- 30,36 ---- /* By default, target has a 80387, uses IEEE compatible arithmetic, and returns float values in the 387. */ ! #define TARGET_SUBTARGET_DEFAULT (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS) /* The ELF ABI for the i386 says that records and unions are returned in memory. */ *************** the Free Software Foundation, 675 Mass A *** 46,108 **** #undef CPP_SPEC #define CPP_SPEC "%(cpp_cpu)" ! /* This is how to output assembly code to define a `float' constant. ! We always have to use a .long pseudo-op to do this because the native ! SVR4 ELF assembler is buggy and it generates incorrect values when we ! try to use the .float pseudo-op instead. */ ! ! #undef ASM_OUTPUT_FLOAT ! #define ASM_OUTPUT_FLOAT(FILE,VALUE) \ ! do { long value; \ ! REAL_VALUE_TO_TARGET_SINGLE ((VALUE), value); \ ! if (sizeof (int) == sizeof (long)) \ ! fprintf((FILE), "%s0x%x\n", ASM_LONG, value); \ ! else \ ! fprintf((FILE), "%s0x%lx\n", ASM_LONG, value); \ ! } while (0) ! ! /* This is how to output assembly code to define a `double' constant. ! We always have to use a pair of .long pseudo-ops to do this because ! the native SVR4 ELF assembler is buggy and it generates incorrect ! values when we try to use the the .double pseudo-op instead. */ ! ! #undef ASM_OUTPUT_DOUBLE ! #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ ! do { long value[2]; \ ! REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), value); \ ! if (sizeof (int) == sizeof (long)) \ ! { \ ! fprintf((FILE), "%s0x%x\n", ASM_LONG, value[0]); \ ! fprintf((FILE), "%s0x%x\n", ASM_LONG, value[1]); \ ! } \ ! else \ ! { \ ! fprintf((FILE), "%s0x%lx\n", ASM_LONG, value[0]); \ ! fprintf((FILE), "%s0x%lx\n", ASM_LONG, value[1]); \ ! } \ ! } while (0) ! ! #undef ASM_OUTPUT_LONG_DOUBLE ! #define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \ ! do { long value[3]; \ ! REAL_VALUE_TO_TARGET_LONG_DOUBLE ((VALUE), value); \ ! if (sizeof (int) == sizeof (long)) \ ! { \ ! fprintf((FILE), "%s0x%x\n", ASM_LONG, value[0]); \ ! fprintf((FILE), "%s0x%x\n", ASM_LONG, value[1]); \ ! fprintf((FILE), "%s0x%x\n", ASM_LONG, value[2]); \ ! } \ ! else \ ! { \ ! fprintf((FILE), "%s0x%lx\n", ASM_LONG, value[0]); \ ! fprintf((FILE), "%s0x%lx\n", ASM_LONG, value[1]); \ ! fprintf((FILE), "%s0x%lx\n", ASM_LONG, value[2]); \ ! } \ ! } while (0) #undef DBX_REGISTER_NUMBER ! #define DBX_REGISTER_NUMBER(n) svr4_dbx_register_map[n] /* The routine used to output sequences of byte values. We use a special version of this for most svr4 targets because doing so makes the --- 47,62 ---- #undef CPP_SPEC #define CPP_SPEC "%(cpp_cpu)" ! #define ENDFILE_SPEC "crtend.o%s" ! #define STARTFILE_SPEC "%{!shared: \ ! %{!symbolic: \ ! %{pg:gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}}}}\ ! crtbegin.o%s" #undef DBX_REGISTER_NUMBER ! #define DBX_REGISTER_NUMBER(n) \ ! (TARGET_64BIT ? dbx64_register_map[n] : svr4_dbx_register_map[n]) /* The routine used to output sequences of byte values. We use a special version of this for most svr4 targets because doing so makes the *************** do { long value[3]; \ *** 129,135 **** } \ for (p = _ascii_bytes; p < limit && *p != '\0'; p++) \ continue; \ ! if (p < limit && (p - _ascii_bytes) <= STRING_LIMIT) \ { \ if (bytes_in_chunk > 0) \ { \ --- 83,89 ---- } \ for (p = _ascii_bytes; p < limit && *p != '\0'; p++) \ continue; \ ! if (p < limit && (p - _ascii_bytes) <= (long) STRING_LIMIT) \ { \ if (bytes_in_chunk > 0) \ { \ *************** do { long value[3]; \ *** 154,189 **** } \ while (0) - /* This is 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) - - /* Indicate that jump tables go in the text section. This is - necessary when compiling PIC code. */ - - #define JUMP_TABLES_IN_TEXT_SECTION 1 - #define LOCAL_LABEL_PREFIX "." ! /* A C statement to output something to the assembler file to switch to section ! NAME for object DECL which is either a FUNCTION_DECL, a VAR_DECL or ! NULL_TREE. Some target formats do not support arbitrary sections. Do not ! define this macro in such cases. */ ! ! #undef ASM_OUTPUT_SECTION_NAME ! #define ASM_OUTPUT_SECTION_NAME(FILE, DECL, NAME, RELOC) \ ! do { \ ! if ((DECL) && TREE_CODE (DECL) == FUNCTION_DECL) \ ! fprintf (FILE, ".section\t%s,\"ax\"\n", (NAME)); \ ! else if ((DECL) && DECL_READONLY_SECTION (DECL, RELOC)) \ ! fprintf (FILE, ".section\t%s,\"a\"\n", (NAME)); \ ! else \ ! fprintf (FILE, ".section\t%s,\"aw\"\n", (NAME)); \ ! } while (0) /* If defined, a C expression whose value is a string containing the assembler operation to identify the following data as --- 108,117 ---- } \ while (0) #define LOCAL_LABEL_PREFIX "." ! /* Switch into a generic section. */ ! #define TARGET_ASM_NAMED_SECTION default_elf_asm_named_section /* If defined, a C expression whose value is a string containing the assembler operation to identify the following data as *************** do { \ *** 202,208 **** specified as the number of bits. Try to use function `asm_output_aligned_bss' defined in file ! `varasm.c' when defining this macro. */ #undef ASM_OUTPUT_ALIGNED_BSS #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN) --- 130,136 ---- specified as the number of bits. Try to use function `asm_output_aligned_bss' defined in file ! `varasm.c' when defining this macro. */ #undef ASM_OUTPUT_ALIGNED_BSS #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN) diff -Nrc3pad gcc-3.0.4/gcc/config/i386/interix.c gcc-3.1/gcc/config/i386/interix.c *** gcc-3.0.4/gcc/config/i386/interix.c Sat Jan 22 19:49:21 2000 --- gcc-3.1/gcc/config/i386/interix.c Sun Nov 11 05:56:41 2001 *************** Boston, MA 02111-1307, USA. */ *** 31,44 **** suffix consisting of an atsign (@) followed by the number of bytes of arguments */ ! char * gen_stdcall_suffix (decl) tree decl; { int total = 0; /* ??? This probably should use XSTR (XEXP (DECL_RTL (decl), 0), 0) instead of DECL_ASSEMBLER_NAME. */ ! char *asmname = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)); char *newsym; if (TYPE_ARG_TYPES (TREE_TYPE (decl))) --- 31,44 ---- suffix consisting of an atsign (@) followed by the number of bytes of arguments */ ! const char * gen_stdcall_suffix (decl) tree decl; { int total = 0; /* ??? This probably should use XSTR (XEXP (DECL_RTL (decl), 0), 0) instead of DECL_ASSEMBLER_NAME. */ ! const char *const asmname = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)); char *newsym; if (TYPE_ARG_TYPES (TREE_TYPE (decl))) *************** gen_stdcall_suffix (decl) *** 68,74 **** #if 0 /* Turn this back on when the linker is updated to handle grouped .data$ sections correctly. See corresponding note in i386/interix.h. ! MK. */ /* Cover function for UNIQUE_SECTION. */ --- 68,74 ---- #if 0 /* Turn this back on when the linker is updated to handle grouped .data$ sections correctly. See corresponding note in i386/interix.h. ! MK. */ /* Cover function for UNIQUE_SECTION. */ diff -Nrc3pad gcc-3.0.4/gcc/config/i386/isc.h gcc-3.1/gcc/config/i386/isc.h *** gcc-3.0.4/gcc/config/i386/isc.h Tue Jan 19 16:39:40 1999 --- gcc-3.1/gcc/config/i386/isc.h Mon Nov 19 18:30:00 2001 *************** *** 2,8 **** Interactive Unix System V. Specifically, this is for recent versions that support POSIX. */ ! /* Use crt1.o, not crt0.o, as a startup file, and crtn.o as a closing file. */ #undef STARTFILE_SPEC #define STARTFILE_SPEC \ "%{!shlib:%{posix:%{pg:mcrtp1.o%s}%{!pg:%{p:mcrtp1.o%s}%{!p:crtp1.o%s}}}\ --- 2,8 ---- Interactive Unix System V. Specifically, this is for recent versions that support POSIX. */ ! /* Use crt1.o, not crt0.o, as a startup file, and crtn.o as a closing file. */ #undef STARTFILE_SPEC #define STARTFILE_SPEC \ "%{!shlib:%{posix:%{pg:mcrtp1.o%s}%{!pg:%{p:mcrtp1.o%s}%{!p:crtp1.o%s}}}\ *************** *** 33,39 **** the standard calling sequence in which the called function pops the extra arg. */ /* caller has to pop the extra argument passed to functions that return ! structures. */ #undef RETURN_POPS_ARGS #define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) \ --- 33,39 ---- the standard calling sequence in which the called function pops the extra arg. */ /* caller has to pop the extra argument passed to functions that return ! structures. */ #undef RETURN_POPS_ARGS #define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) \ *************** *** 56,65 **** ISC's software emulation of a 387 fails to handle the `fucomp' opcode. fucomp is only used when generating IEEE compliant code. ! So don't make TARGET_IEEE_FP default for ISC. */ ! #undef TARGET_DEFAULT ! #define TARGET_DEFAULT (MASK_80387 | MASK_FLOAT_RETURNS) /* The ISC 2.0.2 software FPU emulator apparently can't handle 80-bit XFmode insns, so don't generate them. */ --- 56,65 ---- ISC's software emulation of a 387 fails to handle the `fucomp' opcode. fucomp is only used when generating IEEE compliant code. ! So don't make TARGET_IEEE_FP default for ISC. */ ! #undef TARGET_SUBTARGET_DEFAULT ! #define TARGET_SUBTARGET_DEFAULT (MASK_80387 | MASK_FLOAT_RETURNS) /* The ISC 2.0.2 software FPU emulator apparently can't handle 80-bit XFmode insns, so don't generate them. */ *************** *** 74,81 **** #undef ASM_FILE_START #define ASM_FILE_START(FILE) \ do { \ ! int len = strlen (main_input_filename); \ ! char *na = main_input_filename + len; \ char shorter[15]; \ /* NA gets MAIN_INPUT_FILENAME sans directory names. */\ while (na > main_input_filename) \ --- 74,81 ---- #undef ASM_FILE_START #define ASM_FILE_START(FILE) \ do { \ ! const int len = strlen (main_input_filename); \ ! const char *na = main_input_filename + len; \ char shorter[15]; \ /* NA gets MAIN_INPUT_FILENAME sans directory names. */\ while (na > main_input_filename) \ *************** *** 92,96 **** } while (0) /* Work around assembler forward label references generated in exception ! handling code. */ #define DWARF2_UNWIND_INFO 0 --- 92,96 ---- } while (0) /* Work around assembler forward label references generated in exception ! handling code. */ #define DWARF2_UNWIND_INFO 0 diff -Nrc3pad gcc-3.0.4/gcc/config/i386/isccoff.h gcc-3.1/gcc/config/i386/isccoff.h *** gcc-3.0.4/gcc/config/i386/isccoff.h Tue Jan 19 16:39:41 1999 --- gcc-3.1/gcc/config/i386/isccoff.h Wed Oct 31 14:32:29 2001 *************** *** 4,10 **** (But set TARGET_DEFAULT to (MASK_80307 | MASK_FLOAT_RETURNS) if you do that, if you don't have a real 80387.) */ ! /* Mostly it's like AT&T Unix System V. */ #include "i386/sysv3.h" --- 4,10 ---- (But set TARGET_DEFAULT to (MASK_80307 | MASK_FLOAT_RETURNS) if you do that, if you don't have a real 80387.) */ ! /* Mostly it's like AT&T Unix System V. */ #include "i386/sysv3.h" diff -Nrc3pad gcc-3.0.4/gcc/config/i386/iscdbx.h gcc-3.1/gcc/config/i386/iscdbx.h *** gcc-3.0.4/gcc/config/i386/iscdbx.h Wed Dec 16 21:03:34 1998 --- gcc-3.1/gcc/config/i386/iscdbx.h Wed Oct 31 14:32:29 2001 *************** along with GNU CC; see the file COPYING. *** 20,26 **** the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ! /* Mostly it's like AT&T Unix System V with dbx-in-coff. */ #include "i386/svr3dbx.h" --- 20,26 ---- the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ! /* Mostly it's like AT&T Unix System V with dbx-in-coff. */ #include "i386/svr3dbx.h" *************** Boston, MA 02111-1307, USA. */ *** 28,34 **** #undef ENDFILE_SPEC #include "i386/isc.h" ! /* Overridden defines for ifile usage. */ #undef STARTFILE_SPEC #define STARTFILE_SPEC \ --- 28,34 ---- #undef ENDFILE_SPEC #include "i386/isc.h" ! /* Overridden defines for ifile usage. */ #undef STARTFILE_SPEC #define STARTFILE_SPEC \ diff -Nrc3pad gcc-3.0.4/gcc/config/i386/libgcc-x86_64-glibc.ver gcc-3.1/gcc/config/i386/libgcc-x86_64-glibc.ver *** gcc-3.0.4/gcc/config/i386/libgcc-x86_64-glibc.ver Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/i386/libgcc-x86_64-glibc.ver Wed May 8 23:25:35 2002 *************** *** 0 **** --- 1,25 ---- + # In order to work around the very problems that force us to now generally + # create a libgcc.so, glibc reexported a number of routines from libgcc.a. + # By now choosing the same version tags for these specific routines, we + # maintain enough binary compatibility to allow future versions of glibc + # to defer implementation of these routines to libgcc.so via DT_AUXILIARY. + + %ifndef __x86_64__ + %inherit GCC_3.0 GLIBC_2.0 + GLIBC_2.0 { + # Sampling of DImode arithmetic used by (at least) i386 and m68k. + __divdi3 + __moddi3 + __udivdi3 + __umoddi3 + + # Exception handling support functions used by most everyone. + __register_frame + __register_frame_table + __deregister_frame + __register_frame_info + __deregister_frame_info + __frame_state_for + __register_frame_info_table + } + %endif diff -Nrc3pad gcc-3.0.4/gcc/config/i386/linux-aout.h gcc-3.1/gcc/config/i386/linux-aout.h *** gcc-3.0.4/gcc/config/i386/linux-aout.h Thu Nov 2 23:29:10 2000 --- gcc-3.1/gcc/config/i386/linux-aout.h Mon Apr 15 20:27:27 2002 *************** *** 1,5 **** /* Definitions for Intel 386 running Linux-based GNU systems using a.out. ! Copyright (C) 1992, 1994, 1995, 1997, 1998 Free Software Foundation, Inc. Contributed by H.J. Lu (hjl@nynexst.com) This file is part of GNU CC. --- 1,5 ---- /* Definitions for Intel 386 running Linux-based GNU systems using a.out. ! Copyright (C) 1992, 1994, 1995, 1997, 1998, 2002 Free Software Foundation, Inc. Contributed by H.J. Lu (hjl@nynexst.com) This file is part of GNU CC. *************** Boston, MA 02111-1307, USA. */ *** 31,37 **** /* Specify predefined symbols in preprocessor. */ #undef CPP_PREDEFINES ! #define CPP_PREDEFINES "-Dunix -Dlinux -Asystem=posix" #undef CPP_SPEC #define CPP_SPEC "%(cpp_cpu) %{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{posix:-D_POSIX_SOURCE}" --- 31,37 ---- /* Specify predefined symbols in preprocessor. */ #undef CPP_PREDEFINES ! #define CPP_PREDEFINES "-Dunix -D__gnu_linux__ -Dlinux -Asystem=posix" #undef CPP_SPEC #define CPP_SPEC "%(cpp_cpu) %{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{posix:-D_POSIX_SOURCE}" *************** Boston, MA 02111-1307, USA. */ *** 69,74 **** #undef LINK_SPEC #define LINK_SPEC "-m i386linux" - - /* Get perform_* macros to build libgcc.a. */ - #include "i386/perform.h" --- 69,71 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/linux-oldld.h gcc-3.1/gcc/config/i386/linux-oldld.h *** gcc-3.0.4/gcc/config/i386/linux-oldld.h Thu Nov 2 23:29:10 2000 --- gcc-3.1/gcc/config/i386/linux-oldld.h Mon Apr 15 20:27:27 2002 *************** *** 1,6 **** /* Definitions for Intel 386 running Linux-based GNU systems with pre-BFD a.out linkers. ! Copyright (C) 1995, 1997, 1998 Free Software Foundation, Inc. Contributed by Michael Meissner (meissner@cygnus.com) This file is part of GNU CC. --- 1,6 ---- /* Definitions for Intel 386 running Linux-based GNU systems with pre-BFD a.out linkers. ! Copyright (C) 1995, 1997, 1998, 2002 Free Software Foundation, Inc. Contributed by Michael Meissner (meissner@cygnus.com) This file is part of GNU CC. *************** Boston, MA 02111-1307, USA. */ *** 32,38 **** /* Specify predefined symbols in preprocessor. */ #undef CPP_PREDEFINES ! #define CPP_PREDEFINES "-Dunix -Dlinux -Asystem=posix" #undef CPP_SPEC #define CPP_SPEC "%(cpp_cpu) %{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{posix:-D_POSIX_SOURCE}" --- 32,38 ---- /* Specify predefined symbols in preprocessor. */ #undef CPP_PREDEFINES ! #define CPP_PREDEFINES "-Dunix -D__gnu_linux__ -Dlinux -Asystem=posix" #undef CPP_SPEC #define CPP_SPEC "%(cpp_cpu) %{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{posix:-D_POSIX_SOURCE}" *************** Boston, MA 02111-1307, USA. */ *** 70,75 **** #undef LINK_SPEC #define LINK_SPEC "" - - /* Get perform_* macros to build libgcc.a. */ - #include --- 70,72 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/linux.h gcc-3.1/gcc/config/i386/linux.h *** gcc-3.0.4/gcc/config/i386/linux.h Tue May 22 17:13:48 2001 --- gcc-3.1/gcc/config/i386/linux.h Mon Apr 15 20:27:27 2002 *************** *** 1,5 **** /* Definitions for Intel 386 running Linux-based GNU systems with ELF format. ! Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2001 Free Software Foundation, Inc. Contributed by Eric Youngdale. Modified for stabs-in-ELF by H.J. Lu. --- 1,6 ---- /* Definitions for Intel 386 running Linux-based GNU systems with ELF format. ! Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002 ! Free Software Foundation, Inc. Contributed by Eric Youngdale. Modified for stabs-in-ELF by H.J. Lu. *************** Boston, MA 02111-1307, USA. */ *** 28,34 **** #define ASM_FILE_START(FILE) \ do { \ output_file_directive (FILE, main_input_filename); \ ! if (target_flags & MASK_INTEL_SYNTAX) \ fputs ("\t.intel_syntax\n", FILE); \ } while (0) --- 29,35 ---- #define ASM_FILE_START(FILE) \ do { \ output_file_directive (FILE, main_input_filename); \ ! if (ix86_asm_dialect == ASM_INTEL) \ fputs ("\t.intel_syntax\n", FILE); \ } while (0) *************** Boston, MA 02111-1307, USA. */ *** 43,61 **** #undef ASM_COMMENT_START #define ASM_COMMENT_START "#" - /* This is 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) - - /* Indicate that jump tables go in the text section. This is - necessary when compiling PIC code. */ - #define JUMP_TABLES_IN_TEXT_SECTION (flag_pic) - #undef DBX_REGISTER_NUMBER ! #define DBX_REGISTER_NUMBER(n) svr4_dbx_register_map[n] /* Output assembler code to FILE to call the profiler. To the best of my knowledge, no Linux libc has required the label --- 44,52 ---- #undef ASM_COMMENT_START #define ASM_COMMENT_START "#" #undef DBX_REGISTER_NUMBER ! #define DBX_REGISTER_NUMBER(n) \ ! (TARGET_64BIT ? dbx64_register_map[n] : svr4_dbx_register_map[n]) /* Output assembler code to FILE to call the profiler. To the best of my knowledge, no Linux libc has required the label *************** Boston, MA 02111-1307, USA. */ *** 94,100 **** #define WCHAR_TYPE_SIZE BITS_PER_WORD #undef CPP_PREDEFINES ! #define CPP_PREDEFINES "-D__ELF__ -Dunix -Dlinux -Asystem=posix" #undef CPP_SPEC #ifdef USE_GNULIBC_1 --- 85,91 ---- #define WCHAR_TYPE_SIZE BITS_PER_WORD #undef CPP_PREDEFINES ! #define CPP_PREDEFINES "-D__ELF__ -Dunix -D__gnu_linux__ -Dlinux -Asystem=posix" #undef CPP_SPEC #ifdef USE_GNULIBC_1 *************** Boston, MA 02111-1307, USA. */ *** 120,126 **** When the -shared link option is used a final link is not being done. */ ! /* If ELF is the default format, we should not use /lib/elf. */ #undef LINK_SPEC #ifdef USE_GNULIBC_1 --- 111,117 ---- When the -shared link option is used a final link is not being done. */ ! /* If ELF is the default format, we should not use /lib/elf. */ #undef LINK_SPEC #ifdef USE_GNULIBC_1 *************** Boston, MA 02111-1307, USA. */ *** 151,159 **** %{static:-static}}}" #endif - /* Get perform_* macros to build libgcc.a. */ - #include "i386/perform.h" - /* A C statement (sans semicolon) to output to the stdio stream FILE the assembler definition of uninitialized global DECL named NAME whose size is SIZE bytes and alignment is ALIGN bytes. --- 142,147 ---- *************** Boston, MA 02111-1307, USA. */ *** 180,199 **** #if defined(__PIC__) && defined (USE_GNULIBC_1) /* This is a kludge. The i386 GNU/Linux dynamic linker needs ___brk_addr, ! __environ and atexit (). We have to make sure they are in the .dynsym ! section. We accomplish it by making a dummy call here. This ! code is never reached. */ ! ! #define CRT_END_INIT_DUMMY \ ! do \ ! { \ ! extern void *___brk_addr; \ ! extern char **__environ; \ ! \ ! ___brk_addr = __environ; \ ! atexit (0); \ ! } \ ! while (0) #endif /* Handle special EH pointer encodings. Absolute, pc-relative, and --- 168,187 ---- #if defined(__PIC__) && defined (USE_GNULIBC_1) /* This is a kludge. The i386 GNU/Linux dynamic linker needs ___brk_addr, ! __environ and atexit. We have to make sure they are in the .dynsym ! section. We do this by forcing the assembler to create undefined ! references to these symbols in the object file. */ ! #undef CRT_CALL_STATIC_FUNCTION ! #define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \ ! asm (SECTION_OP "\n\t" \ ! "call " USER_LABEL_PREFIX #FUNC "\n" \ ! TEXT_SECTION_ASM_OP "\n\t" \ ! ".extern ___brk_addr\n\t" \ ! ".type ___brk_addr,@object\n\t" \ ! ".extern __environ\n\t" \ ! ".type __environ,@object\n\t" \ ! ".extern atexit\n\t" \ ! ".type atexit,@function"); #endif /* Handle special EH pointer encodings. Absolute, pc-relative, and *************** Boston, MA 02111-1307, USA. */ *** 202,208 **** do { \ if ((SIZE) == 4 && ((ENCODING) & 0x70) == DW_EH_PE_datarel) \ { \ ! fputs (UNALIGNED_INT_ASM_OP, FILE); \ assemble_name (FILE, XSTR (ADDR, 0)); \ fputs (((ENCODING) & DW_EH_PE_indirect ? "@GOT" : "@GOTOFF"), FILE); \ goto DONE; \ --- 190,196 ---- do { \ if ((SIZE) == 4 && ((ENCODING) & 0x70) == DW_EH_PE_datarel) \ { \ ! fputs (ASM_LONG, FILE); \ assemble_name (FILE, XSTR (ADDR, 0)); \ fputs (((ENCODING) & DW_EH_PE_indirect ? "@GOT" : "@GOTOFF"), FILE); \ goto DONE; \ diff -Nrc3pad gcc-3.0.4/gcc/config/i386/linux64.h gcc-3.1/gcc/config/i386/linux64.h *** gcc-3.0.4/gcc/config/i386/linux64.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/i386/linux64.h Fri Apr 26 07:57:50 2002 *************** *** 0 **** --- 1,134 ---- + /* Definitions for AMD x86-64 running Linux-based GNU systems with ELF format. + Copyright (C) 2001, 2002 Free Software Foundation, Inc. + Contributed by Jan Hubicka , based on linux.h. + + 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. */ + + #define LINUX_DEFAULT_ELF + + #undef TARGET_VERSION + #define TARGET_VERSION fprintf (stderr, " (x86-64 Linux/ELF)"); + + #undef CPP_PREDEFINES + #define CPP_PREDEFINES "-D__ELF__ -Dunix -D__gnu_linux__ -Dlinux -Asystem(posix)" + + #undef CPP_SPEC + #define CPP_SPEC "%(cpp_cpu) %{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT} %{!m32:-D__LONG_MAX__=9223372036854775807L}" + + /* Provide a LINK_SPEC. Here we provide support for the special GCC + options -static and -shared, which allow us to link things in one + of these three modes by applying the appropriate combinations of + options at link-time. + + When the -shared link option is used a final link is not being + done. */ + + #undef LINK_SPEC + #define LINK_SPEC "%{!m32:-m elf_x86_64 -Y P,/usr/lib64} %{m32:-m elf_i386} \ + %{shared:-shared} \ + %{!shared: \ + %{!static: \ + %{rdynamic:-export-dynamic} \ + %{m32:%{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \ + %{!m32:%{!dynamic-linker:-dynamic-linker /lib64/ld-linux-x86-64.so.2}}} \ + %{static:-static}}" + + #undef STARTFILE_SPEC + #define STARTFILE_SPEC \ + "%{m32:%{!shared: \ + %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} \ + %{!p:%{profile:gcrt1.o%s} %{!profile:crt1.o%s}}}} \ + crti.o%s %{static:crtbeginT.o%s}\ + %{!static:%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}}} \ + %{!m32:%{!shared: \ + %{pg:/usr/lib64/gcrt1.o%s} %{!pg:%{p:/usr/lib64/gcrt1.o%s} \ + %{!p:%{profile:/usr/lib64/gcrt1.o%s} %{!profile:/usr/lib64/crt1.o%s}}}}\ + /usr/lib64/crti.o%s %{static:crtbeginT.o%s} \ + %{!static:%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}}}" + + #undef ENDFILE_SPEC + #define ENDFILE_SPEC "\ + %{m32:%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s} \ + %{!m32:%{!shared:crtend.o%s} %{shared:crtendS.o%s} /usr/lib64/crtn.o%s}" + + #define MULTILIB_DEFAULTS { "m64" } + + /* Do code reading to identify a signal frame, and set the frame + state data appropriately. See unwind-dw2.c for the structs. */ + + #ifdef IN_LIBGCC2 + #include + #include + #endif + + #define MD_FALLBACK_FRAME_STATE_FOR(CONTEXT, FS, SUCCESS) \ + do { \ + unsigned char *pc_ = (CONTEXT)->ra; \ + struct sigcontext *sc_; \ + long new_cfa_; \ + \ + /* movq __NR_rt_sigreturn, %rax ; syscall */ \ + if (*(unsigned char *)(pc_+0) == 0x48 \ + && *(unsigned long *)(pc_+1) == 0x050f0000000fc0c7) \ + { \ + struct ucontext *uc_ = (CONTEXT)->cfa; \ + sc_ = (struct sigcontext *) &uc_->uc_mcontext; \ + } \ + else \ + break; \ + \ + new_cfa_ = sc_->rsp; \ + (FS)->cfa_how = CFA_REG_OFFSET; \ + /* Register 7 is rsp */ \ + (FS)->cfa_reg = 7; \ + (FS)->cfa_offset = new_cfa_ - (long) (CONTEXT)->cfa; \ + \ + /* The SVR4 register numbering macros aren't usable in libgcc. */ \ + (FS)->regs.reg[0].how = REG_SAVED_OFFSET; \ + (FS)->regs.reg[0].loc.offset = (long)&sc_->rax - new_cfa_; \ + (FS)->regs.reg[1].how = REG_SAVED_OFFSET; \ + (FS)->regs.reg[1].loc.offset = (long)&sc_->rbx - new_cfa_; \ + (FS)->regs.reg[2].how = REG_SAVED_OFFSET; \ + (FS)->regs.reg[2].loc.offset = (long)&sc_->rcx - new_cfa_; \ + (FS)->regs.reg[3].how = REG_SAVED_OFFSET; \ + (FS)->regs.reg[3].loc.offset = (long)&sc_->rdx - new_cfa_; \ + (FS)->regs.reg[4].how = REG_SAVED_OFFSET; \ + (FS)->regs.reg[4].loc.offset = (long)&sc_->rbp - new_cfa_; \ + (FS)->regs.reg[5].how = REG_SAVED_OFFSET; \ + (FS)->regs.reg[5].loc.offset = (long)&sc_->rsi - new_cfa_; \ + (FS)->regs.reg[6].how = REG_SAVED_OFFSET; \ + (FS)->regs.reg[6].loc.offset = (long)&sc_->rdi - new_cfa_; \ + (FS)->regs.reg[8].how = REG_SAVED_OFFSET; \ + (FS)->regs.reg[8].loc.offset = (long)&sc_->r8 - new_cfa_; \ + (FS)->regs.reg[9].how = REG_SAVED_OFFSET; \ + (FS)->regs.reg[9].loc.offset = (long)&sc_->r9 - new_cfa_; \ + (FS)->regs.reg[10].how = REG_SAVED_OFFSET; \ + (FS)->regs.reg[10].loc.offset = (long)&sc_->r10 - new_cfa_; \ + (FS)->regs.reg[11].how = REG_SAVED_OFFSET; \ + (FS)->regs.reg[11].loc.offset = (long)&sc_->r11 - new_cfa_; \ + (FS)->regs.reg[12].how = REG_SAVED_OFFSET; \ + (FS)->regs.reg[12].loc.offset = (long)&sc_->r12 - new_cfa_; \ + (FS)->regs.reg[13].how = REG_SAVED_OFFSET; \ + (FS)->regs.reg[13].loc.offset = (long)&sc_->r13 - new_cfa_; \ + (FS)->regs.reg[14].how = REG_SAVED_OFFSET; \ + (FS)->regs.reg[14].loc.offset = (long)&sc_->r14 - new_cfa_; \ + (FS)->regs.reg[15].how = REG_SAVED_OFFSET; \ + (FS)->regs.reg[15].loc.offset = (long)&sc_->r15 - new_cfa_; \ + (FS)->retaddr_column = 16; \ + goto SUCCESS; \ + } while (0) diff -Nrc3pad gcc-3.0.4/gcc/config/i386/lynx.h gcc-3.1/gcc/config/i386/lynx.h *** gcc-3.0.4/gcc/config/i386/lynx.h Thu Nov 2 23:29:10 2000 --- gcc-3.1/gcc/config/i386/lynx.h Wed Oct 31 14:32:29 2001 *************** Boston, MA 02111-1307, USA. */ *** 24,32 **** #undef CPP_PREDEFINES #define CPP_PREDEFINES "-DI386 -DLynx -DIBITS32 -Asystem=unix -Asystem=lynx" ! /* The prefix to add to user-visible assembler symbols. */ ! /* Override the svr3 convention of adding a leading underscore. */ #undef USER_LABEL_PREFIX #define USER_LABEL_PREFIX "" --- 24,32 ---- #undef CPP_PREDEFINES #define CPP_PREDEFINES "-DI386 -DLynx -DIBITS32 -Asystem=unix -Asystem=lynx" ! /* The prefix to add to user-visible assembler symbols. */ ! /* Override the svr3 convention of adding a leading underscore. */ #undef USER_LABEL_PREFIX #define USER_LABEL_PREFIX "" diff -Nrc3pad gcc-3.0.4/gcc/config/i386/mach.h gcc-3.1/gcc/config/i386/mach.h *** gcc-3.0.4/gcc/config/i386/mach.h Thu Nov 2 23:29:10 2000 --- gcc-3.1/gcc/config/i386/mach.h Thu May 17 03:15:56 2001 *************** *** 6,14 **** #include "i386/gstabs.h" - /* Get perform_* macros to build libgcc.a. */ - #include "i386/perform.h" - #undef CPP_PREDEFINES #define CPP_PREDEFINES "-Dunix -DMACH -Asystem=unix -Asystem=mach" --- 6,11 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/mingw32.h gcc-3.1/gcc/config/i386/mingw32.h *** gcc-3.0.4/gcc/config/i386/mingw32.h Wed Oct 10 20:38:56 2001 --- gcc-3.1/gcc/config/i386/mingw32.h Wed Oct 31 14:32:29 2001 *************** *** 1,8 **** /* Operating system specific defines to be used when targeting GCC for ! hosting on Windows32, using GNU tools and the Windows32 API Library, ! as distinct from winnt.h, which is used to build GCC for use with a ! windows style library and tool set and uses the Microsoft tools. ! Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,6 ---- /* Operating system specific defines to be used when targeting GCC for ! hosting on Windows32, using GNU tools and the Windows32 API Library. ! Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of GNU CC. *************** GNU General Public License for more deta *** 19,40 **** 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. */ /* Most of this is the same as for cygwin, except for changing some specs. */ /* Mingw GCC, unlike Cygwin's, must be relocatable. This macro must ! be defined before any other files are included. */ #ifndef WIN32_NO_ABSOLUTE_INST_DIRS #define WIN32_NO_ABSOLUTE_INST_DIRS 1 #endif #include "i386/cygwin.h" /* Please keep changes to CPP_PREDEFINES in sync with i386/crtdll. The only difference between the two should be __MSVCRT__ needed to ! distinguish MSVC from CRTDLL runtime in mingw headers. */ #undef CPP_PREDEFINES #define CPP_PREDEFINES "-D_WIN32 -D__WIN32 -D__WIN32__ -DWIN32 \ -D__MINGW32__ -D__MSVCRT__ -DWINNT -D_X86_=1 \ --- 17,40 ---- 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. */ /* Most of this is the same as for cygwin, except for changing some specs. */ /* Mingw GCC, unlike Cygwin's, must be relocatable. This macro must ! be defined before any other files are included. */ #ifndef WIN32_NO_ABSOLUTE_INST_DIRS #define WIN32_NO_ABSOLUTE_INST_DIRS 1 #endif #include "i386/cygwin.h" + #define TARGET_EXECUTABLE_SUFFIX ".exe" + /* Please keep changes to CPP_PREDEFINES in sync with i386/crtdll. The only difference between the two should be __MSVCRT__ needed to ! distinguish MSVC from CRTDLL runtime in mingw headers. */ #undef CPP_PREDEFINES #define CPP_PREDEFINES "-D_WIN32 -D__WIN32 -D__WIN32__ -DWIN32 \ -D__MINGW32__ -D__MSVCRT__ -DWINNT -D_X86_=1 \ *************** Boston, MA 02111-1307, USA. */ *** 80,86 **** #define STARTFILE_SPEC "%{shared|mdll:dllcrt2%O%s} \ %{!shared:%{!mdll:crt2%O%s}} %{pg:gcrt2%O%s}" ! /* MS runtime does not need a separate math library. */ #undef MATH_LIBRARY #define MATH_LIBRARY "" --- 80,86 ---- #define STARTFILE_SPEC "%{shared|mdll:dllcrt2%O%s} \ %{!shared:%{!mdll:crt2%O%s}} %{pg:gcrt2%O%s}" ! /* MS runtime does not need a separate math library. */ #undef MATH_LIBRARY #define MATH_LIBRARY "" diff -Nrc3pad gcc-3.0.4/gcc/config/i386/mmintrin.h gcc-3.1/gcc/config/i386/mmintrin.h *** gcc-3.0.4/gcc/config/i386/mmintrin.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/i386/mmintrin.h Sat Jan 12 07:38:49 2002 *************** *** 0 **** --- 1,542 ---- + /* Copyright (C) 2002 Free Software Foundation, Inc. + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GNU CC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU CC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + /* As a special exception, if you include this header file into source + files compiled by GCC, this header file does not by itself cause + the resulting executable to be covered by the GNU General Public + License. This exception does not however invalidate any other + reasons why the executable file might be covered by the GNU General + Public License. */ + + /* Implemented from the specification included in the Intel C++ Compiler + User Guide and Reference, version 5.0. */ + + #ifndef _MMINTRIN_H_INCLUDED + #define _MMINTRIN_H_INCLUDED + + /* The data type intended for user use. */ + typedef unsigned long long __m64; + + /* Internal data types for implementing the intrinsics. */ + typedef int __v2si __attribute__ ((__mode__ (__V2SI__))); + typedef int __v4hi __attribute__ ((__mode__ (__V4HI__))); + typedef int __v8qi __attribute__ ((__mode__ (__V8QI__))); + + /* Empty the multimedia state. */ + static __inline void + _mm_empty (void) + { + __builtin_ia32_emms (); + } + + /* Convert I to a __m64 object. The integer is zero-extended to 64-bits. */ + static __inline __m64 + _mm_cvtsi32_si64 (int __i) + { + return (unsigned int) __i; + } + + /* Convert the lower 32 bits of the __m64 object into an integer. */ + static __inline int + _mm_cvtsi64_si32 (__m64 __i) + { + return __i; + } + + /* Pack the four 16-bit values from M1 into the lower four 8-bit values of + the result, and the four 16-bit values from M2 into the upper four 8-bit + values of the result, all with signed saturation. */ + static __inline __m64 + _mm_packs_pi16 (__m64 __m1, __m64 __m2) + { + return (__m64) __builtin_ia32_packsswb ((__v4hi)__m1, (__v4hi)__m2); + } + + /* Pack the two 32-bit values from M1 in to the lower two 16-bit values of + the result, and the two 32-bit values from M2 into the upper two 16-bit + values of the result, all with signed saturation. */ + static __inline __m64 + _mm_packs_pi32 (__m64 __m1, __m64 __m2) + { + return (__m64) __builtin_ia32_packssdw ((__v2si)__m1, (__v2si)__m2); + } + + /* Pack the four 16-bit values from M1 into the lower four 8-bit values of + the result, and the four 16-bit values from M2 into the upper four 8-bit + values of the result, all with unsigned saturation. */ + static __inline __m64 + _mm_packs_pu16 (__m64 __m1, __m64 __m2) + { + return (__m64) __builtin_ia32_packuswb ((__v4hi)__m1, (__v4hi)__m2); + } + + /* Interleave the four 8-bit values from the high half of M1 with the four + 8-bit values from the high half of M2. */ + static __inline __m64 + _mm_unpackhi_pi8 (__m64 __m1, __m64 __m2) + { + return (__m64) __builtin_ia32_punpckhbw ((__v8qi)__m1, (__v8qi)__m2); + } + + /* Interleave the two 16-bit values from the high half of M1 with the two + 16-bit values from the high half of M2. */ + static __inline __m64 + _mm_unpackhi_pi16 (__m64 __m1, __m64 __m2) + { + return (__m64) __builtin_ia32_punpckhwd ((__v4hi)__m1, (__v4hi)__m2); + } + + /* Interleave the 32-bit value from the high half of M1 with the 32-bit + value from the high half of M2. */ + static __inline __m64 + _mm_unpackhi_pi32 (__m64 __m1, __m64 __m2) + { + return (__m64) __builtin_ia32_punpckhdq ((__v2si)__m1, (__v2si)__m2); + } + + /* Interleave the four 8-bit values from the low half of M1 with the four + 8-bit values from the low half of M2. */ + static __inline __m64 + _mm_unpacklo_pi8 (__m64 __m1, __m64 __m2) + { + return (__m64) __builtin_ia32_punpcklbw ((__v8qi)__m1, (__v8qi)__m2); + } + + /* Interleave the two 16-bit values from the low half of M1 with the two + 16-bit values from the low half of M2. */ + static __inline __m64 + _mm_unpacklo_pi16 (__m64 __m1, __m64 __m2) + { + return (__m64) __builtin_ia32_punpcklwd ((__v4hi)__m1, (__v4hi)__m2); + } + + /* Interleave the 32-bit value from the low half of M1 with the 32-bit + value from the low half of M2. */ + static __inline __m64 + _mm_unpacklo_pi32 (__m64 __m1, __m64 __m2) + { + return (__m64) __builtin_ia32_punpckldq ((__v2si)__m1, (__v2si)__m2); + } + + /* Add the 8-bit values in M1 to the 8-bit values in M2. */ + static __inline __m64 + _mm_add_pi8 (__m64 __m1, __m64 __m2) + { + return (__m64) __builtin_ia32_paddb ((__v8qi)__m1, (__v8qi)__m2); + } + + /* Add the 16-bit values in M1 to the 16-bit values in M2. */ + static __inline __m64 + _mm_add_pi16 (__m64 __m1, __m64 __m2) + { + return (__m64) __builtin_ia32_paddw ((__v4hi)__m1, (__v4hi)__m2); + } + + /* Add the 32-bit values in M1 to the 32-bit values in M2. */ + static __inline __m64 + _mm_add_pi32 (__m64 __m1, __m64 __m2) + { + return (__m64) __builtin_ia32_paddd ((__v2si)__m1, (__v2si)__m2); + } + + /* Add the 8-bit values in M1 to the 8-bit values in M2 using signed + saturated arithmetic. */ + static __inline __m64 + _mm_adds_pi8 (__m64 __m1, __m64 __m2) + { + return (__m64) __builtin_ia32_paddsb ((__v8qi)__m1, (__v8qi)__m2); + } + + /* Add the 16-bit values in M1 to the 16-bit values in M2 using signed + saturated arithmetic. */ + static __inline __m64 + _mm_adds_pi16 (__m64 __m1, __m64 __m2) + { + return (__m64) __builtin_ia32_paddsw ((__v4hi)__m1, (__v4hi)__m2); + } + + /* Add the 8-bit values in M1 to the 8-bit values in M2 using unsigned + saturated arithmetic. */ + static __inline __m64 + _mm_adds_pu8 (__m64 __m1, __m64 __m2) + { + return (__m64) __builtin_ia32_paddusb ((__v8qi)__m1, (__v8qi)__m2); + } + + /* Add the 16-bit values in M1 to the 16-bit values in M2 using unsigned + saturated arithmetic. */ + static __inline __m64 + _mm_adds_pu16 (__m64 __m1, __m64 __m2) + { + return (__m64) __builtin_ia32_paddusw ((__v4hi)__m1, (__v4hi)__m2); + } + + /* Subtract the 8-bit values in M2 from the 8-bit values in M1. */ + static __inline __m64 + _mm_sub_pi8 (__m64 __m1, __m64 __m2) + { + return (__m64) __builtin_ia32_psubb ((__v8qi)__m1, (__v8qi)__m2); + } + + /* Subtract the 16-bit values in M2 from the 16-bit values in M1. */ + static __inline __m64 + _mm_sub_pi16 (__m64 __m1, __m64 __m2) + { + return (__m64) __builtin_ia32_psubw ((__v4hi)__m1, (__v4hi)__m2); + } + + /* Subtract the 32-bit values in M2 from the 32-bit values in M1. */ + static __inline __m64 + _mm_sub_pi32 (__m64 __m1, __m64 __m2) + { + return (__m64) __builtin_ia32_psubd ((__v2si)__m1, (__v2si)__m2); + } + + /* Subtract the 8-bit values in M2 from the 8-bit values in M1 using signed + saturating arithmetic. */ + static __inline __m64 + _mm_subs_pi8 (__m64 __m1, __m64 __m2) + { + return (__m64) __builtin_ia32_psubsb ((__v8qi)__m1, (__v8qi)__m2); + } + + /* Subtract the 16-bit values in M2 from the 16-bit values in M1 using + signed saturating arithmetic. */ + static __inline __m64 + _mm_subs_pi16 (__m64 __m1, __m64 __m2) + { + return (__m64) __builtin_ia32_psubsw ((__v4hi)__m1, (__v4hi)__m2); + } + + /* Subtract the 8-bit values in M2 from the 8-bit values in M1 using + unsigned saturating arithmetic. */ + static __inline __m64 + _mm_subs_pu8 (__m64 __m1, __m64 __m2) + { + return (__m64) __builtin_ia32_psubusb ((__v8qi)__m1, (__v8qi)__m2); + } + + /* Subtract the 16-bit values in M2 from the 16-bit values in M1 using + unsigned saturating arithmetic. */ + static __inline __m64 + _mm_subs_pu16 (__m64 __m1, __m64 __m2) + { + return (__m64) __builtin_ia32_psubusw ((__v4hi)__m1, (__v4hi)__m2); + } + + /* Multiply four 16-bit values in M1 by four 16-bit values in M2 producing + four 32-bit intermediate results, which are then summed by pairs to + produce two 32-bit results. */ + static __inline __m64 + _mm_madd_pi16 (__m64 __m1, __m64 __m2) + { + return (__m64) __builtin_ia32_pmaddwd ((__v4hi)__m1, (__v4hi)__m2); + } + + /* Multiply four signed 16-bit values in M1 by four signed 16-bit values in + M2 and produce the high 16 bits of the 32-bit results. */ + static __inline __m64 + _mm_mulhi_pi16 (__m64 __m1, __m64 __m2) + { + return (__m64) __builtin_ia32_pmulhw ((__v4hi)__m1, (__v4hi)__m2); + } + + /* Multiply four 16-bit values in M1 by four 16-bit values in M2 and produce + the low 16 bits of the results. */ + static __inline __m64 + _mm_mullo_pi16 (__m64 __m1, __m64 __m2) + { + return (__m64) __builtin_ia32_pmullw ((__v4hi)__m1, (__v4hi)__m2); + } + + /* Shift four 16-bit values in M left by COUNT. */ + static __inline __m64 + _mm_sll_pi16 (__m64 __m, __m64 __count) + { + return (__m64) __builtin_ia32_psllw ((__v4hi)__m, __count); + } + + static __inline __m64 + _mm_slli_pi16 (__m64 __m, int __count) + { + return (__m64) __builtin_ia32_psllw ((__v4hi)__m, __count); + } + + /* Shift two 32-bit values in M left by COUNT. */ + static __inline __m64 + _mm_sll_pi32 (__m64 __m, __m64 __count) + { + return (__m64) __builtin_ia32_pslld ((__v2si)__m, __count); + } + + static __inline __m64 + _mm_slli_pi32 (__m64 __m, int __count) + { + return (__m64) __builtin_ia32_pslld ((__v2si)__m, __count); + } + + /* Shift the 64-bit value in M left by COUNT. */ + static __inline __m64 + _mm_sll_pi64 (__m64 __m, __m64 __count) + { + return (__m64) __builtin_ia32_psllq (__m, __count); + } + + static __inline __m64 + _mm_slli_pi64 (__m64 __m, int __count) + { + return (__m64) __builtin_ia32_psllq (__m, __count); + } + + /* Shift four 16-bit values in M right by COUNT; shift in the sign bit. */ + static __inline __m64 + _mm_sra_pi16 (__m64 __m, __m64 __count) + { + return (__m64) __builtin_ia32_psraw ((__v4hi)__m, __count); + } + + static __inline __m64 + _mm_srai_pi16 (__m64 __m, int __count) + { + return (__m64) __builtin_ia32_psraw ((__v4hi)__m, __count); + } + + /* Shift two 32-bit values in M right by COUNT; shift in the sign bit. */ + static __inline __m64 + _mm_sra_pi32 (__m64 __m, __m64 __count) + { + return (__m64) __builtin_ia32_psrad ((__v2si)__m, __count); + } + + static __inline __m64 + _mm_srai_pi32 (__m64 __m, int __count) + { + return (__m64) __builtin_ia32_psrad ((__v2si)__m, __count); + } + + /* Shift four 16-bit values in M right by COUNT; shift in zeros. */ + static __inline __m64 + _mm_srl_pi16 (__m64 __m, __m64 __count) + { + return (__m64) __builtin_ia32_psrlw ((__v4hi)__m, __count); + } + + static __inline __m64 + _mm_srli_pi16 (__m64 __m, int __count) + { + return (__m64) __builtin_ia32_psrlw ((__v4hi)__m, __count); + } + + /* Shift two 32-bit values in M right by COUNT; shift in zeros. */ + static __inline __m64 + _mm_srl_pi32 (__m64 __m, __m64 __count) + { + return (__m64) __builtin_ia32_psrld ((__v2si)__m, __count); + } + + static __inline __m64 + _mm_srli_pi32 (__m64 __m, int __count) + { + return (__m64) __builtin_ia32_psrld ((__v2si)__m, __count); + } + + /* Shift the 64-bit value in M left by COUNT; shift in zeros. */ + static __inline __m64 + _mm_srl_pi64 (__m64 __m, __m64 __count) + { + return (__m64) __builtin_ia32_psrlq (__m, __count); + } + + static __inline __m64 + _mm_srli_pi64 (__m64 __m, int __count) + { + return (__m64) __builtin_ia32_psrlq (__m, __count); + } + + /* Bit-wise AND the 64-bit values in M1 and M2. */ + static __inline __m64 + _mm_and_si64 (__m64 __m1, __m64 __m2) + { + return __builtin_ia32_pand (__m1, __m2); + } + + /* Bit-wise complement the 64-bit value in M1 and bit-wise AND it with the + 64-bit value in M2. */ + static __inline __m64 + _mm_andnot_si64 (__m64 __m1, __m64 __m2) + { + return __builtin_ia32_pandn (__m1, __m2); + } + + /* Bit-wise inclusive OR the 64-bit values in M1 and M2. */ + static __inline __m64 + _mm_or_si64 (__m64 __m1, __m64 __m2) + { + return __builtin_ia32_por (__m1, __m2); + } + + /* Bit-wise exclusive OR the 64-bit values in M1 and M2. */ + static __inline __m64 + _mm_xor_si64 (__m64 __m1, __m64 __m2) + { + return __builtin_ia32_pxor (__m1, __m2); + } + + /* Compare eight 8-bit values. The result of the comparison is 0xFF if the + test is true and zero if false. */ + static __inline __m64 + _mm_cmpeq_pi8 (__m64 __m1, __m64 __m2) + { + return (__m64) __builtin_ia32_pcmpeqb ((__v8qi)__m1, (__v8qi)__m2); + } + + static __inline __m64 + _mm_cmpgt_pi8 (__m64 __m1, __m64 __m2) + { + return (__m64) __builtin_ia32_pcmpgtb ((__v8qi)__m1, (__v8qi)__m2); + } + + /* Compare four 16-bit values. The result of the comparison is 0xFFFF if + the test is true and zero if false. */ + static __inline __m64 + _mm_cmpeq_pi16 (__m64 __m1, __m64 __m2) + { + return (__m64) __builtin_ia32_pcmpeqw ((__v4hi)__m1, (__v4hi)__m2); + } + + static __inline __m64 + _mm_cmpgt_pi16 (__m64 __m1, __m64 __m2) + { + return (__m64) __builtin_ia32_pcmpgtw ((__v4hi)__m1, (__v4hi)__m2); + } + + /* Compare two 32-bit values. The result of the comparison is 0xFFFFFFFF if + the test is true and zero if false. */ + static __inline __m64 + _mm_cmpeq_pi32 (__m64 __m1, __m64 __m2) + { + return (__m64) __builtin_ia32_pcmpeqd ((__v2si)__m1, (__v2si)__m2); + } + + static __inline __m64 + _mm_cmpgt_pi32 (__m64 __m1, __m64 __m2) + { + return (__m64) __builtin_ia32_pcmpgtd ((__v2si)__m1, (__v2si)__m2); + } + + /* Creates a 64-bit zero. */ + static __inline __m64 + _mm_setzero_si64 (void) + { + return __builtin_ia32_mmx_zero (); + } + + /* Creates a vector of two 32-bit values; I0 is least significant. */ + static __inline __m64 + _mm_set_pi32 (int __i1, int __i0) + { + union { + __m64 __q; + struct { + unsigned int __i0; + unsigned int __i1; + } __s; + } __u; + + __u.__s.__i0 = __i0; + __u.__s.__i1 = __i1; + + return __u.__q; + } + + /* Creates a vector of four 16-bit values; W0 is least significant. */ + static __inline __m64 + _mm_set_pi16 (short __w3, short __w2, short __w1, short __w0) + { + unsigned int __i1 = (unsigned short)__w3 << 16 | (unsigned short)__w2; + unsigned int __i0 = (unsigned short)__w1 << 16 | (unsigned short)__w0; + return _mm_set_pi32 (__i1, __i0); + + } + + /* Creates a vector of eight 8-bit values; B0 is least significant. */ + static __inline __m64 + _mm_set_pi8 (char __b7, char __b6, char __b5, char __b4, + char __b3, char __b2, char __b1, char __b0) + { + unsigned int __i1, __i0; + + __i1 = (unsigned char)__b7; + __i1 = __i1 << 8 | (unsigned char)__b6; + __i1 = __i1 << 8 | (unsigned char)__b5; + __i1 = __i1 << 8 | (unsigned char)__b4; + + __i0 = (unsigned char)__b3; + __i0 = __i0 << 8 | (unsigned char)__b2; + __i0 = __i0 << 8 | (unsigned char)__b1; + __i0 = __i0 << 8 | (unsigned char)__b0; + + return _mm_set_pi32 (__i1, __i0); + } + + /* Similar, but with the arguments in reverse order. */ + static __inline __m64 + _mm_setr_pi32 (int __i0, int __i1) + { + return _mm_set_pi32 (__i1, __i0); + } + + static __inline __m64 + _mm_setr_pi16 (short __w0, short __w1, short __w2, short __w3) + { + return _mm_set_pi16 (__w3, __w2, __w1, __w0); + } + + static __inline __m64 + _mm_setr_pi8 (char __b0, char __b1, char __b2, char __b3, + char __b4, char __b5, char __b6, char __b7) + { + return _mm_set_pi8 (__b7, __b6, __b5, __b4, __b3, __b2, __b1, __b0); + } + + /* Creates a vector of two 32-bit values, both elements containing I. */ + static __inline __m64 + _mm_set1_pi32 (int __i) + { + return _mm_set_pi32 (__i, __i); + } + + /* Creates a vector of four 16-bit values, all elements containing W. */ + static __inline __m64 + _mm_set1_pi16 (short __w) + { + unsigned int __i = (unsigned short)__w << 16 | (unsigned short)__w; + return _mm_set1_pi32 (__i); + } + + /* Creates a vector of four 16-bit values, all elements containing B. */ + static __inline __m64 + _mm_set1_pi8 (char __b) + { + unsigned int __w = (unsigned char)__b << 8 | (unsigned char)__b; + unsigned int __i = __w << 16 | __w; + return _mm_set1_pi32 (__i); + } + + #endif /* _MMINTRIN_H_INCLUDED */ diff -Nrc3pad gcc-3.0.4/gcc/config/i386/netbsd-elf.h gcc-3.1/gcc/config/i386/netbsd-elf.h *** gcc-3.0.4/gcc/config/i386/netbsd-elf.h Mon Jan 21 09:14:14 2002 --- gcc-3.1/gcc/config/i386/netbsd-elf.h Tue Feb 5 19:01:49 2002 *************** *** 1,6 **** /* Definitions of target machine for GNU compiler, for i386/ELF NetBSD systems. ! Copyright (C) 2001 Free Software Foundation, Inc. Contributed by matthew green This file is part of GNU CC. --- 1,6 ---- /* Definitions of target machine for GNU compiler, for i386/ELF NetBSD systems. ! Copyright (C) 2001, 2002 Free Software Foundation, Inc. Contributed by matthew green This file is part of GNU CC. *************** along with GNU CC; see the file COPYING. *** 20,106 **** the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ! /* Provide a LIB_SPEC appropriate for NetBSD. Just select the appropriate ! libc, depending on whether we're doing profiling; if `-posix' is specified, ! link against the appropriate libposix first. */ ! ! #undef LIB_SPEC ! #define LIB_SPEC \ ! "%{posix:%{!p:%{!pg:-lposix}}%{p:-lposix_p}%{pg:-lposix_p}} \ ! %{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}" ! ! /* Provide a STARTFILE_SPEC appropriate for NetBSD ELF targets. Here we ! provide support for the special GCC option -static. On ELF targets, ! we also add the crtbegin.o file which provides part of the support ! for getting C++ file-scope static objects constructed before entering ! `main'. We use the NetBSD crt0. */ ! ! #undef STARTFILE_SPEC ! #define STARTFILE_SPEC \ ! "%{!shared: \ ! %{pg:gcrt0%O%s} \ ! %{!pg: \ ! %{p:gcrt0%O%s} \ ! %{!p:crt0%O%s}}} \ ! %{!shared:crtbegin%O%s} %{shared:crtbeginS%O%s}" ! ! /* Provide an ENDFILE_SPEC approrpiate for NetBSD ELF targets. Here we ! add crtend.o, which provides part of the support for getting C++ ! file-scope static objects deconstructed after exiting `main'. */ ! ! #undef ENDFILE_SPEC ! #define ENDFILE_SPEC \ ! "%{!shared:crtend%O%s} %{shared:crtendS%O%s}" ! ! /* Provide a LINK_SPEC appropriate for a NetBSD/i386 ELF target. Only ! the linker emulation is i386-specific. The rest are ! common to all ELF targets, except for the name of the start function. */ #undef LINK_SPEC ! #define LINK_SPEC \ ! "-m elf_i386 \ ! %{assert*} %{R*} \ ! %{shared:-shared} \ ! %{!shared: \ ! -dp \ ! %{!nostdlib:%{!r*:%{!e*:-e __start}}} \ ! %{!static: \ ! -dy %{rdynamic:-export-dynamic} \ ! %{!dynamic-linker:-dynamic-linker /usr/libexec/ld.elf_so}} \ %{static:-static}}" ! /* Provide a CPP_SPEC appropriate for NetBSD. Current we just deal with ! the GCC option `-posix'. */ ! ! #undef CPP_SPEC ! #define CPP_SPEC "%{posix:-D_POSIX_SOURCE}" ! ! /* Provide an ASM_SPEC appropriate for NetBSD. Currently we only deal ! with the options for generating PIC code. */ ! ! #undef ASM_SPEC ! #define ASM_SPEC " %| %{fpic:-k} %{fPIC:-k -K}" ! ! /* Provide a LIB_SPEC appropriate for NetBSD. Just select the appropriate ! libc, depending on whether we're doing profiling. */ ! ! #undef LIB_SPEC ! #define LIB_SPEC "%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}" ! ! /* This defines which switch letters take arguments. */ ! #undef SWITCH_TAKES_ARG ! #define SWITCH_TAKES_ARG(CHAR) \ ! (DEFAULT_SWITCH_TAKES_ARG(CHAR) \ ! || (CHAR) == 'R') ! ! /* Implicit library calls should use memcpy, not bcopy, etc. */ ! ! #define TARGET_MEM_FUNCTIONS ! ! /* Names to predefine in the preprocessor for this target machine. */ ! #define CPP_PREDEFINES "\ ! -Di386 -D__NetBSD__ -D__ELF__ -Asystem(unix) -Asystem(NetBSD)" /* Make gcc agree with */ --- 20,47 ---- the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ! /* Provide a LINK_SPEC appropriate for a NetBSD/i386 ELF target. ! This is a copy of LINK_SPEC from tweaked for ! the i386 target. */ #undef LINK_SPEC ! #define LINK_SPEC \ ! "%{assert*} %{R*} \ ! %{shared:-shared} \ ! %{!shared: \ ! -dc -dp \ ! %{!nostdlib: \ ! %{!r*: \ ! %{!e*:-e __start}}} \ ! %{!static: \ ! %{rdynamic:-export-dynamic} \ ! %{!dynamic-linker:-dynamic-linker /usr/libexec/ld.elf_so}} \ %{static:-static}}" ! /* Names to predefine in the preprocessor for this target machine. */ ! #define CPP_PREDEFINES \ ! "-D__NetBSD__ -D__ELF__ -Asystem=unix -Asystem=NetBSD" /* Make gcc agree with */ *************** Boston, MA 02111-1307, USA. */ *** 110,131 **** #undef PTRDIFF_TYPE #define PTRDIFF_TYPE "int" - #undef WCHAR_TYPE - #define WCHAR_TYPE "int" - - #undef WCHAR_UNSIGNED - #define WCHAR_UNSIGNED 0 - - #undef WCHAR_TYPE_SIZE - #define WCHAR_TYPE_SIZE 32 - - #undef WINT_TYPE - #define WINT_TYPE "int" - - /* Output assembler code to FILE to increment profiler label # LABELNO - for profiling a function entry. Under NetBSD/i386, the assembler does - nothing special with -pg. */ - #undef ASM_APP_ON #define ASM_APP_ON "#APP\n" --- 51,56 ---- *************** Boston, MA 02111-1307, USA. */ *** 133,150 **** #define ASM_APP_OFF "#NO_APP\n" #undef ASM_FINAL_SPEC ! #define ASM_FINAL_SPEC "%{pipe:-}" #undef DBX_REGISTER_NUMBER #define DBX_REGISTER_NUMBER(n) svr4_dbx_register_map[n] ! #undef NO_PROFILE_COUNTERS #define NO_PROFILE_COUNTERS ! #undef HAS_INIT_SECTION ! #undef DEFAULT_VTABLE_THUNKS ! #define DEFAULT_VTABLE_THUNKS 1 /* This is how we tell the assembler that two symbols have the same value. */ --- 58,87 ---- #define ASM_APP_OFF "#NO_APP\n" #undef ASM_FINAL_SPEC ! ! #undef ASM_COMMENT_START ! #define ASM_COMMENT_START "#" #undef DBX_REGISTER_NUMBER #define DBX_REGISTER_NUMBER(n) svr4_dbx_register_map[n] ! ! /* Output assembler code to FILE to call the profiler. */ ! ! #undef NO_PROFILE_COUNTERS #define NO_PROFILE_COUNTERS ! #undef FUNCTION_PROFILER ! #define FUNCTION_PROFILER(FILE, LABELNO) \ ! { \ ! if (flag_pic) \ ! fprintf (FILE, "\tcall __mcount@PLT\n"); \ ! else \ ! fprintf (FILE, "\tcall __mcount\n"); \ ! } ! ! #undef HAS_INIT_SECTION /* This is how we tell the assembler that two symbols have the same value. */ *************** Boston, MA 02111-1307, USA. */ *** 161,186 **** This is used to align code labels according to Intel recommendations. */ #ifdef HAVE_GAS_MAX_SKIP_P2ALIGN ! #define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE, LOG, MAX_SKIP) \ ! 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)); \ } #endif ! /* This is how to output an element of a case-vector that is relative. ! This is only used for PIC code. */ ! #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) ! ! /* Indicate that jump tables go in the text section. This is ! necessary when compiling PIC code. */ ! #define JUMP_TABLES_IN_TEXT_SECTION (flag_pic) ! ! /* ! * We always use gas here, so we don't worry about ECOFF assembler problems. ! */ #undef TARGET_GAS #define TARGET_GAS 1 --- 98,112 ---- This is used to align code labels according to Intel recommendations. */ #ifdef HAVE_GAS_MAX_SKIP_P2ALIGN ! #define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE, LOG, MAX_SKIP) \ ! 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)); \ } #endif ! /* We always use gas here, so we don't worry about ECOFF assembler ! problems. */ #undef TARGET_GAS #define TARGET_GAS 1 *************** Boston, MA 02111-1307, USA. */ *** 189,192 **** #define DEFAULT_PCC_STRUCT_RETURN 1 #undef TARGET_VERSION ! #define TARGET_VERSION fprintf (stderr, " (NetBSD/i386 ELF target)"); --- 115,118 ---- #define DEFAULT_PCC_STRUCT_RETURN 1 #undef TARGET_VERSION ! #define TARGET_VERSION fprintf (stderr, " (NetBSD/i386 ELF)"); diff -Nrc3pad gcc-3.0.4/gcc/config/i386/netbsd.h gcc-3.1/gcc/config/i386/netbsd.h *** gcc-3.0.4/gcc/config/i386/netbsd.h Sun May 20 19:49:17 2001 --- gcc-3.1/gcc/config/i386/netbsd.h Tue Feb 5 19:01:50 2002 *************** *** 3,17 **** #include - /* Get perform_* macros to build libgcc.a. */ - #include - /* Get generic NetBSD definitions. */ #include /* This goes away when the math-emulator is fixed */ ! #undef TARGET_DEFAULT ! #define TARGET_DEFAULT \ (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS | MASK_NO_FANCY_MATH_387) #undef CPP_PREDEFINES --- 3,15 ---- #include /* Get generic NetBSD definitions. */ #include + #include /* This goes away when the math-emulator is fixed */ ! #undef TARGET_SUBTARGET_DEFAULT ! #define TARGET_SUBTARGET_DEFAULT \ (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS | MASK_NO_FANCY_MATH_387) #undef CPP_PREDEFINES *************** *** 24,59 **** #undef PTRDIFF_TYPE #define PTRDIFF_TYPE "int" - #undef WCHAR_TYPE - #define WCHAR_TYPE "int" - - #undef WCHAR_UNSIGNED - #define WCHAR_UNSIGNED 0 - - #undef WCHAR_TYPE_SIZE - #define WCHAR_TYPE_SIZE 32 - #undef ASM_APP_ON #define ASM_APP_ON "#APP\n" #undef ASM_APP_OFF #define ASM_APP_OFF "#NO_APP\n" - - /* The following macros are stolen from i386v4.h */ - /* These have to be defined to get PIC code correct */ - - /* This is 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) - - /* Indicate that jump tables go in the text section. This is - necessary when compiling PIC code. */ - - #define JUMP_TABLES_IN_TEXT_SECTION 1 /* Don't default to pcc-struct-return, because gcc is the only compiler, and we want to retain compatibility with older gcc versions. */ --- 22,32 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/netbsd64.h gcc-3.1/gcc/config/i386/netbsd64.h *** gcc-3.0.4/gcc/config/i386/netbsd64.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/i386/netbsd64.h Tue Jan 22 19:48:27 2002 *************** *** 0 **** --- 1,66 ---- + /* Definitions of target machine for GNU compiler, + for x86-64/ELF NetBSD systems. + Copyright (C) 2002 Free Software Foundation, Inc. + Contributed by Wasabi Systems, 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. */ + + + /* Provide a LINK_SPEC appropriate for a NetBSD/x86-64 ELF target. + This is a copy of LINK_SPEC from tweaked for + the x86-64 target. */ + + #undef LINK_SPEC + #define LINK_SPEC \ + "%{!m32:-m elf_x86_64} \ + %{m32:-m elf_i386} \ + %{assert*} %{R*} \ + %{shared:-shared} \ + %{!shared: \ + -dc -dp \ + %{!nostdlib: \ + %{!r*: \ + %{!e*:-e _start}}} \ + %{!static: \ + %{rdynamic:-export-dynamic} \ + %{!dynamic-linker:-dynamic-linker /usr/libexec/ld.elf_so}} \ + %{static:-static}}" + + + /* Names to predefine in the preprocessor for this target machine. */ + + #define CPP_PREDEFINES \ + "-D__NetBSD__ -D__ELF__ -Asystem=unix -Asystem=NetBSD" + + + /* Output assembler code to FILE to call the profiler. */ + + #undef FUNCTION_PROFILER + #define FUNCTION_PROFILER(FILE, LABELNO) \ + { \ + if (TARGET_64BIT && flag_pic) \ + fprintf (FILE, "\tcall *__mcount@PLT\n"); \ + else if (flag_pic) \ + fprintf (FILE, "\tcall *__mcount@PLT\n"); \ + else \ + fprintf (FILE, "\tcall __mcount\n"); \ + } + + + #undef TARGET_VERSION + #define TARGET_VERSION fprintf (stderr, " (NetBSD/x86_64 ELF)"); diff -Nrc3pad gcc-3.0.4/gcc/config/i386/netware.h gcc-3.1/gcc/config/i386/netware.h *** gcc-3.0.4/gcc/config/i386/netware.h Thu Nov 2 23:29:10 2000 --- gcc-3.1/gcc/config/i386/netware.h Fri Oct 19 22:27:26 2001 *************** GNU General Public License for more deta *** 18,27 **** 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, 675 Mass Ave, Cambridge, MA 02139, USA. */ ! ! #include "i386/sysv4.h" /* Build on the base i386 SVR4 configuration */ ! #include "netware.h" /* Then add netware-specific goo. */ #undef TARGET_VERSION #define TARGET_VERSION fprintf (stderr, " (i386 Netware 4)"); --- 18,25 ---- 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. */ #undef TARGET_VERSION #define TARGET_VERSION fprintf (stderr, " (i386 Netware 4)"); diff -Nrc3pad gcc-3.0.4/gcc/config/i386/next.h gcc-3.1/gcc/config/i386/next.h *** gcc-3.0.4/gcc/config/i386/next.h Thu Nov 2 23:29:10 2000 --- gcc-3.1/gcc/config/i386/next.h Thu Dec 20 17:36:35 2001 *************** Boston, MA 02111-1307, USA. */ *** 23,30 **** /* By default, target has a 80387, with IEEE FP. */ ! #undef TARGET_DEFAULT ! #define TARGET_DEFAULT (MASK_80387 | MASK_IEEE_FP) /* Implicit library calls should use memcpy, not bcopy, etc. */ --- 23,30 ---- /* By default, target has a 80387, with IEEE FP. */ ! #undef TARGET_SUBTARGET_DEFAULT ! #define TARGET_SUBTARGET_DEFAULT (MASK_80387 | MASK_IEEE_FP) /* Implicit library calls should use memcpy, not bcopy, etc. */ *************** Boston, MA 02111-1307, USA. */ *** 42,95 **** ((MODE) == SFmode || (MODE) == DFmode || (MODE) == XFmode \ ? FIRST_FLOAT_REG : 0) - /* 1 if N is a possible register number for a function value. */ - - #undef FUNCTION_VALUE_REGNO_P - #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0 || (N)== FIRST_FLOAT_REG) - - #ifdef REAL_VALUE_TO_TARGET_LONG_DOUBLE - #undef ASM_OUTPUT_LONG_DOUBLE - #define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \ - do { \ - long hex[3]; \ - REAL_VALUE_TO_TARGET_LONG_DOUBLE (VALUE, hex); \ - if (sizeof (int) == sizeof (long)) \ - fprintf (FILE, "\t.long 0x%x\n\t.long 0x%x\n\t.long 0x%x\n", \ - hex[0], hex[1], hex[2]); \ - else \ - fprintf (FILE, "\t.long 0x%lx\n\t.long 0x%lx\n\t.long 0x%lx\n", \ - hex[0], hex[1], hex[2]); \ - } while (0) - #endif - - #ifdef REAL_VALUE_TO_TARGET_DOUBLE - #undef ASM_OUTPUT_DOUBLE - #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - do { \ - long hex[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE (VALUE, hex); \ - if (sizeof (int) == sizeof (long)) \ - fprintf (FILE, "\t.long 0x%x\n\t.long 0x%x\n", hex[0], hex[1]); \ - else \ - fprintf (FILE, "\t.long 0x%lx\n\t.long 0x%lx\n", hex[0], hex[1]); \ - } while (0) - #endif - - /* This is how to output an assembler line defining a `float' constant. */ - - #ifdef REAL_VALUE_TO_TARGET_SINGLE - #undef ASM_OUTPUT_FLOAT - #define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - do { \ - long hex; \ - REAL_VALUE_TO_TARGET_SINGLE (VALUE, hex); \ - if (sizeof (int) == sizeof (long)) \ - fprintf (FILE, "\t.long 0x%x\n", hex); \ - else \ - fprintf (FILE, "\t.long 0x%lx\n", hex); \ - } while (0) - #endif - /* A C statement or statements which output an assembler instruction opcode to the stdio stream STREAM. The macro-operand PTR is a variable of type `char *' which points to the opcode name in its --- 42,47 ---- *************** Boston, MA 02111-1307, USA. */ *** 122,133 **** count is in %cl. Some assemblers require %cl as an argument; some don't. ! GAS requires the %cl argument, so override unx386.h. */ #undef SHIFT_DOUBLE_OMITS_COUNT #define SHIFT_DOUBLE_OMITS_COUNT 0 ! /* Print opcodes the way that GAS expects them. */ #define GAS_MNEMONICS 1 /* Names to predefine in the preprocessor for this target machine. */ --- 74,85 ---- count is in %cl. Some assemblers require %cl as an argument; some don't. ! GAS requires the %cl argument, so override unx386.h. */ #undef SHIFT_DOUBLE_OMITS_COUNT #define SHIFT_DOUBLE_OMITS_COUNT 0 ! /* Print opcodes the way that GAS expects them. */ #define GAS_MNEMONICS 1 /* Names to predefine in the preprocessor for this target machine. */ *************** Boston, MA 02111-1307, USA. */ *** 136,142 **** #define CPP_PREDEFINES "-DNeXT -Dunix -D__MACH__ -D__LITTLE_ENDIAN__ \ -D__ARCHITECTURE__=\"i386\" -Asystem=unix -Asystem=mach" ! /* This accounts for the return pc and saved fp on the i386. */ #define OBJC_FORWARDING_STACK_OFFSET 8 #define OBJC_FORWARDING_MIN_OFFSET 8 --- 88,94 ---- #define CPP_PREDEFINES "-DNeXT -Dunix -D__MACH__ -D__LITTLE_ENDIAN__ \ -D__ARCHITECTURE__=\"i386\" -Asystem=unix -Asystem=mach" ! /* This accounts for the return pc and saved fp on the i386. */ #define OBJC_FORWARDING_STACK_OFFSET 8 #define OBJC_FORWARDING_MIN_OFFSET 8 *************** Boston, MA 02111-1307, USA. */ *** 148,154 **** #undef ASM_GENERATE_INTERNAL_LABEL #define ASM_GENERATE_INTERNAL_LABEL(BUF,PREFIX,NUMBER) \ ! sprintf ((BUF), "*%s%d", (PREFIX), (NUMBER)) #undef ASM_OUTPUT_INTERNAL_LABEL #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \ --- 100,106 ---- #undef ASM_GENERATE_INTERNAL_LABEL #define ASM_GENERATE_INTERNAL_LABEL(BUF,PREFIX,NUMBER) \ ! sprintf ((BUF), "*%s%ld", (PREFIX), (long)(NUMBER)) #undef ASM_OUTPUT_INTERNAL_LABEL #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \ diff -Nrc3pad gcc-3.0.4/gcc/config/i386/openbsd.h gcc-3.1/gcc/config/i386/openbsd.h *** gcc-3.0.4/gcc/config/i386/openbsd.h Fri Jul 13 18:01:42 2001 --- gcc-3.1/gcc/config/i386/openbsd.h Wed Oct 17 01:39:47 2001 *************** Boston, MA 02111-1307, USA. */ *** 23,38 **** #include - /* Get perform_* macros to build libgcc.a. */ - #include - /* Get generic OpenBSD definitions. */ #define OBSD_OLD_GAS #include /* This goes away when the math-emulator is fixed */ ! #undef TARGET_DEFAULT ! #define TARGET_DEFAULT \ (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS | MASK_NO_FANCY_MATH_387) /* Run-time target specifications */ --- 23,35 ---- #include /* Get generic OpenBSD definitions. */ #define OBSD_OLD_GAS #include /* This goes away when the math-emulator is fixed */ ! #undef TARGET_SUBTARGET_DEFAULT ! #define TARGET_SUBTARGET_DEFAULT \ (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS | MASK_NO_FANCY_MATH_387) /* Run-time target specifications */ *************** Boston, MA 02111-1307, USA. */ *** 62,85 **** #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 --- 59,64 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/os2.h gcc-3.1/gcc/config/i386/os2.h *** gcc-3.0.4/gcc/config/i386/os2.h Wed Dec 16 21:03:46 1998 --- gcc-3.1/gcc/config/i386/os2.h Thu Jan 1 00:00:00 1970 *************** *** 1,76 **** - /* Definitions of target machine for GNU compiler - for an Intel i386 or later processor running OS/2 2.x. - Copyright (C) 1993, 1994, 1995 Free Software Foundation, Inc. - Contributed by Samuel Figueroa (figueroa@cs.nyu.edu) - - 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. */ - - #ifndef DEFAULT_TARGET_MACHINE - #define DEFAULT_TARGET_MACHINE "i386-os2" - #endif - #ifndef LINK_SPEC - #define LINK_SPEC "/st:1048576/pm:vio/noi/a:16/e/bas:65536/nol" - #endif - #ifndef LIB_SPEC - #define LIB_SPEC "libgcc libc" - #endif - #ifndef STARTFILE_SPEC - #define STARTFILE_SPEC "libcrt.lib" - #endif - #ifndef MD_EXEC_PREFIX - #define MD_EXEC_PREFIX "\\gcc\\bin\\" - #endif - #ifndef STANDARD_STARTFILE_PREFIX - #define STANDARD_STARTFILE_PREFIX "\\gcc\\lib\\" - #endif - #ifndef LOCAL_INCLUDE_DIR - #define LOCAL_INCLUDE_DIR "\\gcc\\include" - #endif - - #define YES_UNDERSCORES - #include "i386/gstabs.h" - - #define USE_COLLECT - - #define BIGGEST_FIELD_ALIGNMENT \ - (maximum_field_alignment ? maximum_field_alignment : 32) - - extern int maximum_field_alignment; - - #undef PCC_BITFIELD_TYPE_MATTERS - #define PCC_BITFIELD_TYPE_MATTERS (maximum_field_alignment == 0) - - /* Define this macro if it is advisable to hold scalars in registers - in a wider mode than that declared by the program. In such cases, - the value is constrained to be within the bounds of the declared - type, but kept valid in the wider mode. The signedness of the - extension may differ from that of the type. */ - - #define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE) \ - if (GET_MODE_CLASS (MODE) == MODE_INT \ - && GET_MODE_SIZE (MODE) < UNITS_PER_WORD) \ - (MODE) = SImode; - - /* Define this if function arguments should also be promoted using the above - procedure. */ - - #define PROMOTE_FUNCTION_ARGS - - /* Likewise, if the function return value is promoted. */ - - #define PROMOTE_FUNCTION_RETURN --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/osf1elf.h gcc-3.1/gcc/config/i386/osf1elf.h *** gcc-3.0.4/gcc/config/i386/osf1elf.h Mon Aug 6 21:26:25 2001 --- gcc-3.1/gcc/config/i386/osf1elf.h Sun Dec 9 16:31:50 2001 *************** *** 1,13 **** /* OSF/1 1.3 now is compitable with SVR4, so include sysv4.h, and put difference here. ! Copyright (C) 2000 Free Software Foundation, Inc. */ #include - #include "i386/sysv4.h" /* Base i386 target machine definitions */ #undef TARGET_VERSION #define TARGET_VERSION fprintf (stderr, " (i386 OSF/1)"); /* WORD_SWITCH_TAKES_ARG defined in svr4 is not correct. We also need an extra -soname */ #undef WORD_SWITCH_TAKES_ARG --- 1,14 ---- /* OSF/1 1.3 now is compitable with SVR4, so include sysv4.h, and put difference here. ! Copyright (C) 2000 Free Software Foundation, Inc. */ #include #undef TARGET_VERSION #define TARGET_VERSION fprintf (stderr, " (i386 OSF/1)"); + #define TARGET_OSF1ELF + /* WORD_SWITCH_TAKES_ARG defined in svr4 is not correct. We also need an extra -soname */ #undef WORD_SWITCH_TAKES_ARG *************** *** 133,173 **** #else #define OSF_PROFILE_BEFORE_PROLOGUE 0 #endif - #undef FUNCTION_PROLOGUE - #define FUNCTION_PROLOGUE(FILE, SIZE) \ - do \ - { \ - char *prefix = ""; \ - char *lprefix = LPREFIX; \ - int labelno = profile_label_no; \ - \ - if (profile_flag && OSF_PROFILE_BEFORE_PROLOGUE) \ - { \ - if (!flag_pic) \ - { \ - fprintf (FILE, "\tmovl $%sP%d,%%edx\n", lprefix, labelno); \ - fprintf (FILE, "\tcall *%s_mcount_ptr\n", prefix); \ - } \ - \ - else \ - { \ - static int call_no = 0; \ - \ - fprintf (FILE, "\tcall %sPc%d\n", lprefix, call_no); \ - fprintf (FILE, "%sPc%d:\tpopl %%eax\n", lprefix, call_no); \ - fprintf (FILE, "\taddl $_GLOBAL_OFFSET_TABLE_+[.-%sPc%d],%%eax\n", \ - lprefix, call_no++); \ - fprintf (FILE, "\tleal %sP%d@GOTOFF(%%eax),%%edx\n", \ - lprefix, labelno); \ - fprintf (FILE, "\tmovl %s_mcount_ptr@GOT(%%eax),%%eax\n", \ - prefix); \ - fprintf (FILE, "\tcall *(%%eax)\n"); \ - } \ - } \ - \ - function_prologue (FILE, SIZE); \ - } \ - while (0) /* A C statement or compound statement to output to FILE some assembler code to call the profiling subroutine `mcount'. Before calling, the assembler code --- 134,139 ---- *************** while (0) *** 179,185 **** The details of how the address should be passed to `mcount' are determined by your operating system environment, not by GNU CC. To figure them out, compile a small program for profiling using the system's installed C ! compiler and look at the assembler code that results. */ #undef FUNCTION_PROFILER #define FUNCTION_PROFILER(FILE, LABELNO) \ --- 145,151 ---- The details of how the address should be passed to `mcount' are determined by your operating system environment, not by GNU CC. To figure them out, compile a small program for profiling using the system's installed C ! compiler and look at the assembler code that results. */ #undef FUNCTION_PROFILER #define FUNCTION_PROFILER(FILE, LABELNO) \ *************** do \ *** 187,195 **** { \ if (!OSF_PROFILE_BEFORE_PROLOGUE) \ { \ ! char *prefix = ""; \ ! char *lprefix = LPREFIX; \ ! int labelno = LABELNO; \ \ /* Note that OSF/rose blew it in terms of calling mcount, \ since OSF/rose prepends a leading underscore, but mcount's \ --- 153,161 ---- { \ if (!OSF_PROFILE_BEFORE_PROLOGUE) \ { \ ! const char *const prefix = ""; \ ! const char *const lprefix = LPREFIX; \ ! int labelno = LABELNO; \ \ /* Note that OSF/rose blew it in terms of calling mcount, \ since OSF/rose prepends a leading underscore, but mcount's \ diff -Nrc3pad gcc-3.0.4/gcc/config/i386/osf1elfgdb.h gcc-3.1/gcc/config/i386/osf1elfgdb.h *** gcc-3.0.4/gcc/config/i386/osf1elfgdb.h Wed Dec 16 21:03:50 1998 --- gcc-3.1/gcc/config/i386/osf1elfgdb.h Fri Oct 19 22:27:27 2001 *************** *** 2,7 **** with gas and gdb. */ /* Use stabs instead of DWARF debug format. */ #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG - #include "i386/osf1elf.h" --- 2,7 ---- with gas and gdb. */ /* Use stabs instead of DWARF debug format. */ + #undef PREFERRED_DEBUGGING_TYPE #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG diff -Nrc3pad gcc-3.0.4/gcc/config/i386/osfrose.h gcc-3.1/gcc/config/i386/osfrose.h *** gcc-3.0.4/gcc/config/i386/osfrose.h Mon Aug 6 21:26:25 2001 --- gcc-3.1/gcc/config/i386/osfrose.h Sun Nov 11 05:56:41 2001 *************** Boston, MA 02111-1307, USA. */ *** 23,31 **** #include "halfpic.h" #include "i386/gstabs.h" - /* Get perform_* macros to build libgcc.a. */ - #include "i386/perform.h" - #define OSF_OS #undef WORD_SWITCH_TAKES_ARG --- 23,28 ---- *************** Boston, MA 02111-1307, USA. */ *** 61,67 **** #define SUBTARGET_SWITCHES \ { "half-pic", MASK_HALF_PIC, \ N_("Emit half-PIC code") }, \ ! { "no-half-pic", -MASK_HALF_PIC, "" } \ { "debug-half-pic", MASK_HALF_PIC_DEBUG, \ 0 /* intentionally undoc */ }, \ { "debugb", MASK_HALF_PIC_DEBUG, \ --- 58,64 ---- #define SUBTARGET_SWITCHES \ { "half-pic", MASK_HALF_PIC, \ N_("Emit half-PIC code") }, \ ! { "no-half-pic", -MASK_HALF_PIC, "" }, \ { "debug-half-pic", MASK_HALF_PIC_DEBUG, \ 0 /* intentionally undoc */ }, \ { "debugb", MASK_HALF_PIC_DEBUG, \ *************** Boston, MA 02111-1307, USA. */ *** 179,203 **** /* Define this macro if the system header files support C++ as well as C. This macro inhibits the usual method of using system header files in C++, which is to pretend that the file's contents are ! enclosed in `extern "C" {...}'. */ #define NO_IMPLICIT_EXTERN_C /* Turn off long double being 96 bits. */ #undef LONG_DOUBLE_TYPE_SIZE #define LONG_DOUBLE_TYPE_SIZE 64 - /* This macro generates the assembly code for function entry. - FILE is a stdio stream to output the code to. - SIZE is an int: how many units of temporary storage to allocate. - Refer to the array `regs_ever_live' to determine which registers - to save; `regs_ever_live[I]' is nonzero if register number I - is ever used in the function. This macro is responsible for - knowing which registers should not be saved even if used. - - We override it here to allow for the new profiling code to go before - the prologue and the old mcount code to go after the prologue (and - after %ebx has been set up for ELF shared library support). */ - #define OSF_PROFILE_BEFORE_PROLOGUE \ (!TARGET_MCOUNT \ && !current_function_needs_context \ --- 176,188 ---- /* Define this macro if the system header files support C++ as well as C. This macro inhibits the usual method of using system header files in C++, which is to pretend that the file's contents are ! enclosed in `extern "C" {...}'. */ #define NO_IMPLICIT_EXTERN_C /* Turn off long double being 96 bits. */ #undef LONG_DOUBLE_TYPE_SIZE #define LONG_DOUBLE_TYPE_SIZE 64 #define OSF_PROFILE_BEFORE_PROLOGUE \ (!TARGET_MCOUNT \ && !current_function_needs_context \ *************** Boston, MA 02111-1307, USA. */ *** 206,261 **** || (!current_function_uses_pic_offset_table \ && !current_function_uses_const_pool))) - #undef FUNCTION_PROLOGUE - #define FUNCTION_PROLOGUE(FILE, SIZE) \ - do \ - { \ - char *prefix = (TARGET_UNDERSCORES) ? "_" : ""; \ - char *lprefix = LPREFIX; \ - int labelno = profile_label_no; \ - \ - if (profile_flag && OSF_PROFILE_BEFORE_PROLOGUE) \ - { \ - if (!flag_pic && !HALF_PIC_P ()) \ - { \ - fprintf (FILE, "\tmovl $%sP%d,%%edx\n", lprefix, labelno); \ - fprintf (FILE, "\tcall *%s_mcount_ptr\n", prefix); \ - } \ - \ - else if (HALF_PIC_P ()) \ - { \ - rtx symref; \ - \ - HALF_PIC_EXTERNAL ("_mcount_ptr"); \ - symref = HALF_PIC_PTR (gen_rtx_SYMBOL_REF (Pmode, \ - "_mcount_ptr")); \ - \ - fprintf (FILE, "\tmovl $%sP%d,%%edx\n", lprefix, labelno); \ - fprintf (FILE, "\tmovl %s%s,%%eax\n", prefix, \ - XSTR (symref, 0)); \ - fprintf (FILE, "\tcall *(%%eax)\n"); \ - } \ - \ - else \ - { \ - static int call_no = 0; \ - \ - fprintf (FILE, "\tcall %sPc%d\n", lprefix, call_no); \ - fprintf (FILE, "%sPc%d:\tpopl %%eax\n", lprefix, call_no); \ - fprintf (FILE, "\taddl $_GLOBAL_OFFSET_TABLE_+[.-%sPc%d],%%eax\n", \ - lprefix, call_no++); \ - fprintf (FILE, "\tleal %sP%d@GOTOFF(%%eax),%%edx\n", \ - lprefix, labelno); \ - fprintf (FILE, "\tmovl %s_mcount_ptr@GOT(%%eax),%%eax\n", \ - prefix); \ - fprintf (FILE, "\tcall *(%%eax)\n"); \ - } \ - } \ - \ - function_prologue (FILE, SIZE); \ - } \ - while (0) - /* A C statement or compound statement to output to FILE some assembler code to call the profiling subroutine `mcount'. Before calling, the assembler code must load the address of a counter variable into a register where `mcount' --- 191,196 ---- *************** while (0) *** 266,272 **** The details of how the address should be passed to `mcount' are determined by your operating system environment, not by GNU CC. To figure them out, compile a small program for profiling using the system's installed C ! compiler and look at the assembler code that results. */ #undef FUNCTION_PROFILER #define FUNCTION_PROFILER(FILE, LABELNO) \ --- 201,207 ---- The details of how the address should be passed to `mcount' are determined by your operating system environment, not by GNU CC. To figure them out, compile a small program for profiling using the system's installed C ! compiler and look at the assembler code that results. */ #undef FUNCTION_PROFILER #define FUNCTION_PROFILER(FILE, LABELNO) \ *************** do \ *** 274,281 **** { \ if (!OSF_PROFILE_BEFORE_PROLOGUE) \ { \ ! char *prefix = (TARGET_UNDERSCORES) ? "_" : ""; \ ! char *lprefix = LPREFIX; \ int labelno = LABELNO; \ \ /* Note that OSF/rose blew it in terms of calling mcount, \ --- 209,216 ---- { \ if (!OSF_PROFILE_BEFORE_PROLOGUE) \ { \ ! const char *const prefix = (TARGET_UNDERSCORES) ? "_" : ""; \ ! const char *const lprefix = LPREFIX; \ int labelno = LABELNO; \ \ /* Note that OSF/rose blew it in terms of calling mcount, \ *************** while (0) *** 359,366 **** #undef ASM_GENERATE_INTERNAL_LABEL #define ASM_GENERATE_INTERNAL_LABEL(BUF,PREFIX,NUMBER) \ ! sprintf ((BUF), "*%s%s%d", (TARGET_UNDERSCORES) ? "" : ".", \ ! (PREFIX), (NUMBER)) /* This is how to output an internal numbered label where PREFIX is the class of label and NUM is the number within the class. */ --- 294,301 ---- #undef ASM_GENERATE_INTERNAL_LABEL #define ASM_GENERATE_INTERNAL_LABEL(BUF,PREFIX,NUMBER) \ ! sprintf ((BUF), "*%s%s%ld", (TARGET_UNDERSCORES) ? "" : ".", \ ! (PREFIX), (long)(NUMBER)) /* This is how to output an internal numbered label where PREFIX is the class of label and NUM is the number within the class. */ *************** while (0) *** 370,376 **** fprintf (FILE, "%s%s%d:\n", (TARGET_UNDERSCORES) ? "" : ".", \ PREFIX, NUM) ! /* The prefix to add to user-visible assembler symbols. */ /* target_flags is not accessible by the preprocessor */ #undef USER_LABEL_PREFIX --- 305,311 ---- fprintf (FILE, "%s%s%d:\n", (TARGET_UNDERSCORES) ? "" : ".", \ PREFIX, NUM) ! /* The prefix to add to user-visible assembler symbols. */ /* target_flags is not accessible by the preprocessor */ #undef USER_LABEL_PREFIX *************** while (0) *** 384,390 **** /* This is 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) \ --- 319,325 ---- /* This is 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) \ *************** while (0) *** 511,517 **** You can also check the information stored in the `symbol_ref' in the definition of `GO_IF_LEGITIMATE_ADDRESS' or ! `PRINT_OPERAND_ADDRESS'. */ #undef ENCODE_SECTION_INFO #define ENCODE_SECTION_INFO(DECL) \ --- 446,452 ---- You can also check the information stored in the `symbol_ref' in the definition of `GO_IF_LEGITIMATE_ADDRESS' or ! `PRINT_OPERAND_ADDRESS'. */ #undef ENCODE_SECTION_INFO #define ENCODE_SECTION_INFO(DECL) \ *************** while (0) *** 571,577 **** and select that section. */ #undef SELECT_RTX_SECTION ! #define SELECT_RTX_SECTION(MODE, RTX) \ do \ { \ if (MODE == Pmode && HALF_PIC_P () && HALF_PIC_ADDRESS_P (RTX)) \ --- 506,512 ---- and select that section. */ #undef SELECT_RTX_SECTION ! #define SELECT_RTX_SECTION(MODE, RTX, ALIGN) \ do \ { \ if (MODE == Pmode && HALF_PIC_P () && HALF_PIC_ADDRESS_P (RTX)) \ *************** do \ *** 582,588 **** while (0) #undef SELECT_SECTION ! #define SELECT_SECTION(DECL, RELOC) \ { \ if (RELOC && HALF_PIC_P ()) \ data_section (); \ --- 517,523 ---- while (0) #undef SELECT_SECTION ! #define SELECT_SECTION(DECL, RELOC, ALIGN) \ { \ if (RELOC && HALF_PIC_P ()) \ data_section (); \ *************** do { \ *** 689,695 **** } \ } while (0) ! /* This is how to declare a function name. */ #undef ASM_DECLARE_FUNCTION_NAME #define ASM_DECLARE_FUNCTION_NAME(STREAM,NAME,DECL) \ --- 624,630 ---- } \ } while (0) ! /* This is how to declare a function name. */ #undef ASM_DECLARE_FUNCTION_NAME #define ASM_DECLARE_FUNCTION_NAME(STREAM,NAME,DECL) \ *************** while (0) *** 769,775 **** to do the search */ #define LINK_LIBGCC_SPECIAL ! /* Generate calls to memcpy, etc., not bcopy, etc. */ #define TARGET_MEM_FUNCTIONS /* Don't default to pcc-struct-return, because gcc is the only compiler, and --- 704,710 ---- to do the search */ #define LINK_LIBGCC_SPECIAL ! /* Generate calls to memcpy, etc., not bcopy, etc. */ #define TARGET_MEM_FUNCTIONS /* Don't default to pcc-struct-return, because gcc is the only compiler, and diff -Nrc3pad gcc-3.0.4/gcc/config/i386/perform.h gcc-3.1/gcc/config/i386/perform.h *** gcc-3.0.4/gcc/config/i386/perform.h Wed Dec 16 21:03:53 1998 --- gcc-3.1/gcc/config/i386/perform.h Thu Jan 1 00:00:00 1970 *************** *** 1,98 **** - /* Definitions for AT&T assembler syntax for the Intel 80386. - Copyright (C) 1993 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. */ - - /* Defines to be able to build libgcc.a with GCC. */ - - /* It might seem that these are not important, since gcc 2 will never - call libgcc for these functions. But programs might be linked with - code compiled by gcc 1, and then these will be used. */ - - /* The arg names used to be a and b, but `a' appears inside strings - and that confuses non-ANSI cpp. */ - - #define perform_udivsi3(arg0,arg1) \ - { \ - register int dx asm("dx"); \ - register int ax asm("ax"); \ - \ - dx = 0; \ - ax = arg0; \ - asm ("divl %3" : "=a" (ax), "=d" (dx) : "a" (ax), "g" (arg1), "d" (dx)); \ - return ax; \ - } - - #define perform_divsi3(arg0,arg1) \ - { \ - register int dx asm("dx"); \ - register int ax asm("ax"); \ - register int cx asm("cx"); \ - \ - ax = arg0; \ - cx = arg1; \ - asm ("cltd\n\tidivl %3" : "=a" (ax), "=&d" (dx) : "a" (ax), "c" (cx)); \ - return ax; \ - } - - #define perform_umodsi3(arg0,arg1) \ - { \ - register int dx asm("dx"); \ - register int ax asm("ax"); \ - \ - dx = 0; \ - ax = arg0; \ - asm ("divl %3" : "=a" (ax), "=d" (dx) : "a" (ax), "g" (arg1), "d" (dx)); \ - return dx; \ - } - - #define perform_modsi3(arg0,arg1) \ - { \ - register int dx asm("dx"); \ - register int ax asm("ax"); \ - register int cx asm("cx"); \ - \ - ax = arg0; \ - cx = arg1; \ - asm ("cltd\n\tidivl %3" : "=a" (ax), "=&d" (dx) : "a" (ax), "c" (cx)); \ - return dx; \ - } - - #define perform_fixdfsi(arg0) \ - { \ - auto unsigned short ostatus; \ - auto unsigned short nstatus; \ - auto int ret; \ - auto double tmp; \ - \ - &ostatus; /* guarantee these land in memory */ \ - &nstatus; \ - &ret; \ - &tmp; \ - \ - asm volatile ("fnstcw %0" : "=m" (ostatus)); \ - nstatus = ostatus | 0x0c00; \ - asm volatile ("fldcw %0" : /* no outputs */ : "m" (nstatus)); \ - tmp = arg0; \ - asm volatile ("fldl %0" : /* no outputs */ : "m" (tmp)); \ - asm volatile ("fistpl %0" : "=m" (ret)); \ - asm volatile ("fldcw %0" : /* no outputs */ : "m" (ostatus)); \ - \ - return ret; \ - } - --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/ptx4-i.h gcc-3.1/gcc/config/i386/ptx4-i.h *** gcc-3.0.4/gcc/config/i386/ptx4-i.h Sun May 20 19:49:17 2001 --- gcc-3.1/gcc/config/i386/ptx4-i.h Thu Dec 20 17:36:35 2001 *************** along with GNU CC; see the file COPYING. *** 22,30 **** the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - #include "i386/i386.h" /* Base i386 target machine definitions */ - #include "i386/att.h" /* Use the i386 AT&T assembler syntax */ - #include "ptx4.h" /* Rest of definitions (non architecture dependent) */ #undef TARGET_VERSION #define TARGET_VERSION fprintf (stderr, " (i386 Sequent Dynix/ptx Version 4)"); --- 22,27 ---- *************** Boston, MA 02111-1307, USA. */ *** 43,103 **** #define CPP_PREDEFINES \ "-Dunix -D_SEQUENT_ -Asystem=unix -Asystem=ptx4" - /* This is how to output assembly code to define a `float' constant. - We always have to use a .long pseudo-op to do this because the native - SVR4 ELF assembler is buggy and it generates incorrect values when we - try to use the .float pseudo-op instead. */ - - #undef ASM_OUTPUT_FLOAT - #define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - do { long value; \ - REAL_VALUE_TO_TARGET_SINGLE ((VALUE), value); \ - if (sizeof (int) == sizeof (long)) \ - fprintf((FILE), "%s0x%x\n", ASM_LONG, value); \ - else \ - fprintf((FILE), "%s0x%lx\n", ASM_LONG, value); \ - } while (0) - - /* This is how to output assembly code to define a `double' constant. - We always have to use a pair of .long pseudo-ops to do this because - the native SVR4 ELF assembler is buggy and it generates incorrect - values when we try to use the .double pseudo-op instead. */ - - #undef ASM_OUTPUT_DOUBLE - #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - do { long value[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), value); \ - if (sizeof (int) == sizeof (long)) \ - { \ - fprintf((FILE), "%s0x%x\n", ASM_LONG, value[0]); \ - fprintf((FILE), "%s0x%x\n", ASM_LONG, value[1]); \ - } \ - else \ - { \ - fprintf((FILE), "%s0x%lx\n", ASM_LONG, value[0]); \ - fprintf((FILE), "%s0x%lx\n", ASM_LONG, value[1]); \ - } \ - } while (0) - - - #undef ASM_OUTPUT_LONG_DOUBLE - #define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \ - do { long value[3]; \ - REAL_VALUE_TO_TARGET_LONG_DOUBLE ((VALUE), value); \ - if (sizeof (int) == sizeof (long)) \ - { \ - fprintf((FILE), "%s0x%x\n", ASM_LONG, value[0]); \ - fprintf((FILE), "%s0x%x\n", ASM_LONG, value[1]); \ - fprintf((FILE), "%s0x%x\n", ASM_LONG, value[2]); \ - } \ - else \ - { \ - fprintf((FILE), "%s0x%lx\n", ASM_LONG, value[0]); \ - fprintf((FILE), "%s0x%lx\n", ASM_LONG, value[1]); \ - fprintf((FILE), "%s0x%lx\n", ASM_LONG, value[2]); \ - } \ - } while (0) - #undef DBX_REGISTER_NUMBER #define DBX_REGISTER_NUMBER(n) svr4_dbx_register_map[n] --- 40,45 ---- *************** do { long value[3]; \ *** 126,132 **** } \ for (p = _ascii_bytes; p < limit && *p != '\0'; p++) \ continue; \ ! if (p < limit && (p - _ascii_bytes) <= STRING_LIMIT) \ { \ if (bytes_in_chunk > 0) \ { \ --- 68,74 ---- } \ for (p = _ascii_bytes; p < limit && *p != '\0'; p++) \ continue; \ ! if (p < limit && (p - _ascii_bytes) <= (long) STRING_LIMIT) \ { \ if (bytes_in_chunk > 0) \ { \ *************** do { long value[3]; \ *** 150,165 **** fprintf ((FILE), "\n"); \ } \ while (0) - - /* This is 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) - - /* Indicate that jump tables go in the text section. This is - necessary when compiling PIC code. */ - - #define JUMP_TABLES_IN_TEXT_SECTION 1 --- 92,94 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/rtems.h gcc-3.1/gcc/config/i386/rtems.h *** gcc-3.0.4/gcc/config/i386/rtems.h Fri Feb 15 14:42:58 2002 --- gcc-3.1/gcc/config/i386/rtems.h Fri Apr 12 13:09:28 2002 *************** along with GNU CC; see the file COPYING. *** 19,37 **** the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - #include "i386/i386-coff.h" - /* Specify predefined symbols in preprocessor. */ #undef CPP_PREDEFINES #define CPP_PREDEFINES "-D__rtems__ -Asystem=rtems" - - /* Generate calls to memcpy, memcmp and memset. */ - #ifndef TARGET_MEM_FUNCTIONS - #define TARGET_MEM_FUNCTIONS - #endif - - /* Get machine-independent configuration parameters for RTEMS. */ - #include - - /* end of i386/rtems.h */ --- 19,25 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/rtemself.h gcc-3.1/gcc/config/i386/rtemself.h *** gcc-3.0.4/gcc/config/i386/rtemself.h Fri Feb 15 14:42:58 2002 --- gcc-3.1/gcc/config/i386/rtemself.h Fri Apr 12 13:09:28 2002 *************** Boston, MA 02111-1307, USA. */ *** 21,44 **** /* Specify predefined symbols in preprocessor. */ #undef CPP_PREDEFINES #define CPP_PREDEFINES "-D__rtems__ -Asystem=rtems \ -D__ELF__ -D__i386__ -D__USE_INIT_FINI__" #undef CPP_SPEC #define CPP_SPEC "%(cpp_cpu) %{msoft-float:-D_SOFT_FLOAT}" - - #undef STARTFILE_SPEC - #define STARTFILE_SPEC "crt0.o%s crti.o%s crtbegin.o%s" - - #undef ENDFILE_SPEC - #define ENDFILE_SPEC "crtend.o%s crtn.o%s" - - /* Generate calls to memcpy, memcmp and memset. */ - #ifndef TARGET_MEM_FUNCTIONS - #define TARGET_MEM_FUNCTIONS - #endif - - /* Get machine-independent configuration parameters for RTEMS. */ - #include - --- 21,31 ---- /* Specify predefined symbols in preprocessor. */ + #include + #undef CPP_PREDEFINES #define CPP_PREDEFINES "-D__rtems__ -Asystem=rtems \ -D__ELF__ -D__i386__ -D__USE_INIT_FINI__" #undef CPP_SPEC #define CPP_SPEC "%(cpp_cpu) %{msoft-float:-D_SOFT_FLOAT}" diff -Nrc3pad gcc-3.0.4/gcc/config/i386/sco.h gcc-3.1/gcc/config/i386/sco.h *** gcc-3.0.4/gcc/config/i386/sco.h Thu Dec 7 01:58:24 2000 --- gcc-3.1/gcc/config/i386/sco.h Thu Jan 1 00:00:00 1970 *************** *** 1,114 **** - /* Definitions for Intel 386 running SCO Unix System V. - Copyright (C) 1988, 1992, 1994, 1995, 1996, 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. */ - - /* Mostly it's like AT&T Unix System V. */ - - #include "i386/sysv3.h" - - /* By default, target has a 80387, uses IEEE compatible arithmetic, - and returns float values in the 387, ie, - (TARGET_80387 | TARGET_FLOAT_RETURNS_IN_80387) - - SCO's software emulation of a 387 fails to handle the `fucomp' - opcode. fucomp is only used when generating IEEE compliant code. - So don't make TARGET_IEEE_FP default for SCO. */ - - #undef TARGET_DEFAULT - #define TARGET_DEFAULT (MASK_80387 | MASK_FLOAT_RETURNS) - - /* Let's guess that the SCO software FPU emulator can't handle - 80-bit XFmode insns, so don't generate them. */ - #undef LONG_DOUBLE_TYPE_SIZE - #define LONG_DOUBLE_TYPE_SIZE 64 - - /* Use crt1.o as a startup file and crtn.o as a closing file. */ - - #undef STARTFILE_SPEC - #define STARTFILE_SPEC \ - "%{pg:gcrt1.o%s}%{!pg:%{p:mcrt1.o%s}%{!p:crt1.o%s}} crtbegin.o%s" - - #define ENDFILE_SPEC "crtend.o%s crtn.o%s" - - /* Library spec, including SCO international language support. */ - - #undef LIB_SPEC - #define LIB_SPEC \ - "%{p:-L/usr/lib/libp}%{pg:-L/usr/lib/libp} %{scointl:libintl.a%s} -lc" - - /* Specify predefined symbols in preprocessor. */ - - #undef CPP_PREDEFINES - #define CPP_PREDEFINES "-DM_UNIX -DM_I386 -DM_COFF -DM_WORDSWAP -Asystem=svr3" - - #undef CPP_SPEC - #define CPP_SPEC "%(cpp_cpu) %{scointl:-DM_INTERNAT}" - - /* This spec is used for telling cpp whether char is signed or not. */ - - #undef SIGNED_CHAR_SPEC - #if DEFAULT_SIGNED_CHAR - #define SIGNED_CHAR_SPEC \ - "%{funsigned-char:-D__CHAR_UNSIGNED__ -D_CHAR_UNSIGNED}" - #else - #define SIGNED_CHAR_SPEC \ - "%{!fsigned-char:-D__CHAR_UNSIGNED__ -D_CHAR_UNSIGNED}" - #endif - - /* Specify the size_t type. */ - #define SIZE_TYPE "unsigned int" - - #if 0 /* Not yet certain whether this is needed. */ - /* If no 387, use the general regs to return floating values, - since this system does not emulate the 80387. */ - - #undef VALUE_REGNO - #define VALUE_REGNO(MODE) \ - ((TARGET_80387 - && ((MODE) == SFmode || (MODE) == DFmode || (MODE) == XFmode) - ? FIRST_FLOAT_REG : 0) - - #undef HARD_REGNO_MODE_OK - #define HARD_REGNO_MODE_OK(REGNO, MODE) \ - ((REGNO) < 2 ? 1 \ - : (REGNO) < 4 ? 1 \ - : FP_REGNO_P (REGNO) ? ((GET_MODE_CLASS (MODE) == MODE_FLOAT \ - || GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT) \ - && TARGET_80387 \ - && GET_MODE_UNIT_SIZE (MODE) <= 8) \ - : (MODE) != QImode) - #endif - - /* caller has to pop the extra argument passed to functions that return - structures. */ - - #undef RETURN_POPS_ARGS - #define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) \ - ((FUNDECL) && TREE_CODE (FUNDECL) == IDENTIFIER_NODE ? 0 \ - : (TARGET_RTD \ - && (TYPE_ARG_TYPES (FUNTYPE) == 0 \ - || (TREE_VALUE (tree_last (TYPE_ARG_TYPES (FUNTYPE))) \ - == void_type_node))) ? (SIZE) \ - : 0) - /* On other 386 systems, the last line looks like this: - : (aggregate_value_p (TREE_TYPE (FUNTYPE))) ? GET_MODE_SIZE (Pmode) : 0) */ - - /* Handle #pragma pack. */ - #define HANDLE_SYSV_PRAGMA --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/sco4.h gcc-3.1/gcc/config/i386/sco4.h *** gcc-3.0.4/gcc/config/i386/sco4.h Thu Nov 2 23:29:10 2000 --- gcc-3.1/gcc/config/i386/sco4.h Thu Jan 1 00:00:00 1970 *************** *** 1,86 **** - /* Definitions for Intel 386 running SCO Unix System V 3.2 Version 4. - Written by Chip Salzenberg. - Copyright (C) 1992, 1994 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. */ - - - /* Mostly it's like earlier SCO UNIX. */ - - #include "i386/sco.h" - - /* Use crt1.o as a startup file and crtn.o as a closing file. */ - - #undef STARTFILE_SPEC - #define STARTFILE_SPEC \ - "%{scoxpg3:%{p:mcrt1X.o%s}%{!p:crt1X.o%s}} \ - %{!scoxpg3:\ - %{posix:%{p:mcrt1P.o%s}%{!p:crt1P.o%s}} \ - %{!posix:\ - %{ansi:%{p:mcrt1A.o%s}%{!p:crt1A.o%s}} \ - %{!ansi:%{pg:gcrt1.o%s}%{!pg:%{p:mcrt1.o%s}%{!p:crt1.o%s}}}}} \ - crtbegin.o%s" - - #undef ENDFILE_SPEC - #define ENDFILE_SPEC \ - "crtend.o%s \ - %{scoxpg3:crtnX.o%s} \ - %{!scoxpg3:\ - %{posix:crtnP.o%s} \ - %{!posix:\ - %{ansi:crtnA.o%s} \ - %{!ansi:crtn.o%s}}}" - - /* Library spec. */ - - #undef LIB_SPEC - #define LIB_SPEC \ - "%{p:-L/usr/lib/libp}%{pg:-L/usr/lib/libp} \ - %{scoxpg3:-lcX -lcP -lcA} \ - %{!scoxpg3:\ - %{posix:-lcP -lcA} \ - %{!posix:\ - %{ansi:-lcA} \ - %{!ansi:%{scointl:-lintl} -lc}}}" - - /* Macros, macros everywhere: - Specify predefined symbols in preprocessor. */ - - #undef CPP_PREDEFINES - #define CPP_PREDEFINES \ - "-Asystem=svr3" - - #undef CPP_SPEC - #define CPP_SPEC "%(cpp_cpu) \ - -D_i386 -D_M_I386 -D_M_I86 -D_M_I86SM -D_M_SDATA -D_M_STEXT \ - -D_unix -D_M_UNIX -D_M_XENIX \ - -D_M_SYS5 -D_M_SYSV -D_M_SYS3 -D_M_SYSIII \ - -D_M_COFF -D_M_BITFIELDS -D_M_WORDSWAP \ - %{scoxpg3:-D_XOPEN_SOURCE -D_STRICT_NAMES} \ - %{!scoxpg3:%{posix:-D_POSIX_SOURCE -D_STRICT_NAMES}} \ - %{!scoxpg3:%{!posix:\ - %{ansi:-D_STRICT_NAMES}%{!ansi:\ - -Di386 -DM_I386 -DM_I86 -DM_I86SM -DM_SDATA -DM_STEXT \ - -Dunix -DM_UNIX -DM_XENIX \ - -DM_SYS5 -DM_SYSV -DM_SYS3 -DM_SYSIII \ - -DM_COFF -DM_BITFIELDS -DM_WORDSWAP \ - %{scointl:-D_M_INTERNAT -DM_INTERNAT} \ - %{traditional:-D_KR -D_SVID -D_NO_PROTOTYPE}}}}" - - /* The system headers are C++-aware. */ - #define NO_IMPLICIT_EXTERN_C --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/sco4dbx.h gcc-3.1/gcc/config/i386/sco4dbx.h *** gcc-3.0.4/gcc/config/i386/sco4dbx.h Thu Nov 2 23:29:10 2000 --- gcc-3.1/gcc/config/i386/sco4dbx.h Thu Jan 1 00:00:00 1970 *************** *** 1,81 **** - /* Definitions for Intel 386 running SCO Unix System V 3.2 Version 4.s, - using dbx-in-coff encapsulation. - Copyright (C) 1992 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. */ - - - /* Mostly it's like earlier SCO UNIX. */ - - #include "i386/scodbx.h" - - /* Use crt1.o as a startup file and crtn.o as a closing file. */ - - #undef STARTFILE_SPEC - #define STARTFILE_SPEC \ - "%{!r:%{!z:gcc.ifile%s}%{z:gccz.ifile%s}}\ - %{scoxpg3:%{p:mcrt1X.o%s}%{!p:crt1X.o%s}} \ - %{!scoxpg3:\ - %{posix:%{p:mcrt1P.o%s}%{!p:crt1P.o%s}} \ - %{!posix:\ - %{ansi:%{p:mcrt1A.o%s}%{!p:crt1A.o%s}} \ - %{!ansi:%{pg:gcrt1.o%s}%{!pg:%{p:mcrt1.o%s}%{!p:crt1.o%s}}}}}" - - #undef ENDFILE_SPEC - #define ENDFILE_SPEC \ - "%{scoxpg3:crtnX.o%s} \ - %{!scoxpg3:\ - %{posix:crtnP.o%s} \ - %{!posix:\ - %{ansi:crtnA.o%s} \ - %{!ansi:crtn.o%s}}}" - - /* Library spec. */ - - #undef LIB_SPEC - #define LIB_SPEC \ - "%{p:-L/usr/lib/libp}%{pg:-L/usr/lib/libp} \ - %{scoxpg3:-lcX -lcP -lcA} \ - %{!scoxpg3:\ - %{posix:-lcP -lcA} \ - %{!posix:\ - %{ansi:-lcA} \ - %{!ansi:%{scointl:-lintl} -lc}}}" - - /* Macros, macros everywhere: - Specify predefined symbols in preprocessor. */ - - #undef CPP_PREDEFINES - #define CPP_PREDEFINES "-Dunix -Asystem=svr3" - - #undef CPP_SPEC - #define CPP_SPEC "%(cpp_cpu) \ - -D_M_I386 -D_M_I86 -D_M_I86SM -D_M_SDATA -D_M_STEXT \ - -D_M_UNIX -D_M_XENIX \ - -D_M_SYS5 -D_M_SYSV -D_M_SYS3 -D_M_SYSIII \ - -D_M_COFF -D_M_BITFIELDS -D_M_WORDSWAP \ - %{scoxpg3:-D_XOPEN_SOURCE -D_STRICT_NAMES} \ - %{!scoxpg3:%{posix:-D_POSIX_SOURCE -D_STRICT_NAMES}} \ - %{!scoxpg3:%{!posix:\ - %{ansi:-D_STRICT_NAMES}%{!ansi:\ - -DM_I386 -DM_I86 -DM_I86SM -DM_SDATA -DM_STEXT \ - -DM_UNIX -DM_XENIX \ - -DM_SYS5 -DM_SYSV -DM_SYS3 -DM_SYSIII \ - -DM_COFF -DM_BITFIELDS -DM_WORDSWAP \ - %{scointl:-D_M_INTERNAT -DM_INTERNAT} \ - %{traditional:-D_KR -D_SVID -D_NO_PROTOTYPE}}}}" --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/sco5.h gcc-3.1/gcc/config/i386/sco5.h *** gcc-3.0.4/gcc/config/i386/sco5.h Sun Jul 29 06:47:53 2001 --- gcc-3.1/gcc/config/i386/sco5.h Wed Apr 24 17:18:04 2002 *************** along with GNU CC; see the file COPYING. *** 20,28 **** the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - #include "i386/i386.h" /* Base i386 target definitions */ - #include "i386/att.h" /* Use AT&T i386 assembler syntax */ - #undef TARGET_VERSION #define TARGET_VERSION fprintf (stderr, " (i386, SCO OpenServer 5 Syntax)"); --- 20,25 ---- *************** Boston, MA 02111-1307, USA. */ *** 35,43 **** #undef ASCII_DATA_ASM_OP #define ASCII_DATA_ASM_OP "\t.ascii\t" - #undef ASM_BYTE_OP - #define ASM_BYTE_OP "\t.byte\t" - #undef IDENT_ASM_OP #define IDENT_ASM_OP "\t.ident\t" --- 32,37 ---- *************** Boston, MA 02111-1307, USA. */ *** 50,64 **** #undef LOCAL_ASM_OP #define LOCAL_ASM_OP "\t.local\t" - #undef INT_ASM_OP - #define INT_ASM_OP "\t.long\t" - #undef ASM_SHORT #define ASM_SHORT "\t.value\t" #undef ASM_LONG #define ASM_LONG "\t.long\t" #undef TYPE_ASM_OP #define TYPE_ASM_OP "\t.type\t" --- 44,57 ---- #undef LOCAL_ASM_OP #define LOCAL_ASM_OP "\t.local\t" #undef ASM_SHORT #define ASM_SHORT "\t.value\t" #undef ASM_LONG #define ASM_LONG "\t.long\t" + #undef ASM_QUAD + #undef TYPE_ASM_OP #define TYPE_ASM_OP "\t.type\t" *************** Boston, MA 02111-1307, USA. */ *** 75,84 **** #define GLOBAL_ASM_OP "\t.globl\t" #undef EH_FRAME_SECTION_ASM_OP ! #define EH_FRAME_SECTION_ASM_OP_COFF "\t.section\t.ehfram, \"x\"" ! #define EH_FRAME_SECTION_ASM_OP_ELF "\t.section\t.eh_frame, \"aw\"" ! #define EH_FRAME_SECTION_ASM_OP \ ! ((TARGET_ELF) ? EH_FRAME_SECTION_ASM_OP_ELF : EH_FRAME_SECTION_ASM_OP_COFF) /* Avoid problems (long sectino names, forward assembler refs) with DWARF exception unwinding when we're generating COFF */ --- 68,77 ---- #define GLOBAL_ASM_OP "\t.globl\t" #undef EH_FRAME_SECTION_ASM_OP ! #define EH_FRAME_SECTION_NAME_COFF ".ehfram" ! #define EH_FRAME_SECTION_NAME_ELF ".eh_frame" ! #define EH_FRAME_SECTION_NAME \ ! ((TARGET_ELF) ? EH_FRAME_SECTION_NAME_ELF : EH_FRAME_SECTION_NAME_COFF) /* Avoid problems (long sectino names, forward assembler refs) with DWARF exception unwinding when we're generating COFF */ *************** Boston, MA 02111-1307, USA. */ *** 99,105 **** #undef INIT_SECTION_ASM_OP #define INIT_SECTION_ASM_OP_ELF "\t.section\t.init" ! /* Rename these for COFF becuase crt1.o will try to run them. */ #define INIT_SECTION_ASM_OP_COFF "\t.section\t.ctor ,\"x\"" #define INIT_SECTION_ASM_OP \ ((TARGET_ELF) ? INIT_SECTION_ASM_OP_ELF : INIT_SECTION_ASM_OP_COFF) --- 92,98 ---- #undef INIT_SECTION_ASM_OP #define INIT_SECTION_ASM_OP_ELF "\t.section\t.init" ! /* Rename these for COFF because crt1.o will try to run them. */ #define INIT_SECTION_ASM_OP_COFF "\t.section\t.ctor ,\"x\"" #define INIT_SECTION_ASM_OP \ ((TARGET_ELF) ? INIT_SECTION_ASM_OP_ELF : INIT_SECTION_ASM_OP_COFF) *************** do { \ *** 229,246 **** #define ASM_GENERATE_INTERNAL_LABEL(LABEL, PREFIX, NUM) \ do { \ if (TARGET_ELF) \ ! sprintf (LABEL, "*.%s%d", (PREFIX), (NUM)); \ ! else \ ! sprintf (LABEL, ".%s%d", (PREFIX), (NUM)); \ ! } while (0) ! ! #undef ASM_OUTPUT_ADDR_DIFF_ELT ! #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ ! do { \ ! if (TARGET_ELF) \ ! fprintf (FILE, "%s_GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", ASM_LONG, LPREFIX, VALUE); \ else \ ! fprintf (FILE, "%s%s%d-%s%d\n", ASM_LONG, LPREFIX,VALUE,LPREFIX,REL); \ } while (0) #undef ASM_OUTPUT_ALIGNED_COMMON --- 222,230 ---- #define ASM_GENERATE_INTERNAL_LABEL(LABEL, PREFIX, NUM) \ do { \ if (TARGET_ELF) \ ! sprintf (LABEL, "*.%s%ld", (PREFIX), (long)(NUM)); \ else \ ! sprintf (LABEL, ".%s%ld", (PREFIX), (long)(NUM)); \ } while (0) #undef ASM_OUTPUT_ALIGNED_COMMON *************** do { \ *** 345,351 **** } \ for (p = _ascii_bytes; p < limit && *p != '\0'; p++) \ continue; \ ! if (p < limit && (p - _ascii_bytes) <= STRING_LIMIT) \ { \ if (bytes_in_chunk > 0) \ { \ --- 329,335 ---- } \ for (p = _ascii_bytes; p < limit && *p != '\0'; p++) \ continue; \ ! if (p < limit && (p - _ascii_bytes) <= (long) STRING_LIMIT) \ { \ if (bytes_in_chunk > 0) \ { \ *************** do { \ *** 358,364 **** else \ { \ if (bytes_in_chunk == 0) \ ! fprintf ((FILE), "%s", ASM_BYTE_OP); \ else \ fputc (',', (FILE)); \ fprintf ((FILE), "0x%02x", *_ascii_bytes); \ --- 342,348 ---- else \ { \ if (bytes_in_chunk == 0) \ ! fputs ("\t.byte\t", (FILE)); \ else \ fputc (',', (FILE)); \ fprintf ((FILE), "0x%02x", *_ascii_bytes); \ *************** do { \ *** 371,377 **** /* Must use data section for relocatable constants when pic. */ #undef SELECT_RTX_SECTION ! #define SELECT_RTX_SECTION(MODE,RTX) \ { \ if (TARGET_ELF) { \ if (flag_pic && symbolic_operand (RTX, VOIDmode)) \ --- 355,361 ---- /* Must use data section for relocatable constants when pic. */ #undef SELECT_RTX_SECTION ! #define SELECT_RTX_SECTION(MODE,RTX,ALIGN) \ { \ if (TARGET_ELF) { \ if (flag_pic && symbolic_operand (RTX, VOIDmode)) \ *************** do { \ *** 390,427 **** ASM_OUTPUT_INTERNAL_LABEL((FILE),(PREFIX),(NUM)); \ } while (0) - - #undef ASM_OUTPUT_CONSTRUCTOR - #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ - do { \ - if (TARGET_ELF) { \ - ctors_section (); \ - fprintf (FILE, "%s", INT_ASM_OP); \ - assemble_name (FILE, NAME); \ - fprintf (FILE, "\n"); \ - } else { \ - init_section (); \ - fprintf (FILE, "\tpushl $"); \ - assemble_name (FILE, NAME); \ - fprintf (FILE, "\n"); } \ - } while (0) - - #undef ASM_OUTPUT_DESTRUCTOR - #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \ - do { \ - if (TARGET_ELF) { \ - dtors_section (); \ - fprintf (FILE, "%s", INT_ASM_OP); \ - assemble_name (FILE, NAME); \ - fprintf (FILE, "\n"); \ - } else { \ - fini_section (); \ - fprintf (FILE, "%s", INT_ASM_OP); \ - assemble_name (FILE, NAME); \ - fprintf (FILE, "\n"); } \ - } while (0) - - #undef ASM_OUTPUT_IDENT #define ASM_OUTPUT_IDENT(FILE, NAME) \ fprintf (FILE, "%s\"%s\"\n", IDENT_ASM_OP, NAME); --- 374,379 ---- *************** do { \ *** 438,499 **** #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \ fprintf (FILE, ".%s%d:\n", PREFIX, NUM) ! /* The prefix to add to user-visible assembler symbols. */ #undef USER_LABEL_PREFIX #define USER_LABEL_PREFIX "" /* - * Compensate for the difference between ELF and COFF assembler syntax. - * Otherwise, this is cribbed from ../svr4.h. * We rename 'gcc_except_table' to the shorter name in preparation ! * for the day when we're ready to do DWARF2 eh unwinding under COFF */ ! #undef ASM_OUTPUT_SECTION_NAME ! #define ASM_OUTPUT_SECTION_NAME(FILE, DECL, NAME, RELOC) \ ! do { \ ! static struct section_info \ ! { \ ! struct section_info *next; \ ! char *name; \ ! enum sect_enum {SECT_RW, SECT_RO, SECT_EXEC} type; \ ! } *sections; \ ! struct section_info *s; \ ! const char *mode; \ ! enum sect_enum type; \ ! const char *sname = NAME ; \ ! if (strcmp(NAME, ".gcc_except_table") == 0) sname = ".gccexc" ; \ ! \ ! for (s = sections; s; s = s->next) \ ! if (!strcmp (NAME, s->name)) \ ! break; \ ! \ ! if (DECL && TREE_CODE (DECL) == FUNCTION_DECL) \ ! type = SECT_EXEC, mode = (TARGET_ELF) ? "ax" : "x" ; \ ! else if (DECL && DECL_READONLY_SECTION (DECL, RELOC)) \ ! type = SECT_RO, mode = "a"; \ ! else \ ! type = SECT_RW, mode = (TARGET_ELF) ? "aw" : "w" ; \ ! \ ! if (s == 0) \ ! { \ ! s = (struct section_info *) xmalloc (sizeof (struct section_info)); \ ! s->name = xmalloc ((strlen (NAME) + 1) * sizeof (*NAME)); \ ! strcpy (s->name, NAME); \ ! s->type = type; \ ! s->next = sections; \ ! sections = s; \ ! fprintf (FILE, ".section\t%s,\"%s\"%s\n", sname, mode, \ ! (TARGET_ELF) ? ",@progbits" : "" ); \ ! } \ ! else \ ! { \ ! if (DECL && s->type != type) \ ! error_with_decl (DECL, "%s causes a section type conflict"); \ ! \ ! fprintf (FILE, ".section\t%s\n", sname); \ ! } \ ! } while (0) #undef ASM_OUTPUT_SKIP #define ASM_OUTPUT_SKIP(FILE,SIZE) \ --- 390,408 ---- #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \ fprintf (FILE, ".%s%d:\n", PREFIX, NUM) ! /* The prefix to add to user-visible assembler symbols. */ #undef USER_LABEL_PREFIX #define USER_LABEL_PREFIX "" /* * We rename 'gcc_except_table' to the shorter name in preparation ! * for the day when we're ready to do DWARF2 eh unwinding under COFF. */ ! /* #define EXCEPTION_SECTION() named_section (NULL, ".gccexc", 1) */ ! ! /* Switch into a generic section. */ ! #define TARGET_ASM_NAMED_SECTION default_elf_asm_named_section #undef ASM_OUTPUT_SKIP #define ASM_OUTPUT_SKIP(FILE,SIZE) \ *************** do { \ *** 550,564 **** ((TARGET_ELF) ? DWARF2_DEBUG: SDB_DEBUG) #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_const, in_init, in_fini, in_ctors, in_dtors #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ CONST_SECTION_FUNCTION \ INIT_SECTION_FUNCTION \ ! FINI_SECTION_FUNCTION \ ! CTORS_SECTION_FUNCTION \ ! DTORS_SECTION_FUNCTION #undef CONST_SECTION_FUNCTION #define CONST_SECTION_FUNCTION \ --- 459,471 ---- ((TARGET_ELF) ? DWARF2_DEBUG: SDB_DEBUG) #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_const, in_init, in_fini #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ CONST_SECTION_FUNCTION \ INIT_SECTION_FUNCTION \ ! FINI_SECTION_FUNCTION #undef CONST_SECTION_FUNCTION #define CONST_SECTION_FUNCTION \ *************** init_section () \ *** 598,635 **** } \ } - #undef CTORS_SECTION_FUNCTION - #define CTORS_SECTION_FUNCTION \ - void \ - ctors_section () \ - { \ - if (in_section != in_ctors) \ - { \ - fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP); \ - in_section = in_ctors; \ - } \ - } - - #undef DTORS_SECTION_FUNCTION - #define DTORS_SECTION_FUNCTION \ - void \ - dtors_section () \ - { \ - if (in_section != in_dtors) \ - { \ - fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP); \ - in_section = in_dtors; \ - } \ - } - #undef SUBTARGET_FRAME_POINTER_REQUIRED #define SUBTARGET_FRAME_POINTER_REQUIRED \ ((TARGET_ELF) ? 0 : \ (current_function_calls_setjmp || current_function_calls_longjmp)) - #undef JUMP_TABLES_IN_TEXT_SECTION - #define JUMP_TABLES_IN_TEXT_SECTION (TARGET_ELF && flag_pic) - #undef LOCAL_LABEL_PREFIX #define LOCAL_LABEL_PREFIX \ ((TARGET_ELF) ? "" : ".") --- 505,515 ---- *************** dtors_section () \ *** 662,668 **** : 0)) #undef SELECT_SECTION ! #define SELECT_SECTION(DECL,RELOC) \ { \ if (TARGET_ELF && flag_pic && RELOC) \ data_section (); \ --- 542,548 ---- : 0)) #undef SELECT_SECTION ! #define SELECT_SECTION(DECL,RELOC,ALIGN) \ { \ if (TARGET_ELF && flag_pic && RELOC) \ data_section (); \ *************** dtors_section () \ *** 698,705 **** && strcmp (STR, "Tdata") && strcmp (STR, "Ttext") \ && strcmp (STR, "Tbss")) ! #undef TARGET_DEFAULT ! #define TARGET_DEFAULT (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS) #undef HANDLE_SYSV_PRAGMA #define HANDLE_SYSV_PRAGMA 1 --- 578,585 ---- && strcmp (STR, "Tdata") && strcmp (STR, "Ttext") \ && strcmp (STR, "Tbss")) ! #undef TARGET_SUBTARGET_DEFAULT ! #define TARGET_SUBTARGET_DEFAULT (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS) #undef HANDLE_SYSV_PRAGMA #define HANDLE_SYSV_PRAGMA 1 *************** dtors_section () \ *** 768,774 **** #if USE_GAS /* Leave ASM_SPEC undefined so we pick up the master copy from gcc.c ! * Undef MD_EXEC_PREFIX becuase we don't know where GAS is, but it's not * likely in /usr/ccs/bin/ */ #undef MD_EXEC_PREFIX --- 648,654 ---- #if USE_GAS /* Leave ASM_SPEC undefined so we pick up the master copy from gcc.c ! * Undef MD_EXEC_PREFIX because we don't know where GAS is, but it's not * likely in /usr/ccs/bin/ */ #undef MD_EXEC_PREFIX *************** dtors_section () \ *** 865,871 **** %{G:-G} %{!mcoff:%{Qn:} %{!Qy:-Qn}}" /* The SCO COFF linker gets confused on the difference between "-ofoo" ! and "-o foo". So we just always force a single space. */ #define SWITCHES_NEED_SPACES "o" --- 745,751 ---- %{G:-G} %{!mcoff:%{Qn:} %{!Qy:-Qn}}" /* The SCO COFF linker gets confused on the difference between "-ofoo" ! and "-o foo". So we just always force a single space. */ #define SWITCHES_NEED_SPACES "o" *************** dtors_section () \ *** 881,887 **** "%{!shared:-lgcc}" #define MASK_COFF 010000000000 /* Mask for elf generation */ - #define TARGET_COFF (target_flags & MASK_COFF) #define TARGET_ELF (1) /* (!(target_flags & MASK_COFF)) */ #undef SUBTARGET_SWITCHES --- 761,766 ---- *************** dtors_section () \ *** 891,897 **** #define NO_DOLLAR_IN_LABEL /* Implicit library calls should use memcpy, not bcopy, etc. They are ! faster on OpenServer libraries. */ #define TARGET_MEM_FUNCTIONS --- 770,776 ---- #define NO_DOLLAR_IN_LABEL /* Implicit library calls should use memcpy, not bcopy, etc. They are ! faster on OpenServer libraries. */ #define TARGET_MEM_FUNCTIONS *************** compiler at the end of the day. Onward w *** 925,931 **** # undef FINI_SECTION_ASM_OP # undef CTORS_SECTION_ASM_OP # undef DTORS_SECTION_ASM_OP ! # undef EH_FRAME_SECTION_ASM_OP # undef CTOR_LIST_BEGIN # undef CTOR_LIST_END # undef DO_GLOBAL_CTORS_BODY --- 804,810 ---- # undef FINI_SECTION_ASM_OP # undef CTORS_SECTION_ASM_OP # undef DTORS_SECTION_ASM_OP ! # undef EH_FRAME_SECTION_NAME # undef CTOR_LIST_BEGIN # undef CTOR_LIST_END # undef DO_GLOBAL_CTORS_BODY *************** compiler at the end of the day. Onward w *** 936,948 **** # define FINI_SECTION_ASM_OP FINI_SECTION_ASM_OP_ELF # define DTORS_SECTION_ASM_OP DTORS_SECTION_ASM_OP_ELF # define CTORS_SECTION_ASM_OP CTORS_SECTION_ASM_OP_ELF ! # define EH_FRAME_SECTION_ASM_OP EH_FRAME_SECTION_ASM_OP_ELF # else /* ! _SCO_ELF */ # define INIT_SECTION_ASM_OP INIT_SECTION_ASM_OP_COFF # define FINI_SECTION_ASM_OP FINI_SECTION_ASM_OP_COFF # define DTORS_SECTION_ASM_OP DTORS_SECTION_ASM_OP_COFF # define CTORS_SECTION_ASM_OP CTORS_SECTION_ASM_OP_COFF ! # define EH_FRAME_SECTION_ASM_OP EH_FRAME_SECTION_ASM_OP_COFF # define CTOR_LIST_BEGIN asm (INIT_SECTION_ASM_OP); asm ("pushl $0") # define CTOR_LIST_END CTOR_LIST_BEGIN # define DO_GLOBAL_CTORS_BODY \ --- 815,827 ---- # define FINI_SECTION_ASM_OP FINI_SECTION_ASM_OP_ELF # define DTORS_SECTION_ASM_OP DTORS_SECTION_ASM_OP_ELF # define CTORS_SECTION_ASM_OP CTORS_SECTION_ASM_OP_ELF ! # define EH_FRAME_SECTION_NAME EH_FRAME_SECTION_NAME_ELF # else /* ! _SCO_ELF */ # define INIT_SECTION_ASM_OP INIT_SECTION_ASM_OP_COFF # define FINI_SECTION_ASM_OP FINI_SECTION_ASM_OP_COFF # define DTORS_SECTION_ASM_OP DTORS_SECTION_ASM_OP_COFF # define CTORS_SECTION_ASM_OP CTORS_SECTION_ASM_OP_COFF ! # define EH_FRAME_SECTION_NAME EH_FRAME_SECTION_NAME_COFF # define CTOR_LIST_BEGIN asm (INIT_SECTION_ASM_OP); asm ("pushl $0") # define CTOR_LIST_END CTOR_LIST_BEGIN # define DO_GLOBAL_CTORS_BODY \ *************** do { \ *** 960,966 **** do { \ if ((SIZE) == 4 && ((ENCODING) & 0x70) == DW_EH_PE_datarel) \ { \ ! fputs (UNALIGNED_INT_ASM_OP, FILE); \ assemble_name (FILE, XSTR (ADDR, 0)); \ fputs (((ENCODING) & DW_EH_PE_indirect ? "@GOT" : "@GOTOFF"), FILE); \ goto DONE; \ --- 839,845 ---- do { \ if ((SIZE) == 4 && ((ENCODING) & 0x70) == DW_EH_PE_datarel) \ { \ ! fputs (ASM_LONG, FILE); \ assemble_name (FILE, XSTR (ADDR, 0)); \ fputs (((ENCODING) & DW_EH_PE_indirect ? "@GOT" : "@GOTOFF"), FILE); \ goto DONE; \ diff -Nrc3pad gcc-3.0.4/gcc/config/i386/scodbx.h gcc-3.1/gcc/config/i386/scodbx.h *** gcc-3.0.4/gcc/config/i386/scodbx.h Thu Nov 2 23:29:10 2000 --- gcc-3.1/gcc/config/i386/scodbx.h Thu Jan 1 00:00:00 1970 *************** *** 1,88 **** - /* Definitions for Intel 386 running SCO Unix System V, - using dbx-in-coff encapsulation. - Copyright (C) 1992, 1995, 1996, 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 "i386/svr3dbx.h" - - /* Overridden defines for SCO systems from sco.h. */ - - /* By default, target has a 80387, uses IEEE compatible arithmetic, - and returns float values in the 387, ie, - (TARGET_80387 | TARGET_FLOAT_RETURNS_IN_80387) - - SCO's software emulation of a 387 fails to handle the `fucomp' - opcode. fucomp is only used when generating IEEE compliant code. - So don't make TARGET_IEEE_FP default for SCO. */ - - #undef TARGET_DEFAULT - #define TARGET_DEFAULT (MASK_80387 | MASK_FLOAT_RETURNS) - - /* Use crt1.o as a startup file and crtn.o as a closing file. */ - - #undef STARTFILE_SPEC - #define STARTFILE_SPEC \ - "%{!r:%{!z:svr3.ifile%s}%{z:svr3z.ifile%s}}\ - %{pg:gcrt1.o%s}%{!pg:%{p:mcrt1.o%s}%{!p:crt1.o%s}}" - - /* Library spec, including SCO international language support. */ - - #undef LIB_SPEC - #define LIB_SPEC \ - "%{p:-L/usr/lib/libp}%{pg:-L/usr/lib/libp} %{scointl:libintl.a%s} -lc" - - /* Specify predefined symbols in preprocessor. */ - - #undef CPP_PREDEFINES - #define CPP_PREDEFINES "-Dunix -DM_UNIX -DM_I386 -DM_COFF -DM_WORDSWAP -Asystem=svr3" - - #undef CPP_SPEC - #define CPP_SPEC "%(cpp_cpu) %{scointl:-DM_INTERNAT}" - - /* This spec is used for telling cpp whether char is signed or not. */ - - #undef SIGNED_CHAR_SPEC - #if DEFAULT_SIGNED_CHAR - #define SIGNED_CHAR_SPEC \ - "%{funsigned-char:-D__CHAR_UNSIGNED__ -D_CHAR_UNSIGNED}" - #else - #define SIGNED_CHAR_SPEC \ - "%{!fsigned-char:-D__CHAR_UNSIGNED__ -D_CHAR_UNSIGNED}" - #endif - - /* caller has to pop the extra argument passed to functions that return - structures. */ - - #undef RETURN_POPS_ARGS - #define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) \ - ((FUNDECL) && TREE_CODE (FUNDECL) == IDENTIFIER_NODE ? 0 \ - : (TARGET_RTD \ - && (TYPE_ARG_TYPES (FUNTYPE) == 0 \ - || (TREE_VALUE (tree_last (TYPE_ARG_TYPES (FUNTYPE))) \ - == void_type_node))) ? (SIZE) \ - : 0) - /* On other 386 systems, the last line looks like this: - : (aggregate_value_p (TREE_TYPE (FUNTYPE))) ? GET_MODE_SIZE (Pmode) : 0) */ - - /* Use periods rather than dollar signs in special g++ assembler names. */ - - #define NO_DOLLAR_IN_LABEL - - /* Handle #pragma pack. */ - #define HANDLE_SYSV_PRAGMA --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/seq-gas.h gcc-3.1/gcc/config/i386/seq-gas.h *** gcc-3.0.4/gcc/config/i386/seq-gas.h Wed Dec 16 21:04:04 1998 --- gcc-3.1/gcc/config/i386/seq-gas.h Wed Oct 31 14:32:30 2001 *************** *** 1,7 **** /* Definitions for Sequent Intel 386 using GAS. Copyright (C) 1992 Free Software Foundation, Inc. ! /* Mostly it's like a Sequent 386 without GAS. */ #include "i386/sequent.h" --- 1,7 ---- /* Definitions for Sequent Intel 386 using GAS. Copyright (C) 1992 Free Software Foundation, Inc. ! /* Mostly it's like a Sequent 386 without GAS. */ #include "i386/sequent.h" *************** *** 37,46 **** count is in %cl. Some assemblers require %cl as an argument; some don't. ! GAS requires the %cl argument, so override i386/unix.h. */ #undef SHIFT_DOUBLE_OMITS_COUNT #define SHIFT_DOUBLE_OMITS_COUNT 0 ! /* Print opcodes the way that GAS expects them. */ #define GAS_MNEMONICS 1 --- 37,46 ---- count is in %cl. Some assemblers require %cl as an argument; some don't. ! GAS requires the %cl argument, so override i386/unix.h. */ #undef SHIFT_DOUBLE_OMITS_COUNT #define SHIFT_DOUBLE_OMITS_COUNT 0 ! /* Print opcodes the way that GAS expects them. */ #define GAS_MNEMONICS 1 diff -Nrc3pad gcc-3.0.4/gcc/config/i386/seq-sysv3.h gcc-3.1/gcc/config/i386/seq-sysv3.h *** gcc-3.0.4/gcc/config/i386/seq-sysv3.h Mon Sep 25 09:16:37 2000 --- gcc-3.1/gcc/config/i386/seq-sysv3.h Wed Oct 31 14:32:30 2001 *************** *** 26,43 **** from the .init section */ #define INVOKE__main ! /* Assembler pseudo-op for initialized shared variables (.shdata). */ #undef SHARED_SECTION_ASM_OP #define SHARED_SECTION_ASM_OP "\t.section .shdata, \"ws\"" ! /* Assembler pseudo-op for uninitialized shared global variables (.shbss). */ #undef ASM_OUTPUT_SHARED_COMMON #define ASM_OUTPUT_SHARED_COMMON(FILE, NAME, SIZE, ROUNDED) \ ( fputs(".comm ", (FILE)), \ assemble_name((FILE), (NAME)), \ fprintf((FILE), ",%u,-3\n", (SIZE))) ! /* Assembler pseudo-op for uninitialized shared local variables (.shbss). */ #undef SHARED_BSS_SECTION_ASM_OP #define SHARED_BSS_SECTION_ASM_OP "\t.section .shbss, \"bs\"" --- 26,43 ---- from the .init section */ #define INVOKE__main ! /* Assembler pseudo-op for initialized shared variables (.shdata). */ #undef SHARED_SECTION_ASM_OP #define SHARED_SECTION_ASM_OP "\t.section .shdata, \"ws\"" ! /* Assembler pseudo-op for uninitialized shared global variables (.shbss). */ #undef ASM_OUTPUT_SHARED_COMMON #define ASM_OUTPUT_SHARED_COMMON(FILE, NAME, SIZE, ROUNDED) \ ( fputs(".comm ", (FILE)), \ assemble_name((FILE), (NAME)), \ fprintf((FILE), ",%u,-3\n", (SIZE))) ! /* Assembler pseudo-op for uninitialized shared local variables (.shbss). */ #undef SHARED_BSS_SECTION_ASM_OP #define SHARED_BSS_SECTION_ASM_OP "\t.section .shbss, \"bs\"" diff -Nrc3pad gcc-3.0.4/gcc/config/i386/sequent.h gcc-3.1/gcc/config/i386/sequent.h *** gcc-3.0.4/gcc/config/i386/sequent.h Thu Nov 2 23:29:10 2000 --- gcc-3.1/gcc/config/i386/sequent.h Sun Nov 11 05:56:41 2001 *************** Boston, MA 02111-1307, USA. */ *** 28,35 **** because the assembler can't handle the fucom insn. Return float values in the 387. */ ! #undef TARGET_DEFAULT ! #define TARGET_DEFAULT (MASK_80387 | MASK_FLOAT_RETURNS) /* Specify predefined symbols in preprocessor. */ --- 28,35 ---- because the assembler can't handle the fucom insn. Return float values in the 387. */ ! #undef TARGET_SUBTARGET_DEFAULT ! #define TARGET_SUBTARGET_DEFAULT (MASK_80387 | MASK_FLOAT_RETURNS) /* Specify predefined symbols in preprocessor. */ *************** Boston, MA 02111-1307, USA. */ *** 96,108 **** && ! (REGNO == 2 && GET_MODE_UNIT_SIZE (MODE) > 4)) /* Output assembler code to FILE to increment profiler label # LABELNO ! for profiling a function entry. */ #undef FUNCTION_PROFILER #define FUNCTION_PROFILER(FILE, LABELNO) \ fprintf (FILE, "\tmovl $.LP%d,%%eax\n\tcall mcount\n", (LABELNO)); ! /* Assembler pseudo-op for shared data segment. */ #define SHARED_SECTION_ASM_OP "\t.shdata" /* A C statement or statements which output an assembler instruction --- 96,108 ---- && ! (REGNO == 2 && GET_MODE_UNIT_SIZE (MODE) > 4)) /* Output assembler code to FILE to increment profiler label # LABELNO ! for profiling a function entry. */ #undef FUNCTION_PROFILER #define FUNCTION_PROFILER(FILE, LABELNO) \ fprintf (FILE, "\tmovl $.LP%d,%%eax\n\tcall mcount\n", (LABELNO)); ! /* Assembler pseudo-op for shared data segment. */ #define SHARED_SECTION_ASM_OP "\t.shdata" /* A C statement or statements which output an assembler instruction *************** Boston, MA 02111-1307, USA. */ *** 135,147 **** #undef ASM_GENERATE_INTERNAL_LABEL #define ASM_GENERATE_INTERNAL_LABEL(BUF,PREFIX,NUMBER)\ ! sprintf ((BUF), "*.%s%d", (PREFIX), (NUMBER)) #undef ASM_OUTPUT_INTERNAL_LABEL #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM)\ fprintf (FILE, ".%s%d:\n", PREFIX, NUM) ! /* The native compiler passes the address of the returned structure in eax. */ #undef STRUCT_VALUE #undef STRUCT_VALUE_INCOMING #define STRUCT_VALUE_REGNUM 0 --- 135,147 ---- #undef ASM_GENERATE_INTERNAL_LABEL #define ASM_GENERATE_INTERNAL_LABEL(BUF,PREFIX,NUMBER)\ ! sprintf ((BUF), "*.%s%ld", (PREFIX), (long)(NUMBER)) #undef ASM_OUTPUT_INTERNAL_LABEL #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM)\ fprintf (FILE, ".%s%d:\n", PREFIX, NUM) ! /* The native compiler passes the address of the returned structure in eax. */ #undef STRUCT_VALUE #undef STRUCT_VALUE_INCOMING #define STRUCT_VALUE_REGNUM 0 diff -Nrc3pad gcc-3.0.4/gcc/config/i386/sol2.h gcc-3.1/gcc/config/i386/sol2.h *** gcc-3.0.4/gcc/config/i386/sol2.h Tue Nov 27 16:11:34 2001 --- gcc-3.1/gcc/config/i386/sol2.h Fri Mar 22 22:49:41 2002 *************** *** 1,5 **** /* Target definitions for GNU compiler for Intel 80386 running Solaris 2 ! Copyright (C) 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Fred Fish (fnf@cygnus.com). --- 1,5 ---- /* Target definitions for GNU compiler for Intel 80386 running Solaris 2 ! Copyright (C) 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Fred Fish (fnf@cygnus.com). *************** along with GNU CC; see the file COPYING. *** 20,26 **** the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - #include "i386/sysv4.h" /* We use stabs-in-elf for debugging, because that is what the native toolchain uses. */ --- 20,25 ---- *************** Boston, MA 02111-1307, USA. */ *** 40,45 **** --- 39,46 ---- #define ASM_SPEC \ "%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Wa,*:%*} -s" + #define CMOV_SUN_AS_SYNTAX 1 + #else /* GAS_REJECTS_MINUS_S */ /* Same as above, except for -s, unsupported by GNU as. */ *************** Boston, MA 02111-1307, USA. */ *** 56,65 **** bytes. The linker pads it to 16 bytes with a single 0x90 byte, and two 0x00000090 ints, which generates a segmentation violation when executed. This macro forces the assembler to do the padding, since ! it knows what it is doing. */ ! ! #define FORCE_INIT_SECTION_ALIGN asm (ALIGN_ASM_OP ## "16") ! #define FORCE_FINI_SECTION_ALIGN FORCE_INIT_SECTION_ALIGN /* Select a format to encode pointers in exception handling data. CODE is 0 for data, 1 for code labels, 2 for function pointers. GLOBAL is --- 57,64 ---- bytes. The linker pads it to 16 bytes with a single 0x90 byte, and two 0x00000090 ints, which generates a segmentation violation when executed. This macro forces the assembler to do the padding, since ! it knows what it is doing. */ ! #define FORCE_CODE_SECTION_ALIGN asm(ALIGN_ASM_OP "16"); /* Select a format to encode pointers in exception handling data. CODE is 0 for data, 1 for code labels, 2 for function pointers. GLOBAL is *************** Boston, MA 02111-1307, USA. */ *** 76,85 **** #undef WINT_TYPE_SIZE #define WINT_TYPE_SIZE BITS_PER_WORD ! /* Add "sun" to the list of symbols defined for SVR4. */ #undef CPP_PREDEFINES #define CPP_PREDEFINES \ ! "-Dunix -D__svr4__ -D__SVR4 -Dsun -Asystem=svr4" /* Solaris 2/Intel as chokes on #line directives. */ #undef CPP_SPEC --- 75,85 ---- #undef WINT_TYPE_SIZE #define WINT_TYPE_SIZE BITS_PER_WORD ! #define HANDLE_PRAGMA_REDEFINE_EXTNAME 1 ! #undef CPP_PREDEFINES #define CPP_PREDEFINES \ ! "-Dunix -D__svr4__ -D__SVR4 -Dsun -D__PRAGMA_REDEFINE_EXTNAME -Asystem=svr4" /* Solaris 2/Intel as chokes on #line directives. */ #undef CPP_SPEC *************** Boston, MA 02111-1307, USA. */ *** 157,159 **** --- 157,162 ---- #undef LOCAL_LABEL_PREFIX #define LOCAL_LABEL_PREFIX "." + + /* The Solaris assembler does not support .quad. Do not use it. */ + #undef ASM_QUAD diff -Nrc3pad gcc-3.0.4/gcc/config/i386/sun386.h gcc-3.1/gcc/config/i386/sun386.h *** gcc-3.0.4/gcc/config/i386/sun386.h Sun May 20 19:49:17 2001 --- gcc-3.1/gcc/config/i386/sun386.h Mon Dec 17 15:05:33 2001 *************** Boston, MA 02111-1307, USA. */ *** 33,52 **** /* Assembler pseudos to introduce constants of various size. */ - #define ASM_BYTE_OP "\t.byte\t" #define ASM_SHORT "\t.value\t" #define ASM_LONG "\t.long\t" /* How to output an ASCII string constant. */ ! #define ASM_OUTPUT_ASCII(FILE, p, size) \ do \ ! { int i = 0; \ ! while (i < (size)) \ { if (i%10 == 0) { if (i!=0) fprintf ((FILE), "\n"); \ ! fprintf ((FILE), "%s", ASM_BYTE_OP); } \ else fprintf ((FILE), ","); \ ! fprintf ((FILE), "0x%x", ((p)[i++] & 0377)) ;} \ fprintf ((FILE), "\n"); \ } while (0) --- 33,53 ---- /* Assembler pseudos to introduce constants of various size. */ #define ASM_SHORT "\t.value\t" #define ASM_LONG "\t.long\t" + #define ASM_QUAD "\t.quad\t" /* Should not be used for 32bit compilation. */ + /* How to output an ASCII string constant. */ ! #define ASM_OUTPUT_ASCII(FILE, PTR, SIZE) \ do \ ! { size_t i = 0, limit = (SIZE); \ ! while (i < limit) \ { if (i%10 == 0) { if (i!=0) fprintf ((FILE), "\n"); \ ! fputs ("\t.byte\t", (FILE)); } \ else fprintf ((FILE), ","); \ ! fprintf ((FILE), "0x%x", ((PTR)[i++] & 0377)) ;} \ fprintf ((FILE), "\n"); \ } while (0) *************** do \ *** 57,64 **** #define ASM_FILE_START(FILE) \ do { \ { \ ! int len = strlen (main_input_filename); \ ! char *na = main_input_filename + len; \ char shorter[15]; \ /* NA gets MAIN_INPUT_FILENAME sans directory names. */\ while (na > main_input_filename) \ --- 58,65 ---- #define ASM_FILE_START(FILE) \ do { \ { \ ! const int len = strlen (main_input_filename); \ ! const char *na = main_input_filename + len; \ char shorter[15]; \ /* NA gets MAIN_INPUT_FILENAME sans directory names. */\ while (na > main_input_filename) \ *************** do \ *** 74,80 **** fprintf (FILE, "\n"); \ } \ fprintf (FILE, "\t.version\t\"%s %s\"\n", \ ! language_string, version_string); \ if (optimize) ASM_FILE_START_1 (FILE); \ } while (0) --- 75,81 ---- fprintf (FILE, "\n"); \ } \ fprintf (FILE, "\t.version\t\"%s %s\"\n", \ ! lang_hooks.name, version_string); \ if (optimize) ASM_FILE_START_1 (FILE); \ } while (0) *************** do \ *** 127,135 **** This is suitable for output with `assemble_name'. */ #define ASM_GENERATE_INTERNAL_LABEL(BUF,PREFIX,NUMBER) \ ! sprintf ((BUF), "*.%s%d", (PREFIX), (NUMBER)) ! /* The prefix to add to user-visible assembler symbols. */ #define USER_LABEL_PREFIX "" --- 128,136 ---- This is suitable for output with `assemble_name'. */ #define ASM_GENERATE_INTERNAL_LABEL(BUF,PREFIX,NUMBER) \ ! sprintf ((BUF), "*.%s%ld", (PREFIX), (long)(NUMBER)) ! /* The prefix to add to user-visible assembler symbols. */ #define USER_LABEL_PREFIX "" diff -Nrc3pad gcc-3.0.4/gcc/config/i386/svr3dbx.h gcc-3.1/gcc/config/i386/svr3dbx.h *** gcc-3.0.4/gcc/config/i386/svr3dbx.h Wed Dec 16 21:04:18 1998 --- gcc-3.1/gcc/config/i386/svr3dbx.h Sun Nov 11 05:56:41 2001 *************** Boston, MA 02111-1307, USA. */ *** 33,39 **** #undef ASM_GENERATE_INTERNAL_LABEL #define ASM_GENERATE_INTERNAL_LABEL(BUF,PREFIX,NUMBER) \ ! sprintf ((BUF), "*.%s%d", (PREFIX), (NUMBER)) /* With the current gas, .align N aligns to an N-byte boundary. This is done to be compatible with the system assembler. --- 33,39 ---- #undef ASM_GENERATE_INTERNAL_LABEL #define ASM_GENERATE_INTERNAL_LABEL(BUF,PREFIX,NUMBER) \ ! sprintf ((BUF), "*.%s%ld", (PREFIX), (long)(NUMBER)) /* With the current gas, .align N aligns to an N-byte boundary. This is done to be compatible with the system assembler. diff -Nrc3pad gcc-3.0.4/gcc/config/i386/svr3gas.h gcc-3.1/gcc/config/i386/svr3gas.h *** gcc-3.0.4/gcc/config/i386/svr3gas.h Sun May 20 19:49:17 2001 --- gcc-3.1/gcc/config/i386/svr3gas.h Tue Sep 11 16:49:58 2001 *************** Boston, MA 02111-1307, USA. */ *** 94,108 **** unless the specific tm.h file turns it on by defining USE_CONST_SECTION as 1. */ - /* Define a few machine-specific details of the implementation of - constructors. - - The __CTORS_LIST__ goes in the .init section. Define CTOR_LIST_BEGIN - and CTOR_LIST_END to contribute to the .init section an instruction to - push a word containing 0 (or some equivalent of that). - - Define ASM_OUTPUT_CONSTRUCTOR to push the address of the constructor. */ - #define USE_CONST_SECTION 0 #define INIT_SECTION_ASM_OP "\t.section\t.init" --- 94,99 ---- *************** Boston, MA 02111-1307, USA. */ *** 113,120 **** /* CTOR_LIST_BEGIN and CTOR_LIST_END are machine-dependent because they push on the stack. */ ! #ifdef STACK_GROWS_DOWNWARD /* Constructor list on stack is in reverse order. Go to the end of the list and go backwards to call constructors in the right order. */ --- 104,115 ---- /* CTOR_LIST_BEGIN and CTOR_LIST_END are machine-dependent because they push on the stack. */ + /* This is copied from i386/sysv3.h. */ ! #define CTOR_LIST_BEGIN \ ! asm (INIT_SECTION_ASM_OP); \ ! asm ("pushl $0") ! #define CTOR_LIST_END CTOR_LIST_BEGIN /* Constructor list on stack is in reverse order. Go to the end of the list and go backwards to call constructors in the right order. */ *************** do { \ *** 127,144 **** (*--p) (); \ } while (0) - #else - - /* Constructor list on stack is in correct order. Just call them. */ - #define DO_GLOBAL_CTORS_BODY \ - do { \ - func_ptr *p, *beg = alloca (0); \ - for (p = beg; *p; ) \ - (*p++) (); \ - } while (0) - - #endif /* STACK_GROWS_DOWNWARD */ - /* Add extra sections .rodata, .init and .fini. */ #undef EXTRA_SECTIONS --- 122,127 ---- *************** const_section () \ *** 187,237 **** } \ } ! /* The ctors and dtors sections are not normally put into use ! by EXTRA_SECTIONS and EXTRA_SECTION_FUNCTIONS as defined in svr3.h, ! but it can't hurt to define these macros for whatever systems use them. */ ! #define CTORS_SECTION_FUNCTION \ ! void \ ! ctors_section () \ ! { \ ! if (in_section != in_ctors) \ ! { \ ! fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP); \ ! in_section = in_ctors; \ ! } \ ! } ! ! #define DTORS_SECTION_FUNCTION \ ! void \ ! dtors_section () \ ! { \ ! if (in_section != in_dtors) \ ! { \ ! fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP); \ ! in_section = in_dtors; \ ! } \ ! } ! ! /* This is machine-dependent ! because it needs to push something on the stack. */ ! #undef ASM_OUTPUT_CONSTRUCTOR ! ! /* A C statement (sans semicolon) to output an element in the table of ! global destructors. */ ! #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \ ! do { \ ! fini_section (); \ ! fputs (ASM_LONG, FILE); \ ! assemble_name (FILE, NAME); \ ! fprintf (FILE, "\n"); \ ! } while (0) /* A C statement or statements to switch to the appropriate section for output of DECL. DECL is either a `VAR_DECL' node or a constant of some sort. RELOC indicates whether forming the initial value of DECL requires link-time relocations. */ ! #define SELECT_SECTION(DECL,RELOC) \ { \ if (TREE_CODE (DECL) == STRING_CST) \ { \ --- 170,183 ---- } \ } ! #define TARGET_ASM_CONSTRUCTOR ix86_svr3_asm_out_constructor /* A C statement or statements to switch to the appropriate section for output of DECL. DECL is either a `VAR_DECL' node or a constant of some sort. RELOC indicates whether forming the initial value of DECL requires link-time relocations. */ ! #define SELECT_SECTION(DECL,RELOC,ALIGN) \ { \ if (TREE_CODE (DECL) == STRING_CST) \ { \ *************** dtors_section () \ *** 261,292 **** in the case of a `const_int' rtx. Currently, these always go into the const section. */ ! #define SELECT_RTX_SECTION(MODE,RTX) const_section() ! ! /* This is copied from i386/sysv3.h. */ ! ! /* Define a few machine-specific details of the implementation of ! constructors. ! ! The __CTORS_LIST__ goes in the .init section. Define CTOR_LIST_BEGIN ! and CTOR_LIST_END to contribute to the .init section an instruction to ! push a word containing 0 (or some equivalent of that). ! ! ASM_OUTPUT_CONSTRUCTOR should be defined to push the address of the ! constructor. */ ! ! #undef INIT_SECTION_ASM_OP ! #define INIT_SECTION_ASM_OP "\t.section .init,\"x\"" ! ! #define CTOR_LIST_BEGIN \ ! asm (INIT_SECTION_ASM_OP); \ ! asm ("pushl $0") ! #define CTOR_LIST_END CTOR_LIST_BEGIN ! ! #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ ! do { \ ! init_section (); \ ! fprintf (FILE, "\tpushl $"); \ ! assemble_name (FILE, NAME); \ ! fprintf (FILE, "\n"); \ ! } while (0) --- 207,210 ---- in the case of a `const_int' rtx. Currently, these always go into the const section. */ ! #define SELECT_RTX_SECTION(MODE,RTX,ALIGN) const_section() diff -Nrc3pad gcc-3.0.4/gcc/config/i386/sysv3.h gcc-3.1/gcc/config/i386/sysv3.h *** gcc-3.0.4/gcc/config/i386/sysv3.h Thu Feb 8 19:15:37 2001 --- gcc-3.1/gcc/config/i386/sysv3.h Thu Aug 9 22:33:24 2001 *************** Boston, MA 02111-1307, USA. */ *** 102,111 **** The __CTORS_LIST__ goes in the .init section. Define CTOR_LIST_BEGIN and CTOR_LIST_END to contribute to the .init section an instruction to ! push a word containing 0 (or some equivalent of that). ! ! ASM_OUTPUT_CONSTRUCTOR should be defined to push the address of the ! constructor. */ #undef INIT_SECTION_ASM_OP #define INIT_SECTION_ASM_OP "\t.section .init,\"x\"" --- 102,108 ---- The __CTORS_LIST__ goes in the .init section. Define CTOR_LIST_BEGIN and CTOR_LIST_END to contribute to the .init section an instruction to ! push a word containing 0 (or some equivalent of that). */ #undef INIT_SECTION_ASM_OP #define INIT_SECTION_ASM_OP "\t.section .init,\"x\"" *************** Boston, MA 02111-1307, USA. */ *** 115,124 **** asm ("pushl $0") #define CTOR_LIST_END CTOR_LIST_BEGIN ! #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ ! do { \ ! init_section (); \ ! fprintf (FILE, "\tpushl $"); \ ! assemble_name (FILE, NAME); \ ! fprintf (FILE, "\n"); \ ! } while (0) --- 112,115 ---- asm ("pushl $0") #define CTOR_LIST_END CTOR_LIST_BEGIN ! #define TARGET_ASM_CONSTRUCTOR ix86_svr3_asm_out_constructor diff -Nrc3pad gcc-3.0.4/gcc/config/i386/sysv4.h gcc-3.1/gcc/config/i386/sysv4.h *** gcc-3.0.4/gcc/config/i386/sysv4.h Tue Jan 22 20:03:17 2002 --- gcc-3.1/gcc/config/i386/sysv4.h Tue Jan 22 19:59:30 2002 *************** *** 1,5 **** /* Target definitions for GNU compiler for Intel 80386 running System V.4 ! Copyright (C) 1991 Free Software Foundation, Inc. Written by Ron Guilmette (rfg@netcom.com). --- 1,5 ---- /* Target definitions for GNU compiler for Intel 80386 running System V.4 ! Copyright (C) 1991, 2001 Free Software Foundation, Inc. Written by Ron Guilmette (rfg@netcom.com). *************** along with GNU CC; see the file COPYING. *** 20,28 **** the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - #include "i386/i386.h" /* Base i386 target machine definitions */ - #include "i386/att.h" /* Use the i386 AT&T assembler syntax */ - #include "svr4.h" /* Definitions common to all SVR4 targets */ #undef TARGET_VERSION #define TARGET_VERSION fprintf (stderr, " (i386 System V Release 4)"); --- 20,25 ---- *************** Boston, MA 02111-1307, USA. */ *** 41,101 **** #define CPP_PREDEFINES \ "-Dunix -D__svr4__ -Asystem=unix -Asystem=svr4" - /* This is how to output assembly code to define a `float' constant. - We always have to use a .long pseudo-op to do this because the native - SVR4 ELF assembler is buggy and it generates incorrect values when we - try to use the .float pseudo-op instead. */ - - #undef ASM_OUTPUT_FLOAT - #define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - do { long value; \ - REAL_VALUE_TO_TARGET_SINGLE ((VALUE), value); \ - if (sizeof (int) == sizeof (long)) \ - fprintf((FILE), "%s0x%x\n", ASM_LONG, value); \ - else \ - fprintf((FILE), "%s0x%lx\n", ASM_LONG, value); \ - } while (0) - - /* This is how to output assembly code to define a `double' constant. - We always have to use a pair of .long pseudo-ops to do this because - the native SVR4 ELF assembler is buggy and it generates incorrect - values when we try to use the .double pseudo-op instead. */ - - #undef ASM_OUTPUT_DOUBLE - #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - do { long value[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), value); \ - if (sizeof (int) == sizeof (long)) \ - { \ - fprintf((FILE), "%s0x%x\n", ASM_LONG, value[0]); \ - fprintf((FILE), "%s0x%x\n", ASM_LONG, value[1]); \ - } \ - else \ - { \ - fprintf((FILE), "%s0x%lx\n", ASM_LONG, value[0]); \ - fprintf((FILE), "%s0x%lx\n", ASM_LONG, value[1]); \ - } \ - } while (0) - - - #undef ASM_OUTPUT_LONG_DOUBLE - #define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \ - do { long value[3]; \ - REAL_VALUE_TO_TARGET_LONG_DOUBLE ((VALUE), value); \ - if (sizeof (int) == sizeof (long)) \ - { \ - fprintf((FILE), "%s0x%x\n", ASM_LONG, value[0]); \ - fprintf((FILE), "%s0x%x\n", ASM_LONG, value[1]); \ - fprintf((FILE), "%s0x%x\n", ASM_LONG, value[2]); \ - } \ - else \ - { \ - fprintf((FILE), "%s0x%lx\n", ASM_LONG, value[0]); \ - fprintf((FILE), "%s0x%lx\n", ASM_LONG, value[1]); \ - fprintf((FILE), "%s0x%lx\n", ASM_LONG, value[2]); \ - } \ - } while (0) - /* Output at beginning of assembler file. */ /* The .file command should always begin the output. */ --- 38,43 ---- *************** do { long value[3]; \ *** 134,140 **** } \ for (p = _ascii_bytes; p < limit && *p != '\0'; p++) \ continue; \ ! if (p < limit && (p - _ascii_bytes) <= STRING_LIMIT) \ { \ if (bytes_in_chunk > 0) \ { \ --- 76,82 ---- } \ for (p = _ascii_bytes; p < limit && *p != '\0'; p++) \ continue; \ ! if (p < limit && (p - _ascii_bytes) <= (long) STRING_LIMIT) \ { \ if (bytes_in_chunk > 0) \ { \ *************** do { long value[3]; \ *** 159,177 **** } \ while (0) - /* This is 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) - - /* Indicate that jump tables go in the text section. This is - necessary when compiling PIC code. */ - - #define JUMP_TABLES_IN_TEXT_SECTION (flag_pic) - /* A C statement (sans semicolon) to output to the stdio stream FILE the assembler definition of uninitialized global DECL named NAME whose size is SIZE bytes and alignment is ALIGN bytes. --- 101,106 ---- *************** do { long value[3]; \ *** 186,192 **** do { \ if ((SIZE) == 4 && ((ENCODING) & 0x70) == DW_EH_PE_datarel) \ { \ ! fputs (UNALIGNED_INT_ASM_OP, FILE); \ assemble_name (FILE, XSTR (ADDR, 0)); \ fputs (((ENCODING) & DW_EH_PE_indirect ? "@GOT" : "@GOTOFF"), FILE); \ goto DONE; \ --- 115,121 ---- do { \ if ((SIZE) == 4 && ((ENCODING) & 0x70) == DW_EH_PE_datarel) \ { \ ! fputs (ASM_LONG, FILE); \ assemble_name (FILE, XSTR (ADDR, 0)); \ fputs (((ENCODING) & DW_EH_PE_indirect ? "@GOT" : "@GOTOFF"), FILE); \ goto DONE; \ diff -Nrc3pad gcc-3.0.4/gcc/config/i386/sysv5.h gcc-3.1/gcc/config/i386/sysv5.h *** gcc-3.0.4/gcc/config/i386/sysv5.h Mon Jan 31 07:28:05 2000 --- gcc-3.1/gcc/config/i386/sysv5.h Fri Oct 19 22:27:28 2001 *************** the Free Software Foundation, 59 Temple *** 20,27 **** Boston, MA 02111-1307, USA. */ - #include "i386/sysv4.h" - /* Dwarf2 is supported by native debuggers */ #undef PREFERRED_DEBUGGING_TYPE --- 20,25 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/t-beos gcc-3.1/gcc/config/i386/t-beos *** gcc-3.0.4/gcc/config/i386/t-beos Thu May 17 01:34:30 2001 --- gcc-3.1/gcc/config/i386/t-beos Thu Nov 15 13:05:53 2001 *************** *** 1,8 **** - # Do not build libgcc1. - LIBGCC1 = - CROSS_LIBGCC1 = - # There are system headers elsewhere, but these are the ones that # we are most likely to want to apply any fixes to. SYSTEM_HEADER_DIR = /boot/develop/headers/posix CROSS_SYSTEM_HEADER_DIR = $(tooldir)/sys-include/posix --- 1,7 ---- # There are system headers elsewhere, but these are the ones that # we are most likely to want to apply any fixes to. SYSTEM_HEADER_DIR = /boot/develop/headers/posix CROSS_SYSTEM_HEADER_DIR = $(tooldir)/sys-include/posix + + # Don't run fixproto + STMP_FIXPROTO = diff -Nrc3pad gcc-3.0.4/gcc/config/i386/t-cygwin gcc-3.1/gcc/config/i386/t-cygwin *** gcc-3.0.4/gcc/config/i386/t-cygwin Thu Aug 9 02:26:11 2001 --- gcc-3.1/gcc/config/i386/t-cygwin Thu Nov 15 13:05:53 2001 *************** *** 1,5 **** - LIBGCC1 = libgcc1-asm.a - CROSS_LIBGCC1 = libgcc1-asm.a LIB1ASMSRC = i386/cygwin.asm LIB1ASMFUNCS = _chkstk --- 1,3 ---- *************** LIBGCC2_INCLUDES = -I$(srcdir)/../winsup *** 18,20 **** --- 16,21 ---- winnt.o: $(srcdir)/config/i386/winnt.c $(RTL_H) $(TREE_H) $(CONFIG_H) $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/config/i386/winnt.c + + # Don't run fixproto + STMP_FIXPROTO = diff -Nrc3pad gcc-3.0.4/gcc/config/i386/t-dgux gcc-3.1/gcc/config/i386/t-dgux *** gcc-3.0.4/gcc/config/i386/t-dgux Fri May 28 02:54:05 1999 --- gcc-3.1/gcc/config/i386/t-dgux Thu Nov 15 13:05:53 2001 *************** EXTRA_PARTS=crti.o crtbegin.o crtend.o *** 6,8 **** --- 6,11 ---- crti.o: $(srcdir)/config/i386/sol2-ci.asm $(GCC_PASSES) sed -e '/^!/d' <$(srcdir)/config/i386/sol2-ci.asm >crti.s $(GCC_FOR_TARGET) -c -o crti.o crti.s + + # Don't run fixproto + STMP_FIXPROTO = diff -Nrc3pad gcc-3.0.4/gcc/config/i386/t-djgpp gcc-3.1/gcc/config/i386/t-djgpp *** gcc-3.0.4/gcc/config/i386/t-djgpp Sat Sep 4 15:08:56 1999 --- gcc-3.1/gcc/config/i386/t-djgpp Thu Jan 24 18:05:40 2002 *************** *** 1,2 **** ! LIBGCC1 = libgcc1.null ! CROSS_LIBGCC1 = libgcc1.null --- 1,2 ---- ! # Location of DJGPP's header directory. ! NATIVE_SYSTEM_HEADER_DIR=$(DJDIR)/include diff -Nrc3pad gcc-3.0.4/gcc/config/i386/t-i386bare gcc-3.1/gcc/config/i386/t-i386bare *** gcc-3.0.4/gcc/config/i386/t-i386bare Wed Dec 16 21:04:30 1998 --- gcc-3.1/gcc/config/i386/t-i386bare Thu Jan 1 00:00:00 1970 *************** *** 1,3 **** - # The i386 md has all of these taken care of, according to sef. - LIBGCC1 = - CROSS_LIBGCC1 = --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/t-i386elf gcc-3.1/gcc/config/i386/t-i386elf *** gcc-3.0.4/gcc/config/i386/t-i386elf Sat Sep 4 15:08:56 1999 --- gcc-3.1/gcc/config/i386/t-i386elf Thu May 17 03:15:56 2001 *************** *** 1,6 **** - LIBGCC1 = libgcc1.null - CROSS_LIBGCC1 = libgcc1.null - # For svr4 we build crtbegin.o and crtend.o which serve to add begin and # end labels to the .ctors and .dtors section when we link using gcc. --- 1,3 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/t-interix gcc-3.1/gcc/config/i386/t-interix *** gcc-3.0.4/gcc/config/i386/t-interix Thu May 17 01:34:30 2001 --- gcc-3.1/gcc/config/i386/t-interix Fri Apr 12 19:44:42 2002 *************** *** 1,13 **** - # t-interix - LIBGCC1 = libgcc1-asm.a - CROSS_LIBGCC1 = libgcc1-asm.a - LIB1ASMSRC = i386/cygwin.asm LIB1ASMFUNCS = _chkstk interix.o: $(srcdir)/config/i386/interix.c $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/config/i386/interix.c - # System headers will track gcc's needs. - # Even LANG_EXTRA_HEADERS may be temporary. - USER_H=$(LANG_EXTRA_HEADERS) --- 1,6 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/t-linux64 gcc-3.1/gcc/config/i386/t-linux64 *** gcc-3.0.4/gcc/config/i386/t-linux64 Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/i386/t-linux64 Wed May 8 23:23:20 2002 *************** *** 0 **** --- 1,15 ---- + # On x86-64 we do not need any exports for glibc for 64-bit libgcc_s, + # override the settings + # from t-slibgcc-elf-ver and t-linux + SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver \ + $(srcdir)/config/i386/libgcc-x86_64-glibc.ver + + MULTILIB_OPTIONS = m64/m32 + MULTILIB_DIRNAMES = 64 32 + + LIBGCC = stmp-multilib + INSTALL_LIBGCC = install-multilib + + EXTRA_MULTILIB_PARTS=crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o + + SHLIB_SLIBDIR_SUFFIXES = 64:64 32: diff -Nrc3pad gcc-3.0.4/gcc/config/i386/t-netware gcc-3.1/gcc/config/i386/t-netware *** gcc-3.0.4/gcc/config/i386/t-netware Wed Oct 18 19:57:54 2000 --- gcc-3.1/gcc/config/i386/t-netware Thu May 17 03:15:56 2001 *************** *** 1,5 **** - LIBGCC1 = libgcc1.null - CROSS_LIBGCC1 = libgcc1.null - # Our header files are supposed to be correct, nein? STMP_FIXPROTO = --- 1,2 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/t-next gcc-3.1/gcc/config/i386/t-next *** gcc-3.0.4/gcc/config/i386/t-next Wed Dec 16 21:04:32 1998 --- gcc-3.1/gcc/config/i386/t-next Thu May 17 03:15:56 2001 *************** *** 1,7 **** - # libgcc1.c is not needed, since the standard library has these functions. - LIBGCC1=libgcc1.null - CROSS_LIBGCC1=libgcc1.null - # Specify other dirs of system header files to be fixed. OTHER_FIXINCLUDES_DIRS= /LocalDeveloper/Headers --- 1,3 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/t-sco5 gcc-3.1/gcc/config/i386/t-sco5 *** gcc-3.0.4/gcc/config/i386/t-sco5 Sat Dec 30 17:14:52 2000 --- gcc-3.1/gcc/config/i386/t-sco5 Thu Nov 15 13:05:53 2001 *************** TARGET_LIBGCC2_CFLAGS = -fPIC *** 13,15 **** --- 13,18 ---- crti.o: $(srcdir)/config/i386/sol2-ci.asm $(GCC_PASSES) sed -e '/^!/d' <$(srcdir)/config/i386/sol2-ci.asm >crti.s $(GCC_FOR_TARGET) -c -o crti.o crti.s + + # See all the declarations. + FIXPROTO_DEFINES = -D_XOPEN_SOURCE -D_POSIX_C_SOURCE=2 diff -Nrc3pad gcc-3.0.4/gcc/config/i386/t-sco5gas gcc-3.1/gcc/config/i386/t-sco5gas *** gcc-3.0.4/gcc/config/i386/t-sco5gas Tue Feb 19 17:42:43 2002 --- gcc-3.1/gcc/config/i386/t-sco5gas Thu Nov 15 13:05:53 2001 *************** *** 1,6 **** # The pushl in CTOR initialization interferes with frame pointer elimination. CRTSTUFF_T_CFLAGS = -fPIC -fno-omit-frame-pointer ! CRTSTUFF_T_CFLAGS_S = -fno-omit-frame-pointer # # I am still a little unsure of the multilib architecture. The following --- 1,6 ---- # The pushl in CTOR initialization interferes with frame pointer elimination. CRTSTUFF_T_CFLAGS = -fPIC -fno-omit-frame-pointer ! CRTSTUFF_T_CFLAGS_S = -mcoff -fno-omit-frame-pointer # # I am still a little unsure of the multilib architecture. The following *************** INSTALL_LIBGCC=install-multilib *** 18,20 **** --- 18,23 ---- crti.o: $(srcdir)/config/i386/sol2-ci.asm $(GCC_PASSES) sed -e '/^!/d' <$(srcdir)/config/i386/sol2-ci.asm >crti.s $(GCC_FOR_TARGET) -c -o crti.o crti.s + + # See all the declarations. + FIXPROTO_DEFINES = -D_XOPEN_SOURCE -D_POSIX_C_SOURCE=2 diff -Nrc3pad gcc-3.0.4/gcc/config/i386/t-sol2 gcc-3.1/gcc/config/i386/t-sol2 *** gcc-3.0.4/gcc/config/i386/t-sol2 Wed Dec 16 21:04:37 1998 --- gcc-3.1/gcc/config/i386/t-sol2 Thu May 17 03:15:56 2001 *************** *** 1,9 **** - # we need to supply our own assembly versions of libgcc1.c files, - # since the user may not have native 'cc' available - - LIBGCC1 = libgcc1.null - CROSS_LIBGCC1 = libgcc1.null - # gmon build rule: gmon.o: $(srcdir)/config/i386/gmon-sol2.c $(GCC_PASSES) $(CONFIG_H) $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) \ --- 1,3 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/t-vsta gcc-3.1/gcc/config/i386/t-vsta *** gcc-3.0.4/gcc/config/i386/t-vsta Wed Dec 16 21:04:40 1998 --- gcc-3.1/gcc/config/i386/t-vsta Thu Jan 1 00:00:00 1970 *************** *** 1,2 **** - LIBGCC1 = libgcc1.null - CROSS_LIBGCC1 = libgcc1.null --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/t-winnt gcc-3.1/gcc/config/i386/t-winnt *** gcc-3.0.4/gcc/config/i386/t-winnt Sat Oct 16 18:22:29 1999 --- gcc-3.1/gcc/config/i386/t-winnt Thu Jan 1 00:00:00 1970 *************** *** 1,6 **** - winnt.o: $(srcdir)/config/i386/winnt.c $(RTL_H) $(TREE_H) - $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/config/i386/winnt.c - oldnames.o: $(srcdir)/config/winnt/oldnames.c - $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/config/winnt/oldnames.c - spawnv.o: $(srcdir)/config/winnt/spawnv.c - $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/config/winnt/spawnv.c --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/udk.h gcc-3.1/gcc/config/i386/udk.h *** gcc-3.0.4/gcc/config/i386/udk.h Thu Jun 3 21:27:41 1999 --- gcc-3.1/gcc/config/i386/udk.h Fri Oct 19 22:27:28 2001 *************** *** 6,13 **** /* We're very much the SVR4 target with "/udk" prepended to everything that's interesting */ - #include "i386/sysv5.h" - #undef MD_EXEC_PREFIX #define MD_EXEC_PREFIX "/udk/usr/ccs/bin/" --- 6,11 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/unix.h gcc-3.1/gcc/config/i386/unix.h *** gcc-3.0.4/gcc/config/i386/unix.h Fri Sep 14 16:42:30 2001 --- gcc-3.1/gcc/config/i386/unix.h Fri Sep 21 12:55:18 2001 *************** *** 1,5 **** /* Definitions for Unix assembler syntax for the Intel 80386. ! Copyright (C) 1988, 1994, 1999, 2000 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,5 ---- /* Definitions for Unix assembler syntax for the Intel 80386. ! Copyright (C) 1988, 1994, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of GNU CC. *************** Boston, MA 02111-1307, USA. */ *** 67,73 **** /* By default, target has a 80387, uses IEEE compatible arithmetic, and returns float values in the 387. */ ! #define TARGET_DEFAULT (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS) /* Floating-point return values come in the FP register. */ --- 67,73 ---- /* By default, target has a 80387, uses IEEE compatible arithmetic, and returns float values in the 387. */ ! #define TARGET_SUBTARGET_DEFAULT (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS) /* Floating-point return values come in the FP register. */ *************** Boston, MA 02111-1307, USA. */ *** 77,87 **** : (MODE) == TImode || VECTOR_MODE_P (MODE) ? FIRST_SSE_REG \ : 0) - /* 1 if N is a possible register number for a function value. */ - - #define FUNCTION_VALUE_REGNO_P(N) \ - ((N) == 0 || ((N)== FIRST_FLOAT_REG && TARGET_FLOAT_RETURNS_IN_80387)) - /* 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) \ --- 77,82 ---- *************** do { \ *** 106,112 **** xops[1] = gen_rtx_MEM (SImode, plus_constant (stack_pointer_rtx, 4)); \ output_asm_insn ("add{l} {%0, %1|%1, %0}", xops); \ \ ! if (flag_pic) \ { \ xops[0] = pic_offset_table_rtx; \ xops[1] = gen_label_rtx (); \ --- 101,107 ---- xops[1] = gen_rtx_MEM (SImode, plus_constant (stack_pointer_rtx, 4)); \ output_asm_insn ("add{l} {%0, %1|%1, %0}", xops); \ \ ! if (flag_pic && !TARGET_64BIT) \ { \ xops[0] = pic_offset_table_rtx; \ xops[1] = gen_label_rtx (); \ *************** do { \ *** 125,130 **** --- 120,131 ---- asm_fprintf (FILE, "\tpop{l\t%%ebx|\t%%ebx}\n"); \ asm_fprintf (FILE, "\tjmp\t{*%%ecx|%%ecx}\n"); \ } \ + else if (flag_pic && TARGET_64BIT) \ + { \ + fprintf (FILE, "\tjmp *"); \ + assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \ + fprintf (FILE, "@GOTPCREL(%%rip)\n"); \ + } \ else \ { \ fprintf (FILE, "\tjmp "); \ diff -Nrc3pad gcc-3.0.4/gcc/config/i386/uwin.asm gcc-3.1/gcc/config/i386/uwin.asm *** gcc-3.0.4/gcc/config/i386/uwin.asm Sat Sep 4 15:08:57 1999 --- gcc-3.1/gcc/config/i386/uwin.asm Wed Oct 31 14:32:30 2001 *************** *** 1,4 **** ! /* stuff needed for libgcc1 on win32. */ #ifdef L_chkstk --- 1,4 ---- ! /* stuff needed for libgcc on win32. */ #ifdef L_chkstk diff -Nrc3pad gcc-3.0.4/gcc/config/i386/uwin.h gcc-3.1/gcc/config/i386/uwin.h *** gcc-3.0.4/gcc/config/i386/uwin.h Thu Nov 2 23:29:10 2000 --- gcc-3.1/gcc/config/i386/uwin.h Sun Dec 16 15:40:57 2001 *************** GNU General Public License for more deta *** 20,26 **** 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. */ /* Most of this is the same as for Cygwin32, except for changing some specs. */ --- 20,26 ---- 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. */ /* Most of this is the same as for Cygwin32, except for changing some specs. */ *************** Boston, MA 02111-1307, USA. */ *** 29,34 **** --- 29,35 ---- #define STANDARD_INCLUDE_COMPONENT "UWIN" #define SYSTEM_INCLUDE_DIR "/usr/gnu/include" + #undef MD_STARTFILE_PREFIX #define MD_STARTFILE_PREFIX "/usr/gnu/lib/" #undef CPP_PREDEFINES *************** Boston, MA 02111-1307, USA. */ *** 53,59 **** #define LIB_SPEC \ "%{pg:-lgmon} %{mwindows:-luser32 -lgdi32 -lcomdlg32} -lkernel32 -ladvapi32" ! /* This is needed in g77spec.c for now. Will be removed in the future. */ #define WIN32_UWIN_TARGET 1 /* Include in the mingw32 libraries with libgcc */ --- 54,60 ---- #define LIB_SPEC \ "%{pg:-lgmon} %{mwindows:-luser32 -lgdi32 -lcomdlg32} -lkernel32 -ladvapi32" ! /* This is needed in g77spec.c for now. Will be removed in the future. */ #define WIN32_UWIN_TARGET 1 /* Include in the mingw32 libraries with libgcc */ *************** Boston, MA 02111-1307, USA. */ *** 69,75 **** #undef STARTFILE_SPEC #define STARTFILE_SPEC "%{mdll:dllcrt2%O%s} %{!mdll:crt2%O%s} %{pg:gcrt2%O%s}" ! /* These are PE BFD bug workarounds. Should go away eventually. */ /* Write the extra assembler code needed to declare a function properly. If we are generating SDB debugging information, this --- 70,76 ---- #undef STARTFILE_SPEC #define STARTFILE_SPEC "%{mdll:dllcrt2%O%s} %{!mdll:crt2%O%s} %{pg:gcrt2%O%s}" ! /* These are PE BFD bug workarounds. Should go away eventually. */ /* Write the extra assembler code needed to declare a function properly. If we are generating SDB debugging information, this *************** Boston, MA 02111-1307, USA. */ *** 80,86 **** { \ if (i386_pe_dllexport_name_p (NAME)) \ i386_pe_record_exported_symbol (NAME, 0); \ ! /* UWIN binutils bug workaround. */ \ if (0 && write_symbols != SDB_DEBUG) \ i386_pe_declare_function_type (FILE, NAME, TREE_PUBLIC (DECL)); \ ASM_OUTPUT_LABEL (FILE, NAME); \ --- 81,87 ---- { \ if (i386_pe_dllexport_name_p (NAME)) \ i386_pe_record_exported_symbol (NAME, 0); \ ! /* UWIN binutils bug workaround. */ \ if (0 && write_symbols != SDB_DEBUG) \ i386_pe_declare_function_type (FILE, NAME, TREE_PUBLIC (DECL)); \ ASM_OUTPUT_LABEL (FILE, NAME); \ diff -Nrc3pad gcc-3.0.4/gcc/config/i386/vsta.h gcc-3.1/gcc/config/i386/vsta.h *** gcc-3.0.4/gcc/config/i386/vsta.h Sun May 20 19:49:17 2001 --- gcc-3.1/gcc/config/i386/vsta.h Thu Aug 9 22:33:24 2001 *************** Boston, MA 02111-1307, USA. */ *** 27,77 **** #undef CPP_PREDEFINES #endif #define CPP_PREDEFINES "-Dunix -DVSTA -Asystem=unix -Asystem=vsta" - - #undef EXTRA_SECTIONS - #define EXTRA_SECTIONS in_ctor, in_dtor - - #undef EXTRA_SECTION_FUNCTIONS - #define EXTRA_SECTION_FUNCTIONS \ - CTOR_SECTION_FUNCTION \ - DTOR_SECTION_FUNCTION - - #define CTOR_SECTION_FUNCTION \ - void \ - ctor_section () \ - { \ - if (in_section != in_ctor) \ - { \ - fprintf (asm_out_file, "\t.section .ctor\n"); \ - in_section = in_ctor; \ - } \ - } - - #define DTOR_SECTION_FUNCTION \ - void \ - dtor_section () \ - { \ - if (in_section != in_dtor) \ - { \ - fprintf (asm_out_file, "\t.section .dtor\n"); \ - in_section = in_dtor; \ - } \ - } - - #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ - do { \ - ctor_section (); \ - fputs (ASM_LONG, FILE); \ - assemble_name (FILE, NAME); \ - fprintf (FILE, "\n"); \ - } while (0) - - #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \ - do { \ - dtor_section (); \ - fputs (ASM_LONG, FILE); \ - assemble_name (FILE, NAME); \ - fprintf (FILE, "\n"); \ - } while (0) - - --- 27,29 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/vxi386.h gcc-3.1/gcc/config/i386/vxi386.h *** gcc-3.0.4/gcc/config/i386/vxi386.h Thu Nov 2 23:29:10 2000 --- gcc-3.1/gcc/config/i386/vxi386.h Wed Oct 31 14:32:30 2001 *************** Boston, MA 02111-1307, USA. */ *** 48,54 **** #define LIB_SPEC "" /* VxWorks uses object files, not loadable images. make linker just ! combine objects. */ #undef LINK_SPEC #define LINK_SPEC "-r" --- 48,54 ---- #define LIB_SPEC "" /* VxWorks uses object files, not loadable images. make linker just ! combine objects. */ #undef LINK_SPEC #define LINK_SPEC "-r" diff -Nrc3pad gcc-3.0.4/gcc/config/i386/win-nt.h gcc-3.1/gcc/config/i386/win-nt.h *** gcc-3.0.4/gcc/config/i386/win-nt.h Sun May 20 19:49:17 2001 --- gcc-3.1/gcc/config/i386/win-nt.h Thu Jan 1 00:00:00 1970 *************** *** 1,149 **** - /* Operating system specific defines to be used when targeting GCC for - Windows NT 3.x on an i386. - Copyright (C) 1994, 1995, 1998, 1999 Free Software Foundation, Inc. - Contributed by Douglas B. Rupp (drupp@cs.washington.edu). - - 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. */ - - #define YES_UNDERSCORES - - #include "i386/gas.h" - - #ifdef CPP_PREDEFINES - #undef CPP_PREDEFINES - #endif - #define CPP_PREDEFINES "-Dunix -DWIN32 -D_WIN32 \ - -DWINNT -D_M_IX86=300 -D_X86_=1 -D__STDC__=0 -DALMOST_STDC -D_MSC_VER=800 \ - -D__stdcall=__attribute__((__stdcall__)) \ - -D__cdecl=__attribute__((__cdecl__)) \ - -D_cdecl=__attribute__((__cdecl__)) \ - -Asystem=unix -Asystem=winnt" - - #define SIZE_TYPE "unsigned int" - #define PTRDIFF_TYPE "int" - #define WCHAR_UNSIGNED 1 - #define WCHAR_TYPE_SIZE 16 - #define WCHAR_TYPE "short unsigned int" - #undef LONG_DOUBLE_TYPE_SIZE - #define LONG_DOUBLE_TYPE_SIZE 64 - - #undef EXTRA_SECTIONS - #define EXTRA_SECTIONS in_ctor, in_dtor - - #undef EXTRA_SECTION_FUNCTIONS - #define EXTRA_SECTION_FUNCTIONS \ - CTOR_SECTION_FUNCTION \ - DTOR_SECTION_FUNCTION - - #define CTOR_SECTION_FUNCTION \ - void \ - ctor_section () \ - { \ - if (in_section != in_ctor) \ - { \ - fprintf (asm_out_file, "\t.section .ctor\n"); \ - in_section = in_ctor; \ - } \ - } - - #define DTOR_SECTION_FUNCTION \ - void \ - dtor_section () \ - { \ - if (in_section != in_dtor) \ - { \ - fprintf (asm_out_file, "\t.section .dtor\n"); \ - in_section = in_dtor; \ - } \ - } - - #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ - do { \ - ctor_section (); \ - fputs (ASM_LONG, FILE); \ - assemble_name (FILE, NAME); \ - fprintf (FILE, "\n"); \ - } while (0) - - #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \ - do { \ - dtor_section (); \ - fputs (ASM_LONG, FILE); \ - assemble_name (FILE, NAME); \ - fprintf (FILE, "\n"); \ - } while (0) - - /* Define this macro if references to a symbol must be treated - differently depending on something about the variable or - function named by the symbol (such as what section it is in). - - On i386, if using PIC, mark a SYMBOL_REF for a non-global symbol - so that we may access it directly in the GOT. - - On i386 running Windows NT, modify the assembler name with a suffix - consisting of an atsign (@) followed by string of digits that represents - the number of bytes of arguments passed to the function, if it has the - attribute STDCALL. */ - - #ifdef ENCODE_SECTION_INFO - #undef ENCODE_SECTION_INFO - #define ENCODE_SECTION_INFO(DECL) \ - do \ - { \ - if (flag_pic) \ - { \ - rtx rtl = (TREE_CODE_CLASS (TREE_CODE (DECL)) != 'd' \ - ? TREE_CST_RTL (DECL) : DECL_RTL (DECL)); \ - SYMBOL_REF_FLAG (XEXP (rtl, 0)) \ - = (TREE_CODE_CLASS (TREE_CODE (DECL)) != 'd' \ - || ! TREE_PUBLIC (DECL)); \ - } \ - if (TREE_CODE (DECL) == FUNCTION_DECL) \ - if (lookup_attribute ("stdcall", \ - TYPE_ATTRIBUTES (TREE_TYPE (DECL)))) \ - XEXP (DECL_RTL (DECL), 0) = \ - gen_rtx_SYMBOL_REF (Pmode, gen_stdcall_suffix (DECL)); \ - } \ - while (0) - #endif - - /* The global __fltused is necessary to cause the printf/scanf routines - for outputting/inputting floating point numbers to be loaded. Since this - is kind of hard to detect, we just do it all the time. */ - - #ifdef ASM_FILE_START - #undef ASM_FILE_START - #endif - #define ASM_FILE_START(FILE) \ - do { output_file_directive (FILE, main_input_filename); \ - fprintf (FILE, ".global\t__fltused\n"); \ - } while (0) - - /* if the switch "-mwindows" is passed to ld, then specify to the Microsoft - linker the proper switches and libraries to build a graphical program */ - - #undef LIB_SPEC - #define LIB_SPEC "%{mwindows:-subsystem windows -e _WinMainCRTStartup \ - USER32.LIB%s GDI32.LIB%s COMDLG32.LIB%s WINSPOOL.LIB%s} \ - %{!mwindows:-subsystem console -e _mainCRTStartup} \ - %{mcrtmt:LIBCMT.LIB%s KERNEL32.LIB%s ADVAPI32.LIB%s} \ - %{!mcrtmt:LIBC.LIB%s KERNEL32.LIB%s ADVAPI32.LIB%s} \ - %{v}" - - #include "winnt/win-nt.h" - --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/win32.h gcc-3.1/gcc/config/i386/win32.h *** gcc-3.0.4/gcc/config/i386/win32.h Sun May 20 19:49:17 2001 --- gcc-3.1/gcc/config/i386/win32.h Thu Jan 3 17:40:02 2002 *************** GNU General Public License for more deta *** 20,26 **** 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. */ #define YES_UNDERSCORES --- 20,26 ---- 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. */ #define YES_UNDERSCORES *************** Boston, MA 02111-1307, USA. */ *** 34,40 **** #include "i386/gas.h" #include "dbxcoff.h" ! /* Augment TARGET_SWITCHES with the cygwin/win32 options. */ #define MASK_WIN32 0x40000000 /* Use -lming32 interface */ #define MASK_CYGWIN 0x20000000 /* Use -lcygwin interface */ #define MASK_WINDOWS 0x10000000 /* Use windows interface */ --- 34,40 ---- #include "i386/gas.h" #include "dbxcoff.h" ! /* Augment TARGET_SWITCHES with the cygwin/win32 options. */ #define MASK_WIN32 0x40000000 /* Use -lming32 interface */ #define MASK_CYGWIN 0x20000000 /* Use -lcygwin interface */ #define MASK_WINDOWS 0x10000000 /* Use windows interface */ *************** Boston, MA 02111-1307, USA. */ *** 103,154 **** #define NEED_ATEXIT 1 - #undef EXTRA_SECTIONS - #define EXTRA_SECTIONS in_ctor, in_dtor - - #undef EXTRA_SECTION_FUNCTIONS - #define EXTRA_SECTION_FUNCTIONS \ - CTOR_SECTION_FUNCTION \ - DTOR_SECTION_FUNCTION - - #define CTOR_SECTION_FUNCTION \ - void \ - ctor_section () \ - { \ - if (in_section != in_ctor) \ - { \ - fprintf (asm_out_file, "\t.section .ctor\n"); \ - in_section = in_ctor; \ - } \ - } - - #define DTOR_SECTION_FUNCTION \ - void \ - dtor_section () \ - { \ - if (in_section != in_dtor) \ - { \ - fprintf (asm_out_file, "\t.section .dtor\n"); \ - in_section = in_dtor; \ - } \ - } - - #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ - do { \ - ctor_section (); \ - fputs (ASM_LONG, FILE); \ - assemble_name (FILE, NAME); \ - fprintf (FILE, "\n"); \ - } while (0) - - #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \ - do { \ - dtor_section (); \ - fputs (ASM_LONG, FILE); \ - assemble_name (FILE, NAME); \ - fprintf (FILE, "\n"); \ - } while (0) - /* Define this macro if references to a symbol must be treated differently depending on something about the variable or function named by the symbol (such as what section it is in). --- 103,108 ---- *************** dtor_section () \ *** 159,165 **** On i386 running Windows NT, modify the assembler name with a suffix consisting of an atsign (@) followed by string of digits that represents the number of bytes of arguments passed to the function, if it has the ! attribute STDCALL. */ #ifdef ENCODE_SECTION_INFO #undef ENCODE_SECTION_INFO --- 113,119 ---- On i386 running Windows NT, modify the assembler name with a suffix consisting of an atsign (@) followed by string of digits that represents the number of bytes of arguments passed to the function, if it has the ! attribute STDCALL. */ #ifdef ENCODE_SECTION_INFO #undef ENCODE_SECTION_INFO *************** while (0) *** 191,197 **** #define STRIP_NAME_ENCODING(VAR,SYMBOL_NAME) \ do { \ const char *_p; \ ! const char *_name = ((SYMBOL_NAME) + ((SYMBOL_NAME)[0] == '*')); \ for (_p = _name; *_p && *_p != '@'; ++_p) \ ; \ if (*_p == '@') \ --- 145,151 ---- #define STRIP_NAME_ENCODING(VAR,SYMBOL_NAME) \ do { \ const char *_p; \ ! const char *const _name = ((SYMBOL_NAME) + ((SYMBOL_NAME)[0] == '*'));\ for (_p = _name; *_p && *_p != '@'; ++_p) \ ; \ if (*_p == '@') \ *************** do { \ *** 208,222 **** /* Emit code to check the stack when allocating more that 4000 ! bytes in one go. */ #define CHECK_STACK_LIMIT 4000 /* By default, target has a 80387, uses IEEE compatible arithmetic, and returns float values in the 387 and needs stack probes */ ! #undef TARGET_DEFAULT ! #define TARGET_DEFAULT \ (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS | MASK_STACK_PROBE) /* This is how to output an assembler line --- 162,176 ---- /* Emit code to check the stack when allocating more that 4000 ! bytes in one go. */ #define CHECK_STACK_LIMIT 4000 /* By default, target has a 80387, uses IEEE compatible arithmetic, and returns float values in the 387 and needs stack probes */ ! #undef TARGET_SUBTARGET_DEFAULT ! #define TARGET_SUBTARGET_DEFAULT \ (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS | MASK_STACK_PROBE) /* This is how to output an assembler line *************** do { \ *** 233,277 **** symbols must be explicitly imported from shared libraries (DLLs). */ #define MULTIPLE_SYMBOL_SPACES - #define UNIQUE_SECTION_P(DECL) DECL_ONE_ONLY (DECL) extern void i386_pe_unique_section (); #define UNIQUE_SECTION(DECL,RELOC) i386_pe_unique_section (DECL, RELOC) #define SUPPORTS_ONE_ONLY 1 ! /* A C statement to output something to the assembler file to switch to section ! NAME for object DECL which is either a FUNCTION_DECL, a VAR_DECL or ! NULL_TREE. Some target formats do not support arbitrary sections. Do not ! define this macro in such cases. */ ! #undef ASM_OUTPUT_SECTION_NAME ! #define ASM_OUTPUT_SECTION_NAME(STREAM, DECL, NAME, RELOC) \ ! do { \ ! if ((DECL) && TREE_CODE (DECL) == FUNCTION_DECL) \ ! fprintf (STREAM, "\t.section %s,\"x\"\n", (NAME)); \ ! else if ((DECL) && DECL_READONLY_SECTION (DECL, RELOC)) \ ! fprintf (STREAM, "\t.section %s,\"\"\n", (NAME)); \ ! else \ ! fprintf (STREAM, "\t.section %s,\"w\"\n", (NAME)); \ ! /* Functions may have been compiled at various levels of \ ! optimization so we can't use `same_size' here. Instead, \ ! have the linker pick one. */ \ ! if ((DECL) && DECL_ONE_ONLY (DECL)) \ ! fprintf (STREAM, "\t.linkonce %s\n", \ ! TREE_CODE (DECL) == FUNCTION_DECL \ ! ? "discard" : "same_size"); \ ! } while (0) #undef ASM_COMMENT_START #define ASM_COMMENT_START " #" ! /* DWARF2 Unwinding doesn't work with exception handling yet. */ ! #define DWARF2_UNWIND_INFO 0 ! ! /* Don't assume anything about the header files. */ #define NO_IMPLICIT_EXTERN_C #define SUBTARGET_PROLOGUE \ ! if (profile_flag \ && MAIN_NAME_P (DECL_NAME (current_function_decl)) \ { \ rtx xops[1]; \ --- 187,211 ---- symbols must be explicitly imported from shared libraries (DLLs). */ #define MULTIPLE_SYMBOL_SPACES extern void i386_pe_unique_section (); #define UNIQUE_SECTION(DECL,RELOC) i386_pe_unique_section (DECL, RELOC) #define SUPPORTS_ONE_ONLY 1 ! /* Switch into a generic section. */ ! #define TARGET_ASM_NAMED_SECTION i386_pe_asm_named_section ! ! /* Select attributes for named sections. */ ! #define TARGET_SECTION_TYPE_FLAGS i386_pe_section_type_flags #undef ASM_COMMENT_START #define ASM_COMMENT_START " #" ! /* Don't assume anything about the header files. */ #define NO_IMPLICIT_EXTERN_C #define SUBTARGET_PROLOGUE \ ! if (current_function_profile \ && MAIN_NAME_P (DECL_NAME (current_function_decl)) \ { \ rtx xops[1]; \ diff -Nrc3pad gcc-3.0.4/gcc/config/i386/winnt.c gcc-3.1/gcc/config/i386/winnt.c *** gcc-3.0.4/gcc/config/i386/winnt.c Tue Mar 20 17:07:58 2001 --- gcc-3.1/gcc/config/i386/winnt.c Mon Dec 3 19:13:32 2001 *************** *** 1,6 **** /* Subroutines for insn-output.c for Windows NT. Contributed by Douglas Rupp (drupp@cs.washington.edu) ! Copyright (C) 1995, 1997, 1998 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,6 ---- /* Subroutines for insn-output.c for Windows NT. Contributed by Douglas Rupp (drupp@cs.washington.edu) ! Copyright (C) 1995, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of GNU CC. *************** Boston, MA 02111-1307, USA. */ *** 29,34 **** --- 29,35 ---- #include "flags.h" #include "tm_p.h" #include "toplev.h" + #include "hashtab.h" /* i386/PE specific attribute support. *************** int i386_pe_dllimport_p PARAMS ((tree)); *** 48,151 **** void i386_pe_mark_dllexport PARAMS ((tree)); void i386_pe_mark_dllimport PARAMS ((tree)); ! /* Return nonzero if ATTR is a valid attribute for DECL. ! ATTRIBUTES are any existing attributes and ARGS are the arguments ! supplied with ATTR. */ ! ! int ! i386_pe_valid_decl_attribute_p (decl, attributes, attr, args) ! tree decl; ! tree attributes; ! tree attr; ! tree args; ! { ! if (args == NULL_TREE) ! { ! if (is_attribute_p ("dllexport", attr)) ! return 1; ! if (is_attribute_p ("dllimport", attr)) ! return 1; ! if (is_attribute_p ("shared", attr)) ! return TREE_CODE (decl) == VAR_DECL; ! } ! ! return ix86_valid_decl_attribute_p (decl, attributes, attr, args); ! } ! ! /* Return nonzero if ATTR is a valid attribute for TYPE. ! ATTRIBUTES are any existing attributes and ARGS are the arguments ! supplied with ATTR. */ ! ! int ! i386_pe_valid_type_attribute_p (type, attributes, attr, args) ! tree type; ! tree attributes; ! tree attr; tree args; { ! if (args == NULL_TREE ! && (TREE_CODE (type) == RECORD_TYPE || TREE_CODE (type) == UNION_TYPE)) { ! if (is_attribute_p ("dllexport", attr)) ! return 1; ! if (is_attribute_p ("dllimport", attr)) ! return 1; } ! return ix86_valid_type_attribute_p (type, attributes, attr, args); } ! /* Merge attributes in decls OLD and NEW. ! ! This handles the following situation: ! ! __declspec (dllimport) int foo; ! int foo; ! ! The second instance of `foo' nullifies the dllimport. */ ! tree ! i386_pe_merge_decl_attributes (old, new) ! tree old, new; { ! tree a; ! int delete_dllimport_p; ! ! old = DECL_MACHINE_ATTRIBUTES (old); ! new = DECL_MACHINE_ATTRIBUTES (new); ! ! /* What we need to do here is remove from `old' dllimport if it doesn't ! appear in `new'. dllimport behaves like extern: if a declaration is ! marked dllimport and a definition appears later, then the object ! is not dllimport'd. */ ! ! if (lookup_attribute ("dllimport", old) != NULL_TREE ! && lookup_attribute ("dllimport", new) == NULL_TREE) ! delete_dllimport_p = 1; ! else ! delete_dllimport_p = 0; ! ! a = merge_attributes (old, new); ! ! if (delete_dllimport_p) { ! tree prev,t; ! ! /* Scan the list for dllimport and delete it. */ ! for (prev = NULL_TREE, t = a; t; prev = t, t = TREE_CHAIN (t)) ! { ! if (is_attribute_p ("dllimport", TREE_PURPOSE (t))) ! { ! if (prev == NULL_TREE) ! a = TREE_CHAIN (a); ! else ! TREE_CHAIN (prev) = TREE_CHAIN (t); ! break; ! } ! } } ! return a; } /* Return the type that we should use to determine if DECL is --- 49,102 ---- void i386_pe_mark_dllexport PARAMS ((tree)); void i386_pe_mark_dllimport PARAMS ((tree)); ! /* Handle a "dllimport" or "dllexport" attribute; ! arguments as in struct attribute_spec.handler. */ ! tree ! ix86_handle_dll_attribute (node, name, args, flags, no_add_attrs) ! tree *node; ! tree name; tree args; + int flags; + bool *no_add_attrs; { ! /* These attributes may apply to structure and union types being created, ! but otherwise should pass to the declaration involved. */ ! if (!DECL_P (*node)) { ! if (flags & ((int) ATTR_FLAG_DECL_NEXT | (int) ATTR_FLAG_FUNCTION_NEXT ! | (int) ATTR_FLAG_ARRAY_NEXT)) ! { ! *no_add_attrs = true; ! return tree_cons (name, args, NULL_TREE); ! } ! if (TREE_CODE (*node) != RECORD_TYPE && TREE_CODE (*node) != UNION_TYPE) ! { ! warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); ! *no_add_attrs = true; ! } } ! return NULL_TREE; } ! /* Handle a "shared" attribute; ! arguments as in struct attribute_spec.handler. */ tree ! ix86_handle_shared_attribute (node, name, args, flags, no_add_attrs) ! tree *node; ! tree name; ! tree args ATTRIBUTE_UNUSED; ! int flags ATTRIBUTE_UNUSED; ! bool *no_add_attrs; { ! if (TREE_CODE (*node) != VAR_DECL) { ! warning ("`%s' attribute only applies to variables", ! IDENTIFIER_POINTER (name)); ! *no_add_attrs = true; } ! return NULL_TREE; } /* Return the type that we should use to determine if DECL is *************** i386_pe_dllexport_p (decl) *** 184,190 **** if (TREE_CODE (decl) != VAR_DECL && TREE_CODE (decl) != FUNCTION_DECL) return 0; ! exp = lookup_attribute ("dllexport", DECL_MACHINE_ATTRIBUTES (decl)); if (exp) return 1; --- 135,141 ---- if (TREE_CODE (decl) != VAR_DECL && TREE_CODE (decl) != FUNCTION_DECL) return 0; ! exp = lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl)); if (exp) return 1; *************** i386_pe_dllimport_p (decl) *** 215,221 **** if (TREE_CODE (decl) != VAR_DECL && TREE_CODE (decl) != FUNCTION_DECL) return 0; ! imp = lookup_attribute ("dllimport", DECL_MACHINE_ATTRIBUTES (decl)); if (imp) return 1; --- 166,172 ---- if (TREE_CODE (decl) != VAR_DECL && TREE_CODE (decl) != FUNCTION_DECL) return 0; ! imp = lookup_attribute ("dllimport", DECL_ATTRIBUTES (decl)); if (imp) return 1; *************** i386_pe_mark_dllimport (decl) *** 308,314 **** abort (); if (i386_pe_dllexport_name_p (oldname)) { ! error ("`%s' declared as both exported to and imported from a DLL.", IDENTIFIER_POINTER (DECL_NAME (decl))); return; } --- 259,265 ---- abort (); if (i386_pe_dllexport_name_p (oldname)) { ! error ("`%s' declared as both exported to and imported from a DLL", IDENTIFIER_POINTER (DECL_NAME (decl))); return; } *************** i386_pe_unique_section (decl, reloc) *** 508,513 **** --- 459,556 ---- DECL_SECTION_NAME (decl) = build_string (len, string); } + + /* Select a set of attributes for section NAME based on the properties + of DECL and whether or not RELOC indicates that DECL's initializer + might contain runtime relocations. + + We make the section read-only and executable for a function decl, + read-only for a const data decl, and writable for a non-const data decl. + + If the section has already been defined, to not allow it to have + different attributes, as (1) this is ambiguous since we're not seeing + all the declarations up front and (2) some assemblers (e.g. SVR4) + do not recoginize section redefinitions. */ + /* ??? This differs from the "standard" PE implementation in that we + handle the SHARED variable attribute. Should this be done for all + PE targets? */ + + #define SECTION_PE_SHARED SECTION_MACH_DEP + + unsigned int + i386_pe_section_type_flags (decl, name, reloc) + tree decl; + const char *name; + int reloc; + { + static htab_t htab; + unsigned int flags; + unsigned int **slot; + + /* The names we put in the hashtable will always be the unique + versions gived to us by the stringtable, so we can just use + their addresses as the keys. */ + if (!htab) + htab = htab_create (31, htab_hash_pointer, htab_eq_pointer, NULL); + + if (decl && TREE_CODE (decl) == FUNCTION_DECL) + flags = SECTION_CODE; + else if (decl && DECL_READONLY_SECTION (decl, reloc)) + flags = 0; + else + { + flags = SECTION_WRITE; + + if (decl && TREE_CODE (decl) == VAR_DECL + && lookup_attribute ("shared", DECL_ATTRIBUTES (decl))) + flags |= SECTION_PE_SHARED; + } + + if (decl && DECL_ONE_ONLY (decl)) + flags |= SECTION_LINKONCE; + + /* See if we already have an entry for this section. */ + slot = (unsigned int **) htab_find_slot (htab, name, INSERT); + if (!*slot) + { + *slot = (unsigned int *) xmalloc (sizeof (unsigned int)); + **slot = flags; + } + else + { + if (decl && **slot != flags) + error_with_decl (decl, "%s causes a section type conflict"); + } + + return flags; + } + + void + i386_pe_asm_named_section (name, flags) + const char *name; + unsigned int flags; + { + char flagchars[8], *f = flagchars; + + if (flags & SECTION_CODE) + *f++ = 'x'; + if (flags & SECTION_WRITE) + *f++ = 'w'; + if (flags & SECTION_PE_SHARED) + *f++ = 's'; + *f = '\0'; + + fprintf (asm_out_file, "\t.section\t%s,\"%s\"\n", name, flagchars); + + if (flags & SECTION_LINKONCE) + { + /* Functions may have been compiled at various levels of + optimization so we can't use `same_size' here. + Instead, have the linker pick one. */ + fprintf (asm_out_file, "\t.linkonce %s\n", + (flags & SECTION_CODE ? "discard" : "same_size")); + } + } /* The Microsoft linker requires that every function be marked as DT_FCN. When using gas on cygwin, we must emit appropriate .type *************** struct export_list *** 568,574 **** { struct export_list *next; const char *name; ! int is_data; /* used to type tag exported symbols. */ }; static struct export_list *export_head; --- 611,617 ---- { struct export_list *next; const char *name; ! int is_data; /* used to type tag exported symbols. */ }; static struct export_list *export_head; diff -Nrc3pad gcc-3.0.4/gcc/config/i386/x-aix gcc-3.1/gcc/config/i386/x-aix *** gcc-3.0.4/gcc/config/i386/x-aix Wed Dec 16 21:04:51 1998 --- gcc-3.1/gcc/config/i386/x-aix Thu Jan 1 00:00:00 1970 *************** *** 1,12 **** - # There is an alloca in -lbsd, but it is limited to 32K - ALLOCA = alloca.o - - # If you are running out of memory while compiling gcc, with the standard - # /bin/cc uncomment MALLOCLIB line. That version of malloc is slower but - # has less overhead than the one in libc. - #MALLOCLIB = -lmalloc - - # Uncomment out the next line if you want to link with the shareable libc_s. - #CLIB_S = -lc_s - - CLIB = -lld $(MALLOCLIB) $(CLIB_S) --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/x-beos gcc-3.1/gcc/config/i386/x-beos *** gcc-3.0.4/gcc/config/i386/x-beos Wed Nov 15 15:56:59 2000 --- gcc-3.1/gcc/config/i386/x-beos Thu Jan 1 00:00:00 1970 *************** *** 1,12 **** - # configuration for BeOS - INSTALL=install -c - - # Show we need to use the C version of ALLOCA - ALLOCA=alloca.o - # Use it regardless of whether we are compiling with gcc or not. - USE_ALLOCA= `echo "${ALLOCA}"` - USE_HOST_ALLOCA= `echo ${HOST_PREFIX}${HOST_ALLOCA}` - SUBDIR_USE_ALLOCA = `if [ x$(ALLOCA) != x ]; then echo ../$(ALLOCA); else true; fi` - - # Don't run fixproto - STMP_FIXPROTO = --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/x-cygwin gcc-3.1/gcc/config/i386/x-cygwin *** gcc-3.0.4/gcc/config/i386/x-cygwin Wed Dec 16 21:04:52 1998 --- gcc-3.1/gcc/config/i386/x-cygwin Thu Jan 1 00:00:00 1970 *************** *** 1,4 **** - # Don't run fixproto - STMP_FIXPROTO = - # prefix.c wants to poke around the Registry - CLIB = -ladvapi32 --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/x-dgux gcc-3.1/gcc/config/i386/x-dgux *** gcc-3.0.4/gcc/config/i386/x-dgux Wed Dec 16 21:04:53 1998 --- gcc-3.1/gcc/config/i386/x-dgux Thu Jan 1 00:00:00 1970 *************** *** 1,11 **** - # - # host is ix86 running dgux - # - CC = /bin/gcc - X_CFLAGS = -O -mstandard -mlegend - BOOT_CFLAGS = -O2 -g -mstandard -mlegend $(CFLAGS) - CLIB = -lw32 - RANLIB = true - USER_H = $(EXTRA_HEADERS) $(LANG_EXTRA_HEADERS) - STMP_FIXPROTO = - --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/x-djgpp gcc-3.1/gcc/config/i386/x-djgpp *** gcc-3.0.4/gcc/config/i386/x-djgpp Fri Aug 4 16:19:19 2000 --- gcc-3.1/gcc/config/i386/x-djgpp Thu Jan 1 00:00:00 1970 *************** *** 1,7 **** - # Location of DJGPP's header directory. - SYSTEM_HEADER_DIR=$(DJDIR)/include - - # on DJGPP the 'ln -s' does not work correctly - LN = cp -p - LN_S = cp -p - --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/x-isc gcc-3.1/gcc/config/i386/x-isc *** gcc-3.0.4/gcc/config/i386/x-isc Wed Dec 16 21:04:54 1998 --- gcc-3.1/gcc/config/i386/x-isc Thu Jan 1 00:00:00 1970 *************** *** 1,3 **** - CLIB = -lPW -lcposix - X_CFLAGS = -D_POSIX_SOURCE - ENQUIRE_LDFLAGS = -posix $(LDFLAGS) --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/x-isc3 gcc-3.1/gcc/config/i386/x-isc3 *** gcc-3.0.4/gcc/config/i386/x-isc3 Wed Dec 16 21:04:55 1998 --- gcc-3.1/gcc/config/i386/x-isc3 Thu Jan 1 00:00:00 1970 *************** *** 1,4 **** - CLIB = -lPW - # One person said it needs -DPOSIX_JC, but daa@CERF.NET says no. - X_CFLAGS = -D_SYSV3 -Xp - ENQUIRE_LDFLAGS = $(LDFLAGS) --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/x-ncr3000 gcc-3.1/gcc/config/i386/x-ncr3000 *** gcc-3.0.4/gcc/config/i386/x-ncr3000 Wed Dec 16 21:04:56 1998 --- gcc-3.1/gcc/config/i386/x-ncr3000 Thu Jan 1 00:00:00 1970 *************** *** 1,34 **** - # Makefile additions for the NCR3000 as host system. - - # Using -O with the AT&T compiler fails, with a message about a missing - # /usr/ccs/lib/optim pass. So override the default in Makefile.in - - CCLIBFLAGS= - - ## Supposedly not needed now that xm-sysv4.h includes alloc.h for Metaware. - ### NCR3000 ships with a MetaWare compiler installed as CC, which chokes and - ### dies all over the place on GCC source. However, the AT&T compiler, - ### crusty as it is, can be used to bootstrap GCC. It can be found in - ### /usr/ccs/ATT/cc. It is also used to compile the things that should - ### not be compiled with GCC. - ## - ##CC = /usr/ccs/ATT/cc - ##OLDCC = /usr/ccs/ATT/cc - - # The rest is just x-i386v4. - - # Some versions of SVR4 have an alloca in /usr/ucblib/libucb.a, and if we are - # careful to link that in after libc we can use it, but since newer versions of - # SVR4 are dropping libucb, it is better to just use the portable C version for - # bootstrapping. Do this by defining ALLOCA. - - ALLOCA = alloca.o - - # We used to build all stages *without* shared libraries because that may make - # debugging the compiler easier (until there is a GDB which supports - # both Dwarf *and* svr4 shared libraries). - - # But james@bigtex.cactus.org says that redefining GCC_CFLAGS causes trouble, - # and that it is easy enough to debug using shared libraries. - # CCLIBFLAGS=-Bstatic -dn -g - # GCC_CFLAGS=-static -g -O2 -B./ --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/x-next gcc-3.1/gcc/config/i386/x-next *** gcc-3.0.4/gcc/config/i386/x-next Wed Dec 16 21:04:57 1998 --- gcc-3.1/gcc/config/i386/x-next Thu Jan 1 00:00:00 1970 *************** *** 1,3 **** - # Make assignments for compiling on NeXT with their compiler version. - CC=cc -traditional-cpp - OLDCC=cc -traditional-cpp --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/x-osf1elf gcc-3.1/gcc/config/i386/x-osf1elf *** gcc-3.0.4/gcc/config/i386/x-osf1elf Wed Dec 16 21:04:58 1998 --- gcc-3.1/gcc/config/i386/x-osf1elf Thu Jan 1 00:00:00 1970 *************** *** 1,8 **** - # Defaults for OSF/1 1.3+ - CC = $(OLDCC) - CLIB = -lld - INSTALL = installbsd -c - OLDCC = /usr/ccs/gcc/gcc - X_CFLAGS = -static - - # FIXPROTO_DEFINES = -D_XOPEN_SOURCE --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/x-osfrose gcc-3.1/gcc/config/i386/x-osfrose *** gcc-3.0.4/gcc/config/i386/x-osfrose Wed Dec 16 21:04:59 1998 --- gcc-3.1/gcc/config/i386/x-osfrose Thu Jan 1 00:00:00 1970 *************** *** 1,27 **** - # Define CC and OLDCC as the same, so that the tests: - # if [ x"$(OLDCC)" = x"$(CC)" ] ... - # - # will succeed (if OLDCC != CC, it is assumed that GCC is - # being used in secondary stage builds). - - BUILD = - CC = $(OLDCC) - CLIB = -lld - X_CFLAGS = $(DEB_OPT) $(MSTATS) $(X_DEFINES) - X_CFLAGS_NODEBUG = $(NO_DEBUG) $(MSTATS) $(OPT) $(PROFILE) $(X_DEFINES) $(XCFLAGS) - XCFLAGS = $(SHLIB) - CPP_ABORT = # -Dabort=fancy_abort - CPPFLAGS = $(CPP_ABORT) $(SYSTEM_INCLUDES) - DEB_OPT = $(OPT) $(DEBUG) $(PROFILE) - DEBUG = - DEBUG_COLLECT = # -DDEBUG - CCLIBFLAGS = -O -DNO_HALF_PIC - GCC_CFLAGS = $(INTERNAL_CFLAGS) $(X_CFLAGS) $(T_CFLAGS) $(CFLAGS) -B./ -DPOSIX -DNO_HALF_PIC - LDFLAGS = - MSTATS = # -mstats - OLDCC = /usr/ccs/gcc/gcc - OPT = -O - PROFILE = - SHLIB = -pic-none - SYSTEM_INCLUDES = # -I${BUILD}/usr/include - X_DEFINES = -Dvfork=fork --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/x-sco gcc-3.1/gcc/config/i386/x-sco *** gcc-3.0.4/gcc/config/i386/x-sco Wed Dec 16 21:05:00 1998 --- gcc-3.1/gcc/config/i386/x-sco Thu Jan 1 00:00:00 1970 *************** *** 1,7 **** - RANLIB = : - RANLIB_TEST = false - CC = rcc $(RCCFLAGS) - OLDCC = rcc $(RCCFLAGS) - RCCFLAGS = -Dunix -Di386 -DM_UNIX -DM_I386 -DNULL=0 - CCLIBFLAGS = - CLIB = -lmalloc -lPW --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/x-sco4 gcc-3.1/gcc/config/i386/x-sco4 *** gcc-3.0.4/gcc/config/i386/x-sco4 Wed Dec 16 21:05:01 1998 --- gcc-3.1/gcc/config/i386/x-sco4 Thu Jan 1 00:00:00 1970 *************** *** 1,10 **** - RANLIB = : - RANLIB_TEST = false - CC = rcc $(RCCFLAGS) - OLDCC = rcc $(RCCFLAGS) - RCCFLAGS = -Dunix -Di386 -DM_UNIX -DM_I386 -DNULL=0 - CCLIBFLAGS = - CLIB = -lmalloc -lPW - - # See all the declarations. - FIXPROTO_DEFINES = -D_XOPEN_SOURCE --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/x-sco5 gcc-3.1/gcc/config/i386/x-sco5 *** gcc-3.0.4/gcc/config/i386/x-sco5 Wed Dec 16 21:05:02 1998 --- gcc-3.1/gcc/config/i386/x-sco5 Thu Jan 1 00:00:00 1970 *************** *** 1,10 **** - RANLIB = : - RANLIB_TEST = false - CC = cc - OLDCC = cc - CCLIBFLAGS = - # We avoid the ALLOCA in -lPW becuase it gives us an evil index() - ALLOCA = alloca.o - - # See all the declarations. - FIXPROTO_DEFINES = -D_XOPEN_SOURCE -D_POSIX_C_SOURCE=2 --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/x-sysv3 gcc-3.1/gcc/config/i386/x-sysv3 *** gcc-3.0.4/gcc/config/i386/x-sysv3 Wed Dec 16 21:05:03 1998 --- gcc-3.1/gcc/config/i386/x-sysv3 Thu Jan 1 00:00:00 1970 *************** *** 1 **** - CLIB=-lPW --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/x-vsta gcc-3.1/gcc/config/i386/x-vsta *** gcc-3.0.4/gcc/config/i386/x-vsta Wed Dec 16 21:05:04 1998 --- gcc-3.1/gcc/config/i386/x-vsta Thu Jan 1 00:00:00 1970 *************** *** 1 **** - CLIB=-lm --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/x86-64.h gcc-3.1/gcc/config/i386/x86-64.h *** gcc-3.0.4/gcc/config/i386/x86-64.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/i386/x86-64.h Thu Feb 28 15:45:54 2002 *************** *** 0 **** --- 1,97 ---- + /* OS independent definitions for AMD x86-64. + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Bo Thorsen . + + 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. */ + + #undef ASM_COMMENT_START + #define ASM_COMMENT_START "#" + + #undef DBX_REGISTER_NUMBER + #define DBX_REGISTER_NUMBER(n) \ + (TARGET_64BIT ? dbx64_register_map[n] : svr4_dbx_register_map[n]) + + /* Output assembler code to FILE to call the profiler. */ + #define NO_PROFILE_COUNTERS + + #undef FUNCTION_PROFILER + #define FUNCTION_PROFILER(FILE, LABELNO) \ + { \ + if (TARGET_64BIT && flag_pic) \ + fprintf (FILE, "\tcall\t*mcount@PLT\n"); \ + else if (flag_pic) \ + fprintf (FILE, "\tcall\t*mcount@GOT(%%ebx)\n"); \ + else \ + fprintf (FILE, "\tcall\tmcount\n"); \ + } + + #undef SIZE_TYPE + #define SIZE_TYPE (TARGET_64BIT ? "long unsigned int" : "unsigned int") + + #undef PTRDIFF_TYPE + #define PTRDIFF_TYPE (TARGET_64BIT ? "long int" : "int") + + #undef WCHAR_TYPE + #define WCHAR_TYPE "int" + + #undef WCHAR_TYPE_SIZE + #define WCHAR_TYPE_SIZE 32 + + #undef CC1_SPEC + #define CC1_SPEC "%(cc1_cpu) %{profile:-p}" + + #undef ASM_SPEC + #define ASM_SPEC "%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} \ + %{Wa,*:%*} %{m32:--32}" + + /* A C statement (sans semicolon) to output to the stdio stream + FILE the assembler definition of uninitialized global DECL named + NAME whose size is SIZE bytes and alignment is ALIGN bytes. + Try to use asm_output_aligned_bss to implement this macro. */ + + #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ + asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN) + + /* A C statement to output to the stdio stream FILE an assembler + command to advance the location counter to a multiple of 1< - - /* Arguments to use with `exit'. */ - - #define SUCCESS_EXIT_CODE 0 - #define FATAL_EXIT_CODE 33 - - /* Include to define the exit status access macros. */ - #ifndef inhibit_libc - #include - #endif - - #define ONLY_INT_FIELDS - - /* use ANSI/SYSV style byte manipulation routines instead of BSD ones */ - - #undef bcopy - #define bcopy(s,d,n) memmove((d),(s),(n)) - - /* BeOS is closer to USG than BSD */ - - #define USG - - /* Define various things that the BeOS host has. */ - - #ifndef HAVE_VPRINTF - #define HAVE_VPRINTF - #endif - #ifndef HAVE_PUTENV - #define HAVE_PUTENV - #endif - #define HAVE_RENAME - - #define STDC_HEADERS 1 --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/xm-bsd386.h gcc-3.1/gcc/config/i386/xm-bsd386.h *** gcc-3.0.4/gcc/config/i386/xm-bsd386.h Wed Dec 16 21:05:06 1998 --- gcc-3.1/gcc/config/i386/xm-bsd386.h Thu Jan 1 00:00:00 1970 *************** *** 1,3 **** - /* Configuration for GCC for Intel i386 running BSDI's BSD/386 as host. */ - - #include "i386/xm-i386.h" --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/xm-cygwin.h gcc-3.1/gcc/config/i386/xm-cygwin.h *** gcc-3.0.4/gcc/config/i386/xm-cygwin.h Mon Apr 9 03:00:55 2001 --- gcc-3.1/gcc/config/i386/xm-cygwin.h Wed Oct 31 14:32:30 2001 *************** GNU General Public License for more deta *** 17,25 **** 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. */ ! #define EXECUTABLE_SUFFIX ".exe" /* Even though Cygwin tries to hide the DOS based filesystem, it still shows though at times. */ --- 17,25 ---- 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. */ ! #define HOST_EXECUTABLE_SUFFIX ".exe" /* Even though Cygwin tries to hide the DOS based filesystem, it still shows though at times. */ *************** Boston, MA 02111-1307, USA. */ *** 30,40 **** paths containing backslashes, make and configure may treat the backslashes as escape characters. Many Win32 programs use forward slashes so using a forward slash shouldn't be problematic from the ! perspective of wanting gcc to produce native Win32 paths. */ #undef DIR_SEPARATOR_2 #define DIR_SEPARATOR_2 '\\' - - /* This is needed so that protoize will compile. */ - #ifndef POSIX - #define POSIX - #endif --- 30,35 ---- paths containing backslashes, make and configure may treat the backslashes as escape characters. Many Win32 programs use forward slashes so using a forward slash shouldn't be problematic from the ! perspective of wanting gcc to produce native Win32 paths. */ #undef DIR_SEPARATOR_2 #define DIR_SEPARATOR_2 '\\' diff -Nrc3pad gcc-3.0.4/gcc/config/i386/xm-dgux.h gcc-3.1/gcc/config/i386/xm-dgux.h *** gcc-3.0.4/gcc/config/i386/xm-dgux.h Wed Dec 16 21:05:09 1998 --- gcc-3.1/gcc/config/i386/xm-dgux.h Thu Jan 1 00:00:00 1970 *************** *** 1,12 **** - - /* Configuration for GCC for Intel i386 running DG/ux */ - - /* looks just like sysv4 for now */ - - #include "i386/xm-i386.h" - #include "xm-svr4.h" - - /* If not compiled with GNU C, use the portable alloca. */ - #ifndef __GNUC__ - #define USE_C_ALLOCA - #endif --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/xm-djgpp.h gcc-3.1/gcc/config/i386/xm-djgpp.h *** gcc-3.0.4/gcc/config/i386/xm-djgpp.h Fri Aug 4 16:19:19 2000 --- gcc-3.1/gcc/config/i386/xm-djgpp.h Mon Dec 3 19:13:32 2001 *************** *** 1,5 **** /* Configuration for GNU C-compiler for Intel 80386 running DJGPP. ! Copyright (C) 1988, 1996, 1998, 1999, 2000 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,5 ---- /* Configuration for GNU C-compiler for Intel 80386 running DJGPP. ! Copyright (C) 1988, 1996, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of GNU CC. *************** along with GNU CC; see the file COPYING. *** 18,31 **** the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - #define __MSDOS__ 1 - - #include "i386/xm-i386.h" - /* Use semicolons to separate elements of a path. */ #define PATH_SEPARATOR ';' ! #define EXECUTABLE_SUFFIX ".exe" /* Even though we support "/", allow "\" since everybody tests both. */ #define DIR_SEPARATOR '/' --- 18,27 ---- the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Use semicolons to separate elements of a path. */ #define PATH_SEPARATOR ';' ! #define HOST_EXECUTABLE_SUFFIX ".exe" /* Even though we support "/", allow "\" since everybody tests both. */ #define DIR_SEPARATOR '/' *************** Boston, MA 02111-1307, USA. */ *** 34,40 **** /* Allow test for DOS drive names. */ #define HAVE_DOS_BASED_FILE_SYSTEM ! /* System dependant initialization for collect2 to tell system() to act like Unix. */ #define COLLECT2_HOST_INITIALIZATION \ do { __system_flags |= (__system_allow_multiple_cmds \ --- 30,36 ---- /* Allow test for DOS drive names. */ #define HAVE_DOS_BASED_FILE_SYSTEM ! /* System dependent initialization for collect2 to tell system() to act like Unix. */ #define COLLECT2_HOST_INITIALIZATION \ do { __system_flags |= (__system_allow_multiple_cmds \ *************** Boston, MA 02111-1307, USA. */ *** 72,113 **** to try and figure out what's wrong. */ \ char *djgpp = getenv ("DJGPP"); \ if (djgpp == NULL) \ ! fatal ("Environment variable DJGPP not defined."); \ else if (access (djgpp, R_OK) == 0) \ ! fatal ("Environment variable DJGPP points to missing file '%s'.", \ djgpp); \ else \ ! fatal ("Environment variable DJGPP points to corrupt file '%s'.", \ djgpp); \ } \ standard_exec_prefix = update_path (standard_exec_prefix, NULL); \ standard_bindir_prefix = update_path (standard_bindir_prefix, NULL); \ standard_startfile_prefix = update_path (standard_startfile_prefix, NULL); \ - md_exec_prefix = update_path (md_exec_prefix, NULL); \ - } while (0) - - /* Canonicalize paths containing '/dev/env/', especially those in - prefix.c. */ - #define UPDATE_PATH_HOST_CANONICALIZE(PATH, KEY) \ - do { \ - if (strncmp (PATH, "/dev/env/", sizeof("/dev/env/") - 1) == 0) \ - { \ - static char *djdir; \ - static int djdir_len; \ - static char fixed_path[FILENAME_MAX + 1]; \ - char *new_path; \ - /* The default prefixes all use '/dev/env/DJDIR', so optimize \ - for this. All other uses of '/dev/env/' go through \ - libc's canonicalization function. */ \ - _fixpath (PATH, fixed_path); \ - /* _fixpath removes any trailing '/', so add it back. */ \ - strcat (fixed_path, "/"); \ - new_path = xstrdup (fixed_path); \ - PATH = new_path; \ - return PATH; \ - } \ - /* If DIR_SEPARATOR_2 isn't in PATH, nothing more need be done. */ \ - if (strchr (PATH, DIR_SEPARATOR_2) == NULL) \ - return PATH; \ } while (0) --- 68,97 ---- to try and figure out what's wrong. */ \ char *djgpp = getenv ("DJGPP"); \ if (djgpp == NULL) \ ! fatal ("environment variable DJGPP not defined"); \ else if (access (djgpp, R_OK) == 0) \ ! fatal ("environment variable DJGPP points to missing file '%s'", \ djgpp); \ else \ ! fatal ("environment variable DJGPP points to corrupt file '%s'", \ djgpp); \ } \ standard_exec_prefix = update_path (standard_exec_prefix, NULL); \ standard_bindir_prefix = update_path (standard_bindir_prefix, NULL); \ standard_startfile_prefix = update_path (standard_startfile_prefix, NULL); \ } while (0) + /* Canonicalize paths containing '/dev/env/'; used in prefix.c. + _fixpath is a djgpp-specific function to canonicalize a path. + "/dev/env/DJDIR" evaluates to "c:/djgpp" if DJDIR is "c:/djgpp" for + example. It removes any trailing '/', so add it back. */ + /* We cannot free PATH below as it can point to string constant */ + #define UPDATE_PATH_HOST_CANONICALIZE(PATH) \ + if (memcmp ((PATH), "/dev/env/", sizeof("/dev/env/") - 1) == 0) \ + { \ + static char fixed_path[FILENAME_MAX + 1]; \ + \ + _fixpath ((PATH), fixed_path); \ + strcat (fixed_path, "/"); \ + (PATH) = xstrdup (fixed_path); \ + } diff -Nrc3pad gcc-3.0.4/gcc/config/i386/xm-dos.h gcc-3.1/gcc/config/i386/xm-dos.h *** gcc-3.0.4/gcc/config/i386/xm-dos.h Mon Aug 21 18:01:51 2000 --- gcc-3.1/gcc/config/i386/xm-dos.h Thu Jan 1 00:00:00 1970 *************** *** 1,40 **** - /* Configuration for GNU C-compiler for Intel 80386 running DOS. - Copyright (C) 1998, 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 "i386/xm-i386.h" - - /* Use semicolons to separate elements of a path. */ - #define PATH_SEPARATOR ';' - - /* Use backslashs to separate levels of directory. */ - #define DIR_SEPARATOR '\\' - #define DIR_SEPARATOR_2 '/' - - /* Allow checks for drive names. */ - #define HAVE_DOS_BASED_FILE_SYSTEM - - /* Suffix for executable file names. */ - #define EXECUTABLE_SUFFIX ".exe" - - /* Tell GCC about DOS's bit bucket. */ - - #define HOST_BIT_BUCKET "NUL" - - #define NO_PRECOMPILES 1 --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/xm-freebsd.h gcc-3.1/gcc/config/i386/xm-freebsd.h *** gcc-3.0.4/gcc/config/i386/xm-freebsd.h Wed Dec 16 21:05:11 1998 --- gcc-3.1/gcc/config/i386/xm-freebsd.h Thu Jan 1 00:00:00 1970 *************** *** 1,4 **** - /* Configuration for GCC for Intel i386 running FreeBSD as host. */ - - #include - #include --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/xm-gnu.h gcc-3.1/gcc/config/i386/xm-gnu.h *** gcc-3.0.4/gcc/config/i386/xm-gnu.h Wed Dec 16 21:05:12 1998 --- gcc-3.1/gcc/config/i386/xm-gnu.h Thu Jan 1 00:00:00 1970 *************** *** 1,5 **** - /* Configuration for GCC for Intel i386 running GNU as host. */ - - #include - #include - --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/xm-i386-interix.h gcc-3.1/gcc/config/i386/xm-i386-interix.h *** gcc-3.0.4/gcc/config/i386/xm-i386-interix.h Sat Sep 4 15:08:58 1999 --- gcc-3.1/gcc/config/i386/xm-i386-interix.h Fri Mar 9 20:53:53 2001 *************** along with GNU CC; see the file COPYING. *** 21,28 **** the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - #include - #define HOST_BITS_PER_WIDEST_INT HOST_BITS_PER_LONGLONG #ifdef __GNUC__ # define HOST_WIDEST_INT long long --- 21,26 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/xm-i386.h gcc-3.1/gcc/config/i386/xm-i386.h *** gcc-3.0.4/gcc/config/i386/xm-i386.h Thu Mar 15 19:02:03 2001 --- gcc-3.1/gcc/config/i386/xm-i386.h Thu Jan 1 00:00:00 1970 *************** *** 1,39 **** - /* Configuration for GNU C-compiler for Intel 80386. - Copyright (C) 1988, 1993 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. */ - - #ifndef __i386__ - #define __i386__ 1 - #endif - - /* This describes the machine the compiler is hosted on. */ - #define HOST_BITS_PER_CHAR 8 - #define HOST_BITS_PER_SHORT 16 - #define HOST_BITS_PER_INT 32 - #define HOST_BITS_PER_LONG 32 - #define HOST_BITS_PER_LONGLONG 64 - - /* Arguments to use with `exit'. */ - #define SUCCESS_EXIT_CODE 0 - #define FATAL_EXIT_CODE 33 - - /* target machine dependencies. - tm.h is a symbolic link to the actual target specific file. */ - - #include "tm.h" --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/xm-isc.h gcc-3.1/gcc/config/i386/xm-isc.h *** gcc-3.0.4/gcc/config/i386/xm-isc.h Wed Dec 16 21:05:15 1998 --- gcc-3.1/gcc/config/i386/xm-isc.h Thu Jan 1 00:00:00 1970 *************** *** 1,4 **** - #ifndef REAL_ARITHMETIC - #define REAL_VALUE_ATOF(x, mode) strtod ((x), (char **)0) - extern double strtod (); - #endif --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/xm-linux.h gcc-3.1/gcc/config/i386/xm-linux.h *** gcc-3.0.4/gcc/config/i386/xm-linux.h Wed Dec 16 21:05:16 1998 --- gcc-3.1/gcc/config/i386/xm-linux.h Thu Jan 1 00:00:00 1970 *************** *** 1,24 **** - /* Configuration for GCC for Intel i386 running Linux-based GNU systems. - Copyright (C) 1993, 1994, 1995, 1997 Free Software Foundation, Inc. - Contributed by H.J. Lu (hjl@nynexst.com) - - This file is part of GNU CC. - - GNU CC is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU CC is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNU CC; see the file COPYING. If not, write to - the Free Software Foundation, 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - - #include - #include - --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/xm-lynx.h gcc-3.1/gcc/config/i386/xm-lynx.h *** gcc-3.0.4/gcc/config/i386/xm-lynx.h Wed Dec 16 21:05:17 1998 --- gcc-3.1/gcc/config/i386/xm-lynx.h Thu Jan 1 00:00:00 1970 *************** *** 1,33 **** - /* Configuration for GNU C-compiler for i386 platforms running LynxOS. - Copyright (C) 1995 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 - - /* This describes the machine the compiler is hosted on. */ - #define HOST_BITS_PER_CHAR 8 - #define HOST_BITS_PER_SHORT 16 - #define HOST_BITS_PER_INT 32 - #define HOST_BITS_PER_LONG 32 - #define HOST_BITS_PER_LONGLONG 64 - - /* target machine dependencies. - tm.h is a symbolic link to the actual target specific file. */ - - #include "tm.h" --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/xm-mingw32.h gcc-3.1/gcc/config/i386/xm-mingw32.h *** gcc-3.0.4/gcc/config/i386/xm-mingw32.h Tue Dec 28 16:36:09 1999 --- gcc-3.1/gcc/config/i386/xm-mingw32.h Thu Jan 10 22:21:39 2002 *************** *** 1,6 **** /* Configuration for GNU C-compiler for hosting on Windows32. using GNU tools and the Windows32 API Library. ! Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,6 ---- /* Configuration for GNU C-compiler for hosting on Windows32. using GNU tools and the Windows32 API Library. ! Copyright (C) 1997, 1998, 1999, 2001 Free Software Foundation, Inc. This file is part of GNU CC. *************** GNU General Public License for more deta *** 17,37 **** 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. */ ! ! #ifndef USG ! #define USG 1 ! #endif ! ! #ifndef ONLY_INT_FIELD ! #define ONLY_INT_FIELDS 1 ! #endif ! ! #ifndef USE_PROTOTYPES ! #define USE_PROTOTYPES 1 ! #endif ! ! #define environ _environ /* Even though we support "/", allow "\" since everybody tests both. */ #define DIR_SEPARATOR '\\' --- 17,23 ---- 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. */ /* Even though we support "/", allow "\" since everybody tests both. */ #define DIR_SEPARATOR '\\' *************** Boston, MA 02111-1307, USA. */ *** 41,47 **** like Cygwin does. */ #define HAVE_DOS_BASED_FILE_SYSTEM ! #define EXECUTABLE_SUFFIX ".exe" #undef PATH_SEPARATOR #define PATH_SEPARATOR ';' --- 27,33 ---- like Cygwin does. */ #define HAVE_DOS_BASED_FILE_SYSTEM ! #define HOST_EXECUTABLE_SUFFIX ".exe" #undef PATH_SEPARATOR #define PATH_SEPARATOR ';' diff -Nrc3pad gcc-3.0.4/gcc/config/i386/xm-next.h gcc-3.1/gcc/config/i386/xm-next.h *** gcc-3.0.4/gcc/config/i386/xm-next.h Wed Dec 16 21:05:19 1998 --- gcc-3.1/gcc/config/i386/xm-next.h Thu Jan 1 00:00:00 1970 *************** *** 1,5 **** - #include "i386/xm-i386.h" - - /* malloc does better with chunks the size of a page. */ - - #define OBSTACK_CHUNK_SIZE (getpagesize ()) --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/xm-openbsd.h gcc-3.1/gcc/config/i386/xm-openbsd.h *** gcc-3.0.4/gcc/config/i386/xm-openbsd.h Sat Sep 4 15:08:59 1999 --- gcc-3.1/gcc/config/i386/xm-openbsd.h Thu Jan 1 00:00:00 1970 *************** *** 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 - #include - --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/xm-os2.h gcc-3.1/gcc/config/i386/xm-os2.h *** gcc-3.0.4/gcc/config/i386/xm-os2.h Mon Aug 21 18:01:51 2000 --- gcc-3.1/gcc/config/i386/xm-os2.h Thu Jan 1 00:00:00 1970 *************** *** 1,74 **** - /* Configuration for GNU compiler - for an Intel i386 or later processor running OS/2 2.x. - Copyright (C) 1993, 1994, 1995, 1997, 1998, 1999 Free Software Foundation, Inc. - Contributed by Samuel Figueroa (figueroa@apple.com) - - This file is part of GNU CC. - - GNU CC is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU CC is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNU CC; see the file COPYING. If not, write to - the Free Software Foundation, 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - - #ifndef OS2 - #define OS2 - #endif - - #ifdef __IBMC__ - #include /* this defines alloca */ - #define USG - #define ONLY_INT_FIELDS - #define USE_PROTOTYPES 1 - #define strcasecmp stricmp - #define kill(a,b) raise(b) - #define mktemp tmpnam - #else - #ifdef __EMX__ - #define EMX - #define USG - #define HAVE_PUTENV - #define HAVE_VPRINTF - #define HAVE_STRERROR - #define strcasecmp stricmp - #else - #define ____386BSD____ - int spawnv (int modeflag, char *path, char *argv[]); - int spawnvp (int modeflag, char *path, char *argv[]); - #endif /* __EMX__ */ - #endif /* __IBMC__ */ - - #ifndef PATH_SEPARATOR - #define PATH_SEPARATOR ';' - #endif - #ifndef DIR_SEPARATOR - #define DIR_SEPARATOR '\\' - #endif - #ifndef DIR_SEPARATOR_2 - #define DIR_SEPARATOR_2 '/' - #endif - - /* Allow handling of drive names. */ - #define HAVE_DOS_BASED_FILE_SYSTEM - - #define EXECUTABLE_SUFFIX ".exe" - - /* The EMX compiler uses regular .o files */ - #ifndef __EMX__ - #define OBJECT_SUFFIX ".obj" - #endif - - /* Tell GCC about OS/2's bit bucket. */ - - #define HOST_BIT_BUCKET "NUL" - - #include "i386/xm-i386.h" --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/xm-osf1elf.h gcc-3.1/gcc/config/i386/xm-osf1elf.h *** gcc-3.0.4/gcc/config/i386/xm-osf1elf.h Wed Dec 16 21:05:22 1998 --- gcc-3.1/gcc/config/i386/xm-osf1elf.h Thu Jan 1 00:00:00 1970 *************** *** 1,6 **** - /* Configuration for GCC for Intel i386 running OSF/1 1.3. */ - - #ifndef HZ - #include - #define HZ DEFAULT_CLK_TCK - #endif --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/xm-sco.h gcc-3.1/gcc/config/i386/xm-sco.h *** gcc-3.0.4/gcc/config/i386/xm-sco.h Tue Apr 18 19:40:21 2000 --- gcc-3.1/gcc/config/i386/xm-sco.h Thu Jan 1 00:00:00 1970 *************** *** 1,5 **** - /* Configuration for GCC for Intel i386 running SCO. */ - - /* Big buffers improve performance. */ - - #define IO_BUFFER_SIZE (0x8000 - 1024) --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/xm-sco5.h gcc-3.1/gcc/config/i386/xm-sco5.h *** gcc-3.0.4/gcc/config/i386/xm-sco5.h Wed Dec 16 21:05:24 1998 --- gcc-3.1/gcc/config/i386/xm-sco5.h Thu Jan 1 00:00:00 1970 *************** *** 1,7 **** - /* Configuration for GCC for Intel i386 running SCO. */ - - /* Big buffers improve performance. */ - - #define IO_BUFFER_SIZE (0x8000 - 1024) - - --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/xm-sun.h gcc-3.1/gcc/config/i386/xm-sun.h *** gcc-3.0.4/gcc/config/i386/xm-sun.h Wed Dec 16 21:05:26 1998 --- gcc-3.1/gcc/config/i386/xm-sun.h Thu Jan 1 00:00:00 1970 *************** *** 1,23 **** - /* Configuration for GNU C-compiler for Intel 80386 running SunOS 4.0. - Copyright (C) 1988, 1997 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. */ - - #define USG - - #include "i386/xm-i386.h" --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/xm-sysv3.h gcc-3.1/gcc/config/i386/xm-sysv3.h *** gcc-3.0.4/gcc/config/i386/xm-sysv3.h Wed Dec 16 21:05:27 1998 --- gcc-3.1/gcc/config/i386/xm-sysv3.h Thu Jan 1 00:00:00 1970 *************** *** 1,4 **** - /* Configuration for GCC for Intel i386 running System V Release 3. */ - - #include "i386/xm-i386.h" - #include "xm-svr3.h" --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/xm-sysv4.h gcc-3.1/gcc/config/i386/xm-sysv4.h *** gcc-3.0.4/gcc/config/i386/xm-sysv4.h Wed Dec 16 21:05:28 1998 --- gcc-3.1/gcc/config/i386/xm-sysv4.h Thu Jan 1 00:00:00 1970 *************** *** 1,5 **** - /* Configuration for GCC for Intel i386 running System V Release 4. */ - - #ifdef __HIGHC__ - #include /* for MetaWare High-C on NCR System 3000 */ - #endif --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/xm-winnt.h gcc-3.1/gcc/config/i386/xm-winnt.h *** gcc-3.0.4/gcc/config/i386/xm-winnt.h Wed Dec 16 21:05:30 1998 --- gcc-3.1/gcc/config/i386/xm-winnt.h Thu Jan 1 00:00:00 1970 *************** *** 1,24 **** - /* Configuration for GNU compiler - for an Intel i386 or later processor running Windows NT 3.x. - Copyright (C) 1994 Free Software Foundation, Inc. - Contributed by Douglas B. Rupp (drupp@cs.washington.edu) - - 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 "winnt/xm-winnt.h" - #include "i386/xm-i386.h" --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i386/xmmintrin.h gcc-3.1/gcc/config/i386/xmmintrin.h *** gcc-3.0.4/gcc/config/i386/xmmintrin.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/i386/xmmintrin.h Sat Jan 12 10:05:28 2002 *************** *** 0 **** --- 1,1061 ---- + /* Copyright (C) 2002 Free Software Foundation, Inc. + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GNU CC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU CC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + /* As a special exception, if you include this header file into source + files compiled by GCC, this header file does not by itself cause + the resulting executable to be covered by the GNU General Public + License. This exception does not however invalidate any other + reasons why the executable file might be covered by the GNU General + Public License. */ + + /* Implemented from the specification included in the Intel C++ Compiler + User Guide and Reference, version 5.0. */ + + #ifndef _XMMINTRIN_H_INCLUDED + #define _XMMINTRIN_H_INCLUDED + + /* We need type definitions from the MMX header file. */ + #include + + /* The data type indended for user use. */ + typedef int __m128 __attribute__ ((__mode__(__V4SF__))); + + /* Internal data types for implementing the instrinsics. */ + typedef int __v4sf __attribute__ ((__mode__(__V4SF__))); + typedef int __v4si __attribute__ ((__mode__(__V4SI__))); + + /* Create a selector for use with the SHUFPS instruction. */ + #define _MM_SHUFFLE(fp3,fp2,fp1,fp0) \ + (((fp3) << 6) | ((fp2) << 4) | ((fp1) << 2) | (fp0)) + + /* Constants for use with _mm_prefetch. */ + enum _mm_hint + { + _MM_HINT_T0 = 3, + _MM_HINT_T1 = 2, + _MM_HINT_T2 = 1, + _MM_HINT_NTA = 0 + }; + + /* Bits in the MXCSR. */ + #define _MM_EXCEPT_MASK 0x003f + #define _MM_EXCEPT_INVALID 0x0001 + #define _MM_EXCEPT_DENORM 0x0002 + #define _MM_EXCEPT_DIV_ZERO 0x0004 + #define _MM_EXCEPT_OVERFLOW 0x0008 + #define _MM_EXCEPT_UNDERFLOW 0x0010 + #define _MM_EXCEPT_INEXACT 0x0020 + + #define _MM_MASK_MASK 0x1f80 + #define _MM_MASK_INVALID 0x0080 + #define _MM_MASK_DENORM 0x0100 + #define _MM_MASK_DIV_ZERO 0x0200 + #define _MM_MASK_OVERFLOW 0x0400 + #define _MM_MASK_UNDERFLOW 0x0800 + #define _MM_MASK_INEXACT 0x1000 + + #define _MM_ROUND_MASK 0x6000 + #define _MM_ROUND_NEAREST 0x0000 + #define _MM_ROUND_DOWN 0x2000 + #define _MM_ROUND_UP 0x4000 + #define _MM_ROUND_TOWARD_ZERO 0x6000 + + #define _MM_FLUSH_ZERO_MASK 0x8000 + #define _MM_FLUSH_ZERO_ON 0x8000 + #define _MM_FLUSH_ZERO_OFF 0x0000 + + /* Perform the respective operation on the lower SPFP (single-precision + floating-point) values of A and B; the upper three SPFP values are + passed through from A. */ + + static __inline __m128 + _mm_add_ss (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_addss ((__v4sf)__A, (__v4sf)__B); + } + + static __inline __m128 + _mm_sub_ss (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_subss ((__v4sf)__A, (__v4sf)__B); + } + + static __inline __m128 + _mm_mul_ss (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_mulss ((__v4sf)__A, (__v4sf)__B); + } + + static __inline __m128 + _mm_div_ss (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_divss ((__v4sf)__A, (__v4sf)__B); + } + + static __inline __m128 + _mm_sqrt_ss (__m128 __A) + { + return (__m128) __builtin_ia32_sqrtss ((__v4sf)__A); + } + + static __inline __m128 + _mm_rcp_ss (__m128 __A) + { + return (__m128) __builtin_ia32_rcpss ((__v4sf)__A); + } + + static __inline __m128 + _mm_rsqrt_ss (__m128 __A) + { + return (__m128) __builtin_ia32_rsqrtss ((__v4sf)__A); + } + + static __inline __m128 + _mm_min_ss (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_minss ((__v4sf)__A, (__v4sf)__B); + } + + static __inline __m128 + _mm_max_ss (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_maxss ((__v4sf)__A, (__v4sf)__B); + } + + /* Perform the respective operation on the four SPFP values in A and B. */ + + static __inline __m128 + _mm_add_ps (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_addps ((__v4sf)__A, (__v4sf)__B); + } + + static __inline __m128 + _mm_sub_ps (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_subps ((__v4sf)__A, (__v4sf)__B); + } + + static __inline __m128 + _mm_mul_ps (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_mulps ((__v4sf)__A, (__v4sf)__B); + } + + static __inline __m128 + _mm_div_ps (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_divps ((__v4sf)__A, (__v4sf)__B); + } + + static __inline __m128 + _mm_sqrt_ps (__m128 __A) + { + return (__m128) __builtin_ia32_sqrtps ((__v4sf)__A); + } + + static __inline __m128 + _mm_rcp_ps (__m128 __A) + { + return (__m128) __builtin_ia32_rcpps ((__v4sf)__A); + } + + static __inline __m128 + _mm_rsqrt_ps (__m128 __A) + { + return (__m128) __builtin_ia32_rsqrtps ((__v4sf)__A); + } + + static __inline __m128 + _mm_min_ps (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_minps ((__v4sf)__A, (__v4sf)__B); + } + + static __inline __m128 + _mm_max_ps (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_maxps ((__v4sf)__A, (__v4sf)__B); + } + + /* Perform logical bit-wise operations on 128-bit values. */ + + static __inline __m128 + _mm_and_ps (__m128 __A, __m128 __B) + { + return __builtin_ia32_andps (__A, __B); + } + + static __inline __m128 + _mm_andnot_ps (__m128 __A, __m128 __B) + { + return __builtin_ia32_andnps (__A, __B); + } + + static __inline __m128 + _mm_or_ps (__m128 __A, __m128 __B) + { + return __builtin_ia32_orps (__A, __B); + } + + static __inline __m128 + _mm_xor_ps (__m128 __A, __m128 __B) + { + return __builtin_ia32_xorps (__A, __B); + } + + /* Perform a comparison on the lower SPFP values of A and B. If the + comparison is true, place a mask of all ones in the result, otherwise a + mask of zeros. The upper three SPFP values are passed through from A. */ + + static __inline __m128 + _mm_cmpeq_ss (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_cmpeqss ((__v4sf)__A, (__v4sf)__B); + } + + static __inline __m128 + _mm_cmplt_ss (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_cmpltss ((__v4sf)__A, (__v4sf)__B); + } + + static __inline __m128 + _mm_cmple_ss (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_cmpless ((__v4sf)__A, (__v4sf)__B); + } + + static __inline __m128 + _mm_cmpgt_ss (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_cmpgtss ((__v4sf)__A, (__v4sf)__B); + } + + static __inline __m128 + _mm_cmpge_ss (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_cmpgess ((__v4sf)__A, (__v4sf)__B); + } + + static __inline __m128 + _mm_cmpneq_ss (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_cmpneqss ((__v4sf)__A, (__v4sf)__B); + } + + static __inline __m128 + _mm_cmpnlt_ss (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_cmpnltss ((__v4sf)__A, (__v4sf)__B); + } + + static __inline __m128 + _mm_cmpnle_ss (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_cmpnless ((__v4sf)__A, (__v4sf)__B); + } + + static __inline __m128 + _mm_cmpngt_ss (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_cmpngtss ((__v4sf)__A, (__v4sf)__B); + } + + static __inline __m128 + _mm_cmpnge_ss (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_cmpngess ((__v4sf)__A, (__v4sf)__B); + } + + static __inline __m128 + _mm_cmpord_ss (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_cmpordss ((__v4sf)__A, (__v4sf)__B); + } + + static __inline __m128 + _mm_cmpunord_ss (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_cmpunordss ((__v4sf)__A, (__v4sf)__B); + } + + /* Perform a comparison on the four SPFP values of A and B. For each + element, if the comparison is true, place a mask of all ones in the + result, otherwise a mask of zeros. */ + + static __inline __m128 + _mm_cmpeq_ps (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_cmpeqps ((__v4sf)__A, (__v4sf)__B); + } + + static __inline __m128 + _mm_cmplt_ps (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_cmpltps ((__v4sf)__A, (__v4sf)__B); + } + + static __inline __m128 + _mm_cmple_ps (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_cmpleps ((__v4sf)__A, (__v4sf)__B); + } + + static __inline __m128 + _mm_cmpgt_ps (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_cmpgtps ((__v4sf)__A, (__v4sf)__B); + } + + static __inline __m128 + _mm_cmpge_ps (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_cmpgeps ((__v4sf)__A, (__v4sf)__B); + } + + static __inline __m128 + _mm_cmpneq_ps (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_cmpneqps ((__v4sf)__A, (__v4sf)__B); + } + + static __inline __m128 + _mm_cmpnlt_ps (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_cmpnltps ((__v4sf)__A, (__v4sf)__B); + } + + static __inline __m128 + _mm_cmpnle_ps (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_cmpnleps ((__v4sf)__A, (__v4sf)__B); + } + + static __inline __m128 + _mm_cmpngt_ps (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_cmpngtps ((__v4sf)__A, (__v4sf)__B); + } + + static __inline __m128 + _mm_cmpnge_ps (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_cmpngeps ((__v4sf)__A, (__v4sf)__B); + } + + static __inline __m128 + _mm_cmpord_ps (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_cmpordps ((__v4sf)__A, (__v4sf)__B); + } + + static __inline __m128 + _mm_cmpunord_ps (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_cmpunordps ((__v4sf)__A, (__v4sf)__B); + } + + /* Compare the lower SPFP values of A and B and return 1 if true + and 0 if false. */ + + static __inline int + _mm_comieq_ss (__m128 __A, __m128 __B) + { + return __builtin_ia32_comieq ((__v4sf)__A, (__v4sf)__B); + } + + static __inline int + _mm_comilt_ss (__m128 __A, __m128 __B) + { + return __builtin_ia32_comilt ((__v4sf)__A, (__v4sf)__B); + } + + static __inline int + _mm_comile_ss (__m128 __A, __m128 __B) + { + return __builtin_ia32_comile ((__v4sf)__A, (__v4sf)__B); + } + + static __inline int + _mm_comigt_ss (__m128 __A, __m128 __B) + { + return __builtin_ia32_comigt ((__v4sf)__A, (__v4sf)__B); + } + + static __inline int + _mm_comige_ss (__m128 __A, __m128 __B) + { + return __builtin_ia32_comige ((__v4sf)__A, (__v4sf)__B); + } + + static __inline int + _mm_comineq_ss (__m128 __A, __m128 __B) + { + return __builtin_ia32_comineq ((__v4sf)__A, (__v4sf)__B); + } + + static __inline int + _mm_ucomieq_ss (__m128 __A, __m128 __B) + { + return __builtin_ia32_ucomieq ((__v4sf)__A, (__v4sf)__B); + } + + static __inline int + _mm_ucomilt_ss (__m128 __A, __m128 __B) + { + return __builtin_ia32_ucomilt ((__v4sf)__A, (__v4sf)__B); + } + + static __inline int + _mm_ucomile_ss (__m128 __A, __m128 __B) + { + return __builtin_ia32_ucomile ((__v4sf)__A, (__v4sf)__B); + } + + static __inline int + _mm_ucomigt_ss (__m128 __A, __m128 __B) + { + return __builtin_ia32_ucomigt ((__v4sf)__A, (__v4sf)__B); + } + + static __inline int + _mm_ucomige_ss (__m128 __A, __m128 __B) + { + return __builtin_ia32_ucomige ((__v4sf)__A, (__v4sf)__B); + } + + static __inline int + _mm_ucomineq_ss (__m128 __A, __m128 __B) + { + return __builtin_ia32_ucomineq ((__v4sf)__A, (__v4sf)__B); + } + + /* Convert the lower SPFP value to a 32-bit integer according to the current + rounding mode. */ + static __inline int + _mm_cvtss_si32 (__m128 __A) + { + return __builtin_ia32_cvtss2si ((__v4sf) __A); + } + + /* Convert the two lower SPFP values to 32-bit integers according to the + current rounding mode. Return the integers in packed form. */ + static __inline __m64 + _mm_cvtps_pi32 (__m128 __A) + { + return (__m64) __builtin_ia32_cvtps2pi ((__v4sf) __A); + } + + /* Truncate the lower SPFP value to a 32-bit integer. */ + static __inline int + _mm_cvttss_si32 (__m128 __A) + { + return __builtin_ia32_cvttss2si ((__v4sf) __A); + } + + /* Truncate the two lower SPFP values to 32-bit integers. Return the + integers in packed form. */ + static __inline __m64 + _mm_cvttps_pi32 (__m128 __A) + { + return (__m64) __builtin_ia32_cvttps2pi ((__v4sf) __A); + } + + /* Convert B to a SPFP value and insert it as element zero in A. */ + static __inline __m128 + _mm_cvtsi32_ss (__m128 __A, int __B) + { + return (__m128) __builtin_ia32_cvtsi2ss ((__v4sf) __A, __B); + } + + /* Convert the two 32-bit values in B to SPFP form and insert them + as the two lower elements in A. */ + static __inline __m128 + _mm_cvtpi32_ps (__m128 __A, __m64 __B) + { + return (__m128) __builtin_ia32_cvtpi2ps ((__v4sf) __A, (__v2si)__B); + } + + /* Convert the four signed 16-bit values in A to SPFP form. */ + static __inline __m128 + _mm_cvtpi16_ps (__m64 __A) + { + __v4hi __sign; + __v2si __hisi, __losi; + __v4sf __r; + + /* This comparison against zero gives us a mask that can be used to + fill in the missing sign bits in the unpack operations below, so + that we get signed values after unpacking. */ + __sign = (__v4hi) __builtin_ia32_mmx_zero (); + __sign = __builtin_ia32_pcmpgtw (__sign, (__v4hi)__A); + + /* Convert the four words to doublewords. */ + __hisi = (__v2si) __builtin_ia32_punpckhwd ((__v4hi)__A, __sign); + __losi = (__v2si) __builtin_ia32_punpcklwd ((__v4hi)__A, __sign); + + /* Convert the doublewords to floating point two at a time. */ + __r = (__v4sf) __builtin_ia32_setzerops (); + __r = __builtin_ia32_cvtpi2ps (__r, __hisi); + __r = __builtin_ia32_movlhps (__r, __r); + __r = __builtin_ia32_cvtpi2ps (__r, __losi); + + return (__m128) __r; + } + + /* Convert the four unsigned 16-bit values in A to SPFP form. */ + static __inline __m128 + _mm_cvtpu16_ps (__m64 __A) + { + __v4hi __zero = (__v4hi) __builtin_ia32_mmx_zero (); + __v2si __hisi, __losi; + __v4sf __r; + + /* Convert the four words to doublewords. */ + __hisi = (__v2si) __builtin_ia32_punpckhwd ((__v4hi)__A, __zero); + __losi = (__v2si) __builtin_ia32_punpcklwd ((__v4hi)__A, __zero); + + /* Convert the doublewords to floating point two at a time. */ + __r = (__v4sf) __builtin_ia32_setzerops (); + __r = __builtin_ia32_cvtpi2ps (__r, __hisi); + __r = __builtin_ia32_movlhps (__r, __r); + __r = __builtin_ia32_cvtpi2ps (__r, __losi); + + return (__m128) __r; + } + + /* Convert the low four signed 8-bit values in A to SPFP form. */ + static __inline __m128 + _mm_cvtpi8_ps (__m64 __A) + { + __v8qi __sign; + + /* This comparison against zero gives us a mask that can be used to + fill in the missing sign bits in the unpack operations below, so + that we get signed values after unpacking. */ + __sign = (__v8qi) __builtin_ia32_mmx_zero (); + __sign = __builtin_ia32_pcmpgtb (__sign, (__v8qi)__A); + + /* Convert the four low bytes to words. */ + __A = (__m64) __builtin_ia32_punpcklbw ((__v8qi)__A, __sign); + + return _mm_cvtpi16_ps(__A); + } + + /* Convert the low four unsigned 8-bit values in A to SPFP form. */ + static __inline __m128 + _mm_cvtpu8_ps(__m64 __A) + { + __v8qi __zero = (__v8qi) __builtin_ia32_mmx_zero (); + __A = (__m64) __builtin_ia32_punpcklbw ((__v8qi)__A, __zero); + return _mm_cvtpu16_ps(__A); + } + + /* Convert the four signed 32-bit values in A and B to SPFP form. */ + static __inline __m128 + _mm_cvtpi32x2_ps(__m64 __A, __m64 __B) + { + __v4sf __zero = (__v4sf) __builtin_ia32_setzerops (); + __v4sf __sfa = __builtin_ia32_cvtpi2ps (__zero, (__v2si)__A); + __v4sf __sfb = __builtin_ia32_cvtpi2ps (__zero, (__v2si)__B); + return (__m128) __builtin_ia32_movlhps (__sfa, __sfb); + } + + /* Convert the four SPFP values in A to four signed 16-bit integers. */ + static __inline __m64 + _mm_cvtps_pi16(__m128 __A) + { + __v4sf __hisf = (__v4sf)__A; + __v4sf __losf = __builtin_ia32_movhlps (__hisf, __hisf); + __v2si __hisi = __builtin_ia32_cvtps2pi (__hisf); + __v2si __losi = __builtin_ia32_cvtps2pi (__losf); + return (__m64) __builtin_ia32_packssdw (__losi, __hisi); + } + + /* Convert the four SPFP values in A to four signed 8-bit integers. */ + static __inline __m64 + _mm_cvtps_pi8(__m128 __A) + { + __v4hi __tmp = (__v4hi) _mm_cvtps_pi16 (__A); + __v4hi __zero = (__v4hi) __builtin_ia32_mmx_zero (); + return (__m64) __builtin_ia32_packsswb (__tmp, __zero); + } + + /* Selects four specific SPFP values from A and B based on MASK. */ + #if 0 + static __inline __m128 + _mm_shuffle_ps (__m128 __A, __m128 __B, int __mask) + { + return (__m128) __builtin_ia32_shufps ((__v4sf)__A, (__v4sf)__B, __mask); + } + #else + #define _mm_shuffle_ps(A, B, MASK) \ + ((__m128) __builtin_ia32_shufps ((__v4sf)(A), (__v4sf)(B), (MASK))) + #endif + + + /* Selects and interleaves the upper two SPFP values from A and B. */ + static __inline __m128 + _mm_unpackhi_ps (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_unpckhps ((__v4sf)__A, (__v4sf)__B); + } + + /* Selects and interleaves the lower two SPFP values from A and B. */ + static __inline __m128 + _mm_unpacklo_ps (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_unpcklps ((__v4sf)__A, (__v4sf)__B); + } + + /* Sets the upper two SPFP values with 64-bits of data loaded from P; + the lower two values are passed through from A. */ + static __inline __m128 + _mm_loadh_pi (__m128 __A, __m64 *__P) + { + return (__m128) __builtin_ia32_loadhps ((__v4sf)__A, (__v2si *)__P); + } + + /* Stores the upper two SPFP values of A into P. */ + static __inline void + _mm_storeh_pi (__m64 *__P, __m128 __A) + { + __builtin_ia32_storehps ((__v2si *)__P, (__v4sf)__A); + } + + /* Moves the upper two values of B into the lower two values of A. */ + static __inline __m128 + _mm_movehl_ps (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_movhlps ((__v4sf)__A, (__v4sf)__B); + } + + /* Moves the lower two values of B into the upper two values of A. */ + static __inline __m128 + _mm_movelh_ps (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_movlhps ((__v4sf)__A, (__v4sf)__B); + } + + /* Sets the lower two SPFP values with 64-bits of data loaded from P; + the upper two values are passed through from A. */ + static __inline __m128 + _mm_loadl_pi (__m128 __A, __m64 *__P) + { + return (__m128) __builtin_ia32_loadlps ((__v4sf)__A, (__v2si *)__P); + } + + /* Stores the lower two SPFP values of A into P. */ + static __inline void + _mm_storel_pi (__m64 *__P, __m128 __A) + { + __builtin_ia32_storelps ((__v2si *)__P, (__v4sf)__A); + } + + /* Creates a 4-bit mask from the most significant bits of the SPFP values. */ + static __inline int + _mm_movemask_ps (__m128 __A) + { + return __builtin_ia32_movmskps ((__v4sf)__A); + } + + /* Return the contents of the control register. */ + static __inline unsigned int + _mm_getcsr (void) + { + return __builtin_ia32_stmxcsr (); + } + + /* Read exception bits from the control register. */ + static __inline unsigned int + _MM_GET_EXCEPTION_STATE (void) + { + return _mm_getcsr() & _MM_EXCEPT_MASK; + } + + static __inline unsigned int + _MM_GET_EXCEPTION_MASK (void) + { + return _mm_getcsr() & _MM_MASK_MASK; + } + + static __inline unsigned int + _MM_GET_ROUNDING_MODE (void) + { + return _mm_getcsr() & _MM_ROUND_MASK; + } + + static __inline unsigned int + _MM_GET_FLUSH_ZERO_MODE (void) + { + return _mm_getcsr() & _MM_FLUSH_ZERO_MASK; + } + + /* Set the control register to I. */ + static __inline void + _mm_setcsr (unsigned int __I) + { + __builtin_ia32_ldmxcsr (__I); + } + + /* Set exception bits in the control register. */ + static __inline void + _MM_SET_EXCEPTION_STATE(unsigned int __mask) + { + _mm_setcsr((_mm_getcsr() & ~_MM_EXCEPT_MASK) | __mask); + } + + static __inline void + _MM_SET_EXCEPTION_MASK (unsigned int __mask) + { + _mm_setcsr((_mm_getcsr() & ~_MM_MASK_MASK) | __mask); + } + + static __inline void + _MM_SET_ROUNDING_MODE (unsigned int __mode) + { + _mm_setcsr((_mm_getcsr() & ~_MM_ROUND_MASK) | __mode); + } + + static __inline void + _MM_SET_FLUSH_ZERO_MODE (unsigned int __mode) + { + _mm_setcsr((_mm_getcsr() & ~_MM_FLUSH_ZERO_MASK) | __mode); + } + + /* Create a vector with element 0 as *P and the rest zero. */ + static __inline __m128 + _mm_load_ss (float *__P) + { + return (__m128) __builtin_ia32_loadss (__P); + } + + /* Create a vector with all four elements equal to *P. */ + static __inline __m128 + _mm_load1_ps (float *__P) + { + __v4sf __tmp = __builtin_ia32_loadss (__P); + return (__m128) __builtin_ia32_shufps (__tmp, __tmp, _MM_SHUFFLE (0,0,0,0)); + } + + static __inline __m128 + _mm_load_ps1 (float *__P) + { + return _mm_load1_ps (__P); + } + + /* Load four SPFP values from P. The address must be 16-byte aligned. */ + static __inline __m128 + _mm_load_ps (float *__P) + { + return (__m128) __builtin_ia32_loadaps (__P); + } + + /* Load four SPFP values from P. The address need not be 16-byte aligned. */ + static __inline __m128 + _mm_loadu_ps (float *__P) + { + return (__m128) __builtin_ia32_loadups (__P); + } + + /* Load four SPFP values in reverse order. The address must be aligned. */ + static __inline __m128 + _mm_loadr_ps (float *__P) + { + __v4sf __tmp = __builtin_ia32_loadaps (__P); + return (__m128) __builtin_ia32_shufps (__tmp, __tmp, _MM_SHUFFLE (0,1,2,3)); + } + + /* Create a vector with element 0 as F and the rest zero. */ + static __inline __m128 + _mm_set_ss (float __F) + { + return (__m128) __builtin_ia32_loadss (&__F); + } + + /* Create a vector with all four elements equal to F. */ + static __inline __m128 + _mm_set1_ps (float __F) + { + __v4sf __tmp = __builtin_ia32_loadss (&__F); + return (__m128) __builtin_ia32_shufps (__tmp, __tmp, _MM_SHUFFLE (0,0,0,0)); + } + + static __inline __m128 + _mm_set_ps1 (float __F) + { + return _mm_set1_ps (__F); + } + + /* Create the vector [Z Y X W]. */ + static __inline __m128 + _mm_set_ps (float __Z, float __Y, float __X, float __W) + { + union { + float __a[4]; + __m128 __v; + } __u; + + __u.__a[0] = __W; + __u.__a[1] = __X; + __u.__a[2] = __Y; + __u.__a[3] = __Z; + + return __u.__v; + } + + /* Create the vector [W X Y Z]. */ + static __inline __m128 + _mm_setr_ps (float __Z, float __Y, float __X, float __W) + { + return _mm_set_ps (__W, __X, __Y, __Z); + } + + /* Create a vector of zeros. */ + static __inline __m128 + _mm_setzero_ps (void) + { + return (__m128) __builtin_ia32_setzerops (); + } + + /* Stores the lower SPFP value. */ + static __inline void + _mm_store_ss (float *__P, __m128 __A) + { + __builtin_ia32_storess (__P, (__v4sf)__A); + } + + /* Store the lower SPFP value across four words. */ + static __inline void + _mm_store1_ps (float *__P, __m128 __A) + { + __v4sf __va = (__v4sf)__A; + __v4sf __tmp = __builtin_ia32_shufps (__va, __va, _MM_SHUFFLE (0,0,0,0)); + __builtin_ia32_storeaps (__P, __tmp); + } + + static __inline void + _mm_store_ps1 (float *__P, __m128 __A) + { + _mm_store1_ps (__P, __A); + } + + /* Store four SPFP values. The address must be 16-byte aligned. */ + static __inline void + _mm_store_ps (float *__P, __m128 __A) + { + __builtin_ia32_storeaps (__P, (__v4sf)__A); + } + + /* Store four SPFP values. The address need not be 16-byte aligned. */ + static __inline void + _mm_storeu_ps (float *__P, __m128 __A) + { + __builtin_ia32_storeups (__P, (__v4sf)__A); + } + + /* Store four SPFP values in reverse order. The addres must be aligned. */ + static __inline void + _mm_storer_ps (float *__P, __m128 __A) + { + __v4sf __va = (__v4sf)__A; + __v4sf __tmp = __builtin_ia32_shufps (__va, __va, _MM_SHUFFLE (0,1,2,3)); + __builtin_ia32_storeaps (__P, __tmp); + } + + /* Sets the low SPFP value of A from the low value of B. */ + static __inline __m128 + _mm_move_ss (__m128 __A, __m128 __B) + { + return (__m128) __builtin_ia32_movss ((__v4sf)__A, (__v4sf)__B); + } + + /* Extracts one of the four words of A. The selector N must be immediate. */ + #if 0 + static __inline int + _mm_extract_pi16 (__m64 __A, int __N) + { + return __builtin_ia32_pextrw ((__v4hi)__A, __N); + } + #else + #define _mm_extract_pi16(A, N) \ + __builtin_ia32_pextrw ((__v4hi)(A), (N)) + #endif + + /* Inserts word D into one of four words of A. The selector N must be + immediate. */ + #if 0 + static __inline __m64 + _mm_insert_pi16 (__m64 __A, int __D, int __N) + { + return (__m64)__builtin_ia32_pinsrw ((__v4hi)__A, __D, __N); + } + #else + #define _mm_insert_pi16(A, D, N) \ + ((__m64) __builtin_ia32_pinsrw ((__v4hi)(A), (D), (N))) + #endif + + /* Compute the element-wise maximum of signed 16-bit values. */ + static __inline __m64 + _mm_max_pi16 (__m64 __A, __m64 __B) + { + return (__m64) __builtin_ia32_pmaxsw ((__v4hi)__A, (__v4hi)__B); + } + + /* Compute the element-wise maximum of unsigned 8-bit values. */ + static __inline __m64 + _mm_max_pu8 (__m64 __A, __m64 __B) + { + return (__m64) __builtin_ia32_pmaxub ((__v8qi)__A, (__v8qi)__B); + } + + /* Compute the element-wise minimum of signed 16-bit values. */ + static __inline __m64 + _mm_min_pi16 (__m64 __A, __m64 __B) + { + return (__m64) __builtin_ia32_pminsw ((__v4hi)__A, (__v4hi)__B); + } + + /* Compute the element-wise minimum of unsigned 8-bit values. */ + static __inline __m64 + _mm_min_pu8 (__m64 __A, __m64 __B) + { + return (__m64) __builtin_ia32_pminub ((__v8qi)__A, (__v8qi)__B); + } + + /* Create an 8-bit mask of the signs of 8-bit values. */ + static __inline int + _mm_movemask_pi8 (__m64 __A) + { + return __builtin_ia32_pmovmskb ((__v8qi)__A); + } + + /* Multiply four unsigned 16-bit values in A by four unsigned 16-bit values + in B and produce the high 16 bits of the 32-bit results. */ + static __inline __m64 + _mm_mulhi_pu16 (__m64 __A, __m64 __B) + { + return (__m64) __builtin_ia32_pmulhuw ((__v4hi)__A, (__v4hi)__B); + } + + /* Return a combination of the four 16-bit values in A. The selector + must be an immediate. */ + #if 0 + static __inline __m64 + _mm_shuffle_pi16 (__m64 __A, int __N) + { + return (__m64) __builtin_ia32_pshufw ((__v4hi)__A, __N); + } + #else + #define _mm_shuffle_pi16(A, N) \ + ((__m64) __builtin_ia32_pshufw ((__v4hi)(A), (N))) + #endif + + /* Conditionally store byte elements of A into P. The high bit of each + byte in the selector N determines whether the corresponding byte from + A is stored. */ + static __inline void + _mm_maskmove_si64 (__m64 __A, __m64 __N, char *__P) + { + __builtin_ia32_maskmovq ((__v8qi)__A, (__v8qi)__N, __P); + } + + /* Compute the rounded averages of the unsigned 8-bit values in A and B. */ + static __inline __m64 + _mm_avg_pu8 (__m64 __A, __m64 __B) + { + return (__m64) __builtin_ia32_pavgb ((__v8qi)__A, (__v8qi)__B); + } + + /* Compute the rounded averages of the unsigned 16-bit values in A and B. */ + static __inline __m64 + _mm_avg_pu16 (__m64 __A, __m64 __B) + { + return (__m64) __builtin_ia32_pavgw ((__v4hi)__A, (__v4hi)__B); + } + + /* Compute the sum of the absolute differences of the unsigned 8-bit + values in A and B. Return the value in the lower 16-bit word; the + upper words are cleared. */ + static __inline __m64 + _mm_sad_pu8 (__m64 __A, __m64 __B) + { + return (__m64) __builtin_ia32_psadbw ((__v8qi)__A, (__v8qi)__B); + } + + /* Loads one cache line from address P to a location "closer" to the + processor. The selector I specifies the type of prefetch operation. */ + #if 0 + static __inline void + _mm_prefetch (void *__P, enum _mm_hint __I) + { + __builtin_prefetch (__P, 0, __I); + } + #else + #define _mm_prefetch(P, I) \ + __builtin_prefetch ((P), 0, (I)) + #endif + + /* Stores the data in A to the address P without polluting the caches. */ + static __inline void + _mm_stream_pi (__m64 *__P, __m64 __A) + { + __builtin_ia32_movntq (__P, __A); + } + + /* Likewise. The address must be 16-byte aligned. */ + static __inline void + _mm_stream_ps (float *__P, __m128 __A) + { + __builtin_ia32_movntps (__P, (__v4sf)__A); + } + + /* Guarantees that every preceeding store is globally visible before + any subsequent store. */ + static __inline void + _mm_sfence (void) + { + __builtin_ia32_sfence (); + } + + /* The execution of the next instruction is delayed by an implementation + specific amount of time. The instruction does not modify the + architectural state. */ + static __inline void + _mm_pause (void) + { + __asm__ __volatile__ ("rep; nop" : : ); + } + + /* Transpose the 4x4 matrix composed of row[0-3]. */ + #define _MM_TRANSPOSE4_PS(row0, row1, row2, row3) \ + do { \ + __v4sf __r0 = (row0), __r1 = (row1), __r2 = (row2), __r3 = (row3); \ + __v4sf __t0 = __builtin_ia32_shufps (__r0, __r1, 0x44); \ + __v4sf __t1 = __builtin_ia32_shufps (__r0, __r1, 0xEE); \ + __v4sf __t2 = __builtin_ia32_shufps (__r2, __r3, 0x44); \ + __v4sf __t3 = __builtin_ia32_shufps (__r2, __r3, 0xEE); \ + (row0) = __builtin_ia32_shufps (__t0, __t1, 0x88); \ + (row1) = __builtin_ia32_shufps (__t0, __t1, 0xDD); \ + (row2) = __builtin_ia32_shufps (__t2, __t3, 0x88); \ + (row3) = __builtin_ia32_shufps (__t2, __t3, 0xDD); \ + } while (0) + + #endif /* _XMMINTRIN_H_INCLUDED */ diff -Nrc3pad gcc-3.0.4/gcc/config/i860/bsd.h gcc-3.1/gcc/config/i860/bsd.h *** gcc-3.0.4/gcc/config/i860/bsd.h Mon Sep 25 13:03:20 2000 --- gcc-3.1/gcc/config/i860/bsd.h Sun Dec 16 15:43:41 2001 *************** *** 7,16 **** #define ASCII_DATA_ASM_OP "\t.byte\t" #define ASM_OUTPUT_ASCII(f, p, size) \ ! do { register unsigned i; \ int inside; \ inside = FALSE; \ ! for (i = 0; i < (size); i++) { \ if (i % 64 == 0) { \ if (i != 0) { \ if (inside) \ --- 7,16 ---- #define ASCII_DATA_ASM_OP "\t.byte\t" #define ASM_OUTPUT_ASCII(f, p, size) \ ! do { register size_t i, limit = (size); \ int inside; \ inside = FALSE; \ ! for (i = 0; i < limit; i++) { \ if (i % 64 == 0) { \ if (i != 0) { \ if (inside) \ diff -Nrc3pad gcc-3.0.4/gcc/config/i860/fx2800.h gcc-3.1/gcc/config/i860/fx2800.h *** gcc-3.0.4/gcc/config/i860/fx2800.h Thu Nov 2 23:29:10 2000 --- gcc-3.1/gcc/config/i860/fx2800.h Thu Dec 20 17:36:35 2001 *************** Boston, MA 02111-1307, USA. */ *** 100,106 **** sets long & unsigned long in 18 & 19, not in 100 & 101 as shown above. */ #define DBX_OUTPUT_STANDARD_TYPES(syms) \ ! { char *dtyps[]={"", "char", "short int", "int", "logical*1", \ "logical*2", "logical*4", "float", "double", "complex", \ "doublecomplex", "character", "void", "nil", "boolean", \ "unsigned char", "short unsigned int", "unsigned int", \ --- 100,107 ---- sets long & unsigned long in 18 & 19, not in 100 & 101 as shown above. */ #define DBX_OUTPUT_STANDARD_TYPES(syms) \ ! { static const char *const dtyps[] = { \ ! "", "char", "short int", "int", "logical*1", \ "logical*2", "logical*4", "float", "double", "complex", \ "doublecomplex", "character", "void", "nil", "boolean", \ "unsigned char", "short unsigned int", "unsigned int", \ *************** Boston, MA 02111-1307, USA. */ *** 157,162 **** --- 158,164 ---- #define DBX_MEMPARM_STABS_LETTER 'k' #define DBX_REGPARM_STABS_LETTER 'r' + #undef ASM_OUTPUT_SOURCE_LINE #define ASM_OUTPUT_SOURCE_LINE(file,num) \ fprintf (file, "\t.stab \"\",.,0x%x,0,%d\n", \ N_SLINE,num) *************** Boston, MA 02111-1307, USA. */ *** 235,253 **** /* Undefine some things defined in i860.h because the native C compiler on the FX/2800 emits code to do these operations inline. For GCC, we will use the default implementation of these things... i.e. ! generating calls to libgcc1 routines. */ #undef DIVSI3_LIBCALL #undef UDIVSI3_LIBCALL #undef REMSI3_LIBCALL #undef UREMSI3_LIBCALL - /* The Alliant compiler's mod function gives the wrong result after a - shift operation. This bug typically hits in hash functions. */ - - #define perform_umodsi3(a, b) a %= b; if (a == b) a=0; return a - #define perform_modsi3(a, b) a %= b; if (a == b) a=0; return a - /* Global pointer needs to be 8 byte aligned? Link error if not... */ #define DATA_ALIGNMENT(dummy,align) \ --- 237,249 ---- /* Undefine some things defined in i860.h because the native C compiler on the FX/2800 emits code to do these operations inline. For GCC, we will use the default implementation of these things... i.e. ! generating calls to libgcc routines. */ #undef DIVSI3_LIBCALL #undef UDIVSI3_LIBCALL #undef REMSI3_LIBCALL #undef UREMSI3_LIBCALL /* Global pointer needs to be 8 byte aligned? Link error if not... */ #define DATA_ALIGNMENT(dummy,align) \ *************** Boston, MA 02111-1307, USA. */ *** 270,284 **** #undef ASM_COMMENT_START #define ASM_COMMENT_START "//" - /* Use definitions of ASM_OUTPUT_{DOUBLE,FLOAT} as given in i860.h */ - - #undef ASM_OUTPUT_DOUBLE - #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - fprintf(FILE, "\t.double %.20e\n", (VALUE)) - #undef ASM_OUTPUT_FLOAT - #define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - fprintf(FILE, "\t.float %.12e\n", (VALUE)) - #undef ASM_FILE_START #define ASM_FILE_START(FILE) #undef ASM_OUTPUT_FUNCTION_PREFIX --- 266,271 ---- *************** Boston, MA 02111-1307, USA. */ *** 289,296 **** /* Overrides for svr4.h begin here */ - #undef SVR4 - #undef SWITCH_TAKES_ARG #undef WORD_SWITCH_TAKES_ARG --- 276,281 ---- *************** Boston, MA 02111-1307, USA. */ *** 345,353 **** #define ASM_FILE_END(FILE) \ do { \ if (current_function_original_name != NULL) { \ tdesc_section(); \ ! fprintf ((FILE), "%s __ETEXT\n", ASM_LONG); \ ! fprintf ((FILE), "%s 0\n", ASM_LONG); \ text_section(); \ fputs("__ETEXT:\n", (FILE)); \ } \ --- 330,341 ---- #define ASM_FILE_END(FILE) \ do { \ if (current_function_original_name != NULL) { \ + const char *long_op = integer_asm_op (4, FALSE); \ tdesc_section(); \ ! fprintf ((FILE), "%s __ETEXT\n", long_op); \ ! fprintf ((FILE), "%s 0\n", long_op); \ ! fputs ("\t.long\t__ETEXT\n", (FILE)); \ ! fputs ("\t.long\t0\n", (FILE)); \ text_section(); \ fputs("__ETEXT:\n", (FILE)); \ } \ diff -Nrc3pad gcc-3.0.4/gcc/config/i860/i860-protos.h gcc-3.1/gcc/config/i860/i860-protos.h *** gcc-3.0.4/gcc/config/i860/i860-protos.h Tue Jan 11 18:19:22 2000 --- gcc-3.1/gcc/config/i860/i860-protos.h Fri Jul 6 18:40:11 2001 *************** extern rtx i860_va_arg PARAMS ((tree, tr *** 59,64 **** #ifdef TREE_CODE extern tree i860_build_va_list PARAMS ((void)); #endif /* TREE_CODE */ - - extern void function_prologue PARAMS ((FILE *, unsigned)); - extern void function_epilogue PARAMS ((FILE *, unsigned)); --- 59,61 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i860/i860.c gcc-3.1/gcc/config/i860/i860.c *** gcc-3.0.4/gcc/config/i860/i860.c Sat May 12 20:32:48 2001 --- gcc-3.1/gcc/config/i860/i860.c Fri Mar 22 19:25:49 2002 *************** *** 1,5 **** /* Subroutines for insn-output.c for Intel 860 ! Copyright (C) 1989, 1991, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. Derived from sparc.c. --- 1,5 ---- /* Subroutines for insn-output.c for Intel 860 ! Copyright (C) 1989, 1991, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Derived from sparc.c. *************** Boston, MA 02111-1307, USA. */ *** 42,47 **** --- 42,49 ---- #include "function.h" #include "expr.h" #include "tm_p.h" + #include "target.h" + #include "target-def.h" static rtx find_addr_reg PARAMS ((rtx)); static int reg_clobbered_p PARAMS ((rtx, rtx)); *************** static const char *singlemove_string PAR *** 49,54 **** --- 51,58 ---- static const char *load_opcode PARAMS ((enum machine_mode, const char *, rtx)); static const char *store_opcode PARAMS ((enum machine_mode, const char *, rtx)); static void output_size_for_block_move PARAMS ((rtx, rtx, rtx)); + static void i860_output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT)); + static void i860_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT)); #ifndef I860_REG_PREFIX #define I860_REG_PREFIX "" *************** const char *i860_reg_prefix = I860_REG_P *** 60,65 **** --- 64,77 ---- rtx i860_compare_op0, i860_compare_op1; + /* Initialize the GCC target structure. */ + #undef TARGET_ASM_FUNCTION_PROLOGUE + #define TARGET_ASM_FUNCTION_PROLOGUE i860_output_function_prologue + #undef TARGET_ASM_FUNCTION_EPILOGUE + #define TARGET_ASM_FUNCTION_EPILOGUE i860_output_function_epilogue + + struct gcc_target targetm = TARGET_INITIALIZER; + /* Return non-zero if this pattern, can be evaluated safely, even if it was not asked for. */ int *************** single_insn_src_p (op, mode) *** 340,346 **** return 1; case SUBREG: ! if (SUBREG_WORD (op) != 0) return 0; return single_insn_src_p (SUBREG_REG (op), mode); --- 352,358 ---- return 1; case SUBREG: ! if (SUBREG_BYTE (op) != 0) return 0; return single_insn_src_p (SUBREG_REG (op), mode); *************** load_operand (op, mode) *** 454,460 **** return (memory_operand (op, mode) || indexed_operand (op, mode)); } ! /* Return truth value of whether OP is a integer which fits the range constraining immediate operands in add/subtract insns. */ int --- 466,472 ---- return (memory_operand (op, mode) || indexed_operand (op, mode)); } ! /* Return truth value of whether OP is an integer which fits the range constraining immediate operands in add/subtract insns. */ int *************** small_int (op, mode) *** 465,471 **** return (GET_CODE (op) == CONST_INT && SMALL_INT (op)); } ! /* Return truth value of whether OP is a integer which fits the range constraining immediate operands in logic insns. */ int --- 477,483 ---- return (GET_CODE (op) == CONST_INT && SMALL_INT (op)); } ! /* Return truth value of whether OP is an integer which fits the range constraining immediate operands in logic insns. */ int *************** output_move_double (operands) *** 637,650 **** if (optype0 == REGOP) latehalf[0] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1); else if (optype0 == OFFSOP) ! latehalf[0] = adj_offsettable_operand (operands[0], 4); else latehalf[0] = operands[0]; if (optype1 == REGOP) latehalf[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1); else if (optype1 == OFFSOP) ! latehalf[1] = adj_offsettable_operand (operands[1], 4); else if (optype1 == CNSTOP) { if (GET_CODE (operands[1]) == CONST_DOUBLE) --- 649,662 ---- if (optype0 == REGOP) latehalf[0] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1); else if (optype0 == OFFSOP) ! latehalf[0] = adjust_address (operands[0], SImode, 4); else latehalf[0] = operands[0]; if (optype1 == REGOP) latehalf[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1); else if (optype1 == OFFSOP) ! latehalf[1] = adjust_address (operands[1], SImode, 4); else if (optype1 == CNSTOP) { if (GET_CODE (operands[1]) == CONST_DOUBLE) *************** output_move_double (operands) *** 702,708 **** xops[1] = operands[0]; output_asm_insn ("adds %1,%0,%1", xops); operands[1] = gen_rtx_MEM (DImode, operands[0]); ! latehalf[1] = adj_offsettable_operand (operands[1], 4); addreg1 = 0; highest_first = 1; } --- 714,720 ---- xops[1] = operands[0]; output_asm_insn ("adds %1,%0,%1", xops); operands[1] = gen_rtx_MEM (DImode, operands[0]); ! latehalf[1] = adjust_address (operands[1], SImode, 4); addreg1 = 0; highest_first = 1; } *************** output_delayed_branch (template, operand *** 1451,1464 **** We must do this after outputting the branch insn, since operands may just be a pointer to `recog_data.operand'. */ INSN_CODE (delay_insn) = insn_code_number ! = recog (pat, delay_insn, NULL_PTR); if (insn_code_number == -1) abort (); for (i = 0; i < insn_data[insn_code_number].n_operands; i++) { if (GET_CODE (recog_data.operand[i]) == SUBREG) ! recog_data.operand[i] = alter_subreg (recog_data.operand[i]); } insn_extract (delay_insn); --- 1463,1476 ---- We must do this after outputting the branch insn, since operands may just be a pointer to `recog_data.operand'. */ INSN_CODE (delay_insn) = insn_code_number ! = recog (pat, delay_insn, NULL); if (insn_code_number == -1) abort (); for (i = 0; i < insn_data[insn_code_number].n_operands; i++) { if (GET_CODE (recog_data.operand[i]) == SUBREG) ! alter_subreg (&recog_data.operand[i]); } insn_extract (delay_insn); *************** output_delay_insn (delay_insn) *** 1499,1505 **** for (i = 0; i < insn_data[insn_code_number].n_operands; i++) { if (GET_CODE (recog_data.operand[i]) == SUBREG) ! recog_data.operand[i] = alter_subreg (recog_data.operand[i]); } if (! constrain_operands (1)) --- 1511,1517 ---- for (i = 0; i < insn_data[insn_code_number].n_operands; i++) { if (GET_CODE (recog_data.operand[i]) == SUBREG) ! alter_subreg (&recog_data.operand[i]); } if (! constrain_operands (1)) *************** sfmode_constant_to_ulong (x) *** 1551,1557 **** } /* This function generates the assembly code for function entry. - The macro FUNCTION_PROLOGUE in i860.h is defined to call this function. ASM_FILE is a stdio stream to output the code to. SIZE is an int: how many units of temporary storage to allocate. --- 1563,1568 ---- *************** sfmode_constant_to_ulong (x) *** 1650,1670 **** #define STACK_ALIGNMENT 16 #endif ! extern char call_used_regs[]; ! ! char *current_function_original_name; static int must_preserve_r1; static unsigned must_preserve_bytes; ! void ! function_prologue (asm_file, local_bytes) register FILE *asm_file; ! register unsigned local_bytes; { ! register unsigned frame_lower_bytes; ! register unsigned frame_upper_bytes; ! register unsigned total_fsize; register unsigned preserved_reg_bytes = 0; register unsigned i; register unsigned preserved_so_far = 0; --- 1661,1679 ---- #define STACK_ALIGNMENT 16 #endif ! const char *current_function_original_name; static int must_preserve_r1; static unsigned must_preserve_bytes; ! static void ! i860_output_function_prologue (asm_file, local_bytes) register FILE *asm_file; ! register HOST_WIDE_INT local_bytes; { ! register HOST_WIDE_INT frame_lower_bytes; ! register HOST_WIDE_INT frame_upper_bytes; ! register HOST_WIDE_INT total_fsize; register unsigned preserved_reg_bytes = 0; register unsigned i; register unsigned preserved_so_far = 0; *************** function_prologue (asm_file, local_bytes *** 1923,1929 **** } /* This function generates the assembly code for function exit. - The macro FUNCTION_EPILOGUE in i860.h is defined to call this function. ASM_FILE is a stdio stream to output the code to. SIZE is an int: how many units of temporary storage to allocate. --- 1932,1937 ---- *************** typedef struct TDESC { *** 1979,1998 **** unsigned int negative_frame_size; /* same as frame_lower_bytes */ } TDESC; ! void ! function_epilogue (asm_file, local_bytes) register FILE *asm_file; ! register unsigned local_bytes; { ! register unsigned frame_upper_bytes; ! register unsigned frame_lower_bytes; ! register unsigned preserved_reg_bytes = 0; register unsigned i; register unsigned restored_so_far = 0; register unsigned int_restored; register unsigned mask; unsigned intflags=0; register TDESC_flags *flags = (TDESC_flags *) &intflags; flags->version = 4; flags->reg_packing = 1; --- 1987,2009 ---- unsigned int negative_frame_size; /* same as frame_lower_bytes */ } TDESC; ! static void ! i860_output_function_epilogue (asm_file, local_bytes) register FILE *asm_file; ! register HOST_WIDE_INT local_bytes; { ! register HOST_WIDE_INT frame_upper_bytes; ! register HOST_WIDE_INT frame_lower_bytes; ! register HOST_WIDE_INT preserved_reg_bytes = 0; register unsigned i; register unsigned restored_so_far = 0; register unsigned int_restored; register unsigned mask; unsigned intflags=0; register TDESC_flags *flags = (TDESC_flags *) &intflags; + #ifdef OUTPUT_TDESC /* Output an ABI-compliant TDESC entry */ + const char *long_op = integer_asm_op (4, TRUE); + #endif flags->version = 4; flags->reg_packing = 1; *************** function_epilogue (asm_file, local_bytes *** 2082,2104 **** } assemble_name(asm_file,current_function_original_name); fputs(".TDESC:\n", asm_file); ! fprintf(asm_file, "%s 0x%0x\n", ASM_LONG, intflags); ! fprintf(asm_file, "%s %d\n", ASM_LONG, int_restored ? must_preserve_bytes : 0); if (flags->version > 1) { ! fprintf(asm_file, "%s %d\n", ASM_LONG, (restored_so_far == int_restored) ? 0 : must_preserve_bytes + (4 * int_restored)); if (flags->version > 2) { ! fprintf(asm_file, "%s %d\n", ASM_LONG, frame_upper_bytes); if (flags->version > 3) ! fprintf(asm_file, "%s %d\n", ASM_LONG, frame_lower_bytes); } } tdesc_section(); ! fprintf(asm_file, "%s ", ASM_LONG); assemble_name(asm_file, current_function_original_name); ! fprintf(asm_file, "\n%s ", ASM_LONG); assemble_name(asm_file, current_function_original_name); fputs(".TDESC\n", asm_file); text_section(); --- 2093,2115 ---- } assemble_name(asm_file,current_function_original_name); fputs(".TDESC:\n", asm_file); ! fprintf(asm_file, "%s 0x%0x\n", long_op, intflags); ! fprintf(asm_file, "%s %d\n", long_op, int_restored ? must_preserve_bytes : 0); if (flags->version > 1) { ! fprintf(asm_file, "%s %d\n", long_op, (restored_so_far == int_restored) ? 0 : must_preserve_bytes + (4 * int_restored)); if (flags->version > 2) { ! fprintf(asm_file, "%s %d\n", long_op, frame_upper_bytes); if (flags->version > 3) ! fprintf(asm_file, "%s %d\n", long_op, frame_lower_bytes); } } tdesc_section(); ! fprintf(asm_file, "%s ", long_op); assemble_name(asm_file, current_function_original_name); ! fprintf(asm_file, "\n%s ", long_op); assemble_name(asm_file, current_function_original_name); fputs(".TDESC\n", asm_file); text_section(); *************** i860_va_arg (valist, type) *** 2302,2308 **** emit_cmp_and_jump_insns (expand_expr (field, NULL_RTX, 0, 0), GEN_INT (nparm - incr), GT, const0_rtx, TYPE_MODE (TREE_TYPE (field)), ! TREE_UNSIGNED (field), 0, lab_false); t = fold (build (POSTINCREMENT_EXPR, TREE_TYPE (field), field, build_int_2 (incr, 0))); --- 2313,2319 ---- emit_cmp_and_jump_insns (expand_expr (field, NULL_RTX, 0, 0), GEN_INT (nparm - incr), GT, const0_rtx, TYPE_MODE (TREE_TYPE (field)), ! TREE_UNSIGNED (field), lab_false); t = fold (build (POSTINCREMENT_EXPR, TREE_TYPE (field), field, build_int_2 (incr, 0))); diff -Nrc3pad gcc-3.0.4/gcc/config/i860/i860.h gcc-3.1/gcc/config/i860/i860.h *** gcc-3.0.4/gcc/config/i860/i860.h Thu Nov 2 23:29:10 2000 --- gcc-3.1/gcc/config/i860/i860.h Tue Jan 8 22:51:32 2002 *************** *** 1,6 **** /* Definitions of target machine for GNU compiler, for Intel 860. ! Copyright (C) 1989, 1991, 1993, 1995, 1996, 1997, 1998, 1999, 2000 ! Free Software Foundation, Inc. Hacked substantially by Ron Guilmette (rfg@monkeys.com) to cater to the whims of the System V Release 4 assembler. --- 1,6 ---- /* Definitions of target machine for GNU compiler, for Intel 860. ! Copyright (C) 1989, 1991, 1993, 1995, 1996, 1997, 1998, 1999, 2000, ! 2001, 2002 Free Software Foundation, Inc. Hacked substantially by Ron Guilmette (rfg@monkeys.com) to cater to the whims of the System V Release 4 assembler. *************** extern int target_flags; *** 126,132 **** when given unaligned data. */ #define STRICT_ALIGNMENT 1 ! /* If bit field type is int, dont let it cross an int, and give entire struct the alignment of an int. */ #define PCC_BITFIELD_TYPE_MATTERS 1 --- 126,132 ---- when given unaligned data. */ #define STRICT_ALIGNMENT 1 ! /* If bit field type is int, don't let it cross an int, and give entire struct the alignment of an int. */ #define PCC_BITFIELD_TYPE_MATTERS 1 *************** struct cumulative_args { int ints, float *** 557,570 **** ? PARM_BOUNDARY \ : GET_MODE_ALIGNMENT(MODE))) - /* This macro generates the assembly code for function entry. - - FILE is a stdio stream to output the code to. - SIZE is an int: how many units of temporary storage to allocate. - */ - - #define FUNCTION_PROLOGUE(FILE, SIZE) function_prologue ((FILE), (SIZE)) - /* Output a no-op just before the beginning of the function, to ensure that there does not appear to be a delayed branch there. Such a thing would confuse interrupt recovery. */ --- 557,562 ---- *************** struct cumulative_args { int ints, float *** 584,602 **** #define EXIT_IGNORE_STACK 1 - /* This macro generates the assembly code for function exit. - - FILE is a stdio stream to output the code to. - SIZE is an int: how many units of temporary storage to allocate. - - The function epilogue should not depend on the current stack pointer! - It should use the frame pointer only. This is mandatory because - of alloca; we also take advantage of it to omit stack adjustments - before returning. - */ - - #define FUNCTION_EPILOGUE(FILE, SIZE) function_epilogue ((FILE), (SIZE)) - /* Generate necessary RTL for __builtin_saveregs(). */ #define EXPAND_BUILTIN_SAVEREGS() \ i860_saveregs() --- 576,581 ---- *************** struct cumulative_args { int ints, float *** 635,645 **** or #BOTTOM_OF_STATIC,r29,r29 */ #define TRAMPOLINE_TEMPLATE(FILE) \ { \ ! ASM_OUTPUT_INT (FILE, GEN_INT (0xec1f0000)); \ ! ASM_OUTPUT_INT (FILE, GEN_INT (0xe7ff0000)); \ ! ASM_OUTPUT_INT (FILE, GEN_INT (0xec1d0000)); \ ! ASM_OUTPUT_INT (FILE, GEN_INT (0x4000f800)); \ ! ASM_OUTPUT_INT (FILE, GEN_INT (0xe7bd0000)); \ } /* Length in units of the trampoline for entering a nested function. */ --- 614,624 ---- or #BOTTOM_OF_STATIC,r29,r29 */ #define TRAMPOLINE_TEMPLATE(FILE) \ { \ ! assemble_aligned_integer (UNITS_PER_WORD, GEN_INT (0xec1f0000)); \ ! assemble_aligned_integer (UNITS_PER_WORD, GEN_INT (0xe7ff0000)); \ ! assemble_aligned_integer (UNITS_PER_WORD, GEN_INT (0xec1d0000)); \ ! assemble_aligned_integer (UNITS_PER_WORD, GEN_INT (0x4000f800)); \ ! assemble_aligned_integer (UNITS_PER_WORD, GEN_INT (0xe7bd0000)); \ } /* Length in units of the trampoline for entering a nested function. */ *************** struct cumulative_args { int ints, float *** 865,876 **** Do not define this if the table should contain absolute addresses. */ /* #define CASE_VECTOR_PC_RELATIVE 1 */ - /* Specify the tree operation to be used to convert reals to integers. */ - #define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR - - /* This is the kind of divide that is easiest to do in the general case. */ - #define EASY_DIV_EXPR TRUNC_DIV_EXPR - /* Must pass floats to libgcc functions as doubles. */ #define LIBGCC_NEEDS_DOUBLE 1 --- 844,849 ---- *************** struct cumulative_args { int ints, float *** 996,1004 **** /* Assembler pseudos to introduce constants of various size. */ - #define ASM_BYTE_OP "\t.byte\t" - #define ASM_SHORT "\t.short" - #define ASM_LONG "\t.long" #define ASM_DOUBLE "\t.double" /* Output at beginning of assembler file. */ --- 969,974 ---- *************** struct cumulative_args { int ints, float *** 1045,1054 **** "f20", "f21", "f22", "f23", "f24", "f25", "f26", "f27", "f28", "f29", \ "f30", "f31" } - /* How to renumber registers for dbx and gdb. */ - - #define DBX_REGISTER_NUMBER(REGNO) (REGNO) - /* This is how to output the definition of a user-level label named NAME, such as the label on a static function or variable NAME. */ --- 1015,1020 ---- *************** do { ASM_OUTPUT_ALIGN ((FILE), 2); \ *** 1100,1139 **** #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ sprintf (LABEL, "*.%s%d", PREFIX, NUM) - /* This is how to output an assembler line defining a `double' constant. */ - - #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - fprintf (FILE, "\t.double %.20e\n", (VALUE)) - - /* This is how to output an assembler line defining a `float' constant. */ - - #define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - fprintf (FILE, "\t.float %.12e\n", (VALUE)) - - /* This is how to output an assembler line defining an `int' constant. */ - - #define ASM_OUTPUT_INT(FILE,VALUE) \ - ( fprintf (FILE, "\t.long "), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "\n")) - - /* Likewise for `char' and `short' constants. */ - - #define ASM_OUTPUT_SHORT(FILE,VALUE) \ - ( fprintf (FILE, "\t.short "), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "\n")) - - #define ASM_OUTPUT_CHAR(FILE,VALUE) \ - ( fprintf (FILE, "\t.byte "), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "\n")) - - /* This is how to output an assembler line for a numeric constant byte. */ - - #define ASM_OUTPUT_BYTE(FILE,VALUE) \ - fprintf (FILE, "\t.byte 0x%x\n", (VALUE)) - /* This is how to output code to push a register on the stack. It need not be very fast code. */ --- 1066,1071 ---- *************** do { ASM_OUTPUT_ALIGN ((FILE), 2); \ *** 1201,1221 **** ( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 10), \ sprintf ((OUTPUT), "%s.%d", (NAME), (LABELNO))) - /* Define the parentheses used to group arithmetic operations - in assembler code. */ - - #define ASM_OPEN_PAREN "(" - #define ASM_CLOSE_PAREN ")" - - /* Define results of standard character escape sequences. */ - #define TARGET_BELL 007 - #define TARGET_BS 010 - #define TARGET_TAB 011 - #define TARGET_NEWLINE 012 - #define TARGET_VT 013 - #define TARGET_FF 014 - #define TARGET_CR 015 - /* Print operand X (an rtx) in assembler syntax to file FILE. CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified. For `%' followed by punctuation, CODE is the punctuation and X is null. --- 1133,1138 ---- *************** extern const char *i860_reg_prefix; *** 1372,1395 **** } \ } - /* The following #defines are used when compiling the routines in - libgcc1.c. Since the i860 calling conventions require single - precision floats to be passed in the floating-point registers - (rather than in the general registers) we have to build the - libgcc1.c routines in such a way that they know the actual types - of their formal arguments and the actual types of their return - values. Otherwise, gcc will generate calls to the libgcc1.c - routines, passing arguments in the floating-point registers, - but the libgcc1.c routines will expect their arguments on the - stack (where the i860 calling conventions require structs & - unions to be passed). */ - - #define FLOAT_VALUE_TYPE float - #define INTIFY(FLOATVAL) (FLOATVAL) - #define FLOATIFY(INTVAL) (INTVAL) - #define FLOAT_ARG_TYPE float - - /* Optionally define this if you have added predicates to `MACHINE.c'. This macro is called within an initializer of an array of structures. The first field in the structure is the --- 1289,1294 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i860/i860.md gcc-3.1/gcc/config/i860/i860.md *** gcc-3.0.4/gcc/config/i860/i860.md Sun Jul 23 19:51:43 2000 --- gcc-3.1/gcc/config/i860/i860.md Sun Oct 28 13:22:00 2001 *************** *** 1022,1029 **** operands[7] = copy_to_mode_reg (SImode, XEXP (operands[0], 0)); operands[8] = copy_to_mode_reg (SImode, XEXP (operands[1], 0)); ! operands[0] = change_address (operands[0], VOIDmode, operands[7]); ! operands[1] = change_address (operands[1], VOIDmode, operands[8]); }") (define_insn "" --- 1022,1029 ---- operands[7] = copy_to_mode_reg (SImode, XEXP (operands[0], 0)); operands[8] = copy_to_mode_reg (SImode, XEXP (operands[1], 0)); ! operands[0] = replace_equiv_address (operands[0], operands[7]); ! operands[1] = replace_equiv_address (operands[1], operands[8]); }") (define_insn "" *************** *** 1617,1623 **** ;; Recognize the first insn generated above. ;; This RTL looks like a fix_truncdfdi2 insn, ! ;; but we dont call it that, because only 32 bits ;; of the result are valid. ;; This pattern will work for the intended purposes ;; as long as we do not have any fixdfdi2 or fix_truncdfdi2. --- 1617,1623 ---- ;; Recognize the first insn generated above. ;; This RTL looks like a fix_truncdfdi2 insn, ! ;; but we don't call it that, because only 32 bits ;; of the result are valid. ;; This pattern will work for the intended purposes ;; as long as we do not have any fixdfdi2 or fix_truncdfdi2. *************** *** 1642,1648 **** ;; Recognize the first insn generated above. ;; This RTL looks like a fix_truncsfdi2 insn, ! ;; but we dont call it that, because only 32 bits ;; of the result are valid. ;; This pattern will work for the intended purposes ;; as long as we do not have any fixsfdi2 or fix_truncsfdi2. --- 1642,1648 ---- ;; Recognize the first insn generated above. ;; This RTL looks like a fix_truncsfdi2 insn, ! ;; but we don't call it that, because only 32 bits ;; of the result are valid. ;; This pattern will work for the intended purposes ;; as long as we do not have any fixsfdi2 or fix_truncsfdi2. *************** *** 1730,1741 **** }") (define_expand "mulsi3_big" ! [(set (subreg:SI (match_dup 4) 1) (match_operand:SI 1 "general_operand" "")) ! (set (subreg:SI (match_dup 5) 1) (match_operand:SI 2 "general_operand" "")) (clobber (match_dup 3)) ! (set (subreg:SI (match_dup 3) 1) ! (mult:SI (subreg:SI (match_dup 4) 1) (subreg:SI (match_dup 5) 1))) ! (set (match_operand:SI 0 "register_operand" "") (subreg:SI (match_dup 3) 1))] "WORDS_BIG_ENDIAN" " { --- 1730,1741 ---- }") (define_expand "mulsi3_big" ! [(set (subreg:SI (match_dup 4) 4) (match_operand:SI 1 "general_operand" "")) ! (set (subreg:SI (match_dup 5) 4) (match_operand:SI 2 "general_operand" "")) (clobber (match_dup 3)) ! (set (subreg:SI (match_dup 3) 4) ! (mult:SI (subreg:SI (match_dup 4) 4) (subreg:SI (match_dup 5) 4))) ! (set (match_operand:SI 0 "register_operand" "") (subreg:SI (match_dup 3) 4))] "WORDS_BIG_ENDIAN" " { *************** *** 1752,1760 **** "fmlow.dd %2,%1,%0") (define_insn "" ! [(set (subreg:SI (match_operand:DI 0 "register_operand" "=f") 1) ! (mult:SI (subreg:SI (match_operand:DI 1 "register_operand" "f") 1) ! (subreg:SI (match_operand:DI 2 "register_operand" "f") 1)))] "WORDS_BIG_ENDIAN" "fmlow.dd %2,%1,%0") --- 1752,1760 ---- "fmlow.dd %2,%1,%0") (define_insn "" ! [(set (subreg:SI (match_operand:DI 0 "register_operand" "=f") 4) ! (mult:SI (subreg:SI (match_operand:DI 1 "register_operand" "f") 4) ! (subreg:SI (match_operand:DI 2 "register_operand" "f") 4)))] "WORDS_BIG_ENDIAN" "fmlow.dd %2,%1,%0") *************** *** 1958,1974 **** cc_status.flags |= CC_KNOW_HI_R31; cc_status.flags &= ~CC_HI_R31_ADJ; cc_status.mdep = CONST2_RTX (SFmode); ! return \"frcp.dd %2,%3\;fmul.dd %2,%3,%0\;fmov.dd %?f0,%4\;\\\ ! orh 0x4000,%?r0,%?r31\;ixfr %?r31,%R4\;fsub.dd %4,%0,%0\;\\\ ! fmul.dd %3,%0,%3\;fmul.dd %2,%3,%0\;fsub.dd %4,%0,%0\;\\\ ! fmul.dd %3,%0,%3\;fmul.dd %2,%3,%0\;fsub.dd %4,%0,%0\;\\\ fmul.dd %3,%1,%3\;fmul.dd %0,%3,%0\"; } else ! return \"frcp.dd %2,%3\;fmul.dd %2,%3,%0\;fmov.dd %?f0,%4\;\\\ ! ixfr %?r31,%R4\;fsub.dd %4,%0,%0\;\\\ ! fmul.dd %3,%0,%3\;fmul.dd %2,%3,%0\;fsub.dd %4,%0,%0\;\\\ ! fmul.dd %3,%0,%3\;fmul.dd %2,%3,%0\;fsub.dd %4,%0,%0\;\\\ fmul.dd %3,%1,%3\;fmul.dd %0,%3,%0\"; }") --- 1958,1974 ---- cc_status.flags |= CC_KNOW_HI_R31; cc_status.flags &= ~CC_HI_R31_ADJ; cc_status.mdep = CONST2_RTX (SFmode); ! return \"frcp.dd %2,%3\;fmul.dd %2,%3,%0\;fmov.dd %?f0,%4\;\\ ! orh 0x4000,%?r0,%?r31\;ixfr %?r31,%R4\;fsub.dd %4,%0,%0\;\\ ! fmul.dd %3,%0,%3\;fmul.dd %2,%3,%0\;fsub.dd %4,%0,%0\;\\ ! fmul.dd %3,%0,%3\;fmul.dd %2,%3,%0\;fsub.dd %4,%0,%0\;\\ fmul.dd %3,%1,%3\;fmul.dd %0,%3,%0\"; } else ! return \"frcp.dd %2,%3\;fmul.dd %2,%3,%0\;fmov.dd %?f0,%4\;\\ ! ixfr %?r31,%R4\;fsub.dd %4,%0,%0\;\\ ! fmul.dd %3,%0,%3\;fmul.dd %2,%3,%0\;fsub.dd %4,%0,%0\;\\ ! fmul.dd %3,%0,%3\;fmul.dd %2,%3,%0\;fsub.dd %4,%0,%0\;\\ fmul.dd %3,%1,%3\;fmul.dd %0,%3,%0\"; }") *************** fmul.dd %3,%1,%3\;fmul.dd %0,%3,%0\"; *** 1991,1999 **** cc_status.mdep = CONST2_RTX (SFmode); output_asm_insn (\"orh 0x4000,%?r0,%?r31\", operands); } ! return \"ixfr %?r31,%4\;frcp.ss %2,%0\;\\\ ! fmul.ss %2,%0,%3\;fsub.ss %4,%3,%3\;fmul.ss %0,%3,%0\;\\\ ! fmul.ss %2,%0,%3\;fsub.ss %4,%3,%3\;\\\ fmul.ss %1,%0,%4\;fmul.ss %3,%4,%0\"; }") --- 1991,1999 ---- cc_status.mdep = CONST2_RTX (SFmode); output_asm_insn (\"orh 0x4000,%?r0,%?r31\", operands); } ! return \"ixfr %?r31,%4\;frcp.ss %2,%0\;\\ ! fmul.ss %2,%0,%3\;fsub.ss %4,%3,%3\;fmul.ss %0,%3,%0\;\\ ! fmul.ss %2,%0,%3\;fsub.ss %4,%3,%3\;\\ fmul.ss %1,%0,%4\;fmul.ss %3,%4,%0\"; }") *************** fmul.ss %1,%0,%4\;fmul.ss %3,%4,%0\"; *** 2127,2134 **** /* Make sure the address is just one reg and will stay that way. */ if (! call_insn_operand (operands[0], QImode)) operands[0] ! = change_address (operands[0], VOIDmode, ! copy_to_mode_reg (Pmode, XEXP (operands[0], 0))); if (INTVAL (operands[1]) > 0) { emit_move_insn (arg_pointer_rtx, stack_pointer_rtx); --- 2127,2135 ---- /* Make sure the address is just one reg and will stay that way. */ if (! call_insn_operand (operands[0], QImode)) operands[0] ! = replace_equiv_address (operands[0], ! copy_to_mode_reg (Pmode, ! XEXP (operands[0], 0))); if (INTVAL (operands[1]) > 0) { emit_move_insn (arg_pointer_rtx, stack_pointer_rtx); *************** fmul.ss %1,%0,%4\;fmul.ss %3,%4,%0\"; *** 2195,2202 **** /* Make sure the address is just one reg and will stay that way. */ if (! call_insn_operand (operands[1], QImode)) operands[1] ! = change_address (operands[1], VOIDmode, ! copy_to_mode_reg (Pmode, XEXP (operands[1], 0))); if (INTVAL (operands[2]) > 0) { emit_move_insn (arg_pointer_rtx, stack_pointer_rtx); --- 2196,2204 ---- /* Make sure the address is just one reg and will stay that way. */ if (! call_insn_operand (operands[1], QImode)) operands[1] ! = replace_equiv_address (operands[1], ! copy_to_mode_reg (Pmode, ! XEXP (operands[1], 0))); if (INTVAL (operands[2]) > 0) { emit_move_insn (arg_pointer_rtx, stack_pointer_rtx); diff -Nrc3pad gcc-3.0.4/gcc/config/i860/paragon.h gcc-3.1/gcc/config/i860/paragon.h *** gcc-3.0.4/gcc/config/i860/paragon.h Mon Sep 25 13:03:20 2000 --- gcc-3.1/gcc/config/i860/paragon.h Thu Dec 20 17:36:35 2001 *************** Boston, MA 02111-1307, USA. */ *** 71,78 **** #undef TYPE_OPERAND_FMT #define TYPE_OPERAND_FMT "\"%s\"" - #define DBX_REGISTER_NUMBER(REGNO) (REGNO) - #undef ASCII_DATA_ASM_OP #define ASCII_DATA_ASM_OP "\t.byte\t" --- 71,76 ---- *************** Boston, MA 02111-1307, USA. */ *** 83,123 **** #define ASM_OUTPUT_IDENT(FILE, NAME) \ fprintf (FILE, "//\t.ident \"%s\"\n", NAME); - /* - * the assembler doesn't grok .double INF and the like - * but does understand .long with hex numbers, so special - * case the "symbolic" IEEE numbers. - */ - #undef ASM_OUTPUT_DOUBLE - #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - { \ - if (REAL_VALUE_ISINF (VALUE) \ - || REAL_VALUE_ISNAN (VALUE) \ - || REAL_VALUE_MINUS_ZERO (VALUE)) \ - { \ - long t[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), t); \ - fprintf (FILE, "\t.long 0x%lx\n\t.long 0x%lx\n", t[0], t[1]); \ - } \ - else \ - fprintf (FILE, "\t.double %.20e\n", VALUE); \ - } - - #undef ASM_OUTPUT_FLOAT - #define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - { \ - if (REAL_VALUE_ISINF (VALUE) \ - || REAL_VALUE_ISNAN (VALUE) \ - || REAL_VALUE_MINUS_ZERO (VALUE)) \ - { \ - long t; \ - REAL_VALUE_TO_TARGET_SINGLE ((VALUE), t); \ - fprintf (FILE, "\t.long 0x%lx\n", t); \ - } \ - else \ - fprintf (FILE, "\t.float %.12e\n", VALUE); \ - } - #undef ASM_OUTPUT_ASCII #define ASM_OUTPUT_ASCII(FILE, STR, LENGTH) \ do \ --- 81,86 ---- *************** Boston, MA 02111-1307, USA. */ *** 135,141 **** fprintf ((FILE), "\"\n"); \ bytes_in_chunk = 0; \ } \ ! fprintf ((FILE), "%s%d\n", ASM_BYTE_OP, ch); \ } \ else \ { \ --- 98,104 ---- fprintf ((FILE), "\"\n"); \ bytes_in_chunk = 0; \ } \ ! assemble_aligned_integer (1, GEN_INT (ch)); \ } \ else \ { \ diff -Nrc3pad gcc-3.0.4/gcc/config/i860/sysv3.h gcc-3.1/gcc/config/i860/sysv3.h *** gcc-3.0.4/gcc/config/i860/sysv3.h Thu Nov 2 23:29:10 2000 --- gcc-3.1/gcc/config/i860/sysv3.h Mon Dec 17 15:05:33 2001 *************** Boston, MA 02111-1307, USA. */ *** 46,59 **** #define ASM_COMMENT_START "//" - /* Don't renumber the regusters for debugger output. */ - - #define DBX_REGISTER_NUMBER(REGNO) (REGNO) - /* Output the special word the System V SDB wants to see just before the first word of each function's prologue code. */ ! extern char *current_function_original_name; /* This special macro is used to output a magic word just before the first word of each function. On some versions of UNIX running on --- 46,55 ---- #define ASM_COMMENT_START "//" /* Output the special word the System V SDB wants to see just before the first word of each function's prologue code. */ ! extern const char *current_function_original_name; /* This special macro is used to output a magic word just before the first word of each function. On some versions of UNIX running on *************** extern char *current_function_original_n *** 97,103 **** fprintf ((FILE), "\t.set .,.+%u\n", (ROUNDED)); \ } while (0) ! /* The routine used to output string literals. #define ASCII_DATA_ASM_OP "\t.byte\t" --- 93,99 ---- fprintf ((FILE), "\t.set .,.+%u\n", (ROUNDED)); \ } while (0) ! /* The routine used to output string literals. */ #define ASCII_DATA_ASM_OP "\t.byte\t" *************** extern char *current_function_original_n *** 117,123 **** fprintf ((FILE), "\"\n"); \ bytes_in_chunk = 0; \ } \ ! fprintf ((FILE), "%s%d\n", ASM_BYTE_OP, ch); \ } \ else \ { \ --- 113,119 ---- fprintf ((FILE), "\"\n"); \ bytes_in_chunk = 0; \ } \ ! assemble_aligned_integer (1, GEN_INT (ch)); \ } \ else \ { \ *************** extern char *current_function_original_n *** 149,161 **** #define TDESC_SECTION_ASM_OP "\t.section\t.tdesc" #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_const, in_ctors, in_dtors, in_tdesc #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ CONST_SECTION_FUNCTION \ - CTORS_SECTION_FUNCTION \ - DTORS_SECTION_FUNCTION \ TDESC_SECTION_FUNCTION #define TDESC_SECTION_FUNCTION \ --- 145,155 ---- #define TDESC_SECTION_ASM_OP "\t.section\t.tdesc" #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_const, in_tdesc #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ CONST_SECTION_FUNCTION \ TDESC_SECTION_FUNCTION #define TDESC_SECTION_FUNCTION \ diff -Nrc3pad gcc-3.0.4/gcc/config/i860/sysv4.h gcc-3.1/gcc/config/i860/sysv4.h *** gcc-3.0.4/gcc/config/i860/sysv4.h Thu Nov 2 23:29:10 2000 --- gcc-3.1/gcc/config/i860/sysv4.h Thu Dec 20 17:36:35 2001 *************** Boston, MA 02111-1307, USA. */ *** 48,55 **** #undef TYPE_OPERAND_FMT #define TYPE_OPERAND_FMT "\"%s\"" - #define DBX_REGISTER_NUMBER(REGNO) (REGNO) - /* The following macro definition overrides the one in i860.h because the svr4 i860 assembler requires a different syntax for getting parts of constant/relocatable values. */ --- 48,53 ---- *************** Boston, MA 02111-1307, USA. */ *** 61,115 **** fprintf (FILE, "]@%s", PART_CODE); \ } while (0) - /* If the host and target formats match, output the floats as hex. */ - #if HOST_FLOAT_FORMAT == TARGET_FLOAT_FORMAT - #if defined (HOST_WORDS_BIG_ENDIAN) == WORDS_BIG_ENDIAN - - /* This is how to output an assembler line defining a `double' constant. - Note that the native i860/svr4 ELF assembler can't properly handle - infinity. It generates an incorrect (non-infinity) value when given - `.double 99e9999' and it doesn't grok `inf' at all. It also mishandles - NaNs and -0.0. */ - - #undef ASM_OUTPUT_DOUBLE - #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - { \ - if (REAL_VALUE_ISINF (VALUE) \ - || REAL_VALUE_ISNAN (VALUE) \ - || REAL_VALUE_MINUS_ZERO (VALUE)) \ - { \ - long t[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), t); \ - fprintf (FILE, "\t.word 0x%lx\n\t.word 0x%lx\n", t[0], t[1]); \ - } \ - else \ - fprintf (FILE, "\t.double %.20e\n", VALUE); \ - } - - /* This is how to output an assembler line defining a `float' constant. - Note that the native i860/svr4 ELF assembler can't properly handle - infinity. It actually generates an assembly time error when given - `.float 99e9999' and it doesn't grok `inf' at all. It also mishandles - NaNs and -0.0. */ - - #undef ASM_OUTPUT_FLOAT - #define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - { \ - if (REAL_VALUE_ISINF (VALUE) \ - || REAL_VALUE_ISNAN (VALUE) \ - || REAL_VALUE_MINUS_ZERO (VALUE)) \ - { \ - long t; \ - REAL_VALUE_TO_TARGET_SINGLE ((VALUE), t); \ - fprintf (FILE, "\t.word 0x%lx\n", t); \ - } \ - else \ - fprintf (FILE, "\t.float %.12e\n", VALUE); \ - } - - #endif /* word order matches */ - #endif /* HOST_FLOAT_FORMAT == TARGET_FLOAT_FORMAT */ - #undef ASM_FILE_START #define ASM_FILE_START(FILE) \ do { output_file_directive (FILE, main_input_filename); \ --- 59,64 ---- *************** Boston, MA 02111-1307, USA. */ *** 119,125 **** /* Output the special word the svr4 SDB wants to see just before the first word of each function's prologue code. */ ! extern char *current_function_original_name; /* This special macro is used to output a magic word just before the first word of each function. On some versions of UNIX running on --- 68,74 ---- /* Output the special word the svr4 SDB wants to see just before the first word of each function's prologue code. */ ! extern const char *current_function_original_name; /* This special macro is used to output a magic word just before the first word of each function. On some versions of UNIX running on *************** extern char *current_function_original_n *** 175,187 **** #define TDESC_SECTION_ASM_OP "\t.section\t.tdesc" #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_const, in_ctors, in_dtors, in_tdesc #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ CONST_SECTION_FUNCTION \ - CTORS_SECTION_FUNCTION \ - DTORS_SECTION_FUNCTION \ TDESC_SECTION_FUNCTION #define TDESC_SECTION_FUNCTION \ --- 124,134 ---- #define TDESC_SECTION_ASM_OP "\t.section\t.tdesc" #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_const, in_tdesc #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ CONST_SECTION_FUNCTION \ TDESC_SECTION_FUNCTION #define TDESC_SECTION_FUNCTION \ diff -Nrc3pad gcc-3.0.4/gcc/config/i860/x-fx2800 gcc-3.1/gcc/config/i860/x-fx2800 *** gcc-3.0.4/gcc/config/i860/x-fx2800 Wed Dec 16 21:05:43 1998 --- gcc-3.1/gcc/config/i860/x-fx2800 Thu Jan 1 00:00:00 1970 *************** *** 1,7 **** - - # The Alliant FX2800 is supposed to conform to the SysV R4 i860 ABI, - # but apparently the native compiler generates non ABI-compliant - # function prologues and epilogues, so we need the alloca from emacs. - # -- hyc@hanauma.jpl.nasa.gov - - ALLOCA=alloca.o --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i860/x-sysv3 gcc-3.1/gcc/config/i860/x-sysv3 *** gcc-3.0.4/gcc/config/i860/x-sysv3 Wed Dec 16 21:05:44 1998 --- gcc-3.1/gcc/config/i860/x-sysv3 Thu Jan 1 00:00:00 1970 *************** *** 1 **** - ALLOCA=alloca.o --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i860/x-sysv4 gcc-3.1/gcc/config/i860/x-sysv4 *** gcc-3.0.4/gcc/config/i860/x-sysv4 Wed Dec 16 21:05:45 1998 --- gcc-3.1/gcc/config/i860/x-sysv4 Thu Jan 1 00:00:00 1970 *************** *** 1,44 **** - # The svr4 reference port for the i860 contains an alloca.o routine - # in /usr/ucblib/libucb.a, but we can't just try to get that by - # setting CLIB to /usr/ucblib/libucb.a because (unfortunately) - # there are a lot of other routines in libucb.a which are supposed - # to be the Berkeley versions of library routines normally found in - # libc.a and many of these Berkeley versions are badly broken. Thus, - # if we try to link programs with libucb.a before libc.a, those - # programs tend to crash. - - # Also, the alloca() routine supplied in early version of svr4 for - # the i860 is non-ABI compliant. It doesn't keep the stack aligned - # to a 16-byte boundary as the ABI requires. - - # More importantly however, even a fully ABI compliant alloca() routine - # would fail to work correctly with some versions of the native svr4 C - # compiler currently being distributed for the i860 (as of 1/29/92). - # The problem is that the native C compiler generates non-ABI-compliant - # function epilogues which cut back the stack (upon function exit) in - # an incorrect manner. Specifically, they cut back the stack by adding - # the nominal *static* frame size (determined statically at compile-time) - # to the stack pointer rather than setting the stack pointer based upon - # the current value of the frame pointer (as called for in the i860 ABI). - # This can cause serious trouble in cases where you repeatedly call a - # routine which itself calls alloca(). In such cases, the stack will - # grow continuously until you finally run out of swap space or exceed - # the system's process size limit. To avoid this problem (which can - # arise when a stage1 gcc is being used to build a stage2 gcc) you - # *must* link in the C language version of alloca() which is supplied - # with gcc to your stage1 version of gcc. The following definition - # forces that to happen. - - ALLOCA=alloca.o - - # We build all stages *without* shared libraries because that may make - # debugging the compiler easier (until there is a GDB which supports - # both Dwarf *and* svr4 shared libraries). - - # Note that the native C compiler for the svr4 reference port on the - # i860 recognizes a special -gg option. Using that option causes *full* - # Dwarf debugging information to be generated, whereas using only -g - # causes only limited Dwarf debugging information to be generated. - # (This is an undocumented feature of the native svr4 C compiler.) - - CCLIBFLAGS=-Bstatic -dn -gg --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i860/xm-fx2800.h gcc-3.1/gcc/config/i860/xm-fx2800.h *** gcc-3.0.4/gcc/config/i860/xm-fx2800.h Wed Dec 16 21:05:46 1998 --- gcc-3.1/gcc/config/i860/xm-fx2800.h Thu Jan 1 00:00:00 1970 *************** *** 1,7 **** - /* Alliant FX/2800 running Concentrix 2.x. */ - - /* vfprintf is not present prior to Concentrix 2.2. Unfortunately, there - does not seem to be a cpp symbol that identifies OS revision. Undefine - the following if running 2.1 or older. */ - - #define HAVE_VPRINTF --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i860/xm-i860.h gcc-3.1/gcc/config/i860/xm-i860.h *** gcc-3.0.4/gcc/config/i860/xm-i860.h Thu Mar 15 19:02:03 2001 --- gcc-3.1/gcc/config/i860/xm-i860.h Thu Jan 1 00:00:00 1970 *************** *** 1,39 **** - /* Configuration for GNU C-compiler for Intel i860. - Copyright (C) 1988, 1993 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. */ - - #ifndef i860 - #define i860 - #endif - - /* This describes the machine the compiler is hosted on. */ - #define HOST_BITS_PER_CHAR 8 - #define HOST_BITS_PER_SHORT 16 - #define HOST_BITS_PER_INT 32 - #define HOST_BITS_PER_LONG 32 - #define HOST_BITS_PER_LONGLONG 64 - - /* Arguments to use with `exit'. */ - #define SUCCESS_EXIT_CODE 0 - #define FATAL_EXIT_CODE 33 - - /* target machine dependencies. - tm.h is a symbolic link to the actual target specific file. */ - - #include "tm.h" --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i960/i960-c.c gcc-3.1/gcc/config/i960/i960-c.c *** gcc-3.0.4/gcc/config/i960/i960-c.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/i960/i960-c.c Thu Mar 15 16:29:10 2001 *************** *** 0 **** --- 1,116 ---- + /* Intel 80960 specific, C compiler specific functions. + Copyright (C) 1992, 1995, 1996, 1997, 1998, 1999, 2000 + Free Software Foundation, Inc. + Contributed by Steven McGeady, Intel Corp. + Additional Work by Glenn Colon-Bonet, Jonathan Shapiro, Andy Wilson + Converted to GCC 2.0 by Jim Wilson and Michael Tiemann, Cygnus Support. + + 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 "config.h" + #include "system.h" + #include "cpplib.h" + #include "tree.h" + #include "c-pragma.h" + #include "c-lex.h" + #include "toplev.h" + #include "ggc.h" + #include "tm_p.h" + + /* Handle pragmas for compatibility with Intel's compilers. */ + + /* NOTE: ic960 R3.0 pragma align definition: + + #pragma align [(size)] | (identifier=size[,...]) + #pragma noalign [(identifier)[,...]] + + (all parens are optional) + + - size is [1,2,4,8,16] + - noalign means size==1 + - applies only to component elements of a struct (and union?) + - identifier applies to structure tag (only) + - missing identifier means next struct + + - alignment rules for bitfields need more investigation. + + This implementation only handles the case of no identifiers. */ + + void + i960_pr_align (pfile) + cpp_reader *pfile ATTRIBUTE_UNUSED; + { + tree number; + enum cpp_ttype type; + int align; + + type = c_lex (&number); + if (type == CPP_OPEN_PAREN) + type = c_lex (&number); + if (type == CPP_NAME) + { + warning ("sorry, not implemented: #pragma align NAME=SIZE"); + return; + } + if (type != CPP_NUMBER) + { + warning ("malformed #pragma align - ignored"); + return; + } + + align = TREE_INT_CST_LOW (number); + switch (align) + { + case 0: + /* Return to last alignment. */ + align = i960_last_maxbitalignment / 8; + /* Fall through. */ + case 16: + case 8: + case 4: + case 2: + case 1: + i960_last_maxbitalignment = i960_maxbitalignment; + i960_maxbitalignment = align * 8; + break; + + default: + /* Silently ignore bad values. */ + break; + } + } + + void + i960_pr_noalign (pfile) + cpp_reader *pfile ATTRIBUTE_UNUSED; + { + enum cpp_ttype type; + tree number; + + type = c_lex (&number); + if (type == CPP_OPEN_PAREN) + type = c_lex (&number); + if (type == CPP_NAME) + { + warning ("sorry, not implemented: #pragma noalign NAME"); + return; + } + + i960_last_maxbitalignment = i960_maxbitalignment; + i960_maxbitalignment = 8; + } diff -Nrc3pad gcc-3.0.4/gcc/config/i960/i960-coff.h gcc-3.1/gcc/config/i960/i960-coff.h *** gcc-3.0.4/gcc/config/i960/i960-coff.h Mon Sep 25 13:03:20 2000 --- gcc-3.1/gcc/config/i960/i960-coff.h Thu Nov 15 17:55:27 2001 *************** Boston, MA 02111-1307, USA. */ *** 41,101 **** #define CTORS_SECTION_ASM_OP "\t.section\t.ctors,\"x\"" #define DTORS_SECTION_ASM_OP "\t.section\t.dtors,\"x\"" - /* A list of other sections which the compiler might be "in" at any - given time. */ - - #undef EXTRA_SECTIONS - #define EXTRA_SECTIONS in_ctors, in_dtors - - /* A list of extra section function definitions. */ - - #undef EXTRA_SECTION_FUNCTIONS - #define EXTRA_SECTION_FUNCTIONS \ - CTORS_SECTION_FUNCTION \ - DTORS_SECTION_FUNCTION - - #define CTORS_SECTION_FUNCTION \ - void \ - ctors_section () \ - { \ - if (in_section != in_ctors) \ - { \ - fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP); \ - in_section = in_ctors; \ - } \ - } - - #define DTORS_SECTION_FUNCTION \ - void \ - dtors_section () \ - { \ - if (in_section != in_dtors) \ - { \ - fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP); \ - in_section = in_dtors; \ - } \ - } - - #define INT_ASM_OP "\t.word\t" - - /* A C statement (sans semicolon) to output an element in the table of - global constructors. */ - #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ - do { \ - ctors_section (); \ - fprintf (FILE, "%s", INT_ASM_OP); \ - assemble_name (FILE, NAME); \ - fprintf (FILE, "\n"); \ - } while (0) - - /* A C statement (sans semicolon) to output an element in the table of - global destructors. */ - #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \ - do { \ - dtors_section (); \ - fprintf (FILE, "%s", INT_ASM_OP); \ - assemble_name (FILE, NAME); \ - fprintf (FILE, "\n"); \ - } while (0) - /* end of i960-coff.h */ --- 41,44 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i960/i960-protos.h gcc-3.1/gcc/config/i960/i960-protos.h *** gcc-3.0.4/gcc/config/i960/i960-protos.h Thu Sep 7 22:24:33 2000 --- gcc-3.1/gcc/config/i960/i960-protos.h Thu Dec 20 17:36:35 2001 *************** extern int i960_final_reg_parm_stack_spa *** 88,99 **** extern int i960_reg_parm_stack_space PARAMS ((tree)); #endif /* TREE_CODE */ - #ifdef REAL_VALUE_TYPE - extern void i960_output_long_double PARAMS ((FILE *, REAL_VALUE_TYPE)); - extern void i960_output_double PARAMS ((FILE *, REAL_VALUE_TYPE)); - extern void i960_output_float PARAMS ((FILE *, REAL_VALUE_TYPE)); - #endif /* REAL_VALUE_TYPE */ - extern int process_pragma PARAMS ((int(*)(void), void(*)(int), const char *)); extern int i960_object_bytes_bitalign PARAMS ((int)); extern void i960_initialize PARAMS ((void)); --- 88,93 ---- *************** extern int bitpos PARAMS ((unsigned int) *** 101,114 **** extern int is_mask PARAMS ((unsigned int)); extern int bitstr PARAMS ((unsigned int, int *, int *)); extern int compute_frame_size PARAMS ((int)); - extern void i960_function_prologue PARAMS ((FILE *, unsigned int)); extern void output_function_profiler PARAMS ((FILE *, int)); - extern void i960_function_epilogue PARAMS ((FILE *, unsigned int)); extern void i960_scan_opcode PARAMS ((const char *)); ! #ifdef _C_PRAGMA_H extern void i960_pr_align PARAMS ((cpp_reader *)); extern void i960_pr_noalign PARAMS ((cpp_reader *)); #endif ! #endif /* i960-protos.h */ --- 95,106 ---- extern int is_mask PARAMS ((unsigned int)); extern int bitstr PARAMS ((unsigned int, int *, int *)); extern int compute_frame_size PARAMS ((int)); extern void output_function_profiler PARAMS ((FILE *, int)); extern void i960_scan_opcode PARAMS ((const char *)); ! #ifdef GCC_C_PRAGMA_H extern void i960_pr_align PARAMS ((cpp_reader *)); extern void i960_pr_noalign PARAMS ((cpp_reader *)); #endif ! #endif /* ! GCC_I960_PROTOS_H */ diff -Nrc3pad gcc-3.0.4/gcc/config/i960/i960.c gcc-3.1/gcc/config/i960/i960.c *** gcc-3.0.4/gcc/config/i960/i960.c Sat May 12 20:32:48 2001 --- gcc-3.1/gcc/config/i960/i960.c Thu Jan 3 17:40:03 2002 *************** *** 1,5 **** /* Subroutines used for code generation on intel 80960. ! Copyright (C) 1992, 1995, 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. Contributed by Steven McGeady, Intel Corp. Additional Work by Glenn Colon-Bonet, Jonathan Shapiro, Andy Wilson --- 1,5 ---- /* Subroutines used for code generation on intel 80960. ! Copyright (C) 1992, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Steven McGeady, Intel Corp. Additional Work by Glenn Colon-Bonet, Jonathan Shapiro, Andy Wilson *************** Boston, MA 02111-1307, USA. */ *** 44,49 **** --- 44,54 ---- #include "c-pragma.h" #include "c-lex.h" #include "tm_p.h" + #include "target.h" + #include "target-def.h" + + static void i960_output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT)); + static void i960_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT)); /* Save the operands last given to a compare for use when we generate a scc or bcc insn. */ *************** rtx i960_compare_op0, i960_compare_op1; *** 53,60 **** /* Used to implement #pragma align/noalign. Initialized by OVERRIDE_OPTIONS macro in i960.h. */ ! static int i960_maxbitalignment; ! static int i960_last_maxbitalignment; /* Used to implement switching between MEM and ALU insn types, for better C series performance. */ --- 58,65 ---- /* Used to implement #pragma align/noalign. Initialized by OVERRIDE_OPTIONS macro in i960.h. */ ! int i960_maxbitalignment; ! int i960_last_maxbitalignment; /* Used to implement switching between MEM and ALU insn types, for better C series performance. */ *************** static int ret_label = 0; *** 86,221 **** ((TYPE_ARG_TYPES (TREE_TYPE (FNDECL)) != 0 \ && (TREE_VALUE (tree_last (TYPE_ARG_TYPES (TREE_TYPE (FNDECL)))) != void_type_node)) \ || current_function_varargs) ! /* Handle pragmas for compatibility with Intel's compilers. */ ! ! /* NOTE: ic960 R3.0 pragma align definition: ! ! #pragma align [(size)] | (identifier=size[,...]) ! #pragma noalign [(identifier)[,...]] ! ! (all parens are optional) ! ! - size is [1,2,4,8,16] ! - noalign means size==1 ! - applies only to component elements of a struct (and union?) ! - identifier applies to structure tag (only) ! - missing identifier means next struct ! ! - alignment rules for bitfields need more investigation. ! ! This implementation only handles the case of no identifiers. */ ! ! void ! i960_pr_align (pfile) ! cpp_reader *pfile ATTRIBUTE_UNUSED; ! { ! tree number; ! enum cpp_ttype type; ! int align; ! ! type = c_lex (&number); ! if (type == CPP_OPEN_PAREN) ! type = c_lex (&number); ! if (type == CPP_NAME) ! { ! warning ("sorry, not implemented: #pragma align NAME=SIZE"); ! return; ! } ! if (type != CPP_NUMBER) ! { ! warning ("malformed #pragma align - ignored"); ! return; ! } ! ! align = TREE_INT_CST_LOW (number); ! switch (align) ! { ! case 0: ! /* Return to last alignment. */ ! align = i960_last_maxbitalignment / 8; ! /* Fall through. */ ! case 16: ! case 8: ! case 4: ! case 2: ! case 1: ! i960_last_maxbitalignment = i960_maxbitalignment; ! i960_maxbitalignment = align * 8; ! break; ! ! default: ! /* Silently ignore bad values. */ ! break; ! } ! } ! ! void ! i960_pr_noalign (pfile) ! cpp_reader *pfile ATTRIBUTE_UNUSED; ! { ! enum cpp_ttype type; ! tree number; ! ! type = c_lex (&number); ! if (type == CPP_OPEN_PAREN) ! type = c_lex (&number); ! if (type == CPP_NAME) ! { ! warning ("sorry, not implemented: #pragma noalign NAME"); ! return; ! } ! ! i960_last_maxbitalignment = i960_maxbitalignment; ! i960_maxbitalignment = 8; ! } ! ! int ! process_pragma (p_getc, p_ungetc, pname) ! int (* p_getc) PARAMS ((void)); ! void (* p_ungetc) PARAMS ((int)); ! const char *pname; ! { ! register int c; ! char buf[20]; ! char *s = buf; ! int align; ! ! /* Should be pragma 'far' or equivalent for callx/balx here. */ ! if (strcmp (pname, "align") != 0) ! return 0; ! ! do ! { ! c = p_getc (); ! } ! while (c == ' ' || c == '\t'); ! ! if (c == '(') ! c = p_getc (); ! ! while (c >= '0' && c <= '9') ! { ! if (s < buf + sizeof buf - 1) ! *s++ = c; ! c = p_getc (); ! } ! ! *s = '\0'; ! ! /* We had to read a non-numerical character to get out of the ! while loop---often a newline. So, we have to put it back to ! make sure we continue to parse everything properly. */ ! ! p_ungetc (c); ! ! align = atoi (buf); ! ! ! ! return 1; ! } /* Initialize variables before compiling any files. */ void --- 91,108 ---- ((TYPE_ARG_TYPES (TREE_TYPE (FNDECL)) != 0 \ && (TREE_VALUE (tree_last (TYPE_ARG_TYPES (TREE_TYPE (FNDECL)))) != void_type_node)) \ || current_function_varargs) + + /* Initialize the GCC target structure. */ + #undef TARGET_ASM_ALIGNED_SI_OP + #define TARGET_ASM_ALIGNED_SI_OP "\t.word\t" ! #undef TARGET_ASM_FUNCTION_PROLOGUE ! #define TARGET_ASM_FUNCTION_PROLOGUE i960_output_function_prologue ! #undef TARGET_ASM_FUNCTION_EPILOGUE ! #define TARGET_ASM_FUNCTION_EPILOGUE i960_output_function_epilogue + struct gcc_target targetm = TARGET_INITIALIZER; + /* Initialize variables before compiling any files. */ void *************** signed_arith_operand (op, mode) *** 299,305 **** return (register_operand (op, mode) || signed_literal (op, mode)); } ! /* Return truth value of whether OP is a integer which fits the range constraining immediate operands in three-address insns. */ int --- 186,192 ---- return (register_operand (op, mode) || signed_literal (op, mode)); } ! /* Return truth value of whether OP is an integer which fits the range constraining immediate operands in three-address insns. */ int *************** int *** 446,452 **** is_mask (val) unsigned int val; { ! register int start, end, i; start = -1; for (i = 0; val != 0; val >>= 1, i++) --- 333,339 ---- is_mask (val) unsigned int val; { ! register int start, end = 0, i; start = -1; for (i = 0; val != 0; val >>= 1, i++) *************** i960_address_cost (x) *** 623,629 **** Return 1 if we have written out everything that needs to be done to do the move. Otherwise, return 0 and the caller will emit the move ! normally. */ int emit_move_sequence (operands, mode) --- 510,516 ---- Return 1 if we have written out everything that needs to be done to do the move. Otherwise, return 0 and the caller will emit the move ! normally. */ int emit_move_sequence (operands, mode) *************** emit_move_sequence (operands, mode) *** 636,642 **** && (operands[1] != const0_rtx || current_function_args_size || current_function_varargs || current_function_stdarg || rtx_equal_function_value_matters)) ! /* Here we use the same test as movsi+1 pattern -- see i960.md. */ operands[1] = force_reg (mode, operands[1]); /* Storing multi-word values in unaligned hard registers to memory may --- 523,529 ---- && (operands[1] != const0_rtx || current_function_args_size || current_function_varargs || current_function_stdarg || rtx_equal_function_value_matters)) ! /* Here we use the same test as movsi+1 pattern -- see i960.md. */ operands[1] = force_reg (mode, operands[1]); /* Storing multi-word values in unaligned hard registers to memory may *************** i960_output_move_double (dst, src) *** 713,720 **** operands[1] = src; operands[2] = gen_rtx_REG (Pmode, REGNO (dst) + 1); operands[3] = gen_rtx_MEM (word_mode, operands[2]); ! operands[4] = adj_offsettable_operand (operands[3], UNITS_PER_WORD); ! output_asm_insn ("lda %1,%2\n\tld %3,%0\n\tld %4,%D0", operands); return ""; } else --- 600,609 ---- operands[1] = src; operands[2] = gen_rtx_REG (Pmode, REGNO (dst) + 1); operands[3] = gen_rtx_MEM (word_mode, operands[2]); ! operands[4] = adjust_address (operands[3], word_mode, ! UNITS_PER_WORD); ! output_asm_insn ! ("lda %1,%2\n\tld %3,%0\n\tld %4,%D0", operands); return ""; } else *************** i960_output_move_double (dst, src) *** 726,732 **** if (REGNO (src) & 1) { operands[0] = dst; ! operands[1] = adj_offsettable_operand (dst, UNITS_PER_WORD); if (! memory_address_p (word_mode, XEXP (operands[1], 0))) abort (); operands[2] = src; --- 615,621 ---- if (REGNO (src) & 1) { operands[0] = dst; ! operands[1] = adjust_address (dst, word_mode, UNITS_PER_WORD); if (! memory_address_p (word_mode, XEXP (operands[1], 0))) abort (); operands[2] = src; *************** i960_output_move_double_zero (dst) *** 749,755 **** operands[0] = dst; { ! operands[1] = adj_offsettable_operand (dst, 4); output_asm_insn ("st g14,%0\n\tst g14,%1", operands); } return ""; --- 638,644 ---- operands[0] = dst; { ! operands[1] = adjust_address (dst, word_mode, 4); output_asm_insn ("st g14,%0\n\tst g14,%1", operands); } return ""; *************** i960_output_move_quad (dst, src) *** 803,811 **** operands[1] = src; operands[2] = gen_rtx_REG (Pmode, REGNO (dst) + 3); operands[3] = gen_rtx_MEM (word_mode, operands[2]); ! operands[4] = adj_offsettable_operand (operands[3], UNITS_PER_WORD); ! operands[5] = adj_offsettable_operand (operands[4], UNITS_PER_WORD); ! operands[6] = adj_offsettable_operand (operands[5], UNITS_PER_WORD); output_asm_insn ("lda %1,%2\n\tld %3,%0\n\tld %4,%D0\n\tld %5,%E0\n\tld %6,%F0", operands); return ""; } --- 692,703 ---- operands[1] = src; operands[2] = gen_rtx_REG (Pmode, REGNO (dst) + 3); operands[3] = gen_rtx_MEM (word_mode, operands[2]); ! operands[4] ! = adjust_address (operands[3], word_mode, UNITS_PER_WORD); ! operands[5] ! = adjust_address (operands[4], word_mode, UNITS_PER_WORD); ! operands[6] ! = adjust_address (operands[5], word_mode, UNITS_PER_WORD); output_asm_insn ("lda %1,%2\n\tld %3,%0\n\tld %4,%D0\n\tld %5,%E0\n\tld %6,%F0", operands); return ""; } *************** i960_output_move_quad (dst, src) *** 818,826 **** if (REGNO (src) & 3) { operands[0] = dst; ! operands[1] = adj_offsettable_operand (dst, UNITS_PER_WORD); ! operands[2] = adj_offsettable_operand (dst, 2*UNITS_PER_WORD); ! operands[3] = adj_offsettable_operand (dst, 3*UNITS_PER_WORD); if (! memory_address_p (word_mode, XEXP (operands[3], 0))) abort (); operands[4] = src; --- 710,718 ---- if (REGNO (src) & 3) { operands[0] = dst; ! operands[1] = adjust_address (dst, word_mode, UNITS_PER_WORD); ! operands[2] = adjust_address (dst, word_mode, 2 * UNITS_PER_WORD); ! operands[3] = adjust_address (dst, word_mode, 3 * UNITS_PER_WORD); if (! memory_address_p (word_mode, XEXP (operands[3], 0))) abort (); operands[4] = src; *************** i960_output_move_quad_zero (dst) *** 843,851 **** operands[0] = dst; { ! operands[1] = adj_offsettable_operand (dst, 4); ! operands[2] = adj_offsettable_operand (dst, 8); ! operands[3] = adj_offsettable_operand (dst, 12); output_asm_insn ("st g14,%0\n\tst g14,%1\n\tst g14,%2\n\tst g14,%3", operands); } return ""; --- 735,743 ---- operands[0] = dst; { ! operands[1] = adjust_address (dst, word_mode, 4); ! operands[2] = adjust_address (dst, word_mode, 8); ! operands[3] = adjust_address (dst, word_mode, 12); output_asm_insn ("st g14,%0\n\tst g14,%1\n\tst g14,%2\n\tst g14,%3", operands); } return ""; *************** i960_function_name_declare (file, name, *** 1142,1148 **** leaf_proc_ok = 0; } ! /* See if caller passes in an address to return value. */ if (aggregate_value_p (DECL_RESULT (fndecl))) { --- 1034,1040 ---- leaf_proc_ok = 0; } ! /* See if caller passes in an address to return value. */ if (aggregate_value_p (DECL_RESULT (fndecl))) { *************** compute_frame_size (size) *** 1284,1290 **** } /* Here register group is range of registers which can be moved by ! one i960 instruction. */ struct reg_group { --- 1176,1182 ---- } /* Here register group is range of registers which can be moved by ! one i960 instruction. */ struct reg_group { *************** static void i960_arg_size_and_align PARA *** 1300,1306 **** /* The following functions forms the biggest as possible register groups with registers in STATE. REGS contain states of the registers in range [start, finish_reg). The function returns the ! number of groups formed. */ static int i960_form_reg_groups (start_reg, finish_reg, regs, state, reg_groups) int start_reg; --- 1192,1198 ---- /* The following functions forms the biggest as possible register groups with registers in STATE. REGS contain states of the registers in range [start, finish_reg). The function returns the ! number of groups formed. */ static int i960_form_reg_groups (start_reg, finish_reg, regs, state, reg_groups) int start_reg; *************** i960_form_reg_groups (start_reg, finish_ *** 1334,1340 **** return nw; } ! /* We sort register winodws in descending order by length. */ static int i960_reg_group_compare (group1, group2) const void *group1; --- 1226,1232 ---- return nw; } ! /* We sort register winodws in descending order by length. */ static int i960_reg_group_compare (group1, group2) const void *group1; *************** i960_reg_group_compare (group1, group2) *** 1353,1359 **** /* Split the first register group in REG_GROUPS on subgroups one of which will contain SUBGROUP_LENGTH registers. The function ! returns new number of winodws. */ static int i960_split_reg_group (reg_groups, nw, subgroup_length) struct reg_group *reg_groups; --- 1245,1251 ---- /* Split the first register group in REG_GROUPS on subgroups one of which will contain SUBGROUP_LENGTH registers. The function ! returns new number of winodws. */ static int i960_split_reg_group (reg_groups, nw, subgroup_length) struct reg_group *reg_groups; *************** i960_split_reg_group (reg_groups, nw, su *** 1364,1374 **** /* This guarantees correct alignments of the two subgroups for i960 (see spliting for the group length 2, 3, 4). More generalized algorithm would require splitting the group more ! two subgroups. */ subgroup_length = reg_groups->length - subgroup_length; /* More generalized algorithm would require to try merging subgroups here. But in case i960 it always results in failure ! because of register group alignment. */ reg_groups[nw].length = reg_groups->length - subgroup_length; reg_groups[nw].start_reg = reg_groups->start_reg + subgroup_length; nw++; --- 1256,1266 ---- /* This guarantees correct alignments of the two subgroups for i960 (see spliting for the group length 2, 3, 4). More generalized algorithm would require splitting the group more ! two subgroups. */ subgroup_length = reg_groups->length - subgroup_length; /* More generalized algorithm would require to try merging subgroups here. But in case i960 it always results in failure ! because of register group alignment. */ reg_groups[nw].length = reg_groups->length - subgroup_length; reg_groups[nw].start_reg = reg_groups->start_reg + subgroup_length; nw++; *************** i960_split_reg_group (reg_groups, nw, su *** 1379,1403 **** /* Output code for the function prologue. */ ! void ! i960_function_prologue (file, size) FILE *file; ! unsigned int size; { register int i, j, nr; int n_saved_regs = 0; int n_remaining_saved_regs; ! int lvar_size; ! int actual_fsize, offset; int gnw, lnw; struct reg_group *g, *l; char tmpstr[1000]; /* -1 if reg must be saved on proc entry, 0 if available, 1 if saved somewhere. */ int regs[FIRST_PSEUDO_REGISTER]; ! /* All global registers (which must be saved) divided by groups. */ struct reg_group global_reg_groups [16]; ! /* All local registers (which are available) divided by groups. */ struct reg_group local_reg_groups [16]; --- 1271,1295 ---- /* Output code for the function prologue. */ ! static void ! i960_output_function_prologue (file, size) FILE *file; ! HOST_WIDE_INT size; { register int i, j, nr; int n_saved_regs = 0; int n_remaining_saved_regs; ! HOST_WIDE_INT lvar_size; ! HOST_WIDE_INT actual_fsize, offset; int gnw, lnw; struct reg_group *g, *l; char tmpstr[1000]; /* -1 if reg must be saved on proc entry, 0 if available, 1 if saved somewhere. */ int regs[FIRST_PSEUDO_REGISTER]; ! /* All global registers (which must be saved) divided by groups. */ struct reg_group global_reg_groups [16]; ! /* All local registers (which are available) divided by groups. */ struct reg_group local_reg_groups [16]; *************** i960_function_prologue (file, size) *** 1419,1425 **** epilogue_string[0] = '\0'; ! if (profile_flag || profile_block_flag) { /* When profiling, we may use registers 20 to 27 to save arguments, so they can't be used here for saving globals. J is the number of --- 1311,1317 ---- epilogue_string[0] = '\0'; ! if (current_function_profile) { /* When profiling, we may use registers 20 to 27 to save arguments, so they can't be used here for saving globals. J is the number of *************** i960_function_prologue (file, size) *** 1472,1478 **** lnw = i960_split_reg_group (l, lnw, g->length); } ! actual_fsize = compute_frame_size (size); #if 0 /* ??? The 1.2.1 compiler does this also. This is meant to round the frame size up to the nearest multiple of 16. I don't know whether this is --- 1364,1370 ---- lnw = i960_split_reg_group (l, lnw, g->length); } ! actual_fsize = compute_frame_size (size) + 4 * n_remaining_saved_regs; #if 0 /* ??? The 1.2.1 compiler does this also. This is meant to round the frame size up to the nearest multiple of 16. I don't know whether this is *************** i960_function_prologue (file, size) *** 1524,1530 **** /* Take hardware register save area created by the call instruction into account, but store them before the argument block area. */ ! lvar_size = actual_fsize - compute_frame_size (0) - n_saved_regs * 4; offset = STARTING_FRAME_OFFSET + lvar_size; /* Save registers on stack if needed. */ /* ??? Is it worth to use the same algorithm as one for saving --- 1416,1422 ---- /* Take hardware register save area created by the call instruction into account, but store them before the argument block area. */ ! lvar_size = actual_fsize - compute_frame_size (0) - n_remaining_saved_regs * 4; offset = STARTING_FRAME_OFFSET + lvar_size; /* Save registers on stack if needed. */ /* ??? Is it worth to use the same algorithm as one for saving *************** output_function_profiler (file, labelno) *** 1657,1666 **** /* Output code for the function epilogue. */ ! void ! i960_function_epilogue (file, size) FILE *file; ! unsigned int size ATTRIBUTE_UNUSED; { if (i960_leaf_ret_reg >= 0) { --- 1549,1558 ---- /* Output code for the function epilogue. */ ! static void ! i960_output_function_epilogue (file, size) FILE *file; ! HOST_WIDE_INT size ATTRIBUTE_UNUSED; { if (i960_leaf_ret_reg >= 0) { *************** legitimize_address (x, oldx, mode) *** 2229,2235 **** other = XEXP (x, 1); } else ! constant = 0; if (constant) x = gen_rtx_PLUS (Pmode, --- 2121,2127 ---- other = XEXP (x, 1); } else ! constant = 0, other = 0; if (constant) x = gen_rtx_PLUS (Pmode, *************** legitimize_address (x, oldx, mode) *** 2243,2249 **** #if 0 /* Return the most stringent alignment that we are willing to consider ! objects of size SIZE and known alignment ALIGN as having. */ int i960_alignment (size, align) --- 2135,2141 ---- #if 0 /* Return the most stringent alignment that we are willing to consider ! objects of size SIZE and known alignment ALIGN as having. */ int i960_alignment (size, align) *************** i960_expr_alignment (x, size) *** 2355,2361 **** case SYMBOL_REF: /* If this is a valid program, objects are guaranteed to be ! correctly aligned for whatever size the reference actually is. */ align = i960_object_bytes_bitalign (size) / BITS_PER_UNIT; break; --- 2247,2253 ---- case SYMBOL_REF: /* If this is a valid program, objects are guaranteed to be ! correctly aligned for whatever size the reference actually is. */ align = i960_object_bytes_bitalign (size) / BITS_PER_UNIT; break; *************** i960_function_arg (cum, mode, type, name *** 2555,2608 **** return ret; } - /* Floating-point support. */ - - void - i960_output_long_double (file, value) - FILE *file; - REAL_VALUE_TYPE value; - { - long value_long[3]; - char dstr[30]; - - REAL_VALUE_TO_TARGET_LONG_DOUBLE (value, value_long); - REAL_VALUE_TO_DECIMAL (value, "%.20g", dstr); - - fprintf (file, - "\t.word\t0x%08lx\t\t# %s\n\t.word\t0x%08lx\n\t.word\t0x%08lx\n", - value_long[0], dstr, value_long[1], value_long[2]); - fprintf (file, "\t.word\t0x0\n"); - } - - void - i960_output_double (file, value) - FILE *file; - REAL_VALUE_TYPE value; - { - long value_long[2]; - char dstr[30]; - - REAL_VALUE_TO_TARGET_DOUBLE (value, value_long); - REAL_VALUE_TO_DECIMAL (value, "%.20g", dstr); - - fprintf (file, "\t.word\t0x%08lx\t\t# %s\n\t.word\t0x%08lx\n", - value_long[0], dstr, value_long[1]); - } - - void - i960_output_float (file, value) - FILE *file; - REAL_VALUE_TYPE value; - { - long value_long; - char dstr[30]; - - REAL_VALUE_TO_TARGET_SINGLE (value, value_long); - REAL_VALUE_TO_DECIMAL (value, "%.12g", dstr); - - fprintf (file, "\t.word\t0x%08lx\t\t# %s (float)\n", value_long, dstr); - } - /* Return the number of bits that an object of size N bytes is aligned to. */ int --- 2447,2452 ---- *************** i960_setup_incoming_varargs (cum, mode, *** 2667,2673 **** If there are no stack arguments but there are exactly NPARM_REGS registers, either there were no extra arguments or the caller ! allocated an argument block. */ if (cum->ca_nstackparms == 0 && first_reg < NPARM_REGS && !no_rtl) { --- 2511,2517 ---- If there are no stack arguments but there are exactly NPARM_REGS registers, either there were no extra arguments or the caller ! allocated an argument block. */ if (cum->ca_nstackparms == 0 && first_reg < NPARM_REGS && !no_rtl) { *************** i960_setup_incoming_varargs (cum, mode, *** 2692,2700 **** /* ??? Note that we unnecessarily store one extra register for stdarg fns. We could optimize this, but it's kept as for now. */ regblock = gen_rtx_MEM (BLKmode, ! plus_constant (arg_pointer_rtx, ! first_reg * 4)); ! MEM_ALIAS_SET (regblock) = get_varargs_alias_set (); move_block_from_reg (first_reg, regblock, NPARM_REGS - first_reg, (NPARM_REGS - first_reg) * UNITS_PER_WORD); --- 2536,2544 ---- /* ??? Note that we unnecessarily store one extra register for stdarg fns. We could optimize this, but it's kept as for now. */ regblock = gen_rtx_MEM (BLKmode, ! plus_constant (arg_pointer_rtx, first_reg * 4)); ! set_mem_alias_set (regblock, get_varargs_alias_set ()); ! set_mem_align (regblock, BITS_PER_WORD); move_block_from_reg (first_reg, regblock, NPARM_REGS - first_reg, (NPARM_REGS - first_reg) * UNITS_PER_WORD); diff -Nrc3pad gcc-3.0.4/gcc/config/i960/i960.h gcc-3.1/gcc/config/i960/i960.h *** gcc-3.0.4/gcc/config/i960/i960.h Wed Jul 25 01:56:47 2001 --- gcc-3.1/gcc/config/i960/i960.h Fri May 3 12:07:06 2002 *************** *** 1,5 **** /* Definitions of target machine for GNU compiler, for Intel 80960 ! Copyright (C) 1992, 1993, 1995, 1996, 1998, 1999, 2000 Free Software Foundation, Inc. Contributed by Steven McGeady, Intel Corp. Additional Work by Glenn Colon-Bonet, Jonathan Shapiro, Andy Wilson --- 1,5 ---- /* Definitions of target machine for GNU compiler, for Intel 80960 ! Copyright (C) 1992, 1993, 1995, 1996, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Steven McGeady, Intel Corp. Additional Work by Glenn Colon-Bonet, Jonathan Shapiro, Andy Wilson *************** Boston, MA 02111-1307, USA. */ *** 30,37 **** /* Names to predefine in the preprocessor for this target machine. */ #define CPP_PREDEFINES "-Di960 -Di80960 -DI960 -DI80960 -Acpu=i960 -Amachine=i960" ! /* Name to predefine in the preprocessor for processor variations. */ ! #define CPP_SPEC "%{mic*:-D__i960\ %{mka:-D__i960KA}%{mkb:-D__i960KB}\ %{mja:-D__i960JA}%{mjd:-D__i960JD}%{mjf:-D__i960JF}\ %{mrp:-D__i960RP}\ --- 30,38 ---- /* Names to predefine in the preprocessor for this target machine. */ #define CPP_PREDEFINES "-Di960 -Di80960 -DI960 -DI80960 -Acpu=i960 -Amachine=i960" ! /* Name to predefine in the preprocessor for processor variations. ! -mic* options make characters signed by default. */ ! #define CPP_SPEC "%{mic*:-D__i960 -fsigned-char\ %{mka:-D__i960KA}%{mkb:-D__i960KB}\ %{mja:-D__i960JA}%{mjd:-D__i960JD}%{mjf:-D__i960JF}\ %{mrp:-D__i960RP}\ *************** Boston, MA 02111-1307, USA. */ *** 52,71 **** %{!mcc:%{!mcf:-D__i960_KB -D__i960KB__ %{mic*:-D__i960KB}}}}}}}}}\ %{mlong-double-64:-D__LONG_DOUBLE_64__}" - /* -mic* options make characters signed by default. */ - /* Use #if rather than ?: because MIPS C compiler rejects ?: in - initializers. */ - #if DEFAULT_SIGNED_CHAR - #define SIGNED_CHAR_SPEC "%{funsigned-char:-D__CHAR_UNSIGNED__}" - #else - #define SIGNED_CHAR_SPEC "%{!fsigned-char:%{!mic*:-D__CHAR_UNSIGNED__}}" - #endif - /* Specs for the compiler, to handle processor variations. If the user gives an explicit -gstabs or -gcoff option, then do not ! try to add an implicit one, as this will fail. */ #define CC1_SPEC \ ! "%{!mka:%{!mkb:%{!msa:%{!msb:%{!mmc:%{!mca:%{!mcc:%{!mcf:%{!mja:%{!mjd:%{!mjf:%{!mrp:-mka}}}}}}}}}}}}\ %{!gs*:%{!gc*:%{mbout:%{g*:-gstabs}}\ %{mcoff:%{g*:-gcoff}}\ %{!mbout:%{!mcoff:%{g*:-gstabs}}}}}" --- 53,65 ---- %{!mcc:%{!mcf:-D__i960_KB -D__i960KB__ %{mic*:-D__i960KB}}}}}}}}}\ %{mlong-double-64:-D__LONG_DOUBLE_64__}" /* Specs for the compiler, to handle processor variations. If the user gives an explicit -gstabs or -gcoff option, then do not ! try to add an implicit one, as this will fail. ! -mic* options make characters signed by default. */ #define CC1_SPEC \ ! "%{mic*:-fsigned-char}\ ! %{!mka:%{!mkb:%{!msa:%{!msb:%{!mmc:%{!mca:%{!mcc:%{!mcf:%{!mja:%{!mjd:%{!mjf:%{!mrp:-mka}}}}}}}}}}}}\ %{!gs*:%{!gc*:%{mbout:%{g*:-gstabs}}\ %{mcoff:%{g*:-gcoff}}\ %{!mbout:%{!mcoff:%{g*:-gstabs}}}}}" *************** Boston, MA 02111-1307, USA. */ *** 100,106 **** that -O means FP elimination. Addressing through sp requires negative offset and more one word addressing in the most cases (offsets except for 0-4095 require one more word). Therefore we've ! not defined the macro. */ /*#define CAN_DEBUG_WITHOUT_FP*/ /* Do leaf procedure and tail call optimizations for -O2 and higher. */ --- 94,100 ---- that -O means FP elimination. Addressing through sp requires negative offset and more one word addressing in the most cases (offsets except for 0-4095 require one more word). Therefore we've ! not defined the macro. */ /*#define CAN_DEBUG_WITHOUT_FP*/ /* Do leaf procedure and tail call optimizations for -O2 and higher. */ *************** Boston, MA 02111-1307, USA. */ *** 132,137 **** --- 126,135 ---- fprintf (asm_out_file, "\t.type\t0x%x;", A) /* Handle pragmas for compatibility with Intel's compilers. */ + + extern int i960_maxbitalignment; + extern int i960_last_maxbitalignment; + #define REGISTER_TARGET_PRAGMAS(PFILE) do { \ cpp_register_pragma (PFILE, 0, "align", i960_pr_align); \ cpp_register_pragma (PFILE, 0, "noalign", i960_pr_noalign); \ *************** Boston, MA 02111-1307, USA. */ *** 150,156 **** /* The following three are mainly used to provide a little sanity checking against the -mARCH flags given. The Jx series, for the purposes of ! gcc, is a Kx with a data cache. */ /* Nonzero if we should generate code for the KA and similar processors. No FPU, no microcode instructions. */ --- 148,154 ---- /* The following three are mainly used to provide a little sanity checking against the -mARCH flags given. The Jx series, for the purposes of ! gcc, is a Kx with a data cache. */ /* Nonzero if we should generate code for the KA and similar processors. No FPU, no microcode instructions. */ *************** extern int target_flags; *** 372,378 **** } \ /* ??? See the LONG_DOUBLE_TYPE_SIZE definition below. */ \ if (TARGET_LONG_DOUBLE_64) \ ! warning ("The -mlong-double-64 option does not work yet.");\ i960_initialize (); \ } --- 370,376 ---- } \ /* ??? See the LONG_DOUBLE_TYPE_SIZE definition below. */ \ if (TARGET_LONG_DOUBLE_64) \ ! warning ("the -mlong-double-64 option does not work yet");\ i960_initialize (); \ } *************** extern int target_flags; *** 418,424 **** #define POINTER_SIZE 32 /* Width in bits of a long double. Define to 96, and let ! ROUND_TYPE_ALIGN adjust the alignment for speed. */ #define LONG_DOUBLE_TYPE_SIZE (TARGET_LONG_DOUBLE_64 ? 64 : 96) /* ??? This must be a constant, because real.c and real.h test it with #if. */ --- 416,422 ---- #define POINTER_SIZE 32 /* Width in bits of a long double. Define to 96, and let ! ROUND_TYPE_ALIGN adjust the alignment for speed. */ #define LONG_DOUBLE_TYPE_SIZE (TARGET_LONG_DOUBLE_64 ? 64 : 96) /* ??? This must be a constant, because real.c and real.h test it with #if. */ *************** extern int target_flags; *** 500,506 **** ? bitsize_int (128) : round_up (COMPUTED, SPECIFIED)) #define ROUND_TYPE_SIZE_UNIT(TYPE, COMPUTED, SPECIFIED) \ ((TREE_CODE (TYPE) == REAL_TYPE && TYPE_MODE (TYPE) == XFmode) \ ! ? bitsize_int (16) : round_up (COMPUTED, SPECIFIED)) /* Standard register usage. */ --- 498,504 ---- ? bitsize_int (128) : round_up (COMPUTED, SPECIFIED)) #define ROUND_TYPE_SIZE_UNIT(TYPE, COMPUTED, SPECIFIED) \ ((TREE_CODE (TYPE) == REAL_TYPE && TYPE_MODE (TYPE) == XFmode) \ ! ? size_int (16) : round_up (COMPUTED, SPECIFIED)) /* Standard register usage. */ *************** extern int target_flags; *** 618,631 **** /* ??? It isn't clear to me why this is here. Perhaps because of a bug (since fixed) in the definition of INITIAL_FRAME_POINTER_OFFSET which would have caused this to fail. */ ! #define FRAME_POINTER_REQUIRED (! leaf_function_p ()) /* Definitions for register eliminations. This is an array of structures. Each structure initializes one pair of eliminable registers. The "from" register number is given first, followed by "to". Eliminations of the same "from" register are listed ! in order of preference.. */ #define ELIMINABLE_REGS {{FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}} --- 616,634 ---- /* ??? It isn't clear to me why this is here. Perhaps because of a bug (since fixed) in the definition of INITIAL_FRAME_POINTER_OFFSET which would have caused this to fail. */ ! /* ??? Must check current_function_has_nonlocal_goto, otherwise frame pointer ! elimination messes up nonlocal goto sequences. I think this works for other ! targets because they use indirect jumps for the return which disables fp ! elimination. */ ! #define FRAME_POINTER_REQUIRED \ ! (! leaf_function_p () || current_function_has_nonlocal_goto) /* Definitions for register eliminations. This is an array of structures. Each structure initializes one pair of eliminable registers. The "from" register number is given first, followed by "to". Eliminations of the same "from" register are listed ! in order of preference.. */ #define ELIMINABLE_REGS {{FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}} *************** struct cum_args { int ca_nregparms; int *** 989,1004 **** #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ i960_function_name_declare (FILE, NAME, DECL) - /* This macro generates the assembly code for function entry. - FILE is a stdio stream to output the code to. - SIZE is an int: how many units of temporary storage to allocate. - Refer to the array `regs_ever_live' to determine which registers - to save; `regs_ever_live[I]' is nonzero if register number I - is ever used in the function. This macro is responsible for - knowing which registers should not be saved even if used. */ - - #define FUNCTION_PROLOGUE(FILE, SIZE) i960_function_prologue ((FILE), (SIZE)) - /* Output assembler code to FILE to increment profiler label # LABELNO for profiling a function entry. */ --- 992,997 ---- *************** struct cum_args { int ca_nregparms; int *** 1011,1028 **** No definition is equivalent to always zero. */ #define EXIT_IGNORE_STACK 1 - - /* This macro generates the assembly code for function exit, - on machines that need it. If FUNCTION_EPILOGUE is not defined - then individual return instructions are generated for each - return statement. Args are same as for FUNCTION_PROLOGUE. - - The function epilogue should not depend on the current stack pointer! - It should use the frame pointer only. This is mandatory because - of alloca; we also take advantage of it to omit stack adjustments - before returning. */ - - #define FUNCTION_EPILOGUE(FILE, SIZE) i960_function_epilogue (FILE, SIZE) /* Addressing modes, and classification of registers for them. */ --- 1004,1009 ---- *************** struct cum_args { int ca_nregparms; int *** 1131,1137 **** In each case, scale can be 1, 2, 4, 8, or 16. */ ! /* Returns 1 if the scale factor of an index term is valid. */ #define SCALE_TERM_P(X) \ (GET_CODE (X) == CONST_INT \ && (INTVAL (X) == 1 || INTVAL (X) == 2 || INTVAL (X) == 4 \ --- 1112,1118 ---- In each case, scale can be 1, 2, 4, 8, or 16. */ ! /* Returns 1 if the scale factor of an index term is valid. */ #define SCALE_TERM_P(X) \ (GET_CODE (X) == CONST_INT \ && (INTVAL (X) == 1 || INTVAL (X) == 2 || INTVAL (X) == 4 \ *************** struct cum_args { int ca_nregparms; int *** 1180,1194 **** /* Define as C expression which evaluates to nonzero if the tablejump instruction expects the table to contain offsets from the address of the table. ! Do not define this if the table should contain absolute addresses. */ /* #define CASE_VECTOR_PC_RELATIVE 1 */ - /* Specify the tree operation to be used to convert reals to integers. */ - #define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR - - /* This is the kind of divide that is easiest to do in the general case. */ - #define EASY_DIV_EXPR TRUNC_DIV_EXPR - /* Define this as 1 if `char' should by default be signed; else as 0. */ #define DEFAULT_SIGNED_CHAR 0 --- 1161,1169 ---- /* Define as C expression which evaluates to nonzero if the tablejump instruction expects the table to contain offsets from the address of the table. ! Do not define this if the table should contain absolute addresses. */ /* #define CASE_VECTOR_PC_RELATIVE 1 */ /* Define this as 1 if `char' should by default be signed; else as 0. */ #define DEFAULT_SIGNED_CHAR 0 *************** struct cum_args { int ca_nregparms; int *** 1211,1232 **** /* Nonzero if access to memory by bytes is no faster than for words. Value changed to 1 after reports of poor bitfield code with g++. ! Indications are that code is usually as good, sometimes better. */ #define SLOW_BYTE_ACCESS 1 - /* Force sizeof(bool) == 1 to maintain binary compatibility; otherwise, the - change in SLOW_BYTE_ACCESS would have changed it to 4. */ - - #define BOOL_TYPE_SIZE CHAR_TYPE_SIZE - /* We assume that the store-condition-codes instructions store 0 for false and some other value for true. This is the value stored for true. */ #define STORE_FLAG_VALUE 1 /* Define this to be nonzero if shift instructions ignore all but the low-order ! few bits. */ #define SHIFT_COUNT_TRUNCATED 0 /* Value is 1 if truncating an integer of INPREC bits to OUTPREC bits --- 1186,1202 ---- /* Nonzero if access to memory by bytes is no faster than for words. Value changed to 1 after reports of poor bitfield code with g++. ! Indications are that code is usually as good, sometimes better. */ #define SLOW_BYTE_ACCESS 1 /* We assume that the store-condition-codes instructions store 0 for false and some other value for true. This is the value stored for true. */ #define STORE_FLAG_VALUE 1 /* Define this to be nonzero if shift instructions ignore all but the low-order ! few bits. */ #define SHIFT_COUNT_TRUNCATED 0 /* Value is 1 if truncating an integer of INPREC bits to OUTPREC bits *************** extern struct rtx_def *i960_compare_op0, *** 1358,1364 **** #define DBX_CONTIN_LENGTH 1500 /* This is how to output a note to DBX telling it the line number ! to which the following sequence of instructions corresponds. */ #define ASM_OUTPUT_SOURCE_LINE(FILE, LINE) \ { if (write_symbols == SDB_DEBUG) { \ --- 1328,1334 ---- #define DBX_CONTIN_LENGTH 1500 /* This is how to output a note to DBX telling it the line number ! to which the following sequence of instructions corresponds. */ #define ASM_OUTPUT_SOURCE_LINE(FILE, LINE) \ { if (write_symbols == SDB_DEBUG) { \ *************** extern struct rtx_def *i960_compare_op0, *** 1383,1389 **** assemble_name (FILE, NAME); \ fputs ("\n", FILE); } ! /* The prefix to add to user-visible assembler symbols. */ #define USER_LABEL_PREFIX "_" --- 1353,1359 ---- assemble_name (FILE, NAME); \ fputs ("\n", FILE); } ! /* The prefix to add to user-visible assembler symbols. */ #define USER_LABEL_PREFIX "_" *************** extern struct rtx_def *i960_compare_op0, *** 1401,1443 **** #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ sprintf (LABEL, "*%s%d", PREFIX, NUM) - /* This is how to output an assembler line defining a `long double' - constant. */ - - #define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) i960_output_long_double(FILE, VALUE) - - /* This is how to output an assembler line defining a `double' constant. */ - - #define ASM_OUTPUT_DOUBLE(FILE,VALUE) i960_output_double(FILE, VALUE) - - /* This is how to output an assembler line defining a `float' constant. */ - - #define ASM_OUTPUT_FLOAT(FILE,VALUE) i960_output_float(FILE, VALUE) - - /* This is how to output an assembler line defining an `int' constant. */ - - #define ASM_OUTPUT_INT(FILE,VALUE) \ - ( fprintf (FILE, "\t.word "), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "\n")) - - /* Likewise for `char' and `short' constants. */ - - #define ASM_OUTPUT_SHORT(FILE,VALUE) \ - ( fprintf (FILE, "\t.short "), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "\n")) - - #define ASM_OUTPUT_CHAR(FILE,VALUE) \ - ( fprintf (FILE, "\t.byte "), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "\n")) - - /* This is how to output an assembler line for a numeric constant byte. */ - - #define ASM_OUTPUT_BYTE(FILE,VALUE) \ - fprintf (FILE, "\t.byte 0x%x\n", (VALUE)) - #define ASM_OUTPUT_REG_PUSH(FILE,REGNO) \ fprintf (FILE, "\tst\t%s,(sp)\n\taddo\t4,sp,sp\n", reg_names[REGNO]) --- 1371,1376 ---- *************** extern struct rtx_def *i960_compare_op0, *** 1522,1542 **** #define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \ ( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 10), \ sprintf ((OUTPUT), "%s.%d", (NAME), (LABELNO))) - - /* Define the parentheses used to group arithmetic operations - in assembler code. */ - - #define ASM_OPEN_PAREN "(" - #define ASM_CLOSE_PAREN ")" - - /* Define results of standard character escape sequences. */ - #define TARGET_BELL 007 - #define TARGET_BS 010 - #define TARGET_TAB 011 - #define TARGET_NEWLINE 012 - #define TARGET_VT 013 - #define TARGET_FF 014 - #define TARGET_CR 015 /* Output assembler code to FILE to initialize this source file's basic block profiling info, if that has not already been done. */ --- 1455,1460 ---- *************** extern struct rtx_def *i960_compare_op0, *** 1586,1596 **** #define TRAMPOLINE_TEMPLATE(FILE) \ { \ ! ASM_OUTPUT_INT (FILE, GEN_INT (0x8C203000)); \ ! ASM_OUTPUT_INT (FILE, GEN_INT (0x00000000)); \ ! ASM_OUTPUT_INT (FILE, GEN_INT (0x8CE03000)); \ ! ASM_OUTPUT_INT (FILE, GEN_INT (0x00000000)); \ ! ASM_OUTPUT_INT (FILE, GEN_INT (0x84212000)); \ } /* Length in units of the trampoline for entering a nested function. */ --- 1504,1514 ---- #define TRAMPOLINE_TEMPLATE(FILE) \ { \ ! assemble_aligned_integer (UNITS_PER_WORD, GEN_INT (0x8C203000)); \ ! assemble_aligned_integer (UNITS_PER_WORD, GEN_INT (0x00000000)); \ ! assemble_aligned_integer (UNITS_PER_WORD, GEN_INT (0x8CE03000)); \ ! assemble_aligned_integer (UNITS_PER_WORD, GEN_INT (0x00000000)); \ ! assemble_aligned_integer (UNITS_PER_WORD, GEN_INT (0x84212000)); \ } /* Length in units of the trampoline for entering a nested function. */ diff -Nrc3pad gcc-3.0.4/gcc/config/i960/i960.md gcc-3.1/gcc/config/i960/i960.md *** gcc-3.0.4/gcc/config/i960/i960.md Wed Jan 10 21:12:28 2001 --- gcc-3.1/gcc/config/i960/i960.md Sun Nov 4 02:12:10 2001 *************** *** 1,5 **** ;;- Machine description for Intel 80960 chip for GNU C compiler ! ;; Copyright (C) 1992, 1995, 1998 Free Software Foundation, Inc. ;; Contributed by Steven McGeady, Intel Corp. ;; Additional work by Glenn Colon-Bonet, Jonathan Shapiro, Andy Wilson ;; Converted to GCC 2.0 by Jim Wilson and Michael Tiemann, Cygnus Support. --- 1,5 ---- ;;- Machine description for Intel 80960 chip for GNU C compiler ! ;; Copyright (C) 1992, 1995, 1998, 2001 Free Software Foundation, Inc. ;; Contributed by Steven McGeady, Intel Corp. ;; Additional work by Glenn Colon-Bonet, Jonathan Shapiro, Andy Wilson ;; Converted to GCC 2.0 by Jim Wilson and Michael Tiemann, Cygnus Support. *************** *** 546,552 **** (define_insn ("trap") [(trap_if (const_int 1) (const_int 0))] "" ! "cmpo g0,g0 ; faulteq.t") (define_expand "conditional_trap" [(trap_if (match_operator 0 "comparison_operator" --- 546,552 ---- (define_insn ("trap") [(trap_if (const_int 1) (const_int 0))] "" ! "cmpo g0,g0 ; faulte.t") (define_expand "conditional_trap" [(trap_if (match_operator 0 "comparison_operator" *************** *** 632,637 **** --- 632,639 ---- if (operands[1] == const0_rtx) return \"st g14,%0\"; return \"st %1,%0\"; + default: + abort(); } }" [(set_attr "type" "move,address,load,store") *************** *** 665,670 **** --- 667,674 ---- return \"ld %1,%0\"; case 3: return \"st %1,%0\"; + default: + abort(); } }" [(set_attr "type" "move,address,load,store") *************** *** 715,720 **** --- 719,726 ---- if (operands[1] == const0_rtx) return \"stos g14,%0\"; return \"stos %1,%0\"; + default: + abort(); } }" [(set_attr "type" "move,misc,load,store") *************** *** 749,754 **** --- 755,762 ---- return \"ldos %1,%0\"; case 3: return \"stos %1,%0\"; + default: + abort(); } }" [(set_attr "type" "move,misc,load,store") *************** *** 796,801 **** --- 804,811 ---- if (operands[1] == const0_rtx) return \"stob g14,%0\"; return \"stob %1,%0\"; + default: + abort(); } }" [(set_attr "type" "move,misc,load,store") *************** *** 830,835 **** --- 840,847 ---- return \"ldob %1,%0\"; case 3: return \"stob %1,%0\"; + default: + abort(); } }" [(set_attr "type" "move,misc,load,store") *************** *** 869,874 **** --- 881,888 ---- return i960_output_ldconst (operands[0], operands[1]); case 5: return i960_output_move_double_zero (operands[0]); + default: + abort(); } }" [(set_attr "type" "move,move,load,load,store,store")]) *************** *** 894,899 **** --- 908,915 ---- return i960_output_move_double (operands[0], operands[1]); case 2: return i960_output_ldconst (operands[0], operands[1]); + default: + abort(); } }" [(set_attr "type" "move,move,load,load,store")]) *************** *** 909,915 **** return i960_output_move_double (operands[0], operands[1]); operands[3] = gen_rtx_MEM (word_mode, operands[2]); ! operands[4] = adj_offsettable_operand (operands[3], UNITS_PER_WORD); return \"lda %0,%2\;st %1,%3\;st %D1,%4\"; }" [(set_attr "type" "move,store")]) --- 925,931 ---- return i960_output_move_double (operands[0], operands[1]); operands[3] = gen_rtx_MEM (word_mode, operands[2]); ! operands[4] = adjust_address (operands[3], word_mode, UNITS_PER_WORD); return \"lda %0,%2\;st %1,%3\;st %D1,%4\"; }" [(set_attr "type" "move,store")]) *************** *** 948,953 **** --- 964,971 ---- return i960_output_ldconst (operands[0], operands[1]); case 5: return i960_output_move_quad_zero (operands[0]); + default: + abort(); } }" [(set_attr "type" "move,move,load,load,store,store")]) *************** *** 973,978 **** --- 991,998 ---- return i960_output_move_quad (operands[0], operands[1]); case 2: return i960_output_ldconst (operands[0], operands[1]); + default: + abort(); } }" [(set_attr "type" "move,move,load,load,store")]) *************** *** 988,996 **** return i960_output_move_quad (operands[0], operands[1]); operands[3] = gen_rtx_MEM (word_mode, operands[2]); ! operands[4] = adj_offsettable_operand (operands[3], UNITS_PER_WORD); ! operands[5] = adj_offsettable_operand (operands[4], UNITS_PER_WORD); ! operands[6] = adj_offsettable_operand (operands[5], UNITS_PER_WORD); return \"lda %0,%2\;st %1,%3\;st %D1,%4\;st %E1,%5\;st %F1,%6\"; }" [(set_attr "type" "move,store")]) --- 1008,1016 ---- return i960_output_move_quad (operands[0], operands[1]); operands[3] = gen_rtx_MEM (word_mode, operands[2]); ! operands[4] = adjust_address (operands[3], word_mode, UNITS_PER_WORD); ! operands[5] = adjust_address (operands[4], word_mode, UNITS_PER_WORD); ! operands[6] = adjust_address (operands[5], word_mode, UNITS_PER_WORD); return \"lda %0,%2\;st %1,%3\;st %D1,%4\;st %E1,%5\;st %F1,%6\"; }" [(set_attr "type" "move,store")]) *************** *** 1004,1010 **** { int regno; int count; ! rtx from; if (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != REG --- 1024,1030 ---- { int regno; int count; ! int offset = 0; if (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != REG *************** *** 1016,1045 **** FAIL; regno = REGNO (operands[1]); - from = memory_address (SImode, XEXP (operands[0], 0)); while (count >= 4 && ((regno & 3) == 0)) { ! emit_move_insn (change_address (operands[0], TImode, from), gen_rtx_REG (TImode, regno)); count -= 4; regno += 4; ! from = memory_address (TImode, plus_constant (from, 16)); } while (count >= 2 && ((regno & 1) == 0)) { ! emit_move_insn (change_address (operands[0], DImode, from), gen_rtx_REG (DImode, regno)); count -= 2; regno += 2; ! from = memory_address (DImode, plus_constant (from, 8)); } while (count > 0) { ! emit_move_insn (change_address (operands[0], SImode, from), gen_rtx_REG (SImode, regno)); count -= 1; regno += 1; ! from = memory_address (SImode, plus_constant (from, 4)); } DONE; }") --- 1036,1064 ---- FAIL; regno = REGNO (operands[1]); while (count >= 4 && ((regno & 3) == 0)) { ! emit_move_insn (adjust_address (operands[0], TImode, offset), gen_rtx_REG (TImode, regno)); count -= 4; regno += 4; ! offset += 16; } while (count >= 2 && ((regno & 1) == 0)) { ! emit_move_insn (adjust_address (operands[0], DImode, offset), gen_rtx_REG (DImode, regno)); count -= 2; regno += 2; ! offset += 8; } while (count > 0) { ! emit_move_insn (adjust_address (operands[0], SImode, offset), gen_rtx_REG (SImode, regno)); count -= 1; regno += 1; ! offset += 4; } DONE; }") *************** *** 1084,1091 **** case 4: return \"stl %1,%0\"; case 5: ! operands[1] = adj_offsettable_operand (operands[0], 4); return \"st g14,%0\;st g14,%1\"; } }" [(set_attr "type" "move,move,load,fpload,fpstore,fpstore")]) --- 1103,1112 ---- case 4: return \"stl %1,%0\"; case 5: ! operands[1] = adjust_address (operands[0], VOIDmode, 4); return \"st g14,%0\;st g14,%1\"; + default: + abort(); } }" [(set_attr "type" "move,move,load,fpload,fpstore,fpstore")]) *************** *** 1116,1121 **** --- 1137,1144 ---- return \"ldl %1,%0\"; case 4: return \"stl %1,%0\"; + default: + abort(); } }" [(set_attr "type" "move,move,load,fpload,fpstore")]) *************** *** 1159,1164 **** --- 1182,1189 ---- if (operands[1] == CONST0_RTX (SFmode)) return \"st g14,%0\"; return \"st %1,%0\"; + default: + abort(); } }" [(set_attr "type" "move,move,load,fpload,fpstore")]) *************** *** 1189,1194 **** --- 1214,1221 ---- return \"ld %1,%0\"; case 4: return \"st %1,%0\"; + default: + abort(); } }" [(set_attr "type" "move,move,load,fpload,fpstore")]) *************** *** 1211,1225 **** { rtx temp = gen_reg_rtx (SImode); rtx shift_16 = GEN_INT (16); ! int op1_subreg_word = 0; if (GET_CODE (operand1) == SUBREG) { ! op1_subreg_word = SUBREG_WORD (operand1); operand1 = SUBREG_REG (operand1); } if (GET_MODE (operand1) != SImode) ! operand1 = gen_rtx (SUBREG, SImode, operand1, op1_subreg_word); emit_insn (gen_ashlsi3 (temp, operand1, shift_16)); emit_insn (gen_ashrsi3 (operand0, temp, shift_16)); --- 1238,1254 ---- { rtx temp = gen_reg_rtx (SImode); rtx shift_16 = GEN_INT (16); ! int op1_subreg_byte = 0; if (GET_CODE (operand1) == SUBREG) { ! op1_subreg_byte = SUBREG_BYTE (operand1); ! op1_subreg_byte /= GET_MODE_SIZE (SImode); ! op1_subreg_byte *= GET_MODE_SIZE (SImode); operand1 = SUBREG_REG (operand1); } if (GET_MODE (operand1) != SImode) ! operand1 = gen_rtx (SUBREG, SImode, operand1, op1_subreg_byte); emit_insn (gen_ashlsi3 (temp, operand1, shift_16)); emit_insn (gen_ashrsi3 (operand0, temp, shift_16)); *************** *** 1246,1260 **** { rtx temp = gen_reg_rtx (SImode); rtx shift_24 = GEN_INT (24); ! int op1_subreg_word = 0; if (GET_CODE (operand1) == SUBREG) { ! op1_subreg_word = SUBREG_WORD (operand1); operand1 = SUBREG_REG (operand1); } if (GET_MODE (operand1) != SImode) ! operand1 = gen_rtx (SUBREG, SImode, operand1, op1_subreg_word); emit_insn (gen_ashlsi3 (temp, operand1, shift_24)); emit_insn (gen_ashrsi3 (operand0, temp, shift_24)); --- 1275,1291 ---- { rtx temp = gen_reg_rtx (SImode); rtx shift_24 = GEN_INT (24); ! int op1_subreg_byte = 0; if (GET_CODE (operand1) == SUBREG) { ! op1_subreg_byte = SUBREG_BYTE (operand1); ! op1_subreg_byte /= GET_MODE_SIZE (SImode); ! op1_subreg_byte *= GET_MODE_SIZE (SImode); operand1 = SUBREG_REG (operand1); } if (GET_MODE (operand1) != SImode) ! operand1 = gen_rtx (SUBREG, SImode, operand1, op1_subreg_byte); emit_insn (gen_ashlsi3 (temp, operand1, shift_24)); emit_insn (gen_ashrsi3 (operand0, temp, shift_24)); *************** *** 1282,1305 **** { rtx temp = gen_reg_rtx (SImode); rtx shift_24 = GEN_INT (24); ! int op0_subreg_word = 0; ! int op1_subreg_word = 0; if (GET_CODE (operand1) == SUBREG) { ! op1_subreg_word = SUBREG_WORD (operand1); operand1 = SUBREG_REG (operand1); } if (GET_MODE (operand1) != SImode) ! operand1 = gen_rtx (SUBREG, SImode, operand1, op1_subreg_word); if (GET_CODE (operand0) == SUBREG) { ! op0_subreg_word = SUBREG_WORD (operand0); operand0 = SUBREG_REG (operand0); } if (GET_MODE (operand0) != SImode) ! operand0 = gen_rtx_SUBREG (SImode, operand0, op0_subreg_word); emit_insn (gen_ashlsi3 (temp, operand1, shift_24)); emit_insn (gen_ashrsi3 (operand0, temp, shift_24)); --- 1313,1340 ---- { rtx temp = gen_reg_rtx (SImode); rtx shift_24 = GEN_INT (24); ! int op0_subreg_byte = 0; ! int op1_subreg_byte = 0; if (GET_CODE (operand1) == SUBREG) { ! op1_subreg_byte = SUBREG_BYTE (operand1); ! op1_subreg_byte /= GET_MODE_SIZE (SImode); ! op1_subreg_byte *= GET_MODE_SIZE (SImode); operand1 = SUBREG_REG (operand1); } if (GET_MODE (operand1) != SImode) ! operand1 = gen_rtx (SUBREG, SImode, operand1, op1_subreg_byte); if (GET_CODE (operand0) == SUBREG) { ! op0_subreg_byte = SUBREG_BYTE (operand0); ! op0_subreg_byte /= GET_MODE_SIZE (SImode); ! op0_subreg_byte *= GET_MODE_SIZE (SImode); operand0 = SUBREG_REG (operand0); } if (GET_MODE (operand0) != SImode) ! operand0 = gen_rtx_SUBREG (SImode, operand0, op0_subreg_byte); emit_insn (gen_ashlsi3 (temp, operand1, shift_24)); emit_insn (gen_ashrsi3 (operand0, temp, shift_24)); *************** *** 1327,1341 **** { rtx temp = gen_reg_rtx (SImode); rtx shift_16 = GEN_INT (16); ! int op1_subreg_word = 0; if (GET_CODE (operand1) == SUBREG) { ! op1_subreg_word = SUBREG_WORD (operand1); operand1 = SUBREG_REG (operand1); } if (GET_MODE (operand1) != SImode) ! operand1 = gen_rtx (SUBREG, SImode, operand1, op1_subreg_word); emit_insn (gen_ashlsi3 (temp, operand1, shift_16)); emit_insn (gen_lshrsi3 (operand0, temp, shift_16)); --- 1362,1378 ---- { rtx temp = gen_reg_rtx (SImode); rtx shift_16 = GEN_INT (16); ! int op1_subreg_byte = 0; if (GET_CODE (operand1) == SUBREG) { ! op1_subreg_byte = SUBREG_BYTE (operand1); ! op1_subreg_byte /= GET_MODE_SIZE (SImode); ! op1_subreg_byte *= GET_MODE_SIZE (SImode); operand1 = SUBREG_REG (operand1); } if (GET_MODE (operand1) != SImode) ! operand1 = gen_rtx (SUBREG, SImode, operand1, op1_subreg_byte); emit_insn (gen_ashlsi3 (temp, operand1, shift_16)); emit_insn (gen_lshrsi3 (operand0, temp, shift_16)); *************** *** 1367,1381 **** { rtx temp = gen_reg_rtx (SImode); rtx shift_24 = GEN_INT (24); ! int op1_subreg_word = 0; if (GET_CODE (operand1) == SUBREG) { ! op1_subreg_word = SUBREG_WORD (operand1); ! operand1 = SUBREG_REG (operand1); } if (GET_MODE (operand1) != SImode) ! operand1 = gen_rtx (SUBREG, SImode, operand1, op1_subreg_word); emit_insn (gen_ashlsi3 (temp, operand1, shift_24)); emit_insn (gen_lshrsi3 (operand0, temp, shift_24)); --- 1404,1420 ---- { rtx temp = gen_reg_rtx (SImode); rtx shift_24 = GEN_INT (24); ! int op1_subreg_byte = 0; if (GET_CODE (operand1) == SUBREG) { ! op1_subreg_byte = SUBREG_BYTE (operand1); ! op1_subreg_byte /= GET_MODE_SIZE (SImode); ! op1_subreg_byte *= GET_MODE_SIZE (SImode); ! operand1 = SUBREG_REG (operand1); } if (GET_MODE (operand1) != SImode) ! operand1 = gen_rtx (SUBREG, SImode, operand1, op1_subreg_byte); emit_insn (gen_ashlsi3 (temp, operand1, shift_24)); emit_insn (gen_lshrsi3 (operand0, temp, shift_24)); *************** *** 1403,1426 **** { rtx temp = gen_reg_rtx (SImode); rtx shift_24 = GEN_INT (24); ! int op0_subreg_word = 0; ! int op1_subreg_word = 0; if (GET_CODE (operand1) == SUBREG) { ! op1_subreg_word = SUBREG_WORD (operand1); operand1 = SUBREG_REG (operand1); } if (GET_MODE (operand1) != SImode) ! operand1 = gen_rtx (SUBREG, SImode, operand1, op1_subreg_word); if (GET_CODE (operand0) == SUBREG) { ! op0_subreg_word = SUBREG_WORD (operand0); operand0 = SUBREG_REG (operand0); } if (GET_MODE (operand0) != SImode) ! operand0 = gen_rtx_SUBREG (SImode, operand0, op0_subreg_word); emit_insn (gen_ashlsi3 (temp, operand1, shift_24)); emit_insn (gen_lshrsi3 (operand0, temp, shift_24)); --- 1442,1465 ---- { rtx temp = gen_reg_rtx (SImode); rtx shift_24 = GEN_INT (24); ! int op0_subreg_byte = 0; ! int op1_subreg_byte = 0; if (GET_CODE (operand1) == SUBREG) { ! op1_subreg_byte = SUBREG_BYTE (operand1); operand1 = SUBREG_REG (operand1); } if (GET_MODE (operand1) != SImode) ! operand1 = gen_rtx (SUBREG, SImode, operand1, op1_subreg_byte); if (GET_CODE (operand0) == SUBREG) { ! op0_subreg_byte = SUBREG_BYTE (operand0); operand0 = SUBREG_REG (operand0); } if (GET_MODE (operand0) != SImode) ! operand0 = gen_rtx_SUBREG (SImode, operand0, op0_subreg_byte); emit_insn (gen_ashlsi3 (temp, operand1, shift_24)); emit_insn (gen_lshrsi3 (operand0, temp, shift_24)); *************** *** 2088,2093 **** --- 2127,2134 ---- return \"ldt %1,%0\"; case 4: return \"stt %1,%0\"; + default: + abort(); } }" [(set_attr "type" "move,move,load,fpload,fpstore")]) *************** *** 2342,2348 **** rtx chain = operands[0]; rtx handler = operands[1]; rtx stack = operands[2]; - rtx label = operands[3]; /* We must restore the stack pointer, frame pointer, previous frame pointer and the return instruction pointer. Since the ret --- 2383,2388 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i960/rtems.h gcc-3.1/gcc/config/i960/rtems.h *** gcc-3.0.4/gcc/config/i960/rtems.h Fri Feb 15 14:42:59 2002 --- gcc-3.1/gcc/config/i960/rtems.h Fri Apr 12 13:09:29 2002 *************** along with GNU CC; see the file COPYING. *** 19,36 **** the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - #include "i960/i960-coff.h" - /* Specify predefined symbols in preprocessor. */ #undef CPP_PREDEFINES #define CPP_PREDEFINES "-Di960 -Di80960 -DI960 -DI80960 -D__rtems__ \ -Asystem=rtems -Acpu=i960 -Amachine=i960" - - /* Generate calls to memcpy, memcmp and memset. */ - #ifndef TARGET_MEM_FUNCTIONS - #define TARGET_MEM_FUNCTIONS - #endif - - /* Get machine-independent configuration parameters for RTEMS. */ - #include --- 19,26 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/i960/t-960bare gcc-3.1/gcc/config/i960/t-960bare *** gcc-3.0.4/gcc/config/i960/t-960bare Thu Aug 5 03:27:47 1999 --- gcc-3.1/gcc/config/i960/t-960bare Tue Jun 26 02:11:06 2001 *************** *** 1,6 **** - LIBGCC1 = - CROSS_LIBGCC1 = - LIB2FUNCS_EXTRA = xp-bit.c # We want fine grained libraries, so use the new code to build the --- 1,3 ---- *************** xp-bit.c: $(srcdir)/config/fp-bit.c *** 21,26 **** --- 18,27 ---- echo '#define EXTENDED_FLOAT_STUBS' > xp-bit.c cat $(srcdir)/config/fp-bit.c >> xp-bit.c + i960-c.o: $(srcdir)/config/i960/i960-c.c $(CONFIG_H) $(SYSTEM_H) cpplib.h \ + $(TREE_H) c-pragma.h c-lex.h toplev.h $(GGC_H) $(TM_P_H) + $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< + MULTILIB_OPTIONS=mnumerics/msoft-float mlong-double-64 MULTILIB_DIRNAMES=float soft-float ld64 MULTILIB_MATCHES=mnumerics=msb mnumerics=msc mnumerics=mkb mnumerics=mkc mnumerics=mmc mnumerics=mcb mnumerics=mcc mnumerics=mjf msoft-float=msa msoft-float=mka msoft-float=mca msoft-float=mcf diff -Nrc3pad gcc-3.0.4/gcc/config/i960/t-vxworks960 gcc-3.1/gcc/config/i960/t-vxworks960 *** gcc-3.0.4/gcc/config/i960/t-vxworks960 Thu Aug 5 03:27:47 1999 --- gcc-3.1/gcc/config/i960/t-vxworks960 Tue Jun 26 02:11:06 2001 *************** *** 1,6 **** - LIBGCC1 = - CROSS_LIBGCC1 = - # We don't want to put exit in libgcc.a for VxWorks, because VxWorks # does not have _exit. TARGET_LIBGCC2_CFLAGS = -Dexit=unused_exit --- 1,3 ---- *************** xp-bit.c: $(srcdir)/config/fp-bit.c *** 24,29 **** --- 21,30 ---- echo '#define EXTENDED_FLOAT_STUBS' > xp-bit.c cat $(srcdir)/config/fp-bit.c >> xp-bit.c + i960-c.o: $(srcdir)/config/i960/i960-c.c $(CONFIG_H) $(SYSTEM_H) cpplib.h \ + $(TREE_H) c-pragma.h c-lex.h toplev.h $(GGC_H) $(TM_P_H) + $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< + MULTILIB_OPTIONS=mnumerics/msoft-float mlong-double-64 MULTILIB_DIRNAMES=float soft-float ld64 MULTILIB_MATCHES=mnumerics=msb mnumerics=msc mnumerics=mkb mnumerics=mkc mnumerics=mmc mnumerics=mcb mnumerics=mcc msoft-float=msa msoft-float=mka msoft-float=mca msoft-float=mcf diff -Nrc3pad gcc-3.0.4/gcc/config/i960/vx960-coff.h gcc-3.1/gcc/config/i960/vx960-coff.h *** gcc-3.0.4/gcc/config/i960/vx960-coff.h Thu Nov 2 23:29:10 2000 --- gcc-3.1/gcc/config/i960/vx960-coff.h Sun Nov 4 02:12:10 2001 *************** Boston, MA 02111-1307, USA. */ *** 21,26 **** --- 21,27 ---- /* This file just exists to give specs for the 960 running on VxWorks. VxWorks does all the library stuff itself. */ + #undef MULTILIB_DEFAULTS #define MULTILIB_DEFAULTS { "msoft-float" } #undef LIB_SPEC diff -Nrc3pad gcc-3.0.4/gcc/config/i960/xm-i960.h gcc-3.1/gcc/config/i960/xm-i960.h *** gcc-3.0.4/gcc/config/i960/xm-i960.h Thu Mar 15 19:02:03 2001 --- gcc-3.1/gcc/config/i960/xm-i960.h Thu Jan 1 00:00:00 1970 *************** *** 1,39 **** - /* Configuration for GNU C-compiler for Intel 960 family - Copyright (C) 1987, 1993 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 describes the machine the compiler is hosted on. */ - #define HOST_BITS_PER_CHAR 8 - #define HOST_BITS_PER_SHORT 16 - #define HOST_BITS_PER_INT 32 - #define HOST_BITS_PER_LONG 32 - #define HOST_BITS_PER_LONGLONG 64 - - /* Arguments to use with `exit'. */ - #define SUCCESS_EXIT_CODE 0 - #define FATAL_EXIT_CODE 33 - - /* If not compiled with GNU C, use the C alloca */ - #ifndef __GNUC__ - #define USE_C_ALLOCA - #endif - - /* target machine dependencies. - tm.h is a symbolic link to the actual target specific file. */ - #include "tm.h" --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/ia64/aix.h gcc-3.1/gcc/config/ia64/aix.h *** gcc-3.0.4/gcc/config/ia64/aix.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/ia64/aix.h Fri Apr 12 01:11:43 2002 *************** *** 0 **** --- 1,246 ---- + /* Definitions of target machine GNU compiler. IA-64/AIX version. + Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + Contributed by Timothy Wall (twall@cygnus.com) + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GNU CC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU CC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + /* AIX5 (aka Monterey): a mix of AIX and UnixWare. + This file is loosely based on ia64/linux.h. */ + + /* This macro is a C statement to print on `stderr' a string describing the + particular machine description choice. */ + + #define TARGET_VERSION fprintf (stderr, " (IA-64) AIX"); + + #undef ASM_APP_ON + #define ASM_APP_ON "#APP\n" + + #undef ASM_APP_OFF + #define ASM_APP_OFF "#NO_APP\n" + + #define SET_ASM_OP "\t.set\t" + + #undef MD_EXEC_PREFIX + #undef MD_STARTFILE_PREFIX + #define MD_STARTFILE_PREFIX "/usr/lib/ia64l64/" + + /* Output at beginning of assembler file. */ + /* The .file command should always begin the output. */ + #undef ASM_FILE_START + #define ASM_FILE_START(FILE) \ + do { \ + output_file_directive (FILE, main_input_filename); \ + fprintf (FILE, "\t.version\t\"01.01\"\n"); \ + } while (0) + + /* Provide a STARTFILE_SPEC appropriate for AIX. Here we add + the crti C++ startup files file which provide part of the support + for getting C++ file-scope static object constructed before entering + `main'. */ + + #undef STARTFILE_SPEC + #define STARTFILE_SPEC \ + "%{!shared: \ + %{pg:gcrt1_64.o%s} %{!pg:%{p:mcrt1_64.o%s} \ + %{!p:%{profile:gcrt1_64.o%s} \ + %{!profile:crt1_64.o%s}}}} \ + crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}" + + /* Provide a ENDFILE_SPEC appropriate for AIX. Here we tack on + the crtn file which provides termination of the support for getting C++ + file-scope static object constructed before entering `main'. */ + + #undef ENDFILE_SPEC + #define ENDFILE_SPEC "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s" + + /* Define this so we can compile MS code for use with WINE. */ + #define HANDLE_PRAGMA_PACK_PUSH_POP + + /* A C string constant that tells the GNU CC driver program options to pass to + CPP. It can also specify how to translate options you give to GNU CC into + options for GNU CC to pass to the CPP. */ + + /* If -ansi, we need to define _ANSI_C_SOURCE to get the right headers. */ + #undef CPP_SPEC + #define CPP_SPEC "\ + %{mcpu=itanium:-D__itanium__} %{mbig-endian:-D__BIG_ENDIAN__} \ + %{ansi:-D_ANSI_C_SOURCE} \ + %{posix:-D_POSIX_SOURCE} \ + %{cpp_cpu} \ + -D__LONG_MAX__=9223372036854775807L" + + #undef CPP_PREDEFINES + #define CPP_PREDEFINES "\ + -D_AIX -D_AIX64 -D_LONGLONG -Dunix \ + -Asystem=unix -Asystem=aix \ + -D__64BIT__ -D_LONG_LONG -D_IA64 -D__int128=__size128_t" + + /* The GNU C++ standard library requires that these macros be defined. */ + #undef CPLUSPLUS_CPP_SPEC + #define CPLUSPLUS_CPP_SPEC \ + "-D_XOPEN_SOURCE=500 \ + -D_XOPEN_SOURCE_EXTENDED=1 \ + -D_LARGE_FILE_API \ + -D_ALL_SOURCE \ + -D__LONG_MAX__=9223372036854775807L \ + %{cpp_cpu}" + + /* Define this for shared library support. */ + + #undef LINK_SPEC + #define LINK_SPEC "\ + %{shared:-shared} \ + %{!shared: \ + %{!static: \ + %{rdynamic:-export-dynamic} \ + %{!dynamic-linker:-dynamic-linker /usr/lib/ia64l64/libc.so.1}} \ + %{static:-static}}" + + #define JMP_BUF_SIZE 85 + + /* A C statement or compound statement to output to FILE some assembler code to + call the profiling subroutine `mcount'. + + FIXME this is not supported until xlC supports it and can thus tell us + how to do it. + */ + + #undef FUNCTION_PROFILER + #define FUNCTION_PROFILER(FILE, LABELNO) \ + do { \ + } while (0) + + /* Tell the linker where to find the crt*.o files. */ + + #ifndef CROSS_COMPILE + #undef STANDARD_STARTFILE_PREFIX + #define STANDARD_STARTFILE_PREFIX "/usr/lib/ia64l64/" + #endif + + /* Override SELECT_SECTION and SELECT_RTX_SECTION from config/ia64/sysv4.h; + these definitions ignore flag_pic as if it were always set; + it is illegal to have relocations in shared segments on AIX. */ + + /* A C statement or statements to switch to the appropriate + section for output of DECL. DECL is either a `VAR_DECL' node + or a constant of some sort. RELOC indicates whether forming + the initial value of DECL requires link-time relocations. */ + + #undef SELECT_SECTION + #define SELECT_SECTION(DECL,RELOC,ALIGN) \ + { \ + if (TREE_CODE (DECL) == STRING_CST) \ + { \ + if (! flag_writable_strings) \ + const_section (); \ + else \ + data_section (); \ + } \ + else if (TREE_CODE (DECL) == VAR_DECL) \ + { \ + if (XSTR (XEXP (DECL_RTL (DECL), 0), 0)[0] \ + == SDATA_NAME_FLAG_CHAR) \ + sdata_section (); \ + /* ??? We need the extra ! RELOC check, because the default is to \ + only check RELOC if flag_pic is set, and we don't set flag_pic \ + (yet?). */ \ + else if (DECL_READONLY_SECTION (DECL, RELOC) && ! (RELOC)) \ + const_section (); \ + else \ + data_section (); \ + } \ + /* This could be a CONSTRUCTOR containing ADDR_EXPR of a VAR_DECL, \ + in which case we can't put it in a shared library rodata. */ \ + else if (RELOC) \ + data_section (); \ + else \ + const_section (); \ + } + + /* Similarly for constant pool data. */ + + extern unsigned int ia64_section_threshold; + #undef SELECT_RTX_SECTION + #define SELECT_RTX_SECTION(MODE, RTX, ALIGN) \ + { \ + if (GET_MODE_SIZE (MODE) > 0 \ + && GET_MODE_SIZE (MODE) <= ia64_section_threshold) \ + sdata_section (); \ + else if (symbolic_operand ((RTX), (MODE))) \ + data_section (); \ + else \ + const_section (); \ + } + + #undef UNIQUE_SECTION + #define UNIQUE_SECTION(DECL, RELOC) \ + do \ + { \ + int len; \ + int sec; \ + const char *name; \ + char *string; \ + const char *prefix; \ + static const char *const prefixes[/*4*/3][2] = \ + { \ + { ".text.", ".gnu.linkonce.t." }, \ + { ".rodata.", ".gnu.linkonce.r." }, \ + { ".data.", ".gnu.linkonce.d." } \ + /* Do not generate unique sections for uninitialised \ + data since we do not have support for this in the \ + linker scripts yet... \ + ,{ ".bss.", ".gnu.linkonce.b." } */ \ + }; \ + \ + if (TREE_CODE (DECL) == FUNCTION_DECL) \ + sec = 0; \ + /* else if (DECL_INITIAL (DECL) == 0 \ + || DECL_INITIAL (DECL) == error_mark_node) \ + sec = 3; */ \ + else if (DECL_READONLY_SECTION (DECL, RELOC) && ! (RELOC))\ + sec = 1; \ + else \ + sec = 2; \ + \ + name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (DECL)); \ + /* Strip off any encoding in name. */ \ + STRIP_NAME_ENCODING (name, name); \ + prefix = prefixes[sec][DECL_ONE_ONLY(DECL)]; \ + len = strlen (name) + strlen (prefix); \ + string = alloca (len + 1); \ + \ + sprintf (string, "%s%s", prefix, name); \ + \ + DECL_SECTION_NAME (DECL) = build_string (len, string); \ + } \ + while (0) + + /* Override ia64/sysv4.h setting with that used by AIX5. */ + #undef WCHAR_TYPE + #ifdef __64BIT__ + #define WCHAR_TYPE "unsigned int" + #else + #define WCHAR_TYPE "unsigned short" + #endif + + /* Define the `__builtin_va_list' type for AIX. Use char* b/c that's what the + system headers expect. */ + #define BUILD_VA_LIST_TYPE(VALIST) \ + (VALIST) = build_pointer_type(char_type_node) + + /* End of aix.h */ diff -Nrc3pad gcc-3.0.4/gcc/config/ia64/crtbegin.asm gcc-3.1/gcc/config/ia64/crtbegin.asm *** gcc-3.0.4/gcc/config/ia64/crtbegin.asm Thu Aug 9 16:19:52 2001 --- gcc-3.1/gcc/config/ia64/crtbegin.asm Wed Aug 22 02:10:53 2001 *************** __CTOR_LIST__: *** 26,36 **** __DTOR_LIST__: data8 -1 .section .sdata .type dtor_ptr#,@object .size dtor_ptr#,8 dtor_ptr: ! data8 __DTOR_LIST__# + 8 /* A handle for __cxa_finalize to manage c++ local destructors. */ .global __dso_handle# --- 26,40 ---- __DTOR_LIST__: data8 -1 + .section .jcr,"aw","progbits" + .align 8 + __JCR_LIST__: + .section .sdata .type dtor_ptr#,@object .size dtor_ptr#,8 dtor_ptr: ! data8 @gprel(__DTOR_LIST__# + 8) /* A handle for __cxa_finalize to manage c++ local destructors. */ .global __dso_handle# *************** __dso_handle: *** 77,82 **** --- 81,104 ---- ;; } + /* Likewise for _init. */ + + .section .init,"ax","progbits" + { .mlx + movl r2 = @pcrel(__do_jv_register_classes# - 16) + } + { .mii + mov r3 = ip + ;; + add r2 = r2, r3 + ;; + } + { .mib + mov b6 = r2 + br.call.sptk.many b0 = b6 + ;; + } + .section .text .align 16 .proc __do_global_dtors_aux# *************** __do_global_dtors_aux: *** 150,166 **** { .mmi ld8 r15 = [loc0] ;; ! ld8 r16 = [r15], 8 ;; } ! { .mfb ! cmp.ne p6, p0 = r0, r16 ! (p6) br.cond.sptk.few 0b ! } ! { .mii mov gp = loc2 mov b0 = loc1 mov ar.pfs = loc3 } { .bbb br.ret.sptk.many b0 --- 172,191 ---- { .mmi ld8 r15 = [loc0] ;; ! add r16 = r15, loc2 ! adds r15 = 8, r15 ;; } ! { .mmi ! ld8 r16 = [r16] mov gp = loc2 mov b0 = loc1 + ;; + } + { .mib + cmp.ne p6, p0 = r0, r16 mov ar.pfs = loc3 + (p6) br.cond.sptk.few 0b } { .bbb br.ret.sptk.many b0 *************** __do_global_dtors_aux: *** 168,173 **** --- 193,246 ---- } .endp __do_global_dtors_aux# + .align 16 + .proc __do_jv_register_classes# + __do_jv_register_classes: + { .mlx + alloc loc2 = ar.pfs, 0, 3, 1, 0 + movl out0 = @gprel(__JCR_LIST__) + ;; + } + { .mmi + addl r14 = @ltoff(@fptr(_Jv_RegisterClasses)), gp + add out0 = out0, gp + ;; + } + { .mmi + ld8 r14 = [r14] + ld8 r15 = [out0] + cmp.ne p6, p0 = r0, r0 + ;; + } + { .mib + cmp.eq.or p6, p0 = r0, r14 + cmp.eq.or p6, p0 = r0, r15 + (p6) br.ret.sptk.many b0 + } + { .mii + ld8 r15 = [r14], 8 + mov loc0 = b0 + mov loc1 = gp + ;; + } + { .mib + ld8 gp = [r14] + mov b6 = r15 + br.call.sptk.many b0 = b6 + ;; + } + { .mii + mov gp = loc1 + mov b0 = loc0 + mov ar.pfs = loc2 + } + { .bbb + br.ret.sptk.many b0 + ;; + } + .endp __do_jv_register_classes# + #ifdef SHARED .weak __cxa_finalize# #endif + .weak _Jv_RegisterClasses diff -Nrc3pad gcc-3.0.4/gcc/config/ia64/crtend.asm gcc-3.1/gcc/config/ia64/crtend.asm *** gcc-3.0.4/gcc/config/ia64/crtend.asm Thu Feb 22 23:01:01 2001 --- gcc-3.1/gcc/config/ia64/crtend.asm Sun Aug 19 04:46:25 2001 *************** __CTOR_END__: *** 26,31 **** --- 26,36 ---- __DTOR_END__: data8 0 + .section .jcr,"aw","progbits" + .align 8 + __JCR_END__: + data8 0 + /* * Fragment of the ELF _init routine that invokes our dtor cleanup. * *************** __do_global_ctors_aux: *** 63,77 **** for (loc0 = __CTOR_END__-1; *p != -1; --p) (*p) (); */ ! { .mii alloc loc4 = ar.pfs, 0, 5, 0, 0 ! addl loc0 = @ltoff(__CTOR_END__# - 8), gp ! mov loc1 = b0 ;; } { .mmi ! ld8 loc0 = [loc0] ;; ld8 loc3 = [loc0], -8 mov loc2 = gp ;; --- 68,85 ---- for (loc0 = __CTOR_END__-1; *p != -1; --p) (*p) (); */ ! { .mlx alloc loc4 = ar.pfs, 0, 5, 0, 0 ! movl loc0 = @gprel(__CTOR_END__# - 8) ;; } { .mmi ! add loc0 = loc0, gp ! mov loc1 = b0 ;; + } + { + .mmi ld8 loc3 = [loc0], -8 mov loc2 = gp ;; diff -Nrc3pad gcc-3.0.4/gcc/config/ia64/crtfastmath.c gcc-3.1/gcc/config/ia64/crtfastmath.c *** gcc-3.0.4/gcc/config/ia64/crtfastmath.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/ia64/crtfastmath.c Fri Jun 22 21:35:25 2001 *************** *** 0 **** --- 1,37 ---- + /* Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by David Mosberger . + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + /* In addition to the permissions in the GNU General Public License, the + Free Software Foundation gives you unlimited permission to link the + compiled version of this file into combinations with other programs, + and to distribute those combinations without any restriction coming + from the use of this file. (The General Public License restrictions + do apply in other respects; for example, they cover modification of + the file, and distribution when not linked into a combine + executable.) */ + + /* We could call fesetenv() here but that would create a confusing + dependency on libm (since that is where fesetenv() gets defined. + To avoid this, just do everything locally. */ + #define FE_NONIEEE_ENV 0x0009a04d0270037f + + static void __attribute__((constructor)) + __ia64_set_fast_math (void) + { + __asm__ __volatile__ ("mov.m ar.fpsr=%0" : : "r"(FE_NONIEEE_ENV)); + } diff -Nrc3pad gcc-3.0.4/gcc/config/ia64/crti.asm gcc-3.1/gcc/config/ia64/crti.asm *** gcc-3.0.4/gcc/config/ia64/crti.asm Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/ia64/crti.asm Thu Jul 12 02:55:24 2001 *************** *** 0 **** --- 1,66 ---- + # Copyright (C) 2000, 2001 Free Software Foundation, Inc. + # Written By Timothy Wall + # + # This file is free software; you can redistribute it and/or modify it + # under the terms of the GNU General Public License as published by the + # Free Software Foundation; either version 2, or (at your option) any + # later version. + # + # In addition to the permissions in the GNU General Public License, the + # Free Software Foundation gives you unlimited permission to link the + # compiled version of this file with other programs, and to distribute + # those programs without any restriction coming from the use of this + # file. (The General Public License restrictions do apply in other + # respects; for example, they cover modification of the file, and + # distribution when not linked into another program.) + # + # This file 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; see the file COPYING. If not, write to + # the Free Software Foundation, 59 Temple Place - Suite 330, + # Boston, MA 02111-1307, USA. + # + # As a special exception, if you link this library with files + # compiled with GCC to produce an executable, this does not cause + # the resulting executable to be covered by the GNU General Public License. + # This exception does not however invalidate any other reasons why + # the executable file might be covered by the GNU General Public License. + # + + # This file just make a stack frame for the contents of the .fini and + # .init sections. Users may put any desired instructions in those + # sections. + + .file "crti.asm" + + .section ".init" + .align 16 + .global _init# + _init: + .prologue 14, 33 + .save ar.pfs, r34 + alloc r34 = ar.pfs, 0, 4, 0, 0 + .vframe r35 + mov r35 = r12 + .save rp, r33 + mov r33 = b0 + .body + + .section ".fini" + .align 16 + .global _fini# + _fini: + .prologue 14, 33 + .save ar.pfs, r34 + alloc r34 = ar.pfs, 0, 4, 0, 0 + .vframe r35 + mov r35 = r12 + .save rp, r33 + mov r33 = b0 + .body + + # end of crti.asm diff -Nrc3pad gcc-3.0.4/gcc/config/ia64/crtn.asm gcc-3.1/gcc/config/ia64/crtn.asm *** gcc-3.0.4/gcc/config/ia64/crtn.asm Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/ia64/crtn.asm Thu Jul 12 02:55:24 2001 *************** *** 0 **** --- 1,56 ---- + # Copyright (C) 2000, 2001 Free Software Foundation, Inc. + # Written By Timothy Wall + # + # This file is free software; you can redistribute it and/or modify it + # under the terms of the GNU General Public License as published by the + # Free Software Foundation; either version 2, or (at your option) any + # later version. + # + # In addition to the permissions in the GNU General Public License, the + # Free Software Foundation gives you unlimited permission to link the + # compiled version of this file with other programs, and to distribute + # those programs without any restriction coming from the use of this + # file. (The General Public License restrictions do apply in other + # respects; for example, they cover modification of the file, and + # distribution when not linked into another program.) + # + # This file 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; see the file COPYING. If not, write to + # the Free Software Foundation, 59 Temple Place - Suite 330, + # Boston, MA 02111-1307, USA. + # + # As a special exception, if you link this library with files + # compiled with GCC to produce an executable, this does not cause + # the resulting executable to be covered by the GNU General Public License. + # This exception does not however invalidate any other reasons why + # the executable file might be covered by the GNU General Public License. + # + + # This file just makes sure that the .fini and .init sections do in + # fact return. Users may put any desired instructions in those sections. + # This file is the last thing linked into any executable. + + .file "crtn.asm" + + .section ".init" + ;; + mov ar.pfs = r34 + mov b0 = r33 + .restore sp + mov r12 = r35 + br.ret.sptk.many b0 + + .section ".fini" + ;; + mov ar.pfs = r34 + mov b0 = r33 + .restore sp + mov r12 = r35 + br.ret.sptk.many b0 + + # end of crtn.asm diff -Nrc3pad gcc-3.0.4/gcc/config/ia64/elf.h gcc-3.1/gcc/config/ia64/elf.h *** gcc-3.0.4/gcc/config/ia64/elf.h Sat Nov 3 20:28:24 2001 --- gcc-3.1/gcc/config/ia64/elf.h Fri Apr 12 01:11:43 2002 *************** *** 17,26 **** #if ((TARGET_CPU_DEFAULT | TARGET_DEFAULT) & MASK_GNU_AS) != 0 /* GNU AS. */ ! #define ASM_SPEC \ ! "%{mno-gnu-as:-N so} %{!mno-gnu-as:-x} %{mconstant-gp} %{mauto-pic}" #else /* Intel ias. */ #define ASM_SPEC \ "%{!mgnu-as:-N so} %{mgnu-as:-x} %{mconstant-gp:-M const_gp}\ %{mauto-pic:-M no_plabel}" --- 17,28 ---- #if ((TARGET_CPU_DEFAULT | TARGET_DEFAULT) & MASK_GNU_AS) != 0 /* GNU AS. */ ! #undef ASM_EXTRA_SPEC ! #define ASM_EXTRA_SPEC \ ! "%{mno-gnu-as:-N so} %{!mno-gnu-as:-x}" #else /* Intel ias. */ + #undef ASM_SPEC #define ASM_SPEC \ "%{!mgnu-as:-N so} %{mgnu-as:-x} %{mconstant-gp:-M const_gp}\ %{mauto-pic:-M no_plabel}" diff -Nrc3pad gcc-3.0.4/gcc/config/ia64/fde-glibc.c gcc-3.1/gcc/config/ia64/fde-glibc.c *** gcc-3.0.4/gcc/config/ia64/fde-glibc.c Thu Aug 9 16:19:52 2001 --- gcc-3.1/gcc/config/ia64/fde-glibc.c Sat Dec 15 11:46:51 2001 *************** _Unwind_IteratePhdrCallback (struct dl_p *** 110,116 **** else goto found; } ! return 0; found: *data->segment_base = seg_base; --- 110,118 ---- else goto found; } ! /* No need to search for further libraries when we know pc is contained ! in this library. */ ! return 1; found: *data->segment_base = seg_base; diff -Nrc3pad gcc-3.0.4/gcc/config/ia64/freebsd.h gcc-3.1/gcc/config/ia64/freebsd.h *** gcc-3.0.4/gcc/config/ia64/freebsd.h Mon Nov 12 16:30:39 2001 --- gcc-3.1/gcc/config/ia64/freebsd.h Fri Apr 12 01:11:43 2002 *************** along with GNU CC; see the file COPYING. *** 19,25 **** the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ - #undef LINK_SPEC #define LINK_SPEC \ "%{p:%e`-p' not supported; use `-pg' and gprof(1)} \ %{Wl,*:%*} \ --- 19,24 ---- *************** the Free Software Foundation, 675 Mass A *** 32,40 **** %{!dynamic-linker:-dynamic-linker /usr/libexec/ld-elf.so.1}} \ %{static:-Bstatic}}" - #undef ASM_SPEC - #define ASM_SPEC "-x %{mconstant-gp} %{mauto-pic}" - /************************[ Target stuff ]***********************************/ --- 31,36 ---- *************** the Free Software Foundation, 675 Mass A *** 57,89 **** #define TARGET_ELF 1 - #define DONT_USE_BUILTIN_SETJMP #define JMP_BUF_SIZE 76 - - /* Output any profiling code before the prologue. */ - - #undef PROFILE_BEFORE_PROLOGUE - #define PROFILE_BEFORE_PROLOGUE 1 - - /* A C statement or compound statement to output to FILE some assembler code to - call the profiling subroutine `mcount'. */ - - #undef FUNCTION_PROFILER - #define FUNCTION_PROFILER(FILE, LABELNO) \ - do { \ - char buf[20]; \ - ASM_GENERATE_INTERNAL_LABEL (buf, "LP", LABELNO); \ - fputs ("\talloc out0 = ar.pfs, 8, 0, 4, 0\n", FILE); \ - if (TARGET_AUTO_PIC) \ - fputs ("\tmovl out3 = @gprel(", FILE); \ - else \ - fputs ("\taddl out3 = @ltoff(", FILE); \ - assemble_name (FILE, buf); \ - if (TARGET_AUTO_PIC) \ - fputs (");;\n", FILE); \ - else \ - fputs ("), r1;;\n", FILE); \ - fputs ("\tmov out1 = r1\n", FILE); \ - fputs ("\tmov out2 = b0\n", FILE); \ - fputs ("\tbr.call.sptk.many b0 = _mcount;;\n", FILE); \ - } while (0) --- 53,56 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/ia64/hpux.h gcc-3.1/gcc/config/ia64/hpux.h *** gcc-3.0.4/gcc/config/ia64/hpux.h Sat Nov 3 20:28:24 2001 --- gcc-3.1/gcc/config/ia64/hpux.h Fri Apr 12 01:11:43 2002 *************** Boston, MA 02111-1307, USA. */ *** 27,35 **** #undef CPP_PREDEFINES #define CPP_PREDEFINES "\ ! -D__IA64__ -D__ia64 -D__ia64__ -D__hpux -D__hpux__ -Dhpux -Dunix \ ! -D__BIG_ENDIAN__ -D_LONGLONG -D__ELF__ \ ! -Asystem=hpux -Asystem=posix -Asystem=unix -Acpu=ia64 -Amachine=ia64 \ -D_UINT128_T" /* -D__fpreg=long double is needed to compensate for the lack of __fpreg --- 27,35 ---- #undef CPP_PREDEFINES #define CPP_PREDEFINES "\ ! -D__IA64__ -D__hpux -D__hpux__ -Dhpux -Dunix \ ! -D__BIG_ENDIAN__ -D_LONGLONG \ ! -Asystem=hpux -Asystem=posix -Asystem=unix \ -D_UINT128_T" /* -D__fpreg=long double is needed to compensate for the lack of __fpreg *************** Boston, MA 02111-1307, USA. */ *** 40,53 **** #undef CPP_SPEC #define CPP_SPEC "\ %{mcpu=itanium:-D__itanium__} \ ! -D__LP64__ -D__LONG_MAX__=9223372036854775807L \ %{!ansi:%{!std=c*:%{!std=i*: -D_HPUX_SOURCE -D__STDC_EXT__}}} \ -D__fpreg=long\\ double \ -D__float80=long\\ double \ -D__float128=long\\ double" ! #undef ASM_SPEC ! #define ASM_SPEC "-x %{mconstant-gp} %{mauto-pic}" #undef ENDFILE_SPEC --- 40,53 ---- #undef CPP_SPEC #define CPP_SPEC "\ %{mcpu=itanium:-D__itanium__} \ ! %{mlp64:-D__LP64__ -D_LP64 -D__LONG_MAX__=9223372036854775807L} \ %{!ansi:%{!std=c*:%{!std=i*: -D_HPUX_SOURCE -D__STDC_EXT__}}} \ -D__fpreg=long\\ double \ -D__float80=long\\ double \ -D__float128=long\\ double" ! #undef ASM_EXTRA_SPEC ! #define ASM_EXTRA_SPEC "%{milp32:-milp32} %{mlp64:-mlp64}" #undef ENDFILE_SPEC *************** Boston, MA 02111-1307, USA. */ *** 71,77 **** #undef LIB_SPEC #define LIB_SPEC "%{!shared:%{!symbolic:-lc}}" ! #define DONT_USE_BUILTIN_SETJMP #define JMP_BUF_SIZE (8 * 76) #undef CONST_SECTION_ASM_OP --- 71,88 ---- #undef LIB_SPEC #define LIB_SPEC "%{!shared:%{!symbolic:-lc}}" ! #undef SUBTARGET_SWITCHES ! #define SUBTARGET_SWITCHES \ ! { "ilp32", MASK_ILP32, "Generate ILP32 code" }, \ ! { "lp64", -MASK_ILP32, "Generate LP64 code" }, ! ! /* A C expression whose value is zero if pointers that need to be extended ! from being `POINTER_SIZE' bits wide to `Pmode' are sign-extended and ! greater then zero if they are zero-extended and less then zero if the ! ptr_extend instruction should be used. */ ! ! #define POINTERS_EXTEND_UNSIGNED -1 ! #define JMP_BUF_SIZE (8 * 76) #undef CONST_SECTION_ASM_OP *************** Boston, MA 02111-1307, USA. */ *** 83,97 **** #undef TARGET_DEFAULT #define TARGET_DEFAULT (MASK_DWARF2_ASM | MASK_BIG_ENDIAN) ! /* We need this macro to output DWARF2 information correctly. The macro ! is defined in dwarf2out.c, but it will not do section relative offsets ! which messes up our ability to debug using gdb. */ ! #undef ASM_OUTPUT_DWARF_OFFSET ! #define ASM_OUTPUT_DWARF_OFFSET(FILE,LABEL) \ ! do { \ ! fprintf ((FILE), "\t%s\t", UNALIGNED_OFFSET_ASM_OP); \ ! fprintf ((FILE), "@secrel("); \ ! assemble_name (FILE, LABEL); \ ! fprintf ((FILE), ")"); \ ! } while (0) --- 94,122 ---- #undef TARGET_DEFAULT #define TARGET_DEFAULT (MASK_DWARF2_ASM | MASK_BIG_ENDIAN) ! /* This needs to be set to force structure arguments with a single ! field to be treated as structures and not as the type of their ! field. Without this a structure with a single char will be ! returned just like a char variable and that is wrong on HP-UX ! IA64. TARGET_STRUCT_ARG_REG_LITTLE_ENDIAN triggers the special ! structure handling, this macro simply ensures that single field ! structures are always treated like structures. */ ! #define MEMBER_TYPE_FORCES_BLK(FIELD) 1 ! ! /* Override the setting of FUNCTION_ARG_REG_LITTLE_ENDIAN in ! defaults.h. Setting this to true means that we are not passing ! structures in registers in the "normal" big-endian way. See ! See section 8.5 of the "Itanium Software Conventions and Runtime ! Architecture", specifically Table 8-1 and the explanation of Byte 0 ! alignment and LSB alignment and a description of how structures ! are passed. */ ! ! #define FUNCTION_ARG_REG_LITTLE_ENDIAN 1 ! ! #undef FUNCTION_ARG_PADDING ! #define FUNCTION_ARG_PADDING(MODE, TYPE) \ ! ia64_hpux_function_arg_padding ((MODE), (TYPE)) ! ! #undef PAD_VARARGS_DOWN ! #define PAD_VARARGS_DOWN (!AGGREGATE_TYPE_P (type)) diff -Nrc3pad gcc-3.0.4/gcc/config/ia64/hpux_longdouble.h gcc-3.1/gcc/config/ia64/hpux_longdouble.h *** gcc-3.0.4/gcc/config/ia64/hpux_longdouble.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/ia64/hpux_longdouble.h Sat Aug 18 19:59:46 2001 *************** *** 0 **** --- 1,103 ---- + /* Definitions of long double support for GNU compiler. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GNU CC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU CC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + /* Tell real.c that we are not using INTEL_EXTENDED_IEEE_FORMAT */ + + #undef INTEL_EXTENDED_IEEE_FORMAT + #define INTEL_EXTENDED_IEEE_FORMAT 0 + + /* Define library calls for quad FP operations. These are all part of the + IA32 and IA64 ABIs. */ + + #define ADDTF3_LIBCALL "_U_Qfadd" + #define SUBTF3_LIBCALL "_U_Qfsub" + #define MULTF3_LIBCALL "_U_Qfmpy" + #define DIVTF3_LIBCALL "_U_Qfdiv" + #define NEGTF2_LIBCALL "_U_Qfneg" + #define ABSTF2_LIBCALL "_U_Qfabs" + #define SMINTF3_LIBCALL "_U_Qfmin" + #define SMAXTF3_LIBCALL "_U_Qfmax" + #define EXTENDSFTF2_LIBCALL "_U_Qfcnvff_sgl_to_quad" + #define EXTENDDFTF2_LIBCALL "_U_Qfcnvff_dbl_to_quad" + #define TRUNCTFSF2_LIBCALL "_U_Qfcnvff_quad_to_sgl" + #define TRUNCTFDF2_LIBCALL "_U_Qfcnvff_quad_to_dbl" + #define FLOATSITF2_LIBCALL "_U_Qfcnvxf_sgl_to_quad" + #define FLOATDITF2_LIBCALL "_U_Qfcnvxf_dbl_to_quad" + #define FIX_TRUNCTFSI2_LIBCALL "_U_Qfcnvfxt_quad_to_sgl" + #define FIX_TRUNCTFDI2_LIBCALL "_U_Qfcnvfxt_quad_to_dbl" + #define EQTF2_LIBCALL "_U_Qfeq" + #define NETF2_LIBCALL "_U_Qfne" + #define GTTF2_LIBCALL "_U_Qfgt" + #define GETF2_LIBCALL "_U_Qfge" + #define LTTF2_LIBCALL "_U_Qflt" + #define LETF2_LIBCALL "_U_Qfle" + + + #undef INIT_TARGET_OPTABS + #define INIT_TARGET_OPTABS \ + do { \ + add_optab->handlers[(int) TFmode].libfunc \ + = gen_rtx_SYMBOL_REF (Pmode, ADDTF3_LIBCALL); \ + sub_optab->handlers[(int) TFmode].libfunc \ + = gen_rtx_SYMBOL_REF (Pmode, SUBTF3_LIBCALL); \ + smul_optab->handlers[(int) TFmode].libfunc \ + = gen_rtx_SYMBOL_REF (Pmode, MULTF3_LIBCALL); \ + sdiv_optab->handlers[(int) TFmode].libfunc \ + = gen_rtx_SYMBOL_REF (Pmode, DIVTF3_LIBCALL); \ + smin_optab->handlers[(int) TFmode].libfunc \ + = gen_rtx_SYMBOL_REF (Pmode, SMINTF3_LIBCALL); \ + smax_optab->handlers[(int) TFmode].libfunc \ + = gen_rtx_SYMBOL_REF (Pmode, SMAXTF3_LIBCALL); \ + abs_optab->handlers[(int) TFmode].libfunc \ + = gen_rtx_SYMBOL_REF (Pmode, ABSTF2_LIBCALL); \ + neg_optab->handlers[(int) TFmode].libfunc \ + = gen_rtx_SYMBOL_REF (Pmode, NEGTF2_LIBCALL); \ + extendsftf2_libfunc = gen_rtx_SYMBOL_REF (Pmode, EXTENDSFTF2_LIBCALL); \ + extenddftf2_libfunc = gen_rtx_SYMBOL_REF (Pmode, EXTENDDFTF2_LIBCALL); \ + trunctfsf2_libfunc = gen_rtx_SYMBOL_REF (Pmode, TRUNCTFSF2_LIBCALL); \ + trunctfdf2_libfunc = gen_rtx_SYMBOL_REF (Pmode, TRUNCTFDF2_LIBCALL); \ + floatsitf_libfunc = gen_rtx_SYMBOL_REF (Pmode, FLOATSITF2_LIBCALL); \ + floatditf_libfunc = gen_rtx_SYMBOL_REF (Pmode, FLOATDITF2_LIBCALL); \ + fixtfsi_libfunc = gen_rtx_SYMBOL_REF (Pmode, FIX_TRUNCTFSI2_LIBCALL);\ + fixtfdi_libfunc = gen_rtx_SYMBOL_REF (Pmode, FIX_TRUNCTFDI2_LIBCALL);\ + fixunstfsi_libfunc = gen_rtx_SYMBOL_REF (Pmode, FIX_TRUNCTFSI2_LIBCALL); \ + fixunstfdi_libfunc = gen_rtx_SYMBOL_REF (Pmode, FIX_TRUNCTFDI2_LIBCALL); \ + eqtf2_libfunc = gen_rtx_SYMBOL_REF (Pmode, EQTF2_LIBCALL); \ + netf2_libfunc = gen_rtx_SYMBOL_REF (Pmode, NETF2_LIBCALL); \ + gttf2_libfunc = gen_rtx_SYMBOL_REF (Pmode, GTTF2_LIBCALL); \ + getf2_libfunc = gen_rtx_SYMBOL_REF (Pmode, GETF2_LIBCALL); \ + lttf2_libfunc = gen_rtx_SYMBOL_REF (Pmode, LTTF2_LIBCALL); \ + letf2_libfunc = gen_rtx_SYMBOL_REF (Pmode, LETF2_LIBCALL); \ + \ + sdiv_optab->handlers[(int) SImode].libfunc = 0; \ + udiv_optab->handlers[(int) SImode].libfunc = 0; \ + smod_optab->handlers[(int) SImode].libfunc = 0; \ + umod_optab->handlers[(int) SImode].libfunc = 0; \ + \ + INIT_SUBTARGET_OPTABS; \ + } while (0) + + /* This is meant to be redefined in the host dependent files */ + #define INIT_SUBTARGET_OPTABS + + /* Nonzero if a floating point comparison library call for + mode MODE that will return a boolean value. Zero if one + of the libgcc2 functions is used. */ + #define FLOAT_LIB_COMPARE_RETURNS_BOOL(MODE, COMPARISON) ((MODE) == TFmode) diff -Nrc3pad gcc-3.0.4/gcc/config/ia64/ia64-protos.h gcc-3.1/gcc/config/ia64/ia64-protos.h *** gcc-3.0.4/gcc/config/ia64/ia64-protos.h Wed Jan 24 04:30:47 2001 --- gcc-3.1/gcc/config/ia64/ia64-protos.h Thu Apr 18 20:31:54 2002 *************** GNU General Public License for more deta *** 16,22 **** 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. */ /* Variables defined in ia64.c. */ --- 16,22 ---- 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. */ /* Variables defined in ia64.c. */ *************** extern int not_postinc_memory_operand PA *** 62,67 **** --- 62,68 ---- extern int predicate_operator PARAMS((rtx, enum machine_mode)); extern int ar_lc_reg_operand PARAMS((rtx, enum machine_mode)); extern int ar_ccv_reg_operand PARAMS((rtx, enum machine_mode)); + extern int ar_pfs_reg_operand PARAMS((rtx, enum machine_mode)); extern int general_tfmode_operand PARAMS((rtx, enum machine_mode)); extern int destination_tfmode_operand PARAMS((rtx, enum machine_mode)); extern int tfreg_or_fp01_operand PARAMS((rtx, enum machine_mode)); *************** extern void ia64_expand_call PARAMS((rtx *** 77,84 **** extern HOST_WIDE_INT ia64_initial_elimination_offset PARAMS((int, int)); extern void ia64_expand_prologue PARAMS((void)); extern void ia64_expand_epilogue PARAMS((int)); - extern void ia64_function_prologue PARAMS((FILE *, int)); - extern void ia64_function_epilogue PARAMS((FILE *, int)); extern int ia64_direct_return PARAMS((void)); extern void ia64_expand_load_address PARAMS((rtx, rtx, rtx)); --- 78,83 ---- *************** extern enum reg_class ia64_secondary_rel *** 93,105 **** extern void ia64_reorg PARAMS((rtx)); extern void process_for_unwind_directive PARAMS ((FILE *, rtx)); extern const char *get_bundle_name PARAMS ((int)); - extern int ia64_issue_rate PARAMS ((void)); - extern int ia64_adjust_cost PARAMS ((rtx, rtx, rtx, int)); - extern void ia64_sched_init PARAMS ((FILE *, int, int)); - extern void ia64_sched_finish PARAMS ((FILE *, int)); - extern int ia64_sched_reorder PARAMS ((FILE *, int, rtx *, int *, int)); - extern int ia64_sched_reorder2 PARAMS ((FILE *, int, rtx *, int *, int)); - extern int ia64_variable_issue PARAMS ((FILE *, int, rtx, int)); #endif /* RTX_CODE */ #ifdef TREE_CODE --- 92,97 ---- *************** extern int ia64_function_arg_partial_nre *** 121,137 **** extern void ia64_function_arg_advance PARAMS((CUMULATIVE_ARGS *, enum machine_mode, tree, int)); extern int ia64_return_in_memory PARAMS((tree)); extern void ia64_asm_output_external PARAMS((FILE *, tree, const char *)); - extern int ia64_valid_type_attribute PARAMS((tree, tree, tree, tree)); extern void ia64_encode_section_info PARAMS((tree)); #endif /* TREE_CODE */ ! extern int ia64_register_move_cost PARAMS((enum reg_class, enum reg_class)); extern int ia64_epilogue_uses PARAMS((int)); extern void emit_safe_across_calls PARAMS((FILE *)); - extern void ia64_output_end_prologue PARAMS((FILE *)); extern void ia64_init_builtins PARAMS((void)); extern void ia64_override_options PARAMS((void)); extern int ia64_dbx_register_number PARAMS((int)); --- 113,132 ---- extern void ia64_function_arg_advance PARAMS((CUMULATIVE_ARGS *, enum machine_mode, tree, int)); + extern int ia64_function_arg_pass_by_reference PARAMS((CUMULATIVE_ARGS *, + enum machine_mode, + tree, int)); extern int ia64_return_in_memory PARAMS((tree)); extern void ia64_asm_output_external PARAMS((FILE *, tree, const char *)); extern void ia64_encode_section_info PARAMS((tree)); #endif /* TREE_CODE */ ! extern int ia64_register_move_cost PARAMS((enum machine_mode, enum reg_class, ! enum reg_class)); extern int ia64_epilogue_uses PARAMS((int)); + extern int ia64_eh_uses PARAMS((int)); extern void emit_safe_across_calls PARAMS((FILE *)); extern void ia64_init_builtins PARAMS((void)); extern void ia64_override_options PARAMS((void)); extern int ia64_dbx_register_number PARAMS((int)); *************** extern void sdata_section PARAMS ((void) *** 143,145 **** --- 138,145 ---- #ifdef SBSS_SECTION_ASM_OP extern void sbss_section PARAMS ((void)); #endif + + #ifdef ARGS_SIZE_RTX + /* expr.h defines ARGS_SIZE_RTX and `enum direction'. */ + extern enum direction ia64_hpux_function_arg_padding PARAMS ((enum machine_mode, tree)); + #endif /* ARGS_SIZE_RTX */ diff -Nrc3pad gcc-3.0.4/gcc/config/ia64/ia64.c gcc-3.1/gcc/config/ia64/ia64.c *** gcc-3.0.4/gcc/config/ia64/ia64.c Wed Sep 19 19:17:21 2001 --- gcc-3.1/gcc/config/ia64/ia64.c Fri Apr 19 03:52:56 2002 *************** *** 1,5 **** /* Definitions of target machine for GNU compiler. ! Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by James E. Wilson and David Mosberger . --- 1,5 ---- /* Definitions of target machine for GNU compiler. ! Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by James E. Wilson and David Mosberger . *************** Boston, MA 02111-1307, USA. */ *** 24,30 **** #include "system.h" #include "rtl.h" #include "tree.h" - #include "tm_p.h" #include "regs.h" #include "hard-reg-set.h" #include "real.h" --- 24,29 ---- *************** Boston, MA 02111-1307, USA. */ *** 35,40 **** --- 34,40 ---- #include "flags.h" #include "recog.h" #include "expr.h" + #include "optabs.h" #include "obstack.h" #include "except.h" #include "function.h" *************** Boston, MA 02111-1307, USA. */ *** 42,47 **** --- 42,51 ---- #include "basic-block.h" #include "toplev.h" #include "sched-int.h" + #include "timevar.h" + #include "target.h" + #include "target-def.h" + #include "tm_p.h" /* This is used for communication between ASM_OUTPUT_LABEL and ASM_OUTPUT_LABELREF. */ *************** static rtx ia64_expand_compare_and_swap *** 134,139 **** --- 138,220 ---- static rtx ia64_expand_lock_test_and_set PARAMS ((enum machine_mode, tree, rtx)); static rtx ia64_expand_lock_release PARAMS ((enum machine_mode, tree, rtx)); + static bool ia64_assemble_integer PARAMS ((rtx, unsigned int, int)); + static void ia64_output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT)); + static void ia64_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT)); + static void ia64_output_function_end_prologue PARAMS ((FILE *)); + + static int ia64_issue_rate PARAMS ((void)); + static int ia64_adjust_cost PARAMS ((rtx, rtx, rtx, int)); + static void ia64_sched_init PARAMS ((FILE *, int, int)); + static void ia64_sched_finish PARAMS ((FILE *, int)); + static int ia64_internal_sched_reorder PARAMS ((FILE *, int, rtx *, + int *, int, int)); + static int ia64_sched_reorder PARAMS ((FILE *, int, rtx *, int *, int)); + static int ia64_sched_reorder2 PARAMS ((FILE *, int, rtx *, int *, int)); + static int ia64_variable_issue PARAMS ((FILE *, int, rtx, int)); + static rtx ia64_cycle_display PARAMS ((int, rtx)); + + + /* Table of valid machine attributes. */ + static const struct attribute_spec ia64_attribute_table[] = + { + /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */ + { "syscall_linkage", 0, 0, false, true, true, NULL }, + { NULL, 0, 0, false, false, false, NULL } + }; + + /* Initialize the GCC target structure. */ + #undef TARGET_ATTRIBUTE_TABLE + #define TARGET_ATTRIBUTE_TABLE ia64_attribute_table + + #undef TARGET_INIT_BUILTINS + #define TARGET_INIT_BUILTINS ia64_init_builtins + + #undef TARGET_EXPAND_BUILTIN + #define TARGET_EXPAND_BUILTIN ia64_expand_builtin + + #undef TARGET_ASM_BYTE_OP + #define TARGET_ASM_BYTE_OP "\tdata1\t" + #undef TARGET_ASM_ALIGNED_HI_OP + #define TARGET_ASM_ALIGNED_HI_OP "\tdata2\t" + #undef TARGET_ASM_ALIGNED_SI_OP + #define TARGET_ASM_ALIGNED_SI_OP "\tdata4\t" + #undef TARGET_ASM_ALIGNED_DI_OP + #define TARGET_ASM_ALIGNED_DI_OP "\tdata8\t" + #undef TARGET_ASM_UNALIGNED_HI_OP + #define TARGET_ASM_UNALIGNED_HI_OP "\tdata2.ua\t" + #undef TARGET_ASM_UNALIGNED_SI_OP + #define TARGET_ASM_UNALIGNED_SI_OP "\tdata4.ua\t" + #undef TARGET_ASM_UNALIGNED_DI_OP + #define TARGET_ASM_UNALIGNED_DI_OP "\tdata8.ua\t" + #undef TARGET_ASM_INTEGER + #define TARGET_ASM_INTEGER ia64_assemble_integer + + #undef TARGET_ASM_FUNCTION_PROLOGUE + #define TARGET_ASM_FUNCTION_PROLOGUE ia64_output_function_prologue + #undef TARGET_ASM_FUNCTION_END_PROLOGUE + #define TARGET_ASM_FUNCTION_END_PROLOGUE ia64_output_function_end_prologue + #undef TARGET_ASM_FUNCTION_EPILOGUE + #define TARGET_ASM_FUNCTION_EPILOGUE ia64_output_function_epilogue + + #undef TARGET_SCHED_ADJUST_COST + #define TARGET_SCHED_ADJUST_COST ia64_adjust_cost + #undef TARGET_SCHED_ISSUE_RATE + #define TARGET_SCHED_ISSUE_RATE ia64_issue_rate + #undef TARGET_SCHED_VARIABLE_ISSUE + #define TARGET_SCHED_VARIABLE_ISSUE ia64_variable_issue + #undef TARGET_SCHED_INIT + #define TARGET_SCHED_INIT ia64_sched_init + #undef TARGET_SCHED_FINISH + #define TARGET_SCHED_FINISH ia64_sched_finish + #undef TARGET_SCHED_REORDER + #define TARGET_SCHED_REORDER ia64_sched_reorder + #undef TARGET_SCHED_REORDER2 + #define TARGET_SCHED_REORDER2 ia64_sched_reorder2 + #undef TARGET_SCHED_CYCLE_DISPLAY + #define TARGET_SCHED_CYCLE_DISPLAY ia64_cycle_display + + struct gcc_target targetm = TARGET_INITIALIZER; /* Return 1 if OP is a valid operand for the MEM of a CALL insn. */ *************** shladd_operand (op, mode) *** 589,595 **** || INTVAL (op) == 8 || INTVAL (op) == 16)); } ! /* Return 1 if OP is a -16, -8, -4, -1, 1, 4, 8, or 16 immediate operand. */ int fetchadd_operand (op, mode) --- 670,676 ---- || INTVAL (op) == 8 || INTVAL (op) == 16)); } ! /* Return 1 if OP is a -16, -8, -4, -1, 1, 4, 8, or 16 immediate operand. */ int fetchadd_operand (op, mode) *************** predicate_operator (op, mode) *** 694,699 **** --- 775,793 ---- && (code == EQ || code == NE)); } + /* Return 1 if this operator can be used in a conditional operation. */ + + int + condop_operator (op, mode) + register rtx op; + enum machine_mode mode; + { + enum rtx_code code = GET_CODE (op); + return ((GET_MODE (op) == mode || mode == VOIDmode) + && (code == PLUS || code == MINUS || code == AND + || code == IOR || code == XOR)); + } + /* Return 1 if this is the ar.lc register. */ int *************** ar_ccv_reg_operand (op, mode) *** 719,724 **** --- 813,830 ---- && REGNO (op) == AR_CCV_REGNUM); } + /* Return 1 if this is the ar.pfs register. */ + + int + ar_pfs_reg_operand (op, mode) + register rtx op; + enum machine_mode mode; + { + return ((GET_MODE (op) == mode || mode == VOIDmode) + && GET_CODE (op) == REG + && REGNO (op) == AR_PFS_REGNUM); + } + /* Like general_operand, but don't allow (mem (addressof)). */ int *************** ia64_split_timode (out, in, scratch) *** 919,929 **** switch (GET_CODE (base)) { case REG: ! out[0] = change_address (in, DImode, NULL_RTX); break; case POST_MODIFY: base = XEXP (base, 0); ! out[0] = change_address (in, DImode, NULL_RTX); break; /* Since we're changing the mode, we need to change to POST_MODIFY --- 1025,1035 ---- switch (GET_CODE (base)) { case REG: ! out[0] = adjust_address (in, DImode, 0); break; case POST_MODIFY: base = XEXP (base, 0); ! out[0] = adjust_address (in, DImode, 0); break; /* Since we're changing the mode, we need to change to POST_MODIFY *************** ia64_split_timode (out, in, scratch) *** 932,944 **** register handy so let's use it. */ case POST_INC: base = XEXP (base, 0); ! out[0] = change_address (in, DImode, ! gen_rtx_POST_MODIFY (Pmode, base,plus_constant (base, 16))); break; case POST_DEC: base = XEXP (base, 0); ! out[0] = change_address (in, DImode, ! gen_rtx_POST_MODIFY (Pmode, base,plus_constant (base, -16))); break; default: abort (); --- 1038,1054 ---- register handy so let's use it. */ case POST_INC: base = XEXP (base, 0); ! out[0] ! = change_address (in, DImode, ! gen_rtx_POST_MODIFY ! (Pmode, base, plus_constant (base, 16))); break; case POST_DEC: base = XEXP (base, 0); ! out[0] ! = change_address (in, DImode, ! gen_rtx_POST_MODIFY ! (Pmode, base, plus_constant (base, -16))); break; default: abort (); *************** ia64_split_timode (out, in, scratch) *** 967,973 **** We got into problems in the first place by allowing a construct like (subreg:TF (reg:TI)), which we got from a union containing a long double. ! This solution attempts to prevent this situation from ocurring. When we see something like the above, we spill the inner register to memory. */ rtx --- 1077,1083 ---- We got into problems in the first place by allowing a construct like (subreg:TF (reg:TI)), which we got from a union containing a long double. ! This solution attempts to prevent this situation from occurring. When we see something like the above, we spill the inner register to memory. */ rtx *************** spill_tfmode_operand (in, force) *** 989,997 **** } else if (GET_CODE (in) == MEM && GET_CODE (XEXP (in, 0)) == ADDRESSOF) ! { ! return change_address (in, TFmode, copy_to_reg (XEXP (in, 0))); ! } else return in; } --- 1099,1105 ---- } else if (GET_CODE (in) == MEM && GET_CODE (XEXP (in, 0)) == ADDRESSOF) ! return change_address (in, TFmode, copy_to_reg (XEXP (in, 0))); else return in; } *************** ia64_expand_call (retval, addr, nextarg, *** 1036,1046 **** rtx nextarg; int sibcall_p; { ! rtx insn, b0, gp_save, narg_rtx; int narg; addr = XEXP (addr, 0); b0 = gen_rtx_REG (DImode, R_BR (0)); if (! nextarg) narg = 0; --- 1144,1156 ---- rtx nextarg; int sibcall_p; { ! rtx insn, b0, pfs, gp_save, narg_rtx, dest; ! bool indirect_p; int narg; addr = XEXP (addr, 0); b0 = gen_rtx_REG (DImode, R_BR (0)); + pfs = gen_rtx_REG (DImode, AR_PFS_REGNUM); if (! nextarg) narg = 0; *************** ia64_expand_call (retval, addr, nextarg, *** 1053,1059 **** if (TARGET_NO_PIC || TARGET_AUTO_PIC) { if (sibcall_p) ! insn = gen_sibcall_nopic (addr, narg_rtx, b0); else if (! retval) insn = gen_call_nopic (addr, narg_rtx, b0); else --- 1163,1169 ---- if (TARGET_NO_PIC || TARGET_AUTO_PIC) { if (sibcall_p) ! insn = gen_sibcall_nopic (addr, narg_rtx, b0, pfs); else if (! retval) insn = gen_call_nopic (addr, narg_rtx, b0); else *************** ia64_expand_call (retval, addr, nextarg, *** 1062,1122 **** return; } ! if (sibcall_p) gp_save = NULL_RTX; else gp_save = ia64_gp_save_reg (setjmp_operand (addr, VOIDmode)); /* If this is an indirect call, then we have the address of a descriptor. */ ! if (! symbolic_operand (addr, VOIDmode)) { - rtx dest; - - if (! sibcall_p) - emit_move_insn (gp_save, pic_offset_table_rtx); - dest = force_reg (DImode, gen_rtx_MEM (DImode, addr)); emit_move_insn (pic_offset_table_rtx, gen_rtx_MEM (DImode, plus_constant (addr, 8))); - - if (sibcall_p) - insn = gen_sibcall_pic (dest, narg_rtx, b0); - else if (! retval) - insn = gen_call_pic (dest, narg_rtx, b0); - else - insn = gen_call_value_pic (retval, dest, narg_rtx, b0); - emit_call_insn (insn); - - if (! sibcall_p) - emit_move_insn (pic_offset_table_rtx, gp_save); - } - else if (TARGET_CONST_GP) - { - if (sibcall_p) - insn = gen_sibcall_nopic (addr, narg_rtx, b0); - else if (! retval) - insn = gen_call_nopic (addr, narg_rtx, b0); - else - insn = gen_call_value_nopic (retval, addr, narg_rtx, b0); - emit_call_insn (insn); } else ! { ! if (sibcall_p) ! emit_call_insn (gen_sibcall_pic (addr, narg_rtx, b0)); ! else ! { ! emit_move_insn (gp_save, pic_offset_table_rtx); ! if (! retval) ! insn = gen_call_pic (addr, narg_rtx, b0); ! else ! insn = gen_call_value_pic (retval, addr, narg_rtx, b0); ! emit_call_insn (insn); ! emit_move_insn (pic_offset_table_rtx, gp_save); ! } ! } } /* Begin the assembly file. */ --- 1172,1207 ---- return; } ! indirect_p = ! symbolic_operand (addr, VOIDmode); ! ! if (sibcall_p || (TARGET_CONST_GP && !indirect_p)) gp_save = NULL_RTX; else gp_save = ia64_gp_save_reg (setjmp_operand (addr, VOIDmode)); + if (gp_save) + emit_move_insn (gp_save, pic_offset_table_rtx); + /* If this is an indirect call, then we have the address of a descriptor. */ ! if (indirect_p) { dest = force_reg (DImode, gen_rtx_MEM (DImode, addr)); emit_move_insn (pic_offset_table_rtx, gen_rtx_MEM (DImode, plus_constant (addr, 8))); } else ! dest = addr; ! if (sibcall_p) ! insn = gen_sibcall_pic (dest, narg_rtx, b0, pfs); ! else if (! retval) ! insn = gen_call_pic (dest, narg_rtx, b0); ! else ! insn = gen_call_value_pic (retval, dest, narg_rtx, b0); ! emit_call_insn (insn); ! if (gp_save) ! emit_move_insn (pic_offset_table_rtx, gp_save); } /* Begin the assembly file. */ *************** mark_reg_gr_used_mask (reg, data) *** 1275,1281 **** { unsigned int regno = REGNO (reg); if (regno < 32) ! current_frame_info.gr_used_mask |= 1 << regno; } /* Returns the number of bytes offset between the frame pointer and the stack --- 1360,1370 ---- { unsigned int regno = REGNO (reg); if (regno < 32) ! { ! unsigned int i, n = HARD_REGNO_NREGS (regno, GET_MODE (reg)); ! for (i = 0; i < n; ++i) ! current_frame_info.gr_used_mask |= 1 << (regno + i); ! } } /* Returns the number of bytes offset between the frame pointer and the stack *************** ia64_compute_frame_size (size) *** 1349,1358 **** Likwise for -a profiling for the bb_init_func argument. For -ax profiling, we need two output registers for the two bb_init_trace_func arguments. */ ! if (profile_flag || profile_block_flag == 1) i = MAX (i, 1); - else if (profile_block_flag == 2) - i = MAX (i, 2); current_frame_info.n_output_regs = i; /* ??? No rotating register support yet. */ --- 1438,1445 ---- Likwise for -a profiling for the bb_init_func argument. For -ax profiling, we need two output registers for the two bb_init_trace_func arguments. */ ! if (current_function_profile) i = MAX (i, 1); current_frame_info.n_output_regs = i; /* ??? No rotating register support yet. */ *************** ia64_compute_frame_size (size) *** 1477,1482 **** --- 1564,1570 ---- ar.unat as well. */ if (spilled_gr_p || cfun->machine->n_varargs) { + regs_ever_live[AR_UNAT_REGNUM] = 1; SET_HARD_REG_BIT (mask, AR_UNAT_REGNUM); current_frame_info.reg_save_ar_unat = find_gr_spill (spill_size == 0); if (current_frame_info.reg_save_ar_unat == 0) *************** ia64_initial_elimination_offset (from, t *** 1590,1599 **** struct spill_fill_data { ! rtx init_after; /* point at which to emit intializations */ rtx init_reg[2]; /* initial base register */ rtx iter_reg[2]; /* the iterator registers */ rtx *prev_addr[2]; /* address of last memory use */ HOST_WIDE_INT prev_off[2]; /* last offset */ int n_iter; /* number of iterators in use */ int next_iter; /* next iterator to use */ --- 1678,1688 ---- struct spill_fill_data { ! rtx init_after; /* point at which to emit initializations */ rtx init_reg[2]; /* initial base register */ rtx iter_reg[2]; /* the iterator registers */ rtx *prev_addr[2]; /* address of last memory use */ + rtx prev_insn[2]; /* the insn corresponding to prev_addr */ HOST_WIDE_INT prev_off[2]; /* last offset */ int n_iter; /* number of iterators in use */ int next_iter; /* next iterator to use */ *************** setup_spill_pointers (n_spills, init_reg *** 1615,1620 **** --- 1704,1711 ---- spill_fill_data.init_reg[1] = init_reg; spill_fill_data.prev_addr[0] = NULL; spill_fill_data.prev_addr[1] = NULL; + spill_fill_data.prev_insn[0] = NULL; + spill_fill_data.prev_insn[1] = NULL; spill_fill_data.prev_off[0] = cfa_off; spill_fill_data.prev_off[1] = cfa_off; spill_fill_data.next_iter = 0; *************** spill_restore_mem (reg, cfa_off) *** 1648,1658 **** if (spill_fill_data.prev_addr[iter]) { if (CONST_OK_FOR_N (disp)) ! *spill_fill_data.prev_addr[iter] ! = gen_rtx_POST_MODIFY (DImode, spill_fill_data.iter_reg[iter], ! gen_rtx_PLUS (DImode, ! spill_fill_data.iter_reg[iter], ! disp_rtx)); else { /* ??? Could use register post_modify for loads. */ --- 1739,1754 ---- if (spill_fill_data.prev_addr[iter]) { if (CONST_OK_FOR_N (disp)) ! { ! *spill_fill_data.prev_addr[iter] ! = gen_rtx_POST_MODIFY (DImode, spill_fill_data.iter_reg[iter], ! gen_rtx_PLUS (DImode, ! spill_fill_data.iter_reg[iter], ! disp_rtx)); ! REG_NOTES (spill_fill_data.prev_insn[iter]) ! = gen_rtx_EXPR_LIST (REG_INC, spill_fill_data.iter_reg[iter], ! REG_NOTES (spill_fill_data.prev_insn[iter])); ! } else { /* ??? Could use register post_modify for loads. */ *************** spill_restore_mem (reg, cfa_off) *** 1675,1686 **** && frame_pointer_needed) { mem = gen_rtx_MEM (GET_MODE (reg), hard_frame_pointer_rtx); ! MEM_ALIAS_SET (mem) = get_varargs_alias_set (); return mem; } else { ! rtx seq; if (disp == 0) seq = gen_movdi (spill_fill_data.iter_reg[iter], --- 1771,1782 ---- && frame_pointer_needed) { mem = gen_rtx_MEM (GET_MODE (reg), hard_frame_pointer_rtx); ! set_mem_alias_set (mem, get_varargs_alias_set ()); return mem; } else { ! rtx seq, insn; if (disp == 0) seq = gen_movdi (spill_fill_data.iter_reg[iter], *************** spill_restore_mem (reg, cfa_off) *** 1706,1722 **** /* Careful for being the first insn in a sequence. */ if (spill_fill_data.init_after) ! spill_fill_data.init_after ! = emit_insn_after (seq, spill_fill_data.init_after); else { rtx first = get_insns (); if (first) ! spill_fill_data.init_after ! = emit_insn_before (seq, first); else ! spill_fill_data.init_after = emit_insn (seq); } } mem = gen_rtx_MEM (GET_MODE (reg), spill_fill_data.iter_reg[iter]); --- 1802,1827 ---- /* Careful for being the first insn in a sequence. */ if (spill_fill_data.init_after) ! insn = emit_insn_after (seq, spill_fill_data.init_after); else { rtx first = get_insns (); if (first) ! insn = emit_insn_before (seq, first); else ! insn = emit_insn (seq); } + spill_fill_data.init_after = insn; + + /* If DISP is 0, we may or may not have a further adjustment + afterward. If we do, then the load/store insn may be modified + to be a post-modify. If we don't, then this copy may be + eliminated by copyprop_hardreg_forward, which makes this + insn garbage, which runs afoul of the sanity check in + propagate_one_insn. So mark this insn as legal to delete. */ + if (disp == 0) + REG_NOTES(insn) = gen_rtx_EXPR_LIST (REG_MAYBE_DEAD, const0_rtx, + REG_NOTES (insn)); } mem = gen_rtx_MEM (GET_MODE (reg), spill_fill_data.iter_reg[iter]); *************** spill_restore_mem (reg, cfa_off) *** 1724,1730 **** /* ??? Not all of the spills are for varargs, but some of them are. The rest of the spills belong in an alias set of their own. But it doesn't actually hurt to include them here. */ ! MEM_ALIAS_SET (mem) = get_varargs_alias_set (); spill_fill_data.prev_addr[iter] = &XEXP (mem, 0); spill_fill_data.prev_off[iter] = cfa_off; --- 1829,1835 ---- /* ??? Not all of the spills are for varargs, but some of them are. The rest of the spills belong in an alias set of their own. But it doesn't actually hurt to include them here. */ ! set_mem_alias_set (mem, get_varargs_alias_set ()); spill_fill_data.prev_addr[iter] = &XEXP (mem, 0); spill_fill_data.prev_off[iter] = cfa_off; *************** do_spill (move_fn, reg, cfa_off, frame_r *** 1742,1751 **** --- 1847,1858 ---- rtx reg, frame_reg; HOST_WIDE_INT cfa_off; { + int iter = spill_fill_data.next_iter; rtx mem, insn; mem = spill_restore_mem (reg, cfa_off); insn = emit_insn ((*move_fn) (mem, reg, GEN_INT (cfa_off))); + spill_fill_data.prev_insn[iter] = insn; if (frame_reg) { *************** do_restore (move_fn, reg, cfa_off) *** 1785,1792 **** rtx reg; HOST_WIDE_INT cfa_off; { ! emit_insn ((*move_fn) (reg, spill_restore_mem (reg, cfa_off), ! GEN_INT (cfa_off))); } /* Wrapper functions that discards the CONST_INT spill offset. These --- 1892,1903 ---- rtx reg; HOST_WIDE_INT cfa_off; { ! int iter = spill_fill_data.next_iter; ! rtx insn; ! ! insn = emit_insn ((*move_fn) (reg, spill_restore_mem (reg, cfa_off), ! GEN_INT (cfa_off))); ! spill_fill_data.prev_insn[iter] = insn; } /* Wrapper functions that discards the CONST_INT spill offset. These *************** gen_fr_restore_x (dest, src, offset) *** 1819,1825 **** /* Called after register allocation to add any instructions needed for the prologue. Using a prologue insn is favored compared to putting all of the ! instructions in the FUNCTION_PROLOGUE macro, since it allows the scheduler to intermix instructions with the saves of the caller saved registers. In some cases, it might be necessary to emit a barrier instruction as the last insn to prevent such scheduling. --- 1930,1936 ---- /* Called after register allocation to add any instructions needed for the prologue. Using a prologue insn is favored compared to putting all of the ! instructions in output_function_prologue(), since it allows the scheduler to intermix instructions with the saves of the caller saved registers. In some cases, it might be necessary to emit a barrier instruction as the last insn to prevent such scheduling. *************** ia64_expand_prologue () *** 1912,1918 **** /* We don't need an alloc instruction if we've used no outputs or locals. */ if (current_frame_info.n_local_regs == 0 && current_frame_info.n_output_regs == 0 ! && current_frame_info.n_input_regs <= current_function_args_info.words) { /* If there is no alloc, but there are input registers used, then we need a .regstk directive. */ --- 2023,2029 ---- /* We don't need an alloc instruction if we've used no outputs or locals. */ if (current_frame_info.n_local_regs == 0 && current_frame_info.n_output_regs == 0 ! && current_frame_info.n_input_regs <= current_function_args_info.int_regs) { /* If there is no alloc, but there are input registers used, then we need a .regstk directive. */ *************** ia64_expand_prologue () *** 2009,2015 **** /* Even if we're not going to generate an epilogue, we still need to save the register so that EH works. */ if (! epilogue_p && current_frame_info.reg_save_ar_unat) ! emit_insn (gen_rtx_USE (VOIDmode, ar_unat_save_reg)); } else ar_unat_save_reg = NULL_RTX; --- 2120,2126 ---- /* Even if we're not going to generate an epilogue, we still need to save the register so that EH works. */ if (! epilogue_p && current_frame_info.reg_save_ar_unat) ! emit_insn (gen_prologue_use (ar_unat_save_reg)); } else ar_unat_save_reg = NULL_RTX; *************** ia64_expand_prologue () *** 2050,2056 **** /* Even if we're not going to generate an epilogue, we still need to save the register so that EH works. */ if (! epilogue_p) ! emit_insn (gen_rtx_USE (VOIDmode, alt_reg)); } else { --- 2161,2167 ---- /* Even if we're not going to generate an epilogue, we still need to save the register so that EH works. */ if (! epilogue_p) ! emit_insn (gen_prologue_use (alt_reg)); } else { *************** ia64_expand_prologue () *** 2094,2100 **** /* Even if we're not going to generate an epilogue, we still need to save the register so that EH works. */ if (! epilogue_p) ! emit_insn (gen_rtx_USE (VOIDmode, alt_reg)); } else { --- 2205,2211 ---- /* Even if we're not going to generate an epilogue, we still need to save the register so that EH works. */ if (! epilogue_p) ! emit_insn (gen_prologue_use (alt_reg)); } else { *************** ia64_expand_prologue () *** 2134,2140 **** /* Even if we're not going to generate an epilogue, we still need to save the register so that EH works. */ if (! epilogue_p) ! emit_insn (gen_rtx_USE (VOIDmode, alt_reg)); } else { --- 2245,2251 ---- /* Even if we're not going to generate an epilogue, we still need to save the register so that EH works. */ if (! epilogue_p) ! emit_insn (gen_prologue_use (alt_reg)); } else { *************** ia64_expand_prologue () *** 2176,2183 **** } /* Called after register allocation to add any instructions needed for the ! epilogue. Using a epilogue insn is favored compared to putting all of the ! instructions in the FUNCTION_PROLOGUE macro, since it allows the scheduler to intermix instructions with the saves of the caller saved registers. In some cases, it might be necessary to emit a barrier instruction as the last insn to prevent such scheduling. */ --- 2287,2294 ---- } /* Called after register allocation to add any instructions needed for the ! epilogue. Using an epilogue insn is favored compared to putting all of the ! instructions in output_function_prologue(), since it allows the scheduler to intermix instructions with the saves of the caller saved registers. In some cases, it might be necessary to emit a barrier instruction as the last insn to prevent such scheduling. */ *************** ia64_hard_regno_rename_ok (from, to) *** 2483,2494 **** return 1; } /* Emit the function prologue. */ ! void ! ia64_function_prologue (file, size) FILE *file; ! int size ATTRIBUTE_UNUSED; { int mask, grsave, grsave_prev; --- 2594,2627 ---- return 1; } + /* Target hook for assembling integer objects. Handle word-sized + aligned objects and detect the cases when @fptr is needed. */ + + static bool + ia64_assemble_integer (x, size, aligned_p) + rtx x; + unsigned int size; + int aligned_p; + { + if (size == UNITS_PER_WORD && aligned_p + && !(TARGET_NO_PIC || TARGET_AUTO_PIC) + && GET_CODE (x) == SYMBOL_REF + && SYMBOL_REF_FLAG (x)) + { + fputs ("\tdata8\t@fptr(", asm_out_file); + output_addr_const (asm_out_file, x); + fputs (")\n", asm_out_file); + return true; + } + return default_assemble_integer (x, size, aligned_p); + } + /* Emit the function prologue. */ ! static void ! ia64_output_function_prologue (file, size) FILE *file; ! HOST_WIDE_INT size ATTRIBUTE_UNUSED; { int mask, grsave, grsave_prev; *************** ia64_function_prologue (file, size) *** 2554,2561 **** /* Emit the .body directive at the scheduled end of the prologue. */ ! void ! ia64_output_end_prologue (file) FILE *file; { if (!flag_unwind_tables && (!flag_exceptions || USING_SJLJ_EXCEPTIONS)) --- 2687,2694 ---- /* Emit the .body directive at the scheduled end of the prologue. */ ! static void ! ia64_output_function_end_prologue (file) FILE *file; { if (!flag_unwind_tables && (!flag_exceptions || USING_SJLJ_EXCEPTIONS)) *************** ia64_output_end_prologue (file) *** 2566,2575 **** /* Emit the function epilogue. */ ! void ! ia64_function_epilogue (file, size) FILE *file ATTRIBUTE_UNUSED; ! int size ATTRIBUTE_UNUSED; { int i; --- 2699,2708 ---- /* Emit the function epilogue. */ ! static void ! ia64_output_function_epilogue (file, size) FILE *file ATTRIBUTE_UNUSED; ! HOST_WIDE_INT size ATTRIBUTE_UNUSED; { int i; *************** hfa_element_mode (type, nested) *** 2714,2719 **** --- 2847,2853 ---- return VOIDmode; case REAL_TYPE: + /* ??? Should exclude 128-bit long double here. */ /* We want to return VOIDmode for raw REAL_TYPEs, but the actual mode if this is contained within an aggregate. */ if (nested) *************** hfa_element_mode (type, nested) *** 2722,2728 **** return VOIDmode; case ARRAY_TYPE: ! return TYPE_MODE (TREE_TYPE (type)); case RECORD_TYPE: case UNION_TYPE: --- 2856,2862 ---- return VOIDmode; case ARRAY_TYPE: ! return hfa_element_mode (TREE_TYPE (type), 1); case RECORD_TYPE: case UNION_TYPE: *************** ia64_function_arg (cum, mode, type, name *** 2888,2894 **** /* Integral and aggregates go in general registers. If we have run out of FR registers, then FP values must also go in general registers. This can happen when we have a SFmode HFA. */ ! else if (! FLOAT_MODE_P (mode) || cum->fp_regs == MAX_ARGUMENT_SLOTS) return gen_rtx_REG (mode, basereg + cum->words + offset); /* If there is a prototype, then FP values go in a FR register when --- 3022,3029 ---- /* Integral and aggregates go in general registers. If we have run out of FR registers, then FP values must also go in general registers. This can happen when we have a SFmode HFA. */ ! else if (((mode == TFmode) && ! INTEL_EXTENDED_IEEE_FORMAT) ! || (! FLOAT_MODE_P (mode) || cum->fp_regs == MAX_ARGUMENT_SLOTS)) return gen_rtx_REG (mode, basereg + cum->words + offset); /* If there is a prototype, then FP values go in a FR register when *************** ia64_function_arg_advance (cum, mode, ty *** 3029,3042 **** FR registers, then FP values must also go in general registers. This can happen when we have a SFmode HFA. */ else if (! FLOAT_MODE_P (mode) || cum->fp_regs == MAX_ARGUMENT_SLOTS) ! return; /* If there is a prototype, then FP values go in a FR register when named, and in a GR registeer when unnamed. */ else if (cum->prototype) { if (! named) ! return; else /* ??? Complex types should not reach here. */ cum->fp_regs += (GET_MODE_CLASS (mode) == MODE_COMPLEX_FLOAT ? 2 : 1); --- 3164,3177 ---- FR registers, then FP values must also go in general registers. This can happen when we have a SFmode HFA. */ else if (! FLOAT_MODE_P (mode) || cum->fp_regs == MAX_ARGUMENT_SLOTS) ! cum->int_regs = cum->words; /* If there is a prototype, then FP values go in a FR register when named, and in a GR registeer when unnamed. */ else if (cum->prototype) { if (! named) ! cum->int_regs = cum->words; else /* ??? Complex types should not reach here. */ cum->fp_regs += (GET_MODE_CLASS (mode) == MODE_COMPLEX_FLOAT ? 2 : 1); *************** ia64_function_arg_advance (cum, mode, ty *** 3044,3053 **** /* If there is no prototype, then FP values go in both FR and GR registers. */ else ! /* ??? Complex types should not reach here. */ ! cum->fp_regs += (GET_MODE_CLASS (mode) == MODE_COMPLEX_FLOAT ? 2 : 1); ! return; } /* Implement va_start. */ --- 3179,3202 ---- /* If there is no prototype, then FP values go in both FR and GR registers. */ else ! { ! /* ??? Complex types should not reach here. */ ! cum->fp_regs += (GET_MODE_CLASS (mode) == MODE_COMPLEX_FLOAT ? 2 : 1); ! cum->int_regs = cum->words; ! } ! } ! /* Variable sized types are passed by reference. */ ! /* ??? At present this is a GCC extension to the IA-64 ABI. */ ! ! int ! ia64_function_arg_pass_by_reference (cum, mode, type, named) ! CUMULATIVE_ARGS *cum ATTRIBUTE_UNUSED; ! enum machine_mode mode ATTRIBUTE_UNUSED; ! tree type; ! int named ATTRIBUTE_UNUSED; ! { ! return type && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST; } /* Implement va_start. */ *************** ia64_va_arg (valist, type) *** 3080,3085 **** --- 3229,3241 ---- { tree t; + /* Variable sized types are passed by reference. */ + if (TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST) + { + rtx addr = std_expand_builtin_va_arg (valist, build_pointer_type (type)); + return gen_rtx_MEM (ptr_mode, force_reg (Pmode, addr)); + } + /* Arguments with alignment larger than 8 bytes start at the next even boundary. */ if (TYPE_ALIGN (type) > 8 * BITS_PER_UNIT) *************** ia64_function_value (valtype, func) *** 3172,3178 **** else return gen_rtx_PARALLEL (mode, gen_rtvec_v (i, loc)); } ! else if (FLOAT_TYPE_P (valtype)) return gen_rtx_REG (mode, FR_ARG_FIRST); else return gen_rtx_REG (mode, GR_RET_FIRST); --- 3328,3335 ---- else return gen_rtx_PARALLEL (mode, gen_rtvec_v (i, loc)); } ! else if (FLOAT_TYPE_P (valtype) && ! ((mode != TFmode) || INTEL_EXTENDED_IEEE_FORMAT)) return gen_rtx_REG (mode, FR_ARG_FIRST); else return gen_rtx_REG (mode, GR_RET_FIRST); *************** ia64_print_operand_address (stream, addr *** 3190,3196 **** { } ! /* Print an operand to a assembler instruction. C Swap and print a comparison operator. D Print an FP comparison operator. E Print 32 - constant, for SImode shifts as extract. --- 3347,3353 ---- { } ! /* Print an operand to an assembler instruction. C Swap and print a comparison operator. D Print an FP comparison operator. E Print 32 - constant, for SImode shifts as extract. *************** ia64_print_operand (file, x, code) *** 3425,3431 **** case POST_DEC: case POST_MODIFY: x = XEXP (x, 0); ! /* ... fall through ... */ case REG: fputs (reg_names [REGNO (x)], file); --- 3582,3588 ---- case POST_DEC: case POST_MODIFY: x = XEXP (x, 0); ! /* ... fall through ... */ case REG: fputs (reg_names [REGNO (x)], file); *************** ia64_print_operand (file, x, code) *** 3449,3493 **** } /* Calulate the cost of moving data from a register in class FROM to ! one in class TO. */ int ! ia64_register_move_cost (from, to) enum reg_class from, to; { ! int from_hard, to_hard; ! int from_gr, to_gr; ! int from_fr, to_fr; ! int from_pr, to_pr; ! from_hard = (from == BR_REGS || from == AR_M_REGS || from == AR_I_REGS); ! to_hard = (to == BR_REGS || to == AR_M_REGS || to == AR_I_REGS); ! from_gr = (from == GENERAL_REGS); ! to_gr = (to == GENERAL_REGS); ! from_fr = (from == FR_REGS); ! to_fr = (to == FR_REGS); ! from_pr = (from == PR_REGS); ! to_pr = (to == PR_REGS); ! if (from_hard && to_hard) ! return 8; ! else if ((from_hard && !to_gr) || (!from_gr && to_hard)) ! return 6; ! /* Moving between PR registers takes two insns. */ ! else if (from_pr && to_pr) ! return 3; ! /* Moving between PR and anything but GR is impossible. */ ! else if ((from_pr && !to_gr) || (!from_gr && to_pr)) ! return 6; ! /* ??? Moving from FR<->GR must be more expensive than 2, so that we get ! secondary memory reloads for TFmode moves. Unfortunately, we don't ! have the mode here, so we can't check that. */ ! /* Moreover, we have to make this at least as high as MEMORY_MOVE_COST ! to avoid spectacularly poor register class preferencing for TFmode. */ ! else if (from_fr != to_fr) ! return 5; return 2; } --- 3606,3678 ---- } /* Calulate the cost of moving data from a register in class FROM to ! one in class TO, using MODE. */ int ! ia64_register_move_cost (mode, from, to) ! enum machine_mode mode; enum reg_class from, to; { ! /* ADDL_REGS is the same as GR_REGS for movement purposes. */ ! if (to == ADDL_REGS) ! to = GR_REGS; ! if (from == ADDL_REGS) ! from = GR_REGS; ! /* All costs are symmetric, so reduce cases by putting the ! lower number class as the destination. */ ! if (from < to) ! { ! enum reg_class tmp = to; ! to = from, from = tmp; ! } ! /* Moving from FR<->GR in TFmode must be more expensive than 2, ! so that we get secondary memory reloads. Between FR_REGS, ! we have to make this at least as expensive as MEMORY_MOVE_COST ! to avoid spectacularly poor register class preferencing. */ ! if (mode == TFmode) ! { ! if (to != GR_REGS || from != GR_REGS) ! return MEMORY_MOVE_COST (mode, to, 0); ! else ! return 3; ! } ! switch (to) ! { ! case PR_REGS: ! /* Moving between PR registers takes two insns. */ ! if (from == PR_REGS) ! return 3; ! /* Moving between PR and anything but GR is impossible. */ ! if (from != GR_REGS) ! return MEMORY_MOVE_COST (mode, to, 0); ! break; ! case BR_REGS: ! /* Moving between BR and anything but GR is impossible. */ ! if (from != GR_REGS && from != GR_AND_BR_REGS) ! return MEMORY_MOVE_COST (mode, to, 0); ! break; ! ! case AR_I_REGS: ! case AR_M_REGS: ! /* Moving between AR and anything but GR is impossible. */ ! if (from != GR_REGS) ! return MEMORY_MOVE_COST (mode, to, 0); ! break; ! ! case GR_REGS: ! case FR_REGS: ! case GR_AND_FR_REGS: ! case GR_AND_BR_REGS: ! case ALL_REGS: ! break; ! ! default: ! abort (); ! } return 2; } *************** ia64_secondary_reload_class (class, mode *** 3511,3527 **** switch (class) { case BR_REGS: ! /* ??? This is required because of a bad gcse/cse/global interaction. ! We end up with two pseudos with overlapping lifetimes both of which ! are equiv to the same constant, and both which need to be in BR_REGS. ! This results in a BR_REGS to BR_REGS copy which doesn't exist. To ! reproduce, return NO_REGS here, and compile divdi3 in libgcc2.c. ! This seems to be a cse bug. cse_basic_block_end changes depending ! on the path length, which means the qty_first_reg check in ! make_regs_eqv can give different answers at different times. */ ! /* ??? At some point I'll probably need a reload_indi pattern to handle ! this. */ ! if (BR_REGNO_P (regno)) return GR_REGS; /* This is needed if a pseudo used as a call_operand gets spilled to a --- 3696,3716 ---- switch (class) { case BR_REGS: ! case AR_M_REGS: ! case AR_I_REGS: ! /* ??? BR<->BR register copies can happen due to a bad gcse/cse/global ! interaction. We end up with two pseudos with overlapping lifetimes ! both of which are equiv to the same constant, and both which need ! to be in BR_REGS. This seems to be a cse bug. cse_basic_block_end ! changes depending on the path length, which means the qty_first_reg ! check in make_regs_eqv can give different answers at different times. ! At some point I'll probably need a reload_indi pattern to handle ! this. ! ! We can also get GR_AND_FR_REGS to BR_REGS/AR_REGS copies, where we ! wound up with a FP register from GR_AND_FR_REGS. Extend that to all ! non-general registers for good measure. */ ! if (regno >= 0 && ! GENERAL_REGNO_P (regno)) return GR_REGS; /* This is needed if a pseudo used as a call_operand gets spilled to a *************** ia64_secondary_reload_class (class, mode *** 3531,3536 **** --- 3720,3729 ---- break; case FR_REGS: + /* Need to go through general regsters to get to other class regs. */ + if (regno >= 0 && ! (FR_REGNO_P (regno) || GENERAL_REGNO_P (regno))) + return GR_REGS; + /* This can happen when a paradoxical subreg is an operand to the muldi3 pattern. */ /* ??? This shouldn't be necessary after instruction scheduling is *************** ia64_safe_type (insn) *** 3827,3833 **** WRITE_COUNT gets set to 2. The result of this is that whenever an insn attempts to write a register ! whose WRITE_COUNT is two, we need to issue a insn group barrier first. If a predicate register is written by a floating-point insn, we set WRITTEN_BY_FP to true. --- 4020,4026 ---- WRITE_COUNT gets set to 2. The result of this is that whenever an insn attempts to write a register ! whose WRITE_COUNT is two, we need to issue an insn group barrier first. If a predicate register is written by a floating-point insn, we set WRITTEN_BY_FP to true. *************** rws_update (rws, regno, flags, pred) *** 3888,3894 **** struct reg_flags flags; int pred; { ! rws[regno].write_count += pred ? 1 : 2; rws[regno].written_by_fp |= flags.is_fp; /* ??? Not tracking and/or across differing predicates. */ rws[regno].written_by_and = flags.is_and; --- 4081,4090 ---- struct reg_flags flags; int pred; { ! if (pred) ! rws[regno].write_count++; ! else ! rws[regno].write_count = 2; rws[regno].written_by_fp |= flags.is_fp; /* ??? Not tracking and/or across differing predicates. */ rws[regno].written_by_and = flags.is_and; *************** rws_access_regno (regno, flags, pred) *** 3983,3989 **** && ! rws_sum[regno].written_by_fp) /* The predicates of a branch are available within the same insn group as long as the predicate was written by ! something other than a floating-point instruction. */ return 0; } --- 4179,4185 ---- && ! rws_sum[regno].written_by_fp) /* The predicates of a branch are available within the same insn group as long as the predicate was written by ! something other than a floating-point instruction. */ return 0; } *************** update_set_flags (x, pflags, ppred, pcon *** 4100,4106 **** type compares. We do not generate such instructions currently. */ } ! /* ... fall through ... */ default: if (GET_RTX_CLASS (GET_CODE (src)) == '<' --- 4296,4302 ---- type compares. We do not generate such instructions currently. */ } ! /* ... fall through ... */ default: if (GET_RTX_CLASS (GET_CODE (src)) == '<' *************** rtx_needs_barrier (x, flags, pred) *** 4397,4402 **** --- 4593,4602 ---- case 23: /* cycle display */ break; + case 24: /* addp4 */ + need_barrier = rtx_needs_barrier (XVECEXP (x, 0, 0), flags, pred); + break; + case 5: /* recip_approx */ need_barrier = rtx_needs_barrier (XVECEXP (x, 0, 0), flags, pred); need_barrier |= rtx_needs_barrier (XVECEXP (x, 0, 1), flags, pred); *************** group_barrier_needed_p (insn) *** 4569,4574 **** --- 4769,4775 ---- /* We play dependency tricks with the epilogue in order to get proper schedules. Undo this for dv analysis. */ case CODE_FOR_epilogue_deallocate_stack: + case CODE_FOR_prologue_allocate_stack: pat = XVECEXP (pat, 0, 0); break; *************** group_barrier_needed_p (insn) *** 4580,4585 **** --- 4781,4787 ---- /* Doesn't generate code. */ case CODE_FOR_pred_rel_mutex: + case CODE_FOR_prologue_use: return 0; default: *************** emit_all_insn_group_barriers (dump, insn *** 4705,4717 **** for (insn = insns; insn; insn = NEXT_INSN (insn)) { ! if (GET_CODE (insn) == INSN ! && GET_CODE (PATTERN (insn)) == UNSPEC_VOLATILE ! && XINT (PATTERN (insn), 1) == 2) ! init_insn_group_barriers (); else if (INSN_P (insn)) { ! if (group_barrier_needed_p (insn)) { emit_insn_before (gen_insn_group_barrier (GEN_INT (3)), insn); init_insn_group_barriers (); --- 4907,4931 ---- for (insn = insns; insn; insn = NEXT_INSN (insn)) { ! if (GET_CODE (insn) == BARRIER) ! { ! rtx last = prev_active_insn (insn); ! ! if (! last) ! continue; ! if (GET_CODE (last) == JUMP_INSN ! && GET_CODE (PATTERN (last)) == ADDR_DIFF_VEC) ! last = prev_active_insn (last); ! if (recog_memoized (last) != CODE_FOR_insn_group_barrier) ! emit_insn_after (gen_insn_group_barrier (GEN_INT (3)), last); ! ! init_insn_group_barriers (); ! } else if (INSN_P (insn)) { ! if (recog_memoized (insn) == CODE_FOR_insn_group_barrier) ! init_insn_group_barriers (); ! else if (group_barrier_needed_p (insn)) { emit_insn_before (gen_insn_group_barrier (GEN_INT (3)), insn); init_insn_group_barriers (); *************** static struct group *** 4732,4738 **** { HARD_REG_SET p_reg_set; HARD_REG_SET gr_reg_conditionally_set; ! } last_group[3]; /* Index into the last_group array. */ static int group_idx; --- 4946,4952 ---- { HARD_REG_SET p_reg_set; HARD_REG_SET gr_reg_conditionally_set; ! } last_group[2]; /* Index into the last_group array. */ static int group_idx; *************** errata_find_address_regs (xp, data) *** 4753,4759 **** x = XEXP (x, 0); if (GET_CODE (x) == REG) { ! struct group *prev_group = last_group + (group_idx + 2) % 3; if (TEST_HARD_REG_BIT (prev_group->gr_reg_conditionally_set, REGNO (x))) return 1; --- 4967,4973 ---- x = XEXP (x, 0); if (GET_CODE (x) == REG) { ! struct group *prev_group = last_group + (group_idx ^ 1); if (TEST_HARD_REG_BIT (prev_group->gr_reg_conditionally_set, REGNO (x))) return 1; *************** errata_emit_nops (insn) *** 4770,4776 **** rtx insn; { struct group *this_group = last_group + group_idx; ! struct group *prev_group = last_group + (group_idx + 2) % 3; rtx pat = PATTERN (insn); rtx cond = GET_CODE (pat) == COND_EXEC ? COND_EXEC_TEST (pat) : 0; rtx real_pat = cond ? COND_EXEC_CODE (pat) : pat; --- 4984,4990 ---- rtx insn; { struct group *this_group = last_group + group_idx; ! struct group *prev_group = last_group + (group_idx ^ 1); rtx pat = PATTERN (insn); rtx cond = GET_CODE (pat) == COND_EXEC ? COND_EXEC_TEST (pat) : 0; rtx real_pat = cond ? COND_EXEC_CODE (pat) : pat; *************** errata_emit_nops (insn) *** 4814,4819 **** --- 5028,5035 ---- && REG_P (SET_DEST (set)) && GET_CODE (SET_SRC (set)) != PLUS && GET_CODE (SET_SRC (set)) != MINUS + && (GET_CODE (SET_SRC (set)) != ASHIFT + || !shladd_operand (XEXP (SET_SRC (set), 1), VOIDmode)) && (GET_CODE (SET_SRC (set)) != MEM || GET_CODE (XEXP (SET_SRC (set), 0)) != POST_MODIFY) && GENERAL_REGNO_P (REGNO (SET_DEST (set)))) *************** errata_emit_nops (insn) *** 4830,4835 **** --- 5046,5053 ---- emit_insn_before (gen_insn_group_barrier (GEN_INT (3)), insn); emit_insn_before (gen_nop (), insn); emit_insn_before (gen_insn_group_barrier (GEN_INT (3)), insn); + group_idx = 0; + memset (last_group, 0, sizeof last_group); } } *************** fixup_errata () *** 4840,4856 **** { rtx insn; group_idx = 0; memset (last_group, 0, sizeof last_group); for (insn = get_insns (); insn; insn = NEXT_INSN (insn)) { ! if (INSN_P (insn) && ia64_safe_type (insn) == TYPE_S) { ! group_idx = (group_idx + 1) % 3; memset (last_group + group_idx, 0, sizeof last_group[group_idx]); } ! if (TARGET_B_STEP && INSN_P (insn)) errata_emit_nops (insn); } } --- 5058,5080 ---- { rtx insn; + if (! TARGET_B_STEP) + return; + group_idx = 0; memset (last_group, 0, sizeof last_group); for (insn = get_insns (); insn; insn = NEXT_INSN (insn)) { ! if (!INSN_P (insn)) ! continue; ! ! if (ia64_safe_type (insn) == TYPE_S) { ! group_idx ^= 1; memset (last_group + group_idx, 0, sizeof last_group[group_idx]); } ! else errata_emit_nops (insn); } } *************** static struct ia64_packet packets[NR_PAC *** 4912,4918 **** /* Map attr_type to a string with the name. */ ! static const char *type_names[] = { "UNKNOWN", "A", "I", "M", "F", "B", "L", "X", "S" }; --- 5136,5142 ---- /* Map attr_type to a string with the name. */ ! static const char *const type_names[] = { "UNKNOWN", "A", "I", "M", "F", "B", "L", "X", "S" }; *************** static void maybe_rotate PARAMS ((FILE * *** 4928,4933 **** --- 5152,5158 ---- static void finish_last_head PARAMS ((FILE *, int)); static void rotate_one_bundle PARAMS ((FILE *)); static void rotate_two_bundles PARAMS ((FILE *)); + static void nop_cycles_until PARAMS ((int, FILE *)); static void cycle_end_fill_slots PARAMS ((FILE *)); static int packet_matches_p PARAMS ((const struct ia64_packet *, int, int *)); static int get_split PARAMS ((const struct ia64_packet *, int)); *************** static void find_best_packet PARAMS ((in *** 4938,4943 **** --- 5163,5170 ---- static int itanium_reorder PARAMS ((FILE *, rtx *, rtx *, int)); static void dump_current_packet PARAMS ((FILE *)); static void schedule_stop PARAMS ((FILE *)); + static rtx gen_nop_type PARAMS ((enum attr_type)); + static void ia64_emit_nops PARAMS ((void)); /* Map a bundle number to its pseudo-op. */ *************** itanium_split_issue (p, begin) *** 4983,4991 **** enum attr_type t = (t0 == TYPE_L ? TYPE_F : t0 == TYPE_X ? TYPE_I : t0); ! int max = (t == TYPE_B ? 3 : t == TYPE_F ? 1 : 2); if (type_count[t] == max) return i; type_count[t]++; } return split; --- 5210,5222 ---- enum attr_type t = (t0 == TYPE_L ? TYPE_F : t0 == TYPE_X ? TYPE_I : t0); ! ! /* Itanium can execute up to 3 branches, 2 floating point, 2 memory, and ! 2 integer per cycle. */ ! int max = (t == TYPE_B ? 3 : 2); if (type_count[t] == max) return i; + type_count[t]++; } return split; *************** itanium_split_issue (p, begin) *** 4993,4999 **** /* Return the maximum number of instructions a cpu can issue. */ ! int ia64_issue_rate () { return 6; --- 5224,5230 ---- /* Return the maximum number of instructions a cpu can issue. */ ! static int ia64_issue_rate () { return 6; *************** static rtx *** 5005,5022 **** ia64_single_set (insn) rtx insn; { ! rtx x = PATTERN (insn); if (GET_CODE (x) == COND_EXEC) x = COND_EXEC_CODE (x); if (GET_CODE (x) == SET) return x; ! return single_set_2 (insn, x); } /* Adjust the cost of a scheduling dependency. Return the new cost of a dependency LINK or INSN on DEP_INSN. COST is the current cost. */ ! int ia64_adjust_cost (insn, link, dep_insn, cost) rtx insn, link, dep_insn; int cost; --- 5236,5269 ---- ia64_single_set (insn) rtx insn; { ! rtx x = PATTERN (insn), ret; if (GET_CODE (x) == COND_EXEC) x = COND_EXEC_CODE (x); if (GET_CODE (x) == SET) return x; ! ! /* Special case here prologue_allocate_stack and epilogue_deallocate_stack. ! Although they are not classical single set, the second set is there just ! to protect it from moving past FP-relative stack accesses. */ ! switch (recog_memoized (insn)) ! { ! case CODE_FOR_prologue_allocate_stack: ! case CODE_FOR_epilogue_deallocate_stack: ! ret = XVECEXP (x, 0, 0); ! break; ! ! default: ! ret = single_set_2 (insn, x); ! break; ! } ! ! return ret; } /* Adjust the cost of a scheduling dependency. Return the new cost of a dependency LINK or INSN on DEP_INSN. COST is the current cost. */ ! static int ia64_adjust_cost (insn, link, dep_insn, cost) rtx insn, link, dep_insn; int cost; *************** ia64_adjust_cost (insn, link, dep_insn, *** 5067,5083 **** src = set ? SET_SRC (set) : 0; addr = 0; ! if (set && GET_CODE (SET_DEST (set)) == MEM) ! addr = XEXP (SET_DEST (set), 0); ! else if (set && GET_CODE (src) == MEM) ! addr = XEXP (src, 0); ! else if (set && GET_CODE (src) == ZERO_EXTEND ! && GET_CODE (XEXP (src, 0)) == MEM) ! addr = XEXP (XEXP (src, 0), 0); ! else if (set && GET_CODE (src) == UNSPEC ! && XVECLEN (XEXP (src, 0), 0) > 0 ! && GET_CODE (XVECEXP (src, 0, 0)) == MEM) ! addr = XEXP (XVECEXP (src, 0, 0), 0); if (addr && GET_CODE (addr) == POST_MODIFY) addr = XEXP (addr, 0); --- 5314,5340 ---- src = set ? SET_SRC (set) : 0; addr = 0; ! if (set) ! { ! if (GET_CODE (SET_DEST (set)) == MEM) ! addr = XEXP (SET_DEST (set), 0); ! else if (GET_CODE (SET_DEST (set)) == SUBREG ! && GET_CODE (SUBREG_REG (SET_DEST (set))) == MEM) ! addr = XEXP (SUBREG_REG (SET_DEST (set)), 0); ! else ! { ! addr = src; ! if (GET_CODE (addr) == UNSPEC && XVECLEN (addr, 0) > 0) ! addr = XVECEXP (addr, 0, 0); ! while (GET_CODE (addr) == SUBREG || GET_CODE (addr) == ZERO_EXTEND) ! addr = XEXP (addr, 0); ! if (GET_CODE (addr) == MEM) ! addr = XEXP (addr, 0); ! else ! addr = 0; ! } ! } ! if (addr && GET_CODE (addr) == POST_MODIFY) addr = XEXP (addr, 0); *************** ia64_adjust_cost (insn, link, dep_insn, *** 5097,5102 **** --- 5354,5360 ---- if (reg_overlap_mentioned_p (SET_DEST (set), addr)) return cost + 1; } + if ((dep_class == ITANIUM_CLASS_IALU || dep_class == ITANIUM_CLASS_ILOG || dep_class == ITANIUM_CLASS_LD) *************** ia64_adjust_cost (insn, link, dep_insn, *** 5104,5128 **** || insn_class == ITANIUM_CLASS_MMSHF || insn_class == ITANIUM_CLASS_MMSHFI)) return 3; if (dep_class == ITANIUM_CLASS_FMAC && (insn_class == ITANIUM_CLASS_FMISC || insn_class == ITANIUM_CLASS_FCVTFX || insn_class == ITANIUM_CLASS_XMPY)) return 7; if ((dep_class == ITANIUM_CLASS_FMAC || dep_class == ITANIUM_CLASS_FMISC || dep_class == ITANIUM_CLASS_FCVTFX || dep_class == ITANIUM_CLASS_XMPY) && insn_class == ITANIUM_CLASS_STF) return 8; if ((dep_class == ITANIUM_CLASS_MMMUL || dep_class == ITANIUM_CLASS_MMSHF || dep_class == ITANIUM_CLASS_MMSHFI) ! && (insn_class == ITANIUM_CLASS_LD ! || insn_class == ITANIUM_CLASS_ST ! || insn_class == ITANIUM_CLASS_IALU ! || insn_class == ITANIUM_CLASS_ILOG ! || insn_class == ITANIUM_CLASS_ISHF)) return 4; return cost; --- 5362,5389 ---- || insn_class == ITANIUM_CLASS_MMSHF || insn_class == ITANIUM_CLASS_MMSHFI)) return 3; + if (dep_class == ITANIUM_CLASS_FMAC && (insn_class == ITANIUM_CLASS_FMISC || insn_class == ITANIUM_CLASS_FCVTFX || insn_class == ITANIUM_CLASS_XMPY)) return 7; + if ((dep_class == ITANIUM_CLASS_FMAC || dep_class == ITANIUM_CLASS_FMISC || dep_class == ITANIUM_CLASS_FCVTFX || dep_class == ITANIUM_CLASS_XMPY) && insn_class == ITANIUM_CLASS_STF) return 8; + + /* Intel docs say only LD, ST, IALU, ILOG, ISHF consumers have latency 4, + but HP engineers say any non-MM operation. */ if ((dep_class == ITANIUM_CLASS_MMMUL || dep_class == ITANIUM_CLASS_MMSHF || dep_class == ITANIUM_CLASS_MMSHFI) ! && insn_class != ITANIUM_CLASS_MMMUL ! && insn_class != ITANIUM_CLASS_MMSHF ! && insn_class != ITANIUM_CLASS_MMSHFI) return 4; return cost; *************** insn_matches_slot (p, itype, slot, insn) *** 5177,5183 **** { int i; for (i = sched_data.first_slot; i < slot; i++) ! if (p->t[i] == stype) return 0; } if (GET_CODE (insn) == CALL_INSN) --- 5438,5446 ---- { int i; for (i = sched_data.first_slot; i < slot; i++) ! if (p->t[i] == stype ! || (stype == TYPE_F && p->t[i] == TYPE_L) ! || (stype == TYPE_I && p->t[i] == TYPE_X)) return 0; } if (GET_CODE (insn) == CALL_INSN) *************** ia64_emit_insn_before (insn, before) *** 5222,5253 **** emit_insn_before (insn, before); } - #if 0 - /* Generate a nop insn of the given type. Note we never generate L type - nops. */ - - static rtx - gen_nop_type (t) - enum attr_type t; - { - switch (t) - { - case TYPE_M: - return gen_nop_m (); - case TYPE_I: - return gen_nop_i (); - case TYPE_B: - return gen_nop_b (); - case TYPE_F: - return gen_nop_f (); - case TYPE_X: - return gen_nop_x (); - default: - abort (); - } - } - #endif - /* When rotating a bundle out of the issue window, insert a bundle selector insn in front of it. DUMP is the scheduling dump file or NULL. START is either 0 or 3, depending on whether we want to emit a bundle selector --- 5485,5490 ---- *************** cycle_end_fill_slots (dump) *** 5312,5330 **** if (slot > sched_data.split) abort (); if (dump) ! fprintf (dump, "// Packet needs %s, have %s\n", type_names[packet->t[slot]], ! type_names[t]); sched_data.types[slot] = packet->t[slot]; sched_data.insns[slot] = 0; sched_data.stopbit[slot] = 0; slot++; } /* Do _not_ use T here. If T == TYPE_A, then we'd risk changing the actual slot type later. */ sched_data.types[slot] = packet->t[slot]; sched_data.insns[slot] = tmp_insns[i]; sched_data.stopbit[slot] = 0; slot++; } /* This isn't right - there's no need to pad out until the forced split; --- 5549,5583 ---- if (slot > sched_data.split) abort (); if (dump) ! fprintf (dump, "// Packet needs %s, have %s\n", ! type_names[packet->t[slot]], type_names[t]); sched_data.types[slot] = packet->t[slot]; sched_data.insns[slot] = 0; sched_data.stopbit[slot] = 0; + + /* ??? TYPE_L instructions always fill up two slots, but we don't + support TYPE_L nops. */ + if (packet->t[slot] == TYPE_L) + abort (); + slot++; } + /* Do _not_ use T here. If T == TYPE_A, then we'd risk changing the actual slot type later. */ sched_data.types[slot] = packet->t[slot]; sched_data.insns[slot] = tmp_insns[i]; sched_data.stopbit[slot] = 0; slot++; + + /* TYPE_L instructions always fill up two slots. */ + if (t == TYPE_L) + { + sched_data.types[slot] = packet->t[slot]; + sched_data.insns[slot] = 0; + sched_data.stopbit[slot] = 0; + slot++; + } } /* This isn't right - there's no need to pad out until the forced split; *************** rotate_one_bundle (dump) *** 5367,5372 **** --- 5620,5627 ---- memmove (sched_data.insns, sched_data.insns + 3, sched_data.cur * sizeof *sched_data.insns); + sched_data.packet + = &packets[(sched_data.packet->t2 - bundle) * NR_BUNDLES]; } else { *************** rotate_two_bundles (dump) *** 5394,5400 **** /* We're beginning a new block. Initialize data structures as necessary. */ ! void ia64_sched_init (dump, sched_verbose, max_ready) FILE *dump ATTRIBUTE_UNUSED; int sched_verbose ATTRIBUTE_UNUSED; --- 5649,5655 ---- /* We're beginning a new block. Initialize data structures as necessary. */ ! static void ia64_sched_init (dump, sched_verbose, max_ready) FILE *dump ATTRIBUTE_UNUSED; int sched_verbose ATTRIBUTE_UNUSED; *************** schedule_stop (dump) *** 5791,5811 **** dump_current_packet (dump); } /* We are about to being issuing insns for this clock cycle. Override the default sort algorithm to better slot instructions. */ ! int ! ia64_sched_reorder (dump, sched_verbose, ready, pn_ready, reorder_type) FILE *dump ATTRIBUTE_UNUSED; int sched_verbose ATTRIBUTE_UNUSED; rtx *ready; int *pn_ready; ! int reorder_type; { int n_ready = *pn_ready; rtx *e_ready = ready + n_ready; rtx *insnp; - rtx highest; if (sched_verbose) { --- 6046,6177 ---- dump_current_packet (dump); } + /* If necessary, perform one or two rotations on the scheduling state. + This should only be called if we are starting a new cycle. */ + + static void + maybe_rotate (dump) + FILE *dump; + { + cycle_end_fill_slots (dump); + if (sched_data.cur == 6) + rotate_two_bundles (dump); + else if (sched_data.cur >= 3) + rotate_one_bundle (dump); + sched_data.first_slot = sched_data.cur; + } + + /* The clock cycle when ia64_sched_reorder was last called. */ + static int prev_cycle; + + /* The first insn scheduled in the previous cycle. This is the saved + value of sched_data.first_slot. */ + static int prev_first; + + /* Emit NOPs to fill the delay between PREV_CYCLE and CLOCK_VAR. Used to + pad out the delay between MM (shifts, etc.) and integer operations. */ + + static void + nop_cycles_until (clock_var, dump) + int clock_var; + FILE *dump; + { + int prev_clock = prev_cycle; + int cycles_left = clock_var - prev_clock; + bool did_stop = false; + + /* Finish the previous cycle; pad it out with NOPs. */ + if (sched_data.cur == 3) + { + sched_emit_insn (gen_insn_group_barrier (GEN_INT (3))); + did_stop = true; + maybe_rotate (dump); + } + else if (sched_data.cur > 0) + { + int need_stop = 0; + int split = itanium_split_issue (sched_data.packet, prev_first); + + if (sched_data.cur < 3 && split > 3) + { + split = 3; + need_stop = 1; + } + + if (split > sched_data.cur) + { + int i; + for (i = sched_data.cur; i < split; i++) + { + rtx t = sched_emit_insn (gen_nop_type (sched_data.packet->t[i])); + sched_data.types[i] = sched_data.packet->t[i]; + sched_data.insns[i] = t; + sched_data.stopbit[i] = 0; + } + sched_data.cur = split; + } + + if (! need_stop && sched_data.cur > 0 && sched_data.cur < 6 + && cycles_left > 1) + { + int i; + for (i = sched_data.cur; i < 6; i++) + { + rtx t = sched_emit_insn (gen_nop_type (sched_data.packet->t[i])); + sched_data.types[i] = sched_data.packet->t[i]; + sched_data.insns[i] = t; + sched_data.stopbit[i] = 0; + } + sched_data.cur = 6; + cycles_left--; + need_stop = 1; + } + + if (need_stop || sched_data.cur == 6) + { + sched_emit_insn (gen_insn_group_barrier (GEN_INT (3))); + did_stop = true; + } + maybe_rotate (dump); + } + + cycles_left--; + while (cycles_left > 0) + { + sched_emit_insn (gen_bundle_selector (GEN_INT (0))); + sched_emit_insn (gen_nop_type (TYPE_M)); + sched_emit_insn (gen_nop_type (TYPE_I)); + if (cycles_left > 1) + { + sched_emit_insn (gen_insn_group_barrier (GEN_INT (2))); + cycles_left--; + } + sched_emit_insn (gen_nop_type (TYPE_I)); + sched_emit_insn (gen_insn_group_barrier (GEN_INT (3))); + did_stop = true; + cycles_left--; + } + + if (did_stop) + init_insn_group_barriers (); + } + /* We are about to being issuing insns for this clock cycle. Override the default sort algorithm to better slot instructions. */ ! static int ! ia64_internal_sched_reorder (dump, sched_verbose, ready, pn_ready, ! reorder_type, clock_var) FILE *dump ATTRIBUTE_UNUSED; int sched_verbose ATTRIBUTE_UNUSED; rtx *ready; int *pn_ready; ! int reorder_type, clock_var; { + int n_asms; int n_ready = *pn_ready; rtx *e_ready = ready + n_ready; rtx *insnp; if (sched_verbose) { *************** ia64_sched_reorder (dump, sched_verbose, *** 5813,5829 **** dump_current_packet (dump); } ! if (reorder_type == 0) { ! if (sched_data.cur == 6) ! rotate_two_bundles (sched_verbose ? dump : NULL); ! else if (sched_data.cur >= 3) ! rotate_one_bundle (sched_verbose ? dump : NULL); ! sched_data.first_slot = sched_data.cur; } /* First, move all USEs, CLOBBERs and other crud out of the way. */ ! highest = ready[n_ready - 1]; for (insnp = ready; insnp < e_ready; insnp++) if (insnp < e_ready) { --- 6179,6224 ---- dump_current_packet (dump); } ! /* Work around the pipeline flush that will occurr if the results of ! an MM instruction are accessed before the result is ready. Intel ! documentation says this only happens with IALU, ISHF, ILOG, LD, ! and ST consumers, but experimental evidence shows that *any* non-MM ! type instruction will incurr the flush. */ ! if (reorder_type == 0 && clock_var > 0 && ia64_final_schedule) { ! for (insnp = ready; insnp < e_ready; insnp++) ! { ! rtx insn = *insnp, link; ! enum attr_itanium_class t = ia64_safe_itanium_class (insn); ! ! if (t == ITANIUM_CLASS_MMMUL ! || t == ITANIUM_CLASS_MMSHF ! || t == ITANIUM_CLASS_MMSHFI) ! continue; ! ! for (link = LOG_LINKS (insn); link; link = XEXP (link, 1)) ! if (REG_NOTE_KIND (link) == 0) ! { ! rtx other = XEXP (link, 0); ! enum attr_itanium_class t0 = ia64_safe_itanium_class (other); ! if (t0 == ITANIUM_CLASS_MMSHF || t0 == ITANIUM_CLASS_MMMUL) ! { ! nop_cycles_until (clock_var, sched_verbose ? dump : NULL); ! goto out; ! } ! } ! } } + out: + + prev_first = sched_data.first_slot; + prev_cycle = clock_var; + + if (reorder_type == 0) + maybe_rotate (sched_verbose ? dump : NULL); /* First, move all USEs, CLOBBERs and other crud out of the way. */ ! n_asms = 0; for (insnp = ready; insnp < e_ready; insnp++) if (insnp < e_ready) { *************** ia64_sched_reorder (dump, sched_verbose, *** 5831,5853 **** enum attr_type t = ia64_safe_type (insn); if (t == TYPE_UNKNOWN) { ! highest = ready[n_ready - 1]; ! ready[n_ready - 1] = insn; ! *insnp = highest; ! if (ia64_final_schedule && group_barrier_needed_p (insn)) { ! schedule_stop (sched_verbose ? dump : NULL); ! sched_data.last_was_stop = 1; } ! else if (GET_CODE (PATTERN (insn)) == ASM_INPUT ! || asm_noperands (PATTERN (insn)) >= 0) { ! /* It must be an asm of some kind. */ ! cycle_end_fill_slots (sched_verbose ? dump : NULL); } - return 1; } } if (ia64_final_schedule) { --- 6226,6273 ---- enum attr_type t = ia64_safe_type (insn); if (t == TYPE_UNKNOWN) { ! if (GET_CODE (PATTERN (insn)) == ASM_INPUT ! || asm_noperands (PATTERN (insn)) >= 0) { ! rtx lowest = ready[n_asms]; ! ready[n_asms] = insn; ! *insnp = lowest; ! n_asms++; } ! else { ! rtx highest = ready[n_ready - 1]; ! ready[n_ready - 1] = insn; ! *insnp = highest; ! if (ia64_final_schedule && group_barrier_needed_p (insn)) ! { ! schedule_stop (sched_verbose ? dump : NULL); ! sched_data.last_was_stop = 1; ! maybe_rotate (sched_verbose ? dump : NULL); ! } ! ! return 1; } } } + if (n_asms < n_ready) + { + /* Some normal insns to process. Skip the asms. */ + ready += n_asms; + n_ready -= n_asms; + } + else if (n_ready > 0) + { + /* Only asm insns left. */ + if (ia64_final_schedule && group_barrier_needed_p (ready[n_ready - 1])) + { + schedule_stop (sched_verbose ? dump : NULL); + sched_data.last_was_stop = 1; + maybe_rotate (sched_verbose ? dump : NULL); + } + cycle_end_fill_slots (sched_verbose ? dump : NULL); + return 1; + } if (ia64_final_schedule) { *************** ia64_sched_reorder (dump, sched_verbose, *** 5869,5874 **** --- 6289,6295 ---- { schedule_stop (sched_verbose ? dump : NULL); sched_data.last_was_stop = 1; + maybe_rotate (sched_verbose ? dump : NULL); if (reorder_type == 1) return 0; } *************** ia64_sched_reorder (dump, sched_verbose, *** 5899,5914 **** ready, e_ready, reorder_type == 1); } /* Like ia64_sched_reorder, but called after issuing each insn. Override the default sort algorithm to better slot instructions. */ ! int ia64_sched_reorder2 (dump, sched_verbose, ready, pn_ready, clock_var) FILE *dump ATTRIBUTE_UNUSED; int sched_verbose ATTRIBUTE_UNUSED; rtx *ready; int *pn_ready; ! int clock_var ATTRIBUTE_UNUSED; { if (sched_data.last_was_stop) return 0; --- 6320,6347 ---- ready, e_ready, reorder_type == 1); } + static int + ia64_sched_reorder (dump, sched_verbose, ready, pn_ready, clock_var) + FILE *dump; + int sched_verbose; + rtx *ready; + int *pn_ready; + int clock_var; + { + return ia64_internal_sched_reorder (dump, sched_verbose, ready, + pn_ready, 0, clock_var); + } + /* Like ia64_sched_reorder, but called after issuing each insn. Override the default sort algorithm to better slot instructions. */ ! static int ia64_sched_reorder2 (dump, sched_verbose, ready, pn_ready, clock_var) FILE *dump ATTRIBUTE_UNUSED; int sched_verbose ATTRIBUTE_UNUSED; rtx *ready; int *pn_ready; ! int clock_var; { if (sched_data.last_was_stop) return 0; *************** ia64_sched_reorder2 (dump, sched_verbose *** 5923,5952 **** && (sched_data.types[2] == TYPE_I || sched_data.types[2] == TYPE_A) && (sched_data.types[3] != TYPE_M && sched_data.types[3] != TYPE_A)) || (sched_data.cur == 3 ! && (sched_data.types[1] == TYPE_M || sched_data.types[1] == TYPE_A) ! && (sched_data.types[2] != TYPE_M && sched_data.types[2] != TYPE_I && sched_data.types[2] != TYPE_A)))) { int i, best; ! rtx stop = PREV_INSN (sched_data.insns[1]); ! rtx pat; ! sched_data.stopbit[0] = 0; ! sched_data.stopbit[2] = 1; ! if (GET_CODE (stop) != INSN) ! abort (); ! pat = PATTERN (stop); ! /* Ignore cycle displays. */ ! if (GET_CODE (pat) == UNSPEC && XINT (pat, 1) == 23) ! stop = PREV_INSN (stop); ! pat = PATTERN (stop); ! if (GET_CODE (pat) != UNSPEC_VOLATILE ! || XINT (pat, 1) != 2 ! || INTVAL (XVECEXP (pat, 0, 0)) != 1) abort (); ! XVECEXP (pat, 0, 0) = GEN_INT (3); sched_data.types[5] = sched_data.types[3]; sched_data.types[4] = sched_data.types[2]; --- 6356,6399 ---- && (sched_data.types[2] == TYPE_I || sched_data.types[2] == TYPE_A) && (sched_data.types[3] != TYPE_M && sched_data.types[3] != TYPE_A)) || (sched_data.cur == 3 ! && (sched_data.types[1] == TYPE_M ! || sched_data.types[1] == TYPE_A) ! && (sched_data.types[2] != TYPE_M ! && sched_data.types[2] != TYPE_I && sched_data.types[2] != TYPE_A)))) { int i, best; ! rtx stop = sched_data.insns[1]; ! /* Search backward for the stop bit that must be there. */ ! while (1) ! { ! int insn_code; ! stop = PREV_INSN (stop); ! if (GET_CODE (stop) != INSN) ! abort (); ! insn_code = recog_memoized (stop); ! ! /* Ignore cycle displays and .pred.rel.mutex. */ ! if (insn_code == CODE_FOR_cycle_display ! || insn_code == CODE_FOR_pred_rel_mutex ! || insn_code == CODE_FOR_prologue_use) ! continue; ! ! if (insn_code == CODE_FOR_insn_group_barrier) ! break; ! abort (); ! } ! ! /* Adjust the stop bit's slot selector. */ ! if (INTVAL (XVECEXP (PATTERN (stop), 0, 0)) != 1) abort (); ! XVECEXP (PATTERN (stop), 0, 0) = GEN_INT (3); ! ! sched_data.stopbit[0] = 0; ! sched_data.stopbit[2] = 1; sched_data.types[5] = sched_data.types[3]; sched_data.types[4] = sched_data.types[2]; *************** ia64_sched_reorder2 (dump, sched_verbose *** 5992,5998 **** if (*pn_ready > 0) { ! int more = ia64_sched_reorder (dump, sched_verbose, ready, pn_ready, 1); if (more) return more; /* Did we schedule a stop? If so, finish this cycle. */ --- 6439,6447 ---- if (*pn_ready > 0) { ! int more = ia64_internal_sched_reorder (dump, sched_verbose, ! ready, pn_ready, 1, ! clock_var); if (more) return more; /* Did we schedule a stop? If so, finish this cycle. */ *************** ia64_sched_reorder2 (dump, sched_verbose *** 6012,6018 **** /* We are about to issue INSN. Return the number of insns left on the ready queue that can be issued this cycle. */ ! int ia64_variable_issue (dump, sched_verbose, insn, can_issue_more) FILE *dump; int sched_verbose; --- 6461,6467 ---- /* We are about to issue INSN. Return the number of insns left on the ready queue that can be issued this cycle. */ ! static int ia64_variable_issue (dump, sched_verbose, insn, can_issue_more) FILE *dump; int sched_verbose; *************** ia64_variable_issue (dump, sched_verbose *** 6072,6078 **** /* Free data allocated by ia64_sched_init. */ ! void ia64_sched_finish (dump, sched_verbose) FILE *dump; int sched_verbose; --- 6521,6527 ---- /* Free data allocated by ia64_sched_init. */ ! static void ia64_sched_finish (dump, sched_verbose) FILE *dump; int sched_verbose; *************** ia64_sched_finish (dump, sched_verbose) *** 6083,6088 **** --- 6532,6548 ---- free (sched_types); free (sched_ready); } + + static rtx + ia64_cycle_display (clock, last) + int clock; + rtx last; + { + if (ia64_final_schedule) + return emit_insn_after (gen_cycle_display (GEN_INT (clock)), last); + else + return last; + } /* Emit pseudo-ops for the assembler to describe predicate relations. At present this assumes that we only consider predicate pairs to *************** emit_predicate_relation_info () *** 6148,6153 **** --- 6608,6717 ---- } } + /* Generate a NOP instruction of type T. We will never generate L type + nops. */ + + static rtx + gen_nop_type (t) + enum attr_type t; + { + switch (t) + { + case TYPE_M: + return gen_nop_m (); + case TYPE_I: + return gen_nop_i (); + case TYPE_B: + return gen_nop_b (); + case TYPE_F: + return gen_nop_f (); + case TYPE_X: + return gen_nop_x (); + default: + abort (); + } + } + + /* After the last scheduling pass, fill in NOPs. It's easier to do this + here than while scheduling. */ + + static void + ia64_emit_nops () + { + rtx insn; + const struct bundle *b = 0; + int bundle_pos = 0; + + for (insn = get_insns (); insn; insn = NEXT_INSN (insn)) + { + rtx pat; + enum attr_type t; + pat = INSN_P (insn) ? PATTERN (insn) : const0_rtx; + if (GET_CODE (pat) == USE || GET_CODE (pat) == CLOBBER) + continue; + if ((GET_CODE (pat) == UNSPEC && XINT (pat, 1) == 22) + || GET_CODE (insn) == CODE_LABEL) + { + if (b) + while (bundle_pos < 3) + { + emit_insn_before (gen_nop_type (b->t[bundle_pos]), insn); + bundle_pos++; + } + if (GET_CODE (insn) != CODE_LABEL) + b = bundle + INTVAL (XVECEXP (pat, 0, 0)); + else + b = 0; + bundle_pos = 0; + continue; + } + else if (GET_CODE (pat) == UNSPEC_VOLATILE && XINT (pat, 1) == 2) + { + int t = INTVAL (XVECEXP (pat, 0, 0)); + if (b) + while (bundle_pos < t) + { + emit_insn_before (gen_nop_type (b->t[bundle_pos]), insn); + bundle_pos++; + } + continue; + } + + if (bundle_pos == 3) + b = 0; + + if (b && INSN_P (insn)) + { + t = ia64_safe_type (insn); + if (asm_noperands (PATTERN (insn)) >= 0 + || GET_CODE (PATTERN (insn)) == ASM_INPUT) + { + while (bundle_pos < 3) + { + emit_insn_before (gen_nop_type (b->t[bundle_pos]), insn); + bundle_pos++; + } + continue; + } + + if (t == TYPE_UNKNOWN) + continue; + while (bundle_pos < 3) + { + if (t == b->t[bundle_pos] + || (t == TYPE_A && (b->t[bundle_pos] == TYPE_M + || b->t[bundle_pos] == TYPE_I))) + break; + + emit_insn_before (gen_nop_type (b->t[bundle_pos]), insn); + bundle_pos++; + } + if (bundle_pos < 3) + bundle_pos++; + } + } + } + /* Perform machine dependent operations on the rtl chain INSNS. */ void *************** ia64_reorg (insns) *** 6156,6162 **** { /* If optimizing, we'll have split before scheduling. */ if (optimize == 0) ! split_all_insns (0); /* Make sure the CFG and global_live_at_start are correct for emit_predicate_relation_info. */ --- 6720,6726 ---- { /* If optimizing, we'll have split before scheduling. */ if (optimize == 0) ! split_all_insns_noflow (); /* Make sure the CFG and global_live_at_start are correct for emit_predicate_relation_info. */ *************** ia64_reorg (insns) *** 6165,6177 **** --- 6729,6744 ---- if (ia64_flag_schedule_insns2) { + timevar_push (TV_SCHED2); ia64_final_schedule = 1; schedule_ebbs (rtl_dump_file); ia64_final_schedule = 0; + timevar_pop (TV_SCHED2); /* This relies on the NOTE_INSN_BASIC_BLOCK notes to be in the same place as they were during scheduling. */ emit_insn_group_barriers (rtl_dump_file, insns); + ia64_emit_nops (); } else emit_all_insn_group_barriers (rtl_dump_file, insns); *************** int *** 6213,6276 **** ia64_epilogue_uses (regno) int regno; { ! /* When a function makes a call through a function descriptor, we ! will write a (potentially) new value to "gp". After returning ! from such a call, we need to make sure the function restores the ! original gp-value, even if the function itself does not use the ! gp anymore. */ ! if (regno == R_GR (1) ! && TARGET_CONST_GP ! && !(TARGET_AUTO_PIC || TARGET_NO_PIC)) ! return 1; ! ! /* For functions defined with the syscall_linkage attribute, all input ! registers are marked as live at all function exits. This prevents the ! register allocator from using the input registers, which in turn makes it ! possible to restart a system call after an interrupt without having to ! save/restore the input registers. This also prevents kernel data from ! leaking to application code. */ ! if (IN_REGNO_P (regno) ! && lookup_attribute ("syscall_linkage", ! TYPE_ATTRIBUTES (TREE_TYPE (current_function_decl)))) ! return 1; ! /* Conditional return patterns can't represent the use of `b0' as ! the return address, so we force the value live this way. */ ! if (regno == R_BR (0)) ! return 1; ! if (regs_ever_live[AR_LC_REGNUM] && regno == AR_LC_REGNUM) ! return 1; ! if (! current_function_is_leaf && regno == AR_PFS_REGNUM) ! return 1; ! if (TEST_HARD_REG_BIT (current_frame_info.mask, AR_UNAT_REGNUM) ! && regno == AR_UNAT_REGNUM) ! return 1; ! return 0; } ! /* Return true if IDENTIFIER is a valid attribute for TYPE. */ int ! ia64_valid_type_attribute (type, attributes, identifier, args) ! tree type; ! tree attributes ATTRIBUTE_UNUSED; ! tree identifier; ! tree args; { ! /* We only support an attribute for function calls. */ ! ! if (TREE_CODE (type) != FUNCTION_TYPE ! && TREE_CODE (type) != METHOD_TYPE) return 0; ! /* The "syscall_linkage" attribute says the callee is a system call entry ! point. This affects ia64_epilogue_uses. */ ! ! if (is_attribute_p ("syscall_linkage", identifier)) ! return args == NULL_TREE; return 0; } --- 6780,6844 ---- ia64_epilogue_uses (regno) int regno; { ! switch (regno) ! { ! case R_GR (1): ! /* When a function makes a call through a function descriptor, we ! will write a (potentially) new value to "gp". After returning ! from such a call, we need to make sure the function restores the ! original gp-value, even if the function itself does not use the ! gp anymore. */ ! return (TARGET_CONST_GP && !(TARGET_AUTO_PIC || TARGET_NO_PIC)); ! case IN_REG (0): case IN_REG (1): case IN_REG (2): case IN_REG (3): ! case IN_REG (4): case IN_REG (5): case IN_REG (6): case IN_REG (7): ! /* For functions defined with the syscall_linkage attribute, all ! input registers are marked as live at all function exits. This ! prevents the register allocator from using the input registers, ! which in turn makes it possible to restart a system call after ! an interrupt without having to save/restore the input registers. ! This also prevents kernel data from leaking to application code. */ ! return lookup_attribute ("syscall_linkage", ! TYPE_ATTRIBUTES (TREE_TYPE (current_function_decl))) != NULL; ! case R_BR (0): ! /* Conditional return patterns can't represent the use of `b0' as ! the return address, so we force the value live this way. */ ! return 1; ! case AR_PFS_REGNUM: ! /* Likewise for ar.pfs, which is used by br.ret. */ ! return 1; ! default: ! return 0; ! } } ! /* Return true if REGNO is used by the frame unwinder. */ int ! ia64_eh_uses (regno) ! int regno; { ! if (! reload_completed) return 0; ! if (current_frame_info.reg_save_b0 ! && regno == current_frame_info.reg_save_b0) ! return 1; ! if (current_frame_info.reg_save_pr ! && regno == current_frame_info.reg_save_pr) ! return 1; ! if (current_frame_info.reg_save_ar_pfs ! && regno == current_frame_info.reg_save_ar_pfs) ! return 1; ! if (current_frame_info.reg_save_ar_unat ! && regno == current_frame_info.reg_save_ar_unat) ! return 1; ! if (current_frame_info.reg_save_ar_lc ! && regno == current_frame_info.reg_save_ar_lc) ! return 1; return 0; } *************** ia64_encode_section_info (decl) *** 6376,6382 **** /* This decl is marked as being in small data/bss but it shouldn't be; one likely explanation for this is that the decl has been moved into a different section from the one it was in when ! ENCODE_SECTION_INFO was first called. Remove the '@'.*/ else if (symbol_str[0] == SDATA_NAME_FLAG_CHAR) { XSTR (XEXP (DECL_RTL (decl), 0), 0) --- 6944,6950 ---- /* This decl is marked as being in small data/bss but it shouldn't be; one likely explanation for this is that the decl has been moved into a different section from the one it was in when ! ENCODE_SECTION_INFO was first called. Remove the '@'. */ else if (symbol_str[0] == SDATA_NAME_FLAG_CHAR) { XSTR (XEXP (DECL_RTL (decl), 0), 0) *************** process_set (asm_out_file, pat) *** 6440,6446 **** return 1; } ! /* Look for SP = .... */ if (GET_CODE (dest) == REG && REGNO (dest) == STACK_POINTER_REGNUM) { if (GET_CODE (src) == PLUS) --- 7008,7014 ---- return 1; } ! /* Look for SP = .... */ if (GET_CODE (dest) == REG && REGNO (dest) == STACK_POINTER_REGNUM) { if (GET_CODE (src) == PLUS) *************** ia64_init_builtins () *** 6742,6748 **** endlink)); #define def_builtin(name, type, code) \ ! builtin_function ((name), (type), (code), BUILT_IN_MD, NULL_PTR) def_builtin ("__sync_val_compare_and_swap_si", si_ftype_psi_si_si, IA64_BUILTIN_VAL_COMPARE_AND_SWAP_SI); --- 7310,7316 ---- endlink)); #define def_builtin(name, type, code) \ ! builtin_function ((name), (type), (code), BUILT_IN_MD, NULL) def_builtin ("__sync_val_compare_and_swap_si", si_ftype_psi_si_si, IA64_BUILTIN_VAL_COMPARE_AND_SWAP_SI); *************** ia64_expand_fetch_and_op (binoptab, mode *** 6900,6906 **** insn = gen_cmpxchg_acq_di (tmp, mem, tmp, ccv); emit_insn (insn); ! emit_cmp_and_jump_insns (tmp, ret, NE, 0, mode, 1, 0, label); return ret; } --- 7468,7474 ---- insn = gen_cmpxchg_acq_di (tmp, mem, tmp, ccv); emit_insn (insn); ! emit_cmp_and_jump_insns (tmp, ret, NE, 0, mode, 1, label); return ret; } *************** ia64_expand_op_and_fetch (binoptab, mode *** 6965,6971 **** insn = gen_cmpxchg_acq_di (tmp, mem, ret, ccv); emit_insn (insn); ! emit_cmp_and_jump_insns (tmp, old, NE, 0, mode, 1, 0, label); return ret; } --- 7533,7539 ---- insn = gen_cmpxchg_acq_di (tmp, mem, ret, ccv); emit_insn (insn); ! emit_cmp_and_jump_insns (tmp, old, NE, 0, mode, 1, label); return ret; } *************** ia64_expand_builtin (exp, target, subtar *** 7228,7230 **** --- 7796,7822 ---- return NULL_RTX; } + + /* For the HP-UX IA64 aggregate parameters are passed stored in the + most significant bits of the stack slot. */ + + enum direction + ia64_hpux_function_arg_padding (mode, type) + enum machine_mode mode; + tree type; + { + /* Exception to normal case for structures/unions/etc. */ + + if (type && AGGREGATE_TYPE_P (type) + && int_size_in_bytes (type) < UNITS_PER_WORD) + return upward; + + /* This is the standard FUNCTION_ARG_PADDING with !BYTES_BIG_ENDIAN + hardwired to be true. */ + + return((mode == BLKmode + ? (type && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST + && int_size_in_bytes (type) < (PARM_BOUNDARY / BITS_PER_UNIT)) + : GET_MODE_BITSIZE (mode) < PARM_BOUNDARY) + ? downward : upward); + } diff -Nrc3pad gcc-3.0.4/gcc/config/ia64/ia64.h gcc-3.1/gcc/config/ia64/ia64.h *** gcc-3.0.4/gcc/config/ia64/ia64.h Sat Nov 3 20:28:24 2001 --- gcc-3.1/gcc/config/ia64/ia64.h Thu Apr 18 20:31:55 2002 *************** *** 1,5 **** /* Definitions of target machine GNU compiler. IA-64 version. ! Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by James E. Wilson and David Mosberger . --- 1,5 ---- /* Definitions of target machine GNU compiler. IA-64 version. ! Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by James E. Wilson and David Mosberger . *************** Boston, MA 02111-1307, USA. */ *** 31,42 **** /* Run-time target specifications */ ! #define CPP_CPU_SPEC "\ ! -Acpu=ia64 -Amachine=ia64 \ ! %{!ansi:%{!std=c*:%{!std=i*:-Dia64}}} -D__ia64 -D__ia64__" #define CC1_SPEC "%(cc1_cpu) " /* This declaration should be present. */ extern int target_flags; --- 31,49 ---- /* Run-time target specifications */ ! #define EXTRA_SPECS \ ! { "cpp_cpu", CPP_CPU_SPEC }, \ ! { "asm_extra", ASM_EXTRA_SPEC }, ! ! #define CPP_CPU_SPEC " \ ! -Acpu=ia64 -Amachine=ia64 -D__ia64 -D__ia64__ %{!milp32:-D_LP64 -D__LP64__} \ ! -D__ELF__" #define CC1_SPEC "%(cc1_cpu) " + #define ASM_EXTRA_SPEC "" + + /* This declaration should be present. */ extern int target_flags; *************** extern int target_flags; *** 53,59 **** #define MASK_VOL_ASM_STOP 0x00000010 /* Emit stop bits for vol ext asm. */ ! /* 0x00000020 is available. */ #define MASK_B_STEP 0x00000040 /* Emit code for Itanium B step. */ --- 60,66 ---- #define MASK_VOL_ASM_STOP 0x00000010 /* Emit stop bits for vol ext asm. */ ! #define MASK_ILP32 0x00000020 /* Generate ILP32 code. */ #define MASK_B_STEP 0x00000040 /* Emit code for Itanium B step. */ *************** extern int target_flags; *** 81,86 **** --- 88,95 ---- #define TARGET_VOL_ASM_STOP (target_flags & MASK_VOL_ASM_STOP) + #define TARGET_ILP32 (target_flags & MASK_ILP32) + #define TARGET_B_STEP (target_flags & MASK_B_STEP) #define TARGET_REG_NAMES (target_flags & MASK_REG_NAMES) *************** extern int target_flags; *** 144,149 **** --- 153,159 ---- N_("Enable Dwarf 2 line debug info via GNU as")}, \ { "no-dwarf2-asm", -MASK_DWARF2_ASM, \ N_("Disable Dwarf 2 line debug info via GNU as")}, \ + SUBTARGET_SWITCHES \ { "", TARGET_DEFAULT | TARGET_CPU_DEFAULT, \ NULL } \ } *************** extern int target_flags; *** 158,163 **** --- 168,177 ---- #define TARGET_CPU_DEFAULT 0 #endif + #ifndef SUBTARGET_SWITCHES + #define SUBTARGET_SWITCHES + #endif + /* This macro is similar to `TARGET_SWITCHES' but defines names of command options that have values. Its definition is an initializer with a subgrouping for each command option. */ *************** extern const char *ia64_fixed_range_stri *** 166,172 **** #define TARGET_OPTIONS \ { \ { "fixed-range=", &ia64_fixed_range_string, \ ! N_("Specify range of registers to make fixed.")}, \ } /* Sometimes certain combinations of command options do not make sense on a --- 180,186 ---- #define TARGET_OPTIONS \ { \ { "fixed-range=", &ia64_fixed_range_string, \ ! N_("Specify range of registers to make fixed")}, \ } /* Sometimes certain combinations of command options do not make sense on a *************** extern const char *ia64_fixed_range_stri *** 196,222 **** defines in other tm.h files. */ #define CPP_SPEC \ "%{mcpu=itanium:-D__itanium__} %{mbig-endian:-D__BIG_ENDIAN__} \ ! %{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} \ -D__LONG_MAX__=9223372036854775807L" ! /* If this macro is defined, the preprocessor will not define the builtin macro ! `__SIZE_TYPE__'. The macro `__SIZE_TYPE__' must then be defined by ! `CPP_SPEC' instead. ! ! This should be defined if `SIZE_TYPE' depends on target dependent flags ! which are not accessible to the preprocessor. Otherwise, it should not be ! defined. */ ! /* ??? Needs to be defined for P64 code. */ /* #define NO_BUILTIN_SIZE_TYPE */ ! /* If this macro is defined, the preprocessor will not define the builtin macro ! `__PTRDIFF_TYPE__'. The macro `__PTRDIFF_TYPE__' must then be defined by ! `CPP_SPEC' instead. ! ! This should be defined if `PTRDIFF_TYPE' depends on target dependent flags ! which are not accessible to the preprocessor. Otherwise, it should not be ! defined. */ ! /* ??? Needs to be defined for P64 code. */ /* #define NO_BUILTIN_PTRDIFF_TYPE */ /* A C string constant that tells the GNU CC driver program options to pass to --- 210,222 ---- defines in other tm.h files. */ #define CPP_SPEC \ "%{mcpu=itanium:-D__itanium__} %{mbig-endian:-D__BIG_ENDIAN__} \ ! %(cpp_cpu) \ -D__LONG_MAX__=9223372036854775807L" ! /* This is always "long" so it doesn't "change" in ILP32 vs. LP64. */ /* #define NO_BUILTIN_SIZE_TYPE */ ! /* This is always "long" so it doesn't "change" in ILP32 vs. LP64. */ /* #define NO_BUILTIN_PTRDIFF_TYPE */ /* A C string constant that tells the GNU CC driver program options to pass to *************** extern const char *ia64_fixed_range_stri *** 239,247 **** #define BITS_BIG_ENDIAN 0 - /* Define this macro to have the value 1 if the most significant byte in a word - has the lowest number. This macro need not be a constant. */ - #define BYTES_BIG_ENDIAN (TARGET_BIG_ENDIAN != 0) /* Define this macro to have the value 1 if, in a multiword object, the most --- 239,244 ---- *************** extern const char *ia64_fixed_range_stri *** 249,287 **** #define WORDS_BIG_ENDIAN (TARGET_BIG_ENDIAN != 0) - /* Define this macro if WORDS_BIG_ENDIAN is not constant. This must be a - constant value with the same meaning as WORDS_BIG_ENDIAN, which will be used - only when compiling libgcc2.c. Typically the value will be set based on - preprocessor defines. */ #if defined(__BIG_ENDIAN__) #define LIBGCC2_WORDS_BIG_ENDIAN 1 #else #define LIBGCC2_WORDS_BIG_ENDIAN 0 #endif - /* Define this macro to be the number of bits in an addressable storage unit - (byte); normally 8. */ #define BITS_PER_UNIT 8 - /* Number of bits in a word; normally 32. */ #define BITS_PER_WORD 64 - /* Number of storage units in a word; normally 4. */ #define UNITS_PER_WORD 8 ! /* Width of a pointer, in bits. You must specify a value no wider than the ! width of `Pmode'. If it is not equal to the width of `Pmode', you must ! define `POINTERS_EXTEND_UNSIGNED'. */ ! /* ??? Implement optional 32 bit pointer size later? */ ! #define POINTER_SIZE 64 ! /* A C expression whose value is nonzero if pointers that need to be extended ! from being `POINTER_SIZE' bits wide to `Pmode' are sign-extended and zero if ! they are zero-extended. You need not define this macro if the `POINTER_SIZE' is equal to the width of `Pmode'. */ ! /* ??? May need this for 32 bit pointers. */ /* #define POINTERS_EXTEND_UNSIGNED */ /* A macro to update MODE and UNSIGNEDP when an object whose type is TYPE and --- 246,272 ---- #define WORDS_BIG_ENDIAN (TARGET_BIG_ENDIAN != 0) #if defined(__BIG_ENDIAN__) #define LIBGCC2_WORDS_BIG_ENDIAN 1 #else #define LIBGCC2_WORDS_BIG_ENDIAN 0 #endif #define BITS_PER_UNIT 8 #define BITS_PER_WORD 64 #define UNITS_PER_WORD 8 ! #define POINTER_SIZE (TARGET_ILP32 ? 32 : 64) ! /* A C expression whose value is zero if pointers that need to be extended ! from being `POINTER_SIZE' bits wide to `Pmode' are sign-extended and one if ! they are zero-extended and negative one if there is an ptr_extend operation. You need not define this macro if the `POINTER_SIZE' is equal to the width of `Pmode'. */ ! /* Need this for 32 bit pointers, see hpux.h for setting it. */ /* #define POINTERS_EXTEND_UNSIGNED */ /* A macro to update MODE and UNSIGNEDP when an object whose type is TYPE and *************** do \ *** 296,317 **** } \ while (0) - /* Define this macro if the promotion described by `PROMOTE_MODE' should also - be done for outgoing function arguments. */ /* ??? ABI doesn't allow us to define this. */ /* #define PROMOTE_FUNCTION_ARGS */ - /* Define this macro if the promotion described by `PROMOTE_MODE' should also - be done for the return value of functions. - - If this macro is defined, `FUNCTION_VALUE' must perform the same promotions - done by `PROMOTE_MODE'. */ /* ??? ABI doesn't allow us to define this. */ /* #define PROMOTE_FUNCTION_RETURN */ - /* Normal alignment required for function parameters on the stack, in bits. - All stack parameters receive at least this much alignment regardless of data - type. On most machines, this is the same as the size of an integer. */ #define PARM_BOUNDARY 64 /* Define this macro if you wish to preserve a certain alignment for the stack --- 281,292 ---- *************** while (0) *** 325,335 **** #define IA64_STACK_ALIGN(LOC) (((LOC) + 15) & ~15) #endif - /* Alignment required for a function entry point, in bits. */ #define FUNCTION_BOUNDARY 128 - /* Biggest alignment that any data type can require on this machine, - in bits. */ /* Optional x86 80-bit float, quad-precision 128-bit float, and quad-word 128 bit integers all require 128 bit alignment. */ #define BIGGEST_ALIGNMENT 128 --- 300,307 ---- *************** while (0) *** 353,361 **** (TREE_CODE (EXP) == STRING_CST \ && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN)) - /* Define this macro to be the value 1 if instructions will fail to work if - given data not on the nominal alignment. If instructions will merely go - slower in that case, define this macro as 0. */ #define STRICT_ALIGNMENT 1 /* Define this if you wish to imitate the way many other C compilers handle --- 325,330 ---- *************** while (0) *** 376,453 **** /* A code distinguishing the floating point format of the target machine. */ #define TARGET_FLOAT_FORMAT IEEE_FLOAT_FORMAT - /* GNU CC supports two ways of implementing C++ vtables: traditional or with - so-called "thunks". The flag `-fvtable-thunk' chooses between them. Define - this macro to be a C expression for the default value of that flag. If - `DEFAULT_VTABLE_THUNKS' is 0, GNU CC uses the traditional implementation by - default. The "thunk" implementation is more efficient (especially if you - have provided an implementation of `ASM_OUTPUT_MI_THUNK', but is not binary - compatible with code compiled using the traditional implementation. If you - are writing a new ports, define `DEFAULT_VTABLE_THUNKS' to 1. - - If you do not define this macro, the default for `-fvtable-thunk' is 0. */ - #define DEFAULT_VTABLE_THUNKS 1 - /* By default, the C++ compiler will use function addresses in the vtable entries. Setting this non-zero tells the compiler to use function descriptors instead. The value of this macro says how ! many words wide the descriptor is (normally 2). It is assumed that the address of a function descriptor may be treated as a pointer to a function. */ #define TARGET_VTABLE_USES_DESCRIPTORS 2 /* Layout of Source Language Data Types */ - /* A C expression for the size in bits of the type `int' on the target machine. - If you don't define this, the default is one word. */ #define INT_TYPE_SIZE 32 - /* A C expression for the size in bits of the type `short' on the target - machine. If you don't define this, the default is half a word. (If this - would be less than one storage unit, it is rounded up to one unit.) */ #define SHORT_TYPE_SIZE 16 ! /* A C expression for the size in bits of the type `long' on the target ! machine. If you don't define this, the default is one word. */ ! /* ??? Should be 32 for ILP32 code. */ ! #define LONG_TYPE_SIZE 64 ! /* Maximum number for the size in bits of the type `long' on the target ! machine. If this is undefined, the default is `LONG_TYPE_SIZE'. Otherwise, ! it is the constant value that is the largest value that `LONG_TYPE_SIZE' can ! have at run-time. This is used in `cpp'. */ ! /* ??? Should be 64 for ILP32 code. */ ! /* #define MAX_LONG_TYPE_SIZE */ - /* A C expression for the size in bits of the type `long long' on the target - machine. If you don't define this, the default is two words. If you want - to support GNU Ada on your machine, the value of macro must be at least 64. */ #define LONG_LONG_TYPE_SIZE 64 - /* A C expression for the size in bits of the type `char' on the target - machine. If you don't define this, the default is one quarter of a word. - (If this would be less than one storage unit, it is rounded up to one unit.) */ #define CHAR_TYPE_SIZE 8 - /* A C expression for the size in bits of the type `float' on the target - machine. If you don't define this, the default is one word. */ #define FLOAT_TYPE_SIZE 32 - /* A C expression for the size in bits of the type `double' on the target - machine. If you don't define this, the default is two words. */ #define DOUBLE_TYPE_SIZE 64 - /* A C expression for the size in bits of the type `long double' on the target - machine. If you don't define this, the default is two words. */ #define LONG_DOUBLE_TYPE_SIZE 128 /* Tell real.c that this is the 80-bit Intel extended float format packaged in a 128-bit entity. */ - #define INTEL_EXTENDED_IEEE_FORMAT ! /* An expression whose value is 1 or 0, according to whether the type `char' ! should be signed or unsigned by default. The user can always override this ! default with the options `-fsigned-char' and `-funsigned-char'. */ #define DEFAULT_SIGNED_CHAR 1 /* A C expression for a string describing the name of the data type to use for --- 345,383 ---- /* A code distinguishing the floating point format of the target machine. */ #define TARGET_FLOAT_FORMAT IEEE_FLOAT_FORMAT /* By default, the C++ compiler will use function addresses in the vtable entries. Setting this non-zero tells the compiler to use function descriptors instead. The value of this macro says how ! many words wide the descriptor is (normally 2). It is assumed that the address of a function descriptor may be treated as a pointer to a function. */ #define TARGET_VTABLE_USES_DESCRIPTORS 2 /* Layout of Source Language Data Types */ #define INT_TYPE_SIZE 32 #define SHORT_TYPE_SIZE 16 ! #define LONG_TYPE_SIZE (TARGET_ILP32 ? 32 : 64) ! #define MAX_LONG_TYPE_SIZE 64 #define LONG_LONG_TYPE_SIZE 64 #define CHAR_TYPE_SIZE 8 #define FLOAT_TYPE_SIZE 32 #define DOUBLE_TYPE_SIZE 64 #define LONG_DOUBLE_TYPE_SIZE 128 /* Tell real.c that this is the 80-bit Intel extended float format packaged in a 128-bit entity. */ ! #define INTEL_EXTENDED_IEEE_FORMAT 1 ! #define DEFAULT_SIGNED_CHAR 1 /* A C expression for a string describing the name of the data type to use for *************** while (0) *** 472,503 **** This is used in `cpp', which cannot make use of `WCHAR_TYPE'. */ /* #define WCHAR_TYPE_SIZE */ - /* Maximum number for the size in bits of the data type for wide characters. - If this is undefined, the default is `WCHAR_TYPE_SIZE'. Otherwise, it is - the constant value that is the largest value that `WCHAR_TYPE_SIZE' can have - at run-time. This is used in `cpp'. */ - /* #define MAX_WCHAR_TYPE_SIZE */ - - /* A C constant expression for the integer value for escape sequence - `\a'. */ - #define TARGET_BELL 0x7 - - /* C constant expressions for the integer values for escape sequences - `\b', `\t' and `\n'. */ - #define TARGET_BS 0x8 - #define TARGET_TAB 0x9 - #define TARGET_NEWLINE 0xa - - /* C constant expressions for the integer values for escape sequences - `\v', `\f' and `\r'. */ - #define TARGET_VT 0xb - #define TARGET_FF 0xc - #define TARGET_CR 0xd - /* Register Basics */ ! /* Number of hardware registers known to the compiler. We have 128 general registers, 128 floating point registers, 64 predicate registers, 8 branch registers, one frame pointer, and several "application" registers. */ --- 402,411 ---- This is used in `cpp', which cannot make use of `WCHAR_TYPE'. */ /* #define WCHAR_TYPE_SIZE */ /* Register Basics */ ! /* Number of hardware registers known to the compiler. We have 128 general registers, 128 floating point registers, 64 predicate registers, 8 branch registers, one frame pointer, and several "application" registers. */ *************** while (0) *** 559,565 **** f0: constant 0.0 f1: constant 1.0 p0: constant true ! fp: eliminable frame pointer */ /* The last 16 stacked regs are reserved for the 8 input and 8 output registers. */ --- 467,473 ---- f0: constant 0.0 f1: constant 1.0 p0: constant true ! fp: eliminable frame pointer */ /* The last 16 stacked regs are reserved for the 8 input and 8 output registers. */ *************** while (0) *** 629,634 **** --- 537,581 ---- 1, 1, 1, 1, 1, 0, 1 \ } + /* Like `CALL_USED_REGISTERS' but used to overcome a historical + problem which makes CALL_USED_REGISTERS *always* include + all the FIXED_REGISTERS. Until this problem has been + resolved this macro can be used to overcome this situation. + In particular, block_propagate() requires this list + be acurate, or we can remove registers which should be live. + This macro is used in regs_invalidated_by_call. */ + + #define CALL_REALLY_USED_REGISTERS \ + { /* General registers. */ \ + 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, \ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, \ + /* Floating-point registers. */ \ + 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ + /* Predicate registers. */ \ + 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + /* Branch registers. */ \ + 1, 0, 0, 0, 0, 0, 1, 1, \ + /*FP RA CCV UNAT PFS LC EC */ \ + 0, 0, 1, 0, 1, 0, 0 \ + } + + /* Define this macro if the target machine has register windows. This C expression returns the register number as seen by the called function corresponding to the register number OUT as seen by the calling function. *************** while (0) *** 797,803 **** ((REGNO) == PR_REG (0) && (MODE) == DImode ? 64 \ : PR_REGNO_P (REGNO) && (MODE) == BImode ? 2 \ : PR_REGNO_P (REGNO) && (MODE) == CCImode ? 1 \ ! : FR_REGNO_P (REGNO) && (MODE) == TFmode ? 1 \ : (GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD) /* A C expression that is nonzero if it is permissible to store a value of mode --- 744,750 ---- ((REGNO) == PR_REG (0) && (MODE) == DImode ? 64 \ : PR_REGNO_P (REGNO) && (MODE) == BImode ? 2 \ : PR_REGNO_P (REGNO) && (MODE) == CCImode ? 1 \ ! : FR_REGNO_P (REGNO) && (MODE) == TFmode && INTEL_EXTENDED_IEEE_FORMAT ? 1 \ : (GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD) /* A C expression that is nonzero if it is permissible to store a value of mode *************** while (0) *** 806,812 **** #define HARD_REGNO_MODE_OK(REGNO, MODE) \ (FR_REGNO_P (REGNO) ? \ ! GET_MODE_CLASS (MODE) != MODE_CC && (MODE) != TImode && (MODE) != BImode \ : PR_REGNO_P (REGNO) ? \ (MODE) == BImode || GET_MODE_CLASS (MODE) == MODE_CC \ : GR_REGNO_P (REGNO) ? (MODE) != CCImode && (MODE) != TFmode \ --- 753,762 ---- #define HARD_REGNO_MODE_OK(REGNO, MODE) \ (FR_REGNO_P (REGNO) ? \ ! GET_MODE_CLASS (MODE) != MODE_CC && \ ! (MODE) != TImode && \ ! (MODE) != BImode && \ ! ((MODE) != TFmode || INTEL_EXTENDED_IEEE_FORMAT) \ : PR_REGNO_P (REGNO) ? \ (MODE) == BImode || GET_MODE_CLASS (MODE) == MODE_CC \ : GR_REGNO_P (REGNO) ? (MODE) != CCImode && (MODE) != TFmode \ *************** enum reg_class *** 861,872 **** NO_REGS, PR_REGS, BR_REGS, ADDL_REGS, GR_REGS, FR_REGS, GR_AND_FR_REGS, - AR_M_REGS, - AR_I_REGS, ALL_REGS, LIM_REG_CLASSES }; --- 811,823 ---- NO_REGS, PR_REGS, BR_REGS, + AR_M_REGS, + AR_I_REGS, ADDL_REGS, GR_REGS, FR_REGS, + GR_AND_BR_REGS, GR_AND_FR_REGS, ALL_REGS, LIM_REG_CLASSES }; *************** enum reg_class *** 879,886 **** /* An initializer containing the names of the register classes as C string constants. These names are used in writing some of the debugging dumps. */ #define REG_CLASS_NAMES \ ! { "NO_REGS", "PR_REGS", "BR_REGS", "ADDL_REGS", "GR_REGS", "FR_REGS", \ ! "GR_AND_FR_REGS", "AR_M_REGS", "AR_I_REGS", "ALL_REGS" } /* An initializer containing the contents of the register classes, as integers which are bit masks. The Nth integer specifies the contents of class N. --- 830,838 ---- /* An initializer containing the names of the register classes as C string constants. These names are used in writing some of the debugging dumps. */ #define REG_CLASS_NAMES \ ! { "NO_REGS", "PR_REGS", "BR_REGS", "AR_M_REGS", "AR_I_REGS", \ ! "ADDL_REGS", "GR_REGS", "FR_REGS", \ ! "GR_AND_BR_REGS", "GR_AND_FR_REGS", "ALL_REGS" } /* An initializer containing the contents of the register classes, as integers which are bit masks. The Nth integer specifies the contents of class N. *************** enum reg_class *** 900,905 **** --- 852,865 ---- { 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ 0x00000000, 0x00000000, 0x00FF }, \ + /* AR_M_REGS. */ \ + { 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ + 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ + 0x00000000, 0x00000000, 0x0C00 }, \ + /* AR_I_REGS. */ \ + { 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ + 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ + 0x00000000, 0x00000000, 0x7000 }, \ /* ADDL_REGS. */ \ { 0x0000000F, 0x00000000, 0x00000000, 0x00000000, \ 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ *************** enum reg_class *** 912,929 **** { 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, \ 0x00000000, 0x00000000, 0x0000 }, \ /* GR_AND_FR_REGS. */ \ { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, \ 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, \ 0x00000000, 0x00000000, 0x0300 }, \ - /* AR_M_REGS. */ \ - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ - 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ - 0x00000000, 0x00000000, 0x0C00 }, \ - /* AR_I_REGS. */ \ - { 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ - 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ - 0x00000000, 0x00000000, 0x7000 }, \ /* ALL_REGS. */ \ { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, \ 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, \ --- 872,885 ---- { 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, \ 0x00000000, 0x00000000, 0x0000 }, \ + /* GR_AND_BR_REGS. */ \ + { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, \ + 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ + 0x00000000, 0x00000000, 0x03FF }, \ /* GR_AND_FR_REGS. */ \ { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, \ 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, \ 0x00000000, 0x00000000, 0x0300 }, \ /* ALL_REGS. */ \ { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, \ 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, \ *************** enum reg_class *** 998,1004 **** #define PREFERRED_RELOAD_CLASS(X, CLASS) \ (CLASS == FR_REGS && GET_CODE (X) == MEM && MEM_VOLATILE_P (X) ? NO_REGS \ : CLASS == FR_REGS && GET_CODE (X) == CONST_DOUBLE ? NO_REGS \ ! : GET_RTX_CLASS (GET_CODE (X)) != 'o' && CLASS > GR_AND_FR_REGS ? NO_REGS \ : CLASS) /* You should define this macro to indicate to the reload phase that it may --- 954,961 ---- #define PREFERRED_RELOAD_CLASS(X, CLASS) \ (CLASS == FR_REGS && GET_CODE (X) == MEM && MEM_VOLATILE_P (X) ? NO_REGS \ : CLASS == FR_REGS && GET_CODE (X) == CONST_DOUBLE ? NO_REGS \ ! : GET_RTX_CLASS (GET_CODE (X)) != 'o' \ ! && (CLASS == AR_M_REGS || CLASS == AR_I_REGS) ? NO_REGS \ : CLASS) /* You should define this macro to indicate to the reload phase that it may *************** enum reg_class *** 1202,1207 **** --- 1159,1172 ---- in it. */ #define ARG_POINTER_REGNUM R_GR(0) + /* Due to the way varargs and argument spilling happens, the argument + pointer is not 16-byte aligned like the stack pointer. */ + #define INIT_EXPANDERS \ + do { \ + if (cfun && cfun->emit->regno_pointer_align) \ + REGNO_POINTER_ALIGN (ARG_POINTER_REGNUM) = 64; \ + } while (0) + /* The register number for the return address register. For IA-64, this is not actually a pointer as the name suggests, but that's a name that gen_rtx_REG already takes care to keep unique. We modify *************** enum reg_class *** 1309,1315 **** pointer is passed in whatever way is appropriate for passing a pointer to that type. */ ! #define FUNCTION_ARG_PASS_BY_REFERENCE(CUM, MODE, TYPE, NAMED) 0 /* A C type for declaring a variable that is used as the first argument of `FUNCTION_ARG' and other related values. For some target machines, the type --- 1274,1281 ---- pointer is passed in whatever way is appropriate for passing a pointer to that type. */ ! #define FUNCTION_ARG_PASS_BY_REFERENCE(CUM, MODE, TYPE, NAMED) \ ! ia64_function_arg_pass_by_reference (&CUM, MODE, TYPE, NAMED) /* A C type for declaring a variable that is used as the first argument of `FUNCTION_ARG' and other related values. For some target machines, the type *************** enum reg_class *** 1318,1323 **** --- 1284,1290 ---- typedef struct ia64_args { int words; /* # words of arguments so far */ + int int_regs; /* # GR registers used so far */ int fp_regs; /* # FR registers used so far */ int prototype; /* whether function prototyped */ } CUMULATIVE_ARGS; *************** typedef struct ia64_args *** 1328,1333 **** --- 1295,1301 ---- #define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT) \ do { \ (CUM).words = 0; \ + (CUM).int_regs = 0; \ (CUM).fp_regs = 0; \ (CUM).prototype = ((FNTYPE) && TYPE_ARG_TYPES (FNTYPE)) || (LIBNAME); \ } while (0) *************** do { \ *** 1341,1346 **** --- 1309,1315 ---- #define INIT_CUMULATIVE_INCOMING_ARGS(CUM, FNTYPE, LIBNAME) \ do { \ (CUM).words = 0; \ + (CUM).int_regs = 0; \ (CUM).fp_regs = 0; \ (CUM).prototype = 1; \ } while (0) *************** do { \ *** 1396,1403 **** #define LIBCALL_VALUE(MODE) \ gen_rtx_REG (MODE, \ ! ((GET_MODE_CLASS (MODE) == MODE_FLOAT \ ! || GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT) \ ? FR_RET_FIRST : GR_RET_FIRST)) /* A C expression that is nonzero if REGNO is the number of a hard register in --- 1365,1373 ---- #define LIBCALL_VALUE(MODE) \ gen_rtx_REG (MODE, \ ! (((GET_MODE_CLASS (MODE) == MODE_FLOAT \ ! || GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT) && \ ! ((MODE) != TFmode || INTEL_EXTENDED_IEEE_FORMAT)) \ ? FR_RET_FIRST : GR_RET_FIRST)) /* A C expression that is nonzero if REGNO is the number of a hard register in *************** do { \ *** 1405,1411 **** #define FUNCTION_VALUE_REGNO_P(REGNO) \ (((REGNO) >= GR_RET_FIRST && (REGNO) <= GR_RET_LAST) \ ! || ((REGNO) >= FR_RET_FIRST && (REGNO) <= FR_RET_LAST)) /* How Large Values are Returned */ --- 1375,1381 ---- #define FUNCTION_VALUE_REGNO_P(REGNO) \ (((REGNO) >= GR_RET_FIRST && (REGNO) <= GR_RET_LAST) \ ! || ((REGNO) >= FR_RET_FIRST && (REGNO) <= FR_RET_LAST)) /* How Large Values are Returned */ *************** do { \ *** 1442,1457 **** /* Function Entry and Exit */ - /* A C compound statement that outputs the assembler code for entry to a - function. */ - - #define FUNCTION_PROLOGUE(FILE, SIZE) \ - ia64_function_prologue (FILE, SIZE) - - /* This macro notes the end of the prologue. */ - - #define FUNCTION_END_PROLOGUE(FILE) ia64_output_end_prologue (FILE) - /* Define this macro as a C expression that is nonzero if the return instruction or the function epilogue ignores the value of the stack pointer; in other words, if it is safe to delete an instruction to adjust the stack --- 1412,1417 ---- *************** do { \ *** 1464,1474 **** #define EPILOGUE_USES(REGNO) ia64_epilogue_uses (REGNO) ! /* A C compound statement that outputs the assembler code for exit from a ! function. */ ! #define FUNCTION_EPILOGUE(FILE, SIZE) \ ! ia64_function_epilogue (FILE, SIZE) /* Output at beginning of assembler file. */ --- 1424,1432 ---- #define EPILOGUE_USES(REGNO) ia64_epilogue_uses (REGNO) ! /* Nonzero for registers used by the exception handling mechanism. */ ! #define EH_USES(REGNO) ia64_eh_uses (REGNO) /* Output at beginning of assembler file. */ *************** do { \ *** 1481,1493 **** #define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \ do { \ if (CONST_OK_FOR_I (DELTA)) \ ! fprintf (FILE, "\tadds r32 = %d, r32\n", (DELTA)); \ else \ { \ if (CONST_OK_FOR_J (DELTA)) \ ! fprintf (FILE, "\taddl r2 = %d, r0\n", (DELTA)); \ else \ ! fprintf (FILE, "\tmovl r2 = %d\n", (DELTA)); \ fprintf (FILE, "\t;;\n"); \ fprintf (FILE, "\tadd r32 = r2, r32\n"); \ } \ --- 1439,1463 ---- #define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \ do { \ if (CONST_OK_FOR_I (DELTA)) \ ! { \ ! fprintf (FILE, "\tadds r32 = "); \ ! fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, (DELTA)); \ ! fprintf (FILE, ", r32\n"); \ ! } \ else \ { \ if (CONST_OK_FOR_J (DELTA)) \ ! { \ ! fprintf (FILE, "\taddl r2 = "); \ ! fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, (DELTA)); \ ! fprintf (FILE, ", r0\n"); \ ! } \ else \ ! { \ ! fprintf (FILE, "\tmovl r2 = "); \ ! fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, (DELTA)); \ ! fprintf (FILE, "\n"); \ ! } \ fprintf (FILE, "\t;;\n"); \ fprintf (FILE, "\tadd r32 = r2, r32\n"); \ } \ *************** do { \ *** 1513,1634 **** /* A C statement or compound statement to output to FILE some assembler code to call the profiling subroutine `mcount'. */ ! /* ??? Unclear if this will actually work. No way to test this currently. */ ! ! #define FUNCTION_PROFILER(FILE, LABELNO) \ do { \ char buf[20]; \ ASM_GENERATE_INTERNAL_LABEL (buf, "LP", LABELNO); \ ! fputs ("\taddl r16 = @ltoff(", FILE); \ assemble_name (FILE, buf); \ ! fputs ("), gp\n", FILE); \ ! fputs ("\tmov r17 = r1;;\n", FILE); \ ! fputs ("\tld8 out0 = [r16]\n", FILE); \ ! fputs ("\tmov r18 = b0\n", FILE); \ ! fputs ("\tbr.call.sptk.many rp = mcount;;\n", FILE); \ ! fputs ("\tmov b0 = r18\n", FILE); \ ! fputs ("\tmov r1 = r17;;\n", FILE); \ ! } while (0) ! ! /* A C statement or compound statement to output to FILE some assembler code to ! initialize basic-block profiling for the current object module. */ ! ! /* ??? Unclear if this will actually work. No way to test this currently. */ ! ! #define FUNCTION_BLOCK_PROFILER(FILE, LABELNO) \ ! do { \ ! int labelno = LABELNO; \ ! switch (profile_block_flag) \ ! { \ ! case 2: \ ! fputs ("\taddl r16 = @ltoff(LPBX0), gp\n", FILE); \ ! fprintf (FILE, "\tmov out1 = %d;;\n", labelno); \ ! fputs ("\tld8 out0 = [r16]\n", FILE); \ ! fputs ("\tmov r17 = r1\n", FILE); \ ! fputs ("\tmov r18 = b0\n", FILE); \ ! fputs ("\tbr.call.sptk.many rp = __bb_init_trace_func;;\n", FILE);\ ! fputs ("\tmov r1 = r17\n", FILE); \ ! fputs ("\tmov b0 = r18;;\n", FILE); \ ! break; \ ! default: \ ! fputs ("\taddl r16 = @ltoff(LPBX0), gp;;\n", FILE); \ ! fputs ("\tld8 out0 = [r16];;\n", FILE); \ ! fputs ("\tld8 r17 = [out0];;\n", FILE); \ ! fputs ("\tcmp.eq p6, p0 = r0, r17;;\n", FILE); \ ! fputs ("(p6)\tmov r16 = r1\n", FILE); \ ! fputs ("(p6)\tmov r17 = b0\n", FILE); \ ! fputs ("(p6)\tbr.call.sptk.many rp = __bb_init_func;;\n", FILE); \ ! fputs ("(p6)\tmov r1 = r16\n", FILE); \ ! fputs ("(p6)\tmov b0 = r17;;\n", FILE); \ ! break; \ ! } \ } while (0) - - /* A C statement or compound statement to output to FILE some assembler code to - increment the count associated with the basic block number BLOCKNO. */ - - /* ??? This can't work unless we mark some registers as fixed, so that we - can use them as temporaries in this macro. We need two registers for -a - profiling and 4 registers for -ax profiling. */ - - #define BLOCK_PROFILER(FILE, BLOCKNO) \ - do { \ - int blockn = BLOCKNO; \ - switch (profile_block_flag) \ - { \ - case 2: \ - fputs ("\taddl r2 = @ltoff(__bb), gp\n", FILE); \ - fputs ("\taddl r3 = @ltoff(LPBX0), gp;;\n", FILE); \ - fprintf (FILE, "\tmov r9 = %d\n", blockn); \ - fputs ("\tld8 r2 = [r2]\n", FILE); \ - fputs ("\tld8 r3 = [r3];;\n", FILE); \ - fputs ("\tadd r8 = 8, r2\n", FILE); \ - fputs ("\tst8 [r2] = r9;;\n", FILE); \ - fputs ("\tst8 [r8] = r3\n", FILE); \ - fputs ("\tbr.call.sptk.many rp = __bb_trace_func\n", FILE); \ - break; \ - \ - default: \ - fputs ("\taddl r2 = @ltoff(LPBX2), gp;;\n", FILE); \ - fputs ("\tld8 r2 = [r2];;\n", FILE); \ - fprintf (FILE, "\taddl r2 = %d, r2;;\n", 8 * blockn); \ - fputs ("\tld8 r3 = [r2];;\n", FILE); \ - fputs ("\tadd r3 = 1, r3;;\n", FILE); \ - fputs ("\tst8 [r2] = r3;;\n", FILE); \ - break; \ - } \ - } while(0) - - /* A C statement or compound statement to output to FILE assembler - code to call function `__bb_trace_ret'. */ - - /* ??? Unclear if this will actually work. No way to test this currently. */ - - /* ??? This needs to be emitted into the epilogue. Perhaps rewrite to emit - rtl and call from ia64_expand_epilogue? */ - - #define FUNCTION_BLOCK_PROFILER_EXIT(FILE) \ - fputs ("\tbr.call.sptk.many rp = __bb_trace_ret\n", FILE); - #undef FUNCTION_BLOCK_PROFILER_EXIT - - /* A C statement or compound statement to save all registers, which may be - clobbered by a function call, including condition codes. */ - - /* ??? We would have to save 20 GRs, 106 FRs, 10 PRs, 2 BRs, and possibly - other things. This is not practical. Perhaps leave this feature (-ax) - unsupported by undefining above macros? */ - - /* #define MACHINE_STATE_SAVE(ID) */ - - /* A C statement or compound statement to restore all registers, including - condition codes, saved by `MACHINE_STATE_SAVE'. */ - - /* ??? We would have to restore 20 GRs, 106 FRs, 10 PRs, 2 BRs, and possibly - other things. This is not practical. Perhaps leave this feature (-ax) - unsupported by undefining above macros? */ - - /* #define MACHINE_STATE_RESTORE(ID) */ - /* Implementing the Varargs Macros. */ --- 1483,1507 ---- /* A C statement or compound statement to output to FILE some assembler code to call the profiling subroutine `mcount'. */ ! #undef FUNCTION_PROFILER ! #define FUNCTION_PROFILER(FILE, LABELNO) \ do { \ char buf[20]; \ ASM_GENERATE_INTERNAL_LABEL (buf, "LP", LABELNO); \ ! fputs ("\talloc out0 = ar.pfs, 8, 0, 4, 0\n", FILE); \ ! if (TARGET_AUTO_PIC) \ ! fputs ("\tmovl out3 = @gprel(", FILE); \ ! else \ ! fputs ("\taddl out3 = @ltoff(", FILE); \ assemble_name (FILE, buf); \ ! if (TARGET_AUTO_PIC) \ ! fputs (");;\n", FILE); \ ! else \ ! fputs ("), r1;;\n", FILE); \ ! fputs ("\tmov out1 = r1\n", FILE); \ ! fputs ("\tmov out2 = b0\n", FILE); \ ! fputs ("\tbr.call.sptk.many b0 = _mcount;;\n", FILE); \ } while (0) /* Implementing the Varargs Macros. */ *************** do { \ *** 1693,1704 **** /* Implicit Calls to Library Routines */ - /* ??? The ia64 linux kernel requires that we use the standard names for - divide and modulo routines. However, if we aren't careful, lib1funcs.asm - will be overridden by libgcc2.c. We avoid this by using different names - for lib1funcs.asm modules, e.g. __divdi3 vs _divdi3. Since lib1funcs.asm - goes into libgcc.a first, the linker will find it first. */ - /* Define this macro if GNU CC should generate calls to the System V (and ANSI C) library functions `memcpy' and `memset' rather than the BSD functions `bcopy' and `bzero'. */ --- 1566,1571 ---- *************** do { \ *** 1868,1885 **** #define ADDRESS_COST(ADDRESS) 0 /* A C expression for the cost of moving data from a register in class FROM to ! one in class TO. */ ! #define REGISTER_MOVE_COST(MODE, FROM, TO) \ ! ia64_register_move_cost((FROM), (TO)) /* A C expression for the cost of moving data of mode M between a register and memory. */ #define MEMORY_MOVE_COST(MODE,CLASS,IN) \ ! ((CLASS) == GENERAL_REGS || (CLASS) == FR_REGS ? 4 : 10) /* A C expression for the cost of a branch instruction. A value of 1 is the ! default; other values are interpreted relative to that. Used by the if-conversion code as max instruction count. */ /* ??? This requires investigation. The primary effect might be how many additional insn groups we run into, vs how good the dynamic --- 1735,1752 ---- #define ADDRESS_COST(ADDRESS) 0 /* A C expression for the cost of moving data from a register in class FROM to ! one in class TO, using MODE. */ ! #define REGISTER_MOVE_COST ia64_register_move_cost /* A C expression for the cost of moving data of mode M between a register and memory. */ #define MEMORY_MOVE_COST(MODE,CLASS,IN) \ ! ((CLASS) == GENERAL_REGS || (CLASS) == FR_REGS \ ! || (CLASS) == GR_AND_FR_REGS ? 4 : 10) /* A C expression for the cost of a branch instruction. A value of 1 is the ! default; other values are interpreted relative to that. Used by the if-conversion code as max instruction count. */ /* ??? This requires investigation. The primary effect might be how many additional insn groups we run into, vs how good the dynamic *************** do { \ *** 1919,1937 **** #define BSS_SECTION_ASM_OP "\t.bss" - /* Define this macro if jump tables (for `tablejump' insns) should be output in - the text section, along with the assembler instructions. */ - - /* ??? It is probably better for the jump tables to be in the rodata section, - which is where they go by default. Unfortunately, that currently does not - work, because of some problem with pcrelative relocations not getting - resolved correctly. */ - /* ??? FIXME ??? rth says that we should use @gprel to solve this problem. */ - /* ??? If jump tables are in the text section, then we can use 4 byte - entries instead of 8 byte entries. */ - - #define JUMP_TABLES_IN_TEXT_SECTION 1 - /* Define this macro if references to a symbol must be treated differently depending on something about the variable or function named by the symbol (such as what section it is in). */ --- 1786,1791 ---- *************** do { \ *** 1940,1946 **** /* If a variable is weakened, made one only or moved into a different section, it may be necessary to redo the section info to move the ! variable out of sdata. */ #define REDO_SECTION_INFO_P(DECL) \ ((TREE_CODE (DECL) == VAR_DECL) \ --- 1794,1800 ---- /* If a variable is weakened, made one only or moved into a different section, it may be necessary to redo the section info to move the ! variable out of sdata. */ #define REDO_SECTION_INFO_P(DECL) \ ((TREE_CODE (DECL) == VAR_DECL) \ *************** do { \ *** 1954,1964 **** /* Decode SYM_NAME and store the real name part in VAR, sans the characters that encode section info. */ ! #define STRIP_NAME_ENCODING(VAR, SYMBOL_NAME) \ ! (VAR) = ((SYMBOL_NAME) \ ! + (*(SYMBOL_NAME) == '*' || *(SYMBOL_NAME) == SDATA_NAME_FLAG_CHAR)) ! ! /* Position Independent Code. */ --- 1808,1821 ---- /* Decode SYM_NAME and store the real name part in VAR, sans the characters that encode section info. */ ! #define STRIP_NAME_ENCODING(VAR, SYMBOL_NAME) \ ! do { \ ! (VAR) = (SYMBOL_NAME); \ ! if ((VAR)[0] == SDATA_NAME_FLAG_CHAR) \ ! (VAR)++; \ ! if ((VAR)[0] == '*') \ ! (VAR)++; \ ! } while (0) /* Position Independent Code. */ *************** do { \ *** 2004,2088 **** /* Output of Data. */ - /* A C statement to output to the stdio stream STREAM an assembler instruction - to assemble a floating-point constant of `TFmode', `DFmode', `SFmode', - respectively, whose value is VALUE. */ - - /* ??? Must reverse the word order for big-endian code? */ - - #define ASM_OUTPUT_LONG_DOUBLE(FILE, VALUE) \ - do { \ - long t[3]; \ - REAL_VALUE_TO_TARGET_LONG_DOUBLE (VALUE, t); \ - fprintf (FILE, "\tdata4 0x%08lx, 0x%08lx, 0x%08lx, 0x%08lx\n", \ - t[0] & 0xffffffff, t[1] & 0xffffffff, t[2] & 0xffffffff, 0L);\ - } while (0) - - /* ??? Must reverse the word order for big-endian code? */ - - #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - do { \ - long t[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE (VALUE, t); \ - fprintf (FILE, "\tdata8 0x%08lx%08lx\n", \ - t[1] & 0xffffffff, t[0] & 0xffffffff); \ - } while (0) - - #define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - do { \ - long t; \ - REAL_VALUE_TO_TARGET_SINGLE (VALUE, t); \ - fprintf (FILE, "\tdata4 0x%lx\n", t & 0xffffffff); \ - } while (0) - - /* A C statement to output to the stdio stream STREAM an assembler instruction - to assemble an integer of 1, 2, 4, or 8 bytes, respectively, whose value - is VALUE. */ - - /* This is how to output an assembler line defining a `char' constant. */ - - #define ASM_OUTPUT_CHAR(FILE, VALUE) \ - do { \ - fprintf (FILE, "%s", ASM_BYTE_OP); \ - output_addr_const (FILE, (VALUE)); \ - fprintf (FILE, "\n"); \ - } while (0) - - /* This is how to output an assembler line defining a `short' constant. */ - - #define ASM_OUTPUT_SHORT(FILE, VALUE) \ - do { \ - fprintf (FILE, "\tdata2\t"); \ - output_addr_const (FILE, (VALUE)); \ - fprintf (FILE, "\n"); \ - } while (0) - - /* This is how to output an assembler line defining an `int' constant. - We also handle symbol output here. */ - - /* ??? For ILP32, also need to handle function addresses here. */ - - #define ASM_OUTPUT_INT(FILE, VALUE) \ - do { \ - fprintf (FILE, "\tdata4\t"); \ - output_addr_const (FILE, (VALUE)); \ - fprintf (FILE, "\n"); \ - } while (0) - - /* This is how to output an assembler line defining a `long' constant. - We also handle symbol output here. */ - - #define ASM_OUTPUT_DOUBLE_INT(FILE, VALUE) \ - do { \ - fprintf (FILE, "\tdata8\t"); \ - if (!(TARGET_NO_PIC || TARGET_AUTO_PIC) && SYMBOL_REF_FLAG (VALUE)) \ - fprintf (FILE, "@fptr("); \ - output_addr_const (FILE, (VALUE)); \ - if (!(TARGET_NO_PIC || TARGET_AUTO_PIC) && SYMBOL_REF_FLAG (VALUE)) \ - fprintf (FILE, ")"); \ - fprintf (FILE, "\n"); \ - } while (0) - /* This is how to output an assembler line defining a `char' constant to an xdata segment. */ --- 1861,1866 ---- *************** do { \ *** 2135,2152 **** } while (0) - /* A C statement to output to the stdio stream STREAM an assembler instruction - to assemble a single byte containing the number VALUE. */ - - #define ASM_OUTPUT_BYTE(STREAM, VALUE) \ - fprintf (STREAM, "%s0x%x\n", ASM_BYTE_OP, (int)(VALUE) & 0xff) - - /* These macros are defined as C string constant, describing the syntax in the - assembler for grouping arithmetic expressions. */ - - #define ASM_OPEN_PAREN "(" - #define ASM_CLOSE_PAREN ")" - /* Output of Uninitialized Variables. */ --- 1913,1918 ---- *************** do { \ *** 2426,2444 **** /* ??? Depends on the pointer size. */ #define ASM_OUTPUT_ADDR_DIFF_ELT(STREAM, BODY, VALUE, REL) \ ! fprintf (STREAM, "\tdata8 .L%d-.L%d\n", VALUE, REL) /* This is how to output an element of a case-vector that is absolute. (Ia64 does not use such vectors, but we must define this macro anyway.) */ #define ASM_OUTPUT_ADDR_VEC_ELT(STREAM, VALUE) abort () - /* Define this if something special must be output at the end of a jump-table. - We need to align back to a 16 byte boundary because offsets are smaller than - instructions. */ - - #define ASM_OUTPUT_CASE_END(STREAM, NUM, TABLE) ASM_OUTPUT_ALIGN (STREAM, 4) - /* Jump tables only need 8 byte alignment. */ #define ADDR_VEC_ALIGN(ADDR_VEC) 3 --- 2192,2204 ---- /* ??? Depends on the pointer size. */ #define ASM_OUTPUT_ADDR_DIFF_ELT(STREAM, BODY, VALUE, REL) \ ! fprintf (STREAM, "\tdata8 @pcrel(.L%d)\n", VALUE) /* This is how to output an element of a case-vector that is absolute. (Ia64 does not use such vectors, but we must define this macro anyway.) */ #define ASM_OUTPUT_ADDR_VEC_ELT(STREAM, VALUE) abort () /* Jump tables only need 8 byte alignment. */ #define ADDR_VEC_ALIGN(ADDR_VEC) 3 *************** do { \ *** 2464,2472 **** reltag = "@gprel("; \ if (reltag) \ { \ ! fputs (((SIZE) == 4 ? UNALIGNED_INT_ASM_OP \ ! : (SIZE) == 8 ? UNALIGNED_DOUBLE_INT_ASM_OP \ ! : (abort (), "")), FILE); \ fputs (reltag, FILE); \ assemble_name (FILE, XSTR (ADDR, 0)); \ fputc (')', FILE); \ --- 2224,2230 ---- reltag = "@gprel("; \ if (reltag) \ { \ ! fputs (integer_asm_op (SIZE, FALSE), FILE); \ fputs (reltag, FILE); \ assemble_name (FILE, XSTR (ADDR, 0)); \ fputc (')', FILE); \ *************** do { \ *** 2477,2497 **** /* Assembler Commands for Alignment. */ - /* The alignment (log base 2) to put in front of LABEL, which follows - a BARRIER. */ - /* ??? Investigate. */ ! /* ??? Emitting align directives increases the size of the line number debug ! info, because each .align forces use of an extended opcode. Perhaps try ! to fix this in the assembler? */ /* #define LABEL_ALIGN_AFTER_BARRIER(LABEL) */ /* The desired alignment for the location counter at the beginning of a loop. */ - /* ??? Investigate. */ /* #define LOOP_ALIGN(LABEL) */ /* Define this macro if `ASM_OUTPUT_SKIP' should not be used in the text --- 2235,2250 ---- /* Assembler Commands for Alignment. */ /* ??? Investigate. */ ! /* The alignment (log base 2) to put in front of LABEL, which follows ! a BARRIER. */ /* #define LABEL_ALIGN_AFTER_BARRIER(LABEL) */ /* The desired alignment for the location counter at the beginning of a loop. */ /* #define LOOP_ALIGN(LABEL) */ /* Define this macro if `ASM_OUTPUT_SKIP' should not be used in the text *************** do { \ *** 2533,2570 **** #define DWARF2_DEBUGGING_INFO - /* Section names for DWARF2 debug info. */ - - #define DEBUG_INFO_SECTION ".debug_info, \"\", \"progbits\"" - #define ABBREV_SECTION ".debug_abbrev, \"\", \"progbits\"" - #define ARANGES_SECTION ".debug_aranges, \"\", \"progbits\"" - #define DEBUG_LINE_SECTION ".debug_line, \"\", \"progbits\"" - #define PUBNAMES_SECTION ".debug_pubnames, \"\", \"progbits\"" - - /* C string constants giving the pseudo-op to use for a sequence of - 2, 4, and 8 byte unaligned constants. dwarf2out.c needs these. */ - - #define UNALIGNED_SHORT_ASM_OP "\tdata2.ua\t" - #define UNALIGNED_INT_ASM_OP "\tdata4.ua\t" - #define UNALIGNED_DOUBLE_INT_ASM_OP "\tdata8.ua\t" - - /* We need to override the default definition for this in dwarf2out.c so that - we can emit the necessary # postfix. */ - #define ASM_NAME_TO_STRING(STR, NAME) \ - do { \ - if ((NAME)[0] == '*') \ - dyn_string_append (STR, NAME + 1); \ - else \ - { \ - char *newstr; \ - STRIP_NAME_ENCODING (newstr, NAME); \ - dyn_string_append (STR, user_label_prefix); \ - dyn_string_append (STR, newstr); \ - dyn_string_append (STR, "#"); \ - } \ - } \ - while (0) - #define DWARF2_ASM_LINE_DEBUG_INFO (TARGET_DWARF2_ASM) /* Use tags for debug info labels, so that they don't break instruction --- 2286,2291 ---- *************** do { \ *** 2573,2588 **** add brackets around the label. */ #define ASM_OUTPUT_DEBUG_LABEL(FILE, PREFIX, NUM) \ ! do \ ! { \ ! fprintf (FILE, "[.%s%d:]\n", PREFIX, NUM); \ ! } \ ! while (0) /* Cross Compilation and Floating Point. */ ! /* Define to enable software floating point emulation. */ #define REAL_ARITHMETIC --- 2294,2324 ---- add brackets around the label. */ #define ASM_OUTPUT_DEBUG_LABEL(FILE, PREFIX, NUM) \ ! fprintf (FILE, "[.%s%d:]\n", PREFIX, NUM) ! ! /* Use section-relative relocations for debugging offsets. Unlike other ! targets that fake this by putting the section VMA at 0, IA-64 has ! proper relocations for them. */ ! #define ASM_OUTPUT_DWARF_OFFSET(FILE, SIZE, LABEL) \ ! do { \ ! fputs (integer_asm_op (SIZE, FALSE), FILE); \ ! fputs ("@secrel(", FILE); \ ! assemble_name (FILE, LABEL); \ ! fputc (')', FILE); \ ! } while (0) + /* Emit a PC-relative relocation. */ + #define ASM_OUTPUT_DWARF_PCREL(FILE, SIZE, LABEL) \ + do { \ + fputs (integer_asm_op (SIZE, FALSE), FILE); \ + fputs ("@pcrel(", FILE); \ + assemble_name (FILE, LABEL); \ + fputc (')', FILE); \ + } while (0) /* Cross Compilation and Floating Point. */ ! /* Define to enable software floating point emulation. */ #define REAL_ARITHMETIC *************** do { \ *** 2594,2605 **** #define HARD_REGNO_RENAME_OK(REGNO1,REGNO2) \ ia64_hard_regno_rename_ok((REGNO1), (REGNO2)) - /* Define this macro if the compiler should use extended basic blocks - when renaming registers. Define this macro if the target has predicate - registers. */ - - #define RENAME_EXTENDED_BLOCKS - /* Miscellaneous Parameters. */ --- 2330,2335 ---- *************** do { \ *** 2645,2652 **** --- 2375,2384 ---- { "adjusted_comparison_operator", {LT, GE, LTU, GEU}}, \ { "signed_inequality_operator", {GE, GT, LE, LT}}, \ { "predicate_operator", {NE, EQ}}, \ + { "condop_operator", {PLUS, MINUS, IOR, XOR, AND}}, \ { "ar_lc_reg_operand", {REG}}, \ { "ar_ccv_reg_operand", {REG}}, \ + { "ar_pfs_reg_operand", {REG}}, \ { "general_tfmode_operand", {SUBREG, REG, CONST_DOUBLE, MEM}}, \ { "destination_tfmode_operand", {SUBREG, REG, MEM}}, \ { "tfreg_or_fp01_operand", {REG, CONST_DOUBLE}}, *************** do { \ *** 2674,2691 **** #define LOAD_EXTEND_OP(MODE) ZERO_EXTEND - /* An alias for a tree code that should be used by default for conversion of - floating point values to fixed point. */ - - /* ??? Looks like this macro is obsolete and should be deleted everywhere. */ - - #define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR - - /* An alias for a tree code that is the easiest kind of division to compile - code for in the general case. */ - - #define EASY_DIV_EXPR TRUNC_DIV_EXPR - /* The maximum number of bytes that a single instruction can move quickly from memory to memory. */ #define MOVE_MAX 8 --- 2406,2411 ---- *************** do { \ *** 2719,2732 **** #pragma weak. Note, #pragma weak will only be supported if SUPPORT_WEAK is defined. */ ! #define HANDLE_SYSV_PRAGMA ! /* If defined, a C expression whose value is nonzero if IDENTIFIER with ! arguments ARGS is a valid machine specific attribute for TYPE. The ! attributes in ATTRIBUTES have previously been assigned to TYPE. */ ! #define VALID_MACHINE_TYPE_ATTRIBUTE(TYPE, ATTRIBUTES, IDENTIFIER, ARGS) \ ! ia64_valid_type_attribute (TYPE, ATTRIBUTES, IDENTIFIER, ARGS) /* In rare cases, correct code generation requires extra machine dependent processing between the second jump optimization pass and delayed branch --- 2439,2458 ---- #pragma weak. Note, #pragma weak will only be supported if SUPPORT_WEAK is defined. */ ! /* If this architecture supports prefetch, define this to be the number of ! prefetch commands that can be executed in parallel. ! ??? This number is bogus and needs to be replaced before the value is ! actually used in optimizations. */ ! #define SIMULTANEOUS_PREFETCHES 6 ! ! /* If this architecture supports prefetch, define this to be the size of ! the cache line that is prefetched. */ ! ! #define PREFETCH_BLOCK 32 ! ! #define HANDLE_SYSV_PRAGMA /* In rare cases, correct code generation requires extra machine dependent processing between the second jump optimization pass and delayed branch *************** do { \ *** 2742,2781 **** /* ??? Investigate. */ #define MAX_CONDITIONAL_EXECUTE 12 - /* A C statement (sans semicolon) to update the integer scheduling - priority `INSN_PRIORITY(INSN)'. */ - - /* ??? Investigate. */ - /* #define ADJUST_PRIORITY (INSN) */ - - /* A C statement (sans semicolon) to update the integer variable COST - based on the relationship between INSN that is dependent on - DEP_INSN through the dependence LINK. The default is to make no - adjustment to COST. This can be used for example to specify to - the scheduler that an output- or anti-dependence does not incur - the same cost as a data-dependence. */ - - #define ADJUST_COST(insn,link,dep_insn,cost) \ - (cost) = ia64_adjust_cost(insn, link, dep_insn, cost) - - #define ISSUE_RATE ia64_issue_rate () - - #define MD_SCHED_INIT(DUMP, SCHED_VERBOSE, MAX_READY) \ - ia64_sched_init (DUMP, SCHED_VERBOSE, MAX_READY) - - #define MD_SCHED_REORDER(DUMP, SCHED_VERBOSE, READY, N_READY, CLOCK, CIM) \ - (CIM) = ia64_sched_reorder (DUMP, SCHED_VERBOSE, READY, &N_READY, 0) - - #define MD_SCHED_REORDER2(DUMP, SCHED_VERBOSE, READY, N_READY, CLOCK, CIM) \ - (CIM) = ia64_sched_reorder2 (DUMP, SCHED_VERBOSE, READY, &N_READY, 1) - - #define MD_SCHED_FINISH(DUMP, SCHED_VERBOSE) \ - ia64_sched_finish (DUMP, SCHED_VERBOSE) - - #define MD_SCHED_VARIABLE_ISSUE(DUMP, SCHED_VERBOSE, INSN, CAN_ISSUE_MORE) \ - ((CAN_ISSUE_MORE) \ - = ia64_variable_issue (DUMP, SCHED_VERBOSE, INSN, CAN_ISSUE_MORE)) - extern int ia64_final_schedule; #define IA64_UNWIND_INFO 1 --- 2468,2473 ---- *************** struct machine_function *** 2789,2795 **** /* The new stack pointer when unwinding from EH. */ struct rtx_def* ia64_eh_epilogue_sp; ! /* The new bsp value when unwinding from EH. */ struct rtx_def* ia64_eh_epilogue_bsp; /* The GP value save register. */ --- 2481,2487 ---- /* The new stack pointer when unwinding from EH. */ struct rtx_def* ia64_eh_epilogue_sp; ! /* The new bsp value when unwinding from EH. */ struct rtx_def* ia64_eh_epilogue_bsp; /* The GP value save register. */ *************** enum ia64_builtins *** 2854,2869 **** IA64_BUILTIN_FLUSHRS }; ! /* Codes for expand_compare_and_swap and expand_swap_and_compare. */ enum fetchop_code { IA64_ADD_OP, IA64_SUB_OP, IA64_OR_OP, IA64_AND_OP, IA64_XOR_OP, IA64_NAND_OP }; ! #define MD_INIT_BUILTINS do { \ ! ia64_init_builtins (); \ ! } while (0) ! #define MD_EXPAND_BUILTIN(EXP, TARGET, SUBTARGET, MODE, IGNORE) \ ! ia64_expand_builtin ((EXP), (TARGET), (SUBTARGET), (MODE), (IGNORE)) /* End of ia64.h */ --- 2546,2561 ---- IA64_BUILTIN_FLUSHRS }; ! /* Codes for expand_compare_and_swap and expand_swap_and_compare. */ enum fetchop_code { IA64_ADD_OP, IA64_SUB_OP, IA64_OR_OP, IA64_AND_OP, IA64_XOR_OP, IA64_NAND_OP }; ! #define DONT_USE_BUILTIN_SETJMP ! /* Output any profiling code before the prologue. */ ! ! #undef PROFILE_BEFORE_PROLOGUE ! #define PROFILE_BEFORE_PROLOGUE 1 /* End of ia64.h */ diff -Nrc3pad gcc-3.0.4/gcc/config/ia64/ia64.md gcc-3.1/gcc/config/ia64/ia64.md *** gcc-3.0.4/gcc/config/ia64/ia64.md Tue Aug 28 21:56:01 2001 --- gcc-3.1/gcc/config/ia64/ia64.md Fri Apr 19 03:50:34 2002 *************** *** 1,5 **** ;; IA-64 Machine description template ! ;; Copyright (C) 1999, 2000 Free Software Foundation, Inc. ;; Contributed by James E. Wilson and ;; David Mosberger . --- 1,5 ---- ;; IA-64 Machine description template ! ;; Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. ;; Contributed by James E. Wilson and ;; David Mosberger . *************** *** 66,71 **** --- 66,73 ---- ;; 21 flushrs ;; 22 bundle selector ;; 23 cycle display + ;; 24 addp4 + ;; 25 prologue_use ;; ;; unspec_volatile: ;; 0 alloc *************** *** 98,104 **** ;; multiple instructions, patterns which emit 0 instructions, and patterns ;; which emit instruction that can go in any slot (e.g. nop). ! (define_attr "itanium_class" "unknown,ignore,stop_bit,br,fcmp,fcvtfx,fld,fmac,fmisc,frar_i,frar_m,frbr,frfr,frpr,ialu,icmp,ilog,ishf,ld,chk_s,long_i,mmmul,mmshf,mmshfi,rse_m,scall,sem,stf,st,syst_m0,syst_m,tbit,toar_i,toar_m,tobr,tofr,topr,xmpy,xtd,nop_b,nop_f,nop_i,nop_m,nop_x" (const_string "unknown")) ;; chk_s has an I and an M form; use type A for convenience. --- 100,106 ---- ;; multiple instructions, patterns which emit 0 instructions, and patterns ;; which emit instruction that can go in any slot (e.g. nop). ! (define_attr "itanium_class" "unknown,ignore,stop_bit,br,fcmp,fcvtfx,fld,fmac,fmisc,frar_i,frar_m,frbr,frfr,frpr,ialu,icmp,ilog,ishf,ld,chk_s,long_i,mmmul,mmshf,mmshfi,rse_m,scall,sem,stf,st,syst_m0,syst_m,tbit,toar_i,toar_m,tobr,tofr,topr,xmpy,xtd,nop_b,nop_f,nop_i,nop_m,nop_x,lfetch" (const_string "unknown")) ;; chk_s has an I and an M form; use type A for convenience. *************** *** 106,111 **** --- 108,114 ---- (cond [(eq_attr "itanium_class" "ld,st,fld,stf,sem,nop_m") (const_string "M") (eq_attr "itanium_class" "rse_m,syst_m,syst_m0") (const_string "M") (eq_attr "itanium_class" "frar_m,toar_m,frfr,tofr") (const_string "M") + (eq_attr "itanium_class" "lfetch") (const_string "M") (eq_attr "itanium_class" "chk_s,ialu,icmp,ilog") (const_string "A") (eq_attr "itanium_class" "fmisc,fmac,fcmp,xmpy") (const_string "F") (eq_attr "itanium_class" "fcvtfx,nop_f") (const_string "F") *************** *** 531,537 **** [(const_int 0)] " { ! rtx adj1, adj2, in[2], out[2]; int first; adj1 = ia64_split_timode (in, operands[1], operands[2]); --- 534,540 ---- [(const_int 0)] " { ! rtx adj1, adj2, in[2], out[2], insn; int first; adj1 = ia64_split_timode (in, operands[1], operands[2]); *************** *** 551,558 **** emit_insn (adj1); if (adj2) emit_insn (adj2); ! emit_insn (gen_rtx_SET (VOIDmode, out[first], in[first])); ! emit_insn (gen_rtx_SET (VOIDmode, out[!first], in[!first])); DONE; }" [(set_attr "itanium_class" "unknown") --- 554,571 ---- emit_insn (adj1); if (adj2) emit_insn (adj2); ! insn = emit_insn (gen_rtx_SET (VOIDmode, out[first], in[first])); ! if (GET_CODE (out[first]) == MEM ! && GET_CODE (XEXP (out[first], 0)) == POST_MODIFY) ! REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_INC, ! XEXP (XEXP (out[first], 0), 0), ! REG_NOTES (insn)); ! insn = emit_insn (gen_rtx_SET (VOIDmode, out[!first], in[!first])); ! if (GET_CODE (out[!first]) == MEM ! && GET_CODE (XEXP (out[!first], 0)) == POST_MODIFY) ! REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_INC, ! XEXP (XEXP (out[!first], 0), 0), ! REG_NOTES (insn)); DONE; }" [(set_attr "itanium_class" "unknown") *************** *** 679,685 **** (define_expand "movtf" [(set (match_operand:TF 0 "general_operand" "") (match_operand:TF 1 "general_operand" ""))] ! "" " { /* We must support TFmode loads into general registers for stdarg/vararg --- 692,698 ---- (define_expand "movtf" [(set (match_operand:TF 0 "general_operand" "") (match_operand:TF 1 "general_operand" ""))] ! "INTEL_EXTENDED_IEEE_FORMAT" " { /* We must support TFmode loads into general registers for stdarg/vararg *************** *** 725,735 **** out[WORDS_BIG_ENDIAN] = gen_rtx_REG (DImode, REGNO (operands[0])); out[!WORDS_BIG_ENDIAN] = gen_rtx_REG (DImode, REGNO (operands[0])+1); ! emit_move_insn (out[0], change_address (operands[1], DImode, NULL)); ! emit_move_insn (out[1], ! change_address (operands[1], DImode, ! plus_constant (XEXP (operands[1], 0), ! 8))); DONE; } --- 738,745 ---- out[WORDS_BIG_ENDIAN] = gen_rtx_REG (DImode, REGNO (operands[0])); out[!WORDS_BIG_ENDIAN] = gen_rtx_REG (DImode, REGNO (operands[0])+1); ! emit_move_insn (out[0], adjust_address (operands[1], DImode, 0)); ! emit_move_insn (out[1], adjust_address (operands[1], DImode, 8)); DONE; } *************** *** 751,757 **** (define_insn "*movtf_internal" [(set (match_operand:TF 0 "destination_tfmode_operand" "=f,f, m") (match_operand:TF 1 "general_tfmode_operand" "fG,m,fG"))] ! "ia64_move_ok (operands[0], operands[1])" "@ mov %0 = %F1 ldfe %0 = %1%P1 --- 761,767 ---- (define_insn "*movtf_internal" [(set (match_operand:TF 0 "destination_tfmode_operand" "=f,f, m") (match_operand:TF 1 "general_tfmode_operand" "fG,m,fG"))] ! "INTEL_EXTENDED_IEEE_FORMAT && ia64_move_ok (operands[0], operands[1])" "@ mov %0 = %F1 ldfe %0 = %1%P1 *************** *** 846,859 **** (define_insn "extendsftf2" [(set (match_operand:TF 0 "fr_register_operand" "=f") (float_extend:TF (match_operand:SF 1 "fr_register_operand" "f")))] ! "" "fnorm %0 = %1" [(set_attr "itanium_class" "fmac")]) (define_insn "extenddftf2" [(set (match_operand:TF 0 "fr_register_operand" "=f") (float_extend:TF (match_operand:DF 1 "fr_register_operand" "f")))] ! "" "fnorm %0 = %1" [(set_attr "itanium_class" "fmac")]) --- 856,869 ---- (define_insn "extendsftf2" [(set (match_operand:TF 0 "fr_register_operand" "=f") (float_extend:TF (match_operand:SF 1 "fr_register_operand" "f")))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fnorm %0 = %1" [(set_attr "itanium_class" "fmac")]) (define_insn "extenddftf2" [(set (match_operand:TF 0 "fr_register_operand" "=f") (float_extend:TF (match_operand:DF 1 "fr_register_operand" "f")))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fnorm %0 = %1" [(set_attr "itanium_class" "fmac")]) *************** *** 867,880 **** (define_insn "trunctfsf2" [(set (match_operand:SF 0 "fr_register_operand" "=f") (float_truncate:SF (match_operand:TF 1 "fr_register_operand" "f")))] ! "" "fnorm.s %0 = %1" [(set_attr "itanium_class" "fmac")]) (define_insn "trunctfdf2" [(set (match_operand:DF 0 "fr_register_operand" "=f") (float_truncate:DF (match_operand:TF 1 "fr_register_operand" "f")))] ! "" "fnorm.d %0 = %1" [(set_attr "itanium_class" "fmac")]) --- 877,890 ---- (define_insn "trunctfsf2" [(set (match_operand:SF 0 "fr_register_operand" "=f") (float_truncate:SF (match_operand:TF 1 "fr_register_operand" "f")))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fnorm.s %0 = %1" [(set_attr "itanium_class" "fmac")]) (define_insn "trunctfdf2" [(set (match_operand:DF 0 "fr_register_operand" "=f") (float_truncate:DF (match_operand:TF 1 "fr_register_operand" "f")))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fnorm.d %0 = %1" [(set_attr "itanium_class" "fmac")]) *************** *** 883,892 **** (define_insn "floatditf2" [(set (match_operand:TF 0 "fr_register_operand" "=f") (float:TF (match_operand:DI 1 "fr_register_operand" "f")))] ! "" "fcvt.xf %0 = %1" [(set_attr "itanium_class" "fcvtfx")]) (define_insn "fix_truncsfdi2" [(set (match_operand:DI 0 "fr_register_operand" "=f") (fix:DI (match_operand:SF 1 "fr_register_operand" "f")))] --- 893,918 ---- (define_insn "floatditf2" [(set (match_operand:TF 0 "fr_register_operand" "=f") (float:TF (match_operand:DI 1 "fr_register_operand" "f")))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fcvt.xf %0 = %1" [(set_attr "itanium_class" "fcvtfx")]) + ;; ??? Suboptimal. This should be split somehow. + (define_insn "floatdidf2" + [(set (match_operand:DF 0 "register_operand" "=f") + (float:DF (match_operand:DI 1 "register_operand" "f")))] + "!INTEL_EXTENDED_IEEE_FORMAT" + "fcvt.xf %0 = %1\;;;\;fnorm.d %0 = %0" + [(set_attr "itanium_class" "fcvtfx")]) + + ;; ??? Suboptimal. This should be split somehow. + (define_insn "floatdisf2" + [(set (match_operand:SF 0 "register_operand" "=f") + (float:SF (match_operand:DI 1 "register_operand" "f")))] + "!INTEL_EXTENDED_IEEE_FORMAT" + "fcvt.xf %0 = %1\;;;\;fnorm.s %0 = %0" + [(set_attr "itanium_class" "fcvtfx")]) + (define_insn "fix_truncsfdi2" [(set (match_operand:DI 0 "fr_register_operand" "=f") (fix:DI (match_operand:SF 1 "fr_register_operand" "f")))] *************** *** 904,910 **** (define_insn "fix_trunctfdi2" [(set (match_operand:DI 0 "fr_register_operand" "=f") (fix:DI (match_operand:TF 1 "fr_register_operand" "f")))] ! "" "fcvt.fx.trunc %0 = %1" [(set_attr "itanium_class" "fcvtfx")]) --- 930,936 ---- (define_insn "fix_trunctfdi2" [(set (match_operand:DI 0 "fr_register_operand" "=f") (fix:DI (match_operand:TF 1 "fr_register_operand" "f")))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fcvt.fx.trunc %0 = %1" [(set_attr "itanium_class" "fcvtfx")]) *************** *** 912,918 **** [(set (match_operand:DI 0 "fr_register_operand" "=f") (fix:DI (match_operand:TF 1 "fr_register_operand" "f"))) (use (match_operand:SI 2 "const_int_operand" ""))] ! "" "fcvt.fx.trunc.s%2 %0 = %1" [(set_attr "itanium_class" "fcvtfx")]) --- 938,944 ---- [(set (match_operand:DI 0 "fr_register_operand" "=f") (fix:DI (match_operand:TF 1 "fr_register_operand" "f"))) (use (match_operand:SI 2 "const_int_operand" ""))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fcvt.fx.trunc.s%2 %0 = %1" [(set_attr "itanium_class" "fcvtfx")]) *************** *** 935,941 **** (define_insn "floatunsditf2" [(set (match_operand:TF 0 "fr_register_operand" "=f") (unsigned_float:TF (match_operand:DI 1 "fr_register_operand" "f")))] ! "" "fcvt.xuf %0 = %1" [(set_attr "itanium_class" "fcvtfx")]) --- 961,967 ---- (define_insn "floatunsditf2" [(set (match_operand:TF 0 "fr_register_operand" "=f") (unsigned_float:TF (match_operand:DI 1 "fr_register_operand" "f")))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fcvt.xuf %0 = %1" [(set_attr "itanium_class" "fcvtfx")]) *************** *** 956,962 **** (define_insn "fixuns_trunctfdi2" [(set (match_operand:DI 0 "fr_register_operand" "=f") (unsigned_fix:DI (match_operand:TF 1 "fr_register_operand" "f")))] ! "" "fcvt.fxu.trunc %0 = %1" [(set_attr "itanium_class" "fcvtfx")]) --- 982,988 ---- (define_insn "fixuns_trunctfdi2" [(set (match_operand:DI 0 "fr_register_operand" "=f") (unsigned_fix:DI (match_operand:TF 1 "fr_register_operand" "f")))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fcvt.fxu.trunc %0 = %1" [(set_attr "itanium_class" "fcvtfx")]) *************** *** 964,970 **** [(set (match_operand:DI 0 "fr_register_operand" "=f") (unsigned_fix:DI (match_operand:TF 1 "fr_register_operand" "f"))) (use (match_operand:SI 2 "const_int_operand" ""))] ! "" "fcvt.fxu.trunc.s%2 %0 = %1" [(set_attr "itanium_class" "fcvtfx")]) --- 990,996 ---- [(set (match_operand:DI 0 "fr_register_operand" "=f") (unsigned_fix:DI (match_operand:TF 1 "fr_register_operand" "f"))) (use (match_operand:SI 2 "const_int_operand" ""))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fcvt.fxu.trunc.s%2 %0 = %1" [(set_attr "itanium_class" "fcvtfx")]) *************** *** 1846,1852 **** [(set (match_operand:SI 0 "register_operand" "") (div:SI (match_operand:SI 1 "general_operand" "") (match_operand:SI 2 "general_operand" "")))] ! "TARGET_INLINE_DIV" " { rtx op1_tf, op2_tf, op0_tf, op0_di, twon34; --- 1872,1878 ---- [(set (match_operand:SI 0 "register_operand" "") (div:SI (match_operand:SI 1 "general_operand" "") (match_operand:SI 2 "general_operand" "")))] ! "INTEL_EXTENDED_IEEE_FORMAT && TARGET_INLINE_DIV" " { rtx op1_tf, op2_tf, op0_tf, op0_di, twon34; *************** *** 1885,1891 **** [(set (match_operand:SI 0 "register_operand" "") (mod:SI (match_operand:SI 1 "general_operand" "") (match_operand:SI 2 "general_operand" "")))] ! "TARGET_INLINE_DIV" " { rtx op2_neg, op1_di, div; --- 1911,1917 ---- [(set (match_operand:SI 0 "register_operand" "") (mod:SI (match_operand:SI 1 "general_operand" "") (match_operand:SI 2 "general_operand" "")))] ! "INTEL_EXTENDED_IEEE_FORMAT && TARGET_INLINE_DIV" " { rtx op2_neg, op1_di, div; *************** *** 1909,1915 **** [(set (match_operand:SI 0 "register_operand" "") (udiv:SI (match_operand:SI 1 "general_operand" "") (match_operand:SI 2 "general_operand" "")))] ! "TARGET_INLINE_DIV" " { rtx op1_tf, op2_tf, op0_tf, op0_di, twon34; --- 1935,1941 ---- [(set (match_operand:SI 0 "register_operand" "") (udiv:SI (match_operand:SI 1 "general_operand" "") (match_operand:SI 2 "general_operand" "")))] ! "INTEL_EXTENDED_IEEE_FORMAT && TARGET_INLINE_DIV" " { rtx op1_tf, op2_tf, op0_tf, op0_di, twon34; *************** *** 1948,1954 **** [(set (match_operand:SI 0 "register_operand" "") (umod:SI (match_operand:SI 1 "general_operand" "") (match_operand:SI 2 "general_operand" "")))] ! "TARGET_INLINE_DIV" " { rtx op2_neg, op1_di, div; --- 1974,1980 ---- [(set (match_operand:SI 0 "register_operand" "") (umod:SI (match_operand:SI 1 "general_operand" "") (match_operand:SI 2 "general_operand" "")))] ! "INTEL_EXTENDED_IEEE_FORMAT && TARGET_INLINE_DIV" " { rtx op2_neg, op1_di, div; *************** *** 1976,1982 **** (clobber (match_scratch:TF 5 "=&f")) (clobber (match_scratch:BI 6 "=c")) (use (match_operand:TF 3 "fr_register_operand" "f"))] ! "TARGET_INLINE_DIV" "#" "&& reload_completed" [(parallel [(set (match_dup 0) (div:TF (const_int 1) (match_dup 2))) --- 2002,2008 ---- (clobber (match_scratch:TF 5 "=&f")) (clobber (match_scratch:BI 6 "=c")) (use (match_operand:TF 3 "fr_register_operand" "f"))] ! "INTEL_EXTENDED_IEEE_FORMAT && TARGET_INLINE_DIV" "#" "&& reload_completed" [(parallel [(set (match_dup 0) (div:TF (const_int 1) (match_dup 2))) *************** *** 2260,2266 **** [(set (match_operand:DI 0 "register_operand" "") (div:DI (match_operand:DI 1 "general_operand" "") (match_operand:DI 2 "general_operand" "")))] ! "TARGET_INLINE_DIV" " { rtx op1_tf, op2_tf, op0_tf; --- 2286,2292 ---- [(set (match_operand:DI 0 "register_operand" "") (div:DI (match_operand:DI 1 "general_operand" "") (match_operand:DI 2 "general_operand" "")))] ! "INTEL_EXTENDED_IEEE_FORMAT && TARGET_INLINE_DIV" " { rtx op1_tf, op2_tf, op0_tf; *************** *** 2290,2296 **** [(set (match_operand:DI 0 "register_operand" "") (mod:SI (match_operand:DI 1 "general_operand" "") (match_operand:DI 2 "general_operand" "")))] ! "TARGET_INLINE_DIV" " { rtx op2_neg, div; --- 2316,2322 ---- [(set (match_operand:DI 0 "register_operand" "") (mod:SI (match_operand:DI 1 "general_operand" "") (match_operand:DI 2 "general_operand" "")))] ! "INTEL_EXTENDED_IEEE_FORMAT && TARGET_INLINE_DIV" " { rtx op2_neg, div; *************** *** 2308,2314 **** [(set (match_operand:DI 0 "register_operand" "") (udiv:DI (match_operand:DI 1 "general_operand" "") (match_operand:DI 2 "general_operand" "")))] ! "TARGET_INLINE_DIV" " { rtx op1_tf, op2_tf, op0_tf; --- 2334,2340 ---- [(set (match_operand:DI 0 "register_operand" "") (udiv:DI (match_operand:DI 1 "general_operand" "") (match_operand:DI 2 "general_operand" "")))] ! "INTEL_EXTENDED_IEEE_FORMAT && TARGET_INLINE_DIV" " { rtx op1_tf, op2_tf, op0_tf; *************** *** 2338,2344 **** [(set (match_operand:DI 0 "register_operand" "") (umod:DI (match_operand:DI 1 "general_operand" "") (match_operand:DI 2 "general_operand" "")))] ! "TARGET_INLINE_DIV" " { rtx op2_neg, div; --- 2364,2370 ---- [(set (match_operand:DI 0 "register_operand" "") (umod:DI (match_operand:DI 1 "general_operand" "") (match_operand:DI 2 "general_operand" "")))] ! "INTEL_EXTENDED_IEEE_FORMAT && TARGET_INLINE_DIV" " { rtx op2_neg, div; *************** *** 2360,2366 **** (clobber (match_scratch:TF 4 "=&f")) (clobber (match_scratch:TF 5 "=&f")) (clobber (match_scratch:BI 6 "=c"))] ! "TARGET_INLINE_DIV_LAT" "#" "&& reload_completed" [(parallel [(set (match_dup 0) (div:TF (const_int 1) (match_dup 2))) --- 2386,2392 ---- (clobber (match_scratch:TF 4 "=&f")) (clobber (match_scratch:TF 5 "=&f")) (clobber (match_scratch:BI 6 "=c"))] ! "INTEL_EXTENDED_IEEE_FORMAT && TARGET_INLINE_DIV_LAT" "#" "&& reload_completed" [(parallel [(set (match_dup 0) (div:TF (const_int 1) (match_dup 2))) *************** *** 2418,2424 **** (clobber (match_scratch:TF 3 "=&f")) (clobber (match_scratch:TF 4 "=f")) (clobber (match_scratch:BI 5 "=c"))] ! "TARGET_INLINE_DIV_THR" "#" "&& reload_completed" [(parallel [(set (match_dup 0) (div:TF (const_int 1) (match_dup 2))) --- 2444,2450 ---- (clobber (match_scratch:TF 3 "=&f")) (clobber (match_scratch:TF 4 "=f")) (clobber (match_scratch:BI 5 "=c"))] ! "INTEL_EXTENDED_IEEE_FORMAT && TARGET_INLINE_DIV_THR" "#" "&& reload_completed" [(parallel [(set (match_dup 0) (div:TF (const_int 1) (match_dup 2))) *************** *** 2568,2574 **** [(set (match_operand:SF 0 "fr_register_operand" "") (div:SF (match_operand:SF 1 "fr_register_operand" "") (match_operand:SF 2 "fr_register_operand" "")))] ! "TARGET_INLINE_DIV" " { rtx insn; --- 2594,2600 ---- [(set (match_operand:SF 0 "fr_register_operand" "") (div:SF (match_operand:SF 1 "fr_register_operand" "") (match_operand:SF 2 "fr_register_operand" "")))] ! "INTEL_EXTENDED_IEEE_FORMAT && TARGET_INLINE_DIV" " { rtx insn; *************** *** 2587,2593 **** (clobber (match_scratch:TF 3 "=&f")) (clobber (match_scratch:TF 4 "=f")) (clobber (match_scratch:BI 5 "=c"))] ! "TARGET_INLINE_DIV_LAT" "#" "&& reload_completed" [(parallel [(set (match_dup 6) (div:TF (const_int 1) (match_dup 8))) --- 2613,2619 ---- (clobber (match_scratch:TF 3 "=&f")) (clobber (match_scratch:TF 4 "=f")) (clobber (match_scratch:BI 5 "=c"))] ! "INTEL_EXTENDED_IEEE_FORMAT && TARGET_INLINE_DIV_LAT" "#" "&& reload_completed" [(parallel [(set (match_dup 6) (div:TF (const_int 1) (match_dup 8))) *************** *** 2641,2647 **** (clobber (match_scratch:TF 3 "=&f")) (clobber (match_scratch:TF 4 "=f")) (clobber (match_scratch:BI 5 "=c"))] ! "TARGET_INLINE_DIV_THR" "#" "&& reload_completed" [(parallel [(set (match_dup 6) (div:TF (const_int 1) (match_dup 8))) --- 2667,2673 ---- (clobber (match_scratch:TF 3 "=&f")) (clobber (match_scratch:TF 4 "=f")) (clobber (match_scratch:BI 5 "=c"))] ! "INTEL_EXTENDED_IEEE_FORMAT && TARGET_INLINE_DIV_THR" "#" "&& reload_completed" [(parallel [(set (match_dup 6) (div:TF (const_int 1) (match_dup 8))) *************** *** 2872,2878 **** [(set (match_operand:DF 0 "fr_register_operand" "") (div:DF (match_operand:DF 1 "fr_register_operand" "") (match_operand:DF 2 "fr_register_operand" "")))] ! "TARGET_INLINE_DIV" " { rtx insn; --- 2898,2904 ---- [(set (match_operand:DF 0 "fr_register_operand" "") (div:DF (match_operand:DF 1 "fr_register_operand" "") (match_operand:DF 2 "fr_register_operand" "")))] ! "INTEL_EXTENDED_IEEE_FORMAT && TARGET_INLINE_DIV" " { rtx insn; *************** *** 2892,2898 **** (clobber (match_scratch:TF 4 "=&f")) (clobber (match_scratch:TF 5 "=&f")) (clobber (match_scratch:BI 6 "=c"))] ! "TARGET_INLINE_DIV_LAT" "#" "&& reload_completed" [(parallel [(set (match_dup 7) (div:TF (const_int 1) (match_dup 9))) --- 2918,2924 ---- (clobber (match_scratch:TF 4 "=&f")) (clobber (match_scratch:TF 5 "=&f")) (clobber (match_scratch:BI 6 "=c"))] ! "INTEL_EXTENDED_IEEE_FORMAT && TARGET_INLINE_DIV_LAT" "#" "&& reload_completed" [(parallel [(set (match_dup 7) (div:TF (const_int 1) (match_dup 9))) *************** *** 2969,2975 **** (clobber (match_scratch:TF 3 "=&f")) (clobber (match_scratch:DF 4 "=f")) (clobber (match_scratch:BI 5 "=c"))] ! "TARGET_INLINE_DIV_THR" "#" "&& reload_completed" [(parallel [(set (match_dup 6) (div:TF (const_int 1) (match_dup 8))) --- 2995,3001 ---- (clobber (match_scratch:TF 3 "=&f")) (clobber (match_scratch:DF 4 "=f")) (clobber (match_scratch:BI 5 "=c"))] ! "INTEL_EXTENDED_IEEE_FORMAT && TARGET_INLINE_DIV_THR" "#" "&& reload_completed" [(parallel [(set (match_dup 6) (div:TF (const_int 1) (match_dup 8))) *************** *** 3035,3041 **** [(set (match_operand:TF 0 "fr_register_operand" "=f") (plus:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG")))] ! "" "fadd %0 = %F1, %F2" [(set_attr "itanium_class" "fmac")]) --- 3061,3067 ---- [(set (match_operand:TF 0 "fr_register_operand" "=f") (plus:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG")))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fadd %0 = %F1, %F2" [(set_attr "itanium_class" "fmac")]) *************** *** 3044,3050 **** (float_truncate:SF (plus:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG"))))] ! "" "fadd.s %0 = %F1, %F2" [(set_attr "itanium_class" "fmac")]) --- 3070,3076 ---- (float_truncate:SF (plus:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG"))))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fadd.s %0 = %F1, %F2" [(set_attr "itanium_class" "fmac")]) *************** *** 3053,3059 **** (float_truncate:DF (plus:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG"))))] ! "" "fadd.d %0 = %F1, %F2" [(set_attr "itanium_class" "fmac")]) --- 3079,3085 ---- (float_truncate:DF (plus:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG"))))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fadd.d %0 = %F1, %F2" [(set_attr "itanium_class" "fmac")]) *************** *** 3061,3067 **** [(set (match_operand:TF 0 "fr_register_operand" "=f") (minus:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG")))] ! "" "fsub %0 = %F1, %F2" [(set_attr "itanium_class" "fmac")]) --- 3087,3093 ---- [(set (match_operand:TF 0 "fr_register_operand" "=f") (minus:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG")))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fsub %0 = %F1, %F2" [(set_attr "itanium_class" "fmac")]) *************** *** 3070,3076 **** (float_truncate:SF (minus:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG"))))] ! "" "fsub.s %0 = %F1, %F2" [(set_attr "itanium_class" "fmac")]) --- 3096,3102 ---- (float_truncate:SF (minus:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG"))))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fsub.s %0 = %F1, %F2" [(set_attr "itanium_class" "fmac")]) *************** *** 3079,3085 **** (float_truncate:DF (minus:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG"))))] ! "" "fsub.d %0 = %F1, %F2" [(set_attr "itanium_class" "fmac")]) --- 3105,3111 ---- (float_truncate:DF (minus:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG"))))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fsub.d %0 = %F1, %F2" [(set_attr "itanium_class" "fmac")]) *************** *** 3087,3093 **** [(set (match_operand:TF 0 "fr_register_operand" "=f") (mult:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG")))] ! "" "fmpy %0 = %F1, %F2" [(set_attr "itanium_class" "fmac")]) --- 3113,3119 ---- [(set (match_operand:TF 0 "fr_register_operand" "=f") (mult:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG")))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fmpy %0 = %F1, %F2" [(set_attr "itanium_class" "fmac")]) *************** *** 3096,3102 **** (float_truncate:SF (mult:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG"))))] ! "" "fmpy.s %0 = %F1, %F2" [(set_attr "itanium_class" "fmac")]) --- 3122,3128 ---- (float_truncate:SF (mult:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG"))))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fmpy.s %0 = %F1, %F2" [(set_attr "itanium_class" "fmac")]) *************** *** 3105,3111 **** (float_truncate:DF (mult:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG"))))] ! "" "fmpy.d %0 = %F1, %F2" [(set_attr "itanium_class" "fmac")]) --- 3131,3137 ---- (float_truncate:DF (mult:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG"))))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fmpy.d %0 = %F1, %F2" [(set_attr "itanium_class" "fmac")]) *************** *** 3114,3120 **** (mult:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG"))) (use (match_operand:SI 3 "const_int_operand" ""))] ! "" "fmpy.s%3 %0 = %F1, %F2" [(set_attr "itanium_class" "fmac")]) --- 3140,3146 ---- (mult:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG"))) (use (match_operand:SI 3 "const_int_operand" ""))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fmpy.s%3 %0 = %F1, %F2" [(set_attr "itanium_class" "fmac")]) *************** *** 3124,3130 **** (mult:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG")))) (use (match_operand:SI 3 "const_int_operand" ""))] ! "" "fmpy.s.s%3 %0 = %F1, %F2" [(set_attr "itanium_class" "fmac")]) --- 3150,3156 ---- (mult:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG")))) (use (match_operand:SI 3 "const_int_operand" ""))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fmpy.s.s%3 %0 = %F1, %F2" [(set_attr "itanium_class" "fmac")]) *************** *** 3134,3161 **** (mult:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG")))) (use (match_operand:SI 3 "const_int_operand" ""))] ! "" "fmpy.d.s%3 %0 = %F1, %F2" [(set_attr "itanium_class" "fmac")]) (define_insn "abstf2" [(set (match_operand:TF 0 "fr_register_operand" "=f") (abs:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG")))] ! "" "fabs %0 = %F1" [(set_attr "itanium_class" "fmisc")]) (define_insn "negtf2" [(set (match_operand:TF 0 "fr_register_operand" "=f") (neg:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG")))] ! "" "fneg %0 = %F1" [(set_attr "itanium_class" "fmisc")]) (define_insn "*nabstf2" [(set (match_operand:TF 0 "fr_register_operand" "=f") (neg:TF (abs:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG"))))] ! "" "fnegabs %0 = %F1" [(set_attr "itanium_class" "fmisc")]) --- 3160,3187 ---- (mult:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG")))) (use (match_operand:SI 3 "const_int_operand" ""))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fmpy.d.s%3 %0 = %F1, %F2" [(set_attr "itanium_class" "fmac")]) (define_insn "abstf2" [(set (match_operand:TF 0 "fr_register_operand" "=f") (abs:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG")))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fabs %0 = %F1" [(set_attr "itanium_class" "fmisc")]) (define_insn "negtf2" [(set (match_operand:TF 0 "fr_register_operand" "=f") (neg:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG")))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fneg %0 = %F1" [(set_attr "itanium_class" "fmisc")]) (define_insn "*nabstf2" [(set (match_operand:TF 0 "fr_register_operand" "=f") (neg:TF (abs:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG"))))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fnegabs %0 = %F1" [(set_attr "itanium_class" "fmisc")]) *************** *** 3163,3169 **** [(set (match_operand:TF 0 "fr_register_operand" "=f") (smin:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG")))] ! "" "fmin %0 = %F1, %F2" [(set_attr "itanium_class" "fmisc")]) --- 3189,3195 ---- [(set (match_operand:TF 0 "fr_register_operand" "=f") (smin:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG")))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fmin %0 = %F1, %F2" [(set_attr "itanium_class" "fmisc")]) *************** *** 3171,3177 **** [(set (match_operand:TF 0 "fr_register_operand" "=f") (smax:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG")))] ! "" "fmax %0 = %F1, %F2" [(set_attr "itanium_class" "fmisc")]) --- 3197,3203 ---- [(set (match_operand:TF 0 "fr_register_operand" "=f") (smax:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG")))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fmax %0 = %F1, %F2" [(set_attr "itanium_class" "fmisc")]) *************** *** 3180,3186 **** (plus:TF (mult:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG")) (match_operand:TF 3 "tfreg_or_fp01_operand" "fG")))] ! "" "fma %0 = %F1, %F2, %F3" [(set_attr "itanium_class" "fmac")]) --- 3206,3212 ---- (plus:TF (mult:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG")) (match_operand:TF 3 "tfreg_or_fp01_operand" "fG")))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fma %0 = %F1, %F2, %F3" [(set_attr "itanium_class" "fmac")]) *************** *** 3190,3196 **** (plus:TF (mult:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG")) (match_operand:TF 3 "tfreg_or_fp01_operand" "fG"))))] ! "" "fma.s %0 = %F1, %F2, %F3" [(set_attr "itanium_class" "fmac")]) --- 3216,3222 ---- (plus:TF (mult:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG")) (match_operand:TF 3 "tfreg_or_fp01_operand" "fG"))))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fma.s %0 = %F1, %F2, %F3" [(set_attr "itanium_class" "fmac")]) *************** *** 3200,3206 **** (plus:TF (mult:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG")) (match_operand:TF 3 "tfreg_or_fp01_operand" "fG"))))] ! "" "fma.d %0 = %F1, %F2, %F3" [(set_attr "itanium_class" "fmac")]) --- 3226,3232 ---- (plus:TF (mult:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG")) (match_operand:TF 3 "tfreg_or_fp01_operand" "fG"))))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fma.d %0 = %F1, %F2, %F3" [(set_attr "itanium_class" "fmac")]) *************** *** 3210,3216 **** (match_operand:TF 2 "tfreg_or_fp01_operand" "fG")) (match_operand:TF 3 "tfreg_or_fp01_operand" "fG"))) (use (match_operand:SI 4 "const_int_operand" ""))] ! "" "fma.s%4 %0 = %F1, %F2, %F3" [(set_attr "itanium_class" "fmac")]) --- 3236,3242 ---- (match_operand:TF 2 "tfreg_or_fp01_operand" "fG")) (match_operand:TF 3 "tfreg_or_fp01_operand" "fG"))) (use (match_operand:SI 4 "const_int_operand" ""))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fma.s%4 %0 = %F1, %F2, %F3" [(set_attr "itanium_class" "fmac")]) *************** *** 3221,3227 **** (match_operand:TF 2 "tfreg_or_fp01_operand" "fG")) (match_operand:TF 3 "tfreg_or_fp01_operand" "fG")))) (use (match_operand:SI 4 "const_int_operand" ""))] ! "" "fma.d.s%4 %0 = %F1, %F2, %F3" [(set_attr "itanium_class" "fmac")]) --- 3247,3253 ---- (match_operand:TF 2 "tfreg_or_fp01_operand" "fG")) (match_operand:TF 3 "tfreg_or_fp01_operand" "fG")))) (use (match_operand:SI 4 "const_int_operand" ""))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fma.d.s%4 %0 = %F1, %F2, %F3" [(set_attr "itanium_class" "fmac")]) *************** *** 3230,3236 **** (minus:TF (mult:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG")) (match_operand:TF 3 "tfreg_or_fp01_operand" "fG")))] ! "" "fms %0 = %F1, %F2, %F3" [(set_attr "itanium_class" "fmac")]) --- 3256,3262 ---- (minus:TF (mult:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG")) (match_operand:TF 3 "tfreg_or_fp01_operand" "fG")))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fms %0 = %F1, %F2, %F3" [(set_attr "itanium_class" "fmac")]) *************** *** 3240,3246 **** (minus:TF (mult:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG")) (match_operand:TF 3 "tfreg_or_fp01_operand" "fG"))))] ! "" "fms.s %0 = %F1, %F2, %F3" [(set_attr "itanium_class" "fmac")]) --- 3266,3272 ---- (minus:TF (mult:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG")) (match_operand:TF 3 "tfreg_or_fp01_operand" "fG"))))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fms.s %0 = %F1, %F2, %F3" [(set_attr "itanium_class" "fmac")]) *************** *** 3250,3256 **** (minus:TF (mult:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG")) (match_operand:TF 3 "tfreg_or_fp01_operand" "fG"))))] ! "" "fms.d %0 = %F1, %F2, %F3" [(set_attr "itanium_class" "fmac")]) --- 3276,3282 ---- (minus:TF (mult:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG")) (match_operand:TF 3 "tfreg_or_fp01_operand" "fG"))))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fms.d %0 = %F1, %F2, %F3" [(set_attr "itanium_class" "fmac")]) *************** *** 3258,3264 **** [(set (match_operand:TF 0 "fr_register_operand" "=f") (neg:TF (mult:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG"))))] ! "" "fnmpy %0 = %F1, %F2" [(set_attr "itanium_class" "fmac")]) --- 3284,3290 ---- [(set (match_operand:TF 0 "fr_register_operand" "=f") (neg:TF (mult:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG"))))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fnmpy %0 = %F1, %F2" [(set_attr "itanium_class" "fmac")]) *************** *** 3268,3274 **** (neg:TF (mult:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG")))))] ! "" "fnmpy.s %0 = %F1, %F2" [(set_attr "itanium_class" "fmac")]) --- 3294,3300 ---- (neg:TF (mult:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG")))))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fnmpy.s %0 = %F1, %F2" [(set_attr "itanium_class" "fmac")]) *************** *** 3278,3284 **** (neg:TF (mult:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG")))))] ! "" "fnmpy.d %0 = %F1, %F2" [(set_attr "itanium_class" "fmac")]) --- 3304,3310 ---- (neg:TF (mult:TF (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG")))))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fnmpy.d %0 = %F1, %F2" [(set_attr "itanium_class" "fmac")]) *************** *** 3290,3296 **** (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG"))) (match_operand:TF 3 "tfreg_or_fp01_operand" "fG")))] ! "" "fnma %0 = %F1, %F2, %F3" [(set_attr "itanium_class" "fmac")]) --- 3316,3322 ---- (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG"))) (match_operand:TF 3 "tfreg_or_fp01_operand" "fG")))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fnma %0 = %F1, %F2, %F3" [(set_attr "itanium_class" "fmac")]) *************** *** 3301,3307 **** (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG"))) (match_operand:TF 3 "tfreg_or_fp01_operand" "fG"))))] ! "" "fnma.s %0 = %F1, %F2, %F3" [(set_attr "itanium_class" "fmac")]) --- 3327,3333 ---- (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG"))) (match_operand:TF 3 "tfreg_or_fp01_operand" "fG"))))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fnma.s %0 = %F1, %F2, %F3" [(set_attr "itanium_class" "fmac")]) *************** *** 3312,3318 **** (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG"))) (match_operand:TF 3 "tfreg_or_fp01_operand" "fG"))))] ! "" "fnma.d %0 = %F1, %F2, %F3" [(set_attr "itanium_class" "fmac")]) --- 3338,3344 ---- (match_operand:TF 1 "tfreg_or_fp01_operand" "fG") (match_operand:TF 2 "tfreg_or_fp01_operand" "fG"))) (match_operand:TF 3 "tfreg_or_fp01_operand" "fG"))))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fnma.d %0 = %F1, %F2, %F3" [(set_attr "itanium_class" "fmac")]) *************** *** 3323,3329 **** (match_operand:TF 2 "tfreg_or_fp01_operand" "fG"))) (match_operand:TF 3 "tfreg_or_fp01_operand" "fG"))) (use (match_operand:SI 4 "const_int_operand" ""))] ! "" "fnma.s%4 %0 = %F1, %F2, %F3" [(set_attr "itanium_class" "fmac")]) --- 3349,3355 ---- (match_operand:TF 2 "tfreg_or_fp01_operand" "fG"))) (match_operand:TF 3 "tfreg_or_fp01_operand" "fG"))) (use (match_operand:SI 4 "const_int_operand" ""))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fnma.s%4 %0 = %F1, %F2, %F3" [(set_attr "itanium_class" "fmac")]) *************** *** 3336,3342 **** (match_operand:TF 2 "tfreg_or_fp01_operand" "fG"))) (match_operand:TF 3 "tfreg_or_fp01_operand" "fG")))) (use (match_operand:SI 4 "const_int_operand" ""))] ! "" "fnma.d.s%4 %0 = %F1, %F2, %F3" [(set_attr "itanium_class" "fmac")]) --- 3362,3368 ---- (match_operand:TF 2 "tfreg_or_fp01_operand" "fG"))) (match_operand:TF 3 "tfreg_or_fp01_operand" "fG")))) (use (match_operand:SI 4 "const_int_operand" ""))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fnma.d.s%4 %0 = %F1, %F2, %F3" [(set_attr "itanium_class" "fmac")]) *************** *** 3344,3350 **** [(set (match_operand:TF 0 "fr_register_operand" "") (div:TF (match_operand:TF 1 "fr_register_operand" "") (match_operand:TF 2 "fr_register_operand" "")))] ! "TARGET_INLINE_DIV" " { rtx insn; --- 3370,3376 ---- [(set (match_operand:TF 0 "fr_register_operand" "") (div:TF (match_operand:TF 1 "fr_register_operand" "") (match_operand:TF 2 "fr_register_operand" "")))] ! "INTEL_EXTENDED_IEEE_FORMAT && TARGET_INLINE_DIV" " { rtx insn; *************** *** 3365,3371 **** (clobber (match_scratch:TF 5 "=&f")) (clobber (match_scratch:TF 6 "=&f")) (clobber (match_scratch:BI 7 "=c"))] ! "TARGET_INLINE_DIV_LAT" "#" "&& reload_completed" [(parallel [(set (match_dup 0) (div:TF (const_int 1) (match_dup 2))) --- 3391,3397 ---- (clobber (match_scratch:TF 5 "=&f")) (clobber (match_scratch:TF 6 "=&f")) (clobber (match_scratch:BI 7 "=c"))] ! "INTEL_EXTENDED_IEEE_FORMAT && TARGET_INLINE_DIV_LAT" "#" "&& reload_completed" [(parallel [(set (match_dup 0) (div:TF (const_int 1) (match_dup 2))) *************** *** 3442,3448 **** (clobber (match_scratch:TF 3 "=&f")) (clobber (match_scratch:TF 4 "=&f")) (clobber (match_scratch:BI 5 "=c"))] ! "TARGET_INLINE_DIV_THR" "#" "&& reload_completed" [(parallel [(set (match_dup 0) (div:TF (const_int 1) (match_dup 2))) --- 3468,3474 ---- (clobber (match_scratch:TF 3 "=&f")) (clobber (match_scratch:TF 4 "=&f")) (clobber (match_scratch:BI 5 "=c"))] ! "INTEL_EXTENDED_IEEE_FORMAT && TARGET_INLINE_DIV_THR" "#" "&& reload_completed" [(parallel [(set (match_dup 0) (div:TF (const_int 1) (match_dup 2))) *************** *** 3522,3528 **** (unspec:BI [(match_operand:TF 2 "fr_register_operand" "f") (match_dup 3)] 5)) (use (match_operand:SI 4 "const_int_operand" ""))] ! "" "frcpa.s%4 %0, %1 = %2, %3" [(set_attr "itanium_class" "fmisc") (set_attr "predicable" "no")]) --- 3548,3554 ---- (unspec:BI [(match_operand:TF 2 "fr_register_operand" "f") (match_dup 3)] 5)) (use (match_operand:SI 4 "const_int_operand" ""))] ! "INTEL_EXTENDED_IEEE_FORMAT" "frcpa.s%4 %0, %1 = %2, %3" [(set_attr "itanium_class" "fmisc") (set_attr "predicable" "no")]) *************** *** 3933,3939 **** [(set (cc0) (compare (match_operand:TF 0 "tfreg_or_fp01_operand" "") (match_operand:TF 1 "tfreg_or_fp01_operand" "")))] ! "" " { ia64_compare_op0 = operands[0]; --- 3959,3965 ---- [(set (cc0) (compare (match_operand:TF 0 "tfreg_or_fp01_operand" "") (match_operand:TF 1 "tfreg_or_fp01_operand" "")))] ! "INTEL_EXTENDED_IEEE_FORMAT" " { ia64_compare_op0 = operands[0]; *************** *** 4006,4012 **** (match_operator:BI 1 "comparison_operator" [(match_operand:TF 2 "tfreg_or_fp01_operand" "fG") (match_operand:TF 3 "tfreg_or_fp01_operand" "fG")]))] ! "" "fcmp.%D1 %0, %I0 = %F2, %F3" [(set_attr "itanium_class" "fcmp")]) --- 4032,4038 ---- (match_operator:BI 1 "comparison_operator" [(match_operand:TF 2 "tfreg_or_fp01_operand" "fG") (match_operand:TF 3 "tfreg_or_fp01_operand" "fG")]))] ! "INTEL_EXTENDED_IEEE_FORMAT" "fcmp.%D1 %0, %I0 = %F2, %F3" [(set_attr "itanium_class" "fcmp")]) *************** *** 4470,4475 **** --- 4496,4556 ---- VOIDmode, operands[1], const0_rtx); }") + (define_insn_and_split "*cond_opsi2_internal" + [(set (match_operand:SI 0 "gr_register_operand" "=r") + (match_operator:SI 5 "condop_operator" + [(if_then_else:SI + (match_operator 6 "predicate_operator" + [(match_operand:BI 1 "register_operand" "c") + (const_int 0)]) + (match_operand:SI 2 "gr_register_operand" "r") + (match_operand:SI 3 "gr_register_operand" "r")) + (match_operand:SI 4 "gr_register_operand" "r")]))] + "" + "#" + "reload_completed" + [(cond_exec + (match_dup 6) + (set (match_dup 0) (match_op_dup:SI 5 [(match_dup 2) (match_dup 4)]))) + (cond_exec + (match_dup 7) + (set (match_dup 0) (match_op_dup:SI 5 [(match_dup 3) (match_dup 4)])))] + " + { + operands[7] = gen_rtx_fmt_ee (GET_CODE (operands[6]) == NE ? EQ : NE, + VOIDmode, operands[1], const0_rtx); + }" + [(set_attr "itanium_class" "ialu") + (set_attr "predicable" "no")]) + + + (define_insn_and_split "*cond_opsi2_internal_b" + [(set (match_operand:SI 0 "gr_register_operand" "=r") + (match_operator:SI 5 "condop_operator" + [(match_operand:SI 4 "gr_register_operand" "r") + (if_then_else:SI + (match_operator 6 "predicate_operator" + [(match_operand:BI 1 "register_operand" "c") + (const_int 0)]) + (match_operand:SI 2 "gr_register_operand" "r") + (match_operand:SI 3 "gr_register_operand" "r"))]))] + "" + "#" + "reload_completed" + [(cond_exec + (match_dup 6) + (set (match_dup 0) (match_op_dup:SI 5 [(match_dup 4) (match_dup 2)]))) + (cond_exec + (match_dup 7) + (set (match_dup 0) (match_op_dup:SI 5 [(match_dup 4) (match_dup 3)])))] + " + { + operands[7] = gen_rtx_fmt_ee (GET_CODE (operands[6]) == NE ? EQ : NE, + VOIDmode, operands[1], const0_rtx); + }" + [(set_attr "itanium_class" "ialu") + (set_attr "predicable" "no")]) + ;; :::::::::::::::::::: ;; :: *************** *** 4593,4599 **** (define_insn "sibcall_nopic" [(call (mem:DI (match_operand:DI 0 "call_operand" "b,i")) (match_operand 1 "" "")) ! (use (match_operand:DI 2 "register_operand" "=b,b"))] "" "br%+.many %0" [(set_attr "itanium_class" "br,scall")]) --- 4674,4681 ---- (define_insn "sibcall_nopic" [(call (mem:DI (match_operand:DI 0 "call_operand" "b,i")) (match_operand 1 "" "")) ! (use (match_operand:DI 2 "register_operand" "=b,b")) ! (use (match_operand:DI 3 "ar_pfs_reg_operand" ""))] "" "br%+.many %0" [(set_attr "itanium_class" "br,scall")]) *************** *** 4621,4627 **** [(call (mem:DI (match_operand:DI 0 "call_operand" "bi")) (match_operand 1 "" "")) (use (unspec [(reg:DI 1)] 9)) ! (use (match_operand:DI 2 "register_operand" "=b"))] "" "br%+.many %0" [(set_attr "itanium_class" "br")]) --- 4703,4710 ---- [(call (mem:DI (match_operand:DI 0 "call_operand" "bi")) (match_operand 1 "" "")) (use (unspec [(reg:DI 1)] 9)) ! (use (match_operand:DI 2 "register_operand" "=b")) ! (use (match_operand:DI 3 "ar_pfs_reg_operand" ""))] "" "br%+.many %0" [(set_attr "itanium_class" "br")]) *************** *** 4676,4696 **** [(set_attr "itanium_class" "br")]) (define_expand "tablejump" ! [(match_operand:DI 0 "register_operand" "") ! (match_operand 1 "" "")] "" - " { ! rtx tmp1 = gen_reg_rtx (DImode); ! rtx tmp2 = gen_reg_rtx (DImode); ! emit_move_insn (tmp1, gen_rtx_LABEL_REF (Pmode, operands[1])); ! emit_insn (gen_adddi3 (tmp2, operands[0], tmp1)); ! emit_jump_insn (gen_tablejump_internal (tmp2, operands[1])); ! DONE; ! }") ! (define_insn "tablejump_internal" [(set (pc) (match_operand:DI 0 "register_operand" "b")) (use (label_ref (match_operand 1 "" "")))] "" --- 4759,4806 ---- [(set_attr "itanium_class" "br")]) (define_expand "tablejump" ! [(parallel [(set (pc) (match_operand:DI 0 "memory_operand" "")) ! (use (label_ref (match_operand 1 "" "")))])] "" { ! rtx op0 = operands[0]; ! rtx addr; ! /* ??? Bother -- do_tablejump is "helpful" and pulls the table ! element into a register without bothering to see whether that ! is necessary given the operand predicate. Check for MEM just ! in case someone fixes this. */ ! if (GET_CODE (op0) == MEM) ! addr = XEXP (op0, 0); ! else ! { ! /* Otherwise, cheat and guess that the previous insn in the ! stream was the memory load. Grab the address from that. ! Note we have to momentarily pop out of the sequence started ! by the insn-emit wrapper in order to grab the last insn. */ ! rtx last, set; ! end_sequence (); ! last = get_last_insn (); ! start_sequence (); ! set = single_set (last); ! ! if (! rtx_equal_p (SET_DEST (set), op0) ! || GET_CODE (SET_SRC (set)) != MEM) ! abort (); ! addr = XEXP (SET_SRC (set), 0); ! if (rtx_equal_p (addr, op0)) ! abort (); ! } ! ! /* Jump table elements are stored pc-relative. That is, a displacement ! from the entry to the label. Thus to convert to an absolute address ! we add the address of the memory from which the value is loaded. */ ! operands[0] = expand_simple_binop (DImode, PLUS, op0, addr, ! NULL_RTX, 1, OPTAB_DIRECT); ! }) ! ! (define_insn "*tablejump_internal" [(set (pc) (match_operand:DI 0 "register_operand" "b")) (use (label_ref (match_operand 1 "" "")))] "" *************** *** 4738,4744 **** [(set (match_operand:DI 0 "register_operand" "=r,r,r") (plus:DI (match_operand:DI 1 "register_operand" "%r,r,a") (match_operand:DI 2 "gr_reg_or_22bit_operand" "r,I,J"))) ! (set (match_operand:DI 3 "register_operand" "=r,r,r") (match_dup 3))] "" "@ --- 4848,4854 ---- [(set (match_operand:DI 0 "register_operand" "=r,r,r") (plus:DI (match_operand:DI 1 "register_operand" "%r,r,a") (match_operand:DI 2 "gr_reg_or_22bit_operand" "r,I,J"))) ! (set (match_operand:DI 3 "register_operand" "+r,r,r") (match_dup 3))] "" "@ *************** *** 4902,4913 **** "" [(set_attr "itanium_class" "nop_x")]) ! (define_expand "cycle_display" ! [(unspec [(match_operand 0 "const_int_operand" "")] 23)] ! "ia64_final_schedule" ! "") ! ! (define_insn "*cycle_display_1" [(unspec [(match_operand 0 "const_int_operand" "")] 23)] "" "// cycle %0" --- 5012,5018 ---- "" [(set_attr "itanium_class" "nop_x")]) ! (define_insn "cycle_display" [(unspec [(match_operand 0 "const_int_operand" "")] 23)] "" "// cycle %0" *************** *** 4940,4950 **** --- 5045,5117 ---- [(set_attr "itanium_class" "stop_bit") (set_attr "predicable" "no")]) + (define_expand "trap" + [(trap_if (const_int 1) (const_int 0))] + "" + "") + + ;; ??? We don't have a match-any slot type. Setting the type to unknown + ;; produces worse code that setting the slot type to A. + + (define_insn "*trap" + [(trap_if (const_int 1) (match_operand 0 "const_int_operand" ""))] + "" + "break %0" + [(set_attr "itanium_class" "chk_s")]) + + (define_expand "conditional_trap" + [(trap_if (match_operand 0 "" "") (match_operand 1 "" ""))] + "" + { + operands[0] = ia64_expand_compare (GET_CODE (operands[0]), VOIDmode); + }) + + (define_insn "*conditional_trap" + [(trap_if (match_operator 0 "predicate_operator" + [(match_operand:BI 1 "register_operand" "c") + (const_int 0)]) + (match_operand 2 "const_int_operand" ""))] + "" + "(%J0) break %2" + [(set_attr "itanium_class" "chk_s") + (set_attr "predicable" "no")]) + (define_insn "break_f" [(unspec_volatile [(const_int 0)] 3)] "" "break.f 0" [(set_attr "itanium_class" "nop_f")]) + + (define_insn "prefetch" + [(prefetch (match_operand:DI 0 "address_operand" "p") + (match_operand:DI 1 "const_int_operand" "n") + (match_operand:DI 2 "const_int_operand" "n"))] + "" + { + static const char * const alt[2][4] = { + { + "lfetch.nta [%0]", + "lfetch.nt1 [%0]", + "lfetch.nt2 [%0]", + "lfetch [%0]" + }, + { + "lfetch.excl.nta [%0]", + "lfetch.excl.nt1 [%0]", + "lfetch.excl.nt2 [%0]", + "lfetch.excl [%0]" + } + }; + int i = (INTVAL (operands[1])); + int j = (INTVAL (operands[2])); + + if (i != 0 && i != 1) + abort (); + if (j < 0 || j > 3) + abort (); + return alt[i][j]; + } + [(set_attr "itanium_class" "lfetch")]) ;; Non-local goto support. *************** *** 5155,5157 **** --- 5322,5345 ---- [(set_attr "itanium_class" "ignore") (set_attr "predicable" "no")]) + ;; + ;; + ;; UNSPEC instruction definition to "swizzle" 32 bit pointer into 64 bit + ;; pointer. This is used by the HP-UX 32 bit mode. + + (define_insn "ptr_extend" + [(set (match_operand:DI 0 "gr_register_operand" "=r") + (unspec:DI [(match_operand:SI 1 "gr_register_operand" "r")] 24))] + "" + "addp4 %0 = 0,%1" + [(set_attr "itanium_class" "ialu")]) + + ;; + ;; As USE insns aren't meaningful after reload, this is used instead + ;; to prevent deleting instructions setting registers for EH handling + (define_insn "prologue_use" + [(unspec:DI [(match_operand:DI 0 "register_operand" "")] 25)] + "" + "// %0 needed for EH" + [(set_attr "itanium_class" "ignore") + (set_attr "predicable" "no")]) diff -Nrc3pad gcc-3.0.4/gcc/config/ia64/ia64intrin.h gcc-3.1/gcc/config/ia64/ia64intrin.h *** gcc-3.0.4/gcc/config/ia64/ia64intrin.h Thu Aug 24 21:40:24 2000 --- gcc-3.1/gcc/config/ia64/ia64intrin.h Mon Jan 21 02:24:02 2002 *************** *** 2,8 **** #define _IA64INTRIN_H_INCLUDED /* Actually, everything is a compiler builtin, but just so ! there's no confusion... */ #ifdef __cplusplus extern "C" { #endif --- 2,8 ---- #define _IA64INTRIN_H_INCLUDED /* Actually, everything is a compiler builtin, but just so ! there's no confusion... */ #ifdef __cplusplus extern "C" { #endif diff -Nrc3pad gcc-3.0.4/gcc/config/ia64/linux.h gcc-3.1/gcc/config/ia64/linux.h *** gcc-3.0.4/gcc/config/ia64/linux.h Sat Nov 3 20:28:24 2001 --- gcc-3.1/gcc/config/ia64/linux.h Mon Apr 15 20:27:29 2002 *************** *** 5,22 **** #define TARGET_VERSION fprintf (stderr, " (IA-64) Linux"); ! /* This is for -profile to use -lc_p instead of -lc. */ #undef CC1_SPEC #define CC1_SPEC "%{profile:-p} %{G*}" /* ??? Maybe this should be in sysv4.h? */ #define CPP_PREDEFINES "\ ! -D__ia64 -D__ia64__ -D__linux -D__linux__ -D_LONGLONG -Dlinux -Dunix \ ! -D__LP64__ -D__ELF__ -Asystem=linux -Acpu=ia64 -Amachine=ia64" ! /* ??? ia64 gas doesn't accept standard svr4 assembler options? */ ! #undef ASM_SPEC ! #define ASM_SPEC "-x %{mconstant-gp} %{mauto-pic}" /* Define this for shared library support because it isn't in the main linux.h file. */ --- 5,33 ---- #define TARGET_VERSION fprintf (stderr, " (IA-64) Linux"); ! /* This is for -profile to use -lc_p instead of -lc. */ #undef CC1_SPEC #define CC1_SPEC "%{profile:-p} %{G*}" /* ??? Maybe this should be in sysv4.h? */ #define CPP_PREDEFINES "\ ! -D__gnu_linux__ -D__linux -D__linux__ -D_LONGLONG \ ! -Dlinux -Dunix -Asystem=linux" ! /* Need to override linux.h STARTFILE_SPEC, since it has crtbeginT.o in. */ ! #undef STARTFILE_SPEC ! #define STARTFILE_SPEC \ ! "%{!shared: \ ! %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} \ ! %{!p:%{profile:gcrt1.o%s} \ ! %{!profile:crt1.o%s}}}} \ ! crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}" ! ! /* Similar to standard Linux, but adding -ffast-math support. */ ! #undef ENDFILE_SPEC ! #define ENDFILE_SPEC \ ! "%{ffast-math|funsafe-math-optimizations:crtfastmath.o%s} \ ! %{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s" /* Define this for shared library support because it isn't in the main linux.h file. */ *************** *** 31,65 **** %{static:-static}}" - #define DONT_USE_BUILTIN_SETJMP #define JMP_BUF_SIZE 76 ! /* Output any profiling code before the prologue. */ ! #undef PROFILE_BEFORE_PROLOGUE ! #define PROFILE_BEFORE_PROLOGUE 1 ! /* A C statement or compound statement to output to FILE some assembler code to ! call the profiling subroutine `mcount'. */ ! #undef FUNCTION_PROFILER ! #define FUNCTION_PROFILER(FILE, LABELNO) \ ! do { \ ! char buf[20]; \ ! ASM_GENERATE_INTERNAL_LABEL (buf, "LP", LABELNO); \ ! fputs ("\talloc out0 = ar.pfs, 8, 0, 4, 0\n", FILE); \ ! if (TARGET_AUTO_PIC) \ ! fputs ("\tmovl out3 = @gprel(", FILE); \ ! else \ ! fputs ("\taddl out3 = @ltoff(", FILE); \ ! assemble_name (FILE, buf); \ ! if (TARGET_AUTO_PIC) \ ! fputs (");;\n", FILE); \ ! else \ ! fputs ("), r1;;\n", FILE); \ ! fputs ("\tmov out1 = r1\n", FILE); \ ! fputs ("\tmov out2 = b0\n", FILE); \ ! fputs ("\tbr.call.sptk.many b0 = _mcount;;\n", FILE); \ ! } while (0) ! /* End of linux.h */ --- 42,118 ---- %{static:-static}}" #define JMP_BUF_SIZE 76 ! /* Override linux.h LINK_EH_SPEC definition. ! Signalize that because we have fde-glibc, we don't need all C shared libs ! linked against -lgcc_s. */ ! #undef LINK_EH_SPEC ! #define LINK_EH_SPEC "" ! /* Do code reading to identify a signal frame, and set the frame ! state data appropriately. See unwind-dw2.c for the structs. */ ! #ifdef IN_LIBGCC2 ! #include ! #include ! #define IA64_GATE_AREA_START 0xa000000000000100LL ! #define IA64_GATE_AREA_END 0xa000000000010000LL ! #define MD_FALLBACK_FRAME_STATE_FOR(CONTEXT, FS, SUCCESS) \ ! if ((CONTEXT)->rp >= IA64_GATE_AREA_START \ ! && (CONTEXT)->rp < IA64_GATE_AREA_END) \ ! { \ ! struct sigframe { \ ! char scratch[16]; \ ! unsigned long sig_number; \ ! struct siginfo *info; \ ! struct sigcontext *sc; \ ! } *frame_ = (struct sigframe *)(CONTEXT)->psp; \ ! struct sigcontext *sc_ = frame_->sc; \ ! \ ! /* Restore scratch registers in case the unwinder needs to \ ! refer to a value stored in one of them. */ \ ! { \ ! int i_; \ ! \ ! for (i_ = 2; i_ < 4; i_++) \ ! (CONTEXT)->ireg[i_ - 2].loc = &sc_->sc_gr[i_]; \ ! for (i_ = 8; i_ < 12; i_++) \ ! (CONTEXT)->ireg[i_ - 2].loc = &sc_->sc_gr[i_]; \ ! for (i_ = 14; i_ < 32; i_++) \ ! (CONTEXT)->ireg[i_ - 2].loc = &sc_->sc_gr[i_]; \ ! } \ ! \ ! (CONTEXT)->pfs_loc = &(sc_->sc_ar_pfs); \ ! (CONTEXT)->lc_loc = &(sc_->sc_ar_lc); \ ! (CONTEXT)->unat_loc = &(sc_->sc_ar_unat); \ ! (CONTEXT)->br_loc[0] = &(sc_->sc_br[0]); \ ! (CONTEXT)->bsp = sc_->sc_ar_bsp; \ ! (CONTEXT)->pr = sc_->sc_pr; \ ! (CONTEXT)->psp = sc_->sc_gr[12]; \ ! (CONTEXT)->gp = sc_->sc_gr[1]; \ ! /* Signal frame doesn't have an associated reg. stack frame \ ! other than what we adjust for below. */ \ ! (FS) -> no_reg_stack_frame = 1; \ ! \ ! /* Don't touch the branch registers o.t. b0. The kernel doesn't \ ! pass the preserved branch registers in the sigcontext but \ ! leaves them intact, so there's no need to do anything \ ! with them here. */ \ ! \ ! { \ ! unsigned long sof = sc_->sc_cfm & 0x7f; \ ! (CONTEXT)->bsp = (unsigned long) \ ! ia64_rse_skip_regs ((unsigned long *)(sc_->sc_ar_bsp), -sof); \ ! } \ ! \ ! (FS)->curr.reg[UNW_REG_RP].where = UNW_WHERE_SPREL; \ ! (FS)->curr.reg[UNW_REG_RP].val \ ! = (unsigned long)&(sc_->sc_ip) - (CONTEXT)->psp; \ ! (FS)->curr.reg[UNW_REG_RP].when = -1; \ ! \ ! goto SUCCESS; \ ! } ! #endif /* IN_LIBGCC2 */ diff -Nrc3pad gcc-3.0.4/gcc/config/ia64/quadlib.c gcc-3.1/gcc/config/ia64/quadlib.c *** gcc-3.0.4/gcc/config/ia64/quadlib.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/ia64/quadlib.c Tue Jun 26 03:50:48 2001 *************** *** 0 **** --- 1,82 ---- + /* Subroutines for long double support. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + In addition to the permissions in the GNU General Public License, the + Free Software Foundation gives you unlimited permission to link the + compiled version of this file into combinations with other programs, + and to distribute those combinations without any restriction coming + from the use of this file. (The General Public License restrictions + do apply in other respects; for example, they cover modification of + the file, and distribution when not linked into a combine + executable.) + + 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. */ + + int _U_Qfcmp (long double a, long double b, int); + long _U_Qfcnvfxt_quad_to_sgl (long double); + + int + _U_Qfeq (long double a, long double b) + { + return (_U_Qfcmp (a, b, 4) != 0); + } + + int + _U_Qfne (long double a, long double b) + { + return (_U_Qfcmp (a, b, 4) == 0); + } + + int + _U_Qfgt (long double a, long double b) + { + return (_U_Qfcmp (a, b, 17) != 0); + } + + int + _U_Qfge (long double a, long double b) + { + return (_U_Qfcmp (a, b, 21) != 0); + } + + int + _U_Qflt (long double a, long double b) + { + return (_U_Qfcmp (a, b, 9) != 0); + } + + int + _U_Qfle (long double a, long double b) + { + return (_U_Qfcmp (a, b, 13) != 0); + } + + int + _U_Qfcomp (long double a, long double b) + { + if (_U_Qfcmp (a, b, 4) == 0) + return 0; + + return (_U_Qfcmp (a, b, 22) != 0 ? 1 : -1); + } + + long double + _U_Qfneg (long double a) + { + return (0.0L - a); + } diff -Nrc3pad gcc-3.0.4/gcc/config/ia64/sysv4.h gcc-3.1/gcc/config/ia64/sysv4.h *** gcc-3.0.4/gcc/config/ia64/sysv4.h Mon Apr 16 18:25:49 2001 --- gcc-3.1/gcc/config/ia64/sysv4.h Fri Apr 12 14:42:52 2002 *************** *** 4,15 **** #undef PREFERRED_DEBUGGING_TYPE #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG /* Various pseudo-ops for which the Intel assembler uses non-standard definitions. */ - #undef ASM_BYTE_OP - #define ASM_BYTE_OP "\tdata1\t" - #undef STRING_ASM_OP #define STRING_ASM_OP "\tstringz\t" --- 4,15 ---- #undef PREFERRED_DEBUGGING_TYPE #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG + /* Stabs does not work properly for 64-bit targets. */ + #undef DBX_DEBUGGING_INFO + /* Various pseudo-ops for which the Intel assembler uses non-standard definitions. */ #undef STRING_ASM_OP #define STRING_ASM_OP "\tstringz\t" *************** *** 22,27 **** --- 22,32 ---- #undef ASCII_DATA_ASM_OP #define ASCII_DATA_ASM_OP "\tstring\t" + /* ia64-specific options for gas + ??? ia64 gas doesn't accept standard svr4 assembler options? */ + #undef ASM_SPEC + #define ASM_SPEC "-x %{mconstant-gp} %{mauto-pic} %(asm_extra)" + /* ??? Unfortunately, .lcomm doesn't work, because it puts things in either .bss or .sbss, and we can't control the decision of which is used. When I use .lcomm, I get a cryptic "Section group has no member" error from *************** do { \ *** 47,71 **** ASM_OUTPUT_SKIP (FILE, SIZE ? SIZE : 1); \ } while (0) - /* ??? Intel assembler does not allow "." in section names, so turn off - gnu.linkonce section support, but only when using the Intel assembler. */ - #undef UNIQUE_SECTION_P - #define UNIQUE_SECTION_P(DECL) (TARGET_GNU_AS ? DECL_ONE_ONLY (DECL) : 0) - /* The # tells the Intel assembler that this is not a register name. However, we can't emit the # in a label definition, so we set a variable ! in ASM_OUTPUT_LABEL to control whether we want the postfix here or not. */ #undef ASM_OUTPUT_LABELREF ! #define ASM_OUTPUT_LABELREF(STREAM, NAME) \ ! do \ ! { \ ! const char *real_name; \ ! STRIP_NAME_ENCODING (real_name, NAME); \ ! asm_fprintf (STREAM, "%U%s%s", real_name, \ ! (ia64_asm_output_label ? "" : "#")); \ ! } \ ! while (0) /* Intel assembler requires both flags and type if declaring a non-predefined section. */ --- 52,77 ---- ASM_OUTPUT_SKIP (FILE, SIZE ? SIZE : 1); \ } while (0) /* The # tells the Intel assembler that this is not a register name. However, we can't emit the # in a label definition, so we set a variable ! in ASM_OUTPUT_LABEL to control whether we want the postfix here or not. ! We append the # to the label name, but since NAME can be an expression ! we have to scan it for a non-label character and insert the # there. */ #undef ASM_OUTPUT_LABELREF ! #define ASM_OUTPUT_LABELREF(STREAM, NAME) \ ! do { \ ! const char *name_ = NAME; \ ! if (*name_ == SDATA_NAME_FLAG_CHAR) \ ! name_++; \ ! if (*name_ == '*') \ ! name_++; \ ! else \ ! fputs (user_label_prefix, STREAM); \ ! fputs (name_, STREAM); \ ! if (!ia64_asm_output_label) \ ! fputc ('#', STREAM); \ ! } while (0) /* Intel assembler requires both flags and type if declaring a non-predefined section. */ *************** while (0) *** 73,118 **** #define INIT_SECTION_ASM_OP "\t.section\t.init,\"ax\",\"progbits\"" #undef FINI_SECTION_ASM_OP #define FINI_SECTION_ASM_OP "\t.section\t.fini,\"ax\",\"progbits\"" - #undef CTORS_SECTION_ASM_OP - #define CTORS_SECTION_ASM_OP "\t.section\t.ctors,\"aw\",\"progbits\"" - #undef DTORS_SECTION_ASM_OP - #define DTORS_SECTION_ASM_OP "\t.section\t.dtors,\"aw\",\"progbits\"" - - /* A C statement (sans semicolon) to output an element in the table of - global constructors. */ - /* Must override this to get @fptr relocation. */ - #undef ASM_OUTPUT_CONSTRUCTOR - #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ - do { \ - ctors_section (); \ - if (TARGET_NO_PIC || TARGET_AUTO_PIC) \ - fputs ("\tdata8\t ", FILE); \ - else \ - fputs ("\tdata8\t @fptr(", FILE); \ - assemble_name (FILE, NAME); \ - if (TARGET_NO_PIC || TARGET_AUTO_PIC) \ - fputs ("\n", FILE); \ - else \ - fputs (")\n", FILE); \ - } while (0) - - /* A C statement (sans semicolon) to output an element in the table of - global destructors. */ - /* Must override this to get @fptr relocation. */ - #undef ASM_OUTPUT_DESTRUCTOR - #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \ - do { \ - dtors_section (); \ - if (TARGET_NO_PIC || TARGET_AUTO_PIC) \ - fputs ("\tdata8\t ", FILE); \ - else \ - fputs ("\tdata8\t @fptr(", FILE); \ - assemble_name (FILE, NAME); \ - if (TARGET_NO_PIC || TARGET_AUTO_PIC) \ - fputs ("\n", FILE); \ - else \ - fputs (")\n", FILE); \ - } while (0) /* svr4.h undefines this, so we need to define it here. */ #define DBX_REGISTER_NUMBER(REGNO) \ --- 79,84 ---- *************** do { \ *** 174,193 **** emit_safe_across_calls (STREAM); \ } while (0) - /* Case label alignment is handled by ADDR_VEC_ALIGN now. */ - - #undef ASM_OUTPUT_BEFORE_CASE_LABEL - #define ASM_OUTPUT_BEFORE_CASE_LABEL(FILE,PREFIX,NUM,TABLE) - /* We override svr4.h so that we can support the sdata section. */ #undef SELECT_SECTION ! #define SELECT_SECTION(DECL,RELOC) \ { \ if (TREE_CODE (DECL) == STRING_CST) \ { \ if (! flag_writable_strings) \ ! const_section (); \ else \ data_section (); \ } \ --- 140,154 ---- emit_safe_across_calls (STREAM); \ } while (0) /* We override svr4.h so that we can support the sdata section. */ #undef SELECT_SECTION ! #define SELECT_SECTION(DECL,RELOC,ALIGN) \ { \ if (TREE_CODE (DECL) == STRING_CST) \ { \ if (! flag_writable_strings) \ ! mergeable_string_section ((DECL), (ALIGN), 0); \ else \ data_section (); \ } \ *************** do { \ *** 196,208 **** if (XSTR (XEXP (DECL_RTL (DECL), 0), 0)[0] \ == SDATA_NAME_FLAG_CHAR) \ sdata_section (); \ ! /* ??? We need the extra ! RELOC check, because the default is to \ only check RELOC if flag_pic is set, and we don't set flag_pic \ (yet?). */ \ ! else if (DECL_READONLY_SECTION (DECL, RELOC) && ! (RELOC)) \ const_section (); \ else \ ! data_section (); \ } \ /* This could be a CONSTRUCTOR containing ADDR_EXPR of a VAR_DECL, \ in which case we can't put it in a shared library rodata. */ \ --- 157,176 ---- if (XSTR (XEXP (DECL_RTL (DECL), 0), 0)[0] \ == SDATA_NAME_FLAG_CHAR) \ sdata_section (); \ ! /* ??? We need the extra RELOC check, because the default is to \ only check RELOC if flag_pic is set, and we don't set flag_pic \ (yet?). */ \ ! else if (!DECL_READONLY_SECTION (DECL, RELOC) || (RELOC)) \ ! data_section (); \ ! else if (flag_merge_constants < 2) \ ! /* C and C++ don't allow different variables to share \ ! the same location. -fmerge-all-constants allows \ ! even that (at the expense of not conforming). */ \ const_section (); \ + else if (TREE_CODE (DECL_INITIAL (DECL)) == STRING_CST) \ + mergeable_string_section (DECL_INITIAL (DECL), (ALIGN), 0); \ else \ ! mergeable_constant_section (DECL_MODE (DECL), (ALIGN), 0); \ } \ /* This could be a CONSTRUCTOR containing ADDR_EXPR of a VAR_DECL, \ in which case we can't put it in a shared library rodata. */ \ *************** do { \ *** 216,222 **** extern unsigned int ia64_section_threshold; #undef SELECT_RTX_SECTION ! #define SELECT_RTX_SECTION(MODE, RTX) \ { \ if (GET_MODE_SIZE (MODE) > 0 \ && GET_MODE_SIZE (MODE) <= ia64_section_threshold) \ --- 184,190 ---- extern unsigned int ia64_section_threshold; #undef SELECT_RTX_SECTION ! #define SELECT_RTX_SECTION(MODE, RTX, ALIGN) \ { \ if (GET_MODE_SIZE (MODE) > 0 \ && GET_MODE_SIZE (MODE) <= ia64_section_threshold) \ *************** extern unsigned int ia64_section_thresho *** 224,240 **** else if (flag_pic && symbolic_operand ((RTX), (MODE))) \ data_section (); \ else \ ! const_section (); \ } #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_const, in_ctors, in_dtors, in_sdata, in_sbss #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ CONST_SECTION_FUNCTION \ - CTORS_SECTION_FUNCTION \ - DTORS_SECTION_FUNCTION \ SDATA_SECTION_FUNCTION \ SBSS_SECTION_FUNCTION --- 192,206 ---- else if (flag_pic && symbolic_operand ((RTX), (MODE))) \ data_section (); \ else \ ! mergeable_constant_section ((MODE), (ALIGN), 0); \ } #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_const, in_sdata, in_sbss #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ CONST_SECTION_FUNCTION \ SDATA_SECTION_FUNCTION \ SBSS_SECTION_FUNCTION diff -Nrc3pad gcc-3.0.4/gcc/config/ia64/t-aix gcc-3.1/gcc/config/ia64/t-aix *** gcc-3.0.4/gcc/config/ia64/t-aix Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/ia64/t-aix Thu Jul 12 02:55:24 2001 *************** *** 0 **** --- 1,19 ---- + # AIX support + + # Compile crtbeginS.o and crtendS.o with pic. + CRTSTUFF_T_CFLAGS_S = -fPIC + # Compile libgcc2.a with pic and defines required by AIX headers + TARGET_LIBGCC2_CFLAGS = -fPIC -D__64BIT__ -D_LONG_LONG -D_IA64 -D__int128=__size128_t + LIB2ADDEH += $(srcdir)/config/ia64/unwind-aix.c + + # Add crt[in].o to the list defined in t-ia64. These files provide + # endpoints for crtbegin/end. + + EXTRA_PARTS=crti.o crtn.o crtbegin.o crtend.o crtbeginS.o crtendS.o + + crti.o: $(srcdir)/config/ia64/crti.asm $(GCC_PASSES) + $(GCC_FOR_TARGET) -c -o crti.o -x assembler $(srcdir)/config/ia64/crti.asm + crtn.o: $(srcdir)/config/ia64/crtn.asm $(GCC_PASSES) + $(GCC_FOR_TARGET) -c -o crtn.o -x assembler $(srcdir)/config/ia64/crtn.asm + + # end t-aix diff -Nrc3pad gcc-3.0.4/gcc/config/ia64/t-hpux gcc-3.1/gcc/config/ia64/t-hpux *** gcc-3.0.4/gcc/config/ia64/t-hpux Fri Mar 16 04:42:09 2001 --- gcc-3.1/gcc/config/ia64/t-hpux Thu Jul 19 23:26:51 2001 *************** *** 1,6 **** ! # HP-UX gets an undefined main when building LIBGCC1_TEST because the ! # linkspec has "-u main" and we want that for linking but it makes ! # LIBGCC1_TEST fail because it uses -nostdlib -nostartup and main is ! # not defined in the test program. ! LIBGCC1_TEST = --- 1,15 ---- ! # We need multilib support for HPUX's ILP32 & LP64 modes. ! LIBGCC = stmp-multilib ! INSTALL_LIBGCC = install-multilib ! ! MULTILIB_OPTIONS = milp32/mlp64 ! MULTILIB_DIRNAMES = hpux32 hpux64 ! MULTILIB_MATCHES = ! ! # Support routines for HP-UX 128 bit floats. ! ! LIB2FUNCS_EXTRA=quadlib.c ! ! quadlib.c: $(srcdir)/config/ia64/quadlib.c ! cat $(srcdir)/config/ia64/quadlib.c > quadlib.c diff -Nrc3pad gcc-3.0.4/gcc/config/ia64/t-ia64 gcc-3.1/gcc/config/ia64/t-ia64 *** gcc-3.0.4/gcc/config/ia64/t-ia64 Sun May 13 07:10:10 2001 --- gcc-3.1/gcc/config/ia64/t-ia64 Wed Jan 2 22:50:01 2002 *************** *** 1,13 **** - # Name of assembly file containing libgcc1 functions. - # This entry must be present, but it can be empty if the target does - # not need any assembler functions to support its code generation. - CROSS_LIBGCC1 = libgcc1-asm.a - LIBGCC1 = libgcc1-asm.a LIB1ASMSRC = ia64/lib1funcs.asm ! # ??? We change the names of the DImode div/mod files so that they won't ! # accidentally be overridden by libgcc2.c files. We used to use __ia64 as ! # a prefix, now we use __ as the prefix. LIB1ASMFUNCS = __divtf3 __divdf3 __divsf3 \ __divdi3 __moddi3 __udivdi3 __umoddi3 \ __divsi3 __modsi3 __udivsi3 __umodsi3 __save_stack_nonlocal \ --- 1,10 ---- LIB1ASMSRC = ia64/lib1funcs.asm ! # We use different names for the DImode div/mod files so that they won't ! # conflict with libgcc2.c files. We used to use __ia64 as a prefix, now ! # we use __ as the prefix. Note that L_divdi3 in libgcc2.c actually defines ! # a TImode divide function, so there is no actual overlap here between ! # libgcc2.c and lib1funcs.asm. LIB1ASMFUNCS = __divtf3 __divdf3 __divsf3 \ __divdi3 __moddi3 __udivdi3 __umoddi3 \ __divsi3 __modsi3 __udivsi3 __umodsi3 __save_stack_nonlocal \ *************** SHLIB_MAPFILES += $(srcdir)/config/ia64/ *** 25,31 **** # For svr4 we build crtbegin.o and crtend.o which serve to add begin and # end labels to the .ctors and .dtors section when we link using gcc. ! EXTRA_PARTS=crtbegin.o crtend.o crtbeginS.o crtendS.o # Effectively disable the crtbegin/end rules using crtstuff.c T = disable --- 22,28 ---- # For svr4 we build crtbegin.o and crtend.o which serve to add begin and # end labels to the .ctors and .dtors section when we link using gcc. ! EXTRA_PARTS=crtbegin.o crtend.o crtbeginS.o crtendS.o crtfastmath.o # Effectively disable the crtbegin/end rules using crtstuff.c T = disable *************** crtbeginS.o: $(srcdir)/config/ia64/crtbe *** 39,44 **** $(GCC_FOR_TARGET) -DSHARED -c -o crtbeginS.o -x assembler-with-cpp $(srcdir)/config/ia64/crtbegin.asm crtendS.o: $(srcdir)/config/ia64/crtend.asm $(GCC_PASSES) $(GCC_FOR_TARGET) -DSHARED -c -o crtendS.o -x assembler-with-cpp $(srcdir)/config/ia64/crtend.asm - EXTRA_HEADERS = $(srcdir)/config/ia64/ia64intrin.h LIB2ADDEH = $(srcdir)/config/ia64/unwind-ia64.c $(srcdir)/unwind-sjlj.c --- 36,42 ---- $(GCC_FOR_TARGET) -DSHARED -c -o crtbeginS.o -x assembler-with-cpp $(srcdir)/config/ia64/crtbegin.asm crtendS.o: $(srcdir)/config/ia64/crtend.asm $(GCC_PASSES) $(GCC_FOR_TARGET) -DSHARED -c -o crtendS.o -x assembler-with-cpp $(srcdir)/config/ia64/crtend.asm + crtfastmath.o: $(srcdir)/config/ia64/crtfastmath.c $(GCC_PASSES) + $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -c -o crtfastmath.o $(srcdir)/config/ia64/crtfastmath.c LIB2ADDEH = $(srcdir)/config/ia64/unwind-ia64.c $(srcdir)/unwind-sjlj.c diff -Nrc3pad gcc-3.0.4/gcc/config/ia64/unwind-aix.c gcc-3.1/gcc/config/ia64/unwind-aix.c *** gcc-3.0.4/gcc/config/ia64/unwind-aix.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/ia64/unwind-aix.c Mon Jan 21 02:24:02 2002 *************** *** 0 **** --- 1,120 ---- + /* Implements unwind table entry lookup for AIX (cf. fde-glibc.c). + Copyright (C) 2001, 2002 Free Software Foundation, Inc. + Contributed by Timothy Wall + + 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 "tconfig.h" + #include "tsystem.h" + #include "unwind.h" + #include "unwind-ia64.h" + + #include + #include + #include + + static struct unw_table_entry * + find_fde_for_dso (Elf64_Addr pc, rt_link_map *map, + unsigned long* pseg_base, unsigned long* pgp) + { + rt_segment *seg; + Elf64_Addr seg_base; + struct unw_table_entry *f_base; + size_t lo, hi; + + /* See if PC falls into one of the loaded segments. */ + for (seg = map->l_segments; seg; seg = (rt_segment *)seg->s_next) + { + if (pc >= seg->s_map_addr && pc < seg->s_map_addr + seg->s_mapsz) + break; + } + if (!seg) + return NULL; + + /* Search for the entry within the unwind table. */ + f_base = (struct unw_table_entry *) (map->l_unwind_table); + seg_base = (Elf64_Addr) seg->s_map_addr; + lo = 0; + hi = map->l_unwind_sz / sizeof (struct unw_table_entry); + + while (lo < hi) + { + size_t mid = (lo + hi) / 2; + struct unw_table_entry *f = f_base + mid; + + if (pc < f->start_offset + seg_base) + hi = mid; + else if (pc >= f->end_offset + seg_base) + lo = mid + 1; + else { + /* AIX executables are *always* dynamic. Look up GP for this + object. */ + Elf64_Dyn *dyn = map->l_ld; + *pgp = 0; + for (; dyn->d_tag != DT_NULL ; dyn++) + { + if (dyn->d_tag == DT_PLTGOT) + { + *pgp = dyn->d_un.d_ptr; + break; + } + } + *pseg_base = seg_base; + return f; + } + } + return NULL; + } + + /* Return a pointer to the unwind table entry for the function containing + PC. */ + struct unw_table_entry * + _Unwind_FindTableEntry (void *pc, unsigned long *pseg_base, unsigned long *pgp) + { + extern rt_r_debug _r_debug; + struct unw_table_entry *ret; + rt_link_map *map = _r_debug.r_map; /* address of link map */ + + /* Check the main application first, hoping that most of the user's + code is there instead of in some library. */ + ret = find_fde_for_dso ((Elf64_Addr)pc, map, pseg_base, pgp); + if (ret) + { + /* If we're in the main application, use the current GP value. */ + register unsigned long gp __asm__("gp"); + *pgp = gp; + return ret; + } + + /* FIXME need a DSO lock mechanism for AIX here, to ensure shared + libraries aren't changed while we're examining them. */ + + for (map = _r_debug.r_map; map; map = map->l_next) + { + /* Skip the main application's entry. */ + if (!map->l_name) + continue; + ret = find_fde_for_dso ((Elf64_Addr)pc, map, pseg_base, pgp); + if (ret) + break; + } + + /* FIXME need a DSO unlock mechanism for AIX here. */ + + return ret; + } diff -Nrc3pad gcc-3.0.4/gcc/config/ia64/unwind-ia64.c gcc-3.1/gcc/config/ia64/unwind-ia64.c *** gcc-3.0.4/gcc/config/ia64/unwind-ia64.c Sun May 13 07:10:10 2001 --- gcc-3.1/gcc/config/ia64/unwind-ia64.c Mon Apr 1 23:29:46 2002 *************** *** 1,6 **** /* Subroutines needed for unwinding IA-64 standard format stack frame info for exception handling. ! Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Andrew MacLeod Andrew Haley David Mosberger-Tang --- 1,7 ---- /* Subroutines needed for unwinding IA-64 standard format stack frame info for exception handling. ! Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 ! Free Software Foundation, Inc. Contributed by Andrew MacLeod Andrew Haley David Mosberger-Tang *************** *** 34,44 **** #include "tsystem.h" #include "unwind.h" #include "unwind-ia64.h" ! #if !USING_SJLJ_EXCEPTIONS ! #define inline ! #define UNW_VER(x) ((x) >> 48) #define UNW_FLAG_MASK 0x0000ffff00000000 #define UNW_FLAG_OSMASK 0x0000f00000000000 --- 35,46 ---- #include "tsystem.h" #include "unwind.h" #include "unwind-ia64.h" + #include "ia64intrin.h" ! /* This isn't thread safe, but nice for occasional tests. */ ! #undef ENABLE_MALLOC_CHECKING ! #ifndef __USING_SJLJ_EXCEPTIONS__ #define UNW_VER(x) ((x) >> 48) #define UNW_FLAG_MASK 0x0000ffff00000000 #define UNW_FLAG_OSMASK 0x0000f00000000000 *************** enum unw_register_index *** 93,99 **** UNW_REG_F31 = UNW_REG_F2 + 29, /* Branch registers. */ ! UNW_REG_B1, UNW_REG_B5 = UNW_REG_B1 + 4, UNW_NUM_REGS --- 95,101 ---- UNW_REG_F31 = UNW_REG_F2 + 29, /* Branch registers. */ ! UNW_REG_B0, UNW_REG_B1, UNW_REG_B5 = UNW_REG_B1 + 4, UNW_NUM_REGS *************** struct unw_reg_info *** 123,135 **** int when; /* when the register gets saved */ }; typedef struct unw_state_record { unsigned int first_region : 1; /* is this the first region? */ unsigned int done : 1; /* are we done scanning descriptors? */ unsigned int any_spills : 1; /* got any register spills? */ unsigned int in_body : 1; /* are we inside a body? */ ! unsigned char *imask; /* imask of of spill_mask record or NULL */ unsigned long pr_val; /* predicate values */ unsigned long pr_mask; /* predicate mask */ --- 125,148 ---- int when; /* when the register gets saved */ }; + struct unw_reg_state { + struct unw_reg_state *next; /* next (outer) element on state stack */ + struct unw_reg_info reg[UNW_NUM_REGS]; /* register save locations */ + }; + + struct unw_labeled_state { + struct unw_labeled_state *next; /* next labeled state (or NULL) */ + unsigned long label; /* label for this state */ + struct unw_reg_state saved_state; + }; + typedef struct unw_state_record { unsigned int first_region : 1; /* is this the first region? */ unsigned int done : 1; /* are we done scanning descriptors? */ unsigned int any_spills : 1; /* got any register spills? */ unsigned int in_body : 1; /* are we inside a body? */ ! unsigned int no_reg_stack_frame : 1; /* Don't adjust bsp for i&l regs */ unsigned char *imask; /* imask of of spill_mask record or NULL */ unsigned long pr_val; /* predicate values */ unsigned long pr_mask; /* predicate mask */ *************** typedef struct unw_state_record *** 143,153 **** unsigned char gr_save_loc; /* next general register to use for saving */ unsigned char return_link_reg; /* branch register for return link */ ! struct unw_reg_state { ! struct unw_reg_state *next; ! unsigned long label; /* label of this state record */ ! struct unw_reg_info reg[UNW_NUM_REGS]; ! } curr, *stack, *reg_state_list; _Unwind_Personality_Fn personality; --- 156,163 ---- unsigned char gr_save_loc; /* next general register to use for saving */ unsigned char return_link_reg; /* branch register for return link */ ! struct unw_labeled_state *labeled_states; /* list of all labeled states */ ! struct unw_reg_state curr; /* current state */ _Unwind_Personality_Fn personality; *************** struct _Unwind_Context *** 174,180 **** unsigned long regstk_top; /* bsp for first frame */ /* Current frame info. */ ! unsigned long bsp; /* backing store pointer value */ unsigned long sp; /* stack pointer value */ unsigned long psp; /* previous sp value */ unsigned long rp; /* return pointer */ --- 184,191 ---- unsigned long regstk_top; /* bsp for first frame */ /* Current frame info. */ ! unsigned long bsp; /* backing store pointer value ! corresponding to psp. */ unsigned long sp; /* stack pointer value */ unsigned long psp; /* previous sp value */ unsigned long rp; /* return pointer */ *************** struct _Unwind_Context *** 185,193 **** void *lsda; /* language specific data area */ /* Preserved state. */ ! unsigned long *bsp_loc; /* previous bsp save location */ unsigned long *bspstore_loc; ! unsigned long *pfs_loc; unsigned long *pri_unat_loc; unsigned long *unat_loc; unsigned long *lc_loc; --- 196,207 ---- void *lsda; /* language specific data area */ /* Preserved state. */ ! unsigned long *bsp_loc; /* previous bsp save location ! Appears to be write-only? */ unsigned long *bspstore_loc; ! unsigned long *pfs_loc; /* Save location for pfs in current ! (corr. to sp) frame. Target ! contains cfm for caller. */ unsigned long *pri_unat_loc; unsigned long *unat_loc; unsigned long *lc_loc; *************** struct _Unwind_Context *** 203,212 **** enum unw_nat_type type : 3; signed long off : 61; /* NaT word is at loc+nat.off */ } nat; ! } ireg[32 - 2]; ! unsigned long *br_loc[6 - 1]; void *fr_loc[32 - 2]; }; typedef unsigned long unw_word; --- 217,230 ---- enum unw_nat_type type : 3; signed long off : 61; /* NaT word is at loc+nat.off */ } nat; ! } ireg[32 - 2]; /* Indexed by - 2 */ ! unsigned long *br_loc[7]; void *fr_loc[32 - 2]; + + /* ??? We initially point pri_unat_loc here. The entire NAT bit + logic needs work. */ + unsigned long initial_unat; }; typedef unsigned long unw_word; *************** static unsigned char const save_order[] *** 223,250 **** #define MIN(X, Y) ((X) < (Y) ? (X) : (Y)) ! /* Unwind decoder routines */ ! static void ! push (struct unw_state_record *sr) { struct unw_reg_state *rs; rs = malloc (sizeof (struct unw_reg_state)); memcpy (rs, &sr->curr, sizeof (*rs)); ! rs->next = sr->stack; ! sr->stack = rs; } static void pop (struct unw_state_record *sr) { ! struct unw_reg_state *rs; ! rs = sr->stack; ! sr->stack = rs->next; ! free (rs); } static enum unw_register_index __attribute__((const)) decode_abreg (unsigned char abreg, int memory) --- 241,436 ---- #define MIN(X, Y) ((X) < (Y) ? (X) : (Y)) ! /* MASK is a bitmap describing the allocation state of emergency buffers, ! with bit set indicating free. Return >= 0 if allocation is successful; ! < 0 if failure. */ ! static inline int ! atomic_alloc (unsigned int *mask) ! { ! unsigned int old = *mask, ret, new; ! ! while (1) ! { ! if (old == 0) ! return -1; ! ret = old & -old; ! new = old & ~ret; ! new = __sync_val_compare_and_swap (mask, old, new); ! if (old == new) ! break; ! old = new; ! } ! ! return __builtin_ffs (ret) - 1; ! } ! ! /* Similarly, free an emergency buffer. */ ! ! static inline void ! atomic_free (unsigned int *mask, int bit) ! { ! __sync_xor_and_fetch (mask, 1 << bit); ! } ! ! ! #define SIZE(X) (sizeof(X) / sizeof(*(X))) ! #define MASK_FOR(X) ((2U << (SIZE (X) - 1)) - 1) ! #define PTR_IN(X, P) ((P) >= (X) && (P) < (X) + SIZE (X)) ! ! static struct unw_reg_state emergency_reg_state[32]; ! static int emergency_reg_state_free = MASK_FOR (emergency_reg_state); ! ! static struct unw_labeled_state emergency_labeled_state[8]; ! static int emergency_labeled_state_free = MASK_FOR (emergency_labeled_state); ! ! #ifdef ENABLE_MALLOC_CHECKING ! static int reg_state_alloced; ! static int labeled_state_alloced; ! #endif ! ! /* Allocation and deallocation of structures. */ ! ! static struct unw_reg_state * ! alloc_reg_state (void) { struct unw_reg_state *rs; + #ifdef ENABLE_MALLOC_CHECKING + reg_state_alloced++; + #endif + rs = malloc (sizeof (struct unw_reg_state)); + if (!rs) + { + int n = atomic_alloc (&emergency_reg_state_free); + if (n >= 0) + rs = &emergency_reg_state[n]; + } + + return rs; + } + + static void + free_reg_state (struct unw_reg_state *rs) + { + #ifdef ENABLE_MALLOC_CHECKING + reg_state_alloced--; + #endif + + if (PTR_IN (emergency_reg_state, rs)) + atomic_free (&emergency_reg_state_free, rs - emergency_reg_state); + else + free (rs); + } + + static struct unw_labeled_state * + alloc_label_state (void) + { + struct unw_labeled_state *ls; + + #ifdef ENABLE_MALLOC_CHECKING + labeled_state_alloced++; + #endif + + ls = malloc(sizeof(struct unw_labeled_state)); + if (!ls) + { + int n = atomic_alloc (&emergency_labeled_state_free); + if (n >= 0) + ls = &emergency_labeled_state[n]; + } + + return ls; + } + + static void + free_label_state (struct unw_labeled_state *ls) + { + #ifdef ENABLE_MALLOC_CHECKING + labeled_state_alloced--; + #endif + + if (PTR_IN (emergency_labeled_state, ls)) + atomic_free (&emergency_labeled_state_free, emergency_labeled_state - ls); + else + free (ls); + } + + /* Routines to manipulate the state stack. */ + + static void + push (struct unw_state_record *sr) + { + struct unw_reg_state *rs = alloc_reg_state (); memcpy (rs, &sr->curr, sizeof (*rs)); ! sr->curr.next = rs; } static void pop (struct unw_state_record *sr) { ! struct unw_reg_state *rs = sr->curr.next; ! if (!rs) ! abort (); ! memcpy (&sr->curr, rs, sizeof(*rs)); ! free_reg_state (rs); ! } ! ! /* Make a copy of the state stack. Non-recursive to avoid stack overflows. */ ! ! static struct unw_reg_state * ! dup_state_stack (struct unw_reg_state *rs) ! { ! struct unw_reg_state *copy, *prev = NULL, *first = NULL; ! ! while (rs) ! { ! copy = alloc_reg_state (); ! memcpy (copy, rs, sizeof(*copy)); ! if (first) ! prev->next = copy; ! else ! first = copy; ! rs = rs->next; ! prev = copy; ! } ! ! return first; ! } ! ! /* Free all stacked register states (but not RS itself). */ ! static void ! free_state_stack (struct unw_reg_state *rs) ! { ! struct unw_reg_state *p, *next; ! ! for (p = rs->next; p != NULL; p = next) ! { ! next = p->next; ! free_reg_state (p); ! } ! rs->next = NULL; ! } ! ! /* Free all labeled states. */ ! ! static void ! free_label_states (struct unw_labeled_state *ls) ! { ! struct unw_labeled_state *next; ! ! for (; ls ; ls = next) ! { ! next = ls->next; ! ! free_state_stack (&ls->saved_state); ! free_label_state (ls); ! } } + + /* Unwind decoder routines */ static enum unw_register_index __attribute__((const)) decode_abreg (unsigned char abreg, int memory) *************** alloc_spill_area (unsigned long *offp, u *** 292,299 **** if (reg->where == UNW_WHERE_SPILL_HOME) { reg->where = UNW_WHERE_PSPREL; ! reg->val = 0x10 - *offp; ! *offp += regsize; } } } --- 478,485 ---- if (reg->where == UNW_WHERE_SPILL_HOME) { reg->where = UNW_WHERE_PSPREL; ! *offp -= regsize; ! reg->val = *offp; } } } *************** finish_prologue (struct unw_state_record *** 327,333 **** /* First, resolve implicit register save locations (see Section "11.4.2.3 Rules for Using Unwind Descriptors", rule 3). */ ! for (i = 0; i < (int) sizeof(save_order); ++i) { reg = sr->curr.reg + save_order[i]; if (reg->where == UNW_WHERE_GR_SAVE) --- 513,519 ---- /* First, resolve implicit register save locations (see Section "11.4.2.3 Rules for Using Unwind Descriptors", rule 3). */ ! for (i = 0; i < (int) sizeof (save_order); ++i) { reg = sr->curr.reg + save_order[i]; if (reg->where == UNW_WHERE_GR_SAVE) *************** finish_prologue (struct unw_state_record *** 360,367 **** mask = *cp++; kind = (mask >> 2*(3-(t & 3))) & 3; if (kind > 0) ! spill_next_when(®s[kind - 1], sr->curr.reg + limit[kind - 1], ! sr->region_start + t); } } --- 546,553 ---- mask = *cp++; kind = (mask >> 2*(3-(t & 3))) & 3; if (kind > 0) ! spill_next_when (®s[kind - 1], sr->curr.reg + limit[kind - 1], ! sr->region_start + t); } } *************** finish_prologue (struct unw_state_record *** 369,380 **** if (sr->any_spills) { off = sr->spill_offset; ! alloc_spill_area(&off, 16, sr->curr.reg + UNW_REG_F2, ! sr->curr.reg + UNW_REG_F31); ! alloc_spill_area(&off, 8, sr->curr.reg + UNW_REG_B1, ! sr->curr.reg + UNW_REG_B5); ! alloc_spill_area(&off, 8, sr->curr.reg + UNW_REG_R4, ! sr->curr.reg + UNW_REG_R7); } } --- 555,566 ---- if (sr->any_spills) { off = sr->spill_offset; ! alloc_spill_area (&off, 16, sr->curr.reg + UNW_REG_F2, ! sr->curr.reg + UNW_REG_F31); ! alloc_spill_area (&off, 8, sr->curr.reg + UNW_REG_B1, ! sr->curr.reg + UNW_REG_B5); ! alloc_spill_area (&off, 8, sr->curr.reg + UNW_REG_R4, ! sr->curr.reg + UNW_REG_R7); } } *************** desc_prologue (int body, unw_word rlen, *** 389,411 **** int i; if (!(sr->in_body || sr->first_region)) ! finish_prologue(sr); sr->first_region = 0; /* Check if we're done. */ ! if (body && sr->when_target < sr->region_start + sr->region_len) { sr->done = 1; return; } for (i = 0; i < sr->epilogue_count; ++i) ! pop(sr); sr->epilogue_count = 0; sr->epilogue_start = UNW_WHEN_NEVER; if (!body) ! push(sr); sr->region_start += sr->region_len; sr->region_len = rlen; --- 575,598 ---- int i; if (!(sr->in_body || sr->first_region)) ! finish_prologue (sr); sr->first_region = 0; /* Check if we're done. */ ! if (sr->when_target < sr->region_start + sr->region_len) { sr->done = 1; return; } for (i = 0; i < sr->epilogue_count; ++i) ! pop (sr); ! sr->epilogue_count = 0; sr->epilogue_start = UNW_WHEN_NEVER; if (!body) ! push (sr); sr->region_start += sr->region_len; sr->region_len = rlen; *************** desc_frgr_mem (unsigned char grmask, unw *** 491,497 **** { if ((frmask & 1) != 0) { ! set_reg (sr->curr.reg + UNW_REG_F2 + i, UNW_WHERE_SPILL_HOME, sr->region_start + sr->region_len - 1, 0); sr->any_spills = 1; } --- 678,685 ---- { if ((frmask & 1) != 0) { ! enum unw_register_index base = i < 4 ? UNW_REG_F2 : UNW_REG_F16 - 4; ! set_reg (sr->curr.reg + base + i, UNW_WHERE_SPILL_HOME, sr->region_start + sr->region_len - 1, 0); sr->any_spills = 1; } *************** desc_epilogue (unw_word t, unw_word ecou *** 628,640 **** static inline void desc_copy_state (unw_word label, struct unw_state_record *sr) { ! struct unw_reg_state *rs; ! for (rs = sr->reg_state_list; rs; rs = rs->next) { ! if (rs->label == label) ! { ! memcpy (&sr->curr, rs, sizeof(sr->curr)); return; } } --- 816,830 ---- static inline void desc_copy_state (unw_word label, struct unw_state_record *sr) { ! struct unw_labeled_state *ls; ! for (ls = sr->labeled_states; ls; ls = ls->next) { ! if (ls->label == label) ! { ! free_state_stack (&sr->curr); ! memcpy (&sr->curr, &ls->saved_state, sizeof (sr->curr)); ! sr->curr.next = dup_state_stack (ls->saved_state.next); return; } } *************** desc_copy_state (unw_word label, struct *** 644,656 **** static inline void desc_label_state (unw_word label, struct unw_state_record *sr) { ! struct unw_reg_state *rs; ! rs = malloc (sizeof (struct unw_reg_state)); ! memcpy (rs, &sr->curr, sizeof (*rs)); ! rs->label = label; ! rs->next = sr->reg_state_list; ! sr->reg_state_list = rs; } /* --- 834,848 ---- static inline void desc_label_state (unw_word label, struct unw_state_record *sr) { ! struct unw_labeled_state *ls = alloc_label_state (); ! ls->label = label; ! memcpy (&ls->saved_state, &sr->curr, sizeof (ls->saved_state)); ! ls->saved_state.next = dup_state_stack (sr->curr.next); ! ! /* Insert into list of labeled states. */ ! ls->next = sr->labeled_states; ! sr->labeled_states = ls; } /* *************** desc_spill_sprel_p (unsigned char qp, un *** 745,751 **** #define UNW_DEC_PROLOGUE_GR(fmt,r,m,gr,arg) desc_prologue(0,r,m,gr,arg) #define UNW_DEC_PROLOGUE(fmt,b,r,arg) desc_prologue(b,r,0,32,arg) ! /* Prologue descriptors. */ #define UNW_DEC_ABI(fmt,a,c,arg) desc_abi(a,c,arg) #define UNW_DEC_BR_GR(fmt,b,g,arg) desc_br_gr(b,g,arg) #define UNW_DEC_BR_MEM(fmt,b,arg) desc_br_mem(b,arg) --- 937,943 ---- #define UNW_DEC_PROLOGUE_GR(fmt,r,m,gr,arg) desc_prologue(0,r,m,gr,arg) #define UNW_DEC_PROLOGUE(fmt,b,r,arg) desc_prologue(b,r,0,32,arg) ! /* Prologue descriptors. */ #define UNW_DEC_ABI(fmt,a,c,arg) desc_abi(a,c,arg) #define UNW_DEC_BR_GR(fmt,b,g,arg) desc_br_gr(b,g,arg) #define UNW_DEC_BR_MEM(fmt,b,arg) desc_br_mem(b,arg) *************** unw_access_gr (struct _Unwind_Context *i *** 1317,1323 **** else if (regnum < 32) { /* Access a non-stacked register. */ ! ireg = &info->ireg[regnum - 1]; addr = ireg->loc; if (addr) { --- 1509,1515 ---- else if (regnum < 32) { /* Access a non-stacked register. */ ! ireg = &info->ireg[regnum - 2]; addr = ireg->loc; if (addr) { *************** uw_frame_state_for (struct _Unwind_Conte *** 1458,1465 **** --- 1650,1660 ---- unsigned long *unw, header, length; unsigned char *insn, *insn_end; unsigned long segment_base; + struct unw_reg_info *r; memset (fs, 0, sizeof (*fs)); + for (r = fs->curr.reg; r < fs->curr.reg + UNW_NUM_REGS; ++r) + r->when = UNW_WHEN_NEVER; context->lsda = 0; ent = _Unwind_FindTableEntry ((void *) context->rp, *************** uw_frame_state_for (struct _Unwind_Conte *** 1468,1476 **** { /* Couldn't find unwind info for this function. Try an os-specific fallback mechanism. This will necessarily ! not profide a personality routine or LSDA. */ #ifdef MD_FALLBACK_FRAME_STATE_FOR MD_FALLBACK_FRAME_STATE_FOR (context, fs, success); return _URC_END_OF_STACK; success: return _URC_NO_REASON; --- 1663,1686 ---- { /* Couldn't find unwind info for this function. Try an os-specific fallback mechanism. This will necessarily ! not provide a personality routine or LSDA. */ #ifdef MD_FALLBACK_FRAME_STATE_FOR MD_FALLBACK_FRAME_STATE_FOR (context, fs, success); + + /* [SCRA 11.4.1] A leaf function with no memory stack, no exception + handlers, and which keeps the return value in B0 does not need + an unwind table entry. + + This can only happen in the frame after unwinding through a signal + handler. Avoid infinite looping by requiring that B0 != RP. */ + if (context->br_loc[0] && *context->br_loc[0] != context->rp) + { + fs->curr.reg[UNW_REG_RP].where = UNW_WHERE_BR; + fs->curr.reg[UNW_REG_RP].when = -1; + fs->curr.reg[UNW_REG_RP].val = 0; + goto success; + } + return _URC_END_OF_STACK; success: return _URC_NO_REASON; *************** uw_frame_state_for (struct _Unwind_Conte *** 1500,1505 **** --- 1710,1723 ---- while (!fs->done && insn < insn_end) insn = unw_decode (insn, fs->in_body, fs); + free_label_states (fs->labeled_states); + free_state_stack (&fs->curr); + + #ifdef ENABLE_MALLOC_CHECKING + if (reg_state_alloced || labeled_state_alloced) + abort (); + #endif + /* If we're in the epilogue, sp has been restored and all values on the memory stack below psp also have been restored. */ if (fs->when_target > fs->epilogue_start) *************** uw_update_reg_address (struct _Unwind_Co *** 1557,1564 **** break; case UNW_WHERE_BR: ! if (rval >= 1 && rval <= 5) ! addr = context->br_loc[rval - 1]; else abort (); break; --- 1775,1785 ---- break; case UNW_WHERE_BR: ! /* Note that while RVAL can only be 1-5 from normal descriptors, ! we can want to look at B0 due to having manually unwound a ! signal frame. */ ! if (rval <= 5) ! addr = context->br_loc[rval]; else abort (); break; *************** uw_update_reg_address (struct _Unwind_Co *** 1624,1630 **** break; case UNW_REG_B1 ... UNW_REG_B5: ! context->br_loc[regno - UNW_REG_B1] = addr; break; case UNW_REG_BSP: --- 1845,1851 ---- break; case UNW_REG_B1 ... UNW_REG_B5: ! context->br_loc[regno - UNW_REG_B0] = addr; break; case UNW_REG_BSP: *************** uw_update_reg_address (struct _Unwind_Co *** 1656,1663 **** context->psp = *(unsigned long *)addr; break; ! case UNW_REG_RNAT: ! case UNW_NUM_REGS: abort (); } } --- 1877,1883 ---- context->psp = *(unsigned long *)addr; break; ! default: abort (); } } *************** uw_update_context (struct _Unwind_Contex *** 1699,1705 **** /* Unwind BSP for the local registers allocated this frame. */ /* ??? What to do with stored BSP or BSPSTORE registers. */ ! if (fs->when_target > fs->curr.reg[UNW_REG_PFS].when) { unsigned long pfs = *context->pfs_loc; unsigned long sol = (pfs >> 7) & 0x7f; --- 1919,1928 ---- /* Unwind BSP for the local registers allocated this frame. */ /* ??? What to do with stored BSP or BSPSTORE registers. */ ! /* We assert that we are either at a call site, or we have ! just unwound through a signal frame. In either case ! pfs_loc is valid. */ ! if (!(fs -> no_reg_stack_frame)) { unsigned long pfs = *context->pfs_loc; unsigned long sol = (pfs >> 7) & 0x7f; *************** uw_update_context (struct _Unwind_Contex *** 1709,1746 **** } /* Fill in CONTEXT for top-of-stack. The only valid registers at this ! level will be the return address and the CFA. */ ! #define uw_init_context(CONTEXT) \ ! uw_init_context_1 (CONTEXT, __builtin_dwarf_cfa (), __builtin_ia64_bsp ()) static void ! uw_init_context_1 (struct _Unwind_Context *context, void *psp, void *bsp) { void *rp = __builtin_extract_return_addr (__builtin_return_address (0)); ! void *sp = __builtin_dwarf_cfa (); _Unwind_FrameState fs; /* Flush the register stack to memory so that we can access it. */ __builtin_ia64_flushrs (); memset (context, 0, sizeof (struct _Unwind_Context)); ! context->bsp = (unsigned long) bsp; ! context->sp = (unsigned long) sp; context->psp = (unsigned long) psp; context->rp = (unsigned long) rp; ! asm ("mov %0 = pr" : "=r" (context->pr)); /* ??? Get rnat. Don't we have to turn off the rse for that? */ if (uw_frame_state_for (context, &fs) != _URC_NO_REASON) abort (); - /* Force the frame state to use the known cfa value. */ - fs.curr.reg[UNW_REG_PSP].when = -1; - fs.curr.reg[UNW_REG_PSP].where = UNW_WHERE_NONE; - fs.curr.reg[UNW_REG_PSP].val = sp - psp; - uw_update_context (context, &fs); } --- 1932,1971 ---- } /* Fill in CONTEXT for top-of-stack. The only valid registers at this ! level will be the return address and the CFA. Note that CFA = SP+16. */ ! #define uw_init_context(CONTEXT) \ ! do { \ ! /* ??? There is a whole lot o code in uw_install_context that \ ! tries to avoid spilling the entire machine state here. We \ ! should try to make that work again. */ \ ! __builtin_unwind_init(); \ ! uw_init_context_1 (CONTEXT, __builtin_ia64_bsp ()); \ ! } while (0) static void ! uw_init_context_1 (struct _Unwind_Context *context, void *bsp) { void *rp = __builtin_extract_return_addr (__builtin_return_address (0)); ! /* Set psp to the caller's stack pointer. */ ! void *psp = __builtin_dwarf_cfa () - 16; _Unwind_FrameState fs; /* Flush the register stack to memory so that we can access it. */ __builtin_ia64_flushrs (); memset (context, 0, sizeof (struct _Unwind_Context)); ! context->bsp = context->regstk_top = (unsigned long) bsp; context->psp = (unsigned long) psp; context->rp = (unsigned long) rp; ! asm ("mov %0 = sp" : "=r" (context->sp)); asm ("mov %0 = pr" : "=r" (context->pr)); + context->pri_unat_loc = &context->initial_unat; /* ??? */ /* ??? Get rnat. Don't we have to turn off the rse for that? */ if (uw_frame_state_for (context, &fs) != _URC_NO_REASON) abort (); uw_update_context (context, &fs); } *************** uw_install_context (struct _Unwind_Conte *** 1773,1780 **** target function. The value that we install below will be adjusted by the BR.RET instruction based on the contents of AR.PFS. So we must unadjust that here. */ ! target->bsp ! = ia64_rse_skip_regs (target->bsp, (*target->pfs_loc >> 7) & 0x7f); /* Provide assembly with the offsets into the _Unwind_Context. */ asm volatile ("uc_rnat = %0" --- 1998,2006 ---- target function. The value that we install below will be adjusted by the BR.RET instruction based on the contents of AR.PFS. So we must unadjust that here. */ ! target->bsp = (unsigned long) ! ia64_rse_skip_regs ((unsigned long *)target->bsp, ! (*target->pfs_loc >> 7) & 0x7f); /* Provide assembly with the offsets into the _Unwind_Context. */ asm volatile ("uc_rnat = %0" diff -Nrc3pad gcc-3.0.4/gcc/config/ia64/xm-ia64.h gcc-3.1/gcc/config/ia64/xm-ia64.h *** gcc-3.0.4/gcc/config/ia64/xm-ia64.h Thu Mar 15 19:02:03 2001 --- gcc-3.1/gcc/config/ia64/xm-ia64.h Thu Jan 1 00:00:00 1970 *************** *** 1,57 **** - /* Definitions of target machine for IA-64. - Copyright (C) 1999, 2000 Free Software Foundation, Inc. - - This file is part of GNU CC. - - GNU CC is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU CC is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNU CC; see the file COPYING. If not, write to - the Free Software Foundation, 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - - /* A C expression for the status code to be returned when the compiler exits - after serious errors. */ - #define FATAL_EXIT_CODE 33 - - /* A C expression for the status code to be returned when the compiler exits - without serious errors. */ - #define SUCCESS_EXIT_CODE 0 - - /* Defined if the host machine stores words of multi-word values in big-endian - order. (GNU CC does not depend on the host byte ordering within a word.) */ - #ifdef __BIG_ENDIAN__ - #define HOST_WORDS_BIG_ENDIAN - #endif - - /* A C expression for the number of bits in `char' on the host machine. */ - #define HOST_BITS_PER_CHAR 8 - - /* A C expression for the number of bits in `short' on the host machine. */ - #define HOST_BITS_PER_SHORT 16 - - /* A C expression for the number of bits in `int' on the host machine. */ - #define HOST_BITS_PER_INT 32 - - /* ??? This depends on the as yet unimplemented ILP32 option. */ - - /* A C expression for the number of bits in `long' on the host machine. */ - #define HOST_BITS_PER_LONG 64 - - /* A C expression for the number of bits in `long long' on the host - machine. */ - #define HOST_BITS_PER_LONGLONG 64 - - /* target machine dependencies. - tm.h is a symbolic link to the actual target specific file. */ - #include "tm.h" - - /* end of xm-ia64.h */ --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/interix.h gcc-3.1/gcc/config/interix.h *** gcc-3.0.4/gcc/config/interix.h Wed Sep 15 21:41:13 1999 --- gcc-3.1/gcc/config/interix.h Tue Jan 15 20:20:20 2002 *************** *** 1,6 **** /* Operating system specific defines to be used when targeting GCC for Interix ! Copyright (C) 1994, 1995, 1999 Free Software Foundation, Inc. Donn Terry, Softway Systems, Inc. (donn@softway.com) Modified from code Contributed by Douglas B. Rupp (drupp@cs.washington.edu). --- 1,6 ---- /* Operating system specific defines to be used when targeting GCC for Interix ! Copyright (C) 1994, 1995, 1999, 2002 Free Software Foundation, Inc. Donn Terry, Softway Systems, Inc. (donn@softway.com) Modified from code Contributed by Douglas B. Rupp (drupp@cs.washington.edu). *************** along with GNU CC; see the file COPYING. *** 22,28 **** --- 22,30 ---- the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + #ifndef TARGET_MEM_FUNCTIONS #define TARGET_MEM_FUNCTIONS + #endif /* POSIX/Uni-thread only for now. Look at the winnt version for windows/multi thread */ *************** for windows/multi thread */ *** 81,88 **** #endif /* 0 */ ! #undef STDC_VALUE ! #define STDC_VALUE 0 #define HANDLE_SYSV_PRAGMA #undef HANDLE_PRAGMA_WEAK /* until the link format can handle it */ --- 83,89 ---- #endif /* 0 */ ! #define STDC_0_IN_SYSTEM_HEADERS 1 #define HANDLE_SYSV_PRAGMA #undef HANDLE_PRAGMA_WEAK /* until the link format can handle it */ *************** for windows/multi thread */ *** 102,104 **** --- 103,139 ---- #define WCHAR_UNSIGNED 1 #define WCHAR_TYPE "short unsigned int" #define WCHAR_TYPE_SIZE 16 + + /* Our strategy for finding global constructors is a bit different, although + not a lot. */ + #define DO_GLOBAL_CTORS_BODY \ + do { \ + int i; \ + unsigned long nptrs; \ + func_ptr *p; \ + asm( \ + " .section .ctor_head, \"rw\"\n" \ + "1:\n" \ + " .text \n" \ + ASM_LOAD_ADDR(1b,%0) \ + : "=r" (p) : : "cc"); \ + for (nptrs = 0; p[nptrs] != 0; nptrs++); \ + for (i = nptrs-1; i >= 0; i--) \ + p[i] (); \ + } while (0) + + #define DO_GLOBAL_DTORS_BODY \ + do { \ + func_ptr *p; \ + asm( \ + " .section .dtor_head, \"rw\"\n" \ + "1:\n" \ + " .text \n" \ + ASM_LOAD_ADDR(1b,%0) \ + : "=r" (p) : : "cc"); \ + while (*p) \ + { \ + p++; \ + (*(p-1)) (); \ + } \ + } while (0) diff -Nrc3pad gcc-3.0.4/gcc/config/interix3.h gcc-3.1/gcc/config/interix3.h *** gcc-3.0.4/gcc/config/interix3.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/interix3.h Wed Nov 28 21:41:53 2001 *************** *** 0 **** --- 1,35 ---- + /* Operating system specific defines to be used when targeting GCC for + Interix version 3. + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Douglas B. Rupp (rupp@gnat.com) + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GNU CC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU CC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + /* Interix 3.x has a single rooted file system and properly named + libraries, so LIB_SPEC can be simplified */ + + #undef LIB_SPEC + #define LIB_SPEC "\ + %{!shared:%{!dynamic:-lc -lpsxdll \ + }} \ + %{!G:%{!dynamic:-lc -lpsxdll \ + }} \ + %{dynamic:-lc -lpsxdll \ + } \ + %{v}" + diff -Nrc3pad gcc-3.0.4/gcc/config/linux.h gcc-3.1/gcc/config/linux.h *** gcc-3.0.4/gcc/config/linux.h Mon Jun 11 19:49:46 2001 --- gcc-3.1/gcc/config/linux.h Tue Dec 18 10:42:32 2001 *************** Boston, MA 02111-1307, USA. */ *** 37,49 **** #undef ASM_APP_OFF #define ASM_APP_OFF "#NO_APP\n" - #define SET_ASM_OP "\t.set\t" - - /* Use stabs instead of DWARF debug format. */ - #undef PREFERRED_DEBUGGING_TYPE - #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG - #include "svr4.h" - #undef MD_EXEC_PREFIX #undef MD_STARTFILE_PREFIX --- 37,42 ---- *************** Boston, MA 02111-1307, USA. */ *** 53,64 **** --- 46,67 ---- object constructed before entering `main'. */ #undef STARTFILE_SPEC + #ifdef USE_GNULIBC_1 #define STARTFILE_SPEC \ "%{!shared: \ %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} \ %{!p:%{profile:gcrt1.o%s} \ %{!profile:crt1.o%s}}}} \ crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}" + #else + #define STARTFILE_SPEC \ + "%{!shared: \ + %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} \ + %{!p:%{profile:gcrt1.o%s} \ + %{!profile:crt1.o%s}}}} \ + crti.o%s %{static:crtbeginT.o%s}\ + %{!static:%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}}" + #endif /* Provide a ENDFILE_SPEC appropriate for GNU/Linux. Here we tack on the GNU/Linux magical crtend.o file (see crtstuff.c) which *************** Boston, MA 02111-1307, USA. */ *** 79,89 **** #undef CPLUSPLUS_CPP_SPEC #define CPLUSPLUS_CPP_SPEC "-D_GNU_SOURCE %(cpp)" - #ifndef USE_GNULIBC_1 - #undef DEFAULT_VTABLE_THUNKS - #define DEFAULT_VTABLE_THUNKS 1 - #endif - #undef LIB_SPEC /* We no longer link with libc_p.a or libg.a by default. If you want to profile or debug the GNU/Linux C library, please add --- 82,87 ---- *************** Boston, MA 02111-1307, USA. */ *** 106,110 **** --- 104,112 ---- %{!p:%{!pg:%{!g*:-lc} %{g*:-lg}}}}" #endif + #if !defined(USE_GNULIBC_1) && defined(HAVE_LD_EH_FRAME_HDR) + #define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " + #endif + /* Define this so we can compile MS code for use with WINE. */ #define HANDLE_PRAGMA_PACK_PUSH_POP diff -Nrc3pad gcc-3.0.4/gcc/config/lynx.h gcc-3.1/gcc/config/lynx.h *** gcc-3.0.4/gcc/config/lynx.h Mon Sep 25 11:45:51 2000 --- gcc-3.1/gcc/config/lynx.h Thu Nov 15 17:55:26 2001 *************** do { \ *** 128,140 **** #undef INIT_SECTION_ASM_OP #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_const, in_ctors, in_dtors, in_fini #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ CONST_SECTION_FUNCTION \ - CTORS_SECTION_FUNCTION \ - DTORS_SECTION_FUNCTION \ FINI_SECTION_FUNCTION #undef CTORS_SECTION_ASM_OP --- 128,138 ---- #undef INIT_SECTION_ASM_OP #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_const, in_fini #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ CONST_SECTION_FUNCTION \ FINI_SECTION_FUNCTION #undef CTORS_SECTION_ASM_OP *************** do { \ *** 142,171 **** #undef DTORS_SECTION_ASM_OP #define DTORS_SECTION_ASM_OP "\t.section\t.dtors" - #define INT_ASM_OP "\t.long\t" - - /* A C statement (sans semicolon) to output an element in the table of - global constructors. */ - #undef ASM_OUTPUT_CONSTRUCTOR - #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ - do { \ - ctors_section (); \ - fprintf (FILE, "%s", INT_ASM_OP); \ - assemble_name (FILE, NAME); \ - fprintf (FILE, "\n"); \ - } while (0) - - /* A C statement (sans semicolon) to output an element in the table of - global destructors. */ - #undef ASM_OUTPUT_DESTRUCTOR - #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \ - do { \ - dtors_section (); \ - fprintf (FILE, "%s", INT_ASM_OP); \ - assemble_name (FILE, NAME); \ - fprintf (FILE, "\n"); \ - } while (0) - #undef DO_GLOBAL_CTORS_BODY #undef DO_GLOBAL_DTORS_BODY --- 140,145 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m32r/m32r-protos.h gcc-3.1/gcc/config/m32r/m32r-protos.h *** gcc-3.0.4/gcc/config/m32r/m32r-protos.h Tue Jan 18 23:44:36 2000 --- gcc-3.1/gcc/config/m32r/m32r-protos.h Sun Dec 9 20:13:14 2001 *************** *** 1,5 **** /* Prototypes for m32r.c functions used in the md file & elsewhere. ! Copyright (C) 1999, 2000 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,5 ---- /* Prototypes for m32r.c functions used in the md file & elsewhere. ! Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of GNU CC. *************** the Free Software Foundation, 59 Temple *** 19,25 **** Boston, MA 02111-1307, USA. */ /* Function prototypes that cannot exist in v850.h due to dependency ! compilcations. */ #define Mmode enum machine_mode extern void sbss_section PARAMS ((void)); --- 19,25 ---- Boston, MA 02111-1307, USA. */ /* Function prototypes that cannot exist in v850.h due to dependency ! complications. */ #define Mmode enum machine_mode extern void sbss_section PARAMS ((void)); *************** extern void m32r_init_expanders PARAM *** 29,48 **** extern unsigned m32r_compute_frame_size PARAMS ((int)); extern int m32r_first_insn_address PARAMS ((void)); extern void m32r_expand_prologue PARAMS ((void)); - extern void m32r_output_function_prologue PARAMS ((FILE *, int)); - extern void m32r_output_function_epilogue PARAMS ((FILE *, int)); extern void m32r_finalize_pic PARAMS ((void)); extern void m32r_asm_file_start PARAMS ((FILE *)); - extern void m32r_sched_init PARAMS ((FILE *, int)); extern int direct_return PARAMS ((void)); #ifdef TREE_CODE - extern int m32r_valid_machine_decl_attribute PARAMS ((tree, tree, tree, tree)); - extern int m32r_comp_type_attributes PARAMS ((tree, tree)); extern void m32r_select_section PARAMS ((tree, int)); extern void m32r_encode_section_info PARAMS ((tree)); extern enum m32r_function_type m32r_compute_function_type PARAMS ((tree)); extern void m32r_select_section PARAMS ((tree, int)); - extern void m32r_set_default_type_attributes PARAMS ((tree)); #ifdef HAVE_MACHINE_MODES extern void m32r_setup_incoming_varargs PARAMS ((CUMULATIVE_ARGS *, Mmode, tree, int *, int)); --- 29,42 ---- *************** extern int m32r_address_code PARAMS *** 60,74 **** extern void m32r_initialize_trampoline PARAMS ((rtx, rtx, rtx)); extern int zero_and_one PARAMS ((rtx, rtx)); extern char * emit_cond_move PARAMS ((rtx *, rtx)); ! extern char * m32r_output_block_move PARAMS ((rtx, rtx *)); extern void m32r_expand_block_move PARAMS ((rtx *)); extern void m32r_print_operand PARAMS ((FILE *, rtx, int)); extern void m32r_print_operand_address PARAMS ((FILE *, rtx)); extern int m32r_address_cost PARAMS ((rtx)); - extern int m32r_adjust_cost PARAMS ((rtx, rtx, rtx, int)); - extern int m32r_adjust_priority PARAMS ((rtx, int)); - extern void m32r_sched_reorder PARAMS ((FILE *, int, rtx *, int)); - extern int m32r_sched_variable_issue PARAMS ((FILE *, int, rtx, int)); extern int m32r_not_same_reg PARAMS ((rtx, rtx)); #ifdef HAVE_MACHINE_MODES --- 54,64 ---- extern void m32r_initialize_trampoline PARAMS ((rtx, rtx, rtx)); extern int zero_and_one PARAMS ((rtx, rtx)); extern char * emit_cond_move PARAMS ((rtx *, rtx)); ! extern void m32r_output_block_move PARAMS ((rtx, rtx *)); extern void m32r_expand_block_move PARAMS ((rtx *)); extern void m32r_print_operand PARAMS ((FILE *, rtx, int)); extern void m32r_print_operand_address PARAMS ((FILE *, rtx)); extern int m32r_address_cost PARAMS ((rtx)); extern int m32r_not_same_reg PARAMS ((rtx, rtx)); #ifdef HAVE_MACHINE_MODES *************** extern int m32r_block_immediate_opera *** 100,105 **** --- 90,97 ---- extern int extend_operand PARAMS ((rtx, Mmode)); extern int reg_or_eq_int16_operand PARAMS ((rtx, Mmode)); extern int int8_operand PARAMS ((rtx, Mmode)); + extern int reg_or_zero_operand PARAMS ((rtx, Mmode)); + #endif /* HAVE_MACHINE_MODES */ #ifdef TREE_CODE diff -Nrc3pad gcc-3.0.4/gcc/config/m32r/m32r.c gcc-3.1/gcc/config/m32r/m32r.c *** gcc-3.0.4/gcc/config/m32r/m32r.c Sat May 12 20:32:50 2001 --- gcc-3.1/gcc/config/m32r/m32r.c Fri Mar 22 19:25:51 2002 *************** *** 1,5 **** /* Subroutines used for code generation on the Mitsubishi M32R cpu. ! Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,6 ---- /* Subroutines used for code generation on the Mitsubishi M32R cpu. ! Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002 ! Free Software Foundation, Inc. This file is part of GNU CC. *************** Boston, MA 02111-1307, USA. */ *** 34,40 **** --- 35,44 ---- #include "function.h" #include "recog.h" #include "toplev.h" + #include "ggc.h" #include "m32r-protos.h" + #include "target.h" + #include "target-def.h" /* Save the operands last given to a compare for use when we generate a scc or bcc insn. */ *************** const char * m32r_sdata_string = M32R_SD *** 52,62 **** enum m32r_sdata m32r_sdata; /* Scheduler support */ ! int m32r_sched_odd_word_p; /* Forward declaration. */ ! static void init_reg_tables PARAMS ((void)); /* Called by OVERRIDE_OPTIONS to initialize various things. */ void --- 56,109 ---- enum m32r_sdata m32r_sdata; /* Scheduler support */ ! static int m32r_sched_odd_word_p; /* Forward declaration. */ ! static void init_reg_tables PARAMS ((void)); ! static void block_move_call PARAMS ((rtx, rtx, rtx)); ! static int m32r_is_insn PARAMS ((rtx)); ! const struct attribute_spec m32r_attribute_table[]; ! static tree m32r_handle_model_attribute PARAMS ((tree *, tree, tree, int, bool *)); ! static void m32r_output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT)); ! static void m32r_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT)); + static int m32r_adjust_cost PARAMS ((rtx, rtx, rtx, int)); + static int m32r_adjust_priority PARAMS ((rtx, int)); + static void m32r_sched_init PARAMS ((FILE *, int, int)); + static int m32r_sched_reorder PARAMS ((FILE *, int, rtx *, int *, int)); + static int m32r_variable_issue PARAMS ((FILE *, int, rtx, int)); + static int m32r_issue_rate PARAMS ((void)); + + + /* Initialize the GCC target structure. */ + #undef TARGET_ATTRIBUTE_TABLE + #define TARGET_ATTRIBUTE_TABLE m32r_attribute_table + + #undef TARGET_ASM_ALIGNED_HI_OP + #define TARGET_ASM_ALIGNED_HI_OP "\t.hword\t" + #undef TARGET_ASM_ALIGNED_SI_OP + #define TARGET_ASM_ALIGNED_SI_OP "\t.word\t" + + #undef TARGET_ASM_FUNCTION_PROLOGUE + #define TARGET_ASM_FUNCTION_PROLOGUE m32r_output_function_prologue + #undef TARGET_ASM_FUNCTION_EPILOGUE + #define TARGET_ASM_FUNCTION_EPILOGUE m32r_output_function_epilogue + + #undef TARGET_SCHED_ADJUST_COST + #define TARGET_SCHED_ADJUST_COST m32r_adjust_cost + #undef TARGET_SCHED_ADJUST_PRIORITY + #define TARGET_SCHED_ADJUST_PRIORITY m32r_adjust_priority + #undef TARGET_SCHED_ISSUE_RATE + #define TARGET_SCHED_ISSUE_RATE m32r_issue_rate + #undef TARGET_SCHED_VARIABLE_ISSUE + #define TARGET_SCHED_VARIABLE_ISSUE m32r_variable_issue + #undef TARGET_SCHED_INIT + #define TARGET_SCHED_INIT m32r_sched_init + #undef TARGET_SCHED_REORDER + #define TARGET_SCHED_REORDER m32r_sched_reorder + + struct gcc_target targetm = TARGET_INITIALIZER; + /* Called by OVERRIDE_OPTIONS to initialize various things. */ void *************** unsigned int m32r_hard_regno_mode_ok[FIR *** 129,135 **** { T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, S_MODES, S_MODES, S_MODES, ! S_MODES, C_MODES, A_MODES }; unsigned int m32r_mode_class [NUM_MACHINE_MODES]; --- 176,182 ---- { T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, S_MODES, S_MODES, S_MODES, ! S_MODES, C_MODES, A_MODES, A_MODES }; unsigned int m32r_mode_class [NUM_MACHINE_MODES]; *************** init_reg_tables () *** 208,217 **** Grep for MODEL in m32r.h for more info. */ - static tree interrupt_ident1; - static tree interrupt_ident2; - static tree model_ident1; - static tree model_ident2; static tree small_ident1; static tree small_ident2; static tree medium_ident1; --- 255,260 ---- *************** static tree large_ident2; *** 222,233 **** static void init_idents PARAMS ((void)) { ! if (interrupt_ident1 == 0) { - interrupt_ident1 = get_identifier ("interrupt"); - interrupt_ident2 = get_identifier ("__interrupt__"); - model_ident1 = get_identifier ("model"); - model_ident2 = get_identifier ("__model__"); small_ident1 = get_identifier ("small"); small_ident2 = get_identifier ("__small__"); medium_ident1 = get_identifier ("medium"); --- 265,272 ---- static void init_idents PARAMS ((void)) { ! if (small_ident1 == 0) { small_ident1 = get_identifier ("small"); small_ident2 = get_identifier ("__small__"); medium_ident1 = get_identifier ("medium"); *************** init_idents PARAMS ((void)) *** 237,290 **** } } ! /* Return nonzero if IDENTIFIER is a valid decl attribute. */ ! ! int ! m32r_valid_machine_decl_attribute (type, attributes, identifier, args) ! tree type ATTRIBUTE_UNUSED; ! tree attributes ATTRIBUTE_UNUSED; ! tree identifier; ! tree args; { ! init_idents (); ! ! if ((identifier == interrupt_ident1 ! || identifier == interrupt_ident2) ! && list_length (args) == 0) ! return 1; ! ! if ((identifier == model_ident1 ! || identifier == model_ident2) ! && list_length (args) == 1 ! && (TREE_VALUE (args) == small_ident1 ! || TREE_VALUE (args) == small_ident2 ! || TREE_VALUE (args) == medium_ident1 ! || TREE_VALUE (args) == medium_ident2 ! || TREE_VALUE (args) == large_ident1 ! || TREE_VALUE (args) == large_ident2)) ! return 1; ! ! return 0; ! } - /* Return zero if TYPE1 and TYPE are incompatible, one if they are compatible, - and two if they are nearly compatible (which causes a warning to be - generated). */ ! int ! m32r_comp_type_attributes (type1, type2) ! tree type1 ATTRIBUTE_UNUSED; ! tree type2 ATTRIBUTE_UNUSED; { ! return 1; ! } ! /* Set the default attributes for TYPE. */ ! void ! m32r_set_default_type_attributes (type) ! tree type ATTRIBUTE_UNUSED; ! { } /* A C statement or statements to switch to the appropriate --- 276,318 ---- } } ! const struct attribute_spec m32r_attribute_table[] = { ! /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */ ! { "interrupt", 0, 0, true, false, false, NULL }, ! { "model", 1, 1, true, false, false, m32r_handle_model_attribute }, ! { NULL, 0, 0, false, false, false, NULL } ! }; ! /* Handle an "model" attribute; arguments as in ! struct attribute_spec.handler. */ ! static tree ! m32r_handle_model_attribute (node, name, args, flags, no_add_attrs) ! tree *node ATTRIBUTE_UNUSED; ! tree name; ! tree args; ! int flags ATTRIBUTE_UNUSED; ! bool *no_add_attrs; { ! tree arg; ! init_idents (); ! arg = TREE_VALUE (args); ! if (arg != small_ident1 ! && arg != small_ident2 ! && arg != medium_ident1 ! && arg != medium_ident2 ! && arg != large_ident1 ! && arg != large_ident2) ! { ! warning ("invalid argument of `%s' attribute", ! IDENTIFIER_POINTER (name)); ! *no_add_attrs = true; ! } ! ! return NULL_TREE; } /* A C statement or statements to switch to the appropriate *************** m32r_encode_section_info (decl) *** 348,354 **** { case VAR_DECL : case FUNCTION_DECL : ! model = lookup_attribute ("model", DECL_MACHINE_ATTRIBUTES (decl)); break; case STRING_CST : case CONSTRUCTOR : --- 376,382 ---- { case VAR_DECL : case FUNCTION_DECL : ! model = lookup_attribute ("model", DECL_ATTRIBUTES (decl)); break; case STRING_CST : case CONSTRUCTOR : *************** m32r_encode_section_info (decl) *** 372,378 **** if (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd' && DECL_SECTION_NAME (decl) != NULL_TREE) { ! char *name = TREE_STRING_POINTER (DECL_SECTION_NAME (decl)); if (! strcmp (name, ".sdata") || ! strcmp (name, ".sbss")) { #if 0 /* ??? There's no reason to disallow this, is there? */ --- 400,406 ---- if (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd' && DECL_SECTION_NAME (decl) != NULL_TREE) { ! char *name = (char *) TREE_STRING_POINTER (DECL_SECTION_NAME (decl)); if (! strcmp (name, ".sdata") || ! strcmp (name, ".sbss")) { #if 0 /* ??? There's no reason to disallow this, is there? */ *************** m32r_encode_section_info (decl) *** 436,443 **** --- 464,476 ---- const char *str = XSTR (XEXP (rtl, 0), 0); int len = strlen (str); char *newstr = ggc_alloc (len + 2); + strcpy (newstr + 1, str); *newstr = prefix; + /* Note - we cannot leave the string in the ggc_alloc'ed space. + It must reside in the stringtable's domain. */ + newstr = (char *) ggc_alloc_string (newstr, len + 2); + XSTR (XEXP (rtl, 0), 0) = newstr; } } *************** reg_or_cmp_int16_operand (op, mode) *** 710,715 **** --- 743,764 ---- return CMP_INT16_P (INTVAL (op)); } + /* Return true if OP is a register or the constant 0. */ + + int + reg_or_zero_operand (op, mode) + rtx op; + enum machine_mode mode; + { + if (GET_CODE (op) == REG || GET_CODE (op) == SUBREG) + return register_operand (op, mode); + + if (GET_CODE (op) != CONST_INT) + return 0; + + return INTVAL (op) == 0; + } + /* Return true if OP is a const_int requiring two instructions to load. */ int *************** move_src_operand (op, mode) *** 744,750 **** loadable with one insn, and split the rest into two. The instances where this would help should be rare and the current way is simpler. */ ! return INT32_P (INTVAL (op)); case LABEL_REF : return TARGET_ADDR24; case CONST_DOUBLE : --- 793,805 ---- loadable with one insn, and split the rest into two. The instances where this would help should be rare and the current way is simpler. */ ! if (HOST_BITS_PER_WIDE_INT > 32) ! { ! HOST_WIDE_INT rest = INTVAL (op) >> 31; ! return (rest == 0 || rest == -1); ! } ! else ! return 1; case LABEL_REF : return TARGET_ADDR24; case CONST_DOUBLE : *************** gen_split_move_double (operands) *** 1222,1230 **** subregs to make this code simpler. It is safe to call alter_subreg any time after reload. */ if (GET_CODE (dest) == SUBREG) ! dest = alter_subreg (dest); if (GET_CODE (src) == SUBREG) ! src = alter_subreg (src); start_sequence (); if (GET_CODE (dest) == REG) --- 1277,1285 ---- subregs to make this code simpler. It is safe to call alter_subreg any time after reload. */ if (GET_CODE (dest) == SUBREG) ! alter_subreg (&dest); if (GET_CODE (src) == SUBREG) ! alter_subreg (&src); start_sequence (); if (GET_CODE (dest) == REG) *************** gen_split_move_double (operands) *** 1269,1276 **** { /* If the high-address word is used in the address, we must load it last. Otherwise, load it first. */ ! rtx addr = XEXP (src, 0); ! int reverse = (refers_to_regno_p (dregno, dregno+1, addr, 0) != 0); /* We used to optimize loads from single registers as --- 1324,1331 ---- { /* If the high-address word is used in the address, we must load it last. Otherwise, load it first. */ ! int reverse ! = (refers_to_regno_p (dregno, dregno + 1, XEXP (src, 0), 0) != 0); /* We used to optimize loads from single registers as *************** gen_split_move_double (operands) *** 1285,1299 **** which saves 2 bytes and doesn't force longword alignment. */ emit_insn (gen_rtx_SET (VOIDmode, operand_subword (dest, reverse, TRUE, mode), ! change_address (src, SImode, ! plus_constant (addr, ! reverse * UNITS_PER_WORD)))); emit_insn (gen_rtx_SET (VOIDmode, operand_subword (dest, !reverse, TRUE, mode), ! change_address (src, SImode, ! plus_constant (addr, ! (!reverse) * UNITS_PER_WORD)))); } else --- 1340,1352 ---- which saves 2 bytes and doesn't force longword alignment. */ emit_insn (gen_rtx_SET (VOIDmode, operand_subword (dest, reverse, TRUE, mode), ! adjust_address (src, SImode, ! reverse * UNITS_PER_WORD))); emit_insn (gen_rtx_SET (VOIDmode, operand_subword (dest, !reverse, TRUE, mode), ! adjust_address (src, SImode, ! !reverse * UNITS_PER_WORD))); } else *************** gen_split_move_double (operands) *** 1314,1328 **** which saves 2 bytes and doesn't force longword alignment. */ else if (GET_CODE (dest) == MEM && GET_CODE (src) == REG) { - rtx addr = XEXP (dest, 0); - emit_insn (gen_rtx_SET (VOIDmode, ! change_address (dest, SImode, addr), operand_subword (src, 0, TRUE, mode))); emit_insn (gen_rtx_SET (VOIDmode, ! change_address (dest, SImode, ! plus_constant (addr, UNITS_PER_WORD)), operand_subword (src, 1, TRUE, mode))); } --- 1367,1378 ---- which saves 2 bytes and doesn't force longword alignment. */ else if (GET_CODE (dest) == MEM && GET_CODE (src) == REG) { emit_insn (gen_rtx_SET (VOIDmode, ! adjust_address (dest, SImode, 0), operand_subword (src, 0, TRUE, mode))); emit_insn (gen_rtx_SET (VOIDmode, ! adjust_address (dest, SImode, UNITS_PER_WORD), operand_subword (src, 1, TRUE, mode))); } *************** function_arg_partial_nregs (cum, mode, t *** 1345,1353 **** int named ATTRIBUTE_UNUSED; { int ret; ! int size = (((mode == BLKmode && type) ! ? int_size_in_bytes (type) ! : GET_MODE_SIZE (mode)) + UNITS_PER_WORD - 1) / UNITS_PER_WORD; if (*cum >= M32R_MAX_PARM_REGS) ret = 0; --- 1395,1405 ---- int named ATTRIBUTE_UNUSED; { int ret; ! unsigned int size = ! (((mode == BLKmode && type) ! ? (unsigned int) int_size_in_bytes (type) ! : GET_MODE_SIZE (mode)) + UNITS_PER_WORD - 1) ! / UNITS_PER_WORD; if (*cum >= M32R_MAX_PARM_REGS) ret = 0; *************** m32r_setup_incoming_varargs (cum, mode, *** 1401,1407 **** regblock = gen_rtx_MEM (BLKmode, plus_constant (arg_pointer_rtx, FIRST_PARM_OFFSET (0))); ! MEM_ALIAS_SET (regblock) = get_varargs_alias_set (); move_block_from_reg (first_reg_offset, regblock, size, size * UNITS_PER_WORD); --- 1453,1459 ---- regblock = gen_rtx_MEM (BLKmode, plus_constant (arg_pointer_rtx, FIRST_PARM_OFFSET (0))); ! set_mem_alias_set (regblock, get_varargs_alias_set ()); move_block_from_reg (first_reg_offset, regblock, size, size * UNITS_PER_WORD); *************** m32r_va_arg (valist, type) *** 1472,1478 **** return addr_rtx; } ! int m32r_adjust_cost (insn, link, dep_insn, cost) rtx insn ATTRIBUTE_UNUSED; rtx link ATTRIBUTE_UNUSED; --- 1524,1530 ---- return addr_rtx; } ! static int m32r_adjust_cost (insn, link, dep_insn, cost) rtx insn ATTRIBUTE_UNUSED; rtx link ATTRIBUTE_UNUSED; *************** m32r_is_insn (insn) *** 1498,1504 **** /* Increase the priority of long instructions so that the short instructions are scheduled ahead of the long ones. */ ! int m32r_adjust_priority (insn, priority) rtx insn; int priority; --- 1550,1556 ---- /* Increase the priority of long instructions so that the short instructions are scheduled ahead of the long ones. */ ! static int m32r_adjust_priority (insn, priority) rtx insn; int priority; *************** m32r_adjust_priority (insn, priority) *** 1513,1522 **** /* Initialize for scheduling a group of instructions. */ ! void ! m32r_sched_init (stream, verbose) FILE * stream ATTRIBUTE_UNUSED; int verbose ATTRIBUTE_UNUSED; { m32r_sched_odd_word_p = FALSE; } --- 1565,1575 ---- /* Initialize for scheduling a group of instructions. */ ! static void ! m32r_sched_init (stream, verbose, max_ready) FILE * stream ATTRIBUTE_UNUSED; int verbose ATTRIBUTE_UNUSED; + int max_ready ATTRIBUTE_UNUSED; { m32r_sched_odd_word_p = FALSE; } *************** m32r_sched_init (stream, verbose) *** 1524,1538 **** /* Reorder the schedulers priority list if needed */ ! void ! m32r_sched_reorder (stream, verbose, ready, n_ready) FILE * stream; int verbose; rtx * ready; ! int n_ready; { if (TARGET_DEBUG) ! return; if (verbose <= 7) stream = (FILE *)0; --- 1577,1594 ---- /* Reorder the schedulers priority list if needed */ ! static int ! m32r_sched_reorder (stream, verbose, ready, n_readyp, clock) FILE * stream; int verbose; rtx * ready; ! int *n_readyp; ! int clock ATTRIBUTE_UNUSED; { + int n_ready = *n_readyp; + if (TARGET_DEBUG) ! return m32r_issue_rate (); if (verbose <= 7) stream = (FILE *)0; *************** m32r_sched_reorder (stream, verbose, rea *** 1559,1565 **** for (i = n_ready-1; i >= 0; i--) { rtx insn = ready[i]; - enum rtx_code code; if (! m32r_is_insn (insn)) { --- 1615,1620 ---- *************** m32r_sched_reorder (stream, verbose, rea *** 1604,1621 **** if (new_tail+1 != new_head) abort (); ! bcopy ((char *) new_head, (char *) ready, sizeof (rtx) * n_ready); if (stream) { - #ifdef HAIFA - fprintf (stream, ";;\t\t::: New ready list: "); - debug_ready_list (ready, n_ready); - #else int i; for (i = 0; i < n_ready; i++) { rtx insn = ready[i]; - enum rtx_code code; fprintf (stream, " %d", INSN_UID (ready[i])); --- 1659,1672 ---- if (new_tail+1 != new_head) abort (); ! memcpy (ready, new_head, sizeof (rtx) * n_ready); if (stream) { int i; + fprintf (stream, ";;\t\t::: New ready list: "); for (i = 0; i < n_ready; i++) { rtx insn = ready[i]; fprintf (stream, " %d", INSN_UID (ready[i])); *************** m32r_sched_reorder (stream, verbose, rea *** 1630,1646 **** } fprintf (stream, "\n"); - #endif } } } - /* If we have a machine that can issue a variable # of instructions per cycle, indicate how many more instructions can be issued after the current one. */ ! int ! m32r_sched_variable_issue (stream, verbose, insn, how_many) FILE * stream; int verbose; rtx insn; --- 1681,1707 ---- } fprintf (stream, "\n"); } } + return m32r_issue_rate (); + } + + /* Indicate how many instructions can be issued at the same time. + This is sort of a lie. The m32r can issue only 1 long insn at + once, but it can issue 2 short insns. The default therefore is + set at 2, but this can be overridden by the command line option + -missue-rate=1 */ + static int + m32r_issue_rate () + { + return ((TARGET_LOW_ISSUE_RATE) ? 1 : 2); } /* If we have a machine that can issue a variable # of instructions per cycle, indicate how many more instructions can be issued after the current one. */ ! static int ! m32r_variable_issue (stream, verbose, insn, how_many) FILE * stream; int verbose; rtx insn; *************** m32r_compute_function_type (decl) *** 1719,1725 **** return fn_type; /* Compute function type. */ ! fn_type = (lookup_attribute ("interrupt", DECL_MACHINE_ATTRIBUTES (current_function_decl)) != NULL_TREE ? M32R_FUNCTION_INTERRUPT : M32R_FUNCTION_NORMAL); --- 1780,1786 ---- return fn_type; /* Compute function type. */ ! fn_type = (lookup_attribute ("interrupt", DECL_ATTRIBUTES (current_function_decl)) != NULL_TREE ? M32R_FUNCTION_INTERRUPT : M32R_FUNCTION_NORMAL); *************** static struct m32r_frame_info zero_frame *** 1809,1815 **** && (regs_ever_live[regno] && (!call_used_regs[regno] || interrupt_p))) #define MUST_SAVE_FRAME_POINTER (regs_ever_live[FRAME_POINTER_REGNUM]) ! #define MUST_SAVE_RETURN_ADDR (regs_ever_live[RETURN_ADDR_REGNUM] || profile_flag) #define SHORT_INSN_SIZE 2 /* size of small instructions */ #define LONG_INSN_SIZE 4 /* size of long instructions */ --- 1870,1876 ---- && (regs_ever_live[regno] && (!call_used_regs[regno] || interrupt_p))) #define MUST_SAVE_FRAME_POINTER (regs_ever_live[FRAME_POINTER_REGNUM]) ! #define MUST_SAVE_RETURN_ADDR (regs_ever_live[RETURN_ADDR_REGNUM] || current_function_profile) #define SHORT_INSN_SIZE 2 /* size of small instructions */ #define LONG_INSN_SIZE 4 /* size of long instructions */ *************** m32r_expand_prologue () *** 1963,1969 **** if (frame_pointer_needed) emit_insn (gen_movsi (frame_pointer_rtx, stack_pointer_rtx)); ! if (profile_flag || profile_block_flag) emit_insn (gen_blockage ()); } --- 2024,2030 ---- if (frame_pointer_needed) emit_insn (gen_movsi (frame_pointer_rtx, stack_pointer_rtx)); ! if (current_function_profile) emit_insn (gen_blockage ()); } *************** m32r_expand_prologue () *** 1972,1981 **** Note, if this is changed, you need to mirror the changes in m32r_compute_frame_size which calculates the prolog size. */ ! void m32r_output_function_prologue (file, size) FILE * file; ! int size; { enum m32r_function_type fn_type = m32r_compute_function_type (current_function_decl); --- 2033,2042 ---- Note, if this is changed, you need to mirror the changes in m32r_compute_frame_size which calculates the prolog size. */ ! static void m32r_output_function_prologue (file, size) FILE * file; ! HOST_WIDE_INT size; { enum m32r_function_type fn_type = m32r_compute_function_type (current_function_decl); *************** m32r_output_function_prologue (file, siz *** 2002,2011 **** /* Do any necessary cleanup after a function to restore stack, frame, and regs. */ ! void m32r_output_function_epilogue (file, size) FILE * file; ! int size ATTRIBUTE_UNUSED; { int regno; int noepilogue = FALSE; --- 2063,2072 ---- /* Do any necessary cleanup after a function to restore stack, frame, and regs. */ ! static void m32r_output_function_epilogue (file, size) FILE * file; ! HOST_WIDE_INT size ATTRIBUTE_UNUSED; { int regno; int noepilogue = FALSE; *************** m32r_print_operand (file, x, code) *** 2184,2197 **** if (GET_CODE (x) == REG) fprintf (file, "@+%s", reg_names [REGNO (x)]); else ! output_operand_lossage ("invalid operand to %s code"); return; case 'p': if (GET_CODE (x) == REG) fprintf (file, "@%s+", reg_names [REGNO (x)]); else ! output_operand_lossage ("invalid operand to %p code"); return; case 'R' : --- 2245,2258 ---- if (GET_CODE (x) == REG) fprintf (file, "@+%s", reg_names [REGNO (x)]); else ! output_operand_lossage ("invalid operand to %%s code"); return; case 'p': if (GET_CODE (x) == REG) fprintf (file, "@%s+", reg_names [REGNO (x)]); else ! output_operand_lossage ("invalid operand to %%p code"); return; case 'R' : *************** m32r_print_operand (file, x, code) *** 2214,2220 **** fputc (')', file); } else ! output_operand_lossage ("invalid operand to %R code"); return; case 'H' : /* High word */ --- 2275,2281 ---- fputc (')', file); } else ! output_operand_lossage ("invalid operand to %%R code"); return; case 'H' : /* High word */ *************** m32r_print_operand (file, x, code) *** 2237,2243 **** code == 'L' ? INTVAL (first) : INTVAL (second)); } else ! output_operand_lossage ("invalid operand to %H/%L code"); return; case 'A' : --- 2298,2304 ---- code == 'L' ? INTVAL (first) : INTVAL (second)); } else ! output_operand_lossage ("invalid operand to %%H/%%L code"); return; case 'A' : *************** m32r_print_operand (file, x, code) *** 2247,2253 **** if (GET_CODE (x) != CONST_DOUBLE || GET_MODE_CLASS (GET_MODE (x)) != MODE_FLOAT) ! fatal_insn ("Bad insn for 'A'", x); REAL_VALUE_FROM_CONST_DOUBLE (d, x); REAL_VALUE_TO_DECIMAL (d, "%.20e", str); fprintf (file, "%s", str); --- 2308,2314 ---- if (GET_CODE (x) != CONST_DOUBLE || GET_MODE_CLASS (GET_MODE (x)) != MODE_FLOAT) ! fatal_insn ("bad insn for 'A'", x); REAL_VALUE_FROM_CONST_DOUBLE (d, x); REAL_VALUE_TO_DECIMAL (d, "%.20e", str); fprintf (file, "%s", str); *************** m32r_print_operand (file, x, code) *** 2299,2305 **** fputc (')', file); return; default : ! output_operand_lossage ("invalid operand to %T/%B code"); return; } break; --- 2360,2366 ---- fputc (')', file); return; default : ! output_operand_lossage ("invalid operand to %%T/%%B code"); return; } break; *************** m32r_print_operand (file, x, code) *** 2314,2320 **** fputs (".a", file); } else ! output_operand_lossage ("invalid operand to %U code"); return; case 'N' : --- 2375,2381 ---- fputs (".a", file); } else ! output_operand_lossage ("invalid operand to %%U code"); return; case 'N' : *************** m32r_print_operand (file, x, code) *** 2322,2328 **** if (GET_CODE (x) == CONST_INT) output_addr_const (file, GEN_INT (- INTVAL (x))); else ! output_operand_lossage ("invalid operand to %N code"); return; case 'X' : --- 2383,2389 ---- if (GET_CODE (x) == CONST_INT) output_addr_const (file, GEN_INT (- INTVAL (x))); else ! output_operand_lossage ("invalid operand to %%N code"); return; case 'X' : *************** m32r_print_operand (file, x, code) *** 2367,2387 **** if (GET_CODE (addr) == PRE_INC) { if (GET_CODE (XEXP (addr, 0)) != REG) ! fatal_insn ("Pre-increment address is not a register", x); fprintf (file, "@+%s", reg_names[REGNO (XEXP (addr, 0))]); } else if (GET_CODE (addr) == PRE_DEC) { if (GET_CODE (XEXP (addr, 0)) != REG) ! fatal_insn ("Pre-decrement address is not a register", x); fprintf (file, "@-%s", reg_names[REGNO (XEXP (addr, 0))]); } else if (GET_CODE (addr) == POST_INC) { if (GET_CODE (XEXP (addr, 0)) != REG) ! fatal_insn ("Post-increment address is not a register", x); fprintf (file, "@%s+", reg_names[REGNO (XEXP (addr, 0))]); } --- 2428,2448 ---- if (GET_CODE (addr) == PRE_INC) { if (GET_CODE (XEXP (addr, 0)) != REG) ! fatal_insn ("pre-increment address is not a register", x); fprintf (file, "@+%s", reg_names[REGNO (XEXP (addr, 0))]); } else if (GET_CODE (addr) == PRE_DEC) { if (GET_CODE (XEXP (addr, 0)) != REG) ! fatal_insn ("pre-decrement address is not a register", x); fprintf (file, "@-%s", reg_names[REGNO (XEXP (addr, 0))]); } else if (GET_CODE (addr) == POST_INC) { if (GET_CODE (XEXP (addr, 0)) != REG) ! fatal_insn ("post-increment address is not a register", x); fprintf (file, "@%s+", reg_names[REGNO (XEXP (addr, 0))]); } *************** m32r_print_operand_address (file, addr) *** 2459,2465 **** fputs (reg_names[REGNO (base)], file); } else ! fatal_insn ("Bad address", addr); } else if (GET_CODE (base) == LO_SUM) { --- 2520,2526 ---- fputs (reg_names[REGNO (base)], file); } else ! fatal_insn ("bad address", addr); } else if (GET_CODE (base) == LO_SUM) { *************** m32r_print_operand_address (file, addr) *** 2475,2486 **** fputs (reg_names[REGNO (XEXP (base, 0))], file); } else ! fatal_insn ("Bad address", addr); break; case LO_SUM : if (GET_CODE (XEXP (addr, 0)) != REG) ! fatal_insn ("Lo_sum not of register", addr); if (small_data_operand (XEXP (addr, 1), VOIDmode)) fputs ("sda(", file); else --- 2536,2547 ---- fputs (reg_names[REGNO (XEXP (base, 0))], file); } else ! fatal_insn ("bad address", addr); break; case LO_SUM : if (GET_CODE (XEXP (addr, 0)) != REG) ! fatal_insn ("lo_sum not of register", addr); if (small_data_operand (XEXP (addr, 1), VOIDmode)) fputs ("sda(", file); else *************** emit_cond_move (operands, insn) *** 2608,2619 **** } sprintf (buffer, "mvfc %s, cbr", dest); ! /* If the true value was '0' then we need to invert the results of the move. */ if (INTVAL (operands [2]) == 0) sprintf (buffer + strlen (buffer), "\n\txor3 %s, %s, #1", dest, dest); ! return buffer; } --- 2669,2680 ---- } sprintf (buffer, "mvfc %s, cbr", dest); ! /* If the true value was '0' then we need to invert the results of the move. */ if (INTVAL (operands [2]) == 0) sprintf (buffer + strlen (buffer), "\n\txor3 %s, %s, #1", dest, dest); ! return buffer; } *************** m32r_expand_block_move (operands) *** 2725,2732 **** /* If necessary, generate a loop to handle the bulk of the copy. */ if (bytes) { ! rtx label; ! rtx final_src; rtx at_a_time = GEN_INT (MAX_MOVE_BYTES); rtx rounded_total = GEN_INT (bytes); --- 2786,2793 ---- /* If necessary, generate a loop to handle the bulk of the copy. */ if (bytes) { ! rtx label = NULL_RTX; ! rtx final_src = NULL_RTX; rtx at_a_time = GEN_INT (MAX_MOVE_BYTES); rtx rounded_total = GEN_INT (bytes); *************** m32r_expand_block_move (operands) *** 2777,2783 **** operands[3] is a temp register. operands[4] is a temp register. */ ! char * m32r_output_block_move (insn, operands) rtx insn ATTRIBUTE_UNUSED; rtx operands[]; --- 2838,2844 ---- operands[3] is a temp register. operands[4] is a temp register. */ ! void m32r_output_block_move (insn, operands) rtx insn ATTRIBUTE_UNUSED; rtx operands[]; *************** m32r_output_block_move (insn, operands) *** 2891,2898 **** first_time = 0; } - - return ""; } /* Return true if op is an integer constant, less than or equal to --- 2952,2957 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m32r/m32r.h gcc-3.1/gcc/config/m32r/m32r.h *** gcc-3.0.4/gcc/config/m32r/m32r.h Wed Jan 24 12:47:45 2001 --- gcc-3.1/gcc/config/m32r/m32r.h Tue Jan 8 22:51:33 2002 *************** *** 1,5 **** /* Definitions of target machine for GNU compiler, Mitsubishi M32R cpu. ! Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,5 ---- /* Definitions of target machine for GNU compiler, Mitsubishi M32R cpu. ! Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This file is part of GNU CC. *************** Boston, MA 02111-1307, USA. */ *** 23,31 **** - longlong.h? */ - /* ??? Create elf.h and have svr4.h include it. */ - #include "svr4.h" - #undef SWITCH_TAKES_ARG #undef WORD_SWITCH_TAKES_ARG #undef HANDLE_SYSV_PRAGMA --- 23,28 ---- *************** Boston, MA 02111-1307, USA. */ *** 43,48 **** --- 40,97 ---- #undef ENDFILE_SPEC #undef SUBTARGET_SWITCHES + + /* M32R/X overrides. */ + /* Print subsidiary information on the compiler version in use. */ + #define TARGET_VERSION fprintf (stderr, " (m32r/x)"); + + /* Additional flags for the preprocessor. */ + #define CPP_CPU_SPEC "%{m32rx:-D__M32RX__} %{m32r:-U__M32RX__}" + + /* Assembler switches. */ + #define ASM_CPU_SPEC \ + "%{m32r} %{m32rx} %{!O0: %{O*: -O}} --no-warn-explicit-parallel-conflicts" + + /* Use m32rx specific crt0/crtinit/crtfini files. */ + #define STARTFILE_CPU_SPEC "%{!shared:crt0.o%s} %{m32rx:m32rx/crtinit.o%s} %{!m32rx:crtinit.o%s}" + #define ENDFILE_CPU_SPEC "-lgloss %{m32rx:m32rx/crtfini.o%s} %{!m32rx:crtfini.o%s}" + + /* Extra machine dependent switches. */ + #define SUBTARGET_SWITCHES \ + { "32rx", TARGET_M32RX_MASK, "Compile for the m32rx" }, \ + { "32r", -TARGET_M32RX_MASK, "" }, + + /* Define this macro as a C expression for the initializer of an array of + strings to tell the driver program which options are defaults for this + target and thus do not need to be handled specially when using + `MULTILIB_OPTIONS'. */ + #define SUBTARGET_MULTILIB_DEFAULTS , "m32r" + + /* Number of additional registers the subtarget defines. */ + #define SUBTARGET_NUM_REGISTERS 1 + + /* 1 for registers that cannot be allocated. */ + #define SUBTARGET_FIXED_REGISTERS , 1 + + /* 1 for registers that are not available across function calls. */ + #define SUBTARGET_CALL_USED_REGISTERS , 1 + + /* Order to allocate model specific registers. */ + #define SUBTARGET_REG_ALLOC_ORDER , 19 + + /* Registers which are accumulators. */ + #define SUBTARGET_REG_CLASS_ACCUM 0x80000 + + /* All registers added. */ + #define SUBTARGET_REG_CLASS_ALL SUBTARGET_REG_CLASS_ACCUM + + /* Additional accumulator registers. */ + #define SUBTARGET_ACCUM_P(REGNO) ((REGNO) == 19) + + /* Define additional register names. */ + #define SUBTARGET_REGISTER_NAMES , "a1" + /* end M32R/X overrides. */ + /* Print subsidiary information on the compiler version in use. */ #ifndef TARGET_VERSION #define TARGET_VERSION fprintf (stderr, " (m32r)") *************** extern int target_flags; *** 154,161 **** #define TARGET_ALIGN_LOOPS (target_flags & TARGET_ALIGN_LOOPS_MASK) /* Change issue rate. */ ! #define TARGET_ISSUE_RATE_MASK (1 << 3) ! #define TARGET_ISSUE_RATE (target_flags & TARGET_ISSUE_RATE_MASK) /* Change branch cost */ #define TARGET_BRANCH_COST_MASK (1 << 4) --- 203,210 ---- #define TARGET_ALIGN_LOOPS (target_flags & TARGET_ALIGN_LOOPS_MASK) /* Change issue rate. */ ! #define TARGET_LOW_ISSUE_RATE_MASK (1 << 3) ! #define TARGET_LOW_ISSUE_RATE (target_flags & TARGET_LOW_ISSUE_RATE_MASK) /* Change branch cost */ #define TARGET_BRANCH_COST_MASK (1 << 4) *************** extern int target_flags; *** 164,169 **** --- 213,224 ---- /* Target machine to compile for. */ #define TARGET_M32R 1 + /* Support extended instruction set. */ + #define TARGET_M32RX_MASK (1 << 5) + #define TARGET_M32RX (target_flags & TARGET_M32RX_MASK) + #undef TARGET_M32R + #define TARGET_M32R (! TARGET_M32RX) + /* Macro to define tables used to set the flags. This is a list in braces of pairs in braces, each pair being { "NAME", VALUE } *************** extern int target_flags; *** 187,195 **** { "align-loops", TARGET_ALIGN_LOOPS_MASK, \ N_("Align all loops to 32 byte boundary") }, \ { "no-align-loops", -TARGET_ALIGN_LOOPS_MASK, "" }, \ ! { "issue-rate=1", TARGET_ISSUE_RATE_MASK, \ N_("Only issue one instruction per cycle") }, \ ! { "issue-rate=2", -TARGET_ISSUE_RATE_MASK, "" }, \ { "branch-cost=1", TARGET_BRANCH_COST_MASK, \ N_("Prefer branches over conditional execution") }, \ { "branch-cost=2", -TARGET_BRANCH_COST_MASK, "" }, \ --- 242,250 ---- { "align-loops", TARGET_ALIGN_LOOPS_MASK, \ N_("Align all loops to 32 byte boundary") }, \ { "no-align-loops", -TARGET_ALIGN_LOOPS_MASK, "" }, \ ! { "issue-rate=1", TARGET_LOW_ISSUE_RATE_MASK, \ N_("Only issue one instruction per cycle") }, \ ! { "issue-rate=2", -TARGET_LOW_ISSUE_RATE_MASK, "" }, \ { "branch-cost=1", TARGET_BRANCH_COST_MASK, \ N_("Prefer branches over conditional execution") }, \ { "branch-cost=2", -TARGET_BRANCH_COST_MASK, "" }, \ *************** extern enum m32r_sdata m32r_sdata; *** 484,498 **** #define PTRDIFF_TYPE "long int" #define WCHAR_TYPE "short unsigned int" #define WCHAR_TYPE_SIZE 16 - - /* Define results of standard character escape sequences. */ - #define TARGET_BELL 007 - #define TARGET_BS 010 - #define TARGET_TAB 011 - #define TARGET_NEWLINE 012 - #define TARGET_VT 013 - #define TARGET_FF 014 - #define TARGET_CR 015 /* Standard register usage. */ --- 539,544 ---- *************** extern enum m32r_sdata m32r_sdata; *** 525,531 **** 16 - arg pointer 17 - carry flag 18 - accumulator ! By default, the extension registers are not available. */ #ifndef SUBTARGET_FIXED_REGISTERS --- 571,577 ---- 16 - arg pointer 17 - carry flag 18 - accumulator ! 19 - accumulator 1 in the m32r/x By default, the extension registers are not available. */ #ifndef SUBTARGET_FIXED_REGISTERS *************** extern enum m32r_sdata m32r_sdata; *** 605,611 **** ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD) /* Value is 1 if hard register REGNO can hold a value of machine-mode MODE. */ ! extern unsigned int m32r_hard_regno_mode_ok[]; extern unsigned int m32r_mode_class[]; #define HARD_REGNO_MODE_OK(REGNO, MODE) \ ((m32r_hard_regno_mode_ok[REGNO] & m32r_mode_class[MODE]) != 0) --- 651,657 ---- ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD) /* Value is 1 if hard register REGNO can hold a value of machine-mode MODE. */ ! extern unsigned int m32r_hard_regno_mode_ok[FIRST_PSEUDO_REGISTER]; extern unsigned int m32r_mode_class[]; #define HARD_REGNO_MODE_OK(REGNO, MODE) \ ((m32r_hard_regno_mode_ok[REGNO] & m32r_mode_class[MODE]) != 0) *************** extern enum reg_class m32r_regno_reg_cla *** 753,767 **** #define INT8_P(X) ((X) >= -0x80 && (X) <= 0x7f) #define INT16_P(X) ((X) >= -0x8000 && (X) <= 0x7fff) #define CMP_INT16_P(X) ((X) >= -0x7fff && (X) <= 0x8000) - #define UINT16_P(X) (((unsigned HOST_WIDE_INT)(X)) <= 0xffff) #define UPPER16_P(X) (((X) & 0xffff) == 0 \ && ((X) >> 16) >= -0x8000 \ && ((X) >> 16) <= 0x7fff) ! #define UINT24_P(X) (((unsigned HOST_WIDE_INT) (X)) < 0x1000000) ! #define INT32_P(X) (((X) >= -(HOST_WIDE_INT) 0x80000000 \ ! && (X) <= (HOST_WIDE_INT) 0x7fffffff) \ ! || (unsigned HOST_WIDE_INT) (X) <= 0xffffffff) ! #define UINT5_P(X) ((X) >= 0 && (X) < 32) #define INVERTED_SIGNED_8BIT(VAL) ((VAL) >= -127 && (VAL) <= 128) #define CONST_OK_FOR_LETTER_P(VALUE, C) \ --- 799,811 ---- #define INT8_P(X) ((X) >= -0x80 && (X) <= 0x7f) #define INT16_P(X) ((X) >= -0x8000 && (X) <= 0x7fff) #define CMP_INT16_P(X) ((X) >= -0x7fff && (X) <= 0x8000) #define UPPER16_P(X) (((X) & 0xffff) == 0 \ && ((X) >> 16) >= -0x8000 \ && ((X) >> 16) <= 0x7fff) ! #define UINT16_P(X) (((unsigned HOST_WIDE_INT) (X)) <= 0x0000ffff) ! #define UINT24_P(X) (((unsigned HOST_WIDE_INT) (X)) <= 0x00ffffff) ! #define UINT32_P(X) (((unsigned HOST_WIDE_INT) (X)) <= 0xffffffff) ! #define UINT5_P(X) ((X) >= 0 && (X) < 32) #define INVERTED_SIGNED_8BIT(VAL) ((VAL) >= -127 && (VAL) <= 128) #define CONST_OK_FOR_LETTER_P(VALUE, C) \ *************** M32R_STACK_ALIGN (current_function_outgo *** 1046,1064 **** /* Round arg MODE/TYPE up to the next word boundary. */ #define ROUND_ADVANCE_ARG(MODE, TYPE) \ ((MODE) == BLKmode \ ! ? ROUND_ADVANCE (int_size_in_bytes (TYPE)) \ : ROUND_ADVANCE (GET_MODE_SIZE (MODE))) /* Round CUM up to the necessary point for argument MODE/TYPE. */ - #if 0 - #define ROUND_ADVANCE_CUM(CUM, MODE, TYPE) \ - ((((MODE) == BLKmode ? TYPE_ALIGN (TYPE) : GET_MODE_BITSIZE (MODE)) \ - > BITS_PER_WORD) \ - ? ((CUM) + 1 & ~1) \ - : (CUM)) - #else #define ROUND_ADVANCE_CUM(CUM, MODE, TYPE) (CUM) - #endif /* Return boolean indicating arg of type TYPE and mode MODE will be passed in a reg. This includes arguments that have to be passed by reference as the --- 1090,1100 ---- /* Round arg MODE/TYPE up to the next word boundary. */ #define ROUND_ADVANCE_ARG(MODE, TYPE) \ ((MODE) == BLKmode \ ! ? ROUND_ADVANCE ((unsigned int) int_size_in_bytes (TYPE)) \ : ROUND_ADVANCE (GET_MODE_SIZE (MODE))) /* Round CUM up to the necessary point for argument MODE/TYPE. */ #define ROUND_ADVANCE_CUM(CUM, MODE, TYPE) (CUM) /* Return boolean indicating arg of type TYPE and mode MODE will be passed in a reg. This includes arguments that have to be passed by reference as the *************** M32R_STACK_ALIGN (current_function_outgo *** 1209,1242 **** init_emit, once for each function, before code is generated. */ #define INIT_EXPANDERS m32r_init_expanders () - /* This macro generates the assembly code for function entry. - FILE is a stdio stream to output the code to. - SIZE is an int: how many units of temporary storage to allocate. - Refer to the array `regs_ever_live' to determine which registers - to save; `regs_ever_live[I]' is nonzero if register number I - is ever used in the function. This macro is responsible for - knowing which registers should not be saved even if used. */ - #define FUNCTION_PROLOGUE(FILE, SIZE) \ - m32r_output_function_prologue (FILE, SIZE) - /* EXIT_IGNORE_STACK should be nonzero if, when returning from a function, the stack pointer does not matter. The value is tested only in functions that have frame pointers. No definition is equivalent to always zero. */ #define EXIT_IGNORE_STACK 1 - /* This macro generates the assembly code for function exit, - on machines that need it. If FUNCTION_EPILOGUE is not defined - then individual return instructions are generated for each - return statement. Args are same as for FUNCTION_PROLOGUE. - - The function epilogue should not depend on the current stack pointer! - It should use the frame pointer only. This is mandatory because - of alloca; we also take advantage of it to omit stack adjustments - before returning. */ - #define FUNCTION_EPILOGUE(FILE, SIZE) \ - m32r_output_function_epilogue (FILE, SIZE) - /* Output assembler code to FILE to increment profiler label # LABELNO for profiling a function entry. */ #define FUNCTION_PROFILER(FILE, LABELNO) abort () --- 1245,1256 ---- *************** do { \ *** 1374,1380 **** && RTX_OK_FOR_BASE_P (XEXP (X, 0))) /* Local to this file. */ ! /* Is this a increment/decrement and store operation. */ #define STORE_PREINC_PREDEC_P(MODE, X) \ (((MODE) == SImode || (MODE) == SFmode) \ && (GET_CODE (X) == PRE_INC || GET_CODE (X) == PRE_DEC) \ --- 1388,1394 ---- && RTX_OK_FOR_BASE_P (XEXP (X, 0))) /* Local to this file. */ ! /* Is this an increment/decrement and store operation. */ #define STORE_PREINC_PREDEC_P(MODE, X) \ (((MODE) == SImode || (MODE) == SFmode) \ && (GET_CODE (X) == PRE_INC || GET_CODE (X) == PRE_DEC) \ *************** do { \ *** 1514,1572 **** register. */ #define NO_RECURSIVE_FUNCTION_CSE - /* A C statement (sans semicolon) to update the integer variable COST based on - the relationship between INSN that is dependent on DEP_INSN through the - dependence LINK. The default is to make no adjustment to COST. This can be - used for example to specify to the scheduler that an output- or - anti-dependence does not incur the same cost as a data-dependence. */ - - #define ADJUST_COST(INSN,LINK,DEP_INSN,COST) \ - (COST) = m32r_adjust_cost (INSN, LINK, DEP_INSN, COST) - - /* A C statement (sans semicolon) to update the integer scheduling - priority `INSN_PRIORITY(INSN)'. Reduce the priority to execute - the INSN earlier, increase the priority to execute INSN later. - Do not define this macro if you do not need to adjust the - scheduling priorities of insns. */ - #define ADJUST_PRIORITY(INSN) \ - INSN_PRIORITY (INSN) = m32r_adjust_priority (INSN, INSN_PRIORITY (INSN)) - - /* Macro to determine whether the Haifa scheduler is used. */ - #ifdef HAIFA - #define HAIFA_P 1 - #else - #define HAIFA_P 0 - #endif - - /* Indicate how many instructions can be issued at the same time. - This is sort of a lie. The m32r can issue only 1 long insn at - once, but it can issue 2 short insns. The default therefore is - set at 2, but this can be overridden by the command line option - -missue-rate=1 */ - #define ISSUE_RATE ((TARGET_ISSUE_RATE) ? 1 : 2) - - /* If we have a machine that can issue a variable # of instructions - per cycle, indicate how many more instructions can be issued - after the current one. */ - #define MD_SCHED_VARIABLE_ISSUE(STREAM, VERBOSE, INSN, HOW_MANY) \ - (HOW_MANY) = m32r_sched_variable_issue (STREAM, VERBOSE, INSN, HOW_MANY) - - /* Whether we are on an odd word boundary while scheduling. */ - extern int m32r_sched_odd_word_p; - - /* Hook to run before scheduling a block of insns. */ - #define MD_SCHED_INIT(STREAM, VERBOSE, MAX_READY) \ - m32r_sched_init (STREAM, VERBOSE) - - /* Hook to reorder the list of ready instructions. */ - #define MD_SCHED_REORDER(STREAM, VERBOSE, READY, N_READY, CLOCK, CIM) \ - do \ - { \ - m32r_sched_reorder (STREAM, VERBOSE, READY, N_READY); \ - CIM = issue_rate; \ - } \ - while (0) - /* When the `length' insn attribute is used, this macro specifies the value to be assigned to the address of the first insn in a function. If not specified, 0 is used. */ --- 1528,1533 ---- *************** extern int m32r_sched_odd_word_p; *** 1589,1595 **** `in_text' and `in_data'. You need not define this macro on a system with no other sections (that GCC needs to use). */ #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_sdata, in_sbss, in_const, in_ctors, in_dtors /* One or more functions to be defined in "varasm.c". These functions should do jobs analogous to those of `text_section' and --- 1550,1556 ---- `in_text' and `in_data'. You need not define this macro on a system with no other sections (that GCC needs to use). */ #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_sdata, in_sbss, in_const /* One or more functions to be defined in "varasm.c". These functions should do jobs analogous to those of `text_section' and *************** extern int m32r_sched_odd_word_p; *** 1598,1605 **** #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ CONST_SECTION_FUNCTION \ - CTORS_SECTION_FUNCTION \ - DTORS_SECTION_FUNCTION \ SDATA_SECTION_FUNCTION \ SBSS_SECTION_FUNCTION --- 1559,1564 ---- *************** sbss_section () \ *** 1630,1636 **** or a constant of some sort. RELOC indicates whether the initial value of EXP requires link-time relocations. */ #undef SELECT_SECTION ! #define SELECT_SECTION(EXP, RELOC) m32r_select_section ((EXP), (RELOC)) /* A C statement or statements to switch to the appropriate section for output of RTX in mode MODE. You can assume that RTX --- 1589,1596 ---- or a constant of some sort. RELOC indicates whether the initial value of EXP requires link-time relocations. */ #undef SELECT_SECTION ! #define SELECT_SECTION(EXP, RELOC, ALIGN) \ ! m32r_select_section ((EXP), (RELOC)) /* A C statement or statements to switch to the appropriate section for output of RTX in mode MODE. You can assume that RTX *************** do { \ *** 1759,1829 **** no longer contain unusual constructs. */ #define ASM_APP_OFF "" - /* This is how to output an assembler line defining a `char' constant. */ - #define ASM_OUTPUT_CHAR(FILE, VALUE) \ - do \ - { \ - fprintf (FILE, "\t.byte\t"); \ - output_addr_const (FILE, (VALUE)); \ - fprintf (FILE, "\n"); \ - } \ - while (0) - - /* This is how to output an assembler line defining a `short' constant. */ - #define ASM_OUTPUT_SHORT(FILE, VALUE) \ - do \ - { \ - fprintf (FILE, "\t.hword\t"); \ - output_addr_const (FILE, (VALUE)); \ - fprintf (FILE, "\n"); \ - } \ - while (0) - - /* This is how to output an assembler line defining an `int' constant. - We also handle symbol output here. */ - #define ASM_OUTPUT_INT(FILE, VALUE) \ - do \ - { \ - fprintf (FILE, "\t.word\t"); \ - output_addr_const (FILE, (VALUE)); \ - fprintf (FILE, "\n"); \ - } \ - while (0) - - /* This is how to output an assembler line defining a `float' constant. */ - #define ASM_OUTPUT_FLOAT(FILE, VALUE) \ - do \ - { \ - long t; \ - char str[30]; \ - REAL_VALUE_TO_TARGET_SINGLE ((VALUE), t); \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", str); \ - fprintf (FILE, "\t.word\t0x%lx %s %s\n", \ - t, ASM_COMMENT_START, str); \ - } \ - while (0) - - /* This is how to output an assembler line defining a `double' constant. */ - #define ASM_OUTPUT_DOUBLE(FILE, VALUE) \ - do \ - { \ - long t[2]; \ - char str[30]; \ - REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), t); \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", str); \ - fprintf (FILE, "\t.word\t0x%lx %s %s\n\t.word\t0x%lx\n", \ - t[0], ASM_COMMENT_START, str, t[1]); \ - } \ - while (0) - - /* This is how to output an assembler line for a numeric constant byte. */ - #define ASM_OUTPUT_BYTE(FILE, VALUE) \ - fprintf (FILE, "%s0x%x\n", ASM_BYTE_OP, (VALUE)) - - /* The assembler's parentheses characters. */ - #define ASM_OPEN_PAREN "(" - #define ASM_CLOSE_PAREN ")" - /* This is how to output the definition of a user-level label named NAME, such as the label on a static function or variable NAME. */ /* On the M32R we need to ensure the next instruction starts on a 32 bit --- 1719,1724 ---- *************** do { \ *** 1928,1934 **** /* A C expression which evaluates to true if CODE is a valid punctuation character for use in the `PRINT_OPERAND' macro. */ ! extern char m32r_punct_chars[]; #define PRINT_OPERAND_PUNCT_VALID_P(CHAR) \ m32r_punct_chars[(unsigned char) (CHAR)] --- 1823,1829 ---- /* A C expression which evaluates to true if CODE is a valid punctuation character for use in the `PRINT_OPERAND' macro. */ ! extern char m32r_punct_chars[256]; #define PRINT_OPERAND_PUNCT_VALID_P(CHAR) \ m32r_punct_chars[(unsigned char) (CHAR)] *************** extern char m32r_punct_chars[]; *** 2067,2075 **** #undef PREFERRED_DEBUGGING_TYPE #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG - /* How to renumber registers for dbx and gdb. */ - #define DBX_REGISTER_NUMBER(REGNO) (REGNO) - /* Turn off splitting of long stabs. */ #define DBX_CONTIN_LENGTH 0 --- 1962,1967 ---- *************** extern char m32r_punct_chars[]; *** 2098,2109 **** done, NIL if none. */ #define LOAD_EXTEND_OP(MODE) ZERO_EXTEND - /* Specify the tree operation to be used to convert reals to integers. */ - #define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR - - /* This is the kind of divide that is easiest to do in the general case. */ - #define EASY_DIV_EXPR TRUNC_DIV_EXPR - /* Max number of bytes we can move from memory to memory in one reasonably fast instruction. */ #define MOVE_MAX 4 --- 1990,1995 ---- *************** extern char m32r_punct_chars[]; *** 2130,2151 **** /* A function address in a call instruction. */ #define FUNCTION_MODE SImode - - /* A C expression whose value is nonzero if IDENTIFIER with arguments ARGS - is a valid machine specific attribute for DECL. - The attributes in ATTRIBUTES have previously been assigned to TYPE. */ - #define VALID_MACHINE_DECL_ATTRIBUTE(DECL, ATTRIBUTES, IDENTIFIER, ARGS) \ - m32r_valid_machine_decl_attribute (DECL, ATTRIBUTES, IDENTIFIER, ARGS) - - /* A C expression that returns zero if the attributes on TYPE1 and TYPE2 are - incompatible, one if they are compatible, and two if they are - nearly compatible (which causes a warning to be generated). */ - #define COMP_TYPE_ATTRIBUTES(TYPE1, TYPE2) \ - m32r_comp_type_attributes (TYPE1, TYPE2) - - /* Give newly defined TYPE some default attributes. */ - #define SET_DEFAULT_TYPE_ATTRIBUTES(TYPE) \ - m32r_set_default_type_attributes (TYPE) /* Define the information needed to generate branch and scc insns. This is stored from the compare operation. Note that we can't use "rtx" here --- 2016,2021 ---- *************** enum m32r_function_type *** 2169,2174 **** --- 2039,2045 ---- matched by the predicate. The list should have a trailing comma. */ #define PREDICATE_CODES \ + { "reg_or_zero_operand", { REG, SUBREG, CONST_INT }}, \ { "conditional_move_operand", { REG, SUBREG, CONST_INT }}, \ { "carry_compare_operand", { EQ, NE }}, \ { "eqne_comparison_operator", { EQ, NE }}, \ diff -Nrc3pad gcc-3.0.4/gcc/config/m32r/m32r.md gcc-3.1/gcc/config/m32r/m32r.md *** gcc-3.0.4/gcc/config/m32r/m32r.md Tue Nov 9 15:07:07 1999 --- gcc-3.1/gcc/config/m32r/m32r.md Wed Jan 9 11:02:07 2002 *************** *** 1,5 **** ;; Machine description of the Mitsubishi M32R cpu for GNU C compiler ! ;; Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc. ;; This file is part of GNU CC. --- 1,5 ---- ;; Machine description of the Mitsubishi M32R cpu for GNU C compiler ! ;; Copyright (C) 1996, 1997, 1998, 1999, 2001 Free Software Foundation, Inc. ;; This file is part of GNU CC. *************** *** 69,74 **** --- 69,94 ---- (define_attr "m32r" "no,yes" (const (symbol_ref "(TARGET_M32R != 0)"))) + (define_attr "m32rx" "no,yes" + (const (symbol_ref "(TARGET_M32RX != 0)"))) + + (define_attr "m32rx_pipeline" "either,s,o,long,m32r" + (cond [(eq_attr "m32rx" "no") + (const_string "m32r") + + (eq_attr "insn_size" "!short") + (const_string "long")] + + (cond [(eq_attr "type" "int2") + (const_string "either") + + (eq_attr "type" "load2,store2,shift2,uncond_branch,branch,call") + (const_string "o") + + (eq_attr "type" "mul2") + (const_string "s")] + + (const_string "long")))) ;; :::::::::::::::::::: ;; :: *************** *** 218,223 **** --- 238,273 ---- 3 0 [(eq_attr "insn_size" "short")]) + (define_function_unit "left" 1 1 + (and (eq_attr "m32rx_pipeline" "o,either") + (eq_attr "type" "!load2")) + 1 0 + [(eq_attr "insn_size" "long")]) + + (define_function_unit "left" 1 1 ;; load delay of 1 clock for mem execution + 1 clock for WB + (and (eq_attr "m32rx_pipeline" "o,either") + (eq_attr "type" "load2")) + 3 0 + [(eq_attr "insn_size" "long")]) + + (define_function_unit "right" 1 1 + (eq_attr "m32rx_pipeline" "s,either") + 1 0 + [(eq_attr "insn_size" "long")]) + + (define_function_unit "long" 1 1 + (and (eq_attr "m32rx" "yes") + (and (eq_attr "insn_size" "long") + (eq_attr "type" "!load4,load8"))) + 2 0 + [(eq_attr "insn_size" "short")]) + + (define_function_unit "long" 1 1 ;; load delay of 1 clock for mem execution + 1 clock for WB + (and (eq_attr "m32rx" "yes") + (and (eq_attr "insn_size" "long") + (eq_attr "type" "load4,load8"))) + 3 0 + [(eq_attr "insn_size" "short")]) ;; Expand prologue as RTL (define_expand "prologue" *************** *** 982,988 **** (match_operand:SI 2 "int8_operand" "")))] "optimize_size && m32r_not_same_reg (operands[0], operands[1])" [(set (match_dup 0) (match_dup 2)) ! (set (match_dup 0) (and:SI (match_dup 1) (match_dup 0)))] "") (define_insn "iorsi3" --- 1032,1038 ---- (match_operand:SI 2 "int8_operand" "")))] "optimize_size && m32r_not_same_reg (operands[0], operands[1])" [(set (match_dup 0) (match_dup 2)) ! (set (match_dup 0) (and:SI (match_dup 0) (match_dup 1)))] "") (define_insn "iorsi3" *************** *** 1014,1020 **** (match_operand:SI 2 "int8_operand" "")))] "optimize_size && m32r_not_same_reg (operands[0], operands[1])" [(set (match_dup 0) (match_dup 2)) ! (set (match_dup 0) (ior:SI (match_dup 1) (match_dup 0)))] "") (define_insn "xorsi3" --- 1064,1070 ---- (match_operand:SI 2 "int8_operand" "")))] "optimize_size && m32r_not_same_reg (operands[0], operands[1])" [(set (match_dup 0) (match_dup 2)) ! (set (match_dup 0) (ior:SI (match_dup 0) (match_dup 1)))] "") (define_insn "xorsi3" *************** *** 1046,1052 **** (match_operand:SI 2 "int8_operand" "")))] "optimize_size && m32r_not_same_reg (operands[0], operands[1])" [(set (match_dup 0) (match_dup 2)) ! (set (match_dup 0) (xor:SI (match_dup 1) (match_dup 0)))] "") (define_insn "negsi2" --- 1096,1102 ---- (match_operand:SI 2 "int8_operand" "")))] "optimize_size && m32r_not_same_reg (operands[0], operands[1])" [(set (match_dup 0) (match_dup 2)) ! (set (match_dup 0) (xor:SI (match_dup 0) (match_dup 1)))] "") (define_insn "negsi2" *************** *** 1126,1139 **** DONE; }") ;; The cmp_xxx_insn patterns set the condition bit to the result of the ;; comparison. There isn't a "compare equal" instruction so cmp_eqsi_insn ;; is quite inefficient. However, it is rarely used. (define_insn "cmp_eqsi_insn" [(set (reg:SI 17) ! (eq:SI (match_operand:SI 0 "register_operand" "r,r") ! (match_operand:SI 1 "reg_or_cmp_int16_operand" "r,P"))) (clobber (match_scratch:SI 2 "=&r,&r"))] "" "* --- 1176,1200 ---- DONE; }") + (define_insn "cmp_eqsi_zero_insn" + [(set (reg:SI 17) + (eq:SI (match_operand:SI 0 "register_operand" "r,r") + (match_operand:SI 1 "reg_or_zero_operand" "r,P")))] + "TARGET_M32RX" + "@ + cmpeq %0, %1 + cmpz %0" + [(set_attr "type" "int4") + (set_attr "length" "4")]) + ;; The cmp_xxx_insn patterns set the condition bit to the result of the ;; comparison. There isn't a "compare equal" instruction so cmp_eqsi_insn ;; is quite inefficient. However, it is rarely used. (define_insn "cmp_eqsi_insn" [(set (reg:SI 17) ! (eq:SI (match_operand:SI 0 "register_operand" "r,r") ! (match_operand:SI 1 "reg_or_cmp_int16_operand" "r,P"))) (clobber (match_scratch:SI 2 "=&r,&r"))] "" "* *************** *** 1157,1164 **** (define_insn "cmp_ltsi_insn" [(set (reg:SI 17) ! (lt:SI (match_operand:SI 0 "register_operand" "r,r") ! (match_operand:SI 1 "reg_or_int16_operand" "r,J")))] "" "@ cmp %0,%1 --- 1218,1225 ---- (define_insn "cmp_ltsi_insn" [(set (reg:SI 17) ! (lt:SI (match_operand:SI 0 "register_operand" "r,r") ! (match_operand:SI 1 "reg_or_int16_operand" "r,J")))] "" "@ cmp %0,%1 *************** *** 1168,1175 **** (define_insn "cmp_ltusi_insn" [(set (reg:SI 17) ! (ltu:SI (match_operand:SI 0 "register_operand" "r,r") ! (match_operand:SI 1 "reg_or_int16_operand" "r,J")))] "" "@ cmpu %0,%1 --- 1229,1236 ---- (define_insn "cmp_ltusi_insn" [(set (reg:SI 17) ! (ltu:SI (match_operand:SI 0 "register_operand" "r,r") ! (match_operand:SI 1 "reg_or_int16_operand" "r,J")))] "" "@ cmpu %0,%1 *************** *** 1177,1182 **** --- 1238,1244 ---- [(set_attr "type" "int2,int4") (set_attr "length" "2,4")]) + ;; reg == small constant comparisons are best handled by putting the result ;; of the comparison in a tmp reg and then using beqz/bnez. ;; ??? The result register doesn't contain 0/STORE_FLAG_VALUE, *************** *** 1448,1454 **** "" "* { ! char *br,*invbr; char asmtext[40]; switch (GET_CODE (operands[1])) --- 1510,1516 ---- "" "* { ! const char *br,*invbr; char asmtext[40]; switch (GET_CODE (operands[1])) *************** *** 1495,1501 **** "" "* { ! char *br,*invbr; char asmtext[40]; switch (GET_CODE (operands[1])) --- 1557,1563 ---- "" "* { ! const char *br,*invbr; char asmtext[40]; switch (GET_CODE (operands[1])) *************** *** 1550,1555 **** --- 1612,1625 ---- if (! register_operand (op1, mode)) op1 = force_reg (mode, op1); + if (TARGET_M32RX) + { + if (! reg_or_zero_operand (op2, mode)) + op2 = force_reg (mode, op2); + + emit_insn (gen_seq_insn_m32rx (op0, op1, op2)); + DONE; + } if (GET_CODE (op2) == CONST_INT && INTVAL (op2) == 0) { emit_insn (gen_seq_zero_insn (op0, op1)); *************** *** 1563,1568 **** --- 1633,1661 ---- DONE; }") + (define_insn "seq_insn_m32rx" + [(set (match_operand:SI 0 "register_operand" "=r") + (eq:SI (match_operand:SI 1 "register_operand" "%r") + (match_operand:SI 2 "reg_or_zero_operand" "rP"))) + (clobber (reg:SI 17))] + "TARGET_M32RX" + "#" + [(set_attr "type" "multi") + (set_attr "length" "6")]) + + (define_split + [(set (match_operand:SI 0 "register_operand" "") + (eq:SI (match_operand:SI 1 "register_operand" "") + (match_operand:SI 2 "reg_or_zero_operand" ""))) + (clobber (reg:SI 17))] + "TARGET_M32RX" + [(set (reg:SI 17) + (eq:SI (match_dup 1) + (match_dup 2))) + (set (match_dup 0) + (reg:SI 17))] + "") + (define_insn "seq_zero_insn" [(set (match_operand:SI 0 "register_operand" "=r") (eq:SI (match_operand:SI 1 "register_operand" "r") *************** *** 2498,2503 **** (clobber (match_scratch:SI 3 "=&r")) ;; temp 1 (clobber (match_scratch:SI 4 "=&r"))] ;; temp 2 "" ! "* return m32r_output_block_move (insn, operands);" [(set_attr "type" "store8") (set_attr "length" "72")]) ;; Maximum --- 2591,2596 ---- (clobber (match_scratch:SI 3 "=&r")) ;; temp 1 (clobber (match_scratch:SI 4 "=&r"))] ;; temp 2 "" ! "* m32r_output_block_move (insn, operands); return \"\"; " [(set_attr "type" "store8") (set_attr "length" "72")]) ;; Maximum diff -Nrc3pad gcc-3.0.4/gcc/config/m32r/t-m32r gcc-3.1/gcc/config/m32r/t-m32r *** gcc-3.0.4/gcc/config/m32r/t-m32r Thu Aug 5 03:27:47 1999 --- gcc-3.1/gcc/config/m32r/t-m32r Fri Nov 9 14:57:50 2001 *************** *** 1,6 **** - # lib1funcs.asm is currently empty. - CROSS_LIBGCC1 = - # We want fine grained libraries, so use the new code to build the # floating point emulation libraries. FPBIT = fp-bit.c --- 1,3 ---- *************** crtfini.o: $(srcdir)/config/m32r/initfin *** 39,55 **** -DCRT_FINI -finhibit-size-directive -fno-inline-functions \ -g0 -mmodel=medium -c $(srcdir)/config/m32r/initfini.c -o crtfini.o # -mmodel={small,medium} requires separate libraries. # We don't build libraries for the large model, instead we use the medium # libraries. The only difference is that the large model can handle jumps # more than 26 signed bits away. ! MULTILIB_OPTIONS = mmodel=small/mmodel=medium ! MULTILIB_DIRNAMES = small medium MULTILIB_MATCHES = mmodel?medium=mmodel?large - # Set MULTILIB_EXTRA_OPTS so shipped libraries have small data in .sdata and # SHN_M32R_SCOMMON. # This is important for objects referenced in system header files. --- 36,65 ---- -DCRT_FINI -finhibit-size-directive -fno-inline-functions \ -g0 -mmodel=medium -c $(srcdir)/config/m32r/initfini.c -o crtfini.o + m32rx: + mkdir $@ + + m32rx/crtinit.o: m32rx $(srcdir)/config/m32r/initfini.c $(GCC_PASSES) $(CONFIG_H) + $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(CRTSTUFF_T_CFLAGS) \ + -DCRT_INIT -finhibit-size-directive -fno-inline-functions \ + -g0 -mmodel=medium -c $(srcdir)/config/m32r/initfini.c -m32rx \ + -o m32rx/crtinit.o + + m32rx/crtfini.o: m32rx $(srcdir)/config/m32r/initfini.c $(GCC_PASSES) $(CONFIG_H) + $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(CRTSTUFF_T_CFLAGS) \ + -DCRT_FINI -finhibit-size-directive -fno-inline-functions \ + -g0 -mmodel=medium -c $(srcdir)/config/m32r/initfini.c -m32rx \ + -o m32rx/crtfini.o # -mmodel={small,medium} requires separate libraries. # We don't build libraries for the large model, instead we use the medium # libraries. The only difference is that the large model can handle jumps # more than 26 signed bits away. ! MULTILIB_OPTIONS = mmodel=small/mmodel=medium m32r/m32rx ! MULTILIB_DIRNAMES = small medium m32r m32rx MULTILIB_MATCHES = mmodel?medium=mmodel?large # Set MULTILIB_EXTRA_OPTS so shipped libraries have small data in .sdata and # SHN_M32R_SCOMMON. # This is important for objects referenced in system header files. diff -Nrc3pad gcc-3.0.4/gcc/config/m32r/xm-m32r.h gcc-3.1/gcc/config/m32r/xm-m32r.h *** gcc-3.0.4/gcc/config/m32r/xm-m32r.h Thu Mar 15 19:02:04 2001 --- gcc-3.1/gcc/config/m32r/xm-m32r.h Thu Jan 1 00:00:00 1970 *************** *** 1,43 **** - /* Configuration for GNU C-compiler for the M32R processor. - Copyright (C) 1996 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 describes the machine the compiler is hosted on. */ - #define HOST_BITS_PER_CHAR 8 - #define HOST_BITS_PER_SHORT 16 - #define HOST_BITS_PER_INT 32 - #define HOST_BITS_PER_LONG 32 - #define HOST_BITS_PER_LONGLONG 64 - - /* Doubles are stored in memory with the high order word first. This - matters when cross-compiling. */ - #define HOST_WORDS_BIG_ENDIAN 1 - - /* target machine dependencies. - tm.h is a symbolic link to the actual target specific file. */ - #include "tm.h" - - /* Arguments to use with `exit'. */ - #define SUCCESS_EXIT_CODE 0 - #define FATAL_EXIT_CODE 33 - - /* If compiled with Sun CC, the use of alloca requires this #include. */ - #ifndef __GNUC__ - #include "alloca.h" - #endif --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68hc11/larith.asm gcc-3.1/gcc/config/m68hc11/larith.asm *** gcc-3.0.4/gcc/config/m68hc11/larith.asm Fri Aug 3 21:05:49 2001 --- gcc-3.1/gcc/config/m68hc11/larith.asm Tue Apr 9 18:56:42 2002 *************** *** 1,5 **** ! /* libgcc1 routines for M68HC11 & M68HC12. ! Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,5 ---- ! /* libgcc routines for M68HC11 & M68HC12. ! Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This file is part of GNU CC. *************** End: *** 352,390 **** ___adddi3: tsx ! pshb ! psha ! ldd 8,x addd 16,x ! pshb ! psha ldd 6,x adcb 15,x adca 14,x ! pshb ! psha ldd 4,x adcb 13,x adca 12,x ! pshb ! psha ldd 2,x ! adcb 11,x adca 10,x - tsx - ldy 6,x - std 0,y ! pulx ! stx 2,y ! pulx ! stx 4,y ! pulx ! stx 6,y ! pulx rts #endif --- 352,378 ---- ___adddi3: tsx ! xgdy ! ldd 8,x ; Add LSB addd 16,x ! std 6,y ; Save (carry preserved) ldd 6,x adcb 15,x adca 14,x ! std 4,y ldd 4,x adcb 13,x adca 12,x ! std 2,y ldd 2,x ! adcb 11,x ; Add MSB adca 10,x std 0,y ! ! xgdy rts #endif *************** ___adddi3: *** 394,433 **** ___subdi3: tsx ! pshb ! psha ! ldd 8,x subd 16,x ! pshb ! psha ldd 6,x sbcb 15,x sbca 14,x ! pshb ! psha ldd 4,x sbcb 13,x sbca 12,x ! pshb ! psha ! ldd 2,x sbcb 11,x sbca 10,x - - tsx - ldy 6,x - std 0,y ! pulx ! stx 2,y ! pulx ! stx 4,y ! pulx ! stx 6,y ! pulx rts #endif --- 382,408 ---- ___subdi3: tsx ! xgdy ! ldd 8,x ; Subtract LSB subd 16,x ! std 6,y ; Save, borrow preserved ldd 6,x sbcb 15,x sbca 14,x ! std 4,y ldd 4,x sbcb 13,x sbca 12,x ! std 2,y ! ldd 2,x ; Subtract MSB sbcb 11,x sbca 10,x std 0,y ! ! xgdy ; rts #endif *************** ___notdi2: *** 457,462 **** --- 432,438 ---- coma comb std 0,x + xgdx rts #endif *************** ___notdi2: *** 467,479 **** ___negsi2: comb coma - addd #1 xgdx ! eorb #0xFF ! eora #0xFF ! adcb #0 ! adca #0 xgdx rts #endif --- 443,456 ---- ___negsi2: comb coma xgdx ! comb ! coma ! inx xgdx + bne done + inx + done: rts #endif *************** ___mulhi3: *** 798,821 **** emul exg x,y pulx #else ! stx *_.tmp ! pshb ! ldab *_.tmp+1 ! mul ; A.high * B.low ! ldaa *_.tmp ! stab *_.tmp ! pulb ! pshb ! mul ; A.low * B.high ! addb *_.tmp ! stab *_.tmp ! ldaa *_.tmp+1 ! pulb ! mul ; A.low * B.low ! adda *_.tmp #endif - rts #endif #ifdef L_mulhi32 --- 775,847 ---- emul exg x,y pulx + rts #else ! #ifdef NO_TMP ! ; ! ; 16 bit multiplication without temp memory location. ! ; (smaller but slower) ! ; ! pshx ; (4) ! ins ; (3) ! pshb ; (3) ! psha ; (3) ! pshx ; (4) ! pula ; (4) ! pulx ; (5) ! mul ; (10) B.high * A.low ! xgdx ; (3) ! mul ; (10) B.low * A.high ! abx ; (3) ! pula ; (4) ! pulb ; (4) ! mul ; (10) B.low * A.low ! pshx ; (4) ! tsx ; (3) ! adda 1,x ; (4) ! pulx ; (5) ! rts ; (5) 20 bytes ! ; --- ! ; 91 cycles ! #else ! stx _.tmp ; (4/5) ! pshb ; (3) ! ldab _.tmp+1 ; (3/4) ! mul ; (10) B.high * A.low ! xgdx ; (3) ! pulb ; (4) ! stab _.tmp ; (3/4) ! mul ; (10) B.low * A.high ! abx ; (3) ! ldd _.tmp ; (4/5) ! mul ; (10) B.low * A.low ! stx _.tmp ; (4) ! adda _.tmp+1 ; (4/5) ! rts ; (5) 20/26 bytes ! ; --- ! ; 70/76 cycles ! ! #ifdef OLD_MUL ! stx *_.tmp ; (4) ! pshb ; (3) ! ldab *_.tmp+1 ; (3) ! mul ; (10) A.high * B.low ! ldaa *_.tmp ; (3) ! stab *_.tmp ; (3) ! pulb ; (4) ! pshb ; (4) ! mul ; (10) A.low * B.high ! addb *_.tmp ; (4) ! stab *_.tmp ; (3) ! ldaa *_.tmp+1 ; (3) ! pulb ; (4) ! mul ; (10) A.low * B.low ! adda *_.tmp ; (4) ! rts ; (5) 24/32 bytes ! ; 77/85 cycles ! #endif ! #endif #endif #endif #ifdef L_mulhi32 *************** ___mulhi3: *** 830,843 **** ; b = value on stack ; ; +---------------+ ! ; | B low | <- 5,x ; +---------------+ ! ; | B high | <- 4,x ; +---------------+ ; | PC low | ; +---------------+ ; | PC high | ; +---------------+ ; | A low | ; +---------------+ ; | A high | --- 856,873 ---- ; b = value on stack ; ; +---------------+ ! ; | B low | <- 7,x ; +---------------+ ! ; | B high | <- 6,x ; +---------------+ ; | PC low | ; +---------------+ ; | PC high | ; +---------------+ + ; | Tmp low | + ; +---------------+ + ; | Tmp high | + ; +---------------+ ; | A low | ; +---------------+ ; | A high | *************** __mulhi32: *** 855,876 **** ldy 2,sp emul exg x,y #else pshb psha tsx ! ldab 4,x mul xgdy ; A.high * B.high ! ldab 5,x pula mul ; A.high * B.low ! std *_.tmp ldaa 1,x ! ldab 4,x mul ; A.low * B.high ! addd *_.tmp ! stab *_.tmp tab aby bcc N --- 885,908 ---- ldy 2,sp emul exg x,y + rts #else + pshx ; Room for temp value pshb psha tsx ! ldab 6,x mul xgdy ; A.high * B.high ! ldab 7,x pula mul ; A.high * B.low ! std 2,x ldaa 1,x ! ldab 6,x mul ; A.low * B.high ! addd 2,x ! stab 2,x tab aby bcc N *************** __mulhi32: *** 878,895 **** aby iny N: ! ldab 5,x pula mul ; A.low * B.low ! adda *_.tmp bcc Ret ! iny Ret: - pshy - pulx - #endif rts ! #endif #ifdef L_mulsi3 --- 910,927 ---- aby iny N: ! ldab 7,x pula mul ; A.low * B.low ! adda 2,x ! pulx ; Drop temp location ! pshy ; Put high part in X ! pulx bcc Ret ! inx Ret: rts ! #endif #endif #ifdef L_mulsi3 *************** A_high = 2 *** 946,952 **** ; ; If A.high is 0, optimize into: (A.low * B.high) << 16 + (A.low * B.low) ; ! stx *_.tmp beq A_high_zero bsr ___mulhi3 ; A.high * B.low ; --- 978,984 ---- ; ; If A.high is 0, optimize into: (A.low * B.high) << 16 + (A.low * B.low) ; ! cpx #0 beq A_high_zero bsr ___mulhi3 ; A.high * B.low ; *************** A_low_B_low: *** 1050,1074 **** .sect .install2,"ax",@progbits .globl __map_data_section ! __map_data_section: ! ldd #__data_section_size ! beq Done ldx #__data_image ldy #__data_section_start Loop: - #ifdef mc68hc12 movb 1,x+,1,y+ dbne d,Loop #else ! psha ldaa 0,x staa 0,y - pula inx iny ! subd #1 ! bne Loop #endif Done: --- 1082,1112 ---- .sect .install2,"ax",@progbits .globl __map_data_section ! .globl __data_image ! #ifdef mc68hc12 ! .globl __data_section_size ! #endif __map_data_section: ! #ifdef mc68hc12 ldx #__data_image ldy #__data_section_start + ldd #__data_section_size + beq Done Loop: movb 1,x+,1,y+ dbne d,Loop #else ! ldx #__data_image ! ldy #__data_section_start ! bra Start_map ! Loop: ldaa 0,x staa 0,y inx iny ! Start_map: ! cpx #__data_image_end ! blo Loop #endif Done: *************** __do_global_ctors: *** 1108,1114 **** ldx #__CTOR_END__-2 ctors_loop: cpx #__CTOR_LIST__ ! blt ctors_done pshx ldx 0,x jsr 0,x --- 1146,1152 ---- ldx #__CTOR_END__-2 ctors_loop: cpx #__CTOR_LIST__ ! blo ctors_done pshx ldx 0,x jsr 0,x *************** __do_global_dtors: *** 1134,1140 **** ldx #__DTOR_LIST__ dtors_loop: cpx #__DTOR_END__ ! bge dtors_done pshx ldx 0,x jsr 0,x --- 1172,1178 ---- ldx #__DTOR_LIST__ dtors_loop: cpx #__DTOR_END__ ! bhs dtors_done pshx ldx 0,x jsr 0,x diff -Nrc3pad gcc-3.0.4/gcc/config/m68hc11/m68hc11-protos.h gcc-3.1/gcc/config/m68hc11/m68hc11-protos.h *** gcc-3.0.4/gcc/config/m68hc11/m68hc11-protos.h Mon Jun 11 22:15:11 2001 --- gcc-3.1/gcc/config/m68hc11/m68hc11-protos.h Sat Mar 16 12:59:20 2002 *************** *** 1,5 **** /* Prototypes for exported functions defined in m68hc11.c ! Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Stephane Carrez (stcarrez@worldnet.fr) This file is part of GNU CC. --- 1,5 ---- /* Prototypes for exported functions defined in m68hc11.c ! Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Stephane Carrez (stcarrez@worldnet.fr) This file is part of GNU CC. *************** extern int m68hc11_initial_elimination_o *** 30,63 **** extern void expand_prologue PARAMS((void)); extern void expand_epilogue PARAMS((void)); - extern void output_function_prologue PARAMS((FILE*, int)); - extern void output_function_epilogue PARAMS((FILE*, int)); extern int m68hc11_function_block_profiler PARAMS((FILE*,int)); extern int m68hc11_block_profiler PARAMS((FILE*,int)); ! extern void m68hc11_asm_file_start PARAMS((FILE*, char*)); #ifdef TREE_CODE extern void m68hc11_function_arg_advance PARAMS((CUMULATIVE_ARGS*, enum machine_mode, tree, int)); - extern int m68hc11_valid_decl_attribute_p PARAMS((tree, tree, - tree, tree)); - extern int m68hc11_valid_type_attribute_p PARAMS((tree, tree, - tree, tree)); - extern int m68hc11_comp_type_attributes PARAMS((tree, tree)); - extern void m68hc11_set_default_type_attributes PARAMS((tree)); extern void m68hc11_encode_section_info PARAMS((tree)); #endif #ifdef RTX_CODE extern rtx m68hc11_compare_op0; extern rtx m68hc11_compare_op1; - extern rtx m68hc11_soft_tmp_reg; extern rtx iy_reg; extern rtx d_reg; extern void m68hc11_initialize_trampoline PARAMS((rtx, rtx, rtx)); --- 30,55 ---- extern void expand_prologue PARAMS((void)); extern void expand_epilogue PARAMS((void)); extern int m68hc11_function_block_profiler PARAMS((FILE*,int)); extern int m68hc11_block_profiler PARAMS((FILE*,int)); ! extern void m68hc11_asm_file_start PARAMS((FILE*, const char*)); #ifdef TREE_CODE extern void m68hc11_function_arg_advance PARAMS((CUMULATIVE_ARGS*, enum machine_mode, tree, int)); extern void m68hc11_encode_section_info PARAMS((tree)); #endif #ifdef RTX_CODE extern rtx m68hc11_compare_op0; extern rtx m68hc11_compare_op1; extern rtx m68hc11_soft_tmp_reg; extern rtx iy_reg; + extern rtx ix_reg; extern rtx d_reg; extern void m68hc11_initialize_trampoline PARAMS((rtx, rtx, rtx)); *************** extern rtx m68hc11_gen_highpart PARAMS(( *** 105,111 **** #ifdef HAVE_MACHINE_MODES extern int m68hc11_memory_move_cost PARAMS((enum machine_mode, enum reg_class, int)); ! extern int m68hc11_register_move_cost PARAMS((enum reg_class, enum reg_class)); extern int m68hc11_rtx_costs PARAMS((rtx, enum rtx_code, enum rtx_code)); extern int m68hc11_address_cost PARAMS((rtx)); --- 97,104 ---- #ifdef HAVE_MACHINE_MODES extern int m68hc11_memory_move_cost PARAMS((enum machine_mode, enum reg_class, int)); ! extern int m68hc11_register_move_cost PARAMS((enum machine_mode, ! enum reg_class, enum reg_class)); extern int m68hc11_rtx_costs PARAMS((rtx, enum rtx_code, enum rtx_code)); extern int m68hc11_address_cost PARAMS((rtx)); *************** extern void m68hc11_emit_libcall PARAMS( *** 114,119 **** --- 107,114 ---- enum machine_mode, enum machine_mode, int, rtx*)); extern int m68hc11_small_indexed_indirect_p PARAMS((rtx, enum machine_mode)); + extern int m68hc11_symbolic_p PARAMS((rtx, enum machine_mode)); + extern int m68hc11_indirect_p PARAMS((rtx, enum machine_mode)); extern int go_if_legitimate_address2 PARAMS((rtx, enum machine_mode, int)); extern int reg_or_indexed_operand PARAMS((rtx,enum machine_mode)); *************** extern void m68hc11_function_epilogue PA *** 166,171 **** --- 161,167 ---- extern HOST_WIDE_INT m68hc11_min_offset; extern HOST_WIDE_INT m68hc11_max_offset; + #endif /* HAVE_MACHINE_MODES */ #endif /* RTX_CODE */ diff -Nrc3pad gcc-3.0.4/gcc/config/m68hc11/m68hc11.c gcc-3.1/gcc/config/m68hc11/m68hc11.c *** gcc-3.0.4/gcc/config/m68hc11/m68hc11.c Sun Nov 25 16:39:26 2001 --- gcc-3.1/gcc/config/m68hc11/m68hc11.c Sun Mar 24 16:13:25 2002 *************** *** 1,5 **** /* Subroutines for code generation on Motorola 68HC11 and 68HC12. ! Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Stephane Carrez (stcarrez@worldnet.fr) This file is part of GNU CC. --- 1,5 ---- /* Subroutines for code generation on Motorola 68HC11 and 68HC12. ! Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Stephane Carrez (stcarrez@worldnet.fr) This file is part of GNU CC. *************** Note: *** 52,57 **** --- 52,60 ---- #include "basic-block.h" #include "function.h" #include "ggc.h" + #include "reload.h" + #include "target.h" + #include "target-def.h" static void print_options PARAMS ((FILE *)); static void emit_move_after_reload PARAMS ((rtx, rtx, rtx)); *************** static rtx m68hc11_expand_compare PARAMS *** 64,77 **** static int must_parenthesize PARAMS ((rtx)); static int m68hc11_shift_cost PARAMS ((enum machine_mode, rtx, int)); static int m68hc11_auto_inc_p PARAMS ((rtx)); void create_regs_rtx PARAMS ((void)); static void asm_print_register PARAMS ((FILE *, int)); rtx m68hc11_soft_tmp_reg; ! /* Must be set to 1 to produce debug messages. */ int debug_m6811 = 0; extern FILE *asm_out_file; --- 67,86 ---- static int must_parenthesize PARAMS ((rtx)); static int m68hc11_shift_cost PARAMS ((enum machine_mode, rtx, int)); static int m68hc11_auto_inc_p PARAMS ((rtx)); + static tree m68hc11_handle_fntype_attribute PARAMS ((tree *, tree, tree, int, bool *)); + const struct attribute_spec m68hc11_attribute_table[]; void create_regs_rtx PARAMS ((void)); + static void m68hc11_add_gc_roots PARAMS ((void)); static void asm_print_register PARAMS ((FILE *, int)); + static void m68hc11_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT)); + static void m68hc11_asm_out_constructor PARAMS ((rtx, int)); + static void m68hc11_asm_out_destructor PARAMS ((rtx, int)); rtx m68hc11_soft_tmp_reg; ! /* Must be set to 1 to produce debug messages. */ int debug_m6811 = 0; extern FILE *asm_out_file; *************** rtx m68hc11_compare_op0; *** 120,129 **** rtx m68hc11_compare_op1; ! struct processor_costs *m68hc11_cost; /* Costs for a 68HC11. */ ! struct processor_costs m6811_cost = { /* add */ COSTS_N_INSNS (2), /* logical */ --- 129,138 ---- rtx m68hc11_compare_op1; ! const struct processor_costs *m68hc11_cost; /* Costs for a 68HC11. */ ! static const struct processor_costs m6811_cost = { /* add */ COSTS_N_INSNS (2), /* logical */ *************** struct processor_costs m6811_cost = { *** 158,168 **** }; /* Costs for a 68HC12. */ ! struct processor_costs m6812_cost = { /* add */ ! COSTS_N_INSNS (1), /* logical */ ! COSTS_N_INSNS (1), /* non-constant shift */ COSTS_N_INSNS (20), /* shiftQI const */ --- 167,177 ---- }; /* Costs for a 68HC12. */ ! static const struct processor_costs m6812_cost = { /* add */ ! COSTS_N_INSNS (2), /* logical */ ! COSTS_N_INSNS (2), /* non-constant shift */ COSTS_N_INSNS (20), /* shiftQI const */ *************** const char *m68hc11_regparm_string; *** 198,207 **** const char *m68hc11_reg_alloc_order; const char *m68hc11_soft_reg_count; - static void m68hc11_add_gc_roots PARAMS ((void)); - static int nb_soft_regs; int m68hc11_override_options () { --- 207,226 ---- const char *m68hc11_reg_alloc_order; const char *m68hc11_soft_reg_count; static int nb_soft_regs; + + /* Initialize the GCC target structure. */ + #undef TARGET_ATTRIBUTE_TABLE + #define TARGET_ATTRIBUTE_TABLE m68hc11_attribute_table + + #undef TARGET_ASM_ALIGNED_HI_OP + #define TARGET_ASM_ALIGNED_HI_OP "\t.word\t" + #undef TARGET_ASM_FUNCTION_EPILOGUE + #define TARGET_ASM_FUNCTION_EPILOGUE m68hc11_output_function_epilogue + + struct gcc_target targetm = TARGET_INITIALIZER; + int m68hc11_override_options () { *************** m68hc11_override_options () *** 227,232 **** --- 246,253 ---- if (TARGET_DEFAULT != MASK_M6811) target_flags &= ~TARGET_DEFAULT; + if (!TARGET_M6812) + target_flags &= ~TARGET_AUTO_INC_DEC; m68hc11_cost = &m6811_cost; m68hc11_min_offset = 0; m68hc11_max_offset = 256; *************** m68hc11_override_options () *** 257,264 **** m68hc11_sp_correction = 0; m68hc11_tmp_regs_class = TMP_REGS; target_flags &= ~MASK_M6811; if (m68hc11_soft_reg_count == 0) ! m68hc11_soft_reg_count = "2"; } return 0; } --- 278,286 ---- m68hc11_sp_correction = 0; m68hc11_tmp_regs_class = TMP_REGS; target_flags &= ~MASK_M6811; + target_flags |= MASK_NO_DIRECT_MODE; if (m68hc11_soft_reg_count == 0) ! m68hc11_soft_reg_count = "0"; } return 0; } *************** m68hc11_conditional_register_usage () *** 281,292 **** fixed_regs[i] = 1; call_used_regs[i] = 1; } } ! /* Reload and register operations. */ ! static const char *reg_class_names[] = REG_CLASS_NAMES; void --- 303,322 ---- fixed_regs[i] = 1; call_used_regs[i] = 1; } + + /* For 68HC12, the Z register emulation is not necessary when the + frame pointer is not used. The frame pointer is eliminated and + replaced by the stack register (which is a BASE_REG_CLASS). */ + if (TARGET_M6812 && flag_omit_frame_pointer && optimize) + { + fixed_regs[HARD_Z_REGNUM] = 1; + } } ! /* Reload and register operations. */ ! static const char *const reg_class_names[] = REG_CLASS_NAMES; void *************** m68hc11_small_indexed_indirect_p (operan *** 532,537 **** --- 562,575 ---- { rtx base, offset; + if (GET_CODE (operand) == REG && reload_in_progress + && REGNO (operand) >= FIRST_PSEUDO_REGISTER + && reg_equiv_memory_loc[REGNO (operand)]) + { + operand = reg_equiv_memory_loc[REGNO (operand)]; + operand = eliminate_regs (operand, 0, NULL_RTX); + } + if (GET_CODE (operand) != MEM) return 0; *************** m68hc11_small_indexed_indirect_p (operan *** 542,549 **** if (PUSH_POP_ADDRESS_P (operand)) return 1; ! if (!register_indirect_p (operand, mode, ! (reload_completed | reload_in_progress))) return 0; if (TARGET_M6812 && GET_CODE (operand) == PLUS --- 580,586 ---- if (PUSH_POP_ADDRESS_P (operand)) return 1; ! if (!register_indirect_p (operand, mode, reload_completed)) return 0; if (TARGET_M6812 && GET_CODE (operand) == PLUS *************** m68hc11_small_indexed_indirect_p (operan *** 551,556 **** --- 588,599 ---- { base = XEXP (operand, 0); offset = XEXP (operand, 1); + + /* The offset can be a symbol address and this is too big + for the operand constraint. */ + if (GET_CODE (base) != CONST_INT && GET_CODE (offset) != CONST_INT) + return 0; + if (GET_CODE (base) == CONST_INT) offset = base; *************** m68hc11_reload_operands (operands) *** 674,680 **** mode = GET_MODE (operands[1]); ! /* Input reload of indirect addressing (MEM (PLUS (REG) (CONST))). */ if (A_REG_P (operands[0]) && memory_reload_operand (operands[1], mode)) { rtx big_offset = XEXP (XEXP (operands[1], 0), 1); --- 717,723 ---- mode = GET_MODE (operands[1]); ! /* Input reload of indirect addressing (MEM (PLUS (REG) (CONST))). */ if (A_REG_P (operands[0]) && memory_reload_operand (operands[1], mode)) { rtx big_offset = XEXP (XEXP (operands[1], 0), 1); *************** m68hc11_reload_operands (operands) *** 735,741 **** /* Create the lowest part offset that still remains to be added. If it's not a valid offset, do a 16-bit add. */ ! offset = gen_rtx (CONST_INT, VOIDmode, vl); if (!VALID_CONSTANT_OFFSET_P (offset, mode)) { emit_insn (gen_rtx (SET, VOIDmode, reg, --- 778,784 ---- /* Create the lowest part offset that still remains to be added. If it's not a valid offset, do a 16-bit add. */ ! offset = GEN_INT (vl); if (!VALID_CONSTANT_OFFSET_P (offset, mode)) { emit_insn (gen_rtx (SET, VOIDmode, reg, *************** m68hc11_reload_operands (operands) *** 746,753 **** { emit_insn (gen_rtx (SET, VOIDmode, reg, gen_rtx (PLUS, HImode, reg, ! gen_rtx (CONST_INT, ! VOIDmode, vh << 8)))); } emit_move_insn (operands[0], gen_rtx (MEM, GET_MODE (operands[1]), --- 789,795 ---- { emit_insn (gen_rtx (SET, VOIDmode, reg, gen_rtx (PLUS, HImode, reg, ! GEN_INT (vh << 8)))); } emit_move_insn (operands[0], gen_rtx (MEM, GET_MODE (operands[1]), *************** m68hc11_reload_operands (operands) *** 756,762 **** } } ! /* Use the normal gen_movhi pattern. */ return 0; } --- 798,804 ---- } } ! /* Use the normal gen_movhi pattern. */ return 0; } *************** tst_operand (operand, mode) *** 834,840 **** rtx operand; enum machine_mode mode; { ! if (GET_CODE (operand) == MEM) { rtx addr = XEXP (operand, 0); if (m68hc11_auto_inc_p (addr)) --- 876,882 ---- rtx operand; enum machine_mode mode; { ! if (GET_CODE (operand) == MEM && reload_completed == 0) { rtx addr = XEXP (operand, 0); if (m68hc11_auto_inc_p (addr)) *************** reg_or_some_mem_operand (operand, mode) *** 895,900 **** --- 937,978 ---- } int + m68hc11_symbolic_p (operand, mode) + rtx operand; + enum machine_mode mode; + { + if (GET_CODE (operand) == MEM) + { + rtx op = XEXP (operand, 0); + + if (symbolic_memory_operand (op, mode)) + return 1; + } + return 0; + } + + int + m68hc11_indirect_p (operand, mode) + rtx operand; + enum machine_mode mode; + { + if (GET_CODE (operand) == MEM) + { + rtx op = XEXP (operand, 0); + + if (symbolic_memory_operand (op, mode)) + return 0; + + if (reload_in_progress) + return 1; + + operand = XEXP (operand, 0); + return register_indirect_p (operand, mode, reload_completed); + } + return 0; + } + + int stack_register_operand (operand, mode) rtx operand; enum machine_mode mode ATTRIBUTE_UNUSED; *************** symbolic_memory_operand (op, mode) *** 991,996 **** --- 1069,1075 ---- return 1; case CONST: + op = XEXP (op, 0); return ((GET_CODE (XEXP (op, 0)) == SYMBOL_REF || GET_CODE (XEXP (op, 0)) == LABEL_REF) && GET_CODE (XEXP (op, 1)) == CONST_INT); *************** m68hc11_initialize_trampoline (tramp, fn *** 1081,1087 **** rtx fnaddr; rtx cxt; { ! char *static_chain_reg = reg_names[STATIC_CHAIN_REGNUM]; /* Skip the '*'. */ if (*static_chain_reg == '*') --- 1160,1166 ---- rtx fnaddr; rtx cxt; { ! const char *static_chain_reg = reg_names[STATIC_CHAIN_REGNUM]; /* Skip the '*'. */ if (*static_chain_reg == '*') *************** m68hc11_initialize_trampoline (tramp, fn *** 1116,1181 **** /* Declaration of types. */ ! /* If defined, a C expression whose value is nonzero if IDENTIFIER ! with arguments ARGS is a valid machine specific attribute for DECL. ! The attributes in ATTRIBUTES have previously been assigned to DECL. */ ! ! int ! m68hc11_valid_decl_attribute_p (decl, attributes, identifier, args) ! tree decl ATTRIBUTE_UNUSED; ! tree attributes ATTRIBUTE_UNUSED; ! tree identifier ATTRIBUTE_UNUSED; ! tree args ATTRIBUTE_UNUSED; { ! return 0; ! } ! ! /* If defined, a C expression whose value is nonzero if IDENTIFIER ! with arguments ARGS is a valid machine specific attribute for TYPE. ! The attributes in ATTRIBUTES have previously been assigned to TYPE. */ ! int ! m68hc11_valid_type_attribute_p (type, attributes, identifier, args) ! tree type; ! tree attributes ATTRIBUTE_UNUSED; ! tree identifier; ! tree args; { ! if (TREE_CODE (type) != FUNCTION_TYPE ! && TREE_CODE (type) != FIELD_DECL && TREE_CODE (type) != TYPE_DECL) ! return 0; ! ! if (TREE_CODE (type) == FUNCTION_TYPE) { ! if (is_attribute_p ("interrupt", identifier)) ! return (args == NULL_TREE); ! if (is_attribute_p ("trap", identifier)) ! return (args == NULL_TREE); } ! return 0; ! } ! ! /* If defined, a C expression whose value is zero if the attributes on ! TYPE1 and TYPE2 are incompatible, one if they are compatible, and ! two if they are nearly compatible (which causes a warning to be ! generated). */ ! ! int ! m68hc11_comp_type_attributes (type1, type2) ! tree type1 ATTRIBUTE_UNUSED; ! tree type2 ATTRIBUTE_UNUSED; ! { ! return 1; ! } ! ! /* If defined, a C statement that assigns default attributes to newly ! defined TYPE. */ ! ! void ! m68hc11_set_default_type_attributes (type) ! tree type ATTRIBUTE_UNUSED; ! { } /* Define this macro if references to a symbol must be treated --- 1195,1228 ---- /* Declaration of types. */ ! const struct attribute_spec m68hc11_attribute_table[] = { ! /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */ ! { "interrupt", 0, 0, false, true, true, m68hc11_handle_fntype_attribute }, ! { "trap", 0, 0, false, true, true, m68hc11_handle_fntype_attribute }, ! { NULL, 0, 0, false, false, false, NULL } ! }; ! /* Handle an attribute requiring a FUNCTION_TYPE, FIELD_DECL or TYPE_DECL; ! arguments as in struct attribute_spec.handler. */ ! static tree ! m68hc11_handle_fntype_attribute (node, name, args, flags, no_add_attrs) ! tree *node; ! tree name; ! tree args ATTRIBUTE_UNUSED; ! int flags ATTRIBUTE_UNUSED; ! bool *no_add_attrs; { ! if (TREE_CODE (*node) != FUNCTION_TYPE ! && TREE_CODE (*node) != FIELD_DECL ! && TREE_CODE (*node) != TYPE_DECL) { ! warning ("`%s' attribute only applies to functions", ! IDENTIFIER_POINTER (name)); ! *no_add_attrs = true; } ! return NULL_TREE; } /* Define this macro if references to a symbol must be treated *************** m68hc11_function_arg_pass_by_reference ( *** 1219,1225 **** int named ATTRIBUTE_UNUSED; { return ((type && TREE_CODE (type) == ARRAY_TYPE) ! /* Consider complex values as aggregates, so care for TCmode. */ /*|| GET_MODE_SIZE (mode) > 4 SCz, temporary */ /*|| (type && AGGREGATE_TYPE_P (type))) */ ); } --- 1266,1272 ---- int named ATTRIBUTE_UNUSED; { return ((type && TREE_CODE (type) == ARRAY_TYPE) ! /* Consider complex values as aggregates, so care for TCmode. */ /*|| GET_MODE_SIZE (mode) > 4 SCz, temporary */ /*|| (type && AGGREGATE_TYPE_P (type))) */ ); } *************** emit_move_after_reload (to, from, scratc *** 1533,1538 **** --- 1580,1596 ---- XEXP (XEXP (from, 0), 0), REG_NOTES (insn)); } + + /* For 68HC11, put a REG_INC note on `sts _.frame' to prevent the cse-reg + to think that sp == _.frame and later replace a x = sp with x = _.frame. + The problem is that we are lying to gcc and use `txs' for x = sp + (which is not really true because txs is really x = sp + 1). */ + else if (TARGET_M6811 && SP_REG_P (from)) + { + REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_INC, + from, + REG_NOTES (insn)); + } } int *************** m68hc11_total_frame_size () *** 1556,1565 **** return size; } ! void ! m68hc11_function_epilogue (out, size) FILE *out ATTRIBUTE_UNUSED; ! int size ATTRIBUTE_UNUSED; { /* We catch the function epilogue generation to have a chance to clear the z_replacement_completed flag. */ --- 1614,1623 ---- return size; } ! static void ! m68hc11_output_function_epilogue (out, size) FILE *out ATTRIBUTE_UNUSED; ! HOST_WIDE_INT size ATTRIBUTE_UNUSED; { /* We catch the function epilogue generation to have a chance to clear the z_replacement_completed flag. */ *************** expand_prologue () *** 1615,1621 **** emit_move_after_reload (stack_push_word, hard_frame_pointer_rtx, scratch); /* Allocate local variables. */ ! if (TARGET_M6812 && size >= 2) { emit_insn (gen_addhi3 (stack_pointer_rtx, stack_pointer_rtx, GEN_INT (-size))); --- 1673,1679 ---- emit_move_after_reload (stack_push_word, hard_frame_pointer_rtx, scratch); /* Allocate local variables. */ ! if (TARGET_M6812 && (size > 4 || size == 3)) { emit_insn (gen_addhi3 (stack_pointer_rtx, stack_pointer_rtx, GEN_INT (-size))); *************** expand_epilogue () *** 1703,1709 **** } /* de-allocate auto variables */ ! if (TARGET_M6812 && size >= 2) { emit_insn (gen_addhi3 (stack_pointer_rtx, stack_pointer_rtx, GEN_INT (size))); --- 1761,1767 ---- } /* de-allocate auto variables */ ! if (TARGET_M6812 && (size > 4 || size == 3)) { emit_insn (gen_addhi3 (stack_pointer_rtx, stack_pointer_rtx, GEN_INT (size))); *************** m68hc11_gen_lowpart (mode, x) *** 1815,1832 **** return second; } if (mode == SImode) ! return gen_rtx (CONST_INT, VOIDmode, l[0]); ! return gen_rtx (CONST_INT, VOIDmode, l[0] & 0x0ffff); } else { l[0] = CONST_DOUBLE_LOW (x); } if (mode == SImode) ! return gen_rtx (CONST_INT, VOIDmode, l[0]); else if (mode == HImode && GET_MODE (x) == SFmode) ! return gen_rtx (CONST_INT, VOIDmode, l[0] & 0x0FFFF); else abort (); } --- 1873,1890 ---- return second; } if (mode == SImode) ! return GEN_INT (l[0]); ! return GEN_INT (trunc_int_for_mode (l[0], HImode)); } else { l[0] = CONST_DOUBLE_LOW (x); } if (mode == SImode) ! return GEN_INT (l[0]); else if (mode == HImode && GET_MODE (x) == SFmode) ! return GEN_INT (trunc_int_for_mode (l[0], HImode)); else abort (); } *************** m68hc11_gen_lowpart (mode, x) *** 1835,1846 **** return gen_rtx (REG, mode, HARD_B_REGNUM); /* gen_lowpart crashes when it is called with a SUBREG. */ ! if (GET_CODE (x) == SUBREG && SUBREG_WORD (x) != 0) { if (mode == SImode) ! return gen_rtx_SUBREG (mode, SUBREG_REG (x), SUBREG_WORD (x) + 2); else if (mode == HImode) ! return gen_rtx_SUBREG (mode, SUBREG_REG (x), SUBREG_WORD (x) + 1); else abort (); } --- 1893,1904 ---- return gen_rtx (REG, mode, HARD_B_REGNUM); /* gen_lowpart crashes when it is called with a SUBREG. */ ! if (GET_CODE (x) == SUBREG && SUBREG_BYTE (x) != 0) { if (mode == SImode) ! return gen_rtx_SUBREG (mode, SUBREG_REG (x), SUBREG_BYTE (x) + 4); else if (mode == HImode) ! return gen_rtx_SUBREG (mode, SUBREG_REG (x), SUBREG_BYTE (x) + 2); else abort (); } *************** m68hc11_gen_highpart (mode, x) *** 1892,1900 **** return first; } if (mode == SImode) ! return gen_rtx (CONST_INT, VOIDmode, l[1]); ! return gen_rtx (CONST_INT, VOIDmode, (l[1] >> 16) & 0x0ffff); } else { --- 1950,1958 ---- return first; } if (mode == SImode) ! return GEN_INT (l[1]); ! return GEN_INT (trunc_int_for_mode ((l[1] >> 16), HImode)); } else { *************** m68hc11_gen_highpart (mode, x) *** 1902,1910 **** } if (mode == SImode) ! return gen_rtx (CONST_INT, VOIDmode, l[1]); else if (mode == HImode && GET_MODE_CLASS (GET_MODE (x)) == MODE_FLOAT) ! return gen_rtx (CONST_INT, VOIDmode, (l[0] >> 16) & 0x0FFFF); else abort (); } --- 1960,1968 ---- } if (mode == SImode) ! return GEN_INT (l[1]); else if (mode == HImode && GET_MODE_CLASS (GET_MODE (x)) == MODE_FLOAT) ! return GEN_INT (trunc_int_for_mode ((l[0] >> 16), HImode)); else abort (); } *************** m68hc11_gen_highpart (mode, x) *** 1914,1924 **** if (mode == QImode) { ! return gen_rtx (CONST_INT, VOIDmode, val >> 8); } else if (mode == HImode) { ! return gen_rtx (CONST_INT, VOIDmode, val >> 16); } } if (mode == QImode && D_REG_P (x)) --- 1972,1982 ---- if (mode == QImode) { ! return GEN_INT (trunc_int_for_mode (val >> 8, QImode)); } else if (mode == HImode) { ! return GEN_INT (trunc_int_for_mode (val >> 16, HImode)); } } if (mode == QImode && D_REG_P (x)) *************** m68hc11_gen_highpart (mode, x) *** 1932,1939 **** { int pos; ! /* For 68HC12, avoid the '*' for direct addressing mode. */ ! pos = TARGET_M6812 ? 1 : 0; return gen_rtx (MEM, QImode, gen_rtx (SYMBOL_REF, Pmode, ®_names[REGNO (x)][pos])); --- 1990,1998 ---- { int pos; ! /* Avoid the '*' for direct addressing mode when this ! addressing mode is disabled. */ ! pos = TARGET_NO_DIRECT_MODE ? 1 : 0; return gen_rtx (MEM, QImode, gen_rtx (SYMBOL_REF, Pmode, ®_names[REGNO (x)][pos])); *************** dead_register_here (x, reg) *** 2017,2023 **** } /* Scan forward to see if the register is set in some insns and never ! used since then. */ for (p = x /*NEXT_INSN (x) */ ; p; p = NEXT_INSN (p)) { rtx body; --- 2076,2082 ---- } /* Scan forward to see if the register is set in some insns and never ! used since then. */ for (p = x /*NEXT_INSN (x) */ ; p; p = NEXT_INSN (p)) { rtx body; *************** dead_register_here (x, reg) *** 2041,2047 **** return 1; } ! /* Register is used (may be in source or in dest). */ if (reg_mentioned_p (reg, p) || (x_reg != 0 && GET_MODE (p) == SImode && reg_mentioned_p (x_reg, p))) --- 2100,2106 ---- return 1; } ! /* Register is used (may be in source or in dest). */ if (reg_mentioned_p (reg, p) || (x_reg != 0 && GET_MODE (p) == SImode && reg_mentioned_p (x_reg, p))) *************** asm_print_register (file, regno) *** 2061,2067 **** { const char *name = reg_names[regno]; ! if (TARGET_M6812 && name[0] == '*') name++; asm_fprintf (file, "%s", name); --- 2120,2126 ---- { const char *name = reg_names[regno]; ! if (TARGET_NO_DIRECT_MODE && name[0] == '*') name++; asm_fprintf (file, "%s", name); *************** asm_print_register (file, regno) *** 2097,2103 **** 't' generate the temporary scratch register. The operand is ignored. 'T' generate the low-part temporary scratch register. The operand is ! ignored. */ void print_operand (file, op, letter) --- 2156,2162 ---- 't' generate the temporary scratch register. The operand is ignored. 'T' generate the low-part temporary scratch register. The operand is ! ignored. */ void print_operand (file, op, letter) *************** print_operand (file, op, letter) *** 2216,2235 **** else if (GET_CODE (op) == CONST_DOUBLE && GET_MODE (op) == SFmode) { REAL_VALUE_TYPE r; REAL_VALUE_FROM_CONST_DOUBLE (r, op); ! ASM_OUTPUT_FLOAT_OPERAND (letter, file, r); ! } ! else if (GET_CODE (op) == CONST_DOUBLE && GET_MODE (op) == XFmode) ! { ! REAL_VALUE_TYPE r; ! REAL_VALUE_FROM_CONST_DOUBLE (r, op); ! ASM_OUTPUT_LONG_DOUBLE_OPERAND (file, r); } ! else if (GET_CODE (op) == CONST_DOUBLE && GET_MODE (op) == DFmode) { REAL_VALUE_TYPE r; REAL_VALUE_FROM_CONST_DOUBLE (r, op); ! ASM_OUTPUT_DOUBLE_OPERAND (file, r); } else { --- 2275,2295 ---- else if (GET_CODE (op) == CONST_DOUBLE && GET_MODE (op) == SFmode) { REAL_VALUE_TYPE r; + long l; + REAL_VALUE_FROM_CONST_DOUBLE (r, op); ! REAL_VALUE_TO_TARGET_SINGLE (r, l); ! asm_fprintf (file, "%I0x%lx", l); } ! else if (GET_CODE (op) == CONST_DOUBLE ! && (GET_MODE (op) == DFmode || GET_MODE (op) == XFmode)) { REAL_VALUE_TYPE r; + char dstr[30]; + REAL_VALUE_FROM_CONST_DOUBLE (r, op); ! REAL_VALUE_TO_DECIMAL (r, "%.20g", dstr); ! asm_fprintf (file, "%I0r%s", dstr); } else { *************** must_parenthesize (op) *** 2269,2274 **** --- 2329,2336 ---- || strcasecmp (name, "d") == 0 || strcasecmp (name, "x") == 0 || strcasecmp (name, "y") == 0 + || strcasecmp (name, "ix") == 0 + || strcasecmp (name, "iy") == 0 || strcasecmp (name, "pc") == 0 || strcasecmp (name, "sp") == 0 || strcasecmp (name, "ccr") == 0) ? 1 : 0; *************** print_operand_address (file, addr) *** 2410,2416 **** --- 2472,2484 ---- } else { + need_parenthesis = must_parenthesize (offset); + if (need_parenthesis) + asm_fprintf (file, "("); + output_addr_const (file, offset); + if (need_parenthesis) + asm_fprintf (file, ")"); asm_fprintf (file, ","); asm_print_register (file, REGNO (base)); } *************** m68hc11_expand_compare_and_branch (code, *** 2615,2620 **** --- 2683,2721 ---- return 0; } + /* Return 1 if the TO and FROM operands contain compatible address + increment and decrement modes for a split_move. One of the two + operands must not use an autoinc mode or both must go in the + same direction. */ + static int + m68hc11_autoinc_compatible_p (to, from) + rtx to, from; + { + enum { INCOP, DECOP } type_to, type_from; + + /* If one of them is not a MEM, it is ok. */ + if (GET_CODE (to) != MEM || GET_CODE (from) != MEM) + return 1; + + to = XEXP (to, 0); + from = XEXP (from, 0); + + if (GET_CODE (to) == PRE_INC || GET_CODE (to) == POST_INC) + type_to = INCOP; + else if (GET_CODE (to) == PRE_DEC || GET_CODE (to) == POST_DEC) + type_to = DECOP; + else + return 1; + + if (GET_CODE (from) == PRE_INC || GET_CODE (from) == POST_INC) + type_from = INCOP; + else if (GET_CODE (from) == PRE_DEC || GET_CODE (from) == POST_DEC) + type_from = DECOP; + else + return 1; + + return type_to == type_from; + } /* Split a DI, SI or HI move into several smaller move operations. The scratch register 'scratch' is used as a temporary to load *************** m68hc11_split_move (to, from, scratch) *** 2636,2641 **** --- 2737,2766 ---- else mode = QImode; + /* If the TO and FROM contain autoinc modes that are not compatible + together (one pop and the other a push), we must change one to + an offsetable operand and generate an appropriate add at the end. */ + if (TARGET_M6812 && m68hc11_autoinc_compatible_p (to, from) == 0) + { + rtx reg; + int code; + + /* Decide to change the source. */ + code = GET_CODE (XEXP (from, 0)); + reg = XEXP (XEXP (from, 0), 0); + offset = GET_MODE_SIZE (GET_MODE (from)); + if (code == PRE_DEC || code == POST_DEC) + offset = -offset; + + if (code == PRE_DEC || code == PRE_INC) + emit_insn (gen_addhi3 (reg, reg, GEN_INT (offset))); + m68hc11_split_move (to, gen_rtx_MEM (GET_MODE (from), reg), scratch); + if (code == POST_DEC || code == POST_INC) + emit_insn (gen_addhi3 (reg, reg, GEN_INT (offset))); + + return; + } + if (TARGET_M6812 && IS_STACK_PUSH (to) && reg_mentioned_p (gen_rtx (REG, HImode, HARD_SP_REGNUM), from)) *************** m68hc11_split_move (to, from, scratch) *** 2668,2674 **** if (offset) { ! high_from = adj_offsettable_operand (high_from, offset); low_from = high_from; } if (mode == SImode) --- 2793,2799 ---- if (offset) { ! high_from = adjust_address (high_from, mode, offset); low_from = high_from; } if (mode == SImode) *************** m68hc11_split_move (to, from, scratch) *** 2677,2682 **** --- 2802,2811 ---- m68hc11_split_move (high_to, high_from, scratch); } else if (H_REG_P (to) || H_REG_P (from) + || (low_from == const0_rtx + && high_from == const0_rtx + && ! push_operand (to, GET_MODE (to)) + && ! H_REG_P (scratch)) || (TARGET_M6812 && (!m68hc11_register_indirect_p (from, GET_MODE (from)) || m68hc11_small_indexed_indirect_p (from, *************** m68hc11_emit_logical (mode, code, operan *** 2793,2799 **** } } ! /* The logical operation is similar to a copy. */ else if (need_copy) { rtx src; --- 2922,2928 ---- } } ! /* The logical operation is similar to a copy. */ else if (need_copy) { rtx src; *************** m68hc11_gen_movhi (insn, operands) *** 2971,2976 **** --- 3100,3108 ---- case HARD_D_REGNUM: output_asm_insn ("psh%1", operands); break; + case HARD_SP_REGNUM: + output_asm_insn ("sts\t-2,sp", operands); + break; default: abort (); } *************** m68hc11_gen_movhi (insn, operands) *** 3035,3041 **** else { /* !!!! SCz wrong here. */ ! fatal_insn ("Move insn not handled", insn); } } else --- 3167,3173 ---- else { /* !!!! SCz wrong here. */ ! fatal_insn ("move insn not handled", insn); } } else *************** m68hc11_gen_movhi (insn, operands) *** 3075,3081 **** } /* Some moves to a hard register are special. Not all of them are really supported and we have to use a temporary ! location to provide them (either the stack of a temp var). */ if (H_REG_P (operands[0])) { switch (REGNO (operands[0])) --- 3207,3213 ---- } /* Some moves to a hard register are special. Not all of them are really supported and we have to use a temporary ! location to provide them (either the stack of a temp var). */ if (H_REG_P (operands[0])) { switch (REGNO (operands[0])) *************** m68hc11_gen_movhi (insn, operands) *** 3105,3111 **** } else { ! /* %t means *ZTMP scratch register. */ output_asm_insn ("sty\t%t1", operands); output_asm_insn ("ldd\t%t1", operands); } --- 3237,3243 ---- } else { ! /* %t means *ZTMP scratch register. */ output_asm_insn ("sty\t%t1", operands); output_asm_insn ("ldd\t%t1", operands); } *************** m68hc11_gen_movhi (insn, operands) *** 3255,3261 **** break; default: ! fatal_insn ("Invalid register in the move instruction", insn); break; } return; --- 3387,3393 ---- break; default: ! fatal_insn ("invalid register in the move instruction", insn); break; } return; *************** m68hc11_gen_movhi (insn, operands) *** 3289,3295 **** /* Operand 1 must be a hard register. */ if (!H_REG_P (operands[1])) { ! fatal_insn ("Invalid operand in the instruction", insn); } reg = REGNO (operands[1]); --- 3421,3427 ---- /* Operand 1 must be a hard register. */ if (!H_REG_P (operands[1])) { ! fatal_insn ("invalid operand in the instruction", insn); } reg = REGNO (operands[1]); *************** m68hc11_gen_movhi (insn, operands) *** 3339,3345 **** break; default: ! fatal_insn ("Invalid register in the move instruction", insn); break; } } --- 3471,3477 ---- break; default: ! fatal_insn ("invalid register in the move instruction", insn); break; } } *************** m68hc11_gen_movqi (insn, operands) *** 3351,3357 **** { /* Move a register or memory to the same location. This is possible because such insn can appear ! in a non-optimizing mode. */ if (operands[0] == operands[1] || rtx_equal_p (operands[0], operands[1])) { cc_status = cc_prev_status; --- 3483,3489 ---- { /* Move a register or memory to the same location. This is possible because such insn can appear ! in a non-optimizing mode. */ if (operands[0] == operands[1] || rtx_equal_p (operands[0], operands[1])) { cc_status = cc_prev_status; *************** m68hc11_gen_movqi (insn, operands) *** 3409,3415 **** else { /* !!!! SCz wrong here. */ ! fatal_insn ("Move insn not handled", insn); } } else --- 3541,3547 ---- else { /* !!!! SCz wrong here. */ ! fatal_insn ("move insn not handled", insn); } } else *************** m68hc11_gen_movqi (insn, operands) *** 3586,3592 **** break; default: ! fatal_insn ("Invalid register in the instruction", insn); break; } } --- 3718,3724 ---- break; default: ! fatal_insn ("invalid register in the instruction", insn); break; } } *************** m68hc11_gen_movqi (insn, operands) *** 3612,3625 **** break; default: ! fatal_insn ("Invalid register in the move instruction", insn); break; } return; } else { ! fatal_insn ("Operand 1 must be a hard register", insn); } } --- 3744,3757 ---- break; default: ! fatal_insn ("invalid register in the move instruction", insn); break; } return; } else { ! fatal_insn ("operand 1 must be a hard register", insn); } } *************** m68hc11_gen_rotate (code, insn, operands *** 3636,3642 **** if (GET_CODE (operands[2]) != CONST_INT || (!D_REG_P (operands[0]) && !DA_REG_P (operands[0]))) ! fatal_insn ("Invalid rotate insn", insn); val = INTVAL (operands[2]); if (code == ROTATERT) --- 3768,3774 ---- if (GET_CODE (operands[2]) != CONST_INT || (!D_REG_P (operands[0]) && !DA_REG_P (operands[0]))) ! fatal_insn ("invalid rotate insn", insn); val = INTVAL (operands[2]); if (code == ROTATERT) *************** m68hc11_gen_rotate (code, insn, operands *** 3648,3656 **** /* Rotate by 8-bits if the shift is within [5..11]. */ if (val >= 5 && val <= 11) { ! output_asm_insn ("psha", operands); ! output_asm_insn ("tba", operands); ! output_asm_insn ("pulb", operands); val -= 8; } --- 3780,3793 ---- /* Rotate by 8-bits if the shift is within [5..11]. */ if (val >= 5 && val <= 11) { ! if (TARGET_M6812) ! output_asm_insn ("exg\ta,b", operands); ! else ! { ! output_asm_insn ("psha", operands); ! output_asm_insn ("tba", operands); ! output_asm_insn ("pulb", operands); ! } val -= 8; } *************** m68hc11_notice_keep_cc (reg) *** 3823,3829 **** ! /* Machine Specific Reorg. */ /* Z register replacement: --- 3960,3966 ---- ! /* Machine Specific Reorg. */ /* Z register replacement: *************** int z_replacement_completed = 0; *** 3896,3902 **** /* Analyze the insn to find out which replacement register to use and the boundaries of the replacement. Returns 0 if we reached the last insn to be replaced, 1 if we can ! continue replacement in next insns. */ static int m68hc11_check_z_replacement (insn, info) --- 4033,4039 ---- /* Analyze the insn to find out which replacement register to use and the boundaries of the replacement. Returns 0 if we reached the last insn to be replaced, 1 if we can ! continue replacement in next insns. */ static int m68hc11_check_z_replacement (insn, info) *************** m68hc11_check_z_replacement (insn, info) *** 4056,4062 **** if (this_insn_uses_z && this_insn_uses_ix && this_insn_uses_iy) { ! fatal_insn ("Registers IX, IY and Z used in the same INSN", insn); } if (this_insn_uses_d) --- 4193,4199 ---- if (this_insn_uses_z && this_insn_uses_ix && this_insn_uses_iy) { ! fatal_insn ("registers IX, IY and Z used in the same INSN", insn); } if (this_insn_uses_d) *************** m68hc11_check_z_replacement (insn, info) *** 4367,4373 **** info->must_save_reg = 0; info->must_restore_reg = 0; } ! info->last = NEXT_INSN (insn); info->save_before_last = 1; } return 0; --- 4504,4515 ---- info->must_save_reg = 0; info->must_restore_reg = 0; } ! if (info->first != insn ! && ((info->y_used && ix_clobber) ! || (info->x_used && iy_clobber))) ! info->last = insn; ! else ! info->last = NEXT_INSN (insn); info->save_before_last = 1; } return 0; *************** m68hc11_check_z_replacement (insn, info) *** 4376,4382 **** { if (this_insn_uses_z) { ! fatal_insn ("Cannot do z-register replacement", insn); } return 0; } --- 4518,4524 ---- { if (this_insn_uses_z) { ! fatal_insn ("cannot do z-register replacement", insn); } return 0; } *************** m68hc11_z_replacement (insn) *** 4631,4637 **** } ! /* Replace all occurence of Z by replace_reg. Stop when the last instruction to replace is reached. Also stop when we detect a change in the flow (but it's not necessary; just safeguard). */ --- 4773,4779 ---- } ! /* Replace all occurrence of Z by replace_reg. Stop when the last instruction to replace is reached. Also stop when we detect a change in the flow (but it's not necessary; just safeguard). */ *************** m68hc11_z_replacement (insn) *** 4651,4656 **** --- 4793,4800 ---- if (GET_CODE (body) == SET || GET_CODE (body) == PARALLEL || GET_CODE (insn) == CALL_INSN || GET_CODE (insn) == JUMP_INSN) { + rtx note; + if (debug_m6811 && reg_mentioned_p (replace_reg, body)) { printf ("Reg mentioned here...:\n"); *************** m68hc11_z_replacement (insn) *** 4668,4679 **** src = SET_SRC (body); dst = SET_DEST (body); if (SP_REG_P (src) && Z_REG_P (dst)) ! { ! emit_insn_after (gen_addhi3 (dst, ! dst, ! gen_rtx (CONST_INT, ! VOIDmode, 2)), insn); ! } } /* Replace any (REG:HI Z) occurrence by either X or Y. */ --- 4812,4818 ---- src = SET_SRC (body); dst = SET_DEST (body); if (SP_REG_P (src) && Z_REG_P (dst)) ! emit_insn_after (gen_addhi3 (dst, dst, const2_rtx), insn); } /* Replace any (REG:HI Z) occurrence by either X or Y. */ *************** m68hc11_z_replacement (insn) *** 4681,4696 **** { INSN_CODE (insn) = -1; if (!validate_replace_rtx (z_reg, replace_reg, insn)) ! fatal_insn ("Cannot do z-register replacement", insn); } ! /* Likewise for (REG:QI Z). */ if (reg_mentioned_p (z_reg, insn)) { if (replace_reg_qi == NULL_RTX) replace_reg_qi = gen_rtx (REG, QImode, REGNO (replace_reg)); validate_replace_rtx (z_reg_qi, replace_reg_qi, insn); } } if (GET_CODE (insn) == CALL_INSN || GET_CODE (insn) == JUMP_INSN) break; --- 4820,4849 ---- { INSN_CODE (insn) = -1; if (!validate_replace_rtx (z_reg, replace_reg, insn)) ! fatal_insn ("cannot do z-register replacement", insn); } ! /* Likewise for (REG:QI Z). */ if (reg_mentioned_p (z_reg, insn)) { if (replace_reg_qi == NULL_RTX) replace_reg_qi = gen_rtx (REG, QImode, REGNO (replace_reg)); validate_replace_rtx (z_reg_qi, replace_reg_qi, insn); } + + /* If there is a REG_INC note on Z, replace it with a + REG_INC note on the replacement register. This is necessary + to make sure that the flow pass will identify the change + and it will not remove a possible insn that saves Z. */ + for (note = REG_NOTES (insn); note; note = XEXP (note, 1)) + { + if (REG_NOTE_KIND (note) == REG_INC + && GET_CODE (XEXP (note, 0)) == REG + && REGNO (XEXP (note, 0)) == REGNO (z_reg)) + { + XEXP (note, 0) = replace_reg; + } + } } if (GET_CODE (insn) == CALL_INSN || GET_CODE (insn) == JUMP_INSN) break; *************** m68hc11_z_replacement (insn) *** 4730,4736 **** if (!validate_replace_rtx (z_reg, replace_reg, info.last)) { ! fatal_insn ("Invalid Z register replacement for insn", insn); } insn = NEXT_INSN (info.last); } --- 4883,4889 ---- if (!validate_replace_rtx (z_reg, replace_reg, info.last)) { ! fatal_insn ("invalid Z register replacement for insn", insn); } insn = NEXT_INSN (info.last); } *************** m68hc11_reassign_regs (first) *** 4807,4819 **** } else { ! printf ("Insn not handled by Z replacement:\n"); fflush (stdout); debug_rtx (insn); } } } void m68hc11_reorg (first) rtx first; --- 4960,4973 ---- } else { ! printf ("insn not handled by Z replacement:\n"); fflush (stdout); debug_rtx (insn); } } } + void m68hc11_reorg (first) rtx first; *************** m68hc11_reorg (first) *** 4830,4836 **** /* Force a split of all splitable insn. This is necessary for the Z register replacement mechanism because we end up with basic insns. */ ! split_all_insns (0); split_done = 1; z_replacement_completed = 1; --- 4984,4990 ---- /* Force a split of all splitable insn. This is necessary for the Z register replacement mechanism because we end up with basic insns. */ ! split_all_insns_noflow (); split_done = 1; z_replacement_completed = 1; *************** m68hc11_reorg (first) *** 4839,4845 **** /* After some splitting, there are some oportunities for CSE pass. This happens quite often when 32-bit or above patterns are split. */ if (optimize > 0 && split_done) ! reload_cse_regs (first); /* Re-create the REG_DEAD notes. These notes are used in the machine description to use the best assembly directives. */ --- 4993,5002 ---- /* After some splitting, there are some oportunities for CSE pass. This happens quite often when 32-bit or above patterns are split. */ if (optimize > 0 && split_done) ! { ! find_basic_blocks (first, max_reg_num (), 0); ! reload_cse_regs (first); ! } /* Re-create the REG_DEAD notes. These notes are used in the machine description to use the best assembly directives. */ *************** m68hc11_reorg (first) *** 4877,4883 **** split after Z register replacement. This gives more opportunities for peephole (in particular for consecutives xgdx/xgdy). */ if (optimize > 0) ! split_all_insns (0); /* Once insns are split after the z_replacement_completed == 2, we must not re-run the life_analysis. The xgdx/xgdy patterns --- 5034,5040 ---- split after Z register replacement. This gives more opportunities for peephole (in particular for consecutives xgdx/xgdy). */ if (optimize > 0) ! split_all_insns_noflow (); /* Once insns are split after the z_replacement_completed == 2, we must not re-run the life_analysis. The xgdx/xgdy patterns *************** m68hc11_reorg (first) *** 4916,4929 **** /* Cost functions. */ ! /* Cost of moving memory. */ int m68hc11_memory_move_cost (mode, class, in) enum machine_mode mode; enum reg_class class; int in ATTRIBUTE_UNUSED; { ! if (class <= H_REGS) { if (GET_MODE_SIZE (mode) <= 2) return COSTS_N_INSNS (1) + (reload_completed | reload_in_progress); --- 5073,5086 ---- /* Cost functions. */ ! /* Cost of moving memory. */ int m68hc11_memory_move_cost (mode, class, in) enum machine_mode mode; enum reg_class class; int in ATTRIBUTE_UNUSED; { ! if (class <= H_REGS && class > NO_REGS) { if (GET_MODE_SIZE (mode) <= 2) return COSTS_N_INSNS (1) + (reload_completed | reload_in_progress); *************** m68hc11_memory_move_cost (mode, class, i *** 4945,4963 **** have a move cost of 2. Setting a higher cost will force reload to check the constraints. */ int ! m68hc11_register_move_cost (from, to) enum reg_class from; enum reg_class to; { ! if (from >= S_REGS && to >= S_REGS) ! { ! return COSTS_N_INSNS (3); ! } ! if (from <= S_REGS && to <= S_REGS) { ! return COSTS_N_INSNS (1) + (reload_completed | reload_in_progress); } ! return COSTS_N_INSNS (2); } --- 5102,5125 ---- have a move cost of 2. Setting a higher cost will force reload to check the constraints. */ int ! m68hc11_register_move_cost (mode, from, to) ! enum machine_mode mode; enum reg_class from; enum reg_class to; { ! /* All costs are symmetric, so reduce cases by putting the ! lower number class as the destination. */ ! if (from < to) { ! enum reg_class tmp = to; ! to = from, from = tmp; } ! if (to >= S_REGS) ! return m68hc11_memory_move_cost (mode, S_REGS, 0); ! else if (from <= S_REGS) ! return COSTS_N_INSNS (1) + (reload_completed | reload_in_progress); ! else ! return COSTS_N_INSNS (2); } *************** m68hc11_address_cost (addr) *** 4973,4979 **** switch (GET_CODE (addr)) { case REG: ! /* Make the cost of hard registers and specially SP, FP small. */ if (REGNO (addr) < FIRST_PSEUDO_REGISTER) cost = 0; else --- 5135,5141 ---- switch (GET_CODE (addr)) { case REG: ! /* Make the cost of hard registers and specially SP, FP small. */ if (REGNO (addr) < FIRST_PSEUDO_REGISTER) cost = 0; else *************** m68hc11_address_cost (addr) *** 5006,5012 **** else if (INTVAL (plus1) >= m68hc11_max_offset) cost = 2; else ! cost = 0; if (REGNO (plus0) < FIRST_PSEUDO_REGISTER) cost += 0; else --- 5168,5174 ---- else if (INTVAL (plus1) >= m68hc11_max_offset) cost = 2; else ! cost = 1; if (REGNO (plus0) < FIRST_PSEUDO_REGISTER) cost += 0; else *************** m68hc11_shift_cost (mode, x, shift) *** 5071,5077 **** total *= GET_MODE_SIZE (mode) / 2; /* When optimizing for size, make shift more costly so that ! multiplications are prefered. */ if (optimize_size && (shift % 8) != 0) total *= 2; --- 5233,5239 ---- total *= GET_MODE_SIZE (mode) / 2; /* When optimizing for size, make shift more costly so that ! multiplications are preferred. */ if (optimize_size && (shift % 8) != 0) total *= 2; *************** m68hc11_rtx_costs (x, code, outer_code) *** 5216,5222 **** /* print_options - called at the start of the code generation for a ! module. */ extern char *asm_file_name; --- 5378,5384 ---- /* print_options - called at the start of the code generation for a ! module. */ extern char *asm_file_name; *************** static void *** 5227,5233 **** print_options (out) FILE *out; { ! char *a_time; long c_time; int i; extern int save_argc; --- 5389,5395 ---- print_options (out) FILE *out; { ! const char *a_time; long c_time; int i; extern int save_argc; *************** print_options (out) *** 5257,5263 **** void m68hc11_asm_file_start (out, main_file) FILE *out; ! char *main_file; { fprintf (out, ";;;-----------------------------------------\n"); fprintf (out, ";;; Start MC68HC11 gcc assembly output\n"); --- 5419,5425 ---- void m68hc11_asm_file_start (out, main_file) FILE *out; ! const char *main_file; { fprintf (out, ";;;-----------------------------------------\n"); fprintf (out, ";;; Start MC68HC11 gcc assembly output\n"); *************** m68hc11_add_gc_roots () *** 5281,5283 **** --- 5443,5463 ---- ggc_add_rtx_root (&stack_push_word, 1); ggc_add_rtx_root (&stack_pop_word, 1); } + + static void + m68hc11_asm_out_constructor (symbol, priority) + rtx symbol; + int priority; + { + default_ctor_section_asm_out_constructor (symbol, priority); + fprintf (asm_out_file, "\t.globl\t__do_global_ctors\n"); + } + + static void + m68hc11_asm_out_destructor (symbol, priority) + rtx symbol; + int priority; + { + default_dtor_section_asm_out_destructor (symbol, priority); + fprintf (asm_out_file, "\t.globl\t__do_global_dtors\n"); + } diff -Nrc3pad gcc-3.0.4/gcc/config/m68hc11/m68hc11.h gcc-3.1/gcc/config/m68hc11/m68hc11.h *** gcc-3.0.4/gcc/config/m68hc11/m68hc11.h Sun Nov 25 16:32:05 2001 --- gcc-3.1/gcc/config/m68hc11/m68hc11.h Fri Mar 22 21:54:44 2002 *************** *** 1,6 **** /* Definitions of target machine for GNU compiler. Motorola 68HC11 and 68HC12. ! Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Stephane Carrez (stcarrez@worldnet.fr) This file is part of GNU CC. --- 1,6 ---- /* Definitions of target machine for GNU compiler. Motorola 68HC11 and 68HC12. ! Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Stephane Carrez (stcarrez@worldnet.fr) This file is part of GNU CC. *************** Note: *** 33,40 **** */ - #include "elfos.h" - /***************************************************************************** ** ** Controlling the Compilation Driver, `gcc' --- 33,38 ---- *************** Note: *** 77,88 **** /* Names to predefine in the preprocessor for this target machine. */ #define CPP_PREDEFINES "-Dmc68hc1x" ! #ifndef IN_LIBGCC2 ! # include ! #endif ! #include "gansidecl.h" /***************************************************************************** ** --- 75,95 ---- /* Names to predefine in the preprocessor for this target machine. */ #define CPP_PREDEFINES "-Dmc68hc1x" + /* As an embedded target, we have no libc. */ + #define inhibit_libc ! /* Forward type declaration for prototypes definitions. ! rtx_ptr is equivalent to rtx. Can't use the same name. */ ! struct rtx_def; ! typedef struct rtx_def *rtx_ptr; ! union tree_node; ! typedef union tree_node *tree_ptr; ! ! /* We can't declare enum machine_mode forward nor include 'machmode.h' here. ! Prototypes defined here will use an int instead. It's better than no ! prototype at all. */ ! typedef int enum_machine_mode; /***************************************************************************** ** *************** extern short *reg_renumber; /* def in lo *** 111,122 **** --- 118,132 ---- #define MASK_AUTO_INC_DEC 0004 #define MASK_M6811 0010 #define MASK_M6812 0020 + #define MASK_NO_DIRECT_MODE 0040 #define TARGET_OP_TIME (optimize && optimize_size == 0) #define TARGET_SHORT (target_flags & MASK_SHORT) #define TARGET_M6811 (target_flags & MASK_M6811) #define TARGET_M6812 (target_flags & MASK_M6812) #define TARGET_AUTO_INC_DEC (target_flags & MASK_AUTO_INC_DEC) + #define TARGET_NO_DIRECT_MODE (target_flags & MASK_NO_DIRECT_MODE) + #define TARGET_RELAX (TARGET_NO_DIRECT_MODE) /* Default target_flags if no switches specified. */ #ifndef TARGET_DEFAULT *************** extern short *reg_renumber; /* def in lo *** 149,154 **** --- 159,166 ---- N_("Auto pre/post decrement increment allowed")}, \ { "noauto-incdec", - MASK_AUTO_INC_DEC, \ N_("Auto pre/post decrement increment not allowed")}, \ + { "relax", MASK_NO_DIRECT_MODE, \ + N_("Do not use direct addressing mode for soft registers")},\ { "68hc11", MASK_M6811, \ N_("Compile for a 68HC11")}, \ { "68hc12", MASK_M6812, \ *************** extern const char *m68hc11_soft_reg_coun *** 205,225 **** /* Define cost parameters for a given processor variant. */ struct processor_costs { ! int add; /* cost of an add instruction */ ! int logical; /* cost of a logical instruction */ ! int shift_var; ! int shiftQI_const[8]; ! int shiftHI_const[16]; ! int multQI; ! int multHI; ! int multSI; ! int divQI; ! int divHI; ! int divSI; }; /* Costs for the current processor. */ ! extern struct processor_costs *m68hc11_cost; /* target machine storage layout */ --- 217,237 ---- /* Define cost parameters for a given processor variant. */ struct processor_costs { ! const int add; /* cost of an add instruction */ ! const int logical; /* cost of a logical instruction */ ! const int shift_var; ! const int shiftQI_const[8]; ! const int shiftHI_const[16]; ! const int multQI; ! const int multHI; ! const int multSI; ! const int divQI; ! const int divHI; ! const int divSI; }; /* Costs for the current processor. */ ! extern const struct processor_costs *m68hc11_cost; /* target machine storage layout */ *************** extern struct processor_costs *m68hc11_c *** 228,234 **** #define BYTES_BIG_ENDIAN 1 /* Define this if most significant bit is lowest numbered ! in instructions that operate on numbered bit-fields. */ #define BITS_BIG_ENDIAN 0 /* Define this if most significant word of a multiword number is numbered. */ --- 240,246 ---- #define BYTES_BIG_ENDIAN 1 /* Define this if most significant bit is lowest numbered ! in instructions that operate on numbered bit-fields. */ #define BITS_BIG_ENDIAN 0 /* Define this if most significant word of a multiword number is numbered. */ *************** extern struct processor_costs *m68hc11_c *** 274,281 **** /* Allocation boundary (bits) for the code of a function. */ #define FUNCTION_BOUNDARY 8 - /* Biggest alignment that any data type can require on this machine, - in bits. */ #define BIGGEST_ALIGNMENT 8 /* Alignment of field after `int : 0' in a structure. */ --- 286,291 ---- *************** extern struct processor_costs *m68hc11_c *** 295,301 **** appropriate sizes. */ #define MAX_FIXED_MODE_SIZE 64 ! /* Floats are checked in a generic way. */ /* #define CHECK_FLOAT_VALUE(MODE, D, OVERFLOW) */ --- 305,311 ---- appropriate sizes. */ #define MAX_FIXED_MODE_SIZE 64 ! /* Floats are checked in a generic way. */ /* #define CHECK_FLOAT_VALUE(MODE, D, OVERFLOW) */ *************** extern struct processor_costs *m68hc11_c *** 338,352 **** where TARGET_SHORT is not available. */ #define WCHAR_TYPE "short int" #define WCHAR_TYPE_SIZE 16 - - /* Define results of standard character escape sequences. */ - #define TARGET_BELL 007 - #define TARGET_BS 010 - #define TARGET_TAB 011 - #define TARGET_NEWLINE 012 - #define TARGET_VT 013 - #define TARGET_FF 014 - #define TARGET_CR 015 /* Standard register usage. */ --- 348,353 ---- *************** extern struct processor_costs *m68hc11_c *** 395,401 **** (see Z register replacement notes in m68hc11.c). */ #define SOFT_Z_REGNUM 11 ! /* The soft-register which is used to save either X or Y. */ #define SOFT_SAVED_XY_REGNUM 12 /* A fake clobber register for 68HC12 patterns. */ --- 396,402 ---- (see Z register replacement notes in m68hc11.c). */ #define SOFT_Z_REGNUM 11 ! /* The soft-register which is used to save either X or Y. */ #define SOFT_SAVED_XY_REGNUM 12 /* A fake clobber register for 68HC12 patterns. */ *************** SOFT_REG_FIRST+28, SOFT_REG_FIRST+29,SOF *** 438,447 **** "*_.d25", "*_.d26", "*_.d27", "*_.d28", \ "*_.d29", "*_.d30", "*_.d31", "*_.d32" ! /* First available soft-register for GCC. */ #define SOFT_REG_FIRST (SOFT_SAVED_XY_REGNUM+2) ! /* Last available soft-register for GCC. */ #define SOFT_REG_LAST (SOFT_REG_FIRST+MAX_SOFT_REG_COUNT) #define SOFT_FP_REGNUM (SOFT_REG_LAST) #define SOFT_AP_REGNUM (SOFT_FP_REGNUM+1) --- 439,448 ---- "*_.d25", "*_.d26", "*_.d27", "*_.d28", \ "*_.d29", "*_.d30", "*_.d31", "*_.d32" ! /* First available soft-register for GCC. */ #define SOFT_REG_FIRST (SOFT_SAVED_XY_REGNUM+2) ! /* Last available soft-register for GCC. */ #define SOFT_REG_LAST (SOFT_REG_FIRST+MAX_SOFT_REG_COUNT) #define SOFT_FP_REGNUM (SOFT_REG_LAST) #define SOFT_AP_REGNUM (SOFT_FP_REGNUM+1) *************** SOFT_REG_FIRST+28, SOFT_REG_FIRST+29,SOF *** 449,459 **** /* Number of actual hardware registers. The hardware registers are assigned numbers for the compiler from 0 to just below FIRST_PSEUDO_REGISTER. All registers that the compiler knows about must be given numbers, even ! those that are not normally considered general registers. */ #define FIRST_PSEUDO_REGISTER (SOFT_REG_LAST+2) /* 1 for registers that have pervasive standard uses and are not available ! for the register allocator. */ #define FIXED_REGISTERS \ {0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1,1, 1, SOFT_REG_FIXED, 1, 1} /* X, D, Y, SP,PC,A, B, CCR, Z, FP,ZTMP,ZR,XYR, FK, D1 - D32, SOFT-FP, AP */ --- 450,460 ---- /* Number of actual hardware registers. The hardware registers are assigned numbers for the compiler from 0 to just below FIRST_PSEUDO_REGISTER. All registers that the compiler knows about must be given numbers, even ! those that are not normally considered general registers. */ #define FIRST_PSEUDO_REGISTER (SOFT_REG_LAST+2) /* 1 for registers that have pervasive standard uses and are not available ! for the register allocator. */ #define FIXED_REGISTERS \ {0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1,1, 1, SOFT_REG_FIXED, 1, 1} /* X, D, Y, SP,PC,A, B, CCR, Z, FP,ZTMP,ZR,XYR, FK, D1 - D32, SOFT-FP, AP */ *************** SOFT_REG_FIRST+28, SOFT_REG_FIRST+29,SOF *** 468,474 **** /* Define this macro to change register usage conditional on target flags. The soft-registers are disabled or enabled according to the ! -msoft-reg-count= option. */ #define CONDITIONAL_REGISTER_USAGE (m68hc11_conditional_register_usage ()) --- 469,475 ---- /* Define this macro to change register usage conditional on target flags. The soft-registers are disabled or enabled according to the ! -msoft-reg-count= option. */ #define CONDITIONAL_REGISTER_USAGE (m68hc11_conditional_register_usage ()) *************** SOFT_REG_FIRST+28, SOFT_REG_FIRST+29,SOF *** 503,513 **** /* Value is 1 if it is a good idea to tie two pseudo registers when one has mode MODE1 and one has mode MODE2. If HARD_REGNO_MODE_OK could produce different values for MODE1 and MODE2, for any hard reg, then this must be ! 0 for correct output. */ #define MODES_TIEABLE_P(MODE1, MODE2) \ (((MODE1) == (MODE2)) \ ! || ((MODE1) == SImode && (MODE2) == HImode) \ ! || ((MODE1) == HImode && (MODE2) == SImode)) /* Define the classes of registers for register constraints in the --- 504,515 ---- /* Value is 1 if it is a good idea to tie two pseudo registers when one has mode MODE1 and one has mode MODE2. If HARD_REGNO_MODE_OK could produce different values for MODE1 and MODE2, for any hard reg, then this must be ! 0 for correct output. ! ! All modes are tieable except QImode. */ #define MODES_TIEABLE_P(MODE1, MODE2) \ (((MODE1) == (MODE2)) \ ! || ((MODE1) != QImode && (MODE2) != QImode)) /* Define the classes of registers for register constraints in the *************** enum reg_class *** 542,551 **** X_REGS, /* 16-bit X register */ Y_REGS, /* 16-bit Y register */ SP_REGS, /* 16 bit stack pointer */ ! DA_REGS, /* 8-bit A reg. */ ! DB_REGS, /* 8-bit B reg. */ Z_REGS, /* 16-bit fake Z register */ ! D8_REGS, /* 8-bit A or B reg. */ Q_REGS, /* 8-bit (byte (QI)) data (A, B or D) */ D_OR_X_REGS, /* D or X register */ D_OR_Y_REGS, /* D or Y register */ --- 544,553 ---- X_REGS, /* 16-bit X register */ Y_REGS, /* 16-bit Y register */ SP_REGS, /* 16 bit stack pointer */ ! DA_REGS, /* 8-bit A reg. */ ! DB_REGS, /* 8-bit B reg. */ Z_REGS, /* 16-bit fake Z register */ ! D8_REGS, /* 8-bit A or B reg. */ Q_REGS, /* 8-bit (byte (QI)) data (A, B or D) */ D_OR_X_REGS, /* D or X register */ D_OR_Y_REGS, /* D or Y register */ *************** enum reg_class *** 576,587 **** LIM_REG_CLASSES }; ! /* alias GENERAL_REGS to G_REGS. */ #define GENERAL_REGS G_REGS #define N_REG_CLASSES (int) LIM_REG_CLASSES ! /* Give names of register classes as strings for dump file. */ #define REG_CLASS_NAMES \ { "NO_REGS", \ "D_REGS", \ --- 578,589 ---- LIM_REG_CLASSES }; ! /* alias GENERAL_REGS to G_REGS. */ #define GENERAL_REGS G_REGS #define N_REG_CLASSES (int) LIM_REG_CLASSES ! /* Give names of register classes as strings for dump file. */ #define REG_CLASS_NAMES \ { "NO_REGS", \ "D_REGS", \ *************** enum reg_class *** 658,665 **** /* SP_REGS */ { 0x00000008, 0x00000000 }, /* SP */ \ /* DA_REGS */ { 0x00000020, 0x00000000 }, /* A */ \ /* DB_REGS */ { 0x00000040, 0x00000000 }, /* B */ \ - /* D8_REGS */ { 0x00000060, 0x00000000 }, /* A B */ \ /* Z_REGS */ { 0x00000100, 0x00000000 }, /* Z */ \ /* Q_REGS */ { 0x00000062, 0x00000000 }, /* A B D */ \ /* D_OR_X_REGS */ { 0x00000003, 0x00000000 }, /* D X */ \ /* D_OR_Y_REGS */ { 0x00000006, 0x00000000 }, /* D Y */ \ --- 660,667 ---- /* SP_REGS */ { 0x00000008, 0x00000000 }, /* SP */ \ /* DA_REGS */ { 0x00000020, 0x00000000 }, /* A */ \ /* DB_REGS */ { 0x00000040, 0x00000000 }, /* B */ \ /* Z_REGS */ { 0x00000100, 0x00000000 }, /* Z */ \ + /* D8_REGS */ { 0x00000060, 0x00000000 }, /* A B */ \ /* Q_REGS */ { 0x00000062, 0x00000000 }, /* A B D */ \ /* D_OR_X_REGS */ { 0x00000003, 0x00000000 }, /* D X */ \ /* D_OR_Y_REGS */ { 0x00000006, 0x00000000 }, /* D Y */ \ *************** extern enum reg_class m68hc11_tmp_regs_c *** 828,857 **** C is the letter, and VALUE is a constant value. Return 1 if VALUE is in the range specified by C. `L' is for range -65536 to 65536 `M' is for values whose 16-bit low part is 0 'N' is for +1 or -1. 'O' is for 16 (for rotate using swap). 'P' is for range -8 to 2 (used by addhi_sp) ! 'I', 'J', 'K' are not used. */ #define CONST_OK_FOR_LETTER_P(VALUE, C) \ ! ((C) == 'L' ? (VALUE) >= -65536 && (VALUE) <= 65535 : \ (C) == 'M' ? ((VALUE) & 0x0ffffL) == 0 : \ ! (C) == 'N' ? ((VALUE) == 1 || (VALUE) == -1): \ (C) == 'O' ? (VALUE) == 16 : \ ! (C) == 'P' ? (VALUE) <= 2 && (VALUE) >= -8 : 0) /* Similar, but for floating constants, and defining letters G and H. ! No floating-point constants are valid on 68HC11. */ ! #define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) 0 /* 'U' represents certain kind of memory indexed operand for 68HC12. and any memory operand for 68HC11. */ #define EXTRA_CONSTRAINT(OP, C) \ ! ((C) == 'U' ? m68hc11_small_indexed_indirect_p (OP, GET_MODE (OP)) : 0) ! /* Stack layout; function entry, exit and calling. */ --- 830,867 ---- C is the letter, and VALUE is a constant value. Return 1 if VALUE is in the range specified by C. + `K' is for 0. `L' is for range -65536 to 65536 `M' is for values whose 16-bit low part is 0 'N' is for +1 or -1. 'O' is for 16 (for rotate using swap). 'P' is for range -8 to 2 (used by addhi_sp) ! 'I', 'J' are not used. */ #define CONST_OK_FOR_LETTER_P(VALUE, C) \ ! ((C) == 'K' ? (VALUE) == 0 : \ ! (C) == 'L' ? ((VALUE) >= -65536 && (VALUE) <= 65535) : \ (C) == 'M' ? ((VALUE) & 0x0ffffL) == 0 : \ ! (C) == 'N' ? ((VALUE) == 1 || (VALUE) == -1) : \ (C) == 'O' ? (VALUE) == 16 : \ ! (C) == 'P' ? ((VALUE) <= 2 && (VALUE) >= -8) : 0) /* Similar, but for floating constants, and defining letters G and H. ! ! `G' is for 0.0. */ ! #define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) \ ! ((C) == 'G' ? (GET_MODE_CLASS (GET_MODE (VALUE)) == MODE_FLOAT \ ! && VALUE == CONST0_RTX (GET_MODE (VALUE))) : 0) /* 'U' represents certain kind of memory indexed operand for 68HC12. and any memory operand for 68HC11. */ #define EXTRA_CONSTRAINT(OP, C) \ ! ((C) == 'U' ? m68hc11_small_indexed_indirect_p (OP, GET_MODE (OP)) \ ! : (C) == 'Q' ? m68hc11_symbolic_p (OP, GET_MODE (OP)) \ ! : (C) == 'R' ? m68hc11_indirect_p (OP, GET_MODE (OP)) \ ! : (C) == 'S' ? (memory_operand (OP, GET_MODE (OP)) \ ! && non_push_operand (OP, GET_MODE (OP))) : 0) /* Stack layout; function entry, exit and calling. */ *************** extern enum reg_class m68hc11_tmp_regs_c *** 901,907 **** This space can either be allocated by the caller or be a part of the machine-dependent stack frame: `OUTGOING_REG_PARM_STACK_SPACE' ! says which. */ /* #define REG_PARM_STACK_SPACE(FNDECL) 2 */ /* Define this macro if REG_PARM_STACK_SPACE is defined but stack --- 911,917 ---- This space can either be allocated by the caller or be a part of the machine-dependent stack frame: `OUTGOING_REG_PARM_STACK_SPACE' ! says which. */ /* #define REG_PARM_STACK_SPACE(FNDECL) 2 */ /* Define this macro if REG_PARM_STACK_SPACE is defined but stack *************** extern enum reg_class m68hc11_tmp_regs_c *** 936,942 **** We have two registers that are eliminated on the 6811. The psuedo arg pointer and pseudo frame pointer registers can always be eliminated; ! they are replaced with either the stack or the real frame pointer. */ #define ELIMINABLE_REGS \ {{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \ --- 946,952 ---- We have two registers that are eliminated on the 6811. The psuedo arg pointer and pseudo frame pointer registers can always be eliminated; ! they are replaced with either the stack or the real frame pointer. */ #define ELIMINABLE_REGS \ {{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \ *************** extern enum reg_class m68hc11_tmp_regs_c *** 947,953 **** /* Value should be nonzero if functions must have frame pointers. Zero means the frame pointer need not be set up (and parms may be accessed via the stack pointer) in functions that seem suitable. ! This is computed in `reload', in reload1.c. */ #define FRAME_POINTER_REQUIRED 0 /* Given FROM and TO register numbers, say whether this elimination is allowed. --- 957,963 ---- /* Value should be nonzero if functions must have frame pointers. Zero means the frame pointer need not be set up (and parms may be accessed via the stack pointer) in functions that seem suitable. ! This is computed in `reload', in reload1.c. */ #define FRAME_POINTER_REQUIRED 0 /* Given FROM and TO register numbers, say whether this elimination is allowed. *************** extern enum reg_class m68hc11_tmp_regs_c *** 975,981 **** /* If we generate an insn to push BYTES bytes, this says how many the stack pointer really advances by. No rounding or alignment needed ! for MC6811. */ #define PUSH_ROUNDING(BYTES) (BYTES) /* Value is 1 if returning from a function call automatically pops the --- 985,991 ---- /* If we generate an insn to push BYTES bytes, this says how many the stack pointer really advances by. No rounding or alignment needed ! for MC6811. */ #define PUSH_ROUNDING(BYTES) (BYTES) /* Value is 1 if returning from a function call automatically pops the *************** extern enum reg_class m68hc11_tmp_regs_c *** 984,990 **** an identifier node for the subroutine name. The standard MC6811 call, with arg count word, includes popping the ! args as part of the call template. */ #define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) 0 /* Nonzero if type TYPE should be returned in memory. --- 994,1000 ---- an identifier node for the subroutine name. The standard MC6811 call, with arg count word, includes popping the ! args as part of the call template. */ #define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) 0 /* Nonzero if type TYPE should be returned in memory. *************** typedef struct m68hc11_args *** 1016,1022 **** The pointer is passed in whatever way is appropriate for passing a pointer to that type. ! 64-bit numbers are passed by reference. */ #define FUNCTION_ARG_PASS_BY_REFERENCE(CUM, MODE, TYPE, NAMED) \ m68hc11_function_arg_pass_by_reference (& (CUM), (MODE), (TYPE), (NAMED)) --- 1026,1032 ---- The pointer is passed in whatever way is appropriate for passing a pointer to that type. ! 64-bit numbers are passed by reference. */ #define FUNCTION_ARG_PASS_BY_REFERENCE(CUM, MODE, TYPE, NAMED) \ m68hc11_function_arg_pass_by_reference (& (CUM), (MODE), (TYPE), (NAMED)) *************** typedef struct m68hc11_args *** 1038,1049 **** does not make a copy. Instead, it passes a pointer to the "live" value. The called function must not modify this value. If it can be determined that the value won't be modified, it need not make a ! copy; otherwise a copy must be made. */ #define FUNCTION_ARG_CALLEE_COPIES(CUM, MODE, TYPE, NAMED) \ ((NAMED) && FUNCTION_ARG_PASS_BY_REFERENCE (CUM, MODE, TYPE, NAMED)) /* Initialize a variable CUM of type CUMULATIVE_ARGS for a call to a ! function whose data type is FNTYPE. For a library call, FNTYPE is 0. */ #define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT) \ (m68hc11_init_cumulative_args (&CUM, FNTYPE, LIBNAME)) --- 1048,1059 ---- does not make a copy. Instead, it passes a pointer to the "live" value. The called function must not modify this value. If it can be determined that the value won't be modified, it need not make a ! copy; otherwise a copy must be made. */ #define FUNCTION_ARG_CALLEE_COPIES(CUM, MODE, TYPE, NAMED) \ ((NAMED) && FUNCTION_ARG_PASS_BY_REFERENCE (CUM, MODE, TYPE, NAMED)) /* Initialize a variable CUM of type CUMULATIVE_ARGS for a call to a ! function whose data type is FNTYPE. For a library call, FNTYPE is 0. */ #define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT) \ (m68hc11_init_cumulative_args (&CUM, FNTYPE, LIBNAME)) *************** typedef struct m68hc11_args *** 1083,1090 **** #define EXPAND_BUILTIN_VA_ARG(valist, type) \ m68hc11_va_arg (valist, type) - #define FUNCTION_EPILOGUE(FILE, SIZE) m68hc11_function_epilogue(FILE, SIZE) - /* For an arg passed partly in registers and partly in memory, this is the number of registers used. For args passed entirely in registers or entirely in memory, zero. --- 1093,1098 ---- *************** typedef struct m68hc11_args *** 1135,1178 **** for profiling a function entry. */ #define FUNCTION_PROFILER(FILE, LABELNO) \ asm_fprintf (FILE, "\tldy\t.LP%d\n\tjsr mcount\n", (LABELNO)) - - /* Output assembler code to FILE to initialize this source file's - basic block profiling info, if that has not already been done. */ - #define FUNCTION_BLOCK_PROFILER(FILE, BLOCK_OR_LABEL) \ - m68hc11_function_block_profiler(FILE, BLOCK_OR_LABEL) - - /* Output assembler code to FILE to increment the counter for - the BLOCKNO'th basic block in this source file. */ - #define BLOCK_PROFILER(FILE, BLOCKNO) \ - m68hc11_block_profiler(FILE, BLOCKNO) - - /* Output assembler code to FILE to indicate return from - a function during basic block profiling. */ - #define FUNCTION_BLOCK_PROFILER_EXIT(FILE) \ - asm_fprintf (FILE, "\tjsr %U__bb_trace_ret\n"); - - /* Save all registers which may be clobbered by a function call. - MACHINE_STATE_SAVE and MACHINE_STATE_RESTORE are target-code macros, - used in libgcc2.c. They may not refer to TARGET_* macros !!! - - We don't need to save the CCR nor the soft registers because - they will be saved by gcc. */ - #define MACHINE_STATE_SAVE(id) \ - { \ - asm ("pshy"); \ - asm ("pshx"); \ - asm ("psha"); \ - asm ("pshb"); \ - } - - #define MACHINE_STATE_RESTORE(id) \ - { \ - asm ("pulb"); \ - asm ("pula"); \ - asm ("pulx"); \ - asm ("puly"); \ - } - /* Length in units of the trampoline for entering a nested function. */ #define TRAMPOLINE_SIZE (TARGET_M6811 ? 11 : 9) --- 1143,1148 ---- *************** typedef struct m68hc11_args *** 1185,1219 **** m68hc11_initialize_trampoline ((TRAMP), (FNADDR), (CXT)) - - /* If defined, a C expression whose value is nonzero if IDENTIFIER - with arguments ARGS is a valid machine specific attribute for DECL. - The attributes in ATTRIBUTES have previously been assigned to DECL. */ - - #define VALID_MACHINE_DECL_ATTRIBUTE(DECL, ATTRIBUTES, NAME, ARGS) \ - (m68hc11_valid_decl_attribute_p (DECL, ATTRIBUTES, NAME, ARGS)) - - /* If defined, a C expression whose value is nonzero if IDENTIFIER - with arguments ARGS is a valid machine specific attribute for TYPE. - The attributes in ATTRIBUTES have previously been assigned to TYPE. */ - - #define VALID_MACHINE_TYPE_ATTRIBUTE(TYPE, ATTRIBUTES, NAME, ARGS) \ - (m68hc11_valid_type_attribute_p (TYPE, ATTRIBUTES, NAME, ARGS)) - - /* If defined, a C expression whose value is zero if the attributes on - TYPE1 and TYPE2 are incompatible, one if they are compatible, and - two if they are nearly compatible (which causes a warning to be - generated). */ - - #define COMP_TYPE_ATTRIBUTES(TYPE1, TYPE2) \ - (m68hc11_comp_type_attributes (TYPE1, TYPE2)) - - /* If defined, a C statement that assigns default attributes to newly - defined TYPE. */ - - #define SET_DEFAULT_TYPE_ATTRIBUTES(TYPE) \ - (m68hc11_set_default_type_attributes (TYPE)) - /* Define this macro if references to a symbol must be treated differently depending on something about the variable or function named by the symbol (such as what section it is in). --- 1155,1160 ---- *************** extern unsigned char m68hc11_reg_valid_f *** 1357,1363 **** indexed N,X --------------------------------------------------------------*/ ! /* The range of index that is allowed by indirect addressing. */ #define VALID_MIN_OFFSET m68hc11_min_offset #define VALID_MAX_OFFSET m68hc11_max_offset --- 1298,1304 ---- indexed N,X --------------------------------------------------------------*/ ! /* The range of index that is allowed by indirect addressing. */ #define VALID_MIN_OFFSET m68hc11_min_offset #define VALID_MAX_OFFSET m68hc11_max_offset *************** extern unsigned char m68hc11_reg_valid_f *** 1367,1376 **** a mode offset to access the lowest part of the data. (For example, for an SImode, the last valid offset is 252.) */ #define VALID_CONSTANT_OFFSET_P(X,MODE) \ ! ((GET_CODE (X) == CONST_INT) && \ ! ((INTVAL (X) >= VALID_MIN_OFFSET) \ ! && ((INTVAL (X) <= VALID_MAX_OFFSET \ ! - (HOST_WIDE_INT) (GET_MODE_SIZE (MODE) + 1))))) /* This is included to allow stack push/pop operations. Special hacks in the md and m6811.c files exist to support this. */ --- 1308,1321 ---- a mode offset to access the lowest part of the data. (For example, for an SImode, the last valid offset is 252.) */ #define VALID_CONSTANT_OFFSET_P(X,MODE) \ ! (((GET_CODE (X) == CONST_INT) && \ ! ((INTVAL (X) >= VALID_MIN_OFFSET) \ ! && ((INTVAL (X) <= VALID_MAX_OFFSET \ ! - (HOST_WIDE_INT) (GET_MODE_SIZE (MODE) + 1))))) \ ! || (TARGET_M6812 \ ! && ((GET_CODE (X) == SYMBOL_REF) \ ! || GET_CODE (X) == LABEL_REF \ ! || GET_CODE (X) == CONST))) /* This is included to allow stack push/pop operations. Special hacks in the md and m6811.c files exist to support this. */ *************** extern unsigned char m68hc11_reg_valid_f *** 1378,1384 **** (((GET_CODE (X) == PRE_DEC) || (GET_CODE (X) == POST_INC)) \ && SP_REG_P (XEXP (X, 0))) ! /* Go to ADDR if X is a valid address. */ #ifndef REG_OK_STRICT #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \ { \ --- 1323,1329 ---- (((GET_CODE (X) == PRE_DEC) || (GET_CODE (X) == POST_INC)) \ && SP_REG_P (XEXP (X, 0))) ! /* Go to ADDR if X is a valid address. */ #ifndef REG_OK_STRICT #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \ { \ *************** extern unsigned char m68hc11_reg_valid_f *** 1515,1521 **** /* Move costs between classes of registers */ #define REGISTER_MOVE_COST(MODE, CLASS1, CLASS2) \ ! (m68hc11_register_move_cost (CLASS1, CLASS2)) /* Move cost between register and memory. - Move to a 16-bit register is reasonable, --- 1460,1466 ---- /* Move costs between classes of registers */ #define REGISTER_MOVE_COST(MODE, CLASS1, CLASS2) \ ! (m68hc11_register_move_cost (MODE, CLASS1, CLASS2)) /* Move cost between register and memory. - Move to a 16-bit register is reasonable, *************** do { *** 1556,1562 **** && 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; \ --- 1501,1507 ---- && 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, \ BASE_REG_CLASS, GET_MODE (X), VOIDmode, 0, 0, \ OPNUM, TYPE); \ goto WIN; \ *************** do { *** 1579,1585 **** GEN_INT (high)), \ GEN_INT (low)); \ \ ! 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; \ --- 1524,1530 ---- GEN_INT (high)), \ GEN_INT (low)); \ \ ! push_reload (XEXP (X, 0), NULL_RTX, &XEXP (X, 0), NULL, \ BASE_REG_CLASS, GET_MODE (X), VOIDmode, 0, 0, \ OPNUM, TYPE); \ goto WIN; \ *************** do { *** 1603,1618 **** /* Output before uninitialized data. */ #define BSS_SECTION_ASM_OP ("\t.sect\t.bss") - /* This is the pseudo-op used to generate a reference to a specific - symbol in some section. It is only used in machine-specific - configuration files, typically only in ASM_OUTPUT_CONSTRUCTOR and - ASM_OUTPUT_DESTRUCTOR. This is the same for all known svr4 - assemblers, except those in targets that don't use 32-bit pointers. - Those should override INT_ASM_OP. Yes, the name of the macro is - misleading. */ - #undef INT_ASM_OP - #define INT_ASM_OP "\t.word\t" - /* Define the pseudo-ops used to switch to the .ctors and .dtors sections. Same as config/elfos.h but don't mark these section SHF_WRITE since --- 1548,1553 ---- *************** do { *** 1623,1653 **** #undef DTORS_SECTION_ASM_OP #define DTORS_SECTION_ASM_OP "\t.section\t.dtors,\"a\"" ! #undef CTORS_SECTION_FUNCTION ! #define CTORS_SECTION_FUNCTION \ ! void \ ! ctors_section () \ ! { \ ! if (in_section != in_ctors) \ ! { \ ! fprintf (asm_out_file, "\t.globl\t__do_global_ctors\n"); \ ! fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP); \ ! in_section = in_ctors; \ ! } \ ! } ! ! #undef DTORS_SECTION_FUNCTION ! #define DTORS_SECTION_FUNCTION \ ! void \ ! dtors_section () \ ! { \ ! if (in_section != in_dtors) \ ! { \ ! fprintf (asm_out_file, "\t.globl\t__do_global_dtors\n"); \ ! fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP); \ ! in_section = in_dtors; \ ! } \ ! } /* This is how to begin an assembly language file. Most svr4 assemblers want at least a .file directive to come first, and some want to see a .version --- 1558,1565 ---- #undef DTORS_SECTION_ASM_OP #define DTORS_SECTION_ASM_OP "\t.section\t.dtors,\"a\"" ! #define TARGET_ASM_CONSTRUCTOR m68hc11_asm_out_constructor ! #define TARGET_ASM_DESTRUCTOR m68hc11_asm_out_destructor /* This is how to begin an assembly language file. Most svr4 assemblers want at least a .file directive to come first, and some want to see a .version *************** dtors_section () \ *** 1673,1727 **** /* Output #ident as a .ident. */ - /* This is how to output a `long double' extended real constant. */ - - #define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \ - ASM_OUTPUT_DOUBLE(FILE,VALUE) - - /* This is how to output an assembler line defining a `double' constant. */ - - #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - do { long l[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE (VALUE, l); \ - fprintf (FILE, "\t%s\t0x%lx,0x%lx\n", ASM_LONG, l[0], l[1]); \ - } while (0) - - /* This is how to output an assembler line defining a `float' constant. */ - - #define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - do { long l; \ - REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ - fprintf ((FILE), "\t%s\t0x%lx\n", ASM_LONG, l); \ - } while (0) - - /* This is how to output an assembler line defining a `long' constant. */ - #define ASM_OUTPUT_INT(FILE,VALUE) \ - ( fprintf (FILE, "\t%s\t", ASM_LONG), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "\n")) - - /* Likewise for `char' and `short' constants. */ - #define ASM_OUTPUT_SHORT(FILE,VALUE) \ - ( fprintf (FILE, "\t%s\t", ASM_SHORT), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "\n")) - - /* This is how to output an assembler line for a numeric constant byte. */ - #define ASM_OUTPUT_CHAR(FILE,VALUE) \ - ( fprintf (FILE, "%s", ASM_BYTE_OP), \ - output_addr_const (FILE, (VALUE)), \ - putc ('\n', FILE)) - - #define ASM_OUTPUT_BYTE(FILE,VALUE) \ - fprintf ((FILE), "%s0x%x\n", ASM_BYTE_OP, (VALUE)) - - - /* Define the parentheses used to group arithmetic operations in assembler - * code. - */ - #define ASM_OPEN_PAREN "(" - #define ASM_CLOSE_PAREN ")" - /* This is how to output the definition of a user-level label named NAME, such as the label on a static function or variable NAME. */ --- 1585,1590 ---- *************** do { long l; \ *** 1760,1792 **** "*_.frame", "*_.tmp", "*_.z", "*_.xy", "*fake clobber", \ SOFT_REG_NAMES, "*sframe", "*ap"} - - /* Output a float value (represented as a C double) as an immediate operand. - This macro is a 68k-specific macro. */ - - #define ASM_OUTPUT_FLOAT_OPERAND(CODE,FILE,VALUE) \ - do { \ - long l; \ - REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ - asm_fprintf ((FILE), "%I0x%lx", l); \ - } while (0) - - /* Output a double value (represented as a C double) as an immediate operand. - This macro is a 68k-specific macro. */ - #define ASM_OUTPUT_DOUBLE_OPERAND(FILE,VALUE) \ - do { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL (VALUE, "%.20g", dstr); \ - asm_fprintf (FILE, "%I0r%s", dstr); \ - } while (0) - - /* Note, long double immediate operands are not actually - generated by m68k.md. */ - #define ASM_OUTPUT_LONG_DOUBLE_OPERAND(FILE,VALUE) \ - do { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL (VALUE, "%.20g", dstr); \ - asm_fprintf (FILE, "%I0r%s", dstr); \ - } while (0) - /* Print an instruction operand X on file FILE. CODE is the code from the %-spec for printing this operand. If `%z3' was used to print operand 3, then CODE is 'z'. */ --- 1623,1628 ---- *************** do { long l; \ *** 1794,1800 **** #define PRINT_OPERAND(FILE, X, CODE) \ print_operand (FILE, X, CODE) ! /* Print a memory operand whose address is X, on file FILE. */ #define PRINT_OPERAND_ADDRESS(FILE, ADDR) \ print_operand_address (FILE, ADDR) --- 1630,1636 ---- #define PRINT_OPERAND(FILE, X, CODE) \ print_operand (FILE, X, CODE) ! /* Print a memory operand whose address is X, on file FILE. */ #define PRINT_OPERAND_ADDRESS(FILE, ADDR) \ print_operand_address (FILE, ADDR) *************** do { long l; \ *** 1808,1821 **** #undef ASM_OUTPUT_REG_PUSH #undef ASM_OUTPUT_REG_POP ! /* This is how to output an element of a case-vector that is relative. */ #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ ! asm_fprintf (FILE, "\t%s\tL%d-L%d\n", ASM_SHORT, VALUE, REL) ! /* This is how to output an element of a case-vector that is absolute. */ #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ ! asm_fprintf (FILE, "\t%s\t.L%d\n", ASM_SHORT, VALUE) /* This is how to output an assembler line that says to advance the location counter to a multiple of 2**LOG bytes. */ --- 1644,1657 ---- #undef ASM_OUTPUT_REG_PUSH #undef ASM_OUTPUT_REG_POP ! /* This is how to output an element of a case-vector that is relative. */ #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ ! asm_fprintf (FILE, "\t%s\tL%d-L%d\n", integer_asm_op (2, TRUE), VALUE, REL) ! /* This is how to output an element of a case-vector that is absolute. */ #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ ! asm_fprintf (FILE, "\t%s\t.L%d\n", integer_asm_op (2, TRUE), VALUE) /* This is how to output an assembler line that says to advance the location counter to a multiple of 2**LOG bytes. */ *************** do { long l; \ *** 1829,1839 **** /* Assembler Commands for Exception Regions. */ /* Default values provided by GCC should be ok. Assumming that DWARF-2 ! frame unwind info is ok for this platform. */ ! ! /* How to renumber registers for dbx and gdb. */ ! #define DBX_REGISTER_NUMBER(REGNO) \ ! ((REGNO)) #undef PREFERRED_DEBUGGING_TYPE #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG --- 1665,1671 ---- /* Assembler Commands for Exception Regions. */ /* Default values provided by GCC should be ok. Assumming that DWARF-2 ! frame unwind info is ok for this platform. */ #undef PREFERRED_DEBUGGING_TYPE #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG *************** do { long l; \ *** 1842,1855 **** an empty string, or any arbitrary string (such as ".", ".L%", etc) without having to make any other changes to account for the specific definition. Note it is a string literal, not interpreted by printf ! and friends. */ #define LOCAL_LABEL_PREFIX "." /* The prefix for immediate operands. */ #define IMMEDIATE_PREFIX "#" #define GLOBAL_ASM_OP "\t.globl\t" - #define ASM_LONG ".long" - #define ASM_SHORT ".word" /* Miscellaneous Parameters. */ --- 1674,1685 ---- an empty string, or any arbitrary string (such as ".", ".L%", etc) without having to make any other changes to account for the specific definition. Note it is a string literal, not interpreted by printf ! and friends. */ #define LOCAL_LABEL_PREFIX "." /* The prefix for immediate operands. */ #define IMMEDIATE_PREFIX "#" #define GLOBAL_ASM_OP "\t.globl\t" /* Miscellaneous Parameters. */ *************** do { long l; \ *** 1876,1891 **** for the index in the tablejump instruction. */ #define CASE_VECTOR_MODE Pmode - /* Specify the tree operation to be used to convert reals to integers. */ - #define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR - /* This flag, if defined, says the same insns that convert to a signed fixnum also convert validly to an unsigned one. */ #define FIXUNS_TRUNC_LIKE_FIX_TRUNC - /* This is the kind of divide that is easiest to do in the general case. */ - #define EASY_DIV_EXPR TRUNC_DIV_EXPR - /* Max number of bytes we can move from memory to memory in one reasonably fast instruction. */ #define MOVE_MAX 2 --- 1706,1715 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68hc11/m68hc11.md gcc-3.1/gcc/config/m68hc11/m68hc11.md *** gcc-3.0.4/gcc/config/m68hc11/m68hc11.md Sun Nov 25 16:48:15 2001 --- gcc-3.1/gcc/config/m68hc11/m68hc11.md Sun Mar 24 16:05:41 2002 *************** *** 1,5 **** ;;- Machine description file for Motorola 68HC11 and 68HC12. ! ;;- Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. ;;- Contributed by Stephane Carrez (stcarrez@worldnet.fr) ;; This file is part of GNU CC. --- 1,5 ---- ;;- Machine description file for Motorola 68HC11 and 68HC12. ! ;;- Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ;;- Contributed by Stephane Carrez (stcarrez@worldnet.fr) ;; This file is part of GNU CC. *************** *** 65,73 **** ;; ;; Other constraints: ;; ! ;; T an operand that can be accessed with 68HC1X direct addressing ! ;; mode. For 68HC11 this includes the pseudo soft registers and ! ;; any memory operand that is a direct addressing (.page0). ;; ;; ;; Immediate integer operand constraints: --- 65,84 ---- ;; ;; Other constraints: ;; ! ;; Q an operand which is in memory but whose address is constant ! ;; (ie, a (MEM (SYMBOL_REF x))). This constraint is used by ! ;; bset/bclr instructions together with linker relaxation. The ! ;; operand can be translated to a page0 addressing mode if the ! ;; symbol address is in page0 (0..255). ! ;; ! ;; R an operand which is in memory and whose address is expressed ! ;; with 68HC11/68HC12 indexed addressing mode. In general this ! ;; is any valid (MEM) except a (MEM (SYMBOL_REF x)). ! ;; ! ;; U an operand which is in memory and if it uses the 68HC12 indexed ! ;; addressing mode, the offset is in the range -16..+15. This is ! ;; used by 68HC12 movb/movw instructions since they do not accept ! ;; the full 16-bit offset range (as other insn do). ;; ;; ;; Immediate integer operand constraints: *************** *** 94,102 **** ;; some values in bad registers. ;; ;; 32/64-bit Patterns: ! ;; The 68HC11 does not support 32/64-bit operations. Most of the ;; 32/64-bit patterns are defined to split the instruction in ! ;; 16-bits patterns. Providing split patterns generates better code ;; than letting GCC implement the 32/64-bit operation itself. ;; ;; --- 105,113 ---- ;; some values in bad registers. ;; ;; 32/64-bit Patterns: ! ;; The 68HC11 does not support 32/64-bit operations. Most of the ;; 32/64-bit patterns are defined to split the instruction in ! ;; 16-bits patterns. Providing split patterns generates better code ;; than letting GCC implement the 32/64-bit operation itself. ;; ;; *************** *** 111,117 **** ;; them correctly (it would treat the X, Y or D register as dead sometimes). ;; ;; o Some split pattern generate instructions that operate on 'a' or 'b' ! ;; register directory (high part and low part of D respectively). ;; Such split pattern must also be valid when z_replacement_completed == 2 ;; because flow/cse is not aware that D is composed of {a, b}. ;; --- 122,128 ---- ;; them correctly (it would treat the X, Y or D register as dead sometimes). ;; ;; o Some split pattern generate instructions that operate on 'a' or 'b' ! ;; register directly (high part and low part of D respectively). ;; Such split pattern must also be valid when z_replacement_completed == 2 ;; because flow/cse is not aware that D is composed of {a, b}. ;; *************** *** 193,219 **** ;; ;; Split pattern for (tst:QI) on an address register. - ;; The value is saved in memory and we test the low part only. ;; (define_split [(set (cc0) ! (match_operand:QI 0 "hard_addr_reg_operand" "xy"))] "z_replacement_completed == 2 && GET_MODE (operands[0]) == QImode" ! [(set (match_dup 3) (match_dup 2)) ! (set (cc0) (match_dup 4))] ! "operands[2] = gen_rtx (REG, HImode, REGNO (operands[0])); ! operands[3] = gen_rtx (REG, HImode, SOFT_TMP_REGNUM); ! operands[4] = gen_rtx (REG, QImode, SOFT_TMP_REGNUM);") (define_insn "tstqi_1" [(set (cc0) (match_operand:QI 0 "tst_operand" "m,d,*A,!u"))] "" ! "@ ! tst\\t%0 ! tstb ! # ! tst\\t%b0") ;; ;; tstqi_z_used, cmpqi_z_used and cmphi_z_used are patterns generated --- 204,239 ---- ;; ;; Split pattern for (tst:QI) on an address register. ;; (define_split [(set (cc0) ! (match_operand:QI 0 "hard_addr_reg_operand" ""))] "z_replacement_completed == 2 && GET_MODE (operands[0]) == QImode" ! [(parallel [(set (reg:HI D_REGNUM) (match_dup 1)) ! (set (match_dup 1) (reg:HI D_REGNUM))]) ! (set (cc0) (reg:QI D_REGNUM)) ! (parallel [(set (reg:HI D_REGNUM) (match_dup 1)) ! (set (match_dup 1) (reg:HI D_REGNUM))])] ! "operands[1] = gen_rtx (REG, HImode, REGNO (operands[0]));") (define_insn "tstqi_1" [(set (cc0) (match_operand:QI 0 "tst_operand" "m,d,*A,!u"))] "" ! "* ! { ! if (A_REG_P (operands[0])) ! return \"#\"; ! ! else if (D_REG_P (operands[0])) ! return \"tstb\"; ! ! else if (dead_register_here (insn, d_reg)) ! return \"ldab\\t%b0\"; ! ! else ! return \"tst\\t%b0\"; ! }") ;; ;; tstqi_z_used, cmpqi_z_used and cmphi_z_used are patterns generated *************** *** 236,243 **** (define_split /* "tstqi_z_used" */ [(set (cc0) ! (match_operand:QI 0 "tst_operand" "m")) ! (use (match_operand:HI 1 "hard_reg_operand" "dxy")) (use (reg:HI 11))] "z_replacement_completed == 2" [(set (mem:HI (pre_dec:HI (reg:HI SP_REGNUM))) (match_dup 1)) --- 256,263 ---- (define_split /* "tstqi_z_used" */ [(set (cc0) ! (match_operand:QI 0 "tst_operand" "")) ! (use (match_operand:HI 1 "hard_reg_operand" "")) (use (reg:HI 11))] "z_replacement_completed == 2" [(set (mem:HI (pre_dec:HI (reg:HI SP_REGNUM))) (match_dup 1)) *************** *** 277,284 **** ;; (define_split [(set (cc0) ! (compare (match_operand:HI 0 "hard_reg_operand" "dxy") ! (match_operand:HI 1 "hard_reg_operand" "Aw")))] "reload_completed" [(set (match_dup 2) (match_dup 1)) (set (cc0) --- 297,304 ---- ;; (define_split [(set (cc0) ! (compare (match_operand:HI 0 "hard_reg_operand" "") ! (match_operand:HI 1 "hard_reg_operand" "")))] "reload_completed" [(set (match_dup 2) (match_dup 1)) (set (cc0) *************** *** 300,312 **** DONE; }") ! (define_insn "cmphi_1" [(set (cc0) (compare (match_operand:HI 0 "tst_operand" ! "x,dy,xyd,?xy,d,m,!u,dxy,dxy") (match_operand:HI 1 "cmp_operand" "i,i,!u,m,m,dxy,dxy,?*d*A,!*w")))] ! "" "* { if (H_REG_P (operands[1]) && !H_REG_P (operands[0])) --- 320,352 ---- DONE; }") ! (define_insn "cmphi_1_hc12" [(set (cc0) (compare (match_operand:HI 0 "tst_operand" ! "d,?xy,xyd,?xy,d,m,!u,dxy,dxy") (match_operand:HI 1 "cmp_operand" "i,i,!u,m,m,dxy,dxy,?*d*A,!*w")))] ! "TARGET_M6812" ! "* ! { ! if (H_REG_P (operands[1]) && !H_REG_P (operands[0])) ! { ! cc_status.flags |= CC_REVERSED; ! return \"cp%1\\t%0\"; ! } ! else if (H_REG_P (operands[1])) ! return \"#\"; ! else ! return \"cp%0\\t%1\"; ! }") ! ! (define_insn "cmphi_1_hc11" ! [(set (cc0) ! (compare (match_operand:HI 0 "tst_operand" ! "dx,y,xyd,?xy,d,m,!u,dxy,dxy") ! (match_operand:HI 1 "cmp_operand" ! "i,i,!u,m,m,dxy,dxy,?*d*A,!*w")))] ! "TARGET_M6811" "* { if (H_REG_P (operands[1]) && !H_REG_P (operands[0])) *************** *** 331,339 **** (define_split /* "cmphi_z_used" */ [(set (cc0) ! (compare (match_operand:HI 0 "tst_operand" "dxy,m") ! (match_operand:HI 1 "cmp_operand" "m,dxy"))) ! (use (match_operand:HI 2 "hard_reg_operand" "dxy,dxy")) (use (reg:HI 11))] "z_replacement_completed == 2" [(set (mem:HI (pre_dec:HI (reg:HI SP_REGNUM))) (match_dup 2)) --- 371,379 ---- (define_split /* "cmphi_z_used" */ [(set (cc0) ! (compare (match_operand:HI 0 "tst_operand" "") ! (match_operand:HI 1 "cmp_operand" ""))) ! (use (match_operand:HI 2 "hard_reg_operand" "")) (use (reg:HI 11))] "z_replacement_completed == 2" [(set (mem:HI (pre_dec:HI (reg:HI SP_REGNUM))) (match_dup 2)) *************** *** 350,357 **** ;; (define_split [(set (cc0) ! (compare (match_operand:QI 0 "hard_addr_reg_operand" "xy") ! (match_operand:QI 1 "cmp_operand" "uimA")))] "z_replacement_completed == 2 && GET_MODE (operands[0]) == QImode" [(parallel [(set (reg:HI D_REGNUM) (match_dup 3)) (set (match_dup 3) (reg:HI D_REGNUM))]) --- 390,397 ---- ;; (define_split [(set (cc0) ! (compare (match_operand:QI 0 "hard_addr_reg_operand" "") ! (match_operand:QI 1 "cmp_operand" "")))] "z_replacement_completed == 2 && GET_MODE (operands[0]) == QImode" [(parallel [(set (reg:HI D_REGNUM) (match_dup 3)) (set (match_dup 3) (reg:HI D_REGNUM))]) *************** *** 363,370 **** (define_split [(set (cc0) ! (compare (match_operand:QI 0 "hard_reg_operand" "dxy") ! (match_operand:QI 1 "hard_reg_operand" "dxy")))] "reload_completed" [(set (match_dup 3) (match_dup 4)) (set (cc0) --- 403,410 ---- (define_split [(set (cc0) ! (compare (match_operand:QI 0 "hard_reg_operand" "") ! (match_operand:QI 1 "hard_reg_operand" "")))] "reload_completed" [(set (match_dup 3) (match_dup 4)) (set (cc0) *************** *** 402,409 **** (define_split /* "bitcmpqi" */ [(set (cc0) ! (and:QI (match_operand:QI 0 "tst_operand" "d") ! (match_operand:QI 1 "hard_addr_reg_operand" "xy")))] "z_replacement_completed == 2 && GET_MODE (operands[0]) == QImode" [(set (match_dup 3) (match_dup 2)) (set (cc0) (and:QI (match_dup 0) (match_dup 4)))] --- 442,449 ---- (define_split /* "bitcmpqi" */ [(set (cc0) ! (and:QI (match_operand:QI 0 "tst_operand" "") ! (match_operand:QI 1 "hard_addr_reg_operand" "")))] "z_replacement_completed == 2 && GET_MODE (operands[0]) == QImode" [(set (match_dup 3) (match_dup 2)) (set (cc0) (and:QI (match_dup 0) (match_dup 4)))] *************** *** 422,430 **** (define_split /* "bitcmpqi_z_used" */ [(set (cc0) ! (and:QI (match_operand:QI 0 "tst_operand" "d,m") ! (match_operand:QI 1 "cmp_operand" "m,d"))) ! (use (match_operand:HI 2 "hard_reg_operand" "xy,xy")) (use (reg:HI 11))] "z_replacement_completed == 2" [(set (mem:HI (pre_dec:HI (reg:HI 3))) (match_dup 2)) --- 462,470 ---- (define_split /* "bitcmpqi_z_used" */ [(set (cc0) ! (and:QI (match_operand:QI 0 "tst_operand" "") ! (match_operand:QI 1 "cmp_operand" ""))) ! (use (match_operand:HI 2 "hard_reg_operand" "")) (use (reg:HI 11))] "z_replacement_completed == 2" [(set (mem:HI (pre_dec:HI (reg:HI 3))) (match_dup 2)) *************** *** 512,520 **** (define_split /* cmpqi_z_used */ [(set (cc0) ! (compare (match_operand:QI 0 "tst_operand" "dxy,m") ! (match_operand:QI 1 "cmp_operand" "m,dxy"))) ! (use (match_operand:HI 2 "hard_reg_operand" "dxy,dxy")) (use (reg:HI 11))] "z_replacement_completed == 2" [(set (mem:HI (pre_dec:HI (reg:HI SP_REGNUM))) (match_dup 2)) --- 552,560 ---- (define_split /* cmpqi_z_used */ [(set (cc0) ! (compare (match_operand:QI 0 "tst_operand" "") ! (match_operand:QI 1 "cmp_operand" ""))) ! (use (match_operand:HI 2 "hard_reg_operand" "")) (use (reg:HI 11))] "z_replacement_completed == 2" [(set (mem:HI (pre_dec:HI (reg:HI SP_REGNUM))) (match_dup 2)) *************** *** 523,552 **** (set (match_dup 2) (mem:HI (post_inc:HI (reg:HI SP_REGNUM))))] "operands[3] = gen_rtx (REG, HImode, SOFT_Z_REGNUM);") - (define_expand "cmpdf" - [(set (cc0) - (compare (match_operand:DF 0 "general_operand" "") - (match_operand:DF 1 "general_operand" "")))] - "0" - " - { - m68hc11_compare_op0 = operands[0]; - m68hc11_compare_op1 = operands[1]; - DONE; - }") - - (define_expand "cmpsf" - [(set (cc0) - (compare (match_operand:SF 0 "general_operand" "") - (match_operand:SF 1 "general_operand" "")))] - "0" - " - { - m68hc11_compare_op0 = operands[0]; - m68hc11_compare_op1 = operands[1]; - DONE; - }") - ;;-------------------------------------------------------------------- ;;- Move strict_low_part ;;-------------------------------------------------------------------- --- 563,568 ---- *************** *** 563,570 **** "#") (define_split ! [(set (strict_low_part (match_operand:SI 0 "non_push_operand" "+um,D,D")) ! (match_operand:SI 1 "general_operand" "D,Dim,u"))] "z_replacement_completed == 2" [(set (match_dup 0) (match_dup 1))] "") --- 579,586 ---- "#") (define_split ! [(set (strict_low_part (match_operand:SI 0 "non_push_operand" "")) ! (match_operand:SI 1 "general_operand" ""))] "z_replacement_completed == 2" [(set (match_dup 0) (match_dup 1))] "") *************** *** 576,583 **** "#") (define_split ! [(set (strict_low_part (match_operand:HI 0 "non_push_operand" "+um,dA,dA")) ! (match_operand:HI 1 "general_operand" "dA,dAim,u"))] "z_replacement_completed == 2" [(set (match_dup 0) (match_dup 1))] "") --- 592,599 ---- "#") (define_split ! [(set (strict_low_part (match_operand:HI 0 "non_push_operand" "")) ! (match_operand:HI 1 "general_operand" ""))] "z_replacement_completed == 2" [(set (match_dup 0) (match_dup 1))] "") *************** *** 589,596 **** "#") (define_split ! [(set (strict_low_part (match_operand:QI 0 "non_push_operand" "+mu,dA")) ! (match_operand:QI 1 "general_operand" "d,imudA"))] "z_replacement_completed == 2" [(set (match_dup 0) (match_dup 1))] "") --- 605,612 ---- "#") (define_split ! [(set (strict_low_part (match_operand:QI 0 "non_push_operand" "")) ! (match_operand:QI 1 "general_operand" ""))] "z_replacement_completed == 2" [(set (match_dup 0) (match_dup 1))] "") *************** *** 635,650 **** ") (define_insn "movdi_internal" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=U,!u,U,m,m,!u") ! (match_operand:DI 1 "general_operand" "iU,iU,!u,mi,!u,!mu")) ! (clobber (match_scratch:HI 2 "=&d,&d,&d,&d,&d,&d"))] "" "#") (define_split ! [(set (match_operand:DI 0 "nonimmediate_operand" "=uUm") ! (match_operand:DI 1 "general_operand" "iuUm")) ! (clobber (match_scratch:HI 2 "=&d"))] "reload_completed" [(const_int 0)] "m68hc11_split_move (operands[0], operands[1], operands[2]); --- 651,666 ---- ") (define_insn "movdi_internal" ! [(set (match_operand:DI 0 "nonimmediate_operand" "=uS,U,!u,U,m,m,!u") ! (match_operand:DI 1 "general_operand" "K,iU,iU,!u,mi,!u,!mu")) ! (clobber (match_scratch:HI 2 "=X,&d,&d,&d,&d,&d,&d"))] "" "#") (define_split ! [(set (match_operand:DI 0 "nonimmediate_operand" "") ! (match_operand:DI 1 "general_operand" "")) ! (clobber (match_scratch:HI 2 ""))] "reload_completed" [(const_int 0)] "m68hc11_split_move (operands[0], operands[1], operands[2]); *************** *** 671,686 **** ") (define_insn "movdf_internal" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=U,!u,U,m,m,!u") ! (match_operand:DF 1 "general_operand" "iU,iU,!u,mi,!u,!mu")) ! (clobber (match_scratch:HI 2 "=&d,&d,&d,&d,&d,&d"))] "" "#") (define_split ! [(set (match_operand:DF 0 "nonimmediate_operand" "=uUm") ! (match_operand:DF 1 "general_operand" "iuUm")) ! (clobber (match_scratch:HI 2 "=&d"))] "reload_completed" [(const_int 0)] "m68hc11_split_move (operands[0], operands[1], operands[2]); --- 687,702 ---- ") (define_insn "movdf_internal" ! [(set (match_operand:DF 0 "nonimmediate_operand" "=uS,U,!u,U,m,m,!u") ! (match_operand:DF 1 "general_operand" "G,iU,iU,!u,mi,!u,!mu")) ! (clobber (match_scratch:HI 2 "=X,&d,&d,&d,&d,&d,&d"))] "" "#") (define_split ! [(set (match_operand:DF 0 "nonimmediate_operand" "") ! (match_operand:DF 1 "general_operand" "")) ! (clobber (match_scratch:HI 2 ""))] "reload_completed" [(const_int 0)] "m68hc11_split_move (operands[0], operands[1], operands[2]); *************** *** 716,731 **** ") (define_insn "movsi_internal" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=mu,?D,m,?D,?u,?u,!u,D") ! (match_operand:SI 1 "general_operand" "imu,im,?D,!u,?D,mi,!u,!D")) ! (clobber (match_scratch:HI 2 "=&d,X,X,X,X,&d,&d,X"))] "" "#") (define_split ! [(set (match_operand:SI 0 "nonimmediate_operand" "=m,D,m,D,!u,!u,!u,D") ! (match_operand:SI 1 "general_operand" "im,im,D,!u,D,mi,!u,!D")) ! (clobber (match_scratch:HI 2 "=&d,X,X,X,X,&d,&d,X"))] "reload_completed" [(const_int 0)] "m68hc11_split_move (operands[0], operands[1], operands[2]); --- 732,747 ---- ") (define_insn "movsi_internal" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=uS,mu,?D,m,?D,?u,?u,!u,D") ! (match_operand:SI 1 "general_operand" "K,imu,im,?D,!u,?D,mi,!u,!D")) ! (clobber (match_scratch:HI 2 "=X,&d,X,X,X,X,&d,&d,X"))] "" "#") (define_split ! [(set (match_operand:SI 0 "nonimmediate_operand" "") ! (match_operand:SI 1 "general_operand" "")) ! (clobber (match_scratch:HI 2 ""))] "reload_completed" [(const_int 0)] "m68hc11_split_move (operands[0], operands[1], operands[2]); *************** *** 752,767 **** ") (define_insn "movsf_internal" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=m,D,m,D,!u,!u,!u,D") ! (match_operand:SF 1 "general_operand" "im,im,D,!u,D,mi,!u,!D")) ! (clobber (match_scratch:HI 2 "=&d,X,X,X,X,&d,&d,X"))] "" "#") (define_split ! [(set (match_operand:SF 0 "nonimmediate_operand" "=m,D,m,D,!u,!u,!u,D") ! (match_operand:SF 1 "general_operand" "im,im,D,!u,D,mi,!u,!D")) ! (clobber (match_scratch:HI 2 "=&d,X,X,X,X,&d,&d,X"))] "reload_completed" [(const_int 0)] "m68hc11_split_move (operands[0], operands[1], operands[2]); --- 768,783 ---- ") (define_insn "movsf_internal" ! [(set (match_operand:SF 0 "nonimmediate_operand" "=S!u,m,D,m,D,!u,!u,!u,D") ! (match_operand:SF 1 "general_operand" "G,im,im,D,!u,D,mi,!u,!D")) ! (clobber (match_scratch:HI 2 "=X,&d,X,X,X,X,&d,&d,X"))] "" "#") (define_split ! [(set (match_operand:SF 0 "nonimmediate_operand" "") ! (match_operand:SF 1 "general_operand" "")) ! (clobber (match_scratch:HI 2 ""))] "reload_completed" [(const_int 0)] "m68hc11_split_move (operands[0], operands[1], operands[2]); *************** *** 917,923 **** ;; appear in the source operand. ;; (define_split ! [(set (match_operand:QI 0 "hard_addr_reg_operand" "=A") (match_operand:QI 1 "general_operand" ""))] "z_replacement_completed == 2 && GET_MODE (operands[0]) == QImode && !reg_mentioned_p (operands[0], operands[1]) --- 933,939 ---- ;; appear in the source operand. ;; (define_split ! [(set (match_operand:QI 0 "hard_addr_reg_operand" "") (match_operand:QI 1 "general_operand" ""))] "z_replacement_completed == 2 && GET_MODE (operands[0]) == QImode && !reg_mentioned_p (operands[0], operands[1]) *************** *** 934,940 **** ;; (define_split [(set (match_operand:QI 0 "nonimmediate_operand" "") ! (match_operand:QI 1 "hard_addr_reg_operand" "=A"))] "z_replacement_completed == 2 && GET_MODE (operands[1]) == QImode && !reg_mentioned_p (operands[1], operands[0]) && !D_REG_P (operands[0])" --- 950,956 ---- ;; (define_split [(set (match_operand:QI 0 "nonimmediate_operand" "") ! (match_operand:QI 1 "hard_addr_reg_operand" ""))] "z_replacement_completed == 2 && GET_MODE (operands[1]) == QImode && !reg_mentioned_p (operands[1], operands[0]) && !D_REG_P (operands[0])" *************** *** 1003,1011 **** (define_insn "*movqi_68hc12" [(set (match_operand:QI 0 "nonimmediate_operand" ! "=d*AU*q,d*A*q,*u,d*A*q,m,m") (match_operand:QI 1 "general_operand" ! "*ri*q,U,*ri*qU,m,d*q,!A"))] "TARGET_M6812" "* { --- 1019,1027 ---- (define_insn "*movqi_68hc12" [(set (match_operand:QI 0 "nonimmediate_operand" ! "=U,d*AU*q,d*A*qU,*u,d*A*q,m,m") (match_operand:QI 1 "general_operand" ! "U,*ri*q,U,*ri*qU,m,d*q,!*A"))] "TARGET_M6812" "* { *************** *** 1014,1021 **** }") (define_insn "*movqi_m68hc11" ! [(set (match_operand:QI 0 "nonimmediate_operand" "=dA*q,m,m,dA*q,*u") ! (match_operand:QI 1 "general_operand" "dAim*q,d*q,!A,*u,dA*q"))] "TARGET_M6811" "* { --- 1030,1037 ---- }") (define_insn "*movqi_m68hc11" ! [(set (match_operand:QI 0 "nonimmediate_operand" "=d*A*q,m,m,d*A*q,*u") ! (match_operand:QI 1 "general_operand" "d*Aim*q,d*q,!*A,*u,d*A*q"))] "TARGET_M6811" "* { *************** *** 1081,1088 **** "#") (define_split ! [(set (match_operand:DI 0 "push_operand" "=<") ! (zero_extend:DI (match_operand:QI 1 "nonimmediate_operand" "dmu*B"))) (clobber (match_scratch:HI 2 "=&dB"))] "z_replacement_completed == 2" [(const_int 0)] --- 1097,1104 ---- "#") (define_split ! [(set (match_operand:DI 0 "push_operand" "") ! (zero_extend:DI (match_operand:QI 1 "nonimmediate_operand" ""))) (clobber (match_scratch:HI 2 "=&dB"))] "z_replacement_completed == 2" [(const_int 0)] *************** *** 1092,1098 **** rtx push = m68hc11_gen_lowpart (HImode, low); rtx src = operands[1]; ! /* Source operand must be in a hard register. */ if (!H_REG_P (src)) { src = gen_rtx (REG, QImode, REGNO (operands[2])); --- 1108,1114 ---- rtx push = m68hc11_gen_lowpart (HImode, low); rtx src = operands[1]; ! /* Source operand must be in a hard register. */ if (!H_REG_P (src)) { src = gen_rtx (REG, QImode, REGNO (operands[2])); *************** *** 1100,1106 **** } /* Source is in D, we can push B then one word of 0 and we do ! a correction on the stack pointer. */ if (D_REG_P (src)) { emit_move_insn (m68hc11_gen_lowpart (QImode, push), src); --- 1116,1122 ---- } /* Source is in D, we can push B then one word of 0 and we do ! a correction on the stack pointer. */ if (D_REG_P (src)) { emit_move_insn (m68hc11_gen_lowpart (QImode, push), src); *************** *** 1139,1146 **** }") (define_split ! [(set (match_operand:DI 0 "nonimmediate_operand" "=mu") ! (zero_extend:DI (match_operand:QI 1 "nonimmediate_operand" "dmu*B"))) (clobber (match_scratch:HI 2 "=&dB"))] "z_replacement_completed == 2" [(const_int 0)] --- 1155,1162 ---- }") (define_split ! [(set (match_operand:DI 0 "nonimmediate_operand" "") ! (zero_extend:DI (match_operand:QI 1 "nonimmediate_operand" ""))) (clobber (match_scratch:HI 2 "=&dB"))] "z_replacement_completed == 2" [(const_int 0)] *************** *** 1150,1156 **** rtx low2 = m68hc11_gen_lowpart (HImode, low); rtx src = operands[1]; ! /* Source operand must be in a hard register. */ if (!H_REG_P (src)) { src = gen_rtx (REG, QImode, REGNO (operands[2])); --- 1166,1172 ---- rtx low2 = m68hc11_gen_lowpart (HImode, low); rtx src = operands[1]; ! /* Source operand must be in a hard register. */ if (!H_REG_P (src)) { src = gen_rtx (REG, QImode, REGNO (operands[2])); *************** *** 1178,1187 **** "#") (define_split ! [(set (match_operand:DI 0 "non_push_operand" "=m,m,m,!u,!u") (zero_extend:DI ! (match_operand:HI 1 "nonimmediate_operand" "m,dA,!u,dmA,!u"))) ! (clobber (match_scratch:HI 2 "=&d,&dB,&dB,&dB,&dB"))] "z_replacement_completed == 2" [(const_int 0)] " --- 1194,1203 ---- "#") (define_split ! [(set (match_operand:DI 0 "non_push_operand" "") (zero_extend:DI ! (match_operand:HI 1 "nonimmediate_operand" ""))) ! (clobber (match_scratch:HI 2 ""))] "z_replacement_completed == 2" [(const_int 0)] " *************** *** 1217,1226 **** "#") (define_split ! [(set (match_operand:DI 0 "nonimmediate_operand" "=m,m,!u,!u") (zero_extend:DI ! (match_operand:SI 1 "nonimmediate_operand" "m,Du,m,Du"))) ! (clobber (match_scratch:HI 2 "=d,d,&dB,d"))] "z_replacement_completed == 2" [(const_int 0)] " --- 1233,1242 ---- "#") (define_split ! [(set (match_operand:DI 0 "nonimmediate_operand" "") (zero_extend:DI ! (match_operand:SI 1 "nonimmediate_operand" ""))) ! (clobber (match_scratch:HI 2 ""))] "z_replacement_completed == 2" [(const_int 0)] " *************** *** 1251,1260 **** "#") (define_split ! [(set (match_operand:SI 0 "non_push_operand" "=D,mu,m,m,!u,!u") (zero_extend:SI ! (match_operand:HI 1 "nonimmediate_operand" "dAmu,dA,m,!u,m,!u"))) ! (clobber (match_scratch:HI 2 "=X,X,&d,&dB,&dB,&dB"))] "reload_completed" [(const_int 0)] " --- 1267,1276 ---- "#") (define_split ! [(set (match_operand:SI 0 "non_push_operand" "") (zero_extend:SI ! (match_operand:HI 1 "nonimmediate_operand" ""))) ! (clobber (match_scratch:HI 2 ""))] "reload_completed" [(const_int 0)] " *************** *** 1279,1286 **** "#") (define_split ! [(set (match_operand:SI 0 "non_push_operand" "=mu") ! (zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "dxy")))] "reload_completed && !X_REG_P (operands[0])" [(set (match_dup 2) (zero_extend:HI (match_dup 1))) (set (match_dup 3) (const_int 0))] --- 1295,1302 ---- "#") (define_split ! [(set (match_operand:SI 0 "non_push_operand" "") ! (zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "")))] "reload_completed && !X_REG_P (operands[0])" [(set (match_dup 2) (zero_extend:HI (match_dup 1))) (set (match_dup 3) (const_int 0))] *************** *** 1289,1296 **** operands[3] = m68hc11_gen_highpart (HImode, operands[0]);") (define_split ! [(set (match_operand:SI 0 "hard_reg_operand" "=D") ! (zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "dxymu")))] "z_replacement_completed == 2 && X_REG_P (operands[0])" [(set (match_dup 2) (match_dup 3)) (set (match_dup 4) (const_int 0)) --- 1305,1312 ---- operands[3] = m68hc11_gen_highpart (HImode, operands[0]);") (define_split ! [(set (match_operand:SI 0 "hard_reg_operand" "") ! (zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "")))] "z_replacement_completed == 2 && X_REG_P (operands[0])" [(set (match_dup 2) (match_dup 3)) (set (match_dup 4) (const_int 0)) *************** *** 1338,1345 **** "" "* { - rtx ops[2]; - if (A_REG_P (operands[0])) return \"#\"; --- 1354,1359 ---- *************** *** 1404,1410 **** "" "* { - extern rtx ix_reg; rtx ops[3]; int need_tst = 0; --- 1418,1423 ---- *************** *** 1432,1438 **** else if (X_REG_P (operands[0])) { /* X can be used as an indexed addressing in the source. ! Get the value before clearing it. */ if (reg_mentioned_p (ix_reg, operands[1])) { output_asm_insn (\"ldab\\t%b1\", operands); --- 1445,1451 ---- else if (X_REG_P (operands[0])) { /* X can be used as an indexed addressing in the source. ! Get the value before clearing it. */ if (reg_mentioned_p (ix_reg, operands[1])) { output_asm_insn (\"ldab\\t%b1\", operands); *************** *** 1571,1578 **** ;; a temporary scratch memory location. ;; (define_split ! [(set (match_operand:SI 0 "register_operand" "=D") ! (sign_extend:SI (match_operand:HI 1 "register_operand" "A")))] "reload_completed && (Y_REG_P (operands[1]) || Z_REG_P (operands[1]))" [(set (reg:HI D_REGNUM) (match_dup 1)) (set (match_dup 0) (sign_extend:SI (reg:HI D_REGNUM)))] --- 1584,1591 ---- ;; a temporary scratch memory location. ;; (define_split ! [(set (match_operand:SI 0 "register_operand" "") ! (sign_extend:SI (match_operand:HI 1 "register_operand" "")))] "reload_completed && (Y_REG_P (operands[1]) || Z_REG_P (operands[1]))" [(set (reg:HI D_REGNUM) (match_dup 1)) (set (match_dup 0) (sign_extend:SI (reg:HI D_REGNUM)))] *************** *** 1584,1590 **** "" "* { - extern rtx ix_reg; rtx ops[2]; int x_reg_used; --- 1597,1602 ---- *************** *** 1598,1605 **** } else { ! /* X can be used as a indexed addressing in the source. ! Get the value before clearing it. */ x_reg_used = reg_mentioned_p (ix_reg, operands[1]); if (x_reg_used) { --- 1610,1617 ---- } else { ! /* X can be used as an indexed addressing in the source. ! Get the value before clearing it. */ x_reg_used = reg_mentioned_p (ix_reg, operands[1]); if (x_reg_used) { *************** *** 1751,1785 **** ;; (define_expand "addsi3" [(parallel [(set (match_operand:SI 0 "register_operand" "") ! (plus:SI (match_operand:SI 1 "register_operand" "") (match_operand:SI 2 "general_operand" ""))) (clobber (match_scratch:HI 3 ""))])] "" "") - ;; - ;; Translate D = D + D into D = D << 1 - ;; We have to do this because adding a register to itself is not possible. - ;; - ;; Manipulation of A and B registers directly confuses the cse-regs pass - ;; so the split must be made after z-replacement register. - ;; - (define_split - [(set (match_operand:SI 0 "register_operand" "=D") - (plus:SI (match_dup 0) - (match_dup 0))) - (clobber (match_scratch:HI 1 "=X"))] - "reload_completed && z_replacement_completed == 2" - [(set (reg:HI D_REGNUM) (ashift:HI (reg:HI D_REGNUM) (const_int 1))) - (parallel [(set (reg:HI D_REGNUM) (reg:HI X_REGNUM)) - (set (reg:HI X_REGNUM) (reg:HI D_REGNUM))]) - (set (reg:QI B_REGNUM) (rotate:QI (reg:QI B_REGNUM) (reg:QI CC_REGNUM))) - (set (reg:QI A_REGNUM) (rotate:QI (reg:QI A_REGNUM) (reg:QI CC_REGNUM))) - (parallel [(set (reg:HI D_REGNUM) (reg:HI X_REGNUM)) - (set (reg:HI X_REGNUM) (reg:HI D_REGNUM))])] - "") - - (define_insn "*addsi3_zero_extendhi" [(set (match_operand:SI 0 "register_operand" "=D,D,D,D") (plus:SI (zero_extend:SI --- 1763,1774 ---- ;; (define_expand "addsi3" [(parallel [(set (match_operand:SI 0 "register_operand" "") ! (plus:SI (match_operand:SI 1 "general_operand" "") (match_operand:SI 2 "general_operand" ""))) (clobber (match_scratch:HI 3 ""))])] "" "") (define_insn "*addsi3_zero_extendhi" [(set (match_operand:SI 0 "register_operand" "=D,D,D,D") (plus:SI (zero_extend:SI *************** *** 1812,1818 **** } ops[2] = gen_label_rtx (); ! /* ldx preserves the carry, propagate it by incrementing X directly. */ output_asm_insn (\"addd\\t%0\", ops); if (!X_REG_P (operands[2])) output_asm_insn (\"ldx\\t%1\", ops); --- 1801,1807 ---- } ops[2] = gen_label_rtx (); ! /* ldx preserves the carry, propagate it by incrementing X directly. */ output_asm_insn (\"addd\\t%0\", ops); if (!X_REG_P (operands[2])) output_asm_insn (\"ldx\\t%1\", ops); *************** *** 1827,1836 **** (define_split /* "*addsi3_zero_extendqi" */ ! [(set (match_operand:SI 0 "register_operand" "=D,D") (plus:SI (zero_extend:SI ! (match_operand:QI 1 "general_operand" "dAmi,!dAmiu")) ! (match_operand:SI 2 "memory_operand" "m,m"))) (clobber (match_scratch:HI 3 "=X,X"))] "reload_completed" [(set (reg:HI D_REGNUM) (zero_extend:HI (match_dup 1))) --- 1816,1825 ---- (define_split /* "*addsi3_zero_extendqi" */ ! [(set (match_operand:SI 0 "register_operand" "") (plus:SI (zero_extend:SI ! (match_operand:QI 1 "general_operand" "")) ! (match_operand:SI 2 "memory_operand" ""))) (clobber (match_scratch:HI 3 "=X,X"))] "reload_completed" [(set (reg:HI D_REGNUM) (zero_extend:HI (match_dup 1))) *************** *** 1865,1871 **** { ops[0] = operands[1]; } ! ops[1] = gen_rtx (CONST_INT, VOIDmode, 0); } else { --- 1854,1860 ---- { ops[0] = operands[1]; } ! ops[1] = const0_rtx; } else { *************** *** 1886,1892 **** output_asm_insn (\"clra\", ops); } ! /* ldx preserves the carry, propagate it by incrementing X directly. */ output_asm_insn (\"addb\\t%b0\", ops); output_asm_insn (\"adca\\t%h1\", ops); if (!X_REG_P (operands[2])) --- 1875,1881 ---- output_asm_insn (\"clra\", ops); } ! /* ldx preserves the carry, propagate it by incrementing X directly. */ output_asm_insn (\"addb\\t%b0\", ops); output_asm_insn (\"adca\\t%h1\", ops); if (!X_REG_P (operands[2])) *************** *** 1919,1928 **** "* { rtx ops[3]; ! char* add_insn; ! char* inc_insn; ! char* incb_mem; ! char* inch_mem; HOST_WIDE_INT val; if (which_alternative > 2) --- 1908,1917 ---- "* { rtx ops[3]; ! const char* add_insn; ! const char* inc_insn; ! const char* incb_mem; ! const char* inch_mem; HOST_WIDE_INT val; if (which_alternative > 2) *************** *** 1966,1972 **** } else { ! ops[1] = gen_rtx (CONST_INT, VOIDmode, - val); add_insn = \"subd\\t%1\"; inc_insn = \"dex\"; incb_mem = \"dec\\t%b1\"; --- 1955,1961 ---- } else { ! ops[1] = GEN_INT (- val); add_insn = \"subd\\t%1\"; inc_insn = \"dex\"; incb_mem = \"dec\\t%b1\"; *************** *** 2013,2022 **** }") (define_split ! [(set (match_operand:SI 0 "register_operand" "=D,u") ! (plus:SI (match_operand:SI 1 "register_operand" "%0,0") (match_operand:SI 2 "const_int_operand" ""))) ! (clobber (match_scratch:HI 3 "=X,d"))] "reload_completed && z_replacement_completed == 2 && ((INTVAL (operands[2]) & 0x0FFFF) == 0)" [(set (match_dup 5) (match_dup 6)) --- 2002,2011 ---- }") (define_split ! [(set (match_operand:SI 0 "register_operand" "") ! (plus:SI (match_operand:SI 1 "register_operand" "") (match_operand:SI 2 "const_int_operand" ""))) ! (clobber (match_scratch:HI 3 ""))] "reload_completed && z_replacement_completed == 2 && ((INTVAL (operands[2]) & 0x0FFFF) == 0)" [(set (match_dup 5) (match_dup 6)) *************** *** 2035,2043 **** ") (define_split ! [(set (match_operand:SI 0 "register_operand" "=D") ! (plus:SI (match_operand:SI 1 "register_operand" "%0") ! (match_operand:SI 2 "general_operand" "mui"))) (clobber (match_scratch:HI 3 "=X"))] "reload_completed && z_replacement_completed == 2 && (GET_CODE (operands[2]) != CONST_INT || --- 2024,2032 ---- ") (define_split ! [(set (match_operand:SI 0 "register_operand" "") ! (plus:SI (match_operand:SI 1 "register_operand" "") ! (match_operand:SI 2 "general_operand" ""))) (clobber (match_scratch:HI 3 "=X"))] "reload_completed && z_replacement_completed == 2 && (GET_CODE (operands[2]) != CONST_INT || *************** *** 2099,2134 **** } }") - (define_split /* "*addhi3_strict_low_part" */ - [(set (strict_low_part (match_operand:QI 0 "register_operand" "+dxy")) - (plus:QI (match_operand:QI 1 "register_operand" "") - (match_operand:QI 2 "general_operand" "")))] - "0 && z_replacement_completed == 2" - [(set (match_dup 0) - (plus:QI (match_dup 1) (match_dup 2)))] - "") - - (define_split /* "*addhi3_strict_low_part" */ - [(set (match_operand:HI 0 "register_operand" "=dA") - (plus:HI (match_operand:HI 1 "register_operand" "%0") - (match_operand:HI 2 "general_operand" ""))) - (clobber (match_scratch:HI 3 ""))] - "0 && z_replacement_completed == 2 && !SP_REG_P (operands[0])" - [(set (match_dup 0) - (plus:HI (match_dup 1) (match_dup 2)))] - "") - (define_insn "*addhi3_68hc12" ! [(set (match_operand:HI 0 "register_operand" "=*d,A*w,A*w,A") ! (plus:HI (match_operand:HI 1 "register_operand" "%0,0,Aw,0") ! (match_operand:HI 2 "general_operand" "imA*wu,id,id,!muA")))] "TARGET_M6812" "* { int val; const char* insn_code; ! if (which_alternative >= 3) { if (A_REG_P (operands[2])) { --- 2088,2104 ---- } }") (define_insn "*addhi3_68hc12" ! [(set (match_operand:HI 0 "register_operand" "=xy,d,xy*z*w,xy*z*w,xy*z") ! (plus:HI (match_operand:HI 1 "register_operand" "%0,0,0,xy*zw,0") ! (match_operand:HI 2 "general_operand" "N,im*A*wu,id,id,!mu*A")))] "TARGET_M6812" "* { int val; const char* insn_code; ! if (which_alternative >= 4) { if (A_REG_P (operands[2])) { *************** *** 2169,2175 **** else val = 1000; ! if (val != -1 || val != 1 || !rtx_equal_p (operands[0], operands[1])) { m68hc11_notice_keep_cc (operands[0]); switch (REGNO (operands[0])) --- 2139,2145 ---- else val = 1000; ! if ((val != -1 && val != 1) || !rtx_equal_p (operands[0], operands[1])) { m68hc11_notice_keep_cc (operands[0]); switch (REGNO (operands[0])) *************** *** 2200,2206 **** } /* For X and Y increment, the flags are not complete. Only the Z flag ! is updated. For SP increment, flags are not changed. */ if (SP_REG_P (operands[0])) { cc_status = cc_prev_status; --- 2170,2176 ---- } /* For X and Y increment, the flags are not complete. Only the Z flag ! is updated. For SP increment, flags are not changed. */ if (SP_REG_P (operands[0])) { cc_status = cc_prev_status; *************** *** 2242,2255 **** { HOST_WIDE_INT val; if (GET_CODE (operands[2]) == CONST_INT && (val = INTVAL (operands[2])) != 0 && (CONST_OK_FOR_LETTER_P (val, 'P') || (val > 0 && val <= 8))) { - if (optimize && Y_REG_P (operands[3]) - && dead_register_here (insn, gen_rtx (REG, HImode, HARD_X_REGNUM))) - operands[3] = gen_rtx (REG, HImode, HARD_X_REGNUM); while (val > 1 || val < -1) { if (val > 0) --- 2212,2226 ---- { HOST_WIDE_INT val; + if (optimize && Y_REG_P (operands[3]) + && dead_register_here (insn, gen_rtx (REG, HImode, HARD_X_REGNUM))) + operands[3] = gen_rtx (REG, HImode, HARD_X_REGNUM); + if (GET_CODE (operands[2]) == CONST_INT && (val = INTVAL (operands[2])) != 0 && (CONST_OK_FOR_LETTER_P (val, 'P') || (val > 0 && val <= 8))) { while (val > 1 || val < -1) { if (val > 0) *************** *** 2283,2313 **** return \"\"; } ! /* Need to transfer to SP to IY and then to D register. ! Register IY is lost, this is specified by the (clobber) statement. */ output_asm_insn (\"ts%3\", operands); ! output_asm_insn (\"xgd%3\", operands); ! output_asm_insn (\"addd\\t%2\", operands); ! output_asm_insn (\"xgd%3\", operands); /* The status flags correspond to the addd. xgdy and tys do not modify the flags. */ return \"t%3s\"; }") - ;; - ;; Translate d = d + d into d = d << 1 - ;; We have to do this because adding a register to itself is not possible. - ;; ??? It's not clear whether this is really necessary. - ;; - (define_split - [(set (match_operand:HI 0 "hard_reg_operand" "=dA") - (plus:HI (match_dup 0) - (match_dup 0)))] - "reload_completed" - [(set (match_dup 0) (ashift:HI (match_dup 0) (const_int 1)))] - "") - (define_insn "*addhi3" [(set (match_operand:HI 0 "hard_reg_operand" "=A,d,!A,d*A,!d*A") (plus:HI (match_operand:HI 1 "general_operand" "%0,0,0,0,0") --- 2254,2282 ---- return \"\"; } ! /* Need to transfer to SP to X/Y and then to D register. ! Register X/Y is lost, this is specified by the (clobber) statement. */ output_asm_insn (\"ts%3\", operands); ! if (GET_CODE (operands[2]) == CONST_INT ! && ((val = INTVAL (operands[2]) >= 0 && val < 0x100)) ! && dead_register_here (insn, gen_rtx (REG, HImode, HARD_D_REGNUM))) ! { ! output_asm_insn (\"ldab\\t%2\", operands); ! output_asm_insn (\"ab%3\", operands); ! CC_STATUS_INIT; ! } ! else ! { ! output_asm_insn (\"xgd%3\", operands); ! output_asm_insn (\"addd\\t%2\", operands); ! output_asm_insn (\"xgd%3\", operands); ! } /* The status flags correspond to the addd. xgdy and tys do not modify the flags. */ return \"t%3s\"; }") (define_insn "*addhi3" [(set (match_operand:HI 0 "hard_reg_operand" "=A,d,!A,d*A,!d*A") (plus:HI (match_operand:HI 1 "general_operand" "%0,0,0,0,0") *************** *** 2317,2323 **** { const char* insn_code; int val; - extern rtx ix_reg; if (D_REG_P (operands[0]) && SP_REG_P (operands[2])) { --- 2286,2291 ---- *************** *** 2328,2334 **** if (GET_CODE (operands[2]) != CONST_INT) { /* Adding to an address register or with another/same register ! is not possible. This must be replaced. */ if (A_REG_P (operands[0]) || H_REG_P (operands[2])) return \"#\"; --- 2296,2302 ---- if (GET_CODE (operands[2]) != CONST_INT) { /* Adding to an address register or with another/same register ! is not possible. This must be replaced. */ if (A_REG_P (operands[0]) || H_REG_P (operands[2])) return \"#\"; *************** *** 2424,2430 **** ;; ??? It's not clear whether this is really necessary. ;; (define_split ! [(set (match_operand:QI 0 "hard_reg_operand" "=dA") (plus:QI (match_dup 0) (match_dup 0)))] "0 && reload_completed" --- 2392,2398 ---- ;; ??? It's not clear whether this is really necessary. ;; (define_split ! [(set (match_operand:QI 0 "hard_reg_operand" "") (plus:QI (match_dup 0) (match_dup 0)))] "0 && reload_completed" *************** *** 2531,2553 **** "") (define_insn "*subsi3" ! [(set (match_operand:SI 0 "register_operand" "=D,D") ! (minus:SI (match_operand:SI 1 "general_operand" "0,!mui") ! (match_operand:SI 2 "general_operand" "!mui,!D"))) ! (clobber (match_scratch:HI 3 "=X,X"))] "" "#") (define_insn "*subsi3_zero_extendhi" [(set (match_operand:SI 0 "register_operand" "=D") (minus:SI (match_operand:SI 1 "register_operand" "0") ! (zero_extend:SI (match_operand:HI 2 "general_operand" "d!mui")))) (clobber (match_scratch:HI 3 "=X"))] "" "* { rtx ops[2]; ops[0] = gen_label_rtx (); output_asm_insn (\"subd\\t%2\", operands); output_asm_insn (\"bcc\\t%l0\", ops); --- 2499,2539 ---- "") (define_insn "*subsi3" ! [(set (match_operand:SI 0 "register_operand" "=D,D,D,D,!u") ! (minus:SI (match_operand:SI 1 "general_operand" "0,mi,0,!u,0") ! (match_operand:SI 2 "general_operand" "mi,D,!u,D,!mui"))) ! (clobber (match_scratch:HI 3 "=X,X,X,X,d"))] "" "#") (define_insn "*subsi3_zero_extendhi" [(set (match_operand:SI 0 "register_operand" "=D") (minus:SI (match_operand:SI 1 "register_operand" "0") ! (zero_extend:SI (match_operand:HI 2 "general_operand" "dmui*A")))) (clobber (match_scratch:HI 3 "=X"))] "" "* { rtx ops[2]; + if (A_REG_P (operands[2])) + { + if (TARGET_M6812) + ops[0] = gen_rtx (MEM, HImode, + gen_rtx (PRE_DEC, HImode, + gen_rtx (REG, HImode, HARD_SP_REGNUM))); + else + ops[0] = gen_rtx (REG, HImode, SOFT_TMP_REGNUM); + + ops[1] = operands[2]; + m68hc11_gen_movhi (insn, ops); + if (TARGET_M6812) + operands[2] = gen_rtx (MEM, HImode, + gen_rtx (POST_INC, HImode, + gen_rtx (REG, HImode, HARD_SP_REGNUM))); + else + operands[2] = gen_rtx (REG, HImode, SOFT_TMP_REGNUM); + } ops[0] = gen_label_rtx (); output_asm_insn (\"subd\\t%2\", operands); output_asm_insn (\"bcc\\t%l0\", ops); *************** *** 2560,2572 **** (define_insn "*subsi3_zero_extendqi" [(set (match_operand:SI 0 "register_operand" "=D") (minus:SI (match_operand:SI 1 "register_operand" "0") ! (zero_extend:SI (match_operand:QI 2 "general_operand" "!dmui")))) (clobber (match_scratch:HI 3 "=X"))] "" "* { rtx ops[2]; ops[0] = gen_label_rtx (); output_asm_insn (\"subb\\t%b2\", operands); output_asm_insn (\"sbca\\t#0\", operands); --- 2546,2565 ---- (define_insn "*subsi3_zero_extendqi" [(set (match_operand:SI 0 "register_operand" "=D") (minus:SI (match_operand:SI 1 "register_operand" "0") ! (zero_extend:SI (match_operand:QI 2 "general_operand" "dmui*A")))) (clobber (match_scratch:HI 3 "=X"))] "" "* { rtx ops[2]; + if (A_REG_P (operands[2])) + { + ops[0] = gen_rtx (REG, HImode, SOFT_TMP_REGNUM); + ops[1] = operands[2]; + m68hc11_gen_movhi (insn, ops); + operands[2] = gen_rtx (REG, QImode, SOFT_TMP_REGNUM); + } ops[0] = gen_label_rtx (); output_asm_insn (\"subb\\t%b2\", operands); output_asm_insn (\"sbca\\t#0\", operands); *************** *** 2582,2590 **** ;; reg:QI 7 -> ccr reg:QI 5 -> A ;; (define_split /* "*subsi3" */ ! [(set (match_operand:SI 0 "register_operand" "=D") ! (minus:SI (match_operand:SI 1 "register_operand" "0") ! (match_operand:SI 2 "general_operand" "mui"))) (clobber (match_scratch:HI 3 "=X"))] "reload_completed && z_replacement_completed == 2 && X_REG_P (operands[1])" --- 2575,2583 ---- ;; reg:QI 7 -> ccr reg:QI 5 -> A ;; (define_split /* "*subsi3" */ ! [(set (match_operand:SI 0 "register_operand" "") ! (minus:SI (match_operand:SI 1 "register_operand" "") ! (match_operand:SI 2 "general_operand" ""))) (clobber (match_scratch:HI 3 "=X"))] "reload_completed && z_replacement_completed == 2 && X_REG_P (operands[1])" *************** *** 2601,2609 **** operands[4] = m68hc11_gen_lowpart (QImode, operands[4]);") (define_split /* "*subsi3" */ ! [(set (match_operand:SI 0 "register_operand" "=D") ! (minus:SI (match_operand:SI 1 "general_operand" "mui") ! (match_operand:SI 2 "register_operand" "D"))) (clobber (match_scratch:HI 3 "=X"))] "reload_completed && z_replacement_completed == 2 && X_REG_P (operands[2])" --- 2594,2602 ---- operands[4] = m68hc11_gen_lowpart (QImode, operands[4]);") (define_split /* "*subsi3" */ ! [(set (match_operand:SI 0 "register_operand" "") ! (minus:SI (match_operand:SI 1 "general_operand" "") ! (match_operand:SI 2 "register_operand" ""))) (clobber (match_scratch:HI 3 "=X"))] "reload_completed && z_replacement_completed == 2 && X_REG_P (operands[2])" *************** *** 2620,2625 **** --- 2613,2639 ---- operands[5] = m68hc11_gen_highpart (QImode, operands[4]); operands[4] = m68hc11_gen_lowpart (QImode, operands[4]);") + (define_split /* "*subsi3" */ + [(set (match_operand:SI 0 "nonimmediate_operand" "") + (minus:SI (match_operand:SI 1 "general_operand" "") + (match_operand:SI 2 "general_operand" ""))) + (clobber (match_scratch:HI 3 "=d"))] + "reload_completed && z_replacement_completed == 2 + && !X_REG_P (operands[0])" + [(set (match_dup 3) (match_dup 4)) + (set (match_dup 3) (minus:HI (match_dup 3) (match_dup 5))) + (set (match_dup 4) (match_dup 3)) + (set (match_dup 3) (match_dup 6)) + (set (reg:QI 6) (minus:QI (minus:QI (reg:QI 7) (reg:QI 6)) (match_dup 7))) + (set (reg:QI 5) (minus:QI (minus:QI (reg:QI 7) (reg:QI 5)) (match_dup 8))) + (set (match_dup 6) (match_dup 3))] + "operands[4] = m68hc11_gen_lowpart (HImode, operands[1]); + operands[5] = m68hc11_gen_lowpart (HImode, operands[2]); + operands[6] = m68hc11_gen_highpart (HImode, operands[1]); + operands[7] = m68hc11_gen_highpart (HImode, operands[2]); + operands[8] = m68hc11_gen_highpart (QImode, operands[7]); + operands[7] = m68hc11_gen_lowpart (QImode, operands[7]);") + ;; ;; - 16-bit Subtract. ;; *************** *** 2628,2647 **** (minus:HI (match_operand:HI 1 "register_operand" "0") (match_operand:HI 2 "general_operand" "g")))] "" ! " ! { ! if (TARGET_M6811 && SP_REG_P (operands[0])) ! { ! emit_insn (gen_rtx (PARALLEL, VOIDmode, gen_rtvec (2, ! gen_rtx (SET, VOIDmode, ! operand0, ! gen_rtx (MINUS, HImode, ! operand1, operand2)), ! gen_rtx (CLOBBER, VOIDmode, ! gen_rtx (SCRATCH, HImode, 0))))); ! DONE; ! } ! }") ;; ;; Subtract from stack. This is better if we provide a pattern. --- 2642,2648 ---- (minus:HI (match_operand:HI 1 "register_operand" "0") (match_operand:HI 2 "general_operand" "g")))] "" ! "") ;; ;; Subtract from stack. This is better if we provide a pattern. *************** *** 2672,2698 **** if (D_REG_P (operands[3])) { ! output_asm_insn (\"xgdx\", operands); output_asm_insn (\"tsx\", operands); output_asm_insn (\"xgdx\", operands); output_asm_insn (\"subd\\t%2\", operands); output_asm_insn (\"xgdx\", operands); /* The status flags correspond to the addd. xgdx/y and tx/ys do not ! modify the flags. */ output_asm_insn (\"txs\", operands); ! return \"xgdx\"; } /* Need to transfer to SP to X,Y and then to D register. ! Register X,Y is lost, this is specified by the (clobber) statement. */ output_asm_insn (\"ts%3\", operands); output_asm_insn (\"xgd%3\", operands); output_asm_insn (\"subd\\t%2\", operands); output_asm_insn (\"xgd%3\", operands); /* The status flags correspond to the addd. xgdx/y and tx/ys do not ! modify the flags. */ return \"t%3s\"; }") --- 2673,2706 ---- if (D_REG_P (operands[3])) { ! int save_x; ! ! save_x = !dead_register_here (insn, ix_reg); ! if (save_x) ! output_asm_insn (\"xgdx\", operands); output_asm_insn (\"tsx\", operands); output_asm_insn (\"xgdx\", operands); output_asm_insn (\"subd\\t%2\", operands); output_asm_insn (\"xgdx\", operands); /* The status flags correspond to the addd. xgdx/y and tx/ys do not ! modify the flags. */ output_asm_insn (\"txs\", operands); ! if (save_x) ! return \"xgdx\"; ! else ! return \"\"; } /* Need to transfer to SP to X,Y and then to D register. ! Register X,Y is lost, this is specified by the (clobber) statement. */ output_asm_insn (\"ts%3\", operands); output_asm_insn (\"xgd%3\", operands); output_asm_insn (\"subd\\t%2\", operands); output_asm_insn (\"xgd%3\", operands); /* The status flags correspond to the addd. xgdx/y and tx/ys do not ! modify the flags. */ return \"t%3s\"; }") *************** *** 2705,2711 **** "* { /* Adding to an address register or with another/same register ! is not possible. This must be replaced. */ if (A_REG_P (operands[0]) || H_REG_P (operands[2])) return \"#\"; --- 2713,2719 ---- "* { /* Adding to an address register or with another/same register ! is not possible. This must be replaced. */ if (A_REG_P (operands[0]) || H_REG_P (operands[2])) return \"#\"; *************** *** 3029,3166 **** "#") (define_insn "andsi3" ! [(set (match_operand:SI 0 "register_operand" "=D") ! (and:SI (match_operand:SI 1 "register_operand" "%0") ! (match_operand:SI 2 "general_operand" "Dimu")))] "" "#") ! (define_insn "andhi3" ! [(set (match_operand:HI 0 "register_operand" "=d,!u,d,!*A") ! (and:HI (match_operand:HI 1 "register_operand" "%0,0,0,0") ! (match_operand:HI 2 "general_operand" "i,i,!um*A,!ium*A")))] "" "* { if (A_REG_P (operands[0]) || H_REG_P (operands[2])) return \"#\"; ! if (GET_CODE (operands[2]) == CONST_INT) { ! int val = INTVAL (operands[2]) & 0x0FFFF; ! char lowpart_zero = 0; ! char lowpart_unknown = 0; ! char highpart_zero = 0; ! char highpart_unknown = 0; ! if (val == 0xFFFF) ! { ! cc_status = cc_prev_status; ! return \"\"; ! } ! /* First, try to clear the low and high part. ! If that's possible, the second 'and' will give ! the good status flags and we can avoid a tsthi. */ ! if ((val & 0x0FF) == 0) ! { ! if (D_REG_P (operands[0])) ! output_asm_insn (\"clrb\", operands); ! else ! output_asm_insn (\"clr\\t%b0\", operands); ! lowpart_zero = 1; ! } ! if ((val & 0x0FF00) == 0) ! { ! if (D_REG_P (operands[0])) ! output_asm_insn (\"clra\", operands); ! else ! output_asm_insn (\"clr\\t%h0\", operands); ! highpart_zero = 1; ! } ! if ((val & 0x0FF) == 0x0FF) ! { ! lowpart_unknown = 1; ! } ! else if ((val & 0x0FF) != 0 && !H_REG_P (operands[0])) ! { ! rtx ops[2]; ! ops[0] = operands[0]; ! ops[1] = gen_rtx (CONST_INT, VOIDmode, (~val) & 0x0FF); ! output_asm_insn (\"bclr\\t%b0, %1\", ops); ! } ! else if ((val & 0x0FF) != 0) ! { ! output_asm_insn (\"andb\\t%b2\", operands); ! } ! if ((val & 0x0FF00) == 0x0FF00) ! { ! highpart_unknown = 1; ! } ! else if (((val & 0x0FF00) != 0) && !H_REG_P (operands[0])) ! { ! rtx ops[2]; ! ops[0] = operands[0]; ! ops[1] = gen_rtx (CONST_INT, VOIDmode, ((~val) & 0x0FF00) >> 8); ! output_asm_insn (\"bclr\\t%h0, %1\", ops); ! } ! else if ((val & 0x0FF00) != 0) ! { ! output_asm_insn (\"anda\\t%h2\", operands); ! } ! if (highpart_unknown || lowpart_unknown) ! CC_STATUS_INIT; ! else if (highpart_zero == 0 && lowpart_zero == 0) ! CC_STATUS_INIT; return \"\"; } ! CC_STATUS_INIT; ! return \"andb\\t%b2\\n\\tanda\\t%h2\"; }") ! (define_insn "andqi3" ! [(set (match_operand:QI 0 "register_operand" "=d,!u,d,d,?*A,?*A,!*q") ! (and:QI (match_operand:QI 1 "register_operand" "%0,0,0,0,0,0,0") ! (match_operand:QI 2 "general_operand" "i,i,!um,?*A,!ium,?*A*d,!ium*A")))] "" "* { if (A_REG_P (operands[0]) || H_REG_P (operands[2])) return \"#\"; ! if (GET_CODE (operands[2]) == CONST_INT) { ! int val = INTVAL (operands[2]) & 0x0FF; ! if (val == 0xFF) ! { ! cc_status = cc_prev_status; ! return \"\"; ! } ! if (val == 0) ! { ! if (D_REG_P (operands[0]) || DB_REG_P (operands[0])) ! return \"clrb\"; ! else if (DA_REG_P (operands[0])) ! return \"clra\"; ! else ! return \"clr\\t%b0\"; ! } ! if (!H_REG_P (operands[0])) ! { ! rtx ops[2]; ! ops[0] = operands[0]; ! ops[1] = gen_rtx (CONST_INT, VOIDmode, (~val) & 0x0FF); ! output_asm_insn (\"bclr\\t%b0, %b1\", ops); ! return \"\"; ! } } if (D_REG_P (operands[0]) || DB_REG_P (operands[0])) return \"andb\\t%b2\"; --- 3037,3278 ---- "#") (define_insn "andsi3" ! [(set (match_operand:SI 0 "register_operand" "=D,!u") ! (and:SI (match_operand:SI 1 "register_operand" "%0,0") ! (match_operand:SI 2 "general_operand" "Dimu,imu"))) ! (clobber (match_scratch:HI 3 "=X,d"))] "" "#") ! (define_expand "andhi3" ! [(set (match_operand:HI 0 "register_operand" "") ! (and:HI (match_operand:HI 1 "register_operand" "") ! (match_operand:HI 2 "general_operand" "")))] "" + "") + + (define_insn "*andhi3_mem" + [(set (match_operand:HI 0 "memory_operand" "=Q,R") + (and:HI (match_dup 0) + (match_operand:HI 1 "immediate_operand" "i,i"))) + (clobber (match_scratch:HI 2 "=xy,X"))] + "TARGET_RELAX && !TARGET_M6812" "* { + int val = INTVAL (operands[1]) & 0x0FFFF; + + if (val == 0x0ffff) + { + cc_status = cc_prev_status; + return \"\"; + } + + CC_STATUS_INIT; + + /* The bclr instruction uses an inverted mask. */ + operands[1] = GEN_INT ((~val) & 0x0FFFF); + + /* When destination is a global variable, generate a .relax instruction + and load the address in the clobber register. That load can be + eliminated by the linker if the address is in page0. */ + if (which_alternative == 0) + { + rtx ops[3]; + + ops[0] = operands[2]; + ops[1] = XEXP (operands[0], 0); + ops[2] = gen_label_rtx (); + output_asm_insn (\".relax\\t%l2\", ops); + m68hc11_gen_movhi (insn, ops); + if ((val & 0x0FF) != 0x0FF) + output_asm_insn (\"bclr\\t1,%2, %b1\", operands); + + if ((val & 0x0FF00) != 0x0FF00) + output_asm_insn (\"bclr\\t0,%2, %h1\", operands); + + ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", + CODE_LABEL_NUMBER (ops[2])); + return \"\"; + } + + if ((val & 0x0FF) != 0x0FF) + output_asm_insn (\"bclr\\t%b0, %b1\", operands); + + if ((val & 0x0FF00) != 0x0FF00) + output_asm_insn (\"bclr\\t%h0, %h1\", operands); + + return \"\"; + }") + + (define_insn "*andhi3_const" + [(set (match_operand:HI 0 "reg_or_some_mem_operand" "=R,d,?*A") + (and:HI (match_operand:HI 1 "reg_or_some_mem_operand" "%0,0,0") + (match_operand:HI 2 "const_int_operand" "")))] + "" + "* + { + int val = INTVAL (operands[2]) & 0x0FFFF; + int lowpart_zero = 0; + int highpart_zero = 0; + int lowpart_unknown = 0; + int highpart_unknown = 0; + if (A_REG_P (operands[0]) || H_REG_P (operands[2])) return \"#\"; ! if (val == 0x0ffff) { ! cc_status = cc_prev_status; ! return \"\"; ! } ! /* First, try to clear the low and high part. ! If that's possible, the second 'and' will give ! the good status flags and we can avoid a tsthi. */ ! if ((val & 0x0FF) == 0) ! { ! if (D_REG_P (operands[0])) ! output_asm_insn (\"clrb\", operands); ! else ! output_asm_insn (\"clr\\t%b0\", operands); ! lowpart_zero = 1; ! } ! if ((val & 0x0FF00) == 0) ! { ! if (D_REG_P (operands[0])) ! output_asm_insn (\"clra\", operands); ! else ! output_asm_insn (\"clr\\t%h0\", operands); ! highpart_zero = 1; ! } ! if ((val & 0x0FF) == 0x0FF) ! { ! lowpart_unknown = 1; ! } ! else if ((val & 0x0FF) != 0 && !H_REG_P (operands[0])) ! { ! rtx ops[2]; ! ops[0] = operands[0]; ! ops[1] = GEN_INT ((~val) & 0x0FF); ! output_asm_insn (\"bclr\\t%b0, %1\", ops); ! } ! else if ((val & 0x0FF) != 0) ! { ! output_asm_insn (\"andb\\t%b2\", operands); ! } ! if ((val & 0x0FF00) == 0x0FF00) ! { ! highpart_unknown = 1; ! } ! else if (((val & 0x0FF00) != 0) && !H_REG_P (operands[0])) ! { ! rtx ops[2]; ! ops[0] = operands[0]; ! ops[1] = GEN_INT (((~val) & 0x0FF00) >> 8); ! output_asm_insn (\"bclr\\t%h0, %1\", ops); ! } ! else if ((val & 0x0FF00) != 0) ! { ! output_asm_insn (\"anda\\t%h2\", operands); ! } ! if (highpart_unknown || lowpart_unknown) ! CC_STATUS_INIT; ! else if (highpart_zero == 0 && lowpart_zero == 0) ! CC_STATUS_INIT; ! return \"\"; ! }") ! ! (define_insn "*andhi3_gen" ! [(set (match_operand:HI 0 "register_operand" "=d,d,!*A") ! (and:HI (match_operand:HI 1 "register_operand" "%0,0,0") ! (match_operand:HI 2 "general_operand" "mi,!u*A,!um*A")))] ! "" ! "* ! { ! if (A_REG_P (operands[0]) || H_REG_P (operands[2])) ! return \"#\"; ! ! CC_STATUS_INIT; ! return \"anda\\t%h2\\n\\tandb\\t%b2\"; ! }") ! ! (define_expand "andqi3" ! [(set (match_operand:QI 0 "register_operand" "") ! (and:QI (match_operand:QI 1 "register_operand" "") ! (match_operand:QI 2 "general_operand" "")))] ! "" ! "") ! ! (define_insn "*andqi3_mem" ! [(set (match_operand:QI 0 "memory_operand" "=Q,R") ! (and:QI (match_dup 0) ! (match_operand:QI 1 "const_int_operand" "i,i"))) ! (clobber (match_scratch:HI 2 "=xy,X"))] ! "TARGET_RELAX && !TARGET_M6812" ! "* ! { ! int val = INTVAL (operands[1]) & 0x0FF; + if (val == 0x0ff) + { + cc_status = cc_prev_status; return \"\"; } ! /* The bclr instruction uses an inverted mask. */ ! operands[1] = GEN_INT ((~val) & 0x0FF); ! ! /* When destination is a global variable, generate a .relax instruction ! and load the address in the clobber register. That load can be ! eliminated by the linker if the address is in page0. */ ! if (which_alternative == 0) ! { ! rtx ops[3]; ! ! ops[0] = operands[2]; ! ops[1] = XEXP (operands[0], 0); ! ops[2] = gen_label_rtx (); ! output_asm_insn (\".relax\\t%l2\", ops); ! m68hc11_gen_movhi (insn, ops); ! output_asm_insn (\"bclr\\t0,%2, %1\", operands); ! ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", ! CODE_LABEL_NUMBER (ops[2])); ! return \"\"; ! } ! return \"bclr\\t%b0, %1\"; }") ! (define_insn "*andqi3_const" ! [(set (match_operand:QI 0 "reg_or_some_mem_operand" "=R,d,?*A*q") ! (and:QI (match_operand:QI 1 "reg_or_some_mem_operand" "%0,0,0") ! (match_operand:QI 2 "const_int_operand" "")))] "" "* { + int val = INTVAL (operands[2]) & 0x0FF; + if (A_REG_P (operands[0]) || H_REG_P (operands[2])) return \"#\"; ! if (val == 0x0ff) { ! cc_status = cc_prev_status; ! return \"\"; ! } ! if (!H_REG_P (operands[0])) ! { ! rtx ops[2]; ! ops[0] = operands[0]; ! ops[1] = GEN_INT ((~val) & 0x0FF); ! output_asm_insn (\"bclr\\t%b0, %b1\", ops); ! return \"\"; } if (D_REG_P (operands[0]) || DB_REG_P (operands[0])) return \"andb\\t%b2\"; *************** *** 3170,3175 **** --- 3282,3305 ---- fatal_insn (\"Invalid operand in the instruction\", insn); }") + (define_insn "*andqi3_gen" + [(set (match_operand:QI 0 "register_operand" "=d,d,d,?*A,?*A,!*q") + (and:QI (match_operand:QI 1 "register_operand" "%0,0,0,0,0,0") + (match_operand:QI 2 "general_operand" "mi,!u,?*A,!um,?*A*d,!um*A")))] + "" + "* + { + if (A_REG_P (operands[0]) || H_REG_P (operands[2])) + return \"#\"; + + if (D_REG_P (operands[0]) || DB_REG_P (operands[0])) + return \"andb\\t%b2\"; + else if (DA_REG_P (operands[0])) + return \"anda\\t%b2\"; + else + fatal_insn (\"Invalid operand in the instruction\", insn); + }") + ;;-------------------------------------------------------------------- ;;- Bit set or instructions. ;;-------------------------------------------------------------------- *************** *** 3183,3261 **** "#") (define_insn "iorsi3" ! [(set (match_operand:SI 0 "register_operand" "=D") ! (ior:SI (match_operand:SI 1 "register_operand" "%0") ! (match_operand:SI 2 "general_operand" "Dimu")))] "" "#") ! (define_insn "iorhi3" ! [(set (match_operand:HI 0 "register_operand" "=d,!u,d,!*A") ! (ior:HI (match_operand:HI 1 "register_operand" "%0,0,0,0") ! (match_operand:HI 2 "general_operand" "i,i,!um*A,!ium*A")))] "" "* { ! if (A_REG_P (operands[0]) || H_REG_P (operands[2])) ! return \"#\"; ! if (GET_CODE (operands[2]) == CONST_INT) { ! int val = INTVAL (operands[2]) & 0x0FFFF; ! if (val == 0) ! { ! cc_status = cc_prev_status; ! return \"\"; ! } if ((val & 0x0FF) != 0) ! { ! if (!H_REG_P (operands[0])) ! output_asm_insn (\"bset\\t%b0, %b2\", operands); ! else ! output_asm_insn (\"orab\\t%b2\", operands); ! } if ((val & 0x0FF00) != 0) ! { ! if (!H_REG_P (operands[0])) ! output_asm_insn (\"bset\\t%h0, %h2\", operands); ! else ! output_asm_insn (\"oraa\\t%h2\", operands); ! } ! CC_STATUS_INIT; return \"\"; } CC_STATUS_INIT; ! return \"orab\\t%b2\\n\\toraa\\t%h2\"; }") ! (define_insn "iorqi3" ! [(set (match_operand:QI 0 "register_operand" "=d,!u,d,d,?*A,?*A,!*q") ! (ior:QI (match_operand:QI 1 "register_operand" "%0,0,0,0,0,0,0") ! (match_operand:QI 2 "general_operand" "i,i,!um,!*A,!ium,?*A*d,!ium*A")))] "" "* { if (A_REG_P (operands[0]) || H_REG_P (operands[2])) return \"#\"; ! if (GET_CODE (operands[2]) == CONST_INT) { ! int val = INTVAL (operands[2]) & 0x0FF; ! if (val == 0) ! { ! cc_status = cc_prev_status; ! return \"\"; ! } ! if (!H_REG_P (operands[0])) ! { ! return \"bset\\t%b0, %2\"; ! } } if (D_REG_P (operands[0]) || DB_REG_P (operands[0])) return \"orab\\t%b2\"; else if (DA_REG_P (operands[0])) --- 3313,3507 ---- "#") (define_insn "iorsi3" ! [(set (match_operand:SI 0 "register_operand" "=D,!u") ! (ior:SI (match_operand:SI 1 "register_operand" "%0,0") ! (match_operand:SI 2 "general_operand" "Dimu,imu"))) ! (clobber (match_scratch:HI 3 "=X,d"))] "" "#") ! (define_expand "iorhi3" ! [(set (match_operand:HI 0 "register_operand" "") ! (ior:HI (match_operand:HI 1 "register_operand" "") ! (match_operand:HI 2 "general_operand" "")))] "" + "") + + (define_insn "*iorhi3_mem" + [(set (match_operand:HI 0 "memory_operand" "=Q,R") + (ior:HI (match_dup 0) + (match_operand:HI 1 "const_int_operand" ""))) + (clobber (match_scratch:HI 2 "=xy,X"))] + "TARGET_RELAX && !TARGET_M6812" "* { ! int val = INTVAL (operands[1]) & 0x0FFFF; ! if (val == 0) { ! cc_status = cc_prev_status; ! return \"\"; ! } ! CC_STATUS_INIT; ! if (which_alternative == 0) ! { ! rtx ops[3]; ! ops[0] = operands[2]; ! ops[1] = XEXP (operands[0], 0); ! ops[2] = gen_label_rtx (); ! output_asm_insn (\".relax\\t%l2\", ops); ! m68hc11_gen_movhi (insn, ops); if ((val & 0x0FF) != 0) ! output_asm_insn (\"bset\\t1,%2, %b1\", operands); if ((val & 0x0FF00) != 0) ! output_asm_insn (\"bset\\t0,%2, %h1\", operands); ! ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", ! CODE_LABEL_NUMBER (ops[2])); ! return \"\"; ! } ! if ((val & 0x0FF) != 0) ! output_asm_insn (\"bset\\t%b0, %b1\", operands); ! ! if ((val & 0x0FF00) != 0) ! output_asm_insn (\"bset\\t%h0, %h1\", operands); ! ! return \"\"; ! }") ! ! (define_insn "*iorhi3_const" ! [(set (match_operand:HI 0 "reg_or_some_mem_operand" "=R,d,?*A") ! (ior:HI (match_operand:HI 1 "reg_or_some_mem_operand" "%0,0,0") ! (match_operand:HI 2 "const_int_operand" "")))] ! "" ! "* ! { ! int val = INTVAL (operands[2]) & 0x0FFFF; ! ! if (A_REG_P (operands[0]) || H_REG_P (operands[2])) ! return \"#\"; ! ! if (val == 0) ! { ! cc_status = cc_prev_status; return \"\"; } + if ((val & 0x0FF) != 0) + { + if (!H_REG_P (operands[0])) + output_asm_insn (\"bset\\t%b0, %b2\", operands); + else + output_asm_insn (\"orab\\t%b2\", operands); + } + + if ((val & 0x0FF00) != 0) + { + if (!H_REG_P (operands[0])) + output_asm_insn (\"bset\\t%h0, %h2\", operands); + else + output_asm_insn (\"oraa\\t%h2\", operands); + } + CC_STATUS_INIT; ! return \"\"; }") ! (define_insn "*iorhi3_gen" ! [(set (match_operand:HI 0 "register_operand" "=d,d,!*A") ! (ior:HI (match_operand:HI 1 "register_operand" "%0,0,0") ! (match_operand:HI 2 "general_operand" "mi,!u*A,!um*A")))] "" "* { if (A_REG_P (operands[0]) || H_REG_P (operands[2])) return \"#\"; ! CC_STATUS_INIT; ! return \"oraa\\t%h2\\n\\torab\\t%b2\"; ! }") ! ! (define_expand "iorqi3" ! [(set (match_operand:QI 0 "register_operand" "") ! (ior:QI (match_operand:QI 1 "register_operand" "") ! (match_operand:QI 2 "general_operand" "")))] ! "" ! "") ! ! (define_insn "*iorqi3_mem" ! [(set (match_operand:QI 0 "memory_operand" "=Q,R") ! (ior:QI (match_dup 0) ! (match_operand:QI 1 "const_int_operand" ""))) ! (clobber (match_scratch:HI 2 "=xy,X"))] ! "TARGET_RELAX && !TARGET_M6812" ! "* ! { ! int val = INTVAL (operands[1]) & 0x0FF; ! ! if (val == 0) { ! cc_status = cc_prev_status; ! return \"\"; ! } ! if (which_alternative == 0) ! { ! rtx ops[3]; ! ops[0] = operands[2]; ! ops[1] = XEXP (operands[0], 0); ! ops[2] = gen_label_rtx (); ! output_asm_insn (\".relax\\t%l2\", ops); ! m68hc11_gen_movhi (insn, ops); ! output_asm_insn (\"bset\\t0,%2, %1\", operands); ! ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", ! CODE_LABEL_NUMBER (ops[2])); ! return \"\"; } + return \"bset\\t%b0, %1\"; + }") + + (define_insn "*iorqi3_const" + [(set (match_operand:QI 0 "reg_or_some_mem_operand" "=R,d,?*A*q") + (ior:QI (match_operand:QI 1 "reg_or_some_mem_operand" "%0,0,0") + (match_operand:QI 2 "const_int_operand" "")))] + "" + "* + { + int val = INTVAL (operands[2]) & 0x0FF; + + if (A_REG_P (operands[0]) || H_REG_P (operands[2])) + return \"#\"; + + if (val == 0) + { + cc_status = cc_prev_status; + return \"\"; + } + if (!H_REG_P (operands[0])) + { + return \"bset\\t%b0, %2\"; + } + + if (D_REG_P (operands[0]) || DB_REG_P (operands[0])) + return \"orab\\t%b2\"; + else if (DA_REG_P (operands[0])) + return \"oraa\\t%b2\"; + else + fatal_insn (\"Invalid operand in the instruction\", insn); + }") + + (define_insn "*iorqi3_gen" + [(set (match_operand:QI 0 "register_operand" "=d,d,d,?*A,?*A,!*q") + (ior:QI (match_operand:QI 1 "register_operand" "%0,0,0,0,0,0") + (match_operand:QI 2 "general_operand" "mi,!u,!*A,!um,?*A*d,!um*A")))] + "" + "* + { + if (A_REG_P (operands[0]) || H_REG_P (operands[2])) + return \"#\"; + if (D_REG_P (operands[0]) || DB_REG_P (operands[0])) return \"orab\\t%b2\"; else if (DA_REG_P (operands[0])) *************** *** 3264,3269 **** --- 3510,3516 ---- fatal_insn (\"Invalid operand in the instruction\", insn); }") + ;;-------------------------------------------------------------------- ;;- xor instructions. ;;-------------------------------------------------------------------- *************** *** 3277,3285 **** "#") (define_insn "xorsi3" ! [(set (match_operand:SI 0 "register_operand" "=D") ! (xor:SI (match_operand:SI 1 "register_operand" "%0") ! (match_operand:SI 2 "general_operand" "Dimu")))] "" "#") --- 3524,3533 ---- "#") (define_insn "xorsi3" ! [(set (match_operand:SI 0 "register_operand" "=D,!u") ! (xor:SI (match_operand:SI 1 "register_operand" "%0,0") ! (match_operand:SI 2 "general_operand" "Dimu,imu"))) ! (clobber (match_scratch:HI 3 "=X,d"))] "" "#") *************** *** 3325,3337 **** } CC_STATUS_INIT; ! return \"eorb\\t%b2\\n\\teora\\t%h2\"; }") (define_insn "xorqi3" [(set (match_operand:QI 0 "register_operand" "=d,d,d,?*A,?*A,!*q") (xor:QI (match_operand:QI 1 "register_operand" "%0,0,0,0,0,0") ! (match_operand:QI 2 "general_operand" "i,!um,!*A,!ium,?*A*d,!ium*A")))] "" "* { --- 3573,3585 ---- } CC_STATUS_INIT; ! return \"eora\\t%h2\\n\\teorb\\t%b2\"; }") (define_insn "xorqi3" [(set (match_operand:QI 0 "register_operand" "=d,d,d,?*A,?*A,!*q") (xor:QI (match_operand:QI 1 "register_operand" "%0,0,0,0,0,0") ! (match_operand:QI 2 "general_operand" "im,!u,!*A,!ium,?*A*d,!ium*A")))] "" "* { *************** *** 3368,3378 **** ;;-------------------------------------------------------------------- (define_insn "*logicalsi3_zexthi" ! [(set (match_operand:SI 0 "register_operand" "=D,D") (match_operator:SI 3 "m68hc11_logical_operator" [(zero_extend:SI ! (match_operand:HI 1 "general_operand" "imdA,!udimA")) ! (match_operand:SI 2 "general_operand" "Dimu,!Dimu")]))] "" "#") --- 3616,3626 ---- ;;-------------------------------------------------------------------- (define_insn "*logicalsi3_zexthi" ! [(set (match_operand:SI 0 "register_operand" "=D") (match_operator:SI 3 "m68hc11_logical_operator" [(zero_extend:SI ! (match_operand:HI 1 "general_operand" "imudA")) ! (match_operand:SI 2 "general_operand" "Dimu")]))] "" "#") *************** *** 3385,3396 **** "" "#") ! (define_split ! [(set (match_operand:SI 0 "register_operand" "=D,D") (match_operator:SI 3 "m68hc11_logical_operator" [(zero_extend:SI ! (match_operand:QI 1 "general_operand" "dxy,imu")) ! (match_operand:SI 2 "general_operand" "imuD,imuD")]))] "z_replacement_completed == 2" [(set (reg:QI A_REGNUM) (match_dup 4)) (set (reg:QI D_REGNUM) (match_dup 7)) --- 3633,3644 ---- "" "#") ! (define_split /* logicalsi3_zextqi */ ! [(set (match_operand:SI 0 "register_operand" "") (match_operator:SI 3 "m68hc11_logical_operator" [(zero_extend:SI ! (match_operand:QI 1 "general_operand" "")) ! (match_operand:SI 2 "general_operand" "")]))] "z_replacement_completed == 2" [(set (reg:QI A_REGNUM) (match_dup 4)) (set (reg:QI D_REGNUM) (match_dup 7)) *************** *** 3412,3426 **** operands[5] = m68hc11_gen_lowpart (QImode, operands[4]); operands[4] = m68hc11_gen_highpart (QImode, operands[4]); operands[6] = m68hc11_gen_highpart (HImode, operands[2]); ! } ") ! (define_split ! [(set (match_operand:SI 0 "register_operand" "=D,D") (match_operator:SI 3 "m68hc11_logical_operator" [(zero_extend:SI ! (match_operand:HI 1 "general_operand" "dA,imu")) ! (match_operand:SI 2 "general_operand" "imuD,imuD")]))] "reload_completed" [(set (reg:HI D_REGNUM) (match_dup 4)) (set (reg:HI D_REGNUM) (match_op_dup 3 [(reg:HI D_REGNUM) (match_dup 5)])) --- 3660,3680 ---- operands[5] = m68hc11_gen_lowpart (QImode, operands[4]); operands[4] = m68hc11_gen_highpart (QImode, operands[4]); operands[6] = m68hc11_gen_highpart (HImode, operands[2]); ! } ! /* For an AND, make sure the high 24-bit part is cleared. */ ! if (GET_CODE (operands[3]) == AND) ! { ! operands[4] = const0_rtx; ! operands[6] = const0_rtx; ! } ") ! (define_split /* logicalsi3_zexthi */ ! [(set (match_operand:SI 0 "register_operand" "") (match_operator:SI 3 "m68hc11_logical_operator" [(zero_extend:SI ! (match_operand:HI 1 "general_operand" "")) ! (match_operand:SI 2 "general_operand" "")]))] "reload_completed" [(set (reg:HI D_REGNUM) (match_dup 4)) (set (reg:HI D_REGNUM) (match_op_dup 3 [(reg:HI D_REGNUM) (match_dup 5)])) *************** *** 3438,3447 **** operands[4] = operands[1]; operands[5] = m68hc11_gen_lowpart (HImode, operands[2]); operands[6] = m68hc11_gen_highpart (HImode, operands[2]); ! } ") ! (define_insn "*logicallhi3_zexthi_ashift8" [(set (match_operand:HI 0 "register_operand" "=d") (match_operator:HI 3 "m68hc11_logical_operator" [(zero_extend:HI --- 3692,3706 ---- operands[4] = operands[1]; operands[5] = m68hc11_gen_lowpart (HImode, operands[2]); operands[6] = m68hc11_gen_highpart (HImode, operands[2]); ! } ! /* For an AND, make sure the high 16-bit part is cleared. */ ! if (GET_CODE (operands[3]) == AND) ! { ! operands[6] = const0_rtx; ! } ") ! (define_insn "*logicalhi3_zexthi_ashift8" [(set (match_operand:HI 0 "register_operand" "=d") (match_operator:HI 3 "m68hc11_logical_operator" [(zero_extend:HI *************** *** 3461,3472 **** "" "#") ! (define_split ! [(set (match_operand:HI 0 "register_operand" "=d") (match_operator:HI 3 "m68hc11_logical_operator" [(zero_extend:HI ! (match_operand:QI 1 "general_operand" "imud")) ! (match_operand:HI 2 "general_operand" "dimu")]))] "z_replacement_completed == 2" [(set (reg:QI B_REGNUM) (match_dup 6)) (set (reg:QI A_REGNUM) (match_dup 4)) --- 3720,3731 ---- "" "#") ! (define_split /* logicalhi3_zexthi */ ! [(set (match_operand:HI 0 "register_operand" "") (match_operator:HI 3 "m68hc11_logical_operator" [(zero_extend:HI ! (match_operand:QI 1 "general_operand" "")) ! (match_operand:HI 2 "general_operand" "")]))] "z_replacement_completed == 2" [(set (reg:QI B_REGNUM) (match_dup 6)) (set (reg:QI A_REGNUM) (match_dup 4)) *************** *** 3488,3502 **** else operands[6] = operands[1]; } ") ! (define_split ! [(set (match_operand:HI 0 "register_operand" "=d") (match_operator:HI 3 "m68hc11_logical_operator" [(zero_extend:HI ! (match_operand:QI 1 "general_operand" "imud")) (ashift:HI ! (match_operand:HI 2 "general_operand" "dimu") (const_int 8))]))] "z_replacement_completed == 2" [(set (reg:QI A_REGNUM) (match_dup 4)) --- 3747,3766 ---- else operands[6] = operands[1]; } + /* For an AND, make sure the high 8-bit part is cleared. */ + if (GET_CODE (operands[3]) == AND) + { + operands[4] = const0_rtx; + } ") ! (define_split /* logicalhi3_zexthi_ashift8 */ ! [(set (match_operand:HI 0 "register_operand" "") (match_operator:HI 3 "m68hc11_logical_operator" [(zero_extend:HI ! (match_operand:QI 1 "general_operand" "")) (ashift:HI ! (match_operand:HI 2 "general_operand" "") (const_int 8))]))] "z_replacement_completed == 2" [(set (reg:QI A_REGNUM) (match_dup 4)) *************** *** 3522,3543 **** ") (define_insn "*logicalsi3_silshr16" ! [(set (match_operand:SI 0 "register_operand" "=D,D") (match_operator:SI 3 "m68hc11_logical_operator" [(lshiftrt:SI ! (match_operand:SI 1 "general_operand" "uim,?D") (const_int 16)) ! (match_operand:SI 2 "general_operand" "uim,0")]))] "" "#") ! (define_split ! [(set (match_operand:SI 0 "register_operand" "=D,D") (match_operator:SI 3 "m68hc11_logical_operator" [(lshiftrt:SI ! (match_operand:SI 1 "general_operand" "uim,?D") (const_int 16)) ! (match_operand:SI 2 "general_operand" "uim,0")]))] "reload_completed" [(set (reg:HI D_REGNUM) (match_dup 4)) (set (reg:HI D_REGNUM) (match_op_dup 3 [(reg:HI D_REGNUM) (match_dup 5)])) --- 3786,3807 ---- ") (define_insn "*logicalsi3_silshr16" ! [(set (match_operand:SI 0 "register_operand" "=D,D,D") (match_operator:SI 3 "m68hc11_logical_operator" [(lshiftrt:SI ! (match_operand:SI 1 "general_operand" "uim,uim,?D") (const_int 16)) ! (match_operand:SI 2 "general_operand" "uim,0,0")]))] "" "#") ! (define_split /* logicalsi3_silshr16 */ ! [(set (match_operand:SI 0 "register_operand" "") (match_operator:SI 3 "m68hc11_logical_operator" [(lshiftrt:SI ! (match_operand:SI 1 "general_operand" "") (const_int 16)) ! (match_operand:SI 2 "general_operand" "")]))] "reload_completed" [(set (reg:HI D_REGNUM) (match_dup 4)) (set (reg:HI D_REGNUM) (match_op_dup 3 [(reg:HI D_REGNUM) (match_dup 5)])) *************** *** 3555,3560 **** --- 3819,3829 ---- } PUT_MODE (operands[3], HImode); + /* For an AND, make sure the high 16-bit part is cleared. */ + if (GET_CODE (operands[3]) == AND) + { + operands[6] = const0_rtx; + } ") (define_insn "*logicalsi3_silshl16" *************** *** 3567,3587 **** "" "#") ! (define_split ! [(set (match_operand:SI 0 "register_operand" "=D,D") (match_operator:SI 3 "m68hc11_logical_operator" [(ashift:SI ! (match_operand:SI 1 "general_operand" "uim,?D") (const_int 16)) ! (match_operand:SI 2 "general_operand" "0,0")]))] "z_replacement_completed == 2" ! [(parallel [(set (reg:HI D_REGNUM) (reg:HI X_REGNUM)) ! (set (reg:HI X_REGNUM) (reg:HI D_REGNUM))]) ! (set (reg:HI D_REGNUM) (match_op_dup 3 [(reg:HI D_REGNUM) (match_dup 4)])) ! (parallel [(set (reg:HI D_REGNUM) (reg:HI X_REGNUM)) ! (set (reg:HI X_REGNUM) (reg:HI D_REGNUM))])] "operands[4] = m68hc11_gen_lowpart (HImode, operands[1]); ! PUT_MODE (operands[3], HImode);") ;;-------------------------------------------------------------------- --- 3836,3859 ---- "" "#") ! (define_split /* logicalsi3_silshl16 */ ! [(set (match_operand:SI 0 "register_operand" "") (match_operator:SI 3 "m68hc11_logical_operator" [(ashift:SI ! (match_operand:SI 1 "general_operand" "") (const_int 16)) ! (match_operand:SI 2 "general_operand" "")]))] "z_replacement_completed == 2" ! [(set (reg:HI X_REGNUM) (match_op_dup 3 [(reg:HI X_REGNUM) (match_dup 4)])) ! (set (reg:HI D_REGNUM) (match_dup 5))] "operands[4] = m68hc11_gen_lowpart (HImode, operands[1]); ! PUT_MODE (operands[3], HImode); ! ! if (GET_CODE (operands[3]) == AND) ! operands[5] = const0_rtx; ! else ! operands[5] = gen_rtx (REG, HImode, HARD_D_REGNUM); ! ") ;;-------------------------------------------------------------------- *************** *** 3591,3619 **** ;; 16-bit logical patterns. ;;-------------------------------------------------------------------- ! ;; Split 64-bit logical operations (AND, OR, XOR). (define_split ! [(set (match_operand:DI 0 "reg_or_some_mem_operand" "=mu") (match_operator:DI 4 "m68hc11_logical_operator" ! [(match_operand:DI 1 "reg_or_some_mem_operand" "%imu") ! (match_operand:DI 2 "general_operand" "imu")])) ! (clobber (match_scratch:HI 3 "=d"))] "reload_completed" [(const_int 0)] "m68hc11_split_logical (SImode, GET_CODE (operands[4]), operands); DONE;") ! ;; Split 32-bit logical operations (AND, OR, XOR). (define_split ! [(set (match_operand:SI 0 "register_operand" "=D") (match_operator:SI 3 "m68hc11_logical_operator" ! [(match_operand:SI 1 "register_operand" "%0") ! (match_operand:SI 2 "general_operand" "Dimu")]))] ! "reload_completed" [(const_int 0)] "m68hc11_split_logical (HImode, GET_CODE (operands[3]), operands); DONE;") ;;-------------------------------------------------------------------- ;; 16-bit Arithmetic and logical operations on X and Y: ;; --- 3863,3903 ---- ;; 16-bit logical patterns. ;;-------------------------------------------------------------------- ! ;; Split 64-bit logical operations: anddi3, iordi3, xordi3 (define_split ! [(set (match_operand:DI 0 "reg_or_some_mem_operand" "") (match_operator:DI 4 "m68hc11_logical_operator" ! [(match_operand:DI 1 "reg_or_some_mem_operand" "") ! (match_operand:DI 2 "general_operand" "")])) ! (clobber (match_scratch:HI 3 ""))] "reload_completed" [(const_int 0)] "m68hc11_split_logical (SImode, GET_CODE (operands[4]), operands); DONE;") ! ;; Split 32-bit logical operations: andsi3, iorsi3, xorsi3 (define_split ! [(set (match_operand:SI 0 "register_operand" "") (match_operator:SI 3 "m68hc11_logical_operator" ! [(match_operand:SI 1 "register_operand" "") ! (match_operand:SI 2 "general_operand" "")]))] ! "0 && reload_completed" [(const_int 0)] "m68hc11_split_logical (HImode, GET_CODE (operands[3]), operands); DONE;") + ;; Split 32-bit logical operations: andsi3, iorsi3, xorsi3 + (define_split + [(set (match_operand:SI 0 "reg_or_some_mem_operand" "") + (match_operator:SI 4 "m68hc11_logical_operator" + [(match_operand:SI 1 "reg_or_some_mem_operand" "") + (match_operand:SI 2 "general_operand" "")])) + (clobber (match_scratch:HI 3 ""))] + "reload_completed" + [(const_int 0)] + "m68hc11_split_logical (HImode, GET_CODE (operands[4]), operands); + DONE;") + ;;-------------------------------------------------------------------- ;; 16-bit Arithmetic and logical operations on X and Y: ;; *************** *** 3634,3646 **** ;; ;; (define_split ! [(set (match_operand:HI 0 "hard_addr_reg_operand" "=A") (match_operator:HI 3 "m68hc11_arith_operator" ! [(match_operand:HI 1 "hard_addr_reg_operand" "0") ! (match_operand:HI 2 "general_operand" "dAuim")]))] "z_replacement_completed == 2 /* If we are adding a small constant to X or Y, it's ! better to use one or several inx/iny instructions. */ && !(GET_CODE (operands[3]) == PLUS && ((TARGET_M6812 && (immediate_operand (operands[2], HImode) --- 3918,3930 ---- ;; ;; (define_split ! [(set (match_operand:HI 0 "hard_addr_reg_operand" "") (match_operator:HI 3 "m68hc11_arith_operator" ! [(match_operand:HI 1 "hard_addr_reg_operand" "") ! (match_operand:HI 2 "general_operand" "")]))] "z_replacement_completed == 2 /* If we are adding a small constant to X or Y, it's ! better to use one or several inx/iny instructions. */ && !(GET_CODE (operands[3]) == PLUS && ((TARGET_M6812 && (immediate_operand (operands[2], HImode) *************** *** 3656,3662 **** (parallel [(set (reg:HI D_REGNUM) (match_dup 0)) (set (match_dup 0) (reg:HI D_REGNUM))])] " ! /* Save the operand2 in a temporary location and use it. */ if ((H_REG_P (operands[2]) || reg_mentioned_p (operands[0], operands[2])) && !(SP_REG_P (operands[2]) && GET_CODE (operands[3]) == PLUS)) --- 3940,3946 ---- (parallel [(set (reg:HI D_REGNUM) (match_dup 0)) (set (match_dup 0) (reg:HI D_REGNUM))])] " ! /* Save the operand2 in a temporary location and use it. */ if ((H_REG_P (operands[2]) || reg_mentioned_p (operands[0], operands[2])) && !(SP_REG_P (operands[2]) && GET_CODE (operands[3]) == PLUS)) *************** *** 3684,3696 **** ") (define_split ! [(set (match_operand:HI 0 "hard_addr_reg_operand" "=A") (match_operator:HI 3 "m68hc11_arith_operator" ! [(match_operand:HI 1 "general_operand" "mu") ! (match_operand:HI 2 "general_operand" "dAuim")]))] "z_replacement_completed == 2 /* If we are adding a small constant to X or Y, it's ! better to use one or several inx/iny instructions. */ && !(GET_CODE (operands[3]) == PLUS && ((TARGET_M6812 && (immediate_operand (operands[2], HImode) --- 3968,3980 ---- ") (define_split ! [(set (match_operand:HI 0 "hard_addr_reg_operand" "") (match_operator:HI 3 "m68hc11_arith_operator" ! [(match_operand:HI 1 "general_operand" "") ! (match_operand:HI 2 "general_operand" "")]))] "z_replacement_completed == 2 /* If we are adding a small constant to X or Y, it's ! better to use one or several inx/iny instructions. */ && !(GET_CODE (operands[3]) == PLUS && ((TARGET_M6812 && (immediate_operand (operands[2], HImode) *************** *** 3720,3740 **** ;; The shift operators are special and must not appear here. ;; (define_split ! [(set (match_operand:HI 0 "d_register_operand" "=d") (match_operator:HI 3 "m68hc11_non_shift_operator" ! [(match_operand:HI 1 "d_register_operand" "%0") ! (match_operand:HI 2 "hard_reg_operand" "*d*A")]))] ! "z_replacement_completed == 2 && !SP_REG_P (operands[2])" [(set (match_dup 4) (match_dup 2)) (set (match_dup 0) (match_op_dup 3 [(match_dup 0) (match_dup 4)]))] "operands[4] = gen_rtx (REG, HImode, SOFT_TMP_REGNUM);") ;;-------------------------------------------------------------------- ;; 16-bit Unary operations on X and Y: ;; ;; NOT NEG ;; ! ;; Operations on X or Y registers are split here. Instructions are ;; changed into: ;; - xgdx/xgdy instruction pattern, ;; - The same operation on register D, --- 4004,4046 ---- ;; The shift operators are special and must not appear here. ;; (define_split ! [(set (match_operand:HI 0 "d_register_operand" "") (match_operator:HI 3 "m68hc11_non_shift_operator" ! [(match_operand:HI 1 "d_register_operand" "") ! (match_operand:HI 2 "hard_reg_operand" "")]))] ! "TARGET_M6811 ! && z_replacement_completed == 2 && !SP_REG_P (operands[2])" [(set (match_dup 4) (match_dup 2)) (set (match_dup 0) (match_op_dup 3 [(match_dup 0) (match_dup 4)]))] "operands[4] = gen_rtx (REG, HImode, SOFT_TMP_REGNUM);") + ;; + ;; For 68HC12, push the operand[2] value on the stack and do the + ;; logical/arithmetic operation with a pop. + ;; + (define_split + [(set (match_operand:HI 0 "d_register_operand" "") + (match_operator:HI 3 "m68hc11_non_shift_operator" + [(match_operand:HI 1 "d_register_operand" "") + (match_operand:HI 2 "hard_reg_operand" "")]))] + "TARGET_M6812 + && z_replacement_completed == 2 && !SP_REG_P (operands[2])" + [(set (match_dup 4) (match_dup 2)) + (set (match_dup 0) (match_op_dup 3 [(match_dup 0) (match_dup 5)]))] + "operands[4] = gen_rtx (MEM, HImode, + gen_rtx (PRE_DEC, HImode, + gen_rtx (REG, HImode, HARD_SP_REGNUM))); + operands[5] = gen_rtx (MEM, HImode, + gen_rtx (POST_INC, HImode, + gen_rtx (REG, HImode, HARD_SP_REGNUM))); + ") + ;;-------------------------------------------------------------------- ;; 16-bit Unary operations on X and Y: ;; ;; NOT NEG ;; ! ;; Operations on X or Y registers are split here. Instructions are ;; changed into: ;; - xgdx/xgdy instruction pattern, ;; - The same operation on register D, *************** *** 3748,3756 **** ;; (set (REG:HI X) (PLUS:HI (REG:HI X) (REG:HI X))) ;; (define_split ! [(set (match_operand:HI 0 "hard_addr_reg_operand" "=A") (match_operator:HI 2 "m68hc11_unary_operator" ! [(match_operand 1 "general_operand" "uim*d*A")]))] "z_replacement_completed == 2" [(set (match_dup 4) (match_dup 5)) (parallel [(set (reg:HI D_REGNUM) (match_dup 0)) --- 4054,4062 ---- ;; (set (REG:HI X) (PLUS:HI (REG:HI X) (REG:HI X))) ;; (define_split ! [(set (match_operand:HI 0 "hard_addr_reg_operand" "") (match_operator:HI 2 "m68hc11_unary_operator" ! [(match_operand 1 "general_operand" "")]))] "z_replacement_completed == 2" [(set (match_dup 4) (match_dup 5)) (parallel [(set (reg:HI D_REGNUM) (match_dup 0)) *************** *** 3764,3780 **** && !rtx_equal_p (operands[0], operands[1])) || reg_mentioned_p (operands[0], operands[1])) { ! /* Move to the destination register, before the xgdx. */ operands[4] = gen_rtx (REG, GET_MODE (operands[1]), REGNO (operands[0])); operands[5] = operands[1]; ! /* Apply the operation on D. */ operands[3] = gen_rtx (REG, GET_MODE (operands[1]), HARD_D_REGNUM); } else { ! /* Generate a copy to same register (nop). */ operands[4] = operands[5] = operands[0]; operands[3] = operands[1]; } --- 4070,4086 ---- && !rtx_equal_p (operands[0], operands[1])) || reg_mentioned_p (operands[0], operands[1])) { ! /* Move to the destination register, before the xgdx. */ operands[4] = gen_rtx (REG, GET_MODE (operands[1]), REGNO (operands[0])); operands[5] = operands[1]; ! /* Apply the operation on D. */ operands[3] = gen_rtx (REG, GET_MODE (operands[1]), HARD_D_REGNUM); } else { ! /* Generate a copy to same register (nop). */ operands[4] = operands[5] = operands[0]; operands[3] = operands[1]; } *************** *** 3790,3802 **** ;; AND OR XOR PLUS MINUS ASHIFT ASHIFTRT LSHIFTRT ROTATE ROTATERT ;; (define_split ! [(set (match_operand:QI 0 "hard_addr_reg_operand" "=xy") (match_operator:QI 3 "m68hc11_arith_operator" ! [(match_operand:QI 1 "hard_addr_reg_operand" "%0") ! (match_operand:QI 2 "general_operand" "dxyuim")]))] "z_replacement_completed == 2 /* Reject a (plus:QI (reg:QI X) (const_int 1|-1)) because the ! incqi pattern generates a better code. */ && !(GET_CODE (operands[3]) == PLUS && GET_CODE (operands[2]) == CONST_INT && (INTVAL (operands[2]) == 1 || INTVAL (operands[2]) == -1))" --- 4096,4108 ---- ;; AND OR XOR PLUS MINUS ASHIFT ASHIFTRT LSHIFTRT ROTATE ROTATERT ;; (define_split ! [(set (match_operand:QI 0 "hard_addr_reg_operand" "") (match_operator:QI 3 "m68hc11_arith_operator" ! [(match_operand:QI 1 "hard_addr_reg_operand" "") ! (match_operand:QI 2 "general_operand" "")]))] "z_replacement_completed == 2 /* Reject a (plus:QI (reg:QI X) (const_int 1|-1)) because the ! incqi pattern generates a better code. */ && !(GET_CODE (operands[3]) == PLUS && GET_CODE (operands[2]) == CONST_INT && (INTVAL (operands[2]) == 1 || INTVAL (operands[2]) == -1))" *************** *** 3812,3818 **** register appears in the source, we have to save the operand[2] value in a temporary location and then use that temp. Otherwise, it's ok and we generate a (set (D) (D)) that ! will result in a nop. */ if (H_REG_P (operands[2])) { operands[5] = gen_rtx (REG, HImode, SOFT_TMP_REGNUM); --- 4118,4124 ---- register appears in the source, we have to save the operand[2] value in a temporary location and then use that temp. Otherwise, it's ok and we generate a (set (D) (D)) that ! will result in a nop. */ if (H_REG_P (operands[2])) { operands[5] = gen_rtx (REG, HImode, SOFT_TMP_REGNUM); *************** *** 3845,3854 **** ;; The shift operators are special and must not appear here. ;; (define_split ! [(set (match_operand:QI 0 "d_register_operand" "=d") (match_operator:QI 3 "m68hc11_non_shift_operator" ! [(match_operand:QI 1 "d_register_operand" "%0") ! (match_operand:QI 2 "hard_reg_operand" "*d*x*y")]))] "reload_completed" [(set (match_dup 5) (match_dup 6)) (set (match_dup 0) (match_op_dup 3 [(match_dup 0) (match_dup 4)]))] --- 4151,4160 ---- ;; The shift operators are special and must not appear here. ;; (define_split ! [(set (match_operand:QI 0 "d_register_operand" "") (match_operator:QI 3 "m68hc11_non_shift_operator" ! [(match_operand:QI 1 "d_register_operand" "") ! (match_operand:QI 2 "hard_reg_operand" "")]))] "reload_completed" [(set (match_dup 5) (match_dup 6)) (set (match_dup 0) (match_op_dup 3 [(match_dup 0) (match_dup 4)]))] *************** *** 3861,3867 **** ;; ;; NOT NEG ;; ! ;; Operations on X or Y registers are split here. Instructions are ;; changed into: ;; - xgdx/xgdy instruction pattern, ;; - The same operation on register D, --- 4167,4173 ---- ;; ;; NOT NEG ;; ! ;; Operations on X or Y registers are split here. Instructions are ;; changed into: ;; - xgdx/xgdy instruction pattern, ;; - The same operation on register D, *************** *** 3875,3883 **** ;; (set (REG:HI X) (PLUS:HI (REG:HI X) (REG:HI X))) ;; (define_split ! [(set (match_operand:QI 0 "hard_addr_reg_operand" "=xy") (match_operator:QI 2 "m68hc11_unary_operator" ! [(match_operand:QI 1 "general_operand" "uim*d*x*y")]))] "z_replacement_completed == 2" [(set (match_dup 4) (match_dup 5)) (parallel [(set (reg:HI D_REGNUM) (match_dup 3)) --- 4181,4189 ---- ;; (set (REG:HI X) (PLUS:HI (REG:HI X) (REG:HI X))) ;; (define_split ! [(set (match_operand:QI 0 "hard_addr_reg_operand" "") (match_operator:QI 2 "m68hc11_unary_operator" ! [(match_operand:QI 1 "general_operand" "")]))] "z_replacement_completed == 2" [(set (match_dup 4) (match_dup 5)) (parallel [(set (reg:HI D_REGNUM) (match_dup 3)) *************** *** 3892,3902 **** && !rtx_equal_p (operands[0], operands[1])) || reg_mentioned_p (operands[0], operands[1])) { ! /* Move to the destination register, before the xgdx. */ operands[4] = operands[0]; operands[5] = operands[1]; ! /* Apply the operation on D. */ operands[6] = gen_rtx (REG, QImode, HARD_D_REGNUM); } else --- 4198,4208 ---- && !rtx_equal_p (operands[0], operands[1])) || reg_mentioned_p (operands[0], operands[1])) { ! /* Move to the destination register, before the xgdx. */ operands[4] = operands[0]; operands[5] = operands[1]; ! /* Apply the operation on D. */ operands[6] = gen_rtx (REG, QImode, HARD_D_REGNUM); } else *************** *** 3921,3946 **** (define_insn "negsi2" [(set (match_operand:SI 0 "register_operand" "=D") ! (neg:SI (match_operand:SI 1 "register_operand" "0")))] "" "* { CC_STATUS_INIT; /* With -Os or without -O, use a special library call. */ if (optimize_size || optimize == 0) return \"bsr\\t___negsi2\"; ! /* 32-bit complement and add 1. The comb/coma set the carry and they ! are smaller (use it for low-part). The eorb/eora leave the carry ! unchanged but are bigger (use it for high-part). */ ! output_asm_insn (\"comb\\n\\tcoma\\n\\taddd\\t#1\\n\\txgdx\", operands); ! output_asm_insn (\"eorb\\t#0xFF\\n\\teora\\t#0xFF\", operands); ! return \"adcb\\t#0\\n\\tadca\\t#0\\n\\txgdx\"; }") (define_insn "neghi2" ! [(set (match_operand:HI 0 "register_operand" "=d,d,*A") (neg:HI (match_operand:HI 1 "general_operand" "0,!duim,0")))] "" "@ --- 4227,4257 ---- (define_insn "negsi2" [(set (match_operand:SI 0 "register_operand" "=D") ! (neg:SI (match_operand:SI 1 "general_operand" "0")))] "" "* { + rtx ops[1]; + CC_STATUS_INIT; /* With -Os or without -O, use a special library call. */ if (optimize_size || optimize == 0) return \"bsr\\t___negsi2\"; ! ops[0] = gen_label_rtx (); ! ! /* 32-bit complement and add 1. */ ! output_asm_insn (\"comb\\n\\tcoma\\n\\txgdx\", operands); ! output_asm_insn (\"comb\\n\\tcoma\\n\\tinx\\n\\txgdx\", operands); ! output_asm_insn (\"bne\\t%l0\", ops); ! output_asm_insn (\"inx\", operands); ! ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", CODE_LABEL_NUMBER (ops[0])); ! return \"\"; }") (define_insn "neghi2" ! [(set (match_operand:HI 0 "register_operand" "=d,d,x*y") (neg:HI (match_operand:HI 1 "general_operand" "0,!duim,0")))] "" "@ *************** *** 3970,4026 **** DONE;") (define_insn "one_cmplsi2" ! [(set (match_operand:SI 0 "non_push_operand" "=D") ! (not:SI (match_operand:SI 1 "general_operand" "0")))] "" ! "bsr\\t___one_cmplsi2") (define_insn "one_cmplhi2" ! [(set (match_operand:HI 0 "non_push_operand" "=d,m,!u,*A") (not:HI (match_operand:HI 1 "general_operand" "0,0,0,0")))] "" "@ comb\\n\\tcoma com\\t%b0\\n\\tcom\\t%h0 ! com\\t%b0\\n\\tcom\\t%h0 ! #") (define_insn "one_cmplqi2" ! [(set (match_operand:QI 0 "non_push_operand" "=d,m,!u,!*A") (not:QI (match_operand:QI 1 "general_operand" "0,0,0,0")))] "" "@ comb com\\t%b0 ! com\\t%b0 ! #") (define_split /* "*one_cmplsi2" */ ! [(set (match_operand:SI 0 "non_push_operand" "=Dum") ! (not:SI (match_operand:SI 1 "non_push_operand" "0")))] "z_replacement_completed == 2 ! && (!D_REG_P (operands[0]) || (optimize && optimize_size == 0))" ! [(set (reg:HI D_REGNUM) (not:HI (reg:HI D_REGNUM))) ! (parallel [(set (reg:HI X_REGNUM) (reg:HI D_REGNUM)) ! (set (reg:HI D_REGNUM) (reg:HI X_REGNUM))]) ! (set (reg:HI D_REGNUM) (not:HI (reg:HI D_REGNUM))) ! (parallel [(set (reg:HI X_REGNUM) (reg:HI D_REGNUM)) ! (set (reg:HI D_REGNUM) (reg:HI X_REGNUM))])] ! " ! { ! /* The result pattern only works for D register. ! Generate 2 one_cmplhi2 instructions. */ ! if (!D_REG_P (operands[0])) ! { ! rtx ops[2]; ! ops[0] = m68hc11_gen_lowpart (HImode, operands[0]); ! ops[1] = m68hc11_gen_highpart (HImode, operands[0]); ! emit_insn (gen_one_cmplhi2 (ops[0], ops[0])); ! emit_insn (gen_one_cmplhi2 (ops[1], ops[1])); ! DONE; ! } ! }") ;;-------------------------------------------------------------------- ;;- arithmetic shifts --- 4281,4342 ---- DONE;") (define_insn "one_cmplsi2" ! [(set (match_operand:SI 0 "non_push_operand" "=D,m,!u") ! (not:SI (match_operand:SI 1 "general_operand" "0,m,0"))) ! (clobber (match_scratch:HI 2 "=X,d,X"))] "" ! "@ ! bsr\\t___one_cmplsi2 ! # ! #") (define_insn "one_cmplhi2" ! [(set (match_operand:HI 0 "non_push_operand" "=d,m,*A,u") (not:HI (match_operand:HI 1 "general_operand" "0,0,0,0")))] "" "@ comb\\n\\tcoma com\\t%b0\\n\\tcom\\t%h0 ! # ! com\\t%b0\\n\\tcom\\t%h0") (define_insn "one_cmplqi2" ! [(set (match_operand:QI 0 "non_push_operand" "=d,m,*A,u") (not:QI (match_operand:QI 1 "general_operand" "0,0,0,0")))] "" "@ comb com\\t%b0 ! # ! com\\t%b0") (define_split /* "*one_cmplsi2" */ ! [(set (match_operand:SI 0 "non_push_operand" "") ! (not:SI (match_dup 0))) ! (clobber (match_scratch:HI 1 ""))] "z_replacement_completed == 2 ! && (!X_REG_P (operands[0]) || (optimize && optimize_size == 0))" ! [(set (match_dup 2) (not:HI (match_dup 2))) ! (set (match_dup 3) (not:HI (match_dup 3)))] ! "operands[2] = m68hc11_gen_lowpart (HImode, operands[0]); ! operands[3] = m68hc11_gen_highpart (HImode, operands[0]);") ! (define_split /* "*one_cmplsi2" */ ! [(set (match_operand:SI 0 "non_push_operand" "") ! (not:SI (match_operand:SI 1 "non_push_operand" ""))) ! (clobber (match_operand:HI 2 "d_register_operand" ""))] ! "z_replacement_completed == 2 ! && (!X_REG_P (operands[0]) || (optimize && optimize_size == 0))" ! [(set (match_dup 2) (match_dup 3)) ! (set (match_dup 2) (not:HI (match_dup 2))) ! (set (match_dup 4) (match_dup 2)) ! (set (match_dup 2) (match_dup 5)) ! (set (match_dup 2) (not:HI (match_dup 2))) ! (set (match_dup 6) (match_dup 2))] ! "operands[3] = m68hc11_gen_lowpart (HImode, operands[1]); ! operands[5] = m68hc11_gen_highpart (HImode, operands[1]); ! operands[4] = m68hc11_gen_lowpart (HImode, operands[0]); ! operands[6] = m68hc11_gen_highpart (HImode, operands[0]);") ;;-------------------------------------------------------------------- ;;- arithmetic shifts *************** *** 4051,4060 **** "#") (define_split ! [(set (match_operand:DI 0 "nonimmediate_operand" "=<,um") ! (ashift:DI (match_operand:DI 1 "general_operand" "umi,umi") (const_int 32))) ! (clobber (match_scratch:HI 2 "=&A,d"))] "reload_completed" [(const_int 0)] "/* Move the lowpart in the highpart first in case the shift --- 4367,4376 ---- "#") (define_split ! [(set (match_operand:DI 0 "nonimmediate_operand" "") ! (ashift:DI (match_operand:DI 1 "general_operand" "") (const_int 32))) ! (clobber (match_scratch:HI 2 ""))] "reload_completed" [(const_int 0)] "/* Move the lowpart in the highpart first in case the shift *************** *** 4083,4092 **** "#") (define_split ! [(set (match_operand:DI 0 "non_push_operand" "=um") ! (ashift:DI (match_operand:DI 1 "general_operand" "umi") (const_int 1))) ! (clobber (match_scratch:HI 2 "=d"))] "z_replacement_completed == 2" [(set (match_dup 2) (match_dup 3)) (set (match_dup 2) (ashift:HI (match_dup 2) (const_int 1))) --- 4399,4408 ---- "#") (define_split ! [(set (match_operand:DI 0 "non_push_operand" "") ! (ashift:DI (match_operand:DI 1 "general_operand" "") (const_int 1))) ! (clobber (match_scratch:HI 2 ""))] "z_replacement_completed == 2" [(set (match_dup 2) (match_dup 3)) (set (match_dup 2) (ashift:HI (match_dup 2) (const_int 1))) *************** *** 4120,4142 **** operands[8] = m68hc11_gen_lowpart (HImode, operands[8]);") (define_insn "addsi_silshr16" ! [(set (match_operand:SI 0 "register_operand" "=D") ! (plus:SI (lshiftrt:SI (match_operand:SI 1 "general_operand" "uim") (const_int 16)) ! (match_operand:SI 2 "general_operand" "0")))] "" "#") (define_split ! [(set (match_operand:SI 0 "register_operand" "=D") ! (plus:SI (lshiftrt:SI (match_operand:SI 1 "general_operand" "uim") (const_int 16)) ! (match_operand:SI 2 "general_operand" "0")))] ! "z_replacement_completed == 2" [(set (reg:HI D_REGNUM) (plus:HI (reg:HI D_REGNUM) (match_dup 3))) ! (set (reg:HI X_REGNUM) (plus:HI (plus:HI (reg:HI X_REGNUM) (const_int 0)) (reg:HI CC_REGNUM)))] "operands[3] = m68hc11_gen_highpart (HImode, operands[1]);") (define_insn "addsi_ashift16" [(set (match_operand:SI 0 "register_operand" "=D") (plus:SI --- 4436,4475 ---- operands[8] = m68hc11_gen_lowpart (HImode, operands[8]);") (define_insn "addsi_silshr16" ! [(set (match_operand:SI 0 "register_operand" "=D,D") ! (plus:SI (lshiftrt:SI (match_operand:SI 1 "general_operand" "!*uim,0") (const_int 16)) ! (match_operand:SI 2 "general_operand" "0,m!*u")))] "" "#") (define_split ! [(set (match_operand:SI 0 "register_operand" "") ! (plus:SI (lshiftrt:SI (match_operand:SI 1 "general_operand" "") (const_int 16)) ! (match_operand:SI 2 "general_operand" "")))] ! "z_replacement_completed == 2 && !X_REG_P (operands[1])" [(set (reg:HI D_REGNUM) (plus:HI (reg:HI D_REGNUM) (match_dup 3))) ! (set (reg:HI X_REGNUM) (plus:HI (plus:HI (reg:HI X_REGNUM) ! (const_int 0)) ! (reg:HI CC_REGNUM)))] "operands[3] = m68hc11_gen_highpart (HImode, operands[1]);") + (define_split + [(set (match_operand:SI 0 "register_operand" "") + (plus:SI (lshiftrt:SI (match_operand:SI 1 "general_operand" "") + (const_int 16)) + (match_operand:SI 2 "general_operand" "")))] + "z_replacement_completed == 2 && X_REG_P (operands[1])" + [(set (reg:HI D_REGNUM) (reg:HI X_REGNUM)) + (set (reg:HI X_REGNUM) (match_dup 3)) + (set (reg:HI D_REGNUM) (plus:HI (reg:HI D_REGNUM) (match_dup 4))) + (set (reg:HI X_REGNUM) (plus:HI (plus:HI (reg:HI X_REGNUM) + (const_int 0)) + (reg:HI CC_REGNUM)))] + "operands[3] = m68hc11_gen_highpart (HImode, operands[2]); + operands[4] = m68hc11_gen_lowpart (HImode, operands[2]);") + (define_insn "addsi_ashift16" [(set (match_operand:SI 0 "register_operand" "=D") (plus:SI *************** *** 4148,4158 **** "#") (define_split ! [(set (match_operand:SI 0 "register_operand" "=D") (plus:SI ! (mult:SI (match_operand:SI 2 "general_operand" "uim") (const_int 65536)) ! (match_operand:SI 1 "general_operand" "0"))) (clobber (match_scratch:HI 3 "=X"))] "0 && reload_completed && z_replacement_completed == 2" [(set (reg:HI X_REGNUM) (plus:HI (reg:HI X_REGNUM) (match_dup 4)))] --- 4481,4491 ---- "#") (define_split ! [(set (match_operand:SI 0 "register_operand" "") (plus:SI ! (mult:SI (match_operand:SI 2 "general_operand" "") (const_int 65536)) ! (match_operand:SI 1 "general_operand" ""))) (clobber (match_scratch:HI 3 "=X"))] "0 && reload_completed && z_replacement_completed == 2" [(set (reg:HI X_REGNUM) (plus:HI (reg:HI X_REGNUM) (match_dup 4)))] *************** *** 4170,4179 **** "#") (define_split ! [(set (match_operand:SI 0 "register_operand" "=D") ! (plus:SI (and:SI (match_operand:SI 1 "general_operand" "%uim") (const_int 65535)) ! (match_operand:SI 2 "general_operand" "0")))] "z_replacement_completed == 2" [(set (reg:HI D_REGNUM) (plus:HI (reg:HI D_REGNUM) (match_dup 3))) (set (reg:HI X_REGNUM) (plus:HI (plus:HI (reg:HI X_REGNUM) (const_int 0)) (reg:HI CC_REGNUM)))] --- 4503,4512 ---- "#") (define_split ! [(set (match_operand:SI 0 "register_operand" "") ! (plus:SI (and:SI (match_operand:SI 1 "general_operand" "") (const_int 65535)) ! (match_operand:SI 2 "general_operand" "")))] "z_replacement_completed == 2" [(set (reg:HI D_REGNUM) (plus:HI (reg:HI D_REGNUM) (match_dup 3))) (set (reg:HI X_REGNUM) (plus:HI (plus:HI (reg:HI X_REGNUM) (const_int 0)) (reg:HI CC_REGNUM)))] *************** *** 4201,4210 **** "") (define_split ! [(set (match_operand:SI 0 "nonimmediate_operand" "=D,um") ! (ashift:SI (match_operand:SI 1 "general_operand" "Duim,D") (const_int 16))) ! (clobber (match_scratch:HI 3 "=X,X"))] "" [(set (match_dup 2) (match_dup 3)) (set (match_dup 4) (const_int 0))] --- 4534,4543 ---- "") (define_split ! [(set (match_operand:SI 0 "nonimmediate_operand" "") ! (ashift:SI (match_operand:SI 1 "general_operand" "") (const_int 16))) ! (clobber (match_scratch:HI 3 ""))] "" [(set (match_dup 2) (match_dup 3)) (set (match_dup 4) (const_int 0))] *************** *** 4230,4238 **** "#") (define_split /* "*ashlsi3_const16_zexthi"*/ ! [(set (match_operand:SI 0 "nonimmediate_operand" "=D") (ashift:SI (zero_extend:HI ! (match_operand:HI 1 "general_operand" "duim*a")) (const_int 16))) (clobber (match_scratch:HI 2 "=X"))] "reload_completed" --- 4563,4571 ---- "#") (define_split /* "*ashlsi3_const16_zexthi"*/ ! [(set (match_operand:SI 0 "nonimmediate_operand" "") (ashift:SI (zero_extend:HI ! (match_operand:HI 1 "general_operand" "")) (const_int 16))) (clobber (match_scratch:HI 2 "=X"))] "reload_completed" *************** *** 4332,4338 **** output_asm_insn (\"pshy\", operands); if (reg_mentioned_p (stack_pointer_rtx, operands[1])) { ! ops[0] = adj_offsettable_operand (operands[1], 2); } output_asm_insn (\"ldy\\t%0\", ops); output_asm_insn (\"bsr\\t___ashlsi3\", operands); --- 4665,4671 ---- output_asm_insn (\"pshy\", operands); if (reg_mentioned_p (stack_pointer_rtx, operands[1])) { ! ops[0] = adjust_address (operands[1], GET_MODE (operands[1]), 2); } output_asm_insn (\"ldy\\t%0\", ops); output_asm_insn (\"bsr\\t___ashlsi3\", operands); *************** *** 4614,4620 **** output_asm_insn (\"clrb\", operands); output_asm_insn (\"rola\", operands); ! /* Clear A without clearing the carry flag. */ output_asm_insn (\"tba\", operands); output_asm_insn (\"bcc\\t%l0\", ops); output_asm_insn (\"coma\", operands); --- 4947,4953 ---- output_asm_insn (\"clrb\", operands); output_asm_insn (\"rola\", operands); ! /* Clear A without clearing the carry flag. */ output_asm_insn (\"tba\", operands); output_asm_insn (\"bcc\\t%l0\", ops); output_asm_insn (\"coma\", operands); *************** *** 4645,4651 **** output_asm_insn (\"asrb\", operands); val--; } ! /* Status is ok. */ return \"\"; } if (val == 7) --- 4978,4984 ---- output_asm_insn (\"asrb\", operands); val--; } ! /* Status is ok. */ return \"\"; } if (val == 7) *************** *** 4740,4746 **** output_asm_insn (\"pshy\", operands); if (reg_mentioned_p (stack_pointer_rtx, operands[1])) { ! ops[0] = adj_offsettable_operand (operands[1], 2); } output_asm_insn (\"ldy\\t%0\", ops); output_asm_insn (\"bsr\\t___ashrsi3\", operands); --- 5073,5079 ---- output_asm_insn (\"pshy\", operands); if (reg_mentioned_p (stack_pointer_rtx, operands[1])) { ! ops[0] = adjust_address (operands[1], GET_MODE (operands[1]), 2); } output_asm_insn (\"ldy\\t%0\", ops); output_asm_insn (\"bsr\\t___ashrsi3\", operands); *************** *** 4844,4851 **** "#") (define_split ! [(set (match_operand:DI 0 "nonimmediate_operand" "=<,um") ! (lshiftrt:DI (match_operand:DI 1 "general_operand" "umi,umi") (const_int 32))) (clobber (match_scratch:HI 2 "=&A,d"))] "reload_completed" --- 5177,5184 ---- "#") (define_split ! [(set (match_operand:DI 0 "nonimmediate_operand" "") ! (lshiftrt:DI (match_operand:DI 1 "general_operand" "") (const_int 32))) (clobber (match_scratch:HI 2 "=&A,d"))] "reload_completed" *************** *** 4866,4873 **** "#") (define_split ! [(set (match_operand:DI 0 "nonimmediate_operand" "=um") ! (lshiftrt:DI (match_operand:DI 1 "general_operand" "umi") (match_operand:DI 2 "const_int_operand" ""))) (clobber (match_scratch:HI 3 "=d"))] "z_replacement_completed && INTVAL (operands[2]) >= 56" --- 5199,5206 ---- "#") (define_split ! [(set (match_operand:DI 0 "nonimmediate_operand" "") ! (lshiftrt:DI (match_operand:DI 1 "general_operand" "") (match_operand:DI 2 "const_int_operand" ""))) (clobber (match_scratch:HI 3 "=d"))] "z_replacement_completed && INTVAL (operands[2]) >= 56" *************** *** 4879,4885 **** (set (match_dup 5) (reg:HI D_REGNUM)) (set (match_dup 6) (reg:HI D_REGNUM)) (set (match_dup 7) (reg:HI D_REGNUM))] ! "operands[8] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) - 56); operands[4] = m68hc11_gen_lowpart (SImode, operands[0]); operands[5] = m68hc11_gen_highpart (HImode, operands[4]); operands[4] = m68hc11_gen_lowpart (HImode, operands[4]); --- 5212,5218 ---- (set (match_dup 5) (reg:HI D_REGNUM)) (set (match_dup 6) (reg:HI D_REGNUM)) (set (match_dup 7) (reg:HI D_REGNUM))] ! "operands[8] = GEN_INT (INTVAL (operands[2]) - 56); operands[4] = m68hc11_gen_lowpart (SImode, operands[0]); operands[5] = m68hc11_gen_highpart (HImode, operands[4]); operands[4] = m68hc11_gen_lowpart (HImode, operands[4]); *************** *** 4893,4900 **** operands[6] = m68hc11_gen_lowpart (HImode, operands[6]);") (define_split ! [(set (match_operand:DI 0 "nonimmediate_operand" "=um") ! (lshiftrt:DI (match_operand:DI 1 "general_operand" "umi") (match_operand:DI 2 "const_int_operand" ""))) (clobber (match_scratch:HI 3 "=d"))] "z_replacement_completed && INTVAL (operands[2]) >= 48 --- 5226,5233 ---- operands[6] = m68hc11_gen_lowpart (HImode, operands[6]);") (define_split ! [(set (match_operand:DI 0 "nonimmediate_operand" "") ! (lshiftrt:DI (match_operand:DI 1 "general_operand" "") (match_operand:DI 2 "const_int_operand" ""))) (clobber (match_scratch:HI 3 "=d"))] "z_replacement_completed && INTVAL (operands[2]) >= 48 *************** *** 4906,4912 **** (set (match_dup 5) (reg:HI D_REGNUM)) (set (match_dup 6) (reg:HI D_REGNUM)) (set (match_dup 7) (reg:HI D_REGNUM))] ! "operands[8] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) - 48); operands[4] = m68hc11_gen_lowpart (SImode, operands[0]); operands[5] = m68hc11_gen_highpart (HImode, operands[4]); operands[4] = m68hc11_gen_lowpart (HImode, operands[4]); --- 5239,5245 ---- (set (match_dup 5) (reg:HI D_REGNUM)) (set (match_dup 6) (reg:HI D_REGNUM)) (set (match_dup 7) (reg:HI D_REGNUM))] ! "operands[8] = GEN_INT (INTVAL (operands[2]) - 48); operands[4] = m68hc11_gen_lowpart (SImode, operands[0]); operands[5] = m68hc11_gen_highpart (HImode, operands[4]); operands[4] = m68hc11_gen_lowpart (HImode, operands[4]); *************** *** 4926,4935 **** "#") (define_split ! [(set (match_operand:DI 0 "non_push_operand" "=um") ! (lshiftrt:DI (match_operand:DI 1 "general_operand" "umi") (const_int 1))) ! (clobber (match_scratch:HI 2 "=d"))] "z_replacement_completed == 2" [(set (match_dup 2) (match_dup 3)) (set (match_dup 2) (lshiftrt:HI (match_dup 2) (const_int 1))) --- 5259,5268 ---- "#") (define_split ! [(set (match_operand:DI 0 "non_push_operand" "") ! (lshiftrt:DI (match_operand:DI 1 "general_operand" "") (const_int 1))) ! (clobber (match_scratch:HI 2 ""))] "z_replacement_completed == 2" [(set (match_dup 2) (match_dup 3)) (set (match_dup 2) (lshiftrt:HI (match_dup 2) (const_int 1))) *************** *** 4975,4984 **** "") (define_split ! [(set (match_operand:SI 0 "non_push_operand" "=D,um") ! (lshiftrt:SI (match_operand:SI 1 "general_operand" "uim,D") (const_int 16))) ! (clobber (match_scratch:HI 3 "=X,X"))] "reload_completed && !(X_REG_P (operands[0]) && X_REG_P (operands[1]))" [(set (match_dup 2) (match_dup 3)) (set (match_dup 4) (const_int 0))] --- 5308,5317 ---- "") (define_split ! [(set (match_operand:SI 0 "non_push_operand" "") ! (lshiftrt:SI (match_operand:SI 1 "general_operand" "") (const_int 16))) ! (clobber (match_scratch:HI 3 ""))] "reload_completed && !(X_REG_P (operands[0]) && X_REG_P (operands[1]))" [(set (match_dup 2) (match_dup 3)) (set (match_dup 4) (const_int 0))] *************** *** 5084,5090 **** output_asm_insn (\"pshy\", operands); if (reg_mentioned_p (stack_pointer_rtx, operands[1])) { ! ops[0] = adj_offsettable_operand (operands[1], 2); } output_asm_insn (\"ldy\\t%0\", ops); output_asm_insn (\"bsr\\t___lshrsi3\", operands); --- 5417,5423 ---- output_asm_insn (\"pshy\", operands); if (reg_mentioned_p (stack_pointer_rtx, operands[1])) { ! ops[0] = adjust_address (operands[1], GET_MODE (operands[1]), 2); } output_asm_insn (\"ldy\\t%0\", ops); output_asm_insn (\"bsr\\t___lshrsi3\", operands); *************** *** 5614,5620 **** smaller and a little bit faster. This happens quite often due to reloading of operands[0]. In that case, flags are set correctly due to the load instruction. */ ! if (cc_status.value1 && rtx_equal_p (cc_status.value1, operands[0])) return \"beq\\t%l1\"; else return \"tbeq\\t%0,%l1\"; --- 5947,5954 ---- smaller and a little bit faster. This happens quite often due to reloading of operands[0]. In that case, flags are set correctly due to the load instruction. */ ! if ((cc_status.value1 && rtx_equal_p (cc_status.value1, operands[0])) ! || (cc_status.value2 && rtx_equal_p (cc_status.value2, operands[0]))) return \"beq\\t%l1\"; else return \"tbeq\\t%0,%l1\"; *************** *** 5629,5635 **** "TARGET_M6812" "* { ! if (cc_status.value1 && rtx_equal_p (cc_status.value1, operands[0])) return \"bne\\t%l1\"; else return \"tbne\\t%0,%l1\"; --- 5963,5970 ---- "TARGET_M6812" "* { ! if ((cc_status.value1 && rtx_equal_p (cc_status.value1, operands[0])) ! || (cc_status.value2 && rtx_equal_p (cc_status.value2, operands[0]))) return \"bne\\t%l1\"; else return \"tbne\\t%0,%l1\"; *************** *** 5647,5653 **** "TARGET_M6812" "* { ! if (cc_status.value1 && rtx_equal_p (cc_status.value1, operands[0])) return \"beq\\t%l1\"; else return \"tbeq\\tb,%l1\"; --- 5982,5989 ---- "TARGET_M6812" "* { ! if ((cc_status.value1 && rtx_equal_p (cc_status.value1, operands[0])) ! || (cc_status.value2 && rtx_equal_p (cc_status.value2, operands[0]))) return \"beq\\t%l1\"; else return \"tbeq\\tb,%l1\"; *************** *** 5662,5668 **** "TARGET_M6812" "* { ! if (cc_status.value1 && rtx_equal_p (cc_status.value1, operands[0])) return \"bne\\t%l1\"; else return \"tbne\\tb,%l1\"; --- 5998,6005 ---- "TARGET_M6812" "* { ! if ((cc_status.value1 && rtx_equal_p (cc_status.value1, operands[0])) ! || (cc_status.value2 && rtx_equal_p (cc_status.value2, operands[0]))) return \"bne\\t%l1\"; else return \"tbne\\tb,%l1\"; *************** *** 6131,6136 **** --- 6468,6532 ---- "") ;; + ;; Remove a possible move before a compare instruction when that + ;; move will go in a dead register. Compare with the source then. + ;; + (define_peephole2 + [(set (match_operand:HI 0 "hard_reg_operand" "") + (match_operand:HI 1 "hard_reg_operand" "")) + (set (cc0) + (compare (match_dup 0) + (match_operand:HI 2 "cmp_operand" "")))] + "(X_REG_P (operands[1]) || Y_REG_P (operands[1])) + && peep2_reg_dead_p (2, operands[0]) + && !reg_mentioned_p (operands[0], operands[2])" + [(set (cc0) (compare (match_dup 1) (match_dup 2)))] + "") + + ;; + ;; Optimize an address register increment and a compare to use + ;; a PRE_INC or PRE_DEC addressing mode (disabled on the compare insn + ;; before reload, but can be enabled after). + ;; + (define_peephole2 + [(set (match_operand:HI 0 "hard_reg_operand" "") + (plus:HI (match_dup 0) + (match_operand:HI 1 "const_int_operand" ""))) + (set (cc0) + (compare (match_operand:QI 2 "hard_reg_operand" "") + (match_operand:QI 3 "memory_operand" "")))] + "TARGET_AUTO_INC_DEC + && (INTVAL (operands[1]) == -1 || INTVAL (operands[1]) == 1) + && reg_mentioned_p (operands[0], operands[3])" + [(set (cc0) (compare (match_dup 2) (match_dup 4)))] + "if (INTVAL (operands[1]) == 1) + operands[4] = gen_rtx (MEM, QImode, + gen_rtx (PRE_INC, HImode, operands[0])); + else + operands[4] = gen_rtx (MEM, QImode, + gen_rtx (PRE_DEC, HImode, operands[0])); + ") + + (define_peephole2 + [(set (match_operand:HI 0 "hard_reg_operand" "") + (plus:HI (match_dup 0) + (match_operand:HI 1 "const_int_operand" ""))) + (set (cc0) + (compare (match_operand:QI 2 "memory_operand" "") + (match_operand:QI 3 "hard_reg_operand" "")))] + "TARGET_AUTO_INC_DEC + && (INTVAL (operands[1]) == -1 || INTVAL (operands[1]) == 1) + && reg_mentioned_p (operands[0], operands[2])" + [(set (cc0) (compare (match_dup 4) (match_dup 3)))] + "if (INTVAL (operands[1]) == 1) + operands[4] = gen_rtx (MEM, QImode, + gen_rtx (PRE_INC, HImode, operands[0])); + else + operands[4] = gen_rtx (MEM, QImode, + gen_rtx (PRE_DEC, HImode, operands[0])); + ") + + ;; ;; This peephole catches the address computations generated by the reload ;; pass. (define_peephole *************** *** 6174,6180 **** output_asm_insn (\"ldd\\t%2\", operands); if ((INTVAL (operands[1]) & 0x0ff00) == 0x100) output_asm_insn (\"inca\", operands); ! else if (INTVAL (operands[1]) & 0x0ff00 == 0xff00) output_asm_insn (\"deca\", operands); else if (INTVAL (operands[1]) != 0) output_asm_insn (\"adda\\t%h1\", operands); --- 6570,6576 ---- output_asm_insn (\"ldd\\t%2\", operands); if ((INTVAL (operands[1]) & 0x0ff00) == 0x100) output_asm_insn (\"inca\", operands); ! else if ((INTVAL (operands[1]) & 0x0ff00) == 0xff00) output_asm_insn (\"deca\", operands); else if (INTVAL (operands[1]) != 0) output_asm_insn (\"adda\\t%h1\", operands); diff -Nrc3pad gcc-3.0.4/gcc/config/m68hc11/m68hc12.h gcc-3.1/gcc/config/m68hc11/m68hc12.h *** gcc-3.0.4/gcc/config/m68hc11/m68hc12.h Fri May 4 19:51:27 2001 --- gcc-3.1/gcc/config/m68hc11/m68hc12.h Fri May 4 19:49:25 2001 *************** Boston, MA 02111-1307, USA. */ *** 39,44 **** #define TARGET_DEFAULT (MASK_M6812) #define TARGET_M68HC12 - - #include "m68hc11/m68hc11.h" - --- 39,41 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68hc11/t-m68hc11-gas gcc-3.1/gcc/config/m68hc11/t-m68hc11-gas *** gcc-3.0.4/gcc/config/m68hc11/t-m68hc11-gas Fri Aug 3 21:05:49 2001 --- gcc-3.1/gcc/config/m68hc11/t-m68hc11-gas Fri Aug 3 21:01:06 2001 *************** RANLIB_FOR_TARGET = ` \ *** 15,21 **** T_CPPFLAGS = -DUSE_GAS - CROSS_LIBGCC1 = libgcc1-asm.a LIB1ASMSRC = m68hc11/larith.asm LIB1ASMFUNCS = _mulsi3 \ _mulqi3 _ashlsi3 _ashrsi3 _lshrsi3 \ --- 15,20 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68hc11/xm-m68hc11.h gcc-3.1/gcc/config/m68hc11/xm-m68hc11.h *** gcc-3.0.4/gcc/config/m68hc11/xm-m68hc11.h Fri Sep 8 20:54:44 2000 --- gcc-3.1/gcc/config/m68hc11/xm-m68hc11.h Thu Jan 1 00:00:00 1970 *************** *** 1,24 **** - /* Configuration for GNU C-compiler for Motorola 68HC11 and 68HC12. - Copyright (C) 1999, 2000 Free Software Foundation, Inc. - Contributed by Stephane Carrez (stcarrez@worldnet.fr) - - 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 "tm.h" - - #define inhibit_libc --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/3b1.h gcc-3.1/gcc/config/m68k/3b1.h *** gcc-3.0.4/gcc/config/m68k/3b1.h Mon Apr 16 18:25:49 2001 --- gcc-3.1/gcc/config/m68k/3b1.h Thu Dec 20 17:36:36 2001 *************** output_file_directive ((FILE), main_inpu *** 101,108 **** #undef TARGET_VERSION #undef ASM_FORMAT_PRIVATE_NAME - #undef ASM_OUTPUT_DOUBLE - #undef ASM_OUTPUT_FLOAT #undef ASM_OUTPUT_ALIGN #undef ASM_OUTPUT_SOURCE_FILENAME #undef ASM_OUTPUT_SOURCE_LINE --- 101,106 ---- *************** output_file_directive ((FILE), main_inpu *** 127,160 **** ( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 12), \ sprintf ((OUTPUT), "%s_%%%d", (NAME), (LABELNO))) - /* The unixpc doesn't know about double's and float's */ - - #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - do { long l[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE (VALUE, l); \ - fprintf (FILE, "\tlong 0x%x,0x%x\n", l[0], l[1]); \ - } while (0) - - #undef ASM_OUTPUT_LONG_DOUBLE - #define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \ - do { long l[3]; \ - REAL_VALUE_TO_TARGET_LONG_DOUBLE (VALUE, l); \ - fprintf (FILE, "\tlong 0x%x,0x%x,0x%x\n", l[0], l[1], l[2]); \ - } while (0) - - /* This is how to output an assembler line defining a `float' constant. */ - - #define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - do { long l; \ - REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ - fprintf ((FILE), "\tlong 0x%x\n", l); \ - } while (0) - #define ASM_OUTPUT_ALIGN(FILE,LOG) \ if ((LOG) == 1) \ fprintf (FILE, "\teven\n"); \ else if ((LOG) != 0) \ ! abort (); /* This is how to output an assembler line that says to advance the location counter by SIZE bytes. */ --- 125,137 ---- ( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 12), \ sprintf ((OUTPUT), "%s_%%%d", (NAME), (LABELNO))) #define ASM_OUTPUT_ALIGN(FILE,LOG) \ + do { \ if ((LOG) == 1) \ fprintf (FILE, "\teven\n"); \ else if ((LOG) != 0) \ ! abort (); \ ! } while (0) /* This is how to output an assembler line that says to advance the location counter by SIZE bytes. */ *************** do { long l; \ *** 167,173 **** #define ASM_NO_SKIP_IN_TEXT 1 ! /* The beginnings of sdb support... */ #define ASM_OUTPUT_SOURCE_FILENAME(FILE, FILENAME) \ do { fprintf (FILE, "\tfile\t"); \ --- 144,150 ---- #define ASM_NO_SKIP_IN_TEXT 1 ! /* The beginnings of sdb support... */ #define ASM_OUTPUT_SOURCE_FILENAME(FILE, FILENAME) \ do { fprintf (FILE, "\tfile\t"); \ *************** do { long l; \ *** 178,189 **** #define ASM_OUTPUT_SOURCE_LINE(FILE, LINENO) \ fprintf (FILE, "\tln\t%d\n", \ (sdb_begin_function_line \ ! ? last_linenum - sdb_begin_function_line : 1)) ! /* Yet another null terminated string format. */ #define ASM_OUTPUT_ASCII(FILE,PTR,LEN) \ ! do { register int sp = 0, lp = 0; \ fprintf ((FILE), "\tbyte\t"); \ loop: \ if ((PTR)[sp] > ' ' && ! ((PTR)[sp] & 0x80) && (PTR)[sp] != '\\') \ --- 155,166 ---- #define ASM_OUTPUT_SOURCE_LINE(FILE, LINENO) \ fprintf (FILE, "\tln\t%d\n", \ (sdb_begin_function_line \ ! ? (LINENO) - sdb_begin_function_line : 1)) ! /* Yet another null terminated string format. */ #define ASM_OUTPUT_ASCII(FILE,PTR,LEN) \ ! do { register size_t sp = 0, lp = 0, limit = (LEN); \ fprintf ((FILE), "\tbyte\t"); \ loop: \ if ((PTR)[sp] > ' ' && ! ((PTR)[sp] & 0x80) && (PTR)[sp] != '\\') \ *************** do { long l; \ *** 192,198 **** else \ { lp += 5; \ fprintf ((FILE), "0x%x", (PTR)[sp]); } \ ! if (++sp < (LEN)) \ { if (lp > 60) \ { lp = 0; \ fprintf ((FILE), "\n%s", ASCII_DATA_ASM_OP); } \ --- 169,175 ---- else \ { lp += 5; \ fprintf ((FILE), "0x%x", (PTR)[sp]); } \ ! if (++sp < limit) \ { if (lp > 60) \ { lp = 0; \ fprintf ((FILE), "\n%s", ASCII_DATA_ASM_OP); } \ *************** do { long l; \ *** 348,354 **** }} #define ASM_GENERATE_INTERNAL_LABEL(LABEL, PREFIX, NUM) \ ! sprintf ((LABEL), "%s%%%d", (PREFIX), (NUM)) #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \ fprintf (FILE, "%s%%%d:\n", PREFIX, NUM) --- 325,331 ---- }} #define ASM_GENERATE_INTERNAL_LABEL(LABEL, PREFIX, NUM) \ ! sprintf ((LABEL), "%s%%%ld", (PREFIX), (long)(NUM)) #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \ fprintf (FILE, "%s%%%d:\n", PREFIX, NUM) *************** do { long l; \ *** 380,386 **** we want. This difference can be accommodated by making the assembler define such "LDnnn" to be either "Lnnn-LInnn-2.b", "Lnnn", or any other string, as necessary. This is accomplished via the ASM_OUTPUT_CASE_END ! macro. */ #define ASM_OUTPUT_CASE_END(FILE,NUM,TABLE) \ { if (switch_table_difference_label_flag) \ --- 357,363 ---- we want. This difference can be accommodated by making the assembler define such "LDnnn" to be either "Lnnn-LInnn-2.b", "Lnnn", or any other string, as necessary. This is accomplished via the ASM_OUTPUT_CASE_END ! macro. */ #define ASM_OUTPUT_CASE_END(FILE,NUM,TABLE) \ { if (switch_table_difference_label_flag) \ diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/3b1g.h gcc-3.1/gcc/config/m68k/3b1g.h *** gcc-3.0.4/gcc/config/m68k/3b1g.h Thu Nov 2 23:29:10 2000 --- gcc-3.1/gcc/config/m68k/3b1g.h Thu Nov 1 14:49:32 2001 *************** Boston, MA 02111-1307, USA. */ *** 43,49 **** /* This is (not really) BSD, so (but) it wants DBX format. */ #define DBX_DEBUGGING_INFO ! /* Brain damage. */ #define SCCS_DIRECTIVE /* Specify how to pad function arguments. --- 43,49 ---- /* This is (not really) BSD, so (but) it wants DBX format. */ #define DBX_DEBUGGING_INFO ! /* Brain damage. */ #define SCCS_DIRECTIVE /* Specify how to pad function arguments. diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/a-ux.h gcc-3.1/gcc/config/m68k/a-ux.h *** gcc-3.0.4/gcc/config/m68k/a-ux.h Thu Nov 2 23:29:10 2000 --- gcc-3.1/gcc/config/m68k/a-ux.h Thu Nov 1 14:49:32 2001 *************** crt2.o%s " *** 109,115 **** and how to find (in the caller) the value returned by a function. VALTYPE is the data type of the value (as a tree). If the precise function being called is known, FUNC is its FUNCTION_DECL; otherwise, FUNC is 0. ! For A/UX generate the result in d0, a0, or fp0 as appropriate. */ #undef FUNCTION_VALUE #define FUNCTION_VALUE(VALTYPE, FUNC) \ --- 109,115 ---- and how to find (in the caller) the value returned by a function. VALTYPE is the data type of the value (as a tree). If the precise function being called is known, FUNC is its FUNCTION_DECL; otherwise, FUNC is 0. ! For A/UX generate the result in d0, a0, or fp0 as appropriate. */ #undef FUNCTION_VALUE #define FUNCTION_VALUE(VALTYPE, FUNC) \ *************** crt2.o%s " *** 127,133 **** /* 1 if N is a possible register number for a function value. For A/UX allow d0, a0, or fp0 as return registers, for integral, pointer, or floating types, respectively. Reject fp0 if not using a ! 68881 coprocessor. */ #undef FUNCTION_VALUE_REGNO_P #define FUNCTION_VALUE_REGNO_P(N) \ --- 127,133 ---- /* 1 if N is a possible register number for a function value. For A/UX allow d0, a0, or fp0 as return registers, for integral, pointer, or floating types, respectively. Reject fp0 if not using a ! 68881 coprocessor. */ #undef FUNCTION_VALUE_REGNO_P #define FUNCTION_VALUE_REGNO_P(N) \ *************** crt2.o%s " *** 144,150 **** A/UX convention is to copy the value returned for pointer functions from a0 to d0 in the function epilogue, so that callers that have neglected to properly declare the callee can still find the correct return ! value. */ #define FUNCTION_EXTRA_EPILOGUE(FILE, SIZE) \ { \ --- 144,150 ---- A/UX convention is to copy the value returned for pointer functions from a0 to d0 in the function epilogue, so that callers that have neglected to properly declare the callee can still find the correct return ! value. */ #define FUNCTION_EXTRA_EPILOGUE(FILE, SIZE) \ { \ diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/altos3068.h gcc-3.1/gcc/config/m68k/altos3068.h *** gcc-3.0.4/gcc/config/m68k/altos3068.h Thu Nov 2 23:29:10 2000 --- gcc-3.1/gcc/config/m68k/altos3068.h Thu Dec 20 17:36:36 2001 *************** Boston, MA 02111-1307, USA. */ *** 78,101 **** #define USE_GAS - /* This is how to output an assembler line defining a `double' constant. */ - - #undef ASM_OUTPUT_DOUBLE - #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - do { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL (VALUE, "%.20e", dstr); \ - fprintf (FILE, "\t.double 0r%s\n", dstr); \ - } while (0) - - /* This is how to output an assembler line defining a `float' constant. */ - - #undef ASM_OUTPUT_FLOAT - #define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - do { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL (VALUE, "%.20e", dstr); \ - fprintf (FILE, "\t.single 0r%s\n", dstr); \ - } while (0) - #undef ASM_OUTPUT_FLOAT_OPERAND #define ASM_OUTPUT_FLOAT_OPERAND(CODE,FILE,VALUE) \ do { \ --- 78,83 ---- *************** Boston, MA 02111-1307, USA. */ *** 110,116 **** long l; \ REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ if (sizeof (int) == sizeof (long)) \ ! asm_fprintf ((FILE), "%I0x%x", l); \ else \ asm_fprintf ((FILE), "%I0x%lx", l); \ } \ --- 92,98 ---- long l; \ REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ if (sizeof (int) == sizeof (long)) \ ! asm_fprintf ((FILE), "%I0x%x", (int) l); \ else \ asm_fprintf ((FILE), "%I0x%lx", l); \ } \ diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/amix.h gcc-3.1/gcc/config/m68k/amix.h *** gcc-3.0.4/gcc/config/m68k/amix.h Thu Nov 2 23:29:10 2000 --- gcc-3.1/gcc/config/m68k/amix.h Mon Dec 17 15:05:34 2001 *************** Boston, MA 02111-1307, USA. */ *** 36,42 **** /* Names to predefine in the preprocessor for this target machine. For the Amiga, these definitions match those of the native AT&T compiler. Note that we override the definition in m68kv4.h, where SVR4 is defined and ! AMIX isn't. */ #undef CPP_PREDEFINES #define CPP_PREDEFINES \ --- 36,42 ---- /* Names to predefine in the preprocessor for this target machine. For the Amiga, these definitions match those of the native AT&T compiler. Note that we override the definition in m68kv4.h, where SVR4 is defined and ! AMIX isn't. */ #undef CPP_PREDEFINES #define CPP_PREDEFINES \ *************** do { \ *** 95,109 **** /* This definition of ASM_OUTPUT_ASCII is the same as the one in m68k/sgs.h, which has been overridden by the one in svr4.h. However, we can't use the one in svr4.h because the amix assembler croaks on some of the ! strings that it emits (such as .string "\"%s\"\n"). */ #undef ASM_OUTPUT_ASCII #define ASM_OUTPUT_ASCII(FILE,PTR,LEN) \ do { \ ! register int sp = 0, lp = 0, ch; \ ! fprintf ((FILE), "%s", BYTE_ASM_OP); \ do { \ ! ch = (PTR)[sp]; \ if (ch > ' ' && ! (ch & 0x80) && ch != '\\') \ { \ fprintf ((FILE), "'%c", ch); \ --- 95,109 ---- /* This definition of ASM_OUTPUT_ASCII is the same as the one in m68k/sgs.h, which has been overridden by the one in svr4.h. However, we can't use the one in svr4.h because the amix assembler croaks on some of the ! strings that it emits (such as .string "\"%s\"\n"). */ #undef ASM_OUTPUT_ASCII #define ASM_OUTPUT_ASCII(FILE,PTR,LEN) \ do { \ ! register size_t sp = 0, limit = (LEN); \ ! fputs (integer_asm_op (1, TRUE), (FILE)); \ do { \ ! int ch = (PTR)[sp]; \ if (ch > ' ' && ! (ch & 0x80) && ch != '\\') \ { \ fprintf ((FILE), "'%c", ch); \ *************** do { \ *** 112,129 **** { \ fprintf ((FILE), "0x%x", ch); \ } \ ! if (++sp < (LEN)) \ { \ if ((sp % 10) == 0) \ { \ ! fprintf ((FILE), "\n%s", BYTE_ASM_OP); \ } \ else \ { \ putc (',', (FILE)); \ } \ } \ ! } while (sp < (LEN)); \ putc ('\n', (FILE)); \ } while (0) --- 112,129 ---- { \ fprintf ((FILE), "0x%x", ch); \ } \ ! if (++sp < limit) \ { \ if ((sp % 10) == 0) \ { \ ! fprintf ((FILE), "\n%s", integer_asm_op (1, TRUE)); \ } \ else \ { \ putc (',', (FILE)); \ } \ } \ ! } while (sp < limit); \ putc ('\n', (FILE)); \ } while (0) *************** do { \ *** 136,145 **** #undef ASM_GENERATE_INTERNAL_LABEL #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ if (flag_pic && !strcmp(PREFIX,"LC")) \ ! sprintf (LABEL, "*%s%%%d", PREFIX, NUM); \ else \ ! sprintf (LABEL, "*%s%s%d", LOCAL_LABEL_PREFIX, PREFIX, NUM) #undef ASM_OUTPUT_INTERNAL_LABEL #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \ --- 136,147 ---- #undef ASM_GENERATE_INTERNAL_LABEL #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ + do { \ if (flag_pic && !strcmp(PREFIX,"LC")) \ ! sprintf (LABEL, "*%s%%%ld", PREFIX, (long)(NUM)); \ else \ ! sprintf (LABEL, "*%s%s%ld", LOCAL_LABEL_PREFIX, PREFIX, (long)(NUM)); \ ! } while (0) #undef ASM_OUTPUT_INTERNAL_LABEL #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \ diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/apollo68.h gcc-3.1/gcc/config/m68k/apollo68.h *** gcc-3.0.4/gcc/config/m68k/apollo68.h Thu Nov 2 23:29:10 2000 --- gcc-3.1/gcc/config/m68k/apollo68.h Sun Nov 4 22:37:45 2001 *************** Boston, MA 02111-1307, USA. */ *** 31,37 **** #endif /* Target switches for the Apollo is the same as in m68k.h, except ! there is no Sun FPA. */ #undef TARGET_SWITCHES #define TARGET_SWITCHES \ --- 31,37 ---- #endif /* Target switches for the Apollo is the same as in m68k.h, except ! there is no Sun FPA. */ #undef TARGET_SWITCHES #define TARGET_SWITCHES \ *************** Boston, MA 02111-1307, USA. */ *** 138,144 **** /* Specify how to pad function arguments. Arguments are not padded at all; the stack is kept aligned on long ! boundaries. */ #define FUNCTION_ARG_PADDING(mode, size) none --- 138,144 ---- /* Specify how to pad function arguments. Arguments are not padded at all; the stack is kept aligned on long ! boundaries. */ #define FUNCTION_ARG_PADDING(mode, size) none *************** Boston, MA 02111-1307, USA. */ *** 152,158 **** a scalar value cannot be returned in registers. For Apollo, anything larger than one integer register is returned using the structure-value mechanism, i.e. objects of DFmode are ! returned that way. */ #define RETURN_IN_MEMORY(type) \ (TYPE_MODE (type) == BLKmode \ --- 152,158 ---- a scalar value cannot be returned in registers. For Apollo, anything larger than one integer register is returned using the structure-value mechanism, i.e. objects of DFmode are ! returned that way. */ #define RETURN_IN_MEMORY(type) \ (TYPE_MODE (type) == BLKmode \ *************** Boston, MA 02111-1307, USA. */ *** 182,188 **** if (TARGET_5200) \ return "ext%.l %0\n\tjmp %%pc@(2,%0:l)"; \ else \ ! return "jmp %%pc@(2,%0:w)" \ } while (0) /* Here are the new register names. */ --- 182,188 ---- if (TARGET_5200) \ return "ext%.l %0\n\tjmp %%pc@(2,%0:l)"; \ else \ ! return "jmp %%pc@(2,%0:w)"; \ } while (0) /* Here are the new register names. */ diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/atari.h gcc-3.1/gcc/config/m68k/atari.h *** gcc-3.0.4/gcc/config/m68k/atari.h Mon Sep 25 13:22:45 2000 --- gcc-3.1/gcc/config/m68k/atari.h Mon Dec 17 15:05:34 2001 *************** Boston, MA 02111-1307, USA. */ *** 21,27 **** #include "m68k/m68kv4.h" ! /* Dollars and dots in labels are not allowed. */ #define NO_DOLLAR_IN_LABEL #define NO_DOT_IN_LABEL --- 21,27 ---- #include "m68k/m68kv4.h" ! /* Dollars and dots in labels are not allowed. */ #define NO_DOLLAR_IN_LABEL #define NO_DOT_IN_LABEL *************** int switch_table_difference_label_flag; *** 55,69 **** /* This definition of ASM_OUTPUT_ASCII is the same as the one in m68k/sgs.h, which has been overridden by the one in svr4.h. However, we can't use the one in svr4.h because the ASV assembler croaks on some of the ! strings that it emits (such as .string "\"%s\"\n"). */ #undef ASM_OUTPUT_ASCII #define ASM_OUTPUT_ASCII(FILE,PTR,LEN) \ { \ ! register int sp = 0, lp = 0, ch; \ ! fprintf ((FILE), "%s", BYTE_ASM_OP); \ do { \ ! ch = (PTR)[sp]; \ if (ch > ' ' && ! (ch & 0x80) && ch != '\\') \ { \ fprintf ((FILE), "'%c", ch); \ --- 55,69 ---- /* This definition of ASM_OUTPUT_ASCII is the same as the one in m68k/sgs.h, which has been overridden by the one in svr4.h. However, we can't use the one in svr4.h because the ASV assembler croaks on some of the ! strings that it emits (such as .string "\"%s\"\n"). */ #undef ASM_OUTPUT_ASCII #define ASM_OUTPUT_ASCII(FILE,PTR,LEN) \ { \ ! register size_t sp = 0, limit = (LEN); \ ! fputs (integer_asm_op (1, TRUE), (FILE)); \ do { \ ! int ch = (PTR)[sp]; \ if (ch > ' ' && ! (ch & 0x80) && ch != '\\') \ { \ fprintf ((FILE), "'%c", ch); \ *************** int switch_table_difference_label_flag; *** 72,89 **** { \ fprintf ((FILE), "0x%x", ch); \ } \ ! if (++sp < (LEN)) \ { \ if ((sp % 10) == 0) \ { \ ! fprintf ((FILE), "\n%s", BYTE_ASM_OP); \ } \ else \ { \ putc (',', (FILE)); \ } \ } \ ! } while (sp < (LEN)); \ putc ('\n', (FILE)); \ } --- 72,89 ---- { \ fprintf ((FILE), "0x%x", ch); \ } \ ! if (++sp < limit) \ { \ if ((sp % 10) == 0) \ { \ ! fprintf ((FILE), "\n%s", integer_asm_op (1, TRUE)); \ } \ else \ { \ putc (',', (FILE)); \ } \ } \ ! } while (sp < limit); \ putc ('\n', (FILE)); \ } *************** int switch_table_difference_label_flag; *** 93,102 **** #undef ASM_GENERATE_INTERNAL_LABEL #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ if (flag_pic && !strcmp(PREFIX,"LC")) \ ! sprintf (LABEL, "*%s%%%d", PREFIX, NUM); \ else \ ! sprintf (LABEL, "*%s%s%d", LOCAL_LABEL_PREFIX, PREFIX, NUM) #undef ASM_OUTPUT_INTERNAL_LABEL #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \ --- 93,104 ---- #undef ASM_GENERATE_INTERNAL_LABEL #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ + do { \ if (flag_pic && !strcmp(PREFIX,"LC")) \ ! sprintf (LABEL, "*%s%%%ld", PREFIX, (long)(NUM)); \ else \ ! sprintf (LABEL, "*%s%s%ld", LOCAL_LABEL_PREFIX, PREFIX, (long)(NUM)); \ ! } while (0) #undef ASM_OUTPUT_INTERNAL_LABEL #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \ diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/aux-crt2.asm gcc-3.1/gcc/config/m68k/aux-crt2.asm *** gcc-3.0.4/gcc/config/m68k/aux-crt2.asm Wed Dec 16 21:06:15 1998 --- gcc-3.1/gcc/config/m68k/aux-crt2.asm Sat Mar 3 03:32:02 2001 *************** *** 1,6 **** /* More startup code for A/UX */ ! #include "tm.h" #ifdef USE_BIN_AS file "crt2.s" --- 1,6 ---- /* More startup code for A/UX */ ! #include "tconfig.h" #ifdef USE_BIN_AS file "crt2.s" diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/aux-crtn.asm gcc-3.1/gcc/config/m68k/aux-crtn.asm *** gcc-3.0.4/gcc/config/m68k/aux-crtn.asm Wed Dec 16 21:06:17 1998 --- gcc-3.1/gcc/config/m68k/aux-crtn.asm Sat Mar 3 03:32:02 2001 *************** *** 1,6 **** /* More startup code for A/UX */ ! #include "tm.h" #ifdef USE_BIN_AS file "crtn.s" --- 1,6 ---- /* More startup code for A/UX */ ! #include "tconfig.h" #ifdef USE_BIN_AS file "crtn.s" diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/aux-exit.c gcc-3.1/gcc/config/m68k/aux-exit.c *** gcc-3.0.4/gcc/config/m68k/aux-exit.c Mon May 15 23:14:16 2000 --- gcc-3.1/gcc/config/m68k/aux-exit.c Thu Nov 1 14:49:32 2001 *************** struct atexit_fn_block *** 47,53 **** }; ! /* staticly allocate the first block */ static struct atexit_fn_block atexit_fns; static struct atexit_fn_block *current_block = &atexit_fns; --- 47,53 ---- }; ! /* statically allocate the first block */ static struct atexit_fn_block atexit_fns; static struct atexit_fn_block *current_block = &atexit_fns; *************** void exit(int status) *** 84,90 **** if (block == &atexit_fns) break; /* I know what you are thinking -- we are about to exit, why free? ! Because it is friendly to memory leak detectors, that's why. */ old_block = block; block = block->next; free(old_block); --- 84,90 ---- if (block == &atexit_fns) break; /* I know what you are thinking -- we are about to exit, why free? ! Because it is friendly to memory leak detectors, that's why. */ old_block = block; block = block->next; free(old_block); diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/aux-mcount.c gcc-3.1/gcc/config/m68k/aux-mcount.c *** gcc-3.0.4/gcc/config/m68k/aux-mcount.c Mon May 15 23:14:16 2000 --- gcc-3.1/gcc/config/m68k/aux-mcount.c Sat Mar 3 03:32:02 2001 *************** Boston, MA 02111-1307, USA. */ *** 37,48 **** #error This file uses GNU C extensions #endif #include - #ifdef IN_GCC - #include "tm.h" - #endif - struct cnt *_countbase; #ifdef FUNCTION_PROFILER_SYMBOL --- 37,45 ---- #error This file uses GNU C extensions #endif + #include "tconfig.h" #include struct cnt *_countbase; #ifdef FUNCTION_PROFILER_SYMBOL diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/auxas.h gcc-3.1/gcc/config/m68k/auxas.h *** gcc-3.0.4/gcc/config/m68k/auxas.h Mon Sep 25 13:22:45 2000 --- gcc-3.1/gcc/config/m68k/auxas.h Mon Dec 17 15:05:34 2001 *************** Boston, MA 02111-1307, USA. */ *** 38,58 **** #define NO_DOLLAR_IN_LABEL #define NO_DOT_IN_LABEL #undef TEXT_SECTION_ASM_OP #define TEXT_SECTION_ASM_OP "\ttext" #undef DATA_SECTION_ASM_OP #define DATA_SECTION_ASM_OP "\tdata\t1" - #undef BYTE_ASM_OP - #define BYTE_ASM_OP "\tbyte\t" - - #undef WORD_ASM_OP - #define WORD_ASM_OP "\tshort\t" - - #undef LONG_ASM_OP - #define LONG_ASM_OP "\tlong\t" - #undef SPACE_ASM_OP #define SPACE_ASM_OP "\tspace\t" --- 38,52 ---- #define NO_DOLLAR_IN_LABEL #define NO_DOT_IN_LABEL + #undef INT_OP_GROUP + #define INT_OP_GROUP INT_OP_NO_DOT + #undef TEXT_SECTION_ASM_OP #define TEXT_SECTION_ASM_OP "\ttext" #undef DATA_SECTION_ASM_OP #define DATA_SECTION_ASM_OP "\tdata\t1" #undef SPACE_ASM_OP #define SPACE_ASM_OP "\tspace\t" *************** Boston, MA 02111-1307, USA. */ *** 74,86 **** #undef LOCAL_LABEL_PREFIX #define LOCAL_LABEL_PREFIX "L%" ! #define ADDITIONAL_REGISTER_NAMES { "%a6", 14, "%a7", 15 } ! ! #undef ASM_OUTPUT_INT ! #define ASM_OUTPUT_INT(FILE,VALUE) \ ! ( fprintf ((FILE), "%s", LONG_ASM_OP), \ ! output_addr_const ((FILE), (VALUE)), \ ! fprintf ((FILE), "\n")) #undef ASM_OUTPUT_COMMON #define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED) \ --- 68,74 ---- #undef LOCAL_LABEL_PREFIX #define LOCAL_LABEL_PREFIX "L%" ! #define ADDITIONAL_REGISTER_NAMES { {"%a6", 14}, {"%a7", 15} } #undef ASM_OUTPUT_COMMON #define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED) \ *************** do { fprintf (asm_out_file, "\tdef\t"); *** 180,186 **** #define ASM_OUTPUT_SOURCE_LINE(FILE, LINE) \ fprintf((FILE), "\tln\t%d\n", \ (sdb_begin_function_line > 1 ? \ ! last_linenum - sdb_begin_function_line : 1)) #define ASM_MOV_INSN "mov.l" --- 168,174 ---- #define ASM_OUTPUT_SOURCE_LINE(FILE, LINE) \ fprintf((FILE), "\tln\t%d\n", \ (sdb_begin_function_line > 1 ? \ ! (LINE) - sdb_begin_function_line : 1)) #define ASM_MOV_INSN "mov.l" diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/auxgas.h gcc-3.1/gcc/config/m68k/auxgas.h *** gcc-3.0.4/gcc/config/m68k/auxgas.h Mon Apr 16 18:25:49 2001 --- gcc-3.1/gcc/config/m68k/auxgas.h Mon Nov 19 18:30:03 2001 *************** Boston, MA 02111-1307, USA. */ *** 32,45 **** fprintf (FILE, "\t.ident \"%s\"\n", NAME); #ifdef USE_COLLECT2 - #undef ASM_OUTPUT_CONSTRUCTOR - #undef ASM_OUTPUT_DESTRUCTOR /* for the sake of link-level compatibility with /bin/as version */ #define NO_DOLLAR_IN_LABEL #define NO_DOT_IN_LABEL #endif ! #define ADDITIONAL_REGISTER_NAMES { "%fp", 14, "%a7", 15 } #define ASM_MOV_INSN "movel" --- 32,43 ---- fprintf (FILE, "\t.ident \"%s\"\n", NAME); #ifdef USE_COLLECT2 /* for the sake of link-level compatibility with /bin/as version */ #define NO_DOLLAR_IN_LABEL #define NO_DOT_IN_LABEL #endif ! #define ADDITIONAL_REGISTER_NAMES { {"%fp", 14}, {"%a7", 15} } #define ASM_MOV_INSN "movel" diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/ccur-GAS.h gcc-3.1/gcc/config/m68k/ccur-GAS.h *** gcc-3.0.4/gcc/config/m68k/ccur-GAS.h Mon May 1 17:24:23 2000 --- gcc-3.1/gcc/config/m68k/ccur-GAS.h Thu Nov 1 14:49:32 2001 *************** Boston, MA 02111-1307, USA. */ *** 59,68 **** #undef TARGET_VERSION #define TARGET_VERSION fprintf (stderr, " (68k, GNU GAS syntax)"); ! /* Discard internal local symbols beginning with 'L'. */ #define LINK_SPEC "-X" ! /* Every structure or union's size must be a multiple of 4 bytes. */ #define STRUCTURE_SIZE_BOUNDARY 16 /* No data type wants to be aligned rounder than this. */ --- 59,68 ---- #undef TARGET_VERSION #define TARGET_VERSION fprintf (stderr, " (68k, GNU GAS syntax)"); ! /* Discard internal local symbols beginning with 'L'. */ #define LINK_SPEC "-X" ! /* Every structure or union's size must be a multiple of 4 bytes. */ #define STRUCTURE_SIZE_BOUNDARY 16 /* No data type wants to be aligned rounder than this. */ *************** Boston, MA 02111-1307, USA. */ *** 81,87 **** #undef FUNCTION_BOUNDARY #define FUNCTION_BOUNDARY 32 ! /* Make strings long-word aligned so dhrystones will run faster. */ #define CONSTANT_ALIGNMENT(EXP, ALIGN) \ (TREE_CODE (EXP) == STRING_CST \ && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN)) --- 81,87 ---- #undef FUNCTION_BOUNDARY #define FUNCTION_BOUNDARY 32 ! /* Make strings long-word aligned so dhrystones will run faster. */ #define CONSTANT_ALIGNMENT(EXP, ALIGN) \ (TREE_CODE (EXP) == STRING_CST \ && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN)) diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/coff.h gcc-3.1/gcc/config/m68k/coff.h *** gcc-3.0.4/gcc/config/m68k/coff.h Mon Sep 25 13:22:45 2000 --- gcc-3.1/gcc/config/m68k/coff.h Thu Nov 15 17:55:27 2001 *************** Boston, MA 02111-1307, USA. */ *** 100,174 **** #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ asm_output_aligned_bss ((FILE), (DECL), (NAME), (SIZE), (ALIGN)) ! /* Support generic sections */ ! ! #undef ASM_OUTPUT_SECTION_NAME ! #define ASM_OUTPUT_SECTION_NAME(FILE, DECL, NAME, RELOC) \ ! fprintf((FILE), ".section\t%s,\"%c\"\n", (NAME), \ ! (DECL) && (TREE_CODE (DECL) == FUNCTION_DECL || \ ! DECL_READONLY_SECTION (DECL, RELOC)) ? 'x' : 'd') ! ! /* Support the ctors and dtors sections for g++. */ ! ! #define CTORS_SECTION_ASM_OP "\t.section\t.ctors,\"x\"" ! #define DTORS_SECTION_ASM_OP "\t.section\t.dtors,\"x\"" ! ! /* A list of other sections which the compiler might be "in" at any ! given time. */ ! ! #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_ctors, in_dtors ! ! /* A list of extra section function definitions. */ ! ! #undef EXTRA_SECTION_FUNCTIONS ! #define EXTRA_SECTION_FUNCTIONS \ ! CTORS_SECTION_FUNCTION \ ! DTORS_SECTION_FUNCTION ! ! #define CTORS_SECTION_FUNCTION \ ! void \ ! ctors_section () \ ! { \ ! if (in_section != in_ctors) \ ! { \ ! fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP); \ ! in_section = in_ctors; \ ! } \ ! } ! ! #define DTORS_SECTION_FUNCTION \ ! void \ ! dtors_section () \ ! { \ ! if (in_section != in_dtors) \ ! { \ ! fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP); \ ! in_section = in_dtors; \ ! } \ ! } ! ! #define INT_ASM_OP "\t.long\t" ! ! /* A C statement (sans semicolon) to output an element in the table of ! global constructors. */ ! #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ ! do { \ ! ctors_section (); \ ! fprintf (FILE, "%s", INT_ASM_OP); \ ! assemble_name (FILE, NAME); \ ! fprintf (FILE, "\n"); \ ! } while (0) ! ! /* A C statement (sans semicolon) to output an element in the table of ! global destructors. */ ! #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \ ! do { \ ! dtors_section (); \ ! fprintf (FILE, "%s", INT_ASM_OP); \ ! assemble_name (FILE, NAME); \ ! fprintf (FILE, "\n"); \ ! } while (0) /* Don't assume anything about startfiles. */ --- 100,108 ---- #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ asm_output_aligned_bss ((FILE), (DECL), (NAME), (SIZE), (ALIGN)) ! /* Switch into a generic section. */ ! #undef TARGET_ASM_NAMED_SECTION ! #define TARGET_ASM_NAMED_SECTION m68k_coff_asm_named_section /* Don't assume anything about startfiles. */ diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/crds.h gcc-3.1/gcc/config/m68k/crds.h *** gcc-3.0.4/gcc/config/m68k/crds.h Mon Apr 16 18:25:49 2001 --- gcc-3.1/gcc/config/m68k/crds.h Thu Dec 20 17:36:36 2001 *************** Boston, MA 02111-1307, USA. */ *** 86,92 **** #define NEED_PROBE (-2048) #endif ! /* use memcpy, memset instead of bcopy, etc. */ #define TARGET_MEM_FUNCTIONS --- 86,92 ---- #define NEED_PROBE (-2048) #endif ! /* use memcpy, memset instead of bcopy, etc. */ #define TARGET_MEM_FUNCTIONS *************** Boston, MA 02111-1307, USA. */ *** 155,169 **** #undef IMMEDIATE_PREFIX #define IMMEDIATE_PREFIX "$" - /* This is how to output an assembler line defining a `double' constant. */ - - #undef ASM_OUTPUT_DOUBLE - #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - do { long l[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE (VALUE, l); \ - fprintf (FILE, "\t.long 0x%x, 0x%x\n", l[0], l[1]); \ - } while (0) - /*unos has no .skip :-( */ #undef ASM_OUTPUT_SKIP #define ASM_OUTPUT_SKIP(FILE,SIZE) \ --- 155,160 ---- *************** do { long l[2]; \ *** 196,204 **** #undef ASM_OUTPUT_ASCII #define ASM_OUTPUT_ASCII(FILE, P , SIZE) \ ! do { int i; \ fprintf ((FILE), "\t.ascii \""); \ ! for (i = 0; i < (SIZE); i++) \ { \ register int c = (P)[i]; \ if (i != 0 && (i / 200) * 200 == i) \ --- 187,195 ---- #undef ASM_OUTPUT_ASCII #define ASM_OUTPUT_ASCII(FILE, P , SIZE) \ ! do { size_t i, limit = (SIZE); \ fprintf ((FILE), "\t.ascii \""); \ ! for (i = 0; i < limit; i++) \ { \ register int c = (P)[i]; \ if (i != 0 && (i / 200) * 200 == i) \ *************** do { int i; \ *** 258,264 **** or print pair of registers as rx:ry. 'y' for a FPA insn (print pair of registers as rx:ry). This also outputs CONST_DOUBLE's as SunFPA constant RAM registers if ! possible, so it should not be used except for the SunFPA. */ #undef PRINT_OPERAND_PUNCT_VALID_P #define PRINT_OPERAND_PUNCT_VALID_P(CODE) \ --- 249,255 ---- or print pair of registers as rx:ry. 'y' for a FPA insn (print pair of registers as rx:ry). This also outputs CONST_DOUBLE's as SunFPA constant RAM registers if ! possible, so it should not be used except for the SunFPA. */ #undef PRINT_OPERAND_PUNCT_VALID_P #define PRINT_OPERAND_PUNCT_VALID_P(CODE) \ *************** do { int i; \ *** 300,306 **** ASM_OUTPUT_FLOAT_OPERAND (CODE, FILE, r); \ else \ { REAL_VALUE_TO_TARGET_SINGLE (r, l); \ ! fprintf (FILE, "$0x%x", l); } } \ else if (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) == DFmode) \ { REAL_VALUE_TYPE r; \ REAL_VALUE_FROM_CONST_DOUBLE (r, X); \ --- 291,297 ---- ASM_OUTPUT_FLOAT_OPERAND (CODE, FILE, r); \ else \ { REAL_VALUE_TO_TARGET_SINGLE (r, l); \ ! fprintf (FILE, "$0x%lx", l); } } \ else if (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) == DFmode) \ { REAL_VALUE_TYPE r; \ REAL_VALUE_FROM_CONST_DOUBLE (r, X); \ *************** do { int i; \ *** 457,618 **** #define ASM_OUTPUT_SOURCE_LINE(FILE, LINENO) \ fprintf (FILE, "\t; ln\t%d\n", \ (sdb_begin_function_line \ ! ? last_linenum - sdb_begin_function_line : 1)) ! ! /* This macro generates the assembly code for function entry. ! FILE is a stdio stream to output the code to. ! SIZE is an int: how many units of temporary storage to allocate. ! Refer to the array `regs_ever_live' to determine which registers ! to save; `regs_ever_live[I]' is nonzero if register number I ! is ever used in the function. This macro is responsible for ! knowing which registers should not be saved even if used. */ ! ! /* Note that the order of the bit mask for fmovem is the opposite ! of the order for movem! */ ! ! #undef FUNCTION_PROLOGUE ! #define FUNCTION_PROLOGUE(FILE, SIZE) \ ! { register int regno; \ ! register int mask = 0; \ ! extern char call_used_regs[]; \ ! int fsize = ((SIZE) + 3) & -4; \ ! /* unos stack probe */ \ ! if ( fsize > 30000 ) { \ ! fprintf (FILE, "\tmovel sp,a0\n"); \ ! fprintf (FILE, "\taddl $-%d,a0\n", 2048 + fsize); \ ! fprintf (FILE, "\ttstb (a0)\n"); \ ! } else { \ ! fprintf (FILE, "\ttstb -%d(sp)\n", 2048 + fsize); \ ! } \ ! if (frame_pointer_needed) \ ! { if (TARGET_68020 || fsize < 0x8000) \ ! fprintf (FILE, "\tlink a6,$%d\n", -fsize); \ ! else \ ! fprintf (FILE, "\tlink a6,$0\n\tsubl $%d,sp\n", fsize); } \ ! else if (fsize) \ ! { \ ! /* Adding negative number is faster on the 68040. */ \ ! if (fsize + 4 < 0x8000) \ ! { \ ! fprintf (FILE, "\tadd.w #%d,sp\n", - (fsize + 4)); \ ! } \ ! else \ ! { \ ! fprintf (FILE, "\tadd.l #%d,sp\n", - (fsize + 4)); \ ! } \ ! } \ ! for (regno = 16; regno < 24; regno++) \ ! if (regs_ever_live[regno] && ! call_used_regs[regno]) \ ! mask |= 1 << (regno - 16); \ ! if ((mask & 0xff) != 0) \ ! fprintf (FILE, "\tfmovem $0x%x,-(sp)\n", mask & 0xff); \ ! mask = 0; \ ! for (regno = 0; regno < 16; regno++) \ ! if (regs_ever_live[regno] && ! call_used_regs[regno]) \ ! mask |= 1 << (15 - regno); \ ! if (frame_pointer_needed) \ ! mask &= ~ (1 << (15-FRAME_POINTER_REGNUM)); \ ! if (exact_log2 (mask) >= 0) \ ! fprintf (FILE, "\tmovel %s,-(sp)\n", reg_names[15 - exact_log2 (mask)]); \ ! else if (mask) fprintf (FILE, "\tmovem $0x%x,-(sp)\n", mask); } /* Must put address in %a0 , not %d0 . -- LGM, 7/15/88 */ /* UNOS ?? */ #undef FUNCTION_PROFILER #define FUNCTION_PROFILER(FILE, LABEL_NO) \ fprintf (FILE, "\tmovl &LP%%%d,%%a0\n\tjsr mcount\n", (LABEL_NO)) - - /* This macro generates the assembly code for function exit, - on machines that need it. If FUNCTION_EPILOGUE is not defined - then individual return instructions are generated for each - return statement. Args are same as for FUNCTION_PROLOGUE. - - The function epilogue should not depend on the current stack pointer! - It should use the frame pointer only. This is mandatory because - of alloca; we also take advantage of it to omit stack adjustments - before returning. */ - - #undef FUNCTION_EPILOGUE - #define FUNCTION_EPILOGUE(FILE, SIZE) \ - { register int regno; \ - register int mask, fmask; \ - register int nregs; \ - int offset, foffset, fpoffset; \ - extern char call_used_regs[]; \ - int fsize = ((SIZE) + 3) & -4; \ - int big = 0; \ - nregs = 0; fmask = 0; fpoffset = 0; \ - for (regno = 16; regno < 24; regno++) \ - if (regs_ever_live[regno] && ! call_used_regs[regno]) \ - { nregs++; fmask |= 1 << (23 - regno); } \ - foffset = fpoffset + nregs * 12; \ - nregs = 0; mask = 0; \ - if (frame_pointer_needed) regs_ever_live[FRAME_POINTER_REGNUM] = 0; \ - for (regno = 0; regno < 16; regno++) \ - if (regs_ever_live[regno] && ! call_used_regs[regno]) \ - { nregs++; mask |= 1 << regno; } \ - offset = foffset + nregs * 4; \ - if (offset + fsize >= 0x8000 \ - && frame_pointer_needed \ - && (mask || fmask || fpoffset)) \ - { fprintf (FILE, "\tmovel $%d,a0\n", -fsize); \ - fsize = 0, big = 1; } \ - if (exact_log2 (mask) >= 0) { \ - if (big) \ - fprintf (FILE, "\tmovel -%d(a6,a0.l),%s\n", \ - offset + fsize, reg_names[exact_log2 (mask)]); \ - else if (! frame_pointer_needed) \ - fprintf (FILE, "\tmovel (sp)+,%s\n", \ - reg_names[exact_log2 (mask)]); \ - else \ - fprintf (FILE, "\tmovel -%d(a6),%s\n", \ - offset + fsize, reg_names[exact_log2 (mask)]); } \ - else if (mask) { \ - if (big) \ - fprintf (FILE, "\tmovem -%d(a6,a0.l),$0x%x\n", \ - offset + fsize, mask); \ - else if (! frame_pointer_needed) \ - fprintf (FILE, "\tmovem (sp)+,$0x%x\n", mask); \ - else \ - fprintf (FILE, "\tmovem -%d(a6),$0x%x\n", \ - offset + fsize, mask); } \ - if (fmask) { \ - if (big) \ - fprintf (FILE, "\tfmovem -%d(a6,a0.l),$0x%x\n", \ - foffset + fsize, fmask); \ - else if (! frame_pointer_needed) \ - fprintf (FILE, "\tfmovem (sp)+,$0x%x\n", fmask); \ - else \ - fprintf (FILE, "\tfmovem -%d(a6),$0x%x\n", \ - foffset + fsize, fmask); } \ - if (fpoffset != 0) \ - for (regno = 55; regno >= 24; regno--) \ - if (regs_ever_live[regno] && ! call_used_regs[regno]) { \ - if (big) \ - fprintf(FILE, "\tfpmoved -%d(a6,a0.l), %s\n", \ - fpoffset + fsize, reg_names[regno]); \ - else if (! frame_pointer_needed) \ - fprintf(FILE, "\tfpmoved (sp)+, %s\n", \ - reg_names[regno]); \ - else \ - fprintf(FILE, "\tfpmoved -%d(a6), %s\n", \ - fpoffset + fsize, reg_names[regno]); \ - fpoffset -= 8; \ - } \ - if (frame_pointer_needed) \ - fprintf (FILE, "\tunlk a6\n"); \ - else if (fsize) \ - { \ - if (fsize + 4 < 0x8000) \ - { \ - fprintf (FILE, "\tadd.w #%d,sp\n", fsize + 4); \ - } \ - else \ - { \ - fprintf (FILE, "\tadd.l #%d,sp\n", fsize + 4); \ - } \ - } \ - if (current_function_pops_args) \ - fprintf (FILE, "\trtd $%d\n", current_function_pops_args); \ - else fprintf (FILE, "\trts\n"); } - --- 448,457 ---- #define ASM_OUTPUT_SOURCE_LINE(FILE, LINENO) \ fprintf (FILE, "\t; ln\t%d\n", \ (sdb_begin_function_line \ ! ? (LINENO) - sdb_begin_function_line : 1)) /* Must put address in %a0 , not %d0 . -- LGM, 7/15/88 */ /* UNOS ?? */ #undef FUNCTION_PROFILER #define FUNCTION_PROFILER(FILE, LABEL_NO) \ fprintf (FILE, "\tmovl &LP%%%d,%%a0\n\tjsr mcount\n", (LABEL_NO)) diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/dpx2.h gcc-3.1/gcc/config/m68k/dpx2.h *** gcc-3.0.4/gcc/config/m68k/dpx2.h Thu Nov 2 23:29:10 2000 --- gcc-3.1/gcc/config/m68k/dpx2.h Thu Dec 20 17:36:36 2001 *************** Boston, MA 02111-1307, USA. */ *** 31,36 **** --- 31,56 ---- #undef SELECT_RTX_SECTION #include "svr3.h" + #undef INT_OP_GROUP + #define INT_OP_GROUP INT_OP_DC + + /* We use collect2 instead of ctors_section constructors. */ + #undef INIT_SECTION_ASM_OP + #undef FINI_SECTION_ASM_OP + #undef DTORS_SECTION_ASM_OP + #undef DO_GLOBAL_CTORS_BODY + + /* Remove handling for a separate constant data section. We put + constant data in text_section, which is the default. */ + #undef SELECT_SECTION + #undef SELECT_RTX_SECTION + #undef EXTRA_SECTIONS + #undef EXTRA_SECTION_FUNCTIONS + #undef CONST_SECTION_ASM_OP + #undef READONLY_DATA_SECTION + + #define DPX2 + /* See m68k.h. 7 means 68020 with 68881. * We really have 68030 and 68882, * but this will get us going. *************** Boston, MA 02111-1307, USA. */ *** 82,105 **** /* The native assembler doesn't support fmovecr. */ #define NO_ASM_FMOVECR - #undef EXTRA_SECTIONS - #undef EXTRA_SECTION_FUNCTIONS - #undef READONLY_DATA_SECTION - #define READONLY_DATA_SECTION data_section - #undef SELECT_SECTION - #undef SELECT_RTX_SECTION - #define fini_section() while (0) - - #undef CTORS_SECTION_ASM_OP - #define CTORS_SECTION_ASM_OP "\tsection 15" - #undef DTORS_SECTION_ASM_OP - #define DTORS_SECTION_ASM_OP "\tsection 15" - #undef INIT_SECTION_ASM_OP - #define BSS_SECTION_ASM_OP "\tsection 14" #undef TEXT_SECTION_ASM_OP ! #define TEXT_SECTION_ASM_OP "\tsection 10" #undef DATA_SECTION_ASM_OP ! #define DATA_SECTION_ASM_OP "\tsection 15" /* Don't try using XFmode. */ --- 102,112 ---- /* The native assembler doesn't support fmovecr. */ #define NO_ASM_FMOVECR #undef TEXT_SECTION_ASM_OP ! #define TEXT_SECTION_ASM_OP "\tsection 10" #undef DATA_SECTION_ASM_OP ! #define DATA_SECTION_ASM_OP "\tsection 15" ! #define BSS_SECTION_ASM_OP "\tsection 14" /* Don't try using XFmode. */ *************** Boston, MA 02111-1307, USA. */ *** 108,127 **** /* Define if you don't want extended real, but do want to use the software floating point emulator for REAL_ARITHMETIC and ! decimal <-> binary conversion. */ #define REAL_ARITHMETIC #undef ASM_OUTPUT_SOURCE_FILENAME #define ASM_OUTPUT_SOURCE_FILENAME(FILE, NA) \ do { fprintf ((FILE), "\t.file\t'%s'\n", (NA)); } while (0) - /* Assembler pseudos to introduce constants of various size. */ - - #undef ASM_BYTE_OP - #define ASM_BYTE_OP "\tdc.b\t" - #undef ASM_LONG - #define ASM_LONG "\tdc.l" - /* * we don't seem to support any of: * .globl --- 115,127 ---- /* Define if you don't want extended real, but do want to use the software floating point emulator for REAL_ARITHMETIC and ! decimal <-> binary conversion. */ #define REAL_ARITHMETIC #undef ASM_OUTPUT_SOURCE_FILENAME #define ASM_OUTPUT_SOURCE_FILENAME(FILE, NA) \ do { fprintf ((FILE), "\t.file\t'%s'\n", (NA)); } while (0) /* * we don't seem to support any of: * .globl *************** Boston, MA 02111-1307, USA. */ *** 238,506 **** /* Output type in decimal not in octal as done in sdbout.c */ #define PUT_SDB_TYPE(a) fprintf(asm_out_file, "\t.type\t0%d%s", a, SDB_DELIM) - #undef FUNCTION_PROLOGUE - #define FUNCTION_PROLOGUE(FILE, SIZE) \ - { \ - register int regno; \ - register int mask = 0; \ - int num_saved_regs = 0, first = 1; \ - extern char call_used_regs[]; \ - int fsize = ((SIZE) + 3) & -4; \ - \ - \ - if (frame_pointer_needed) \ - { \ - /* Adding negative number is faster on the 68040. */ \ - if (fsize < 0x8000 && !TARGET_68040) \ - { \ - fprintf (FILE, "\tlink %s,#%d\n", \ - reg_names[FRAME_POINTER_REGNUM], -fsize); \ - } \ - else if (TARGET_68020) \ - { \ - fprintf (FILE, "\tlink %s,#%d\n", \ - reg_names[FRAME_POINTER_REGNUM], -fsize); \ - } \ - else \ - { \ - fprintf (FILE, "\tlink %s,#0\n\tadd.l #%d,sp\n", \ - reg_names[FRAME_POINTER_REGNUM], -fsize); \ - } \ - } \ - else if (fsize) \ - { \ - /* Adding negative number is faster on the 68040. */ \ - if (fsize + 4 < 0x8000) \ - { \ - fprintf (FILE, "\tadd.w #%d,sp\n", - (fsize + 4)); \ - } \ - else \ - { \ - fprintf (FILE, "\tadd.l #%d,sp\n", - (fsize + 4)); \ - } \ - } \ - for (regno = 23; regno >= 16; regno--) \ - if (regs_ever_live[regno] && ! call_used_regs[regno]) \ - if (first) { \ - fprintf (FILE, "\tfmovem.x %s", reg_names[regno]); \ - first = 0; \ - } \ - else fprintf (FILE, "/%s", reg_names[regno]); \ - if (!first) fprintf (FILE, ",-(sp)\n"); \ - \ - mask = 0; \ - for (regno = 0; regno < 16; regno++) \ - if (regs_ever_live[regno] && ! call_used_regs[regno]) \ - { \ - mask |= 1 << (15 - regno); \ - num_saved_regs++; \ - } \ - if (frame_pointer_needed) \ - { \ - mask &= ~ (1 << (15 - FRAME_POINTER_REGNUM)); \ - num_saved_regs--; \ - } \ - \ - \ - if (num_saved_regs <= 2) \ - { \ - /* Store each separately in the same order moveml uses. \ - Using two movel instructions instead of a single moveml \ - is about 15% faster for the 68020 and 68030 at no expense \ - in code size */ \ - \ - int i; \ - \ - /* Undo the work from above. */ \ - for (i = 0; i< 16; i++) \ - if (mask & (1 << i)) \ - fprintf (FILE, "\tmove.l %s,-(sp)\n", reg_names[15 - i]); \ - } \ - else if (mask) \ - { \ - first = 1; \ - for (regno = 0; regno < 16; regno++) \ - if (mask & (1 << regno)) \ - if (first) { \ - fprintf (FILE, "\tmovem.l %s", reg_names[15 - regno]); \ - first = 0; \ - } \ - else fprintf (FILE, "/%s", reg_names[15 - regno]); \ - fprintf (FILE, ",-(sp)\n"); \ - } \ - if (flag_pic && current_function_uses_pic_offset_table) \ - { \ - fprintf (FILE, "\tmove.l #__GLOBAL_OFFSET_TABLE_, %s\n", \ - reg_names[PIC_OFFSET_TABLE_REGNUM]); \ - fprintf (FILE, "\tlea.l (pc,%s.l),%s\n", \ - reg_names[PIC_OFFSET_TABLE_REGNUM], \ - reg_names[PIC_OFFSET_TABLE_REGNUM]); \ - } \ - } - - - #undef FUNCTION_EPILOGUE - #define FUNCTION_EPILOGUE(FILE, SIZE) \ - { \ - register int regno; \ - register int mask, fmask; \ - register int nregs; \ - int offset, foffset, fpoffset, first = 1; \ - extern char call_used_regs[]; \ - int fsize = ((SIZE) + 3) & -4; \ - int big = 0; \ - rtx insn = get_last_insn (); \ - \ - /* If the last insn was a BARRIER, we don't have to write any code. */ \ - if (GET_CODE (insn) == NOTE) \ - insn = prev_nonnote_insn (insn); \ - if (insn && GET_CODE (insn) == BARRIER) \ - { \ - /* Output just a no-op so that debuggers don't get confused \ - about which function the pc is in at this address. */ \ - fprintf (FILE, "\tnop\n"); \ - return; \ - } \ - \ - nregs = 0; fmask = 0; fpoffset = 0; \ - for (regno = 16; regno < 24; regno++) \ - if (regs_ever_live[regno] && ! call_used_regs[regno]) \ - { \ - nregs++; \ - fmask |= 1 << (23 - regno); \ - } \ - foffset = fpoffset + nregs * 12; \ - nregs = 0; mask = 0; \ - if (frame_pointer_needed) \ - regs_ever_live[FRAME_POINTER_REGNUM] = 0; \ - for (regno = 0; regno < 16; regno++) \ - if (regs_ever_live[regno] && ! call_used_regs[regno]) \ - { \ - nregs++; \ - mask |= 1 << regno; \ - } \ - offset = foffset + nregs * 4; \ - if (offset + fsize >= 0x8000 \ - && frame_pointer_needed \ - && (mask || fmask || fpoffset)) \ - { \ - fprintf (FILE, "\tmove.l #%d,a0\n", -fsize); \ - fsize = 0, big = 1; \ - } \ - if (nregs <= 2) \ - { \ - /* Restore each separately in the same order moveml does. \ - Using two movel instructions instead of a single moveml \ - is about 15% faster for the 68020 and 68030 at no expense \ - in code size. */ \ - \ - int i; \ - \ - /* Undo the work from above. */ \ - for (i = 0; i< 16; i++) \ - if (mask & (1 << i)) \ - { \ - if (big) \ - { \ - fprintf (FILE, "\tmove.l -%d(%s,a0.l),%s\n", \ - offset + fsize, \ - reg_names[FRAME_POINTER_REGNUM], \ - reg_names[i]); \ - } \ - else if (! frame_pointer_needed) \ - { \ - fprintf (FILE, "\tmove.l (sp)+,%s\n", \ - reg_names[i]); \ - } \ - else \ - { \ - fprintf (FILE, "\tmove.l -%d(%s),%s\n", \ - offset + fsize, \ - reg_names[FRAME_POINTER_REGNUM], \ - reg_names[i]); \ - } \ - offset = offset - 4; \ - } \ - } \ - else if (mask) \ - { \ - first = 1; \ - for (regno = 0; regno < 16; regno++) \ - if (mask & (1 << regno)) \ - if (first && big) { \ - fprintf (FILE, "\tmovem.l -%d(%s,a0.l),%s", \ - offset + fsize, \ - reg_names[FRAME_POINTER_REGNUM], \ - reg_names[regno]); \ - first = 0; \ - } \ - else if (first && ! frame_pointer_needed) { \ - fprintf (FILE, "\tmovem.l (sp)+,%s", \ - offset + fsize, \ - reg_names[FRAME_POINTER_REGNUM], \ - reg_names[regno]); \ - first = 0; \ - } \ - else if (first) { \ - fprintf (FILE, "\tmovem.l -%d(%s),%s", \ - offset + fsize, \ - reg_names[FRAME_POINTER_REGNUM], \ - reg_names[regno]); \ - first = 0; \ - } \ - else \ - fprintf (FILE, "/%s", reg_names[regno]); \ - fprintf (FILE, "\n"); \ - } \ - if (fmask) \ - { \ - first = 1; \ - for (regno = 16; regno < 24; regno++) \ - if (fmask & (1 << (23 - regno))) \ - if (first && big) { \ - fprintf (FILE, "\tfmovem.x -%d(%s,a0.l),%s", \ - foffset + fsize, \ - reg_names[FRAME_POINTER_REGNUM], \ - reg_names[regno]); \ - first = 0; \ - } \ - else if (first && ! frame_pointer_needed) { \ - fprintf (FILE, "\tfmovem.x (sp)+,%s", \ - foffset + fsize, \ - reg_names[FRAME_POINTER_REGNUM], \ - reg_names[regno]); \ - first = 0; \ - } \ - else if (first) { \ - fprintf (FILE, "\tfmovem.x -%d(%s),%s", \ - foffset + fsize, \ - reg_names[FRAME_POINTER_REGNUM], \ - reg_names[regno]); \ - first = 0; \ - } \ - else fprintf (FILE, "/%s", reg_names[regno]); \ - fprintf (FILE, "\n"); \ - } \ - if (frame_pointer_needed) \ - fprintf (FILE, "\tunlk %s\n", \ - reg_names[FRAME_POINTER_REGNUM]); \ - else if (fsize) \ - { \ - if (fsize + 4 < 0x8000) \ - { \ - fprintf (FILE, "\tadd.w #%d,sp\n", fsize + 4); \ - } \ - else \ - { \ - fprintf (FILE, "\tadd.l #%d,sp\n", fsize + 4); \ - } \ - } \ - if (current_function_pops_args) \ - fprintf (FILE, "\trtd #%d\n", current_function_pops_args); \ - else \ - fprintf (FILE, "\trts\n"); \ - } - /* Translate Motorola opcodes such as `jbeq' into VERSAdos opcodes such as `beq'. Change `fbeq' to `fbseq', `fbne' to `fbsneq'. --- 238,243 ---- *************** Boston, MA 02111-1307, USA. */ *** 532,599 **** } \ } - /* This is how to output a `long double' extended real constant. */ - #undef ASM_OUTPUT_LONG_DOUBLE - #define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \ - do { long l[3]; \ - REAL_VALUE_TO_TARGET_LONG_DOUBLE (VALUE, l); \ - if (sizeof (int) == sizeof (long)) \ - fprintf (FILE, "\tdc.l $%x,$%x,$%x\n", l[0], l[1], l[2]); \ - else \ - fprintf (FILE, "\tdc.l $%lx,$%lx,$%lx\n", l[0], l[1], l[2]); \ - } while (0) - - #undef ASM_OUTPUT_DOUBLE - #if 0 - #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - do { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL (VALUE, "%.20g", dstr); \ - fprintf (FILE, "\tdc.d %s\n", dstr); \ - } while (0) - #endif - #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - do { long l[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE (VALUE, l); \ - fprintf (FILE, "\tdc.l $%x,$%x\n", l[0], l[1]); \ - } while (0) - - - /* This is how to output an assembler line defining a `float' constant. */ - #undef ASM_OUTPUT_FLOAT - #define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - do { long l; \ - REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ - if (sizeof (int) == sizeof (long)) \ - fprintf (FILE, "\tdc.l $%x\n", l); \ - else \ - fprintf (FILE, "\tdc.l $%lx\n", l); \ - } while (0) - - /* This is how to output an assembler line defining an `int' constant. */ - #undef ASM_OUTPUT_INT - #define ASM_OUTPUT_INT(FILE,VALUE) \ - ( fprintf (FILE, "\tdc.l "), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "\n")) - - /* Likewise for `char' and `short' constants. */ - #undef ASM_OUTPUT_SHORT - #define ASM_OUTPUT_SHORT(FILE,VALUE) \ - ( fprintf (FILE, "\tdc.w "), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "\n")) - - #undef ASM_OUTPUT_CHAR - #define ASM_OUTPUT_CHAR(FILE,VALUE) \ - ( fprintf (FILE, "\tdc.b "), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "\n")) - - /* This is how to output an assembler line for a numeric constant byte. */ - #undef ASM_OUTPUT_BYTE - #define ASM_OUTPUT_BYTE(FILE,VALUE) \ - fprintf (FILE, "\tdc.b $%x\n", (VALUE)) - /* This is how to output an element of a case-vector that is absolute. (The 68000 does not use such vectors, but we must define this macro anyway.) */ --- 269,274 ---- *************** do { long l; \ *** 607,613 **** asm_fprintf (FILE, "\tdc.w %LL%d-%LL%d\n", VALUE, REL) /* Currently, JUMP_TABLES_IN_TEXT_SECTION must be defined in order to ! keep switch tables in the text section. */ #define JUMP_TABLES_IN_TEXT_SECTION 1 /* Output a float value (represented as a C double) as an immediate operand. --- 282,288 ---- asm_fprintf (FILE, "\tdc.w %LL%d-%LL%d\n", VALUE, REL) /* Currently, JUMP_TABLES_IN_TEXT_SECTION must be defined in order to ! keep switch tables in the text section. */ #define JUMP_TABLES_IN_TEXT_SECTION 1 /* Output a float value (represented as a C double) as an immediate operand. *************** do { long l; \ *** 626,632 **** long l; \ REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ if (sizeof (int) == sizeof (long)) \ ! asm_fprintf ((FILE), "%I$%x", l); \ else \ asm_fprintf ((FILE), "%I$%lx", l); \ } \ --- 301,307 ---- long l; \ REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ if (sizeof (int) == sizeof (long)) \ ! asm_fprintf ((FILE), "%I$%x", (int) l); \ else \ asm_fprintf ((FILE), "%I$%lx", l); \ } \ diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/dpx2g.h gcc-3.1/gcc/config/m68k/dpx2g.h *** gcc-3.0.4/gcc/config/m68k/dpx2g.h Wed Dec 16 21:06:32 1998 --- gcc-3.1/gcc/config/m68k/dpx2g.h Mon Dec 17 15:05:34 2001 *************** *** 5,71 **** #define USE_GAS #include "m68k/dpx2.h" - #if 0 /* #ifndef USE_COLLECT2 */ - - /* We use set vectors for the constructors/destructors. */ - - #undef ASM_OUTPUT_CONSTRUCTOR - #undef ASM_OUTPUT_DESTRUCTOR - - /* Although the gas we use can create .ctor and .dtor sections from N_SETT - stabs, it does not support section directives, so we need to have the loader - define the lists. - */ - #define CTOR_LISTS_DEFINED_EXTERNALLY - - /* similar to default, but allows for the table defined by ld with gcc.ifile. - nptrs is always 0. So we need to instead check that __DTOR_LIST__[1] != 0. - The old check is left in so that the same macro can be used if and when - a future version of gas does support section directives. */ - - #define DO_GLOBAL_DTORS_BODY {int nptrs = *(int *)__DTOR_LIST__; int i; \ - if (nptrs == -1 || (__DTOR_LIST__[0] == 0 && __DTOR_LIST__[1] != 0)) \ - for (nptrs = 0; __DTOR_LIST__[nptrs + 1] != 0; nptrs++); \ - for (i = nptrs; i >= 1; i--) \ - __DTOR_LIST__[i] (); } - - #undef STARTFILE_SPEC - #define STARTFILE_SPEC \ - "%{!r:gcc.ifile%s}\ - %{pg:gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}}\ - huge.o%s" - - #endif /* !USE_COLLECT2 */ - #undef STARTFILE_SPEC #define STARTFILE_SPEC \ "%{pg:gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}}\ huge.o%s" ! ! /* ! * we are using GAS ! */ ! #undef EXTRA_SECTION_FUNCTIONS ! #undef EXTRA_SECTIONS ! /* Gas understands dollars in labels. */ #undef NO_DOLLAR_IN_LABEL /* GAS does not understand .ident so don't output anything for #ident. */ #undef ASM_OUTPUT_IDENT - #undef ASM_LONG - #define ASM_LONG "\t.long" - - /* - * put const's in the text section - */ - #define const_section() text_section() - #define fini_section() while (0) - - #undef CTORS_SECTION_ASM_OP - #define CTORS_SECTION_ASM_OP "\t.data" - #undef DTORS_SECTION_ASM_OP - #define DTORS_SECTION_ASM_OP "\t.data" - #undef INIT_SECTION_ASM_OP - /* end of dpx2g.h */ --- 5,18 ---- #define USE_GAS #include "m68k/dpx2.h" #undef STARTFILE_SPEC #define STARTFILE_SPEC \ "%{pg:gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}}\ huge.o%s" ! /* Gas understands dollars in labels. */ #undef NO_DOLLAR_IN_LABEL /* GAS does not understand .ident so don't output anything for #ident. */ #undef ASM_OUTPUT_IDENT /* end of dpx2g.h */ diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/hp310.h gcc-3.1/gcc/config/m68k/hp310.h *** gcc-3.0.4/gcc/config/m68k/hp310.h Wed Dec 16 21:06:36 1998 --- gcc-3.1/gcc/config/m68k/hp310.h Thu Nov 1 14:49:32 2001 *************** *** 1,6 **** /* Definitions of target machine for GNU compiler. HP-UX 68010 version. */ ! /* See m68k.h. 0 means 68000 without 68881 and no bitfields. */ #define TARGET_DEFAULT 0 #include "m68k/hp320.h" --- 1,6 ---- /* Definitions of target machine for GNU compiler. HP-UX 68010 version. */ ! /* See m68k.h. 0 means 68000 without 68881 and no bitfields. */ #define TARGET_DEFAULT 0 #include "m68k/hp320.h" diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/hp320.h gcc-3.1/gcc/config/m68k/hp320.h *** gcc-3.0.4/gcc/config/m68k/hp320.h Mon Apr 16 18:25:49 2001 --- gcc-3.1/gcc/config/m68k/hp320.h Thu Dec 20 17:36:36 2001 *************** Boston, MA 02111-1307, USA. */ *** 59,64 **** --- 59,67 ---- #include "m68k/m68k.h" + #undef INT_OP_GROUP + #define INT_OP_GROUP INT_OP_NO_DOT + /* See m68k.h. 7 means 68020 with 68881. */ #ifndef TARGET_DEFAULT *************** Boston, MA 02111-1307, USA. */ *** 79,85 **** /* These definitions differ from those used for GAS by defining __HPUX_ASM__. This is needed because some programs, particularly GDB, need to know which assembler is being used so that the correct `asm' ! instructions can be used. */ #define CPP_SPEC \ "%{!msoft-float:-D__HAVE_68881__ }\ --- 82,88 ---- /* These definitions differ from those used for GAS by defining __HPUX_ASM__. This is needed because some programs, particularly GDB, need to know which assembler is being used so that the correct `asm' ! instructions can be used. */ #define CPP_SPEC \ "%{!msoft-float:-D__HAVE_68881__ }\ *************** Boston, MA 02111-1307, USA. */ *** 133,139 **** #define STRUCTURE_SIZE_BOUNDARY 16 ! /* hpux doesn't use static area for struct returns. */ #undef PCC_STATIC_STRUCT_RETURN /* Generate calls to memcpy, memcmp and memset. */ --- 136,142 ---- #define STRUCTURE_SIZE_BOUNDARY 16 ! /* hpux doesn't use static area for struct returns. */ #undef PCC_STATIC_STRUCT_RETURN /* Generate calls to memcpy, memcmp and memset. */ *************** Boston, MA 02111-1307, USA. */ *** 162,173 **** #undef TEXT_SECTION_ASM_OP #undef DATA_SECTION_ASM_OP #undef READONLY_DATA_SECTION - #undef ASM_OUTPUT_DOUBLE - #undef ASM_OUTPUT_FLOAT - #undef ASM_OUTPUT_INT - #undef ASM_OUTPUT_SHORT - #undef ASM_OUTPUT_CHAR - #undef ASM_OUTPUT_BYTE #undef ASM_OUTPUT_ADDR_VEC_ELT #undef ASM_OUTPUT_ADDR_DIFF_ELT #undef ASM_OUTPUT_ALIGN --- 165,170 ---- *************** do{ if (PREFIX[0] == 'L' && PREFIX[1] = *** 267,315 **** fprintf (FILE, "%s%d:\n", PREFIX, NUM); \ } while(0) - #define ASM_OUTPUT_DOUBLE(FILE, VALUE) \ - do { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL (VALUE, "%.20g", dstr); \ - fprintf (FILE, "\tdouble 0f%s\n", dstr); \ - } while (0) - - #define ASM_OUTPUT_FLOAT(FILE, VALUE) \ - do { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL (VALUE, "%.9g", dstr); \ - fprintf (FILE, "\tfloat 0f%s\n", dstr); \ - } while (0) - - #undef ASM_OUTPUT_LONG_DOUBLE - #define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \ - do { long l[3]; \ - REAL_VALUE_TO_TARGET_LONG_DOUBLE (VALUE, l); \ - fprintf (FILE, "\tlong 0x%x,0x%x,0x%x\n", l[0], l[1], l[2]); \ - } while (0) - - /* This is how to output an assembler line defining an `int' constant. */ - - #define ASM_OUTPUT_INT(FILE,VALUE) \ - ( fprintf (FILE, "\tlong "), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "\n")) - - /* Likewise for `char' and `short' constants. */ - - #define ASM_OUTPUT_SHORT(FILE,VALUE) \ - ( fprintf (FILE, "\tshort "), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "\n")) - - #define ASM_OUTPUT_CHAR(FILE,VALUE) \ - ( fprintf (FILE, "\tbyte "), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "\n")) - - /* This is how to output an assembler line for a numeric constant byte. */ - - #define ASM_OUTPUT_BYTE(FILE,VALUE) \ - fprintf (FILE, "\tbyte 0x%x\n", (VALUE)) - #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ fprintf (FILE, "\tlong L%d\n", VALUE) --- 264,269 ---- *************** do { long l[3]; \ *** 317,326 **** fprintf (FILE, "\tshort L%d-L%d\n", VALUE, REL) #define ASM_OUTPUT_ALIGN(FILE,LOG) \ if ((LOG) == 1) \ fprintf (FILE, "\tlalign 2\n"); \ else if ((LOG) != 0) \ ! abort (); #define ASM_OUTPUT_SKIP(FILE,SIZE) \ fprintf (FILE, "\tspace %u\n", (SIZE)) --- 271,282 ---- fprintf (FILE, "\tshort L%d-L%d\n", VALUE, REL) #define ASM_OUTPUT_ALIGN(FILE,LOG) \ + do { \ if ((LOG) == 1) \ fprintf (FILE, "\tlalign 2\n"); \ else if ((LOG) != 0) \ ! abort (); \ ! } while (0) #define ASM_OUTPUT_SKIP(FILE,SIZE) \ fprintf (FILE, "\tspace %u\n", (SIZE)) *************** do { long l[3]; \ *** 547,557 **** output_addr_const (FILE, addr); \ }} ! #define ASM_OUTPUT_ASCII(f, p, size) \ ! do { register int i; \ int inside; \ inside = FALSE; \ ! for (i = 0; i < (size); i++) { \ if (i % 8 == 0) { \ if (i != 0) { \ if (inside) \ --- 503,513 ---- output_addr_const (FILE, addr); \ }} ! #define ASM_OUTPUT_ASCII(f, p, SIZE) \ ! do { size_t i, limit = (SIZE); \ int inside; \ inside = FALSE; \ ! for (i = 0; i < limit; i++) { \ if (i % 8 == 0) { \ if (i != 0) { \ if (inside) \ *************** do { register int i; \ *** 621,634 **** #endif /* not HPUX_ASM */ /* In m68k svr4, a symbol_ref rtx can be a valid PIC operand if it is an ! operand of a function call. */ #undef LEGITIMATE_PIC_OPERAND_P #define LEGITIMATE_PIC_OPERAND_P(X) \ ((! symbolic_operand (X, VOIDmode) \ ! && ! (GET_CODE (X) == CONST_DOUBLE && CONST_DOUBLE_MEM (X) \ ! && GET_CODE (CONST_DOUBLE_MEM (X)) == MEM \ ! && symbolic_operand (XEXP (CONST_DOUBLE_MEM (X), 0), VOIDmode))) \ ! || (GET_CODE (X) == SYMBOL_REF && SYMBOL_REF_FLAG (X)) \ || PCREL_GENERAL_OPERAND_OK) /* hpux8 and later have C++ compatible include files, so do not --- 577,591 ---- #endif /* not HPUX_ASM */ /* In m68k svr4, a symbol_ref rtx can be a valid PIC operand if it is an ! operand of a function call. */ #undef LEGITIMATE_PIC_OPERAND_P #define LEGITIMATE_PIC_OPERAND_P(X) \ ((! symbolic_operand (X, VOIDmode) \ ! && ! (GET_CODE (X) == CONST_DOUBLE && mem_for_const_double (X) != 0 \ ! && GET_CODE (mem_for_const_double (X)) == MEM \ ! && symbolic_operand (XEXP (mem_for_const_double (X), 0), \ ! VOIDmode))) \ ! || (GET_CODE (X) == SYMBOL_REF && SYMBOL_REF_FLAG (X)) \ || PCREL_GENERAL_OPERAND_OK) /* hpux8 and later have C++ compatible include files, so do not diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/isi.h gcc-3.1/gcc/config/m68k/isi.h *** gcc-3.0.4/gcc/config/m68k/isi.h Thu Nov 2 23:29:10 2000 --- gcc-3.1/gcc/config/m68k/isi.h Thu Nov 1 14:49:32 2001 *************** Boston, MA 02111-1307, USA. */ *** 21,27 **** #include "m68k/m68k.h" ! /* See m68k.h. 7 means 68020 with 68881. */ #ifndef TARGET_DEFAULT #define TARGET_DEFAULT (MASK_BITFIELD|MASK_68881|MASK_68020) #endif --- 21,27 ---- #include "m68k/m68k.h" ! /* See m68k.h. 7 means 68020 with 68881. */ #ifndef TARGET_DEFAULT #define TARGET_DEFAULT (MASK_BITFIELD|MASK_68881|MASK_68020) #endif diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/lb1sf68.asm gcc-3.1/gcc/config/m68k/lb1sf68.asm *** gcc-3.0.4/gcc/config/m68k/lb1sf68.asm Mon Mar 1 15:06:44 1999 --- gcc-3.1/gcc/config/m68k/lb1sf68.asm Thu May 17 03:16:01 2001 *************** *** 1,4 **** ! /* libgcc1 routines for 68000 w/o floating-point hardware. Copyright (C) 1994, 1996, 1997, 1998 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- ! /* libgcc routines for 68000 w/o floating-point hardware. Copyright (C) 1994, 1996, 1997, 1998 Free Software Foundation, Inc. This file is part of GNU CC. diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/linux-aout.h gcc-3.1/gcc/config/m68k/linux-aout.h *** gcc-3.0.4/gcc/config/m68k/linux-aout.h Mon Jul 30 21:32:28 2001 --- gcc-3.1/gcc/config/m68k/linux-aout.h Mon Apr 15 20:27:31 2002 *************** *** 1,5 **** /* Definitions for Motorola m68k running Linux-based GNU systems. ! Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,5 ---- /* Definitions for Motorola m68k running Linux-based GNU systems. ! Copyright (C) 1995, 1996, 1997, 2002 Free Software Foundation, Inc. This file is part of GNU CC. *************** Boston, MA 02111-1307, USA. */ *** 29,35 **** #define ASM_COMMENT_START "|" #define CPP_PREDEFINES \ ! "-Dunix -Dmc68000 -Dmc68020 -Dlinux -Asystem=unix -Asystem=posix -Acpu=m68k -Amachine=m68k" #undef CPP_SPEC #if TARGET_DEFAULT & MASK_68881 --- 29,35 ---- #define ASM_COMMENT_START "|" #define CPP_PREDEFINES \ ! "-Dunix -Dmc68000 -Dmc68020 -D__gnu_linux__ -Dlinux -Asystem=unix -Asystem=posix -Acpu=m68k -Amachine=m68k" #undef CPP_SPEC #if TARGET_DEFAULT & MASK_68881 diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/linux.h gcc-3.1/gcc/config/m68k/linux.h *** gcc-3.0.4/gcc/config/m68k/linux.h Mon Jul 30 21:32:28 2001 --- gcc-3.1/gcc/config/m68k/linux.h Mon Apr 15 20:27:31 2002 *************** *** 1,6 **** /* Definitions for Motorola 68k running Linux-based GNU systems with ELF format. ! Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,6 ---- /* Definitions for Motorola 68k running Linux-based GNU systems with ELF format. ! Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc. This file is part of GNU CC. *************** Boston, MA 02111-1307, USA. */ *** 23,33 **** #define MOTOROLA /* Use Motorola syntax */ #define USE_GAS /* But GAS wants jbsr instead of jsr */ #include ! /* Make sure CC1 is undefined. */ #undef CC1_SPEC #include /* some common stuff */ #undef TARGET_VERSION --- 23,37 ---- #define MOTOROLA /* Use Motorola syntax */ #define USE_GAS /* But GAS wants jbsr instead of jsr */ + /* TODO: convert includes to ${tm_file} list in config.gcc. */ #include ! /* Make sure CC1 is undefined. */ #undef CC1_SPEC + #include "dbxelf.h" + #include "elfos.h" + #include "svr4.h" #include /* some common stuff */ #undef TARGET_VERSION *************** Boston, MA 02111-1307, USA. */ *** 58,69 **** #define REGISTER_PREFIX "%" /* The prefix for local (compiler generated) labels. ! These labels will not appear in the symbol table. */ #undef LOCAL_LABEL_PREFIX #define LOCAL_LABEL_PREFIX "." ! /* The prefix to add to user-visible assembler symbols. */ #undef USER_LABEL_PREFIX #define USER_LABEL_PREFIX "" --- 62,73 ---- #define REGISTER_PREFIX "%" /* The prefix for local (compiler generated) labels. ! These labels will not appear in the symbol table. */ #undef LOCAL_LABEL_PREFIX #define LOCAL_LABEL_PREFIX "." ! /* The prefix to add to user-visible assembler symbols. */ #undef USER_LABEL_PREFIX #define USER_LABEL_PREFIX "" *************** Boston, MA 02111-1307, USA. */ *** 72,78 **** /* How to refer to registers in assembler output. This sequence is indexed by compiler's hard-register-number. ! Motorola format uses different register names than defined in m68k.h. */ #undef REGISTER_NAMES --- 76,82 ---- /* How to refer to registers in assembler output. This sequence is indexed by compiler's hard-register-number. ! Motorola format uses different register names than defined in m68k.h. */ #undef REGISTER_NAMES *************** Boston, MA 02111-1307, USA. */ *** 109,115 **** #define WCHAR_TYPE_SIZE BITS_PER_WORD #define CPP_PREDEFINES \ ! "-D__ELF__ -Dunix -Dmc68000 -Dmc68020 -Dlinux -Asystem=unix -Asystem=posix -Acpu=m68k -Amachine=m68k" #undef CPP_SPEC #ifdef USE_GNULIBC_1 --- 113,119 ---- #define WCHAR_TYPE_SIZE BITS_PER_WORD #define CPP_PREDEFINES \ ! "-D__ELF__ -Dunix -Dmc68000 -Dmc68020 -D__gnu_linux__ -Dlinux -Asystem=unix -Asystem=posix -Acpu=m68k -Amachine=m68k" #undef CPP_SPEC #ifdef USE_GNULIBC_1 *************** Boston, MA 02111-1307, USA. */ *** 151,157 **** When the -shared link option is used a final link is not being done. */ ! /* If ELF is the default format, we should not use /lib/elf. */ #undef LINK_SPEC #ifdef USE_GNULIBC_1 --- 155,161 ---- When the -shared link option is used a final link is not being done. */ ! /* If ELF is the default format, we should not use /lib/elf. */ #undef LINK_SPEC #ifdef USE_GNULIBC_1 *************** Boston, MA 02111-1307, USA. */ *** 266,272 **** function. VALTYPE is the data type of the value (as a tree). If the precise function being called is known, FUNC is its FUNCTION_DECL; otherwise, FUNC is 0. For m68k/SVR4 generate the ! result in d0, a0, or fp0 as appropriate. */ #undef FUNCTION_VALUE #define FUNCTION_VALUE(VALTYPE, FUNC) \ --- 270,276 ---- function. VALTYPE is the data type of the value (as a tree). If the precise function being called is known, FUNC is its FUNCTION_DECL; otherwise, FUNC is 0. For m68k/SVR4 generate the ! result in d0, a0, or fp0 as appropriate. */ #undef FUNCTION_VALUE #define FUNCTION_VALUE(VALTYPE, FUNC) \ *************** do { \ *** 303,316 **** : gen_rtx_REG ((MODE), 0)) /* In m68k svr4, a symbol_ref rtx can be a valid PIC operand if it is ! an operand of a function call. */ #undef LEGITIMATE_PIC_OPERAND_P #define LEGITIMATE_PIC_OPERAND_P(X) \ ((! symbolic_operand (X, VOIDmode) \ ! && ! (GET_CODE (X) == CONST_DOUBLE && CONST_DOUBLE_MEM (X) \ ! && GET_CODE (CONST_DOUBLE_MEM (X)) == MEM \ ! && symbolic_operand (XEXP (CONST_DOUBLE_MEM (X), 0), VOIDmode))) \ ! || (GET_CODE (X) == SYMBOL_REF && SYMBOL_REF_FLAG (X)) \ || PCREL_GENERAL_OPERAND_OK) /* Turn off function cse if we are doing PIC. We always want function --- 307,321 ---- : gen_rtx_REG ((MODE), 0)) /* In m68k svr4, a symbol_ref rtx can be a valid PIC operand if it is ! an operand of a function call. */ #undef LEGITIMATE_PIC_OPERAND_P #define LEGITIMATE_PIC_OPERAND_P(X) \ ((! symbolic_operand (X, VOIDmode) \ ! && ! (GET_CODE (X) == CONST_DOUBLE && mem_for_const_double (X) != 0 \ ! && GET_CODE (mem_for_const_double (X)) == MEM \ ! && symbolic_operand (XEXP (mem_for_const_double (X), 0), \ ! VOIDmode))) \ ! || (GET_CODE (X) == SYMBOL_REF && SYMBOL_REF_FLAG (X)) \ || PCREL_GENERAL_OPERAND_OK) /* Turn off function cse if we are doing PIC. We always want function *************** do { \ *** 323,329 **** if (flag_pic) flag_no_function_cse = 1; /* For m68k SVR4, structures are returned using the reentrant ! technique. */ #undef PCC_STATIC_STRUCT_RETURN #define DEFAULT_PCC_STRUCT_RETURN 0 --- 328,334 ---- if (flag_pic) flag_no_function_cse = 1; /* For m68k SVR4, structures are returned using the reentrant ! technique. */ #undef PCC_STATIC_STRUCT_RETURN #define DEFAULT_PCC_STRUCT_RETURN 0 diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/lynx.h gcc-3.1/gcc/config/m68k/lynx.h *** gcc-3.0.4/gcc/config/m68k/lynx.h Thu Dec 7 01:58:24 2000 --- gcc-3.1/gcc/config/m68k/lynx.h Mon Dec 17 15:05:34 2001 *************** Boston, MA 02111-1307, USA. */ *** 29,36 **** #define BSS_SECTION_ASM_OP "\t.bss" - #define ASM_LONG ".long" - #include /* See m68k.h. 7 means 68020 with 68881. */ --- 29,34 ---- *************** Boston, MA 02111-1307, USA. */ *** 48,54 **** #define STRUCTURE_SIZE_BOUNDARY 16 ! /* Lynx uses d2 and d3 as scratch registers. */ #undef CALL_USED_REGISTERS #define CALL_USED_REGISTERS \ {1, 1, 1, 1, 0, 0, 0, 0, \ --- 46,52 ---- #define STRUCTURE_SIZE_BOUNDARY 16 ! /* Lynx uses d2 and d3 as scratch registers. */ #undef CALL_USED_REGISTERS #define CALL_USED_REGISTERS \ {1, 1, 1, 1, 0, 0, 0, 0, \ diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/m68020-elf.h gcc-3.1/gcc/config/m68k/m68020-elf.h *** gcc-3.0.4/gcc/config/m68k/m68020-elf.h Tue Dec 14 23:14:42 1999 --- gcc-3.1/gcc/config/m68k/m68020-elf.h Tue Dec 11 18:21:03 2001 *************** Boston, MA 02111-1307, USA. */ *** 21,32 **** /* This comment is here to see if it will keep Sun's cpp from dying. */ - #include "m68k/m68k-none.h" - #include "m68k/m68kelf.h" - #include "elfos.h" - /* m68k/m68kemb.h sets some macros in ways that override the svr4 abi. */ - #include "m68k/m68kemb.h" - /* We need to override the default specs from elfos.h. This suppresses the loading of crt0.o by gcc's default linker spec. For embedded targets crt0 now comes from the linker script. */ --- 21,26 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/m68k-protos.h gcc-3.1/gcc/config/m68k/m68k-protos.h *** gcc-3.0.4/gcc/config/m68k/m68k-protos.h Tue Jun 6 16:21:41 2000 --- gcc-3.1/gcc/config/m68k/m68k-protos.h Fri Jul 6 18:40:13 2001 *************** extern rtx legitimize_pic_address PARAMS *** 65,72 **** #endif /* RTX_CODE */ extern int flags_in_68881 PARAMS ((void)); - extern void output_function_prologue PARAMS ((FILE *, int)); - extern void output_function_epilogue PARAMS ((FILE *, int)); extern int use_return_insn PARAMS ((void)); extern void override_options PARAMS ((void)); extern void init_68881_table PARAMS ((void)); --- 65,70 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/m68k-psos.h gcc-3.1/gcc/config/m68k/m68k-psos.h *** gcc-3.0.4/gcc/config/m68k/m68k-psos.h Wed Dec 16 21:06:55 1998 --- gcc-3.1/gcc/config/m68k/m68k-psos.h Thu Nov 1 14:49:32 2001 *************** Boston, MA 02111-1307, USA. */ *** 25,43 **** #define MOTOROLA ! /* Get generic m68k definitions. */ #include "m68k/m68k.h" #include "m68k/m68kemb.h" /* Default processor type is a (pure) 68040 with 68881 emulation using ! the floating-point support package. */ #undef TARGET_DEFAULT #define TARGET_DEFAULT (MASK_68040_ONLY|MASK_BITFIELD|MASK_68881|MASK_68020) /* Options passed to CPP, GAS, CC1 and CC1PLUS. We override ! m68k-none.h for consistency with TARGET_DEFAULT. */ #undef CPP_SPEC #define CPP_SPEC \ --- 25,43 ---- #define MOTOROLA ! /* Get generic m68k definitions. */ #include "m68k/m68k.h" #include "m68k/m68kemb.h" /* Default processor type is a (pure) 68040 with 68881 emulation using ! the floating-point support package. */ #undef TARGET_DEFAULT #define TARGET_DEFAULT (MASK_68040_ONLY|MASK_BITFIELD|MASK_68881|MASK_68020) /* Options passed to CPP, GAS, CC1 and CC1PLUS. We override ! m68k-none.h for consistency with TARGET_DEFAULT. */ #undef CPP_SPEC #define CPP_SPEC \ *************** Boston, MA 02111-1307, USA. */ *** 59,65 **** "%{m68000:%{!m68881:-msoft-float }}%{m68302:-m68000}%{m68332:-m68020 -mnobitfield %{!m68881:-msoft-float}}%{!m68000:%{!mc68000:%{!m68010:%{!mc68020:%{!m68020:%{!m68030:%{!m68040:%{!m68020-40:%{!m68302:%{!m68332:-m68040}}}}}}}}}}" ! /* Get processor-independent pSOS definitions. */ #include "psos.h" --- 59,65 ---- "%{m68000:%{!m68881:-msoft-float }}%{m68302:-m68000}%{m68332:-m68020 -mnobitfield %{!m68881:-msoft-float}}%{!m68000:%{!mc68000:%{!m68010:%{!mc68020:%{!m68020:%{!m68030:%{!m68040:%{!m68020-40:%{!m68302:%{!m68332:-m68040}}}}}}}}}}" ! /* Get processor-independent pSOS definitions. */ #include "psos.h" diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/m68k.c gcc-3.1/gcc/config/m68k/m68k.c *** gcc-3.0.4/gcc/config/m68k/m68k.c Tue Jul 31 06:18:33 2001 --- gcc-3.1/gcc/config/m68k/m68k.c Sun Dec 23 16:07:14 2001 *************** Boston, MA 02111-1307, USA. */ *** 36,41 **** --- 36,44 ---- #include "expr.h" #include "reload.h" #include "tm_p.h" + #include "target.h" + #include "target-def.h" + #include "debug.h" /* Needed for use_return_insn. */ #include "flags.h" *************** Boston, MA 02111-1307, USA. */ *** 44,50 **** /* Index into this array by (register number >> 3) to find the smallest class which contains that register. */ ! enum reg_class regno_reg_class[] = { DATA_REGS, ADDR_REGS, FP_REGS, LO_FPA_REGS, LO_FPA_REGS, FPA_REGS, FPA_REGS }; --- 47,53 ---- /* Index into this array by (register number >> 3) to find the smallest class which contains that register. */ ! const enum reg_class regno_reg_class[] = { DATA_REGS, ADDR_REGS, FP_REGS, LO_FPA_REGS, LO_FPA_REGS, FPA_REGS, FPA_REGS }; *************** int switch_table_difference_label_flag; *** 56,83 **** static rtx find_addr_reg PARAMS ((rtx)); static const char *singlemove_string PARAMS ((rtx *)); /* Alignment to use for loops and jumps */ ! /* Specify power of two alignment used for loops. */ const char *m68k_align_loops_string; ! /* Specify power of two alignment used for non-loop jumps. */ const char *m68k_align_jumps_string; ! /* Specify power of two alignment used for functions. */ const char *m68k_align_funcs_string; ! /* Specify power of two alignment used for loops. */ int m68k_align_loops; ! /* Specify power of two alignment used for non-loop jumps. */ int m68k_align_jumps; ! /* Specify power of two alignment used for functions. */ int m68k_align_funcs; /* Nonzero if the last compare/test insn had FP operands. The sCC expanders peek at this to determine what to do for the 68060, which has no fsCC instructions. */ int m68k_last_compare_had_fp_operands; /* Sometimes certain combinations of command options do not make sense on a particular target machine. You can define a macro `OVERRIDE_OPTIONS' to take account of this. This macro, if --- 59,129 ---- static rtx find_addr_reg PARAMS ((rtx)); static const char *singlemove_string PARAMS ((rtx *)); + static void m68k_output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT)); + static void m68k_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT)); + static void m68k_coff_asm_named_section PARAMS ((const char *, unsigned int)); + #ifdef CTOR_LIST_BEGIN + static void m68k_svr3_asm_out_constructor PARAMS ((rtx, int)); + #endif /* Alignment to use for loops and jumps */ ! /* Specify power of two alignment used for loops. */ const char *m68k_align_loops_string; ! /* Specify power of two alignment used for non-loop jumps. */ const char *m68k_align_jumps_string; ! /* Specify power of two alignment used for functions. */ const char *m68k_align_funcs_string; ! /* Specify power of two alignment used for loops. */ int m68k_align_loops; ! /* Specify power of two alignment used for non-loop jumps. */ int m68k_align_jumps; ! /* Specify power of two alignment used for functions. */ int m68k_align_funcs; /* Nonzero if the last compare/test insn had FP operands. The sCC expanders peek at this to determine what to do for the 68060, which has no fsCC instructions. */ int m68k_last_compare_had_fp_operands; + + /* Initialize the GCC target structure. */ + #if INT_OP_GROUP == INT_OP_DOT_WORD + #undef TARGET_ASM_ALIGNED_HI_OP + #define TARGET_ASM_ALIGNED_HI_OP "\t.word\t" + #endif + + #if INT_OP_GROUP == INT_OP_NO_DOT + #undef TARGET_ASM_BYTE_OP + #define TARGET_ASM_BYTE_OP "\tbyte\t" + #undef TARGET_ASM_ALIGNED_HI_OP + #define TARGET_ASM_ALIGNED_HI_OP "\tshort\t" + #undef TARGET_ASM_ALIGNED_SI_OP + #define TARGET_ASM_ALIGNED_SI_OP "\tlong\t" + #endif + + #if INT_OP_GROUP == INT_OP_DC + #undef TARGET_ASM_BYTE_OP + #define TARGET_ASM_BYTE_OP "\tdc.b\t" + #undef TARGET_ASM_ALIGNED_HI_OP + #define TARGET_ASM_ALIGNED_HI_OP "\tdc.w\t" + #undef TARGET_ASM_ALIGNED_SI_OP + #define TARGET_ASM_ALIGNED_SI_OP "\tdc.l\t" + #endif + + #undef TARGET_ASM_UNALIGNED_HI_OP + #define TARGET_ASM_UNALIGNED_HI_OP TARGET_ASM_ALIGNED_HI_OP + #undef TARGET_ASM_UNALIGNED_SI_OP + #define TARGET_ASM_UNALIGNED_SI_OP TARGET_ASM_ALIGNED_SI_OP + + #undef TARGET_ASM_FUNCTION_PROLOGUE + #define TARGET_ASM_FUNCTION_PROLOGUE m68k_output_function_prologue + #undef TARGET_ASM_FUNCTION_EPILOGUE + #define TARGET_ASM_FUNCTION_EPILOGUE m68k_output_function_epilogue + + struct gcc_target targetm = TARGET_INITIALIZER; + /* Sometimes certain combinations of command options do not make sense on a particular target machine. You can define a macro `OVERRIDE_OPTIONS' to take account of this. This macro, if *************** override_options () *** 142,159 **** /* Note that the order of the bit mask for fmovem is the opposite of the order for movem! */ ! void ! output_function_prologue (stream, size) FILE *stream; ! int size; { register int regno; register int mask = 0; int num_saved_regs = 0; ! extern char call_used_regs[]; ! int fsize = (size + 3) & -4; ! int cfa_offset = INCOMING_FRAME_SP_OFFSET, cfa_store_offset = cfa_offset; /* If the stack limit is a symbol, we can check it here, before actually allocating the space. */ --- 188,419 ---- /* Note that the order of the bit mask for fmovem is the opposite of the order for movem! */ + #ifdef CRDS ! static void ! m68k_output_function_prologue (stream, size) FILE *stream; ! HOST_WIDE_INT size; ! { ! register int regno; ! register int mask = 0; ! HOST_WIDE_INT fsize = ((size) + 3) & -4; ! ! /* unos stack probe */ ! if (fsize > 30000) ! { ! fprintf (stream, "\tmovel sp,a0\n"); ! fprintf (stream, "\taddl $-%d,a0\n", 2048 + fsize); ! fprintf (stream, "\ttstb (a0)\n"); ! } ! else ! fprintf (stream, "\ttstb -%d(sp)\n", 2048 + fsize); ! ! if (frame_pointer_needed) ! { ! if (TARGET_68020 || fsize < 0x8000) ! fprintf (stream, "\tlink a6,$%d\n", -fsize); ! else ! fprintf (stream, "\tlink a6,$0\n\tsubl $%d,sp\n", fsize); ! } ! else if (fsize) ! { ! /* Adding negative number is faster on the 68040. */ ! if (fsize + 4 < 0x8000) ! fprintf (stream, "\tadd.w #%d,sp\n", - (fsize + 4)); ! else ! fprintf (stream, "\tadd.l #%d,sp\n", - (fsize + 4)); ! } ! ! for (regno = 16; regno < 24; regno++) ! if (regs_ever_live[regno] && ! call_used_regs[regno]) ! mask |= 1 << (regno - 16); ! ! if ((mask & 0xff) != 0) ! fprintf (stream, "\tfmovem $0x%x,-(sp)\n", mask & 0xff); ! ! mask = 0; ! for (regno = 0; regno < 16; regno++) ! if (regs_ever_live[regno] && ! call_used_regs[regno]) ! mask |= 1 << (15 - regno); ! if (frame_pointer_needed) ! mask &= ~ (1 << (15-FRAME_POINTER_REGNUM)); ! ! if (exact_log2 (mask) >= 0) ! fprintf (stream, "\tmovel %s,-(sp)\n", reg_names[15 - exact_log2 (mask)]); ! else if (mask) ! fprintf (stream, "\tmovem $0x%x,-(sp)\n", mask); ! } ! ! #else ! #if defined (DPX2) && defined (MOTOROLA) ! ! static void ! m68k_output_function_prologue (stream, size) ! FILE *stream; ! HOST_WIDE_INT size; ! { ! register int regno; ! register int mask = 0; ! int num_saved_regs = 0, first = 1; ! HOST_WIDE_INT fsize = ((size) + 3) & -4; ! ! if (frame_pointer_needed) ! { ! /* Adding negative number is faster on the 68040. */ ! if (fsize < 0x8000 && !TARGET_68040) ! fprintf (stream, "\tlink %s,#%d\n", ! reg_names[FRAME_POINTER_REGNUM], -fsize); ! else if (TARGET_68020) ! fprintf (stream, "\tlink %s,#%d\n", ! reg_names[FRAME_POINTER_REGNUM], -fsize); ! else ! fprintf (stream, "\tlink %s,#0\n\tadd.l #%d,sp\n", ! reg_names[FRAME_POINTER_REGNUM], -fsize); ! } ! else if (fsize) ! { ! /* Adding negative number is faster on the 68040. */ ! if (fsize + 4 < 0x8000) ! fprintf (stream, "\tadd.w #%d,sp\n", - (fsize + 4)); ! else ! fprintf (stream, "\tadd.l #%d,sp\n", - (fsize + 4)); ! } ! ! for (regno = 23; regno >= 16; regno--) ! if (regs_ever_live[regno] && ! call_used_regs[regno]) ! { ! if (first) ! { ! fprintf (stream, "\tfmovem.x %s", reg_names[regno]); ! first = 0; ! } ! else ! fprintf (stream, "/%s", reg_names[regno]); ! } ! if (!first) ! fprintf (stream, ",-(sp)\n"); ! ! mask = 0; ! for (regno = 0; regno < 16; regno++) ! if (regs_ever_live[regno] && ! call_used_regs[regno]) ! { ! mask |= 1 << (15 - regno); ! num_saved_regs++; ! } ! ! if (frame_pointer_needed) ! { ! mask &= ~ (1 << (15 - FRAME_POINTER_REGNUM)); ! num_saved_regs--; ! } ! ! if (num_saved_regs <= 2) ! { ! /* Store each separately in the same order moveml uses. ! Using two movel instructions instead of a single moveml ! is about 15% faster for the 68020 and 68030 at no expense ! in code size */ ! ! int i; ! ! /* Undo the work from above. */ ! for (i = 0; i< 16; i++) ! if (mask & (1 << i)) ! fprintf (stream, "\tmove.l %s,-(sp)\n", reg_names[15 - i]); ! } ! else if (mask) ! { ! first = 1; ! for (regno = 0; regno < 16; regno++) ! if (mask & (1 << regno)) ! { ! if (first) ! { ! fprintf (stream, "\tmovem.l %s", reg_names[15 - regno]); ! first = 0; ! } ! else ! fprintf (stream, "/%s", reg_names[15 - regno]); ! } ! fprintf (stream, ",-(sp)\n"); ! } ! ! if (flag_pic && current_function_uses_pic_offset_table) ! { ! fprintf (stream, "\tmove.l #__GLOBAL_OFFSET_TABLE_, %s\n", ! reg_names[PIC_OFFSET_TABLE_REGNUM]); ! fprintf (stream, "\tlea.l (pc,%s.l),%s\n", ! reg_names[PIC_OFFSET_TABLE_REGNUM], ! reg_names[PIC_OFFSET_TABLE_REGNUM]); ! } ! } ! ! #else ! #if defined (NEWS) && defined (MOTOROLA) ! ! static void ! m68k_output_function_prologue (stream, size) ! FILE *stream; ! HOST_WIDE_INT size; ! { ! register int regno; ! register int mask = 0; ! HOST_WIDE_INT fsize = ((size) + 3) & -4; ! ! if (frame_pointer_needed) ! { ! if (fsize < 0x8000) ! fprintf (stream, "\tlink fp,#%d\n", -fsize); ! else if (TARGET_68020) ! fprintf (stream, "\tlink.l fp,#%d\n", -fsize); ! else ! fprintf (stream, "\tlink fp,#0\n\tsub.l #%d,sp\n", fsize); ! } ! else if (fsize) ! { ! int amt = fsize + 4; ! /* Adding negative number is faster on the 68040. */ ! if (fsize + 4 < 0x8000) ! asm_fprintf (stream, "\tadd.w %0I%d,%Rsp\n", - amt); ! else ! asm_fprintf (stream, "\tadd.l %0I%d,%Rsp\n", - amt); ! } ! ! for (regno = 16; regno < FIRST_PSEUDO_REGISTER; regno++) ! if (regs_ever_live[regno] && ! call_used_regs[regno]) ! mask |= 1 << (regno - 16); ! ! if (mask != 0) ! fprintf (stream, "\tfmovem.x #0x%x,-(sp)\n", mask & 0xff); ! ! mask = 0; ! for (regno = 0; regno < 16; regno++) ! if (regs_ever_live[regno] && ! call_used_regs[regno]) ! mask |= 1 << (15 - regno); ! ! if (frame_pointer_needed) ! mask &= ~ (1 << (15-FRAME_POINTER_REGNUM)); ! ! if (exact_log2 (mask) >= 0) ! fprintf (stream, "\tmove.l %s,-(sp)\n", reg_names[15 - exact_log2 (mask)]); ! else ! if (mask) fprintf (stream, "\tmovem.l #0x%x,-(sp)\n", mask); ! } ! ! #else /* !CRDS && ! (NEWS && MOTOROLA) && ! (DPX2 && MOTOROLA) */ ! ! static void ! m68k_output_function_prologue (stream, size) ! FILE *stream; ! HOST_WIDE_INT size; { register int regno; register int mask = 0; int num_saved_regs = 0; ! HOST_WIDE_INT fsize = (size + 3) & -4; ! HOST_WIDE_INT cfa_offset = INCOMING_FRAME_SP_OFFSET; ! HOST_WIDE_INT cfa_store_offset = cfa_offset; /* If the stack limit is a symbol, we can check it here, before actually allocating the space. */ *************** output_function_prologue (stream, size) *** 221,228 **** l = (char *) dwarf2out_cfi_label (); cfa_store_offset += 4; cfa_offset = cfa_store_offset; - dwarf2out_def_cfa (l, FRAME_POINTER_REGNUM, cfa_offset); dwarf2out_reg_save (l, FRAME_POINTER_REGNUM, -cfa_store_offset); cfa_store_offset += fsize; } } --- 481,488 ---- l = (char *) dwarf2out_cfi_label (); cfa_store_offset += 4; cfa_offset = cfa_store_offset; dwarf2out_reg_save (l, FRAME_POINTER_REGNUM, -cfa_store_offset); + dwarf2out_def_cfa (l, FRAME_POINTER_REGNUM, cfa_offset); cfa_store_offset += fsize; } } *************** output_function_prologue (stream, size) *** 235,241 **** { if (!TARGET_5200) { ! /* asm_fprintf() cannot handle %. */ #ifdef MOTOROLA asm_fprintf (stream, "\tsubq.w %0I%d,%Rsp\n", fsize + 4); #else --- 495,501 ---- { if (!TARGET_5200) { ! /* asm_fprintf() cannot handle %. */ #ifdef MOTOROLA asm_fprintf (stream, "\tsubq.w %0I%d,%Rsp\n", fsize + 4); #else *************** output_function_prologue (stream, size) *** 244,250 **** } else { ! /* asm_fprintf() cannot handle %. */ #ifdef MOTOROLA asm_fprintf (stream, "\tsubq.l %0I%d,%Rsp\n", fsize + 4); #else --- 504,510 ---- } else { ! /* asm_fprintf() cannot handle %. */ #ifdef MOTOROLA asm_fprintf (stream, "\tsubq.l %0I%d,%Rsp\n", fsize + 4); #else *************** output_function_prologue (stream, size) *** 255,262 **** else if (fsize + 4 <= 16 && TARGET_CPU32) { /* On the CPU32 it is faster to use two subqw instructions to ! subtract a small integer (8 < N <= 16) to a register. */ ! /* asm_fprintf() cannot handle %. */ #ifdef MOTOROLA asm_fprintf (stream, "\tsubq.w %0I8,%Rsp\n\tsubq.w %0I%d,%Rsp\n", fsize + 4 - 8); --- 515,522 ---- else if (fsize + 4 <= 16 && TARGET_CPU32) { /* On the CPU32 it is faster to use two subqw instructions to ! subtract a small integer (8 < N <= 16) to a register. */ ! /* asm_fprintf() cannot handle %. */ #ifdef MOTOROLA asm_fprintf (stream, "\tsubq.w %0I8,%Rsp\n\tsubq.w %0I%d,%Rsp\n", fsize + 4 - 8); *************** output_function_prologue (stream, size) *** 270,276 **** if (TARGET_68040) { /* Adding negative number is faster on the 68040. */ ! /* asm_fprintf() cannot handle %. */ #ifdef MOTOROLA asm_fprintf (stream, "\tadd.w %0I%d,%Rsp\n", - (fsize + 4)); #else --- 530,536 ---- if (TARGET_68040) { /* Adding negative number is faster on the 68040. */ ! /* asm_fprintf() cannot handle %. */ #ifdef MOTOROLA asm_fprintf (stream, "\tadd.w %0I%d,%Rsp\n", - (fsize + 4)); #else *************** output_function_prologue (stream, size) *** 288,294 **** } else { ! /* asm_fprintf() cannot handle %. */ #ifdef MOTOROLA asm_fprintf (stream, "\tadd.l %0I%d,%Rsp\n", - (fsize + 4)); #else --- 548,554 ---- } else { ! /* asm_fprintf() cannot handle %. */ #ifdef MOTOROLA asm_fprintf (stream, "\tadd.l %0I%d,%Rsp\n", - (fsize + 4)); #else *************** output_function_prologue (stream, size) *** 381,391 **** #if NEED_PROBE #ifdef MOTOROLA - #ifdef CRDS - asm_fprintf (stream, "\ttstl %d(%Rsp)\n", NEED_PROBE - num_saved_regs * 4); - #else asm_fprintf (stream, "\ttst.l %d(%Rsp)\n", NEED_PROBE - num_saved_regs * 4); - #endif #else asm_fprintf (stream, "\ttstl %Rsp@(%d)\n", NEED_PROBE - num_saved_regs * 4); #endif --- 641,647 ---- *************** output_function_prologue (stream, size) *** 418,424 **** int i; ! /* Undo the work from above. */ for (i = 0; i< 16; i++) if (mask & (1 << i)) { --- 674,680 ---- int i; ! /* Undo the work from above. */ for (i = 0; i< 16; i++) if (mask & (1 << i)) { *************** output_function_prologue (stream, size) *** 511,516 **** --- 767,775 ---- #endif } } + #endif /* ! (DPX2 && MOTOROLA) */ + #endif /* ! (NEWS && MOTOROLA) */ + #endif /* !CRDS */ /* Return true if this function's epilogue can be output as RTL. */ *************** use_return_insn () *** 536,563 **** } /* This function generates the assembly code for function exit, ! on machines that need it. Args are same as for FUNCTION_PROLOGUE. The function epilogue should not depend on the current stack pointer! It should use the frame pointer only, if there is a frame pointer. This is mandatory because of alloca; we also take advantage of it to omit stack adjustments before returning. */ ! void ! output_function_epilogue (stream, size) FILE *stream; ! int size; { register int regno; register int mask, fmask; register int nregs; ! int offset, foffset, fpoffset; ! extern char call_used_regs[]; ! int fsize = (size + 3) & -4; int big = 0; rtx insn = get_last_insn (); ! int restore_from_sp = 0; ! /* If the last insn was a BARRIER, we don't have to write any code. */ if (GET_CODE (insn) == NOTE) insn = prev_nonnote_insn (insn); --- 795,934 ---- } /* This function generates the assembly code for function exit, ! on machines that need it. The function epilogue should not depend on the current stack pointer! It should use the frame pointer only, if there is a frame pointer. This is mandatory because of alloca; we also take advantage of it to omit stack adjustments before returning. */ ! #ifdef CRDS ! ! static void ! m68k_output_function_epilogue (stream, size) FILE *stream; ! HOST_WIDE_INT size; { register int regno; register int mask, fmask; register int nregs; ! HOST_WIDE_INT offset, foffset, fpoffset; ! HOST_WIDE_INT fsize = ((size) + 3) & -4; ! int big = 0; ! ! nregs = 0; fmask = 0; fpoffset = 0; ! for (regno = 16; regno < 24; regno++) ! if (regs_ever_live[regno] && ! call_used_regs[regno]) ! { ! nregs++; ! fmask |= 1 << (23 - regno); ! } ! ! foffset = fpoffset + nregs * 12; ! nregs = 0; mask = 0; ! if (frame_pointer_needed) ! regs_ever_live[FRAME_POINTER_REGNUM] = 0; ! ! for (regno = 0; regno < 16; regno++) ! if (regs_ever_live[regno] && ! call_used_regs[regno]) ! { ! nregs++; ! mask |= 1 << regno; ! } ! ! offset = foffset + nregs * 4; ! if (offset + fsize >= 0x8000 ! && frame_pointer_needed ! && (mask || fmask || fpoffset)) ! { ! fprintf (stream, "\tmovel $%d,a0\n", -fsize); ! fsize = 0, big = 1; ! } ! ! if (exact_log2 (mask) >= 0) ! { ! if (big) ! fprintf (stream, "\tmovel -%d(a6,a0.l),%s\n", ! offset + fsize, reg_names[exact_log2 (mask)]); ! else if (! frame_pointer_needed) ! fprintf (stream, "\tmovel (sp)+,%s\n", ! reg_names[exact_log2 (mask)]); ! else ! fprintf (stream, "\tmovel -%d(a6),%s\n", ! offset + fsize, reg_names[exact_log2 (mask)]); ! } ! else if (mask) ! { ! if (big) ! fprintf (stream, "\tmovem -%d(a6,a0.l),$0x%x\n", ! offset + fsize, mask); ! else if (! frame_pointer_needed) ! fprintf (stream, "\tmovem (sp)+,$0x%x\n", mask); ! else ! fprintf (stream, "\tmovem -%d(a6),$0x%x\n", ! offset + fsize, mask); ! } ! ! if (fmask) ! { ! if (big) ! fprintf (stream, "\tfmovem -%d(a6,a0.l),$0x%x\n", ! foffset + fsize, fmask); ! else if (! frame_pointer_needed) ! fprintf (stream, "\tfmovem (sp)+,$0x%x\n", fmask); ! else ! fprintf (stream, "\tfmovem -%d(a6),$0x%x\n", ! foffset + fsize, fmask); ! } ! ! if (fpoffset != 0) ! for (regno = 55; regno >= 24; regno--) ! if (regs_ever_live[regno] && ! call_used_regs[regno]) ! { ! if (big) ! fprintf(stream, "\tfpmoved -%d(a6,a0.l), %s\n", ! fpoffset + fsize, reg_names[regno]); ! else if (! frame_pointer_needed) ! fprintf(stream, "\tfpmoved (sp)+, %s\n", ! reg_names[regno]); ! else ! fprintf(stream, "\tfpmoved -%d(a6), %s\n", ! fpoffset + fsize, reg_names[regno]); ! fpoffset -= 8; ! } ! ! if (frame_pointer_needed) ! fprintf (stream, "\tunlk a6\n"); ! else if (fsize) ! { ! if (fsize + 4 < 0x8000) ! fprintf (stream, "\tadd.w #%d,sp\n", fsize + 4); ! else ! fprintf (stream, "\tadd.l #%d,sp\n", fsize + 4); ! } ! ! if (current_function_pops_args) ! fprintf (stream, "\trtd $%d\n", current_function_pops_args); ! else ! fprintf (stream, "\trts\n"); ! } ! ! #else ! #if defined (DPX2) && defined (MOTOROLA) ! ! static void ! m68k_output_function_epilogue (stream, size) ! FILE *stream; ! HOST_WIDE_INT size; ! { ! register int regno; ! register int mask, fmask; ! register int nregs; ! HOST_WIDE_INT offset, foffset, fpoffset, first = 1; ! HOST_WIDE_INT fsize = ((size) + 3) & -4; int big = 0; rtx insn = get_last_insn (); ! /* If the last insn was a BARRIER, we don't have to write any code. */ if (GET_CODE (insn) == NOTE) insn = prev_nonnote_insn (insn); *************** output_function_epilogue (stream, size) *** 565,580 **** { /* Output just a no-op so that debuggers don't get confused about which function the pc is in at this address. */ ! asm_fprintf (stream, "\tnop\n"); return; } ! #ifdef FUNCTION_BLOCK_PROFILER_EXIT ! if (profile_block_flag == 2) { ! FUNCTION_BLOCK_PROFILER_EXIT (stream); } - #endif #ifdef FUNCTION_EXTRA_EPILOGUE FUNCTION_EXTRA_EPILOGUE (stream, size); --- 936,1210 ---- { /* Output just a no-op so that debuggers don't get confused about which function the pc is in at this address. */ ! fprintf (stream, "\tnop\n"); return; } ! nregs = 0; fmask = 0; fpoffset = 0; ! for (regno = 16; regno < 24; regno++) ! if (regs_ever_live[regno] && ! call_used_regs[regno]) ! { ! nregs++; ! fmask |= 1 << (23 - regno); ! } ! ! foffset = fpoffset + nregs * 12; ! nregs = 0; mask = 0; ! if (frame_pointer_needed) ! regs_ever_live[FRAME_POINTER_REGNUM] = 0; ! ! for (regno = 0; regno < 16; regno++) ! if (regs_ever_live[regno] && ! call_used_regs[regno]) ! { ! nregs++; ! mask |= 1 << regno; ! } ! ! offset = foffset + nregs * 4; ! if (offset + fsize >= 0x8000 ! && frame_pointer_needed ! && (mask || fmask || fpoffset)) { ! fprintf (stream, "\tmove.l #%d,a0\n", -fsize); ! fsize = 0, big = 1; ! } ! ! if (nregs <= 2) ! { ! /* Restore each separately in the same order moveml does. ! Using two movel instructions instead of a single moveml ! is about 15% faster for the 68020 and 68030 at no expense ! in code size. */ ! ! int i; ! ! /* Undo the work from above. */ ! for (i = 0; i< 16; i++) ! if (mask & (1 << i)) ! { ! if (big) ! fprintf (stream, "\tmove.l -%d(%s,a0.l),%s\n", ! offset + fsize, ! reg_names[FRAME_POINTER_REGNUM], ! reg_names[i]); ! else if (! frame_pointer_needed) ! fprintf (stream, "\tmove.l (sp)+,%s\n", ! reg_names[i]); ! else ! fprintf (stream, "\tmove.l -%d(%s),%s\n", ! offset + fsize, ! reg_names[FRAME_POINTER_REGNUM], ! reg_names[i]); ! offset = offset - 4; ! } ! } ! else if (mask) ! { ! first = 1; ! for (regno = 0; regno < 16; regno++) ! if (mask & (1 << regno)) ! { ! if (first && big) ! { ! fprintf (stream, "\tmovem.l -%d(%s,a0.l),%s", ! offset + fsize, ! reg_names[FRAME_POINTER_REGNUM], ! reg_names[regno]); ! first = 0; ! } ! else if (first && ! frame_pointer_needed) ! { ! fprintf (stream, "\tmovem.l (sp)+,%s", ! reg_names[regno]); ! first = 0; ! } ! else if (first) ! { ! fprintf (stream, "\tmovem.l -%d(%s),%s", ! offset + fsize, ! reg_names[FRAME_POINTER_REGNUM], ! reg_names[regno]); ! first = 0; ! } ! else ! fprintf (stream, "/%s", reg_names[regno]); ! } ! fprintf (stream, "\n"); ! } ! ! if (fmask) ! { ! first = 1; ! for (regno = 16; regno < 24; regno++) ! if (fmask & (1 << (23 - regno))) ! { ! if (first && big) ! { ! fprintf (stream, "\tfmovem.x -%d(%s,a0.l),%s", ! foffset + fsize, ! reg_names[FRAME_POINTER_REGNUM], ! reg_names[regno]); ! first = 0; ! } ! else if (first && ! frame_pointer_needed) ! { ! fprintf (stream, "\tfmovem.x (sp)+,%s", ! reg_names[regno]); ! first = 0; ! } ! else if (first) ! { ! fprintf (stream, "\tfmovem.x -%d(%s),%s", ! foffset + fsize, ! reg_names[FRAME_POINTER_REGNUM], ! reg_names[regno]); ! first = 0; ! } ! else ! fprintf (stream, "/%s", reg_names[regno]); ! } ! fprintf (stream, "\n"); ! } ! ! if (frame_pointer_needed) ! fprintf (stream, "\tunlk %s\n", ! reg_names[FRAME_POINTER_REGNUM]); ! else if (fsize) ! { ! if (fsize + 4 < 0x8000) ! fprintf (stream, "\tadd.w #%d,sp\n", fsize + 4); ! else ! fprintf (stream, "\tadd.l #%d,sp\n", fsize + 4); ! } ! ! if (current_function_pops_args) ! fprintf (stream, "\trtd #%d\n", current_function_pops_args); ! else ! fprintf (stream, "\trts\n"); ! } ! ! #else ! #if defined (NEWS) && defined (MOTOROLA) ! ! static void ! m68k_output_function_epilogue (stream, size) ! FILE *stream; ! HOST_WIDE_INT size; ! { ! register int regno; ! register int mask, fmask; ! register int nregs; ! HOST_WIDE_INT offset, foffset; ! HOST_WIDE_INT fsize = ((size) + 3) & -4; ! int big = 0; ! ! nregs = 0; fmask = 0; ! for (regno = 16; regno < FIRST_PSEUDO_REGISTER; regno++) ! if (regs_ever_live[regno] && ! call_used_regs[regno]) ! { ! nregs++; ! fmask |= 1 << (23 - regno); ! } ! ! foffset = nregs * 12; ! nregs = 0; mask = 0; ! if (frame_pointer_needed) ! regs_ever_live[FRAME_POINTER_REGNUM] = 0; ! ! for (regno = 0; regno < 16; regno++) ! if (regs_ever_live[regno] && ! call_used_regs[regno]) ! { ! nregs++; ! mask |= 1 << regno; ! } ! ! offset = foffset + nregs * 4; ! if (offset + fsize >= 0x8000 ! && frame_pointer_needed ! && (mask || fmask)) ! { ! fprintf (stream, "\tmove.l #%d,a0\n", -fsize); ! fsize = 0, big = 1; ! } ! ! if (exact_log2 (mask) >= 0) ! { ! if (big) ! fprintf (stream, "\tmove.l (-%d,fp,a0.l),%s\n", ! offset + fsize, reg_names[exact_log2 (mask)]); ! else if (! frame_pointer_needed) ! fprintf (stream, "\tmove.l (sp)+,%s\n", ! reg_names[exact_log2 (mask)]); ! else ! fprintf (stream, "\tmove.l (-%d,fp),%s\n", ! offset + fsize, reg_names[exact_log2 (mask)]); ! } ! else if (mask) ! { ! if (big) ! fprintf (stream, "\tmovem.l (-%d,fp,a0.l),#0x%x\n", ! offset + fsize, mask); ! else if (! frame_pointer_needed) ! fprintf (stream, "\tmovem.l (sp)+,#0x%x\n", mask); ! else ! fprintf (stream, "\tmovem.l (-%d,fp),#0x%x\n", ! offset + fsize, mask); ! } ! ! if (fmask) ! { ! if (big) ! fprintf (stream, "\tfmovem.x (-%d,fp,a0.l),#0x%x\n", ! foffset + fsize, fmask); ! else if (! frame_pointer_needed) ! fprintf (stream, "\tfmovem.x (sp)+,#0x%x\n", fmask); ! else ! fprintf (stream, "\tfmovem.x (-%d,fp),#0x%x\n", ! foffset + fsize, fmask); ! } ! ! if (frame_pointer_needed) ! fprintf (stream, "\tunlk fp\n"); ! else if (fsize) ! { ! if (fsize + 4 < 0x8000) ! fprintf (stream, "\tadd.w #%d,sp\n", fsize + 4); ! else ! fprintf (stream, "\tadd.l #%d,sp\n", fsize + 4); ! } ! ! if (current_function_pops_args) ! fprintf (stream, "\trtd #%d\n", current_function_pops_args); ! else ! fprintf (stream, "\trts\n"); ! } ! ! #else /* !CRDS && ! (NEWS && MOTOROLA) && ! (DPX2 && MOTOROLA) */ ! ! static void ! m68k_output_function_epilogue (stream, size) ! FILE *stream; ! HOST_WIDE_INT size; ! { ! register int regno; ! register int mask, fmask; ! register int nregs; ! HOST_WIDE_INT offset, foffset, fpoffset; ! HOST_WIDE_INT fsize = (size + 3) & -4; ! int big = 0; ! rtx insn = get_last_insn (); ! int restore_from_sp = 0; ! ! /* If the last insn was a BARRIER, we don't have to write any code. */ ! if (GET_CODE (insn) == NOTE) ! insn = prev_nonnote_insn (insn); ! if (insn && GET_CODE (insn) == BARRIER) ! { ! /* Output just a no-op so that debuggers don't get confused ! about which function the pc is in at this address. */ ! asm_fprintf (stream, "\tnop\n"); ! return; } #ifdef FUNCTION_EXTRA_EPILOGUE FUNCTION_EXTRA_EPILOGUE (stream, size); *************** output_function_epilogue (stream, size) *** 614,620 **** offset = foffset + nregs * 4; /* FIXME : leaf_function_p below is too strong. What we really need to know there is if there could be pending ! stack adjustment needed at that point. */ restore_from_sp = ! frame_pointer_needed || (! current_function_calls_alloca && leaf_function_p ()); if (offset + fsize >= 0x8000 --- 1244,1250 ---- offset = foffset + nregs * 4; /* FIXME : leaf_function_p below is too strong. What we really need to know there is if there could be pending ! stack adjustment needed at that point. */ restore_from_sp = ! frame_pointer_needed || (! current_function_calls_alloca && leaf_function_p ()); if (offset + fsize >= 0x8000 *************** output_function_epilogue (stream, size) *** 633,643 **** /* Restore each separately in the same order moveml does. Using two movel instructions instead of a single moveml is about 15% faster for the 68020 and 68030 at no expense ! in code size. */ int i; ! /* Undo the work from above. */ for (i = 0; i< 16; i++) if (mask & (1 << i)) { --- 1263,1273 ---- /* Restore each separately in the same order moveml does. Using two movel instructions instead of a single moveml is about 15% faster for the 68020 and 68030 at no expense ! in code size. */ int i; ! /* Undo the work from above. */ for (i = 0; i< 16; i++) if (mask & (1 << i)) { *************** output_function_epilogue (stream, size) *** 824,831 **** else if (fsize + 4 <= 16 && TARGET_CPU32) { /* On the CPU32 it is faster to use two addqw instructions to ! add a small integer (8 < N <= 16) to a register. */ ! /* asm_fprintf() cannot handle %. */ #ifdef MOTOROLA asm_fprintf (stream, "\taddq.w %0I8,%Rsp\n\taddq.w %0I%d,%Rsp\n", fsize + 4 - 8); --- 1454,1461 ---- else if (fsize + 4 <= 16 && TARGET_CPU32) { /* On the CPU32 it is faster to use two addqw instructions to ! add a small integer (8 < N <= 16) to a register. */ ! /* asm_fprintf() cannot handle %. */ #ifdef MOTOROLA asm_fprintf (stream, "\taddq.w %0I8,%Rsp\n\taddq.w %0I%d,%Rsp\n", fsize + 4 - 8); *************** output_function_epilogue (stream, size) *** 840,846 **** { if (TARGET_68040) { ! /* asm_fprintf() cannot handle %. */ #ifdef MOTOROLA asm_fprintf (stream, "\tadd.w %0I%d,%Rsp\n", fsize + 4); #else --- 1470,1476 ---- { if (TARGET_68040) { ! /* asm_fprintf() cannot handle %. */ #ifdef MOTOROLA asm_fprintf (stream, "\tadd.w %0I%d,%Rsp\n", fsize + 4); #else *************** output_function_epilogue (stream, size) *** 858,864 **** } else { ! /* asm_fprintf() cannot handle %. */ #ifdef MOTOROLA asm_fprintf (stream, "\tadd.l %0I%d,%Rsp\n", fsize + 4); #else --- 1488,1494 ---- } else { ! /* asm_fprintf() cannot handle %. */ #ifdef MOTOROLA asm_fprintf (stream, "\tadd.l %0I%d,%Rsp\n", fsize + 4); #else *************** output_function_epilogue (stream, size) *** 871,876 **** --- 1501,1510 ---- else fprintf (stream, "\trts\n"); } + + #endif /* ! (DPX2 && MOTOROLA) */ + #endif /* ! (NEWS && MOTOROLA) */ + #endif /* !CRDS */ /* Similar to general_operand, but exclude stack_pointer_rtx. */ *************** output_dbcc_and_branch (operands) *** 1015,1021 **** } /* If the decrement is to be done in SImode, then we have ! to compensate for the fact that dbcc decrements in HImode. */ switch (GET_MODE (operands[0])) { case SImode: --- 1649,1655 ---- } /* If the decrement is to be done in SImode, then we have ! to compensate for the fact that dbcc decrements in HImode. */ switch (GET_MODE (operands[0])) { case SImode: *************** output_scc_di(op, operand1, operand2, de *** 1044,1050 **** rtx loperands[7]; enum rtx_code op_code = GET_CODE (op); ! /* This does not produce a usefull cc. */ CC_STATUS_INIT; /* The m68k cmp.l instruction requires operand1 to be a reg as used --- 1678,1684 ---- rtx loperands[7]; enum rtx_code op_code = GET_CODE (op); ! /* This does not produce a useful cc. */ CC_STATUS_INIT; /* The m68k cmp.l instruction requires operand1 to be a reg as used *************** output_scc_di(op, operand1, operand2, de *** 1062,1075 **** if (GET_CODE (operand1) == REG) loperands[1] = gen_rtx_REG (SImode, REGNO (operand1) + 1); else ! loperands[1] = adj_offsettable_operand (operand1, 4); if (operand2 != const0_rtx) { loperands[2] = operand2; if (GET_CODE (operand2) == REG) loperands[3] = gen_rtx_REG (SImode, REGNO (operand2) + 1); else ! loperands[3] = adj_offsettable_operand (operand2, 4); } loperands[4] = gen_label_rtx(); if (operand2 != const0_rtx) --- 1696,1709 ---- if (GET_CODE (operand1) == REG) loperands[1] = gen_rtx_REG (SImode, REGNO (operand1) + 1); else ! loperands[1] = adjust_address (operand1, SImode, 4); if (operand2 != const0_rtx) { loperands[2] = operand2; if (GET_CODE (operand2) == REG) loperands[3] = gen_rtx_REG (SImode, REGNO (operand2) + 1); else ! loperands[3] = adjust_address (operand2, SImode, 4); } loperands[4] = gen_label_rtx(); if (operand2 != const0_rtx) *************** output_btst (operands, countop, dataop, *** 1240,1246 **** { int offset = (count & ~signpos) / 8; count = count & signpos; ! operands[1] = dataop = adj_offsettable_operand (dataop, offset); } if (count == signpos) cc_status.flags = CC_NOT_POSITIVE | CC_Z_IN_NOT_N; --- 1874,1880 ---- { int offset = (count & ~signpos) / 8; count = count & signpos; ! operands[1] = dataop = adjust_address (dataop, QImode, offset); } if (count == signpos) cc_status.flags = CC_NOT_POSITIVE | CC_Z_IN_NOT_N; *************** symbolic_operand (op, mode) *** 1295,1301 **** } } ! /* Check for sign_extend or zero_extend. Used for bit-count operands. */ int extend_operator(x, mode) --- 1929,1935 ---- } } ! /* Check for sign_extend or zero_extend. Used for bit-count operands. */ int extend_operator(x, mode) *************** legitimize_pic_address (orig, mode, reg) *** 1398,1404 **** else abort (); if (GET_CODE (orig) == CONST_INT) ! return plus_constant_for_output (base, INTVAL (orig)); pic_ref = gen_rtx_PLUS (Pmode, base, orig); /* Likewise, should we set special REG_NOTEs here? */ } --- 2032,2038 ---- else abort (); if (GET_CODE (orig) == CONST_INT) ! return plus_constant (base, INTVAL (orig)); pic_ref = gen_rtx_PLUS (Pmode, base, orig); /* Likewise, should we set special REG_NOTEs here? */ } *************** const_method (constant) *** 1423,1434 **** if (USE_MOVQ (i)) return MOVQ; ! /* The Coldfire doesn't have byte or word operations. */ /* FIXME: This may not be useful for the m68060 either */ if (!TARGET_5200) { /* if -256 < N < 256 but N is not in range for a moveq ! N^ff will be, so use moveq #N^ff, dreg; not.b dreg. */ if (USE_MOVQ (i ^ 0xff)) return NOTB; /* Likewise, try with not.w */ --- 2057,2068 ---- if (USE_MOVQ (i)) return MOVQ; ! /* The Coldfire doesn't have byte or word operations. */ /* FIXME: This may not be useful for the m68060 either */ if (!TARGET_5200) { /* if -256 < N < 256 but N is not in range for a moveq ! N^ff will be, so use moveq #N^ff, dreg; not.b dreg. */ if (USE_MOVQ (i ^ 0xff)) return NOTB; /* Likewise, try with not.w */ *************** output_move_double (operands) *** 1875,1882 **** } else if (optype0 == OFFSOP) { ! middlehalf[0] = adj_offsettable_operand (operands[0], 4); ! latehalf[0] = adj_offsettable_operand (operands[0], size - 4); } else { --- 2509,2516 ---- } else if (optype0 == OFFSOP) { ! middlehalf[0] = adjust_address (operands[0], SImode, 4); ! latehalf[0] = adjust_address (operands[0], SImode, size - 4); } else { *************** output_move_double (operands) *** 1891,1898 **** } else if (optype1 == OFFSOP) { ! middlehalf[1] = adj_offsettable_operand (operands[1], 4); ! latehalf[1] = adj_offsettable_operand (operands[1], size - 4); } else if (optype1 == CNSTOP) { --- 2525,2532 ---- } else if (optype1 == OFFSOP) { ! middlehalf[1] = adjust_address (operands[1], SImode, 4); ! latehalf[1] = adjust_address (operands[1], SImode, size - 4); } else if (optype1 == CNSTOP) { *************** output_move_double (operands) *** 1930,1943 **** if (optype0 == REGOP) latehalf[0] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1); else if (optype0 == OFFSOP) ! latehalf[0] = adj_offsettable_operand (operands[0], size - 4); else latehalf[0] = operands[0]; if (optype1 == REGOP) latehalf[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1); else if (optype1 == OFFSOP) ! latehalf[1] = adj_offsettable_operand (operands[1], size - 4); else if (optype1 == CNSTOP) split_double (operands[1], &operands[1], &latehalf[1]); else --- 2564,2577 ---- if (optype0 == REGOP) latehalf[0] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1); else if (optype0 == OFFSOP) ! latehalf[0] = adjust_address (operands[0], SImode, size - 4); else latehalf[0] = operands[0]; if (optype1 == REGOP) latehalf[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1); else if (optype1 == OFFSOP) ! latehalf[1] = adjust_address (operands[1], SImode, size - 4); else if (optype1 == CNSTOP) split_double (operands[1], &operands[1], &latehalf[1]); else *************** compadr: *** 1972,1987 **** xops[0] = latehalf[0]; xops[1] = XEXP (operands[1], 0); output_asm_insn ("lea %a1,%0", xops); ! if( GET_MODE (operands[1]) == XFmode ) { operands[1] = gen_rtx_MEM (XFmode, latehalf[0]); ! middlehalf[1] = adj_offsettable_operand (operands[1], size-8); ! latehalf[1] = adj_offsettable_operand (operands[1], size-4); } else { operands[1] = gen_rtx_MEM (DImode, latehalf[0]); ! latehalf[1] = adj_offsettable_operand (operands[1], size-4); } } else if (size == 12 --- 2606,2621 ---- xops[0] = latehalf[0]; xops[1] = XEXP (operands[1], 0); output_asm_insn ("lea %a1,%0", xops); ! if (GET_MODE (operands[1]) == XFmode ) { operands[1] = gen_rtx_MEM (XFmode, latehalf[0]); ! middlehalf[1] = adjust_address (operands[1], DImode, size - 8); ! latehalf[1] = adjust_address (operands[1], DImode, size - 4); } else { operands[1] = gen_rtx_MEM (DImode, latehalf[0]); ! latehalf[1] = adjust_address (operands[1], DImode, size - 4); } } else if (size == 12 *************** compadr: *** 2002,2008 **** if (addreg0 || addreg1) abort (); ! /* Only the middle reg conflicts; simply put it last. */ output_asm_insn (singlemove_string (operands), operands); output_asm_insn (singlemove_string (latehalf), latehalf); output_asm_insn (singlemove_string (middlehalf), middlehalf); --- 2636,2642 ---- if (addreg0 || addreg1) abort (); ! /* Only the middle reg conflicts; simply put it last. */ output_asm_insn (singlemove_string (operands), operands); output_asm_insn (singlemove_string (latehalf), latehalf); output_asm_insn (singlemove_string (middlehalf), middlehalf); *************** output_addsi3 (operands) *** 2188,2194 **** } /* On the CPU32 it is faster to use two addql instructions to add a small integer (8 < N <= 16) to a register. ! Likewise for subql. */ if (TARGET_CPU32 && REG_P (operands[0])) { if (INTVAL (operands[2]) > 8 --- 2822,2828 ---- } /* On the CPU32 it is faster to use two addql instructions to add a small integer (8 < N <= 16) to a register. ! Likewise for subql. */ if (TARGET_CPU32 && REG_P (operands[0])) { if (INTVAL (operands[2]) > 8 *************** notice_update_cc (exp, insn) *** 2325,2331 **** /* (SET r1 (ZERO_EXTEND r2)) on this machine ends with a move insn moving r2 in r2's mode. Thus, the cc's are set for r2. ! This can set N bit spuriously. */ cc_status.flags |= CC_NOT_NEGATIVE; default: --- 2959,2965 ---- /* (SET r1 (ZERO_EXTEND r2)) on this machine ends with a move insn moving r2 in r2's mode. Thus, the cc's are set for r2. ! This can set N bit spuriously. */ cc_status.flags |= CC_NOT_NEGATIVE; default: *************** output_move_const_single (operands) *** 2415,2421 **** The value, anded with 0xff, gives the code to use in fmovecr to get the desired constant. */ ! /* This code has been fixed for cross-compilation. */ static int inited_68881_table = 0; --- 3049,3055 ---- The value, anded with 0xff, gives the code to use in fmovecr to get the desired constant. */ ! /* This code has been fixed for cross-compilation. */ static int inited_68881_table = 0; *************** static const char *const strings_68881[7 *** 2429,2435 **** "1e16" }; ! int codes_68881[7] = { 0x0f, 0x32, 0x33, --- 3063,3069 ---- "1e16" }; ! static const int codes_68881[7] = { 0x0f, 0x32, 0x33, *************** int codes_68881[7] = { *** 2442,2448 **** REAL_VALUE_TYPE values_68881[7]; /* Set up values_68881 array by converting the decimal values ! strings_68881 to binary. */ void init_68881_table () --- 3076,3082 ---- REAL_VALUE_TYPE values_68881[7]; /* Set up values_68881 array by converting the decimal values ! strings_68881 to binary. */ void init_68881_table () *************** standard_68881_constant_p (x) *** 2474,2480 **** #endif /* fmovecr must be emulated on the 68040 and 68060, so it shouldn't be ! used at all on those chips. */ if (TARGET_68040 || TARGET_68060) return 0; --- 3108,3114 ---- #endif /* fmovecr must be emulated on the 68040 and 68060, so it shouldn't be ! used at all on those chips. */ if (TARGET_68040 || TARGET_68060) return 0; *************** floating_exact_log2 (x) *** 2547,2553 **** /* Return nonzero if X, a CONST_DOUBLE, has a value that we can get from the Sun FPA's constant RAM. The value returned, anded with 0x1ff, gives the code to use in fpmove ! to get the desired constant. */ static int inited_FPA_table = 0; --- 3181,3187 ---- /* Return nonzero if X, a CONST_DOUBLE, has a value that we can get from the Sun FPA's constant RAM. The value returned, anded with 0x1ff, gives the code to use in fpmove ! to get the desired constant. */ static int inited_FPA_table = 0; *************** static const char *const strings_FPA[38] *** 2596,2602 **** }; ! int codes_FPA[38] = { /* small rationals */ 0x200, 0xe, --- 3230,3236 ---- }; ! static const int codes_FPA[38] = { /* small rationals */ 0x200, 0xe, *************** int codes_FPA[38] = { *** 2642,2650 **** REAL_VALUE_TYPE values_FPA[38]; ! /* This code has been fixed for cross-compilation. */ ! void init_FPA_table () { enum machine_mode mode; --- 3276,3285 ---- REAL_VALUE_TYPE values_FPA[38]; ! /* This code has been fixed for cross-compilation. */ ! static void init_FPA_table PARAMS ((void)); ! static void init_FPA_table () { enum machine_mode mode; *************** print_operand_address (file, addr) *** 3214,3237 **** { #ifdef MOTOROLA #ifdef SGS ! /* Many SGS assemblers croak on size specifiers for constants. */ ! fprintf (file, "%d", INTVAL (addr)); #else ! fprintf (file, "%d.w", INTVAL (addr)); #endif #else ! fprintf (file, "%d:w", INTVAL (addr)); #endif } else if (GET_CODE (addr) == CONST_INT) { ! fprintf (file, ! #if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_INT ! "%d", ! #else ! "%ld", ! #endif ! INTVAL (addr)); } else if (TARGET_PCREL) { --- 3849,3866 ---- { #ifdef MOTOROLA #ifdef SGS ! /* Many SGS assemblers croak on size specifiers for constants. */ ! fprintf (file, "%d", (int) INTVAL (addr)); #else ! fprintf (file, "%d.w", (int) INTVAL (addr)); #endif #else ! fprintf (file, "%d:w", (int) INTVAL (addr)); #endif } else if (GET_CODE (addr) == CONST_INT) { ! fprintf (file, HOST_WIDE_INT_PRINT_DEC, INTVAL (addr)); } else if (TARGET_PCREL) { *************** strict_low_part_peephole_ok (mode, first *** 3328,3335 **** int const_uint32_operand (op, mode) rtx op; ! enum machine_mode mode ATTRIBUTE_UNUSED; { #if HOST_BITS_PER_WIDE_INT > 32 /* All allowed constants will fit a CONST_INT. */ return (GET_CODE (op) == CONST_INT --- 3957,3969 ---- int const_uint32_operand (op, mode) rtx op; ! enum machine_mode mode; { + /* It doesn't make sense to ask this question with a mode that is + not larger than 32 bits. */ + if (GET_MODE_BITSIZE (mode) <= 32) + abort (); + #if HOST_BITS_PER_WIDE_INT > 32 /* All allowed constants will fit a CONST_INT. */ return (GET_CODE (op) == CONST_INT *************** const_uint32_operand (op, mode) *** 3347,3354 **** int const_sint32_operand (op, mode) rtx op; ! enum machine_mode mode ATTRIBUTE_UNUSED; { /* All allowed constants will fit a CONST_INT. */ return (GET_CODE (op) == CONST_INT && (INTVAL (op) >= (-0x7fffffff - 1) && INTVAL (op) <= 0x7fffffff)); --- 3981,3993 ---- int const_sint32_operand (op, mode) rtx op; ! enum machine_mode mode; { + /* It doesn't make sense to ask this question with a mode that is + not larger than 32 bits. */ + if (GET_MODE_BITSIZE (mode) <= 32) + abort (); + /* All allowed constants will fit a CONST_INT. */ return (GET_CODE (op) == CONST_INT && (INTVAL (op) >= (-0x7fffffff - 1) && INTVAL (op) <= 0x7fffffff)); *************** output_andsi3 (operands) *** 3488,3494 **** && !TARGET_5200) { if (GET_CODE (operands[0]) != REG) ! operands[0] = adj_offsettable_operand (operands[0], 2); operands[2] = GEN_INT (INTVAL (operands[2]) & 0xffff); /* Do not delete a following tstl %0 insn; that would be incorrect. */ CC_STATUS_INIT; --- 4127,4133 ---- && !TARGET_5200) { if (GET_CODE (operands[0]) != REG) ! operands[0] = adjust_address (operands[0], HImode, 2); operands[2] = GEN_INT (INTVAL (operands[2]) & 0xffff); /* Do not delete a following tstl %0 insn; that would be incorrect. */ CC_STATUS_INIT; *************** output_andsi3 (operands) *** 3507,3513 **** } else { ! operands[0] = adj_offsettable_operand (operands[0], 3 - (logval / 8)); operands[1] = GEN_INT (logval % 8); } /* This does not set condition codes in a standard way. */ --- 4146,4152 ---- } else { ! operands[0] = adjust_address (operands[0], SImode, 3 - (logval / 8)); operands[1] = GEN_INT (logval % 8); } /* This does not set condition codes in a standard way. */ *************** output_iorsi3 (operands) *** 3529,3535 **** && !TARGET_5200) { if (GET_CODE (operands[0]) != REG) ! operands[0] = adj_offsettable_operand (operands[0], 2); /* Do not delete a following tstl %0 insn; that would be incorrect. */ CC_STATUS_INIT; if (INTVAL (operands[2]) == 0xffff) --- 4168,4174 ---- && !TARGET_5200) { if (GET_CODE (operands[0]) != REG) ! operands[0] = adjust_address (operands[0], HImode, 2); /* Do not delete a following tstl %0 insn; that would be incorrect. */ CC_STATUS_INIT; if (INTVAL (operands[2]) == 0xffff) *************** output_iorsi3 (operands) *** 3542,3553 **** || offsettable_memref_p (operands[0]))) { if (DATA_REG_P (operands[0])) ! { ! operands[1] = GEN_INT (logval); ! } else { ! operands[0] = adj_offsettable_operand (operands[0], 3 - (logval / 8)); operands[1] = GEN_INT (logval % 8); } CC_STATUS_INIT; --- 4181,4190 ---- || offsettable_memref_p (operands[0]))) { if (DATA_REG_P (operands[0])) ! operands[1] = GEN_INT (logval); else { ! operands[0] = adjust_address (operands[0], SImode, 3 - (logval / 8)); operands[1] = GEN_INT (logval % 8); } CC_STATUS_INIT; *************** output_xorsi3 (operands) *** 3567,3573 **** && !TARGET_5200) { if (! DATA_REG_P (operands[0])) ! operands[0] = adj_offsettable_operand (operands[0], 2); /* Do not delete a following tstl %0 insn; that would be incorrect. */ CC_STATUS_INIT; if (INTVAL (operands[2]) == 0xffff) --- 4204,4210 ---- && !TARGET_5200) { if (! DATA_REG_P (operands[0])) ! operands[0] = adjust_address (operands[0], HImode, 2); /* Do not delete a following tstl %0 insn; that would be incorrect. */ CC_STATUS_INIT; if (INTVAL (operands[2]) == 0xffff) *************** output_xorsi3 (operands) *** 3580,3591 **** || offsettable_memref_p (operands[0]))) { if (DATA_REG_P (operands[0])) ! { ! operands[1] = GEN_INT (logval); ! } else { ! operands[0] = adj_offsettable_operand (operands[0], 3 - (logval / 8)); operands[1] = GEN_INT (logval % 8); } CC_STATUS_INIT; --- 4217,4226 ---- || offsettable_memref_p (operands[0]))) { if (DATA_REG_P (operands[0])) ! operands[1] = GEN_INT (logval); else { ! operands[0] = adjust_address (operands[0], SImode, 3 - (logval / 8)); operands[1] = GEN_INT (logval % 8); } CC_STATUS_INIT; *************** output_xorsi3 (operands) *** 3593,3595 **** --- 4228,4263 ---- } return "eor%.l %2,%0"; } + + /* Output assembly to switch to section NAME with attribute FLAGS. */ + + static void + m68k_coff_asm_named_section (name, flags) + const char *name; + unsigned int flags; + { + char flagchar; + + if (flags & SECTION_WRITE) + flagchar = 'd'; + else + flagchar = 'x'; + + fprintf (asm_out_file, "\t.section\t%s,\"%c\"\n", name, flagchar); + } + + #ifdef CTOR_LIST_BEGIN + static void + m68k_svr3_asm_out_constructor (symbol, priority) + rtx symbol; + int priority ATTRIBUTE_UNUSED; + { + rtx xop[2]; + + xop[1] = symbol; + xop[0] = gen_rtx_MEM (SImode, gen_rtx_PRE_DEC (SImode, stack_pointer_rtx)); + + init_section (); + output_asm_insn (output_move_simode (xop), xop); + } + #endif diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/m68k.h gcc-3.1/gcc/config/m68k/m68k.h *** gcc-3.0.4/gcc/config/m68k/m68k.h Mon Jul 30 21:32:28 2001 --- gcc-3.1/gcc/config/m68k/m68k.h Wed Mar 13 05:35:59 2002 *************** *** 1,7 **** /* Definitions of target machine for GNU compiler. Sun 68000/68020 version. Copyright (C) 1987, 1988, 1993, 1994, 1995, 1996, 1997, 1998, 1999, ! 2000, 2001 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,7 ---- /* Definitions of target machine for GNU compiler. Sun 68000/68020 version. Copyright (C) 1987, 1988, 1993, 1994, 1995, 1996, 1997, 1998, 1999, ! 2000, 2001, 2002 Free Software Foundation, Inc. This file is part of GNU CC. *************** Boston, MA 02111-1307, USA. */ *** 25,30 **** --- 25,40 ---- many of the definitions that relate to assembler syntax. */ + /* Classify the groups of pseudo-ops used to assemble QI, HI and SI + quantities. */ + #define INT_OP_STANDARD 0 /* .byte, .short, .long */ + #define INT_OP_DOT_WORD 1 /* .byte, .word, .long */ + #define INT_OP_NO_DOT 2 /* byte, short, long */ + #define INT_OP_DC 3 /* dc.b, dc.w, dc.l */ + + /* Set the default */ + #define INT_OP_GROUP INT_OP_DOT_WORD + /* Names to predefine in the preprocessor for this target machine. */ /* See sun3.h, sun2.h, isi.h for different CPP_PREDEFINES. */ *************** extern int target_flags; *** 93,99 **** The 68040 will execute all 68030 and 68881/2 instructions, but some of them must be emulated in software by the OS. When TARGET_68040 is turned on, these instructions won't be used. This code will still ! run on a 68030 and 68881/2. */ #define MASK_68040 256 #define TARGET_68040 (target_flags & MASK_68040) --- 103,109 ---- The 68040 will execute all 68030 and 68881/2 instructions, but some of them must be emulated in software by the OS. When TARGET_68040 is turned on, these instructions won't be used. This code will still ! run on a 68030 and 68881/2. */ #define MASK_68040 256 #define TARGET_68040 (target_flags & MASK_68040) *************** extern int target_flags; *** 106,112 **** The 68060 will execute all 68030 and 68881/2 instructions, but some of them must be emulated in software by the OS. When TARGET_68060 is turned on, these instructions won't be used. This code will still ! run on a 68030 and 68881/2. */ #define MASK_68060 1024 #define TARGET_68060 (target_flags & MASK_68060) --- 116,122 ---- The 68060 will execute all 68030 and 68881/2 instructions, but some of them must be emulated in software by the OS. When TARGET_68060 is turned on, these instructions won't be used. This code will still ! run on a 68030 and 68881/2. */ #define MASK_68060 1024 #define TARGET_68060 (target_flags & MASK_68060) *************** extern int target_flags; *** 137,143 **** #define MASK_PCREL 8192 #define TARGET_PCREL (target_flags & MASK_PCREL) ! /* Relax strict alignment. */ #define MASK_NO_STRICT_ALIGNMENT 16384 #define TARGET_STRICT_ALIGNMENT (~target_flags & MASK_NO_STRICT_ALIGNMENT) --- 147,153 ---- #define MASK_PCREL 8192 #define TARGET_PCREL (target_flags & MASK_PCREL) ! /* Relax strict alignment. */ #define MASK_NO_STRICT_ALIGNMENT 16384 #define TARGET_STRICT_ALIGNMENT (~target_flags & MASK_NO_STRICT_ALIGNMENT) *************** extern int target_flags; *** 178,188 **** { "nofpa", - MASK_FPA, \ N_("Do not generate code for a Sun FPA") }, \ { "sky", -(MASK_FPA|MASK_68040_ONLY|MASK_68881), \ ! N_("") }, \ { "sky", MASK_SKY, \ ! N_("") }, \ { "nosky", - MASK_SKY, \ ! N_("") }, \ { "68881", - (MASK_FPA|MASK_SKY), \ N_("Generate code for a 68881") }, \ { "68881", MASK_68881, "" }, \ --- 188,198 ---- { "nofpa", - MASK_FPA, \ N_("Do not generate code for a Sun FPA") }, \ { "sky", -(MASK_FPA|MASK_68040_ONLY|MASK_68881), \ ! N_("Generate code for a Sun Sky board") }, \ { "sky", MASK_SKY, \ ! N_("Generate code for a Sun Sky board") }, \ { "nosky", - MASK_SKY, \ ! N_("Do not use Sky linkage convention") }, \ { "68881", - (MASK_FPA|MASK_SKY), \ N_("Generate code for a 68881") }, \ { "68881", MASK_68881, "" }, \ *************** extern int target_flags; *** 290,296 **** /* Define if you don't want extended real, but do want to use the software floating point emulator for REAL_ARITHMETIC and ! decimal <-> binary conversion. */ /* #define REAL_ARITHMETIC */ /* Define this if most significant bit is lowest numbered --- 300,306 ---- /* Define if you don't want extended real, but do want to use the software floating point emulator for REAL_ARITHMETIC and ! decimal <-> binary conversion. */ /* #define REAL_ARITHMETIC */ /* Define this if most significant bit is lowest numbered *************** extern int target_flags; *** 343,349 **** Most published ABIs say that ints should be aligned on 16 bit boundaries, but cpus with 32 bit busses get better performance aligned on 32 bit boundaries. Coldfires without a misalignment ! module require 32 bit alignment. */ #define BIGGEST_ALIGNMENT (TARGET_ALIGN_INT ? 32 : 16) /* Set this nonzero if move instructions will actually fail to work --- 353,359 ---- Most published ABIs say that ints should be aligned on 16 bit boundaries, but cpus with 32 bit busses get better performance aligned on 32 bit boundaries. Coldfires without a misalignment ! module require 32 bit alignment. */ #define BIGGEST_ALIGNMENT (TARGET_ALIGN_INT ? 32 : 16) /* Set this nonzero if move instructions will actually fail to work *************** extern int target_flags; *** 356,365 **** /* Align loop starts for optimal branching. */ #define LOOP_ALIGN(LABEL) (m68k_align_loops) ! /* This is how to align an instruction for optimal branching. */ #define LABEL_ALIGN_AFTER_BARRIER(LABEL) (m68k_align_jumps) ! #define SELECT_RTX_SECTION(MODE, X) \ { \ if (!flag_pic) \ readonly_data_section(); \ --- 366,375 ---- /* Align loop starts for optimal branching. */ #define LOOP_ALIGN(LABEL) (m68k_align_loops) ! /* This is how to align an instruction for optimal branching. */ #define LABEL_ALIGN_AFTER_BARRIER(LABEL) (m68k_align_jumps) ! #define SELECT_RTX_SECTION(MODE, X, ALIGN) \ { \ if (!flag_pic) \ readonly_data_section(); \ *************** extern int target_flags; *** 395,402 **** #define FIRST_PSEUDO_REGISTER 56 #endif ! /* This defines the register which is used to hold the offset table for PIC. */ ! #define PIC_OFFSET_TABLE_REGNUM 13 #ifndef SUPPORT_SUN_FPA --- 405,412 ---- #define FIRST_PSEUDO_REGISTER 56 #endif ! /* This defines the register which is used to hold the offset table for PIC. */ ! #define PIC_OFFSET_TABLE_REGNUM (flag_pic ? 13 : INVALID_REGNUM) #ifndef SUPPORT_SUN_FPA *************** extern int target_flags; *** 433,439 **** On the 68000, only the stack pointer is such. */ /* fpa0 is also reserved so that it can be used to move data back and ! forth between high fpa regs and everything else. */ #define FIXED_REGISTERS \ {/* Data registers. */ \ --- 443,449 ---- On the 68000, only the stack pointer is such. */ /* fpa0 is also reserved so that it can be used to move data back and ! forth between high fpa regs and everything else. */ #define FIXED_REGISTERS \ {/* Data registers. */ \ *************** extern int target_flags; *** 478,520 **** #ifdef SUPPORT_SUN_FPA ! #define CONDITIONAL_REGISTER_USAGE \ ! { \ ! int i; \ ! HARD_REG_SET x; \ ! if (! TARGET_FPA) \ ! { \ ! COPY_HARD_REG_SET (x, reg_class_contents[(int)FPA_REGS]); \ ! for (i = 0; i < FIRST_PSEUDO_REGISTER; i++ ) \ ! if (TEST_HARD_REG_BIT (x, i)) \ ! fixed_regs[i] = call_used_regs[i] = 1; \ ! } \ ! if (! TARGET_68881) \ ! { \ ! COPY_HARD_REG_SET (x, reg_class_contents[(int)FP_REGS]); \ ! for (i = 0; i < FIRST_PSEUDO_REGISTER; i++ ) \ ! if (TEST_HARD_REG_BIT (x, i)) \ ! fixed_regs[i] = call_used_regs[i] = 1; \ ! } \ ! if (flag_pic) \ ! fixed_regs[PIC_OFFSET_TABLE_REGNUM] \ ! = call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1;\ } #else ! #define CONDITIONAL_REGISTER_USAGE \ ! { \ ! int i; \ ! HARD_REG_SET x; \ ! if (! TARGET_68881) \ ! { \ ! COPY_HARD_REG_SET (x, reg_class_contents[(int)FP_REGS]); \ ! for (i = 0; i < FIRST_PSEUDO_REGISTER; i++ ) \ ! if (TEST_HARD_REG_BIT (x, i)) \ ! fixed_regs[i] = call_used_regs[i] = 1; \ ! } \ ! if (flag_pic) \ ! fixed_regs[PIC_OFFSET_TABLE_REGNUM] \ ! = call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1;\ } #endif /* defined SUPPORT_SUN_FPA */ --- 488,530 ---- #ifdef SUPPORT_SUN_FPA ! #define CONDITIONAL_REGISTER_USAGE \ ! { \ ! int i; \ ! HARD_REG_SET x; \ ! if (! TARGET_FPA) \ ! { \ ! COPY_HARD_REG_SET (x, reg_class_contents[(int)FPA_REGS]); \ ! for (i = 0; i < FIRST_PSEUDO_REGISTER; i++ ) \ ! if (TEST_HARD_REG_BIT (x, i)) \ ! fixed_regs[i] = call_used_regs[i] = 1; \ ! } \ ! if (! TARGET_68881) \ ! { \ ! COPY_HARD_REG_SET (x, reg_class_contents[(int)FP_REGS]); \ ! for (i = 0; i < FIRST_PSEUDO_REGISTER; i++ ) \ ! if (TEST_HARD_REG_BIT (x, i)) \ ! fixed_regs[i] = call_used_regs[i] = 1; \ ! } \ ! if (PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM) \ ! fixed_regs[PIC_OFFSET_TABLE_REGNUM] \ ! = call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \ } #else ! #define CONDITIONAL_REGISTER_USAGE \ ! { \ ! int i; \ ! HARD_REG_SET x; \ ! if (! TARGET_68881) \ ! { \ ! COPY_HARD_REG_SET (x, reg_class_contents[(int)FP_REGS]); \ ! for (i = 0; i < FIRST_PSEUDO_REGISTER; i++ ) \ ! if (TEST_HARD_REG_BIT (x, i)) \ ! fixed_regs[i] = call_used_regs[i] = 1; \ ! } \ ! if (PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM) \ ! fixed_regs[PIC_OFFSET_TABLE_REGNUM] \ ! = call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \ } #endif /* defined SUPPORT_SUN_FPA */ *************** enum reg_class { *** 651,657 **** #define N_REG_CLASSES (int) LIM_REG_CLASSES ! /* Give names of register classes as strings for dump file. */ #define REG_CLASS_NAMES \ { "NO_REGS", "DATA_REGS", \ --- 661,667 ---- #define N_REG_CLASSES (int) LIM_REG_CLASSES ! /* Give names of register classes as strings for dump file. */ #define REG_CLASS_NAMES \ { "NO_REGS", "DATA_REGS", \ *************** enum reg_class { NO_REGS, LO_FPA_REGS, F *** 704,710 **** #define N_REG_CLASSES (int) LIM_REG_CLASSES ! /* Give names of register classes as strings for dump file. */ #define REG_CLASS_NAMES \ { "NO_REGS", "LO_FPA_REGS", "FPA_REGS", "FP_REGS", \ --- 714,720 ---- #define N_REG_CLASSES (int) LIM_REG_CLASSES ! /* Give names of register classes as strings for dump file. */ #define REG_CLASS_NAMES \ { "NO_REGS", "LO_FPA_REGS", "FPA_REGS", "FP_REGS", \ *************** enum reg_class { NO_REGS, LO_FPA_REGS, F *** 739,745 **** reg number REGNO. This could be a conditional expression or could index an array. */ ! extern enum reg_class regno_reg_class[]; #define REGNO_REG_CLASS(REGNO) (regno_reg_class[(REGNO)>>3]) #endif /* SUPPORT_SUN_FPA */ --- 749,755 ---- reg number REGNO. This could be a conditional expression or could index an array. */ ! extern const enum reg_class regno_reg_class[]; #define REGNO_REG_CLASS(REGNO) (regno_reg_class[(REGNO)>>3]) #endif /* SUPPORT_SUN_FPA */ *************** extern enum reg_class regno_reg_class[]; *** 754,760 **** machine description; we zorch the constraint letters that aren't appropriate for a specific target. This allows us to guarantee that a specific kind of register will not be used for a given target ! without fiddling with the register classes above. */ #ifndef SUPPORT_SUN_FPA --- 764,770 ---- machine description; we zorch the constraint letters that aren't appropriate for a specific target. This allows us to guarantee that a specific kind of register will not be used for a given target ! without fiddling with the register classes above. */ #ifndef SUPPORT_SUN_FPA *************** extern enum reg_class regno_reg_class[]; *** 957,962 **** --- 967,977 ---- On the 5200 (coldfire), sp@- in a byte insn pushes just a byte. */ #define PUSH_ROUNDING(BYTES) (TARGET_5200 ? BYTES : ((BYTES) + 1) & ~1) + /* We want to avoid trying to push bytes. */ + #define MOVE_BY_PIECES_P(SIZE, ALIGN) \ + (move_by_pieces_ninsns (SIZE, ALIGN) < MOVE_RATIO \ + && (((SIZE) >=16 && (ALIGN) >= 16) || (TARGET_5200))) + /* Offset of first parameter from the argument pointer register value. */ #define FIRST_PARM_OFFSET(FNDECL) 8 *************** extern enum reg_class regno_reg_class[]; *** 1081,1257 **** : GET_MODE_SIZE (MODE)))) \ ? 2 - (CUM) / 4 : 0) - /* Generate the assembly code for function entry. */ - #define FUNCTION_PROLOGUE(FILE, SIZE) output_function_prologue(FILE, SIZE) - /* Output assembler code to FILE to increment profiler label # LABELNO for profiling a function entry. */ #define FUNCTION_PROFILER(FILE, LABELNO) \ asm_fprintf (FILE, "\tlea %LLP%d,%Ra0\n\tjsr mcount\n", (LABELNO)) - /* Output assembler code to FILE to initialize this source file's - basic block profiling info, if that has not already been done. */ - - #define FUNCTION_BLOCK_PROFILER(FILE, BLOCK_OR_LABEL) \ - do \ - { \ - switch (profile_block_flag) \ - { \ - case 2: \ - asm_fprintf (FILE, "\tpea %d\n\tpea %LLPBX0\n\tjsr %U__bb_init_trace_func\n\taddql %I8,%Rsp\n", \ - (BLOCK_OR_LABEL)); \ - break; \ - \ - default: \ - asm_fprintf (FILE, "\ttstl %LLPBX0\n\tbne %LLPI%d\n\tpea %LLPBX0\n\tjsr %U__bb_init_func\n\taddql %I4,%Rsp\n%LLPI%d:\n", \ - (BLOCK_OR_LABEL), (BLOCK_OR_LABEL)); \ - break; \ - } \ - } \ - while(0) - - /* Output assembler code to FILE to increment the counter for - the BLOCKNO'th basic block in this source file. */ - - #define BLOCK_PROFILER(FILE, BLOCKNO) \ - do \ - { \ - switch (profile_block_flag) \ - { \ - case 2: \ - asm_fprintf (FILE, "\tmovel %Ra1,%Rsp@-\n\tlea ___bb,%Ra1\n\tmovel %I%d,%Ra1@(0)\n\tmovel %I%LLPBX0,%Ra1@(4)\n\tmovel %Rsp@+,%Ra1\n\tjsr %U__bb_trace_func\n", \ - BLOCKNO); \ - break; \ - \ - default: \ - asm_fprintf (FILE, "\taddql %I1,%LLPBX2+%d\n", 4 * BLOCKNO); \ - break; \ - } \ - } \ - while(0) - - /* Output assembler code to FILE to indicate return from - a function during basic block profiling. */ - - #define FUNCTION_BLOCK_PROFILER_EXIT(FILE) \ - asm_fprintf (FILE, "\tjsr %U__bb_trace_ret\n"); - - /* Save all registers which may be clobbered by a function call. - MACHINE_STATE_SAVE and MACHINE_STATE_RESTORE are target-code macros, - used in libgcc2.c. They may not refer to TARGET_* macros !!! */ - #if defined (__mc68010__) || defined(mc68010) \ - || defined(__mc68020__) || defined(mc68020) \ - || defined(__mc68030__) || defined(mc68030) \ - || defined(__mc68040__) || defined(mc68040) \ - || defined(__mcpu32__) || defined(mcpu32) - #define MACHINE_STATE_m68010_up - #endif - - #ifdef MOTOROLA - #if defined(__mcf5200__) - #define MACHINE_STATE_SAVE(id) \ - { \ - asm ("sub.l 20,%sp"); \ - asm ("movm.l &0x0303,4(%sp)"); \ - asm ("move.w %ccr,%d0"); \ - asm ("movm.l &0x0001,(%sp)"); \ - } - #else /* !__mcf5200__ */ - #if defined(MACHINE_STATE_m68010_up) - #ifdef __HPUX_ASM__ - /* HPUX assembler does not accept %ccr. */ - #define MACHINE_STATE_SAVE(id) \ - { \ - asm ("move.w %cc,-(%sp)"); \ - asm ("movm.l &0xc0c0,-(%sp)"); \ - } - #else /* ! __HPUX_ASM__ */ - #define MACHINE_STATE_SAVE(id) \ - { \ - asm ("move.w %ccr,-(%sp)"); \ - asm ("movm.l &0xc0c0,-(%sp)"); \ - } - #endif /* __HPUX_ASM__ */ - #else /* !MACHINE_STATE_m68010_up */ - #define MACHINE_STATE_SAVE(id) \ - { \ - asm ("move.w %sr,-(%sp)"); \ - asm ("movm.l &0xc0c0,-(%sp)"); \ - } - #endif /* MACHINE_STATE_m68010_up */ - #endif /* __mcf5200__ */ - #else /* !MOTOROLA */ - #if defined(__mcf5200__) - #define MACHINE_STATE_SAVE(id) \ - { \ - asm ("subl %#20,%/sp" : ); \ - asm ("movml %/d0/%/d1/%/a0/%/a1,%/sp@(4)" : ); \ - asm ("movew %/cc,%/d0" : ); \ - asm ("movml %/d0,%/sp@" : ); \ - } - #else /* !__mcf5200__ */ - #if defined(MACHINE_STATE_m68010_up) - #define MACHINE_STATE_SAVE(id) \ - { \ - asm ("movew %/cc,%/sp@-" : ); \ - asm ("moveml %/d0/%/d1/%/a0/%/a1,%/sp@-" : ); \ - } - #else /* !MACHINE_STATE_m68010_up */ - #define MACHINE_STATE_SAVE(id) \ - { \ - asm ("movew %/sr,%/sp@-" : ); \ - asm ("moveml %/d0/%/d1/%/a0/%/a1,%/sp@-" : ); \ - } - #endif /* MACHINE_STATE_m68010_up */ - #endif /* __mcf5200__ */ - #endif /* MOTOROLA */ - - /* Restore all registers saved by MACHINE_STATE_SAVE. */ - - #ifdef MOTOROLA - #if defined(__mcf5200__) - #define MACHINE_STATE_RESTORE(id) \ - { \ - asm ("movm.l (%sp),&0x0001"); \ - asm ("move.w %d0,%ccr"); \ - asm ("movm.l 4(%sp),&0x0303"); \ - asm ("add.l 20,%sp"); \ - } - #else /* !__mcf5200__ */ - #ifdef __HPUX_ASM__ - /* HPUX assembler does not accept %ccr. */ - #define MACHINE_STATE_RESTORE(id) \ - { \ - asm ("movm.l (%sp)+,&0x0303"); \ - asm ("move.w (%sp)+,%cc"); \ - } - #else /* ! __HPUX_ASM__ */ - #define MACHINE_STATE_RESTORE(id) \ - { \ - asm ("movm.l (%sp)+,&0x0303"); \ - asm ("move.w (%sp)+,%ccr"); \ - } - #endif /* __HPUX_ASM__ */ - #endif /* __mcf5200__ */ - #else /* !MOTOROLA */ - #if defined(__mcf5200__) - #define MACHINE_STATE_RESTORE(id) \ - { \ - asm ("movml %/sp@,%/d0" : ); \ - asm ("movew %/d0,%/cc" : ); \ - asm ("movml %/sp@(4),%/d0/%/d1/%/a0/%/a1" : ); \ - asm ("addl %#20,%/sp" : ); \ - } - #else /* !__mcf5200__ */ - #define MACHINE_STATE_RESTORE(id) \ - { \ - asm ("moveml %/sp@+,%/d0/%/d1/%/a0/%/a1" : ); \ - asm ("movew %/sp@+,%/cc" : ); \ - } - #endif /* __mcf5200__ */ - #endif /* MOTOROLA */ - /* EXIT_IGNORE_STACK should be nonzero if, when returning from a function, the stack pointer does not matter. The value is tested only in functions that have frame pointers. --- 1096,1107 ---- *************** while(0) *** 1259,1267 **** #define EXIT_IGNORE_STACK 1 - /* Generate the assembly code for function exit. */ - #define FUNCTION_EPILOGUE(FILE, SIZE) output_function_epilogue (FILE, SIZE) - /* This is a hook for other tm files to change. */ /* #define FUNCTION_EXTRA_EPILOGUE(FILE, SIZE) */ --- 1109,1114 ---- *************** __transfer_from_trampoline () \ *** 1460,1470 **** #define LEGITIMATE_PIC_OPERAND_P(X) \ ((! symbolic_operand (X, VOIDmode) \ ! && ! (GET_CODE (X) == CONST_DOUBLE && CONST_DOUBLE_MEM (X) \ ! && GET_CODE (CONST_DOUBLE_MEM (X)) == MEM \ ! && symbolic_operand (XEXP (CONST_DOUBLE_MEM (X), 0), \ ! VOIDmode))) \ ! || (GET_CODE (X) == SYMBOL_REF && SYMBOL_REF_FLAG (X)) \ || PCREL_GENERAL_OPERAND_OK) /* The macros REG_OK_FOR..._P assume that the arg is a REG rtx --- 1307,1317 ---- #define LEGITIMATE_PIC_OPERAND_P(X) \ ((! symbolic_operand (X, VOIDmode) \ ! && ! (GET_CODE (X) == CONST_DOUBLE && mem_for_const_double (X) != 0 \ ! && GET_CODE (mem_for_const_double (X)) == MEM \ ! && symbolic_operand (XEXP (mem_for_const_double (X), 0), \ ! VOIDmode))) \ ! || (GET_CODE (X) == SYMBOL_REF && SYMBOL_REF_FLAG (X)) \ || PCREL_GENERAL_OPERAND_OK) /* The macros REG_OK_FOR..._P assume that the arg is a REG rtx *************** __transfer_from_trampoline () \ *** 1669,1683 **** /* Define as C expression which evaluates to nonzero if the tablejump instruction expects the table to contain offsets from the address of the table. ! Do not define this if the table should contain absolute addresses. */ #define CASE_VECTOR_PC_RELATIVE 1 - /* Specify the tree operation to be used to convert reals to integers. */ - #define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR - - /* This is the kind of divide that is easiest to do in the general case. */ - #define EASY_DIV_EXPR TRUNC_DIV_EXPR - /* Define this as 1 if `char' should by default be signed; else as 0. */ #define DEFAULT_SIGNED_CHAR 1 --- 1516,1524 ---- /* Define as C expression which evaluates to nonzero if the tablejump instruction expects the table to contain offsets from the address of the table. ! Do not define this if the table should contain absolute addresses. */ #define CASE_VECTOR_PC_RELATIVE 1 /* Define this as 1 if `char' should by default be signed; else as 0. */ #define DEFAULT_SIGNED_CHAR 1 *************** __transfer_from_trampoline () \ *** 1688,1696 **** in one reasonably fast instruction. */ #define MOVE_MAX 4 - /* Define this if zero-extension is slow (more than one real instruction). */ - #define SLOW_ZERO_EXTEND - /* Nonzero if access to memory by bytes is slow and undesirable. */ #define SLOW_BYTE_ACCESS 0 --- 1529,1534 ---- *************** __transfer_from_trampoline () \ *** 1867,1873 **** an empty string, or any arbitrary string (such as ".", ".L%", etc) without having to make any other changes to account for the specific definition. Note it is a string literal, not interpreted by printf ! and friends. */ #define LOCAL_LABEL_PREFIX "" --- 1705,1711 ---- an empty string, or any arbitrary string (such as ".", ".L%", etc) without having to make any other changes to account for the specific definition. Note it is a string literal, not interpreted by printf ! and friends. */ #define LOCAL_LABEL_PREFIX "" *************** __transfer_from_trampoline () \ *** 1953,2007 **** This is suitable for output with `assemble_name'. */ #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ ! sprintf (LABEL, "*%s%s%d", LOCAL_LABEL_PREFIX, PREFIX, NUM) ! ! /* This is how to output a `long double' extended real constant. */ ! ! #define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \ ! do { long l[3]; \ ! REAL_VALUE_TO_TARGET_LONG_DOUBLE (VALUE, l); \ ! fprintf (FILE, "\t.long 0x%lx,0x%lx,0x%lx\n", l[0], l[1], l[2]); \ ! } while (0) ! ! /* This is how to output an assembler line defining a `double' constant. */ ! ! #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ ! do { char dstr[30]; \ ! REAL_VALUE_TO_DECIMAL (VALUE, "%.20g", dstr); \ ! fprintf (FILE, "\t.double 0r%s\n", dstr); \ ! } while (0) ! ! /* This is how to output an assembler line defining a `float' constant. */ ! ! #define ASM_OUTPUT_FLOAT(FILE,VALUE) \ ! do { long l; \ ! REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ ! fprintf (FILE, "\t.long 0x%lx\n", l); \ ! } while (0) ! ! /* This is how to output an assembler line defining an `int' constant. */ ! ! #define ASM_OUTPUT_INT(FILE,VALUE) \ ! ( fprintf (FILE, "\t.long "), \ ! output_addr_const (FILE, (VALUE)), \ ! fprintf (FILE, "\n")) ! ! /* Likewise for `char' and `short' constants. */ ! ! #define ASM_OUTPUT_SHORT(FILE,VALUE) \ ! ( fprintf (FILE, "\t.word "), \ ! output_addr_const (FILE, (VALUE)), \ ! fprintf (FILE, "\n")) ! ! #define ASM_OUTPUT_CHAR(FILE,VALUE) \ ! ( fprintf (FILE, "\t.byte "), \ ! output_addr_const (FILE, (VALUE)), \ ! fprintf (FILE, "\n")) ! ! /* This is how to output an assembler line for a numeric constant byte. */ ! ! #define ASM_OUTPUT_BYTE(FILE,VALUE) \ ! fprintf (FILE, "\t.byte 0x%x\n", (VALUE)) /* This is how to output an insn to push a register on the stack. It need not be very fast code. */ --- 1791,1797 ---- This is suitable for output with `assemble_name'. */ #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ ! sprintf (LABEL, "*%s%s%ld", LOCAL_LABEL_PREFIX, PREFIX, (long)(NUM)) /* This is how to output an insn to push a register on the stack. It need not be very fast code. */ *************** do { long l; \ *** 2064,2084 **** ( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 10), \ sprintf ((OUTPUT), "%s.%d", (NAME), (LABELNO))) - /* Define the parentheses used to group arithmetic operations - in assembler code. */ - - #define ASM_OPEN_PAREN "(" - #define ASM_CLOSE_PAREN ")" - - /* Define results of standard character escape sequences. */ - #define TARGET_BELL 007 - #define TARGET_BS 010 - #define TARGET_TAB 011 - #define TARGET_NEWLINE 012 - #define TARGET_VT 013 - #define TARGET_FF 014 - #define TARGET_CR 015 - /* Output a float value (represented as a C double) as an immediate operand. This macro is a 68k-specific macro. */ --- 1854,1859 ---- *************** do { long l; \ *** 2144,2150 **** or print pair of registers as rx:ry. 'y' for a FPA insn (print pair of registers as rx:ry). This also outputs CONST_DOUBLE's as SunFPA constant RAM registers if ! possible, so it should not be used except for the SunFPA. */ #define PRINT_OPERAND_PUNCT_VALID_P(CODE) \ ((CODE) == '.' || (CODE) == '#' || (CODE) == '-' \ --- 1919,1925 ---- or print pair of registers as rx:ry. 'y' for a FPA insn (print pair of registers as rx:ry). This also outputs CONST_DOUBLE's as SunFPA constant RAM registers if ! possible, so it should not be used except for the SunFPA. */ #define PRINT_OPERAND_PUNCT_VALID_P(CODE) \ ((CODE) == '.' || (CODE) == '#' || (CODE) == '-' \ diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/m68k.md gcc-3.1/gcc/config/m68k/m68k.md *** gcc-3.0.4/gcc/config/m68k/m68k.md Tue Jul 31 06:18:33 2001 --- gcc-3.1/gcc/config/m68k/m68k.md Tue Apr 2 08:14:14 2002 *************** *** 1,5 **** ;;- Machine description for GNU compiler, Motorola 68000 Version ! ;; Copyright (C) 1987, 1988, 1993, 1994, 1995, 1996, 1997, 1998, 1999 ;; Free Software Foundation, Inc. ;; This file is part of GNU CC. --- 1,5 ---- ;;- Machine description for GNU compiler, Motorola 68000 Version ! ;; Copyright (C) 1987, 1988, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001 ;; Free Software Foundation, Inc. ;; This file is part of GNU CC. *************** *** 837,844 **** { if (GET_CODE (operands[0]) == MEM) { ! operands[0] = adj_offsettable_operand (operands[0], ! INTVAL (operands[1]) / 8); operands[1] = GEN_INT (7 - INTVAL (operands[1]) % 8); return output_btst (operands, operands[1], operands[0], insn, 7); } --- 837,844 ---- { if (GET_CODE (operands[0]) == MEM) { ! operands[0] = adjust_address (operands[0], QImode, ! INTVAL (operands[1]) / 8); operands[1] = GEN_INT (7 - INTVAL (operands[1]) % 8); return output_btst (operands, operands[1], operands[0], insn, 7); } *************** *** 858,865 **** { if (GET_CODE (operands[0]) == MEM) { ! operands[0] = adj_offsettable_operand (operands[0], ! INTVAL (operands[1]) / 8); operands[1] = GEN_INT (7 - INTVAL (operands[1]) % 8); return output_btst (operands, operands[1], operands[0], insn, 7); } --- 858,865 ---- { if (GET_CODE (operands[0]) == MEM) { ! operands[0] = adjust_address (operands[0], QImode, ! INTVAL (operands[1]) / 8); operands[1] = GEN_INT (7 - INTVAL (operands[1]) % 8); return output_btst (operands, operands[1], operands[0], insn, 7); } *************** *** 913,919 **** { #ifdef MOTOROLA #ifdef SGS ! /* Many SGS assemblers croak on size specifiers for constants. */ return \"lea 0,%0\"; #else return \"lea 0.w,%0\"; --- 913,919 ---- { #ifdef MOTOROLA #ifdef SGS ! /* Many SGS assemblers croak on size specifiers for constants. */ return \"lea 0,%0\"; #else return \"lea 0.w,%0\"; *************** *** 1081,1086 **** --- 1081,1093 ---- "TARGET_5200" "* return output_move_strictqi (operands);") + (define_expand "pushqi1" + [(set (reg:SI 15) (plus:SI (reg:SI 15) (const_int -2))) + (set (mem:QI (plus:SI (reg:SI 15) (const_int 1))) + (match_operand:QI 0 "general_operand" ""))] + "!TARGET_5200" + "") + (define_expand "movsf" [(set (match_operand:SF 0 "nonimmediate_operand" "") (match_operand:SF 1 "general_operand" ""))] *************** *** 1145,1151 **** { #ifdef MOTOROLA #ifdef SGS ! /* Many SGS assemblers croak on size specifiers for constants. */ return \"lea 0,%0\"; #else return \"lea 0.w,%0\"; --- 1152,1158 ---- { #ifdef MOTOROLA #ifdef SGS ! /* Many SGS assemblers croak on size specifiers for constants. */ return \"lea 0,%0\"; #else return \"lea 0.w,%0\"; *************** *** 1255,1262 **** operands[1] = force_const_mem (XFmode, operands[1]); if (! memory_address_p (XFmode, XEXP (operands[1], 0)) && ! reload_in_progress) ! operands[1] = change_address (operands[1], XFmode, ! XEXP (operands[1], 0)); } if (flag_pic && TARGET_PCREL && ! reload_in_progress) { --- 1262,1268 ---- operands[1] = force_const_mem (XFmode, operands[1]); if (! memory_address_p (XFmode, XEXP (operands[1], 0)) && ! reload_in_progress) ! operands[1] = adjust_address (operands[1], XFmode, 0); } if (flag_pic && TARGET_PCREL && ! reload_in_progress) { *************** *** 1443,1449 **** return \"move%.l %1,%0\"; } if (GET_CODE (operands[1]) == MEM) ! operands[1] = adj_offsettable_operand (operands[1], 3); return \"move%.b %1,%0\"; }") --- 1449,1455 ---- return \"move%.l %1,%0\"; } if (GET_CODE (operands[1]) == MEM) ! operands[1] = adjust_address (operands[1], QImode, 3); return \"move%.b %1,%0\"; }") *************** *** 1471,1477 **** return \"move%.l %1,%0\"; } if (GET_CODE (operands[1]) == MEM) ! operands[1] = adj_offsettable_operand (operands[1], 1); return \"move%.b %1,%0\"; }") --- 1477,1483 ---- return \"move%.l %1,%0\"; } if (GET_CODE (operands[1]) == MEM) ! operands[1] = adjust_address (operands[1], QImode, 1); return \"move%.b %1,%0\"; }") *************** *** 1490,1496 **** return \"move%.l %1,%0\"; } if (GET_CODE (operands[1]) == MEM) ! operands[1] = adj_offsettable_operand (operands[1], 2); return \"move%.w %1,%0\"; }") --- 1496,1502 ---- return \"move%.l %1,%0\"; } if (GET_CODE (operands[1]) == MEM) ! operands[1] = adjust_address (operands[1], QImode, 2); return \"move%.w %1,%0\"; }") *************** *** 1533,1539 **** else if (GET_CODE (XEXP (operands[0], 0)) == POST_INC) return \"clr%.l %0\;move%.l %1,%0\"; else ! operands[2] = adj_offsettable_operand (operands[0], 4); if (GET_CODE (operands[1]) != REG || GET_CODE (operands[2]) != REG || REGNO (operands[1]) != REGNO (operands[2])) output_asm_insn (\"move%.l %1,%2\", operands); --- 1539,1545 ---- else if (GET_CODE (XEXP (operands[0], 0)) == POST_INC) return \"clr%.l %0\;move%.l %1,%0\"; else ! operands[2] = adjust_address (operands[0], SImode, 4); if (GET_CODE (operands[1]) != REG || GET_CODE (operands[2]) != REG || REGNO (operands[1]) != REGNO (operands[2])) output_asm_insn (\"move%.l %1,%2\", operands); *************** *** 1552,1562 **** " { operands[1] = make_safe_from (operands[1], operands[0]); ! if (GET_CODE (operands[0]) == SUBREG) ! operands[2] = gen_rtx_SUBREG (HImode, SUBREG_REG (operands[0]), ! SUBREG_WORD (operands[0])); ! else ! operands[2] = gen_rtx_SUBREG (HImode, operands[0], 0); }") (define_expand "zero_extendqihi2" --- 1558,1564 ---- " { operands[1] = make_safe_from (operands[1], operands[0]); ! operands[2] = gen_lowpart (HImode, operands[0]); }") (define_expand "zero_extendqihi2" *************** *** 1568,1578 **** " { operands[1] = make_safe_from (operands[1], operands[0]); ! if (GET_CODE (operands[0]) == SUBREG) ! operands[2] = gen_rtx_SUBREG (QImode, SUBREG_REG (operands[0]), ! SUBREG_WORD (operands[0])); ! else ! operands[2] = gen_rtx_SUBREG (QImode, operands[0], 0); }") (define_expand "zero_extendqisi2" --- 1570,1576 ---- " { operands[1] = make_safe_from (operands[1], operands[0]); ! operands[2] = gen_lowpart (QImode, operands[0]); }") (define_expand "zero_extendqisi2" *************** *** 1584,1594 **** " { operands[1] = make_safe_from (operands[1], operands[0]); ! if (GET_CODE (operands[0]) == SUBREG) ! operands[2] = gen_rtx_SUBREG (QImode, SUBREG_REG (operands[0]), ! SUBREG_WORD (operands[0])); ! else ! operands[2] = gen_rtx_SUBREG (QImode, operands[0], 0); }") ;; Patterns to recognize zero-extend insns produced by the combiner. --- 1582,1588 ---- " { operands[1] = make_safe_from (operands[1], operands[0]); ! operands[2] = gen_lowpart (QImode, operands[0]); }") ;; Patterns to recognize zero-extend insns produced by the combiner. *************** *** 1620,1626 **** else { output_asm_insn (\"clr%.w %0\", operands); ! operands[0] = adj_offsettable_operand (operands[0], 2); return \"move%.w %1,%0\"; } }") --- 1614,1620 ---- else { output_asm_insn (\"clr%.w %0\", operands); ! operands[0] = adjust_address (operands[0], HImode, 2); return \"move%.w %1,%0\"; } }") *************** *** 1661,1667 **** else { output_asm_insn (\"clr%.b %0\", operands); ! operands[0] = adj_offsettable_operand (operands[0], 1); return \"move%.b %1,%0\"; } }") --- 1655,1661 ---- else { output_asm_insn (\"clr%.b %0\", operands); ! operands[0] = adjust_address (operands[0], QImode, 1); return \"move%.b %1,%0\"; } }") *************** *** 1712,1718 **** else { output_asm_insn (\"clr%.l %0\", operands); ! operands[0] = adj_offsettable_operand (operands[0], 3); return \"move%.b %1,%0\"; } }") --- 1706,1712 ---- else { output_asm_insn (\"clr%.l %0\", operands); ! operands[0] = adjust_address (operands[0], QImode, 3); return \"move%.b %1,%0\"; } }") *************** *** 2110,2116 **** || GET_CODE (XEXP (operands[1], 0)) == PRE_DEC) operands[4] = operands[1]; else ! operands[4] = adj_offsettable_operand (operands[1], 4); if (GET_CODE (operands[1]) == MEM && GET_CODE (XEXP (operands[1], 0)) == PRE_DEC) output_asm_insn (\"move%.l %4,%3\", operands); --- 2104,2110 ---- || GET_CODE (XEXP (operands[1], 0)) == PRE_DEC) operands[4] = operands[1]; else ! operands[4] = adjust_address (operands[1], SImode, 4); if (GET_CODE (operands[1]) == MEM && GET_CODE (XEXP (operands[1], 0)) == PRE_DEC) output_asm_insn (\"move%.l %4,%3\", operands); *************** *** 2149,2155 **** ;; (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" "ro,r") (const_int 32)) (match_operand:DI 2 "general_operand" "0,0")))] "" --- 2143,2149 ---- ;; (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" "ro,d") (const_int 32)) (match_operand:DI 2 "general_operand" "0,0")))] "" *************** *** 2159,2165 **** if (GET_CODE (operands[0]) == REG) operands[2] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1); else ! operands[2] = adj_offsettable_operand (operands[0], 4); return \"add%.l %1,%2\;negx%.l %0\;neg%.l %0\"; } ") --- 2153,2159 ---- if (GET_CODE (operands[0]) == REG) operands[2] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1); else ! operands[2] = adjust_address (operands[0], SImode, 4); return \"add%.l %1,%2\;negx%.l %0\;neg%.l %0\"; } ") *************** *** 2168,2174 **** ;; (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" "ro,r") (const_int 32)) (match_operand:DI 2 "general_operand" "0,0")))] "" --- 2162,2168 ---- ;; (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" "ro,d") (const_int 32)) (match_operand:DI 2 "general_operand" "0,0")))] "" *************** *** 2178,2184 **** if (GET_CODE (operands[1]) == REG) operands[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1); else ! operands[1] = adj_offsettable_operand (operands[1], 4); return \"add%.l %1,%0\"; } ") --- 2172,2178 ---- if (GET_CODE (operands[1]) == REG) operands[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1); else ! operands[1] = adjust_address (operands[1], SImode, 4); return \"add%.l %1,%0\"; } ") *************** *** 2211,2217 **** split_double (operands[2], &high, &low); else { ! low = adj_offsettable_operand (operands[2], 4); high = operands[2]; } --- 2205,2211 ---- split_double (operands[2], &high, &low); else { ! low = adjust_address (operands[2], SImode, 4); high = operands[2]; } *************** *** 2266,2272 **** } else { ! operands[1] = adj_offsettable_operand (operands[0], 4); return \"add%.l %R2,%1\;move%.l %0,%3\;addx%.l %2,%3\;move%.l %3,%0\"; } } --- 2260,2266 ---- } else { ! operands[1] = adjust_address (operands[0], SImode, 4); return \"add%.l %R2,%1\;move%.l %0,%3\;addx%.l %2,%3\;move%.l %3,%0\"; } } *************** *** 2371,2377 **** } /* On the CPU32 it is faster to use two addqw instructions to add a small integer (8 < N <= 16) to a register. ! Likewise for subqw. */ if (TARGET_CPU32 && REG_P (operands[0])) { if (INTVAL (operands[2]) > 8 --- 2365,2371 ---- } /* On the CPU32 it is faster to use two addqw instructions to add a small integer (8 < N <= 16) to a register. ! Likewise for subqw. */ if (TARGET_CPU32 && REG_P (operands[0])) { if (INTVAL (operands[2]) > 8 *************** *** 2433,2439 **** } /* On the CPU32 it is faster to use two addqw instructions to add a small integer (8 < N <= 16) to a register. ! Likewise for subqw. */ if (TARGET_CPU32 && REG_P (operands[0])) { if (INTVAL (operands[1]) > 8 --- 2427,2433 ---- } /* On the CPU32 it is faster to use two addqw instructions to add a small integer (8 < N <= 16) to a register. ! Likewise for subqw. */ if (TARGET_CPU32 && REG_P (operands[0])) { if (INTVAL (operands[1]) > 8 *************** *** 2489,2495 **** } /* On the CPU32 it is faster to use two addqw instructions to add a small integer (8 < N <= 16) to a register. ! Likewise for subqw. */ if (TARGET_CPU32 && REG_P (operands[0])) { if (INTVAL (operands[1]) > 8 --- 2483,2489 ---- } /* On the CPU32 it is faster to use two addqw instructions to add a small integer (8 < N <= 16) to a register. ! Likewise for subqw. */ if (TARGET_CPU32 && REG_P (operands[0])) { if (INTVAL (operands[1]) > 8 *************** *** 2738,2744 **** if (GET_CODE (operands[1]) == REG) operands[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1); else ! operands[1] = adj_offsettable_operand (operands[1], 4); return \"sub%.l %1,%0\"; } ") --- 2732,2738 ---- if (GET_CODE (operands[1]) == REG) operands[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1); else ! operands[1] = adjust_address (operands[1], SImode, 4); return \"sub%.l %1,%0\"; } ") *************** *** 2773,2779 **** split_double (operands[2], &high, &low); else { ! low = adj_offsettable_operand (operands[2], 4); high = operands[2]; } --- 2767,2773 ---- split_double (operands[2], &high, &low); else { ! low = adjust_address (operands[2], SImode, 4); high = operands[2]; } *************** *** 2828,2834 **** } else { ! operands[1] = adj_offsettable_operand (operands[0], 4); return \"sub%.l %R2,%1\;move%.l %0,%3\;subx%.l %2,%3\;move%.l %3,%0\"; } } --- 2822,2828 ---- } else { ! operands[1] = adjust_address (operands[0], SImode, 4); return \"sub%.l %R2,%1\;move%.l %0,%3\;subx%.l %2,%3\;move%.l %3,%0\"; } } *************** *** 3096,3102 **** ;; the high-numbered word of the DImode operand[0] and operand[1]. (define_expand "umulsidi3" [(parallel ! [(set (subreg:SI (match_operand:DI 0 "register_operand" "") 1) (mult:SI (match_operand:SI 1 "register_operand" "") (match_operand:SI 2 "nonimmediate_operand" ""))) (set (subreg:SI (match_dup 0) 0) --- 3090,3096 ---- ;; the high-numbered word of the DImode operand[0] and operand[1]. (define_expand "umulsidi3" [(parallel ! [(set (subreg:SI (match_operand:DI 0 "register_operand" "") 4) (mult:SI (match_operand:SI 1 "register_operand" "") (match_operand:SI 2 "nonimmediate_operand" ""))) (set (subreg:SI (match_dup 0) 0) *************** *** 3135,3141 **** (define_expand "mulsidi3" [(parallel ! [(set (subreg:SI (match_operand:DI 0 "register_operand" "") 1) (mult:SI (match_operand:SI 1 "register_operand" "") (match_operand:SI 2 "nonimmediate_operand" ""))) (set (subreg:SI (match_dup 0) 0) --- 3129,3135 ---- (define_expand "mulsidi3" [(parallel ! [(set (subreg:SI (match_operand:DI 0 "register_operand" "") 4) (mult:SI (match_operand:SI 1 "register_operand" "") (match_operand:SI 2 "nonimmediate_operand" ""))) (set (subreg:SI (match_dup 0) 0) *************** *** 3159,3165 **** (define_insn "" [(set (match_operand:SI 0 "register_operand" "=d") (mult:SI (match_operand:SI 1 "register_operand" "%0") ! (match_operand:SI 2 "const_sint32_operand" ""))) (set (match_operand:SI 3 "register_operand" "=d") (truncate:SI (lshiftrt:DI (mult:DI (sign_extend:DI (match_dup 1)) (match_dup 2)) --- 3153,3159 ---- (define_insn "" [(set (match_operand:SI 0 "register_operand" "=d") (mult:SI (match_operand:SI 1 "register_operand" "%0") ! (match_operand:SI 2 "const_int_operand" "n"))) (set (match_operand:SI 3 "register_operand" "=d") (truncate:SI (lshiftrt:DI (mult:DI (sign_extend:DI (match_dup 1)) (match_dup 2)) *************** *** 3180,3190 **** " { operands[3] = gen_reg_rtx (SImode); ! if (GET_CODE (operands[2]) == CONST_INT ! || GET_CODE (operands[2]) == CONST_DOUBLE) { ! if (! const_uint32_operand (operands[2], VOIDmode)) ! abort (); /* We have to adjust the operand order for the matching constraints. */ emit_insn (gen_const_umulsi3_highpart (operands[0], operands[3], operands[1], operands[2])); --- 3174,3185 ---- " { operands[3] = gen_reg_rtx (SImode); ! ! if (GET_CODE (operands[2]) == CONST_INT) { ! operands[2] = immed_double_const (INTVAL (operands[2]) & 0xffffffff, ! 0, DImode); ! /* We have to adjust the operand order for the matching constraints. */ emit_insn (gen_const_umulsi3_highpart (operands[0], operands[3], operands[1], operands[2])); *************** *** 3208,3214 **** (truncate:SI (lshiftrt:DI (mult:DI (zero_extend:DI (match_operand:SI 2 "register_operand" "1")) ! (match_operand 3 "const_uint32_operand" "")) (const_int 32)))) (clobber (match_operand:SI 1 "register_operand" "=d"))] "TARGET_68020 && !TARGET_68060 && !TARGET_5200" --- 3203,3209 ---- (truncate:SI (lshiftrt:DI (mult:DI (zero_extend:DI (match_operand:SI 2 "register_operand" "1")) ! (match_operand:DI 3 "const_uint32_operand" "n")) (const_int 32)))) (clobber (match_operand:SI 1 "register_operand" "=d"))] "TARGET_68020 && !TARGET_68060 && !TARGET_5200" *************** *** 3227,3237 **** " { operands[3] = gen_reg_rtx (SImode); ! if (GET_CODE (operands[2]) == CONST_INT ! || GET_CODE (operands[2]) == CONST_DOUBLE) { - if (! const_sint32_operand (operands[2], VOIDmode)) - abort (); /* We have to adjust the operand order for the matching constraints. */ emit_insn (gen_const_smulsi3_highpart (operands[0], operands[3], operands[1], operands[2])); --- 3222,3229 ---- " { operands[3] = gen_reg_rtx (SImode); ! if (GET_CODE (operands[2]) == CONST_INT) { /* We have to adjust the operand order for the matching constraints. */ emit_insn (gen_const_smulsi3_highpart (operands[0], operands[3], operands[1], operands[2])); *************** *** 3255,3261 **** (truncate:SI (lshiftrt:DI (mult:DI (sign_extend:DI (match_operand:SI 2 "register_operand" "1")) ! (match_operand 3 "const_sint32_operand" "")) (const_int 32)))) (clobber (match_operand:SI 1 "register_operand" "=d"))] "TARGET_68020 && !TARGET_68060 && !TARGET_5200" --- 3247,3253 ---- (truncate:SI (lshiftrt:DI (mult:DI (sign_extend:DI (match_operand:SI 2 "register_operand" "1")) ! (match_operand:DI 3 "const_sint32_operand" "n")) (const_int 32)))) (clobber (match_operand:SI 1 "register_operand" "=d"))] "TARGET_68020 && !TARGET_68060 && !TARGET_5200" *************** *** 3639,3645 **** "* { CC_STATUS_INIT; ! /* We can get CONST_DOUBLE, but also const1_rtx etc. */ if (CONSTANT_P (operands[2])) { rtx hi, lo; --- 3631,3637 ---- "* { CC_STATUS_INIT; ! /* We can get CONST_DOUBLE, but also const1_rtx etc. */ if (CONSTANT_P (operands[2])) { rtx hi, lo; *************** *** 3665,3671 **** if (GET_CODE (operands[0]) == REG) operands[0] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1); else ! operands[0] = adj_offsettable_operand (operands[0], 4); switch (INTVAL (lo)) { case 0 : --- 3657,3663 ---- if (GET_CODE (operands[0]) == REG) operands[0] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1); else ! operands[0] = adjust_address (operands[0], SImode, 4); switch (INTVAL (lo)) { case 0 : *************** *** 3686,3697 **** } if (GET_CODE (operands[0]) != REG) { ! operands[1] = adj_offsettable_operand (operands[0], 4); return \"and%.l %2,%0\;and%.l %R2,%1\"; } if (GET_CODE (operands[2]) != REG) { ! operands[1] = adj_offsettable_operand (operands[2], 4); return \"and%.l %2,%0\;and%.l %1,%R0\"; } return \"and%.l %2,%0\;and%.l %R2,%R0\"; --- 3678,3689 ---- } if (GET_CODE (operands[0]) != REG) { ! operands[1] = adjust_address (operands[0], SImode, 4); return \"and%.l %2,%0\;and%.l %R2,%1\"; } if (GET_CODE (operands[2]) != REG) { ! operands[1] = adjust_address (operands[2], SImode, 4); return \"and%.l %2,%0\;and%.l %1,%R0\"; } return \"and%.l %2,%0\;and%.l %R2,%R0\"; *************** *** 3782,3793 **** if (GET_CODE (operands[0]) == REG) operands[0] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1); else ! operands[0] = adj_offsettable_operand (operands[0], 4); if (GET_MODE (operands[1]) == SImode) return \"or%.l %1,%0\"; byte_mode = (GET_MODE (operands[1]) == QImode); if (GET_CODE (operands[0]) == MEM) ! operands[0] = adj_offsettable_operand (operands[0], byte_mode ? 3 : 2); if (byte_mode) return \"or%.b %1,%0\"; else --- 3774,3786 ---- if (GET_CODE (operands[0]) == REG) operands[0] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1); else ! operands[0] = adjust_address (operands[0], SImode, 4); if (GET_MODE (operands[1]) == SImode) return \"or%.l %1,%0\"; byte_mode = (GET_MODE (operands[1]) == QImode); if (GET_CODE (operands[0]) == MEM) ! operands[0] = adjust_address (operands[0], byte_mode ? QImode : HImode, ! byte_mode ? 3 : 2); if (byte_mode) return \"or%.b %1,%0\"; else *************** *** 3803,3809 **** "* { CC_STATUS_INIT; ! /* We can get CONST_DOUBLE, but also const1_rtx etc. */ if (CONSTANT_P (operands[2])) { rtx hi, lo; --- 3796,3802 ---- "* { CC_STATUS_INIT; ! /* We can get CONST_DOUBLE, but also const1_rtx etc. */ if (CONSTANT_P (operands[2])) { rtx hi, lo; *************** *** 3831,3837 **** if (GET_CODE (operands[0]) == REG) operands[0] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1); else ! operands[0] = adj_offsettable_operand (operands[0], 4); switch (INTVAL (lo)) { case 0 : --- 3824,3830 ---- if (GET_CODE (operands[0]) == REG) operands[0] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1); else ! operands[0] = adjust_address (operands[0], SImode, 4); switch (INTVAL (lo)) { case 0 : *************** *** 3854,3865 **** } if (GET_CODE (operands[0]) != REG) { ! operands[1] = adj_offsettable_operand (operands[0], 4); return \"or%.l %2,%0\;or%.l %R2,%1\"; } if (GET_CODE (operands[2]) != REG) { ! operands[1] = adj_offsettable_operand (operands[2], 4); return \"or%.l %2,%0\;or%.l %1,%R0\"; } return \"or%.l %2,%0\;or%.l %R2,%R0\"; --- 3847,3858 ---- } if (GET_CODE (operands[0]) != REG) { ! operands[1] = adjust_address (operands[0], SImode, 4); return \"or%.l %2,%0\;or%.l %R2,%1\"; } if (GET_CODE (operands[2]) != REG) { ! operands[1] = adjust_address (operands[2], SImode, 4); return \"or%.l %2,%0\;or%.l %1,%R0\"; } return \"or%.l %2,%0\;or%.l %R2,%R0\"; *************** *** 3944,3950 **** { CC_STATUS_INIT; if (GET_CODE (operands[2]) != REG) ! operands[2] = adj_offsettable_operand (operands[2], 2); if (GET_CODE (operands[2]) != REG || REGNO (operands[2]) != REGNO (operands[0])) output_asm_insn (\"move%.w %2,%0\", operands); --- 3937,3943 ---- { CC_STATUS_INIT; if (GET_CODE (operands[2]) != REG) ! operands[2] = adjust_address (operands[2], HImode, 2); if (GET_CODE (operands[2]) != REG || REGNO (operands[2]) != REGNO (operands[0])) output_asm_insn (\"move%.w %2,%0\", operands); *************** *** 3963,3969 **** CC_STATUS_INIT; byte_mode = (GET_MODE (operands[1]) == QImode); if (GET_CODE (operands[0]) == MEM) ! operands[0] = adj_offsettable_operand (operands[0], byte_mode ? 3 : 2); if (byte_mode) return \"or%.b %1,%0\"; else --- 3956,3963 ---- CC_STATUS_INIT; byte_mode = (GET_MODE (operands[1]) == QImode); if (GET_CODE (operands[0]) == MEM) ! operands[0] = adjust_address (operands[0], byte_mode ? QImode : HImode, ! byte_mode ? 3 : 2); if (byte_mode) return \"or%.b %1,%0\"; else *************** *** 3981,3987 **** "* { CC_STATUS_INIT; ! /* We can get CONST_DOUBLE, but also const1_rtx etc. */ if (CONSTANT_P (operands[2])) { --- 3975,3981 ---- "* { CC_STATUS_INIT; ! /* We can get CONST_DOUBLE, but also const1_rtx etc. */ if (CONSTANT_P (operands[2])) { *************** *** 4010,4016 **** if (GET_CODE (operands[0]) == REG) operands[0] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1); else ! operands[0] = adj_offsettable_operand (operands[0], 4); switch (INTVAL (lo)) { case 0 : --- 4004,4010 ---- if (GET_CODE (operands[0]) == REG) operands[0] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1); else ! operands[0] = adjust_address (operands[0], SImode, 4); switch (INTVAL (lo)) { case 0 : *************** *** 4035,4046 **** } if (GET_CODE (operands[0]) != REG) { ! operands[1] = adj_offsettable_operand (operands[0], 4); return \"eor%.l %2,%0\;eor%.l %R2,%1\"; } if (GET_CODE (operands[2]) != REG) { ! operands[1] = adj_offsettable_operand (operands[2], 4); return \"eor%.l %2,%0\;eor%.l %1,%R0\"; } return \"eor%.l %2,%0\;eor%.l %R2,%R0\"; --- 4029,4040 ---- } if (GET_CODE (operands[0]) != REG) { ! operands[1] = adjust_address (operands[0], SImode, 4); return \"eor%.l %2,%0\;eor%.l %R2,%1\"; } if (GET_CODE (operands[2]) != REG) { ! operands[1] = adjust_address (operands[2], SImode, 4); return \"eor%.l %2,%0\;eor%.l %1,%R0\"; } return \"eor%.l %2,%0\;eor%.l %R2,%R0\"; *************** *** 4139,4145 **** if (GET_CODE (operands[0]) == REG) operands[1] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1); else ! operands[1] = adj_offsettable_operand (operands[0], 4); if (ADDRESS_REG_P (operands[0])) return \"exg %/d0,%1\;neg%.l %/d0\;exg %/d0,%1\;exg %/d0,%0\;negx%.l %/d0\;exg %/d0,%0\"; else --- 4133,4139 ---- if (GET_CODE (operands[0]) == REG) operands[1] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1); else ! operands[1] = adjust_address (operands[0], SImode, 4); if (ADDRESS_REG_P (operands[0])) return \"exg %/d0,%1\;neg%.l %/d0\;exg %/d0,%1\;exg %/d0,%0\;negx%.l %/d0\;exg %/d0,%0\"; else *************** *** 4452,4458 **** || GET_CODE (XEXP (operands[0], 0)) == PRE_DEC) operands[1] = operands[0]; else ! operands[1] = adj_offsettable_operand (operands[0], 4); return \"not%.l %1\;not%.l %0\"; }") --- 4446,4452 ---- || GET_CODE (XEXP (operands[0], 0)) == PRE_DEC) operands[1] = operands[0]; else ! operands[1] = adjust_address (operands[0], SImode, 4); return \"not%.l %1\;not%.l %0\"; }") *************** *** 4521,4527 **** if (GET_CODE (operands[0]) == REG) operands[2] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1); else ! operands[2] = adj_offsettable_operand (operands[0], 4); if (ADDRESS_REG_P (operands[0])) return \"move%.l %1,%0\;sub%.l %2,%2\"; else --- 4515,4521 ---- if (GET_CODE (operands[0]) == REG) operands[2] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1); else ! operands[2] = adjust_address (operands[0], SImode, 4); if (ADDRESS_REG_P (operands[0])) return \"move%.l %1,%0\;sub%.l %2,%2\"; else *************** *** 4545,4551 **** return \"move%.w %1,%2\;move%.l %2,%0\;clr%.l %0\"; else { ! operands[3] = adj_offsettable_operand (operands[0], 4); return \"move%.w %1,%2\;move%.l %2,%0\;clr%.l %3\"; } } --- 4539,4545 ---- return \"move%.w %1,%2\;move%.l %2,%0\;clr%.l %0\"; else { ! operands[3] = adjust_address (operands[0], SImode, 4); return \"move%.w %1,%2\;move%.l %2,%0\;clr%.l %3\"; } } *************** *** 4566,4572 **** if (GET_CODE (operands[1]) == REG) operands[3] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1); else ! operands[3] = adj_offsettable_operand (operands[1], 4); if (GET_CODE (operands[0]) == REG) operands[2] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1); else if (GET_CODE (XEXP (operands[0], 0)) == PRE_DEC) --- 4560,4566 ---- if (GET_CODE (operands[1]) == REG) operands[3] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1); else ! operands[3] = adjust_address (operands[1], SImode, 4); if (GET_CODE (operands[0]) == REG) operands[2] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1); else if (GET_CODE (XEXP (operands[0], 0)) == PRE_DEC) *************** *** 4574,4580 **** else if (GET_CODE (XEXP (operands[0], 0)) == POST_INC) return \"move%.l %3,%0\;clr%.l %0\"; else ! operands[2] = adj_offsettable_operand (operands[0], 4); if (ADDRESS_REG_P (operands[2])) return \"move%.l %3,%0\;sub%.l %2,%2\"; else --- 4568,4574 ---- else if (GET_CODE (XEXP (operands[0], 0)) == POST_INC) return \"move%.l %3,%0\;clr%.l %0\"; else ! operands[2] = adjust_address (operands[0], SImode, 4); if (ADDRESS_REG_P (operands[2])) return \"move%.l %3,%0\;sub%.l %2,%2\"; else *************** *** 4731,4749 **** (define_insn "subreghi1ashrdi_const32" [(set (match_operand:HI 0 "nonimmediate_operand" "=rm") (subreg:HI (ashiftrt:DI (match_operand:DI 1 "general_operand" "ro") ! (const_int 32)) 1))] "" "* { if (GET_CODE (operands[1]) != REG) ! operands[1] = adj_offsettable_operand (operands[1], 2); return \"move%.w %1,%0\"; } ") (define_insn "subregsi1ashrdi_const32" [(set (match_operand:SI 0 "nonimmediate_operand" "=rm") (subreg:SI (ashiftrt:DI (match_operand:DI 1 "general_operand" "ro") ! (const_int 32)) 1))] "" "* { --- 4725,4743 ---- (define_insn "subreghi1ashrdi_const32" [(set (match_operand:HI 0 "nonimmediate_operand" "=rm") (subreg:HI (ashiftrt:DI (match_operand:DI 1 "general_operand" "ro") ! (const_int 32)) 6))] "" "* { if (GET_CODE (operands[1]) != REG) ! operands[1] = adjust_address (operands[1], HImode, 2); return \"move%.w %1,%0\"; } ") (define_insn "subregsi1ashrdi_const32" [(set (match_operand:SI 0 "nonimmediate_operand" "=rm") (subreg:SI (ashiftrt:DI (match_operand:DI 1 "general_operand" "ro") ! (const_int 32)) 4))] "" "* { *************** *** 4777,4783 **** if (which_alternative == 1) operands[3] = operands[0]; else ! operands[3] = adj_offsettable_operand (operands[0], 4); if (TARGET_68020) return \"move%.l %1,%3\;smi %2\;extb%.l %2\;move%.l %2,%0\"; else --- 4771,4777 ---- if (which_alternative == 1) operands[3] = operands[0]; else ! operands[3] = adjust_address (operands[0], SImode, 4); if (TARGET_68020) return \"move%.l %1,%3\;smi %2\;extb%.l %2\;move%.l %2,%0\"; else *************** *** 4894,4903 **** ;;(define_insn "" ;; [(set (cc0) ;; (subreg:SI (lshiftrt:DI (match_operand:DI 0 "general_operand" "ro") ! ;; (const_int 32)) 1)) ;; (set (match_operand:SI 1 "nonimmediate_operand" "=dm") ;; (subreg:SI (lshiftrt:DI (match_dup 0) ! ;; (const_int 32)) 1))] ;; "" ;; "* ;;{ --- 4888,4897 ---- ;;(define_insn "" ;; [(set (cc0) ;; (subreg:SI (lshiftrt:DI (match_operand:DI 0 "general_operand" "ro") ! ;; (const_int 32)) 4)) ;; (set (match_operand:SI 1 "nonimmediate_operand" "=dm") ;; (subreg:SI (lshiftrt:DI (match_dup 0) ! ;; (const_int 32)) 4))] ;; "" ;; "* ;;{ *************** *** 4917,4930 **** ;; if (GET_CODE (operands[1]) == REG) ;; operands[2] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1); ;; else ! ;; operands[2] = adj_offsettable_operand (operands[1], 4); ;; return \"move%.l %0,%2\;clr%.l %1\"; ;;} ") (define_insn "subreg1lshrdi_const32" [(set (match_operand:SI 0 "nonimmediate_operand" "=rm") (subreg:SI (lshiftrt:DI (match_operand:DI 1 "general_operand" "ro") ! (const_int 32)) 1))] "" "* { --- 4911,4924 ---- ;; if (GET_CODE (operands[1]) == REG) ;; operands[2] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1); ;; else ! ;; operands[2] = adjust_address (operands[1], SImode, 4); ;; return \"move%.l %0,%2\;clr%.l %1\"; ;;} ") (define_insn "subreg1lshrdi_const32" [(set (match_operand:SI 0 "nonimmediate_operand" "=rm") (subreg:SI (lshiftrt:DI (match_operand:DI 1 "general_operand" "ro") ! (const_int 32)) 4))] "" "* { *************** *** 4946,4956 **** if (GET_CODE (operands[0]) == REG) operands[2] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1); else ! operands[2] = adj_offsettable_operand (operands[0], 4); if (GET_CODE (operands[1]) == REG) operands[3] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1); else ! operands[3] = adj_offsettable_operand (operands[1], 4); if (ADDRESS_REG_P (operands[0])) return \"move%.l %1,%2\;sub%.l %0,%0\"; else --- 4940,4950 ---- if (GET_CODE (operands[0]) == REG) operands[2] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1); else ! operands[2] = adjust_address (operands[0], SImode, 4); if (GET_CODE (operands[1]) == REG) operands[3] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1); else ! operands[3] = adjust_address (operands[1], SImode, 4); if (ADDRESS_REG_P (operands[0])) return \"move%.l %1,%2\;sub%.l %0,%0\"; else *************** *** 5210,5216 **** (define_insn "bsetmemqi" [(set (match_operand:QI 0 "memory_operand" "+m") (ior:QI (subreg:QI (ashift:SI (const_int 1) ! (match_operand:SI 1 "general_operand" "d")) 0) (match_dup 0)))] "" "* --- 5204,5210 ---- (define_insn "bsetmemqi" [(set (match_operand:QI 0 "memory_operand" "+m") (ior:QI (subreg:QI (ashift:SI (const_int 1) ! (match_operand:SI 1 "general_operand" "d")) 3) (match_dup 0)))] "" "* *************** *** 5224,5230 **** [(set (match_operand:QI 0 "memory_operand" "+m") (ior:QI (subreg:QI (ashift:SI (const_int 1) (match_operator:SI 2 "extend_operator" ! [(match_operand 1 "general_operand" "d")])) 0) (match_dup 0)))] "" "* --- 5218,5224 ---- [(set (match_operand:QI 0 "memory_operand" "+m") (ior:QI (subreg:QI (ashift:SI (const_int 1) (match_operator:SI 2 "extend_operator" ! [(match_operand 1 "general_operand" "d")])) 3) (match_dup 0)))] "" "* *************** *** 5285,5291 **** "* { operands[0] ! = adj_offsettable_operand (operands[0], INTVAL (operands[1]) / 8); return \"move%.l %2,%0\"; }") --- 5279,5285 ---- "* { operands[0] ! = adjust_address (operands[0], SImode, INTVAL (operands[1]) / 8); return \"move%.l %2,%0\"; }") *************** *** 5308,5319 **** return \"bfins %3,%0{%b2:%b1}\"; } else ! operands[0] ! = adj_offsettable_operand (operands[0], INTVAL (operands[2]) / 8); if (GET_CODE (operands[3]) == MEM) ! operands[3] = adj_offsettable_operand (operands[3], ! (32 - INTVAL (operands[1])) / 8); if (INTVAL (operands[1]) == 8) return \"move%.b %3,%0\"; return \"move%.w %3,%0\"; --- 5302,5316 ---- return \"bfins %3,%0{%b2:%b1}\"; } else ! operands[0] = adjust_address (operands[0], ! INTVAL (operands[1]) == 8 ? QImode : HImode, ! INTVAL (operands[2]) / 8); if (GET_CODE (operands[3]) == MEM) ! operands[3] = adjust_address (operands[3], ! INTVAL (operands[1]) == 8 ? QImode : HImode, ! (32 - INTVAL (operands[1])) / 8); ! if (INTVAL (operands[1]) == 8) return \"move%.b %3,%0\"; return \"move%.w %3,%0\"; *************** *** 5338,5344 **** "* { operands[1] ! = adj_offsettable_operand (operands[1], INTVAL (operands[2]) / 8); return \"move%.l %1,%0\"; }") --- 5335,5341 ---- "* { operands[1] ! = adjust_address (operands[1], SImode, INTVAL (operands[2]) / 8); return \"move%.l %1,%0\"; }") *************** *** 5363,5374 **** } else operands[1] ! = adj_offsettable_operand (operands[1], INTVAL (operands[3]) / 8); output_asm_insn (\"clr%.l %0\", operands); if (GET_CODE (operands[0]) == MEM) ! operands[0] = adj_offsettable_operand (operands[0], ! (32 - INTVAL (operands[1])) / 8); if (INTVAL (operands[2]) == 8) return \"move%.b %1,%0\"; return \"move%.w %1,%0\"; --- 5360,5373 ---- } else operands[1] ! = adjust_address (operands[1], SImode, INTVAL (operands[3]) / 8); output_asm_insn (\"clr%.l %0\", operands); if (GET_CODE (operands[0]) == MEM) ! operands[0] = adjust_address (operands[0], ! INTVAL (operands[2]) == 8 ? QImode : HImode, ! (32 - INTVAL (operands[1])) / 8); ! if (INTVAL (operands[2]) == 8) return \"move%.b %1,%0\"; return \"move%.w %1,%0\"; *************** *** 5392,5398 **** "* { operands[1] ! = adj_offsettable_operand (operands[1], INTVAL (operands[2]) / 8); return \"move%.l %1,%0\"; }") --- 5391,5397 ---- "* { operands[1] ! = adjust_address (operands[1], SImode, INTVAL (operands[2]) / 8); return \"move%.l %1,%0\"; }") *************** *** 5416,5422 **** } else operands[1] ! = adj_offsettable_operand (operands[1], INTVAL (operands[3]) / 8); if (INTVAL (operands[2]) == 8) return \"move%.b %1,%0\;extb%.l %0\"; --- 5415,5423 ---- } else operands[1] ! = adjust_address (operands[1], ! INTVAL (operands[2]) == 8 ? QImode : HImode, ! INTVAL (operands[3]) / 8); if (INTVAL (operands[2]) == 8) return \"move%.b %1,%0\;extb%.l %0\"; *************** *** 5884,5889 **** --- 5885,6078 ---- "* cc_status = cc_prev_status; return \"sls %0\"; ") + + (define_expand "sordered" + [(set (match_operand:QI 0 "register_operand" "") + (ordered:QI (cc0) (const_int 0)))] + "TARGET_68881 && !TARGET_68060" + { + if (! m68k_last_compare_had_fp_operands) + abort (); + m68k_last_compare_had_fp_operands = 0; + }) + + (define_insn "*sordered_1" + [(set (match_operand:QI 0 "register_operand" "=d") + (ordered:QI (cc0) (const_int 0)))] + "TARGET_68881 && !TARGET_68060" + { + cc_status = cc_prev_status; + return "fsor %0"; + }) + + (define_expand "sunordered" + [(set (match_operand:QI 0 "register_operand" "") + (unordered:QI (cc0) (const_int 0)))] + "TARGET_68881 && !TARGET_68060" + { + if (! m68k_last_compare_had_fp_operands) + abort (); + m68k_last_compare_had_fp_operands = 0; + }) + + (define_insn "*sunordered_1" + [(set (match_operand:QI 0 "register_operand" "=d") + (unordered:QI (cc0) (const_int 0)))] + "TARGET_68881 && !TARGET_68060" + { + cc_status = cc_prev_status; + return "fsun %0"; + }) + + (define_expand "suneq" + [(set (match_operand:QI 0 "register_operand" "") + (uneq:QI (cc0) (const_int 0)))] + "TARGET_68881 && !TARGET_68060" + { + if (! m68k_last_compare_had_fp_operands) + abort (); + m68k_last_compare_had_fp_operands = 0; + }) + + (define_insn "*suneq_1" + [(set (match_operand:QI 0 "register_operand" "=d") + (uneq:QI (cc0) (const_int 0)))] + "TARGET_68881 && !TARGET_68060" + { + cc_status = cc_prev_status; + return "fsueq %0"; + }) + + (define_expand "sunge" + [(set (match_operand:QI 0 "register_operand" "") + (unge:QI (cc0) (const_int 0)))] + "TARGET_68881 && !TARGET_68060" + { + if (! m68k_last_compare_had_fp_operands) + abort (); + m68k_last_compare_had_fp_operands = 0; + }) + + (define_insn "*sunge_1" + [(set (match_operand:QI 0 "register_operand" "=d") + (unge:QI (cc0) (const_int 0)))] + "TARGET_68881 && !TARGET_68060" + { + cc_status = cc_prev_status; + return "fsuge %0"; + }) + + (define_expand "sungt" + [(set (match_operand:QI 0 "register_operand" "") + (ungt:QI (cc0) (const_int 0)))] + "TARGET_68881 && !TARGET_68060" + { + if (! m68k_last_compare_had_fp_operands) + abort (); + m68k_last_compare_had_fp_operands = 0; + }) + + (define_insn "*sungt_1" + [(set (match_operand:QI 0 "register_operand" "=d") + (ungt:QI (cc0) (const_int 0)))] + "TARGET_68881 && !TARGET_68060" + { + cc_status = cc_prev_status; + return "fsugt %0"; + }) + + (define_expand "sunle" + [(set (match_operand:QI 0 "register_operand" "") + (unle:QI (cc0) (const_int 0)))] + "TARGET_68881 && !TARGET_68060" + { + if (! m68k_last_compare_had_fp_operands) + abort (); + m68k_last_compare_had_fp_operands = 0; + }) + + (define_insn "*sunle_1" + [(set (match_operand:QI 0 "register_operand" "=d") + (unle:QI (cc0) (const_int 0)))] + "TARGET_68881 && !TARGET_68060" + { + cc_status = cc_prev_status; + return "fsule %0"; + }) + + (define_expand "sunlt" + [(set (match_operand:QI 0 "register_operand" "") + (unlt:QI (cc0) (const_int 0)))] + "TARGET_68881 && !TARGET_68060" + { + if (! m68k_last_compare_had_fp_operands) + abort (); + m68k_last_compare_had_fp_operands = 0; + }) + + (define_insn "*sunlt_1" + [(set (match_operand:QI 0 "register_operand" "=d") + (unlt:QI (cc0) (const_int 0)))] + "TARGET_68881 && !TARGET_68060" + { + cc_status = cc_prev_status; + return "fsult %0"; + }) + + (define_expand "sltgt" + [(set (match_operand:QI 0 "register_operand" "") + (ltgt:QI (cc0) (const_int 0)))] + "TARGET_68881 && !TARGET_68060" + { + if (! m68k_last_compare_had_fp_operands) + abort (); + m68k_last_compare_had_fp_operands = 0; + }) + + (define_insn "*sltgt_1" + [(set (match_operand:QI 0 "register_operand" "=d") + (ltgt:QI (cc0) (const_int 0)))] + "TARGET_68881 && !TARGET_68060" + { + cc_status = cc_prev_status; + return "fsogl %0"; + }) + + (define_insn "*fsogt_1" + [(set (match_operand:QI 0 "register_operand" "=d") + (not:QI (unle:QI (cc0) (const_int 0))))] + "TARGET_68881 && !TARGET_68060" + { + cc_status = cc_prev_status; + return "fsogt %0"; + }) + + (define_insn "*fsoge_1" + [(set (match_operand:QI 0 "register_operand" "=d") + (not:QI (unlt:QI (cc0) (const_int 0))))] + "TARGET_68881 && !TARGET_68060" + { + cc_status = cc_prev_status; + return "fsoge %0"; + }) + + (define_insn "*fsolt_1" + [(set (match_operand:QI 0 "register_operand" "=d") + (not:QI (unge:QI (cc0) (const_int 0))))] + "TARGET_68881 && !TARGET_68060" + { + cc_status = cc_prev_status; + return "fsolt %0"; + }) + + (define_insn "*fsole_1" + [(set (match_operand:QI 0 "register_operand" "=d") + (not:QI (ungt:QI (cc0) (const_int 0))))] + "TARGET_68881 && !TARGET_68060" + { + cc_status = cc_prev_status; + return "fsole %0"; + }) ;; Basic conditional jump instructions. *************** *** 5919,5925 **** if (GET_CODE (operands[0]) == REG) operands[3] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1); else ! operands[3] = adj_offsettable_operand (operands[0], 4); if (! ADDRESS_REG_P (operands[0])) { if (reg_overlap_mentioned_p (operands[2], operands[0])) --- 6108,6114 ---- if (GET_CODE (operands[0]) == REG) operands[3] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1); else ! operands[3] = adjust_address (operands[0], SImode, 4); if (! ADDRESS_REG_P (operands[0])) { if (reg_overlap_mentioned_p (operands[2], operands[0])) *************** *** 5999,6005 **** if (GET_CODE (operands[0]) == REG) operands[3] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1); else ! operands[3] = adj_offsettable_operand (operands[0], 4); if (!ADDRESS_REG_P (operands[0])) { if (reg_overlap_mentioned_p (operands[2], operands[0])) --- 6188,6194 ---- if (GET_CODE (operands[0]) == REG) operands[3] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1); else ! operands[3] = adjust_address (operands[0], SImode, 4); if (!ADDRESS_REG_P (operands[0])) { if (reg_overlap_mentioned_p (operands[2], operands[0])) *************** *** 6304,6309 **** --- 6493,6626 ---- return \"jls %l0\"; #endif ") + + (define_insn "bordered" + [(set (pc) + (if_then_else (ordered (cc0) (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] + "TARGET_68881" + { + if (!(cc_prev_status.flags & CC_IN_68881)) + abort (); + #ifdef MOTOROLA + return "fbor %l0"; + #else + return "fjor %l0"; + #endif + }) + + (define_insn "bunordered" + [(set (pc) + (if_then_else (unordered (cc0) (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] + "TARGET_68881" + { + if (!(cc_prev_status.flags & CC_IN_68881)) + abort (); + #ifdef MOTOROLA + return "fbun %l0"; + #else + return "fjun %l0"; + #endif + }) + + (define_insn "buneq" + [(set (pc) + (if_then_else (uneq (cc0) (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] + "TARGET_68881" + { + if (!(cc_prev_status.flags & CC_IN_68881)) + abort (); + #ifdef MOTOROLA + return "fbueq %l0"; + #else + return "fjueq %l0"; + #endif + }) + + (define_insn "bunge" + [(set (pc) + (if_then_else (unge (cc0) (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] + "TARGET_68881" + { + if (!(cc_prev_status.flags & CC_IN_68881)) + abort (); + #ifdef MOTOROLA + return "fbuge %l0"; + #else + return "fjuge %l0"; + #endif + }) + + (define_insn "bungt" + [(set (pc) + (if_then_else (ungt (cc0) (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] + "TARGET_68881" + { + if (!(cc_prev_status.flags & CC_IN_68881)) + abort (); + #ifdef MOTOROLA + return "fbugt %l0"; + #else + return "fjugt %l0"; + #endif + }) + + (define_insn "bunle" + [(set (pc) + (if_then_else (unle (cc0) (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] + "TARGET_68881" + { + if (!(cc_prev_status.flags & CC_IN_68881)) + abort (); + #ifdef MOTOROLA + return "fbule %l0"; + #else + return "fjule %l0"; + #endif + }) + + (define_insn "bunlt" + [(set (pc) + (if_then_else (unlt (cc0) (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] + "TARGET_68881" + { + if (!(cc_prev_status.flags & CC_IN_68881)) + abort (); + #ifdef MOTOROLA + return "fbult %l0"; + #else + return "fjult %l0"; + #endif + }) + + (define_insn "bltgt" + [(set (pc) + (if_then_else (ltgt (cc0) (const_int 0)) + (label_ref (match_operand 0 "" "")) + (pc)))] + "TARGET_68881" + { + if (!(cc_prev_status.flags & CC_IN_68881)) + abort (); + #ifdef MOTOROLA + return "fbogl %l0"; + #else + return "fjogl %l0"; + #endif + }) ;; Negated conditional jump instructions. *************** *** 6458,6463 **** --- 6775,6892 ---- return \"jhi %l0\"; #endif ") + + (define_insn "*bordered_rev" + [(set (pc) + (if_then_else (ordered (cc0) (const_int 0)) + (pc) + (label_ref (match_operand 0 "" ""))))] + "TARGET_68881" + { + if (!(cc_prev_status.flags & CC_IN_68881)) + abort (); + #ifdef MOTOROLA + return "fbun %l0"; + #else + return "fjun %l0"; + #endif + }) + + (define_insn "*bunordered_rev" + [(set (pc) + (if_then_else (unordered (cc0) (const_int 0)) + (pc) + (label_ref (match_operand 0 "" ""))))] + "TARGET_68881" + { + if (!(cc_prev_status.flags & CC_IN_68881)) + abort (); + #ifdef MOTOROLA + return "fbor %l0"; + #else + return "fjor %l0"; + #endif + }) + + (define_insn "*buneq_rev" + [(set (pc) + (if_then_else (uneq (cc0) (const_int 0)) + (pc) + (label_ref (match_operand 0 "" ""))))] + "TARGET_68881" + { + if (!(cc_prev_status.flags & CC_IN_68881)) + abort (); + #ifdef MOTOROLA + return "fbogl %l0"; + #else + return "fjogl %l0"; + #endif + }) + + (define_insn "*bunge_rev" + [(set (pc) + (if_then_else (unge (cc0) (const_int 0)) + (pc) + (label_ref (match_operand 0 "" ""))))] + "TARGET_68881" + { + if (!(cc_prev_status.flags & CC_IN_68881)) + abort (); + #ifdef MOTOROLA + return "fbolt %l0"; + #else + return "fjolt %l0"; + #endif + }) + + (define_insn "*bunle_rev" + [(set (pc) + (if_then_else (unle (cc0) (const_int 0)) + (pc) + (label_ref (match_operand 0 "" ""))))] + "TARGET_68881" + { + if (!(cc_prev_status.flags & CC_IN_68881)) + abort (); + #ifdef MOTOROLA + return "fbogt %l0"; + #else + return "fjogt %l0"; + #endif + }) + + (define_insn "*bunlt_rev" + [(set (pc) + (if_then_else (unlt (cc0) (const_int 0)) + (pc) + (label_ref (match_operand 0 "" ""))))] + "TARGET_68881" + { + if (!(cc_prev_status.flags & CC_IN_68881)) + abort (); + #ifdef MOTOROLA + return "fboge %l0"; + #else + return "fjoge %l0"; + #endif + }) + + (define_insn "*bltgt_rev" + [(set (pc) + (if_then_else (ltgt (cc0) (const_int 0)) + (pc) + (label_ref (match_operand 0 "" ""))))] + "TARGET_68881" + { + if (!(cc_prev_status.flags & CC_IN_68881)) + abort (); + #ifdef MOTOROLA + return "fbueq %l0"; + #else + return "fjueq %l0"; + #endif + }) ;; Unconditional and other jump instructions (define_insn "jump" *************** *** 6848,6854 **** return \"bsr.l %0\"; #else /* The ',a1' is a dummy argument telling the Sun assembler we want PIC, ! GAS just plain ignores it. FIXME: not anymore, gas doesnt! */ return \"jbsr %0,a1\"; #endif #endif --- 7277,7283 ---- return \"bsr.l %0\"; #else /* The ',a1' is a dummy argument telling the Sun assembler we want PIC, ! GAS just plain ignores it. FIXME: not anymore, gas doesn't! */ return \"jbsr %0,a1\"; #endif #endif *************** *** 6918,6924 **** return \"bsr.l %1\"; #else /* The ',a1' is a dummy argument telling the Sun assembler we want PIC ! GAS just plain ignores it. FIXME: Not anymore, gas doesnt! */ return \"jbsr %1,a1\"; #endif #endif --- 7347,7353 ---- return \"bsr.l %1\"; #else /* The ',a1' is a dummy argument telling the Sun assembler we want PIC ! GAS just plain ignores it. FIXME: Not anymore, gas doesn't! */ return \"jbsr %1,a1\"; #endif #endif *************** *** 7188,7194 **** (define_peephole [(set (match_operand:SI 0 "register_operand" "=d") (const_int 0)) ! (set (strict_low_part (subreg:HI (match_dup 0) 0)) (match_operand:HI 1 "general_operand" "rmn"))] "strict_low_part_peephole_ok (HImode, prev_nonnote_insn (insn), operands[0])" "* --- 7617,7623 ---- (define_peephole [(set (match_operand:SI 0 "register_operand" "=d") (const_int 0)) ! (set (strict_low_part (subreg:HI (match_dup 0) 2)) (match_operand:HI 1 "general_operand" "rmn"))] "strict_low_part_peephole_ok (HImode, prev_nonnote_insn (insn), operands[0])" "* *************** *** 7224,7229 **** --- 7653,7659 ---- ;; ;; Which moves the jCC condition outside the inner loop for free. ;; + (define_peephole [(set (pc) (if_then_else (match_operator 3 "valid_dbcc_comparison_p" [(cc0) (const_int 0)]) *************** *** 7232,7238 **** (parallel [(set (pc) (if_then_else ! (ge (plus:HI (match_operand:HI 0 "register_operand" "+d") (const_int -1)) (const_int 0)) (label_ref (match_operand 1 "" "")) --- 7662,7714 ---- (parallel [(set (pc) (if_then_else ! (ne (match_operand:HI 0 "register_operand" "") ! (const_int 0)) ! (label_ref (match_operand 1 "" "")) ! (pc))) ! (set (match_dup 0) ! (plus:HI (match_dup 0) ! (const_int -1)))])] ! "!TARGET_5200 && DATA_REG_P (operands[0]) && ! flags_in_68881 ()" ! "* ! { ! CC_STATUS_INIT; ! output_dbcc_and_branch (operands); ! return \"\"; ! }") ! ! (define_peephole ! [(set (pc) (if_then_else (match_operator 3 "valid_dbcc_comparison_p" ! [(cc0) (const_int 0)]) ! (label_ref (match_operand 2 "" "")) ! (pc))) ! (parallel ! [(set (pc) ! (if_then_else ! (ne (match_operand:SI 0 "register_operand" "") ! (const_int 0)) ! (label_ref (match_operand 1 "" "")) ! (pc))) ! (set (match_dup 0) ! (plus:SI (match_dup 0) ! (const_int -1)))])] ! "!TARGET_5200 && DATA_REG_P (operands[0]) && ! flags_in_68881 ()" ! "* ! { ! CC_STATUS_INIT; ! output_dbcc_and_branch (operands); ! return \"\"; ! }") ! ! (define_peephole ! [(set (pc) (if_then_else (match_operator 3 "valid_dbcc_comparison_p" ! [(cc0) (const_int 0)]) ! (label_ref (match_operand 2 "" "")) ! (pc))) ! (parallel ! [(set (pc) ! (if_then_else ! (ge (plus:HI (match_operand:HI 0 "register_operand" "") (const_int -1)) (const_int 0)) (label_ref (match_operand 1 "" "")) *************** *** 7256,7262 **** (parallel [(set (pc) (if_then_else ! (ge (plus:SI (match_operand:SI 0 "register_operand" "+d") (const_int -1)) (const_int 0)) (label_ref (match_operand 1 "" "")) --- 7732,7738 ---- (parallel [(set (pc) (if_then_else ! (ge (plus:SI (match_operand:SI 0 "register_operand" "") (const_int -1)) (const_int 0)) (label_ref (match_operand 1 "" "")) *************** *** 7840,7846 **** (define_insn "sinsf2" [(set (match_operand:SF 0 "nonimmediate_operand" "=f") (unspec:SF [(match_operand:SF 1 "general_operand" "fm")] 1))] ! "TARGET_68881 && flag_fast_math" "* { if (FP_REG_P (operands[1])) --- 8316,8322 ---- (define_insn "sinsf2" [(set (match_operand:SF 0 "nonimmediate_operand" "=f") (unspec:SF [(match_operand:SF 1 "general_operand" "fm")] 1))] ! "TARGET_68881 && flag_unsafe_math_optimizations" "* { if (FP_REG_P (operands[1])) *************** *** 7852,7858 **** (define_insn "sindf2" [(set (match_operand:DF 0 "nonimmediate_operand" "=f") (unspec:DF [(match_operand:DF 1 "general_operand" "fm")] 1))] ! "TARGET_68881 && flag_fast_math" "* { if (FP_REG_P (operands[1])) --- 8328,8334 ---- (define_insn "sindf2" [(set (match_operand:DF 0 "nonimmediate_operand" "=f") (unspec:DF [(match_operand:DF 1 "general_operand" "fm")] 1))] ! "TARGET_68881 && flag_unsafe_math_optimizations" "* { if (FP_REG_P (operands[1])) *************** *** 7864,7876 **** (define_insn "sinxf2" [(set (match_operand:XF 0 "nonimmediate_operand" "=f") (unspec:XF [(match_operand:XF 1 "nonimmediate_operand" "fm")] 1))] ! "TARGET_68881 && flag_fast_math" "fsin%.x %1,%0") (define_insn "cossf2" [(set (match_operand:SF 0 "nonimmediate_operand" "=f") (unspec:SF [(match_operand:SF 1 "general_operand" "fm")] 2))] ! "TARGET_68881 && flag_fast_math" "* { if (FP_REG_P (operands[1])) --- 8340,8352 ---- (define_insn "sinxf2" [(set (match_operand:XF 0 "nonimmediate_operand" "=f") (unspec:XF [(match_operand:XF 1 "nonimmediate_operand" "fm")] 1))] ! "TARGET_68881 && flag_unsafe_math_optimizations" "fsin%.x %1,%0") (define_insn "cossf2" [(set (match_operand:SF 0 "nonimmediate_operand" "=f") (unspec:SF [(match_operand:SF 1 "general_operand" "fm")] 2))] ! "TARGET_68881 && flag_unsafe_math_optimizations" "* { if (FP_REG_P (operands[1])) *************** *** 7882,7888 **** (define_insn "cosdf2" [(set (match_operand:DF 0 "nonimmediate_operand" "=f") (unspec:DF [(match_operand:DF 1 "general_operand" "fm")] 2))] ! "TARGET_68881 && flag_fast_math" "* { if (FP_REG_P (operands[1])) --- 8358,8364 ---- (define_insn "cosdf2" [(set (match_operand:DF 0 "nonimmediate_operand" "=f") (unspec:DF [(match_operand:DF 1 "general_operand" "fm")] 2))] ! "TARGET_68881 && flag_unsafe_math_optimizations" "* { if (FP_REG_P (operands[1])) *************** *** 7894,7900 **** (define_insn "cosxf2" [(set (match_operand:XF 0 "nonimmediate_operand" "=f") (unspec:XF [(match_operand:XF 1 "nonimmediate_operand" "fm")] 2))] ! "TARGET_68881 && flag_fast_math" "fcos%.x %1,%0") (define_insn "trap" --- 8370,8376 ---- (define_insn "cosxf2" [(set (match_operand:XF 0 "nonimmediate_operand" "=f") (unspec:XF [(match_operand:XF 1 "nonimmediate_operand" "fm")] 2))] ! "TARGET_68881 && flag_unsafe_math_optimizations" "fcos%.x %1,%0") (define_insn "trap" diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/m68kelf.h gcc-3.1/gcc/config/m68k/m68kelf.h *** gcc-3.0.4/gcc/config/m68k/m68kelf.h Mon Sep 25 13:22:45 2000 --- gcc-3.1/gcc/config/m68k/m68kelf.h Mon Dec 17 15:05:34 2001 *************** Boston, MA 02111-1307, USA. */ *** 49,60 **** #define REGISTER_PREFIX "%" /* The prefix for local (compiler generated) labels. ! These labels will not appear in the symbol table. */ #undef LOCAL_LABEL_PREFIX #define LOCAL_LABEL_PREFIX "." ! /* The prefix to add to user-visible assembler symbols. */ #undef USER_LABEL_PREFIX #define USER_LABEL_PREFIX "" --- 49,60 ---- #define REGISTER_PREFIX "%" /* The prefix for local (compiler generated) labels. ! These labels will not appear in the symbol table. */ #undef LOCAL_LABEL_PREFIX #define LOCAL_LABEL_PREFIX "." ! /* The prefix to add to user-visible assembler symbols. */ #undef USER_LABEL_PREFIX #define USER_LABEL_PREFIX "" *************** Boston, MA 02111-1307, USA. */ *** 98,107 **** #undef ASM_OUTPUT_ALIGN #define ASM_OUTPUT_ALIGN(FILE,LOG) \ if ((LOG) > 0) \ fprintf ((FILE), "%s%u\n", ALIGN_ASM_OP, 1 << (LOG)); \ else if ((LOG) > 31) \ ! abort (); /* Use proper assembler syntax for these macros. */ #undef ASM_OUTPUT_REG_PUSH --- 98,109 ---- #undef ASM_OUTPUT_ALIGN #define ASM_OUTPUT_ALIGN(FILE,LOG) \ + do { \ if ((LOG) > 0) \ fprintf ((FILE), "%s%u\n", ALIGN_ASM_OP, 1 << (LOG)); \ else if ((LOG) > 31) \ ! abort (); \ ! } while (0) /* Use proper assembler syntax for these macros. */ #undef ASM_OUTPUT_REG_PUSH *************** Boston, MA 02111-1307, USA. */ *** 116,122 **** g++ assembler names. When this is defined, g++ uses embedded '.' characters and some m68k assemblers have problems with this. The chances are much greater that any particular assembler will permit ! embedded '$' characters. */ #undef NO_DOLLAR_IN_LABEL --- 118,124 ---- g++ assembler names. When this is defined, g++ uses embedded '.' characters and some m68k assemblers have problems with this. The chances are much greater that any particular assembler will permit ! embedded '$' characters. */ #undef NO_DOLLAR_IN_LABEL *************** Boston, MA 02111-1307, USA. */ *** 137,143 **** #define BSS_ASM_OP "\t.lcomm\t" /* Register in which address to store a structure value is passed to a ! function. The default in m68k.h is a1. For m68k/SVR4 it is a0. */ #undef STRUCT_VALUE_REGNUM #define STRUCT_VALUE_REGNUM 8 --- 139,145 ---- #define BSS_ASM_OP "\t.lcomm\t" /* Register in which address to store a structure value is passed to a ! function. The default in m68k.h is a1. For m68k/SVR4 it is a0. */ #undef STRUCT_VALUE_REGNUM #define STRUCT_VALUE_REGNUM 8 *************** Boston, MA 02111-1307, USA. */ *** 150,156 **** /* Define how the m68k registers should be numbered for Dwarf output. The numbering provided here should be compatible with the native SVR4 SDB debugger in the m68k/SVR4 reference port, where d0-d7 ! are 0-7, a0-a8 are 8-15, and fp0-fp7 are 16-23. */ #undef DBX_REGISTER_NUMBER #define DBX_REGISTER_NUMBER(REGNO) (REGNO) --- 152,158 ---- /* Define how the m68k registers should be numbered for Dwarf output. The numbering provided here should be compatible with the native SVR4 SDB debugger in the m68k/SVR4 reference port, where d0-d7 ! are 0-7, a0-a8 are 8-15, and fp0-fp7 are 16-23. */ #undef DBX_REGISTER_NUMBER #define DBX_REGISTER_NUMBER(REGNO) (REGNO) *************** Boston, MA 02111-1307, USA. */ *** 159,165 **** It is then overridden by m68k/sgs.h to use ".space", and again by svr4.h to use ".zero". The m68k/SVR4 assembler uses ".space", so repeat the definition from m68k/sgs.h here. Note that ASM_NO_SKIP_IN_TEXT is ! defined in m68k/sgs.h, so we don't have to repeat it here. */ #undef ASM_OUTPUT_SKIP #define ASM_OUTPUT_SKIP(FILE,SIZE) \ --- 161,167 ---- It is then overridden by m68k/sgs.h to use ".space", and again by svr4.h to use ".zero". The m68k/SVR4 assembler uses ".space", so repeat the definition from m68k/sgs.h here. Note that ASM_NO_SKIP_IN_TEXT is ! defined in m68k/sgs.h, so we don't have to repeat it here. */ #undef ASM_OUTPUT_SKIP #define ASM_OUTPUT_SKIP(FILE,SIZE) \ *************** Boston, MA 02111-1307, USA. */ *** 168,174 **** #if 0 /* SVR4 m68k assembler is bitching on the `comm i,1,1' which askes for 1 byte alignment. Don't generate alignment for COMMON seems to be ! safer until we the assembler is fixed. */ #undef ASM_OUTPUT_ALIGNED_COMMON /* Same problem with this one. */ #undef ASM_OUTPUT_ALIGNED_LOCAL --- 170,176 ---- #if 0 /* SVR4 m68k assembler is bitching on the `comm i,1,1' which askes for 1 byte alignment. Don't generate alignment for COMMON seems to be ! safer until we the assembler is fixed. */ #undef ASM_OUTPUT_ALIGNED_COMMON /* Same problem with this one. */ #undef ASM_OUTPUT_ALIGNED_LOCAL *************** Boston, MA 02111-1307, USA. */ *** 176,187 **** /* The `string' directive on m68k svr4 does not handle string with escape char (ie., `\') right. Use normal way to output ASCII bytes ! seems to be safer. */ #undef ASM_OUTPUT_ASCII #define ASM_OUTPUT_ASCII(FILE,PTR,LEN) \ do { \ ! register int sp = 0, lp = 0, ch; \ ! fprintf ((FILE), "%s", BYTE_ASM_OP); \ do { \ ch = (PTR)[sp]; \ if (ch > ' ' && ! (ch & 0x80) && ch != '\\') \ --- 178,189 ---- /* The `string' directive on m68k svr4 does not handle string with escape char (ie., `\') right. Use normal way to output ASCII bytes ! seems to be safer. */ #undef ASM_OUTPUT_ASCII #define ASM_OUTPUT_ASCII(FILE,PTR,LEN) \ do { \ ! register int sp = 0, ch; \ ! fputs (integer_asm_op (1, TRUE), (FILE)); \ do { \ ch = (PTR)[sp]; \ if (ch > ' ' && ! (ch & 0x80) && ch != '\\') \ *************** do { \ *** 196,202 **** { \ if ((sp % 10) == 0) \ { \ ! fprintf ((FILE), "\n%s", BYTE_ASM_OP); \ } \ else \ { \ --- 198,204 ---- { \ if ((sp % 10) == 0) \ { \ ! fprintf ((FILE), "\n%s", integer_asm_op (1, TRUE)); \ } \ else \ { \ *************** extern int switch_table_difference_label *** 233,250 **** fprintf ((FILE), ",%u\n", (SIZE))) /* Currently, JUMP_TABLES_IN_TEXT_SECTION must be defined in order to ! keep switch tables in the text section. */ #define JUMP_TABLES_IN_TEXT_SECTION 1 /* Override the definition in svr4.h. In m68k svr4, using swbeg is the ! standard way to do switch table. */ #undef ASM_OUTPUT_BEFORE_CASE_LABEL #define ASM_OUTPUT_BEFORE_CASE_LABEL(FILE,PREFIX,NUM,TABLE) \ fprintf ((FILE), "%s&%d\n", SWBEG_ASM_OP, XVECLEN (PATTERN (TABLE), 1)); /* In m68k svr4, a symbol_ref rtx can be a valid PIC operand if it is an ! operand of a function call. */ #undef LEGITIMATE_PIC_OPERAND_P #define LEGITIMATE_PIC_OPERAND_P(X) \ --- 235,252 ---- fprintf ((FILE), ",%u\n", (SIZE))) /* Currently, JUMP_TABLES_IN_TEXT_SECTION must be defined in order to ! keep switch tables in the text section. */ #define JUMP_TABLES_IN_TEXT_SECTION 1 /* Override the definition in svr4.h. In m68k svr4, using swbeg is the ! standard way to do switch table. */ #undef ASM_OUTPUT_BEFORE_CASE_LABEL #define ASM_OUTPUT_BEFORE_CASE_LABEL(FILE,PREFIX,NUM,TABLE) \ fprintf ((FILE), "%s&%d\n", SWBEG_ASM_OP, XVECLEN (PATTERN (TABLE), 1)); /* In m68k svr4, a symbol_ref rtx can be a valid PIC operand if it is an ! operand of a function call. */ #undef LEGITIMATE_PIC_OPERAND_P #define LEGITIMATE_PIC_OPERAND_P(X) \ *************** extern int switch_table_difference_label *** 256,262 **** to be done as `bsr foo@PLTPC', so it will force the assembler to create the PLT entry for `foo'. Doing function cse will cause the address of `foo' to be loaded into a register, which is exactly what we want to avoid when ! we are doing PIC on svr4 m68k. */ #undef OVERRIDE_OPTIONS #define OVERRIDE_OPTIONS \ { \ --- 258,264 ---- to be done as `bsr foo@PLTPC', so it will force the assembler to create the PLT entry for `foo'. Doing function cse will cause the address of `foo' to be loaded into a register, which is exactly what we want to avoid when ! we are doing PIC on svr4 m68k. */ #undef OVERRIDE_OPTIONS #define OVERRIDE_OPTIONS \ { \ *************** extern int switch_table_difference_label *** 294,300 **** specified as the number of bits. Try to use function `asm_output_aligned_bss' defined in file ! `varasm.c' when defining this macro. */ #ifndef ASM_OUTPUT_ALIGNED_BSS #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN) --- 296,302 ---- specified as the number of bits. Try to use function `asm_output_aligned_bss' defined in file ! `varasm.c' when defining this macro. */ #ifndef ASM_OUTPUT_ALIGNED_BSS #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN) diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/m68kemb.h gcc-3.1/gcc/config/m68k/m68kemb.h *** gcc-3.0.4/gcc/config/m68k/m68kemb.h Thu Nov 2 23:29:11 2000 --- gcc-3.1/gcc/config/m68k/m68kemb.h Tue Dec 11 18:21:03 2001 *************** *** 2,7 **** --- 2,9 ---- This is meant to be included after m68k.h. Copyright (C) 1994, 1995, 1998, 1999 Free Software Foundation, Inc. */ + /* Override the SVR4 ABI for this target. */ + #define PTRDIFF_TYPE "long int" #define SIZE_TYPE "long unsigned int" diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/m68kv4.h gcc-3.1/gcc/config/m68k/m68kv4.h *** gcc-3.0.4/gcc/config/m68k/m68kv4.h Mon Apr 16 18:25:49 2001 --- gcc-3.1/gcc/config/m68k/m68kv4.h Mon Dec 17 15:05:34 2001 *************** Boston, MA 02111-1307, USA. */ *** 25,32 **** --- 25,35 ---- #define SGS_SWITCH_TABLES /* Different switch table handling */ + /* TODO: convert includes to ${tm_file} list in config.gcc. */ #include "m68k/sgs.h" /* The m68k/SVR4 assembler is SGS based */ + #include "dbxelf.h" + #include "elfos.h" #include "svr4.h" /* Pick up the generic SVR4 macros */ /* See m68k.h. 7 means 68020 with 68881. */ *************** Boston, MA 02111-1307, USA. */ *** 39,45 **** g++ assembler names. When this is defined, g++ uses embedded '.' characters and some m68k assemblers have problems with this. The chances are much greater that any particular assembler will permit ! embedded '$' characters. */ #undef NO_DOLLAR_IN_LABEL --- 42,48 ---- g++ assembler names. When this is defined, g++ uses embedded '.' characters and some m68k assemblers have problems with this. The chances are much greater that any particular assembler will permit ! embedded '$' characters. */ #undef NO_DOLLAR_IN_LABEL *************** Boston, MA 02111-1307, USA. */ *** 65,71 **** If a 68881 is the default, gcc will use inline 68881 instructions, by predefining __HAVE_68881__, unless -msoft-float is specified. If a 68881 is not the default, gcc will only define __HAVE_68881__ if ! -m68881 is specified. */ #if TARGET_DEFAULT & MASK_68881 #define CPP_SPEC "%{!msoft-float:-D__HAVE_68881__}" --- 68,74 ---- If a 68881 is the default, gcc will use inline 68881 instructions, by predefining __HAVE_68881__, unless -msoft-float is specified. If a 68881 is not the default, gcc will only define __HAVE_68881__ if ! -m68881 is specified. */ #if TARGET_DEFAULT & MASK_68881 #define CPP_SPEC "%{!msoft-float:-D__HAVE_68881__}" *************** Boston, MA 02111-1307, USA. */ *** 77,83 **** for profiling a function entry. We override the definition in m68k.h and match the way the native m68k/SVR4 compiler does profiling, with the address of the profile counter in a1, not a0, and using bsr rather ! than jsr. */ #undef FUNCTION_PROFILER #define FUNCTION_PROFILER(FILE, LABELNO) \ --- 80,86 ---- for profiling a function entry. We override the definition in m68k.h and match the way the native m68k/SVR4 compiler does profiling, with the address of the profile counter in a1, not a0, and using bsr rather ! than jsr. */ #undef FUNCTION_PROFILER #define FUNCTION_PROFILER(FILE, LABELNO) \ *************** Boston, MA 02111-1307, USA. */ *** 92,98 **** #define BSS_ASM_OP "\t.lcomm\t" /* Register in which address to store a structure value is passed to a ! function. The default in m68k.h is a1. For m68k/SVR4 it is a0. */ #undef STRUCT_VALUE_REGNUM #define STRUCT_VALUE_REGNUM 8 --- 95,101 ---- #define BSS_ASM_OP "\t.lcomm\t" /* Register in which address to store a structure value is passed to a ! function. The default in m68k.h is a1. For m68k/SVR4 it is a0. */ #undef STRUCT_VALUE_REGNUM #define STRUCT_VALUE_REGNUM 8 *************** Boston, MA 02111-1307, USA. */ *** 112,118 **** /* Define how the m68k registers should be numbered for Dwarf output. The numbering provided here should be compatible with the native SVR4 SDB debugger in the m68k/SVR4 reference port, where d0-d7 ! are 0-7, a0-a8 are 8-15, and fp0-fp7 are 16-23. */ #define DBX_REGISTER_NUMBER(REGNO) (REGNO) --- 115,121 ---- /* Define how the m68k registers should be numbered for Dwarf output. The numbering provided here should be compatible with the native SVR4 SDB debugger in the m68k/SVR4 reference port, where d0-d7 ! are 0-7, a0-a8 are 8-15, and fp0-fp7 are 16-23. */ #define DBX_REGISTER_NUMBER(REGNO) (REGNO) *************** Boston, MA 02111-1307, USA. */ *** 120,126 **** It is then overridden by m68k/sgs.h to use ".space", and again by svr4.h to use ".zero". The m68k/SVR4 assembler uses ".space", so repeat the definition from m68k/sgs.h here. Note that ASM_NO_SKIP_IN_TEXT is ! defined in m68k/sgs.h, so we don't have to repeat it here. */ #undef ASM_OUTPUT_SKIP #define ASM_OUTPUT_SKIP(FILE,SIZE) \ --- 123,129 ---- It is then overridden by m68k/sgs.h to use ".space", and again by svr4.h to use ".zero". The m68k/SVR4 assembler uses ".space", so repeat the definition from m68k/sgs.h here. Note that ASM_NO_SKIP_IN_TEXT is ! defined in m68k/sgs.h, so we don't have to repeat it here. */ #undef ASM_OUTPUT_SKIP #define ASM_OUTPUT_SKIP(FILE,SIZE) \ *************** Boston, MA 02111-1307, USA. */ *** 129,135 **** /* 1 if N is a possible register number for a function value. For m68k/SVR4 allow d0, a0, or fp0 as return registers, for integral, pointer, or floating types, respectively. Reject fp0 if not using a ! 68881 coprocessor. */ #undef FUNCTION_VALUE_REGNO_P #define FUNCTION_VALUE_REGNO_P(N) \ --- 132,138 ---- /* 1 if N is a possible register number for a function value. For m68k/SVR4 allow d0, a0, or fp0 as return registers, for integral, pointer, or floating types, respectively. Reject fp0 if not using a ! 68881 coprocessor. */ #undef FUNCTION_VALUE_REGNO_P #define FUNCTION_VALUE_REGNO_P(N) \ *************** Boston, MA 02111-1307, USA. */ *** 145,151 **** and how to find (in the caller) the value returned by a function. VALTYPE is the data type of the value (as a tree). If the precise function being called is known, FUNC is its FUNCTION_DECL; otherwise, FUNC is 0. ! For m68k/SVR4 generate the result in d0, a0, or fp0 as appropriate. */ #undef FUNCTION_VALUE #define FUNCTION_VALUE(VALTYPE, FUNC) \ --- 148,154 ---- and how to find (in the caller) the value returned by a function. VALTYPE is the data type of the value (as a tree). If the precise function being called is known, FUNC is its FUNCTION_DECL; otherwise, FUNC is 0. ! For m68k/SVR4 generate the result in d0, a0, or fp0 as appropriate. */ #undef FUNCTION_VALUE #define FUNCTION_VALUE(VALTYPE, FUNC) \ *************** Boston, MA 02111-1307, USA. */ *** 160,166 **** m68k/SVR4 convention is to copy the value returned for pointer functions from a0 to d0 in the function epilogue, so that callers that have neglected to properly declare the callee can still find the correct return ! value. */ #define FUNCTION_EXTRA_EPILOGUE(FILE, SIZE) \ do { \ --- 163,169 ---- m68k/SVR4 convention is to copy the value returned for pointer functions from a0 to d0 in the function epilogue, so that callers that have neglected to properly declare the callee can still find the correct return ! value. */ #define FUNCTION_EXTRA_EPILOGUE(FILE, SIZE) \ do { \ *************** do { \ *** 172,178 **** /* Define how to find the value returned by a library function assuming the value has mode MODE. For m68k/SVR4 look for integer values in d0, pointer values in d0 ! (returned in both d0 and a0), and floating values in fp0. */ #undef LIBCALL_VALUE #define LIBCALL_VALUE(MODE) \ --- 175,181 ---- /* Define how to find the value returned by a library function assuming the value has mode MODE. For m68k/SVR4 look for integer values in d0, pointer values in d0 ! (returned in both d0 and a0), and floating values in fp0. */ #undef LIBCALL_VALUE #define LIBCALL_VALUE(MODE) \ *************** do { \ *** 182,194 **** : gen_rtx_REG ((MODE), 0)) /* Boundary (in *bits*) on which stack pointer should be aligned. ! The m68k/SVR4 convention is to keep the stack pointer longword aligned. */ #undef STACK_BOUNDARY #define STACK_BOUNDARY 32 /* Alignment of field after `int : 0' in a structure. ! For m68k/SVR4, this is the next longword boundary. */ #undef EMPTY_FIELD_BOUNDARY #define EMPTY_FIELD_BOUNDARY 32 --- 185,197 ---- : gen_rtx_REG ((MODE), 0)) /* Boundary (in *bits*) on which stack pointer should be aligned. ! The m68k/SVR4 convention is to keep the stack pointer longword aligned. */ #undef STACK_BOUNDARY #define STACK_BOUNDARY 32 /* Alignment of field after `int : 0' in a structure. ! For m68k/SVR4, this is the next longword boundary. */ #undef EMPTY_FIELD_BOUNDARY #define EMPTY_FIELD_BOUNDARY 32 *************** do { \ *** 202,222 **** /* SVR4 m68k assembler is bitching on the `comm i,1,1' which asks for 1 byte alignment. Don't generate alignment for COMMON seems to be ! safer until we the assembler is fixed. */ #undef ASM_OUTPUT_ALIGNED_COMMON /* Same problem with this one. */ #undef ASM_OUTPUT_ALIGNED_LOCAL /* The `string' directive on m68k svr4 does not handle string with escape char (ie., `\') right. Use normal way to output ASCII bytes ! seems to be safer. */ #undef ASM_OUTPUT_ASCII #define ASM_OUTPUT_ASCII(FILE,PTR,LEN) \ do { \ ! register int sp = 0, lp = 0, ch; \ ! fprintf ((FILE), "%s", BYTE_ASM_OP); \ do { \ ! ch = (PTR)[sp]; \ if (ch > ' ' && ! (ch & 0x80) && ch != '\\') \ { \ fprintf ((FILE), "'%c", ch); \ --- 205,225 ---- /* SVR4 m68k assembler is bitching on the `comm i,1,1' which asks for 1 byte alignment. Don't generate alignment for COMMON seems to be ! safer until we the assembler is fixed. */ #undef ASM_OUTPUT_ALIGNED_COMMON /* Same problem with this one. */ #undef ASM_OUTPUT_ALIGNED_LOCAL /* The `string' directive on m68k svr4 does not handle string with escape char (ie., `\') right. Use normal way to output ASCII bytes ! seems to be safer. */ #undef ASM_OUTPUT_ASCII #define ASM_OUTPUT_ASCII(FILE,PTR,LEN) \ do { \ ! register size_t sp = 0, limit = (LEN); \ ! fputs (integer_asm_op (1, TRUE), (FILE)); \ do { \ ! int ch = (PTR)[sp]; \ if (ch > ' ' && ! (ch & 0x80) && ch != '\\') \ { \ fprintf ((FILE), "'%c", ch); \ *************** do { \ *** 225,242 **** { \ fprintf ((FILE), "0x%x", ch); \ } \ ! if (++sp < (LEN)) \ { \ if ((sp % 10) == 0) \ { \ ! fprintf ((FILE), "\n%s", BYTE_ASM_OP); \ } \ else \ { \ putc (',', (FILE)); \ } \ } \ ! } while (sp < (LEN)); \ putc ('\n', (FILE)); \ } while (0) --- 228,245 ---- { \ fprintf ((FILE), "0x%x", ch); \ } \ ! if (++sp < limit) \ { \ if ((sp % 10) == 0) \ { \ ! fprintf ((FILE), "\n%s", integer_asm_op (1, TRUE)); \ } \ else \ { \ putc (',', (FILE)); \ } \ } \ ! } while (sp < limit); \ putc ('\n', (FILE)); \ } while (0) *************** int switch_table_difference_label_flag; *** 266,292 **** fprintf ((FILE), ",%u\n", (SIZE))) /* Override the definition in svr4.h. In m68k svr4, using swbeg is the ! standard way to do switch table. */ #undef ASM_OUTPUT_BEFORE_CASE_LABEL #define ASM_OUTPUT_BEFORE_CASE_LABEL(FILE,PREFIX,NUM,TABLE) \ fprintf ((FILE), "%s&%d\n", SWBEG_ASM_OP, XVECLEN (PATTERN (TABLE), 1)); /* In m68k svr4, a symbol_ref rtx can be a valid PIC operand if it is an ! operand of a function call. */ #undef LEGITIMATE_PIC_OPERAND_P #define LEGITIMATE_PIC_OPERAND_P(X) \ ((! symbolic_operand (X, VOIDmode) \ ! && ! (GET_CODE (X) == CONST_DOUBLE && CONST_DOUBLE_MEM (X) \ ! && GET_CODE (CONST_DOUBLE_MEM (X)) == MEM \ ! && symbolic_operand (XEXP (CONST_DOUBLE_MEM (X), 0), VOIDmode))) \ ! || (GET_CODE (X) == SYMBOL_REF && SYMBOL_REF_FLAG (X)) \ || PCREL_GENERAL_OPERAND_OK) /* Turn off function cse if we are doing PIC. We always want function call to be done as `bsr foo@PLTPC', so it will force the assembler to create the PLT entry for `foo'. Doing function cse will cause the address of `foo' to be loaded into a register, which is exactly what we want to avoid when ! we are doing PIC on svr4 m68k. */ #undef OVERRIDE_OPTIONS #define OVERRIDE_OPTIONS \ { \ --- 269,296 ---- fprintf ((FILE), ",%u\n", (SIZE))) /* Override the definition in svr4.h. In m68k svr4, using swbeg is the ! standard way to do switch table. */ #undef ASM_OUTPUT_BEFORE_CASE_LABEL #define ASM_OUTPUT_BEFORE_CASE_LABEL(FILE,PREFIX,NUM,TABLE) \ fprintf ((FILE), "%s&%d\n", SWBEG_ASM_OP, XVECLEN (PATTERN (TABLE), 1)); /* In m68k svr4, a symbol_ref rtx can be a valid PIC operand if it is an ! operand of a function call. */ #undef LEGITIMATE_PIC_OPERAND_P #define LEGITIMATE_PIC_OPERAND_P(X) \ ((! symbolic_operand (X, VOIDmode) \ ! && ! (GET_CODE (X) == CONST_DOUBLE && mem_for_const_double (X) != 0 \ ! && GET_CODE (mem_for_const_double (X)) == MEM \ ! && symbolic_operand (XEXP (mem_for_const_double (X), 0), \ ! VOIDmode))) \ ! || (GET_CODE (X) == SYMBOL_REF && SYMBOL_REF_FLAG (X)) \ || PCREL_GENERAL_OPERAND_OK) /* Turn off function cse if we are doing PIC. We always want function call to be done as `bsr foo@PLTPC', so it will force the assembler to create the PLT entry for `foo'. Doing function cse will cause the address of `foo' to be loaded into a register, which is exactly what we want to avoid when ! we are doing PIC on svr4 m68k. */ #undef OVERRIDE_OPTIONS #define OVERRIDE_OPTIONS \ { \ *************** int switch_table_difference_label_flag; *** 304,316 **** #undef TRAMPOLINE_TEMPLATE #define TRAMPOLINE_TEMPLATE(FILE) \ { \ ! ASM_OUTPUT_SHORT (FILE, GEN_INT (0x227a)); \ ! ASM_OUTPUT_SHORT (FILE, GEN_INT (8)); \ ! ASM_OUTPUT_SHORT (FILE, GEN_INT (0x2f3a)); \ ! ASM_OUTPUT_SHORT (FILE, GEN_INT (8)); \ ! ASM_OUTPUT_SHORT (FILE, GEN_INT (0x4e75)); \ ! ASM_OUTPUT_INT (FILE, const0_rtx); \ ! ASM_OUTPUT_INT (FILE, const0_rtx); \ } /* Redefine since we are using a different trampoline */ --- 308,320 ---- #undef TRAMPOLINE_TEMPLATE #define TRAMPOLINE_TEMPLATE(FILE) \ { \ ! assemble_aligned_integer (2, GEN_INT (0x227a)); \ ! assemble_aligned_integer (2, GEN_INT (8)); \ ! assemble_aligned_integer (2, GEN_INT (0x2f3a)); \ ! assemble_aligned_integer (2, GEN_INT (8)); \ ! assemble_aligned_integer (2, GEN_INT (0x4e75)); \ ! assemble_aligned_integer (4, const0_rtx); \ ! assemble_aligned_integer (4, const0_rtx); \ } /* Redefine since we are using a different trampoline */ diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/math-3300.h gcc-3.1/gcc/config/m68k/math-3300.h *** gcc-3.0.4/gcc/config/m68k/math-3300.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/m68k/math-3300.h Tue Jan 1 23:21:01 2002 *************** *** 0 **** --- 1,461 ---- + /******************************************************************\ + * * + * last modified: 18 May 1989. * + * * + * Copyright (C) 1989 by Matthew Self. * + * You may freely distribute verbatim copies of this software * + * provided that this copyright notice is retained in all copies. * + * You may distribute modifications to this software under the * + * conditions above if you also clearly note such modifications * + * with their author and date. * + * * + * Note: errno is not set to EDOM when domain errors occur for * + * most of these functions. Rather, it is assumed that the * + * 68881's OPERR exception will be enabled and handled * + * appropriately by the operating system. Similarly, overflow * + * and underflow do not set errno to ERANGE. * + * * + * Send bugs to Matthew Self (self@bayes.arc.nasa.gov). * + * * + \******************************************************************/ + + #include + + #undef HUGE_VAL + #define HUGE_VAL \ + ({ \ + double huge_val; \ + \ + __asm ("fmove%.d %#0x7ff0000000000000,%0" /* Infinity */ \ + : "=f" (huge_val) \ + : /* no inputs */); \ + huge_val; \ + }) + + __inline static const double sin (double x) + { + double value; + + __asm ("fsin%.x %1,%0" + : "=f" (value) + : "f" (x)); + return value; + } + + __inline static const double cos (double x) + { + double value; + + __asm ("fcos%.x %1,%0" + : "=f" (value) + : "f" (x)); + return value; + } + + __inline static const double tan (double x) + { + double value; + + __asm ("ftan%.x %1,%0" + : "=f" (value) + : "f" (x)); + return value; + } + + __inline static const double asin (double x) + { + double value; + + __asm ("fasin%.x %1,%0" + : "=f" (value) + : "f" (x)); + return value; + } + + __inline static const double acos (double x) + { + double value; + + __asm ("facos%.x %1,%0" + : "=f" (value) + : "f" (x)); + return value; + } + + __inline static const double atan (double x) + { + double value; + + __asm ("fatan%.x %1,%0" + : "=f" (value) + : "f" (x)); + return value; + } + + __inline static const double atan2 (double y, double x) + { + double pi, pi_over_2; + + __asm ("fmovecr%.x %#0,%0" /* extended precision pi */ + : "=f" (pi) + : /* no inputs */ ); + __asm ("fscale%.b %#-1,%0" /* no loss of accuracy */ + : "=f" (pi_over_2) + : "0" (pi)); + if (x > 0) + { + if (y > 0) + { + if (x > y) + return atan (y / x); + else + return pi_over_2 - atan (x / y); + } + else + { + if (x > -y) + return atan (y / x); + else + return - pi_over_2 - atan (x / y); + } + } + else + { + if (y > 0) + { + if (-x > y) + return pi + atan (y / x); + else + return pi_over_2 - atan (x / y); + } + else + { + if (-x > -y) + return - pi + atan (y / x); + else if (y < 0) + return - pi_over_2 - atan (x / y); + else + { + double value; + + errno = EDOM; + __asm ("fmove%.d %#0x7fffffffffffffff,%0" /* quiet NaN */ + : "=f" (value) + : /* no inputs */); + return value; + } + } + } + } + + __inline static const double sinh (double x) + { + double value; + + __asm ("fsinh%.x %1,%0" + : "=f" (value) + : "f" (x)); + return value; + } + + __inline static const double cosh (double x) + { + double value; + + __asm ("fcosh%.x %1,%0" + : "=f" (value) + : "f" (x)); + return value; + } + + __inline static const double tanh (double x) + { + double value; + + __asm ("ftanh%.x %1,%0" + : "=f" (value) + : "f" (x)); + return value; + } + + __inline static const double atanh (double x) + { + double value; + + __asm ("fatanh%.x %1,%0" + : "=f" (value) + : "f" (x)); + return value; + } + + __inline static const double exp (double x) + { + double value; + + __asm ("fetox%.x %1,%0" + : "=f" (value) + : "f" (x)); + return value; + } + + __inline static const double expm1 (double x) + { + double value; + + __asm ("fetoxm1%.x %1,%0" + : "=f" (value) + : "f" (x)); + return value; + } + + __inline static const double log (double x) + { + double value; + + __asm ("flogn%.x %1,%0" + : "=f" (value) + : "f" (x)); + return value; + } + + __inline static const double log1p (double x) + { + double value; + + __asm ("flognp1%.x %1,%0" + : "=f" (value) + : "f" (x)); + return value; + } + + __inline static const double log10 (double x) + { + double value; + + __asm ("flog10%.x %1,%0" + : "=f" (value) + : "f" (x)); + return value; + } + + __inline static const double sqrt (double x) + { + double value; + + __asm ("fsqrt%.x %1,%0" + : "=f" (value) + : "f" (x)); + return value; + } + + __inline static const double pow (const double x, const double y) + { + if (x > 0) + return exp (y * log (x)); + else if (x == 0) + { + if (y > 0) + return 0.0; + else + { + double value; + + errno = EDOM; + __asm ("fmove%.d %#0x7fffffffffffffff,%0" /* quiet NaN */ + : "=f" (value) + : /* no inputs */); + return value; + } + } + else + { + double temp; + + __asm ("fintrz%.x %1,%0" + : "=f" (temp) /* integer-valued float */ + : "f" (y)); + if (y == temp) + { + int i = (int) y; + + if ((i & 1) == 0) /* even */ + return exp (y * log (x)); + else + return - exp (y * log (x)); + } + else + { + double value; + + errno = EDOM; + __asm ("fmove%.d %#0x7fffffffffffffff,%0" /* quiet NaN */ + : "=f" (value) + : /* no inputs */); + return value; + } + } + } + + __inline static const double fabs (double x) + { + double value; + + __asm ("fabs%.x %1,%0" + : "=f" (value) + : "f" (x)); + return value; + } + + __inline static const double ceil (double x) + { + int rounding_mode, round_up; + double value; + + __asm volatile ("fmove%.l %%fpcr,%0" + : "=dm" (rounding_mode) + : /* no inputs */ ); + round_up = rounding_mode | 0x30; + __asm volatile ("fmove%.l %0,%%fpcr" + : /* no outputs */ + : "dmi" (round_up)); + __asm volatile ("fint%.x %1,%0" + : "=f" (value) + : "f" (x)); + __asm volatile ("fmove%.l %0,%%fpcr" + : /* no outputs */ + : "dmi" (rounding_mode)); + return value; + } + + __inline static const double floor (double x) + { + int rounding_mode, round_down; + double value; + + __asm volatile ("fmove%.l %%fpcr,%0" + : "=dm" (rounding_mode) + : /* no inputs */ ); + round_down = (rounding_mode & ~0x10) + | 0x20; + __asm volatile ("fmove%.l %0,%%fpcr" + : /* no outputs */ + : "dmi" (round_down)); + __asm volatile ("fint%.x %1,%0" + : "=f" (value) + : "f" (x)); + __asm volatile ("fmove%.l %0,%%fpcr" + : /* no outputs */ + : "dmi" (rounding_mode)); + return value; + } + + __inline static const double rint (double x) + { + int rounding_mode, round_nearest; + double value; + + __asm volatile ("fmove%.l %%fpcr,%0" + : "=dm" (rounding_mode) + : /* no inputs */ ); + round_nearest = rounding_mode & ~0x30; + __asm volatile ("fmove%.l %0,%%fpcr" + : /* no outputs */ + : "dmi" (round_nearest)); + __asm volatile ("fint%.x %1,%0" + : "=f" (value) + : "f" (x)); + __asm volatile ("fmove%.l %0,%%fpcr" + : /* no outputs */ + : "dmi" (rounding_mode)); + return value; + } + + __inline static const double fmod (double x, double y) + { + double value; + + __asm ("fmod%.x %2,%0" + : "=f" (value) + : "0" (x), + "f" (y)); + return value; + } + + __inline static const double drem (double x, double y) + { + double value; + + __asm ("frem%.x %2,%0" + : "=f" (value) + : "0" (x), + "f" (y)); + return value; + } + + __inline static const double scalb (double x, int n) + { + double value; + + __asm ("fscale%.l %2,%0" + : "=f" (value) + : "0" (x), + "dmi" (n)); + return value; + } + + __inline static double logb (double x) + { + double exponent; + + __asm ("fgetexp%.x %1,%0" + : "=f" (exponent) + : "f" (x)); + return exponent; + } + + __inline static const double ldexp (double x, int n) + { + double value; + + __asm ("fscale%.l %2,%0" + : "=f" (value) + : "0" (x), + "dmi" (n)); + return value; + } + + __inline static double frexp (double x, int *exp) + { + double float_exponent; + int int_exponent; + double mantissa; + + __asm ("fgetexp%.x %1,%0" + : "=f" (float_exponent) /* integer-valued float */ + : "f" (x)); + int_exponent = (int) float_exponent; + __asm ("fgetman%.x %1,%0" + : "=f" (mantissa) /* 1.0 <= mantissa < 2.0 */ + : "f" (x)); + if (mantissa != 0) + { + __asm ("fscale%.b %#-1,%0" + : "=f" (mantissa) /* mantissa /= 2.0 */ + : "0" (mantissa)); + int_exponent += 1; + } + *exp = int_exponent; + return mantissa; + } + + __inline static double modf (double x, double *ip) + { + double temp; + + __asm ("fintrz%.x %1,%0" + : "=f" (temp) /* integer-valued float */ + : "f" (x)); + *ip = temp; + return x - temp; + } + diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/math-68881.h gcc-3.1/gcc/config/m68k/math-68881.h *** gcc-3.0.4/gcc/config/m68k/math-68881.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/m68k/math-68881.h Tue Jan 1 23:21:01 2002 *************** *** 0 **** --- 1,529 ---- + /******************************************************************\ + * * + * last modified: 23 May 1992. * + * * + * Copyright (C) 1989 by Matthew Self. * + * You may freely distribute verbatim copies of this software * + * provided that this copyright notice is retained in all copies. * + * You may distribute modifications to this software under the * + * conditions above if you also clearly note such modifications * + * with their author and date. * + * * + * Note: errno is not set to EDOM when domain errors occur for * + * most of these functions. Rather, it is assumed that the * + * 68881's OPERR exception will be enabled and handled * + * appropriately by the operating system. Similarly, overflow * + * and underflow do not set errno to ERANGE. * + * * + * Send bugs to Matthew Self (self@bayes.arc.nasa.gov). * + * * + \******************************************************************/ + + /* This file is NOT a part of GCC, just distributed with it. */ + + /* If you find this in GCC, + please send bug reports to bug-gcc@prep.ai.mit.edu. */ + + /* Changed by Richard Stallman: + May 1993, add conditional to prevent multiple inclusion. + % inserted before a #. + New function `hypot' added. + Nans written in hex to avoid 0rnan. + May 1992, use %! for fpcr register. Break lines before function names. + December 1989, add parens around `&' in pow. + November 1990, added alternate definition of HUGE_VAL for Sun. */ + + /* Changed by Jim Wilson: + September 1993, Use #undef before HUGE_VAL instead of #ifdef/#endif. */ + + /* Changed by Ian Lance Taylor: + September 1994, use extern inline instead of static inline. */ + + #ifndef __math_68881 + #define __math_68881 + + #include + + #undef HUGE_VAL + #ifdef __sun__ + /* The Sun assembler fails to handle the hex constant in the usual defn. */ + #define HUGE_VAL \ + ({ \ + static union { int i[2]; double d; } u = { {0x7ff00000, 0} }; \ + u.d; \ + }) + #else + #define HUGE_VAL \ + ({ \ + double huge_val; \ + \ + __asm ("fmove%.d %#0x7ff0000000000000,%0" /* Infinity */ \ + : "=f" (huge_val) \ + : /* no inputs */); \ + huge_val; \ + }) + #endif + + __inline extern double + sin (double x) + { + double value; + + __asm ("fsin%.x %1,%0" + : "=f" (value) + : "f" (x)); + return value; + } + + __inline extern double + cos (double x) + { + double value; + + __asm ("fcos%.x %1,%0" + : "=f" (value) + : "f" (x)); + return value; + } + + __inline extern double + tan (double x) + { + double value; + + __asm ("ftan%.x %1,%0" + : "=f" (value) + : "f" (x)); + return value; + } + + __inline extern double + asin (double x) + { + double value; + + __asm ("fasin%.x %1,%0" + : "=f" (value) + : "f" (x)); + return value; + } + + __inline extern double + acos (double x) + { + double value; + + __asm ("facos%.x %1,%0" + : "=f" (value) + : "f" (x)); + return value; + } + + __inline extern double + atan (double x) + { + double value; + + __asm ("fatan%.x %1,%0" + : "=f" (value) + : "f" (x)); + return value; + } + + __inline extern double + atan2 (double y, double x) + { + double pi, pi_over_2; + + __asm ("fmovecr%.x %#0,%0" /* extended precision pi */ + : "=f" (pi) + : /* no inputs */ ); + __asm ("fscale%.b %#-1,%0" /* no loss of accuracy */ + : "=f" (pi_over_2) + : "0" (pi)); + if (x > 0) + { + if (y > 0) + { + if (x > y) + return atan (y / x); + else + return pi_over_2 - atan (x / y); + } + else + { + if (x > -y) + return atan (y / x); + else + return - pi_over_2 - atan (x / y); + } + } + else + { + if (y < 0) + { + if (-x > -y) + return - pi + atan (y / x); + else + return - pi_over_2 - atan (x / y); + } + else + { + if (-x > y) + return pi + atan (y / x); + else if (y > 0) + return pi_over_2 - atan (x / y); + else + { + double value; + + errno = EDOM; + __asm ("fmove%.d %#0x7fffffffffffffff,%0" /* quiet NaN */ + : "=f" (value) + : /* no inputs */); + return value; + } + } + } + } + + __inline extern double + sinh (double x) + { + double value; + + __asm ("fsinh%.x %1,%0" + : "=f" (value) + : "f" (x)); + return value; + } + + __inline extern double + cosh (double x) + { + double value; + + __asm ("fcosh%.x %1,%0" + : "=f" (value) + : "f" (x)); + return value; + } + + __inline extern double + tanh (double x) + { + double value; + + __asm ("ftanh%.x %1,%0" + : "=f" (value) + : "f" (x)); + return value; + } + + __inline extern double + atanh (double x) + { + double value; + + __asm ("fatanh%.x %1,%0" + : "=f" (value) + : "f" (x)); + return value; + } + + __inline extern double + exp (double x) + { + double value; + + __asm ("fetox%.x %1,%0" + : "=f" (value) + : "f" (x)); + return value; + } + + __inline extern double + expm1 (double x) + { + double value; + + __asm ("fetoxm1%.x %1,%0" + : "=f" (value) + : "f" (x)); + return value; + } + + __inline extern double + log (double x) + { + double value; + + __asm ("flogn%.x %1,%0" + : "=f" (value) + : "f" (x)); + return value; + } + + __inline extern double + log1p (double x) + { + double value; + + __asm ("flognp1%.x %1,%0" + : "=f" (value) + : "f" (x)); + return value; + } + + __inline extern double + log10 (double x) + { + double value; + + __asm ("flog10%.x %1,%0" + : "=f" (value) + : "f" (x)); + return value; + } + + __inline extern double + sqrt (double x) + { + double value; + + __asm ("fsqrt%.x %1,%0" + : "=f" (value) + : "f" (x)); + return value; + } + + __inline extern double + hypot (double x, double y) + { + return sqrt (x*x + y*y); + } + + __inline extern double + pow (double x, double y) + { + if (x > 0) + return exp (y * log (x)); + else if (x == 0) + { + if (y > 0) + return 0.0; + else + { + double value; + + errno = EDOM; + __asm ("fmove%.d %#0x7fffffffffffffff,%0" /* quiet NaN */ + : "=f" (value) + : /* no inputs */); + return value; + } + } + else + { + double temp; + + __asm ("fintrz%.x %1,%0" + : "=f" (temp) /* integer-valued float */ + : "f" (y)); + if (y == temp) + { + int i = (int) y; + + if ((i & 1) == 0) /* even */ + return exp (y * log (-x)); + else + return - exp (y * log (-x)); + } + else + { + double value; + + errno = EDOM; + __asm ("fmove%.d %#0x7fffffffffffffff,%0" /* quiet NaN */ + : "=f" (value) + : /* no inputs */); + return value; + } + } + } + + __inline extern double + fabs (double x) + { + double value; + + __asm ("fabs%.x %1,%0" + : "=f" (value) + : "f" (x)); + return value; + } + + __inline extern double + ceil (double x) + { + int rounding_mode, round_up; + double value; + + __asm volatile ("fmove%.l %!,%0" + : "=dm" (rounding_mode) + : /* no inputs */ ); + round_up = rounding_mode | 0x30; + __asm volatile ("fmove%.l %0,%!" + : /* no outputs */ + : "dmi" (round_up)); + __asm volatile ("fint%.x %1,%0" + : "=f" (value) + : "f" (x)); + __asm volatile ("fmove%.l %0,%!" + : /* no outputs */ + : "dmi" (rounding_mode)); + return value; + } + + __inline extern double + floor (double x) + { + int rounding_mode, round_down; + double value; + + __asm volatile ("fmove%.l %!,%0" + : "=dm" (rounding_mode) + : /* no inputs */ ); + round_down = (rounding_mode & ~0x10) + | 0x20; + __asm volatile ("fmove%.l %0,%!" + : /* no outputs */ + : "dmi" (round_down)); + __asm volatile ("fint%.x %1,%0" + : "=f" (value) + : "f" (x)); + __asm volatile ("fmove%.l %0,%!" + : /* no outputs */ + : "dmi" (rounding_mode)); + return value; + } + + __inline extern double + rint (double x) + { + int rounding_mode, round_nearest; + double value; + + __asm volatile ("fmove%.l %!,%0" + : "=dm" (rounding_mode) + : /* no inputs */ ); + round_nearest = rounding_mode & ~0x30; + __asm volatile ("fmove%.l %0,%!" + : /* no outputs */ + : "dmi" (round_nearest)); + __asm volatile ("fint%.x %1,%0" + : "=f" (value) + : "f" (x)); + __asm volatile ("fmove%.l %0,%!" + : /* no outputs */ + : "dmi" (rounding_mode)); + return value; + } + + __inline extern double + fmod (double x, double y) + { + double value; + + __asm ("fmod%.x %2,%0" + : "=f" (value) + : "0" (x), + "f" (y)); + return value; + } + + __inline extern double + drem (double x, double y) + { + double value; + + __asm ("frem%.x %2,%0" + : "=f" (value) + : "0" (x), + "f" (y)); + return value; + } + + __inline extern double + scalb (double x, int n) + { + double value; + + __asm ("fscale%.l %2,%0" + : "=f" (value) + : "0" (x), + "dmi" (n)); + return value; + } + + __inline extern double + logb (double x) + { + double exponent; + + __asm ("fgetexp%.x %1,%0" + : "=f" (exponent) + : "f" (x)); + return exponent; + } + + __inline extern double + ldexp (double x, int n) + { + double value; + + __asm ("fscale%.l %2,%0" + : "=f" (value) + : "0" (x), + "dmi" (n)); + return value; + } + + __inline extern double + frexp (double x, int *exp) + { + double float_exponent; + int int_exponent; + double mantissa; + + __asm ("fgetexp%.x %1,%0" + : "=f" (float_exponent) /* integer-valued float */ + : "f" (x)); + int_exponent = (int) float_exponent; + __asm ("fgetman%.x %1,%0" + : "=f" (mantissa) /* 1.0 <= mantissa < 2.0 */ + : "f" (x)); + if (mantissa != 0) + { + __asm ("fscale%.b %#-1,%0" + : "=f" (mantissa) /* mantissa /= 2.0 */ + : "0" (mantissa)); + int_exponent += 1; + } + *exp = int_exponent; + return mantissa; + } + + __inline extern double + modf (double x, double *ip) + { + double temp; + + __asm ("fintrz%.x %1,%0" + : "=f" (temp) /* integer-valued float */ + : "f" (x)); + *ip = temp; + return x - temp; + } + + #endif /* not __math_68881 */ diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/mot3300.h gcc-3.1/gcc/config/m68k/mot3300.h *** gcc-3.0.4/gcc/config/m68k/mot3300.h Mon Apr 16 18:25:49 2001 --- gcc-3.1/gcc/config/m68k/mot3300.h Thu Dec 20 17:36:36 2001 *************** Boston, MA 02111-1307, USA. */ *** 196,256 **** #define CTORS_SECTION_ASM_OP "\t.section\t.ctors,\"x\"" #define DTORS_SECTION_ASM_OP "\t.section\t.dtors,\"x\"" - - /* A list of other sections which the compiler might be "in" at any - given time. */ - - #undef EXTRA_SECTIONS - #define EXTRA_SECTIONS in_ctors, in_dtors - - /* A list of extra section function definitions. */ - - #undef EXTRA_SECTION_FUNCTIONS - #define EXTRA_SECTION_FUNCTIONS \ - CTORS_SECTION_FUNCTION \ - DTORS_SECTION_FUNCTION - - #define CTORS_SECTION_FUNCTION \ - void \ - ctors_section () \ - { \ - if (in_section != in_ctors) \ - { \ - fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP); \ - in_section = in_ctors; \ - } \ - } - - #define DTORS_SECTION_FUNCTION \ - void \ - dtors_section () \ - { \ - if (in_section != in_dtors) \ - { \ - fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP); \ - in_section = in_dtors; \ - } \ - } - - /* A C statement (sans semicolon) to output an element in the table of - global constructors. */ - #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ - do { \ - ctors_section (); \ - fprintf (FILE, "\t%s\t ", ASM_LONG); \ - assemble_name (FILE, NAME); \ - fprintf (FILE, "\n"); \ - } while (0) - - /* A C statement (sans semicolon) to output an element in the table of - global destructors. */ - #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \ - do { \ - dtors_section (); \ - fprintf (FILE, "\t%s\t ", ASM_LONG); \ - assemble_name (FILE, NAME); \ - fprintf (FILE, "\n"); \ - } while (0) #endif /* defined (USE_GLD) */ /* The file command should always begin the output. */ --- 196,201 ---- *************** dtors_section () \ *** 290,300 **** #define DEFAULT_PCC_STRUCT_RETURN 0 /* If TARGET_68881, return SF and DF values in fp0 instead of d0. */ ! /* NYI: If FP=M68881U return SF and DF values in d0. */ /* NYI: If -mold return pointer in a0 and d0 */ #undef FUNCTION_VALUE ! /* sysV68 (brain damaged) cc convention support. */ #define FUNCTION_VALUE(VALTYPE,FUNC) \ (TREE_CODE (VALTYPE) == REAL_TYPE && TARGET_68881 \ ? gen_rtx_REG (TYPE_MODE (VALTYPE), 16) \ --- 235,245 ---- #define DEFAULT_PCC_STRUCT_RETURN 0 /* If TARGET_68881, return SF and DF values in fp0 instead of d0. */ ! /* NYI: If FP=M68881U return SF and DF values in d0. */ /* NYI: If -mold return pointer in a0 and d0 */ #undef FUNCTION_VALUE ! /* sysV68 (brain damaged) cc convention support. */ #define FUNCTION_VALUE(VALTYPE,FUNC) \ (TREE_CODE (VALTYPE) == REAL_TYPE && TARGET_68881 \ ? gen_rtx_REG (TYPE_MODE (VALTYPE), 16) \ *************** dtors_section () \ *** 317,323 **** d0 may be used, and fp0 as well if -msoft-float is not specified. */ #undef FUNCTION_VALUE_REGNO_P ! /* sysV68 (brain damaged) cc convention support. */ #define FUNCTION_VALUE_REGNO_P(N) \ ((N) == 0 || (N) == 8 || (TARGET_68881 && (N) == 16)) --- 262,268 ---- d0 may be used, and fp0 as well if -msoft-float is not specified. */ #undef FUNCTION_VALUE_REGNO_P ! /* sysV68 (brain damaged) cc convention support. */ #define FUNCTION_VALUE_REGNO_P(N) \ ((N) == 0 || (N) == 8 || (TARGET_68881 && (N) == 16)) *************** dtors_section () \ *** 344,426 **** ( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 12), \ sprintf ((OUTPUT), "%s_%%%d", (NAME), (LABELNO))) #ifdef USE_GAS ! #undef ASM_LONG ! #define ASM_LONG ".long" ! #undef ASM_SHORT ! #define ASM_SHORT ".short" ! #undef ASM_CHAR ! #define ASM_CHAR ".byte" ! #undef ASM_BYTE ! #define ASM_BYTE ".byte" ! #undef ASM_BYTE_OP ! #define ASM_BYTE_OP "\t.byte\t" #else ! #undef ASM_LONG ! #define ASM_LONG "long" ! #undef ASM_SHORT ! #define ASM_SHORT "short" ! #undef ASM_CHAR ! #define ASM_CHAR "byte" ! #undef ASM_BYTE ! #define ASM_BYTE "byte" ! #undef ASM_BYTE_OP ! #define ASM_BYTE_OP "\tbyte\t" ! #endif /* USE_GAS */ ! ! /* The sysV68 as doesn't know about double's and float's. */ ! /* This is how to output an assembler line defining a `double' constant. */ ! ! #undef ASM_OUTPUT_DOUBLE ! #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ ! do { long l[2]; \ ! REAL_VALUE_TO_TARGET_DOUBLE (VALUE, l); \ ! fprintf (FILE, "\t%s 0x%lx,0x%lx\n", ASM_LONG, l[0], l[1]); \ ! } while (0) ! ! #undef ASM_OUTPUT_LONG_DOUBLE ! #define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \ ! do { long l[3]; \ ! REAL_VALUE_TO_TARGET_LONG_DOUBLE (VALUE, l); \ ! fprintf (FILE, "\t%s 0x%lx,0x%lx,0x%lx\n", ASM_LONG, l[0], l[1], l[2]); \ ! } while (0) ! ! /* This is how to output an assembler line defining a `float' constant. */ ! ! #undef ASM_OUTPUT_FLOAT ! #define ASM_OUTPUT_FLOAT(FILE,VALUE) \ ! do { long l; \ ! REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ ! fprintf ((FILE), "\t%s 0x%lx\n", ASM_LONG, l); \ ! } while (0) ! ! /* This is how to output an assembler line defining an `int' constant. */ ! ! #undef ASM_OUTPUT_INT ! #define ASM_OUTPUT_INT(FILE,VALUE) \ ! ( fprintf (FILE, "\t%s ", ASM_LONG), \ ! output_addr_const (FILE, (VALUE)), \ ! fprintf (FILE, "\n")) ! ! /* Likewise for `char' and `short' constants. */ ! ! #undef ASM_OUTPUT_SHORT ! #define ASM_OUTPUT_SHORT(FILE,VALUE) \ ! ( fprintf (FILE, "\t%s ", ASM_SHORT), \ ! output_addr_const (FILE, (VALUE)), \ ! fprintf (FILE, "\n")) ! ! #undef ASM_OUTPUT_CHAR ! #define ASM_OUTPUT_CHAR(FILE,VALUE) \ ! ( fprintf (FILE, "\t%s ", ASM_CHAR), \ ! output_addr_const (FILE, (VALUE)), \ ! fprintf (FILE, "\n")) ! ! /* This is how to output an assembler line for a numeric constant byte. */ ! ! #undef ASM_OUTPUT_BYTE ! #define ASM_OUTPUT_BYTE(FILE,VALUE) \ ! fprintf (FILE, "\t%s 0x%x\n", ASM_BYTE, (VALUE)) /* This is how to output an assembler line that says to advance the location counter --- 289,300 ---- ( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 12), \ sprintf ((OUTPUT), "%s_%%%d", (NAME), (LABELNO))) + #undef INT_OP_GROUP #ifdef USE_GAS ! #define INT_OP_GROUP INT_OP_STANDARD #else ! #define INT_OP_GROUP INT_OP_NO_DOT ! #endif /* This is how to output an assembler line that says to advance the location counter *************** do { long l; \ *** 454,460 **** /* The beginnings of sdb support... */ /* Undefining these will allow `output_file_directive' (in toplev.c) ! to default to the right thing. */ #undef ASM_OUTPUT_MAIN_SOURCE_FILENAME #ifndef USE_GAS #define ASM_OUTPUT_SOURCE_FILENAME(FILE, FILENAME) \ --- 328,334 ---- /* The beginnings of sdb support... */ /* Undefining these will allow `output_file_directive' (in toplev.c) ! to default to the right thing. */ #undef ASM_OUTPUT_MAIN_SOURCE_FILENAME #ifndef USE_GAS #define ASM_OUTPUT_SOURCE_FILENAME(FILE, FILENAME) \ *************** do { long l; \ *** 467,480 **** #define ASM_OUTPUT_SOURCE_LINE(FILE, LINENO) \ fprintf (FILE, "\tln\t%d\n", \ (sdb_begin_function_line \ ! ? last_linenum - sdb_begin_function_line : 1)) /* Yet another null terminated string format. */ #undef ASM_OUTPUT_ASCII #define ASM_OUTPUT_ASCII(FILE,PTR,LEN) \ ! do { register int sp = 0, lp = 0; \ ! fprintf ((FILE), "%s", ASM_BYTE_OP); \ loop: \ if ((PTR)[sp] > ' ' && ! ((PTR)[sp] & 0x80) && (PTR)[sp] != '\\') \ { lp += 3; \ --- 341,354 ---- #define ASM_OUTPUT_SOURCE_LINE(FILE, LINENO) \ fprintf (FILE, "\tln\t%d\n", \ (sdb_begin_function_line \ ! ? (LINENO) - sdb_begin_function_line : 1)) /* Yet another null terminated string format. */ #undef ASM_OUTPUT_ASCII #define ASM_OUTPUT_ASCII(FILE,PTR,LEN) \ ! do { register size_t sp = 0, lp = 0, limit = (LEN); \ ! fputs (integer_asm_op (1, TRUE), (FILE)); \ loop: \ if ((PTR)[sp] > ' ' && ! ((PTR)[sp] & 0x80) && (PTR)[sp] != '\\') \ { lp += 3; \ *************** do { long l; \ *** 482,488 **** else \ { lp += 5; \ fprintf ((FILE), "0x%x", (PTR)[sp]); } \ ! if (++sp < (LEN)) \ { if (lp > 60) \ { lp = 0; \ fprintf ((FILE), "\n%s", ASCII_DATA_ASM_OP); } \ --- 356,362 ---- else \ { lp += 5; \ fprintf ((FILE), "0x%x", (PTR)[sp]); } \ ! if (++sp < limit) \ { if (lp > 60) \ { lp = 0; \ fprintf ((FILE), "\n%s", ASCII_DATA_ASM_OP); } \ *************** do { long l; \ *** 530,536 **** #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \ asm_fprintf (FILE, "%L%s%d:\n", PREFIX, NUM) ! /* The prefix to add to user-visible assembler symbols. */ #undef USER_LABEL_PREFIX #define USER_LABEL_PREFIX "" --- 404,410 ---- #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \ asm_fprintf (FILE, "%L%s%d:\n", PREFIX, NUM) ! /* The prefix to add to user-visible assembler symbols. */ #undef USER_LABEL_PREFIX #define USER_LABEL_PREFIX "" *************** do { long l; \ *** 545,557 **** #undef ASM_OUTPUT_ADDR_VEC_ELT #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ ! asm_fprintf (FILE, "\t%s %LL%d\n", ASM_LONG, (VALUE)) /* This is how to output an element of a case-vector that is relative. */ #undef ASM_OUTPUT_ADDR_DIFF_ELT #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ ! asm_fprintf (FILE, "\t%s %LL%d-%LL%d\n", ASM_SHORT, (VALUE), (REL)) #ifndef USE_GAS --- 419,432 ---- #undef ASM_OUTPUT_ADDR_VEC_ELT #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ ! asm_fprintf (FILE, "%s%LL%d\n", integer_asm_op (4, TRUE), (VALUE)) /* This is how to output an element of a case-vector that is relative. */ #undef ASM_OUTPUT_ADDR_DIFF_ELT #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ ! asm_fprintf (FILE, "\t%s %LL%d-%LL%d\n", \ ! integer_asm_op (2, TRUE), (VALUE), (REL)) #ifndef USE_GAS *************** do {(CUM).offset = 0;\ *** 791,797 **** tell g++.c about that. */ #define ALT_LIBM "-lm881" ! #if (TARGET_DEFAULT & MASK_68881) /* The default configuration has a 6888[12] FPU. */ #define MATH_LIBRARY "-lm881" #endif --- 666,672 ---- tell g++.c about that. */ #define ALT_LIBM "-lm881" ! #if (TARGET_DEFAULT & MASK_68881) /* The default configuration has a 6888[12] FPU. */ #define MATH_LIBRARY "-lm881" #endif *************** do {(CUM).offset = 0;\ *** 807,813 **** _cleanup (); \ } while (0) ! /* FINALIZE_TRAMPOLINE clears the instruction cache. */ #undef FINALIZE_TRAMPOLINE #define FINALIZE_TRAMPOLINE(TRAMP) \ --- 682,688 ---- _cleanup (); \ } while (0) ! /* FINALIZE_TRAMPOLINE clears the instruction cache. */ #undef FINALIZE_TRAMPOLINE #define FINALIZE_TRAMPOLINE(TRAMP) \ diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/netbsd-elf.h gcc-3.1/gcc/config/m68k/netbsd-elf.h *** gcc-3.0.4/gcc/config/m68k/netbsd-elf.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/m68k/netbsd-elf.h Tue Feb 5 19:01:52 2002 *************** *** 0 **** --- 1,511 ---- + /* Definitions of target machine for GNU compiler, + for m68k (including m68010) NetBSD platforms using the + ELF object format. + Copyright (C) 2002 Free Software Foundation, Inc. + Contributed by Wasabi Systems. Inc. + + This file is derived from , , + and . + + 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 1, 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. */ + + + /* Default target comes from config.gcc */ + #undef TARGET_DEFAULT + #define TARGET_DEFAULT TARGET_CPU_DEFAULT + + + /* Don't try using XFmode on the 68010. */ + #if TARGET_DEFAULT == 0 + #undef LONG_DOUBLE_TYPE_SIZE + #define LONG_DOUBLE_TYPE_SIZE 64 + + /* Use software floating point emulator for REAL_ARITHMETIC and + decimal <-> binary conversion. */ + #define REAL_ARITHMETIC + #endif + + #ifdef __mc68010__ + #define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 64 + #endif + + #define EXTRA_SPECS \ + { "cpp_cpu_default_spec", CPP_CPU_DEFAULT_SPEC }, \ + { "cpp_cpu_spec", CPP_CPU_SPEC }, \ + { "cpp_fpu_spec", CPP_FPU_SPEC }, \ + { "asm_default_spec", ASM_DEFAULT_SPEC }, + + + #define CPP_CPU_SPEC \ + "%{m68010:-D__mc68010__} \ + %{m68020:-D__mc68020__} \ + %{m68030:-D__mc68030__} \ + %{m68040:-D__mc68040__} \ + %(cpp_cpu_default_spec)" + + + #undef TARGET_VERSION + #if TARGET_DEFAULT & MASK_68020 + #define TARGET_VERSION fprintf (stderr, " (NetBSD/m68k ELF)"); + #define CPP_CPU_DEFAULT_SPEC "%{!m680*:-D__mc68020__}" + #define ASM_DEFAULT_SPEC "%{!m680*:-m68020}" + #else + #define TARGET_VERSION fprintf (stderr, " (NetBSD/68010 ELF)"); + #define CPP_CPU_DEFAULT_SPEC "%{!m680*:-D__mc68010__}" + #define ASM_DEFAULT_SPEC "%{!m680*:-m68010}" + #endif + + + #if TARGET_DEFAULT & MASK_68881 + #define CPP_FPU_SPEC "%{!msoft-float:-D__HAVE_68881__ -D__HAVE_FPU__}" + #else + #define CPP_FPU_SPEC "%{m68881:-D__HAVE_68881__ -D__HAVE_FPU__}" + #endif + + + /* Provide a CPP_SPEC appropriate for NetBSD m68k targets. Currently we + deal with the GCC option '-posix', as well as an indication as to + whether or not use of the FPU is allowed. */ + + #undef CPP_SPEC + #define CPP_SPEC \ + "%{posix:-D_POSIX_SOURCE} %(cpp_cpu_spec) %(cpp_fpu_spec)" + + + /* Provide an ASM_SPEC appropriate for NetBSD m68k ELF targets. We pass + on some CPU options, as well as PIC code generation options. */ + + #undef ASM_SPEC + #define ASM_SPEC \ + " %| %(asm_default_spec) \ + %{m68010} %{m68020} %{m68030} %{m68040} %{m68060} \ + %{fpic:-k} %{fPIC:-k -K}" + + + /* Provide a set of CPP pre-definitions and pre-assertions appropriate + for NetBSD m68k ELF targets (using the SVR4 ABI). */ + + #undef CPP_PREDEFINES + #define CPP_PREDEFINES \ + "-D__NetBSD__ -D__ELF__ -D__m68k__ -D__SVR4_ABI__ -D__motorola__ \ + -Asystem=unix -Asystem=NetBSD -Acpu=m68k -Amachine=m68k" + + + /* Provide a LINK_SPEC appropriate for a NetBSD/m68k ELF target. + This is a copy of LINK_SPEC from tweaked for + the m68k target. */ + + #undef LINK_SPEC + #define LINK_SPEC \ + "%{assert*} %{R*} \ + %{shared:-shared} \ + %{!shared: \ + -dc -dp \ + %{!nostdlib: \ + %{!r*: \ + %{!e*:-e _start}}} \ + %{!static: \ + %{rdynamic:-export-dynamic} \ + %{!dynamic-linker:-dynamic-linker /usr/libexec/ld.elf_so}} \ + %{static:-static}}" + + + /* Output assembler code to FILE to increment profiler label # LABELNO + for profiling a function only. */ + + #undef FUNCTION_PROFILER + #define FUNCTION_PROFILER(FILE, LABELNO) \ + do \ + { \ + asm_fprintf (FILE, "\tlea (%LLP%d,%Rpc),%Ra1\n", (LABELNO)); \ + if (flag_pic) \ + fprintf (FILE, "\tbsr.l __mcount@PLTPC\n"); \ + else \ + fprintf (FILE, "\tjbsr __mcount\n"); \ + } \ + while (0) + + + /* Make gcc agree with */ + + #undef SIZE_TYPE + #define SIZE_TYPE "unsigned int" + + #undef PTRDIFF_TYPE + #define PTRDIFF_TYPE "int" + + + /* XXX + Here is a bunch of stuff lifted from m68kelf.h. We don't use that + file directly, because it has a lot of baggage we don't want. */ + + #define MOTOROLA /* Use Motorola syntax */ + #define USE_GAS /* But GAS wants jbsr instead of jsr */ + + + /* The prefix for register names. Note that REGISTER_NAMES + is supposed to include this prefix. Also note that this is NOT an + fprintf format string, it is a literal string. */ + + #undef REGISTER_PREFIX + #define REGISTER_PREFIX "%" + + + /* The prefix for local (compiler generated) lables. + These labels will not appear in the symbol table. */ + + #undef LOCAL_LABEL_PREFIX + #define LOCAL_LABEL_PREFIX "." + + + /* The prefix to add to user-visible assembler symbols. */ + + #undef USER_LABEL_PREFIX + #define USER_LABEL_PREFIX "" + + + /* The prefix for immediate operands. */ + + #undef IMMEDIATE_PREFIX + #define IMMEDIATE_PREFIX "#" + + + #undef ASM_COMMENT_START + #define ASM_COMMENT_START "|" + + + /* How to refer to registers in assembler output. + This sequence is indexed by compiler's hard-register-number. + Motorola format uses different register names than defined in m68k.h. + We also take this chance to convert 'a6' to 'fp' */ + + #undef REGISTER_NAMES + + #ifndef SUPPORT_SUN_FPA + + #define REGISTER_NAMES \ + {"%d0", "%d1", "%d2", "%d3", "%d4", "%d5", "%d6", "%d7", \ + "%a0", "%a1", "%a2", "%a3", "%a4", "%a5", "%fp", "%sp", \ + "%fp0", "%fp1", "%fp2", "%fp3", "%fp4", "%fp5", "%fp6", "%fp7" } + + #else /* SUPPORT_SUN_FPA */ + + #define REGISTER_NAMES \ + {"%d0", "%d1", "%d2", "%d3", "%d4", "%d5", "%d6", "%d7", \ + "%a0", "%a1", "%a2", "%a3", "%a4", "%a5", "%fp", "%sp", \ + "%fp0", "%fp1", "%fp2", "%fp3", "%fp4", "%fp5", "%fp6", "%fp7", \ + "%fpa0", "%fpa1", "%fpa2", "%fpa3", "%fpa4", "%fpa5", "%fpa6","%fpa7", \ + "%fpa8", "%fpa9", "%fpa10","%fpa11","%fpa12","%fpa13","%fpa14","%fpa15", \ + "%fpa16","%fpa17","%fpa18","%fpa19","%fpa20","%fpa21","%fpa22","%fpa23", \ + "%fpa24","%fpa25","%fpa26","%fpa27","%fpa28","%fpa29","%fpa30","%fpa31" } + + #endif /* ! SUPPORT_SUN_FPA */ + + + /* Currently, JUMP_TABLES_IN_TEXT_SECTION must be defined in order to + keep switch tables in the text section. */ + + #undef JUMP_TABLES_IN_TEXT_SECTION + #define JUMP_TABLES_IN_TEXT_SECTION 1 + + + /* Use the default action for outputting the case label. */ + #undef ASM_OUTPUT_CASE_LABEL + #define ASM_RETURN_CASE_JUMP \ + do \ + { \ + if (TARGET_5200) \ + return "ext%.l %0\n\tjmp %%pc@(2,%0:l)"; \ + else \ + return "jmp %%pc@(2,%0:w)"; \ + } \ + while (0) + + + /* This is how to output an assembler line that says to advance the + location counter to a multiple of 2**LOG bytes. */ + + #undef ASM_OUTPUT_ALIGN + #define ASM_OUTPUT_ALIGN(FILE,LOG) \ + do \ + { \ + if ((LOG) > 0) \ + fprintf ((FILE), "%s%u\n", ALIGN_ASM_OP, 1 << (LOG)); \ + } \ + while (0) + + + /* If defined, a C expression whose value is a string containing the + assembler operation to identify the following data as uninitialized global + data. */ + + #define BSS_SECTION_ASM_OP ".section\t.bss" + + + /* Like `ASM_OUTPUT_BSS' except takes the required alignment as a + separate, explicit argument. If you define this macro, it is used + in place of `ASM_OUTPUT_BSS', and gives you more flexibility in + handling the required alignment of the variable. The alignment is + specified as the number of bits. + + Try to use function `asm_output_aligned_bss' defined in file + `varasm.c' when defining this macro. */ + + #undef ASM_OUTPUT_ALIGNED_BSS + #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ + asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN) + + + #undef ASM_OUTPUT_COMMON + #define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED) \ + ( fputs (".comm ", (FILE)), \ + assemble_name ((FILE), (NAME)), \ + fprintf ((FILE), ",%u\n", (SIZE))) + + #undef ASM_OUTPUT_LOCAL + #define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED) \ + ( fputs (".lcomm ", (FILE)), \ + assemble_name ((FILE), (NAME)), \ + fprintf ((FILE), ",%u\n", (SIZE))) + + + /* Turn off function cse if we are doing PIC. We always want function + call to be done as `bsr foo@PLTPC', so it will force the assembler + to create the PLT entry for `foo'. Doing function cse will cause + the address of `foo' to be loaded into a register, which is exactly + what we want to avoid when we are doing PIC on svr4 m68k. */ + + #undef SUBTARGET_OVERRIDE_OPTIONS + #define SUBTARGET_OVERRIDE_OPTIONS \ + if (flag_pic) flag_no_function_cse = 1; + + + /* XXX + This is the end of the chunk lifted from m68kelf.h */ + + + /* XXX + The following chunk is more or less lifted from m68kv4.h. + We'd like to just #include that file, but it has not yet + been converted to the new include style. + + Should there be a m68kv4-abi.h ?? */ + + + /* Register in which address to store a structure value is passed to a + function. The default in m68k.h is a1. For m68k/SVR4 it is a0. */ + + #undef STRUCT_VALUE_REGNUM + #define STRUCT_VALUE_REGNUM 8 + + + /* Register in which static-chain is passed to a function. The + default isn m68k.h is a0, but that is already the struct value + regnum. Make it a1 instead. */ + + #undef STATIC_CHAIN_REGNUM + #define STATIC_CHAIN_REGNUM 9 + + + /* Now to renumber registers for dbx and gdb. + We use the Sun-3 convention, which is: + floating point registers have numbers 18 to 25, not + 16 to 23 as they do in the compiler. */ + + #undef DBX_REGISTER_NUMBER + #define DBX_REGISTER_NUMBER(REGNO) ((REGNO) < 16 ? (REGNO) : (REGNO) + 2) + + + /* 1 if N is a possible register number for a function value. For + m68k/SVR4 allow d0, a0, or fp0 as return registers, for integral, + pointer, or floating types, respectively. Reject fp0 if not using + a 68881 coprocessor. */ + + #undef FUNCTION_VALUE_REGNO_P + #define FUNCTION_VALUE_REGNO_P(N) \ + ((N) == 0 || (N) == 8 || (TARGET_68881 && (N) == 16)) + + + /* Define this to be true when FUNCTION_VALUE_REGNO_P is true for + more than one register. */ + + #undef NEEDS_UNTYPED_CALL + #define NEEDS_UNTYPED_CALL 1 + + + /* Define how to generate (in the callee) the output value of a + function and how to find (in the caller) the value returned by a + function. VALTYPE is the data type of the value (as a tree). If + the precise function being called is known, FUNC is its + FUNCTION_DECL; otherwise, FUNC is 0. For m68k/SVR4 generate the + result in d0, a0, or fp0 as appropriate. */ + + #undef FUNCTION_VALUE + #define FUNCTION_VALUE(VALTYPE, FUNC) \ + (TREE_CODE (VALTYPE) == REAL_TYPE && TARGET_68881 \ + ? gen_rtx_REG (TYPE_MODE (VALTYPE), 16) \ + : (POINTER_TYPE_P (VALTYPE) \ + ? gen_rtx_REG (TYPE_MODE (VALTYPE), 8) \ + : gen_rtx_REG (TYPE_MODE (VALTYPE), 0))) + + + /* For compatibility with the large body of existing code which does + not always properly declare external functions returning pointer + types, the m68k/SVR4 convention is to copy the value returned for + pointer functions from a0 to d0 in the function epilogue, so that + callers that have neglected to properly declare the callee can + still find the correct return value. */ + + extern int current_function_returns_pointer; + #define FUNCTION_EXTRA_EPILOGUE(FILE, SIZE) \ + do \ + { \ + if (current_function_returns_pointer \ + && ! find_equiv_reg (0, get_last_insn (), 0, 0, 0, 8, Pmode)) \ + asm_fprintf (FILE, "\tmove.l %Ra0,%Rd0\n"); \ + } \ + while (0) + + + /* Define how to find the value returned by a library function + assuming the value has mode MODE. + For m68k/SVR4 look for integer values in d0, pointer values in d0 + (returned in both d0 and a0), and floating values in fp0. */ + + #undef LIBCALL_VALUE + #define LIBCALL_VALUE(MODE) \ + ((((MODE) == SFmode || (MODE) == DFmode || (MODE) == XFmode) \ + && TARGET_68881) \ + ? gen_rtx_REG (MODE, 16) \ + : gen_rtx_REG (MODE, 0)) + + + /* Boundary (in *bits*) on which stack pointer should be aligned. + The m68k/SVR4 convention is to keep the stack pointer longword aligned. */ + + #undef STACK_BOUNDARY + #define STACK_BOUNDARY 32 + + + /* Alignment of field after `int : 0' in a structure. + For m68k/SVR4, this is the next longword boundary. */ + + #undef EMPTY_FIELD_BOUNDARY + #define EMPTY_FIELD_BOUNDARY 32 + + + /* No data type wants to be aligned rounder than this. + For m68k/SVR4, some types (doubles for example) are aligned on 8 byte + boundaries */ + + #undef BIGGEST_ALIGNMENT + #define BIGGEST_ALIGNMENT 64 + + + /* In m68k svr4, a symbol_ref rtx can be a valid PIC operand if it is + an operand of a function call. */ + + #undef LEGITIMATE_PIC_OPERAND_P + #define LEGITIMATE_PIC_OPERAND_P(X) \ + ((! symbolic_operand (X, VOIDmode) \ + && ! (GET_CODE (X) == CONST_DOUBLE && mem_for_const_double (X) \ + && GET_CODE (mem_for_const_double (X)) == MEM \ + && symbolic_operand (XEXP (mem_for_const_double (X), 0), \ + VOIDmode))) \ + || (GET_CODE (X) == SYMBOL_REF && SYMBOL_REF_FLAG (X)) \ + || PCREL_GENERAL_OPERAND_OK) + + + /* For m68k SVR4, structures are returned using the reentrant + technique. */ + + #undef PCC_STATIC_STRUCT_RETURN + + + /* The svr4 ABI for the m68k says that records and unions are returned + in memory. */ + + #undef DEFAULT_PCC_STRUCT_RETURN + #define DEFAULT_PCC_STRUCT_RETURN 1 + + + /* 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) + + + /* Output assembler code for a block containing the constant parts + of a trampoline, leaving space for the variable parts. */ + + /* On m68k svr4, the trampoline is different from the generic version + in that we use a1 as the static call chain. */ + + #undef TRAMPOLINE_TEMPLATE + #define TRAMPOLINE_TEMPLATE(FILE) \ + { \ + assemble_aligned_integer (2, GEN_INT (0x227a)); \ + assemble_aligned_integer (2, GEN_INT (8)); \ + assemble_aligned_integer (2, GEN_INT (0x2f3a)); \ + assemble_aligned_integer (2, GEN_INT (8)); \ + assemble_aligned_integer (2, GEN_INT (0x4e75)); \ + assemble_aligned_integer (4, const0_rtx); \ + assemble_aligned_integer (4, const0_rtx); \ + } + + /* Redefine since we are using a different trampoline */ + #undef TRAMPOLINE_SIZE + #define TRAMPOLINE_SIZE 18 + + /* Emit RTL insns to initialize the variable parts of a trampoline. + FNADDR is an RTX for the address of the function's pure code. + CXT is an RTX for the static chain value for the function. */ + + #undef INITIALIZE_TRAMPOLINE + #define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \ + { \ + emit_move_insn (gen_rtx_MEM (SImode, plus_constant (TRAMP, 10)), CXT); \ + emit_move_insn (gen_rtx_MEM (SImode, plus_constant (TRAMP, 14)), FNADDR); \ + } + + + /* XXX + This is the end of the chunk lifted from m68kv4.h */ diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/netbsd.h gcc-3.1/gcc/config/m68k/netbsd.h *** gcc-3.0.4/gcc/config/m68k/netbsd.h Thu Nov 2 23:29:11 2000 --- gcc-3.1/gcc/config/m68k/netbsd.h Tue Feb 5 19:01:52 2002 *************** *** 3,8 **** --- 3,9 ---- /* Get generic NetBSD definitions. */ #include + #include #define TARGET_DEFAULT (MASK_BITFIELD|MASK_68881|MASK_68020) *************** *** 27,41 **** #undef PTRDIFF_TYPE #define PTRDIFF_TYPE "int" - #undef WCHAR_TYPE - #define WCHAR_TYPE "int" - - #undef WCHAR_UNSIGNED - #define WCHAR_UNSIGNED 0 - - #undef WCHAR_TYPE_SIZE - #define WCHAR_TYPE_SIZE 32 - /* Every structure or union's size must be a multiple of 2 bytes. */ #define STRUCTURE_SIZE_BOUNDARY 16 --- 28,33 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/news.h gcc-3.1/gcc/config/m68k/news.h *** gcc-3.0.4/gcc/config/m68k/news.h Mon Apr 16 18:25:49 2001 --- gcc-3.1/gcc/config/m68k/news.h Thu Dec 20 17:36:36 2001 *************** Boston, MA 02111-1307, USA. */ *** 25,30 **** --- 25,31 ---- #define SGS_NO_LI /* Suppress jump table label usage */ #endif + #define NEWS #define NO_DOLLAR_IN_LABEL #define NO_DOT_IN_LABEL *************** Boston, MA 02111-1307, USA. */ *** 98,109 **** #undef FUNCTION_PROFILER #ifdef MOTOROLA - #undef FUNCTION_PROLOGUE - #undef FUNCTION_EPILOGUE #undef REGISTER_NAMES #undef ASM_OUTPUT_REG_PUSH #undef ASM_OUTPUT_REG_POP - #undef ASM_OUTPUT_DOUBLE #undef ASM_OUTPUT_SKIP #undef ASM_FORMAT_PRIVATE_NAME #endif --- 99,107 ---- *************** Boston, MA 02111-1307, USA. */ *** 139,249 **** #ifdef MOTOROLA - #define FUNCTION_PROLOGUE(FILE, SIZE) \ - { register int regno; \ - register int mask = 0; \ - extern char call_used_regs[]; \ - int fsize = ((SIZE) + 3) & -4; \ - if (frame_pointer_needed) \ - { if (fsize < 0x8000) \ - fprintf (FILE, "\tlink fp,#%d\n", -fsize); \ - else if (TARGET_68020) \ - fprintf (FILE, "\tlink.l fp,#%d\n", -fsize); \ - else \ - fprintf (FILE, "\tlink fp,#0\n\tsub.l #%d,sp\n", fsize);\ - } \ - else if (fsize) \ - { \ - int amt = fsize + 4; \ - /* Adding negative number is faster on the 68040. */ \ - if (fsize + 4 < 0x8000) \ - asm_fprintf (FILE, "\tadd.w %0I%d,%Rsp\n", - amt); \ - else \ - asm_fprintf (FILE, "\tadd.l %0I%d,%Rsp\n", - amt); \ - } \ - for (regno = 16; regno < FIRST_PSEUDO_REGISTER; regno++) \ - if (regs_ever_live[regno] && ! call_used_regs[regno]) \ - mask |= 1 << (regno - 16); \ - if (mask != 0) \ - fprintf (FILE, "\tfmovem.x #0x%x,-(sp)\n", mask & 0xff); \ - mask = 0; \ - for (regno = 0; regno < 16; regno++) \ - if (regs_ever_live[regno] && ! call_used_regs[regno]) \ - mask |= 1 << (15 - regno); \ - if (frame_pointer_needed) \ - mask &= ~ (1 << (15-FRAME_POINTER_REGNUM)); \ - if (exact_log2 (mask) >= 0) \ - fprintf (FILE, "\tmove.l %s,-(sp)\n", reg_names[15 - exact_log2 (mask)]); \ - else if (mask) fprintf (FILE, "\tmovem.l #0x%x,-(sp)\n", mask); } - #define FUNCTION_PROFILER(FILE, LABEL_NO) \ fprintf (FILE, "\tmove.l #LP%d,d0\n\tjsr mcount\n", (LABEL_NO)); - #define FUNCTION_EPILOGUE(FILE, SIZE) \ - { register int regno; \ - register int mask, fmask; \ - register int nregs; \ - int offset, foffset; \ - extern char call_used_regs[]; \ - int fsize = ((SIZE) + 3) & -4; \ - int big = 0; \ - nregs = 0; fmask = 0; \ - for (regno = 16; regno < FIRST_PSEUDO_REGISTER; regno++) \ - if (regs_ever_live[regno] && ! call_used_regs[regno]) \ - { nregs++; fmask |= 1 << (23 - regno); } \ - foffset = nregs * 12; \ - nregs = 0; mask = 0; \ - if (frame_pointer_needed) regs_ever_live[FRAME_POINTER_REGNUM] = 0; \ - for (regno = 0; regno < 16; regno++) \ - if (regs_ever_live[regno] && ! call_used_regs[regno]) \ - { nregs++; mask |= 1 << regno; } \ - offset = foffset + nregs * 4; \ - if (offset + fsize >= 0x8000 \ - && frame_pointer_needed \ - && (mask || fmask)) \ - { fprintf (FILE, "\tmove.l #%d,a0\n", -fsize); \ - fsize = 0, big = 1; } \ - if (exact_log2 (mask) >= 0) { \ - if (big) \ - fprintf (FILE, "\tmove.l (-%d,fp,a0.l),%s\n", \ - offset + fsize, reg_names[exact_log2 (mask)]); \ - else if (! frame_pointer_needed) \ - fprintf (FILE, "\tmove.l (sp)+,%s\n", \ - reg_names[exact_log2 (mask)]); \ - else \ - fprintf (FILE, "\tmove.l (-%d,fp),%s\n", \ - offset + fsize, reg_names[exact_log2 (mask)]); } \ - else if (mask) { \ - if (big) \ - fprintf (FILE, "\tmovem.l (-%d,fp,a0.l),#0x%x\n", \ - offset + fsize, mask); \ - else if (! frame_pointer_needed) \ - fprintf (FILE, "\tmovem.l (sp)+,#0x%x\n", mask); \ - else \ - fprintf (FILE, "\tmovem.l (-%d,fp),#0x%x\n", \ - offset + fsize, mask); } \ - if (fmask) { \ - if (big) \ - fprintf (FILE, "\tfmovem.x (-%d,fp,a0.l),#0x%x\n", \ - foffset + fsize, fmask); \ - else if (! frame_pointer_needed) \ - fprintf (FILE, "\tfmovem.x (sp)+,#0x%x\n", fmask); \ - else \ - fprintf (FILE, "\tfmovem.x (-%d,fp),#0x%x\n", \ - foffset + fsize, fmask); } \ - if (frame_pointer_needed) \ - fprintf (FILE, "\tunlk fp\n"); \ - else if (fsize) \ - { \ - if (fsize + 4 < 0x8000) \ - fprintf (FILE, "\tadd.w #%d,sp\n", fsize + 4); \ - else \ - fprintf (FILE, "\tadd.l #%d,sp\n", fsize + 4); \ - } \ - if (current_function_pops_args) \ - fprintf (FILE, "\trtd #%d\n", current_function_pops_args); \ - else fprintf (FILE, "\trts\n"); } - /* Difference from m68k.h is in `fp' instead of `a6'. */ #define REGISTER_NAMES \ --- 137,145 ---- *************** Boston, MA 02111-1307, USA. */ *** 263,280 **** #define ASM_OUTPUT_REG_POP(FILE,REGNO) \ fprintf (FILE, "\tmove.l (sp)+,%s\n", reg_names[REGNO]) - #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - do { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \ - fprintf (FILE, "\t.double 0d%s\n", dstr); \ - } while (0) - #define ASM_OUTPUT_SKIP(FILE,SIZE) \ fprintf (FILE, "\t.space %u\n", (SIZE)) #if 0 /* The NEWS assembler in version 3.4 complains about fmove.d, but this ! macro proved not to work right. 3.4 is old, so forget about it. */ #define ASM_OUTPUT_OPCODE(FILE, STRING) \ { \ if (!strncmp (STRING, "fmove.d", 7) \ --- 159,170 ---- #define ASM_OUTPUT_REG_POP(FILE,REGNO) \ fprintf (FILE, "\tmove.l (sp)+,%s\n", reg_names[REGNO]) #define ASM_OUTPUT_SKIP(FILE,SIZE) \ fprintf (FILE, "\t.space %u\n", (SIZE)) #if 0 /* The NEWS assembler in version 3.4 complains about fmove.d, but this ! macro proved not to work right. 3.4 is old, so forget about it. */ #define ASM_OUTPUT_OPCODE(FILE, STRING) \ { \ if (!strncmp (STRING, "fmove.d", 7) \ *************** do { char dstr[30]; \ *** 388,394 **** else \ { long l; \ REAL_VALUE_TO_TARGET_SINGLE (r, l); \ ! fprintf (FILE, "#0x%x", l); \ }} \ else if (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) == XFmode) \ { REAL_VALUE_TYPE r; \ --- 278,284 ---- else \ { long l; \ REAL_VALUE_TO_TARGET_SINGLE (r, l); \ ! fprintf (FILE, "#0x%lx", l); \ }} \ else if (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) == XFmode) \ { REAL_VALUE_TYPE r; \ diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/next.h gcc-3.1/gcc/config/m68k/next.h *** gcc-3.0.4/gcc/config/m68k/next.h Thu Nov 2 23:29:11 2000 --- gcc-3.1/gcc/config/m68k/next.h Thu Dec 20 17:36:36 2001 *************** Boston, MA 02111-1307, USA. */ *** 39,97 **** (Why isn't this in m68k.h?) */ #define STRUCTURE_SIZE_BOUNDARY 16 - /* This is how to output an assembler line defining a `double' constant. */ - - #undef ASM_OUTPUT_DOUBLE - #ifdef REAL_VALUE_TO_TARGET_DOUBLE - #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - do { \ - long hex[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE (VALUE, hex); \ - fprintf (FILE, "\t.long 0x%x\n\t.long 0x%x\n", hex[0], hex[1]); \ - } while (0) - #else - #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - do { if (REAL_VALUE_ISINF (VALUE)) \ - { \ - if (REAL_VALUE_NEGATIVE (VALUE)) \ - fprintf (FILE, "\t.double 0r-99e999\n"); \ - else \ - fprintf (FILE, "\t.double 0r99e999\n"); \ - } \ - else \ - { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \ - fprintf (FILE, "\t.double 0r%s\n", dstr); \ - } \ - } while (0) - #endif - - /* This is how to output an assembler line defining a `float' constant. */ - - #undef ASM_OUTPUT_FLOAT - #ifdef REAL_VALUE_TO_TARGET_SINGLE - #define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - do { \ - long hex; \ - REAL_VALUE_TO_TARGET_SINGLE (VALUE, hex); \ - fprintf (FILE, "\t.long 0x%x\n", hex); \ - } while (0) - #else - #define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - do { if (REAL_VALUE_ISINF (VALUE)) \ - { \ - if (REAL_VALUE_NEGATIVE (VALUE)) \ - fprintf (FILE, "\t.single 0r-99e999\n"); \ - else \ - fprintf (FILE, "\t.single 0r99e999\n"); \ - } \ - else \ - { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \ - fprintf (FILE, "\t.single 0r%s\n", dstr); \ - } \ - } while (0) - #endif #undef ASM_OUTPUT_FLOAT_OPERAND #ifdef REAL_VALUE_TO_TARGET_SINGLE --- 39,44 ---- *************** Boston, MA 02111-1307, USA. */ *** 99,105 **** do { \ long hex; \ REAL_VALUE_TO_TARGET_SINGLE (VALUE, hex); \ ! fprintf (FILE, "#0%c%x", (CODE) == 'f' ? 'b' : 'x', hex); \ } while (0) #else #define ASM_OUTPUT_FLOAT_OPERAND(CODE,FILE,VALUE) \ --- 46,52 ---- do { \ long hex; \ REAL_VALUE_TO_TARGET_SINGLE (VALUE, hex); \ ! fprintf (FILE, "#0%c%lx", (CODE) == 'f' ? 'b' : 'x', hex); \ } while (0) #else #define ASM_OUTPUT_FLOAT_OPERAND(CODE,FILE,VALUE) \ *************** Boston, MA 02111-1307, USA. */ *** 109,115 **** long l; \ REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ if (sizeof (int) == sizeof (long)) \ ! asm_fprintf ((FILE), "%I0x%x", l); \ else \ asm_fprintf ((FILE), "%I0x%lx", l); \ } \ --- 56,62 ---- long l; \ REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ if (sizeof (int) == sizeof (long)) \ ! asm_fprintf ((FILE), "%I0x%x", (int) l); \ else \ asm_fprintf ((FILE), "%I0x%lx", l); \ } \ *************** Boston, MA 02111-1307, USA. */ *** 134,140 **** do { \ long hex[2]; \ REAL_VALUE_TO_TARGET_DOUBLE (VALUE, hex); \ ! fprintf (FILE, "#0b%x%08x", hex[0], hex[1]); \ } while (0) #else #define ASM_OUTPUT_DOUBLE_OPERAND(FILE,VALUE) \ --- 81,87 ---- do { \ long hex[2]; \ REAL_VALUE_TO_TARGET_DOUBLE (VALUE, hex); \ ! fprintf (FILE, "#0b%lx%08lx", hex[0], hex[1]); \ } while (0) #else #define ASM_OUTPUT_DOUBLE_OPERAND(FILE,VALUE) \ *************** Boston, MA 02111-1307, USA. */ *** 158,164 **** tables using pc relative addressing, since they are not in the text section, so we undefine CASE_VECTOR_PC_RELATIVE. This also causes the compiler to use absolute addresses in the jump table, ! so we redefine CASE_VECTOR_MODE to be SImode. */ #undef CASE_VECTOR_MODE #define CASE_VECTOR_MODE SImode --- 105,111 ---- tables using pc relative addressing, since they are not in the text section, so we undefine CASE_VECTOR_PC_RELATIVE. This also causes the compiler to use absolute addresses in the jump table, ! so we redefine CASE_VECTOR_MODE to be SImode. */ #undef CASE_VECTOR_MODE #define CASE_VECTOR_MODE SImode *************** Boston, MA 02111-1307, USA. */ *** 177,189 **** #define GO_IF_INDEXABLE_BASE(X, ADDR) \ { if (LEGITIMATE_BASE_REG_P (X)) goto ADDR; } ! /* This accounts for the return pc and saved fp on the m68k. */ #define OBJC_FORWARDING_STACK_OFFSET 8 #define OBJC_FORWARDING_MIN_OFFSET 8 /* FINALIZE_TRAMPOLINE enables executable stack. The ! __enable_execute_stack also clears the insn cache. */ #undef FINALIZE_TRAMPOLINE #define FINALIZE_TRAMPOLINE(TRAMP) \ --- 124,136 ---- #define GO_IF_INDEXABLE_BASE(X, ADDR) \ { if (LEGITIMATE_BASE_REG_P (X)) goto ADDR; } ! /* This accounts for the return pc and saved fp on the m68k. */ #define OBJC_FORWARDING_STACK_OFFSET 8 #define OBJC_FORWARDING_MIN_OFFSET 8 /* FINALIZE_TRAMPOLINE enables executable stack. The ! __enable_execute_stack also clears the insn cache. */ #undef FINALIZE_TRAMPOLINE #define FINALIZE_TRAMPOLINE(TRAMP) \ *************** Boston, MA 02111-1307, USA. */ *** 191,197 **** 0, VOIDmode, 1, memory_address (SImode, (TRAMP)), Pmode) /* A C expression used to clear the instruction cache from ! address BEG to address END. On NeXTSTEP this i a system trap. */ #define CLEAR_INSN_CACHE(BEG, END) \ asm volatile ("trap #2") --- 138,144 ---- 0, VOIDmode, 1, memory_address (SImode, (TRAMP)), Pmode) /* A C expression used to clear the instruction cache from ! address BEG to address END. On NeXTSTEP this i a system trap. */ #define CLEAR_INSN_CACHE(BEG, END) \ asm volatile ("trap #2") diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/next21.h gcc-3.1/gcc/config/m68k/next21.h *** gcc-3.0.4/gcc/config/m68k/next21.h Thu Dec 7 01:58:24 2000 --- gcc-3.1/gcc/config/m68k/next21.h Thu Dec 20 17:36:36 2001 *************** Boston, MA 02111-1307, USA. */ *** 27,65 **** /* for #include in libgcc2.c */ #define NeXTStep21 - #undef ASM_OUTPUT_DOUBLE - #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - do { if (REAL_VALUE_ISINF (VALUE)) \ - { \ - if (REAL_VALUE_NEGATIVE (VALUE)) \ - fprintf (FILE, "#0r-99e999"); \ - else \ - fprintf (FILE, "#0r99e999"); \ - } \ - else \ - { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \ - fprintf (FILE, "\t.double 0r%s\n", dstr); \ - } \ - } while (0) - - /* This is how to output an assembler line defining a `float' constant. */ - #undef ASM_OUTPUT_FLOAT - #define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - do { if (REAL_VALUE_ISINF (VALUE)) \ - { \ - if (REAL_VALUE_NEGATIVE (VALUE)) \ - fprintf (FILE, "\t.single 0r-99e999\n"); \ - else \ - fprintf (FILE, "\t.single 0r99e999\n"); \ - } \ - else \ - { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \ - fprintf (FILE, "\t.single 0r%s\n", dstr); \ - } \ - } while (0) - /* called from m68k.c line 1881 */ #undef ASM_OUTPUT_FLOAT_OPERAND #define ASM_OUTPUT_FLOAT_OPERAND(CODE,FILE,VALUE) \ --- 27,32 ---- *************** Boston, MA 02111-1307, USA. */ *** 69,75 **** long l; \ REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ if (sizeof (int) == sizeof (long)) \ ! asm_fprintf ((FILE), "%I0x%x", l); \ else \ asm_fprintf ((FILE), "%I0x%lx", l); \ } \ --- 36,42 ---- long l; \ REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ if (sizeof (int) == sizeof (long)) \ ! asm_fprintf ((FILE), "%I0x%x", (int) l); \ else \ asm_fprintf ((FILE), "%I0x%lx", l); \ } \ diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/pbb.h gcc-3.1/gcc/config/m68k/pbb.h *** gcc-3.0.4/gcc/config/m68k/pbb.h Thu Nov 2 23:29:11 2000 --- gcc-3.1/gcc/config/m68k/pbb.h Thu Nov 1 14:49:33 2001 *************** Boston, MA 02111-1307, USA. */ *** 53,59 **** #define TARGET_MEM_FUNCTIONS ! /* -m68000 requires special flags to the assembler. */ #define ASM_SPEC \ " %{m68000:-mc68010}%{mc68000:-mc68010}" --- 53,59 ---- #define TARGET_MEM_FUNCTIONS ! /* -m68000 requires special flags to the assembler. */ #define ASM_SPEC \ " %{m68000:-mc68010}%{mc68000:-mc68010}" *************** Boston, MA 02111-1307, USA. */ *** 130,136 **** /* similar to default, but allows for the table defined by ld with gcc.ifile. nptrs is always 0. So we need to instead check that __DTOR_LIST__[1] != 0. The old check is left in so that the same macro can be used if and when ! a future version of gas does support section directives. */ #define DO_GLOBAL_DTORS_BODY {int nptrs = *(int *)__DTOR_LIST__; int i; \ if (nptrs == -1 || (__DTOR_LIST__[0] == 0 && __DTOR_LIST__[1] != 0)) \ --- 130,136 ---- /* similar to default, but allows for the table defined by ld with gcc.ifile. nptrs is always 0. So we need to instead check that __DTOR_LIST__[1] != 0. The old check is left in so that the same macro can be used if and when ! a future version of gas does support section directives. */ #define DO_GLOBAL_DTORS_BODY {int nptrs = *(int *)__DTOR_LIST__; int i; \ if (nptrs == -1 || (__DTOR_LIST__[0] == 0 && __DTOR_LIST__[1] != 0)) \ diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/plexus.h gcc-3.1/gcc/config/m68k/plexus.h *** gcc-3.0.4/gcc/config/m68k/plexus.h Thu Nov 2 23:29:11 2000 --- gcc-3.1/gcc/config/m68k/plexus.h Tue Nov 27 15:36:24 2001 *************** Boston, MA 02111-1307, USA. */ *** 34,40 **** #include "m68k/m68k.h" /* Define __HAVE_68881 in preprocessor only if -m68881 is specified. ! This will control the use of inline 68881 insns in certain macros. */ #define TARGET_DEFAULT (MASK_BITFIELD|MASK_68020) --- 34,40 ---- #include "m68k/m68k.h" /* Define __HAVE_68881 in preprocessor only if -m68881 is specified. ! This will control the use of inline 68881 insns in certain macros. */ #define TARGET_DEFAULT (MASK_BITFIELD|MASK_68020) *************** Boston, MA 02111-1307, USA. */ *** 46,52 **** #define CPP_PREDEFINES "-Dm68 -Dunix -Dplexus -Asystem=unix -Acpu=m68k -Amachine=m68k" #if TARGET_DEFAULT & MASK_68020 ! #define ASM_SPEC\ "%{m68000:-mc68000}%{mc68000:-mc68000}%{!mc68000:%{!m68000:-mc68020}}" #undef STRICT_ALIGNMENT #define STRICT_ALIGNMENT 0 --- 46,52 ---- #define CPP_PREDEFINES "-Dm68 -Dunix -Dplexus -Asystem=unix -Acpu=m68k -Amachine=m68k" #if TARGET_DEFAULT & MASK_68020 ! #define ASM_SPEC \ "%{m68000:-mc68000}%{mc68000:-mc68000}%{!mc68000:%{!m68000:-mc68020}}" #undef STRICT_ALIGNMENT #define STRICT_ALIGNMENT 0 *************** Boston, MA 02111-1307, USA. */ *** 102,107 **** /***********************************************************************/ #define NM_FLAGS "" - #define NO_DUP2 #define SIZE_TYPE "int" --- 102,106 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/rtems.h gcc-3.1/gcc/config/m68k/rtems.h *** gcc-3.0.4/gcc/config/m68k/rtems.h Fri Feb 15 14:43:00 2002 --- gcc-3.1/gcc/config/m68k/rtems.h Fri Apr 12 13:09:30 2002 *************** along with GNU CC; see the file COPYING. *** 19,36 **** the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - #include "m68k/m68k-coff.h" - /* Specify predefined symbols in preprocessor. */ #undef CPP_PREDEFINES #define CPP_PREDEFINES "-Dmc68000 -D__rtems__ \ -Asystem=rtems -Acpu=mc68000 -Acpu=m68k -Amachine=m68k" - - /* Generate calls to memcpy, memcmp and memset. */ - #ifndef TARGET_MEM_FUNCTIONS - #define TARGET_MEM_FUNCTIONS - #endif - - /* Get machine-independent configuration parameters for RTEMS. */ - #include --- 19,26 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/rtemself.h gcc-3.1/gcc/config/m68k/rtemself.h *** gcc-3.0.4/gcc/config/m68k/rtemself.h Fri Feb 15 14:43:01 2002 --- gcc-3.1/gcc/config/m68k/rtemself.h Fri Apr 12 13:09:30 2002 *************** Boston, MA 02111-1307, USA. */ *** 22,70 **** #define MOTOROLA /* Use Motorola syntax rather than MIT. */ - #include "m68k/m68020-elf.h" - /* Specify predefined symbols in preprocessor. */ #undef CPP_PREDEFINES ! #define CPP_PREDEFINES "-Dmc68000 -D__rtems__ -D__ELF__ \ ! -Asystem=rtems -Acpu=mc68000 -Acpu=m68k -Amachine=m68k -D__USE_INIT_FINI__" ! ! /* Generate calls to memcpy, memcmp and memset. */ ! #ifndef TARGET_MEM_FUNCTIONS ! #define TARGET_MEM_FUNCTIONS ! #endif ! ! /* ! * Each RTEMS BSP provides its own crt0 and linker script. Unfortunately ! * this means that crt0 and the linker script are not available as ! * each tool is configured. Without a crt0 and linker script, m68k ELF ! * targets do not successfully link "conftest.c" during the configuration ! * process. RTEMS supplies a crt0.c that provides all the symbols required ! * to successfully link a program. The resulting program will not run ! * but this is enough to satisfy the autoconf macro AC_PROG_CC. ! * Override STARTFILE_SPEC to use the fake crt0.o supplied by rtems. ! */ ! #undef STARTFILE_SPEC ! #define STARTFILE_SPEC "crt0.o%s" ! ! /* ! * Redefine INIT_SECTION_ASM_OP and FINI_SECTION_ASM_OP. This is the easiest ! * way to process constructors, destructors, and the exception frame ! * information at startup. ! */ ! #undef INIT_SECTION_ASM_OP ! #define INIT_SECTION_ASM_OP "\t.section\t.init" ! #undef FINI_SECTION_ASM_OP ! #define FINI_SECTION_ASM_OP "\t.section\t.fini" ! ! #undef EH_FRAME_SECTION_ASM_OP ! #define EH_FRAME_SECTION_ASM_OP "\t.section\t.eh_frame" ! ! /* Do I need this? */ ! #undef INVOKE__main ! ! /* Get machine-independent configuration parameters for RTEMS. */ ! #include ! ! /* end of m68k/rtemself.h */ --- 22,29 ---- #define MOTOROLA /* Use Motorola syntax rather than MIT. */ /* Specify predefined symbols in preprocessor. */ #undef CPP_PREDEFINES ! #define CPP_PREDEFINES "-Dmc68000 -D__rtems__ -D__ELF__ -D__USE_INIT_FINI__ \ ! -Asystem=rtems -Acpu=mc68000 -Acpu=m68k -Amachine=m68k" diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/sgs.h gcc-3.1/gcc/config/m68k/sgs.h *** gcc-3.0.4/gcc/config/m68k/sgs.h Mon Apr 16 18:25:49 2001 --- gcc-3.1/gcc/config/m68k/sgs.h Thu Dec 20 17:36:36 2001 *************** Boston, MA 02111-1307, USA. */ *** 30,40 **** #include "m68k/m68k.h" ! /* SGS specific assembler pseudo ops. */ - #define BYTE_ASM_OP "\t.byte " - #define WORD_ASM_OP "\t.short " - #define LONG_ASM_OP "\t.long " #define SPACE_ASM_OP "\t.space " #define ALIGN_ASM_OP "\t.align " #undef GLOBAL_ASM_OP --- 30,40 ---- #include "m68k/m68k.h" ! #undef INT_OP_GROUP ! #define INT_OP_GROUP INT_OP_STANDARD ! ! /* SGS specific assembler pseudo ops. */ #define SPACE_ASM_OP "\t.space " #define ALIGN_ASM_OP "\t.align " #undef GLOBAL_ASM_OP *************** Boston, MA 02111-1307, USA. */ *** 42,50 **** #define SWBEG_ASM_OP "\t.swbeg " #define SET_ASM_OP "\t.set " - #define UNALIGNED_SHORT_ASM_OP "\t.short " /* Used in dwarfout.c */ - #define UNALIGNED_INT_ASM_OP "\t.long " /* Used in dwarfout.c */ - #define ASM_PN_FORMAT "%s_%d" /* Format for private names */ /* Here are four prefixes that are used by asm_fprintf to --- 42,47 ---- *************** Boston, MA 02111-1307, USA. */ *** 60,71 **** #define REGISTER_PREFIX "%" /* The prefix for local (compiler generated) labels. ! These labels will not appear in the symbol table. */ #undef LOCAL_LABEL_PREFIX #define LOCAL_LABEL_PREFIX "." ! /* The prefix to add to user-visible assembler symbols. */ #undef USER_LABEL_PREFIX #define USER_LABEL_PREFIX "" --- 57,68 ---- #define REGISTER_PREFIX "%" /* The prefix for local (compiler generated) labels. ! These labels will not appear in the symbol table. */ #undef LOCAL_LABEL_PREFIX #define LOCAL_LABEL_PREFIX "." ! /* The prefix to add to user-visible assembler symbols. */ #undef USER_LABEL_PREFIX #define USER_LABEL_PREFIX "" *************** Boston, MA 02111-1307, USA. */ *** 102,166 **** #endif /* defined SUPPORT_SUN_FPA */ - /* This is how to output an assembler line defining an `int' constant. */ - /* The SGS assembler doesn't understand ".word". */ - - #undef ASM_OUTPUT_SHORT - #define ASM_OUTPUT_SHORT(FILE,VALUE) \ - ( fprintf ((FILE), "%s", WORD_ASM_OP), \ - output_addr_const ((FILE), (VALUE)), \ - fprintf ((FILE), "\n")) - - #undef ASM_OUTPUT_LONG_DOUBLE - #define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \ - do { long l[3]; \ - REAL_VALUE_TO_TARGET_LONG_DOUBLE (VALUE, l); \ - fprintf ((FILE), "%s0x%x,0x%x,0x%x\n", LONG_ASM_OP, \ - l[0], l[1], l[2]); \ - } while (0) - - /* This is how to output an assembler line defining a `double' constant. */ - - #undef ASM_OUTPUT_DOUBLE - #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - do { long l[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE (VALUE, l); \ - fprintf ((FILE), "%s0x%x,0x%x\n", LONG_ASM_OP, \ - l[0], l[1]); \ - } while (0) - - /* This is how to output an assembler line defining a `float' constant. */ - - #undef ASM_OUTPUT_FLOAT - #define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - do { long l; \ - REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ - fprintf ((FILE), "%s0x%x\n", LONG_ASM_OP, l); \ - } while (0) - /* This is how to output an assembler line that says to advance the location counter to a multiple of 2**LOG bytes. */ #undef ASM_OUTPUT_ALIGN #define ASM_OUTPUT_ALIGN(FILE,LOG) \ if ((LOG) > 0) \ fprintf ((FILE), "%s%u\n", ALIGN_ASM_OP, 1 << (LOG)); \ else if ((LOG) > 31) \ ! abort (); /* The routine used to output null terminated string literals. We cannot use the ".string" pseudo op, because it silently truncates strings to 1023 bytes. There is no "partial string op" which works like ".string" but doesn't append a null byte, so we can't chop the input string up into small pieces and use that. Our only remaining alternative is to ! output the string one byte at a time. */ #define ASM_OUTPUT_ASCII(FILE,PTR,LEN) \ do { \ ! register int sp = 0, lp = 0, ch; \ ! fprintf ((FILE), "%s", BYTE_ASM_OP); \ do { \ ! ch = (PTR)[sp]; \ if (ch > ' ' && ! (ch & 0x80) && ch != '\\') \ { \ fprintf ((FILE), "'%c", ch); \ --- 99,129 ---- #endif /* defined SUPPORT_SUN_FPA */ /* This is how to output an assembler line that says to advance the location counter to a multiple of 2**LOG bytes. */ #undef ASM_OUTPUT_ALIGN #define ASM_OUTPUT_ALIGN(FILE,LOG) \ + do { \ if ((LOG) > 0) \ fprintf ((FILE), "%s%u\n", ALIGN_ASM_OP, 1 << (LOG)); \ else if ((LOG) > 31) \ ! abort (); \ ! } while (0) /* The routine used to output null terminated string literals. We cannot use the ".string" pseudo op, because it silently truncates strings to 1023 bytes. There is no "partial string op" which works like ".string" but doesn't append a null byte, so we can't chop the input string up into small pieces and use that. Our only remaining alternative is to ! output the string one byte at a time. */ #define ASM_OUTPUT_ASCII(FILE,PTR,LEN) \ do { \ ! register size_t sp = 0, limit = (LEN); \ ! fputs (integer_asm_op (1, TRUE), (FILE)); \ do { \ ! int ch = (PTR)[sp]; \ if (ch > ' ' && ! (ch & 0x80) && ch != '\\') \ { \ fprintf ((FILE), "'%c", ch); \ *************** do { \ *** 169,192 **** { \ fprintf ((FILE), "0x%x", ch); \ } \ ! if (++sp < (LEN)) \ { \ if ((sp % 10) == 0) \ { \ ! fprintf ((FILE), "\n%s", BYTE_ASM_OP); \ } \ else \ { \ putc (',', (FILE)); \ } \ } \ ! } while (sp < (LEN)); \ putc ('\n', (FILE)); \ } while (0) /* SGS based assemblers don't understand #NO_APP and #APP, so just don't ! bother emitting them. */ #undef ASM_APP_ON #define ASM_APP_ON "" --- 132,155 ---- { \ fprintf ((FILE), "0x%x", ch); \ } \ ! if (++sp < limit) \ { \ if ((sp % 10) == 0) \ { \ ! fprintf ((FILE), "\n%s", integer_asm_op (1, TRUE)); \ } \ else \ { \ putc (',', (FILE)); \ } \ } \ ! } while (sp < limit); \ putc ('\n', (FILE)); \ } while (0) /* SGS based assemblers don't understand #NO_APP and #APP, so just don't ! bother emitting them. */ #undef ASM_APP_ON #define ASM_APP_ON "" *************** do { \ *** 213,231 **** #define ASM_OUTPUT_FLOAT_OPERAND(CODE,FILE,VALUE) \ do { long l; \ REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ ! asm_fprintf ((FILE), "%I0x%x", l); \ } while (0) #undef ASM_OUTPUT_DOUBLE_OPERAND #define ASM_OUTPUT_DOUBLE_OPERAND(FILE,VALUE) \ do { long l[2]; \ REAL_VALUE_TO_TARGET_DOUBLE (VALUE, l); \ ! asm_fprintf ((FILE), "%I0x%x%08x", l[0], l[1]); \ } while (0) /* How to output a block of SIZE zero bytes. Note that the `space' pseudo, when used in the text segment, causes SGS assemblers to output nop insns ! rather than 0s, so we set ASM_NO_SKIP_IN_TEXT to prevent this. */ #define ASM_NO_SKIP_IN_TEXT 1 --- 176,194 ---- #define ASM_OUTPUT_FLOAT_OPERAND(CODE,FILE,VALUE) \ do { long l; \ REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ ! asm_fprintf ((FILE), "%I0x%lx", l); \ } while (0) #undef ASM_OUTPUT_DOUBLE_OPERAND #define ASM_OUTPUT_DOUBLE_OPERAND(FILE,VALUE) \ do { long l[2]; \ REAL_VALUE_TO_TARGET_DOUBLE (VALUE, l); \ ! asm_fprintf ((FILE), "%I0x%lx%08lx", l[0], l[1]);\ } while (0) /* How to output a block of SIZE zero bytes. Note that the `space' pseudo, when used in the text segment, causes SGS assemblers to output nop insns ! rather than 0s, so we set ASM_NO_SKIP_IN_TEXT to prevent this. */ #define ASM_NO_SKIP_IN_TEXT 1 *************** do { \ *** 389,395 **** /* This macro outputs the label at the start of a switch table. The ".swbeg " is an assembler directive that causes the switch table size to be inserted into the object code so that disassemblers, for ! example, can identify that it is the start of a switch table. */ #define ASM_OUTPUT_BEFORE_CASE_LABEL(FILE,PREFIX,NUM,TABLE) \ fprintf ((FILE), "%s&%d\n", SWBEG_ASM_OP, XVECLEN (PATTERN (TABLE), 1)); --- 352,358 ---- /* This macro outputs the label at the start of a switch table. The ".swbeg " is an assembler directive that causes the switch table size to be inserted into the object code so that disassemblers, for ! example, can identify that it is the start of a switch table. */ #define ASM_OUTPUT_BEFORE_CASE_LABEL(FILE,PREFIX,NUM,TABLE) \ fprintf ((FILE), "%s&%d\n", SWBEG_ASM_OP, XVECLEN (PATTERN (TABLE), 1)); *************** do { \ *** 406,412 **** we want. This difference can be accommodated by making the assembler define such "LDnnn" to be either "Lnnn-LInnn-2.b", "Lnnn", or any other string, as necessary. This is accomplished via the ASM_OUTPUT_CASE_END ! macro. */ #undef ASM_OUTPUT_CASE_END #define ASM_OUTPUT_CASE_END(FILE,NUM,TABLE) \ --- 369,375 ---- we want. This difference can be accommodated by making the assembler define such "LDnnn" to be either "Lnnn-LInnn-2.b", "Lnnn", or any other string, as necessary. This is accomplished via the ASM_OUTPUT_CASE_END ! macro. */ #undef ASM_OUTPUT_CASE_END #define ASM_OUTPUT_CASE_END(FILE,NUM,TABLE) \ *************** extern int switch_table_difference_label *** 421,430 **** #undef ASM_OUTPUT_ADDR_DIFF_ELT #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ ! asm_fprintf (FILE, "%s%LL%d-%LL%d\n", WORD_ASM_OP, VALUE, REL) /* Currently, JUMP_TABLES_IN_TEXT_SECTION must be defined in order to ! keep switch tables in the text section. */ #define JUMP_TABLES_IN_TEXT_SECTION 1 --- 384,393 ---- #undef ASM_OUTPUT_ADDR_DIFF_ELT #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ ! asm_fprintf (FILE, "%s%LL%d-%LL%d\n", integer_asm_op (2, TRUE), VALUE, REL) /* Currently, JUMP_TABLES_IN_TEXT_SECTION must be defined in order to ! keep switch tables in the text section. */ #define JUMP_TABLES_IN_TEXT_SECTION 1 diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/sun2o4.h gcc-3.1/gcc/config/m68k/sun2o4.h *** gcc-3.0.4/gcc/config/m68k/sun2o4.h Wed Dec 16 21:07:19 1998 --- gcc-3.1/gcc/config/m68k/sun2o4.h Thu Dec 20 17:36:36 2001 *************** Boston, MA 02111-1307, USA. */ *** 96,143 **** #define LINK_SPEC \ "%{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp %{static:-Bstatic}" - #undef ASM_OUTPUT_DOUBLE - #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - do { if (REAL_VALUE_ISINF (VALUE)) \ - { \ - if (REAL_VALUE_NEGATIVE (VALUE)) \ - fprintf (FILE, "\t.double 0r-99e999\n"); \ - else \ - fprintf (FILE, "\t.double 0r99e999\n"); \ - } \ - else if (REAL_VALUE_MINUS_ZERO (VALUE)) \ - { \ - fprintf (FILE, "\t.long 0x80000000,0\n"); \ - } \ - else \ - { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \ - fprintf (FILE, "\t.double 0r%s\n", dstr); \ - } \ - } while (0) - - /* This is how to output an assembler line defining a `float' constant. */ - - #undef ASM_OUTPUT_FLOAT - #define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - do { if (REAL_VALUE_ISINF (VALUE)) \ - { \ - if (REAL_VALUE_NEGATIVE (VALUE)) \ - fprintf (FILE, "\t.single 0r-99e999\n"); \ - else \ - fprintf (FILE, "\t.single 0r99e999\n"); \ - } \ - else if (REAL_VALUE_MINUS_ZERO (VALUE)) \ - { \ - fprintf (FILE, "\t.long 0x80000000\n"); \ - } \ - else \ - { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \ - fprintf (FILE, "\t.single 0r%s\n", dstr); \ - } \ - } while (0) - #undef ASM_OUTPUT_FLOAT_OPERAND #define ASM_OUTPUT_FLOAT_OPERAND(CODE,FILE,VALUE) \ do { \ --- 96,101 ---- *************** Boston, MA 02111-1307, USA. */ *** 146,152 **** long l; \ REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ if (sizeof (int) == sizeof (long)) \ ! asm_fprintf ((FILE), "%I0x%x", l); \ else \ asm_fprintf ((FILE), "%I0x%lx", l); \ } \ --- 104,110 ---- long l; \ REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ if (sizeof (int) == sizeof (long)) \ ! asm_fprintf ((FILE), "%I0x%x", (int) l); \ else \ asm_fprintf ((FILE), "%I0x%lx", l); \ } \ diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/sun3.h gcc-3.1/gcc/config/m68k/sun3.h *** gcc-3.0.4/gcc/config/m68k/sun3.h Thu Dec 7 01:58:24 2000 --- gcc-3.1/gcc/config/m68k/sun3.h Thu Dec 20 17:36:36 2001 *************** Boston, MA 02111-1307, USA. */ *** 183,236 **** #define FUNCTION_VALUE(VALTYPE,FUNC) FUNCTION_VALUEX (TYPE_MODE (VALTYPE)) #endif /* 0 */ - /* This is how to output an assembler line defining a `double' constant. */ - - #undef ASM_OUTPUT_DOUBLE - #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - { \ - if (REAL_VALUE_ISINF (VALUE)) \ - { \ - if (REAL_VALUE_NEGATIVE (VALUE)) \ - fprintf (FILE, "\t.double 0r-99e999\n"); \ - else \ - fprintf (FILE, "\t.double 0r99e999\n"); \ - } \ - else if (REAL_VALUE_ISNAN (VALUE)) \ - { long l[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), l); \ - fprintf (FILE, "\t.long 0x%lx\n\t.long 0x%lx\n", l[0], l[1]); \ - } \ - else \ - { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.17g", dstr); \ - fprintf (FILE, "\t.double 0r%s\n", dstr); \ - } \ - } - - /* This is how to output an assembler line defining a `float' constant. */ - - #undef ASM_OUTPUT_FLOAT - #define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - { \ - if (REAL_VALUE_ISINF (VALUE)) \ - { \ - if (REAL_VALUE_NEGATIVE (VALUE)) \ - fprintf (FILE, "\t.single 0r-99e999\n"); \ - else \ - fprintf (FILE, "\t.single 0r99e999\n"); \ - } \ - else if (REAL_VALUE_ISNAN (VALUE)) \ - { long l; \ - REAL_VALUE_TO_TARGET_SINGLE ((VALUE), l); \ - fprintf (FILE, "\t.long 0x%lx\n", l); \ - } \ - else \ - { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.9g", dstr); \ - fprintf (FILE, "\t.single 0r%s\n", dstr); \ - } \ - } - /* This is how to output an assembler lines defining floating operands. There's no way to output a NaN's fraction, so we lose it. */ --- 183,188 ---- *************** Boston, MA 02111-1307, USA. */ *** 242,248 **** long l; \ REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ if (sizeof (int) == sizeof (long)) \ ! asm_fprintf ((FILE), "%I0x%x", l); \ else \ asm_fprintf ((FILE), "%I0x%lx", l); \ } \ --- 194,200 ---- long l; \ REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ if (sizeof (int) == sizeof (long)) \ ! asm_fprintf ((FILE), "%I0x%x", (int) l); \ else \ asm_fprintf ((FILE), "%I0x%lx", l); \ } \ *************** Boston, MA 02111-1307, USA. */ *** 287,293 **** #if 0 /* This was turned off as it caused linking errors on sunos4.1. `gcc -a' links in /usr/lib/bb_link.o which does not provide __bb_link ! but its own version of __bb_init_func. */ #undef BLOCK_PROFILER_CODE #define BLOCK_PROFILER_CODE \ extern int ___tcov_init; \ --- 239,245 ---- #if 0 /* This was turned off as it caused linking errors on sunos4.1. `gcc -a' links in /usr/lib/bb_link.o which does not provide __bb_link ! but its own version of __bb_init_func. */ #undef BLOCK_PROFILER_CODE #define BLOCK_PROFILER_CODE \ extern int ___tcov_init; \ diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/t-aux gcc-3.1/gcc/config/m68k/t-aux *** gcc-3.0.4/gcc/config/m68k/t-aux Wed Dec 16 21:07:25 1998 --- gcc-3.1/gcc/config/m68k/t-aux Tue May 1 17:45:05 2001 *************** LIB2FUNCS_EXTRA=aux-mcount.c aux-exit.c *** 4,12 **** FIXPROTO_DEFINES=-D_POSIX_SOURCE - # Only really needed for collect2 - CLIB=-lld - # Needed to support builds for multiple versions of A/UX # LDFLAGS=-static --- 4,9 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/t-hp320 gcc-3.1/gcc/config/m68k/t-hp320 *** gcc-3.0.4/gcc/config/m68k/t-hp320 Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/m68k/t-hp320 Thu Nov 15 13:05:54 2001 *************** *** 0 **** --- 1,2 ---- + # So putenv and other functions get seen by fixproto. + FIXPROTO_DEFINES = -D_HPUX_SOURCE diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/t-lynx gcc-3.1/gcc/config/m68k/t-lynx *** gcc-3.0.4/gcc/config/m68k/t-lynx Wed Dec 16 21:07:28 1998 --- gcc-3.1/gcc/config/m68k/t-lynx Thu May 17 03:16:01 2001 *************** *** 1,4 **** - CROSS_LIBGCC1 = libgcc1-asm.a LIB1ASMSRC = m68k/lb1sf68.asm LIB1ASMFUNCS = _mulsi3 _udivsi3 _divsi3 _umodsi3 _modsi3 \ _double _float _floatex \ --- 1,3 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/t-m68kbare gcc-3.1/gcc/config/m68k/t-m68kbare *** gcc-3.0.4/gcc/config/m68k/t-m68kbare Fri Feb 15 14:43:01 2002 --- gcc-3.1/gcc/config/m68k/t-m68kbare Wed Feb 13 22:48:57 2002 *************** *** 1,12 **** - CROSS_LIBGCC1 = libgcc1-asm.a LIB1ASMSRC = m68k/lb1sf68.asm LIB1ASMFUNCS = _mulsi3 _udivsi3 _divsi3 _umodsi3 _modsi3 \ _double _float _floatex \ _eqdf2 _nedf2 _gtdf2 _gedf2 _ltdf2 _ledf2 \ _eqsf2 _nesf2 _gtsf2 _gesf2 _ltsf2 _lesf2 - # These are really part of libgcc1, but this will cause them to be - # built correctly, so... LIB2FUNCS_EXTRA = fpgnulib.c xfgnulib.c fpgnulib.c: $(srcdir)/config/m68k/fpgnulib.c --- 1,9 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/t-m68kelf gcc-3.1/gcc/config/m68k/t-m68kelf *** gcc-3.0.4/gcc/config/m68k/t-m68kelf Wed Dec 16 21:07:30 1998 --- gcc-3.1/gcc/config/m68k/t-m68kelf Thu Jan 24 01:21:48 2002 *************** *** 1,12 **** - CROSS_LIBGCC1 = libgcc1-asm.a LIB1ASMSRC = m68k/lb1sf68.asm LIB1ASMFUNCS = _mulsi3 _udivsi3 _divsi3 _umodsi3 _modsi3 \ _double _float _floatex \ _eqdf2 _nedf2 _gtdf2 _gedf2 _ltdf2 _ledf2 \ _eqsf2 _nesf2 _gtsf2 _gesf2 _ltsf2 _lesf2 - # These are really part of libgcc1, but this will cause them to be - # built correctly, so... LIB2FUNCS_EXTRA = fpgnulib.c xfgnulib.c fpgnulib.c: $(srcdir)/config/m68k/fpgnulib.c --- 1,9 ---- *************** xfgnulib.c: $(srcdir)/config/m68k/fpgnul *** 15,24 **** echo '#define EXTFLOAT' > xfgnulib.c cat $(srcdir)/config/m68k/fpgnulib.c >> xfgnulib.c ! MULTILIB_OPTIONS = m68000/m68020/m5200/mcpu32 m68881/msoft-float MULTILIB_DIRNAMES = ! MULTILIB_MATCHES = m68000=mc68000 m68000=m68302 mcpu32=m68332 m68020=mc68020 m68020=m68040 m68020=m68060 ! MULTILIB_EXCEPTIONS = m68000/msoft-float m5200/m68881 m5200/msoft-float mcpu32/m68881 mcpu32/msoft-float LIBGCC = stmp-multilib INSTALL_LIBGCC = install-multilib --- 12,21 ---- echo '#define EXTFLOAT' > xfgnulib.c cat $(srcdir)/config/m68k/fpgnulib.c >> xfgnulib.c ! MULTILIB_OPTIONS = m68000/m68020/m5200/mcpu32/m68040/m68060 m68881/msoft-float MULTILIB_DIRNAMES = ! MULTILIB_MATCHES = m68000=mc68000 m68000=m68302 mcpu32=m68332 m68020=mc68020 ! MULTILIB_EXCEPTIONS = m68000/msoft-float m5200/m68881 m5200/msoft-float mcpu32/m68881 mcpu32/msoft-float m68040/m68881 m68040/msoft-float m68060/m68881 m68060/msoft-float LIBGCC = stmp-multilib INSTALL_LIBGCC = install-multilib diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/t-mot3300-gald gcc-3.1/gcc/config/m68k/t-mot3300-gald *** gcc-3.0.4/gcc/config/m68k/t-mot3300-gald Tue Dec 28 09:15:24 1999 --- gcc-3.1/gcc/config/m68k/t-mot3300-gald Thu May 17 03:16:01 2001 *************** *** 1,15 **** T_CPPFLAGS = -DUSE_GAS -DUSE_GLD TARGET_LIBGCC2_CFLAGS = -DUSE_GAS - CROSS_LIBGCC1 = libgcc1-asm.a LIB1ASMSRC = m68k/lb1sf68.asm LIB1ASMFUNCS = _mulsi3 _udivsi3 _divsi3 _umodsi3 _modsi3 \ _double _float _floatex \ _eqdf2 _nedf2 _gtdf2 _gedf2 _ltdf2 _ledf2 \ _eqsf2 _nesf2 _gtsf2 _gesf2 _ltsf2 _lesf2 - # These are really part of libgcc1, but this will cause them to be - # built correctly, so... LIB2FUNCS_EXTRA = fpgnulib.c xfgnulib.c fpgnulib.c: $(srcdir)/config/m68k/fpgnulib.c --- 1,12 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/t-mot3300-gas gcc-3.1/gcc/config/m68k/t-mot3300-gas *** gcc-3.0.4/gcc/config/m68k/t-mot3300-gas Tue Dec 28 09:15:24 1999 --- gcc-3.1/gcc/config/m68k/t-mot3300-gas Thu May 17 03:16:01 2001 *************** *** 1,15 **** T_CPPFLAGS = -DUSE_GAS TARGET_LIBGCC2_CFLAGS = -DUSE_GAS - CROSS_LIBGCC1 = libgcc1-asm.a LIB1ASMSRC = m68k/lb1sf68.asm LIB1ASMFUNCS = _mulsi3 _udivsi3 _divsi3 _umodsi3 _modsi3 \ _double _float _floatex \ _eqdf2 _nedf2 _gtdf2 _gedf2 _ltdf2 _ledf2 \ _eqsf2 _nesf2 _gtsf2 _gesf2 _ltsf2 _lesf2 - # These are really part of libgcc1, but this will cause them to be - # built correctly, so... LIB2FUNCS_EXTRA = fpgnulib.c xfgnulib.c fpgnulib.c: $(srcdir)/config/m68k/fpgnulib.c --- 1,12 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/t-next gcc-3.1/gcc/config/m68k/t-next *** gcc-3.0.4/gcc/config/m68k/t-next Wed Dec 16 21:07:35 1998 --- gcc-3.1/gcc/config/m68k/t-next Thu Jan 10 22:03:05 2002 *************** *** 1,6 **** ! # libgcc1.c is not needed, since the standard library has these functions. ! LIBGCC1= ! CROSS_LIBGCC1= nextstep.o: $(srcdir)/config/nextstep.c $(CONFIG_H) flags.h tree.h $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< --- 1,8 ---- ! # Specify other dirs of system header files to be fixed. ! OTHER_FIXINCLUDES_DIRS= /LocalDeveloper/Headers ! ! # is sometimes in /usr/include/ansi/limits.h. ! LIMITS_H_TEST = [ -f $(SYSTEM_HEADER_DIR)/limits.h -o -f $(SYSTEM_HEADER_DIR)/ansi/limits.h ] nextstep.o: $(srcdir)/config/nextstep.c $(CONFIG_H) flags.h tree.h $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/t-vxworks68 gcc-3.1/gcc/config/m68k/t-vxworks68 *** gcc-3.0.4/gcc/config/m68k/t-vxworks68 Wed Dec 16 21:07:37 1998 --- gcc-3.1/gcc/config/m68k/t-vxworks68 Thu May 17 03:16:01 2001 *************** *** 1,4 **** - CROSS_LIBGCC1 = libgcc1-asm.a LIB1ASMSRC = m68k/lb1sf68.asm LIB1ASMFUNCS = _mulsi3 _udivsi3 _divsi3 _umodsi3 _modsi3 \ _double _float _floatex \ --- 1,3 ---- *************** LIB1ASMFUNCS = _mulsi3 _udivsi3 _divsi3 *** 9,16 **** # does not have _exit. TARGET_LIBGCC2_CFLAGS = -Dexit=unused_exit - # These are really part of libgcc1, but this will cause them to be - # built correctly, so... LIB2FUNCS_EXTRA = fpgnulib.c xfgnulib.c fpgnulib.c: $(srcdir)/config/m68k/fpgnulib.c --- 8,13 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/tower-as.h gcc-3.1/gcc/config/m68k/tower-as.h *** gcc-3.0.4/gcc/config/m68k/tower-as.h Mon Apr 16 18:25:49 2001 --- gcc-3.1/gcc/config/m68k/tower-as.h Thu Dec 20 17:36:36 2001 *************** Boston, MA 02111-1307, USA. */ *** 63,68 **** --- 63,71 ---- #define SGS_CMP_ORDER /* Takes cmp operands in reverse order */ #define SGS_NO_LI /* Suppress jump table label usage */ + #undef INT_OP_GROUP + #define INT_OP_GROUP INT_OP_NO_DOT + /* Turn on SDB debugging info. */ #define SDB_DEBUGGING_INFO *************** Boston, MA 02111-1307, USA. */ *** 82,96 **** #define ASM_OUTPUT_SOURCE_LINE(FILE, LINENO) \ fprintf (FILE, "\tln\t%d\n", \ ! (sdb_begin_function_line \ ! ? last_linenum - sdb_begin_function_line : 1)) #undef ASM_OUTPUT_IDENT #define ASM_OUTPUT_IDENT(FILE, NAME) \ fprintf (FILE, "\tident\t\"%s\" \n", NAME) #define ASM_OUTPUT_ASCII(FILE,PTR,LEN) \ ! do { register int sp = 0, lp = 0; \ fprintf ((FILE), "\tbyte\t"); \ loop: \ if ((PTR)[sp] > ' ' && ! ((PTR)[sp] & 0x80) && (PTR)[sp] != '\\') \ --- 85,99 ---- #define ASM_OUTPUT_SOURCE_LINE(FILE, LINENO) \ fprintf (FILE, "\tln\t%d\n", \ ! (sdb_begin_function_line > -1 \ ! ? (LINENO) - sdb_begin_function_line : 1)) #undef ASM_OUTPUT_IDENT #define ASM_OUTPUT_IDENT(FILE, NAME) \ fprintf (FILE, "\tident\t\"%s\" \n", NAME) #define ASM_OUTPUT_ASCII(FILE,PTR,LEN) \ ! do { register size_t sp = 0, lp = 0, limit = (LEN); \ fprintf ((FILE), "\tbyte\t"); \ loop: \ if ((PTR)[sp] > ' ' && ! ((PTR)[sp] & 0x80) && (PTR)[sp] != '\\') \ *************** Boston, MA 02111-1307, USA. */ *** 99,105 **** else \ { lp += 5; \ fprintf ((FILE), "0x%x", (PTR)[sp]); } \ ! if (++sp < (LEN)) \ { if (lp > 60) \ { lp = 0; \ fprintf ((FILE), "\n\tbyte\t"); } \ --- 102,108 ---- else \ { lp += 5; \ fprintf ((FILE), "0x%x", (PTR)[sp]); } \ ! if (++sp < limit) \ { if (lp > 60) \ { lp = 0; \ fprintf ((FILE), "\n\tbyte\t"); } \ *************** Boston, MA 02111-1307, USA. */ *** 244,250 **** #undef ASM_GENERATE_INTERNAL_LABEL #define ASM_GENERATE_INTERNAL_LABEL(LABEL, PREFIX, NUM) \ ! sprintf ((LABEL), "%s%%%d", (PREFIX), (NUM)) #undef ASM_OUTPUT_INTERNAL_LABEL #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \ --- 247,253 ---- #undef ASM_GENERATE_INTERNAL_LABEL #define ASM_GENERATE_INTERNAL_LABEL(LABEL, PREFIX, NUM) \ ! sprintf ((LABEL), "%s%%%ld", (PREFIX), (long)(NUM)) #undef ASM_OUTPUT_INTERNAL_LABEL #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \ *************** Boston, MA 02111-1307, USA. */ *** 255,309 **** fprintf (FILE, "\tswbeg &%d\n%s%%%d:\n", \ XVECLEN (PATTERN (TABLE), 1), (PREFIX), (NUM)); \ - #undef ASM_OUTPUT_DOUBLE - #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - do { long l[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE (VALUE, l); \ - fprintf (FILE, "\tlong 0x%x,0x%x\n", l[0], l[1]); \ - } while (0) - - #undef ASM_OUTPUT_LONG_DOUBLE - #define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \ - do { long l[3]; \ - REAL_VALUE_TO_TARGET_LONG_DOUBLE (VALUE, l); \ - fprintf (FILE, "\tlong 0x%x,0x%x,0x%x\n", l[0], l[1], l[2]); \ - } while (0) - - #undef ASM_OUTPUT_FLOAT - #define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - do { long l; \ - REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ - fprintf ((FILE), "\tlong 0x%x\n", l); \ - } while (0) - - /* This is how to output an assembler line defining an `int' constant. */ - - #undef ASM_OUTPUT_INT - #define ASM_OUTPUT_INT(FILE,VALUE) \ - ( fprintf (FILE, "\tlong "), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "\n")) - - /* Likewise for `char' and `short' constants. */ - - #undef ASM_OUTPUT_SHORT - #define ASM_OUTPUT_SHORT(FILE,VALUE) \ - ( fprintf (FILE, "\tshort "), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "\n")) - - #undef ASM_OUTPUT_CHAR - #define ASM_OUTPUT_CHAR(FILE,VALUE) \ - ( fprintf (FILE, "\tbyte "), \ - output_addr_const (FILE, (VALUE)), \ - fprintf (FILE, "\n")) - - /* This is how to output an assembler line for a numeric constant byte. */ - - #undef ASM_OUTPUT_BYTE - #define ASM_OUTPUT_BYTE(FILE,VALUE) \ - fprintf (FILE, "\tbyte 0x%x\n", (VALUE)) - #undef ASM_OUTPUT_ADDR_VEC_ELT #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ fprintf (FILE, "\tlong L%%%d\n", (VALUE)) --- 258,263 ---- *************** do { long l; \ *** 314,323 **** #undef ASM_OUTPUT_ALIGN #define ASM_OUTPUT_ALIGN(FILE,LOG) \ if ((LOG) == 1) \ fprintf (FILE, "\teven\n"); \ else if ((LOG) != 0) \ ! abort (); #undef ASM_OUTPUT_SKIP #define ASM_OUTPUT_SKIP(FILE,SIZE) \ --- 268,279 ---- #undef ASM_OUTPUT_ALIGN #define ASM_OUTPUT_ALIGN(FILE,LOG) \ + do { \ if ((LOG) == 1) \ fprintf (FILE, "\teven\n"); \ else if ((LOG) != 0) \ ! abort (); \ ! } while (0) #undef ASM_OUTPUT_SKIP #define ASM_OUTPUT_SKIP(FILE,SIZE) \ *************** do { long l; \ *** 364,370 **** { REAL_VALUE_TYPE r; long l; \ REAL_VALUE_FROM_CONST_DOUBLE (r, X); \ REAL_VALUE_TO_TARGET_SINGLE (r, l); \ ! fprintf (FILE, "&0x%x", l); } \ else if (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) == DFmode) \ { REAL_VALUE_TYPE r; int i[2]; \ REAL_VALUE_FROM_CONST_DOUBLE (r, X); \ --- 320,326 ---- { REAL_VALUE_TYPE r; long l; \ REAL_VALUE_FROM_CONST_DOUBLE (r, X); \ REAL_VALUE_TO_TARGET_SINGLE (r, l); \ ! fprintf (FILE, "&0x%lx", l); } \ else if (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) == DFmode) \ { REAL_VALUE_TYPE r; int i[2]; \ REAL_VALUE_FROM_CONST_DOUBLE (r, X); \ *************** do { fprintf (asm_out_file, "\ttag\t"); *** 581,592 **** The __CTORS_LIST__ goes in the .init section. Define CTOR_LIST_BEGIN and CTOR_LIST_END to contribute to the .init section an instruction to ! push a word containing 0 (or some equivalent of that). ! ! ASM_OUTPUT_CONSTRUCTOR should be defined ! to push the address of the constructor. */ - #define ASM_LONG "\tlong" #undef INIT_SECTION_ASM_OP #define INIT_SECTION_ASM_OP "\tsection\t~init" #undef FINI_SECTION_ASM_OP --- 537,544 ---- The __CTORS_LIST__ goes in the .init section. Define CTOR_LIST_BEGIN and CTOR_LIST_END to contribute to the .init section an instruction to ! push a word containing 0 (or some equivalent of that). */ #undef INIT_SECTION_ASM_OP #define INIT_SECTION_ASM_OP "\tsection\t~init" #undef FINI_SECTION_ASM_OP *************** do { fprintf (asm_out_file, "\ttag\t"); *** 601,610 **** #define BSS_SECTION_ASM_OP "\tsection\t~bss" ! #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ ! do { \ ! init_section (); \ ! fprintf (FILE, "\tmov.l &"); \ ! assemble_name (FILE, NAME); \ ! fprintf (FILE, ",-(%%sp)\n"); \ ! } while (0) --- 553,556 ---- #define BSS_SECTION_ASM_OP "\tsection\t~bss" ! #define TARGET_ASM_CONSTRUCTOR m68k_svr3_asm_out_constructor diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/tower.h gcc-3.1/gcc/config/m68k/tower.h *** gcc-3.0.4/gcc/config/m68k/tower.h Thu Nov 2 23:29:11 2000 --- gcc-3.1/gcc/config/m68k/tower.h Mon Nov 19 18:30:03 2001 *************** Boston, MA 02111-1307, USA. */ *** 88,94 **** #define REGISTER_NAMES \ {"%d0", "%d1", "%d2", "%d3", "%d4", "%d5", "%d6", "%d7", \ "%a0", "%a1", "%a2", "%a3", "%a4", "%a5", "%a6", "%sp", \ ! "%fp0", "%fp1", "%fp2", "%fp3", "%fp4", "%fp5", "%fp6", "%fp7"}; #undef REGISTER_PREFIX #define REGISTER_PREFIX "%" --- 88,94 ---- #define REGISTER_NAMES \ {"%d0", "%d1", "%d2", "%d3", "%d4", "%d5", "%d6", "%d7", \ "%a0", "%a1", "%a2", "%a3", "%a4", "%a5", "%a6", "%sp", \ ! "%fp0", "%fp1", "%fp2", "%fp3", "%fp4", "%fp5", "%fp6", "%fp7"} #undef REGISTER_PREFIX #define REGISTER_PREFIX "%" *************** Boston, MA 02111-1307, USA. */ *** 96,102 **** #undef IMMEDIATE_PREFIX #define IMMEDIATE_PREFIX "&" ! /* The prefix to add to user-visible assembler symbols. */ /* We do not want leading underscores. */ --- 96,102 ---- #undef IMMEDIATE_PREFIX #define IMMEDIATE_PREFIX "&" ! /* The prefix to add to user-visible assembler symbols. */ /* We do not want leading underscores. */ diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/vxm68k.h gcc-3.1/gcc/config/m68k/vxm68k.h *** gcc-3.0.4/gcc/config/m68k/vxm68k.h Thu Nov 2 23:29:11 2000 --- gcc-3.1/gcc/config/m68k/vxm68k.h Thu Nov 1 14:49:33 2001 *************** Unrecognized value in TARGET_CPU_DEFAULT *** 82,88 **** #define LIB_SPEC "" ! /* Provide required defaults for linker. */ #define LINK_SPEC "-r" --- 82,88 ---- #define LIB_SPEC "" ! /* Provide required defaults for linker. */ #define LINK_SPEC "-r" diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/x-alloca-c gcc-3.1/gcc/config/m68k/x-alloca-c *** gcc-3.0.4/gcc/config/m68k/x-alloca-c Wed Dec 16 21:07:41 1998 --- gcc-3.1/gcc/config/m68k/x-alloca-c Thu Jan 1 00:00:00 1970 *************** *** 1 **** - ALLOCA=alloca.o --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/x-amix gcc-3.1/gcc/config/m68k/x-amix *** gcc-3.0.4/gcc/config/m68k/x-amix Wed Dec 16 21:07:42 1998 --- gcc-3.1/gcc/config/m68k/x-amix Thu Jan 1 00:00:00 1970 *************** *** 1,27 **** - # Makefile configuration for Commodore Amiga running SVR4. - # (configure amiga-amix) - - # The Amiga ships with gcc installed, so use it as the default CC. - - CC = /usr/public/bin/gcc - - # The AT&T compiler is still available in /usr/ccs/bin/cc and should - # be used to compile the things that should not be compiled with gcc. - - OLDCC = /usr/ccs/bin/cc - - # Link the executables with -ansi to get ANSI floating point ranges. - # Otherwise the values returned on overflow or underflow will be wrong. - # NOTE: some early releases of Amiga Unix contained a bug in ptod.o - # that prevents the correct values being returned from strtod/atof, even - # when linked with -ansi. Sometimes -static will fix this since at least - # one version had a fixed copy in the static libc.a. - - LDFLAGS = -ansi - - # The manual pages go in /usr/man/1l (section 1, local) without any filename - # extension. The man command will automatically create the /usr/catman/1l - # entry. - - mandir = /usr/man/1l - manext = --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/x-apollo68 gcc-3.1/gcc/config/m68k/x-apollo68 *** gcc-3.0.4/gcc/config/m68k/x-apollo68 Tue Apr 18 19:40:21 2000 --- gcc-3.1/gcc/config/m68k/x-apollo68 Thu Jan 1 00:00:00 1970 *************** *** 1,12 **** - # x-apollo68 -- 680x0 based Apollos as host system - - # vasta@apollo.com says this is how to compile on an Apollo (SR10.x). - # Use a Berkeley environment. - CC=cc -g -A nansi -A cpu,3000 -A runtype,bsd4.3 -A systype,any - OLDCC=cc -g -A nansi -A cpu,3000 -A runtype,bsd4.3 -A systype,any - - # This used to redefine CFLAGS and LIBGCC2_CFLAGS to eliminate the unsupported - # -g flag from both macros. This gives an undebuggable stage1 compiler which - # is bad, and it also does the wrong thing if we are cross compiling to a - # target which does support debugging. There is currently no way to avoid - # the -g option that doesn't break something else. --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/x-ccur gcc-3.1/gcc/config/m68k/x-ccur *** gcc-3.0.4/gcc/config/m68k/x-ccur Tue Apr 18 19:40:21 2000 --- gcc-3.1/gcc/config/m68k/x-ccur Thu Jan 1 00:00:00 1970 *************** *** 1,3 **** - # Specify the jobs library when building in the ATT universe. - CLIB = -ljobs - X_CFLAGS = -O0 -Dregister= --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/x-crds gcc-3.1/gcc/config/m68k/x-crds *** gcc-3.0.4/gcc/config/m68k/x-crds Wed Dec 16 21:07:45 1998 --- gcc-3.1/gcc/config/m68k/x-crds Thu Jan 1 00:00:00 1970 *************** *** 1,7 **** - CC = cc -Wx,-X23 - - # The following line might be necessary as well or instead of the above. - # If you find out that it is necessary, - # or if you find out that it is not necessary, - # please inform bug-gcc@prep.ai.mit.edu. - # ALLOCA = alloca.o --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/x-dpx2 gcc-3.1/gcc/config/m68k/x-dpx2 *** gcc-3.0.4/gcc/config/m68k/x-dpx2 Wed Dec 16 21:07:46 1998 --- gcc-3.1/gcc/config/m68k/x-dpx2 Thu Jan 1 00:00:00 1970 *************** *** 1,16 **** - # need this when using cc - ALLOCA = alloca.o - # avoid lossage assembling alloca. - ALLOCA_FLAGS=-S - ALLOCA_FINISH = $(AS) -o alloca.o alloca.s - # be sure not to confuse ./as with /bin/as - AS=`if [ x$(OLDCC) = x$(CC) ] ; then echo /bin/as; else echo $(GAS); fi` - GAS = gas - # - # as of gcc-2.2.1 gcc -g produces too many .stabd's for /bin/ld - # to link cc1plus, so use -g with /bin/cc, but -O with gcc - CFLAGS=`if [ x$(OLDCC) = x$(CC) ] ; then echo -g; else echo -O; fi` - # - CLIB=-lmalloc -lld -lm - # tell CC whether we are a 200 or 300 - X_CFLAGS=-D_POSIX_SOURCE -D_XOPEN_SOURCE -D_BULL_SOURCE -D__DPX2__ `if [ -d /makesys/kernel/cf/ncl_mr ]; then echo -Dncl_mr=1; else echo -Dncl_el; fi` --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/x-hp2bsd gcc-3.1/gcc/config/m68k/x-hp2bsd *** gcc-3.0.4/gcc/config/m68k/x-hp2bsd Wed Dec 16 21:07:47 1998 --- gcc-3.1/gcc/config/m68k/x-hp2bsd Thu Jan 1 00:00:00 1970 *************** *** 1,4 **** - # Make assignments for compilation for hp200 running 4.3bsd - CC=gcc - OLDCC=oldcc - # You must have a previous version of gcc for bootstrapping --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/x-hp320 gcc-3.1/gcc/config/m68k/x-hp320 *** gcc-3.0.4/gcc/config/m68k/x-hp320 Sat Aug 7 07:39:28 1999 --- gcc-3.1/gcc/config/m68k/x-hp320 Thu Jan 1 00:00:00 1970 *************** *** 1,15 **** - # Make assignments for compilation on HPUX with their C compiler. - CC=cc -Wc,-Nw2000 -Wc,-Ns2000 -Wc,-Ne700 -Wc,-Np300 - OLDCC=cc -Wc,-Nw2000 -Wc,-Ns2000 -Wc,-Ne700 -Wc,-Np300 - ALLOCA=alloca.o - - # For CCLIBFLAGS you might want to specify the switch that - # forces only 68000 instructions to be used. - - # Version 5 of HPUX had a compiler bug that made it crash with -g. - # You must set CFLAGS to empty on version 5. - - # You must get alloca.c from GNU Emacs. - - # So putenv and other functions get seen by fixproto. - FIXPROTO_DEFINES = -D_HPUX_SOURCE --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/x-hp320g gcc-3.1/gcc/config/m68k/x-hp320g *** gcc-3.0.4/gcc/config/m68k/x-hp320g Sat Aug 7 07:39:28 1999 --- gcc-3.1/gcc/config/m68k/x-hp320g Thu Jan 1 00:00:00 1970 *************** *** 1,15 **** - # Make assignments for compilation on HPUX with their C compiler. - CC=cc -Wc,-Nw2000 -Wc,-Ns2000 -Wc,-Ne700 -Wc,-Np300 - OLDCC=cc -Wc,-Nw2000 -Wc,-Ns2000 -Wc,-Ne700 -Wc,-Np300 - ALLOCA=alloca.o - - # For CCLIBFLAGS you might want to specify the switch that - # forces only 68000 instructions to be used. - - X_CFLAGS= -I../hp-include - - # Version 5 of HPUX had a compiler bug that made it crash with -g. - # You must set CFLAGS to empty on version 5. - - # So putenv and other functions get seen by fixproto. - FIXPROTO_DEFINES = -D_HPUX_SOURCE --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/x-mot3300 gcc-3.1/gcc/config/m68k/x-mot3300 *** gcc-3.0.4/gcc/config/m68k/x-mot3300 Mon Jul 12 23:49:33 1999 --- gcc-3.1/gcc/config/m68k/x-mot3300 Thu Jan 1 00:00:00 1970 *************** *** 1,17 **** - ALLOCA=alloca.o - - # This disables the long/short jump optimization. - # I use sysV68 R3V7.1 RM04 (phdm@info.ucl.ac.be) - # Since ss-950318, with jump optimization enabled, "as" issues a warning - # when assembling combine.s : - # aline nnnnn : Warning: Table overflow: some optimizations lost (SDIs) - # but later "/bin/ld" complains with - # ld: relocation entry found for non-relocatable symbol in combine.o - # and the produced "cc1" fails with SIGSEGV - # and "/usr/local/bin/ld" merely fails with - # collect2: ld terminated with signal 11, core dumped - # Another possible fix would be to split combine.c. - # Since ss-961013, the same happens for expr.c compiled by gcc, but not by cc; - # and for cp/decl.c; aren't those files too big ? - # With egcs-1.1.2, this also happens for f/expr.o and f/stb.o - XCFLAGS=`case $@ in combine.o|expr.o|decl.o|stb.o|cse.o) echo -Wa,-j;;esac` --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/x-mot3300-gas gcc-3.1/gcc/config/m68k/x-mot3300-gas *** gcc-3.0.4/gcc/config/m68k/x-mot3300-gas Wed Dec 16 21:07:52 1998 --- gcc-3.1/gcc/config/m68k/x-mot3300-gas Thu Jan 1 00:00:00 1970 *************** *** 1,12 **** - ALLOCA=alloca.o - - # This disables the long/short jump optimization. - # I use sysV68 R3V7.1 RM04 (phdm@info.ucl.ac.be) - # Since ss-950318, with jump optimization enabled, "as" issues a warning - # when assembling combine.s : - # aline nnnnn : Warning: Table overflow: some optimizations lost (SDIs) - # but later "ld" complains with - # ld: relocation entry found for non-relocatable symbol in combine.o - # and the produced "cc1" fails with SIGSEGV - # Another possible fix would be to split combine.c. - XCFLAGS=`if [ x$@ = xcombine.o -a "${CC}" = "${OLDCC}" ]; then echo -Wa,-j; fi` --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/x-next gcc-3.1/gcc/config/m68k/x-next *** gcc-3.0.4/gcc/config/m68k/x-next Wed Dec 16 21:07:53 1998 --- gcc-3.1/gcc/config/m68k/x-next Thu Jan 10 22:03:05 2002 *************** *** 1,13 **** - # Make assignments for compiling on NeXT with their compiler version. - CC=cc -traditional-cpp - OLDCC=CC -traditional-cpp - - # Specify other dirs of system header files to be fixed. - OTHER_FIXINCLUDES_DIRS= /LocalDeveloper/Headers - - # is sometimes in /usr/include/ansi/limits.h. - LIMITS_H_TEST = [ -f $(SYSTEM_HEADER_DIR)/limits.h -o -f $(SYSTEM_HEADER_DIR)/ansi/limits.h ] - # f771 is so big, we need to tell linker on m68k-next-nextstep* to # make enough room for it. BOOT_LDFLAGS=-segaddr __DATA 6000000 --- 1,3 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/x-tower gcc-3.1/gcc/config/m68k/x-tower *** gcc-3.0.4/gcc/config/m68k/x-tower Wed Dec 16 21:07:54 1998 --- gcc-3.1/gcc/config/m68k/x-tower Thu Jan 1 00:00:00 1970 *************** *** 1,9 **** - # On the NCR Tower 32 running SVR3, says ra@intsys.no : - # Do *not* enable optimization in CFLAGS when using the native cc, because: - # a) The optimizer seems to loop when invoked with -O2. - # b) The -O1 level does stack/frame pointer optimizations that make the - # assembler alloca in libPW.a fail, and the C alloca eats *lots* of memory. - # c) gcc will eventually be recompiled with itself, so all this doesn't matter. - X_CFLAGS = -O0 - CCLIBFLAGS = -O2 - CLIB = -lmalloc -lPW --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/xm-3b1.h gcc-3.1/gcc/config/m68k/xm-3b1.h *** gcc-3.0.4/gcc/config/m68k/xm-3b1.h Wed Dec 16 21:07:55 1998 --- gcc-3.1/gcc/config/m68k/xm-3b1.h Thu Jan 1 00:00:00 1970 *************** *** 1,4 **** - /* Override part of the obstack macros. */ - - #define __PTR_TO_INT(P) ((int)(P)) - #define __INT_TO_PTR(P) ((char *)(P)) --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/xm-altos3068.h gcc-3.1/gcc/config/m68k/xm-altos3068.h *** gcc-3.0.4/gcc/config/m68k/xm-altos3068.h Wed Dec 16 21:07:56 1998 --- gcc-3.1/gcc/config/m68k/xm-altos3068.h Thu Jan 1 00:00:00 1970 *************** *** 1,3 **** - #define USG - - #include "m68k/xm-m68k.h" --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/xm-amix.h gcc-3.1/gcc/config/m68k/xm-amix.h *** gcc-3.0.4/gcc/config/m68k/xm-amix.h Mon May 1 17:24:23 2000 --- gcc-3.1/gcc/config/m68k/xm-amix.h Thu Jan 1 00:00:00 1970 *************** *** 1,34 **** - /* Definitions of host machine for GNU compiler. - Commodore Amiga A3000UX version. - Copyright (C) 1991, 1997 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 "m68k/xm-m68kv.h" /* Use the System V flavor of m68k host */ - - #define rindex strrchr - #define index strchr - - /* Define FULL_PROTOTYPES for protoize.c, to get included. - We need this file for things like R_OK, not necessarily prototypes. */ - - #define FULL_PROTOTYPES - - #if defined (__GNUC__) && __GNUC__ == 1 - #define alloca __builtin_alloca - #endif --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/xm-atari.h gcc-3.1/gcc/config/m68k/xm-atari.h *** gcc-3.0.4/gcc/config/m68k/xm-atari.h Wed Dec 16 21:07:59 1998 --- gcc-3.1/gcc/config/m68k/xm-atari.h Thu Jan 1 00:00:00 1970 *************** *** 1,5 **** - /* Add HZ define if missing */ - - #ifndef HZ - #define HZ 100 /* System clock */ - #endif --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/xm-aux.h gcc-3.1/gcc/config/m68k/xm-aux.h *** gcc-3.0.4/gcc/config/m68k/xm-aux.h Wed Dec 16 21:08:00 1998 --- gcc-3.1/gcc/config/m68k/xm-aux.h Thu Jan 1 00:00:00 1970 *************** *** 1,9 **** - #ifndef USG - #define USG - #endif - - #ifndef AUX - #define AUX - #endif - - #include "m68k/xm-m68k.h" --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/xm-crds.h gcc-3.1/gcc/config/m68k/xm-crds.h *** gcc-3.0.4/gcc/config/m68k/xm-crds.h Wed Dec 16 21:08:01 1998 --- gcc-3.1/gcc/config/m68k/xm-crds.h Thu Jan 1 00:00:00 1970 *************** *** 1,7 **** - /* Avoid conflict with C library by changing name of this symbol. */ - #define gettime gcc_gettime - - /* Override part of the obstack macros. */ - - #define __PTR_TO_INT(P) ((int)(P)) - #define __INT_TO_PTR(P) ((char *)(P)) --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/xm-hp320.h gcc-3.1/gcc/config/m68k/xm-hp320.h *** gcc-3.0.4/gcc/config/m68k/xm-hp320.h Tue Dec 28 16:36:09 1999 --- gcc-3.1/gcc/config/m68k/xm-hp320.h Thu Jan 1 00:00:00 1970 *************** *** 1,10 **** - /* USG is needed to prevent trying to use getrusage and getwd. */ - #define USG - - #include "m68k/xm-m68k.h" - - /* If compiling with HPUX compiler, we are probably using alloca.c, - so help it work right. */ - #ifndef __GNUC__ - #define USE_C_ALLOCA - #endif --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/xm-linux.h gcc-3.1/gcc/config/m68k/xm-linux.h *** gcc-3.0.4/gcc/config/m68k/xm-linux.h Wed Dec 16 21:08:03 1998 --- gcc-3.1/gcc/config/m68k/xm-linux.h Thu Jan 1 00:00:00 1970 *************** *** 1,4 **** - /* Configuration for GCC for Motorola m68k running Linux-based GNU systems. */ - - #include - #include --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/xm-lynx.h gcc-3.1/gcc/config/m68k/xm-lynx.h *** gcc-3.0.4/gcc/config/m68k/xm-lynx.h Wed Dec 16 21:08:04 1998 --- gcc-3.1/gcc/config/m68k/xm-lynx.h Thu Jan 1 00:00:00 1970 *************** *** 1,35 **** - /* Configuration for GNU C-compiler for all platforms running LynxOS. - Copyright (C) 1993, 1995 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 - - /* This describes the machine the compiler is hosted on. */ - #define HOST_BITS_PER_CHAR 8 - #define HOST_BITS_PER_SHORT 16 - #define HOST_BITS_PER_INT 32 - #define HOST_BITS_PER_LONG 32 - #define HOST_BITS_PER_LONGLONG 64 - - #define HOST_WORDS_BIG_ENDIAN 1 - - /* target machine dependencies. - tm.h is a symbolic link to the actual target specific file. */ - - #include "tm.h" --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/xm-m68k.h gcc-3.1/gcc/config/m68k/xm-m68k.h *** gcc-3.0.4/gcc/config/m68k/xm-m68k.h Thu Mar 15 19:02:04 2001 --- gcc-3.1/gcc/config/m68k/xm-m68k.h Thu Jan 1 00:00:00 1970 *************** *** 1,36 **** - /* Configuration for GNU C-compiler for Motorola 68000 family. - Copyright (C) 1987, 1993 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 describes the machine the compiler is hosted on. */ - #define HOST_BITS_PER_CHAR 8 - #define HOST_BITS_PER_SHORT 16 - #define HOST_BITS_PER_INT 32 - #define HOST_BITS_PER_LONG 32 - #define HOST_BITS_PER_LONGLONG 64 - - #define HOST_WORDS_BIG_ENDIAN - - /* target machine dependencies. - tm.h is a symbolic link to the actual target specific file. */ - #include "tm.h" - - /* Arguments to use with `exit'. */ - #define SUCCESS_EXIT_CODE 0 - #define FATAL_EXIT_CODE 33 --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/xm-m68kv.h gcc-3.1/gcc/config/m68k/xm-m68kv.h *** gcc-3.0.4/gcc/config/m68k/xm-m68kv.h Wed Dec 16 21:08:06 1998 --- gcc-3.1/gcc/config/m68k/xm-m68kv.h Thu Jan 1 00:00:00 1970 *************** *** 1,9 **** - /* Host environment for 68000's running System V. */ - - #include "m68k/xm-m68k.h" - - #define USG - - #ifndef __GNUC__ - #define USE_C_ALLOCA - #endif --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/xm-mot3300.h gcc-3.1/gcc/config/m68k/xm-mot3300.h *** gcc-3.0.4/gcc/config/m68k/xm-mot3300.h Tue Jan 12 04:16:43 1999 --- gcc-3.1/gcc/config/m68k/xm-mot3300.h Thu Jan 1 00:00:00 1970 *************** *** 1,37 **** - /* Configuration for GNU C-compiler for Motorola 68000 family. - SysV68 Motorola 3300 Delta Series - Copyright (C) 1994, 1995, 1996, 1997, 1998, 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. */ - - - #define USG 1 - - /* do not use alloca from -lPW with cc, because function epilogues use %sp */ - #ifndef __GNUC__ - #ifdef __STDC__ - extern void *alloca (); - #else - extern char *alloca (); - #endif - #endif - - /* Override part of the obstack macros. */ - - #define __PTR_TO_INT(P) ((int)(P)) - #define __INT_TO_PTR(P) ((char *)(P)) --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/xm-next.h gcc-3.1/gcc/config/m68k/xm-next.h *** gcc-3.0.4/gcc/config/m68k/xm-next.h Wed Dec 16 21:08:08 1998 --- gcc-3.1/gcc/config/m68k/xm-next.h Thu Jan 1 00:00:00 1970 *************** *** 1,3 **** - /* malloc does better with chunks the size of a page. */ - - #define OBSTACK_CHUNK_SIZE (getpagesize ()) --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/xm-openbsd.h gcc-3.1/gcc/config/m68k/xm-openbsd.h *** gcc-3.0.4/gcc/config/m68k/xm-openbsd.h Sat Sep 4 15:08:59 1999 --- gcc-3.1/gcc/config/m68k/xm-openbsd.h Thu Jan 1 00:00:00 1970 *************** *** 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 - #include - --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/xm-plexus.h gcc-3.1/gcc/config/m68k/xm-plexus.h *** gcc-3.0.4/gcc/config/m68k/xm-plexus.h Wed Dec 16 21:08:09 1998 --- gcc-3.1/gcc/config/m68k/xm-plexus.h Thu Jan 1 00:00:00 1970 *************** *** 1,6 **** - /* Host environment for 68000's running System V. */ - - #ifndef _SIZE_T_ - typedef int size_t; - #define _SIZE_T_ - #endif --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/xm-sun3.h gcc-3.1/gcc/config/m68k/xm-sun3.h *** gcc-3.0.4/gcc/config/m68k/xm-sun3.h Wed Dec 16 21:08:10 1998 --- gcc-3.1/gcc/config/m68k/xm-sun3.h Thu Jan 1 00:00:00 1970 *************** *** 1,5 **** - /* Configuration for GCC for Motorola m68k on sun3. */ - - #define HAVE_POPEN - - #include "m68k/xm-m68k.h" --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m68k/xm-tower.h gcc-3.1/gcc/config/m68k/xm-tower.h *** gcc-3.0.4/gcc/config/m68k/xm-tower.h Wed Dec 16 21:08:11 1998 --- gcc-3.1/gcc/config/m68k/xm-tower.h Thu Jan 1 00:00:00 1970 *************** *** 1,4 **** - #include "m68k/xm-m68k.h" - #include "xm-svr3.h" - - #define HAVE_VPRINTF --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m88k/dgux.h gcc-3.1/gcc/config/m88k/dgux.h *** gcc-3.0.4/gcc/config/m88k/dgux.h Thu Dec 7 02:01:22 2000 --- gcc-3.1/gcc/config/m88k/dgux.h Sun Nov 4 22:37:46 2001 *************** *** 1,6 **** /* Definitions of target machine for GNU compiler. Motorola m88100 running DG/UX. ! Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 2000 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@mcc.com) Currently maintained by (gcc@dg-rtp.dg.com) --- 1,6 ---- /* Definitions of target machine for GNU compiler. Motorola m88100 running DG/UX. ! Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 2000, 2001 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@mcc.com) Currently maintained by (gcc@dg-rtp.dg.com) *************** Boston, MA 02111-1307, USA. */ *** 26,32 **** --- 26,34 ---- supported. The option -msvr4 specifies elf. With these combinations, -g means dwarf. */ /* DWARF_DEBUGGING_INFO defined in svr4.h. */ + #undef SDB_DEBUGGING_INFO #define SDB_DEBUGGING_INFO + #undef PREFERRED_DEBUGGING_TYPE #define PREFERRED_DEBUGGING_TYPE \ (TARGET_SVR4 ? DWARF_DEBUG : SDB_DEBUG) *************** Boston, MA 02111-1307, USA. */ *** 36,42 **** #define AS_BUG_FLDCR #endif ! #include "svr4.h" #include "m88k/m88k.h" /* Augment TARGET_SWITCHES with the MXDB options. */ --- 38,44 ---- #define AS_BUG_FLDCR #endif ! /* TODO: convert includes to ${tm_file} list in config.gcc. */ #include "m88k/m88k.h" /* Augment TARGET_SWITCHES with the MXDB options. */ *************** func_ptr __DTOR_END__[1] = { (func_ptr) *** 294,302 **** /* Must use data section for relocatable constants when pic. */ #undef SELECT_RTX_SECTION ! #define SELECT_RTX_SECTION(MODE,RTX) \ { \ ! if (flag_pic && symbolic_operand (RTX)) \ data_section (); \ else \ const_section (); \ --- 296,304 ---- /* Must use data section for relocatable constants when pic. */ #undef SELECT_RTX_SECTION ! #define SELECT_RTX_SECTION(MODE,RTX,ALIGN) \ { \ ! if (flag_pic && symbolic_operand ((RTX), (MODE))) \ data_section (); \ else \ const_section (); \ diff -Nrc3pad gcc-3.0.4/gcc/config/m88k/dguxbcs.h gcc-3.1/gcc/config/m88k/dguxbcs.h *** gcc-3.0.4/gcc/config/m88k/dguxbcs.h Thu Dec 7 02:01:22 2000 --- gcc-3.1/gcc/config/m88k/dguxbcs.h Fri Oct 19 22:27:33 2001 *************** *** 1,6 **** /* Definitions of target machine for GNU compiler. Motorola m88100 running DG/UX. ! Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@mcc.com) Currently maintained by (gcc@dg-rtp.dg.com) --- 1,6 ---- /* Definitions of target machine for GNU compiler. Motorola m88100 running DG/UX. ! Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 2001 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@mcc.com) Currently maintained by (gcc@dg-rtp.dg.com) *************** along with GNU CC; see the file COPYING. *** 22,28 **** the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - #include "m88k/dgux.h" /* dgux.h builds an elf gcc which compiles elf objects by default. dguxbcs.h builds a bcs gcc which compiles bcs objects by default. --- 22,27 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m88k/m88k-protos.h gcc-3.1/gcc/config/m88k/m88k-protos.h *** gcc-3.0.4/gcc/config/m88k/m88k-protos.h Wed Jan 12 19:50:19 2000 --- gcc-3.1/gcc/config/m88k/m88k-protos.h Thu Dec 27 03:35:21 2001 *************** extern void m88k_va_start PARAMS ((int, *** 75,99 **** struct m88k_lang_independent_options; #endif extern void output_file_start PARAMS ((FILE *, ! struct m88k_lang_independent_options *, int, ! struct m88k_lang_independent_options *, int)); extern int null_prologue PARAMS ((void)); extern int integer_ok_for_set PARAMS ((unsigned)); extern void m88k_layout_frame PARAMS ((void)); extern void m88k_expand_prologue PARAMS ((void)); - extern void m88k_begin_prologue PARAMS ((FILE *, int)); - extern void m88k_end_prologue PARAMS ((FILE *)); extern void m88k_expand_epilogue PARAMS ((void)); - extern void m88k_begin_epilogue PARAMS ((FILE *)); - extern void m88k_end_epilogue PARAMS ((FILE *, int)); extern void output_function_profiler PARAMS ((FILE *, int, const char *, int)); extern void output_function_block_profiler PARAMS ((FILE *, int)); extern void output_block_profiler PARAMS ((FILE *, int)); extern void output_ascii PARAMS ((FILE *, const char *, int, ! const unsigned char *, int)); extern void output_label PARAMS ((int)); extern struct rtx_def *m88k_builtin_saveregs PARAMS ((void)); extern enum m88k_instruction classify_integer PARAMS ((enum machine_mode, int)); --- 75,95 ---- struct m88k_lang_independent_options; #endif extern void output_file_start PARAMS ((FILE *, ! const struct m88k_lang_independent_options *, int, ! const struct m88k_lang_independent_options *, int)); extern int null_prologue PARAMS ((void)); extern int integer_ok_for_set PARAMS ((unsigned)); extern void m88k_layout_frame PARAMS ((void)); extern void m88k_expand_prologue PARAMS ((void)); extern void m88k_expand_epilogue PARAMS ((void)); extern void output_function_profiler PARAMS ((FILE *, int, const char *, int)); extern void output_function_block_profiler PARAMS ((FILE *, int)); extern void output_block_profiler PARAMS ((FILE *, int)); extern void output_ascii PARAMS ((FILE *, const char *, int, ! const char *, int)); extern void output_label PARAMS ((int)); extern struct rtx_def *m88k_builtin_saveregs PARAMS ((void)); extern enum m88k_instruction classify_integer PARAMS ((enum machine_mode, int)); diff -Nrc3pad gcc-3.0.4/gcc/config/m88k/m88k.c gcc-3.1/gcc/config/m88k/m88k.c *** gcc-3.0.4/gcc/config/m88k/m88k.c Sat May 12 20:32:50 2001 --- gcc-3.1/gcc/config/m88k/m88k.c Sun Feb 17 14:23:52 2002 *************** *** 1,6 **** /* Subroutines for insn-output.c for Motorola 88000. ! Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 ! Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@mcc.com) Currently maintained by (gcc@dg-rtp.dg.com) --- 1,6 ---- /* Subroutines for insn-output.c for Motorola 88000. ! Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, ! 2001 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@mcc.com) Currently maintained by (gcc@dg-rtp.dg.com) *************** Boston, MA 02111-1307, USA. */ *** 33,44 **** #include "insn-attr.h" #include "tree.h" #include "function.h" - #include "c-tree.h" #include "expr.h" #include "flags.h" #include "recog.h" #include "toplev.h" #include "tm_p.h" extern int flag_traditional; extern FILE *asm_out_file; --- 33,47 ---- #include "insn-attr.h" #include "tree.h" #include "function.h" #include "expr.h" + #include "libfuncs.h" + #include "c-tree.h" #include "flags.h" #include "recog.h" #include "toplev.h" #include "tm_p.h" + #include "target.h" + #include "target-def.h" extern int flag_traditional; extern FILE *asm_out_file; *************** rtx m88k_compare_op0; /* cmpsi operand *** 60,65 **** --- 63,105 ---- rtx m88k_compare_op1; /* cmpsi operand 1 */ enum processor_type m88k_cpu; /* target cpu */ + + static void m88k_output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT)); + static void m88k_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT)); + static void m88k_output_function_end_prologue PARAMS ((FILE *)); + static void m88k_output_function_begin_epilogue PARAMS ((FILE *)); + #if defined (CTOR_LIST_BEGIN) && !defined (OBJECT_FORMAT_ELF) + static void m88k_svr3_asm_out_constructor PARAMS ((rtx, int)); + static void m88k_svr3_asm_out_destructor PARAMS ((rtx, int)); + #endif + + static int m88k_adjust_cost PARAMS ((rtx, rtx, rtx, int)); + + /* Initialize the GCC target structure. */ + #undef TARGET_ASM_BYTE_OP + #define TARGET_ASM_BYTE_OP "\tbyte\t" + #undef TARGET_ASM_ALIGNED_HI_OP + #define TARGET_ASM_ALIGNED_HI_OP "\thalf\t" + #undef TARGET_ASM_ALIGNED_SI_OP + #define TARGET_ASM_ALIGNED_SI_OP "\tword\t" + #undef TARGET_ASM_UNALIGNED_HI_OP + #define TARGET_ASM_UNALIGNED_HI_OP "\tuahalf\t" + #undef TARGET_ASM_UNALIGNED_SI_OP + #define TARGET_ASM_UNALIGNED_SI_OP "\tuaword\t" + + #undef TARGET_ASM_FUNCTION_PROLOGUE + #define TARGET_ASM_FUNCTION_PROLOGUE m88k_output_function_prologue + #undef TARGET_ASM_FUNCTION_END_PROLOGUE + #define TARGET_ASM_FUNCTION_END_PROLOGUE m88k_output_function_end_prologue + #undef TARGET_ASM_FUNCTION_BEGIN_EPILOGUE + #define TARGET_ASM_FUNCTION_BEGIN_EPILOGUE m88k_output_function_begin_epilogue + #undef TARGET_ASM_FUNCTION_EPILOGUE + #define TARGET_ASM_FUNCTION_EPILOGUE m88k_output_function_epilogue + + #undef TARGET_SCHED_ADJUST_COST + #define TARGET_SCHED_ADJUST_COST m88k_adjust_cost + + struct gcc_target targetm = TARGET_INITIALIZER; /* Determine what instructions are needed to manufacture the integer VALUE in the given MODE. */ *************** legitimize_address (pic, orig, reg, scra *** 362,368 **** if (GET_CODE (addr) == CONST_INT) { if (ADD_INT (addr)) ! return plus_constant_for_output (base, INTVAL (addr)); else if (! reload_in_progress && ! reload_completed) addr = force_reg (Pmode, addr); /* We can't create any new registers during reload, so use the --- 402,408 ---- if (GET_CODE (addr) == CONST_INT) { if (ADD_INT (addr)) ! return plus_constant (base, INTVAL (addr)); else if (! reload_in_progress && ! reload_completed) addr = force_reg (Pmode, addr); /* We can't create any new registers during reload, so use the *************** legitimize_address (pic, orig, reg, scra *** 456,470 **** #define MOVSTR_SI_LIMIT_88110 72 #define MOVSTR_DI_LIMIT_88110 72 ! static enum machine_mode mode_from_align[] = {VOIDmode, QImode, HImode, VOIDmode, SImode, VOIDmode, VOIDmode, VOIDmode, DImode}; ! static int max_from_align[] = {0, MOVSTR_QI, MOVSTR_HI, 0, MOVSTR_SI, ! 0, 0, 0, MOVSTR_DI}; ! static int all_from_align[] = {0, MOVSTR_QI, MOVSTR_ODD_HI, 0, MOVSTR_ODD_SI, ! 0, 0, 0, MOVSTR_ODD_DI}; ! static int best_from_align[3][9] = { {0, MOVSTR_QI_LIMIT_88100, MOVSTR_HI_LIMIT_88100, 0, MOVSTR_SI_LIMIT_88100, 0, 0, 0, MOVSTR_DI_LIMIT_88100}, {0, MOVSTR_QI_LIMIT_88110, MOVSTR_HI_LIMIT_88110, 0, MOVSTR_SI_LIMIT_88110, --- 496,510 ---- #define MOVSTR_SI_LIMIT_88110 72 #define MOVSTR_DI_LIMIT_88110 72 ! static const enum machine_mode mode_from_align[] = {VOIDmode, QImode, HImode, VOIDmode, SImode, VOIDmode, VOIDmode, VOIDmode, DImode}; ! static const int max_from_align[] = {0, MOVSTR_QI, MOVSTR_HI, 0, MOVSTR_SI, ! 0, 0, 0, MOVSTR_DI}; ! static const int all_from_align[] = {0, MOVSTR_QI, MOVSTR_ODD_HI, 0, ! MOVSTR_ODD_SI, 0, 0, 0, MOVSTR_ODD_DI}; ! static const int best_from_align[3][9] = { {0, MOVSTR_QI_LIMIT_88100, MOVSTR_HI_LIMIT_88100, 0, MOVSTR_SI_LIMIT_88100, 0, 0, 0, MOVSTR_DI_LIMIT_88100}, {0, MOVSTR_QI_LIMIT_88110, MOVSTR_HI_LIMIT_88110, 0, MOVSTR_SI_LIMIT_88110, *************** output_call (operands, addr) *** 857,863 **** - 2); #if (MONITOR_GCC & 0x2) /* How often do long branches happen? */ if ((unsigned) (delta + 0x8000) >= 0x10000) ! warning ("Internal gcc monitor: short-branch(%x)", delta); #endif /* Delete the jump. */ --- 897,903 ---- - 2); #if (MONITOR_GCC & 0x2) /* How often do long branches happen? */ if ((unsigned) (delta + 0x8000) >= 0x10000) ! warning ("internal gcc monitor: short-branch(%x)", delta); #endif /* Delete the jump. */ *************** pc_or_label_ref (op, mode) *** 1474,1489 **** /* This definition must match lang_independent_options from toplev.c. */ struct m88k_lang_independent_options { ! const char *string; ! int *variable; ! int on_value; ! const char *description; }; static void output_options PARAMS ((FILE *, ! struct m88k_lang_independent_options *, int, ! struct m88k_lang_independent_options *, int, int, int, const char *, const char *, const char *)); --- 1514,1529 ---- /* This definition must match lang_independent_options from toplev.c. */ struct m88k_lang_independent_options { ! const char *const string; ! int *const variable; ! const int on_value; ! const char *const description; }; static void output_options PARAMS ((FILE *, ! const struct m88k_lang_independent_options *, int, ! const struct m88k_lang_independent_options *, int, int, int, const char *, const char *, const char *)); *************** output_option (file, sep, type, name, in *** 1505,1518 **** return pos + fprintf (file, "%s%s%s", sep, type, name); } ! static struct { const char *name; int value; } m_options[] = TARGET_SWITCHES; static void output_options (file, f_options, f_len, W_options, W_len, pos, max, sep, indent, term) FILE *file; ! struct m88k_lang_independent_options *f_options; ! struct m88k_lang_independent_options *W_options; int f_len, W_len; int pos; int max; --- 1545,1559 ---- return pos + fprintf (file, "%s%s%s", sep, type, name); } ! static const struct { const char *const name; const int value; } m_options[] = ! TARGET_SWITCHES; static void output_options (file, f_options, f_len, W_options, W_len, pos, max, sep, indent, term) FILE *file; ! const struct m88k_lang_independent_options *f_options; ! const struct m88k_lang_independent_options *W_options; int f_len, W_len; int pos; int max; *************** output_options (file, f_options, f_len, *** 1530,1538 **** pos = output_option (file, sep, "-traditional", "", indent, pos, max); if (profile_flag) pos = output_option (file, sep, "-p", "", indent, pos, max); - if (profile_block_flag) - pos = output_option (file, sep, "-a", "", indent, pos, max); - for (j = 0; j < f_len; j++) if (*f_options[j].variable == f_options[j].on_value) pos = output_option (file, sep, "-f", f_options[j].string, --- 1571,1576 ---- *************** output_options (file, f_options, f_len, *** 1561,1568 **** void output_file_start (file, f_options, f_len, W_options, W_len) FILE *file; ! struct m88k_lang_independent_options *f_options; ! struct m88k_lang_independent_options *W_options; int f_len, W_len; { register int pos; --- 1599,1606 ---- void output_file_start (file, f_options, f_len, W_options, W_len) FILE *file; ! const struct m88k_lang_independent_options *f_options; ! const struct m88k_lang_independent_options *W_options; int f_len, W_len; { register int pos; *************** output_ascii (file, opcode, max, p, size *** 1605,1611 **** FILE *file; const char *opcode; int max; ! const unsigned char *p; int size; { int i; --- 1643,1649 ---- FILE *file; const char *opcode; int max; ! const char *p; int size; { int i; *************** output_ascii (file, opcode, max, p, size *** 1616,1622 **** fprintf (file, "%s\"", opcode); for (i = 0; i < size; i++) { ! register int c = p[i]; if (num > max) { --- 1654,1660 ---- fprintf (file, "%s\"", opcode); for (i = 0; i < size; i++) { ! register int c = (unsigned char) p[i]; if (num > max) { *************** output_ascii (file, opcode, max, p, size *** 1632,1640 **** num += 2; in_escape = 0; } ! else if (in_escape && c >= '0' && c <= '9') { ! /* If a digit follows an octal-escape, the Vax assembler fails to stop reading the escape after three digits. Continue to output the values as an octal-escape until a non-digit is found. */ --- 1670,1678 ---- num += 2; in_escape = 0; } ! else if (in_escape && ISDIGIT (c)) { ! /* If a digit follows an octal-escape, the VAX assembler fails to stop reading the escape after three digits. Continue to output the values as an octal-escape until a non-digit is found. */ *************** static int prologue_marked; *** 1775,1781 **** (((BYTES) + (STACK_UNIT_BOUNDARY - 1)) & ~(STACK_UNIT_BOUNDARY - 1)) /* Establish the position of the FP relative to the SP. This is done ! either during FUNCTION_PROLOGUE or by INITIAL_ELIMINATION_OFFSET. */ void m88k_layout_frame () --- 1813,1820 ---- (((BYTES) + (STACK_UNIT_BOUNDARY - 1)) & ~(STACK_UNIT_BOUNDARY - 1)) /* Establish the position of the FP relative to the SP. This is done ! either during output_function_prologue() or by ! INITIAL_ELIMINATION_OFFSET. */ void m88k_layout_frame () *************** m88k_layout_frame () *** 1789,1795 **** frame_size = get_frame_size (); /* Since profiling requires a call, make sure r1 is saved. */ ! if (profile_flag || profile_block_flag) save_regs[1] = 1; /* If we are producing debug information, store r1 and r30 where the --- 1828,1834 ---- frame_size = get_frame_size (); /* Since profiling requires a call, make sure r1 is saved. */ ! if (current_function_profile) save_regs[1] = 1; /* If we are producing debug information, store r1 and r30 where the *************** m88k_layout_frame () *** 1871,1885 **** int need = ((m88k_stack_size ? STACK_UNIT_BOUNDARY - STARTING_FRAME_OFFSET : 0) - (frame_size % STACK_UNIT_BOUNDARY)); ! if (need) ! { ! if (need < 0) ! need += STACK_UNIT_BOUNDARY; ! (void) assign_stack_local (BLKmode, need, BITS_PER_UNIT); ! frame_size = get_frame_size (); ! } m88k_stack_size ! = ROUND_CALL_BLOCK_SIZE (m88k_stack_size + frame_size + current_function_pretend_args_size); } } --- 1910,1919 ---- int need = ((m88k_stack_size ? STACK_UNIT_BOUNDARY - STARTING_FRAME_OFFSET : 0) - (frame_size % STACK_UNIT_BOUNDARY)); ! if (need < 0) ! need += STACK_UNIT_BOUNDARY; m88k_stack_size ! = ROUND_CALL_BLOCK_SIZE (m88k_stack_size + frame_size + need + current_function_pretend_args_size); } } *************** uses_arg_area_p () *** 1929,1938 **** return 0; } ! void ! m88k_begin_prologue (stream, size) FILE *stream ATTRIBUTE_UNUSED; ! int size ATTRIBUTE_UNUSED; { if (TARGET_OMIT_LEAF_FRAME_POINTER && ! quiet_flag && leaf_function_p ()) fprintf (stderr, "$"); --- 1963,1972 ---- return 0; } ! static void ! m88k_output_function_prologue (stream, size) FILE *stream ATTRIBUTE_UNUSED; ! HOST_WIDE_INT size ATTRIBUTE_UNUSED; { if (TARGET_OMIT_LEAF_FRAME_POINTER && ! quiet_flag && leaf_function_p ()) fprintf (stderr, "$"); *************** m88k_begin_prologue (stream, size) *** 1940,1947 **** m88k_prologue_done = 1; /* it's ok now to put out ln directives */ } ! void ! m88k_end_prologue (stream) FILE *stream; { if (TARGET_OCS_DEBUG_INFO && !prologue_marked) --- 1974,1981 ---- m88k_prologue_done = 1; /* it's ok now to put out ln directives */ } ! static void ! m88k_output_function_end_prologue (stream) FILE *stream; { if (TARGET_OCS_DEBUG_INFO && !prologue_marked) *************** m88k_expand_prologue () *** 1991,1997 **** { rtx return_reg = gen_rtx_REG (SImode, 1); rtx label = gen_label_rtx (); ! rtx temp_reg; if (! save_regs[1]) { --- 2025,2031 ---- { rtx return_reg = gen_rtx_REG (SImode, 1); rtx label = gen_label_rtx (); ! rtx temp_reg = NULL_RTX; if (! save_regs[1]) { *************** m88k_expand_prologue () *** 2005,2024 **** if (! save_regs[1]) emit_move_insn (return_reg, temp_reg); } ! if (profile_flag || profile_block_flag) emit_insn (gen_blockage ()); } /* This function generates the assembly code for function exit, ! on machines that need it. Args are same as for FUNCTION_PROLOGUE. The function epilogue should not depend on the current stack pointer! It should use the frame pointer only, if there is a frame pointer. This is mandatory because of alloca; we also take advantage of it to omit stack adjustments before returning. */ ! void ! m88k_begin_epilogue (stream) FILE *stream; { if (TARGET_OCS_DEBUG_INFO && !epilogue_marked && prologue_marked) --- 2039,2058 ---- if (! save_regs[1]) emit_move_insn (return_reg, temp_reg); } ! if (current_function_profile) emit_insn (gen_blockage ()); } /* This function generates the assembly code for function exit, ! on machines that need it. The function epilogue should not depend on the current stack pointer! It should use the frame pointer only, if there is a frame pointer. This is mandatory because of alloca; we also take advantage of it to omit stack adjustments before returning. */ ! static void ! m88k_output_function_begin_epilogue (stream) FILE *stream; { if (TARGET_OCS_DEBUG_INFO && !epilogue_marked && prologue_marked) *************** m88k_begin_epilogue (stream) *** 2028,2037 **** epilogue_marked = 1; } ! void ! m88k_end_epilogue (stream, size) FILE *stream; ! int size ATTRIBUTE_UNUSED; { rtx insn = get_last_insn (); --- 2062,2071 ---- epilogue_marked = 1; } ! static void ! m88k_output_function_epilogue (stream, size) FILE *stream; ! HOST_WIDE_INT size ATTRIBUTE_UNUSED; { rtx insn = get_last_insn (); *************** m88k_debugger_offset (reg, offset) *** 2263,2269 **** #if (MONITOR_GCC & 0x10) /* Watch for suspicious symbolic locations. */ if (! (GET_CODE (reg) == REG && REGNO (reg) >= FIRST_PSEUDO_REGISTER)) ! warning ("Internal gcc error: Can't express symbolic location"); #endif return 0; } --- 2297,2303 ---- #if (MONITOR_GCC & 0x10) /* Watch for suspicious symbolic locations. */ if (! (GET_CODE (reg) == REG && REGNO (reg) >= FIRST_PSEUDO_REGISTER)) ! warning ("internal gcc error: Can't express symbolic location"); #endif return 0; } *************** output_tdesc (file, offset) *** 2341,2347 **** tdesc_section (); ! fprintf (file, "%s%d,%d", INT_ASM_OP, /* 8:0,22:(20 or 16),2:2 */ (((xmask != 0) ? 20 : 16) << 2) | 2, flag_pic ? 2 : 1); --- 2375,2382 ---- tdesc_section (); ! /* 8:0,22:(20 or 16),2:2 */ ! fprintf (file, "%s%d,%d", integer_asm_op (4, TRUE), (((xmask != 0) ? 20 : 16) << 2) | 2, flag_pic ? 2 : 1); *************** output_function_profiler (file, labelno, *** 2382,2388 **** { char label[256]; char dbi[256]; ! const char *temp = (savep ? reg_names[2] : reg_names[10]); /* Remember to update FUNCTION_PROFILER_LENGTH. */ --- 2417,2423 ---- { char label[256]; char dbi[256]; ! const char *const temp = (savep ? reg_names[2] : reg_names[10]); /* Remember to update FUNCTION_PROFILER_LENGTH. */ *************** m88k_function_arg (args_so_far, mode, ty *** 2581,2587 **** struct rtx_def * m88k_builtin_saveregs () { ! rtx addr, dest; tree fntype = TREE_TYPE (current_function_decl); int argadj = ((!(TYPE_ARG_TYPES (fntype) != 0 && (TREE_VALUE (tree_last (TYPE_ARG_TYPES (fntype))) --- 2616,2622 ---- struct rtx_def * m88k_builtin_saveregs () { ! rtx addr; tree fntype = TREE_TYPE (current_function_decl); int argadj = ((!(TYPE_ARG_TYPES (fntype) != 0 && (TREE_VALUE (tree_last (TYPE_ARG_TYPES (fntype))) *************** m88k_builtin_saveregs () *** 2592,2628 **** variable_args_p = 1; fixed = 0; ! if (CONSTANT_P (current_function_arg_offset_rtx)) ! { ! fixed = (XINT (current_function_arg_offset_rtx, 0) ! + argadj) / UNITS_PER_WORD; ! } /* Allocate the register space, and store it as the __va_reg member. */ addr = assign_stack_local (BLKmode, 8 * UNITS_PER_WORD, -1); ! MEM_ALIAS_SET (addr) = get_varargs_alias_set (); RTX_UNCHANGING_P (addr) = 1; RTX_UNCHANGING_P (XEXP (addr, 0)) = 1; /* Now store the incoming registers. */ if (fixed < 8) ! { ! dest = change_address (addr, Pmode, ! plus_constant (XEXP (addr, 0), ! fixed * UNITS_PER_WORD)); ! move_block_from_reg (2 + fixed, dest, 8 - fixed, ! UNITS_PER_WORD * (8 - fixed)); ! ! if (current_function_check_memory_usage) ! { ! emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3, ! dest, ptr_mode, ! GEN_INT (UNITS_PER_WORD * (8 - fixed)), ! TYPE_MODE (sizetype), ! GEN_INT (MEMORY_USE_RW), ! TYPE_MODE (integer_type_node)); ! } ! } /* Return the address of the save area, but don't put it in a register. This fails when not optimizing and produces worse code --- 2627,2648 ---- variable_args_p = 1; fixed = 0; ! if (GET_CODE (current_function_arg_offset_rtx) == CONST_INT) ! fixed = ((INTVAL (current_function_arg_offset_rtx) + argadj) ! / UNITS_PER_WORD); /* Allocate the register space, and store it as the __va_reg member. */ addr = assign_stack_local (BLKmode, 8 * UNITS_PER_WORD, -1); ! set_mem_alias_set (addr, get_varargs_alias_set ()); RTX_UNCHANGING_P (addr) = 1; RTX_UNCHANGING_P (XEXP (addr, 0)) = 1; /* Now store the incoming registers. */ if (fixed < 8) ! move_block_from_reg (2 + fixed, ! adjust_address (addr, Pmode, fixed * UNITS_PER_WORD), ! 8 - fixed, ! UNITS_PER_WORD * (8 - fixed)); /* Return the address of the save area, but don't put it in a register. This fails when not optimizing and produces worse code *************** print_operand (file, x, code) *** 2859,2865 **** if (sequencep) { if (code < 'B' || code > 'E') ! output_operand_lossage ("%R not followed by %B/C/D/E"); if (reversep) xc = reverse_condition (xc); sequencep = 0; --- 2879,2885 ---- if (sequencep) { if (code < 'B' || code > 'E') ! output_operand_lossage ("%%R not followed by %%B/C/D/E"); if (reversep) xc = reverse_condition (xc); sequencep = 0; *************** print_operand (file, x, code) *** 2927,2969 **** value >>= 16; case 'x': /* print the lower 16 bits of the integer constant in hex */ if (xc != CONST_INT) ! output_operand_lossage ("invalid %x/X value"); fprintf (file, "0x%x", value & 0xffff); return; case 'H': /* print the low 16 bits of the negated integer constant */ if (xc != CONST_INT) ! output_operand_lossage ("invalid %H value"); value = -value; case 'h': /* print the register or low 16 bits of the integer constant */ if (xc == REG) goto reg; if (xc != CONST_INT) ! output_operand_lossage ("invalid %h value"); fprintf (file, "%d", value & 0xffff); return; case 'Q': /* print the low 8 bits of the negated integer constant */ if (xc != CONST_INT) ! output_operand_lossage ("invalid %Q value"); value = -value; case 'q': /* print the register or low 8 bits of the integer constant */ if (xc == REG) goto reg; if (xc != CONST_INT) ! output_operand_lossage ("invalid %q value"); fprintf (file, "%d", value & 0xff); return; case 'w': /* print the integer constant (X == 32 ? 0 : 32 - X) */ if (xc != CONST_INT) ! output_operand_lossage ("invalid %o value"); fprintf (file, "%d", value == 32 ? 0 : 32 - value); return; case 'p': /* print the logarithm of the integer constant */ if (xc != CONST_INT || (value = exact_log2 (value)) < 0) ! output_operand_lossage ("invalid %p value"); fprintf (file, "%d", value); return; --- 2947,2989 ---- value >>= 16; case 'x': /* print the lower 16 bits of the integer constant in hex */ if (xc != CONST_INT) ! output_operand_lossage ("invalid %%x/X value"); fprintf (file, "0x%x", value & 0xffff); return; case 'H': /* print the low 16 bits of the negated integer constant */ if (xc != CONST_INT) ! output_operand_lossage ("invalid %%H value"); value = -value; case 'h': /* print the register or low 16 bits of the integer constant */ if (xc == REG) goto reg; if (xc != CONST_INT) ! output_operand_lossage ("invalid %%h value"); fprintf (file, "%d", value & 0xffff); return; case 'Q': /* print the low 8 bits of the negated integer constant */ if (xc != CONST_INT) ! output_operand_lossage ("invalid %%Q value"); value = -value; case 'q': /* print the register or low 8 bits of the integer constant */ if (xc == REG) goto reg; if (xc != CONST_INT) ! output_operand_lossage ("invalid %%q value"); fprintf (file, "%d", value & 0xff); return; case 'w': /* print the integer constant (X == 32 ? 0 : 32 - X) */ if (xc != CONST_INT) ! output_operand_lossage ("invalid %%o value"); fprintf (file, "%d", value == 32 ? 0 : 32 - value); return; case 'p': /* print the logarithm of the integer constant */ if (xc != CONST_INT || (value = exact_log2 (value)) < 0) ! output_operand_lossage ("invalid %%p value"); fprintf (file, "%d", value); return; *************** print_operand (file, x, code) *** 2976,2987 **** register int top, bottom; if (xc != CONST_INT) ! output_operand_lossage ("invalid %s/S value"); /* All the "one" bits must be contiguous. If so, MASK will be a power of two or zero. */ mask = (uval | (uval - 1)) + 1; if (!(uval && POWER_OF_2_or_0 (mask))) ! output_operand_lossage ("invalid %s/S value"); top = mask ? exact_log2 (mask) : 32; bottom = exact_log2 (uval & ~(uval - 1)); fprintf (file,"%d<%d>", top - bottom, bottom); --- 2996,3007 ---- register int top, bottom; if (xc != CONST_INT) ! output_operand_lossage ("invalid %%s/S value"); /* All the "one" bits must be contiguous. If so, MASK will be a power of two or zero. */ mask = (uval | (uval - 1)) + 1; if (!(uval && POWER_OF_2_or_0 (mask))) ! output_operand_lossage ("invalid %%s/S value"); top = mask ? exact_log2 (mask) : 32; bottom = exact_log2 (uval & ~(uval - 1)); fprintf (file,"%d<%d>", top - bottom, bottom); *************** print_operand (file, x, code) *** 2992,2998 **** if (xc == LABEL_REF) output_addr_const (file, x); else if (xc != PC) ! output_operand_lossage ("invalid %P operand"); return; case 'L': /* print 0 or 1 if operand is label_ref and then... */ --- 3012,3018 ---- if (xc == LABEL_REF) output_addr_const (file, x); else if (xc != PC) ! output_operand_lossage ("invalid %%P operand"); return; case 'L': /* print 0 or 1 if operand is label_ref and then... */ *************** print_operand (file, x, code) *** 3023,3029 **** case LE: fputs ("le0", file); return; case LT: fputs ("lt0", file); return; case GE: fputs ("ge0", file); return; ! default: output_operand_lossage ("invalid %B value"); } case 'C': /* bb0/bb1 branch values for comparisons */ --- 3043,3049 ---- case LE: fputs ("le0", file); return; case LT: fputs ("lt0", file); return; case GE: fputs ("ge0", file); return; ! default: output_operand_lossage ("invalid %%B value"); } case 'C': /* bb0/bb1 branch values for comparisons */ *************** print_operand (file, x, code) *** 3040,3046 **** case LEU: fputs ("ls", file); return; case LTU: fputs ("lo", file); return; case GEU: fputs ("hs", file); return; ! default: output_operand_lossage ("invalid %C value"); } case 'D': /* bcnd branch values for float comparisons */ --- 3060,3066 ---- case LEU: fputs ("ls", file); return; case LTU: fputs ("lo", file); return; case GEU: fputs ("hs", file); return; ! default: output_operand_lossage ("invalid %%C value"); } case 'D': /* bcnd branch values for float comparisons */ *************** print_operand (file, x, code) *** 3053,3059 **** case LE: fputs ("0xe", file); return; case LT: fputs ("0x4", file); return; case GE: fputs ("0xb", file); return; ! default: output_operand_lossage ("invalid %D value"); } case 'E': /* bcnd branch values for special integers */ --- 3073,3079 ---- case LE: fputs ("0xe", file); return; case LT: fputs ("0x4", file); return; case GE: fputs ("0xb", file); return; ! default: output_operand_lossage ("invalid %%D value"); } case 'E': /* bcnd branch values for special integers */ *************** print_operand (file, x, code) *** 3061,3072 **** { case EQ: fputs ("0x8", file); return; case NE: fputs ("0x7", file); return; ! default: output_operand_lossage ("invalid %E value"); } case 'd': /* second register of a two register pair */ if (xc != REG) ! output_operand_lossage ("`%d' operand isn't a register"); fputs (reg_names[REGNO (x) + 1], file); return; --- 3081,3092 ---- { case EQ: fputs ("0x8", file); return; case NE: fputs ("0x7", file); return; ! default: output_operand_lossage ("invalid %%E value"); } case 'd': /* second register of a two register pair */ if (xc != REG) ! output_operand_lossage ("`%%d' operand isn't a register"); fputs (reg_names[REGNO (x) + 1], file); return; *************** print_operand (file, x, code) *** 3077,3083 **** return; } else if (xc != REG) ! output_operand_lossage ("invalid %r value"); case 0: name: if (xc == REG) --- 3097,3103 ---- return; } else if (xc != REG) ! output_operand_lossage ("invalid %%r value"); case 0: name: if (xc == REG) *************** symbolic_operand (op, mode) *** 3269,3271 **** --- 3289,3349 ---- return 0; } } + + #if defined (CTOR_LIST_BEGIN) && !defined (OBJECT_FORMAT_ELF) + static void + m88k_svr3_asm_out_constructor (symbol, priority) + rtx symbol; + int priority ATTRIBUTE_UNUSED; + { + const char *name = XSTR (symbol, 0); + + init_section (); + fprintf (asm_out_file, "\tor.u\t r13,r0,hi16("); + assemble_name (asm_out_file, name); + fprintf (asm_out_file, ")\n\tor\t r13,r13,lo16("); + assemble_name (asm_out_file, name); + fprintf (asm_out_file, ")\n\tsubu\t r31,r31,%d\n\tst\t r13,r31,%d\n", + STACK_BOUNDARY / BITS_PER_UNIT, REG_PARM_STACK_SPACE (0)); + } + + static void + m88k_svr3_asm_out_destructor (symbol, priority) + rtx symbol; + int priority ATTRIBUTE_UNUSED; + { + int i; + + fini_section (); + assemble_integer (symbol, UNITS_PER_WORD, BITS_PER_WORD, 1); + for (i = 1; i < 4; i++) + assemble_integer (constm1_rtx, UNITS_PER_WORD, BITS_PER_WORD, 1); + } + #endif /* INIT_SECTION_ASM_OP && ! OBJECT_FORMAT_ELF */ + + /* Adjust the cost of INSN based on the relationship between INSN that + is dependent on DEP_INSN through the dependence LINK. The default + is to make no adjustment to COST. + + On the m88k, ignore the cost of anti- and output-dependencies. On + the m88100, a store can issue two cycles before the value (not the + address) has finished computing. */ + + static int + m88k_adjust_cost (insn, link, dep, cost) + rtx insn; + rtx link; + rtx dep; + int cost; + { + if (REG_NOTE_KIND (link) != 0) + return 0; /* Anti or output dependence. */ + + if (! TARGET_88100 + && recog_memoized (insn) >= 0 + && get_attr_type (insn) == TYPE_STORE + && SET_SRC (PATTERN (insn)) == SET_DEST (PATTERN (dep))) + return cost - 4; /* 88110 store reservation station. */ + + return cost; + } diff -Nrc3pad gcc-3.0.4/gcc/config/m88k/m88k.h gcc-3.1/gcc/config/m88k/m88k.h *** gcc-3.0.4/gcc/config/m88k/m88k.h Fri Nov 10 16:01:22 2000 --- gcc-3.1/gcc/config/m88k/m88k.h Tue Jan 8 22:51:34 2002 *************** *** 1,7 **** /* Definitions of target machine for GNU compiler for Motorola m88100 in an 88open OCS/BCS environment. ! Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 ! Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com). Currently maintained by (gcc@dg-rtp.dg.com) --- 1,7 ---- /* Definitions of target machine for GNU compiler for Motorola m88100 in an 88open OCS/BCS environment. ! Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, ! 2001, 2002 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com). Currently maintained by (gcc@dg-rtp.dg.com) *************** enum m88k_instruction { *** 86,92 **** enum processor_type { PROCESSOR_M88100, PROCESSOR_M88110, ! PROCESSOR_M88000, }; /* Recast the cpu class to be the cpu attribute. */ --- 86,92 ---- enum processor_type { PROCESSOR_M88100, PROCESSOR_M88110, ! PROCESSOR_M88000 }; /* Recast the cpu class to be the cpu attribute. */ *************** extern int flag_pic; /* -fpic */ *** 292,302 **** { \ const char *p = m88k_short_data; \ while (*p) \ ! if (*p >= '0' && *p <= '9') \ p++; \ else \ { \ ! error ("Invalid option `-mshort-data-%s'", m88k_short_data); \ break; \ } \ m88k_gp_threshold = atoi (m88k_short_data); \ --- 292,302 ---- { \ const char *p = m88k_short_data; \ while (*p) \ ! if (ISDIGIT (*p)) \ p++; \ else \ { \ ! error ("invalid option `-mshort-data-%s'", m88k_short_data); \ break; \ } \ m88k_gp_threshold = atoi (m88k_short_data); \ *************** extern int flag_pic; /* -fpic */ *** 690,697 **** write-over scoreboard delays between caller and callee. */ #define ORDER_REGS_FOR_LOCAL_ALLOC \ { \ ! static int leaf[] = REG_LEAF_ALLOC_ORDER; \ ! static int nonleaf[] = REG_ALLOC_ORDER; \ \ memcpy (reg_alloc_order, regs_ever_live[1] ? nonleaf : leaf, \ FIRST_PSEUDO_REGISTER * sizeof (int)); \ --- 690,697 ---- write-over scoreboard delays between caller and callee. */ #define ORDER_REGS_FOR_LOCAL_ALLOC \ { \ ! static const int leaf[] = REG_LEAF_ALLOC_ORDER; \ ! static const int nonleaf[] = REG_ALLOC_ORDER; \ \ memcpy (reg_alloc_order, regs_ever_live[1] ? nonleaf : leaf, \ FIRST_PSEUDO_REGISTER * sizeof (int)); \ *************** enum reg_class { NO_REGS, AP_REG, XRF_RE *** 1046,1057 **** #define EXPAND_BUILTIN_VA_ARG(valist, type) \ m88k_va_arg (valist, type) - /* Generate the assembly code for function entry. */ - #define FUNCTION_PROLOGUE(FILE, SIZE) m88k_begin_prologue(FILE, SIZE) - - /* Perform special actions at the point where the prologue ends. */ - #define FUNCTION_END_PROLOGUE(FILE) m88k_end_prologue(FILE) - /* Output assembler code to FILE to increment profiler label # LABELNO for profiling a function entry. Redefined in sysv3.h, sysv4.h and dgux.h. */ --- 1046,1051 ---- *************** enum reg_class { NO_REGS, AP_REG, XRF_RE *** 1083,1094 **** No definition is equivalent to always zero. */ #define EXIT_IGNORE_STACK (1) - /* Generate the assembly code for function exit. */ - #define FUNCTION_EPILOGUE(FILE, SIZE) m88k_end_epilogue(FILE, SIZE) - - /* Perform special actions at the point where the epilogue begins. */ - #define FUNCTION_BEGIN_EPILOGUE(FILE) m88k_begin_epilogue(FILE) - /* Value should be nonzero if functions must have frame pointers. Zero means the frame pointer need not be set up (and parms may be accessed via the stack pointer) in functions that seem suitable. --- 1077,1082 ---- *************** enum reg_class { NO_REGS, AP_REG, XRF_RE *** 1166,1174 **** /* Restore r10 and load the static chain register. */ \ fprintf (FILE, "\tld.d\t %s,%s,24\n", reg_names[10], reg_names[10]); \ /* Storage: r10 save area, static chain, function address. */ \ ! ASM_OUTPUT_INT (FILE, const0_rtx); \ ! ASM_OUTPUT_INT (FILE, const0_rtx); \ ! ASM_OUTPUT_INT (FILE, const0_rtx); \ } /* Length in units of the trampoline for entering a nested function. --- 1154,1162 ---- /* Restore r10 and load the static chain register. */ \ fprintf (FILE, "\tld.d\t %s,%s,24\n", reg_names[10], reg_names[10]); \ /* Storage: r10 save area, static chain, function address. */ \ ! assemble_aligned_integer (UNITS_PER_WORD, const0_rtx); \ ! assemble_aligned_integer (UNITS_PER_WORD, const0_rtx); \ ! assemble_aligned_integer (UNITS_PER_WORD, const0_rtx); \ } /* Length in units of the trampoline for entering a nested function. *************** enum reg_class { NO_REGS, AP_REG, XRF_RE *** 1485,1496 **** win very much though. */ #define CASE_VALUES_THRESHOLD (TARGET_88100 ? 4 : 7) - /* Specify the tree operation to be used to convert reals to integers. */ - #define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR - - /* This is the kind of divide that is easiest to do in the general case. */ - #define EASY_DIV_EXPR TRUNC_DIV_EXPR - /* Define this as 1 if `char' should by default be signed; else as 0. */ #define DEFAULT_SIGNED_CHAR 1 --- 1473,1478 ---- *************** enum reg_class { NO_REGS, AP_REG, XRF_RE *** 1567,1585 **** else if (GET_CODE (RTX) == NOTE \ && NOTE_LINE_NUMBER (RTX) == NOTE_INSN_PROLOGUE_END) \ { \ ! if (profile_block_flag) \ ! LENGTH += FUNCTION_BLOCK_PROFILER_LENGTH; \ ! if (profile_flag) \ LENGTH += (FUNCTION_PROFILER_LENGTH + REG_PUSH_LENGTH \ + REG_POP_LENGTH); \ } \ - else if (profile_block_flag \ - && (GET_CODE (RTX) == CODE_LABEL \ - || GET_CODE (RTX) == JUMP_INSN \ - || (GET_CODE (RTX) == INSN \ - && GET_CODE (PATTERN (RTX)) == SEQUENCE \ - && GET_CODE (XVECEXP (PATTERN (RTX), 0, 0)) == JUMP_INSN)))\ - LENGTH += BLOCK_PROFILER_LENGTH; /* Track the state of the last volatile memory reference. Clear the state with CC_STATUS_INIT for now. */ --- 1549,1558 ---- else if (GET_CODE (RTX) == NOTE \ && NOTE_LINE_NUMBER (RTX) == NOTE_INSN_PROLOGUE_END) \ { \ ! if (current_function_profile) \ LENGTH += (FUNCTION_PROFILER_LENGTH + REG_PUSH_LENGTH \ + REG_POP_LENGTH); \ } \ /* Track the state of the last volatile memory reference. Clear the state with CC_STATUS_INIT for now. */ *************** enum reg_class { NO_REGS, AP_REG, XRF_RE *** 1650,1672 **** /* Provide the cost of a branch. Exact meaning under development. */ #define BRANCH_COST (TARGET_88100 ? 1 : 2) - /* A C statement (sans semicolon) to update the integer variable COST - based on the relationship between INSN that is dependent on - DEP_INSN through the dependence LINK. The default is to make no - adjustment to COST. On the m88k, ignore the cost of anti- and - output-dependencies. On the m88100, a store can issue two cycles - before the value (not the address) has finished computing. */ - #define ADJUST_COST(INSN,LINK,DEP_INSN,COST) \ - do { \ - if (REG_NOTE_KIND (LINK) != 0) \ - (COST) = 0; /* Anti or output dependence. */ \ - else if (! TARGET_88100 \ - && recog_memoized (INSN) >= 0 \ - && get_attr_type (INSN) == TYPE_STORE \ - && SET_SRC (PATTERN (INSN)) == SET_DEST (PATTERN (DEP_INSN))) \ - (COST) -= 4; /* 88110 store reservation station. */ \ - } while (0) - /* Do not break .stabs pseudos into continuations. */ #define DBX_CONTIN_LENGTH 0 --- 1623,1628 ---- *************** enum reg_class { NO_REGS, AP_REG, XRF_RE *** 1680,1691 **** #define ASM_COMMENT_START ";" /* Allow pseudo-ops to be overridden. Override these in svr[34].h. */ - #undef INT_ASM_OP #undef ASCII_DATA_ASM_OP #undef CONST_SECTION_ASM_OP #undef CTORS_SECTION_ASM_OP #undef DTORS_SECTION_ASM_OP ! #undef ASM_OUTPUT_SECTION_NAME #undef INIT_SECTION_ASM_OP #undef FINI_SECTION_ASM_OP #undef TYPE_ASM_OP --- 1636,1646 ---- #define ASM_COMMENT_START ";" /* Allow pseudo-ops to be overridden. Override these in svr[34].h. */ #undef ASCII_DATA_ASM_OP #undef CONST_SECTION_ASM_OP #undef CTORS_SECTION_ASM_OP #undef DTORS_SECTION_ASM_OP ! #undef TARGET_ASM_NAMED_SECTION #undef INIT_SECTION_ASM_OP #undef FINI_SECTION_ASM_OP #undef TYPE_ASM_OP *************** enum reg_class { NO_REGS, AP_REG, XRF_RE *** 1726,1735 **** #define BSS_ASM_OP "\tbss\t" #define FLOAT_ASM_OP "\tfloat\t" #define DOUBLE_ASM_OP "\tdouble\t" - #define INT_ASM_OP "\tword\t" - #define ASM_LONG INT_ASM_OP - #define SHORT_ASM_OP "\thalf\t" - #define CHAR_ASM_OP "\tbyte\t" #define ASCII_DATA_ASM_OP "\tstring\t" /* These are particular to the global pool optimization. */ --- 1681,1686 ---- *************** enum reg_class { NO_REGS, AP_REG, XRF_RE *** 1755,1762 **** /* These are specific to version 03.00 assembler syntax. */ #define INTERNAL_ASM_OP "\tlocal\t" #define VERSION_ASM_OP "\tversion\t" - #define UNALIGNED_SHORT_ASM_OP "\tuahalf\t" - #define UNALIGNED_INT_ASM_OP "\tuaword\t" #define PUSHSECTION_ASM_OP "\tsection\t" #define POPSECTION_ASM_OP "\tprevious" --- 1706,1711 ---- *************** enum reg_class { NO_REGS, AP_REG, XRF_RE *** 1892,1900 **** #define ADDITIONAL_REGISTER_NAMES {{"psr", 0}, {"cc", 0}} - /* How to renumber registers for dbx and gdb. */ - #define DBX_REGISTER_NUMBER(REGNO) (REGNO) - /* Tell when to declare ASM names. Override svr4.h to provide this hook. */ #undef DECLARE_ASM_NAME #define DECLARE_ASM_NAME TARGET_SVR4 --- 1841,1846 ---- *************** do { \ *** 2034,2118 **** #undef ASM_GENERATE_INTERNAL_LABEL #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ ! sprintf (LABEL, TARGET_SVR4 ? "*.%s%d" : "*@%s%d", PREFIX, NUM) ! ! /* Internal macro to get a single precision floating point value into ! an int, so we can print its value in hex. */ ! #define FLOAT_TO_INT_INTERNAL( FVALUE, IVALUE ) \ ! { union { \ ! REAL_VALUE_TYPE d; \ ! struct { \ ! unsigned sign : 1; \ ! unsigned exponent1 : 1; \ ! unsigned exponent2 : 3; \ ! unsigned exponent3 : 7; \ ! unsigned mantissa1 : 20; \ ! unsigned mantissa2 : 3; \ ! unsigned mantissa3 : 29; \ ! } s; \ ! } _u; \ ! \ ! union { \ ! int i; \ ! struct { \ ! unsigned sign : 1; \ ! unsigned exponent1 : 1; \ ! unsigned exponent3 : 7; \ ! unsigned mantissa1 : 20; \ ! unsigned mantissa2 : 3; \ ! } s; \ ! } _u2; \ ! \ ! _u.d = REAL_VALUE_TRUNCATE (SFmode, FVALUE); \ ! _u2.s.sign = _u.s.sign; \ ! _u2.s.exponent1 = _u.s.exponent1; \ ! _u2.s.exponent3 = _u.s.exponent3; \ ! _u2.s.mantissa1 = _u.s.mantissa1; \ ! _u2.s.mantissa2 = _u.s.mantissa2; \ ! IVALUE = _u2.i; \ ! } ! ! /* This is how to output an assembler line defining a `double' constant. ! Use "word" pseudos to avoid printing NaNs, infinity, etc. */ ! #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ ! do { \ ! union { REAL_VALUE_TYPE d; long l[2]; } x; \ ! x.d = (VALUE); \ ! fprintf (FILE, "%s0x%.8lx, 0x%.8lx\n", INT_ASM_OP, \ ! (long) x.l[0], (long) x.l[1]); \ ! } while (0) ! ! /* This is how to output an assembler line defining a `float' constant. */ ! #define ASM_OUTPUT_FLOAT(FILE,VALUE) \ ! do { \ ! int i; \ ! FLOAT_TO_INT_INTERNAL (VALUE, i); \ ! fprintf (FILE, "%s0x%.8x\n", INT_ASM_OP, i); \ ! } while (0) ! ! /* Likewise for `int', `short', and `char' constants. */ ! #define ASM_OUTPUT_INT(FILE,VALUE) \ ! ( fprintf (FILE, "%s", INT_ASM_OP), \ ! output_addr_const (FILE, (VALUE)), \ ! fprintf (FILE, "\n")) ! ! #define ASM_OUTPUT_SHORT(FILE,VALUE) \ ! ( fprintf (FILE, "%s", SHORT_ASM_OP), \ ! output_addr_const (FILE, (VALUE)), \ ! fprintf (FILE, "\n")) ! ! #define ASM_OUTPUT_CHAR(FILE,VALUE) \ ! ( fprintf (FILE, "%s", CHAR_ASM_OP), \ ! output_addr_const (FILE, (VALUE)), \ ! fprintf (FILE, "\n")) ! ! /* This is how to output an assembler line for a numeric constant byte. */ ! #define ASM_OUTPUT_BYTE(FILE,VALUE) \ ! fprintf (FILE, "%s0x%x\n", CHAR_ASM_OP, (VALUE)) /* The single-byte pseudo-op is the default. Override svr[34].h. */ - #undef ASM_BYTE_OP - #define ASM_BYTE_OP "\tbyte\t" #undef ASM_OUTPUT_ASCII #define ASM_OUTPUT_ASCII(FILE, P, SIZE) \ output_ascii (FILE, ASCII_DATA_ASM_OP, 48, P, SIZE) --- 1980,1988 ---- #undef ASM_GENERATE_INTERNAL_LABEL #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ ! sprintf (LABEL, TARGET_SVR4 ? "*.%s%ld" : "*@%s%ld", PREFIX, (long)(NUM)) /* The single-byte pseudo-op is the default. Override svr[34].h. */ #undef ASM_OUTPUT_ASCII #define ASM_OUTPUT_ASCII(FILE, P, SIZE) \ output_ascii (FILE, ASCII_DATA_ASM_OP, 48, P, SIZE) *************** do { \ *** 2233,2252 **** /* Length in instructions of the code output by ASM_OUTPUT_REG_POP. */ #define REG_POP_LENGTH 2 - - /* Define the parentheses used to group arithmetic operations - in assembler code. */ - #define ASM_OPEN_PAREN "(" - #define ASM_CLOSE_PAREN ")" - - /* Define results of standard character escape sequences. */ - #define TARGET_BELL 007 - #define TARGET_BS 010 - #define TARGET_TAB 011 - #define TARGET_NEWLINE 012 - #define TARGET_VT 013 - #define TARGET_FF 014 - #define TARGET_CR 015 /* Macros to deal with OCS debug information */ --- 2103,2108 ---- *************** do { \ *** 2464,2478 **** #if defined(USING_SVR4_H) ! #define EXTRA_SECTIONS in_const, in_tdesc, in_sdata, in_ctors, in_dtors #define INIT_SECTION_FUNCTION #define FINI_SECTION_FUNCTION #else #if defined(USING_SVR3_H) ! #define EXTRA_SECTIONS in_const, in_tdesc, in_sdata, in_ctors, in_dtors, \ ! in_init, in_fini #else /* luna or other not based on svr[34].h. */ --- 2320,2333 ---- #if defined(USING_SVR4_H) ! #define EXTRA_SECTIONS in_const, in_tdesc, in_sdata #define INIT_SECTION_FUNCTION #define FINI_SECTION_FUNCTION #else #if defined(USING_SVR3_H) ! #define EXTRA_SECTIONS in_const, in_tdesc, in_sdata, in_init, in_fini #else /* luna or other not based on svr[34].h. */ *************** const_section () \ *** 2484,2491 **** { \ text_section(); \ } - #define CTORS_SECTION_FUNCTION - #define DTORS_SECTION_FUNCTION #define INIT_SECTION_FUNCTION #define FINI_SECTION_FUNCTION --- 2339,2344 ---- *************** sdata_section () \ *** 2516,2523 **** } \ } \ \ - CTORS_SECTION_FUNCTION \ - DTORS_SECTION_FUNCTION \ INIT_SECTION_FUNCTION \ FINI_SECTION_FUNCTION --- 2369,2374 ---- *************** sdata_section () \ *** 2528,2534 **** For strings, the section is selected before the segment info is encoded. */ #undef SELECT_SECTION ! #define SELECT_SECTION(DECL,RELOC) \ { \ if (TREE_CODE (DECL) == STRING_CST) \ { \ --- 2379,2385 ---- For strings, the section is selected before the segment info is encoded. */ #undef SELECT_SECTION ! #define SELECT_SECTION(DECL,RELOC,ALIGN) \ { \ if (TREE_CODE (DECL) == STRING_CST) \ { \ diff -Nrc3pad gcc-3.0.4/gcc/config/m88k/m88k.md gcc-3.1/gcc/config/m88k/m88k.md *** gcc-3.0.4/gcc/config/m88k/m88k.md Fri Nov 10 16:01:22 2000 --- gcc-3.1/gcc/config/m88k/m88k.md Wed Nov 21 04:57:09 2001 *************** *** 2013,2019 **** ; case 0: ; return \"or %0,%#r0,0\;or %d0,%#r0,0\"; ; case 1: ! ; operands[1] = adj_offsettable_operand (operands[0], 4); ; return \"%v0st\\t %#r0,%0\;st %#r0,%1\"; ; } ;}") --- 2013,2019 ---- ; case 0: ; return \"or %0,%#r0,0\;or %d0,%#r0,0\"; ; case 1: ! ; operands[1] = adjust_address (operands[0], SImode, 4); ; return \"%v0st\\t %#r0,%0\;st %#r0,%1\"; ; } ;}") *************** *** 2295,2304 **** ;;- sign extension instructions (define_expand "extendsidi2" ! [(set (subreg:SI (match_operand:DI 0 "register_operand" "=r") 1) (match_operand:SI 1 "general_operand" "g")) (set (subreg:SI (match_dup 0) 0) ! (ashiftrt:SI (subreg:SI (match_dup 0) 1) (const_int 31)))] "" "") --- 2295,2304 ---- ;;- sign extension instructions (define_expand "extendsidi2" ! [(set (subreg:SI (match_operand:DI 0 "register_operand" "=r") 4) (match_operand:SI 1 "general_operand" "g")) (set (subreg:SI (match_dup 0) 0) ! (ashiftrt:SI (subreg:SI (match_dup 0) 4) (const_int 31)))] "" "") *************** *** 2931,2937 **** rtx label1 = gen_label_rtx (); rtx label2 = gen_label_rtx (); rtx label3 = gen_label_rtx (); ! rtx label4; emit_insn (gen_negsi2 (neg_op2, op2)); emit_insn (gen_cmpsi (op2, const0_rtx)); --- 2931,2937 ---- rtx label1 = gen_label_rtx (); rtx label2 = gen_label_rtx (); rtx label3 = gen_label_rtx (); ! rtx label4 = NULL_RTX; emit_insn (gen_negsi2 (neg_op2, op2)); emit_insn (gen_cmpsi (op2, const0_rtx)); *************** *** 3799,3805 **** register rtx index_diff = gen_reg_rtx (SImode); register rtx low = GEN_INT (-INTVAL (operands[1])); register rtx label = gen_rtx_LABEL_REF (Pmode, operands[3]); ! register rtx base; if (! CASE_VECTOR_INSNS) /* These instructions are likely to be scheduled and made loop invariant. --- 3799,3805 ---- register rtx index_diff = gen_reg_rtx (SImode); register rtx low = GEN_INT (-INTVAL (operands[1])); register rtx label = gen_rtx_LABEL_REF (Pmode, operands[3]); ! register rtx base = NULL_RTX; if (! CASE_VECTOR_INSNS) /* These instructions are likely to be scheduled and made loop invariant. diff -Nrc3pad gcc-3.0.4/gcc/config/m88k/sysv3.h gcc-3.1/gcc/config/m88k/sysv3.h *** gcc-3.0.4/gcc/config/m88k/sysv3.h Thu Nov 2 23:29:11 2000 --- gcc-3.1/gcc/config/m88k/sysv3.h Thu Aug 9 22:33:27 2001 *************** Boston, MA 02111-1307, USA. */ *** 76,95 **** asm ("\tst\t r0,r31,32"); /* REG_PARM_STACK_SPACE (0) == 32 */ #define CTOR_LIST_END ! /* ASM_OUTPUT_CONSTRUCTOR outputs code into the .init section to push the ! address of the constructor. This becomes the body of __do_global_ctors ! in crtstuff.c. r13 is a temporary register. */ ! #undef ASM_OUTPUT_CONSTRUCTOR ! #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ ! do { \ ! init_section (); \ ! fprintf (FILE, "\tor.u\t r13,r0,hi16("); \ ! assemble_name (FILE, NAME); \ ! fprintf (FILE, ")\n\tor\t r13,r13,lo16("); \ ! assemble_name (FILE, NAME); \ ! fprintf (FILE, ")\n\tsubu\t r31,r31,%d\n\tst\t r13,r31,%d\n", \ ! STACK_BOUNDARY / BITS_PER_UNIT, REG_PARM_STACK_SPACE (0)); \ ! } while (0) #undef DO_GLOBAL_CTORS_BODY #define DO_GLOBAL_CTORS_BODY \ --- 76,83 ---- asm ("\tst\t r0,r31,32"); /* REG_PARM_STACK_SPACE (0) == 32 */ #define CTOR_LIST_END ! #define TARGET_ASM_CONSTRUCTOR m88k_svr3_asm_out_constructor ! #define TARGET_ASM_DESTRUCTOR m88k_svr3_asm_out_destructor #undef DO_GLOBAL_CTORS_BODY #define DO_GLOBAL_CTORS_BODY \ *************** do { \ *** 108,132 **** func_ptr __DTOR_END__[4] = { (func_ptr) 0, (func_ptr) 0, \ (func_ptr) 0, (func_ptr) 0 } - /* A C statement (sans semicolon) to output an element in the table of - global destructors. The table is constructed in the .fini section - so that an explicit linker script is not required. The complication - is that this section is padded with NOP instructions and to either - 8 or 16 byte alignment depending on the specific system. A clever - way to avoid trouble is to output a block of 16 bytes where the - extra words are known values (-1). */ - #undef ASM_OUTPUT_DESTRUCTOR - #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \ - do { \ - register int i; \ - fini_section (); \ - fprintf (FILE, "\t%s\t ", ASM_LONG); \ - assemble_name (FILE,NAME); \ - fprintf (FILE, "\n"); \ - for (i = 1; i < 4; i++) \ - fprintf (FILE, "\t%s\t -1\n", ASM_LONG); \ - } while (0) - /* Walk the list looking for the terminating zero and ignoring all values of -1. */ #undef DO_GLOBAL_DTORS_BODY --- 96,101 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m88k/sysv4.h gcc-3.1/gcc/config/m88k/sysv4.h *** gcc-3.0.4/gcc/config/m88k/sysv4.h Thu Nov 2 23:29:11 2000 --- gcc-3.1/gcc/config/m88k/sysv4.h Fri Oct 19 22:27:33 2001 *************** *** 1,6 **** /* Definitions of target machine for GNU compiler. Motorola 88100 in an 88open ABI environment. ! Copyright (C) 1990, 1991, 2000 Free Software Foundation, Inc. Written by Ron Guilmette (rfg@netcom.com). Contributed to FSF by Network Computing Devices. --- 1,6 ---- /* Definitions of target machine for GNU compiler. Motorola 88100 in an 88open ABI environment. ! Copyright (C) 1990, 1991, 2000, 2001 Free Software Foundation, Inc. Written by Ron Guilmette (rfg@netcom.com). Contributed to FSF by Network Computing Devices. *************** Boston, MA 02111-1307, USA. */ *** 33,39 **** #define AS_BUG_POUND_TYPE #endif ! #include "svr4.h" #include "m88k/m88k.h" /* Identify the compiler. */ --- 33,39 ---- #define AS_BUG_POUND_TYPE #endif ! /* TODO: convert includes to ${tm_file} list in config.gcc. */ #include "m88k/m88k.h" /* Identify the compiler. */ diff -Nrc3pad gcc-3.0.4/gcc/config/m88k/t-bug gcc-3.1/gcc/config/m88k/t-bug *** gcc-3.0.4/gcc/config/m88k/t-bug Wed Dec 16 21:08:28 1998 --- gcc-3.1/gcc/config/m88k/t-bug Thu May 17 03:16:02 2001 *************** $(MOVE_ASM): $(srcdir)/config/m88k/m88k- *** 8,12 **** $(srcdir)/config/m88k/m88k-move.sh LIB2FUNCS_EXTRA = $(MOVE_ASM) - LIBGCC1 = libgcc1.null - CROSS_LIBGCC1 = libgcc1.null --- 8,10 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m88k/t-dgux gcc-3.1/gcc/config/m88k/t-dgux *** gcc-3.0.4/gcc/config/m88k/t-dgux Wed Dec 16 21:08:29 1998 --- gcc-3.1/gcc/config/m88k/t-dgux Thu Nov 15 13:05:54 2001 *************** $(MOVE_ASM): $(srcdir)/config/m88k/m88k- *** 8,15 **** $(srcdir)/config/m88k/m88k-move.sh LIB2FUNCS_EXTRA = $(MOVE_ASM) - LIBGCC1 = libgcc1.null - CROSS_LIBGCC1 = libgcc1.null # In a coff environment, a link script is required for ctors and dtors. m88kdgux.ld: $(srcdir)/config/m88k/dgux.ld --- 8,13 ---- *************** bcscrtbegin.o: crtstuff.c $(GCC_PASS *** 24,26 **** --- 22,27 ---- # Build libgcc.a, crtbegin.o, and crtend.o as bcs objects GCC_FOR_TARGET = PATH=/usr/sde/m88kbcs/usr/bin/:/usr/bin TARGET_BINARY_INTERFACE=m88kbcs ./xgcc -B./ -msvr3 -D_M88KBCS_TARGET -mno-ocs-debug-info + + # Don't run fixproto + STMP_FIXPROTO = diff -Nrc3pad gcc-3.0.4/gcc/config/m88k/t-dgux-gas gcc-3.1/gcc/config/m88k/t-dgux-gas *** gcc-3.0.4/gcc/config/m88k/t-dgux-gas Wed Dec 16 21:08:30 1998 --- gcc-3.1/gcc/config/m88k/t-dgux-gas Thu May 17 03:16:02 2001 *************** $(MOVE_ASM): $(srcdir)/config/m88k/m88k- *** 8,15 **** $(srcdir)/config/m88k/m88k-move.sh LIB2FUNCS_EXTRA = $(MOVE_ASM) - LIBGCC1 = libgcc1.null - CROSS_LIBGCC1 = libgcc1.null T_CPPFLAGS = -DUSE_GAS # In a coff environment, a link script is required. --- 8,13 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m88k/t-dguxbcs gcc-3.1/gcc/config/m88k/t-dguxbcs *** gcc-3.0.4/gcc/config/m88k/t-dguxbcs Wed Dec 16 21:08:31 1998 --- gcc-3.1/gcc/config/m88k/t-dguxbcs Thu Nov 15 13:05:54 2001 *************** *** 1,28 **** - # Specify how to create the *.asm files - - MOVE_ASM = moveHI15x.asm moveQI16x.asm moveSI46x.asm moveSI64n.asm \ - moveHI48x.asm moveSI45x.asm moveSI47x.asm moveSI96x.asm \ - moveDI96x.asm - - $(MOVE_ASM): $(srcdir)/config/m88k/m88k-move.sh - $(srcdir)/config/m88k/m88k-move.sh - - LIB2FUNCS_EXTRA = $(MOVE_ASM) - LIBGCC1 = libgcc1.null - CROSS_LIBGCC1 = libgcc1.null - - # In a coff environment, a link script is required for ctors and dtors. - m88kdgux.ld: $(srcdir)/config/m88k/dgux.ld - rm -f m88kdgux.ld; cp $(srcdir)/config/m88k/dgux.ld ./m88kdgux.ld - - # A bcs crtbegin.o is needed since bcs does not - # increment the stack pointer in the init section as elf does - bcscrtbegin.o: crtstuff.c $(GCC_PASSES) $(CONFIG_H) gbl-ctors.h - $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) -DCRT_BEGIN -DBCS \ - -finhibit-size-directive -fno-inline-functions \ - -g0 -c $(srcdir)/crtstuff.c -o bcscrtbegin.o - - # Build libgcc.a, crtbegin.o, and crtend.o as bcs objects - GCC_FOR_TARGET = PATH=/usr/sde/m88kbcs/usr/bin/:/usr/bin TARGET_BINARY_INTERFACE=m88kbcs ./xgcc -B./ -msvr3 -D_M88KBCS_TARGET -mno-ocs-debug-info - T_CFLAGS = -O -D_M88KBCS_TARGET --- 1 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m88k/t-dolph gcc-3.1/gcc/config/m88k/t-dolph *** gcc-3.0.4/gcc/config/m88k/t-dolph Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/m88k/t-dolph Thu Jan 10 22:03:05 2002 *************** *** 0 **** --- 1,7 ---- + # Use link editor directives to make NULL pointers point to + # invalid addresses. + + EXTRA_PARTS=crtbegin.o crtend.o gcc.ld + + gcc.ld: $(srcdir)/config/m88k/dolphin.ld + rm -f gcc.ld; cp $(srcdir)/config/m88k/dolphin.ld gcc.ld diff -Nrc3pad gcc-3.0.4/gcc/config/m88k/t-luna gcc-3.1/gcc/config/m88k/t-luna *** gcc-3.0.4/gcc/config/m88k/t-luna Wed Dec 16 21:08:32 1998 --- gcc-3.1/gcc/config/m88k/t-luna Thu May 17 03:16:02 2001 *************** $(MOVE_ASM): $(srcdir)/config/m88k/m88k- *** 8,12 **** $(srcdir)/config/m88k/m88k-move.sh -no-tdesc LIB2FUNCS_EXTRA = $(MOVE_ASM) - LIBGCC1 = libgcc1.null - CROSS_LIBGCC1 = libgcc1.null --- 8,10 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m88k/t-luna-gas gcc-3.1/gcc/config/m88k/t-luna-gas *** gcc-3.0.4/gcc/config/m88k/t-luna-gas Mon Feb 8 11:33:29 1999 --- gcc-3.1/gcc/config/m88k/t-luna-gas Thu May 17 03:16:02 2001 *************** $(MOVE_ASM): $(srcdir)/config/m88k/m88k- *** 8,13 **** $(SHELL) $(srcdir)/config/m88k/m88k-move.sh -no-tdesc LIB2FUNCS_EXTRA = $(MOVE_ASM) - LIBGCC1 = libgcc1.null - CROSS_LIBGCC1 = libgcc1.null T_CPPFLAGS = -DUSE_GAS --- 8,11 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m88k/t-m88k gcc-3.1/gcc/config/m88k/t-m88k *** gcc-3.0.4/gcc/config/m88k/t-m88k Wed Dec 16 21:08:34 1998 --- gcc-3.1/gcc/config/m88k/t-m88k Thu May 17 03:16:02 2001 *************** $(MOVE_ASM): $(srcdir)/config/m88k/m88k- *** 8,12 **** $(srcdir)/config/m88k/m88k-move.sh LIB2FUNCS_EXTRA = $(MOVE_ASM) - LIBGCC1 = libgcc1.null - CROSS_LIBGCC1 = libgcc1.null --- 8,10 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m88k/t-m88k-gas gcc-3.1/gcc/config/m88k/t-m88k-gas *** gcc-3.0.4/gcc/config/m88k/t-m88k-gas Wed Dec 16 21:08:35 1998 --- gcc-3.1/gcc/config/m88k/t-m88k-gas Thu May 17 03:16:02 2001 *************** $(MOVE_ASM): $(srcdir)/config/m88k/m88k- *** 8,15 **** $(srcdir)/config/m88k/m88k-move.sh LIB2FUNCS_EXTRA = $(MOVE_ASM) - LIBGCC1 = libgcc1.null - CROSS_LIBGCC1 = libgcc1.null T_CPPFLAGS = -DUSE_GAS # For svr4 we build crtbegin.o and crtend.o which serve to add begin and --- 8,13 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m88k/t-sysv4 gcc-3.1/gcc/config/m88k/t-sysv4 *** gcc-3.0.4/gcc/config/m88k/t-sysv4 Wed Dec 16 21:08:36 1998 --- gcc-3.1/gcc/config/m88k/t-sysv4 Thu May 17 03:16:02 2001 *************** $(MOVE_ASM): $(srcdir)/config/m88k/m88k- *** 10,17 **** $(srcdir)/config/m88k/m88k-move.sh -abi LIB2FUNCS_EXTRA = $(MOVE_ASM) - LIBGCC1 = libgcc1.null - CROSS_LIBGCC1 = libgcc1.null # We need to use -fPIC when we are using gcc to compile the routines in # crtstuff.c. This is only really needed when we are going to use gcc/g++ --- 10,15 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m88k/t-tekXD88 gcc-3.1/gcc/config/m88k/t-tekXD88 *** gcc-3.0.4/gcc/config/m88k/t-tekXD88 Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/m88k/t-tekXD88 Thu Jan 10 22:03:05 2002 *************** *** 0 **** --- 1,5 ---- + # Install the custom Tektronix XD88 link editor directives file. + EXTRA_PARTS=crtbegin.o crtend.o gcc.ld + + gcc.ld: $(srcdir)/config/m88k/tekXD88.ld + rm -f gcc.ld; cp $(srcdir)/config/m88k/tekXD88.ld ./gcc.ld diff -Nrc3pad gcc-3.0.4/gcc/config/m88k/x-dgux gcc-3.1/gcc/config/m88k/x-dgux *** gcc-3.0.4/gcc/config/m88k/x-dgux Wed Dec 16 21:08:39 1998 --- gcc-3.1/gcc/config/m88k/x-dgux Thu Jan 1 00:00:00 1970 *************** *** 1,6 **** - CC = gcc - BISONFLAGS = -l - USER_H = $(EXTRA_HEADERS) $(LANG_EXTRA_HEADERS) - - STMP_FIXPROTO = - X_CFLAGS = -O -mstandard -mlegend --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m88k/x-dguxbcs gcc-3.1/gcc/config/m88k/x-dguxbcs *** gcc-3.0.4/gcc/config/m88k/x-dguxbcs Wed Dec 16 21:08:41 1998 --- gcc-3.1/gcc/config/m88k/x-dguxbcs Thu Jan 1 00:00:00 1970 *************** *** 1,4 **** - CC = gcc - BISONFLAGS = -l - USER_H = $(EXTRA_HEADERS) $(LANG_EXTRA_HEADERS) - STMP_FIXPROTO = --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m88k/x-dolph gcc-3.1/gcc/config/m88k/x-dolph *** gcc-3.0.4/gcc/config/m88k/x-dolph Wed Dec 16 21:08:42 1998 --- gcc-3.1/gcc/config/m88k/x-dolph Thu Jan 1 00:00:00 1970 *************** *** 1,19 **** - # Use link editor directives to make NULL pointers point to - # invalid addresses. - - EXTRA_PARTS=crtbegin.o crtend.o gcc.ld - - gcc.ld: $(srcdir)/config/m88k/dolphin.ld - rm -f gcc.ld; cp $(srcdir)/config/m88k/dolphin.ld gcc.ld - - # Green Hills C on Dolphin UNIX System V/88 Release 3.2 Version 3.6/5.86 does - # not provide alloca. It does not harm to have it defined on version 3.8.alfa - # even though it's not needed there. - - ALLOCA=alloca.o - - # Under DolphinOS 3.8.alfa, /bin/cc defines __GNUC__, but not __m88k__, - # causing gdstarg.h to fail. Defining __m88k__ does probably not hurt on - # DolphinOS 3.6. - - X_CFLAGS =-D__m88k__ --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m88k/x-sysv3 gcc-3.1/gcc/config/m88k/x-sysv3 *** gcc-3.0.4/gcc/config/m88k/x-sysv3 Wed Dec 16 21:08:43 1998 --- gcc-3.1/gcc/config/m88k/x-sysv3 Thu Jan 1 00:00:00 1970 *************** *** 1,7 **** - # this is m88k/x-sysv3 - - # native compiler does not provide alloca - - ALLOCA = alloca.o - - # end m88k/x-sysv3 --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m88k/x-sysv4 gcc-3.1/gcc/config/m88k/x-sysv4 *** gcc-3.0.4/gcc/config/m88k/x-sysv4 Wed Dec 16 21:08:44 1998 --- gcc-3.1/gcc/config/m88k/x-sysv4 Thu Jan 1 00:00:00 1970 *************** *** 1,10 **** - # Problems in early version of the assembler have been fixed (-DNO_BUGS). - # There are peculiar problems with the include files that require __STDC__ - # to be defined as 0. This results in sigset_t being defined which otherwise - # results in a problem when includes . - - X_CFLAGS = -DNO_BUGS -D__STDC__=0 - - # The CI5 compiler does not provide alloca. - - ALLOCA = alloca.o --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m88k/x-tekXD88 gcc-3.1/gcc/config/m88k/x-tekXD88 *** gcc-3.0.4/gcc/config/m88k/x-tekXD88 Wed Dec 16 21:08:45 1998 --- gcc-3.1/gcc/config/m88k/x-tekXD88 Thu Jan 1 00:00:00 1970 *************** *** 1,12 **** - # Install the custom Tektronix XD88 link editor directives file. - EXTRA_PARTS=crtbegin.o crtend.o gcc.ld - - gcc.ld: $(srcdir)/config/m88k/tekXD88.ld - rm -f gcc.ld; cp $(srcdir)/config/m88k/tekXD88.ld ./gcc.ld - - # Green Hills C on the Tektronix XD88 does not provide alloca. - ALLOCA=alloca.o - - # rc is cleaner, but the ar program sometimes crashes. - # This is a workaround. - AR_FLAGS=qc --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m88k/xm-m88k.h gcc-3.1/gcc/config/m88k/xm-m88k.h *** gcc-3.0.4/gcc/config/m88k/xm-m88k.h Thu Mar 15 19:02:04 2001 --- gcc-3.1/gcc/config/m88k/xm-m88k.h Thu Jan 1 00:00:00 1970 *************** *** 1,56 **** - /* Configuration for GNU compiler. - Motorola m88100 in an 88open OCS/BCS environment. - Copyright (C) 1988, 1989, 1990, 1991, 1993, 1997 - 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 describes the machine the compiler is hosted on. */ - #define HOST_BITS_PER_CHAR 8 - #define HOST_BITS_PER_SHORT 16 - #define HOST_BITS_PER_INT 32 - #define HOST_BITS_PER_LONG 32 - #define HOST_BITS_PER_LONGLONG 64 - - #define HOST_WORDS_BIG_ENDIAN - - /* Arguments to use with `exit'. */ - #define SUCCESS_EXIT_CODE 0 - #define FATAL_EXIT_CODE 33 - - /* The 88open BCS (and ABI) environment doesn't support BSD features - (vfork, getrusage), so use USG. The Omron Luna/88k is BSD though. */ - #ifndef luna88k - #ifndef USG - #define USG - #endif - #endif - - /* If not compiled with GNU C, use the C alloca */ - #ifndef __GNUC__ - #define USE_C_ALLOCA - #endif - - /* For DG/UX, the best size is different. */ - #ifdef __DGUX__ - #define OBSTACK_CHUNK_SIZE (8192-16) - #endif - - /* target machine dependencies. - tm.h is a symbolic link to the actual target specific file. */ - #include "tm.h" --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m88k/xm-openbsd.h gcc-3.1/gcc/config/m88k/xm-openbsd.h *** gcc-3.0.4/gcc/config/m88k/xm-openbsd.h Wed Jul 12 19:19:18 2000 --- gcc-3.1/gcc/config/m88k/xm-openbsd.h Thu Jan 1 00:00:00 1970 *************** *** 1,22 **** - /* Configuration file for an host running m88k OpenBSD. - Copyright (C) 2000 Free Software Foundation, Inc. - - This file is part of GNU CC. - - GNU CC is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU CC is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNU CC; see the file COPYING. If not, write to - the Free Software Foundation, 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - - /* Remove base m88k idiosyncrasies. */ - #undef USG --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/m88k/xm-sysv3.h gcc-3.1/gcc/config/m88k/xm-sysv3.h *** gcc-3.0.4/gcc/config/m88k/xm-sysv3.h Tue Jan 12 04:16:46 1999 --- gcc-3.1/gcc/config/m88k/xm-sysv3.h Thu Jan 1 00:00:00 1970 *************** *** 1,28 **** - /* Configuration for GNU C-compiler. - Motorola m88100 running the AT&T/Unisoft/Motorola V.3 reference port. - Copyright (C) 1990, 1998, 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. */ - - #define R_OK 4 - #define W_OK 2 - #define X_OK 1 - #define F_OK 0 - - /* for the emacs version of alloca */ - #define STACK_DIRECTION -1 --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/mcore/gfloat.h gcc-3.1/gcc/config/mcore/gfloat.h *** gcc-3.0.4/gcc/config/mcore/gfloat.h Mon Feb 14 22:51:36 2000 --- gcc-3.1/gcc/config/mcore/gfloat.h Tue Oct 9 10:16:13 2001 *************** GNU General Public License for more deta *** 15,21 **** 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, 675 Mass Ave, Cambridge, MA 02139, USA. */ /* float.h for the M*Core microprocessor. It uses IEEE floating point. * float is 32 bit IEEE-754 format --- 15,22 ---- 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. */ /* float.h for the M*Core microprocessor. It uses IEEE floating point. * float is 32 bit IEEE-754 format diff -Nrc3pad gcc-3.0.4/gcc/config/mcore/lib1.asm gcc-3.1/gcc/config/mcore/lib1.asm *** gcc-3.0.4/gcc/config/mcore/lib1.asm Mon May 15 23:14:16 2000 --- gcc-3.1/gcc/config/mcore/lib1.asm Thu May 17 03:16:03 2001 *************** *** 1,4 **** ! /* libgcc1 routines for the MCore. Copyright (C) 1993, 1999, 2000 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- ! /* libgcc routines for the MCore. Copyright (C) 1993, 1999, 2000 Free Software Foundation, Inc. This file is part of GNU CC. diff -Nrc3pad gcc-3.0.4/gcc/config/mcore/mcore-elf.h gcc-3.1/gcc/config/mcore/mcore-elf.h *** gcc-3.0.4/gcc/config/mcore/mcore-elf.h Mon Apr 16 18:25:50 2001 --- gcc-3.1/gcc/config/mcore/mcore-elf.h Sun Jan 27 04:18:10 2002 *************** *** 1,5 **** /* Definitions of MCore target. ! Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This file is part of GNU CC. --- 1,5 ---- /* Definitions of MCore target. ! Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This file is part of GNU CC. *************** Boston, MA 02111-1307, USA. */ *** 27,35 **** #define SUBTARGET_CPP_PREDEFINES " -D__ELF__" - #include "svr4.h" - #include "mcore/mcore.h" - /* Use DWARF2 debugging info. */ #ifndef DWARF2_DEBUGGING_INFO #define DWARF2_DEBUGGING_INFO 1 --- 27,32 ---- *************** Boston, MA 02111-1307, USA. */ *** 43,65 **** #define DWARF_DEBUGGING_INFO 1 #endif - /* The numbers used to denote specific machine registers in the System V - Release 4 DWARF debugging information are quite likely to be totally - different from the numbers used in BSD stabs debugging information - for the same kind of target machine. Thus, we undefine the macro - DBX_REGISTER_NUMBER here as an extra inducement to get people to - provide proper machine-specific definitions of DBX_REGISTER_NUMBER - (which is also used to provide DWARF registers numbers in dwarfout.c) - in their tm.h files which include this file. */ - - #undef DBX_REGISTER_NUMBER - #define DBX_REGISTER_NUMBER(REGNO) (REGNO) - - /* MCore defines .long and .short to NOT force any alignment. - This lets you misalign as much as you wish. */ - #define UNALIGNED_INT_ASM_OP "\t.long\t" - #define UNALIGNED_SHORT_ASM_OP "\t.short\t" - #define EXPORTS_SECTION_ASM_OP "\t.section .exports" #define SUBTARGET_EXTRA_SECTIONS in_const, in_exports --- 40,45 ---- *************** exports_section () \ *** 178,188 **** #undef ENDFILE_SPEC #define ENDFILE_SPEC "%{!mno-lsim:-lsim} crtend.o%s crtn.o%s" - /* The subroutine calls in the .init and .fini sections create literal pools which must be jumped around... */ ! #define FORCE_INIT_SECTION_ALIGN asm ("br 1f ; .literals ; 1:") ! #define FORCE_FINI_SECTION_ALIGN asm ("br 1f ; .literals ; 1:") #undef CTORS_SECTION_ASM_OP #define CTORS_SECTION_ASM_OP "\t.section\t.ctors,\"aw\"" --- 158,166 ---- #undef ENDFILE_SPEC #define ENDFILE_SPEC "%{!mno-lsim:-lsim} crtend.o%s crtn.o%s" /* The subroutine calls in the .init and .fini sections create literal pools which must be jumped around... */ ! #define FORCE_CODE_SECTION_ALIGN asm ("br 1f ; .literals ; 1:"); #undef CTORS_SECTION_ASM_OP #define CTORS_SECTION_ASM_OP "\t.section\t.ctors,\"aw\"" diff -Nrc3pad gcc-3.0.4/gcc/config/mcore/mcore-pe.h gcc-3.1/gcc/config/mcore/mcore-pe.h *** gcc-3.0.4/gcc/config/mcore/mcore-pe.h Mon Sep 25 13:22:46 2000 --- gcc-3.1/gcc/config/mcore/mcore-pe.h Mon Mar 25 19:15:06 2002 *************** Boston, MA 02111-1307, USA. */ *** 24,29 **** --- 24,33 ---- #define SUBTARGET_CPP_PREDEFINES " -D__pe__" + /* The MCore ABI says that bitfields are unsigned by default. */ + /* The EPOC C++ environment does not support exceptions. */ + #define CC1_SPEC "-funsigned-bitfields %{!DIN_GCC:-fno-rtti} %{!DIN_GCC:-fno-exceptions}" + #include "svr3.h" #include "mcore/mcore.h" #include "dbxcoff.h" *************** rdata_section () \ *** 81,87 **** or a constant of some sort. RELOC indicates whether forming the initial value of DECL requires link-time relocations. */ #undef SELECT_SECTION ! #define SELECT_SECTION(DECL, RELOC) \ { \ if (TREE_CODE (DECL) == STRING_CST) \ { \ --- 85,91 ---- or a constant of some sort. RELOC indicates whether forming the initial value of DECL requires link-time relocations. */ #undef SELECT_SECTION ! #define SELECT_SECTION(DECL, RELOC, ALIGN) \ { \ if (TREE_CODE (DECL) == STRING_CST) \ { \ *************** rdata_section () \ *** 111,117 **** in the case of a `const_int' rtx. Currently, these always go into the const section. */ #undef SELECT_RTX_SECTION ! #define SELECT_RTX_SECTION(MODE, RTX) rdata_section () #define MCORE_EXPORT_NAME(STREAM, NAME) \ do \ --- 115,121 ---- in the case of a `const_int' rtx. Currently, these always go into the const section. */ #undef SELECT_RTX_SECTION ! #define SELECT_RTX_SECTION(MODE, RTX, ALIGN) rdata_section () #define MCORE_EXPORT_NAME(STREAM, NAME) \ do \ *************** rdata_section () \ *** 183,250 **** #define STARTFILE_SPEC "crt0.o%s" #define ENDFILE_SPEC "%{!mno-lsim:-lsim}" - #undef CTORS_SECTION_ASM_OP - #define CTORS_SECTION_ASM_OP "\t.section\t.ctors,\"x\"" - #undef DTORS_SECTION_ASM_OP - #define DTORS_SECTION_ASM_OP "\t.section\t.dtors,\"x\"" - - #define INT_ASM_OP "\t.long\t" - - #undef ASM_OUTPUT_CONSTRUCTOR - #define ASM_OUTPUT_CONSTRUCTOR(STREAM, NAME) \ - do \ - { \ - ctors_section (); \ - fprintf (STREAM, "%s", INT_ASM_OP); \ - assemble_name (STREAM, NAME); \ - fprintf (STREAM, "\n"); \ - } \ - while (0) - - /* A C statement (sans semicolon) to output an element in the table of - global destructors. */ - #undef ASM_OUTPUT_DESTRUCTOR - #define ASM_OUTPUT_DESTRUCTOR(STREAM, NAME) \ - do \ - { \ - dtors_section (); \ - fprintf (STREAM, "%s", INT_ASM_OP); \ - assemble_name (STREAM, NAME); \ - fprintf (STREAM, "\n"); \ - } \ - while (0) - /* __CTOR_LIST__ and __DTOR_LIST__ must be defined by the linker script. */ #define CTOR_LISTS_DEFINED_EXTERNALLY #undef DO_GLOBAL_CTORS_BODY #undef DO_GLOBAL_DTORS_BODY #undef INIT_SECTION_ASM_OP ! ! #define UNIQUE_SECTION_P(DECL) DECL_ONE_ONLY (DECL) #define SUPPORTS_ONE_ONLY 1 ! /* A C statement to output something to the assembler file to switch to section ! NAME for object DECL which is either a FUNCTION_DECL, a VAR_DECL or ! NULL_TREE. Some target formats do not support arbitrary sections. Do not ! define this macro in such cases. */ ! #undef ASM_OUTPUT_SECTION_NAME ! #define ASM_OUTPUT_SECTION_NAME(STREAM, DECL, NAME, RELOC) \ ! do \ ! { \ ! if ((DECL) && TREE_CODE (DECL) == FUNCTION_DECL) \ ! fprintf (STREAM, "\t.section %s,\"x\"\n", NAME); \ ! else if ((DECL) && DECL_READONLY_SECTION (DECL, RELOC)) \ ! fprintf (STREAM, "\t.section %s,\"\"\n", NAME); \ ! else \ ! fprintf (STREAM, "\t.section %s,\"w\"\n", NAME); \ ! /* Functions may have been compiled at various levels of \ ! optimization so we can't use `same_size' here. \ ! Instead, have the linker pick one. */ \ ! if ((DECL) && DECL_ONE_ONLY (DECL)) \ ! fprintf (STREAM, "\t.linkonce %s\n", \ ! TREE_CODE (DECL) == FUNCTION_DECL \ ! ? "discard" : "same_size"); \ ! } \ ! while (0) --- 187,202 ---- #define STARTFILE_SPEC "crt0.o%s" #define ENDFILE_SPEC "%{!mno-lsim:-lsim}" /* __CTOR_LIST__ and __DTOR_LIST__ must be defined by the linker script. */ #define CTOR_LISTS_DEFINED_EXTERNALLY #undef DO_GLOBAL_CTORS_BODY #undef DO_GLOBAL_DTORS_BODY #undef INIT_SECTION_ASM_OP ! #undef DTORS_SECTION_ASM_OP #define SUPPORTS_ONE_ONLY 1 ! /* Switch into a generic section. */ ! #undef TARGET_ASM_NAMED_SECTION ! #define TARGET_ASM_NAMED_SECTION default_pe_asm_named_section diff -Nrc3pad gcc-3.0.4/gcc/config/mcore/mcore-protos.h gcc-3.1/gcc/config/mcore/mcore-protos.h *** gcc-3.0.4/gcc/config/mcore/mcore-protos.h Thu Sep 21 17:33:51 2000 --- gcc-3.1/gcc/config/mcore/mcore-protos.h Sun Nov 4 02:40:39 2001 *************** extern int mcore_naked_function *** 37,44 **** #ifdef TREE_CODE extern void mcore_unique_section PARAMS ((tree, int)); extern void mcore_encode_section_info PARAMS ((tree)); - extern int mcore_valid_machine_decl_attribute PARAMS ((tree, tree, tree, tree)); - extern tree mcore_merge_machine_decl_attributes PARAMS ((tree, tree)); #ifdef HAVE_MACHINE_MODES extern int mcore_function_arg_partial_nregs PARAMS ((CUMULATIVE_ARGS, enum machine_mode, tree, int)); --- 37,42 ---- *************** extern rtx arch_compare_op1; *** 59,71 **** extern const char * mcore_output_bclri PARAMS ((rtx, int)); extern const char * mcore_output_bseti PARAMS ((rtx, int)); ! extern const char * mcore_output_cmov PARAMS ((rtx *, int, char *)); extern char * mcore_output_call PARAMS ((rtx *, int)); extern int mcore_is_dead PARAMS ((rtx, rtx)); extern int mcore_expand_insv PARAMS ((rtx *)); extern int mcore_modify_comparison PARAMS ((RTX_CODE)); extern void mcore_expand_block_move PARAMS ((rtx, rtx, rtx *)); - extern rtx mcore_dependent_simplify_rtx PARAMS ((rtx, int, int, int, int *)); extern void mcore_dependent_reorg PARAMS ((rtx)); extern int mcore_const_costs PARAMS ((rtx, RTX_CODE)); extern int mcore_and_cost PARAMS ((rtx)); --- 57,68 ---- extern const char * mcore_output_bclri PARAMS ((rtx, int)); extern const char * mcore_output_bseti PARAMS ((rtx, int)); ! extern const char * mcore_output_cmov PARAMS ((rtx *, int, const char *)); extern char * mcore_output_call PARAMS ((rtx *, int)); extern int mcore_is_dead PARAMS ((rtx, rtx)); extern int mcore_expand_insv PARAMS ((rtx *)); extern int mcore_modify_comparison PARAMS ((RTX_CODE)); extern void mcore_expand_block_move PARAMS ((rtx, rtx, rtx *)); extern void mcore_dependent_reorg PARAMS ((rtx)); extern int mcore_const_costs PARAMS ((rtx, RTX_CODE)); extern int mcore_and_cost PARAMS ((rtx)); diff -Nrc3pad gcc-3.0.4/gcc/config/mcore/mcore.c gcc-3.1/gcc/config/mcore/mcore.c *** gcc-3.0.4/gcc/config/mcore/mcore.c Sat May 12 20:32:50 2001 --- gcc-3.1/gcc/config/mcore/mcore.c Sun Dec 23 16:07:15 2001 *************** *** 1,5 **** /* Output routines for Motorola MCore processor ! Copyright (C) 1993, 1999, 2000 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,5 ---- /* Output routines for Motorola MCore processor ! Copyright (C) 1993, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of GNU CC. *************** GNU General Public License for more deta *** 15,21 **** 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, 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "config.h" #include "system.h" --- 15,22 ---- 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 "config.h" #include "system.h" *************** the Free Software Foundation, 675 Mass A *** 23,29 **** #include "tree.h" #include "tm_p.h" #include "assert.h" - #include "gansidecl.h" #include "mcore.h" #include "regs.h" #include "hard-reg-set.h" --- 24,29 ---- *************** the Free Software Foundation, 675 Mass A *** 40,45 **** --- 40,47 ---- #include "function.h" #include "ggc.h" #include "toplev.h" + #include "target.h" + #include "target-def.h" /* Maximum size we are allowed to grow the stack in a single operation. If we want more, we must do it in increments of at most this size. *************** int regno_reg_class[FIRST_PSEUDO_REGISTE *** 71,77 **** /* Provide reg_class from a letter such as appears in the machine description. */ ! enum reg_class reg_class_from_letter[] = { /* a */ LRW_REGS, /* b */ ONLYR1_REGS, /* c */ C_REGS, /* d */ NO_REGS, /* e */ NO_REGS, /* f */ NO_REGS, /* g */ NO_REGS, /* h */ NO_REGS, --- 73,79 ---- /* Provide reg_class from a letter such as appears in the machine description. */ ! const enum reg_class reg_class_from_letter[] = { /* a */ LRW_REGS, /* b */ ONLYR1_REGS, /* c */ C_REGS, /* d */ NO_REGS, /* e */ NO_REGS, /* f */ NO_REGS, /* g */ NO_REGS, /* h */ NO_REGS, *************** static void mcore_mark_dllexport *** 129,134 **** --- 131,160 ---- static void mcore_mark_dllimport PARAMS ((tree)); static int mcore_dllexport_p PARAMS ((tree)); static int mcore_dllimport_p PARAMS ((tree)); + const struct attribute_spec mcore_attribute_table[]; + static tree mcore_handle_naked_attribute PARAMS ((tree *, tree, tree, int, bool *)); + #ifdef OBJECT_FORMAT_ELF + static void mcore_asm_named_section PARAMS ((const char *, + unsigned int)); + #endif + + /* Initialize the GCC target structure. */ + #ifdef TARGET_DLLIMPORT_DECL_ATTRIBUTES + #undef TARGET_MERGE_DECL_ATTRIBUTES + #define TARGET_MERGE_DECL_ATTRIBUTES merge_dllimport_decl_attributes + #endif + + #ifdef OBJECT_FORMAT_ELF + #undef TARGET_ASM_UNALIGNED_HI_OP + #define TARGET_ASM_UNALIGNED_HI_OP "\t.short\t" + #undef TARGET_ASM_UNALIGNED_SI_OP + #define TARGET_ASM_UNALIGNED_SI_OP "\t.long\t" + #endif + + #undef TARGET_ATTRIBUTE_TABLE + #define TARGET_ATTRIBUTE_TABLE mcore_attribute_table + + struct gcc_target targetm = TARGET_INITIALIZER; /* Adjust the stack and return the number of bytes taken to do it. */ static void *************** mcore_print_operand (stream, x, code) *** 295,302 **** fputs (reg_names[REGNO (x) + 1], (stream)); break; case MEM: ! mcore_print_operand_address (stream, ! XEXP (adj_offsettable_operand (x, 4), 0)); break; default: abort (); --- 321,328 ---- fputs (reg_names[REGNO (x) + 1], (stream)); break; case MEM: ! mcore_print_operand_address ! (stream, XEXP (adjust_address (x, SImode, 4), 0)); break; default: abort (); *************** try_constant_tricks (value, x, y) *** 700,706 **** } } ! bit = 0x80000000UL; for (i = 0; i <= 31; i++) { --- 726,732 ---- } } ! bit = 0x80000000L; for (i = 0; i <= 31; i++) { *************** int *** 867,879 **** mcore_byte_offset (mask) unsigned int mask; { ! if (mask == 0x00ffffffUL) return 0; ! else if (mask == 0xff00ffffUL) return 1; ! else if (mask == 0xffff00ffUL) return 2; ! else if (mask == 0xffffff00UL) return 3; return -1; --- 893,905 ---- mcore_byte_offset (mask) unsigned int mask; { ! if (mask == 0x00ffffffL) return 0; ! else if (mask == 0xff00ffffL) return 1; ! else if (mask == 0xffff00ffL) return 2; ! else if (mask == 0xffffff00L) return 3; return -1; *************** mcore_halfword_offset (mask) *** 887,893 **** { if (mask == 0x0000ffffL) return 0; ! else if (mask == 0xffff0000UL) return 1; return -1; --- 913,919 ---- { if (mask == 0x0000ffffL) return 0; ! else if (mask == 0xffff0000L) return 1; return -1; *************** const char * *** 954,960 **** mcore_output_cmov (operands, cmp_t, test) rtx operands[]; int cmp_t; ! char * test; { int load_value; int adjust_value; --- 980,986 ---- mcore_output_cmov (operands, cmp_t, test) rtx operands[]; int cmp_t; ! const char * test; { int load_value; int adjust_value; *************** mcore_store_multiple_operation (op, mode *** 1861,1867 **** known constants. DEST and SRC are registers. OFFSET is the known starting point for the output pattern. */ ! static enum machine_mode mode_from_align[] = { VOIDmode, QImode, HImode, VOIDmode, SImode, VOIDmode, VOIDmode, VOIDmode, DImode --- 1887,1893 ---- known constants. DEST and SRC are registers. OFFSET is the known starting point for the output pattern. */ ! static const enum machine_mode mode_from_align[] = { VOIDmode, QImode, HImode, VOIDmode, SImode, VOIDmode, VOIDmode, VOIDmode, DImode *************** mcore_output_jump_label_table () *** 2599,2668 **** return ""; } - #if 0 /* XXX temporarily suppressed until I have time to look at what this code does. */ - - /* We need these below. They use information stored in tables to figure out - what values are in what registers, etc. This is okay, since these tables - are valid at the time mcore_dependent_simplify_rtx() is invoked. Don't - use them anywhere else. BRC */ - - extern unsigned HOST_WIDE_INT nonzero_bits PARAMS ((rtx, enum machine_mode)); - extern int num_sign_bit_copies PARAMS ((Rtx, enum machine_mode)); - - /* Do machine dependent simplifications: see simplify_rtx() in combine.c. - GENERAL_SIMPLIFY controls whether general machine independent - simplifications should be tried after machine dependent ones. Thus, - we can filter out certain simplifications and keep the simplify_rtx() - from changing things that we just simplified in a machine dependent - fashion. This is experimental. BRC */ - rtx - mcore_dependent_simplify_rtx (x, int_op0_mode, last, in_dest, general_simplify) - rtx x; - int int_op0_mode; - int last; - int in_dest; - int * general_simplify; - { - enum machine_mode mode = GET_MODE (x); - enum rtx_code code = GET_CODE (x); - - /* Always simplify unless explicitly asked not to. */ - * general_simplify = 1; - - if (code == IF_THEN_ELSE) - { - int i; - rtx cond = XEXP(x, 0); - rtx true_rtx = XEXP(x, 1); - rtx false_rtx = XEXP(x, 2); - enum rtx_code true_code = GET_CODE (cond); - - /* On the mcore, when doing -mcmov-one, we don't want to simplify: - - (if_then_else (ne A 0) C1 0) - - if it would be turned into a shift by simplify_if_then_else(). - instead, leave it alone so that it will collapse into a conditional - move. besides, at least for the mcore, doing this simplification does - not typically help. see combine.c, line 4217. BRC */ - - if (true_code == NE && XEXP (cond, 1) == const0_rtx - && false_rtx == const0_rtx && GET_CODE (true_rtx) == CONST_INT - && ((1 == nonzero_bits (XEXP (cond, 0), mode) - && (i = exact_log2 (INTVAL (true_rtx))) >= 0) - || ((num_sign_bit_copies (XEXP (cond, 0), mode) - == GET_MODE_BITSIZE (mode)) - && (i = exact_log2 (- INTVAL (true_rtx))) >= 0))) - { - *general_simplify = 0; - return x; - } - } - - return x; - } - #endif - /* Check whether insn is a candidate for a conditional. */ static cond_type --- 2625,2630 ---- *************** emit_new_cond_insn (insn, cond) *** 2755,2761 **** src = SET_SRC (pat); } else ! dst = JUMP_LABEL (insn); switch (num) { --- 2717,2726 ---- src = SET_SRC (pat); } else ! { ! dst = JUMP_LABEL (insn); ! src = NULL_RTX; ! } switch (num) { *************** mcore_override_options () *** 3115,3121 **** || (mcore_stack_increment == 0 && (mcore_stack_increment_string[0] != '0' || mcore_stack_increment_string[1] != 0))) ! error ("Invalid option `-mstack-increment=%s'", mcore_stack_increment_string); } --- 3080,3086 ---- || (mcore_stack_increment == 0 && (mcore_stack_increment_string[0] != '0' || mcore_stack_increment_string[1] != 0))) ! error ("invalid option `-mstack-increment=%s'", mcore_stack_increment_string); } *************** mcore_dllexport_p (decl) *** 3435,3441 **** && TREE_CODE (decl) != FUNCTION_DECL) return 0; ! return lookup_attribute ("dllexport", DECL_MACHINE_ATTRIBUTES (decl)) != 0; } static int --- 3400,3406 ---- && TREE_CODE (decl) != FUNCTION_DECL) return 0; ! return lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl)) != 0; } static int *************** mcore_dllimport_p (decl) *** 3446,3452 **** && TREE_CODE (decl) != FUNCTION_DECL) return 0; ! return lookup_attribute ("dllimport", DECL_MACHINE_ATTRIBUTES (decl)) != 0; } /* Cover function to implement ENCODE_SECTION_INFO. */ --- 3411,3417 ---- && TREE_CODE (decl) != FUNCTION_DECL) return 0; ! return lookup_attribute ("dllimport", DECL_ATTRIBUTES (decl)) != 0; } /* Cover function to implement ENCODE_SECTION_INFO. */ *************** mcore_encode_section_info (decl) *** 3497,3520 **** dllexport - for exporting a function/variable that will live in a dll dllimport - for importing a function/variable from a dll naked - do not create a function prologue/epilogue. */ - int - mcore_valid_machine_decl_attribute (decl, attributes, attr, args) - tree decl; - tree attributes ATTRIBUTE_UNUSED; - tree attr; - tree args; - { - if (args != NULL_TREE) - return 0; ! if (is_attribute_p ("dllexport", attr)) ! return 1; ! if (is_attribute_p ("dllimport", attr)) ! return 1; ! ! if (is_attribute_p ("naked", attr) && ! TREE_CODE (decl) == FUNCTION_DECL) { /* PR14310 - don't complain about lack of return statement in naked functions. The solution here is a gross hack --- 3462,3488 ---- dllexport - for exporting a function/variable that will live in a dll dllimport - for importing a function/variable from a dll naked - do not create a function prologue/epilogue. */ ! const struct attribute_spec mcore_attribute_table[] = ! { ! /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */ ! { "dllexport", 0, 0, true, false, false, NULL }, ! { "dllimport", 0, 0, true, false, false, NULL }, ! { "naked", 0, 0, true, false, false, mcore_handle_naked_attribute }, ! { NULL, 0, 0, false, false, false, NULL } ! }; ! /* Handle a "naked" attribute; arguments as in ! struct attribute_spec.handler. */ ! static tree ! mcore_handle_naked_attribute (node, name, args, flags, no_add_attrs) ! tree *node; ! tree name; ! tree args ATTRIBUTE_UNUSED; ! int flags ATTRIBUTE_UNUSED; ! bool *no_add_attrs; ! { ! if (TREE_CODE (*node) == FUNCTION_DECL) { /* PR14310 - don't complain about lack of return statement in naked functions. The solution here is a gross hack *************** mcore_valid_machine_decl_attribute (decl *** 3531,3592 **** } else if (saved_warn_return_type_count) saved_warn_return_type_count = 2; - - return 1; } - - return 0; - } - - /* Merge attributes in decls OLD and NEW. - This handles the following situation: - - __declspec (dllimport) int foo; - int foo; - - The second instance of `foo' nullifies the dllimport. */ - tree - mcore_merge_machine_decl_attributes (old, new) - tree old; - tree new; - { - tree a; - int delete_dllimport_p; - - old = DECL_MACHINE_ATTRIBUTES (old); - new = DECL_MACHINE_ATTRIBUTES (new); - - /* What we need to do here is remove from `old' dllimport if it doesn't - appear in `new'. dllimport behaves like extern: if a declaration is - marked dllimport and a definition appears later, then the object - is not dllimport'd. */ - if ( lookup_attribute ("dllimport", old) != NULL_TREE - && lookup_attribute ("dllimport", new) == NULL_TREE) - delete_dllimport_p = 1; else - delete_dllimport_p = 0; - - a = merge_attributes (old, new); - - if (delete_dllimport_p) { ! tree prev,t; ! ! /* Scan the list for dllimport and delete it. */ ! for (prev = NULL_TREE, t = a; t; prev = t, t = TREE_CHAIN (t)) ! { ! if (is_attribute_p ("dllimport", TREE_PURPOSE (t))) ! { ! if (prev == NULL_TREE) ! a = TREE_CHAIN (a); ! else ! TREE_CHAIN (prev) = TREE_CHAIN (t); ! break; ! } ! } } ! return a; } /* Cover function for UNIQUE_SECTION. */ --- 3499,3513 ---- } else if (saved_warn_return_type_count) saved_warn_return_type_count = 2; } else { ! warning ("`%s' attribute only applies to functions", ! IDENTIFIER_POINTER (name)); ! *no_add_attrs = true; } ! return NULL_TREE; } /* Cover function for UNIQUE_SECTION. */ *************** mcore_unique_section (decl, reloc) *** 3611,3617 **** (everything from the $ on is stripped). */ if (TREE_CODE (decl) == FUNCTION_DECL) prefix = ".text$"; ! /* For compatability with EPOC, we ignore the fact that the section might have relocs against it. */ else if (DECL_READONLY_SECTION (decl, 0)) prefix = ".rdata$"; --- 3532,3538 ---- (everything from the $ on is stripped). */ if (TREE_CODE (decl) == FUNCTION_DECL) prefix = ".text$"; ! /* For compatibility with EPOC, we ignore the fact that the section might have relocs against it. */ else if (DECL_READONLY_SECTION (decl, 0)) prefix = ".rdata$"; *************** mcore_unique_section (decl, reloc) *** 3629,3633 **** int mcore_naked_function_p () { ! return lookup_attribute ("naked", DECL_MACHINE_ATTRIBUTES (current_function_decl)) != NULL_TREE; } --- 3550,3564 ---- int mcore_naked_function_p () { ! return lookup_attribute ("naked", DECL_ATTRIBUTES (current_function_decl)) != NULL_TREE; ! } ! ! #ifdef OBJECT_FORMAT_ELF ! static void ! mcore_asm_named_section (name, flags) ! const char *name; ! unsigned int flags ATTRIBUTE_UNUSED; ! { ! fprintf (asm_out_file, "\t.section %s\n", name); } + #endif /* OBJECT_FORMAT_ELF */ diff -Nrc3pad gcc-3.0.4/gcc/config/mcore/mcore.h gcc-3.1/gcc/config/mcore/mcore.h *** gcc-3.0.4/gcc/config/mcore/mcore.h Mon Jan 1 20:35:31 2001 --- gcc-3.1/gcc/config/mcore/mcore.h Fri May 3 12:07:08 2002 *************** *** 1,6 **** /* Definitions of target machine for GNU compiler, for Motorola M*CORE Processor. ! Copyright (C) 1993, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,6 ---- /* Definitions of target machine for GNU compiler, for Motorola M*CORE Processor. ! Copyright (C) 1993, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This file is part of GNU CC. *************** GNU General Public License for more deta *** 16,25 **** 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, 675 Mass Ave, Cambridge, MA 02139, USA. */ ! #ifndef __MCORE__H ! #define __MCORE__H /* RBE: need to move these elsewhere. */ #undef LIKE_PPC_ABI --- 16,26 ---- 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. */ ! #ifndef GCC_MCORE_H ! #define GCC_MCORE_H /* RBE: need to move these elsewhere. */ #undef LIKE_PPC_ABI *************** the Free Software Foundation, 675 Mass A *** 35,49 **** /* Run-time Target Specification. */ #define TARGET_MCORE ! /* A C expression whose value is nonzero if IDENTIFIER with arguments ARGS ! is a valid machine specific attribute for DECL. ! The attributes in ATTRIBUTES have previously been assigned to DECL. */ ! #undef VALID_MACHINE_DECL_ATTRIBUTE ! #define VALID_MACHINE_DECL_ATTRIBUTE(DECL, ATTRIBUTES, IDENTIFIER, ARGS) \ ! mcore_valid_machine_decl_attribute (DECL, ATTRIBUTES, IDENTIFIER, ARGS) ! ! #define MERGE_MACHINE_DECL_ATTRIBUTES(OLD, NEW) \ ! mcore_merge_machine_decl_attributes (OLD, NEW) /* Support the __declspec keyword by turning them into attributes. We currently only support: dllexport and dllimport. --- 36,44 ---- /* Run-time Target Specification. */ #define TARGET_MCORE ! /* Get tree.c to declare a target-specific specialization of ! merge_decl_attributes. */ ! #define TARGET_DLLIMPORT_DECL_ATTRIBUTES /* Support the __declspec keyword by turning them into attributes. We currently only support: dllexport and dllimport. *************** the Free Software Foundation, 675 Mass A *** 71,77 **** %{!mbig-endian: -D__MCORELE__} \ %{!m210: -D__M340__} \ " ! /* If -m4align is ever re-enabled then add this line to the defintion of CPP_SPEC %{!m4align:-D__MCORE_ALIGN_8__} %{m4align:-D__MCORE__ALIGN_4__} */ /* We don't have a -lg library, so don't put it in the list. */ --- 66,72 ---- %{!mbig-endian: -D__MCORELE__} \ %{!m210: -D__M340__} \ " ! /* If -m4align is ever re-enabled then add this line to the definition of CPP_SPEC %{!m4align:-D__MCORE_ALIGN_8__} %{m4align:-D__MCORE__ALIGN_4__} */ /* We don't have a -lg library, so don't put it in the list. */ *************** extern int target_flags; *** 130,136 **** { {"hardlit", HARDLIT_BIT, \ N_("Inline constants if it can be done in 2 insns or less") }, \ {"no-hardlit", - HARDLIT_BIT, \ ! N_("inline constants if it only takes 1 instruction") }, \ {"4align", - ALIGN8_BIT, \ N_("Set maximum alignment to 4") }, \ {"8align", ALIGN8_BIT, \ --- 125,131 ---- { {"hardlit", HARDLIT_BIT, \ N_("Inline constants if it can be done in 2 insns or less") }, \ {"no-hardlit", - HARDLIT_BIT, \ ! N_("Inline constants if it only takes 1 instruction") }, \ {"4align", - ALIGN8_BIT, \ N_("Set maximum alignment to 4") }, \ {"8align", ALIGN8_BIT, \ *************** extern int target_flags; *** 144,150 **** {"no-relax-immediates", - RELAX_IMM_BIT, \ N_("Do not arbitary sized immediates in bit operations") }, \ {"wide-bitfields", W_FIELD_BIT, \ ! N_("Always treat bitfield as int-sized") }, \ {"no-wide-bitfields", - W_FIELD_BIT, \ "" }, \ {"4byte-functions", OVERALIGN_FUNC_BIT, \ --- 139,145 ---- {"no-relax-immediates", - RELAX_IMM_BIT, \ N_("Do not arbitary sized immediates in bit operations") }, \ {"wide-bitfields", W_FIELD_BIT, \ ! N_("Always treat bit-field as int-sized") }, \ {"no-wide-bitfields", - W_FIELD_BIT, \ "" }, \ {"4byte-functions", OVERALIGN_FUNC_BIT, \ *************** extern const char * mcore_stack_incremen *** 183,191 **** N_("Maximum amount for a single stack increment operation")} \ } /* The MCore ABI says that bitfields are unsigned by default. */ ! /* The EPOC C++ environment does not support exceptions. */ ! #define CC1_SPEC "-funsigned-bitfields %{!DIN_GCC:-fno-rtti} %{!DIN_GCC:-fno-exceptions}" /* What options are we going to default to specific settings when -O* happens; the user can subsequently override these settings. --- 178,187 ---- N_("Maximum amount for a single stack increment operation")} \ } + #ifndef CC1_SPEC /* The MCore ABI says that bitfields are unsigned by default. */ ! #define CC1_SPEC "-funsigned-bitfields" ! #endif /* What options are we going to default to specific settings when -O* happens; the user can subsequently override these settings. *************** extern const char * mcore_stack_incremen *** 274,282 **** words. */ #define LONG_LONG_TYPE_SIZE 64 - /* the size of the boolean type -- in C++; */ - #define BOOL_TYPE_SIZE 8 - /* Allocation boundary (in *bits*) for storing arguments in argument list. */ #define PARM_BOUNDARY 32 --- 270,275 ---- *************** extern int mcore_stack_increment; *** 361,367 **** #define LK_REG 15 /* overloaded on general register */ #define AP_REG 16 /* fake arg pointer register */ /* RBE: mcore.md depends on CC_REG being set to 17 */ ! #define CC_REG 17 /* cant name it C_REG */ #define FP_REG 18 /* fake frame pointer register */ /* Specify the registers used for certain standard purposes. --- 354,360 ---- #define LK_REG 15 /* overloaded on general register */ #define AP_REG 16 /* fake arg pointer register */ /* RBE: mcore.md depends on CC_REG being set to 17 */ ! #define CC_REG 17 /* can't name it C_REG */ #define FP_REG 18 /* fake frame pointer register */ /* Specify the registers used for certain standard purposes. *************** enum reg_class *** 535,541 **** reg number REGNO. This could be a conditional expression or could index an array. */ ! extern int regno_reg_class[]; #define REGNO_REG_CLASS(REGNO) regno_reg_class[REGNO] /* When defined, the compiler allows registers explicitly used in the --- 528,534 ---- reg number REGNO. This could be a conditional expression or could index an array. */ ! extern int regno_reg_class[FIRST_PSEUDO_REGISTER]; #define REGNO_REG_CLASS(REGNO) regno_reg_class[REGNO] /* When defined, the compiler allows registers explicitly used in the *************** extern int regno_reg_class[]; *** 549,558 **** /* Get reg_class from a letter such as appears in the machine description. */ ! extern enum reg_class reg_class_from_letter[]; #define REG_CLASS_FROM_LETTER(C) \ ! ( (C) >= 'a' && (C) <= 'z' ? reg_class_from_letter[(C) - 'a'] : NO_REGS ) /* The letters I, J, K, L, M, N, O, and P in a register constraint string can be used to stand for particular ranges of immediate operands. --- 542,551 ---- /* Get reg_class from a letter such as appears in the machine description. */ ! extern const enum reg_class reg_class_from_letter[]; #define REG_CLASS_FROM_LETTER(C) \ ! ( ISLOWER (C) ? reg_class_from_letter[(C) - 'a'] : NO_REGS ) /* The letters I, J, K, L, M, N, O, and P in a register constraint string can be used to stand for particular ranges of immediate operands. *************** extern enum reg_class reg_class_from_let *** 831,838 **** /* Length in units of the trampoline for entering a nested function. */ #define TRAMPOLINE_SIZE 12 ! /* Alignment required for a trampoline in units. */ ! #define TRAMPOLINE_ALIGN 4 /* Emit RTL insns to initialize the variable parts of a trampoline. FNADDR is an RTX for the address of the function's pure code. --- 824,831 ---- /* Length in units of the trampoline for entering a nested function. */ #define TRAMPOLINE_SIZE 12 ! /* Alignment required for a trampoline in bits. */ ! #define TRAMPOLINE_ALIGNMENT 32 /* Emit RTL insns to initialize the variable parts of a trampoline. FNADDR is an RTX for the address of the function's pure code. *************** extern enum reg_class reg_class_from_let *** 973,984 **** Do not define this if the table should contain absolute addresses. */ /* #define CASE_VECTOR_PC_RELATIVE */ - /* Specify the tree operation to be used to convert reals to integers. */ - #define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR - - /* This is the kind of divide that is easiest to do in the general case. */ - #define EASY_DIV_EXPR TRUNC_DIV_EXPR - /* 'char' is signed by default. */ #define DEFAULT_SIGNED_CHAR 0 --- 966,971 ---- *************** extern enum reg_class reg_class_from_let *** 1086,1124 **** #define DATA_SECTION_ASM_OP "\t.data" #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_ctors, in_dtors, SUBTARGET_EXTRA_SECTIONS #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ - CTORS_SECTION_FUNCTION \ - DTORS_SECTION_FUNCTION \ SUBTARGET_EXTRA_SECTION_FUNCTIONS \ SWITCH_SECTION_FUNCTION - #ifndef CTORS_SECTION_FUNCTION - #define CTORS_SECTION_FUNCTION \ - void \ - ctors_section () \ - { \ - if (in_section != in_ctors) \ - { \ - fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP); \ - in_section = in_ctors; \ - } \ - } - - #define DTORS_SECTION_FUNCTION \ - void \ - dtors_section () \ - { \ - if (in_section != in_dtors) \ - { \ - fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP); \ - in_section = in_dtors; \ - } \ - } - #endif - /* Switch to SECTION (an `enum in_section'). ??? This facility should be provided by GCC proper. --- 1073,1085 ---- #define DATA_SECTION_ASM_OP "\t.data" #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS SUBTARGET_EXTRA_SECTIONS #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ SUBTARGET_EXTRA_SECTION_FUNCTIONS \ SWITCH_SECTION_FUNCTION /* Switch to SECTION (an `enum in_section'). ??? This facility should be provided by GCC proper. *************** dtors_section () \ *** 1126,1132 **** ASM_DECLARE_OBJECT_NAME and then switch back to the original section afterwards. */ #define SWITCH_SECTION_FUNCTION \ ! void \ switch_to_section (section, decl) \ enum in_section section; \ tree decl; \ --- 1087,1094 ---- ASM_DECLARE_OBJECT_NAME and then switch back to the original section afterwards. */ #define SWITCH_SECTION_FUNCTION \ ! static void switch_to_section PARAMS ((enum in_section, tree)); \ ! static void \ switch_to_section (section, decl) \ enum in_section section; \ tree decl; \ *************** switch_to_section (section, decl) \ *** 1136,1151 **** case in_text: text_section (); break; \ case in_data: data_section (); break; \ case in_named: named_section (decl, NULL, 0); break; \ - case in_ctors: ctors_section (); break; \ - case in_dtors: dtors_section (); break; \ SUBTARGET_SWITCH_SECTIONS \ default: abort (); break; \ } \ } ! ! #define ASM_OUTPUT_SECTION(file, nam) \ ! do { fprintf (file, "\t.section\t%s\n", nam); } while (0) /* This is how to output an insn to push a register on the stack. It need not be very fast code. */ --- 1098,1111 ---- case in_text: text_section (); break; \ case in_data: data_section (); break; \ case in_named: named_section (decl, NULL, 0); break; \ SUBTARGET_SWITCH_SECTIONS \ default: abort (); break; \ } \ } ! /* Switch into a generic section. */ ! #undef TARGET_ASM_NAMED_SECTION ! #define TARGET_ASM_NAMED_SECTION mcore_asm_named_section /* This is how to output an insn to push a register on the stack. It need not be very fast code. */ *************** switch_to_section (section, decl) \ *** 1168,1176 **** (STACK_BOUNDARY / BITS_PER_UNIT)) - /* DBX register number for a given compiler register number. */ - #define DBX_REGISTER_NUMBER(REGNO) (REGNO) - /* Output a label definition. */ #define ASM_OUTPUT_LABEL(FILE,NAME) \ do { assemble_name (FILE, NAME); fputs (":\n", FILE); } while (0) --- 1128,1133 ---- *************** extern long mcore_current_compilation_ti *** 1280,1324 **** /* Output various types of constants. */ - /* This is how to output an assembler line defining a `double'. */ - #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - do \ - { \ - char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \ - fprintf (FILE, "\t.double %s\n", dstr); \ - } \ - while (0) - - - /* This is how to output an assembler line defining a `float' constant. */ - #define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - do \ - { \ - char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \ - fprintf (FILE, "\t.float %s\n", dstr); \ - } \ - while (0) - - #define ASM_OUTPUT_INT(STREAM, EXP) \ - (fprintf (STREAM, "\t.long\t"), \ - output_addr_const (STREAM, (EXP)), \ - fputc ('\n', STREAM)) - - #define ASM_OUTPUT_SHORT(STREAM, EXP) \ - (fprintf (STREAM, "\t.short\t"), \ - output_addr_const (STREAM, (EXP)), \ - fputc ('\n', STREAM)) - - #define ASM_OUTPUT_CHAR(STREAM, EXP) \ - (fprintf (STREAM, "\t.byte\t"), \ - output_addr_const (STREAM, (EXP)), \ - fputc ('\n', STREAM)) - - #define ASM_OUTPUT_BYTE(STREAM, VALUE) \ - fprintf (STREAM, "\t.byte\t%d\n", VALUE) \ - /* This is how to output an assembler line that says to advance the location counter by SIZE bytes. */ #undef ASM_OUTPUT_SKIP --- 1237,1242 ---- *************** extern long mcore_current_compilation_ti *** 1400,1418 **** #undef ENCODE_SECTION_INFO #define ENCODE_SECTION_INFO(DECL) mcore_encode_section_info (DECL) - /* The assembler's parentheses characters. */ - #define ASM_OPEN_PAREN "(" - #define ASM_CLOSE_PAREN ")" - - /* Target characters. */ - #define TARGET_BELL 007 - #define TARGET_BS 010 - #define TARGET_TAB 011 - #define TARGET_NEWLINE 012 - #define TARGET_VT 013 - #define TARGET_FF 014 - #define TARGET_CR 015 - /* Print operand X (an rtx) in assembler syntax to file FILE. CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified. For `%' followed by punctuation, CODE is the punctuation and X is null. */ --- 1318,1323 ---- *************** extern long mcore_current_compilation_ti *** 1427,1436 **** /* This is to handle loads from the constant pool. */ #define MACHINE_DEPENDENT_REORG(X) mcore_dependent_reorg (X) - /* This handles MCore dependent rtl simplifications. */ - #define MACHINE_DEPENDENT_SIMPLIFY(X,M,L,I,S) \ - mcore_dependent_simplify_rtx (X, M, L, I, S) - #define PREDICATE_CODES \ { "mcore_arith_reg_operand", { REG, SUBREG }}, \ { "mcore_general_movsrc_operand", { MEM, CONST_INT, REG, SUBREG }},\ --- 1332,1337 ---- *************** extern long mcore_current_compilation_ti *** 1451,1454 **** { "mcore_store_multiple_operation", { PARALLEL }}, \ { "mcore_call_address_operand", { REG, SUBREG, CONST_INT }}, \ ! #endif /* __MCORE__H */ --- 1352,1355 ---- { "mcore_store_multiple_operation", { PARALLEL }}, \ { "mcore_call_address_operand", { REG, SUBREG, CONST_INT }}, \ ! #endif /* ! GCC_MCORE_H */ diff -Nrc3pad gcc-3.0.4/gcc/config/mcore/mcore.md gcc-3.1/gcc/config/mcore/mcore.md *** gcc-3.0.4/gcc/config/mcore/mcore.md Wed Oct 25 20:33:00 2000 --- gcc-3.1/gcc/config/mcore/mcore.md Tue Oct 9 10:16:13 2001 *************** *** 16,22 **** ;; 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, 675 Mass Ave, Cambridge, MA 02139, USA. ;;- See file "rtl.def" for documentation on define_insn, match_*, et. al. --- 16,23 ---- ;; 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. ;;- See file "rtl.def" for documentation on define_insn, match_*, et. al. *************** *** 1179,1187 **** int low, high; if (TARGET_LITTLE_END) ! low = 0, high = 1; else ! low = 1, high = 0; emit_insn (gen_rtx_SET (VOIDmode, gen_rtx_SUBREG (SImode, operands[0], low), operands[1])); --- 1180,1188 ---- int low, high; if (TARGET_LITTLE_END) ! low = 0, high = 4; else ! low = 4, high = 0; emit_insn (gen_rtx_SET (VOIDmode, gen_rtx_SUBREG (SImode, operands[0], low), operands[1])); *************** *** 3409,3415 **** "" "* { ! assemble_integer (operands[0], 4, 1); return \"\"; }" [(set_attr "length" "4")]) --- 3410,3416 ---- "" "* { ! assemble_integer (operands[0], 4, BITS_PER_WORD, 1); return \"\"; }" [(set_attr "length" "4")]) diff -Nrc3pad gcc-3.0.4/gcc/config/mcore/t-mcore gcc-3.1/gcc/config/mcore/t-mcore *** gcc-3.0.4/gcc/config/mcore/t-mcore Thu May 17 01:34:30 2001 --- gcc-3.1/gcc/config/mcore/t-mcore Thu May 17 03:16:03 2001 *************** *** 1,8 **** - # Name of assembly file containing libgcc1 functions. - # This entry must be present, but it can be empty if the target does - # not need any assembler functions to support its code generation. - CROSS_LIBGCC1 = libgcc1-asm.a LIB1ASMSRC = mcore/lib1.asm LIB1ASMFUNCS = _divsi3 _udivsi3 _modsi3 _umodsi3 --- 1,4 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/mcore/t-mcore-pe gcc-3.1/gcc/config/mcore/t-mcore-pe *** gcc-3.0.4/gcc/config/mcore/t-mcore-pe Thu May 17 01:34:30 2001 --- gcc-3.1/gcc/config/mcore/t-mcore-pe Thu May 17 03:16:03 2001 *************** *** 1,8 **** - # Name of assembly file containing libgcc1 functions. - # This entry must be present, but it can be empty if the target does - # not need any assembler functions to support its code generation. - - CROSS_LIBGCC1 = libgcc1-asm.a LIB1ASMSRC = mcore/lib1.asm LIB1ASMFUNCS = _divsi3 _udivsi3 _modsi3 _umodsi3 --- 1,3 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/mcore/xm-mcore.h gcc-3.1/gcc/config/mcore/xm-mcore.h *** gcc-3.0.4/gcc/config/mcore/xm-mcore.h Thu Mar 15 19:02:04 2001 --- gcc-3.1/gcc/config/mcore/xm-mcore.h Thu Jan 1 00:00:00 1970 *************** *** 1,37 **** - /* Configuration for GNU C-compiler for the Motorola M*Core. - Copyright (C) 1993, 1999, 2000 Free Software Foundation, Inc. - - This file is part of GNU CC. - - GNU CC is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU CC is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNU CC; see the file COPYING. If not, write to - the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ - - /* This describes the machine the compiler is hosted on. */ - #define HOST_BITS_PER_CHAR 8 - #define HOST_BITS_PER_SHORT 16 - #define HOST_BITS_PER_INT 32 - #define HOST_BITS_PER_LONG 32 - - /* If compiled with GNU C, use the built-in alloca. */ - #ifdef __GNUC__ - #define alloca __builtin_alloca - #endif - - /* Target machine dependencies. - tm.h is a symbolic link to the actual target specific file. */ - #include "tm.h" - - /* Arguments to use with `exit'. */ - #define SUCCESS_EXIT_CODE 0 - #define FATAL_EXIT_CODE 33 --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/mips/abi64.h gcc-3.1/gcc/config/mips/abi64.h *** gcc-3.0.4/gcc/config/mips/abi64.h Mon Jun 11 21:20:04 2001 --- gcc-3.1/gcc/config/mips/abi64.h Tue Apr 16 02:50:20 2002 *************** Boston, MA 02111-1307, USA. */ *** 24,30 **** #undef SUBTARGET_TARGET_OPTIONS #define SUBTARGET_TARGET_OPTIONS \ { "abi=", &mips_abi_string, \ ! "Speciy ABI to use"}, #undef STACK_BOUNDARY #define STACK_BOUNDARY \ --- 24,30 ---- #undef SUBTARGET_TARGET_OPTIONS #define SUBTARGET_TARGET_OPTIONS \ { "abi=", &mips_abi_string, \ ! "Specify ABI to use"}, #undef STACK_BOUNDARY #define STACK_BOUNDARY \ *************** Boston, MA 02111-1307, USA. */ *** 52,65 **** { \ int regno; \ for (regno = FP_REG_FIRST + 20; regno < FP_REG_FIRST + 24; regno++) \ ! call_used_regs[regno] = 1; \ } \ /* odd registers from fp21 to fp31 are now caller saved. */ \ ! if (mips_abi == ABI_N32) \ { \ int regno; \ for (regno = FP_REG_FIRST + 21; regno <= FP_REG_FIRST + 31; regno+=2) \ ! call_used_regs[regno] = 1; \ } \ } --- 52,65 ---- { \ int regno; \ for (regno = FP_REG_FIRST + 20; regno < FP_REG_FIRST + 24; regno++) \ ! call_really_used_regs[regno] = call_used_regs[regno] = 1; \ } \ /* odd registers from fp21 to fp31 are now caller saved. */ \ ! if (mips_abi == ABI_N32 || mips_abi == ABI_MEABI) \ { \ int regno; \ for (regno = FP_REG_FIRST + 21; regno <= FP_REG_FIRST + 31; regno+=2) \ ! call_really_used_regs[regno] = call_used_regs[regno] = 1; \ } \ } *************** Boston, MA 02111-1307, USA. */ *** 86,91 **** --- 86,104 ---- || GET_MODE_CLASS (MODE) == MODE_INT))) \ ? downward : upward)) + /* Modified version of the macro in expr.h. */ + #define MUST_PASS_IN_STACK(MODE,TYPE) \ + ((TYPE) != 0 \ + && (TREE_CODE (TYPE_SIZE (TYPE)) != INTEGER_CST \ + || TREE_ADDRESSABLE (TYPE) \ + || ((MODE) == BLKmode \ + && mips_abi != ABI_32 && mips_abi != ABI_O64 \ + && ! ((TYPE) != 0 && TREE_CODE (TYPE_SIZE (TYPE)) == INTEGER_CST \ + && 0 == (int_size_in_bytes (TYPE) \ + % (PARM_BOUNDARY / BITS_PER_UNIT))) \ + && (FUNCTION_ARG_PADDING (MODE, TYPE) \ + == (BYTES_BIG_ENDIAN ? upward : downward))))) + /* Under the old (i.e., 32 and O64 ABIs) all BLKmode objects are returned in memory. Under the new (N32 and 64-bit MIPS ABIs) small structures are returned in a register. Objects with varying size *************** Boston, MA 02111-1307, USA. */ *** 98,110 **** > (2 * UNITS_PER_WORD)) \ || (int_size_in_bytes (TYPE) == -1))) - #ifdef ANSI_PROTOTYPES - union tree_node; - #endif - extern struct rtx_def *mips_function_value PARAMS ((union tree_node *, union tree_node *)); - #undef FUNCTION_VALUE - #define FUNCTION_VALUE(VALTYPE, FUNC) mips_function_value (VALTYPE, FUNC) - /* For varargs, we must save the current argument, because it is the fake argument va_alist, and will need to be converted to the real argument. For stdarg, we do not need to save the current argument, because it --- 111,116 ---- *************** extern struct rtx_def *mips_function_val *** 254,259 **** /* ??? Could optimize structure passing by putting the right register rtx into the field decl, so that if we use the field, we can take the value from a register instead of from memory. */ - - - --- 260,262 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/mips/bsd-5.h gcc-3.1/gcc/config/mips/bsd-5.h *** gcc-3.0.4/gcc/config/mips/bsd-5.h Thu Nov 2 23:29:11 2000 --- gcc-3.1/gcc/config/mips/bsd-5.h Sun Dec 16 15:43:41 2001 *************** Boston, MA 02111-1307, USA. */ *** 56,63 **** #define ASM_OUTPUT_ASCII(FILE,PTR,LEN) \ do { \ const unsigned char *s; \ ! int i; \ ! for (i = 0, s = (const unsigned char *)(PTR); i < (LEN); s++, i++) \ { \ if ((i % 8) == 0) \ fputs ("\n\t.byte\t", (FILE)); \ --- 56,63 ---- #define ASM_OUTPUT_ASCII(FILE,PTR,LEN) \ do { \ const unsigned char *s; \ ! size_t i, limit = (LEN); \ ! for (i = 0, s = (const unsigned char *)(PTR); i < limit; s++, i++) \ { \ if ((i % 8) == 0) \ fputs ("\n\t.byte\t", (FILE)); \ diff -Nrc3pad gcc-3.0.4/gcc/config/mips/crti.asm gcc-3.1/gcc/config/mips/crti.asm *** gcc-3.0.4/gcc/config/mips/crti.asm Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/mips/crti.asm Wed Feb 6 02:50:08 2002 *************** *** 0 **** --- 1,26 ---- + /* 4 slots for argument spill area. 1 for cpreturn, 1 for stack. + Return spill offset of 40 and 20. Aligned to 16 bytes for n32. */ + + .section .init,"ax",@progbits + .globl _init + .type _init,@function + _init: + #ifdef __mips64 + daddu $sp,$sp,-48 + sd $31,40($sp) + #else + addu $sp,$sp,-32 + sw $31,20($sp) + #endif + + .section .fini,"ax",@progbits + .globl _fini + .type _fini,@function + _fini: + #ifdef __mips64 + daddu $sp,$sp,-48 + sd $31,40($sp) + #else + addu $sp,$sp,-32 + sw $31,20($sp) + #endif diff -Nrc3pad gcc-3.0.4/gcc/config/mips/crtn.asm gcc-3.1/gcc/config/mips/crtn.asm *** gcc-3.0.4/gcc/config/mips/crtn.asm Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/mips/crtn.asm Thu Feb 7 23:43:23 2002 *************** *** 0 **** --- 1,39 ---- + /* 4 slots for argument spill area. 1 for cpreturn, 1 for stack. + Return spill offset of 40 and 20. Aligned to 16 bytes for n32. */ + + .section .init,"ax",@progbits + #ifdef __mips16 + /* The mips16 uses $7 for a return address. We use that here too. */ + lw $7,20($sp) + addu $sp,$sp,32 + + j $7 + #else + #ifdef __mips64 + ld $31,40($sp) + daddu $sp,$sp,48 + #else + lw $31,20($sp) + addu $sp,$sp,32 + #endif + j $31 + + #endif + + .section .fini,"ax",@progbits + #ifdef __mips16 + /* The mips16 uses $7 for a return address. We use that here too. */ + lw $7,20($sp) + addu $sp,$sp,32 + + j $7 + #else + #ifdef __mips64 + ld $31,40($sp) + daddu $sp,$sp,48 + #else + lw $31,20($sp) + addu $sp,$sp,32 + #endif + j $31 + #endif diff -Nrc3pad gcc-3.0.4/gcc/config/mips/elf.h gcc-3.1/gcc/config/mips/elf.h *** gcc-3.0.4/gcc/config/mips/elf.h Thu Apr 26 16:04:14 2001 --- gcc-3.1/gcc/config/mips/elf.h Sun Nov 11 05:56:43 2001 *************** Boston, MA 02111-1307, USA. */ *** 38,44 **** #define PUT_SDB_SIZE(a) \ do { \ extern FILE *asm_out_text_file; \ ! fprintf (asm_out_text_file, "\t.esize\t%d;", (a)); \ } while (0) #undef PUT_SDB_TYPE --- 38,46 ---- #define PUT_SDB_SIZE(a) \ do { \ extern FILE *asm_out_text_file; \ ! fprintf (asm_out_text_file, "\t.esize\t"); \ ! fprintf (asm_out_text_file, HOST_WIDE_INT_PRINT_DEC, (HOST_WIDE_INT) (a)); \ ! fprintf (asm_out_text_file, ";"); \ } while (0) #undef PUT_SDB_TYPE *************** do { \ *** 56,78 **** #undef MAX_OFILE_ALIGNMENT #define MAX_OFILE_ALIGNMENT (32768*8) ! /* A C statement to output something to the assembler file to switch to section ! NAME for object DECL which is either a FUNCTION_DECL, a VAR_DECL or ! NULL_TREE. Some target formats do not support arbitrary sections. Do not ! define this macro in such cases. */ ! #undef ASM_OUTPUT_SECTION_NAME ! #define ASM_OUTPUT_SECTION_NAME(F, DECL, NAME, RELOC) \ ! do { \ ! extern FILE *asm_out_text_file; \ ! if ((DECL) && TREE_CODE (DECL) == FUNCTION_DECL) \ ! fprintf (asm_out_text_file, "\t.section %s,\"ax\",@progbits\n", (NAME)); \ ! else if ((DECL) && DECL_READONLY_SECTION (DECL, RELOC)) \ ! fprintf (F, "\t.section %s,\"a\",@progbits\n", (NAME)); \ ! else if (! strcmp (NAME, ".bss")) \ ! fprintf (F, "\t.section %s,\"aw\",@nobits\n", (NAME)); \ ! else \ ! fprintf (F, "\t.section %s,\"aw\",@progbits\n", (NAME)); \ } while (0) /* The following macro defines the format used to output the second --- 58,78 ---- #undef MAX_OFILE_ALIGNMENT #define MAX_OFILE_ALIGNMENT (32768*8) ! /* Switch into a generic section. */ ! #undef TARGET_ASM_NAMED_SECTION ! #define TARGET_ASM_NAMED_SECTION default_elf_asm_named_section ! /* Given that Irix has it's own headers, not having TARGET_GAS here ! seems a mistake. If we actually need to be prepared for file ! switching, then we need a custom TARGET_ASM_NAMED_SECTION too. */ ! ! #undef TEXT_SECTION ! #define TEXT_SECTION() \ ! do { \ ! if (TARGET_FILE_SWITCHING) \ ! abort (); \ ! fputs (TEXT_SECTION_ASM_OP, asm_out_file); \ ! fputc ('\n', asm_out_file); \ } while (0) /* The following macro defines the format used to output the second *************** do { \ *** 101,110 **** --- 101,112 ---- uninitialized global data will be output in the data section if `-fno-common' is passed, otherwise `ASM_OUTPUT_COMMON' will be used. */ + #ifndef BSS_SECTION_ASM_OP #define BSS_SECTION_ASM_OP "\t.section\t.bss" #endif + #undef SBSS_SECTION_ASM_OP #define SBSS_SECTION_ASM_OP "\t.section .sbss" /* Like `ASM_OUTPUT_BSS' except takes the required alignment as a *************** do { \ *** 114,120 **** specified as the number of bits. Try to use function `asm_output_aligned_bss' defined in file ! `varasm.c' when defining this macro. */ #ifndef ASM_OUTPUT_ALIGNED_BSS #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ do { \ --- 116,122 ---- specified as the number of bits. Try to use function `asm_output_aligned_bss' defined in file ! `varasm.c' when defining this macro. */ #ifndef ASM_OUTPUT_ALIGNED_BSS #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ do { \ *************** do { \ *** 151,157 **** size_directive_output = 1; \ fprintf (FILE, "%s", SIZE_ASM_OP); \ assemble_name (FILE, NAME); \ ! fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \ } \ mips_declare_object (FILE, NAME, "", ":\n", 0); \ } while (0) --- 153,162 ---- size_directive_output = 1; \ fprintf (FILE, "%s", SIZE_ASM_OP); \ assemble_name (FILE, NAME); \ ! fprintf (FILE, ","); \ ! fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, \ ! int_size_in_bytes (TREE_TYPE (DECL))); \ ! fprintf (FILE, "\n"); \ } \ mips_declare_object (FILE, NAME, "", ":\n", 0); \ } while (0) *************** do { \ *** 174,180 **** size_directive_output = 1; \ fprintf (FILE, "%s", SIZE_ASM_OP); \ assemble_name (FILE, name); \ ! fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \ } \ } while (0) --- 179,188 ---- size_directive_output = 1; \ fprintf (FILE, "%s", SIZE_ASM_OP); \ assemble_name (FILE, name); \ ! fprintf (FILE, ","); \ ! fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, \ ! int_size_in_bytes (TREE_TYPE (DECL))); \ ! fprintf (FILE, "\n"); \ } \ } while (0) *************** do { \ *** 191,197 **** mips-elf gas supports .weak, but not .weakext. mips-elf gas has been changed to support both .weak and .weakext, but until that support is generally available, the 'if' below ! should serve. */ #undef ASM_WEAKEN_LABEL #define ASM_WEAKEN_LABEL(FILE,NAME) ASM_OUTPUT_WEAK_ALIAS(FILE,NAME,0) --- 199,205 ---- mips-elf gas supports .weak, but not .weakext. mips-elf gas has been changed to support both .weak and .weakext, but until that support is generally available, the 'if' below ! should serve. */ #undef ASM_WEAKEN_LABEL #define ASM_WEAKEN_LABEL(FILE,NAME) ASM_OUTPUT_WEAK_ALIAS(FILE,NAME,0) *************** do { \ *** 211,326 **** } while (0) #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1) - #undef UNIQUE_SECTION_P - #define UNIQUE_SECTION_P(DECL) (DECL_ONE_ONLY (DECL)) #undef UNIQUE_SECTION ! #define UNIQUE_SECTION(DECL,RELOC) \ ! do { \ ! int len, size, sec; \ ! char *name, *string, *prefix; \ ! static char *prefixes[4][2] = { \ ! { ".text.", ".gnu.linkonce.t." }, \ ! { ".rodata.", ".gnu.linkonce.r." }, \ ! { ".data.", ".gnu.linkonce.d." }, \ ! { ".sdata.", ".gnu.linkonce.s." } \ ! }; \ ! \ ! name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (DECL)); \ ! size = int_size_in_bytes (TREE_TYPE (decl)); \ ! \ ! /* Determine the base section we are interested in: \ ! 0=text, 1=rodata, 2=data, 3=sdata, [4=bss]. */ \ ! if (TREE_CODE (DECL) == FUNCTION_DECL) \ ! sec = 0; \ ! else if (DECL_INITIAL (DECL) == 0 \ ! || DECL_INITIAL (DECL) == error_mark_node) \ ! sec = 2; \ ! else if ((TARGET_EMBEDDED_PIC || TARGET_MIPS16) \ ! && TREE_CODE (decl) == STRING_CST \ ! && !flag_writable_strings) \ ! { \ ! /* For embedded position independent code, put constant strings \ ! in the text section, because the data section is limited to \ ! 64K in size. For mips16 code, put strings in the text \ ! section so that a PC relative load instruction can be used to \ ! get their address. */ \ ! sec = 0; \ ! } \ ! else if (TARGET_EMBEDDED_DATA) \ ! { \ ! /* For embedded applications, always put an object in read-only data \ ! if possible, in order to reduce RAM usage. */ \ ! \ ! if (DECL_READONLY_SECTION (DECL, RELOC)) \ ! sec = 1; \ ! else if (size > 0 && size <= mips_section_threshold) \ ! sec = 3; \ ! else \ ! sec = 2; \ ! } \ ! else \ ! { \ ! /* For hosted applications, always put an object in small data if \ ! possible, as this gives the best performance. */ \ ! \ ! if (size > 0 && size <= mips_section_threshold) \ ! sec = 3; \ ! else if (DECL_READONLY_SECTION (DECL, RELOC)) \ ! sec = 1; \ ! else \ ! sec = 2; \ ! } \ ! \ ! prefix = prefixes[sec][DECL_ONE_ONLY (DECL)]; \ ! len = strlen (name) + strlen (prefix); \ ! string = alloca (len + 1); \ ! sprintf (string, "%s%s", prefix, name); \ ! \ ! DECL_SECTION_NAME (DECL) = build_string (len, string); \ ! } while (0) ! ! /* Support the ctors/dtors and other sections. */ ! ! /* Define the names of and pseudo-ops used to switch to the .ctors and ! .dtors sections. ! ! Note that we want to give these sections the SHF_WRITE attribute ! because these sections will actually contain data (i.e. tables of ! addresses of functions in the current root executable or shared library ! file) and, in the case of a shared library, the relocatable addresses ! will have to be properly resolved/relocated (and then written into) by ! the dynamic linker when it actually attaches the given shared library ! to the executing process. (Note that on SVR4, you may wish to use the ! `-z text' option to the ELF linker, when building a shared library, as ! an additional check that you are doing everything right. But if you do ! use the `-z text' option when building a shared library, you will get ! errors unless the .ctors and .dtors sections are marked as writable ! via the SHF_WRITE attribute.) */ ! ! #define CTORS_SECTION_NAME ".ctors" ! #define CTORS_SECTION_ASM_OP "\t.section\t.ctors,\"aw\"" ! #define DTORS_SECTION_NAME ".dtors" ! #define DTORS_SECTION_ASM_OP "\t.section\t.dtors,\"aw\"" ! ! /* There's no point providing a default definition of __CTOR_LIST__ ! since people are expected either to use crtbegin.o, or an equivalent, ! or provide their own definition. */ ! #define CTOR_LISTS_DEFINED_EXTERNALLY /* A list of other sections which the compiler might be "in" at any given time. */ #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_sdata, in_sbss, in_rdata, in_ctors, in_dtors ! ! #define INVOKE__main #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ SECTION_FUNCTION_TEMPLATE(sdata_section, in_sdata, SDATA_SECTION_ASM_OP) \ SECTION_FUNCTION_TEMPLATE(sbss_section, in_sbss, SBSS_SECTION_ASM_OP) \ ! SECTION_FUNCTION_TEMPLATE(rdata_section, in_rdata, RDATA_SECTION_ASM_OP) \ ! SECTION_FUNCTION_TEMPLATE(ctors_section, in_ctors, CTORS_SECTION_ASM_OP) \ ! SECTION_FUNCTION_TEMPLATE(dtors_section, in_dtors, DTORS_SECTION_ASM_OP) #define SECTION_FUNCTION_TEMPLATE(FN, ENUM, OP) \ void FN () \ --- 219,238 ---- } while (0) #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1) #undef UNIQUE_SECTION ! #define UNIQUE_SECTION(DECL,RELOC) \ ! mips_unique_section ((DECL), (RELOC)) /* A list of other sections which the compiler might be "in" at any given time. */ #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_sdata, in_sbss, in_rdata #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ SECTION_FUNCTION_TEMPLATE(sdata_section, in_sdata, SDATA_SECTION_ASM_OP) \ SECTION_FUNCTION_TEMPLATE(sbss_section, in_sbss, SBSS_SECTION_ASM_OP) \ ! SECTION_FUNCTION_TEMPLATE(rdata_section, in_rdata, RDATA_SECTION_ASM_OP) #define SECTION_FUNCTION_TEMPLATE(FN, ENUM, OP) \ void FN () \ *************** void FN () *** 332,383 **** } \ } ! /* A C statement (sans semicolon) to output an element in the table of ! global constructors. */ ! #undef ASM_OUTPUT_CONSTRUCTOR ! #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ ! do { \ ! ctors_section (); \ ! fprintf (FILE, "\t%s\t", TARGET_LONG64 ? ".dword" : ".word"); \ ! assemble_name (FILE, NAME); \ ! fprintf (FILE, "\n"); \ ! } while (0) ! ! ! /* A C statement (sans semicolon) to output an element in the table of ! global destructors. */ ! #undef ASM_OUTPUT_DESTRUCTOR ! #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \ ! do { \ ! dtors_section (); \ ! fprintf (FILE, "\t%s\t", TARGET_LONG64 ? ".dword" : ".word"); \ ! assemble_name (FILE, NAME); \ ! fprintf (FILE, "\n"); \ ! } while (0) ! ! #define CTOR_LIST_BEGIN \ ! func_ptr __CTOR_LIST__ __attribute__((section(CTORS_SECTION_NAME))) = \ ! (func_ptr) (-1) ! ! #define CTOR_LIST_END \ ! func_ptr __CTOR_END__ __attribute__((section(CTORS_SECTION_NAME))) = \ ! (func_ptr) 0 ! ! #define DTOR_LIST_BEGIN \ ! func_ptr __DTOR_LIST__ __attribute__((section(DTORS_SECTION_NAME))) = \ ! (func_ptr) (-1) ! ! #define DTOR_LIST_END \ ! func_ptr __DTOR_END__ __attribute__((section(DTORS_SECTION_NAME))) = \ ! (func_ptr) 0 /* Don't set the target flags, this is done by the linker script */ #undef LIB_SPEC #define LIB_SPEC "" #undef STARTFILE_SPEC ! #define STARTFILE_SPEC "crtbegin%O%s %{!mno-crt0:crt0%O%s}" #undef ENDFILE_SPEC ! #define ENDFILE_SPEC "crtend%O%s" --- 244,266 ---- } \ } + /* On elf, we *do* have support for the .init and .fini sections, and we + can put stuff in there to be executed before and after `main'. We let + crtstuff.c and other files know this by defining the following symbols. + The definitions say how to change sections to the .init and .fini + sections. This is the same for all known elf assemblers. */ ! #undef INIT_SECTION_ASM_OP ! #define INIT_SECTION_ASM_OP "\t.section\t.init" ! #undef FINI_SECTION_ASM_OP ! #define FINI_SECTION_ASM_OP "\t.section\t.fini" /* Don't set the target flags, this is done by the linker script */ #undef LIB_SPEC #define LIB_SPEC "" #undef STARTFILE_SPEC ! #define STARTFILE_SPEC "crti%O%s crtbegin%O%s %{!mno-crt0:crt0%O%s}" #undef ENDFILE_SPEC ! #define ENDFILE_SPEC "crtend%O%s crtn%O%s" diff -Nrc3pad gcc-3.0.4/gcc/config/mips/elf64.h gcc-3.1/gcc/config/mips/elf64.h *** gcc-3.0.4/gcc/config/mips/elf64.h Thu Apr 26 16:04:14 2001 --- gcc-3.1/gcc/config/mips/elf64.h Sun Nov 11 05:56:43 2001 *************** Boston, MA 02111-1307, USA. */ *** 25,30 **** --- 25,33 ---- #define TARGET_DEFAULT MASK_FLOAT64|MASK_64BIT #define MIPS_ISA_DEFAULT 3 + /* This should change to n32 when it is supported in gas. */ + #define MIPS_ABI_DEFAULT ABI_O64 + /* Until we figure out what MIPS ELF targets normally use, just do stabs in ELF. */ #ifndef PREFERRED_DEBUGGING_TYPE *************** Boston, MA 02111-1307, USA. */ *** 63,69 **** #define PUT_SDB_SIZE(a) \ do { \ extern FILE *asm_out_text_file; \ ! fprintf (asm_out_text_file, "\t.esize\t%d;", (a)); \ } while (0) #undef PUT_SDB_TYPE --- 66,74 ---- #define PUT_SDB_SIZE(a) \ do { \ extern FILE *asm_out_text_file; \ ! fprintf (asm_out_text_file, "\t.esize\t"); \ ! fprintf (asm_out_text_file, HOST_WIDE_INT_PRINT_DEC, (HOST_WIDE_INT) (a)); \ ! fprintf (asm_out_text_file, ";"); \ } while (0) #undef PUT_SDB_TYPE *************** do { \ *** 73,95 **** fprintf (asm_out_text_file, "\t.etype\t0x%x;", (a)); \ } while (0) ! /* A C statement to output something to the assembler file to switch to section ! NAME for object DECL which is either a FUNCTION_DECL, a VAR_DECL or ! NULL_TREE. Some target formats do not support arbitrary sections. Do not ! define this macro in such cases. */ ! #undef ASM_OUTPUT_SECTION_NAME ! #define ASM_OUTPUT_SECTION_NAME(F, DECL, NAME, RELOC) \ ! do { \ ! extern FILE *asm_out_text_file; \ ! if ((DECL) && TREE_CODE (DECL) == FUNCTION_DECL) \ ! fprintf (asm_out_text_file, "\t.section %s,\"ax\",@progbits\n", (NAME)); \ ! else if ((DECL) && DECL_READONLY_SECTION (DECL, RELOC)) \ ! fprintf (F, "\t.section %s,\"a\",@progbits\n", (NAME)); \ ! else if (! strcmp (NAME, ".bss")) \ ! fprintf (F, "\t.section %s,\"aw\",@nobits\n", (NAME)); \ ! else \ ! fprintf (F, "\t.section %s,\"aw\",@progbits\n", (NAME)); \ } while (0) /* The following macro defines the format used to output the second --- 78,98 ---- fprintf (asm_out_text_file, "\t.etype\t0x%x;", (a)); \ } while (0) ! /* Switch into a generic section. */ ! #undef TARGET_ASM_NAMED_SECTION ! #define TARGET_ASM_NAMED_SECTION default_elf_asm_named_section ! /* Given that Irix has it's own headers, not having TARGET_GAS here ! seems a mistake. If we actually need to be prepared for file ! switching, then we need a custom TARGET_ASM_NAMED_SECTION too. */ ! ! #undef TEXT_SECTION ! #define TEXT_SECTION() \ ! do { \ ! if (TARGET_FILE_SWITCHING) \ ! abort (); \ ! fputs (TEXT_SECTION_ASM_OP, asm_out_file); \ ! fputc ('\n', asm_out_file); \ } while (0) /* The following macro defines the format used to output the second *************** do { \ *** 132,138 **** size_directive_output = 1; \ fprintf (FILE, "%s", SIZE_ASM_OP); \ assemble_name (FILE, NAME); \ ! fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \ } \ mips_declare_object (FILE, NAME, "", ":\n", 0); \ } while (0) --- 135,144 ---- size_directive_output = 1; \ fprintf (FILE, "%s", SIZE_ASM_OP); \ assemble_name (FILE, NAME); \ ! fprintf (FILE, ","); \ ! fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, \ ! int_size_in_bytes (TREE_TYPE (DECL))); \ ! fprintf (FILE, "\n"); \ } \ mips_declare_object (FILE, NAME, "", ":\n", 0); \ } while (0) *************** do { \ *** 155,161 **** size_directive_output = 1; \ fprintf (FILE, "%s", SIZE_ASM_OP); \ assemble_name (FILE, name); \ ! fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \ } \ } while (0) --- 161,170 ---- size_directive_output = 1; \ fprintf (FILE, "%s", SIZE_ASM_OP); \ assemble_name (FILE, name); \ ! fprintf (FILE, ","); \ ! fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, \ ! int_size_in_bytes (TREE_TYPE (DECL))); \ ! fprintf (FILE, "\n"); \ } \ } while (0) *************** do { \ *** 172,178 **** mips-elf gas supports .weak, but not .weakext. mips-elf gas has been changed to support both .weak and .weakext, but until that support is generally available, the 'if' below ! should serve. */ #undef ASM_WEAKEN_LABEL #define ASM_WEAKEN_LABEL(FILE,NAME) ASM_OUTPUT_WEAK_ALIAS(FILE,NAME,0) --- 181,187 ---- mips-elf gas supports .weak, but not .weakext. mips-elf gas has been changed to support both .weak and .weakext, but until that support is generally available, the 'if' below ! should serve. */ #undef ASM_WEAKEN_LABEL #define ASM_WEAKEN_LABEL(FILE,NAME) ASM_OUTPUT_WEAK_ALIAS(FILE,NAME,0) *************** do { \ *** 192,205 **** } while (0) #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1) - #undef UNIQUE_SECTION_P - #define UNIQUE_SECTION_P(DECL) (DECL_ONE_ONLY (DECL)) #undef UNIQUE_SECTION #define UNIQUE_SECTION(DECL,RELOC) \ do { \ int len, size, sec; \ ! char *name, *string, *prefix; \ ! static char *prefixes[4][2] = { \ { ".text.", ".gnu.linkonce.t." }, \ { ".rodata.", ".gnu.linkonce.r." }, \ { ".data.", ".gnu.linkonce.d." }, \ --- 201,213 ---- } while (0) #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1) #undef UNIQUE_SECTION #define UNIQUE_SECTION(DECL,RELOC) \ do { \ int len, size, sec; \ ! const char *name, *prefix; \ ! char *string; \ ! static const char *const prefixes[4][2] = { \ { ".text.", ".gnu.linkonce.t." }, \ { ".rodata.", ".gnu.linkonce.r." }, \ { ".data.", ".gnu.linkonce.d." }, \ *************** do { \ *** 260,306 **** DECL_SECTION_NAME (DECL) = build_string (len, string); \ } while (0) - /* Support the ctors/dtors and other sections. */ - - /* Define the names of and pseudo-ops used to switch to the .ctors and - .dtors sections. - - Note that we want to give these sections the SHF_WRITE attribute - because these sections will actually contain data (i.e. tables of - addresses of functions in the current root executable or shared library - file) and, in the case of a shared library, the relocatable addresses - will have to be properly resolved/relocated (and then written into) by - the dynamic linker when it actually attaches the given shared library - to the executing process. (Note that on SVR4, you may wish to use the - `-z text' option to the ELF linker, when building a shared library, as - an additional check that you are doing everything right. But if you do - use the `-z text' option when building a shared library, you will get - errors unless the .ctors and .dtors sections are marked as writable - via the SHF_WRITE attribute.) */ - - #define CTORS_SECTION_NAME ".ctors" - #define CTORS_SECTION_ASM_OP "\t.section\t.ctors,\"aw\"" - #define DTORS_SECTION_NAME ".dtors" - #define DTORS_SECTION_ASM_OP "\t.section\t.dtors,\"aw\"" - - /* There's no point providing a default definition of __CTOR_LIST__ - since people are expected either to use crtbegin.o, or an equivalent, - or provide their own definition. */ - #define CTOR_LISTS_DEFINED_EXTERNALLY - /* A list of other sections which the compiler might be "in" at any given time. */ #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_sdata, in_rdata, in_ctors, in_dtors ! ! #define INVOKE__main #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ SECTION_FUNCTION_TEMPLATE(sdata_section, in_sdata, SDATA_SECTION_ASM_OP) \ ! SECTION_FUNCTION_TEMPLATE(rdata_section, in_rdata, RDATA_SECTION_ASM_OP) \ ! SECTION_FUNCTION_TEMPLATE(ctors_section, in_ctors, CTORS_SECTION_ASM_OP) \ ! SECTION_FUNCTION_TEMPLATE(dtors_section, in_dtors, DTORS_SECTION_ASM_OP) #define SECTION_FUNCTION_TEMPLATE(FN, ENUM, OP) \ void FN () \ --- 268,282 ---- DECL_SECTION_NAME (DECL) = build_string (len, string); \ } while (0) /* A list of other sections which the compiler might be "in" at any given time. */ #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_sdata, in_rdata #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ SECTION_FUNCTION_TEMPLATE(sdata_section, in_sdata, SDATA_SECTION_ASM_OP) \ ! SECTION_FUNCTION_TEMPLATE(rdata_section, in_rdata, RDATA_SECTION_ASM_OP) #define SECTION_FUNCTION_TEMPLATE(FN, ENUM, OP) \ void FN () \ *************** void FN () *** 312,363 **** } \ } ! /* A C statement (sans semicolon) to output an element in the table of ! global constructors. */ ! #undef ASM_OUTPUT_CONSTRUCTOR ! #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ ! do { \ ! ctors_section (); \ ! fprintf (FILE, "\t%s\t", (Pmode == SImode) ? ".word" : ".dword"); \ ! assemble_name (FILE, NAME); \ ! fprintf (FILE, "\n"); \ ! } while (0) ! ! ! /* A C statement (sans semicolon) to output an element in the table of ! global destructors. */ ! #undef ASM_OUTPUT_DESTRUCTOR ! #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \ ! do { \ ! dtors_section (); \ ! fprintf (FILE, "\t%s\t", (Pmode == SImode) ? ".word" : ".dword"); \ ! assemble_name (FILE, NAME); \ ! fprintf (FILE, "\n"); \ ! } while (0) ! ! #define CTOR_LIST_BEGIN \ ! func_ptr __CTOR_LIST__ __attribute__((section(CTORS_SECTION_NAME))) = \ ! (func_ptr) (-1) ! ! #define CTOR_LIST_END \ ! func_ptr __CTOR_END__ __attribute__((section(CTORS_SECTION_NAME))) = \ ! (func_ptr) 0 ! ! #define DTOR_LIST_BEGIN \ ! func_ptr __DTOR_LIST__ __attribute__((section(DTORS_SECTION_NAME))) = \ ! (func_ptr) (-1) ! ! #define DTOR_LIST_END \ ! func_ptr __DTOR_END__ __attribute__((section(DTORS_SECTION_NAME))) = \ ! (func_ptr) 0 /* Don't set the target flags, this is done by the linker script */ #undef LIB_SPEC #define LIB_SPEC "" #undef STARTFILE_SPEC ! #define STARTFILE_SPEC "crtbegin%O%s %{!mno-crt0:crt0%O%s}" #undef ENDFILE_SPEC ! #define ENDFILE_SPEC "crtend%O%s" --- 288,310 ---- } \ } + /* On elf, we *do* have support for the .init and .fini sections, and we + can put stuff in there to be executed before and after `main'. We let + crtstuff.c and other files know this by defining the following symbols. + The definitions say how to change sections to the .init and .fini + sections. This is the same for all known elf assemblers. */ ! #undef INIT_SECTION_ASM_OP ! #define INIT_SECTION_ASM_OP "\t.section\t.init" ! #undef FINI_SECTION_ASM_OP ! #define FINI_SECTION_ASM_OP "\t.section\t.fini" /* Don't set the target flags, this is done by the linker script */ #undef LIB_SPEC #define LIB_SPEC "" #undef STARTFILE_SPEC ! #define STARTFILE_SPEC "crti%O%s crtbegin%O%s %{!mno-crt0:crt0%O%s}" #undef ENDFILE_SPEC ! #define ENDFILE_SPEC "crtend%O%s crtn%O%s" diff -Nrc3pad gcc-3.0.4/gcc/config/mips/gnu.h gcc-3.1/gcc/config/mips/gnu.h *** gcc-3.0.4/gcc/config/mips/gnu.h Mon Apr 16 18:25:51 2001 --- gcc-3.1/gcc/config/mips/gnu.h Thu Jan 1 00:00:00 1970 *************** *** 1,112 **** - /* Definitions of target machine for GNU compiler. MIPS GNU Hurd version. - Copyright (C) 1995, 1996, 1999, 2000 Free Software Foundation, Inc. - - This file is part of GNU CC. - - GNU CC is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU CC is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNU CC; see the file COPYING. If not, write to - the Free Software Foundation, 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - - #define TARGET_DEFAULT MASK_GAS - - #include - - #undef SWITCH_TAKES_ARG - #undef ASM_FILE_END - #undef ASM_OUTPUT_IDENT - #undef ASM_OUTPUT_SOURCE_LINE - #undef READONLY_DATA_SECTION - #undef SELECT_SECTION - #undef ASM_DECLARE_FUNCTION_NAME - #undef ASM_DECLARE_OBJECT_NAME - /* #undef PREFERRED_DEBUGGING_TYPE */ - - #include - - #undef MD_EXEC_PREFIX - #undef MD_STARTFILE_PREFIX - #undef TARGET_VERSION - #define TARGET_VERSION fprintf (stderr, " (MIPS GNU/ELF)"); - - #undef ASM_OUTPUT_SOURCE_LINE - #define ASM_OUTPUT_SOURCE_LINE(FILE, LINE) \ - do { \ - ++sym_lineno; \ - fprintf ((FILE), ".LM%d:\n%s%d,0,%d,.LM%d\n", \ - sym_lineno, ASM_STABN_OP, N_SLINE, (LINE), sym_lineno); \ - } while (0) - - #undef ASM_DECLARE_FUNCTION_NAME - #define ASM_DECLARE_FUNCTION_NAME(STREAM, NAME, DECL) \ - do { \ - extern FILE *asm_out_text_file; \ - \ - if (TARGET_GP_OPT) \ - STREAM = asm_out_text_file; \ - fprintf (STREAM, "%s", TYPE_ASM_OP); \ - assemble_name (STREAM, NAME); \ - putc (',', STREAM); \ - fprintf (STREAM, TYPE_OPERAND_FMT, "function"); \ - putc ('\n', STREAM); \ - ASM_DECLARE_RESULT (STREAM, DECL_RESULT (DECL)); \ - HALF_PIC_DECLARE (NAME); \ - } while (0) - - /* Switch Recognition by gcc.c. Add -G xx support */ - #undef SWITCH_TAKES_ARG - #define SWITCH_TAKES_ARG(CHAR) \ - (DEFAULT_SWITCH_TAKES_ARG(CHAR) || (CHAR) == 'G') - - #undef DEFAULT_PCC_STRUCT_RETURN - #define DEFAULT_PCC_STRUCT_RETURN 1 - - #undef DBX_REGISTER_NUMBER - #define DBX_REGISTER_NUMBER(REGNO) mips_dbx_regno[ (REGNO) ] - - #define MIPS_GNU - - #undef CPP_PREDEFINES - #define CPP_PREDEFINES "-Dmips -Acpu=mips -Amachine=mips \ - -Dunix -Asystem=unix -DMACH -Asystem=mach -D__GNU__ -Asystem=gnu \ - -DMIPSEB -DR3000 -D_MIPSEB -D_R3000 \ - -D_MIPS_SZINT=32 -D_MIPS_SZLONG=32 -D_MIPS_SZPTR=32" - - #undef LINK_SPEC - #define LINK_SPEC "\ - %{G*} %{EB} %{EL} %{mips1} %{mips2} %{mips3} \ - %{bestGnum} %{shared} %{non_shared} \ - %{call_shared} %{no_archive} %{exact_version} \ - %{!shared: %{!non_shared: %{!call_shared: -non_shared}}} \ - -systype /gnu/ " - - #undef LIB_SPEC - #define LIB_SPEC "%{p:-lprof1} %{pg:-lprof1} -lc crtn.o%s" - - #undef STARTFILE_SPEC - #define STARTFILE_SPEC "%{pg:gcrt0.o%s} %{!pg:%{p:gcrt0.o%s} %{!p:crt0.o%s}} %{static:-static}" - - #undef MACHINE_TYPE - #define MACHINE_TYPE "GNU MIPS/ELF" - - #undef YES_UNDERSCORE - - #undef SDB_DEBUGGING_INFO - #undef DBX_DEBUGGING_INFO - #undef MIPS_DEBUGGING_INFO - #define DWARF_DEBUGGING_INFO - - #define NO_MIPS_SELECT_SECTION - - /* Get machine-independent configuration parameters for the GNU system. */ - #include --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/mips/iris5.h gcc-3.1/gcc/config/mips/iris5.h *** gcc-3.0.4/gcc/config/mips/iris5.h Tue Jul 17 12:51:31 2001 --- gcc-3.1/gcc/config/mips/iris5.h Tue Jan 8 22:51:37 2002 *************** *** 1,6 **** /* Definitions of target machine for GNU compiler. Iris version 5. Copyright (C) 1993, 1995, 1996, 1998, 2000, ! 2001 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,6 ---- /* Definitions of target machine for GNU compiler. Iris version 5. Copyright (C) 1993, 1995, 1996, 1998, 2000, ! 2001, 2002 Free Software Foundation, Inc. This file is part of GNU CC. *************** along with GNU CC; see the file COPYING. *** 19,24 **** --- 19,26 ---- the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + #define TARGET_IRIX5 1 + #ifndef TARGET_DEFAULT #define TARGET_DEFAULT MASK_ABICALLS #endif *************** Boston, MA 02111-1307, USA. */ *** 54,60 **** #define WCHAR_TYPE "int" #define WCHAR_TYPE_SIZE INT_TYPE_SIZE ! #define MAX_WCHAR_TYPE_SIZE MAX_INT_TYPE_SIZE #define WORD_SWITCH_TAKES_ARG(STR) \ (DEFAULT_WORD_SWITCH_TAKES_ARG (STR) \ --- 56,62 ---- #define WCHAR_TYPE "int" #define WCHAR_TYPE_SIZE INT_TYPE_SIZE ! #define MAX_WCHAR_TYPE_SIZE 64 #define WORD_SWITCH_TAKES_ARG(STR) \ (DEFAULT_WORD_SWITCH_TAKES_ARG (STR) \ *************** Boston, MA 02111-1307, USA. */ *** 114,120 **** /* We do not want to run mips-tfile! */ #undef ASM_FINAL_SPEC ! /* The system header files are C++ aware. */ /* ??? Unfortunately, most but not all of the headers are C++ aware. Specifically, curses.h is not, and as a consequence, defining this used to prevent libg++ building. This is no longer the case so --- 116,122 ---- /* We do not want to run mips-tfile! */ #undef ASM_FINAL_SPEC ! /* The system header files are C++ aware. */ /* ??? Unfortunately, most but not all of the headers are C++ aware. Specifically, curses.h is not, and as a consequence, defining this used to prevent libg++ building. This is no longer the case so *************** Boston, MA 02111-1307, USA. */ *** 123,129 **** fixing. */ #define NO_IMPLICIT_EXTERN_C 1 ! /* We don't support debugging info for now. */ #undef DBX_DEBUGGING_INFO #undef SDB_DEBUGGING_INFO #undef MIPS_DEBUGGING_INFO --- 125,131 ---- fixing. */ #define NO_IMPLICIT_EXTERN_C 1 ! /* We don't support debugging info for now. */ #undef DBX_DEBUGGING_INFO #undef SDB_DEBUGGING_INFO #undef MIPS_DEBUGGING_INFO *************** do { \ *** 155,164 **** fputs (" .text\n", FILE); \ } while (0) - /* To get unaligned data, we have to turn off auto alignment. */ - #define UNALIGNED_SHORT_ASM_OP "\t.align 0\n\t.half\t" - #define UNALIGNED_INT_ASM_OP "\t.align 0\n\t.word\t" - /* Also do this for libcalls. */ #define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, FUN) \ mips_output_external_libcall (FILE, XSTR (FUN, 0)) --- 157,162 ---- diff -Nrc3pad gcc-3.0.4/gcc/config/mips/iris5gas.h gcc-3.1/gcc/config/mips/iris5gas.h *** gcc-3.0.4/gcc/config/mips/iris5gas.h Wed Dec 16 21:09:09 1998 --- gcc-3.1/gcc/config/mips/iris5gas.h Sun Nov 11 05:56:43 2001 *************** *** 1,4 **** ! /* Definitions of target machine for GNU compiler. Irix version 5 with gas. */ /* Enable debugging. */ #define DBX_DEBUGGING_INFO --- 1,4 ---- ! /* Definitions of target machine for GNU compiler. Irix version 5 with gas. */ /* Enable debugging. */ #define DBX_DEBUGGING_INFO *************** *** 23,29 **** #define PUT_SDB_SIZE(a) \ do { \ extern FILE *asm_out_text_file; \ ! fprintf (asm_out_text_file, "\t.esize\t%d;", (a)); \ } while (0) #undef PUT_SDB_TYPE --- 23,31 ---- #define PUT_SDB_SIZE(a) \ do { \ extern FILE *asm_out_text_file; \ ! fprintf (asm_out_text_file, "\t.esize\t"); \ ! fprintf (asm_out_text_file, HOST_WIDE_INT_PRINT_DEC, (HOST_WIDE_INT) (a)); \ ! fprintf (asm_out_text_file, ";"); \ } while (0) #undef PUT_SDB_TYPE diff -Nrc3pad gcc-3.0.4/gcc/config/mips/iris6.h gcc-3.1/gcc/config/mips/iris6.h *** gcc-3.0.4/gcc/config/mips/iris6.h Tue Jul 17 12:51:31 2001 --- gcc-3.1/gcc/config/mips/iris6.h Mon Dec 17 15:05:34 2001 *************** along with GNU CC; see the file COPYING. *** 18,23 **** --- 18,26 ---- the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + /* Let mips.c know we need the Irix6 functions. */ + #define TARGET_IRIX6 1 + /* Default to -mabi=n32 and -mips3. */ #define MIPS_ISA_DEFAULT 3 #define MIPS_ABI_DEFAULT ABI_N32 *************** Boston, MA 02111-1307, USA. */ *** 31,37 **** #include "mips/abi64.h" /* Irix6 assembler does handle DWARF2 directives. Override setting in ! irix5.h file. */ #undef DWARF2_UNWIND_INFO /* The Irix6 assembler will sometimes assign labels to the wrong --- 34,40 ---- #include "mips/abi64.h" /* Irix6 assembler does handle DWARF2 directives. Override setting in ! irix5.h file. */ #undef DWARF2_UNWIND_INFO /* The Irix6 assembler will sometimes assign labels to the wrong *************** Boston, MA 02111-1307, USA. */ *** 128,135 **** #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG /* Force the generation of dwarf .debug_frame sections even if not ! compiling -g. This guarantees that we can unwind the stack. */ #define DWARF2_FRAME_INFO 1 /* The size in bytes of a DWARF field indicating an offset or length relative to a debug info section, specified to be 4 bytes in the DWARF-2 specification. The SGI/MIPS ABI defines it to be the same as PTR_SIZE. */ --- 131,139 ---- #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG /* Force the generation of dwarf .debug_frame sections even if not ! compiling -g. This guarantees that we can unwind the stack. */ #define DWARF2_FRAME_INFO 1 + /* The size in bytes of a DWARF field indicating an offset or length relative to a debug info section, specified to be 4 bytes in the DWARF-2 specification. The SGI/MIPS ABI defines it to be the same as PTR_SIZE. */ *************** Boston, MA 02111-1307, USA. */ *** 155,162 **** #undef ASM_OUTPUT_UNDEF_FUNCTION #undef ASM_OUTPUT_EXTERNAL_LIBCALL #undef ASM_DECLARE_FUNCTION_SIZE - #undef UNALIGNED_SHORT_ASM_OP - #undef UNALIGNED_INT_ASM_OP /* Stuff we need for Irix 6 that isn't in Irix 5. */ --- 159,164 ---- *************** Boston, MA 02111-1307, USA. */ *** 217,232 **** #define POPSECTION_ASM_OP "\t.popsection" - #define DEBUG_INFO_SECTION ".debug_info,0x7000001e,0,0,1" - #define DEBUG_LINE_SECTION ".debug_line,0x7000001e,0,0,1" - #define SFNAMES_SECTION ".debug_sfnames,0x7000001e,0,0,1" - #define SRCINFO_SECTION ".debug_srcinfo,0x7000001e,0,0,1" - #define MACINFO_SECTION ".debug_macinfo,0x7000001e,0,0,1" - #define PUBNAMES_SECTION ".debug_pubnames,0x7000001e,0,0,1" - #define ARANGES_SECTION ".debug_aranges,0x7000001e,0,0,1" - #define FRAME_SECTION ".debug_frame,0x7000001e,0x08000000,0,1" - #define ABBREV_SECTION ".debug_abbrev,0x7000001e,0,0,1" - /* ??? If no mabi=X option give, but a mipsX option is, then should depend on the mipsX option. */ /* If no mips[3,4] option given, give the appropriate default for mabi=X */ --- 219,224 ---- *************** Boston, MA 02111-1307, USA. */ *** 234,240 **** #define SUBTARGET_ASM_SPEC "%{!mabi*:-n32} %{!mips*: %{!mabi*:-mips3} %{mabi=n32:-mips3} %{mabi=64:-mips4}}" /* Must pass -g0 to the assembler, otherwise it may overwrite our ! debug info with its own debug info. */ /* Must pass -show instead of -v. */ /* Must pass -G 0 to the assembler, otherwise we may get warnings about GOT overflow. */ --- 226,232 ---- #define SUBTARGET_ASM_SPEC "%{!mabi*:-n32} %{!mips*: %{!mabi*:-mips3} %{mabi=n32:-mips3} %{mabi=64:-mips4}}" /* Must pass -g0 to the assembler, otherwise it may overwrite our ! debug info with its own debug info. */ /* Must pass -show instead of -v. */ /* Must pass -G 0 to the assembler, otherwise we may get warnings about GOT overflow. */ *************** Boston, MA 02111-1307, USA. */ *** 252,259 **** #undef SUBTARGET_ASM_OPTIMIZING_SPEC #define SUBTARGET_ASM_OPTIMIZING_SPEC "-O0" - /* Stuff for constructors. Start here. */ - /* The assembler now accepts .section pseudo-ops, but it does not allow one to change the section in the middle of a function, so we can't use the INIT_SECTION_ASM_OP code in crtstuff. But we can build up the ctor --- 244,249 ---- *************** Boston, MA 02111-1307, USA. */ *** 264,306 **** #define CONST_SECTION_ASM_OP_32 "\t.rdata" #define CONST_SECTION_ASM_OP_64 "\t.section\t.rodata" - /* The IRIX 6 assembler .section directive takes four additional args: - section type, flags, entry size, and alignment. The alignment of the - .ctors and .dtors sections needs to be the same as the size of a pointer - so that the linker doesn't add padding between elements. */ - #if defined (CRT_BEGIN) || defined (CRT_END) - - /* If we are included from crtstuff.c, these need to be plain strings. - _MIPS_SZPTR is defined in SUBTARGET_CPP_SPEC above. */ - #if _MIPS_SZPTR == 64 - #define CTORS_SECTION_ASM_OP "\t.section\t.ctors,1,2,0,8" - #define DTORS_SECTION_ASM_OP "\t.section\t.dtors,1,2,0,8" - #define EH_FRAME_SECTION_ASM_OP "\t.section\t.eh_frame,1,2,0,8" - #else /* _MIPS_SZPTR != 64 */ - #define CTORS_SECTION_ASM_OP "\t.section\t.ctors,1,2,0,4" - #define DTORS_SECTION_ASM_OP "\t.section\t.dtors,1,2,0,4" - #define EH_FRAME_SECTION_ASM_OP "\t.section\t.eh_frame,1,2,0,4" - - #endif /* _MIPS_SZPTR == 64 */ - - #else /* ! (defined (CRT_BEGIN) || defined (CRT_END)) */ - - /* If we are included from varasm.c, these need to depend on -mabi. */ - #define CTORS_SECTION_ASM_OP \ - (Pmode == DImode ? "\t.section\t.ctors,1,2,0,8" : "\t.section\t.ctors,1,2,0,4") - #define DTORS_SECTION_ASM_OP \ - (Pmode == DImode ? "\t.section\t.dtors,1,2,0,8" : "\t.section\t.dtors,1,2,0,4") - #define EH_FRAME_SECTION_ASM_OP \ - (Pmode == DImode ? "\t.section\t.eh_frame,1,2,0,8" : "\t.section\t.eh_frame,1,2,0,4") - #endif /* defined (CRT_BEGIN) || defined (CRT_END) */ - /* A default list of other sections which we might be "in" at any given time. For targets that use additional sections (e.g. .tdesc) you should override this definition in the target-specific file which includes this file. */ #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_sdata, in_rdata, in_const, in_ctors, in_dtors /* A default list of extra section function definitions. For targets that use additional sections (e.g. .tdesc) you should override this --- 254,266 ---- #define CONST_SECTION_ASM_OP_32 "\t.rdata" #define CONST_SECTION_ASM_OP_64 "\t.section\t.rodata" /* A default list of other sections which we might be "in" at any given time. For targets that use additional sections (e.g. .tdesc) you should override this definition in the target-specific file which includes this file. */ #undef EXTRA_SECTIONS ! #define EXTRA_SECTIONS in_sdata, in_rdata, in_const /* A default list of extra section function definitions. For targets that use additional sections (e.g. .tdesc) you should override this *************** rdata_section () \ *** 332,404 **** in_section = in_rdata; \ } \ } \ ! CTORS_SECTION_FUNCTION \ ! DTORS_SECTION_FUNCTION ! ! #define CTORS_SECTION_FUNCTION \ ! void \ ! ctors_section () \ { \ ! if (in_section != in_ctors) \ { \ ! fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP); \ ! in_section = in_ctors; \ } \ ! } ! ! #define DTORS_SECTION_FUNCTION \ ! void \ ! dtors_section () \ { \ ! if (in_section != in_dtors) \ { \ ! fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP); \ ! in_section = in_dtors; \ } \ } ! /* A C statement (sans semicolon) to output an element in the table of ! global constructors. */ ! #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ ! do { \ ! ctors_section (); \ ! fprintf (FILE, "\t%s\t ", \ ! (Pmode == DImode) ? ".dword" : ".word"); \ ! assemble_name (FILE, NAME); \ ! fprintf (FILE, "\n"); \ ! } while (0) ! ! /* A C statement (sans semicolon) to output an element in the table of ! global destructors. */ ! #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \ ! do { \ ! dtors_section (); \ ! fprintf (FILE, "\t%s\t ", \ ! (Pmode == DImode) ? ".dword" : ".word"); \ ! assemble_name (FILE, NAME); \ ! fprintf (FILE, "\n"); \ ! } while (0) ! ! /* A C statement to output something to the assembler file to switch to section ! NAME for object DECL which is either a FUNCTION_DECL, a VAR_DECL or ! NULL_TREE. */ ! ! #define ASM_OUTPUT_SECTION_NAME(F, DECL, NAME, RELOC) \ ! do { \ ! extern FILE *asm_out_text_file; \ ! if ((DECL) && TREE_CODE (DECL) == FUNCTION_DECL) \ ! fprintf (asm_out_text_file, "\t.section %s,1,6,4,4\n", (NAME)); \ ! else if ((DECL) && DECL_READONLY_SECTION (DECL, RELOC)) \ ! fprintf (F, "\t.section %s,1,2,0,8\n", (NAME)); \ ! else if (! strcmp (NAME, ".bss")) \ ! fprintf (F, "\t.section %s,\"aw\",@nobits\n", (NAME)); \ ! else \ ! fprintf (F, "\t.section %s,1,3,0,8\n", (NAME)); \ ! } while (0) ! /* Stuff for constructors. End here. */ ! /* ??? Perhaps just include svr4.h in this file? */ /* ??? SGI assembler may core dump when compiling with -g. Sometimes as succeeds, but then we get a linker error. (cmds.c in 072.sc) --- 292,351 ---- in_section = in_rdata; \ } \ } \ ! \ ! const char * \ ! current_section_name () \ { \ ! switch (in_section) \ { \ ! case no_section: return NULL; \ ! case in_text: return ".text"; \ ! case in_data: return ".data"; \ ! case in_sdata: return ".sdata"; \ ! case in_bss: return ".bss"; \ ! case in_rdata: \ ! case in_const: \ ! if (mips_abi != ABI_32 && mips_abi != ABI_O64) \ ! return ".rodata"; \ ! else \ ! return ".rdata"; \ ! case in_named: \ ! return in_named_name; \ } \ ! abort (); \ ! } \ ! \ ! unsigned int \ ! current_section_flags () \ { \ ! switch (in_section) \ { \ ! case no_section: return 0; \ ! case in_text: return SECTION_CODE; \ ! case in_data: return SECTION_WRITE; \ ! case in_sdata: return SECTION_WRITE | SECTION_SMALL; \ ! case in_bss: return SECTION_WRITE | SECTION_BSS; \ ! case in_rdata: \ ! case in_const: return 0; \ ! case in_named: return get_named_section_flags (in_named_name); \ } \ + abort (); \ } ! /* Switch into a generic section. */ ! #undef TARGET_ASM_NAMED_SECTION ! #define TARGET_ASM_NAMED_SECTION iris6_asm_named_section ! /* SGI assembler needs all sorts of extra help to do alignment properly. */ ! #undef ASM_OUTPUT_ALIGN ! #define ASM_OUTPUT_ALIGN iris6_asm_output_align ! #undef ASM_FILE_START ! #define ASM_FILE_START iris6_asm_file_start ! #undef ASM_FILE_END ! #define ASM_FILE_END iris6_asm_file_end ! #undef MAX_OFILE_ALIGNMENT ! #define MAX_OFILE_ALIGNMENT (32768*8) /* ??? SGI assembler may core dump when compiling with -g. Sometimes as succeeds, but then we get a linker error. (cmds.c in 072.sc) *************** do \ *** 420,430 **** { \ if (mips_abi != ABI_32 && mips_abi != ABI_O64) \ { \ ! fprintf (STREAM, "%s\n", BSS_SECTION_ASM_OP); \ mips_declare_object (STREAM, NAME, "", ":\n", 0); \ ASM_OUTPUT_ALIGN (STREAM, floor_log2 (ALIGN / BITS_PER_UNIT)); \ ASM_OUTPUT_SKIP (STREAM, SIZE); \ - fprintf (STREAM, "%s\n", POPSECTION_ASM_OP); \ } \ else \ mips_declare_object (STREAM, NAME, "\n\t.lcomm\t", ",%u\n", (SIZE)); \ --- 367,376 ---- { \ if (mips_abi != ABI_32 && mips_abi != ABI_O64) \ { \ ! bss_section (); \ mips_declare_object (STREAM, NAME, "", ":\n", 0); \ ASM_OUTPUT_ALIGN (STREAM, floor_log2 (ALIGN / BITS_PER_UNIT)); \ ASM_OUTPUT_SKIP (STREAM, SIZE); \ } \ else \ mips_declare_object (STREAM, NAME, "\n\t.lcomm\t", ",%u\n", (SIZE)); \ *************** do \ *** 451,457 **** size_directive_output = 1; \ fprintf (STREAM, "%s", SIZE_ASM_OP); \ assemble_name (STREAM, NAME); \ ! fprintf (STREAM, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \ } \ mips_declare_object (STREAM, NAME, "", ":\n", 0); \ } \ --- 397,405 ---- size_directive_output = 1; \ fprintf (STREAM, "%s", SIZE_ASM_OP); \ assemble_name (STREAM, NAME); \ ! fprintf (STREAM, ","); \ ! fprintf (STREAM, HOST_WIDE_INT_PRINT_DEC, int_size_in_bytes (TREE_TYPE (DECL))); \ ! fprintf (STREAM, "\n"); \ } \ mips_declare_object (STREAM, NAME, "", ":\n", 0); \ } \ *************** do { \ *** 480,486 **** size_directive_output = 1; \ fprintf (FILE, "%s", SIZE_ASM_OP); \ assemble_name (FILE, name); \ ! fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \ } \ } while (0) --- 428,436 ---- size_directive_output = 1; \ fprintf (FILE, "%s", SIZE_ASM_OP); \ assemble_name (FILE, name); \ ! fprintf (FILE, ","); \ ! fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, int_size_in_bytes (TREE_TYPE (DECL))); \ ! fprintf (FILE, "\n"); \ } \ } while (0) *************** do { \ *** 557,562 **** %{call_shared} %{no_archive} %{exact_version} %{w} \ %{!shared: %{!non_shared: %{!call_shared: -call_shared -no_unresolved}}} \ %{rpath} -init __do_global_ctors -fini __do_global_dtors \ ! %{shared:-hidden_symbol __do_global_ctors,__do_global_dtors,__EH_FRAME_BEGIN__,__frame_dummy} \ -_SYSTYPE_SVR4 -woff 131 \ %{mabi=32: -32}%{mabi=n32: -n32}%{mabi=64: -64}%{!mabi*: -n32}" --- 507,512 ---- %{call_shared} %{no_archive} %{exact_version} %{w} \ %{!shared: %{!non_shared: %{!call_shared: -call_shared -no_unresolved}}} \ %{rpath} -init __do_global_ctors -fini __do_global_dtors \ ! %{shared:-hidden_symbol __do_global_ctors,__do_global_ctors_1,__do_global_dtors} \ -_SYSTYPE_SVR4 -woff 131 \ %{mabi=32: -32}%{mabi=n32: -n32}%{mabi=64: -64}%{!mabi*: -n32}" diff -Nrc3pad gcc-3.0.4/gcc/config/mips/iris6gld.h gcc-3.1/gcc/config/mips/iris6gld.h *** gcc-3.0.4/gcc/config/mips/iris6gld.h Tue Feb 1 18:18:10 2000 --- gcc-3.1/gcc/config/mips/iris6gld.h Sun Oct 7 16:51:10 2001 *************** Boston, MA 02111-1307, USA. */ *** 49,65 **** /* The GNU linker supports one-only sections. */ #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1) - #undef UNIQUE_SECTION_P - #define UNIQUE_SECTION_P(DECL) (DECL_ONE_ONLY (DECL)) #define UNIQUE_SECTION(DECL, RELOC) \ do \ { \ int len; \ int sec; \ ! char *name; \ char *string; \ ! char *prefix; \ ! static char *prefixes[/*4*/3][2] = \ { \ { ".text.", ".gnu.linkonce.t." }, \ { ".rodata.", ".gnu.linkonce.r." }, \ --- 49,63 ---- /* The GNU linker supports one-only sections. */ #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1) #define UNIQUE_SECTION(DECL, RELOC) \ do \ { \ int len; \ int sec; \ ! const char *name; \ char *string; \ ! const char *prefix; \ ! static const char *const prefixes[/*4*/3][2] = \ { \ { ".text.", ".gnu.linkonce.t." }, \ { ".rodata.", ".gnu.linkonce.r." }, \ diff -Nrc3pad gcc-3.0.4/gcc/config/mips/irix6-libc-compat.c gcc-3.1/gcc/config/mips/irix6-libc-compat.c *** gcc-3.0.4/gcc/config/mips/irix6-libc-compat.c Tue Jul 24 12:06:17 2001 --- gcc-3.1/gcc/config/mips/irix6-libc-compat.c Wed Aug 29 11:45:13 2001 *************** Boston, MA 02111-1307, USA. */ *** 67,72 **** --- 67,77 ---- always 32. */ #define SHIFT_BITS 32 + extern machreg_t inet_ntoa PARAMS ((machreg_t)); + extern machreg_t inet_lnaof PARAMS ((machreg_t)); + extern machreg_t inet_netof PARAMS ((machreg_t)); + extern machreg_t inet_makeaddr PARAMS ((machreg_t, machreg_t)); + extern machreg_t _inet_ntoa PARAMS ((machreg_t)); extern machreg_t _inet_lnaof PARAMS ((machreg_t)); extern machreg_t _inet_netof PARAMS ((machreg_t)); *************** inet_makeaddr (machreg_t net, machreg_t *** 120,125 **** --- 125,131 ---- } #if _MIPS_SIM == _ABIN32 + extern machreg_t semctl PARAMS ((machreg_t, machreg_t, machreg_t, machreg_t)); extern machreg_t _semctl PARAMS ((machreg_t, machreg_t, machreg_t, machreg_t)); /* has diff -Nrc3pad gcc-3.0.4/gcc/config/mips/isa32-linux.h gcc-3.1/gcc/config/mips/isa32-linux.h *** gcc-3.0.4/gcc/config/mips/isa32-linux.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/mips/isa32-linux.h Sat Sep 15 02:03:13 2001 *************** *** 0 **** --- 1,29 ---- + /* Definitions for MIPS32 running Linux-based GNU systems with ELF format. + Copyright (C) 2001 Free Software Foundation, Inc. + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GNU CC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU CC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + #undef TARGET_VERSION + #if TARGET_ENDIAN_DEFAULT == 0 + #define TARGET_VERSION fprintf (stderr, " (MIPS32el GNU/Linux with ELF)"); + #else + #define TARGET_VERSION fprintf (stderr, " (MIPS32 GNU/Linux with ELF)"); + #endif + + #undef MIPS_ISA_DEFAULT + #define MIPS_ISA_DEFAULT 32 diff -Nrc3pad gcc-3.0.4/gcc/config/mips/isa3264.h gcc-3.1/gcc/config/mips/isa3264.h *** gcc-3.0.4/gcc/config/mips/isa3264.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/mips/isa3264.h Thu Jan 17 07:53:55 2002 *************** *** 0 **** --- 1,45 ---- + /* Definitions of target machine for GNU compiler. + MIPS 32 and MIPS 64 version. + Copyright (C) 1999, 2000 Free Software Foundation, Inc. + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GNU CC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU CC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + #ifndef MIPS_ISA_DEFAULT + #define MIPS_ISA_DEFAULT 32 + #endif + + #ifndef MIPS_ABI_DEFAULT + #define MIPS_ABI_DEFAULT ABI_MEABI + #endif + + #ifndef MIPS_ENABLE_EMBEDDED_O32 + #define MIPS_ENABLE_EMBEDDED_O32 1 + #endif + + #ifndef PREFERRED_DEBUGGING_TYPE + #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG + #endif + + #include "mips/elf.h" + + #if MIPS_ABI_DEFAULT == ABI_MEABI + /* For MEABI, don't link with crt0 files, let the linker start files specify + the appropriate crt0 file. */ + #undef STARTFILE_SPEC + #define STARTFILE_SPEC "crti%O%s crtbegin%O%s %{!mno-crt0: }" + #endif diff -Nrc3pad gcc-3.0.4/gcc/config/mips/linux.h gcc-3.1/gcc/config/mips/linux.h *** gcc-3.0.4/gcc/config/mips/linux.h Wed Aug 1 17:22:35 2001 --- gcc-3.1/gcc/config/mips/linux.h Mon Apr 15 20:27:33 2002 *************** *** 1,5 **** /* Definitions for MIPS running Linux-based GNU systems with ELF format. ! Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,5 ---- /* Definitions for MIPS running Linux-based GNU systems with ELF format. ! Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This file is part of GNU CC. *************** along with GNU CC; see the file COPYING. *** 18,23 **** --- 18,118 ---- the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + #include "mips/mips.h" + #include "mips/abi64.h" + + #undef WCHAR_TYPE + #define WCHAR_TYPE "int" + + #undef WCHAR_TYPE_SIZE + #define WCHAR_TYPE_SIZE 32 + + /* If defined, a C expression whose value is a string containing the + assembler operation to identify the following data as + uninitialized global data. If not defined, and neither + `ASM_OUTPUT_BSS' nor `ASM_OUTPUT_ALIGNED_BSS' are defined, + uninitialized global data will be output in the data section if + `-fno-common' is passed, otherwise `ASM_OUTPUT_COMMON' will be + used. */ + #define BSS_SECTION_ASM_OP "\t.section\t.bss" + + #define SBSS_SECTION_ASM_OP "\t.section .sbss" + + /* Like `ASM_OUTPUT_BSS' except takes the required alignment as a + separate, explicit argument. If you define this macro, it is used + in place of `ASM_OUTPUT_BSS', and gives you more flexibility in + handling the required alignment of the variable. The alignment is + specified as the number of bits. + + Try to use function `asm_output_aligned_bss' defined in file + `varasm.c' when defining this macro. */ + #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ + do { \ + ASM_GLOBALIZE_LABEL (FILE, NAME); \ + if (SIZE > 0 && SIZE <= mips_section_threshold) \ + sbss_section (); \ + else \ + bss_section (); \ + ASM_OUTPUT_ALIGN (FILE, floor_log2 (ALIGN / BITS_PER_UNIT)); \ + last_assemble_variable_decl = DECL; \ + ASM_DECLARE_OBJECT_NAME (FILE, NAME, DECL); \ + ASM_OUTPUT_SKIP (FILE, SIZE ? SIZE : 1); \ + } while (0) + + /* These macros generate the special .type and .size directives which + are used to set the corresponding fields of the linker symbol table + entries in an ELF object file under SVR4. These macros also output + the starting labels for the relevant functions/objects. */ + + /* Write the 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, "%s", TYPE_ASM_OP); \ + assemble_name (FILE, NAME); \ + putc (',', 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, "%s", SIZE_ASM_OP); \ + assemble_name (FILE, NAME); \ + fprintf (FILE, ","); \ + fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, \ + int_size_in_bytes (TREE_TYPE (DECL))); \ + fprintf (FILE, "\n"); \ + } \ + mips_declare_object (FILE, NAME, "", ":\n", 0); \ + } while (0) + + #undef UNIQUE_SECTION + #define UNIQUE_SECTION(DECL,RELOC) \ + mips_unique_section ((DECL), (RELOC)) + + /* A list of other sections which the compiler might be "in" at any + given time. */ + #undef EXTRA_SECTIONS + #define EXTRA_SECTIONS in_sdata, in_sbss, in_rdata + + #undef EXTRA_SECTION_FUNCTIONS + #define EXTRA_SECTION_FUNCTIONS \ + SECTION_FUNCTION_TEMPLATE(sdata_section, in_sdata, SDATA_SECTION_ASM_OP) \ + SECTION_FUNCTION_TEMPLATE(sbss_section, in_sbss, SBSS_SECTION_ASM_OP) \ + SECTION_FUNCTION_TEMPLATE(rdata_section, in_rdata, RDATA_SECTION_ASM_OP) + + #define SECTION_FUNCTION_TEMPLATE(FN, ENUM, OP) \ + void FN () \ + { \ + if (in_section != ENUM) \ + { \ + fprintf (asm_out_file, "%s\n", OP); \ + in_section = ENUM; \ + } \ + } + #undef TARGET_VERSION #if TARGET_ENDIAN_DEFAULT == 0 #define TARGET_VERSION fprintf (stderr, " (MIPSel GNU/Linux with ELF)"); *************** Boston, MA 02111-1307, USA. */ *** 31,64 **** /* Required to keep collect2.c happy */ #undef OBJECT_FORMAT_COFF ! /* If we don't set MASK_ABICALLS, we can't default to PIC. */ #undef TARGET_DEFAULT #define TARGET_DEFAULT (MASK_ABICALLS|MASK_GAS) - - /* Handle #pragma weak and #pragma pack. */ - #undef HANDLE_SYSV_PRAGMA - #define HANDLE_SYSV_PRAGMA 1 - - /* Use more efficient ``thunks'' to implement C++ vtables. */ - #undef DEFAULT_VTABLE_THUNKS - #define DEFAULT_VTABLE_THUNKS 1 - - /* Don't assume anything about the header files. */ - #define NO_IMPLICIT_EXTERN_C - - /* Generate calls to memcpy, etc., not bcopy, etc. */ - #define TARGET_MEM_FUNCTIONS - /* Specify predefined symbols in preprocessor. */ #undef CPP_PREDEFINES #if TARGET_ENDIAN_DEFAULT == 0 #define CPP_PREDEFINES "-DMIPSEL -D_MIPSEL -Dunix -Dmips -D_mips \ ! -DR3000 -D_R3000 -Dlinux -Asystem=posix -Acpu=mips \ -Amachine=mips -D__ELF__ -D__PIC__ -D__pic__" #else #define CPP_PREDEFINES "-DMIPSEB -D_MIPSEB -Dunix -Dmips -D_mips \ ! -DR3000 -D_R3000 -Dlinux -Asystem=posix -Acpu=mips \ -Amachine=mips -D__ELF__ -D__PIC__ -D__pic__" #endif --- 126,144 ---- /* Required to keep collect2.c happy */ #undef OBJECT_FORMAT_COFF ! /* If we don't set MASK_ABICALLS, we can't default to PIC. */ #undef TARGET_DEFAULT #define TARGET_DEFAULT (MASK_ABICALLS|MASK_GAS) /* Specify predefined symbols in preprocessor. */ #undef CPP_PREDEFINES #if TARGET_ENDIAN_DEFAULT == 0 #define CPP_PREDEFINES "-DMIPSEL -D_MIPSEL -Dunix -Dmips -D_mips \ ! -DR3000 -D_R3000 -D__gnu_linux__ -Dlinux -Asystem=posix -Acpu=mips \ -Amachine=mips -D__ELF__ -D__PIC__ -D__pic__" #else #define CPP_PREDEFINES "-DMIPSEB -D_MIPSEB -Dunix -Dmips -D_mips \ ! -DR3000 -D_R3000 -D__gnu_linux__ -Dlinux -Asystem=posix -Acpu=mips \ -Amachine=mips -D__ELF__ -D__PIC__ -D__pic__" #endif *************** Boston, MA 02111-1307, USA. */ *** 116,155 **** -D_GNU_SOURCE %(cpp) \ " - /* Provide a STARTFILE_SPEC appropriate for GNU/Linux. Here we add - the GNU/Linux magical crtbegin.o file (see crtstuff.c) which - provides part of the support for getting C++ file-scope static - object constructed before entering `main'. */ - - #undef STARTFILE_SPEC - #define STARTFILE_SPEC \ - "%{!shared: \ - %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}}\ - crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}" - - /* Provide a ENDFILE_SPEC appropriate for GNU/Linux. Here we tack on - the GNU/Linux magical crtend.o file (see crtstuff.c) which - provides part of the support for getting C++ file-scope static - object constructed before entering `main', followed by a normal - GNU/Linux "finalizer" file, `crtn.o'. */ - - #undef ENDFILE_SPEC - #define ENDFILE_SPEC \ - "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s" - /* From iris5.h */ /* -G is incompatible with -KPIC which is the default, so only allow objects in the small data section if the user explicitly asks for it. */ #undef MIPS_DEFAULT_GVALUE #define MIPS_DEFAULT_GVALUE 0 - #undef LIB_SPEC - /* Taken from sparc/linux.h. */ - #define LIB_SPEC \ - "%{shared: -lc} \ - %{!shared: %{mieee-fp:-lieee} %{pthread:-lpthread} \ - %{profile:-lc_p} %{!profile: -lc}}" - /* Borrowed from sparc/linux.h */ #undef LINK_SPEC #define LINK_SPEC \ --- 196,207 ---- *************** Boston, MA 02111-1307, USA. */ *** 169,212 **** %{!fno-PIC:%{!fno-pic:-KPIC}} \ %{fno-PIC:-non_shared} %{fno-pic:-non_shared}" ! /* We don't need those nonsenses. */ ! #undef INVOKE__main ! #undef CTOR_LIST_BEGIN ! #undef CTOR_LIST_END ! #undef DTOR_LIST_BEGIN ! #undef DTOR_LIST_END /* The MIPS assembler has different syntax for .set. We set it to .dummy to trap any errors. */ #undef SET_ASM_OP #define SET_ASM_OP "\t.dummy\t" - #undef ASM_OUTPUT_SOURCE_LINE - #define ASM_OUTPUT_SOURCE_LINE(FILE, LINE) \ - do \ - { \ - static int sym_lineno = 1; \ - fprintf (FILE, "%sLM%d:\n\t%s 68,0,%d,%sLM%d", \ - LOCAL_LABEL_PREFIX, sym_lineno, ASM_STABN_OP, \ - LINE, LOCAL_LABEL_PREFIX, sym_lineno); \ - putc ('-', FILE); \ - assemble_name (FILE, \ - XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0));\ - putc ('\n', FILE); \ - sym_lineno++; \ - } \ - while (0) - - /* This is how we tell the assembler that two symbols have the - same value. */ #undef ASM_OUTPUT_DEF #define ASM_OUTPUT_DEF(FILE,LABEL1,LABEL2) \ ! do { \ ! fprintf ((FILE), "\t"); \ assemble_name (FILE, LABEL1); \ ! fprintf (FILE, "="); \ assemble_name (FILE, LABEL2); \ ! fprintf (FILE, "\n"); \ } while (0) #undef ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL --- 221,242 ---- %{!fno-PIC:%{!fno-pic:-KPIC}} \ %{fno-PIC:-non_shared} %{fno-pic:-non_shared}" ! #undef SUBTARGET_ASM_DEBUGGING_SPEC ! #define SUBTARGET_ASM_DEBUGGING_SPEC "-g0" /* The MIPS assembler has different syntax for .set. We set it to .dummy to trap any errors. */ #undef SET_ASM_OP #define SET_ASM_OP "\t.dummy\t" #undef ASM_OUTPUT_DEF #define ASM_OUTPUT_DEF(FILE,LABEL1,LABEL2) \ ! do { \ ! fputc ( '\t', FILE); \ assemble_name (FILE, LABEL1); \ ! fputs ( " = ", FILE); \ assemble_name (FILE, LABEL2); \ ! fputc ( '\n', FILE); \ } while (0) #undef ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL *************** while (0) *** 253,259 **** pseudo-ops. */ #define FUNCTION_NAME_ALREADY_DECLARED ! /* Output #ident as a .ident. */ ! #undef ASM_OUTPUT_IDENT ! #define ASM_OUTPUT_IDENT(FILE, NAME) \ ! fprintf (FILE, "\t%s\t\"%s\"\n", IDENT_ASM_OP, NAME); --- 283,295 ---- pseudo-ops. */ #define FUNCTION_NAME_ALREADY_DECLARED ! #define ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL) \ ! (flag_pic \ ! ? ((GLOBAL) ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | DW_EH_PE_sdata4\ ! : DW_EH_PE_absptr) ! ! /* The glibc _mcount stub will save $v0 for us. Don't mess with saving ! it, since ASM_OUTPUT_REG_PUSH/ASM_OUTPUT_REG_POP do not work in the ! presence of $gp-relative calls. */ ! #undef ASM_OUTPUT_REG_PUSH ! #undef ASM_OUTPUT_REG_POP diff -Nrc3pad gcc-3.0.4/gcc/config/mips/little.h gcc-3.1/gcc/config/mips/little.h *** gcc-3.0.4/gcc/config/mips/little.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/config/mips/little.h Wed Aug 8 15:40:57 2001 *************** *** 0 **** --- 1,22 ---- + /* Definition of little endian mips machine for GNU compiler. + + Copyright (C) 2001 Free Software Foundation, Inc. + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GNU CC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU CC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + #define TARGET_ENDIAN_DEFAULT 0 diff -Nrc3pad gcc-3.0.4/gcc/config/mips/mips-5.h gcc-3.1/gcc/config/mips/mips-5.h *** gcc-3.0.4/gcc/config/mips/mips-5.h Sun Oct 24 19:48:51 1999 --- gcc-3.1/gcc/config/mips/mips-5.h Sun Dec 16 15:43:41 2001 *************** Boston, MA 02111-1307, USA. */ *** 35,42 **** #define ASM_OUTPUT_ASCII(FILE,PTR,LEN) \ do { \ const unsigned char *s; \ ! int i; \ ! for (i = 0, s = (const unsigned char *)(PTR); i < (LEN); s++, i++) \ { \ if ((i % 8) == 0) \ fputs ("\n\t.byte\t", (FILE)); \ --- 35,42 ---- #define ASM_OUTPUT_ASCII(FILE,PTR,LEN) \ do { \ const unsigned char *s; \ ! size_t i, limit = (LEN); \ ! for (i = 0, s = (const unsigned char *)(PTR); i < limit; s++, i++) \ { \ if ((i % 8) == 0) \ fputs ("\n\t.byte\t", (FILE)); \ diff -Nrc3pad gcc-3.0.4/gcc/config/mips/mips-protos.h gcc-3.1/gcc/config/mips/mips-protos.h *** gcc-3.0.4/gcc/config/mips/mips-protos.h Tue Sep 12 18:40:58 2000 --- gcc-3.1/gcc/config/mips/mips-protos.h Sun Mar 24 08:13:16 2002 *************** *** 1,6 **** /* Prototypes of target machine for GNU compiler. MIPS version. Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999 Free Software Foundation, Inc. Contributed by A. Lichnewsky (lich@inria.inria.fr). Changed by Michael Meissner (meissner@osf.org). 64 bit r4000 support by Ian Lance Taylor (ian@cygnus.com) and --- 1,6 ---- /* Prototypes of target machine for GNU compiler. MIPS version. Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2001 Free Software Foundation, Inc. Contributed by A. Lichnewsky (lich@inria.inria.fr). Changed by Michael Meissner (meissner@osf.org). 64 bit r4000 support by Ian Lance Taylor (ian@cygnus.com) and *************** along with GNU CC; see the file COPYING. *** 23,142 **** the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ! #ifndef __MIPS_PROTOS_H__ ! #define __MIPS_PROTOS_H__ extern HOST_WIDE_INT compute_frame_size PARAMS ((HOST_WIDE_INT)); - extern void function_epilogue PARAMS ((FILE *, HOST_WIDE_INT)); - extern void function_prologue PARAMS ((FILE *, HOST_WIDE_INT)); extern void mips_asm_file_end PARAMS ((FILE *)); extern void mips_asm_file_start PARAMS ((FILE *)); extern int mips_can_use_return_insn PARAMS ((void)); ! extern void mips_declare_object PARAMS ((FILE *, const char *, const char *, const char *, int)); extern void mips_expand_epilogue PARAMS ((void)); extern void mips_expand_prologue PARAMS ((void)); - #ifdef REAL_VALUE_TYPE - extern void mips_output_double PARAMS ((FILE *, REAL_VALUE_TYPE)); - extern void mips_output_float PARAMS ((FILE *, REAL_VALUE_TYPE)); - #endif /* REAL_VALUE_TYPE */ extern void mips_output_filename PARAMS ((FILE *, const char *)); extern void mips_output_lineno PARAMS ((FILE *, int)); extern void mips_order_regs_for_local_alloc PARAMS ((void)); extern struct rtx_def * mips16_gp_pseudo_reg PARAMS ((void)); #ifdef ASM_OUTPUT_UNDEF_FUNCTION extern int mips_output_external_libcall PARAMS ((FILE *, const char *)); #endif /* ASM_OUTPUT_UNDEF_FUNCTION */ ! ! #ifdef TREE_CODE ! extern struct rtx_def * function_arg PARAMS ((CUMULATIVE_ARGS *, enum machine_mode, tree, int)); ! extern void function_arg_advance PARAMS ((CUMULATIVE_ARGS *, enum machine_mode, tree, int)); ! extern int function_arg_partial_nregs PARAMS ((CUMULATIVE_ARGS *, enum machine_mode, tree, int)); ! extern int function_arg_pass_by_reference PARAMS ((CUMULATIVE_ARGS *, enum machine_mode, tree, int)); extern int mips16_constant_after_function_p PARAMS ((tree)); ! extern int mips_output_external PARAMS ((FILE *, tree, const char *)); extern tree mips_build_va_list PARAMS ((void)); - #ifdef RTX_CODE extern void mips_va_start PARAMS ((int, tree, rtx)); - #endif /* RTX_CODE */ extern struct rtx_def *mips_va_arg PARAMS ((tree, tree)); extern void mips_select_section PARAMS ((tree, int)); ! #endif /* TREE_CODE */ ! #ifdef RTX_CODE ! extern int arith32_operand PARAMS ((rtx, enum machine_mode)); ! extern int arith_operand PARAMS ((rtx, enum machine_mode)); ! extern int cmp_op PARAMS ((rtx, enum machine_mode)); ! extern int trap_cmp_op PARAMS ((rtx, enum machine_mode)); ! extern int const_float_1_operand PARAMS ((rtx, enum machine_mode)); ! extern void expand_block_move PARAMS ((rtx [])); ! extern int equality_op PARAMS ((rtx, enum machine_mode)); ! extern void final_prescan_insn PARAMS ((rtx, rtx [], int)); ! extern struct rtx_def * gen_int_relational PARAMS ((enum rtx_code, rtx, rtx, rtx,int *)); ! #ifdef TREE_CODE ! extern void init_cumulative_args PARAMS ((CUMULATIVE_ARGS *c, tree, rtx)); ! #endif /* TREE_CODE */ ! extern void gen_conditional_branch PARAMS ((rtx[], enum rtx_code)); extern void gen_conditional_move PARAMS ((rtx *)); extern void mips_gen_conditional_trap PARAMS ((rtx *)); - extern int large_int PARAMS ((rtx, enum machine_mode)); extern void machine_dependent_reorg PARAMS ((rtx)); extern int mips_address_cost PARAMS ((rtx)); - extern int mips_const_double_ok PARAMS ((rtx, enum machine_mode)); extern void mips_count_memory_refs PARAMS ((rtx, int)); extern HOST_WIDE_INT mips_debugger_offset PARAMS ((rtx, HOST_WIDE_INT)); extern int mips_check_split PARAMS ((rtx, enum machine_mode)); ! extern const char *mips_fill_delay_slot PARAMS ((const char *, enum delay_type, rtx[], rtx)); ! extern const char *mips_move_1word PARAMS ((rtx[], rtx, int)); ! extern const char *mips_move_2words PARAMS ((rtx[], rtx)); ! extern const char *output_block_move PARAMS ((rtx, rtx[], int, enum block_move_type)); extern void override_options PARAMS ((void)); - extern int pc_or_label_operand PARAMS ((rtx, enum machine_mode)); extern void print_operand_address PARAMS ((FILE *, rtx)); extern void print_operand PARAMS ((FILE *, rtx, int)); ! extern int reg_or_0_operand PARAMS ((rtx, enum machine_mode)); ! extern int true_reg_or_0_operand PARAMS ((rtx, enum machine_mode)); ! extern int simple_memory_operand PARAMS ((rtx, enum machine_mode)); ! extern int double_memory_operand PARAMS ((rtx, enum machine_mode)); ! extern int equality_op PARAMS ((rtx, enum machine_mode)); ! extern int small_int PARAMS ((rtx, enum machine_mode)); ! extern int uns_arith_operand PARAMS ((rtx, enum machine_mode)); extern struct rtx_def * embedded_pic_offset PARAMS ((rtx)); extern struct rtx_def * mips16_gp_offset PARAMS ((rtx)); extern int mips16_gp_offset_p PARAMS ((rtx)); ! extern int mips16_constant PARAMS ((rtx, enum machine_mode, int, int)); extern int build_mips16_call_stub PARAMS ((rtx, rtx, rtx, int)); ! extern char *mips_output_conditional_branch PARAMS ((rtx, rtx *, int, int, int, int)); extern int mips_adjust_insn_length PARAMS ((rtx, int)); ! extern enum reg_class mips_secondary_reload_class PARAMS ((enum reg_class, enum machine_mode, rtx, int)); ! extern void mips_select_rtx_section PARAMS ((enum machine_mode, rtx)); - /* Recognition functions that return if a condition is true. */ - extern int address_operand PARAMS ((rtx, enum machine_mode)); - extern int call_insn_operand PARAMS ((rtx, enum machine_mode)); - extern int const_double_operand PARAMS ((rtx, enum machine_mode)); - extern int const_int_operand PARAMS ((rtx, enum machine_mode)); - extern int consttable_operand PARAMS ((rtx, enum machine_mode)); - extern int general_operand PARAMS ((rtx, enum machine_mode)); - extern int immediate_operand PARAMS ((rtx, enum machine_mode)); - extern int memory_operand PARAMS ((rtx, enum machine_mode)); - extern int nonimmediate_operand PARAMS ((rtx, enum machine_mode)); - extern int nonmemory_operand PARAMS ((rtx, enum machine_mode)); extern int pic_address_needs_scratch PARAMS ((rtx)); - extern int register_operand PARAMS ((rtx, enum machine_mode)); - extern int scratch_operand PARAMS ((rtx, enum machine_mode)); - extern int move_operand PARAMS ((rtx, enum machine_mode)); - extern int movdi_operand PARAMS ((rtx, enum machine_mode)); - extern int se_register_operand PARAMS ((rtx, enum machine_mode)); - extern int se_reg_or_0_operand PARAMS ((rtx, enum machine_mode)); - extern int se_uns_arith_operand PARAMS ((rtx, enum machine_mode)); extern int se_arith_operand PARAMS ((rtx, enum machine_mode)); ! extern int se_nonmemory_operand PARAMS ((rtx, enum machine_mode)); ! extern int se_nonimmediate_operand PARAMS ((rtx, enum machine_mode)); ! extern int mips_legitimate_address_p PARAMS ((enum machine_mode, rtx, int)); ! extern int mips_reg_mode_ok_for_base_p PARAMS ((rtx, enum machine_mode, int)); ! extern int extend_operator PARAMS ((rtx, enum machine_mode)); ! extern int highpart_shift_operator PARAMS ((rtx, enum machine_mode)); extern int m16_uimm3_b PARAMS ((rtx, enum machine_mode)); extern int m16_simm4_1 PARAMS ((rtx, enum machine_mode)); extern int m16_nsimm4_1 PARAMS ((rtx, enum machine_mode)); --- 23,124 ---- the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ! #ifndef GCC_MIPS_PROTOS_H ! #define GCC_MIPS_PROTOS_H extern HOST_WIDE_INT compute_frame_size PARAMS ((HOST_WIDE_INT)); extern void mips_asm_file_end PARAMS ((FILE *)); extern void mips_asm_file_start PARAMS ((FILE *)); + extern void iris6_asm_file_start PARAMS ((FILE *)); + extern void iris6_asm_file_end PARAMS ((FILE *)); + extern void iris6_asm_output_align PARAMS ((FILE *, unsigned)); + extern const char * current_section_name PARAMS ((void)); + extern unsigned int current_section_flags PARAMS ((void)); extern int mips_can_use_return_insn PARAMS ((void)); ! extern void mips_declare_object PARAMS ((FILE *, const char *, ! const char *, ! const char *, int)); extern void mips_expand_epilogue PARAMS ((void)); extern void mips_expand_prologue PARAMS ((void)); extern void mips_output_filename PARAMS ((FILE *, const char *)); extern void mips_output_lineno PARAMS ((FILE *, int)); + extern void mips_output_ascii PARAMS ((FILE *, const char *, + size_t)); extern void mips_order_regs_for_local_alloc PARAMS ((void)); extern struct rtx_def * mips16_gp_pseudo_reg PARAMS ((void)); #ifdef ASM_OUTPUT_UNDEF_FUNCTION extern int mips_output_external_libcall PARAMS ((FILE *, const char *)); #endif /* ASM_OUTPUT_UNDEF_FUNCTION */ + extern struct rtx_def *mips_function_value PARAMS ((tree, tree, + enum machine_mode)); ! extern unsigned int mips_hard_regno_nregs PARAMS ((int, ! enum machine_mode)); ! extern struct rtx_def *function_arg PARAMS ((CUMULATIVE_ARGS *, ! enum machine_mode, tree, int)); ! extern void function_arg_advance PARAMS ((CUMULATIVE_ARGS *, ! enum machine_mode, ! tree, int)); ! extern int function_arg_partial_nregs PARAMS ((CUMULATIVE_ARGS *, ! enum machine_mode, ! tree, int)); ! extern int function_arg_pass_by_reference ! PARAMS ((CUMULATIVE_ARGS *, ! enum machine_mode, tree, int)); extern int mips16_constant_after_function_p PARAMS ((tree)); ! extern int mips_output_external PARAMS ((FILE *, tree, ! const char *)); extern tree mips_build_va_list PARAMS ((void)); extern void mips_va_start PARAMS ((int, tree, rtx)); extern struct rtx_def *mips_va_arg PARAMS ((tree, tree)); extern void mips_select_section PARAMS ((tree, int)); ! extern void mips_unique_section PARAMS ((tree, int)); ! extern void expand_block_move PARAMS ((rtx *)); ! extern void final_prescan_insn PARAMS ((rtx, rtx *, int)); ! extern void init_cumulative_args PARAMS ((CUMULATIVE_ARGS *, ! tree, rtx)); extern void gen_conditional_move PARAMS ((rtx *)); extern void mips_gen_conditional_trap PARAMS ((rtx *)); extern void machine_dependent_reorg PARAMS ((rtx)); extern int mips_address_cost PARAMS ((rtx)); extern void mips_count_memory_refs PARAMS ((rtx, int)); extern HOST_WIDE_INT mips_debugger_offset PARAMS ((rtx, HOST_WIDE_INT)); extern int mips_check_split PARAMS ((rtx, enum machine_mode)); ! extern const char *mips_fill_delay_slot PARAMS ((const char *, ! enum delay_type, rtx *, ! rtx)); ! extern const char *mips_move_1word PARAMS ((rtx *, rtx, int)); ! extern const char *mips_move_2words PARAMS ((rtx *, rtx)); ! extern const char *output_block_move PARAMS ((rtx, rtx *, int, ! enum block_move_type)); extern void override_options PARAMS ((void)); extern void print_operand_address PARAMS ((FILE *, rtx)); extern void print_operand PARAMS ((FILE *, rtx, int)); ! extern int double_memory_operand PARAMS ((rtx,enum machine_mode)); extern struct rtx_def * embedded_pic_offset PARAMS ((rtx)); extern struct rtx_def * mips16_gp_offset PARAMS ((rtx)); extern int mips16_gp_offset_p PARAMS ((rtx)); ! extern int mips16_constant PARAMS ((rtx, enum machine_mode, ! int, int)); extern int build_mips16_call_stub PARAMS ((rtx, rtx, rtx, int)); ! extern const char *mips_output_conditional_branch PARAMS ((rtx, rtx *, ! int, int, int, ! int)); extern int mips_adjust_insn_length PARAMS ((rtx, int)); ! extern enum reg_class mips_secondary_reload_class PARAMS ((enum reg_class, ! enum machine_mode, ! rtx, int)); ! extern void mips_select_rtx_section PARAMS ((enum machine_mode, ! rtx)); extern int pic_address_needs_scratch PARAMS ((rtx)); extern int se_arith_operand PARAMS ((rtx, enum machine_mode)); ! extern int mips_legitimate_address_p PARAMS ((enum machine_mode, ! rtx, int)); ! extern int mips_reg_mode_ok_for_base_p PARAMS ((rtx, ! enum machine_mode, ! int)); extern int m16_uimm3_b PARAMS ((rtx, enum machine_mode)); extern int m16_simm4_1 PARAMS ((rtx, enum machine_mode)); extern int m16_nsimm4_1 PARAMS ((rtx, enum machine_mode)); *************** extern int m16_simm8_8 PARAMS ((rtx, en *** 155,160 **** extern int m16_nsimm8_8 PARAMS ((rtx, enum machine_mode)); extern int m16_usym8_4 PARAMS ((rtx, enum machine_mode)); extern int m16_usym5_4 PARAMS ((rtx, enum machine_mode)); - #endif /* RTX_CODE */ ! #endif /* __MIPS_PROTOS_H__ */ --- 137,147 ---- extern int m16_nsimm8_8 PARAMS ((rtx, enum machine_mode)); extern int m16_usym8_4 PARAMS ((rtx, enum machine_mode)); extern int m16_usym5_4 PARAMS ((rtx, enum machine_mode)); ! #ifdef RTX_CODE ! extern rtx gen_int_relational PARAMS ((enum rtx_code, rtx, rtx, ! rtx,int *)); ! extern void gen_conditional_branch PARAMS ((rtx *, enum rtx_code)); ! #endif ! ! #endif /* ! GCC_MIPS_PROTOS_H */ diff -Nrc3pad gcc-3.0.4/gcc/config/mips/mips.c gcc-3.1/gcc/config/mips/mips.c *** gcc-3.0.4/gcc/config/mips/mips.c Tue Feb 19 23:16:53 2002 --- gcc-3.1/gcc/config/mips/mips.c Wed Apr 17 00:42:38 2002 *************** *** 1,6 **** /* Subroutines for insn-output.c for MIPS Copyright (C) 1989, 1990, 1991, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by A. Lichnewsky, lich@inria.inria.fr. Changes by Michael Meissner, meissner@osf.org. 64 bit r4000 support by Ian Lance Taylor, ian@cygnus.com, and --- 1,6 ---- /* Subroutines for insn-output.c for MIPS Copyright (C) 1989, 1990, 1991, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by A. Lichnewsky, lich@inria.inria.fr. Changes by Michael Meissner, meissner@osf.org. 64 bit r4000 support by Ian Lance Taylor, ian@cygnus.com, and *************** Boston, MA 02111-1307, USA. */ *** 40,46 **** #include "recog.h" #include "toplev.h" #include "output.h" - #include "tree.h" #include "function.h" #include "expr.h" --- 40,45 ---- *************** Boston, MA 02111-1307, USA. */ *** 49,60 **** #include "output.h" #include "tm_p.h" #include "ggc.h" ! #if defined(USG) || !defined(HAVE_STAB_H) ! #include "gstab.h" /* If doing DBX on sysV, use our own stab.h. */ ! #else ! #include /* On BSD, use the system's stab.h. */ ! #endif /* not USG */ #ifdef __GNU_STAB__ #define STAB_CODE_TYPE enum __stab_debug_code --- 48,62 ---- #include "output.h" #include "tm_p.h" #include "ggc.h" + #include "gstab.h" + #include "hashtab.h" + #include "debug.h" + #include "target.h" + #include "target-def.h" ! #ifdef HALF_PIC_DEBUG ! #include "halfpic.h" ! #endif #ifdef __GNU_STAB__ #define STAB_CODE_TYPE enum __stab_debug_code *************** Boston, MA 02111-1307, USA. */ *** 62,73 **** #define STAB_CODE_TYPE int #endif - extern char *mktemp PARAMS ((char *)); extern tree lookup_name PARAMS ((tree)); /* Enumeration for all of the relational tests, so that we can build arrays indexed by the test type, and not worry about the order ! of EQ, NE, etc. */ enum internal_test { ITEST_EQ, --- 64,74 ---- #define STAB_CODE_TYPE int #endif extern tree lookup_name PARAMS ((tree)); /* Enumeration for all of the relational tests, so that we can build arrays indexed by the test type, and not worry about the order ! of EQ, NE, etc. */ enum internal_test { ITEST_EQ, *************** static void block_move_loop PARAMS ((r *** 94,100 **** int, rtx, rtx)); static void block_move_call PARAMS ((rtx, rtx, rtx)); ! static FILE *mips_make_temp_file PARAMS ((void)); static void save_restore_insns PARAMS ((int, rtx, long, FILE *)); static void mips16_output_gp_offset PARAMS ((FILE *, rtx)); --- 95,107 ---- int, rtx, rtx)); static void block_move_call PARAMS ((rtx, rtx, rtx)); ! static rtx mips_add_large_offset_to_sp PARAMS ((HOST_WIDE_INT, ! FILE *)); ! static void mips_annotate_frame_insn PARAMS ((rtx, rtx)); ! static rtx mips_frame_set PARAMS ((enum machine_mode, ! int, int)); ! static void mips_emit_frame_related_store PARAMS ((rtx, rtx, ! HOST_WIDE_INT)); static void save_restore_insns PARAMS ((int, rtx, long, FILE *)); static void mips16_output_gp_offset PARAMS ((FILE *, rtx)); *************** static void abort_with_insn PARAMS ((r *** 111,117 **** --- 118,139 ---- ATTRIBUTE_NORETURN; static int symbolic_expression_p PARAMS ((rtx)); static void mips_add_gc_roots PARAMS ((void)); + static bool mips_assemble_integer PARAMS ((rtx, unsigned int, int)); + static void mips_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT)); + static void mips_output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT)); static enum processor_type mips_parse_cpu PARAMS ((const char *)); + static void copy_file_data PARAMS ((FILE *, FILE *)); + #ifdef TARGET_IRIX6 + static void iris6_asm_named_section_1 PARAMS ((const char *, + unsigned int, + unsigned int)); + static void iris6_asm_named_section PARAMS ((const char *, + unsigned int)); + static int iris_section_align_entry_eq PARAMS ((const PTR, const PTR)); + static hashval_t iris_section_align_entry_hash PARAMS ((const PTR)); + static int iris6_section_align_1 PARAMS ((void **, void *)); + #endif + static int mips_adjust_cost PARAMS ((rtx, rtx, rtx, int)); /* Global variables for machine-dependent things. */ *************** int num_source_filenames = 0; *** 128,134 **** start and end boundaries). */ int sdb_label_count = 0; ! /* Next label # for each statement for Silicon Graphics IRIS systems. */ int sym_lineno = 0; /* Non-zero if inside of a function, because the stupid MIPS asm can't --- 150,156 ---- start and end boundaries). */ int sdb_label_count = 0; ! /* Next label # for each statement for Silicon Graphics IRIS systems. */ int sym_lineno = 0; /* Non-zero if inside of a function, because the stupid MIPS asm can't *************** enum cmp_type branch_type; *** 198,222 **** static int prev_half_pic_ptrs = 0; static int prev_half_pic_refs = 0; ! /* Which cpu we are generating code for. */ enum processor_type mips_arch; /* The target cpu for optimization and scheduling. */ enum processor_type mips_tune; ! /* Which instruction set architecture to use. */ int mips_isa; ! #ifdef MIPS_ABI_DEFAULT ! /* Which ABI to use. This is defined to a constant in mips.h if the target ! doesn't support multiple ABIs. */ int mips_abi; - #endif /* Strings to hold which cpu and instruction set architecture to use. */ const char *mips_arch_string; /* for -march= */ const char *mips_tune_string; /* for -mtune= */ - const char *mips_cpu_string; /* for -mcpu= */ const char *mips_isa_string; /* for -mips{1,2,3,4} */ const char *mips_abi_string; /* for -mabi={32,n32,64,eabi} */ --- 220,241 ---- static int prev_half_pic_ptrs = 0; static int prev_half_pic_refs = 0; ! /* The target cpu for code generation. */ enum processor_type mips_arch; /* The target cpu for optimization and scheduling. */ enum processor_type mips_tune; ! /* which instruction set architecture to use. */ int mips_isa; ! /* which abi to use. */ int mips_abi; /* Strings to hold which cpu and instruction set architecture to use. */ + const char *mips_cpu_string; /* for -mcpu= */ const char *mips_arch_string; /* for -march= */ const char *mips_tune_string; /* for -mtune= */ const char *mips_isa_string; /* for -mips{1,2,3,4} */ const char *mips_abi_string; /* for -mabi={32,n32,64,eabi} */ *************** const char *mips_no_mips16_string; *** 231,237 **** /* This is only used to determine if an type size setting option was explicitly specified (-mlong64, -mint64, -mlong32). The specs ! set this option if such an option is used. */ const char *mips_explicit_type_size_string; /* Whether we are generating mips16 hard float code. In mips16 mode --- 250,256 ---- /* This is only used to determine if an type size setting option was explicitly specified (-mlong64, -mint64, -mlong32). The specs ! set this option if such an option is used. */ const char *mips_explicit_type_size_string; /* Whether we are generating mips16 hard float code. In mips16 mode *************** int mips16_hard_float; *** 245,250 **** --- 264,271 ---- avoid using up another bit in target_flags. */ const char *mips_entry_string; + const char *mips_cache_flush_func = CACHE_FLUSH_FUNC; + /* Whether we should entry and exit pseudo-ops in mips16 mode. */ int mips_entry; *************** struct mips_frame_info current_frame_inf *** 272,281 **** /* Zero structure to initialize current_frame_info. */ struct mips_frame_info zero_frame_info; - /* Temporary filename used to buffer .text until end of program - for -mgpopt. */ - static char *temp_filename; - /* Pseudo-reg holding the address of the current function when generating embedded PIC code. Created by LEGITIMIZE_ADDRESS, used by mips_finalize_pic if it was created. */ --- 293,298 ---- *************** char mips_reg_names[][8] = *** 332,338 **** /* Mips software names for the registers, used to overwrite the mips_reg_names array. */ ! char mips_sw_reg_names[][8] = { "$zero","$at", "$v0", "$v1", "$a0", "$a1", "$a2", "$a3", "$t0", "$t1", "$t2", "$t3", "$t4", "$t5", "$t6", "$t7", --- 349,355 ---- /* Mips software names for the registers, used to overwrite the mips_reg_names array. */ ! static const char mips_sw_reg_names[][8] = { "$zero","$at", "$v0", "$v1", "$a0", "$a1", "$a2", "$a3", "$t0", "$t1", "$t2", "$t3", "$t4", "$t5", "$t6", "$t7", *************** char mips_sw_reg_names[][8] = *** 347,353 **** }; /* Map hard register number to register class */ ! enum reg_class mips_regno_to_class[] = { GR_REGS, GR_REGS, M16_NA_REGS, M16_NA_REGS, M16_REGS, M16_REGS, M16_REGS, M16_REGS, --- 364,370 ---- }; /* Map hard register number to register class */ ! const enum reg_class mips_regno_to_class[] = { GR_REGS, GR_REGS, M16_NA_REGS, M16_NA_REGS, M16_REGS, M16_REGS, M16_REGS, M16_REGS, *************** enum reg_class mips_char_to_class[256] = *** 438,444 **** --- 455,485 ---- NO_REGS, NO_REGS, NO_REGS, NO_REGS, NO_REGS, NO_REGS, NO_REGS, NO_REGS, }; + + /* Initialize the GCC target structure. */ + #undef TARGET_ASM_ALIGNED_HI_OP + #define TARGET_ASM_ALIGNED_HI_OP "\t.half\t" + #undef TARGET_ASM_ALIGNED_SI_OP + #define TARGET_ASM_ALIGNED_SI_OP "\t.word\t" + #undef TARGET_ASM_INTEGER + #define TARGET_ASM_INTEGER mips_assemble_integer + + #if TARGET_IRIX5 && !TARGET_IRIX6 + #undef TARGET_ASM_UNALIGNED_HI_OP + #define TARGET_ASM_UNALIGNED_HI_OP "\t.align 0\n\t.half\t" + #undef TARGET_ASM_UNALIGNED_SI_OP + #define TARGET_ASM_UNALIGNED_SI_OP "\t.align 0\n\t.word\t" + #endif + #undef TARGET_ASM_FUNCTION_PROLOGUE + #define TARGET_ASM_FUNCTION_PROLOGUE mips_output_function_prologue + #undef TARGET_ASM_FUNCTION_EPILOGUE + #define TARGET_ASM_FUNCTION_EPILOGUE mips_output_function_epilogue + + #undef TARGET_SCHED_ADJUST_COST + #define TARGET_SCHED_ADJUST_COST mips_adjust_cost + + struct gcc_target targetm = TARGET_INITIALIZER; /* Return truth value of whether OP can be used as an operands where a register or 16 bit unsigned integer is needed. */ *************** arith32_operand (op, mode) *** 486,492 **** return register_operand (op, mode); } ! /* Return truth value of whether OP is a integer which fits in 16 bits */ int small_int (op, mode) --- 527,533 ---- return register_operand (op, mode); } ! /* Return truth value of whether OP is an integer which fits in 16 bits. */ int small_int (op, mode) *************** reg_or_0_operand (op, mode) *** 559,565 **** } /* Return truth value of whether OP is a register or the constant 0, ! even in mips16 mode. */ int true_reg_or_0_operand (op, mode) --- 600,606 ---- } /* Return truth value of whether OP is a register or the constant 0, ! even in mips16 mode. */ int true_reg_or_0_operand (op, mode) *************** simple_memory_operand (op, mode) *** 774,780 **** if (GET_CODE (op) != SYMBOL_REF) return 0; ! /* let's be paranoid.... */ if (! SMALL_INT (offset)) return 0; } --- 815,821 ---- if (GET_CODE (op) != SYMBOL_REF) return 0; ! /* let's be paranoid.... */ if (! SMALL_INT (offset)) return 0; } *************** double_memory_operand (op, mode) *** 830,837 **** rtx op; enum machine_mode mode; { - rtx addr; - if (GET_CODE (op) != MEM || ! memory_operand (op, mode)) { --- 871,876 ---- *************** double_memory_operand (op, mode) *** 881,887 **** return 1; /* Similarly, we accept a case where the memory address is ! itself on the stack, and will be reloaded. */ if (GET_CODE (addr) == MEM) { rtx maddr; --- 920,926 ---- return 1; /* Similarly, we accept a case where the memory address is ! itself on the stack, and will be reloaded. */ if (GET_CODE (addr) == MEM) { rtx maddr; *************** double_memory_operand (op, mode) *** 931,945 **** /* Make sure that 4 added to the address is a valid memory address. This essentially just checks for overflow in an added constant. */ ! addr = XEXP (op, 0); ! ! if (CONSTANT_ADDRESS_P (addr)) return 1; ! return memory_address_p ((GET_MODE_CLASS (mode) == MODE_INT ! ? SImode ! : SFmode), ! plus_constant_for_output (addr, 4)); } /* Return nonzero if the code of this rtx pattern is EQ or NE. */ --- 970,981 ---- /* Make sure that 4 added to the address is a valid memory address. This essentially just checks for overflow in an added constant. */ ! if (CONSTANT_ADDRESS_P (XEXP (op, 0))) return 1; ! op = adjust_address_nv (op, GET_MODE_CLASS (mode) == MODE_INT ! ? SImode : SFmode, 4); ! return memory_address_p (GET_MODE (op), XEXP (op, 0)); } /* Return nonzero if the code of this rtx pattern is EQ or NE. */ *************** mips_legitimate_address_p (mode, xinsn, *** 1276,1282 **** } /* Check for constant before stripping off SUBREG, so that we don't ! accept (subreg (const_int)) which will fail to reload. */ if (CONSTANT_ADDRESS_P (xinsn) && ! (mips_split_addresses && mips_check_split (xinsn, mode)) && (! TARGET_MIPS16 || mips16_constant (xinsn, mode, 1, 0))) --- 1312,1318 ---- } /* Check for constant before stripping off SUBREG, so that we don't ! accept (subreg (const_int)) which will fail to reload. */ if (CONSTANT_ADDRESS_P (xinsn) && ! (mips_split_addresses && mips_check_split (xinsn, mode)) && (! TARGET_MIPS16 || mips16_constant (xinsn, mode, 1, 0))) *************** mips_legitimate_address_p (mode, xinsn, *** 1362,1370 **** || code1 != CONST || GET_CODE (XEXP (xplus1, 0)) != MINUS) /* When assembling for machines with 64 bit registers, ! the assembler will not sign-extend the constant "foo" ! in "la x, foo(x)" */ ! && (!TARGET_64BIT || (INTVAL (xplus1) > 0)) && !TARGET_MIPS16) return 1; } --- 1398,1410 ---- || code1 != CONST || GET_CODE (XEXP (xplus1, 0)) != MINUS) /* When assembling for machines with 64 bit registers, ! the assembler will sign-extend the constant "foo" ! in "la x, foo(x)" yielding the wrong result for: ! (set (blah:DI) (plus x y)). */ ! && (!TARGET_64BIT ! || (code1 == CONST_INT ! && trunc_int_for_mode (INTVAL (xplus1), ! SImode) == INTVAL (xplus1))) && !TARGET_MIPS16) return 1; } *************** mips_move_1word (operands, insn, unsigne *** 1840,1859 **** enum rtx_code code0 = GET_CODE (op0); enum rtx_code code1 = GET_CODE (op1); enum machine_mode mode = GET_MODE (op0); ! int subreg_word0 = 0; ! int subreg_word1 = 0; enum delay_type delay = DELAY_NONE; while (code0 == SUBREG) { ! subreg_word0 += SUBREG_WORD (op0); op0 = SUBREG_REG (op0); code0 = GET_CODE (op0); } while (code1 == SUBREG) { ! subreg_word1 += SUBREG_WORD (op1); op1 = SUBREG_REG (op1); code1 = GET_CODE (op1); } --- 1880,1905 ---- enum rtx_code code0 = GET_CODE (op0); enum rtx_code code1 = GET_CODE (op1); enum machine_mode mode = GET_MODE (op0); ! int subreg_offset0 = 0; ! int subreg_offset1 = 0; enum delay_type delay = DELAY_NONE; while (code0 == SUBREG) { ! subreg_offset0 += subreg_regno_offset (REGNO (SUBREG_REG (op0)), ! GET_MODE (SUBREG_REG (op0)), ! SUBREG_BYTE (op0), ! GET_MODE (op0)); op0 = SUBREG_REG (op0); code0 = GET_CODE (op0); } while (code1 == SUBREG) { ! subreg_offset1 += subreg_regno_offset (REGNO (SUBREG_REG (op1)), ! GET_MODE (SUBREG_REG (op1)), ! SUBREG_BYTE (op1), ! GET_MODE (op1)); op1 = SUBREG_REG (op1); code1 = GET_CODE (op1); } *************** mips_move_1word (operands, insn, unsigne *** 1864,1874 **** if (code0 == REG) { ! int regno0 = REGNO (op0) + subreg_word0; if (code1 == REG) { ! int regno1 = REGNO (op1) + subreg_word1; /* Just in case, don't do anything for assigning a register to itself, unless we are filling a delay slot. */ --- 1910,1920 ---- if (code0 == REG) { ! int regno0 = REGNO (op0) + subreg_offset0; if (code1 == REG) { ! int regno1 = REGNO (op1) + subreg_offset1; /* Just in case, don't do anything for assigning a register to itself, unless we are filling a delay slot. */ *************** mips_move_1word (operands, insn, unsigne *** 2153,2159 **** if (code1 == REG) { ! int regno1 = REGNO (op1) + subreg_word1; if (GP_REG_P (regno1)) { --- 2199,2205 ---- if (code1 == REG) { ! int regno1 = REGNO (op1) + subreg_offset1; if (GP_REG_P (regno1)) { *************** mips_move_1word (operands, insn, unsigne *** 2209,2215 **** if (ret == 0) { ! abort_with_insn (insn, "Bad move"); return 0; } --- 2255,2261 ---- if (ret == 0) { ! abort_with_insn (insn, "bad move"); return 0; } *************** mips_move_2words (operands, insn) *** 2232,2244 **** rtx op1 = operands[1]; enum rtx_code code0 = GET_CODE (operands[0]); enum rtx_code code1 = GET_CODE (operands[1]); ! int subreg_word0 = 0; ! int subreg_word1 = 0; enum delay_type delay = DELAY_NONE; while (code0 == SUBREG) { ! subreg_word0 += SUBREG_WORD (op0); op0 = SUBREG_REG (op0); code0 = GET_CODE (op0); } --- 2278,2293 ---- rtx op1 = operands[1]; enum rtx_code code0 = GET_CODE (operands[0]); enum rtx_code code1 = GET_CODE (operands[1]); ! int subreg_offset0 = 0; ! int subreg_offset1 = 0; enum delay_type delay = DELAY_NONE; while (code0 == SUBREG) { ! subreg_offset0 += subreg_regno_offset (REGNO (SUBREG_REG (op0)), ! GET_MODE (SUBREG_REG (op0)), ! SUBREG_BYTE (op0), ! GET_MODE (op0)); op0 = SUBREG_REG (op0); code0 = GET_CODE (op0); } *************** mips_move_2words (operands, insn) *** 2251,2257 **** while (code1 == SUBREG) { ! subreg_word1 += SUBREG_WORD (op1); op1 = SUBREG_REG (op1); code1 = GET_CODE (op1); } --- 2300,2309 ---- while (code1 == SUBREG) { ! subreg_offset1 += subreg_regno_offset (REGNO (SUBREG_REG (op1)), ! GET_MODE (SUBREG_REG (op1)), ! SUBREG_BYTE (op1), ! GET_MODE (op1)); op1 = SUBREG_REG (op1); code1 = GET_CODE (op1); } *************** mips_move_2words (operands, insn) *** 2269,2279 **** if (code0 == REG) { ! int regno0 = REGNO (op0) + subreg_word0; if (code1 == REG) { ! int regno1 = REGNO (op1) + subreg_word1; /* Just in case, don't do anything for assigning a register to itself, unless we are filling a delay slot. */ --- 2321,2331 ---- if (code0 == REG) { ! int regno0 = REGNO (op0) + subreg_offset0; if (code1 == REG) { ! int regno1 = REGNO (op1) + subreg_offset1; /* Just in case, don't do anything for assigning a register to itself, unless we are filling a delay slot. */ *************** mips_move_2words (operands, insn) *** 2291,2297 **** if (TARGET_FLOAT64) { if (!TARGET_64BIT) ! abort_with_insn (insn, "Bad move"); #ifdef TARGET_FP_CALL_32 if (FP_CALL_GP_REG_P (regno1)) --- 2343,2349 ---- if (TARGET_FLOAT64) { if (!TARGET_64BIT) ! abort_with_insn (insn, "bad move"); #ifdef TARGET_FP_CALL_32 if (FP_CALL_GP_REG_P (regno1)) *************** mips_move_2words (operands, insn) *** 2311,2317 **** if (TARGET_FLOAT64) { if (!TARGET_64BIT) ! abort_with_insn (insn, "Bad move"); #ifdef TARGET_FP_CALL_32 if (FP_CALL_GP_REG_P (regno0)) --- 2363,2369 ---- if (TARGET_FLOAT64) { if (!TARGET_64BIT) ! abort_with_insn (insn, "bad move"); #ifdef TARGET_FP_CALL_32 if (FP_CALL_GP_REG_P (regno0)) *************** mips_move_2words (operands, insn) *** 2505,2511 **** operands[2] = GEN_INT (INTVAL (operands[1]) >> 16 >> 16); operands[1] = GEN_INT (INTVAL (operands[1]) << 16 << 16 >> 16 >> 16); ! ret = "li\t%M0,%2\n\tli\t%L0,%1"; } } --- 2557,2574 ---- operands[2] = GEN_INT (INTVAL (operands[1]) >> 16 >> 16); operands[1] = GEN_INT (INTVAL (operands[1]) << 16 << 16 >> 16 >> 16); ! if (TARGET_MIPS16) ! { ! if (INTVAL (op1) >= 0 && INTVAL (op1) <= 0xffff) ! ret = "li\t%M0,%2\n\tli\t%L0,%1"; ! else if (INTVAL (op1) < 0 && INTVAL (op1) >= -0xffff) ! { ! operands[2] = GEN_INT (1); ! ret = "li\t%M0,%2\n\tneg\t%M0\n\tli\t%L0,%n1\n\tneg\t%L0"; ! } ! } ! else ! ret = "li\t%M0,%2\n\tli\t%L0,%1"; } } *************** mips_move_2words (operands, insn) *** 2533,2544 **** } else if (double_memory_operand (op1, GET_MODE (op1))) ! { ! operands[2] = adj_offsettable_operand (op1, 4); ! ret = (reg_mentioned_p (op0, op1) ! ? "lw\t%D0,%2\n\tlw\t%0,%1" ! : "lw\t%0,%1\n\tlw\t%D0,%2"); ! } if (ret != 0 && MEM_VOLATILE_P (op1)) { --- 2596,2604 ---- } else if (double_memory_operand (op1, GET_MODE (op1))) ! ret = (reg_mentioned_p (op0, op1) ! ? "lw\t%D0,%D1\n\tlw\t%0,%1" ! : "lw\t%0,%1\n\tlw\t%D0,%D1"); if (ret != 0 && MEM_VOLATILE_P (op1)) { *************** mips_move_2words (operands, insn) *** 2610,2616 **** { if (code1 == REG) { ! int regno1 = REGNO (op1) + subreg_word1; if (FP_REG_P (regno1)) ret = "s.d\t%1,%0"; --- 2670,2676 ---- { if (code1 == REG) { ! int regno1 = REGNO (op1) + subreg_offset1; if (FP_REG_P (regno1)) ret = "s.d\t%1,%0"; *************** mips_move_2words (operands, insn) *** 2627,2636 **** } else if (double_memory_operand (op0, GET_MODE (op0))) ! { ! operands[2] = adj_offsettable_operand (op0, 4); ! ret = "sw\t%1,%0\n\tsw\t%D1,%2"; ! } } else if (((code1 == CONST_INT && INTVAL (op1) == 0) --- 2687,2693 ---- } else if (double_memory_operand (op0, GET_MODE (op0))) ! ret = "sw\t%1,%0\n\tsw\t%D1,%D0"; } else if (((code1 == CONST_INT && INTVAL (op1) == 0) *************** mips_move_2words (operands, insn) *** 2642,2651 **** if (TARGET_64BIT) ret = "sd\t%.,%0"; else ! { ! operands[2] = adj_offsettable_operand (op0, 4); ! ret = "sw\t%.,%0\n\tsw\t%.,%2"; ! } } if (TARGET_STATS) --- 2699,2705 ---- if (TARGET_64BIT) ret = "sd\t%.,%0"; else ! ret = "sw\t%.,%0\n\tsw\t%.,%D0"; } if (TARGET_STATS) *************** mips_move_2words (operands, insn) *** 2665,2671 **** if (ret == 0) { ! abort_with_insn (insn, "Bad move"); return 0; } --- 2719,2725 ---- if (ret == 0) { ! abort_with_insn (insn, "bad move"); return 0; } *************** mips_address_cost (addr) *** 2704,2710 **** return 2; } ! /* ... fall through ... */ case SYMBOL_REF: return SYMBOL_REF_FLAG (addr) ? 1 : 2; --- 2758,2764 ---- return 2; } ! /* ... fall through ... */ case SYMBOL_REF: return SYMBOL_REF_FLAG (addr) ? 1 : 2; *************** gen_int_relational (test_code, result, c *** 2964,2969 **** --- 3018,3025 ---- if (! TARGET_MIPS16) { convert_move (result, gen_rtx (GTU, mode, reg, const0_rtx), 0); + if (p_invert != NULL) + *p_invert = 0; invert = 0; } else *************** block_move_loop (dest_reg, src_reg, byte *** 3244,3254 **** rtx src_reg; /* register holding source address */ unsigned int bytes; /* # bytes to move */ int align; /* alignment */ ! rtx orig_dest; /* original dest for change_address */ rtx orig_src; /* original source for making a reg note */ { ! rtx dest_mem = change_address (orig_dest, BLKmode, dest_reg); ! rtx src_mem = change_address (orig_src, BLKmode, src_reg); rtx align_rtx = GEN_INT (align); rtx label; rtx final_src; --- 3300,3310 ---- rtx src_reg; /* register holding source address */ unsigned int bytes; /* # bytes to move */ int align; /* alignment */ ! rtx orig_dest; /* original dest */ rtx orig_src; /* original source for making a reg note */ { ! rtx dest_mem = replace_equiv_address (orig_dest, dest_reg); ! rtx src_mem = replace_equiv_address (orig_src, src_reg); rtx align_rtx = GEN_INT (align); rtx label; rtx final_src; *************** expand_block_move (operands) *** 3379,3388 **** move_by_pieces (orig_dest, orig_src, bytes, align * BITS_PER_WORD); else if (constp && bytes <= (unsigned)2 * MAX_MOVE_BYTES) ! emit_insn (gen_movstrsi_internal (change_address (orig_dest, BLKmode, ! dest_reg), ! change_address (orig_src, BLKmode, ! src_reg), bytes_rtx, align_rtx)); else if (constp && align >= (unsigned) UNITS_PER_WORD && optimize) --- 3435,3444 ---- move_by_pieces (orig_dest, orig_src, bytes, align * BITS_PER_WORD); else if (constp && bytes <= (unsigned)2 * MAX_MOVE_BYTES) ! emit_insn (gen_movstrsi_internal (replace_equiv_address (orig_dest, ! dest_reg), ! replace_equiv_address (orig_src, ! src_reg), bytes_rtx, align_rtx)); else if (constp && align >= (unsigned) UNITS_PER_WORD && optimize) *************** expand_block_move (operands) *** 3429,3438 **** /* Bytes at the end of the loop. */ if (leftover) ! emit_insn (gen_movstrsi_internal (change_address (orig_dest, BLKmode, ! dest_reg), ! change_address (orig_src, BLKmode, ! src_reg), GEN_INT (leftover), GEN_INT (align))); } --- 3485,3494 ---- /* Bytes at the end of the loop. */ if (leftover) ! emit_insn (gen_movstrsi_internal (replace_equiv_address (orig_dest, ! dest_reg), ! replace_equiv_address (orig_src, ! src_reg), GEN_INT (leftover), GEN_INT (align))); } *************** expand_block_move (operands) *** 3455,3461 **** The block move type can be one of the following: BLOCK_MOVE_NORMAL Do all of the block move. BLOCK_MOVE_NOT_LAST Do all but the last store. ! BLOCK_MOVE_LAST Do just the last store. */ const char * output_block_move (insn, operands, num_regs, move_type) --- 3511,3517 ---- The block move type can be one of the following: BLOCK_MOVE_NORMAL Do all of the block move. BLOCK_MOVE_NOT_LAST Do all but the last store. ! BLOCK_MOVE_LAST Do just the last store. */ const char * output_block_move (insn, operands, num_regs, move_type) *************** output_block_move (insn, operands, num_r *** 3511,3517 **** constant addresses into registers when generating N32/N64 code, just in case we might emit an unaligned load instruction. */ if (num_regs > 2 && (bytes > 2 * align || move_type != BLOCK_MOVE_NORMAL ! || mips_abi == ABI_N32 || mips_abi == ABI_64)) { if (CONSTANT_P (src_reg)) { --- 3567,3575 ---- constant addresses into registers when generating N32/N64 code, just in case we might emit an unaligned load instruction. */ if (num_regs > 2 && (bytes > 2 * align || move_type != BLOCK_MOVE_NORMAL ! || mips_abi == ABI_MEABI ! || mips_abi == ABI_N32 ! || mips_abi == ABI_64)) { if (CONSTANT_P (src_reg)) { *************** output_block_move (insn, operands, num_r *** 3589,3595 **** else if (num_regs < 1) abort_with_insn (insn, ! "Cannot do block move, not enough scratch registers"); while (bytes > 0) { --- 3647,3653 ---- else if (num_regs < 1) abort_with_insn (insn, ! "cannot do block move, not enough scratch registers"); while (bytes > 0) { *************** init_cumulative_args (cum, fntype, libna *** 3825,3835 **** } *cum = zero_cum; /* Determine if this function has variable arguments. This is indicated by the last argument being 'void_type_mode' if there are no variable arguments. The standard MIPS calling sequence ! passes all arguments in the general purpose registers in this case. */ for (param = fntype ? TYPE_ARG_TYPES (fntype) : 0; param != 0; param = next_param) --- 3883,3894 ---- } *cum = zero_cum; + cum->prototype = (fntype && TYPE_ARG_TYPES (fntype)); /* Determine if this function has variable arguments. This is indicated by the last argument being 'void_type_mode' if there are no variable arguments. The standard MIPS calling sequence ! passes all arguments in the general purpose registers in this case. */ for (param = fntype ? TYPE_ARG_TYPES (fntype) : 0; param != 0; param = next_param) *************** function_arg_advance (cum, mode, type, n *** 3900,3905 **** --- 3959,3965 ---- break; case DImode: + case TImode: cum->gp_reg_found = 1; cum->arg_words += (TARGET_64BIT ? 1 : 2); break; *************** function_arg (cum, mode, type, named) *** 3969,3974 **** --- 4029,4039 ---- arg_words = &cum->fp_arg_words; regbase = FP_ARG_FIRST; } + /* The MIPS eabi says only structures containing doubles get passed in a + fp register, so force a structure containing a float to be passed in + the integer registers. */ + else if (mips_abi == ABI_MEABI && struct_p) + regbase = GP_ARG_FIRST; else regbase = (TARGET_SOFT_FLOAT || ! named ? GP_ARG_FIRST : FP_ARG_FIRST); break; *************** function_arg (cum, mode, type, named) *** 4021,4026 **** --- 4086,4092 ---- break; case DImode: + case TImode: if (! TARGET_64BIT) cum->arg_words += (cum->arg_words & 1); regbase = GP_ARG_FIRST; *************** function_arg (cum, mode, type, named) *** 4038,4048 **** if (regbase == -1) abort (); ! if (! type || TREE_CODE (type) != RECORD_TYPE || mips_abi == ABI_32 ! || mips_abi == ABI_EABI || mips_abi == ABI_O64 || ! named || ! TYPE_SIZE_UNIT (type) || ! host_integerp (TYPE_SIZE_UNIT (type), 1)) ! ret = gen_rtx_REG (mode, regbase + *arg_words + bias); else { /* The Irix 6 n32/n64 ABIs say that if any 64 bit chunk of the --- 4104,4133 ---- if (regbase == -1) abort (); ! if (! type || TREE_CODE (type) != RECORD_TYPE ! || mips_abi == ABI_32 || mips_abi == ABI_EABI ! || mips_abi == ABI_O64 || mips_abi == ABI_MEABI ! || ! named || ! TYPE_SIZE_UNIT (type) || ! host_integerp (TYPE_SIZE_UNIT (type), 1)) ! { ! ! unsigned int arg_reg = (regbase + *arg_words + bias); ! ret = gen_rtx_REG (mode, arg_reg); ! if (mips_abi == ABI_MEABI ! && regbase == FP_ARG_FIRST ! && ! cum->prototype) ! { ! /* To make K&R varargs work we need to pass floating ! point arguments in both integer and FP registers. */ ! ret = gen_rtx_PARALLEL (mode, ! gen_rtvec (2, ! gen_rtx_EXPR_LIST (VOIDmode, ! gen_rtx_REG (mode, ! arg_reg + GP_ARG_FIRST - FP_ARG_FIRST), ! const0_rtx), gen_rtx_EXPR_LIST (VOIDmode, ret, const0_rtx))); ! } ! } else { /* The Irix 6 n32/n64 ABIs say that if any 64 bit chunk of the *************** function_arg (cum, mode, type, named) *** 4099,4104 **** --- 4184,4190 ---- if (field && int_bit_position (field) == bitpos && TREE_CODE (TREE_TYPE (field)) == REAL_TYPE + && !TARGET_SOFT_FLOAT && TYPE_PRECISION (TREE_TYPE (field)) == BITS_PER_WORD) reg = gen_rtx_REG (DFmode, regno + FP_ARG_FIRST - GP_ARG_FIRST); *************** function_arg (cum, mode, type, named) *** 4139,4145 **** calling convention for now. */ if (struct_p && int_size_in_bytes (type) < UNITS_PER_WORD ! && ! TARGET_64BIT && mips_abi != ABI_EABI) { rtx amount = GEN_INT (BITS_PER_WORD - int_size_in_bytes (type) * BITS_PER_UNIT); --- 4225,4233 ---- calling convention for now. */ if (struct_p && int_size_in_bytes (type) < UNITS_PER_WORD ! && ! TARGET_64BIT ! && mips_abi != ABI_EABI ! && mips_abi != ABI_MEABI) { rtx amount = GEN_INT (BITS_PER_WORD - int_size_in_bytes (type) * BITS_PER_UNIT); *************** function_arg_partial_nregs (cum, mode, t *** 4231,4237 **** Note that the GPR save area is not constant size, due to optimization in the prologue. Hence, we can't use a design with two pointers and two offsets, although we could have designed this with two pointers ! and three offsets. */ tree --- 4319,4325 ---- Note that the GPR save area is not constant size, due to optimization in the prologue. Hence, we can't use a design with two pointers and two offsets, although we could have designed this with two pointers ! and three offsets. */ tree *************** mips_va_start (stdarg_p, valist, nextarg *** 4294,4300 **** if (mips_abi == ABI_EABI) { int gpr_save_area_size; ! /* Note UNITS_PER_WORD is 4 bytes or 8, depending on TARGET_64BIT. */ if (int_arg_words < 8 ) /* Adjust for the prologue's economy measure */ gpr_save_area_size = (8 - int_arg_words) * UNITS_PER_WORD; --- 4382,4388 ---- if (mips_abi == ABI_EABI) { int gpr_save_area_size; ! /* Note UNITS_PER_WORD is 4 bytes or 8, depending on TARGET_64BIT. */ if (int_arg_words < 8 ) /* Adjust for the prologue's economy measure */ gpr_save_area_size = (8 - int_arg_words) * UNITS_PER_WORD; *************** mips_va_start (stdarg_p, valist, nextarg *** 4330,4336 **** /* Emit code setting a pointer into the overflow (shared-stack) area. If there were more than 8 non-float formals, or more than 8 float formals, then this pointer isn't to the base of the area. ! In that case, it must point to where the first vararg is. */ size_excess = 0; if (float_formals > floats_passed_in_regs) size_excess += (float_formals-floats_passed_in_regs) * 8; --- 4418,4424 ---- /* Emit code setting a pointer into the overflow (shared-stack) area. If there were more than 8 non-float formals, or more than 8 float formals, then this pointer isn't to the base of the area. ! In that case, it must point to where the first vararg is. */ size_excess = 0; if (float_formals > floats_passed_in_regs) size_excess += (float_formals-floats_passed_in_regs) * 8; *************** mips_va_start (stdarg_p, valist, nextarg *** 4344,4350 **** take into account the exact sequence of floats and non-floats which make up the excess. That calculation should be rolled into the code which sets the current_function_args_info struct. ! The above then reduces to a fetch from that struct. */ t = make_tree (TREE_TYPE (ovfl), virtual_incoming_args_rtx); --- 4432,4438 ---- take into account the exact sequence of floats and non-floats which make up the excess. That calculation should be rolled into the code which sets the current_function_args_info struct. ! The above then reduces to a fetch from that struct. */ t = make_tree (TREE_TYPE (ovfl), virtual_incoming_args_rtx); *************** mips_va_start (stdarg_p, valist, nextarg *** 4354,4360 **** t = build (MODIFY_EXPR, TREE_TYPE (ovfl), ovfl, t); expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); ! /* Emit code setting a ptr to the base of the overflow area. */ t = make_tree (TREE_TYPE (gtop), virtual_incoming_args_rtx); t = build (MODIFY_EXPR, TREE_TYPE (gtop), gtop, t); expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); --- 4442,4448 ---- t = build (MODIFY_EXPR, TREE_TYPE (ovfl), ovfl, t); expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); ! /* Emit code setting a ptr to the base of the overflow area. */ t = make_tree (TREE_TYPE (gtop), virtual_incoming_args_rtx); t = build (MODIFY_EXPR, TREE_TYPE (gtop), gtop, t); expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); *************** mips_va_start (stdarg_p, valist, nextarg *** 4364,4370 **** If mips4, this is gpr_save_area_size below the overflow area. If mips2, also round down to an 8-byte boundary, since the FPR save area is 8-byte aligned, and GPR is 4-byte-aligned. ! Therefore there can be a 4-byte gap between the save areas. */ gprv = make_tree (TREE_TYPE (ftop), virtual_incoming_args_rtx); fpr_save_offset = gpr_save_area_size; if (!TARGET_64BIT) --- 4452,4458 ---- If mips4, this is gpr_save_area_size below the overflow area. If mips2, also round down to an 8-byte boundary, since the FPR save area is 8-byte aligned, and GPR is 4-byte-aligned. ! Therefore there can be a 4-byte gap between the save areas. */ gprv = make_tree (TREE_TYPE (ftop), virtual_incoming_args_rtx); fpr_save_offset = gpr_save_area_size; if (!TARGET_64BIT) *************** mips_va_start (stdarg_p, valist, nextarg *** 4406,4412 **** /* TARGET_SOFT_FLOAT or TARGET_SINGLE_FLOAT */ /* Everything is in the GPR save area, or in the overflow ! area which is contiguous with it. */ int offset = -gpr_save_area_size; if (gpr_save_area_size == 0) --- 4494,4500 ---- /* TARGET_SOFT_FLOAT or TARGET_SINGLE_FLOAT */ /* Everything is in the GPR save area, or in the overflow ! area which is contiguous with it. */ int offset = -gpr_save_area_size; if (gpr_save_area_size == 0) *************** mips_va_start (stdarg_p, valist, nextarg *** 4429,4434 **** --- 4517,4524 ---- and both iris5.h and iris6.h define _MIPS_SIM. */ if (mips_abi == ABI_N32 || mips_abi == ABI_64) ofs = (int_arg_words >= 8 ? -UNITS_PER_WORD : 0); + else if (mips_abi == ABI_MEABI) + ofs = (int_arg_words >= 8 ? -UNITS_PER_WORD : 0); else ofs = -UNITS_PER_WORD; } *************** mips_va_arg (valist, type) *** 4471,4477 **** if (TARGET_SOFT_FLOAT || TARGET_SINGLE_FLOAT) { /* Case of all args in a merged stack. No need to check bounds, ! just advance valist along the stack. */ tree gpr = valist; if (! indirect --- 4561,4567 ---- if (TARGET_SOFT_FLOAT || TARGET_SINGLE_FLOAT) { /* Case of all args in a merged stack. No need to check bounds, ! just advance valist along the stack. */ tree gpr = valist; if (! indirect *************** mips_va_arg (valist, type) *** 4498,4504 **** if (indirect) { r = gen_rtx_MEM (Pmode, addr_rtx); ! MEM_ALIAS_SET (r) = get_varargs_alias_set (); emit_move_insn (addr_rtx, r); } else --- 4588,4594 ---- if (indirect) { r = gen_rtx_MEM (Pmode, addr_rtx); ! set_mem_alias_set (r, get_varargs_alias_set ()); emit_move_insn (addr_rtx, r); } else *************** mips_va_arg (valist, type) *** 4509,4515 **** return addr_rtx; } ! /* Not a simple merged stack. Need ptrs and indexes left by va_start. */ f_ovfl = TYPE_FIELDS (va_list_type_node); f_gtop = TREE_CHAIN (f_ovfl); --- 4599,4605 ---- return addr_rtx; } ! /* Not a simple merged stack. Need ptrs and indexes left by va_start. */ f_ovfl = TYPE_FIELDS (va_list_type_node); f_gtop = TREE_CHAIN (f_ovfl); *************** mips_va_arg (valist, type) *** 4529,4539 **** if (TREE_CODE (type) == REAL_TYPE) { ! /* Emit code to branch if foff == 0. */ r = expand_expr (foff, NULL_RTX, TYPE_MODE (TREE_TYPE (foff)), EXPAND_NORMAL); ! emit_cmp_and_jump_insns (r, const0_rtx, EQ, ! const1_rtx, GET_MODE (r), 1, 1, lab_false); /* Emit code for addr_rtx = ftop - foff */ t = build (MINUS_EXPR, TREE_TYPE (ftop), ftop, foff ); --- 4619,4629 ---- if (TREE_CODE (type) == REAL_TYPE) { ! /* Emit code to branch if foff == 0. */ r = expand_expr (foff, NULL_RTX, TYPE_MODE (TREE_TYPE (foff)), EXPAND_NORMAL); ! emit_cmp_and_jump_insns (r, const0_rtx, EQ, const1_rtx, GET_MODE (r), ! 1, lab_false); /* Emit code for addr_rtx = ftop - foff */ t = build (MINUS_EXPR, TREE_TYPE (ftop), ftop, foff ); *************** mips_va_arg (valist, type) *** 4557,4563 **** /* For mips2, the overflow area contains mixed size items. If a 4-byte int is followed by an 8-byte float, then natural alignment causes a 4 byte gap. ! So, dynamically adjust ovfl up to a multiple of 8. */ t = build (BIT_AND_EXPR, TREE_TYPE (ovfl), ovfl, build_int_2 (7, 0)); t = build (PLUS_EXPR, TREE_TYPE (ovfl), ovfl, t); --- 4647,4653 ---- /* For mips2, the overflow area contains mixed size items. If a 4-byte int is followed by an 8-byte float, then natural alignment causes a 4 byte gap. ! So, dynamically adjust ovfl up to a multiple of 8. */ t = build (BIT_AND_EXPR, TREE_TYPE (ovfl), ovfl, build_int_2 (7, 0)); t = build (PLUS_EXPR, TREE_TYPE (ovfl), ovfl, t); *************** mips_va_arg (valist, type) *** 4566,4572 **** } /* Emit code for addr_rtx = the ovfl pointer into overflow area. ! Regardless of mips2, postincrement the ovfl pointer by 8. */ t = build (POSTINCREMENT_EXPR, TREE_TYPE(ovfl), ovfl, size_int (8)); r = expand_expr (t, addr_rtx, Pmode, EXPAND_NORMAL); --- 4656,4662 ---- } /* Emit code for addr_rtx = the ovfl pointer into overflow area. ! Regardless of mips2, postincrement the ovfl pointer by 8. */ t = build (POSTINCREMENT_EXPR, TREE_TYPE(ovfl), ovfl, size_int (8)); r = expand_expr (t, addr_rtx, Pmode, EXPAND_NORMAL); *************** mips_va_arg (valist, type) *** 4589,4621 **** /* In mips2, int takes 32 bits of the GPR save area, but longlong takes an aligned 64 bits. So, emit code to zero the low order bits of goff, thus aligning ! the later calculation of (gtop-goff) upwards. */ t = build (BIT_AND_EXPR, TREE_TYPE (goff), goff, build_int_2 (-8, -1)); t = build (MODIFY_EXPR, TREE_TYPE (goff), goff, t); expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); } ! /* Emit code to branch if goff == 0. */ r = expand_expr (goff, NULL_RTX, TYPE_MODE (TREE_TYPE (goff)), EXPAND_NORMAL); ! emit_cmp_and_jump_insns (r, const0_rtx, EQ, ! const1_rtx, GET_MODE (r), 1, 1, lab_false); ! /* Emit code for addr_rtx = gtop - goff. */ t = build (MINUS_EXPR, TREE_TYPE (gtop), gtop, goff); r = expand_expr (t, addr_rtx, Pmode, EXPAND_NORMAL); if (r != addr_rtx) emit_move_insn (addr_rtx, r); ! /* Note that mips2 int is 32 bit, but mips2 longlong is 64. */ if (! TARGET_64BIT && TYPE_PRECISION (type) == 64) step_size = 8; else step_size = UNITS_PER_WORD; /* Emit code for goff = goff - step_size. ! Advances the offset up GPR save area over the item. */ t = build (MINUS_EXPR, TREE_TYPE (goff), goff, build_int_2 (step_size, 0)); t = build (MODIFY_EXPR, TREE_TYPE (goff), goff, t); --- 4679,4711 ---- /* In mips2, int takes 32 bits of the GPR save area, but longlong takes an aligned 64 bits. So, emit code to zero the low order bits of goff, thus aligning ! the later calculation of (gtop-goff) upwards. */ t = build (BIT_AND_EXPR, TREE_TYPE (goff), goff, build_int_2 (-8, -1)); t = build (MODIFY_EXPR, TREE_TYPE (goff), goff, t); expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); } ! /* Emit code to branch if goff == 0. */ r = expand_expr (goff, NULL_RTX, TYPE_MODE (TREE_TYPE (goff)), EXPAND_NORMAL); ! emit_cmp_and_jump_insns (r, const0_rtx, EQ, const1_rtx, GET_MODE (r), ! 1, lab_false); ! /* Emit code for addr_rtx = gtop - goff. */ t = build (MINUS_EXPR, TREE_TYPE (gtop), gtop, goff); r = expand_expr (t, addr_rtx, Pmode, EXPAND_NORMAL); if (r != addr_rtx) emit_move_insn (addr_rtx, r); ! /* Note that mips2 int is 32 bit, but mips2 longlong is 64. */ if (! TARGET_64BIT && TYPE_PRECISION (type) == 64) step_size = 8; else step_size = UNITS_PER_WORD; /* Emit code for goff = goff - step_size. ! Advances the offset up GPR save area over the item. */ t = build (MINUS_EXPR, TREE_TYPE (goff), goff, build_int_2 (step_size, 0)); t = build (MODIFY_EXPR, TREE_TYPE (goff), goff, t); *************** mips_va_arg (valist, type) *** 4636,4658 **** emit_queue(); emit_label (lab_over); if (indirect) { ! r = gen_rtx_MEM (Pmode, addr_rtx); ! MEM_ALIAS_SET (r) = get_varargs_alias_set (); emit_move_insn (addr_rtx, r); } ! else ! { ! if (BYTES_BIG_ENDIAN && rsize != size) ! addr_rtx = plus_constant (addr_rtx, rsize - size); ! } return addr_rtx; } } else { ! /* Not EABI. */ int align; /* ??? The original va-mips.h did always align, despite the fact --- 4726,4748 ---- emit_queue(); emit_label (lab_over); + if (BYTES_BIG_ENDIAN && rsize != size) + addr_rtx = plus_constant (addr_rtx, rsize - size); + if (indirect) { ! addr_rtx = force_reg (Pmode, addr_rtx); ! r = gen_rtx_MEM (Pmode, addr_rtx); ! set_mem_alias_set (r, get_varargs_alias_set ()); emit_move_insn (addr_rtx, r); } ! return addr_rtx; } } else { ! /* Not EABI. */ int align; /* ??? The original va-mips.h did always align, despite the fact *************** override_options () *** 4698,4703 **** --- 4788,4794 ---- register int i, start; register int regno; register enum machine_mode mode; + register enum processor_type mips_cpu; mips_section_threshold = g_switch_set ? g_switch_value : MIPS_DEFAULT_GVALUE; *************** override_options () *** 4709,4715 **** /* If both single-float and soft-float are set, then clear the one that was set by TARGET_DEFAULT, leaving the one that was set by the user. We assume here that the specs prevent both being set by the ! user. */ #ifdef TARGET_DEFAULT if (TARGET_SINGLE_FLOAT && TARGET_SOFT_FLOAT) target_flags &= ~((TARGET_DEFAULT) & (MASK_SOFT_FLOAT | MASK_SINGLE_FLOAT)); --- 4800,4806 ---- /* If both single-float and soft-float are set, then clear the one that was set by TARGET_DEFAULT, leaving the one that was set by the user. We assume here that the specs prevent both being set by the ! user. */ #ifdef TARGET_DEFAULT if (TARGET_SINGLE_FLOAT && TARGET_SOFT_FLOAT) target_flags &= ~((TARGET_DEFAULT) & (MASK_SOFT_FLOAT | MASK_SINGLE_FLOAT)); *************** override_options () *** 4742,4748 **** mips_isa = MIPS_ISA_DEFAULT; } } ! else if (mips_isa < 1 || mips_isa > 4) { error ("-mips%d not supported", mips_isa); mips_isa = 1; --- 4833,4842 ---- mips_isa = MIPS_ISA_DEFAULT; } } ! else if (mips_isa < 1 ! || (mips_isa > 4 ! && mips_isa != 32 ! && mips_isa != 64)) { error ("-mips%d not supported", mips_isa); mips_isa = 1; *************** override_options () *** 4756,4762 **** } #ifdef MIPS_ABI_DEFAULT ! /* Get the ABI to use. */ if (mips_abi_string == (char *) 0) mips_abi = MIPS_ABI_DEFAULT; else if (! strcmp (mips_abi_string, "32")) --- 4850,4856 ---- } #ifdef MIPS_ABI_DEFAULT ! /* Get the ABI to use. */ if (mips_abi_string == (char *) 0) mips_abi = MIPS_ABI_DEFAULT; else if (! strcmp (mips_abi_string, "32")) *************** override_options () *** 4769,4787 **** mips_abi = ABI_64; else if (! strcmp (mips_abi_string, "eabi")) mips_abi = ABI_EABI; else error ("bad value (%s) for -mabi= switch", mips_abi_string); /* A specified ISA defaults the ABI if it was not specified. */ if (mips_abi_string == 0 && mips_isa_string ! && mips_abi != ABI_EABI && mips_abi != ABI_O64) { ! if (! ISA_HAS_64BIT_REGS) ! mips_abi = ABI_32; else ! mips_abi = ABI_64; } /* A specified ABI defaults the ISA if it was not specified. */ else if (mips_isa_string == 0 && mips_abi_string && mips_abi != ABI_EABI && mips_abi != ABI_O64) --- 4863,4891 ---- mips_abi = ABI_64; else if (! strcmp (mips_abi_string, "eabi")) mips_abi = ABI_EABI; + else if (! strcmp (mips_abi_string, "meabi")) + mips_abi = ABI_MEABI; else error ("bad value (%s) for -mabi= switch", mips_abi_string); /* A specified ISA defaults the ABI if it was not specified. */ if (mips_abi_string == 0 && mips_isa_string ! && mips_abi != ABI_EABI ! && mips_abi != ABI_O64 ! && mips_abi != ABI_MEABI) { ! if (mips_isa == 64) ! mips_abi = ABI_O64; else ! { ! if (! ISA_HAS_64BIT_REGS) ! mips_abi = ABI_32; ! else if (mips_abi != ABI_N32) ! mips_abi = ABI_64; ! } } + #ifdef MIPS_CPU_STRING_DEFAULT /* A specified ABI defaults the ISA if it was not specified. */ else if (mips_isa_string == 0 && mips_abi_string && mips_abi != ABI_EABI && mips_abi != ABI_O64) *************** override_options () *** 4793,4805 **** else mips_isa = 4; } /* If both ABI and ISA were specified, check for conflicts. */ else if (mips_isa_string && mips_abi_string) { ! if ((! ISA_HAS_64BIT_REGS && (mips_abi == ABI_N32 || mips_abi == ABI_64 || mips_abi == ABI_O64)) - || (ISA_HAS_64BIT_REGS && mips_abi == ABI_32)) error ("-mabi=%s does not support -mips%d", mips_abi_string, mips_isa); } --- 4897,4909 ---- else mips_isa = 4; } + #endif /* If both ABI and ISA were specified, check for conflicts. */ else if (mips_isa_string && mips_abi_string) { ! if (! ISA_HAS_64BIT_REGS && (mips_abi == ABI_N32 || mips_abi == ABI_64 || mips_abi == ABI_O64)) error ("-mabi=%s does not support -mips%d", mips_abi_string, mips_isa); } *************** override_options () *** 4815,4827 **** || mips_abi == ABI_64)) target_flags |= MASK_LONG64; - /* ??? This doesn't work yet, so don't let people try to use it. */ - if (mips_abi == ABI_32) - error ("The -mabi=32 support does not work yet."); - #else if (mips_abi_string) ! error ("This target does not support the -mabi switch."); #endif #ifdef MIPS_CPU_STRING_DEFAULT --- 4919,4927 ---- || mips_abi == ABI_64)) target_flags |= MASK_LONG64; #else if (mips_abi_string) ! error ("this target does not support the -mabi switch"); #endif #ifdef MIPS_CPU_STRING_DEFAULT *************** override_options () *** 4836,4845 **** #endif /* Identify the processor type. */ if (mips_cpu_string != 0) { ! int mips_cpu = mips_parse_cpu (mips_cpu_string); ! if (mips_cpu == PROCESSOR_DEFAULT) { error ("bad value (%s) for -mcpu= switch", mips_cpu_string); --- 4936,4945 ---- #endif /* Identify the processor type. */ + if (mips_cpu_string != 0) { ! mips_cpu = mips_parse_cpu (mips_cpu_string); if (mips_cpu == PROCESSOR_DEFAULT) { error ("bad value (%s) for -mcpu= switch", mips_cpu_string); *************** override_options () *** 4854,4927 **** || ! strcmp (mips_arch_string, "DEFAULT")) { switch (mips_isa) ! { ! default: ! mips_arch_string = "3000"; ! mips_arch = PROCESSOR_R3000; ! break; ! case 2: ! mips_arch_string = "6000"; ! mips_arch = PROCESSOR_R6000; ! break; ! case 3: ! mips_arch_string = "4000"; ! mips_arch = PROCESSOR_R4000; break; ! case 4: ! mips_arch_string = "8000"; ! mips_arch = PROCESSOR_R8000; break; } } else { mips_arch = mips_parse_cpu (mips_arch_string); - if (mips_arch == PROCESSOR_DEFAULT) ! { ! error ("bad value (%s) for -march= switch", mips_arch_string); ! mips_arch_string = "default"; ! } } if (mips_tune_string == 0 || ! strcmp (mips_tune_string, "default") || ! strcmp (mips_tune_string, "DEFAULT")) { if (mips_arch != PROCESSOR_DEFAULT) ! mips_tune = mips_arch; else switch (mips_isa) ! { ! default: ! mips_tune_string = "3000"; ! mips_tune = PROCESSOR_R3000; ! break; ! case 2: ! mips_tune_string = "6000"; ! mips_tune = PROCESSOR_R6000; ! break; ! case 3: ! mips_tune_string = "4000"; ! mips_tune = PROCESSOR_R4000; ! break; ! case 4: ! mips_tune_string = "8000"; ! mips_tune = PROCESSOR_R8000; ! break; ! } } else { mips_tune = mips_parse_cpu (mips_tune_string); if (mips_tune == PROCESSOR_DEFAULT) ! { ! error ("bad value (%s) for -mtune= switch", mips_tune_string); ! mips_tune_string = "default"; ! } } - /* make sure sizes of ints/longs/etc. are ok */ if (! ISA_HAS_64BIT_REGS) { --- 4954,5041 ---- || ! strcmp (mips_arch_string, "DEFAULT")) { switch (mips_isa) ! { ! default: ! mips_arch_string = "3000"; ! mips_arch = PROCESSOR_R3000; ! break; ! case 2: ! mips_arch_string = "6000"; ! mips_arch = PROCESSOR_R6000; ! break; ! case 3: ! mips_arch_string = "4000"; ! mips_arch = PROCESSOR_R4000; ! break; ! case 4: ! mips_arch_string = "8000"; ! mips_arch = PROCESSOR_R8000; ! break; ! case 32: ! mips_arch_string = "4kc"; ! mips_arch = PROCESSOR_R4KC; break; ! case 64: ! mips_arch_string = "5kc"; ! mips_arch = PROCESSOR_R5KC; break; } } else { mips_arch = mips_parse_cpu (mips_arch_string); if (mips_arch == PROCESSOR_DEFAULT) ! { ! error ("bad value (%s) for -march= switch", mips_arch_string); ! mips_arch_string = "default"; ! } } if (mips_tune_string == 0 || ! strcmp (mips_tune_string, "default") || ! strcmp (mips_tune_string, "DEFAULT")) { if (mips_arch != PROCESSOR_DEFAULT) ! mips_tune = mips_arch; else switch (mips_isa) ! { ! default: ! mips_tune_string = "3000"; ! mips_tune = PROCESSOR_R3000; ! break; ! case 2: ! mips_tune_string = "6000"; ! mips_tune = PROCESSOR_R6000; ! break; ! case 3: ! mips_tune_string = "4000"; ! mips_tune = PROCESSOR_R4000; ! break; ! case 4: ! mips_tune_string = "8000"; ! mips_tune = PROCESSOR_R8000; ! break; ! case 32: ! mips_tune_string = "4kc"; ! mips_tune = PROCESSOR_R4KC; ! break; ! case 64: ! mips_tune_string = "5kc"; ! mips_tune = PROCESSOR_R5KC; ! break; ! } } else { mips_tune = mips_parse_cpu (mips_tune_string); if (mips_tune == PROCESSOR_DEFAULT) ! { ! error ("bad value (%s) for -mtune= switch", mips_tune_string); ! mips_tune_string = "default"; ! } } /* make sure sizes of ints/longs/etc. are ok */ if (! ISA_HAS_64BIT_REGS) { *************** override_options () *** 5024,5030 **** if (mips_entry_string != NULL) { if (*mips_entry_string != '\0') ! error ("Invalid option `entry%s'", mips_entry_string); if (! TARGET_MIPS16) warning ("-mentry is only meaningful with -mips-16"); --- 5138,5144 ---- if (mips_entry_string != NULL) { if (*mips_entry_string != '\0') ! error ("invalid option `entry%s'", mips_entry_string); if (! TARGET_MIPS16) warning ("-mentry is only meaningful with -mips-16"); *************** override_options () *** 5124,5130 **** temp = ((regno & 1) == 0 || size <= UNITS_PER_WORD); else if (FP_REG_P (regno)) ! temp = ((TARGET_FLOAT64 || ((regno & 1) == 0)) && (class == MODE_FLOAT || class == MODE_COMPLEX_FLOAT || (TARGET_DEBUG_H_MODE && class == MODE_INT)) --- 5238,5251 ---- temp = ((regno & 1) == 0 || size <= UNITS_PER_WORD); else if (FP_REG_P (regno)) ! temp = ((TARGET_FLOAT64 || ((regno & 1) == 0) ! /* I think this change is OK regardless of abi, but ! I'm being cautions untill I can test this more. ! HARD_REGNO_MODE_OK is about whether or not you ! can move to and from a register without changing ! the value, not about whether math works on the ! register. */ ! || (mips_abi == ABI_MEABI && size <= 4)) && (class == MODE_FLOAT || class == MODE_COMPLEX_FLOAT || (TARGET_DEBUG_H_MODE && class == MODE_INT)) *************** mips_debugger_offset (addr, offset) *** 5222,5228 **** /* sdbout_parms does not want this to crash for unrecognized cases. */ #if 0 else if (reg != arg_pointer_rtx) ! abort_with_insn (addr, "mips_debugger_offset called with non stack/frame/arg pointer."); #endif return offset; --- 5343,5349 ---- /* sdbout_parms does not want this to crash for unrecognized cases. */ #if 0 else if (reg != arg_pointer_rtx) ! abort_with_insn (addr, "mips_debugger_offset called with non stack/frame/arg pointer"); #endif return offset; *************** mips_debugger_offset (addr, offset) *** 5254,5260 **** 'x' X is CONST_INT, prints 16 bits in hexadecimal format = "0x%04x", 'd' output integer constant in decimal, 'z' if the operand is 0, use $0 instead of normal operand. ! 'D' print second register of double-word register operand. 'L' print low-order register of double-word register operand. 'M' print high-order register of double-word register operand. 'C' print part of opcode for a branch condition. --- 5375,5381 ---- 'x' X is CONST_INT, prints 16 bits in hexadecimal format = "0x%04x", 'd' output integer constant in decimal, 'z' if the operand is 0, use $0 instead of normal operand. ! 'D' print second part of double-word register or memory operand. 'L' print low-order register of double-word register operand. 'M' print high-order register of double-word register operand. 'C' print part of opcode for a branch condition. *************** print_operand (file, op, letter) *** 5414,5420 **** break; default: ! error ("PRINT_OPERAND: Unknown punctuation '%c'", letter); break; } --- 5535,5541 ---- break; default: ! error ("PRINT_OPERAND: unknown punctuation '%c'", letter); break; } *************** print_operand (file, op, letter) *** 5525,5531 **** } else if (code == MEM) ! output_address (XEXP (op, 0)); else if (code == CONST_DOUBLE && GET_MODE_CLASS (GET_MODE (op)) == MODE_FLOAT) --- 5646,5657 ---- } else if (code == MEM) ! { ! if (letter == 'D') ! output_address (plus_constant (XEXP (op, 0), 4)); ! else ! output_address (XEXP (op, 0)); ! } else if (code == CONST_DOUBLE && GET_MODE_CLASS (GET_MODE (op)) == MODE_FLOAT) *************** print_operand_address (file, addr) *** 5601,5607 **** { case REG: if (! TARGET_MIPS16 && REGNO (addr) == ARG_POINTER_REGNUM) ! abort_with_insn (addr, "Arg pointer not eliminated."); fprintf (file, "0(%s)", reg_names [REGNO (addr)]); break; --- 5727,5733 ---- { case REG: if (! TARGET_MIPS16 && REGNO (addr) == ARG_POINTER_REGNUM) ! abort_with_insn (addr, "arg pointer not eliminated"); fprintf (file, "0(%s)", reg_names [REGNO (addr)]); break; *************** print_operand_address (file, addr) *** 5612,5622 **** register rtx arg1 = XEXP (addr, 1); if (! mips_split_addresses) ! abort_with_insn (addr, "PRINT_OPERAND_ADDRESS, Spurious LO_SUM."); if (GET_CODE (arg0) != REG) abort_with_insn (addr, ! "PRINT_OPERAND_ADDRESS, LO_SUM with #1 not REG."); fprintf (file, "%%lo("); print_operand_address (file, arg1); --- 5738,5748 ---- register rtx arg1 = XEXP (addr, 1); if (! mips_split_addresses) ! abort_with_insn (addr, "PRINT_OPERAND_ADDRESS, Spurious LO_SUM"); if (GET_CODE (arg0) != REG) abort_with_insn (addr, ! "PRINT_OPERAND_ADDRESS, LO_SUM with #1 not REG"); fprintf (file, "%%lo("); print_operand_address (file, arg1); *************** print_operand_address (file, addr) *** 5653,5659 **** abort_with_insn (addr, "PRINT_OPERAND_ADDRESS, invalid insn #2"); if (REGNO (reg) == ARG_POINTER_REGNUM) ! abort_with_insn (addr, "Arg pointer not eliminated."); if (TARGET_MIPS16 && GET_CODE (offset) == CONST --- 5779,5785 ---- abort_with_insn (addr, "PRINT_OPERAND_ADDRESS, invalid insn #2"); if (REGNO (reg) == ARG_POINTER_REGNUM) ! abort_with_insn (addr, "arg pointer not eliminated"); if (TARGET_MIPS16 && GET_CODE (offset) == CONST *************** print_operand_address (file, addr) *** 5681,5687 **** --- 5807,5835 ---- break; } } + + /* Target hook for assembling integer objects. It appears that the Irix + 6 assembler can't handle 64-bit decimal integers, so avoid printing + such an integer here. */ + static bool + mips_assemble_integer (x, size, aligned_p) + rtx x; + unsigned int size; + int aligned_p; + { + if ((TARGET_64BIT || TARGET_GAS) && size == 8 && aligned_p) + { + fputs ("\t.dword\t", asm_out_file); + if (HOST_BITS_PER_WIDE_INT < 64 || GET_CODE (x) != CONST_INT) + output_addr_const (asm_out_file, x); + else + print_operand (asm_out_file, x, 'X'); + fputc ('\n', asm_out_file); + return true; + } + return default_assemble_integer (x, size, aligned_p); + } /* If optimizing for the global pointer, keep track of all of the externs, so that at the end of the file, we can emit the appropriate .extern *************** mips_output_external (file, decl, name) *** 5741,5747 **** #ifdef ASM_OUTPUT_UNDEF_FUNCTION int mips_output_external_libcall (file, name) ! FILE *file; const char *name; { register struct extern_list *p; --- 5889,5895 ---- #ifdef ASM_OUTPUT_UNDEF_FUNCTION int mips_output_external_libcall (file, name) ! FILE *file ATTRIBUTE_UNUSED; const char *name; { register struct extern_list *p; *************** mips_output_external_libcall (file, name *** 5756,5814 **** } #endif - /* Compute a string to use as a temporary file name. */ - - /* On MSDOS, write temp files in current dir - because there's no place else we can expect to use. */ - #if __MSDOS__ - #ifndef P_tmpdir - #define P_tmpdir "./" - #endif - #endif - - static FILE * - mips_make_temp_file () - { - FILE *stream; - const char *base = getenv ("TMPDIR"); - int len; - - if (base == 0) - { - #ifdef P_tmpdir - if (access (P_tmpdir, R_OK | W_OK) == 0) - base = P_tmpdir; - else - #endif - if (access ("/usr/tmp", R_OK | W_OK) == 0) - base = "/usr/tmp/"; - else - base = "/tmp/"; - } - - len = strlen (base); - /* temp_filename is global, so we must use malloc, not alloca. */ - temp_filename = (char *) xmalloc (len + sizeof("/ctXXXXXX")); - strcpy (temp_filename, base); - if (len > 0 && temp_filename[len-1] != '/') - temp_filename[len++] = '/'; - - strcpy (temp_filename + len, "ctXXXXXX"); - mktemp (temp_filename); - - stream = fopen (temp_filename, "w+"); - if (!stream) - fatal_io_error ("can't open %s", temp_filename); - - #ifndef __MSDOS__ - /* In MSDOS, we cannot unlink the temporary file until we are finished using - it. Otherwise, we delete it now, so that it will be gone even if the - compiler happens to crash. */ - unlink (temp_filename); - #endif - return stream; - } - /* Emit a new filename to a stream. If this is MIPS ECOFF, watch out for .file's that start within a function. If we are smuggling stabs, try to put out a MIPS ECOFF file and a stab. */ --- 5904,5909 ---- *************** mips_output_lineno (stream, line) *** 5878,5884 **** LOCAL_LABEL_PREFIX, sym_lineno, ASM_STABN_OP, N_SLINE, line, LOCAL_LABEL_PREFIX, sym_lineno); } - else { fprintf (stream, "\n\t%s.loc\t%d %d\n", --- 5973,5978 ---- *************** mips_output_lineno (stream, line) *** 5889,5894 **** --- 5983,6067 ---- } } + /* Output an ASCII string, in a space-saving way. */ + + void + mips_output_ascii (stream, string_param, len) + FILE *stream; + const char *string_param; + size_t len; + { + size_t i; + int cur_pos = 17; + register const unsigned char *string = + (const unsigned char *)string_param; + + fprintf (stream, "\t.ascii\t\""); + for (i = 0; i < len; i++) + { + register int c = string[i]; + + switch (c) + { + case '\"': + case '\\': + putc ('\\', stream); + putc (c, stream); + cur_pos += 2; + break; + + case TARGET_NEWLINE: + fputs ("\\n", stream); + if (i+1 < len + && (((c = string[i+1]) >= '\040' && c <= '~') + || c == TARGET_TAB)) + cur_pos = 32767; /* break right here */ + else + cur_pos += 2; + break; + + case TARGET_TAB: + fputs ("\\t", stream); + cur_pos += 2; + break; + + case TARGET_FF: + fputs ("\\f", stream); + cur_pos += 2; + break; + + case TARGET_BS: + fputs ("\\b", stream); + cur_pos += 2; + break; + + case TARGET_CR: + fputs ("\\r", stream); + cur_pos += 2; + break; + + default: + if (c >= ' ' && c < 0177) + { + putc (c, stream); + cur_pos++; + } + else + { + fprintf (stream, "\\%03o", c); + cur_pos += 4; + } + } + + if (cur_pos > 72 && i+1 < len) + { + cur_pos = 17; + fprintf (stream, "\"\n\t.ascii\t\""); + } + } + fprintf (stream, "\"\n"); + } + /* If defined, a C statement to be executed just prior to the output of assembler code for INSN, to modify the extracted operands so they will be output differently. *************** mips_asm_file_start (stream) *** 5964,5969 **** --- 6137,6177 ---- if (TARGET_MIPS_AS && optimize && flag_delayed_branch) fprintf (stream, "\t.set\tnobopt\n"); + if (TARGET_GAS) + { + #if defined(OBJECT_FORMAT_ELF) + /* Generate a special section to describe the ABI switches used to + produce the resultant binary. This used to be done by the assembler + setting bits in the ELF header's flags field, but we have run out of + bits. GDB needs this information in order to be able to correctly + debug these binaries. See the function mips_gdbarch_init() in + gdb/mips-tdep.c. */ + const char * abi_string = NULL; + + switch (mips_abi) + { + case ABI_32: abi_string = "abi32"; break; + case ABI_N32: abi_string = "abiN32"; break; + case ABI_64: abi_string = "abi64"; break; + case ABI_O64: abi_string = "abiO64"; break; + case ABI_EABI: abi_string = TARGET_64BIT ? "eabi64" : "eabi32"; break; + case ABI_MEABI:abi_string = TARGET_64BIT ? "meabi64" : "meabi32"; break; + default: + abort (); + } + /* Note - we use fprintf directly rather than called named_section() + because in this way we can avoid creating an allocated section. We + do not want this section to take up any space in the running + executable. */ + fprintf (stream, "\t.section .mdebug.%s\n", abi_string); + + /* Restore the default section. */ + fprintf (stream, "\t.previous\n"); + #endif + } + + + /* Generate the pseudo ops that System V.4 wants. */ #ifndef ABICALLS_ASM_OP #define ABICALLS_ASM_OP "\t.abicalls" *************** mips_asm_file_start (stream) *** 5975,5999 **** if (TARGET_MIPS16) fprintf (stream, "\t.set\tmips16\n"); - /* Start a section, so that the first .popsection directive is guaranteed - to have a previously defined section to pop back to. */ - if (mips_abi != ABI_32 && mips_abi != ABI_O64 && mips_abi != ABI_EABI) - fprintf (stream, "\t.section\t.text\n"); - /* This code exists so that we can put all externs before all symbol references. This is necessary for the MIPS assembler's global pointer optimizations to work. */ ! if (TARGET_FILE_SWITCHING && ! TARGET_MIPS16) { asm_out_data_file = stream; ! asm_out_text_file = mips_make_temp_file (); } - else asm_out_data_file = asm_out_text_file = stream; if (flag_verbose_asm) ! fprintf (stream, "\n%s -G value = %d, Apu = %s, ISA = %d\n", ASM_COMMENT_START, mips_section_threshold, mips_arch_string, mips_isa); } --- 6183,6201 ---- if (TARGET_MIPS16) fprintf (stream, "\t.set\tmips16\n"); /* This code exists so that we can put all externs before all symbol references. This is necessary for the MIPS assembler's global pointer optimizations to work. */ ! if (TARGET_FILE_SWITCHING) { asm_out_data_file = stream; ! asm_out_text_file = tmpfile (); } else asm_out_data_file = asm_out_text_file = stream; if (flag_verbose_asm) ! fprintf (stream, "\n%s -G value = %d, Arch = %s, ISA = %d\n", ASM_COMMENT_START, mips_section_threshold, mips_arch_string, mips_isa); } *************** void *** 6007,6016 **** mips_asm_file_end (file) FILE *file; { - char buffer[8192]; tree name_tree; struct extern_list *p; - int len; if (HALF_PIC_P ()) { --- 6209,6216 ---- *************** mips_asm_file_end (file) *** 6043,6069 **** } } ! if (TARGET_FILE_SWITCHING && ! TARGET_MIPS16) { fprintf (file, "\n\t.text\n"); ! rewind (asm_out_text_file); ! if (ferror (asm_out_text_file)) ! fatal_io_error ("can't rewind %s", temp_filename); ! while ((len = fread (buffer, 1, sizeof (buffer), asm_out_text_file)) > 0) ! if ((int) fwrite (buffer, 1, len, file) != len) ! fatal_io_error ("can't write to %s", asm_file_name); ! if (len < 0) ! fatal_io_error ("can't read from %s", temp_filename); ! if (fclose (asm_out_text_file) != 0) ! fatal_io_error ("can't close %s", temp_filename); ! #ifdef __MSDOS__ ! unlink (temp_filename); ! #endif ! } } /* Emit either a label, .comm, or .lcomm directive, and mark that the symbol --- 6243,6274 ---- } } ! if (TARGET_FILE_SWITCHING) { fprintf (file, "\n\t.text\n"); ! copy_file_data (file, asm_out_text_file); ! } ! } ! static void ! copy_file_data (to, from) ! FILE *to, *from; ! { ! char buffer[8192]; ! size_t len; ! rewind (from); ! if (ferror (from)) ! fatal_io_error ("can't rewind temp file"); ! while ((len = fread (buffer, 1, sizeof (buffer), from)) > 0) ! if (fwrite (buffer, 1, len, to) != len) ! fatal_io_error ("can't write to output file"); ! if (ferror (from)) ! fatal_io_error ("can't read from temp file"); ! if (fclose (from)) ! fatal_io_error ("can't close temp file"); } /* Emit either a label, .comm, or .lcomm directive, and mark that the symbol *************** mips_declare_object (stream, name, init_ *** 6088,6130 **** } } - /* Output a double precision value to the assembler. If both the - host and target are IEEE, emit the values in hex. */ - - void - mips_output_double (stream, value) - FILE *stream; - REAL_VALUE_TYPE value; - { - #ifdef REAL_VALUE_TO_TARGET_DOUBLE - long value_long[2]; - REAL_VALUE_TO_TARGET_DOUBLE (value, value_long); - - fprintf (stream, "\t.word\t0x%08lx\t\t# %.20g\n\t.word\t0x%08lx\n", - value_long[0], value, value_long[1]); - #else - fprintf (stream, "\t.double\t%.20g\n", value); - #endif - } - - /* Output a single precision value to the assembler. If both the - host and target are IEEE, emit the values in hex. */ - - void - mips_output_float (stream, value) - FILE *stream; - REAL_VALUE_TYPE value; - { - #ifdef REAL_VALUE_TO_TARGET_SINGLE - long value_long; - REAL_VALUE_TO_TARGET_SINGLE (value, value_long); - - fprintf (stream, "\t.word\t0x%08lx\t\t# %.12g (float)\n", value_long, value); - #else - fprintf (stream, "\t.float\t%.12g\n", value); - #endif - } - /* Return the bytes needed to compute the frame pointer from the current stack pointer. --- 6293,6298 ---- *************** HOST_WIDE_INT *** 6182,6188 **** compute_frame_size (size) HOST_WIDE_INT size; /* # of var. bytes allocated */ { ! int regno; HOST_WIDE_INT total_size; /* # bytes that the entire frame takes up */ HOST_WIDE_INT var_size; /* # bytes that variables take up */ HOST_WIDE_INT args_size; /* # bytes that outgoing arguments take up */ --- 6350,6356 ---- compute_frame_size (size) HOST_WIDE_INT size; /* # of var. bytes allocated */ { ! unsigned int regno; HOST_WIDE_INT total_size; /* # bytes that the entire frame takes up */ HOST_WIDE_INT var_size; /* # bytes that variables take up */ HOST_WIDE_INT args_size; /* # bytes that outgoing arguments take up */ *************** compute_frame_size (size) *** 6255,6261 **** /* We need to restore these for the handler. */ if (current_function_calls_eh_return) { ! int i; for (i = 0; ; ++i) { regno = EH_RETURN_DATA_REGNO (i); --- 6423,6429 ---- /* We need to restore these for the handler. */ if (current_function_calls_eh_return) { ! unsigned int i; for (i = 0; ; ++i) { regno = EH_RETURN_DATA_REGNO (i); *************** compute_frame_size (size) *** 6279,6285 **** } /* This loop must iterate over the same space as its companion in ! save_restore_regs. */ for (regno = (FP_REG_LAST - fp_inc + 1); regno >= FP_REG_FIRST; regno -= fp_inc) --- 6447,6453 ---- } /* This loop must iterate over the same space as its companion in ! save_restore_insns. */ for (regno = (FP_REG_LAST - fp_inc + 1); regno >= FP_REG_FIRST; regno -= fp_inc) *************** compute_frame_size (size) *** 6301,6307 **** call to mcount. */ if (total_size == extra_size && (mips_abi == ABI_32 || mips_abi == ABI_O64 || mips_abi == ABI_EABI) ! && ! profile_flag) total_size = extra_size = 0; else if (TARGET_ABICALLS) { --- 6469,6475 ---- call to mcount. */ if (total_size == extra_size && (mips_abi == ABI_32 || mips_abi == ABI_O64 || mips_abi == ABI_EABI) ! && ! current_function_profile) total_size = extra_size = 0; else if (TARGET_ABICALLS) { *************** compute_frame_size (size) *** 6382,6387 **** --- 6550,6654 ---- #define BITSET_P(VALUE,BIT) (((VALUE) & (1L << (BIT))) != 0) + /* Emit instructions to load the value (SP + OFFSET) into MIPS_TEMP2_REGNUM + and return an rtl expression for the register. Write the assembly + instructions directly to FILE if it is not null, otherwise emit them as + rtl. + + This function is a subroutine of save_restore_insns. It is used when + OFFSET is too large to add in a single instruction. */ + + static rtx + mips_add_large_offset_to_sp (offset, file) + HOST_WIDE_INT offset; + FILE *file; + { + rtx reg = gen_rtx_REG (Pmode, MIPS_TEMP2_REGNUM); + if (file == 0) + { + rtx offset_rtx = GEN_INT (offset); + + emit_move_insn (reg, offset_rtx); + if (Pmode == DImode) + emit_insn (gen_adddi3 (reg, reg, stack_pointer_rtx)); + else + emit_insn (gen_addsi3 (reg, reg, stack_pointer_rtx)); + } + else + { + fprintf (file, "\tli\t%s,0x%.08lx\t# ", + reg_names[MIPS_TEMP2_REGNUM], (long) offset); + fprintf (file, HOST_WIDE_INT_PRINT_DEC, offset); + fprintf (file, "\n\t%s\t%s,%s,%s\n", + Pmode == DImode ? "daddu" : "addu", + reg_names[MIPS_TEMP2_REGNUM], + reg_names[MIPS_TEMP2_REGNUM], + reg_names[STACK_POINTER_REGNUM]); + } + return reg; + } + + /* Make INSN frame related and note that it performs the frame-related + operation DWARF_PATTERN. */ + + static void + mips_annotate_frame_insn (insn, dwarf_pattern) + rtx insn, dwarf_pattern; + { + RTX_FRAME_RELATED_P (insn) = 1; + REG_NOTES (insn) = alloc_EXPR_LIST (REG_FRAME_RELATED_EXPR, + dwarf_pattern, + REG_NOTES (insn)); + } + + /* Return a frame-related rtx that stores register REGNO at (SP + OFFSET). + The expression should only be used to store single registers. */ + + static rtx + mips_frame_set (mode, regno, offset) + enum machine_mode mode; + int regno; + int offset; + { + rtx address = plus_constant (stack_pointer_rtx, offset); + rtx set = gen_rtx_SET (mode, + gen_rtx_MEM (mode, address), + gen_rtx_REG (mode, regno)); + RTX_FRAME_RELATED_P (set) = 1; + return set; + } + + + /* Emit a move instruction that stores REG in MEM. Make the instruction + frame related and note that it stores REG at (SP + OFFSET). This + function may be asked to store an FPR pair. */ + + static void + mips_emit_frame_related_store (mem, reg, offset) + rtx mem; + rtx reg; + HOST_WIDE_INT offset; + { + rtx dwarf_expr; + + if (GET_MODE (reg) == DFmode && ! TARGET_FLOAT64) + { + /* Two registers are being stored, so the frame-related expression + must be a PARALLEL rtx with one SET for each register. The + higher numbered register is stored in the lower address on + big-endian targets. */ + int regno1 = TARGET_BIG_ENDIAN ? REGNO (reg) + 1 : REGNO (reg); + int regno2 = TARGET_BIG_ENDIAN ? REGNO (reg) : REGNO (reg) + 1; + rtx set1 = mips_frame_set (SFmode, regno1, offset); + rtx set2 = mips_frame_set (SFmode, regno2, offset + UNITS_PER_FPREG); + dwarf_expr = gen_rtx_PARALLEL (VOIDmode, gen_rtvec (2, set1, set2)); + } + else + dwarf_expr = mips_frame_set (GET_MODE (reg), REGNO (reg), offset); + + mips_annotate_frame_insn (emit_move_insn (mem, reg), dwarf_expr); + } + static void save_restore_insns (store_p, large_reg, large_offset, file) int store_p; /* true if this is prologue */ *************** save_restore_insns (store_p, large_reg, *** 6408,6414 **** if (! store_p && TARGET_ABICALLS && (mips_abi == ABI_32 || mips_abi == ABI_O64)) ! mask &= ~(1 << (PIC_OFFSET_TABLE_REGNUM - GP_REG_FIRST)); if (mask == 0 && fmask == 0) return; --- 6675,6681 ---- if (! store_p && TARGET_ABICALLS && (mips_abi == ABI_32 || mips_abi == ABI_O64)) ! mask &= ~(1L << (PIC_OFFSET_TABLE_REGNUM - GP_REG_FIRST)); if (mask == 0 && fmask == 0) return; *************** save_restore_insns (store_p, large_reg, *** 6434,6440 **** if (gp_offset < 0 || end_offset < 0) internal_error ! ("gp_offset (%ld) or end_offset (%ld) is less than zero.", (long) gp_offset, (long) end_offset); /* If we see a large frame in mips16 mode, we save the registers --- 6701,6707 ---- if (gp_offset < 0 || end_offset < 0) internal_error ! ("gp_offset (%ld) or end_offset (%ld) is less than zero", (long) gp_offset, (long) end_offset); /* If we see a large frame in mips16 mode, we save the registers *************** save_restore_insns (store_p, large_reg, *** 6459,6466 **** else insn = emit_insn (gen_addsi3 (base_reg_rtx, large_reg, stack_pointer_rtx)); - if (store_p) - RTX_FRAME_RELATED_P (insn) = 1; } else fprintf (file, "\t%s\t%s,%s,%s\n", --- 6726,6731 ---- *************** save_restore_insns (store_p, large_reg, *** 6469,6528 **** reg_names[REGNO (large_reg)], reg_names[STACK_POINTER_REGNUM]); } - else { - base_reg_rtx = gen_rtx_REG (Pmode, MIPS_TEMP2_REGNUM); base_offset = gp_offset; ! if (file == 0) ! { ! rtx gp_offset_rtx = GEN_INT (gp_offset); ! ! /* Instruction splitting doesn't preserve the RTX_FRAME_RELATED_P ! bit, so make sure that we don't emit anything that can be ! split. */ ! /* ??? There is no DImode ori immediate pattern, so we can only ! do this for 32 bit code. */ ! if (large_int (gp_offset_rtx, GET_MODE (gp_offset_rtx)) ! && GET_MODE (base_reg_rtx) == SImode) ! { ! insn = emit_move_insn (base_reg_rtx, ! GEN_INT (gp_offset & 0xffff0000)); ! if (store_p) ! RTX_FRAME_RELATED_P (insn) = 1; ! insn ! = emit_insn (gen_iorsi3 (base_reg_rtx, base_reg_rtx, ! GEN_INT (gp_offset & 0x0000ffff))); ! if (store_p) ! RTX_FRAME_RELATED_P (insn) = 1; ! } ! else ! { ! insn = emit_move_insn (base_reg_rtx, gp_offset_rtx); ! if (store_p) ! RTX_FRAME_RELATED_P (insn) = 1; ! } ! ! if (Pmode == DImode) ! insn = emit_insn (gen_adddi3 (base_reg_rtx, base_reg_rtx, ! stack_pointer_rtx)); ! else ! insn = emit_insn (gen_addsi3 (base_reg_rtx, base_reg_rtx, ! stack_pointer_rtx)); ! if (store_p) ! RTX_FRAME_RELATED_P (insn) = 1; ! } ! else ! { ! fprintf (file, "\tli\t%s,0x%.08lx\t# ", ! reg_names[MIPS_TEMP2_REGNUM], (long) base_offset); ! fprintf (file, HOST_WIDE_INT_PRINT_DEC, base_offset); ! fprintf (file, "\n\t%s\t%s,%s,%s\n", ! Pmode == DImode ? "daddu" : "addu", ! reg_names[MIPS_TEMP2_REGNUM], ! reg_names[MIPS_TEMP2_REGNUM], ! reg_names[STACK_POINTER_REGNUM]); ! } } /* When we restore the registers in MIPS16 mode, then if we are --- 6734,6743 ---- reg_names[REGNO (large_reg)], reg_names[STACK_POINTER_REGNUM]); } else { base_offset = gp_offset; ! base_reg_rtx = mips_add_large_offset_to_sp (base_offset, file); } /* When we restore the registers in MIPS16 mode, then if we are *************** save_restore_insns (store_p, large_reg, *** 6554,6560 **** /* The mips16 does not have an instruction to load $31, so we load $7 instead, and work things out ! in the caller. */ if (TARGET_MIPS16 && ! store_p && regno == GP_REG_FIRST + 31) reg_rtx = gen_rtx (REG, gpr_mode, GP_REG_FIRST + 7); /* The mips16 sometimes needs to save $18. */ --- 6769,6775 ---- /* The mips16 does not have an instruction to load $31, so we load $7 instead, and work things out ! in mips_expand_epilogue. */ if (TARGET_MIPS16 && ! store_p && regno == GP_REG_FIRST + 31) reg_rtx = gen_rtx (REG, gpr_mode, GP_REG_FIRST + 7); /* The mips16 sometimes needs to save $18. */ *************** save_restore_insns (store_p, large_reg, *** 6575,6584 **** reg_rtx = gen_rtx (REG, gpr_mode, regno); if (store_p) ! { ! insn = emit_move_insn (mem_rtx, reg_rtx); ! RTX_FRAME_RELATED_P (insn) = 1; ! } else { emit_move_insn (reg_rtx, mem_rtx); --- 6790,6796 ---- reg_rtx = gen_rtx (REG, gpr_mode, regno); if (store_p) ! mips_emit_frame_related_store (mem_rtx, reg_rtx, gp_offset); else { emit_move_insn (reg_rtx, mem_rtx); *************** save_restore_insns (store_p, large_reg, *** 6594,6604 **** int r = regno; /* The mips16 does not have an instruction to ! load $31, so we load $7 instead, and work ! things out in the caller. */ if (TARGET_MIPS16 && ! store_p && r == GP_REG_FIRST + 31) r = GP_REG_FIRST + 7; - /* The mips16 sometimes needs to save $18. */ if (TARGET_MIPS16 && regno != GP_REG_FIRST + 31 --- 6806,6815 ---- int r = regno; /* The mips16 does not have an instruction to ! load $31, so we load $7 instead, and work ! things out in the caller. */ if (TARGET_MIPS16 && ! store_p && r == GP_REG_FIRST + 31) r = GP_REG_FIRST + 7; /* The mips16 sometimes needs to save $18. */ if (TARGET_MIPS16 && regno != GP_REG_FIRST + 31 *************** save_restore_insns (store_p, large_reg, *** 6630,6639 **** } gp_offset -= GET_MODE_SIZE (gpr_mode); } ! /* If the restore is being supressed, still take into account the offset at which it is stored. */ ! else if (BITSET_P (real_mask, regno - GP_REG_FIRST)) ! { gp_offset -= GET_MODE_SIZE (gpr_mode); } } --- 6841,6850 ---- } gp_offset -= GET_MODE_SIZE (gpr_mode); } ! /* If the restore is being supressed, still take into account the offset at which it is stored. */ ! else if (BITSET_P (real_mask, regno - GP_REG_FIRST)) ! { gp_offset -= GET_MODE_SIZE (gpr_mode); } } *************** save_restore_insns (store_p, large_reg, *** 6652,6658 **** if (fp_offset < 0 || end_offset < 0) internal_error ! ("fp_offset (%ld) or end_offset (%ld) is less than zero.", (long) fp_offset, (long) end_offset); else if (fp_offset < 32768) --- 6863,6869 ---- if (fp_offset < 0 || end_offset < 0) internal_error ! ("fp_offset (%ld) or end_offset (%ld) is less than zero", (long) fp_offset, (long) end_offset); else if (fp_offset < 32768) *************** save_restore_insns (store_p, large_reg, *** 6677,6684 **** else insn = emit_insn (gen_addsi3 (base_reg_rtx, large_reg, stack_pointer_rtx)); - if (store_p) - RTX_FRAME_RELATED_P (insn) = 1; } else --- 6888,6893 ---- *************** save_restore_insns (store_p, large_reg, *** 6688,6748 **** reg_names[REGNO (large_reg)], reg_names[STACK_POINTER_REGNUM]); } - else { - base_reg_rtx = gen_rtx_REG (Pmode, MIPS_TEMP2_REGNUM); base_offset = fp_offset; ! if (file == 0) ! { ! rtx fp_offset_rtx = GEN_INT (fp_offset); ! ! /* Instruction splitting doesn't preserve the RTX_FRAME_RELATED_P ! bit, so make sure that we don't emit anything that can be ! split. */ ! /* ??? There is no DImode ori immediate pattern, so we can only ! do this for 32 bit code. */ ! if (large_int (fp_offset_rtx, GET_MODE (fp_offset_rtx)) ! && GET_MODE (base_reg_rtx) == SImode) ! { ! insn = emit_move_insn (base_reg_rtx, ! GEN_INT (fp_offset & 0xffff0000)); ! if (store_p) ! RTX_FRAME_RELATED_P (insn) = 1; ! insn = emit_insn (gen_iorsi3 (base_reg_rtx, base_reg_rtx, ! GEN_INT (fp_offset & 0x0000ffff))); ! if (store_p) ! RTX_FRAME_RELATED_P (insn) = 1; ! } ! else ! { ! insn = emit_move_insn (base_reg_rtx, fp_offset_rtx); ! if (store_p) ! RTX_FRAME_RELATED_P (insn) = 1; ! } ! ! if (store_p) ! RTX_FRAME_RELATED_P (insn) = 1; ! if (Pmode == DImode) ! insn = emit_insn (gen_adddi3 (base_reg_rtx, base_reg_rtx, ! stack_pointer_rtx)); ! else ! insn = emit_insn (gen_addsi3 (base_reg_rtx, base_reg_rtx, ! stack_pointer_rtx)); ! if (store_p) ! RTX_FRAME_RELATED_P (insn) = 1; ! } ! else ! { ! fprintf (file, "\tli\t%s,0x%.08lx\t# ", ! reg_names[MIPS_TEMP2_REGNUM], (long) base_offset); ! fprintf (file, HOST_WIDE_INT_PRINT_DEC, base_offset); ! fprintf (file, "\n\t%s\t%s,%s,%s\n", ! Pmode == DImode ? "daddu" : "addu", ! reg_names[MIPS_TEMP2_REGNUM], ! reg_names[MIPS_TEMP2_REGNUM], ! reg_names[STACK_POINTER_REGNUM]); ! } } /* This loop must iterate over the same space as its companion in --- 6897,6906 ---- reg_names[REGNO (large_reg)], reg_names[STACK_POINTER_REGNUM]); } else { base_offset = fp_offset; ! base_reg_rtx = mips_add_large_offset_to_sp (fp_offset, file); } /* This loop must iterate over the same space as its companion in *************** save_restore_insns (store_p, large_reg, *** 6765,6774 **** RTX_UNCHANGING_P (mem_rtx) = 1; if (store_p) ! { ! insn = emit_move_insn (mem_rtx, reg_rtx); ! RTX_FRAME_RELATED_P (insn) = 1; ! } else emit_move_insn (reg_rtx, mem_rtx); } --- 6923,6929 ---- RTX_UNCHANGING_P (mem_rtx) = 1; if (store_p) ! mips_emit_frame_related_store (mem_rtx, reg_rtx, fp_offset); else emit_move_insn (reg_rtx, mem_rtx); } *************** save_restore_insns (store_p, large_reg, *** 6791,6805 **** /* Set up the stack and frame (if desired) for the function. */ ! void ! function_prologue (file, size) FILE *file; HOST_WIDE_INT size ATTRIBUTE_UNUSED; { #ifndef FUNCTION_NAME_ALREADY_DECLARED const char *fnname; #endif ! long tsize = current_frame_info.total_size; ASM_OUTPUT_SOURCE_FILENAME (file, DECL_SOURCE_FILE (current_function_decl)); --- 6946,6960 ---- /* Set up the stack and frame (if desired) for the function. */ ! static void ! mips_output_function_prologue (file, size) FILE *file; HOST_WIDE_INT size ATTRIBUTE_UNUSED; { #ifndef FUNCTION_NAME_ALREADY_DECLARED const char *fnname; #endif ! HOST_WIDE_INT tsize = current_frame_info.total_size; ASM_OUTPUT_SOURCE_FILENAME (file, DECL_SOURCE_FILE (current_function_decl)); *************** function_prologue (file, size) *** 6843,6851 **** (reg_names[(frame_pointer_needed) ? HARD_FRAME_POINTER_REGNUM : STACK_POINTER_REGNUM]), ((frame_pointer_needed && TARGET_MIPS16) ! ? (tsize - current_function_outgoing_args_size) ! : tsize), ! reg_names[31 + GP_REG_FIRST], current_frame_info.var_size, current_frame_info.num_gp, current_frame_info.num_fp, --- 6998,7006 ---- (reg_names[(frame_pointer_needed) ? HARD_FRAME_POINTER_REGNUM : STACK_POINTER_REGNUM]), ((frame_pointer_needed && TARGET_MIPS16) ! ? ((long) tsize - current_function_outgoing_args_size) ! : (long) tsize), ! reg_names[GP_REG_FIRST + 31], current_frame_info.var_size, current_frame_info.num_gp, current_frame_info.num_fp, *************** function_prologue (file, size) *** 6861,6867 **** /* Require: OLD_SP == *FRAMEREG + FRAMESIZE => can find old_sp from nominated FP reg. ! HIGHEST_GP_SAVED == *FRAMEREG + FRAMESIZE + GPOFFSET => can find saved regs. */ } if (mips_entry && ! mips_can_use_return_insn ()) --- 7016,7022 ---- /* Require: OLD_SP == *FRAMEREG + FRAMESIZE => can find old_sp from nominated FP reg. ! HIGHEST_GP_SAVED == *FRAMEREG + FRAMESIZE + GPOFFSET => can find saved regs. */ } if (mips_entry && ! mips_can_use_return_insn ()) *************** function_prologue (file, size) *** 6922,6932 **** || GET_CODE (offset) != CONST_INT) continue; if (REGNO (base) == (unsigned) STACK_POINTER_REGNUM ! && (unsigned HOST_WIDE_INT) INTVAL (offset) ! == tsize + (REGNO (src) - 4) * UNITS_PER_WORD) ; else if (REGNO (base) == (unsigned) HARD_FRAME_POINTER_REGNUM ! && ((unsigned HOST_WIDE_INT) INTVAL (offset) == (tsize + (REGNO (src) - 4) * UNITS_PER_WORD - current_function_outgoing_args_size))) --- 7077,7086 ---- || GET_CODE (offset) != CONST_INT) continue; if (REGNO (base) == (unsigned) STACK_POINTER_REGNUM ! && INTVAL (offset) == tsize + (REGNO (src) - 4) * UNITS_PER_WORD) ; else if (REGNO (base) == (unsigned) HARD_FRAME_POINTER_REGNUM ! && (INTVAL (offset) == (tsize + (REGNO (src) - 4) * UNITS_PER_WORD - current_function_outgoing_args_size))) *************** function_prologue (file, size) *** 6990,6996 **** { fprintf (file, "\t%s\t%s,%s,%ld\n", (Pmode == DImode ? "dsubu" : "subu"), ! sp_str, sp_str, tsize); fprintf (file, "\t.cprestore %ld\n", current_frame_info.args_size); } --- 7144,7150 ---- { fprintf (file, "\t%s\t%s,%s,%ld\n", (Pmode == DImode ? "dsubu" : "subu"), ! sp_str, sp_str, (long) tsize); fprintf (file, "\t.cprestore %ld\n", current_frame_info.args_size); } *************** mips_expand_prologue () *** 7039,7045 **** the varargs special argument, and treat it as part of the variable arguments. ! This is only needed if store_args_on_stack is true. */ INIT_CUMULATIVE_ARGS (args_so_far, fntype, NULL_RTX, 0); regno = GP_ARG_FIRST; --- 7193,7199 ---- the varargs special argument, and treat it as part of the variable arguments. ! This is only needed if store_args_on_stack is true. */ INIT_CUMULATIVE_ARGS (args_so_far, fntype, NULL_RTX, 0); regno = GP_ARG_FIRST; *************** mips_expand_prologue () *** 7115,7121 **** pattern = RTVEC_ELT (adjust, i); if (GET_CODE (pattern) != SET || GET_CODE (SET_SRC (pattern)) != ASHIFT) ! abort_with_insn (pattern, "Insn is not a shift"); PUT_CODE (SET_SRC (pattern), ASHIFTRT); insn = emit_insn (pattern); --- 7269,7275 ---- pattern = RTVEC_ELT (adjust, i); if (GET_CODE (pattern) != SET || GET_CODE (SET_SRC (pattern)) != ASHIFT) ! abort_with_insn (pattern, "insn is not a shift"); PUT_CODE (SET_SRC (pattern), ASHIFTRT); insn = emit_insn (pattern); *************** mips_expand_prologue () *** 7142,7148 **** int offset = (regno - GP_ARG_FIRST) * UNITS_PER_WORD; rtx ptr = stack_pointer_rtx; ! /* If we are doing svr4-abi, sp has already been decremented by tsize. */ if (TARGET_ABICALLS) offset += tsize; --- 7296,7302 ---- int offset = (regno - GP_ARG_FIRST) * UNITS_PER_WORD; rtx ptr = stack_pointer_rtx; ! /* If we are doing svr4-abi, sp has already been decremented by tsize. */ if (TARGET_ABICALLS) offset += tsize; *************** mips_expand_prologue () *** 7244,7287 **** if ((!TARGET_ABICALLS || (mips_abi != ABI_32 && mips_abi != ABI_O64)) && (!TARGET_MIPS16 || tsize <= 32767)) { ! rtx insn; if (tsize > 32767) { ! tmp_rtx = gen_rtx (REG, Pmode, MIPS_TEMP1_REGNUM); ! ! /* Instruction splitting doesn't preserve the RTX_FRAME_RELATED_P ! bit, so make sure that we don't emit anything that can be ! split. */ ! /* ??? There is no DImode ori immediate pattern, so we can only ! do this for 32 bit code. */ ! if (large_int (tsize_rtx, GET_MODE (tsize_rtx)) ! && GET_MODE (tmp_rtx) == SImode) ! { ! insn = emit_move_insn (tmp_rtx, ! GEN_INT (tsize & 0xffff0000)); ! RTX_FRAME_RELATED_P (insn) = 1; ! insn = emit_insn (gen_iorsi3 (tmp_rtx, tmp_rtx, ! GEN_INT (tsize & 0x0000ffff))); ! RTX_FRAME_RELATED_P (insn) = 1; ! } ! else ! { ! insn = emit_move_insn (tmp_rtx, tsize_rtx); ! RTX_FRAME_RELATED_P (insn) = 1; ! } ! ! tsize_rtx = tmp_rtx; } if (Pmode == DImode) insn = emit_insn (gen_subdi3 (stack_pointer_rtx, stack_pointer_rtx, ! tsize_rtx)); else insn = emit_insn (gen_subsi3 (stack_pointer_rtx, stack_pointer_rtx, ! tsize_rtx)); ! RTX_FRAME_RELATED_P (insn) = 1; } if (! mips_entry) --- 7398,7425 ---- if ((!TARGET_ABICALLS || (mips_abi != ABI_32 && mips_abi != ABI_O64)) && (!TARGET_MIPS16 || tsize <= 32767)) { ! rtx adjustment_rtx, insn, dwarf_pattern; if (tsize > 32767) { ! adjustment_rtx = gen_rtx (REG, Pmode, MIPS_TEMP1_REGNUM); ! emit_move_insn (adjustment_rtx, tsize_rtx); } + else + adjustment_rtx = tsize_rtx; if (Pmode == DImode) insn = emit_insn (gen_subdi3 (stack_pointer_rtx, stack_pointer_rtx, ! adjustment_rtx)); else insn = emit_insn (gen_subsi3 (stack_pointer_rtx, stack_pointer_rtx, ! adjustment_rtx)); ! dwarf_pattern = gen_rtx_SET (Pmode, stack_pointer_rtx, ! plus_constant (stack_pointer_rtx, ! -tsize)); ! ! mips_annotate_frame_insn (insn, dwarf_pattern); } if (! mips_entry) *************** mips_expand_prologue () *** 7371,7392 **** /* If we are profiling, make sure no instructions are scheduled before the call to mcount. */ ! if (profile_flag || profile_block_flag) emit_insn (gen_blockage ()); } /* Do any necessary cleanup after a function to restore stack, frame, ! and regs. */ ! #define RA_MASK 0x80000000L /* 1 << 31 */ #define PIC_OFFSET_TABLE_MASK (1 << (PIC_OFFSET_TABLE_REGNUM - GP_REG_FIRST)) ! void ! function_epilogue (file, size) FILE *file ATTRIBUTE_UNUSED; HOST_WIDE_INT size ATTRIBUTE_UNUSED; { ! const char *fnname; #ifndef FUNCTION_NAME_ALREADY_DECLARED /* Get the function name the same way that toplev.c does before calling --- 7509,7530 ---- /* If we are profiling, make sure no instructions are scheduled before the call to mcount. */ ! if (current_function_profile) emit_insn (gen_blockage ()); } /* Do any necessary cleanup after a function to restore stack, frame, ! and regs. */ ! #define RA_MASK BITMASK_HIGH /* 1 << 31 */ #define PIC_OFFSET_TABLE_MASK (1 << (PIC_OFFSET_TABLE_REGNUM - GP_REG_FIRST)) ! static void ! mips_output_function_epilogue (file, size) FILE *file ATTRIBUTE_UNUSED; HOST_WIDE_INT size ATTRIBUTE_UNUSED; { ! const char *fnname = ""; /* FIXME: Correct initialisation? */ #ifndef FUNCTION_NAME_ALREADY_DECLARED /* Get the function name the same way that toplev.c does before calling *************** function_epilogue (file, size) *** 7469,7477 **** /* Restore the output file if optimizing the GP (optimizing the GP causes the text to be diverted to a tempfile, so that data decls come before references to the data). */ ! ! if (TARGET_GP_OPT && ! TARGET_MIPS16 && ! TARGET_GAS) ! asm_out_file = asm_out_data_file; } /* Expand the epilogue into a bunch of separate insns. */ --- 7607,7617 ---- /* Restore the output file if optimizing the GP (optimizing the GP causes the text to be diverted to a tempfile, so that data decls come before references to the data). */ ! if (TARGET_FILE_SWITCHING) ! { ! asm_out_file = asm_out_data_file; ! data_section (); ! } } /* Expand the epilogue into a bunch of separate insns. */ *************** mips_expand_epilogue () *** 7515,7521 **** { tsize -= current_function_outgoing_args_size; ! /* If we have a large frame, it's easier to add to $17 than to $sp, since the mips16 has no instruction to add a register to $sp. */ if (orig_tsize > 32767) --- 7655,7661 ---- { tsize -= current_function_outgoing_args_size; ! /* If we have a large frame, it's easier to add to $6 than to $sp, since the mips16 has no instruction to add a register to $sp. */ if (orig_tsize > 32767) *************** mips_expand_epilogue () *** 7575,7586 **** if (tsize != 0 || current_function_calls_eh_return) { ! if (Pmode == DImode) ! emit_insn (gen_adddi3 (stack_pointer_rtx, stack_pointer_rtx, ! tsize_rtx)); else ! emit_insn (gen_addsi3 (stack_pointer_rtx, stack_pointer_rtx, ! tsize_rtx)); } } --- 7715,7751 ---- if (tsize != 0 || current_function_calls_eh_return) { ! if (!TARGET_MIPS16) ! { ! if (Pmode == DImode) ! emit_insn (gen_adddi3 (stack_pointer_rtx, stack_pointer_rtx, ! tsize_rtx)); ! else ! emit_insn (gen_addsi3 (stack_pointer_rtx, stack_pointer_rtx, ! tsize_rtx)); ! } else ! { ! /* We need to work around not being able to add a register ! to the stack pointer directly. Use register $6 as an ! intermediate step. */ ! ! rtx g6_rtx = gen_rtx (REG, Pmode, GP_REG_FIRST + 6); ! ! if (Pmode == DImode) ! { ! emit_insn (gen_movdi (g6_rtx, stack_pointer_rtx)); ! emit_insn (gen_adddi3 (g6_rtx, g6_rtx, tsize_rtx)); ! emit_insn (gen_movdi (stack_pointer_rtx, g6_rtx)); ! } ! else ! { ! emit_insn (gen_movsi (g6_rtx, stack_pointer_rtx)); ! emit_insn (gen_addsi3 (g6_rtx, g6_rtx, tsize_rtx)); ! emit_insn (gen_movsi (stack_pointer_rtx, g6_rtx)); ! } ! } ! } } *************** mips_can_use_return_insn () *** 7603,7609 **** if (! reload_completed) return 0; ! if (regs_ever_live[31] || profile_flag) return 0; /* In mips16 mode, a function which returns a floating point value --- 7768,7774 ---- if (! reload_completed) return 0; ! if (regs_ever_live[31] || current_function_profile) return 0; /* In mips16 mode, a function which returns a floating point value *************** mips_select_section (decl, reloc) *** 7761,7789 **** } } ! #ifdef MIPS_ABI_DEFAULT ! ! /* Support functions for the 64 bit ABI. */ ! ! /* Return register to use for a function return value with VALTYPE for function ! FUNC. */ rtx ! mips_function_value (valtype, func) tree valtype; tree func ATTRIBUTE_UNUSED; { int reg = GP_RETURN; ! enum machine_mode mode = TYPE_MODE (valtype); ! enum mode_class mclass = GET_MODE_CLASS (mode); ! int unsignedp = TREE_UNSIGNED (valtype); ! /* Since we define PROMOTE_FUNCTION_RETURN, we must promote the mode ! just as PROMOTE_MODE does. */ ! mode = promote_mode (valtype, mode, &unsignedp, 1); ! /* ??? How should we return complex float? */ ! if (mclass == MODE_FLOAT || mclass == MODE_COMPLEX_FLOAT) { if (TARGET_SINGLE_FLOAT && (mclass == MODE_FLOAT --- 7926,7956 ---- } } ! /* Return register to use for a function return value with VALTYPE for ! function FUNC. MODE is used instead of VALTYPE for LIBCALLs. */ rtx ! mips_function_value (valtype, func, mode) tree valtype; tree func ATTRIBUTE_UNUSED; + enum machine_mode mode; { int reg = GP_RETURN; ! enum mode_class mclass; ! int unsignedp = 1; ! if (valtype) ! { ! mode = TYPE_MODE (valtype); ! unsignedp = TREE_UNSIGNED (valtype); ! /* Since we define PROMOTE_FUNCTION_RETURN, we must promote ! the mode just as PROMOTE_MODE does. */ ! mode = promote_mode (valtype, mode, &unsignedp, 1); ! } ! mclass = GET_MODE_CLASS (mode); ! ! if (mclass == MODE_FLOAT) { if (TARGET_SINGLE_FLOAT && (mclass == MODE_FLOAT *************** mips_function_value (valtype, func) *** 7793,7799 **** reg = FP_RETURN; } ! else if (TREE_CODE (valtype) == RECORD_TYPE && mips_abi != ABI_32 && mips_abi != ABI_O64 && mips_abi != ABI_EABI) --- 7960,7993 ---- reg = FP_RETURN; } ! else if (mclass == MODE_COMPLEX_FLOAT) ! { ! if (TARGET_FLOAT64) ! reg = FP_RETURN; ! else if (mode == SCmode) ! { ! /* When FP registers are 32 bits, we can't directly reference ! the odd numbered ones, so let's make a pair of evens. */ ! ! enum machine_mode cmode = GET_MODE_INNER (mode); ! ! return gen_rtx_PARALLEL ! (VOIDmode, ! gen_rtvec (2, ! gen_rtx_EXPR_LIST (VOIDmode, ! gen_rtx_REG (cmode, ! FP_RETURN), ! GEN_INT (0)), ! gen_rtx_EXPR_LIST (VOIDmode, ! gen_rtx_REG (cmode, ! FP_RETURN + 2), ! GEN_INT (4)))); ! } ! else ! reg = FP_RETURN; ! } ! ! else if (valtype && TREE_CODE (valtype) == RECORD_TYPE && mips_abi != ABI_32 && mips_abi != ABI_O64 && mips_abi != ABI_EABI) *************** mips_function_value (valtype, func) *** 7860,7866 **** return gen_rtx_REG (mode, reg); } - #endif /* The implementation of FUNCTION_ARG_PASS_BY_REFERENCE. Return nonzero when an argument must be passed by reference. */ --- 8054,8059 ---- *************** function_arg_pass_by_reference (cum, mod *** 7874,7879 **** --- 8067,8075 ---- { int size; + if (mips_abi == ABI_32 || mips_abi == ABI_O64) + return 0; + /* We must pass by reference if we would be both passing in registers and the stack. This is because any subsequent partial arg would be handled incorrectly in this case. *************** function_arg_pass_by_reference (cum, mod *** 7883,7893 **** to prevent it, or add code to function.c to properly handle the case. */ /* ??? cum can be NULL when called from mips_va_arg. The problem handled here hopefully is not relevant to mips_va_arg. */ ! if (cum && MUST_PASS_IN_STACK (mode, type)) { /* Don't pass the actual CUM to FUNCTION_ARG, because we would get double copies of any offsets generated for small structs ! passed in registers. */ CUMULATIVE_ARGS temp; temp = *cum; if (FUNCTION_ARG (temp, mode, type, named) != 0) --- 8079,8090 ---- to prevent it, or add code to function.c to properly handle the case. */ /* ??? cum can be NULL when called from mips_va_arg. The problem handled here hopefully is not relevant to mips_va_arg. */ ! if (cum && MUST_PASS_IN_STACK (mode, type) ! && mips_abi != ABI_MEABI) { /* Don't pass the actual CUM to FUNCTION_ARG, because we would get double copies of any offsets generated for small structs ! passed in registers. */ CUMULATIVE_ARGS temp; temp = *cum; if (FUNCTION_ARG (temp, mode, type, named) != 0) *************** mips_secondary_reload_class (class, mode *** 7937,7943 **** { while (GET_CODE (x) == SUBREG) { ! off += SUBREG_WORD (x); x = SUBREG_REG (x); } --- 8134,8143 ---- { while (GET_CODE (x) == SUBREG) { ! off += subreg_regno_offset (REGNO (SUBREG_REG (x)), ! GET_MODE (SUBREG_REG (x)), ! SUBREG_BYTE (x), ! GET_MODE (x)); x = SUBREG_REG (x); } *************** build_mips16_call_stub (retval, fnmem, a *** 8637,8643 **** /* We build the stub code by hand. That's the only way we can do it, since we can't generate 32 bit code during a 16 bit ! compilation. */ /* We don't want the assembler to insert any nops here. */ fprintf (asm_out_file, "\t.set\tnoreorder\n"); --- 8837,8843 ---- /* We build the stub code by hand. That's the only way we can do it, since we can't generate 32 bit code during a 16 bit ! compilation. */ /* We don't want the assembler to insert any nops here. */ fprintf (asm_out_file, "\t.set\tnoreorder\n"); *************** machine_dependent_reorg (first) *** 9305,9311 **** { /* If we haven't had a barrier within 0x8000 bytes of a constant reference or we are at the end of the function, ! emit a barrier now. */ rtx label, jump, barrier; --- 9505,9511 ---- { /* If we haven't had a barrier within 0x8000 bytes of a constant reference or we are at the end of the function, ! emit a barrier now. */ rtx label, jump, barrier; *************** mips_adjust_insn_length (insn, length) *** 9387,9393 **** LENGTH is the length (in bytes) of the sequence we are to generate. That tells us whether to generate a simple conditional branch, or a reversed conditional branch around a `jr' instruction. */ ! char * mips_output_conditional_branch (insn, operands, two_operands_p, --- 9587,9593 ---- LENGTH is the length (in bytes) of the sequence we are to generate. That tells us whether to generate a simple conditional branch, or a reversed conditional branch around a `jr' instruction. */ ! const char * mips_output_conditional_branch (insn, operands, two_operands_p, *************** mips_output_conditional_branch (insn, *** 9415,9423 **** operand. */ const char *op2 = (two_operands_p ? ",%z3" : ",%."); /* The operand-printing string for the comparison. */ ! const char *comp = (float_p ? "%F0" : "%C0"); /* The operand-printing string for the inverted comparison. */ ! const char *inverted_comp = (float_p ? "%W0" : "%N0"); /* The MIPS processors (for levels of the ISA at least two), have "likely" variants of each branch instruction. These instructions --- 9615,9623 ---- operand. */ const char *op2 = (two_operands_p ? ",%z3" : ",%."); /* The operand-printing string for the comparison. */ ! const char *const comp = (float_p ? "%F0" : "%C0"); /* The operand-printing string for the inverted comparison. */ ! const char *const inverted_comp = (float_p ? "%W0" : "%N0"); /* The MIPS processors (for levels of the ISA at least two), have "likely" variants of each branch instruction. These instructions *************** mips_output_conditional_branch (insn, *** 9450,9456 **** break; case LTU: ! /* A condition which will always be false. */ code = NE; op1 = "%."; break; --- 9650,9656 ---- break; case LTU: ! /* A condition which will always be false. */ code = NE; op1 = "%."; break; *************** mips_output_conditional_branch (insn, *** 9504,9551 **** .set macro .set reorder l: - */ ! rtx orig_target; rtx target = gen_label_rtx (); ! output_asm_insn ("%(%<", NULL); ! orig_target = operands[1]; ! operands[1] = target; ! /* Generate the reversed comparision. This takes four bytes. */ if (float_p) ! sprintf (buffer, "%%*b%s\t%%Z2%s", ! inverted_p ? comp : inverted_comp, ! target); else ! sprintf (buffer, "%%*b%s%s\t%s%s,%s", inverted_p ? comp : inverted_comp, need_z_p ? "z" : "", op1, ! op2, ! target); ! output_asm_insn (buffer, operands); ! operands[1] = orig_target; output_asm_insn ("nop\n\tj\t%1", operands); ! if (length == 16) ! /* The delay slot was unfilled. Since we're inside ! .noreorder, the assembler will not fill in the NOP for ! us, so we must do it ourselves. */ output_asm_insn ("nop", 0); ! else ! { ! /* Output delay slot instruction. */ ! rtx insn = final_sequence; ! final_scan_insn (XVECEXP (insn, 0, 1), asm_out_file, ! optimize, 0, 1); ! INSN_DELETED_P (XVECEXP (insn, 0, 1)) = 1; ! } output_asm_insn ("%>%)", 0); ! ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "L", ! CODE_LABEL_NUMBER (target)); ! return ""; } /* We do not currently use this code. It handles jumps to --- 9704,9748 ---- .set macro .set reorder l: ! */ ! ! rtx orig_target; rtx target = gen_label_rtx (); ! output_asm_insn ("%(%<", 0); ! orig_target = operands[1]; ! operands[1] = target; ! /* Generate the reversed comparison. This takes four ! bytes. */ if (float_p) ! sprintf (buffer, "%%*b%s\t%%Z2%%1", ! inverted_p ? comp : inverted_comp); else ! sprintf (buffer, "%%*b%s%s\t%s%s,%%1", inverted_p ? comp : inverted_comp, need_z_p ? "z" : "", op1, ! op2); ! output_asm_insn (buffer, operands); ! operands[1] = orig_target; output_asm_insn ("nop\n\tj\t%1", operands); ! if (length == 16) output_asm_insn ("nop", 0); ! else ! { ! /* Output delay slot instruction. */ ! rtx insn = final_sequence; ! final_scan_insn (XVECEXP (insn, 0, 1), asm_out_file, ! optimize, 0, 1); ! INSN_DELETED_P (XVECEXP (insn, 0, 1)) = 1; ! } output_asm_insn ("%>%)", 0); ! ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "L", ! CODE_LABEL_NUMBER (target)); ! return ""; } /* We do not currently use this code. It handles jumps to *************** mips_output_conditional_branch (insn, *** 9596,9602 **** anything. */ /* The target of the reversed branch. */ ! const char *target = ((mips_branch_likely || length == 20) ? ".+20" : ".+16"); const char *at_register = mips_reg_names[ASSEMBLER_SCRATCH_REGNUM]; const char *gp_register = mips_reg_names[PIC_OFFSET_TABLE_REGNUM]; --- 9793,9799 ---- anything. */ /* The target of the reversed branch. */ ! const char *const target = ((mips_branch_likely || length == 20) ? ".+20" : ".+16"); const char *at_register = mips_reg_names[ASSEMBLER_SCRATCH_REGNUM]; const char *gp_register = mips_reg_names[PIC_OFFSET_TABLE_REGNUM]; *************** mips_parse_cpu (cpu_string) *** 9684,9737 **** { case '2': if (!strcmp (p, "2000") || !strcmp (p, "2k") || !strcmp (p, "2K")) ! cpu = PROCESSOR_R3000; break; case '3': if (!strcmp (p, "3000") || !strcmp (p, "3k") || !strcmp (p, "3K")) ! cpu = PROCESSOR_R3000; else if (!strcmp (p, "3900")) ! cpu = PROCESSOR_R3900; break; case '4': if (!strcmp (p, "4000") || !strcmp (p, "4k") || !strcmp (p, "4K")) ! cpu = PROCESSOR_R4000; /* The vr4100 is a non-FP ISA III processor with some extra ! instructions. */ else if (!strcmp (p, "4100")) ! cpu = PROCESSOR_R4100; /* The vr4300 is a standard ISA III processor, but with a different ! pipeline. */ else if (!strcmp (p, "4300")) ! cpu = PROCESSOR_R4300; /* The r4400 is exactly the same as the r4000 from the compiler's ! viewpoint. */ else if (!strcmp (p, "4400")) ! cpu = PROCESSOR_R4000; else if (!strcmp (p, "4600")) ! cpu = PROCESSOR_R4600; else if (!strcmp (p, "4650")) ! cpu = PROCESSOR_R4650; case '5': if (!strcmp (p, "5000") || !strcmp (p, "5k") || !strcmp (p, "5K")) ! cpu = PROCESSOR_R5000; break; case '6': if (!strcmp (p, "6000") || !strcmp (p, "6k") || !strcmp (p, "6K")) ! cpu = PROCESSOR_R6000; break; case '8': if (!strcmp (p, "8000")) ! cpu = PROCESSOR_R8000; break; case 'o': if (!strcmp (p, "orion")) ! cpu = PROCESSOR_R4600; break; } --- 9881,9946 ---- { case '2': if (!strcmp (p, "2000") || !strcmp (p, "2k") || !strcmp (p, "2K")) ! cpu = PROCESSOR_R3000; ! else if (!strcmp (p, "20kc") || !strcmp (p, "20Kc") ) ! cpu = PROCESSOR_R20KC; break; case '3': if (!strcmp (p, "3000") || !strcmp (p, "3k") || !strcmp (p, "3K")) ! cpu = PROCESSOR_R3000; else if (!strcmp (p, "3900")) ! cpu = PROCESSOR_R3900; break; case '4': if (!strcmp (p, "4000") || !strcmp (p, "4k") || !strcmp (p, "4K")) ! cpu = PROCESSOR_R4000; /* The vr4100 is a non-FP ISA III processor with some extra ! instructions. */ else if (!strcmp (p, "4100")) ! cpu = PROCESSOR_R4100; /* The vr4300 is a standard ISA III processor, but with a different ! pipeline. */ else if (!strcmp (p, "4300")) ! cpu = PROCESSOR_R4300; /* The r4400 is exactly the same as the r4000 from the compiler's ! viewpoint. */ else if (!strcmp (p, "4400")) ! cpu = PROCESSOR_R4000; else if (!strcmp (p, "4600")) ! cpu = PROCESSOR_R4600; else if (!strcmp (p, "4650")) ! cpu = PROCESSOR_R4650; ! /* The 4kc and 4kp processor cores are the same for ! scheduling purposes; they both implement the MIPS32 ! ISA and only differ in their memory management ! methods. */ ! else if (!strcmp (p, "4kc") || !strcmp (p, "4Kc") ! || !strcmp (p, "4kp") || !strcmp (p, "4Kp") ) ! cpu = PROCESSOR_R4KC; ! break; case '5': if (!strcmp (p, "5000") || !strcmp (p, "5k") || !strcmp (p, "5K")) ! cpu = PROCESSOR_R5000; ! else if (!strcmp (p, "5kc") || !strcmp (p, "5Kc") ) ! cpu = PROCESSOR_R5KC; break; case '6': if (!strcmp (p, "6000") || !strcmp (p, "6k") || !strcmp (p, "6K")) ! cpu = PROCESSOR_R6000; break; case '8': if (!strcmp (p, "8000")) ! cpu = PROCESSOR_R8000; break; case 'o': if (!strcmp (p, "orion")) ! cpu = PROCESSOR_R4600; break; } *************** mips_parse_cpu (cpu_string) *** 9743,9745 **** --- 9952,10216 ---- return cpu; } + + /* Adjust the cost of INSN based on the relationship between INSN that + is dependent on DEP_INSN through the dependence LINK. The default + is to make no adjustment to COST. + + On the MIPS, ignore the cost of anti- and output-dependencies. */ + static int + mips_adjust_cost (insn, link, dep, cost) + rtx insn ATTRIBUTE_UNUSED; + rtx link; + rtx dep ATTRIBUTE_UNUSED; + int cost; + { + if (REG_NOTE_KIND (link) != 0) + return 0; /* Anti or output dependence. */ + return cost; + } + + /* Cover function for UNIQUE_SECTION. */ + + void + mips_unique_section (decl, reloc) + tree decl; + int reloc; + { + int len, size, sec; + const char *name, *prefix; + char *string; + static const char *const prefixes[4][2] = { + { ".text.", ".gnu.linkonce.t." }, + { ".rodata.", ".gnu.linkonce.r." }, + { ".data.", ".gnu.linkonce.d." }, + { ".sdata.", ".gnu.linkonce.s." } + }; + + name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)); + size = int_size_in_bytes (TREE_TYPE (decl)); + + /* Determine the base section we are interested in: + 0=text, 1=rodata, 2=data, 3=sdata, [4=bss]. */ + if (TREE_CODE (decl) == FUNCTION_DECL) + sec = 0; + else if (DECL_INITIAL (decl) == 0 + || DECL_INITIAL (decl) == error_mark_node) + sec = 2; + else if ((TARGET_EMBEDDED_PIC || TARGET_MIPS16) + && TREE_CODE (decl) == STRING_CST + && !flag_writable_strings) + { + /* For embedded position independent code, put constant + strings in the text section, because the data section + is limited to 64K in size. For mips16 code, put + strings in the text section so that a PC relative load + instruction can be used to get their address. */ + sec = 0; + } + else if (TARGET_EMBEDDED_DATA) + { + /* For embedded applications, always put an object in + read-only data if possible, in order to reduce RAM + usage. */ + + if (DECL_READONLY_SECTION (decl, reloc)) + sec = 1; + else if (size > 0 && size <= mips_section_threshold) + sec = 3; + else + sec = 2; + } + else + { + /* For hosted applications, always put an object in + small data if possible, as this gives the best + performance. */ + + if (size > 0 && size <= mips_section_threshold) + sec = 3; + else if (DECL_READONLY_SECTION (decl, reloc)) + sec = 1; + else + sec = 2; + } + + prefix = prefixes[sec][DECL_ONE_ONLY (decl)]; + len = strlen (name) + strlen (prefix); + string = alloca (len + 1); + sprintf (string, "%s%s", prefix, name); + + DECL_SECTION_NAME (decl) = build_string (len, string); + } + + unsigned int + mips_hard_regno_nregs (regno, mode) + int regno; + enum machine_mode mode; + { + if (! FP_REG_P (regno)) + return ((GET_MODE_SIZE (mode) + UNITS_PER_WORD - 1) / UNITS_PER_WORD); + else + return ((GET_MODE_SIZE (mode) + UNITS_PER_FPREG - 1) / UNITS_PER_FPREG); + } + + + #ifdef TARGET_IRIX6 + /* Output assembly to switch to section NAME with attribute FLAGS. */ + + static void + iris6_asm_named_section_1 (name, flags, align) + const char *name; + unsigned int flags; + unsigned int align; + { + unsigned int sh_type, sh_flags, sh_entsize; + + sh_flags = 0; + if (!(flags & SECTION_DEBUG)) + sh_flags |= 2; /* SHF_ALLOC */ + if (flags & SECTION_WRITE) + sh_flags |= 1; /* SHF_WRITE */ + if (flags & SECTION_CODE) + sh_flags |= 4; /* SHF_EXECINSTR */ + if (flags & SECTION_SMALL) + sh_flags |= 0x10000000; /* SHF_MIPS_GPREL */ + if (strcmp (name, ".debug_frame") == 0) + sh_flags |= 0x08000000; /* SHF_MIPS_NOSTRIP */ + if (flags & SECTION_DEBUG) + sh_type = 0x7000001e; /* SHT_MIPS_DWARF */ + else if (flags & SECTION_BSS) + sh_type = 8; /* SHT_NOBITS */ + else + sh_type = 1; /* SHT_PROGBITS */ + + if (flags & SECTION_CODE) + sh_entsize = 4; + else + sh_entsize = 0; + + fprintf (asm_out_file, "\t.section %s,%#x,%#x,%u,%u\n", + name, sh_type, sh_flags, sh_entsize, align); + } + + static void + iris6_asm_named_section (name, flags) + const char *name; + unsigned int flags; + { + if (TARGET_FILE_SWITCHING && (flags & SECTION_CODE)) + asm_out_file = asm_out_text_file; + iris6_asm_named_section_1 (name, flags, 0); + } + + /* In addition to emitting a .align directive, record the maximum + alignment requested for the current section. */ + + struct iris_section_align_entry + { + const char *name; + unsigned int log; + unsigned int flags; + }; + + static htab_t iris_section_align_htab; + static FILE *iris_orig_asm_out_file; + + static int + iris_section_align_entry_eq (p1, p2) + const PTR p1; + const PTR p2; + { + const struct iris_section_align_entry *old = p1; + const char *new = p2; + + return strcmp (old->name, new) == 0; + } + + static hashval_t + iris_section_align_entry_hash (p) + const PTR p; + { + const struct iris_section_align_entry *old = p; + return htab_hash_string (old->name); + } + + void + iris6_asm_output_align (file, log) + FILE *file; + unsigned int log; + { + const char *section = current_section_name (); + struct iris_section_align_entry **slot, *entry; + + if (! section) + abort (); + + slot = (struct iris_section_align_entry **) + htab_find_slot_with_hash (iris_section_align_htab, section, + htab_hash_string (section), INSERT); + entry = *slot; + if (! entry) + { + entry = (struct iris_section_align_entry *) + xmalloc (sizeof (struct iris_section_align_entry)); + *slot = entry; + entry->name = section; + entry->log = log; + entry->flags = current_section_flags (); + } + else if (entry->log < log) + entry->log = log; + + fprintf (file, "\t.align\t%u\n", log); + } + + /* The Iris assembler does not record alignment from .align directives, + but takes it from the first .section directive seen. Play yet more + file switching games so that we can emit a .section directive at the + beginning of the file with the proper alignment attached. */ + + void + iris6_asm_file_start (stream) + FILE *stream; + { + mips_asm_file_start (stream); + + iris_orig_asm_out_file = asm_out_file; + stream = tmpfile (); + asm_out_file = stream; + asm_out_data_file = stream; + if (! TARGET_FILE_SWITCHING) + asm_out_text_file = stream; + + iris_section_align_htab = htab_create (31, iris_section_align_entry_hash, + iris_section_align_entry_eq, NULL); + } + + static int + iris6_section_align_1 (slot, data) + void **slot; + void *data ATTRIBUTE_UNUSED; + { + const struct iris_section_align_entry *entry + = *(const struct iris_section_align_entry **) slot; + + iris6_asm_named_section_1 (entry->name, entry->flags, 1 << entry->log); + return 1; + } + + void + iris6_asm_file_end (stream) + FILE *stream; + { + /* Emit section directives with the proper alignment at the top of the + real output file. */ + asm_out_file = iris_orig_asm_out_file; + htab_traverse (iris_section_align_htab, iris6_section_align_1, NULL); + + /* Copy the data emitted to the temp file to the real output file. */ + copy_file_data (asm_out_file, stream); + + mips_asm_file_end (stream); + } + #endif /* TARGET_IRIX6 */ diff -Nrc3pad gcc-3.0.4/gcc/config/mips/mips.h gcc-3.1/gcc/config/mips/mips.h *** gcc-3.0.4/gcc/config/mips/mips.h Tue Feb 19 23:16:53 2002 --- gcc-3.1/gcc/config/mips/mips.h Fri Apr 26 21:32:14 2002 *************** enum processor_type { *** 67,73 **** PROCESSOR_R4600, PROCESSOR_R4650, PROCESSOR_R5000, ! PROCESSOR_R8000 }; /* Recast the cpu class to be the cpu attribute. */ --- 67,76 ---- PROCESSOR_R4600, PROCESSOR_R4650, PROCESSOR_R5000, ! PROCESSOR_R8000, ! PROCESSOR_R4KC, ! PROCESSOR_R5KC, ! PROCESSOR_R20KC }; /* Recast the cpu class to be the cpu attribute. */ *************** enum processor_type { *** 77,97 **** value at preprocessing time. ABI_32 (original 32, or o32), ABI_N32 (n32), ABI_64 (n64) are all ! defined by SGI. ABI_O64 is o32 extended to work on a 64 bit machine. */ #define ABI_32 0 #define ABI_N32 1 #define ABI_64 2 #define ABI_EABI 3 #define ABI_O64 4 ! #ifndef MIPS_ABI_DEFAULT ! /* We define this away so that there is no extra runtime cost if the target ! doesn't support multiple ABIs. */ ! #define mips_abi ABI_32 ! #else ! extern int mips_abi; ! #endif /* Whether to emit abicalls code sequences or not. */ --- 80,103 ---- value at preprocessing time. ABI_32 (original 32, or o32), ABI_N32 (n32), ABI_64 (n64) are all ! defined by SGI. ABI_O64 is o32 extended to work on a 64 bit machine. */ #define ABI_32 0 #define ABI_N32 1 #define ABI_64 2 #define ABI_EABI 3 #define ABI_O64 4 + /* MEABI is gcc's internal name for MIPS' new EABI (defined by MIPS) + which is not the same as the above EABI (defined by Cygnus, + Greenhills, and Toshiba?). MEABI is not yet complete or published, + but at this point it looks like N32 as far as calling conventions go, + but allows for either 32 or 64 bit registers. ! Currently MIPS is calling their EABI "the" MIPS EABI, and Cygnus' ! EABI the legacy EABI. In the end we may end up calling both ABI's ! EABI but give them different version numbers, but for now I'm going ! with different names. */ ! #define ABI_MEABI 5 /* Whether to emit abicalls code sequences or not. */ *************** enum block_move_type { *** 112,119 **** BLOCK_MOVE_LAST /* generate just the last store */ }; ! extern char mips_reg_names[][8]; /* register names (a0 vs. $4). */ ! extern char mips_print_operand_punct[]; /* print_operand punctuation chars */ extern const char *current_function_file; /* filename current function is in */ extern int num_source_filenames; /* current .file # */ extern int inside_function; /* != 0 if inside of a function */ --- 118,125 ---- BLOCK_MOVE_LAST /* generate just the last store */ }; ! extern char mips_reg_names[][8]; /* register names (a0 vs. $4). */ ! extern char mips_print_operand_punct[256]; /* print_operand punctuation chars */ extern const char *current_function_file; /* filename current function is in */ extern int num_source_filenames; /* current .file # */ extern int inside_function; /* != 0 if inside of a function */ *************** extern const char *mips_abi_string; /* f *** 148,153 **** --- 154,160 ---- extern const char *mips_entry_string; /* for -mentry */ extern const char *mips_no_mips16_string;/* for -mno-mips16 */ extern const char *mips_explicit_type_size_string;/* for -mexplicit-type-size */ + extern const char *mips_cache_flush_func;/* for -mflush-func= and -mno-flush-func */ extern int mips_split_addresses; /* perform high/lo_sum support */ extern int dslots_load_total; /* total # load related delay slots */ extern int dslots_load_filled; /* # filled load delay slots */ *************** extern void sbss_section PARAMS ((void) *** 176,187 **** #define HALF_PIC_NUMBER_REFS 0 #define HALF_PIC_ENCODE(DECL) #define HALF_PIC_DECLARE(NAME) ! #define HALF_PIC_INIT() error ("half-pic init called on systems that don't support it.") #define HALF_PIC_ADDRESS_P(X) 0 #define HALF_PIC_PTR(X) X #define HALF_PIC_FINISH(STREAM) #endif /* Run-time compilation parameters selecting different hardware subsets. */ --- 183,201 ---- #define HALF_PIC_NUMBER_REFS 0 #define HALF_PIC_ENCODE(DECL) #define HALF_PIC_DECLARE(NAME) ! #define HALF_PIC_INIT() error ("half-pic init called on systems that don't support it") #define HALF_PIC_ADDRESS_P(X) 0 #define HALF_PIC_PTR(X) X #define HALF_PIC_FINISH(STREAM) #endif + /* Macros to silence warnings about numbers being signed in traditional + C and unsigned in ISO C when compiled on 32-bit hosts. */ + + #define BITMASK_HIGH (((unsigned long)1) << 31) /* 0x80000000 */ + #define BITMASK_UPPER16 ((unsigned long)0xffff << 16) /* 0xffff0000 */ + #define BITMASK_LOWER16 ((unsigned long)0xffff) /* 0x0000ffff */ + /* Run-time compilation parameters selecting different hardware subsets. */ *************** extern void sbss_section PARAMS ((void) *** 208,228 **** #define MASK_SINGLE_FLOAT 0x00020000 /* Only single precision FPU. */ #define MASK_MAD 0x00040000 /* Generate mad/madu as on 4650. */ #define MASK_4300_MUL_FIX 0x00080000 /* Work-around early Vr4300 CPU bug */ ! #define MASK_MIPS3900 0x00100000 /* like -mips1 only 3900 */ ! #define MASK_MIPS16 0x00200000 /* Generate mips16 code */ #define MASK_NO_CHECK_ZERO_DIV \ ! 0x00400000 /* divide by zero checking */ #define MASK_CHECK_RANGE_DIV \ ! 0x00800000 /* divide result range checking */ #define MASK_UNINIT_CONST_IN_RODATA \ ! 0x01000000 /* Store uninitialized consts in rodata */ /* Debug switches, not documented */ #define MASK_DEBUG 0 /* unused */ #define MASK_DEBUG_A 0 /* don't allow

    Installing GCC: GNU Free Documentation License

    --- 17,23 ---- @ifset gfdlhtml @ifnothtml @comment node-name, next, previous, up ! @node GNU Free Documentation License, Concept Index, Old, Top @end ifnothtml @html

    Installing GCC: GNU Free Documentation License

    diff -Nrc3pad gcc-3.0.4/gcc/doc/include/gcc-common.texi gcc-3.1/gcc/doc/include/gcc-common.texi *** gcc-3.0.4/gcc/doc/include/gcc-common.texi Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/doc/include/gcc-common.texi Mon Dec 17 19:20:00 2001 *************** *** 0 **** --- 1,36 ---- + @c Copyright (C) 2001 Free Software Foundation, Inc. + @c This is part of the GCC manual. + @c For copying conditions, see the file gcc.texi. + + @c Common values used in the GCC manuals: + + @set version-GCC 3.1 + + @c Common macros to support generating man pages: + + @macro gcctabopt{body} + @code{\body\} + @end macro + @macro gccoptlist{body} + @smallexample + \body\ + @end smallexample + @end macro + @c Makeinfo handles the above macro OK, TeX needs manual line breaks; + @c they get lost at some point in handling the macro. But if @macro is + @c used here rather than @alias, it produces double line breaks. + @iftex + @alias gol = * + @end iftex + @ifnottex + @macro gol + @end macro + @end ifnottex + + @c For FSF printing, define FSFPRINT. Also update the ISBNs and last + @c printing dates in gcc.texi and gccint.texi. + @c @set FSFPRINT + @ifset FSFPRINT + @smallbook + @finalout + @end ifset diff -Nrc3pad gcc-3.0.4/gcc/doc/include/gpl.texi gcc-3.1/gcc/doc/include/gpl.texi *** gcc-3.0.4/gcc/doc/include/gpl.texi Wed Nov 14 22:33:40 2001 --- gcc-3.1/gcc/doc/include/gpl.texi Wed Nov 14 00:47:42 2001 *************** patent must be licensed for everyone's f *** 77,83 **** modification follow. @iftex ! @unnumberedsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION @end iftex @ifnottex @center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION --- 77,83 ---- modification follow. @iftex ! @unnumberedsec TERMS AND CONDITIONS FOR COPYING,@*DISTRIBUTION AND MODIFICATION @end iftex @ifnottex @center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION diff -Nrc3pad gcc-3.0.4/gcc/doc/include/texinfo.tex gcc-3.1/gcc/doc/include/texinfo.tex *** gcc-3.0.4/gcc/doc/include/texinfo.tex Wed Jul 4 16:23:07 2001 --- gcc-3.1/gcc/doc/include/texinfo.tex Mon Mar 4 19:07:58 2002 *************** *** 3,12 **** % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % ! \def\texinfoversion{2001-05-24.08} % % Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ! % 2000, 01 Free Software Foundation, Inc. % % This texinfo.tex file is free software; you can redistribute it and/or % modify it under the terms of the GNU General Public License as --- 3,12 ---- % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % ! \def\texinfoversion{2002-03-01.06} % % Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ! % 2000, 01, 02 Free Software Foundation, Inc. % % This texinfo.tex file is free software; you can redistribute it and/or % modify it under the terms of the GNU General Public License as *************** *** 30,43 **** % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: % ftp://ftp.gnu.org/gnu/texinfo.tex ! % (and all GNU mirrors, see http://www.gnu.org/order/ftp.html) ! % ftp://texinfo.org/tex/texinfo.tex ! % ftp://us.ctan.org/macros/texinfo/texinfo.tex ! % (and all CTAN mirrors, finger ctan@us.ctan.org for a list). ! % /home/gd/gnu/doc/texinfo.tex on the GNU machines. % The texinfo.tex in any given Texinfo distribution could well be out % of date, so if that's what you're using, please check. ! % Texinfo has a small home page at http://texinfo.org/. % % Send bug reports to bug-texinfo@gnu.org. Please include including a % complete document in each bug report with which we can reproduce the --- 30,46 ---- % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: % ftp://ftp.gnu.org/gnu/texinfo.tex ! % (and all GNU mirrors, see http://www.gnu.org/order/ftp.html) ! % ftp://texinfo.org/texinfo/texinfo.tex ! % ftp://tug.org/tex/texinfo.tex ! % (and all CTAN mirrors, see http://www.ctan.org), ! % and /home/gd/gnu/doc/texinfo.tex on the GNU machines. ! % % The texinfo.tex in any given Texinfo distribution could well be out % of date, so if that's what you're using, please check. ! % ! % Texinfo has a small home page at http://texinfo.org/ and also ! % http://www.gnu.org/software/texinfo. % % Send bug reports to bug-texinfo@gnu.org. Please include including a % complete document in each bug report with which we can reproduce the *************** *** 51,62 **** % tex foo.texi % tex foo.texi % dvips foo.dvi -o # or whatever, to process the dvi file; this makes foo.ps. ! % The extra runs of TeX get the cross-reference information correct. % Sometimes one run after texindex suffices, and sometimes you need more % than two; texi2dvi does it as many times as necessary. % % It is possible to adapt texinfo.tex for other languages. You can get ! % the existing language-specific files from ftp://ftp.gnu.org/gnu/texinfo/. \message{Loading texinfo [version \texinfoversion]:} --- 54,65 ---- % tex foo.texi % tex foo.texi % dvips foo.dvi -o # or whatever, to process the dvi file; this makes foo.ps. ! % The extra TeX runs get the cross-reference information correct. % Sometimes one run after texindex suffices, and sometimes you need more % than two; texi2dvi does it as many times as necessary. % % It is possible to adapt texinfo.tex for other languages. You can get ! % the existing language-specific files from the full Texinfo distribution. \message{Loading texinfo [version \texinfoversion]:} *************** *** 441,447 **** % environments. --karl, 6may93 %{\advance \baselineskip by -\singlespaceskip %\kern \baselineskip}% ! \setleading \singlespaceskip } %% Simple single-character @ commands --- 444,450 ---- % environments. --karl, 6may93 %{\advance \baselineskip by -\singlespaceskip %\kern \baselineskip}% ! \setleading\singlespaceskip } %% Simple single-character @ commands *************** where each line of input produces a line *** 833,850 **** % \def\asis#1{#1} ! % @math means output in math mode. ! % We don't use $'s directly in the definition of \math because control ! % sequences like \math are expanded when the toc file is written. Then, ! % we read the toc file back, the $'s will be normal characters (as they ! % should be, according to the definition of Texinfo). So we must use a ! % control sequence to switch into and out of math mode. % ! % This isn't quite enough for @math to work properly in indices, but it ! % seems unlikely it will ever be needed there. % ! \let\implicitmath = $ ! \def\math#1{\implicitmath #1\implicitmath} % @bullet and @minus need the same treatment as @math, just above. \def\bullet{\implicitmath\ptexbullet\implicitmath} --- 836,867 ---- % \def\asis#1{#1} ! % @math outputs its argument in math mode. ! % We don't use $'s directly in the definition of \math because we need ! % to set catcodes according to plain TeX first, to allow for subscripts, ! % superscripts, special math chars, etc. ! % ! % @math does not do math typesetting in section titles, index ! % entries, and other such contexts where the catcodes are set before ! % @math gets a chance to work. This could perhaps be fixed, but for now ! % at least we can have real math in the main text, where it's needed most. % ! % ! \let\implicitmath = $%$ font-lock fix % ! % One complication: _ usually means subscripts, but it could also mean ! % an actual _ character, as in @math{@var{some_variable} + 1}. So make ! % _ within @math be active (mathcode "8000), and distinguish by seeing ! % if the current family is \slfam, which is what @var uses. ! % ! {\catcode95 = \active % 95 = _ ! \gdef\mathunderscore{% ! \catcode95=\active ! \def_{\ifnum\fam=\slfam\_\else\sb\fi}% ! }} ! % ! \def\math{\tex\mathcode`\_="8000\mathunderscore \implicitmath\finishmath} ! \def\finishmath#1{#1\implicitmath\Etex} % @bullet and @minus need the same treatment as @math, just above. \def\bullet{\implicitmath\ptexbullet\implicitmath} *************** where each line of input produces a line *** 927,936 **** \def\dopdfimage#1#2#3{% \def\imagewidth{#2}% \def\imageheight{#3}% \ifnum\pdftexversion < 14 ! \pdfimage \else ! \pdfximage \fi \ifx\empty\imagewidth\else width \imagewidth \fi \ifx\empty\imageheight\else height \imageheight \fi --- 944,955 ---- \def\dopdfimage#1#2#3{% \def\imagewidth{#2}% \def\imageheight{#3}% + % without \immediate, pdftex seg faults when the same image is + % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) \ifnum\pdftexversion < 14 ! \immediate\pdfimage \else ! \immediate\pdfximage \fi \ifx\empty\imagewidth\else width \imagewidth \fi \ifx\empty\imageheight\else height \imageheight \fi *************** where each line of input produces a line *** 942,949 **** \ifnum\pdftexversion < 14 \else \pdfrefximage \pdflastximage \fi} ! \def\pdfmkdest#1{\pdfdest name{#1} xyz} ! \def\pdfmkpgn#1{#1@} \let\linkcolor = \Blue % was Cyan, but that seems light? \def\endlink{\Black\pdfendlink} % Adding outlines to PDF; macros for calculating structure of outlines --- 961,968 ---- \ifnum\pdftexversion < 14 \else \pdfrefximage \pdflastximage \fi} ! \def\pdfmkdest#1{{\normalturnoffactive \pdfdest name{#1} xyz}} ! \def\pdfmkpgn#1{#1} \let\linkcolor = \Blue % was Cyan, but that seems light? \def\endlink{\Black\pdfendlink} % Adding outlines to PDF; macros for calculating structure of outlines *************** where each line of input produces a line *** 955,961 **** \expandafter\xdef\csname#1\endcsname{\the\tempnum}} \def\pdfmakeoutlines{{% \openin 1 \jobname.toc ! \ifeof 1\else\bgroup \closein 1 \indexnofonts \def\tt{} --- 974,980 ---- \expandafter\xdef\csname#1\endcsname{\the\tempnum}} \def\pdfmakeoutlines{{% \openin 1 \jobname.toc ! \ifeof 1\else\begingroup \closein 1 \indexnofonts \def\tt{} *************** where each line of input produces a line *** 965,970 **** --- 984,990 ---- \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace % \def\chapentry ##1##2##3{} + \let\appendixentry = \chapentry \def\unnumbchapentry ##1##2{} \def\secentry ##1##2##3##4{\advancenumber{chap##2}} \def\unnumbsecentry ##1##2{} *************** where each line of input produces a line *** 975,980 **** --- 995,1001 ---- \input \jobname.toc \def\chapentry ##1##2##3{% \pdfoutline goto name{\pdfmkpgn{##3}}count-\expnumber{chap##2}{##1}} + \let\appendixentry = \chapentry \def\unnumbchapentry ##1##2{% \pdfoutline goto name{\pdfmkpgn{##2}}{##1}} \def\secentry ##1##2##3##4{% *************** where each line of input produces a line *** 990,996 **** \def\unnumbsubsubsecentry ##1##2{% \pdfoutline goto name{\pdfmkpgn{##2}}{##1}} \input \jobname.toc ! \egroup\fi }} \def\makelinks #1,{% \def\params{#1}\def\E{END}% --- 1011,1017 ---- \def\unnumbsubsubsecentry ##1##2{% \pdfoutline goto name{\pdfmkpgn{##2}}{##1}} \input \jobname.toc ! \endgroup\fi }} \def\makelinks #1,{% \def\params{#1}\def\E{END}% *************** where each line of input produces a line *** 1068,1076 **** \def\makelink{\addtokens{\toksB}% {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} \def\pdflink#1{% ! \startlink attr{/Border [0 0 0]} goto name{\mkpgn{#1}} \linkcolor #1\endlink} - \def\mkpgn#1{#1@} \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} \fi % \ifx\pdfoutput --- 1089,1096 ---- \def\makelink{\addtokens{\toksB}% {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} \def\pdflink#1{% ! \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} \linkcolor #1\endlink} \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} \fi % \ifx\pdfoutput *************** where each line of input produces a line *** 1087,1095 **** % We don't need math for this one. \def\ttsl{\tenttsl} ! % Use Computer Modern fonts at \magstephalf (11pt). ! \newcount\mainmagstep ! \mainmagstep=\magstephalf % Set the font macro #1 to the font named #2, adding on the % specified font prefix (normally `cm'). --- 1107,1132 ---- % We don't need math for this one. \def\ttsl{\tenttsl} ! % Default leading. ! \newdimen\textleading \textleading = 13.2pt ! ! % Set the baselineskip to #1, and the lineskip and strut size ! % correspondingly. There is no deep meaning behind these magic numbers ! % used as factors; they just match (closely enough) what Knuth defined. ! % ! \def\lineskipfactor{.08333} ! \def\strutheightpercent{.70833} ! \def\strutdepthpercent {.29167} ! % ! \def\setleading#1{% ! \normalbaselineskip = #1\relax ! \normallineskip = \lineskipfactor\normalbaselineskip ! \normalbaselines ! \setbox\strutbox =\hbox{% ! \vrule width0pt height\strutheightpercent\baselineskip ! depth \strutdepthpercent \baselineskip ! }% ! } % Set the font macro #1 to the font named #2, adding on the % specified font prefix (normally `cm'). *************** where each line of input produces a line *** 1119,1131 **** \def\scshape{csc} \def\scbshape{csc} \ifx\bigger\relax ! \let\mainmagstep=\magstep1 ! \setfont\textrm\rmshape{12}{1000} ! \setfont\texttt\ttshape{12}{1000} \else ! \setfont\textrm\rmshape{10}{\mainmagstep} ! \setfont\texttt\ttshape{10}{\mainmagstep} \fi % Instead of cmb10, you many want to use cmbx10. % cmbx10 is a prettier font on its own, but cmb10 --- 1156,1171 ---- \def\scshape{csc} \def\scbshape{csc} + \newcount\mainmagstep \ifx\bigger\relax ! % not really supported. ! \let\mainmagstep=\magstep1 ! \setfont\textrm\rmshape{12}{1000} ! \setfont\texttt\ttshape{12}{1000} \else ! \mainmagstep=\magstephalf ! \setfont\textrm\rmshape{10}{\mainmagstep} ! \setfont\texttt\ttshape{10}{\mainmagstep} \fi % Instead of cmb10, you many want to use cmbx10. % cmbx10 is a prettier font on its own, but cmb10 *************** where each line of input produces a line *** 1156,1161 **** --- 1196,1213 ---- \font\smalli=cmmi9 \font\smallsy=cmsy9 + % Fonts for small examples (8pt). + \setfont\smallerrm\rmshape{8}{1000} + \setfont\smallertt\ttshape{8}{1000} + \setfont\smallerbf\bfshape{10}{800} + \setfont\smallerit\itshape{8}{1000} + \setfont\smallersl\slshape{8}{1000} + \setfont\smallersf\sfshape{8}{1000} + \setfont\smallersc\scshape{10}{800} + \setfont\smallerttsl\ttslshape{10}{800} + \font\smalleri=cmmi8 + \font\smallersy=cmsy8 + % Fonts for title page: \setfont\titlerm\rmbshape{12}{\magstep3} \setfont\titleit\itbshape{10}{\magstep4} *************** where each line of input produces a line *** 1193,1212 **** \font\seci=cmmi12 scaled \magstep1 \font\secsy=cmsy10 scaled \magstep2 - % \setfont\ssecrm\bxshape{10}{\magstep1} % This size an font looked bad. - % \setfont\ssecit\itshape{10}{\magstep1} % The letters were too crowded. - % \setfont\ssecsl\slshape{10}{\magstep1} - % \setfont\ssectt\ttshape{10}{\magstep1} - % \setfont\ssecsf\sfshape{10}{\magstep1} - - %\setfont\ssecrm\bfshape{10}{1315} % Note the use of cmb rather than cmbx. - %\setfont\ssecit\itshape{10}{1315} % Also, the size is a little larger than - %\setfont\ssecsl\slshape{10}{1315} % being scaled magstep1. - %\setfont\ssectt\ttshape{10}{1315} - %\setfont\ssecsf\sfshape{10}{1315} - - %\let\ssecbf=\ssecrm - % Subsection fonts (13.15pt). \setfont\ssecrm\rmbshape{12}{\magstephalf} \setfont\ssecit\itbshape{10}{1315} --- 1245,1250 ---- *************** where each line of input produces a line *** 1223,1239 **** % In order for the font changes to affect most math symbols and letters, % we have to define the \textfont of the standard families. Since ! % texinfo doesn't allow for producing subscripts and superscripts, we ! % don't bother to reset \scriptfont and \scriptscriptfont (which would ! % also require loading a lot more fonts). % \def\resetmathfonts{% ! \textfont0 = \tenrm \textfont1 = \teni \textfont2 = \tensy ! \textfont\itfam = \tenit \textfont\slfam = \tensl \textfont\bffam = \tenbf ! \textfont\ttfam = \tentt \textfont\sffam = \tensf } - % The font-changing commands redefine the meanings of \tenSTYLE, instead % of just \STYLE. We do this so that font changes will continue to work % in math mode, where it is the current \fam that is relevant in most --- 1261,1276 ---- % In order for the font changes to affect most math symbols and letters, % we have to define the \textfont of the standard families. Since ! % texinfo doesn't allow for producing subscripts and superscripts except ! % in the main text, we don't bother to reset \scriptfont and ! % \scriptscriptfont (which would also require loading a lot more fonts). % \def\resetmathfonts{% ! \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy ! \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf ! \textfont\ttfam=\tentt \textfont\sffam=\tensf } % The font-changing commands redefine the meanings of \tenSTYLE, instead % of just \STYLE. We do this so that font changes will continue to work % in math mode, where it is the current \fam that is relevant in most *************** where each line of input produces a line *** 1244,1250 **** \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl ! \resetmathfonts} \def\titlefonts{% \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc --- 1281,1287 ---- \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl ! \resetmathfonts \setleading{\textleading}} \def\titlefonts{% \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc *************** where each line of input produces a line *** 1273,1279 **** \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy \let\tenttsl=\smallttsl ! \resetmathfonts \setleading{11pt}} % Set up the default fonts, so we can use them for creating boxes. % --- 1310,1323 ---- \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy \let\tenttsl=\smallttsl ! \resetmathfonts \setleading{10.5pt}} ! \def\smallerfonts{% ! \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl ! \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc ! \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy ! \let\tenttsl=\smallerttsl ! \resetmathfonts \setleading{9.5pt}} ! \let\smallexamplefonts = \smallerfonts % Set up the default fonts, so we can use them for creating boxes. % *************** where each line of input produces a line *** 1576,1581 **** --- 1620,1629 ---- \oldpage \endgroup % + % Need this before the \...aftertitlepage checks so that if they are + % in effect the toc pages will come out with page numbers. + \HEADINGSon + % % If they want short, they certainly want long too. \ifsetshortcontentsaftertitlepage \shortcontents *************** where each line of input produces a line *** 1591,1598 **** \fi % \ifpdf \pdfmakepagedesttrue \fi - % - \HEADINGSon } \def\finishtitlepage{% --- 1639,1644 ---- *************** width0pt\relax} \fi *** 2354,2366 **** % \def\ignore{\doignore{ignore}} ! % Ignore @ifinfo, @ifhtml, @ifnottex, @html, @menu, and @direntry text. % \def\ifinfo{\doignore{ifinfo}} \def\ifhtml{\doignore{ifhtml}} \def\ifnottex{\doignore{ifnottex}} \def\html{\doignore{html}} \def\menu{\doignore{menu}} \def\direntry{\doignore{direntry}} % @dircategory CATEGORY -- specify a category of the dir file --- 2400,2414 ---- % \def\ignore{\doignore{ignore}} ! % Also ignore @ifinfo, @ifhtml, @ifnottex, @html, @menu, ! % @documentdescription, and @direntry text. % \def\ifinfo{\doignore{ifinfo}} \def\ifhtml{\doignore{ifhtml}} \def\ifnottex{\doignore{ifnottex}} \def\html{\doignore{html}} \def\menu{\doignore{menu}} + \def\documentdescription{\doignore{documentdescription}} \def\direntry{\doignore{direntry}} % @dircategory CATEGORY -- specify a category of the dir file *************** width0pt\relax} \fi *** 2467,2476 **** \let\tenrm=\nullfont \let\tenit=\nullfont \let\tensl=\nullfont \let\tenbf=\nullfont \let\tentt=\nullfont \let\smallcaps=\nullfont \let\tensf=\nullfont ! % Similarly for index fonts (mostly for their use in smallexample). \let\smallrm=\nullfont \let\smallit=\nullfont \let\smallsl=\nullfont \let\smallbf=\nullfont \let\smalltt=\nullfont \let\smallsc=\nullfont \let\smallsf=\nullfont % % Don't complain when characters are missing from the fonts. \tracinglostchars = 0 --- 2515,2528 ---- \let\tenrm=\nullfont \let\tenit=\nullfont \let\tensl=\nullfont \let\tenbf=\nullfont \let\tentt=\nullfont \let\smallcaps=\nullfont \let\tensf=\nullfont ! % Similarly for index fonts. \let\smallrm=\nullfont \let\smallit=\nullfont \let\smallsl=\nullfont \let\smallbf=\nullfont \let\smalltt=\nullfont \let\smallsc=\nullfont \let\smallsf=\nullfont + % Similarly for smallexample fonts. + \let\smallerrm=\nullfont \let\smallerit=\nullfont \let\smallersl=\nullfont + \let\smallerbf=\nullfont \let\smallertt=\nullfont \let\smallersc=\nullfont + \let\smallersf=\nullfont % % Don't complain when characters are missing from the fonts. \tracinglostchars = 0 *************** width0pt\relax} \fi *** 2707,2715 **** --- 2759,2781 ---- \def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} + % Take care of texinfo commands likely to appear in an index entry. + % (Must be a way to avoid doing expansion at all, and thus not have to + % laboriously list every single command here.) + % \def\indexdummies{% \def\ { }% + \def\@{@}% change to @@ when we switch to @ as escape char in aux files. + % Need these in case \tex is in effect and \{ is a \delimiter again. + % But can't use \lbracecmd and \rbracecmd because texindex assumes + % braces and backslashes are used only as delimiters. + \let\{ = \mylbrace + \let\} = \myrbrace + \def\_{{\realbackslash _}}% + \normalturnoffactive + % % Take care of the plain tex accent commands. + \def\,##1{\realbackslash ,{##1}}% \def\"{\realbackslash "}% \def\`{\realbackslash `}% \def\'{\realbackslash '}% *************** width0pt\relax} \fi *** 2722,2790 **** \def\u{\realbackslash u}% \def\v{\realbackslash v}% \def\H{\realbackslash H}% % Take care of the plain tex special European modified letters. - \def\oe{\realbackslash oe}% - \def\ae{\realbackslash ae}% - \def\aa{\realbackslash aa}% - \def\OE{\realbackslash OE}% - \def\AE{\realbackslash AE}% \def\AA{\realbackslash AA}% ! \def\o{\realbackslash o}% \def\O{\realbackslash O}% \def\l{\realbackslash l}% ! \def\L{\realbackslash L}% \def\ss{\realbackslash ss}% ! % Take care of texinfo commands likely to appear in an index entry. ! % (Must be a way to avoid doing expansion at all, and thus not have to ! % laboriously list every single command here.) ! \def\@{@}% will be @@ when we switch to @ as escape char. ! % Need these in case \tex is in effect and \{ is a \delimiter again. ! % But can't use \lbracecmd and \rbracecmd because texindex assumes ! % braces and backslashes are used only as delimiters. ! \let\{ = \mylbrace ! \let\} = \myrbrace ! \def\_{{\realbackslash _}}% ! \def\w{\realbackslash w }% \def\bf{\realbackslash bf }% %\def\rm{\realbackslash rm }% - \def\sl{\realbackslash sl }% \def\sf{\realbackslash sf}% \def\tt{\realbackslash tt}% ! \def\gtr{\realbackslash gtr}% ! \def\less{\realbackslash less}% ! \def\hat{\realbackslash hat}% \def\TeX{\realbackslash TeX}% ! \def\dots{\realbackslash dots }% ! \def\result{\realbackslash result}% ! \def\equiv{\realbackslash equiv}% ! \def\expansion{\realbackslash expansion}% ! \def\print{\realbackslash print}% ! \def\error{\realbackslash error}% ! \def\point{\realbackslash point}% ! \def\copyright{\realbackslash copyright}% ! \def\tclose##1{\realbackslash tclose {##1}}% \def\code##1{\realbackslash code {##1}}% - \def\uref##1{\realbackslash uref {##1}}% - \def\url##1{\realbackslash url {##1}}% - \def\env##1{\realbackslash env {##1}}% \def\command##1{\realbackslash command {##1}}% \def\option##1{\realbackslash option {##1}}% - \def\dotless##1{\realbackslash dotless {##1}}% \def\samp##1{\realbackslash samp {##1}}% ! \def\,##1{\realbackslash ,{##1}}% ! \def\t##1{\realbackslash t {##1}}% ! \def\r##1{\realbackslash r {##1}}% ! \def\i##1{\realbackslash i {##1}}% ! \def\b##1{\realbackslash b {##1}}% ! \def\sc##1{\realbackslash sc {##1}}% ! \def\cite##1{\realbackslash cite {##1}}% ! \def\key##1{\realbackslash key {##1}}% ! \def\file##1{\realbackslash file {##1}}% \def\var##1{\realbackslash var {##1}}% ! \def\kbd##1{\realbackslash kbd {##1}}% ! \def\dfn##1{\realbackslash dfn {##1}}% ! \def\emph##1{\realbackslash emph {##1}}% ! \def\acronym##1{\realbackslash acronym {##1}}% % % Handle some cases of @value -- where the variable name does not % contain - or _, and the value does not contain any --- 2788,2853 ---- \def\u{\realbackslash u}% \def\v{\realbackslash v}% \def\H{\realbackslash H}% + \def\dotless##1{\realbackslash dotless {##1}}% % Take care of the plain tex special European modified letters. \def\AA{\realbackslash AA}% ! \def\AE{\realbackslash AE}% ! \def\L{\realbackslash L}% ! \def\OE{\realbackslash OE}% \def\O{\realbackslash O}% + \def\aa{\realbackslash aa}% + \def\ae{\realbackslash ae}% \def\l{\realbackslash l}% ! \def\oe{\realbackslash oe}% ! \def\o{\realbackslash o}% \def\ss{\realbackslash ss}% ! % ! % Although these internals commands shouldn't show up, sometimes they do. \def\bf{\realbackslash bf }% + \def\gtr{\realbackslash gtr}% + \def\hat{\realbackslash hat}% + \def\less{\realbackslash less}% %\def\rm{\realbackslash rm }% \def\sf{\realbackslash sf}% + \def\sl{\realbackslash sl }% + \def\tclose##1{\realbackslash tclose {##1}}% \def\tt{\realbackslash tt}% ! % ! \def\b##1{\realbackslash b {##1}}% ! \def\i##1{\realbackslash i {##1}}% ! \def\sc##1{\realbackslash sc {##1}}% ! \def\t##1{\realbackslash t {##1}}% ! \def\r##1{\realbackslash r {##1}}% ! % \def\TeX{\realbackslash TeX}% ! \def\acronym##1{\realbackslash acronym {##1}}% ! \def\cite##1{\realbackslash cite {##1}}% \def\code##1{\realbackslash code {##1}}% \def\command##1{\realbackslash command {##1}}% + \def\dfn##1{\realbackslash dfn {##1}}% + \def\dots{\realbackslash dots }% + \def\emph##1{\realbackslash emph {##1}}% + \def\env##1{\realbackslash env {##1}}% + \def\file##1{\realbackslash file {##1}}% + \def\kbd##1{\realbackslash kbd {##1}}% + \def\key##1{\realbackslash key {##1}}% + \def\math##1{\realbackslash math {##1}}% \def\option##1{\realbackslash option {##1}}% \def\samp##1{\realbackslash samp {##1}}% ! \def\strong##1{\realbackslash strong {##1}}% ! \def\uref##1{\realbackslash uref {##1}}% ! \def\url##1{\realbackslash url {##1}}% \def\var##1{\realbackslash var {##1}}% ! \def\w{\realbackslash w }% ! % ! % These math commands don't seem likely to be used in index entries. ! \def\copyright{\realbackslash copyright}% ! \def\equiv{\realbackslash equiv}% ! \def\error{\realbackslash error}% ! \def\expansion{\realbackslash expansion}% ! \def\point{\realbackslash point}% ! \def\print{\realbackslash print}% ! \def\result{\realbackslash result}% % % Handle some cases of @value -- where the variable name does not % contain - or _, and the value does not contain any *************** width0pt\relax} \fi *** 2809,2815 **** \def\indexdummydots{...} \def\indexnofonts{% ! % Just ignore accents. \let\,=\indexdummyfont \let\"=\indexdummyfont \let\`=\indexdummyfont --- 2872,2881 ---- \def\indexdummydots{...} \def\indexnofonts{% ! \def\@{@}% ! % how to handle braces? ! \def\_{\normalunderscore}% ! % \let\,=\indexdummyfont \let\"=\indexdummyfont \let\`=\indexdummyfont *************** width0pt\relax} \fi *** 2825,2869 **** \let\H=\indexdummyfont \let\dotless=\indexdummyfont % Take care of the plain tex special European modified letters. - \def\oe{oe}% - \def\ae{ae}% - \def\aa{aa}% - \def\OE{OE}% - \def\AE{AE}% \def\AA{AA}% ! \def\o{o}% \def\O{O}% \def\l{l}% ! \def\L{L}% \def\ss{ss}% ! \let\w=\indexdummyfont ! \let\t=\indexdummyfont ! \let\r=\indexdummyfont ! \let\i=\indexdummyfont \let\b=\indexdummyfont ! \let\emph=\indexdummyfont ! \let\strong=\indexdummyfont ! \let\cite=\indexdummyfont \let\sc=\indexdummyfont ! %Don't no-op \tt, since it isn't a user-level command ! % and is used in the definitions of the active chars like <, >, |... ! %\let\tt=\indexdummyfont ! \let\tclose=\indexdummyfont ! \let\code=\indexdummyfont ! \let\url=\indexdummyfont ! \let\uref=\indexdummyfont ! \let\env=\indexdummyfont \let\acronym=\indexdummyfont \let\command=\indexdummyfont ! \let\option=\indexdummyfont \let\file=\indexdummyfont - \let\samp=\indexdummyfont \let\kbd=\indexdummyfont \let\key=\indexdummyfont \let\var=\indexdummyfont ! \let\TeX=\indexdummytex ! \let\dots=\indexdummydots ! \def\@{@}% } % To define \realbackslash, we must make \ not be an escape. --- 2891,2939 ---- \let\H=\indexdummyfont \let\dotless=\indexdummyfont % Take care of the plain tex special European modified letters. \def\AA{AA}% ! \def\AE{AE}% ! \def\L{L}% ! \def\OE{OE}% \def\O{O}% + \def\aa{aa}% + \def\ae{ae}% \def\l{l}% ! \def\oe{oe}% ! \def\o{o}% \def\ss{ss}% ! % ! % Don't no-op \tt, since it isn't a user-level command ! % and is used in the definitions of the active chars like <, >, |, etc. ! % Likewise with the other plain tex font commands. ! %\let\tt=\indexdummyfont ! % \let\b=\indexdummyfont ! \let\i=\indexdummyfont ! \let\r=\indexdummyfont \let\sc=\indexdummyfont ! \let\t=\indexdummyfont ! % ! \let\TeX=\indexdummytex \let\acronym=\indexdummyfont + \let\cite=\indexdummyfont + \let\code=\indexdummyfont \let\command=\indexdummyfont ! \let\dfn=\indexdummyfont ! \let\dots=\indexdummydots ! \let\emph=\indexdummyfont ! \let\env=\indexdummyfont \let\file=\indexdummyfont \let\kbd=\indexdummyfont \let\key=\indexdummyfont + \let\math=\indexdummyfont + \let\option=\indexdummyfont + \let\samp=\indexdummyfont + \let\strong=\indexdummyfont + \let\uref=\indexdummyfont + \let\url=\indexdummyfont \let\var=\indexdummyfont ! \let\w=\indexdummyfont } % To define \realbackslash, we must make \ not be an escape. *************** width0pt\relax} \fi *** 3465,3472 **** \gdef\thischaptername{#1}% \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}% \toks0 = {#1}% ! \edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}% ! {\putwordAppendix{} \appendixletter}}}% \temp \appendixnoderef \global\let\section = \appendixsec --- 3535,3542 ---- \gdef\thischaptername{#1}% \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}% \toks0 = {#1}% ! \edef\temp{\noexpand\writetocentry{\realbackslash appendixentry{\the\toks0}% ! {\appendixletter}}}% \temp \appendixnoderef \global\let\section = \appendixsec *************** width0pt\relax} \fi *** 3899,3904 **** --- 3969,3975 ---- \startcontents{\putwordShortTOC}% % \let\chapentry = \shortchapentry + \let\appendixentry = \shortappendixentry \let\unnumbchapentry = \shortunnumberedentry % We want a true roman here for the page numbers. \secfonts *************** width0pt\relax} \fi *** 3934,3949 **** % The last argument is the page number. % The arguments in between are the chapter number, section number, ... ! % Chapter-level things, for both the long and short contents. \def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}} ! ! % See comments in \dochapentry re vbox and related settings \def\shortchapentry#1#2#3{% \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#3\egroup}% } % Typeset the label for a chapter or appendix for the short contents. ! % The arg is, e.g. `Appendix A' for an appendix, or `3' for a chapter. % We could simplify the code here by writing out an \appendixentry % command in the toc file for appendices, instead of using \chapentry % for both, but it doesn't seem worth it. --- 4005,4027 ---- % The last argument is the page number. % The arguments in between are the chapter number, section number, ... ! % Chapters, in the main contents. \def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}} ! % ! % Chapters, in the short toc. ! % See comments in \dochapentry re vbox and related settings. \def\shortchapentry#1#2#3{% \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#3\egroup}% } + % Appendices, in the main contents. + \def\appendixentry#1#2#3{\dochapentry{\putwordAppendix{} #2\labelspace#1}{#3}} + % + % Appendices, in the short toc. + \let\shortappendixentry = \shortchapentry + % Typeset the label for a chapter or appendix for the short contents. ! % The arg is, e.g., `Appendix A' for an appendix, or `3' for a chapter. % We could simplify the code here by writing out an \appendixentry % command in the toc file for appendices, instead of using \chapentry % for both, but it doesn't seem worth it. *************** width0pt\relax} \fi *** 3951,3973 **** \newdimen\shortappendixwidth % \def\shortchaplabel#1{% ! % Compute width of word "Appendix", may change with language. ! \setbox0 = \hbox{\shortcontrm \putwordAppendix}% ! \shortappendixwidth = \wd0 ! % ! % We typeset #1 in a box of constant width, regardless of the text of ! % #1, so the chapter titles will come out aligned. ! \setbox0 = \hbox{#1}% ! \dimen0 = \ifdim\wd0 > \shortappendixwidth \shortappendixwidth \else 0pt \fi ! % ! % This space should be plenty, since a single number is .5em, and the % widest letter (M) is 1em, at least in the Computer Modern fonts. % (This space doesn't include the extra space that gets added after % the label; that gets put in by \shortchapentry above.) ! \advance\dimen0 by 1.1em ! \hbox to \dimen0{#1\hfil}% } \def\unnumbchapentry#1#2{\dochapentry{#1}{#2}} \def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno\bgroup#2\egroup}} --- 4029,4044 ---- \newdimen\shortappendixwidth % \def\shortchaplabel#1{% ! % This space should be enough, since a single number is .5em, and the % widest letter (M) is 1em, at least in the Computer Modern fonts. + % But use \hss just in case. % (This space doesn't include the extra space that gets added after % the label; that gets put in by \shortchapentry above.) ! \dimen0 = 1em ! \hbox to \dimen0{#1\hss}% } + % Unnumbered chapters. \def\unnumbchapentry#1#2{\dochapentry{#1}{#2}} \def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno\bgroup#2\egroup}} *************** width0pt\relax} \fi *** 4023,4029 **** \def\tocentry#1#2{\begingroup \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks % Do not use \turnoffactive in these arguments. Since the toc is ! % typeset in cmr, so characters such as _ would come out wrong; we % have to do the usual translation tricks. \entry{#1}{#2}% \endgroup} --- 4094,4100 ---- \def\tocentry#1#2{\begingroup \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks % Do not use \turnoffactive in these arguments. Since the toc is ! % typeset in cmr, characters such as _ would come out wrong; we % have to do the usual translation tricks. \entry{#1}{#2}% \endgroup} *************** width0pt\relax} \fi *** 4299,4305 **** \def\smalllispx{\begingroup \def\Esmalllisp{\nonfillfinish\endgroup}% \def\Esmallexample{\nonfillfinish\endgroup}% ! \smallfonts \lisp } --- 4370,4376 ---- \def\smalllispx{\begingroup \def\Esmalllisp{\nonfillfinish\endgroup}% \def\Esmallexample{\nonfillfinish\endgroup}% ! \smallexamplefonts \lisp } *************** width0pt\relax} \fi *** 4310,4321 **** \let\Edisplay = \nonfillfinish \gobble } ! % @smalldisplay (when @smallbook): @display plus smaller fonts. % \def\smalldisplayx{\begingroup \def\Esmalldisplay{\nonfillfinish\endgroup}% ! \smallfonts \rm \display } --- 4381,4392 ---- \let\Edisplay = \nonfillfinish \gobble } ! % % @smalldisplay (when @smallbook): @display plus smaller fonts. % \def\smalldisplayx{\begingroup \def\Esmalldisplay{\nonfillfinish\endgroup}% ! \smallexamplefonts \rm \display } *************** width0pt\relax} \fi *** 4327,4338 **** \let\Eformat = \nonfillfinish \gobble } ! % @smallformat (when @smallbook): @format plus smaller fonts. % \def\smallformatx{\begingroup \def\Esmallformat{\nonfillfinish\endgroup}% ! \smallfonts \rm \format } --- 4398,4409 ---- \let\Eformat = \nonfillfinish \gobble } ! % % @smallformat (when @smallbook): @format plus smaller fonts. % \def\smallformatx{\begingroup \def\Esmallformat{\nonfillfinish\endgroup}% ! \smallexamplefonts \rm \format } *************** width0pt\relax} \fi *** 4852,4858 **** % #1 is the data type, #2 the name, #3 the args. \def\deftypefunheaderx #1#2 #3\relax{% \doind {fn}{\code{#2}}% Make entry in function index ! \begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypefun}% \deftypefunargs {#3}\endgroup % \catcode 61=\other % Turn off change made in \defparsebody } --- 4923,4929 ---- % #1 is the data type, #2 the name, #3 the args. \def\deftypefunheaderx #1#2 #3\relax{% \doind {fn}{\code{#2}}% Make entry in function index ! \begingroup\defname {\defheaderxcond#1\relax$.$#2}{\putwordDeftypefun}% \deftypefunargs {#3}\endgroup % \catcode 61=\other % Turn off change made in \defparsebody } *************** width0pt\relax} \fi *** 4861,4869 **** \def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader} ! % \defheaderxcond#1\relax$$$ % puts #1 in @code, followed by a space, but does nothing if #1 is null. ! \def\defheaderxcond#1#2$$${\ifx#1\relax\else\code{#1#2} \fi} % #1 is the classification. #2 is the data type. #3 is the name and args. \def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax} --- 4932,4940 ---- \def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader} ! % \defheaderxcond#1\relax$.$ % puts #1 in @code, followed by a space, but does nothing if #1 is null. ! \def\defheaderxcond#1#2$.${\ifx#1\relax\else\code{#1#2} \fi} % #1 is the classification. #2 is the data type. #3 is the name and args. \def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax} *************** width0pt\relax} \fi *** 4873,4879 **** \begingroup \normalparens % notably, turn off `&' magic, which prevents % at least some C++ text from working ! \defname {\defheaderxcond#2\relax$$$#3}{#1}% \deftypefunargs {#4}\endgroup % \catcode 61=\other % Turn off change made in \defparsebody } --- 4944,4950 ---- \begingroup \normalparens % notably, turn off `&' magic, which prevents % at least some C++ text from working ! \defname {\defheaderxcond#2\relax$.$#3}{#1}% \deftypefunargs {#4}\endgroup % \catcode 61=\other % Turn off change made in \defparsebody } *************** width0pt\relax} \fi *** 4919,4925 **** \def\deftypeopheader#1#2#3#4{% \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index \begingroup ! \defname{\defheaderxcond#2\relax$$$#3} {\deftypeopcategory\ \putwordon\ \code{#1}}% \deftypefunargs{#4}% \endgroup --- 4990,4996 ---- \def\deftypeopheader#1#2#3#4{% \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index \begingroup ! \defname{\defheaderxcond#2\relax$.$#3} {\deftypeopcategory\ \putwordon\ \code{#1}}% \deftypefunargs{#4}% \endgroup *************** width0pt\relax} \fi *** 4934,4940 **** \def\deftypemethodheader#1#2#3#4{% \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index \begingroup ! \defname{\defheaderxcond#2\relax$$$#3}{\putwordMethodon\ \code{#1}}% \deftypefunargs{#4}% \endgroup } --- 5005,5011 ---- \def\deftypemethodheader#1#2#3#4{% \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index \begingroup ! \defname{\defheaderxcond#2\relax$.$#3}{\putwordMethodon\ \code{#1}}% \deftypefunargs{#4}% \endgroup } *************** width0pt\relax} \fi *** 4948,4954 **** \def\deftypeivarheader#1#2#3{% \dosubind{vr}{\code{#3}}{\putwordof\ \code{#1}}% entry in variable index \begingroup ! \defname{\defheaderxcond#2\relax$$$#3} {\putwordInstanceVariableof\ \code{#1}}% \defvarargs{#3}% \endgroup --- 5019,5025 ---- \def\deftypeivarheader#1#2#3{% \dosubind{vr}{\code{#3}}{\putwordof\ \code{#1}}% entry in variable index \begingroup ! \defname{\defheaderxcond#2\relax$.$#3} {\putwordInstanceVariableof\ \code{#1}}% \defvarargs{#3}% \endgroup *************** width0pt\relax} \fi *** 5031,5037 **** % is actually part of the data type, which should not be put into the index. \def\deftypevarheader #1#2{% \dovarind#2 \relax% Make entry in variables index ! \begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypevar}% \interlinepenalty=10000 \endgraf\nobreak\vskip -\parskip\nobreak \endgroup} --- 5102,5108 ---- % is actually part of the data type, which should not be put into the index. \def\deftypevarheader #1#2{% \dovarind#2 \relax% Make entry in variables index ! \begingroup\defname {\defheaderxcond#1\relax$.$#2}{\putwordDeftypevar}% \interlinepenalty=10000 \endgraf\nobreak\vskip -\parskip\nobreak \endgroup} *************** width0pt\relax} \fi *** 5042,5048 **** \def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader} \def\deftypevrheader #1#2#3{\dovarind#3 \relax% ! \begingroup\defname {\defheaderxcond#2\relax$$$#3}{#1} \interlinepenalty=10000 \endgraf\nobreak\vskip -\parskip\nobreak \endgroup} --- 5113,5119 ---- \def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader} \def\deftypevrheader #1#2#3{\dovarind#3 \relax% ! \begingroup\defname {\defheaderxcond#2\relax$.$#3}{#1} \interlinepenalty=10000 \endgraf\nobreak\vskip -\parskip\nobreak \endgroup} *************** width0pt\relax} \fi *** 5483,5495 **** \ifpdf \leavevmode \getfilename{#4}% ! \ifnum\filenamelength>0 ! \startlink attr{/Border [0 0 0]}% ! goto file{\the\filename.pdf} name{#1@}% ! \else ! \startlink attr{/Border [0 0 0]}% ! goto name{#1@}% ! \fi \linkcolor \fi % --- 5554,5568 ---- \ifpdf \leavevmode \getfilename{#4}% ! {\normalturnoffactive ! \ifnum\filenamelength>0 ! \startlink attr{/Border [0 0 0]}% ! goto file{\the\filename.pdf} name{#1}% ! \else ! \startlink attr{/Border [0 0 0]}% ! goto name{#1}% ! \fi ! }% \linkcolor \fi % *************** width0pt\relax} \fi *** 5751,5758 **** % \smallfonts \rm % ! % Hang the footnote text off the number. ! \hang \textindent{\thisfootno}% % % Don't crash into the line above the footnote text. Since this --- 5824,5838 ---- % \smallfonts \rm % ! % Because we use hanging indentation in footnotes, a @noindent appears ! % to exdent this text, so make it be a no-op. makeinfo does not use ! % hanging indentation so @noindent can still be needed within footnote ! % text after an @example or the like (not that this is good style). ! \let\noindent = \relax ! % ! % Hang the footnote text off the number. Use \everypar in case the ! % footnote extends for more than one paragraph. ! \everypar = {\hang}% \textindent{\thisfootno}% % % Don't crash into the line above the footnote text. Since this *************** width0pt\relax} \fi *** 5769,5792 **** }%end \catcode `\@=11 - % Set the baselineskip to #1, and the lineskip and strut size - % correspondingly. There is no deep meaning behind these magic numbers - % used as factors; they just match (closely enough) what Knuth defined. - % - \def\lineskipfactor{.08333} - \def\strutheightpercent{.70833} - \def\strutdepthpercent {.29167} - % - \def\setleading#1{% - \normalbaselineskip = #1\relax - \normallineskip = \lineskipfactor\normalbaselineskip - \normalbaselines - \setbox\strutbox =\hbox{% - \vrule width0pt height\strutheightpercent\baselineskip - depth \strutdepthpercent \baselineskip - }% - } - % @| inserts a changebar to the left of the current line. It should % surround any changed text. This approach does *not* work if the % change spans more than two lines of output. To handle that, we would --- 5849,5854 ---- *************** width0pt\relax} \fi *** 5851,5891 **** \global\warnednoepsftrue \fi \else ! \imagexxx #1,,,\finish \fi } % % Arguments to @image: % #1 is (mandatory) image filename; we tack on .eps extension. % #2 is (optional) width, #3 is (optional) height. ! % #4 is just the usual extra ignored arg for parsing this stuff. ! \def\imagexxx#1,#2,#3,#4\finish{% \ifpdf ! \centerline{\dopdfimage{#1}{#2}{#3}}% \else % \epsfbox itself resets \epsf?size at each figure. \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi ! \begingroup ! \catcode`\^^M = 5 % in case we're inside an example ! \normalturnoffactive % allow _ et al. in names ! % If the image is by itself, center it. ! \ifvmode ! \nobreak\bigskip ! % Usually we'll have text after the image which will insert ! % \parskip glue, so insert it here too to equalize the space ! % above and below. ! \nobreak\vskip\parskip ! \nobreak ! \centerline{\epsfbox{#1.eps}}% ! \bigbreak ! \else ! % In the middle of a paragraph, no extra space. ! \epsfbox{#1.eps}% ! \fi ! \endgroup \fi ! } \message{localization,} --- 5913,5956 ---- \global\warnednoepsftrue \fi \else ! \imagexxx #1,,,,,\finish \fi } % % Arguments to @image: % #1 is (mandatory) image filename; we tack on .eps extension. % #2 is (optional) width, #3 is (optional) height. ! % #4 is (ignored optional) html alt text. ! % #5 is (ignored optional) extension. ! % #6 is just the usual extra ignored arg for parsing this stuff. ! \newif\ifimagevmode ! \def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup ! \catcode`\^^M = 5 % in case we're inside an example ! \normalturnoffactive % allow _ et al. in names ! % If the image is by itself, center it. ! \ifvmode ! \imagevmodetrue ! \nobreak\bigskip ! % Usually we'll have text after the image which will insert ! % \parskip glue, so insert it here too to equalize the space ! % above and below. ! \nobreak\vskip\parskip ! \nobreak ! \line\bgroup\hss ! \fi ! % ! % Output the image. \ifpdf ! \dopdfimage{#1}{#2}{#3}% \else % \epsfbox itself resets \epsf?size at each figure. \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi ! \epsfbox{#1.eps}% \fi ! % ! \ifimagevmode \hss \egroup \bigbreak \fi % space after the image ! \endgroup} \message{localization,} *************** should work if nowhere else does.} *** 5954,5961 **** } % Parameters in order: 1) textheight; 2) textwidth; 3) voffset; ! % 4) hoffset; 5) binding offset; 6) topskip. Then whoever calls us can ! % set \parskip and call \setleading for \baselineskip. % \def\internalpagesizes#1#2#3#4#5#6{% \voffset = #3\relax --- 6019,6027 ---- } % Parameters in order: 1) textheight; 2) textwidth; 3) voffset; ! % 4) hoffset; 5) binding offset; 6) topskip. We also call ! % \setleading{\textleading}, so the caller should define \textleading. ! % The caller should also set \parskip. % \def\internalpagesizes#1#2#3#4#5#6{% \voffset = #3\relax *************** should work if nowhere else does.} *** 5976,5981 **** --- 6042,6049 ---- \normaloffset = #4\relax \bindingoffset = #5\relax % + \setleading{\textleading} + % \parindent = \defaultparindent \setemergencystretch } *************** should work if nowhere else does.} *** 5992,5998 **** % @letterpaper (the default). \def\letterpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt ! \setleading{13.2pt}% % % If page is nothing but text, make it come out even. \internalpagesizes{46\baselineskip}{6in}{\voffset}{.25in}{\bindingoffset}{36pt}% --- 6060,6066 ---- % @letterpaper (the default). \def\letterpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt ! \textleading = 13.2pt % % If page is nothing but text, make it come out even. \internalpagesizes{46\baselineskip}{6in}{\voffset}{.25in}{\bindingoffset}{36pt}% *************** should work if nowhere else does.} *** 6001,6007 **** % Use @smallbook to reset parameters for 7x9.5 (or so) format. \def\smallbook{{\globaldefs = 1 \parskip = 2pt plus 1pt ! \setleading{12pt}% % \internalpagesizes{7.5in}{5.in}{\voffset}{.25in}{\bindingoffset}{16pt}% % --- 6069,6075 ---- % Use @smallbook to reset parameters for 7x9.5 (or so) format. \def\smallbook{{\globaldefs = 1 \parskip = 2pt plus 1pt ! \textleading = 12pt % \internalpagesizes{7.5in}{5.in}{\voffset}{.25in}{\bindingoffset}{16pt}% % *************** should work if nowhere else does.} *** 6016,6023 **** % Use @afourpaper to print on European A4 paper. \def\afourpaper{{\globaldefs = 1 - \setleading{12pt}% \parskip = 3pt plus 2pt minus 1pt % \internalpagesizes{53\baselineskip}{160mm}{\voffset}{4mm}{\bindingoffset}{44pt}% % --- 6084,6091 ---- % Use @afourpaper to print on European A4 paper. \def\afourpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt + \textleading = 12pt % \internalpagesizes{53\baselineskip}{160mm}{\voffset}{4mm}{\bindingoffset}{44pt}% % *************** should work if nowhere else does.} *** 6029,6036 **** % From romildo@urano.iceb.ufop.br, 2 July 2000. % He also recommends making @example and @lisp be small. \def\afivepaper{{\globaldefs = 1 - \setleading{12.5pt}% \parskip = 2pt plus 1pt minus 0.1pt % \internalpagesizes{166mm}{120mm}{\voffset}{-8mm}{\bindingoffset}{8pt}% % --- 6097,6104 ---- % From romildo@urano.iceb.ufop.br, 2 July 2000. % He also recommends making @example and @lisp be small. \def\afivepaper{{\globaldefs = 1 \parskip = 2pt plus 1pt minus 0.1pt + \textleading = 12.5pt % \internalpagesizes{166mm}{120mm}{\voffset}{-8mm}{\bindingoffset}{8pt}% % *************** should work if nowhere else does.} *** 6048,6058 **** % A specific text layout, 24x15cm overall, intended for A4 paper. Top margin % 29mm, hence bottom margin 28mm, nominal side margin 3cm. \def\afourlatex{{\globaldefs = 1 ! \setleading{13.6pt}% % \afourpaper \internalpagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}% % \globaldefs = 0 }} --- 6116,6128 ---- % A specific text layout, 24x15cm overall, intended for A4 paper. Top margin % 29mm, hence bottom margin 28mm, nominal side margin 3cm. \def\afourlatex{{\globaldefs = 1 ! \textleading = 13.6pt % \afourpaper \internalpagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}% % + % Must explicitly reset to 0 because we call \afourpaper, apparently, + % although this does not entirely make sense. \globaldefs = 0 }} *************** should work if nowhere else does.} *** 6060,6067 **** \def\afourwide{% \afourpaper \internalpagesizes{6.5in}{9.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}% - % - \globaldefs = 0 } % @pagesizes TEXTHEIGHT[,TEXTWIDTH] --- 6130,6135 ---- *************** should work if nowhere else does.} *** 6075,6081 **** \globaldefs = 1 % \parskip = 3pt plus 2pt minus 1pt ! \setleading{13.2pt}% % \internalpagesizes{#1}{\hsize}{\voffset}{\normaloffset}{\bindingoffset}{44pt}% }} --- 6143,6149 ---- \globaldefs = 1 % \parskip = 3pt plus 2pt minus 1pt ! \setleading{\textleading}% % \internalpagesizes{#1}{\hsize}{\voffset}{\normaloffset}{\bindingoffset}{44pt}% }} *************** should work if nowhere else does.} *** 6105,6111 **** \def\normalless{<} \def\normalgreater{>} \def\normalplus{+} ! \def\normaldollar{$} % This macro is used to make a character print one way in ttfont % where it can probably just be output, and another way in other fonts, --- 6173,6179 ---- \def\normalless{<} \def\normalgreater{>} \def\normalplus{+} ! \def\normaldollar{$}%$ font-lock fix % This macro is used to make a character print one way in ttfont % where it can probably just be output, and another way in other fonts, *************** should work if nowhere else does.} *** 6154,6160 **** \catcode`\+=\active \def+{{\tt \char 43}} \catcode`\$=\active ! \def${\ifusingit{{\sl\$}}\normaldollar} %\catcode 27=\active %\def^^[{$\diamondsuit$} --- 6222,6228 ---- \catcode`\+=\active \def+{{\tt \char 43}} \catcode`\$=\active ! \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix %\catcode 27=\active %\def^^[{$\diamondsuit$} *************** should work if nowhere else does.} *** 6199,6205 **** @let<=@normalless @let>=@normalgreater @let+=@normalplus ! @let$=@normaldollar} @def@normalturnoffactive{@let"=@normaldoublequote @let\=@normalbackslash --- 6267,6273 ---- @let<=@normalless @let>=@normalgreater @let+=@normalplus ! @let$=@normaldollar}%$ font-lock fix @def@normalturnoffactive{@let"=@normaldoublequote @let\=@normalbackslash *************** should work if nowhere else does.} *** 6210,6216 **** @let<=@normalless @let>=@normalgreater @let+=@normalplus ! @let$=@normaldollar} % Make _ and + \other characters, temporarily. % This is canceled by @fixbackslash. --- 6278,6284 ---- @let<=@normalless @let>=@normalgreater @let+=@normalplus ! @let$=@normaldollar}%$ font-lock fix % Make _ and + \other characters, temporarily. % This is canceled by @fixbackslash. diff -Nrc3pad gcc-3.0.4/gcc/doc/install-old.texi gcc-3.1/gcc/doc/install-old.texi *** gcc-3.0.4/gcc/doc/install-old.texi Wed Jun 27 15:08:24 2001 --- gcc-3.1/gcc/doc/install-old.texi Fri Dec 7 16:57:27 2001 *************** *** 1,23 **** @c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. @c This is part of the GCC manual. ! @c For copying conditions, see the file gcc.texi. ! @node Installation ! @chapter Installing GNU CC ! @cindex installing GNU CC Note most of this information is out of date and superseded by the ! new GCC install manual @file{gcc/doc/install.texi}. It is ! provided for historical reference only. @menu - * Configuration Files:: Files created by running @code{configure}. * Configurations:: Configurations Supported by GNU CC. * Cross-Compiler:: Building and installing a cross-compiler. * VMS Install:: See below for installation on VMS. - * Collect2:: How @code{collect2} works; how it finds @code{ld}. - * Header Dirs:: Understanding the standard header file directories. @end menu Here is the procedure for installing GNU CC on a GNU or Unix system. See @ref{VMS Install}, for VMS systems. --- 1,30 ---- @c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. @c This is part of the GCC manual. ! @c For copying conditions, see the file install.texi. ! @ifnothtml ! @comment node-name, next, previous, up ! @node Old, GNU Free Documentation License, Specific, Top ! @end ifnothtml ! @html !

    Old installation documentation

    ! @end html ! @ifnothtml ! @chapter Old installation documentation ! @end ifnothtml Note most of this information is out of date and superseded by the ! previous chapters of this manual. It is provided for historical ! reference only, because of a lack of volunteers to merge it into the ! main manual. + @ifnothtml @menu * Configurations:: Configurations Supported by GNU CC. * Cross-Compiler:: Building and installing a cross-compiler. * VMS Install:: See below for installation on VMS. @end menu + @end ifnothtml Here is the procedure for installing GNU CC on a GNU or Unix system. See @ref{VMS Install}, for VMS systems. *************** section before proceeding any further wi *** 86,143 **** @end enumerate ! @node Configuration Files ! @section Files Created by @code{configure} ! ! Here we spell out what files will be set up by @code{configure}. Normally ! you need not be concerned with these files. ! ! @itemize @bullet ! @item ! @ifset INTERNALS ! A file named @file{config.h} is created that contains a @samp{#include} ! of the top-level config file for the machine you will run the compiler ! on (@pxref{Config}). This file is responsible for defining information ! about the host machine. It includes @file{tm.h}. ! @end ifset ! @ifclear INTERNALS ! A file named @file{config.h} is created that contains a @samp{#include} ! of the top-level config file for the machine you will run the compiler ! on (@pxref{Config,,The Configuration File, gcc.info, Using and Porting ! GCC}). This file is responsible for defining information about the host ! machine. It includes @file{tm.h}. ! @end ifclear ! ! The top-level config file is located in the subdirectory @file{config}. ! Its name is always @file{xm-@var{something}.h}; usually ! @file{xm-@var{machine}.h}, but there are some exceptions. ! ! If your system does not support symbolic links, you might want to ! set up @file{config.h} to contain a @samp{#include} command which ! refers to the appropriate file. ! ! @item ! A file named @file{tconfig.h} is created which includes the top-level config ! file for your target machine. This is used for compiling certain ! programs to run on that machine. ! ! @item ! A file named @file{tm.h} is created which includes the ! machine-description macro file for your target machine. It should be in ! the subdirectory @file{config} and its name is often ! @file{@var{machine}.h}. ! ! @item ! The command file @file{configure} also constructs the file ! @file{Makefile} by adding some text to the template file ! @file{Makefile.in}. The additional text comes from files in the ! @file{config} directory, named @file{t-@var{target}} and ! @file{x-@var{host}}. If these files do not exist, it means nothing ! needs to be added for a given target or host. ! @end itemize ! ! @node Configurations @section Configurations Supported by GNU CC @cindex configurations supported by GNU CC Here are the possible CPU types: --- 93,105 ---- @end enumerate ! @ifnothtml ! @node Configurations, Cross-Compiler, , Old @section Configurations Supported by GNU CC + @end ifnothtml + @html +

    @anchor{Configurations}Configurations Supported by GNU CC

    + @end html @cindex configurations supported by GNU CC Here are the possible CPU types: *************** things you must know: *** 245,252 **** See @ref{VMS Install}, for details on how to install GNU CC on VMS@. @end table ! @node Cross-Compiler @section Building and Installing a Cross-Compiler @cindex cross-compiler, installation GNU CC can function as a cross-compiler for many machines, but not all. --- 207,219 ---- See @ref{VMS Install}, for details on how to install GNU CC on VMS@. @end table ! @ifnothtml ! @node Cross-Compiler, VMS Install, Configurations, Old @section Building and Installing a Cross-Compiler + @end ifnothtml + @html +

    @anchor{Cross-Compiler}Building and Installing a Cross-Compiler

    + @end html @cindex cross-compiler, installation GNU CC can function as a cross-compiler for many machines, but not all. *************** If you want to link on other than the ta *** 276,281 **** --- 243,249 ---- cross-linker as well. You also need header files and libraries suitable for the target machine that you can install on the host machine. + @ifnothtml @menu * Steps of Cross:: Using a cross-compiler involves several steps that may be carried out on different machines. *************** for the target machine that you can inst *** 285,293 **** for a cross-compiler. * Build Cross:: Actually compiling the cross-compiler. @end menu ! @node Steps of Cross @subsection Steps of Cross-Compilation To compile and run a program using a cross-compiler involves several steps: --- 253,267 ---- for a cross-compiler. * Build Cross:: Actually compiling the cross-compiler. @end menu + @end ifnothtml ! @ifnothtml ! @node Steps of Cross, Configure Cross, , Cross-Compiler @subsection Steps of Cross-Compilation + @end ifnothtml + @html +

    Steps of Cross-Compilation

    + @end html To compile and run a program using a cross-compiler involves several steps: *************** since then you can do it all with a sing *** 315,322 **** requires a suitable cross-assembler and cross-linker. For some targets, the GNU assembler and linker are available. ! @node Configure Cross @subsection Configuring a Cross-Compiler To build GNU CC as a cross-compiler, you start out by running @file{configure}. Use the @option{--target=@var{target}} to specify the --- 289,301 ---- requires a suitable cross-assembler and cross-linker. For some targets, the GNU assembler and linker are available. ! @ifnothtml ! @node Configure Cross, Tools and Libraries, Steps of Cross, Cross-Compiler @subsection Configuring a Cross-Compiler + @end ifnothtml + @html +

    Configuring a Cross-Compiler

    + @end html To build GNU CC as a cross-compiler, you start out by running @file{configure}. Use the @option{--target=@var{target}} to specify the *************** produces code for an HP 68030 system run *** 330,337 **** ./configure --target=m68k-hp-bsd4.3 @end smallexample ! @node Tools and Libraries @subsection Tools and Libraries for a Cross-Compiler If you have a cross-assembler and cross-linker available, you should install them now. Put them in the directory --- 309,321 ---- ./configure --target=m68k-hp-bsd4.3 @end smallexample ! @ifnothtml ! @node Tools and Libraries, Cross Headers, Configure Cross, Cross-Compiler @subsection Tools and Libraries for a Cross-Compiler + @end ifnothtml + @html +

    Tools and Libraries for a Cross-Compiler

    + @end html If you have a cross-assembler and cross-linker available, you should install them now. Put them in the directory *************** mget *crt*.o *** 406,413 **** quit @end example ! @node Cross Headers @subsection Cross-Compilers and Header Files If you are cross-compiling a standalone program or a program for an embedded system, then you may not need any header files except the few --- 390,402 ---- quit @end example ! @ifnothtml ! @node Cross Headers, Build Cross, Tools and Libraries, Cross-Compiler @subsection Cross-Compilers and Header Files + @end ifnothtml + @html +

    Cross-Compilers and Header Files

    + @end html If you are cross-compiling a standalone program or a program for an embedded system, then you may not need any header files except the few *************** machine, the cross-compiler can use them *** 430,440 **** Otherwise, you're on your own in finding header files to use when cross-compiling. ! When you have found suitable header files, put them in the directory ! @file{/usr/local/@var{target}/include}, before building the cross ! compiler. Then installation will run fixincludes properly and install ! the corrected versions of the header files where the compiler will use ! them. Provide the header files before you build the cross-compiler, because the build stage actually runs the cross-compiler to produce parts of --- 419,429 ---- Otherwise, you're on your own in finding header files to use when cross-compiling. ! When you have found suitable header files, you should put them in the ! directory @file{/usr/local/@var{target}/include}, before building the ! cross compiler. Then installation will run fixincludes properly and ! install the corrected versions of the header files where the compiler ! will use them. Provide the header files before you build the cross-compiler, because the build stage actually runs the cross-compiler to produce parts of *************** quit *** 458,465 **** tar xf tarfile @end example ! @node Build Cross @subsection Actually Building the Cross-Compiler Now you can proceed just as for compiling a single-machine compiler through the step of building stage 1. --- 447,459 ---- tar xf tarfile @end example ! @ifnothtml ! @node Build Cross, , Cross Headers, Cross-Compiler @subsection Actually Building the Cross-Compiler + @end ifnothtml + @html +

    Actually Building the Cross-Compiler

    + @end html Now you can proceed just as for compiling a single-machine compiler through the step of building stage 1. *************** must specify a 68030 as the host when yo *** 486,493 **** To install the cross-compiler, use @samp{make install}, as usual. ! @node VMS Install @section Installing GNU CC on VMS @cindex VMS installation @cindex installing GNU CC on VMS --- 480,492 ---- To install the cross-compiler, use @samp{make install}, as usual. ! @ifnothtml ! @node VMS Install, , Cross-Compiler, Old @section Installing GNU CC on VMS + @end ifnothtml + @html +

    @anchor{VMS Install}Installing GNU CC on VMS

    + @end html @cindex VMS installation @cindex installing GNU CC on VMS *************** $ install replace sys$common:[syslib]dcl *** 613,621 **** @end smallexample @item ! Type @samp{@@make-gcc} to recompile everything (alternatively, submit ! the file @file{make-gcc.com} to a batch queue). If you wish to build ! the GNU C++ compiler as well as the GNU CC compiler, you must first edit @file{make-gcc.com} and follow the instructions that appear in the comments. --- 612,620 ---- @end smallexample @item ! Type @samp{@@make-gcc} to recompile everything, or submit the file ! @file{make-gcc.com} to a batch queue. If you wish to build the GNU C++ ! compiler as well as the GNU CC compiler, you must first edit @file{make-gcc.com} and follow the instructions that appear in the comments. *************** the read-only bit set, and the linker wi *** 680,691 **** about mismatched psect attributes for these variables. These warning messages are merely a nuisance, and can safely be ignored. - If you are compiling with a version of GNU CC older than 1.33, specify - @samp{/DEFINE=("inline=")} as an option in all the compilations. This - requires editing all the @code{gcc} commands in @file{make-cc1.com}. - (The older versions had problems supporting @code{inline}.) Once you - have a working 1.33 or newer GNU CC, you can change this file back. - @item If you want to build GNU CC with the VAX C compiler, you will need to make minor changes in @file{make-cccp.com} and @file{make-cc1.com} --- 679,684 ---- *************** by @file{vmsconfig.com}) to define the m *** 730,843 **** @code{QSORT_WORKAROUND} is always defined when GNU CC is compiled with VAX C, to avoid a problem in case @file{gcclib.olb} is not yet available. - - @node Collect2 - @section @code{collect2} - - GNU CC uses a utility called @code{collect2} on nearly all systems to arrange - to call various initialization functions at start time. - - The program @code{collect2} works by linking the program once and - looking through the linker output file for symbols with particular names - indicating they are constructor functions. If it finds any, it - creates a new temporary @samp{.c} file containing a table of them, - compiles it, and links the program a second time including that file. - - @findex __main - @cindex constructors, automatic calls - The actual calls to the constructors are carried out by a subroutine - called @code{__main}, which is called (automatically) at the beginning - of the body of @code{main} (provided @code{main} was compiled with GNU - CC)@. Calling @code{__main} is necessary, even when compiling C code, to - allow linking C and C++ object code together. (If you use - @option{-nostdlib}, you get an unresolved reference to @code{__main}, - since it's defined in the standard GCC library. Include @option{-lgcc} at - the end of your compiler command line to resolve this reference.) - - The program @code{collect2} is installed as @code{ld} in the directory - where the passes of the compiler are installed. When @code{collect2} - needs to find the @emph{real} @code{ld}, it tries the following file - names: - - @itemize @bullet - @item - @file{real-ld} in the directories listed in the compiler's search - directories. - - @item - @file{real-ld} in the directories listed in the environment variable - @code{PATH}. - - @item - The file specified in the @code{REAL_LD_FILE_NAME} configuration macro, - if specified. - - @item - @file{ld} in the compiler's search directories, except that - @code{collect2} will not execute itself recursively. - - @item - @file{ld} in @code{PATH}. - @end itemize - - ``The compiler's search directories'' means all the directories where - @code{gcc} searches for passes of the compiler. This includes - directories that you specify with @option{-B}. - - Cross-compilers search a little differently: - - @itemize @bullet - @item - @file{real-ld} in the compiler's search directories. - - @item - @file{@var{target}-real-ld} in @code{PATH}. - - @item - The file specified in the @code{REAL_LD_FILE_NAME} configuration macro, - if specified. - - @item - @file{ld} in the compiler's search directories. - - @item - @file{@var{target}-ld} in @code{PATH}. - @end itemize - - @code{collect2} explicitly avoids running @code{ld} using the file name - under which @code{collect2} itself was invoked. In fact, it remembers - up a list of such names---in case one copy of @code{collect2} finds - another copy (or version) of @code{collect2} installed as @code{ld} in a - second place in the search path. - - @code{collect2} searches for the utilities @code{nm} and @code{strip} - using the same algorithm as above for @code{ld}. - - @node Header Dirs - @section Standard Header File Directories - - @code{GCC_INCLUDE_DIR} means the same thing for native and cross. It is - where GNU CC stores its private include files, and also where GNU CC - stores the fixed include files. A cross compiled GNU CC runs - @code{fixincludes} on the header files in @file{$(tooldir)/include}. - (If the cross compilation header files need to be fixed, they must be - installed before GNU CC is built. If the cross compilation header files - are already suitable for ISO C and GNU CC, nothing special need be - done). - - @code{GPLUSPLUS_INCLUDE_DIR} means the same thing for native and cross. It - is where @code{g++} looks first for header files. The C++ library - installs only target independent header files in that directory. - - @code{LOCAL_INCLUDE_DIR} is used only for a native compiler. It is - normally @file{/usr/local/include}. GNU CC searches this directory so - that users can install header files in @file{/usr/local/include}. - - @code{CROSS_INCLUDE_DIR} is used only for a cross compiler. GNU CC - doesn't install anything there. - - @code{TOOL_INCLUDE_DIR} is used for both native and cross compilers. It - is the place for other packages to install header files that GNU CC will - use. For a cross-compiler, this is the equivalent of - @file{/usr/include}. When you build a cross-compiler, - @code{fixincludes} processes any header files in this directory. --- 723,725 ---- diff -Nrc3pad gcc-3.0.4/gcc/doc/install.texi gcc-3.1/gcc/doc/install.texi *** gcc-3.0.4/gcc/doc/install.texi Fri Feb 1 18:44:41 2002 --- gcc-3.1/gcc/doc/install.texi Sun May 5 11:34:42 2002 *************** *** 32,43 **** @ifset binarieshtml @settitle Installing GCC: Binaries @end ifset @ifset gfdlhtml @settitle Installing GCC: GNU Free Documentation License @end ifset @c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! @c 1999, 2000, 2001 Free Software Foundation, Inc. @c *** Converted to texinfo by Dean Wakerley, dean@wakerley.com @c Include everything if we're not making html --- 32,46 ---- @ifset binarieshtml @settitle Installing GCC: Binaries @end ifset + @ifset oldhtml + @settitle Installing GCC: Old documentation + @end ifset @ifset gfdlhtml @settitle Installing GCC: GNU Free Documentation License @end ifset @c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! @c 1999, 2000, 2001, 2002 Free Software Foundation, Inc. @c *** Converted to texinfo by Dean Wakerley, dean@wakerley.com @c Include everything if we're not making html *************** *** 50,62 **** @set testhtml @set finalinstallhtml @set binarieshtml @set gfdlhtml @end ifnothtml @c Part 2 Summary Description and Copyright @macro copyrightnotice Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001 Free Software Foundation, Inc. @sp 1 Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or --- 53,66 ---- @set testhtml @set finalinstallhtml @set binarieshtml + @set oldhtml @set gfdlhtml @end ifnothtml @c Part 2 Summary Description and Copyright @macro copyrightnotice Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. @sp 1 Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or *************** Free Documentation License}''. *** 105,110 **** --- 109,116 ---- * Specific:: Host/target specific installation notes for GCC. * Binaries:: Where to get pre-compiled binaries. + * Old:: Old installation documentation. + * GNU Free Documentation License:: How you can copy and share this manual. * Concept Index:: This index has two entries. @end menu *************** package specific installation instructio *** 138,153 **** @ifnothtml @ref{Specific, host/target specific installation notes}. @end ifnothtml ! @ifnotinfo @uref{specific.html,,host/target specific installation notes}. ! @end ifnotinfo We recommend you browse the entire generic installation instructions before you proceed. ! A ! @uref{http://gcc.gnu.org/gcc-3.0/buildstat.html,,list of successful builds} ! for GCC 3.0 releases is available at our web pages. This list is updated ! as new information becomes available. The installation procedure itself is broken into five steps. --- 144,162 ---- @ifnothtml @ref{Specific, host/target specific installation notes}. @end ifnothtml ! @ifhtml @uref{specific.html,,host/target specific installation notes}. ! @end ifhtml We recommend you browse the entire generic installation instructions before you proceed. ! Lists of successful builds for released versions of GCC are ! available at our web pages for ! @uref{http://gcc.gnu.org/gcc-3.1/buildstat.html,,3.1}, ! @uref{http://gcc.gnu.org/gcc-3.0/buildstat.html,,3.0} ! and ! @uref{http://gcc.gnu.org/gcc-2.95/buildstat.html,,2.95}. ! These lists are updated as new information becomes available. The installation procedure itself is broken into five steps. *************** The installation procedure itself is bro *** 160,166 **** * Final install:: @end menu @end ifinfo ! @ifnotinfo @enumerate @item @uref{download.html,,Downloading the source} --- 169,175 ---- * Final install:: @end menu @end ifinfo ! @ifhtml @enumerate @item @uref{download.html,,Downloading the source} *************** The installation procedure itself is bro *** 173,179 **** @item @uref{finalinstall.html,,Final install} @end enumerate ! @end ifnotinfo Please note that GCC does not support @samp{make uninstall} and probably won't do so in the near future as this would open a can of worms. Instead, --- 182,188 ---- @item @uref{finalinstall.html,,Final install} @end enumerate ! @end ifhtml Please note that GCC does not support @samp{make uninstall} and probably won't do so in the near future as this would open a can of worms. Instead, *************** remove that directory when you do not ne *** 182,187 **** --- 191,202 ---- any longer, and, if shared libraries are installed there as well, no more binaries exist that use them. + @ifhtml + There are also some @uref{old.html,,old installation instructions}, + which are mostly obsolete but still contain some information which has + not yet been merged into the main part of this manual. + @end ifhtml + @html

    *************** Please refer to our @uref{http://gcc.gnu *** 217,226 **** for information on how to obtain GCC@. The full distribution includes the C, C++, Objective-C, Fortran, Java, ! and CHILL compilers. The full distribution also includes runtime libraries ! for C++, Objective-C, Fortran, Java and CHILL. (GCC 3.0 does not ! include CHILL.) In GCC 3.0 and later versions, GNU compiler testsuites ! are also included in the full distribution. If you choose to download specific components, you must download the core GCC distribution plus any language specific distributions you wish to --- 232,241 ---- for information on how to obtain GCC@. The full distribution includes the C, C++, Objective-C, Fortran, Java, ! and Ada (in case of GCC 3.1 and later) compilers. The full distribution ! also includes runtime libraries for C++, Objective-C, Fortran, and Java. ! In GCC 3.0 and later versions, GNU compiler testsuites are also included ! in the full distribution. If you choose to download specific components, you must download the core GCC distribution plus any language specific distributions you wish to *************** affected by this requirement, see *** 302,310 **** @ifnothtml @ref{Specific, host/target specific installation notes}. @end ifnothtml ! @ifnotinfo @uref{specific.html,,host/target specific installation notes}. ! @end ifnotinfo To configure GCC: --- 317,325 ---- @ifnothtml @ref{Specific, host/target specific installation notes}. @end ifnothtml ! @ifhtml @uref{specific.html,,host/target specific installation notes}. ! @end ifhtml To configure GCC: *************** the installation directory for G++ heade *** 390,395 **** --- 405,455 ---- @end table + @item --program-prefix=@var{prefix} + GCC supports some transformations of the names of its programs when + installing them. This option prepends @var{prefix} to the names of + programs to install in @var{bindir} (see above). For example, specifying + @option{--program-prefix=foo-} would result in @samp{gcc} + being installed as @file{/usr/local/bin/foo-gcc}. + + @item --program-suffix=@var{suffix} + Appends @var{suffix} to the names of programs to install in @var{bindir} + (see above). For example, specifying @option{--program-suffix=-3.1} + would result in @samp{gcc} being installed as + @file{/usr/local/bin/gcc-3.1}. + + @item --program-transform-name=@var{pattern} + Applies the @samp{sed} script @var{pattern} to be applied to the names + of programs to install in @var{bindir} (see above). @var{pattern} has to + consist of one or more basic @samp{sed} editing commands, separated by + semicolons. For example, if you want the @samp{gcc} program name to be + transformed to the installed program @file{/usr/local/bin/myowngcc} and + the @samp{g++} program name to be transformed to + @file{/usr/local/bin/gspecial++} without changing other program names, + you could use the pattern + @option{--program-transform-name='s/^gcc$/myowngcc/; s/^g++$/gspecial++/'} + to achieve this effect. + + All three options can be combined and used together, resulting in more + complex conversion patterns. As a basic rule, @var{prefix} (and + @var{suffix}) are prepended (appended) before further transformations + can happen with a special transformation script @var{pattern}. + + As currently implemented, this options only take effect for native + builds; cross compiler binaries' names are not transformed even when a + transformation is explicitly asked for by one of this options. + + For native builds, some of the installed programs are also installed + with the target alias in front of their name, as in + @samp{i686-pc-linux-gnu-gcc}. All of the above transformations happen + before the target alias is prepended to the name - so, specifying + @option{--program-prefix=foo-} and @option{program-suffix=-3.1}, the + resulting binary would be installed as + @file{/usr/local/bin/i686-pc-linux-gnu-foo-gcc-3.1}. + + As a last shortcoming, none of the installed Ada programs are + transformed yet, which will be fixed in some time. + @item --with-local-prefix=@var{dirname} Specify the installation directory for local include files. The default is *************** single-float, biendian, softfloat. *** 556,562 **** @item powerpc*-*-*, rs6000*-*-* aix64, pthread, softfloat, powercpu, powerpccpu, powerpcos, biendian, ! sysv, aix. @end table --- 616,622 ---- @item powerpc*-*-*, rs6000*-*-* aix64, pthread, softfloat, powercpu, powerpccpu, powerpcos, biendian, ! sysv, aix. @end table *************** SPARC@. If configure does not recognize *** 619,624 **** --- 679,690 ---- 603e, or ultrasparc) you provide, please check the configure script for a complete list of supported models. + @item --enable-altivec + Specify that the target supports AltiVec vector enhancements. This + option will adjust the ABI for AltiVec enhancements, as well as generate + AltiVec code when appropriate. This option is only available for + PowerPC systems. + @item --enable-target-optspace Specify that target libraries should be optimized for code space instead of code speed. *************** their runtime libraries should be built. *** 661,669 **** grep language= */config-lang.in @end example Currently, you can use any of the following: ! @code{c}, @code{c++}, @code{f77}, @code{java} and @code{objc}. ! @code{CHILL} is not currently maintained, and will almost ! certainly fail to compile.@* If you do not pass this flag, all languages available in the @file{gcc} sub-tree will be configured. Re-defining @code{LANGUAGES} when calling @samp{make bootstrap} @strong{does not} work anymore, as those --- 727,734 ---- grep language= */config-lang.in @end example Currently, you can use any of the following: ! @code{ada}, @code{c}, @code{c++}, @code{f77}, @code{java}, @code{objc}. ! Building the Ada compiler has special requirements, see below.@* If you do not pass this flag, all languages available in the @file{gcc} sub-tree will be configured. Re-defining @code{LANGUAGES} when calling @samp{make bootstrap} @strong{does not} work anymore, as those *************** ignores @code{catgets} and instead uses *** 740,748 **** --- 805,827 ---- @code{gettext} library. The @option{--with-catgets} option causes the build procedure to use the host's @code{catgets} in this situation. + @item --with-libiconv-prefix=@var{dir} + Search for libiconv header files in @file{@var{dir}/include} and + libiconv library files in @file{@var{dir}/lib}. + @item --with-system-zlib Use installed zlib rather than that included with GCC@. This option only applies if the Java front end is being built. + + @item --enable-obsolete + Enable configuration for an obsoleted system. If you attempt to + configure GCC for a system (build, host, or target) which has been + obsoleted, and you do not specify this flag, configure will halt with an + error message. + + All support for systems which have been obsoleted in one release of GCC + is removed entirely in the next major release, unless someone steps + forward to maintain the port. @end table Some options which only apply to building cross compilers: *************** runtime libraries. *** 798,803 **** --- 877,884 ---- We @strong{highly} recommend that GCC be built using GNU make; other versions may work, then again they might not. + GNU make is required for compiling GNAT (the Ada compiler) and the Java + runtime library. (For example, many broken versions of make will fail if you use the recommended setup where @var{objdir} is different from @var{srcdir}. *************** parser sources, releases contain the Bis *** 837,843 **** not need Bison installed to build them. When building from CVS or snapshots, or if you modify Texinfo ! documentation, you need version 4.0 or later of Texinfo installed if you want Info documentation to be regenerated. Releases contain Info documentation pre-built for the unmodified documentation in the release. --- 918,924 ---- not need Bison installed to build them. When building from CVS or snapshots, or if you modify Texinfo ! documentation, you need version 4.1 or later of Texinfo installed if you want Info documentation to be regenerated. Releases contain Info documentation pre-built for the unmodified documentation in the release. *************** gperf. *** 854,860 **** @item Build target tools for use by the compiler such as binutils (bfd, binutils, gas, gprof, ld, and opcodes) ! if they have been individually linked or moved into the top level GCC source tree before configuring. @item --- 935,941 ---- @item Build target tools for use by the compiler such as binutils (bfd, binutils, gas, gprof, ld, and opcodes) ! if they have been individually linked or moved into the top level GCC source tree before configuring. @item *************** when building GCC@. You can use a bigge *** 955,960 **** --- 1036,1096 ---- you like. In most cases, it won't help to use a number bigger than the number of processors in your machine. + @section Building the Ada compiler + + In order to build GNAT, the Ada compiler, you need a working GNAT + compiler (GNAT version 3.13 or later, or GCC version 3.1 or later), + since the Ada front end is written in Ada (with some + GNAT-specific extensions), and GNU make. + + However, you do not need a full installation of GNAT, just the GNAT + binary @file{gnat1}, a copy of @file{gnatbind}, and a compiler driver + which can deal with Ada input (by invoking the @file{gnat1} binary). + You can specify this compiler driver by setting the @env{ADAC} + environment variable at the configure step. @command{configure} can + detect the driver automatically if it has got a common name such as + @command{gcc} or @command{gnatgcc}. Of course, you still need a working + C compiler (the compiler driver can be different or not). + @command{configure} does not test whether the GNAT installation works + and has a sufficiently recent version; if too old a GNAT version is + installed, the build will fail unless @option{--enable-languages} is + used to disable building the Ada front end. + + Additional build tools (such as @command{gnatmake}) or a working GNAT + run-time library installation are usually @emph{not} required. However, + if you want to boostrap the compiler using a minimal version of GNAT, + you have to issue the following commands before invoking @samp{make + boostrap} (this assumes that you start with an unmodified and consistent + source distribution): + + @example + cd @var{srcdir}/gcc/ada + touch treeprs.ads [es]info.h nmake.ad[bs] + @end example + + At the moment, the GNAT library and several tools for GNAT are not built + by @samp{make bootstrap}. You have to invoke + @samp{make gnatlib_and_tools} in the @file{@var{objdir}/gcc} + subdirectory before proceeding with the next steps. + + For example, you can build a native Ada compiler by issuing the + following commands (assuming @command{make} is GNU make): + + @example + cd @var{objdir} + @var{srcdir}/configure --enable-languages=c,ada + cd @var{srcdir}/gcc/ada + touch treeprs.ads [es]info.h nmake.ad[bs] + cd @var{objdir} + make bootstrap + cd gcc + make gnatlib_and_tools + cd .. + @end example + + Currently, when compiling the Ada front end, you cannot use the parallel + build feature described in the previous section. + @html


    *************** the number of processors in your machine *** 980,994 **** @cindex Installing GCC: Testing @cindex Testsuite ! Before you install GCC, you might wish to run the testsuite. This ! step is optional and may require you to download additional software. First, you must have @uref{download.html,,downloaded the testsuites}. ! The full distribution contains testsuites; only if you downloaded the ! ``core'' compiler plus any front ends, you do not have the testsuites. ! Second, you must have a @uref{http://www.gnu.org/software/dejagnu/,,current version of DejaGnu} installed; dejagnu 1.3 is not sufficient. Now you may need specific preparations: --- 1116,1138 ---- @cindex Installing GCC: Testing @cindex Testsuite ! Before you install GCC, we encourage you to run the testsuites and to ! compare your results with results from a similar configuration that have ! been submitted to the ! @uref{http://gcc.gnu.org/ml/gcc-testresults/,,gcc-testresults mailing list}. ! This step is optional and may require you to download additional software, ! but it can give you confidence in your new GCC installation or point out ! problems before you install and start using your new GCC. First, you must have @uref{download.html,,downloaded the testsuites}. ! These are part of the full distribution, but if you downloaded the ! ``core'' compiler plus any front ends, you must download the testsuites ! separately. ! Second, you must have the testing tools installed. This includes ! a @uref{http://www.gnu.org/software/dejagnu/,,current version of DejaGnu}; dejagnu 1.3 is not sufficient. + It also includes Tcl and Expect; the DejaGnu site has links to these. Now you may need specific preparations: *************** in @file{@var{libdir}} (normally @file{@ *** 1141,1148 **** parts of the compiler in @file{@var{libdir}/gcc-lib}; documentation in info format in @file{@var{infodir}} (normally @file{@var{prefix}/info}). ! If you don't mind, please quickly review the ! @uref{http://gcc.gnu.org/gcc-3.0/buildstat.html,,3.0 build status page}. If your system is not listed for the version of GCC that you built, send a note to @email{gcc@@gcc.gnu.org} indicating --- 1285,1295 ---- parts of the compiler in @file{@var{libdir}/gcc-lib}; documentation in info format in @file{@var{infodir}} (normally @file{@var{prefix}/info}). ! If you built a released version of GCC using @samp{make bootstrap} then please ! quickly review the build status page for ! @uref{http://gcc.gnu.org/gcc-3.1/buildstat.html,,3.1}, ! @uref{http://gcc.gnu.org/gcc-3.0/buildstat.html,,3.0}, or ! @uref{http://gcc.gnu.org/gcc-2.95/buildstat.html,,2.95}. If your system is not listed for the version of GCC that you built, send a note to @email{gcc@@gcc.gnu.org} indicating *************** This tells us which version of GCC you b *** 1160,1165 **** --- 1307,1319 ---- configure. @item + Whether you enabled all languages or a subset of them. If you used a + full distribution then this information is part of the configure + options in the output of @samp{gcc -v}, but if you downloaded the + ``core'' compiler plus additional front ends then it isn't apparent + which ones you built unless you tell us about it. + + @item If the build was for GNU/Linux, also include: @itemize @bullet @item *************** If you find a bug, please report it foll *** 1199,1205 **** @uref{../bugs.html,,bug reporting guidelines}. If you want to print the GCC manuals, do @samp{cd @var{objdir}; make ! dvi}. You will need to have @command{texi2dvi} (version at least 4.0) and @TeX{} installed. This creates a number of @file{.dvi} files in subdirectories of @file{@var{objdir}}; these may be converted for printing with programs such as @command{dvips}. You can also --- 1353,1359 ---- @uref{../bugs.html,,bug reporting guidelines}. If you want to print the GCC manuals, do @samp{cd @var{objdir}; make ! dvi}. You will need to have @command{texi2dvi} (version at least 4.1) and @TeX{} installed. This creates a number of @file{.dvi} files in subdirectories of @file{@var{objdir}}; these may be converted for printing with programs such as @command{dvips}. You can also *************** works. *** 1316,1322 **** @c ***Specific**************************************************************** @ifnothtml @comment node-name, next, previous, up ! @node Specific, GNU Free Documentation License, Binaries, Top @end ifnothtml @ifset specifichtml @html --- 1470,1476 ---- @c ***Specific**************************************************************** @ifnothtml @comment node-name, next, previous, up ! @node Specific, Old, Binaries, Top @end ifnothtml @ifset specifichtml @html *************** works. *** 1334,1344 **** Please read this document carefully @emph{before} installing the GNU Compiler Collection on your machine. - A - @uref{http://gcc.gnu.org/gcc-3.0/buildstat.html,,list of successful builds} - for GCC 3.0 releases is available at our web pages. This list is updated - as new information becomes available. - @ifhtml @itemize @item --- 1488,1493 ---- *************** as new information becomes available. *** 1352,1357 **** --- 1501,1508 ---- @item @uref{#alpha*-dec-osf*,,alpha*-dec-osf*} @item + @uref{#alphaev5-cray-unicosmk*,,alphaev5-cray-unicosmk*} + @item @uref{#arc-*-elf,,arc-*-elf} @item @uref{#arm-*-aout,,arm-*-aout} *************** as new information becomes available. *** 1410,1418 **** @item @uref{#ix86-sequent-bsd,,i?86-sequent-bsd} @item ! @uref{#ix86-sequent-ptx1*,,i?86-sequent-ptx1*, i?86-sequent-ptx2*} ! @item ! @uref{#ix86-*-sysv3*,,i?86-*-sysv3*} @item @uref{#i860-intel-osf*,,i860-intel-osf*} @item --- 1561,1567 ---- @item @uref{#ix86-sequent-bsd,,i?86-sequent-bsd} @item ! @uref{#ix86-sequent-ptx1*,,i?86-sequent-ptx1*, i?86-sequent-ptx2*, i?86-sequent-sysv3*} @item @uref{#i860-intel-osf*,,i860-intel-osf*} @item *************** as new information becomes available. *** 1438,1444 **** @item @uref{#m68k-bull-sysv,,m68k-bull-sysv} @item ! @uref{#m68k-crds-unox,,m68k-crds-unox} @item @uref{#m68k-hp-hpux,,m68k-hp-hpux} @item --- 1587,1593 ---- @item @uref{#m68k-bull-sysv,,m68k-bull-sysv} @item ! @uref{#m68k-crds-unos,,m68k-crds-unos} @item @uref{#m68k-hp-hpux,,m68k-hp-hpux} @item *************** as new information becomes available. *** 1482,1487 **** --- 1631,1638 ---- @item @uref{#powerpc*-*-*,,powerpc*-*-*, powerpc-*-sysv4} @item + @uref{#powerpc-*-darwin*,,powerpc-*-darwin*} + @item @uref{#powerpc-*-elf,,powerpc-*-elf, powerpc-*-sysv4} @item @uref{#powerpc-*-linux-gnu*,,powerpc-*-linux-gnu*} *************** as new information becomes available. *** 1514,1521 **** @item @uref{#sparc-sun-solaris2.7,,sparc-sun-solaris2.7} @item - @uref{#*-*-solaris2.8,,*-*-solaris2.8} - @item @uref{#sparc-sun-sunos4*,,sparc-sun-sunos4*} @item @uref{#sparc-unknown-linux-gnulibc1,,sparc-unknown-linux-gnulibc1} --- 1665,1670 ---- *************** as new information becomes available. *** 1524,1529 **** --- 1673,1680 ---- @item @uref{#sparc64-*-*,,sparc64-*-*} @item + @uref{#sparcv9-*-solaris2*,,sparcv9-*-solaris2*} + @item @uref{#*-*-sysv*,,*-*-sysv*} @item @uref{#vax-dec-ultrix,,vax-dec-ultrix} *************** as new information becomes available. *** 1553,1559 ****


    @end html @heading @anchor{1750a-*-*}1750a-*-* ! MIL-STD-1750A processors. The MIL-STD-1750A cross configuration produces output for @code{as1750}, an assembler/linker available under the GNU General Public --- 1704,1710 ----
    @end html @heading @anchor{1750a-*-*}1750a-*-* ! MIL-STD-1750A processors. This target is obsoleted in GCC 3.1. The MIL-STD-1750A cross configuration produces output for @code{as1750}, an assembler/linker available under the GNU General Public *************** GCC@. *** 1596,1605 **** @end html @heading @anchor{a29k}a29k AMD Am29k-family processors. These are normally used in embedded ! applications. There are no standard Unix configurations. ! This configuration ! corresponds to AMD's standard calling sequence and binary interface ! and is compatible with other 29k tools. You may need to make a variant of the file @file{a29k.h} for your particular configuration. --- 1747,1757 ---- @end html @heading @anchor{a29k}a29k AMD Am29k-family processors. These are normally used in embedded ! applications. This configuration corresponds to AMD's standard calling ! sequence and binary interface and is compatible with other 29k tools. ! ! AMD has abandoned this processor. All existing a29k targets are obsoleted ! in GCC 3.1. You may need to make a variant of the file @file{a29k.h} for your particular configuration. *************** Systems using processors that implement *** 1636,1641 **** --- 1788,1796 ---- are running the DEC/Compaq Unix (DEC OSF/1, Digital UNIX, or Compaq Tru64 UNIX) operating system, for example the DEC Alpha AXP systems. + Support for versions before @code{alpha*-dec-osf4} is obsoleted in GCC + 3.1. (These are the versions which identify themselves as DEC OSF/1.) + In Tru64 UNIX V5.1, Compaq introduced a new assembler that does not currently (2001-06-13) work with @command{mips-tfile}. As a workaround, we need to use the old assembler, invoked via the barely documented *************** are supported on Tru64 UNIX, so you must *** 1657,1665 **** @option{--with-gnu-as} or @option{--with-gnu-ld}. The @option{--enable-threads} options isn't supported yet. A patch is ! in preparation for a future release. The Java runtime library has been ! reported to work on Tru64 UNIX V4.0F, V5.0, and V5.1, so you may try ! @option{--enable-libgcj} and report your results. GCC writes a @samp{.verstamp} directive to the assembler output file unless it is built as a cross-compiler. It gets the version to use from --- 1812,1818 ---- @option{--with-gnu-as} or @option{--with-gnu-ld}. The @option{--enable-threads} options isn't supported yet. A patch is ! in preparation for a future release. GCC writes a @samp{.verstamp} directive to the assembler output file unless it is built as a cross-compiler. It gets the version to use from *************** provide a fix shortly. *** 1707,1712 **** --- 1860,1891 ----


    @end html + @heading @anchor{alphaev5-cray-unicosmk*}alphaev5-cray-unicosmk* + Cray T3E systems running Unicos/Mk. + + This port is incomplete and has many known bugs. We hope to improve the + support for this target soon. Currently, only the C front end is supported, + and it is not possible to build parallel applications. Cray modules are not + supported; in particular, Craylibs are assumed to be in + @file{/opt/ctl/craylibs/craylibs}. + + You absolutely @strong{must} use GNU make on this platform. Also, you + need to tell GCC where to find the assembler and the linker. The + simplest way to do so is by providing @option{--with-as} and + @option{--with-ld} to @file{configure}, e.g.@: + + @samp{configure --with-as=/opt/ctl/bin/cam --with-ld=/opt/ctl/bin/cld + --enable-languages=c} + + The comparison test during @samp{make bootstrap} fails on Unicos/Mk + because the assembler inserts timestamps into object files. You should + be able to work around this by doing @samp{make all} after getting this + failure. + + @html +

    +
    + @end html @heading @anchor{arc-*-elf}arc-*-elf Argonaut ARC processor. This configuration is intended for embedded systems. *************** We require GNU binutils 2.10 or newer. *** 1745,1750 **** --- 1924,1931 ---- @end html @heading @anchor{arm-*-riscix}arm-*-riscix The ARM2 or ARM3 processor running RISC iX, Acorn's port of BSD Unix. + This configuration is obsoleted in GCC 3.1. + If you are running a version of RISC iX prior to 1.2 then you must specify the version number during configuration. Note that the assembler shipped with RISC iX does not support stabs debugging *************** can also be obtained from: *** 1828,1833 **** --- 2009,2053 ----


    @end html + @heading @anchor{cris}CRIS + + CRIS is the CPU architecture in Axis Communications ETRAX system-on-a-chip + series. These are used in embedded applications. + + @ifnothtml + @xref{CRIS Options,, CRIS Options, gcc, Using and Porting the GNU Compiler + Collection (GCC)}, + @end ifnothtml + @ifhtml + See ``CRIS Options'' in the main manual + @end ifhtml + for a list of CRIS-specific options. + + There are a few different CRIS targets: + @table @code + @item cris-axis-aout + Old target. Includes a multilib for the @samp{elinux} a.out-based + target. No multilibs for newer architecture variants. + @item cris-axis-elf + Mainly for monolithic embedded systems. Includes a multilib for the + @samp{v10} core used in @samp{ETRAX 100 LX}. + @item cris-axis-linux-gnu + A GNU/Linux port for the CRIS architecture, currently targeting + @samp{ETRAX 100 LX} by default. + @end table + + For @code{cris-axis-aout} and @code{cris-axis-elf} you need binutils 2.11 + or newer. For @code{cris-axis-linux-gnu} you need binutils 2.12 or newer. + + Pre-packaged tools can be obtained from + @uref{ftp://ftp.axis.com/pub/axis/tools/cris/compiler-kit/}. More + information about this platform is available at + @uref{http://developer.axis.com/}. + + @html +

    +
    + @end html @heading @anchor{dos}DOS Please have a look at our @uref{binaries.html,,binaries page}. *************** A port to the AT&T DSP1610 family of pro *** 1852,1858 **** The version of binutils installed in @file{/usr/bin} is known to work unless otherwise specified in any per-architecture notes. However, binutils ! 2.11 is known to improve overall testsuite results. For FreeBSD 1, FreeBSD 2 or any mutant a.out versions of FreeBSD 3: All configuration support and files as shipped with GCC 2.95 are still in --- 2072,2078 ---- The version of binutils installed in @file{/usr/bin} is known to work unless otherwise specified in any per-architecture notes. However, binutils ! 2.12.1 or greater is known to improve overall testsuite results. For FreeBSD 1, FreeBSD 2 or any mutant a.out versions of FreeBSD 3: All configuration support and files as shipped with GCC 2.95 are still in *************** place. FreeBSD 2.2.7 has been known to *** 1860,1865 **** --- 2080,2087 ---- it is unknown which version of binutils was used (it is assumed that it was the system copy in @file{/usr/bin}) and C++ EH failures were noted. + Support for FreeBSD 1 is obsoleted in GCC 3.1. + For FreeBSD using the ELF file format: DWARF 2 debugging is now the default for all CPU architectures. It had been the default on FreeBSD/alpha since its inception. You may use @option{-gstabs} instead *************** of the configuration used in the stock F *** 1870,1879 **** particular, @option{--enable-threads} is now configured by default. However, as a general user, do not attempt to replace the system compiler with this release. Known to bootstrap and check with good ! results on FreeBSD 3.0, 3.4, 4.0, 4.2, 4.3 and 5-CURRENT@. ! At this time, @option{--enable-threads} is not compatible with ! @option{--enable-libgcj} on FreeBSD@. @html

    --- 2092,2115 ---- particular, @option{--enable-threads} is now configured by default. However, as a general user, do not attempt to replace the system compiler with this release. Known to bootstrap and check with good ! results on FreeBSD 3.0, 3.4, 4.0, 4.2, 4.3, 4.4, 4.5-STABLE and 5-CURRENT@. ! In principle, @option{--enable-threads} is now compatible with ! @option{--enable-libgcj} on FreeBSD@. However, it has only been built ! and tested on i386-*-freebsd4.5 and alpha-*-freebsd5.0. The static ! library may be incorrectly built (symbols are missing at link time). ! There is a rare timing-based startup hang (probably involves an ! assupmtion about the thread library). Multi-threaded boehm-gc (required for ! libjava) exposes severe threaded signal-handling bugs on FreeBSD before ! 4.5-RELEASE. The alpha port may not fully bootstrap without some manual ! intervention: gcjh will crash with a floating-point exception while ! generating @file{java/lang/Double.h} (just copy the version built on ! i386-*-freebsd* and rerun the top-level gmake with no arguments and it ! should properly complete the bootstrap). Other CPU architectures ! supported by FreeBSD will require additional configuration tuning in, at ! the very least, both boehm-gc and libffi. ! ! Shared @file{libgcc_s.so} is now built and installed by default. @html

    *************** At this time, @option{--enable-threads} *** 1883,1888 **** --- 2119,2126 ---- The Elxsi's C compiler has known limitations that prevent it from compiling GCC@. Please contact @email{mrs@@wrs.com} for more details. + Support for this processor is obsoleted in GCC 3.1. + @html


    *************** bootstrap}. *** 1974,1987 **** @end html @heading @anchor{hppa*-hp-hpux11}hppa*-hp-hpux11 ! GCC 3.0 supports HP-UX 11. You must use GNU binutils 2.11 or above on this platform. Thread support is not currently implemented for this platform, so @option{--enable-threads} does not work. See @uref{http://gcc.gnu.org/ml/gcc-prs/2002-01/msg00551.html} and @uref{http://gcc.gnu.org/ml/gcc-bugs/2002-01/msg00663.html}. GCC 2.95.x is not supported under HP-UX 11 and cannot be used to ! compile GCC 3.0. Refer to @uref{binaries.html,,binaries} for information ! about obtaining precompiled GCC binaries for HP-UX. @html

    --- 2212,2225 ---- @end html @heading @anchor{hppa*-hp-hpux11}hppa*-hp-hpux11 ! GCC 3.0 and up support HP-UX 11. You must use GNU binutils 2.11 or above on this platform. Thread support is not currently implemented for this platform, so @option{--enable-threads} does not work. See @uref{http://gcc.gnu.org/ml/gcc-prs/2002-01/msg00551.html} and @uref{http://gcc.gnu.org/ml/gcc-bugs/2002-01/msg00663.html}. GCC 2.95.x is not supported under HP-UX 11 and cannot be used to ! compile GCC 3.0 and up. Refer to @uref{binaries.html,,binaries} for ! information about obtaining precompiled GCC binaries for HP-UX. @html

    *************** glibc 2.2.4 whether patches for GCC 3.0 *** 2026,2032 **** @heading @anchor{ix86-*-linux*oldld}i?86-*-linux*oldld Use this configuration to generate @file{a.out} binaries on Linux-based GNU systems if you do not have gas/binutils version 2.5.2 or later ! installed. This is an obsolete configuration. @html

    --- 2264,2272 ---- @heading @anchor{ix86-*-linux*oldld}i?86-*-linux*oldld Use this configuration to generate @file{a.out} binaries on Linux-based GNU systems if you do not have gas/binutils version 2.5.2 or later ! installed. ! ! This configuration is obsoleted in GCC 3.1. @html

    *************** have installed. *** 2180,2185 **** --- 2420,2427 ----
    @end html @heading @anchor{ix86-*-isc}i?86-*-isc + This configuration is obsoleted in GCC 3.1. + It may be a good idea to link with GNU malloc instead of the malloc that comes with the system. *************** In ISC version 4.1, @command{sed} core d *** 2190,2204 ****


    @end html - @heading @anchor{ix86-*-esix}i?86-*-esix - It may be good idea to link with GNU malloc instead of the malloc that - comes with the system. - - @html -

    -
    - @end html @heading @anchor{ix86-ibm-aix}i?86-ibm-aix You need to use GAS version 2.1 or later, and LD from GNU binutils version 2.2 or later. --- 2432,2440 ----


    @end html @heading @anchor{ix86-ibm-aix}i?86-ibm-aix + This configuration is obsoleted in GCC 3.1. + You need to use GAS version 2.1 or later, and LD from GNU binutils version 2.2 or later. *************** GNU binutils version 2.2 or later. *** 2207,2236 ****
    @end html @heading @anchor{ix86-sequent-bsd}i?86-sequent-bsd Go to the Berkeley universe before compiling. @html


    @end html ! @heading @anchor{ix86-sequent-ptx1*}i?86-sequent-ptx1*, i?86-sequent-ptx2* You must install GNU @command{sed} before running @command{configure}. - @html -

    -
    - @end html - @heading @anchor{#ix86-*-sysv3*}i?86-*-sysv3* The @code{fixproto} shell script may trigger a bug in the system shell. If you encounter this problem, upgrade your operating system or use @command{bash} (the GNU shell) to run @code{fixproto}. - @html


    @end html @heading @anchor{i860-intel-osf*}i860-intel-osf* On the Intel Paragon (an i860 machine), if you are using operating system version 1.0, you will get warnings or errors about redefinition of @code{va_arg} when you build GCC@. --- 2443,2472 ----
    @end html @heading @anchor{ix86-sequent-bsd}i?86-sequent-bsd + This configuration is obsoleted in GCC 3.1. + Go to the Berkeley universe before compiling. @html


    @end html ! @heading @anchor{ix86-sequent-ptx1*}i?86-sequent-ptx1*, i?86-sequent-ptx2*, i?86-sequent-sysv3* ! This configuration is obsoleted in GCC 3.1. ! You must install GNU @command{sed} before running @command{configure}. The @code{fixproto} shell script may trigger a bug in the system shell. If you encounter this problem, upgrade your operating system or use @command{bash} (the GNU shell) to run @code{fixproto}. @html


    @end html @heading @anchor{i860-intel-osf*}i860-intel-osf* + All support for the i860 processor is obsoleted in GCC 3.1. + On the Intel Paragon (an i860 machine), if you are using operating system version 1.0, you will get warnings or errors about redefinition of @code{va_arg} when you build GCC@. *************** and function declarations in the origina *** 2343,2359 **** not prevent the linker from producing a correct library or runnable executable. - GCC's exception handling implementation stores process-specific data in - the shared library which prevents exception handling from working - correctly on AIX in a default installation. To work around this, the - shared objects need to be loaded in the process private segment to - prevent them from being shared and marked read-only. This is - accomplished on AIX by installing the shared libraries - (@file{libgcc_s.a} and @file{libstdc++.a}) with file permissions - disallowing read-other (@samp{chmod a+x,o-r}). If the shared libraries - have been used, the shared library segment can be cleaned using the - @samp{/usr/sbin/slibclean} command. - AIX 4.3 utilizes a ``large format'' archive to support both 32-bit and 64-bit object modules. The routines provided in AIX 4.3.0 and AIX 4.3.1 to parse archive libraries did not handle the new format correctly. --- 2579,2584 ---- *************** applications. There are no standard Uni *** 2436,2442 ****
    @end html @heading @anchor{m68k-altos}m68k-altos ! Altos 3068. You must use the GNU assembler, linker and debugger. Also, you must fix a kernel bug. @html --- 2661,2669 ----
    @end html @heading @anchor{m68k-altos}m68k-altos ! Altos 3068. This configuration is obsoleted in GCC 3.1. ! ! You must use the GNU assembler, linker and debugger. Also, you must fix a kernel bug. @html *************** Also, you must fix a kernel bug. *** 2445,2450 **** --- 2672,2679 ---- @end html @heading @anchor{m68k-apple-aux}m68k-apple-aux Apple Macintosh running A/UX@. + This configuration is obsoleted in GCC 3.1. + You may configure GCC to use either the system assembler and linker or the GNU assembler and linker. You should use the GNU configuration if you can, especially if you also want to use G++. You enable *************** bootstrap. Binaries are available from *** 2473,2479 ****
    @end html @heading @anchor{m68k-bull-sysv}m68k-bull-sysv ! Bull DPX/2 series 200 and 300 with BOS-2.00.45 up to BOS-2.01. GCC works either with native assembler or GNU assembler. You can use GNU assembler with native COFF generation by providing @option{--with-gnu-as} to the configure script or use GNU assembler with stabs-in-COFF encapsulation --- 2702,2711 ----
    @end html @heading @anchor{m68k-bull-sysv}m68k-bull-sysv ! Bull DPX/2 series 200 and 300 with BOS-2.00.45 up to BOS-2.01. ! This configuration is obsoleted in GCC 3.1. ! ! GCC works either with native assembler or GNU assembler. You can use GNU assembler with native COFF generation by providing @option{--with-gnu-as} to the configure script or use GNU assembler with stabs-in-COFF encapsulation *************** assembler or for availability of the DPX *** 2485,2491 ****


    @end html ! @heading @anchor{m68k-crds-unox}m68k-crds-unox Use @samp{configure unos} for building on Unos. The Unos assembler is named @code{casm} instead of @code{as}. For some --- 2717,2723 ----


    @end html ! @heading @anchor{m68k-crds-unos}m68k-crds-unos Use @samp{configure unos} for building on Unos. The Unos assembler is named @code{casm} instead of @code{as}. For some *************** to look like: *** 2585,2590 **** --- 2817,2823 ----
    @end html @heading @anchor{m68k-*-nextstep*}m68k-*-nextstep* + These configurations are obsoleted in GCC 3.1. Current GCC versions probably do not work on version 2 of the NeXT operating system. *************** does not happen on 3.1. *** 2596,2602 **** You absolutely @strong{must} use GNU sed and GNU make on this platform. ! On NeXTSTEP 3.x where x < 3 the build of GCC will abort during stage1 with an error message like this: @example --- 2829,2835 ---- You absolutely @strong{must} use GNU sed and GNU make on this platform. ! On NeXTSTEP 3.x where x < 3 the build of GCC will abort during stage1 with an error message like this: @example *************** It is reported that you may need the GNU *** 2671,2676 **** --- 2904,2911 ---- @end html @heading @anchor{m88k-*-svr3}m88k-*-svr3 Motorola m88k running the AT&T/Unisoft/Motorola V.3 reference port. + These configurations are obsoleted in GCC 3.1. + These systems tend to use the Green Hills C, revision 1.8.5, as the standard C compiler. There are apparently bugs in this compiler that result in object files differences between stage 2 and stage 3. If this *************** if you have one. *** 2687,2693 ****
    @end html @heading @anchor{m88k-*-dgux}m88k-*-dgux ! Motorola m88k running DG/UX@. To build 88open BCS native or cross compilers on DG/UX, specify the configuration name as @samp{m88k-*-dguxbcs} and build in the 88open BCS software development environment. To build ELF native or cross compilers on DG/UX, specify --- 2922,2931 ----
    @end html @heading @anchor{m88k-*-dgux}m88k-*-dgux ! Motorola m88k running DG/UX@. ! These configurations are obsoleted in GCC 3.1. ! ! To build 88open BCS native or cross compilers on DG/UX, specify the configuration name as @samp{m88k-*-dguxbcs} and build in the 88open BCS software development environment. To build ELF native or cross compilers on DG/UX, specify *************** configuration based on the current softw *** 2704,2710 ****
    @end html @heading @anchor{m88k-tektronix-sysv3}m88k-tektronix-sysv3 ! Tektronix XD88 running UTekV 3.2e. Do not turn on optimization while building stage1 if you bootstrap with the buggy Green Hills compiler. Also, the bundled LAI System V NFS is buggy so if you build in an NFS mounted --- 2942,2951 ----
    @end html @heading @anchor{m88k-tektronix-sysv3}m88k-tektronix-sysv3 ! Tektronix XD88 running UTekV 3.2e. ! These configurations are obsoleted in GCC 3.1. ! ! Do not turn on optimization while building stage1 if you bootstrap with the buggy Green Hills compiler. Also, the bundled LAI System V NFS is buggy so if you build in an NFS mounted *************** linker unless you pass an explicit @opti *** 2749,2756 **** @option{-call_shared} switch. @heading @anchor{mips-mips-bsd}mips-mips-bsd ! MIPS machines running the MIPS operating system in BSD mode. It's ! possible that some old versions of the system lack the functions @code{memcpy}, @code{memmove}, @code{memcmp}, and @code{memset}. If your system lacks these, you must remove or undo the definition of @code{TARGET_MEM_FUNCTIONS} in @file{mips-bsd.h}. --- 2990,2999 ---- @option{-call_shared} switch. @heading @anchor{mips-mips-bsd}mips-mips-bsd ! MIPS machines running the MIPS operating system in BSD mode. ! These configurations are obsoleted in GCC 3.1. ! ! It's possible that some old versions of the system lack the functions @code{memcpy}, @code{memmove}, @code{memcmp}, and @code{memset}. If your system lacks these, you must remove or undo the definition of @code{TARGET_MEM_FUNCTIONS} in @file{mips-bsd.h}. *************** compilers, you may need to add @option{- *** 2769,2774 **** --- 3012,3019 ----
    @end html @heading @anchor{mips-dec-*}mips-dec-* + These configurations are obsoleted in GCC 3.1. + MIPS-based DECstations can support three different personalities: Ultrix, DEC OSF/1, and OSF/rose. (Alpha-based DECstation products have a configuration name beginning with @samp{alpha*-dec}.) To configure GCC *************** compilers, you may need to add @option{- *** 2801,2806 **** --- 3046,3053 ----
    @end html @heading @anchor{mips-mips-riscos*}mips-mips-riscos* + These configurations are obsoleted in GCC 3.1. + If you use the MIPS C compiler to bootstrap, it may be necessary to increase its table size for switch statements with the @option{-Wf,-XNg1500} option. If you use the @option{-O2} *************** avoiding a linker bug. *** 2843,2848 **** --- 3090,3096 ----
    @end html @heading @anchor{mips-sgi-irix4}mips-sgi-irix4 + This configuration is obsoleted in GCC 3.1. In order to compile GCC on an SGI running IRIX 4, the ``c.hdr.lib'' option must be installed from the CD-ROM supplied from Silicon Graphics. *************** to increase its table size for switch st *** 2901,2910 **** optimization option, you also need to use @option{-Olimit 3000}. To enable debugging under IRIX 5, you must use GNU @command{as} 2.11.2 ! or later, and use the @option{--with-gnu-as} configure option when configuring GCC. GNU @command{as} is distributed as part of the binutils package. ! When using release 2.11.2, you need to apply a patch @uref{http://sources.redhat.com/ml/binutils/2001-07/msg00352.html,,http://sources.redhat.com/ml/binutils/2001-07/msg00352.html} which will be included in the next release of binutils. --- 3149,3158 ---- optimization option, you also need to use @option{-Olimit 3000}. To enable debugging under IRIX 5, you must use GNU @command{as} 2.11.2 ! or later, and use the @option{--with-gnu-as} configure option when configuring GCC. GNU @command{as} is distributed as part of the binutils package. ! When using release 2.11.2, you need to apply a patch @uref{http://sources.redhat.com/ml/binutils/2001-07/msg00352.html,,http://sources.redhat.com/ml/binutils/2001-07/msg00352.html} which will be included in the next release of binutils. *************** information about using GCC on IRIX plat *** 3000,3016 ****
    @end html @heading @anchor{mips-sony-sysv}mips-sony-sysv ! Sony MIPS NEWS@. This works in NEWSOS 5.0.1, but not in 5.0.2 (which ! uses ELF instead of COFF)@. Support for 5.0.2 will probably be provided ! soon by volunteers. In particular, the linker does not like the ! code generated by GCC when shared libraries are linked in. @html


    @end html @heading @anchor{ns32k-encore}ns32k-encore Encore ns32000 system. Encore systems are supported only under BSD@. @html --- 3248,3266 ----
    @end html @heading @anchor{mips-sony-sysv}mips-sony-sysv ! Sony MIPS NEWS@. This configuration is obsoleted in GCC 3.1. + This works in NEWSOS 5.0.1, but not in 5.0.2 (which uses ELF instead of + COFF)@. In particular, the linker does not like the code generated by + GCC when shared libraries are linked in. @html


    @end html @heading @anchor{ns32k-encore}ns32k-encore + This configuration is obsoleted in GCC 3.1. + Encore ns32000 system. Encore systems are supported only under BSD@. @html *************** Encore ns32000 system. Encore systems a *** 3018,3032 ****
    @end html @heading @anchor{ns32k-*-genix}ns32k-*-genix ! National Semiconductor ns32000 system. Genix has bugs in @code{alloca} ! and @code{malloc}; you must get the compiled versions of these from GNU ! Emacs. @html


    @end html @heading @anchor{ns32k-sequent}ns32k-sequent Go to the Berkeley universe before compiling. @html --- 3268,3286 ----
    @end html @heading @anchor{ns32k-*-genix}ns32k-*-genix ! National Semiconductor ns32000 system. This configuration is obsoleted ! in GCC 3.1. ! ! Genix has bugs in @code{alloca} and @code{malloc}; you must get the ! compiled versions of these from GNU Emacs. @html


    @end html @heading @anchor{ns32k-sequent}ns32k-sequent + This configuration is obsoleted in GCC 3.1. + Go to the Berkeley universe before compiling. @html *************** Go to the Berkeley universe before compi *** 3034,3042 ****
    @end html @heading @anchor{ns32k-utek}ns32k-utek ! UTEK ns32000 system (``merlin''). The C compiler that comes with this ! system cannot compile GCC; contact @samp{tektronix!reed!mason} to get ! binaries of GCC for bootstrapping. @html --- 3288,3298 ----
    @end html @heading @anchor{ns32k-utek}ns32k-utek ! UTEK ns32000 system (``merlin''). This configuration is obsoleted in ! GCC 3.1. ! ! The C compiler that comes with this system cannot compile GCC; contact ! @samp{tektronix!reed!mason} to get binaries of GCC for bootstrapping. @html *************** switch by using the configure option @op *** 3052,3057 **** --- 3308,3347 ----


    @end html + @heading @anchor{powerpc-*-darwin*}powerpc-*-darwin* + PowerPC running Darwin (Mac OS X kernel). + + GCC 3.0 does not support Darwin, but 3.1 and later releases will work. + + Pre-installed versions of Mac OS X may not include any developer tools, + meaning that you will not be able to build GCC from source. Tool + binaries are available at + @uref{http://www.opensource.apple.com/projects/darwin} (free + registration required). + + Versions of the assembler prior to ``cctools-364'' cannot handle the + 4-argument form of rlwinm and related mask-using instructions. Darwin + 1.3 (Mac OS X 10.0) uses cctools-353 for instance. To get cctools-364, + check out @file{cctools} with tag @samp{Apple-364}, build it, and + install the assembler as @file{usr/bin/as}. See + @uref{http://www.opensource.apple.com/tools/cvs/docs.html} for details. + + Also, the default stack limit of 512K is too small, and a bootstrap will + typically fail when self-compiling @file{expr.c}. Set the stack to 800K + or more, for instance by doing @samp{limit stack 800}. It's also + convenient to use the GNU preprocessor instead of Apple's during the + first stage of bootstrapping; this is automatic when doing @samp{make + bootstrap}, but to do it from the toplevel objdir you will need to say + @samp{make CC='cc -no-cpp-precomp' bootstrap}. + + Note that the version of GCC shipped by Apple typically includes a + number of extensions not available in a standard GCC release. These + extensions are generally specific to Mac programming. + + @html +

    +
    + @end html @heading @anchor{powerpc-*-elf}powerpc-*-elf, powerpc-*-sysv4 PowerPC system in big endian mode, running System V.4. *************** PowerPC system in big endian mode, runni *** 3062,3070 **** @heading @anchor{powerpc-*-linux-gnu*}powerpc-*-linux-gnu* You will need ! @uref{ftp://ftp.varesearch.com/pub/support/hjl/binutils,,binutils 2.9.4.0.8} ! or newer for a working GCC@. It is strongly recommended to recompile binutils ! if you initially built it with gcc-2.7.2.x. @html

    --- 3352,3359 ---- @heading @anchor{powerpc-*-linux-gnu*}powerpc-*-linux-gnu* You will need ! @uref{ftp://ftp.kernel.org/pub/linux/devel/binutils,,binutils 2.12.90.0.7} ! or newer for a working GCC@. @html

    *************** if you initially built it with gcc-2.7.2 *** 3072,3078 **** @end html @heading @anchor{powerpc-*-netbsd*}powerpc-*-netbsd* PowerPC system in big endian mode running NetBSD@. To build the ! documentation you will need Texinfo version 4.0 (NetBSD 1.5.1 included Texinfo version 3.12). @html --- 3361,3367 ---- @end html @heading @anchor{powerpc-*-netbsd*}powerpc-*-netbsd* PowerPC system in big endian mode running NetBSD@. To build the ! documentation you will need Texinfo version 4.1 (NetBSD 1.5.1 included Texinfo version 3.12). @html *************** PowerPC system in little endian mode run *** 3132,3158 ****
    @end html @heading @anchor{romp-*-aos}romp-*-aos, romp-*-mach ! The only operating systems supported for the IBM RT PC are AOS and ! MACH@. GCC does not support AIX running on the RT@. We recommend you ! compile GCC with an earlier version of itself; if you compile GCC ! with @command{hc}, the Metaware compiler, it will work, but you will get ! mismatches between the stage 2 and stage 3 compilers in various files. ! These errors are minor differences in some floating-point constants and ! can be safely ignored; the stage 3 compiler is correct. @html


    @end html @heading @anchor{s390-*-linux*}s390-*-linux* ! IBM S/390 system running Linux for S/390. @html


    @end html @heading @anchor{s390x-*-linux*}s390x-*-linux* ! IBM zSeries system (64 bit) running Linux for zSeries. @html

    --- 3421,3448 ----
    @end html @heading @anchor{romp-*-aos}romp-*-aos, romp-*-mach ! These configurations are obsoleted in GCC 3.1. ! ! We recommend you compile GCC with an earlier version of itself; if you ! compile GCC with @command{hc}, the Metaware compiler, it will work, but ! you will get mismatches between the stage 2 and stage 3 compilers in ! various files. These errors are minor differences in some ! floating-point constants and can be safely ignored; the stage 3 compiler ! is correct. @html


    @end html @heading @anchor{s390-*-linux*}s390-*-linux* ! S/390 system running Linux for S/390@. @html


    @end html @heading @anchor{s390x-*-linux*}s390x-*-linux* ! zSeries system (64 Bit) running Linux for zSeries@. @html

    *************** There are patches for Solaris 2.6 (10563 *** 3216,3221 **** --- 3506,3516 ---- @end html @heading @anchor{sparc-sun-solaris2*}sparc-sun-solaris2* + When GCC is configured to use binutils 2.11.2 or later the binaries + produced are smaller than the ones produced using Sun's native tools; + this difference is quite significant for binaries containing debugging + information. + Sun @command{as} 4.x is broken in that it cannot cope with long symbol names. A typical error message might look similar to the following: *************** This is Sun bug 4237974. This is fixed *** 3227,3242 **** starting with Solaris 7. Starting with Solaris 7, the operating system is capable of executing ! 64-bit SPARC V9 binaries. GCC 3.0 doesn't properly support this yet. ! Although some patches or recipes to enable this support have been posted ! to various newsgroups and mailing lists, we recommend against using ! them, since the compiler may either crash or, worse, silently generate ! bad code. If you really need this capability now, you might try a CVS ! version of GCC 3.1, which will fully support this. If all you want is ! code tuned for the UltraSPARC CPU, you should try the ! @option{-mtune=ultrasparc} option instead, which should be safe from ! those bugs and produce code that, unlike full 64-bit code, can still run ! on non-UltraSPARC machines. @html

    --- 3522,3538 ---- starting with Solaris 7. Starting with Solaris 7, the operating system is capable of executing ! 64-bit SPARC V9 binaries. GCC 3.1 and later properly supports ! this; the @option{-m64} option enables 64-bit code generation. ! However, if all you want is code tuned for the UltraSPARC CPU, you ! should try the @option{-mtune=ultrasparc} option instead, which produces ! code that, unlike full 64-bit code, can still run on non-UltraSPARC ! machines. ! ! When configuring on a Solaris 7 or later system that is running a kernel ! that supports only 32-bit binaries, one must configure with ! @option{--disable-multilib}, since we will not be able to build the ! 64-bit target libraries. @html

    *************** back it out. *** 3262,3268 **** @item Copy the original, unpatched Solaris 7 @command{/usr/ccs/bin/as} into ! @command{/usr/local/lib/gcc-lib/sparc-sun-solaris2.7/3.0/as}, adjusting the latter name to fit your local conventions and software version numbers. --- 3558,3564 ---- @item Copy the original, unpatched Solaris 7 @command{/usr/ccs/bin/as} into ! @command{/usr/local/lib/gcc-lib/sparc-sun-solaris2.7/3.1/as}, adjusting the latter name to fit your local conventions and software version numbers. *************** the hosts that run GCC itself. Second, *** 3276,3282 **** only a partial fix for bug 4210064, but Sun doesn't know whether the partial fix is adequate for GCC@. Revision -08 or later should fix the bug. The current (as of 2001-09-24) revision is -14, and is included in ! the Solaris 7 Recommended Patch Cluster. @end itemize --- 3572,3578 ---- only a partial fix for bug 4210064, but Sun doesn't know whether the partial fix is adequate for GCC@. Revision -08 or later should fix the bug. The current (as of 2001-09-24) revision is -14, and is included in ! the Solaris 7 Recommended Patch Cluster. @end itemize *************** the Solaris 7 Recommended Patch Cluster. *** 3284,3302 ****


    @end html - @heading @anchor{*-*-solaris2.8}*-*-solaris2.8 - - The Solaris 8 linker fails to link some @samp{libjava} programs if - previously-installed GCC java libraries already exist in the configured - prefix. For this reason, @samp{libgcj} is disabled by default on Solaris 8. - If you use GNU @command{ld}, or if you don't have a previously-installed @samp{libgcj} in - the same prefix, use @option{--enable-libgcj} to build and install the - Java libraries. - - @html -

    -


    - @end html @heading @anchor{sparc-sun-sunos4*}sparc-sun-sunos4* A bug in the SunOS 4 linker will cause it to crash when linking --- 3580,3585 ---- *************** can use the @code{sparc32} program to st *** 3347,3352 **** --- 3630,3650 ---- invocation with an environment that causes @command{configure} to recognize (via @samp{uname -a}) the system as @samp{sparc-*-*} instead. + @html +

    +
    + @end html + @heading @anchor{sparcv9-*-solaris2*}sparcv9-*-solaris2* + + The following compiler flags must be specified in the configure + step in order to bootstrap this target with the Sun compiler: + + @example + % CC="cc -xildoff -xarch=v9" @var{srcdir}/configure [@var{options}] [@var{target}] + @end example + + @option{-xildoff} turns off the incremental linker, and @option{-xarch=v9} + specifies the v9 architecture to the Sun linker and assembler. @html

    *************** in some cases (for example, when @code{a *** 3398,3403 **** --- 3696,3702 ---- @heading @anchor{we32k-*-*}we32k-*-* These computers are also known as the 3b2, 3b5, 3b20 and other similar names. (However, the 3b1 is actually a 68000.) + These configurations are obsoleted in GCC 3.1. Don't use @option{-g} when compiling with the system's compiler. The system's linker seems to be unable to handle such a large program with *************** This target is for Xtensa systems runnin *** 3458,3464 **** shared objects and the GNU C library (glibc). It also generates position-independent code (PIC) regardless of whether the @option{-fpic} or @option{-fPIC} options are used. In other ! respects, this target is the same as the @uref{#xtensa-*-elf,,@samp{xtensa-*-elf}} target. @html --- 3757,3763 ---- shared objects and the GNU C library (glibc). It also generates position-independent code (PIC) regardless of whether the @option{-fpic} or @option{-fPIC} options are used. In other ! respects, this target is the same as the @uref{#xtensa-*-elf,,@samp{xtensa-*-elf}} target. @html *************** has been removed from GCC 3: fx80, ns32- *** 3501,3506 **** --- 3800,3812 ---- gmicro, spur; most of these targets had not been updated since GCC version 1. + We are planning to remove support for more older systems, starting in + GCC 3.1. Each release will have a list of ``obsoleted'' systems. + Support for these systems is still present in that release, but + @command{configure} will fail unless the @option{--enable-obsolete} + option is given. Unless a maintainer steps forward, support for + these systems will be removed from the next release of GCC@. + Support for older systems as targets for cross-compilation is less problematic than support for them as hosts for GCC; if an enthusiast wishes to make such a target work again (including resurrecting any *************** automatically. *** 3546,3551 **** --- 3852,3870 ---- @html


    +

    + @end html + @ifhtml + @uref{./index.html,,Return to the GCC Installation page} + @end ifhtml + @end ifset + + @c ***Old documentation****************************************************** + @ifset oldhtml + @include install-old.texi + @html +

    +

    @end html @ifhtml diff -Nrc3pad gcc-3.0.4/gcc/doc/install.texi2html gcc-3.1/gcc/doc/install.texi2html *** gcc-3.0.4/gcc/doc/install.texi2html Tue Dec 4 09:25:40 2001 --- gcc-3.1/gcc/doc/install.texi2html Mon Dec 17 19:42:57 2001 *************** if [ ! -d $DESTDIR ]; then *** 22,30 **** fi for x in index.html specific.html download.html configure.html \ ! build.html test.html finalinstall.html binaries.html gfdl.html do define=`echo $x | sed -e 's/\.//g'` echo "define = $define" ! $MAKEINFO -I $SOURCEDIR/include $SOURCEDIR/install.texi --html --no-split -D$define -o$DESTDIR/$x done --- 22,31 ---- fi for x in index.html specific.html download.html configure.html \ ! build.html test.html finalinstall.html binaries.html old.html \ ! gfdl.html do define=`echo $x | sed -e 's/\.//g'` echo "define = $define" ! $MAKEINFO -I $SOURCEDIR -I $SOURCEDIR/include $SOURCEDIR/install.texi --html --no-split -D$define -o$DESTDIR/$x done diff -Nrc3pad gcc-3.0.4/gcc/doc/interface.texi gcc-3.1/gcc/doc/interface.texi *** gcc-3.0.4/gcc/doc/interface.texi Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/doc/interface.texi Mon Nov 12 15:46:47 2001 *************** *** 0 **** --- 1,102 ---- + @c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, + @c 1999, 2000, 2001 Free Software Foundation, Inc. + @c This is part of the GCC manual. + @c For copying conditions, see the file gcc.texi. + + @node Interface + @chapter Interfacing to GCC Output + @cindex interfacing to GCC output + @cindex run-time conventions + @cindex function call conventions + @cindex conventions, run-time + + GCC is normally configured to use the same function calling convention + normally in use on the target system. This is done with the + machine-description macros described (@pxref{Target Macros}). + + @cindex unions, returning + @cindex structures, returning + @cindex returning structures and unions + However, returning of structure and union values is done differently on + some target machines. As a result, functions compiled with PCC + returning such types cannot be called from code compiled with GCC, + and vice versa. This does not cause trouble often because few Unix + library routines return structures or unions. + + GCC code returns structures and unions that are 1, 2, 4 or 8 bytes + long in the same registers used for @code{int} or @code{double} return + values. (GCC typically allocates variables of such types in + registers also.) Structures and unions of other sizes are returned by + storing them into an address passed by the caller (usually in a + register). The machine-description macros @code{STRUCT_VALUE} and + @code{STRUCT_INCOMING_VALUE} tell GCC where to pass this address. + + By contrast, PCC on most target machines returns structures and unions + of any size by copying the data into an area of static storage, and then + returning the address of that storage as if it were a pointer value. + The caller must copy the data from that memory area to the place where + the value is wanted. This is slower than the method used by GCC, and + fails to be reentrant. + + On some target machines, such as RISC machines and the 80386, the + standard system convention is to pass to the subroutine the address of + where to return the value. On these machines, GCC has been + configured to be compatible with the standard compiler, when this method + is used. It may not be compatible for structures of 1, 2, 4 or 8 bytes. + + @cindex argument passing + @cindex passing arguments + GCC uses the system's standard convention for passing arguments. On + some machines, the first few arguments are passed in registers; in + others, all are passed on the stack. It would be possible to use + registers for argument passing on any machine, and this would probably + result in a significant speedup. But the result would be complete + incompatibility with code that follows the standard convention. So this + change is practical only if you are switching to GCC as the sole C + compiler for the system. We may implement register argument passing on + certain machines once we have a complete GNU system so that we can + compile the libraries with GCC@. + + On some machines (particularly the Sparc), certain types of arguments + are passed ``by invisible reference''. This means that the value is + stored in memory, and the address of the memory location is passed to + the subroutine. + + @cindex @code{longjmp} and automatic variables + If you use @code{longjmp}, beware of automatic variables. ISO C says that + automatic variables that are not declared @code{volatile} have undefined + values after a @code{longjmp}. And this is all GCC promises to do, + because it is very difficult to restore register variables correctly, and + one of GCC's features is that it can put variables in registers without + your asking it to. + + If you want a variable to be unaltered by @code{longjmp}, and you don't + want to write @code{volatile} because old C compilers don't accept it, + just take the address of the variable. If a variable's address is ever + taken, even if just to compute it and ignore it, then the variable cannot + go in a register: + + @example + @{ + int careful; + &careful; + @dots{} + @} + @end example + + @cindex arithmetic libraries + @cindex math libraries + @opindex msoft-float + Code compiled with GCC may call certain library routines. Most of + them handle arithmetic for which there are no instructions. This + includes multiply and divide on some machines, and floating point + operations on any machine for which floating point support is disabled + with @option{-msoft-float}. Some standard parts of the C library, such as + @code{bcopy} or @code{memcpy}, are also called automatically. The usual + function call interface is used for calling the library routines. + + Some of these routines can be defined in mostly machine-independent C; + they appear in @file{libgcc2.c}. Others must be hand-written in + assembly language for each processor. Wherever they are defined, they + are compiled into the support library, @file{libgcc.a}, which is + automatically searched when you link programs with GCC@. diff -Nrc3pad gcc-3.0.4/gcc/doc/invoke.texi gcc-3.1/gcc/doc/invoke.texi *** gcc-3.0.4/gcc/doc/invoke.texi Thu Jan 31 20:42:57 2002 --- gcc-3.1/gcc/doc/invoke.texi Thu Apr 25 22:33:21 2002 *************** *** 1,12 **** @c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, ! @c 2000, 2001 Free Software Foundation, Inc. @c This is part of the GCC manual. @c For copying conditions, see the file gcc.texi. @ignore @c man begin COPYRIGHT Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, ! 1998, 1999, 2000, 2001 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or --- 1,12 ---- @c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, ! @c 2000, 2001, 2002 Free Software Foundation, Inc. @c This is part of the GCC manual. @c For copying conditions, see the file gcc.texi. @ignore @c man begin COPYRIGHT Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, ! 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or *************** in the following sections. *** 157,171 **** @xref{Overall Options,,Options Controlling the Kind of Output}. @gccoptlist{ -c -S -E -o @var{file} -pipe -pass-exit-codes -x @var{language} @gol ! -v --target-help --help} @item C Language Options @xref{C Dialect Options,,Options Controlling C Dialect}. @gccoptlist{ -ansi -std=@var{standard} -aux-info @var{filename} @gol ! -fno-asm -fno-builtin @gol -fhosted -ffreestanding @gol ! -trigraphs -traditional -traditional-cpp @gol -fallow-single-precision -fcond-mismatch @gol -fsigned-bitfields -fsigned-char @gol -funsigned-bitfields -funsigned-char @gol --- 157,171 ---- @xref{Overall Options,,Options Controlling the Kind of Output}. @gccoptlist{ -c -S -E -o @var{file} -pipe -pass-exit-codes -x @var{language} @gol ! -v -### --target-help --help} @item C Language Options @xref{C Dialect Options,,Options Controlling C Dialect}. @gccoptlist{ -ansi -std=@var{standard} -aux-info @var{filename} @gol ! -fno-asm -fno-builtin -fno-builtin-@var{function} @gol -fhosted -ffreestanding @gol ! -trigraphs -no-integrated-cpp -traditional -traditional-cpp @gol -fallow-single-precision -fcond-mismatch @gol -fsigned-bitfields -fsigned-char @gol -funsigned-bitfields -funsigned-char @gol *************** in the following sections. *** 186,192 **** -fno-nonansi-builtins -fno-operator-names @gol -fno-optional-diags -fpermissive @gol -frepo -fno-rtti -fstats -ftemplate-depth-@var{n} @gol ! -fuse-cxa-atexit -fno-weak -nostdinc++ @gol -fno-default-inline -Wctor-dtor-privacy @gol -Wnon-virtual-dtor -Wreorder @gol -Weffc++ -Wno-deprecated @gol --- 186,192 ---- -fno-nonansi-builtins -fno-operator-names @gol -fno-optional-diags -fpermissive @gol -frepo -fno-rtti -fstats -ftemplate-depth-@var{n} @gol ! -fuse-cxa-atexit -fvtable-gc -fno-weak -nostdinc++ @gol -fno-default-inline -Wctor-dtor-privacy @gol -Wnon-virtual-dtor -Wreorder @gol -Weffc++ -Wno-deprecated @gol *************** in the following sections. *** 213,229 **** -fsyntax-only -pedantic -pedantic-errors @gol -w -W -Wall -Waggregate-return @gol -Wcast-align -Wcast-qual -Wchar-subscripts -Wcomment @gol ! -Wconversion -Wdisabled-optimization -Werror @gol -Wfloat-equal -Wformat -Wformat=2 @gol -Wformat-nonliteral -Wformat-security @gol ! -Wid-clash-@var{len} -Wimplicit -Wimplicit-int @gol -Wimplicit-function-declaration @gol -Werror-implicit-function-declaration @gol -Wimport -Winline @gol -Wlarger-than-@var{len} -Wlong-long @gol -Wmain -Wmissing-braces -Wmissing-declarations @gol -Wmissing-format-attribute -Wmissing-noreturn @gol ! -Wmultichar -Wno-format-extra-args -Wno-format-y2k @gol -Wno-import -Wpacked -Wpadded @gol -Wparentheses -Wpointer-arith -Wredundant-decls @gol -Wreturn-type -Wsequence-point -Wshadow @gol --- 213,230 ---- -fsyntax-only -pedantic -pedantic-errors @gol -w -W -Wall -Waggregate-return @gol -Wcast-align -Wcast-qual -Wchar-subscripts -Wcomment @gol ! -Wconversion -Wno-deprecated-declarations @gol ! -Wdisabled-optimization -Wdiv-by-zero -Werror @gol -Wfloat-equal -Wformat -Wformat=2 @gol -Wformat-nonliteral -Wformat-security @gol ! -Wimplicit -Wimplicit-int @gol -Wimplicit-function-declaration @gol -Werror-implicit-function-declaration @gol -Wimport -Winline @gol -Wlarger-than-@var{len} -Wlong-long @gol -Wmain -Wmissing-braces -Wmissing-declarations @gol -Wmissing-format-attribute -Wmissing-noreturn @gol ! -Wmultichar -Wno-format-extra-args -Wno-format-y2k @gol -Wno-import -Wpacked -Wpadded @gol -Wparentheses -Wpointer-arith -Wredundant-decls @gol -Wreturn-type -Wsequence-point -Wshadow @gol *************** in the following sections. *** 241,254 **** @item Debugging Options @xref{Debugging Options,,Options for Debugging Your Program or GCC}. @gccoptlist{ ! -a -ax -d@var{letters} -dumpspecs -dumpmachine -dumpversion @gol -fdump-unnumbered -fdump-translation-unit@r{[}-@var{n}@r{]} @gol -fdump-class-hierarchy@r{[}-@var{n}@r{]} @gol ! -fdump-ast-original@r{[}-@var{n}@r{]} -fdump-ast-optimized@r{[}-@var{n}@r{]} @gol -fmem-report -fpretend-float @gol -fprofile-arcs -ftest-coverage -ftime-report @gol -g -g@var{level} -gcoff -gdwarf -gdwarf-1 -gdwarf-1+ -gdwarf-2 @gol ! -ggdb -gstabs -gstabs+ -gxcoff -gxcoff+ @gol -p -pg -print-file-name=@var{library} -print-libgcc-file-name @gol -print-multi-directory -print-multi-lib @gol -print-prog-name=@var{program} -print-search-dirs -Q @gol --- 242,256 ---- @item Debugging Options @xref{Debugging Options,,Options for Debugging Your Program or GCC}. @gccoptlist{ ! -d@var{letters} -dumpspecs -dumpmachine -dumpversion @gol -fdump-unnumbered -fdump-translation-unit@r{[}-@var{n}@r{]} @gol -fdump-class-hierarchy@r{[}-@var{n}@r{]} @gol ! -fdump-tree-original@r{[}-@var{n}@r{]} -fdump-tree-optimized@r{[}-@var{n}@r{]} @gol ! -fdump-tree-inlined@r{[}-@var{n}@r{]} @gol -fmem-report -fpretend-float @gol -fprofile-arcs -ftest-coverage -ftime-report @gol -g -g@var{level} -gcoff -gdwarf -gdwarf-1 -gdwarf-1+ -gdwarf-2 @gol ! -ggdb -gstabs -gstabs+ -gvms -gxcoff -gxcoff+ @gol -p -pg -print-file-name=@var{library} -print-libgcc-file-name @gol -print-multi-directory -print-multi-lib @gol -print-prog-name=@var{program} -print-search-dirs -Q @gol *************** in the following sections. *** 259,280 **** @gccoptlist{ -falign-functions=@var{n} -falign-jumps=@var{n} @gol -falign-labels=@var{n} -falign-loops=@var{n} @gol ! -fbranch-probabilities -fcaller-saves @gol ! -fcse-follow-jumps -fcse-skip-blocks -fdata-sections -fdce @gol -fdelayed-branch -fdelete-null-pointer-checks @gol -fexpensive-optimizations -ffast-math -ffloat-store @gol ! -fforce-addr -fforce-mem -ffunction-sections -fgcse @gol -finline-functions -finline-limit=@var{n} -fkeep-inline-functions @gol ! -fkeep-static-consts -fmove-all-movables @gol ! -fno-default-inline -fno-defer-pop @gol -fno-function-cse -fno-guess-branch-probability @gol -fno-inline -fno-math-errno -fno-peephole -fno-peephole2 @gol -fomit-frame-pointer -foptimize-register-move @gol ! -foptimize-sibling-calls -freduce-all-givs @gol ! -fregmove -frename-registers @gol -frerun-cse-after-loop -frerun-loop-opt @gol -fschedule-insns -fschedule-insns2 @gol ! -fsingle-precision-constant -fssa @gol -fstrength-reduce -fstrict-aliasing -fthread-jumps -ftrapv @gol -funroll-all-loops -funroll-loops @gol --param @var{name}=@var{value} --- 261,284 ---- @gccoptlist{ -falign-functions=@var{n} -falign-jumps=@var{n} @gol -falign-labels=@var{n} -falign-loops=@var{n} @gol ! -fbranch-probabilities -fcaller-saves -fcprop-registers @gol ! -fcse-follow-jumps -fcse-skip-blocks -fdata-sections @gol -fdelayed-branch -fdelete-null-pointer-checks @gol -fexpensive-optimizations -ffast-math -ffloat-store @gol ! -fforce-addr -fforce-mem -ffunction-sections @gol ! -fgcse -fgcse-lm -fgcse-sm @gol -finline-functions -finline-limit=@var{n} -fkeep-inline-functions @gol ! -fkeep-static-consts -fmerge-constants -fmerge-all-constants @gol ! -fmove-all-movables -fno-default-inline -fno-defer-pop @gol -fno-function-cse -fno-guess-branch-probability @gol -fno-inline -fno-math-errno -fno-peephole -fno-peephole2 @gol + -funsafe-math-optimizations -fno-trapping-math @gol -fomit-frame-pointer -foptimize-register-move @gol ! -foptimize-sibling-calls -fprefetch-loop-arrays @gol ! -freduce-all-givs -fregmove -frename-registers @gol -frerun-cse-after-loop -frerun-loop-opt @gol -fschedule-insns -fschedule-insns2 @gol ! -fsingle-precision-constant -fssa -fssa-ccp -fssa-dce @gol -fstrength-reduce -fstrict-aliasing -fthread-jumps -ftrapv @gol -funroll-all-loops -funroll-loops @gol --param @var{name}=@var{value} *************** in the following sections. *** 320,329 **** @item Machine Dependent Options @xref{Submodel Options,,Hardware Models and Configurations}. @emph{M680x0 Options} @gccoptlist{ -m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040 @gol ! -m68060 -mcpu32 -m5200 -m68881 -mbitfield -mc68000 -mc68020 @gol -mfpa -mnobitfield -mrtd -mshort -msoft-float -mpcrel @gol -malign-int -mstrict-align} --- 324,334 ---- @item Machine Dependent Options @xref{Submodel Options,,Hardware Models and Configurations}. + @emph{M680x0 Options} @gccoptlist{ -m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040 @gol ! -m68060 -mcpu32 -m5200 -m68881 -mbitfield -mc68000 -mc68020 @gol -mfpa -mnobitfield -mrtd -mshort -msoft-float -mpcrel @gol -malign-int -mstrict-align} *************** in the following sections. *** 343,352 **** -mcmodel=@var{code-model} @gol -m32 -m64 @gol -mapp-regs -mbroken-saverestore -mcypress @gol ! -mepilogue -mfaster-structs -mflat @gol -mfpu -mhard-float -mhard-quad-float @gol -mimpure-text -mlive-g0 -mno-app-regs @gol ! -mno-epilogue -mno-faster-structs -mno-flat -mno-fpu @gol -mno-impure-text -mno-stack-bias -mno-unaligned-doubles @gol -msoft-float -msoft-quad-float -msparclite -mstack-bias @gol -msupersparc -munaligned-doubles -mv8} --- 348,357 ---- -mcmodel=@var{code-model} @gol -m32 -m64 @gol -mapp-regs -mbroken-saverestore -mcypress @gol ! -mfaster-structs -mflat @gol -mfpu -mhard-float -mhard-quad-float @gol -mimpure-text -mlive-g0 -mno-app-regs @gol ! -mno-faster-structs -mno-flat -mno-fpu @gol -mno-impure-text -mno-stack-bias -mno-unaligned-doubles @gol -msoft-float -msoft-quad-float -msparclite -mstack-bias @gol -msupersparc -munaligned-doubles -mv8} *************** in the following sections. *** 404,410 **** @emph{M32R/D Options} @gccoptlist{ ! -mcode-model=@var{model-type} -msdata=@var{sdata-type} @gol -G @var{num}} @emph{M88K Options} --- 409,415 ---- @emph{M32R/D Options} @gccoptlist{ ! -m32rx -m32r -mcode-model=@var{model-type} -msdata=@var{sdata-type} @gol -G @var{num}} @emph{M88K Options} *************** in the following sections. *** 426,445 **** -mtune=@var{cpu-type} @gol -mpower -mno-power -mpower2 -mno-power2 @gol -mpowerpc -mpowerpc64 -mno-powerpc @gol -mpowerpc-gpopt -mno-powerpc-gpopt @gol -mpowerpc-gfxopt -mno-powerpc-gfxopt @gol -mnew-mnemonics -mold-mnemonics @gol ! -mfull-toc -mminimal-toc -mno-fop-in-toc -mno-sum-in-toc @gol ! -m64 -m32 -mxl-call -mno-xl-call -mthreads -mpe @gol -msoft-float -mhard-float -mmultiple -mno-multiple @gol -mstring -mno-string -mupdate -mno-update @gol -mfused-madd -mno-fused-madd -mbit-align -mno-bit-align @gol -mstrict-align -mno-strict-align -mrelocatable @gol -mno-relocatable -mrelocatable-lib -mno-relocatable-lib @gol -mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian @gol ! -mcall-aix -mcall-sysv -mcall-netbsd -mprototype -mno-prototype @gol -msim -mmvme -mads -myellowknife -memb -msdata @gol ! -msdata=@var{opt} -mvxworks -G @var{num}} @emph{RT Options} @gccoptlist{ --- 431,454 ---- -mtune=@var{cpu-type} @gol -mpower -mno-power -mpower2 -mno-power2 @gol -mpowerpc -mpowerpc64 -mno-powerpc @gol + -maltivec -mno-altivec @gol -mpowerpc-gpopt -mno-powerpc-gpopt @gol -mpowerpc-gfxopt -mno-powerpc-gfxopt @gol -mnew-mnemonics -mold-mnemonics @gol ! -mfull-toc -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc @gol ! -m64 -m32 -mxl-call -mno-xl-call -mpe @gol -msoft-float -mhard-float -mmultiple -mno-multiple @gol -mstring -mno-string -mupdate -mno-update @gol -mfused-madd -mno-fused-madd -mbit-align -mno-bit-align @gol -mstrict-align -mno-strict-align -mrelocatable @gol -mno-relocatable -mrelocatable-lib -mno-relocatable-lib @gol -mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian @gol ! -mcall-aix -mcall-sysv -mcall-netbsd @gol ! -maix-struct-return -msvr4-struct-return ! -mabi=altivec -mabi=no-altivec @gol ! -mprototype -mno-prototype @gol -msim -mmvme -mads -myellowknife -memb -msdata @gol ! -msdata=@var{opt} -mvxworks -G @var{num} -pthread} @emph{RT Options} @gccoptlist{ *************** in the following sections. *** 449,457 **** @emph{MIPS Options} @gccoptlist{ ! -mabicalls -mcpu=@var{cpu-type} @gol ! -membedded-data -muninit-const-in-rodata @gol ! -membedded-pic -mfp32 -mfp64 -mgas -mgp32 -mgp64 @gol -mgpopt -mhalf-pic -mhard-float -mint64 -mips1 @gol -mips2 -mips3 -mips4 -mlong64 -mlong32 -mlong-calls -mmemcpy @gol -mmips-as -mmips-tfile -mno-abicalls @gol --- 458,467 ---- @emph{MIPS Options} @gccoptlist{ ! -mabicalls -march=@var{cpu-type} -mtune=@var{cpu=type} @gol ! -mcpu=@var{cpu-type} -membedded-data -muninit-const-in-rodata @gol ! -membedded-pic -mfp32 -mfp64 -mfused-madd -mno-fused-madd @gol ! -mgas -mgp32 -mgp64 @gol -mgpopt -mhalf-pic -mhard-float -mint64 -mips1 @gol -mips2 -mips3 -mips4 -mlong64 -mlong32 -mlong-calls -mmemcpy @gol -mmips-as -mmips-tfile -mno-abicalls @gol *************** in the following sections. *** 462,493 **** -m4650 -msingle-float -mmad @gol -mstats -EL -EB -G @var{num} -nocpp @gol -mabi=32 -mabi=n32 -mabi=64 -mabi=eabi @gol ! -mfix7000 -mno-crt0} ! @emph{i386 Options} @gccoptlist{ ! -mcpu=@var{cpu-type} -march=@var{cpu-type} @gol ! -mintel-syntax -mieee-fp -mno-fancy-math-387 @gol -mno-fp-ret-in-387 -msoft-float -msvr3-shlib @gol -mno-wide-multiply -mrtd -malign-double @gol ! -mreg-alloc=@var{list} -mregparm=@var{num} @gol ! -malign-jumps=@var{num} -malign-loops=@var{num} @gol ! -malign-functions=@var{num} -mpreferred-stack-boundary=@var{num} @gol -mthreads -mno-align-stringops -minline-all-stringops @gol -mpush-args -maccumulate-outgoing-args -m128bit-long-double @gol ! -m96bit-long-double -momit-leaf-frame-pointer} @emph{HPPA Options} @gccoptlist{ -march=@var{architecture-type} @gol -mbig-switch -mdisable-fpregs -mdisable-indexing @gol ! -mfast-indirect-calls -mgas -mjump-in-delay @gol -mlong-load-store -mno-big-switch -mno-disable-fpregs @gol -mno-disable-indexing -mno-fast-indirect-calls -mno-gas @gol -mno-jump-in-delay -mno-long-load-store @gol -mno-portable-runtime -mno-soft-float @gol -mno-space-regs -msoft-float -mpa-risc-1-0 @gol ! -mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime @gol -mschedule=@var{cpu-type} -mspace-regs} @emph{Intel 960 Options} --- 472,504 ---- -m4650 -msingle-float -mmad @gol -mstats -EL -EB -G @var{num} -nocpp @gol -mabi=32 -mabi=n32 -mabi=64 -mabi=eabi @gol ! -mfix7000 -mno-crt0 -mflush-func=@var{func} -mno-flush-func} ! @emph{i386 and x86-64 Options} @gccoptlist{ ! -mcpu=@var{cpu-type} -march=@var{cpu-type} -mfpmath=@var{unit} @gol ! -masm=@var{dialect} -mno-fancy-math-387 @gol -mno-fp-ret-in-387 -msoft-float -msvr3-shlib @gol -mno-wide-multiply -mrtd -malign-double @gol ! -mpreferred-stack-boundary=@var{num} @gol ! -mmmx -msse -msse2 -msse-math -m3dnow @gol -mthreads -mno-align-stringops -minline-all-stringops @gol -mpush-args -maccumulate-outgoing-args -m128bit-long-double @gol ! -m96bit-long-double -mregparm=@var{num} -momit-leaf-frame-pointer @gol ! -mno-red-zone@gol ! -m32 -m64} @emph{HPPA Options} @gccoptlist{ -march=@var{architecture-type} @gol -mbig-switch -mdisable-fpregs -mdisable-indexing @gol ! -mfast-indirect-calls -mgas -mjump-in-delay @gol -mlong-load-store -mno-big-switch -mno-disable-fpregs @gol -mno-disable-indexing -mno-fast-indirect-calls -mno-gas @gol -mno-jump-in-delay -mno-long-load-store @gol -mno-portable-runtime -mno-soft-float @gol -mno-space-regs -msoft-float -mpa-risc-1-0 @gol ! -mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime @gol -mschedule=@var{cpu-type} -mspace-regs} @emph{Intel 960 Options} *************** in the following sections. *** 503,517 **** @emph{DEC Alpha Options} @gccoptlist{ ! -mfp-regs -mno-fp-regs -mno-soft-float -msoft-float @gol ! -malpha-as -mgas @gol -mieee -mieee-with-inexact -mieee-conformant @gol -mfp-trap-mode=@var{mode} -mfp-rounding-mode=@var{mode} @gol -mtrap-precision=@var{mode} -mbuild-constants @gol ! -mcpu=@var{cpu-type} @gol ! -mbwx -mno-bwx -mcix -mno-cix -mmax -mno-max @gol -mmemory-latency=@var{time}} @emph{Clipper Options} @gccoptlist{ -mc300 -mc400} --- 514,533 ---- @emph{DEC Alpha Options} @gccoptlist{ ! -mno-fp-regs -msoft-float -malpha-as -mgas @gol -mieee -mieee-with-inexact -mieee-conformant @gol -mfp-trap-mode=@var{mode} -mfp-rounding-mode=@var{mode} @gol -mtrap-precision=@var{mode} -mbuild-constants @gol ! -mcpu=@var{cpu-type} -mtune=@var{cpu-type} @gol ! -mbwx -mmax -mfix -mcix @gol ! -mfloat-vax -mfloat-ieee @gol ! -mexplicit-relocs -msmall-data -mlarge-data @gol -mmemory-latency=@var{time}} + @emph{DEC Alpha/VMS Options} + @gccoptlist{ + -mvms-return-codes} + @emph{Clipper Options} @gccoptlist{ -mc300 -mc400} *************** in the following sections. *** 524,529 **** --- 540,548 ---- @gccoptlist{ -m1 -m2 -m3 -m3e @gol -m4-nofpu -m4-single-only -m4-single -m4 @gol + -m5-64media -m5-64media-nofpu @gol + -m5-32media -m5-32media-nofpu @gol + -m5-compact -m5-compact-nofpu @gol -mb -ml -mdalign -mrelax @gol -mbigtable -mfmovd -mhitachi -mnomacsave @gol -mieee -misize -mpadstruct -mspace @gol *************** in the following sections. *** 556,562 **** @emph{NS32K Options} @gccoptlist{ -m32032 -m32332 -m32532 -m32081 -m32381 @gol ! -mmult-add -mnomult-add -msoft-float -mrtd -mnortd @gol -mregparam -mnoregparam -msb -mnosb @gol -mbitfield -mnobitfield -mhimem -mnohimem} --- 575,581 ---- @emph{NS32K Options} @gccoptlist{ -m32032 -m32332 -m32532 -m32081 -m32381 @gol ! -mmult-add -mnomult-add -msoft-float -mrtd -mnortd @gol -mregparam -mnoregparam -msb -mnosb @gol -mbitfield -mnobitfield -mhimem -mnohimem} *************** in the following sections. *** 567,578 **** @emph{MCore Options} @gccoptlist{ ! -mhardlit -mno-hardlit -mdiv -mno-div -mrelax-immediates @gol -mno-relax-immediates -mwide-bitfields -mno-wide-bitfields @gol -m4byte-functions -mno-4byte-functions -mcallgraph-data @gol -mno-callgraph-data -mslow-bytes -mno-slow-bytes -mno-lsim @gol -mlittle-endian -mbig-endian -m210 -m340 -mstack-increment} @emph{IA-64 Options} @gccoptlist{ -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic @gol --- 586,604 ---- @emph{MCore Options} @gccoptlist{ ! -mhardlit -mno-hardlit -mdiv -mno-div -mrelax-immediates @gol -mno-relax-immediates -mwide-bitfields -mno-wide-bitfields @gol -m4byte-functions -mno-4byte-functions -mcallgraph-data @gol -mno-callgraph-data -mslow-bytes -mno-slow-bytes -mno-lsim @gol -mlittle-endian -mbig-endian -m210 -m340 -mstack-increment} + @emph{MMIX Options} + @gccoptlist{ + -mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnu @gol + -mabi=mmixware -mzero-extend -mknuthdiv -mtoplevel-symbols @gol + -melf -mbranch-predict -mno-branch-predict -mbase-addresses @gol + -mno-base-addresses} + @emph{IA-64 Options} @gccoptlist{ -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic @gol *************** in the following sections. *** 581,592 **** --- 607,645 ---- -minline-divide-max-throughput -mno-dwarf2-asm @gol -mfixed-range=@var{register-range}} + @emph{D30V Options} + @gccoptlist{ + -mextmem -mextmemory -monchip -mno-asm-optimize -masm-optimize @gol + -mbranch-cost=@var{n} -mcond-exec=@var{n}} + @emph{S/390 and zSeries Options} @gccoptlist{ -mhard-float -msoft-float -mbackchain -mno-backchain @gol -msmall-exec -mno-small-exec -mmvcle -mno-mvcle @gol -m64 -m31 -mdebug -mno-debug} + @emph{CRIS Options} + @gccoptlist{ + -mcpu=@var{cpu} -march=@var{cpu} -mtune=@var{cpu} @gol + -mmax-stack-frame=@var{n} -melinux-stacksize=@var{n} @gol + -metrax4 -metrax100 -mpdebug -mcc-init -mno-side-effects @gol + -mstack-align -mdata-align -mconst-align @gol + -m32-bit -m16-bit -m8-bit -mno-prologue-epilogue -mno-gotplt @gol + -melf -maout -melinux -mlinux -sim -sim2} + + @emph{PDP-11 Options} + @gccoptlist{ + -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 @gol + -mbcopy -mbcopy-builtin -mint32 -mno-int16 @gol + -mint16 -mno-int32 -mfloat32 -mno-float64 @gol + -mfloat64 -mno-float32 -mabshi -mno-abshi @gol + -mbranch-expensive -mbranch-cheap @gol + -msplit -mno-split -munix-asm -mdec-asm} + + @emph{Xstormy16 Options} + @gccoptlist{ + -msim} + @emph{Xtensa Options} @gccoptlist{ -mbig-endian -mlittle-endian @gol *************** in the following sections. *** 611,618 **** -fcall-saved-@var{reg} -fcall-used-@var{reg} @gol -ffixed-@var{reg} -fexceptions @gol -fnon-call-exceptions -funwind-tables @gol -finhibit-size-directive -finstrument-functions @gol - -fcheck-memory-usage -fprefix-function-name @gol -fno-common -fno-ident -fno-gnu-linker @gol -fpcc-struct-return -fpic -fPIC @gol -freg-struct-return -fshared-data -fshort-enums @gol --- 664,671 ---- -fcall-saved-@var{reg} -fcall-used-@var{reg} @gol -ffixed-@var{reg} -fexceptions @gol -fnon-call-exceptions -funwind-tables @gol + -fasynchronous-unwind-tables @gol -finhibit-size-directive -finstrument-functions @gol -fno-common -fno-ident -fno-gnu-linker @gol -fpcc-struct-return -fpic -fPIC @gol -freg-struct-return -fshared-data -fshort-enums @gol *************** Fortran input files. *** 714,724 **** @c @var{file}.zip @c @var{file}.jar @c GCC also knows about some suffixes for languages not yet included: - @c Ada: - @c @var{file}.ads - @c @var{file}.adb - @c @var{file}.ada @c Pascal: @c @var{file}.p @c @var{file}.pas --- 767,784 ---- @c @var{file}.zip @c @var{file}.jar + @item @var{file}.ads + Ada source code file which contains a library unit declaration (a + declaration of a package, subprogram, or generic, or a generic + instantiation), or a library unit renaming declaration (a package, + generic, or subprogram renaming declaration). Such files are also + called @dfn{specs}. + + @itemx @var{file}.adb + Ada source code file containing a library unit body (a subprogram or + package body). Such files are also called @dfn{bodies}. + @c GCC also knows about some suffixes for languages not yet included: @c Pascal: @c @var{file}.p @c @var{file}.pas *************** c c-header cpp-output *** 748,757 **** c++ c++-cpp-output objective-c objc-cpp-output assembler assembler-with-cpp f77 f77-cpp-input ratfor java @end example - @c Also f77-version, for internal use only. @item -x none Turn off any specification of a language, so that subsequent files are --- 808,817 ---- c++ c++-cpp-output objective-c objc-cpp-output assembler assembler-with-cpp + ada f77 f77-cpp-input ratfor java @end example @item -x none Turn off any specification of a language, so that subsequent files are *************** Print (on standard error output) the com *** 827,832 **** --- 887,898 ---- of compilation. Also print the version number of the compiler driver program and of the preprocessor and the compiler proper. + @item -### + @opindex ### + Like @option{-v} except the commands are not executed and all command + arguments are quoted. This is useful for shell scripts to capture the + driver-generated command lines. + @item -pipe @opindex pipe Use pipes rather than temporary files for communication between the *************** explanations of options that are meaning *** 890,896 **** @cindex options, dialect The following options control the dialect of C (or languages derived ! from C, such as C++ and Objective C) that the compiler accepts: @table @gcctabopt @cindex ANSI support --- 956,962 ---- @cindex options, dialect The following options control the dialect of C (or languages derived ! from C, such as C++ and Objective-C) that the compiler accepts: @table @gcctabopt @cindex ANSI support *************** ISO C89 as modified in amendment 1. *** 952,965 **** @itemx iso9899:1999 @itemx iso9899:199x ISO C99. Note that this standard is not yet fully supported; see ! @w{@uref{http://gcc.gnu.org/c99status.html}} for more information. The names @samp{c9x} and @samp{iso9899:199x} are deprecated. @item gnu89 Default, ISO C89 plus GNU extensions (including some C99 features). @item gnu99 ! @itemx gnu9x ISO C99 plus GNU extensions. When ISO C99 is fully implemented in GCC, this will become the default. The name @samp{gnu9x} is deprecated. --- 1018,1031 ---- @itemx iso9899:1999 @itemx iso9899:199x ISO C99. Note that this standard is not yet fully supported; see ! @w{@uref{http://gcc.gnu.org/gcc-3.1/c99status.html}} for more information. The names @samp{c9x} and @samp{iso9899:199x} are deprecated. @item gnu89 Default, ISO C89 plus GNU extensions (including some C99 features). @item gnu99 ! @item gnu9x ISO C99 plus GNU extensions. When ISO C99 is fully implemented in GCC, this will become the default. The name @samp{gnu9x} is deprecated. *************** switch only affects the @code{asm} and @ *** 1009,1014 **** --- 1075,1081 ---- @code{inline} is a standard keyword in ISO C99. @item -fno-builtin + @itemx -fno-builtin-@var{function} @r{(C and Objective-C only)} @opindex fno-builtin @cindex built-in functions Don't recognize built-in functions that do not begin with *************** using the @samp{__builtin_} prefix. The *** 1033,1038 **** --- 1100,1119 ---- built-in functions to implement many functions (like @code{std::strchr}), so that you automatically get efficient code. + With the @option{-fno-builtin-@var{function}} option, not available + when compiling C++, only the built-in function @var{function} is + disabled. @var{function} must not begin with @samp{__builtin_}. If a + function is named this is not built-in in this version of GCC, this + option is ignored. There is no corresponding + @option{-fbuiltin-@var{function}} option; if you wish to enable + built-in functions selectively when using @option{-fno-builtin} or + @option{-ffreestanding}, you may define macros such as: + + @smallexample + #define abs(n) __builtin_abs ((n)) + #define strcpy(d, s) __builtin_strcpy ((d), (s)) + @end smallexample + @item -fhosted @opindex fhosted @cindex hosted environment *************** freestanding and hosted environments. *** 1061,1066 **** --- 1142,1157 ---- Support ISO C trigraphs. The @option{-ansi} option (and @option{-std} options for strict ISO C conformance) implies @option{-trigraphs}. + @item -no-integrated-cpp + @opindex no-integrated-cpp + Invoke the external cpp during compilation. The default is to use the + integrated cpp (internal cpp). This option also allows a + user-supplied cpp via the @option{-B} option. This flag is applicable + in both C and C++ modes. + + We do not guarantee to retain this option in future, and we may change + its semantics. + @cindex traditional C language @cindex C language, traditional @item -traditional *************** literal characters @samp{x} and @samp{a} *** 1116,1121 **** --- 1207,1214 ---- representation of a character, and @samp{\a} produces a bell. @end itemize + This option is deprecated and may be removed. + You may wish to use @option{-fno-builtin} as well as @option{-traditional} if your program uses names that are normally GNU C built-in functions for other purposes of its own. *************** rely on ISO C features. Some vendors ar *** 1125,1174 **** ISO C header files and you cannot use @option{-traditional} on such systems to compile files that include any system headers. ! The @option{-traditional} option also enables @option{-traditional-cpp}, ! which is described next. @item -traditional-cpp @opindex traditional-cpp Attempt to support some aspects of traditional C preprocessors. ! Specifically: ! ! @itemize @bullet ! @item ! Comments convert to nothing at all, rather than to a space. This allows ! traditional token concatenation. ! ! @item ! In a preprocessing directive, the @samp{#} symbol must appear as the first ! character of a line. ! ! @item ! Macro arguments are recognized within string constants in a macro ! definition (and their values are stringified, though without additional ! quote marks, when they appear in such a context). The preprocessor ! always considers a string constant to end at a newline. ! ! @item ! @cindex detecting @w{@option{-traditional}} ! The predefined macro @code{__STDC__} is not defined when you use ! @option{-traditional}, but @code{__GNUC__} is (since the GNU extensions ! which @code{__GNUC__} indicates are not affected by ! @option{-traditional}). If you need to write header files that work ! differently depending on whether @option{-traditional} is in use, by ! testing both of these predefined macros you can distinguish four ! situations: GNU C, traditional GNU C, other ISO C compilers, and other ! old C compilers. The predefined macro @code{__STDC_VERSION__} is also ! not defined when you use @option{-traditional}. @xref{Standard ! Predefined,,Standard Predefined Macros,cpp.info,The C Preprocessor}, ! for more discussion of these and other predefined macros. ! ! @item ! @cindex string constants vs newline ! @cindex newline vs string constants ! The preprocessor considers a string constant to end at a newline (unless ! the newline is escaped with @samp{\}). (Without @w{@option{-traditional}}, ! string constants can contain the newline character as typed.) ! @end itemize @item -fcond-mismatch @opindex fcond-mismatch --- 1218,1229 ---- ISO C header files and you cannot use @option{-traditional} on such systems to compile files that include any system headers. ! The @option{-traditional} option also enables @option{-traditional-cpp}. @item -traditional-cpp @opindex traditional-cpp Attempt to support some aspects of traditional C preprocessors. ! See the GNU CPP manual for details. @item -fcond-mismatch @opindex fcond-mismatch *************** will still optimize based on the excepti *** 1337,1344 **** @item -fexternal-templates @opindex fexternal-templates ! Cause template instantiations to obey @samp{#pragma interface} and ! @samp{implementation}; template instances are emitted or not according to the location of the template definition. @xref{Template Instantiation}, for more information. --- 1392,1400 ---- @item -fexternal-templates @opindex fexternal-templates ! ! Cause @samp{#pragma interface} and @samp{implementation} to apply to ! template instantiation; template instances are emitted or not according to the location of the template definition. @xref{Template Instantiation}, for more information. *************** This option is deprecated. *** 1346,1353 **** @item -falt-external-templates @opindex falt-external-templates ! Similar to @option{-fexternal-templates}, but template instances are emitted or ! not according to the place where they are first instantiated. @xref{Template Instantiation}, for more information. This option is deprecated. --- 1402,1409 ---- @item -falt-external-templates @opindex falt-external-templates ! Similar to @option{-fexternal-templates}, but template instances are ! emitted or not according to the place where they are first instantiated. @xref{Template Instantiation}, for more information. This option is deprecated. *************** option are superseded by @option{-pedant *** 1424,1432 **** @item -frepo @opindex frepo ! Enable automatic template instantiation. This option also implies ! @option{-fno-implicit-templates}. @xref{Template Instantiation}, for more ! information. @item -fno-rtti @opindex fno-rtti --- 1480,1488 ---- @item -frepo @opindex frepo ! Enable automatic template instantiation at link time. This option also ! implies @option{-fno-implicit-templates}. @xref{Template ! Instantiation}, for more information. @item -fno-rtti @opindex fno-rtti *************** This option is required for fully standa *** 1457,1462 **** --- 1513,1529 ---- destructors, but will only work if your C library supports @code{__cxa_atexit}. + @item -fvtable-gc + @opindex fvtable-gc + Emit special relocations for vtables and virtual function references + so that the linker can identify unused virtual functions and zero out + vtable slots that refer to them. This is most useful with + @option{-ffunction-sections} and @option{-Wl,--gc-sections}, in order to + also discard the functions themselves. + + This optimization requires GNU as and GNU ld. Not all systems support + this option. @option{-Wl,--gc-sections} is ignored without @option{-static}. + @item -fno-weak @opindex fno-weak Do not use weak symbol support, even if it is provided by the linker. *************** The following @option{-W@dots{}} options *** 1519,1528 **** @table @gcctabopt @item -Weffc++ @r{(C++ only)} @opindex Weffc++ ! Warn about violations of various style guidelines from Scott Meyers' ! @cite{Effective C++} books. If you use this option, you should be aware ! that the standard library headers do not obey all of these guidelines; ! you can use @samp{grep -v} to filter out those warnings. @item -Wno-deprecated @r{(C++ only)} @opindex Wno-deprecated --- 1586,1629 ---- @table @gcctabopt @item -Weffc++ @r{(C++ only)} @opindex Weffc++ ! Warn about violations of the following style guidelines from Scott Meyers' ! @cite{Effective C++} book: ! ! @itemize @bullet ! @item ! Item 11: Define a copy constructor and an assignment operator for classes ! with dynamically allocated memory. ! ! @item ! Item 12: Prefer initialization to assignment in constructors. ! ! @item ! Item 14: Make destructors virtual in base classes. ! ! @item ! Item 15: Have @code{operator=} return a reference to @code{*this}. ! ! @item ! Item 23: Don't try to return a reference when you must return an object. ! ! @end itemize ! ! and about violations of the following style guidelines from Scott Meyers' ! @cite{More Effective C++} book: ! ! @itemize @bullet ! @item ! Item 6: Distinguish between prefix and postfix forms of increment and ! decrement operators. ! ! @item ! Item 7: Never overload @code{&&}, @code{||}, or @code{,}. ! ! @end itemize ! ! If you use this option, you should be aware that the standard library ! headers do not obey all of these guidelines; you can use @samp{grep -v} ! to filter out those warnings. @item -Wno-deprecated @r{(C++ only)} @opindex Wno-deprecated *************** but disables the helpful warning. *** 1546,1567 **** @item -Wold-style-cast @r{(C++ only)} @opindex Wold-style-cast ! Warn if an old-style (C-style) cast is used within a C++ program. The ! new-style casts (@samp{static_cast}, @samp{reinterpret_cast}, and ! @samp{const_cast}) are less vulnerable to unintended effects, and much ! easier to grep for. @item -Woverloaded-virtual @r{(C++ only)} @opindex Woverloaded-virtual @cindex overloaded virtual fn, warning @cindex warning for overloaded virtual fn ! Warn when a derived class function declaration may be an error in ! defining a virtual function. In a derived class, the ! definitions of virtual functions must match the type signature of a ! virtual function declared in the base class. With this option, the ! compiler warns when you define a function with the same name as a ! virtual function, but with a type signature that does not match any ! declarations from the base class. @item -Wno-pmf-conversions @r{(C++ only)} @opindex Wno-pmf-conversions --- 1647,1683 ---- @item -Wold-style-cast @r{(C++ only)} @opindex Wold-style-cast ! Warn if an old-style (C-style) cast to a non-void type is used within ! a C++ program. The new-style casts (@samp{static_cast}, ! @samp{reinterpret_cast}, and @samp{const_cast}) are less vulnerable to ! unintended effects, and much easier to grep for. @item -Woverloaded-virtual @r{(C++ only)} @opindex Woverloaded-virtual @cindex overloaded virtual fn, warning @cindex warning for overloaded virtual fn ! Warn when a function declaration hides virtual functions from a ! base class. For example, in: ! ! @smallexample ! struct A @{ ! virtual void f(); ! @}; ! ! struct B: public A @{ ! void f(int); ! @}; ! @end smallexample ! ! the @code{A} class version of @code{f} is hidden in @code{B}, and code ! like this: ! ! @smallexample ! B* b; ! b->f(); ! @end smallexample ! ! will fail to compile. @item -Wno-pmf-conversions @r{(C++ only)} @opindex Wno-pmf-conversions *************** reporter to emit @emph{once} source loca *** 1688,1694 **** case the message is too long to fit on a single physical line and has to be wrapped, the source location won't be emitted (as prefix) again, over and over, in subsequent continuation lines. This is the default ! behaviour. @item -fdiagnostics-show-location=every-line Only meaningful in line-wrapping mode. Instructs the diagnostic --- 1804,1810 ---- case the message is too long to fit on a single physical line and has to be wrapped, the source location won't be emitted (as prefix) again, over and over, in subsequent continuation lines. This is the default ! behavior. @item -fdiagnostics-show-location=every-line Only meaningful in line-wrapping mode. Instructs the diagnostic *************** negative form beginning @samp{-Wno-} to *** 1716,1722 **** for example, @option{-Wno-implicit}. This manual lists only one of the two forms, whichever is not the default. ! These options control the amount and kinds of warnings produced by GCC: @table @gcctabopt @cindex syntax checking --- 1832,1840 ---- for example, @option{-Wno-implicit}. This manual lists only one of the two forms, whichever is not the default. ! The following options control the amount and kinds of warnings produced ! by GCC; for further, language-specific options also refer to ! @ref{C++ Dialect Options} and @ref{Objective-C Dialect Options}. @table @gcctabopt @cindex syntax checking *************** If @option{-Wformat} is specified, do no *** 1827,1832 **** --- 1945,1958 ---- @code{printf} or @code{scanf} format function. The C standard specifies that such arguments are ignored. + Where the unused arguments lie between used arguments that are + specified with @samp{$} operand number specifications, normally + warnings are still given, since the implementation could not know what + type to pass to @code{va_arg} to skip the unused arguments. However, + in the case of @code{scanf} formats, this option will suppress the + warning if the unused arguments are all pointers, since the Single + Unix Specification says that such unused arguments are allowed. + @item -Wformat-nonliteral @opindex Wformat-nonliteral If @option{-Wformat} is specified, also warn if the format string is not a *************** int a[2][2] = @{ 0, 1, 2, 3 @}; *** 1883,1894 **** int b[2][2] = @{ @{ 0, 1 @}, @{ 2, 3 @} @}; @end smallexample - @item -Wmultichar - @opindex Wmultichar - Warn if a multicharacter constant (@samp{'FOOF'}) is used. Usually they - indicate a typo in the user's code, as they have implementation-defined - values, and should not be used in portable code. - @item -Wparentheses @opindex Wparentheses Warn if parentheses are omitted in certain contexts, such --- 2009,2014 ---- *************** this sort of problem in programs. *** 1975,1983 **** The present implementation of this option only works for C programs. A future implementation may also work for C++ programs. ! There is some controversy over the precise meaning of the sequence point ! rules in subtle cases. Links to papers with alternative formal definitions ! and other related discussions may be found on our readings page @w{@uref{http://gcc.gnu.org/readings.html}}. @item -Wreturn-type --- 2095,2104 ---- The present implementation of this option only works for C programs. A future implementation may also work for C++ programs. ! The C standard is worded confusingly, therefore there is some debate ! over the precise meaning of the sequence point rules in subtle cases. ! Links to discussions of the problem, including proposed formal ! definitions, may be found on our readings page, at @w{@uref{http://gcc.gnu.org/readings.html}}. @item -Wreturn-type *************** warnings about constructions that some u *** 2143,2148 **** --- 2264,2285 ---- that are easy to avoid (or modify to prevent the warning), even in conjunction with macros. + @item -Wdiv-by-zero + @opindex Wno-div-by-zero + @opindex Wdiv-by-zero + Warn about compile-time integer division by zero. This is default. To + inhibit the warning messages, use @option{-Wno-div-by-zero}. Floating + point division by zero is not warned about, as it can be a legitimate + way of obtaining infinities and NaNs. + + @item -Wmultichar + @opindex Wno-multichar + @opindex Wmultichar + Warn if a multicharacter constant (@samp{'FOOF'}) is used. This is + default. To inhibit the warning messages, use @option{-Wno-multichar}. + Usually they indicate a typo in the user's code, as they have + implementation-defined values, and should not be used in portable code. + @item -Wsystem-headers @opindex Wsystem-headers @cindex warnings from system headers *************** if the @samp{#} appeared in column 1 on *** 2278,2284 **** understands but would ignore because the @samp{#} does not appear as the first character on the line. It also suggests you hide directives like @samp{#pragma} not understood by traditional C by indenting them. Some ! traditional implementations would not recognise @samp{#elif}, so it suggests avoiding it altogether. @item --- 2415,2421 ---- understands but would ignore because the @samp{#} does not appear as the first character on the line. It also suggests you hide directives like @samp{#pragma} not understood by traditional C by indenting them. Some ! traditional implementations would not recognize @samp{#elif}, so it suggests avoiding it altogether. @item *************** Warn if an undefined identifier is evalu *** 2346,2357 **** Warn whenever a local variable shadows another local variable, parameter or global variable or whenever a built-in function is shadowed. - @item -Wid-clash-@var{len} - @opindex Wid-clash - Warn whenever two distinct identifiers match in the first @var{len} - characters. This may help you prepare a program that will compile - with certain obsolete, brain-damaged compilers. - @item -Wlarger-than-@var{len} @opindex Wlarger-than Warn whenever an object of larger than @var{len} bytes is defined. --- 2483,2488 ---- *************** case, and some functions for which @code *** 2465,2470 **** --- 2596,2608 ---- appropriate may not be detected. This option has no effect unless @option{-Wformat} is enabled (possibly by @option{-Wall}). + @item -Wno-deprecated-declarations + @opindex Wno-deprecated-declarations + Do not warn about uses of functions, variables, and types marked as + deprecated by using the @code{deprecated} attribute. + (@pxref{Function Attributes}, @pxref{Variable Attributes}, + @pxref{Type Attributes}.) + @item -Wpacked @opindex Wpacked Warn if a structure is given the packed attribute, but the packed *************** This option is not made part of @option{ *** 2523,2529 **** version of a program there is often substantial code which checks correct functioning of the program and is, hopefully, unreachable because the program does work. Another common use of unreachable ! code is to provide behaviour which is selectable at compile-time. @item -Winline @opindex Winline --- 2661,2667 ---- version of a program there is often substantial code which checks correct functioning of the program and is, hopefully, unreachable because the program does work. Another common use of unreachable ! code is to provide behavior which is selectable at compile-time. @item -Winline @opindex Winline *************** makes debugging work better in GDB but w *** 2572,2579 **** crash or refuse to read the program. If you want to control for certain whether to generate the extra information, use @option{-gstabs+}, @option{-gstabs}, ! @option{-gxcoff+}, @option{-gxcoff}, @option{-gdwarf-1+}, or @option{-gdwarf-1} ! (see below). Unlike most other C compilers, GCC allows you to use @option{-g} with @option{-O}. The shortcuts taken by optimized code may occasionally --- 2710,2717 ---- crash or refuse to read the program. If you want to control for certain whether to generate the extra information, use @option{-gstabs+}, @option{-gstabs}, ! @option{-gxcoff+}, @option{-gxcoff}, @option{-gdwarf-1+}, @option{-gdwarf-1}, ! or @option{-gvms} (see below). Unlike most other C compilers, GCC allows you to use @option{-g} with @option{-O}. The shortcuts taken by optimized code may occasionally *************** crash or refuse to read the program. *** 2648,2660 **** Produce debugging information in DWARF version 2 format (if that is supported). This is the format used by DBX on IRIX 6. @item -g@var{level} @itemx -ggdb@var{level} @itemx -gstabs@var{level} @itemx -gcoff@var{level} @itemx -gxcoff@var{level} ! @itemx -gdwarf@var{level} ! @itemx -gdwarf-2@var{level} Request debugging information and also use @var{level} to specify how much information. The default level is 2. --- 2786,2802 ---- Produce debugging information in DWARF version 2 format (if that is supported). This is the format used by DBX on IRIX 6. + @item -gvms + @opindex gvms + Produce debugging information in VMS debug format (if that is + supported). This is the format used by DEBUG on VMS systems. + @item -g@var{level} @itemx -ggdb@var{level} @itemx -gstabs@var{level} @itemx -gcoff@var{level} @itemx -gxcoff@var{level} ! @itemx -gvms@var{level} Request debugging information and also use @var{level} to specify how much information. The default level is 2. *************** Level 3 includes extra information, such *** 2667,2672 **** --- 2809,2819 ---- present in the program. Some debuggers support macro expansion when you use @option{-g3}. + Note that in order to avoid confusion between DWARF1 debug level 2, + and DWARF2, neither @option{-gdwarf} nor @option{-gdwarf-2} accept + a concatenated debug level. Instead use an additional @option{-g@var{level}} + option to change the debug level for DWARF1 or DWARF2. + @cindex @code{prof} @item -p @opindex p *************** pass when it finishes. *** 2712,2820 **** Makes the compiler print some statistics about permanent memory allocation when it finishes. - @item -ax - @opindex ax - Generate extra code to profile basic blocks. Your executable will - produce output that is a superset of that produced when @option{-a} is - used. Additional output is the source and target address of the basic - blocks where a jump takes place, the number of times a jump is executed, - and (optionally) the complete sequence of basic blocks being executed. - The output is appended to file @file{bb.out}. - - You can examine different profiling aspects without recompilation. Your - executable will read a list of function names from file @file{bb.in}. - Profiling starts when a function on the list is entered and stops when - that invocation is exited. To exclude a function from profiling, prefix - its name with @samp{-}. If a function name is not unique, you can - disambiguate it by writing it in the form - @samp{/path/filename.d:functionname}. Your executable will write the - available paths and filenames in file @file{bb.out}. - - Several function names have a special meaning: - @table @code - @item __bb_jumps__ - Write source, target and frequency of jumps to file @file{bb.out}. - @item __bb_hidecall__ - Exclude function calls from frequency count. - @item __bb_showret__ - Include function returns in frequency count. - @item __bb_trace__ - Write the sequence of basic blocks executed to file @file{bbtrace.gz}. - The file will be compressed using the program @samp{gzip}, which must - exist in your @env{PATH}. On systems without the @samp{popen} - function, the file will be named @file{bbtrace} and will not be - compressed. @strong{Profiling for even a few seconds on these systems - will produce a very large file.} Note: @code{__bb_hidecall__} and - @code{__bb_showret__} will not affect the sequence written to - @file{bbtrace.gz}. - @end table - - Here's a short example using different profiling parameters - in file @file{bb.in}. Assume function @code{foo} consists of basic blocks - 1 and 2 and is called twice from block 3 of function @code{main}. After - the calls, block 3 transfers control to block 4 of @code{main}. - - With @code{__bb_trace__} and @code{main} contained in file @file{bb.in}, - the following sequence of blocks is written to file @file{bbtrace.gz}: - 0 3 1 2 1 2 4. The return from block 2 to block 3 is not shown, because - the return is to a point inside the block and not to the top. The - block address 0 always indicates, that control is transferred - to the trace from somewhere outside the observed functions. With - @samp{-foo} added to @file{bb.in}, the blocks of function - @code{foo} are removed from the trace, so only 0 3 4 remains. - - With @code{__bb_jumps__} and @code{main} contained in file @file{bb.in}, - jump frequencies will be written to file @file{bb.out}. The - frequencies are obtained by constructing a trace of blocks - and incrementing a counter for every neighbouring pair of blocks - in the trace. The trace 0 3 1 2 1 2 4 displays the following - frequencies: - - @example - Jump from block 0x0 to block 0x3 executed 1 time(s) - Jump from block 0x3 to block 0x1 executed 1 time(s) - Jump from block 0x1 to block 0x2 executed 2 time(s) - Jump from block 0x2 to block 0x1 executed 1 time(s) - Jump from block 0x2 to block 0x4 executed 1 time(s) - @end example - - With @code{__bb_hidecall__}, control transfer due to call instructions - is removed from the trace, that is the trace is cut into three parts: 0 - 3 4, 0 1 2 and 0 1 2. With @code{__bb_showret__}, control transfer due - to return instructions is added to the trace. The trace becomes: 0 3 1 - 2 3 1 2 3 4. Note, that this trace is not the same, as the sequence - written to @file{bbtrace.gz}. It is solely used for counting jump - frequencies. - @item -fprofile-arcs @opindex fprofile-arcs ! Instrument @dfn{arcs} during compilation. For each function of your ! program, GCC creates a program flow graph, then finds a spanning tree ! for the graph. Only arcs that are not on the spanning tree have to be ! instrumented: the compiler adds code to count the number of times that these ! arcs are executed. When an arc is the only exit or only entrance to a ! block, the instrumentation code can be added to the block; otherwise, a ! new basic block must be created to hold the instrumentation code. ! ! Since not every arc in the program must be instrumented, programs ! compiled with this option run faster than programs compiled with ! @option{-a}, which adds instrumentation code to every basic block in the ! program. The tradeoff: since @code{gcov} does not have ! execution counts for all branches, it must start with the execution ! counts for the instrumented branches, and then iterate over the program ! flow graph until the entire graph has been solved. Hence, @code{gcov} ! runs a little more slowly than a program which uses information from ! @option{-a}. ! @option{-fprofile-arcs} also makes it possible to estimate branch ! probabilities, and to calculate basic block execution counts. In ! general, basic block execution counts do not give enough information to ! estimate all branch probabilities. When the compiled program exits, it ! saves the arc execution counts to a file called ! @file{@var{sourcename}.da}. Use the compiler option @option{-fbranch-probabilities} (@pxref{Optimize Options,,Options that ! Control Optimization}) when recompiling, to optimize using estimated ! branch probabilities. @need 2000 @item -ftest-coverage --- 2859,2906 ---- Makes the compiler print some statistics about permanent memory allocation when it finishes. @item -fprofile-arcs @opindex fprofile-arcs ! Instrument @dfn{arcs} during compilation to generate coverage data ! or for profile-directed block ordering. During execution the program ! records how many times each branch is executed and how many times it is ! taken. When the compiled program exits it saves this data to a file ! called @file{@var{sourcename}.da} for each source file. ! For profile-directed block ordering, compile the program with ! @option{-fprofile-arcs} plus optimization and code generation options, ! generate the arc profile information by running the program on a ! selected workload, and then compile the program again with the same ! optimization and code generation options plus @option{-fbranch-probabilities} (@pxref{Optimize Options,,Options that ! Control Optimization}). ! ! The other use of @option{-fprofile-arcs} is for use with @code{gcov}, ! when it is used with the @option{-ftest-coverage} option. GCC ! supports two methods of determining code coverage: the options that ! support @code{gcov}, and options @option{-a} and @option{-ax}, which ! write information to text files. The options that support @code{gcov} ! do not need to instrument every arc in the program, so a program compiled ! with them runs faster than a program compiled with @option{-a}, which ! adds instrumentation code to every basic block in the program. The ! tradeoff: since @code{gcov} does not have execution counts for all ! branches, it must start with the execution counts for the instrumented ! branches, and then iterate over the program flow graph until the entire ! graph has been solved. Hence, @code{gcov} runs a little more slowly than ! a program which uses information from @option{-a} and @option{-ax}. ! ! With @option{-fprofile-arcs}, for each function of your program GCC ! creates a program flow graph, then finds a spanning tree for the graph. ! Only arcs that are not on the spanning tree have to be instrumented: the ! compiler adds code to count the number of times that these arcs are ! executed. When an arc is the only exit or only entrance to a block, the ! instrumentation code can be added to the block; otherwise, a new basic ! block must be created to hold the instrumentation code. ! ! This option makes it possible to estimate branch probabilities and to ! calculate basic block execution counts. In general, basic block ! execution counts as provided by @option{-a} do not give enough ! information to estimate all branch probabilities. @need 2000 @item -ftest-coverage *************** associate basic block execution counts w *** 2832,2841 **** A list of all arcs in the program flow graph. This allows @code{gcov} to reconstruct the program flow graph, so that it can compute all basic block and arc execution counts from the information in the ! @code{@var{sourcename}.da} file (this last file is the output from ! @option{-fprofile-arcs}). @end table @item -d@var{letters} @opindex d Says to make debugging dumps during compilation at times specified by --- 2918,2939 ---- A list of all arcs in the program flow graph. This allows @code{gcov} to reconstruct the program flow graph, so that it can compute all basic block and arc execution counts from the information in the ! @code{@var{sourcename}.da} file. @end table + Use @option{-ftest-coverage} with @option{-fprofile-arcs}; the latter + option adds instrumentation to the program, which then writes + execution counts to another data file: + + @table @gcctabopt + @item @var{sourcename}.da + Runtime arc execution counts, used in conjunction with the arc + information in the file @code{@var{sourcename}.bbg}. + @end table + + Coverage data will map better to the source files if + @option{-ftest-coverage} is used without optimization. + @item -d@var{letters} @opindex d Says to make debugging dumps during compilation at times specified by *************** Here are the possible letters for use in *** 2850,2950 **** Annotate the assembler output with miscellaneous debugging information. @item b @opindex db ! Dump after computing branch probabilities, to @file{@var{file}.11.bp}. @item B @opindex dB ! Dump after block reordering, to @file{@var{file}.26.bbro}. @item c @opindex dc ! Dump after instruction combination, to the file @file{@var{file}.14.combine}. @item C @opindex dC ! Dump after the first if conversion, to the file @file{@var{file}.15.ce}. @item d @opindex dd ! Dump after delayed branch scheduling, to @file{@var{file}.29.dbr}. @item D @opindex dD Dump all macro definitions, at the end of preprocessing, in addition to normal output. @item e @opindex de ! Dump after SSA optimizations, to @file{@var{file}.05.ssa} and ! @file{@var{file}.06.ussa}. @item E @opindex dE ! Dump after the second if conversion, to @file{@var{file}.24.ce2}. @item f @opindex df ! Dump after life analysis, to @file{@var{file}.13.life}. @item F @opindex dF ! Dump after purging @code{ADDRESSOF} codes, to @file{@var{file}.04.addressof}. @item g @opindex dg ! Dump after global register allocation, to @file{@var{file}.19.greg}. @item o @opindex do ! Dump after post-reload CSE and other optimizations, to @file{@var{file}.20.postreload}. @item G @opindex dG ! Dump after GCSE, to @file{@var{file}.08.gcse}. @item i @opindex di Dump after sibling call optimizations, to @file{@var{file}.01.sibling}. @item j @opindex dj ! Dump after the first jump optimization, to @file{@var{file}.02.jump}. ! @item J ! @opindex dJ ! Dump after the last jump optimization, to @file{@var{file}.27.jump2}. @item k @opindex dk ! Dump after conversion from registers to stack, to @file{@var{file}.29.stack}. @item l @opindex dl ! Dump after local register allocation, to @file{@var{file}.18.lreg}. @item L @opindex dL ! Dump after loop optimization, to @file{@var{file}.09.loop}. @item M @opindex dM Dump after performing the machine dependent reorganisation pass, to ! @file{@var{file}.28.mach}. @item n @opindex dn ! Dump after register renumbering, to @file{@var{file}.23.rnreg}. @item N @opindex dN ! Dump after the register move pass, to @file{@var{file}.16.regmove}. @item r @opindex dr Dump after RTL generation, to @file{@var{file}.00.rtl}. @item R @opindex dR ! Dump after the second instruction scheduling pass, to ! @file{@var{file}.25.sched2}. @item s @opindex ds Dump after CSE (including the jump optimization that sometimes follows ! CSE), to @file{@var{file}.03.cse}. @item S @opindex dS ! Dump after the first instruction scheduling pass, to ! @file{@var{file}.17.sched}. @item t @opindex dt Dump after the second CSE pass (including the jump optimization that ! sometimes follows CSE), to @file{@var{file}.10.cse2}. @item w @opindex dw ! Dump after the second flow pass, to @file{@var{file}.21.flow2}. @item X @opindex dX ! Dump after dead code elimination, to @file{@var{file}.06.dce}. @item z @opindex dz ! Dump after the peephole pass, to @file{@var{file}.22.peephole2}. @item a @opindex da Produce all the dumps listed above. --- 2948,3049 ---- Annotate the assembler output with miscellaneous debugging information. @item b @opindex db ! Dump after computing branch probabilities, to @file{@var{file}.14.bp}. @item B @opindex dB ! Dump after block reordering, to @file{@var{file}.29.bbro}. @item c @opindex dc ! Dump after instruction combination, to the file @file{@var{file}.16.combine}. @item C @opindex dC ! Dump after the first if conversion, to the file @file{@var{file}.17.ce}. @item d @opindex dd ! Dump after delayed branch scheduling, to @file{@var{file}.31.dbr}. @item D @opindex dD Dump all macro definitions, at the end of preprocessing, in addition to normal output. @item e @opindex de ! Dump after SSA optimizations, to @file{@var{file}.04.ssa} and ! @file{@var{file}.07.ussa}. @item E @opindex dE ! Dump after the second if conversion, to @file{@var{file}.26.ce2}. @item f @opindex df ! Dump after life analysis, to @file{@var{file}.15.life}. @item F @opindex dF ! Dump after purging @code{ADDRESSOF} codes, to @file{@var{file}.09.addressof}. @item g @opindex dg ! Dump after global register allocation, to @file{@var{file}.21.greg}. ! @item h ! @opindex dh ! Dump after finalization of EH handling code, to @file{@var{file}.02.eh}. ! @item k ! @opindex dk ! Dump after reg-to-stack conversion, to @file{@var{file}.28.stack}. @item o @opindex do ! Dump after post-reload optimizations, to @file{@var{file}.22.postreload}. @item G @opindex dG ! Dump after GCSE, to @file{@var{file}.10.gcse}. @item i @opindex di Dump after sibling call optimizations, to @file{@var{file}.01.sibling}. @item j @opindex dj ! Dump after the first jump optimization, to @file{@var{file}.03.jump}. @item k @opindex dk ! Dump after conversion from registers to stack, to @file{@var{file}.32.stack}. @item l @opindex dl ! Dump after local register allocation, to @file{@var{file}.20.lreg}. @item L @opindex dL ! Dump after loop optimization, to @file{@var{file}.11.loop}. @item M @opindex dM Dump after performing the machine dependent reorganisation pass, to ! @file{@var{file}.30.mach}. @item n @opindex dn ! Dump after register renumbering, to @file{@var{file}.25.rnreg}. @item N @opindex dN ! Dump after the register move pass, to @file{@var{file}.18.regmove}. @item r @opindex dr Dump after RTL generation, to @file{@var{file}.00.rtl}. @item R @opindex dR ! Dump after the second scheduling pass, to @file{@var{file}.27.sched2}. @item s @opindex ds Dump after CSE (including the jump optimization that sometimes follows ! CSE), to @file{@var{file}.08.cse}. @item S @opindex dS ! Dump after the first scheduling pass, to @file{@var{file}.19.sched}. @item t @opindex dt Dump after the second CSE pass (including the jump optimization that ! sometimes follows CSE), to @file{@var{file}.12.cse2}. @item w @opindex dw ! Dump after the second flow pass, to @file{@var{file}.23.flow2}. @item X @opindex dX ! Dump after SSA dead code elimination, to @file{@var{file}.06.ssadce}. @item z @opindex dz ! Dump after the peephole pass, to @file{@var{file}.24.peephole2}. @item a @opindex da Produce all the dumps listed above. *************** use diff on debugging dumps for compiler *** 2983,3021 **** options, in particular with and without @option{-g}. @item -fdump-translation-unit @r{(C and C++ only)} ! @itemx -fdump-translation-unit-@var{number} @r{(C and C++ only)} @opindex fdump-translation-unit Dump a representation of the tree structure for the entire translation unit to a file. The file name is made by appending @file{.tu} to the ! source file name. If the @samp{-@var{number}} form is used, @var{number} ! controls the details of the dump as described for the @option{-fdump-tree} options. @item -fdump-class-hierarchy @r{(C++ only)} ! @itemx -fdump-class-hierarchy-@var{number} @r{(C++ only)} @opindex fdump-class-hierarchy Dump a representation of each class's hierarchy and virtual function table layout to a file. The file name is made by appending @file{.class} ! to the source file name. If the @samp{-@var{number}} form is used, @var{number} ! controls the details of the dump as described for the @option{-fdump-tree} ! options. ! @item -fdump-ast-@var{switch} @r{(C++ only)} ! @itemx -fdump-ast-@var{switch}-@var{number} @r{(C++ only)} ! @opindex fdump-ast ! Control the dumping at various stages of processing the abstract syntax ! tree to a file. The file name is generated by appending a switch ! specific suffix to the source file name. If the @samp{-@var{number}} form is ! used, @var{number} is a bit mask which controls the details of the ! dump. The following bits are meaningful (these are not set symbolically, ! as the primary function of these dumps is for debugging gcc itself): @table @samp ! @item bit0 (1) Print the address of each node. Usually this is not meaningful as it ! changes according to the environment and source file. ! @item bit1 (2) ! Inhibit dumping of members of a scope or body of a function, unless they ! are reachable by some other path. @end table The following tree dumps are possible: --- 3082,3126 ---- options, in particular with and without @option{-g}. @item -fdump-translation-unit @r{(C and C++ only)} ! @itemx -fdump-translation-unit-@var{options} @r{(C and C++ only)} @opindex fdump-translation-unit Dump a representation of the tree structure for the entire translation unit to a file. The file name is made by appending @file{.tu} to the ! source file name. If the @samp{-@var{options}} form is used, @var{options} ! controls the details of the dump as described for the ! @option{-fdump-tree} options. @item -fdump-class-hierarchy @r{(C++ only)} ! @itemx -fdump-class-hierarchy-@var{options} @r{(C++ only)} @opindex fdump-class-hierarchy Dump a representation of each class's hierarchy and virtual function table layout to a file. The file name is made by appending @file{.class} ! to the source file name. If the @samp{-@var{options}} form is used, ! @var{options} controls the details of the dump as described for the ! @option{-fdump-tree} options. ! @item -fdump-tree-@var{switch} @r{(C++ only)} ! @itemx -fdump-tree-@var{switch}-@var{options} @r{(C++ only)} ! @opindex fdump-tree ! Control the dumping at various stages of processing the intermediate ! language tree to a file. The file name is generated by appending a switch ! specific suffix to the source file name. If the @samp{-@var{options}} ! form is used, @var{options} is a list of @samp{-} separated options that ! control the details of the dump. Not all options are applicable to all ! dumps, those which are not meaningful will be ignored. The following ! options are available @table @samp ! @item address Print the address of each node. Usually this is not meaningful as it ! changes according to the environment and source file. Its primary use ! is for tying up a dump file with a debug environment. ! @item slim ! Inhibit dumping of members of a scope or body of a function merely ! because that scope has been reached. Only dump such items when they ! are directly reachable by some other path. ! @item all ! Turn on all options. @end table The following tree dumps are possible: *************** The following tree dumps are possible: *** 3024,3029 **** --- 3129,3136 ---- Dump before any tree based optimization, to @file{@var{file}.original}. @item optimized Dump after all tree based optimization, to @file{@var{file}.optimized}. + @item inlined + Dump after function inlining, to @file{@var{file}.inlined}. @end table @item -fpretend-float *************** between statements, you can then assign *** 3146,3164 **** change the program counter to any other statement in the function and get exactly the results you would expect from the source code. - Without @option{-O}, the compiler only allocates variables declared - @code{register} in registers. The resulting compiled code is a little - worse than produced by PCC without @option{-O}. - With @option{-O}, the compiler tries to reduce code size and execution ! time. ! ! When you specify @option{-O}, the compiler turns on @option{-fthread-jumps} ! and @option{-fdefer-pop} on all machines. The compiler turns on ! @option{-fdelayed-branch} on machines that have delay slots, and ! @option{-fomit-frame-pointer} on machines that can support debugging even ! without a frame pointer. On some machines the compiler also turns ! on other flags. @item -O2 @opindex O2 --- 3253,3261 ---- change the program counter to any other statement in the function and get exactly the results you would expect from the source code. With @option{-O}, the compiler tries to reduce code size and execution ! time, without performing any optimizations that take a great deal of ! compilation time. @item -O2 @opindex O2 *************** restore frame pointers; it also makes an *** 3256,3276 **** in many functions. @strong{It also makes debugging impossible on some machines.} ! @ifset INTERNALS ! On some machines, such as the Vax, this flag has no effect, because ! the standard calling sequence automatically handles the frame pointer ! and nothing is saved by pretending it doesn't exist. The ! machine-description macro @code{FRAME_POINTER_REQUIRED} controls ! whether a target machine supports this flag. @xref{Registers}. ! @end ifset ! @ifclear INTERNALS ! On some machines, such as the Vax, this flag has no effect, because the standard calling sequence automatically handles the frame pointer and nothing is saved by pretending it doesn't exist. The machine-description macro @code{FRAME_POINTER_REQUIRED} controls whether a target machine supports this flag. @xref{Registers,,Register ! Usage, gcc.info, Using and Porting GCC}. ! @end ifclear @item -foptimize-sibling-calls @opindex foptimize-sibling-calls --- 3353,3364 ---- in many functions. @strong{It also makes debugging impossible on some machines.} ! On some machines, such as the VAX, this flag has no effect, because the standard calling sequence automatically handles the frame pointer and nothing is saved by pretending it doesn't exist. The machine-description macro @code{FRAME_POINTER_REQUIRED} controls whether a target machine supports this flag. @xref{Registers,,Register ! Usage, gccint, GNU Compiler Collection (GCC) Internals}. @item -foptimize-sibling-calls @opindex foptimize-sibling-calls *************** GCC enables this option by default. If *** 3332,3337 **** --- 3420,3442 ---- check if the variable was referenced, regardless of whether or not optimization is turned on, use the @option{-fno-keep-static-consts} option. + @item -fmerge-constants + Attempt to merge identical constants (string constants and floating point + constants) accross compilation units. + + This option is default for optimized compilation if assembler and linker + support it. Use @option{-fno-merge-constants} to inhibit this behavior. + + @item -fmerge-all-constants + Attempt to merge identical constants and identical variables. + + This option implies @option{-fmerge-constants}. In addition to + @option{-fmerge-constants} this considers e.g. even constant initialized + arrays or initialized constant variables with integral or floating point + types. Languages like C or C++ require each non-automatic variable to + have distinct location, so using this option will result in non-conforming + behavior. + @item -fno-function-cse @opindex fno-function-cse Do not put function addresses in registers; make each instruction that *************** performed when this option is not used. *** 3343,3353 **** @item -ffast-math @opindex ffast-math ! This option allows GCC to violate some ISO or IEEE rules and/or ! specifications in the interest of optimizing code for speed. For ! example, it allows the compiler to assume arguments to the @code{sqrt} ! function are non-negative numbers and that no floating-point values ! are NaNs. This option causes the preprocessor macro @code{__FAST_MATH__} to be defined. --- 3448,3455 ---- @item -ffast-math @opindex ffast-math ! Sets @option{-fno-math-errno}, @option{-funsafe-math-optimizations}, and @* ! @option{-fno-trapping-math}. This option causes the preprocessor macro @code{__FAST_MATH__} to be defined. *************** with a single instruction, e.g., sqrt. *** 3363,3374 **** IEEE exceptions for math error handling may want to use this flag for speed while maintaining IEEE arithmetic compatibility. ! The default is @option{-fmath-errno}. The @option{-ffast-math} option ! sets @option{-fno-math-errno}. @end table - @c following causes underfulls.. they don't look great, but we deal. - @c --mew 26jan93 The following options control specific optimizations. The @option{-O2} option turns on all of these optimizations except @option{-funroll-loops} and @option{-funroll-all-loops}. On most machines, the @option{-O} option --- 3465,3506 ---- IEEE exceptions for math error handling may want to use this flag for speed while maintaining IEEE arithmetic compatibility. ! This option should never be turned on by any @option{-O} option since ! it can result in incorrect output for programs which depend on ! an exact implementation of IEEE or ISO rules/specifications for ! math functions. ! ! The default is @option{-fmath-errno}. ! ! @item -funsafe-math-optimizations ! @opindex funsafe-math-optimizations ! Allow optimizations for floating-point arithmetic that (a) assume ! that arguments and results are valid and (b) may violate IEEE or ! ANSI standards. When used at link-time, it may include libraries ! or startup files that change the default FPU control word or other ! similar optimizations. ! ! This option should never be turned on by any @option{-O} option since ! it can result in incorrect output for programs which depend on ! an exact implementation of IEEE or ISO rules/specifications for ! math functions. ! ! The default is @option{-fno-unsafe-math-optimizations}. ! ! @item -fno-trapping-math ! @opindex fno-trapping-math ! Compile code assuming that floating-point operations cannot generate ! user-visible traps. Setting this option may allow faster code ! if one relies on ``non-stop'' IEEE arithmetic, for example. ! ! This option should never be turned on by any @option{-O} option since ! it can result in incorrect output for programs which depend on ! an exact implementation of IEEE or ISO rules/specifications for ! math functions. ! ! The default is @option{-ftrapping-math}. @end table The following options control specific optimizations. The @option{-O2} option turns on all of these optimizations except @option{-funroll-loops} and @option{-funroll-all-loops}. On most machines, the @option{-O} option *************** but specific machines may handle it diff *** 3378,3383 **** --- 3510,3518 ---- You can use the following flags in the rare cases when ``fine-tuning'' of optimizations to be performed is desired. + Not all of the optimizations performed by GCC have @option{-f} options + to control them. + @table @gcctabopt @item -fstrength-reduce @opindex fstrength-reduce *************** extension, you may get better runtime pe *** 3427,3439 **** the global common subexpression elmination pass by adding @option{-fno-gcse} to the command line. @item -fdelete-null-pointer-checks @opindex fdelete-null-pointer-checks ! Use global dataflow analysis to identify and eliminate useless null ! pointer checks. Programs which rely on NULL pointer dereferences @emph{not} ! halting the program may not work properly with this option. Use ! @option{-fno-delete-null-pointer-checks} to disable this optimizing for programs ! which depend on that behavior. @item -fexpensive-optimizations @opindex fexpensive-optimizations --- 3562,3592 ---- the global common subexpression elmination pass by adding @option{-fno-gcse} to the command line. + @item -fgcse-lm + @opindex fgcse-lm + When @option{-fgcse-lm} is enabled, global common subexpression elimination will + attempt to move loads which are only killed by stores into themselves. This + allows a loop containing a load/store sequence to be changed to a load outside + the loop, and a copy/store within the loop. + + @item -fgcse-sm + @opindex fgcse-sm + When @option{-fgcse-sm} is enabled, A store motion pass is run after global common + subexpression elimination. This pass will attempt to move stores out of loops. + When used in conjunction with @option{-fgcse-lm}, loops containing a load/store sequence + can be changed to a load before the loop and a store after the loop. + @item -fdelete-null-pointer-checks @opindex fdelete-null-pointer-checks ! Use global dataflow analysis to identify and eliminate useless checks ! for null pointers. The compiler assumes that dereferencing a null ! pointer would have halted the program. If a pointer is checked after ! it has already been dereferenced, it cannot be null. ! ! In some environments, this assumption is not true, and programs can ! safely dereference null pointers. Use ! @option{-fno-delete-null-pointer-checks} to disable this optimization ! for programs which depend on that behavior. @item -fexpensive-optimizations @opindex fexpensive-optimizations *************** default. *** 3510,3525 **** @item -funroll-loops @opindex funroll-loops ! Perform the optimization of loop unrolling. This is only done for loops ! whose number of iterations can be determined at compile time or run time. ! @option{-funroll-loops} implies both @option{-fstrength-reduce} and ! @option{-frerun-cse-after-loop}. @item -funroll-all-loops @opindex funroll-all-loops ! Perform the optimization of loop unrolling. This is done for all loops ! and usually makes programs run more slowly. @option{-funroll-all-loops} ! implies @option{-fstrength-reduce} as well as @option{-frerun-cse-after-loop}. @item -fmove-all-movables @opindex fmove-all-movables --- 3663,3684 ---- @item -funroll-loops @opindex funroll-loops ! Unroll loops whose number of iterations can be determined at compile ! time or upon entry to the loop. @option{-funroll-loops} implies both ! @option{-fstrength-reduce} and @option{-frerun-cse-after-loop}. This ! option makes code larger, and may or may not make it run faster. @item -funroll-all-loops @opindex funroll-all-loops ! Unroll all loops, even if their number of iterations is uncertain when ! the loop is entered. This usually makes programs run more slowly. ! @option{-funroll-all-loops} implies the same options as ! @option{-funroll-loops}, ! ! @item -fprefetch-loop-arrays ! @opindex fprefetch-loop-arrays ! If supported by the target machine, generate instructions to prefetch ! memory to improve the performance of loops that access large arrays. @item -fmove-all-movables @opindex fmove-all-movables *************** After running a program compiled with @o *** 3563,3571 **** (@pxref{Debugging Options,, Options for Debugging Your Program or @command{gcc}}), you can compile it a second time using @option{-fbranch-probabilities}, to improve optimizations based on ! guessing the path a branch might take. - @ifset INTERNALS With @option{-fbranch-probabilities}, GCC puts a @samp{REG_EXEC_COUNT} note on the first instruction of each basic block, and a @samp{REG_BR_PROB} note on each @samp{JUMP_INSN} and @samp{CALL_INSN}. --- 3722,3734 ---- (@pxref{Debugging Options,, Options for Debugging Your Program or @command{gcc}}), you can compile it a second time using @option{-fbranch-probabilities}, to improve optimizations based on ! the number of times each branch was taken. When the program ! compiled with @option{-fprofile-arcs} exits it saves arc execution ! counts to a file called @file{@var{sourcename}.da} for each source ! file The information in this data file is very dependent on the ! structure of the generated code, so you must use the same source code ! and the same optimization options for both compilations. With @option{-fbranch-probabilities}, GCC puts a @samp{REG_EXEC_COUNT} note on the first instruction of each basic block, and a @samp{REG_BR_PROB} note on each @samp{JUMP_INSN} and @samp{CALL_INSN}. *************** These can be used to improve optimizatio *** 3573,3589 **** used in one place: in @file{reorg.c}, instead of guessing which path a branch is mostly to take, the @samp{REG_BR_PROB} values are used to exactly determine which path is taken more often. - @end ifset @item -fno-guess-branch-probability @opindex fno-guess-branch-probability ! Sometimes gcc will opt to guess branch probabilities when none are ! available from either profile directed feedback (@option{-fprofile-arcs}) ! or @samp{__builtin_expect}. In a hard real-time system, people don't ! want different runs of the compiler to produce code that has different ! behavior; minimizing non-determinism is of paramount import. This ! switch allows users to reduce non-determinism, possibly at the expense ! of inferior optimization. @item -fstrict-aliasing @opindex fstrict-aliasing --- 3736,3757 ---- used in one place: in @file{reorg.c}, instead of guessing which path a branch is mostly to take, the @samp{REG_BR_PROB} values are used to exactly determine which path is taken more often. @item -fno-guess-branch-probability @opindex fno-guess-branch-probability ! Do not guess branch probabilities using a randomized model. ! ! Sometimes gcc will opt to use a randomized model to guess branch ! probabilities, when none are available from either profiling feedback ! (@option{-fprofile-arcs}) or @samp{__builtin_expect}. This means that ! different runs of the compiler on the same program may produce different ! object code. ! ! In a hard real-time system, people don't want different runs of the ! compiler to produce code that has different behavior; minimizing ! non-determinism is of paramount import. This switch allows users to ! reduce non-determinism, possibly at the expense of inferior ! optimization. @item -fstrict-aliasing @opindex fstrict-aliasing *************** int f() @{ *** 3624,3636 **** @} @end example - @ifset INTERNALS Every language that wishes to perform language-specific alias analysis should define a function that computes, given an @code{tree} node, an alias set for the node. Nodes in different alias sets are not allowed to alias. For an example, see the C front-end function @code{c_get_alias_set}. - @end ifset @item -falign-functions @itemx -falign-functions=@var{n} --- 3792,3802 ---- *************** flow graph is translated into SSA form, *** 3690,3699 **** the flow graph is translated back from SSA form. Users should not specify this option, since it is not yet ready for production use. ! @item -fdce ! @opindex fdce ! Perform dead-code elimination in SSA form. Requires @option{-fssa}. Like ! @option{-fssa}, this is an experimental feature. @item -fsingle-precision-constant @opindex fsingle-precision-constant --- 3856,3870 ---- the flow graph is translated back from SSA form. Users should not specify this option, since it is not yet ready for production use. ! @item -fssa-ccp ! @opindex fssa-ccp ! Perform Sparse Conditional Constant Propagation in SSA form. Requires ! @option{-fssa}. Like @option{-fssa}, this is an experimental feature. ! ! @item -fssa-dce ! @opindex fssa-dce ! Perform aggressive dead-code elimination in SSA form. Requires @option{-fssa}. ! Like @option{-fssa}, this is an experimental feature. @item -fsingle-precision-constant @opindex fsingle-precision-constant *************** will most benefit processors with lots o *** 3708,3713 **** --- 3879,3890 ---- make debugging impossible, since variables will no longer stay in a ``home register''. + @item -fno-cprop-registers + @opindex fno-cprop-registers + After register allocation and post-register allocation instruction splitting, + we perform a copy-propagation pass to try to reduce scheduling dependencies + and occasionally eliminate the copy. + @item --param @var{name}=@var{value} @opindex param In some places, GCC uses various constants to control the amount of *************** order to perform the global common subex *** 3742,3747 **** --- 3919,3927 ---- optimization. If more memory than specified is required, the optimization will not be done. + @item max-gcse-passes + The maximum number of passes of GCSE to run. + @item max-pending-list-length The maximum number of pending dependencies scheduling will allow before flushing the current state and starting over. Large functions *************** Some of these options make sense only to *** 3769,4086 **** they cause the preprocessor output to be unsuitable for actual compilation. - @table @gcctabopt - @item -include @var{file} - @opindex include - Process @var{file} as input before processing the regular input file. - In effect, the contents of @var{file} are compiled first. Any @option{-D} - and @option{-U} options on the command line are always processed before - @option{-include @var{file}}, regardless of the order in which they are - written. All the @option{-include} and @option{-imacros} options are - processed in the order in which they are written. - - @item -imacros @var{file} - @opindex imacros - Process @var{file} as input, discarding the resulting output, before - processing the regular input file. Because the output generated from - @var{file} is discarded, the only effect of @option{-imacros @var{file}} - is to make the macros defined in @var{file} available for use in the - main input. All the @option{-include} and @option{-imacros} options are - processed in the order in which they are written. - - @item -idirafter @var{dir} - @opindex idirafter - @cindex second include path - Add the directory @var{dir} to the second include path. The directories - on the second include path are searched when a header file is not found - in any of the directories in the main include path (the one that - @option{-I} adds to). - - @item -iprefix @var{prefix} - @opindex iprefix - Specify @var{prefix} as the prefix for subsequent @option{-iwithprefix} - options. - - @item -iwithprefix @var{dir} - @opindex iwithprefix - Add a directory to the second include path. The directory's name is - made by concatenating @var{prefix} and @var{dir}, where @var{prefix} was - specified previously with @option{-iprefix}. If you have not specified a - prefix yet, the directory containing the installed passes of the - compiler is used as the default. - - @item -iwithprefixbefore @var{dir} - @opindex iwithprefixbefore - Add a directory to the main include path. The directory's name is made - by concatenating @var{prefix} and @var{dir}, as in the case of - @option{-iwithprefix}. - - @item -isystem @var{dir} - @opindex isystem - Add a directory to the beginning of the second include path, marking it - as a system directory, so that it gets the same special treatment as - is applied to the standard system directories. - - @item -nostdinc - @opindex nostdinc - Do not search the standard system directories for header files. Only - the directories you have specified with @option{-I} options (and the - current directory, if appropriate) are searched. @xref{Directory - Options}, for information on @option{-I}. - - By using both @option{-nostdinc} and @option{-I-}, you can limit the include-file - search path to only those directories you specify explicitly. - - @item -remap - @opindex remap - When searching for a header file in a directory, remap file names if a - file named @file{header.gcc} exists in that directory. This can be used - to work around limitations of file systems with file name restrictions. - The @file{header.gcc} file should contain a series of lines with two - tokens on each line: the first token is the name to map, and the second - token is the actual name to use. - - @item -undef - @opindex undef - Do not predefine any nonstandard macros. (Including architecture flags). - - @item -E - @opindex E - Run only the C preprocessor. Preprocess all the C source files - specified and output the results to standard output or to the - specified output file. - - @item -C - @opindex C - Tell the preprocessor not to discard comments. Used with the - @option{-E} option. - - @item -P - @opindex P - Tell the preprocessor not to generate @samp{#line} directives. - Used with the @option{-E} option. - - @cindex make - @cindex dependencies, make - @item -M - @opindex M - Instead of outputting the result of preprocessing, output a rule - suitable for @code{make} describing the dependencies of the main source - file. The preprocessor outputs one @code{make} rule containing the - object file name for that source file, a colon, and the names of all the - included files. Unless overridden explicitly, the object file name - consists of the basename of the source file with any suffix replaced with - object file suffix. If there are many included files then the - rule is split into several lines using @samp{\}-newline. - - @option{-M} implies @option{-E}. - - @item -MM - @opindex MM - Like @option{-M}, but mention only the files included with @samp{#include - "@var{file}"}. System header files included with @samp{#include - <@var{file}>} are omitted. - - @item -MD - @opindex MD - Like @option{-M} but the dependency information is written to a file - rather than stdout. @code{gcc} will use the same file name and - directory as the object file, but with the suffix @file{.d} instead. - - This is in addition to compiling the main file as specified---@option{-MD} - does not inhibit ordinary compilation the way @option{-M} does, - unless you also specify @option{-MG}. - - With Mach, you can use the utility @code{md} to merge multiple - dependency files into a single dependency file suitable for using with - the @samp{make} command. - - @item -MMD - @opindex MMD - Like @option{-MD} except mention only user header files, not system - -header files. - - @item -MF @var{file} - @opindex MF - When used with @option{-M} or @option{-MM}, specifies a file to write the - dependencies to. This allows the preprocessor to write the preprocessed - file to stdout normally. If no @option{-MF} switch is given, CPP sends - the rules to stdout and suppresses normal preprocessed output. - - Another way to specify output of a @code{make} rule is by setting - the environment variable @env{DEPENDENCIES_OUTPUT} (@pxref{Environment - Variables}). - - @item -MG - @opindex MG - When used with @option{-M} or @option{-MM}, @option{-MG} says to treat missing - header files as generated files and assume they live in the same - directory as the source file. It suppresses preprocessed output, as a - missing header file is ordinarily an error. - - This feature is used in automatic updating of makefiles. - - @item -MP - @opindex MP - This option instructs CPP to add a phony target for each dependency - other than the main file, causing each to depend on nothing. These - dummy rules work around errors @code{make} gives if you remove header - files without updating the @code{Makefile} to match. - - This is typical output:- - - @smallexample - /tmp/test.o: /tmp/test.c /tmp/test.h - - /tmp/test.h: - @end smallexample - - @item -MQ @var{target} - @item -MT @var{target} - @opindex MQ - @opindex MT - By default CPP uses the main file name, including any path, and appends - the object suffix, normally ``.o'', to it to obtain the name of the - target for dependency generation. With @option{-MT} you can specify a - target yourself, overriding the default one. - - If you want multiple targets, you can specify them as a single argument - to @option{-MT}, or use multiple @option{-MT} options. - - The targets you specify are output in the order they appear on the - command line. @option{-MQ} is identical to @option{-MT}, except that the - target name is quoted for Make, but with @option{-MT} it isn't. For - example, @option{-MT '$(objpfx)foo.o'} gives - - @smallexample - $(objpfx)foo.o: /tmp/foo.c - @end smallexample - - but @option{-MQ '$(objpfx)foo.o'} gives - - @smallexample - $$(objpfx)foo.o: /tmp/foo.c - @end smallexample - - The default target is automatically quoted, as if it were given with - @option{-MQ}. - - @item -H - @opindex H - Print the name of each header file used, in addition to other normal - activities. - - @item -A@var{question}(@var{answer}) - @opindex A - Assert the answer @var{answer} for @var{question}, in case it is tested - with a preprocessing conditional such as @samp{#if - #@var{question}(@var{answer})}. @option{-A-} disables the standard - assertions that normally describe the target machine. - - @item -D@var{macro} - @opindex D - Define macro @var{macro} with the string @samp{1} as its definition. - - @item -D@var{macro}=@var{defn} - Define macro @var{macro} as @var{defn}. All instances of @option{-D} on - the command line are processed before any @option{-U} options. - - Any @option{-D} and @option{-U} options on the command line are processed in - order, and always before @option{-imacros @var{file}}, regardless of the - order in which they are written. - - @item -U@var{macro} - @opindex U - Undefine macro @var{macro}. @option{-U} options are evaluated after all - @option{-D} options, but before any @option{-include} and @option{-imacros} - options. - - Any @option{-D} and @option{-U} options on the command line are processed in - order, and always before @option{-imacros @var{file}}, regardless of the - order in which they are written. - - @item -dM - @opindex dM - Tell the preprocessor to output only a list of the macro definitions - that are in effect at the end of preprocessing. Used with the @option{-E} - option. - - @item -dD - @opindex dD - Tell the preprocessing to pass all macro definitions into the output, in - their proper sequence in the rest of the output. - - @item -dN - @opindex dN - Like @option{-dD} except that the macro arguments and contents are omitted. - Only @samp{#define @var{name}} is included in the output. - - @item -dI - @opindex dI - Output @samp{#include} directives in addition to the result of - preprocessing. - - @item -fpreprocessed - @opindex fpreprocessed - Indicate to the preprocessor that the input file has already been - preprocessed. This suppresses things like macro expansion, trigraph - conversion, escaped newline splicing, and processing of most directives. - In this mode the integrated preprocessor is little more than a tokenizer - for the front ends. - - @option{-fpreprocessed} is implicit if the input file has one of the - extensions @samp{i}, @samp{ii} or @samp{mi} indicating it has already - been preprocessed. - - @item -trigraphs - @opindex trigraphs - Process ISO standard trigraph sequences. These are three-character - sequences, all starting with @samp{??}, that are defined by ISO C to - stand for single characters. For example, @samp{??/} stands for - @samp{\}, so @samp{'??/n'} is a character constant for a newline. By - default, GCC ignores trigraphs, but in standard-conforming modes it - converts them. See the @option{-std} and @option{-ansi} options. - - The nine trigraph sequences are - @table @samp - @item ??( - @expansion{} @samp{[} - - @item ??) - @expansion{} @samp{]} - - @item ??< - @expansion{} @samp{@{} - - @item ??> - @expansion{} @samp{@}} - - @item ??= - @expansion{} @samp{#} - - @item ??/ - @expansion{} @samp{\} - - @item ??' - @expansion{} @samp{^} - - @item ??! - @expansion{} @samp{|} - - @item ??- - @expansion{} @samp{~} - - @end table - - Trigraph support is not popular, so many compilers do not implement it - properly. Portable code should not rely on trigraphs being either - converted or ignored. - - @item -Wp,@var{option} @opindex Wp ! Pass @var{option} as an option to the preprocessor. If @var{option} ! contains commas, it is split into multiple options at the commas. ! @end table @node Assembler Options @section Passing Options to the Assembler --- 3949,3966 ---- they cause the preprocessor output to be unsuitable for actual compilation. @opindex Wp ! You can use @option{-Wp,@var{option}} to bypass the compiler driver ! and pass @var{option} directly through to the preprocessor. If ! @var{option} contains commas, it is split into multiple options at the ! commas. However, many options are modified, translated or interpreted ! by the compiler driver before being passed to the preprocessor, and ! @option{-Wp} forcibly bypasses this phase. The preprocessor's direct ! interface is undocumented and subject to change, so whenever possible ! you should avoid using @option{-Wp} and let the driver handle the ! options instead. ! ! @include cppopts.texi @node Assembler Options @section Passing Options to the Assembler *************** Options}. *** 4125,4135 **** @cindex Libraries @item -l@var{library} @opindex l ! Search the library named @var{library} when linking. It makes a difference where in the command you write this option; the ! linker searches processes libraries and object files in the order they are specified. Thus, @samp{foo.o -lz bar.o} searches library @samp{z} after file @file{foo.o} but before @file{bar.o}. If @file{bar.o} refers to functions in @samp{z}, those functions may not be loaded. --- 4005,4018 ---- @cindex Libraries @item -l@var{library} + @itemx -l @var{library} @opindex l ! Search the library named @var{library} when linking. (The second ! alternative with the library as a separate argument is only for ! POSIX compliance and is not recommended.) It makes a difference where in the command you write this option; the ! linker searches and processes libraries and object files in the order they are specified. Thus, @samp{foo.o -lz bar.o} searches library @samp{z} after file @file{foo.o} but before @file{bar.o}. If @file{bar.o} refers to functions in @samp{z}, those functions may not be loaded. *************** and searches several directories. *** 4153,4159 **** @item -lobjc @opindex lobjc You need this special case of the @option{-l} option in order to ! link an Objective C program. @item -nostartfiles @opindex nostartfiles --- 4036,4042 ---- @item -lobjc @opindex lobjc You need this special case of the @option{-l} option in order to ! link an Objective-C program. @item -nostartfiles @opindex nostartfiles *************** One of the standard libraries bypassed b *** 4192,4211 **** @option{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines that GCC uses to overcome shortcomings of particular machines, or special needs for some languages. ! @ifset INTERNALS ! (@xref{Interface,,Interfacing to GCC Output}, for more discussion of ! @file{libgcc.a}.) ! @end ifset ! @ifclear INTERNALS ! (@xref{Interface,,Interfacing to GCC Output,gcc.info,Porting GCC}, for more discussion of @file{libgcc.a}.) - @end ifclear In most cases, you need @file{libgcc.a} even when you want to avoid other standard libraries. In other words, when you specify @option{-nostdlib} or @option{-nodefaultlibs} you should usually specify @option{-lgcc} as well. This ensures that you have no unresolved references to internal GCC library subroutines. (For example, @samp{__main}, used to ensure C++ ! constructors will be called; @pxref{Collect2,,@command{collect2}}.) @item -s @opindex s --- 4075,4090 ---- @option{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines that GCC uses to overcome shortcomings of particular machines, or special needs for some languages. ! (@xref{Interface,,Interfacing to GCC Output,gccint,GNU Compiler ! Collection (GCC) Internals}, for more discussion of @file{libgcc.a}.) In most cases, you need @file{libgcc.a} even when you want to avoid other standard libraries. In other words, when you specify @option{-nostdlib} or @option{-nodefaultlibs} you should usually specify @option{-lgcc} as well. This ensures that you have no unresolved references to internal GCC library subroutines. (For example, @samp{__main}, used to ensure C++ ! constructors will be called; @pxref{Collect2,,@code{collect2}, gccint, ! GNU Compiler Collection (GCC) Internals}.) @item -s @opindex s *************** of these is when the application wishes *** 4244,4258 **** across different shared libraries. In that case, each of the libraries as well as the application itself should use the shared @file{libgcc}. ! Therefore, whenever you specify the @option{-shared} option, the GCC ! driver automatically adds @option{-shared-libgcc}, unless you explicitly ! specify @option{-static-libgcc}. The G++ driver automatically adds ! @option{-shared-libgcc} when you build a main executable as well because ! for C++ programs that is typically the right thing to do. ! (Exception-handling will not work reliably otherwise.) ! However, when linking a main executable written in C, you must ! explicitly say @option{-shared-libgcc} if you want to use the shared @file{libgcc}. @item -symbolic --- 4123,4148 ---- across different shared libraries. In that case, each of the libraries as well as the application itself should use the shared @file{libgcc}. ! Therefore, the G++ and GCJ drivers automatically add ! @option{-shared-libgcc} whenever you build a shared library or a main ! executable, because C++ and Java programs typically use exceptions, so ! this is the right thing to do. ! If, instead, you use the GCC driver to create shared libraries, you may ! find that they will not always be linked with the shared @file{libgcc}. ! If GCC finds, at its configuration time, that you have a GNU linker that ! does not support option @option{--eh-frame-hdr}, it will link the shared ! version of @file{libgcc} into shared libraries by default. Otherwise, ! it will take advantage of the linker and optimize away the linking with ! the shared version of @file{libgcc}, linking with the static version of ! libgcc by default. This allows exceptions to propagate through such ! shared libraries, without incurring relocation costs at library load ! time. ! ! However, if a library or main executable is supposed to throw or catch ! exceptions, you must link it using the G++ or GCJ driver, as appropriate ! for the languages used in the program, or using the option ! @option{-shared-libgcc}, such that it is linked with the shared @file{libgcc}. @item -symbolic *************** system header files (use @option{-isyste *** 4308,4313 **** --- 4198,4214 ---- one @option{-I} option, the directories are scanned in left-to-right order; the standard system directories come after. + If a standard system include directory, or a directory specified with + @option{-isystem}, is also specified with @option{-I}, it will be + searched only in the position requested by @option{-I}. Also, it will + not be considered a system include directory. If that directory really + does contain system headers, there is a good chance that they will + break. For instance, if GCC's installation procedure edited the headers + in @file{/usr/include} to fix bugs, @samp{-I/usr/include} will cause the + original, buggy headers to be found instead of the corrected ones. GCC + will issue a warning when a system include directory is hidden in this + way. + @item -I- @opindex I- Any directories you specify with @option{-I} options before the @option{-I-} *************** those results in a file name that is fou *** 4354,4359 **** --- 4255,4264 ---- name is searched for using the directories specified in your @env{PATH} environment variable. + The compiler will check to see if the path provided by the @option{-B} + refers to a directory, and if necessary it will add a directory + separator character at the end of the path. + @option{-B} prefixes that effectively specify directory names also apply to libraries in the linker, because the compiler translates these options into @option{-L} options for the linker. They also apply to *************** Another way to specify a prefix much lik *** 4370,4375 **** --- 4275,4285 ---- the environment variable @env{GCC_EXEC_PREFIX}. @xref{Environment Variables}. + As a special kludge, if the path provided by @option{-B} is + @file{[dir/]stage@var{N}/}, where @var{N} is a number in the range 0 to + 9, then it will be replaced by @file{[dir/]include}. This is to help + with boot-strapping the compiler. + @item -specs=@var{file} @opindex specs Process @var{file} after the compiler reads in the standard @file{specs} *************** are processed in order, from left to rig *** 4389,4398 **** sequence of other programs to do the work of compiling, assembling and linking. GCC interprets its command-line parameters and uses these to deduce which programs it should invoke, and which command-line options ! it ought to place on their command lines. This behaviour is controlled by @dfn{spec strings}. In most cases there is one spec string for each program that GCC can invoke, but a few programs have multiple spec ! strings to control their behaviour. The spec strings built into GCC can be overridden by using the @option{-specs=} command-line switch to specify a spec file. --- 4299,4308 ---- sequence of other programs to do the work of compiling, assembling and linking. GCC interprets its command-line parameters and uses these to deduce which programs it should invoke, and which command-line options ! it ought to place on their command lines. This behavior is controlled by @dfn{spec strings}. In most cases there is one spec string for each program that GCC can invoke, but a few programs have multiple spec ! strings to control their behavior. The spec strings built into GCC can be overridden by using the @option{-specs=} command-line switch to specify a spec file. *************** command with the @option{-V} option. *** 4942,4948 **** Earlier we discussed the standard option @option{-b} which chooses among different installed compilers for completely different target ! machines, such as Vax vs.@: 68000 vs.@: 80386. In addition, each of these target machine types can have its own special options, starting with @samp{-m}, to choose among various --- 4852,4858 ---- Earlier we discussed the standard option @option{-b} which chooses among different installed compilers for completely different target ! machines, such as VAX vs.@: 68000 vs.@: 80386. In addition, each of these target machine types can have its own special options, starting with @samp{-m}, to choose among various *************** Some configurations of the compiler also *** 4955,4965 **** options, usually for compatibility with other compilers on the same platform. - @ifset INTERNALS These options are defined by the macro @code{TARGET_SWITCHES} in the machine description. The default for the options is also defined by that macro, which enables you to change the defaults. - @end ifset @menu * M680x0 Options:: --- 4865,4873 ---- *************** that macro, which enables you to change *** 4976,4985 **** * RS/6000 and PowerPC Options:: * RT Options:: * MIPS Options:: ! * i386 Options:: * HPPA Options:: * Intel 960 Options:: * DEC Alpha Options:: * Clipper Options:: * H8/300 Options:: * SH Options:: --- 4884,4894 ---- * RS/6000 and PowerPC Options:: * RT Options:: * MIPS Options:: ! * i386 and x86-64 Options:: * HPPA Options:: * Intel 960 Options:: * DEC Alpha Options:: + * DEC Alpha/VMS Options:: * Clipper Options:: * H8/300 Options:: * SH Options:: *************** that macro, which enables you to change *** 4993,4998 **** --- 4902,4911 ---- * IA-64 Options:: * D30V Options:: * S/390 and zSeries Options:: + * CRIS Options:: + * MMIX Options:: + * PDP-11 Options:: + * Xstormy16 Options:: * Xtensa Options:: @end menu *************** The default is 4 for 68HC11 and 2 for 68 *** 5214,5226 **** @subsection VAX Options @cindex VAX options ! These @samp{-m} options are defined for the Vax: @table @gcctabopt @item -munix @opindex munix Do not output certain jump instructions (@code{aobleq} and so on) ! that the Unix assembler for the Vax cannot handle across long ranges. @item -mgnu --- 5127,5139 ---- @subsection VAX Options @cindex VAX options ! These @samp{-m} options are defined for the VAX: @table @gcctabopt @item -munix @opindex munix Do not output certain jump instructions (@code{aobleq} and so on) ! that the Unix assembler for the VAX cannot handle across long ranges. @item -mgnu *************** emulates the effect of the instruction. *** 5295,5312 **** this is much slower than calling the ABI library routines. Thus the @option{-msoft-quad-float} option is the default. - @item -mno-epilogue - @itemx -mepilogue - @opindex mno-epilogue - @opindex mepilogue - With @option{-mepilogue} (the default), the compiler always emits code for - function exit at the end of each function. Any function exit in - the middle of the function (such as a return statement in C) will - generate a jump to the exit code at the end of the function. - - With @option{-mno-epilogue}, the compiler tries to emit exit code inline - at every function exit. - @item -mno-flat @itemx -mflat @opindex mno-flat --- 5208,5213 ---- *************** They have been replaced with @option{-mc *** 5371,5377 **** @itemx -msupersparc @opindex mcypress @opindex msupersparc ! These two options select the processor for which the code is optimised. With @option{-mcypress} (the default), the compiler optimizes code for the Cypress CY7C602 chip, as used in the SparcStation/SparcServer 3xx series. --- 5272,5278 ---- @itemx -msupersparc @opindex mcypress @opindex msupersparc ! These two options select the processor for which the code is optimized. With @option{-mcypress} (the default), the compiler optimizes code for the Cypress CY7C602 chip, as used in the SparcStation/SparcServer 3xx series. *************** Set the instruction scheduling parameter *** 5413,5423 **** @var{cpu_type}, but do not set the instruction set or register set that the option @option{-mcpu=@var{cpu_type}} would. ! The same values for @option{-mcpu=@var{cpu_type}} are used for ! @option{-mtune=@var{cpu_type}}, though the only useful values are those that ! select a particular cpu implementation: @samp{cypress}, @samp{supersparc}, ! @samp{hypersparc}, @samp{f930}, @samp{f934}, @samp{sparclite86x}, ! @samp{tsc701}, @samp{ultrasparc}. @end table --- 5314,5324 ---- @var{cpu_type}, but do not set the instruction set or register set that the option @option{-mcpu=@var{cpu_type}} would. ! The same values for @option{-mcpu=@var{cpu_type}} can be used for ! @option{-mtune=@var{cpu_type}}, but the only useful values are those ! that select a particular cpu implementation. Those are @samp{cypress}, ! @samp{supersparc}, @samp{hypersparc}, @samp{f930}, @samp{f934}, ! @samp{sparclite86x}, @samp{tsc701}, and @samp{ultrasparc}. @end table *************** the scope of a @samp{#pragma long_calls} *** 5957,5963 **** turned into long calls. This feature is not enabled by default. Specifying ! @option{-mno-long-calls} will restore the default behaviour, as will placing the function calls within the scope of a @samp{#pragma long_calls_off} directive. Note these switches have no effect on how the compiler generates code to handle function calls via function --- 5858,5864 ---- turned into long calls. This feature is not enabled by default. Specifying ! @option{-mno-long-calls} will restore the default behavior, as will placing the function calls within the scope of a @samp{#pragma long_calls_off} directive. Note these switches have no effect on how the compiler generates code to handle function calls via function *************** Disable support for the @code{dllimport} *** 5971,5977 **** @opindex msingle-pic-base Treat the register used for PIC addressing as read-only, rather than loading it in the prologue for each function. The run-time system is ! responsible for initialising this register with an appropriate value before execution begins. @item -mpic-register=@var{reg} --- 5872,5878 ---- @opindex msingle-pic-base Treat the register used for PIC addressing as read-only, rather than loading it in the prologue for each function. The run-time system is ! responsible for initializing this register with an appropriate value before execution begins. @item -mpic-register=@var{reg} *************** This option makes symbolic debugging imp *** 6096,6101 **** --- 5997,6010 ---- These @option{-m} options are defined for Mitsubishi M32R/D architectures: @table @gcctabopt + @item -m32rx + @opindex m32rx + Generate code for the M32R/X@. + + @item -m32r + @opindex m32r + Generate code for the M32R@. This is the default. + @item -mcode-model=small @opindex mcode-model=small Assume all objects live in the lower 16MB of memory (so that their addresses *************** pointer is not eliminated when debugging *** 6231,6245 **** -g switch. @item -moptimize-arg-area - @itemx -mno-optimize-arg-area @opindex moptimize-arg-area - @opindex mno-optimize-arg-area @cindex arguments in frame (88k) ! Control how function arguments are stored in stack frames. ! @option{-moptimize-arg-area} saves space by optimizing them, but this ! conflicts with the 88open specifications. The opposite alternative, ! @option{-mno-optimize-arg-area}, agrees with 88open standards. By default ! GCC does not optimize the argument area. @item -mshort-data-@var{num} @opindex mshort-data --- 6140,6155 ---- -g switch. @item -moptimize-arg-area @opindex moptimize-arg-area @cindex arguments in frame (88k) ! Save space by reorganizing the stack frame. This option generates code ! that does not agree with the 88open specifications, but uses less ! memory. ! ! @itemx -mno-optimize-arg-area ! @opindex mno-optimize-arg-area ! Do not reorganize the stack frame to save space. This is the default. ! The generated conforms to the specification, but uses more memory. @item -mshort-data-@var{num} @opindex mshort-data *************** division by zero under certain condition *** 6325,6338 **** compiling code that might be run on such a processor, GCC generates code that explicitly checks for zero-valued divisors and traps with exception number 503 when one is detected. Use of ! mno-check-zero-division suppresses such checking for code generated to run on an MC88100 processor. ! GCC assumes that the MC88110 processor correctly detects all ! instances of integer division by zero. When @option{-m88110} is ! specified, both @option{-mcheck-zero-division} and ! @option{-mno-check-zero-division} are ignored, and no explicit checks for ! zero-valued divisors are generated. @item -muse-div-instruction @opindex muse-div-instruction --- 6235,6248 ---- compiling code that might be run on such a processor, GCC generates code that explicitly checks for zero-valued divisors and traps with exception number 503 when one is detected. Use of ! @option{-mno-check-zero-division} suppresses such checking for code generated to run on an MC88100 processor. ! GCC assumes that the MC88110 processor correctly detects all instances ! of integer division by zero. When @option{-m88110} is specified, no ! explicit checks for zero-valued divisors are generated, and both ! @option{-mcheck-zero-division} and @option{-mno-check-zero-division} are ! ignored. @item -muse-div-instruction @opindex muse-div-instruction *************** language, and are often the source of po *** 6382,6387 **** --- 6292,6301 ---- GCC issues no such warning. @end table + @c break page here to avoid unsightly interparagraph stretch. + @c -zw, 2001-8-17 + @page + @node RS/6000 and PowerPC Options @subsection IBM RS/6000 and PowerPC Options @cindex RS/6000 and PowerPC Options *************** allow use of the MQ register; specify th *** 6462,6474 **** @itemx -mold-mnemonics @opindex mnew-mnemonics @opindex mold-mnemonics ! Select which mnemonics to use in the generated assembler code. ! @option{-mnew-mnemonics} requests output that uses the assembler mnemonics ! defined for the PowerPC architecture, while @option{-mold-mnemonics} ! requests the assembler mnemonics defined for the POWER architecture. ! Instructions defined in only one architecture have only one mnemonic; ! GCC uses that mnemonic irrespective of which of these options is ! specified. GCC defaults to the mnemonics appropriate for the architecture in use. Specifying @option{-mcpu=@var{cpu_type}} sometimes overrides the --- 6376,6387 ---- @itemx -mold-mnemonics @opindex mnew-mnemonics @opindex mold-mnemonics ! Select which mnemonics to use in the generated assembler code. With ! @option{-mnew-mnemonics}, GCC uses the assembler mnemonics defined for ! the PowerPC architecture. With @option{-mold-mnemonics} it uses the ! assembler mnemonics defined for the POWER architecture. Instructions ! defined in only one architecture have only one mnemonic; GCC uses that ! mnemonic irrespective of which of these options is specified. GCC defaults to the mnemonics appropriate for the architecture in use. Specifying @option{-mcpu=@var{cpu_type}} sometimes overrides the *************** instruction scheduling parameters for ma *** 6483,6538 **** Supported values for @var{cpu_type} are @samp{rios}, @samp{rios1}, @samp{rsc}, @samp{rios2}, @samp{rs64a}, @samp{601}, @samp{602}, @samp{603}, @samp{603e}, @samp{604}, @samp{604e}, @samp{620}, ! @samp{630}, @samp{740}, @samp{750}, @samp{power}, @samp{power2}, ! @samp{powerpc}, @samp{403}, @samp{505}, @samp{801}, @samp{821}, ! @samp{823}, and @samp{860} and @samp{common}. @option{-mcpu=power}, ! @option{-mcpu=power2}, @option{-mcpu=powerpc}, and @option{-mcpu=powerpc64} ! specify generic POWER, POWER2, pure 32-bit PowerPC (i.e., not MPC601), ! and 64-bit PowerPC architecture machine types, with an appropriate, ! generic processor model assumed for scheduling purposes. ! ! Specifying any of the following options: ! @option{-mcpu=rios1}, @option{-mcpu=rios2}, @option{-mcpu=rsc}, ! @option{-mcpu=power}, or @option{-mcpu=power2} ! enables the @option{-mpower} option and disables the @option{-mpowerpc} option; ! @option{-mcpu=601} enables both the @option{-mpower} and @option{-mpowerpc} options. ! All of @option{-mcpu=rs64a}, @option{-mcpu=602}, @option{-mcpu=603}, ! @option{-mcpu=603e}, @option{-mcpu=604}, @option{-mcpu=620}, @option{-mcpu=630}, ! @option{-mcpu=740}, and @option{-mcpu=750} ! enable the @option{-mpowerpc} option and disable the @option{-mpower} option. ! Exactly similarly, all of @option{-mcpu=403}, ! @option{-mcpu=505}, @option{-mcpu=821}, @option{-mcpu=860} and @option{-mcpu=powerpc} ! enable the @option{-mpowerpc} option and disable the @option{-mpower} option. ! @option{-mcpu=common} disables both the ! @option{-mpower} and @option{-mpowerpc} options. ! AIX versions 4 or greater selects @option{-mcpu=common} by default, so ! that code will operate on all members of the RS/6000 POWER and PowerPC ! families. In that case, GCC will use only the instructions in the ! common subset of both architectures plus some special AIX common-mode ! calls, and will not use the MQ register. GCC assumes a generic processor model for scheduling purposes. ! Specifying any of the options @option{-mcpu=rios1}, @option{-mcpu=rios2}, ! @option{-mcpu=rsc}, @option{-mcpu=power}, or @option{-mcpu=power2} also ! disables the @samp{new-mnemonics} option. Specifying @option{-mcpu=601}, ! @option{-mcpu=602}, @option{-mcpu=603}, @option{-mcpu=603e}, @option{-mcpu=604}, ! @option{-mcpu=620}, @option{-mcpu=630}, @option{-mcpu=403}, @option{-mcpu=505}, ! @option{-mcpu=821}, @option{-mcpu=860} or @option{-mcpu=powerpc} also enables ! the @samp{new-mnemonics} option. ! Specifying @option{-mcpu=403}, @option{-mcpu=821}, or @option{-mcpu=860} also ! enables the @option{-msoft-float} option. @item -mtune=@var{cpu_type} @opindex mtune Set the instruction scheduling parameters for machine type ! @var{cpu_type}, but do not set the architecture type, register usage, ! choice of mnemonics like @option{-mcpu=@var{cpu_type}} would. The same ! values for @var{cpu_type} are used for @option{-mtune=@var{cpu_type}} as ! for @option{-mcpu=@var{cpu_type}}. The @option{-mtune=@var{cpu_type}} ! option overrides the @option{-mcpu=@var{cpu_type}} option in terms of ! instruction scheduling parameters. @item -mfull-toc @itemx -mno-fp-in-toc --- 6396,6477 ---- Supported values for @var{cpu_type} are @samp{rios}, @samp{rios1}, @samp{rsc}, @samp{rios2}, @samp{rs64a}, @samp{601}, @samp{602}, @samp{603}, @samp{603e}, @samp{604}, @samp{604e}, @samp{620}, ! @samp{630}, @samp{740}, @samp{7400}, @samp{7450}, @samp{750}, ! @samp{power}, @samp{power2}, @samp{powerpc}, @samp{403}, @samp{505}, ! @samp{801}, @samp{821}, @samp{823}, and @samp{860} and @samp{common}. ! @option{-mcpu=common} selects a completely generic processor. Code ! generated under this option will run on any POWER or PowerPC processor. ! GCC will use only the instructions in the common subset of both ! architectures, and will not use the MQ register. GCC assumes a generic processor model for scheduling purposes. ! @option{-mcpu=power}, @option{-mcpu=power2}, @option{-mcpu=powerpc}, and ! @option{-mcpu=powerpc64} specify generic POWER, POWER2, pure 32-bit ! PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine ! types, with an appropriate, generic processor model assumed for ! scheduling purposes. ! The other options specify a specific processor. Code generated under ! those options will run best on that processor, and may not run at all on ! others. ! ! The @option{-mcpu} options automatically enable or disable other ! @option{-m} options as follows: ! ! @table @samp ! @item common ! @option{-mno-power}, @option{-mno-powerc} ! ! @item power ! @itemx power2 ! @itemx rios1 ! @itemx rios2 ! @itemx rsc ! @option{-mpower}, @option{-mno-powerpc}, @option{-mno-new-mnemonics} ! ! @item powerpc ! @itemx rs64a ! @itemx 602 ! @itemx 603 ! @itemx 603e ! @itemx 604 ! @itemx 620 ! @itemx 630 ! @itemx 740 ! @itemx 7400 ! @itemx 7450 ! @itemx 750 ! @itemx 505 ! @option{-mno-power}, @option{-mpowerpc}, @option{-mnew-mnemonics} ! ! @item 601 ! @option{-mpower}, @option{-mpowerpc}, @option{-mnew-mnemonics} ! ! @item 403 ! @itemx 821 ! @itemx 860 ! @option{-mno-power}, @option{-mpowerpc}, @option{-mnew-mnemonics}, @option{-msoft-float} ! @end table @item -mtune=@var{cpu_type} @opindex mtune Set the instruction scheduling parameters for machine type ! @var{cpu_type}, but do not set the architecture type, register usage, or ! choice of mnemonics, as @option{-mcpu=@var{cpu_type}} would. The same ! values for @var{cpu_type} are used for @option{-mtune} as for ! @option{-mcpu}. If both are specified, the code generated will use the ! architecture, registers, and mnemonics set by @option{-mcpu}, but the ! scheduling parameters set by @option{-mtune}. ! ! @item -maltivec ! @itemx -mno-altivec ! @opindex maltivec ! @opindex mno-altivec ! These switches enable or disable the use of built-in functions that ! allow access to the AltiVec instruction set. You may also need to set ! @option{-mabi=altivec} to adjust the current ABI with AltiVec ABI ! enhancements. @item -mfull-toc @itemx -mno-fp-in-toc *************** stack is inefficient and rarely needed, *** 6592,6603 **** default and only is necessary when calling subroutines compiled by AIX XL compilers without optimization. - @item -mthreads - @opindex mthreads - Support @dfn{AIX Threads}. Link an application written to use - @dfn{pthreads} with special libraries and startup code to enable the - application to run. - @item -mpe @opindex mpe Support @dfn{IBM RS/6000 SP} @dfn{Parallel Environment} (PE)@. Link an --- 6531,6536 ---- *************** enable the application to run. The syst *** 6606,6612 **** standard location (@file{/usr/lpp/ppe.poe/}), or the @file{specs} file must be overridden with the @option{-specs=} option to specify the appropriate directory location. The Parallel Environment does not ! support threads, so the @option{-mpe} option and the @option{-mthreads} option are incompatible. @item -msoft-float --- 6539,6545 ---- standard location (@file{/usr/lpp/ppe.poe/}), or the @file{specs} file must be overridden with the @option{-specs=} option to specify the appropriate directory location. The Parallel Environment does not ! support threads, so the @option{-mpe} option and the @option{-pthread} option are incompatible. @item -msoft-float *************** operating system. *** 6757,6767 **** --- 6690,6724 ---- On System V.4 and embedded PowerPC systems compile code for the Linux-based GNU system. + @item -mcall-gnu + @opindex mcall-gnu + On System V.4 and embedded PowerPC systems compile code for the + Hurd-based GNU system. + @item -mcall-netbsd @opindex mcall-netbsd On System V.4 and embedded PowerPC systems compile code for the NetBSD operating system. + @item -maix-struct-return + @opindex maix-struct-return + Return all structures in memory (as specified by the AIX ABI)@. + + @item -msvr4-struct-return + @opindex msvr4-struct-return + Return structures smaller than 8 bytes in registers (as specified by the + SVR4 ABI)@. + + @item -mabi=altivec + @opindex mabi=altivec + Extend the current ABI with AltiVec ABI extensions. This does not + change the default ABI, instead it adds the AltiVec ABI extensions to + the current ABI@. + + @item -mabi=no-altivec + @opindex mabi=no-altivec + Disable AltiVec ABI extensions for the current ABI. + @item -mprototype @itemx -mno-prototype @opindex mprototype *************** All modules should be compiled with the *** 6889,6894 **** --- 6846,6856 ---- On System V.4 and embedded PowerPC systems do (do not) emit register names in the assembly language output using symbolic forms. + @item -pthread + @opindex pthread + Adds support for multithreading with the @dfn{pthreads} library. + This option sets flags for both the preprocessor and linker. + @end table @node RT Options *************** option @option{-mhc-struct-return}. *** 6955,6962 **** These @samp{-m} options are defined for the MIPS family of computers: @table @gcctabopt ! @item -mcpu=@var{cpu-type} ! @opindex mcpu Assume the defaults for the machine type @var{cpu-type} when scheduling instructions. The choices for @var{cpu-type} are @samp{r2000}, @samp{r3000}, @samp{r3900}, @samp{r4000}, @samp{r4100}, @samp{r4300}, @samp{r4400}, --- 6917,6935 ---- These @samp{-m} options are defined for the MIPS family of computers: @table @gcctabopt ! ! @item -march=@var{cpu-type} ! @opindex march ! Assume the defaults for the machine type @var{cpu-type} when generating ! instructions. The choices for @var{cpu-type} are @samp{r2000}, @samp{r3000}, ! @samp{r3900}, @samp{r4000}, @samp{r4100}, @samp{r4300}, @samp{r4400}, ! @samp{r4600}, @samp{r4650}, @samp{r5000}, @samp{r6000}, @samp{r8000}, ! and @samp{orion}. Additionally, the @samp{r2000}, @samp{r3000}, ! @samp{r4000}, @samp{r5000}, and @samp{r6000} can be abbreviated as ! @samp{r2k} (or @samp{r2K}), @samp{r3k}, etc. ! ! @item -mtune=@var{cpu-type} ! @opindex mtune Assume the defaults for the machine type @var{cpu-type} when scheduling instructions. The choices for @var{cpu-type} are @samp{r2000}, @samp{r3000}, @samp{r3900}, @samp{r4000}, @samp{r4100}, @samp{r4300}, @samp{r4400}, *************** chip, the compiler will not generate any *** 6969,6974 **** --- 6942,6951 ---- of the MIPS ISA (instruction set architecture) without a @option{-mipsX} or @option{-mabi} switch being used. + @item -mcpu=@var{cpu-type} + @opindex mcpu + This is identical to specifying both @option{-march} and @option{-mtune}. + @item -mips1 @opindex mips1 Issue instructions from level 1 of the MIPS ISA@. This is the default. *************** the default. *** 7001,7006 **** --- 6978,6995 ---- Assume that 32 64-bit floating point registers are available. This is the default when the @option{-mips3} option is used. + @item -mfused-madd + @itemx -mno-fused-madd + @opindex mfused-madd + @opindex mno-fused-madd + Generate code that uses (does not use) the floating point multiply and + accumulate instructions, when they are available. These instructions + are generated by default if they are available, but this may be + undesirable if the extra precision causes problems or on certain chips + in the mode where denormals are rounded to zero where denormals + generated by multiply and accumulate instructions cause exceptions + anyway. + @item -mgp32 @opindex mgp32 Assume that 32 32-bit general purpose registers are available. This is *************** occurs in the following two instructions *** 7261,7296 **** @item -no-crt0 @opindex no-crt0 Do not include the default crt0. @end table - @ifset INTERNALS These options are defined by the macro @code{TARGET_SWITCHES} in the machine description. The default for the options is also defined by that macro, which enables you to change the defaults. - @end ifset ! @node i386 Options ! @subsection Intel 386 Options @cindex i386 Options @cindex Intel 386 Options ! These @samp{-m} options are defined for the i386 family of computers: @table @gcctabopt @item -mcpu=@var{cpu-type} @opindex mcpu ! Assume the defaults for the machine type @var{cpu-type} when scheduling ! instructions. The choices for @var{cpu-type} are @samp{i386}, ! @samp{i486}, @samp{i586}, @samp{i686}, @samp{pentium}, ! @samp{pentiumpro}, @samp{k6}, and @samp{athlon} While picking a specific @var{cpu-type} will schedule things appropriately for that particular chip, the compiler will not generate any code that does not run on the i386 without the @option{-march=@var{cpu-type}} option being used. @samp{i586} is equivalent to @samp{pentium} and @samp{i686} ! is equivalent to @samp{pentiumpro}. @samp{k6} is the AMD chip as ! opposed to the Intel ones. @item -march=@var{cpu-type} @opindex march --- 7250,7300 ---- @item -no-crt0 @opindex no-crt0 Do not include the default crt0. + + @item -mflush-func=@var{func} + @itemx -mno-flush-func + @opindex mflush-func + Specifies the function to call to flush the I and D caches, or to not + call any such function. If called, the function must take the same + arguments as the common @code{_flush_func()}, that is, the address of the + memory range for which the cache is being flushed, the size of the + memory range, and the number 3 (to flush both caches). The default + depends on the target gcc was configured for, but commonly is either + @samp{_flush_func} or @samp{__cpu_flush}. @end table These options are defined by the macro @code{TARGET_SWITCHES} in the machine description. The default for the options is also defined by that macro, which enables you to change the defaults. ! @node i386 and x86-64 Options ! @subsection Intel 386 and AMD x86-64 Options @cindex i386 Options + @cindex x86-64 Options @cindex Intel 386 Options + @cindex AMD x86-64 Options ! These @samp{-m} options are defined for the i386 and x86-64 family of ! computers: @table @gcctabopt @item -mcpu=@var{cpu-type} @opindex mcpu ! Tune to @var{cpu-type} everything applicable about the generated code, except ! for the ABI and the set of available instructions. The choices for ! @var{cpu-type} are @samp{i386}, @samp{i486}, @samp{i586}, @samp{i686}, ! @samp{pentium}, @samp{pentium-mmx}, @samp{pentiumpro}, @samp{pentium2}, ! @samp{pentium3}, @samp{pentium4}, @samp{k6}, @samp{k6-2}, @samp{k6-3}, ! @samp{athlon}, @samp{athlon-tbird}, @samp{athlon-4}, @samp{athlon-xp} ! and @samp{athlon-mp}. While picking a specific @var{cpu-type} will schedule things appropriately for that particular chip, the compiler will not generate any code that does not run on the i386 without the @option{-march=@var{cpu-type}} option being used. @samp{i586} is equivalent to @samp{pentium} and @samp{i686} ! is equivalent to @samp{pentiumpro}. @samp{k6} and @samp{athlon} are the ! AMD chips as opposed to the Intel ones. @item -march=@var{cpu-type} @opindex march *************** specifying @option{-march=@var{cpu-type} *** 7306,7317 **** @opindex m486 @opindex mpentium @opindex mpentiumpro ! Synonyms for @option{-mcpu=i386}, @option{-mcpu=i486}, @option{-mcpu=pentium}, and @option{-mcpu=pentiumpro} ! respectively. These synonyms are deprecated. ! @item -mintel-syntax ! @opindex mintel-syntax ! Emit assembly using Intel syntax opcodes instead of AT&T syntax. @item -mieee-fp @itemx -mno-ieee-fp --- 7310,7365 ---- @opindex m486 @opindex mpentium @opindex mpentiumpro ! These options are synonyms for @option{-mcpu=i386}, @option{-mcpu=i486}, ! @option{-mcpu=pentium}, and @option{-mcpu=pentiumpro} respectively. ! These synonyms are deprecated. ! @item -mfpmath=@var{unit} ! @opindex march ! generate floating point arithmetics for selected unit @var{unit}. the choices ! for @var{unit} are: ! ! @table @samp ! @item 387 ! Use the standard 387 floating point coprocessor present majority of chips and ! emulated otherwise. Code compiled with this option will run almost everywhere. ! The temporary results are computed in 80bit precesion instead of precision ! specified by the type resulting in slightly different results compared to most ! of other chips. See @option{-ffloat-store} for more detailed description. ! ! This is the default choice for i386 compiler. ! ! @item sse ! Use scalar floating point instructions present in the SSE instruction set. ! This instruction set is supported by Pentium3 and newer chips, in the AMD line ! by Athlon-4, Athlon-xp and Athlon-mp chips. The earlier version of SSE ! instruction set supports only single precision arithmetics, thus the double and ! extended precision arithmetics is still done using 387. Later version, present ! only in Pentium4 and the future AMD x86-64 chips supports double precision ! arithmetics too. ! ! For i387 you need to use @option{-march=@var{cpu-type}}, @option{-msse} or ! @option{-msse2} switches to enable SSE extensions and make this option ! effective. For x86-64 compiler, these extensions are enabled by default. ! ! The resulting code should be considerably faster in majority of cases and avoid ! the numerical instability problems of 387 code, but may break some existing ! code that expects temporaries to be 80bit. ! ! This is the default choice for x86-64 compiler. ! ! @item sse,387 ! Attempt to utilize both instruction sets at once. This effectivly double the ! amount of available registers and on chips with separate execution units for ! 387 and SSE the execution resources too. Use this option with care, as it is ! still experimental, because gcc register allocator does not model separate ! functional units well resulting in instable performance. ! @end table ! ! @item -masm=@var{dialect} ! @opindex masm=@var{dialect} ! Output asm instructions using selected @var{dialect}. Supported choices are ! @samp{intel} or @samp{att} (the default one). @item -mieee-fp @itemx -mno-ieee-fp *************** in ordinary CPU registers instead. *** 7350,7358 **** @opindex mno-fancy-math-387 Some 387 emulators do not support the @code{sin}, @code{cos} and @code{sqrt} instructions for the 387. Specify this option to avoid ! generating those instructions. This option is the default on FreeBSD@. ! As of revision 2.6.1, these instructions are not generated unless you ! also use the @option{-ffast-math} switch. @item -malign-double @itemx -mno-align-double --- 7398,7409 ---- @opindex mno-fancy-math-387 Some 387 emulators do not support the @code{sin}, @code{cos} and @code{sqrt} instructions for the 387. Specify this option to avoid ! generating those instructions. This option is the default on FreeBSD, ! OpenBSD and NetBSD@. This option is overridden when @option{-march} ! indicates that the target cpu will always have an FPU and so the ! instruction will not need emulation. As of revision 2.6.1, these ! instructions are not generated unless you also use the ! @option{-funsafe-math-optimizations} switch. @item -malign-double @itemx -mno-align-double *************** application binary interface. This is t *** 7385,7393 **** @itemx -mno-svr3-shlib @opindex msvr3-shlib @opindex mno-svr3-shlib ! Control whether GCC places uninitialized locals into @code{bss} or ! @code{data}. @option{-msvr3-shlib} places these locals into @code{bss}. ! These options are meaningful only on System V Release 3. @item -mrtd @opindex mrtd --- 7436,7444 ---- @itemx -mno-svr3-shlib @opindex msvr3-shlib @opindex mno-svr3-shlib ! Control whether GCC places uninitialized local variables into the ! @code{bss} or @code{data} segments. @option{-msvr3-shlib} places them ! into @code{bss}. These options are meaningful only on System V Release 3. @item -mrtd @opindex mrtd *************** In addition, seriously incorrect code wi *** 7415,7430 **** function with too many arguments. (Normally, extra arguments are harmlessly ignored.) - @item -mreg-alloc=@var{regs} - @opindex mreg-alloc - Control the default allocation order of integer registers. The - string @var{regs} is a series of letters specifying a register. The - supported letters are: @code{a} allocate EAX; @code{b} allocate EBX; - @code{c} allocate ECX; @code{d} allocate EDX; @code{S} allocate ESI; - @code{D} allocate EDI; @code{B} allocate EBP. - This option is deprecated and will not be supported by future releases - of gcc. - @item -mregparm=@var{num} @opindex mregparm Control how many registers are used to pass integer arguments. By --- 7466,7471 ---- *************** function by using the function attribute *** 7438,7476 **** value, including any libraries. This includes the system libraries and startup modules. - @item -malign-loops=@var{num} - @opindex malign-loops - Align loops to a 2 raised to a @var{num} byte boundary. If - @option{-malign-loops} is not specified, the default is 2 unless - gas 2.8 (or later) is being used in which case the default is - to align the loop on a 16 byte boundary if it is less than 8 - bytes away. - - @item -malign-jumps=@var{num} - @opindex malign-jumps - Align instructions that are only jumped to to a 2 raised to a @var{num} - byte boundary. If @option{-malign-jumps} is not specified, the default is - 2 if optimizing for a 386, and 4 if optimizing for a 486 unless - gas 2.8 (or later) is being used in which case the default is - to align the instruction on a 16 byte boundary if it is less - than 8 bytes away. - - @item -malign-functions=@var{num} - @opindex malign-functions - Align the start of functions to a 2 raised to @var{num} byte boundary. - If @option{-malign-functions} is not specified, the default is 2 if optimizing - for a 386, and 4 if optimizing for a 486. - @item -mpreferred-stack-boundary=@var{num} @opindex mpreferred-stack-boundary Attempt to keep the stack boundary aligned to a 2 raised to @var{num} byte boundary. If @option{-mpreferred-stack-boundary} is not specified, ! the default is 4 (16 bytes or 128 bits). ! The stack is required to be aligned on a 4 byte boundary. On Pentium ! and PentiumPro, @code{double} and @code{long double} values should be ! aligned to an 8 byte boundary (see @option{-malign-double}) or suffer ! significant run time performance penalties. On Pentium III, the Streaming SIMD Extension (SSE) data type @code{__m128} suffers similar penalties if it is not 16 byte aligned. --- 7479,7495 ---- value, including any libraries. This includes the system libraries and startup modules. @item -mpreferred-stack-boundary=@var{num} @opindex mpreferred-stack-boundary Attempt to keep the stack boundary aligned to a 2 raised to @var{num} byte boundary. If @option{-mpreferred-stack-boundary} is not specified, ! the default is 4 (16 bytes or 128 bits), except when optimizing for code ! size (@option{-Os}), in which case the default is the minimum correct ! alignment (4 bytes for x86, and 8 bytes for x86-64). ! On Pentium and PentiumPro, @code{double} and @code{long double} values ! should be aligned to an 8 byte boundary (see @option{-malign-double}) or ! suffer significant run time performance penalties. On Pentium III, the Streaming SIMD Extension (SSE) data type @code{__m128} suffers similar penalties if it is not 16 byte aligned. *************** stack boundary from a function compiled *** 7482,7491 **** boundary will most likely misalign the stack. It is recommended that libraries that use callbacks always use the default setting. ! This extra alignment does consume extra stack space. Code that is sensitive ! to stack space usage, such as embedded systems and operating system kernels, ! may want to reduce the preferred alignment to ! @option{-mpreferred-stack-boundary=2}. @item -mpush-args @itemx -mno-push-args --- 7501,7530 ---- boundary will most likely misalign the stack. It is recommended that libraries that use callbacks always use the default setting. ! This extra alignment does consume extra stack space, and generally ! increases code size. Code that is sensitive to stack space usage, such ! as embedded systems and operating system kernels, may want to reduce the ! preferred alignment to @option{-mpreferred-stack-boundary=2}. ! ! @item -mmmx ! @itemx -mno-mmx ! @item -msse ! @itemx -mno-sse ! @item -msse2 ! @itemx -mno-sse2 ! @item -m3dnow ! @itemx -mno-3dnow ! @opindex mmmx ! @opindex mno-mmx ! @opindex msse ! @opindex mno-sse ! @opindex m3dnow ! @opindex mno-3dnow ! These switches enable or disable the use of built-in functions that allow ! direct access to the MMX, SSE and 3Dnow extensions of the instruction set. ! ! @xref{X86 Built-in Functions}, for details of the functions enabled ! and disabled by these switches. @item -mpush-args @itemx -mno-push-args *************** makes an extra register available in lea *** 7534,7539 **** --- 7573,7601 ---- which might make debugging harder. @end table + These @samp{-m} switches are supported in addition to the above + on AMD x86-64 processors in 64-bit environments. + + @table @gcctabopt + @item -m32 + @itemx -m64 + @opindex m32 + @opindex m64 + Generate code for a 32-bit or 64-bit environment. + The 32-bit environment sets int, long and pointer to 32 bits and + generates code that runs on any i386 system. + The 64-bit environment sets int to 32 bits and long and pointer + to 64 bits and generates code for AMD's x86-64 architecture. + + @item -mno-red-zone + @opindex no-red-zone + Do not use a so called red zone for x86-64 code. The red zone is mandated + by the x86-64 ABI, it is a 128-byte area beyond the location of the + stack pointer that will not be modified by signal or interrupt handlers + and therefore can be used for temporary data without adjusting the stack + pointer. The flag @option{-mno-red-zone} disables this red zone. + @end table + @node HPPA Options @subsection HPPA Options @cindex HPPA Options *************** These @samp{-m} options are defined for *** 7771,7777 **** @opindex msoft-float Use (do not use) the hardware floating-point instructions for floating-point operations. When @option{-msoft-float} is specified, ! functions in @file{libgcc1.c} will be used to perform floating-point operations. Unless they are replaced by routines that emulate the floating-point operations, or compiled in such a way as to call such emulations routines, these routines will issue floating-point --- 7833,7839 ---- @opindex msoft-float Use (do not use) the hardware floating-point instructions for floating-point operations. When @option{-msoft-float} is specified, ! functions in @file{libgcc.a} will be used to perform floating-point operations. Unless they are replaced by routines that emulate the floating-point operations, or compiled in such a way as to call such emulations routines, these routines will issue floating-point *************** Generate code that uses (does not use) t *** 7790,7797 **** @option{-mno-fp-regs} implies @option{-msoft-float}. If the floating-point register set is not used, floating point operands are passed in integer registers as if they were integers and floating-point results are passed ! in $0 instead of $f0. This is a non-standard calling sequence, so any ! function with a floating-point argument or return value called by code compiled with @option{-mno-fp-regs} must also be compiled with that option. --- 7852,7859 ---- @option{-mno-fp-regs} implies @option{-msoft-float}. If the floating-point register set is not used, floating point operands are passed in integer registers as if they were integers and floating-point results are passed ! in @code{$0} instead of @code{$f0}. This is a non-standard calling sequence, ! so any function with a floating-point argument or return value called by code compiled with @option{-mno-fp-regs} must also be compiled with that option. *************** maximum performance. It is mostly compl *** 7805,7848 **** point standard. However, for full compliance, software assistance is required. This option generates code fully IEEE compliant code @emph{except} that the @var{inexact-flag} is not maintained (see below). ! If this option is turned on, the CPP macro @code{_IEEE_FP} is defined ! during compilation. The option is a shorthand for: @option{-D_IEEE_FP ! -mfp-trap-mode=su -mtrap-precision=i -mieee-conformant}. The resulting ! code is less efficient but is able to correctly support denormalized ! numbers and exceptional IEEE values such as not-a-number and plus/minus ! infinity. Other Alpha compilers call this option ! @option{-ieee_with_no_inexact}. @item -mieee-with-inexact @opindex mieee-with-inexact ! @c overfull hbox here --bob 22 jul96 ! @c original text between ignore ... end ignore ! @ignore ! This is like @option{-mieee} except the generated code also maintains the ! IEEE @var{inexact-flag}. Turning on this option causes the generated ! code to implement fully-compliant IEEE math. The option is a shorthand ! for @option{-D_IEEE_FP -D_IEEE_FP_INEXACT} plus @option{-mieee-conformant}, ! @option{-mfp-trap-mode=sui}, and @option{-mtrap-precision=i}. On some Alpha ! implementations the resulting code may execute significantly slower than ! the code generated by default. Since there is very little code that ! depends on the @var{inexact-flag}, you should normally not specify this ! option. Other Alpha compilers call this option ! @option{-ieee_with_inexact}. ! @end ignore ! @c changed paragraph ! This is like @option{-mieee} except the generated code also maintains the ! IEEE @var{inexact-flag}. Turning on this option causes the generated ! code to implement fully-compliant IEEE math. The option is a shorthand ! for @option{-D_IEEE_FP -D_IEEE_FP_INEXACT} plus the three following: ! @option{-mieee-conformant}, ! @option{-mfp-trap-mode=sui}, ! and @option{-mtrap-precision=i}. ! On some Alpha implementations the resulting code may execute ! significantly slower than the code generated by default. Since there ! is very little code that depends on the @var{inexact-flag}, you should normally not specify this option. Other Alpha compilers call this option @option{-ieee_with_inexact}. - @c end changes to prevent overfull hboxes @item -mfp-trap-mode=@var{trap-mode} @opindex mfp-trap-mode --- 7867,7889 ---- point standard. However, for full compliance, software assistance is required. This option generates code fully IEEE compliant code @emph{except} that the @var{inexact-flag} is not maintained (see below). ! If this option is turned on, the preprocessor macro @code{_IEEE_FP} is ! defined during compilation. The resulting code is less efficient but is ! able to correctly support denormalized numbers and exceptional IEEE ! values such as not-a-number and plus/minus infinity. Other Alpha ! compilers call this option @option{-ieee_with_no_inexact}. @item -mieee-with-inexact @opindex mieee-with-inexact ! This is like @option{-mieee} except the generated code also maintains ! the IEEE @var{inexact-flag}. Turning on this option causes the ! generated code to implement fully-compliant IEEE math. In addition to ! @code{_IEEE_FP}, @code{_IEEE_FP_EXACT} is defined as a preprocessor ! macro. On some Alpha implementations the resulting code may execute ! significantly slower than the code generated by default. Since there is ! very little code that depends on the @var{inexact-flag}, you should normally not specify this option. Other Alpha compilers call this option @option{-ieee_with_inexact}. @item -mfp-trap-mode=@var{trap-mode} @opindex mfp-trap-mode *************** assembler (@option{-malpha-as}) or by th *** 7955,7987 **** @itemx -mno-bwx @itemx -mcix @itemx -mno-cix @itemx -mmax @itemx -mno-max @opindex mbwx @opindex mno-bwx @opindex mcix @opindex mno-cix @opindex mmax @opindex mno-max Indicate whether GCC should generate code to use the optional BWX, ! CIX, and MAX instruction sets. The default is to use the instruction sets ! supported by the CPU type specified via @option{-mcpu=} option or that of the CPU on which GCC was built if none was specified. @item -mcpu=@var{cpu_type} @opindex mcpu ! Set the instruction set, register set, and instruction scheduling ! parameters for machine type @var{cpu_type}. You can specify either the ! @samp{EV} style name or the corresponding chip number. GCC ! supports scheduling parameters for the EV4 and EV5 family of processors ! and will choose the default values for the instruction set from ! the processor you specify. If you do not specify a processor type, ! GCC will default to the processor on which the compiler was built. Supported values for @var{cpu_type} are @table @samp @item ev4 @itemx 21064 Schedules as an EV4 and has no instruction set extensions. --- 7996,8072 ---- @itemx -mno-bwx @itemx -mcix @itemx -mno-cix + @itemx -mfix + @itemx -mno-fix @itemx -mmax @itemx -mno-max @opindex mbwx @opindex mno-bwx @opindex mcix @opindex mno-cix + @opindex mfix + @opindex mno-fix @opindex mmax @opindex mno-max Indicate whether GCC should generate code to use the optional BWX, ! CIX, FIX and MAX instruction sets. The default is to use the instruction ! sets supported by the CPU type specified via @option{-mcpu=} option or that of the CPU on which GCC was built if none was specified. + @item -mfloat-vax + @itemx -mfloat-ieee + @opindex mfloat-vax + @opindex mfloat-ieee + Generate code that uses (does not use) VAX F and G floating point + arithmetic instead of IEEE single and double precision. + + @item -mexplicit-relocs + @itemx -mno-explicit-relocs + @opindex mexplicit-relocs + @opindex mno-explicit-relocs + Older Alpha assemblers provided no way to generate symbol relocations + except via assembler macros. Use of these macros does not allow + optimial instruction scheduling. GNU binutils as of version 2.12 + supports a new syntax that allows the compiler to explicitly mark + which relocations should apply to which instructions. This option + is mostly useful for debugging, as GCC detects the capabilities of + the assembler when it is built and sets the default accordingly. + + @item -msmall-data + @itemx -mlarge-data + @opindex msmall-data + @opindex mlarge-data + When @option{-mexplicit-relocs} is in effect, static data is + accessed via @dfn{gp-relative} relocations. When @option{-msmall-data} + is used, objects 8 bytes long or smaller are placed in a @dfn{small data area} + (the @code{.sdata} and @code{.sbss} sections) and are accessed via + 16-bit relocations off of the @code{$gp} register. This limits the + size of the small data area to 64KB, but allows the variables to be + directly accessed via a single instruction. + + The default is @option{-mlarge-data}. With this option the data area + is limited to just below 2GB. Programs that require more than 2GB of + data must use @code{malloc} or @code{mmap} to allocate the data in the + heap instead of in the program's data segment. + + When generating code for shared libraries, @option{-fpic} implies + @option{-msmall-data} and @option{-fPIC} implies @option{-mlarge-data}. + @item -mcpu=@var{cpu_type} @opindex mcpu ! Set the instruction set and instruction scheduling parameters for ! machine type @var{cpu_type}. You can specify either the @samp{EV} ! style name or the corresponding chip number. GCC supports scheduling ! parameters for the EV4, EV5 and EV6 family of processors and will ! choose the default values for the instruction set from the processor ! you specify. If you do not specify a processor type, GCC will default ! to the processor on which the compiler was built. Supported values for @var{cpu_type} are @table @samp @item ev4 + @item ev45 @itemx 21064 Schedules as an EV4 and has no instruction set extensions. *************** Schedules as an EV5 and supports the BWX *** 8000,8009 **** @item ev6 @itemx 21264 ! Schedules as an EV5 (until Digital releases the scheduling parameters ! for the EV6) and supports the BWX, CIX, and MAX extensions. @end table @item -mmemory-latency=@var{time} @opindex mmemory-latency Sets the latency the scheduler should assume for typical memory --- 8085,8102 ---- @item ev6 @itemx 21264 ! Schedules as an EV6 and supports the BWX, FIX, and MAX extensions. ! ! @item ev67 ! @item 21264a ! Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX extensions. @end table + @item -mtune=@var{cpu_type} + @opindex mtune + Set only the instruction scheduling parameters for machine type + @var{cpu_type}. The instruction set is not changed. + @item -mmemory-latency=@var{time} @opindex mmemory-latency Sets the latency the scheduler should assume for typical memory *************** Note that L3 is only valid for EV5. *** 8029,8034 **** --- 8122,8139 ---- @end table @end table + @node DEC Alpha/VMS Options + @subsection DEC Alpha/VMS Options + + These @samp{-m} options are defined for the DEC Alpha/VMS implementations: + + @table @gcctabopt + @item -mvms-return-codes + @opindex mvms-return-codes + Return VMS condition codes from main. The default is to return POSIX + style condition (e.g.@ error) codes. + @end table + @node Clipper Options @subsection Clipper Options *************** Produce code for a C300 Clipper processo *** 8041,8048 **** @item -mc400 @opindex mc400 ! Produce code for a C400 Clipper processor i.e.@: use floating point ! registers f8---f15. @end table @node H8/300 Options --- 8146,8153 ---- @item -mc400 @opindex mc400 ! Produce code for a C400 Clipper processor, i.e.@: use floating point ! registers f8--f15. @end table @node H8/300 Options *************** count register BK@. *** 8269,8276 **** Enable (disable) generation of code using decrement and branch, DBcond(D), instructions. This is enabled by default for the C4x. To be on the safe side, this is disabled for the C3x, since the maximum ! iteration count on the C3x is @math{2^23 + 1} (but who iterates loops more than ! @math{2^23} times on the C3x?). Note that GCC will try to reverse a loop so that it can utilise the decrement and branch instruction, but will give up if there is more than one memory reference in the loop. Thus a loop where the loop counter is decremented can generate slightly more --- 8374,8381 ---- Enable (disable) generation of code using decrement and branch, DBcond(D), instructions. This is enabled by default for the C4x. To be on the safe side, this is disabled for the C3x, since the maximum ! iteration count on the C3x is @math{2^{23} + 1} (but who iterates loops more than ! @math{2^{23}} times on the C3x?). Note that GCC will try to reverse a loop so that it can utilise the decrement and branch instruction, but will give up if there is more than one memory reference in the loop. Thus a loop where the loop counter is decremented can generate slightly more *************** instruction, it is disabled by default. *** 8338,8346 **** @opindex mloop-unsigned @opindex mno-loop-unsigned The maximum iteration count when using RPTS and RPTB (and DB on the C40) ! is @math{2^31 + 1} since these instructions test if the iteration count is negative to terminate the loop. If the iteration count is unsigned ! there is a possibility than the @math{2^31 + 1} maximum iteration count may be exceeded. This switch allows an unsigned iteration count. @item -mti --- 8443,8451 ---- @opindex mloop-unsigned @opindex mno-loop-unsigned The maximum iteration count when using RPTS and RPTB (and DB on the C40) ! is @math{2^{31} + 1} since these instructions test if the iteration count is negative to terminate the loop. If the iteration count is unsigned ! there is a possibility than the @math{2^{31} + 1} maximum iteration count may be exceeded. This switch allows an unsigned iteration count. @item -mti *************** at90s2333, at90s2343, at90s4414, at90s44 *** 8641,8653 **** at90c8534, at90s8535). Instruction set avr3 is for the classic AVR core with up to 128K program ! memory space (MCU types: atmega103, atmega603). Instruction set avr4 is for the enhanced AVR core with up to 8K program ! memory space (MCU types: atmega83, atmega85). Instruction set avr5 is for the enhanced AVR core with up to 128K program ! memory space (MCU types: atmega161, atmega163, atmega32, at94k). @item -msize @opindex msize --- 8746,8759 ---- at90c8534, at90s8535). Instruction set avr3 is for the classic AVR core with up to 128K program ! memory space (MCU types: atmega103, atmega603, at43usb320, at76c711). Instruction set avr4 is for the enhanced AVR core with up to 8K program ! memory space (MCU types: atmega8, atmega83, atmega85). Instruction set avr5 is for the enhanced AVR core with up to 128K program ! memory space (MCU types: atmega16, atmega161, atmega163, atmega32, atmega323, ! atmega64, atmega128, at43usb355, at94k). @item -msize @opindex msize *************** generates IEEE floating-point instructio *** 8921,8927 **** @itemx -mno-backchain @opindex mbackchain @opindex mno-backchain ! Generate (or do not generate) code which maintains an explicit backchain within the stack frame that points to the caller's frame. This is currently needed to allow debugging. The default is to generate the backchain. --- 9027,9033 ---- @itemx -mno-backchain @opindex mbackchain @opindex mno-backchain ! Generate (or do not generate) code which maintains an explicit backchain within the stack frame that points to the caller's frame. This is currently needed to allow debugging. The default is to generate the backchain. *************** generate the backchain. *** 8930,8937 **** @itemx -mno-small-exec @opindex msmall-exec @opindex mno-small-exec ! Generate (or do not generate) code using the @code{bras} instruction ! to do subroutine calls. This only works reliably if the total executable size does not exceed 64k. The default is to use the @code{basr} instruction instead, which does not have this limitation. --- 9036,9043 ---- @itemx -mno-small-exec @opindex msmall-exec @opindex mno-small-exec ! Generate (or do not generate) code using the @code{bras} instruction ! to do subroutine calls. This only works reliably if the total executable size does not exceed 64k. The default is to use the @code{basr} instruction instead, which does not have this limitation. *************** When @option{-m31} is specified, generat *** 8944,8957 **** Linux for S/390 ABI@. When @option{-m64} is specified, generate code compliant to the Linux for zSeries ABI@. This allows GCC in particular to generate 64-bit instructions. For the @samp{s390} ! targets, the default is @option{-m31}, while the @samp{s390x} targets default to @option{-m64}. @item -mmvcle @itemx -mno-mvcle @opindex mmvcle @opindex mno-mvcle ! Generate (or do not generate) code using the @code{mvcle} instruction to perform block moves. When @option{-mno-mvcle} is specifed, use a @code{mvc} loop instead. This is the default. --- 9050,9063 ---- Linux for S/390 ABI@. When @option{-m64} is specified, generate code compliant to the Linux for zSeries ABI@. This allows GCC in particular to generate 64-bit instructions. For the @samp{s390} ! targets, the default is @option{-m31}, while the @samp{s390x} targets default to @option{-m64}. @item -mmvcle @itemx -mno-mvcle @opindex mmvcle @opindex mno-mvcle ! Generate (or do not generate) code using the @code{mvcle} instruction to perform block moves. When @option{-mno-mvcle} is specifed, use a @code{mvc} loop instead. This is the default. *************** The default is to not print debug inform *** 8964,8969 **** --- 9070,9408 ---- @end table + @node CRIS Options + @subsection CRIS Options + @cindex CRIS Options + + These options are defined specifically for the CRIS ports. + + @table @gcctabopt + @item -march=@var{architecture-type} + @itemx -mcpu=@var{architecture-type} + @opindex march + @opindex mcpu + Generate code for the specified architecture. The choices for + @var{architecture-type} are @samp{v3}, @samp{v8} and @samp{v10} for + respectively ETRAX@w{ }4, ETRAX@w{ }100, and ETRAX@w{ }100@w{ }LX. + Default is @samp{v0} except for cris-axis-linux-gnu, where the default is + @samp{v10}. + + @item -mtune=@var{architecture-type} + @opindex mtune + Tune to @var{architecture-type} everything applicable about the generated + code, except for the ABI and the set of available instructions. The + choices for @var{architecture-type} are the same as for + @option{-march=@var{architecture-type}}. + + @item -mmax-stack-frame=@var{n} + @opindex mmax-stack-frame + Warn when the stack frame of a function exceeds @var{n} bytes. + + @item -melinux-stacksize=@var{n} + @opindex melinux-stacksize + Only available with the @samp{cris-axis-aout} target. Arranges for + indications in the program to the kernel loader that the stack of the + program should be set to @var{n} bytes. + + @item -metrax4 + @itemx -metrax100 + @opindex metrax4 + @opindex metrax100 + The options @option{-metrax4} and @option{-metrax100} are synonyms for + @option{-march=v3} and @option{-march=v8} respectively. + + @item -mpdebug + @opindex mpdebug + Enable CRIS-specific verbose debug-related information in the assembly + code. This option also has the effect to turn off the @samp{#NO_APP} + formatted-code indicator to the assembler at the beginning of the + assembly file. + + @item -mcc-init + @opindex mcc-init + Do not use condition-code results from previous instruction; always emit + compare and test instructions before use of condition codes. + + @item -mno-side-effects + @opindex mno-side-effects + Do not emit instructions with side-effects in addressing modes other than + post-increment. + + @item -mstack-align + @itemx -mno-stack-align + @itemx -mdata-align + @itemx -mno-data-align + @itemx -mconst-align + @itemx -mno-const-align + @opindex mstack-align + @opindex mno-stack-align + @opindex mdata-align + @opindex mno-data-align + @opindex mconst-align + @opindex mno-const-align + These options (no-options) arranges (eliminate arrangements) for the + stack-frame, individual data and constants to be aligned for the maximum + single data access size for the chosen CPU model. The default is to + arrange for 32-bit alignment. ABI details such as structure layout are + not affected by these options. + + @item -m32-bit + @itemx -m16-bit + @itemx -m8-bit + @opindex m32-bit + @opindex m16-bit + @opindex m8-bit + Similar to the stack- data- and const-align options above, these options + arrange for stack-frame, writable data and constants to all be 32-bit, + 16-bit or 8-bit aligned. The default is 32-bit alignment. + + @item -mno-prologue-epilogue + @itemx -mprologue-epilogue + @opindex mno-prologue-epilogue + @opindex mprologue-epilogue + With @option{-mno-prologue-epilogue}, the normal function prologue and + epilogue that sets up the stack-frame are omitted and no return + instructions or return sequences are generated in the code. Use this + option only together with visual inspection of the compiled code: no + warnings or errors are generated when call-saved registers must be saved, + or storage for local variable needs to be allocated. + + @item -mno-gotplt + @itemx -mgotplt + @opindex mno-gotplt + @opindex mgotplt + With @option{-fpic} and @option{-fPIC}, don't generate (do generate) + instruction sequences that load addresses for functions from the PLT part + of the GOT rather than (traditional on other architectures) calls to the + PLT. The default is @option{-mgotplt}. + + @item -maout + @opindex maout + Legacy no-op option only recognized with the cris-axis-aout target. + + @item -melf + @opindex melf + Legacy no-op option only recognized with the cris-axis-elf and + cris-axis-linux-gnu targets. + + @item -melinux + @opindex melinux + Only recognized with the cris-axis-aout target, where it selects a + GNU/linux-like multilib, include files and instruction set for + @option{-march=v8}. + + @item -mlinux + @opindex mlinux + Legacy no-op option only recognized with the cris-axis-linux-gnu target. + + @item -sim + @opindex sim + This option, recognized for the cris-axis-aout and cris-axis-elf arranges + to link with input-output functions from a simulator library. Code, + initialized data and zero-initialized data are allocated consecutively. + + @item -sim2 + @opindex sim2 + Like @option{-sim}, but pass linker options to locate initialized data at + 0x40000000 and zero-initialized data at 0x80000000. + @end table + + @node MMIX Options + @subsection MMIX Options + @cindex MMIX Options + + These options are defined for the MMIX: + + @table @gcctabopt + @item -mlibfuncs + @itemx -mno-libfuncs + @opindex mlibfuncs + @opindex mno-libfuncs + Specify that intrinsic library functions are being compiled, passing all + values in registers, no matter the size. + + @item -mepsilon + @itemx -mno-epsilon + @opindex mepsilon + @opindex mno-epsilon + Generate floating-point comparison instructions that compare with respect + to the @code{rE} epsilon register. + + @item -mabi=mmixware + @itemx -mabi=gnu + @opindex mabi-mmixware + @opindex mabi=gnu + Generate code that passes function parameters and return values that (in + the called function) are seen as registers @code{$0} and up, as opposed to + the GNU ABI which uses global registers @code{$231} and up. + + @item -mzero-extend + @itemx -mno-zero-extend + @opindex mzero-extend + @opindex mno-zero-extend + When reading data from memory in sizes shorter than 64 bits, use (do not + use) zero-extending load instructions by default, rather than + sign-extending ones. + + @item -mknuthdiv + @itemx -mno-knuthdiv + @opindex mknuthdiv + @opindex mno-knuthdiv + Make the result of a division yielding a remainder have the same sign as + the divisor. With the default, @option{-mno-knuthdiv}, the sign of the + remainder follows the sign of the dividend. Both methods are + arithmetically valid, the latter being almost exclusively used. + + @item -mtoplevel-symbols + @itemx -mno-toplevel-symbols + @opindex mtoplevel-symbols + @opindex mno-toplevel-symbols + Prepend (do not prepend) a @samp{:} to all global symbols, so the assembly + code can be used with the @code{PREFIX} assembly directive. + + @item -melf + @opindex melf + Generate an executable in the ELF format, rather than the default + @samp{mmo} format used by the @command{mmix} simulator. + + @item -mbranch-predict + @itemx -mno-branch-predict + @opindex mbranch-predict + @opindex mno-branch-predict + Use (do not use) the probable-branch instructions, when static branch + prediction indicates a probable branch. + + @item -mbase-addresses + @itemx -mno-base-addresses + @opindex mbase-addresses + @opindex mno-base-addresses + Generate (do not generate) code that uses @emph{base addresses}. Using a + base address automatically generates a request (handled by the assembler + and the linker) for a constant to be set up in a global register. The + register is used for one or more base address requests within the range 0 + to 255 from the value held in the register. The generally leads to short + and fast code, but the number of different data items that can be + addressed is limited. This means that a program that uses lots of static + data may require @option{-mno-base-addresses}. + @end table + + @node PDP-11 Options + @subsection PDP-11 Options + @cindex PDP-11 Options + + These options are defined for the PDP-11: + + @table @gcctabopt + @item -mfpu + @opindex mfpu + Use hardware FPP floating point. This is the default. (FIS floating + point on the PDP-11/40 is not supported.) + + @item -msoft-float + @opindex msoft-float + Do not use hardware floating point. + + @item -mac0 + @opindex mac0 + Return floating-point results in ac0 (fr0 in Unix assembler syntax). + + @item -mno-ac0 + @opindex mno-ac0 + Return floating-point results in memory. This is the default. + + @item -m40 + @opindex m40 + Generate code for a PDP-11/40. + + @item -m45 + @opindex m45 + Generate code for a PDP-11/45. This is the default. + + @item -m10 + @opindex m10 + Generate code for a PDP-11/10. + + @item -mbcopy-builtin + @opindex bcopy-builtin + Use inline @code{movstrhi} patterns for copying memory. This is the + default. + + @item -mbcopy + @opindex mbcopy + Do not use inline @code{movstrhi} patterns for copying memory. + + @item -mint16 + @itemx -mno-int32 + @opindex mint16 + @opindex mno-int32 + Use 16-bit @code{int}. This is the default. + + @item -mint32 + @itemx -mno-int16 + @opindex mint32 + @opindex mno-int16 + Use 32-bit @code{int}. + + @item -mfloat64 + @itemx -mno-float32 + @opindex mfloat64 + @opindex mno-float32 + Use 64-bit @code{float}. This is the default. + + @item -mfloat32 + @item -mno-float64 + @opindex mfloat32 + @opindex mno-float64 + Use 32-bit @code{float}. + + @item -mabshi + @opindex mabshi + Use @code{abshi2} pattern. This is the default. + + @item -mno-abshi + @opindex mno-abshi + Do not use @code{abshi2} pattern. + + @item -mbranch-expensive + @opindex mbranch-expensive + Pretend that branches are expensive. This is for experimenting with + code generation only. + + @item -mbranch-cheap + @opindex mbranch-cheap + Do not pretend that branches are expensive. This is the default. + + @item -msplit + @opindex msplit + Generate code for a system with split I&D. + + @item -mno-split + @opindex mno-split + Generate code for a system without split I&D. This is the default. + + @item -munix-asm + @opindex munix-asm + Use Unix assembler syntax. This is the default when configured for + @samp{pdp11-*-bsd}. + + @item -mdec-asm + @opindex mdec-asm + Use DEC assembler syntax. This is the default when configured for any + PDP-11 target other than @samp{pdp11-*-bsd}. + @end table + + @node Xstormy16 Options + @subsection Xstormy16 Options + @cindex Xstormy16 Options + + These options are defined for Xstormy16: + + @table @gcctabopt + @item -msim + @opindex msim + Choose startup files and linker script suitable for the simulator. + @end table + @node Xtensa Options @subsection Xtensa Options @cindex Xtensa Options *************** static data, but will not affect the gen *** 9183,9188 **** --- 9622,9633 ---- You will normally not enable this option; instead, a language processor that needs this handling would enable it on your behalf. + @item -fasynchronous-unwind-tables + @opindex funwind-tables + Generate unwind table in dwarf2 format, if supported by target machine. The + table is exact at each instruction boundary, so it can be used for stack + unwinding from asynchronous events (such as debugger or garbage collector). + @item -fpcc-struct-return @opindex fpcc-struct-return Return ``short'' @code{struct} and @code{union} values in memory like *************** that of some integer type. *** 9198,9213 **** @item -freg-struct-return @opindex freg-struct-return ! Use the convention that @code{struct} and @code{union} values are ! returned in registers when possible. This is more efficient for small ! structures than @option{-fpcc-struct-return}. ! If you specify neither @option{-fpcc-struct-return} nor its contrary @option{-freg-struct-return}, GCC defaults to whichever convention is standard for the target. If there is no standard convention, GCC ! defaults to @option{-fpcc-struct-return}, except on targets where GCC ! is the principal compiler. In those cases, we can choose the standard, ! and we chose the more efficient register return alternative. @item -fshort-enums @opindex fshort-enums --- 9643,9658 ---- @item -freg-struct-return @opindex freg-struct-return ! Return @code{struct} and @code{union} values in registers when possible. ! This is more efficient for small structures than ! @option{-fpcc-struct-return}. ! If you specify neither @option{-fpcc-struct-return} nor @option{-freg-struct-return}, GCC defaults to whichever convention is standard for the target. If there is no standard convention, GCC ! defaults to @option{-fpcc-struct-return}, except on targets where GCC is ! the principal compiler. In those cases, we can choose the standard, and ! we chose the more efficient register return alternative. @item -fshort-enums @opindex fshort-enums *************** Pack all structure members together with *** 9364,9438 **** not want to use this option, since it makes the code suboptimal, and the offsets of structure members won't agree with system libraries. - @item -fcheck-memory-usage - @opindex fcheck-memory-usage - Generate extra code to check each memory access. GCC will generate - code that is suitable for a detector of bad memory accesses such as - @file{Checker}. - - Normally, you should compile all, or none, of your code with this option. - - If you do mix code compiled with and without this option, - you must ensure that all code that has side effects - and that is called by code compiled with this option - is, itself, compiled with this option. - If you do not, you might get erroneous messages from the detector. - - If you use functions from a library that have side-effects (such as - @code{read}), you might not be able to recompile the library and - specify this option. In that case, you can enable the - @option{-fprefix-function-name} option, which requests GCC to encapsulate - your code and make other functions look as if they were compiled with - @option{-fcheck-memory-usage}. This is done by calling ``stubs'', - which are provided by the detector. If you cannot find or build - stubs for every function you call, you might have to specify - @option{-fcheck-memory-usage} without @option{-fprefix-function-name}. - - If you specify this option, you can not use the @code{asm} or - @code{__asm__} keywords in functions with memory checking enabled. GCC - cannot understand what the @code{asm} statement may do, and therefore - cannot generate the appropriate code, so it will reject it. However, if - you specify the function attribute @code{no_check_memory_usage} - (@pxref{Function Attributes}), GCC will disable memory checking within a - function; you may use @code{asm} statements inside such functions. You - may have an inline expansion of a non-checked function within a checked - function; in that case GCC will not generate checks for the inlined - function's memory accesses. - - If you move your @code{asm} statements to non-checked inline functions - and they do access memory, you can add calls to the support code in your - inline function, to indicate any reads, writes, or copies being done. - These calls would be similar to those done in the stubs described above. - - @item -fprefix-function-name - @opindex fprefix-function-name - Request GCC to add a prefix to the symbols generated for function names. - GCC adds a prefix to the names of functions defined as well as - functions called. Code compiled with this option and code compiled - without the option can't be linked together, unless stubs are used. - - If you compile the following code with @option{-fprefix-function-name} - @example - extern void bar (int); - void - foo (int a) - @{ - return bar (a + 5); - @} - @end example - - @noindent - GCC will compile the code as if it was written: - @example - extern void prefix_bar (int); - void - prefix_foo (int a) - @{ - return prefix_bar (a + 5); - @} - @end example - This option is designed to be used with @option{-fcheck-memory-usage}. - @item -finstrument-functions @opindex finstrument-functions Generate instrumentation calls for entry and exit to functions. Just --- 9809,9814 ---- *************** would grow beyond the value, a signal is *** 9495,9505 **** the signal is raised before the stack overruns the boundary, so it is possible to catch the signal without taking special precautions. ! For instance, if the stack starts at address @samp{0x80000000} and grows ! downwards you can use the flags ! @samp{-fstack-limit-symbol=__stack_limit ! -Wl,--defsym,__stack_limit=0x7ffe0000} which will enforce a stack ! limit of 128K@. @cindex aliasing of parameters @cindex parameters, aliased --- 9871,9881 ---- the signal is raised before the stack overruns the boundary, so it is possible to catch the signal without taking special precautions. ! For instance, if the stack starts at absolute address @samp{0x80000000} ! and grows downwards, you can use the flags ! @option{-fstack-limit-symbol=__stack_limit} and ! @option{-Wl,--defsym,__stack_limit=0x7ffe0000} to enforce a stack limit ! of 128KB@. Note that this may only work with the GNU linker. @cindex aliasing of parameters @cindex parameters, aliased *************** Specify the possible relationships among *** 9513,9521 **** parameters and global data. @option{-fargument-alias} specifies that arguments (parameters) may ! alias each other and may alias global storage. @option{-fargument-noalias} specifies that arguments do not alias ! each other, but may alias global storage. @option{-fargument-noalias-global} specifies that arguments do not alias each other and do not alias global storage. --- 9889,9897 ---- parameters and global data. @option{-fargument-alias} specifies that arguments (parameters) may ! alias each other and may alias global storage.@* @option{-fargument-noalias} specifies that arguments do not alias ! each other, but may alias global storage.@* @option{-fargument-noalias-global} specifies that arguments do not alias each other and do not alias global storage. *************** operates. Some of them work by specifyi *** 9545,9564 **** when searching for various kinds of files. Some are used to specify other aspects of the compilation environment. - @ifclear INTERNALS Note that you can also specify places to search using options such as @option{-B}, @option{-I} and @option{-L} (@pxref{Directory Options}). These take precedence over places specified using environment variables, which in turn take precedence over those specified by the configuration of GCC@. ! ! @end ifclear ! @ifset INTERNALS ! Note that you can also specify places to search using options such as ! @option{-B}, @option{-I} and @option{-L} (@pxref{Directory Options}). These ! take precedence over places specified using environment variables, which ! in turn take precedence over those specified by the configuration of GCC@. ! @xref{Driver}. ! @end ifset @table @env @item LANG --- 9921,9932 ---- when searching for various kinds of files. Some are used to specify other aspects of the compilation environment. Note that you can also specify places to search using options such as @option{-B}, @option{-I} and @option{-L} (@pxref{Directory Options}). These take precedence over places specified using environment variables, which in turn take precedence over those specified by the configuration of GCC@. ! @xref{Driver,, Controlling the Compilation Driver @file{gcc}, gccint, ! GNU Compiler Collection (GCC) Internals}. @table @env @item LANG *************** using GCC also uses these directories wh *** 9658,9692 **** libraries for the @option{-l} option (but directories specified with @option{-L} come first). - @item C_INCLUDE_PATH - @itemx CPLUS_INCLUDE_PATH - @itemx OBJC_INCLUDE_PATH - @findex C_INCLUDE_PATH - @findex CPLUS_INCLUDE_PATH - @findex OBJC_INCLUDE_PATH - @c @itemx OBJCPLUS_INCLUDE_PATH - These environment variables pertain to particular languages. Each - variable's value is a colon-separated list of directories, much like - @env{PATH}. When GCC searches for header files, it tries the - directories listed in the variable for the language you are using, after - the directories specified with @option{-I} but before the standard header - file directories. - - @item DEPENDENCIES_OUTPUT - @findex DEPENDENCIES_OUTPUT - @cindex dependencies for make as output - If this variable is set, its value specifies how to output dependencies - for Make based on the header files processed by the compiler. This - output looks much like the output from the @option{-M} option - (@pxref{Preprocessor Options}), but it goes to a separate file, and is - in addition to the usual results of compilation. - - The value of @env{DEPENDENCIES_OUTPUT} can be just a file name, in - which case the Make rules are written to that file, guessing the target - name from the source file name. Or the value can have the form - @samp{@var{file} @var{target}}, in which case the rules are written to - file @var{file} using @var{target} as the target name. - @item LANG @findex LANG @cindex locale definition --- 10026,10031 ---- *************** compiler will use mblen and mbtowc as de *** 9710,9715 **** --- 10049,10060 ---- recognize and translate multibyte characters. @end table + @noindent + Some additional environments variables affect the behavior of the + preprocessor. + + @include cppenv.texi + @c man end @node Running Protoize diff -Nrc3pad gcc-3.0.4/gcc/doc/languages.texi gcc-3.1/gcc/doc/languages.texi *** gcc-3.0.4/gcc/doc/languages.texi Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/doc/languages.texi Thu Jan 10 16:04:23 2002 *************** *** 0 **** --- 1,36 ---- + @c Copyright (C) 2002 Free Software Foundation, Inc. + @c This is part of the GCC manual. + @c For copying conditions, see the file gcc.texi. + + @node Languages + @chapter Language Front Ends in GCC + + The interface to front ends for languages in GCC, and in particular + the @code{tree} structure (@pxref{Trees}), was initially designed for + C, and many aspects of it are still somewhat biased towards C and + C-like languages. It is, however, reasonably well suited to other + procedural languages, and front ends for many such languages have been + written for GCC@. + + Writing a compiler as a front end for GCC, rather than compiling + directly to assembler or generating C code which is then compiled by + GCC, has several advantages: + + @itemize @bullet + @item GCC front ends benefit from the support for many different + target machines already present in GCC@. + @item GCC front ends benefit from all the optimizations in GCC@. Some + of these, such as alias analysis, may work better when GCC is + compiling directly from source code then when it is compiling from + generated C code. + @item Better debugging information is generated when compiling + directly from source code than when going via intermediate generated C + code. + @end itemize + + Because of the advantages of writing a compiler as a GCC front end, + GCC front ends have also been created for languages very different + from those for which GCC was designed, such as the declarative + logic/functional language Mercury. For these reasons, it may also be + useful to implement compilers created for specialized purposes (for + example, as part of a research project) as GCC front ends. diff -Nrc3pad gcc-3.0.4/gcc/doc/makefile.texi gcc-3.1/gcc/doc/makefile.texi *** gcc-3.0.4/gcc/doc/makefile.texi Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/doc/makefile.texi Thu Jan 10 16:04:23 2002 *************** *** 0 **** --- 1,102 ---- + @c Copyright (C) 2001, 2002 Free Software Foundation, Inc. + @c This is part of the GCC manual. + @c For copying conditions, see the file gcc.texi. + + @node Makefile + @subsection Makefile Targets + @cindex makefile targets + @cindex targets, makefile + + @table @code + @item all + This is the default target. Depending on what your build/host/target + configuration is, it coordinates all the things that need to be built. + + @item doc + Produce info-formatted documentation. Also, @code{make dvi} is + available for DVI-formatted documentation, and @code{make + generated-manpages} to generate man pages. + + @item mostlyclean + Delete the files made while building the compiler. + + @item clean + That, and all the other files built by @code{make all}. + + @item distclean + That, and all the files created by @code{configure}. + + @item extraclean + That, and any temporary or intermediate files, like emacs backup files. + + @item maintainer-clean + Distclean plus any file that can be generated from other files. Note + that additional tools may be required beyond what is normally needed to + build gcc. + + @item install + Installs gcc. + + @item uninstall + Deletes installed files. + + @item check + Run the testsuite. This creates a @file{testsuite} subdirectory that + has various @file{.sum} and @file{.log} files containing the results of + the testing. You can run subsets with, for example, @code{make check-gcc}. + You can specify specific tests by setting RUNTESTFLAGS to be the name + of the @file{.exp} file, optionally followed by (for some tests) an equals + and a file wildcard, like: + + @example + make check-gcc RUNTESTFLAGS="execute.exp=19980413-*" + @end example + + Note that running the testsuite may require additional tools be + installed, such as TCL or dejagnu. + + @item bootstrap + Builds gcc three times---once with the native compiler, once with the + native-built compiler it just built, and once with the compiler it built + the second time. In theory, the last two should produce the same + results, which @code{make compare} can check. Each step of this process + is called a ``stage'', and the results of each stage @var{N} + (@var{N} = 1@dots{}3) are copied to a subdirectory @file{stage@var{N}/}. + + @item bootstrap-lean + Like @code{bootstrap}, except that the various stages are removed once + they're no longer needed. This saves disk space. + + @item bubblestrap + Once bootstrapped, this incrementally rebuilds each of the three stages, + one at a time. It does this by ``bubbling'' the stages up from their + subdirectories, rebuilding them, and copying them back to their + subdirectories. This will allow you to, for example, quickly rebuild a + bootstrapped compiler after changing the sources, without having to do a + full bootstrap. + + @item quickstrap + Rebuilds the most recently built stage. Since each stage requires + special invocation, using this target means you don't have to keep track + of which stage you're on or what invocation that stage needs. + + @item cleanstrap + Removed everything (@code{make clean}) and rebuilds (@code{make bootstrap}). + + @item stage@var{N} (@var{N} = 1@dots{}4) + For each stage, moves the appropriate files to the @file{stage@var{N}} + subdirectory. + + @item unstage@var{N} (@var{N} = 1@dots{}4) + Undoes the corresponding @code{stage@var{N}}. + + @item restage@var{N} (@var{N} = 1@dots{}4) + Undoes the corresponding @code{stage@var{N}} and rebuilds it with the + appropriate flags. + + @item compare + Compares the results of stages 2 and 3. This ensures that the compiler + is running properly, since it should produce the same object files + regardless of how it itself was compiled. + + @end table diff -Nrc3pad gcc-3.0.4/gcc/doc/md.texi gcc-3.1/gcc/doc/md.texi *** gcc-3.0.4/gcc/doc/md.texi Thu Jan 31 20:42:59 2002 --- gcc-3.1/gcc/doc/md.texi Mon Apr 8 17:17:18 2002 *************** *** 1,4 **** ! @c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1996, 1998, 2000, 2001 @c Free Software Foundation, Inc. @c This is part of the GCC manual. @c For copying conditions, see the file gcc.texi. --- 1,4 ---- ! @c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1996, 1998, 1999, 2000, 2001, 2002 @c Free Software Foundation, Inc. @c This is part of the GCC manual. @c For copying conditions, see the file gcc.texi. *************** See the next chapter for information on *** 38,43 **** --- 38,44 ---- * Expander Definitions::Generating a sequence of several RTL insns for a standard operation. * Insn Splitting:: Splitting Instructions into Multiple Instructions. + * Including Patterns:: Including Patterns in Machine Descriptions. * Peephole Definitions::Defining machine-specific peephole optimizations. * Insn Attributes:: Specifying the value of attributes for generated insns. * Conditional Execution::Generating @code{define_insn} patterns for *************** Here is an actual example of an instruct *** 184,192 **** (match_operand:SI 0 "general_operand" "rm"))] "" "* ! @{ if (TARGET_68020 || ! ADDRESS_REG_P (operands[0])) return \"tstl %0\"; ! return \"cmpl #0,%0\"; @}") @end example This is an instruction that sets the condition codes based on the value of --- 185,210 ---- (match_operand:SI 0 "general_operand" "rm"))] "" "* ! @{ ! if (TARGET_68020 || ! ADDRESS_REG_P (operands[0])) return \"tstl %0\"; ! return \"cmpl #0,%0\"; ! @}") ! @end example ! ! @noindent ! This can also be written using braced strings: ! ! @example ! (define_insn "tstsi" ! [(set (cc0) ! (match_operand:SI 0 "general_operand" "rm"))] ! "" ! @{ ! if (TARGET_68020 || ! ADDRESS_REG_P (operands[0])) ! return "tstl %0"; ! return "cmpl #0,%0"; ! @}) @end example This is an instruction that sets the condition codes based on the value of *************** those listed in the @code{match_parallel *** 431,438 **** A typical use of @code{match_parallel} is to match load and store multiple expressions, which can contain a variable number of elements in a @code{parallel}. For example, - @c the following is *still* going over. need to change the code. - @c also need to work on grouping of this example. --mew 1feb93 @smallexample (define_insn "" --- 449,454 ---- *************** in a @code{parallel}. For example, *** 446,452 **** @end smallexample This example comes from @file{a29k.md}. The function ! @code{load_multiple_operations} is defined in @file{a29k.c} and checks that subsequent elements in the @code{parallel} are the same as the @code{set} in the pattern, except that they are referencing subsequent registers and memory locations. --- 462,468 ---- @end smallexample This example comes from @file{a29k.md}. The function ! @code{load_multiple_operation} is defined in @file{a29k.c} and checks that subsequent elements in the @code{parallel} are the same as the @code{set} in the pattern, except that they are referencing subsequent registers and memory locations. *************** template-string you want. Most such tem *** 620,625 **** --- 636,646 ---- require doublequote characters to delimit them. To include these doublequote characters in the string, prefix each one with @samp{\}. + If the output control string is written as a brace block instead of a + double-quoted string, it is automatically assumed to be C code. In that + case, it is not necessary to put in a leading asterisk, or to escape the + doublequotes surrounding C string literals. + The operands may be found in the array @code{operands}, whose C data type is @code{rtx []}. *************** a pattern could use @code{which_alternat *** 656,665 **** [(set (match_operand:SI 0 "general_operand" "=r,m") (const_int 0))] "" ! "* return (which_alternative == 0 ! ? \"clrreg %0\" : \"clrmem %0\"); ! ") @end smallexample The example above, where the assembler code to generate was --- 677,686 ---- [(set (match_operand:SI 0 "general_operand" "=r,m") (const_int 0))] "" ! @{ return (which_alternative == 0 ! ? "clrreg %0" : "clrmem %0"); ! @}) @end smallexample The example above, where the assembler code to generate was *************** as follows, having the output control st *** 680,687 **** @end ifset @c Most of this node appears by itself (in a different place) even ! @c when the INTERNALS flag is clear. Passages that require the full ! @c manual's context are conditionalized to appear only in the full manual. @ifset INTERNALS @node Constraints @section Operand Constraints --- 701,708 ---- @end ifset @c Most of this node appears by itself (in a different place) even ! @c when the INTERNALS flag is clear. Passages that require the internals ! @c manual's context are conditionalized to appear only in the internals manual. @ifset INTERNALS @node Constraints @section Operand Constraints *************** An operand that matches the specified op *** 874,879 **** --- 895,907 ---- digit is used together with letters within the same alternative, the digit should come last. + This number is allowed to be more than a single digit. If multiple + digits are encountered consecutavely, they are interpreted as a single + decimal integer. There is scant chance for ambiguity, since to-date + it has never been desirable that @samp{10} be interpreted as matching + either operand 1 @emph{or} operand 0. Should this be desired, one + can use multiple alternatives instead. + @cindex matching constraint @cindex constraint, matching This is called a @dfn{matching constraint} and what it really means is *************** Says that all following characters, up t *** 1233,1245 **** ignored as a constraint. They are significant only for choosing register preferences. - @ifset INTERNALS @cindex @samp{*} in constraint @item * Says that the following character should be ignored when choosing register preferences. @samp{*} has no effect on the meaning of the constraint as a constraint, and no effect on reloading. Here is an example: the 68000 has an instruction to sign-extend a halfword in a data register, and can also sign-extend a value by copying it into an address register. While either kind of register is --- 1261,1273 ---- ignored as a constraint. They are significant only for choosing register preferences. @cindex @samp{*} in constraint @item * Says that the following character should be ignored when choosing register preferences. @samp{*} has no effect on the meaning of the constraint as a constraint, and no effect on reloading. + @ifset INTERNALS Here is an example: the 68000 has an instruction to sign-extend a halfword in a data register, and can also sign-extend a value by copying it into an address register. While either kind of register is *************** general-purpose registers respectively; *** 1273,1284 **** @samp{I}, usually the letter indicating the most common immediate-constant format. ! For each machine architecture, the @file{config/@var{machine}.h} file ! defines additional constraints. These constraints are used by the ! compiler itself for instruction generation, as well as for @code{asm} ! statements; therefore, some of the constraints are not particularly ! interesting for @code{asm}. The constraints are defined through these ! macros: @table @code @item REG_CLASS_FROM_LETTER --- 1301,1312 ---- @samp{I}, usually the letter indicating the most common immediate-constant format. ! For each machine architecture, the ! @file{config/@var{machine}/@var{machine}.h} file defines additional ! constraints. These constraints are used by the compiler itself for ! instruction generation, as well as for @code{asm} statements; therefore, ! some of the constraints are not particularly interesting for @code{asm}. ! The constraints are defined through these macros: @table @code @item REG_CLASS_FROM_LETTER *************** System V Release 4 small data area refer *** 1539,1551 **** @item Intel 386---@file{i386.h} @table @code @item q ! @samp{a}, @code{b}, @code{c}, or @code{d} register @item A Specifies the @samp{a} or @samp{d} registers. This is primarily useful ! for 64-bit integer values intended to be returned with the @samp{d} ! register holding the most significant bits and the @samp{a} register ! holding the least significant bits. @item f Floating point register --- 1567,1590 ---- @item Intel 386---@file{i386.h} @table @code @item q ! @samp{a}, @code{b}, @code{c}, or @code{d} register for the i386. ! For x86-64 it is equivalent to @samp{r} class. (for 8-bit instructions that ! do not use upper halves) ! ! @item Q ! @samp{a}, @code{b}, @code{c}, or @code{d} register. (for 8-bit instructions, ! that do use upper halves) ! ! @item R ! Legacy register---equivalent to @code{r} class in i386 mode. ! (for non-8-bit registers used together with 8-bit upper halves in a single ! instruction) @item A Specifies the @samp{a} or @samp{d} registers. This is primarily useful ! for 64-bit integer values (when in 32-bit mode) intended to be returned ! with the @samp{d} register holding the most significant bits and the ! @samp{a} register holding the least significant bits. @item f Floating point register *************** Second floating point register *** 1574,1579 **** --- 1613,1624 ---- @item S @samp{si} register + @item x + @samp{xmm} SSE register + + @item y + MMX register + @item I Constant in range 0 to 31 (for 32-bit shifts) *************** Constant in range 0 to 63 (for 64-bit sh *** 1592,1597 **** --- 1637,1650 ---- @item N Constant in range 0 to 255 (for @code{out} instruction) + @item Z + Constant in range 0 to @code{0xffffffff} or symbolic reference known to fit specified range. + (for using immediates in zero extending 32-bit to 64-bit x86-64 instructions) + + @item e + Constant in range @minus{}2147483648 to 2147483647 or symbolic reference known to fit specified range. + (for using immediates in 64-bit x86-64 instructions) + @item G Standard 80387 floating point constant @end table *************** Zero *** 1806,1811 **** --- 1859,1875 ---- 32-bit constant with the low 12 bits clear (a constant that can be loaded with the @code{sethi} instruction) + @item L + A constant in the range supported by @code{movcc} instructions + + @item M + A constant in the range supported by @code{movrcc} instructions + + @item N + Same as @samp{K}, except that it verifies that bits that are not in the + lower 32-bits range are all zero. Must be used instead of @samp{K} for + modes wider than @code{SImode} + @item G Floating-point zero *************** Memory address aligned to an 8-byte boun *** 1833,1838 **** --- 1897,1905 ---- @item U Even register + @item W + Memory address for @samp{e} constraint registers. + @end table @item TMS320C3x/C4x---@file{c4x.h} *************** Symbolic constant suitable for use with *** 1948,1953 **** --- 2015,2087 ---- @end table + @item Xstormy16---@file{stormy16.h} + @table @code + @item a + Register r0. + + @item b + Register r1. + + @item c + Register r2. + + @item d + Register r8. + + @item e + Registers r0 through r7. + + @item t + Registers r0 and r1. + + @item y + The carry register. + + @item z + Registers r8 and r9. + + @item I + A constant between 0 and 3 inclusive. + + @item J + A constant that has exactly one bit set. + + @item K + A constant that has exactly one bit clear. + + @item L + A constant between 0 and 255 inclusive. + + @item M + A constant between @minus{}255 and 0 inclusive. + + @item N + A constant between @minus{}3 and 0 inclusive. + + @item O + A constant between 1 and 4 inclusive. + + @item P + A constant between @minus{}4 and @minus{}1 inclusive. + + @item Q + A memory reference that is a stack push. + + @item R + A memory reference that is a stack pop. + + @item S + A memory reference that refers to an constant address of known value. + + @item T + The register indicated by Rx (not implemented yet). + + @item U + A constant that is not between 2 and 15 inclusive. + + @end table + @item Xtensa---@file{xtensa.h} @table @code @item a *************** This instruction pattern moves data with *** 1997,2003 **** If operand 0 is a @code{subreg} with mode @var{m} of a register whose own mode is wider than @var{m}, the effect of this instruction is to store the specified value in the part of the register that corresponds ! to mode @var{m}. The effect on the rest of the register is undefined. This class of patterns is special in several ways. First of all, each of these names up to and including full word size @emph{must} be defined, --- 2131,2139 ---- If operand 0 is a @code{subreg} with mode @var{m} of a register whose own mode is wider than @var{m}, the effect of this instruction is to store the specified value in the part of the register that corresponds ! to mode @var{m}. Bits outside of @var{m}, but which are within the ! same target word as the @code{subreg} are undefined. Bits which are ! outside the target word are left unchanged. This class of patterns is special in several ways. First of all, each of these names up to and including full word size @emph{must} be defined, *************** machines explicit memory references will *** 2046,2054 **** If a scratch register is required to move an object to or from memory, it can be allocated using @code{gen_reg_rtx} prior to life analysis. ! If there are cases needing ! scratch registers after reload, you must define ! @code{SECONDARY_INPUT_RELOAD_CLASS} and perhaps also @code{SECONDARY_OUTPUT_RELOAD_CLASS} to detect them, and provide patterns @samp{reload_in@var{m}} or @samp{reload_out@var{m}} to handle them. @xref{Register Classes}. --- 2182,2189 ---- If a scratch register is required to move an object to or from memory, it can be allocated using @code{gen_reg_rtx} prior to life analysis. ! If there are cases which need scratch registers during or after reload, ! you must define @code{SECONDARY_INPUT_RELOAD_CLASS} and/or @code{SECONDARY_OUTPUT_RELOAD_CLASS} to detect them, and provide patterns @samp{reload_in@var{m}} or @samp{reload_out@var{m}} to handle them. @xref{Register Classes}. *************** move between operand 0 and operand 1. O *** 2086,2091 **** --- 2221,2237 ---- register. See the discussion of the @code{SECONDARY_RELOAD_CLASS} macro in @pxref{Register Classes}. + There are special restrictions on the form of the @code{match_operand}s + used in these patterns. First, only the predicate for the reload + operand is examined, i.e., @code{reload_in} examines operand 1, but not + the predicates for operand 0 or 2. Second, there may be only one + alternative in the constraints. Third, only a single register class + letter may be used for the constraint; subsequent constraint letters + are ignored. As a special exception, an empty constraint string + matches the @code{ALL_REGS} register class. This may relieve ports + of the burden of defining an @code{ALL_REGS} constraint letter just + for these patterns. + @cindex @code{movstrict@var{m}} instruction pattern @item @samp{movstrict@var{m}} Like @samp{mov@var{m}} except that if operand 0 is a @code{subreg} *************** into consecutive memory locations. Oper *** 2124,2129 **** --- 2270,2283 ---- consecutive memory locations, operand 1 is the first register, and operand 2 is a constant: the number of consecutive registers. + @cindex @code{push@var{m}} instruction pattern + @item @samp{push@var{m}} + Output an push instruction. Operand 0 is value to push. Used only when + @code{PUSH_ROUNDING} is defined. For historical reason, this pattern may be + missing and in such case an @code{mov} expander is used instead, with a + @code{MEM} expression forming the push operation. The @code{mov} expander + method is deprecated. + @cindex @code{add@var{m}3} instruction pattern @item @samp{add@var{m}3} Add operand 2 and operand 1, storing the result in operand 0. All operands *************** means of constraints requiring operands *** 2148,2153 **** --- 2302,2314 ---- @itemx @samp{smin@var{m}3}, @samp{smax@var{m}3}, @samp{umin@var{m}3}, @samp{umax@var{m}3} @itemx @samp{and@var{m}3}, @samp{ior@var{m}3}, @samp{xor@var{m}3} Similar, for other arithmetic operations. + @cindex @code{min@var{m}3} instruction pattern + @cindex @code{max@var{m}3} instruction pattern + @itemx @samp{min@var{m}3}, @samp{max@var{m}3} + Floating point min and max operations. If both operands are zeros, + or if either operand is NaN, then it is unspecified which of the two + operands is returned as the result. + @cindex @code{mulhisi3} instruction pattern @item @samp{mulhisi3} *************** too large for this instruction, make it *** 2693,2700 **** @cindex @code{doloop_begin} instruction pattern @item @samp{doloop_begin} Companion instruction to @code{doloop_end} required for machines that ! need to perform some initialisation, such as loading special registers ! used by a low-overhead looping instruction. If initialisation insns do not always need to be emitted, use a @code{define_expand} (@pxref{Expander Definitions}) and make it fail. --- 2854,2861 ---- @cindex @code{doloop_begin} instruction pattern @item @samp{doloop_begin} Companion instruction to @code{doloop_end} required for machines that ! need to perform some initialization, such as loading special registers ! used by a low-overhead looping instruction. If initialization insns do not always need to be emitted, use a @code{define_expand} (@pxref{Expander Definitions}) and make it fail. *************** the function should return. This will n *** 2899,2927 **** pattern to some special register or memory location. This pattern only needs to be defined if call frame exception handling ! is to be used, and simple moves to @code{EH_RETURN_STACKADJ_RTX} and ! @code{EH_RETURN_HANDLER_RTX} are not sufficient. @cindex @code{prologue} instruction pattern @item @samp{prologue} This pattern, if defined, emits RTL for entry to a function. The function entry is responsible for setting up the stack frame, initializing the frame pointer register, saving callee saved registers, etc. Using a prologue pattern is generally preferred over defining ! @code{FUNCTION_PROLOGUE} to emit assembly code for the prologue. The @code{prologue} pattern is particularly useful for targets which perform instruction scheduling. @cindex @code{epilogue} instruction pattern @item @samp{epilogue} ! This pattern, if defined, emits RTL for exit from a function. The function exit is responsible for deallocating the stack frame, restoring callee saved registers and emitting the return instruction. Using an epilogue pattern is generally preferred over defining ! @code{FUNCTION_EPILOGUE} to emit assembly code for the prologue. The @code{epilogue} pattern is particularly useful for targets which perform instruction scheduling or which have delay slots for their return instruction. --- 3060,3090 ---- pattern to some special register or memory location. This pattern only needs to be defined if call frame exception handling ! is to be used, and simple moves involving @code{EH_RETURN_STACKADJ_RTX} ! and @code{EH_RETURN_HANDLER_RTX} are not sufficient. @cindex @code{prologue} instruction pattern + @anchor{prologue instruction pattern} @item @samp{prologue} This pattern, if defined, emits RTL for entry to a function. The function entry is responsible for setting up the stack frame, initializing the frame pointer register, saving callee saved registers, etc. Using a prologue pattern is generally preferred over defining ! @code{TARGET_ASM_FUNCTION_PROLOGUE} to emit assembly code for the prologue. The @code{prologue} pattern is particularly useful for targets which perform instruction scheduling. @cindex @code{epilogue} instruction pattern + @anchor{epilogue instruction pattern} @item @samp{epilogue} ! This pattern emits RTL for exit from a function. The function exit is responsible for deallocating the stack frame, restoring callee saved registers and emitting the return instruction. Using an epilogue pattern is generally preferred over defining ! @code{TARGET_ASM_FUNCTION_EPILOGUE} to emit assembly code for the epilogue. The @code{epilogue} pattern is particularly useful for targets which perform instruction scheduling or which have delay slots for their return instruction. *************** A typical @code{conditional_trap} patter *** 2958,2963 **** --- 3121,3142 ---- "@dots{}") @end smallexample + @cindex @code{prefetch} instruction pattern + @item @samp{prefetch} + + This pattern, if defined, emits code for a non-faulting data prefetch + instruction. Operand 0 is the address of the memory to prefetch. Operand 1 + is a constant 1 if the prefetch is preparing for a write to the memory + address, or a constant 0 otherwise. Operand 2 is the expected degree of + temporal locality of the data and is a value between 0 and 3, inclusive; 0 + means that the data has no temporal locality, so it need not be left in the + cache after the access; 3 means that the data has a high degree of temporal + locality and should be left in all levels of cache possible; 1 and 2 mean, + respectively, a low or moderate degree of temporal locality. + + Targets that do not support write prefetches or locality hints can ignore + the values of operands 1 and 2. + @cindex @code{cycle_display} instruction pattern @item @samp{cycle_display} *************** A comparison insn sets the condition cod *** 3081,3087 **** signed and unsigned comparison of the given operands. A separate branch insn tests the condition code and branches or not according its value. The branch insns come in distinct signed and unsigned flavors. Many ! common machines, such as the Vax, the 68000 and the 32000, work this way. Some machines have distinct signed and unsigned compare instructions, and --- 3260,3266 ---- signed and unsigned comparison of the given operands. A separate branch insn tests the condition code and branches or not according its value. The branch insns come in distinct signed and unsigned flavors. Many ! common machines, such as the VAX, the 68000 and the 32000, work this way. Some machines have distinct signed and unsigned compare instructions, and *************** iterations. This avoids the need for fe *** 3201,3209 **** @samp{dbra}-like instruction and avoids pipeline stalls associated with the jump. ! GCC has three special named patterns to support low overhead looping, ! @samp{decrement_and_branch_until_zero}, @samp{doloop_begin}, and ! @samp{doloop_end}. The first pattern, @samp{decrement_and_branch_until_zero}, is not emitted during RTL generation but may be emitted during the instruction combination phase. This requires the assistance of the loop optimizer, using information --- 3380,3388 ---- @samp{dbra}-like instruction and avoids pipeline stalls associated with the jump. ! GCC has three special named patterns to support low overhead looping. ! They are @samp{decrement_and_branch_until_zero}, @samp{doloop_begin}, ! and @samp{doloop_end}. The first pattern, @samp{decrement_and_branch_until_zero}, is not emitted during RTL generation but may be emitted during the instruction combination phase. This requires the assistance of the loop optimizer, using information *************** pattern will not be matched by the combi *** 3258,3270 **** @end smallexample The other two special looping patterns, @samp{doloop_begin} and ! @samp{doloop_end}, are emitted by the loop optimiser for certain well-behaved loops with a finite number of loop iterations using information collected during strength reduction. The @samp{doloop_end} pattern describes the actual looping instruction (or the implicit looping operation) and the @samp{doloop_begin} pattern ! is an optional companion pattern that can be used for initialisation needed for some low-overhead looping instructions. Note that some machines require the actual looping instruction to be --- 3437,3449 ---- @end smallexample The other two special looping patterns, @samp{doloop_begin} and ! @samp{doloop_end}, are emitted by the loop optimizer for certain well-behaved loops with a finite number of loop iterations using information collected during strength reduction. The @samp{doloop_end} pattern describes the actual looping instruction (or the implicit looping operation) and the @samp{doloop_begin} pattern ! is an optional companion pattern that can be used for initialization needed for some low-overhead looping instructions. Note that some machines require the actual looping instruction to be *************** insns that don't. Instead, write two se *** 3787,3792 **** --- 3966,3988 ---- definitions, one for the insns that are valid and one for the insns that are not valid. + The splitter is allowed to split jump instructions into sequence of + jumps or create new jumps in while splitting non-jump instructions. As + the central flowgraph and branch prediction information needs to be updated, + several restriction apply. + + Splitting of jump instruction into sequence that over by another jump + instruction is always valid, as compiler expect identical behavior of new + jump. When new sequence contains multiple jump instructions or new labels, + more assistance is needed. Splitter is required to create only unconditional + jumps, or simple conditional jump instructions. Additionally it must attach a + @code{REG_BR_PROB} note to each conditional jump. An global variable + @code{split_branch_probability} hold the probability of original branch in case + it was an simple conditional jump, @minus{}1 otherwise. To simplify + recomputing of edge frequencies, new sequence is required to have only + forward jumps to the newly created labels. + + @findex define_insn_and_split For the common case where the pattern of a define_split exactly matches the pattern of a define_insn, use @code{define_insn_and_split}. It looks like this: *************** from i386.md: *** 3822,3828 **** "TARGET_ZERO_EXTEND_WITH_AND && !optimize_size" "#" "&& reload_completed" ! [(parallel [(set (match_dup 0) (and:SI (match_dup 0) (const_int 65535))) (clobber (reg:CC 17))])] "" [(set_attr "type" "alu1")]) --- 4018,4025 ---- "TARGET_ZERO_EXTEND_WITH_AND && !optimize_size" "#" "&& reload_completed" ! [(parallel [(set (match_dup 0) ! (and:SI (match_dup 0) (const_int 65535))) (clobber (reg:CC 17))])] "" [(set_attr "type" "alu1")]) *************** functionality as two separate @code{defi *** 3837,3842 **** --- 4034,4113 ---- patterns. It exists for compactness, and as a maintenance tool to prevent having to ensure the two patterns' templates match. + @node Including Patterns + @section Including Patterns in Machine Descriptions. + @cindex insn includes + + @findex include + The @code{include} pattern tells the compiler tools where to + look for patterns that are in files other than in the file + @file{.md}. This is used only at build time and there is no preprocessing allowed. + + It looks like: + + @smallexample + + (include + @var{pathname}) + @end smallexample + + For example: + + @smallexample + + (include "filestuff") + + @end smallexample + + Where @var{pathname} is a string that specifies the the location of the file, + specifies the include file to be in @file{gcc/config/target/filestuff}. The + directory @file{gcc/config/target} is regarded as the default directory. + + + Machine descriptions may be split up into smaller more manageable subsections + and placed into subdirectories. + + By specifying: + + @smallexample + + (include "BOGUS/filestuff") + + @end smallexample + + the include file is specified to be in @file{gcc/config/@var{target}/BOGUS/filestuff}. + + Specifying an absolute path for the include file such as; + @smallexample + + (include "/u2/BOGUS/filestuff") + + @end smallexample + is permitted but is not encouraged. + + @subsection RTL Generation Tool Options for Directory Search + @cindex directory options .md + @cindex options, directory search + @cindex search options + + The @option{-I@var{dir}} option specifies directories to search for machine descriptions. + For example: + + @smallexample + + genrecog -I/p1/abc/proc1 -I/p2/abcd/pro2 target.md + + @end smallexample + + + Add the directory @var{dir} to the head of the list of directories to be + searched for header files. This can be used to override a system machine definition + file, substituting your own version, since these directories are + searched before the default machine description file directories. If you use more than + one @option{-I} option, the directories are scanned in left-to-right + order; the standard default directory come after. + + @node Peephole Definitions @section Machine-Specific Peephole Optimizers @cindex peephole optimizer definitions *************** Here is an example, taken from the 68000 *** 3968,3988 **** (set (match_operand:DF 0 "register_operand" "=f") (match_operand:DF 1 "register_operand" "ad"))] "FP_REG_P (operands[0]) && ! FP_REG_P (operands[1])" - "* @{ rtx xoperands[2]; xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1); #ifdef MOTOROLA ! output_asm_insn (\"move.l %1,(sp)\", xoperands); ! output_asm_insn (\"move.l %1,-(sp)\", operands); ! return \"fmove.d (sp)+,%0\"; #else ! output_asm_insn (\"movel %1,sp@@\", xoperands); ! output_asm_insn (\"movel %1,sp@@-\", operands); ! return \"fmoved sp@@+,%0\"; #endif ! @} ! ") @end smallexample @need 1000 --- 4239,4257 ---- (set (match_operand:DF 0 "register_operand" "=f") (match_operand:DF 1 "register_operand" "ad"))] "FP_REG_P (operands[0]) && ! FP_REG_P (operands[1])" @{ rtx xoperands[2]; xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1); #ifdef MOTOROLA ! output_asm_insn ("move.l %1,(sp)", xoperands); ! output_asm_insn ("move.l %1,-(sp)", operands); ! return "fmove.d (sp)+,%0"; #else ! output_asm_insn ("movel %1,sp@@", xoperands); ! output_asm_insn ("movel %1,sp@@-", operands); ! return "fmoved sp@@+,%0"; #endif ! @}) @end smallexample @need 1000 *************** as follows: *** 4681,4694 **** [(set (pc) (label_ref (match_operand 0 "" "")))] "" - "* @{ return (get_attr_length (insn) == 4 ! ? \"b %l0\" : \"l r15,=a(%l0); br r15\"); ! @}" ! [(set (attr "length") (if_then_else (lt (match_dup 0) (const_int 4096)) ! (const_int 4) ! (const_int 6)))]) @end smallexample @node Constant Attributes --- 4950,4963 ---- [(set (pc) (label_ref (match_operand 0 "" "")))] "" @{ return (get_attr_length (insn) == 4 ! ? "b %l0" : "l r15,=a(%l0); br r15"); ! @} ! [(set (attr "length") ! (if_then_else (lt (match_dup 0) (const_int 4096)) ! (const_int 4) ! (const_int 6)))]) @end smallexample @node Constant Attributes *************** units. These insns will cause a potenti *** 4913,4919 **** used during their execution and there is no way of representing that conflict. We welcome any examples of how function unit conflicts work in such processors and suggestions for their representation. - @end ifset @node Conditional Execution @section Conditional Execution --- 5182,5187 ---- *************** You could write: *** 5046,5048 **** --- 5314,5317 ---- The constants that are defined with a define_constant are also output in the insn-codes.h header file as #defines. + @end ifset diff -Nrc3pad gcc-3.0.4/gcc/doc/objc.texi gcc-3.1/gcc/doc/objc.texi *** gcc-3.0.4/gcc/doc/objc.texi Tue Oct 9 13:37:35 2001 --- gcc-3.1/gcc/doc/objc.texi Tue Oct 9 06:03:16 2001 *************** *** 3,9 **** @c This is part of the GCC manual. @c For copying conditions, see the file gcc.texi. ! @node Objective C @comment node-name, next, previous, up @chapter GNU Objective-C runtime features --- 3,9 ---- @c This is part of the GCC manual. @c For copying conditions, see the file gcc.texi. ! @node Objective-C @comment node-name, next, previous, up @chapter GNU Objective-C runtime features *************** comments about this document to Ovidiu P *** 22,28 **** * compatibility_alias:: @end menu ! @node Executing code before main, Type encoding, Objective C, Objective C @section @code{+load}: Executing code before main --- 22,28 ---- * compatibility_alias:: @end menu ! @node Executing code before main, Type encoding, Objective-C, Objective-C @section @code{+load}: Executing code before main *************** above apply to classes defined in bundle *** 168,174 **** ! @node Type encoding, Garbage Collection, Executing code before main, Objective C @section Type encoding The Objective-C compiler generates type encodings for all the --- 168,174 ---- ! @node Type encoding, Garbage Collection, Executing code before main, Objective-C @section Type encoding The Objective-C compiler generates type encodings for all the *************** however, the type specifiers are only en *** 308,314 **** argument types. ! @node Garbage Collection, Constant string objects, Type encoding, Objective C @section Garbage Collection Support for a new memory management policy has been added by using a --- 308,314 ---- argument types. ! @node Garbage Collection, Constant string objects, Type encoding, Objective-C @section Garbage Collection Support for a new memory management policy has been added by using a diff -Nrc3pad gcc-3.0.4/gcc/doc/passes.texi gcc-3.1/gcc/doc/passes.texi *** gcc-3.0.4/gcc/doc/passes.texi Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/doc/passes.texi Sat Feb 23 12:59:08 2002 *************** *** 0 **** --- 1,659 ---- + @c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, + @c 1999, 2000, 2001 Free Software Foundation, Inc. + @c This is part of the GCC manual. + @c For copying conditions, see the file gcc.texi. + + @node Passes + @chapter Passes and Files of the Compiler + @cindex passes and files of the compiler + @cindex files and passes of the compiler + @cindex compiler passes and files + + @cindex top level of compiler + The overall control structure of the compiler is in @file{toplev.c}. This + file is responsible for initialization, decoding arguments, opening and + closing files, and sequencing the passes. + + @cindex parsing pass + The parsing pass is invoked only once, to parse the entire input. A + high level tree representation is then generated from the input, + one function at a time. This tree code is then transformed into RTL + intermediate code, and processed. The files involved in transforming + the trees into RTL are @file{expr.c}, @file{expmed.c}, and + @file{stmt.c}. + @c Note, the above files aren't strictly the only files involved. It's + @c all over the place (function.c, final.c,etc). However, those are + @c the files that are supposed to be directly involved, and have + @c their purpose listed as such, so i've only listed them. + The order of trees that are processed, is not + necessarily the same order they are generated from + the input, due to deferred inlining, and other considerations. + + @findex rest_of_compilation + @findex rest_of_decl_compilation + Each time the parsing pass reads a complete function definition or + top-level declaration, it calls either the function + @code{rest_of_compilation}, or the function + @code{rest_of_decl_compilation} in @file{toplev.c}, which are + responsible for all further processing necessary, ending with output of + the assembler language. All other compiler passes run, in sequence, + within @code{rest_of_compilation}. When that function returns from + compiling a function definition, the storage used for that function + definition's compilation is entirely freed, unless it is an inline + function, or was deferred for some reason (this can occur in + templates, for example). + (@pxref{Inline,,An Inline Function is As Fast As a Macro,gcc,Using the + GNU Compiler Collection (GCC)}). + + Here is a list of all the passes of the compiler and their source files. + Also included is a description of where debugging dumps can be requested + with @option{-d} options. + + @itemize @bullet + @item + Parsing. This pass reads the entire text of a function definition, + constructing a high level tree representation. (Because of the semantic + analysis that takes place during this pass, it does more than is + formally considered to be parsing.) + + The tree representation does not entirely follow C syntax, because it is + intended to support other languages as well. + + Language-specific data type analysis is also done in this pass, and every + tree node that represents an expression has a data type attached. + Variables are represented as declaration nodes. + + The language-independent source files for parsing are + @file{tree.c}, @file{fold-const.c}, and @file{stor-layout.c}. + There are also header files @file{tree.h} and @file{tree.def} + which define the format of the tree representation. + + C preprocessing, for language front ends, that want or require it, is + performed by cpplib, which is covered in separate documentation. In + particular, the internals are covered in @xref{Top, ,Cpplib internals, + cppinternals, Cpplib Internals}. + + @c Avoiding overfull is tricky here. + The source files to parse C are + @file{c-convert.c}, + @file{c-decl.c}, + @file{c-errors.c}, + @file{c-lang.c}, + @file{c-objc-common.c}, + @file{c-parse.in}, + @file{c-aux-info.c}, + and + @file{c-typeck.c}, + along with a header file + @file{c-tree.h} + and some files shared with Objective-C and C++. + + The source files for parsing C++ are in @file{cp/}. + They are @file{parse.y}, + @file{class.c}, + @file{cvt.c}, @file{decl.c}, @file{decl2.c}, + @file{except.c}, + @file{expr.c}, @file{init.c}, @file{lex.c}, + @file{method.c}, @file{ptree.c}, + @file{search.c}, @file{spew.c}, + @file{semantics.c}, @file{tree.c}, + @file{typeck2.c}, and + @file{typeck.c}, along with header files @file{cp-tree.def}, + @file{cp-tree.h}, and @file{decl.h}. + + The special source files for parsing Objective-C are in @file{objc/}. + They are @file{objc-act.c}, @file{objc-tree.def}, and @file{objc-act.h}. + Certain C-specific files are used for this as well. + + The files + @file{c-common.c}, + @file{c-common.def}, + @file{c-format.c}, + @file{c-pragma.c}, + @file{c-semantics.c}, + and + @file{c-lex.c}, + along with header files + @file{c-common.h}, + @file{c-dump.h}, + @file{c-lex.h}, + and + @file{c-pragma.h}, + are also used for all of the above languages. + + + @cindex Tree optimization + @item + Tree optimization. This is the optimization of the tree + representation, before converting into RTL code. + + @cindex inline on trees, automatic + Currently, the main optimization performed here is tree-based + inlining. + This is implemented in @file{tree-inline.c} and used by both C and C++. + Note that tree based inlining turns off rtx based inlining (since it's more + powerful, it would be a waste of time to do rtx based inlining in + addition). + + @cindex constant folding + @cindex arithmetic simplifications + @cindex simplifications, arithmetic + Constant folding and some arithmetic simplifications are also done + during this pass, on the tree representation. + The routines that perform these tasks are located in @file{fold-const.c}. + + @cindex RTL generation + @item + RTL generation. This is the conversion of syntax tree into RTL code. + + @cindex target-parameter-dependent code + This is where the bulk of target-parameter-dependent code is found, + since often it is necessary for strategies to apply only when certain + standard kinds of instructions are available. The purpose of named + instruction patterns is to provide this information to the RTL + generation pass. + + @cindex tail recursion optimization + Optimization is done in this pass for @code{if}-conditions that are + comparisons, boolean operations or conditional expressions. Tail + recursion is detected at this time also. Decisions are made about how + best to arrange loops and how to output @code{switch} statements. + + @c Avoiding overfull is tricky here. + The source files for RTL generation include + @file{stmt.c}, + @file{calls.c}, + @file{expr.c}, + @file{explow.c}, + @file{expmed.c}, + @file{function.c}, + @file{optabs.c} + and @file{emit-rtl.c}. + Also, the file + @file{insn-emit.c}, generated from the machine description by the + program @code{genemit}, is used in this pass. The header file + @file{expr.h} is used for communication within this pass. + + @findex genflags + @findex gencodes + The header files @file{insn-flags.h} and @file{insn-codes.h}, + generated from the machine description by the programs @code{genflags} + and @code{gencodes}, tell this pass which standard names are available + for use and which patterns correspond to them. + + Aside from debugging information output, none of the following passes + refers to the tree structure representation of the function (only + part of which is saved). + + @cindex inline on rtx, automatic + The decision of whether the function can and should be expanded inline + in its subsequent callers is made at the end of rtl generation. The + function must meet certain criteria, currently related to the size of + the function and the types and number of parameters it has. Note that + this function may contain loops, recursive calls to itself + (tail-recursive functions can be inlined!), gotos, in short, all + constructs supported by GCC@. The file @file{integrate.c} contains + the code to save a function's rtl for later inlining and to inline that + rtl when the function is called. The header file @file{integrate.h} + is also used for this purpose. + + @opindex dr + The option @option{-dr} causes a debugging dump of the RTL code after + this pass. This dump file's name is made by appending @samp{.rtl} to + the input file name. + + @c Should the exception handling pass be talked about here? + + @cindex sibling call optimization + @item + Sibiling call optimization. This pass performs tail recursion + elimination, and tail and sibling call optimizations. The purpose of + these optimizations is to reduce the overhead of function calls, + whenever possible. + + The source file of this pass is @file{sibcall.c} + + @opindex di + The option @option{-di} causes a debugging dump of the RTL code after + this pass is run. This dump file's name is made by appending + @samp{.sibling} to the input file name. + + @cindex jump optimization + @cindex unreachable code + @cindex dead code + @item + Jump optimization. This pass simplifies jumps to the following + instruction, jumps across jumps, and jumps to jumps. It deletes + unreferenced labels and unreachable code, except that unreachable code + that contains a loop is not recognized as unreachable in this pass. + (Such loops are deleted later in the basic block analysis.) It also + converts some code originally written with jumps into sequences of + instructions that directly set values from the results of comparisons, + if the machine has such instructions. + + Jump optimization is performed two or three times. The first time is + immediately following RTL generation. The second time is after CSE, + but only if CSE says repeated jump optimization is needed. The + last time is right before the final pass. That time, cross-jumping + and deletion of no-op move instructions are done together with the + optimizations described above. + + The source file of this pass is @file{jump.c}. + + @opindex dj + The option @option{-dj} causes a debugging dump of the RTL code after + this pass is run for the first time. This dump file's name is made by + appending @samp{.jump} to the input file name. + + + @cindex register use analysis + @item + Register scan. This pass finds the first and last use of each + register, as a guide for common subexpression elimination. Its source + is in @file{regclass.c}. + + @cindex jump threading + @item + @opindex fthread-jumps + Jump threading. This pass detects a condition jump that branches to an + identical or inverse test. Such jumps can be @samp{threaded} through + the second conditional test. The source code for this pass is in + @file{jump.c}. This optimization is only performed if + @option{-fthread-jumps} is enabled. + + @cindex SSA optimizations + @cindex Single Static Assignment optimizations + @opindex fssa + @item + Static Single Assignment (SSA) based optimization passes. The + SSA conversion passes (to/from) are turned on by the @option{-fssa} + option (it is also done automatically if you enable an SSA optimization pass). + These passes utilize a form called Static Single Assignment. In SSA form, + each variable (pseudo register) is only set once, giving you def-use + and use-def chains for free, and enabling a lot more optimization + passes to be run in linear time. + Conversion to and from SSA form is handled by functions in + @file{ssa.c}. + + @opindex de + The option @option{-de} causes a debugging dump of the RTL code after + this pass. This dump file's name is made by appending @samp{.ssa} to + the input file name. + @itemize @bullet + @cindex SSA Conditional Constant Propagation + @cindex Conditional Constant Propagation, SSA based + @cindex conditional constant propagation + @opindex fssa-ccp + @item + SSA Conditional Constant Propagation. Turned on by the @option{-fssa-ccp} + SSA Aggressive Dead Code Elimination. Turned on by the @option{-fssa-dce} + option. This pass performs conditional constant propagation to simplify + instructions including conditional branches. This pass is more aggressive + than the constant propgation done by the CSE and GCSE pases, but operates + in linear time. + + @opindex dW + The option @option{-dW} causes a debugging dump of the RTL code after + this pass. This dump file's name is made by appending @samp{.ssaccp} to + the input file name. + + @cindex SSA DCE + @cindex DCE, SSA based + @cindex dead code elimination + @opindex fssa-dce + @item + SSA Aggressive Dead Code Elimination. Turned on by the @option{-fssa-dce} + option. This pass performs elimination of code considered unnecessary because + it has no externally visible effects on the program. It operates in + linear time. + + @opindex dX + The option @option{-dX} causes a debugging dump of the RTL code after + this pass. This dump file's name is made by appending @samp{.ssadce} to + the input file name. + @end itemize + + @cindex common subexpression elimination + @cindex constant propagation + @item + Common subexpression elimination. This pass also does constant + propagation. Its source files are @file{cse.c}, and @file{cselib.c}. + If constant propagation causes conditional jumps to become + unconditional or to become no-ops, jump optimization is run again when + CSE is finished. + + @opindex ds + The option @option{-ds} causes a debugging dump of the RTL code after + this pass. This dump file's name is made by appending @samp{.cse} to + the input file name. + + @cindex global common subexpression elimination + @cindex constant propagation + @cindex copy propagation + @item + Global common subexpression elimination. This pass performs two + different types of GCSE depending on whether you are optimizing for + size or not (LCM based GCSE tends to increase code size for a gain in + speed, while Morel-Renvoise based GCSE does not). + When optimizing for size, GCSE is done using Morel-Renvoise Partial + Redundancy Elimination, with the exception that it does not try to move + invariants out of loops---that is left to the loop optimization pass. + If MR PRE GCSE is done, code hoisting (aka unification) is also done, as + well as load motion. + If you are optimizing for speed, LCM (lazy code motion) based GCSE is + done. LCM is based on the work of Knoop, Ruthing, and Steffen. LCM + based GCSE also does loop invariant code motion. We also perform load + and store motion when optimizing for speed. + Regardless of which type of GCSE is used, the GCSE pass also performs + global constant and copy propagation. + + The source file for this pass is @file{gcse.c}, and the LCM routines + are in @file{lcm.c}. + + @opindex dG + The option @option{-dG} causes a debugging dump of the RTL code after + this pass. This dump file's name is made by appending @samp{.gcse} to + the input file name. + + @cindex loop optimization + @cindex code motion + @cindex strength-reduction + @item + Loop optimization. This pass moves constant expressions out of loops, + and optionally does strength-reduction and loop unrolling as well. + Its source files are @file{loop.c} and @file{unroll.c}, plus the header + @file{loop.h} used for communication between them. Loop unrolling uses + some functions in @file{integrate.c} and the header @file{integrate.h}. + Loop dependency analysis routines are contained in @file{dependence.c}. + + @opindex dL + The option @option{-dL} causes a debugging dump of the RTL code after + this pass. This dump file's name is made by appending @samp{.loop} to + the input file name. + + @item + @opindex frerun-cse-after-loop + If @option{-frerun-cse-after-loop} was enabled, a second common + subexpression elimination pass is performed after the loop optimization + pass. Jump threading is also done again at this time if it was specified. + + @opindex dt + The option @option{-dt} causes a debugging dump of the RTL code after + this pass. This dump file's name is made by appending @samp{.cse2} to + the input file name. + + @cindex data flow analysis + @cindex analysis, data flow + @cindex basic blocks + @item + Data flow analysis (@file{flow.c}). This pass divides the program + into basic blocks (and in the process deletes unreachable loops); then + it computes which pseudo-registers are live at each point in the + program, and makes the first instruction that uses a value point at + the instruction that computed the value. + + @cindex autoincrement/decrement analysis + This pass also deletes computations whose results are never used, and + combines memory references with add or subtract instructions to make + autoincrement or autodecrement addressing. + + @opindex df + The option @option{-df} causes a debugging dump of the RTL code after + this pass. This dump file's name is made by appending @samp{.flow} to + the input file name. If stupid register allocation is in use, this + dump file reflects the full results of such allocation. + + @cindex instruction combination + @item + Instruction combination (@file{combine.c}). This pass attempts to + combine groups of two or three instructions that are related by data + flow into single instructions. It combines the RTL expressions for + the instructions by substitution, simplifies the result using algebra, + and then attempts to match the result against the machine description. + + @opindex dc + The option @option{-dc} causes a debugging dump of the RTL code after + this pass. This dump file's name is made by appending @samp{.combine} + to the input file name. + + @cindex if conversion + @item + If-conversion is a transformation that transforms control dependencies + into data dependencies (IE it transforms conditional code into a + single control stream). + It is implemented in the file @file{ifcvt.c}. + + @opindex dE + The option @option{-dE} causes a debugging dump of the RTL code after + this pass. This dump file's name is made by appending @samp{.ce} to + the input file name. + + @cindex register movement + @item + Register movement (@file{regmove.c}). This pass looks for cases where + matching constraints would force an instruction to need a reload, and + this reload would be a register-to-register move. It then attempts + to change the registers used by the instruction to avoid the move + instruction. + + @opindex dN + The option @option{-dN} causes a debugging dump of the RTL code after + this pass. This dump file's name is made by appending @samp{.regmove} + to the input file name. + + @cindex instruction scheduling + @cindex scheduling, instruction + @item + Instruction scheduling (@file{sched.c}). This pass looks for + instructions whose output will not be available by the time that it is + used in subsequent instructions. (Memory loads and floating point + instructions often have this behavior on RISC machines). It re-orders + instructions within a basic block to try to separate the definition and + use of items that otherwise would cause pipeline stalls. + + Instruction scheduling is performed twice. The first time is immediately + after instruction combination and the second is immediately after reload. + + @opindex dS + The option @option{-dS} causes a debugging dump of the RTL code after this + pass is run for the first time. The dump file's name is made by + appending @samp{.sched} to the input file name. + + @cindex register class preference pass + @item + Register class preferencing. The RTL code is scanned to find out + which register class is best for each pseudo register. The source + file is @file{regclass.c}. + + @cindex register allocation + @cindex local register allocation + @item + Local register allocation (@file{local-alloc.c}). This pass allocates + hard registers to pseudo registers that are used only within one basic + block. Because the basic block is linear, it can use fast and + powerful techniques to do a very good job. + + @opindex dl + The option @option{-dl} causes a debugging dump of the RTL code after + this pass. This dump file's name is made by appending @samp{.lreg} to + the input file name. + + @cindex global register allocation + @item + Global register allocation (@file{global.c}). This pass + allocates hard registers for the remaining pseudo registers (those + whose life spans are not contained in one basic block). + + @cindex reloading + @item + Reloading. This pass renumbers pseudo registers with the hardware + registers numbers they were allocated. Pseudo registers that did not + get hard registers are replaced with stack slots. Then it finds + instructions that are invalid because a value has failed to end up in + a register, or has ended up in a register of the wrong kind. It fixes + up these instructions by reloading the problematical values + temporarily into registers. Additional instructions are generated to + do the copying. + + The reload pass also optionally eliminates the frame pointer and inserts + instructions to save and restore call-clobbered registers around calls. + + Source files are @file{reload.c} and @file{reload1.c}, plus the header + @file{reload.h} used for communication between them. + + @opindex dg + The option @option{-dg} causes a debugging dump of the RTL code after + this pass. This dump file's name is made by appending @samp{.greg} to + the input file name. + + @cindex instruction scheduling + @cindex scheduling, instruction + @item + Instruction scheduling is repeated here to try to avoid pipeline stalls + due to memory loads generated for spilled pseudo registers. + + @opindex dR + The option @option{-dR} causes a debugging dump of the RTL code after + this pass. This dump file's name is made by appending @samp{.sched2} + to the input file name. + + @cindex basic block reordering + @cindex reordering, block + @item + Basic block reordering. This pass implements profile guided code + positioning. If profile information is not available, various types of + static analysis are performed to make the predictions normally coming + from the profile feedback (IE execution frequency, branch probability, + etc). It is implemented in the file @file{bb-reorder.c}, and the + various prediction routines are in @file{predict.c}. + + @opindex dB + The option @option{-dB} causes a debugging dump of the RTL code after + this pass. This dump file's name is made by appending @samp{.bbro} to + the input file name. + + @cindex cross-jumping + @cindex no-op move instructions + @item + Jump optimization is repeated, this time including cross-jumping + and deletion of no-op move instructions. + + @opindex dJ + The option @option{-dJ} causes a debugging dump of the RTL code after + this pass. This dump file's name is made by appending @samp{.jump2} + to the input file name. + + @cindex delayed branch scheduling + @cindex scheduling, delayed branch + @item + Delayed branch scheduling. This optional pass attempts to find + instructions that can go into the delay slots of other instructions, + usually jumps and calls. The source file name is @file{reorg.c}. + + @opindex dd + The option @option{-dd} causes a debugging dump of the RTL code after + this pass. This dump file's name is made by appending @samp{.dbr} + to the input file name. + + @cindex branch shortening + @item + Branch shortening. On many RISC machines, branch instructions have a + limited range. Thus, longer sequences of instructions must be used for + long branches. In this pass, the compiler figures out what how far each + instruction will be from each other instruction, and therefore whether + the usual instructions, or the longer sequences, must be used for each + branch. + + @cindex register-to-stack conversion + @item + Conversion from usage of some hard registers to usage of a register + stack may be done at this point. Currently, this is supported only + for the floating-point registers of the Intel 80387 coprocessor. The + source file name is @file{reg-stack.c}. + + @opindex dk + The options @option{-dk} causes a debugging dump of the RTL code after + this pass. This dump file's name is made by appending @samp{.stack} + to the input file name. + + @cindex final pass + @cindex peephole optimization + @item + Final. This pass outputs the assembler code for the function. It is + also responsible for identifying spurious test and compare + instructions. Machine-specific peephole optimizations are performed + at the same time. The function entry and exit sequences are generated + directly as assembler code in this pass; they never exist as RTL@. + + The source files are @file{final.c} plus @file{insn-output.c}; the + latter is generated automatically from the machine description by the + tool @file{genoutput}. The header file @file{conditions.h} is used + for communication between these files. + + @cindex debugging information generation + @item + Debugging information output. This is run after final because it must + output the stack slot offsets for pseudo registers that did not get + hard registers. Source files are @file{dbxout.c} for DBX symbol table + format, @file{sdbout.c} for SDB symbol table format, @file{dwarfout.c} + for DWARF symbol table format, files @file{dwarf2out.c} and + @file{dwarf2asm.c} for DWARF2 symbol table format, and @file{vmsdbgout.c} + for VMS debug symbol table format. + @end itemize + + Some additional files are used by all or many passes: + + @itemize @bullet + @item + Every pass uses @file{machmode.def} and @file{machmode.h} which define + the machine modes. + + @item + Several passes use @file{real.h}, which defines the default + representation of floating point constants and how to operate on them. + + @item + All the passes that work with RTL use the header files @file{rtl.h} + and @file{rtl.def}, and subroutines in file @file{rtl.c}. The tools + @code{gen*} also use these files to read and work with the machine + description RTL@. + + @item + All the tools that read the machine description use support routines + found in @file{gensupport.c}, @file{errors.c}, and @file{read-rtl.c}. + + @findex genconfig + @item + Several passes refer to the header file @file{insn-config.h} which + contains a few parameters (C macro definitions) generated + automatically from the machine description RTL by the tool + @code{genconfig}. + + @cindex instruction recognizer + @item + Several passes use the instruction recognizer, which consists of + @file{recog.c} and @file{recog.h}, plus the files @file{insn-recog.c} + and @file{insn-extract.c} that are generated automatically from the + machine description by the tools @file{genrecog} and + @file{genextract}. + + @item + Several passes use the header files @file{regs.h} which defines the + information recorded about pseudo register usage, and @file{basic-block.h} + which defines the information recorded about basic blocks. + + @item + @file{hard-reg-set.h} defines the type @code{HARD_REG_SET}, a bit-vector + with a bit for each hard register, and some macros to manipulate it. + This type is just @code{int} if the machine has few enough hard registers; + otherwise it is an array of @code{int} and some of the macros expand + into loops. + + @item + Several passes use instruction attributes. A definition of the + attributes defined for a particular machine is in file + @file{insn-attr.h}, which is generated from the machine description by + the program @file{genattr}. The file @file{insn-attrtab.c} contains + subroutines to obtain the attribute values for insns. It is generated + from the machine description by the program @file{genattrtab}. + @end itemize diff -Nrc3pad gcc-3.0.4/gcc/doc/portability.texi gcc-3.1/gcc/doc/portability.texi *** gcc-3.0.4/gcc/doc/portability.texi Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/doc/portability.texi Mon Nov 12 15:46:47 2001 *************** *** 0 **** --- 1,38 ---- + @c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, + @c 1999, 2000, 2001 Free Software Foundation, Inc. + @c This is part of the GCC manual. + @c For copying conditions, see the file gcc.texi. + + @node Portability + @chapter GCC and Portability + @cindex portability + @cindex GCC and portability + + The main goal of GCC was to make a good, fast compiler for machines in + the class that the GNU system aims to run on: 32-bit machines that address + 8-bit bytes and have several general registers. Elegance, theoretical + power and simplicity are only secondary. + + GCC gets most of the information about the target machine from a machine + description which gives an algebraic formula for each of the machine's + instructions. This is a very clean way to describe the target. But when + the compiler needs information that is difficult to express in this + fashion, I have not hesitated to define an ad-hoc parameter to the machine + description. The purpose of portability is to reduce the total work needed + on the compiler; it was not of interest for its own sake. + + @cindex endianness + @cindex autoincrement addressing, availability + @findex abort + GCC does not contain machine dependent code, but it does contain code + that depends on machine parameters such as endianness (whether the most + significant byte has the highest or lowest address of the bytes in a word) + and the availability of autoincrement addressing. In the RTL-generation + pass, it is often necessary to have multiple strategies for generating code + for a particular kind of syntax tree, strategies that are usable for different + combinations of parameters. Often I have not tried to address all possible + cases, but only the common ones or only the ones that I have encountered. + As a result, a new target may require additional strategies. You will know + if this happens because the compiler will call @code{abort}. Fortunately, + the new strategies can be added in a machine-independent fashion, and will + affect only the target machines that need them. diff -Nrc3pad gcc-3.0.4/gcc/doc/rtl.texi gcc-3.1/gcc/doc/rtl.texi *** gcc-3.0.4/gcc/doc/rtl.texi Tue Oct 9 23:14:18 2001 --- gcc-3.1/gcc/doc/rtl.texi Sat Feb 23 12:59:08 2002 *************** *** 1,4 **** ! @c Copyright (C) 1988, 1989, 1992, 1994, 1997, 1998, 1999, 2000, 2001 @c Free Software Foundation, Inc. @c This is part of the GCC manual. @c For copying conditions, see the file gcc.texi. --- 1,4 ---- ! @c Copyright (C) 1988, 1989, 1992, 1994, 1997, 1998, 1999, 2000, 2001, 2002 @c Free Software Foundation, Inc. @c This is part of the GCC manual. @c For copying conditions, see the file gcc.texi. *************** expression (``RTX'', for short) is a C s *** 57,65 **** referred to with a pointer; a type that is given the typedef name @code{rtx}. ! An integer is simply an @code{int}; their written form uses decimal digits. ! A wide integer is an integral object whose type is @code{HOST_WIDE_INT} ! (@pxref{Config}); their written form uses decimal digits. A string is a sequence of characters. In core it is represented as a @code{char *} in usual C fashion, and it is written in C syntax as well. --- 57,65 ---- referred to with a pointer; a type that is given the typedef name @code{rtx}. ! An integer is simply an @code{int}; their written form uses decimal ! digits. A wide integer is an integral object whose type is ! @code{HOST_WIDE_INT}; their written form uses decimal digits. A string is a sequence of characters. In core it is represented as a @code{char *} in usual C fashion, and it is written in C syntax as well. *************** pointers instead of strings are valid. *** 70,75 **** --- 70,90 ---- commonly found inside @code{symbol_ref} expressions, but they appear in other contexts in the RTL expressions that make up machine descriptions. + In a machine description, strings are normally written with double + quotes, as you would in C. However, strings in machine descriptions may + extend over many lines, which is invalid C, and adjacent string + constants are not concatenated as they are in C. Any string constant + may be surrounded with a single set of parentheses. Sometimes this + makes the machine description easier to read. + + There is also a special syntax for strings, which can be useful when C + code is embedded in a machine description. Wherever a string can + appear, it is also valid to write a C-style brace block. The entire + brace block, including the outermost pair of braces, is considered to be + the string constant. Double quote characters inside the braces are not + special. Therefore, if you write string constants in the C code, you + need not escape each quote character with a backslash. + A vector contains an arbitrary number of pointers to expressions. The number of elements in the vector is explicitly present in the vector. The written form of a vector consists of square brackets *************** chain, such as @code{NOTE}, @code{BARRIE *** 179,193 **** @end table @cindex RTL format ! For each expression type @file{rtl.def} specifies the number of ! contained objects and their kinds, with four possibilities: @samp{e} for ! expression (actually a pointer to an expression), @samp{i} for integer, ! @samp{w} for wide integer, @samp{s} for string, and @samp{E} for vector ! of expressions. The sequence of letters for an expression code is ! called its @dfn{format}. For example, the format of @code{subreg} is ! @samp{ei}. @cindex RTL format characters A few other format characters are used occasionally: @table @code --- 194,224 ---- @end table @cindex RTL format ! For each expression code, @file{rtl.def} specifies the number of ! contained objects and their kinds using a sequence of characters ! called the @dfn{format} of the expression code. For example, ! the format of @code{subreg} is @samp{ei}. @cindex RTL format characters + These are the most commonly used format characters: + + @table @code + @item e + An expression (actually a pointer to an expression). + + @item i + An integer. + + @item w + A wide integer. + + @item s + A string. + + @item E + A vector of expressions. + @end table + A few other format characters are used occasionally: @table @code *************** to access them. *** 338,397 **** @section Flags in an RTL Expression @cindex flags in RTL expression ! RTL expressions contain several flags (one-bit bit-fields) and other ! values that are used in certain types of expression. Most often they ! are accessed with the following macros: @table @code ! @findex MEM_VOLATILE_P ! @cindex @code{mem} and @samp{/v} ! @cindex @code{volatil}, in @code{mem} ! @cindex @samp{/v} in RTL dump ! @item MEM_VOLATILE_P (@var{x}) ! In @code{mem} expressions, nonzero for volatile memory references. Stored in the @code{volatil} field and printed as @samp{/v}. @findex MEM_IN_STRUCT_P @cindex @code{mem} and @samp{/s} @cindex @code{in_struct}, in @code{mem} - @cindex @samp{/s} in RTL dump @item MEM_IN_STRUCT_P (@var{x}) In @code{mem} expressions, nonzero for reference to an entire structure, union or array, or to a component of one. Zero for references to a ! scalar variable or through a pointer to a scalar. Stored in the ! @code{in_struct} field and printed as @samp{/s}. If both this flag and ! MEM_SCALAR_P are clear, then we don't know whether this MEM is in a ! structure or not. Both flags should never be simultaneously set. @findex MEM_SCALAR_P @cindex @code{mem} and @samp{/f} ! @cindex @code{frame_related}, in@code{mem} ! @cindex @samp{/f} in RTL dump @item MEM_SCALAR_P (@var{x}) In @code{mem} expressions, nonzero for reference to a scalar known not to be a member of a structure, union, or array. Zero for such references and for indirections through pointers, even pointers pointing ! to scalar types. If both this flag and MEM_STRUCT_P are clear, then we ! don't know whether this MEM is in a structure or not. Both flags should ! never be simultaneously set. ! @findex MEM_ALIAS_SET ! @item MEM_ALIAS_SET (@var{x}) ! In @code{mem} expressions, the alias set to which @var{x} belongs. If ! zero, @var{x} is not in any alias set, and may alias anything. If ! nonzero, @var{x} may only alias objects in the same alias set. This ! value is set (in a language-specific manner) by the front end. This ! field is not a bit-field; it is in an integer, found as the second ! argument to the @code{mem}. @findex REG_LOOP_TEST_P @cindex @code{reg} and @samp{/s} @cindex @code{in_struct}, in @code{reg} ! @item REG_LOOP_TEST_P In @code{reg} expressions, nonzero if this register's entire life is contained in the exit test code for some loop. Stored in the @code{in_struct} field and printed as @samp{/s}. @findex REG_USERVAR_P @cindex @code{reg} and @samp{/v} @cindex @code{volatil}, in @code{reg} --- 369,543 ---- @section Flags in an RTL Expression @cindex flags in RTL expression ! RTL expressions contain several flags (one-bit bit-fields) ! that are used in certain types of expression. Most often they ! are accessed with the following macros, which expand into lvalues: @table @code ! @findex CONSTANT_POOL_ADDRESS_P ! @cindex @code{symbol_ref} and @samp{/u} ! @cindex @code{unchanging}, in @code{symbol_ref} ! @item CONSTANT_POOL_ADDRESS_P (@var{x}) ! Nonzero in a @code{symbol_ref} if it refers to part of the current ! function's constant pool. For most targets these addresses are in a ! @code{.rodata} section entirely separate from the function, but for ! some targets the addresses are close to the beginning of the function. ! In either case GCC assumes these addresses can be addressed directly, ! perhaps with the help of base registers. ! Stored in the @code{unchanging} field and printed as @samp{/u}. ! ! @findex CONST_OR_PURE_CALL_P ! @cindex @code{call_insn} and @samp{/u} ! @cindex @code{unchanging}, in @code{call_insn} ! @item CONST_OR_PURE_CALL_P (@var{x}) ! In a @code{call_insn}, @code{note}, or an @code{expr_list} for notes, ! indicates that the insn represents a call to a const or pure function. ! Stored in the @code{unchanging} field and printed as @samp{/u}. ! ! @findex INSN_ANNULLED_BRANCH_P ! @cindex @code{insn} and @samp{/u} ! @cindex @code{unchanging}, in @code{insn} ! @item INSN_ANNULLED_BRANCH_P (@var{x}) ! In an @code{insn} in the delay slot of a branch insn, indicates that an ! annulling branch should be used. See the discussion under ! @code{sequence} below. Stored in the @code{unchanging} field and printed ! as @samp{/u}. ! ! @findex INSN_DEAD_CODE_P ! @cindex @code{insn} and @samp{/s} ! @cindex @code{in_struct}, in @code{insn} ! @item INSN_DEAD_CODE_P (@var{x}) ! In an @code{insn} during the dead-code elimination pass, nonzero if the ! insn is dead. ! Stored in the @code{in_struct} field and printed as @samp{/s}. ! ! @findex INSN_DELETED_P ! @cindex @code{insn} and @samp{/v} ! @cindex @code{volatil}, in @code{insn} ! @item INSN_DELETED_P (@var{x}) ! In an @code{insn}, nonzero if the insn has been deleted. Stored in the ! @code{volatil} field and printed as @samp{/v}. ! ! @findex INSN_FROM_TARGET_P ! @cindex @code{insn} and @samp{/s} ! @cindex @code{in_struct}, in @code{insn} ! @item INSN_FROM_TARGET_P (@var{x}) ! In an @code{insn} in a delay slot of a branch, indicates that the insn ! is from the target of the branch. If the branch insn has ! @code{INSN_ANNULLED_BRANCH_P} set, this insn will only be executed if ! the branch is taken. For annulled branches with ! @code{INSN_FROM_TARGET_P} clear, the insn will be executed only if the ! branch is not taken. When @code{INSN_ANNULLED_BRANCH_P} is not set, ! this insn will always be executed. Stored in the @code{in_struct} ! field and printed as @samp{/s}. ! ! @findex LABEL_OUTSIDE_LOOP_P ! @cindex @code{label_ref} and @samp{/s} ! @cindex @code{in_struct}, in @code{label_ref} ! @item LABEL_OUTSIDE_LOOP_P (@var{x}) ! In @code{label_ref} expressions, nonzero if this is a reference to a ! label that is outside the innermost loop containing the reference to the ! label. Stored in the @code{in_struct} field and printed as @samp{/s}. ! ! @findex LABEL_PRESERVE_P ! @cindex @code{code_label} and @samp{/i} ! @cindex @code{in_struct}, in @code{code_label} ! @item LABEL_PRESERVE_P (@var{x}) ! In a @code{code_label}, indicates that the label is referenced by ! code or data not visible to the RTL of a given function. ! Labels referenced by a non-local goto will have this bit set. Stored ! in the @code{in_struct} field and printed as @samp{/s}. ! ! @findex LABEL_REF_NONLOCAL_P ! @cindex @code{label_ref} and @samp{/v} ! @cindex @code{volatil}, in @code{label_ref} ! @item LABEL_REF_NONLOCAL_P (@var{x}) ! In @code{label_ref} and @code{reg_label} expressions, nonzero if this is ! a reference to a non-local label. Stored in the @code{volatil} field and printed as @samp{/v}. + @findex LINK_COST_FREE + @cindex @code{insn_list} and @samp{/c} + @cindex @code{call}, in @code{insn_list} + @item LINK_COST_FREE (@var{x}) + In the @code{LOG_LINKS} @code{insn_list} during scheduling, nonzero when + the cost of executing an instruction through the link is zero, i.e., the + link makes the cost free. Stored in the @code{call} field and printed + as @samp{/c}. + + @findex LINK_COST_ZERO + @cindex @code{insn_list} and @samp{/j} + @cindex @code{jump}, in @code{insn_list} + @item LINK_COST_ZERO (@var{x}) + In the @code{LOG_LINKS} @code{insn_list} during scheduling, nonzero when + the cost of executing an instruction through the link varies and is + unchanged, i.e., the link has zero additional cost. + Stored in the @code{jump} field and printed as @samp{/j}. + @findex MEM_IN_STRUCT_P @cindex @code{mem} and @samp{/s} @cindex @code{in_struct}, in @code{mem} @item MEM_IN_STRUCT_P (@var{x}) In @code{mem} expressions, nonzero for reference to an entire structure, union or array, or to a component of one. Zero for references to a ! scalar variable or through a pointer to a scalar. If both this flag and ! @code{MEM_SCALAR_P} are clear, then we don't know whether this @code{mem} ! is in a structure or not. Both flags should never be simultaneously set. ! Stored in the @code{in_struct} field and printed as @samp{/s}. ! ! @findex MEM_KEEP_ALIAS_SET_P ! @cindex @code{mem} and @samp{/j} ! @cindex @code{jump}, in @code{mem} ! @item MEM_KEEP_ALIAS_SET_P (@var{x}) ! In @code{mem} expressions, 1 if we should keep the alias set for this ! mem unchanged when we access a component. Set to 1, for example, when we ! are already in a non-addressable component of an aggregate. ! Stored in the @code{jump} field and printed as @samp{/j}. @findex MEM_SCALAR_P @cindex @code{mem} and @samp{/f} ! @cindex @code{frame_related}, in @code{mem} @item MEM_SCALAR_P (@var{x}) In @code{mem} expressions, nonzero for reference to a scalar known not to be a member of a structure, union, or array. Zero for such references and for indirections through pointers, even pointers pointing ! to scalar types. If both this flag and @code{MEM_IN_STRUCT_P} are clear, ! then we don't know whether this @code{mem} is in a structure or not. ! Both flags should never be simultaneously set. ! Stored in the @code{frame_related} field and printed as @samp{/f}. ! @findex MEM_VOLATILE_P ! @cindex @code{mem} and @samp{/v} ! @cindex @code{volatil}, in @code{mem} ! @item MEM_VOLATILE_P (@var{x}) ! In @code{mem} and @code{asm_operands} expressions, nonzero for volatile ! memory references. ! Stored in the @code{volatil} field and printed as @samp{/v}. ! ! @findex REG_FUNCTION_VALUE_P ! @cindex @code{reg} and @samp{/i} ! @cindex @code{integrated}, in @code{reg} ! @item REG_FUNCTION_VALUE_P (@var{x}) ! Nonzero in a @code{reg} if it is the place in which this function's ! value is going to be returned. (This happens only in a hard ! register.) Stored in the @code{integrated} field and printed as ! @samp{/i}. @findex REG_LOOP_TEST_P @cindex @code{reg} and @samp{/s} @cindex @code{in_struct}, in @code{reg} ! @item REG_LOOP_TEST_P (@var{x}) In @code{reg} expressions, nonzero if this register's entire life is contained in the exit test code for some loop. Stored in the @code{in_struct} field and printed as @samp{/s}. + @findex REG_POINTER + @cindex @code{reg} and @samp{/f} + @cindex @code{frame_related}, in @code{reg} + @item REG_POINTER (@var{x}) + Nonzero in a @code{reg} if the register holds a pointer. Stored in the + @code{frame_related} field and printed as @samp{/f}. + @findex REG_USERVAR_P @cindex @code{reg} and @samp{/v} @cindex @code{volatil}, in @code{reg} *************** the user's source code. Zero for tempor *** 401,467 **** the compiler. Stored in the @code{volatil} field and printed as @samp{/v}. - @cindex @samp{/i} in RTL dump - @findex REG_FUNCTION_VALUE_P - @cindex @code{reg} and @samp{/i} - @cindex @code{integrated}, in @code{reg} - @item REG_FUNCTION_VALUE_P (@var{x}) - Nonzero in a @code{reg} if it is the place in which this function's - value is going to be returned. (This happens only in a hard - register.) Stored in the @code{integrated} field and printed as - @samp{/i}. - The same hard register may be used also for collecting the values of functions called by this one, but @code{REG_FUNCTION_VALUE_P} is zero in this kind of use. - @findex SUBREG_PROMOTED_VAR_P - @cindex @code{subreg} and @samp{/s} - @cindex @code{in_struct}, in @code{subreg} - @item SUBREG_PROMOTED_VAR_P - Nonzero in a @code{subreg} if it was made when accessing an object that - was promoted to a wider mode in accord with the @code{PROMOTED_MODE} machine - description macro (@pxref{Storage Layout}). In this case, the mode of - the @code{subreg} is the declared mode of the object and the mode of - @code{SUBREG_REG} is the mode of the register that holds the object. - Promoted variables are always either sign- or zero-extended to the wider - mode on every assignment. Stored in the @code{in_struct} field and - printed as @samp{/s}. - - @findex SUBREG_PROMOTED_UNSIGNED_P - @cindex @code{subreg} and @samp{/u} - @cindex @code{unchanging}, in @code{subreg} - @item SUBREG_PROMOTED_UNSIGNED_P - Nonzero in a @code{subreg} that has @code{SUBREG_PROMOTED_VAR_P} nonzero - if the object being referenced is kept zero-extended and zero if it - is kept sign-extended. Stored in the @code{unchanging} field and - printed as @samp{/u}. - - @findex RTX_UNCHANGING_P - @cindex @code{reg} and @samp{/u} - @cindex @code{mem} and @samp{/u} - @cindex @code{unchanging}, in @code{reg} and @code{mem} - @cindex @samp{/u} in RTL dump - @item RTX_UNCHANGING_P (@var{x}) - Nonzero in a @code{reg} or @code{mem} if the value is not changed. - (This flag is not set for memory references via pointers to constants. - Such pointers only guarantee that the object will not be changed - explicitly by the current function. The object might be changed by - other functions or by aliasing.) Stored in the - @code{unchanging} field and printed as @samp{/u}. - - @findex RTX_INTEGRATED_P - @cindex @code{integrated}, in @code{insn} - @item RTX_INTEGRATED_P (@var{insn}) - Nonzero in an insn if it resulted from an in-line function call. - Stored in the @code{integrated} field and printed as @samp{/i}. - @findex RTX_FRAME_RELATED_P @item RTX_FRAME_RELATED_P (@var{x}) ! Nonzero in an insn or expression which is part of a function prologue and sets the stack pointer, sets the frame pointer, or saves a register. This flag should also be set on an instruction that sets up a temporary register to use in place of the frame pointer. In particular, on RISC targets where there are limits on the sizes of immediate constants, it is sometimes impossible to reach the register --- 547,565 ---- the compiler. Stored in the @code{volatil} field and printed as @samp{/v}. The same hard register may be used also for collecting the values of functions called by this one, but @code{REG_FUNCTION_VALUE_P} is zero in this kind of use. @findex RTX_FRAME_RELATED_P + @cindex @code{insn} and @samp{/f} + @cindex @code{frame_related}, in @code{insn} @item RTX_FRAME_RELATED_P (@var{x}) ! Nonzero in an @code{insn} or @code{set} which is part of a function prologue and sets the stack pointer, sets the frame pointer, or saves a register. This flag should also be set on an instruction that sets up a temporary register to use in place of the frame pointer. + Stored in the @code{frame_related} field and printed as @samp{/f}. In particular, on RISC targets where there are limits on the sizes of immediate constants, it is sometimes impossible to reach the register *************** computation performed by this instructio *** 482,493 **** This flag is required for exception handling support on targets with RTL prologues. ! @findex SYMBOL_REF_USED ! @cindex @code{used}, in @code{symbol_ref} ! @item SYMBOL_REF_USED (@var{x}) ! In a @code{symbol_ref}, indicates that @var{x} has been used. This is ! normally only used to ensure that @var{x} is only declared external ! once. Stored in the @code{used} field. @findex SYMBOL_REF_FLAG @cindex @code{symbol_ref} and @samp{/v} --- 580,656 ---- This flag is required for exception handling support on targets with RTL prologues. ! @findex RTX_INTEGRATED_P ! @cindex @code{insn} and @samp{/i} ! @cindex @code{integrated}, in @code{insn} ! @item RTX_INTEGRATED_P (@var{x}) ! Nonzero in an @code{insn}, @code{insn_list}, or @code{const} if it ! resulted from an in-line function call. ! Stored in the @code{integrated} field and printed as @samp{/i}. ! ! @findex RTX_UNCHANGING_P ! @cindex @code{reg} and @samp{/u} ! @cindex @code{mem} and @samp{/u} ! @cindex @code{unchanging}, in @code{reg} and @code{mem} ! @item RTX_UNCHANGING_P (@var{x}) ! Nonzero in a @code{reg} or @code{mem} if the memory is set at most once, ! anywhere. This does not mean that it is function invariant. ! Stored in the @code{unchanging} field and printed as @samp{/u}. ! ! @findex SCHED_GROUP_P ! @cindex @code{insn} and @samp{/i} ! @cindex @code{in_struct}, in @code{insn} ! @item SCHED_GROUP_P (@var{x}) ! During instruction scheduling, in an @code{insn}, indicates that the ! previous insn must be scheduled together with this insn. This is used to ! ensure that certain groups of instructions will not be split up by the ! instruction scheduling pass, for example, @code{use} insns before ! a @code{call_insn} may not be separated from the @code{call_insn}. ! Stored in the @code{in_struct} field and printed as @samp{/s}. ! ! @findex SET_IS_RETURN_P ! @cindex @code{insn} and @samp{/j} ! @cindex @code{jump}, in @code{insn} ! @item SET_IS_RETURN_P (@var{x}) ! For a @code{set}, nonzero if it is for a return. ! Stored in the @code{jump} field and printed as @samp{/j}. ! ! @findex SIBLING_CALL_P ! @cindex @code{call_insn} and @samp{/j} ! @cindex @code{jump}, in @code{call_insn} ! @item SIBLING_CALL_P (@var{x}) ! For a @code{call_insn}, nonzero if the insn is a sibling call. ! Stored in the @code{jump} field and printed as @samp{/j}. ! ! @findex STRING_POOL_ADDRESS_P ! @cindex @code{symbol_ref} and @samp{/f} ! @cindex @code{frame_related}, in @code{symbol_ref} ! @item STRING_POOL_ADDRESS_P (@var{x}) ! For a @code{symbol_ref} expression, nonzero if it addresses this function's ! string constant pool. ! Stored in the @code{frame_related} field and printed as @samp{/f}. ! ! @findex SUBREG_PROMOTED_UNSIGNED_P ! @cindex @code{subreg} and @samp{/u} ! @cindex @code{unchanging}, in @code{subreg} ! @item SUBREG_PROMOTED_UNSIGNED_P (@var{x}) ! Nonzero in a @code{subreg} that has @code{SUBREG_PROMOTED_VAR_P} nonzero ! if the object being referenced is kept zero-extended and zero if it ! is kept sign-extended. Stored in the @code{unchanging} field and ! printed as @samp{/u}. ! ! @findex SUBREG_PROMOTED_VAR_P ! @cindex @code{subreg} and @samp{/s} ! @cindex @code{in_struct}, in @code{subreg} ! @item SUBREG_PROMOTED_VAR_P (@var{x}) ! Nonzero in a @code{subreg} if it was made when accessing an object that ! was promoted to a wider mode in accord with the @code{PROMOTED_MODE} machine ! description macro (@pxref{Storage Layout}). In this case, the mode of ! the @code{subreg} is the declared mode of the object and the mode of ! @code{SUBREG_REG} is the mode of the register that holds the object. ! Promoted variables are always either sign- or zero-extended to the wider ! mode on every assignment. Stored in the @code{in_struct} field and ! printed as @samp{/s}. @findex SYMBOL_REF_FLAG @cindex @code{symbol_ref} and @samp{/v} *************** once. Stored in the @code{used} field. *** 496,617 **** In a @code{symbol_ref}, this is used as a flag for machine-specific purposes. Stored in the @code{volatil} field and printed as @samp{/v}. @findex SYMBOL_REF_WEAK @cindex @code{symbol_ref} and @samp{/i} @cindex @code{integrated}, in @code{symbol_ref} @item SYMBOL_REF_WEAK (@var{x}) In a @code{symbol_ref}, indicates that @var{x} has been declared weak. Stored in the @code{integrated} field and printed as @samp{/i}. - - @findex LABEL_OUTSIDE_LOOP_P - @cindex @code{label_ref} and @samp{/s} - @cindex @code{in_struct}, in @code{label_ref} - @item LABEL_OUTSIDE_LOOP_P - In @code{label_ref} expressions, nonzero if this is a reference to a - label that is outside the innermost loop containing the reference to the - label. Stored in the @code{in_struct} field and printed as @samp{/s}. - - @findex INSN_DELETED_P - @cindex @code{volatil}, in @code{insn} - @item INSN_DELETED_P (@var{insn}) - In an insn, nonzero if the insn has been deleted. Stored in the - @code{volatil} field and printed as @samp{/v}. - - @findex INSN_ANNULLED_BRANCH_P - @cindex @code{insn} and @samp{/u} - @cindex @code{unchanging}, in @code{insn} - @item INSN_ANNULLED_BRANCH_P (@var{insn}) - In an @code{insn} in the delay slot of a branch insn, indicates that an - annulling branch should be used. See the discussion under - @code{sequence} below. Stored in the @code{unchanging} field and printed - as @samp{/u}. - - @findex INSN_FROM_TARGET_P - @cindex @code{insn} and @samp{/s} - @cindex @code{in_struct}, in @code{insn} - @cindex @samp{/s} in RTL dump - @item INSN_FROM_TARGET_P (@var{insn}) - In an @code{insn} in a delay slot of a branch, indicates that the insn - is from the target of the branch. If the branch insn has - @code{INSN_ANNULLED_BRANCH_P} set, this insn will only be executed if - the branch is taken. For annulled branches with - @code{INSN_FROM_TARGET_P} clear, the insn will be executed only if the - branch is not taken. When @code{INSN_ANNULLED_BRANCH_P} is not set, - this insn will always be executed. Stored in the @code{in_struct} - field and printed as @samp{/s}. - - @findex CONSTANT_POOL_ADDRESS_P - @cindex @code{symbol_ref} and @samp{/u} - @cindex @code{unchanging}, in @code{symbol_ref} - @item CONSTANT_POOL_ADDRESS_P (@var{x}) - Nonzero in a @code{symbol_ref} if it refers to part of the current - function's ``constants pool''. These are addresses close to the - beginning of the function, and GCC assumes they can be addressed - directly (perhaps with the help of base registers). Stored in the - @code{unchanging} field and printed as @samp{/u}. - - @findex CONST_CALL_P - @cindex @code{call_insn} and @samp{/u} - @cindex @code{unchanging}, in @code{call_insn} - @item CONST_CALL_P (@var{x}) - In a @code{call_insn}, indicates that the insn represents a call to a const - function. Stored in the @code{unchanging} field and printed as @samp{/u}. - - @findex LABEL_PRESERVE_P - @cindex @code{code_label} and @samp{/i} - @cindex @code{in_struct}, in @code{code_label} - @item LABEL_PRESERVE_P (@var{x}) - In a @code{code_label}, indicates that the label can never be deleted. - Labels referenced by a non-local goto will have this bit set. Stored - in the @code{in_struct} field and printed as @samp{/s}. - - @findex SCHED_GROUP_P - @cindex @code{insn} and @samp{/i} - @cindex @code{in_struct}, in @code{insn} - @item SCHED_GROUP_P (@var{insn}) - During instruction scheduling, in an insn, indicates that the previous insn - must be scheduled together with this insn. This is used to ensure that - certain groups of instructions will not be split up by the instruction - scheduling pass, for example, @code{use} insns before a @code{call_insn} may - not be separated from the @code{call_insn}. Stored in the @code{in_struct} - field and printed as @samp{/s}. @end table ! These are the fields which the above macros refer to: @table @code ! @findex used ! @item used ! Normally, this flag is used only momentarily, at the end of RTL ! generation for a function, to count the number of times an expression ! appears in insns. Expressions that appear more than once are copied, ! according to the rules for shared structure (@pxref{Sharing}). ! ! In a @code{symbol_ref}, it indicates that an external declaration for ! the symbol has already been written. ! In a @code{reg}, it is used by the leaf register renumbering code to ensure ! that each register is only renumbered once. ! @findex volatil ! @item volatil ! This flag is used in @code{mem}, @code{symbol_ref} and @code{reg} ! expressions and in insns. In RTL dump files, it is printed as ! @samp{/v}. ! @cindex volatile memory references ! In a @code{mem} expression, it is 1 if the memory reference is volatile. ! Volatile memory references may not be deleted, reordered or combined. ! In a @code{symbol_ref} expression, it is used for machine-specific ! purposes. ! In a @code{reg} expression, it is 1 if the value is a user-level variable. ! 0 indicates an internal compiler temporary. ! In an insn, 1 means the insn has been deleted. @findex in_struct @item in_struct In @code{mem} expressions, it is 1 if the memory datum referred to is all or part of a structure or array; 0 if it is (or might be) a scalar --- 659,709 ---- In a @code{symbol_ref}, this is used as a flag for machine-specific purposes. Stored in the @code{volatil} field and printed as @samp{/v}. + @findex SYMBOL_REF_USED + @cindex @code{used}, in @code{symbol_ref} + @item SYMBOL_REF_USED (@var{x}) + In a @code{symbol_ref}, indicates that @var{x} has been used. This is + normally only used to ensure that @var{x} is only declared external + once. Stored in the @code{used} field. + @findex SYMBOL_REF_WEAK @cindex @code{symbol_ref} and @samp{/i} @cindex @code{integrated}, in @code{symbol_ref} @item SYMBOL_REF_WEAK (@var{x}) In a @code{symbol_ref}, indicates that @var{x} has been declared weak. Stored in the @code{integrated} field and printed as @samp{/i}. @end table ! These are the fields to which the above macros refer: @table @code ! @findex call ! @cindex @samp{/c} in RTL dump ! @item call ! In the @code{LOG_LINKS} of an @code{insn_list} during scheduling, 1 means that ! the cost of executing an instruction through the link is zero. ! In an RTL dump, this flag is represented as @samp{/c}. ! @findex frame_related ! @cindex @samp{/f} in RTL dump ! @item frame_related ! In an @code{insn} or @code{set} expression, 1 means that it is part of ! a function prologue and sets the stack pointer, sets the frame pointer, ! saves a register, or sets up a temporary register to use in place of the ! frame pointer. ! In @code{reg} expressions, 1 means that the register holds a pointer. ! In @code{symbol_ref} expressions, 1 means that the reference addresses ! this function's string constant pool. ! In @code{mem} expressions, 1 means that the reference is to a scalar. ! In an RTL dump, this flag is represented as @samp{/f}. @findex in_struct + @cindex @samp{/s} in RTL dump @item in_struct In @code{mem} expressions, it is 1 if the memory datum referred to is all or part of a structure or array; 0 if it is (or might be) a scalar *************** variable. A reference through a C point *** 619,630 **** might point to a scalar variable. This information allows the compiler to determine something about possible cases of aliasing. - In an insn in the delay slot of a branch, 1 means that this insn is from - the target of the branch. - - During instruction scheduling, in an insn, 1 means that this insn must be - scheduled as part of a group together with the previous insn. - In @code{reg} expressions, it is 1 if the register has its entire life contained within the test expression of some loop. --- 711,716 ---- *************** outside the innermost loop containing th *** 636,646 **** was found. In @code{code_label} expressions, it is 1 if the label may never be deleted. ! This is used for labels which are the target of non-local gotos. In an RTL dump, this flag is represented as @samp{/s}. @findex unchanging @item unchanging In @code{reg} and @code{mem} expressions, 1 means that the value of the expression never changes. --- 722,775 ---- was found. In @code{code_label} expressions, it is 1 if the label may never be deleted. ! This is used for labels which are the target of non-local gotos. Such a ! label that would have been deleted is replaced with a @code{note} of type ! @code{NOTE_INSN_DELETED_LABEL}. ! ! In an @code{insn} during dead-code elimination, 1 means that the insn is ! dead code. ! ! In an @code{insn} during reorg for an insn in the delay slot of a branch, ! 1 means that this insn is from the target of the branch. ! ! In an @code{insn} during instruction scheduling, 1 means that this insn ! must be scheduled as part of a group together with the previous insn. In an RTL dump, this flag is represented as @samp{/s}. + @findex integrated + @cindex @samp{/i} in RTL dump + @item integrated + In an @code{insn}, @code{insn_list}, or @code{const}, 1 means the RTL was + produced by procedure integration. + + In @code{reg} expressions, 1 means the register contains + the value to be returned by the current function. On + machines that pass parameters in registers, the same register number + may be used for parameters as well, but this flag is not set on such + uses. + + In @code{symbol_ref} expressions, 1 means the referenced symbol is weak. + + In an RTL dump, this flag is represented as @samp{/i}. + + @findex jump + @cindex @samp{/j} in RTL dump + @item jump + In a @code{mem} expression, 1 means we should keep the alias set for this + mem unchanged when we access a component. + + In a @code{set}, 1 means it is for a return. + + In a @code{call_insn}, 1 means it is a sibling call. + + In the @code{LOG_LINKS} of an @code{insn_list} during scheduling, 1 means the + cost of executing an instruction through the link varies and is unchanging. + + In an RTL dump, this flag is represented as @samp{/j}. + @findex unchanging + @cindex @samp{/u} in RTL dump @item unchanging In @code{reg} and @code{mem} expressions, 1 means that the value of the expression never changes. *************** that the value of the expression never c *** 648,673 **** In @code{subreg} expressions, it is 1 if the @code{subreg} references an unsigned object whose mode has been promoted to a wider mode. ! In an insn, 1 means that this is an annulling branch. In a @code{symbol_ref} expression, 1 means that this symbol addresses ! something in the per-function constants pool. ! In a @code{call_insn}, 1 means that this instruction is a call to a ! const function. In an RTL dump, this flag is represented as @samp{/u}. ! @findex integrated ! @item integrated ! In some kinds of expressions, including insns, this flag means the ! rtl was produced by procedure integration. ! In a @code{reg} expression, this flag indicates the register ! containing the value to be returned by the current function. On ! machines that pass parameters in registers, the same register number ! may be used for parameters as well, but this flag is not set on such ! uses. @end table @node Machine Modes --- 777,826 ---- In @code{subreg} expressions, it is 1 if the @code{subreg} references an unsigned object whose mode has been promoted to a wider mode. ! In an @code{insn}, 1 means that this is an annulling branch. In a @code{symbol_ref} expression, 1 means that this symbol addresses ! something in the per-function constant pool. ! In a @code{call_insn}, @code{note}, or an @code{expr_list} of notes, ! 1 means that this instruction is a call to a const or pure function. In an RTL dump, this flag is represented as @samp{/u}. ! @findex used ! @item used ! This flag is used directly (without an access macro) at the end of RTL ! generation for a function, to count the number of times an expression ! appears in insns. Expressions that appear more than once are copied, ! according to the rules for shared structure (@pxref{Sharing}). ! For a @code{reg}, it is used directly (without an access macro) by the ! leaf register renumbering code to ensure that each register is only ! renumbered once. ! ! In a @code{symbol_ref}, it indicates that an external declaration for ! the symbol has already been written. ! ! @findex volatil ! @cindex @samp{/v} in RTL dump ! @item volatil ! @cindex volatile memory references ! In a @code{mem} or @code{asm_operands} expression, it is 1 if the memory ! reference is volatile. Volatile memory references may not be deleted, ! reordered or combined. ! ! In a @code{symbol_ref} expression, it is used for machine-specific ! purposes. ! ! In a @code{reg} expression, it is 1 if the value is a user-level variable. ! 0 indicates an internal compiler temporary. ! ! In an @code{insn}, 1 means the insn has been deleted. ! ! In @code{label_ref} and @code{reg_label} expressions, 1 means a reference ! to a non-local label. ! ! In an RTL dump, this flag is represented as @samp{/v}. @end table @node Machine Modes *************** this is the right mode to use for certai *** 732,758 **** @item OImode ``Octa Integer'' (?) mode represents a thirty-two-byte integer. @findex SFmode @item SFmode ! ``Single Floating'' mode represents a single-precision (four byte) floating ! point number. @findex DFmode @item DFmode ! ``Double Floating'' mode represents a double-precision (eight byte) floating ! point number. @findex XFmode @item XFmode ! ``Extended Floating'' mode represents a triple-precision (twelve byte) ! floating point number. This mode is used for IEEE extended floating ! point. On some systems not all bits within these bytes will actually ! be used. @findex TFmode @item TFmode ! ``Tetra Floating'' mode represents a quadruple-precision (sixteen byte) ! floating point number. @findex CCmode @item CCmode --- 885,930 ---- @item OImode ``Octa Integer'' (?) mode represents a thirty-two-byte integer. + @findex QFmode + @item QFmode + ``Quarter-Floating'' mode represents a quarter-precision (single byte) + floating point number. + + @findex HFmode + @item HFmode + ``Half-Floating'' mode represents a half-precision (two byte) floating + point number. + + @findex TQFmode + @item TQFmode + ``Three-Quarter-Floating'' (?) mode represents a three-quarter-precision + (three byte) floating point number. + @findex SFmode @item SFmode ! ``Single Floating'' mode represents a four byte floating point number. ! In the common case, of a processor with IEEE arithmetic and 8-bit bytes, ! this is a single-precision IEEE floating point number; it can also be ! used for double-precision (on processors with 16-bit bytes) and ! single-precision VAX and IBM types. @findex DFmode @item DFmode ! ``Double Floating'' mode represents an eight byte floating point number. ! In the common case, of a processor with IEEE arithmetic and 8-bit bytes, ! this is a double-precision IEEE floating point number. @findex XFmode @item XFmode ! ``Extended Floating'' mode represents a twelve byte floating point ! number. This mode is used for IEEE extended floating point. On some ! systems not all bits within these bytes will actually be used. @findex TFmode @item TFmode ! ``Tetra Floating'' mode represents a sixteen byte floating point number. ! This gets used for both the 96-bit extended IEEE floating-point types ! padded to 128 bits, and true 128-bit extended IEEE floating-point types. @findex CCmode @item CCmode *************** For example, RTL expressions of code @co *** 777,790 **** requires. In debugging dumps of RTL, @code{VOIDmode} is expressed by the absence of any mode. @findex SCmode @findex DCmode @findex XCmode @findex TCmode ! @item SCmode, DCmode, XCmode, TCmode These modes stand for a complex number represented as a pair of floating ! point values. The floating point values are in @code{SFmode}, ! @code{DFmode}, @code{XFmode}, and @code{TFmode}, respectively. @findex CQImode @findex CHImode --- 949,965 ---- requires. In debugging dumps of RTL, @code{VOIDmode} is expressed by the absence of any mode. + @findex QCmode + @findex HCmode @findex SCmode @findex DCmode @findex XCmode @findex TCmode ! @item QCmode, HCmode, SCmode, DCmode, XCmode, TCmode These modes stand for a complex number represented as a pair of floating ! point values. The floating point values are in @code{QFmode}, ! @code{HFmode}, @code{SFmode}, @code{DFmode}, @code{XFmode}, and ! @code{TFmode}, respectively. @findex CQImode @findex CHImode *************** mode classes are: *** 822,837 **** @table @code @findex MODE_INT @item MODE_INT ! Integer modes. By default these are @code{QImode}, @code{HImode}, ! @code{SImode}, @code{DImode}, and @code{TImode}. @findex MODE_PARTIAL_INT @item MODE_PARTIAL_INT ! The ``partial integer'' modes, @code{PSImode} and @code{PDImode}. @findex MODE_FLOAT @item MODE_FLOAT ! floating point modes. By default these are @code{SFmode}, @code{DFmode}, @code{XFmode} and @code{TFmode}. @findex MODE_COMPLEX_INT --- 997,1015 ---- @table @code @findex MODE_INT @item MODE_INT ! Integer modes. By default these are @code{BImode}, @code{QImode}, ! @code{HImode}, @code{SImode}, @code{DImode}, @code{TImode}, and ! @code{OImode}. @findex MODE_PARTIAL_INT @item MODE_PARTIAL_INT ! The ``partial integer'' modes, @code{PQImode}, @code{PHImode}, ! @code{PSImode} and @code{PDImode}. @findex MODE_FLOAT @item MODE_FLOAT ! Floating point modes. By default these are @code{QFmode}, ! @code{HFmode}, @code{TQFmode}, @code{SFmode}, @code{DFmode}, @code{XFmode} and @code{TFmode}. @findex MODE_COMPLEX_INT *************** Complex integer modes. (These are not c *** 840,847 **** @findex MODE_COMPLEX_FLOAT @item MODE_COMPLEX_FLOAT ! Complex floating point modes. By default these are @code{SCmode}, ! @code{DCmode}, @code{XCmode}, and @code{TCmode}. @findex MODE_FUNCTION @item MODE_FUNCTION --- 1018,1026 ---- @findex MODE_COMPLEX_FLOAT @item MODE_COMPLEX_FLOAT ! Complex floating point modes. By default these are @code{QCmode}, ! @code{HCmode}, @code{SCmode}, @code{DCmode}, @code{XCmode}, and ! @code{TCmode}. @findex MODE_FUNCTION @item MODE_FUNCTION *************** bits but small enough to fit within twic *** 977,982 **** --- 1156,1175 ---- does not provide a mechanism to represent even larger constants). In the latter case, @var{m} will be @code{VOIDmode}. + @findex const_vector + @item (const_vector:@var{m} [@var{x0} @var{x1} @dots{}]) + Represents a vector constant. The square brackets stand for the vector + containing the constant elements. @var{x0}, @var{x1} and so on are + the @code{const_int} or @code{const_double} elements. + + The number of units in a @code{const_vector} is obtained with the macro + @code{CONST_VECTOR_NUNITS} as in @code{CONST_VECTOR_NUNITS (@var{v})}. + + Individual elements in a vector constant are accessed with the macro + @code{CONST_VECTOR_ELT} as in @code{CONST_VECTOR_ELT (@var{v}, @var{n})} + where @var{v} is the vector constant and @var{n} is the element + desired. + @findex CONST_DOUBLE_MEM @findex CONST_DOUBLE_CHAIN @var{addr} is used to contain the @code{mem} expression that corresponds *************** the precise bit pattern used by the targ *** 1006,1015 **** @findex CONST2_RTX The macro @code{CONST0_RTX (@var{mode})} refers to an expression with value 0 in mode @var{mode}. If mode @var{mode} is of mode class ! @code{MODE_INT}, it returns @code{const0_rtx}. Otherwise, it returns a ! @code{CONST_DOUBLE} expression in mode @var{mode}. Similarly, the macro @code{CONST1_RTX (@var{mode})} refers to an expression with value 1 in ! mode @var{mode} and similarly for @code{CONST2_RTX}. @findex const_string @item (const_string @var{str}) --- 1199,1212 ---- @findex CONST2_RTX The macro @code{CONST0_RTX (@var{mode})} refers to an expression with value 0 in mode @var{mode}. If mode @var{mode} is of mode class ! @code{MODE_INT}, it returns @code{const0_rtx}. If mode @var{mode} is of ! mode class @code{MODE_FLOAT}, it returns a @code{CONST_DOUBLE} ! expression in mode @var{mode}. Otherwise, it returns a ! @code{CONST_VECTOR} expression in mode @var{mode}. Similarly, the macro @code{CONST1_RTX (@var{mode})} refers to an expression with value 1 in ! mode @var{mode} and similarly for @code{CONST2_RTX}. The ! @code{CONST1_RTX} and @code{CONST2_RTX} macros are undefined ! for vector modes. @findex const_string @item (const_string @var{str}) *************** Usually that is the only mode for which *** 1031,1039 **** @findex label_ref @item (label_ref @var{label}) Represents the value of an assembler label for code. It contains one ! operand, an expression, which must be a @code{code_label} that appears ! in the instruction sequence to identify the place where the label ! should go. The reason for using a distinct expression type for code label references is so that jump optimization can distinguish them. --- 1228,1236 ---- @findex label_ref @item (label_ref @var{label}) Represents the value of an assembler label for code. It contains one ! operand, an expression, which must be a @code{code_label} or a @code{note} ! of type @code{NOTE_INSN_DELETED_LABEL} that appears in the instruction ! sequence to identify the place where the label should go. The reason for using a distinct expression type for code label references is so that jump optimization can distinguish them. *************** This virtual register is replaced by the *** 1173,1188 **** @end table @findex subreg ! @item (subreg:@var{m} @var{reg} @var{wordnum}) @code{subreg} expressions are used to refer to a register in a machine mode other than its natural one, or to refer to one register of ! a multi-word @code{reg} that actually refers to several registers. Each pseudo-register has a natural mode. If it is necessary to operate on it in a different mode---for example, to perform a fullword move instruction on a pseudo-register that contains a single byte---the pseudo-register must be enclosed in a @code{subreg}. In ! such a case, @var{wordnum} is zero. Usually @var{m} is at least as narrow as the mode of @var{reg}, in which case it is restricting consideration to only the bits of @var{reg} that --- 1370,1385 ---- @end table @findex subreg ! @item (subreg:@var{m} @var{reg} @var{bytenum}) @code{subreg} expressions are used to refer to a register in a machine mode other than its natural one, or to refer to one register of ! a multi-part @code{reg} that actually refers to several registers. Each pseudo-register has a natural mode. If it is necessary to operate on it in a different mode---for example, to perform a fullword move instruction on a pseudo-register that contains a single byte---the pseudo-register must be enclosed in a @code{subreg}. In ! such a case, @var{bytenum} is zero. Usually @var{m} is at least as narrow as the mode of @var{reg}, in which case it is restricting consideration to only the bits of @var{reg} that *************** a multi-register value. Machine modes s *** 1199,1205 **** @code{TImode} can indicate values longer than a word, values which usually require two or more consecutive registers. To access one of the registers, use a @code{subreg} with mode @code{SImode} and a ! @var{wordnum} that says which register. Storing in a non-paradoxical @code{subreg} has undefined results for bits belonging to the same word as the @code{subreg}. This laxity makes --- 1396,1402 ---- @code{TImode} can indicate values longer than a word, values which usually require two or more consecutive registers. To access one of the registers, use a @code{subreg} with mode @code{SImode} and a ! @var{bytenum} offset that says which register. Storing in a non-paradoxical @code{subreg} has undefined results for bits belonging to the same word as the @code{subreg}. This laxity makes *************** the @code{subreg}, use @code{strict_low_ *** 1209,1216 **** @cindex @code{WORDS_BIG_ENDIAN}, effect on @code{subreg} The compilation parameter @code{WORDS_BIG_ENDIAN}, if set to 1, says ! that word number zero is the most significant part; otherwise, it is ! the least significant part. @cindex @code{FLOAT_WORDS_BIG_ENDIAN}, (lack of) effect on @code{subreg} On a few targets, @code{FLOAT_WORDS_BIG_ENDIAN} disagrees with --- 1406,1418 ---- @cindex @code{WORDS_BIG_ENDIAN}, effect on @code{subreg} The compilation parameter @code{WORDS_BIG_ENDIAN}, if set to 1, says ! that byte number zero is part of the most significant word; otherwise, ! it is part of the least significant word. ! ! @cindex @code{BYTES_BIG_ENDIAN}, effect on @code{subreg} ! The compilation parameter @code{BYTES_BIG_ENDIAN}, if set to 1, says ! that byte number zero is the most significant byte within a word; ! otherwise, it is the least significant byte within a word. @cindex @code{FLOAT_WORDS_BIG_ENDIAN}, (lack of) effect on @code{subreg} On a few targets, @code{FLOAT_WORDS_BIG_ENDIAN} disagrees with *************** a single machine register. The reload p *** 1246,1255 **** expressions such as these from being formed. @findex SUBREG_REG ! @findex SUBREG_WORD The first operand of a @code{subreg} expression is customarily accessed with the @code{SUBREG_REG} macro and the second operand is customarily ! accessed with the @code{SUBREG_WORD} macro. @findex scratch @cindex scratch operands --- 1448,1457 ---- expressions such as these from being formed. @findex SUBREG_REG ! @findex SUBREG_BYTE The first operand of a @code{subreg} expression is customarily accessed with the @code{SUBREG_REG} macro and the second operand is customarily ! accessed with the @code{SUBREG_BYTE} macro. @findex scratch @cindex scratch operands *************** of comparison. The result is computed w *** 1419,1433 **** infinite precision. Of course, machines can't really subtract with infinite precision. ! However, they can pretend to do so when only the sign of the ! result will be used, which is the case when the result is stored ! in the condition code. And that is the only way this kind of expression ! may validly be used: as a value to be stored in the condition codes. ! The mode @var{m} is not related to the modes of @var{x} and @var{y}, ! but instead is the mode of the condition code value. If @code{(cc0)} ! is used, it is @code{VOIDmode}. Otherwise it is some mode in class ! @code{MODE_CC}, often @code{CCmode}. @xref{Condition Code}. Normally, @var{x} and @var{y} must have the same mode. Otherwise, @code{compare} is valid only if the mode of @var{x} is in class --- 1621,1641 ---- infinite precision. Of course, machines can't really subtract with infinite precision. ! However, they can pretend to do so when only the sign of the result will ! be used, which is the case when the result is stored in the condition ! code. And that is the @emph{only} way this kind of expression may ! validly be used: as a value to be stored in the condition codes, either ! @code{(cc0)} or a register. @xref{Comparisons}. ! The mode @var{m} is not related to the modes of @var{x} and @var{y}, but ! instead is the mode of the condition code value. If @code{(cc0)} is ! used, it is @code{VOIDmode}. Otherwise it is some mode in class ! @code{MODE_CC}, often @code{CCmode}. @xref{Condition Code}. If @var{m} ! is @code{VOIDmode} or @code{CCmode}, the operation returns sufficient ! information (in an unspecified format) so that any comparison operator ! can be applied to the result of the @code{COMPARE} operation. For other ! modes in class @code{MODE_CC}, the operation only returns a subset of ! this information. Normally, @var{x} and @var{y} must have the same mode. Otherwise, @code{compare} is valid only if the mode of @var{x} is in class *************** than the operands. Write the pattern fo *** 1467,1474 **** where @var{m} is wider than the modes of @var{x} and @var{y}, which need not be the same. ! Write patterns for unsigned widening multiplication similarly using ! @code{zero_extend}. @findex div @cindex division --- 1675,1682 ---- where @var{m} is wider than the modes of @var{x} and @var{y}, which need not be the same. ! For unsigned widening multiplication, use the same idiom, but with ! @code{zero_extend} instead of @code{sign_extend}. @findex div @cindex division *************** Represents the result of arithmetically *** 1560,1566 **** places. @var{x} have mode @var{m}, a fixed-point machine mode. @var{c} be a fixed-point mode or be a constant with mode @code{VOIDmode}; which mode is determined by the mode called for in the machine description ! entry for the left-shift instruction. For example, on the Vax, the mode of @var{c} is @code{QImode} regardless of @var{m}. @findex lshiftrt --- 1768,1774 ---- places. @var{x} have mode @var{m}, a fixed-point machine mode. @var{c} be a fixed-point mode or be a constant with mode @code{VOIDmode}; which mode is determined by the mode called for in the machine description ! entry for the left-shift instruction. For example, on the VAX, the mode of @var{c} is @code{QImode} regardless of @var{m}. @findex lshiftrt *************** valid for the mode of @var{lval}. *** 2010,2016 **** @item (return) As the sole expression in a pattern, represents a return from the current function, on machines where this can be done with one ! instruction, such as Vaxes. On machines where a multi-instruction ``epilogue'' must be executed in order to return from the function, returning is done by jumping to a label which precedes the epilogue, and the @code{return} expression code is never used. --- 2218,2224 ---- @item (return) As the sole expression in a pattern, represents a return from the current function, on machines where this can be done with one ! instruction, such as VAXen. On machines where a multi-instruction ``epilogue'' must be executed in order to return from the function, returning is done by jumping to a label which precedes the epilogue, and the @code{return} expression code is never used. *************** store a value in @var{x}. @var{x} must *** 2103,2115 **** In some situations, it may be tempting to add a @code{use} of a register in a @code{parallel} to describe a situation where the value ! of a special register will modify the behaviour of the instruction. An hypothetical example might be a pattern for an addition that can either wrap around or use saturating addition depending on the value of a special control register: @example ! (parallel [(set (reg:SI 2) (unspec:SI [(reg:SI 3) (reg:SI 4)] 0)) (use (reg:SI 1))]) @end example --- 2311,2324 ---- In some situations, it may be tempting to add a @code{use} of a register in a @code{parallel} to describe a situation where the value ! of a special register will modify the behavior of the instruction. An hypothetical example might be a pattern for an addition that can either wrap around or use saturating addition depending on the value of a special control register: @example ! (parallel [(set (reg:SI 2) (unspec:SI [(reg:SI 3) ! (reg:SI 4)] 0)) (use (reg:SI 1))]) @end example *************** but it is ok then because no further opt *** 2190,2195 **** --- 2399,2411 ---- However, the definition of the macro @code{NOTICE_UPDATE_CC}, if any, must deal with such insns if you define any peephole optimizations. + @findex cond_exec + @item (cond_exec [@var{cond} @var{expr}]) + Represents a conditionally executed expression. The @var{expr} is + executed only if the @var{cond} is nonzero. The @var{cond} expression + must not have side-effects, but the @var{expr} may very well have + side-effects. + @findex sequence @item (sequence [@var{insns} @dots{}]) Represents a sequence of insns. Each of the @var{insns} that appears *************** are set up by branch shortening and hold *** 2256,2261 **** --- 2472,2491 ---- maximum address, respectively. @var{flags} indicates the relative position of @var{base}, @var{min} and @var{max} to the containing insn and of @var{min} and @var{max} to @var{base}. See rtl.def for details. + + @findex prefetch + @item (prefetch:@var{m} @var{addr} @var{rw} @var{locality}) + Represents prefetch of memory at address @var{addr}. + Operand @var{rw} is 1 if the prefetch is for data to be written, 0 otherwise; + targets that do not support write prefetches should treat this as a normal + prefetch. + Operand @var{locality} specifies the amount of temporal locality; 0 if there + is none or 1, 2, or 3 for increasing levels of temporal locality; + targets that do not support locality hints should ignore this. + + This insn is used to minimize cache-miss latency by moving data into a + cache before it is accessed. It should use only non-faulting data prefetch + instructions. @end table @node Incdec *************** This means that the above invariants are *** 2469,2475 **** inside @code{sequence} expressions. Specifically, if @var{insn} is the first insn in a @code{sequence}, @code{NEXT_INSN (PREV_INSN (@var{insn}))} is the insn containing the @code{sequence} expression, as is the value ! of @code{PREV_INSN (NEXT_INSN (@var{insn}))} is @var{insn} is the last insn in the @code{sequence} expression. You can use these expressions to find the containing @code{sequence} expression. --- 2699,2705 ---- inside @code{sequence} expressions. Specifically, if @var{insn} is the first insn in a @code{sequence}, @code{NEXT_INSN (PREV_INSN (@var{insn}))} is the insn containing the @code{sequence} expression, as is the value ! of @code{PREV_INSN (NEXT_INSN (@var{insn}))} if @var{insn} is the last insn in the @code{sequence} expression. You can use these expressions to find the containing @code{sequence} expression. *************** When a @code{code_label} appears in an R *** 2557,2562 **** --- 2787,2795 ---- appears within a @code{label_ref} which represents the address of the label, as a number. + Besides as a @code{code_label}, a label can also be represented as a + @code{note} of type @code{NOTE_INSN_DELETED_LABEL}. + @findex LABEL_NUSES The field @code{LABEL_NUSES} is only defined once the jump optimization phase is completed and contains the number of times this label is *************** must contain a null pointer): *** 2599,2604 **** --- 2832,2843 ---- Such a note is completely ignorable. Some passes of the compiler delete insns by altering them into notes of this kind. + @findex NOTE_INSN_DELETED_LABEL + @item NOTE_INSN_DELETED_LABEL + This marks what used to be a @code{code_label}, but was not used for other + purposes than taking its address and was transformed to mark that no + code jumps to it. + @findex NOTE_INSN_BLOCK_BEG @findex NOTE_INSN_BLOCK_END @item NOTE_INSN_BLOCK_BEG *************** of debugging information. *** 2613,2619 **** @itemx NOTE_INSN_EH_REGION_END These types of notes indicate the position of the beginning and end of a level of scoping for exception handling. @code{NOTE_BLOCK_NUMBER} ! identifies which @code{CODE_LABEL} is associated with the given region. @findex NOTE_INSN_LOOP_BEG @findex NOTE_INSN_LOOP_END --- 2852,2859 ---- @itemx NOTE_INSN_EH_REGION_END These types of notes indicate the position of the beginning and end of a level of scoping for exception handling. @code{NOTE_BLOCK_NUMBER} ! identifies which @code{CODE_LABEL} or @code{note} of type ! @code{NOTE_INSN_DELETED_LABEL} is associated with the given region. @findex NOTE_INSN_LOOP_BEG @findex NOTE_INSN_LOOP_END *************** An expression for the side effect perfor *** 2675,2681 **** one of the following codes: @code{set}, @code{call}, @code{use}, @code{clobber}, @code{return}, @code{asm_input}, @code{asm_output}, @code{addr_vec}, @code{addr_diff_vec}, @code{trap_if}, @code{unspec}, ! @code{unspec_volatile}, @code{parallel}, or @code{sequence}. If it is a @code{parallel}, each element of the @code{parallel} must be one these codes, except that @code{parallel} expressions cannot be nested and @code{addr_vec} and @code{addr_diff_vec} are not permitted inside a @code{parallel} expression. --- 2915,2921 ---- one of the following codes: @code{set}, @code{call}, @code{use}, @code{clobber}, @code{return}, @code{asm_input}, @code{asm_output}, @code{addr_vec}, @code{addr_diff_vec}, @code{trap_if}, @code{unspec}, ! @code{unspec_volatile}, @code{parallel}, @code{cond_exec}, or @code{sequence}. If it is a @code{parallel}, each element of the @code{parallel} must be one these codes, except that @code{parallel} expressions cannot be nested and @code{addr_vec} and @code{addr_diff_vec} are not permitted inside a @code{parallel} expression. *************** The value in @var{op} dies in this insn; *** 2761,2771 **** value immediately after this insn would not affect the future behavior of the program. ! This does not necessarily mean that the register @var{op} has no useful ! value after this insn since it may also be an output of the insn. In ! such a case, however, a @code{REG_DEAD} note would be redundant and is ! usually not present until after the reload pass, but no code relies on ! this fact. @findex REG_INC @item REG_INC --- 3001,3017 ---- value immediately after this insn would not affect the future behavior of the program. ! It does not follow that the register @var{op} has no useful value after ! this insn since @var{op} is not necessarily modified by this insn. ! Rather, no subsequent instruction uses the contents of @var{op}. ! ! @findex REG_UNUSED ! @item REG_UNUSED ! The register @var{op} being set by this insn will not be used in a ! subsequent insn. This differs from a @code{REG_DEAD} note, which ! indicates that the value in an input will not be used subsequently. ! These two notes are independent; both may be present for the same ! register. @findex REG_INC @item REG_INC *************** last insns, respectively. *** 2802,2808 **** @findex REG_LABEL @item REG_LABEL ! This insn uses @var{op}, a @code{code_label}, but is not a @code{jump_insn}, or it is a @code{jump_insn} that required the label to be held in a register. The presence of this note allows jump optimization to be aware that @var{op} is, in fact, being used, and flow --- 3048,3055 ---- @findex REG_LABEL @item REG_LABEL ! This insn uses @var{op}, a @code{code_label} or a @code{note} of type ! @code{NOTE_INSN_DELETED_LABEL}, but is not a @code{jump_insn}, or it is a @code{jump_insn} that required the label to be held in a register. The presence of this note allows jump optimization to be aware that @var{op} is, in fact, being used, and flow *************** insufficient registers are available. *** 2869,2875 **** Except for stack homes for parameters, which are indicated by a @code{REG_EQUIV} note and are not useful to the early optimization passes and pseudo registers that are equivalent to a memory location ! throughout there entire life, which is not detected until later in the compilation, all equivalences are initially indicated by an attached @code{REG_EQUAL} note. In the early stages of register allocation, a @code{REG_EQUAL} note is changed into a @code{REG_EQUIV} note if --- 3116,3122 ---- Except for stack homes for parameters, which are indicated by a @code{REG_EQUIV} note and are not useful to the early optimization passes and pseudo registers that are equivalent to a memory location ! throughout their entire life, which is not detected until later in the compilation, all equivalences are initially indicated by an attached @code{REG_EQUAL} note. In the early stages of register allocation, a @code{REG_EQUAL} note is changed into a @code{REG_EQUIV} note if *************** Thus, compiler passes prior to register *** 2880,2893 **** @code{REG_EQUAL} notes and passes subsequent to register allocation need only check for @code{REG_EQUIV} notes. - @findex REG_UNUSED - @item REG_UNUSED - The register @var{op} being set by this insn will not be used in a - subsequent insn. This differs from a @code{REG_DEAD} note, which - indicates that the value in an input will not be used subsequently. - These two notes are independent; both may be present for the same - register. - @findex REG_WAS_0 @item REG_WAS_0 The single output of this insn contained zero before this insn. --- 3127,3132 ---- *************** There is only one @code{cc0} expression. *** 3110,3115 **** --- 3349,3359 ---- There is only one @code{const_double} expression with value 0 for each floating point mode. Likewise for values 1 and 2. + @cindex @code{const_vector}, RTL sharing + @item + There is only one @code{const_vector} expression with value 0 for + each vector mode, be it an integer or a double constant vector. + @cindex @code{label_ref}, RTL sharing @cindex @code{scratch}, RTL sharing @item *************** combiner is finished with the insn. Thi *** 3161,3171 **** @section Reading RTL To read an RTL object from a file, call @code{read_rtx}. It takes one ! argument, a stdio stream, and returns a single RTL object. ! ! Reading RTL from a file is very slow. This is not currently a ! problem since reading RTL occurs only as part of building the ! compiler. People frequently have the idea of using RTL stored as text in a file as an interface between a language front end and the bulk of GCC@. This --- 3405,3414 ---- @section Reading RTL To read an RTL object from a file, call @code{read_rtx}. It takes one ! argument, a stdio stream, and returns a single RTL object. This routine ! is defined in @file{read-rtl.c}. It is not available in the compiler ! itself, only the various programs that generate the compiler back end ! from the machine description. People frequently have the idea of using RTL stored as text in a file as an interface between a language front end and the bulk of GCC@. This diff -Nrc3pad gcc-3.0.4/gcc/doc/service.texi gcc-3.1/gcc/doc/service.texi *** gcc-3.0.4/gcc/doc/service.texi Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/doc/service.texi Sun Nov 11 11:31:24 2001 *************** *** 0 **** --- 1,30 ---- + @c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, + @c 1999, 2000, 2001 Free Software Foundation, Inc. + @c This is part of the GCC manual. + @c For copying conditions, see the file gcc.texi. + + @node Service + @chapter How To Get Help with GCC + + If you need help installing, using or changing GCC, there are two + ways to find it: + + @itemize @bullet + @item + Send a message to a suitable network mailing list. First try + @email{gcc-help@@gcc.gnu.org} (for help installing or using GCC), and if + that brings no response, try @email{gcc@@gcc.gnu.org}. For help + changing GCC, ask @email{gcc@@gcc.gnu.org}. If you think you have found + a bug in GCC, please report it following the instructions at + @pxref{Bug Reporting}. + + @item + Look in the service directory for someone who might help you for a fee. + The service directory is found at + @uref{http://www.gnu.org/prep/service.html}. + @end itemize + + @c For further information, see + @c @uref{http://gcc.gnu.org/cgi-bin/fom.cgi?file=12}. + @c FIXME: this URL may be too volatile, this FAQ entry needs to move to + @c the regular web pages before we can uncomment the reference. diff -Nrc3pad gcc-3.0.4/gcc/doc/sourcebuild.texi gcc-3.1/gcc/doc/sourcebuild.texi *** gcc-3.0.4/gcc/doc/sourcebuild.texi Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/doc/sourcebuild.texi Mon Apr 15 18:59:52 2002 *************** *** 0 **** --- 1,872 ---- + @c Copyright (C) 2002 Free Software Foundation, Inc. + @c This is part of the GCC manual. + @c For copying conditions, see the file gcc.texi. + + @node Source Tree + @chapter Source Tree Structure and Build System + + This chapter describes the structure of the GCC source tree, and how + GCC is built. The user documentation for building and installing GCC + is in a separate manual (@uref{http://gcc.gnu.org/install/}), with + which it is presumed that you are familiar. + + @menu + * Configure Terms:: Configuration terminology and history. + * Top Level:: The top level source directory. + * gcc Directory:: The @file{gcc} subdirectory. + * Test Suites:: The GCC test suites. + @end menu + + @include configterms.texi + + @node Top Level + @section Top Level Source Directory + + The top level source directory in a GCC distribution contains several + files and directories that are shared with other software + distributions such as that of GNU Binutils. It also contains several + subdirectories that contain parts of GCC and its runtime libraries: + + @table @file + @item boehm-gc + The Boehm conservative garbage collector, used as part of the Java + runtime library. + + @item contrib + Contributed scripts that may be found useful in conjunction with GCC@. + One of these, @file{contrib/texi2pod.pl}, is used to generate man + pages from Texinfo manuals as part of the GCC build process. + + @item fastjar + An implementation of the @command{jar} command, used with the Java + front end. + + @item gcc + The main sources of GCC itself (except for runtime libraries), + including optimizers, support for different target architectures, + language front ends, and test suites. @xref{gcc Directory, , The + @file{gcc} Subdirectory}, for details. + + @item include + Headers for the @code{libiberty} library. + + @item libf2c + The Fortran runtime library. + + @item libffi + The @code{libffi} library, used as part of the Java runtime library. + + @item libiberty + The @code{libiberty} library, used for portability and for some + generally useful data structures and algorithms. @xref{Top, , + Introduction, libiberty, @sc{gnu} libiberty}, for more information + about this library. + + @item libjava + The Java runtime library. + + @item libobjc + The Objective-C runtime library. + + @item libstdc++-v3 + The C++ runtime library. + + @item maintainer-scripts + Scripts used by the @code{gccadmin} account on @code{gcc.gnu.org}. + + @item zlib + The @code{zlib} compression library, used by the Java front end and as + part of the Java runtime library. + @end table + + The build system in the top level directory, including how recursion + into subdirectories works and how building runtime libraries for + multilibs is handled, is documented in a separate manual, included + with GNU Binutils. @xref{Top, , GNU configure and build system, + configure, The GNU configure and build system}, for details. + + @node gcc Directory + @section The @file{gcc} Subdirectory + + The @file{gcc} directory contains many files that are part of the C + sources of GCC, other files used as part of the configuration and + build process, and subdirectories including documentation and a + test suite. The files that are sources of GCC are documented in a + separate chapter. @xref{Passes, , Passes and Files of the Compiler}. + + @menu + * Subdirectories:: Subdirectories of @file{gcc}. + * Configuration:: The configuration process, and the files it uses. + * Build:: The build system in the @file{gcc} directory. + * Makefile:: Targets in @file{gcc/Makefile}. + * Library Files:: Library source files and headers under @file{gcc/}. + * Headers:: Headers installed by GCC. + * Documentation:: Building documentation in GCC. + * Front End:: Anatomy of a language front end. + * Back End:: Anatomy of a target back end. + @end menu + + @node Subdirectories + @subsection Subdirectories of @file{gcc} + + The @file{gcc} directory contains the following subdirectories: + + @table @file + @item @var{language} + Subdirectories for various languages. Directories containing a file + @file{config-lang.in} are language subdirectories. The contents of + the subdirectories @file{cp} (for C++) and @file{objc} (for + Objective-C) are documented in this manual (@pxref{Passes, , Passes + and Files of the Compiler}); those for other languages are not. + @xref{Front End, , Anatomy of a Language Front End}, for details of + the files in these directories. + + @item config + Configuration files for supported architectures and operating + systems. @xref{Back End, , Anatomy of a Target Back End}, for + details of the files in thie directory. + + @item doc + Texinfo documentation for GCC, together with automatically generated + man pages and support for converting the installation manual to + HTML@. @xref{Documentation}. + + @item fixinc + The support for fixing system headers to work with GCC@. See + @file{fixinc/README} for more information. The headers fixed by this + mechanism are installed in @file{@var{libsubdir}/include}. Along with + those headers, @file{README-fixinc} is also installed, as + @file{@var{libsubdir}/include/README}. + + @item ginclude + System headers installed by GCC, mainly those required by the C + standard of freestanding implementations. @xref{Headers, , Headers + Installed by GCC}, for details of when these and other headers are + installed. + + @item intl + GNU @code{libintl}, from GNU @code{gettext}, for systems which do not + include it in libc. Properly, this directory should be at top level, + parallel to the @file{gcc} directory. + + @item po + Message catalogs with translations of messages produced by GCC into + various languages, @file{@var{language}.po}. This directory also + contains @file{gcc.pot}, the template for these message catalogues, + @file{exgettext}, a wrapper around @command{gettext} to extract the + messages from the GCC sources and create @file{gcc.pot}, which is run + by @command{make gcc.pot}, and @file{EXCLUDES}, a list of files from + which messages should not be extracted. + + @item testsuite + The GCC test suites (except for those for runtime libraries). + @xref{Test Suites}. + @end table + + @node Configuration + @subsection Configuration in the @file{gcc} Directory + + The @file{gcc} directory is configured with an Autoconf-generated + script @file{configure}. The @file{configure} script is generated + from @file{configure.in} and @file{aclocal.m4}. From the files + @file{configure.in} and @file{acconfig.h}, Autoheader generates the + file @file{config.in}. The file @file{cstamp-h.in} is used as a + timestamp. + + @menu + * Config Fragments:: Scripts used by @file{configure}. + * System Config:: The @file{config.gcc} file. + * Configuration Files:: Files created by running @file{configure}. + @end menu + + @node Config Fragments + @subsubsection Scripts Used by @file{configure} + + @file{configure} uses some other scripts to help in its work: + + @itemize @bullet + @item The standard GNU @file{config.sub} and @file{config.guess} + files, kept in the top level directory, are used. FIXME: when is the + @file{config.guess} file in the @file{gcc} directory (that just calls + the top level one) used? + + @item The file @file{config.gcc} is used to handle configuration + specific to the particular build, host or target machine. (In + general, this should only be used for features that cannot reasonably + be tested in Autoconf feature tests.) @xref{System Config, , The + @file{config.gcc} File}, for details of the contents of this file. + + @item Each language subdirectory has a file + @file{@var{language}/config-lang.in} that is used for + front-end-specific configuration. @xref{Front End Config, , The Front + End @file{config-lang.in} File}, for details of this file. + + @item A helper script @file{configure.frag} is used as part of + creating the output of @file{configure}. + @end itemize + + @node System Config + @subsubsection The @file{config.gcc} File + + FIXME: document the contents of this file, and what variables should + be set to control build, host and target configuration. + + @include configfiles.texi + + @node Build + @subsection Build System in the @file{gcc} Directory + + FIXME: describe the build system, including what is built in what + stages. Also list the various source files that are used in the build + process but aren't source files of GCC itself and so aren't documented + below (@pxref{Passes}). + + @include makefile.texi + + @node Library Files + @subsection Library Source Files and Headers under the @file{gcc} Directory + + FIXME: list here, with explanation, all the C source files and headers + under the @file{gcc} directory that aren't built into the GCC + executable but rather are part of runtime libraries and object files, + such as @file{crtstuff.c} and @file{unwind-dw2.c}. @xref{Headers, , + Headers Installed by GCC}, for more information about the + @file{ginclude} directory. + + @node Headers + @subsection Headers Installed by GCC + + In general, GCC expects the system C library to provide most of the + headers to be used with it. However, GCC will fix those headers if + necessary to make them work with GCC, and will install some headers + required of freestanding implementations. These headers are installed + in @file{@var{libsubdir}/include}. Headers for non-C runtime + libraries are also installed by GCC; these are not documented here. + (FIXME: document them somewhere.) + + Several of the headers GCC installs are in the @file{ginclude} + directory. These headers, @file{iso646.h}, + @file{stdarg.h}, @file{stdbool.h}, @file{stddef.h} and + @file{varargs.h}, are installed in @file{@var{libsubdir}/include}, + unless the target Makefile fragment (@pxref{Target Fragment}) + overrides this by setting @code{USER_H}. + + In addition to these headers and those generated by fixing system + headers to work with GCC, some other headers may also be installed in + @file{@var{libsubdir}/include}. @file{config.gcc} may set + @code{extra_headers}; this specifies additional headers under + @file{config} to be installed on some systems. GCC normally installs + a @code{} file; these are kept as + @file{config/float-@var{format}.h}, where @var{format} is specified by + a @code{float_format} setting in @file{config.gcc}, and a setting + @samp{float_format=none} disables installation of this header. GCC + also installs its own version of @code{}; this is generated + from @file{glimits.h}, together with @file{limitx.h} and + @file{limity.h} if the system also has its own version of + @code{}. (GCC provides its own header because it is + required of ISO C freestanding implementations, but needs to include + the system header from its own header as well because other standards + such as POSIX specify additional values to be defined in + @code{}.) The system's @code{} header is used via + @file{@var{libsubdir}/include/syslimits.h}, which is copied from + @file{gsyslimits.h} if it does not need fixing to work with GCC; if it + needs fixing, @file{syslimits.h} is the fixed copy. + + @node Documentation + @subsection Building Documentation + + The main GCC documentation is in the form of manuals in Texinfo + format. These are installed in Info format, and DVI versions may be + generated by @command{make dvi}. In addition, some man pages are + generated from the Texinfo manuals, there are some other text files + with miscellaneous documentation, and runtime libraries have their own + documentation outside the @file{gcc} directory. FIXME: document the + documentation for runtime libraries somewhere. + + @menu + * Texinfo Manuals:: GCC manuals in Texinfo format. + * Man Page Generation:: Generating man pages from Texinfo manuals. + * Miscellaneous Docs:: Miscellaneous text files with documentation. + @end menu + + @node Texinfo Manuals + @subsubsection Texinfo Manuals + + The manuals for GCC as a whole, and the C and C++ front ends, are in + files @file{doc/*.texi}. Other front ends have their own manuals in + files @file{@var{language}/*.texi}. Common files + @file{doc/include/*.texi} are provided which may be included in + multiple manuals; the following files are in @file{doc/include}: + + @table @file + @item fdl.texi + The GNU Free Documentation License. + @item funding.texi + The section ``Funding Free Software''. + @item gcc-common.texi + Common definitions for manuals. + @item gpl.texi + The GNU General Public License. + @item texinfo.tex + A copy of @file{texinfo.tex} known to work with the GCC manuals. + @end table + + DVI formatted manuals are generated by @command{make dvi}, which uses + @command{texi2dvi} (via the Makefile macro @code{$(TEXI2DVI)}). Info + manuals are generated by @command{make info} (which is run as part of + a bootstrap); this generates the manuals in the source directory, + using @command{makeinfo} via the Makefile macro @code{$(MAKEINFO)}, + and they are included in release distributions. + + Manuals are also provided on the GCC web site, in both HTML and + PostScript forms. This is done via the script + @file{maintainer-scripts/update_web_docs}. Each manual to be + provided online must be listed in the definition of @code{MANUALS} in + that file; a file @file{@var{name}.texi} must only appear once in the + source tree, and the output manual must have the same name as the + source file. (However, other Texinfo files, included in manuals but + not themselves the root files of manuals, may have names that appear + more than once in the source tree.) The manual file + @file{@var{name}.texi} should only include other files in its own + directory or in @file{doc/include}. HTML manuals will be generated by + @command{makeinfo --html} and PostScript manuals by @command{texi2dvi} + and @command{dvips}. All Texinfo files that are parts of manuals must + be checked into CVS, even if they are generated files, for the + generation of online manuals to work. + + The installation manual, @file{doc/install.texi}, is also provided on + the GCC web site. The HTML version is generated by the script + @file{doc/install.texi2html}. + + @node Man Page Generation + @subsubsection Man Page Generation + + Because of user demand, in addition to full Texinfo manuals, man pages + are provided which contain extracts from those manuals. These man + pages are generated from the Texinfo manuals using + @file{contrib/texi2pod.pl} and @command{pod2man}. (The man page for + @command{g++}, @file{cp/g++.1}, just contains a @samp{.so} reference + to @file{gcc.1}, but all the other man pages are generated from + Texinfo manuals.) + + Because many systems may not have the necessary tools installed to + generate the man pages, they are only generated if the + @file{configure} script detects that recent enough tools are + installed, and the Makefiles allow generating man pages to fail + without aborting the build. Man pages are also included in release + distributions. They are generated in the source directory. + + Magic comments in Texinfo files starting @samp{@@c man} control what + parts of a Texinfo file go into a man page. Only a subset of Texinfo + is supported by @file{texi2pod.pl}, and it may be necessary to add + support for more Texinfo features to this script when generating new + man pages. To improve the man page output, some special Texinfo + macros are provided in @file{doc/include/gcc-common.texi} which + @file{texi2pod.pl} understands: + + @table @code + @item @@gcctabopt + Use in the form @samp{@@table @@gcctabopt} for tables of options, + where for printed output the effect of @samp{@@code} is better than + that of @samp{@@option} but for man page output a different effect is + wanted. + @item @@gccoptlist + Use for summary lists of options in manuals. + @item @@gol + Use at the end of each line inside @samp{@@gccoptlist}. This is + necessary to avoid problems with differences in how the + @samp{@@gccoptlist} macro is handled by different Texinfo formatters. + @end table + + FIXME: describe the @file{texi2pod.pl} input language and magic + comments in more detail. + + @node Miscellaneous Docs + @subsubsection Miscellaneous Documentation + + In addition to the formal documentation that is installed by GCC, + there are several other text files with miscellaneous documentation: + + @table @file + @item ABOUT-GCC-NLS + Notes on GCC's Native Language Support. FIXME: this should be part of + this manual rather than a separate file. + @item ABOUT-NLS + Notes on the Free Translation Project. + @item COPYING + The GNU General Public License. + @item COPYING.LIB + The GNU Lesser General Public License. + @item *ChangeLog* + @itemx */ChangeLog* + Change log files for various parts of GCC@. + @item LANGUAGES + Details of a few changes to the GCC front-end interface. FIXME: the + information in this file should be part of general documentation of + the front-end interface in this manual. + @item ONEWS + Information about new features in old versions of GCC@. (For recent + versions, the information is on the GCC web site.) + @item README.Portability + Information about portability issues when writing code in GCC@. FIXME: + why isn't this part of this manual or of the GCC Coding Conventions? + @item SERVICE + A pointer to the GNU Service Directory. + @end table + + FIXME: document such files in subdirectories, at least @file{config}, + @file{cp}, @file{objc}, @file{testsuite}. + + @node Front End + @subsection Anatomy of a Language Front End + + A front end for a language in GCC has the following parts: + + @itemize @bullet + @item + A directory @file{@var{language}} under @file{gcc} containing source + files for that front end. @xref{Front End Directory, , The Front End + @file{@var{language}} Directory}, for details. + @item + A mention of the language in the list of supported languages in + @file{gcc/doc/install.texi}. + @item + Details of contributors to that front end in + @file{gcc/doc/contrib.texi}. If the details are in that front end's + own manual then there should be a link to that manual's list in + @file{contrib.texi}. + @item + Information about support for that language in + @file{gcc/doc/frontends.texi}. + @item + Information about standards for that language, and the front end's + support for them, in @file{gcc/doc/standards.texi}. This may be a + link to such information in the front end's own manual. + @item + Details of source file suffixes for that language and @option{-x + @var{lang}} options supported, in @file{gcc/doc/invoke.texi}. + @item + Entries in @code{default_compilers} in @file{gcc.c} for source file + suffixes for that language. + @item + Preferably test suites, which may be under @file{gcc/testsuite} or + runtime library directories. FIXME: document somewhere how to write + test suite harnesses. + @item + Probably a runtime library for the language, outside the @file{gcc} + directory. FIXME: document this further. + @item + Details of the directories of any runtime libraries in + @file{gcc/doc/sourcebuild.texi}. + @end itemize + + If the front end is added to the official GCC CVS repository, the + following are also necessary: + + @itemize @bullet + @item + At least one GNATS category for bugs in that front end and runtime + libraries. This category needs to be mentioned in + @file{gcc/gccbug.in}, and in @file{gnats.html} on the GCC web site, as + well as being added to the GNATS database. + @item + Normally, one or more maintainers of that front end listed in + @file{MAINTAINERS}. + @item + Mentions on the GCC web site in @file{index.html} and + @file{frontends.html}, with any relevant links on + @file{readings.html}. (Front ends that are not an official part of + GCC may also be listed on @file{frontends.html}, with relevant links.) + @item + A news item on @file{index.html}, and possibly an announcement on the + @email{gcc-announce@@gcc.gnu.org} mailing list. + @item + The front end's manuals should be mentioned in + @file{maintainer-scripts/update_web_docs} (@pxref{Texinfo Manuals}) + and the online manuals should be linked to from + @file{onlinedocs/index.html}. + @item + Any old releases or CVS repositories of the front end, before its + inclusion in GCC, should be made available on the GCC FTP site + @uref{ftp://gcc.gnu.org/pub/gcc/old-releases/}. + @item + The release and snapshot script @file{maintainer-scripts/gcc_release} + should be updated to generate appropriate tarballs for this front end. + @item + If this front end includes its own version files that include the + current date, @file{maintainer-scripts/update_version} should be + updated accordingly. + @item + @file{CVSROOT/modules} in the GCC CVS repository should be updated. + @end itemize + + @menu + * Front End Directory:: The front end @file{@var{language}} directory. + * Front End Config:: The front end @file{config-lang.in} file. + @end menu + + @node Front End Directory + @subsubsection The Front End @file{@var{language}} Directory + + A front end @file{@var{language}} directory contains the source files + of that front end (but not of any runtime libraries, which should be + outside the @file{gcc} directory). This includes documentation, and + possibly some subsidiary programs build alongside the front end. + Certain files are special and other parts of the compiler depend on + their names: + + @table @file + @item config-lang.in + This file is required in all language subdirectories. @xref{Front End + Config, , The Front End @file{config-lang.in} File}, for details of + its contents + @item Make-lang.in + This file is required in all language subdirectories. It contains + targets @code{@var{lang}.@var{hook}} (where @code{@var{lang}} is the + setting of @code{language} in @file{config-lang.in}) for the following + values of @code{@var{hook}}, and any other Makefile rules required to + build those targets (which may if necessary use other Makefiles + specified in @code{outputs} in @file{config-lang.in}, although this is + deprecated). + + @table @code + @item all.build + @itemx all.cross + @itemx start.encap + @itemx rest.encap + FIXME: exactly what goes in each of these targets? + @item info + Build info documentation for the front end, in the source directory. + This target is only called by @command{make bootstrap} if a suitable + version of @command{makeinfo} is available, so does not need to check + for this, and should fail if an error occurs. + @item dvi + Build DVI documentation for the front end, in the build directory. + This should be done using @code{$(TEXI2DVI)}, with appropriate + @option{-I} arguments pointing to directories of included files. + @item generated-manpages + Build generated man pages for the front end from Texinfo manuals + (@pxref{Man Page Generation}), in the source directory. This target + is only called if the necessary tools are available, but should ignore + errors so as not to stop the build if errors occur; man pages are + optional and the tools involved may be installed in a broken way. + @item install-normal + FIXME: what is this target for? + @item install-common + Install everything that is part of the front end, apart from the + compiler executables listed in @code{compilers} in + @file{config-lang.in} that are installed in @file{@var{libsubdir}} by + the main @file{Makefile}. + @item install-info + Install info documentation for the front end, if it is present in the + source directory. (It may not be present if a suitable version of + @command{makeinfo} was not installed.) This target should run the + command @command{install-info} to update the info directory, but + should ignore errors when running that command. + @item install-man + Install man pages for the front end. This target should ignore + errors. + @item uninstall + Uninstall files installed by installing the compiler. This is + currently documented not to be supported, so the hook need not do + anything. + @item mostlyclean + @itemx clean + @itemx distclean + @itemx extraclean + @itemx maintainer-clean + Except for @code{extraclean}, the language parts of the standard GNU + @samp{*clean} targets. @xref{Standard Targets, , Standard Targets for + Users, standards, GNU Coding Standards}, for details of the standard + targets. @code{extraclean} does @code{distclean} and also deletes + anything likely to be found in the source directory that shouldn't be + in the distribution. For GCC, @code{maintainer-clean} should delete + all generated files in the source directory that are not checked into + CVS, but should not delete anything checked into CVS@. + @item stage1 + @itemx stage2 + @itemx stage3 + @itemx stage4 + Move to the stage directory files not included in @code{stagestuff} in + @file{config-lang.in} or otherwise moved by the main @file{Makefile}. + @end table + + @item lang-options.h + This file provides entries for @code{documented_lang_options} in + @file{toplev.c} describing command-line options the front end accepts + for @option{--help} output. + @item lang-specs.h + This file provides entries for @code{default_compilers} in + @file{gcc.c} which override the default of giving an error that a + compiler for that language is not installed. + @item @var{language}-tree.def + This file, which need not exist, defines any language-specific tree + codes. + @end table + + @node Front End Config + @subsubsection The Front End @file{config-lang.in} File + + Each language subdirectory contains a @file{config-lang.in} file. + This file is a shell script that may define some variables describing + the language: + + @table @code + @item language + This definition must be present, and gives the name of the language + for some purposes such as arguments to @option{--enable-languages}. + @item lang_requires + If defined, this variable lists (space-separated) language front ends + other than C that this front end requires to be enabled (with the + names given being their @code{language} settings). For example, the + Java front end depends on the C++ front end, so sets + @samp{lang_requires=c++}. + @item target_libs + If defined, this variable lists (space-separated) targets in the top + level @file{Makefile} to build the runtime libraries for this + language, such as @code{target-libobjc}. + @item lang_dirs + If defined, this variable lists (space-separated) top level + directories (parallel to @file{gcc}), apart from the runtime libraries, + that should not be configured if this front end is not built. + @item build_by_default + If defined to @samp{no}, this language front end is not built unless + enabled in a @option{--enable-languages} argument. Otherwise, front + ends are built by default, subject to any special logic in + @file{configure.in} (as is present to disable the Ada front end if the + Ada compiler is not already installed). + @item boot_language + If defined to @samp{yes}, this front end is built in stage 1 of the + bootstrap. This is only relevant to front ends written in their own + languages. + @item compilers + If defined, a space-separated list of compiler executables that should + be installed in @file{@var{libsubdir}}. The names here will each end + with @samp{\$(exeext)}. + @item stagestuff + If defined, a space-separated list of files that should be moved to + the @file{stage@var{n}} directories in each stage of bootstrap. + @item outputs + If defined, a space-separated list of files that should be generated + by @file{configure} substituting values in them. This mechanism can + be used to create a file @file{@var{language}/Makefile} from + @file{@var{language}/Makefile.in}, but this is deprecated, building + everything from the single @file{gcc/Makefile} is preferred. + @end table + + @node Back End + @subsection Anatomy of a Target Back End + + A back end for a target architecture in GCC has the following parts: + + @itemize @bullet + @item + A directory @file{@var{machine}} under @file{gcc/config}, containing a + machine description @file{@var{machine}.md} file (@pxref{Machine Desc, + , Machine Descriptions}), header files @file{@var{machine}.h} and + @file{@var{machine}-protos.h} and a source file @file{@var{machine}.c} + (@pxref{Target Macros, , Target Description Macros and Functions}), + possibly a target Makefile fragment @file{t-@var{machine}} + (@pxref{Target Fragment, , The Target Makefile Fragment}), and maybe + some other files. The names of these files may be changed from the + defaults given by explicit specifications in @file{config.gcc}. + @item + Entries in @file{config.gcc} (@pxref{System Config, , The + @file{config.gcc} File}) for the systems with this target + architecture. + @item + Documentation in @file{gcc/doc/invoke.texi} for any command-line + options supported by this target (@pxref{Run-time Target, , Run-time + Target Specification}). This means both entries in the summary table + of options and details of the individual options. + @item + Documentation in @file{gcc/doc/extend.texi} for any target-specific + attributes supported (@pxref{Target Attributes, , Defining + target-specific uses of @code{__attribute__}}), including where the + same attribute is already supported on some targets, which are + enumerated in the manual. + @item + Documentation in @file{gcc/doc/extend.texi} for any target-specific + pragmas supported. + @item + Documentation in @file{gcc/doc/extend.texi} of any target-specific + built-in functions supported. + @item + Documentation in @file{gcc/doc/md.texi} of any target-specific + constraint letters (@pxref{Machine Constraints, , Constraints for + Particular Machines}). + @item + A note in @file{gcc/doc/contrib.texi} under the person or people who + contributed the target support. + @item + Entries in @file{gcc/doc/install.texi} for all target triplets + supported with this target architecture, giving details of any special + notes about installation for this target, or saying that there are no + special notes if there are none. + @item + Possibly other support outside the @file{gcc} directory for runtime + libraries. FIXME: reference docs for this. The libstdc++ porting + manual needs to be installed as info for this to work, or to be a + chapter of this manual. + @end itemize + + If the back end is added to the official GCC CVS repository, the + following are also necessary: + + @itemize @bullet + @item + An entry for the target architecture in @file{readings.html} on the + GCC web site, with any relevant links. + @item + A news item about the contribution of support for that target + architecture, in @file{index.html} on the GCC web site. + @item + Normally, one or more maintainers of that target listed in + @file{MAINTAINERS}. Some existing architectures may be unmaintained, + but it would be unusual to add support for a target that does not have + a maintainer when support is added. + @end itemize + + @node Test Suites + @section Test Suites + + GCC contains several test suites to help maintain compiler quality. + Most of the runtime libraries and language front ends in GCC have test + suites. Currently only the C language test suites are documented + here; FIXME: document the others. + + @menu + * Test Idioms:: Idioms used in test suite code. + * C Tests:: The C language test suites. + @end menu + + @node Test Idioms + @subsection Idioms Used in Test Suite Code + + In the @file{gcc.c-torture} test suites, test cases are commonly named + after the date on which they were added. This allows people to tell + at a glance whether a test failure is because of a recently found bug + that has not yet been fixed, or whether it may be a regression. In + other test suites, more descriptive names are used. In general C test + cases have a trailing @file{-@var{n}.c}, starting with @file{-1.c}, in + case other test cases with similar names are added later. + + Test cases should use @code{abort ()} to indicate failure and + @code{exit (0)} for success; on some targets these may be redefined to + indicate failure and success in other ways. + + In the @file{gcc.dg} test suite, it is often necessary to test that an + error is indeed a hard error and not just a warning---for example, + where it is a constraint violation in the C standard, which must + become an error with @option{-pedantic-errors}. The following idiom, + where the first line shown is line @var{line} of the file and the line + that generates the error, is used for this: + + @smallexample + /* @{ dg-bogus "warning" "warning in place of error" @} */ + /* @{ dg-error "@var{regexp}" "@var{message}" @{ target *-*-* @} @var{line} @} */ + @end smallexample + + It may be necessary to check that an expression is an integer constant + expression and has a certain value. To check that @code{@var{E}} has + value @code{@var{V}}, an idiom similar to the following is used: + + @smallexample + char x[((E) == (V) ? 1 : -1)]; + @end smallexample + + In @file{gcc.dg} tests, @code{__typeof__} is sometimes used to make + assertions about the types of expressions. See, for example, + @file{gcc.dg/c99-condexpr-1.c}. The more subtle uses depend on the + exact rules for the types of conditional expressions in the C + standard; see, for example, @file{gcc.dg/c99-intconst-1.c}. + + It is useful to be able to test that optimizations are being made + properly. This cannot be done in all cases, but it can be done where + the optimization will lead to code being optimized away (for example, + where flow analysis or alias analysis should show that certain code + cannot be called) or to functions not being called because they have + been expanded as built-in functions. Such tests go in + @file{gcc.c-torture/execute}. Where code should be optimized away, a + call to a nonexistent function such as @code{link_failure ()} may be + inserted; a definition + + @smallexample + #ifndef __OPTIMIZE__ + void + link_failure (void) + @{ + abort (); + @} + #endif + @end smallexample + + @noindent + will also be needed so that linking still succeeds when the test is + run without optimization. When all calls to a built-in function + should have been optimized and no calls to the non-built-in version of + the function should remain, that function may be defined as + @code{static} to call @code{abort ()} (although redeclaring a function + as static may not work on all targets). + + FIXME: discuss non-C test suites here. + + @node C Tests + @subsection C Language Test Suites + + GCC contains the following C language test suites, in the + @file{gcc/testsuite} directory: + + @table @file + @item gcc.c-torture/compat + FIXME: describe this. + + This directory should probably not be used for new tests. + @item gcc.c-torture/compile + This test suite contains test cases that should compile, but do not + need to link or run. These test cases are compiled with several + different combinations of optimization options. All warnings are + disabled for these test cases, so this directory is not suitable if + you wish to test for the presence or absence of compiler warnings. + While special options can be set, and tests disabled on specific + platforms, by the use of @file{.x} files, mostly these test cases + should not contain platform dependencies. FIXME: discuss how defines + such as @code{NO_LABEL_VALUES} and @code{STACK_SIZE} are used. + @item gcc.c-torture/execute + This test suite contains test cases that should compile, link and run; + otherwise the same comments as for @file{gcc.c-torture/compile} apply. + @item gcc.c-torture/unsorted + FIXME: describe this. + + This directory should probably not be used for new tests. + @item gcc.dg + This test suite contains tests using the more modern @samp{dg} harness. + Magic comments determine whether the file is preprocessed, compiled, + linked or run. In these tests, error and warning message texts are + compared against expected texts or regular expressions given in + comments. These tests are run with the options @samp{-ansi -pedantic} + unless other options are given in the test. Except as noted below they + are not run with multiple optimization options. + @item gcc.dg/cpp + This subdirectory contains tests of the preprocessor. + @item gcc.dg/debug + This subdirectory contains tests for debug formats. Tests in this + subdirectory are run for each debug format that the compiler supports. + @item gcc.dg/format + This subdirectory contains tests of the @option{-Wformat} format + checking. Tests in this directory are run with and without + @option{-DWIDE}. + @item gcc.dg/noncompile + This subdirectory contains tests of code that should not compile and + does not need any special compilation options. They are run with + multiple optimization options, since sometimes invalid code crashes + the compiler with optimization. + @item gcc.dg/special + FIXME: describe this. + @item gcc.c-torture/misc-tests + FIXME: describe this, when it should be used for new tests and when it + shouldn't. + @end table + + FIXME: merge in @file{testsuite/README.gcc} and discuss the format of + test cases and magic comments more. diff -Nrc3pad gcc-3.0.4/gcc/doc/standards.texi gcc-3.1/gcc/doc/standards.texi *** gcc-3.0.4/gcc/doc/standards.texi Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/doc/standards.texi Mon Apr 15 18:59:52 2002 *************** *** 0 **** --- 1,185 ---- + @c Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. + @c This is part of the GCC manual. + @c For copying conditions, see the file gcc.texi. + + @node Standards + @chapter Language Standards Supported by GCC + @cindex C standard + @cindex C standards + @cindex ANSI C standard + @cindex ANSI C + @cindex ANSI C89 + @cindex C89 + @cindex ANSI X3.159-1989 + @cindex X3.159-1989 + @cindex ISO C standard + @cindex ISO C + @cindex ISO C89 + @cindex ISO C90 + @cindex ISO/IEC 9899 + @cindex ISO 9899 + @cindex C90 + @cindex ISO C94 + @cindex C94 + @cindex ISO C95 + @cindex C95 + @cindex ISO C99 + @cindex C99 + @cindex ISO C9X + @cindex C9X + @cindex Technical Corrigenda + @cindex TC1 + @cindex Technical Corrigendum 1 + @cindex TC2 + @cindex Technical Corrigendum 2 + @cindex AMD1 + @cindex freestanding implementation + @cindex freestanding environment + @cindex hosted implementation + @cindex hosted environment + @findex __STDC_HOSTED__ + + For each language compiled by GCC for which there is a standard, GCC + attempts to follow one or more versions of that standard, possibly + with some exceptions, and possibly with some extensions. + + GCC supports three versions of the C standard, although support for + the most recent version is not yet complete. + + @opindex std + @opindex ansi + @opindex pedantic + @opindex pedantic-errors + The original ANSI C standard (X3.159-1989) was ratified in 1989 and + published in 1990. This standard was ratified as an ISO standard + (ISO/IEC 9899:1990) later in 1990. There were no technical + differences between these publications, although the sections of the + ANSI standard were renumbered and became clauses in the ISO standard. + This standard, in both its forms, is commonly known as @dfn{C89}, or + occasionally as @dfn{C90}, from the dates of ratification. The ANSI + standard, but not the ISO standard, also came with a Rationale + document. To select this standard in GCC, use one of the options + @option{-ansi}, @option{-std=c89} or @option{-std=iso9899:1990}; to obtain + all the diagnostics required by the standard, you should also specify + @option{-pedantic} (or @option{-pedantic-errors} if you want them to be + errors rather than warnings). @xref{C Dialect Options,,Options + Controlling C Dialect}. + + Errors in the 1990 ISO C standard were corrected in two Technical + Corrigenda published in 1994 and 1996. GCC does not support the + uncorrected version. + + An amendment to the 1990 standard was published in 1995. This + amendment added digraphs and @code{__STDC_VERSION__} to the language, + but otherwise concerned the library. This amendment is commonly known + as @dfn{AMD1}; the amended standard is sometimes known as @dfn{C94} or + @dfn{C95}. To select this standard in GCC, use the option + @option{-std=iso9899:199409} (with, as for other standard versions, + @option{-pedantic} to receive all required diagnostics). + + A new edition of the ISO C standard was published in 1999 as ISO/IEC + 9899:1999, and is commonly known as @dfn{C99}. GCC has incomplete + support for this standard version; see + @uref{http://gcc.gnu.org/gcc-3.1/c99status.html} for details. To select this + standard, use @option{-std=c99} or @option{-std=iso9899:1999}. (While in + development, drafts of this standard version were referred to as + @dfn{C9X}.) + + Errors in the 1999 ISO C standard were corrected in a Technical + Corrigendum published in 2001. GCC does not support the uncorrected + version. + + @opindex traditional + GCC also has some limited support for traditional (pre-ISO) C with the + @option{-traditional} option. This support may be of use for compiling + some very old programs that have not been updated to ISO C, but should + not be used for new programs. It will not work with some modern C + libraries such as the GNU C library. + + By default, GCC provides some extensions to the C language that on + rare occasions conflict with the C standard. @xref{C + Extensions,,Extensions to the C Language Family}. Use of the + @option{-std} options listed above will disable these extensions where + they conflict with the C standard version selected. You may also + select an extended version of the C language explicitly with + @option{-std=gnu89} (for C89 with GNU extensions) or @option{-std=gnu99} + (for C99 with GNU extensions). The default, if no C language dialect + options are given, is @option{-std=gnu89}; this will change to + @option{-std=gnu99} in some future release when the C99 support is + complete. Some features that are part of the C99 standard are + accepted as extensions in C89 mode. + + The ISO C standard defines (in clause 4) two classes of conforming + implementation. A @dfn{conforming hosted implementation} supports the + whole standard including all the library facilities; a @dfn{conforming + freestanding implementation} is only required to provide certain + library facilities: those in @code{}, @code{}, + @code{}, and @code{}; since AMD1, also those in + @code{}; and in C99, also those in @code{} and + @code{}. In addition, complex types, added in C99, are not + required for freestanding implementations. The standard also defines + two environments for programs, a @dfn{freestanding environment}, + required of all implementations and which may not have library + facilities beyond those required of freestanding implementations, + where the handling of program startup and termination are + implementation-defined, and a @dfn{hosted environment}, which is not + required, in which all the library facilities are provided and startup + is through a function @code{int main (void)} or @code{int main (int, + char *[])}. An OS kernel would be a freestanding environment; a + program using the facilities of an operating system would normally be + in a hosted implementation. + + @opindex ffreestanding + GCC aims towards being usable as a conforming freestanding + implementation, or as the compiler for a conforming hosted + implementation. By default, it will act as the compiler for a hosted + implementation, defining @code{__STDC_HOSTED__} as @code{1} and + presuming that when the names of ISO C functions are used, they have + the semantics defined in the standard. To make it act as a conforming + freestanding implementation for a freestanding environment, use the + option @option{-ffreestanding}; it will then define + @code{__STDC_HOSTED__} to @code{0} and not make assumptions about the + meanings of function names from the standard library, with exceptions + noted below. To build an OS kernel, you may well still need to make + your own arrangements for linking and startup. + @xref{C Dialect Options,,Options Controlling C Dialect}. + + GCC does not provide the library facilities required only of hosted + implementations, nor yet all the facilities required by C99 of + freestanding implementations; to use the facilities of a hosted + environment, you will need to find them elsewhere (for example, in the + GNU C library). @xref{Standard Libraries,,Standard Libraries}. + + Most of the compiler support routines used by GCC are present in + @file{libgcc}, but there are a few exceptions. GCC requires the + freestanding environment provide @code{memcpy}, @code{memmove}, + @code{memset} and @code{memcmp}. Some older ports of GCC are + configured to use the BSD @code{bcopy}, @code{bzero} and @code{bcmp} + functions instead, but this is deprecated for new ports. + Finally, if @code{__builtin_trap} is used, and the target does + not implement the @code{trap} pattern, then GCC will emit a call + to @code{abort}. + + For references to Technical Corrigenda, Rationale documents and + information concerning the history of C that is available online, see + @uref{http://gcc.gnu.org/readings.html} + + @c FIXME: details of C++ standard. + + There is no formal written standard for Objective-C@. The most + authoritative manual is ``Object-Oriented Programming and the + Objective-C Language'', available at a number of web sites; + @uref{http://developer.apple.com/techpubs/macosx/Cocoa/ObjectiveC/} has a + recent version, while @uref{http://www.toodarkpark.org/computers/objc/} + is an older example. @uref{http://www.gnustep.org} includes useful + information as well. + + @xref{Top, GNAT Reference Manual, About This Guide, gnat_rm, + GNAT Reference Manual}, for information on standard + conformance and compatibility of the Ada compiler. + + @xref{Language,,The GNU Fortran Language, g77, Using and Porting GNU + Fortran}, for details of the Fortran language supported by GCC@. + + @xref{Compatibility,,Compatibility with the Java Platform, gcj, GNU gcj}, + for details of compatibility between @code{gcj} and the Java Platform. diff -Nrc3pad gcc-3.0.4/gcc/doc/tm.texi gcc-3.1/gcc/doc/tm.texi *** gcc-3.0.4/gcc/doc/tm.texi Sat Nov 3 13:26:58 2001 --- gcc-3.1/gcc/doc/tm.texi Fri May 3 13:13:37 2002 *************** *** 1,10 **** ! @c Copyright (C) 1988,1989,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001 @c Free Software Foundation, Inc. @c This is part of the GCC manual. @c For copying conditions, see the file gcc.texi. @node Target Macros ! @chapter Target Description Macros @cindex machine description macros @cindex target description macros @cindex macros, target description --- 1,10 ---- ! @c Copyright (C) 1988,1989,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002 @c Free Software Foundation, Inc. @c This is part of the GCC manual. @c For copying conditions, see the file gcc.texi. @node Target Macros ! @chapter Target Description Macros and Functions @cindex machine description macros @cindex target description macros @cindex macros, target description *************** *** 12,30 **** In addition to the file @file{@var{machine}.md}, a machine description includes a C header file conventionally given the name ! @file{@var{machine}.h}. This header file defines numerous macros ! that convey the information about the target machine that does not fit ! into the scheme of the @file{.md} file. The file @file{tm.h} should be ! a link to @file{@var{machine}.h}. The header file @file{config.h} ! includes @file{tm.h} and most compiler source files include ! @file{config.h}. @menu * Driver:: Controlling how the driver runs the compilation passes. * Run-time Target:: Defining @samp{-m} options like @option{-m68000} and @option{-m68020}. * Per-Function Data:: Defining data structures for per-function information. * Storage Layout:: Defining sizes and alignments of data. * Type Layout:: Defining sizes and properties of basic user data types. * Registers:: Naming and describing the hardware registers. * Register Classes:: Defining the classes of hardware registers. * Stack and Calling:: Defining which way the stack grows and by how much. --- 12,37 ---- In addition to the file @file{@var{machine}.md}, a machine description includes a C header file conventionally given the name ! @file{@var{machine}.h} and a C source file named @file{@var{machine}.c}. ! The header file defines numerous macros that convey the information ! about the target machine that does not fit into the scheme of the ! @file{.md} file. The file @file{tm.h} should be a link to ! @file{@var{machine}.h}. The header file @file{config.h} includes ! @file{tm.h} and most compiler source files include @file{config.h}. The ! source file defines a variable @code{targetm}, which is a structure ! containing pointers to functions and data relating to the target ! machine. @file{@var{machine}.c} should also contain their definitions, ! if they are not defined elsewhere in GCC, and other functions called ! through the macros defined in the @file{.h} file. @menu + * Target Structure:: The @code{targetm} variable. * Driver:: Controlling how the driver runs the compilation passes. * Run-time Target:: Defining @samp{-m} options like @option{-m68000} and @option{-m68020}. * Per-Function Data:: Defining data structures for per-function information. * Storage Layout:: Defining sizes and alignments of data. * Type Layout:: Defining sizes and properties of basic user data types. + * Escape Sequences:: Defining the value of target character escape sequences * Registers:: Naming and describing the hardware registers. * Register Classes:: Defining the classes of hardware registers. * Stack and Calling:: Defining which way the stack grows and by how much. *************** includes @file{tm.h} and most compiler s *** 34,48 **** --- 41,89 ---- * Addressing Modes:: Defining addressing modes valid for memory operands. * Condition Code:: Defining how insns update the condition code. * Costs:: Defining relative costs of different operations. + * Scheduling:: Adjusting the behavior of the instruction scheduler. * Sections:: Dividing storage into text, data, and other sections. * PIC:: Macros for position independent code. * Assembler Format:: Defining how to write insns and pseudo-ops to output. * Debugging Info:: Defining the format of debugging output. * Cross-compilation:: Handling floating point for cross-compilers. * Mode Switching:: Insertion of mode-switching instructions. + * Target Attributes:: Defining target-specific uses of @code{__attribute__}. * Misc:: Everything else. @end menu + @node Target Structure + @section The Global @code{targetm} Variable + @cindex target hooks + @cindex target functions + + @deftypevar {struct gcc_target} targetm + The target @file{.c} file must define the global @code{targetm} variable + which contains pointers to functions and data relating to the target + machine. The variable is declared in @file{target.h}; + @file{target-def.h} defines the macro @code{TARGET_INITIALIZER} which is + used to initialize the variable, and macros for the default initializers + for elements of the structure. The @file{.c} file should override those + macros for which the default definition is inappropriate. For example: + @smallexample + #include "target.h" + #include "target-def.h" + + /* @r{Initialize the GCC target structure.} */ + + #undef TARGET_COMP_TYPE_ATTRIBUTES + #define TARGET_COMP_TYPE_ATTRIBUTES @var{machine}_comp_type_attributes + + struct gcc_target targetm = TARGET_INITIALIZER; + @end smallexample + @end deftypevar + + Where a macro should be defined in the @file{.c} file in this manner to + form part of the @code{targetm} structure, it is documented below as a + ``Target Hook'' with a prototype. Many macros will change in future + from being defined in the @file{.h} file to being part of the + @code{targetm} structure. + @node Driver @section Controlling the Compilation Driver, @file{gcc} @cindex driver *************** the linker needs a space between the opt *** 101,106 **** --- 142,167 ---- If this macro is not defined, the default value is @code{""}. + @findex TARGET_OPTION_TRANSLATE_TABLE + @item TARGET_OPTION_TRANSLATE_TABLE + If defined, a list of pairs of strings, the first of which is a + potential command line target to the @file{gcc} driver program, and the + second of which is a space-separated (tabs and other whitespace are not + supported) list of options with which to replace the first option. The + target defining this list is responsible for assuring that the results + are valid. Replacement options may not be the @code{--opt} style, they + must be the @code{-opt} style. It is the intention of this macro to + provide a mechanism for substitution that affects the multilibs chosen, + such as one option that enables many options, some of which select + multilibs. Example nonsensical definition, where @code{-malt-abi}, + @code{-EB}, and @code{-mspoo} cause different multilibs to be chosen: + + @example + #define TARGET_OPTION_TRANSLATE_TABLE \ + @{ "-fast", "-march=fast-foo -malt-abi -I/usr/fast-foo" @}, \ + @{ "-compat", "-EB -malign=4 -mspoo" @} + @end example + @findex CPP_SPEC @item CPP_SPEC A C string constant that tells the GCC driver program options to *************** This should be defined if @code{WINT_TYP *** 155,170 **** which are not accessible to the preprocessor. Otherwise, it should not be defined. - @findex SIGNED_CHAR_SPEC - @item SIGNED_CHAR_SPEC - A C string constant that tells the GCC driver program options to - pass to CPP@. By default, this macro is defined to pass the option - @option{-D__CHAR_UNSIGNED__} to CPP if @code{char} will be treated as - @code{unsigned char} by @code{cc1}. - - Do not define this macro unless you need to override the default - definition. - @findex CC1_SPEC @item CC1_SPEC A C string constant that tells the GCC driver program options to --- 216,221 ---- *************** the argument @option{-lgcc} to tell the *** 326,331 **** --- 377,387 ---- This macro is similar to @code{LINK_LIBGCC_SPECIAL}, except that it does not affect @option{-L} options. + @findex LINK_GCC_C_SEQUENCE_SPEC + @item LINK_GCC_C_SEQUENCE_SPEC + The sequence in which libgcc and libc are specified to the linker. + By default this is @code{%G %L %G}. + @findex LINK_COMMAND_SPEC @item LINK_COMMAND_SPEC A C string constant giving the complete command line need to execute the *************** linker. When you do this, you will need *** 333,343 **** change is made to the link command line within @file{gcc.c}. Therefore, define this macro only if you need to completely redefine the command line for invoking the linker and there is no other way to accomplish ! the effect you need. @findex LINK_ELIMINATE_DUPLICATE_LDIRECTORIES @item LINK_ELIMINATE_DUPLICATE_LDIRECTORIES ! A nonzero value causes collect2 to remove duplicate @option{-L@var{directory}} search directories from linking commands. Do not give it a nonzero value if removing duplicate search directories changes the linker's semantics. --- 389,400 ---- change is made to the link command line within @file{gcc.c}. Therefore, define this macro only if you need to completely redefine the command line for invoking the linker and there is no other way to accomplish ! the effect you need. Overriding this macro may be avoidable by overriding ! @code{LINK_GCC_C_SEQUENCE_SPEC} instead. @findex LINK_ELIMINATE_DUPLICATE_LDIRECTORIES @item LINK_ELIMINATE_DUPLICATE_LDIRECTORIES ! A nonzero value causes @command{collect2} to remove duplicate @option{-L@var{directory}} search directories from linking commands. Do not give it a nonzero value if removing duplicate search directories changes the linker's semantics. *************** standard choice of @file{/usr/local/incl *** 406,413 **** try when searching for local header files. @code{LOCAL_INCLUDE_DIR} comes before @code{SYSTEM_INCLUDE_DIR} in the search order. ! Cross compilers do not use this macro and do not search either ! @file{/usr/local/include} or its replacement. @findex MODIFY_TARGET_NAME @item MODIFY_TARGET_NAME --- 463,470 ---- try when searching for local header files. @code{LOCAL_INCLUDE_DIR} comes before @code{SYSTEM_INCLUDE_DIR} in the search order. ! Cross compilers do not search either @file{/usr/local/include} or its ! replacement. @findex MODIFY_TARGET_NAME @item MODIFY_TARGET_NAME *************** string is present but empty, then no hel *** 636,642 **** for that option, but it will not count as an undocumented option. The actual option name is made by appending @samp{-m} to the specified name. Non-empty description strings should be marked with @code{N_(@dots{})} for ! @command{xgettext}. In addition to the description for @option{--help}, more detailed documentation for each option should be added to @file{invoke.texi}. --- 693,703 ---- for that option, but it will not count as an undocumented option. The actual option name is made by appending @samp{-m} to the specified name. Non-empty description strings should be marked with @code{N_(@dots{})} for ! @command{xgettext}. Please do not mark empty strings because the empty ! string is reserved by GNU gettext. @code{gettext("")} returns the header entry ! of the message catalog with meta information, not the empty string. ! ! In addition to the description for @option{--help}, more detailed documentation for each option should be added to @file{invoke.texi}. *************** options that have values. Its definitio *** 662,669 **** subgrouping for each command option. Each subgrouping contains a string constant, that defines the fixed part ! of the option name, the address of a variable, and a description string ! (which should again be marked with @code{N_(@dots{})}). The variable, type @code{char *}, is set to the variable part of the given option if the fixed part matches. The actual option name is made by appending @samp{-m} to the specified name. Again, each option should --- 723,734 ---- subgrouping for each command option. Each subgrouping contains a string constant, that defines the fixed part ! of the option name, the address of a variable, and a description string. ! Non-empty description strings should be marked with @code{N_(@dots{})} for ! @command{xgettext}. Please do not mark empty strings because the empty ! string is reserved by GNU gettext. @code{gettext("")} returns the header entry ! of the message catalog with meta information, not the empty string. ! The variable, type @code{char *}, is set to the variable part of the given option if the fixed part matches. The actual option name is made by appending @samp{-m} to the specified name. Again, each option should *************** to their own specific data. *** 755,761 **** If a target needs per-function specific data it should define the type @code{struct machine_function} and also the macro ! @code{INIT_EXPANDERS}. This macro should be used to initialise some or all of the function pointers @code{init_machine_status}, @code{free_machine_status} and @code{mark_machine_status}. These pointers are explained below. --- 820,826 ---- If a target needs per-function specific data it should define the type @code{struct machine_function} and also the macro ! @code{INIT_EXPANDERS}. This macro should be used to initialize some or all of the function pointers @code{init_machine_status}, @code{free_machine_status} and @code{mark_machine_status}. These pointers are explained below. *************** The macro and function pointers are desc *** 780,788 **** @table @code @findex INIT_EXPANDERS @item INIT_EXPANDERS ! Macro called to initialise any target specific information. This macro is called once per function, before generation of any RTL has begun. ! The intention of this macro is to allow the initialisation of the function pointers below. @findex init_machine_status --- 845,853 ---- @table @code @findex INIT_EXPANDERS @item INIT_EXPANDERS ! Macro called to initialize any target specific information. This macro is called once per function, before generation of any RTL has begun. ! The intention of this macro is to allow the initialization of the function pointers below. @findex init_machine_status *************** function pointers below. *** 790,797 **** This is a @code{void (*)(struct function *)} function pointer. If this pointer is non-@code{NULL} it will be called once per function, before function compilation starts, in order to allow the target to perform any target ! specific initialisation of the @code{struct function} structure. It is ! intended that this would be used to initialise the @code{machine} of that structure. @findex free_machine_status --- 855,862 ---- This is a @code{void (*)(struct function *)} function pointer. If this pointer is non-@code{NULL} it will be called once per function, before function compilation starts, in order to allow the target to perform any target ! specific initialization of the @code{struct function} structure. It is ! intended that this would be used to initialize the @code{machine} of that structure. @findex free_machine_status *************** you must define @code{POINTERS_EXTEND_UN *** 895,903 **** @findex POINTERS_EXTEND_UNSIGNED @item POINTERS_EXTEND_UNSIGNED ! A C expression whose value is nonzero if pointers that need to be extended from being @code{POINTER_SIZE} bits wide to @code{Pmode} are to ! be zero-extended and zero if they are to be sign-extended. You need not define this macro if the @code{POINTER_SIZE} is equal to the width of @code{Pmode}. --- 960,970 ---- @findex POINTERS_EXTEND_UNSIGNED @item POINTERS_EXTEND_UNSIGNED ! A C expression whose value is greater than zero if pointers that need to be extended from being @code{POINTER_SIZE} bits wide to @code{Pmode} are to ! be zero-extended and zero if they are to be sign-extended. If the value ! is less then zero then there must be an "ptr_extend" instruction that ! extends a pointer from @code{POINTER_SIZE} to @code{Pmode}. You need not define this macro if the @code{POINTER_SIZE} is equal to the width of @code{Pmode}. *************** size of an integer. *** 954,971 **** @findex STACK_BOUNDARY @item STACK_BOUNDARY ! Define this macro if there is a guaranteed alignment for the stack ! pointer on this machine. The definition is a C expression ! for the desired alignment (measured in bits). This value is used as a ! default if @code{PREFERRED_STACK_BOUNDARY} is not defined. @findex PREFERRED_STACK_BOUNDARY @item PREFERRED_STACK_BOUNDARY ! Define this macro if you wish to preserve a certain alignment for ! the stack pointer. The definition is a C expression ! for the desired alignment (measured in bits). If @code{STACK_BOUNDARY} is ! also defined, this macro must evaluate to a value equal to or larger ! than @code{STACK_BOUNDARY}. @findex FORCE_PREFERRED_STACK_BOUNDARY_IN_MAIN @item FORCE_PREFERRED_STACK_BOUNDARY_IN_MAIN --- 1021,1039 ---- @findex STACK_BOUNDARY @item STACK_BOUNDARY ! Define this macro to the minimum alignment enforced by hardware for the ! stack pointer on this machine. The definition is a C expression for the ! desired alignment (measured in bits). This value is used as a default ! if @code{PREFERRED_STACK_BOUNDARY} is not defined. On most machines, ! this should be the same as @code{PARM_BOUNDARY}. @findex PREFERRED_STACK_BOUNDARY @item PREFERRED_STACK_BOUNDARY ! Define this macro if you wish to preserve a certain alignment for the ! stack pointer, greater than what the hardware enforces. The definition ! is a C expression for the desired alignment (measured in bits). This ! macro must evaluate to a value equal to or larger than ! @code{STACK_BOUNDARY}. @findex FORCE_PREFERRED_STACK_BOUNDARY_IN_MAIN @item FORCE_PREFERRED_STACK_BOUNDARY_IN_MAIN *************** by the @code{__attribute__ ((aligned (@v *** 1006,1012 **** An expression for the alignment of a structure field @var{field} if the alignment computed in the usual way is @var{computed}. GCC uses this value instead of the value in @code{BIGGEST_ALIGNMENT} or ! @code{BIGGEST_FIELD_ALIGNMENT}, if defined, for structure fields only. @findex MAX_OFILE_ALIGNMENT @item MAX_OFILE_ALIGNMENT --- 1074,1080 ---- An expression for the alignment of a structure field @var{field} if the alignment computed in the usual way is @var{computed}. GCC uses this value instead of the value in @code{BIGGEST_ALIGNMENT} or ! @code{BIGGEST_FIELD_ALIGNMENT}, if defined. @findex MAX_OFILE_ALIGNMENT @item MAX_OFILE_ALIGNMENT *************** get from @code{PCC_BITFIELD_TYPE_MATTERS *** 1145,1156 **** @findex BITFIELD_NBYTES_LIMITED @item BITFIELD_NBYTES_LIMITED ! Like PCC_BITFIELD_TYPE_MATTERS except that its effect is limited to ! aligning a bit-field within the structure. ! @findex STRUCT_FORCE_BLK ! @item STRUCT_FORCE_BLK (@var{field}) ! Return 1 if a structure containing @var{field} should be accessed using @code{BLKMODE}. Normally, this is not needed. See the file @file{c4x.h} for an example --- 1213,1224 ---- @findex BITFIELD_NBYTES_LIMITED @item BITFIELD_NBYTES_LIMITED ! Like @code{PCC_BITFIELD_TYPE_MATTERS} except that its effect is limited ! to aligning a bit-field within the structure. ! @findex MEMBER_TYPE_FORCES_BLK ! @item MEMBER_TYPE_FORCES_BLK (@var{field}) ! Return 1 if a structure or array containing @var{field} should be accessed using @code{BLKMODE}. Normally, this is not needed. See the file @file{c4x.h} for an example *************** need to define this macro when the forma *** 1249,1255 **** @findex VAX_FLOAT_FORMAT @item VAX_FLOAT_FORMAT ! This code indicates the peculiar format used on the Vax. @findex IBM_FLOAT_FORMAT @item IBM_FLOAT_FORMAT --- 1317,1323 ---- @findex VAX_FLOAT_FORMAT @item VAX_FLOAT_FORMAT ! This code indicates the ``D float'' format used on the VAX@. @findex IBM_FLOAT_FORMAT @item IBM_FLOAT_FORMAT *************** This code indicates the format used on t *** 1264,1293 **** This code indicates any other format. @end table ! The value of this macro is compared with @code{HOST_FLOAT_FORMAT} ! (@pxref{Config}) to determine whether the target machine has the same ! format as the host machine. If any other formats are actually in use on ! supported machines, new codes should be defined for them. The ordering of the component words of floating point values stored in ! memory is controlled by @code{FLOAT_WORDS_BIG_ENDIAN} for the target ! machine and @code{HOST_FLOAT_WORDS_BIG_ENDIAN} for the host. ! ! @findex DEFAULT_VTABLE_THUNKS ! @item DEFAULT_VTABLE_THUNKS ! GCC supports two ways of implementing C++ vtables: traditional or with ! so-called ``thunks''. The flag @option{-fvtable-thunk} chooses between them. ! Define this macro to be a C expression for the default value of that flag. ! If @code{DEFAULT_VTABLE_THUNKS} is 0, GCC uses the traditional ! implementation by default. The ``thunk'' implementation is more efficient ! (especially if you have provided an implementation of ! @code{ASM_OUTPUT_MI_THUNK}, see @ref{Function Entry}), but is not binary ! compatible with code compiled using the traditional implementation. ! If you are writing a new port, define @code{DEFAULT_VTABLE_THUNKS} to 1. - If you do not define this macro, the default for @option{-fvtable-thunk} is 0. @end table @node Type Layout @section Layout of Source Language Data Types --- 1332,1362 ---- This code indicates any other format. @end table ! The value of this macro is compared with @code{HOST_FLOAT_FORMAT}, which ! is defined by the @command{configure} script, to determine whether the ! target machine has the same format as the host machine. If any other ! formats are actually in use on supported machines, new codes should be ! defined for them. The ordering of the component words of floating point values stored in ! memory is controlled by @code{FLOAT_WORDS_BIG_ENDIAN}. @end table + @deftypefn {Target Hook} bool TARGET_MS_BITFIELD_LAYOUT_P (tree @var{record_type}) + This target hook returns @code{true} if bit-fields in the given + @var{record_type} are to be laid out following the rules of Microsoft + Visual C/C++, namely: (i) a bit-field won't share the same storage + unit with the previous bit-field if their underlying types have + different sizes, and the bit-field will be aligned to the highest + alignment of the underlying types of itself and of the previous + bit-field; (ii) a zero-sized bit-field will affect the alignment of + the whole enclosing structure, even if it is unnamed; except that + (iii) a zero-sized bit-field will be disregarded unless it follows + another bit-field of non-zero size. If this hook returns @code{true}, + other macros that control bit-field layout are ignored. + @end deftypefn + @node Type Layout @section Layout of Source Language Data Types *************** languages, rather than to fundamental as *** 1302,1314 **** A C expression for the size in bits of the type @code{int} on the target machine. If you don't define this, the default is one word. - @findex MAX_INT_TYPE_SIZE - @item MAX_INT_TYPE_SIZE - Maximum number for the size in bits of the type @code{int} on the target - machine. If this is undefined, the default is @code{INT_TYPE_SIZE}. - Otherwise, it is the constant value that is the largest value that - @code{INT_TYPE_SIZE} can have at run-time. This is used in @code{cpp}. - @findex SHORT_TYPE_SIZE @item SHORT_TYPE_SIZE A C expression for the size in bits of the type @code{short} on the --- 1371,1376 ---- *************** unit.) *** 1321,1326 **** --- 1383,1396 ---- A C expression for the size in bits of the type @code{long} on the target machine. If you don't define this, the default is one word. + @findex ADA_LONG_TYPE_SIZE + @item ADA_LONG_TYPE_SIZE + On some machines, the size used for the Ada equivalent of the type + @code{long} by a native Ada compiler differs from that used by C. In + that situation, define this macro to be a C expression to be used for + the size of that type. If you don't define this, the default is the + value of @code{LONG_TYPE_SIZE}. + @findex MAX_LONG_TYPE_SIZE @item MAX_LONG_TYPE_SIZE Maximum number for the size in bits of the type @code{long} on the *************** used in @code{cpp}. *** 1352,1360 **** @findex BOOL_TYPE_SIZE @item BOOL_TYPE_SIZE ! A C expression for the size in bits of the C++ type @code{bool} on the ! target machine. If you don't define this, the default is ! @code{CHAR_TYPE_SIZE}. @findex FLOAT_TYPE_SIZE @item FLOAT_TYPE_SIZE --- 1422,1430 ---- @findex BOOL_TYPE_SIZE @item BOOL_TYPE_SIZE ! A C expression for the size in bits of the C++ type @code{bool} and ! C99 type @code{_Bool} on the target machine. If you don't define ! this, and you probably shouldn't, the default is @code{CHAR_TYPE_SIZE}. @findex FLOAT_TYPE_SIZE @item FLOAT_TYPE_SIZE *************** A C expression for the size in bits of t *** 1373,1378 **** --- 1443,1459 ---- the target machine. If you don't define this, the default is two words. + @findex MAX_LONG_DOUBLE_TYPE_SIZE + Maximum number for the size in bits of the type @code{long double} on the + target machine. If this is undefined, the default is + @code{LONG_DOUBLE_TYPE_SIZE}. Otherwise, it is the constant value that is + the largest value that @code{LONG_DOUBLE_TYPE_SIZE} can have at run-time. + This is used in @code{cpp}. + + @findex INTEL_EXTENDED_IEEE_FORMAT + Define this macro to be 1 if the target machine uses 80-bit floating-point + values with 128-bit size and alignment. This is used in @file{real.c}. + @findex WIDEST_HARDWARE_FP_SIZE @item WIDEST_HARDWARE_FP_SIZE A C expression for the size in bits of the widest floating-point format *************** characters. If this is undefined, the d *** 1446,1451 **** --- 1527,1540 ---- largest value that @code{WCHAR_TYPE_SIZE} can have at run-time. This is used in @code{cpp}. + @findex GCOV_TYPE_SIZE + @item GCOV_TYPE_SIZE + A C expression for the size in bits of the type used for gcov counters on the + target machine. If you don't define this, the default is one + @code{LONG_TYPE_SIZE} in case it is greater or equal to 64-bit and + @code{LONG_LONG_TYPE_SIZE} otherwise. You may want to re-define the type to + ensure atomicity for counters in multithreaded programs. + @findex WINT_TYPE @item WINT_TYPE A C expression for a string describing the name of the data type to *************** If you don't define this macro, the defa *** 1479,1502 **** unsigned int"} that has as much precision as @code{long long unsigned int}. - @findex OBJC_INT_SELECTORS - @item OBJC_INT_SELECTORS - Define this macro if the type of Objective C selectors should be - @code{int}. - - If this macro is not defined, then selectors should have the type - @code{struct objc_selector *}. - - @findex OBJC_SELECTORS_WITHOUT_LABELS - @item OBJC_SELECTORS_WITHOUT_LABELS - Define this macro if the compiler can group all the selectors together - into a vector and use just one label at the beginning of the vector. - Otherwise, the compiler must give each selector its own assembler - label. - - On certain machines, it is important to have a separate label for each - selector because this enables the linker to eliminate duplicate selectors. - @findex TARGET_PTRMEMFUNC_VBIT_LOCATION @item TARGET_PTRMEMFUNC_VBIT_LOCATION The C++ compiler represents a pointer-to-member-function with a struct --- 1568,1573 ---- *************** in which function addresses are always e *** 1536,1546 **** --- 1607,1645 ---- @code{FUNCTION_BOUNDARY}, GCC will automatically define this macro to @code{ptrmemfunc_vbit_in_pfn}. + @findex TARGET_VTABLE_USES_DESCRIPTORS + @item TARGET_VTABLE_USES_DESCRIPTORS + Normally, the C++ compiler uses function pointers in vtables. This + macro allows the target to change to use ``function descriptors'' + instead. Function descriptors are found on targets for whom a + function pointer is actually a small data structure. Normally the + data structure consists of the actual code address plus a data + pointer to which the function's data is relative. + + If vtables are used, the value of this macro should be the number + of words that the function descriptor occupies. + @end table + + @node Escape Sequences + @section Target Character Escape Sequences + @cindex escape sequences + + By default, GCC assumes that the C character escape sequences take on + their ASCII values for the target. If this is not correct, you must + explicitly define all of the macros below. + + @table @code @findex TARGET_BELL @item TARGET_BELL A C constant expression for the integer value for escape sequence @samp{\a}. + @findex TARGET_ESC + @item TARGET_ESC + A C constant expression for the integer value of the target escape + character. As an extension, GCC evaluates the escape sequences + @samp{\e} and @samp{\E} to this. + @findex TARGET_TAB @findex TARGET_BS @findex TARGET_NEWLINE *************** If a register has 0 in @code{CALL_USED_R *** 1631,1636 **** --- 1730,1746 ---- automatically saves it on function entry and restores it on function exit, if the register is used within the function. + @findex CALL_REALLY_USED_REGISTERS + @item CALL_REALLY_USED_REGISTERS + @cindex call-used register + @cindex call-clobbered register + @cindex call-saved register + Like @code{CALL_USED_REGISTERS} except this macro doesn't require + that the entire set of @code{FIXED_REGISTERS} be included. + (@code{CALL_USED_REGISTERS} must be a superset of @code{FIXED_REGISTERS}). + This macro is optional. If not specified, it defaults to the value + of @code{CALL_USED_REGISTERS}. + @findex HARD_REGNO_CALL_PART_CLOBBERED @item HARD_REGNO_CALL_PART_CLOBBERED (@var{regno}, @var{mode}) @cindex call-used register *************** preserve the entire contents of a regist *** 1648,1666 **** @item CONDITIONAL_REGISTER_USAGE Zero or more C statements that may conditionally modify five variables @code{fixed_regs}, @code{call_used_regs}, @code{global_regs}, ! (these three are of type @code{char []}), @code{reg_names} (of type ! @code{const char * []}) and @code{reg_class_contents} (of type ! @code{HARD_REG_SET}). ! Before the macro is called @code{fixed_regs}, @code{call_used_regs} ! @code{reg_class_contents} and @code{reg_names} have been initialized from @code{FIXED_REGISTERS}, @code{CALL_USED_REGISTERS}, ! @code{REG_CLASS_CONTENTS} and @code{REGISTER_NAMES}, respectively, @code{global_regs} has been cleared, and any @option{-ffixed-@var{reg}}, ! @option{-fcall-used-@var{reg}} and @option{-fcall-saved-@var{reg}} command ! options have been applied. ! ! This is necessary in case the fixed or call-clobbered registers depend ! on target flags. You need not define this macro if it has no work to do. --- 1758,1775 ---- @item CONDITIONAL_REGISTER_USAGE Zero or more C statements that may conditionally modify five variables @code{fixed_regs}, @code{call_used_regs}, @code{global_regs}, ! @code{reg_names}, and @code{reg_class_contents}, to take into account ! any dependence of these register sets on target flags. The first three ! of these are of type @code{char []} (interpreted as Boolean vectors). ! @code{global_regs} is a @code{const char *[]}, and ! @code{reg_class_contents} is a @code{HARD_REG_SET}. Before the macro is ! called, @code{fixed_regs}, @code{call_used_regs}, ! @code{reg_class_contents}, and @code{reg_names} have been initialized from @code{FIXED_REGISTERS}, @code{CALL_USED_REGISTERS}, ! @code{REG_CLASS_CONTENTS}, and @code{REGISTER_NAMES}, respectively. @code{global_regs} has been cleared, and any @option{-ffixed-@var{reg}}, ! @option{-fcall-used-@var{reg}} and @option{-fcall-saved-@var{reg}} ! command options have been applied. You need not define this macro if it has no work to do. *************** definition of this macro is *** 1780,1796 **** / UNITS_PER_WORD) @end smallexample - @findex ALTER_HARD_SUBREG - @item ALTER_HARD_SUBREG (@var{tgt_mode}, @var{word}, @var{src_mode}, @var{regno}) - A C expression that returns an adjusted hard register number for - - @smallexample - (subreg:@var{tgt_mode} (reg:@var{src_mode} @var{regno}) @var{word}) - @end smallexample - - This may be needed if the target machine has mixed sized big-endian - registers, like Sparc v9. - @findex HARD_REGNO_MODE_OK @item HARD_REGNO_MODE_OK (@var{regno}, @var{mode}) A C expression that is nonzero if it is permissible to store a value --- 1889,1894 ---- *************** this. *** 1930,1942 **** @findex current_function_is_leaf @findex current_function_uses_only_leaf_regs ! Normally, @code{FUNCTION_PROLOGUE} and @code{FUNCTION_EPILOGUE} must ! treat leaf functions specially. They can test the C variable ! @code{current_function_is_leaf} which is nonzero for leaf functions. ! @code{current_function_is_leaf} is set prior to local register allocation ! and is valid for the remaining compiler passes. They can also test the C ! variable @code{current_function_uses_only_leaf_regs} which is nonzero for ! leaf functions which only use leaf registers. @code{current_function_uses_only_leaf_regs} is valid after reload and is only useful if @code{LEAF_REGISTERS} is defined. @c changed this to fix overfull. ALSO: why the "it" at the beginning --- 2028,2041 ---- @findex current_function_is_leaf @findex current_function_uses_only_leaf_regs ! @code{TARGET_ASM_FUNCTION_PROLOGUE} and ! @code{TARGET_ASM_FUNCTION_EPILOGUE} must usually treat leaf functions ! specially. They can test the C variable @code{current_function_is_leaf} ! which is nonzero for leaf functions. @code{current_function_is_leaf} is ! set prior to local register allocation and is valid for the remaining ! compiler passes. They can also test the C variable ! @code{current_function_uses_only_leaf_regs} which is nonzero for leaf ! functions which only use leaf registers. @code{current_function_uses_only_leaf_regs} is valid after reload and is only useful if @code{LEAF_REGISTERS} is defined. @c changed this to fix overfull. ALSO: why the "it" at the beginning *************** A macro whose definition is the name of *** 2086,2091 **** --- 2185,2197 ---- base register must belong. A base register is one used in an address which is the register value plus a displacement. + @findex MODE_BASE_REG_CLASS + @item MODE_BASE_REG_CLASS (@var{mode}) + This is a variation of the @code{BASE_REG_CLASS} macro which allows + the selection of a base register in a mode depenedent manner. If + @var{mode} is VOIDmode then it should return the same value as + @code{BASE_REG_CLASS}. + @findex INDEX_REG_CLASS @item INDEX_REG_CLASS A macro whose definition is the name of the class to which a valid *************** These macros should not be used in the c *** 2240,2246 **** registers can only be copied to memory and not to another class of registers. In that case, secondary reload registers are not needed and would not be helpful. Instead, a stack location must be used to perform ! the copy and the @code{mov@var{m}} pattern should use memory as a intermediate storage. This case often occurs between floating-point and general registers. --- 2346,2352 ---- registers can only be copied to memory and not to another class of registers. In that case, secondary reload registers are not needed and would not be helpful. Instead, a stack location must be used to perform ! the copy and the @code{mov@var{m}} pattern should use memory as an intermediate storage. This case often occurs between floating-point and general registers. *************** This describes the stack layout and call *** 2421,2426 **** --- 2527,2533 ---- @menu * Frame Layout:: + * Exception Handling:: * Stack Checking:: * Frame Registers:: * Elimination:: *************** This describes the stack layout and call *** 2431,2438 **** * Caller Saves:: * Function Entry:: * Profiling:: ! * Inlining:: ! * Tail Calling:: @end menu @node Frame Layout --- 2538,2544 ---- * Caller Saves:: * Function Entry:: * Profiling:: ! * Tail Calls:: @end menu @node Frame Layout *************** When we say, ``define this macro if @dot *** 2453,2458 **** --- 2559,2581 ---- compiler checks this macro only with @code{#ifdef} so the precise definition used does not matter. + @findex STACK_PUSH_CODE + @item STACK_PUSH_CODE + + This macro defines the operation used when something is pushed + on the stack. In RTL, a push operation will be + @code{(set (mem (STACK_PUSH_CODE (reg sp))) ...)} + + The choices are @code{PRE_DEC}, @code{POST_DEC}, @code{PRE_INC}, + and @code{POST_INC}. Which of these is correct depends on + the stack direction and on whether the stack pointer points + to the last item on the stack or whether it points to the + space for the next item on the stack. + + The default is @code{PRE_DEC} when @code{STACK_GROWS_DOWNWARD} is + defined, which is almost always right, and @code{PRE_INC} otherwise, + which is often wrong. + @findex FRAME_GROWS_DOWNWARD @item FRAME_GROWS_DOWNWARD Define this macro if the addresses of local variable slots are at negative *************** You only need to define this macro if th *** 2588,2593 **** --- 2711,2728 ---- want to support call frame debugging information like that provided by DWARF 2. + @findex SMALL_STACK + @item SMALL_STACK + Define this macro if the stack size for the target is very small. This + has the effect of disabling gcc's built-in @samp{alloca}, though + @samp{__builtin_alloca} is not affected. + @end table + + @node Exception Handling + @subsection Exception Handling Support + @cindex exception handling + + @table @code @findex EH_RETURN_DATA_REGNO @item EH_RETURN_DATA_REGNO (@var{N}) A C expression whose value is the @var{N}th register number used for *************** handled. @var{encoding} is the format c *** 2663,2673 **** of bytes that the format occupies, @var{addr} is the @code{SYMBOL_REF} to be emitted. ! @findex SMALL_STACK ! @item SMALL_STACK ! Define this macro if the stack size for the target is very small. This ! has the effect of disabling gcc's built-in @samp{alloca}, though ! @samp{__builtin_alloca} is not affected. @end table @node Stack Checking --- 2798,2818 ---- of bytes that the format occupies, @var{addr} is the @code{SYMBOL_REF} to be emitted. ! @findex MD_FALLBACK_FRAME_STATE_FOR ! @item MD_FALLBACK_FRAME_STATE_FOR(@var{context}, @var{fs}, @var{success}) ! This macro allows the target to add cpu and operating system specific ! code to the call-frame unwinder for use when there is no unwind data ! available. The most common reason to implement this macro is to unwind ! through signal frames. ! ! This macro is called from @code{uw_frame_state_for} in @file{unwind-dw2.c} ! and @file{unwind-ia64.c}. @var{context} is an @code{_Unwind_Context}; ! @var{fs} is an @code{_Unwind_FrameState}. Examine @code{context->ra} ! for the address of the code being executed and @code{context->cfa} for ! the stack pointer value. If the frame can be decoded, the register save ! addresses should be updated in @var{fs} and the macro should branch to ! @var{success}. If the frame cannot be decoded, the macro should do ! nothing. @end table @node Stack Checking *************** the stack, if the @option{-fstack-check} *** 2681,2687 **** If the value of the @code{STACK_CHECK_BUILTIN} macro is nonzero, GCC will assume that you have arranged for stack checking to be done at appropriate places in the configuration files, e.g., in ! @code{FUNCTION_PROLOGUE}. GCC will do not other special processing. @item If @code{STACK_CHECK_BUILTIN} is zero and you defined a named pattern --- 2826,2833 ---- If the value of the @code{STACK_CHECK_BUILTIN} macro is nonzero, GCC will assume that you have arranged for stack checking to be done at appropriate places in the configuration files, e.g., in ! @code{TARGET_ASM_FUNCTION_PROLOGUE}. GCC will do not other special ! processing. @item If @code{STACK_CHECK_BUILTIN} is zero and you defined a named pattern *************** macros and should be used to refer to th *** 2854,2859 **** --- 3000,3032 ---- If the static chain is passed in a register, the two previous macros should be defined instead. + + @findex DWARF_FRAME_REGISTERS + @item DWARF_FRAME_REGISTERS + This macro specifies the maximum number of hard registers that can be + saved in a call frame. This is used to size data structures used in + DWARF2 exception handling. + + Prior to GCC 3.0, this macro was needed in order to establish a stable + exception handling ABI in the face of adding new hard registers for ISA + extensions. In GCC 3.0 and later, the EH ABI is insulated from changes + in the number of hard registers. Nevertheless, this macro can still be + used to reduce the runtime memory requirements of the exception handling + routines, which can be substantial if the ISA contains a lot of + registers that are not call-saved. + + If this macro is not defined, it defaults to + @code{FIRST_PSEUDO_REGISTER}. + + @findex PRE_GCC3_DWARF_FRAME_REGISTERS + @item PRE_GCC3_DWARF_FRAME_REGISTERS + + This macro is similar to @code{DWARF_FRAME_REGISTERS}, but is provided + for backward compatibility in pre GCC 3.0 compiled code. + + If this macro is not defined, it defaults to + @code{DWARF_FRAME_REGISTERS}. + @end table @node Elimination *************** This macro is similar to @code{INITIAL_F *** 2941,2953 **** specifies the initial difference between the specified pair of registers. This macro must be defined if @code{ELIMINABLE_REGS} is defined. - - @findex LONGJMP_RESTORE_FROM_STACK - @item LONGJMP_RESTORE_FROM_STACK - Define this macro if the @code{longjmp} function restores registers from - the stack frames, rather than from those saved specifically by - @code{setjmp}. Certain quantities must not be kept in registers across - a call to @code{setjmp} on such machines. @end table @node Stack Arguments --- 3114,3119 ---- *************** after the function returns. *** 3086,3092 **** @var{fundecl} is a C variable whose value is a tree node that describes the function in question. Normally it is a node of type @code{FUNCTION_DECL} that describes the declaration of the function. ! From this you can obtain the @code{DECL_MACHINE_ATTRIBUTES} of the function. @var{funtype} is a C variable whose value is a tree node that describes the function in question. Normally it is a node of type --- 3252,3258 ---- @var{fundecl} is a C variable whose value is a tree node that describes the function in question. Normally it is a node of type @code{FUNCTION_DECL} that describes the declaration of the function. ! From this you can obtain the @code{DECL_ATTRIBUTES} of the function. @var{funtype} is a C variable whose value is a tree node that describes the function in question. Normally it is a node of type *************** in the compiler and was not mentioned in *** 3105,3111 **** stack. If a variable number of bytes is passed, it is zero, and argument popping will always be the responsibility of the calling function. ! On the Vax, all functions always pop their arguments, so the definition of this macro is @var{stack-size}. On the 68000, using the standard calling convention, no functions pop their arguments, so the value of the macro is always 0 in this case. But an alternative calling --- 3271,3277 ---- stack. If a variable number of bytes is passed, it is zero, and argument popping will always be the responsibility of the calling function. ! On the VAX, all functions always pop their arguments, so the definition of this macro is @var{stack-size}. On the 68000, using the standard calling convention, no functions pop their arguments, so the value of the macro is always 0 in this case. But an alternative calling *************** arguments pop them but other functions ( *** 3114,3119 **** --- 3280,3301 ---- nothing (the caller pops all). When this convention is in use, @var{funtype} is examined to determine whether a function takes a fixed number of arguments. + + @findex CALL_POPS_ARGS + @item CALL_POPS_ARGS (@var{cum}) + A C expression that should indicate the number of bytes a call sequence + pops off the stack. It is added to the value of @code{RETURN_POPS_ARGS} + when compiling a function call. + + @var{cum} is the variable in which all arguments to the called function + have been accumulated. + + On certain architectures, such as the SH5, a call trampoline is used + that pops certain registers off the stack, depending on the arguments + that have been passed to the function. Since this is a property of the + call site, not of the called function, @code{RETURN_POPS_ARGS} is not + appropriate. + @end table @node Register Arguments *************** The value of the expression is usually e *** 3144,3150 **** hard register in which to pass the argument, or zero to pass the argument on the stack. ! For machines like the Vax and 68000, where normally all arguments are pushed, zero suffices as a definition. The value of the expression can also be a @code{parallel} RTX@. This is --- 3326,3332 ---- hard register in which to pass the argument, or zero to pass the argument on the stack. ! For machines like the VAX and 68000, where normally all arguments are pushed, zero suffices as a definition. The value of the expression can also be a @code{parallel} RTX@. This is *************** As a special exception the first @code{e *** 3161,3166 **** --- 3343,3352 ---- RTX may have a first operand of zero. This indicates that the entire argument is also stored on the stack. + The last time this macro is called, it is called with @code{MODE == + VOIDmode}, and its result is passed to the @code{call} or @code{call_value} + pattern as operands 2 and 3 respectively. + @cindex @file{stdarg.h} and register arguments The usual way to make the ISO library @file{stdarg.h} work on a machine where some arguments are usually passed in registers, is to cause *************** nonzero, the caller does not make a copy *** 3247,3252 **** --- 3433,3446 ---- determined that the value won't be modified, it need not make a copy; otherwise a copy must be made. + @findex FUNCTION_ARG_REG_LITTLE_ENDIAN + @item FUNCTION_ARG_REG_LITTLE_ENDIAN + If defined TRUE on a big-endian system then structure arguments passed + (and returned) in registers are passed in a little-endian manner instead of + the big-endian manner. On the HP-UX IA64 and PA64 platforms structures are + aligned differently then integral values and setting this value to true will + allow for the special handling of structure arguments and return values. + @findex CUMULATIVE_ARGS @item CUMULATIVE_ARGS A C type for declaring a variable that is used as the first argument of *************** will select the smallest suitable mode. *** 3601,3610 **** This section describes the macros that output function entry (@dfn{prologue}) and exit (@dfn{epilogue}) code. ! @table @code ! @findex FUNCTION_PROLOGUE ! @item FUNCTION_PROLOGUE (@var{file}, @var{size}) ! A C compound statement that outputs the assembler code for entry to a function. The prologue is responsible for setting up the stack frame, initializing the frame pointer register, saving registers that must be saved, and allocating @var{size} additional bytes of storage for the --- 3795,3802 ---- This section describes the macros that output function entry (@dfn{prologue}) and exit (@dfn{epilogue}) code. ! @deftypefn {Target Hook} void TARGET_ASM_FUNCTION_PROLOGUE (FILE *@var{file}, HOST_WIDE_INT @var{size}) ! If defined, a function that outputs the assembler code for entry to a function. The prologue is responsible for setting up the stack frame, initializing the frame pointer register, saving registers that must be saved, and allocating @var{size} additional bytes of storage for the *************** To determine which registers to save, th *** 3619,3625 **** @code{regs_ever_live}: element @var{r} is nonzero if hard register @var{r} is used anywhere within the function. This implies the function prologue should save register @var{r}, provided it is not one of the ! call-used registers. (@code{FUNCTION_EPILOGUE} must likewise use @code{regs_ever_live}.) On machines that have ``register windows'', the function entry code does --- 3811,3817 ---- @code{regs_ever_live}: element @var{r} is nonzero if hard register @var{r} is used anywhere within the function. This implies the function prologue should save register @var{r}, provided it is not one of the ! call-used registers. (@code{TARGET_ASM_FUNCTION_EPILOGUE} must likewise use @code{regs_ever_live}.) On machines that have ``register windows'', the function entry code does *************** for a machine if doing so is more conven *** 3646,3651 **** --- 3838,3908 ---- compatibility reasons. Except in cases where required by standard or by a debugger, there is no reason why the stack layout used by GCC need agree with that used by other compilers for a machine. + @end deftypefn + + @deftypefn {Target Hook} void TARGET_ASM_FUNCTION_END_PROLOGUE (FILE *@var{file}) + If defined, a function that outputs assembler code at the end of a + prologue. This should be used when the function prologue is being + emitted as RTL, and you have some extra assembler that needs to be + emitted. @xref{prologue instruction pattern}. + @end deftypefn + + @deftypefn {Target Hook} void TARGET_ASM_FUNCTION_BEGIN_EPILOGUE (FILE *@var{file}) + If defined, a function that outputs assembler code at the start of an + epilogue. This should be used when the function epilogue is being + emitted as RTL, and you have some extra assembler that needs to be + emitted. @xref{epilogue instruction pattern}. + @end deftypefn + + @deftypefn {Target Hook} void TARGET_ASM_FUNCTION_EPILOGUE (FILE *@var{file}, HOST_WIDE_INT @var{size}) + If defined, a function that outputs the assembler code for exit from a + function. The epilogue is responsible for restoring the saved + registers and stack pointer to their values when the function was + called, and returning control to the caller. This macro takes the + same arguments as the macro @code{TARGET_ASM_FUNCTION_PROLOGUE}, and the + registers to restore are determined from @code{regs_ever_live} and + @code{CALL_USED_REGISTERS} in the same way. + + On some machines, there is a single instruction that does all the work + of returning from the function. On these machines, give that + instruction the name @samp{return} and do not define the macro + @code{TARGET_ASM_FUNCTION_EPILOGUE} at all. + + Do not define a pattern named @samp{return} if you want the + @code{TARGET_ASM_FUNCTION_EPILOGUE} to be used. If you want the target + switches to control whether return instructions or epilogues are used, + define a @samp{return} pattern with a validity condition that tests the + target switches appropriately. If the @samp{return} pattern's validity + condition is false, epilogues will be used. + + On machines where functions may or may not have frame-pointers, the + function exit code must vary accordingly. Sometimes the code for these + two cases is completely different. To determine whether a frame pointer + is wanted, the macro can refer to the variable + @code{frame_pointer_needed}. The variable's value will be 1 when compiling + a function that needs a frame pointer. + + Normally, @code{TARGET_ASM_FUNCTION_PROLOGUE} and + @code{TARGET_ASM_FUNCTION_EPILOGUE} must treat leaf functions specially. + The C variable @code{current_function_is_leaf} is nonzero for such a + function. @xref{Leaf Functions}. + + On some machines, some functions pop their arguments on exit while + others leave that for the caller to do. For example, the 68020 when + given @option{-mrtd} pops arguments in functions that take a fixed + number of arguments. + + @findex current_function_pops_args + Your definition of the macro @code{RETURN_POPS_ARGS} decides which + functions pop their own arguments. @code{TARGET_ASM_FUNCTION_EPILOGUE} + needs to know what was decided. The variable that is called + @code{current_function_pops_args} is the number of bytes of its + arguments that a function should pop. @xref{Scalar Return}. + @c what is the "its arguments" in the above sentence referring to, pray + @c tell? --mew 5feb93 + @end deftypefn + + @table @code @itemize @bullet @item *************** Optionally, when @code{ACCUMULATE_OUTGOI *** 3681,3689 **** argument lists of the function. @xref{Stack Arguments}. @end itemize ! Normally, it is necessary for the macros @code{FUNCTION_PROLOGUE} and ! @code{FUNCTION_EPILOGUE} to treat leaf functions specially. The C ! variable @code{current_function_is_leaf} is nonzero for such a function. @findex EXIT_IGNORE_STACK @item EXIT_IGNORE_STACK --- 3938,3948 ---- argument lists of the function. @xref{Stack Arguments}. @end itemize ! Normally, it is necessary for the macros ! @code{TARGET_ASM_FUNCTION_PROLOGUE} and ! @code{TARGET_ASM_FUNCTION_EPILOGUE} to treat leaf functions specially. ! The C variable @code{current_function_is_leaf} is nonzero for such a ! function. @findex EXIT_IGNORE_STACK @item EXIT_IGNORE_STACK *************** Define this macro as a C expression that *** 3703,3754 **** used by the epilogue or the @samp{return} pattern. The stack and frame pointer registers are already be assumed to be used as needed. ! @findex FUNCTION_EPILOGUE ! @item FUNCTION_EPILOGUE (@var{file}, @var{size}) ! A C compound statement that outputs the assembler code for exit from a ! function. The epilogue is responsible for restoring the saved ! registers and stack pointer to their values when the function was ! called, and returning control to the caller. This macro takes the ! same arguments as the macro @code{FUNCTION_PROLOGUE}, and the ! registers to restore are determined from @code{regs_ever_live} and ! @code{CALL_USED_REGISTERS} in the same way. ! ! On some machines, there is a single instruction that does all the work ! of returning from the function. On these machines, give that ! instruction the name @samp{return} and do not define the macro ! @code{FUNCTION_EPILOGUE} at all. ! ! Do not define a pattern named @samp{return} if you want the ! @code{FUNCTION_EPILOGUE} to be used. If you want the target switches ! to control whether return instructions or epilogues are used, define a ! @samp{return} pattern with a validity condition that tests the target ! switches appropriately. If the @samp{return} pattern's validity ! condition is false, epilogues will be used. ! ! On machines where functions may or may not have frame-pointers, the ! function exit code must vary accordingly. Sometimes the code for these ! two cases is completely different. To determine whether a frame pointer ! is wanted, the macro can refer to the variable ! @code{frame_pointer_needed}. The variable's value will be 1 when compiling ! a function that needs a frame pointer. ! ! Normally, @code{FUNCTION_PROLOGUE} and @code{FUNCTION_EPILOGUE} must ! treat leaf functions specially. The C variable @code{current_function_is_leaf} ! is nonzero for such a function. @xref{Leaf Functions}. ! ! On some machines, some functions pop their arguments on exit while ! others leave that for the caller to do. For example, the 68020 when ! given @option{-mrtd} pops arguments in functions that take a fixed ! number of arguments. ! ! @findex current_function_pops_args ! Your definition of the macro @code{RETURN_POPS_ARGS} decides which ! functions pop their own arguments. @code{FUNCTION_EPILOGUE} needs to ! know what was decided. The variable that is called ! @code{current_function_pops_args} is the number of bytes of its ! arguments that a function should pop. @xref{Scalar Return}. ! @c what is the "its arguments" in the above sentence referring to, pray ! @c tell? --mew 5feb93 @findex DELAY_SLOTS_FOR_EPILOGUE @item DELAY_SLOTS_FOR_EPILOGUE --- 3962,3972 ---- used by the epilogue or the @samp{return} pattern. The stack and frame pointer registers are already be assumed to be used as needed. ! @findex EH_USES ! @item EH_USES (@var{regno}) ! Define this macro as a C expression that is nonzero for registers that are ! used by the exception handling mechanism, and so should be considered live ! on entry to an exception edge. @findex DELAY_SLOTS_FOR_EPILOGUE @item DELAY_SLOTS_FOR_EPILOGUE *************** The insns accepted to fill the epilogue *** 3777,3784 **** list made with @code{insn_list} objects, stored in the variable @code{current_function_epilogue_delay_list}. The insn for the first delay slot comes first in the list. Your definition of the macro ! @code{FUNCTION_EPILOGUE} should fill the delay slots by outputting the ! insns in this list, usually by calling @code{final_scan_insn}. You need not define this macro if you did not define @code{DELAY_SLOTS_FOR_EPILOGUE}. --- 3995,4003 ---- list made with @code{insn_list} objects, stored in the variable @code{current_function_epilogue_delay_list}. The insn for the first delay slot comes first in the list. Your definition of the macro ! @code{TARGET_ASM_FUNCTION_EPILOGUE} should fill the delay slots by ! outputting the insns in this list, usually by calling ! @code{final_scan_insn}. You need not define this macro if you did not define @code{DELAY_SLOTS_FOR_EPILOGUE}. *************** return to whoever called the current @sa *** 3805,3812 **** The effect must be as if @var{function} had been called directly with the adjusted first argument. This macro is responsible for emitting all ! of the code for a thunk function; @code{FUNCTION_PROLOGUE} and ! @code{FUNCTION_EPILOGUE} are not invoked. The @var{thunk_fndecl} is redundant. (@var{delta} and @var{function} have already been extracted from it.) It might possibly be useful on --- 4024,4031 ---- The effect must be as if @var{function} had been called directly with the adjusted first argument. This macro is responsible for emitting all ! of the code for a thunk function; @code{TARGET_ASM_FUNCTION_PROLOGUE} ! and @code{TARGET_ASM_FUNCTION_EPILOGUE} are not invoked. The @var{thunk_fndecl} is redundant. (@var{delta} and @var{function} have already been extracted from it.) It might possibly be useful on *************** must not use the @var{labelno} argument *** 3859,4031 **** Define this macro if the code for function profiling should come before the function prologue. Normally, the profiling code comes after. - @findex FUNCTION_BLOCK_PROFILER - @vindex profile_block_flag - @item FUNCTION_BLOCK_PROFILER (@var{file}, @var{labelno}) - A C statement or compound statement to output to @var{file} some - assembler code to initialize basic-block profiling for the current - object module. The global compile flag @code{profile_block_flag} - distinguishes two profile modes. - - @table @code - @findex __bb_init_func - @item profile_block_flag != 2 - Output code to call the subroutine @code{__bb_init_func} once per - object module, passing it as its sole argument the address of a block - allocated in the object module. - - The name of the block is a local symbol made with this statement: - - @smallexample - ASM_GENERATE_INTERNAL_LABEL (@var{buffer}, "LPBX", 0); - @end smallexample - - Of course, since you are writing the definition of - @code{ASM_GENERATE_INTERNAL_LABEL} as well as that of this macro, you - can take a short cut in the definition of this macro and use the name - that you know will result. - - The first word of this block is a flag which will be nonzero if the - object module has already been initialized. So test this word first, - and do not call @code{__bb_init_func} if the flag is - nonzero. @var{labelno} contains a unique number which may be used to - generate a label as a branch destination when @code{__bb_init_func} - will not be called. - - Described in assembler language, the code to be output looks like: - - @example - cmp (LPBX0),0 - bne local_label - parameter1 <- LPBX0 - call __bb_init_func - local_label: - @end example - - @findex __bb_init_trace_func - @item profile_block_flag == 2 - Output code to call the subroutine @code{__bb_init_trace_func} - and pass two parameters to it. The first parameter is the same as - for @code{__bb_init_func}. The second parameter is the number of the - first basic block of the function as given by @var{labelno}. Note - that @code{__bb_init_trace_func} has to be called, even if the object - module has been initialized already. - - Described in assembler language, the code to be output looks like: - @example - parameter1 <- LPBX0 - parameter2 <- @var{labelno} - call __bb_init_trace_func - @end example - @end table - - @findex BLOCK_PROFILER - @vindex profile_block_flag - @item BLOCK_PROFILER (@var{file}, @var{blockno}) - A C statement or compound statement to output to @var{file} some - assembler code to increment the count associated with the basic - block number @var{blockno}. The global compile flag - @code{profile_block_flag} distinguishes two profile modes. - - @table @code - @item profile_block_flag != 2 - Output code to increment the counter directly. Basic blocks are - numbered separately from zero within each compilation. The count - associated with block number @var{blockno} is at index - @var{blockno} in a vector of words; the name of this array is a local - symbol made with this statement: - - @smallexample - ASM_GENERATE_INTERNAL_LABEL (@var{buffer}, "LPBX", 2); - @end smallexample - - @c This paragraph is the same as one a few paragraphs up. - @c That is not an error. - Of course, since you are writing the definition of - @code{ASM_GENERATE_INTERNAL_LABEL} as well as that of this macro, you - can take a short cut in the definition of this macro and use the name - that you know will result. - - Described in assembler language, the code to be output looks like: - - @smallexample - inc (LPBX2+4*@var{blockno}) - @end smallexample - - @vindex __bb - @findex __bb_trace_func - @item profile_block_flag == 2 - Output code to initialize the global structure @code{__bb} and - call the function @code{__bb_trace_func}, which will increment the - counter. - - @code{__bb} consists of two words. In the first word, the current - basic block number, as given by @var{blockno}, has to be stored. In - the second word, the address of a block allocated in the object - module has to be stored. The address is given by the label created - with this statement: - - @smallexample - ASM_GENERATE_INTERNAL_LABEL (@var{buffer}, "LPBX", 0); - @end smallexample - - Described in assembler language, the code to be output looks like: - @example - move @var{blockno} -> (__bb) - move LPBX0 -> (__bb+4) - call __bb_trace_func - @end example - @end table - - @findex FUNCTION_BLOCK_PROFILER_EXIT - @findex __bb_trace_ret - @vindex profile_block_flag - @item FUNCTION_BLOCK_PROFILER_EXIT (@var{file}) - A C statement or compound statement to output to @var{file} - assembler code to call function @code{__bb_trace_ret}. The - assembler code should only be output - if the global compile flag @code{profile_block_flag} == 2. This - macro has to be used at every place where code for returning from - a function is generated (e.g.@: @code{FUNCTION_EPILOGUE}). Although - you have to write the definition of @code{FUNCTION_EPILOGUE} - as well, you have to define this macro to tell the compiler, that - the proper call to @code{__bb_trace_ret} is produced. - - @findex MACHINE_STATE_SAVE - @findex __bb_init_trace_func - @findex __bb_trace_func - @findex __bb_trace_ret - @item MACHINE_STATE_SAVE (@var{id}) - A C statement or compound statement to save all registers, which may - be clobbered by a function call, including condition codes. The - @code{asm} statement will be mostly likely needed to handle this - task. Local labels in the assembler code can be concatenated with the - string @var{id}, to obtain a unique label name. - - Registers or condition codes clobbered by @code{FUNCTION_PROLOGUE} or - @code{FUNCTION_EPILOGUE} must be saved in the macros - @code{FUNCTION_BLOCK_PROFILER}, @code{FUNCTION_BLOCK_PROFILER_EXIT} and - @code{BLOCK_PROFILER} prior calling @code{__bb_init_trace_func}, - @code{__bb_trace_ret} and @code{__bb_trace_func} respectively. - - @findex MACHINE_STATE_RESTORE - @findex __bb_init_trace_func - @findex __bb_trace_func - @findex __bb_trace_ret - @item MACHINE_STATE_RESTORE (@var{id}) - A C statement or compound statement to restore all registers, including - condition codes, saved by @code{MACHINE_STATE_SAVE}. - - Registers or condition codes clobbered by @code{FUNCTION_PROLOGUE} or - @code{FUNCTION_EPILOGUE} must be restored in the macros - @code{FUNCTION_BLOCK_PROFILER}, @code{FUNCTION_BLOCK_PROFILER_EXIT} and - @code{BLOCK_PROFILER} after calling @code{__bb_init_trace_func}, - @code{__bb_trace_ret} and @code{__bb_trace_func} respectively. - - @findex BLOCK_PROFILER_CODE - @item BLOCK_PROFILER_CODE - A C function or functions which are needed in the library to - support block profiling. @findex TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER @item TARGET_ALLOWS_PROFILING_WITHOUT_FRAME_POINTER --- 4078,4083 ---- *************** profiling when the frame pointer is omit *** 4043,4069 **** @end table ! @node Inlining ! @subsection Permitting inlining of functions with attributes ! @cindex inlining ! ! By default if a function has a target specific attribute attached to it, ! it will not be inlined. This behaviour can be overridden if the target ! defines the @samp{FUNCTION_ATTRIBUTE_INLINABLE_P} macro. This macro ! takes one argument, a @samp{DECL} describing the function. It should ! return nonzero if the function can be inlined, otherwise it should ! return 0. ! ! @node Tail Calling ! @subsection Permitting tail calls to functions @cindex tail calls - @cindex sibling calls @table @code @findex FUNCTION_OK_FOR_SIBCALL @item FUNCTION_OK_FOR_SIBCALL (@var{decl}) A C expression that evaluates to true if it is ok to perform a sibling ! call to @var{decl}. It is not uncommon for limitations of calling conventions to prevent tail calls to functions outside the current unit of translation, or --- 4095,4109 ---- @end table ! @node Tail Calls ! @subsection Permitting tail calls @cindex tail calls @table @code @findex FUNCTION_OK_FOR_SIBCALL @item FUNCTION_OK_FOR_SIBCALL (@var{decl}) A C expression that evaluates to true if it is ok to perform a sibling ! call to @var{decl} from the current function. It is not uncommon for limitations of calling conventions to prevent tail calls to functions outside the current unit of translation, or *************** A C expression to allocate run-time spac *** 4317,4330 **** expression value should be an RTX representing a memory reference to the space for the trampoline. ! @cindex @code{FUNCTION_EPILOGUE} and trampolines ! @cindex @code{FUNCTION_PROLOGUE} and trampolines If this macro is not defined, by default the trampoline is allocated as a stack slot. This default is right for most machines. The exceptions are machines where it is impossible to execute instructions in the stack area. On such machines, you may have to implement a separate stack, ! using this macro in conjunction with @code{FUNCTION_PROLOGUE} and ! @code{FUNCTION_EPILOGUE}. @var{fp} points to a data structure, a @code{struct function}, which describes the compilation status of the immediate containing function of --- 4357,4370 ---- expression value should be an RTX representing a memory reference to the space for the trampoline. ! @cindex @code{TARGET_ASM_FUNCTION_EPILOGUE} and trampolines ! @cindex @code{TARGET_ASM_FUNCTION_PROLOGUE} and trampolines If this macro is not defined, by default the trampoline is allocated as a stack slot. This default is right for most machines. The exceptions are machines where it is impossible to execute instructions in the stack area. On such machines, you may have to implement a separate stack, ! using this macro in conjunction with @code{TARGET_ASM_FUNCTION_PROLOGUE} ! and @code{TARGET_ASM_FUNCTION_EPILOGUE}. @var{fp} points to a data structure, a @code{struct function}, which describes the compilation status of the immediate containing function of *************** Define this macro if GCC should generate *** 4534,4625 **** @findex LIBGCC_NEEDS_DOUBLE @item LIBGCC_NEEDS_DOUBLE ! Define this macro if only @code{float} arguments cannot be passed to ! library routines (so they must be converted to @code{double}). This ! macro affects both how library calls are generated and how the library ! routines in @file{libgcc1.c} accept their arguments. It is useful on machines where floating and fixed point arguments are passed differently, such as the i860. - @findex FLOAT_ARG_TYPE - @item FLOAT_ARG_TYPE - Define this macro to override the type used by the library routines to - pick up arguments of type @code{float}. (By default, they use a union - of @code{float} and @code{int}.) - - The obvious choice would be @code{float}---but that won't work with - traditional C compilers that expect all arguments declared as @code{float} - to arrive as @code{double}. To avoid this conversion, the library routines - ask for the value as some other type and then treat it as a @code{float}. - - On some systems, no other type will work for this. For these systems, - you must use @code{LIBGCC_NEEDS_DOUBLE} instead, to force conversion of - the values @code{double} before they are passed. - - @findex FLOATIFY - @item FLOATIFY (@var{passed-value}) - Define this macro to override the way library routines redesignate a - @code{float} argument as a @code{float} instead of the type it was - passed as. The default is an expression which takes the @code{float} - field of the union. - - @findex FLOAT_VALUE_TYPE - @item FLOAT_VALUE_TYPE - Define this macro to override the type used by the library routines to - return values that ought to have type @code{float}. (By default, they - use @code{int}.) - - The obvious choice would be @code{float}---but that won't work with - traditional C compilers gratuitously convert values declared as - @code{float} into @code{double}. - - @findex INTIFY - @item INTIFY (@var{float-value}) - Define this macro to override the way the value of a - @code{float}-returning library routine should be packaged in order to - return it. These functions are actually declared to return type - @code{FLOAT_VALUE_TYPE} (normally @code{int}). - - These values can't be returned as type @code{float} because traditional - C compilers would gratuitously convert the value to a @code{double}. - - A local variable named @code{intify} is always available when the macro - @code{INTIFY} is used. It is a union of a @code{float} field named - @code{f} and a field named @code{i} whose type is - @code{FLOAT_VALUE_TYPE} or @code{int}. - - If you don't define this macro, the default definition works by copying - the value through that union. - - @findex nongcc_SI_type - @item nongcc_SI_type - Define this macro as the name of the data type corresponding to - @code{SImode} in the system's own C compiler. - - You need not define this macro if that type is @code{long int}, as it usually - is. - - @findex nongcc_word_type - @item nongcc_word_type - Define this macro as the name of the data type corresponding to the - word_mode in the system's own C compiler. - - You need not define this macro if that type is @code{long int}, as it usually - is. - - @findex perform_@dots{} - @item perform_@dots{} - Define these macros to supply explicit C statements to carry out various - arithmetic operations on types @code{float} and @code{double} in the - library routines in @file{libgcc1.c}. See that file for a full list - of these macros and their arguments. - - On most machines, you don't need to define any of these macros, because - the C compiler that comes with the system takes care of doing them. - @findex NEXT_OBJC_RUNTIME @item NEXT_OBJC_RUNTIME ! Define this macro to generate code for Objective C message sending using the calling convention of the NeXT system. This calling convention involves passing the object, the selector and the method arguments all at once to the method-lookup library function. --- 4574,4589 ---- @findex LIBGCC_NEEDS_DOUBLE @item LIBGCC_NEEDS_DOUBLE ! Define this macro if @code{float} arguments cannot be passed to library ! routines (so they must be converted to @code{double}). This macro ! affects both how library calls are generated and how the library ! routines in @file{libgcc.a} accept their arguments. It is useful on machines where floating and fixed point arguments are passed differently, such as the i860. @findex NEXT_OBJC_RUNTIME @item NEXT_OBJC_RUNTIME ! Define this macro to generate code for Objective-C message sending using the calling convention of the NeXT system. This calling convention involves passing the object, the selector and the method arguments all at once to the method-lookup library function. *************** like: *** 5054,5059 **** --- 5018,5036 ---- : reverse_condition_maybe_unordered (CODE)) @end smallexample + @findex REVERSE_CONDEXEC_PREDICATES_P + @item REVERSE_CONDEXEC_PREDICATES_P (@var{code1}, @var{code2}) + A C expression that returns true if the conditional execution predicate + @var{code1} is the inverse of @var{code2} and vice versa. Define this to + return 0 if the target has conditional execution predicates that cannot be + reversed safely. If no expansion is specified, this macro is defined as + follows: + + @smallexample + #define REVERSE_CONDEXEC_PREDICATES_P (x, y) \ + ((x) == reverse_condition (y)) + @end smallexample + @end table @node Costs *************** faster than word accesses, using word ac *** 5220,5241 **** may eliminate subsequent memory access if subsequent accesses occur to other fields in the same word of the structure, but to different bytes. - @findex SLOW_ZERO_EXTEND - @item SLOW_ZERO_EXTEND - Define this macro if zero-extension (of a @code{char} or @code{short} - to an @code{int}) can be done faster if the destination is a register - that is known to be zero. - - If you define this macro, you must have instruction patterns that - recognize RTL structures like this: - - @smallexample - (set (strict_low_part (subreg:QI (reg:SI @dots{}) 0)) @dots{}) - @end smallexample - - @noindent - and likewise for @code{HImode}. - @findex SLOW_UNALIGNED_ACCESS @item SLOW_UNALIGNED_ACCESS (@var{mode}, @var{alignment}) Define this macro to be the value 1 if memory accesses described by the --- 5197,5202 ---- *************** function address than to call an address *** 5342,5365 **** Define this macro if it is as good or better for a function to call itself with an explicit address than to call an address kept in a register. ! @findex ADJUST_COST ! @item ADJUST_COST (@var{insn}, @var{link}, @var{dep_insn}, @var{cost}) ! A C statement (sans semicolon) to update the integer variable @var{cost} ! based on the relationship between @var{insn} that is dependent on ! @var{dep_insn} through the dependence @var{link}. The default is to ! make no adjustment to @var{cost}. This can be used for example to ! specify to the scheduler that an output- or anti-dependence does not ! incur the same cost as a data-dependence. ! @findex ADJUST_PRIORITY ! @item ADJUST_PRIORITY (@var{insn}) ! A C statement (sans semicolon) to update the integer scheduling ! priority @code{INSN_PRIORITY(@var{insn})}. Reduce the priority ! to execute the @var{insn} earlier, increase the priority to execute ! @var{insn} later. Do not define this macro if you do not need to ! adjust the scheduling priorities of insns. ! @end table @node Sections @section Dividing the Output into Sections (Texts, Data, @dots{}) --- 5303,5409 ---- Define this macro if it is as good or better for a function to call itself with an explicit address than to call an address kept in a register. + @end table ! @node Scheduling ! @section Adjusting the Instruction Scheduler ! The instruction scheduler may need a fair amount of machine-specific ! adjustment in order to produce good code. GCC provides several target ! hooks for this purpose. It is usually enough to define just a few of ! them: try the first ones in this list first. ! ! @deftypefn {Target Hook} int TARGET_SCHED_ISSUE_RATE (void) ! This hook returns the maximum number of instructions that can ever issue ! at the same time on the target machine. The default is one. This value ! must be constant over the entire compilation. If you need it to vary ! depending on what the instructions are, you must use ! @samp{TARGET_SCHED_VARIABLE_ISSUE}. ! @end deftypefn ! ! @deftypefn {Target Hook} int TARGET_SCHED_VARIABLE_ISSUE (FILE *@var{file}, int @var{verbose}, rtx @var{insn}, int @var{more}) ! This hook is executed by the scheduler after it has scheduled an insn ! from the ready list. It should return the number of insns which can ! still be issued in the current cycle. Normally this is ! @samp{@w{@var{more} - 1}}. You should define this hook if some insns ! take more machine resources than others, so that fewer insns can follow ! them in the same cycle. @var{file} is either a null pointer, or a stdio ! stream to write any debug output to. @var{verbose} is the verbose level ! provided by @option{-fsched-verbose-@var{n}}. @var{insn} is the ! instruction that was scheduled. ! @end deftypefn ! ! @deftypefn {Target Hook} int TARGET_SCHED_ADJUST_COST (rtx @var{insn}, rtx @var{link}, rtx @var{dep_insn}, int @var{cost}) ! This function corrects the value of @var{cost} based on the relationship ! between @var{insn} and @var{dep_insn} through the dependence @var{link}. ! It should return the new value. The default is to make no adjustment to ! @var{cost}. This can be used for example to specify to the scheduler ! that an output- or anti-dependence does not incur the same cost as a ! data-dependence. ! @end deftypefn ! ! @deftypefn {Target Hook} int TARGET_SCHED_ADJUST_PRIORITY (rtx @var{insn}, int @var{priority}) ! This hook adjusts the integer scheduling priority @var{priority} of ! @var{insn}. It should return the new priority. Reduce the priority to ! execute @var{insn} earlier, increase the priority to execute @var{insn} ! later. Do not define this hook if you do not need to adjust the ! scheduling priorities of insns. ! @end deftypefn ! ! @deftypefn {Target Hook} int TARGET_SCHED_REORDER (FILE *@var{file}, int @var{verbose}, rtx *@var{ready}, int *@var{n_readyp}, int @var{clock}) ! This hook is executed by the scheduler after it has scheduled the ready ! list, to allow the machine description to reorder it (for example to ! combine two small instructions together on @samp{VLIW} machines). ! @var{file} is either a null pointer, or a stdio stream to write any ! debug output to. @var{verbose} is the verbose level provided by ! @option{-fsched-verbose-@var{n}}. @var{ready} is a pointer to the ready ! list of instructions that are ready to be scheduled. @var{n_readyp} is ! a pointer to the number of elements in the ready list. The scheduler ! reads the ready list in reverse order, starting with ! @var{ready}[@var{*n_readyp}-1] and going to @var{ready}[0]. @var{clock} ! is the timer tick of the scheduler. You may modify the ready list and ! the number of ready insns. The return value is the number of insns that ! can issue this cycle; normally this is just @code{issue_rate}. See also ! @samp{TARGET_SCHED_REORDER2}. ! @end deftypefn ! ! @deftypefn {Target Hook} int TARGET_SCHED_REORDER2 (FILE *@var{file}, int @var{verbose}, rtx *@var{ready}, int *@var{n_ready}, @var{clock}) ! Like @samp{TARGET_SCHED_REORDER}, but called at a different time. That ! function is called whenever the scheduler starts a new cycle. This one ! is called once per iteration over a cycle, immediately after ! @samp{TARGET_SCHED_VARIABLE_ISSUE}; it can reorder the ready list and ! return the number of insns to be scheduled in the same cycle. Defining ! this hook can be useful if there are frequent situations where ! scheduling one insn causes other insns to become ready in the same ! cycle. These other insns can then be taken into account properly. ! @end deftypefn ! ! @deftypefn {Target Hook} void TARGET_SCHED_INIT (FILE *@var{file}, int @var{verbose}, int @var{max_ready}) ! This hook is executed by the scheduler at the beginning of each block of ! instructions that are to be scheduled. @var{file} is either a null ! pointer, or a stdio stream to write any debug output to. @var{verbose} ! is the verbose level provided by @option{-fsched-verbose-@var{n}}. ! @var{max_ready} is the maximum number of insns in the current scheduling ! region that can be live at the same time. This can be used to allocate ! scratch space if it is needed, e.g. by @samp{TARGET_SCHED_REORDER}. ! @end deftypefn ! ! @deftypefn {Target Hook} void TARGET_SCHED_FINISH (FILE *@var{file}, int @var{verbose}) ! This hook is executed by the scheduler at the end of each block of ! instructions that are to be scheduled. It can be used to perform ! cleanup of any actions done by the other scheduling hooks. @var{file} ! is either a null pointer, or a stdio stream to write any debug output ! to. @var{verbose} is the verbose level provided by ! @option{-fsched-verbose-@var{n}}. ! @end deftypefn ! ! @deftypefn {Target Hook} rtx TARGET_SCHED_CYCLE_DISPLAY (int @var{clock}, rtx @var{last}) ! This hook is called in verbose mode only, at the beginning of each pass ! over a basic block. It should insert an insn into the chain after ! @var{last}, which has no effect, but records the value @var{clock} in ! RTL dumps and assembly output. Define this hook only if you need this ! level of detail about what the scheduler is doing. ! @end deftypefn @node Sections @section Dividing the Output into Sections (Texts, Data, @dots{}) *************** A C expression whose value is a string, *** 5384,5389 **** --- 5428,5440 ---- assembler operation that should precede instructions and read-only data. Normally @code{"\t.text"} is right. + @findex TEXT_SECTION + @item TEXT_SECTION + A C statement that switches to the default section containing instructions. + Normally this is not needed, as simply defining @code{TEXT_SECTION_ASM_OP} + is enough. The MIPS port uses this to sort all functions after all data + declarations. + @findex DATA_SECTION_ASM_OP @item DATA_SECTION_ASM_OP A C expression whose value is a string, including spacing, containing the *************** finalization code. If not defined, GCC *** 5428,5443 **** not exist. @findex CRT_CALL_STATIC_FUNCTION ! @item CRT_CALL_STATIC_FUNCTION ! If defined, a C statement that calls the function named as the sole ! argument of this macro. This is used in @file{crtstuff.c} if ! @code{INIT_SECTION_ASM_OP} or @code{FINI_SECTION_ASM_OP} to calls to ! initialization and finalization functions from the init and fini ! sections. By default, this macro is a simple function call. Some ports need hand-crafted assembly code to avoid dependencies on registers initialized in the function prologue or to ensure that constant pools don't end up too far way in the text section. @findex EXTRA_SECTIONS @findex in_text @findex in_data --- 5479,5502 ---- not exist. @findex CRT_CALL_STATIC_FUNCTION ! @item CRT_CALL_STATIC_FUNCTION (@var{section_op}, @var{function}) ! If defined, an ASM statement that switches to a different section ! via @var{section_op}, calls @var{function}, and switches back to ! the text section. This is used in @file{crtstuff.c} if ! @code{INIT_SECTION_ASM_OP} or @code{FINI_SECTION_ASM_OP} to calls ! to initialization and finalization functions from the init and fini ! sections. By default, this macro uses a simple function call. Some ports need hand-crafted assembly code to avoid dependencies on registers initialized in the function prologue or to ensure that constant pools don't end up too far way in the text section. + @findex FORCE_CODE_SECTION_ALIGN + @item FORCE_CODE_SECTION_ALIGN + If defined, an ASM statement that aligns a code section to some + arbitrary boundary. This is used to force all fragments of the + @code{.init} and @code{.fini} sections to have to same alignment + and thus prevent the linker from having to add any padding. + @findex EXTRA_SECTIONS @findex in_text @findex in_data *************** If these items should be placed in the t *** 5467,5491 **** not be defined. @findex SELECT_SECTION ! @item SELECT_SECTION (@var{exp}, @var{reloc}) A C statement or statements to switch to the appropriate section for output of @var{exp}. You can assume that @var{exp} is either a @code{VAR_DECL} node or a constant of some sort. @var{reloc} indicates whether the initial value of @var{exp} requires link-time ! relocations. Select the section by calling @code{text_section} or one ! of the alternatives for other sections. Do not define this macro if you put all read-only variables and constants in the read-only data section (usually the text section). @findex SELECT_RTX_SECTION ! @item SELECT_RTX_SECTION (@var{mode}, @var{rtx}) A C statement or statements to switch to the appropriate section for output of @var{rtx} in mode @var{mode}. You can assume that @var{rtx} is some kind of constant in RTL@. The argument @var{mode} is redundant except in the case of a @code{const_int} rtx. Select the section by calling @code{text_section} or one of the alternatives for other ! sections. Do not define this macro if you put all constants in the read-only data section. --- 5526,5553 ---- not be defined. @findex SELECT_SECTION ! @item SELECT_SECTION (@var{exp}, @var{reloc}, @var{align}) A C statement or statements to switch to the appropriate section for output of @var{exp}. You can assume that @var{exp} is either a @code{VAR_DECL} node or a constant of some sort. @var{reloc} indicates whether the initial value of @var{exp} requires link-time ! relocations. Bit 1 is set when variable contains local relocations ! only, while bit 2 is set for global relocations. ! Select the section by calling @code{text_section} or one ! of the alternatives for other sections. @var{align} is the constant ! alignment in bits. Do not define this macro if you put all read-only variables and constants in the read-only data section (usually the text section). @findex SELECT_RTX_SECTION ! @item SELECT_RTX_SECTION (@var{mode}, @var{rtx}, @var{align}) A C statement or statements to switch to the appropriate section for output of @var{rtx} in mode @var{mode}. You can assume that @var{rtx} is some kind of constant in RTL@. The argument @var{mode} is redundant except in the case of a @code{const_int} rtx. Select the section by calling @code{text_section} or one of the alternatives for other ! sections. @var{align} is the constant alignment in bits. Do not define this macro if you put all constants in the read-only data section. *************** This macro is irrelevant if there is no *** 5501,5514 **** @findex ENCODE_SECTION_INFO @item ENCODE_SECTION_INFO (@var{decl}) ! Define this macro if references to a symbol must be treated differently ! depending on something about the variable or function named by the ! symbol (such as what section it is in). ! The macro definition, if any, is executed immediately after the rtl for ! @var{decl} has been created and stored in @code{DECL_RTL (@var{decl})}. ! The value of the rtl will be a @code{mem} whose address is a ! @code{symbol_ref}. @cindex @code{SYMBOL_REF_FLAG}, in @code{ENCODE_SECTION_INFO} The usual thing for this macro to do is to record a flag in the --- 5563,5580 ---- @findex ENCODE_SECTION_INFO @item ENCODE_SECTION_INFO (@var{decl}) ! Define this macro if references to a symbol or a constant must be ! treated differently depending on something about the variable or ! function named by the symbol (such as what section it is in). ! The macro definition, if any, is executed under two circumstances. One ! is immediately after the rtl for @var{decl} that represents a variable ! or a function has been created and stored in @code{DECL_RTL ! (@var{decl})}. The value of the rtl will be a @code{mem} whose address ! is a @code{symbol_ref}. The other is immediately after the rtl for ! @var{decl} that represents a constant has been created and stored in ! @code{TREE_CST_RTL (@var{decl})}. The macro is called once for each ! distinct constant in a source file. @cindex @code{SYMBOL_REF_FLAG}, in @code{ENCODE_SECTION_INFO} The usual thing for this macro to do is to record a flag in the *************** Decode @var{sym_name} and store the real *** 5522,5535 **** the characters that encode section info. Define this macro if @code{ENCODE_SECTION_INFO} alters the symbol's name string. - @findex UNIQUE_SECTION_P - @item UNIQUE_SECTION_P (@var{decl}) - A C expression which evaluates to true if @var{decl} should be placed - into a unique section for some target-specific reason. If you do not - define this macro, the default is @samp{0}. Note that the flag - @option{-ffunction-sections} will also cause functions to be placed into - unique sections. - @findex UNIQUE_SECTION @item UNIQUE_SECTION (@var{decl}, @var{reloc}) A C statement to build up a unique section name, expressed as a --- 5588,5593 ---- *************** A C statement to build up a unique secti *** 5537,5544 **** @var{reloc} indicates whether the initial value of @var{exp} requires link-time relocations. If you do not define this macro, GCC will use the symbol name prefixed by @samp{.} as the section name. Note - this ! macro can now be called for uninitialised data items as well as ! initialised data and functions. @end table @node PIC --- 5595,5602 ---- @var{reloc} indicates whether the initial value of @var{exp} requires link-time relocations. If you do not define this macro, GCC will use the symbol name prefixed by @samp{.} as the section name. Note - this ! macro can now be called for uninitialized data items as well as ! initialized data and functions. @end table @node PIC *************** processor's ``application binary interfa *** 5566,5572 **** is defined, RTL is generated for this register once, as with the stack pointer and frame pointer registers. If this macro is not defined, it is up to the machine-dependent files to allocate such a register (if ! necessary). @findex PIC_OFFSET_TABLE_REG_CALL_CLOBBERED @item PIC_OFFSET_TABLE_REG_CALL_CLOBBERED --- 5624,5631 ---- is defined, RTL is generated for this register once, as with the stack pointer and frame pointer registers. If this macro is not defined, it is up to the machine-dependent files to allocate such a register (if ! necessary). Note that this register must be fixed when in use (e.g.@: ! when @code{flag_pic} is true). @findex PIC_OFFSET_TABLE_REG_CALL_CLOBBERED @item PIC_OFFSET_TABLE_REG_CALL_CLOBBERED *************** A C statement to output something to the *** 5711,5786 **** @samp{#ident} directive containing the text @var{string}. If this macro is not defined, nothing is output for a @samp{#ident} directive. - @findex ASM_OUTPUT_SECTION_NAME - @item ASM_OUTPUT_SECTION_NAME (@var{stream}, @var{decl}, @var{name}, @var{reloc}) - A C statement to output something to the assembler file to switch to section - @var{name} for object @var{decl} which is either a @code{FUNCTION_DECL}, a - @code{VAR_DECL} or @code{NULL_TREE}. @var{reloc} - indicates whether the initial value of @var{exp} requires link-time - relocations. The string given by @var{name} will always be the - canonical version stored in the global stringpool. - - Some target formats do not support arbitrary sections. Do not define - this macro in such cases. - - At present this macro is only used to support section attributes. - When this macro is undefined, section attributes are disabled. - @findex OBJC_PROLOGUE @item OBJC_PROLOGUE A C statement to output any assembler statements which are required to ! precede any Objective C object definitions or message sending. The ! statement is executed only when compiling an Objective C program. @end table @need 2000 @node Data Output @subsection Output of Data - @c prevent bad page break with this line - This describes data output. ! @table @code ! @findex ASM_OUTPUT_LONG_DOUBLE ! @findex ASM_OUTPUT_DOUBLE ! @findex ASM_OUTPUT_FLOAT ! @item ASM_OUTPUT_LONG_DOUBLE (@var{stream}, @var{value}) ! @itemx ASM_OUTPUT_DOUBLE (@var{stream}, @var{value}) ! @itemx ASM_OUTPUT_FLOAT (@var{stream}, @var{value}) ! @itemx ASM_OUTPUT_THREE_QUARTER_FLOAT (@var{stream}, @var{value}) ! @itemx ASM_OUTPUT_SHORT_FLOAT (@var{stream}, @var{value}) ! @itemx ASM_OUTPUT_BYTE_FLOAT (@var{stream}, @var{value}) ! A C statement to output to the stdio stream @var{stream} an assembler ! instruction to assemble a floating-point constant of @code{TFmode}, ! @code{DFmode}, @code{SFmode}, @code{TQFmode}, @code{HFmode}, or ! @code{QFmode}, respectively, whose value is @var{value}. @var{value} ! will be a C expression of type @code{REAL_VALUE_TYPE}. Macros such as ! @code{REAL_VALUE_TO_TARGET_DOUBLE} are useful for writing these ! definitions. ! @findex ASM_OUTPUT_QUADRUPLE_INT ! @findex ASM_OUTPUT_DOUBLE_INT ! @findex ASM_OUTPUT_INT ! @findex ASM_OUTPUT_SHORT ! @findex ASM_OUTPUT_CHAR ! @findex output_addr_const ! @item ASM_OUTPUT_QUADRUPLE_INT (@var{stream}, @var{exp}) ! @itemx ASM_OUTPUT_DOUBLE_INT (@var{stream}, @var{exp}) ! @itemx ASM_OUTPUT_INT (@var{stream}, @var{exp}) ! @itemx ASM_OUTPUT_SHORT (@var{stream}, @var{exp}) ! @itemx ASM_OUTPUT_CHAR (@var{stream}, @var{exp}) ! A C statement to output to the stdio stream @var{stream} an assembler ! instruction to assemble an integer of 16, 8, 4, 2 or 1 bytes, ! respectively, whose value is @var{value}. The argument @var{exp} will ! be an RTL expression which represents a constant value. Use ! @samp{output_addr_const (@var{stream}, @var{exp})} to output this value ! as an assembler expression. ! For sizes larger than @code{UNITS_PER_WORD}, if the action of a macro ! would be identical to repeatedly calling the macro corresponding to ! a size of @code{UNITS_PER_WORD}, once for each word, you need not define ! the macro. @findex OUTPUT_ADDR_CONST_EXTRA @item OUTPUT_ADDR_CONST_EXTRA (@var{stream}, @var{x}, @var{fail}) A C statement to recognize @var{rtx} patterns that --- 5770,5847 ---- @samp{#ident} directive containing the text @var{string}. If this macro is not defined, nothing is output for a @samp{#ident} directive. @findex OBJC_PROLOGUE @item OBJC_PROLOGUE A C statement to output any assembler statements which are required to ! precede any Objective-C object definitions or message sending. The ! statement is executed only when compiling an Objective-C program. @end table + @deftypefn {Target Hook} void TARGET_ASM_NAMED_SECTION (const char *@var{name}, unsigned int @var{flags}, unsigned int @var{align}) + Output assembly directives to switch to section @var{name}. The section + should have attributes as specified by @var{flags}, which is a bit mask + of the @code{SECTION_*} flags defined in @file{output.h}. If @var{align} + is nonzero, it contains an alignment in bytes to be used for the section, + otherwise some target default should be used. Only targets that must + specify an alignment within the section directive need pay attention to + @var{align} -- we will still use @code{ASM_OUTPUT_ALIGN}. + @end deftypefn + + @deftypefn {Target Hook} bool TARGET_HAVE_NAMED_SECTIONS + This flag is true if the target supports @code{TARGET_ASM_NAMED_SECTION}. + @end deftypefn + + @deftypefn {Target Hook} {unsigned int} TARGET_SECTION_TYPE_FLAGS (tree @var{decl}, const char *@var{name}, int @var{reloc}) + Choose a set of section attributes for use by @code{TARGET_ASM_NAMED_SECTION} + based on a variable or function decl, a section name, and whether or not the + declaration's initializer may contain runtime relocations. @var{decl} may be + null, in which case read-write data should be assumed. + + The default version if this function handles choosing code vs data, + read-only vs read-write data, and @code{flag_pic}. You should only + need to override this if your target has special flags that might be + set via @code{__attribute__}. + @end deftypefn + @need 2000 @node Data Output @subsection Output of Data ! @deftypevr {Target Hook} {const char *} TARGET_ASM_BYTE_OP ! @deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_HI_OP ! @deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_SI_OP ! @deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_DI_OP ! @deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_TI_OP ! @deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_HI_OP ! @deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_SI_OP ! @deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_DI_OP ! @deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_TI_OP ! These hooks specify assembly directives for creating certain kinds ! of integer object. The @code{TARGET_ASM_BYTE_OP} directive creates a ! byte-sized object, the @code{TARGET_ASM_ALIGNED_HI_OP} one creates an ! aligned two-byte object, and so on. Any of the hooks may be ! @code{NULL}, indicating that no suitable directive is available. ! The compiler will print these strings at the start of a new line, ! followed immediately by the object's initial value. In most cases, ! the string should contain a tab, a pseudo-op, and then another tab. ! @end deftypevr ! @deftypefn {Target Hook} bool TARGET_ASM_INTEGER (rtx @var{x}, unsigned int @var{size}, int @var{aligned_p}) ! The @code{assemble_integer} function uses this hook to output an ! integer object. @var{x} is the object's value, @var{size} is its size ! in bytes and @var{aligned_p} indicates whether it is aligned. The ! function should return @code{true} if it was able to output the ! object. If it returns false, @code{assemble_integer} will try to ! split the object into smaller parts. + The default implementation of this hook will use the + @code{TARGET_ASM_BYTE_OP} family of strings, returning @code{false} + when the relevant string is @code{NULL}. + @end deftypefn + + @table @code @findex OUTPUT_ADDR_CONST_EXTRA @item OUTPUT_ADDR_CONST_EXTRA (@var{stream}, @var{x}, @var{fail}) A C statement to recognize @var{rtx} patterns that *************** If @code{OUTPUT_ADDR_CONST_EXTRA} fails *** 5793,5809 **** prints an error message itself, by calling, for example, @code{output_operand_lossage}, it may just complete normally. - @findex ASM_OUTPUT_BYTE - @item ASM_OUTPUT_BYTE (@var{stream}, @var{value}) - A C statement to output to the stdio stream @var{stream} an assembler - instruction to assemble a single byte containing the number @var{value}. - - @findex ASM_BYTE_OP - @item ASM_BYTE_OP - A C string constant, including spacing, giving the pseudo-op to use for a - sequence of single-byte constants. If this macro is not defined, the - default is @code{"\t.byte\t"}. - @findex ASM_OUTPUT_ASCII @item ASM_OUTPUT_ASCII (@var{stream}, @var{ptr}, @var{len}) A C statement to output to the stdio stream @var{stream} an assembler --- 5854,5859 ---- *************** If the assembler has a @code{.ascii} pse *** 5815,5820 **** --- 5865,5876 ---- Berkeley Unix assembler, do not define the macro @code{ASM_OUTPUT_ASCII}. + @findex ASM_OUTPUT_FDESC + @item ASM_OUTPUT_FDESC (@var{stream}, @var{decl}, @var{n}) + A C statement to output word @var{n} of a function descriptor for + @var{decl}. This must be defined if @code{TARGET_VTABLE_USES_DESCRIPTORS} + is defined, and is otherwise unused. + @findex CONSTANT_POOL_BEFORE_FUNCTION @item CONSTANT_POOL_BEFORE_FUNCTION You may define this macro as a C expression. You should define the *************** used as a logical line separator by the *** 5889,5910 **** If you do not define this macro, the default is that only the character @samp{;} is treated as a logical line separator. - - - @findex ASM_OPEN_PAREN - @findex ASM_CLOSE_PAREN - @item ASM_OPEN_PAREN - @itemx ASM_CLOSE_PAREN - These macros are defined as C string constants, describing the syntax - in the assembler for grouping arithmetic expressions. The following - definitions are correct for most assemblers: - - @example - #define ASM_OPEN_PAREN "(" - #define ASM_CLOSE_PAREN ")" - @end example @end table These macros are provided by @file{real.h} for writing the definitions of @code{ASM_OUTPUT_DOUBLE} and the like: --- 5945,5959 ---- If you do not define this macro, the default is that only the character @samp{;} is treated as a logical line separator. @end table + @deftypevr {Target Hook} {const char *} TARGET_ASM_OPEN_PAREN + @deftypevrx {Target Hook} {const char *} TARGET_ASM_CLOSE_PAREN + These target hooks are C string constants, describing the syntax in the + assembler for grouping arithmetic expressions. If not overridden, they + default to normal parentheses, which is correct for most assemblers. + @end deftypevr + These macros are provided by @file{real.h} for writing the definitions of @code{ASM_OUTPUT_DOUBLE} and the like: *************** itself; before and after that, output th *** 6137,6143 **** for making that name global, and a newline. @findex ASM_WEAKEN_LABEL ! @item ASM_WEAKEN_LABEL A C statement (sans semicolon) to output to the stdio stream @var{stream} some commands that will make the label @var{name} weak; that is, available for reference from other files but only used if --- 6186,6192 ---- for making that name global, and a newline. @findex ASM_WEAKEN_LABEL ! @item ASM_WEAKEN_LABEL (@var{stream}, @var{name}) A C statement (sans semicolon) to output to the stdio stream @var{stream} some commands that will make the label @var{name} weak; that is, available for reference from other files but only used if *************** no other definition is available. Use t *** 6146,6163 **** itself; before and after that, output the additional assembler syntax for making that name weak, and a newline. ! If you don't define this macro, GCC will not support weak ! symbols and you should not define the @code{SUPPORTS_WEAK} macro. @findex SUPPORTS_WEAK @item SUPPORTS_WEAK A C expression which evaluates to true if the target supports weak symbols. If you don't define this macro, @file{defaults.h} provides a default ! definition. If @code{ASM_WEAKEN_LABEL} is defined, the default ! definition is @samp{1}; otherwise, it is @samp{0}. Define this macro if ! you want to control weak symbol support with a compiler flag such as ! @option{-melf}. @findex MAKE_DECL_ONE_ONLY (@var{decl}) @item MAKE_DECL_ONE_ONLY --- 6195,6223 ---- itself; before and after that, output the additional assembler syntax for making that name weak, and a newline. ! If you don't define this macro or @code{ASM_WEAKEN_DECL}, GCC will not ! support weak symbols and you should not define the @code{SUPPORTS_WEAK} ! macro. ! ! @findex ASM_WEAKEN_DECL ! @item ASM_WEAKEN_DECL (@var{stream}, @var{decl}, @var{name}, @var{value}) ! Combines (and replaces) the function of @code{ASM_WEAKEN_LABEL} and ! @code{ASM_OUTPUT_WEAK_ALIAS}, allowing access to the associated function ! or variable decl. If @var{value} is not @code{NULL}, this C statement ! should output to the stdio stream @var{stream} assembler code which ! defines (equates) the weak symbol @var{name} to have the value ! @var{value}. If @var{value} is @code{NULL}, it should output commands ! to make @var{name} weak. @findex SUPPORTS_WEAK @item SUPPORTS_WEAK A C expression which evaluates to true if the target supports weak symbols. If you don't define this macro, @file{defaults.h} provides a default ! definition. If either @code{ASM_WEAKEN_LABEL} or @code{ASM_WEAKEN_DECL} ! is defined, the default definition is @samp{1}; otherwise, it is ! @samp{0}. Define this macro if you want to control weak symbol support ! with a compiler flag such as @option{-melf}. @findex MAKE_DECL_ONE_ONLY (@var{decl}) @item MAKE_DECL_ONE_ONLY *************** A C statement (sans semicolon) to output *** 6209,6230 **** is customary on your operating system, as it is in most Berkeley Unix systems. This macro is used in @code{assemble_name}. - @ignore @c Seems not to exist anymore. - @findex ASM_OUTPUT_LABELREF_AS_INT - @item ASM_OUTPUT_LABELREF_AS_INT (@var{file}, @var{label}) - Define this macro for systems that use the program @code{collect2}. - The definition should be a C statement to output a word containing - a reference to the label @var{label}. - @end ignore - @findex ASM_OUTPUT_SYMBOL_REF @item ASM_OUTPUT_SYMBOL_REF (@var{stream}, @var{sym}) A C statement (sans semicolon) to output a reference to ! @code{SYMBOL_REF} @var{sym}. If not defined, @code{assemble_output} will be used to output the name of the symbol. This macro may be used to modify the way a symbol is referenced depending on information encoded by @code{ENCODE_SECTION_INFO}. @findex ASM_OUTPUT_INTERNAL_LABEL @item ASM_OUTPUT_INTERNAL_LABEL (@var{stream}, @var{prefix}, @var{num}) A C statement to output to the stdio stream @var{stream} a label whose --- 6269,6292 ---- is customary on your operating system, as it is in most Berkeley Unix systems. This macro is used in @code{assemble_name}. @findex ASM_OUTPUT_SYMBOL_REF @item ASM_OUTPUT_SYMBOL_REF (@var{stream}, @var{sym}) A C statement (sans semicolon) to output a reference to ! @code{SYMBOL_REF} @var{sym}. If not defined, @code{assemble_name} will be used to output the name of the symbol. This macro may be used to modify the way a symbol is referenced depending on information encoded by @code{ENCODE_SECTION_INFO}. + @findex ASM_OUTPUT_LABEL_REF + @item ASM_OUTPUT_LABEL_REF (@var{stream}, @var{buf}) + A C statement (sans semicolon) to output a reference to @var{buf}, the + result of ASM_GENERATE_INTERNAL_LABEL. If not defined, + @code{assemble_name} will be used to output the name of the symbol. + This macro is not used by @code{output_asm_label}, or the @code{%l} + specifier that calls it; the intention is that this macro should be set + when it is necessary to output a label differently when its address + is being taken. + @findex ASM_OUTPUT_INTERNAL_LABEL @item ASM_OUTPUT_INTERNAL_LABEL (@var{stream}, @var{prefix}, @var{num}) A C statement to output to the stdio stream @var{stream} a label whose *************** Define this macro if the target only sup *** 6349,6355 **** @findex OBJC_GEN_METHOD_LABEL @item OBJC_GEN_METHOD_LABEL (@var{buf}, @var{is_inst}, @var{class_name}, @var{cat_name}, @var{sel_name}) Define this macro to override the default assembler names used for ! Objective C methods. The default name is a unique method number followed by the name of the class (e.g.@: @samp{_1_Foo}). For methods in categories, the name of --- 6411,6417 ---- @findex OBJC_GEN_METHOD_LABEL @item OBJC_GEN_METHOD_LABEL (@var{buf}, @var{is_inst}, @var{class_name}, @var{cat_name}, @var{sel_name}) Define this macro to override the default assembler names used for ! Objective-C methods. The default name is a unique method number followed by the name of the class (e.g.@: @samp{_1_Foo}). For methods in categories, the name of *************** in a category); and @var{sel_name} is th *** 6372,6377 **** --- 6434,6453 ---- On systems where the assembler can handle quoted names, you can use this macro to provide more human-readable names. + + @findex ASM_DECLARE_CLASS_REFERENCE + @item ASM_DECLARE_CLASS_REFERENCE (@var{stream}, @var{name}) + A C statement (sans semicolon) to output to the stdio stream + @var{stream} commands to declare that the label @var{name} is an + Objective-C class reference. This is only needed for targets whose + linkers have special support for NeXT-style runtimes. + + @findex ASM_DECLARE_UNRESOLVED_REFERENCE + @item ASM_DECLARE_UNRESOLVED_REFERENCE (@var{stream}, @var{name}) + A C statement (sans semicolon) to output to the stdio stream + @var{stream} commands to declare that the label @var{name} is an + unresolved Objective-C class reference. This is only needed for targets + whose linkers have special support for NeXT-style runtimes. @end table @node Initialization *************** the constructor section to point to that *** 6426,6474 **** accumulates all these words into one contiguous @samp{.ctors} section. Termination functions are handled similarly. ! To use this method, you need appropriate definitions of the macros ! @code{ASM_OUTPUT_CONSTRUCTOR} and @code{ASM_OUTPUT_DESTRUCTOR}. Usually ! you can get them by including @file{svr4.h}. When arbitrary sections are available, there are two variants, depending upon how the code in @file{crtstuff.c} is called. On systems that ! support an @dfn{init} section which is executed at program startup, parts of @file{crtstuff.c} are compiled into that section. The program is linked by the @code{gcc} driver like this: @example ! ld -o @var{output_file} crtbegin.o @dots{} crtend.o -lgcc @end example ! The head of a function (@code{__do_global_ctors}) appears in the init ! section of @file{crtbegin.o}; the remainder of the function appears in ! the init section of @file{crtend.o}. The linker will pull these two ! parts of the section together, making a whole function. If any of the ! user's object files linked into the middle of it contribute code, then that ! code will be executed as part of the body of @code{__do_global_ctors}. To use this variant, you must define the @code{INIT_SECTION_ASM_OP} macro properly. ! If no init section is available, do not define ! @code{INIT_SECTION_ASM_OP}. Then @code{__do_global_ctors} is built into ! the text section like all other functions, and resides in ! @file{libgcc.a}. When GCC compiles any function called @code{main}, it ! inserts a procedure call to @code{__main} as the first executable code ! after the function prologue. The @code{__main} function, also defined ! in @file{libgcc2.c}, simply calls @file{__do_global_ctors}. In file formats that don't support arbitrary sections, there are again two variants. In the simplest variant, the GNU linker (GNU @code{ld}) and an `a.out' format must be used. In this case, ! @code{ASM_OUTPUT_CONSTRUCTOR} is defined to produce a @code{.stabs} entry of type @samp{N_SETT}, referencing the name @code{__CTOR_LIST__}, and with the address of the void function containing the initialization code as its value. The GNU linker recognizes this as a request to add ! the value to a ``set''; the values are accumulated, and are eventually placed in the executable as a vector in the format described above, with a leading (ignored) count and a trailing zero element. ! @code{ASM_OUTPUT_DESTRUCTOR} is handled similarly. Since no init section is available, the absence of @code{INIT_SECTION_ASM_OP} causes the compilation of @code{main} to call @code{__main} as above, starting the initialization process. --- 6502,6557 ---- accumulates all these words into one contiguous @samp{.ctors} section. Termination functions are handled similarly. ! This method will be chosen as the default by @file{target-def.h} if ! @code{TARGET_ASM_NAMED_SECTION} is defined. A target that does not ! support arbitrary sections, but does support special designated ! constructor and destructor sections may define @code{CTORS_SECTION_ASM_OP} ! and @code{DTORS_SECTION_ASM_OP} to achieve the same effect. When arbitrary sections are available, there are two variants, depending upon how the code in @file{crtstuff.c} is called. On systems that ! support a @dfn{.init} section which is executed at program startup, parts of @file{crtstuff.c} are compiled into that section. The program is linked by the @code{gcc} driver like this: @example ! ld -o @var{output_file} crti.o crtbegin.o @dots{} -lgcc crtend.o crtn.o @end example ! The prologue of a function (@code{__init}) appears in the @code{.init} ! section of @file{crti.o}; the epilogue appears in @file{crtn.o}. Likewise ! for the function @code{__fini} in the @dfn{.fini} section. Normally these ! files are provided by the operating system or by the GNU C library, but ! are provided by GCC for a few targets. ! ! The objects @file{crtbegin.o} and @file{crtend.o} are (for most targets) ! compiled from @file{crtstuff.c}. They contain, among other things, code ! fragments within the @code{.init} and @code{.fini} sections that branch ! to routines in the @code{.text} section. The linker will pull all parts ! of a section together, which results in a complete @code{__init} function ! that invokes the routines we need at startup. To use this variant, you must define the @code{INIT_SECTION_ASM_OP} macro properly. ! If no init section is available, when GCC compiles any function called ! @code{main} (or more accurately, any function designated as a program ! entry point by the language front end calling @code{expand_main_function}), ! it inserts a procedure call to @code{__main} as the first executable code ! after the function prologue. The @code{__main} function is defined ! in @file{libgcc2.c} and runs the global constructors. In file formats that don't support arbitrary sections, there are again two variants. In the simplest variant, the GNU linker (GNU @code{ld}) and an `a.out' format must be used. In this case, ! @code{TARGET_ASM_CONSTRUCTOR} is defined to produce a @code{.stabs} entry of type @samp{N_SETT}, referencing the name @code{__CTOR_LIST__}, and with the address of the void function containing the initialization code as its value. The GNU linker recognizes this as a request to add ! the value to a @dfn{set}; the values are accumulated, and are eventually placed in the executable as a vector in the format described above, with a leading (ignored) count and a trailing zero element. ! @code{TARGET_ASM_DESTRUCTOR} is handled similarly. Since no init section is available, the absence of @code{INIT_SECTION_ASM_OP} causes the compilation of @code{main} to call @code{__main} as above, starting the initialization process. *************** the initialization process. *** 6476,6512 **** The last variant uses neither arbitrary sections nor the GNU linker. This is preferable when you want to do dynamic linking and when using file formats which the GNU linker does not support, such as `ECOFF'@. In ! this case, @code{ASM_OUTPUT_CONSTRUCTOR} does not produce an ! @code{N_SETT} symbol; initialization and termination functions are ! recognized simply by their names. This requires an extra program in the ! linkage step, called @code{collect2}. This program pretends to be the ! linker, for use with GCC; it does its job by running the ordinary ! linker, but also arranges to include the vectors of initialization and ! termination functions. These functions are called via @code{__main} as ! described above. ! ! Choosing among these configuration options has been simplified by a set ! of operating-system-dependent files in the @file{config} subdirectory. ! These files define all of the relevant parameters. Usually it is ! sufficient to include one into your specific machine-dependent ! configuration file. These files are: ! ! @table @file ! @item aoutos.h ! For operating systems using the `a.out' format. ! ! @item next.h ! For operating systems using the `MachO' format. ! ! @item svr3.h ! For System V Release 3 and similar systems using `COFF' format. ! ! @item svr4.h ! For System V Release 4 and similar systems using `ELF' format. ! ! @item vms.h ! For the VMS operating system. ! @end table @ifinfo The following section describes the specific macros that control and --- 6559,6572 ---- The last variant uses neither arbitrary sections nor the GNU linker. This is preferable when you want to do dynamic linking and when using file formats which the GNU linker does not support, such as `ECOFF'@. In ! this case, @code{TARGET_HAVE_CTORS_DTORS} is false, initialization and ! termination functions are recognized simply by their names. This requires ! an extra program in the linkage step, called @command{collect2}. This program ! pretends to be the linker, for use with GCC; it does its job by running ! the ordinary linker, but also arranges to include the vectors of ! initialization and termination functions. These functions are called ! via @code{__main} as described above. In order to use this method, ! @code{use_collect2} must be defined in the target in @file{config.gcc}. @ifinfo The following section describes the specific macros that control and *************** run the initialization functions. *** 6532,6541 **** @item HAS_INIT_SECTION @findex HAS_INIT_SECTION If defined, @code{main} will not call @code{__main} as described above. ! This macro should be defined for systems that control the contents of the ! init section on a symbol-by-symbol basis, such as OSF/1, and should not ! be defined explicitly for systems that support ! @code{INIT_SECTION_ASM_OP}. @item LD_INIT_SWITCH @findex LD_INIT_SWITCH --- 6592,6600 ---- @item HAS_INIT_SECTION @findex HAS_INIT_SECTION If defined, @code{main} will not call @code{__main} as described above. ! This macro should be defined for systems that control start-up code ! on a symbol-by-symbol basis, such as OSF/1, and should not ! be defined explicitly for systems that support @code{INIT_SECTION_ASM_OP}. @item LD_INIT_SWITCH @findex LD_INIT_SWITCH *************** the following symbol is an initializatio *** 6547,6552 **** --- 6606,6629 ---- If defined, a C string constant for a switch that tells the linker that the following symbol is a finalization routine. + @item COLLECT_SHARED_INIT_FUNC (@var{stream}, @var{func}) + If defined, a C statement that will write a function that can be + automatically called when a shared library is loaded. The function + should call @var{func}, which takes no arguments. If not defined, and + the object format requires an explicit initialization function, then a + function called @code{_GLOBAL__DI} will be generated. + + This function and the following one are used by collect2 when linking a + shared library that needs constructors or destructors, or has DWARF2 + exception tables embedded in the code. + + @item COLLECT_SHARED_FINI_FUNC (@var{stream}, @var{func}) + If defined, a C statement that will write a function that can be + automatically called when a shared library is unloaded. The function + should call @var{func}, which takes no arguments. If not defined, and + the object format requires an explicit finalization function, then a + function called @code{_GLOBAL__DD} will be generated. + @item INVOKE__main @findex INVOKE__main If defined, @code{main} will call @code{__main} despite the presence of *************** If nonzero, the C++ @code{init_priority} *** 6560,6624 **** compiler should emit instructions to control the order of initialization of objects. If zero, the compiler will issue an error message upon encountering an @code{init_priority} attribute. ! @item ASM_OUTPUT_CONSTRUCTOR (@var{stream}, @var{name}) ! @findex ASM_OUTPUT_CONSTRUCTOR ! Define this macro as a C statement to output on the stream @var{stream} ! the assembler code to arrange to call the function named @var{name} at ! initialization time. ! Assume that @var{name} is the name of a C function generated ! automatically by the compiler. This function takes no arguments. Use ! the function @code{assemble_name} to output the name @var{name}; this ! performs any system-specific syntactic transformations such as adding an ! underscore. ! If you don't define this macro, nothing special is output to arrange to ! call the function. This is correct when the function will be called in ! some other manner---for example, by means of the @code{collect2} program, ! which looks through the symbol table to find these functions by their ! names. ! @item ASM_OUTPUT_DESTRUCTOR (@var{stream}, @var{name}) ! @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 initialization 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 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 @item OBJECT_FORMAT_COFF Define this macro if the system uses COFF (Common Object File Format) ! object files, so that @code{collect2} can assume this format and scan object files directly for dynamic constructor/destructor functions. @findex OBJECT_FORMAT_ROSE @item OBJECT_FORMAT_ROSE Define this macro if the system uses ROSE format object files, so that ! @code{collect2} can assume this format and scan object files directly for dynamic constructor/destructor functions. ! These macros are effective only in a native compiler; @code{collect2} as ! part of a cross compiler always uses @code{nm} for the target machine. @findex REAL_NM_FILE_NAME @item REAL_NM_FILE_NAME Define this macro as a C string constant containing the file name to use ! to execute @code{nm}. The default is to search the path normally for ! @code{nm}. If your system supports shared libraries and has a program to list the dynamic dependencies of a given library or executable, you can define --- 6637,6701 ---- compiler should emit instructions to control the order of initialization of objects. If zero, the compiler will issue an error message upon encountering an @code{init_priority} attribute. + @end table ! @deftypefn {Target Hook} bool TARGET_HAVE_CTORS_DTORS ! This value is true if the target supports some ``native'' method of ! collecting constructors and destructors to be run at startup and exit. ! It is false if we must use @command{collect2}. ! @end deftypefn ! @deftypefn {Target Hook} void TARGET_ASM_CONSTRUCTOR (rtx @var{symbol}, int @var{priority}) ! If defined, a function that outputs assembler code to arrange to call ! the function referenced by @var{symbol} at initialization time. ! Assume that @var{symbol} is a @code{SYMBOL_REF} for a function taking ! no arguments and with no return value. If the target supports initialization ! priorities, @var{priority} is a value between 0 and @code{MAX_INIT_PRIORITY}; ! otherwise it must be @code{DEFAULT_INIT_PRIORITY}. ! If this macro is not defined by the target, a suitable default will ! be chosen if (1) the target supports arbitrary section names, (2) the ! target defines @code{CTORS_SECTION_ASM_OP}, or (3) @code{USE_COLLECT2} ! is not defined. ! @end deftypefn ! ! @deftypefn {Target Hook} void TARGET_ASM_DESTRUCTOR (rtx @var{symbol}, int @var{priority}) ! This is like @code{TARGET_ASM_CONSTRUCTOR} but used for termination functions rather than initialization functions. + @end deftypefn ! If @code{TARGET_HAVE_CTORS_DTORS} is true, the initialization routine ! generated for the generated object file will have static linkage. ! If your system uses @command{collect2} as the means of processing ! constructors, then that program normally uses @command{nm} to scan ! an object file for constructor functions to be called. On certain kinds of systems, you can define these macros to make ! @command{collect2} work faster (and, in some cases, make it work at all): @table @code @findex OBJECT_FORMAT_COFF @item OBJECT_FORMAT_COFF Define this macro if the system uses COFF (Common Object File Format) ! object files, so that @command{collect2} can assume this format and scan object files directly for dynamic constructor/destructor functions. @findex OBJECT_FORMAT_ROSE @item OBJECT_FORMAT_ROSE Define this macro if the system uses ROSE format object files, so that ! @command{collect2} can assume this format and scan object files directly for dynamic constructor/destructor functions. ! These macros are effective only in a native compiler; @command{collect2} as ! part of a cross compiler always uses @command{nm} for the target machine. @findex REAL_NM_FILE_NAME @item REAL_NM_FILE_NAME Define this macro as a C string constant containing the file name to use ! to execute @command{nm}. The default is to search the path normally for ! @command{nm}. If your system supports shared libraries and has a program to list the dynamic dependencies of a given library or executable, you can define *************** termination functions in shared librarie *** 6627,6634 **** @findex LDD_SUFFIX @item LDD_SUFFIX ! Define this macro to a C string constant containing the name of the ! program which lists dynamic dependencies, like @code{"ldd"} under SunOS 4. @findex PARSE_LDD_OUTPUT @item PARSE_LDD_OUTPUT (@var{ptr}) --- 6704,6711 ---- @findex LDD_SUFFIX @item LDD_SUFFIX ! Define this macro to a C string constant containing the name of the program ! which lists dynamic dependencies, like @command{"ldd"} under SunOS 4. @findex PARSE_LDD_OUTPUT @item PARSE_LDD_OUTPUT (@var{ptr}) *************** of type @code{char *} that points to the *** 6638,6644 **** from @code{LDD_SUFFIX}. If the line lists a dynamic dependency, the code must advance @var{ptr} to the beginning of the filename on that line. Otherwise, it must set @var{ptr} to @code{NULL}. - @end table @node Instruction Output --- 6715,6720 ---- *************** that includes @samp{%}-sequences to subs *** 6681,6689 **** care of the substitution yourself. Just be sure to increment @var{ptr} over whatever text should not be output normally. ! @findex recog_operand If you need to look at the operand values, they can be found as the ! elements of @code{recog_operand}. If the macro definition does nothing, the instruction is output in the usual way. --- 6757,6765 ---- care of the substitution yourself. Just be sure to increment @var{ptr} over whatever text should not be output normally. ! @findex recog_data.operand If you need to look at the operand values, they can be found as the ! elements of @code{recog_data.operand}. If the macro definition does nothing, the instruction is output in the usual way. *************** numeric index of the assembler language *** 6818,6829 **** first variant. If this macro is defined, you may use constructs of the form ! @samp{@{option0|option1|option2@dots{}@}} in the output ! templates of patterns (@pxref{Output Template}) or in the first argument ! of @code{asm_fprintf}. This construct outputs @samp{option0}, ! @samp{option1} or @samp{option2}, etc., if the value of ! @code{ASSEMBLER_DIALECT} is zero, one or two, etc. Any special ! characters within these strings retain their usual meaning. If you do not define this macro, the characters @samp{@{}, @samp{|} and @samp{@}} do not have any special meaning when used in templates or --- 6894,6910 ---- first variant. If this macro is defined, you may use constructs of the form ! @smallexample ! @samp{@{option0|option1|option2@dots{}@}} ! @end smallexample ! @noindent ! in the output templates of patterns (@pxref{Output Template}) or in the ! first argument of @code{asm_fprintf}. This construct outputs ! @samp{option0}, @samp{option1}, @samp{option2}, etc., if the value of ! @code{ASSEMBLER_DIALECT} is zero, one, two, etc. Any special characters ! within these strings retain their usual meaning. If there are fewer ! alternatives within the braces than the value of ! @code{ASSEMBLER_DIALECT}, the construct outputs nothing. If you do not define this macro, the characters @samp{@{}, @samp{|} and @samp{@}} do not have any special meaning when used in templates or *************** This describes commands marking the star *** 6930,6986 **** region. @table @code ! @findex ASM_OUTPUT_EH_REGION_BEG ! @item ASM_OUTPUT_EH_REGION_BEG () ! A C expression to output text to mark the start of an exception region. ! ! This macro need not be defined on most platforms. ! ! @findex ASM_OUTPUT_EH_REGION_END ! @item ASM_OUTPUT_EH_REGION_END () ! A C expression to output text to mark the end of an exception region. ! ! This macro need not be defined on most platforms. ! ! @findex EXCEPTION_SECTION ! @item EXCEPTION_SECTION () ! A C expression to switch to the section in which the main ! exception table is to be placed (@pxref{Sections}). The default is a ! section named @code{.gcc_except_table} on machines that support named ! sections via @code{ASM_OUTPUT_SECTION_NAME}, otherwise if @option{-fpic} ! or @option{-fPIC} is in effect, the @code{data_section}, otherwise the ! @code{readonly_data_section}. ! ! @findex EH_FRAME_SECTION_ASM_OP ! @item EH_FRAME_SECTION_ASM_OP ! If defined, a C string constant, including spacing, for the assembler ! operation to switch to the section for exception handling frame unwind ! information. If not defined, GCC will provide a default definition if the ! target supports named sections. @file{crtstuff.c} uses this macro to ! switch to the appropriate section. You should define this symbol if your target supports DWARF 2 frame unwind information and the default definition does not work. ! @findex OMIT_EH_TABLE ! @item OMIT_EH_TABLE () ! A C expression that is nonzero if the normal exception table output ! should be omitted. ! ! This macro need not be defined on most platforms. ! ! @findex EH_TABLE_LOOKUP ! @item EH_TABLE_LOOKUP () ! Alternate runtime support for looking up an exception at runtime and ! finding the associated handler, if the default method won't work. ! ! This macro need not be defined on most platforms. ! @findex DOESNT_NEED_UNWINDER ! @item DOESNT_NEED_UNWINDER ! A C expression that decides whether or not the current function needs to ! have a function unwinder generated for it. See the file @file{except.c} ! for details on when to define this, and how. @findex MASK_RETURN_ADDR @item MASK_RETURN_ADDR --- 7011,7035 ---- region. @table @code ! @findex EH_FRAME_SECTION_NAME ! @item EH_FRAME_SECTION_NAME ! If defined, a C string constant for the name of the section containing ! exception handling frame unwind information. If not defined, GCC will ! provide a default definition if the target supports named sections. ! @file{crtstuff.c} uses this macro to switch to the appropriate section. You should define this symbol if your target supports DWARF 2 frame unwind information and the default definition does not work. ! @findex EH_FRAME_IN_DATA_SECTION ! @item EH_FRAME_IN_DATA_SECTION ! If defined, DWARF 2 frame unwind information will be placed in the ! data section even though the target supports named sections. This ! might be necessary, for instance, if the system linker does garbage ! collection and sections cannot be marked as not to be collected. ! Do not define this macro unless @code{TARGET_ASM_NAMED_SECTION} is ! also defined. @findex MASK_RETURN_ADDR @item MASK_RETURN_ADDR *************** the target supports DWARF 2 frame unwind *** 7014,7019 **** --- 7063,7086 ---- @end table + @deftypefn {Target Hook} void TARGET_ASM_EXCEPTION_SECTION () + If defined, a function that switches to the section in which the main + exception table is to be placed (@pxref{Sections}). The default is a + function that switches to a section named @code{.gcc_except_table} on + machines that support named sections via + @code{TARGET_ASM_NAMED_SECTION}, otherwise if @option{-fpic} or + @option{-fPIC} is in effect, the @code{data_section}, otherwise the + @code{readonly_data_section}. + @end deftypefn + + @deftypefn {Target Hook} void TARGET_ASM_EH_FRAME_SECTION () + If defined, a function that switches to the section in which the DWARF 2 + frame unwind information to be placed (@pxref{Sections}). The default + is a function that outputs a standard GAS section directive, if + @code{EH_FRAME_SECTION_NAME} is defined, or else a data section + directive followed by a synthetic label. + @end deftypefn + @node Alignment Output @subsection Assembler Commands for Alignment *************** the target supports DWARF 2 frame unwind *** 7021,7026 **** --- 7088,7107 ---- This describes commands for alignment. @table @code + @findex JUMP_ALIGN + @item JUMP_ALIGN (@var{label}) + The alignment (log base 2) to put in front of @var{label}, which is + a common destination of jumps and has no fallthru incoming edge. + + This macro need not be defined if you don't want any special alignment + to be done at such a time. Most machine descriptions do not currently + define the macro. + + Unless it's necessary to inspect the @var{label} parameter, it is better + to set the variable @var{align_jumps} in the target's + @code{OVERRIDE_OPTIONS}. Otherwise, you should try to honor the user's + selection in @var{align_jumps} in a @code{JUMP_ALIGN} implementation. + @findex LABEL_ALIGN_AFTER_BARRIER @item LABEL_ALIGN_AFTER_BARRIER (@var{label}) The alignment (log base 2) to put in front of @var{label}, which follows *************** This macro need not be defined if you do *** 7030,7041 **** to be done at such a time. Most machine descriptions do not currently define the macro. - Unless it's necessary to inspect the @var{label} parameter, it is better - to set the variable @var{align_jumps} in the target's - @code{OVERRIDE_OPTIONS}. Otherwise, you should try to honour the user's - selection in @var{align_jumps} in a @code{LABEL_ALIGN_AFTER_BARRIER} - implementation. - @findex LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP @item LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP The maximum number of bytes to skip when applying --- 7111,7116 ---- *************** define the macro. *** 7053,7059 **** Unless it's necessary to inspect the @var{label} parameter, it is better to set the variable @code{align_loops} in the target's ! @code{OVERRIDE_OPTIONS}. Otherwise, you should try to honour the user's selection in @code{align_loops} in a @code{LOOP_ALIGN} implementation. @findex LOOP_ALIGN_MAX_SKIP --- 7128,7134 ---- Unless it's necessary to inspect the @var{label} parameter, it is better to set the variable @code{align_loops} in the target's ! @code{OVERRIDE_OPTIONS}. Otherwise, you should try to honor the user's selection in @code{align_loops} in a @code{LOOP_ALIGN} implementation. @findex LOOP_ALIGN_MAX_SKIP *************** the maximum of the specified values is u *** 7069,7075 **** Unless it's necessary to inspect the @var{label} parameter, it is better to set the variable @code{align_labels} in the target's ! @code{OVERRIDE_OPTIONS}. Otherwise, you should try to honour the user's selection in @code{align_labels} in a @code{LABEL_ALIGN} implementation. @findex LABEL_ALIGN_MAX_SKIP --- 7144,7150 ---- Unless it's necessary to inspect the @var{label} parameter, it is better to set the variable @code{align_labels} in the target's ! @code{OVERRIDE_OPTIONS}. Otherwise, you should try to honor the user's selection in @code{align_labels} in a @code{LABEL_ALIGN} implementation. @findex LABEL_ALIGN_MAX_SKIP *************** This describes how to specify debugging *** 7120,7125 **** --- 7195,7201 ---- * DBX Hooks:: Hook macros for varying DBX format. * File Names and DBX:: Macros controlling output of file names in DBX format. * SDB and DWARF:: Macros for SDB (COFF) and DWARF formats. + * VMS Debug:: Macros for VMS debug format. @end menu @node All Debuggers *************** These macros affect all debugging format *** 7132,7142 **** @findex DBX_REGISTER_NUMBER @item DBX_REGISTER_NUMBER (@var{regno}) A C expression that returns the DBX register number for the compiler ! register number @var{regno}. In simple cases, the value of this ! expression may be @var{regno} itself. But sometimes there are some ! registers that the compiler knows about and DBX does not, or vice ! versa. In such cases, some register may need to have one number in ! the compiler and another for DBX@. If two registers have consecutive numbers inside GCC, and they can be used as a pair to hold a multiword value, then they @emph{must} have --- 7208,7218 ---- @findex DBX_REGISTER_NUMBER @item DBX_REGISTER_NUMBER (@var{regno}) A C expression that returns the DBX register number for the compiler ! register number @var{regno}. In the default macro provided, the value ! of this expression will be @var{regno} itself. But sometimes there are ! some registers that the compiler knows about and DBX does not, or vice ! versa. In such cases, some register may need to have one number in the ! compiler and another for DBX@. If two registers have consecutive numbers inside GCC, and they can be used as a pair to hold a multiword value, then they @emph{must} have *************** A C expression that returns the type of *** 7170,7177 **** produce when the user specifies just @option{-g}. Define this if you have arranged for GCC to support more than one format of debugging output. Currently, the allowable values are @code{DBX_DEBUG}, ! @code{SDB_DEBUG}, @code{DWARF_DEBUG}, @code{DWARF2_DEBUG}, and ! @code{XCOFF_DEBUG}. When the user specifies @option{-ggdb}, GCC normally also uses the value of this macro to select the debugging output format, but with two --- 7246,7253 ---- produce when the user specifies just @option{-g}. Define this if you have arranged for GCC to support more than one format of debugging output. Currently, the allowable values are @code{DBX_DEBUG}, ! @code{SDB_DEBUG}, @code{DWARF_DEBUG}, @code{DWARF2_DEBUG}, ! @code{XCOFF_DEBUG}, @code{VMS_DEBUG}, and @code{VMS_AND_DWARF2_DEBUG}. When the user specifies @option{-ggdb}, GCC normally also uses the value of this macro to select the debugging output format, but with two *************** defined, GCC uses @code{DBX_DEBUG}. *** 7182,7188 **** The value of this macro only affects the default debugging output; the user can always get a specific type of output by using @option{-gstabs}, ! @option{-gcoff}, @option{-gdwarf-1}, @option{-gdwarf-2}, or @option{-gxcoff}. @end table @node DBX Options --- 7258,7265 ---- The value of this macro only affects the default debugging output; the user can always get a specific type of output by using @option{-gstabs}, ! @option{-gcoff}, @option{-gdwarf-1}, @option{-gdwarf-2}, @option{-gxcoff}, ! or @option{-gvms}. @end table @node DBX Options *************** To support optional call frame debugging *** 7508,7514 **** define @code{INCOMING_RETURN_ADDR_RTX} and either set @code{RTX_FRAME_RELATED_P} on the prologue insns if you use RTL for the prologue, or call @code{dwarf2out_def_cfa} and @code{dwarf2out_reg_save} ! as appropriate from @code{FUNCTION_PROLOGUE} if you don't. @findex DWARF2_FRAME_INFO @item DWARF2_FRAME_INFO --- 7585,7591 ---- define @code{INCOMING_RETURN_ADDR_RTX} and either set @code{RTX_FRAME_RELATED_P} on the prologue insns if you use RTL for the prologue, or call @code{dwarf2out_def_cfa} and @code{dwarf2out_reg_save} ! as appropriate from @code{TARGET_ASM_FUNCTION_PROLOGUE} if you don't. @findex DWARF2_FRAME_INFO @item DWARF2_FRAME_INFO *************** enumeration tags that have not yet been *** 7572,7577 **** --- 7649,7672 ---- assemblers choke if forward tags are used, while some require it. @end table + @need 2000 + @node VMS Debug + @subsection Macros for VMS Debug Format + + @c prevent bad page break with this line + Here are macros for VMS debug format. + + @table @code + @findex VMS_DEBUGGING_INFO + @item VMS_DEBUGGING_INFO + Define this macro if GCC should produce debugging output for VMS + in response to the @option{-g} option. The default behavior for VMS + is to generate minimal debug info for a traceback in the absence of + @option{-g} unless explicitly overridden with @option{-g0}. This + behavior is controlled by @code{OPTIMIZATION_OPTIONS} and + @code{OVERRIDE_OPTIONS}. + @end table + @node Cross-compilation @section Cross Compilation and Floating Point @cindex cross compilation and floating point *************** Generate one or more insns to set @var{e *** 7817,7822 **** --- 7912,7996 ---- the insn(s) are to be inserted. @end table + @node Target Attributes + @section Defining target-specific uses of @code{__attribute__} + @cindex target attributes + @cindex machine attributes + @cindex attributes, target-specific + + Target-specific attributes may be defined for functions, data and types. + These are described using the following target hooks; they also need to + be documented in @file{extend.texi}. + + @deftypevr {Target Hook} {const struct attribute_spec *} TARGET_ATTRIBUTE_TABLE + If defined, this target hook points to an array of @samp{struct + attribute_spec} (defined in @file{tree.h}) specifying the machine + specific attributes for this target and some of the restrictions on the + entities to which these attributes are applied and the arguments they + take. + @end deftypevr + + @deftypefn {Target Hook} int TARGET_COMP_TYPE_ATTRIBUTES (tree @var{type1}, tree @var{type2}) + If defined, this target hook is a function which returns zero if the attributes on + @var{type1} and @var{type2} are incompatible, one if they are compatible, + and two if they are nearly compatible (which causes a warning to be + generated). If this is not defined, machine-specific attributes are + supposed always to be compatible. + @end deftypefn + + @deftypefn {Target Hook} void TARGET_SET_DEFAULT_TYPE_ATTRIBUTES (tree @var{type}) + If defined, this target hook is a function which assigns default attributes to + newly defined @var{type}. + @end deftypefn + + @deftypefn {Target Hook} tree TARGET_MERGE_TYPE_ATTRIBUTES (tree @var{type1}, tree @var{type2}) + Define this target hook if the merging of type attributes needs special + handling. If defined, the result is a list of the combined + @code{TYPE_ATTRIBUTES} of @var{type1} and @var{type2}. It is assumed + that @code{comptypes} has already been called and returned 1. This + function may call @code{merge_attributes} to handle machine-independent + merging. + @end deftypefn + + @deftypefn {Target Hook} tree TARGET_MERGE_DECL_ATTRIBUTES (tree @var{olddecl}, tree @var{newdecl}) + Define this target hook if the merging of decl attributes needs special + handling. If defined, the result is a list of the combined + @code{DECL_ATTRIBUTES} of @var{olddecl} and @var{newdecl}. + @var{newdecl} is a duplicate declaration of @var{olddecl}. Examples of + when this is needed are when one attribute overrides another, or when an + attribute is nullified by a subsequent definition. This function may + call @code{merge_attributes} to handle machine-independent merging. + + @findex TARGET_DLLIMPORT_DECL_ATTRIBUTES + If the only target-specific handling you require is @samp{dllimport} for + Windows targets, you should define the macro + @code{TARGET_DLLIMPORT_DECL_ATTRIBUTES}. This links in a function + called @code{merge_dllimport_decl_attributes} which can then be defined + as the expansion of @code{TARGET_MERGE_DECL_ATTRIBUTES}. This is done + in @file{i386/cygwin.h} and @file{i386/i386.c}, for example. + @end deftypefn + + @deftypefn {Target Hook} void TARGET_INSERT_ATTRIBUTES (tree @var{node}, tree *@var{attr_ptr}) + Define this target hook if you want to be able to add attributes to a decl + when it is being created. This is normally useful for back ends which + wish to implement a pragma by using the attributes which correspond to + the pragma's effect. The @var{node} argument is the decl which is being + created. The @var{attr_ptr} argument is a pointer to the attribute list + for this decl. The list itself should not be modified, since it may be + shared with other decls, but attributes may be chained on the head of + the list and @code{*@var{attr_ptr}} modified to point to the new + attributes, or a copy of the list may be made if further changes are + needed. + @end deftypefn + + @deftypefn {Target Hook} bool TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P (tree @var{fndecl}) + @cindex inlining + This target hook returns @code{true} if it is ok to inline @var{fndecl} + into the current function, despite its having target-specific + attributes, @code{false} otherwise. By default, if a function has a + target specific attribute attached to it, it will not be inlined. + @end deftypefn + @node Misc @section Miscellaneous Parameters @cindex parameters, miscellaneous *************** define it as the constant @code{SIGN_EXT *** 7930,7957 **** Define this macro if loading short immediate values into registers sign extends. - @findex IMPLICIT_FIX_EXPR - @item IMPLICIT_FIX_EXPR - An alias for a tree code that should be used by default for conversion - of floating point values to fixed point. Normally, - @code{FIX_ROUND_EXPR} is used. - @findex FIXUNS_TRUNC_LIKE_FIX_TRUNC @item FIXUNS_TRUNC_LIKE_FIX_TRUNC Define this macro if the same instructions that convert a floating point number to a signed fixed point number also convert validly to an unsigned one. - @findex EASY_DIV_EXPR - @item EASY_DIV_EXPR - An alias for a tree code that is the easiest kind of division to - compile code for in the general case. It may be - @code{TRUNC_DIV_EXPR}, @code{FLOOR_DIV_EXPR}, @code{CEIL_DIV_EXPR} or - @code{ROUND_DIV_EXPR}. These four division operators differ in how - they round the result to an integer. @code{EASY_DIV_EXPR} is used - when it is permissible to use any of those kinds of division and the - choice should be made on the basis of efficiency. - @findex MOVE_MAX @item MOVE_MAX The maximum number of bytes that a single instruction can move quickly --- 8104,8115 ---- *************** for a true value, but does not guarantee *** 8053,8065 **** but we do not know of any machine that has such an instruction. If you are trying to port GCC to such a machine, include an instruction to perform a logical-and of the result with 1 in the pattern for the ! comparison operators and let us know ! @ifset USING ! (@pxref{Bug Reporting,,How to Report Bugs}). ! @end ifset ! @ifclear USING ! (@pxref{Bug Reporting,,How to Report Bugs,gcc.info,Using GCC}). ! @end ifclear Often, a machine will have multiple instructions that obtain a value from a comparison (or the condition codes). Here are rules to guide the --- 8211,8217 ---- but we do not know of any machine that has such an instruction. If you are trying to port GCC to such a machine, include an instruction to perform a logical-and of the result with 1 in the pattern for the ! comparison operators and let us know at @email{gcc@@gcc.gnu.org}. Often, a machine will have multiple instructions that obtain a value from a comparison (or the condition codes). Here are rules to guide the *************** The default definition of this macro is *** 8146,8151 **** --- 8298,8315 ---- arguments that the function accepts. Some people think a larger threshold should be used on RISC machines. + @findex STDC_0_IN_SYSTEM_HEADERS + @item STDC_0_IN_SYSTEM_HEADERS + In normal operation, the preprocessor expands @code{__STDC__} to the + constant 1, to signify that GCC conforms to ISO Standard C@. On some + hosts, like Solaris, the system compiler uses a different convention, + where @code{__STDC__} is normally 0, but is 1 if the user specifies + strict conformance to the C Standard. + + Defining @code{STDC_0_IN_SYSTEM_HEADERS} makes GNU CPP follows the host + convention when processing system header files, but when processing user + files @code{__STDC__} will always expand to 1. + @findex SCCS_DIRECTIVE @item SCCS_DIRECTIVE Define this if the preprocessor should ignore @code{#sccs} directives *************** This macro is no longer supported. You *** 8168,8184 **** @findex pragma @item REGISTER_TARGET_PRAGMAS (@var{pfile}) Define this macro if you want to implement any target-specific pragmas. ! If defined, it is a C expression which makes a series of calls to the ! @code{cpp_register_pragma} and/or @code{cpp_register_pragma_space} ! functions. The @var{pfile} argument is the first argument to supply to ! these functions. The macro may also do setup required for the pragmas. The primary reason to define this macro is to provide compatibility with other compilers for the same target. In general, we discourage definition of target-specific pragmas for GCC@. ! If the pragma can be implemented by attributes then the macro ! @samp{INSERT_ATTRIBUTES} might be a useful one to define as well. Preprocessor macros that appear on pragma lines are not expanded. All @samp{#pragma} directives that do not match any registered pragma are --- 8332,8348 ---- @findex pragma @item REGISTER_TARGET_PRAGMAS (@var{pfile}) Define this macro if you want to implement any target-specific pragmas. ! If defined, it is a C expression which makes a series of calls to ! @code{cpp_register_pragma} for each pragma, with @var{pfile} passed as ! the first argument to to these functions. The macro may also do any ! setup required for the pragmas. The primary reason to define this macro is to provide compatibility with other compilers for the same target. In general, we discourage definition of target-specific pragmas for GCC@. ! If the pragma can be implemented by attributes then you should consider ! defining the target hook @samp{TARGET_INSERT_ATTRIBUTES} as well. Preprocessor macros that appear on pragma lines are not expanded. All @samp{#pragma} directives that do not match any registered pragma are *************** pragma of the form *** 8194,8210 **** #pragma [@var{space}] @var{name} @dots{} @end smallexample ! @var{space} must have been the subject of a previous call to ! @code{cpp_register_pragma_space}, or else be a null pointer. The ! callback routine receives @var{pfile} as its first argument, but must ! not use it for anything (this may change in the future). It may read ! any text after the @var{name} by making calls to @code{c_lex}. Text ! which is not read by the callback will be silently ignored. ! ! Note that both @var{space} and @var{name} are case sensitive. For an example use of this routine, see @file{c4x.h} and the callback ! routines defined in @file{c4x.c}. Note that the use of @code{c_lex} is specific to the C and C++ compilers. It will not work in the Java or Fortran compilers, or any --- 8358,8373 ---- #pragma [@var{space}] @var{name} @dots{} @end smallexample ! @var{space} is the case-sensitive namespace of the pragma, or ! @code{NULL} to put the pragma in the global namespace. The callback ! routine receives @var{pfile} as its first argument, which can be passed ! on to cpplib's functions if necessary. You can lex tokens after the ! @var{name} by calling @code{c_lex}. Tokens that are not read by the ! callback will be silently ignored. The end of the line is indicated by ! a token of type @code{CPP_EOF}. For an example use of this routine, see @file{c4x.h} and the callback ! routines defined in @file{c4x-c.c}. Note that the use of @code{c_lex} is specific to the C and C++ compilers. It will not work in the Java or Fortran compilers, or any *************** rule to the makefile fragment pointed to *** 8219,8233 **** how to build this object file. @end deftypefun - @deftypefun void cpp_register_pragma_space (cpp_reader *@var{pfile}, const char *@var{space}) - This routine establishes a namespace for pragmas, which will be - registered by subsequent calls to @code{cpp_register_pragma}. For - example, pragmas defined by the C standard are in the @samp{STDC} - namespace, and pragmas specific to GCC are in the @samp{GCC} namespace. - - For an example use of this routine in a target header, see @file{v850.h}. - @end deftypefun - @findex HANDLE_SYSV_PRAGMA @findex #pragma @findex pragma --- 8382,8387 ---- *************** pragmas @samp{#pragma pack()} and @sa *** 8239,8245 **** The pack pragma specifies the maximum alignment (in bytes) of fields within a structure, in much the same way as the @samp{__aligned__} and @samp{__packed__} @code{__attribute__}s do. A pack value of zero resets ! the behaviour to the default. The weak pragma only works if @code{SUPPORTS_WEAK} and @code{ASM_WEAKEN_LABEL} are defined. If enabled it allows the creation --- 8393,8399 ---- The pack pragma specifies the maximum alignment (in bytes) of fields within a structure, in much the same way as the @samp{__aligned__} and @samp{__packed__} @code{__attribute__}s do. A pack value of zero resets ! the behavior to the default. The weak pragma only works if @code{SUPPORTS_WEAK} and @code{ASM_WEAKEN_LABEL} are defined. If enabled it allows the creation *************** style pragmas @samp{#pragma pack(push,@v *** 8254,8320 **** pack(pop)}. The @samp{pack(push,@var{n})} pragma specifies the maximum alignment (in bytes) of fields within a structure, in much the same way as the @samp{__aligned__} and @samp{__packed__} @code{__attribute__}s do. A ! pack value of zero resets the behaviour to the default. Successive invocations of this pragma cause the previous values to be stacked, so that invocations of @samp{#pragma pack(pop)} will return to the previous value. - @findex VALID_MACHINE_DECL_ATTRIBUTE - @item VALID_MACHINE_DECL_ATTRIBUTE (@var{decl}, @var{attributes}, @var{identifier}, @var{args}) - If defined, a C expression whose value is nonzero if @var{identifier} with - arguments @var{args} is a valid machine specific attribute for @var{decl}. - The attributes in @var{attributes} have previously been assigned to @var{decl}. - - @findex VALID_MACHINE_TYPE_ATTRIBUTE - @item VALID_MACHINE_TYPE_ATTRIBUTE (@var{type}, @var{attributes}, @var{identifier}, @var{args}) - If defined, a C expression whose value is nonzero if @var{identifier} with - arguments @var{args} is a valid machine specific attribute for @var{type}. - The attributes in @var{attributes} have previously been assigned to @var{type}. - - @findex COMP_TYPE_ATTRIBUTES - @item COMP_TYPE_ATTRIBUTES (@var{type1}, @var{type2}) - If defined, a C expression whose value is zero if the attributes on - @var{type1} and @var{type2} are incompatible, one if they are compatible, - and two if they are nearly compatible (which causes a warning to be - generated). - - @findex SET_DEFAULT_TYPE_ATTRIBUTES - @item SET_DEFAULT_TYPE_ATTRIBUTES (@var{type}) - If defined, a C statement that assigns default attributes to - newly defined @var{type}. - - @findex MERGE_MACHINE_TYPE_ATTRIBUTES - @item MERGE_MACHINE_TYPE_ATTRIBUTES (@var{type1}, @var{type2}) - Define this macro if the merging of type attributes needs special handling. - If defined, the result is a list of the combined TYPE_ATTRIBUTES of - @var{type1} and @var{type2}. It is assumed that comptypes has already been - called and returned 1. - - @findex MERGE_MACHINE_DECL_ATTRIBUTES - @item MERGE_MACHINE_DECL_ATTRIBUTES (@var{olddecl}, @var{newdecl}) - Define this macro if the merging of decl attributes needs special handling. - If defined, the result is a list of the combined DECL_MACHINE_ATTRIBUTES of - @var{olddecl} and @var{newdecl}. @var{newdecl} is a duplicate declaration - of @var{olddecl}. Examples of when this is needed are when one attribute - overrides another, or when an attribute is nullified by a subsequent - definition. - - @findex INSERT_ATTRIBUTES - @item INSERT_ATTRIBUTES (@var{node}, @var{attr_ptr}, @var{prefix_ptr}) - Define this macro if you want to be able to add attributes to a decl - when it is being created. This is normally useful for back ends which - wish to implement a pragma by using the attributes which correspond to - the pragma's effect. The @var{node} argument is the decl which is being - created. The @var{attr_ptr} argument is a pointer to the attribute list - for this decl. The @var{prefix_ptr} is a pointer to the list of - attributes that have appeared after the specifiers and modifiers of the - declaration, but before the declaration proper. - - @findex SET_DEFAULT_DECL_ATTRIBUTES - @item SET_DEFAULT_DECL_ATTRIBUTES (@var{decl}, @var{attributes}) - If defined, a C statement that assigns default attributes to - newly defined @var{decl}. - @findex DOLLARS_IN_IDENTIFIERS @item DOLLARS_IN_IDENTIFIERS Define this macro to control use of the character @samp{$} in identifier --- 8408,8418 ---- pack(pop)}. The @samp{pack(push,@var{n})} pragma specifies the maximum alignment (in bytes) of fields within a structure, in much the same way as the @samp{__aligned__} and @samp{__packed__} @code{__attribute__}s do. A ! pack value of zero resets the behavior to the default. Successive invocations of this pragma cause the previous values to be stacked, so that invocations of @samp{#pragma pack(pop)} will return to the previous value. @findex DOLLARS_IN_IDENTIFIERS @item DOLLARS_IN_IDENTIFIERS Define this macro to control use of the character @samp{$} in identifier *************** symbols must be explicitly imported from *** 8415,8482 **** A C statement that adds to @var{clobbers} @code{STRING_CST} trees for any hard regs the port wishes to automatically clobber for all asms. - @findex ISSUE_RATE - @item ISSUE_RATE - A C expression that returns how many instructions can be issued at the - same time if the machine is a superscalar machine. - - @findex MD_SCHED_INIT - @item MD_SCHED_INIT (@var{file}, @var{verbose}, @var{max_ready}) - A C statement which is executed by the scheduler at the - beginning of each block of instructions that are to be scheduled. - @var{file} is either a null pointer, or a stdio stream to write any - debug output to. @var{verbose} is the verbose level provided by - @option{-fsched-verbose-@var{n}}. @var{max_ready} is the maximum number - of insns in the current scheduling region that can be live at the same - time. This can be used to allocate scratch space if it is needed. - - @findex MD_SCHED_FINISH - @item MD_SCHED_FINISH (@var{file}, @var{verbose}) - A C statement which is executed by the scheduler at the end of each block - of instructions that are to be scheduled. It can be used to perform - cleanup of any actions done by the other scheduling macros. - @var{file} is either a null pointer, or a stdio stream to write any - debug output to. @var{verbose} is the verbose level provided by - @option{-fsched-verbose-@var{n}}. - - @findex MD_SCHED_REORDER - @item MD_SCHED_REORDER (@var{file}, @var{verbose}, @var{ready}, @var{n_ready}, @var{clock}, @var{can_issue_more}) - A C statement which is executed by the scheduler after it - has scheduled the ready list to allow the machine description to reorder - it (for example to combine two small instructions together on - @samp{VLIW} machines). @var{file} is either a null pointer, or a stdio - stream to write any debug output to. @var{verbose} is the verbose level - provided by @option{-fsched-verbose-@var{n}}. @var{ready} is a pointer to - the ready list of instructions that are ready to be scheduled. - @var{n_ready} is the number of elements in the ready list. The - scheduler reads the ready list in reverse order, starting with - @var{ready}[@var{n_ready}-1] and going to @var{ready}[0]. @var{clock} - is the timer tick of the scheduler. @var{can_issue_more} is an output - parameter that is set to the number of insns that can issue this clock; - normally this is just @code{issue_rate}. See also @samp{MD_SCHED_REORDER2}. - - @findex MD_SCHED_REORDER2 - @item MD_SCHED_REORDER2 (@var{file}, @var{verbose}, @var{ready}, @var{n_ready}, @var{clock}, @var{can_issue_more}) - Like @samp{MD_SCHED_REORDER}, but called at a different time. While the - @samp{MD_SCHED_REORDER} macro is called whenever the scheduler starts a - new cycle, this macro is used immediately after @samp{MD_SCHED_VARIABLE_ISSUE} - is called; it can reorder the ready list and set @var{can_issue_more} to - determine whether there are more insns to be scheduled in the same cycle. - Defining this macro can be useful if there are frequent situations where - scheduling one insn causes other insns to become ready in the same cycle, - these other insns can then be taken into account properly. - - @findex MD_SCHED_VARIABLE_ISSUE - @item MD_SCHED_VARIABLE_ISSUE (@var{file}, @var{verbose}, @var{insn}, @var{more}) - A C statement which is executed by the scheduler after it - has scheduled an insn from the ready list. @var{file} is either a null - pointer, or a stdio stream to write any debug output to. @var{verbose} - is the verbose level provided by @option{-fsched-verbose-@var{n}}. - @var{insn} is the instruction that was scheduled. @var{more} is the - number of instructions that can be issued in the current cycle. The - @samp{MD_SCHED_VARIABLE_ISSUE} macro is responsible for updating the - value of @var{more} (typically by @samp{@var{more}--}). - @findex MAX_INTEGER_COMPUTATION_MODE @item MAX_INTEGER_COMPUTATION_MODE Define this to the largest integer machine mode which can be used for --- 8513,8518 ---- *************** converting code to conditional execution *** 8542,8552 **** A C expression to cancel any machine dependent modifications in converting code to conditional execution in the basic blocks @code{TEST_BB}, @code{THEN_BB}, @code{ELSE_BB}, and @code{JOIN_BB}. ! @findex MD_INIT_BUILTINS ! @item MD_INIT_BUILTINS ! Define this macro if you have any machine-specific built-in functions that ! need to be defined. It should be a C expression that performs the necessary setup. Machine specific built-in functions can be useful to expand special machine --- 8578,8588 ---- A C expression to cancel any machine dependent modifications in converting code to conditional execution in the basic blocks @code{TEST_BB}, @code{THEN_BB}, @code{ELSE_BB}, and @code{JOIN_BB}. + @end table ! @deftypefn {Target Hook} void TARGET_INIT_BUILTINS () ! Define this hook if you have any machine-specific built-in functions ! that need to be defined. It should be a function that performs the necessary setup. Machine specific built-in functions can be useful to expand special machine *************** instructions or prefetch instructions). *** 8557,8574 **** To create a built-in function, call the function @code{builtin_function} which is defined by the language front end. You can use any type nodes set up by @code{build_common_tree_nodes} and @code{build_common_tree_nodes_2}; ! only language front ends that use these two functions will use ! @samp{MD_INIT_BUILTINS}. ! @findex MD_EXPAND_BUILTIN ! @item MD_EXPAND_BUILTIN(@var{exp}, @var{target}, @var{subtarget}, @var{mode}, @var{ignore}) Expand a call to a machine specific built-in function that was set up by ! @samp{MD_INIT_BUILTINS}. @var{exp} is the expression for the function call; ! the result should go to @var{target} if that is convenient, and have mode ! @var{mode} if that is convenient. @var{subtarget} may be used as the target ! for computing one of @var{exp}'s operands. @var{ignore} is nonzero if the value ! is to be ignored. ! This macro should return the result of the call to the built-in function. @end table --- 8593,8680 ---- To create a built-in function, call the function @code{builtin_function} which is defined by the language front end. You can use any type nodes set up by @code{build_common_tree_nodes} and @code{build_common_tree_nodes_2}; ! only language front ends that use those two functions will call ! @samp{TARGET_INIT_BUILTINS}. ! @end deftypefn ! @deftypefn {Target Hook} rtx TARGET_EXPAND_BUILTIN (tree @var{exp}, rtx @var{target}, rtx @var{subtarget}, enum machine_mode @var{mode}, int @var{ignore}) Expand a call to a machine specific built-in function that was set up by ! @samp{TARGET_INIT_BUILTINS}. @var{exp} is the expression for the ! function call; the result should go to @var{target} if that is ! convenient, and have mode @var{mode} if that is convenient. ! @var{subtarget} may be used as the target for computing one of ! @var{exp}'s operands. @var{ignore} is nonzero if the value is to be ! ignored. This function should return the result of the call to the ! built-in function. ! @end deftypefn ! ! @table @code ! @findex MD_CAN_REDIRECT_BRANCH ! @item MD_CAN_REDIRECT_BRANCH(@var{branch1}, @var{branch2}) ! ! Take a branch insn in @var{branch1} and another in @var{branch2}. ! Return true if redirecting @var{branch1} to the destination of ! @var{branch2} is possible. ! ! On some targets, branches may have a limited range. Optimizing the ! filling of delay slots can result in branches being redirected, and this ! may in turn cause a branch offset to overflow. ! ! @findex ALLOCATE_INITIAL_VALUE ! @item ALLOCATE_INITIAL_VALUE(@var{hard_reg}) ! ! When the initial value of a hard register has been copied in a pseudo ! register, it is often not necessary to actually allocate another register ! to this pseudo register, because the original hard register or a stack slot ! it has been saved into can be used. @code{ALLOCATE_INITIAL_VALUE}, if ! defined, is called at the start of register allocation once for each ! hard register that had its initial value copied by using ! @code{get_func_hard_reg_initial_val} or @code{get_hard_reg_initial_val}. ! Possible values are @code{NULL_RTX}, if you don't want ! to do any special allocation, a @code{REG} rtx---that would typically be ! the hard register itself, if it is known not to be clobbered---or a ! @code{MEM}. ! If you are returning a @code{MEM}, this is only a hint for the allocator; ! it might decide to use another register anyways. ! You may use @code{current_function_leaf_function} in the definition of the ! macro, functions that use @code{REG_N_SETS}, to determine if the hard ! register in question will not be clobbered. ! ! @findex TARGET_OBJECT_SUFFIX ! @item TARGET_OBJECT_SUFFIX ! Define this macro to be a C string representing the suffix for object ! files on your target machine. If you do not define this macro, GCC will ! use @samp{.o} as the suffix for object files. ! ! @findex TARGET_EXECUTABLE_SUFFIX ! @item TARGET_EXECUTABLE_SUFFIX ! Define this macro to be a C string representing the suffix to be ! automatically added to executable files on your target machine. If you ! do not define this macro, GCC will use the null string as the suffix for ! executable files. ! ! @findex COLLECT_EXPORT_LIST ! @item COLLECT_EXPORT_LIST ! If defined, @code{collect2} will scan the individual object files ! specified on its command line and create an export list for the linker. ! Define this macro for systems like AIX, where the linker discards ! object files that are not referenced from @code{main} and uses export ! lists. @end table + + @deftypefn {Target Hook} bool TARGET_CANNOT_MODIFY_JUMPS_P (void) + This target hook returns @code{true} past the point in which new jump + instructions could be created. On machines that require a register for + every jump such as the SHmedia ISA of SH5, this point would typically be + reload, so this target hook should be defined to a function such as: + + @smallexample + static bool + cannot_modify_jumps_past_reload_p () + @{ + return (reload_completed || reload_in_progress); + @} + @end smallexample + @end deftypefn diff -Nrc3pad gcc-3.0.4/gcc/doc/trouble.texi gcc-3.1/gcc/doc/trouble.texi *** gcc-3.0.4/gcc/doc/trouble.texi Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/doc/trouble.texi Thu Jan 17 22:45:21 2002 *************** *** 0 **** --- 1,1462 ---- + @c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, + @c 1999, 2000, 2001 Free Software Foundation, Inc. + @c This is part of the GCC manual. + @c For copying conditions, see the file gcc.texi. + + @node Trouble + @chapter Known Causes of Trouble with GCC + @cindex bugs, known + @cindex installation trouble + @cindex known causes of trouble + + This section describes known problems that affect users of GCC@. Most + of these are not GCC bugs per se---if they were, we would fix them. + But the result for a user may be like the result of a bug. + + Some of these problems are due to bugs in other software, some are + missing features that are too much work to add, and some are places + where people's opinions differ as to what is best. + + @menu + * Actual Bugs:: Bugs we will fix later. + * Cross-Compiler Problems:: Common problems of cross compiling with GCC. + * Interoperation:: Problems using GCC with other compilers, + and with certain linkers, assemblers and debuggers. + * External Bugs:: Problems compiling certain programs. + * Incompatibilities:: GCC is incompatible with traditional C. + * Fixed Headers:: GCC uses corrected versions of system header files. + This is necessary, but doesn't always work smoothly. + * Standard Libraries:: GCC uses the system C library, which might not be + compliant with the ISO C standard. + * Disappointments:: Regrettable things we can't change, but not quite bugs. + * C++ Misunderstandings:: Common misunderstandings with GNU C++. + * Protoize Caveats:: Things to watch out for when using @code{protoize}. + * Non-bugs:: Things we think are right, but some others disagree. + * Warnings and Errors:: Which problems in your code get warnings, + and which get errors. + @end menu + + @node Actual Bugs + @section Actual Bugs We Haven't Fixed Yet + + @itemize @bullet + @item + The @code{fixincludes} script interacts badly with automounters; if the + directory of system header files is automounted, it tends to be + unmounted while @code{fixincludes} is running. This would seem to be a + bug in the automounter. We don't know any good way to work around it. + + @item + The @code{fixproto} script will sometimes add prototypes for the + @code{sigsetjmp} and @code{siglongjmp} functions that reference the + @code{jmp_buf} type before that type is defined. To work around this, + edit the offending file and place the typedef in front of the + prototypes. + + @item + @opindex pedantic-errors + When @option{-pedantic-errors} is specified, GCC will incorrectly give + an error message when a function name is specified in an expression + involving the comma operator. + @end itemize + + @node Cross-Compiler Problems + @section Cross-Compiler Problems + + You may run into problems with cross compilation on certain machines, + for several reasons. + + @itemize @bullet + @item + Cross compilation can run into trouble for certain machines because + some target machines' assemblers require floating point numbers to be + written as @emph{integer} constants in certain contexts. + + The compiler writes these integer constants by examining the floating + point value as an integer and printing that integer, because this is + simple to write and independent of the details of the floating point + representation. But this does not work if the compiler is running on + a different machine with an incompatible floating point format, or + even a different byte-ordering. + + In addition, correct constant folding of floating point values + requires representing them in the target machine's format. + (The C standard does not quite require this, but in practice + it is the only way to win.) + + It is now possible to overcome these problems by defining macros such + as @code{REAL_VALUE_TYPE}. But doing so is a substantial amount of + work for each target machine. + @xref{Cross-compilation,,Cross Compilation and Floating Point, + gccint, GNU Compiler Collection (GCC) Internals}. + + @item + At present, the program @file{mips-tfile} which adds debug + support to object files on MIPS systems does not work in a cross + compile environment. + @end itemize + + @node Interoperation + @section Interoperation + + This section lists various difficulties encountered in using GCC + together with other compilers or with the assemblers, linkers, + libraries and debuggers on certain systems. + + @itemize @bullet + @item + G++ does not do name mangling in the same way as other C++ + compilers. This means that object files compiled with one compiler + cannot be used with another. + + This effect is intentional, to protect you from more subtle problems. + Compilers differ as to many internal details of C++ implementation, + including: how class instances are laid out, how multiple inheritance is + implemented, and how virtual function calls are handled. If the name + encoding were made the same, your programs would link against libraries + provided from other compilers---but the programs would then crash when + run. Incompatible libraries are then detected at link time, rather than + at run time. + + @item + Older GDB versions sometimes fail to read the output of GCC version + 2. If you have trouble, get GDB version 4.4 or later. + + @item + @cindex DBX + DBX rejects some files produced by GCC, though it accepts similar + constructs in output from PCC@. Until someone can supply a coherent + description of what is valid DBX input and what is not, there is + nothing I can do about these problems. You are on your own. + + @item + The GNU assembler (GAS) does not support PIC@. To generate PIC code, you + must use some other assembler, such as @file{/bin/as}. + + @item + On some BSD systems, including some versions of Ultrix, use of profiling + causes static variable destructors (currently used only in C++) not to + be run. + + @ignore + @cindex @code{vfork}, for the Sun-4 + @item + There is a bug in @code{vfork} on the Sun-4 which causes the registers + of the child process to clobber those of the parent. Because of this, + programs that call @code{vfork} are likely to lose when compiled + optimized with GCC when the child code alters registers which contain + C variables in the parent. This affects variables which are live in the + parent across the call to @code{vfork}. + + If you encounter this, you can work around the problem by declaring + variables @code{volatile} in the function that calls @code{vfork}, until + the problem goes away, or by not declaring them @code{register} and not + using @option{-O} for those source files. + @end ignore + + @item + On some SGI systems, when you use @option{-lgl_s} as an option, + it gets translated magically to @samp{-lgl_s -lX11_s -lc_s}. + Naturally, this does not happen when you use GCC@. + You must specify all three options explicitly. + + @item + On a Sparc, GCC aligns all values of type @code{double} on an 8-byte + boundary, and it expects every @code{double} to be so aligned. The Sun + compiler usually gives @code{double} values 8-byte alignment, with one + exception: function arguments of type @code{double} may not be aligned. + + As a result, if a function compiled with Sun CC takes the address of an + argument of type @code{double} and passes this pointer of type + @code{double *} to a function compiled with GCC, dereferencing the + pointer may cause a fatal signal. + + One way to solve this problem is to compile your entire program with GCC@. + Another solution is to modify the function that is compiled with + Sun CC to copy the argument into a local variable; local variables + are always properly aligned. A third solution is to modify the function + that uses the pointer to dereference it via the following function + @code{access_double} instead of directly with @samp{*}: + + @smallexample + inline double + access_double (double *unaligned_ptr) + @{ + union d2i @{ double d; int i[2]; @}; + + union d2i *p = (union d2i *) unaligned_ptr; + union d2i u; + + u.i[0] = p->i[0]; + u.i[1] = p->i[1]; + + return u.d; + @} + @end smallexample + + @noindent + Storing into the pointer can be done likewise with the same union. + + @item + On Solaris, the @code{malloc} function in the @file{libmalloc.a} library + may allocate memory that is only 4 byte aligned. Since GCC on the + Sparc assumes that doubles are 8 byte aligned, this may result in a + fatal signal if doubles are stored in memory allocated by the + @file{libmalloc.a} library. + + The solution is to not use the @file{libmalloc.a} library. Use instead + @code{malloc} and related functions from @file{libc.a}; they do not have + this problem. + + @item + Sun forgot to include a static version of @file{libdl.a} with some + versions of SunOS (mainly 4.1). This results in undefined symbols when + linking static binaries (that is, if you use @option{-static}). If you + see undefined symbols @code{_dlclose}, @code{_dlsym} or @code{_dlopen} + when linking, compile and link against the file + @file{mit/util/misc/dlsym.c} from the MIT version of X windows. + + @item + The 128-bit long double format that the Sparc port supports currently + works by using the architecturally defined quad-word floating point + instructions. Since there is no hardware that supports these + instructions they must be emulated by the operating system. Long + doubles do not work in Sun OS versions 4.0.3 and earlier, because the + kernel emulator uses an obsolete and incompatible format. Long doubles + do not work in Sun OS version 4.1.1 due to a problem in a Sun library. + Long doubles do work on Sun OS versions 4.1.2 and higher, but GCC + does not enable them by default. Long doubles appear to work in Sun OS + 5.x (Solaris 2.x). + + @item + On HP-UX version 9.01 on the HP PA, the HP compiler @code{cc} does not + compile GCC correctly. We do not yet know why. However, GCC + compiled on earlier HP-UX versions works properly on HP-UX 9.01 and can + compile itself properly on 9.01. + + @item + On the HP PA machine, ADB sometimes fails to work on functions compiled + with GCC@. Specifically, it fails to work on functions that use + @code{alloca} or variable-size arrays. This is because GCC doesn't + generate HP-UX unwind descriptors for such functions. It may even be + impossible to generate them. + + @item + Debugging (@option{-g}) is not supported on the HP PA machine, unless you use + the preliminary GNU tools. + + @item + Taking the address of a label may generate errors from the HP-UX + PA assembler. GAS for the PA does not have this problem. + + @item + Using floating point parameters for indirect calls to static functions + will not work when using the HP assembler. There simply is no way for GCC + to specify what registers hold arguments for static functions when using + the HP assembler. GAS for the PA does not have this problem. + + @item + In extremely rare cases involving some very large functions you may + receive errors from the HP linker complaining about an out of bounds + unconditional branch offset. This used to occur more often in previous + versions of GCC, but is now exceptionally rare. If you should run + into it, you can work around by making your function smaller. + + @item + GCC compiled code sometimes emits warnings from the HP-UX assembler of + the form: + + @smallexample + (warning) Use of GR3 when + frame >= 8192 may cause conflict. + @end smallexample + + These warnings are harmless and can be safely ignored. + + @item + On the IBM RS/6000, compiling code of the form + + @smallexample + extern int foo; + + @dots{} foo @dots{} + + static int foo; + @end smallexample + + @noindent + will cause the linker to report an undefined symbol @code{foo}. + Although this behavior differs from most other systems, it is not a + bug because redefining an @code{extern} variable as @code{static} + is undefined in ISO C@. + + @item + In extremely rare cases involving some very large functions you may + receive errors from the AIX Assembler complaining about a displacement + that is too large. If you should run into it, you can work around by + making your function smaller. + + @item + The @file{libstdc++.a} library in GCC relies on the SVR4 dynamic + linker semantics which merges global symbols between libraries and + applications, especially necessary for C++ streams functionality. + This is not the default behavior of AIX shared libraries and dynamic + linking. @file{libstdc++.a} is built on AIX with ``runtime-linking'' + enabled so that symbol merging can occur. To utilize this feature, + the application linked with @file{libstdc++.a} must include the + @option{-Wl,-brtl} flag on the link line. G++ cannot impose this + because this option may interfere with the semantics of the user + program and users may not always use @samp{g++} to link his or her + application. Applications are not required to use the + @option{-Wl,-brtl} flag on the link line---the rest of the + @file{libstdc++.a} library which is not dependent on the symbol + merging semantics will continue to function correctly. + + @item + An application can interpose its own definition of functions for + functions invoked by @file{libstdc++.a} with ``runtime-linking'' + enabled on AIX. To accomplish this the application must be linked + with ``runtime-linking'' option and the functions explicitly must be + exported by the application (@option{-Wl,-brtl,-bE:exportfile}). + + @item + AIX on the RS/6000 provides support (NLS) for environments outside of + the United States. Compilers and assemblers use NLS to support + locale-specific representations of various objects including + floating-point numbers (@samp{.} vs @samp{,} for separating decimal + fractions). There have been problems reported where the library linked + with GCC does not produce the same floating-point formats that the + assembler accepts. If you have this problem, set the @env{LANG} + environment variable to @samp{C} or @samp{En_US}. + + @item + @opindex fdollars-in-identifiers + Even if you specify @option{-fdollars-in-identifiers}, + you cannot successfully use @samp{$} in identifiers on the RS/6000 due + to a restriction in the IBM assembler. GAS supports these + identifiers. + + @item + @opindex mno-serialize-volatile + There is an assembler bug in versions of DG/UX prior to 5.4.2.01 that + occurs when the @samp{fldcr} instruction is used. GCC uses + @samp{fldcr} on the 88100 to serialize volatile memory references. Use + the option @option{-mno-serialize-volatile} if your version of the + assembler has this bug. + + @item + On VMS, GAS versions 1.38.1 and earlier may cause spurious warning + messages from the linker. These warning messages complain of mismatched + psect attributes. You can ignore them. + + @item + On NewsOS version 3, if you include both of the files @file{stddef.h} + and @file{sys/types.h}, you get an error because there are two typedefs + of @code{size_t}. You should change @file{sys/types.h} by adding these + lines around the definition of @code{size_t}: + + @smallexample + #ifndef _SIZE_T + #define _SIZE_T + @var{actual-typedef-here} + #endif + @end smallexample + + @cindex Alliant + @item + On the Alliant, the system's own convention for returning structures + and unions is unusual, and is not compatible with GCC no matter + what options are used. + + @cindex RT PC + @cindex IBM RT PC + @item + @opindex mhc-struct-return + On the IBM RT PC, the MetaWare HighC compiler (hc) uses a different + convention for structure and union returning. Use the option + @option{-mhc-struct-return} to tell GCC to use a convention compatible + with it. + + @cindex VAX calling convention + @cindex Ultrix calling convention + @item + @opindex fcall-saved + On Ultrix, the Fortran compiler expects registers 2 through 5 to be saved + by function calls. However, the C compiler uses conventions compatible + with BSD Unix: registers 2 through 5 may be clobbered by function calls. + + GCC uses the same convention as the Ultrix C compiler. You can use + these options to produce code compatible with the Fortran compiler: + + @smallexample + -fcall-saved-r2 -fcall-saved-r3 -fcall-saved-r4 -fcall-saved-r5 + @end smallexample + + @item + On the WE32k, you may find that programs compiled with GCC do not + work with the standard shared C library. You may need to link with + the ordinary C compiler. If you do so, you must specify the following + options: + + @smallexample + -L/usr/local/lib/gcc-lib/we32k-att-sysv/2.8.1 -lgcc -lc_s + @end smallexample + + The first specifies where to find the library @file{libgcc.a} + specified with the @option{-lgcc} option. + + GCC does linking by invoking @command{ld}, just as @command{cc} does, and + there is no reason why it @emph{should} matter which compilation program + you use to invoke @command{ld}. If someone tracks this problem down, + it can probably be fixed easily. + + @item + On the Alpha, you may get assembler errors about invalid syntax as a + result of floating point constants. This is due to a bug in the C + library functions @code{ecvt}, @code{fcvt} and @code{gcvt}. Given valid + floating point numbers, they sometimes print @samp{NaN}. + + @item + On Irix 4.0.5F (and perhaps in some other versions), an assembler bug + sometimes reorders instructions incorrectly when optimization is turned + on. If you think this may be happening to you, try using the GNU + assembler; GAS version 2.1 supports ECOFF on Irix. + + @opindex noasmopt + Or use the @option{-noasmopt} option when you compile GCC with itself, + and then again when you compile your program. (This is a temporary + kludge to turn off assembler optimization on Irix.) If this proves to + be what you need, edit the assembler spec in the file @file{specs} so + that it unconditionally passes @option{-O0} to the assembler, and never + passes @option{-O2} or @option{-O3}. + @end itemize + + @node External Bugs + @section Problems Compiling Certain Programs + + @c prevent bad page break with this line + Certain programs have problems compiling. + + @itemize @bullet + @item + Parse errors may occur compiling X11 on a Decstation running Ultrix 4.2 + because of problems in DEC's versions of the X11 header files + @file{X11/Xlib.h} and @file{X11/Xutil.h}. People recommend adding + @option{-I/usr/include/mit} to use the MIT versions of the header files, + using the @option{-traditional} switch to turn off ISO C, or fixing the + header files by adding this: + + @example + #ifdef __STDC__ + #define NeedFunctionPrototypes 0 + #endif + @end example + + @item + On various 386 Unix systems derived from System V, including SCO, ISC, + and ESIX, you may get error messages about running out of virtual memory + while compiling certain programs. + + You can prevent this problem by linking GCC with the GNU malloc + (which thus replaces the malloc that comes with the system). GNU malloc + is available as a separate package, and also in the file + @file{src/gmalloc.c} in the GNU Emacs 19 distribution. + + If you have installed GNU malloc as a separate library package, use this + option when you relink GCC: + + @example + MALLOC=/usr/local/lib/libgmalloc.a + @end example + + Alternatively, if you have compiled @file{gmalloc.c} from Emacs 19, copy + the object file to @file{gmalloc.o} and use this option when you relink + GCC: + + @example + MALLOC=gmalloc.o + @end example + @end itemize + + @node Incompatibilities + @section Incompatibilities of GCC + @cindex incompatibilities of GCC + @opindex traditional + + There are several noteworthy incompatibilities between GNU C and K&R + (non-ISO) versions of C@. The @option{-traditional} option + eliminates many of these incompatibilities, @emph{but not all}, by + telling GCC to behave like a K&R C compiler. + + @itemize @bullet + @cindex string constants + @cindex read-only strings + @cindex shared strings + @item + GCC normally makes string constants read-only. If several + identical-looking string constants are used, GCC stores only one + copy of the string. + + @cindex @code{mktemp}, and constant strings + One consequence is that you cannot call @code{mktemp} with a string + constant argument. The function @code{mktemp} always alters the + string its argument points to. + + @cindex @code{sscanf}, and constant strings + @cindex @code{fscanf}, and constant strings + @cindex @code{scanf}, and constant strings + Another consequence is that @code{sscanf} does not work on some systems + when passed a string constant as its format control string or input. + This is because @code{sscanf} incorrectly tries to write into the string + constant. Likewise @code{fscanf} and @code{scanf}. + + @opindex fwritable-strings + The best solution to these problems is to change the program to use + @code{char}-array variables with initialization strings for these + purposes instead of string constants. But if this is not possible, + you can use the @option{-fwritable-strings} flag, which directs GCC + to handle string constants the same way most C compilers do. + @option{-traditional} also has this effect, among others. + + @item + @code{-2147483648} is positive. + + This is because 2147483648 cannot fit in the type @code{int}, so + (following the ISO C rules) its data type is @code{unsigned long int}. + Negating this value yields 2147483648 again. + + @item + GCC does not substitute macro arguments when they appear inside of + string constants. For example, the following macro in GCC + + @example + #define foo(a) "a" + @end example + + @noindent + will produce output @code{"a"} regardless of what the argument @var{a} is. + + The @option{-traditional} option directs GCC to handle such cases + (among others) in the old-fashioned (non-ISO) fashion. + + @cindex @code{setjmp} incompatibilities + @cindex @code{longjmp} incompatibilities + @item + When you use @code{setjmp} and @code{longjmp}, the only automatic + variables guaranteed to remain valid are those declared + @code{volatile}. This is a consequence of automatic register + allocation. Consider this function: + + @example + jmp_buf j; + + foo () + @{ + int a, b; + + a = fun1 (); + if (setjmp (j)) + return a; + + a = fun2 (); + /* @r{@code{longjmp (j)} may occur in @code{fun3}.} */ + return a + fun3 (); + @} + @end example + + Here @code{a} may or may not be restored to its first value when the + @code{longjmp} occurs. If @code{a} is allocated in a register, then + its first value is restored; otherwise, it keeps the last value stored + in it. + + @opindex W + If you use the @option{-W} option with the @option{-O} option, you will + get a warning when GCC thinks such a problem might be possible. + + The @option{-traditional} option directs GCC to put variables in + the stack by default, rather than in registers, in functions that + call @code{setjmp}. This results in the behavior found in + traditional C compilers. + + @item + Programs that use preprocessing directives in the middle of macro + arguments do not work with GCC@. For example, a program like this + will not work: + + @example + @group + foobar ( + #define luser + hack) + @end group + @end example + + ISO C does not permit such a construct. It would make sense to support + it when @option{-traditional} is used, but it is too much work to + implement. + + @item + K&R compilers allow comments to cross over an inclusion boundary + (i.e.@: started in an include file and ended in the including file). I think + this would be quite ugly and can't imagine it could be needed. + + @cindex external declaration scope + @cindex scope of external declarations + @cindex declaration scope + @item + Declarations of external variables and functions within a block apply + only to the block containing the declaration. In other words, they + have the same scope as any other declaration in the same place. + + In some other C compilers, a @code{extern} declaration affects all the + rest of the file even if it happens within a block. + + The @option{-traditional} option directs GCC to treat all @code{extern} + declarations as global, like traditional compilers. + + @item + In traditional C, you can combine @code{long}, etc., with a typedef name, + as shown here: + + @example + typedef int foo; + typedef long foo bar; + @end example + + In ISO C, this is not allowed: @code{long} and other type modifiers + require an explicit @code{int}. Because this criterion is expressed + by Bison grammar rules rather than C code, the @option{-traditional} + flag cannot alter it. + + @cindex typedef names as function parameters + @item + PCC allows typedef names to be used as function parameters. The + difficulty described immediately above applies here too. + + @item + When in @option{-traditional} mode, GCC allows the following erroneous + pair of declarations to appear together in a given scope: + + @example + typedef int foo; + typedef foo foo; + @end example + + @item + GCC treats all characters of identifiers as significant, even when in + @option{-traditional} mode. According to K&R-1 (2.2), ``No more than the + first eight characters are significant, although more may be used.''. + Also according to K&R-1 (2.2), ``An identifier is a sequence of letters + and digits; the first character must be a letter. The underscore _ + counts as a letter.'', but GCC also allows dollar signs in identifiers. + + @cindex whitespace + @item + PCC allows whitespace in the middle of compound assignment operators + such as @samp{+=}. GCC, following the ISO standard, does not + allow this. The difficulty described immediately above applies here + too. + + @cindex apostrophes + @cindex ' + @item + GCC complains about unterminated character constants inside of + preprocessing conditionals that fail. Some programs have English + comments enclosed in conditionals that are guaranteed to fail; if these + comments contain apostrophes, GCC will probably report an error. For + example, this code would produce an error: + + @example + #if 0 + You can't expect this to work. + #endif + @end example + + The best solution to such a problem is to put the text into an actual + C comment delimited by @samp{/*@dots{}*/}. However, + @option{-traditional} suppresses these error messages. + + @item + Many user programs contain the declaration @samp{long time ();}. In the + past, the system header files on many systems did not actually declare + @code{time}, so it did not matter what type your program declared it to + return. But in systems with ISO C headers, @code{time} is declared to + return @code{time_t}, and if that is not the same as @code{long}, then + @samp{long time ();} is erroneous. + + The solution is to change your program to use appropriate system headers + (@code{} on systems with ISO C headers) and not to declare + @code{time} if the system header files declare it, or failing that to + use @code{time_t} as the return type of @code{time}. + + @cindex @code{float} as function value type + @item + When compiling functions that return @code{float}, PCC converts it to + a double. GCC actually returns a @code{float}. If you are concerned + with PCC compatibility, you should declare your functions to return + @code{double}; you might as well say what you mean. + + @cindex structures + @cindex unions + @item + When compiling functions that return structures or unions, GCC + output code normally uses a method different from that used on most + versions of Unix. As a result, code compiled with GCC cannot call + a structure-returning function compiled with PCC, and vice versa. + + The method used by GCC is as follows: a structure or union which is + 1, 2, 4 or 8 bytes long is returned like a scalar. A structure or union + with any other size is stored into an address supplied by the caller + (usually in a special, fixed register, but on some machines it is passed + on the stack). The machine-description macros @code{STRUCT_VALUE} and + @code{STRUCT_INCOMING_VALUE} tell GCC where to pass this address. + + By contrast, PCC on most target machines returns structures and unions + of any size by copying the data into an area of static storage, and then + returning the address of that storage as if it were a pointer value. + The caller must copy the data from that memory area to the place where + the value is wanted. GCC does not use this method because it is + slower and nonreentrant. + + On some newer machines, PCC uses a reentrant convention for all + structure and union returning. GCC on most of these machines uses a + compatible convention when returning structures and unions in memory, + but still returns small structures and unions in registers. + + @opindex fpcc-struct-return + You can tell GCC to use a compatible convention for all structure and + union returning with the option @option{-fpcc-struct-return}. + + @cindex preprocessing tokens + @cindex preprocessing numbers + @item + GCC complains about program fragments such as @samp{0x74ae-0x4000} + which appear to be two hexadecimal constants separated by the minus + operator. Actually, this string is a single @dfn{preprocessing token}. + Each such token must correspond to one token in C@. Since this does not, + GCC prints an error message. Although it may appear obvious that what + is meant is an operator and two values, the ISO C standard specifically + requires that this be treated as erroneous. + + A @dfn{preprocessing token} is a @dfn{preprocessing number} if it + begins with a digit and is followed by letters, underscores, digits, + periods and @samp{e+}, @samp{e-}, @samp{E+}, @samp{E-}, @samp{p+}, + @samp{p-}, @samp{P+}, or @samp{P-} character sequences. (In strict C89 + mode, the sequences @samp{p+}, @samp{p-}, @samp{P+} and @samp{P-} cannot + appear in preprocessing numbers.) + + To make the above program fragment valid, place whitespace in front of + the minus sign. This whitespace will end the preprocessing number. + @end itemize + + @node Fixed Headers + @section Fixed Header Files + + GCC needs to install corrected versions of some system header files. + This is because most target systems have some header files that won't + work with GCC unless they are changed. Some have bugs, some are + incompatible with ISO C, and some depend on special features of other + compilers. + + Installing GCC automatically creates and installs the fixed header + files, by running a program called @code{fixincludes} (or for certain + targets an alternative such as @code{fixinc.svr4}). Normally, you + don't need to pay attention to this. But there are cases where it + doesn't do the right thing automatically. + + @itemize @bullet + @item + If you update the system's header files, such as by installing a new + system version, the fixed header files of GCC are not automatically + updated. The easiest way to update them is to reinstall GCC@. (If + you want to be clever, look in the makefile and you can find a + shortcut.) + + @item + On some systems, in particular SunOS 4, header file directories contain + machine-specific symbolic links in certain places. This makes it + possible to share most of the header files among hosts running the + same version of SunOS 4 on different machine models. + + The programs that fix the header files do not understand this special + way of using symbolic links; therefore, the directory of fixed header + files is good only for the machine model used to build it. + + In SunOS 4, only programs that look inside the kernel will notice the + difference between machine models. Therefore, for most purposes, you + need not be concerned about this. + + It is possible to make separate sets of fixed header files for the + different machine models, and arrange a structure of symbolic links so + as to use the proper set, but you'll have to do this by hand. + + @item + On Lynxos, GCC by default does not fix the header files. This is + because bugs in the shell cause the @code{fixincludes} script to fail. + + This means you will encounter problems due to bugs in the system header + files. It may be no comfort that they aren't GCC's fault, but it + does mean that there's nothing for us to do about them. + @end itemize + + @node Standard Libraries + @section Standard Libraries + + @opindex Wall + GCC by itself attempts to be a conforming freestanding implementation. + @xref{Standards,,Language Standards Supported by GCC}, for details of + what this means. Beyond the library facilities required of such an + implementation, the rest of the C library is supplied by the vendor of + the operating system. If that C library doesn't conform to the C + standards, then your programs might get warnings (especially when using + @option{-Wall}) that you don't expect. + + For example, the @code{sprintf} function on SunOS 4.1.3 returns + @code{char *} while the C standard says that @code{sprintf} returns an + @code{int}. The @code{fixincludes} program could make the prototype for + this function match the Standard, but that would be wrong, since the + function will still return @code{char *}. + + If you need a Standard compliant library, then you need to find one, as + GCC does not provide one. The GNU C library (called @code{glibc}) + provides ISO C, POSIX, BSD, SystemV and X/Open compatibility for + GNU/Linux and HURD-based GNU systems; no recent version of it supports + other systems, though some very old versions did. Version 2.2 of the + GNU C library includes nearly complete C99 support. You could also ask + your operating system vendor if newer libraries are available. + + @node Disappointments + @section Disappointments and Misunderstandings + + These problems are perhaps regrettable, but we don't know any practical + way around them. + + @itemize @bullet + @item + Certain local variables aren't recognized by debuggers when you compile + with optimization. + + This occurs because sometimes GCC optimizes the variable out of + existence. There is no way to tell the debugger how to compute the + value such a variable ``would have had'', and it is not clear that would + be desirable anyway. So GCC simply does not mention the eliminated + variable when it writes debugging information. + + You have to expect a certain amount of disagreement between the + executable and your source code, when you use optimization. + + @cindex conflicting types + @cindex scope of declaration + @item + Users often think it is a bug when GCC reports an error for code + like this: + + @example + int foo (struct mumble *); + + struct mumble @{ @dots{} @}; + + int foo (struct mumble *x) + @{ @dots{} @} + @end example + + This code really is erroneous, because the scope of @code{struct + mumble} in the prototype is limited to the argument list containing it. + It does not refer to the @code{struct mumble} defined with file scope + immediately below---they are two unrelated types with similar names in + different scopes. + + But in the definition of @code{foo}, the file-scope type is used + because that is available to be inherited. Thus, the definition and + the prototype do not match, and you get an error. + + This behavior may seem silly, but it's what the ISO standard specifies. + It is easy enough for you to make your code work by moving the + definition of @code{struct mumble} above the prototype. It's not worth + being incompatible with ISO C just to avoid an error for the example + shown above. + + @item + Accesses to bit-fields even in volatile objects works by accessing larger + objects, such as a byte or a word. You cannot rely on what size of + object is accessed in order to read or write the bit-field; it may even + vary for a given bit-field according to the precise usage. + + If you care about controlling the amount of memory that is accessed, use + volatile but do not use bit-fields. + + @item + GCC comes with shell scripts to fix certain known problems in system + header files. They install corrected copies of various header files in + a special directory where only GCC will normally look for them. The + scripts adapt to various systems by searching all the system header + files for the problem cases that we know about. + + If new system header files are installed, nothing automatically arranges + to update the corrected header files. You will have to reinstall GCC + to fix the new header files. More specifically, go to the build + directory and delete the files @file{stmp-fixinc} and + @file{stmp-headers}, and the subdirectory @code{include}; then do + @samp{make install} again. + + @item + @cindex floating point precision + On 68000 and x86 systems, for instance, you can get paradoxical results + if you test the precise values of floating point numbers. For example, + you can find that a floating point value which is not a NaN is not equal + to itself. This results from the fact that the floating point registers + hold a few more bits of precision than fit in a @code{double} in memory. + Compiled code moves values between memory and floating point registers + at its convenience, and moving them into memory truncates them. + + @opindex ffloat-store + You can partially avoid this problem by using the @option{-ffloat-store} + option (@pxref{Optimize Options}). + + @item + On the MIPS, variable argument functions using @file{varargs.h} + cannot have a floating point value for the first argument. The + reason for this is that in the absence of a prototype in scope, + if the first argument is a floating point, it is passed in a + floating point register, rather than an integer register. + + If the code is rewritten to use the ISO standard @file{stdarg.h} + method of variable arguments, and the prototype is in scope at + the time of the call, everything will work fine. + + @item + On the H8/300 and H8/300H, variable argument functions must be + implemented using the ISO standard @file{stdarg.h} method of + variable arguments. Furthermore, calls to functions using @file{stdarg.h} + variable arguments must have a prototype for the called function + in scope at the time of the call. + + @item + On AIX and other platforms without weak symbol support, templates + need to be instantiated explicitly and symbols for static members + of templates will not be generated. + @end itemize + + @node C++ Misunderstandings + @section Common Misunderstandings with GNU C++ + + @cindex misunderstandings in C++ + @cindex surprises in C++ + @cindex C++ misunderstandings + C++ is a complex language and an evolving one, and its standard + definition (the ISO C++ standard) was only recently completed. As a + result, your C++ compiler may occasionally surprise you, even when its + behavior is correct. This section discusses some areas that frequently + give rise to questions of this sort. + + @menu + * Static Definitions:: Static member declarations are not definitions + * Temporaries:: Temporaries may vanish before you expect + * Copy Assignment:: Copy Assignment operators copy virtual bases twice + @end menu + + @node Static Definitions + @subsection Declare @emph{and} Define Static Members + + @cindex C++ static data, declaring and defining + @cindex static data in C++, declaring and defining + @cindex declaring static data in C++ + @cindex defining static data in C++ + When a class has static data members, it is not enough to @emph{declare} + the static member; you must also @emph{define} it. For example: + + @example + class Foo + @{ + @dots{} + void method(); + static int bar; + @}; + @end example + + This declaration only establishes that the class @code{Foo} has an + @code{int} named @code{Foo::bar}, and a member function named + @code{Foo::method}. But you still need to define @emph{both} + @code{method} and @code{bar} elsewhere. According to the ISO + standard, you must supply an initializer in one (and only one) source + file, such as: + + @example + int Foo::bar = 0; + @end example + + Other C++ compilers may not correctly implement the standard behavior. + As a result, when you switch to @code{g++} from one of these compilers, + you may discover that a program that appeared to work correctly in fact + does not conform to the standard: @code{g++} reports as undefined + symbols any static data members that lack definitions. + + @node Temporaries + @subsection Temporaries May Vanish Before You Expect + + @cindex temporaries, lifetime of + @cindex portions of temporary objects, pointers to + It is dangerous to use pointers or references to @emph{portions} of a + temporary object. The compiler may very well delete the object before + you expect it to, leaving a pointer to garbage. The most common place + where this problem crops up is in classes like string classes, + especially ones that define a conversion function to type @code{char *} + or @code{const char *}---which is one reason why the standard + @code{string} class requires you to call the @code{c_str} member + function. However, any class that returns a pointer to some internal + structure is potentially subject to this problem. + + For example, a program may use a function @code{strfunc} that returns + @code{string} objects, and another function @code{charfunc} that + operates on pointers to @code{char}: + + @example + string strfunc (); + void charfunc (const char *); + + void + f () + @{ + const char *p = strfunc().c_str(); + @dots{} + charfunc (p); + @dots{} + charfunc (p); + @} + @end example + + @noindent + In this situation, it may seem reasonable to save a pointer to the C + string returned by the @code{c_str} member function and use that rather + than call @code{c_str} repeatedly. However, the temporary string + created by the call to @code{strfunc} is destroyed after @code{p} is + initialized, at which point @code{p} is left pointing to freed memory. + + Code like this may run successfully under some other compilers, + particularly obsolete cfront-based compilers that delete temporaries + along with normal local variables. However, the GNU C++ behavior is + standard-conforming, so if your program depends on late destruction of + temporaries it is not portable. + + The safe way to write such code is to give the temporary a name, which + forces it to remain until the end of the scope of the name. For + example: + + @example + string& tmp = strfunc (); + charfunc (tmp.c_str ()); + @end example + + @node Copy Assignment + @subsection Implicit Copy-Assignment for Virtual Bases + + When a base class is virtual, only one subobject of the base class + belongs to each full object. Also, the constructors and destructors are + invoked only once, and called from the most-derived class. However, such + objects behave unspecified when being assigned. For example: + + @example + struct Base@{ + char *name; + Base(char *n) : name(strdup(n))@{@} + Base& operator= (const Base& other)@{ + free (name); + name = strdup (other.name); + @} + @}; + + struct A:virtual Base@{ + int val; + A():Base("A")@{@} + @}; + + struct B:virtual Base@{ + int bval; + B():Base("B")@{@} + @}; + + struct Derived:public A, public B@{ + Derived():Base("Derived")@{@} + @}; + + void func(Derived &d1, Derived &d2) + @{ + d1 = d2; + @} + @end example + + The C++ standard specifies that @samp{Base::Base} is only called once + when constructing or copy-constructing a Derived object. It is + unspecified whether @samp{Base::operator=} is called more than once when + the implicit copy-assignment for Derived objects is invoked (as it is + inside @samp{func} in the example). + + g++ implements the ``intuitive'' algorithm for copy-assignment: assign all + direct bases, then assign all members. In that algorithm, the virtual + base subobject can be encountered many times. In the example, copying + proceeds in the following order: @samp{val}, @samp{name} (via + @code{strdup}), @samp{bval}, and @samp{name} again. + + If application code relies on copy-assignment, a user-defined + copy-assignment operator removes any uncertainties. With such an + operator, the application can define whether and how the virtual base + subobject is assigned. + + @node Protoize Caveats + @section Caveats of using @command{protoize} + + The conversion programs @command{protoize} and @command{unprotoize} can + sometimes change a source file in a way that won't work unless you + rearrange it. + + @itemize @bullet + @item + @command{protoize} can insert references to a type name or type tag before + the definition, or in a file where they are not defined. + + If this happens, compiler error messages should show you where the new + references are, so fixing the file by hand is straightforward. + + @item + There are some C constructs which @command{protoize} cannot figure out. + For example, it can't determine argument types for declaring a + pointer-to-function variable; this you must do by hand. @command{protoize} + inserts a comment containing @samp{???} each time it finds such a + variable; so you can find all such variables by searching for this + string. ISO C does not require declaring the argument types of + pointer-to-function types. + + @item + Using @command{unprotoize} can easily introduce bugs. If the program + relied on prototypes to bring about conversion of arguments, these + conversions will not take place in the program without prototypes. + One case in which you can be sure @command{unprotoize} is safe is when + you are removing prototypes that were made with @command{protoize}; if + the program worked before without any prototypes, it will work again + without them. + + @opindex Wconversion + You can find all the places where this problem might occur by compiling + the program with the @option{-Wconversion} option. It prints a warning + whenever an argument is converted. + + @item + Both conversion programs can be confused if there are macro calls in and + around the text to be converted. In other words, the standard syntax + for a declaration or definition must not result from expanding a macro. + This problem is inherent in the design of C and cannot be fixed. If + only a few functions have confusing macro calls, you can easily convert + them manually. + + @item + @command{protoize} cannot get the argument types for a function whose + definition was not actually compiled due to preprocessing conditionals. + When this happens, @command{protoize} changes nothing in regard to such + a function. @command{protoize} tries to detect such instances and warn + about them. + + You can generally work around this problem by using @command{protoize} step + by step, each time specifying a different set of @option{-D} options for + compilation, until all of the functions have been converted. There is + no automatic way to verify that you have got them all, however. + + @item + Confusion may result if there is an occasion to convert a function + declaration or definition in a region of source code where there is more + than one formal parameter list present. Thus, attempts to convert code + containing multiple (conditionally compiled) versions of a single + function header (in the same vicinity) may not produce the desired (or + expected) results. + + If you plan on converting source files which contain such code, it is + recommended that you first make sure that each conditionally compiled + region of source code which contains an alternative function header also + contains at least one additional follower token (past the final right + parenthesis of the function header). This should circumvent the + problem. + + @item + @command{unprotoize} can become confused when trying to convert a function + definition or declaration which contains a declaration for a + pointer-to-function formal argument which has the same name as the + function being defined or declared. We recommend you avoid such choices + of formal parameter names. + + @item + You might also want to correct some of the indentation by hand and break + long lines. (The conversion programs don't write lines longer than + eighty characters in any case.) + @end itemize + + @node Non-bugs + @section Certain Changes We Don't Want to Make + + This section lists changes that people frequently request, but which + we do not make because we think GCC is better without them. + + @itemize @bullet + @item + Checking the number and type of arguments to a function which has an + old-fashioned definition and no prototype. + + Such a feature would work only occasionally---only for calls that appear + in the same file as the called function, following the definition. The + only way to check all calls reliably is to add a prototype for the + function. But adding a prototype eliminates the motivation for this + feature. So the feature is not worthwhile. + + @item + Warning about using an expression whose type is signed as a shift count. + + Shift count operands are probably signed more often than unsigned. + Warning about this would cause far more annoyance than good. + + @item + Warning about assigning a signed value to an unsigned variable. + + Such assignments must be very common; warning about them would cause + more annoyance than good. + + @item + Warning when a non-void function value is ignored. + + Coming as I do from a Lisp background, I balk at the idea that there is + something dangerous about discarding a value. There are functions that + return values which some callers may find useful; it makes no sense to + clutter the program with a cast to @code{void} whenever the value isn't + useful. + + @item + @opindex fshort-enums + Making @option{-fshort-enums} the default. + + This would cause storage layout to be incompatible with most other C + compilers. And it doesn't seem very important, given that you can get + the same result in other ways. The case where it matters most is when + the enumeration-valued object is inside a structure, and in that case + you can specify a field width explicitly. + + @item + Making bit-fields unsigned by default on particular machines where ``the + ABI standard'' says to do so. + + The ISO C standard leaves it up to the implementation whether a bit-field + declared plain @code{int} is signed or not. This in effect creates two + alternative dialects of C@. + + @opindex fsigned-bitfields + @opindex funsigned-bitfields + The GNU C compiler supports both dialects; you can specify the signed + dialect with @option{-fsigned-bitfields} and the unsigned dialect with + @option{-funsigned-bitfields}. However, this leaves open the question of + which dialect to use by default. + + Currently, the preferred dialect makes plain bit-fields signed, because + this is simplest. Since @code{int} is the same as @code{signed int} in + every other context, it is cleanest for them to be the same in bit-fields + as well. + + Some computer manufacturers have published Application Binary Interface + standards which specify that plain bit-fields should be unsigned. It is + a mistake, however, to say anything about this issue in an ABI@. This is + because the handling of plain bit-fields distinguishes two dialects of C@. + Both dialects are meaningful on every type of machine. Whether a + particular object file was compiled using signed bit-fields or unsigned + is of no concern to other object files, even if they access the same + bit-fields in the same data structures. + + A given program is written in one or the other of these two dialects. + The program stands a chance to work on most any machine if it is + compiled with the proper dialect. It is unlikely to work at all if + compiled with the wrong dialect. + + Many users appreciate the GNU C compiler because it provides an + environment that is uniform across machines. These users would be + inconvenienced if the compiler treated plain bit-fields differently on + certain machines. + + Occasionally users write programs intended only for a particular machine + type. On these occasions, the users would benefit if the GNU C compiler + were to support by default the same dialect as the other compilers on + that machine. But such applications are rare. And users writing a + program to run on more than one type of machine cannot possibly benefit + from this kind of compatibility. + + This is why GCC does and will treat plain bit-fields in the same + fashion on all types of machines (by default). + + There are some arguments for making bit-fields unsigned by default on all + machines. If, for example, this becomes a universal de facto standard, + it would make sense for GCC to go along with it. This is something + to be considered in the future. + + (Of course, users strongly concerned about portability should indicate + explicitly in each bit-field whether it is signed or not. In this way, + they write programs which have the same meaning in both C dialects.) + + @item + @opindex ansi + @opindex traditional + @opindex std + Undefining @code{__STDC__} when @option{-ansi} is not used. + + Currently, GCC defines @code{__STDC__} as long as you don't use + @option{-traditional}. This provides good results in practice. + + Programmers normally use conditionals on @code{__STDC__} to ask whether + it is safe to use certain features of ISO C, such as function + prototypes or ISO token concatenation. Since plain @command{gcc} supports + all the features of ISO C, the correct answer to these questions is + ``yes''. + + Some users try to use @code{__STDC__} to check for the availability of + certain library facilities. This is actually incorrect usage in an ISO + C program, because the ISO C standard says that a conforming + freestanding implementation should define @code{__STDC__} even though it + does not have the library facilities. @samp{gcc -ansi -pedantic} is a + conforming freestanding implementation, and it is therefore required to + define @code{__STDC__}, even though it does not come with an ISO C + library. + + Sometimes people say that defining @code{__STDC__} in a compiler that + does not completely conform to the ISO C standard somehow violates the + standard. This is illogical. The standard is a standard for compilers + that claim to support ISO C, such as @samp{gcc -ansi}---not for other + compilers such as plain @command{gcc}. Whatever the ISO C standard says + is relevant to the design of plain @command{gcc} without @option{-ansi} only + for pragmatic reasons, not as a requirement. + + GCC normally defines @code{__STDC__} to be 1, and in addition + defines @code{__STRICT_ANSI__} if you specify the @option{-ansi} option, + or a @option{-std} option for strict conformance to some version of ISO C@. + On some hosts, system include files use a different convention, where + @code{__STDC__} is normally 0, but is 1 if the user specifies strict + conformance to the C Standard. GCC follows the host convention when + processing system include files, but when processing user files it follows + the usual GNU C convention. + + @item + Undefining @code{__STDC__} in C++. + + Programs written to compile with C++-to-C translators get the + value of @code{__STDC__} that goes with the C compiler that is + subsequently used. These programs must test @code{__STDC__} + to determine what kind of C preprocessor that compiler uses: + whether they should concatenate tokens in the ISO C fashion + or in the traditional fashion. + + These programs work properly with GNU C++ if @code{__STDC__} is defined. + They would not work otherwise. + + In addition, many header files are written to provide prototypes in ISO + C but not in traditional C@. Many of these header files can work without + change in C++ provided @code{__STDC__} is defined. If @code{__STDC__} + is not defined, they will all fail, and will all need to be changed to + test explicitly for C++ as well. + + @item + Deleting ``empty'' loops. + + Historically, GCC has not deleted ``empty'' loops under the + assumption that the most likely reason you would put one in a program is + to have a delay, so deleting them will not make real programs run any + faster. + + However, the rationale here is that optimization of a nonempty loop + cannot produce an empty one, which holds for C but is not always the + case for C++. + + @opindex funroll-loops + Moreover, with @option{-funroll-loops} small ``empty'' loops are already + removed, so the current behavior is both sub-optimal and inconsistent + and will change in the future. + + @item + Making side effects happen in the same order as in some other compiler. + + @cindex side effects, order of evaluation + @cindex order of evaluation, side effects + It is never safe to depend on the order of evaluation of side effects. + For example, a function call like this may very well behave differently + from one compiler to another: + + @example + void func (int, int); + + int i = 2; + func (i++, i++); + @end example + + There is no guarantee (in either the C or the C++ standard language + definitions) that the increments will be evaluated in any particular + order. Either increment might happen first. @code{func} might get the + arguments @samp{2, 3}, or it might get @samp{3, 2}, or even @samp{2, 2}. + + @item + Not allowing structures with volatile fields in registers. + + Strictly speaking, there is no prohibition in the ISO C standard + against allowing structures with volatile fields in registers, but + it does not seem to make any sense and is probably not what you wanted + to do. So the compiler will give an error message in this case. + + @item + Making certain warnings into errors by default. + + Some ISO C testsuites report failure when the compiler does not produce + an error message for a certain program. + + @opindex pedantic-errors + ISO C requires a ``diagnostic'' message for certain kinds of invalid + programs, but a warning is defined by GCC to count as a diagnostic. If + GCC produces a warning but not an error, that is correct ISO C support. + If test suites call this ``failure'', they should be run with the GCC + option @option{-pedantic-errors}, which will turn these warnings into + errors. + + @end itemize + + @node Warnings and Errors + @section Warning Messages and Error Messages + + @cindex error messages + @cindex warnings vs errors + @cindex messages, warning and error + The GNU compiler can produce two kinds of diagnostics: errors and + warnings. Each kind has a different purpose: + + @itemize @w{} + @item + @dfn{Errors} report problems that make it impossible to compile your + program. GCC reports errors with the source file name and line + number where the problem is apparent. + + @item + @dfn{Warnings} report other unusual conditions in your code that + @emph{may} indicate a problem, although compilation can (and does) + proceed. Warning messages also report the source file name and line + number, but include the text @samp{warning:} to distinguish them + from error messages. + @end itemize + + Warnings may indicate danger points where you should check to make sure + that your program really does what you intend; or the use of obsolete + features; or the use of nonstandard features of GNU C or C++. Many + warnings are issued only if you ask for them, with one of the @option{-W} + options (for instance, @option{-Wall} requests a variety of useful + warnings). + + @opindex pedantic + @opindex pedantic-errors + GCC always tries to compile your program if possible; it never + gratuitously rejects a program whose meaning is clear merely because + (for instance) it fails to conform to a standard. In some cases, + however, the C and C++ standards specify that certain extensions are + forbidden, and a diagnostic @emph{must} be issued by a conforming + compiler. The @option{-pedantic} option tells GCC to issue warnings in + such cases; @option{-pedantic-errors} says to make them errors instead. + This does not mean that @emph{all} non-ISO constructs get warnings + or errors. + + @xref{Warning Options,,Options to Request or Suppress Warnings}, for + more detail on these and related command-line options. diff -Nrc3pad gcc-3.0.4/gcc/doc/vms.texi gcc-3.1/gcc/doc/vms.texi *** gcc-3.0.4/gcc/doc/vms.texi Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/doc/vms.texi Sun Nov 11 11:31:24 2001 *************** *** 0 **** --- 1,331 ---- + @c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, + @c 1999, 2000, 2001 Free Software Foundation, Inc. + @c This is part of the GCC manual. + @c For copying conditions, see the file gcc.texi. + + @node VMS + @chapter Using GCC on VMS + + @c prevent bad page break with this line + Here is how to use GCC on VMS@. + + @menu + * Include Files and VMS:: Where the preprocessor looks for the include files. + * Global Declarations:: How to do globaldef, globalref and globalvalue with + GCC. + * VMS Misc:: Misc information. + @end menu + + @node Include Files and VMS + @section Include Files and VMS + + @cindex include files and VMS + @cindex VMS and include files + @cindex header files and VMS + Due to the differences between the filesystems of Unix and VMS, GCC + attempts to translate file names in @samp{#include} into names that VMS + will understand. The basic strategy is to prepend a prefix to the + specification of the include file, convert the whole filename to a VMS + filename, and then try to open the file. GCC tries various prefixes + one by one until one of them succeeds: + + @enumerate + @item + The first prefix is the @samp{GNU_CC_INCLUDE:} logical name: this is + where GNU C header files are traditionally stored. If you wish to store + header files in non-standard locations, then you can assign the logical + @samp{GNU_CC_INCLUDE} to be a search list, where each element of the + list is suitable for use with a rooted logical. + + @item + The next prefix tried is @samp{SYS$SYSROOT:[SYSLIB.]}. This is where + VAX-C header files are traditionally stored. + + @item + If the include file specification by itself is a valid VMS filename, the + preprocessor then uses this name with no prefix in an attempt to open + the include file. + + @item + If the file specification is not a valid VMS filename (i.e.@: does not + contain a device or a directory specifier, and contains a @samp{/} + character), the preprocessor tries to convert it from Unix syntax to + VMS syntax. + + Conversion works like this: the first directory name becomes a device, + and the rest of the directories are converted into VMS-format directory + names. For example, the name @file{X11/foobar.h} is + translated to @file{X11:[000000]foobar.h} or @file{X11:foobar.h}, + whichever one can be opened. This strategy allows you to assign a + logical name to point to the actual location of the header files. + + @item + If none of these strategies succeeds, the @samp{#include} fails. + @end enumerate + + Include directives of the form: + + @example + #include foobar + @end example + + @noindent + are a common source of incompatibility between VAX-C and GCC@. VAX-C + treats this much like a standard @code{#include } directive. + That is incompatible with the ISO C behavior implemented by GCC: to + expand the name @code{foobar} as a macro. Macro expansion should + eventually yield one of the two standard formats for @code{#include}: + + @example + #include "@var{file}" + #include <@var{file}> + @end example + + If you have this problem, the best solution is to modify the source to + convert the @code{#include} directives to one of the two standard forms. + That will work with either compiler. If you want a quick and dirty fix, + define the file names as macros with the proper expansion, like this: + + @example + #define stdio + @end example + + @noindent + This will work, as long as the name doesn't conflict with anything else + in the program. + + Another source of incompatibility is that VAX-C assumes that: + + @example + #include "foobar" + @end example + + @noindent + is actually asking for the file @file{foobar.h}. GCC does not + make this assumption, and instead takes what you ask for literally; + it tries to read the file @file{foobar}. The best way to avoid this + problem is to always specify the desired file extension in your include + directives. + + GCC for VMS is distributed with a set of include files that is + sufficient to compile most general purpose programs. Even though the + GCC distribution does not contain header files to define constants + and structures for some VMS system-specific functions, there is no + reason why you cannot use GCC with any of these functions. You first + may have to generate or create header files, either by using the public + domain utility @code{UNSDL} (which can be found on a DECUS tape), or by + extracting the relevant modules from one of the system macro libraries, + and using an editor to construct a C header file. + + A @code{#include} file name cannot contain a DECNET node name. The + preprocessor reports an I/O error if you attempt to use a node name, + whether explicitly, or implicitly via a logical name. + + @node Global Declarations + @section Global Declarations and VMS + + @findex GLOBALREF + @findex GLOBALDEF + @findex GLOBALVALUEDEF + @findex GLOBALVALUEREF + GCC does not provide the @code{globalref}, @code{globaldef} and + @code{globalvalue} keywords of VAX-C@. You can get the same effect with + an obscure feature of GAS, the GNU assembler. (This requires GAS + version 1.39 or later.) The following macros allow you to use this + feature in a fairly natural way: + + @smallexample + #ifdef __GNUC__ + #define GLOBALREF(TYPE,NAME) \ + TYPE NAME \ + asm ("_$$PsectAttributes_GLOBALSYMBOL$$" #NAME) + #define GLOBALDEF(TYPE,NAME,VALUE) \ + TYPE NAME \ + asm ("_$$PsectAttributes_GLOBALSYMBOL$$" #NAME) \ + = VALUE + #define GLOBALVALUEREF(TYPE,NAME) \ + const TYPE NAME[1] \ + asm ("_$$PsectAttributes_GLOBALVALUE$$" #NAME) + #define GLOBALVALUEDEF(TYPE,NAME,VALUE) \ + const TYPE NAME[1] \ + asm ("_$$PsectAttributes_GLOBALVALUE$$" #NAME) \ + = @{VALUE@} + #else + #define GLOBALREF(TYPE,NAME) \ + globalref TYPE NAME + #define GLOBALDEF(TYPE,NAME,VALUE) \ + globaldef TYPE NAME = VALUE + #define GLOBALVALUEDEF(TYPE,NAME,VALUE) \ + globalvalue TYPE NAME = VALUE + #define GLOBALVALUEREF(TYPE,NAME) \ + globalvalue TYPE NAME + #endif + @end smallexample + + @noindent + (The @code{_$$PsectAttributes_GLOBALSYMBOL} prefix at the start of the + name is removed by the assembler, after it has modified the attributes + of the symbol). These macros are provided in the VMS binaries + distribution in a header file @file{GNU_HACKS.H}. An example of the + usage is: + + @example + GLOBALREF (int, ijk); + GLOBALDEF (int, jkl, 0); + @end example + + The macros @code{GLOBALREF} and @code{GLOBALDEF} cannot be used + straightforwardly for arrays, since there is no way to insert the array + dimension into the declaration at the right place. However, you can + declare an array with these macros if you first define a typedef for the + array type, like this: + + @example + typedef int intvector[10]; + GLOBALREF (intvector, foo); + @end example + + Array and structure initializers will also break the macros; you can + define the initializer to be a macro of its own, or you can expand the + @code{GLOBALDEF} macro by hand. You may find a case where you wish to + use the @code{GLOBALDEF} macro with a large array, but you are not + interested in explicitly initializing each element of the array. In + such cases you can use an initializer like: @code{@{0,@}}, which will + initialize the entire array to @code{0}. + + A shortcoming of this implementation is that a variable declared with + @code{GLOBALVALUEREF} or @code{GLOBALVALUEDEF} is always an array. For + example, the declaration: + + @example + GLOBALVALUEREF(int, ijk); + @end example + + @noindent + declares the variable @code{ijk} as an array of type @code{int [1]}. + This is done because a globalvalue is actually a constant; its ``value'' + is what the linker would normally consider an address. That is not how + an integer value works in C, but it is how an array works. So treating + the symbol as an array name gives consistent results---with the + exception that the value seems to have the wrong type. @strong{Don't + try to access an element of the array.} It doesn't have any elements. + The array ``address'' may not be the address of actual storage. + + The fact that the symbol is an array may lead to warnings where the + variable is used. Insert type casts to avoid the warnings. Here is an + example; it takes advantage of the ISO C feature allowing macros that + expand to use the same name as the macro itself. + + @example + GLOBALVALUEREF (int, ss$_normal); + GLOBALVALUEDEF (int, xyzzy,123); + #ifdef __GNUC__ + #define ss$_normal ((int) ss$_normal) + #define xyzzy ((int) xyzzy) + #endif + @end example + + Don't use @code{globaldef} or @code{globalref} with a variable whose + type is an enumeration type; this is not implemented. Instead, make the + variable an integer, and use a @code{globalvaluedef} for each of the + enumeration values. An example of this would be: + + @example + #ifdef __GNUC__ + GLOBALDEF (int, color, 0); + GLOBALVALUEDEF (int, RED, 0); + GLOBALVALUEDEF (int, BLUE, 1); + GLOBALVALUEDEF (int, GREEN, 3); + #else + enum globaldef color @{RED, BLUE, GREEN = 3@}; + #endif + @end example + + @node VMS Misc + @section Other VMS Issues + + @cindex exit status and VMS + @cindex return value of @code{main} + @cindex @code{main} and the exit status + GCC automatically arranges for @code{main} to return 1 by default if + you fail to specify an explicit return value. This will be interpreted + by VMS as a status code indicating a normal successful completion. + Version 1 of GCC did not provide this default. + + GCC on VMS works only with the GNU assembler, GAS@. You need version + 1.37 or later of GAS in order to produce value debugging information for + the VMS debugger. Use the ordinary VMS linker with the object files + produced by GAS@. + + @cindex shared VMS run time system + @cindex @file{VAXCRTL} + Under previous versions of GCC, the generated code would occasionally + give strange results when linked to the sharable @file{VAXCRTL} library. + Now this should work. + + A caveat for use of @code{const} global variables: the @code{const} + modifier must be specified in every external declaration of the variable + in all of the source files that use that variable. Otherwise the linker + will issue warnings about conflicting attributes for the variable. Your + program will still work despite the warnings, but the variable will be + placed in writable storage. + + @cindex name augmentation + @cindex case sensitivity and VMS + @cindex VMS and case sensitivity + Although the VMS linker does distinguish between upper and lower case + letters in global symbols, most VMS compilers convert all such symbols + into upper case and most run-time library routines also have upper case + names. To be able to reliably call such routines, GCC (by means of + the assembler GAS) converts global symbols into upper case like other + VMS compilers. However, since the usual practice in C is to distinguish + case, GCC (via GAS) tries to preserve usual C behavior by augmenting + each name that is not all lower case. This means truncating the name + to at most 23 characters and then adding more characters at the end + which encode the case pattern of those 23. Names which contain at + least one dollar sign are an exception; they are converted directly into + upper case without augmentation. + + Name augmentation yields bad results for programs that use precompiled + libraries (such as Xlib) which were generated by another compiler. You + can use the compiler option @samp{/NOCASE_HACK} to inhibit augmentation; + it makes external C functions and variables case-independent as is usual + on VMS@. Alternatively, you could write all references to the functions + and variables in such libraries using lower case; this will work on VMS, + but is not portable to other systems. The compiler option @samp{/NAMES} + also provides control over global name handling. + + Function and variable names are handled somewhat differently with G++. + The GNU C++ compiler performs @dfn{name mangling} on function + names, which means that it adds information to the function name to + describe the data types of the arguments that the function takes. One + result of this is that the name of a function can become very long. + Since the VMS linker only recognizes the first 31 characters in a name, + special action is taken to ensure that each function and variable has a + unique name that can be represented in 31 characters. + + If the name (plus a name augmentation, if required) is less than 32 + characters in length, then no special action is performed. If the name + is longer than 31 characters, the assembler (GAS) will generate a + hash string based upon the function name, truncate the function name to + 23 characters, and append the hash string to the truncated name. If the + @samp{/VERBOSE} compiler option is used, the assembler will print both + the full and truncated names of each symbol that is truncated. + + The @samp{/NOCASE_HACK} compiler option should not be used when you are + compiling programs that use libg++. libg++ has several instances of + objects (i.e. @code{Filebuf} and @code{filebuf}) which become + indistinguishable in a case-insensitive environment. This leads to + cases where you need to inhibit augmentation selectively (if you were + using libg++ and Xlib in the same program, for example). There is no + special feature for doing this, but you can get the result by defining a + macro for each mixed case symbol for which you wish to inhibit + augmentation. The macro should expand into the lower case equivalent of + itself. For example: + + @example + #define StuDlyCapS studlycaps + @end example + + These macro definitions can be placed in a header file to minimize the + number of changes to your source code. diff -Nrc3pad gcc-3.0.4/gcc/doloop.c gcc-3.1/gcc/doloop.c *** gcc-3.0.4/gcc/doloop.c Fri Nov 30 22:45:14 2001 --- gcc-3.1/gcc/doloop.c Fri Jan 4 02:00:26 2002 *************** *** 1,23 **** /* Perform doloop optimizations ! Copyright (C) 1999, 2000 Free Software Foundation, Inc. Contributed by Michael P. Hayes (m.hayes@elec.canterbury.ac.nz) ! 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 "config.h" #include "system.h" --- 1,23 ---- /* Perform doloop optimizations ! Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Michael P. Hayes (m.hayes@elec.canterbury.ac.nz) ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" #include "system.h" *************** Boston, MA 02111-1307, USA. */ *** 27,32 **** --- 27,33 ---- #include "loop.h" #include "hard-reg-set.h" #include "basic-block.h" + #include "toplev.h" #include "tm_p.h" *************** doloop_condition_get (pattern) *** 140,146 **** /* Return an estimate of the maximum number of loop iterations for the loop specified by LOOP or zero if the loop is not normal. MODE is the mode of the iteration count and NONNEG is non-zero if ! the the iteration count has been proved to be non-negative. */ static unsigned HOST_WIDE_INT doloop_iterations_max (loop_info, mode, nonneg) const struct loop_info *loop_info; --- 141,147 ---- /* Return an estimate of the maximum number of loop iterations for the loop specified by LOOP or zero if the loop is not normal. MODE is the mode of the iteration count and NONNEG is non-zero if ! the iteration count has been proved to be non-negative. */ static unsigned HOST_WIDE_INT doloop_iterations_max (loop_info, mode, nonneg) const struct loop_info *loop_info; *************** doloop_iterations_max (loop_info, mode, *** 196,202 **** if (GET_CODE (max_value) == CONST_INT) umax = INTVAL (max_value); else ! umax = ((unsigned)2 << (GET_MODE_BITSIZE (mode) - 1)) - 1; n_iterations_max = umax - umin; break; --- 197,203 ---- if (GET_CODE (max_value) == CONST_INT) umax = INTVAL (max_value); else ! umax = ((unsigned) 2 << (GET_MODE_BITSIZE (mode) - 1)) - 1; n_iterations_max = umax - umin; break; *************** doloop_iterations_max (loop_info, mode, *** 211,222 **** if (GET_CODE (min_value) == CONST_INT) smin = INTVAL (min_value); else ! smin = -((unsigned)1 << (GET_MODE_BITSIZE (mode) - 1)); if (GET_CODE (max_value) == CONST_INT) smax = INTVAL (max_value); else ! smax = ((unsigned)1 << (GET_MODE_BITSIZE (mode) - 1)) - 1; n_iterations_max = smax - smin; break; --- 212,223 ---- if (GET_CODE (min_value) == CONST_INT) smin = INTVAL (min_value); else ! smin = -((unsigned) 1 << (GET_MODE_BITSIZE (mode) - 1)); if (GET_CODE (max_value) == CONST_INT) smax = INTVAL (max_value); else ! smax = ((unsigned) 1 << (GET_MODE_BITSIZE (mode) - 1)) - 1; n_iterations_max = smax - smin; break; *************** doloop_iterations_max (loop_info, mode, *** 229,235 **** else /* We need to conservatively assume that we might have the maximum number of iterations without any additional knowledge. */ ! n_iterations_max = ((unsigned)2 << (GET_MODE_BITSIZE (mode) - 1)) - 1; break; default: --- 230,236 ---- else /* We need to conservatively assume that we might have the maximum number of iterations without any additional knowledge. */ ! n_iterations_max = ((unsigned) 2 << (GET_MODE_BITSIZE (mode) - 1)) - 1; break; default: *************** doloop_iterations_max (loop_info, mode, *** 241,248 **** /* If we know that the iteration count is non-negative then adjust n_iterations_max if it is so large that it appears negative. */ if (nonneg ! && n_iterations_max > ((unsigned)1 << (GET_MODE_BITSIZE (mode) - 1))) ! n_iterations_max = ((unsigned)1 << (GET_MODE_BITSIZE (mode) - 1)) - 1; return n_iterations_max; } --- 242,249 ---- /* If we know that the iteration count is non-negative then adjust n_iterations_max if it is so large that it appears negative. */ if (nonneg ! && n_iterations_max > ((unsigned) 1 << (GET_MODE_BITSIZE (mode) - 1))) ! n_iterations_max = ((unsigned) 1 << (GET_MODE_BITSIZE (mode) - 1)) - 1; return n_iterations_max; } *************** doloop_valid_p (loop, jump_insn) *** 307,314 **** return 0; } ! /* Some targets (eg, PPC) use the count register for branch on table ! instructions. ??? This should be a target specific check. */ if (loop_info->has_tablejump) { if (loop_dump_stream) --- 308,315 ---- return 0; } ! /* Some targets (eg, PPC) use the count register for branch on table ! instructions. ??? This should be a target specific check. */ if (loop_info->has_tablejump) { if (loop_dump_stream) *************** doloop_valid_p (loop, jump_insn) *** 335,341 **** /* There is no guarantee that a NE loop will terminate if the absolute increment is not unity. ??? We could compute this ! condition at run-time and have a additional jump around the loop to ensure an infinite loop. */ if (loop_info->comparison_code == NE && INTVAL (loop_info->increment) != -1 --- 336,342 ---- /* There is no guarantee that a NE loop will terminate if the absolute increment is not unity. ??? We could compute this ! condition at run-time and have an additional jump around the loop to ensure an infinite loop. */ if (loop_info->comparison_code == NE && INTVAL (loop_info->increment) != -1 *************** doloop_modify (loop, iterations, iterati *** 437,443 **** /* Discard original jump to continue loop. The original compare result may still be live, so it cannot be discarded explicitly. */ ! delete_insn (jump_insn); counter_reg = XEXP (condition, 0); if (GET_CODE (counter_reg) == PLUS) --- 438,444 ---- /* Discard original jump to continue loop. The original compare result may still be live, so it cannot be discarded explicitly. */ ! delete_related_insns (jump_insn); counter_reg = XEXP (condition, 0); if (GET_CODE (counter_reg) == PLUS) *************** doloop_modify (loop, iterations, iterati *** 468,480 **** /* Determine if the iteration counter will be non-negative. Note that the maximum value loaded is iterations_max - 1. */ if ((unsigned HOST_WIDE_INT) INTVAL (iterations_max) ! <= ((unsigned)1 << (GET_MODE_BITSIZE (GET_MODE (counter_reg)) - 1))) nonneg = 1; break; /* Abort if an invalid doloop pattern has been generated. */ default: ! abort(); } if (decrement_count) --- 469,481 ---- /* Determine if the iteration counter will be non-negative. Note that the maximum value loaded is iterations_max - 1. */ if ((unsigned HOST_WIDE_INT) INTVAL (iterations_max) ! <= ((unsigned) 1 << (GET_MODE_BITSIZE (GET_MODE (counter_reg)) - 1))) nonneg = 1; break; /* Abort if an invalid doloop pattern has been generated. */ default: ! abort (); } if (decrement_count) *************** doloop_modify (loop, iterations, iterati *** 482,490 **** if (GET_CODE (count) == CONST_INT) count = GEN_INT (INTVAL (count) - 1); else ! count = expand_binop (GET_MODE (counter_reg), sub_optab, ! count, GEN_INT (1), ! 0, 0, OPTAB_LIB_WIDEN); } /* Insert initialization of the count register into the loop header. */ --- 483,491 ---- if (GET_CODE (count) == CONST_INT) count = GEN_INT (INTVAL (count) - 1); else ! count = expand_simple_binop (GET_MODE (counter_reg), MINUS, ! count, GEN_INT (1), ! 0, 0, OPTAB_LIB_WIDEN); } /* Insert initialization of the count register into the loop header. */ *************** doloop_modify_runtime (loop, iterations_ *** 581,592 **** || comparison_code == NE); /* The number of iterations (prior to any loop unrolling) is given by: ! (abs (final - initial) + abs_inc - 1) / abs_inc. If the loop has been unrolled, then the loop body has been ! preconditioned to iterate a multiple of unroll_number times. ! The number of iterations of the loop body is simply: ! (abs (final - initial) + abs_inc - 1) / (abs_inc * unroll_number). The division and modulo operations can be avoided by requiring that the increment is a power of 2 (precondition_loop_p enforces --- 582,603 ---- || comparison_code == NE); /* The number of iterations (prior to any loop unrolling) is given by: ! ! n = (abs (final - initial) + abs_inc - 1) / abs_inc. ! ! However, it is possible for the summation to overflow, and a ! safer method is: ! ! n = abs (final - initial) / abs_inc; ! n += (abs (final - initial) % abs_inc) != 0; If the loop has been unrolled, then the loop body has been ! preconditioned to iterate a multiple of unroll_number times. If ! abs_inc is != 1, the full calculation is ! ! t1 = abs_inc * unroll_number; ! n = abs (final - initial) / t1; ! n += (abs (final - initial) % t1) > t1 - abs_inc; The division and modulo operations can be avoided by requiring that the increment is a power of 2 (precondition_loop_p enforces *************** doloop_modify_runtime (loop, iterations_ *** 595,635 **** start_sequence (); /* abs (final - initial) */ ! diff = expand_binop (mode, sub_optab, ! copy_rtx (neg_inc ? initial_value : final_value), ! copy_rtx (neg_inc ? final_value : initial_value), ! NULL_RTX, unsigned_p, OPTAB_LIB_WIDEN); if (abs_inc * loop_info->unroll_number != 1) { int shift_count; shift_count = exact_log2 (abs_inc * loop_info->unroll_number); if (shift_count < 0) abort (); if (abs_inc != 1) { ! /* abs (final - initial + abs_inc - 1) / abs_inc / unroll_number ! If we get an overflow, the loop is infinite, and ! the loop count is set to zero. That is not really ! infinite but it will run UINT_MAX+1 times. */ ! iterations = expand_binop (GET_MODE (diff), add_optab, ! diff, GEN_INT (abs_inc - 1), ! NULL_RTX, 1, ! OPTAB_LIB_WIDEN); ! iterations = expand_binop (GET_MODE (iterations), lshr_optab, ! iterations, GEN_INT (shift_count), ! iterations, 1, ! OPTAB_LIB_WIDEN); ! } ! else ! { ! /* abs (final - initial) / abs_inc. */ ! iterations = expand_binop (GET_MODE (diff), lshr_optab, ! diff, GEN_INT (shift_count), ! NULL_RTX, 1, ! OPTAB_LIB_WIDEN); } } else --- 606,711 ---- start_sequence (); /* abs (final - initial) */ ! diff = expand_simple_binop (mode, MINUS, ! copy_rtx (neg_inc ? initial_value : final_value), ! copy_rtx (neg_inc ? final_value : initial_value), ! NULL_RTX, unsigned_p, OPTAB_LIB_WIDEN); ! ! /* Some code transformations can result in code akin to ! ! tmp = i + 1; ! ... ! goto scan_start; ! top: ! tmp = tmp + 1; ! scan_start: ! i = tmp; ! if (i < n) goto top; ! ! We'll have already detected this form of loop in scan_loop, ! and set loop->top and loop->scan_start appropriately. ! ! In this situation, we skip the increment the first time through ! the loop, which results in an incorrect estimate of the number ! of iterations. Adjust the difference to compensate. */ ! /* ??? Logically, it would seem this belongs in loop_iterations. ! However, this causes regressions e.g. on x86 execute/20011008-3.c, ! so I do not believe we've properly characterized the exact nature ! of the problem. In the meantime, this fixes execute/20011126-2.c ! on ia64 and some Ada front end miscompilation on ppc. */ ! ! if (loop->scan_start) ! { ! rtx iteration_var = loop_info->iteration_var; ! struct loop_ivs *ivs = LOOP_IVS (loop); ! struct iv_class *bl; ! ! if (REG_IV_TYPE (ivs, REGNO (iteration_var)) == BASIC_INDUCT) ! bl = REG_IV_CLASS (ivs, REGNO (iteration_var)); ! else if (REG_IV_TYPE (ivs, REGNO (iteration_var)) == GENERAL_INDUCT) ! { ! struct induction *v = REG_IV_INFO (ivs, REGNO (iteration_var)); ! bl = REG_IV_CLASS (ivs, REGNO (v->src_reg)); ! } ! else ! /* Iteration var must be an induction variable to get here. */ ! abort (); ! ! if (INSN_UID (bl->biv->insn) < max_uid_for_loop ! && INSN_LUID (bl->biv->insn) < INSN_LUID (loop->scan_start)) ! { ! if (loop_dump_stream) ! fprintf (loop_dump_stream, ! "Doloop: Basic induction var skips initial incr.\n"); ! ! diff = expand_simple_binop (mode, PLUS, diff, increment, diff, ! unsigned_p, OPTAB_LIB_WIDEN); ! } ! } if (abs_inc * loop_info->unroll_number != 1) { int shift_count; + rtx extra; + rtx label; + unsigned HOST_WIDE_INT limit; shift_count = exact_log2 (abs_inc * loop_info->unroll_number); if (shift_count < 0) abort (); + /* abs (final - initial) / (abs_inc * unroll_number) */ + iterations = expand_simple_binop (GET_MODE (diff), LSHIFTRT, + diff, GEN_INT (shift_count), + NULL_RTX, 1, + OPTAB_LIB_WIDEN); + if (abs_inc != 1) { ! /* abs (final - initial) % (abs_inc * unroll_number) */ ! rtx count = GEN_INT (abs_inc * loop_info->unroll_number - 1); ! extra = expand_simple_binop (GET_MODE (iterations), AND, ! diff, count, NULL_RTX, 1, ! OPTAB_LIB_WIDEN); ! ! /* If (abs (final - initial) % (abs_inc * unroll_number) ! <= abs_inc * (unroll - 1)), ! jump past following increment instruction. */ ! label = gen_label_rtx (); ! limit = abs_inc * (loop_info->unroll_number - 1); ! emit_cmp_and_jump_insns (extra, GEN_INT (limit), ! limit == 0 ? EQ : LEU, NULL_RTX, ! GET_MODE (extra), 0, label); ! JUMP_LABEL (get_last_insn ()) = label; ! LABEL_NUSES (label)++; ! ! /* Increment the iteration count by one. */ ! iterations = expand_simple_binop (GET_MODE (iterations), PLUS, ! iterations, GEN_INT (1), ! iterations, 1, ! OPTAB_LIB_WIDEN); ! ! emit_label (label); } } else *************** doloop_modify_runtime (loop, iterations_ *** 644,650 **** not executed before the start of the loop. We need to determine if the loop will terminate after the first pass and to limit the iteration count to one if necessary. */ ! if (! loop->vtop && comparison_code != NE) { rtx label; --- 720,726 ---- not executed before the start of the loop. We need to determine if the loop will terminate after the first pass and to limit the iteration count to one if necessary. */ ! if (! loop->vtop) { rtx label; *************** doloop_modify_runtime (loop, iterations_ *** 657,674 **** is guaranteed to execute at least once. */ if (loop_info->unroll_number == 1) { - rtx incremented_initval; /* Emit insns to test if the loop will immediately terminate and to set the iteration count to 1 if true. */ label = gen_label_rtx(); ! incremented_initval = expand_binop (mode, add_optab, ! copy_rtx (initial_value), ! increment, NULL_RTX, 0, ! OPTAB_LIB_WIDEN); ! emit_cmp_and_jump_insns (incremented_initval, copy_rtx (loop_info->comparison_value), ! comparison_code, NULL_RTX, mode, ! unsigned_p, 0, label); JUMP_LABEL (get_last_insn ()) = label; LABEL_NUSES (label)++; emit_move_insn (iterations, const1_rtx); --- 733,745 ---- is guaranteed to execute at least once. */ if (loop_info->unroll_number == 1) { /* Emit insns to test if the loop will immediately terminate and to set the iteration count to 1 if true. */ label = gen_label_rtx(); ! emit_cmp_and_jump_insns (copy_rtx (initial_value), copy_rtx (loop_info->comparison_value), ! comparison_code, NULL_RTX, mode, 0, ! label); JUMP_LABEL (get_last_insn ()) = label; LABEL_NUSES (label)++; emit_move_insn (iterations, const1_rtx); diff -Nrc3pad gcc-3.0.4/gcc/dominance.c gcc-3.1/gcc/dominance.c *** gcc-3.0.4/gcc/dominance.c Tue Nov 14 09:58:40 2000 --- gcc-3.1/gcc/dominance.c Fri Nov 23 02:05:16 2001 *************** *** 2,23 **** Copyright (C) 2000 Free Software Foundation, Inc. Contributed by Michael Matz (matz@ifh.de). ! 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 implements the well known algorithm from Lengauer and Tarjan to compute the dominators in a control flow graph. A basic block D is said --- 2,23 ---- Copyright (C) 2000 Free Software Foundation, Inc. Contributed by Michael Matz (matz@ifh.de). ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it ! under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ! ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public ! License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* This file implements the well known algorithm from Lengauer and Tarjan to compute the dominators in a control flow graph. A basic block D is said *************** *** 28,34 **** block I(X), called the immediate dominator of X, which is the parent of X in the dominator tree. ! The algorithm computes this dominator tree implicitely by computing for each block its immediate dominator. We use tree balancing and path compression, so its the O(e*a(e,v)) variant, where a(e,v) is the very slowly growing functional inverse of the Ackerman function. */ --- 28,34 ---- block I(X), called the immediate dominator of X, which is the parent of X in the dominator tree. ! The algorithm computes this dominator tree implicitly by computing for each block its immediate dominator. We use tree balancing and path compression, so its the O(e*a(e,v)) variant, where a(e,v) is the very slowly growing functional inverse of the Ackerman function. */ *************** struct dom_info *** 89,101 **** number of that node in DFS order counted from 1. This is an index into most of the other arrays in this structure. */ TBB *dfs_order; ! /* If x is the DFS-index of a node which correspondends with an basic block, dfs_to_bb[x] is that basic block. Note, that in our structure there are more nodes that basic blocks, so only dfs_to_bb[dfs_order[bb->index]]==bb is true for every basic block bb, but not the opposite. */ basic_block *dfs_to_bb; ! /* This is the next free DFS number when creating the DFS tree or forest. */ unsigned int dfsnum; /* The number of nodes in the DFS tree (==dfsnum-1). */ unsigned int nodes; --- 89,101 ---- number of that node in DFS order counted from 1. This is an index into most of the other arrays in this structure. */ TBB *dfs_order; ! /* If x is the DFS-index of a node which corresponds with an basic block, dfs_to_bb[x] is that basic block. Note, that in our structure there are more nodes that basic blocks, so only dfs_to_bb[dfs_order[bb->index]]==bb is true for every basic block bb, but not the opposite. */ basic_block *dfs_to_bb; ! /* This is the next free DFS number when creating the DFS tree or forest. */ unsigned int dfsnum; /* The number of nodes in the DFS tree (==dfsnum-1). */ unsigned int nodes; *************** calc_dfs_tree_nonrec (di, bb, reverse) *** 193,199 **** basic_block bb; enum cdi_direction reverse; { ! /* We never call this with bb==EXIT_BLOCK_PTR (ENTRY_BLOCK_PTR if REVERSE). */ /* We call this _only_ if bb is not already visited. */ edge e; TBB child_i, my_i = 0; --- 193,199 ---- basic_block bb; enum cdi_direction reverse; { ! /* We never call this with bb==EXIT_BLOCK_PTR (ENTRY_BLOCK_PTR if REVERSE). */ /* We call this _only_ if bb is not already visited. */ edge e; TBB child_i, my_i = 0; *************** calc_dfs_tree_nonrec (di, bb, reverse) *** 242,248 **** /* If the next node BN is either already visited or a border block the current edge is useless, and simply overwritten with the next edge out of the current node. */ ! if (di->dfs_order[bn->index] || bn == ex_block) { e = e->pred_next; continue; --- 242,248 ---- /* If the next node BN is either already visited or a border block the current edge is useless, and simply overwritten with the next edge out of the current node. */ ! if (bn == ex_block || di->dfs_order[bn->index]) { e = e->pred_next; continue; *************** calc_dfs_tree_nonrec (di, bb, reverse) *** 253,259 **** else { bn = e->dest; ! if (di->dfs_order[bn->index] || bn == ex_block) { e = e->succ_next; continue; --- 253,259 ---- else { bn = e->dest; ! if (bn == ex_block || di->dfs_order[bn->index]) { e = e->succ_next; continue; *************** calc_idoms (di, reverse) *** 523,529 **** v--; } ! /* Explicitely define the dominators. */ di->dom[1] = 0; for (v = 2; v <= di->nodes; v++) if (di->dom[v] != di->key[v]) --- 523,529 ---- v--; } ! /* Explicitly define the dominators. */ di->dom[1] = 0; for (v = 2; v <= di->nodes; v++) if (di->dom[v] != di->key[v]) diff -Nrc3pad gcc-3.0.4/gcc/doprint.c gcc-3.1/gcc/doprint.c *** gcc-3.0.4/gcc/doprint.c Fri Jan 14 00:46:57 2000 --- gcc-3.1/gcc/doprint.c Thu Jan 1 00:00:00 1970 *************** *** 1,293 **** - /* Provide a version _doprnt in terms of fprintf. - Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. - Contributed by Kaveh Ghazi (ghazi@caip.rutgers.edu) 3/29/98 - - 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. */ - - #include "config.h" - #include "system.h" - #undef _doprnt - - #ifdef TEST /* Make sure to use the internal one. */ - #define _doprnt my_doprnt - #endif - - #define COPY_VA_INT \ - do { \ - const int value = abs (va_arg (ap, int)); \ - char buf[32]; \ - ptr++; /* Go past the asterisk. */ \ - *sptr = '\0'; /* NULL terminate sptr. */ \ - sprintf(buf, "%d", value); \ - strcat(sptr, buf); \ - while (*sptr) sptr++; \ - } while (0) - - #define PRINT_CHAR(CHAR) \ - do { \ - putc(CHAR, stream); \ - ptr++; \ - total_printed++; \ - continue; \ - } while (0) - - #define PRINT_TYPE(TYPE) \ - do { \ - int result; \ - TYPE value = va_arg (ap, TYPE); \ - *sptr++ = *ptr++; /* Copy the type specifier. */ \ - *sptr = '\0'; /* NULL terminate sptr. */ \ - result = fprintf(stream, specifier, value); \ - if (result == -1) \ - return -1; \ - else \ - { \ - total_printed += result; \ - continue; \ - } \ - } while (0) - - int - _doprnt (format, ap, stream) - const char * format; - va_list ap; - FILE * stream; - { - const char * ptr = format; - char specifier[128]; - int total_printed = 0; - - while (*ptr != '\0') - { - if (*ptr != '%') /* While we have regular characters, print them. */ - PRINT_CHAR(*ptr); - else /* We got a format specifier! */ - { - char * sptr = specifier; - int wide_width = 0, short_width = 0; - - *sptr++ = *ptr++; /* Copy the % and move forward. */ - - while (strchr ("-+ #0", *ptr)) /* Move past flags. */ - *sptr++ = *ptr++; - - if (*ptr == '*') - COPY_VA_INT; - else - while (ISDIGIT(*ptr)) /* Handle explicit numeric value. */ - *sptr++ = *ptr++; - - if (*ptr == '.') - { - *sptr++ = *ptr++; /* Copy and go past the period. */ - if (*ptr == '*') - COPY_VA_INT; - else - while (ISDIGIT(*ptr)) /* Handle explicit numeric value. */ - *sptr++ = *ptr++; - } - while (strchr ("hlL", *ptr)) - { - switch (*ptr) - { - case 'h': - short_width = 1; - break; - case 'l': - wide_width++; - break; - case 'L': - wide_width = 2; - break; - default: - abort(); - } - *sptr++ = *ptr++; - } - - switch (*ptr) - { - case 'd': - case 'i': - case 'o': - case 'u': - case 'x': - case 'X': - case 'c': - { - /* Short values are promoted to int, so just copy it - as an int and trust the C library printf to cast it - to the right width. */ - if (short_width) - PRINT_TYPE(int); - else - { - switch (wide_width) - { - case 0: - PRINT_TYPE(int); - break; - case 1: - PRINT_TYPE(long); - break; - case 2: - default: - #if defined(__GNUC__) || defined(HAVE_LONG_LONG) - PRINT_TYPE(long long); - #else - PRINT_TYPE(long); /* Fake it and hope for the best. */ - #endif - break; - } /* End of switch (wide_width) */ - } /* End of else statement */ - } /* End of integer case */ - break; - case 'f': - case 'e': - case 'E': - case 'g': - case 'G': - { - if (wide_width == 0) - PRINT_TYPE(double); - else - { - #if defined(__GNUC__) || defined(HAVE_LONG_DOUBLE) - PRINT_TYPE(long double); - #else - PRINT_TYPE(double); /* Fake it and hope for the best. */ - #endif - } - } - break; - case 's': - PRINT_TYPE(char *); - break; - case 'p': - PRINT_TYPE(void *); - break; - case '%': - PRINT_CHAR('%'); - break; - default: - abort(); - } /* End of switch (*ptr) */ - } /* End of else statement */ - } - - return total_printed; - } - - #ifdef TEST - - #include - #ifndef M_PI - #define M_PI (3.1415926535897932385) - #endif - - #define RESULT(x) do \ - { \ - int i = (x); \ - printf ("printed %d characters\n", i); \ - fflush(stdin); \ - } while (0) - - static int checkit PARAMS ((const char * format, ...)) ATTRIBUTE_PRINTF_1; - - static int - checkit VPARAMS ((const char* format, ...)) - { - va_list args; - int result; - - #ifndef ANSI_PROTOTYPES - char *format; - #endif - - VA_START (args, format); - - #ifndef ANSI_PROTOTYPES - format = va_arg (args, char *); - #endif - - result = _doprnt (format, args, stdout); - va_end(args); - - return result; - } - - int - main () - { - RESULT(checkit ("<%d>\n", 0x12345678)); - RESULT(printf ("<%d>\n", 0x12345678)); - - RESULT(checkit ("<%200d>\n", 5)); - RESULT(printf ("<%200d>\n", 5)); - - RESULT(checkit ("<%.300d>\n", 6)); - RESULT(printf ("<%.300d>\n", 6)); - - RESULT(checkit ("<%100.150d>\n", 7)); - RESULT(printf ("<%100.150d>\n", 7)); - - RESULT(checkit ("<%s>\n", - "jjjjjjjjjiiiiiiiiiiiiiiioooooooooooooooooppppppppppppaa\n\ - 777777777777777777333333333333366666666666622222222222777777777777733333")); - RESULT(printf ("<%s>\n", - "jjjjjjjjjiiiiiiiiiiiiiiioooooooooooooooooppppppppppppaa\n\ - 777777777777777777333333333333366666666666622222222222777777777777733333")); - - RESULT(checkit ("<%f><%0+#f>%s%d%s>\n", - 1.0, 1.0, "foo", 77, "asdjffffffffffffffiiiiiiiiiiixxxxx")); - RESULT(printf ("<%f><%0+#f>%s%d%s>\n", - 1.0, 1.0, "foo", 77, "asdjffffffffffffffiiiiiiiiiiixxxxx")); - - RESULT(checkit ("<%4f><%.4f><%%><%4.4f>\n", M_PI, M_PI, M_PI)); - RESULT(printf ("<%4f><%.4f><%%><%4.4f>\n", M_PI, M_PI, M_PI)); - - RESULT(checkit ("<%*f><%.*f><%%><%*.*f>\n", 3, M_PI, 3, M_PI, 3, 3, M_PI)); - RESULT(printf ("<%*f><%.*f><%%><%*.*f>\n", 3, M_PI, 3, M_PI, 3, 3, M_PI)); - - RESULT(checkit ("<%d><%i><%o><%u><%x><%X><%c>\n", - 75, 75, 75, 75, 75, 75, 75)); - RESULT(printf ("<%d><%i><%o><%u><%x><%X><%c>\n", - 75, 75, 75, 75, 75, 75, 75)); - - RESULT(checkit ("<%d><%i><%o><%u><%x><%X><%c>\n", - 75, 75, 75, 75, 75, 75, 75)); - RESULT(printf ("<%d><%i><%o><%u><%x><%X><%c>\n", - 75, 75, 75, 75, 75, 75, 75)); - - RESULT(checkit ("Testing (hd) short: <%d><%ld><%hd><%hd><%d>\n", 123, (long)234, 345, 123456789, 456)); - RESULT(printf ("Testing (hd) short: <%d><%ld><%hd><%hd><%d>\n", 123, (long)234, 345, 123456789, 456)); - - #if defined(__GNUC__) || defined (HAVE_LONG_LONG) - RESULT(checkit ("Testing (lld) long long: <%d><%lld><%d>\n", 123, 234234234234234234LL, 345)); - RESULT(printf ("Testing (lld) long long: <%d><%lld><%d>\n", 123, 234234234234234234LL, 345)); - RESULT(checkit ("Testing (Ld) long long: <%d><%Ld><%d>\n", 123, 234234234234234234LL, 345)); - RESULT(printf ("Testing (Ld) long long: <%d><%Ld><%d>\n", 123, 234234234234234234LL, 345)); - #endif - - #if defined(__GNUC__) || defined (HAVE_LONG_DOUBLE) - RESULT(checkit ("Testing (Lf) long double: <%.20f><%.20Lf><%0+#.20f>\n", - 1.23456, 1.234567890123456789L, 1.23456)); - RESULT(printf ("Testing (Lf) long double: <%.20f><%.20Lf><%0+#.20f>\n", - 1.23456, 1.234567890123456789L, 1.23456)); - #endif - - return 0; - } - #endif /* TEST */ --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/dostage2 gcc-3.1/gcc/dostage2 *** gcc-3.0.4/gcc/dostage2 Wed Dec 16 20:54:57 1998 --- gcc-3.1/gcc/dostage2 Thu Jan 1 00:00:00 1970 *************** *** 1,2 **** - #!/bin/sh - make -k LANGUAGES=c $1 CC=stage1/xgcc XCFLAGS=-Bstage1/ CFLAGS="-g $2" >log2 2>&1 --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/dostage3 gcc-3.1/gcc/dostage3 *** gcc-3.0.4/gcc/dostage3 Wed Dec 16 20:54:58 1998 --- gcc-3.1/gcc/dostage3 Thu Jan 1 00:00:00 1970 *************** *** 1,3 **** - #!/bin/sh - make -k LANGUAGES=c $1 CC=stage2/xgcc XCFLAGS=-Bstage2/ CFLAGS="-g $2" >log3 2>&1 - --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/dwarf.h gcc-3.1/gcc/dwarf.h *** gcc-3.0.4/gcc/dwarf.h Mon Nov 20 21:40:30 2000 --- gcc-3.1/gcc/dwarf.h Wed Aug 22 14:35:01 2001 *************** *** 5,26 **** Copyright (C) 1992 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 is derived from the DWARF specification (a public document) Revision 1.0.1 (April 8, 1992) developed by the UNIX International --- 5,26 ---- Copyright (C) 1992 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* This file is derived from the DWARF specification (a public document) Revision 1.0.1 (April 8, 1992) developed by the UNIX International diff -Nrc3pad gcc-3.0.4/gcc/dwarf2.h gcc-3.1/gcc/dwarf2.h *** gcc-3.0.4/gcc/dwarf2.h Tue Jun 5 21:07:46 2001 --- gcc-3.1/gcc/dwarf2.h Wed Apr 24 18:50:26 2002 *************** *** 1,38 **** /* Declarations and definitions of codes relating to the DWARF2 symbolic debugging information format. ! Copyright (C) 1992, 1993, 1995, 1996, 1997, 2000 Free Software Foundation, Inc. - Contributed by Gary Funck (gary@intrepid.com). Derived from the - DWARF 1 implementation written by Ron Guilmette (rfg@monkeys.com). ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* This file is derived from the DWARF specification (a public document) Revision 2.0.0 (July 27, 1993) developed by the UNIX International Programming Languages Special Interest Group (UI/PLSIG) and distributed by UNIX International. Copies of this specification are available from ! UNIX International, 20 Waterview Boulevard, Parsippany, NJ, 07054. */ /* This file is shared between GCC and GDB, and should not contain prototypes. */ /* Tag names and codes. */ - enum dwarf_tag { DW_TAG_padding = 0x00, --- 1,44 ---- /* Declarations and definitions of codes relating to the DWARF2 symbolic debugging information format. ! Copyright (C) 1992, 1993, 1995, 1996, 1997, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! Written by Gary Funck (gary@intrepid.com) The Ada Joint Program ! Office (AJPO), Florida State Unviversity and Silicon Graphics Inc. ! provided support for this effort -- June 21, 1995. ! Derived from the DWARF 1 implementation written by Ron Guilmette ! (rfg@netcom.com), November 1990. ! This file is part of GCC. ! ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* This file is derived from the DWARF specification (a public document) Revision 2.0.0 (July 27, 1993) developed by the UNIX International Programming Languages Special Interest Group (UI/PLSIG) and distributed by UNIX International. Copies of this specification are available from ! UNIX International, 20 Waterview Boulevard, Parsippany, NJ, 07054. ! ! This file also now contains definitions from the DWARF 3 specification. */ /* This file is shared between GCC and GDB, and should not contain prototypes. */ /* Tag names and codes. */ enum dwarf_tag { DW_TAG_padding = 0x00, *************** enum dwarf_tag *** 83,94 **** DW_TAG_variant_part = 0x33, DW_TAG_variable = 0x34, DW_TAG_volatile_type = 0x35, ! /* SGI/MIPS Extensions */ DW_TAG_MIPS_loop = 0x4081, ! /* GNU extensions */ ! DW_TAG_format_label = 0x4101, /* for FORTRAN 77 and Fortran 90 */ ! DW_TAG_function_template = 0x4102, /* for C++ */ ! DW_TAG_class_template = 0x4103, /* for C++ */ DW_TAG_GNU_BINCL = 0x4104, DW_TAG_GNU_EINCL = 0x4105 }; --- 89,109 ---- DW_TAG_variant_part = 0x33, DW_TAG_variable = 0x34, DW_TAG_volatile_type = 0x35, ! /* DWARF 3. */ ! DW_TAG_dwarf_procedure = 0x36, ! DW_TAG_restrict_type = 0x37, ! DW_TAG_interface_type = 0x38, ! DW_TAG_namespace = 0x39, ! DW_TAG_imported_module = 0x3a, ! DW_TAG_unspecified_type = 0x3b, ! DW_TAG_partial_unit = 0x3c, ! DW_TAG_imported_unit = 0x3d, ! /* SGI/MIPS Extensions. */ DW_TAG_MIPS_loop = 0x4081, ! /* GNU extensions. */ ! DW_TAG_format_label = 0x4101, /* For FORTRAN 77 and Fortran 90. */ ! DW_TAG_function_template = 0x4102, /* For C++. */ ! DW_TAG_class_template = 0x4103, /* For C++. */ DW_TAG_GNU_BINCL = 0x4104, DW_TAG_GNU_EINCL = 0x4105 }; *************** enum dwarf_tag *** 96,102 **** #define DW_TAG_lo_user 0x4080 #define DW_TAG_hi_user 0xffff ! /* flag that tells whether entry has a child or not */ #define DW_children_no 0 #define DW_children_yes 1 --- 111,117 ---- #define DW_TAG_lo_user 0x4080 #define DW_TAG_hi_user 0xffff ! /* Flag that tells whether entry has a child or not. */ #define DW_children_no 0 #define DW_children_yes 1 *************** enum dwarf_attribute *** 192,198 **** DW_AT_variable_parameter = 0x4b, DW_AT_virtuality = 0x4c, DW_AT_vtable_elem_location = 0x4d, ! /* SGI/MIPS Extensions */ DW_AT_MIPS_fde = 0x2001, DW_AT_MIPS_loop_begin = 0x2002, DW_AT_MIPS_tail_loop_begin = 0x2003, --- 207,226 ---- DW_AT_variable_parameter = 0x4b, DW_AT_virtuality = 0x4c, DW_AT_vtable_elem_location = 0x4d, ! /* DWARF 3 values. */ ! DW_AT_allocated = 0x4e, ! DW_AT_associated = 0x4f, ! DW_AT_data_location = 0x50, ! DW_AT_stride = 0x51, ! DW_AT_entry_pc = 0x52, ! DW_AT_use_UTF8 = 0x53, ! DW_AT_extension = 0x54, ! DW_AT_ranges = 0x55, ! DW_AT_trampoline = 0x56, ! DW_AT_call_column = 0x57, ! DW_AT_call_file = 0x58, ! DW_AT_call_line = 0x59, ! /* SGI/MIPS Extensions. */ DW_AT_MIPS_fde = 0x2001, DW_AT_MIPS_loop_begin = 0x2002, DW_AT_MIPS_tail_loop_begin = 0x2003, *************** enum dwarf_attribute *** 205,223 **** DW_AT_MIPS_clone_origin = 0x200a, DW_AT_MIPS_has_inlines = 0x200b, /* GNU extensions. */ ! DW_AT_sf_names = 0x2101, ! DW_AT_src_info = 0x2102, ! DW_AT_mac_info = 0x2103, DW_AT_src_coords = 0x2104, DW_AT_body_begin = 0x2105, ! DW_AT_body_end = 0x2106 }; ! #define DW_AT_lo_user 0x2000 /* implementation-defined range start */ ! #define DW_AT_hi_user 0x3ff0 /* implementation-defined range end */ /* Location atom names and codes. */ - enum dwarf_location_atom { DW_OP_addr = 0x03, --- 233,253 ---- DW_AT_MIPS_clone_origin = 0x200a, DW_AT_MIPS_has_inlines = 0x200b, /* GNU extensions. */ ! DW_AT_sf_names = 0x2101, ! DW_AT_src_info = 0x2102, ! DW_AT_mac_info = 0x2103, DW_AT_src_coords = 0x2104, DW_AT_body_begin = 0x2105, ! DW_AT_body_end = 0x2106, ! DW_AT_GNU_vector = 0x2107, ! /* VMS Extensions. */ ! DW_AT_VMS_rtnbeg_pd_address = 0x2201 }; ! #define DW_AT_lo_user 0x2000 /* Implementation-defined range start. */ ! #define DW_AT_hi_user 0x3ff0 /* Implementation-defined range end. */ /* Location atom names and codes. */ enum dwarf_location_atom { DW_OP_addr = 0x03, *************** enum dwarf_location_atom *** 364,377 **** DW_OP_piece = 0x93, DW_OP_deref_size = 0x94, DW_OP_xderef_size = 0x95, ! DW_OP_nop = 0x96 }; ! #define DW_OP_lo_user 0x80 /* implementation-defined range start */ ! #define DW_OP_hi_user 0xff /* implementation-defined range end */ /* Type encodings. */ - enum dwarf_type { DW_ATE_void = 0x0, --- 394,411 ---- DW_OP_piece = 0x93, DW_OP_deref_size = 0x94, DW_OP_xderef_size = 0x95, ! DW_OP_nop = 0x96, ! /* DWARF 3 extensions. */ ! DW_OP_push_object_address = 0x97, ! DW_OP_call2 = 0x98, ! DW_OP_call4 = 0x99, ! DW_OP_calli = 0x9a }; ! #define DW_OP_lo_user 0x80 /* Implementation-defined range start. */ ! #define DW_OP_hi_user 0xff /* Implementation-defined range end. */ /* Type encodings. */ enum dwarf_type { DW_ATE_void = 0x0, *************** enum dwarf_type *** 382,388 **** DW_ATE_signed = 0x5, DW_ATE_signed_char = 0x6, DW_ATE_unsigned = 0x7, ! DW_ATE_unsigned_char = 0x8 }; #define DW_ATE_lo_user 0x80 --- 416,424 ---- DW_ATE_signed = 0x5, DW_ATE_signed_char = 0x6, DW_ATE_unsigned = 0x7, ! DW_ATE_unsigned_char = 0x8, ! /* DWARF 3. */ ! DW_ATE_imaginary_float = 0x9 }; #define DW_ATE_lo_user 0x80 *************** enum dwarf_array_dim_ordering *** 395,401 **** DW_ORD_col_major = 1 }; ! /* access attribute */ enum dwarf_access_attribute { DW_ACCESS_public = 1, --- 431,437 ---- DW_ORD_col_major = 1 }; ! /* Access attribute. */ enum dwarf_access_attribute { DW_ACCESS_public = 1, *************** enum dwarf_access_attribute *** 403,409 **** DW_ACCESS_private = 3 }; ! /* visibility */ enum dwarf_visibility_attribute { DW_VIS_local = 1, --- 439,445 ---- DW_ACCESS_private = 3 }; ! /* Visibility. */ enum dwarf_visibility_attribute { DW_VIS_local = 1, *************** enum dwarf_visibility_attribute *** 411,417 **** DW_VIS_qualified = 3 }; ! /* virtuality */ enum dwarf_virtuality_attribute { DW_VIRTUALITY_none = 0, --- 447,453 ---- DW_VIS_qualified = 3 }; ! /* Virtuality. */ enum dwarf_virtuality_attribute { DW_VIRTUALITY_none = 0, *************** enum dwarf_virtuality_attribute *** 419,425 **** DW_VIRTUALITY_pure_virtual = 2 }; ! /* case sensitivity */ enum dwarf_id_case { DW_ID_case_sensitive = 0, --- 455,461 ---- DW_VIRTUALITY_pure_virtual = 2 }; ! /* Case sensitivity. */ enum dwarf_id_case { DW_ID_case_sensitive = 0, *************** enum dwarf_id_case *** 428,434 **** DW_ID_case_insensitive = 3 }; ! /* calling convention */ enum dwarf_calling_convention { DW_CC_normal = 0x1, --- 464,470 ---- DW_ID_case_insensitive = 3 }; ! /* Calling convention. */ enum dwarf_calling_convention { DW_CC_normal = 0x1, *************** enum dwarf_calling_convention *** 439,445 **** #define DW_CC_lo_user 0x40 #define DW_CC_hi_user 0xff ! /* inline attribute */ enum dwarf_inline_attribute { DW_INL_not_inlined = 0, --- 475,481 ---- #define DW_CC_lo_user 0x40 #define DW_CC_hi_user 0xff ! /* Inline attribute. */ enum dwarf_inline_attribute { DW_INL_not_inlined = 0, *************** enum dwarf_inline_attribute *** 448,461 **** DW_INL_declared_inlined = 3 }; ! /* discriminant lists */ enum dwarf_discrim_list { DW_DSC_label = 0, DW_DSC_range = 1 }; ! /* line number opcodes */ enum dwarf_line_number_ops { DW_LNS_extended_op = 0, --- 484,497 ---- DW_INL_declared_inlined = 3 }; ! /* Discriminant lists. */ enum dwarf_discrim_list { DW_DSC_label = 0, DW_DSC_range = 1 }; ! /* Line number opcodes. */ enum dwarf_line_number_ops { DW_LNS_extended_op = 0, *************** enum dwarf_line_number_ops *** 467,476 **** DW_LNS_negate_stmt = 6, DW_LNS_set_basic_block = 7, DW_LNS_const_add_pc = 8, ! DW_LNS_fixed_advance_pc = 9 }; ! /* line number extended opcodes */ enum dwarf_line_number_x_ops { DW_LNE_end_sequence = 1, --- 503,516 ---- DW_LNS_negate_stmt = 6, DW_LNS_set_basic_block = 7, DW_LNS_const_add_pc = 8, ! DW_LNS_fixed_advance_pc = 9, ! /* DWARF 3. */ ! DW_LNS_set_prologue_end = 10, ! DW_LNS_set_epilogue_begin = 11, ! DW_LNS_set_isa = 12 }; ! /* Line number extended opcodes. */ enum dwarf_line_number_x_ops { DW_LNE_end_sequence = 1, *************** enum dwarf_line_number_x_ops *** 478,484 **** DW_LNE_define_file = 3 }; ! /* call frame information */ enum dwarf_call_frame_info { DW_CFA_advance_loc = 0x40, --- 518,524 ---- DW_LNE_define_file = 3 }; ! /* Call frame information. */ enum dwarf_call_frame_info { DW_CFA_advance_loc = 0x40, *************** enum dwarf_call_frame_info *** 499,515 **** DW_CFA_def_cfa = 0x0c, DW_CFA_def_cfa_register = 0x0d, DW_CFA_def_cfa_offset = 0x0e, DW_CFA_def_cfa_expression = 0x0f, DW_CFA_expression = 0x10, - /* Dwarf 2.1 */ DW_CFA_offset_extended_sf = 0x11, DW_CFA_def_cfa_sf = 0x12, DW_CFA_def_cfa_offset_sf = 0x13, ! /* SGI/MIPS specific */ DW_CFA_MIPS_advance_loc8 = 0x1d, ! ! /* GNU extensions */ DW_CFA_GNU_window_save = 0x2d, DW_CFA_GNU_args_size = 0x2e, DW_CFA_GNU_negative_offset_extended = 0x2f --- 539,556 ---- DW_CFA_def_cfa = 0x0c, DW_CFA_def_cfa_register = 0x0d, DW_CFA_def_cfa_offset = 0x0e, + + /* DWARF 3. */ DW_CFA_def_cfa_expression = 0x0f, DW_CFA_expression = 0x10, DW_CFA_offset_extended_sf = 0x11, DW_CFA_def_cfa_sf = 0x12, DW_CFA_def_cfa_offset_sf = 0x13, ! /* SGI/MIPS specific. */ DW_CFA_MIPS_advance_loc8 = 0x1d, ! ! /* GNU extensions. */ DW_CFA_GNU_window_save = 0x2d, DW_CFA_GNU_args_size = 0x2e, DW_CFA_GNU_negative_offset_extended = 0x2f *************** enum dwarf_call_frame_info *** 528,534 **** #define DW_ADDR_none 0 /* Source language names and codes. */ - enum dwarf_source_language { DW_LANG_C89 = 0x0001, --- 569,574 ---- *************** enum dwarf_source_language *** 542,556 **** DW_LANG_Pascal83 = 0x0009, DW_LANG_Modula2 = 0x000a, DW_LANG_Java = 0x000b, DW_LANG_Mips_Assembler = 0x8001 }; ! #define DW_LANG_lo_user 0x8000 /* implementation-defined range start */ ! #define DW_LANG_hi_user 0xffff /* implementation-defined range start */ /* Names and codes for macro information. */ - enum dwarf_macinfo_record_type { DW_MACINFO_define = 1, --- 582,600 ---- DW_LANG_Pascal83 = 0x0009, DW_LANG_Modula2 = 0x000a, DW_LANG_Java = 0x000b, + /* DWARF 3. */ + DW_LANG_C99 = 0x000c, + DW_LANG_Ada95 = 0x000d, + DW_LANG_Fortran95 = 0x000e, + /* MIPS. */ DW_LANG_Mips_Assembler = 0x8001 }; ! #define DW_LANG_lo_user 0x8000 /* Implementation-defined range start. */ ! #define DW_LANG_hi_user 0xffff /* Implementation-defined range start. */ /* Names and codes for macro information. */ enum dwarf_macinfo_record_type { DW_MACINFO_define = 1, *************** enum dwarf_macinfo_record_type *** 559,565 **** DW_MACINFO_end_file = 4, DW_MACINFO_vendor_ext = 255 }; - /* @@@ For use with GNU frame unwind information. */ --- 603,608 ---- diff -Nrc3pad gcc-3.0.4/gcc/dwarf2asm.c gcc-3.1/gcc/dwarf2asm.c *** gcc-3.0.4/gcc/dwarf2asm.c Tue Jun 5 21:07:46 2001 --- gcc-3.1/gcc/dwarf2asm.c Sat Jan 5 22:11:19 2002 *************** *** 1,22 **** /* Dwarf2 assembler output helper routines. ! Copyright (C) 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" --- 1,22 ---- /* Dwarf2 assembler output helper routines. ! Copyright (C) 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" *************** Boston, MA 02111-1307, USA. */ *** 25,30 **** --- 25,31 ---- #include "tree.h" #include "rtl.h" #include "output.h" + #include "target.h" #include "dwarf2asm.h" #include "dwarf2.h" #include "splay-tree.h" *************** Boston, MA 02111-1307, USA. */ *** 37,99 **** #define ASM_COMMENT_START ";#" #endif - /* Definitions of defaults for assembler-dependent names of various - pseudo-ops and section names. These may be overridden in the tm.h - file (if necessary) for a particular assembler. */ - - #ifdef OBJECT_FORMAT_ELF - #ifndef UNALIGNED_SHORT_ASM_OP - #define UNALIGNED_SHORT_ASM_OP "\t.2byte\t" - #endif - #ifndef UNALIGNED_INT_ASM_OP - #define UNALIGNED_INT_ASM_OP "\t.4byte\t" - #endif - #ifndef UNALIGNED_DOUBLE_INT_ASM_OP - #define UNALIGNED_DOUBLE_INT_ASM_OP "\t.8byte\t" - #endif - #endif /* OBJECT_FORMAT_ELF */ - - #ifndef ASM_BYTE_OP - #define ASM_BYTE_OP "\t.byte\t" - #endif - - /* We don't have unaligned support, let's hope the normal output works for - .debug_frame. But we know it won't work for .debug_info. */ - #if !defined(UNALIGNED_INT_ASM_OP) && defined(DWARF2_DEBUGGING_INFO) - #error DWARF2_DEBUGGING_INFO requires UNALIGNED_INT_ASM_OP. - #endif - ! #ifdef UNALIGNED_INT_ASM_OP ! static const char * unaligned_integer_asm_op PARAMS ((int)); ! static inline const char * ! unaligned_integer_asm_op (size) int size; { ! const char *op; ! switch (size) { ! case 1: ! op = ASM_BYTE_OP; ! break; ! case 2: ! op = UNALIGNED_SHORT_ASM_OP; ! break; ! case 4: ! op = UNALIGNED_INT_ASM_OP; ! break; ! case 8: ! #ifdef UNALIGNED_DOUBLE_INT_ASM_OP ! op = UNALIGNED_DOUBLE_INT_ASM_OP; ! break; ! #endif ! default: ! abort (); } ! return op; } ! #endif /* UNALIGNED_INT_ASM_OP */ /* Output an immediate constant in a given size. */ --- 38,66 ---- #define ASM_COMMENT_START ";#" #endif ! /* Output an unaligned integer with the given value and size. Prefer not ! to print a newline, since the caller may want to add a comment. */ ! void ! dw2_assemble_integer (size, x) int size; + rtx x; { ! const char *op = integer_asm_op (size, FALSE); ! ! if (op) { ! fputs (op, asm_out_file); ! if (GET_CODE (x) == CONST_INT) ! fprintf (asm_out_file, HOST_WIDE_INT_PRINT_HEX, INTVAL (x)); ! else ! output_addr_const (asm_out_file, x); } ! else ! assemble_integer (x, size, BITS_PER_UNIT, 1); } ! /* Output an immediate constant in a given size. */ *************** void *** 101,130 **** dw2_asm_output_data VPARAMS ((int size, unsigned HOST_WIDE_INT value, const char *comment, ...)) { ! #ifndef ANSI_PROTOTYPES ! int size; ! unsigned HOST_WIDE_INT value; ! const char *comment; ! #endif ! va_list ap; ! ! VA_START (ap, comment); ! ! #ifndef ANSI_PROTOTYPES ! size = va_arg (ap, int); ! value = va_arg (ap, unsigned HOST_WIDE_INT); ! comment = va_arg (ap, const char *); ! #endif if (size * 8 < HOST_BITS_PER_WIDE_INT) ! value &= ~(~(unsigned HOST_WIDE_INT)0 << (size * 8)); ! #ifdef UNALIGNED_INT_ASM_OP ! fputs (unaligned_integer_asm_op (size), asm_out_file); ! fprintf (asm_out_file, HOST_WIDE_INT_PRINT_HEX, value); ! #else ! assemble_integer (GEN_INT (value), size, 1); ! #endif if (flag_debug_asm && comment) { --- 68,82 ---- dw2_asm_output_data VPARAMS ((int size, unsigned HOST_WIDE_INT value, const char *comment, ...)) { ! VA_OPEN (ap, comment); ! VA_FIXEDARG (ap, int, size); ! VA_FIXEDARG (ap, unsigned HOST_WIDE_INT, value); ! VA_FIXEDARG (ap, const char *, comment); if (size * 8 < HOST_BITS_PER_WIDE_INT) ! value &= ~(~(unsigned HOST_WIDE_INT) 0 << (size * 8)); ! dw2_assemble_integer (size, GEN_INT (value)); if (flag_debug_asm && comment) { *************** dw2_asm_output_data VPARAMS ((int size, *** 133,139 **** } fputc ('\n', asm_out_file); ! va_end (ap); } /* Output the difference between two symbols in a given size. */ --- 85,91 ---- } fputc ('\n', asm_out_file); ! VA_CLOSE (ap); } /* Output the difference between two symbols in a given size. */ *************** void *** 146,178 **** dw2_asm_output_delta VPARAMS ((int size, const char *lab1, const char *lab2, const char *comment, ...)) { ! #ifndef ANSI_PROTOTYPES ! int size; ! const char *lab1, *lab2; ! const char *comment; ! #endif ! va_list ap; ! ! VA_START (ap, comment); ! ! #ifndef ANSI_PROTOTYPES ! size = va_arg (ap, int); ! lab1 = va_arg (ap, const char *); ! lab2 = va_arg (ap, const char *); ! comment = va_arg (ap, const char *); ! #endif ! #ifdef UNALIGNED_INT_ASM_OP ! fputs (unaligned_integer_asm_op (size), asm_out_file); ! assemble_name (asm_out_file, lab1); ! fputc ('-', asm_out_file); ! assemble_name (asm_out_file, lab2); ! #else ! assemble_integer (gen_rtx_MINUS (smallest_mode_for_size (size, MODE_INT), ! gen_rtx_SYMBOL_REF (Pmode, lab1), ! gen_rtx_SYMBOL_REF (Pmode, lab2)), ! size, 1); ! #endif if (flag_debug_asm && comment) { --- 98,113 ---- dw2_asm_output_delta VPARAMS ((int size, const char *lab1, const char *lab2, const char *comment, ...)) { ! VA_OPEN (ap, comment); ! VA_FIXEDARG (ap, int, size); ! VA_FIXEDARG (ap, const char *, lab1); ! VA_FIXEDARG (ap, const char *, lab2); ! VA_FIXEDARG (ap, const char *, comment); ! dw2_assemble_integer (size, ! gen_rtx_MINUS (Pmode, ! gen_rtx_SYMBOL_REF (Pmode, lab1), ! gen_rtx_SYMBOL_REF (Pmode, lab2))); if (flag_debug_asm && comment) { *************** dw2_asm_output_delta VPARAMS ((int size, *** 181,187 **** } fputc ('\n', asm_out_file); ! va_end (ap); } /* Output a section-relative reference to a label. In general this --- 116,122 ---- } fputc ('\n', asm_out_file); ! VA_CLOSE (ap); } /* Output a section-relative reference to a label. In general this *************** void *** 194,223 **** dw2_asm_output_offset VPARAMS ((int size, const char *label, const char *comment, ...)) { ! #ifndef ANSI_PROTOTYPES ! int size; ! const char *label; ! const char *comment; ! #endif ! va_list ap; ! ! VA_START (ap, comment); ! ! #ifndef ANSI_PROTOTYPES ! size = va_arg (ap, int); ! label = va_arg (ap, const char *); ! comment = va_arg (ap, const char *); ! #endif #ifdef ASM_OUTPUT_DWARF_OFFSET ASM_OUTPUT_DWARF_OFFSET (asm_out_file, size, label); #else ! #ifdef UNALIGNED_INT_ASM_OP ! fputs (unaligned_integer_asm_op (size), asm_out_file); ! assemble_name (asm_out_file, label); ! #else ! assemble_integer (gen_rtx_SYMBOL_REF (Pmode, label), size, 1); ! #endif #endif if (flag_debug_asm && comment) --- 129,143 ---- dw2_asm_output_offset VPARAMS ((int size, const char *label, const char *comment, ...)) { ! VA_OPEN (ap, comment); ! VA_FIXEDARG (ap, int, size); ! VA_FIXEDARG (ap, const char *, label); ! VA_FIXEDARG (ap, const char *, comment); #ifdef ASM_OUTPUT_DWARF_OFFSET ASM_OUTPUT_DWARF_OFFSET (asm_out_file, size, label); #else ! dw2_assemble_integer (size, gen_rtx_SYMBOL_REF (Pmode, label)); #endif if (flag_debug_asm && comment) *************** dw2_asm_output_offset VPARAMS ((int size *** 227,268 **** } fputc ('\n', asm_out_file); ! va_end (ap); } /* Output a self-relative reference to a label, possibly in a different section or object file. */ void ! dw2_asm_output_pcrel VPARAMS ((int size, const char *label, const char *comment, ...)) { ! #ifndef ANSI_PROTOTYPES ! int size; ! const char *label; ! const char *comment; ! #endif ! va_list ap; ! ! VA_START (ap, comment); ! ! #ifndef ANSI_PROTOTYPES ! size = va_arg (ap, int); ! label = va_arg (ap, const char *); ! comment = va_arg (ap, const char *); ! #endif #ifdef ASM_OUTPUT_DWARF_PCREL ASM_OUTPUT_DWARF_PCREL (asm_out_file, size, label); #else ! #ifdef UNALIGNED_INT_ASM_OP ! fputs (unaligned_integer_asm_op (size), asm_out_file); ! assemble_name (asm_out_file, label); ! fputc ('-', asm_out_file); ! fputc ('.', asm_out_file); ! #else ! abort (); ! #endif #endif if (flag_debug_asm && comment) --- 147,175 ---- } fputc ('\n', asm_out_file); ! VA_CLOSE (ap); } /* Output a self-relative reference to a label, possibly in a different section or object file. */ void ! dw2_asm_output_pcrel VPARAMS ((int size ATTRIBUTE_UNUSED, ! const char *label ATTRIBUTE_UNUSED, const char *comment, ...)) { ! VA_OPEN (ap, comment); ! VA_FIXEDARG (ap, int, size); ! VA_FIXEDARG (ap, const char *, label); ! VA_FIXEDARG (ap, const char *, comment); #ifdef ASM_OUTPUT_DWARF_PCREL ASM_OUTPUT_DWARF_PCREL (asm_out_file, size, label); #else ! dw2_assemble_integer (size, ! gen_rtx_MINUS (Pmode, ! gen_rtx_SYMBOL_REF (Pmode, label), ! pc_rtx)); #endif if (flag_debug_asm && comment) *************** dw2_asm_output_pcrel VPARAMS ((int size, *** 272,278 **** } fputc ('\n', asm_out_file); ! va_end (ap); } /* Output an absolute reference to a label. */ --- 179,185 ---- } fputc ('\n', asm_out_file); ! VA_CLOSE (ap); } /* Output an absolute reference to a label. */ *************** void *** 281,307 **** dw2_asm_output_addr VPARAMS ((int size, const char *label, const char *comment, ...)) { ! #ifndef ANSI_PROTOTYPES ! int size; ! const char *label; ! const char *comment; ! #endif ! va_list ap; ! ! VA_START (ap, comment); ! ! #ifndef ANSI_PROTOTYPES ! size = va_arg (ap, int); ! label = va_arg (ap, const char *); ! comment = va_arg (ap, const char *); ! #endif ! #ifdef UNALIGNED_INT_ASM_OP ! fputs (unaligned_integer_asm_op (size), asm_out_file); ! assemble_name (asm_out_file, label); ! #else ! assemble_integer (gen_rtx_SYMBOL_REF (Pmode, label), size, 1); ! #endif if (flag_debug_asm && comment) { --- 188,199 ---- dw2_asm_output_addr VPARAMS ((int size, const char *label, const char *comment, ...)) { ! VA_OPEN (ap, comment); ! VA_FIXEDARG (ap, int, size); ! VA_FIXEDARG (ap, const char *, label); ! VA_FIXEDARG (ap, const char *, comment); ! dw2_assemble_integer (size, gen_rtx_SYMBOL_REF (Pmode, label)); if (flag_debug_asm && comment) { *************** dw2_asm_output_addr VPARAMS ((int size, *** 310,316 **** } fputc ('\n', asm_out_file); ! va_end (ap); } /* Similar, but use an RTX expression instead of a text label. */ --- 202,208 ---- } fputc ('\n', asm_out_file); ! VA_CLOSE (ap); } /* Similar, but use an RTX expression instead of a text label. */ *************** void *** 319,345 **** dw2_asm_output_addr_rtx VPARAMS ((int size, rtx addr, const char *comment, ...)) { ! #ifndef ANSI_PROTOTYPES ! int size; ! rtx addr; ! const char *comment; ! #endif ! va_list ap; ! ! VA_START (ap, comment); ! ! #ifndef ANSI_PROTOTYPES ! size = va_arg (ap, int); ! addr = va_arg (ap, rtx); ! comment = va_arg (ap, const char *); ! #endif ! #ifdef UNALIGNED_INT_ASM_OP ! fputs (unaligned_integer_asm_op (size), asm_out_file); ! output_addr_const (asm_out_file, addr); ! #else ! assemble_integer (addr, size, 1); ! #endif if (flag_debug_asm && comment) { --- 211,222 ---- dw2_asm_output_addr_rtx VPARAMS ((int size, rtx addr, const char *comment, ...)) { ! VA_OPEN (ap, comment); ! VA_FIXEDARG (ap, int, size); ! VA_FIXEDARG (ap, rtx, addr); ! VA_FIXEDARG (ap, const char *, comment); ! dw2_assemble_integer (size, addr); if (flag_debug_asm && comment) { *************** dw2_asm_output_addr_rtx VPARAMS ((int si *** 348,375 **** } fputc ('\n', asm_out_file); ! va_end (ap); } void dw2_asm_output_nstring VPARAMS ((const char *str, size_t orig_len, const char *comment, ...)) { ! #ifndef ANSI_PROTOTYPES ! const char *str; ! size_t orig_len; ! const char *comment; ! #endif ! va_list ap; ! size_t i, len = orig_len; ! VA_START (ap, comment); ! #ifndef ANSI_PROTOTYPES ! str = va_arg (ap, const char *); ! len = va_arg (ap, size_t); ! comment = va_arg (ap, const char *); ! #endif if (len == (size_t) -1) len = strlen (str); --- 225,245 ---- } fputc ('\n', asm_out_file); ! VA_CLOSE (ap); } void dw2_asm_output_nstring VPARAMS ((const char *str, size_t orig_len, const char *comment, ...)) { ! size_t i, len; ! VA_OPEN (ap, comment); ! VA_FIXEDARG (ap, const char *, str); ! VA_FIXEDARG (ap, size_t, orig_len); ! VA_FIXEDARG (ap, const char *, comment); ! len = orig_len; if (len == (size_t) -1) len = strlen (str); *************** dw2_asm_output_nstring VPARAMS ((const c *** 399,408 **** len += 1; ASM_OUTPUT_ASCII (asm_out_file, str, len); if (orig_len != (size_t) -1) ! fprintf (asm_out_file, "%s0\n", ASM_BYTE_OP); } ! va_end (ap); } --- 269,278 ---- len += 1; ASM_OUTPUT_ASCII (asm_out_file, str, len); if (orig_len != (size_t) -1) ! assemble_integer (const0_rtx, 1, BITS_PER_UNIT, 1); } ! VA_CLOSE (ap); } *************** void *** 635,652 **** dw2_asm_output_data_uleb128 VPARAMS ((unsigned HOST_WIDE_INT value, const char *comment, ...)) { ! #ifndef ANSI_PROTOTYPES ! unsigned HOST_WIDE_INT value; ! const char *comment; ! #endif ! va_list ap; ! ! VA_START (ap, comment); ! ! #ifndef ANSI_PROTOTYPES ! value = va_arg (ap, unsigned HOST_WIDE_INT); ! comment = va_arg (ap, const char *); ! #endif #ifdef HAVE_AS_LEB128 fputs ("\t.uleb128 ", asm_out_file); --- 505,513 ---- dw2_asm_output_data_uleb128 VPARAMS ((unsigned HOST_WIDE_INT value, const char *comment, ...)) { ! VA_OPEN (ap, comment); ! VA_FIXEDARG (ap, unsigned HOST_WIDE_INT, value); ! VA_FIXEDARG (ap, const char *, comment); #ifdef HAVE_AS_LEB128 fputs ("\t.uleb128 ", asm_out_file); *************** dw2_asm_output_data_uleb128 VPARAMS ((un *** 660,667 **** #else { unsigned HOST_WIDE_INT work = value; ! fputs (ASM_BYTE_OP, asm_out_file); do { int byte = (work & 0x7f); --- 521,530 ---- #else { unsigned HOST_WIDE_INT work = value; + const char *byte_op = targetm.asm_out.byte_op; ! if (byte_op) ! fputs (byte_op, asm_out_file); do { int byte = (work & 0x7f); *************** dw2_asm_output_data_uleb128 VPARAMS ((un *** 670,678 **** /* More bytes to follow. */ byte |= 0x80; ! fprintf (asm_out_file, "0x%x", byte); ! if (work != 0) ! fputc (',', asm_out_file); } while (work != 0); --- 533,546 ---- /* More bytes to follow. */ byte |= 0x80; ! if (byte_op) ! { ! fprintf (asm_out_file, "0x%x", byte); ! if (work != 0) ! fputc (',', asm_out_file); ! } ! else ! assemble_integer (GEN_INT (byte), 1, BITS_PER_UNIT, 1); } while (work != 0); *************** dw2_asm_output_data_uleb128 VPARAMS ((un *** 690,696 **** #endif fputc ('\n', asm_out_file); ! va_end (ap); } /* Output an signed LEB128 quantity. */ --- 558,564 ---- #endif fputc ('\n', asm_out_file); ! VA_CLOSE (ap); } /* Output an signed LEB128 quantity. */ *************** void *** 699,716 **** dw2_asm_output_data_sleb128 VPARAMS ((HOST_WIDE_INT value, const char *comment, ...)) { ! #ifndef ANSI_PROTOTYPES ! HOST_WIDE_INT value; ! const char *comment; ! #endif ! va_list ap; ! ! VA_START (ap, comment); ! ! #ifndef ANSI_PROTOTYPES ! value = va_arg (ap, HOST_WIDE_INT); ! comment = va_arg (ap, const char *); ! #endif #ifdef HAVE_AS_LEB128 fputs ("\t.sleb128 ", asm_out_file); --- 567,575 ---- dw2_asm_output_data_sleb128 VPARAMS ((HOST_WIDE_INT value, const char *comment, ...)) { ! VA_OPEN (ap, comment); ! VA_FIXEDARG (ap, HOST_WIDE_INT, value); ! VA_FIXEDARG (ap, const char *, comment); #ifdef HAVE_AS_LEB128 fputs ("\t.sleb128 ", asm_out_file); *************** dw2_asm_output_data_sleb128 VPARAMS ((HO *** 725,732 **** { HOST_WIDE_INT work = value; int more, byte; ! fputs (ASM_BYTE_OP, asm_out_file); do { byte = (work & 0x7f); --- 584,593 ---- { HOST_WIDE_INT work = value; int more, byte; + const char *byte_op = targetm.asm_out.byte_op; ! if (byte_op) ! fputs (byte_op, asm_out_file); do { byte = (work & 0x7f); *************** dw2_asm_output_data_sleb128 VPARAMS ((HO *** 737,745 **** if (more) byte |= 0x80; ! fprintf (asm_out_file, "0x%x", byte); ! if (more) ! fputc (',', asm_out_file); } while (more); --- 598,611 ---- if (more) byte |= 0x80; ! if (byte_op) ! { ! fprintf (asm_out_file, "0x%x", byte); ! if (more) ! fputc (',', asm_out_file); ! } ! else ! assemble_integer (GEN_INT (byte), 1, BITS_PER_UNIT, 1); } while (more); *************** dw2_asm_output_data_sleb128 VPARAMS ((HO *** 757,763 **** #endif fputc ('\n', asm_out_file); ! va_end (ap); } void --- 623,629 ---- #endif fputc ('\n', asm_out_file); ! VA_CLOSE (ap); } void *************** dw2_asm_output_delta_uleb128 VPARAMS ((c *** 765,783 **** const char *lab2 ATTRIBUTE_UNUSED, const char *comment, ...)) { ! #ifndef ANSI_PROTOTYPES ! const char *lab1, *lab2; ! const char *comment; ! #endif ! va_list ap; ! ! VA_START (ap, comment); ! ! #ifndef ANSI_PROTOTYPES ! lab1 = va_arg (ap, const char *); ! lab2 = va_arg (ap, const char *); ! comment = va_arg (ap, const char *); ! #endif #ifdef HAVE_AS_LEB128 fputs ("\t.uleb128 ", asm_out_file); --- 631,640 ---- const char *lab2 ATTRIBUTE_UNUSED, const char *comment, ...)) { ! VA_OPEN (ap, comment); ! VA_FIXEDARG (ap, const char *, lab1); ! VA_FIXEDARG (ap, const char *, lab2); ! VA_FIXEDARG (ap, const char *, comment); #ifdef HAVE_AS_LEB128 fputs ("\t.uleb128 ", asm_out_file); *************** dw2_asm_output_delta_uleb128 VPARAMS ((c *** 795,801 **** } fputc ('\n', asm_out_file); ! va_end (ap); } void --- 652,658 ---- } fputc ('\n', asm_out_file); ! VA_CLOSE (ap); } void *************** dw2_asm_output_delta_sleb128 VPARAMS ((c *** 803,821 **** const char *lab2 ATTRIBUTE_UNUSED, const char *comment, ...)) { ! #ifndef ANSI_PROTOTYPES ! const char *lab1, *lab2; ! const char *comment; ! #endif ! va_list ap; ! ! VA_START (ap, comment); ! ! #ifndef ANSI_PROTOTYPES ! lab1 = va_arg (ap, const char *); ! lab2 = va_arg (ap, const char *); ! comment = va_arg (ap, const char *); ! #endif #ifdef HAVE_AS_LEB128 fputs ("\t.sleb128 ", asm_out_file); --- 660,669 ---- const char *lab2 ATTRIBUTE_UNUSED, const char *comment, ...)) { ! VA_OPEN (ap, comment); ! VA_FIXEDARG (ap, const char *, lab1); ! VA_FIXEDARG (ap, const char *, lab2); ! VA_FIXEDARG (ap, const char *, comment); #ifdef HAVE_AS_LEB128 fputs ("\t.sleb128 ", asm_out_file); *************** dw2_asm_output_delta_sleb128 VPARAMS ((c *** 833,846 **** } fputc ('\n', asm_out_file); ! va_end (ap); } static rtx dw2_force_const_mem PARAMS ((rtx)); static int dw2_output_indirect_constant_1 PARAMS ((splay_tree_node, void *)); static splay_tree indirect_pool; /* Put X, a SYMBOL_REF, in memory. Return a SYMBOL_REF to the allocated memory. Differs from force_const_mem in that a single pool is used for the entire unit of translation, and the memory is not guaranteed to be --- 681,722 ---- } fputc ('\n', asm_out_file); ! VA_CLOSE (ap); } + static int mark_indirect_pool_entry PARAMS ((splay_tree_node, void *)); + static void mark_indirect_pool PARAMS ((PTR arg)); static rtx dw2_force_const_mem PARAMS ((rtx)); static int dw2_output_indirect_constant_1 PARAMS ((splay_tree_node, void *)); static splay_tree indirect_pool; + #if defined(HAVE_GAS_HIDDEN) && defined(SUPPORTS_ONE_ONLY) + # define USE_LINKONCE_INDIRECT 1 + #else + # define USE_LINKONCE_INDIRECT 0 + #endif + + /* Mark all indirect constants for GC. */ + + static int + mark_indirect_pool_entry (node, data) + splay_tree_node node; + void* data ATTRIBUTE_UNUSED; + { + ggc_mark_nonnull_tree ((tree) node->value); + return 0; + } + + /* Mark all indirect constants for GC. */ + + static void + mark_indirect_pool (arg) + PTR arg ATTRIBUTE_UNUSED; + { + splay_tree_foreach (indirect_pool, mark_indirect_pool_entry, NULL); + } + /* Put X, a SYMBOL_REF, in memory. Return a SYMBOL_REF to the allocated memory. Differs from force_const_mem in that a single pool is used for the entire unit of translation, and the memory is not guaranteed to be *************** dw2_force_const_mem (x) *** 851,885 **** rtx x; { splay_tree_node node; ! const char *const_sym; if (! indirect_pool) ! indirect_pool = splay_tree_new (splay_tree_compare_pointers, NULL, NULL); if (GET_CODE (x) != SYMBOL_REF) abort (); ! node = splay_tree_lookup (indirect_pool, (splay_tree_key) XSTR (x, 0)); if (node) ! const_sym = (const char *) node->value; else { - extern int const_labelno; - char label[32]; tree id; ! ASM_GENERATE_INTERNAL_LABEL (label, "LC", const_labelno); ! ++const_labelno; ! const_sym = ggc_strdup (label); ! id = maybe_get_identifier (XSTR (x, 0)); if (id) TREE_SYMBOL_REFERENCED (id) = 1; ! splay_tree_insert (indirect_pool, (splay_tree_key) XSTR (x, 0), ! (splay_tree_value) const_sym); } ! return gen_rtx_SYMBOL_REF (Pmode, const_sym); } /* A helper function for dw2_output_indirect_constants called through --- 727,787 ---- rtx x; { splay_tree_node node; ! const char *str; ! tree decl; if (! indirect_pool) ! { ! indirect_pool = splay_tree_new (splay_tree_compare_pointers, NULL, NULL); ! ggc_add_root (&indirect_pool, 1, sizeof indirect_pool, mark_indirect_pool); ! } if (GET_CODE (x) != SYMBOL_REF) abort (); ! ! STRIP_NAME_ENCODING (str, XSTR (x, 0)); ! node = splay_tree_lookup (indirect_pool, (splay_tree_key) str); if (node) ! decl = (tree) node->value; else { tree id; ! if (USE_LINKONCE_INDIRECT) ! { ! char *ref_name = alloca (strlen (str) + sizeof "DW.ref."); ! sprintf (ref_name, "DW.ref.%s", str); ! id = get_identifier (ref_name); ! decl = build_decl (VAR_DECL, id, ptr_type_node); ! DECL_ARTIFICIAL (decl) = 1; ! TREE_PUBLIC (decl) = 1; ! DECL_INITIAL (decl) = decl; ! make_decl_one_only (decl); ! } ! else ! { ! extern int const_labelno; ! char label[32]; ! ! ASM_GENERATE_INTERNAL_LABEL (label, "LC", const_labelno); ! ++const_labelno; ! id = get_identifier (label); ! decl = build_decl (VAR_DECL, id, ptr_type_node); ! DECL_ARTIFICIAL (decl) = 1; ! TREE_STATIC (decl) = 1; ! DECL_INITIAL (decl) = decl; ! } ! ! id = maybe_get_identifier (str); if (id) TREE_SYMBOL_REFERENCED (id) = 1; ! splay_tree_insert (indirect_pool, (splay_tree_key) str, ! (splay_tree_value) decl); } ! return XEXP (DECL_RTL (decl), 0); } /* A helper function for dw2_output_indirect_constants called through *************** dw2_output_indirect_constant_1 (node, da *** 890,904 **** splay_tree_node node; void* data ATTRIBUTE_UNUSED; { ! const char *label, *sym; rtx sym_ref; - label = (const char *) node->value; sym = (const char *) node->key; sym_ref = gen_rtx_SYMBOL_REF (Pmode, sym); ! ! ASM_OUTPUT_LABEL (asm_out_file, label); ! assemble_integer (sym_ref, POINTER_SIZE / BITS_PER_UNIT, 1); return 0; } --- 792,806 ---- splay_tree_node node; void* data ATTRIBUTE_UNUSED; { ! const char *sym; rtx sym_ref; sym = (const char *) node->key; sym_ref = gen_rtx_SYMBOL_REF (Pmode, sym); ! if (USE_LINKONCE_INDIRECT) ! fprintf (asm_out_file, "\t.hidden DW.ref.%s\n", sym); ! assemble_variable ((tree) node->value, 1, 1, 1); ! assemble_integer (sym_ref, POINTER_SIZE / BITS_PER_UNIT, POINTER_SIZE, 1); return 0; } *************** dw2_output_indirect_constant_1 (node, da *** 908,926 **** void dw2_output_indirect_constants () { ! if (! indirect_pool) ! return; ! ! /* Assume that the whole reason we're emitting these symbol references ! indirectly is that they contain dynamic relocations, and are thus ! read-write. If there was no possibility of a dynamic relocation, we ! might as well have used a direct relocation. */ ! data_section (); ! ! /* Everything we're emitting is a pointer. Align appropriately. */ ! assemble_align (POINTER_SIZE); ! ! splay_tree_foreach (indirect_pool, dw2_output_indirect_constant_1, NULL); } /* Like dw2_asm_output_addr_rtx, but encode the pointer as directed. */ --- 810,817 ---- void dw2_output_indirect_constants () { ! if (indirect_pool) ! splay_tree_foreach (indirect_pool, dw2_output_indirect_constant_1, NULL); } /* Like dw2_asm_output_addr_rtx, but encode the pointer as directed. */ *************** dw2_asm_output_encoded_addr_rtx VPARAMS *** 930,962 **** rtx addr, const char *comment, ...)) { - #ifndef ANSI_PROTOTYPES - int encoding; - rtx addr; - const char *comment; - #endif - va_list ap; int size; ! VA_START (ap, comment); ! ! #ifndef ANSI_PROTOTYPES ! encoding = va_arg (ap, int); ! addr = va_arg (ap, rtx); ! comment = va_arg (ap, const char *); ! #endif size = size_of_encoded_value (encoding); if (encoding == DW_EH_PE_aligned) { assemble_align (POINTER_SIZE); ! encoding = DW_EH_PE_absptr; } ! /* NULL is _always_ represented as a plain zero. */ ! if (addr == const0_rtx) ! assemble_integer (addr, size, 1); else { restart: --- 821,846 ---- rtx addr, const char *comment, ...)) { int size; ! VA_OPEN (ap, comment); ! VA_FIXEDARG (ap, int, encoding); ! VA_FIXEDARG (ap, rtx, addr); ! VA_FIXEDARG (ap, const char *, comment); size = size_of_encoded_value (encoding); if (encoding == DW_EH_PE_aligned) { assemble_align (POINTER_SIZE); ! assemble_integer (addr, size, POINTER_SIZE, 1); ! return; } ! /* NULL is _always_ represented as a plain zero, as is 1 for Ada's ! "all others". */ ! if (addr == const0_rtx || addr == const1_rtx) ! assemble_integer (addr, size, BITS_PER_UNIT, 1); else { restart: *************** dw2_asm_output_encoded_addr_rtx VPARAMS *** 985,996 **** switch (encoding & 0xF0) { case DW_EH_PE_absptr: ! #ifdef UNALIGNED_INT_ASM_OP ! fputs (unaligned_integer_asm_op (size), asm_out_file); ! output_addr_const (asm_out_file, addr); ! #else ! assemble_integer (addr, size, 1); ! #endif break; case DW_EH_PE_pcrel: --- 869,875 ---- switch (encoding & 0xF0) { case DW_EH_PE_absptr: ! dw2_assemble_integer (size, addr); break; case DW_EH_PE_pcrel: *************** dw2_asm_output_encoded_addr_rtx VPARAMS *** 999,1012 **** #ifdef ASM_OUTPUT_DWARF_PCREL ASM_OUTPUT_DWARF_PCREL (asm_out_file, size, XSTR (addr, 0)); #else ! #ifdef UNALIGNED_INT_ASM_OP ! fputs (unaligned_integer_asm_op (size), asm_out_file); ! assemble_name (asm_out_file, XSTR (addr, 0)); ! fputc ('-', asm_out_file); ! fputc ('.', asm_out_file); ! #else ! abort (); ! #endif #endif break; --- 878,884 ---- #ifdef ASM_OUTPUT_DWARF_PCREL ASM_OUTPUT_DWARF_PCREL (asm_out_file, size, XSTR (addr, 0)); #else ! dw2_assemble_integer (size, gen_rtx_MINUS (Pmode, addr, pc_rtx)); #endif break; *************** dw2_asm_output_encoded_addr_rtx VPARAMS *** 1028,1032 **** } fputc ('\n', asm_out_file); ! va_end (ap); } --- 900,904 ---- } fputc ('\n', asm_out_file); ! VA_CLOSE (ap); } diff -Nrc3pad gcc-3.0.4/gcc/dwarf2asm.h gcc-3.1/gcc/dwarf2asm.h *** gcc-3.0.4/gcc/dwarf2asm.h Wed May 16 19:29:54 2001 --- gcc-3.1/gcc/dwarf2asm.h Mon Dec 17 15:05:21 2001 *************** *** 1,28 **** /* Dwarf2 assembler output helper routines. Copyright (C) 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* ??? Format checking yields "null format string" warnings, which is the way these routines are signaled that there is no associated debug information. So the attributes are commented out. */ extern void dw2_asm_output_data PARAMS ((int, unsigned HOST_WIDE_INT, const char *, ...)) /* ATTRIBUTE_PRINTF_3 */; --- 1,30 ---- /* Dwarf2 assembler output helper routines. Copyright (C) 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* ??? Format checking yields "null format string" warnings, which is the way these routines are signaled that there is no associated debug information. So the attributes are commented out. */ + extern void dw2_assemble_integer PARAMS ((int, rtx)); + extern void dw2_asm_output_data PARAMS ((int, unsigned HOST_WIDE_INT, const char *, ...)) /* ATTRIBUTE_PRINTF_3 */; diff -Nrc3pad gcc-3.0.4/gcc/dwarf2out.c gcc-3.1/gcc/dwarf2out.c *** gcc-3.0.4/gcc/dwarf2out.c Mon Dec 3 02:38:44 2001 --- gcc-3.1/gcc/dwarf2out.c Tue May 7 17:27:30 2002 *************** *** 1,29 **** /* Output Dwarf2 format symbol table information from the GNU C compiler. ! Copyright (C) 1992, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Gary Funck (gary@intrepid.com). Derived from DWARF 1 implementation of Ron Guilmette (rfg@monkeys.com). Extensively modified by Jason Merrill (jason@cygnus.com). ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ ! /* TODO: Implement .debug_str handling, and share entries somehow. ! Emit .debug_line header even when there are no functions, since the file numbers are used by .debug_info. Alternately, leave out locations for types and decls. Avoid talking about ctors and op= for PODs. --- 1,28 ---- /* Output Dwarf2 format symbol table information from the GNU C compiler. ! Copyright (C) 1992, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Gary Funck (gary@intrepid.com). Derived from DWARF 1 implementation of Ron Guilmette (rfg@monkeys.com). Extensively modified by Jason Merrill (jason@cygnus.com). ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ ! /* TODO: Emit .debug_line header even when there are no functions, since the file numbers are used by .debug_info. Alternately, leave out locations for types and decls. Avoid talking about ctors and op= for PODs. *************** Boston, MA 02111-1307, USA. */ *** 47,52 **** --- 46,52 ---- #include "function.h" #include "output.h" #include "expr.h" + #include "libfuncs.h" #include "except.h" #include "dwarf2.h" #include "dwarf2out.h" *************** Boston, MA 02111-1307, USA. */ *** 56,61 **** --- 56,70 ---- #include "ggc.h" #include "md5.h" #include "tm_p.h" + #include "diagnostic.h" + #include "debug.h" + #include "target.h" + #include "langhooks.h" + #include "hashtable.h" + + #ifdef DWARF2_DEBUGGING_INFO + static void dwarf2out_source_line PARAMS ((unsigned int, const char *)); + #endif /* DWARF2 Abbreviation Glossary: CFA = Canonical Frame Address *************** int *** 82,87 **** --- 91,97 ---- dwarf2out_do_frame () { return (write_symbols == DWARF2_DEBUG + || write_symbols == VMS_AND_DWARF2_DEBUG #ifdef DWARF2_FRAME_INFO || DWARF2_FRAME_INFO #endif *************** dwarf2out_do_frame () *** 99,104 **** --- 109,138 ---- unique to each function definition. */ unsigned current_funcdef_number = 0; + /* The size of the target's pointer type. */ + #ifndef PTR_SIZE + #define PTR_SIZE (POINTER_SIZE / BITS_PER_UNIT) + #endif + + /* Default version of targetm.eh_frame_section. Note this must appear + outside the DWARF2_DEBUGGING_INFO || DWARF2_UNWIND_INFO macro + guards. */ + + void + default_eh_frame_section () + { + #ifdef EH_FRAME_SECTION_NAME + named_section_flags (EH_FRAME_SECTION_NAME, SECTION_WRITE); + #else + tree label = get_file_function_name ('F'); + + data_section (); + ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE)); + ASM_GLOBALIZE_LABEL (asm_out_file, IDENTIFIER_POINTER (label)); + ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label)); + #endif + } + #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO) /* How to start an assembler comment. */ *************** typedef struct cfa_loc *** 148,154 **** /* All call frame descriptions (FDE's) in the GCC generated DWARF refer to a single Common Information Entry (CIE), defined at ! the beginning of the .debug_frame section. This used of a single CIE obviates the need to keep track of multiple CIE's in the DWARF generation routines below. */ --- 182,188 ---- /* All call frame descriptions (FDE's) in the GCC generated DWARF refer to a single Common Information Entry (CIE), defined at ! the beginning of the .debug_frame section. This use of a single CIE obviates the need to keep track of multiple CIE's in the DWARF generation routines below. */ *************** typedef struct dw_fde_struct *** 164,177 **** } dw_fde_node; ! /* Maximum size (in bytes) of an artificially generated label. */ #define MAX_ARTIFICIAL_LABEL_BYTES 30 - /* The size of the target's pointer type. */ - #ifndef PTR_SIZE - #define PTR_SIZE (POINTER_SIZE / BITS_PER_UNIT) - #endif - /* The size of addresses as they appear in the Dwarf 2 data. Some architectures use word addresses to refer to code locations, but Dwarf 2 info always uses byte addresses. On such machines, --- 198,206 ---- } dw_fde_node; ! /* Maximum size (in bytes) of an artificially generated label. */ #define MAX_ARTIFICIAL_LABEL_BYTES 30 /* The size of addresses as they appear in the Dwarf 2 data. Some architectures use word addresses to refer to code locations, but Dwarf 2 info always uses byte addresses. On such machines, *************** dw_fde_node; *** 203,209 **** #else #define DWARF_CIE_DATA_ALIGNMENT ((int) UNITS_PER_WORD) #endif ! #endif /* not DWARF_CIE_DATA_ALIGNMENT */ /* A pointer to the base of a table that contains frame description information for each routine. */ --- 232,238 ---- #else #define DWARF_CIE_DATA_ALIGNMENT ((int) UNITS_PER_WORD) #endif ! #endif /* A pointer to the base of a table that contains frame description information for each routine. */ *************** static dw_cfi_ref cie_cfi_head; *** 228,233 **** --- 257,272 ---- associated with the current function (body) definition. */ static unsigned current_funcdef_fde; + struct ht *debug_str_hash; + + struct indirect_string_node + { + struct ht_identifier id; + unsigned int refcount; + unsigned int form; + char *label; + }; + /* Forward declarations for functions defined in this file. */ static char *stripattributes PARAMS ((const char *)); *************** static const char *dwarf_cfi_name PARAMS *** 235,241 **** static dw_cfi_ref new_cfi PARAMS ((void)); static void add_cfi PARAMS ((dw_cfi_ref *, dw_cfi_ref)); static void add_fde_cfi PARAMS ((const char *, dw_cfi_ref)); ! static void lookup_cfa_1 PARAMS ((dw_cfi_ref, dw_cfa_location *)); static void lookup_cfa PARAMS ((dw_cfa_location *)); static void reg_save PARAMS ((const char *, unsigned, unsigned, long)); --- 274,281 ---- static dw_cfi_ref new_cfi PARAMS ((void)); static void add_cfi PARAMS ((dw_cfi_ref *, dw_cfi_ref)); static void add_fde_cfi PARAMS ((const char *, dw_cfi_ref)); ! static void lookup_cfa_1 PARAMS ((dw_cfi_ref, ! dw_cfa_location *)); static void lookup_cfa PARAMS ((dw_cfa_location *)); static void reg_save PARAMS ((const char *, unsigned, unsigned, long)); *************** static void get_cfa_from_loc_descr PARA *** 255,261 **** struct dw_loc_descr_struct *)); static struct dw_loc_descr_struct *build_cfa_loc PARAMS ((dw_cfa_location *)); ! static void def_cfa_1 PARAMS ((const char *, dw_cfa_location *)); /* How to start an assembler comment. */ #ifndef ASM_COMMENT_START --- 295,302 ---- struct dw_loc_descr_struct *)); static struct dw_loc_descr_struct *build_cfa_loc PARAMS ((dw_cfa_location *)); ! static void def_cfa_1 PARAMS ((const char *, ! dw_cfa_location *)); /* How to start an assembler comment. */ #ifndef ASM_COMMENT_START *************** static void def_cfa_1 PARAMS ((const *** 271,298 **** #define SECTION_ASM_OP "\t.section\t" #endif ! /* The default format used by the ASM_OUTPUT_SECTION macro (see below) to ! print the SECTION_ASM_OP and the section name. The default here works for ! almost all svr4 assemblers, except for the sparc, where the section name ! must be enclosed in double quotes. (See sparcv4.h). */ ! #ifndef SECTION_FORMAT ! #ifdef PUSHSECTION_FORMAT ! #define SECTION_FORMAT PUSHSECTION_FORMAT ! #else ! #define SECTION_FORMAT "%s%s\n" ! #endif ! #endif ! ! #ifndef FRAME_SECTION ! #define FRAME_SECTION ".debug_frame" #endif #ifndef FUNC_BEGIN_LABEL #define FUNC_BEGIN_LABEL "LFB" #endif #ifndef FUNC_END_LABEL #define FUNC_END_LABEL "LFE" #endif #define FRAME_BEGIN_LABEL "Lframe" #define CIE_AFTER_SIZE_LABEL "LSCIE" #define CIE_END_LABEL "LECIE" --- 312,329 ---- #define SECTION_ASM_OP "\t.section\t" #endif ! #ifndef DEBUG_FRAME_SECTION ! #define DEBUG_FRAME_SECTION ".debug_frame" #endif #ifndef FUNC_BEGIN_LABEL #define FUNC_BEGIN_LABEL "LFB" #endif + #ifndef FUNC_END_LABEL #define FUNC_END_LABEL "LFE" #endif + #define FRAME_BEGIN_LABEL "Lframe" #define CIE_AFTER_SIZE_LABEL "LSCIE" #define CIE_END_LABEL "LECIE" *************** static void def_cfa_1 PARAMS ((const *** 311,321 **** output operations. These may be overridden from within the tm.h file, but typically, that is unnecessary. */ - #ifndef ASM_OUTPUT_SECTION - #define ASM_OUTPUT_SECTION(FILE, SECTION) \ - fprintf ((FILE), SECTION_FORMAT, SECTION_ASM_OP, SECTION) - #endif - #ifdef SET_ASM_OP #ifndef ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL #define ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL(FILE, SY, HI, LO) \ --- 342,347 ---- *************** static void def_cfa_1 PARAMS ((const *** 328,334 **** assemble_name (FILE, LO); \ } while (0) #endif ! #endif /* SET_ASM_OP */ /* The DWARF 2 CFA column which tracks the return address. Normally this is the column for PC, or the first column after all of the hard --- 354,360 ---- assemble_name (FILE, LO); \ } while (0) #endif ! #endif /* The DWARF 2 CFA column which tracks the return address. Normally this is the column for PC, or the first column after all of the hard *************** static void def_cfa_1 PARAMS ((const *** 347,352 **** --- 373,384 ---- #define DWARF_FRAME_REGNUM(REG) DBX_REGISTER_NUMBER (REG) #endif + /* The offset from the incoming value of %sp to the top of the stack frame + for the current function. */ + #ifndef INCOMING_FRAME_SP_OFFSET + #define INCOMING_FRAME_SP_OFFSET 0 + #endif + /* Hook used by __throw. */ rtx *************** expand_builtin_dwarf_fp_regnum () *** 355,366 **** return GEN_INT (DWARF_FRAME_REGNUM (HARD_FRAME_POINTER_REGNUM)); } - /* The offset from the incoming value of %sp to the top of the stack frame - for the current function. */ - #ifndef INCOMING_FRAME_SP_OFFSET - #define INCOMING_FRAME_SP_OFFSET 0 - #endif - /* Return a pointer to a copy of the section string name S with all attributes stripped off, and an asterisk prepended (for assemble_name). */ --- 387,392 ---- *************** expand_builtin_init_dwarf_reg_sizes (add *** 389,407 **** int i; enum machine_mode mode = TYPE_MODE (char_type_node); rtx addr = expand_expr (address, NULL_RTX, VOIDmode, 0); ! rtx mem = gen_rtx_MEM (mode, addr); ! for (i = 0; i < DWARF_FRAME_REGISTERS; ++i) { ! int offset = DWARF_FRAME_REGNUM (i) * GET_MODE_SIZE (mode); ! int size = GET_MODE_SIZE (reg_raw_mode[i]); if (offset < 0) continue; ! emit_move_insn (change_address (mem, mode, ! plus_constant (addr, offset)), ! GEN_INT (size)); } } --- 415,431 ---- int i; enum machine_mode mode = TYPE_MODE (char_type_node); rtx addr = expand_expr (address, NULL_RTX, VOIDmode, 0); ! rtx mem = gen_rtx_MEM (BLKmode, addr); ! for (i = 0; i < DWARF_FRAME_REGISTERS; i++) { ! HOST_WIDE_INT offset = DWARF_FRAME_REGNUM (i) * GET_MODE_SIZE (mode); ! HOST_WIDE_INT size = GET_MODE_SIZE (reg_raw_mode[i]); if (offset < 0) continue; ! emit_move_insn (adjust_address (mem, mode, offset), GEN_INT (size)); } } *************** expand_builtin_init_dwarf_reg_sizes (add *** 409,415 **** static const char * dwarf_cfi_name (cfi_opc) ! register unsigned cfi_opc; { switch (cfi_opc) { --- 433,439 ---- static const char * dwarf_cfi_name (cfi_opc) ! unsigned cfi_opc; { switch (cfi_opc) { *************** dwarf_cfi_name (cfi_opc) *** 449,456 **** --- 473,490 ---- return "DW_CFA_def_cfa_register"; case DW_CFA_def_cfa_offset: return "DW_CFA_def_cfa_offset"; + + /* DWARF 3 */ case DW_CFA_def_cfa_expression: return "DW_CFA_def_cfa_expression"; + case DW_CFA_expression: + return "DW_CFA_expression"; + case DW_CFA_offset_extended_sf: + return "DW_CFA_offset_extended_sf"; + case DW_CFA_def_cfa_sf: + return "DW_CFA_def_cfa_sf"; + case DW_CFA_def_cfa_offset_sf: + return "DW_CFA_def_cfa_offset_sf"; /* SGI/MIPS specific */ case DW_CFA_MIPS_advance_loc8: *************** dwarf_cfi_name (cfi_opc) *** 474,480 **** static inline dw_cfi_ref new_cfi () { ! register dw_cfi_ref cfi = (dw_cfi_ref) xmalloc (sizeof (dw_cfi_node)); cfi->dw_cfi_next = NULL; cfi->dw_cfi_oprnd1.dw_cfi_reg_num = 0; --- 508,514 ---- static inline dw_cfi_ref new_cfi () { ! dw_cfi_ref cfi = (dw_cfi_ref) xmalloc (sizeof (dw_cfi_node)); cfi->dw_cfi_next = NULL; cfi->dw_cfi_oprnd1.dw_cfi_reg_num = 0; *************** new_cfi () *** 487,496 **** static inline void add_cfi (list_head, cfi) ! register dw_cfi_ref *list_head; ! register dw_cfi_ref cfi; { ! register dw_cfi_ref *p; /* Find the end of the chain. */ for (p = list_head; (*p) != NULL; p = &(*p)->dw_cfi_next) --- 521,530 ---- static inline void add_cfi (list_head, cfi) ! dw_cfi_ref *list_head; ! dw_cfi_ref cfi; { ! dw_cfi_ref *p; /* Find the end of the chain. */ for (p = list_head; (*p) != NULL; p = &(*p)->dw_cfi_next) *************** dwarf2out_cfi_label () *** 509,515 **** ASM_GENERATE_INTERNAL_LABEL (label, "LCFI", label_num++); ASM_OUTPUT_LABEL (asm_out_file, label); - return label; } --- 543,548 ---- *************** dwarf2out_cfi_label () *** 518,529 **** static void add_fde_cfi (label, cfi) ! register const char *label; ! register dw_cfi_ref cfi; { if (label) { ! register dw_fde_ref fde = &fde_table[fde_table_in_use - 1]; if (*label == 0) label = dwarf2out_cfi_label (); --- 551,562 ---- static void add_fde_cfi (label, cfi) ! const char *label; ! dw_cfi_ref cfi; { if (label) { ! dw_fde_ref fde = &fde_table[fde_table_in_use - 1]; if (*label == 0) label = dwarf2out_cfi_label (); *************** add_fde_cfi (label, cfi) *** 531,537 **** if (fde->dw_fde_current_label == NULL || strcmp (label, fde->dw_fde_current_label) != 0) { ! register dw_cfi_ref xcfi; fde->dw_fde_current_label = label = xstrdup (label); --- 564,570 ---- if (fde->dw_fde_current_label == NULL || strcmp (label, fde->dw_fde_current_label) != 0) { ! dw_cfi_ref xcfi; fde->dw_fde_current_label = label = xstrdup (label); *************** add_fde_cfi (label, cfi) *** 553,560 **** static inline void lookup_cfa_1 (cfi, loc) ! register dw_cfi_ref cfi; ! register dw_cfa_location *loc; { switch (cfi->dw_cfi_opc) { --- 586,593 ---- static inline void lookup_cfa_1 (cfi, loc) ! dw_cfi_ref cfi; ! dw_cfa_location *loc; { switch (cfi->dw_cfi_opc) { *************** lookup_cfa_1 (cfi, loc) *** 580,588 **** static void lookup_cfa (loc) ! register dw_cfa_location *loc; { ! register dw_cfi_ref cfi; loc->reg = (unsigned long) -1; loc->offset = 0; --- 613,621 ---- static void lookup_cfa (loc) ! dw_cfa_location *loc; { ! dw_cfi_ref cfi; loc->reg = (unsigned long) -1; loc->offset = 0; *************** lookup_cfa (loc) *** 594,600 **** if (fde_table_in_use) { ! register dw_fde_ref fde = &fde_table[fde_table_in_use - 1]; for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next) lookup_cfa_1 (cfi, loc); } --- 627,633 ---- if (fde_table_in_use) { ! dw_fde_ref fde = &fde_table[fde_table_in_use - 1]; for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next) lookup_cfa_1 (cfi, loc); } *************** static long old_args_size; *** 619,625 **** void dwarf2out_def_cfa (label, reg, offset) ! register const char *label; unsigned reg; long offset; { --- 652,658 ---- void dwarf2out_def_cfa (label, reg, offset) ! const char *label; unsigned reg; long offset; { *************** dwarf2out_def_cfa (label, reg, offset) *** 633,644 **** /* This routine does the actual work. The CFA is now calculated from the dw_cfa_location structure. */ static void def_cfa_1 (label, loc_p) ! register const char *label; dw_cfa_location *loc_p; { ! register dw_cfi_ref cfi; dw_cfa_location old_cfa, loc; cfa = *loc_p; --- 666,678 ---- /* This routine does the actual work. The CFA is now calculated from the dw_cfa_location structure. */ + static void def_cfa_1 (label, loc_p) ! const char *label; dw_cfa_location *loc_p; { ! dw_cfi_ref cfi; dw_cfa_location old_cfa, loc; cfa = *loc_p; *************** def_cfa_1 (label, loc_p) *** 650,664 **** loc.reg = DWARF_FRAME_REGNUM (loc.reg); lookup_cfa (&old_cfa); ! if (loc.reg == old_cfa.reg && loc.offset == old_cfa.offset && ! loc.indirect == old_cfa.indirect) ! { ! if (loc.indirect == 0 ! || loc.base_offset == old_cfa.base_offset) ! /* Nothing changed so no need to issue any call frame ! instructions. */ ! return; ! } cfi = new_cfi (); --- 684,694 ---- loc.reg = DWARF_FRAME_REGNUM (loc.reg); lookup_cfa (&old_cfa); ! /* If nothing changed, no need to issue any call frame instructions. */ ! if (loc.reg == old_cfa.reg && loc.offset == old_cfa.offset ! && loc.indirect == old_cfa.indirect ! && (loc.indirect == 0 || loc.base_offset == old_cfa.base_offset)) ! return; cfi = new_cfi (); *************** def_cfa_1 (label, loc_p) *** 698,703 **** --- 728,734 ---- calculate the CFA using a full location expression since no register-offset pair is available. */ struct dw_loc_descr_struct *loc_list; + cfi->dw_cfi_opc = DW_CFA_def_cfa_expression; loc_list = build_cfa_loc (&loc); cfi->dw_cfi_oprnd1.dw_cfi_loc = loc_list; *************** def_cfa_1 (label, loc_p) *** 713,724 **** static void reg_save (label, reg, sreg, offset) ! register const char *label; ! register unsigned reg; ! register unsigned sreg; ! register long offset; { ! register dw_cfi_ref cfi = new_cfi (); cfi->dw_cfi_oprnd1.dw_cfi_reg_num = reg; --- 744,755 ---- static void reg_save (label, reg, sreg, offset) ! const char *label; ! unsigned reg; ! unsigned sreg; ! long offset; { ! dw_cfi_ref cfi = new_cfi (); cfi->dw_cfi_oprnd1.dw_cfi_reg_num = reg; *************** reg_save (label, reg, sreg, offset) *** 747,756 **** #endif offset /= DWARF_CIE_DATA_ALIGNMENT; if (offset < 0) ! { ! cfi->dw_cfi_opc = DW_CFA_GNU_negative_offset_extended; ! offset = -offset; ! } cfi->dw_cfi_oprnd2.dw_cfi_offset = offset; } else if (sreg == reg) --- 778,785 ---- #endif offset /= DWARF_CIE_DATA_ALIGNMENT; if (offset < 0) ! cfi->dw_cfi_opc = DW_CFA_offset_extended_sf; ! cfi->dw_cfi_oprnd2.dw_cfi_offset = offset; } else if (sreg == reg) *************** reg_save (label, reg, sreg, offset) *** 774,782 **** void dwarf2out_window_save (label) ! register const char *label; { ! register dw_cfi_ref cfi = new_cfi (); cfi->dw_cfi_opc = DW_CFA_GNU_window_save; add_fde_cfi (label, cfi); } --- 803,812 ---- void dwarf2out_window_save (label) ! const char *label; { ! dw_cfi_ref cfi = new_cfi (); ! cfi->dw_cfi_opc = DW_CFA_GNU_window_save; add_fde_cfi (label, cfi); } *************** dwarf2out_args_size (label, size) *** 789,798 **** const char *label; long size; { ! register dw_cfi_ref cfi; if (size == old_args_size) return; old_args_size = size; cfi = new_cfi (); --- 819,829 ---- const char *label; long size; { ! dw_cfi_ref cfi; if (size == old_args_size) return; + old_args_size = size; cfi = new_cfi (); *************** dwarf2out_args_size (label, size) *** 806,814 **** void dwarf2out_reg_save (label, reg, offset) ! register const char *label; ! register unsigned reg; ! register long offset; { reg_save (label, DWARF_FRAME_REGNUM (reg), -1, offset); } --- 837,845 ---- void dwarf2out_reg_save (label, reg, offset) ! const char *label; ! unsigned reg; ! long offset; { reg_save (label, DWARF_FRAME_REGNUM (reg), -1, offset); } *************** dwarf2out_reg_save (label, reg, offset) *** 818,825 **** void dwarf2out_return_save (label, offset) ! register const char *label; ! register long offset; { reg_save (label, DWARF_FRAME_RETURN_COLUMN, -1, offset); } --- 849,856 ---- void dwarf2out_return_save (label, offset) ! const char *label; ! long offset; { reg_save (label, DWARF_FRAME_RETURN_COLUMN, -1, offset); } *************** dwarf2out_return_save (label, offset) *** 829,836 **** void dwarf2out_return_reg (label, sreg) ! register const char *label; ! register unsigned sreg; { reg_save (label, DWARF_FRAME_RETURN_COLUMN, sreg, 0); } --- 860,867 ---- void dwarf2out_return_reg (label, sreg) ! const char *label; ! unsigned sreg; { reg_save (label, DWARF_FRAME_RETURN_COLUMN, sreg, 0); } *************** dwarf2out_return_reg (label, sreg) *** 840,849 **** static void initial_return_save (rtl) ! register rtx rtl; { unsigned int reg = (unsigned int) -1; ! long offset = 0; switch (GET_CODE (rtl)) { --- 871,880 ---- static void initial_return_save (rtl) ! rtx rtl; { unsigned int reg = (unsigned int) -1; ! HOST_WIDE_INT offset = 0; switch (GET_CODE (rtl)) { *************** initial_return_save (rtl) *** 851,856 **** --- 882,888 ---- /* RA is in a register. */ reg = DWARF_FRAME_REGNUM (REGNO (rtl)); break; + case MEM: /* RA is on the stack. */ rtl = XEXP (rtl, 0); *************** initial_return_save (rtl) *** 861,880 **** --- 893,917 ---- abort (); offset = 0; break; + case PLUS: if (REGNO (XEXP (rtl, 0)) != STACK_POINTER_REGNUM) abort (); offset = INTVAL (XEXP (rtl, 1)); break; + case MINUS: if (REGNO (XEXP (rtl, 0)) != STACK_POINTER_REGNUM) abort (); offset = -INTVAL (XEXP (rtl, 1)); break; + default: abort (); } + break; + case PLUS: /* The return address is at some offset from any value we can actually load. For instance, on the SPARC it is in %i7+8. Just *************** initial_return_save (rtl) *** 883,888 **** --- 920,926 ---- abort (); initial_return_save (XEXP (rtl, 0)); return; + default: abort (); } *************** initial_return_save (rtl) *** 891,905 **** } /* Given a SET, calculate the amount of stack adjustment it ! contains. */ static long stack_adjust_offset (pattern) ! rtx pattern; { rtx src = SET_SRC (pattern); rtx dest = SET_DEST (pattern); ! long offset = 0; enum rtx_code code; if (dest == stack_pointer_rtx) --- 929,943 ---- } /* Given a SET, calculate the amount of stack adjustment it ! contains. */ static long stack_adjust_offset (pattern) ! rtx pattern; { rtx src = SET_SRC (pattern); rtx dest = SET_DEST (pattern); ! HOST_WIDE_INT offset = 0; enum rtx_code code; if (dest == stack_pointer_rtx) *************** stack_adjust_offset (pattern) *** 919,939 **** src = XEXP (dest, 0); code = GET_CODE (src); ! if (! (code == PRE_DEC || code == PRE_INC ! || code == PRE_MODIFY) || XEXP (src, 0) != stack_pointer_rtx) return 0; if (code == PRE_MODIFY) { rtx val = XEXP (XEXP (src, 1), 1); /* We handle only adjustments by constant amount. */ if (GET_CODE (XEXP (src, 1)) != PLUS || GET_CODE (val) != CONST_INT) ! abort(); offset = -INTVAL (val); } ! else offset = GET_MODE_SIZE (GET_MODE (dest)); } else return 0; --- 957,979 ---- src = XEXP (dest, 0); code = GET_CODE (src); ! if ((code != PRE_DEC && code != PRE_INC && code != PRE_MODIFY) || XEXP (src, 0) != stack_pointer_rtx) return 0; if (code == PRE_MODIFY) { rtx val = XEXP (XEXP (src, 1), 1); + /* We handle only adjustments by constant amount. */ if (GET_CODE (XEXP (src, 1)) != PLUS || GET_CODE (val) != CONST_INT) ! abort (); ! offset = -INTVAL (val); } ! else ! offset = GET_MODE_SIZE (GET_MODE (dest)); } else return 0; *************** static void *** 952,964 **** dwarf2out_stack_adjust (insn) rtx insn; { ! long offset; const char *label; ! if (! flag_non_call_exceptions && GET_CODE (insn) == CALL_INSN) { /* Extract the size of the args from the CALL rtx itself. */ - insn = PATTERN (insn); if (GET_CODE (insn) == PARALLEL) insn = XVECEXP (insn, 0, 0); --- 992,1004 ---- dwarf2out_stack_adjust (insn) rtx insn; { ! HOST_WIDE_INT offset; const char *label; + int i; ! if (!flag_asynchronous_unwind_tables && GET_CODE (insn) == CALL_INSN) { /* Extract the size of the args from the CALL rtx itself. */ insn = PATTERN (insn); if (GET_CODE (insn) == PARALLEL) insn = XVECEXP (insn, 0, 0); *************** dwarf2out_stack_adjust (insn) *** 966,979 **** insn = SET_SRC (insn); if (GET_CODE (insn) != CALL) abort (); dwarf2out_args_size ("", INTVAL (XEXP (insn, 1))); return; } /* If only calls can throw, and we have a frame pointer, save up adjustments until we see the CALL_INSN. */ ! else if (! flag_non_call_exceptions ! && cfa.reg != STACK_POINTER_REGNUM) return; if (GET_CODE (insn) == BARRIER) --- 1006,1019 ---- insn = SET_SRC (insn); if (GET_CODE (insn) != CALL) abort (); + dwarf2out_args_size ("", INTVAL (XEXP (insn, 1))); return; } /* If only calls can throw, and we have a frame pointer, save up adjustments until we see the CALL_INSN. */ ! else if (!flag_asynchronous_unwind_tables && cfa.reg != STACK_POINTER_REGNUM) return; if (GET_CODE (insn) == BARRIER) *************** dwarf2out_stack_adjust (insn) *** 988,1010 **** #endif } else if (GET_CODE (PATTERN (insn)) == SET) ! { ! offset = stack_adjust_offset (PATTERN (insn)); ! } else if (GET_CODE (PATTERN (insn)) == PARALLEL || GET_CODE (PATTERN (insn)) == SEQUENCE) { /* There may be stack adjustments inside compound insns. Search ! for them. */ ! int j; ! ! offset = 0; ! for (j = XVECLEN (PATTERN (insn), 0) - 1; j >= 0; j--) ! { ! rtx pattern = XVECEXP (PATTERN (insn), 0, j); ! if (GET_CODE (pattern) == SET) ! offset += stack_adjust_offset (pattern); ! } } else return; --- 1028,1042 ---- #endif } else if (GET_CODE (PATTERN (insn)) == SET) ! offset = stack_adjust_offset (PATTERN (insn)); else if (GET_CODE (PATTERN (insn)) == PARALLEL || GET_CODE (PATTERN (insn)) == SEQUENCE) { /* There may be stack adjustments inside compound insns. Search ! for them. */ ! for (offset = 0, i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--) ! if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET) ! offset += stack_adjust_offset (XVECEXP (PATTERN (insn), 0, i)); } else return; *************** dwarf2out_stack_adjust (insn) *** 1018,1023 **** --- 1050,1056 ---- #ifndef STACK_GROWS_DOWNWARD offset = -offset; #endif + args_size += offset; if (args_size < 0) args_size = 0; *************** static dw_cfa_location cfa_temp; *** 1166,1172 **** cfa_temp.offset = cfa.offset Rule 2: ! (set sp ({minus,plus,losum} {sp,fp}:cfa.reg {,:cfa_temp.reg})) effects: cfa.reg = sp if fp used cfa.offset += {+/- , cfa_temp.offset} if cfa.reg==sp cfa_store.offset += {+/- , cfa_temp.offset} --- 1199,1206 ---- cfa_temp.offset = cfa.offset Rule 2: ! (set sp ({minus,plus,losum} {sp,fp}:cfa.reg ! {,:cfa_temp.reg})) effects: cfa.reg = sp if fp used cfa.offset += {+/- , cfa_temp.offset} if cfa.reg==sp cfa_store.offset += {+/- , cfa_temp.offset} *************** static dw_cfa_location cfa_temp; *** 1226,1232 **** cfa.base_offset = -cfa_store.offset Rule 12: ! (set (mem ({minus,plus,losum} :{cfa_store,cfa_temp} )) ) effects: cfa.reg = cfa.base_offset = -/+ - {cfa_store,cfa_temp}.offset --- 1260,1268 ---- cfa.base_offset = -cfa_store.offset Rule 12: ! (set (mem ({minus,plus,losum} :{cfa_store,cfa_temp} )) ! ! ) effects: cfa.reg = cfa.base_offset = -/+ - {cfa_store,cfa_temp}.offset *************** dwarf2out_frame_debug_expr (expr, label) *** 1247,1274 **** const char *label; { rtx src, dest; ! long offset; /* If RTX_FRAME_RELATED_P is set on a PARALLEL, process each member of the PARALLEL independently. The first element is always processed if it is a SET. This is for backward compatibility. Other elements are processed only if they are SETs and the RTX_FRAME_RELATED_P flag is set in them. */ ! ! if (GET_CODE (expr) == PARALLEL ! || GET_CODE (expr) == SEQUENCE) { int par_index; int limit = XVECLEN (expr, 0); for (par_index = 0; par_index < limit; par_index++) ! { ! rtx x = XVECEXP (expr, 0, par_index); - if (GET_CODE (x) == SET && - (RTX_FRAME_RELATED_P (x) || par_index == 0)) - dwarf2out_frame_debug_expr (x, label); - } return; } --- 1283,1306 ---- const char *label; { rtx src, dest; ! HOST_WIDE_INT offset; /* If RTX_FRAME_RELATED_P is set on a PARALLEL, process each member of the PARALLEL independently. The first element is always processed if it is a SET. This is for backward compatibility. Other elements are processed only if they are SETs and the RTX_FRAME_RELATED_P flag is set in them. */ ! if (GET_CODE (expr) == PARALLEL || GET_CODE (expr) == SEQUENCE) { int par_index; int limit = XVECLEN (expr, 0); for (par_index = 0; par_index < limit; par_index++) ! if (GET_CODE (XVECEXP (expr, 0, par_index)) == SET ! && (RTX_FRAME_RELATED_P (XVECEXP (expr, 0, par_index)) ! || par_index == 0)) ! dwarf2out_frame_debug_expr (XVECEXP (expr, 0, par_index), label); return; } *************** dwarf2out_frame_debug_expr (expr, label) *** 1384,1389 **** --- 1416,1422 ---- cfa_temp.reg = cfa.reg; cfa_temp.offset = cfa.offset; } + /* Rule 5 */ else if (GET_CODE (XEXP (src, 0)) == REG && REGNO (XEXP (src, 0)) == cfa_temp.reg *************** dwarf2out_frame_debug_expr (expr, label) *** 1396,1401 **** --- 1429,1435 ---- cfa_store.reg = REGNO (dest); cfa_store.offset = cfa.offset - cfa_temp.offset; } + /* Rule 9 */ else if (GET_CODE (src) == LO_SUM && GET_CODE (XEXP (src, 1)) == CONST_INT) *************** dwarf2out_frame_debug_expr (expr, label) *** 1420,1425 **** --- 1454,1460 ---- || (unsigned) REGNO (XEXP (src, 0)) != cfa_temp.reg || GET_CODE (XEXP (src, 1)) != CONST_INT) abort (); + if ((unsigned) REGNO (dest) != cfa_temp.reg) cfa_temp.reg = REGNO (dest); cfa_temp.offset |= INTVAL (XEXP (src, 1)); *************** dwarf2out_frame_debug_expr (expr, label) *** 1434,1439 **** --- 1469,1475 ---- default: abort (); } + def_cfa_1 (label, &cfa); break; *************** dwarf2out_frame_debug_expr (expr, label) *** 1450,1467 **** case PRE_MODIFY: /* We can't handle variable size modifications. */ if (GET_CODE (XEXP (XEXP (XEXP (dest, 0), 1), 1)) != CONST_INT) ! abort(); offset = -INTVAL (XEXP (XEXP (XEXP (dest, 0), 1), 1)); if (REGNO (XEXP (XEXP (dest, 0), 0)) != STACK_POINTER_REGNUM || cfa_store.reg != STACK_POINTER_REGNUM) abort (); cfa_store.offset += offset; if (cfa.reg == STACK_POINTER_REGNUM) cfa.offset = cfa_store.offset; offset = -cfa_store.offset; break; /* Rule 11 */ case PRE_INC: case PRE_DEC: --- 1486,1505 ---- case PRE_MODIFY: /* We can't handle variable size modifications. */ if (GET_CODE (XEXP (XEXP (XEXP (dest, 0), 1), 1)) != CONST_INT) ! abort (); offset = -INTVAL (XEXP (XEXP (XEXP (dest, 0), 1), 1)); if (REGNO (XEXP (XEXP (dest, 0), 0)) != STACK_POINTER_REGNUM || cfa_store.reg != STACK_POINTER_REGNUM) abort (); + cfa_store.offset += offset; if (cfa.reg == STACK_POINTER_REGNUM) cfa.offset = cfa_store.offset; offset = -cfa_store.offset; break; + /* Rule 11 */ case PRE_INC: case PRE_DEC: *************** dwarf2out_frame_debug_expr (expr, label) *** 1472,1477 **** --- 1510,1516 ---- if (REGNO (XEXP (XEXP (dest, 0), 0)) != STACK_POINTER_REGNUM || cfa_store.reg != STACK_POINTER_REGNUM) abort (); + cfa_store.offset += offset; if (cfa.reg == STACK_POINTER_REGNUM) cfa.offset = cfa_store.offset; *************** dwarf2out_frame_debug_expr (expr, label) *** 1532,1538 **** /* If the source register is exactly the CFA, assume we're saving SP like any other register; this happens on the ARM. */ - def_cfa_1 (label, &cfa); queue_reg_save (label, stack_pointer_rtx, offset); break; --- 1571,1576 ---- *************** dwarf2out_frame_debug_expr (expr, label) *** 1541,1553 **** { /* Otherwise, we'll need to look in the stack to calculate the CFA. */ - rtx x = XEXP (dest, 0); if (GET_CODE (x) != REG) x = XEXP (x, 0); if (GET_CODE (x) != REG) abort (); ! cfa.reg = (unsigned) REGNO (x); cfa.base_offset = offset; cfa.indirect = 1; def_cfa_1 (label, &cfa); --- 1579,1592 ---- { /* Otherwise, we'll need to look in the stack to calculate the CFA. */ rtx x = XEXP (dest, 0); + if (GET_CODE (x) != REG) x = XEXP (x, 0); if (GET_CODE (x) != REG) abort (); ! ! cfa.reg = REGNO (x); cfa.base_offset = offset; cfa.indirect = 1; def_cfa_1 (label, &cfa); *************** dwarf2out_frame_debug (insn) *** 1584,1589 **** --- 1623,1629 ---- lookup_cfa (&cfa); if (cfa.reg != (unsigned long) DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM)) abort (); + cfa.reg = STACK_POINTER_REGNUM; cfa_store = cfa; cfa_temp.reg = -1; *************** dwarf2out_frame_debug (insn) *** 1598,1608 **** { if (!ACCUMULATE_OUTGOING_ARGS) dwarf2out_stack_adjust (insn); return; } label = dwarf2out_cfi_label (); - src = find_reg_note (insn, REG_FRAME_RELATED_EXPR, NULL_RTX); if (src) insn = XEXP (src, 0); --- 1638,1648 ---- { if (!ACCUMULATE_OUTGOING_ARGS) dwarf2out_stack_adjust (insn); + return; } label = dwarf2out_cfi_label (); src = find_reg_note (insn, REG_FRAME_RELATED_EXPR, NULL_RTX); if (src) insn = XEXP (src, 0); *************** dwarf2out_frame_debug (insn) *** 1616,1632 **** static void output_cfi (cfi, fde, for_eh) ! register dw_cfi_ref cfi; ! register dw_fde_ref fde; int for_eh; { if (cfi->dw_cfi_opc == DW_CFA_advance_loc) ! { ! dw2_asm_output_data (1, (cfi->dw_cfi_opc ! | (cfi->dw_cfi_oprnd1.dw_cfi_offset & 0x3f)), ! "DW_CFA_advance_loc 0x%lx", ! cfi->dw_cfi_oprnd1.dw_cfi_offset); ! } else if (cfi->dw_cfi_opc == DW_CFA_offset) { dw2_asm_output_data (1, (cfi->dw_cfi_opc --- 1656,1670 ---- static void output_cfi (cfi, fde, for_eh) ! dw_cfi_ref cfi; ! dw_fde_ref fde; int for_eh; { if (cfi->dw_cfi_opc == DW_CFA_advance_loc) ! dw2_asm_output_data (1, (cfi->dw_cfi_opc ! | (cfi->dw_cfi_oprnd1.dw_cfi_offset & 0x3f)), ! "DW_CFA_advance_loc 0x%lx", ! cfi->dw_cfi_oprnd1.dw_cfi_offset); else if (cfi->dw_cfi_opc == DW_CFA_offset) { dw2_asm_output_data (1, (cfi->dw_cfi_opc *************** output_cfi (cfi, fde, for_eh) *** 1636,1647 **** dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL); } else if (cfi->dw_cfi_opc == DW_CFA_restore) ! { ! dw2_asm_output_data (1, (cfi->dw_cfi_opc ! | (cfi->dw_cfi_oprnd1.dw_cfi_reg_num & 0x3f)), ! "DW_CFA_restore, column 0x%lx", ! cfi->dw_cfi_oprnd1.dw_cfi_reg_num); ! } else { dw2_asm_output_data (1, cfi->dw_cfi_opc, --- 1674,1683 ---- dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL); } else if (cfi->dw_cfi_opc == DW_CFA_restore) ! dw2_asm_output_data (1, (cfi->dw_cfi_opc ! | (cfi->dw_cfi_oprnd1.dw_cfi_reg_num & 0x3f)), ! "DW_CFA_restore, column 0x%lx", ! cfi->dw_cfi_oprnd1.dw_cfi_reg_num); else { dw2_asm_output_data (1, cfi->dw_cfi_opc, *************** output_cfi (cfi, fde, for_eh) *** 1659,1709 **** dw2_asm_output_addr (DWARF2_ADDR_SIZE, cfi->dw_cfi_oprnd1.dw_cfi_addr, NULL); break; case DW_CFA_advance_loc1: dw2_asm_output_delta (1, cfi->dw_cfi_oprnd1.dw_cfi_addr, fde->dw_fde_current_label, NULL); fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr; break; case DW_CFA_advance_loc2: dw2_asm_output_delta (2, cfi->dw_cfi_oprnd1.dw_cfi_addr, fde->dw_fde_current_label, NULL); fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr; break; case DW_CFA_advance_loc4: dw2_asm_output_delta (4, cfi->dw_cfi_oprnd1.dw_cfi_addr, fde->dw_fde_current_label, NULL); fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr; break; case DW_CFA_MIPS_advance_loc8: dw2_asm_output_delta (8, cfi->dw_cfi_oprnd1.dw_cfi_addr, fde->dw_fde_current_label, NULL); fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr; break; case DW_CFA_offset_extended: - case DW_CFA_GNU_negative_offset_extended: case DW_CFA_def_cfa: ! dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, NULL); dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL); break; case DW_CFA_restore_extended: case DW_CFA_undefined: case DW_CFA_same_value: case DW_CFA_def_cfa_register: ! dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, NULL); break; case DW_CFA_register: ! dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, NULL); ! dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_reg_num, NULL); break; case DW_CFA_def_cfa_offset: case DW_CFA_GNU_args_size: dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset, NULL); break; case DW_CFA_GNU_window_save: break; case DW_CFA_def_cfa_expression: output_cfa_loc (cfi); break; default: break; } --- 1695,1775 ---- dw2_asm_output_addr (DWARF2_ADDR_SIZE, cfi->dw_cfi_oprnd1.dw_cfi_addr, NULL); break; + case DW_CFA_advance_loc1: dw2_asm_output_delta (1, cfi->dw_cfi_oprnd1.dw_cfi_addr, fde->dw_fde_current_label, NULL); fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr; break; + case DW_CFA_advance_loc2: dw2_asm_output_delta (2, cfi->dw_cfi_oprnd1.dw_cfi_addr, fde->dw_fde_current_label, NULL); fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr; break; + case DW_CFA_advance_loc4: dw2_asm_output_delta (4, cfi->dw_cfi_oprnd1.dw_cfi_addr, fde->dw_fde_current_label, NULL); fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr; break; + case DW_CFA_MIPS_advance_loc8: dw2_asm_output_delta (8, cfi->dw_cfi_oprnd1.dw_cfi_addr, fde->dw_fde_current_label, NULL); fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr; break; + case DW_CFA_offset_extended: case DW_CFA_def_cfa: ! dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, ! NULL); dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL); break; + + case DW_CFA_offset_extended_sf: + case DW_CFA_def_cfa_sf: + dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, + NULL); + dw2_asm_output_data_sleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL); + break; + case DW_CFA_restore_extended: case DW_CFA_undefined: case DW_CFA_same_value: case DW_CFA_def_cfa_register: ! dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, ! NULL); break; + case DW_CFA_register: ! dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, ! NULL); ! dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_reg_num, ! NULL); break; + case DW_CFA_def_cfa_offset: case DW_CFA_GNU_args_size: dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset, NULL); break; + + case DW_CFA_def_cfa_offset_sf: + dw2_asm_output_data_sleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset, NULL); + break; + case DW_CFA_GNU_window_save: break; + case DW_CFA_def_cfa_expression: + case DW_CFA_expression: output_cfa_loc (cfi); break; + + case DW_CFA_GNU_negative_offset_extended: + /* Obsoleted by DW_CFA_offset_extended_sf. */ + abort (); + default: break; } *************** static void *** 1718,1726 **** output_call_frame_info (for_eh) int for_eh; { ! register unsigned long i; ! register dw_fde_ref fde; ! register dw_cfi_ref cfi; char l1[20], l2[20], section_start_label[20]; int any_lsda_needed = 0; char augmentation[6]; --- 1784,1792 ---- output_call_frame_info (for_eh) int for_eh; { ! unsigned int i; ! dw_fde_ref fde; ! dw_cfi_ref cfi; char l1[20], l2[20], section_start_label[20]; int any_lsda_needed = 0; char augmentation[6]; *************** output_call_frame_info (for_eh) *** 1729,1740 **** int per_encoding = DW_EH_PE_absptr; int lsda_encoding = DW_EH_PE_absptr; ! /* If we don't have any functions we'll want to unwind out of, don't ! emit any EH unwind information. */ if (for_eh) { ! int any_eh_needed = 0; ! for (i = 0; i < fde_table_in_use; ++i) if (fde_table[i].uses_eh_lsda) any_eh_needed = any_lsda_needed = 1; else if (! fde_table[i].nothrow) --- 1795,1807 ---- int per_encoding = DW_EH_PE_absptr; int lsda_encoding = DW_EH_PE_absptr; ! /* If we don't have any functions we'll want to unwind out of, don't emit any ! EH unwind information. */ if (for_eh) { ! int any_eh_needed = flag_asynchronous_unwind_tables; ! ! for (i = 0; i < fde_table_in_use; i++) if (fde_table[i].uses_eh_lsda) any_eh_needed = any_lsda_needed = 1; else if (! fde_table[i].nothrow) *************** output_call_frame_info (for_eh) *** 1749,1768 **** app_enable (); if (for_eh) ! { ! #ifdef EH_FRAME_SECTION ! EH_FRAME_SECTION (); ! #else ! tree label = get_file_function_name ('F'); ! ! force_data_section (); ! ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE)); ! ASM_GLOBALIZE_LABEL (asm_out_file, IDENTIFIER_POINTER (label)); ! ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label)); ! #endif ! } else ! ASM_OUTPUT_SECTION (asm_out_file, FRAME_SECTION); ASM_GENERATE_INTERNAL_LABEL (section_start_label, FRAME_BEGIN_LABEL, for_eh); ASM_OUTPUT_LABEL (asm_out_file, section_start_label); --- 1816,1824 ---- app_enable (); if (for_eh) ! (*targetm.asm_out.eh_frame_section) (); else ! named_section_flags (DEBUG_FRAME_SECTION, SECTION_DEBUG); ASM_GENERATE_INTERNAL_LABEL (section_start_label, FRAME_BEGIN_LABEL, for_eh); ASM_OUTPUT_LABEL (asm_out_file, section_start_label); *************** output_call_frame_info (for_eh) *** 1846,1858 **** abort (); } } - dw2_asm_output_nstring (augmentation, -1, "CIE Augmentation"); dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor"); - dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT, "CIE Data Alignment Factor"); - dw2_asm_output_data (1, DWARF_FRAME_RETURN_COLUMN, "CIE RA Column"); if (augmentation[0]) --- 1902,1912 ---- abort (); } } + dw2_asm_output_nstring (augmentation, -1, "CIE Augmentation"); dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor"); dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT, "CIE Data Alignment Factor"); dw2_asm_output_data (1, DWARF_FRAME_RETURN_COLUMN, "CIE RA Column"); if (augmentation[0]) *************** output_call_frame_info (for_eh) *** 1865,1873 **** --- 1919,1929 ---- dw2_asm_output_encoded_addr_rtx (per_encoding, eh_personality_libfunc, NULL); } + if (any_lsda_needed) dw2_asm_output_data (1, lsda_encoding, "LSDA Encoding (%s)", eh_data_format_name (lsda_encoding)); + if (fde_encoding != DW_EH_PE_absptr) dw2_asm_output_data (1, fde_encoding, "FDE Encoding (%s)", eh_data_format_name (fde_encoding)); *************** output_call_frame_info (for_eh) *** 1882,1888 **** ASM_OUTPUT_LABEL (asm_out_file, l2); /* Loop through all of the FDE's. */ ! for (i = 0; i < fde_table_in_use; ++i) { fde = &fde_table[i]; --- 1938,1944 ---- ASM_OUTPUT_LABEL (asm_out_file, l2); /* Loop through all of the FDE's. */ ! for (i = 0; i < fde_table_in_use; i++) { fde = &fde_table[i]; *************** output_call_frame_info (for_eh) *** 1954,1961 **** { if (lsda_encoding == DW_EH_PE_aligned) ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE)); ! dw2_asm_output_data (size_of_encoded_value (lsda_encoding), ! 0, "Language Specific Data Area (none)"); } } else --- 2010,2018 ---- { if (lsda_encoding == DW_EH_PE_aligned) ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE)); ! dw2_asm_output_data ! (size_of_encoded_value (lsda_encoding), 0, ! "Language Specific Data Area (none)"); } } else *************** output_call_frame_info (for_eh) *** 1974,1980 **** ASM_OUTPUT_LABEL (asm_out_file, l2); } ! #ifndef EH_FRAME_SECTION if (for_eh) dw2_asm_output_data (4, 0, "End of Table"); #endif --- 2031,2037 ---- ASM_OUTPUT_LABEL (asm_out_file, l2); } ! #ifndef EH_FRAME_SECTION_NAME if (for_eh) dw2_asm_output_data (4, 0, "End of Table"); #endif *************** output_call_frame_info (for_eh) *** 1993,2002 **** the prologue. */ void ! dwarf2out_begin_prologue () { char label[MAX_ARTIFICIAL_LABEL_BYTES]; ! register dw_fde_ref fde; current_function_func_begin_label = 0; --- 2050,2061 ---- the prologue. */ void ! dwarf2out_begin_prologue (line, file) ! unsigned int line ATTRIBUTE_UNUSED; ! const char *file ATTRIBUTE_UNUSED; { char label[MAX_ARTIFICIAL_LABEL_BYTES]; ! dw_fde_ref fde; current_function_func_begin_label = 0; *************** dwarf2out_begin_prologue () *** 2012,2019 **** return; #endif ! ++current_funcdef_number; ! function_section (current_function_decl); ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL, current_funcdef_number); --- 2071,2077 ---- return; #endif ! current_funcdef_number++; function_section (current_function_decl); ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL, current_funcdef_number); *************** dwarf2out_begin_prologue () *** 2050,2055 **** --- 2108,2120 ---- fde->uses_eh_lsda = cfun->uses_eh_lsda; args_size = old_args_size = 0; + + /* We only want to output line number information for the genuine dwarf2 + prologue case, not the eh frame case. */ + #ifdef DWARF2_DEBUGGING_INFO + if (file) + dwarf2out_source_line (line, file); + #endif } /* Output a marker (i.e. a label) for the absolute end of the generated code *************** dwarf2out_end_epilogue () *** 2063,2069 **** char label[MAX_ARTIFICIAL_LABEL_BYTES]; /* Output a label to mark the endpoint of the code generated for this ! function. */ ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL, current_funcdef_number); ASM_OUTPUT_LABEL (asm_out_file, label); fde = &fde_table[fde_table_in_use - 1]; --- 2128,2134 ---- char label[MAX_ARTIFICIAL_LABEL_BYTES]; /* Output a label to mark the endpoint of the code generated for this ! function. */ ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL, current_funcdef_number); ASM_OUTPUT_LABEL (asm_out_file, label); fde = &fde_table[fde_table_in_use - 1]; *************** void *** 2092,2099 **** dwarf2out_frame_finish () { /* Output call frame information. */ ! if (write_symbols == DWARF2_DEBUG) output_call_frame_info (0); if (! USING_SJLJ_EXCEPTIONS && (flag_unwind_tables || flag_exceptions)) output_call_frame_info (1); } --- 2157,2165 ---- dwarf2out_frame_finish () { /* Output call frame information. */ ! if (write_symbols == DWARF2_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG) output_call_frame_info (0); + if (! USING_SJLJ_EXCEPTIONS && (flag_unwind_tables || flag_exceptions)) output_call_frame_info (1); } *************** dwarf2out_frame_finish () *** 2104,2109 **** --- 2170,2176 ---- typedef struct dw_val_struct *dw_val_ref; typedef struct die_struct *dw_die_ref; typedef struct dw_loc_descr_struct *dw_loc_descr_ref; + typedef struct dw_loc_list_struct *dw_loc_list_ref; /* Each DIE may have a series of attribute/value pairs. Values can take on several forms. The forms that are used in this *************** typedef struct dw_loc_descr_struct *dw_l *** 2112,2118 **** --- 2179,2188 ---- typedef enum { dw_val_class_addr, + dw_val_class_offset, dw_val_class_loc, + dw_val_class_loc_list, + dw_val_class_range_list, dw_val_class_const, dw_val_class_unsigned_const, dw_val_class_long_long, *************** typedef struct dw_val_struct *** 2154,2170 **** union { rtx val_addr; dw_loc_descr_ref val_loc; long int val_int; long unsigned val_unsigned; dw_long_long_const val_long_long; dw_float_const val_float; ! struct { ! dw_die_ref die; ! int external; ! } val_die_ref; unsigned val_fde_index; ! char *val_str; char *val_lbl_id; unsigned char val_flag; } --- 2224,2243 ---- union { rtx val_addr; + long unsigned val_offset; + dw_loc_list_ref val_loc_list; dw_loc_descr_ref val_loc; long int val_int; long unsigned val_unsigned; dw_long_long_const val_long_long; dw_float_const val_float; ! struct ! { ! dw_die_ref die; ! int external; ! } val_die_ref; unsigned val_fde_index; ! struct indirect_string_node *val_str; char *val_lbl_id; unsigned char val_flag; } *************** typedef struct dw_loc_descr_struct *** 2185,2190 **** --- 2258,2277 ---- } dw_loc_descr_node; + /* Location lists are ranges + location descriptions for that range, + so you can track variables that are in different places over + their entire life. */ + typedef struct dw_loc_list_struct + { + dw_loc_list_ref dw_loc_next; + const char *begin; /* Label for begin address of range */ + const char *end; /* Label for end address of range */ + char *ll_symbol; /* Label for beginning of location list. + Only on head of list */ + const char *section; /* Section this loclist is relative to */ + dw_loc_descr_ref expr; + } dw_loc_list_node; + static const char *dwarf_stack_op_name PARAMS ((unsigned)); static dw_loc_descr_ref new_loc_descr PARAMS ((enum dwarf_location_atom, unsigned long, *************** static void output_loc_sequence PARAMS *** 2200,2206 **** static const char * dwarf_stack_op_name (op) ! register unsigned op; { switch (op) { --- 2287,2293 ---- static const char * dwarf_stack_op_name (op) ! unsigned op; { switch (op) { *************** dwarf_stack_op_name (op) *** 2505,2517 **** static inline dw_loc_descr_ref new_loc_descr (op, oprnd1, oprnd2) ! register enum dwarf_location_atom op; ! register unsigned long oprnd1; ! register unsigned long oprnd2; { /* Use xcalloc here so we clear out all of the long_long constant in the union. */ ! register dw_loc_descr_ref descr = (dw_loc_descr_ref) xcalloc (1, sizeof (dw_loc_descr_node)); descr->dw_loc_opc = op; --- 2592,2604 ---- static inline dw_loc_descr_ref new_loc_descr (op, oprnd1, oprnd2) ! enum dwarf_location_atom op; ! unsigned long oprnd1; ! unsigned long oprnd2; { /* Use xcalloc here so we clear out all of the long_long constant in the union. */ ! dw_loc_descr_ref descr = (dw_loc_descr_ref) xcalloc (1, sizeof (dw_loc_descr_node)); descr->dw_loc_opc = op; *************** new_loc_descr (op, oprnd1, oprnd2) *** 2523,2536 **** return descr; } /* Add a location description term to a location description expression. */ static inline void add_loc_descr (list_head, descr) ! register dw_loc_descr_ref *list_head; ! register dw_loc_descr_ref descr; { ! register dw_loc_descr_ref *d; /* Find the end of the chain. */ for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next) --- 2610,2624 ---- return descr; } + /* Add a location description term to a location description expression. */ static inline void add_loc_descr (list_head, descr) ! dw_loc_descr_ref *list_head; ! dw_loc_descr_ref descr; { ! dw_loc_descr_ref *d; /* Find the end of the chain. */ for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next) *************** add_loc_descr (list_head, descr) *** 2543,2551 **** static unsigned long size_of_loc_descr (loc) ! register dw_loc_descr_ref loc; { ! register unsigned long size = 1; switch (loc->dw_loc_opc) { --- 2631,2639 ---- static unsigned long size_of_loc_descr (loc) ! dw_loc_descr_ref loc; { ! unsigned long size = 1; switch (loc->dw_loc_opc) { *************** size_of_loc_descr (loc) *** 2646,2656 **** static unsigned long size_of_locs (loc) ! register dw_loc_descr_ref loc; { ! register unsigned long size = 0; ! for (; loc != NULL; loc = loc->dw_loc_next) { loc->dw_loc_addr = size; size += size_of_loc_descr (loc); --- 2734,2744 ---- static unsigned long size_of_locs (loc) ! dw_loc_descr_ref loc; { ! unsigned long size; ! for (size = 0; loc != NULL; loc = loc->dw_loc_next) { loc->dw_loc_addr = size; size += size_of_loc_descr (loc); *************** size_of_locs (loc) *** 2663,2672 **** static void output_loc_operands (loc) ! register dw_loc_descr_ref loc; { ! register dw_val_ref val1 = &loc->dw_loc_oprnd1; ! register dw_val_ref val2 = &loc->dw_loc_oprnd2; switch (loc->dw_loc_opc) { --- 2751,2760 ---- static void output_loc_operands (loc) ! dw_loc_descr_ref loc; { ! dw_val_ref val1 = &loc->dw_loc_oprnd1; ! dw_val_ref val2 = &loc->dw_loc_oprnd2; switch (loc->dw_loc_opc) { *************** output_cfa_loc (cfi) *** 2826,2832 **** output_loc_sequence (loc); } ! /* This function builds a dwarf location descriptor seqeunce from a dw_cfa_location. */ static struct dw_loc_descr_struct * --- 2914,2920 ---- output_loc_sequence (loc); } ! /* This function builds a dwarf location descriptor sequence from a dw_cfa_location. */ static struct dw_loc_descr_struct * *************** build_cfa_loc (cfa) *** 2849,2854 **** --- 2937,2943 ---- head = new_loc_descr (DW_OP_reg0 + cfa->reg, 0, 0); else head = new_loc_descr (DW_OP_regx, cfa->reg, 0); + head->dw_loc_oprnd1.val_class = dw_val_class_const; tmp = new_loc_descr (DW_OP_deref, 0, 0); add_loc_descr (&head, tmp); *************** build_cfa_loc (cfa) *** 2857,2867 **** tmp = new_loc_descr (DW_OP_plus_uconst, cfa->offset, 0); add_loc_descr (&head, tmp); } return head; } ! /* This function fills in aa dw_cfa_location structure from a ! dwarf location descriptor sequence. */ static void get_cfa_from_loc_descr (cfa, loc) --- 2946,2957 ---- tmp = new_loc_descr (DW_OP_plus_uconst, cfa->offset, 0); add_loc_descr (&head, tmp); } + return head; } ! /* This function fills in aa dw_cfa_location structure from a dwarf location ! descriptor sequence. */ static void get_cfa_from_loc_descr (cfa, loc) *************** get_cfa_from_loc_descr (cfa, loc) *** 2877,2882 **** --- 2967,2973 ---- for (ptr = loc; ptr != NULL; ptr = ptr->dw_loc_next) { enum dwarf_location_atom op = ptr->dw_loc_opc; + switch (op) { case DW_OP_reg0: *************** get_cfa_from_loc_descr (cfa, loc) *** 2962,2968 **** cfa->offset = ptr->dw_loc_oprnd1.v.val_unsigned; break; default: ! internal_error ("DW_LOC_OP %s not implememnted\n", dwarf_stack_op_name (ptr->dw_loc_opc)); } } --- 3053,3059 ---- cfa->offset = ptr->dw_loc_oprnd1.v.val_unsigned; break; default: ! internal_error ("DW_LOC_OP %s not implemented\n", dwarf_stack_op_name (ptr->dw_loc_opc)); } } *************** get_cfa_from_loc_descr (cfa, loc) *** 2972,2977 **** --- 3063,3115 ---- /* And now, the support for symbolic debugging information. */ #ifdef DWARF2_DEBUGGING_INFO + /* .debug_str support. */ + static hashnode indirect_string_alloc PARAMS ((hash_table *)); + static int output_indirect_string PARAMS ((struct cpp_reader *, + hashnode, const PTR)); + + + static void dwarf2out_init PARAMS ((const char *)); + static void dwarf2out_finish PARAMS ((const char *)); + static void dwarf2out_define PARAMS ((unsigned int, const char *)); + static void dwarf2out_undef PARAMS ((unsigned int, const char *)); + static void dwarf2out_start_source_file PARAMS ((unsigned, const char *)); + static void dwarf2out_end_source_file PARAMS ((unsigned)); + static void dwarf2out_begin_block PARAMS ((unsigned, unsigned)); + static void dwarf2out_end_block PARAMS ((unsigned, unsigned)); + static bool dwarf2out_ignore_block PARAMS ((tree)); + static void dwarf2out_global_decl PARAMS ((tree)); + static void dwarf2out_abstract_function PARAMS ((tree)); + + /* The debug hooks structure. */ + + struct gcc_debug_hooks dwarf2_debug_hooks = + { + dwarf2out_init, + dwarf2out_finish, + dwarf2out_define, + dwarf2out_undef, + dwarf2out_start_source_file, + dwarf2out_end_source_file, + dwarf2out_begin_block, + dwarf2out_end_block, + dwarf2out_ignore_block, + dwarf2out_source_line, + dwarf2out_begin_prologue, + debug_nothing_int, /* end_prologue */ + dwarf2out_end_epilogue, + debug_nothing_tree, /* begin_function */ + debug_nothing_int, /* end_function */ + dwarf2out_decl, /* function_decl */ + dwarf2out_global_decl, + debug_nothing_tree, /* deferred_inline_function */ + /* The DWARF 2 backend tries to reduce debugging bloat by not + emitting the abstract description of inline functions until + something tries to reference them. */ + dwarf2out_abstract_function, /* outlining_inline_function */ + debug_nothing_rtx /* label */ + }; + /* NOTE: In the comments in this file, many references are made to "Debugging Information Entries". This term is abbreviated as `DIE' throughout the remainder of this file. */ *************** typedef struct dw_attr_struct *dw_attr_r *** 2992,2998 **** typedef struct dw_line_info_struct *dw_line_info_ref; typedef struct dw_separate_line_info_struct *dw_separate_line_info_ref; typedef struct pubname_struct *pubname_ref; ! typedef dw_die_ref *arange_ref; /* Each entry in the line_info_table maintains the file and line number associated with the label generated for that --- 3130,3136 ---- typedef struct dw_line_info_struct *dw_line_info_ref; typedef struct dw_separate_line_info_struct *dw_separate_line_info_ref; typedef struct pubname_struct *pubname_ref; ! typedef struct dw_ranges_struct *dw_ranges_ref; /* Each entry in the line_info_table maintains the file and line number associated with the label generated for that *************** typedef struct pubname_struct *** 3053,3062 **** --- 3191,3206 ---- } pubname_entry; + struct dw_ranges_struct + { + int block_num; + }; + /* The limbo die list structure. */ typedef struct limbo_die_struct { dw_die_ref die; + tree created_for; struct limbo_die_struct *next; } limbo_die_node; *************** extern int flag_traditional; *** 3121,3142 **** #endif #endif - /* Define the architecture-dependent minimum instruction length (in bytes). - In this implementation of DWARF, this field is used for information - purposes only. Since GCC generates assembly language, we have - no a priori knowledge of how many instruction bytes are generated - for each source line, and therefore can use only the DW_LNE_set_address - and DW_LNS_fixed_advance_pc line information commands. */ - - #ifndef DWARF_LINE_MIN_INSTR_LENGTH - #define DWARF_LINE_MIN_INSTR_LENGTH 4 - #endif - /* Minimum line offset in a special line info. opcode. This value was chosen to give a reasonable range of values. */ #define DWARF_LINE_BASE -10 ! /* First special line opcde - leave room for the standard opcodes. */ #define DWARF_LINE_OPCODE_BASE 10 /* Range of line offsets in a special line info. opcode. */ --- 3265,3275 ---- #endif #endif /* Minimum line offset in a special line info. opcode. This value was chosen to give a reasonable range of values. */ #define DWARF_LINE_BASE -10 ! /* First special line opcode - leave room for the standard opcodes. */ #define DWARF_LINE_OPCODE_BASE 10 /* Range of line offsets in a special line info. opcode. */ *************** static unsigned pubname_table_in_use; *** 3253,3261 **** pubname_table. */ #define PUBNAME_TABLE_INCREMENT 64 ! /* A pointer to the base of a table that contains a list of publicly ! accessible names. */ ! static arange_ref arange_table; /* Number of elements currently allocated for arange_table. */ static unsigned arange_table_allocated; --- 3386,3393 ---- pubname_table. */ #define PUBNAME_TABLE_INCREMENT 64 ! /* Array of dies for which we should generate .debug_arange info. */ ! static dw_die_ref *arange_table; /* Number of elements currently allocated for arange_table. */ static unsigned arange_table_allocated; *************** static unsigned arange_table_in_use; *** 3267,3277 **** arange_table. */ #define ARANGE_TABLE_INCREMENT 64 /* A pointer to the base of a list of incomplete types which might be completed at some later time. incomplete_types_list needs to be a VARRAY ! because we want to tell the garbage collector about it. If we don't tell ! the garbage collector about it, we can garbage collect live data. ! Bug 4215.*/ varray_type incomplete_types; /* Record whether the function being analyzed contains inlined functions. */ --- 3399,3423 ---- arange_table. */ #define ARANGE_TABLE_INCREMENT 64 + /* Array of dies for which we should generate .debug_ranges info. */ + static dw_ranges_ref ranges_table; + + /* Number of elements currently allocated for ranges_table. */ + static unsigned ranges_table_allocated; + + /* Number of elements in ranges_table currently in use. */ + static unsigned ranges_table_in_use; + + /* Size (in elements) of increments by which we may expand the + ranges_table. */ + #define RANGES_TABLE_INCREMENT 64 + + /* Whether we have location lists that need outputting */ + static unsigned have_location_lists; + /* A pointer to the base of a list of incomplete types which might be completed at some later time. incomplete_types_list needs to be a VARRAY ! because we want to tell the garbage collector about it. */ varray_type incomplete_types; /* Record whether the function being analyzed contains inlined functions. */ *************** static int comp_unit_has_inlines; *** 3281,3289 **** #endif /* Array of RTXes referenced by the debugging information, which therefore ! must be kept around forever. We do this rather than perform GC on ! the dwarf info because almost all of the dwarf info lives forever, and ! it's easier to support non-GC frontends this way. */ static varray_type used_rtx_varray; /* Forward declarations for functions defined in this file. */ --- 3427,3433 ---- #endif /* Array of RTXes referenced by the debugging information, which therefore ! must be kept around forever. This is a GC root. */ static varray_type used_rtx_varray; /* Forward declarations for functions defined in this file. */ *************** static tree decl_ultimate_origin PARAMS *** 3301,3314 **** --- 3445,3462 ---- static tree block_ultimate_origin PARAMS ((tree)); static tree decl_class_context PARAMS ((tree)); static void add_dwarf_attr PARAMS ((dw_die_ref, dw_attr_ref)); + static inline dw_val_class AT_class PARAMS ((dw_attr_ref)); static void add_AT_flag PARAMS ((dw_die_ref, enum dwarf_attribute, unsigned)); + static inline unsigned AT_flag PARAMS ((dw_attr_ref)); static void add_AT_int PARAMS ((dw_die_ref, enum dwarf_attribute, long)); + static inline long int AT_int PARAMS ((dw_attr_ref)); static void add_AT_unsigned PARAMS ((dw_die_ref, enum dwarf_attribute, unsigned long)); + static inline unsigned long AT_unsigned PARAMS ((dw_attr_ref)); static void add_AT_long_long PARAMS ((dw_die_ref, enum dwarf_attribute, unsigned long, *************** static void add_AT_float PARAMS ((dw_di *** 3319,3342 **** --- 3467,3508 ---- static void add_AT_string PARAMS ((dw_die_ref, enum dwarf_attribute, const char *)); + static inline const char *AT_string PARAMS ((dw_attr_ref)); + static int AT_string_form PARAMS ((dw_attr_ref)); static void add_AT_die_ref PARAMS ((dw_die_ref, enum dwarf_attribute, dw_die_ref)); + static inline dw_die_ref AT_ref PARAMS ((dw_attr_ref)); + static inline int AT_ref_external PARAMS ((dw_attr_ref)); + static inline void set_AT_ref_external PARAMS ((dw_attr_ref, int)); static void add_AT_fde_ref PARAMS ((dw_die_ref, enum dwarf_attribute, unsigned)); static void add_AT_loc PARAMS ((dw_die_ref, enum dwarf_attribute, dw_loc_descr_ref)); + static inline dw_loc_descr_ref AT_loc PARAMS ((dw_attr_ref)); + static void add_AT_loc_list PARAMS ((dw_die_ref, + enum dwarf_attribute, + dw_loc_list_ref)); + static inline dw_loc_list_ref AT_loc_list PARAMS ((dw_attr_ref)); static void add_AT_addr PARAMS ((dw_die_ref, enum dwarf_attribute, rtx)); + static inline rtx AT_addr PARAMS ((dw_attr_ref)); static void add_AT_lbl_id PARAMS ((dw_die_ref, enum dwarf_attribute, const char *)); static void add_AT_lbl_offset PARAMS ((dw_die_ref, enum dwarf_attribute, const char *)); + static void add_AT_offset PARAMS ((dw_die_ref, + enum dwarf_attribute, + unsigned long)); + static void add_AT_range_list PARAMS ((dw_die_ref, + enum dwarf_attribute, + unsigned long)); + static inline const char *AT_lbl PARAMS ((dw_attr_ref)); static dw_attr_ref get_AT PARAMS ((dw_die_ref, enum dwarf_attribute)); static const char *get_AT_low_pc PARAMS ((dw_die_ref)); *************** static unsigned get_AT_unsigned PARAMS *** 3350,3362 **** static inline dw_die_ref get_AT_ref PARAMS ((dw_die_ref, enum dwarf_attribute)); static int is_c_family PARAMS ((void)); static int is_java PARAMS ((void)); static int is_fortran PARAMS ((void)); static void remove_AT PARAMS ((dw_die_ref, enum dwarf_attribute)); static void remove_children PARAMS ((dw_die_ref)); static void add_child_die PARAMS ((dw_die_ref, dw_die_ref)); ! static dw_die_ref new_die PARAMS ((enum dwarf_tag, dw_die_ref)); static dw_die_ref lookup_type_die PARAMS ((tree)); static void equate_type_number_to_die PARAMS ((tree, dw_die_ref)); static dw_die_ref lookup_decl_die PARAMS ((tree)); --- 3516,3531 ---- static inline dw_die_ref get_AT_ref PARAMS ((dw_die_ref, enum dwarf_attribute)); static int is_c_family PARAMS ((void)); + static int is_cxx PARAMS ((void)); static int is_java PARAMS ((void)); static int is_fortran PARAMS ((void)); static void remove_AT PARAMS ((dw_die_ref, enum dwarf_attribute)); + static inline void free_die PARAMS ((dw_die_ref)); static void remove_children PARAMS ((dw_die_ref)); static void add_child_die PARAMS ((dw_die_ref, dw_die_ref)); ! static dw_die_ref new_die PARAMS ((enum dwarf_tag, dw_die_ref, ! tree)); static dw_die_ref lookup_type_die PARAMS ((tree)); static void equate_type_number_to_die PARAMS ((tree, dw_die_ref)); static dw_die_ref lookup_decl_die PARAMS ((tree)); *************** static void reverse_die_lists PARAMS (( *** 3368,3386 **** static void reverse_all_dies PARAMS ((dw_die_ref)); static dw_die_ref push_new_compile_unit PARAMS ((dw_die_ref, dw_die_ref)); static dw_die_ref pop_compile_unit PARAMS ((dw_die_ref)); ! static void loc_checksum PARAMS ((dw_loc_descr_ref, struct md5_ctx *)); ! static void attr_checksum PARAMS ((dw_attr_ref, struct md5_ctx *)); ! static void die_checksum PARAMS ((dw_die_ref, struct md5_ctx *)); static void compute_section_prefix PARAMS ((dw_die_ref)); static int is_type_die PARAMS ((dw_die_ref)); static int is_comdat_die PARAMS ((dw_die_ref)); static int is_symbol_die PARAMS ((dw_die_ref)); - static char *gen_internal_sym PARAMS ((void)); static void assign_symbol_names PARAMS ((dw_die_ref)); static void break_out_includes PARAMS ((dw_die_ref)); static void add_sibling_attributes PARAMS ((dw_die_ref)); static void build_abbrev_table PARAMS ((dw_die_ref)); ! static unsigned long size_of_string PARAMS ((const char *)); static int constant_size PARAMS ((long unsigned)); static unsigned long size_of_die PARAMS ((dw_die_ref)); static void calc_die_sizes PARAMS ((dw_die_ref)); --- 3537,3557 ---- static void reverse_all_dies PARAMS ((dw_die_ref)); static dw_die_ref push_new_compile_unit PARAMS ((dw_die_ref, dw_die_ref)); static dw_die_ref pop_compile_unit PARAMS ((dw_die_ref)); ! static void loc_checksum PARAMS ((dw_loc_descr_ref, ! struct md5_ctx *)); ! static void attr_checksum PARAMS ((dw_attr_ref, ! struct md5_ctx *)); ! static void die_checksum PARAMS ((dw_die_ref, ! struct md5_ctx *)); static void compute_section_prefix PARAMS ((dw_die_ref)); static int is_type_die PARAMS ((dw_die_ref)); static int is_comdat_die PARAMS ((dw_die_ref)); static int is_symbol_die PARAMS ((dw_die_ref)); static void assign_symbol_names PARAMS ((dw_die_ref)); static void break_out_includes PARAMS ((dw_die_ref)); static void add_sibling_attributes PARAMS ((dw_die_ref)); static void build_abbrev_table PARAMS ((dw_die_ref)); ! static void output_location_lists PARAMS ((dw_die_ref)); static int constant_size PARAMS ((long unsigned)); static unsigned long size_of_die PARAMS ((dw_die_ref)); static void calc_die_sizes PARAMS ((dw_die_ref)); *************** static void add_pubname PARAMS ((tree, *** 3400,3405 **** --- 3571,3578 ---- static void output_pubnames PARAMS ((void)); static void add_arange PARAMS ((tree, dw_die_ref)); static void output_aranges PARAMS ((void)); + static unsigned int add_ranges PARAMS ((tree)); + static void output_ranges PARAMS ((void)); static void output_line_info PARAMS ((void)); static void output_file_names PARAMS ((void)); static dw_die_ref base_type_die PARAMS ((tree)); *************** static dw_loc_descr_ref loc_descriptor_f *** 3419,3425 **** static HOST_WIDE_INT ceiling PARAMS ((HOST_WIDE_INT, unsigned int)); static tree field_type PARAMS ((tree)); static unsigned int simple_type_align_in_bits PARAMS ((tree)); ! static unsigned int simple_decl_align_in_bits PARAMS ((tree)); static unsigned HOST_WIDE_INT simple_type_size_in_bits PARAMS ((tree)); static HOST_WIDE_INT field_byte_offset PARAMS ((tree)); static void add_AT_location_description PARAMS ((dw_die_ref, --- 3592,3598 ---- static HOST_WIDE_INT ceiling PARAMS ((HOST_WIDE_INT, unsigned int)); static tree field_type PARAMS ((tree)); static unsigned int simple_type_align_in_bits PARAMS ((tree)); ! static unsigned int simple_field_decl_align_in_bits PARAMS ((tree)); static unsigned HOST_WIDE_INT simple_type_size_in_bits PARAMS ((tree)); static HOST_WIDE_INT field_byte_offset PARAMS ((tree)); static void add_AT_location_description PARAMS ((dw_die_ref, *************** static void add_pure_or_virtual_attribut *** 3442,3449 **** static void add_src_coords_attributes PARAMS ((dw_die_ref, tree)); static void add_name_and_src_coords_attributes PARAMS ((dw_die_ref, tree)); static void push_decl_scope PARAMS ((tree)); - static dw_die_ref scope_die_for PARAMS ((tree, dw_die_ref)); static void pop_decl_scope PARAMS ((void)); static void add_type_attribute PARAMS ((dw_die_ref, tree, int, int, dw_die_ref)); static const char *type_tag PARAMS ((tree)); --- 3615,3624 ---- static void add_src_coords_attributes PARAMS ((dw_die_ref, tree)); static void add_name_and_src_coords_attributes PARAMS ((dw_die_ref, tree)); static void push_decl_scope PARAMS ((tree)); static void pop_decl_scope PARAMS ((void)); + static dw_die_ref scope_die_for PARAMS ((tree, dw_die_ref)); + static inline int local_scope_p PARAMS ((dw_die_ref)); + static inline int class_scope_p PARAMS ((dw_die_ref)); static void add_type_attribute PARAMS ((dw_die_ref, tree, int, int, dw_die_ref)); static const char *type_tag PARAMS ((tree)); *************** static int is_redundant_typedef PARAMS *** 3485,3548 **** static void gen_decl_die PARAMS ((tree, dw_die_ref)); static unsigned lookup_filename PARAMS ((const char *)); static void init_file_table PARAMS ((void)); - static void add_incomplete_type PARAMS ((tree)); static void retry_incomplete_types PARAMS ((void)); static void gen_type_die_for_member PARAMS ((tree, tree, dw_die_ref)); - static rtx save_rtx PARAMS ((rtx)); static void splice_child_die PARAMS ((dw_die_ref, dw_die_ref)); static int file_info_cmp PARAMS ((const void *, const void *)); /* Section names used to hold DWARF debugging information. */ #ifndef DEBUG_INFO_SECTION #define DEBUG_INFO_SECTION ".debug_info" #endif ! #ifndef ABBREV_SECTION ! #define ABBREV_SECTION ".debug_abbrev" #endif ! #ifndef ARANGES_SECTION ! #define ARANGES_SECTION ".debug_aranges" #endif ! #ifndef DW_MACINFO_SECTION ! #define DW_MACINFO_SECTION ".debug_macinfo" #endif #ifndef DEBUG_LINE_SECTION #define DEBUG_LINE_SECTION ".debug_line" #endif ! #ifndef LOC_SECTION ! #define LOC_SECTION ".debug_loc" #endif ! #ifndef PUBNAMES_SECTION ! #define PUBNAMES_SECTION ".debug_pubnames" #endif ! #ifndef STR_SECTION ! #define STR_SECTION ".debug_str" #endif /* Standard ELF section names for compiled code and data. */ ! #ifndef TEXT_SECTION ! #define TEXT_SECTION ".text" ! #endif ! #ifndef DATA_SECTION ! #define DATA_SECTION ".data" #endif ! #ifndef BSS_SECTION ! #define BSS_SECTION ".bss" #endif /* Labels we insert at beginning sections we can reference instead of the section names themselves. */ #ifndef TEXT_SECTION_LABEL ! #define TEXT_SECTION_LABEL "Ltext" #endif #ifndef DEBUG_LINE_SECTION_LABEL ! #define DEBUG_LINE_SECTION_LABEL "Ldebug_line" #endif #ifndef DEBUG_INFO_SECTION_LABEL ! #define DEBUG_INFO_SECTION_LABEL "Ldebug_info" #endif ! #ifndef ABBREV_SECTION_LABEL ! #define ABBREV_SECTION_LABEL "Ldebug_abbrev" #endif /* Definitions of defaults for formats and names of various special --- 3660,3744 ---- static void gen_decl_die PARAMS ((tree, dw_die_ref)); static unsigned lookup_filename PARAMS ((const char *)); static void init_file_table PARAMS ((void)); static void retry_incomplete_types PARAMS ((void)); static void gen_type_die_for_member PARAMS ((tree, tree, dw_die_ref)); static void splice_child_die PARAMS ((dw_die_ref, dw_die_ref)); static int file_info_cmp PARAMS ((const void *, const void *)); + static dw_loc_list_ref new_loc_list PARAMS ((dw_loc_descr_ref, + const char *, const char *, + const char *, unsigned)); + static void add_loc_descr_to_loc_list PARAMS ((dw_loc_list_ref *, + dw_loc_descr_ref, + const char *, const char *, const char *)); + static void output_loc_list PARAMS ((dw_loc_list_ref)); + static char *gen_internal_sym PARAMS ((const char *)); + static void mark_limbo_die_list PARAMS ((void *)); /* Section names used to hold DWARF debugging information. */ #ifndef DEBUG_INFO_SECTION #define DEBUG_INFO_SECTION ".debug_info" #endif ! #ifndef DEBUG_ABBREV_SECTION ! #define DEBUG_ABBREV_SECTION ".debug_abbrev" #endif ! #ifndef DEBUG_ARANGES_SECTION ! #define DEBUG_ARANGES_SECTION ".debug_aranges" #endif ! #ifndef DEBUG_MACINFO_SECTION ! #define DEBUG_MACINFO_SECTION ".debug_macinfo" #endif #ifndef DEBUG_LINE_SECTION #define DEBUG_LINE_SECTION ".debug_line" #endif ! #ifndef DEBUG_LOC_SECTION ! #define DEBUG_LOC_SECTION ".debug_loc" #endif ! #ifndef DEBUG_PUBNAMES_SECTION ! #define DEBUG_PUBNAMES_SECTION ".debug_pubnames" #endif ! #ifndef DEBUG_STR_SECTION ! #define DEBUG_STR_SECTION ".debug_str" ! #endif ! #ifndef DEBUG_RANGES_SECTION ! #define DEBUG_RANGES_SECTION ".debug_ranges" #endif /* Standard ELF section names for compiled code and data. */ ! #ifndef TEXT_SECTION_NAME ! #define TEXT_SECTION_NAME ".text" #endif ! ! /* Section flags for .debug_str section. */ ! #ifdef HAVE_GAS_SHF_MERGE ! #define DEBUG_STR_SECTION_FLAGS \ ! (SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1) ! #else ! #define DEBUG_STR_SECTION_FLAGS SECTION_DEBUG #endif /* Labels we insert at beginning sections we can reference instead of the section names themselves. */ #ifndef TEXT_SECTION_LABEL ! #define TEXT_SECTION_LABEL "Ltext" #endif #ifndef DEBUG_LINE_SECTION_LABEL ! #define DEBUG_LINE_SECTION_LABEL "Ldebug_line" #endif #ifndef DEBUG_INFO_SECTION_LABEL ! #define DEBUG_INFO_SECTION_LABEL "Ldebug_info" #endif ! #ifndef DEBUG_ABBREV_SECTION_LABEL ! #define DEBUG_ABBREV_SECTION_LABEL "Ldebug_abbrev" ! #endif ! #ifndef DEBUG_LOC_SECTION_LABEL ! #define DEBUG_LOC_SECTION_LABEL "Ldebug_loc" ! #endif ! #ifndef DEBUG_RANGES_SECTION_LABEL ! #define DEBUG_RANGES_SECTION_LABEL "Ldebug_ranges" ! #endif ! #ifndef DEBUG_MACINFO_SECTION_LABEL ! #define DEBUG_MACINFO_SECTION_LABEL "Ldebug_macinfo" #endif /* Definitions of defaults for formats and names of various special *************** static char text_section_label[MAX_ARTIF *** 3556,3561 **** --- 3752,3760 ---- static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES]; static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES]; static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES]; + static char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES]; + static char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES]; + static char ranges_section_label[2 * MAX_ARTIFICIAL_LABEL_BYTES]; #ifndef TEXT_END_LABEL #define TEXT_END_LABEL "Letext" *************** dwarf2out_set_demangle_name_func (func) *** 3596,3620 **** { demangle_name_func = func; } - - /* Return an rtx like ORIG which lives forever. If we're doing GC, - that means adding it to used_rtx_varray. If not, that means making - a copy on the permanent_obstack. */ - - static rtx - save_rtx (orig) - register rtx orig; - { - VARRAY_PUSH_RTX (used_rtx_varray, orig); - - return orig; - } /* Test if rtl node points to a pseudo register. */ static inline int is_pseudo_reg (rtl) ! register rtx rtl; { return ((GET_CODE (rtl) == REG && REGNO (rtl) >= FIRST_PSEUDO_REGISTER) || (GET_CODE (rtl) == SUBREG --- 3795,3806 ---- { demangle_name_func = func; } /* Test if rtl node points to a pseudo register. */ static inline int is_pseudo_reg (rtl) ! rtx rtl; { return ((GET_CODE (rtl) == REG && REGNO (rtl) >= FIRST_PSEUDO_REGISTER) || (GET_CODE (rtl) == SUBREG *************** is_pseudo_reg (rtl) *** 3626,3640 **** static inline tree type_main_variant (type) ! register tree type; { type = TYPE_MAIN_VARIANT (type); ! /* There really should be only one main variant among any group of variants ! of a given type (and all of the MAIN_VARIANT values for all members of ! the group should point to that one type) but sometimes the C front-end ! messes this up for array types, so we work around that bug here. */ ! if (TREE_CODE (type) == ARRAY_TYPE) while (type != TYPE_MAIN_VARIANT (type)) type = TYPE_MAIN_VARIANT (type); --- 3812,3826 ---- static inline tree type_main_variant (type) ! tree type; { type = TYPE_MAIN_VARIANT (type); ! /* ??? There really should be only one main variant among any group of ! variants of a given type (and all of the MAIN_VARIANT values for all ! members of the group should point to that one type) but sometimes the C ! front-end messes this up for array types, so we work around that bug ! here. */ if (TREE_CODE (type) == ARRAY_TYPE) while (type != TYPE_MAIN_VARIANT (type)) type = TYPE_MAIN_VARIANT (type); *************** type_main_variant (type) *** 3646,3654 **** static inline int is_tagged_type (type) ! register tree type; { ! register enum tree_code code = TREE_CODE (type); return (code == RECORD_TYPE || code == UNION_TYPE || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE); --- 3832,3840 ---- static inline int is_tagged_type (type) ! tree type; { ! enum tree_code code = TREE_CODE (type); return (code == RECORD_TYPE || code == UNION_TYPE || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE); *************** is_tagged_type (type) *** 3658,3664 **** static const char * dwarf_tag_name (tag) ! register unsigned tag; { switch (tag) { --- 3844,3850 ---- static const char * dwarf_tag_name (tag) ! unsigned tag; { switch (tag) { *************** dwarf_tag_name (tag) *** 3779,3785 **** static const char * dwarf_attr_name (attr) ! register unsigned attr; { switch (attr) { --- 3965,3971 ---- static const char * dwarf_attr_name (attr) ! unsigned attr; { switch (attr) { *************** dwarf_attr_name (attr) *** 3908,3913 **** --- 4094,4124 ---- case DW_AT_vtable_elem_location: return "DW_AT_vtable_elem_location"; + case DW_AT_allocated: + return "DW_AT_allocated"; + case DW_AT_associated: + return "DW_AT_associated"; + case DW_AT_data_location: + return "DW_AT_data_location"; + case DW_AT_stride: + return "DW_AT_stride"; + case DW_AT_entry_pc: + return "DW_AT_entry_pc"; + case DW_AT_use_UTF8: + return "DW_AT_use_UTF8"; + case DW_AT_extension: + return "DW_AT_extension"; + case DW_AT_ranges: + return "DW_AT_ranges"; + case DW_AT_trampoline: + return "DW_AT_trampoline"; + case DW_AT_call_column: + return "DW_AT_call_column"; + case DW_AT_call_file: + return "DW_AT_call_file"; + case DW_AT_call_line: + return "DW_AT_call_line"; + case DW_AT_MIPS_fde: return "DW_AT_MIPS_fde"; case DW_AT_MIPS_loop_begin: *************** dwarf_attr_name (attr) *** 3943,3948 **** --- 4154,4165 ---- return "DW_AT_body_begin"; case DW_AT_body_end: return "DW_AT_body_end"; + case DW_AT_GNU_vector: + return "DW_AT_GNU_vector"; + + case DW_AT_VMS_rtnbeg_pd_address: + return "DW_AT_VMS_rtnbeg_pd_address"; + default: return "DW_AT_"; } *************** dwarf_attr_name (attr) *** 3952,3958 **** static const char * dwarf_form_name (form) ! register unsigned form; { switch (form) { --- 4169,4175 ---- static const char * dwarf_form_name (form) ! unsigned form; { switch (form) { *************** dwarf_form_name (form) *** 4008,4014 **** #if 0 static const char * dwarf_type_encoding_name (enc) ! register unsigned enc; { switch (enc) { --- 4225,4231 ---- #if 0 static const char * dwarf_type_encoding_name (enc) ! unsigned enc; { switch (enc) { *************** dwarf_type_encoding_name (enc) *** 4042,4048 **** static tree decl_ultimate_origin (decl) ! register tree decl; { /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the nodes in the function to point to themselves; ignore that if --- 4259,4265 ---- static tree decl_ultimate_origin (decl) ! tree decl; { /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the nodes in the function to point to themselves; ignore that if *************** decl_ultimate_origin (decl) *** 4068,4076 **** static tree block_ultimate_origin (block) ! register tree block; { ! register tree immediate_origin = BLOCK_ABSTRACT_ORIGIN (block); /* output_inline_function sets BLOCK_ABSTRACT_ORIGIN for all the nodes in the function to point to themselves; ignore that if --- 4285,4293 ---- static tree block_ultimate_origin (block) ! tree block; { ! tree immediate_origin = BLOCK_ABSTRACT_ORIGIN (block); /* output_inline_function sets BLOCK_ABSTRACT_ORIGIN for all the nodes in the function to point to themselves; ignore that if *************** block_ultimate_origin (block) *** 4082,4096 **** return NULL_TREE; else { ! register tree ret_val; ! register tree lookahead = immediate_origin; do { ret_val = lookahead; ! lookahead = (TREE_CODE (ret_val) == BLOCK) ! ? BLOCK_ABSTRACT_ORIGIN (ret_val) ! : NULL; } while (lookahead != NULL && lookahead != ret_val); --- 4299,4312 ---- return NULL_TREE; else { ! tree ret_val; ! tree lookahead = immediate_origin; do { ret_val = lookahead; ! lookahead = (TREE_CODE (ret_val) == BLOCK ! ? BLOCK_ABSTRACT_ORIGIN (ret_val) : NULL); } while (lookahead != NULL && lookahead != ret_val); *************** decl_class_context (decl) *** 4125,4132 **** static inline void add_dwarf_attr (die, attr) ! register dw_die_ref die; ! register dw_attr_ref attr; { if (die != NULL && attr != NULL) { --- 4341,4348 ---- static inline void add_dwarf_attr (die, attr) ! dw_die_ref die; ! dw_attr_ref attr; { if (die != NULL && attr != NULL) { *************** add_dwarf_attr (die, attr) *** 4135,4141 **** } } - static inline dw_val_class AT_class PARAMS ((dw_attr_ref)); static inline dw_val_class AT_class (a) dw_attr_ref a; --- 4351,4356 ---- *************** AT_class (a) *** 4147,4157 **** static inline void add_AT_flag (die, attr_kind, flag) ! register dw_die_ref die; ! register enum dwarf_attribute attr_kind; ! register unsigned flag; { ! register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node)); attr->dw_attr_next = NULL; attr->dw_attr = attr_kind; --- 4362,4372 ---- static inline void add_AT_flag (die, attr_kind, flag) ! dw_die_ref die; ! enum dwarf_attribute attr_kind; ! unsigned flag; { ! dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node)); attr->dw_attr_next = NULL; attr->dw_attr = attr_kind; *************** add_AT_flag (die, attr_kind, flag) *** 4160,4169 **** add_dwarf_attr (die, attr); } - static inline unsigned AT_flag PARAMS ((dw_attr_ref)); static inline unsigned AT_flag (a) ! register dw_attr_ref a; { if (a && AT_class (a) == dw_val_class_flag) return a->dw_attr_val.v.val_flag; --- 4375,4383 ---- add_dwarf_attr (die, attr); } static inline unsigned AT_flag (a) ! dw_attr_ref a; { if (a && AT_class (a) == dw_val_class_flag) return a->dw_attr_val.v.val_flag; *************** AT_flag (a) *** 4175,4185 **** static inline void add_AT_int (die, attr_kind, int_val) ! register dw_die_ref die; ! register enum dwarf_attribute attr_kind; ! register long int int_val; { ! register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node)); attr->dw_attr_next = NULL; attr->dw_attr = attr_kind; --- 4389,4399 ---- static inline void add_AT_int (die, attr_kind, int_val) ! dw_die_ref die; ! enum dwarf_attribute attr_kind; ! long int int_val; { ! dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node)); attr->dw_attr_next = NULL; attr->dw_attr = attr_kind; *************** add_AT_int (die, attr_kind, int_val) *** 4188,4197 **** add_dwarf_attr (die, attr); } - static inline long int AT_int PARAMS ((dw_attr_ref)); static inline long int AT_int (a) ! register dw_attr_ref a; { if (a && AT_class (a) == dw_val_class_const) return a->dw_attr_val.v.val_int; --- 4402,4410 ---- add_dwarf_attr (die, attr); } static inline long int AT_int (a) ! dw_attr_ref a; { if (a && AT_class (a) == dw_val_class_const) return a->dw_attr_val.v.val_int; *************** AT_int (a) *** 4203,4213 **** static inline void add_AT_unsigned (die, attr_kind, unsigned_val) ! register dw_die_ref die; ! register enum dwarf_attribute attr_kind; ! register unsigned long unsigned_val; { ! register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node)); attr->dw_attr_next = NULL; attr->dw_attr = attr_kind; --- 4416,4426 ---- static inline void add_AT_unsigned (die, attr_kind, unsigned_val) ! dw_die_ref die; ! enum dwarf_attribute attr_kind; ! unsigned long unsigned_val; { ! dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node)); attr->dw_attr_next = NULL; attr->dw_attr = attr_kind; *************** add_AT_unsigned (die, attr_kind, unsigne *** 4216,4225 **** add_dwarf_attr (die, attr); } - static inline unsigned long AT_unsigned PARAMS ((dw_attr_ref)); static inline unsigned long AT_unsigned (a) ! register dw_attr_ref a; { if (a && AT_class (a) == dw_val_class_unsigned_const) return a->dw_attr_val.v.val_unsigned; --- 4429,4437 ---- add_dwarf_attr (die, attr); } static inline unsigned long AT_unsigned (a) ! dw_attr_ref a; { if (a && AT_class (a) == dw_val_class_unsigned_const) return a->dw_attr_val.v.val_unsigned; *************** AT_unsigned (a) *** 4231,4242 **** static inline void add_AT_long_long (die, attr_kind, val_hi, val_low) ! register dw_die_ref die; ! register enum dwarf_attribute attr_kind; ! register unsigned long val_hi; ! register unsigned long val_low; { ! register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node)); attr->dw_attr_next = NULL; attr->dw_attr = attr_kind; --- 4443,4454 ---- static inline void add_AT_long_long (die, attr_kind, val_hi, val_low) ! dw_die_ref die; ! enum dwarf_attribute attr_kind; ! unsigned long val_hi; ! unsigned long val_low; { ! dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node)); attr->dw_attr_next = NULL; attr->dw_attr = attr_kind; *************** add_AT_long_long (die, attr_kind, val_hi *** 4250,4261 **** static inline void add_AT_float (die, attr_kind, length, array) ! register dw_die_ref die; ! register enum dwarf_attribute attr_kind; ! register unsigned length; ! register long *array; { ! register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node)); attr->dw_attr_next = NULL; attr->dw_attr = attr_kind; --- 4462,4473 ---- static inline void add_AT_float (die, attr_kind, length, array) ! dw_die_ref die; ! enum dwarf_attribute attr_kind; ! unsigned length; ! long *array; { ! dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node)); attr->dw_attr_next = NULL; attr->dw_attr = attr_kind; *************** add_AT_float (die, attr_kind, length, ar *** 4269,4294 **** static inline void add_AT_string (die, attr_kind, str) ! register dw_die_ref die; ! register enum dwarf_attribute attr_kind; ! register const char *str; { ! register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node)); attr->dw_attr_next = NULL; attr->dw_attr = attr_kind; attr->dw_attr_val.val_class = dw_val_class_str; ! attr->dw_attr_val.v.val_str = xstrdup (str); add_dwarf_attr (die, attr); } - static inline const char *AT_string PARAMS ((dw_attr_ref)); static inline const char * AT_string (a) ! register dw_attr_ref a; { if (a && AT_class (a) == dw_val_class_str) ! return a->dw_attr_val.v.val_str; abort (); } --- 4481,4559 ---- static inline void add_AT_string (die, attr_kind, str) ! dw_die_ref die; ! enum dwarf_attribute attr_kind; ! const char *str; { ! dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node)); ! struct indirect_string_node *node; ! ! if (! debug_str_hash) ! { ! debug_str_hash = ht_create (10); ! debug_str_hash->alloc_node = indirect_string_alloc; ! } ! ! node = (struct indirect_string_node *) ! ht_lookup (debug_str_hash, (const unsigned char *) str, ! strlen (str), HT_ALLOC); ! node->refcount++; attr->dw_attr_next = NULL; attr->dw_attr = attr_kind; attr->dw_attr_val.val_class = dw_val_class_str; ! attr->dw_attr_val.v.val_str = node; add_dwarf_attr (die, attr); } static inline const char * AT_string (a) ! dw_attr_ref a; { if (a && AT_class (a) == dw_val_class_str) ! return (const char *) HT_STR (&a->dw_attr_val.v.val_str->id); ! ! abort (); ! } ! ! /* Find out whether a string should be output inline in DIE ! or out-of-line in .debug_str section. */ ! ! static int ! AT_string_form (a) ! dw_attr_ref a; ! { ! if (a && AT_class (a) == dw_val_class_str) ! { ! struct indirect_string_node *node; ! unsigned int len; ! extern int const_labelno; ! char label[32]; ! ! node = a->dw_attr_val.v.val_str; ! if (node->form) ! return node->form; ! ! len = HT_LEN (&node->id) + 1; ! ! /* If the string is shorter or equal to the size of the reference, it is ! always better to put it inline. */ ! if (len <= DWARF_OFFSET_SIZE || node->refcount == 0) ! return node->form = DW_FORM_string; ! ! /* If we cannot expect the linker to merge strings in .debug_str ! section, only put it into .debug_str if it is worth even in this ! single module. */ ! if ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) == 0 ! && (len - DWARF_OFFSET_SIZE) * node->refcount <= len) ! return node->form = DW_FORM_string; ! ! ASM_GENERATE_INTERNAL_LABEL (label, "LC", const_labelno); ! ++const_labelno; ! node->label = xstrdup (label); ! ! return node->form = DW_FORM_strp; ! } abort (); } *************** AT_string (a) *** 4297,4307 **** static inline void add_AT_die_ref (die, attr_kind, targ_die) ! register dw_die_ref die; ! register enum dwarf_attribute attr_kind; ! register dw_die_ref targ_die; { ! register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node)); attr->dw_attr_next = NULL; attr->dw_attr = attr_kind; --- 4562,4572 ---- static inline void add_AT_die_ref (die, attr_kind, targ_die) ! dw_die_ref die; ! enum dwarf_attribute attr_kind; ! dw_die_ref targ_die; { ! dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node)); attr->dw_attr_next = NULL; attr->dw_attr = attr_kind; *************** add_AT_die_ref (die, attr_kind, targ_die *** 4311,4320 **** add_dwarf_attr (die, attr); } - static inline dw_die_ref AT_ref PARAMS ((dw_attr_ref)); static inline dw_die_ref AT_ref (a) ! register dw_attr_ref a; { if (a && AT_class (a) == dw_val_class_die_ref) return a->dw_attr_val.v.val_die_ref.die; --- 4576,4584 ---- add_dwarf_attr (die, attr); } static inline dw_die_ref AT_ref (a) ! dw_attr_ref a; { if (a && AT_class (a) == dw_val_class_die_ref) return a->dw_attr_val.v.val_die_ref.die; *************** AT_ref (a) *** 4322,4331 **** abort (); } - static inline int AT_ref_external PARAMS ((dw_attr_ref)); static inline int AT_ref_external (a) ! register dw_attr_ref a; { if (a && AT_class (a) == dw_val_class_die_ref) return a->dw_attr_val.v.val_die_ref.external; --- 4586,4594 ---- abort (); } static inline int AT_ref_external (a) ! dw_attr_ref a; { if (a && AT_class (a) == dw_val_class_die_ref) return a->dw_attr_val.v.val_die_ref.external; *************** AT_ref_external (a) *** 4333,4342 **** return 0; } - static inline void set_AT_ref_external PARAMS ((dw_attr_ref, int)); static inline void set_AT_ref_external (a, i) ! register dw_attr_ref a; int i; { if (a && AT_class (a) == dw_val_class_die_ref) --- 4596,4604 ---- return 0; } static inline void set_AT_ref_external (a, i) ! dw_attr_ref a; int i; { if (a && AT_class (a) == dw_val_class_die_ref) *************** set_AT_ref_external (a, i) *** 4349,4359 **** static inline void add_AT_fde_ref (die, attr_kind, targ_fde) ! register dw_die_ref die; ! register enum dwarf_attribute attr_kind; ! register unsigned targ_fde; { ! register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node)); attr->dw_attr_next = NULL; attr->dw_attr = attr_kind; --- 4611,4621 ---- static inline void add_AT_fde_ref (die, attr_kind, targ_fde) ! dw_die_ref die; ! enum dwarf_attribute attr_kind; ! unsigned targ_fde; { ! dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node)); attr->dw_attr_next = NULL; attr->dw_attr = attr_kind; *************** add_AT_fde_ref (die, attr_kind, targ_fde *** 4366,4376 **** static inline void add_AT_loc (die, attr_kind, loc) ! register dw_die_ref die; ! register enum dwarf_attribute attr_kind; ! register dw_loc_descr_ref loc; { ! register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node)); attr->dw_attr_next = NULL; attr->dw_attr = attr_kind; --- 4628,4638 ---- static inline void add_AT_loc (die, attr_kind, loc) ! dw_die_ref die; ! enum dwarf_attribute attr_kind; ! dw_loc_descr_ref loc; { ! dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node)); attr->dw_attr_next = NULL; attr->dw_attr = attr_kind; *************** add_AT_loc (die, attr_kind, loc) *** 4379,4388 **** add_dwarf_attr (die, attr); } - static inline dw_loc_descr_ref AT_loc PARAMS ((dw_attr_ref)); static inline dw_loc_descr_ref AT_loc (a) ! register dw_attr_ref a; { if (a && AT_class (a) == dw_val_class_loc) return a->dw_attr_val.v.val_loc; --- 4641,4649 ---- add_dwarf_attr (die, attr); } static inline dw_loc_descr_ref AT_loc (a) ! dw_attr_ref a; { if (a && AT_class (a) == dw_val_class_loc) return a->dw_attr_val.v.val_loc; *************** AT_loc (a) *** 4390,4404 **** abort (); } /* Add an address constant attribute value to a DIE. */ static inline void add_AT_addr (die, attr_kind, addr) ! register dw_die_ref die; ! register enum dwarf_attribute attr_kind; rtx addr; { ! register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node)); attr->dw_attr_next = NULL; attr->dw_attr = attr_kind; --- 4651,4691 ---- abort (); } + static inline void + add_AT_loc_list (die, attr_kind, loc_list) + dw_die_ref die; + enum dwarf_attribute attr_kind; + dw_loc_list_ref loc_list; + { + dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node)); + + attr->dw_attr_next = NULL; + attr->dw_attr = attr_kind; + attr->dw_attr_val.val_class = dw_val_class_loc_list; + attr->dw_attr_val.v.val_loc_list = loc_list; + add_dwarf_attr (die, attr); + have_location_lists = 1; + } + + static inline dw_loc_list_ref + AT_loc_list (a) + dw_attr_ref a; + { + if (a && AT_class (a) == dw_val_class_loc_list) + return a->dw_attr_val.v.val_loc_list; + + abort (); + } + /* Add an address constant attribute value to a DIE. */ static inline void add_AT_addr (die, attr_kind, addr) ! dw_die_ref die; ! enum dwarf_attribute attr_kind; rtx addr; { ! dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node)); attr->dw_attr_next = NULL; attr->dw_attr = attr_kind; *************** add_AT_addr (die, attr_kind, addr) *** 4407,4416 **** add_dwarf_attr (die, attr); } - static inline rtx AT_addr PARAMS ((dw_attr_ref)); static inline rtx AT_addr (a) ! register dw_attr_ref a; { if (a && AT_class (a) == dw_val_class_addr) return a->dw_attr_val.v.val_addr; --- 4694,4702 ---- add_dwarf_attr (die, attr); } static inline rtx AT_addr (a) ! dw_attr_ref a; { if (a && AT_class (a) == dw_val_class_addr) return a->dw_attr_val.v.val_addr; *************** AT_addr (a) *** 4422,4432 **** static inline void add_AT_lbl_id (die, attr_kind, lbl_id) ! register dw_die_ref die; ! register enum dwarf_attribute attr_kind; ! register const char *lbl_id; { ! register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node)); attr->dw_attr_next = NULL; attr->dw_attr = attr_kind; --- 4708,4718 ---- static inline void add_AT_lbl_id (die, attr_kind, lbl_id) ! dw_die_ref die; ! enum dwarf_attribute attr_kind; ! const char *lbl_id; { ! dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node)); attr->dw_attr_next = NULL; attr->dw_attr = attr_kind; *************** add_AT_lbl_id (die, attr_kind, lbl_id) *** 4439,4449 **** static inline void add_AT_lbl_offset (die, attr_kind, label) ! register dw_die_ref die; ! register enum dwarf_attribute attr_kind; ! register const char *label; { ! register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node)); attr->dw_attr_next = NULL; attr->dw_attr = attr_kind; --- 4725,4735 ---- static inline void add_AT_lbl_offset (die, attr_kind, label) ! dw_die_ref die; ! enum dwarf_attribute attr_kind; ! const char *label; { ! dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node)); attr->dw_attr_next = NULL; attr->dw_attr = attr_kind; *************** add_AT_lbl_offset (die, attr_kind, label *** 4452,4461 **** add_dwarf_attr (die, attr); } ! static inline const char *AT_lbl PARAMS ((dw_attr_ref)); static inline const char * AT_lbl (a) ! register dw_attr_ref a; { if (a && (AT_class (a) == dw_val_class_lbl_id || AT_class (a) == dw_val_class_lbl_offset)) --- 4738,4780 ---- add_dwarf_attr (die, attr); } ! /* Add an offset attribute value to a DIE. */ ! ! static inline void ! add_AT_offset (die, attr_kind, offset) ! dw_die_ref die; ! enum dwarf_attribute attr_kind; ! unsigned long offset; ! { ! dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node)); ! ! attr->dw_attr_next = NULL; ! attr->dw_attr = attr_kind; ! attr->dw_attr_val.val_class = dw_val_class_offset; ! attr->dw_attr_val.v.val_offset = offset; ! add_dwarf_attr (die, attr); ! } ! ! /* Add an range_list attribute value to a DIE. */ ! ! static void ! add_AT_range_list (die, attr_kind, offset) ! dw_die_ref die; ! enum dwarf_attribute attr_kind; ! unsigned long offset; ! { ! dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node)); ! ! attr->dw_attr_next = NULL; ! attr->dw_attr = attr_kind; ! attr->dw_attr_val.val_class = dw_val_class_range_list; ! attr->dw_attr_val.v.val_offset = offset; ! add_dwarf_attr (die, attr); ! } ! static inline const char * AT_lbl (a) ! dw_attr_ref a; { if (a && (AT_class (a) == dw_val_class_lbl_id || AT_class (a) == dw_val_class_lbl_offset)) *************** AT_lbl (a) *** 4468,4490 **** static inline dw_attr_ref get_AT (die, attr_kind) ! register dw_die_ref die; ! register enum dwarf_attribute attr_kind; { ! register dw_attr_ref a; ! register dw_die_ref spec = NULL; if (die != NULL) { for (a = die->die_attr; a != NULL; a = a->dw_attr_next) ! { ! if (a->dw_attr == attr_kind) ! return a; ! ! if (a->dw_attr == DW_AT_specification ! || a->dw_attr == DW_AT_abstract_origin) ! spec = AT_ref (a); ! } if (spec) return get_AT (spec, attr_kind); --- 4787,4806 ---- static inline dw_attr_ref get_AT (die, attr_kind) ! dw_die_ref die; ! enum dwarf_attribute attr_kind; { ! dw_attr_ref a; ! dw_die_ref spec = NULL; if (die != NULL) { for (a = die->die_attr; a != NULL; a = a->dw_attr_next) ! if (a->dw_attr == attr_kind) ! return a; ! else if (a->dw_attr == DW_AT_specification ! || a->dw_attr == DW_AT_abstract_origin) ! spec = AT_ref (a); if (spec) return get_AT (spec, attr_kind); *************** get_AT (die, attr_kind) *** 4493,4521 **** return NULL; } ! /* Return the "low pc" attribute value, typically associated with ! a subprogram DIE. Return null if the "low pc" attribute is ! either not prsent, or if it cannot be represented as an ! assembler label identifier. */ static inline const char * get_AT_low_pc (die) ! register dw_die_ref die; { ! register dw_attr_ref a = get_AT (die, DW_AT_low_pc); return a ? AT_lbl (a) : NULL; } ! /* Return the "high pc" attribute value, typically associated with ! a subprogram DIE. Return null if the "high pc" attribute is ! either not prsent, or if it cannot be represented as an ! assembler label identifier. */ static inline const char * get_AT_hi_pc (die) ! register dw_die_ref die; { ! register dw_attr_ref a = get_AT (die, DW_AT_high_pc); return a ? AT_lbl (a) : NULL; } --- 4809,4837 ---- return NULL; } ! /* Return the "low pc" attribute value, typically associated with a subprogram ! DIE. Return null if the "low pc" attribute is either not present, or if it ! cannot be represented as an assembler label identifier. */ static inline const char * get_AT_low_pc (die) ! dw_die_ref die; { ! dw_attr_ref a = get_AT (die, DW_AT_low_pc); ! return a ? AT_lbl (a) : NULL; } ! /* Return the "high pc" attribute value, typically associated with a subprogram ! DIE. Return null if the "high pc" attribute is either not present, or if it ! cannot be represented as an assembler label identifier. */ static inline const char * get_AT_hi_pc (die) ! dw_die_ref die; { ! dw_attr_ref a = get_AT (die, DW_AT_high_pc); ! return a ? AT_lbl (a) : NULL; } *************** get_AT_hi_pc (die) *** 4524,4533 **** static inline const char * get_AT_string (die, attr_kind) ! register dw_die_ref die; ! register enum dwarf_attribute attr_kind; { ! register dw_attr_ref a = get_AT (die, attr_kind); return a ? AT_string (a) : NULL; } --- 4840,4850 ---- static inline const char * get_AT_string (die, attr_kind) ! dw_die_ref die; ! enum dwarf_attribute attr_kind; { ! dw_attr_ref a = get_AT (die, attr_kind); ! return a ? AT_string (a) : NULL; } *************** get_AT_string (die, attr_kind) *** 4536,4545 **** static inline int get_AT_flag (die, attr_kind) ! register dw_die_ref die; ! register enum dwarf_attribute attr_kind; { ! register dw_attr_ref a = get_AT (die, attr_kind); return a ? AT_flag (a) : 0; } --- 4853,4863 ---- static inline int get_AT_flag (die, attr_kind) ! dw_die_ref die; ! enum dwarf_attribute attr_kind; { ! dw_attr_ref a = get_AT (die, attr_kind); ! return a ? AT_flag (a) : 0; } *************** get_AT_flag (die, attr_kind) *** 4548,4573 **** static inline unsigned get_AT_unsigned (die, attr_kind) ! register dw_die_ref die; ! register enum dwarf_attribute attr_kind; { ! register dw_attr_ref a = get_AT (die, attr_kind); return a ? AT_unsigned (a) : 0; } static inline dw_die_ref get_AT_ref (die, attr_kind) dw_die_ref die; ! register enum dwarf_attribute attr_kind; { ! register dw_attr_ref a = get_AT (die, attr_kind); return a ? AT_ref (a) : NULL; } static inline int is_c_family () { ! register unsigned lang = get_AT_unsigned (comp_unit_die, DW_AT_language); return (lang == DW_LANG_C || lang == DW_LANG_C89 || lang == DW_LANG_C_plus_plus); --- 4866,4893 ---- static inline unsigned get_AT_unsigned (die, attr_kind) ! dw_die_ref die; ! enum dwarf_attribute attr_kind; { ! dw_attr_ref a = get_AT (die, attr_kind); ! return a ? AT_unsigned (a) : 0; } static inline dw_die_ref get_AT_ref (die, attr_kind) dw_die_ref die; ! enum dwarf_attribute attr_kind; { ! dw_attr_ref a = get_AT (die, attr_kind); ! return a ? AT_ref (a) : NULL; } static inline int is_c_family () { ! unsigned lang = get_AT_unsigned (comp_unit_die, DW_AT_language); return (lang == DW_LANG_C || lang == DW_LANG_C89 || lang == DW_LANG_C_plus_plus); *************** is_cxx () *** 4583,4589 **** static inline int is_fortran () { ! register unsigned lang = get_AT_unsigned (comp_unit_die, DW_AT_language); return (lang == DW_LANG_Fortran77 || lang == DW_LANG_Fortran90); } --- 4903,4909 ---- static inline int is_fortran () { ! unsigned lang = get_AT_unsigned (comp_unit_die, DW_AT_language); return (lang == DW_LANG_Fortran77 || lang == DW_LANG_Fortran90); } *************** is_fortran () *** 4591,4597 **** static inline int is_java () { ! register unsigned lang = get_AT_unsigned (comp_unit_die, DW_AT_language); return (lang == DW_LANG_Java); } --- 4911,4917 ---- static inline int is_java () { ! unsigned lang = get_AT_unsigned (comp_unit_die, DW_AT_language); return (lang == DW_LANG_Java); } *************** free_AT (a) *** 4606,4614 **** switch (AT_class (a)) { case dw_val_class_str: case dw_val_class_lbl_id: case dw_val_class_lbl_offset: ! free (a->dw_attr_val.v.val_str); break; case dw_val_class_float: --- 4926,4938 ---- switch (AT_class (a)) { case dw_val_class_str: + if (a->dw_attr_val.v.val_str->refcount) + a->dw_attr_val.v.val_str->refcount--; + break; + case dw_val_class_lbl_id: case dw_val_class_lbl_offset: ! free (a->dw_attr_val.v.val_lbl_id); break; case dw_val_class_float: *************** free_AT (a) *** 4626,4636 **** static void remove_AT (die, attr_kind) ! register dw_die_ref die; ! register enum dwarf_attribute attr_kind; { ! register dw_attr_ref *p; ! register dw_attr_ref removed = NULL; if (die != NULL) { --- 4950,4960 ---- static void remove_AT (die, attr_kind) ! dw_die_ref die; ! enum dwarf_attribute attr_kind; { ! dw_attr_ref *p; ! dw_attr_ref removed = NULL; if (die != NULL) { *************** remove_AT (die, attr_kind) *** 4649,4655 **** /* Free up the memory used by DIE. */ - static inline void free_die PARAMS ((dw_die_ref)); static inline void free_die (die) dw_die_ref die; --- 4973,4978 ---- *************** free_die (die) *** 4662,4683 **** static void remove_children (die) ! register dw_die_ref die; { ! register dw_die_ref child_die = die->die_child; die->die_child = NULL; while (child_die != NULL) { ! register dw_die_ref tmp_die = child_die; ! register dw_attr_ref a; child_die = child_die->die_sib; for (a = tmp_die->die_attr; a != NULL;) { ! register dw_attr_ref tmp_a = a; a = a->dw_attr_next; free_AT (tmp_a); --- 4985,5006 ---- static void remove_children (die) ! dw_die_ref die; { ! dw_die_ref child_die = die->die_child; die->die_child = NULL; while (child_die != NULL) { ! dw_die_ref tmp_die = child_die; ! dw_attr_ref a; child_die = child_die->die_sib; for (a = tmp_die->die_attr; a != NULL;) { ! dw_attr_ref tmp_a = a; a = a->dw_attr_next; free_AT (tmp_a); *************** remove_children (die) *** 4692,4704 **** static inline void add_child_die (die, child_die) ! register dw_die_ref die; ! register dw_die_ref child_die; { if (die != NULL && child_die != NULL) { if (die == child_die) abort (); child_die->die_parent = die; child_die->die_sib = die->die_child; die->die_child = child_die; --- 5015,5028 ---- static inline void add_child_die (die, child_die) ! dw_die_ref die; ! dw_die_ref child_die; { if (die != NULL && child_die != NULL) { if (die == child_die) abort (); + child_die->die_parent = die; child_die->die_sib = die->die_child; die->die_child = child_die; *************** splice_child_die (parent, child) *** 4719,4724 **** --- 5043,5049 ---- if (child->die_parent != parent) { dw_die_ref tmp = get_AT_ref (child, DW_AT_specification); + if (tmp) child = tmp; } *************** splice_child_die (parent, child) *** 4741,4751 **** /* Return a pointer to a newly created DIE node. */ static inline dw_die_ref ! new_die (tag_value, parent_die) ! register enum dwarf_tag tag_value; ! register dw_die_ref parent_die; { ! register dw_die_ref die = (dw_die_ref) xcalloc (1, sizeof (die_node)); die->die_tag = tag_value; --- 5066,5077 ---- /* Return a pointer to a newly created DIE node. */ static inline dw_die_ref ! new_die (tag_value, parent_die, t) ! enum dwarf_tag tag_value; ! dw_die_ref parent_die; ! tree t; { ! dw_die_ref die = (dw_die_ref) xcalloc (1, sizeof (die_node)); die->die_tag = tag_value; *************** new_die (tag_value, parent_die) *** 4757,4762 **** --- 5083,5089 ---- limbo_node = (limbo_die_node *) xmalloc (sizeof (limbo_die_node)); limbo_node->die = die; + limbo_node->created_for = t; limbo_node->next = limbo_die_list; limbo_die_list = limbo_node; } *************** new_die (tag_value, parent_die) *** 4768,4777 **** static inline dw_die_ref lookup_type_die (type) ! register tree type; { - if (TREE_CODE (type) == VECTOR_TYPE) - type = TYPE_DEBUG_REPRESENTATION_TYPE (type); return (dw_die_ref) TYPE_SYMTAB_POINTER (type); } --- 5095,5102 ---- static inline dw_die_ref lookup_type_die (type) ! tree type; { return (dw_die_ref) TYPE_SYMTAB_POINTER (type); } *************** lookup_type_die (type) *** 4779,4786 **** static inline void equate_type_number_to_die (type, type_die) ! register tree type; ! register dw_die_ref type_die; { TYPE_SYMTAB_POINTER (type) = (char *) type_die; } --- 5104,5111 ---- static inline void equate_type_number_to_die (type, type_die) ! tree type; ! dw_die_ref type_die; { TYPE_SYMTAB_POINTER (type) = (char *) type_die; } *************** equate_type_number_to_die (type, type_di *** 4789,4811 **** static inline dw_die_ref lookup_decl_die (decl) ! register tree decl; { ! register unsigned decl_id = DECL_UID (decl); ! return (decl_id < decl_die_table_in_use ! ? decl_die_table[decl_id] : NULL); } /* Equate a DIE to a particular declaration. */ static void equate_decl_number_to_die (decl, decl_die) ! register tree decl; ! register dw_die_ref decl_die; { ! register unsigned decl_id = DECL_UID (decl); ! register unsigned num_allocated; if (decl_id >= decl_die_table_allocated) { --- 5114,5135 ---- static inline dw_die_ref lookup_decl_die (decl) ! tree decl; { ! unsigned decl_id = DECL_UID (decl); ! return (decl_id < decl_die_table_in_use ? decl_die_table[decl_id] : NULL); } /* Equate a DIE to a particular declaration. */ static void equate_decl_number_to_die (decl, decl_die) ! tree decl; ! dw_die_ref decl_die; { ! unsigned int decl_id = DECL_UID (decl); ! unsigned int num_allocated; if (decl_id >= decl_die_table_allocated) { *************** print_die (die, outfile) *** 4851,4858 **** dw_die_ref die; FILE *outfile; { ! register dw_attr_ref a; ! register dw_die_ref c; print_spaces (outfile); fprintf (outfile, "DIE %4lu: %s\n", --- 5175,5182 ---- dw_die_ref die; FILE *outfile; { ! dw_attr_ref a; ! dw_die_ref c; print_spaces (outfile); fprintf (outfile, "DIE %4lu: %s\n", *************** print_die (die, outfile) *** 4871,4879 **** --- 5195,5213 ---- case dw_val_class_addr: fprintf (outfile, "address"); break; + case dw_val_class_offset: + fprintf (outfile, "offset"); + break; case dw_val_class_loc: fprintf (outfile, "location descriptor"); break; + case dw_val_class_loc_list: + fprintf (outfile, "location list -> label:%s", + AT_loc_list (a)->ll_symbol); + break; + case dw_val_class_range_list: + fprintf (outfile, "range list"); + break; case dw_val_class_const: fprintf (outfile, "%ld", AT_int (a)); break; *************** static void *** 4938,4948 **** print_dwarf_line_table (outfile) FILE *outfile; { ! register unsigned i; ! register dw_line_info_ref line_info; fprintf (outfile, "\n\nDWARF source line information\n"); ! for (i = 1; i < line_info_table_in_use; ++i) { line_info = &line_info_table[i]; fprintf (outfile, "%5d: ", i); --- 5272,5282 ---- print_dwarf_line_table (outfile) FILE *outfile; { ! unsigned i; ! dw_line_info_ref line_info; fprintf (outfile, "\n\nDWARF source line information\n"); ! for (i = 1; i < line_info_table_in_use; i++) { line_info = &line_info_table[i]; fprintf (outfile, "%5d: ", i); *************** debug_dwarf () *** 4981,4990 **** static void reverse_die_lists (die) ! register dw_die_ref die; { ! register dw_die_ref c, cp, cn; ! register dw_attr_ref a, ap, an; for (a = die->die_attr, ap = 0; a; a = an) { --- 5315,5324 ---- static void reverse_die_lists (die) ! dw_die_ref die; { ! dw_die_ref c, cp, cn; ! dw_attr_ref a, ap, an; for (a = die->die_attr, ap = 0; a; a = an) { *************** reverse_die_lists (die) *** 4992,4997 **** --- 5326,5332 ---- a->dw_attr_next = ap; ap = a; } + die->die_attr = ap; for (c = die->die_child, cp = 0; c; c = cn) *************** reverse_die_lists (die) *** 5000,5020 **** c->die_sib = cp; cp = c; } die->die_child = cp; } ! /* reverse_die_lists only reverses the single die you pass it. Since ! we used to reverse all dies in add_sibling_attributes, which runs ! through all the dies, it would reverse all the dies. Now, however, ! since we don't call reverse_die_lists in add_sibling_attributes, we ! need a routine to recursively reverse all the dies. This is that ! routine. */ static void reverse_all_dies (die) ! register dw_die_ref die; { ! register dw_die_ref c; reverse_die_lists (die); --- 5335,5355 ---- c->die_sib = cp; cp = c; } + die->die_child = cp; } ! /* reverse_die_lists only reverses the single die you pass it. Since we used to ! reverse all dies in add_sibling_attributes, which runs through all the dies, ! it would reverse all the dies. Now, however, since we don't call ! reverse_die_lists in add_sibling_attributes, we need a routine to ! recursively reverse all the dies. This is that routine. */ static void reverse_all_dies (die) ! dw_die_ref die; { ! dw_die_ref c; reverse_die_lists (die); *************** reverse_all_dies (die) *** 5022,5031 **** reverse_all_dies (c); } ! /* Start a new compilation unit DIE for an include file. OLD_UNIT is ! the CU for the enclosing include file, if any. BINCL_DIE is the ! DW_TAG_GNU_BINCL DIE that marks the start of the DIEs for this ! include file. */ static dw_die_ref push_new_compile_unit (old_unit, bincl_die) --- 5357,5365 ---- reverse_all_dies (c); } ! /* Start a new compilation unit DIE for an include file. OLD_UNIT is the CU ! for the enclosing include file, if any. BINCL_DIE is the DW_TAG_GNU_BINCL ! DIE that marks the start of the DIEs for this include file. */ static dw_die_ref push_new_compile_unit (old_unit, bincl_die) *************** push_new_compile_unit (old_unit, bincl_d *** 5033,5038 **** --- 5367,5373 ---- { const char *filename = get_AT_string (bincl_die, DW_AT_name); dw_die_ref new_unit = gen_compile_unit_die (filename); + new_unit->die_sib = old_unit; return new_unit; } *************** pop_compile_unit (old_unit) *** 5044,5055 **** dw_die_ref old_unit; { dw_die_ref new_unit = old_unit->die_sib; old_unit->die_sib = NULL; return new_unit; } ! #define PROCESS(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx) ! #define PROCESS_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx) /* Calculate the checksum of a location expression. */ --- 5379,5391 ---- dw_die_ref old_unit; { dw_die_ref new_unit = old_unit->die_sib; + old_unit->die_sib = NULL; return new_unit; } ! #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx) ! #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx) /* Calculate the checksum of a location expression. */ *************** loc_checksum (loc, ctx) *** 5058,5066 **** dw_loc_descr_ref loc; struct md5_ctx *ctx; { ! PROCESS (loc->dw_loc_opc); ! PROCESS (loc->dw_loc_oprnd1); ! PROCESS (loc->dw_loc_oprnd2); } /* Calculate the checksum of an attribute. */ --- 5394,5402 ---- dw_loc_descr_ref loc; struct md5_ctx *ctx; { ! CHECKSUM (loc->dw_loc_opc); ! CHECKSUM (loc->dw_loc_oprnd1); ! CHECKSUM (loc->dw_loc_oprnd2); } /* Calculate the checksum of an attribute. */ *************** attr_checksum (at, ctx) *** 5073,5079 **** dw_loc_descr_ref loc; rtx r; ! PROCESS (at->dw_attr); /* We don't care about differences in file numbering. */ if (at->dw_attr == DW_AT_decl_file --- 5409,5415 ---- dw_loc_descr_ref loc; rtx r; ! CHECKSUM (at->dw_attr); /* We don't care about differences in file numbering. */ if (at->dw_attr == DW_AT_decl_file *************** attr_checksum (at, ctx) *** 5085,5114 **** switch (AT_class (at)) { case dw_val_class_const: ! PROCESS (at->dw_attr_val.v.val_int); break; case dw_val_class_unsigned_const: ! PROCESS (at->dw_attr_val.v.val_unsigned); break; case dw_val_class_long_long: ! PROCESS (at->dw_attr_val.v.val_long_long); break; case dw_val_class_float: ! PROCESS (at->dw_attr_val.v.val_float); break; case dw_val_class_flag: ! PROCESS (at->dw_attr_val.v.val_flag); break; - case dw_val_class_str: ! PROCESS_STRING (AT_string (at)); break; case dw_val_class_addr: r = AT_addr (at); switch (GET_CODE (r)) { case SYMBOL_REF: ! PROCESS_STRING (XSTR (r, 0)); break; default: --- 5421,5450 ---- switch (AT_class (at)) { case dw_val_class_const: ! CHECKSUM (at->dw_attr_val.v.val_int); break; case dw_val_class_unsigned_const: ! CHECKSUM (at->dw_attr_val.v.val_unsigned); break; case dw_val_class_long_long: ! CHECKSUM (at->dw_attr_val.v.val_long_long); break; case dw_val_class_float: ! CHECKSUM (at->dw_attr_val.v.val_float); break; case dw_val_class_flag: ! CHECKSUM (at->dw_attr_val.v.val_flag); break; case dw_val_class_str: ! CHECKSUM_STRING (AT_string (at)); break; + case dw_val_class_addr: r = AT_addr (at); switch (GET_CODE (r)) { case SYMBOL_REF: ! CHECKSUM_STRING (XSTR (r, 0)); break; default: *************** attr_checksum (at, ctx) *** 5116,5121 **** --- 5452,5461 ---- } break; + case dw_val_class_offset: + CHECKSUM (at->dw_attr_val.v.val_offset); + break; + case dw_val_class_loc: for (loc = AT_loc (at); loc; loc = loc->dw_loc_next) loc_checksum (loc, ctx); *************** attr_checksum (at, ctx) *** 5123,5134 **** case dw_val_class_die_ref: if (AT_ref (at)->die_offset) ! PROCESS (AT_ref (at)->die_offset); /* FIXME else use target die name or something. */ case dw_val_class_fde_ref: case dw_val_class_lbl_id: case dw_val_class_lbl_offset: default: break; --- 5463,5475 ---- case dw_val_class_die_ref: if (AT_ref (at)->die_offset) ! CHECKSUM (AT_ref (at)->die_offset); /* FIXME else use target die name or something. */ case dw_val_class_fde_ref: case dw_val_class_lbl_id: case dw_val_class_lbl_offset: + break; default: break; *************** die_checksum (die, ctx) *** 5145,5151 **** dw_die_ref c; dw_attr_ref a; ! PROCESS (die->die_tag); for (a = die->die_attr; a; a = a->dw_attr_next) attr_checksum (a, ctx); --- 5486,5492 ---- dw_die_ref c; dw_attr_ref a; ! CHECKSUM (die->die_tag); for (a = die->die_attr; a; a = a->dw_attr_next) attr_checksum (a, ctx); *************** die_checksum (die, ctx) *** 5154,5161 **** die_checksum (c, ctx); } ! #undef PROCESS ! #undef PROCESS_STRING /* The prefix to attach to symbols on DIEs in the current comdat debug info section. */ --- 5495,5502 ---- die_checksum (c, ctx); } ! #undef CHECKSUM ! #undef CHECKSUM_STRING /* The prefix to attach to symbols on DIEs in the current comdat debug info section. */ *************** static void *** 5171,5193 **** compute_section_prefix (unit_die) dw_die_ref unit_die; { ! char *p, *name; int i; unsigned char checksum[16]; struct md5_ctx ctx; md5_init_ctx (&ctx); die_checksum (unit_die, &ctx); md5_finish_ctx (&ctx, checksum); ! p = lbasename (get_AT_string (unit_die, DW_AT_name)); ! name = (char *) alloca (strlen (p) + 64); ! sprintf (name, "%s.", p); ! clean_symbol_name (name); p = name + strlen (name); ! for (i = 0; i < 4; ++i) { sprintf (p, "%.2x", checksum[i]); p += 2; --- 5512,5536 ---- compute_section_prefix (unit_die) dw_die_ref unit_die; { ! const char *base = lbasename (get_AT_string (unit_die, DW_AT_name)); ! char *name = (char *) alloca (strlen (base) + 64); ! char *p; int i; unsigned char checksum[16]; struct md5_ctx ctx; + /* Compute the checksum of the DIE, then append part of it as hex digits to + the name filename of the unit. */ + md5_init_ctx (&ctx); die_checksum (unit_die, &ctx); md5_finish_ctx (&ctx, checksum); ! sprintf (name, "%s.", base); clean_symbol_name (name); p = name + strlen (name); ! for (i = 0; i < 4; i++) { sprintf (p, "%.2x", checksum[i]); p += 2; *************** compute_section_prefix (unit_die) *** 5197,5203 **** comdat_symbol_number = 0; } ! /* Returns nonzero iff DIE represents a type, in the sense of TYPE_P. */ static int is_type_die (die) --- 5540,5546 ---- comdat_symbol_number = 0; } ! /* Returns nonzero if DIE represents a type, in the sense of TYPE_P. */ static int is_type_die (die) *************** static int *** 5237,5248 **** is_comdat_die (c) dw_die_ref c; { ! #if 1 ! /* I think we want to leave base types and __vtbl_ptr_type in the ! main CU, as we do for stabs. The advantage is a greater ! likelihood of sharing between objects that don't include headers ! in the same order (and therefore would put the base types in a ! different comdat). jason 8/28/00 */ if (c->die_tag == DW_TAG_base_type) return 0; --- 5580,5590 ---- is_comdat_die (c) dw_die_ref c; { ! /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as ! we do for stabs. The advantage is a greater likelihood of sharing between ! objects that don't include headers in the same order (and therefore would ! put the base types in a different comdat). jason 8/28/00 */ ! if (c->die_tag == DW_TAG_base_type) return 0; *************** is_comdat_die (c) *** 5252,5260 **** || c->die_tag == DW_TAG_volatile_type) { dw_die_ref t = get_AT_ref (c, DW_AT_type); return t ? is_comdat_die (t) : 0; } - #endif return is_type_die (c); } --- 5594,5602 ---- || c->die_tag == DW_TAG_volatile_type) { dw_die_ref t = get_AT_ref (c, DW_AT_type); + return t ? is_comdat_die (t) : 0; } return is_type_die (c); } *************** static int *** 5266,5285 **** is_symbol_die (c) dw_die_ref c; { ! if (is_type_die (c)) ! return 1; ! if (get_AT (c, DW_AT_declaration) ! && ! get_AT (c, DW_AT_specification)) ! return 1; ! return 0; } static char * ! gen_internal_sym () { char buf[256]; static int label_num; ! ASM_GENERATE_INTERNAL_LABEL (buf, "LDIE", label_num++); return xstrdup (buf); } --- 5608,5626 ---- is_symbol_die (c) dw_die_ref c; { ! return (is_type_die (c) ! || (get_AT (c, DW_AT_declaration) ! && !get_AT (c, DW_AT_specification))); } static char * ! gen_internal_sym (prefix) ! const char *prefix; { char buf[256]; static int label_num; ! ! ASM_GENERATE_INTERNAL_LABEL (buf, prefix, label_num++); return xstrdup (buf); } *************** gen_internal_sym () *** 5287,5307 **** static void assign_symbol_names (die) ! register dw_die_ref die; { ! register dw_die_ref c; if (is_symbol_die (die)) { if (comdat_symbol_id) { char *p = alloca (strlen (comdat_symbol_id) + 64); sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX, comdat_symbol_id, comdat_symbol_number++); die->die_symbol = xstrdup (p); } else ! die->die_symbol = gen_internal_sym (); } for (c = die->die_child; c != NULL; c = c->die_sib) --- 5628,5649 ---- static void assign_symbol_names (die) ! dw_die_ref die; { ! dw_die_ref c; if (is_symbol_die (die)) { if (comdat_symbol_id) { char *p = alloca (strlen (comdat_symbol_id) + 64); + sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX, comdat_symbol_id, comdat_symbol_number++); die->die_symbol = xstrdup (p); } else ! die->die_symbol = gen_internal_sym ("LDIE"); } for (c = die->die_child; c != NULL; c = c->die_sib) *************** assign_symbol_names (die) *** 5314,5331 **** static void break_out_includes (die) ! register dw_die_ref die; { dw_die_ref *ptr; ! register dw_die_ref unit = NULL; limbo_die_node *node; for (ptr = &(die->die_child); *ptr; ) { ! register dw_die_ref c = *ptr; ! if (c->die_tag == DW_TAG_GNU_BINCL ! || c->die_tag == DW_TAG_GNU_EINCL || (unit && is_comdat_die (c))) { /* This DIE is for a secondary CU; remove it from the main one. */ --- 5656,5672 ---- static void break_out_includes (die) ! dw_die_ref die; { dw_die_ref *ptr; ! dw_die_ref unit = NULL; limbo_die_node *node; for (ptr = &(die->die_child); *ptr; ) { ! dw_die_ref c = *ptr; ! if (c->die_tag == DW_TAG_GNU_BINCL || c->die_tag == DW_TAG_GNU_EINCL || (unit && is_comdat_die (c))) { /* This DIE is for a secondary CU; remove it from the main one. */ *************** break_out_includes (die) *** 5373,5381 **** static void add_sibling_attributes (die) ! register dw_die_ref die; { ! register dw_die_ref c; if (die->die_tag != DW_TAG_compile_unit && die->die_sib && die->die_child != NULL) --- 5714,5722 ---- static void add_sibling_attributes (die) ! dw_die_ref die; { ! dw_die_ref c; if (die->die_tag != DW_TAG_compile_unit && die->die_sib && die->die_child != NULL) *************** add_sibling_attributes (die) *** 5386,5422 **** add_sibling_attributes (c); } ! /* The format of each DIE (and its attribute value pairs) ! is encoded in an abbreviation table. This routine builds the ! abbreviation table and assigns a unique abbreviation id for ! each abbreviation entry. The children of each die are visited ! recursively. */ static void build_abbrev_table (die) ! register dw_die_ref die; { ! register unsigned long abbrev_id; ! register unsigned long n_alloc; ! register dw_die_ref c; ! register dw_attr_ref d_attr, a_attr; /* Scan the DIE references, and mark as external any that refer to DIEs from other CUs (i.e. those which are not marked). */ for (d_attr = die->die_attr; d_attr; d_attr = d_attr->dw_attr_next) ! { ! if (AT_class (d_attr) == dw_val_class_die_ref ! && AT_ref (d_attr)->die_mark == 0) ! { ! if (AT_ref (d_attr)->die_symbol == 0) ! abort (); ! set_AT_ref_external (d_attr, 1); ! } ! } for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id) { ! register dw_die_ref abbrev = abbrev_die_table[abbrev_id]; if (abbrev->die_tag == die->die_tag) { --- 5727,5778 ---- add_sibling_attributes (c); } ! /* Output all location lists for the DIE and its children. */ ! ! static void ! output_location_lists (die) ! dw_die_ref die; ! { ! dw_die_ref c; ! dw_attr_ref d_attr; ! ! for (d_attr = die->die_attr; d_attr; d_attr = d_attr->dw_attr_next) ! if (AT_class (d_attr) == dw_val_class_loc_list) ! output_loc_list (AT_loc_list (d_attr)); ! ! for (c = die->die_child; c != NULL; c = c->die_sib) ! output_location_lists (c); ! ! } ! /* The format of each DIE (and its attribute value pairs) is encoded in an ! abbreviation table. This routine builds the abbreviation table and assigns ! a unique abbreviation id for each abbreviation entry. The children of each ! die are visited recursively. */ static void build_abbrev_table (die) ! dw_die_ref die; { ! unsigned long abbrev_id; ! unsigned int n_alloc; ! dw_die_ref c; ! dw_attr_ref d_attr, a_attr; /* Scan the DIE references, and mark as external any that refer to DIEs from other CUs (i.e. those which are not marked). */ for (d_attr = die->die_attr; d_attr; d_attr = d_attr->dw_attr_next) ! if (AT_class (d_attr) == dw_val_class_die_ref ! && AT_ref (d_attr)->die_mark == 0) ! { ! if (AT_ref (d_attr)->die_symbol == 0) ! abort (); ! ! set_AT_ref_external (d_attr, 1); ! } for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id) { ! dw_die_ref abbrev = abbrev_die_table[abbrev_id]; if (abbrev->die_tag == die->die_tag) { *************** build_abbrev_table (die) *** 5464,5483 **** build_abbrev_table (c); } - /* Return the size of a string, including the null byte. - - This used to treat backslashes as escapes, and hence they were not included - in the count. However, that conflicts with what ASM_OUTPUT_ASCII does, - which treats a backslash as a backslash, escaping it if necessary, and hence - we must include them in the count. */ - - static unsigned long - size_of_string (str) - register const char *str; - { - return strlen (str) + 1; - } - /* Return the power-of-two number of bytes necessary to represent VALUE. */ static int --- 5820,5825 ---- *************** constant_size (value) *** 5497,5511 **** return log; } ! /* Return the size of a DIE, as it is represented in the .debug_info section. */ static unsigned long size_of_die (die) ! register dw_die_ref die; { ! register unsigned long size = 0; ! register dw_attr_ref a; size += size_of_uleb128 (die->die_abbrev); for (a = die->die_attr; a != NULL; a = a->dw_attr_next) --- 5839,5853 ---- return log; } ! /* Return the size of a DIE as it is represented in the .debug_info section. */ static unsigned long size_of_die (die) ! dw_die_ref die; { ! unsigned long size = 0; ! dw_attr_ref a; size += size_of_uleb128 (die->die_abbrev); for (a = die->die_attr; a != NULL; a = a->dw_attr_next) *************** size_of_die (die) *** 5515,5529 **** case dw_val_class_addr: size += DWARF2_ADDR_SIZE; break; case dw_val_class_loc: { ! register unsigned long lsize = size_of_locs (AT_loc (a)); /* Block length. */ size += constant_size (lsize); size += lsize; } break; case dw_val_class_const: size += size_of_sleb128 (AT_int (a)); break; --- 5857,5880 ---- case dw_val_class_addr: size += DWARF2_ADDR_SIZE; break; + case dw_val_class_offset: + size += DWARF_OFFSET_SIZE; + break; case dw_val_class_loc: { ! unsigned long lsize = size_of_locs (AT_loc (a)); /* Block length. */ size += constant_size (lsize); size += lsize; } break; + case dw_val_class_loc_list: + size += DWARF_OFFSET_SIZE; + break; + case dw_val_class_range_list: + size += DWARF_OFFSET_SIZE; + break; case dw_val_class_const: size += size_of_sleb128 (AT_int (a)); break; *************** size_of_die (die) *** 5552,5558 **** size += DWARF_OFFSET_SIZE; break; case dw_val_class_str: ! size += size_of_string (AT_string (a)); break; default: abort (); --- 5903,5912 ---- size += DWARF_OFFSET_SIZE; break; case dw_val_class_str: ! if (AT_string_form (a) == DW_FORM_strp) ! size += DWARF_OFFSET_SIZE; ! else ! size += HT_LEN (&a->dw_attr_val.v.val_str->id) + 1; break; default: abort (); *************** size_of_die (die) *** 5562,5578 **** return size; } ! /* Size the debugging information associated with a given DIE. ! Visits the DIE's children recursively. Updates the global ! variable next_die_offset, on each time through. Uses the ! current value of next_die_offset to update the die_offset ! field in each DIE. */ static void calc_die_sizes (die) dw_die_ref die; { ! register dw_die_ref c; die->die_offset = next_die_offset; next_die_offset += size_of_die (die); --- 5916,5932 ---- return size; } ! /* Size the debugging information associated with a given DIE. Visits the ! DIE's children recursively. Updates the global variable next_die_offset, on ! each time through. Uses the current value of next_die_offset to update the ! die_offset field in each DIE. */ static void calc_die_sizes (die) dw_die_ref die; { ! dw_die_ref c; ! die->die_offset = next_die_offset; next_die_offset += size_of_die (die); *************** static void *** 5593,5599 **** mark_dies (die) dw_die_ref die; { ! register dw_die_ref c; die->die_mark = 1; for (c = die->die_child; c; c = c->die_sib) mark_dies (c); --- 5947,5954 ---- mark_dies (die) dw_die_ref die; { ! dw_die_ref c; ! die->die_mark = 1; for (c = die->die_child; c; c = c->die_sib) mark_dies (c); *************** static void *** 5605,5611 **** unmark_dies (die) dw_die_ref die; { ! register dw_die_ref c; die->die_mark = 0; for (c = die->die_child; c; c = c->die_sib) unmark_dies (c); --- 5960,5967 ---- unmark_dies (die) dw_die_ref die; { ! dw_die_ref c; ! die->die_mark = 0; for (c = die->die_child; c; c = c->die_sib) unmark_dies (c); *************** unmark_dies (die) *** 5617,5630 **** static unsigned long size_of_pubnames () { ! register unsigned long size; ! register unsigned i; size = DWARF_PUBNAMES_HEADER_SIZE; ! for (i = 0; i < pubname_table_in_use; ++i) { ! register pubname_ref p = &pubname_table[i]; ! size += DWARF_OFFSET_SIZE + size_of_string (p->name); } size += DWARF_OFFSET_SIZE; --- 5973,5986 ---- static unsigned long size_of_pubnames () { ! unsigned long size; ! unsigned i; size = DWARF_PUBNAMES_HEADER_SIZE; ! for (i = 0; i < pubname_table_in_use; i++) { ! pubname_ref p = &pubname_table[i]; ! size += DWARF_OFFSET_SIZE + strlen (p->name) + 1; } size += DWARF_OFFSET_SIZE; *************** size_of_pubnames () *** 5636,5642 **** static unsigned long size_of_aranges () { ! register unsigned long size; size = DWARF_ARANGES_HEADER_SIZE; --- 5992,5998 ---- static unsigned long size_of_aranges () { ! unsigned long size; size = DWARF_ARANGES_HEADER_SIZE; *************** value_format (a) *** 5659,5664 **** --- 6015,6031 ---- { case dw_val_class_addr: return DW_FORM_addr; + case dw_val_class_range_list: + case dw_val_class_offset: + if (DWARF_OFFSET_SIZE == 4) + return DW_FORM_data4; + if (DWARF_OFFSET_SIZE == 8) + return DW_FORM_data8; + abort (); + case dw_val_class_loc_list: + /* FIXME: Could be DW_FORM_data8, with a > 32 bit size + .debug_loc section */ + return DW_FORM_data4; case dw_val_class_loc: switch (constant_size (size_of_locs (AT_loc (a)))) { *************** value_format (a) *** 5703,5709 **** case dw_val_class_lbl_offset: return DW_FORM_data; case dw_val_class_str: ! return DW_FORM_string; default: abort (); } --- 6070,6077 ---- case dw_val_class_lbl_offset: return DW_FORM_data; case dw_val_class_str: ! return AT_string_form (a); ! default: abort (); } *************** output_value_format (a) *** 5716,5721 **** --- 6084,6090 ---- dw_attr_ref a; { enum dwarf_form form = value_format (a); + dw2_asm_output_data_uleb128 (form, "(%s)", dwarf_form_name (form)); } *************** output_abbrev_section () *** 5728,5739 **** unsigned long abbrev_id; dw_attr_ref a_attr; for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id) { ! register dw_die_ref abbrev = abbrev_die_table[abbrev_id]; dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)"); - dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)", dwarf_tag_name (abbrev->die_tag)); --- 6097,6108 ---- unsigned long abbrev_id; dw_attr_ref a_attr; + for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id) { ! dw_die_ref abbrev = abbrev_die_table[abbrev_id]; dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)"); dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)", dwarf_tag_name (abbrev->die_tag)); *************** output_abbrev_section () *** 5762,5768 **** static inline void output_die_symbol (die) ! register dw_die_ref die; { char *sym = die->die_symbol; --- 6131,6137 ---- static inline void output_die_symbol (die) ! dw_die_ref die; { char *sym = die->die_symbol; *************** output_die_symbol (die) *** 5774,5792 **** .linkonce, it doesn't support combining the sections, so debugging will break. */ ASM_GLOBALIZE_LABEL (asm_out_file, sym); ASM_OUTPUT_LABEL (asm_out_file, sym); } /* Output the DIE and its attributes. Called recursively to generate the definitions of each child DIE. */ static void output_die (die) ! register dw_die_ref die; { ! register dw_attr_ref a; ! register dw_die_ref c; ! register unsigned long size; /* If someone in another CU might refer to us, set up a symbol for them to point to. */ --- 6143,6257 ---- .linkonce, it doesn't support combining the sections, so debugging will break. */ ASM_GLOBALIZE_LABEL (asm_out_file, sym); + ASM_OUTPUT_LABEL (asm_out_file, sym); } + /* Return a new location list, given the begin and end range, and the + expression. gensym tells us whether to generate a new internal symbol for + this location list node, which is done for the head of the list only. */ + + static inline dw_loc_list_ref + new_loc_list (expr, begin, end, section, gensym) + dw_loc_descr_ref expr; + const char *begin; + const char *end; + const char *section; + unsigned gensym; + { + dw_loc_list_ref retlist + = (dw_loc_list_ref) xcalloc (1, sizeof (dw_loc_list_node)); + + retlist->begin = begin; + retlist->end = end; + retlist->expr = expr; + retlist->section = section; + if (gensym) + retlist->ll_symbol = gen_internal_sym ("LLST"); + + return retlist; + } + + /* Add a location description expression to a location list */ + + static inline void + add_loc_descr_to_loc_list (list_head, descr, begin, end, section) + dw_loc_list_ref *list_head; + dw_loc_descr_ref descr; + const char *begin; + const char *end; + const char *section; + { + dw_loc_list_ref *d; + + /* Find the end of the chain. */ + for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next) + ; + + /* Add a new location list node to the list */ + *d = new_loc_list (descr, begin, end, section, 0); + } + + /* Output the location list given to us */ + + static void + output_loc_list (list_head) + dw_loc_list_ref list_head; + { + dw_loc_list_ref curr = list_head; + + ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol); + + /* ??? This shouldn't be needed now that we've forced the + compilation unit base address to zero when there is code + in more than one section. */ + if (strcmp (curr->section, ".text") == 0) + { + /* dw2_asm_output_data will mask off any extra bits in the ~0. */ + dw2_asm_output_data (DWARF2_ADDR_SIZE, ~(unsigned HOST_WIDE_INT) 0, + "Location list base address specifier fake entry"); + dw2_asm_output_offset (DWARF2_ADDR_SIZE, curr->section, + "Location list base address specifier base"); + } + + for (curr = list_head; curr != NULL; curr=curr->dw_loc_next) + { + unsigned long size; + + dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->begin, curr->section, + "Location list begin address (%s)", + list_head->ll_symbol); + dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->end, curr->section, + "Location list end address (%s)", + list_head->ll_symbol); + size = size_of_locs (curr->expr); + + /* Output the block length for this list of location operations. */ + if (size > 0xffff) + abort (); + dw2_asm_output_data (2, size, "%s", "Location expression size"); + + output_loc_sequence (curr->expr); + } + + dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, + "Location list terminator begin (%s)", + list_head->ll_symbol); + dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, + "Location list terminator end (%s)", + list_head->ll_symbol); + } + /* Output the DIE and its attributes. Called recursively to generate the definitions of each child DIE. */ static void output_die (die) ! dw_die_ref die; { ! dw_attr_ref a; ! dw_die_ref c; ! unsigned long size; /* If someone in another CU might refer to us, set up a symbol for them to point to. */ *************** output_die (die) *** 5806,5811 **** --- 6271,6292 ---- dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, AT_addr (a), "%s", name); break; + case dw_val_class_offset: + dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset, + "%s", name); + break; + + case dw_val_class_range_list: + { + char *p = strchr (ranges_section_label, '\0'); + + sprintf (p, "+0x%lx", a->dw_attr_val.v.val_offset); + dw2_asm_output_offset (DWARF_OFFSET_SIZE, ranges_section_label, + "%s", name); + *p = '\0'; + } + break; + case dw_val_class_loc: size = size_of_locs (AT_loc (a)); *************** output_die (die) *** 5831,5837 **** { unsigned HOST_WIDE_INT first, second; ! dw2_asm_output_data (1, 2*HOST_BITS_PER_LONG/HOST_BITS_PER_CHAR, "%s", name); if (WORDS_BIG_ENDIAN) --- 6312,6319 ---- { unsigned HOST_WIDE_INT first, second; ! dw2_asm_output_data (1, ! 2 * HOST_BITS_PER_LONG / HOST_BITS_PER_CHAR, "%s", name); if (WORDS_BIG_ENDIAN) *************** output_die (die) *** 5844,5864 **** first = a->dw_attr_val.v.val_long_long.low; second = a->dw_attr_val.v.val_long_long.hi; } ! dw2_asm_output_data (HOST_BITS_PER_LONG/HOST_BITS_PER_CHAR, first, "long long constant"); ! dw2_asm_output_data (HOST_BITS_PER_LONG/HOST_BITS_PER_CHAR, second, NULL); } break; case dw_val_class_float: { ! register unsigned int i; dw2_asm_output_data (1, a->dw_attr_val.v.val_float.length * 4, "%s", name); ! for (i = 0; i < a->dw_attr_val.v.val_float.length; ++i) dw2_asm_output_data (4, a->dw_attr_val.v.val_float.array[i], "fp constant word %u", i); break; --- 6326,6347 ---- first = a->dw_attr_val.v.val_long_long.low; second = a->dw_attr_val.v.val_long_long.hi; } ! ! dw2_asm_output_data (HOST_BITS_PER_LONG / HOST_BITS_PER_CHAR, first, "long long constant"); ! dw2_asm_output_data (HOST_BITS_PER_LONG / HOST_BITS_PER_CHAR, second, NULL); } break; case dw_val_class_float: { ! unsigned int i; dw2_asm_output_data (1, a->dw_attr_val.v.val_float.length * 4, "%s", name); ! for (i = 0; i < a->dw_attr_val.v.val_float.length; i++) dw2_asm_output_data (4, a->dw_attr_val.v.val_float.array[i], "fp constant word %u", i); break; *************** output_die (die) *** 5868,5877 **** --- 6351,6372 ---- dw2_asm_output_data (1, AT_flag (a), "%s", name); break; + case dw_val_class_loc_list: + { + char *sym = AT_loc_list (a)->ll_symbol; + + if (sym == 0) + abort (); + dw2_asm_output_delta (DWARF_OFFSET_SIZE, sym, + loc_section_label, "%s", name); + } + break; + case dw_val_class_die_ref: if (AT_ref_external (a)) { char *sym = AT_ref (a)->die_symbol; + if (sym == 0) abort (); dw2_asm_output_offset (DWARF2_ADDR_SIZE, sym, "%s", name); *************** output_die (die) *** 5886,5891 **** --- 6381,6387 ---- case dw_val_class_fde_ref: { char l1[20]; + ASM_GENERATE_INTERNAL_LABEL (l1, FDE_LABEL, a->dw_attr_val.v.val_fde_index * 2); dw2_asm_output_offset (DWARF_OFFSET_SIZE, l1, "%s", name); *************** output_die (die) *** 5901,5907 **** break; case dw_val_class_str: ! dw2_asm_output_nstring (AT_string (a), -1, "%s", name); break; default: --- 6397,6408 ---- break; case dw_val_class_str: ! if (AT_string_form (a) == DW_FORM_strp) ! dw2_asm_output_offset (DWARF_OFFSET_SIZE, ! a->dw_attr_val.v.val_str->label, ! "%s: \"%s\"", name, AT_string (a)); ! else ! dw2_asm_output_nstring (AT_string (a), -1, "%s", name); break; default: *************** output_die (die) *** 5912,5923 **** for (c = die->die_child; c != NULL; c = c->die_sib) output_die (c); if (die->die_child != NULL) ! { ! /* Add null byte to terminate sibling list. */ ! dw2_asm_output_data (1, 0, "end of children of DIE 0x%lx", ! die->die_offset); ! } } /* Output the compilation unit that appears at the beginning of the --- 6413,6422 ---- for (c = die->die_child; c != NULL; c = c->die_sib) output_die (c); + /* Add null byte to terminate sibling list. */ if (die->die_child != NULL) ! dw2_asm_output_data (1, 0, "end of children of DIE 0x%lx", ! die->die_offset); } /* Output the compilation unit that appears at the beginning of the *************** output_compilation_unit_header () *** 5928,5939 **** { dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset - DWARF_OFFSET_SIZE, "Length of Compilation Unit Info"); - dw2_asm_output_data (2, DWARF_VERSION, "DWARF version number"); - dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label, "Offset Into Abbrev. Section"); - dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)"); } --- 6427,6435 ---- *************** output_comp_unit (die) *** 5945,5968 **** { const char *secname; ! /* Even if there are no children of this DIE, we must output the ! information about the compilation unit. Otherwise, on an empty ! translation unit, we will generate a present, but empty, ! .debug_info section. IRIX 6.5 `nm' will then complain when ! examining the file. ! ! Mark all the DIEs in this CU so we know which get local refs. */ mark_dies (die); build_abbrev_table (die); ! /* Initialize the beginning DIE offset - and calculate sizes/offsets. */ next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE; calc_die_sizes (die); if (die->die_symbol) { char *tmp = (char *) alloca (strlen (die->die_symbol) + 24); sprintf (tmp, ".gnu.linkonce.wi.%s", die->die_symbol); secname = tmp; die->die_symbol = NULL; --- 6441,6463 ---- { const char *secname; ! /* Even if there are no children of this DIE, we must output the information ! about the compilation unit. Otherwise, on an empty translation unit, we ! will generate a present, but empty, .debug_info section. IRIX 6.5 `nm' ! will then complain when examining the file. First mark all the DIEs in ! this CU so we know which get local refs. */ mark_dies (die); build_abbrev_table (die); ! /* Initialize the beginning DIE offset - and calculate sizes/offsets. */ next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE; calc_die_sizes (die); if (die->die_symbol) { char *tmp = (char *) alloca (strlen (die->die_symbol) + 24); + sprintf (tmp, ".gnu.linkonce.wi.%s", die->die_symbol); secname = tmp; die->die_symbol = NULL; *************** output_comp_unit (die) *** 5971,5977 **** secname = (const char *) DEBUG_INFO_SECTION; /* Output debugging information. */ ! ASM_OUTPUT_SECTION (asm_out_file, secname); output_compilation_unit_header (); output_die (die); --- 6466,6472 ---- secname = (const char *) DEBUG_INFO_SECTION; /* Output debugging information. */ ! named_section_flags (secname, SECTION_DEBUG); output_compilation_unit_header (); output_die (die); *************** add_pubname (decl, die) *** 6008,6020 **** if (pubname_table_in_use == pubname_table_allocated) { pubname_table_allocated += PUBNAME_TABLE_INCREMENT; ! pubname_table = (pubname_ref) xrealloc ! (pubname_table, pubname_table_allocated * sizeof (pubname_entry)); } p = &pubname_table[pubname_table_in_use++]; p->die = die; - p->name = xstrdup (dwarf2_name (decl, 1)); } --- 6503,6516 ---- if (pubname_table_in_use == pubname_table_allocated) { pubname_table_allocated += PUBNAME_TABLE_INCREMENT; ! pubname_table ! = (pubname_ref) xrealloc (pubname_table, ! (pubname_table_allocated ! * sizeof (pubname_entry))); } p = &pubname_table[pubname_table_in_use++]; p->die = die; p->name = xstrdup (dwarf2_name (decl, 1)); } *************** add_pubname (decl, die) *** 6025,6047 **** static void output_pubnames () { ! register unsigned i; ! register unsigned long pubnames_length = size_of_pubnames (); dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length, "Length of Public Names Info"); - dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version"); - dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label, "Offset of Compilation Unit Info"); - dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset, "Compilation Unit Length"); ! for (i = 0; i < pubname_table_in_use; ++i) { ! register pubname_ref pub = &pubname_table[i]; /* We shouldn't see pubnames for DIEs outside of the main CU. */ if (pub->die->die_mark == 0) --- 6521,6540 ---- static void output_pubnames () { ! unsigned i; ! unsigned long pubnames_length = size_of_pubnames (); dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length, "Length of Public Names Info"); dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version"); dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label, "Offset of Compilation Unit Info"); dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset, "Compilation Unit Length"); ! for (i = 0; i < pubname_table_in_use; i++) { ! pubname_ref pub = &pubname_table[i]; /* We shouldn't see pubnames for DIEs outside of the main CU. */ if (pub->die->die_mark == 0) *************** add_arange (decl, die) *** 6069,6077 **** if (arange_table_in_use == arange_table_allocated) { arange_table_allocated += ARANGE_TABLE_INCREMENT; ! arange_table ! = (arange_ref) xrealloc (arange_table, ! arange_table_allocated * sizeof (dw_die_ref)); } arange_table[arange_table_in_use++] = die; --- 6562,6569 ---- if (arange_table_in_use == arange_table_allocated) { arange_table_allocated += ARANGE_TABLE_INCREMENT; ! arange_table = (dw_die_ref *) ! xrealloc (arange_table, arange_table_allocated * sizeof (dw_die_ref)); } arange_table[arange_table_in_use++] = die; *************** add_arange (decl, die) *** 6084,6102 **** static void output_aranges () { ! register unsigned i; ! register unsigned long aranges_length = size_of_aranges (); dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length, "Length of Address Ranges Info"); - dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version"); - dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label, "Offset of Compilation Unit Info"); - dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address"); - dw2_asm_output_data (1, 0, "Size of Segment Descriptor"); /* We need to align to twice the pointer size here. */ --- 6576,6590 ---- static void output_aranges () { ! unsigned i; ! unsigned long aranges_length = size_of_aranges (); dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length, "Length of Address Ranges Info"); dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version"); dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label, "Offset of Compilation Unit Info"); dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address"); dw2_asm_output_data (1, 0, "Size of Segment Descriptor"); /* We need to align to twice the pointer size here. */ *************** output_aranges () *** 6114,6120 **** dw2_asm_output_delta (DWARF2_ADDR_SIZE, text_end_label, text_section_label, "Length"); ! for (i = 0; i < arange_table_in_use; ++i) { dw_die_ref die = arange_table[i]; --- 6602,6608 ---- dw2_asm_output_delta (DWARF2_ADDR_SIZE, text_end_label, text_section_label, "Length"); ! for (i = 0; i < arange_table_in_use; i++) { dw_die_ref die = arange_table[i]; *************** output_aranges () *** 6125,6131 **** if (die->die_tag == DW_TAG_subprogram) { dw2_asm_output_addr (DWARF2_ADDR_SIZE, get_AT_low_pc (die), ! "Address"); dw2_asm_output_delta (DWARF2_ADDR_SIZE, get_AT_hi_pc (die), get_AT_low_pc (die), "Length"); } --- 6613,6619 ---- if (die->die_tag == DW_TAG_subprogram) { dw2_asm_output_addr (DWARF2_ADDR_SIZE, get_AT_low_pc (die), ! "Address"); dw2_asm_output_delta (DWARF2_ADDR_SIZE, get_AT_hi_pc (die), get_AT_low_pc (die), "Length"); } *************** output_aranges () *** 6134,6142 **** /* A static variable; extract the symbol from DW_AT_location. Note that this code isn't currently hit, as we only emit aranges for functions (jason 9/23/99). */ - dw_attr_ref a = get_AT (die, DW_AT_location); dw_loc_descr_ref loc; if (! a || AT_class (a) != dw_val_class_loc) abort (); --- 6622,6630 ---- /* A static variable; extract the symbol from DW_AT_location. Note that this code isn't currently hit, as we only emit aranges for functions (jason 9/23/99). */ dw_attr_ref a = get_AT (die, DW_AT_location); dw_loc_descr_ref loc; + if (! a || AT_class (a) != dw_val_class_loc) abort (); *************** output_aranges () *** 6157,6162 **** --- 6645,6725 ---- dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL); } + /* Add a new entry to .debug_ranges. Return the offset at which it + was placed. */ + + static unsigned int + add_ranges (block) + tree block; + { + unsigned int in_use = ranges_table_in_use; + + if (in_use == ranges_table_allocated) + { + ranges_table_allocated += RANGES_TABLE_INCREMENT; + ranges_table = (dw_ranges_ref) + xrealloc (ranges_table, (ranges_table_allocated + * sizeof (struct dw_ranges_struct))); + } + + ranges_table[in_use].block_num = (block ? BLOCK_NUMBER (block) : 0); + ranges_table_in_use = in_use + 1; + + return in_use * 2 * DWARF2_ADDR_SIZE; + } + + static void + output_ranges () + { + unsigned i; + static const char *const start_fmt = "Offset 0x%x"; + const char *fmt = start_fmt; + + for (i = 0; i < ranges_table_in_use; i++) + { + int block_num = ranges_table[i].block_num; + + if (block_num) + { + char blabel[MAX_ARTIFICIAL_LABEL_BYTES]; + char elabel[MAX_ARTIFICIAL_LABEL_BYTES]; + + ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num); + ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num); + + /* If all code is in the text section, then the compilation + unit base address defaults to DW_AT_low_pc, which is the + base of the text section. */ + if (separate_line_info_table_in_use == 0) + { + dw2_asm_output_delta (DWARF2_ADDR_SIZE, blabel, + text_section_label, + fmt, i * 2 * DWARF2_ADDR_SIZE); + dw2_asm_output_delta (DWARF2_ADDR_SIZE, elabel, + text_section_label, NULL); + } + + /* Otherwise, we add a DW_AT_entry_pc attribute to force the + compilation unit base address to zero, which allows us to + use absolute addresses, and not worry about whether the + target supports cross-section arithmetic. */ + else + { + dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel, + fmt, i * 2 * DWARF2_ADDR_SIZE); + dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, NULL); + } + + fmt = NULL; + } + else + { + dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL); + dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL); + fmt = start_fmt; + } + } + } /* Data structure containing information about input files. */ struct file_info *************** struct dir_info *** 6182,6187 **** --- 6745,6751 ---- /* Callback function for file_info comparison. We sort by looking at the directories in the path. */ + static int file_info_cmp (p1, p2) const void *p1; *************** file_info_cmp (p1, p2) *** 6192,6202 **** unsigned char *cp1; unsigned char *cp2; ! /* Take care of file names without directories. */ ! if (s1->path == s1->fname) ! return -1; ! else if (s2->path == s2->fname) ! return 1; cp1 = (unsigned char *) s1->path; cp2 = (unsigned char *) s2->path; --- 6756,6768 ---- unsigned char *cp1; unsigned char *cp2; ! /* Take care of file names without directories. We need to make sure that ! we return consistent values to qsort since some will get confused if ! we return the same value when identical operands are passed in opposite ! orders. So if neither has a directory, return 0 and otherwise return ! 1 or -1 depending on which one has the directory. */ ! if ((s1->path == s1->fname || s2->path == s2->fname)) ! return (s2->path == s2->fname) - (s1->path == s1->fname); cp1 = (unsigned char *) s1->path; cp2 = (unsigned char *) s2->path; *************** file_info_cmp (p1, p2) *** 6205,6221 **** { ++cp1; ++cp2; ! /* Reached the end of the first path? */ ! if (cp1 == (unsigned char *) s1->fname) ! /* It doesn't really matter in which order files from the ! same directory are sorted in. Therefore don't test for ! the second path reaching the end. */ ! return -1; ! else if (cp2 == (unsigned char *) s2->fname) ! return 1; /* Character of current path component the same? */ ! if (*cp1 != *cp2) return *cp1 - *cp2; } } --- 6771,6784 ---- { ++cp1; ++cp2; ! /* Reached the end of the first path? If so, handle like above. */ ! if ((cp1 == (unsigned char *) s1->fname) ! || (cp2 == (unsigned char *) s2->fname)) ! return ((cp2 == (unsigned char *) s2->fname) ! - (cp1 == (unsigned char *) s1->fname)); /* Character of current path component the same? */ ! else if (*cp1 != *cp2) return *cp1 - *cp2; } } *************** file_info_cmp (p1, p2) *** 6223,6228 **** --- 6786,6792 ---- /* Output the directory table and the file name table. We try to minimize the total amount of memory needed. A heuristic is used to avoid large slowdowns with many input files. */ + static void output_file_names () { *************** output_file_names () *** 6243,6249 **** * sizeof (struct dir_info)); /* Sort the file names. */ ! for (i = 1; i < (int) file_table.in_use; ++i) { char *f; --- 6807,6813 ---- * sizeof (struct dir_info)); /* Sort the file names. */ ! for (i = 1; i < (int) file_table.in_use; i++) { char *f; *************** output_file_names () *** 6261,6266 **** --- 6825,6831 ---- f = strrchr (f, '/'); files[i].fname = f == NULL ? files[i].path : f + 1; } + qsort (files + 1, file_table.in_use - 1, sizeof (files[0]), file_info_cmp); /* Find all the different directories used. */ *************** output_file_names () *** 6273,6279 **** files[1].dir_idx = 0; ndirs = 1; ! for (i = 2; i < (int) file_table.in_use; ++i) if (files[i].fname - files[i].path == dirs[ndirs - 1].length && memcmp (dirs[ndirs - 1].path, files[i].path, dirs[ndirs - 1].length) == 0) --- 6838,6844 ---- files[1].dir_idx = 0; ndirs = 1; ! for (i = 2; i < (int) file_table.in_use; i++) if (files[i].fname - files[i].path == dirs[ndirs - 1].length && memcmp (dirs[ndirs - 1].path, files[i].path, dirs[ndirs - 1].length) == 0) *************** output_file_names () *** 6296,6302 **** /* Search for a prefix. */ dirs[ndirs].prefix = -1; ! for (j = 0; j < ndirs; ++j) if (dirs[j].length < dirs[ndirs].length && dirs[j].length > 1 && (dirs[ndirs].prefix == -1 --- 6861,6867 ---- /* Search for a prefix. */ dirs[ndirs].prefix = -1; ! for (j = 0; j < ndirs; j++) if (dirs[j].length < dirs[ndirs].length && dirs[j].length > 1 && (dirs[ndirs].prefix == -1 *************** output_file_names () *** 6307,6338 **** ++ndirs; } ! /* Now to the actual work. We have to find a subset of the ! directories which allow expressing the file name using references ! to the directory table with the least amount of characters. We ! do not do an exhaustive search where we would have to check out ! every combination of every single possible prefix. Instead we ! use a heuristic which provides nearly optimal results in most ! cases and never is much off. */ saved = (int *) alloca (ndirs * sizeof (int)); savehere = (int *) alloca (ndirs * sizeof (int)); memset (saved, '\0', ndirs * sizeof (saved[0])); ! for (i = 0; i < ndirs; ++i) { int j; int total; ! /* We can always save some space for the current directory. But ! this does not mean it will be enough to justify adding the ! directory. */ savehere[i] = dirs[i].length; total = (savehere[i] - saved[i]) * dirs[i].count; ! for (j = i + 1; j < ndirs; ++j) { savehere[j] = 0; - if (saved[j] < dirs[i].length) { /* Determine whether the dirs[i] path is a prefix of the --- 6872,6900 ---- ++ndirs; } ! /* Now to the actual work. We have to find a subset of the directories which ! allow expressing the file name using references to the directory table ! with the least amount of characters. We do not do an exhaustive search ! where we would have to check out every combination of every single ! possible prefix. Instead we use a heuristic which provides nearly optimal ! results in most cases and never is much off. */ saved = (int *) alloca (ndirs * sizeof (int)); savehere = (int *) alloca (ndirs * sizeof (int)); memset (saved, '\0', ndirs * sizeof (saved[0])); ! for (i = 0; i < ndirs; i++) { int j; int total; ! /* We can always save some space for the current directory. But this ! does not mean it will be enough to justify adding the directory. */ savehere[i] = dirs[i].length; total = (savehere[i] - saved[i]) * dirs[i].count; ! for (j = i + 1; j < ndirs; j++) { savehere[j] = 0; if (saved[j] < dirs[i].length) { /* Determine whether the dirs[i] path is a prefix of the *************** output_file_names () *** 6359,6365 **** if (total > dirs[i].length + 1) { /* It's worthwhile adding. */ ! for (j = i; j < ndirs; ++j) if (savehere[j] > 0) { /* Remember how much we saved for this directory so far. */ --- 6921,6927 ---- if (total > dirs[i].length + 1) { /* It's worthwhile adding. */ ! for (j = i; j < ndirs; j++) if (savehere[j] > 0) { /* Remember how much we saved for this directory so far. */ *************** output_file_names () *** 6371,6403 **** } } ! /* We have to emit them in the order they appear in the file_table ! array since the index is used in the debug info generation. To ! do this efficiently we generate a back-mapping of the indices ! first. */ backmap = (int *) alloca (file_table.in_use * sizeof (int)); ! for (i = 1; i < (int) file_table.in_use; ++i) { backmap[files[i].file_idx] = i; /* Mark this directory as used. */ dirs[dirs[files[i].dir_idx].dir_idx].used = 1; } ! /* That was it. We are ready to emit the information. First the ! directory name table. Here we have to make sure that the first ! actually emitted directory name has the index one. Zero is ! reserved for the current working directory. Make sure we do not ! confuse these indices with the one for the constructed table ! (even though most of the time they are identical). */ idx = 1; idx_offset = dirs[0].length > 0 ? 1 : 0; ! for (i = 1 - idx_offset; i < ndirs; ++i) if (dirs[i].used != 0) { dirs[i].used = idx++; dw2_asm_output_nstring (dirs[i].path, dirs[i].length - 1, "Directory Entry: 0x%x", dirs[i].used); } dw2_asm_output_data (1, 0, "End directory table"); /* Correct the index for the current working directory entry if it --- 6933,6965 ---- } } ! /* We have to emit them in the order they appear in the file_table array ! since the index is used in the debug info generation. To do this ! efficiently we generate a back-mapping of the indices first. */ backmap = (int *) alloca (file_table.in_use * sizeof (int)); ! for (i = 1; i < (int) file_table.in_use; i++) { backmap[files[i].file_idx] = i; + /* Mark this directory as used. */ dirs[dirs[files[i].dir_idx].dir_idx].used = 1; } ! /* That was it. We are ready to emit the information. First emit the ! directory name table. We have to make sure the first actually emitted ! directory name has index one; zero is reserved for the current working ! directory. Make sure we do not confuse these indices with the one for the ! constructed table (even though most of the time they are identical). */ idx = 1; idx_offset = dirs[0].length > 0 ? 1 : 0; ! for (i = 1 - idx_offset; i < ndirs; i++) if (dirs[i].used != 0) { dirs[i].used = idx++; dw2_asm_output_nstring (dirs[i].path, dirs[i].length - 1, "Directory Entry: 0x%x", dirs[i].used); } + dw2_asm_output_data (1, 0, "End directory table"); /* Correct the index for the current working directory entry if it *************** output_file_names () *** 6406,6412 **** dirs[0].used = 0; /* Now write all the file names. */ ! for (i = 1; i < (int) file_table.in_use; ++i) { int file_idx = backmap[i]; int dir_idx = dirs[files[file_idx].dir_idx].dir_idx; --- 6968,6974 ---- dirs[0].used = 0; /* Now write all the file names. */ ! for (i = 1; i < (int) file_table.in_use; i++) { int file_idx = backmap[i]; int dir_idx = dirs[files[file_idx].dir_idx].dir_idx; *************** output_file_names () *** 6423,6428 **** --- 6985,6991 ---- /* File length in bytes. */ dw2_asm_output_data_uleb128 (0, NULL); } + dw2_asm_output_data (1, 0, "End file name table"); } *************** output_line_info () *** 6436,6449 **** char l1[20], l2[20], p1[20], p2[20]; char line_label[MAX_ARTIFICIAL_LABEL_BYTES]; char prev_line_label[MAX_ARTIFICIAL_LABEL_BYTES]; ! register unsigned opc; ! register unsigned n_op_args; ! register unsigned long lt_index; ! register unsigned long current_line; ! register long line_offset; ! register long line_delta; ! register unsigned long current_file; ! register unsigned long function; ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0); ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0); --- 6999,7012 ---- char l1[20], l2[20], p1[20], p2[20]; char line_label[MAX_ARTIFICIAL_LABEL_BYTES]; char prev_line_label[MAX_ARTIFICIAL_LABEL_BYTES]; ! unsigned opc; ! unsigned n_op_args; ! unsigned long lt_index; ! unsigned long current_line; ! long line_offset; ! long line_delta; ! unsigned long current_file; ! unsigned long function; ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0); ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0); *************** output_line_info () *** 6455,6480 **** ASM_OUTPUT_LABEL (asm_out_file, l1); dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version"); - dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length"); ASM_OUTPUT_LABEL (asm_out_file, p1); ! dw2_asm_output_data (1, DWARF_LINE_MIN_INSTR_LENGTH, "Minimum Instruction Length"); dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START, "Default is_stmt_start flag"); - dw2_asm_output_data (1, DWARF_LINE_BASE, "Line Base Value (Special Opcodes)"); - dw2_asm_output_data (1, DWARF_LINE_RANGE, "Line Range Value (Special Opcodes)"); - dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE, "Special Opcode Base"); ! for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; ++opc) { switch (opc) { --- 7018,7047 ---- ASM_OUTPUT_LABEL (asm_out_file, l1); dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version"); dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length"); ASM_OUTPUT_LABEL (asm_out_file, p1); ! /* Define the architecture-dependent minimum instruction length (in ! bytes). In this implementation of DWARF, this field is used for ! information purposes only. Since GCC generates assembly language, ! we have no a priori knowledge of how many instruction bytes are ! generated for each source line, and therefore can use only the ! DW_LNE_set_address and DW_LNS_fixed_advance_pc line information ! commands. Accordingly, we fix this as `1', which is "correct ! enough" for all architectures, and don't let the target override. */ ! dw2_asm_output_data (1, 1, "Minimum Instruction Length"); dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START, "Default is_stmt_start flag"); dw2_asm_output_data (1, DWARF_LINE_BASE, "Line Base Value (Special Opcodes)"); dw2_asm_output_data (1, DWARF_LINE_RANGE, "Line Range Value (Special Opcodes)"); dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE, "Special Opcode Base"); ! for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; opc++) { switch (opc) { *************** output_line_info () *** 6509,6515 **** strcpy (prev_line_label, text_section_label); for (lt_index = 1; lt_index < line_info_table_in_use; ++lt_index) { ! register dw_line_info_ref line_info = &line_info_table[lt_index]; #if 0 /* Disable this optimization for now; GDB wants to see two line notes --- 7076,7082 ---- strcpy (prev_line_label, text_section_label); for (lt_index = 1; lt_index < line_info_table_in_use; ++lt_index) { ! dw_line_info_ref line_info = &line_info_table[lt_index]; #if 0 /* Disable this optimization for now; GDB wants to see two line notes *************** output_line_info () *** 6527,6533 **** /* Emit debug info for the address of the current line. Unfortunately, we have little choice here currently, and must always ! use the most general form. Gcc does not know the address delta itself, so we can't use DW_LNS_advance_pc. Many ports do have length attributes which will give an upper bound on the address range. We could perhaps use length attributes to determine when it is safe to --- 7094,7100 ---- /* Emit debug info for the address of the current line. Unfortunately, we have little choice here currently, and must always ! use the most general form. GCC does not know the address delta itself, so we can't use DW_LNS_advance_pc. Many ports do have length attributes which will give an upper bound on the address range. We could perhaps use length attributes to determine when it is safe to *************** output_line_info () *** 6550,6555 **** --- 7117,7123 ---- dw2_asm_output_data (1, DW_LNE_set_address, NULL); dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL); } + strcpy (prev_line_label, line_label); /* Emit debug info for the source file of the current line, if *************** output_line_info () *** 6570,6582 **** line_delta = line_offset - DWARF_LINE_BASE; current_line = line_info->dw_line_num; if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1)) ! { ! /* This can handle deltas from -10 to 234, using the current ! definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE. This ! takes 1 byte. */ ! dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta, ! "line %lu", current_line); ! } else { /* This can handle any delta. This takes at least 4 bytes, --- 7138,7148 ---- line_delta = line_offset - DWARF_LINE_BASE; current_line = line_info->dw_line_num; if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1)) ! /* This can handle deltas from -10 to 234, using the current ! definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE. This ! takes 1 byte. */ ! dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta, ! "line %lu", current_line); else { /* This can handle any delta. This takes at least 4 bytes, *************** output_line_info () *** 6588,6597 **** } } else ! { ! /* We still need to start a new row, so output a copy insn. */ ! dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy"); ! } } /* Emit debug info for the address of the end of the function. */ --- 7154,7161 ---- } } else ! /* We still need to start a new row, so output a copy insn. */ ! dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy"); } /* Emit debug info for the address of the end of the function. */ *************** output_line_info () *** 6618,6624 **** current_line = 1; for (lt_index = 0; lt_index < separate_line_info_table_in_use;) { ! register dw_separate_line_info_ref line_info = &separate_line_info_table[lt_index]; #if 0 --- 7182,7188 ---- current_line = 1; for (lt_index = 0; lt_index < separate_line_info_table_in_use;) { ! dw_separate_line_info_ref line_info = &separate_line_info_table[lt_index]; #if 0 *************** output_line_info () *** 6661,6666 **** --- 7225,7231 ---- dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL); } } + strcpy (prev_line_label, line_label); /* Emit debug info for the source file of the current line, if *************** output_line_info () *** 6697,6703 **** #if 0 cont: #endif ! ++lt_index; /* If we're done with a function, end its sequence. */ if (lt_index == separate_line_info_table_in_use --- 7262,7269 ---- #if 0 cont: #endif ! ! lt_index++; /* If we're done with a function, end its sequence. */ if (lt_index == separate_line_info_table_in_use *************** output_line_info () *** 6741,6755 **** static dw_die_ref base_type_die (type) ! register tree type; { ! register dw_die_ref base_type_result; ! register const char *type_name; ! register enum dwarf_type encoding; ! register tree name = TYPE_NAME (type); ! if (TREE_CODE (type) == ERROR_MARK ! || TREE_CODE (type) == VOID_TYPE) return 0; if (name) --- 7307,7320 ---- static dw_die_ref base_type_die (type) ! tree type; { ! dw_die_ref base_type_result; ! const char *type_name; ! enum dwarf_type encoding; ! tree name = TYPE_NAME (type); ! if (TREE_CODE (type) == ERROR_MARK || TREE_CODE (type) == VOID_TYPE) return 0; if (name) *************** base_type_die (type) *** 6809,6818 **** break; default: ! abort (); /* No other TREE_CODEs are Dwarf fundamental types. */ } ! base_type_result = new_die (DW_TAG_base_type, comp_unit_die); if (demangle_name_func) type_name = (*demangle_name_func) (type_name); --- 7374,7384 ---- break; default: ! /* No other TREE_CODEs are Dwarf fundamental types. */ ! abort (); } ! base_type_result = new_die (DW_TAG_base_type, comp_unit_die, type); if (demangle_name_func) type_name = (*demangle_name_func) (type_name); *************** base_type_die (type) *** 6835,6841 **** static tree root_type (type) ! register tree type; { if (TREE_CODE (type) == ERROR_MARK) return error_mark_node; --- 7401,7407 ---- static tree root_type (type) ! tree type; { if (TREE_CODE (type) == ERROR_MARK) return error_mark_node; *************** root_type (type) *** 6859,6865 **** static inline int is_base_type (type) ! register tree type; { switch (TREE_CODE (type)) { --- 7425,7431 ---- static inline int is_base_type (type) ! tree type; { switch (TREE_CODE (type)) { *************** is_base_type (type) *** 6900,6914 **** static dw_die_ref modified_type_die (type, is_const_type, is_volatile_type, context_die) ! register tree type; ! register int is_const_type; ! register int is_volatile_type; ! register dw_die_ref context_die; { ! register enum tree_code code = TREE_CODE (type); ! register dw_die_ref mod_type_die = NULL; ! register dw_die_ref sub_die = NULL; ! register tree item_type = NULL; if (code != ERROR_MARK) { --- 7466,7480 ---- static dw_die_ref modified_type_die (type, is_const_type, is_volatile_type, context_die) ! tree type; ! int is_const_type; ! int is_volatile_type; ! dw_die_ref context_die; { ! enum tree_code code = TREE_CODE (type); ! dw_die_ref mod_type_die = NULL; ! dw_die_ref sub_die = NULL; ! tree item_type = NULL; if (code != ERROR_MARK) { *************** modified_type_die (type, is_const_type, *** 6921,6926 **** --- 7487,7493 ---- ((is_const_type ? TYPE_QUAL_CONST : 0) | (is_volatile_type ? TYPE_QUAL_VOLATILE : 0))); + /* If we do, then we can just use its DIE, if it exists. */ if (qualified_type) { *************** modified_type_die (type, is_const_type, *** 6936,6948 **** { tree type_name = TYPE_NAME (qualified_type); tree dtype = TREE_TYPE (type_name); if (qualified_type == dtype) { /* For a named type, use the typedef. */ gen_type_die (qualified_type, context_die); mod_type_die = lookup_type_die (qualified_type); } - else if (is_const_type < TYPE_READONLY (dtype) || is_volatile_type < TYPE_VOLATILE (dtype)) /* cv-unqualified version of named type. Just use the unnamed --- 7503,7515 ---- { tree type_name = TYPE_NAME (qualified_type); tree dtype = TREE_TYPE (type_name); + if (qualified_type == dtype) { /* For a named type, use the typedef. */ gen_type_die (qualified_type, context_die); mod_type_die = lookup_type_die (qualified_type); } else if (is_const_type < TYPE_READONLY (dtype) || is_volatile_type < TYPE_VOLATILE (dtype)) /* cv-unqualified version of named type. Just use the unnamed *************** modified_type_die (type, is_const_type, *** 6951,6956 **** --- 7518,7524 ---- = modified_type_die (DECL_ORIGINAL_TYPE (type_name), is_const_type, is_volatile_type, context_die); + /* Else cv-qualified version of named type; fall through. */ } *************** modified_type_die (type, is_const_type, *** 6959,6975 **** ; else if (is_const_type) { ! mod_type_die = new_die (DW_TAG_const_type, comp_unit_die); sub_die = modified_type_die (type, 0, is_volatile_type, context_die); } else if (is_volatile_type) { ! mod_type_die = new_die (DW_TAG_volatile_type, comp_unit_die); sub_die = modified_type_die (type, 0, 0, context_die); } else if (code == POINTER_TYPE) { ! mod_type_die = new_die (DW_TAG_pointer_type, comp_unit_die); add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE); #if 0 add_AT_unsigned (mod_type_die, DW_AT_address_class, 0); --- 7527,7543 ---- ; else if (is_const_type) { ! mod_type_die = new_die (DW_TAG_const_type, comp_unit_die, type); sub_die = modified_type_die (type, 0, is_volatile_type, context_die); } else if (is_volatile_type) { ! mod_type_die = new_die (DW_TAG_volatile_type, comp_unit_die, type); sub_die = modified_type_die (type, 0, 0, context_die); } else if (code == POINTER_TYPE) { ! mod_type_die = new_die (DW_TAG_pointer_type, comp_unit_die, type); add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE); #if 0 add_AT_unsigned (mod_type_die, DW_AT_address_class, 0); *************** modified_type_die (type, is_const_type, *** 6978,6984 **** } else if (code == REFERENCE_TYPE) { ! mod_type_die = new_die (DW_TAG_reference_type, comp_unit_die); add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE); #if 0 add_AT_unsigned (mod_type_die, DW_AT_address_class, 0); --- 7546,7552 ---- } else if (code == REFERENCE_TYPE) { ! mod_type_die = new_die (DW_TAG_reference_type, comp_unit_die, type); add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE); #if 0 add_AT_unsigned (mod_type_die, DW_AT_address_class, 0); *************** modified_type_die (type, is_const_type, *** 7025,7035 **** } /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is ! an enumerated type. */ static inline int type_is_enum (type) ! register tree type; { return TREE_CODE (type) == ENUMERAL_TYPE; } --- 7593,7603 ---- } /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is ! an enumerated type. */ static inline int type_is_enum (type) ! tree type; { return TREE_CODE (type) == ENUMERAL_TYPE; } *************** type_is_enum (type) *** 7038,7066 **** static unsigned int reg_number (rtl) ! register rtx rtl; { ! register unsigned regno = REGNO (rtl); if (regno >= FIRST_PSEUDO_REGISTER) ! { ! warning ("internal regno botch: regno = %d\n", regno); ! regno = 0; ! } ! regno = DBX_REGISTER_NUMBER (regno); ! return regno; } ! /* Return a location descriptor that designates a machine register. */ static dw_loc_descr_ref reg_loc_descriptor (rtl) ! register rtx rtl; { ! register dw_loc_descr_ref loc_result = NULL; ! register unsigned reg = reg_number (rtl); if (reg <= 31) loc_result = new_loc_descr (DW_OP_reg0 + reg, 0, 0); else --- 7606,7635 ---- static unsigned int reg_number (rtl) ! rtx rtl; { ! unsigned regno = REGNO (rtl); if (regno >= FIRST_PSEUDO_REGISTER) ! abort (); ! return DBX_REGISTER_NUMBER (regno); } ! /* Return a location descriptor that designates a machine register or ! zero if there is no such. */ static dw_loc_descr_ref reg_loc_descriptor (rtl) ! rtx rtl; { ! dw_loc_descr_ref loc_result = NULL; ! unsigned reg; + if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER) + return 0; + + reg = reg_number (rtl); if (reg <= 31) loc_result = new_loc_descr (DW_OP_reg0 + reg, 0, 0); else *************** based_loc_descr (reg, offset) *** 7116,7128 **** unsigned reg; long int offset; { ! register dw_loc_descr_ref loc_result; /* For the "frame base", we use the frame pointer or stack pointer registers, since the RTL for local variables is relative to one of them. */ ! register unsigned fp_reg = DBX_REGISTER_NUMBER (frame_pointer_needed ! ? HARD_FRAME_POINTER_REGNUM ! : STACK_POINTER_REGNUM); if (reg == fp_reg) loc_result = new_loc_descr (DW_OP_fbreg, offset, 0); --- 7685,7697 ---- unsigned reg; long int offset; { ! dw_loc_descr_ref loc_result; /* For the "frame base", we use the frame pointer or stack pointer registers, since the RTL for local variables is relative to one of them. */ ! unsigned fp_reg = DBX_REGISTER_NUMBER (frame_pointer_needed ! ? HARD_FRAME_POINTER_REGNUM ! : STACK_POINTER_REGNUM); if (reg == fp_reg) loc_result = new_loc_descr (DW_OP_fbreg, offset, 0); *************** based_loc_descr (reg, offset) *** 7138,7148 **** static inline int is_based_loc (rtl) ! register rtx rtl; { ! return (GET_CODE (rtl) == PLUS ! && ((GET_CODE (XEXP (rtl, 0)) == REG ! && GET_CODE (XEXP (rtl, 1)) == CONST_INT))); } /* The following routine converts the RTL for a variable or parameter --- 7707,7718 ---- static inline int is_based_loc (rtl) ! rtx rtl; { ! return (GET_CODE (rtl) == PLUS ! && ((GET_CODE (XEXP (rtl, 0)) == REG ! && REGNO (XEXP (rtl, 0)) < FIRST_PSEUDO_REGISTER ! && GET_CODE (XEXP (rtl, 1)) == CONST_INT))); } /* The following routine converts the RTL for a variable or parameter *************** is_based_loc (rtl) *** 7156,7169 **** it into Dwarf postfix code as it goes. MODE is the mode of the memory reference, needed to handle some ! autoincrement addressing modes. */ static dw_loc_descr_ref mem_loc_descriptor (rtl, mode) ! register rtx rtl; enum machine_mode mode; { dw_loc_descr_ref mem_loc_result = NULL; /* Note that for a dynamically sized array, the location we will generate a description of here will be the lowest numbered location which is actually within the array. That's *not* necessarily the same as the --- 7726,7742 ---- it into Dwarf postfix code as it goes. MODE is the mode of the memory reference, needed to handle some ! autoincrement addressing modes. ! ! Return 0 if we can't represent the location. */ static dw_loc_descr_ref mem_loc_descriptor (rtl, mode) ! rtx rtl; enum machine_mode mode; { dw_loc_descr_ref mem_loc_result = NULL; + /* Note that for a dynamically sized array, the location we will generate a description of here will be the lowest numbered location which is actually within the array. That's *not* necessarily the same as the *************** mem_loc_descriptor (rtl, mode) *** 7181,7187 **** /* POST_INC and POST_DEC can be handled just like a SUBREG. So we just fall into the SUBREG code. */ ! /* Fall through. */ case SUBREG: /* The case of a subreg may arise when we have a local (register) --- 7754,7760 ---- /* POST_INC and POST_DEC can be handled just like a SUBREG. So we just fall into the SUBREG code. */ ! /* ... fall through ... */ case SUBREG: /* The case of a subreg may arise when we have a local (register) *************** mem_loc_descriptor (rtl, mode) *** 7191,7197 **** contains the given subreg. */ rtl = SUBREG_REG (rtl); ! /* Fall through. */ case REG: /* Whenever a register number forms a part of the description of the --- 7764,7770 ---- contains the given subreg. */ rtl = SUBREG_REG (rtl); ! /* ... fall through ... */ case REG: /* Whenever a register number forms a part of the description of the *************** mem_loc_descriptor (rtl, mode) *** 7207,7218 **** the object in question was allocated to a register (rather than in memory) so DWARF consumers need to be aware of the subtle distinction between OP_REG and OP_BASEREG. */ ! mem_loc_result = based_loc_descr (reg_number (rtl), 0); break; case MEM: mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl)); ! add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0)); break; case LABEL_REF: --- 7780,7793 ---- the object in question was allocated to a register (rather than in memory) so DWARF consumers need to be aware of the subtle distinction between OP_REG and OP_BASEREG. */ ! if (REGNO (rtl) < FIRST_PSEUDO_REGISTER) ! mem_loc_result = based_loc_descr (reg_number (rtl), 0); break; case MEM: mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl)); ! if (mem_loc_result != 0) ! add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0)); break; case LABEL_REF: *************** mem_loc_descriptor (rtl, mode) *** 7221,7241 **** pool. */ case CONST: case SYMBOL_REF: ! /* Alternatively, the symbol in the constant pool can be referenced by a different symbol. */ ! if (GET_CODE (rtl) == SYMBOL_REF ! && CONSTANT_POOL_ADDRESS_P (rtl)) { ! rtx tmp = get_pool_constant (rtl); ! /* Doesn't work for floating point constants. */ ! if (! (GET_CODE (tmp) == CONST_DOUBLE && GET_MODE (tmp) != VOIDmode)) ! rtl = tmp; ! } mem_loc_result = new_loc_descr (DW_OP_addr, 0, 0); mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr; ! mem_loc_result->dw_loc_oprnd1.v.val_addr = save_rtx (rtl); break; case PRE_MODIFY: --- 7796,7829 ---- pool. */ case CONST: case SYMBOL_REF: ! /* Alternatively, the symbol in the constant pool might be referenced by a different symbol. */ ! if (GET_CODE (rtl) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (rtl)) { ! bool marked; ! rtx tmp = get_pool_constant_mark (rtl, &marked); + if (GET_CODE (tmp) == SYMBOL_REF) + { + rtl = tmp; + if (CONSTANT_POOL_ADDRESS_P (tmp)) + get_pool_constant_mark (tmp, &marked); + else + marked = true; + } + + /* If all references to this pool constant were optimized away, + it was not output and thus we can't represent it. + FIXME: might try to use DW_OP_const_value here, though + DW_OP_piece complicates it. */ + if (!marked) + return 0; + } mem_loc_result = new_loc_descr (DW_OP_addr, 0, 0); mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr; ! mem_loc_result->dw_loc_oprnd1.v.val_addr = rtl; ! VARRAY_PUSH_RTX (used_rtx_varray, rtl); break; case PRE_MODIFY: *************** mem_loc_descriptor (rtl, mode) *** 7253,7259 **** ? GET_MODE_UNIT_SIZE (mode) : -GET_MODE_UNIT_SIZE (mode))); ! /* Fall through. */ case PLUS: plus: --- 7841,7847 ---- ? GET_MODE_UNIT_SIZE (mode) : -GET_MODE_UNIT_SIZE (mode))); ! /* ... fall through ... */ case PLUS: plus: *************** mem_loc_descriptor (rtl, mode) *** 7263,7276 **** else { mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode); if (GET_CODE (XEXP (rtl, 1)) == CONST_INT && INTVAL (XEXP (rtl, 1)) >= 0) ! { ! add_loc_descr (&mem_loc_result, ! new_loc_descr (DW_OP_plus_uconst, ! INTVAL (XEXP (rtl, 1)), 0)); ! } else { add_loc_descr (&mem_loc_result, --- 7851,7864 ---- else { mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode); + if (mem_loc_result == 0) + break; if (GET_CODE (XEXP (rtl, 1)) == CONST_INT && INTVAL (XEXP (rtl, 1)) >= 0) ! add_loc_descr (&mem_loc_result, ! new_loc_descr (DW_OP_plus_uconst, ! INTVAL (XEXP (rtl, 1)), 0)); else { add_loc_descr (&mem_loc_result, *************** mem_loc_descriptor (rtl, mode) *** 7282,7300 **** break; case MULT: ! /* If a pseudo-reg is optimized away, it is possible for it to ! be replaced with a MEM containing a multiply. */ ! add_loc_descr (&mem_loc_result, ! mem_loc_descriptor (XEXP (rtl, 0), mode)); ! add_loc_descr (&mem_loc_result, ! mem_loc_descriptor (XEXP (rtl, 1), mode)); ! add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0)); ! break; case CONST_INT: mem_loc_result = int_loc_descriptor (INTVAL (rtl)); break; default: abort (); } --- 7870,7902 ---- break; case MULT: ! { ! /* If a pseudo-reg is optimized away, it is possible for it to ! be replaced with a MEM containing a multiply. */ ! dw_loc_descr_ref op0 = mem_loc_descriptor (XEXP (rtl, 0), mode); ! dw_loc_descr_ref op1 = mem_loc_descriptor (XEXP (rtl, 1), mode); ! ! if (op0 == 0 || op1 == 0) ! break; ! ! mem_loc_result = op0; ! add_loc_descr (&mem_loc_result, op1); ! add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0)); ! break; ! } case CONST_INT: mem_loc_result = int_loc_descriptor (INTVAL (rtl)); break; + case ADDRESSOF: + /* If this is a MEM, return its address. Otherwise, we can't + represent this. */ + if (GET_CODE (XEXP (rtl, 0)) == MEM) + return mem_loc_descriptor (XEXP (XEXP (rtl, 0), 0), mode); + else + return 0; + default: abort (); } *************** mem_loc_descriptor (rtl, mode) *** 7307,7327 **** static dw_loc_descr_ref concat_loc_descriptor (x0, x1) ! register rtx x0, x1; { dw_loc_descr_ref cc_loc_result = NULL; ! if (!is_pseudo_reg (x0) ! && (GET_CODE (x0) != MEM || !is_pseudo_reg (XEXP (x0, 0)))) ! add_loc_descr (&cc_loc_result, loc_descriptor (x0)); add_loc_descr (&cc_loc_result, ! new_loc_descr (DW_OP_piece, GET_MODE_SIZE (GET_MODE (x0)), 0)); ! if (!is_pseudo_reg (x1) ! && (GET_CODE (x1) != MEM || !is_pseudo_reg (XEXP (x1, 0)))) ! add_loc_descr (&cc_loc_result, loc_descriptor (x1)); add_loc_descr (&cc_loc_result, ! new_loc_descr (DW_OP_piece, GET_MODE_SIZE (GET_MODE (x1)), 0)); return cc_loc_result; } --- 7909,7932 ---- static dw_loc_descr_ref concat_loc_descriptor (x0, x1) ! rtx x0, x1; { dw_loc_descr_ref cc_loc_result = NULL; + dw_loc_descr_ref x0_ref = loc_descriptor (x0); + dw_loc_descr_ref x1_ref = loc_descriptor (x1); ! if (x0_ref == 0 || x1_ref == 0) ! return 0; ! ! cc_loc_result = x0_ref; add_loc_descr (&cc_loc_result, ! new_loc_descr (DW_OP_piece, ! GET_MODE_SIZE (GET_MODE (x0)), 0)); ! add_loc_descr (&cc_loc_result, x1_ref); add_loc_descr (&cc_loc_result, ! new_loc_descr (DW_OP_piece, ! GET_MODE_SIZE (GET_MODE (x1)), 0)); return cc_loc_result; } *************** concat_loc_descriptor (x0, x1) *** 7330,7342 **** which is either allocated in a register or in a memory location. For a register, we just generate an OP_REG and the register number. For a memory location we provide a Dwarf postfix expression describing how to ! generate the (dynamic) address of the object onto the address stack. */ static dw_loc_descr_ref loc_descriptor (rtl) ! register rtx rtl; { dw_loc_descr_ref loc_result = NULL; switch (GET_CODE (rtl)) { case SUBREG: --- 7935,7950 ---- which is either allocated in a register or in a memory location. For a register, we just generate an OP_REG and the register number. For a memory location we provide a Dwarf postfix expression describing how to ! generate the (dynamic) address of the object onto the address stack. ! ! If we don't know how to describe it, return 0. */ static dw_loc_descr_ref loc_descriptor (rtl) ! rtx rtl; { dw_loc_descr_ref loc_result = NULL; + switch (GET_CODE (rtl)) { case SUBREG: *************** loc_descriptor (rtl) *** 7347,7353 **** contains the given subreg. */ rtl = SUBREG_REG (rtl); ! /* Fall through. */ case REG: loc_result = reg_loc_descriptor (rtl); --- 7955,7961 ---- contains the given subreg. */ rtl = SUBREG_REG (rtl); ! /* ... fall through ... */ case REG: loc_result = reg_loc_descriptor (rtl); *************** loc_descriptor (rtl) *** 7368,7383 **** return loc_result; } ! /* Similar, but generate the descriptor from trees instead of rtl. ! This comes up particularly with variable length arrays. */ static dw_loc_descr_ref loc_descriptor_from_tree (loc, addressp) tree loc; int addressp; { ! dw_loc_descr_ref ret = NULL; ! int indirect_size = 0; int unsignedp = TREE_UNSIGNED (TREE_TYPE (loc)); enum dwarf_location_atom op; --- 7976,7993 ---- return loc_result; } ! /* Similar, but generate the descriptor from trees instead of rtl. This comes ! up particularly with variable length arrays. If ADDRESSP is nonzero, we are ! looking for an address. Otherwise, we return a value. If we can't make a ! descriptor, return 0. */ static dw_loc_descr_ref loc_descriptor_from_tree (loc, addressp) tree loc; int addressp; { ! dw_loc_descr_ref ret, ret1; ! int indirect_p = 0; int unsignedp = TREE_UNSIGNED (TREE_TYPE (loc)); enum dwarf_location_atom op; *************** loc_descriptor_from_tree (loc, addressp) *** 7388,7424 **** switch (TREE_CODE (loc)) { case ERROR_MARK: ! break; case WITH_RECORD_EXPR: /* This case involves extracting fields from an object to determine the position of other fields. We don't try to encode this here. The only user of this is Ada, which encodes the needed information using the names of types. */ ! return ret; case VAR_DECL: case PARM_DECL: { rtx rtl = rtl_for_decl_location (loc); - enum machine_mode mode = DECL_MODE (loc); if (rtl == NULL_RTX) ! break; else if (CONSTANT_P (rtl)) { ret = new_loc_descr (DW_OP_addr, 0, 0); ret->dw_loc_oprnd1.val_class = dw_val_class_addr; ret->dw_loc_oprnd1.v.val_addr = rtl; ! indirect_size = GET_MODE_SIZE (mode); } else { if (GET_CODE (rtl) == MEM) { ! indirect_size = GET_MODE_SIZE (mode); rtl = XEXP (rtl, 0); } ret = mem_loc_descriptor (rtl, mode); } } --- 7998,8055 ---- switch (TREE_CODE (loc)) { case ERROR_MARK: ! return 0; case WITH_RECORD_EXPR: + case PLACEHOLDER_EXPR: /* This case involves extracting fields from an object to determine the position of other fields. We don't try to encode this here. The only user of this is Ada, which encodes the needed information using the names of types. */ ! return 0; ! ! case CALL_EXPR: ! return 0; ! ! case ADDR_EXPR: ! /* We can support this only if we can look through conversions and ! find an INDIRECT_EXPR. */ ! for (loc = TREE_OPERAND (loc, 0); ! TREE_CODE (loc) == CONVERT_EXPR || TREE_CODE (loc) == NOP_EXPR ! || TREE_CODE (loc) == NON_LVALUE_EXPR ! || TREE_CODE (loc) == VIEW_CONVERT_EXPR ! || TREE_CODE (loc) == SAVE_EXPR; ! loc = TREE_OPERAND (loc, 0)) ! ; ! ! return (TREE_CODE (loc) == INDIRECT_REF ! ? loc_descriptor_from_tree (TREE_OPERAND (loc, 0), addressp) ! : 0); case VAR_DECL: case PARM_DECL: { rtx rtl = rtl_for_decl_location (loc); if (rtl == NULL_RTX) ! return 0; else if (CONSTANT_P (rtl)) { ret = new_loc_descr (DW_OP_addr, 0, 0); ret->dw_loc_oprnd1.val_class = dw_val_class_addr; ret->dw_loc_oprnd1.v.val_addr = rtl; ! indirect_p = 1; } else { + enum machine_mode mode = GET_MODE (rtl); + if (GET_CODE (rtl) == MEM) { ! indirect_p = 1; rtl = XEXP (rtl, 0); } + ret = mem_loc_descriptor (rtl, mode); } } *************** loc_descriptor_from_tree (loc, addressp) *** 7426,7453 **** case INDIRECT_REF: ret = loc_descriptor_from_tree (TREE_OPERAND (loc, 0), 0); ! indirect_size = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (loc))); break; case NOP_EXPR: case CONVERT_EXPR: case NON_LVALUE_EXPR: case SAVE_EXPR: return loc_descriptor_from_tree (TREE_OPERAND (loc, 0), addressp); case COMPONENT_REF: case BIT_FIELD_REF: case ARRAY_REF: { tree obj, offset; HOST_WIDE_INT bitsize, bitpos, bytepos; enum machine_mode mode; int volatilep; - unsigned int alignment; obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode, ! &unsignedp, &volatilep, &alignment); ret = loc_descriptor_from_tree (obj, 1); if (offset != NULL_TREE) { --- 8057,8095 ---- case INDIRECT_REF: ret = loc_descriptor_from_tree (TREE_OPERAND (loc, 0), 0); ! indirect_p = 1; break; + case COMPOUND_EXPR: + return loc_descriptor_from_tree (TREE_OPERAND (loc, 1), addressp); + case NOP_EXPR: case CONVERT_EXPR: case NON_LVALUE_EXPR: + case VIEW_CONVERT_EXPR: case SAVE_EXPR: return loc_descriptor_from_tree (TREE_OPERAND (loc, 0), addressp); case COMPONENT_REF: case BIT_FIELD_REF: case ARRAY_REF: + case ARRAY_RANGE_REF: { tree obj, offset; HOST_WIDE_INT bitsize, bitpos, bytepos; enum machine_mode mode; int volatilep; obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode, ! &unsignedp, &volatilep); ! ! if (obj == loc) ! return 0; ! ret = loc_descriptor_from_tree (obj, 1); + if (ret == 0 + || bitpos % BITS_PER_UNIT != 0 || bitsize % BITS_PER_UNIT != 0) + return 0; if (offset != NULL_TREE) { *************** loc_descriptor_from_tree (loc, addressp) *** 7456,7479 **** add_loc_descr (&ret, new_loc_descr (DW_OP_plus, 0, 0)); } ! if (addressp) ! { ! /* We cannot address anything not on a unit boundary. */ ! if (bitpos % BITS_PER_UNIT != 0) ! abort (); ! } ! else ! { ! if (bitpos % BITS_PER_UNIT != 0 ! || bitsize % BITS_PER_UNIT != 0) ! { ! /* ??? We could handle this by loading and shifting etc. ! Wait until someone needs it before expending the effort. */ ! abort (); ! } ! ! indirect_size = bitsize / BITS_PER_UNIT; ! } bytepos = bitpos / BITS_PER_UNIT; if (bytepos > 0) --- 8098,8105 ---- add_loc_descr (&ret, new_loc_descr (DW_OP_plus, 0, 0)); } ! if (!addressp) ! indirect_p = 1; bytepos = bitpos / BITS_PER_UNIT; if (bytepos > 0) *************** loc_descriptor_from_tree (loc, addressp) *** 7489,7528 **** --- 8115,8173 ---- case INTEGER_CST: if (host_integerp (loc, 0)) ret = int_loc_descriptor (tree_low_cst (loc, 0)); + else + return 0; break; + case TRUTH_AND_EXPR: + case TRUTH_ANDIF_EXPR: case BIT_AND_EXPR: op = DW_OP_and; goto do_binop; + + case TRUTH_XOR_EXPR: case BIT_XOR_EXPR: op = DW_OP_xor; goto do_binop; + + case TRUTH_OR_EXPR: + case TRUTH_ORIF_EXPR: case BIT_IOR_EXPR: op = DW_OP_or; goto do_binop; + case TRUNC_DIV_EXPR: op = DW_OP_div; goto do_binop; + case MINUS_EXPR: op = DW_OP_minus; goto do_binop; + case TRUNC_MOD_EXPR: op = DW_OP_mod; goto do_binop; + case MULT_EXPR: op = DW_OP_mul; goto do_binop; + case LSHIFT_EXPR: op = DW_OP_shl; goto do_binop; + case RSHIFT_EXPR: op = (unsignedp ? DW_OP_shr : DW_OP_shra); goto do_binop; + case PLUS_EXPR: if (TREE_CODE (TREE_OPERAND (loc, 1)) == INTEGER_CST && host_integerp (TREE_OPERAND (loc, 1), 0)) { ret = loc_descriptor_from_tree (TREE_OPERAND (loc, 0), 0); + if (ret == 0) + return 0; + add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst, tree_low_cst (TREE_OPERAND (loc, 1), *************** loc_descriptor_from_tree (loc, addressp) *** 7530,7582 **** 0)); break; } op = DW_OP_plus; goto do_binop; case LE_EXPR: if (TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0)))) ! break; op = DW_OP_le; goto do_binop; case GE_EXPR: if (TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0)))) ! break; op = DW_OP_ge; goto do_binop; case LT_EXPR: if (TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0)))) ! break; op = DW_OP_lt; goto do_binop; case GT_EXPR: if (TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0)))) ! break; op = DW_OP_gt; goto do_binop; case EQ_EXPR: op = DW_OP_eq; goto do_binop; case NE_EXPR: op = DW_OP_ne; goto do_binop; do_binop: ret = loc_descriptor_from_tree (TREE_OPERAND (loc, 0), 0); ! add_loc_descr (&ret, loc_descriptor_from_tree (TREE_OPERAND (loc, 1), 0)); add_loc_descr (&ret, new_loc_descr (op, 0, 0)); break; case BIT_NOT_EXPR: op = DW_OP_not; goto do_unop; case ABS_EXPR: op = DW_OP_abs; goto do_unop; case NEGATE_EXPR: op = DW_OP_neg; goto do_unop; do_unop: ret = loc_descriptor_from_tree (TREE_OPERAND (loc, 0), 0); add_loc_descr (&ret, new_loc_descr (op, 0, 0)); break; --- 8175,8248 ---- 0)); break; } + op = DW_OP_plus; goto do_binop; + case LE_EXPR: if (TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0)))) ! return 0; ! op = DW_OP_le; goto do_binop; + case GE_EXPR: if (TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0)))) ! return 0; ! op = DW_OP_ge; goto do_binop; + case LT_EXPR: if (TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0)))) ! return 0; ! op = DW_OP_lt; goto do_binop; + case GT_EXPR: if (TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0)))) ! return 0; ! op = DW_OP_gt; goto do_binop; + case EQ_EXPR: op = DW_OP_eq; goto do_binop; + case NE_EXPR: op = DW_OP_ne; goto do_binop; do_binop: ret = loc_descriptor_from_tree (TREE_OPERAND (loc, 0), 0); ! ret1 = loc_descriptor_from_tree (TREE_OPERAND (loc, 1), 0); ! if (ret == 0 || ret1 == 0) ! return 0; ! ! add_loc_descr (&ret, ret1); add_loc_descr (&ret, new_loc_descr (op, 0, 0)); break; + case TRUTH_NOT_EXPR: case BIT_NOT_EXPR: op = DW_OP_not; goto do_unop; + case ABS_EXPR: op = DW_OP_abs; goto do_unop; + case NEGATE_EXPR: op = DW_OP_neg; goto do_unop; do_unop: ret = loc_descriptor_from_tree (TREE_OPERAND (loc, 0), 0); + if (ret == 0) + return 0; + add_loc_descr (&ret, new_loc_descr (op, 0, 0)); break; *************** loc_descriptor_from_tree (loc, addressp) *** 7585,7609 **** build (LT_EXPR, integer_type_node, TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)), TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0)); ! /* FALLTHRU */ case COND_EXPR: { dw_loc_descr_ref bra_node, jump_node, tmp; ret = loc_descriptor_from_tree (TREE_OPERAND (loc, 0), 0); bra_node = new_loc_descr (DW_OP_bra, 0, 0); add_loc_descr (&ret, bra_node); ! tmp = loc_descriptor_from_tree (TREE_OPERAND (loc, 2), 0); ! add_loc_descr (&ret, tmp); jump_node = new_loc_descr (DW_OP_skip, 0, 0); add_loc_descr (&ret, jump_node); ! tmp = loc_descriptor_from_tree (TREE_OPERAND (loc, 1), 0); ! add_loc_descr (&ret, tmp); bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc; ! bra_node->dw_loc_oprnd1.v.val_loc = tmp; /* ??? Need a node to point the skip at. Use a nop. */ tmp = new_loc_descr (DW_OP_nop, 0, 0); --- 8251,8281 ---- build (LT_EXPR, integer_type_node, TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)), TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0)); ! ! /* ... fall through ... */ case COND_EXPR: { + dw_loc_descr_ref lhs + = loc_descriptor_from_tree (TREE_OPERAND (loc, 1), 0); + dw_loc_descr_ref rhs + = loc_descriptor_from_tree (TREE_OPERAND (loc, 2), 0); dw_loc_descr_ref bra_node, jump_node, tmp; ret = loc_descriptor_from_tree (TREE_OPERAND (loc, 0), 0); + if (ret == 0 || lhs == 0 || rhs == 0) + return 0; + bra_node = new_loc_descr (DW_OP_bra, 0, 0); add_loc_descr (&ret, bra_node); ! add_loc_descr (&ret, rhs); jump_node = new_loc_descr (DW_OP_skip, 0, 0); add_loc_descr (&ret, jump_node); ! add_loc_descr (&ret, lhs); bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc; ! bra_node->dw_loc_oprnd1.v.val_loc = lhs; /* ??? Need a node to point the skip at. Use a nop. */ tmp = new_loc_descr (DW_OP_nop, 0, 0); *************** loc_descriptor_from_tree (loc, addressp) *** 7617,7636 **** abort (); } ! /* If we can't fill the request for an address, die. */ ! if (addressp && indirect_size == 0) ! abort (); /* If we've got an address and don't want one, dereference. */ ! if (!addressp && indirect_size > 0) { ! if (indirect_size > DWARF2_ADDR_SIZE) ! abort (); ! if (indirect_size == DWARF2_ADDR_SIZE) op = DW_OP_deref; else op = DW_OP_deref_size; ! add_loc_descr (&ret, new_loc_descr (op, indirect_size, 0)); } return ret; --- 8289,8311 ---- abort (); } ! /* Show if we can't fill the request for an address. */ ! if (addressp && indirect_p == 0) ! return 0; /* If we've got an address and don't want one, dereference. */ ! if (!addressp && indirect_p > 0) { ! HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc)); ! ! if (size > DWARF2_ADDR_SIZE || size == -1) ! return 0; ! else if (size == DWARF2_ADDR_SIZE) op = DW_OP_deref; else op = DW_OP_deref_size; ! ! add_loc_descr (&ret, new_loc_descr (op, size, 0)); } return ret; *************** ceiling (value, boundary) *** 7654,7662 **** static inline tree field_type (decl) ! register tree decl; { ! register tree type; if (TREE_CODE (decl) == ERROR_MARK) return integer_type_node; --- 8329,8337 ---- static inline tree field_type (decl) ! tree decl; { ! tree type; if (TREE_CODE (decl) == ERROR_MARK) return integer_type_node; *************** field_type (decl) *** 7674,7689 **** static inline unsigned simple_type_align_in_bits (type) ! register tree type; { return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD; } static inline unsigned ! simple_decl_align_in_bits (decl) ! register tree decl; { ! return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD; } /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE --- 8349,8382 ---- static inline unsigned simple_type_align_in_bits (type) ! tree type; { return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD; } static inline unsigned ! simple_field_decl_align_in_bits (field) ! tree field; { ! unsigned align; ! ! if (TREE_CODE (field) == ERROR_MARK) ! return BITS_PER_WORD; ! ! align = DECL_ALIGN (field); ! ! #ifdef BIGGEST_FIELD_ALIGNMENT ! /* Some targets (i.e. i386) limit union field alignment ! to a lower boundary than alignment of variables unless ! it was overridden by attribute aligned. */ ! if (! DECL_USER_ALIGN (field)) ! align = MIN (align, (unsigned) BIGGEST_FIELD_ALIGNMENT); ! #endif ! ! #ifdef ADJUST_FIELD_ALIGN ! align = ADJUST_FIELD_ALIGN (field, align); ! #endif ! return align; } /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE *************** simple_decl_align_in_bits (decl) *** 7694,7730 **** static inline unsigned HOST_WIDE_INT simple_type_size_in_bits (type) ! register tree type; { - tree type_size_tree; if (TREE_CODE (type) == ERROR_MARK) return BITS_PER_WORD; ! type_size_tree = TYPE_SIZE (type); ! ! if (type_size_tree == NULL_TREE) return 0; ! if (! host_integerp (type_size_tree, 1)) return TYPE_ALIGN (type); - return tree_low_cst (type_size_tree, 1); } ! /* Given a pointer to what is assumed to be a FIELD_DECL node, compute and ! return the byte offset of the lowest addressed byte of the "containing ! object" for the given FIELD_DECL, or return 0 if we are unable to ! determine what that offset is, either because the argument turns out to ! be a pointer to an ERROR_MARK node, or because the offset is actually ! variable. (We can't handle the latter case just yet). */ static HOST_WIDE_INT field_byte_offset (decl) ! register tree decl; { unsigned int type_align_in_bits; unsigned int decl_align_in_bits; unsigned HOST_WIDE_INT type_size_in_bits; HOST_WIDE_INT object_offset_in_bits; - HOST_WIDE_INT object_offset_in_bytes; tree type; tree field_size_tree; HOST_WIDE_INT bitpos_int; --- 8387,8420 ---- static inline unsigned HOST_WIDE_INT simple_type_size_in_bits (type) ! tree type; { if (TREE_CODE (type) == ERROR_MARK) return BITS_PER_WORD; ! else if (TYPE_SIZE (type) == NULL_TREE) return 0; ! else if (host_integerp (TYPE_SIZE (type), 1)) ! return tree_low_cst (TYPE_SIZE (type), 1); ! else return TYPE_ALIGN (type); } ! /* Given a pointer to a FIELD_DECL, compute and return the byte offset of the ! lowest addressed byte of the "containing object" for the given FIELD_DECL, ! or return 0 if we are unable to determine what that offset is, either ! because the argument turns out to be a pointer to an ERROR_MARK node, or ! because the offset is actually variable. (We can't handle the latter case ! just yet). */ static HOST_WIDE_INT field_byte_offset (decl) ! tree decl; { unsigned int type_align_in_bits; unsigned int decl_align_in_bits; unsigned HOST_WIDE_INT type_size_in_bits; HOST_WIDE_INT object_offset_in_bits; tree type; tree field_size_tree; HOST_WIDE_INT bitpos_int; *************** field_byte_offset (decl) *** 7733,7740 **** if (TREE_CODE (decl) == ERROR_MARK) return 0; ! ! if (TREE_CODE (decl) != FIELD_DECL) abort (); type = field_type (decl); --- 8423,8429 ---- if (TREE_CODE (decl) == ERROR_MARK) return 0; ! else if (TREE_CODE (decl) != FIELD_DECL) abort (); type = field_type (decl); *************** field_byte_offset (decl) *** 7761,7806 **** type_size_in_bits = simple_type_size_in_bits (type); type_align_in_bits = simple_type_align_in_bits (type); ! decl_align_in_bits = simple_decl_align_in_bits (decl); ! /* Note that the GCC front-end doesn't make any attempt to keep track of ! the starting bit offset (relative to the start of the containing ! structure type) of the hypothetical "containing object" for a bit- ! field. Thus, when computing the byte offset value for the start of the ! "containing object" of a bit-field, we must deduce this information on ! our own. This can be rather tricky to do in some cases. For example, ! handling the following structure type definition when compiling for an ! i386/i486 target (which only aligns long long's to 32-bit boundaries) ! can be very tricky: struct S { int field1; long long field2:31; }; ! Fortunately, there is a simple rule-of-thumb which can be ! used in such cases. When compiling for an i386/i486, GCC will allocate ! 8 bytes for the structure shown above. It decides to do this based upon ! one simple rule for bit-field allocation. Quite simply, GCC allocates ! each "containing object" for each bit-field at the first (i.e. lowest ! addressed) legitimate alignment boundary (based upon the required ! minimum alignment for the declared type of the field) which it can ! possibly use, subject to the condition that there is still enough ! available space remaining in the containing object (when allocated at ! the selected point) to fully accommodate all of the bits of the ! bit-field itself. This simple rule makes it obvious why GCC allocates ! 8 bytes for each object of the structure type shown above. When looking ! for a place to allocate the "containing object" for `field2', the ! compiler simply tries to allocate a 64-bit "containing object" at each ! successive 32-bit boundary (starting at zero) until it finds a place to ! allocate that 64- bit field such that at least 31 contiguous (and ! previously unallocated) bits remain within that selected 64 bit field. ! (As it turns out, for the example above, the compiler finds that it is ! OK to allocate the "containing object" 64-bit field at bit-offset zero ! within the structure type.) Here we attempt to work backwards from the ! limited set of facts we're given, and we try to deduce from those facts, ! where GCC must have believed that the containing object started (within ! the structure type). The value we deduce is then used (by the callers of ! this routine) to generate DW_AT_location and DW_AT_bit_offset attributes ! for fields (both bit-fields and, in the case of DW_AT_location, regular ! fields as well). */ /* Figure out the bit-distance from the start of the structure to the "deepest" bit of the bit-field. */ --- 8450,8495 ---- type_size_in_bits = simple_type_size_in_bits (type); type_align_in_bits = simple_type_align_in_bits (type); ! decl_align_in_bits = simple_field_decl_align_in_bits (decl); ! /* The GCC front-end doesn't make any attempt to keep track of the starting ! bit offset (relative to the start of the containing structure type) of the ! hypothetical "containing object" for a bit-field. Thus, when computing ! the byte offset value for the start of the "containing object" of a ! bit-field, we must deduce this information on our own. This can be rather ! tricky to do in some cases. For example, handling the following structure ! type definition when compiling for an i386/i486 target (which only aligns ! long long's to 32-bit boundaries) can be very tricky: struct S { int field1; long long field2:31; }; ! Fortunately, there is a simple rule-of-thumb which can be used in such ! cases. When compiling for an i386/i486, GCC will allocate 8 bytes for the ! structure shown above. It decides to do this based upon one simple rule ! for bit-field allocation. GCC allocates each "containing object" for each ! bit-field at the first (i.e. lowest addressed) legitimate alignment ! boundary (based upon the required minimum alignment for the declared type ! of the field) which it can possibly use, subject to the condition that ! there is still enough available space remaining in the containing object ! (when allocated at the selected point) to fully accommodate all of the ! bits of the bit-field itself. ! ! This simple rule makes it obvious why GCC allocates 8 bytes for each ! object of the structure type shown above. When looking for a place to ! allocate the "containing object" for `field2', the compiler simply tries ! to allocate a 64-bit "containing object" at each successive 32-bit ! boundary (starting at zero) until it finds a place to allocate that 64- ! bit field such that at least 31 contiguous (and previously unallocated) ! bits remain within that selected 64 bit field. (As it turns out, for the ! example above, the compiler finds it is OK to allocate the "containing ! object" 64-bit field at bit-offset zero within the structure type.) ! ! Here we attempt to work backwards from the limited set of facts we're ! given, and we try to deduce from those facts, where GCC must have believed ! that the containing object started (within the structure type). The value ! we deduce is then used (by the callers of this routine) to generate ! DW_AT_location and DW_AT_bit_offset attributes for fields (both bit-fields ! and, in the case of DW_AT_location, regular fields as well). */ /* Figure out the bit-distance from the start of the structure to the "deepest" bit of the bit-field. */ *************** field_byte_offset (decl) *** 7826,7834 **** object_offset_in_bits *= decl_align_in_bits; } ! object_offset_in_bytes = object_offset_in_bits / BITS_PER_UNIT; ! ! return object_offset_in_bytes; } /* The following routines define various Dwarf attributes and any data --- 8515,8521 ---- object_offset_in_bits *= decl_align_in_bits; } ! return object_offset_in_bits / BITS_PER_UNIT; } /* The following routines define various Dwarf attributes and any data *************** static void *** 7844,7901 **** add_AT_location_description (die, attr_kind, rtl) dw_die_ref die; enum dwarf_attribute attr_kind; ! register rtx rtl; { ! /* Handle a special case. If we are about to output a location descriptor ! for a variable or parameter which has been optimized out of existence, ! don't do that. A variable which has been optimized out ! of existence will have a DECL_RTL value which denotes a pseudo-reg. ! Currently, in some rare cases, variables can have DECL_RTL values which ! look like (MEM (REG pseudo-reg#)). These cases are due to bugs ! elsewhere in the compiler. We treat such cases as if the variable(s) in ! question had been optimized out of existence. */ ! ! if (is_pseudo_reg (rtl) ! || (GET_CODE (rtl) == MEM ! && is_pseudo_reg (XEXP (rtl, 0))) ! /* This can happen for a PARM_DECL with a DECL_INCOMING_RTL which ! references the internal argument pointer (a pseudo) in a function ! where all references to the internal argument pointer were ! eliminated via the optimizers. */ ! || (GET_CODE (rtl) == MEM ! && GET_CODE (XEXP (rtl, 0)) == PLUS ! && is_pseudo_reg (XEXP (XEXP (rtl, 0), 0))) ! || (GET_CODE (rtl) == CONCAT ! && is_pseudo_reg (XEXP (rtl, 0)) ! && is_pseudo_reg (XEXP (rtl, 1)))) ! return; ! add_AT_loc (die, attr_kind, loc_descriptor (rtl)); } ! /* Attach the specialized form of location attribute used for data ! members of struct and union types. In the special case of a ! FIELD_DECL node which represents a bit-field, the "offset" part ! of this special location descriptor must indicate the distance ! in bytes from the lowest-addressed byte of the containing struct ! or union type to the lowest-addressed byte of the "containing ! object" for the bit-field. (See the `field_byte_offset' function ! above).. For any given bit-field, the "containing object" is a ! hypothetical object (of some integral or enum type) within which ! the given bit-field lives. The type of this hypothetical ! "containing object" is always the same as the declared type of ! the individual bit-field itself (for GCC anyway... the DWARF ! spec doesn't actually mandate this). Note that it is the size ! (in bytes) of the hypothetical "containing object" which will ! be given in the DW_AT_byte_size attribute for this bit-field. ! (See the `byte_size_attribute' function below.) It is also used ! when calculating the value of the DW_AT_bit_offset attribute. ! (See the `bit_offset_attribute' function below). */ static void add_data_member_location_attribute (die, decl) ! register dw_die_ref die; ! register tree decl; { long offset; dw_loc_descr_ref loc_descr = 0; --- 8531,8567 ---- add_AT_location_description (die, attr_kind, rtl) dw_die_ref die; enum dwarf_attribute attr_kind; ! rtx rtl; { ! dw_loc_descr_ref descr = loc_descriptor (rtl); ! if (descr != 0) ! add_AT_loc (die, attr_kind, descr); } ! /* Attach the specialized form of location attribute used for data members of ! struct and union types. In the special case of a FIELD_DECL node which ! represents a bit-field, the "offset" part of this special location ! descriptor must indicate the distance in bytes from the lowest-addressed ! byte of the containing struct or union type to the lowest-addressed byte of ! the "containing object" for the bit-field. (See the `field_byte_offset' ! function above). ! ! For any given bit-field, the "containing object" is a hypothetical object ! (of some integral or enum type) within which the given bit-field lives. The ! type of this hypothetical "containing object" is always the same as the ! declared type of the individual bit-field itself (for GCC anyway... the ! DWARF spec doesn't actually mandate this). Note that it is the size (in ! bytes) of the hypothetical "containing object" which will be given in the ! DW_AT_byte_size attribute for this bit-field. (See the ! `byte_size_attribute' function below.) It is also used when calculating the ! value of the DW_AT_bit_offset attribute. (See the `bit_offset_attribute' ! function below.) */ static void add_data_member_location_attribute (die, decl) ! dw_die_ref die; ! tree decl; { long offset; dw_loc_descr_ref loc_descr = 0; *************** add_data_member_location_attribute (die, *** 7903,7909 **** if (TREE_CODE (decl) == TREE_VEC) { /* We're working on the TAG_inheritance for a base class. */ - if (TREE_VIA_VIRTUAL (decl) && is_cxx ()) { /* For C++ virtual bases we can't just use BINFO_OFFSET, as they --- 8569,8574 ---- *************** add_data_member_location_attribute (die, *** 7916,7938 **** --- 8581,8609 ---- This is specific to the V3 ABI, of course. */ dw_loc_descr_ref tmp; + /* Make a copy of the object address. */ tmp = new_loc_descr (DW_OP_dup, 0, 0); add_loc_descr (&loc_descr, tmp); + /* Extract the vtable address. */ tmp = new_loc_descr (DW_OP_deref, 0, 0); add_loc_descr (&loc_descr, tmp); + /* Calculate the address of the offset. */ offset = tree_low_cst (BINFO_VPTR_FIELD (decl), 0); if (offset >= 0) abort (); + tmp = int_loc_descriptor (-offset); add_loc_descr (&loc_descr, tmp); tmp = new_loc_descr (DW_OP_minus, 0, 0); add_loc_descr (&loc_descr, tmp); + /* Extract the offset. */ tmp = new_loc_descr (DW_OP_deref, 0, 0); add_loc_descr (&loc_descr, tmp); + /* Add it to the object address. */ tmp = new_loc_descr (DW_OP_plus, 0, 0); add_loc_descr (&loc_descr, tmp); *************** add_data_member_location_attribute (die, *** 7947,7959 **** { enum dwarf_location_atom op; ! /* The DWARF2 standard says that we should assume that the structure address ! is already on the stack, so we can specify a structure field address ! by using DW_OP_plus_uconst. */ #ifdef MIPS_DEBUGGING_INFO ! /* ??? The SGI dwarf reader does not handle the DW_OP_plus_uconst operator ! correctly. It works only if we leave the offset on the stack. */ op = DW_OP_constu; #else op = DW_OP_plus_uconst; --- 8618,8631 ---- { enum dwarf_location_atom op; ! /* The DWARF2 standard says that we should assume that the structure ! address is already on the stack, so we can specify a structure field ! address by using DW_OP_plus_uconst. */ #ifdef MIPS_DEBUGGING_INFO ! /* ??? The SGI dwarf reader does not handle the DW_OP_plus_uconst ! operator correctly. It works only if we leave the offset on the ! stack. */ op = DW_OP_constu; #else op = DW_OP_plus_uconst; *************** add_data_member_location_attribute (die, *** 7961,7966 **** --- 8633,8639 ---- loc_descr = new_loc_descr (op, offset, 0); } + add_AT_loc (die, DW_AT_data_member_location, loc_descr); } *************** add_data_member_location_attribute (die, *** 7972,7979 **** static void add_const_value_attribute (die, rtl) ! register dw_die_ref die; ! register rtx rtl; { switch (GET_CODE (rtl)) { --- 8645,8652 ---- static void add_const_value_attribute (die, rtl) ! dw_die_ref die; ! rtx rtl; { switch (GET_CODE (rtl)) { *************** add_const_value_attribute (die, rtl) *** 7987,8003 **** HOST_WIDE_INT val = INTVAL (rtl); /* ??? We really should be using HOST_WIDE_INT throughout. */ ! if (val < 0) ! { ! if ((long) val != val) ! abort (); ! add_AT_int (die, DW_AT_const_value, (long) val); ! } else { ! if ((unsigned long) val != (unsigned HOST_WIDE_INT) val) ! abort (); ! add_AT_int (die, DW_AT_const_value, (unsigned long) val); } } break; --- 8660,8677 ---- HOST_WIDE_INT val = INTVAL (rtl); /* ??? We really should be using HOST_WIDE_INT throughout. */ ! if (val < 0 && (long) val == val) ! add_AT_int (die, DW_AT_const_value, (long) val); ! else if ((unsigned long) val == (unsigned HOST_WIDE_INT) val) ! add_AT_unsigned (die, DW_AT_const_value, (unsigned long) val); else { ! #if HOST_BITS_PER_LONG * 2 == HOST_BITS_PER_WIDE_INT ! add_AT_long_long (die, DW_AT_const_value, ! val >> HOST_BITS_PER_LONG, val); ! #else ! abort (); ! #endif } } break; *************** add_const_value_attribute (die, rtl) *** 8008,8018 **** constant requires more than one word in order to be adequately represented. We output CONST_DOUBLEs as blocks. */ { ! register enum machine_mode mode = GET_MODE (rtl); if (GET_MODE_CLASS (mode) == MODE_FLOAT) { ! register unsigned length = GET_MODE_SIZE (mode) / 4; long *array = (long *) xmalloc (sizeof (long) * length); REAL_VALUE_TYPE rv; --- 8682,8692 ---- constant requires more than one word in order to be adequately represented. We output CONST_DOUBLEs as blocks. */ { ! enum machine_mode mode = GET_MODE (rtl); if (GET_MODE_CLASS (mode) == MODE_FLOAT) { ! unsigned length = GET_MODE_SIZE (mode) / 4; long *array = (long *) xmalloc (sizeof (long) * length); REAL_VALUE_TYPE rv; *************** add_const_value_attribute (die, rtl) *** 8043,8048 **** --- 8717,8723 ---- /* ??? We really should be using HOST_WIDE_INT throughout. */ if (HOST_BITS_PER_LONG != HOST_BITS_PER_WIDE_INT) abort (); + add_AT_long_long (die, DW_AT_const_value, CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl)); } *************** add_const_value_attribute (die, rtl) *** 8056,8062 **** case SYMBOL_REF: case LABEL_REF: case CONST: ! add_AT_addr (die, DW_AT_const_value, save_rtx (rtl)); break; case PLUS: --- 8731,8738 ---- case SYMBOL_REF: case LABEL_REF: case CONST: ! add_AT_addr (die, DW_AT_const_value, rtl); ! VARRAY_PUSH_RTX (used_rtx_varray, rtl); break; case PLUS: *************** add_const_value_attribute (die, rtl) *** 8080,8100 **** } - /* Returns RTL for DECL indicating the location the debugger should - use to find the value of DECL at runtime. Returns NULL_RTX if - there is no such location, or if a satisfactory location could not - be determined. */ - static rtx rtl_for_decl_location (decl) tree decl; { ! register rtx rtl; ! ! /* This function should not be called with an abstract declaration, ! since such things have no location. */ ! if (DECL_ABSTRACT (decl)) ! abort (); /* Here we have to decide where we are going to say the parameter "lives" (as far as the debugger is concerned). We only have a couple of --- 8756,8766 ---- } static rtx rtl_for_decl_location (decl) tree decl; { ! rtx rtl; /* Here we have to decide where we are going to say the parameter "lives" (as far as the debugger is concerned). We only have a couple of *************** rtl_for_decl_location (decl) *** 8145,8180 **** the correct data, so we allow for such exceptional cases below. Note that our goal here is to describe the place where the given formal ! parameter lives during most of the function's activation (i.e. between ! the end of the prologue and the start of the epilogue). We'll do that ! as best as we can. Note however that if the given formal parameter is ! modified sometime during the execution of the function, then a stack ! backtrace (at debug-time) will show the function as having been ! called with the *new* value rather than the value which was ! originally passed in. This happens rarely enough that it is not ! a major problem, but it *is* a problem, and I'd like to fix it. ! A future version of dwarf2out.c may generate two additional ! attributes for any given DW_TAG_formal_parameter DIE which will ! describe the "passed type" and the "passed location" for the ! given formal parameter in addition to the attributes we now ! generate to indicate the "declared type" and the "active ! location" for each parameter. This additional set of attributes ! could be used by debuggers for stack backtraces. Separately, note ! that sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be ! NULL also. This happens (for example) for inlined-instances of ! inline function formal parameters which are never referenced. ! This really shouldn't be happening. All PARM_DECL nodes should ! get valid non-NULL DECL_INCOMING_RTL values, but integrate.c ! doesn't currently generate these values for inlined instances of ! inline function parameters, so when we see such cases, we are ! just out-of-luck for the time being (until integrate.c gets fixed). */ /* Use DECL_RTL as the "location" unless we find something better. */ rtl = DECL_RTL_IF_SET (decl); ! if (TREE_CODE (decl) == PARM_DECL) { if (rtl == NULL_RTX || is_pseudo_reg (rtl)) { --- 8811,8860 ---- the correct data, so we allow for such exceptional cases below. Note that our goal here is to describe the place where the given formal ! parameter lives during most of the function's activation (i.e. between the ! end of the prologue and the start of the epilogue). We'll do that as best ! as we can. Note however that if the given formal parameter is modified ! sometime during the execution of the function, then a stack backtrace (at ! debug-time) will show the function as having been called with the *new* ! value rather than the value which was originally passed in. This happens ! rarely enough that it is not a major problem, but it *is* a problem, and ! I'd like to fix it. ! A future version of dwarf2out.c may generate two additional attributes for ! any given DW_TAG_formal_parameter DIE which will describe the "passed ! type" and the "passed location" for the given formal parameter in addition ! to the attributes we now generate to indicate the "declared type" and the ! "active location" for each parameter. This additional set of attributes ! could be used by debuggers for stack backtraces. Separately, note that ! sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also. ! This happens (for example) for inlined-instances of inline function formal ! parameters which are never referenced. This really shouldn't be ! happening. All PARM_DECL nodes should get valid non-NULL ! DECL_INCOMING_RTL values, but integrate.c doesn't currently generate these ! values for inlined instances of inline function parameters, so when we see ! such cases, we are just out-of-luck for the time being (until integrate.c gets fixed). */ /* Use DECL_RTL as the "location" unless we find something better. */ rtl = DECL_RTL_IF_SET (decl); ! /* When generating abstract instances, ignore everything except ! constants and symbols living in memory. */ ! if (! reload_completed) ! { ! if (rtl ! && (CONSTANT_P (rtl) ! || (GET_CODE (rtl) == MEM ! && CONSTANT_P (XEXP (rtl, 0))))) ! { ! #ifdef ASM_SIMPLIFY_DWARF_ADDR ! rtl = ASM_SIMPLIFY_DWARF_ADDR (rtl); ! #endif ! return rtl; ! } ! rtl = NULL_RTX; ! } ! else if (TREE_CODE (decl) == PARM_DECL) { if (rtl == NULL_RTX || is_pseudo_reg (rtl)) { *************** rtl_for_decl_location (decl) *** 8183,8189 **** /* This decl represents a formal parameter which was optimized out. Note that DECL_INCOMING_RTL may be NULL in here, but we handle ! all* cases where (rtl == NULL_RTX) just below. */ if (declared_type == passed_type) rtl = DECL_INCOMING_RTL (decl); else if (! BYTES_BIG_ENDIAN --- 8863,8869 ---- /* This decl represents a formal parameter which was optimized out. Note that DECL_INCOMING_RTL may be NULL in here, but we handle ! all cases where (rtl == NULL_RTX) just below. */ if (declared_type == passed_type) rtl = DECL_INCOMING_RTL (decl); else if (! BYTES_BIG_ENDIAN *************** rtl_for_decl_location (decl) *** 8221,8226 **** --- 8901,8907 ---- { int offset = (UNITS_PER_WORD - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))); + rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)), plus_constant (XEXP (rtl, 0), offset)); } *************** rtl_for_decl_location (decl) *** 8235,8240 **** --- 8916,8967 ---- #endif } + /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant, + and will have been substituted directly into all expressions that use it. + C does not have such a concept, but C++ and other languages do. */ + else if (TREE_CODE (decl) == VAR_DECL && DECL_INITIAL (decl)) + { + /* If a variable is initialized with a string constant without embedded + zeros, build CONST_STRING. */ + if (TREE_CODE (DECL_INITIAL (decl)) == STRING_CST + && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE) + { + tree arrtype = TREE_TYPE (decl); + tree enttype = TREE_TYPE (arrtype); + tree domain = TYPE_DOMAIN (arrtype); + tree init = DECL_INITIAL (decl); + enum machine_mode mode = TYPE_MODE (enttype); + + if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1 + && domain + && integer_zerop (TYPE_MIN_VALUE (domain)) + && compare_tree_int (TYPE_MAX_VALUE (domain), + TREE_STRING_LENGTH (init) - 1) == 0 + && ((size_t) TREE_STRING_LENGTH (init) + == strlen (TREE_STRING_POINTER (init)) + 1)) + rtl = gen_rtx_CONST_STRING (VOIDmode, TREE_STRING_POINTER (init)); + } + + #if 0 + /* We mustn't actually emit anything here, as we might not get a + chance to emit any symbols we refer to. For the release, don't + try to get this right. */ + if (rtl == NULL) + { + rtl = expand_expr (DECL_INITIAL (decl), NULL_RTX, VOIDmode, + EXPAND_INITIALIZER); + /* If expand_expr returned a MEM, we cannot use it, since + it won't be output, leading to unresolved symbol. */ + if (rtl && GET_CODE (rtl) == MEM) + rtl = NULL; + } + #endif + } + + #ifdef ASM_SIMPLIFY_DWARF_ADDR + if (rtl) + rtl = ASM_SIMPLIFY_DWARF_ADDR (rtl); + #endif return rtl; } *************** rtl_for_decl_location (decl) *** 8251,8271 **** static void add_location_or_const_value_attribute (die, decl) ! register dw_die_ref die; ! register tree decl; { ! register rtx rtl; if (TREE_CODE (decl) == ERROR_MARK) return; ! ! if (TREE_CODE (decl) != VAR_DECL && TREE_CODE (decl) != PARM_DECL) abort (); rtl = rtl_for_decl_location (decl); if (rtl == NULL_RTX) return; switch (GET_CODE (rtl)) { case ADDRESSOF: --- 8978,9002 ---- static void add_location_or_const_value_attribute (die, decl) ! dw_die_ref die; ! tree decl; { ! rtx rtl; if (TREE_CODE (decl) == ERROR_MARK) return; ! else if (TREE_CODE (decl) != VAR_DECL && TREE_CODE (decl) != PARM_DECL) abort (); rtl = rtl_for_decl_location (decl); if (rtl == NULL_RTX) return; + /* If we don't look past the constant pool, we risk emitting a + reference to a constant pool entry that isn't referenced from + code, and thus is not emitted. */ + rtl = avoid_constant_pool_reference (rtl); + switch (GET_CODE (rtl)) { case ADDRESSOF: *************** tree_add_const_value_attribute (var_die, *** 8319,8325 **** case INTEGER_TYPE: if (host_integerp (init, 0)) add_AT_unsigned (var_die, DW_AT_const_value, ! TREE_INT_CST_LOW (init)); else add_AT_long_long (var_die, DW_AT_const_value, TREE_INT_CST_HIGH (init), --- 9050,9056 ---- case INTEGER_TYPE: if (host_integerp (init, 0)) add_AT_unsigned (var_die, DW_AT_const_value, ! tree_low_cst (init, 0)); else add_AT_long_long (var_die, DW_AT_const_value, TREE_INT_CST_HIGH (init), *************** tree_add_const_value_attribute (var_die, *** 8335,8342 **** static inline void add_name_attribute (die, name_string) ! register dw_die_ref die; ! register const char *name_string; { if (name_string != NULL && *name_string != 0) { --- 9066,9073 ---- static inline void add_name_attribute (die, name_string) ! dw_die_ref die; ! const char *name_string; { if (name_string != NULL && *name_string != 0) { *************** add_name_attribute (die, name_string) *** 8352,8373 **** static void add_bound_info (subrange_die, bound_attr, bound) ! register dw_die_ref subrange_die; ! register enum dwarf_attribute bound_attr; ! register tree bound; { - /* If this is an Ada unconstrained array type, then don't emit any debug - info because the array bounds are unknown. They are parameterized when - the type is instantiated. */ - if (contains_placeholder_p (bound)) - return; - switch (TREE_CODE (bound)) { case ERROR_MARK: return; ! /* All fixed-bounds are represented by INTEGER_CST nodes. */ case INTEGER_CST: if (! host_integerp (bound, 0) || (bound_attr == DW_AT_lower_bound --- 9083,9098 ---- static void add_bound_info (subrange_die, bound_attr, bound) ! dw_die_ref subrange_die; ! enum dwarf_attribute bound_attr; ! tree bound; { switch (TREE_CODE (bound)) { case ERROR_MARK: return; ! /* All fixed-bounds are represented by INTEGER_CST nodes. */ case INTEGER_CST: if (! host_integerp (bound, 0) || (bound_attr == DW_AT_lower_bound *************** add_bound_info (subrange_die, bound_attr *** 8382,8387 **** --- 9107,9113 ---- case CONVERT_EXPR: case NOP_EXPR: case NON_LVALUE_EXPR: + case VIEW_CONVERT_EXPR: add_bound_info (subrange_die, bound_attr, TREE_OPERAND (bound, 0)); break; *************** add_bound_info (subrange_die, bound_attr *** 8400,8406 **** they have to deal with empty upper bounds location descriptions anyway in order to be able to deal with incomplete array types. Of course an intelligent debugger (GDB?) should be able to ! comprehend that a missing upper bound specification in a array type used for a storage class `auto' local array variable indicates that the upper bound is both unknown (at compile- time) and unknowable (at run-time) due to optimization. --- 9126,9132 ---- they have to deal with empty upper bounds location descriptions anyway in order to be able to deal with incomplete array types. Of course an intelligent debugger (GDB?) should be able to ! comprehend that a missing upper bound specification in an array type used for a storage class `auto' local array variable indicates that the upper bound is both unknown (at compile- time) and unknowable (at run-time) due to optimization. *************** add_bound_info (subrange_die, bound_attr *** 8411,8423 **** if (SAVE_EXPR_RTL (bound) && (! optimize || GET_CODE (SAVE_EXPR_RTL (bound)) == MEM)) { ! register dw_die_ref ctx = lookup_decl_die (current_function_decl); ! register dw_die_ref decl_die = new_die (DW_TAG_variable, ctx); ! register rtx loc = SAVE_EXPR_RTL (bound); /* If the RTL for the SAVE_EXPR is memory, handle the case where it references an outer function's frame. */ - if (GET_CODE (loc) == MEM) { rtx new_addr = fix_lexical_addr (XEXP (loc, 0), bound); --- 9137,9148 ---- if (SAVE_EXPR_RTL (bound) && (! optimize || GET_CODE (SAVE_EXPR_RTL (bound)) == MEM)) { ! dw_die_ref ctx = lookup_decl_die (current_function_decl); ! dw_die_ref decl_die = new_die (DW_TAG_variable, ctx, bound); ! rtx loc = SAVE_EXPR_RTL (bound); /* If the RTL for the SAVE_EXPR is memory, handle the case where it references an outer function's frame. */ if (GET_CODE (loc) == MEM) { rtx new_addr = fix_lexical_addr (XEXP (loc, 0), bound); *************** add_bound_info (subrange_die, bound_attr *** 8458,8480 **** dw_die_ref ctx, decl_die; dw_loc_descr_ref loc; - /* If the CURRENT_FUNCTION_DECL is abstract, then we cannot - compute the array bound based on the location of the BOUND, - since the BOUND does not really exist. Therefore, we - simply omit the bound information. - - Ideally, we would do better, and express the computation in - some other way. */ - if (DECL_ABSTRACT (current_function_decl)) - break; - loc = loc_descriptor_from_tree (bound, 0); if (loc == NULL) break; ! ctx = lookup_decl_die (current_function_decl); ! decl_die = new_die (DW_TAG_variable, ctx); add_AT_flag (decl_die, DW_AT_artificial, 1); add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx); add_AT_loc (decl_die, DW_AT_location, loc); --- 9183,9207 ---- dw_die_ref ctx, decl_die; dw_loc_descr_ref loc; loc = loc_descriptor_from_tree (bound, 0); if (loc == NULL) break; ! if (current_function_decl == 0) ! ctx = comp_unit_die; ! else ! ctx = lookup_decl_die (current_function_decl); ! /* If we weren't able to find a context, it's most likely the case ! that we are processing the return type of the function. So ! make a SAVE_EXPR to point to it and have the limbo DIE code ! find the proper die. The save_expr function doesn't always ! make a SAVE_EXPR, so do it ourselves. */ ! if (ctx == 0) ! bound = build (SAVE_EXPR, TREE_TYPE (bound), bound, ! current_function_decl, NULL_TREE); ! ! decl_die = new_die (DW_TAG_variable, ctx, bound); add_AT_flag (decl_die, DW_AT_artificial, 1); add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx); add_AT_loc (decl_die, DW_AT_location, loc); *************** add_bound_info (subrange_die, bound_attr *** 8490,8503 **** static void add_subscript_info (type_die, type) ! register dw_die_ref type_die; ! register tree type; { #ifndef MIPS_DEBUGGING_INFO ! register unsigned dimension_number; #endif ! register tree lower, upper; ! register dw_die_ref subrange_die; /* The GNU compilers represent multidimensional array types as sequences of one dimensional array types whose element types are themselves array --- 9217,9230 ---- static void add_subscript_info (type_die, type) ! dw_die_ref type_die; ! tree type; { #ifndef MIPS_DEBUGGING_INFO ! unsigned dimension_number; #endif ! tree lower, upper; ! dw_die_ref subrange_die; /* The GNU compilers represent multidimensional array types as sequences of one dimensional array types whose element types are themselves array *************** add_subscript_info (type_die, type) *** 8516,8529 **** for (dimension_number = 0; TREE_CODE (type) == ARRAY_TYPE; type = TREE_TYPE (type), dimension_number++) - { #endif ! register tree domain = TYPE_DOMAIN (type); /* Arrays come in three flavors: Unspecified bounds, fixed bounds, and (in GNU C only) variable bounds. Handle all three forms here. */ ! subrange_die = new_die (DW_TAG_subrange_type, type_die); if (domain) { /* We have an array type with specified bounds. */ --- 9243,9256 ---- for (dimension_number = 0; TREE_CODE (type) == ARRAY_TYPE; type = TREE_TYPE (type), dimension_number++) #endif ! { ! tree domain = TYPE_DOMAIN (type); /* Arrays come in three flavors: Unspecified bounds, fixed bounds, and (in GNU C only) variable bounds. Handle all three forms here. */ ! subrange_die = new_die (DW_TAG_subrange_type, type_die, NULL); if (domain) { /* We have an array type with specified bounds. */ *************** add_subscript_info (type_die, type) *** 8557,8579 **** if (upper) add_bound_info (subrange_die, DW_AT_upper_bound, upper); } - else - /* We have an array type with an unspecified length. The DWARF-2 - spec does not say how to handle this; let's just leave out the - bounds. */ - {;} ! #ifndef MIPS_DEBUGGING_INFO } - #endif } static void add_byte_size_attribute (die, tree_node) dw_die_ref die; ! register tree tree_node; { ! register unsigned size; switch (TREE_CODE (tree_node)) { --- 9284,9302 ---- if (upper) add_bound_info (subrange_die, DW_AT_upper_bound, upper); } ! /* Otherwise we have an array type with an unspecified length. The ! DWARF-2 spec does not say how to handle this; let's just leave out the ! bounds. */ } } static void add_byte_size_attribute (die, tree_node) dw_die_ref die; ! tree tree_node; { ! unsigned size; switch (TREE_CODE (tree_node)) { *************** add_byte_size_attribute (die, tree_node) *** 8601,8607 **** indicates that the byte size of the entity in question is variable. We have no good way of expressing this fact in Dwarf at the present time, so just let the -1 pass on through. */ - add_AT_unsigned (die, DW_AT_byte_size, size); } --- 9324,9329 ---- *************** add_byte_size_attribute (die, tree_node) *** 8610,8622 **** "containing object" for the bit-field to the highest order bit of the bit-field itself. ! For any given bit-field, the "containing object" is a hypothetical ! object (of some integral or enum type) within which the given bit-field ! lives. The type of this hypothetical "containing object" is always the ! same as the declared type of the individual bit-field itself. The ! determination of the exact location of the "containing object" for a ! bit-field is rather complicated. It's handled by the ! `field_byte_offset' function (above). Note that it is the size (in bytes) of the hypothetical "containing object" which will be given in the DW_AT_byte_size attribute for this bit-field. --- 9332,9343 ---- "containing object" for the bit-field to the highest order bit of the bit-field itself. ! For any given bit-field, the "containing object" is a hypothetical object ! (of some integral or enum type) within which the given bit-field lives. The ! type of this hypothetical "containing object" is always the same as the ! declared type of the individual bit-field itself. The determination of the ! exact location of the "containing object" for a bit-field is rather ! complicated. It's handled by the `field_byte_offset' function (above). Note that it is the size (in bytes) of the hypothetical "containing object" which will be given in the DW_AT_byte_size attribute for this bit-field. *************** add_byte_size_attribute (die, tree_node) *** 8624,8631 **** static inline void add_bit_offset_attribute (die, decl) ! register dw_die_ref die; ! register tree decl; { HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl); tree type = DECL_BIT_FIELD_TYPE (decl); --- 9345,9352 ---- static inline void add_bit_offset_attribute (die, decl) ! dw_die_ref die; ! tree decl; { HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl); tree type = DECL_BIT_FIELD_TYPE (decl); *************** add_bit_offset_attribute (die, decl) *** 8675,8682 **** static inline void add_bit_size_attribute (die, decl) ! register dw_die_ref die; ! register tree decl; { /* Must be a field and a bit field. */ if (TREE_CODE (decl) != FIELD_DECL --- 9396,9403 ---- static inline void add_bit_size_attribute (die, decl) ! dw_die_ref die; ! tree decl; { /* Must be a field and a bit field. */ if (TREE_CODE (decl) != FIELD_DECL *************** add_bit_size_attribute (die, decl) *** 8692,8699 **** static inline void add_prototyped_attribute (die, func_type) ! register dw_die_ref die; ! register tree func_type; { if (get_AT_unsigned (comp_unit_die, DW_AT_language) == DW_LANG_C89 && TYPE_ARG_TYPES (func_type) != NULL) --- 9413,9420 ---- static inline void add_prototyped_attribute (die, func_type) ! dw_die_ref die; ! tree func_type; { if (get_AT_unsigned (comp_unit_die, DW_AT_language) == DW_LANG_C89 && TYPE_ARG_TYPES (func_type) != NULL) *************** add_prototyped_attribute (die, func_type *** 8706,8713 **** static inline void add_abstract_origin_attribute (die, origin) ! register dw_die_ref die; ! register tree origin; { dw_die_ref origin_die = NULL; --- 9427,9434 ---- static inline void add_abstract_origin_attribute (die, origin) ! dw_die_ref die; ! tree origin; { dw_die_ref origin_die = NULL; *************** add_abstract_origin_attribute (die, orig *** 8720,8727 **** --- 9441,9450 ---- Doing this for nested functions is wrong, however; functions are distinct units, and our context might not even be inline. */ tree fn = origin; + if (TYPE_P (fn)) fn = TYPE_STUB_DECL (fn); + fn = decl_function_context (fn); if (fn) dwarf2out_abstract_function (fn); *************** add_abstract_origin_attribute (die, orig *** 8742,8749 **** static inline void add_pure_or_virtual_attribute (die, func_decl) ! register dw_die_ref die; ! register tree func_decl; { if (DECL_VINDEX (func_decl)) { --- 9465,9472 ---- static inline void add_pure_or_virtual_attribute (die, func_decl) ! dw_die_ref die; ! tree func_decl; { if (DECL_VINDEX (func_decl)) { *************** add_pure_or_virtual_attribute (die, func *** 8766,8775 **** static void add_src_coords_attributes (die, decl) ! register dw_die_ref die; ! register tree decl; { ! register unsigned file_index = lookup_filename (DECL_SOURCE_FILE (decl)); add_AT_unsigned (die, DW_AT_decl_file, file_index); add_AT_unsigned (die, DW_AT_decl_line, DECL_SOURCE_LINE (decl)); --- 9489,9498 ---- static void add_src_coords_attributes (die, decl) ! dw_die_ref die; ! tree decl; { ! unsigned file_index = lookup_filename (DECL_SOURCE_FILE (decl)); add_AT_unsigned (die, DW_AT_decl_file, file_index); add_AT_unsigned (die, DW_AT_decl_line, DECL_SOURCE_LINE (decl)); *************** add_src_coords_attributes (die, decl) *** 8780,8789 **** static void add_name_and_src_coords_attributes (die, decl) ! register dw_die_ref die; ! register tree decl; { ! register tree decl_name; decl_name = DECL_NAME (decl); if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL) --- 9503,9512 ---- static void add_name_and_src_coords_attributes (die, decl) ! dw_die_ref die; ! tree decl; { ! tree decl_name; decl_name = DECL_NAME (decl); if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL) *************** add_name_and_src_coords_attributes (die, *** 8799,8804 **** --- 9522,9538 ---- add_AT_string (die, DW_AT_MIPS_linkage_name, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl))); } + + #ifdef VMS_DEBUGGING_INFO + /* Get the function's name, as described by its RTL. This may be different + from the DECL_NAME name used in the source file. */ + if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl)) + { + add_AT_addr (die, DW_AT_VMS_rtnbeg_pd_address, + XEXP (DECL_RTL (decl), 0)); + VARRAY_PUSH_RTX (used_rtx_varray, XEXP (DECL_RTL (decl), 0)); + } + #endif } /* Push a new declaration scope. */ *************** push_decl_scope (scope) *** 8811,8821 **** --- 9545,9557 ---- } /* Pop a declaration scope. */ + static inline void pop_decl_scope () { if (VARRAY_ACTIVE_SIZE (decl_scope_table) <= 0) abort (); + VARRAY_POP (decl_scope_table); } *************** pop_decl_scope () *** 8827,8838 **** static dw_die_ref scope_die_for (t, context_die) ! register tree t; ! register dw_die_ref context_die; { ! register dw_die_ref scope_die = NULL; ! register tree containing_scope; ! register int i; /* Non-types always go in the current scope. */ if (! TYPE_P (t)) --- 9563,9574 ---- static dw_die_ref scope_die_for (t, context_die) ! tree t; ! dw_die_ref context_die; { ! dw_die_ref scope_die = NULL; ! tree containing_scope; ! int i; /* Non-types always go in the current scope. */ if (! TYPE_P (t)) *************** scope_die_for (t, context_die) *** 8857,8863 **** /* For types, we can just look up the appropriate DIE. But first we check to see if we're in the middle of emitting it so we know where the new DIE should go. */ - for (i = VARRAY_ACTIVE_SIZE (decl_scope_table) - 1; i >= 0; --i) if (VARRAY_TREE (decl_scope_table, i) == containing_scope) break; --- 9593,9598 ---- *************** scope_die_for (t, context_die) *** 8880,8888 **** return scope_die; } ! /* Returns nonzero iff CONTEXT_DIE is internal to a function. */ - static inline int local_scope_p PARAMS ((dw_die_ref)); static inline int local_scope_p (context_die) dw_die_ref context_die; --- 9615,9622 ---- return scope_die; } ! /* Returns nonzero if CONTEXT_DIE is internal to a function. */ static inline int local_scope_p (context_die) dw_die_ref context_die; *************** local_scope_p (context_die) *** 8891,8902 **** if (context_die->die_tag == DW_TAG_inlined_subroutine || context_die->die_tag == DW_TAG_subprogram) return 1; return 0; } ! /* Returns nonzero iff CONTEXT_DIE is a class. */ - static inline int class_scope_p PARAMS ((dw_die_ref)); static inline int class_scope_p (context_die) dw_die_ref context_die; --- 9625,9636 ---- if (context_die->die_tag == DW_TAG_inlined_subroutine || context_die->die_tag == DW_TAG_subprogram) return 1; + return 0; } ! /* Returns nonzero if CONTEXT_DIE is a class. */ static inline int class_scope_p (context_die) dw_die_ref context_die; *************** class_scope_p (context_die) *** 8912,8925 **** static void add_type_attribute (object_die, type, decl_const, decl_volatile, context_die) ! register dw_die_ref object_die; ! register tree type; ! register int decl_const; ! register int decl_volatile; ! register dw_die_ref context_die; { ! register enum tree_code code = TREE_CODE (type); ! register dw_die_ref type_die = NULL; /* ??? If this type is an unnamed subrange type of an integral or floating-point type, use the inner type. This is because we have no --- 9646,9659 ---- static void add_type_attribute (object_die, type, decl_const, decl_volatile, context_die) ! dw_die_ref object_die; ! tree type; ! int decl_const; ! int decl_volatile; ! dw_die_ref context_die; { ! enum tree_code code = TREE_CODE (type); ! dw_die_ref type_die = NULL; /* ??? If this type is an unnamed subrange type of an integral or floating-point type, use the inner type. This is because we have no *************** add_type_attribute (object_die, type, de *** 8929,8947 **** && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0) type = TREE_TYPE (type), code = TREE_CODE (type); ! if (code == ERROR_MARK) ! return; ! ! /* Handle a special case. For functions whose return type is void, we ! generate *no* type attribute. (Note that no object may have type ! `void', so this only applies to function return types). */ ! if (code == VOID_TYPE) return; type_die = modified_type_die (type, decl_const || TYPE_READONLY (type), decl_volatile || TYPE_VOLATILE (type), context_die); if (type_die != NULL) add_AT_die_ref (object_die, DW_AT_type, type_die); } --- 9663,9680 ---- && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0) type = TREE_TYPE (type), code = TREE_CODE (type); ! if (code == ERROR_MARK ! /* Handle a special case. For functions whose return type is void, we ! generate *no* type attribute. (Note that no object may have type ! `void', so this only applies to function return types). */ ! || code == VOID_TYPE) return; type_die = modified_type_die (type, decl_const || TYPE_READONLY (type), decl_volatile || TYPE_VOLATILE (type), context_die); + if (type_die != NULL) add_AT_die_ref (object_die, DW_AT_type, type_die); } *************** add_type_attribute (object_die, type, de *** 8952,8964 **** static const char * type_tag (type) ! register tree type; { ! register const char *name = 0; if (TYPE_NAME (type) != 0) { ! register tree t = 0; /* Find the IDENTIFIER_NODE for the type name. */ if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE) --- 9685,9697 ---- static const char * type_tag (type) ! tree type; { ! const char *name = 0; if (TYPE_NAME (type) != 0) { ! tree t = 0; /* Find the IDENTIFIER_NODE for the type name. */ if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE) *************** type_tag (type) *** 8984,8994 **** static inline tree member_declared_type (member) ! register tree member; { return (DECL_BIT_FIELD_TYPE (member) ! ? DECL_BIT_FIELD_TYPE (member) ! : TREE_TYPE (member)); } /* Get the decl's label, as described by its RTL. This may be different --- 9717,9726 ---- static inline tree member_declared_type (member) ! tree member; { return (DECL_BIT_FIELD_TYPE (member) ! ? DECL_BIT_FIELD_TYPE (member) : TREE_TYPE (member)); } /* Get the decl's label, as described by its RTL. This may be different *************** member_declared_type (member) *** 8997,9006 **** #if 0 static const char * decl_start_label (decl) ! register tree decl; { rtx x; const char *fnname; x = DECL_RTL (decl); if (GET_CODE (x) != MEM) abort (); --- 9729,9739 ---- #if 0 static const char * decl_start_label (decl) ! tree decl; { rtx x; const char *fnname; + x = DECL_RTL (decl); if (GET_CODE (x) != MEM) abort (); *************** decl_start_label (decl) *** 9020,9031 **** static void gen_array_type_die (type, context_die) ! register tree type; ! register dw_die_ref context_die; { ! register dw_die_ref scope_die = scope_die_for (type, context_die); ! register dw_die_ref array_die; ! register tree element_type; /* ??? The SGI dwarf reader fails for array of array of enum types unless the inner array type comes before the outer array type. Thus we must --- 9753,9764 ---- static void gen_array_type_die (type, context_die) ! tree type; ! dw_die_ref context_die; { ! dw_die_ref scope_die = scope_die_for (type, context_die); ! dw_die_ref array_die; ! tree element_type; /* ??? The SGI dwarf reader fails for array of array of enum types unless the inner array type comes before the outer array type. Thus we must *************** gen_array_type_die (type, context_die) *** 9034,9040 **** gen_type_die (TREE_TYPE (type), context_die); #endif ! array_die = new_die (DW_TAG_array_type, scope_die); #if 0 /* We default the array ordering. SDB will probably do --- 9767,9783 ---- gen_type_die (TREE_TYPE (type), context_die); #endif ! array_die = new_die (DW_TAG_array_type, scope_die, type); ! add_name_attribute (array_die, type_tag (type)); ! equate_type_number_to_die (type, array_die); ! ! if (TREE_CODE (type) == VECTOR_TYPE) ! { ! /* The frontend feeds us a representation for the vector as a struct ! containing an array. Pull out the array type. */ ! type = TREE_TYPE (TYPE_FIELDS (TYPE_DEBUG_REPRESENTATION_TYPE (type))); ! add_AT_flag (array_die, DW_AT_GNU_vector, 1); ! } #if 0 /* We default the array ordering. SDB will probably do *************** gen_array_type_die (type, context_die) *** 9056,9064 **** #endif add_subscript_info (array_die, type); - add_name_attribute (array_die, type_tag (type)); - equate_type_number_to_die (type, array_die); - /* Add representation of the type of the elements of this array type. */ element_type = TREE_TYPE (type); --- 9799,9804 ---- *************** gen_array_type_die (type, context_die) *** 9078,9088 **** static void gen_set_type_die (type, context_die) ! register tree type; ! register dw_die_ref context_die; { ! register dw_die_ref type_die ! = new_die (DW_TAG_set_type, scope_die_for (type, context_die)); equate_type_number_to_die (type, type_die); add_type_attribute (type_die, TREE_TYPE (type), 0, 0, context_die); --- 9818,9828 ---- static void gen_set_type_die (type, context_die) ! tree type; ! dw_die_ref context_die; { ! dw_die_ref type_die ! = new_die (DW_TAG_set_type, scope_die_for (type, context_die), type); equate_type_number_to_die (type, type_die); add_type_attribute (type_die, TREE_TYPE (type), 0, 0, context_die); *************** gen_set_type_die (type, context_die) *** 9091,9101 **** #if 0 static void gen_entry_point_die (decl, context_die) ! register tree decl; ! register dw_die_ref context_die; { ! register tree origin = decl_ultimate_origin (decl); ! register dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die); if (origin != NULL) add_abstract_origin_attribute (decl_die, origin); else --- 9831,9842 ---- #if 0 static void gen_entry_point_die (decl, context_die) ! tree decl; ! dw_die_ref context_die; { ! tree origin = decl_ultimate_origin (decl); ! dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die, decl); ! if (origin != NULL) add_abstract_origin_attribute (decl_die, origin); else *************** gen_entry_point_die (decl, context_die) *** 9112,9125 **** } #endif - /* Remember a type in the incomplete_types_list. */ - static void - add_incomplete_type (type) - tree type; - { - VARRAY_PUSH_TREE (incomplete_types, type); - } - /* Walk through the list of incomplete types again, trying once more to emit full debugging info for them. */ --- 9853,9858 ---- *************** static void *** 9127,9147 **** retry_incomplete_types () { int i; for (i = VARRAY_ACTIVE_SIZE (incomplete_types) - 1; i >= 0; i--) ! { ! gen_type_die (VARRAY_TREE (incomplete_types, i), comp_unit_die); ! } } /* Generate a DIE to represent an inlined instance of an enumeration type. */ static void gen_inlined_enumeration_type_die (type, context_die) ! register tree type; ! register dw_die_ref context_die; { ! register dw_die_ref type_die = new_die (DW_TAG_enumeration_type, ! context_die); /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may be incomplete and such types are not marked. */ add_abstract_origin_attribute (type_die, type); --- 9860,9879 ---- retry_incomplete_types () { int i; + for (i = VARRAY_ACTIVE_SIZE (incomplete_types) - 1; i >= 0; i--) ! gen_type_die (VARRAY_TREE (incomplete_types, i), comp_unit_die); } /* Generate a DIE to represent an inlined instance of an enumeration type. */ static void gen_inlined_enumeration_type_die (type, context_die) ! tree type; ! dw_die_ref context_die; { ! dw_die_ref type_die = new_die (DW_TAG_enumeration_type, context_die, type); ! /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may be incomplete and such types are not marked. */ add_abstract_origin_attribute (type_die, type); *************** gen_inlined_enumeration_type_die (type, *** 9151,9160 **** static void gen_inlined_structure_type_die (type, context_die) ! register tree type; ! register dw_die_ref context_die; { ! register dw_die_ref type_die = new_die (DW_TAG_structure_type, context_die); /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may be incomplete and such types are not marked. */ --- 9883,9892 ---- static void gen_inlined_structure_type_die (type, context_die) ! tree type; ! dw_die_ref context_die; { ! dw_die_ref type_die = new_die (DW_TAG_structure_type, context_die, type); /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may be incomplete and such types are not marked. */ *************** gen_inlined_structure_type_die (type, co *** 9165,9174 **** static void gen_inlined_union_type_die (type, context_die) ! register tree type; ! register dw_die_ref context_die; { ! register dw_die_ref type_die = new_die (DW_TAG_union_type, context_die); /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may be incomplete and such types are not marked. */ --- 9897,9906 ---- static void gen_inlined_union_type_die (type, context_die) ! tree type; ! dw_die_ref context_die; { ! dw_die_ref type_die = new_die (DW_TAG_union_type, context_die, type); /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may be incomplete and such types are not marked. */ *************** gen_inlined_union_type_die (type, contex *** 9182,9196 **** static void gen_enumeration_type_die (type, context_die) ! register tree type; ! register dw_die_ref context_die; { ! register dw_die_ref type_die = lookup_type_die (type); if (type_die == NULL) { type_die = new_die (DW_TAG_enumeration_type, ! scope_die_for (type, context_die)); equate_type_number_to_die (type, type_die); add_name_attribute (type_die, type_tag (type)); } --- 9914,9928 ---- static void gen_enumeration_type_die (type, context_die) ! tree type; ! dw_die_ref context_die; { ! dw_die_ref type_die = lookup_type_die (type); if (type_die == NULL) { type_die = new_die (DW_TAG_enumeration_type, ! scope_die_for (type, context_die), type); equate_type_number_to_die (type, type_die); add_name_attribute (type_die, type_tag (type)); } *************** gen_enumeration_type_die (type, context_ *** 9204,9210 **** attribute or the DW_AT_element_list attribute. */ if (TYPE_SIZE (type)) { ! register tree link; TREE_ASM_WRITTEN (type) = 1; add_byte_size_attribute (type_die, type); --- 9936,9942 ---- attribute or the DW_AT_element_list attribute. */ if (TYPE_SIZE (type)) { ! tree link; TREE_ASM_WRITTEN (type) = 1; add_byte_size_attribute (type_die, type); *************** gen_enumeration_type_die (type, context_ *** 9219,9225 **** for (link = TYPE_FIELDS (type); link != NULL; link = TREE_CHAIN (link)) { ! register dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die); add_name_attribute (enum_die, IDENTIFIER_POINTER (TREE_PURPOSE (link))); --- 9951,9957 ---- for (link = TYPE_FIELDS (type); link != NULL; link = TREE_CHAIN (link)) { ! dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link); add_name_attribute (enum_die, IDENTIFIER_POINTER (TREE_PURPOSE (link))); *************** gen_enumeration_type_die (type, context_ *** 9254,9265 **** static dw_die_ref gen_formal_parameter_die (node, context_die) ! register tree node; ! register dw_die_ref context_die; { ! register dw_die_ref parm_die ! = new_die (DW_TAG_formal_parameter, context_die); ! register tree origin; switch (TREE_CODE_CLASS (TREE_CODE (node))) { --- 9986,9997 ---- static dw_die_ref gen_formal_parameter_die (node, context_die) ! tree node; ! dw_die_ref context_die; { ! dw_die_ref parm_die ! = new_die (DW_TAG_formal_parameter, context_die, node); ! tree origin; switch (TREE_CODE_CLASS (TREE_CODE (node))) { *************** gen_formal_parameter_die (node, context_ *** 9301,9310 **** static void gen_unspecified_parameters_die (decl_or_type, context_die) ! register tree decl_or_type ATTRIBUTE_UNUSED; ! register dw_die_ref context_die; { ! new_die (DW_TAG_unspecified_parameters, context_die); } /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a --- 10033,10042 ---- static void gen_unspecified_parameters_die (decl_or_type, context_die) ! tree decl_or_type; ! dw_die_ref context_die; { ! new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type); } /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a *************** gen_unspecified_parameters_die (decl_or_ *** 9314,9325 **** static void gen_formal_types_die (function_or_method_type, context_die) ! register tree function_or_method_type; ! register dw_die_ref context_die; { ! register tree link; ! register tree formal_type = NULL; ! register tree first_parm_type; tree arg; if (TREE_CODE (function_or_method_type) == FUNCTION_DECL) --- 10046,10057 ---- static void gen_formal_types_die (function_or_method_type, context_die) ! tree function_or_method_type; ! dw_die_ref context_die; { ! tree link; ! tree formal_type = NULL; ! tree first_parm_type; tree arg; if (TREE_CODE (function_or_method_type) == FUNCTION_DECL) *************** gen_formal_types_die (function_or_method *** 9336,9342 **** DW_TAG_formal_parameter DIE for each one. */ for (link = first_parm_type; link; ) { ! register dw_die_ref parm_die; formal_type = TREE_VALUE (link); if (formal_type == void_type_node) --- 10068,10074 ---- DW_TAG_formal_parameter DIE for each one. */ for (link = first_parm_type; link; ) { ! dw_die_ref parm_die; formal_type = TREE_VALUE (link); if (formal_type == void_type_node) *************** gen_formal_types_die (function_or_method *** 9362,9376 **** /* Make our second (and final) pass over the list of formal parameter types and output DIEs to represent those types (as necessary). */ for (link = TYPE_ARG_TYPES (function_or_method_type); ! link; link = TREE_CHAIN (link)) ! { ! formal_type = TREE_VALUE (link); ! if (formal_type == void_type_node) ! break; ! ! gen_type_die (formal_type, context_die); ! } } /* We want to generate the DIE for TYPE so that we can generate the --- 10094,10102 ---- /* Make our second (and final) pass over the list of formal parameter types and output DIEs to represent those types (as necessary). */ for (link = TYPE_ARG_TYPES (function_or_method_type); ! link && TREE_VALUE (link); link = TREE_CHAIN (link)) ! gen_type_die (TREE_VALUE (link), context_die); } /* We want to generate the DIE for TYPE so that we can generate the *************** gen_type_die_for_member (type, member, c *** 9399,9417 **** gen_subprogram_die (member, lookup_type_die (type)); else gen_variable_die (member, lookup_type_die (type)); pop_decl_scope (); } } ! /* Generate the DWARF2 info for the "abstract" instance ! of a function which we may later generate inlined and/or ! out-of-line instances of. */ ! void dwarf2out_abstract_function (decl) tree decl; { ! register dw_die_ref old_die; tree save_fn; tree context; int was_abstract = DECL_ABSTRACT (decl); --- 10125,10143 ---- gen_subprogram_die (member, lookup_type_die (type)); else gen_variable_die (member, lookup_type_die (type)); + pop_decl_scope (); } } ! /* Generate the DWARF2 info for the "abstract" instance of a function which we ! may later generate inlined and/or out-of-line instances of. */ ! static void dwarf2out_abstract_function (decl) tree decl; { ! dw_die_ref old_die; tree save_fn; tree context; int was_abstract = DECL_ABSTRACT (decl); *************** dwarf2out_abstract_function (decl) *** 9451,9475 **** static void gen_subprogram_die (decl, context_die) ! register tree decl; ! register dw_die_ref context_die; { char label_id[MAX_ARTIFICIAL_LABEL_BYTES]; ! register tree origin = decl_ultimate_origin (decl); ! register dw_die_ref subr_die; ! register rtx fp_reg; ! register tree fn_arg_types; ! register tree outer_scope; ! register dw_die_ref old_die = lookup_decl_die (decl); ! register int declaration = (current_function_decl != decl ! || class_scope_p (context_die)); ! /* Note that it is possible to have both DECL_ABSTRACT and `declaration' ! be true, if we started to generate the abstract instance of an inline, ! decided to output its containing class, and proceeded to emit the ! declaration of the inline from the member list for the class. In that ! case, `declaration' takes priority; we'll get back to the abstract ! instance when we're done with the class. */ /* The class-scope declaration DIE must be the primary DIE. */ if (origin && declaration && class_scope_p (context_die)) --- 10177,10200 ---- static void gen_subprogram_die (decl, context_die) ! tree decl; ! dw_die_ref context_die; { char label_id[MAX_ARTIFICIAL_LABEL_BYTES]; ! tree origin = decl_ultimate_origin (decl); ! dw_die_ref subr_die; ! rtx fp_reg; ! tree fn_arg_types; ! tree outer_scope; ! dw_die_ref old_die = lookup_decl_die (decl); ! int declaration = (current_function_decl != decl ! || class_scope_p (context_die)); ! /* It is possible to have both DECL_ABSTRACT and DECLARATION be true if we ! started to generate the abstract instance of an inline, decided to output ! its containing class, and proceeded to emit the declaration of the inline ! from the member list for the class. If so, DECLARATION takes priority; ! we'll get back to the abstract instance when done with the class. */ /* The class-scope declaration DIE must be the primary DIE. */ if (origin && declaration && class_scope_p (context_die)) *************** gen_subprogram_die (decl, context_die) *** 9489,9495 **** if (old_die && old_die->die_parent == NULL) add_child_die (context_die, old_die); ! subr_die = new_die (DW_TAG_subprogram, context_die); add_abstract_origin_attribute (subr_die, origin); } else if (old_die) --- 10214,10220 ---- if (old_die && old_die->die_parent == NULL) add_child_die (context_die, old_die); ! subr_die = new_die (DW_TAG_subprogram, context_die, decl); add_abstract_origin_attribute (subr_die, origin); } else if (old_die) *************** gen_subprogram_die (decl, context_die) *** 9506,9512 **** instance, if it has duplicate function definitions. Ideally, we should detect this case and ignore it. For now, if we have already reported an error, any error at all, then assume that ! we got here because of a input error, not a dwarf2 bug. */ if (errorcount) return; abort (); --- 10231,10237 ---- instance, if it has duplicate function definitions. Ideally, we should detect this case and ignore it. For now, if we have already reported an error, any error at all, then assume that ! we got here because of an input error, not a dwarf2 bug. */ if (errorcount) return; abort (); *************** gen_subprogram_die (decl, context_die) *** 9533,9539 **** } else { ! subr_die = new_die (DW_TAG_subprogram, context_die); add_AT_die_ref (subr_die, DW_AT_specification, old_die); if (get_AT_unsigned (old_die, DW_AT_decl_file) != file_index) add_AT_unsigned (subr_die, DW_AT_decl_file, file_index); --- 10258,10264 ---- } else { ! subr_die = new_die (DW_TAG_subprogram, context_die, decl); add_AT_die_ref (subr_die, DW_AT_specification, old_die); if (get_AT_unsigned (old_die, DW_AT_decl_file) != file_index) add_AT_unsigned (subr_die, DW_AT_decl_file, file_index); *************** gen_subprogram_die (decl, context_die) *** 9545,9551 **** } else { ! subr_die = new_die (DW_TAG_subprogram, context_die); if (TREE_PUBLIC (decl)) add_AT_flag (subr_die, DW_AT_external, 1); --- 10270,10276 ---- } else { ! subr_die = new_die (DW_TAG_subprogram, context_die, decl); if (TREE_PUBLIC (decl)) add_AT_flag (subr_die, DW_AT_external, 1); *************** gen_subprogram_die (decl, context_die) *** 9553,9567 **** add_name_and_src_coords_attributes (subr_die, decl); if (debug_info_level > DINFO_LEVEL_TERSE) { ! register tree type = TREE_TYPE (decl); ! ! add_prototyped_attribute (subr_die, type); ! add_type_attribute (subr_die, TREE_TYPE (type), 0, 0, context_die); } add_pure_or_virtual_attribute (subr_die, decl); if (DECL_ARTIFICIAL (decl)) add_AT_flag (subr_die, DW_AT_artificial, 1); if (TREE_PROTECTED (decl)) add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_protected); else if (TREE_PRIVATE (decl)) --- 10278,10292 ---- add_name_and_src_coords_attributes (subr_die, decl); if (debug_info_level > DINFO_LEVEL_TERSE) { ! add_prototyped_attribute (subr_die, TREE_TYPE (decl)); ! add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)), ! 0, 0, context_die); } add_pure_or_virtual_attribute (subr_die, decl); if (DECL_ARTIFICIAL (decl)) add_AT_flag (subr_die, DW_AT_artificial, 1); + if (TREE_PROTECTED (decl)) add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_protected); else if (TREE_PRIVATE (decl)) *************** gen_subprogram_die (decl, context_die) *** 9570,9576 **** if (declaration) { ! if (!(old_die && get_AT_unsigned (old_die, DW_AT_inline))) { add_AT_flag (subr_die, DW_AT_declaration, 1); --- 10295,10301 ---- if (declaration) { ! if (!old_die || !get_AT_unsigned (old_die, DW_AT_inline)) { add_AT_flag (subr_die, DW_AT_declaration, 1); *************** gen_subprogram_die (decl, context_die) *** 9603,9609 **** } else if (!DECL_EXTERNAL (decl)) { ! if (!(old_die && get_AT_unsigned (old_die, DW_AT_inline))) equate_decl_number_to_die (decl, subr_die); ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_BEGIN_LABEL, --- 10328,10334 ---- } else if (!DECL_EXTERNAL (decl)) { ! if (!old_die || !get_AT_unsigned (old_die, DW_AT_inline)) equate_decl_number_to_die (decl, subr_die); ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_BEGIN_LABEL, *************** gen_subprogram_die (decl, context_die) *** 9657,9664 **** else { /* Generate DIEs to represent all known formal parameters */ ! register tree arg_decls = DECL_ARGUMENTS (decl); ! register tree parm; /* When generating DIEs, generate the unspecified_parameters DIE instead if we come across the arg "__builtin_va_alist" */ --- 10382,10389 ---- else { /* Generate DIEs to represent all known formal parameters */ ! tree arg_decls = DECL_ARGUMENTS (decl); ! tree parm; /* When generating DIEs, generate the unspecified_parameters DIE instead if we come across the arg "__builtin_va_alist" */ *************** gen_subprogram_die (decl, context_die) *** 9673,9679 **** gen_decl_die (parm, subr_die); } ! /* Decide whether we need a unspecified_parameters DIE at the end. There are 2 more cases to do this for: 1) the ansi ... declaration - this is detectable when the end of the arg list is not a void_type_node 2) an unprototyped function declaration (not a --- 10398,10404 ---- gen_decl_die (parm, subr_die); } ! /* Decide whether we need an unspecified_parameters DIE at the end. There are 2 more cases to do this for: 1) the ansi ... declaration - this is detectable when the end of the arg list is not a void_type_node 2) an unprototyped function declaration (not a *************** gen_subprogram_die (decl, context_die) *** 9694,9712 **** (if it has one - it may be just a declaration). */ outer_scope = DECL_INITIAL (decl); ! /* Note that here, `outer_scope' is a pointer to the outermost BLOCK ! node created to represent a function. This outermost BLOCK actually ! represents the outermost binding contour for the function, i.e. the ! contour in which the function's formal parameters and labels get ! declared. Curiously, it appears that the front end doesn't actually ! put the PARM_DECL nodes for the current function onto the BLOCK_VARS ! list for this outer scope. (They are strung off of the DECL_ARGUMENTS ! list for the function instead.) The BLOCK_VARS list for the ! `outer_scope' does provide us with a list of the LABEL_DECL nodes for ! the function however, and we output DWARF info for those in ! decls_for_scope. Just within the `outer_scope' there will be a BLOCK ! node representing the function's outermost pair of curly braces, and ! any blocks used for the base and member initializers of a C++ constructor function. */ if (! declaration && TREE_CODE (outer_scope) != ERROR_MARK) { --- 10419,10437 ---- (if it has one - it may be just a declaration). */ outer_scope = DECL_INITIAL (decl); ! /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent ! a function. This BLOCK actually represents the outermost binding contour ! for the function, i.e. the contour in which the function's formal ! parameters and labels get declared. Curiously, it appears that the front ! end doesn't actually put the PARM_DECL nodes for the current function onto ! the BLOCK_VARS list for this outer scope, but are strung off of the ! DECL_ARGUMENTS list for the function instead. ! ! The BLOCK_VARS list for the `outer_scope' does provide us with a list of ! the LABEL_DECL nodes for the function however, and we output DWARF info ! for those in decls_for_scope. Just within the `outer_scope' there will be ! a BLOCK node representing the function's outermost pair of curly braces, ! and any blocks used for the base and member initializers of a C++ constructor function. */ if (! declaration && TREE_CODE (outer_scope) != ERROR_MARK) { *************** gen_subprogram_die (decl, context_die) *** 9731,9741 **** static void gen_variable_die (decl, context_die) ! register tree decl; ! register dw_die_ref context_die; { ! register tree origin = decl_ultimate_origin (decl); ! register dw_die_ref var_die = new_die (DW_TAG_variable, context_die); dw_die_ref old_die = lookup_decl_die (decl); int declaration = (DECL_EXTERNAL (decl) --- 10456,10466 ---- static void gen_variable_die (decl, context_die) ! tree decl; ! dw_die_ref context_die; { ! tree origin = decl_ultimate_origin (decl); ! dw_die_ref var_die = new_die (DW_TAG_variable, context_die, decl); dw_die_ref old_die = lookup_decl_die (decl); int declaration = (DECL_EXTERNAL (decl) *************** gen_variable_die (decl, context_die) *** 9743,9753 **** if (origin != NULL) add_abstract_origin_attribute (var_die, origin); /* Loop unrolling can create multiple blocks that refer to the same ! static variable, so we must test for the DW_AT_declaration flag. */ ! /* ??? Loop unrolling/reorder_blocks should perhaps be rewritten to copy decls and set the DECL_ABSTRACT flag on them instead of ! sharing them. */ else if (old_die && TREE_STATIC (decl) && get_AT_flag (old_die, DW_AT_declaration) == 1) { --- 10468,10482 ---- if (origin != NULL) add_abstract_origin_attribute (var_die, origin); + /* Loop unrolling can create multiple blocks that refer to the same ! static variable, so we must test for the DW_AT_declaration flag. ! ! ??? Loop unrolling/reorder_blocks should perhaps be rewritten to copy decls and set the DECL_ABSTRACT flag on them instead of ! sharing them. ! ! ??? Duplicated blocks have been rewritten to use .debug_ranges. */ else if (old_die && TREE_STATIC (decl) && get_AT_flag (old_die, DW_AT_declaration) == 1) { *************** gen_variable_die (decl, context_die) *** 9770,9777 **** else { add_name_and_src_coords_attributes (var_die, decl); ! add_type_attribute (var_die, TREE_TYPE (decl), ! TREE_READONLY (decl), TREE_THIS_VOLATILE (decl), context_die); if (TREE_PUBLIC (decl)) --- 10499,10505 ---- else { add_name_and_src_coords_attributes (var_die, decl); ! add_type_attribute (var_die, TREE_TYPE (decl), TREE_READONLY (decl), TREE_THIS_VOLATILE (decl), context_die); if (TREE_PUBLIC (decl)) *************** gen_variable_die (decl, context_die) *** 9782,9788 **** if (TREE_PROTECTED (decl)) add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_protected); - else if (TREE_PRIVATE (decl)) add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_private); } --- 10510,10515 ---- *************** gen_variable_die (decl, context_die) *** 9806,9817 **** static void gen_label_die (decl, context_die) ! register tree decl; ! register dw_die_ref context_die; { ! register tree origin = decl_ultimate_origin (decl); ! register dw_die_ref lbl_die = new_die (DW_TAG_label, context_die); ! register rtx insn; char label[MAX_ARTIFICIAL_LABEL_BYTES]; if (origin != NULL) --- 10533,10544 ---- static void gen_label_die (decl, context_die) ! tree decl; ! dw_die_ref context_die; { ! tree origin = decl_ultimate_origin (decl); ! dw_die_ref lbl_die = new_die (DW_TAG_label, context_die, decl); ! rtx insn; char label[MAX_ARTIFICIAL_LABEL_BYTES]; if (origin != NULL) *************** gen_label_die (decl, context_die) *** 9850,9870 **** static void gen_lexical_block_die (stmt, context_die, depth) ! register tree stmt; ! register dw_die_ref context_die; int depth; { ! register dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die); char label[MAX_ARTIFICIAL_LABEL_BYTES]; if (! BLOCK_ABSTRACT (stmt)) { ! ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL, ! BLOCK_NUMBER (stmt)); ! add_AT_lbl_id (stmt_die, DW_AT_low_pc, label); ! ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL, ! BLOCK_NUMBER (stmt)); ! add_AT_lbl_id (stmt_die, DW_AT_high_pc, label); } decls_for_scope (stmt, stmt_die, depth); --- 10577,10615 ---- static void gen_lexical_block_die (stmt, context_die, depth) ! tree stmt; ! dw_die_ref context_die; int depth; { ! dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt); char label[MAX_ARTIFICIAL_LABEL_BYTES]; if (! BLOCK_ABSTRACT (stmt)) { ! if (BLOCK_FRAGMENT_CHAIN (stmt)) ! { ! tree chain; ! ! add_AT_range_list (stmt_die, DW_AT_ranges, add_ranges (stmt)); ! ! chain = BLOCK_FRAGMENT_CHAIN (stmt); ! do ! { ! add_ranges (chain); ! chain = BLOCK_FRAGMENT_CHAIN (chain); ! } ! while (chain); ! add_ranges (NULL); ! } ! else ! { ! ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL, ! BLOCK_NUMBER (stmt)); ! add_AT_lbl_id (stmt_die, DW_AT_low_pc, label); ! ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL, ! BLOCK_NUMBER (stmt)); ! add_AT_lbl_id (stmt_die, DW_AT_high_pc, label); ! } } decls_for_scope (stmt, stmt_die, depth); *************** gen_lexical_block_die (stmt, context_die *** 9874,9888 **** static void gen_inlined_subroutine_die (stmt, context_die, depth) ! register tree stmt; ! register dw_die_ref context_die; int depth; { if (! BLOCK_ABSTRACT (stmt)) { ! register dw_die_ref subr_die ! = new_die (DW_TAG_inlined_subroutine, context_die); ! register tree decl = block_ultimate_origin (stmt); char label[MAX_ARTIFICIAL_LABEL_BYTES]; /* Emit info for the abstract instance first, if we haven't yet. */ --- 10619,10633 ---- static void gen_inlined_subroutine_die (stmt, context_die, depth) ! tree stmt; ! dw_die_ref context_die; int depth; { if (! BLOCK_ABSTRACT (stmt)) { ! dw_die_ref subr_die ! = new_die (DW_TAG_inlined_subroutine, context_die, stmt); ! tree decl = block_ultimate_origin (stmt); char label[MAX_ARTIFICIAL_LABEL_BYTES]; /* Emit info for the abstract instance first, if we haven't yet. */ *************** gen_inlined_subroutine_die (stmt, contex *** 9898,9920 **** decls_for_scope (stmt, subr_die, depth); current_function_has_inlines = 1; } } /* Generate a DIE for a field in a record, or structure. */ static void gen_field_die (decl, context_die) ! register tree decl; ! register dw_die_ref context_die; { ! register dw_die_ref decl_die = new_die (DW_TAG_member, context_die); add_name_and_src_coords_attributes (decl_die, decl); add_type_attribute (decl_die, member_declared_type (decl), TREE_READONLY (decl), TREE_THIS_VOLATILE (decl), context_die); - /* If this is a bit field... */ if (DECL_BIT_FIELD_TYPE (decl)) { add_byte_size_attribute (decl_die, decl); --- 10643,10678 ---- decls_for_scope (stmt, subr_die, depth); current_function_has_inlines = 1; } + else + /* We may get here if we're the outer block of function A that was + inlined into function B that was inlined into function C. When + generating debugging info for C, dwarf2out_abstract_function(B) + would mark all inlined blocks as abstract, including this one. + So, we wouldn't (and shouldn't) expect labels to be generated + for this one. Instead, just emit debugging info for + declarations within the block. This is particularly important + in the case of initializers of arguments passed from B to us: + if they're statement expressions containing declarations, we + wouldn't generate dies for their abstract variables, and then, + when generating dies for the real variables, we'd die (pun + intended :-) */ + gen_lexical_block_die (stmt, context_die, depth); } /* Generate a DIE for a field in a record, or structure. */ static void gen_field_die (decl, context_die) ! tree decl; ! dw_die_ref context_die; { ! dw_die_ref decl_die = new_die (DW_TAG_member, context_die, decl); add_name_and_src_coords_attributes (decl_die, decl); add_type_attribute (decl_die, member_declared_type (decl), TREE_READONLY (decl), TREE_THIS_VOLATILE (decl), context_die); if (DECL_BIT_FIELD_TYPE (decl)) { add_byte_size_attribute (decl_die, decl); *************** gen_field_die (decl, context_die) *** 9930,9936 **** if (TREE_PROTECTED (decl)) add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_protected); - else if (TREE_PRIVATE (decl)) add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_private); } --- 10688,10693 ---- *************** gen_field_die (decl, context_die) *** 9940,9952 **** Use modified_type_die instead. We keep this code here just in case these types of DIEs may be needed to represent certain things in other languages (e.g. Pascal) someday. */ static void gen_pointer_type_die (type, context_die) ! register tree type; ! register dw_die_ref context_die; { ! register dw_die_ref ptr_die ! = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die)); equate_type_number_to_die (type, ptr_die); add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die); --- 10697,10710 ---- Use modified_type_die instead. We keep this code here just in case these types of DIEs may be needed to represent certain things in other languages (e.g. Pascal) someday. */ + static void gen_pointer_type_die (type, context_die) ! tree type; ! dw_die_ref context_die; { ! dw_die_ref ptr_die ! = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die), type); equate_type_number_to_die (type, ptr_die); add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die); *************** gen_pointer_type_die (type, context_die) *** 9957,9969 **** Use modified_type_die instead. We keep this code here just in case these types of DIEs may be needed to represent certain things in other languages (e.g. Pascal) someday. */ static void gen_reference_type_die (type, context_die) ! register tree type; ! register dw_die_ref context_die; { ! register dw_die_ref ref_die ! = new_die (DW_TAG_reference_type, scope_die_for (type, context_die)); equate_type_number_to_die (type, ref_die); add_type_attribute (ref_die, TREE_TYPE (type), 0, 0, context_die); --- 10715,10728 ---- Use modified_type_die instead. We keep this code here just in case these types of DIEs may be needed to represent certain things in other languages (e.g. Pascal) someday. */ + static void gen_reference_type_die (type, context_die) ! tree type; ! dw_die_ref context_die; { ! dw_die_ref ref_die ! = new_die (DW_TAG_reference_type, scope_die_for (type, context_die), type); equate_type_number_to_die (type, ref_die); add_type_attribute (ref_die, TREE_TYPE (type), 0, 0, context_die); *************** gen_reference_type_die (type, context_di *** 9972,9984 **** #endif /* Generate a DIE for a pointer to a member type. */ static void gen_ptr_to_mbr_type_die (type, context_die) ! register tree type; ! register dw_die_ref context_die; { ! register dw_die_ref ptr_die ! = new_die (DW_TAG_ptr_to_member_type, scope_die_for (type, context_die)); equate_type_number_to_die (type, ptr_die); add_AT_die_ref (ptr_die, DW_AT_containing_type, --- 10731,10745 ---- #endif /* Generate a DIE for a pointer to a member type. */ + static void gen_ptr_to_mbr_type_die (type, context_die) ! tree type; ! dw_die_ref context_die; { ! dw_die_ref ptr_die ! = new_die (DW_TAG_ptr_to_member_type, ! scope_die_for (type, context_die), type); equate_type_number_to_die (type, ptr_die); add_AT_die_ref (ptr_die, DW_AT_containing_type, *************** gen_ptr_to_mbr_type_die (type, context_d *** 9990,10003 **** static dw_die_ref gen_compile_unit_die (filename) ! register const char *filename; { ! register dw_die_ref die; char producer[250]; const char *wd = getpwd (); int language; ! die = new_die (DW_TAG_compile_unit, NULL); add_name_attribute (die, filename); if (wd != NULL && filename[0] != DIR_SEPARATOR) --- 10751,10765 ---- static dw_die_ref gen_compile_unit_die (filename) ! const char *filename; { ! dw_die_ref die; char producer[250]; const char *wd = getpwd (); + const char *language_string = lang_hooks.name; int language; ! die = new_die (DW_TAG_compile_unit, NULL, NULL); add_name_attribute (die, filename); if (wd != NULL && filename[0] != DIR_SEPARATOR) *************** gen_compile_unit_die (filename) *** 10034,10040 **** language = DW_LANG_C89; add_AT_unsigned (die, DW_AT_language, language); - return die; } --- 10796,10801 ---- *************** gen_compile_unit_die (filename) *** 10042,10076 **** static void gen_string_type_die (type, context_die) ! register tree type; ! register dw_die_ref context_die; { ! register dw_die_ref type_die ! = new_die (DW_TAG_string_type, scope_die_for (type, context_die)); equate_type_number_to_die (type, type_die); ! /* Fudge the string length attribute for now. */ ! ! /* TODO: add string length info. ! string_length_attribute (TYPE_MAX_VALUE (TYPE_DOMAIN (type))); ! bound_representation (upper_bound, 0, 'u'); */ } /* Generate the DIE for a base class. */ static void gen_inheritance_die (binfo, context_die) ! register tree binfo; ! register dw_die_ref context_die; { ! dw_die_ref die = new_die (DW_TAG_inheritance, context_die); add_type_attribute (die, BINFO_TYPE (binfo), 0, 0, context_die); add_data_member_location_attribute (die, binfo); if (TREE_VIA_VIRTUAL (binfo)) add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual); if (TREE_VIA_PUBLIC (binfo)) add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public); else if (TREE_VIA_PROTECTED (binfo)) --- 10803,10839 ---- static void gen_string_type_die (type, context_die) ! tree type; ! dw_die_ref context_die; { ! dw_die_ref type_die ! = new_die (DW_TAG_string_type, scope_die_for (type, context_die), type); equate_type_number_to_die (type, type_die); ! /* ??? Fudge the string length attribute for now. ! TODO: add string length info. */ ! #if 0 ! string_length_attribute (TYPE_MAX_VALUE (TYPE_DOMAIN (type))); ! bound_representation (upper_bound, 0, 'u'); ! #endif } /* Generate the DIE for a base class. */ static void gen_inheritance_die (binfo, context_die) ! tree binfo; ! dw_die_ref context_die; { ! dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo); add_type_attribute (die, BINFO_TYPE (binfo), 0, 0, context_die); add_data_member_location_attribute (die, binfo); if (TREE_VIA_VIRTUAL (binfo)) add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual); + if (TREE_VIA_PUBLIC (binfo)) add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public); else if (TREE_VIA_PROTECTED (binfo)) *************** gen_inheritance_die (binfo, context_die) *** 10081,10090 **** static void gen_member_die (type, context_die) ! register tree type; ! register dw_die_ref context_die; { ! register tree member; dw_die_ref child; /* If this is not an incomplete type, output descriptions of each of its --- 10844,10853 ---- static void gen_member_die (type, context_die) ! tree type; ! dw_die_ref context_die; { ! tree member; dw_die_ref child; /* If this is not an incomplete type, output descriptions of each of its *************** gen_member_die (type, context_die) *** 10092,10111 **** members of this record or union type, we will also be trying to output DIEs to represent the *types* of those members. However the `type' function (above) will specifically avoid generating type DIEs for member ! types *within* the list of member DIEs for this (containing) type execpt for those types (of members) which are explicitly marked as also being members of this (containing) type themselves. The g++ front- end can ! force any given type to be treated as a member of some other ! (containing) type by setting the TYPE_CONTEXT of the given (member) type ! to point to the TREE node representing the appropriate (containing) ! type. */ /* First output info about the base classes. */ if (TYPE_BINFO (type) && TYPE_BINFO_BASETYPES (type)) { ! register tree bases = TYPE_BINFO_BASETYPES (type); ! register int n_bases = TREE_VEC_LENGTH (bases); ! register int i; for (i = 0; i < n_bases; i++) gen_inheritance_die (TREE_VEC_ELT (bases, i), context_die); --- 10855,10873 ---- members of this record or union type, we will also be trying to output DIEs to represent the *types* of those members. However the `type' function (above) will specifically avoid generating type DIEs for member ! types *within* the list of member DIEs for this (containing) type except for those types (of members) which are explicitly marked as also being members of this (containing) type themselves. The g++ front- end can ! force any given type to be treated as a member of some other (containing) ! type by setting the TYPE_CONTEXT of the given (member) type to point to ! the TREE node representing the appropriate (containing) type. */ /* First output info about the base classes. */ if (TYPE_BINFO (type) && TYPE_BINFO_BASETYPES (type)) { ! tree bases = TYPE_BINFO_BASETYPES (type); ! int n_bases = TREE_VEC_LENGTH (bases); ! int i; for (i = 0; i < n_bases; i++) gen_inheritance_die (TREE_VEC_ELT (bases, i), context_die); *************** gen_member_die (type, context_die) *** 10147,10158 **** static void gen_struct_or_union_type_die (type, context_die) ! register tree type; ! register dw_die_ref context_die; { ! register dw_die_ref type_die = lookup_type_die (type); ! register dw_die_ref scope_die = 0; ! register int nested = 0; int complete = (TYPE_SIZE (type) && (! TYPE_STUB_DECL (type) || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type)))); --- 10909,10920 ---- static void gen_struct_or_union_type_die (type, context_die) ! tree type; ! dw_die_ref context_die; { ! dw_die_ref type_die = lookup_type_die (type); ! dw_die_ref scope_die = 0; ! int nested = 0; int complete = (TYPE_SIZE (type) && (! TYPE_STUB_DECL (type) || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type)))); *************** gen_struct_or_union_type_die (type, cont *** 10169,10179 **** if (! type_die || (nested && scope_die == comp_unit_die)) /* First occurrence of type or toplevel definition of nested class. */ { ! register dw_die_ref old_die = type_die; type_die = new_die (TREE_CODE (type) == RECORD_TYPE ? DW_TAG_structure_type : DW_TAG_union_type, ! scope_die); equate_type_number_to_die (type, type_die); if (old_die) add_AT_die_ref (type_die, DW_AT_specification, old_die); --- 10931,10941 ---- if (! type_die || (nested && scope_die == comp_unit_die)) /* First occurrence of type or toplevel definition of nested class. */ { ! dw_die_ref old_die = type_die; type_die = new_die (TREE_CODE (type) == RECORD_TYPE ? DW_TAG_structure_type : DW_TAG_union_type, ! scope_die, type); equate_type_number_to_die (type, type_die); if (old_die) add_AT_die_ref (type_die, DW_AT_specification, old_die); *************** gen_struct_or_union_type_die (type, cont *** 10218,10225 **** add_AT_flag (type_die, DW_AT_declaration, 1); /* We don't need to do this for function-local types. */ ! if (! decl_function_context (TYPE_STUB_DECL (type))) ! add_incomplete_type (type); } } --- 10980,10988 ---- add_AT_flag (type_die, DW_AT_declaration, 1); /* We don't need to do this for function-local types. */ ! if (TYPE_STUB_DECL (type) ! && ! decl_function_context (TYPE_STUB_DECL (type))) ! VARRAY_PUSH_TREE (incomplete_types, type); } } *************** gen_struct_or_union_type_die (type, cont *** 10227,10238 **** static void gen_subroutine_type_die (type, context_die) ! register tree type; ! register dw_die_ref context_die; { ! register tree return_type = TREE_TYPE (type); ! register dw_die_ref subr_die ! = new_die (DW_TAG_subroutine_type, scope_die_for (type, context_die)); equate_type_number_to_die (type, subr_die); add_prototyped_attribute (subr_die, type); --- 10990,11002 ---- static void gen_subroutine_type_die (type, context_die) ! tree type; ! dw_die_ref context_die; { ! tree return_type = TREE_TYPE (type); ! dw_die_ref subr_die ! = new_die (DW_TAG_subroutine_type, ! scope_die_for (type, context_die), type); equate_type_number_to_die (type, subr_die); add_prototyped_attribute (subr_die, type); *************** gen_subroutine_type_die (type, context_d *** 10244,10266 **** static void gen_typedef_die (decl, context_die) ! register tree decl; ! register dw_die_ref context_die; { ! register dw_die_ref type_die; ! register tree origin; if (TREE_ASM_WRITTEN (decl)) return; - TREE_ASM_WRITTEN (decl) = 1; ! type_die = new_die (DW_TAG_typedef, context_die); origin = decl_ultimate_origin (decl); if (origin != NULL) add_abstract_origin_attribute (type_die, origin); else { ! register tree type; add_name_and_src_coords_attributes (type_die, decl); if (DECL_ORIGINAL_TYPE (decl)) { --- 11008,11031 ---- static void gen_typedef_die (decl, context_die) ! tree decl; ! dw_die_ref context_die; { ! dw_die_ref type_die; ! tree origin; if (TREE_ASM_WRITTEN (decl)) return; ! TREE_ASM_WRITTEN (decl) = 1; ! type_die = new_die (DW_TAG_typedef, context_die, decl); origin = decl_ultimate_origin (decl); if (origin != NULL) add_abstract_origin_attribute (type_die, origin); else { ! tree type; ! add_name_and_src_coords_attributes (type_die, decl); if (DECL_ORIGINAL_TYPE (decl)) { *************** gen_typedef_die (decl, context_die) *** 10273,10278 **** --- 11038,11044 ---- } else type = TREE_TYPE (decl); + add_type_attribute (type_die, type, TREE_READONLY (decl), TREE_THIS_VOLATILE (decl), context_die); } *************** gen_typedef_die (decl, context_die) *** 10285,10292 **** static void gen_type_die (type, context_die) ! register tree type; ! register dw_die_ref context_die; { int need_pop; --- 11051,11058 ---- static void gen_type_die (type, context_die) ! tree type; ! dw_die_ref context_die; { int need_pop; *************** gen_type_die (type, context_die) *** 10374,10393 **** break; case VECTOR_TYPE: ! gen_type_die (TYPE_DEBUG_REPRESENTATION_TYPE (type), context_die); break; case ENUMERAL_TYPE: case RECORD_TYPE: case UNION_TYPE: case QUAL_UNION_TYPE: ! /* If this is a nested type whose containing class hasn't been ! written out yet, writing it out will cover this one, too. ! This does not apply to instantiations of member class templates; ! they need to be added to the containing class as they are ! generated. FIXME: This hurts the idea of combining type decls ! from multiple TUs, since we can't predict what set of template ! instantiations we'll get. */ if (TYPE_CONTEXT (type) && AGGREGATE_TYPE_P (TYPE_CONTEXT (type)) && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type))) --- 11140,11158 ---- break; case VECTOR_TYPE: ! gen_array_type_die (type, context_die); break; case ENUMERAL_TYPE: case RECORD_TYPE: case UNION_TYPE: case QUAL_UNION_TYPE: ! /* If this is a nested type whose containing class hasn't been written ! out yet, writing it out will cover this one, too. This does not apply ! to instantiations of member class templates; they need to be added to ! the containing class as they are generated. FIXME: This hurts the ! idea of combining type decls from multiple TUs, since we can't predict ! what set of template instantiations we'll get. */ if (TYPE_CONTEXT (type) && AGGREGATE_TYPE_P (TYPE_CONTEXT (type)) && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type))) *************** gen_type_die (type, context_die) *** 10442,10449 **** static void gen_tagged_type_instantiation_die (type, context_die) ! register tree type; ! register dw_die_ref context_die; { if (type == NULL_TREE || type == error_mark_node) return; --- 11207,11214 ---- static void gen_tagged_type_instantiation_die (type, context_die) ! tree type; ! dw_die_ref context_die; { if (type == NULL_TREE || type == error_mark_node) return; *************** gen_tagged_type_instantiation_die (type, *** 10486,10506 **** static void gen_block_die (stmt, context_die, depth) ! register tree stmt; ! register dw_die_ref context_die; int depth; { ! register int must_output_die = 0; ! register tree origin; ! register tree decl; ! register enum tree_code origin_code; /* Ignore blocks never really used to make RTL. */ - if (stmt == NULL_TREE || !TREE_USED (stmt) || (!TREE_ASM_WRITTEN (stmt) && !BLOCK_ABSTRACT (stmt))) return; /* Determine the "ultimate origin" of this block. This block may be an inlined instance of an inlined instance of inline function, so we have to trace all of the way back through the origin chain to find out what --- 11251,11283 ---- static void gen_block_die (stmt, context_die, depth) ! tree stmt; ! dw_die_ref context_die; int depth; { ! int must_output_die = 0; ! tree origin; ! tree decl; ! enum tree_code origin_code; /* Ignore blocks never really used to make RTL. */ if (stmt == NULL_TREE || !TREE_USED (stmt) || (!TREE_ASM_WRITTEN (stmt) && !BLOCK_ABSTRACT (stmt))) return; + /* If the block is one fragment of a non-contiguous block, do not + process the variables, since they will have been done by the + origin block. Do process subblocks. */ + if (BLOCK_FRAGMENT_ORIGIN (stmt)) + { + tree sub; + + for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub)) + gen_block_die (sub, context_die, depth + 1); + + return; + } + /* Determine the "ultimate origin" of this block. This block may be an inlined instance of an inlined instance of inline function, so we have to trace all of the way back through the origin chain to find out what *************** gen_block_die (stmt, context_die, depth) *** 10519,10530 **** { /* In the case where the current block represents an inlining of the "body block" of an inline function, we must *NOT* output any DIE for ! this block because we have already output a DIE to represent the ! whole inlined function scope and the "body block" of any function ! doesn't really represent a different scope according to ANSI C ! rules. So we check here to make sure that this block does not ! represent a "body block inlining" before trying to set the ! `must_output_die' flag. */ if (! is_body_block (origin ? origin : stmt)) { /* Determine if this block directly contains any "significant" --- 11296,11306 ---- { /* In the case where the current block represents an inlining of the "body block" of an inline function, we must *NOT* output any DIE for ! this block because we have already output a DIE to represent the whole ! inlined function scope and the "body block" of any function doesn't ! really represent a different scope according to ANSI C rules. So we ! check here to make sure that this block does not represent a "body ! block inlining" before trying to set the MUST_OUTPUT_DIE flag. */ if (! is_body_block (origin ? origin : stmt)) { /* Determine if this block directly contains any "significant" *************** gen_block_die (stmt, context_die, depth) *** 10570,10581 **** static void decls_for_scope (stmt, context_die, depth) ! register tree stmt; ! register dw_die_ref context_die; int depth; { ! register tree decl; ! register tree subblocks; /* Ignore blocks never really used to make RTL. */ if (stmt == NULL_TREE || ! TREE_USED (stmt)) --- 11346,11357 ---- static void decls_for_scope (stmt, context_die, depth) ! tree stmt; ! dw_die_ref context_die; int depth; { ! tree decl; ! tree subblocks; /* Ignore blocks never really used to make RTL. */ if (stmt == NULL_TREE || ! TREE_USED (stmt)) *************** decls_for_scope (stmt, context_die, dept *** 10585,10594 **** declared directly within this block but not within any nested sub-blocks. Also, nested function and tag DIEs have been generated with a parent of NULL; fix that up now. */ ! for (decl = BLOCK_VARS (stmt); ! decl != NULL; decl = TREE_CHAIN (decl)) { ! register dw_die_ref die; if (TREE_CODE (decl) == FUNCTION_DECL) die = lookup_decl_die (decl); --- 11361,11369 ---- declared directly within this block but not within any nested sub-blocks. Also, nested function and tag DIEs have been generated with a parent of NULL; fix that up now. */ ! for (decl = BLOCK_VARS (stmt); decl != NULL; decl = TREE_CHAIN (decl)) { ! dw_die_ref die; if (TREE_CODE (decl) == FUNCTION_DECL) die = lookup_decl_die (decl); *************** decls_for_scope (stmt, context_die, dept *** 10615,10621 **** static inline int is_redundant_typedef (decl) ! register tree decl; { if (TYPE_DECL_IS_STUB (decl)) return 1; --- 11390,11396 ---- static inline int is_redundant_typedef (decl) ! tree decl; { if (TYPE_DECL_IS_STUB (decl)) return 1; *************** is_redundant_typedef (decl) *** 10635,10654 **** static void gen_decl_die (decl, context_die) ! register tree decl; ! register dw_die_ref context_die; { ! register tree origin; ! ! if (TREE_CODE (decl) == ERROR_MARK) ! return; ! /* If this ..._DECL node is marked to be ignored, then ignore it. */ ! if (DECL_IGNORED_P (decl)) return; switch (TREE_CODE (decl)) { case CONST_DECL: /* The individual enumerators of an enum type get output when we output the Dwarf representation of the relevant enum type itself. */ --- 11410,11428 ---- static void gen_decl_die (decl, context_die) ! tree decl; ! dw_die_ref context_die; { ! tree origin; ! if (DECL_P (decl) && DECL_IGNORED_P (decl)) return; switch (TREE_CODE (decl)) { + case ERROR_MARK: + break; + case CONST_DECL: /* The individual enumerators of an enum type get output when we output the Dwarf representation of the relevant enum type itself. */ *************** gen_decl_die (decl, context_die) *** 10664,10669 **** --- 11438,11444 ---- /* If we're emitting a clone, emit info for the abstract instance. */ if (DECL_ORIGIN (decl) != decl) dwarf2out_abstract_function (DECL_ABSTRACT_ORIGIN (decl)); + /* If we're emitting an out-of-line copy of an inline function, emit info for the abstract instance and set up to refer to it. */ else if (DECL_INLINE (decl) && ! DECL_ABSTRACT (decl) *************** gen_decl_die (decl, context_die) *** 10676,10681 **** --- 11451,11457 ---- dwarf2out_abstract_function (decl); set_decl_origin_self (decl); } + /* Otherwise we're emitting the primary DIE for this decl. */ else if (debug_info_level > DINFO_LEVEL_TERSE) { *************** gen_decl_die (decl, context_die) *** 10703,10715 **** if (debug_info_level <= DINFO_LEVEL_TERSE) break; ! /* In the special case of a TYPE_DECL node representing the ! declaration of some type tag, if the given TYPE_DECL is marked as ! having been instantiated from some other (original) TYPE_DECL node ! (e.g. one which was generated within the original definition of an ! inline function) we have to generate a special (abbreviated) ! DW_TAG_structure_type, DW_TAG_union_type, or DW_TAG_enumeration_type ! DIE here. */ if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE) { gen_tagged_type_instantiation_die (TREE_TYPE (decl), context_die); --- 11479,11490 ---- if (debug_info_level <= DINFO_LEVEL_TERSE) break; ! /* In the special case of a TYPE_DECL node representing the declaration ! of some type tag, if the given TYPE_DECL is marked as having been ! instantiated from some other (original) TYPE_DECL node (e.g. one which ! was generated within the original definition of an inline function) we ! have to generate a special (abbreviated) DW_TAG_structure_type, ! DW_TAG_union_type, or DW_TAG_enumeration_type DIE here. */ if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE) { gen_tagged_type_instantiation_die (TREE_TYPE (decl), context_die); *************** gen_decl_die (decl, context_die) *** 10755,10762 **** break; case FIELD_DECL: ! /* Ignore the nameless fields that are used to skip bits, but ! handle C++ anonymous unions. */ if (DECL_NAME (decl) != NULL_TREE || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE) { --- 11530,11537 ---- break; case FIELD_DECL: ! /* Ignore the nameless fields that are used to skip bits but handle C++ ! anonymous unions. */ if (DECL_NAME (decl) != NULL_TREE || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE) { *************** gen_decl_die (decl, context_die) *** 10778,10783 **** --- 11553,11567 ---- abort (); } } + + static void + mark_limbo_die_list (ptr) + void *ptr ATTRIBUTE_UNUSED; + { + limbo_die_node *node; + for (node = limbo_die_list; node ; node = node->next) + ggc_mark_tree (node->created_for); + } /* Add Ada "use" clause information for SGI Workshop debugger. */ *************** dwarf2out_add_library_unit_info (filenam *** 10790,10796 **** if (filename != NULL) { ! dw_die_ref unit_die = new_die (DW_TAG_module, comp_unit_die); tree context_list_decl = build_decl (LABEL_DECL, get_identifier (context_list), void_type_node); --- 11574,11580 ---- if (filename != NULL) { ! dw_die_ref unit_die = new_die (DW_TAG_module, comp_unit_die, NULL); tree context_list_decl = build_decl (LABEL_DECL, get_identifier (context_list), void_type_node); *************** dwarf2out_add_library_unit_info (filenam *** 10803,10825 **** } } /* Write the debugging output for DECL. */ void dwarf2out_decl (decl) ! register tree decl; { ! register dw_die_ref context_die = comp_unit_die; ! ! if (TREE_CODE (decl) == ERROR_MARK) ! return; ! ! /* If this ..._DECL node is marked to be ignored, then ignore it. */ ! if (DECL_IGNORED_P (decl)) ! return; switch (TREE_CODE (decl)) { case FUNCTION_DECL: /* Ignore this FUNCTION_DECL if it refers to a builtin declaration of a builtin function. Explicit programmer-supplied declarations of --- 11587,11620 ---- } } + /* Output debug information for global decl DECL. Called from toplev.c after + compilation proper has finished. */ + + static void + dwarf2out_global_decl (decl) + tree decl; + { + /* Output DWARF2 information for file-scope tentative data object + declarations, file-scope (extern) function declarations (which had no + corresponding body) and file-scope tagged type declarations and + definitions which have not yet been forced out. */ + if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl)) + dwarf2out_decl (decl); + } + /* Write the debugging output for DECL. */ void dwarf2out_decl (decl) ! tree decl; { ! dw_die_ref context_die = comp_unit_die; switch (TREE_CODE (decl)) { + case ERROR_MARK: + return; + case FUNCTION_DECL: /* Ignore this FUNCTION_DECL if it refers to a builtin declaration of a builtin function. Explicit programmer-supplied declarations of *************** dwarf2out_decl (decl) *** 10836,10857 **** file-scope function declarations which are not also definitions. If and when the debugger needs to know something about these functions, it will have to hunt around and find the DWARF information associated ! with the definition of the function. Note that we can't just check ! `DECL_EXTERNAL' to find out which FUNCTION_DECL nodes represent ! definitions and which ones represent mere declarations. We have to ! check `DECL_INITIAL' instead. That's because the C front-end ! supports some weird semantics for "extern inline" function ! definitions. These can get inlined within the current translation ! unit (an thus, we need to generate DWARF info for their abstract ! instances so that the DWARF info for the concrete inlined instances ! can have something to refer to) but the compiler never generates any ! out-of-lines instances of such things (despite the fact that they ! *are* definitions). The important point is that the C front-end ! marks these "extern inline" functions as DECL_EXTERNAL, but we need ! to generate DWARF for them anyway. Note that the C++ front-end also ! plays some similar games for inline function definitions appearing ! within include files which also contain ! `#pragma interface' pragmas. */ if (DECL_INITIAL (decl) == NULL_TREE) return; --- 11631,11654 ---- file-scope function declarations which are not also definitions. If and when the debugger needs to know something about these functions, it will have to hunt around and find the DWARF information associated ! with the definition of the function. ! ! We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL ! nodes represent definitions and which ones represent mere ! declarations. We have to check DECL_INITIAL instead. That's because ! the C front-end supports some weird semantics for "extern inline" ! function definitions. These can get inlined within the current ! translation unit (an thus, we need to generate Dwarf info for their ! abstract instances so that the Dwarf info for the concrete inlined ! instances can have something to refer to) but the compiler never ! generates any out-of-lines instances of such things (despite the fact ! that they *are* definitions). ! ! The important point is that the C front-end marks these "extern ! inline" functions as DECL_EXTERNAL, but we need to generate DWARF for ! them anyway. Note that the C++ front-end also plays some similar games ! for inline function definitions appearing within include files which ! also contain `#pragma interface' pragmas. */ if (DECL_INITIAL (decl) == NULL_TREE) return; *************** dwarf2out_decl (decl) *** 10860,10866 **** we're a method, it will be ignored, since we already have a DIE. */ if (decl_function_context (decl)) context_die = NULL; - break; case VAR_DECL: --- 11657,11662 ---- *************** dwarf2out_decl (decl) *** 10894,10900 **** comparisons have. */ if ((get_AT_unsigned (comp_unit_die, DW_AT_language) == DW_LANG_C_plus_plus) ! && TREE_CODE (TREE_TYPE (decl)) == BOOLEAN_TYPE) modified_type_die (TREE_TYPE (decl), 0, 0, NULL); return; --- 11690,11697 ---- comparisons have. */ if ((get_AT_unsigned (comp_unit_die, DW_AT_language) == DW_LANG_C_plus_plus) ! && TREE_CODE (TREE_TYPE (decl)) == BOOLEAN_TYPE ! && ! DECL_IGNORED_P (decl)) modified_type_die (TREE_TYPE (decl), 0, 0, NULL); return; *************** dwarf2out_decl (decl) *** 10921,10929 **** /* Output a marker (i.e. a label) for the beginning of the generated code for a lexical block. */ ! void ! dwarf2out_begin_block (blocknum) ! register unsigned blocknum; { function_section (current_function_decl); ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum); --- 11718,11727 ---- /* Output a marker (i.e. a label) for the beginning of the generated code for a lexical block. */ ! static void ! dwarf2out_begin_block (line, blocknum) ! unsigned int line ATTRIBUTE_UNUSED; ! unsigned int blocknum; { function_section (current_function_decl); ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum); *************** dwarf2out_begin_block (blocknum) *** 10932,10940 **** /* Output a marker (i.e. a label) for the end of the generated code for a lexical block. */ ! void ! dwarf2out_end_block (blocknum) ! register unsigned blocknum; { function_section (current_function_decl); ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum); --- 11730,11739 ---- /* Output a marker (i.e. a label) for the end of the generated code for a lexical block. */ ! static void ! dwarf2out_end_block (line, blocknum) ! unsigned int line ATTRIBUTE_UNUSED; ! unsigned int blocknum; { function_section (current_function_decl); ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum); *************** dwarf2out_end_block (blocknum) *** 10947,10980 **** as we would end up with orphans, and in the presence of scheduling we may end up calling them anyway. */ ! int dwarf2out_ignore_block (block) tree block; { tree decl; for (decl = BLOCK_VARS (block); decl; decl = TREE_CHAIN (decl)) if (TREE_CODE (decl) == FUNCTION_DECL || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl))) return 0; return 1; } ! /* Lookup a filename (in the list of filenames that we know about here in dwarf2out.c) and return its "index". The index of each (known) filename is ! just a unique number which is associated with only that one filename. ! We need such numbers for the sake of generating labels ! (in the .debug_sfnames section) and references to those ! files numbers (in the .debug_srcinfo and.debug_macinfo sections). ! If the filename given as an argument is not found in our current list, ! add it to the list and assign it the next available unique index number. ! In order to speed up searches, we remember the index of the filename ! was looked up last. This handles the majority of all searches. */ static unsigned lookup_filename (file_name) const char *file_name; { ! register unsigned i; /* ??? Why isn't DECL_SOURCE_FILE left null instead. */ if (strcmp (file_name, "") == 0 --- 11746,11781 ---- as we would end up with orphans, and in the presence of scheduling we may end up calling them anyway. */ ! static bool dwarf2out_ignore_block (block) tree block; { tree decl; + for (decl = BLOCK_VARS (block); decl; decl = TREE_CHAIN (decl)) if (TREE_CODE (decl) == FUNCTION_DECL || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl))) return 0; + return 1; } ! /* Lookup FILE_NAME (in the list of filenames that we know about here in dwarf2out.c) and return its "index". The index of each (known) filename is ! just a unique number which is associated with only that one filename. We ! need such numbers for the sake of generating labels (in the .debug_sfnames ! section) and references to those files numbers (in the .debug_srcinfo ! and.debug_macinfo sections). If the filename given as an argument is not ! found in our current list, add it to the list and assign it the next ! available unique index number. In order to speed up searches, we remember ! the index of the filename was looked up last. This handles the majority of ! all searches. */ static unsigned lookup_filename (file_name) const char *file_name; { ! unsigned i; /* ??? Why isn't DECL_SOURCE_FILE left null instead. */ if (strcmp (file_name, "") == 0 *************** lookup_filename (file_name) *** 10984,10994 **** /* Check to see if the file name that was searched on the previous call matches this file name. If so, return the index. */ if (file_table.last_lookup_index != 0) ! if (strcmp (file_name, file_table.table[file_table.last_lookup_index]) == 0) return file_table.last_lookup_index; /* Didn't match the previous lookup, search the table */ ! for (i = 1; i < file_table.in_use; ++i) if (strcmp (file_name, file_table.table[i]) == 0) { file_table.last_lookup_index = i; --- 11785,11796 ---- /* Check to see if the file name that was searched on the previous call matches this file name. If so, return the index. */ if (file_table.last_lookup_index != 0) ! if (0 == strcmp (file_name, ! file_table.table[file_table.last_lookup_index])) return file_table.last_lookup_index; /* Didn't match the previous lookup, search the table */ ! for (i = 1; i < file_table.in_use; i++) if (strcmp (file_name, file_table.table[i]) == 0) { file_table.last_lookup_index = i; *************** init_file_table () *** 11031,11045 **** and record information relating to this source line, in 'line_info_table' for later output of the .debug_line section. */ ! void ! dwarf2out_line (filename, line) ! register const char *filename; ! register unsigned line; { if (debug_info_level >= DINFO_LEVEL_NORMAL) { function_section (current_function_decl); if (DWARF2_ASM_LINE_DEBUG_INFO) { unsigned file_num = lookup_filename (filename); --- 11833,11852 ---- and record information relating to this source line, in 'line_info_table' for later output of the .debug_line section. */ ! static void ! dwarf2out_source_line (line, filename) ! unsigned int line; ! const char *filename; { if (debug_info_level >= DINFO_LEVEL_NORMAL) { function_section (current_function_decl); + /* If requested, emit something human-readable. */ + if (flag_debug_asm) + fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START, + filename, line); + if (DWARF2_ASM_LINE_DEBUG_INFO) { unsigned file_num = lookup_filename (filename); *************** dwarf2out_line (filename, line) *** 11048,11067 **** fprintf (asm_out_file, "\t.loc %d %d 0\n", file_num, line); /* Indicate that line number info exists. */ ! ++line_info_table_in_use; /* Indicate that multiple line number tables exist. */ if (DECL_SECTION_NAME (current_function_decl)) ! ++separate_line_info_table_in_use; } else if (DECL_SECTION_NAME (current_function_decl)) { ! register dw_separate_line_info_ref line_info; ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, SEPARATE_LINE_CODE_LABEL, separate_line_info_table_in_use); - if (flag_debug_asm) - fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START, - filename, line); /* expand the line info table if necessary */ if (separate_line_info_table_in_use --- 11855,11871 ---- fprintf (asm_out_file, "\t.loc %d %d 0\n", file_num, line); /* Indicate that line number info exists. */ ! line_info_table_in_use++; /* Indicate that multiple line number tables exist. */ if (DECL_SECTION_NAME (current_function_decl)) ! separate_line_info_table_in_use++; } else if (DECL_SECTION_NAME (current_function_decl)) { ! dw_separate_line_info_ref line_info; ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, SEPARATE_LINE_CODE_LABEL, separate_line_info_table_in_use); /* expand the line info table if necessary */ if (separate_line_info_table_in_use *************** dwarf2out_line (filename, line) *** 11084,11096 **** } else { ! register dw_line_info_ref line_info; ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, LINE_CODE_LABEL, line_info_table_in_use); - if (flag_debug_asm) - fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START, - filename, line); /* Expand the line info table if necessary. */ if (line_info_table_in_use == line_info_table_allocated) --- 11888,11897 ---- } else { ! dw_line_info_ref line_info; ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, LINE_CODE_LABEL, line_info_table_in_use); /* Expand the line info table if necessary. */ if (line_info_table_in_use == line_info_table_allocated) *************** dwarf2out_line (filename, line) *** 11111,11178 **** } } ! /* Record the beginning of a new source file, for later output ! of the .debug_macinfo section. At present, unimplemented. */ ! void ! dwarf2out_start_source_file (filename) ! register const char *filename ATTRIBUTE_UNUSED; { if (flag_eliminate_dwarf2_dups) { /* Record the beginning of the file for break_out_includes. */ ! dw_die_ref bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die); add_AT_string (bincl_die, DW_AT_name, filename); } } ! /* Record the end of a source file, for later output ! of the .debug_macinfo section. At present, unimplemented. */ ! void ! dwarf2out_end_source_file () { if (flag_eliminate_dwarf2_dups) { ! /* Record the end of the file for break_out_includes. */ ! new_die (DW_TAG_GNU_EINCL, comp_unit_die); } } ! /* Called from check_newline in c-parse.y. The `buffer' parameter contains the tail part of the directive line, i.e. the part which is past the initial whitespace, #, whitespace, directive-name, whitespace part. */ ! void dwarf2out_define (lineno, buffer) ! register unsigned lineno ATTRIBUTE_UNUSED; ! register const char *buffer ATTRIBUTE_UNUSED; { ! static int initialized = 0; ! if (!initialized) { ! dwarf2out_start_source_file (primary_filename); ! initialized = 1; } } ! /* Called from check_newline in c-parse.y. The `buffer' parameter contains the tail part of the directive line, i.e. the part which is past the initial whitespace, #, whitespace, directive-name, whitespace part. */ ! void dwarf2out_undef (lineno, buffer) ! register unsigned lineno ATTRIBUTE_UNUSED; ! register const char *buffer ATTRIBUTE_UNUSED; { } /* Set up for Dwarf output at the start of compilation. */ ! void ! dwarf2out_init (asm_out_file, main_input_filename) ! register FILE *asm_out_file; ! register const char *main_input_filename; { init_file_table (); --- 11912,12000 ---- } } ! /* Record the beginning of a new source file. */ ! static void ! dwarf2out_start_source_file (lineno, filename) ! unsigned int lineno; ! const char *filename; { if (flag_eliminate_dwarf2_dups) { /* Record the beginning of the file for break_out_includes. */ ! dw_die_ref bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die, NULL); add_AT_string (bincl_die, DW_AT_name, filename); } + + if (debug_info_level >= DINFO_LEVEL_VERBOSE) + { + named_section_flags (DEBUG_MACINFO_SECTION, SECTION_DEBUG); + dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file"); + dw2_asm_output_data_uleb128 (lineno, "Included from line number %d", + lineno); + dw2_asm_output_data_uleb128 (lookup_filename (filename), + "Filename we just started"); + } } ! /* Record the end of a source file. */ ! static void ! dwarf2out_end_source_file (lineno) ! unsigned int lineno ATTRIBUTE_UNUSED; { if (flag_eliminate_dwarf2_dups) + /* Record the end of the file for break_out_includes. */ + new_die (DW_TAG_GNU_EINCL, comp_unit_die, NULL); + + if (debug_info_level >= DINFO_LEVEL_VERBOSE) { ! named_section_flags (DEBUG_MACINFO_SECTION, SECTION_DEBUG); ! dw2_asm_output_data (1, DW_MACINFO_end_file, "End file"); } } ! /* Called from debug_define in toplev.c. The `buffer' parameter contains the tail part of the directive line, i.e. the part which is past the initial whitespace, #, whitespace, directive-name, whitespace part. */ ! static void dwarf2out_define (lineno, buffer) ! unsigned lineno ATTRIBUTE_UNUSED; ! const char *buffer ATTRIBUTE_UNUSED; { ! if (debug_info_level >= DINFO_LEVEL_VERBOSE) { ! named_section_flags (DEBUG_MACINFO_SECTION, SECTION_DEBUG); ! dw2_asm_output_data (1, DW_MACINFO_define, "Define macro"); ! dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno); ! dw2_asm_output_nstring (buffer, -1, "The macro"); } } ! /* Called from debug_undef in toplev.c. The `buffer' parameter contains the tail part of the directive line, i.e. the part which is past the initial whitespace, #, whitespace, directive-name, whitespace part. */ ! static void dwarf2out_undef (lineno, buffer) ! unsigned lineno ATTRIBUTE_UNUSED; ! const char *buffer ATTRIBUTE_UNUSED; { + if (debug_info_level >= DINFO_LEVEL_VERBOSE) + { + named_section_flags (DEBUG_MACINFO_SECTION, SECTION_DEBUG); + dw2_asm_output_data (1, DW_MACINFO_undef, "Undefine macro"); + dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno); + dw2_asm_output_nstring (buffer, -1, "The macro"); + } } /* Set up for Dwarf output at the start of compilation. */ ! static void ! dwarf2out_init (main_input_filename) ! const char *main_input_filename; { init_file_table (); *************** dwarf2out_init (asm_out_file, main_input *** 11207,11212 **** --- 12029,12035 ---- = (dw_line_info_ref) xcalloc (LINE_INFO_TABLE_INCREMENT, sizeof (dw_line_info_entry)); line_info_table_allocated = LINE_INFO_TABLE_INCREMENT; + /* Zero-th entry is allocated, but unused */ line_info_table_in_use = 1; *************** dwarf2out_init (asm_out_file, main_input *** 11223,11260 **** VARRAY_RTX_INIT (used_rtx_varray, 32, "used_rtx_varray"); ggc_add_rtx_varray_root (&used_rtx_varray, 1); ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0); ! ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label, ABBREV_SECTION_LABEL, 0); if (DWARF2_GENERATE_TEXT_SECTION_LABEL) ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0); else ! strcpy (text_section_label, stripattributes (TEXT_SECTION)); ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label, DEBUG_INFO_SECTION_LABEL, 0); ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label, DEBUG_LINE_SECTION_LABEL, 0); ! ! ASM_OUTPUT_SECTION (asm_out_file, ABBREV_SECTION); ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label); if (DWARF2_GENERATE_TEXT_SECTION_LABEL) { ! ASM_OUTPUT_SECTION (asm_out_file, TEXT_SECTION); ASM_OUTPUT_LABEL (asm_out_file, text_section_label); } ! ASM_OUTPUT_SECTION (asm_out_file, DEBUG_INFO_SECTION); ! ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label); ! ASM_OUTPUT_SECTION (asm_out_file, DEBUG_LINE_SECTION); ! ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label); } /* Output stuff that dwarf requires at the end of every file, and generate the DWARF-2 debugging info. */ ! void ! dwarf2out_finish () { limbo_die_node *node, *next_node; ! dw_die_ref die; /* Traverse the limbo die list, and add parent/child links. The only dies without parents that should be here are concrete instances of --- 12046,12136 ---- VARRAY_RTX_INIT (used_rtx_varray, 32, "used_rtx_varray"); ggc_add_rtx_varray_root (&used_rtx_varray, 1); + ggc_add_root (&limbo_die_list, 1, 1, mark_limbo_die_list); + ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0); ! ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label, ! DEBUG_ABBREV_SECTION_LABEL, 0); if (DWARF2_GENERATE_TEXT_SECTION_LABEL) ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0); else ! strcpy (text_section_label, stripattributes (TEXT_SECTION_NAME)); ! ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label, DEBUG_INFO_SECTION_LABEL, 0); ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label, DEBUG_LINE_SECTION_LABEL, 0); ! ASM_GENERATE_INTERNAL_LABEL (ranges_section_label, ! DEBUG_RANGES_SECTION_LABEL, 0); ! named_section_flags (DEBUG_ABBREV_SECTION, SECTION_DEBUG); ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label); + named_section_flags (DEBUG_INFO_SECTION, SECTION_DEBUG); + ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label); + named_section_flags (DEBUG_LINE_SECTION, SECTION_DEBUG); + ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label); + + if (debug_info_level >= DINFO_LEVEL_VERBOSE) + { + named_section_flags (DEBUG_MACINFO_SECTION, SECTION_DEBUG); + ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label, + DEBUG_MACINFO_SECTION_LABEL, 0); + ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label); + } + if (DWARF2_GENERATE_TEXT_SECTION_LABEL) { ! text_section (); ASM_OUTPUT_LABEL (asm_out_file, text_section_label); } ! } ! ! /* Allocate a string in .debug_str hash table. */ ! ! static hashnode ! indirect_string_alloc (tab) ! hash_table *tab ATTRIBUTE_UNUSED; ! { ! struct indirect_string_node *node; ! ! node = xmalloc (sizeof (struct indirect_string_node)); ! node->refcount = 0; ! node->form = 0; ! node->label = NULL; ! ! return (hashnode) node; ! } ! ! /* A helper function for dwarf2out_finish called through ! ht_forall. Emit one queued .debug_str string. */ ! ! static int ! output_indirect_string (pfile, h, v) ! struct cpp_reader *pfile ATTRIBUTE_UNUSED; ! hashnode h; ! const PTR v ATTRIBUTE_UNUSED; ! { ! struct indirect_string_node *node = (struct indirect_string_node *) h; ! ! if (node->form == DW_FORM_strp) ! { ! named_section_flags (DEBUG_STR_SECTION, DEBUG_STR_SECTION_FLAGS); ! ASM_OUTPUT_LABEL (asm_out_file, node->label); ! assemble_string ((const char *) HT_STR (&node->id), ! HT_LEN (&node->id) + 1); ! } ! ! return 1; } /* Output stuff that dwarf requires at the end of every file, and generate the DWARF-2 debugging info. */ ! static void ! dwarf2out_finish (input_filename) ! const char *input_filename ATTRIBUTE_UNUSED; { limbo_die_node *node, *next_node; ! dw_die_ref die = 0; /* Traverse the limbo die list, and add parent/child links. The only dies without parents that should be here are concrete instances of *************** dwarf2out_finish () *** 11269,11283 **** --- 12145,12192 ---- if (die->die_parent == NULL) { dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin); + tree context; + if (origin) add_child_die (origin->die_parent, die); else if (die == comp_unit_die) ; + /* If this was an expression for a bound involved in a function + return type, it may be a SAVE_EXPR for which we weren't able + to find a DIE previously. So try now. */ + else if (node->created_for + && TREE_CODE (node->created_for) == SAVE_EXPR + && 0 != (origin = (lookup_decl_die + (SAVE_EXPR_CONTEXT + (node->created_for))))) + add_child_die (origin, die); + else if (errorcount > 0 || sorrycount > 0) + /* It's OK to be confused by errors in the input. */ + add_child_die (comp_unit_die, die); + else if (node->created_for + && ((DECL_P (node->created_for) + && (context = DECL_CONTEXT (node->created_for))) + || (TYPE_P (node->created_for) + && (context = TYPE_CONTEXT (node->created_for)))) + && TREE_CODE (context) == FUNCTION_DECL) + { + /* In certain situations, the lexical block containing a + nested function can be optimized away, which results + in the nested function die being orphaned. Likewise + with the return type of that nested function. Force + this to be a child of the containing function. */ + origin = lookup_decl_die (context); + if (! origin) + abort (); + add_child_die (origin, die); + } else abort (); } + free (node); } + limbo_die_list = NULL; /* Walk through the list of incomplete types again, trying once more to *************** dwarf2out_finish () *** 11300,11318 **** add_sibling_attributes (node->die); /* Output a terminator label for the .text section. */ ! ASM_OUTPUT_SECTION (asm_out_file, TEXT_SECTION); ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, TEXT_END_LABEL, 0); - #if 0 - /* Output a terminator label for the .data section. */ - ASM_OUTPUT_SECTION (asm_out_file, DATA_SECTION); - ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, DATA_END_LABEL, 0); - - /* Output a terminator label for the .bss section. */ - ASM_OUTPUT_SECTION (asm_out_file, BSS_SECTION); - ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, BSS_END_LABEL, 0); - #endif - /* Output the source line correspondence table. We must do this even if there is no line information. Otherwise, on an empty translation unit, we will generate a present, but empty, --- 12209,12217 ---- add_sibling_attributes (node->die); /* Output a terminator label for the .text section. */ ! text_section (); ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, TEXT_END_LABEL, 0); /* Output the source line correspondence table. We must do this even if there is no line information. Otherwise, on an empty translation unit, we will generate a present, but empty, *************** dwarf2out_finish () *** 11320,11329 **** examining the file. */ if (! DWARF2_ASM_LINE_DEBUG_INFO) { ! ASM_OUTPUT_SECTION (asm_out_file, DEBUG_LINE_SECTION); output_line_info (); } /* We can only use the low/high_pc attributes if all of the code was in .text. */ if (separate_line_info_table_in_use == 0) --- 12219,12240 ---- examining the file. */ if (! DWARF2_ASM_LINE_DEBUG_INFO) { ! named_section_flags (DEBUG_LINE_SECTION, SECTION_DEBUG); output_line_info (); } + /* Output location list section if necessary. */ + if (have_location_lists) + { + /* Output the location lists info. */ + named_section_flags (DEBUG_LOC_SECTION, SECTION_DEBUG); + ASM_GENERATE_INTERNAL_LABEL (loc_section_label, + DEBUG_LOC_SECTION_LABEL, 0); + ASM_OUTPUT_LABEL (asm_out_file, loc_section_label); + output_location_lists (die); + have_location_lists = 0; + } + /* We can only use the low/high_pc attributes if all of the code was in .text. */ if (separate_line_info_table_in_use == 0) *************** dwarf2out_finish () *** 11332,11384 **** add_AT_lbl_id (comp_unit_die, DW_AT_high_pc, text_end_label); } if (debug_info_level >= DINFO_LEVEL_NORMAL) add_AT_lbl_offset (comp_unit_die, DW_AT_stmt_list, debug_line_section_label); ! #if 0 /* unimplemented */ ! if (debug_info_level >= DINFO_LEVEL_VERBOSE && primary) ! add_AT_unsigned (die, DW_AT_macro_info, 0); ! #endif /* Output all of the compilation units. We put the main one last so that the offsets are available to output_pubnames. */ for (node = limbo_die_list; node; node = node->next) output_comp_unit (node->die); output_comp_unit (comp_unit_die); /* Output the abbreviation table. */ ! ASM_OUTPUT_SECTION (asm_out_file, ABBREV_SECTION); output_abbrev_section (); if (pubname_table_in_use) { ! /* Output public names table. */ ! ASM_OUTPUT_SECTION (asm_out_file, PUBNAMES_SECTION); output_pubnames (); } ! /* We only put functions in the arange table, so don't write it out if ! we don't have any. */ if (fde_table_in_use) { ! /* Output the address range information. */ ! ASM_OUTPUT_SECTION (asm_out_file, ARANGES_SECTION); output_aranges (); } ! /* At this point, we've switched sections like mad, but we've done ! so behind the back of varasm.c. Unfortunately, used ! named_section to switch sections doesn't work either; GAS 2.9.5 ! is not pleased by: ! ! .section debug_aranges,"a",@progbits ! on i686-pc-linux-gnu. ! By calling force_data_section, we get varasm.c synched back up ! with reality. That makes subsequent calls to text_section and ! such make sense. */ ! force_data_section (); } ! #endif /* DWARF2_DEBUGGING_INFO */ --- 12243,12304 ---- add_AT_lbl_id (comp_unit_die, DW_AT_high_pc, text_end_label); } + /* If it wasn't, we need to give .debug_loc and .debug_ranges an appropriate + "base address". Use zero so that these addresses become absolute. */ + else if (have_location_lists || ranges_table_in_use) + add_AT_addr (comp_unit_die, DW_AT_entry_pc, const0_rtx); + if (debug_info_level >= DINFO_LEVEL_NORMAL) add_AT_lbl_offset (comp_unit_die, DW_AT_stmt_list, debug_line_section_label); ! if (debug_info_level >= DINFO_LEVEL_VERBOSE) ! add_AT_lbl_offset (comp_unit_die, DW_AT_macro_info, macinfo_section_label); /* Output all of the compilation units. We put the main one last so that the offsets are available to output_pubnames. */ for (node = limbo_die_list; node; node = node->next) output_comp_unit (node->die); + output_comp_unit (comp_unit_die); /* Output the abbreviation table. */ ! named_section_flags (DEBUG_ABBREV_SECTION, SECTION_DEBUG); output_abbrev_section (); + /* Output public names table if necessary. */ if (pubname_table_in_use) { ! named_section_flags (DEBUG_PUBNAMES_SECTION, SECTION_DEBUG); output_pubnames (); } ! /* Output the address range information. We only put functions in the arange ! table, so don't write it out if we don't have any. */ if (fde_table_in_use) { ! named_section_flags (DEBUG_ARANGES_SECTION, SECTION_DEBUG); output_aranges (); } ! /* Output ranges section if necessary. */ ! if (ranges_table_in_use) ! { ! named_section_flags (DEBUG_RANGES_SECTION, SECTION_DEBUG); ! ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label); ! output_ranges (); ! } ! /* Have to end the primary source file. */ ! if (debug_info_level >= DINFO_LEVEL_VERBOSE) ! { ! named_section_flags (DEBUG_MACINFO_SECTION, SECTION_DEBUG); ! dw2_asm_output_data (1, DW_MACINFO_end_file, "End file"); ! } ! /* If we emitted any DW_FORM_strp form attribute, output the string ! table too. */ ! if (debug_str_hash) ! ht_forall (debug_str_hash, output_indirect_string, NULL); } ! #endif /* DWARF2_DEBUGGING_INFO || DWARF2_UNWIND_INFO */ diff -Nrc3pad gcc-3.0.4/gcc/dwarf2out.h gcc-3.1/gcc/dwarf2out.h *** gcc-3.0.4/gcc/dwarf2out.h Sun May 13 07:09:53 2001 --- gcc-3.1/gcc/dwarf2out.h Wed Aug 22 14:35:01 2001 *************** *** 1,45 **** /* dwarf2out.h - Various declarations for functions found in dwarf2out.c Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ ! ! extern void dwarf2out_init PARAMS ((FILE *, const char *)); ! extern void dwarf2out_finish PARAMS ((void)); ! ! extern void dwarf2out_define PARAMS ((unsigned, const char *)); ! extern void dwarf2out_undef PARAMS ((unsigned, const char *)); ! extern void dwarf2out_start_source_file PARAMS ((const char *)); ! extern void dwarf2out_end_source_file PARAMS ((void)); - extern void dwarf2out_begin_block PARAMS ((unsigned)); - extern void dwarf2out_end_block PARAMS ((unsigned)); - extern int dwarf2out_ignore_block PARAMS ((tree)); extern void dwarf2out_decl PARAMS ((tree)); - extern void dwarf2out_line PARAMS ((const char *, unsigned)); - extern void dwarf2out_frame_init PARAMS ((void)); extern void dwarf2out_frame_debug PARAMS ((rtx)); - extern void dwarf2out_frame_finish PARAMS ((void)); extern void debug_dwarf PARAMS ((void)); struct die_struct; extern void debug_dwarf_die PARAMS ((struct die_struct *)); extern void dwarf2out_set_demangle_name_func PARAMS ((const char *(*) (const char *))); - extern void dwarf2out_abstract_function PARAMS ((tree)); extern void dwarf2out_add_library_unit_info PARAMS ((const char *, const char *)); extern unsigned current_funcdef_number; --- 1,30 ---- /* dwarf2out.h - Various declarations for functions found in dwarf2out.c Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ extern void dwarf2out_decl PARAMS ((tree)); extern void dwarf2out_frame_debug PARAMS ((rtx)); extern void debug_dwarf PARAMS ((void)); struct die_struct; extern void debug_dwarf_die PARAMS ((struct die_struct *)); extern void dwarf2out_set_demangle_name_func PARAMS ((const char *(*) (const char *))); extern void dwarf2out_add_library_unit_info PARAMS ((const char *, const char *)); extern unsigned current_funcdef_number; diff -Nrc3pad gcc-3.0.4/gcc/dwarfout.c gcc-3.1/gcc/dwarfout.c *** gcc-3.0.4/gcc/dwarfout.c Wed Aug 1 22:24:36 2001 --- gcc-3.1/gcc/dwarfout.c Tue Jan 22 21:58:41 2002 *************** *** 3,24 **** 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Ron Guilmette (rfg@monkeys.com) of Network Computing Devices. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* --- 3,24 ---- 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Ron Guilmette (rfg@monkeys.com) of Network Computing Devices. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* *************** Boston, MA 02111-1307, USA. */ *** 574,582 **** #include "insn-config.h" #include "reload.h" #include "output.h" ! #include "dwarfout.h" #include "toplev.h" #include "tm_p.h" /* NOTE: In the comments in this file, many references are made to so called "Debugging Information Entries". For the sake of brevity, --- 574,584 ---- #include "insn-config.h" #include "reload.h" #include "output.h" ! #include "dwarf2asm.h" #include "toplev.h" #include "tm_p.h" + #include "debug.h" + #include "langhooks.h" /* NOTE: In the comments in this file, many references are made to so called "Debugging Information Entries". For the sake of brevity, *************** static unsigned ft_entries; *** 669,678 **** static const char *primary_filename; - /* Pointer to the most recent filename for which we produced some line info. */ - - static const char *last_filename; - /* Counter to generate unique names for DIEs. */ static unsigned next_unused_dienum = 1; --- 671,676 ---- *************** static int in_class; *** 783,788 **** --- 781,804 ---- /* Forward declarations for functions defined in this file. */ + static void dwarfout_init PARAMS ((const char *)); + static void dwarfout_finish PARAMS ((const char *)); + static void dwarfout_define PARAMS ((unsigned int, const char *)); + static void dwarfout_undef PARAMS ((unsigned int, const char *)); + static void dwarfout_start_source_file PARAMS ((unsigned, const char *)); + static void dwarfout_start_source_file_check PARAMS ((unsigned, const char *)); + static void dwarfout_end_source_file PARAMS ((unsigned)); + static void dwarfout_end_source_file_check PARAMS ((unsigned)); + static void dwarfout_begin_block PARAMS ((unsigned, unsigned)); + static void dwarfout_end_block PARAMS ((unsigned, unsigned)); + static void dwarfout_end_epilogue PARAMS ((void)); + static void dwarfout_source_line PARAMS ((unsigned int, const char *)); + static void dwarfout_end_prologue PARAMS ((unsigned int)); + static void dwarfout_end_function PARAMS ((unsigned int)); + static void dwarfout_function_decl PARAMS ((tree)); + static void dwarfout_global_decl PARAMS ((tree)); + static void dwarfout_deferred_inline_function PARAMS ((tree)); + static void dwarfout_file_scope_decl PARAMS ((tree , int)); static const char *dwarf_tag_name PARAMS ((unsigned)); static const char *dwarf_attr_name PARAMS ((unsigned)); static const char *dwarf_stack_op_name PARAMS ((unsigned)); *************** static void shuffle_filename_entry PARAM *** 909,915 **** static void generate_new_sfname_entry PARAMS ((void)); static unsigned lookup_filename PARAMS ((const char *)); static void generate_srcinfo_entry PARAMS ((unsigned, unsigned)); ! static void generate_macinfo_entry PARAMS ((const char *, const char *)); static int is_pseudo_reg PARAMS ((rtx)); static tree type_main_variant PARAMS ((tree)); static int is_tagged_type PARAMS ((tree)); --- 925,932 ---- static void generate_new_sfname_entry PARAMS ((void)); static unsigned lookup_filename PARAMS ((const char *)); static void generate_srcinfo_entry PARAMS ((unsigned, unsigned)); ! static void generate_macinfo_entry PARAMS ((unsigned int, rtx, ! const char *)); static int is_pseudo_reg PARAMS ((rtx)); static tree type_main_variant PARAMS ((tree)); static int is_tagged_type PARAMS ((tree)); *************** static void retry_incomplete_types PARAM *** 930,944 **** #ifndef VERSION_ASM_OP #define VERSION_ASM_OP "\t.version\t" #endif - #ifndef UNALIGNED_SHORT_ASM_OP - #define UNALIGNED_SHORT_ASM_OP "\t.2byte\t" - #endif - #ifndef UNALIGNED_INT_ASM_OP - #define UNALIGNED_INT_ASM_OP "\t.4byte\t" - #endif - #ifndef ASM_BYTE_OP - #define ASM_BYTE_OP "\t.byte\t" - #endif #ifndef SET_ASM_OP #define SET_ASM_OP "\t.set\t" #endif --- 947,952 ---- *************** static void retry_incomplete_types PARAM *** 973,1010 **** #ifndef LINE_SECTION #define LINE_SECTION ".line" #endif ! #ifndef SFNAMES_SECTION ! #define SFNAMES_SECTION ".debug_sfnames" #endif ! #ifndef SRCINFO_SECTION ! #define SRCINFO_SECTION ".debug_srcinfo" #endif ! #ifndef MACINFO_SECTION ! #define MACINFO_SECTION ".debug_macinfo" #endif ! #ifndef PUBNAMES_SECTION ! #define PUBNAMES_SECTION ".debug_pubnames" #endif ! #ifndef ARANGES_SECTION ! #define ARANGES_SECTION ".debug_aranges" #endif ! #ifndef TEXT_SECTION ! #define TEXT_SECTION ".text" #endif ! #ifndef DATA_SECTION ! #define DATA_SECTION ".data" #endif ! #ifndef DATA1_SECTION ! #define DATA1_SECTION ".data1" #endif ! #ifndef RODATA_SECTION ! #define RODATA_SECTION ".rodata" #endif ! #ifndef RODATA1_SECTION ! #define RODATA1_SECTION ".rodata1" #endif ! #ifndef BSS_SECTION ! #define BSS_SECTION ".bss" #endif /* Definitions of defaults for formats and names of various special --- 981,1018 ---- #ifndef LINE_SECTION #define LINE_SECTION ".line" #endif ! #ifndef DEBUG_SFNAMES_SECTION ! #define DEBUG_SFNAMES_SECTION ".debug_sfnames" #endif ! #ifndef DEBUG_SRCINFO_SECTION ! #define DEBUG_SRCINFO_SECTION ".debug_srcinfo" #endif ! #ifndef DEBUG_MACINFO_SECTION ! #define DEBUG_MACINFO_SECTION ".debug_macinfo" #endif ! #ifndef DEBUG_PUBNAMES_SECTION ! #define DEBUG_PUBNAMES_SECTION ".debug_pubnames" #endif ! #ifndef DEBUG_ARANGES_SECTION ! #define DEBUG_ARANGES_SECTION ".debug_aranges" #endif ! #ifndef TEXT_SECTION_NAME ! #define TEXT_SECTION_NAME ".text" #endif ! #ifndef DATA_SECTION_NAME ! #define DATA_SECTION_NAME ".data" #endif ! #ifndef DATA1_SECTION_NAME ! #define DATA1_SECTION_NAME ".data1" #endif ! #ifndef RODATA_SECTION_NAME ! #define RODATA_SECTION_NAME ".rodata" #endif ! #ifndef RODATA1_SECTION_NAME ! #define RODATA1_SECTION_NAME ".rodata1" #endif ! #ifndef BSS_SECTION_NAME ! #define BSS_SECTION_NAME ".bss" #endif /* Definitions of defaults for formats and names of various special *************** static void retry_incomplete_types PARAM *** 1090,1095 **** --- 1098,1110 ---- #define MACINFO_BEGIN_LABEL "*.L_macinfo_b" #endif + #ifndef DEBUG_ARANGES_BEGIN_LABEL + #define DEBUG_ARANGES_BEGIN_LABEL "*.L_debug_aranges_begin" + #endif + #ifndef DEBUG_ARANGES_END_LABEL + #define DEBUG_ARANGES_END_LABEL "*.L_debug_aranges_end" + #endif + #ifndef DIE_BEGIN_LABEL_FMT #define DIE_BEGIN_LABEL_FMT "*.L_D%u" #endif *************** static void retry_incomplete_types PARAM *** 1190,1343 **** #ifndef ASM_OUTPUT_DWARF_DELTA2 #define ASM_OUTPUT_DWARF_DELTA2(FILE,LABEL1,LABEL2) \ ! do { fprintf ((FILE), "%s", UNALIGNED_SHORT_ASM_OP); \ ! assemble_name (FILE, LABEL1); \ ! fprintf (FILE, "-"); \ ! assemble_name (FILE, LABEL2); \ ! fprintf (FILE, "\n"); \ ! } while (0) #endif #ifndef ASM_OUTPUT_DWARF_DELTA4 #define ASM_OUTPUT_DWARF_DELTA4(FILE,LABEL1,LABEL2) \ ! do { fprintf ((FILE), "%s", UNALIGNED_INT_ASM_OP); \ ! assemble_name (FILE, LABEL1); \ ! fprintf (FILE, "-"); \ ! assemble_name (FILE, LABEL2); \ ! fprintf (FILE, "\n"); \ ! } while (0) #endif #ifndef ASM_OUTPUT_DWARF_TAG #define ASM_OUTPUT_DWARF_TAG(FILE,TAG) \ ! do { \ ! fprintf ((FILE), "%s0x%x", \ ! UNALIGNED_SHORT_ASM_OP, (unsigned) TAG); \ ! if (flag_debug_asm) \ ! fprintf ((FILE), "\t%s %s", \ ! ASM_COMMENT_START, dwarf_tag_name (TAG)); \ ! fputc ('\n', (FILE)); \ ! } while (0) #endif #ifndef ASM_OUTPUT_DWARF_ATTRIBUTE #define ASM_OUTPUT_DWARF_ATTRIBUTE(FILE,ATTR) \ ! do { \ ! fprintf ((FILE), "%s0x%x", \ ! UNALIGNED_SHORT_ASM_OP, (unsigned) ATTR); \ ! if (flag_debug_asm) \ ! fprintf ((FILE), "\t%s %s", \ ! ASM_COMMENT_START, dwarf_attr_name (ATTR)); \ ! fputc ('\n', (FILE)); \ ! } while (0) #endif #ifndef ASM_OUTPUT_DWARF_STACK_OP #define ASM_OUTPUT_DWARF_STACK_OP(FILE,OP) \ ! do { \ ! fprintf ((FILE), "%s0x%x", ASM_BYTE_OP, (unsigned) OP); \ ! if (flag_debug_asm) \ ! fprintf ((FILE), "\t%s %s", \ ! ASM_COMMENT_START, dwarf_stack_op_name (OP)); \ ! fputc ('\n', (FILE)); \ ! } while (0) #endif #ifndef ASM_OUTPUT_DWARF_FUND_TYPE #define ASM_OUTPUT_DWARF_FUND_TYPE(FILE,FT) \ ! do { \ ! fprintf ((FILE), "%s0x%x", \ ! UNALIGNED_SHORT_ASM_OP, (unsigned) FT); \ ! if (flag_debug_asm) \ ! fprintf ((FILE), "\t%s %s", \ ! ASM_COMMENT_START, dwarf_fund_type_name (FT)); \ ! fputc ('\n', (FILE)); \ ! } while (0) #endif #ifndef ASM_OUTPUT_DWARF_FMT_BYTE #define ASM_OUTPUT_DWARF_FMT_BYTE(FILE,FMT) \ ! do { \ ! fprintf ((FILE), "%s0x%x", ASM_BYTE_OP, (unsigned) FMT); \ ! if (flag_debug_asm) \ ! fprintf ((FILE), "\t%s %s", \ ! ASM_COMMENT_START, dwarf_fmt_byte_name (FMT)); \ ! fputc ('\n', (FILE)); \ ! } while (0) #endif #ifndef ASM_OUTPUT_DWARF_TYPE_MODIFIER #define ASM_OUTPUT_DWARF_TYPE_MODIFIER(FILE,MOD) \ ! do { \ ! fprintf ((FILE), "%s0x%x", ASM_BYTE_OP, (unsigned) MOD); \ ! if (flag_debug_asm) \ ! fprintf ((FILE), "\t%s %s", \ ! ASM_COMMENT_START, dwarf_typemod_name (MOD)); \ ! fputc ('\n', (FILE)); \ ! } while (0) #endif #ifndef ASM_OUTPUT_DWARF_ADDR #define ASM_OUTPUT_DWARF_ADDR(FILE,LABEL) \ ! do { fprintf ((FILE), "%s", UNALIGNED_INT_ASM_OP); \ ! assemble_name (FILE, LABEL); \ ! fprintf (FILE, "\n"); \ ! } while (0) #endif #ifndef ASM_OUTPUT_DWARF_ADDR_CONST #define ASM_OUTPUT_DWARF_ADDR_CONST(FILE,RTX) \ ! do { \ ! fprintf ((FILE), "%s", UNALIGNED_INT_ASM_OP); \ ! output_addr_const ((FILE), (RTX)); \ ! fputc ('\n', (FILE)); \ ! } while (0) #endif #ifndef ASM_OUTPUT_DWARF_REF #define ASM_OUTPUT_DWARF_REF(FILE,LABEL) \ ! do { fprintf ((FILE), "%s", UNALIGNED_INT_ASM_OP); \ ! assemble_name (FILE, LABEL); \ ! fprintf (FILE, "\n"); \ ! } while (0) #endif #ifndef ASM_OUTPUT_DWARF_DATA1 #define ASM_OUTPUT_DWARF_DATA1(FILE,VALUE) \ ! fprintf ((FILE), "%s0x%x\n", ASM_BYTE_OP, VALUE) #endif #ifndef ASM_OUTPUT_DWARF_DATA2 #define ASM_OUTPUT_DWARF_DATA2(FILE,VALUE) \ ! fprintf ((FILE), "%s0x%x\n", UNALIGNED_SHORT_ASM_OP, (unsigned) VALUE) #endif #ifndef ASM_OUTPUT_DWARF_DATA4 #define ASM_OUTPUT_DWARF_DATA4(FILE,VALUE) \ ! fprintf ((FILE), "%s0x%x\n", UNALIGNED_INT_ASM_OP, (unsigned) VALUE) #endif #ifndef ASM_OUTPUT_DWARF_DATA8 #define ASM_OUTPUT_DWARF_DATA8(FILE,HIGH_VALUE,LOW_VALUE) \ ! do { \ ! if (WORDS_BIG_ENDIAN) \ ! { \ ! fprintf ((FILE), "%s0x%x\n", UNALIGNED_INT_ASM_OP, HIGH_VALUE); \ ! fprintf ((FILE), "%s0x%x\n", UNALIGNED_INT_ASM_OP, LOW_VALUE); \ ! } \ ! else \ ! { \ ! fprintf ((FILE), "%s0x%x\n", UNALIGNED_INT_ASM_OP, LOW_VALUE); \ ! fprintf ((FILE), "%s0x%x\n", UNALIGNED_INT_ASM_OP, HIGH_VALUE); \ ! } \ ! } while (0) #endif /* ASM_OUTPUT_DWARF_STRING is defined to output an ascii string, but to NOT issue a trailing newline. We define ASM_OUTPUT_DWARF_STRING_NEWLINE based on whether ASM_OUTPUT_DWARF_STRING is defined or not. If it is defined, we call it, then issue the line feed. If not, we supply a ! default defintion of calling ASM_OUTPUT_ASCII */ #ifndef ASM_OUTPUT_DWARF_STRING #define ASM_OUTPUT_DWARF_STRING_NEWLINE(FILE,P) \ --- 1205,1288 ---- #ifndef ASM_OUTPUT_DWARF_DELTA2 #define ASM_OUTPUT_DWARF_DELTA2(FILE,LABEL1,LABEL2) \ ! dw2_asm_output_delta (2, LABEL1, LABEL2, NULL) #endif #ifndef ASM_OUTPUT_DWARF_DELTA4 #define ASM_OUTPUT_DWARF_DELTA4(FILE,LABEL1,LABEL2) \ ! dw2_asm_output_delta (4, LABEL1, LABEL2, NULL) #endif #ifndef ASM_OUTPUT_DWARF_TAG #define ASM_OUTPUT_DWARF_TAG(FILE,TAG) \ ! dw2_asm_output_data (2, TAG, "%s", dwarf_tag_name (TAG)); #endif #ifndef ASM_OUTPUT_DWARF_ATTRIBUTE #define ASM_OUTPUT_DWARF_ATTRIBUTE(FILE,ATTR) \ ! dw2_asm_output_data (2, ATTR, "%s", dwarf_attr_name (ATTR)) #endif #ifndef ASM_OUTPUT_DWARF_STACK_OP #define ASM_OUTPUT_DWARF_STACK_OP(FILE,OP) \ ! dw2_asm_output_data (1, OP, "%s", dwarf_stack_op_name (OP)) #endif #ifndef ASM_OUTPUT_DWARF_FUND_TYPE #define ASM_OUTPUT_DWARF_FUND_TYPE(FILE,FT) \ ! dw2_asm_output_data (2, FT, "%s", dwarf_fund_type_name (FT)) #endif #ifndef ASM_OUTPUT_DWARF_FMT_BYTE #define ASM_OUTPUT_DWARF_FMT_BYTE(FILE,FMT) \ ! dw2_asm_output_data (1, FMT, "%s", dwarf_fmt_byte_name (FMT)); #endif #ifndef ASM_OUTPUT_DWARF_TYPE_MODIFIER #define ASM_OUTPUT_DWARF_TYPE_MODIFIER(FILE,MOD) \ ! dw2_asm_output_data (1, MOD, "%s", dwarf_typemod_name (MOD)); #endif #ifndef ASM_OUTPUT_DWARF_ADDR #define ASM_OUTPUT_DWARF_ADDR(FILE,LABEL) \ ! dw2_asm_output_addr (4, LABEL, NULL) #endif #ifndef ASM_OUTPUT_DWARF_ADDR_CONST #define ASM_OUTPUT_DWARF_ADDR_CONST(FILE,RTX) \ ! dw2_asm_output_addr_rtx (4, RTX, NULL) #endif #ifndef ASM_OUTPUT_DWARF_REF #define ASM_OUTPUT_DWARF_REF(FILE,LABEL) \ ! dw2_asm_output_addr (4, LABEL, NULL) #endif #ifndef ASM_OUTPUT_DWARF_DATA1 #define ASM_OUTPUT_DWARF_DATA1(FILE,VALUE) \ ! dw2_asm_output_data (1, VALUE, NULL) #endif #ifndef ASM_OUTPUT_DWARF_DATA2 #define ASM_OUTPUT_DWARF_DATA2(FILE,VALUE) \ ! dw2_asm_output_data (2, VALUE, NULL) #endif #ifndef ASM_OUTPUT_DWARF_DATA4 #define ASM_OUTPUT_DWARF_DATA4(FILE,VALUE) \ ! dw2_asm_output_data (4, VALUE, NULL) #endif #ifndef ASM_OUTPUT_DWARF_DATA8 #define ASM_OUTPUT_DWARF_DATA8(FILE,HIGH_VALUE,LOW_VALUE) \ ! dw2_asm_output_data (8, VALUE, NULL) #endif /* ASM_OUTPUT_DWARF_STRING is defined to output an ascii string, but to NOT issue a trailing newline. We define ASM_OUTPUT_DWARF_STRING_NEWLINE based on whether ASM_OUTPUT_DWARF_STRING is defined or not. If it is defined, we call it, then issue the line feed. If not, we supply a ! default definition of calling ASM_OUTPUT_ASCII */ #ifndef ASM_OUTPUT_DWARF_STRING #define ASM_OUTPUT_DWARF_STRING_NEWLINE(FILE,P) \ *************** static void retry_incomplete_types PARAM *** 1348,1367 **** #endif /************************ general utility functions **************************/ static inline int is_pseudo_reg (rtl) ! register rtx rtl; { return (((GET_CODE (rtl) == REG) && (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)) || ((GET_CODE (rtl) == SUBREG) ! && (REGNO (XEXP (rtl, 0)) >= FIRST_PSEUDO_REGISTER))); } static inline tree type_main_variant (type) ! register tree type; { type = TYPE_MAIN_VARIANT (type); --- 1293,1337 ---- #endif + /* The debug hooks structure. */ + struct gcc_debug_hooks dwarf_debug_hooks = + { + dwarfout_init, + dwarfout_finish, + dwarfout_define, + dwarfout_undef, + dwarfout_start_source_file_check, + dwarfout_end_source_file_check, + dwarfout_begin_block, + dwarfout_end_block, + debug_true_tree, /* ignore_block */ + dwarfout_source_line, /* source_line */ + dwarfout_source_line, /* begin_prologue */ + dwarfout_end_prologue, + dwarfout_end_epilogue, + debug_nothing_tree, /* begin_function */ + dwarfout_end_function, + dwarfout_function_decl, + dwarfout_global_decl, + dwarfout_deferred_inline_function, + debug_nothing_tree, /* outlining_inline_function */ + debug_nothing_rtx /* label */ + }; + /************************ general utility functions **************************/ static inline int is_pseudo_reg (rtl) ! rtx rtl; { return (((GET_CODE (rtl) == REG) && (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)) || ((GET_CODE (rtl) == SUBREG) ! && (REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER))); } static inline tree type_main_variant (type) ! tree type; { type = TYPE_MAIN_VARIANT (type); *************** type_main_variant (type) *** 1383,1391 **** static inline int is_tagged_type (type) ! register tree type; { ! register enum tree_code code = TREE_CODE (type); return (code == RECORD_TYPE || code == UNION_TYPE || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE); --- 1353,1361 ---- static inline int is_tagged_type (type) ! tree type; { ! enum tree_code code = TREE_CODE (type); return (code == RECORD_TYPE || code == UNION_TYPE || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE); *************** is_tagged_type (type) *** 1393,1399 **** static const char * dwarf_tag_name (tag) ! register unsigned tag; { switch (tag) { --- 1363,1369 ---- static const char * dwarf_tag_name (tag) ! unsigned tag; { switch (tag) { *************** dwarf_tag_name (tag) *** 1443,1449 **** static const char * dwarf_attr_name (attr) ! register unsigned attr; { switch (attr) { --- 1413,1419 ---- static const char * dwarf_attr_name (attr) ! unsigned attr; { switch (attr) { *************** dwarf_attr_name (attr) *** 1521,1527 **** static const char * dwarf_stack_op_name (op) ! register unsigned op; { switch (op) { --- 1491,1497 ---- static const char * dwarf_stack_op_name (op) ! unsigned op; { switch (op) { *************** dwarf_stack_op_name (op) *** 1538,1544 **** static const char * dwarf_typemod_name (mod) ! register unsigned mod; { switch (mod) { --- 1508,1514 ---- static const char * dwarf_typemod_name (mod) ! unsigned mod; { switch (mod) { *************** dwarf_typemod_name (mod) *** 1552,1558 **** static const char * dwarf_fmt_byte_name (fmt) ! register unsigned fmt; { switch (fmt) { --- 1522,1528 ---- static const char * dwarf_fmt_byte_name (fmt) ! unsigned fmt; { switch (fmt) { *************** dwarf_fmt_byte_name (fmt) *** 1571,1577 **** static const char * dwarf_fund_type_name (ft) ! register unsigned ft; { switch (ft) { --- 1541,1547 ---- static const char * dwarf_fund_type_name (ft) ! unsigned ft; { switch (ft) { *************** dwarf_fund_type_name (ft) *** 1637,1643 **** static tree decl_ultimate_origin (decl) ! register tree decl; { #ifdef ENABLE_CHECKING if (DECL_FROM_INLINE (DECL_ORIGIN (decl))) --- 1607,1613 ---- static tree decl_ultimate_origin (decl) ! tree decl; { #ifdef ENABLE_CHECKING if (DECL_FROM_INLINE (DECL_ORIGIN (decl))) *************** decl_ultimate_origin (decl) *** 1657,1672 **** static tree block_ultimate_origin (block) ! register tree block; { ! register tree immediate_origin = BLOCK_ABSTRACT_ORIGIN (block); if (immediate_origin == NULL) return NULL; else { ! register tree ret_val; ! register tree lookahead = immediate_origin; do { --- 1627,1642 ---- static tree block_ultimate_origin (block) ! tree block; { ! tree immediate_origin = BLOCK_ABSTRACT_ORIGIN (block); if (immediate_origin == NULL) return NULL; else { ! tree ret_val; ! tree lookahead = immediate_origin; do { *************** decl_class_context (decl) *** 1704,1740 **** #if 0 static void output_unsigned_leb128 (value) ! register unsigned long value; { ! register unsigned long orig_value = value; do { ! register unsigned byte = (value & 0x7f); value >>= 7; if (value != 0) /* more bytes to follow */ byte |= 0x80; ! fprintf (asm_out_file, "%s0x%x", ASM_BYTE_OP, (unsigned) byte); ! if (flag_debug_asm && value == 0) ! fprintf (asm_out_file, "\t%s ULEB128 number - value = %lu", ! ASM_COMMENT_START, orig_value); ! fputc ('\n', asm_out_file); } while (value != 0); } static void output_signed_leb128 (value) ! register long value; { ! register long orig_value = value; ! register int negative = (value < 0); ! register int more; do { ! register unsigned byte = (value & 0x7f); value >>= 7; if (negative) --- 1674,1707 ---- #if 0 static void output_unsigned_leb128 (value) ! unsigned long value; { ! unsigned long orig_value = value; do { ! unsigned byte = (value & 0x7f); value >>= 7; if (value != 0) /* more bytes to follow */ byte |= 0x80; ! dw2_asm_output_data (1, byte, "\t%s ULEB128 number - value = %lu", ! orig_value); } while (value != 0); } static void output_signed_leb128 (value) ! long value; { ! long orig_value = value; ! int negative = (value < 0); ! int more; do { ! unsigned byte = (value & 0x7f); value >>= 7; if (negative) *************** output_signed_leb128 (value) *** 1747,1757 **** byte |= 0x80; more = 1; } ! fprintf (asm_out_file, "%s0x%x", ASM_BYTE_OP, (unsigned) byte); ! if (flag_debug_asm && more == 0) ! fprintf (asm_out_file, "\t%s SLEB128 number - value = %ld", ! ASM_COMMENT_START, orig_value); ! fputc ('\n', asm_out_file); } while (more); } --- 1714,1721 ---- byte |= 0x80; more = 1; } ! dw2_asm_output_data (1, byte, "\t%s SLEB128 number - value = %ld", ! orig_value); } while (more); } *************** output_signed_leb128 (value) *** 1776,1782 **** struct s { my_type f; }; ! Since we may be stuck here without enought information to do exactly what is called for in the Dwarf draft specification, we do the best that we can under the circumstances and always use the "plain" integral fundamental type codes for int, short, and long types. That's probably --- 1740,1746 ---- struct s { my_type f; }; ! Since we may be stuck here without enough information to do exactly what is called for in the Dwarf draft specification, we do the best that we can under the circumstances and always use the "plain" integral fundamental type codes for int, short, and long types. That's probably *************** output_signed_leb128 (value) *** 1785,1791 **** static int fundamental_type_code (type) ! register tree type; { if (TREE_CODE (type) == ERROR_MARK) return 0; --- 1749,1755 ---- static int fundamental_type_code (type) ! tree type; { if (TREE_CODE (type) == ERROR_MARK) return 0; *************** fundamental_type_code (type) *** 1808,1814 **** && DECL_NAME (TYPE_NAME (type)) != 0 && TREE_CODE (DECL_NAME (TYPE_NAME (type))) == IDENTIFIER_NODE) { ! const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))); if (!strcmp (name, "unsigned char")) --- 1772,1778 ---- && DECL_NAME (TYPE_NAME (type)) != 0 && TREE_CODE (DECL_NAME (TYPE_NAME (type))) == IDENTIFIER_NODE) { ! const char *const name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))); if (!strcmp (name, "unsigned char")) *************** fundamental_type_code (type) *** 1867,1876 **** && DECL_NAME (TYPE_NAME (type)) != 0 && TREE_CODE (DECL_NAME (TYPE_NAME (type))) == IDENTIFIER_NODE) { ! const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))); ! /* Note that here we can run afowl of a serious bug in "classic" svr4 SDB debuggers. They don't seem to understand the FT_ext_prec_float type (even though they should). */ --- 1831,1840 ---- && DECL_NAME (TYPE_NAME (type)) != 0 && TREE_CODE (DECL_NAME (TYPE_NAME (type))) == IDENTIFIER_NODE) { ! const char *const name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))); ! /* Note that here we can run afoul of a serious bug in "classic" svr4 SDB debuggers. They don't seem to understand the FT_ext_prec_float type (even though they should). */ *************** fundamental_type_code (type) *** 1892,1898 **** if (TYPE_PRECISION (type) == FLOAT_TYPE_SIZE) return FT_float; ! /* Note that here we can run afowl of a serious bug in "classic" svr4 SDB debuggers. They don't seem to understand the FT_ext_prec_float type (even though they should). */ --- 1856,1862 ---- if (TYPE_PRECISION (type) == FLOAT_TYPE_SIZE) return FT_float; ! /* Note that here we can run afoul of a serious bug in "classic" svr4 SDB debuggers. They don't seem to understand the FT_ext_prec_float type (even though they should). */ *************** fundamental_type_code (type) *** 1927,1934 **** static tree root_type_1 (type, count) ! register tree type; ! register int count; { /* Give up after searching 1000 levels, in case this is a recursive pointer type. Such types are possible in Ada, but it is not possible --- 1891,1898 ---- static tree root_type_1 (type, count) ! tree type; ! int count; { /* Give up after searching 1000 levels, in case this is a recursive pointer type. Such types are possible in Ada, but it is not possible *************** root_type_1 (type, count) *** 1952,1958 **** static tree root_type (type) ! register tree type; { type = root_type_1 (type, 0); if (type != error_mark_node) --- 1916,1922 ---- static tree root_type (type) ! tree type; { type = root_type_1 (type, 0); if (type != error_mark_node) *************** root_type (type) *** 1965,1974 **** static void write_modifier_bytes_1 (type, decl_const, decl_volatile, count) ! register tree type; ! register int decl_const; ! register int decl_volatile; ! register int count; { if (TREE_CODE (type) == ERROR_MARK) return; --- 1929,1938 ---- static void write_modifier_bytes_1 (type, decl_const, decl_volatile, count) ! tree type; ! int decl_const; ! int decl_volatile; ! int count; { if (TREE_CODE (type) == ERROR_MARK) return; *************** write_modifier_bytes_1 (type, decl_const *** 2003,2011 **** static void write_modifier_bytes (type, decl_const, decl_volatile) ! register tree type; ! register int decl_const; ! register int decl_volatile; { write_modifier_bytes_1 (type, decl_const, decl_volatile, 0); } --- 1967,1975 ---- static void write_modifier_bytes (type, decl_const, decl_volatile) ! tree type; ! int decl_const; ! int decl_volatile; { write_modifier_bytes_1 (type, decl_const, decl_volatile, 0); } *************** write_modifier_bytes (type, decl_const, *** 2015,2021 **** static inline int type_is_fundamental (type) ! register tree type; { switch (TREE_CODE (type)) { --- 1979,1985 ---- static inline int type_is_fundamental (type) ! tree type; { switch (TREE_CODE (type)) { *************** type_is_fundamental (type) *** 2065,2071 **** static void equate_decl_number_to_die_number (decl) ! register tree decl; { /* In the case where we are generating a DIE for some ..._DECL node which represents either some inline function declaration or some --- 2029,2035 ---- static void equate_decl_number_to_die_number (decl) ! tree decl; { /* In the case where we are generating a DIE for some ..._DECL node which represents either some inline function declaration or some *************** equate_decl_number_to_die_number (decl) *** 2097,2103 **** static inline void equate_type_number_to_die_number (type) ! register tree type; { char type_label[MAX_ARTIFICIAL_LABEL_BYTES]; char die_label[MAX_ARTIFICIAL_LABEL_BYTES]; --- 2061,2067 ---- static inline void equate_type_number_to_die_number (type) ! tree type; { char type_label[MAX_ARTIFICIAL_LABEL_BYTES]; char die_label[MAX_ARTIFICIAL_LABEL_BYTES]; *************** equate_type_number_to_die_number (type) *** 2116,2124 **** static void output_reg_number (rtl) ! register rtx rtl; { ! register unsigned regno = REGNO (rtl); if (regno >= DWARF_FRAME_REGISTERS) { --- 2080,2088 ---- static void output_reg_number (rtl) ! rtx rtl; { ! unsigned regno = REGNO (rtl); if (regno >= DWARF_FRAME_REGISTERS) { *************** output_reg_number (rtl) *** 2126,2133 **** regno); regno = 0; } ! fprintf (asm_out_file, "%s0x%x", ! UNALIGNED_INT_ASM_OP, DBX_REGISTER_NUMBER (regno)); if (flag_debug_asm) { fprintf (asm_out_file, "\t%s ", ASM_COMMENT_START); --- 2090,2096 ---- regno); regno = 0; } ! dw2_assemble_integer (4, GEN_INT (DBX_REGISTER_NUMBER (regno))); if (flag_debug_asm) { fprintf (asm_out_file, "\t%s ", ASM_COMMENT_START); *************** output_reg_number (rtl) *** 2148,2154 **** static void output_mem_loc_descriptor (rtl) ! register rtx rtl; { /* Note that for a dynamically sized array, the location we will generate a description of here will be the lowest numbered location --- 2111,2117 ---- static void output_mem_loc_descriptor (rtl) ! rtx rtl; { /* Note that for a dynamically sized array, the location we will generate a description of here will be the lowest numbered location *************** output_mem_loc_descriptor (rtl) *** 2169,2175 **** legitimate to make the Dwarf info refer to the whole register which contains the given subreg. */ ! rtl = XEXP (rtl, 0); /* Drop thru. */ case REG: --- 2132,2138 ---- legitimate to make the Dwarf info refer to the whole register which contains the given subreg. */ ! rtl = SUBREG_REG (rtl); /* Drop thru. */ case REG: *************** output_mem_loc_descriptor (rtl) *** 2241,2247 **** static void output_loc_descriptor (rtl) ! register rtx rtl; { switch (GET_CODE (rtl)) { --- 2204,2210 ---- static void output_loc_descriptor (rtl) ! rtx rtl; { switch (GET_CODE (rtl)) { *************** output_loc_descriptor (rtl) *** 2253,2259 **** legitimate to make the Dwarf info refer to the whole register which contains the given subreg. */ ! rtl = XEXP (rtl, 0); /* Drop thru. */ case REG: --- 2216,2222 ---- legitimate to make the Dwarf info refer to the whole register which contains the given subreg. */ ! rtl = SUBREG_REG (rtl); /* Drop thru. */ case REG: *************** output_loc_descriptor (rtl) *** 2275,2283 **** static void output_bound_representation (bound, dim_num, u_or_l) ! register tree bound; ! register unsigned dim_num; /* For multi-dimensional arrays. */ ! register char u_or_l; /* Designates upper or lower bound. */ { switch (TREE_CODE (bound)) { --- 2238,2246 ---- static void output_bound_representation (bound, dim_num, u_or_l) ! tree bound; ! unsigned dim_num; /* For multi-dimensional arrays. */ ! char u_or_l; /* Designates upper or lower bound. */ { switch (TREE_CODE (bound)) { *************** output_bound_representation (bound, dim_ *** 2332,2338 **** comprehend that a missing upper bound specification in a array type used for a storage class `auto' local array variable indicates that the upper bound is both unknown (at compile- ! time) and unknowable (at run-time) due to optimization. */ if (! optimize) { --- 2295,2301 ---- comprehend that a missing upper bound specification in a array type used for a storage class `auto' local array variable indicates that the upper bound is both unknown (at compile- ! time) and unknowable (at run-time) due to optimization. */ if (! optimize) { *************** output_bound_representation (bound, dim_ *** 2358,2364 **** static void output_enumeral_list (link) ! register tree link; { if (link) { --- 2321,2327 ---- static void output_enumeral_list (link) ! tree link; { if (link) { *************** output_enumeral_list (link) *** 2378,2385 **** static inline HOST_WIDE_INT ceiling (value, boundary) ! register HOST_WIDE_INT value; ! register unsigned int boundary; { return (((value + boundary - 1) / boundary) * boundary); } --- 2341,2348 ---- static inline HOST_WIDE_INT ceiling (value, boundary) ! HOST_WIDE_INT value; ! unsigned int boundary; { return (((value + boundary - 1) / boundary) * boundary); } *************** ceiling (value, boundary) *** 2390,2398 **** static inline tree field_type (decl) ! register tree decl; { ! register tree type; if (TREE_CODE (decl) == ERROR_MARK) return integer_type_node; --- 2353,2361 ---- static inline tree field_type (decl) ! tree decl; { ! tree type; if (TREE_CODE (decl) == ERROR_MARK) return integer_type_node; *************** field_type (decl) *** 2409,2415 **** static inline unsigned int simple_type_align_in_bits (type) ! register tree type; { return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD; } --- 2372,2378 ---- static inline unsigned int simple_type_align_in_bits (type) ! tree type; { return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD; } *************** simple_type_align_in_bits (type) *** 2422,2428 **** static inline unsigned HOST_WIDE_INT simple_type_size_in_bits (type) ! register tree type; { tree type_size_tree; --- 2385,2391 ---- static inline unsigned HOST_WIDE_INT simple_type_size_in_bits (type) ! tree type; { tree type_size_tree; *************** simple_type_size_in_bits (type) *** 2446,2452 **** static HOST_WIDE_INT field_byte_offset (decl) ! register tree decl; { unsigned int type_align_in_bytes; unsigned int type_align_in_bits; --- 2409,2415 ---- static HOST_WIDE_INT field_byte_offset (decl) ! tree decl; { unsigned int type_align_in_bytes; unsigned int type_align_in_bits; *************** field_byte_offset (decl) *** 2534,2540 **** The value we deduce is then used (by the callers of this routine) to generate AT_location and AT_bit_offset attributes for fields (both ! bit-fields and, in the case of AT_location, regular fields as well). */ /* Figure out the bit-distance from the start of the structure to the "deepest" bit of the bit-field. */ --- 2497,2503 ---- The value we deduce is then used (by the callers of this routine) to generate AT_location and AT_bit_offset attributes for fields (both ! bit-fields and, in the case of AT_location, regular fields as well). */ /* Figure out the bit-distance from the start of the structure to the "deepest" bit of the bit-field. */ *************** sibling_attribute () *** 2606,2612 **** static void location_attribute (rtl) ! register rtx rtl; { char begin_label[MAX_ARTIFICIAL_LABEL_BYTES]; char end_label[MAX_ARTIFICIAL_LABEL_BYTES]; --- 2569,2575 ---- static void location_attribute (rtl) ! rtx rtl; { char begin_label[MAX_ARTIFICIAL_LABEL_BYTES]; char end_label[MAX_ARTIFICIAL_LABEL_BYTES]; *************** location_attribute (rtl) *** 2669,2677 **** static void data_member_location_attribute (t) ! register tree t; { ! register unsigned object_offset_in_bytes; char begin_label[MAX_ARTIFICIAL_LABEL_BYTES]; char end_label[MAX_ARTIFICIAL_LABEL_BYTES]; --- 2632,2640 ---- static void data_member_location_attribute (t) ! tree t; { ! unsigned object_offset_in_bytes; char begin_label[MAX_ARTIFICIAL_LABEL_BYTES]; char end_label[MAX_ARTIFICIAL_LABEL_BYTES]; *************** data_member_location_attribute (t) *** 2699,2705 **** static void const_value_attribute (rtl) ! register rtx rtl; { char begin_label[MAX_ARTIFICIAL_LABEL_BYTES]; char end_label[MAX_ARTIFICIAL_LABEL_BYTES]; --- 2662,2668 ---- static void const_value_attribute (rtl) ! rtx rtl; { char begin_label[MAX_ARTIFICIAL_LABEL_BYTES]; char end_label[MAX_ARTIFICIAL_LABEL_BYTES]; *************** const_value_attribute (rtl) *** 2784,2792 **** static void location_or_const_value_attribute (decl) ! register tree decl; { ! register rtx rtl; if (TREE_CODE (decl) == ERROR_MARK) return; --- 2747,2755 ---- static void location_or_const_value_attribute (decl) ! tree decl; { ! rtx rtl; if (TREE_CODE (decl) == ERROR_MARK) return; *************** location_or_const_value_attribute (decl) *** 2878,2885 **** if (rtl == NULL_RTX || is_pseudo_reg (rtl)) { /* This decl represents a formal parameter which was optimized out. */ ! register tree declared_type = type_main_variant (TREE_TYPE (decl)); ! register tree passed_type = type_main_variant (DECL_ARG_TYPE (decl)); /* Note that DECL_INCOMING_RTL may be NULL in here, but we handle *all* cases where (rtl == NULL_RTX) just below. */ --- 2841,2848 ---- if (rtl == NULL_RTX || is_pseudo_reg (rtl)) { /* This decl represents a formal parameter which was optimized out. */ ! tree declared_type = type_main_variant (TREE_TYPE (decl)); ! tree passed_type = type_main_variant (DECL_ARG_TYPE (decl)); /* Note that DECL_INCOMING_RTL may be NULL in here, but we handle *all* cases where (rtl == NULL_RTX) just below. */ *************** location_or_const_value_attribute (decl) *** 2944,2950 **** static inline void name_attribute (name_string) ! register const char *name_string; { if (name_string && *name_string) { --- 2907,2913 ---- static inline void name_attribute (name_string) ! const char *name_string; { if (name_string && *name_string) { *************** name_attribute (name_string) *** 2955,2961 **** static inline void fund_type_attribute (ft_code) ! register unsigned ft_code; { ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_fund_type); ASM_OUTPUT_DWARF_FUND_TYPE (asm_out_file, ft_code); --- 2918,2924 ---- static inline void fund_type_attribute (ft_code) ! unsigned ft_code; { ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_fund_type); ASM_OUTPUT_DWARF_FUND_TYPE (asm_out_file, ft_code); *************** fund_type_attribute (ft_code) *** 2963,2971 **** static void mod_fund_type_attribute (type, decl_const, decl_volatile) ! register tree type; ! register int decl_const; ! register int decl_volatile; { char begin_label[MAX_ARTIFICIAL_LABEL_BYTES]; char end_label[MAX_ARTIFICIAL_LABEL_BYTES]; --- 2926,2934 ---- static void mod_fund_type_attribute (type, decl_const, decl_volatile) ! tree type; ! int decl_const; ! int decl_volatile; { char begin_label[MAX_ARTIFICIAL_LABEL_BYTES]; char end_label[MAX_ARTIFICIAL_LABEL_BYTES]; *************** mod_fund_type_attribute (type, decl_cons *** 2983,2989 **** static inline void user_def_type_attribute (type) ! register tree type; { char ud_type_name[MAX_ARTIFICIAL_LABEL_BYTES]; --- 2946,2952 ---- static inline void user_def_type_attribute (type) ! tree type; { char ud_type_name[MAX_ARTIFICIAL_LABEL_BYTES]; *************** user_def_type_attribute (type) *** 2994,3002 **** static void mod_u_d_type_attribute (type, decl_const, decl_volatile) ! register tree type; ! register int decl_const; ! register int decl_volatile; { char begin_label[MAX_ARTIFICIAL_LABEL_BYTES]; char end_label[MAX_ARTIFICIAL_LABEL_BYTES]; --- 2957,2965 ---- static void mod_u_d_type_attribute (type, decl_const, decl_volatile) ! tree type; ! int decl_const; ! int decl_volatile; { char begin_label[MAX_ARTIFICIAL_LABEL_BYTES]; char end_label[MAX_ARTIFICIAL_LABEL_BYTES]; *************** mod_u_d_type_attribute (type, decl_const *** 3016,3022 **** #ifdef USE_ORDERING_ATTRIBUTE static inline void ordering_attribute (ordering) ! register unsigned ordering; { ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_ordering); ASM_OUTPUT_DWARF_DATA2 (asm_out_file, ordering); --- 2979,2985 ---- #ifdef USE_ORDERING_ATTRIBUTE static inline void ordering_attribute (ordering) ! unsigned ordering; { ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_ordering); ASM_OUTPUT_DWARF_DATA2 (asm_out_file, ordering); *************** ordering_attribute (ordering) *** 3028,3036 **** static void subscript_data_attribute (type) ! register tree type; { ! register unsigned dimension_number; char begin_label[MAX_ARTIFICIAL_LABEL_BYTES]; char end_label[MAX_ARTIFICIAL_LABEL_BYTES]; --- 2991,2999 ---- static void subscript_data_attribute (type) ! tree type; { ! unsigned dimension_number; char begin_label[MAX_ARTIFICIAL_LABEL_BYTES]; char end_label[MAX_ARTIFICIAL_LABEL_BYTES]; *************** subscript_data_attribute (type) *** 3053,3059 **** TREE_CODE (type) == ARRAY_TYPE; type = TREE_TYPE (type), dimension_number++) { ! register tree domain = TYPE_DOMAIN (type); /* Arrays come in three flavors. Unspecified bounds, fixed bounds, and (in GNU C only) variable bounds. Handle all --- 3016,3022 ---- TREE_CODE (type) == ARRAY_TYPE; type = TREE_TYPE (type), dimension_number++) { ! tree domain = TYPE_DOMAIN (type); /* Arrays come in three flavors. Unspecified bounds, fixed bounds, and (in GNU C only) variable bounds. Handle all *************** subscript_data_attribute (type) *** 3063,3070 **** { /* We have an array type with specified bounds. */ ! register tree lower = TYPE_MIN_VALUE (domain); ! register tree upper = TYPE_MAX_VALUE (domain); /* Handle only fundamental types as index types for now. */ if (! type_is_fundamental (domain)) --- 3026,3033 ---- { /* We have an array type with specified bounds. */ ! tree lower = TYPE_MIN_VALUE (domain); ! tree upper = TYPE_MAX_VALUE (domain); /* Handle only fundamental types as index types for now. */ if (! type_is_fundamental (domain)) *************** subscript_data_attribute (type) *** 3127,3135 **** static void byte_size_attribute (tree_node) ! register tree tree_node; { ! register unsigned size; ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_byte_size); switch (TREE_CODE (tree_node)) --- 3090,3098 ---- static void byte_size_attribute (tree_node) ! tree tree_node; { ! unsigned size; ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_byte_size); switch (TREE_CODE (tree_node)) *************** byte_size_attribute (tree_node) *** 3187,3193 **** static inline void bit_offset_attribute (decl) ! register tree decl; { HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl); tree type = DECL_BIT_FIELD_TYPE (decl); --- 3150,3156 ---- static inline void bit_offset_attribute (decl) ! tree decl; { HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl); tree type = DECL_BIT_FIELD_TYPE (decl); *************** bit_offset_attribute (decl) *** 3240,3246 **** static inline void bit_size_attribute (decl) ! register tree decl; { /* Must be a field and a bit field. */ if (TREE_CODE (decl) != FIELD_DECL --- 3203,3209 ---- static inline void bit_size_attribute (decl) ! tree decl; { /* Must be a field and a bit field. */ if (TREE_CODE (decl) != FIELD_DECL *************** bit_size_attribute (decl) *** 3262,3268 **** static inline void element_list_attribute (element) ! register tree element; { char begin_label[MAX_ARTIFICIAL_LABEL_BYTES]; char end_label[MAX_ARTIFICIAL_LABEL_BYTES]; --- 3225,3231 ---- static inline void element_list_attribute (element) ! tree element; { char begin_label[MAX_ARTIFICIAL_LABEL_BYTES]; char end_label[MAX_ARTIFICIAL_LABEL_BYTES]; *************** element_list_attribute (element) *** 3288,3294 **** static inline void stmt_list_attribute (label) ! register const char *label; { ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_stmt_list); /* Don't use ASM_OUTPUT_DWARF_DATA4 here. */ --- 3251,3257 ---- static inline void stmt_list_attribute (label) ! const char *label; { ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_stmt_list); /* Don't use ASM_OUTPUT_DWARF_DATA4 here. */ *************** stmt_list_attribute (label) *** 3300,3306 **** static inline void low_pc_attribute (asm_low_label) ! register const char *asm_low_label; { ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_low_pc); ASM_OUTPUT_DWARF_ADDR (asm_out_file, asm_low_label); --- 3263,3269 ---- static inline void low_pc_attribute (asm_low_label) ! const char *asm_low_label; { ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_low_pc); ASM_OUTPUT_DWARF_ADDR (asm_out_file, asm_low_label); *************** low_pc_attribute (asm_low_label) *** 3311,3317 **** static inline void high_pc_attribute (asm_high_label) ! register const char *asm_high_label; { ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_high_pc); ASM_OUTPUT_DWARF_ADDR (asm_out_file, asm_high_label); --- 3274,3280 ---- static inline void high_pc_attribute (asm_high_label) ! const char *asm_high_label; { ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_high_pc); ASM_OUTPUT_DWARF_ADDR (asm_out_file, asm_high_label); *************** high_pc_attribute (asm_high_label) *** 3321,3327 **** static inline void body_begin_attribute (asm_begin_label) ! register const char *asm_begin_label; { ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_body_begin); ASM_OUTPUT_DWARF_ADDR (asm_out_file, asm_begin_label); --- 3284,3290 ---- static inline void body_begin_attribute (asm_begin_label) ! const char *asm_begin_label; { ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_body_begin); ASM_OUTPUT_DWARF_ADDR (asm_out_file, asm_begin_label); *************** body_begin_attribute (asm_begin_label) *** 3331,3337 **** static inline void body_end_attribute (asm_end_label) ! register const char *asm_end_label; { ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_body_end); ASM_OUTPUT_DWARF_ADDR (asm_out_file, asm_end_label); --- 3294,3300 ---- static inline void body_end_attribute (asm_end_label) ! const char *asm_end_label; { ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_body_end); ASM_OUTPUT_DWARF_ADDR (asm_out_file, asm_end_label); *************** body_end_attribute (asm_end_label) *** 3342,3348 **** static inline void language_attribute (language_code) ! register unsigned language_code; { ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_language); ASM_OUTPUT_DWARF_DATA4 (asm_out_file, language_code); --- 3305,3311 ---- static inline void language_attribute (language_code) ! unsigned language_code; { ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_language); ASM_OUTPUT_DWARF_DATA4 (asm_out_file, language_code); *************** language_attribute (language_code) *** 3350,3356 **** static inline void member_attribute (context) ! register tree context; { char label[MAX_ARTIFICIAL_LABEL_BYTES]; --- 3313,3319 ---- static inline void member_attribute (context) ! tree context; { char label[MAX_ARTIFICIAL_LABEL_BYTES]; *************** member_attribute (context) *** 3367,3373 **** #if 0 static inline void string_length_attribute (upper_bound) ! register tree upper_bound; { char begin_label[MAX_ARTIFICIAL_LABEL_BYTES]; char end_label[MAX_ARTIFICIAL_LABEL_BYTES]; --- 3330,3336 ---- #if 0 static inline void string_length_attribute (upper_bound) ! tree upper_bound; { char begin_label[MAX_ARTIFICIAL_LABEL_BYTES]; char end_label[MAX_ARTIFICIAL_LABEL_BYTES]; *************** string_length_attribute (upper_bound) *** 3384,3390 **** static inline void comp_dir_attribute (dirname) ! register const char *dirname; { ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_comp_dir); ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, dirname); --- 3347,3353 ---- static inline void comp_dir_attribute (dirname) ! const char *dirname; { ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_comp_dir); ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, dirname); *************** comp_dir_attribute (dirname) *** 3392,3398 **** static inline void sf_names_attribute (sf_names_start_label) ! register const char *sf_names_start_label; { ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_sf_names); /* Don't use ASM_OUTPUT_DWARF_DATA4 here. */ --- 3355,3361 ---- static inline void sf_names_attribute (sf_names_start_label) ! const char *sf_names_start_label; { ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_sf_names); /* Don't use ASM_OUTPUT_DWARF_DATA4 here. */ *************** sf_names_attribute (sf_names_start_label *** 3401,3407 **** static inline void src_info_attribute (src_info_start_label) ! register const char *src_info_start_label; { ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_src_info); /* Don't use ASM_OUTPUT_DWARF_DATA4 here. */ --- 3364,3370 ---- static inline void src_info_attribute (src_info_start_label) ! const char *src_info_start_label; { ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_src_info); /* Don't use ASM_OUTPUT_DWARF_DATA4 here. */ *************** src_info_attribute (src_info_start_label *** 3410,3416 **** static inline void mac_info_attribute (mac_info_start_label) ! register const char *mac_info_start_label; { ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_mac_info); /* Don't use ASM_OUTPUT_DWARF_DATA4 here. */ --- 3373,3379 ---- static inline void mac_info_attribute (mac_info_start_label) ! const char *mac_info_start_label; { ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_mac_info); /* Don't use ASM_OUTPUT_DWARF_DATA4 here. */ *************** mac_info_attribute (mac_info_start_label *** 3419,3427 **** static inline void prototyped_attribute (func_type) ! register tree func_type; { ! if ((strcmp (language_string, "GNU C") == 0) && (TYPE_ARG_TYPES (func_type) != NULL)) { ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_prototyped); --- 3382,3390 ---- static inline void prototyped_attribute (func_type) ! tree func_type; { ! if ((strcmp (lang_hooks.name, "GNU C") == 0) && (TYPE_ARG_TYPES (func_type) != NULL)) { ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_prototyped); *************** prototyped_attribute (func_type) *** 3431,3437 **** static inline void producer_attribute (producer) ! register const char *producer; { ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_producer); ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, producer); --- 3394,3400 ---- static inline void producer_attribute (producer) ! const char *producer; { ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_producer); ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, producer); *************** producer_attribute (producer) *** 3439,3445 **** static inline void inline_attribute (decl) ! register tree decl; { if (DECL_INLINE (decl)) { --- 3402,3408 ---- static inline void inline_attribute (decl) ! tree decl; { if (DECL_INLINE (decl)) { *************** inline_attribute (decl) *** 3450,3456 **** static inline void containing_type_attribute (containing_type) ! register tree containing_type; { char label[MAX_ARTIFICIAL_LABEL_BYTES]; --- 3413,3419 ---- static inline void containing_type_attribute (containing_type) ! tree containing_type; { char label[MAX_ARTIFICIAL_LABEL_BYTES]; *************** containing_type_attribute (containing_ty *** 3461,3467 **** static inline void abstract_origin_attribute (origin) ! register tree origin; { char label[MAX_ARTIFICIAL_LABEL_BYTES]; --- 3424,3430 ---- static inline void abstract_origin_attribute (origin) ! tree origin; { char label[MAX_ARTIFICIAL_LABEL_BYTES]; *************** abstract_origin_attribute (origin) *** 3486,3493 **** #ifdef DWARF_DECL_COORDINATES static inline void src_coords_attribute (src_fileno, src_lineno) ! register unsigned src_fileno; ! register unsigned src_lineno; { ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_src_coords); ASM_OUTPUT_DWARF_DATA2 (asm_out_file, src_fileno); --- 3449,3456 ---- #ifdef DWARF_DECL_COORDINATES static inline void src_coords_attribute (src_fileno, src_lineno) ! unsigned src_fileno; ! unsigned src_lineno; { ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_src_coords); ASM_OUTPUT_DWARF_DATA2 (asm_out_file, src_fileno); *************** src_coords_attribute (src_fileno, src_li *** 3497,3503 **** static inline void pure_or_virtual_attribute (func_decl) ! register tree func_decl; { if (DECL_VIRTUAL_P (func_decl)) { --- 3460,3466 ---- static inline void pure_or_virtual_attribute (func_decl) ! tree func_decl; { if (DECL_VIRTUAL_P (func_decl)) { *************** pure_or_virtual_attribute (func_decl) *** 3520,3528 **** static void name_and_src_coords_attributes (decl) ! register tree decl; { ! register tree decl_name = DECL_NAME (decl); if (decl_name && IDENTIFIER_POINTER (decl_name)) { --- 3483,3491 ---- static void name_and_src_coords_attributes (decl) ! tree decl; { ! tree decl_name = DECL_NAME (decl); if (decl_name && IDENTIFIER_POINTER (decl_name)) { *************** name_and_src_coords_attributes (decl) *** 3556,3567 **** static void type_attribute (type, decl_const, decl_volatile) ! register tree type; ! register int decl_const; ! register int decl_volatile; { ! register enum tree_code code = TREE_CODE (type); ! register int root_type_modified; if (code == ERROR_MARK) return; --- 3519,3530 ---- static void type_attribute (type, decl_const, decl_volatile) ! tree type; ! int decl_const; ! int decl_volatile; { ! enum tree_code code = TREE_CODE (type); ! int root_type_modified; if (code == ERROR_MARK) return; *************** type_attribute (type, decl_const, decl_v *** 3614,3626 **** static const char * type_tag (type) ! register tree type; { ! register const char *name = 0; if (TYPE_NAME (type) != 0) { ! register tree t = 0; /* Find the IDENTIFIER_NODE for the type name. */ if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE) --- 3577,3589 ---- static const char * type_tag (type) ! tree type; { ! const char *name = 0; if (TYPE_NAME (type) != 0) { ! tree t = 0; /* Find the IDENTIFIER_NODE for the type name. */ if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE) *************** dienum_pop () *** 3670,3676 **** static inline tree member_declared_type (member) ! register tree member; { return (DECL_BIT_FIELD_TYPE (member)) ? DECL_BIT_FIELD_TYPE (member) --- 3633,3639 ---- static inline tree member_declared_type (member) ! tree member; { return (DECL_BIT_FIELD_TYPE (member)) ? DECL_BIT_FIELD_TYPE (member) *************** member_declared_type (member) *** 3683,3689 **** static const char * function_start_label (decl) ! register tree decl; { rtx x; const char *fnname; --- 3646,3652 ---- static const char * function_start_label (decl) ! tree decl; { rtx x; const char *fnname; *************** function_start_label (decl) *** 3707,3715 **** static void output_array_type_die (arg) ! register void *arg; { ! register tree type = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_array_type); sibling_attribute (); --- 3670,3678 ---- static void output_array_type_die (arg) ! void *arg; { ! tree type = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_array_type); sibling_attribute (); *************** output_array_type_die (arg) *** 3734,3742 **** static void output_set_type_die (arg) ! register void *arg; { ! register tree type = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_set_type); sibling_attribute (); --- 3697,3705 ---- static void output_set_type_die (arg) ! void *arg; { ! tree type = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_set_type); sibling_attribute (); *************** output_set_type_die (arg) *** 3750,3759 **** static void output_entry_point_die (arg) ! register void *arg; { ! register tree decl = arg; ! register tree origin = decl_ultimate_origin (decl); ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_entry_point); sibling_attribute (); --- 3713,3722 ---- static void output_entry_point_die (arg) ! void *arg; { ! tree decl = arg; ! tree origin = decl_ultimate_origin (decl); ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_entry_point); sibling_attribute (); *************** output_entry_point_die (arg) *** 3777,3785 **** static void output_inlined_enumeration_type_die (arg) ! register void *arg; { ! register tree type = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_enumeration_type); sibling_attribute (); --- 3740,3748 ---- static void output_inlined_enumeration_type_die (arg) ! void *arg; { ! tree type = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_enumeration_type); sibling_attribute (); *************** output_inlined_enumeration_type_die (arg *** 3792,3800 **** static void output_inlined_structure_type_die (arg) ! register void *arg; { ! register tree type = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_structure_type); sibling_attribute (); --- 3755,3763 ---- static void output_inlined_structure_type_die (arg) ! void *arg; { ! tree type = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_structure_type); sibling_attribute (); *************** output_inlined_structure_type_die (arg) *** 3807,3815 **** static void output_inlined_union_type_die (arg) ! register void *arg; { ! register tree type = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_union_type); sibling_attribute (); --- 3770,3778 ---- static void output_inlined_union_type_die (arg) ! void *arg; { ! tree type = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_union_type); sibling_attribute (); *************** output_inlined_union_type_die (arg) *** 3824,3832 **** static void output_enumeration_type_die (arg) ! register void *arg; { ! register tree type = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_enumeration_type); sibling_attribute (); --- 3787,3795 ---- static void output_enumeration_type_die (arg) ! void *arg; { ! tree type = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_enumeration_type); sibling_attribute (); *************** output_enumeration_type_die (arg) *** 3860,3868 **** static void output_formal_parameter_die (arg) ! register void *arg; { ! register tree node = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_formal_parameter); sibling_attribute (); --- 3823,3831 ---- static void output_formal_parameter_die (arg) ! void *arg; { ! tree node = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_formal_parameter); sibling_attribute (); *************** output_formal_parameter_die (arg) *** 3902,3911 **** static void output_global_subroutine_die (arg) ! register void *arg; { ! register tree decl = arg; ! register tree origin = decl_ultimate_origin (decl); ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_global_subroutine); sibling_attribute (); --- 3865,3874 ---- static void output_global_subroutine_die (arg) ! void *arg; { ! tree decl = arg; ! tree origin = decl_ultimate_origin (decl); ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_global_subroutine); sibling_attribute (); *************** output_global_subroutine_die (arg) *** 3914,3920 **** abstract_origin_attribute (origin); else { ! register tree type = TREE_TYPE (decl); name_and_src_coords_attributes (decl); inline_attribute (decl); --- 3877,3883 ---- abstract_origin_attribute (origin); else { ! tree type = TREE_TYPE (decl); name_and_src_coords_attributes (decl); inline_attribute (decl); *************** output_global_subroutine_die (arg) *** 3951,3960 **** static void output_global_variable_die (arg) ! register void *arg; { ! register tree decl = arg; ! register tree origin = decl_ultimate_origin (decl); ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_global_variable); sibling_attribute (); --- 3914,3923 ---- static void output_global_variable_die (arg) ! void *arg; { ! tree decl = arg; ! tree origin = decl_ultimate_origin (decl); ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_global_variable); sibling_attribute (); *************** output_global_variable_die (arg) *** 3979,3988 **** static void output_label_die (arg) ! register void *arg; { ! register tree decl = arg; ! register tree origin = decl_ultimate_origin (decl); ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_label); sibling_attribute (); --- 3942,3951 ---- static void output_label_die (arg) ! void *arg; { ! tree decl = arg; ! tree origin = decl_ultimate_origin (decl); ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_label); sibling_attribute (); *************** output_label_die (arg) *** 3994,4000 **** equate_decl_number_to_die_number (decl); else { ! register rtx insn = DECL_RTL (decl); /* Deleted labels are programmer specified labels which have been eliminated because of various optimisations. We still emit them --- 3957,3963 ---- equate_decl_number_to_die_number (decl); else { ! rtx insn = DECL_RTL (decl); /* Deleted labels are programmer specified labels which have been eliminated because of various optimisations. We still emit them *************** output_label_die (arg) *** 4022,4030 **** static void output_lexical_block_die (arg) ! register void *arg; { ! register tree stmt = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_lexical_block); sibling_attribute (); --- 3985,3993 ---- static void output_lexical_block_die (arg) ! void *arg; { ! tree stmt = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_lexical_block); sibling_attribute (); *************** output_lexical_block_die (arg) *** 4043,4051 **** static void output_inlined_subroutine_die (arg) ! register void *arg; { ! register tree stmt = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_inlined_subroutine); sibling_attribute (); --- 4006,4014 ---- static void output_inlined_subroutine_die (arg) ! void *arg; { ! tree stmt = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_inlined_subroutine); sibling_attribute (); *************** output_inlined_subroutine_die (arg) *** 4068,4077 **** static void output_local_variable_die (arg) ! register void *arg; { ! register tree decl = arg; ! register tree origin = decl_ultimate_origin (decl); ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_local_variable); sibling_attribute (); --- 4031,4040 ---- static void output_local_variable_die (arg) ! void *arg; { ! tree decl = arg; ! tree origin = decl_ultimate_origin (decl); ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_local_variable); sibling_attribute (); *************** output_local_variable_die (arg) *** 4092,4100 **** static void output_member_die (arg) ! register void *arg; { ! register tree decl = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_member); sibling_attribute (); --- 4055,4063 ---- static void output_member_die (arg) ! void *arg; { ! tree decl = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_member); sibling_attribute (); *************** output_member_die (arg) *** 4121,4129 **** static void output_pointer_type_die (arg) ! register void *arg; { ! register tree type = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_pointer_type); sibling_attribute (); --- 4084,4092 ---- static void output_pointer_type_die (arg) ! void *arg; { ! tree type = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_pointer_type); sibling_attribute (); *************** output_pointer_type_die (arg) *** 4134,4142 **** static void output_reference_type_die (arg) ! register void *arg; { ! register tree type = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_reference_type); sibling_attribute (); --- 4097,4105 ---- static void output_reference_type_die (arg) ! void *arg; { ! tree type = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_reference_type); sibling_attribute (); *************** output_reference_type_die (arg) *** 4148,4156 **** static void output_ptr_to_mbr_type_die (arg) ! register void *arg; { ! register tree type = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_ptr_to_member_type); sibling_attribute (); --- 4111,4119 ---- static void output_ptr_to_mbr_type_die (arg) ! void *arg; { ! tree type = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_ptr_to_member_type); sibling_attribute (); *************** output_ptr_to_mbr_type_die (arg) *** 4162,4170 **** static void output_compile_unit_die (arg) ! register void *arg; { ! register const char *main_input_filename = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_compile_unit); sibling_attribute (); --- 4125,4134 ---- static void output_compile_unit_die (arg) ! void *arg; { ! const char *main_input_filename = arg; ! const char *language_string = lang_hooks.name; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_compile_unit); sibling_attribute (); *************** output_compile_unit_die (arg) *** 4196,4202 **** high_pc_attribute (TEXT_END_LABEL); if (debug_info_level >= DINFO_LEVEL_NORMAL) stmt_list_attribute (LINE_BEGIN_LABEL); - last_filename = xstrdup (main_input_filename); { const char *wd = getpwd (); --- 4160,4165 ---- *************** output_compile_unit_die (arg) *** 4215,4223 **** static void output_string_type_die (arg) ! register void *arg; { ! register tree type = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_string_type); sibling_attribute (); --- 4178,4186 ---- static void output_string_type_die (arg) ! void *arg; { ! tree type = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_string_type); sibling_attribute (); *************** output_string_type_die (arg) *** 4229,4237 **** static void output_inheritance_die (arg) ! register void *arg; { ! register tree binfo = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_inheritance); sibling_attribute (); --- 4192,4200 ---- static void output_inheritance_die (arg) ! void *arg; { ! tree binfo = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_inheritance); sibling_attribute (); *************** output_inheritance_die (arg) *** 4256,4264 **** static void output_structure_type_die (arg) ! register void *arg; { ! register tree type = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_structure_type); sibling_attribute (); --- 4219,4227 ---- static void output_structure_type_die (arg) ! void *arg; { ! tree type = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_structure_type); sibling_attribute (); *************** output_structure_type_die (arg) *** 4284,4293 **** static void output_local_subroutine_die (arg) ! register void *arg; { ! register tree decl = arg; ! register tree origin = decl_ultimate_origin (decl); ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_subroutine); sibling_attribute (); --- 4247,4256 ---- static void output_local_subroutine_die (arg) ! void *arg; { ! tree decl = arg; ! tree origin = decl_ultimate_origin (decl); ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_subroutine); sibling_attribute (); *************** output_local_subroutine_die (arg) *** 4296,4302 **** abstract_origin_attribute (origin); else { ! register tree type = TREE_TYPE (decl); name_and_src_coords_attributes (decl); inline_attribute (decl); --- 4259,4265 ---- abstract_origin_attribute (origin); else { ! tree type = TREE_TYPE (decl); name_and_src_coords_attributes (decl); inline_attribute (decl); *************** output_local_subroutine_die (arg) *** 4331,4340 **** static void output_subroutine_type_die (arg) ! register void *arg; { ! register tree type = arg; ! register tree return_type = TREE_TYPE (type); ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_subroutine_type); sibling_attribute (); --- 4294,4303 ---- static void output_subroutine_type_die (arg) ! void *arg; { ! tree type = arg; ! tree return_type = TREE_TYPE (type); ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_subroutine_type); sibling_attribute (); *************** output_subroutine_type_die (arg) *** 4347,4356 **** static void output_typedef_die (arg) ! register void *arg; { ! register tree decl = arg; ! register tree origin = decl_ultimate_origin (decl); ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_typedef); sibling_attribute (); --- 4310,4319 ---- static void output_typedef_die (arg) ! void *arg; { ! tree decl = arg; ! tree origin = decl_ultimate_origin (decl); ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_typedef); sibling_attribute (); *************** output_typedef_die (arg) *** 4369,4377 **** static void output_union_type_die (arg) ! register void *arg; { ! register tree type = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_union_type); sibling_attribute (); --- 4332,4340 ---- static void output_union_type_die (arg) ! void *arg; { ! tree type = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_union_type); sibling_attribute (); *************** output_union_type_die (arg) *** 4397,4405 **** static void output_unspecified_parameters_die (arg) ! register void *arg; { ! register tree decl_or_type = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_unspecified_parameters); sibling_attribute (); --- 4360,4368 ---- static void output_unspecified_parameters_die (arg) ! void *arg; { ! tree decl_or_type = arg; ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_unspecified_parameters); sibling_attribute (); *************** output_unspecified_parameters_die (arg) *** 4423,4429 **** static void output_padded_null_die (arg) ! register void *arg ATTRIBUTE_UNUSED; { ASM_OUTPUT_ALIGN (asm_out_file, 2); /* 2**2 == 4 */ } --- 4386,4392 ---- static void output_padded_null_die (arg) ! void *arg ATTRIBUTE_UNUSED; { ASM_OUTPUT_ALIGN (asm_out_file, 2); /* 2**2 == 4 */ } *************** output_padded_null_die (arg) *** 4438,4445 **** static void output_die (die_specific_output_function, param) ! register void (*die_specific_output_function) PARAMS ((void *)); ! register void *param; { char begin_label[MAX_ARTIFICIAL_LABEL_BYTES]; char end_label[MAX_ARTIFICIAL_LABEL_BYTES]; --- 4401,4408 ---- static void output_die (die_specific_output_function, param) ! void (*die_specific_output_function) PARAMS ((void *)); ! void *param; { char begin_label[MAX_ARTIFICIAL_LABEL_BYTES]; char end_label[MAX_ARTIFICIAL_LABEL_BYTES]; *************** end_sibling_chain () *** 4502,4512 **** static void output_formal_types (function_or_method_type) ! register tree function_or_method_type; { ! register tree link; ! register tree formal_type = NULL; ! register tree first_parm_type = TYPE_ARG_TYPES (function_or_method_type); /* Set TREE_ASM_WRITTEN while processing the parameters, lest we get bogus recursion when outputting tagged types local to a --- 4465,4475 ---- static void output_formal_types (function_or_method_type) ! tree function_or_method_type; { ! tree link; ! tree formal_type = NULL; ! tree first_parm_type = TYPE_ARG_TYPES (function_or_method_type); /* Set TREE_ASM_WRITTEN while processing the parameters, lest we get bogus recursion when outputting tagged types local to a *************** output_formal_types (function_or_method_ *** 4567,4573 **** static void pend_type (type) ! register tree type; { if (pending_types == pending_types_allocated) { --- 4530,4536 ---- static void pend_type (type) ! tree type; { if (pending_types == pending_types_allocated) { *************** pend_type (type) *** 4623,4630 **** static inline int type_ok_for_scope (type, scope) ! register tree type; ! register tree scope; { /* Tagged types (i.e. struct, union, and enum types) must always be output only in the scopes where they actually belong (or else the --- 4586,4593 ---- static inline int type_ok_for_scope (type, scope) ! tree type; ! tree scope; { /* Tagged types (i.e. struct, union, and enum types) must always be output only in the scopes where they actually belong (or else the *************** type_ok_for_scope (type, scope) *** 4660,4677 **** static void output_pending_types_for_scope (containing_scope) ! register tree containing_scope; { ! register unsigned i; for (i = 0; i < pending_types; ) { ! register tree type = pending_types_list[i]; if (type_ok_for_scope (type, containing_scope)) { ! register tree *mover; ! register tree *limit; pending_types--; limit = &pending_types_list[pending_types]; --- 4623,4640 ---- static void output_pending_types_for_scope (containing_scope) ! tree containing_scope; { ! unsigned i; for (i = 0; i < pending_types; ) { ! tree type = pending_types_list[i]; if (type_ok_for_scope (type, containing_scope)) { ! tree *mover; ! tree *limit; pending_types--; limit = &pending_types_list[pending_types]; *************** add_incomplete_type (type) *** 4717,4723 **** static void retry_incomplete_types () { ! register tree type; finalizing = 1; while (incomplete_types) --- 4680,4686 ---- static void retry_incomplete_types () { ! tree type; finalizing = 1; while (incomplete_types) *************** retry_incomplete_types () *** 4730,4737 **** static void output_type (type, containing_scope) ! register tree type; ! register tree containing_scope; { if (type == 0 || type == error_mark_node) return; --- 4693,4700 ---- static void output_type (type, containing_scope) ! tree type; ! tree containing_scope; { if (type == 0 || type == error_mark_node) return; *************** output_type (type, containing_scope) *** 4746,4752 **** { if (finalizing && AGGREGATE_TYPE_P (type)) { ! register tree member; /* Some of our nested types might not have been defined when we were written out before; force them out now. */ --- 4709,4715 ---- { if (finalizing && AGGREGATE_TYPE_P (type)) { ! tree member; /* Some of our nested types might not have been defined when we were written out before; force them out now. */ *************** output_type (type, containing_scope) *** 4844,4850 **** } else { ! register tree element_type; element_type = TREE_TYPE (type); while (TREE_CODE (element_type) == ARRAY_TYPE) --- 4807,4813 ---- } else { ! tree element_type; element_type = TREE_TYPE (type); while (TREE_CODE (element_type) == ARRAY_TYPE) *************** output_type (type, containing_scope) *** 4936,4942 **** to output DIEs to represent the *types* of those members. However the `output_type' function (above) will specifically avoid generating type DIEs for member types *within* the list ! of member DIEs for this (containing) type execpt for those types (of members) which are explicitly marked as also being members of this (containing) type themselves. The g++ front- end can force any given type to be treated as a member of some --- 4899,4905 ---- to output DIEs to represent the *types* of those members. However the `output_type' function (above) will specifically avoid generating type DIEs for member types *within* the list ! of member DIEs for this (containing) type except for those types (of members) which are explicitly marked as also being members of this (containing) type themselves. The g++ front- end can force any given type to be treated as a member of some *************** output_type (type, containing_scope) *** 4965,4971 **** ++in_class; { ! register tree normal_member; /* Now output info about the data members and type members. */ --- 4928,4934 ---- ++in_class; { ! tree normal_member; /* Now output info about the data members and type members. */ *************** output_type (type, containing_scope) *** 4976,4982 **** } { ! register tree func_member; /* Now output info about the function members (if any). */ --- 4939,4945 ---- } { ! tree func_member; /* Now output info about the function members (if any). */ *************** output_type (type, containing_scope) *** 5025,5031 **** static void output_tagged_type_instantiation (type) ! register tree type; { if (type == 0 || type == error_mark_node) return; --- 4988,4994 ---- static void output_tagged_type_instantiation (type) ! tree type; { if (type == 0 || type == error_mark_node) return; *************** output_tagged_type_instantiation (type) *** 5069,5080 **** static void output_block (stmt, depth) ! register tree stmt; int depth; { ! register int must_output_die = 0; ! register tree origin; ! register enum tree_code origin_code; /* Ignore blocks never really used to make RTL. */ --- 5032,5043 ---- static void output_block (stmt, depth) ! tree stmt; int depth; { ! int must_output_die = 0; ! tree origin; ! enum tree_code origin_code; /* Ignore blocks never really used to make RTL. */ *************** output_block (stmt, depth) *** 5120,5126 **** must_output_die = (BLOCK_VARS (stmt) != NULL); else { ! register tree decl; /* We are in terse mode, so only local (nested) function definitions count as "significant" local declarations. */ --- 5083,5089 ---- must_output_die = (BLOCK_VARS (stmt) != NULL); else { ! tree decl; /* We are in terse mode, so only local (nested) function definitions count as "significant" local declarations. */ *************** output_block (stmt, depth) *** 5163,5169 **** static void output_decls_for_scope (stmt, depth) ! register tree stmt; int depth; { /* Ignore blocks never really used to make RTL. */ --- 5126,5132 ---- static void output_decls_for_scope (stmt, depth) ! tree stmt; int depth; { /* Ignore blocks never really used to make RTL. */ *************** output_decls_for_scope (stmt, depth) *** 5176,5182 **** but not within any nested sub-blocks. */ { ! register tree decl; for (decl = BLOCK_VARS (stmt); decl; decl = TREE_CHAIN (decl)) output_decl (decl, stmt); --- 5139,5145 ---- but not within any nested sub-blocks. */ { ! tree decl; for (decl = BLOCK_VARS (stmt); decl; decl = TREE_CHAIN (decl)) output_decl (decl, stmt); *************** output_decls_for_scope (stmt, depth) *** 5188,5194 **** therein) of this block. */ { ! register tree subblocks; for (subblocks = BLOCK_SUBBLOCKS (stmt); subblocks; --- 5151,5157 ---- therein) of this block. */ { ! tree subblocks; for (subblocks = BLOCK_SUBBLOCKS (stmt); subblocks; *************** output_decls_for_scope (stmt, depth) *** 5201,5207 **** static inline int is_redundant_typedef (decl) ! register tree decl; { if (TYPE_DECL_IS_STUB (decl)) return 1; --- 5164,5170 ---- static inline int is_redundant_typedef (decl) ! tree decl; { if (TYPE_DECL_IS_STUB (decl)) return 1; *************** is_redundant_typedef (decl) *** 5219,5226 **** static void output_decl (decl, containing_scope) ! register tree decl; ! register tree containing_scope; { /* Make a note of the decl node we are going to be working on. We may need to give the user the source coordinates of where it appeared in --- 5182,5189 ---- static void output_decl (decl, containing_scope) ! tree decl; ! tree containing_scope; { /* Make a note of the decl node we are going to be working on. We may need to give the user the source coordinates of where it appeared in *************** output_decl (decl, containing_scope) *** 5280,5286 **** /* If we're emitting an out-of-line copy of an inline function, set up to refer to the abstract instance emitted from ! note_deferral_of_defined_inline_function. */ if (DECL_INLINE (decl) && ! DECL_ABSTRACT (decl) && ! (containing_scope && TYPE_P (containing_scope))) set_decl_origin_self (decl); --- 5243,5249 ---- /* If we're emitting an out-of-line copy of an inline function, set up to refer to the abstract instance emitted from ! dwarfout_deferred_inline_function. */ if (DECL_INLINE (decl) && ! DECL_ABSTRACT (decl) && ! (containing_scope && TYPE_P (containing_scope))) set_decl_origin_self (decl); *************** output_decl (decl, containing_scope) *** 5327,5334 **** { /* Generate DIEs to represent all known formal parameters */ ! register tree arg_decls = DECL_ARGUMENTS (decl); ! register tree parm; /* WARNING! Kludge zone ahead! Here we have a special hack for svr4 SDB compatibility. Instead of passing the --- 5290,5297 ---- { /* Generate DIEs to represent all known formal parameters */ ! tree arg_decls = DECL_ARGUMENTS (decl); ! tree parm; /* WARNING! Kludge zone ahead! Here we have a special hack for svr4 SDB compatibility. Instead of passing the *************** output_decl (decl, containing_scope) *** 5387,5393 **** output_pending_types_for_scope (decl); /* ! Decide whether we need a unspecified_parameters DIE at the end. There are 2 more cases to do this for: 1) the ansi ... declaration - this is detectable when the end of the arg list is not a void_type_node --- 5350,5356 ---- output_pending_types_for_scope (decl); /* ! Decide whether we need an unspecified_parameters DIE at the end. There are 2 more cases to do this for: 1) the ansi ... declaration - this is detectable when the end of the arg list is not a void_type_node *************** output_decl (decl, containing_scope) *** 5396,5402 **** */ { ! register tree fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl)); if (fn_arg_types) { --- 5359,5365 ---- */ { ! tree fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl)); if (fn_arg_types) { *************** output_decl (decl, containing_scope) *** 5416,5422 **** function (if it has one - it may be just a declaration). */ { ! register tree outer_scope = DECL_INITIAL (decl); if (outer_scope && TREE_CODE (outer_scope) != ERROR_MARK) { --- 5379,5385 ---- function (if it has one - it may be just a declaration). */ { ! tree outer_scope = DECL_INITIAL (decl); if (outer_scope && TREE_CODE (outer_scope) != ERROR_MARK) { *************** output_decl (decl, containing_scope) *** 5543,5549 **** function. */ { ! register void (*func) PARAMS ((void *)); register tree origin = decl_ultimate_origin (decl); if (origin != NULL && TREE_CODE (origin) == PARM_DECL) --- 5506,5512 ---- function. */ { ! void (*func) PARAMS ((void *)); register tree origin = decl_ultimate_origin (decl); if (origin != NULL && TREE_CODE (origin) == PARM_DECL) *************** output_decl (decl, containing_scope) *** 5570,5576 **** case PARM_DECL: /* Force out the type of this formal, if it was not forced out yet. ! Note that here we can run afowl of a bug in "classic" svr4 SDB. It should be able to grok the presence of type DIEs within a list of TAG_formal_parameter DIEs, but it doesn't. */ --- 5533,5539 ---- case PARM_DECL: /* Force out the type of this formal, if it was not forced out yet. ! Note that here we can run afoul of a bug in "classic" svr4 SDB. It should be able to grok the presence of type DIEs within a list of TAG_formal_parameter DIEs, but it doesn't. */ *************** output_decl (decl, containing_scope) *** 5587,5596 **** } } ! void dwarfout_file_scope_decl (decl, set_finalizing) ! register tree decl; ! register int set_finalizing; { if (TREE_CODE (decl) == ERROR_MARK) return; --- 5550,5614 ---- } } ! /* Output debug information for a function. */ ! static void ! dwarfout_function_decl (decl) ! tree decl; ! { ! dwarfout_file_scope_decl (decl, 0); ! } ! ! /* Debug information for a global DECL. Called from toplev.c after ! compilation proper has finished. */ ! static void ! dwarfout_global_decl (decl) ! tree decl; ! { ! /* Output DWARF information for file-scope tentative data object ! declarations, file-scope (extern) function declarations (which ! had no corresponding body) and file-scope tagged type ! declarations and definitions which have not yet been forced out. */ ! ! if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl)) ! dwarfout_file_scope_decl (decl, 1); ! } ! ! /* DECL is an inline function, whose body is present, but which is not ! being output at this point. (We're putting that off until we need ! to do it.) */ ! static void ! dwarfout_deferred_inline_function (decl) ! tree decl; ! { ! /* Generate the DWARF info for the "abstract" instance of a function ! which we may later generate inlined and/or out-of-line instances ! of. */ ! if ((DECL_INLINE (decl) || DECL_ABSTRACT (decl)) ! && ! DECL_ABSTRACT_ORIGIN (decl)) ! { ! /* The front-end may not have set CURRENT_FUNCTION_DECL, but the ! DWARF code expects it to be set in this case. Intuitively, ! DECL is the function we just finished defining, so setting ! CURRENT_FUNCTION_DECL is sensible. */ ! tree saved_cfd = current_function_decl; ! int was_abstract = DECL_ABSTRACT (decl); ! current_function_decl = decl; ! ! /* Let the DWARF code do its work. */ ! set_decl_abstract_flags (decl, 1); ! dwarfout_file_scope_decl (decl, 0); ! if (! was_abstract) ! set_decl_abstract_flags (decl, 0); ! ! /* Reset CURRENT_FUNCTION_DECL. */ ! current_function_decl = saved_cfd; ! } ! } ! ! static void dwarfout_file_scope_decl (decl, set_finalizing) ! tree decl; ! int set_finalizing; { if (TREE_CODE (decl) == ERROR_MARK) return; *************** dwarfout_file_scope_decl (decl, set_fina *** 5619,5625 **** future (i.e. later on within the current translation unit). So here we just ignore all file-scope function declarations which are not also definitions. If and when the debugger needs ! to know something about these functions, it wil have to hunt around and find the DWARF information associated with the *definition* of the function. --- 5637,5643 ---- future (i.e. later on within the current translation unit). So here we just ignore all file-scope function declarations which are not also definitions. If and when the debugger needs ! to know something about these functions, it will have to hunt around and find the DWARF information associated with the *definition* of the function. *************** dwarfout_file_scope_decl (decl, set_fina *** 5654,5660 **** defined in this compilation unit. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, PUBNAMES_SECTION); sprintf (label, PUB_DIE_LABEL_FMT, next_pubname_number); ASM_OUTPUT_DWARF_ADDR (asm_out_file, label); ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, --- 5672,5678 ---- defined in this compilation unit. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_PUBNAMES_SECTION); sprintf (label, PUB_DIE_LABEL_FMT, next_pubname_number); ASM_OUTPUT_DWARF_ADDR (asm_out_file, label); ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, *************** dwarfout_file_scope_decl (decl, set_fina *** 5692,5698 **** defined in this compilation unit. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, PUBNAMES_SECTION); sprintf (label, PUB_DIE_LABEL_FMT, next_pubname_number); ASM_OUTPUT_DWARF_ADDR (asm_out_file, label); ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, --- 5710,5716 ---- defined in this compilation unit. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_PUBNAMES_SECTION); sprintf (label, PUB_DIE_LABEL_FMT, next_pubname_number); ASM_OUTPUT_DWARF_ADDR (asm_out_file, label); ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, *************** dwarfout_file_scope_decl (decl, set_fina *** 5706,5712 **** which is tentatively defined in this compilation unit. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, ARANGES_SECTION); ASM_OUTPUT_DWARF_ADDR (asm_out_file, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl))); ASM_OUTPUT_DWARF_DATA4 (asm_out_file, --- 5724,5730 ---- which is tentatively defined in this compilation unit. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_ARANGES_SECTION); ASM_OUTPUT_DWARF_ADDR (asm_out_file, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl))); ASM_OUTPUT_DWARF_DATA4 (asm_out_file, *************** dwarfout_file_scope_decl (decl, set_fina *** 5803,5811 **** /* Output a marker (i.e. a label) for the beginning of the generated code for a lexical block. */ ! void ! dwarfout_begin_block (blocknum) ! register unsigned blocknum; { char label[MAX_ARTIFICIAL_LABEL_BYTES]; --- 5821,5830 ---- /* Output a marker (i.e. a label) for the beginning of the generated code for a lexical block. */ ! static void ! dwarfout_begin_block (line, blocknum) ! unsigned int line ATTRIBUTE_UNUSED; ! unsigned int blocknum; { char label[MAX_ARTIFICIAL_LABEL_BYTES]; *************** dwarfout_begin_block (blocknum) *** 5817,5825 **** /* Output a marker (i.e. a label) for the end of the generated code for a lexical block. */ ! void ! dwarfout_end_block (blocknum) ! register unsigned blocknum; { char label[MAX_ARTIFICIAL_LABEL_BYTES]; --- 5836,5845 ---- /* Output a marker (i.e. a label) for the end of the generated code for a lexical block. */ ! static void ! dwarfout_end_block (line, blocknum) ! unsigned int line ATTRIBUTE_UNUSED; ! unsigned int blocknum; { char label[MAX_ARTIFICIAL_LABEL_BYTES]; *************** dwarfout_end_block (blocknum) *** 5832,5844 **** the real body of the function begins (after parameters have been moved to their home locations). */ ! void ! dwarfout_begin_function () { char label[MAX_ARTIFICIAL_LABEL_BYTES]; if (! use_gnu_debug_info_extensions) return; function_section (current_function_decl); sprintf (label, BODY_BEGIN_LABEL_FMT, current_funcdef_number); ASM_OUTPUT_LABEL (asm_out_file, label); --- 5852,5866 ---- the real body of the function begins (after parameters have been moved to their home locations). */ ! static void ! dwarfout_end_prologue (line) ! unsigned int line ATTRIBUTE_UNUSED; { char label[MAX_ARTIFICIAL_LABEL_BYTES]; if (! use_gnu_debug_info_extensions) return; + function_section (current_function_decl); sprintf (label, BODY_BEGIN_LABEL_FMT, current_funcdef_number); ASM_OUTPUT_LABEL (asm_out_file, label); *************** dwarfout_begin_function () *** 5847,5854 **** /* Output a marker (i.e. a label) for the point in the generated code where the real body of the function ends (just before the epilogue code). */ ! void ! dwarfout_end_function () { char label[MAX_ARTIFICIAL_LABEL_BYTES]; --- 5869,5877 ---- /* Output a marker (i.e. a label) for the point in the generated code where the real body of the function ends (just before the epilogue code). */ ! static void ! dwarfout_end_function (line) ! unsigned int line ATTRIBUTE_UNUSED; { char label[MAX_ARTIFICIAL_LABEL_BYTES]; *************** dwarfout_end_function () *** 5863,5869 **** for a function definition. This gets called *after* the epilogue code has been generated. */ ! void dwarfout_end_epilogue () { char label[MAX_ARTIFICIAL_LABEL_BYTES]; --- 5886,5892 ---- for a function definition. This gets called *after* the epilogue code has been generated. */ ! static void dwarfout_end_epilogue () { char label[MAX_ARTIFICIAL_LABEL_BYTES]; *************** dwarfout_end_epilogue () *** 5877,5887 **** static void shuffle_filename_entry (new_zeroth) ! register filename_entry *new_zeroth; { filename_entry temp_entry; ! register filename_entry *limit_p; ! register filename_entry *move_p; if (new_zeroth == &filename_table[0]) return; --- 5900,5910 ---- static void shuffle_filename_entry (new_zeroth) ! filename_entry *new_zeroth; { filename_entry temp_entry; ! filename_entry *limit_p; ! filename_entry *move_p; if (new_zeroth == &filename_table[0]) return; *************** generate_new_sfname_entry () *** 5907,5913 **** char label[MAX_ARTIFICIAL_LABEL_BYTES]; fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, SFNAMES_SECTION); sprintf (label, SFNAMES_ENTRY_LABEL_FMT, filename_table[0].number); ASM_OUTPUT_LABEL (asm_out_file, label); ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, --- 5930,5936 ---- char label[MAX_ARTIFICIAL_LABEL_BYTES]; fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_SFNAMES_SECTION); sprintf (label, SFNAMES_ENTRY_LABEL_FMT, filename_table[0].number); ASM_OUTPUT_LABEL (asm_out_file, label); ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, *************** static unsigned *** 5952,5959 **** lookup_filename (file_name) const char *file_name; { ! register filename_entry *search_p; ! register filename_entry *limit_p = &filename_table[ft_entries]; for (search_p = filename_table; search_p < limit_p; search_p++) if (!strcmp (file_name, search_p->name)) --- 5975,5982 ---- lookup_filename (file_name) const char *file_name; { ! filename_entry *search_p; ! filename_entry *limit_p = &filename_table[ft_entries]; for (search_p = filename_table; search_p < limit_p; search_p++) if (!strcmp (file_name, search_p->name)) *************** generate_srcinfo_entry (line_entry_num, *** 6007,6013 **** char label[MAX_ARTIFICIAL_LABEL_BYTES]; fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, SRCINFO_SECTION); sprintf (label, LINE_ENTRY_LABEL_FMT, line_entry_num); ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, label, LINE_BEGIN_LABEL); sprintf (label, SFNAMES_ENTRY_LABEL_FMT, files_entry_num); --- 6030,6036 ---- char label[MAX_ARTIFICIAL_LABEL_BYTES]; fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_SRCINFO_SECTION); sprintf (label, LINE_ENTRY_LABEL_FMT, line_entry_num); ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, label, LINE_BEGIN_LABEL); sprintf (label, SFNAMES_ENTRY_LABEL_FMT, files_entry_num); *************** generate_srcinfo_entry (line_entry_num, *** 6015,6024 **** ASM_OUTPUT_POP_SECTION (asm_out_file); } ! void ! dwarfout_line (filename, line) ! register const char *filename; ! register unsigned line; { if (debug_info_level >= DINFO_LEVEL_NORMAL /* We can't emit line number info for functions in separate sections, --- 6038,6047 ---- ASM_OUTPUT_POP_SECTION (asm_out_file); } ! static void ! dwarfout_source_line (line, filename) ! unsigned int line; ! const char *filename; { if (debug_info_level >= DINFO_LEVEL_NORMAL /* We can't emit line number info for functions in separate sections, *************** dwarfout_line (filename, line) *** 6028,6034 **** char label[MAX_ARTIFICIAL_LABEL_BYTES]; static unsigned last_line_entry_num = 0; static unsigned prev_file_entry_num = (unsigned) -1; ! register unsigned this_file_entry_num; function_section (current_function_decl); sprintf (label, LINE_CODE_LABEL_FMT, ++last_line_entry_num); --- 6051,6057 ---- char label[MAX_ARTIFICIAL_LABEL_BYTES]; static unsigned last_line_entry_num = 0; static unsigned prev_file_entry_num = (unsigned) -1; ! unsigned this_file_entry_num; function_section (current_function_decl); sprintf (label, LINE_CODE_LABEL_FMT, ++last_line_entry_num); *************** dwarfout_line (filename, line) *** 6051,6065 **** } { ! register const char *tail = strrchr (filename, '/'); if (tail != NULL) filename = tail; } ! fprintf (asm_out_file, "%s%u\t%s %s:%u\n", ! UNALIGNED_INT_ASM_OP, line, ASM_COMMENT_START, ! filename, line); ASM_OUTPUT_DWARF_DATA2 (asm_out_file, 0xffff); ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, label, TEXT_BEGIN_LABEL); ASM_OUTPUT_POP_SECTION (asm_out_file); --- 6074,6086 ---- } { ! const char *tail = strrchr (filename, '/'); if (tail != NULL) filename = tail; } ! dw2_asm_output_data (4, line, "%s:%u", filename, line); ASM_OUTPUT_DWARF_DATA2 (asm_out_file, 0xffff); ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, label, TEXT_BEGIN_LABEL); ASM_OUTPUT_POP_SECTION (asm_out_file); *************** dwarfout_line (filename, line) *** 6073,6117 **** /* Generate an entry in the .debug_macinfo section. */ static void ! generate_macinfo_entry (type_and_offset, string) ! register const char *type_and_offset; ! register const char *string; { if (! use_gnu_debug_info_extensions) return; fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, MACINFO_SECTION); ! fprintf (asm_out_file, "%s%s\n", UNALIGNED_INT_ASM_OP, type_and_offset); ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, string); ASM_OUTPUT_POP_SECTION (asm_out_file); } ! void ! dwarfout_start_new_source_file (filename) ! register const char *filename; { char label[MAX_ARTIFICIAL_LABEL_BYTES]; ! char type_and_offset[MAX_ARTIFICIAL_LABEL_BYTES*3]; sprintf (label, SFNAMES_ENTRY_LABEL_FMT, lookup_filename (filename)); ! sprintf (type_and_offset, "0x%08x+%s-%s", ! ((unsigned) MACINFO_start << 24), ! /* Hack: skip leading '*' . */ ! (*label == '*') + label, ! (*SFNAMES_BEGIN_LABEL == '*') + SFNAMES_BEGIN_LABEL); ! generate_macinfo_entry (type_and_offset, ""); } ! void ! dwarfout_resume_previous_source_file (lineno) ! register unsigned lineno; { ! char type_and_offset[MAX_ARTIFICIAL_LABEL_BYTES*2]; ! sprintf (type_and_offset, "0x%08x+%u", ! ((unsigned) MACINFO_resume << 24), lineno); ! generate_macinfo_entry (type_and_offset, ""); } /* Called from check_newline in c-parse.y. The `buffer' parameter --- 6094,6157 ---- /* Generate an entry in the .debug_macinfo section. */ static void ! generate_macinfo_entry (type, offset, string) ! unsigned int type; ! rtx offset; ! const char *string; { if (! use_gnu_debug_info_extensions) return; fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_MACINFO_SECTION); ! assemble_integer (gen_rtx_PLUS (SImode, GEN_INT (type << 24), offset), ! 4, BITS_PER_UNIT, 1); ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, string); ASM_OUTPUT_POP_SECTION (asm_out_file); } ! /* Wrapper for toplev.c callback to check debug info level. */ ! static void ! dwarfout_start_source_file_check (line, filename) ! unsigned int line; ! const char *filename; ! { ! if (debug_info_level == DINFO_LEVEL_VERBOSE) ! dwarfout_start_source_file (line, filename); ! } ! ! static void ! dwarfout_start_source_file (line, filename) ! unsigned int line ATTRIBUTE_UNUSED; ! const char *filename; { char label[MAX_ARTIFICIAL_LABEL_BYTES]; ! const char *label1, *label2; sprintf (label, SFNAMES_ENTRY_LABEL_FMT, lookup_filename (filename)); ! label1 = (*label == '*') + label; ! label2 = (*SFNAMES_BEGIN_LABEL == '*') + SFNAMES_BEGIN_LABEL; ! generate_macinfo_entry (MACINFO_start, ! gen_rtx_MINUS (Pmode, ! gen_rtx_SYMBOL_REF (Pmode, label1), ! gen_rtx_SYMBOL_REF (Pmode, label2)), ! ""); } ! /* Wrapper for toplev.c callback to check debug info level. */ ! static void ! dwarfout_end_source_file_check (lineno) ! unsigned lineno; { ! if (debug_info_level == DINFO_LEVEL_VERBOSE) ! dwarfout_end_source_file (lineno); ! } ! static void ! dwarfout_end_source_file (lineno) ! unsigned lineno; ! { ! generate_macinfo_entry (MACINFO_resume, GEN_INT (lineno), ""); } /* Called from check_newline in c-parse.y. The `buffer' parameter *************** dwarfout_resume_previous_source_file (li *** 6119,6140 **** is past the initial whitespace, #, whitespace, directive-name, whitespace part. */ ! void dwarfout_define (lineno, buffer) ! register unsigned lineno; ! register const char *buffer; { static int initialized = 0; - char type_and_offset[MAX_ARTIFICIAL_LABEL_BYTES*2]; if (!initialized) { ! dwarfout_start_new_source_file (primary_filename); initialized = 1; } ! sprintf (type_and_offset, "0x%08x+%u", ! ((unsigned) MACINFO_define << 24), lineno); ! generate_macinfo_entry (type_and_offset, buffer); } /* Called from check_newline in c-parse.y. The `buffer' parameter --- 6159,6177 ---- is past the initial whitespace, #, whitespace, directive-name, whitespace part. */ ! static void dwarfout_define (lineno, buffer) ! unsigned lineno; ! const char *buffer; { static int initialized = 0; if (!initialized) { ! dwarfout_start_source_file (0, primary_filename); initialized = 1; } ! generate_macinfo_entry (MACINFO_define, GEN_INT (lineno), buffer); } /* Called from check_newline in c-parse.y. The `buffer' parameter *************** dwarfout_define (lineno, buffer) *** 6142,6165 **** is past the initial whitespace, #, whitespace, directive-name, whitespace part. */ ! void dwarfout_undef (lineno, buffer) ! register unsigned lineno; ! register const char *buffer; { ! char type_and_offset[MAX_ARTIFICIAL_LABEL_BYTES*2]; ! ! sprintf (type_and_offset, "0x%08x+%u", ! ((unsigned) MACINFO_undef << 24), lineno); ! generate_macinfo_entry (type_and_offset, buffer); } /* Set up for Dwarf output at the start of compilation. */ ! void ! dwarfout_init (asm_out_file, main_input_filename) ! register FILE *asm_out_file; ! register const char *main_input_filename; { /* Remember the name of the primary input file. */ --- 6179,6197 ---- is past the initial whitespace, #, whitespace, directive-name, whitespace part. */ ! static void dwarfout_undef (lineno, buffer) ! unsigned lineno; ! const char *buffer; { ! generate_macinfo_entry (MACINFO_undef, GEN_INT (lineno), buffer); } /* Set up for Dwarf output at the start of compilation. */ ! static void ! dwarfout_init (main_input_filename) ! const char *main_input_filename; { /* Remember the name of the primary input file. */ *************** dwarfout_init (asm_out_file, main_input_ *** 6197,6210 **** /* Output a starting label for the .text section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, TEXT_SECTION); ASM_OUTPUT_LABEL (asm_out_file, TEXT_BEGIN_LABEL); ASM_OUTPUT_POP_SECTION (asm_out_file); /* Output a starting label for the .data section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, DATA_SECTION); ASM_OUTPUT_LABEL (asm_out_file, DATA_BEGIN_LABEL); ASM_OUTPUT_POP_SECTION (asm_out_file); --- 6229,6242 ---- /* Output a starting label for the .text section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, TEXT_SECTION_NAME); ASM_OUTPUT_LABEL (asm_out_file, TEXT_BEGIN_LABEL); ASM_OUTPUT_POP_SECTION (asm_out_file); /* Output a starting label for the .data section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, DATA_SECTION_NAME); ASM_OUTPUT_LABEL (asm_out_file, DATA_BEGIN_LABEL); ASM_OUTPUT_POP_SECTION (asm_out_file); *************** dwarfout_init (asm_out_file, main_input_ *** 6212,6218 **** /* Output a starting label for the .data1 section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, DATA1_SECTION); ASM_OUTPUT_LABEL (asm_out_file, DATA1_BEGIN_LABEL); ASM_OUTPUT_POP_SECTION (asm_out_file); #endif --- 6244,6250 ---- /* Output a starting label for the .data1 section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, DATA1_SECTION_NAME); ASM_OUTPUT_LABEL (asm_out_file, DATA1_BEGIN_LABEL); ASM_OUTPUT_POP_SECTION (asm_out_file); #endif *************** dwarfout_init (asm_out_file, main_input_ *** 6220,6226 **** /* Output a starting label for the .rodata section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, RODATA_SECTION); ASM_OUTPUT_LABEL (asm_out_file, RODATA_BEGIN_LABEL); ASM_OUTPUT_POP_SECTION (asm_out_file); --- 6252,6258 ---- /* Output a starting label for the .rodata section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, RODATA_SECTION_NAME); ASM_OUTPUT_LABEL (asm_out_file, RODATA_BEGIN_LABEL); ASM_OUTPUT_POP_SECTION (asm_out_file); *************** dwarfout_init (asm_out_file, main_input_ *** 6228,6234 **** /* Output a starting label for the .rodata1 section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, RODATA1_SECTION); ASM_OUTPUT_LABEL (asm_out_file, RODATA1_BEGIN_LABEL); ASM_OUTPUT_POP_SECTION (asm_out_file); #endif --- 6260,6266 ---- /* Output a starting label for the .rodata1 section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, RODATA1_SECTION_NAME); ASM_OUTPUT_LABEL (asm_out_file, RODATA1_BEGIN_LABEL); ASM_OUTPUT_POP_SECTION (asm_out_file); #endif *************** dwarfout_init (asm_out_file, main_input_ *** 6236,6242 **** /* Output a starting label for the .bss section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, BSS_SECTION); ASM_OUTPUT_LABEL (asm_out_file, BSS_BEGIN_LABEL); ASM_OUTPUT_POP_SECTION (asm_out_file); --- 6268,6274 ---- /* Output a starting label for the .bss section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, BSS_SECTION_NAME); ASM_OUTPUT_LABEL (asm_out_file, BSS_BEGIN_LABEL); ASM_OUTPUT_POP_SECTION (asm_out_file); *************** dwarfout_init (asm_out_file, main_input_ *** 6249,6259 **** referenced by the initial entry in the .debug_srcinfo section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, SFNAMES_SECTION); ASM_OUTPUT_LABEL (asm_out_file, SFNAMES_BEGIN_LABEL); { ! register const char *pwd = getpwd (); ! register char *dirname; if (!pwd) fatal_io_error ("can't get current directory"); --- 6281,6291 ---- referenced by the initial entry in the .debug_srcinfo section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_SFNAMES_SECTION); ASM_OUTPUT_LABEL (asm_out_file, SFNAMES_BEGIN_LABEL); { ! const char *pwd = getpwd (); ! char *dirname; if (!pwd) fatal_io_error ("can't get current directory"); *************** dwarfout_init (asm_out_file, main_input_ *** 6273,6279 **** TAG_compile_unit DIE. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, MACINFO_SECTION); ASM_OUTPUT_LABEL (asm_out_file, MACINFO_BEGIN_LABEL); ASM_OUTPUT_POP_SECTION (asm_out_file); } --- 6305,6311 ---- TAG_compile_unit DIE. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_MACINFO_SECTION); ASM_OUTPUT_LABEL (asm_out_file, MACINFO_BEGIN_LABEL); ASM_OUTPUT_POP_SECTION (asm_out_file); } *************** dwarfout_init (asm_out_file, main_input_ *** 6292,6298 **** /* Generate the initial entry for the .debug_srcinfo section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, SRCINFO_SECTION); ASM_OUTPUT_LABEL (asm_out_file, SRCINFO_BEGIN_LABEL); ASM_OUTPUT_DWARF_ADDR (asm_out_file, LINE_BEGIN_LABEL); ASM_OUTPUT_DWARF_ADDR (asm_out_file, SFNAMES_BEGIN_LABEL); --- 6324,6330 ---- /* Generate the initial entry for the .debug_srcinfo section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_SRCINFO_SECTION); ASM_OUTPUT_LABEL (asm_out_file, SRCINFO_BEGIN_LABEL); ASM_OUTPUT_DWARF_ADDR (asm_out_file, LINE_BEGIN_LABEL); ASM_OUTPUT_DWARF_ADDR (asm_out_file, SFNAMES_BEGIN_LABEL); *************** dwarfout_init (asm_out_file, main_input_ *** 6309,6322 **** /* Generate the initial entry for the .debug_pubnames section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, PUBNAMES_SECTION); ASM_OUTPUT_DWARF_ADDR (asm_out_file, DEBUG_BEGIN_LABEL); ASM_OUTPUT_POP_SECTION (asm_out_file); /* Generate the initial entry for the .debug_aranges section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, ARANGES_SECTION); ASM_OUTPUT_DWARF_ADDR (asm_out_file, DEBUG_BEGIN_LABEL); ASM_OUTPUT_POP_SECTION (asm_out_file); } --- 6341,6359 ---- /* Generate the initial entry for the .debug_pubnames section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_PUBNAMES_SECTION); ASM_OUTPUT_DWARF_ADDR (asm_out_file, DEBUG_BEGIN_LABEL); ASM_OUTPUT_POP_SECTION (asm_out_file); /* Generate the initial entry for the .debug_aranges section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_ARANGES_SECTION); ! ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, ! DEBUG_ARANGES_END_LABEL, ! DEBUG_ARANGES_BEGIN_LABEL); ! ASM_OUTPUT_LABEL (asm_out_file, DEBUG_ARANGES_BEGIN_LABEL); ! ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 1); ASM_OUTPUT_DWARF_ADDR (asm_out_file, DEBUG_BEGIN_LABEL); ASM_OUTPUT_POP_SECTION (asm_out_file); } *************** dwarfout_init (asm_out_file, main_input_ *** 6333,6339 **** fputc ('\n', asm_out_file); ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_SECTION); ASM_OUTPUT_LABEL (asm_out_file, DEBUG_BEGIN_LABEL); ! output_die (output_compile_unit_die, main_input_filename); ASM_OUTPUT_POP_SECTION (asm_out_file); fputc ('\n', asm_out_file); --- 6370,6376 ---- fputc ('\n', asm_out_file); ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_SECTION); ASM_OUTPUT_LABEL (asm_out_file, DEBUG_BEGIN_LABEL); ! output_die (output_compile_unit_die, (PTR) main_input_filename); ASM_OUTPUT_POP_SECTION (asm_out_file); fputc ('\n', asm_out_file); *************** dwarfout_init (asm_out_file, main_input_ *** 6341,6348 **** /* Output stuff that dwarf requires at the end of every file. */ ! void ! dwarfout_finish () { char label[MAX_ARTIFICIAL_LABEL_BYTES]; --- 6378,6386 ---- /* Output stuff that dwarf requires at the end of every file. */ ! static void ! dwarfout_finish (main_input_filename) ! const char *main_input_filename ATTRIBUTE_UNUSED; { char label[MAX_ARTIFICIAL_LABEL_BYTES]; *************** dwarfout_finish () *** 6388,6401 **** /* Output a terminator label for the .text section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, TEXT_SECTION); ASM_OUTPUT_LABEL (asm_out_file, TEXT_END_LABEL); ASM_OUTPUT_POP_SECTION (asm_out_file); /* Output a terminator label for the .data section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, DATA_SECTION); ASM_OUTPUT_LABEL (asm_out_file, DATA_END_LABEL); ASM_OUTPUT_POP_SECTION (asm_out_file); --- 6426,6439 ---- /* Output a terminator label for the .text section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, TEXT_SECTION_NAME); ASM_OUTPUT_LABEL (asm_out_file, TEXT_END_LABEL); ASM_OUTPUT_POP_SECTION (asm_out_file); /* Output a terminator label for the .data section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, DATA_SECTION_NAME); ASM_OUTPUT_LABEL (asm_out_file, DATA_END_LABEL); ASM_OUTPUT_POP_SECTION (asm_out_file); *************** dwarfout_finish () *** 6403,6409 **** /* Output a terminator label for the .data1 section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, DATA1_SECTION); ASM_OUTPUT_LABEL (asm_out_file, DATA1_END_LABEL); ASM_OUTPUT_POP_SECTION (asm_out_file); #endif --- 6441,6447 ---- /* Output a terminator label for the .data1 section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, DATA1_SECTION_NAME); ASM_OUTPUT_LABEL (asm_out_file, DATA1_END_LABEL); ASM_OUTPUT_POP_SECTION (asm_out_file); #endif *************** dwarfout_finish () *** 6411,6417 **** /* Output a terminator label for the .rodata section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, RODATA_SECTION); ASM_OUTPUT_LABEL (asm_out_file, RODATA_END_LABEL); ASM_OUTPUT_POP_SECTION (asm_out_file); --- 6449,6455 ---- /* Output a terminator label for the .rodata section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, RODATA_SECTION_NAME); ASM_OUTPUT_LABEL (asm_out_file, RODATA_END_LABEL); ASM_OUTPUT_POP_SECTION (asm_out_file); *************** dwarfout_finish () *** 6419,6425 **** /* Output a terminator label for the .rodata1 section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, RODATA1_SECTION); ASM_OUTPUT_LABEL (asm_out_file, RODATA1_END_LABEL); ASM_OUTPUT_POP_SECTION (asm_out_file); #endif --- 6457,6463 ---- /* Output a terminator label for the .rodata1 section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, RODATA1_SECTION_NAME); ASM_OUTPUT_LABEL (asm_out_file, RODATA1_END_LABEL); ASM_OUTPUT_POP_SECTION (asm_out_file); #endif *************** dwarfout_finish () *** 6427,6433 **** /* Output a terminator label for the .bss section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, BSS_SECTION); ASM_OUTPUT_LABEL (asm_out_file, BSS_END_LABEL); ASM_OUTPUT_POP_SECTION (asm_out_file); --- 6465,6471 ---- /* Output a terminator label for the .bss section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, BSS_SECTION_NAME); ASM_OUTPUT_LABEL (asm_out_file, BSS_END_LABEL); ASM_OUTPUT_POP_SECTION (asm_out_file); *************** dwarfout_finish () *** 6449,6455 **** /* Output a terminating entry for the .debug_srcinfo section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, SRCINFO_SECTION); ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, LINE_LAST_ENTRY_LABEL, LINE_BEGIN_LABEL); ASM_OUTPUT_DWARF_DATA4 (asm_out_file, -1); --- 6487,6493 ---- /* Output a terminating entry for the .debug_srcinfo section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_SRCINFO_SECTION); ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, LINE_LAST_ENTRY_LABEL, LINE_BEGIN_LABEL); ASM_OUTPUT_DWARF_DATA4 (asm_out_file, -1); *************** dwarfout_finish () *** 6460,6469 **** { /* Output terminating entries for the .debug_macinfo section. */ ! dwarfout_resume_previous_source_file (0); fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, MACINFO_SECTION); ASM_OUTPUT_DWARF_DATA4 (asm_out_file, 0); ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, ""); ASM_OUTPUT_POP_SECTION (asm_out_file); --- 6498,6507 ---- { /* Output terminating entries for the .debug_macinfo section. */ ! dwarfout_end_source_file (0); fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_MACINFO_SECTION); ASM_OUTPUT_DWARF_DATA4 (asm_out_file, 0); ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, ""); ASM_OUTPUT_POP_SECTION (asm_out_file); *************** dwarfout_finish () *** 6472,6478 **** /* Generate the terminating entry for the .debug_pubnames section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, PUBNAMES_SECTION); ASM_OUTPUT_DWARF_DATA4 (asm_out_file, 0); ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, ""); ASM_OUTPUT_POP_SECTION (asm_out_file); --- 6510,6516 ---- /* Generate the terminating entry for the .debug_pubnames section. */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_PUBNAMES_SECTION); ASM_OUTPUT_DWARF_DATA4 (asm_out_file, 0); ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, ""); ASM_OUTPUT_POP_SECTION (asm_out_file); *************** dwarfout_finish () *** 6492,6498 **** */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, ARANGES_SECTION); ASM_OUTPUT_DWARF_ADDR (asm_out_file, TEXT_BEGIN_LABEL); ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, TEXT_END_LABEL, TEXT_BEGIN_LABEL); --- 6530,6536 ---- */ fputc ('\n', asm_out_file); ! ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_ARANGES_SECTION); ASM_OUTPUT_DWARF_ADDR (asm_out_file, TEXT_BEGIN_LABEL); ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, TEXT_END_LABEL, TEXT_BEGIN_LABEL); *************** dwarfout_finish () *** 6522,6527 **** --- 6560,6566 ---- ASM_OUTPUT_DWARF_DATA4 (asm_out_file, 0); ASM_OUTPUT_DWARF_DATA4 (asm_out_file, 0); + ASM_OUTPUT_LABEL (asm_out_file, DEBUG_ARANGES_END_LABEL); ASM_OUTPUT_POP_SECTION (asm_out_file); } diff -Nrc3pad gcc-3.0.4/gcc/dwarfout.h gcc-3.1/gcc/dwarfout.h *** gcc-3.0.4/gcc/dwarfout.h Wed Nov 8 02:18:00 2000 --- gcc-3.1/gcc/dwarfout.h Thu Jan 1 00:00:00 1970 *************** *** 1,37 **** - /* dwarfout.h - Various declarations for functions found in dwarfout.c - Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. - - This file is part of GNU CC. - - GNU CC is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU CC is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNU CC; see the file COPYING. If not, write to - the Free Software Foundation, 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - - extern void dwarfout_init PARAMS ((FILE *, const char *)); - extern void dwarfout_finish PARAMS ((void)); - - extern void dwarfout_define PARAMS ((unsigned, const char *)); - extern void dwarfout_undef PARAMS ((unsigned, const char *)); - extern void dwarfout_file_scope_decl PARAMS ((tree , int)); - extern void dwarfout_start_new_source_file PARAMS ((const char *)); - extern void dwarfout_resume_previous_source_file PARAMS ((unsigned)); - - extern void dwarfout_begin_function PARAMS ((void)); - extern void dwarfout_end_function PARAMS ((void)); - extern void dwarfout_begin_epilogue PARAMS ((void)); - extern void dwarfout_end_epilogue PARAMS ((void)); - extern void dwarfout_begin_block PARAMS ((unsigned)); - extern void dwarfout_end_block PARAMS ((unsigned)); - - extern void dwarfout_line PARAMS ((const char *, unsigned)); --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/emit-rtl.c gcc-3.1/gcc/emit-rtl.c *** gcc-3.0.4/gcc/emit-rtl.c Sun Feb 3 05:16:27 2002 --- gcc-3.1/gcc/emit-rtl.c Fri Apr 12 12:13:26 2002 *************** *** 1,23 **** /* Emit RTL for the GNU C-Compiler expander. Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* Middle-to-low level generation of rtx code and insns. --- 1,23 ---- /* Emit RTL for the GNU C-Compiler expander. Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* Middle-to-low level generation of rtx code and insns. *************** Boston, MA 02111-1307, USA. */ *** 54,59 **** --- 54,61 ---- #include "bitmap.h" #include "basic-block.h" #include "ggc.h" + #include "debug.h" + #include "langhooks.h" /* Commonly used modes. */ *************** REAL_VALUE_TYPE dconstm1; *** 114,120 **** When to use frame_pointer_rtx and hard_frame_pointer_rtx is a little tricky: until register elimination has taken place hard_frame_pointer_rtx ! should be used if it is being set, and frame_pointer_rtx otherwise. After register elimination hard_frame_pointer_rtx should always be used. On machines where the two registers are same (most) then these are the same. --- 116,122 ---- When to use frame_pointer_rtx and hard_frame_pointer_rtx is a little tricky: until register elimination has taken place hard_frame_pointer_rtx ! should be used if it is being set, and frame_pointer_rtx otherwise. After register elimination hard_frame_pointer_rtx should always be used. On machines where the two registers are same (most) then these are the same. *************** rtx const_int_rtx[MAX_SAVED_CONST_INT * *** 143,148 **** --- 145,153 ---- static htab_t const_int_htab; + /* A hash table storing memory attribute structures. */ + static htab_t mem_attrs_htab; + /* start_sequence and gen_sequence can make a lot of rtx expressions which are shortly thrown away. We use two mechanisms to prevent this waste: *************** static rtx make_jump_insn_raw PARAMS (( *** 174,179 **** --- 179,186 ---- static rtx make_call_insn_raw PARAMS ((rtx)); static rtx find_line_note PARAMS ((rtx)); static void mark_sequence_stack PARAMS ((struct sequence_stack *)); + static rtx change_address_1 PARAMS ((rtx, enum machine_mode, rtx, + int)); static void unshare_all_rtl_1 PARAMS ((rtx)); static void unshare_all_decls PARAMS ((tree)); static void reset_used_decls PARAMS ((tree)); *************** static void mark_label_nuses PARAMS ((r *** 181,189 **** static hashval_t const_int_htab_hash PARAMS ((const void *)); static int const_int_htab_eq PARAMS ((const void *, const void *)); ! static int rtx_htab_mark_1 PARAMS ((void **, void *)); ! static void rtx_htab_mark PARAMS ((void *)); /* Returns a hash code for X (which is a really a CONST_INT). */ --- 188,206 ---- static hashval_t const_int_htab_hash PARAMS ((const void *)); static int const_int_htab_eq PARAMS ((const void *, const void *)); ! static hashval_t mem_attrs_htab_hash PARAMS ((const void *)); ! static int mem_attrs_htab_eq PARAMS ((const void *, ! const void *)); ! static void mem_attrs_mark PARAMS ((const void *)); ! static mem_attrs *get_mem_attrs PARAMS ((HOST_WIDE_INT, tree, rtx, ! rtx, unsigned int, ! enum machine_mode)); ! static tree component_ref_for_mem_expr PARAMS ((tree)); ! static rtx gen_const_vector_0 PARAMS ((enum machine_mode)); + /* Probability of the conditional branch currently proceeded by try_split. + Set to -1 otherwise. */ + int split_branch_probability = -1; /* Returns a hash code for X (which is a really a CONST_INT). */ *************** const_int_htab_eq (x, y) *** 206,231 **** return (INTVAL ((const struct rtx_def *) x) == *((const HOST_WIDE_INT *) y)); } ! /* Mark the hash-table element X (which is really a pointer to an ! rtx). */ static int ! rtx_htab_mark_1 (x, data) ! void **x; ! void *data ATTRIBUTE_UNUSED; { ! ggc_mark_rtx (*x); ! return 1; } ! /* Mark all the elements of HTAB (which is really an htab_t full of ! rtxs). */ static void ! rtx_htab_mark (htab) ! void *htab; { ! htab_traverse (*((htab_t *) htab), rtx_htab_mark_1, NULL); } /* Generate a new REG rtx. Make sure ORIGINAL_REGNO is set properly, and --- 223,316 ---- return (INTVAL ((const struct rtx_def *) x) == *((const HOST_WIDE_INT *) y)); } ! /* Returns a hash code for X (which is a really a mem_attrs *). */ ! ! static hashval_t ! mem_attrs_htab_hash (x) ! const void *x; ! { ! mem_attrs *p = (mem_attrs *) x; ! ! return (p->alias ^ (p->align * 1000) ! ^ ((p->offset ? INTVAL (p->offset) : 0) * 50000) ! ^ ((p->size ? INTVAL (p->size) : 0) * 2500000) ! ^ (size_t) p->expr); ! } ! ! /* Returns non-zero if the value represented by X (which is really a ! mem_attrs *) is the same as that given by Y (which is also really a ! mem_attrs *). */ static int ! mem_attrs_htab_eq (x, y) ! const void *x; ! const void *y; { ! mem_attrs *p = (mem_attrs *) x; ! mem_attrs *q = (mem_attrs *) y; ! ! return (p->alias == q->alias && p->expr == q->expr && p->offset == q->offset ! && p->size == q->size && p->align == q->align); } ! /* This routine is called when we determine that we need a mem_attrs entry. ! It marks the associated decl and RTL as being used, if present. */ static void ! mem_attrs_mark (x) ! const void *x; { ! mem_attrs *p = (mem_attrs *) x; ! ! if (p->expr) ! ggc_mark_tree (p->expr); ! ! if (p->offset) ! ggc_mark_rtx (p->offset); ! ! if (p->size) ! ggc_mark_rtx (p->size); ! } ! ! /* Allocate a new mem_attrs structure and insert it into the hash table if ! one identical to it is not already in the table. We are doing this for ! MEM of mode MODE. */ ! ! static mem_attrs * ! get_mem_attrs (alias, expr, offset, size, align, mode) ! HOST_WIDE_INT alias; ! tree expr; ! rtx offset; ! rtx size; ! unsigned int align; ! enum machine_mode mode; ! { ! mem_attrs attrs; ! void **slot; ! ! /* If everything is the default, we can just return zero. */ ! if (alias == 0 && expr == 0 && offset == 0 ! && (size == 0 ! || (mode != BLKmode && GET_MODE_SIZE (mode) == INTVAL (size))) ! && (align == BITS_PER_UNIT ! || (STRICT_ALIGNMENT ! && mode != BLKmode && align == GET_MODE_ALIGNMENT (mode)))) ! return 0; ! ! attrs.alias = alias; ! attrs.expr = expr; ! attrs.offset = offset; ! attrs.size = size; ! attrs.align = align; ! ! slot = htab_find_slot (mem_attrs_htab, &attrs, INSERT); ! if (*slot == 0) ! { ! *slot = ggc_alloc (sizeof (mem_attrs)); ! memcpy (*slot, &attrs, sizeof (mem_attrs)); ! } ! ! return *slot; } /* Generate a new REG rtx. Make sure ORIGINAL_REGNO is set properly, and *************** gen_rtx_CONST_INT (mode, arg) *** 274,294 **** only at run-time. */ rtx ! gen_rtx_CONST_DOUBLE (mode, arg0, arg1, arg2) enum machine_mode mode; ! rtx arg0; ! HOST_WIDE_INT arg1, arg2; { rtx r = rtx_alloc (CONST_DOUBLE); int i; PUT_MODE (r, mode); ! XEXP (r, 0) = arg0; ! X0EXP (r, 1) = NULL_RTX; XWINT (r, 2) = arg1; - XWINT (r, 3) = arg2; ! for (i = GET_RTX_LENGTH (CONST_DOUBLE) - 1; i > 3; --i) XWINT (r, i) = 0; return r; --- 359,377 ---- only at run-time. */ rtx ! gen_rtx_CONST_DOUBLE (mode, arg0, arg1) enum machine_mode mode; ! HOST_WIDE_INT arg0, arg1; { rtx r = rtx_alloc (CONST_DOUBLE); int i; PUT_MODE (r, mode); ! X0EXP (r, 0) = NULL_RTX; ! XWINT (r, 1) = arg0; XWINT (r, 2) = arg1; ! for (i = GET_RTX_LENGTH (CONST_DOUBLE) - 1; i > 2; --i) XWINT (r, i) = 0; return r; *************** gen_rtx_REG (mode, regno) *** 329,334 **** --- 412,420 ---- if (regno == RETURN_ADDRESS_POINTER_REGNUM) return return_address_pointer_rtx; #endif + if (regno == PIC_OFFSET_TABLE_REGNUM + && fixed_regs[PIC_OFFSET_TABLE_REGNUM]) + return pic_offset_table_rtx; if (regno == STACK_POINTER_REGNUM) return stack_pointer_rtx; } *************** gen_rtx_MEM (mode, addr) *** 345,354 **** /* This field is not cleared by the mere allocation of the rtx, so we clear it here. */ ! MEM_ALIAS_SET (rt) = 0; return rt; } /* rtx gen_rtx (code, mode, [element1, ..., elementn]) ** --- 431,479 ---- /* This field is not cleared by the mere allocation of the rtx, so we clear it here. */ ! MEM_ATTRS (rt) = 0; return rt; } + + rtx + gen_rtx_SUBREG (mode, reg, offset) + enum machine_mode mode; + rtx reg; + int offset; + { + /* This is the most common failure type. + Catch it early so we can see who does it. */ + if ((offset % GET_MODE_SIZE (mode)) != 0) + abort (); + + /* This check isn't usable right now because combine will + throw arbitrary crap like a CALL into a SUBREG in + gen_lowpart_for_combine so we must just eat it. */ + #if 0 + /* Check for this too. */ + if (offset >= GET_MODE_SIZE (GET_MODE (reg))) + abort (); + #endif + return gen_rtx_fmt_ei (SUBREG, mode, reg, offset); + } + + /* Generate a SUBREG representing the least-significant part of REG if MODE + is smaller than mode of REG, otherwise paradoxical SUBREG. */ + + rtx + gen_lowpart_SUBREG (mode, reg) + enum machine_mode mode; + rtx reg; + { + enum machine_mode inmode; + + inmode = GET_MODE (reg); + if (inmode == VOIDmode) + inmode = mode; + return gen_rtx_SUBREG (mode, reg, + subreg_lowpart_offset (mode, inmode)); + } /* rtx gen_rtx (code, mode, [element1, ..., elementn]) ** *************** gen_rtx_MEM (mode, addr) *** 367,373 **** ** ** ...would be generated by the following C code: ** ! ** gen_rtx (PLUS, QImode, ** gen_rtx (MEM, QImode, ** gen_rtx (REG, SImode, 1)), ** gen_rtx (MEM, QImode, --- 492,498 ---- ** ** ...would be generated by the following C code: ** ! ** gen_rtx (PLUS, QImode, ** gen_rtx (MEM, QImode, ** gen_rtx (REG, SImode, 1)), ** gen_rtx (MEM, QImode, *************** gen_rtx_MEM (mode, addr) *** 380,400 **** rtx gen_rtx VPARAMS ((enum rtx_code code, enum machine_mode mode, ...)) { ! #ifndef ANSI_PROTOTYPES ! enum rtx_code code; ! enum machine_mode mode; ! #endif ! va_list p; ! register int i; /* Array indices... */ ! register const char *fmt; /* Current rtx's format... */ ! register rtx rt_val; /* RTX to return to caller... */ ! ! VA_START (p, mode); ! #ifndef ANSI_PROTOTYPES ! code = va_arg (p, enum rtx_code); ! mode = va_arg (p, enum machine_mode); ! #endif switch (code) { --- 505,517 ---- rtx gen_rtx VPARAMS ((enum rtx_code code, enum machine_mode mode, ...)) { ! int i; /* Array indices... */ ! const char *fmt; /* Current rtx's format... */ ! rtx rt_val; /* RTX to return to caller... */ ! VA_OPEN (p, mode); ! VA_FIXEDARG (p, enum rtx_code, code); ! VA_FIXEDARG (p, enum machine_mode, mode); switch (code) { *************** gen_rtx VPARAMS ((enum rtx_code code, en *** 404,413 **** case CONST_DOUBLE: { ! rtx arg0 = va_arg (p, rtx); HOST_WIDE_INT arg1 = va_arg (p, HOST_WIDE_INT); ! HOST_WIDE_INT arg2 = va_arg (p, HOST_WIDE_INT); ! rt_val = gen_rtx_CONST_DOUBLE (mode, arg0, arg1, arg2); } break; --- 521,530 ---- case CONST_DOUBLE: { ! HOST_WIDE_INT arg0 = va_arg (p, HOST_WIDE_INT); HOST_WIDE_INT arg1 = va_arg (p, HOST_WIDE_INT); ! ! rt_val = gen_rtx_CONST_DOUBLE (mode, arg0, arg1); } break; *************** gen_rtx VPARAMS ((enum rtx_code code, en *** 467,473 **** break; } ! va_end (p); return rt_val; } --- 584,590 ---- break; } ! VA_CLOSE (p); return rt_val; } *************** gen_rtx VPARAMS ((enum rtx_code code, en *** 481,498 **** rtvec gen_rtvec VPARAMS ((int n, ...)) { ! #ifndef ANSI_PROTOTYPES ! int n; ! #endif ! int i; ! va_list p; rtx *vector; ! VA_START (p, n); ! ! #ifndef ANSI_PROTOTYPES ! n = va_arg (p, int); ! #endif if (n == 0) return NULL_RTVEC; /* Don't allocate an empty rtvec... */ --- 598,608 ---- rtvec gen_rtvec VPARAMS ((int n, ...)) { ! int i, save_n; rtx *vector; ! VA_OPEN (p, n); ! VA_FIXEDARG (p, int, n); if (n == 0) return NULL_RTVEC; /* Don't allocate an empty rtvec... */ *************** gen_rtvec VPARAMS ((int n, ...)) *** 501,509 **** for (i = 0; i < n; i++) vector[i] = va_arg (p, rtx); - va_end (p); ! return gen_rtvec_v (n, vector); } rtvec --- 611,622 ---- for (i = 0; i < n; i++) vector[i] = va_arg (p, rtx); ! /* The definition of VA_* in K&R C causes `n' to go out of scope. */ ! save_n = n; ! VA_CLOSE (p); ! ! return gen_rtvec_v (save_n, vector); } rtvec *************** gen_rtvec_v (n, argp) *** 511,518 **** int n; rtx *argp; { ! register int i; ! register rtvec rt_val; if (n == 0) return NULL_RTVEC; /* Don't allocate an empty rtvec... */ --- 624,631 ---- int n; rtx *argp; { ! int i; ! rtvec rt_val; if (n == 0) return NULL_RTVEC; /* Don't allocate an empty rtvec... */ *************** gen_rtvec_v (n, argp) *** 524,530 **** return rt_val; } - /* Generate a REG rtx for a new pseudo register of mode MODE. This pseudo is assigned the next sequential register number. */ --- 637,642 ---- *************** gen_reg_rtx (mode) *** 534,540 **** enum machine_mode mode; { struct function *f = cfun; ! register rtx val; /* Don't let anything called after initial flow analysis create new registers. */ --- 646,652 ---- enum machine_mode mode; { struct function *f = cfun; ! rtx val; /* Don't let anything called after initial flow analysis create new registers. */ *************** gen_reg_rtx (mode) *** 563,576 **** return gen_rtx_CONCAT (mode, realpart, imagpart); } ! /* Make sure regno_pointer_align and regno_reg_rtx are large enough ! to have an element for this pseudo reg number. */ if (reg_rtx_no == f->emit->regno_pointer_align_length) { int old_size = f->emit->regno_pointer_align_length; - rtx *new1; char *new; new = xrealloc (f->emit->regno_pointer_align, old_size * 2); memset (new + old_size, 0, old_size); f->emit->regno_pointer_align = (unsigned char *) new; --- 675,690 ---- return gen_rtx_CONCAT (mode, realpart, imagpart); } ! /* Make sure regno_pointer_align, regno_decl, and regno_reg_rtx are large ! enough to have an element for this pseudo reg number. */ if (reg_rtx_no == f->emit->regno_pointer_align_length) { int old_size = f->emit->regno_pointer_align_length; char *new; + rtx *new1; + tree *new2; + new = xrealloc (f->emit->regno_pointer_align, old_size * 2); memset (new + old_size, 0, old_size); f->emit->regno_pointer_align = (unsigned char *) new; *************** gen_reg_rtx (mode) *** 580,585 **** --- 694,704 ---- memset (new1 + old_size, 0, old_size * sizeof (rtx)); regno_reg_rtx = new1; + new2 = (tree *) xrealloc (f->emit->regno_decl, + old_size * 2 * sizeof (tree)); + memset (new2 + old_size, 0, old_size * sizeof (tree)); + f->emit->regno_decl = new2; + f->emit->regno_pointer_align_length = old_size * 2; } *************** get_first_label_num () *** 651,659 **** return first_label_num; } /* Return a value representing some low-order bits of X, where the number of low-order bits is given by MODE. Note that no conversion is done ! between floating-point and fixed-point values, rather, the bit representation is returned. This function handles the cases in common between gen_lowpart, below, --- 770,810 ---- return first_label_num; } + /* Return the final regno of X, which is a SUBREG of a hard + register. */ + int + subreg_hard_regno (x, check_mode) + rtx x; + int check_mode; + { + enum machine_mode mode = GET_MODE (x); + unsigned int byte_offset, base_regno, final_regno; + rtx reg = SUBREG_REG (x); + + /* This is where we attempt to catch illegal subregs + created by the compiler. */ + if (GET_CODE (x) != SUBREG + || GET_CODE (reg) != REG) + abort (); + base_regno = REGNO (reg); + if (base_regno >= FIRST_PSEUDO_REGISTER) + abort (); + if (check_mode && ! HARD_REGNO_MODE_OK (base_regno, GET_MODE (reg))) + abort (); + + /* Catch non-congruent offsets too. */ + byte_offset = SUBREG_BYTE (x); + if ((byte_offset % GET_MODE_SIZE (mode)) != 0) + abort (); + + final_regno = subreg_regno (x); + + return final_regno; + } + /* Return a value representing some low-order bits of X, where the number of low-order bits is given by MODE. Note that no conversion is done ! between floating-point and fixed-point values, rather, the bit representation is returned. This function handles the cases in common between gen_lowpart, below, *************** get_first_label_num () *** 665,688 **** rtx gen_lowpart_common (mode, x) enum machine_mode mode; ! register rtx x; { ! int word = 0; if (GET_MODE (x) == mode) return x; /* MODE must occupy no more words than the mode of X. */ if (GET_MODE (x) != VOIDmode ! && ((GET_MODE_SIZE (mode) + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD ! > ((GET_MODE_SIZE (GET_MODE (x)) + (UNITS_PER_WORD - 1)) ! / UNITS_PER_WORD))) return 0; ! if (WORDS_BIG_ENDIAN && GET_MODE_SIZE (GET_MODE (x)) > UNITS_PER_WORD) ! word = ((GET_MODE_SIZE (GET_MODE (x)) ! - MAX (GET_MODE_SIZE (mode), UNITS_PER_WORD)) ! / UNITS_PER_WORD); if ((GET_CODE (x) == ZERO_EXTEND || GET_CODE (x) == SIGN_EXTEND) && (GET_MODE_CLASS (mode) == MODE_INT --- 816,837 ---- rtx gen_lowpart_common (mode, x) enum machine_mode mode; ! rtx x; { ! int msize = GET_MODE_SIZE (mode); ! int xsize = GET_MODE_SIZE (GET_MODE (x)); ! int offset = 0; if (GET_MODE (x) == mode) return x; /* MODE must occupy no more words than the mode of X. */ if (GET_MODE (x) != VOIDmode ! && ((msize + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD ! > ((xsize + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD))) return 0; ! offset = subreg_lowpart_offset (mode, GET_MODE (x)); if ((GET_CODE (x) == ZERO_EXTEND || GET_CODE (x) == SIGN_EXTEND) && (GET_MODE_CLASS (mode) == MODE_INT *************** gen_lowpart_common (mode, x) *** 703,762 **** else if (GET_MODE_SIZE (mode) < GET_MODE_SIZE (GET_MODE (x))) return gen_rtx_fmt_e (GET_CODE (x), mode, XEXP (x, 0)); } ! else if (GET_CODE (x) == SUBREG ! && (GET_MODE_SIZE (mode) <= GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))) ! || GET_MODE_SIZE (mode) <= UNITS_PER_WORD ! || GET_MODE_SIZE (mode) == GET_MODE_UNIT_SIZE (GET_MODE (x)))) ! return (GET_MODE (SUBREG_REG (x)) == mode && SUBREG_WORD (x) == 0 ! ? SUBREG_REG (x) ! : gen_rtx_SUBREG (mode, SUBREG_REG (x), SUBREG_WORD (x) + word)); ! else if (GET_CODE (x) == REG) ! { ! /* Let the backend decide how many registers to skip. This is needed ! in particular for Sparc64 where fp regs are smaller than a word. */ ! /* ??? Note that subregs are now ambiguous, in that those against ! pseudos are sized by the Word Size, while those against hard ! regs are sized by the underlying register size. Better would be ! to always interpret the subreg offset parameter as bytes or bits. */ ! ! if (WORDS_BIG_ENDIAN && REGNO (x) < FIRST_PSEUDO_REGISTER ! && GET_MODE_SIZE (GET_MODE (x)) > GET_MODE_SIZE (mode)) ! word = (HARD_REGNO_NREGS (REGNO (x), GET_MODE (x)) ! - HARD_REGNO_NREGS (REGNO (x), mode)); ! ! /* If the register is not valid for MODE, return 0. If we don't ! do this, there is no way to fix up the resulting REG later. ! But we do do this if the current REG is not valid for its ! mode. This latter is a kludge, but is required due to the ! way that parameters are passed on some machines, most ! notably Sparc. */ ! if (REGNO (x) < FIRST_PSEUDO_REGISTER ! && ! HARD_REGNO_MODE_OK (REGNO (x) + word, mode) ! && HARD_REGNO_MODE_OK (REGNO (x), GET_MODE (x))) ! return 0; ! else if (REGNO (x) < FIRST_PSEUDO_REGISTER ! /* integrate.c can't handle parts of a return value register. */ ! && (! REG_FUNCTION_VALUE_P (x) ! || ! rtx_equal_function_value_matters) ! #ifdef CLASS_CANNOT_CHANGE_MODE ! && ! (CLASS_CANNOT_CHANGE_MODE_P (mode, GET_MODE (x)) ! && GET_MODE_CLASS (GET_MODE (x)) != MODE_COMPLEX_INT ! && GET_MODE_CLASS (GET_MODE (x)) != MODE_COMPLEX_FLOAT ! && (TEST_HARD_REG_BIT ! (reg_class_contents[(int) CLASS_CANNOT_CHANGE_MODE], ! REGNO (x)))) ! #endif ! /* We want to keep the stack, frame, and arg pointers ! special. */ ! && x != frame_pointer_rtx ! #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM ! && x != arg_pointer_rtx ! #endif ! && x != stack_pointer_rtx) ! return gen_rtx_REG (mode, REGNO (x) + word); ! else ! return gen_rtx_SUBREG (mode, x, word); ! } /* If X is a CONST_INT or a CONST_DOUBLE, extract the appropriate bits from the low-order part of the constant. */ else if ((GET_MODE_CLASS (mode) == MODE_INT --- 852,860 ---- else if (GET_MODE_SIZE (mode) < GET_MODE_SIZE (GET_MODE (x))) return gen_rtx_fmt_e (GET_CODE (x), mode, XEXP (x, 0)); } ! else if (GET_CODE (x) == SUBREG || GET_CODE (x) == REG ! || GET_CODE (x) == CONCAT) ! return simplify_gen_subreg (mode, x, GET_MODE (x), offset); /* If X is a CONST_INT or a CONST_DOUBLE, extract the appropriate bits from the low-order part of the constant. */ else if ((GET_MODE_CLASS (mode) == MODE_INT *************** gen_lowpart_common (mode, x) *** 793,799 **** /* If X is an integral constant but we want it in floating-point, it must be the case that we have a union of an integer and a floating-point value. If the machine-parameters allow it, simulate that union here ! and return the result. The two-word and single-word cases are different. */ else if (((HOST_FLOAT_FORMAT == TARGET_FLOAT_FORMAT --- 891,897 ---- /* If X is an integral constant but we want it in floating-point, it must be the case that we have a union of an integer and a floating-point value. If the machine-parameters allow it, simulate that union here ! and return the result. The two-word and single-word cases are different. */ else if (((HOST_FLOAT_FORMAT == TARGET_FLOAT_FORMAT *************** gen_lowpart_common (mode, x) *** 826,838 **** low = INTVAL (x), high = low >> (HOST_BITS_PER_WIDE_INT -1); else low = CONST_DOUBLE_LOW (x), high = CONST_DOUBLE_HIGH (x); - #ifdef HOST_WORDS_BIG_ENDIAN u.i[0] = high, u.i[1] = low; #else u.i[0] = low, u.i[1] = high; #endif - return CONST_DOUBLE_FROM_REAL_VALUE (u.d, mode); } --- 924,934 ---- *************** gen_lowpart_common (mode, x) *** 848,854 **** && GET_CODE (x) == CONST_DOUBLE && GET_MODE_CLASS (GET_MODE (x)) == MODE_FLOAT && GET_MODE_BITSIZE (mode) == BITS_PER_WORD) ! return operand_subword (x, word, 0, GET_MODE (x)); /* Similarly, if this is converting a floating-point value into a two-word integer, we can do this one word at a time and make an --- 944,950 ---- && GET_CODE (x) == CONST_DOUBLE && GET_MODE_CLASS (GET_MODE (x)) == MODE_FLOAT && GET_MODE_BITSIZE (mode) == BITS_PER_WORD) ! return constant_subword (x, (offset / UNITS_PER_WORD), GET_MODE (x)); /* Similarly, if this is converting a floating-point value into a two-word integer, we can do this one word at a time and make an *************** gen_lowpart_common (mode, x) *** 864,874 **** && GET_MODE_CLASS (GET_MODE (x)) == MODE_FLOAT && GET_MODE_BITSIZE (mode) == 2 * BITS_PER_WORD) { ! rtx lowpart ! = operand_subword (x, word + WORDS_BIG_ENDIAN, 0, GET_MODE (x)); ! rtx highpart ! = operand_subword (x, word + ! WORDS_BIG_ENDIAN, 0, GET_MODE (x)); if (lowpart && GET_CODE (lowpart) == CONST_INT && highpart && GET_CODE (highpart) == CONST_INT) return immed_double_const (INTVAL (lowpart), INTVAL (highpart), mode); --- 960,973 ---- && GET_MODE_CLASS (GET_MODE (x)) == MODE_FLOAT && GET_MODE_BITSIZE (mode) == 2 * BITS_PER_WORD) { ! rtx lowpart, highpart; + lowpart = constant_subword (x, + (offset / UNITS_PER_WORD) + WORDS_BIG_ENDIAN, + GET_MODE (x)); + highpart = constant_subword (x, + (offset / UNITS_PER_WORD) + (! WORDS_BIG_ENDIAN), + GET_MODE (x)); if (lowpart && GET_CODE (lowpart) == CONST_INT && highpart && GET_CODE (highpart) == CONST_INT) return immed_double_const (INTVAL (lowpart), INTVAL (highpart), mode); *************** gen_lowpart_common (mode, x) *** 879,896 **** FP and integer operands. This simplifies reload because it doesn't have to deal with constructs like (subreg:DI (const_double:SF ...)) or (subreg:DF (const_int ...)). */ ! else if (mode == SFmode && GET_CODE (x) == CONST_INT) ! { REAL_VALUE_TYPE r; HOST_WIDE_INT i; i = INTVAL (x); r = REAL_VALUE_FROM_TARGET_SINGLE (i); return CONST_DOUBLE_FROM_REAL_VALUE (r, mode); ! } ! else if (mode == DFmode && (GET_CODE (x) == CONST_INT || GET_CODE (x) == CONST_DOUBLE) && GET_MODE (x) == VOIDmode) { --- 978,999 ---- FP and integer operands. This simplifies reload because it doesn't have to deal with constructs like (subreg:DI (const_double:SF ...)) or (subreg:DF (const_int ...)). */ + /* Single-precision floats are always 32-bits and double-precision + floats are always 64-bits. */ ! else if (GET_MODE_CLASS (mode) == MODE_FLOAT ! && GET_MODE_BITSIZE (mode) == 32 && GET_CODE (x) == CONST_INT) ! { REAL_VALUE_TYPE r; HOST_WIDE_INT i; i = INTVAL (x); r = REAL_VALUE_FROM_TARGET_SINGLE (i); return CONST_DOUBLE_FROM_REAL_VALUE (r, mode); ! } ! else if (GET_MODE_CLASS (mode) == MODE_FLOAT ! && GET_MODE_BITSIZE (mode) == 64 && (GET_CODE (x) == CONST_INT || GET_CODE (x) == CONST_DOUBLE) && GET_MODE (x) == VOIDmode) { *************** gen_lowpart_common (mode, x) *** 905,920 **** } else { ! low = CONST_DOUBLE_LOW (x); high = CONST_DOUBLE_HIGH (x); } /* REAL_VALUE_TARGET_DOUBLE takes the addressing order of the target machine. */ if (WORDS_BIG_ENDIAN) i[0] = high, i[1] = low; else i[0] = low, i[1] = high; r = REAL_VALUE_FROM_TARGET_DOUBLE (i); return CONST_DOUBLE_FROM_REAL_VALUE (r, mode); --- 1008,1027 ---- } else { ! low = CONST_DOUBLE_LOW (x); high = CONST_DOUBLE_HIGH (x); } + #if HOST_BITS_PER_WIDE_INT == 32 /* REAL_VALUE_TARGET_DOUBLE takes the addressing order of the target machine. */ if (WORDS_BIG_ENDIAN) i[0] = high, i[1] = low; else i[0] = low, i[1] = high; + #else + i[0] = low; + #endif r = REAL_VALUE_FROM_TARGET_DOUBLE (i); return CONST_DOUBLE_FROM_REAL_VALUE (r, mode); *************** gen_lowpart_common (mode, x) *** 928,985 **** long i[4]; /* Only the low 32 bits of each 'long' are used. */ int endian = WORDS_BIG_ENDIAN ? 1 : 0; REAL_VALUE_FROM_CONST_DOUBLE (r, x); ! switch (GET_MODE (x)) { ! case SFmode: ! REAL_VALUE_TO_TARGET_SINGLE (r, i[endian]); ! i[1 - endian] = 0; ! break; ! case DFmode: ! REAL_VALUE_TO_TARGET_DOUBLE (r, i); ! break; ! #if LONG_DOUBLE_TYPE_SIZE == 96 ! case XFmode: REAL_VALUE_TO_TARGET_LONG_DOUBLE (r, i + endian); ! i[3-3*endian] = 0; ! #else ! case TFmode: REAL_VALUE_TO_TARGET_LONG_DOUBLE (r, i); - #endif break; default: abort (); } - /* Now, pack the 32-bit elements of the array into a CONST_DOUBLE and return it. */ #if HOST_BITS_PER_WIDE_INT == 32 ! return immed_double_const (i[endian], i[1 - endian], mode); #else ! { ! int c; ! ! if (HOST_BITS_PER_WIDE_INT != 64) ! abort (); ! ! for (c = 0; c < 4; c++) ! i[c] &= ~ (0L); ! switch (GET_MODE (x)) ! { ! case SFmode: ! case DFmode: ! return immed_double_const (((unsigned long) i[endian]) | ! (((HOST_WIDE_INT) i[1-endian]) << 32), ! 0, mode); ! default: ! return immed_double_const (((unsigned long) i[endian*3]) | ! (((HOST_WIDE_INT) i[1+endian]) << 32), ! ((unsigned long) i[2-endian]) | ! (((HOST_WIDE_INT) i[3-endian*3]) << 32), ! mode); ! } ! } #endif } #endif /* ifndef REAL_ARITHMETIC */ --- 1035,1079 ---- long i[4]; /* Only the low 32 bits of each 'long' are used. */ int endian = WORDS_BIG_ENDIAN ? 1 : 0; + /* Convert 'r' into an array of four 32-bit words in target word + order. */ REAL_VALUE_FROM_CONST_DOUBLE (r, x); ! switch (GET_MODE_BITSIZE (GET_MODE (x))) { ! case 32: ! REAL_VALUE_TO_TARGET_SINGLE (r, i[3 * endian]); ! i[1] = 0; ! i[2] = 0; ! i[3 - 3 * endian] = 0; ! break; ! case 64: ! REAL_VALUE_TO_TARGET_DOUBLE (r, i + 2 * endian); ! i[2 - 2 * endian] = 0; ! i[3 - 2 * endian] = 0; ! break; ! case 96: REAL_VALUE_TO_TARGET_LONG_DOUBLE (r, i + endian); ! i[3 - 3 * endian] = 0; ! break; ! case 128: REAL_VALUE_TO_TARGET_LONG_DOUBLE (r, i); break; default: abort (); } /* Now, pack the 32-bit elements of the array into a CONST_DOUBLE and return it. */ #if HOST_BITS_PER_WIDE_INT == 32 ! return immed_double_const (i[3 * endian], i[1 + endian], mode); #else ! if (HOST_BITS_PER_WIDE_INT != 64) ! abort (); ! return immed_double_const ((((unsigned long) i[3 * endian]) ! | ((HOST_WIDE_INT) i[1 + endian] << 32)), ! (((unsigned long) i[2 - endian]) ! | ((HOST_WIDE_INT) i[3 - 3 * endian] << 32)), ! mode); #endif } #endif /* ifndef REAL_ARITHMETIC */ *************** gen_lowpart_common (mode, x) *** 994,1009 **** rtx gen_realpart (mode, x) enum machine_mode mode; ! register rtx x; { ! if (GET_CODE (x) == CONCAT && GET_MODE (XEXP (x, 0)) == mode) ! return XEXP (x, 0); ! else if (WORDS_BIG_ENDIAN ! && GET_MODE_BITSIZE (mode) < BITS_PER_WORD ! && REG_P (x) ! && REGNO (x) < FIRST_PSEUDO_REGISTER) internal_error ! ("Can't access real part of complex value in hard register"); else if (WORDS_BIG_ENDIAN) return gen_highpart (mode, x); else --- 1088,1101 ---- rtx gen_realpart (mode, x) enum machine_mode mode; ! rtx x; { ! if (WORDS_BIG_ENDIAN ! && GET_MODE_BITSIZE (mode) < BITS_PER_WORD ! && REG_P (x) ! && REGNO (x) < FIRST_PSEUDO_REGISTER) internal_error ! ("can't access real part of complex value in hard register"); else if (WORDS_BIG_ENDIAN) return gen_highpart (mode, x); else *************** gen_realpart (mode, x) *** 1016,1028 **** rtx gen_imagpart (mode, x) enum machine_mode mode; ! register rtx x; { ! if (GET_CODE (x) == CONCAT && GET_MODE (XEXP (x, 0)) == mode) ! return XEXP (x, 1); ! else if (WORDS_BIG_ENDIAN) return gen_lowpart (mode, x); ! else if (!WORDS_BIG_ENDIAN && GET_MODE_BITSIZE (mode) < BITS_PER_WORD && REG_P (x) && REGNO (x) < FIRST_PSEUDO_REGISTER) --- 1108,1118 ---- rtx gen_imagpart (mode, x) enum machine_mode mode; ! rtx x; { ! if (WORDS_BIG_ENDIAN) return gen_lowpart (mode, x); ! else if (! WORDS_BIG_ENDIAN && GET_MODE_BITSIZE (mode) < BITS_PER_WORD && REG_P (x) && REGNO (x) < FIRST_PSEUDO_REGISTER) *************** subreg_realpart_p (x) *** 1044,1050 **** if (GET_CODE (x) != SUBREG) abort (); ! return ((unsigned int) SUBREG_WORD (x) * UNITS_PER_WORD < GET_MODE_UNIT_SIZE (GET_MODE (SUBREG_REG (x)))); } --- 1134,1140 ---- if (GET_CODE (x) != SUBREG) abort (); ! return ((unsigned int) SUBREG_BYTE (x) < GET_MODE_UNIT_SIZE (GET_MODE (SUBREG_REG (x)))); } *************** subreg_realpart_p (x) *** 1058,1064 **** rtx gen_lowpart (mode, x) enum machine_mode mode; ! register rtx x; { rtx result = gen_lowpart_common (mode, x); --- 1148,1154 ---- rtx gen_lowpart (mode, x) enum machine_mode mode; ! rtx x; { rtx result = gen_lowpart_common (mode, x); *************** gen_lowpart (mode, x) *** 1075,1081 **** else if (GET_CODE (x) == MEM) { /* The only additional case we can do is MEM. */ ! register int offset = 0; if (WORDS_BIG_ENDIAN) offset = (MAX (GET_MODE_SIZE (GET_MODE (x)), UNITS_PER_WORD) - MAX (GET_MODE_SIZE (mode), UNITS_PER_WORD)); --- 1165,1171 ---- else if (GET_CODE (x) == MEM) { /* The only additional case we can do is MEM. */ ! int offset = 0; if (WORDS_BIG_ENDIAN) offset = (MAX (GET_MODE_SIZE (GET_MODE (x)), UNITS_PER_WORD) - MAX (GET_MODE_SIZE (mode), UNITS_PER_WORD)); *************** gen_lowpart (mode, x) *** 1086,1092 **** offset -= (MIN (UNITS_PER_WORD, GET_MODE_SIZE (mode)) - MIN (UNITS_PER_WORD, GET_MODE_SIZE (GET_MODE (x)))); ! return change_address (x, mode, plus_constant (XEXP (x, 0), offset)); } else if (GET_CODE (x) == ADDRESSOF) return gen_lowpart (mode, force_reg (GET_MODE (x), x)); --- 1176,1182 ---- offset -= (MIN (UNITS_PER_WORD, GET_MODE_SIZE (mode)) - MIN (UNITS_PER_WORD, GET_MODE_SIZE (GET_MODE (x)))); ! return adjust_address (x, mode, offset); } else if (GET_CODE (x) == ADDRESSOF) return gen_lowpart (mode, force_reg (GET_MODE (x), x)); *************** gen_lowpart (mode, x) *** 1094,1187 **** abort (); } ! /* Like `gen_lowpart', but refer to the most significant part. This is used to access the imaginary part of a complex number. */ rtx gen_highpart (mode, x) enum machine_mode mode; ! register rtx x; { /* This case loses if X is a subreg. To catch bugs early, complain if an invalid MODE is used even in other cases. */ ! if (GET_MODE_SIZE (mode) > UNITS_PER_WORD ! && GET_MODE_SIZE (mode) != GET_MODE_UNIT_SIZE (GET_MODE (x))) abort (); - if (GET_CODE (x) == CONST_DOUBLE - #if !(TARGET_FLOAT_FORMAT != HOST_FLOAT_FORMAT || defined (REAL_IS_NOT_DOUBLE)) - && GET_MODE_CLASS (GET_MODE (x)) != MODE_FLOAT - #endif - ) - return GEN_INT (CONST_DOUBLE_HIGH (x) & GET_MODE_MASK (mode)); - else if (GET_CODE (x) == CONST_INT) - { - if (HOST_BITS_PER_WIDE_INT <= BITS_PER_WORD) - return const0_rtx; - return GEN_INT (INTVAL (x) >> (HOST_BITS_PER_WIDE_INT - BITS_PER_WORD)); - } - else if (GET_CODE (x) == MEM) - { - register int offset = 0; - if (! WORDS_BIG_ENDIAN) - offset = (MAX (GET_MODE_SIZE (GET_MODE (x)), UNITS_PER_WORD) - - MAX (GET_MODE_SIZE (mode), UNITS_PER_WORD)); ! if (! BYTES_BIG_ENDIAN ! && GET_MODE_SIZE (mode) < UNITS_PER_WORD) ! offset -= (GET_MODE_SIZE (mode) ! - MIN (UNITS_PER_WORD, ! GET_MODE_SIZE (GET_MODE (x)))); ! return change_address (x, mode, plus_constant (XEXP (x, 0), offset)); ! } ! else if (GET_CODE (x) == SUBREG) { ! /* The only time this should occur is when we are looking at a ! multi-word item with a SUBREG whose mode is the same as that of the ! item. It isn't clear what we would do if it wasn't. */ ! if (SUBREG_WORD (x) != 0) abort (); ! return gen_highpart (mode, SUBREG_REG (x)); } ! else if (GET_CODE (x) == REG) { ! int word; ! /* Let the backend decide how many registers to skip. This is needed ! in particular for sparc64 where fp regs are smaller than a word. */ ! /* ??? Note that subregs are now ambiguous, in that those against ! pseudos are sized by the word size, while those against hard ! regs are sized by the underlying register size. Better would be ! to always interpret the subreg offset parameter as bytes or bits. */ ! if (GET_MODE_SIZE (GET_MODE (x)) < GET_MODE_SIZE (mode)) ! abort (); ! else if (WORDS_BIG_ENDIAN) ! word = 0; ! else if (REGNO (x) < FIRST_PSEUDO_REGISTER) ! word = (HARD_REGNO_NREGS (REGNO (x), GET_MODE (x)) ! - HARD_REGNO_NREGS (REGNO (x), mode)); ! else ! word = ((GET_MODE_SIZE (GET_MODE (x)) ! - MAX (GET_MODE_SIZE (mode), UNITS_PER_WORD)) ! / UNITS_PER_WORD); ! if (REGNO (x) < FIRST_PSEUDO_REGISTER ! /* integrate.c can't handle parts of a return value register. */ ! && (! REG_FUNCTION_VALUE_P (x) ! || ! rtx_equal_function_value_matters) ! /* We want to keep the stack, frame, and arg pointers special. */ ! && x != frame_pointer_rtx ! #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM ! && x != arg_pointer_rtx ! #endif ! && x != stack_pointer_rtx) ! return gen_rtx_REG (mode, REGNO (x) + word); ! else ! return gen_rtx_SUBREG (mode, x, word); } ! else ! abort (); } /* Return 1 iff X, assumed to be a SUBREG, --- 1184,1278 ---- abort (); } ! /* Like `gen_lowpart', but refer to the most significant part. This is used to access the imaginary part of a complex number. */ rtx gen_highpart (mode, x) enum machine_mode mode; ! rtx x; { + unsigned int msize = GET_MODE_SIZE (mode); + rtx result; + /* This case loses if X is a subreg. To catch bugs early, complain if an invalid MODE is used even in other cases. */ ! if (msize > UNITS_PER_WORD ! && msize != GET_MODE_UNIT_SIZE (GET_MODE (x))) abort (); ! result = simplify_gen_subreg (mode, x, GET_MODE (x), ! subreg_highpart_offset (mode, GET_MODE (x))); ! /* simplify_gen_subreg is not guaranteed to return a valid operand for ! the target if we have a MEM. gen_highpart must return a valid operand, ! emitting code if necessary to do so. */ ! if (result != NULL_RTX && GET_CODE (result) == MEM) ! result = validize_mem (result); ! ! if (!result) ! abort (); ! return result; ! } ! ! /* Like gen_highpart_mode, but accept mode of EXP operand in case EXP can ! be VOIDmode constant. */ ! rtx ! gen_highpart_mode (outermode, innermode, exp) ! enum machine_mode outermode, innermode; ! rtx exp; ! { ! if (GET_MODE (exp) != VOIDmode) { ! if (GET_MODE (exp) != innermode) abort (); ! return gen_highpart (outermode, exp); } ! return simplify_gen_subreg (outermode, exp, innermode, ! subreg_highpart_offset (outermode, innermode)); ! } ! /* Return offset in bytes to get OUTERMODE low part ! of the value in mode INNERMODE stored in memory in target format. */ ! ! unsigned int ! subreg_lowpart_offset (outermode, innermode) ! enum machine_mode outermode, innermode; ! { ! unsigned int offset = 0; ! int difference = (GET_MODE_SIZE (innermode) - GET_MODE_SIZE (outermode)); ! ! if (difference > 0) { ! if (WORDS_BIG_ENDIAN) ! offset += (difference / UNITS_PER_WORD) * UNITS_PER_WORD; ! if (BYTES_BIG_ENDIAN) ! offset += difference % UNITS_PER_WORD; ! } ! return offset; ! } ! /* Return offset in bytes to get OUTERMODE high part ! of the value in mode INNERMODE stored in memory in target format. */ ! unsigned int ! subreg_highpart_offset (outermode, innermode) ! enum machine_mode outermode, innermode; ! { ! unsigned int offset = 0; ! int difference = (GET_MODE_SIZE (innermode) - GET_MODE_SIZE (outermode)); ! if (GET_MODE_SIZE (innermode) < GET_MODE_SIZE (outermode)) ! abort (); ! ! if (difference > 0) ! { ! if (! WORDS_BIG_ENDIAN) ! offset += (difference / UNITS_PER_WORD) * UNITS_PER_WORD; ! if (! BYTES_BIG_ENDIAN) ! offset += difference % UNITS_PER_WORD; } ! ! return offset; } /* Return 1 iff X, assumed to be a SUBREG, *************** subreg_lowpart_p (x) *** 1197,1345 **** else if (GET_MODE (SUBREG_REG (x)) == VOIDmode) return 0; ! if (WORDS_BIG_ENDIAN ! && GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))) > UNITS_PER_WORD) ! return (SUBREG_WORD (x) ! == ((GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))) ! - MAX (GET_MODE_SIZE (GET_MODE (x)), UNITS_PER_WORD)) ! / UNITS_PER_WORD)); ! ! return SUBREG_WORD (x) == 0; } - /* Return subword I of operand OP. - The word number, I, is interpreted as the word number starting at the - low-order address. Word 0 is the low-order word if not WORDS_BIG_ENDIAN, - otherwise it is the high-order word. - - If we cannot extract the required word, we return zero. Otherwise, an - rtx corresponding to the requested word will be returned. - - VALIDATE_ADDRESS is nonzero if the address should be validated. Before - reload has completed, a valid address will always be returned. After - reload, if a valid address cannot be returned, we return zero. - - If VALIDATE_ADDRESS is zero, we simply form the required address; validating - it is the responsibility of the caller. ! MODE is the mode of OP in case it is a CONST_INT. */ rtx ! operand_subword (op, i, validate_address, mode) rtx op; ! unsigned int i; ! int validate_address; enum machine_mode mode; { - HOST_WIDE_INT val; int size_ratio = HOST_BITS_PER_WIDE_INT / BITS_PER_WORD; ! ! if (mode == VOIDmode) ! mode = GET_MODE (op); ! ! if (mode == VOIDmode) ! abort (); ! ! /* If OP is narrower than a word, fail. */ ! if (mode != BLKmode ! && (GET_MODE_SIZE (mode) < UNITS_PER_WORD)) ! return 0; ! ! /* If we want a word outside OP, return zero. */ ! if (mode != BLKmode ! && (i + 1) * UNITS_PER_WORD > GET_MODE_SIZE (mode)) ! return const0_rtx; /* If OP is already an integer word, return it. */ if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == UNITS_PER_WORD) return op; - /* If OP is a REG or SUBREG, we can handle it very simply. */ - if (GET_CODE (op) == REG) - { - /* ??? There is a potential problem with this code. It does not - properly handle extractions of a subword from a hard register - that is larger than word_mode. Presumably the check for - HARD_REGNO_MODE_OK catches these most of these cases. */ - - /* If OP is a hard register, but OP + I is not a hard register, - then extracting a subword is impossible. - - For example, consider if OP is the last hard register and it is - larger than word_mode. If we wanted word N (for N > 0) because a - part of that hard register was known to contain a useful value, - then OP + I would refer to a pseudo, not the hard register we - actually wanted. */ - if (REGNO (op) < FIRST_PSEUDO_REGISTER - && REGNO (op) + i >= FIRST_PSEUDO_REGISTER) - return 0; - - /* If the register is not valid for MODE, return 0. Note we - have to check both OP and OP + I since they may refer to - different parts of the register file. - - Consider if OP refers to the last 96bit FP register and we want - subword 3 because that subword is known to contain a value we - needed. */ - if (REGNO (op) < FIRST_PSEUDO_REGISTER - && (! HARD_REGNO_MODE_OK (REGNO (op), word_mode) - || ! HARD_REGNO_MODE_OK (REGNO (op) + i, word_mode))) - return 0; - else if (REGNO (op) >= FIRST_PSEUDO_REGISTER - || (REG_FUNCTION_VALUE_P (op) - && rtx_equal_function_value_matters) - /* We want to keep the stack, frame, and arg pointers - special. */ - || op == frame_pointer_rtx - #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM - || op == arg_pointer_rtx - #endif - || op == stack_pointer_rtx) - return gen_rtx_SUBREG (word_mode, op, i); - else - return gen_rtx_REG (word_mode, REGNO (op) + i); - } - else if (GET_CODE (op) == SUBREG) - return gen_rtx_SUBREG (word_mode, SUBREG_REG (op), i + SUBREG_WORD (op)); - else if (GET_CODE (op) == CONCAT) - { - unsigned int partwords - = GET_MODE_UNIT_SIZE (GET_MODE (op)) / UNITS_PER_WORD; - - if (i < partwords) - return operand_subword (XEXP (op, 0), i, validate_address, mode); - return operand_subword (XEXP (op, 1), i - partwords, - validate_address, mode); - } - - /* Form a new MEM at the requested address. */ - if (GET_CODE (op) == MEM) - { - rtx addr = plus_constant (XEXP (op, 0), i * UNITS_PER_WORD); - rtx new; - - if (validate_address) - { - if (reload_completed) - { - if (! strict_memory_address_p (word_mode, addr)) - return 0; - } - else - addr = memory_address (word_mode, addr); - } - - new = gen_rtx_MEM (word_mode, addr); - MEM_COPY_ATTRIBUTES (new, op); - return new; - } - - /* The only remaining cases are when OP is a constant. If the host and - target floating formats are the same, handling two-word floating - constants are easy. Note that REAL_VALUE_TO_TARGET_{SINGLE,DOUBLE} - are defined as returning one or two 32 bit values, respectively, - and not values of BITS_PER_WORD bits. */ #ifdef REAL_ARITHMETIC /* The output is some bits, the width of the target machine's word. A wider-word host can surely hold them in a CONST_INT. A narrower-word --- 1288,1315 ---- else if (GET_MODE (SUBREG_REG (x)) == VOIDmode) return 0; ! return (subreg_lowpart_offset (GET_MODE (x), GET_MODE (SUBREG_REG (x))) ! == SUBREG_BYTE (x)); } ! /* Helper routine for all the constant cases of operand_subword. ! Some places invoke this directly. */ rtx ! constant_subword (op, offset, mode) rtx op; ! int offset; enum machine_mode mode; { int size_ratio = HOST_BITS_PER_WIDE_INT / BITS_PER_WORD; ! HOST_WIDE_INT val; /* If OP is already an integer word, return it. */ if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == UNITS_PER_WORD) return op; #ifdef REAL_ARITHMETIC /* The output is some bits, the width of the target machine's word. A wider-word host can surely hold them in a CONST_INT. A narrower-word *************** operand_subword (op, i, validate_address *** 1360,1377 **** ??? This is a potential portability problem and should be fixed at some point. ! We must excercise caution with the sign bit. By definition there are 32 significant bits in K; there may be more in a HOST_WIDE_INT. Consider a host with a 32-bit long and a 64-bit HOST_WIDE_INT. So we explicitly mask and sign-extend as necessary. */ if (BITS_PER_WORD == 32) { ! val = k[i]; val = ((val & 0xffffffff) ^ 0x80000000) - 0x80000000; return GEN_INT (val); } #if HOST_BITS_PER_WIDE_INT >= 64 ! else if (BITS_PER_WORD >= 64 && i == 0) { val = k[! WORDS_BIG_ENDIAN]; val = (((val & 0xffffffff) ^ 0x80000000) - 0x80000000) << 32; --- 1330,1347 ---- ??? This is a potential portability problem and should be fixed at some point. ! We must exercise caution with the sign bit. By definition there are 32 significant bits in K; there may be more in a HOST_WIDE_INT. Consider a host with a 32-bit long and a 64-bit HOST_WIDE_INT. So we explicitly mask and sign-extend as necessary. */ if (BITS_PER_WORD == 32) { ! val = k[offset]; val = ((val & 0xffffffff) ^ 0x80000000) - 0x80000000; return GEN_INT (val); } #if HOST_BITS_PER_WIDE_INT >= 64 ! else if (BITS_PER_WORD >= 64 && offset == 0) { val = k[! WORDS_BIG_ENDIAN]; val = (((val & 0xffffffff) ^ 0x80000000) - 0x80000000) << 32; *************** operand_subword (op, i, validate_address *** 1381,1390 **** #endif else if (BITS_PER_WORD == 16) { ! val = k[i >> 1]; ! if ((i & 1) == !WORDS_BIG_ENDIAN) val >>= 16; ! val &= 0xffff; return GEN_INT (val); } else --- 1351,1360 ---- #endif else if (BITS_PER_WORD == 16) { ! val = k[offset >> 1]; ! if ((offset & 1) == ! WORDS_BIG_ENDIAN) val >>= 16; ! val = ((val & 0xffff) ^ 0x8000) - 0x8000; return GEN_INT (val); } else *************** operand_subword (op, i, validate_address *** 1403,1418 **** if (BITS_PER_WORD == 32) { ! val = k[i]; val = ((val & 0xffffffff) ^ 0x80000000) - 0x80000000; return GEN_INT (val); } #if HOST_BITS_PER_WIDE_INT >= 64 ! else if (BITS_PER_WORD >= 64 && i <= 1) { ! val = k[i*2 + ! WORDS_BIG_ENDIAN]; val = (((val & 0xffffffff) ^ 0x80000000) - 0x80000000) << 32; ! val |= (HOST_WIDE_INT) k[i*2 + WORDS_BIG_ENDIAN] & 0xffffffff; return GEN_INT (val); } #endif --- 1373,1388 ---- if (BITS_PER_WORD == 32) { ! val = k[offset]; val = ((val & 0xffffffff) ^ 0x80000000) - 0x80000000; return GEN_INT (val); } #if HOST_BITS_PER_WIDE_INT >= 64 ! else if (BITS_PER_WORD >= 64 && offset <= 1) { ! val = k[offset * 2 + ! WORDS_BIG_ENDIAN]; val = (((val & 0xffffffff) ^ 0x80000000) - 0x80000000) << 32; ! val |= (HOST_WIDE_INT) k[offset * 2 + WORDS_BIG_ENDIAN] & 0xffffffff; return GEN_INT (val); } #endif *************** operand_subword (op, i, validate_address *** 1432,1441 **** compilers don't like a conditional inside macro args, so we have two copies of the return. */ #ifdef HOST_WORDS_BIG_ENDIAN ! return GEN_INT (i == WORDS_BIG_ENDIAN ? CONST_DOUBLE_HIGH (op) : CONST_DOUBLE_LOW (op)); #else ! return GEN_INT (i != WORDS_BIG_ENDIAN ? CONST_DOUBLE_HIGH (op) : CONST_DOUBLE_LOW (op)); #endif } --- 1402,1411 ---- compilers don't like a conditional inside macro args, so we have two copies of the return. */ #ifdef HOST_WORDS_BIG_ENDIAN ! return GEN_INT (offset == WORDS_BIG_ENDIAN ? CONST_DOUBLE_HIGH (op) : CONST_DOUBLE_LOW (op)); #else ! return GEN_INT (offset != WORDS_BIG_ENDIAN ? CONST_DOUBLE_HIGH (op) : CONST_DOUBLE_LOW (op)); #endif } *************** operand_subword (op, i, validate_address *** 1461,1469 **** if (BITS_PER_WORD == 16) { ! if ((i & 1) == !WORDS_BIG_ENDIAN) val >>= 16; ! val &= 0xffff; } return GEN_INT (val); --- 1431,1439 ---- if (BITS_PER_WORD == 16) { ! if ((offset & 1) == ! WORDS_BIG_ENDIAN) val >>= 16; ! val = ((val & 0xffff) ^ 0x8000) - 0x8000; } return GEN_INT (val); *************** operand_subword (op, i, validate_address *** 1502,1511 **** return GEN_INT (u.i); } #endif /* no REAL_ARITHMETIC */ ! /* The only remaining cases that we can handle are integers. Convert to proper endianness now since these cases need it. ! At this point, i == 0 means the low-order word. We do not want to handle the case when BITS_PER_WORD <= HOST_BITS_PER_INT in general. However, if OP is (const_int 0), we can just return --- 1472,1481 ---- return GEN_INT (u.i); } #endif /* no REAL_ARITHMETIC */ ! /* The only remaining cases that we can handle are integers. Convert to proper endianness now since these cases need it. ! At this point, offset == 0 means the low-order word. We do not want to handle the case when BITS_PER_WORD <= HOST_BITS_PER_INT in general. However, if OP is (const_int 0), we can just return *************** operand_subword (op, i, validate_address *** 1520,1558 **** return 0; if (WORDS_BIG_ENDIAN) ! i = GET_MODE_SIZE (mode) / UNITS_PER_WORD - 1 - i; /* Find out which word on the host machine this value is in and get it from the constant. */ ! val = (i / size_ratio == 0 ? (GET_CODE (op) == CONST_INT ? INTVAL (op) : CONST_DOUBLE_LOW (op)) : (GET_CODE (op) == CONST_INT ? (INTVAL (op) < 0 ? ~0 : 0) : CONST_DOUBLE_HIGH (op))); /* Get the value we want into the low bits of val. */ if (BITS_PER_WORD < HOST_BITS_PER_WIDE_INT) ! val = ((val >> ((i % size_ratio) * BITS_PER_WORD))); val = trunc_int_for_mode (val, word_mode); return GEN_INT (val); } /* Similar to `operand_subword', but never return 0. If we can't extract the required subword, put OP into a register and try again. If that fails, ! abort. We always validate the address in this case. It is not valid ! to call this function after reload; it is mostly meant for RTL ! generation. MODE is the mode of OP, in case it is CONST_INT. */ rtx ! operand_subword_force (op, i, mode) rtx op; ! unsigned int i; enum machine_mode mode; { ! rtx result = operand_subword (op, i, 1, mode); if (result) return result; --- 1490,1595 ---- return 0; if (WORDS_BIG_ENDIAN) ! offset = GET_MODE_SIZE (mode) / UNITS_PER_WORD - 1 - offset; /* Find out which word on the host machine this value is in and get it from the constant. */ ! val = (offset / size_ratio == 0 ? (GET_CODE (op) == CONST_INT ? INTVAL (op) : CONST_DOUBLE_LOW (op)) : (GET_CODE (op) == CONST_INT ? (INTVAL (op) < 0 ? ~0 : 0) : CONST_DOUBLE_HIGH (op))); /* Get the value we want into the low bits of val. */ if (BITS_PER_WORD < HOST_BITS_PER_WIDE_INT) ! val = ((val >> ((offset % size_ratio) * BITS_PER_WORD))); val = trunc_int_for_mode (val, word_mode); return GEN_INT (val); } + /* Return subword OFFSET of operand OP. + The word number, OFFSET, is interpreted as the word number starting + at the low-order address. OFFSET 0 is the low-order word if not + WORDS_BIG_ENDIAN, otherwise it is the high-order word. + + If we cannot extract the required word, we return zero. Otherwise, + an rtx corresponding to the requested word will be returned. + + VALIDATE_ADDRESS is nonzero if the address should be validated. Before + reload has completed, a valid address will always be returned. After + reload, if a valid address cannot be returned, we return zero. + + If VALIDATE_ADDRESS is zero, we simply form the required address; validating + it is the responsibility of the caller. + + MODE is the mode of OP in case it is a CONST_INT. + + ??? This is still rather broken for some cases. The problem for the + moment is that all callers of this thing provide no 'goal mode' to + tell us to work with. This exists because all callers were written + in a word based SUBREG world. + Now use of this function can be deprecated by simplify_subreg in most + cases. + */ + + rtx + operand_subword (op, offset, validate_address, mode) + rtx op; + unsigned int offset; + int validate_address; + enum machine_mode mode; + { + if (mode == VOIDmode) + mode = GET_MODE (op); + + if (mode == VOIDmode) + abort (); + + /* If OP is narrower than a word, fail. */ + if (mode != BLKmode + && (GET_MODE_SIZE (mode) < UNITS_PER_WORD)) + return 0; + + /* If we want a word outside OP, return zero. */ + if (mode != BLKmode + && (offset + 1) * UNITS_PER_WORD > GET_MODE_SIZE (mode)) + return const0_rtx; + + /* Form a new MEM at the requested address. */ + if (GET_CODE (op) == MEM) + { + rtx new = adjust_address_nv (op, word_mode, offset * UNITS_PER_WORD); + + if (! validate_address) + return new; + + else if (reload_completed) + { + if (! strict_memory_address_p (word_mode, XEXP (new, 0))) + return 0; + } + else + return replace_equiv_address (new, XEXP (new, 0)); + } + + /* Rest can be handled by simplify_subreg. */ + return simplify_gen_subreg (word_mode, op, mode, (offset * UNITS_PER_WORD)); + } + /* Similar to `operand_subword', but never return 0. If we can't extract the required subword, put OP into a register and try again. If that fails, ! abort. We always validate the address in this case. MODE is the mode of OP, in case it is CONST_INT. */ rtx ! operand_subword_force (op, offset, mode) rtx op; ! unsigned int offset; enum machine_mode mode; { ! rtx result = operand_subword (op, offset, 1, mode); if (result) return result; *************** operand_subword_force (op, i, mode) *** 1567,1573 **** op = force_reg (mode, op); } ! result = operand_subword (op, i, 1, mode); if (result == 0) abort (); --- 1604,1610 ---- op = force_reg (mode, op); } ! result = operand_subword (op, offset, 1, mode); if (result == 0) abort (); *************** reverse_comparison (insn) *** 1607,1622 **** } } ! /* Return a memory reference like MEMREF, but with its mode changed ! to MODE and its address changed to ADDR. ! (VOIDmode means don't change the mode. ! NULL for ADDR means don't change the address.) */ ! rtx ! change_address (memref, mode, addr) rtx memref; enum machine_mode mode; rtx addr; { rtx new; --- 1644,1908 ---- } } ! /* Within a MEM_EXPR, we care about either (1) a component ref of a decl, ! or (2) a component ref of something variable. Represent the later with ! a NULL expression. */ ! static tree ! component_ref_for_mem_expr (ref) ! tree ref; ! { ! tree inner = TREE_OPERAND (ref, 0); ! ! if (TREE_CODE (inner) == COMPONENT_REF) ! inner = component_ref_for_mem_expr (inner); ! else ! { ! tree placeholder_ptr = 0; ! ! /* Now remove any conversions: they don't change what the underlying ! object is. Likewise for SAVE_EXPR. Also handle PLACEHOLDER_EXPR. */ ! while (TREE_CODE (inner) == NOP_EXPR || TREE_CODE (inner) == CONVERT_EXPR ! || TREE_CODE (inner) == NON_LVALUE_EXPR ! || TREE_CODE (inner) == VIEW_CONVERT_EXPR ! || TREE_CODE (inner) == SAVE_EXPR ! || TREE_CODE (inner) == PLACEHOLDER_EXPR) ! if (TREE_CODE (inner) == PLACEHOLDER_EXPR) ! inner = find_placeholder (inner, &placeholder_ptr); ! else ! inner = TREE_OPERAND (inner, 0); ! ! if (! DECL_P (inner)) ! inner = NULL_TREE; ! } ! ! if (inner == TREE_OPERAND (ref, 0)) ! return ref; ! else ! return build (COMPONENT_REF, TREE_TYPE (ref), inner, ! TREE_OPERAND (ref, 1)); ! } ! ! /* Given REF, a MEM, and T, either the type of X or the expression ! corresponding to REF, set the memory attributes. OBJECTP is nonzero ! if we are making a new object of this type. */ ! ! void ! set_mem_attributes (ref, t, objectp) ! rtx ref; ! tree t; ! int objectp; ! { ! HOST_WIDE_INT alias = MEM_ALIAS_SET (ref); ! tree expr = MEM_EXPR (ref); ! rtx offset = MEM_OFFSET (ref); ! rtx size = MEM_SIZE (ref); ! unsigned int align = MEM_ALIGN (ref); ! tree type; ! ! /* It can happen that type_for_mode was given a mode for which there ! is no language-level type. In which case it returns NULL, which ! we can see here. */ ! if (t == NULL_TREE) ! return; ! ! type = TYPE_P (t) ? t : TREE_TYPE (t); ! ! /* If we have already set DECL_RTL = ref, get_alias_set will get the ! wrong answer, as it assumes that DECL_RTL already has the right alias ! info. Callers should not set DECL_RTL until after the call to ! set_mem_attributes. */ ! if (DECL_P (t) && ref == DECL_RTL_IF_SET (t)) ! abort (); ! ! /* Get the alias set from the expression or type (perhaps using a ! front-end routine) and use it. */ ! alias = get_alias_set (t); ! ! MEM_VOLATILE_P (ref) = TYPE_VOLATILE (type); ! MEM_IN_STRUCT_P (ref) = AGGREGATE_TYPE_P (type); ! RTX_UNCHANGING_P (ref) ! |= ((lang_hooks.honor_readonly ! && (TYPE_READONLY (type) || TREE_READONLY (t))) ! || (! TYPE_P (t) && TREE_CONSTANT (t))); ! ! /* If we are making an object of this type, or if this is a DECL, we know ! that it is a scalar if the type is not an aggregate. */ ! if ((objectp || DECL_P (t)) && ! AGGREGATE_TYPE_P (type)) ! MEM_SCALAR_P (ref) = 1; ! ! /* We can set the alignment from the type if we are making an object, ! this is an INDIRECT_REF, or if TYPE_ALIGN_OK. */ ! if (objectp || TREE_CODE (t) == INDIRECT_REF || TYPE_ALIGN_OK (type)) ! align = MAX (align, TYPE_ALIGN (type)); ! ! /* If the size is known, we can set that. */ ! if (TYPE_SIZE_UNIT (type) && host_integerp (TYPE_SIZE_UNIT (type), 1)) ! size = GEN_INT (tree_low_cst (TYPE_SIZE_UNIT (type), 1)); ! ! /* If T is not a type, we may be able to deduce some more information about ! the expression. */ ! if (! TYPE_P (t)) ! { ! maybe_set_unchanging (ref, t); ! if (TREE_THIS_VOLATILE (t)) ! MEM_VOLATILE_P (ref) = 1; ! ! /* Now remove any conversions: they don't change what the underlying ! object is. Likewise for SAVE_EXPR. */ ! while (TREE_CODE (t) == NOP_EXPR || TREE_CODE (t) == CONVERT_EXPR ! || TREE_CODE (t) == NON_LVALUE_EXPR ! || TREE_CODE (t) == VIEW_CONVERT_EXPR ! || TREE_CODE (t) == SAVE_EXPR) ! t = TREE_OPERAND (t, 0); ! ! /* If this expression can't be addressed (e.g., it contains a reference ! to a non-addressable field), show we don't change its alias set. */ ! if (! can_address_p (t)) ! MEM_KEEP_ALIAS_SET_P (ref) = 1; ! ! /* If this is a decl, set the attributes of the MEM from it. */ ! if (DECL_P (t)) ! { ! expr = t; ! offset = const0_rtx; ! size = (DECL_SIZE_UNIT (t) ! && host_integerp (DECL_SIZE_UNIT (t), 1) ! ? GEN_INT (tree_low_cst (DECL_SIZE_UNIT (t), 1)) : 0); ! align = DECL_ALIGN (t); ! } ! ! /* If this is a constant, we know the alignment. */ ! else if (TREE_CODE_CLASS (TREE_CODE (t)) == 'c') ! { ! align = TYPE_ALIGN (type); ! #ifdef CONSTANT_ALIGNMENT ! align = CONSTANT_ALIGNMENT (t, align); ! #endif ! } ! ! /* If this is a field reference and not a bit-field, record it. */ ! /* ??? There is some information that can be gleened from bit-fields, ! such as the word offset in the structure that might be modified. ! But skip it for now. */ ! else if (TREE_CODE (t) == COMPONENT_REF ! && ! DECL_BIT_FIELD (TREE_OPERAND (t, 1))) ! { ! expr = component_ref_for_mem_expr (t); ! offset = const0_rtx; ! /* ??? Any reason the field size would be different than ! the size we got from the type? */ ! } ! ! /* If this is an array reference, look for an outer field reference. */ ! else if (TREE_CODE (t) == ARRAY_REF) ! { ! tree off_tree = size_zero_node; ! ! do ! { ! off_tree ! = fold (build (PLUS_EXPR, sizetype, ! fold (build (MULT_EXPR, sizetype, ! TREE_OPERAND (t, 1), ! TYPE_SIZE_UNIT (TREE_TYPE (t)))), ! off_tree)); ! t = TREE_OPERAND (t, 0); ! } ! while (TREE_CODE (t) == ARRAY_REF); ! ! if (TREE_CODE (t) == COMPONENT_REF) ! { ! expr = component_ref_for_mem_expr (t); ! if (host_integerp (off_tree, 1)) ! offset = GEN_INT (tree_low_cst (off_tree, 1)); ! /* ??? Any reason the field size would be different than ! the size we got from the type? */ ! } ! } ! } ! ! /* Now set the attributes we computed above. */ ! MEM_ATTRS (ref) ! = get_mem_attrs (alias, expr, offset, size, align, GET_MODE (ref)); ! ! /* If this is already known to be a scalar or aggregate, we are done. */ ! if (MEM_IN_STRUCT_P (ref) || MEM_SCALAR_P (ref)) ! return; ! ! /* If it is a reference into an aggregate, this is part of an aggregate. ! Otherwise we don't know. */ ! else if (TREE_CODE (t) == COMPONENT_REF || TREE_CODE (t) == ARRAY_REF ! || TREE_CODE (t) == ARRAY_RANGE_REF ! || TREE_CODE (t) == BIT_FIELD_REF) ! MEM_IN_STRUCT_P (ref) = 1; ! } ! ! /* Set the alias set of MEM to SET. */ ! ! void ! set_mem_alias_set (mem, set) ! rtx mem; ! HOST_WIDE_INT set; ! { ! #ifdef ENABLE_CHECKING ! /* If the new and old alias sets don't conflict, something is wrong. */ ! if (!alias_sets_conflict_p (set, MEM_ALIAS_SET (mem))) ! abort (); ! #endif ! ! MEM_ATTRS (mem) = get_mem_attrs (set, MEM_EXPR (mem), MEM_OFFSET (mem), ! MEM_SIZE (mem), MEM_ALIGN (mem), ! GET_MODE (mem)); ! } ! ! /* Set the alignment of MEM to ALIGN bits. */ ! ! void ! set_mem_align (mem, align) ! rtx mem; ! unsigned int align; ! { ! MEM_ATTRS (mem) = get_mem_attrs (MEM_ALIAS_SET (mem), MEM_EXPR (mem), ! MEM_OFFSET (mem), MEM_SIZE (mem), align, ! GET_MODE (mem)); ! } ! ! /* Set the expr for MEM to EXPR. */ ! ! void ! set_mem_expr (mem, expr) ! rtx mem; ! tree expr; ! { ! MEM_ATTRS (mem) ! = get_mem_attrs (MEM_ALIAS_SET (mem), expr, MEM_OFFSET (mem), ! MEM_SIZE (mem), MEM_ALIGN (mem), GET_MODE (mem)); ! } ! ! /* Set the offset of MEM to OFFSET. */ ! ! void ! set_mem_offset (mem, offset) ! rtx mem, offset; ! { ! MEM_ATTRS (mem) = get_mem_attrs (MEM_ALIAS_SET (mem), MEM_EXPR (mem), ! offset, MEM_SIZE (mem), MEM_ALIGN (mem), ! GET_MODE (mem)); ! } ! ! /* Return a memory reference like MEMREF, but with its mode changed to MODE ! and its address changed to ADDR. (VOIDmode means don't change the mode. ! NULL for ADDR means don't change the address.) VALIDATE is nonzero if the ! returned memory location is required to be valid. The memory ! attributes are not changed. */ ! ! static rtx ! change_address_1 (memref, mode, addr, validate) rtx memref; enum machine_mode mode; rtx addr; + int validate; { rtx new; *************** change_address (memref, mode, addr) *** 1627,1642 **** if (addr == 0) addr = XEXP (memref, 0); ! /* If reload is in progress or has completed, ADDR must be valid. ! Otherwise, we can call memory_address to make it valid. */ ! if (reload_completed || reload_in_progress) { ! if (! memory_address_p (mode, addr)) ! abort (); } ! else ! addr = memory_address (mode, addr); ! if (rtx_equal_p (addr, XEXP (memref, 0)) && mode == GET_MODE (memref)) return memref; --- 1913,1929 ---- if (addr == 0) addr = XEXP (memref, 0); ! if (validate) { ! if (reload_in_progress || reload_completed) ! { ! if (! memory_address_p (mode, addr)) ! abort (); ! } ! else ! addr = memory_address (mode, addr); } ! if (rtx_equal_p (addr, XEXP (memref, 0)) && mode == GET_MODE (memref)) return memref; *************** change_address (memref, mode, addr) *** 1644,1659 **** MEM_COPY_ATTRIBUTES (new, memref); return new; } /* Return a newly created CODE_LABEL rtx with a unique label number. */ rtx gen_label_rtx () { ! register rtx label; label = gen_rtx_CODE_LABEL (VOIDmode, 0, NULL_RTX, ! NULL_RTX, label_num++, NULL_PTR, NULL_PTR); LABEL_NUSES (label) = 0; LABEL_ALTERNATE_NAME (label) = NULL; --- 1931,2199 ---- MEM_COPY_ATTRIBUTES (new, memref); return new; } + + /* Like change_address_1 with VALIDATE nonzero, but we are not saying in what + way we are changing MEMREF, so we only preserve the alias set. */ + + rtx + change_address (memref, mode, addr) + rtx memref; + enum machine_mode mode; + rtx addr; + { + rtx new = change_address_1 (memref, mode, addr, 1); + enum machine_mode mmode = GET_MODE (new); + + MEM_ATTRS (new) + = get_mem_attrs (MEM_ALIAS_SET (memref), 0, 0, + mmode == BLKmode ? 0 : GEN_INT (GET_MODE_SIZE (mmode)), + (mmode == BLKmode ? BITS_PER_UNIT + : GET_MODE_ALIGNMENT (mmode)), + mmode); + + return new; + } + + /* Return a memory reference like MEMREF, but with its mode changed + to MODE and its address offset by OFFSET bytes. If VALIDATE is + nonzero, the memory address is forced to be valid. + If ADJUST is zero, OFFSET is only used to update MEM_ATTRS + and caller is responsible for adjusting MEMREF base register. */ + + rtx + adjust_address_1 (memref, mode, offset, validate, adjust) + rtx memref; + enum machine_mode mode; + HOST_WIDE_INT offset; + int validate, adjust; + { + rtx addr = XEXP (memref, 0); + rtx new; + rtx memoffset = MEM_OFFSET (memref); + rtx size = 0; + unsigned int memalign = MEM_ALIGN (memref); + + /* ??? Prefer to create garbage instead of creating shared rtl. + This may happen even if offset is non-zero -- consider + (plus (plus reg reg) const_int) -- so do this always. */ + addr = copy_rtx (addr); + + if (adjust) + { + /* If MEMREF is a LO_SUM and the offset is within the alignment of the + object, we can merge it into the LO_SUM. */ + if (GET_MODE (memref) != BLKmode && GET_CODE (addr) == LO_SUM + && offset >= 0 + && (unsigned HOST_WIDE_INT) offset + < GET_MODE_ALIGNMENT (GET_MODE (memref)) / BITS_PER_UNIT) + addr = gen_rtx_LO_SUM (Pmode, XEXP (addr, 0), + plus_constant (XEXP (addr, 1), offset)); + else + addr = plus_constant (addr, offset); + } + + new = change_address_1 (memref, mode, addr, validate); + + /* Compute the new values of the memory attributes due to this adjustment. + We add the offsets and update the alignment. */ + if (memoffset) + memoffset = GEN_INT (offset + INTVAL (memoffset)); + + /* Compute the new alignment by taking the MIN of the alignment and the + lowest-order set bit in OFFSET, but don't change the alignment if OFFSET + if zero. */ + if (offset != 0) + memalign + = MIN (memalign, + (unsigned HOST_WIDE_INT) (offset & -offset) * BITS_PER_UNIT); + + /* We can compute the size in a number of ways. */ + if (GET_MODE (new) != BLKmode) + size = GEN_INT (GET_MODE_SIZE (GET_MODE (new))); + else if (MEM_SIZE (memref)) + size = plus_constant (MEM_SIZE (memref), -offset); + + MEM_ATTRS (new) = get_mem_attrs (MEM_ALIAS_SET (memref), MEM_EXPR (memref), + memoffset, size, memalign, GET_MODE (new)); + + /* At some point, we should validate that this offset is within the object, + if all the appropriate values are known. */ + return new; + } + + /* Return a memory reference like MEMREF, but with its mode changed + to MODE and its address changed to ADDR, which is assumed to be + MEMREF offseted by OFFSET bytes. If VALIDATE is + nonzero, the memory address is forced to be valid. */ + + rtx + adjust_automodify_address_1 (memref, mode, addr, offset, validate) + rtx memref; + enum machine_mode mode; + rtx addr; + HOST_WIDE_INT offset; + int validate; + { + memref = change_address_1 (memref, VOIDmode, addr, validate); + return adjust_address_1 (memref, mode, offset, validate, 0); + } + + /* Return a memory reference like MEMREF, but whose address is changed by + adding OFFSET, an RTX, to it. POW2 is the highest power of two factor + known to be in OFFSET (possibly 1). */ + + rtx + offset_address (memref, offset, pow2) + rtx memref; + rtx offset; + HOST_WIDE_INT pow2; + { + rtx new, addr = XEXP (memref, 0); + + new = simplify_gen_binary (PLUS, Pmode, addr, offset); + + /* At this point we don't know _why_ the address is invalid. It + could have secondary memory refereces, multiplies or anything. + + However, if we did go and rearrange things, we can wind up not + being able to recognize the magic around pic_offset_table_rtx. + This stuff is fragile, and is yet another example of why it is + bad to expose PIC machinery too early. */ + if (! memory_address_p (GET_MODE (memref), new) + && GET_CODE (addr) == PLUS + && XEXP (addr, 0) == pic_offset_table_rtx) + { + addr = force_reg (GET_MODE (addr), addr); + new = simplify_gen_binary (PLUS, Pmode, addr, offset); + } + + update_temp_slot_address (XEXP (memref, 0), new); + new = change_address_1 (memref, VOIDmode, new, 1); + + /* Update the alignment to reflect the offset. Reset the offset, which + we don't know. */ + MEM_ATTRS (new) + = get_mem_attrs (MEM_ALIAS_SET (memref), MEM_EXPR (memref), 0, 0, + MIN (MEM_ALIGN (memref), + (unsigned HOST_WIDE_INT) pow2 * BITS_PER_UNIT), + GET_MODE (new)); + return new; + } + + /* Return a memory reference like MEMREF, but with its address changed to + ADDR. The caller is asserting that the actual piece of memory pointed + to is the same, just the form of the address is being changed, such as + by putting something into a register. */ + + rtx + replace_equiv_address (memref, addr) + rtx memref; + rtx addr; + { + /* change_address_1 copies the memory attribute structure without change + and that's exactly what we want here. */ + update_temp_slot_address (XEXP (memref, 0), addr); + return change_address_1 (memref, VOIDmode, addr, 1); + } + + /* Likewise, but the reference is not required to be valid. */ + + rtx + replace_equiv_address_nv (memref, addr) + rtx memref; + rtx addr; + { + return change_address_1 (memref, VOIDmode, addr, 0); + } + + /* Return a memory reference like MEMREF, but with its mode widened to + MODE and offset by OFFSET. This would be used by targets that e.g. + cannot issue QImode memory operations and have to use SImode memory + operations plus masking logic. */ + + rtx + widen_memory_access (memref, mode, offset) + rtx memref; + enum machine_mode mode; + HOST_WIDE_INT offset; + { + rtx new = adjust_address_1 (memref, mode, offset, 1, 1); + tree expr = MEM_EXPR (new); + rtx memoffset = MEM_OFFSET (new); + unsigned int size = GET_MODE_SIZE (mode); + + /* If we don't know what offset we were at within the expression, then + we can't know if we've overstepped the bounds. */ + if (! memoffset) + expr = NULL_TREE; + + while (expr) + { + if (TREE_CODE (expr) == COMPONENT_REF) + { + tree field = TREE_OPERAND (expr, 1); + + if (! DECL_SIZE_UNIT (field)) + { + expr = NULL_TREE; + break; + } + + /* Is the field at least as large as the access? If so, ok, + otherwise strip back to the containing structure. */ + if (TREE_CODE (DECL_SIZE_UNIT (field)) == INTEGER_CST + && compare_tree_int (DECL_SIZE_UNIT (field), size) >= 0 + && INTVAL (memoffset) >= 0) + break; + + if (! host_integerp (DECL_FIELD_OFFSET (field), 1)) + { + expr = NULL_TREE; + break; + } + + expr = TREE_OPERAND (expr, 0); + memoffset = (GEN_INT (INTVAL (memoffset) + + tree_low_cst (DECL_FIELD_OFFSET (field), 1) + + (tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1) + / BITS_PER_UNIT))); + } + /* Similarly for the decl. */ + else if (DECL_P (expr) + && DECL_SIZE_UNIT (expr) + && compare_tree_int (DECL_SIZE_UNIT (expr), size) >= 0 + && (! memoffset || INTVAL (memoffset) >= 0)) + break; + else + { + /* The widened memory access overflows the expression, which means + that it could alias another expression. Zap it. */ + expr = NULL_TREE; + break; + } + } + + if (! expr) + memoffset = NULL_RTX; + + /* The widened memory may alias other stuff, so zap the alias set. */ + /* ??? Maybe use get_alias_set on any remaining expression. */ + + MEM_ATTRS (new) = get_mem_attrs (0, expr, memoffset, GEN_INT (size), + MEM_ALIGN (new), mode); + + return new; + } /* Return a newly created CODE_LABEL rtx with a unique label number. */ rtx gen_label_rtx () { ! rtx label; label = gen_rtx_CODE_LABEL (VOIDmode, 0, NULL_RTX, ! NULL_RTX, label_num++, NULL, NULL); LABEL_NUSES (label) = 0; LABEL_ALTERNATE_NAME (label) = NULL; *************** free_emit_status (f) *** 1726,1736 **** { free (f->emit->x_regno_reg_rtx); free (f->emit->regno_pointer_align); free (f->emit); f->emit = NULL; } ! /* Go through all the RTL insn bodies and copy any invalid shared structure. This routine should only be called once. */ void --- 2266,2277 ---- { free (f->emit->x_regno_reg_rtx); free (f->emit->regno_pointer_align); + free (f->emit->regno_decl); free (f->emit); f->emit = NULL; } ! /* Go through all the RTL insn bodies and copy any invalid shared structure. This routine should only be called once. */ void *************** unshare_all_rtl (fndecl, insn) *** 1749,1755 **** /* Unshare just about everything else. */ unshare_all_rtl_1 (insn); ! /* Make sure the addresses of stack slots found outside the insn chain (such as, in DECL_RTL of a variable) are not shared with the insn chain. --- 2290,2296 ---- /* Unshare just about everything else. */ unshare_all_rtl_1 (insn); ! /* Make sure the addresses of stack slots found outside the insn chain (such as, in DECL_RTL of a variable) are not shared with the insn chain. *************** unshare_all_rtl (fndecl, insn) *** 1760,1766 **** stack_slot_list = copy_rtx_if_shared (stack_slot_list); } ! /* Go through all the RTL insn bodies and copy any invalid shared structure, again. This is a fairly expensive thing to do so it should be done sparingly. */ --- 2301,2307 ---- stack_slot_list = copy_rtx_if_shared (stack_slot_list); } ! /* Go through all the RTL insn bodies and copy any invalid shared structure, again. This is a fairly expensive thing to do so it should be done sparingly. */ *************** unshare_all_decls (blk) *** 1826,1832 **** } /* Go through all virtual stack slots of a function and mark them as ! not shared. */ static void reset_used_decls (blk) tree blk; --- 2367,2373 ---- } /* Go through all virtual stack slots of a function and mark them as ! not shared. */ static void reset_used_decls (blk) tree blk; *************** reset_used_decls (blk) *** 1843,1848 **** --- 2384,2492 ---- reset_used_decls (t); } + /* Similar to `copy_rtx' except that if MAY_SHARE is present, it is + placed in the result directly, rather than being copied. MAY_SHARE is + either a MEM of an EXPR_LIST of MEMs. */ + + rtx + copy_most_rtx (orig, may_share) + rtx orig; + rtx may_share; + { + rtx copy; + int i, j; + RTX_CODE code; + const char *format_ptr; + + if (orig == may_share + || (GET_CODE (may_share) == EXPR_LIST + && in_expr_list_p (may_share, orig))) + return orig; + + code = GET_CODE (orig); + + switch (code) + { + case REG: + case QUEUED: + case CONST_INT: + case CONST_DOUBLE: + case CONST_VECTOR: + case SYMBOL_REF: + case CODE_LABEL: + case PC: + case CC0: + return orig; + default: + break; + } + + copy = rtx_alloc (code); + PUT_MODE (copy, GET_MODE (orig)); + copy->in_struct = orig->in_struct; + copy->volatil = orig->volatil; + copy->unchanging = orig->unchanging; + copy->integrated = orig->integrated; + copy->frame_related = orig->frame_related; + + format_ptr = GET_RTX_FORMAT (GET_CODE (copy)); + + for (i = 0; i < GET_RTX_LENGTH (GET_CODE (copy)); i++) + { + switch (*format_ptr++) + { + case 'e': + XEXP (copy, i) = XEXP (orig, i); + if (XEXP (orig, i) != NULL && XEXP (orig, i) != may_share) + XEXP (copy, i) = copy_most_rtx (XEXP (orig, i), may_share); + break; + + case 'u': + XEXP (copy, i) = XEXP (orig, i); + break; + + case 'E': + case 'V': + XVEC (copy, i) = XVEC (orig, i); + if (XVEC (orig, i) != NULL) + { + XVEC (copy, i) = rtvec_alloc (XVECLEN (orig, i)); + for (j = 0; j < XVECLEN (copy, i); j++) + XVECEXP (copy, i, j) + = copy_most_rtx (XVECEXP (orig, i, j), may_share); + } + break; + + case 'w': + XWINT (copy, i) = XWINT (orig, i); + break; + + case 'n': + case 'i': + XINT (copy, i) = XINT (orig, i); + break; + + case 't': + XTREE (copy, i) = XTREE (orig, i); + break; + + case 's': + case 'S': + XSTR (copy, i) = XSTR (orig, i); + break; + + case '0': + /* Copy this through the wide int field; that's safest. */ + X0WINT (copy, i) = X0WINT (orig, i); + break; + + default: + abort (); + } + } + return copy; + } + /* Mark ORIG as in use, and return a copy of it if it was already in use. Recursively does the same for subexpressions. */ *************** rtx *** 1850,1859 **** copy_rtx_if_shared (orig) rtx orig; { ! register rtx x = orig; ! register int i; ! register enum rtx_code code; ! register const char *format_ptr; int copied = 0; if (x == 0) --- 2494,2503 ---- copy_rtx_if_shared (orig) rtx orig; { ! rtx x = orig; ! int i; ! enum rtx_code code; ! const char *format_ptr; int copied = 0; if (x == 0) *************** copy_rtx_if_shared (orig) *** 1869,1874 **** --- 2513,2519 ---- case QUEUED: case CONST_INT: case CONST_DOUBLE: + case CONST_VECTOR: case SYMBOL_REF: case CODE_LABEL: case PC: *************** copy_rtx_if_shared (orig) *** 1897,1903 **** case MEM: /* A MEM is allowed to be shared if its address is constant. ! We used to allow sharing of MEMs which referenced virtual_stack_vars_rtx or virtual_incoming_args_rtx, but that can lose. instantiate_virtual_regs will not unshare the MEMs, and combine may change the structure of the address --- 2542,2548 ---- case MEM: /* A MEM is allowed to be shared if its address is constant. ! We used to allow sharing of MEMs which referenced virtual_stack_vars_rtx or virtual_incoming_args_rtx, but that can lose. instantiate_virtual_regs will not unshare the MEMs, and combine may change the structure of the address *************** copy_rtx_if_shared (orig) *** 1917,1923 **** if (x->used) { ! register rtx copy; copy = rtx_alloc (code); memcpy (copy, x, --- 2562,2568 ---- if (x->used) { ! rtx copy; copy = rtx_alloc (code); memcpy (copy, x, *************** copy_rtx_if_shared (orig) *** 1946,1952 **** case 'E': if (XVEC (x, i) != NULL) { ! register int j; int len = XVECLEN (x, i); if (copied && len > 0) --- 2591,2597 ---- case 'E': if (XVEC (x, i) != NULL) { ! int j; int len = XVECLEN (x, i); if (copied && len > 0) *************** void *** 1967,1975 **** reset_used_flags (x) rtx x; { ! register int i, j; ! register enum rtx_code code; ! register const char *format_ptr; if (x == 0) return; --- 2612,2620 ---- reset_used_flags (x) rtx x; { ! int i, j; ! enum rtx_code code; ! const char *format_ptr; if (x == 0) return; *************** reset_used_flags (x) *** 1985,1990 **** --- 2630,2636 ---- case QUEUED: case CONST_INT: case CONST_DOUBLE: + case CONST_VECTOR: case SYMBOL_REF: case CODE_LABEL: case PC: *************** reset_used_flags (x) *** 1999,2005 **** case BARRIER: /* The chain of insns is not being copied. */ return; ! default: break; } --- 2645,2651 ---- case BARRIER: /* The chain of insns is not being copied. */ return; ! default: break; } *************** renumber_insns (stream) *** 2134,2140 **** for (insn = get_insns (); insn; insn = NEXT_INSN (insn)) { if (stream) ! fprintf (stream, "Renumbering insn %d to %d\n", INSN_UID (insn), cur_insn_uid); INSN_UID (insn) = cur_insn_uid++; } --- 2780,2786 ---- for (insn = get_insns (); insn; insn = NEXT_INSN (insn)) { if (stream) ! fprintf (stream, "Renumbering insn %d to %d\n", INSN_UID (insn), cur_insn_uid); INSN_UID (insn) = cur_insn_uid++; } *************** prev_cc0_setter (insn) *** 2396,2407 **** /* Increment the label uses for all labels present in rtx. */ static void ! mark_label_nuses (x) ! rtx x; { ! register enum rtx_code code; ! register int i, j; ! register const char *fmt; code = GET_CODE (x); if (code == LABEL_REF) --- 3042,3053 ---- /* Increment the label uses for all labels present in rtx. */ static void ! mark_label_nuses(x) ! rtx x; { ! enum rtx_code code; ! int i, j; ! const char *fmt; code = GET_CODE (x); if (code == LABEL_REF) *************** try_split (pat, trial, last) *** 2435,2443 **** { rtx before = PREV_INSN (trial); rtx after = NEXT_INSN (trial); - rtx seq = split_insns (pat, trial); int has_barrier = 0; rtx tem; /* If we are splitting a JUMP_INSN, it might be followed by a BARRIER. We may need to handle this specially. */ --- 3081,3099 ---- { rtx before = PREV_INSN (trial); rtx after = NEXT_INSN (trial); int has_barrier = 0; rtx tem; + rtx note, seq; + int probability; + + if (any_condjump_p (trial) + && (note = find_reg_note (trial, REG_BR_PROB, 0))) + split_branch_probability = INTVAL (XEXP (note, 0)); + probability = split_branch_probability; + + seq = split_insns (pat, trial); + + split_branch_probability = -1; /* If we are splitting a JUMP_INSN, it might be followed by a BARRIER. We may need to handle this specially. */ *************** try_split (pat, trial, last) *** 2454,2474 **** it, in turn, will be split (SFmode on the 29k is an example). */ if (GET_CODE (seq) == SEQUENCE) { ! int i; ! rtx eh_note; ! /* Avoid infinite loop if any insn of the result matches the original pattern. */ for (i = 0; i < XVECLEN (seq, 0); i++) ! if (GET_CODE (XVECEXP (seq, 0, i)) == INSN && rtx_equal_p (PATTERN (XVECEXP (seq, 0, i)), pat)) ! return trial; /* Mark labels. */ for (i = XVECLEN (seq, 0) - 1; i >= 0; i--) if (GET_CODE (XVECEXP (seq, 0, i)) == JUMP_INSN) ! mark_jump_label (PATTERN (XVECEXP (seq, 0, i)), ! XVECEXP (seq, 0, i), 0, 0); /* If we are splitting a CALL_INSN, look for the CALL_INSN in SEQ and copy our CALL_INSN_FUNCTION_USAGE to it. */ --- 3110,3148 ---- it, in turn, will be split (SFmode on the 29k is an example). */ if (GET_CODE (seq) == SEQUENCE) { ! int i, njumps = 0; ! /* Avoid infinite loop if any insn of the result matches the original pattern. */ for (i = 0; i < XVECLEN (seq, 0); i++) ! if (GET_CODE (XVECEXP (seq, 0, i)) == INSN && rtx_equal_p (PATTERN (XVECEXP (seq, 0, i)), pat)) ! return trial; /* Mark labels. */ for (i = XVECLEN (seq, 0) - 1; i >= 0; i--) if (GET_CODE (XVECEXP (seq, 0, i)) == JUMP_INSN) ! { ! rtx insn = XVECEXP (seq, 0, i); ! mark_jump_label (PATTERN (insn), ! XVECEXP (seq, 0, i), 0); ! njumps++; ! if (probability != -1 ! && any_condjump_p (insn) ! && !find_reg_note (insn, REG_BR_PROB, 0)) ! { ! /* We can preserve the REG_BR_PROB notes only if exactly ! one jump is created, otherwise the machine description ! is responsible for this step using ! split_branch_probability variable. */ ! if (njumps != 1) ! abort (); ! REG_NOTES (insn) ! = gen_rtx_EXPR_LIST (REG_BR_PROB, ! GEN_INT (probability), ! REG_NOTES (insn)); ! } ! } /* If we are splitting a CALL_INSN, look for the CALL_INSN in SEQ and copy our CALL_INSN_FUNCTION_USAGE to it. */ *************** try_split (pat, trial, last) *** 2478,2495 **** CALL_INSN_FUNCTION_USAGE (XVECEXP (seq, 0, i)) = CALL_INSN_FUNCTION_USAGE (trial); ! /* Copy EH notes. */ ! if ((eh_note = find_reg_note (trial, REG_EH_REGION, NULL_RTX))) ! for (i = 0; i < XVECLEN (seq, 0); i++) ! { ! rtx insn = XVECEXP (seq, 0, i); ! if (GET_CODE (insn) == CALL_INSN ! || (flag_non_call_exceptions ! && may_trap_p (PATTERN (insn)))) ! REG_NOTES (insn) ! = gen_rtx_EXPR_LIST (REG_EH_REGION, XEXP (eh_note, 0), ! REG_NOTES (insn)); ! } /* If there are LABELS inside the split insns increment the usage count so we don't delete the label. */ --- 3152,3206 ---- CALL_INSN_FUNCTION_USAGE (XVECEXP (seq, 0, i)) = CALL_INSN_FUNCTION_USAGE (trial); ! /* Copy notes, particularly those related to the CFG. */ ! for (note = REG_NOTES (trial); note ; note = XEXP (note, 1)) ! { ! switch (REG_NOTE_KIND (note)) ! { ! case REG_EH_REGION: ! for (i = XVECLEN (seq, 0) - 1; i >= 0; i--) ! { ! rtx insn = XVECEXP (seq, 0, i); ! if (GET_CODE (insn) == CALL_INSN ! || (flag_non_call_exceptions ! && may_trap_p (PATTERN (insn)))) ! REG_NOTES (insn) ! = gen_rtx_EXPR_LIST (REG_EH_REGION, ! XEXP (note, 0), ! REG_NOTES (insn)); ! } ! break; ! ! case REG_NORETURN: ! case REG_SETJMP: ! case REG_ALWAYS_RETURN: ! for (i = XVECLEN (seq, 0) - 1; i >= 0; i--) ! { ! rtx insn = XVECEXP (seq, 0, i); ! if (GET_CODE (insn) == CALL_INSN) ! REG_NOTES (insn) ! = gen_rtx_EXPR_LIST (REG_NOTE_KIND (note), ! XEXP (note, 0), ! REG_NOTES (insn)); ! } ! break; ! ! case REG_NON_LOCAL_GOTO: ! for (i = XVECLEN (seq, 0) - 1; i >= 0; i--) ! { ! rtx insn = XVECEXP (seq, 0, i); ! if (GET_CODE (insn) == JUMP_INSN) ! REG_NOTES (insn) ! = gen_rtx_EXPR_LIST (REG_NOTE_KIND (note), ! XEXP (note, 0), ! REG_NOTES (insn)); ! } ! break; ! ! default: ! break; ! } ! } /* If there are LABELS inside the split insns increment the usage count so we don't delete the label. */ *************** try_split (pat, trial, last) *** 2498,2506 **** if (GET_CODE (XVECEXP (seq, 0, i)) == INSN) mark_label_nuses (PATTERN (XVECEXP (seq, 0, i))); ! tem = emit_insn_after (seq, before); ! delete_insn (trial); if (has_barrier) emit_barrier_after (tem); --- 3209,3217 ---- if (GET_CODE (XVECEXP (seq, 0, i)) == INSN) mark_label_nuses (PATTERN (XVECEXP (seq, 0, i))); ! tem = emit_insn_after (seq, trial); ! delete_related_insns (trial); if (has_barrier) emit_barrier_after (tem); *************** try_split (pat, trial, last) *** 2525,2533 **** /* Return either the first or the last insn, depending on which was requested. */ ! return last ! ? (after ? prev_active_insn (after) : last_insn) ! : next_active_insn (before); } return trial; --- 3236,3244 ---- /* Return either the first or the last insn, depending on which was requested. */ ! return last ! ? (after ? PREV_INSN (after) : last_insn) ! : NEXT_INSN (before); } return trial; *************** rtx *** 2540,2546 **** make_insn_raw (pattern) rtx pattern; { ! register rtx insn; insn = rtx_alloc (INSN); --- 3251,3257 ---- make_insn_raw (pattern) rtx pattern; { ! rtx insn; insn = rtx_alloc (INSN); *************** make_insn_raw (pattern) *** 2561,2567 **** debug_rtx (insn); } #endif ! return insn; } --- 3272,3278 ---- debug_rtx (insn); } #endif ! return insn; } *************** static rtx *** 2571,2577 **** make_jump_insn_raw (pattern) rtx pattern; { ! register rtx insn; insn = rtx_alloc (JUMP_INSN); INSN_UID (insn) = cur_insn_uid++; --- 3282,3288 ---- make_jump_insn_raw (pattern) rtx pattern; { ! rtx insn; insn = rtx_alloc (JUMP_INSN); INSN_UID (insn) = cur_insn_uid++; *************** static rtx *** 2591,2597 **** make_call_insn_raw (pattern) rtx pattern; { ! register rtx insn; insn = rtx_alloc (CALL_INSN); INSN_UID (insn) = cur_insn_uid++; --- 3302,3308 ---- make_call_insn_raw (pattern) rtx pattern; { ! rtx insn; insn = rtx_alloc (CALL_INSN); INSN_UID (insn) = cur_insn_uid++; *************** make_call_insn_raw (pattern) *** 2610,2616 **** void add_insn (insn) ! register rtx insn; { PREV_INSN (insn) = last_insn; NEXT_INSN (insn) = 0; --- 3321,3327 ---- void add_insn (insn) ! rtx insn; { PREV_INSN (insn) = last_insn; NEXT_INSN (insn) = 0; *************** add_insn_after (insn, after) *** 2634,2639 **** --- 3345,3351 ---- rtx insn, after; { rtx next = NEXT_INSN (after); + basic_block bb; if (optimize && INSN_DELETED_P (after)) abort (); *************** add_insn_after (insn, after) *** 2664,2669 **** --- 3376,3396 ---- abort (); } + if (basic_block_for_insn + && (unsigned int) INSN_UID (after) < basic_block_for_insn->num_elements + && (bb = BLOCK_FOR_INSN (after))) + { + set_block_for_insn (insn, bb); + /* Should not happen as first in the BB is always + either NOTE or LABEL. */ + if (bb->end == after + /* Avoid clobbering of structure when creating new BB. */ + && GET_CODE (insn) != BARRIER + && (GET_CODE (insn) != NOTE + || NOTE_LINE_NUMBER (insn) != NOTE_INSN_BASIC_BLOCK)) + bb->end = insn; + } + NEXT_INSN (after) = insn; if (GET_CODE (after) == INSN && GET_CODE (PATTERN (after)) == SEQUENCE) { *************** add_insn_before (insn, before) *** 2682,2687 **** --- 3409,3415 ---- rtx insn, before; { rtx prev = PREV_INSN (before); + basic_block bb; if (optimize && INSN_DELETED_P (before)) abort (); *************** add_insn_before (insn, before) *** 2715,2720 **** --- 3443,3463 ---- abort (); } + if (basic_block_for_insn + && (unsigned int) INSN_UID (before) < basic_block_for_insn->num_elements + && (bb = BLOCK_FOR_INSN (before))) + { + set_block_for_insn (insn, bb); + /* Should not happen as first in the BB is always + either NOTE or LABEl. */ + if (bb->head == insn + /* Avoid clobbering of structure when creating new BB. */ + && GET_CODE (insn) != BARRIER + && (GET_CODE (insn) != NOTE + || NOTE_LINE_NUMBER (insn) != NOTE_INSN_BASIC_BLOCK)) + abort (); + } + PREV_INSN (before) = insn; if (GET_CODE (before) == INSN && GET_CODE (PATTERN (before)) == SEQUENCE) PREV_INSN (XVECEXP (PATTERN (before), 0, 0)) = insn; *************** remove_insn (insn) *** 2728,2733 **** --- 3471,3478 ---- { rtx next = NEXT_INSN (insn); rtx prev = PREV_INSN (insn); + basic_block bb; + if (prev) { NEXT_INSN (prev) = next; *************** remove_insn (insn) *** 2776,2781 **** --- 3521,3541 ---- if (stack == 0) abort (); } + if (basic_block_for_insn + && (unsigned int) INSN_UID (insn) < basic_block_for_insn->num_elements + && (bb = BLOCK_FOR_INSN (insn))) + { + if (bb->head == insn) + { + /* Never ever delete the basic block note without deleting whole + basic block. */ + if (GET_CODE (insn) == NOTE) + abort (); + bb->head = next; + } + if (bb->end == insn) + bb->end = prev; + } } /* Delete all insns made since FROM. *************** delete_insns_since (from) *** 2803,2809 **** called after delay-slot filling has been done. */ void ! reorder_insns (from, to, after) rtx from, to, after; { /* Splice this bunch out of where it is now. */ --- 3563,3569 ---- called after delay-slot filling has been done. */ void ! reorder_insns_nobb (from, to, after) rtx from, to, after; { /* Splice this bunch out of where it is now. */ *************** reorder_insns (from, to, after) *** 2827,2832 **** --- 3587,3625 ---- last_insn = to; } + /* Same as function above, but take care to update BB boundaries. */ + void + reorder_insns (from, to, after) + rtx from, to, after; + { + rtx prev = PREV_INSN (from); + basic_block bb, bb2; + + reorder_insns_nobb (from, to, after); + + if (basic_block_for_insn + && (unsigned int) INSN_UID (after) < basic_block_for_insn->num_elements + && (bb = BLOCK_FOR_INSN (after))) + { + rtx x; + + if (basic_block_for_insn + && ((unsigned int) INSN_UID (from) + < basic_block_for_insn->num_elements) + && (bb2 = BLOCK_FOR_INSN (from))) + { + if (bb2->end == to) + bb2->end = prev; + } + + if (bb->end == after) + bb->end = to; + + for (x = from; x != NEXT_INSN (to); x = NEXT_INSN (x)) + set_block_for_insn (x, bb); + } + } + /* Return the line note insn preceding INSN. */ static rtx *************** reorder_insns_with_line_notes (from, to, *** 2875,2882 **** --- 3668,3678 ---- void remove_unnecessary_notes () { + rtx block_stack = NULL_RTX; + rtx eh_stack = NULL_RTX; rtx insn; rtx next; + rtx tmp; /* We must not remove the first instruction in the function because the compiler depends on the first instruction being a note. */ *************** remove_unnecessary_notes () *** 2889,2943 **** if (GET_CODE (insn) != NOTE) continue; ! /* By now, all notes indicating lexical blocks should have ! NOTE_BLOCK filled in. */ ! if ((NOTE_LINE_NUMBER (insn) == NOTE_INSN_BLOCK_BEG ! || NOTE_LINE_NUMBER (insn) == NOTE_INSN_BLOCK_END) ! && NOTE_BLOCK (insn) == NULL_TREE) ! abort (); ! ! /* Remove NOTE_INSN_DELETED notes. */ ! if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_DELETED ! || NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END_TOP_COND) ! remove_insn (insn); ! else if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_BLOCK_END) { /* Scan back to see if there are any non-note instructions between INSN and the beginning of this block. If not, then there is no PC range in the generated code that will actually be in this block, so there's no point in remembering the existence of the block. */ ! rtx prev; ! ! for (prev = PREV_INSN (insn); prev; prev = PREV_INSN (prev)) { /* This block contains a real instruction. Note that we don't include labels; if the only thing in the block is a label, then there are still no PC values that lie within the block. */ ! if (INSN_P (prev)) break; /* We're only interested in NOTEs. */ ! if (GET_CODE (prev) != NOTE) continue; ! if (NOTE_LINE_NUMBER (prev) == NOTE_INSN_BLOCK_BEG) { ! /* If the BLOCKs referred to by these notes don't ! match, then something is wrong with our BLOCK ! nesting structure. */ ! if (NOTE_BLOCK (prev) != NOTE_BLOCK (insn)) ! abort (); ! ! if (debug_ignore_block (NOTE_BLOCK (insn))) { ! remove_insn (prev); remove_insn (insn); } break; } ! else if (NOTE_LINE_NUMBER (prev) == NOTE_INSN_BLOCK_END) /* There's a nested block. We need to leave the current block in place since otherwise the debugger wouldn't be able to show symbols from our block in --- 3685,3766 ---- if (GET_CODE (insn) != NOTE) continue; ! switch (NOTE_LINE_NUMBER (insn)) { + case NOTE_INSN_DELETED: + case NOTE_INSN_LOOP_END_TOP_COND: + remove_insn (insn); + break; + + case NOTE_INSN_EH_REGION_BEG: + eh_stack = alloc_INSN_LIST (insn, eh_stack); + break; + + case NOTE_INSN_EH_REGION_END: + /* Too many end notes. */ + if (eh_stack == NULL_RTX) + abort (); + /* Mismatched nesting. */ + if (NOTE_EH_HANDLER (XEXP (eh_stack, 0)) != NOTE_EH_HANDLER (insn)) + abort (); + tmp = eh_stack; + eh_stack = XEXP (eh_stack, 1); + free_INSN_LIST_node (tmp); + break; + + case NOTE_INSN_BLOCK_BEG: + /* By now, all notes indicating lexical blocks should have + NOTE_BLOCK filled in. */ + if (NOTE_BLOCK (insn) == NULL_TREE) + abort (); + block_stack = alloc_INSN_LIST (insn, block_stack); + break; + + case NOTE_INSN_BLOCK_END: + /* Too many end notes. */ + if (block_stack == NULL_RTX) + abort (); + /* Mismatched nesting. */ + if (NOTE_BLOCK (XEXP (block_stack, 0)) != NOTE_BLOCK (insn)) + abort (); + tmp = block_stack; + block_stack = XEXP (block_stack, 1); + free_INSN_LIST_node (tmp); + /* Scan back to see if there are any non-note instructions between INSN and the beginning of this block. If not, then there is no PC range in the generated code that will actually be in this block, so there's no point in remembering the existence of the block. */ ! for (tmp = PREV_INSN (insn); tmp ; tmp = PREV_INSN (tmp)) { /* This block contains a real instruction. Note that we don't include labels; if the only thing in the block is a label, then there are still no PC values that lie within the block. */ ! if (INSN_P (tmp)) break; /* We're only interested in NOTEs. */ ! if (GET_CODE (tmp) != NOTE) continue; ! if (NOTE_LINE_NUMBER (tmp) == NOTE_INSN_BLOCK_BEG) { ! /* We just verified that this BLOCK matches us with ! the block_stack check above. Never delete the ! BLOCK for the outermost scope of the function; we ! can refer to names from that scope even if the ! block notes are messed up. */ ! if (! is_body_block (NOTE_BLOCK (insn)) ! && (*debug_hooks->ignore_block) (NOTE_BLOCK (insn))) { ! remove_insn (tmp); remove_insn (insn); } break; } ! else if (NOTE_LINE_NUMBER (tmp) == NOTE_INSN_BLOCK_END) /* There's a nested block. We need to leave the current block in place since otherwise the debugger wouldn't be able to show symbols from our block in *************** remove_unnecessary_notes () *** 2946,2951 **** --- 3769,3778 ---- } } } + + /* Too many begin notes. */ + if (block_stack || eh_stack) + abort (); } *************** remove_unnecessary_notes () *** 2957,2969 **** rtx emit_insn_before (pattern, before) ! register rtx pattern, before; { ! register rtx insn = before; if (GET_CODE (pattern) == SEQUENCE) { ! register int i; for (i = 0; i < XVECLEN (pattern, 0); i++) { --- 3784,3796 ---- rtx emit_insn_before (pattern, before) ! rtx pattern, before; { ! rtx insn = before; if (GET_CODE (pattern) == SEQUENCE) { ! int i; for (i = 0; i < XVECLEN (pattern, 0); i++) { *************** emit_insn_before (pattern, before) *** 2980,3007 **** return insn; } - /* Similar to emit_insn_before, but update basic block boundaries as well. */ - - rtx - emit_block_insn_before (pattern, before, block) - rtx pattern, before; - basic_block block; - { - rtx prev = PREV_INSN (before); - rtx r = emit_insn_before (pattern, before); - if (block && block->head == before) - block->head = NEXT_INSN (prev); - return r; - } - /* Make an instruction with body PATTERN and code JUMP_INSN and output it before the instruction BEFORE. */ rtx emit_jump_insn_before (pattern, before) ! register rtx pattern, before; { ! register rtx insn; if (GET_CODE (pattern) == SEQUENCE) insn = emit_insn_before (pattern, before); --- 3807,3820 ---- return insn; } /* Make an instruction with body PATTERN and code JUMP_INSN and output it before the instruction BEFORE. */ rtx emit_jump_insn_before (pattern, before) ! rtx pattern, before; { ! rtx insn; if (GET_CODE (pattern) == SEQUENCE) insn = emit_insn_before (pattern, before); *************** emit_jump_insn_before (pattern, before) *** 3019,3027 **** rtx emit_call_insn_before (pattern, before) ! register rtx pattern, before; { ! register rtx insn; if (GET_CODE (pattern) == SEQUENCE) insn = emit_insn_before (pattern, before); --- 3832,3840 ---- rtx emit_call_insn_before (pattern, before) ! rtx pattern, before; { ! rtx insn; if (GET_CODE (pattern) == SEQUENCE) insn = emit_insn_before (pattern, before); *************** emit_call_insn_before (pattern, before) *** 3040,3048 **** rtx emit_barrier_before (before) ! register rtx before; { ! register rtx insn = rtx_alloc (BARRIER); INSN_UID (insn) = cur_insn_uid++; --- 3853,3861 ---- rtx emit_barrier_before (before) ! rtx before; { ! rtx insn = rtx_alloc (BARRIER); INSN_UID (insn) = cur_insn_uid++; *************** emit_note_before (subtype, before) *** 3074,3080 **** int subtype; rtx before; { ! register rtx note = rtx_alloc (NOTE); INSN_UID (note) = cur_insn_uid++; NOTE_SOURCE_FILE (note) = 0; NOTE_LINE_NUMBER (note) = subtype; --- 3887,3893 ---- int subtype; rtx before; { ! rtx note = rtx_alloc (NOTE); INSN_UID (note) = cur_insn_uid++; NOTE_SOURCE_FILE (note) = 0; NOTE_LINE_NUMBER (note) = subtype; *************** emit_note_before (subtype, before) *** 3088,3100 **** rtx emit_insn_after (pattern, after) ! register rtx pattern, after; { ! register rtx insn = after; if (GET_CODE (pattern) == SEQUENCE) { ! register int i; for (i = 0; i < XVECLEN (pattern, 0); i++) { --- 3901,3913 ---- rtx emit_insn_after (pattern, after) ! rtx pattern, after; { ! rtx insn = after; if (GET_CODE (pattern) == SEQUENCE) { ! int i; for (i = 0; i < XVECLEN (pattern, 0); i++) { *************** emit_insn_after_with_line_notes (pattern *** 3134,3160 **** insn); } - /* Similar to emit_insn_after, but update basic block boundaries as well. */ - - rtx - emit_block_insn_after (pattern, after, block) - rtx pattern, after; - basic_block block; - { - rtx r = emit_insn_after (pattern, after); - if (block && block->end == after) - block->end = r; - return r; - } - /* Make an insn of code JUMP_INSN with body PATTERN and output it after the insn AFTER. */ rtx emit_jump_insn_after (pattern, after) ! register rtx pattern, after; { ! register rtx insn; if (GET_CODE (pattern) == SEQUENCE) insn = emit_insn_after (pattern, after); --- 3947,3960 ---- insn); } /* Make an insn of code JUMP_INSN with body PATTERN and output it after the insn AFTER. */ rtx emit_jump_insn_after (pattern, after) ! rtx pattern, after; { ! rtx insn; if (GET_CODE (pattern) == SEQUENCE) insn = emit_insn_after (pattern, after); *************** emit_jump_insn_after (pattern, after) *** 3172,3180 **** rtx emit_barrier_after (after) ! register rtx after; { ! register rtx insn = rtx_alloc (BARRIER); INSN_UID (insn) = cur_insn_uid++; --- 3972,3980 ---- rtx emit_barrier_after (after) ! rtx after; { ! rtx insn = rtx_alloc (BARRIER); INSN_UID (insn) = cur_insn_uid++; *************** emit_note_after (subtype, after) *** 3207,3213 **** int subtype; rtx after; { ! register rtx note = rtx_alloc (NOTE); INSN_UID (note) = cur_insn_uid++; NOTE_SOURCE_FILE (note) = 0; NOTE_LINE_NUMBER (note) = subtype; --- 4007,4013 ---- int subtype; rtx after; { ! rtx note = rtx_alloc (NOTE); INSN_UID (note) = cur_insn_uid++; NOTE_SOURCE_FILE (note) = 0; NOTE_LINE_NUMBER (note) = subtype; *************** emit_line_note_after (file, line, after) *** 3223,3229 **** int line; rtx after; { ! register rtx note; if (no_line_numbers && line > 0) { --- 4023,4029 ---- int line; rtx after; { ! rtx note; if (no_line_numbers && line > 0) { *************** emit_insn (pattern) *** 3254,3260 **** if (GET_CODE (pattern) == SEQUENCE) { ! register int i; for (i = 0; i < XVECLEN (pattern, 0); i++) { --- 4054,4060 ---- if (GET_CODE (pattern) == SEQUENCE) { ! int i; for (i = 0; i < XVECLEN (pattern, 0); i++) { *************** emit_insns_before (insn, before) *** 3317,3336 **** rtx emit_insns_after (first, after) ! register rtx first; ! register rtx after; { ! register rtx last; ! register rtx after_after; if (!after) abort (); if (!first) ! return first; ! for (last = first; NEXT_INSN (last); last = NEXT_INSN (last)) ! continue; after_after = NEXT_INSN (after); --- 4117,4148 ---- rtx emit_insns_after (first, after) ! rtx first; ! rtx after; { ! rtx last; ! rtx after_after; ! basic_block bb; if (!after) abort (); if (!first) ! return after; ! if (basic_block_for_insn ! && (unsigned int) INSN_UID (after) < basic_block_for_insn->num_elements ! && (bb = BLOCK_FOR_INSN (after))) ! { ! for (last = first; NEXT_INSN (last); last = NEXT_INSN (last)) ! set_block_for_insn (last, bb); ! set_block_for_insn (last, bb); ! if (bb->end == after) ! bb->end = last; ! } ! else ! for (last = first; NEXT_INSN (last); last = NEXT_INSN (last)) ! continue; after_after = NEXT_INSN (after); *************** emit_jump_insn (pattern) *** 3356,3362 **** return emit_insn (pattern); else { ! register rtx insn = make_jump_insn_raw (pattern); add_insn (insn); return insn; } --- 4168,4174 ---- return emit_insn (pattern); else { ! rtx insn = make_jump_insn_raw (pattern); add_insn (insn); return insn; } *************** emit_call_insn (pattern) *** 3373,3379 **** return emit_insn (pattern); else { ! register rtx insn = make_call_insn_raw (pattern); add_insn (insn); PUT_CODE (insn, CALL_INSN); return insn; --- 4185,4191 ---- return emit_insn (pattern); else { ! rtx insn = make_call_insn_raw (pattern); add_insn (insn); PUT_CODE (insn, CALL_INSN); return insn; *************** emit_label (label) *** 3403,3409 **** rtx emit_barrier () { ! register rtx barrier = rtx_alloc (BARRIER); INSN_UID (barrier) = cur_insn_uid++; add_insn (barrier); return barrier; --- 4215,4221 ---- rtx emit_barrier () { ! rtx barrier = rtx_alloc (BARRIER); INSN_UID (barrier) = cur_insn_uid++; add_insn (barrier); return barrier; *************** emit_note (file, line) *** 3439,3445 **** const char *file; int line; { ! register rtx note; if (line > 0) { --- 4251,4257 ---- const char *file; int line; { ! rtx note; if (line > 0) { *************** force_next_line_note () *** 3485,3493 **** } /* Place a note of KIND on insn INSN with DATUM as the datum. If a ! note of this type already exists, remove it first. */ ! void set_unique_reg_note (insn, kind, datum) rtx insn; enum reg_note kind; --- 4297,4305 ---- } /* Place a note of KIND on insn INSN with DATUM as the datum. If a ! note of this type already exists, remove it first. */ ! rtx set_unique_reg_note (insn, kind, datum) rtx insn; enum reg_note kind; *************** set_unique_reg_note (insn, kind, datum) *** 3495,3505 **** { rtx note = find_reg_note (insn, kind, NULL_RTX); ! /* First remove the note if there already is one. */ ! if (note) ! remove_note (insn, note); REG_NOTES (insn) = gen_rtx_EXPR_LIST (kind, datum, REG_NOTES (insn)); } /* Return an indication of which type of insn should have X as a body. --- 4307,4345 ---- { rtx note = find_reg_note (insn, kind, NULL_RTX); ! switch (kind) ! { ! case REG_EQUAL: ! case REG_EQUIV: ! /* Don't add REG_EQUAL/REG_EQUIV notes if the insn ! has multiple sets (some callers assume single_set ! means the insn only has one set, when in fact it ! means the insn only has one * useful * set). */ ! if (GET_CODE (PATTERN (insn)) == PARALLEL && multiple_sets (insn)) ! { ! if (note) ! abort (); ! return NULL_RTX; ! } ! ! /* Don't add ASM_OPERAND REG_EQUAL/REG_EQUIV notes. ! It serves no useful purpose and breaks eliminate_regs. */ ! if (GET_CODE (datum) == ASM_OPERANDS) ! return NULL_RTX; ! break; ! ! default: ! break; ! } ! ! if (note) ! { ! XEXP (note, 0) = datum; ! return note; ! } REG_NOTES (insn) = gen_rtx_EXPR_LIST (kind, datum, REG_NOTES (insn)); + return REG_NOTES (insn); } /* Return an indication of which type of insn should have X as a body. *************** classify_insn (x) *** 3526,3532 **** } if (GET_CODE (x) == PARALLEL) { ! register int j; for (j = XVECLEN (x, 0) - 1; j >= 0; j--) if (GET_CODE (XVECEXP (x, 0, j)) == CALL) return CALL_INSN; --- 4366,4372 ---- } if (GET_CODE (x) == PARALLEL) { ! int j; for (j = XVECLEN (x, 0) - 1; j >= 0; j--) if (GET_CODE (XVECEXP (x, 0, j)) == CALL) return CALL_INSN; *************** emit (x) *** 3555,3561 **** return emit_insn (x); else if (code == JUMP_INSN) { ! register rtx insn = emit_jump_insn (x); if (any_uncondjump_p (insn) || GET_CODE (x) == RETURN) return emit_barrier (); return insn; --- 4395,4401 ---- return emit_insn (x); else if (code == JUMP_INSN) { ! rtx insn = emit_jump_insn (x); if (any_uncondjump_p (insn) || GET_CODE (x) == RETURN) return emit_barrier (); return insn; *************** pop_topmost_sequence () *** 3676,3682 **** /* After emitting to a sequence, restore previous saved state. To get the contents of the sequence just made, you must call ! `gen_sequence' *before* calling here. If the compiler might have deferred popping arguments while generating this sequence, and this sequence will not be immediately --- 4516,4522 ---- /* After emitting to a sequence, restore previous saved state. To get the contents of the sequence just made, you must call ! `gen_sequence' *before* calling here. If the compiler might have deferred popping arguments while generating this sequence, and this sequence will not be immediately *************** gen_sequence () *** 3740,3752 **** /* If only one insn, return it rather than a SEQUENCE. (Now that we cache SEQUENCE expressions, it isn't worth special-casing ! the case of an empty list.) We only return the pattern of an insn if its code is INSN and it has no notes. This ensures that no information gets lost. */ if (len == 1 && ! RTX_FRAME_RELATED_P (first_insn) && GET_CODE (first_insn) == INSN ! /* Don't throw away any reg notes. */ && REG_NOTES (first_insn) == 0) return PATTERN (first_insn); --- 4580,4592 ---- /* If only one insn, return it rather than a SEQUENCE. (Now that we cache SEQUENCE expressions, it isn't worth special-casing ! the case of an empty list.) We only return the pattern of an insn if its code is INSN and it has no notes. This ensures that no information gets lost. */ if (len == 1 && ! RTX_FRAME_RELATED_P (first_insn) && GET_CODE (first_insn) == INSN ! /* Don't throw away any reg notes. */ && REG_NOTES (first_insn) == 0) return PATTERN (first_insn); *************** static rtvec copy_asm_constraints_vector *** 3812,3823 **** rtx copy_insn_1 (orig) ! register rtx orig; { ! register rtx copy; ! register int i, j; ! register RTX_CODE code; ! register const char *format_ptr; code = GET_CODE (orig); --- 4652,4663 ---- rtx copy_insn_1 (orig) ! rtx orig; { ! rtx copy; ! int i, j; ! RTX_CODE code; ! const char *format_ptr; code = GET_CODE (orig); *************** copy_insn_1 (orig) *** 3827,3832 **** --- 4667,4673 ---- case QUEUED: case CONST_INT: case CONST_DOUBLE: + case CONST_VECTOR: case SYMBOL_REF: case CODE_LABEL: case PC: *************** copy_insn_1 (orig) *** 3848,3854 **** && GET_CODE (XEXP (XEXP (orig, 0), 1)) == CONST_INT) return orig; break; ! /* A MEM with a constant address is not sharable. The problem is that the constant address may need to be reloaded. If the mem is shared, then reloading one copy of this mem will cause all copies to appear --- 4689,4695 ---- && GET_CODE (XEXP (XEXP (orig, 0), 1)) == CONST_INT) return orig; break; ! /* A MEM with a constant address is not sharable. The problem is that the constant address may need to be reloaded. If the mem is shared, then reloading one copy of this mem will cause all copies to appear *************** copy_insn_1 (orig) *** 3877,3883 **** copy->call = 0; copy->frame_related = 0; } ! format_ptr = GET_RTX_FORMAT (GET_CODE (copy)); for (i = 0; i < GET_RTX_LENGTH (GET_CODE (copy)); i++) --- 4718,4724 ---- copy->call = 0; copy->frame_related = 0; } ! format_ptr = GET_RTX_FORMAT (GET_CODE (copy)); for (i = 0; i < GET_RTX_LENGTH (GET_CODE (copy)); i++) *************** init_emit () *** 3985,3993 **** = (unsigned char *) xcalloc (f->emit->regno_pointer_align_length, sizeof (unsigned char)); ! regno_reg_rtx ! = (rtx *) xcalloc (f->emit->regno_pointer_align_length * sizeof (rtx), ! sizeof (rtx)); /* Put copies of all the virtual register rtx into regno_reg_rtx. */ init_virtual_regs (f->emit); --- 4826,4836 ---- = (unsigned char *) xcalloc (f->emit->regno_pointer_align_length, sizeof (unsigned char)); ! regno_reg_rtx ! = (rtx *) xcalloc (f->emit->regno_pointer_align_length, sizeof (rtx)); ! ! f->emit->regno_decl ! = (tree *) xcalloc (f->emit->regno_pointer_align_length, sizeof (tree)); /* Put copies of all the virtual register rtx into regno_reg_rtx. */ init_virtual_regs (f->emit); *************** mark_emit_status (es) *** 4044,4063 **** struct emit_status *es; { rtx *r; int i; if (es == 0) return; ! for (i = es->regno_pointer_align_length, r = es->x_regno_reg_rtx; ! i > 0; --i, ++r) ! ggc_mark_rtx (*r); mark_sequence_stack (es->sequence_stack); ggc_mark_tree (es->sequence_rtl_expr); ggc_mark_rtx (es->x_first_insn); } /* Create some permanent unique rtl objects shared between all functions. LINE_NUMBERS is nonzero if line numbers are to be generated. */ --- 4887,4938 ---- struct emit_status *es; { rtx *r; + tree *t; int i; if (es == 0) return; ! for (i = es->regno_pointer_align_length, r = es->x_regno_reg_rtx, ! t = es->regno_decl; ! i > 0; --i, ++r, ++t) ! { ! ggc_mark_rtx (*r); ! ggc_mark_tree (*t); ! } mark_sequence_stack (es->sequence_stack); ggc_mark_tree (es->sequence_rtl_expr); ggc_mark_rtx (es->x_first_insn); } + /* Generate the constant 0. */ + + static rtx + gen_const_vector_0 (mode) + enum machine_mode mode; + { + rtx tem; + rtvec v; + int units, i; + enum machine_mode inner; + + units = GET_MODE_NUNITS (mode); + inner = GET_MODE_INNER (mode); + + v = rtvec_alloc (units); + + /* We need to call this function after we to set CONST0_RTX first. */ + if (!CONST0_RTX (inner)) + abort (); + + for (i = 0; i < units; ++i) + RTVEC_ELT (v, i) = CONST0_RTX (inner); + + tem = gen_rtx_CONST_VECTOR (mode, v); + return tem; + } + /* Create some permanent unique rtl objects shared between all functions. LINE_NUMBERS is nonzero if line numbers are to be generated. */ *************** init_emit_once (line_numbers) *** 4069,4079 **** enum machine_mode mode; enum machine_mode double_mode; ! /* Initialize the CONST_INT hash table. */ ! const_int_htab = htab_create (37, const_int_htab_hash, const_int_htab_eq, NULL); ! ggc_add_root (&const_int_htab, 1, sizeof (const_int_htab), ! rtx_htab_mark); no_line_numbers = ! line_numbers; --- 4944,4957 ---- enum machine_mode mode; enum machine_mode double_mode; ! /* Initialize the CONST_INT and memory attribute hash tables. */ ! const_int_htab = htab_create (37, const_int_htab_hash, const_int_htab_eq, NULL); ! ggc_add_deletable_htab (const_int_htab, 0, 0); ! ! mem_attrs_htab = htab_create (37, mem_attrs_htab_hash, ! mem_attrs_htab_eq, NULL); ! ggc_add_deletable_htab (mem_attrs_htab, 0, mem_attrs_mark); no_line_numbers = ! line_numbers; *************** init_emit_once (line_numbers) *** 4114,4131 **** stack_pointer_rtx = gen_raw_REG (Pmode, STACK_POINTER_REGNUM); frame_pointer_rtx = gen_raw_REG (Pmode, FRAME_POINTER_REGNUM); if (hard_frame_pointer_rtx == 0) ! hard_frame_pointer_rtx = gen_raw_REG (Pmode, HARD_FRAME_POINTER_REGNUM); if (arg_pointer_rtx == 0) arg_pointer_rtx = gen_raw_REG (Pmode, ARG_POINTER_REGNUM); ! virtual_incoming_args_rtx = gen_raw_REG (Pmode, VIRTUAL_INCOMING_ARGS_REGNUM); ! virtual_stack_vars_rtx = gen_raw_REG (Pmode, VIRTUAL_STACK_VARS_REGNUM); ! virtual_stack_dynamic_rtx = gen_raw_REG (Pmode, VIRTUAL_STACK_DYNAMIC_REGNUM); ! virtual_outgoing_args_rtx = ! gen_raw_REG (Pmode, VIRTUAL_OUTGOING_ARGS_REGNUM); virtual_cfa_rtx = gen_raw_REG (Pmode, VIRTUAL_CFA_REGNUM); /* These rtx must be roots if GC is enabled. */ --- 4992,5009 ---- stack_pointer_rtx = gen_raw_REG (Pmode, STACK_POINTER_REGNUM); frame_pointer_rtx = gen_raw_REG (Pmode, FRAME_POINTER_REGNUM); if (hard_frame_pointer_rtx == 0) ! hard_frame_pointer_rtx = gen_raw_REG (Pmode, HARD_FRAME_POINTER_REGNUM); if (arg_pointer_rtx == 0) arg_pointer_rtx = gen_raw_REG (Pmode, ARG_POINTER_REGNUM); ! virtual_incoming_args_rtx = gen_raw_REG (Pmode, VIRTUAL_INCOMING_ARGS_REGNUM); ! virtual_stack_vars_rtx = gen_raw_REG (Pmode, VIRTUAL_STACK_VARS_REGNUM); ! virtual_stack_dynamic_rtx = gen_raw_REG (Pmode, VIRTUAL_STACK_DYNAMIC_REGNUM); ! virtual_outgoing_args_rtx = ! gen_raw_REG (Pmode, VIRTUAL_OUTGOING_ARGS_REGNUM); virtual_cfa_rtx = gen_raw_REG (Pmode, VIRTUAL_CFA_REGNUM); /* These rtx must be roots if GC is enabled. */ *************** init_emit_once (line_numbers) *** 4134,4140 **** #ifdef INIT_EXPANDERS /* This is to initialize {init|mark|free}_machine_status before the first call to push_function_context_to. This is needed by the Chill front ! end which calls push_function_context_to before the first cal to init_function_start. */ INIT_EXPANDERS; #endif --- 5012,5018 ---- #ifdef INIT_EXPANDERS /* This is to initialize {init|mark|free}_machine_status before the first call to push_function_context_to. This is needed by the Chill front ! end which calls push_function_context_to before the first call to init_function_start. */ INIT_EXPANDERS; #endif *************** init_emit_once (line_numbers) *** 4144,4150 **** /* Don't use gen_rtx here since gen_rtx in this case tries to use these variables. */ for (i = - MAX_SAVED_CONST_INT; i <= MAX_SAVED_CONST_INT; i++) ! const_int_rtx[i + MAX_SAVED_CONST_INT] = gen_rtx_raw_CONST_INT (VOIDmode, i); ggc_add_rtx_root (const_int_rtx, 2 * MAX_SAVED_CONST_INT + 1); --- 5022,5028 ---- /* Don't use gen_rtx here since gen_rtx in this case tries to use these variables. */ for (i = - MAX_SAVED_CONST_INT; i <= MAX_SAVED_CONST_INT; i++) ! const_int_rtx[i + MAX_SAVED_CONST_INT] = gen_rtx_raw_CONST_INT (VOIDmode, i); ggc_add_rtx_root (const_int_rtx, 2 * MAX_SAVED_CONST_INT + 1); *************** init_emit_once (line_numbers) *** 4167,4177 **** rtx tem = rtx_alloc (CONST_DOUBLE); union real_extract u; ! memset ((char *) &u, 0, sizeof u); /* Zero any holes in a structure. */ u.d = i == 0 ? dconst0 : i == 1 ? dconst1 : dconst2; memcpy (&CONST_DOUBLE_LOW (tem), &u, sizeof u); - CONST_DOUBLE_MEM (tem) = cc0_rtx; CONST_DOUBLE_CHAIN (tem) = NULL_RTX; PUT_MODE (tem, mode); --- 5045,5061 ---- rtx tem = rtx_alloc (CONST_DOUBLE); union real_extract u; ! /* Zero any holes in a structure. */ ! memset ((char *) &u, 0, sizeof u); u.d = i == 0 ? dconst0 : i == 1 ? dconst1 : dconst2; + /* Avoid trailing garbage in the rtx. */ + if (sizeof (u) < sizeof (HOST_WIDE_INT)) + CONST_DOUBLE_LOW (tem) = 0; + if (sizeof (u) < 2 * sizeof (HOST_WIDE_INT)) + CONST_DOUBLE_HIGH (tem) = 0; + memcpy (&CONST_DOUBLE_LOW (tem), &u, sizeof u); CONST_DOUBLE_CHAIN (tem) = NULL_RTX; PUT_MODE (tem, mode); *************** init_emit_once (line_numbers) *** 4190,4195 **** --- 5074,5089 ---- const_tiny_rtx[i][(int) mode] = GEN_INT (i); } + for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_INT); + mode != VOIDmode; + mode = GET_MODE_WIDER_MODE (mode)) + const_tiny_rtx[0][(int) mode] = gen_const_vector_0 (mode); + + for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_FLOAT); + mode != VOIDmode; + mode = GET_MODE_WIDER_MODE (mode)) + const_tiny_rtx[0][(int) mode] = gen_const_vector_0 (mode); + for (i = (int) CCmode; i < (int) MAX_MACHINE_MODE; ++i) if (GET_MODE_CLASS ((enum machine_mode) i) == MODE_CC) const_tiny_rtx[0][i] = const0_rtx; *************** init_emit_once (line_numbers) *** 4248,4256 **** #endif #endif ! #ifdef PIC_OFFSET_TABLE_REGNUM ! pic_offset_table_rtx = gen_rtx_REG (Pmode, PIC_OFFSET_TABLE_REGNUM); ! #endif ggc_add_rtx_root (&pic_offset_table_rtx, 1); ggc_add_rtx_root (&struct_value_rtx, 1); --- 5142,5149 ---- #endif #endif ! if (PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM) ! pic_offset_table_rtx = gen_raw_REG (Pmode, PIC_OFFSET_TABLE_REGNUM); ggc_add_rtx_root (&pic_offset_table_rtx, 1); ggc_add_rtx_root (&struct_value_rtx, 1); diff -Nrc3pad gcc-3.0.4/gcc/errors.c gcc-3.1/gcc/errors.c *** gcc-3.0.4/gcc/errors.c Sat Feb 24 11:52:56 2001 --- gcc-3.1/gcc/errors.c Fri Nov 23 02:05:17 2001 *************** *** 1,22 **** /* Basic error reporting routines. Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* warning, error, and fatal. These definitions are suitable for use in the generator programs; eventually we would like to use them in --- 1,22 ---- /* Basic error reporting routines. Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* warning, error, and fatal. These definitions are suitable for use in the generator programs; eventually we would like to use them in *************** int have_error = 0; *** 39,58 **** void warning VPARAMS ((const char *format, ...)) { ! #ifndef ANSI_PROTOTYPES ! const char *format; ! #endif ! va_list ap; ! ! VA_START (ap, format); ! ! #ifndef ANSI_PROTOTYPES ! format = va_arg (ap, const char *); ! #endif fprintf (stderr, "%s: warning: ", progname); vfprintf (stderr, format, ap); ! va_end (ap); fputc('\n', stderr); } --- 39,50 ---- void warning VPARAMS ((const char *format, ...)) { ! VA_OPEN (ap, format); ! VA_FIXEDARG (ap, const char *, format); fprintf (stderr, "%s: warning: ", progname); vfprintf (stderr, format, ap); ! VA_CLOSE (ap); fputc('\n', stderr); } *************** warning VPARAMS ((const char *format, .. *** 62,81 **** void error VPARAMS ((const char *format, ...)) { ! #ifndef ANSI_PROTOTYPES ! const char *format; ! #endif ! va_list ap; ! ! VA_START (ap, format); ! ! #ifndef ANSI_PROTOTYPES ! format = va_arg (ap, const char *); ! #endif fprintf (stderr, "%s: ", progname); vfprintf (stderr, format, ap); ! va_end (ap); fputc('\n', stderr); have_error = 1; --- 54,65 ---- void error VPARAMS ((const char *format, ...)) { ! VA_OPEN (ap, format); ! VA_FIXEDARG (ap, const char *, format); fprintf (stderr, "%s: ", progname); vfprintf (stderr, format, ap); ! VA_CLOSE (ap); fputc('\n', stderr); have_error = 1; *************** error VPARAMS ((const char *format, ...) *** 87,106 **** void fatal VPARAMS ((const char *format, ...)) { ! #ifndef ANSI_PROTOTYPES ! const char *format; ! #endif ! va_list ap; ! ! VA_START (ap, format); ! ! #ifndef ANSI_PROTOTYPES ! format = va_arg (ap, const char *); ! #endif fprintf (stderr, "%s: ", progname); vfprintf (stderr, format, ap); ! va_end (ap); fputc('\n', stderr); exit (FATAL_EXIT_CODE); } --- 71,82 ---- void fatal VPARAMS ((const char *format, ...)) { ! VA_OPEN (ap, format); ! VA_FIXEDARG (ap, const char *, format); fprintf (stderr, "%s: ", progname); vfprintf (stderr, format, ap); ! VA_CLOSE (ap); fputc('\n', stderr); exit (FATAL_EXIT_CODE); } *************** fatal VPARAMS ((const char *format, ...) *** 110,129 **** void internal_error VPARAMS ((const char *format, ...)) { ! #ifndef ANSI_PROTOTYPES ! const char *format; ! #endif ! va_list ap; ! ! VA_START (ap, format); ! ! #ifndef ANSI_PROTOTYPES ! format = va_arg (ap, const char *); ! #endif ! fprintf (stderr, "%s: Internal error", progname); vfprintf (stderr, format, ap); ! va_end (ap); fputc ('\n', stderr); exit (FATAL_EXIT_CODE); } --- 86,97 ---- void internal_error VPARAMS ((const char *format, ...)) { ! VA_OPEN (ap, format); ! VA_FIXEDARG (ap, const char *, format); ! fprintf (stderr, "%s: Internal error: ", progname); vfprintf (stderr, format, ap); ! VA_CLOSE (ap); fputc ('\n', stderr); exit (FATAL_EXIT_CODE); } *************** internal_error VPARAMS ((const char *for *** 132,138 **** shares no directory elements with the pathname of __FILE__. This is used by fancy_abort() to print `Internal compiler error in expr.c' instead of `Internal compiler error in ../../GCC/gcc/expr.c'. This ! version if for the gen* programs and so neededn't handle subdirectories. */ const char * trim_filename (name) --- 100,106 ---- shares no directory elements with the pathname of __FILE__. This is used by fancy_abort() to print `Internal compiler error in expr.c' instead of `Internal compiler error in ../../GCC/gcc/expr.c'. This ! version if for the gen* programs and so needn't handle subdirectories. */ const char * trim_filename (name) diff -Nrc3pad gcc-3.0.4/gcc/errors.h gcc-3.1/gcc/errors.h *** gcc-3.0.4/gcc/errors.h Sat Feb 24 11:52:56 2001 --- gcc-3.1/gcc/errors.h Mon Sep 24 00:27:31 2001 *************** *** 1,36 **** /* Basic error reporting routines. Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* warning, error, and fatal. These definitions are suitable for use in the generator programs; eventually we would like to use them in ! cc1 too, but that's a longer term project. */ ! #ifndef __GCC_ERRORS_H__ ! #define __GCC_ERRORS_H__ ! extern void warning PARAMS ((const char *, ...)) ATTRIBUTE_PRINTF_1; ! extern void error PARAMS ((const char *, ...)) ATTRIBUTE_PRINTF_1; ! extern void fatal PARAMS ((const char *, ...)) ! ATTRIBUTE_PRINTF_1 ATTRIBUTE_NORETURN; ! extern void internal_error PARAMS ((const char *, ...)) ! ATTRIBUTE_PRINTF_1 ATTRIBUTE_NORETURN; extern const char *trim_filename PARAMS ((const char *)); extern void fancy_abort PARAMS ((const char *, int, const char *)) ATTRIBUTE_NORETURN; --- 1,38 ---- /* Basic error reporting routines. Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* warning, error, and fatal. These definitions are suitable for use in the generator programs; eventually we would like to use them in ! cc1 too, but that's a longer term project. ! N.B. We cannot presently use ATTRIBUTE_PRINTF with these functions, ! because they can be extended with additional format specifiers which ! GCC does not know about. */ ! #ifndef GCC_ERRORS_H ! #define GCC_ERRORS_H ! ! extern void warning PARAMS ((const char *, ...)); ! extern void error PARAMS ((const char *, ...)); ! extern void fatal PARAMS ((const char *, ...)) ATTRIBUTE_NORETURN; ! extern void internal_error PARAMS ((const char *, ...)) ATTRIBUTE_NORETURN; extern const char *trim_filename PARAMS ((const char *)); extern void fancy_abort PARAMS ((const char *, int, const char *)) ATTRIBUTE_NORETURN; *************** extern void fancy_abort PARAMS ((const c *** 38,41 **** extern int have_error; extern const char *progname; ! #endif --- 40,43 ---- extern int have_error; extern const char *progname; ! #endif /* ! GCC_ERRORS_H */ diff -Nrc3pad gcc-3.0.4/gcc/except.c gcc-3.1/gcc/except.c *** gcc-3.0.4/gcc/except.c Wed Feb 13 19:22:47 2002 --- gcc-3.1/gcc/except.c Wed Apr 17 01:48:17 2002 *************** *** 1,24 **** /* Implements exception handling. ! Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Mike Stump . ! 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. */ /* An exception is an event that can be signaled from within a --- 1,24 ---- /* Implements exception handling. ! Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Mike Stump . ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* An exception is an event that can be signaled from within a *************** Boston, MA 02111-1307, USA. */ *** 54,59 **** --- 54,60 ---- #include "flags.h" #include "function.h" #include "expr.h" + #include "libfuncs.h" #include "insn-config.h" #include "except.h" #include "integrate.h" *************** Boston, MA 02111-1307, USA. */ *** 68,74 **** #include "intl.h" #include "ggc.h" #include "tm_p.h" ! /* Provide defaults for stuff that may not be defined when using sjlj exceptions. */ --- 69,75 ---- #include "intl.h" #include "ggc.h" #include "tm_p.h" ! #include "target.h" /* Provide defaults for stuff that may not be defined when using sjlj exceptions. */ *************** int (*lang_eh_type_covers) PARAMS ((tree *** 96,106 **** /* Map a type to a runtime object to match type. */ tree (*lang_eh_runtime_type) PARAMS ((tree)); ! /* A list of labels used for exception handlers. */ ! rtx exception_handler_labels; static int call_site_base; ! static int sjlj_funcdef_number; static htab_t type_to_runtime_map; /* Describe the SjLj_Function_Context structure. */ --- 97,114 ---- /* Map a type to a runtime object to match type. */ tree (*lang_eh_runtime_type) PARAMS ((tree)); ! /* A hash table of label to region number. */ ! ! struct ehl_map_entry ! { ! rtx label; ! struct eh_region *region; ! }; ! ! static htab_t exception_handler_label_map; static int call_site_base; ! static unsigned int sjlj_funcdef_number; static htab_t type_to_runtime_map; /* Describe the SjLj_Function_Context structure. */ *************** struct eh_region *** 124,133 **** /* An identifier for this region. */ int region_number; /* Each region does exactly one thing. */ enum eh_region_type { ! ERT_CLEANUP = 1, ERT_TRY, ERT_CATCH, ERT_ALLOWED_EXCEPTIONS, --- 132,146 ---- /* An identifier for this region. */ int region_number; + /* When a region is deleted, its parents inherit the REG_EH_REGION + numbers already assigned. */ + bitmap aka; + /* Each region does exactly one thing. */ enum eh_region_type { ! ERT_UNKNOWN = 0, ! ERT_CLEANUP, ERT_TRY, ERT_CATCH, ERT_ALLOWED_EXCEPTIONS, *************** struct eh_region *** 136,142 **** ERT_FIXUP } type; ! /* Holds the action to perform based on the preceeding type. */ union { /* A list of catch blocks, a surrounding try block, and the label for continuing after a catch. */ --- 149,155 ---- ERT_FIXUP } type; ! /* Holds the action to perform based on the preceding type. */ union { /* A list of catch blocks, a surrounding try block, and the label for continuing after a catch. */ *************** struct eh_region *** 147,159 **** rtx continue_label; } try; ! /* The list through the catch handlers, the type object ! matched, and a pointer to the generated code. */ struct { struct eh_region *next_catch; struct eh_region *prev_catch; ! tree type; ! int filter; } catch; /* A tree_list of allowed types. */ --- 160,172 ---- rtx continue_label; } try; ! /* The list through the catch handlers, the list of type objects ! matched, and the list of associated filters. */ struct { struct eh_region *next_catch; struct eh_region *prev_catch; ! tree type_list; ! tree filter_list; } catch; /* A tree_list of allowed types. */ *************** struct eh_region *** 162,168 **** int filter; } allowed; ! /* The type given by a call to "throw foo();", or discovered for a throw. */ struct { tree type; --- 175,181 ---- int filter; } allowed; ! /* The type given by a call to "throw foo();", or discovered for a throw. */ struct { tree type; *************** struct eh_status *** 245,250 **** --- 258,267 ---- static void mark_eh_region PARAMS ((struct eh_region *)); + static int mark_ehl_map_entry PARAMS ((PTR *, PTR)); + static void mark_ehl_map PARAMS ((void *)); + + static void free_region PARAMS ((struct eh_region *)); static int t2r_eq PARAMS ((const PTR, const PTR)); *************** static rtx get_exception_filter PARAMS *** 261,266 **** --- 278,284 ---- static void collect_eh_region_array PARAMS ((void)); static void resolve_fixup_regions PARAMS ((void)); static void remove_fixup_regions PARAMS ((void)); + static void remove_unreachable_regions PARAMS ((rtx)); static void convert_from_eh_region_ranges_1 PARAMS ((rtx *, int *, int)); static struct eh_region *duplicate_eh_region_1 PARAMS ((struct eh_region *, *************** static void sjlj_emit_dispatch_table *** 294,301 **** --- 312,326 ---- PARAMS ((rtx, struct sjlj_lp_info *)); static void sjlj_build_landing_pads PARAMS ((void)); + static hashval_t ehl_hash PARAMS ((const PTR)); + static int ehl_eq PARAMS ((const PTR, + const PTR)); + static void ehl_free PARAMS ((PTR)); + static void add_ehl_entry PARAMS ((rtx, + struct eh_region *)); static void remove_exception_handler_label PARAMS ((rtx)); static void remove_eh_handler PARAMS ((struct eh_region *)); + static int for_each_eh_label_1 PARAMS ((PTR *, PTR)); struct reachable_info; *************** static void sjlj_output_call_site_table *** 340,346 **** /* Routine to see if exception handling is turned on. DO_WARN is non-zero if we want to inform the user that exception ! handling is turned off. This is used to ensure that -fexceptions has been specified if the compiler tries to use any exception-specific functions. */ --- 365,371 ---- /* Routine to see if exception handling is turned on. DO_WARN is non-zero if we want to inform the user that exception ! handling is turned off. This is used to ensure that -fexceptions has been specified if the compiler tries to use any exception-specific functions. */ *************** doing_eh (do_warn) *** 366,372 **** void init_eh () { ! ggc_add_rtx_root (&exception_handler_labels, 1); if (! flag_exceptions) return; --- 391,397 ---- void init_eh () { ! ggc_add_root (&exception_handler_label_map, 1, 1, mark_ehl_map); if (! flag_exceptions) return; *************** mark_eh_region (region) *** 477,482 **** --- 502,511 ---- switch (region->type) { + case ERT_UNKNOWN: + /* This can happen if a nested function is inside the body of a region + and we do a GC as part of processing it. */ + break; case ERT_CLEANUP: ggc_mark_tree (region->u.cleanup.exp); break; *************** mark_eh_region (region) *** 484,490 **** ggc_mark_rtx (region->u.try.continue_label); break; case ERT_CATCH: ! ggc_mark_tree (region->u.catch.type); break; case ERT_ALLOWED_EXCEPTIONS: ggc_mark_tree (region->u.allowed.type_list); --- 513,520 ---- ggc_mark_rtx (region->u.try.continue_label); break; case ERT_CATCH: ! ggc_mark_tree (region->u.catch.type_list); ! ggc_mark_tree (region->u.catch.filter_list); break; case ERT_ALLOWED_EXCEPTIONS: ggc_mark_tree (region->u.allowed.type_list); *************** mark_eh_region (region) *** 507,512 **** --- 537,561 ---- ggc_mark_rtx (region->post_landing_pad); } + static int + mark_ehl_map_entry (pentry, data) + PTR *pentry; + PTR data ATTRIBUTE_UNUSED; + { + struct ehl_map_entry *entry = *(struct ehl_map_entry **) pentry; + ggc_mark_rtx (entry->label); + return 1; + } + + static void + mark_ehl_map (pp) + void *pp; + { + htab_t map = *(htab_t *) pp; + if (map) + htab_traverse (map, mark_ehl_map_entry, NULL); + } + void mark_eh_status (eh) struct eh_status *eh; *************** mark_eh_status (eh) *** 569,574 **** --- 618,633 ---- ggc_mark_rtx (eh->sjlj_exit_after); } + static inline void + free_region (r) + struct eh_region *r; + { + /* Note that the aka bitmap is freed by regset_release_memory. But if + we ever replace with a non-obstack implementation, this would be + the place to do it. */ + free (r); + } + void free_eh_status (f) struct function *f; *************** free_eh_status (f) *** 583,589 **** struct eh_region *r = eh->region_array[i]; /* Mind we don't free a region struct more than once. */ if (r && r->region_number == i) ! free (r); } free (eh->region_array); } --- 642,648 ---- struct eh_region *r = eh->region_array[i]; /* Mind we don't free a region struct more than once. */ if (r && r->region_number == i) ! free_region (r); } free (eh->region_array); } *************** free_eh_status (f) *** 597,616 **** else if (r->next_peer) { next = r->next_peer; ! free (r); r = next; } else { do { next = r->outer; ! free (r); r = next; if (r == NULL) goto tree_done; } while (r->next_peer == NULL); next = r->next_peer; ! free (r); r = next; } } --- 656,675 ---- else if (r->next_peer) { next = r->next_peer; ! free_region (r); r = next; } else { do { next = r->outer; ! free_region (r); r = next; if (r == NULL) goto tree_done; } while (r->next_peer == NULL); next = r->next_peer; ! free_region (r); r = next; } } *************** free_eh_status (f) *** 625,630 **** --- 684,695 ---- free (eh); f->eh = NULL; + + if (exception_handler_label_map) + { + htab_delete (exception_handler_label_map); + exception_handler_label_map = NULL; + } } *************** expand_eh_region_end () *** 672,678 **** struct eh_region *cur_region = cfun->eh->cur_region; rtx note; ! /* Create a nute marking the end of this region. */ note = emit_note (NULL, NOTE_INSN_EH_REGION_END); NOTE_EH_HANDLER (note) = cur_region->region_number; --- 737,743 ---- struct eh_region *cur_region = cfun->eh->cur_region; rtx note; ! /* Create a note marking the end of this region. */ note = emit_note (NULL, NOTE_INSN_EH_REGION_END); NOTE_EH_HANDLER (note) = cur_region->region_number; *************** expand_eh_region_end_cleanup (handler) *** 708,717 **** emit_label (region->label); /* Give the language a chance to specify an action to be taken if an ! exception is thrown that would propogate out of the HANDLER. */ ! protect_cleanup_actions ! = (lang_protect_cleanup_actions ! ? (*lang_protect_cleanup_actions) () : NULL_TREE); if (protect_cleanup_actions) --- 773,782 ---- emit_label (region->label); /* Give the language a chance to specify an action to be taken if an ! exception is thrown that would propagate out of the HANDLER. */ ! protect_cleanup_actions ! = (lang_protect_cleanup_actions ! ? (*lang_protect_cleanup_actions) () : NULL_TREE); if (protect_cleanup_actions) *************** expand_start_all_catch () *** 766,791 **** emit_jump (region->u.try.continue_label); } ! /* Begin a catch clause. TYPE is the type caught, or null if this is ! a catch-all clause. */ void ! expand_start_catch (type) ! tree type; { struct eh_region *t, *c, *l; if (! doing_eh (0)) return; ! if (type) ! add_type_for_runtime (type); expand_eh_region_start (); t = cfun->eh->try_region; c = cfun->eh->cur_region; c->type = ERT_CATCH; ! c->u.catch.type = type; c->label = gen_label_rtx (); l = t->u.try.last_catch; --- 831,874 ---- emit_jump (region->u.try.continue_label); } ! /* Begin a catch clause. TYPE is the type caught, a list of such types, or ! null if this is a catch-all clause. Providing a type list enables to ! associate the catch region with potentially several exception types, which ! is useful e.g. for Ada. */ void ! expand_start_catch (type_or_list) ! tree type_or_list; { struct eh_region *t, *c, *l; + tree type_list; if (! doing_eh (0)) return; ! type_list = type_or_list; ! ! if (type_or_list) ! { ! /* Ensure to always end up with a type list to normalize further ! processing, then register each type against the runtime types ! map. */ ! tree type_node; ! ! if (TREE_CODE (type_or_list) != TREE_LIST) ! type_list = tree_cons (NULL_TREE, type_or_list, NULL_TREE); ! ! type_node = type_list; ! for (; type_node; type_node = TREE_CHAIN (type_node)) ! add_type_for_runtime (TREE_VALUE (type_node)); ! } ! expand_eh_region_start (); t = cfun->eh->try_region; c = cfun->eh->cur_region; c->type = ERT_CATCH; ! c->u.catch.type_list = type_list; c->label = gen_label_rtx (); l = t->u.try.last_catch; *************** expand_end_all_catch () *** 833,839 **** /* End an exception region for an exception type filter. ALLOWED is a TREE_LIST of types to be matched by the runtime. FAILURE is an ! expression to invoke if a mismatch ocurrs. */ void expand_eh_region_end_allowed (allowed, failure) --- 916,926 ---- /* End an exception region for an exception type filter. ALLOWED is a TREE_LIST of types to be matched by the runtime. FAILURE is an ! expression to invoke if a mismatch occurs. ! ! ??? We could use these semantics for calls to rethrow, too; if we can ! see the surrounding catch clause, we know that the exception we're ! rethrowing satisfies the "filter" of the catch type. */ void expand_eh_region_end_allowed (allowed, failure) *************** expand_eh_region_end_allowed (allowed, f *** 857,866 **** throws a different exception, that it will be processed by the correct region. */ - /* If there are any pending stack adjustments, we must emit them - before we branch -- otherwise, we won't know how much adjustment - is required later. */ - do_pending_stack_adjust (); around_label = gen_label_rtx (); emit_jump (around_label); --- 944,949 ---- *************** begin_protect_partials () *** 997,1003 **** /* Start a new exception region for a region of code that has a cleanup action and push the HANDLER for the region onto protect_list. All of the regions created with add_partial_entry ! will be ended when end_protect_partials is invoked. */ void add_partial_entry (handler) --- 1080,1091 ---- /* Start a new exception region for a region of code that has a cleanup action and push the HANDLER for the region onto protect_list. All of the regions created with add_partial_entry ! will be ended when end_protect_partials is invoked. ! ! ??? The only difference between this purpose and that of ! expand_decl_cleanup is that in this case, we only want the cleanup to ! run if an exception is thrown. This should also be handled using ! binding levels. */ void add_partial_entry (handler) *************** add_partial_entry (handler) *** 1005,1020 **** { expand_eh_region_start (); - /* ??? This comment was old before the most recent rewrite. We - really ought to fix the callers at some point. */ - /* For backwards compatibility, we allow callers to omit calls to - begin_protect_partials for the outermost region. So, we must - explicitly do so here. */ - if (!cfun->eh->protect_list) - begin_protect_partials (); - /* Add this entry to the front of the list. */ ! TREE_VALUE (cfun->eh->protect_list) = tree_cons (NULL_TREE, handler, TREE_VALUE (cfun->eh->protect_list)); } --- 1093,1100 ---- { expand_eh_region_start (); /* Add this entry to the front of the list. */ ! TREE_VALUE (cfun->eh->protect_list) = tree_cons (NULL_TREE, handler, TREE_VALUE (cfun->eh->protect_list)); } *************** end_protect_partials () *** 1025,1038 **** { tree t; - /* ??? This comment was old before the most recent rewrite. We - really ought to fix the callers at some point. */ - /* For backwards compatibility, we allow callers to omit the call to - begin_protect_partials for the outermost region. So, - PROTECT_LIST may be NULL. */ - if (!cfun->eh->protect_list) - return; - /* Pop the topmost entry. */ t = TREE_VALUE (cfun->eh->protect_list); cfun->eh->protect_list = TREE_CHAIN (cfun->eh->protect_list); --- 1105,1110 ---- *************** resolve_fixup_regions () *** 1092,1098 **** for (i = 1; i <= n; ++i) { struct eh_region *fixup = cfun->eh->region_array[i]; ! struct eh_region *cleanup; if (! fixup || fixup->type != ERT_FIXUP) continue; --- 1164,1170 ---- for (i = 1; i <= n; ++i) { struct eh_region *fixup = cfun->eh->region_array[i]; ! struct eh_region *cleanup = 0; if (! fixup || fixup->type != ERT_FIXUP) continue; *************** remove_fixup_regions () *** 1182,1187 **** --- 1254,1322 ---- } } + /* Remove all regions whose labels are not reachable from insns. */ + + static void + remove_unreachable_regions (insns) + rtx insns; + { + int i, *uid_region_num; + bool *reachable; + struct eh_region *r; + rtx insn; + + uid_region_num = xcalloc (get_max_uid (), sizeof(int)); + reachable = xcalloc (cfun->eh->last_region_number + 1, sizeof(bool)); + + for (i = cfun->eh->last_region_number; i > 0; --i) + { + r = cfun->eh->region_array[i]; + if (!r || r->region_number != i) + continue; + + if (r->resume) + { + if (uid_region_num[INSN_UID (r->resume)]) + abort (); + uid_region_num[INSN_UID (r->resume)] = i; + } + if (r->label) + { + if (uid_region_num[INSN_UID (r->label)]) + abort (); + uid_region_num[INSN_UID (r->label)] = i; + } + if (r->type == ERT_TRY && r->u.try.continue_label) + { + if (uid_region_num[INSN_UID (r->u.try.continue_label)]) + abort (); + uid_region_num[INSN_UID (r->u.try.continue_label)] = i; + } + } + + for (insn = insns; insn; insn = NEXT_INSN (insn)) + reachable[uid_region_num[INSN_UID (insn)]] = true; + + for (i = cfun->eh->last_region_number; i > 0; --i) + { + r = cfun->eh->region_array[i]; + if (r && r->region_number == i && !reachable[i]) + { + /* Don't remove ERT_THROW regions if their outer region + is reachable. */ + if (r->type == ERT_THROW + && r->outer + && reachable[r->outer->region_number]) + continue; + + remove_eh_handler (r); + } + } + + free (reachable); + free (uid_region_num); + } + /* Turn NOTE_INSN_EH_REGION notes into REG_EH_REGION notes for each can_throw instruction in the region. */ *************** convert_from_eh_region_ranges_1 (pinsns, *** 1244,1249 **** --- 1379,1386 ---- /* If we wanted exceptions for non-call insns, then any may_trap_p instruction could throw. */ || (flag_non_call_exceptions + && GET_CODE (PATTERN (insn)) != CLOBBER + && GET_CODE (PATTERN (insn)) != USE && may_trap_p (PATTERN (insn))))) { REG_NOTES (insn) = alloc_EXPR_LIST (REG_EH_REGION, GEN_INT (cur), *************** convert_from_eh_region_ranges () *** 1282,1296 **** free (stack); remove_fixup_regions (); } void find_exception_handler_labels () { - rtx list = NULL_RTX; int i; ! free_EXPR_LIST_list (&exception_handler_labels); if (cfun->eh->region_tree == NULL) return; --- 1419,1477 ---- free (stack); remove_fixup_regions (); + remove_unreachable_regions (insns); + } + + static void + add_ehl_entry (label, region) + rtx label; + struct eh_region *region; + { + struct ehl_map_entry **slot, *entry; + + LABEL_PRESERVE_P (label) = 1; + + entry = (struct ehl_map_entry *) xmalloc (sizeof (*entry)); + entry->label = label; + entry->region = region; + + slot = (struct ehl_map_entry **) + htab_find_slot (exception_handler_label_map, entry, INSERT); + + /* Before landing pad creation, each exception handler has its own + label. After landing pad creation, the exception handlers may + share landing pads. This is ok, since maybe_remove_eh_handler + only requires the 1-1 mapping before landing pad creation. */ + if (*slot && !cfun->eh->built_landing_pads) + abort (); + + *slot = entry; + } + + static void + ehl_free (pentry) + PTR pentry; + { + struct ehl_map_entry *entry = (struct ehl_map_entry *)pentry; + LABEL_PRESERVE_P (entry->label) = 0; + free (entry); } void find_exception_handler_labels () { int i; ! if (exception_handler_label_map) ! htab_empty (exception_handler_label_map); ! else ! { ! /* ??? The expansion factor here (3/2) must be greater than the htab ! occupancy factor (4/3) to avoid unnecessary resizing. */ ! exception_handler_label_map ! = htab_create (cfun->eh->last_region_number * 3 / 2, ! ehl_hash, ehl_eq, ehl_free); ! } if (cfun->eh->region_tree == NULL) return; *************** find_exception_handler_labels () *** 1300,1306 **** struct eh_region *region = cfun->eh->region_array[i]; rtx lab; ! if (! region) continue; if (cfun->eh->built_landing_pads) lab = region->landing_pad; --- 1481,1487 ---- struct eh_region *region = cfun->eh->region_array[i]; rtx lab; ! if (! region || region->region_number != i) continue; if (cfun->eh->built_landing_pads) lab = region->landing_pad; *************** find_exception_handler_labels () *** 1308,1324 **** lab = region->label; if (lab) ! list = alloc_EXPR_LIST (0, lab, list); } /* For sjlj exceptions, need the return label to remain live until after landing pad generation. */ if (USING_SJLJ_EXCEPTIONS && ! cfun->eh->built_landing_pads) ! list = alloc_EXPR_LIST (0, return_label, list); ! ! exception_handler_labels = list; } static struct eh_region * duplicate_eh_region_1 (o, map) --- 1489,1520 ---- lab = region->label; if (lab) ! add_ehl_entry (lab, region); } /* For sjlj exceptions, need the return label to remain live until after landing pad generation. */ if (USING_SJLJ_EXCEPTIONS && ! cfun->eh->built_landing_pads) ! add_ehl_entry (return_label, NULL); } + bool + current_function_has_exception_handlers () + { + int i; + + for (i = cfun->eh->last_region_number; i > 0; --i) + { + struct eh_region *region = cfun->eh->region_array[i]; + + if (! region || region->region_number != i) + continue; + if (region->type != ERT_THROW) + return true; + } + + return false; + } static struct eh_region * duplicate_eh_region_1 (o, map) *************** duplicate_eh_region_1 (o, map) *** 1345,1351 **** break; case ERT_CATCH: ! n->u.catch.type = o->u.catch.type; break; case ERT_ALLOWED_EXCEPTIONS: --- 1541,1547 ---- break; case ERT_CATCH: ! n->u.catch.type_list = o->u.catch.type_list; break; case ERT_ALLOWED_EXCEPTIONS: *************** duplicate_eh_region_1 (o, map) *** 1354,1360 **** case ERT_THROW: n->u.throw.type = o->u.throw.type; ! default: abort (); } --- 1550,1556 ---- case ERT_THROW: n->u.throw.type = o->u.throw.type; ! default: abort (); } *************** duplicate_eh_region_2 (o, n_array) *** 1402,1408 **** n->inner = n_array[o->inner->region_number]; if (o->next_peer) n->next_peer = n_array[o->next_peer->region_number]; ! } int duplicate_eh_regions (ifun, map) --- 1598,1604 ---- n->inner = n_array[o->inner->region_number]; if (o->next_peer) n->next_peer = n_array[o->next_peer->region_number]; ! } int duplicate_eh_regions (ifun, map) *************** duplicate_eh_regions (ifun, map) *** 1472,1480 **** } - /* ??? Move from tree.c to tree.h. */ - #define TYPE_HASH(TYPE) ((HOST_WIDE_INT) (TYPE) & 0777777) - static int t2r_eq (pentry, pdata) const PTR pentry; --- 1668,1673 ---- *************** add_type_for_runtime (type) *** 1525,1531 **** *slot = tree_cons (type, runtime, NULL_TREE); } } ! static tree lookup_type_for_runtime (type) tree type; --- 1718,1724 ---- *slot = tree_cons (type, runtime, NULL_TREE); } } ! static tree lookup_type_for_runtime (type) tree type; *************** lookup_type_for_runtime (type) *** 1535,1541 **** slot = (tree *) htab_find_slot_with_hash (type_to_runtime_map, type, TYPE_HASH (type), NO_INSERT); ! /* We should have always inserrted the data earlier. */ return TREE_VALUE (*slot); } --- 1728,1734 ---- slot = (tree *) htab_find_slot_with_hash (type_to_runtime_map, type, TYPE_HASH (type), NO_INSERT); ! /* We should have always inserted the data earlier. */ return TREE_VALUE (*slot); } *************** add_ehspec_entry (ehspec_hash, ttypes_ha *** 1657,1663 **** /* Look up each type in the list and encode its filter value as a uleb128. Terminate the list with 0. */ for (; list ; list = TREE_CHAIN (list)) ! push_uleb128 (&cfun->eh->ehspec_data, add_ttypes_entry (ttypes_hash, TREE_VALUE (list))); VARRAY_PUSH_UCHAR (cfun->eh->ehspec_data, 0); } --- 1850,1856 ---- /* Look up each type in the list and encode its filter value as a uleb128. Terminate the list with 0. */ for (; list ; list = TREE_CHAIN (list)) ! push_uleb128 (&cfun->eh->ehspec_data, add_ttypes_entry (ttypes_hash, TREE_VALUE (list))); VARRAY_PUSH_UCHAR (cfun->eh->ehspec_data, 0); } *************** assign_filter_values () *** 1693,1699 **** switch (r->type) { case ERT_CATCH: ! r->u.catch.filter = add_ttypes_entry (ttypes, r->u.catch.type); break; case ERT_ALLOWED_EXCEPTIONS: --- 1886,1921 ---- switch (r->type) { case ERT_CATCH: ! /* Whatever type_list is (NULL or true list), we build a list ! of filters for the region. */ ! r->u.catch.filter_list = NULL_TREE; ! ! if (r->u.catch.type_list != NULL) ! { ! /* Get a filter value for each of the types caught and store ! them in the region's dedicated list. */ ! tree tp_node = r->u.catch.type_list; ! ! for (;tp_node; tp_node = TREE_CHAIN (tp_node)) ! { ! int flt = add_ttypes_entry (ttypes, TREE_VALUE (tp_node)); ! tree flt_node = build_int_2 (flt, 0); ! ! r->u.catch.filter_list ! = tree_cons (NULL_TREE, flt_node, r->u.catch.filter_list); ! } ! } ! else ! { ! /* Get a filter value for the NULL list also since it will need ! an action record anyway. */ ! int flt = add_ttypes_entry (ttypes, NULL); ! tree flt_node = build_int_2 (flt, 0); ! ! r->u.catch.filter_list ! = tree_cons (NULL_TREE, flt_node, r->u.catch.filter_list); ! } ! break; case ERT_ALLOWED_EXCEPTIONS: *************** build_post_landing_pads () *** 1731,1737 **** all the way up the chain until blocked by a cleanup. */ /* ??? Outer try regions can share landing pads with inner try regions if the types are completely non-overlapping, ! and there are no interveaning cleanups. */ region->post_landing_pad = gen_label_rtx (); --- 1953,1959 ---- all the way up the chain until blocked by a cleanup. */ /* ??? Outer try regions can share landing pads with inner try regions if the types are completely non-overlapping, ! and there are no intervening cleanups. */ region->post_landing_pad = gen_label_rtx (); *************** build_post_landing_pads () *** 1747,1759 **** for (c = region->u.try.catch; c ; c = c->u.catch.next_catch) { /* ??? _Unwind_ForcedUnwind wants no match here. */ ! if (c->u.catch.type == NULL) emit_jump (c->label); else ! emit_cmp_and_jump_insns (cfun->eh->filter, ! GEN_INT (c->u.catch.filter), ! EQ, NULL_RTX, word_mode, ! 0, 0, c->label); } } --- 1969,1995 ---- for (c = region->u.try.catch; c ; c = c->u.catch.next_catch) { /* ??? _Unwind_ForcedUnwind wants no match here. */ ! if (c->u.catch.type_list == NULL) emit_jump (c->label); else ! { ! /* Need for one cmp/jump per type caught. Each type ! list entry has a matching entry in the filter list ! (see assign_filter_values). */ ! tree tp_node = c->u.catch.type_list; ! tree flt_node = c->u.catch.filter_list; ! ! for (; tp_node; ) ! { ! emit_cmp_and_jump_insns ! (cfun->eh->filter, ! GEN_INT (tree_low_cst (TREE_VALUE (flt_node), 0)), ! EQ, NULL_RTX, word_mode, 0, c->label); ! ! tp_node = TREE_CHAIN (tp_node); ! flt_node = TREE_CHAIN (flt_node); ! } ! } } } *************** build_post_landing_pads () *** 1779,1786 **** emit_cmp_and_jump_insns (cfun->eh->filter, GEN_INT (region->u.allowed.filter), ! EQ, NULL_RTX, word_mode, 0, 0, ! region->label); /* We delay the generation of the _Unwind_Resume until we generate landing pads. We emit a marker here so as to get good control --- 2015,2021 ---- emit_cmp_and_jump_insns (cfun->eh->filter, GEN_INT (region->u.allowed.filter), ! EQ, NULL_RTX, word_mode, 0, region->label); /* We delay the generation of the _Unwind_Resume until we generate landing pads. We emit a marker here so as to get good control *************** connect_post_landing_pads () *** 1850,1857 **** seq = get_insns (); end_sequence (); emit_insns_before (seq, region->resume); ! ! /* Leave the RESX to be deleted by flow. */ } } --- 2085,2091 ---- seq = get_insns (); end_sequence (); emit_insns_before (seq, region->resume); ! delete_insn (region->resume); } } *************** connect_post_landing_pads () *** 1859,1865 **** static void dw2_build_landing_pads () { ! int i, j; for (i = cfun->eh->last_region_number; i > 0; --i) { --- 2093,2100 ---- static void dw2_build_landing_pads () { ! int i; ! unsigned int j; for (i = cfun->eh->last_region_number; i > 0; --i) { *************** dw2_build_landing_pads () *** 1913,1919 **** /* @@@ This is a kludge. Not all machine descriptions define a blockage insn, but we must not allow the code we just generated to be reordered by scheduling. So emit an ASM_INPUT to act as ! blockage insn. */ emit_insn (gen_rtx_ASM_INPUT (VOIDmode, "")); } --- 2148,2154 ---- /* @@@ This is a kludge. Not all machine descriptions define a blockage insn, but we must not allow the code we just generated to be reordered by scheduling. So emit an ASM_INPUT to act as ! blockage insn. */ emit_insn (gen_rtx_ASM_INPUT (VOIDmode, "")); } *************** sjlj_assign_call_site_values (dispatch_l *** 2018,2024 **** A region receives a dispatch index if it is directly reachable and requires in-function processing. Regions that share post-landing ! pads may share dispatch indicies. */ /* ??? Post-landing pad sharing doesn't actually happen at the moment (see build_post_landing_pads) so we don't bother checking for it. */ --- 2253,2259 ---- A region receives a dispatch index if it is directly reachable and requires in-function processing. Regions that share post-landing ! pads may share dispatch indices. */ /* ??? Post-landing pad sharing doesn't actually happen at the moment (see build_post_landing_pads) so we don't bother checking for it. */ *************** sjlj_mark_call_sites (lp_info) *** 2103,2111 **** before = find_first_parameter_load (insn, NULL_RTX); start_sequence (); ! mem = change_address (cfun->eh->sjlj_fc, TYPE_MODE (integer_type_node), ! plus_constant (XEXP (cfun->eh->sjlj_fc, 0), ! sjlj_fc_call_site_ofs)); emit_move_insn (mem, GEN_INT (this_call_site)); p = get_insns (); end_sequence (); --- 2338,2345 ---- before = find_first_parameter_load (insn, NULL_RTX); start_sequence (); ! mem = adjust_address (cfun->eh->sjlj_fc, TYPE_MODE (integer_type_node), ! sjlj_fc_call_site_ofs); emit_move_insn (mem, GEN_INT (this_call_site)); p = get_insns (); end_sequence (); *************** sjlj_emit_function_enter (dispatch_label *** 2131,2142 **** calling it directly. Thus, we must call assemble_external_libcall here, as we can not depend on emit_library_call to do it for us. */ assemble_external_libcall (eh_personality_libfunc); ! mem = change_address (fc, Pmode, ! plus_constant (XEXP (fc, 0), sjlj_fc_personality_ofs)); emit_move_insn (mem, eh_personality_libfunc); ! mem = change_address (fc, Pmode, ! plus_constant (XEXP (fc, 0), sjlj_fc_lsda_ofs)); if (cfun->uses_eh_lsda) { char buf[20]; --- 2365,2374 ---- calling it directly. Thus, we must call assemble_external_libcall here, as we can not depend on emit_library_call to do it for us. */ assemble_external_libcall (eh_personality_libfunc); ! mem = adjust_address (fc, Pmode, sjlj_fc_personality_ofs); emit_move_insn (mem, eh_personality_libfunc); ! mem = adjust_address (fc, Pmode, sjlj_fc_lsda_ofs); if (cfun->uses_eh_lsda) { char buf[20]; *************** sjlj_emit_function_enter (dispatch_label *** 2145,2155 **** } else emit_move_insn (mem, const0_rtx); ! #ifdef DONT_USE_BUILTIN_SETJMP { rtx x, note; ! x = emit_library_call_value (setjmp_libfunc, NULL_RTX, LCT_NORMAL, TYPE_MODE (integer_type_node), 1, plus_constant (XEXP (fc, 0), sjlj_fc_jbuf_ofs), Pmode); --- 2377,2387 ---- } else emit_move_insn (mem, const0_rtx); ! #ifdef DONT_USE_BUILTIN_SETJMP { rtx x, note; ! x = emit_library_call_value (setjmp_libfunc, NULL_RTX, LCT_RETURNS_TWICE, TYPE_MODE (integer_type_node), 1, plus_constant (XEXP (fc, 0), sjlj_fc_jbuf_ofs), Pmode); *************** sjlj_emit_function_enter (dispatch_label *** 2158,2165 **** NOTE_EXPECTED_VALUE (note) = gen_rtx_EQ (VOIDmode, x, const0_rtx); emit_cmp_and_jump_insns (x, const0_rtx, NE, 0, ! TYPE_MODE (integer_type_node), 0, 0, ! dispatch_label); } #else expand_builtin_setjmp_setup (plus_constant (XEXP (fc, 0), sjlj_fc_jbuf_ofs), --- 2390,2396 ---- NOTE_EXPECTED_VALUE (note) = gen_rtx_EQ (VOIDmode, x, const0_rtx); emit_cmp_and_jump_insns (x, const0_rtx, NE, 0, ! TYPE_MODE (integer_type_node), 0, dispatch_label); } #else expand_builtin_setjmp_setup (plus_constant (XEXP (fc, 0), sjlj_fc_jbuf_ofs), *************** sjlj_emit_dispatch_table (dispatch_label *** 2226,2244 **** start_sequence (); emit_label (dispatch_label); ! #ifndef DONT_USE_BUILTIN_SETJMP expand_builtin_setjmp_receiver (dispatch_label); #endif /* Load up dispatch index, exc_ptr and filter values from the function context. */ ! mem = change_address (fc, TYPE_MODE (integer_type_node), ! plus_constant (XEXP (fc, 0), sjlj_fc_call_site_ofs)); dispatch = copy_to_reg (mem); ! mem = change_address (fc, word_mode, ! plus_constant (XEXP (fc, 0), sjlj_fc_data_ofs)); if (word_mode != Pmode) { #ifdef POINTERS_EXTEND_UNSIGNED --- 2457,2474 ---- start_sequence (); emit_label (dispatch_label); ! #ifndef DONT_USE_BUILTIN_SETJMP expand_builtin_setjmp_receiver (dispatch_label); #endif /* Load up dispatch index, exc_ptr and filter values from the function context. */ ! mem = adjust_address (fc, TYPE_MODE (integer_type_node), ! sjlj_fc_call_site_ofs); dispatch = copy_to_reg (mem); ! mem = adjust_address (fc, word_mode, sjlj_fc_data_ofs); if (word_mode != Pmode) { #ifdef POINTERS_EXTEND_UNSIGNED *************** sjlj_emit_dispatch_table (dispatch_label *** 2249,2257 **** } emit_move_insn (cfun->eh->exc_ptr, mem); ! mem = change_address (fc, word_mode, ! plus_constant (XEXP (fc, 0), ! sjlj_fc_data_ofs + UNITS_PER_WORD)); emit_move_insn (cfun->eh->filter, mem); /* Jump to one of the directly reachable regions. */ --- 2479,2485 ---- } emit_move_insn (cfun->eh->exc_ptr, mem); ! mem = adjust_address (fc, word_mode, sjlj_fc_data_ofs + UNITS_PER_WORD); emit_move_insn (cfun->eh->filter, mem); /* Jump to one of the directly reachable regions. */ *************** sjlj_emit_dispatch_table (dispatch_label *** 2269,2277 **** continue; } ! emit_cmp_and_jump_insns (dispatch, ! GEN_INT (lp_info[i].dispatch_index), EQ, ! NULL_RTX, TYPE_MODE (integer_type_node), 0, 0, cfun->eh->region_array[i]->post_landing_pad); } --- 2497,2504 ---- continue; } ! emit_cmp_and_jump_insns (dispatch, GEN_INT (lp_info[i].dispatch_index), ! EQ, NULL_RTX, TYPE_MODE (integer_type_node), 0, cfun->eh->region_array[i]->post_landing_pad); } *************** finish_eh_generation () *** 2326,2334 **** connect many of the handlers, and then type information will not be effective. Still, this is a win over previous implementations. */ ! jump_optimize_minimal (get_insns ()); find_basic_blocks (get_insns (), max_reg_num (), 0); ! cleanup_cfg (); /* These registers are used by the landing pads. Make sure they have been generated. */ --- 2553,2561 ---- connect many of the handlers, and then type information will not be effective. Still, this is a win over previous implementations. */ ! rebuild_jump_labels (get_insns ()); find_basic_blocks (get_insns (), max_reg_num (), 0); ! cleanup_cfg (CLEANUP_PRE_LOOP); /* These registers are used by the landing pads. Make sure they have been generated. */ *************** finish_eh_generation () *** 2349,2376 **** /* We've totally changed the CFG. Start over. */ find_exception_handler_labels (); ! jump_optimize_minimal (get_insns ()); find_basic_blocks (get_insns (), max_reg_num (), 0); ! cleanup_cfg (); } /* This section handles removing dead code for flow. */ ! /* Remove LABEL from the exception_handler_labels list. */ static void remove_exception_handler_label (label) rtx label; { ! rtx *pl, l; ! for (pl = &exception_handler_labels, l = *pl; ! XEXP (l, 0) != label; ! pl = &XEXP (l, 1), l = *pl) ! continue; ! *pl = XEXP (l, 1); ! free_EXPR_LIST_node (l); } /* Splice REGION from the region tree etc. */ --- 2576,2630 ---- /* We've totally changed the CFG. Start over. */ find_exception_handler_labels (); ! rebuild_jump_labels (get_insns ()); find_basic_blocks (get_insns (), max_reg_num (), 0); ! cleanup_cfg (CLEANUP_PRE_LOOP); } + static hashval_t + ehl_hash (pentry) + const PTR pentry; + { + struct ehl_map_entry *entry = (struct ehl_map_entry *) pentry; + + /* 2^32 * ((sqrt(5) - 1) / 2) */ + const hashval_t scaled_golden_ratio = 0x9e3779b9; + return CODE_LABEL_NUMBER (entry->label) * scaled_golden_ratio; + } + + static int + ehl_eq (pentry, pdata) + const PTR pentry; + const PTR pdata; + { + struct ehl_map_entry *entry = (struct ehl_map_entry *) pentry; + struct ehl_map_entry *data = (struct ehl_map_entry *) pdata; + + return entry->label == data->label; + } + /* This section handles removing dead code for flow. */ ! /* Remove LABEL from exception_handler_label_map. */ static void remove_exception_handler_label (label) rtx label; { ! struct ehl_map_entry **slot, tmp; ! /* If exception_handler_label_map was not built yet, ! there is nothing to do. */ ! if (exception_handler_label_map == NULL) ! return; ! tmp.label = label; ! slot = (struct ehl_map_entry **) ! htab_find_slot (exception_handler_label_map, &tmp, NO_INSERT); ! if (! slot) ! abort (); ! ! htab_clear_slot (exception_handler_label_map, (void **) slot); } /* Splice REGION from the region tree etc. */ *************** static void *** 2379,2396 **** remove_eh_handler (region) struct eh_region *region; { ! struct eh_region **pp, *p; rtx lab; - int i; /* For the benefit of efficiently handling REG_EH_REGION notes, replace this region in the region array with its containing region. Note that previous region deletions may result in ! multiple copies of this region in the array, so we have to ! search the whole thing. */ ! for (i = cfun->eh->last_region_number; i > 0; --i) ! if (cfun->eh->region_array[i] == region) ! cfun->eh->region_array[i] = region->outer; if (cfun->eh->built_landing_pads) lab = region->landing_pad; --- 2633,2664 ---- remove_eh_handler (region) struct eh_region *region; { ! struct eh_region **pp, **pp_start, *p, *outer, *inner; rtx lab; /* For the benefit of efficiently handling REG_EH_REGION notes, replace this region in the region array with its containing region. Note that previous region deletions may result in ! multiple copies of this region in the array, so we have a ! list of alternate numbers by which we are known. */ ! ! outer = region->outer; ! cfun->eh->region_array[region->region_number] = outer; ! if (region->aka) ! { ! int i; ! EXECUTE_IF_SET_IN_BITMAP (region->aka, 0, i, ! { cfun->eh->region_array[i] = outer; }); ! } ! ! if (outer) ! { ! if (!outer->aka) ! outer->aka = BITMAP_XMALLOC (); ! if (region->aka) ! bitmap_a_or_b (outer->aka, outer->aka, region->aka); ! bitmap_set_bit (outer->aka, region->region_number); ! } if (cfun->eh->built_landing_pads) lab = region->landing_pad; *************** remove_eh_handler (region) *** 2399,2421 **** if (lab) remove_exception_handler_label (lab); ! if (region->outer) ! pp = ®ion->outer->inner; else ! pp = &cfun->eh->region_tree; ! for (p = *pp; p != region; pp = &p->next_peer, p = *pp) continue; ! if (region->inner) { ! for (p = region->inner; p->next_peer ; p = p->next_peer) ! p->outer = region->outer; ! p->next_peer = region->next_peer; ! p->outer = region->outer; ! *pp = region->inner; } - else - *pp = region->next_peer; if (region->type == ERT_CATCH) { --- 2667,2690 ---- if (lab) remove_exception_handler_label (lab); ! if (outer) ! pp_start = &outer->inner; else ! pp_start = &cfun->eh->region_tree; ! for (pp = pp_start, p = *pp; p != region; pp = &p->next_peer, p = *pp) continue; + *pp = region->next_peer; ! inner = region->inner; ! if (inner) { ! for (p = inner; p->next_peer ; p = p->next_peer) ! p->outer = outer; ! p->outer = outer; ! ! p->next_peer = *pp_start; ! *pp_start = inner; } if (region->type == ERT_CATCH) { *************** remove_eh_handler (region) *** 2445,2451 **** } } ! free (region); } /* LABEL heads a basic block that is about to be deleted. If this --- 2714,2720 ---- } } ! free_region (region); } /* LABEL heads a basic block that is about to be deleted. If this *************** void *** 2456,2462 **** maybe_remove_eh_handler (label) rtx label; { ! int i; /* ??? After generating landing pads, it's not so simple to determine if the region data is completely unused. One must examine the --- 2725,2732 ---- maybe_remove_eh_handler (label) rtx label; { ! struct ehl_map_entry **slot, tmp; ! struct eh_region *region; /* ??? After generating landing pads, it's not so simple to determine if the region data is completely unused. One must examine the *************** maybe_remove_eh_handler (label) *** 2465,2491 **** if (cfun->eh->built_landing_pads) return; ! for (i = cfun->eh->last_region_number; i > 0; --i) { ! struct eh_region *region = cfun->eh->region_array[i]; ! if (region && region->label == label) ! { ! /* Flow will want to remove MUST_NOT_THROW regions as unreachable ! because there is no path to the fallback call to terminate. ! But the region continues to affect call-site data until there ! are no more contained calls, which we don't see here. */ ! if (region->type == ERT_MUST_NOT_THROW) ! { ! remove_exception_handler_label (region->label); ! region->label = NULL_RTX; ! } ! else ! remove_eh_handler (region); ! break; ! } } } /* This section describes CFG exception edges for flow. */ --- 2735,2784 ---- if (cfun->eh->built_landing_pads) return; ! tmp.label = label; ! slot = (struct ehl_map_entry **) ! htab_find_slot (exception_handler_label_map, &tmp, NO_INSERT); ! if (! slot) ! return; ! region = (*slot)->region; ! if (! region) ! return; ! ! /* Flow will want to remove MUST_NOT_THROW regions as unreachable ! because there is no path to the fallback call to terminate. ! But the region continues to affect call-site data until there ! are no more contained calls, which we don't see here. */ ! if (region->type == ERT_MUST_NOT_THROW) { ! htab_clear_slot (exception_handler_label_map, (void **) slot); ! region->label = NULL_RTX; } + else + remove_eh_handler (region); } + /* Invokes CALLBACK for every exception handler label. Only used by old + loop hackery; should not be used by new code. */ + + void + for_each_eh_label (callback) + void (*callback) PARAMS ((rtx)); + { + htab_traverse (exception_handler_label_map, for_each_eh_label_1, + (void *)callback); + } + + static int + for_each_eh_label_1 (pentry, data) + PTR *pentry; + PTR data; + { + struct ehl_map_entry *entry = *(struct ehl_map_entry **)pentry; + void (*callback) PARAMS ((rtx)) = (void (*) PARAMS ((rtx))) data; + + (*callback) (entry->label); + return 1; + } /* This section describes CFG exception edges for flow. */ *************** check_handled (handled, type) *** 2526,2532 **** /* A subroutine of reachable_next_level. If we are collecting a list of handlers, add one. After landing pad generation, reference it instead of the handlers themselves. Further, the handlers are ! all wired together, so by referencing one, we've got them all. Before landing pad generation we reference each handler individually. LP_REGION contains the landing pad; REGION is the handler. */ --- 2819,2825 ---- /* A subroutine of reachable_next_level. If we are collecting a list of handlers, add one. After landing pad generation, reference it instead of the handlers themselves. Further, the handlers are ! all wired together, so by referencing one, we've got them all. Before landing pad generation we reference each handler individually. LP_REGION contains the landing pad; REGION is the handler. */ *************** add_reachable_handler (info, lp_region, *** 2549,2555 **** info->handlers = alloc_INSN_LIST (region->label, info->handlers); } ! /* Process one level of exception regions for reachability. If TYPE_THROWN is non-null, then it is the *exact* type being propagated. If INFO is non-null, then collect handler labels and caught/allowed type information between invocations. */ --- 2842,2848 ---- info->handlers = alloc_INSN_LIST (region->label, info->handlers); } ! /* Process one level of exception regions for reachability. If TYPE_THROWN is non-null, then it is the *exact* type being propagated. If INFO is non-null, then collect handler labels and caught/allowed type information between invocations. */ *************** reachable_next_level (region, type_throw *** 2579,2585 **** /* A catch-all handler ends the search. */ /* ??? _Unwind_ForcedUnwind will want outer cleanups to be run as well. */ ! if (c->u.catch.type == NULL) { add_reachable_handler (info, region, c); return RNL_CAUGHT; --- 2872,2878 ---- /* A catch-all handler ends the search. */ /* ??? _Unwind_ForcedUnwind will want outer cleanups to be run as well. */ ! if (c->u.catch.type_list == NULL) { add_reachable_handler (info, region, c); return RNL_CAUGHT; *************** reachable_next_level (region, type_throw *** 2587,2600 **** if (type_thrown) { ! /* If we have a type match, end the search. */ ! if (c->u.catch.type == type_thrown ! || (lang_eh_type_covers ! && (*lang_eh_type_covers) (c->u.catch.type, ! type_thrown))) { ! add_reachable_handler (info, region, c); ! return RNL_CAUGHT; } /* If we have definitive information of a match failure, --- 2880,2899 ---- if (type_thrown) { ! /* If we have at least one type match, end the search. */ ! tree tp_node = c->u.catch.type_list; ! ! for (; tp_node; tp_node = TREE_CHAIN (tp_node)) { ! tree type = TREE_VALUE (tp_node); ! ! if (type == type_thrown ! || (lang_eh_type_covers ! && (*lang_eh_type_covers) (type, type_thrown))) ! { ! add_reachable_handler (info, region, c); ! return RNL_CAUGHT; ! } } /* If we have definitive information of a match failure, *************** reachable_next_level (region, type_throw *** 2603,2621 **** return RNL_NOT_CAUGHT; } if (! info) ret = RNL_MAYBE_CAUGHT; ! ! /* A type must not have been previously caught. */ ! else if (! check_handled (info->types_caught, c->u.catch.type)) { ! add_reachable_handler (info, region, c); ! info->types_caught = tree_cons (NULL, c->u.catch.type, ! info->types_caught); ! /* ??? If the catch type is a base class of every allowed ! type, then we know we can stop the search. */ ! ret = RNL_MAYBE_CAUGHT; } } --- 2902,2950 ---- return RNL_NOT_CAUGHT; } + /* At this point, we either don't know what type is thrown or + don't have front-end assistance to help deciding if it is + covered by one of the types in the list for this region. + + We'd then like to add this region to the list of reachable + handlers since it is indeed potentially reachable based on the + information we have. + + Actually, this handler is for sure not reachable if all the + types it matches have already been caught. That is, it is only + potentially reachable if at least one of the types it catches + has not been previously caught. */ + if (! info) ret = RNL_MAYBE_CAUGHT; ! else { ! tree tp_node = c->u.catch.type_list; ! bool maybe_reachable = false; ! /* Compute the potential reachability of this handler and ! update the list of types caught at the same time. */ ! for (; tp_node; tp_node = TREE_CHAIN (tp_node)) ! { ! tree type = TREE_VALUE (tp_node); ! ! if (! check_handled (info->types_caught, type)) ! { ! info->types_caught ! = tree_cons (NULL, type, info->types_caught); ! ! maybe_reachable = true; ! } ! } ! ! if (maybe_reachable) ! { ! add_reachable_handler (info, region, c); ! ! /* ??? If the catch type is a base class of every allowed ! type, then we know we can stop the search. */ ! ret = RNL_MAYBE_CAUGHT; ! } } } *************** reachable_next_level (region, type_throw *** 2636,2643 **** info->types_allowed = tree_cons (NULL_TREE, region->u.allowed.type_list, info->types_allowed); ! ! /* If we have definitive information about the type heirarchy, then we can tell if the thrown type will pass through the filter. */ if (type_thrown && lang_eh_type_covers) --- 2965,2972 ---- info->types_allowed = tree_cons (NULL_TREE, region->u.allowed.type_list, info->types_allowed); ! ! /* If we have definitive information about the type hierarchy, then we can tell if the thrown type will pass through the filter. */ if (type_thrown && lang_eh_type_covers) *************** reachable_next_level (region, type_throw *** 2673,2678 **** --- 3002,3008 ---- case ERT_THROW: case ERT_FIXUP: + case ERT_UNKNOWN: /* Shouldn't see these here. */ break; } *************** reachable_handlers (insn) *** 2708,2721 **** region = cfun->eh->region_array[region_number]; type_thrown = NULL_TREE; ! if (region->type == ERT_THROW) { type_thrown = region->u.throw.type; region = region->outer; } - else if (GET_CODE (insn) == JUMP_INSN - && GET_CODE (PATTERN (insn)) == RESX) - region = region->outer; for (; region; region = region->outer) if (reachable_next_level (region, type_thrown, &info) >= RNL_CAUGHT) --- 3038,3057 ---- region = cfun->eh->region_array[region_number]; type_thrown = NULL_TREE; ! if (GET_CODE (insn) == JUMP_INSN ! && GET_CODE (PATTERN (insn)) == RESX) ! { ! /* A RESX leaves a region instead of entering it. Thus the ! region itself may have been deleted out from under us. */ ! if (region == NULL) ! return NULL; ! region = region->outer; ! } ! else if (region->type == ERT_THROW) { type_thrown = region->u.throw.type; region = region->outer; } for (; region; region = region->outer) if (reachable_next_level (region, type_thrown, &info) >= RNL_CAUGHT) *************** void *** 2881,2887 **** expand_builtin_unwind_init () { /* Set this so all the registers get saved in our frame; we need to be ! able to copy the saved values for any registers from frames we unwind. */ current_function_has_nonlocal_label = 1; #ifdef SETUP_FRAME_ADDRESSES --- 3217,3223 ---- expand_builtin_unwind_init () { /* Set this so all the registers get saved in our frame; we need to be ! able to copy the saved values for any registers from frames we unwind. */ current_function_has_nonlocal_label = 1; #ifdef SETUP_FRAME_ADDRESSES *************** expand_builtin_eh_return_data_regno (arg *** 2913,2919 **** iwhich = DBX_REGISTER_NUMBER (iwhich); #endif ! return GEN_INT (iwhich); } /* Given a value extracted from the return address register or stack slot, --- 3249,3255 ---- iwhich = DBX_REGISTER_NUMBER (iwhich); #endif ! return GEN_INT (iwhich); } /* Given a value extracted from the return address register or stack slot, *************** expand_builtin_extract_return_addr (addr *** 2927,2933 **** /* First mask out any unwanted bits. */ #ifdef MASK_RETURN_ADDR ! expand_and (addr, MASK_RETURN_ADDR, addr); #endif /* Then adjust to find the real return address. */ --- 3263,3269 ---- /* First mask out any unwanted bits. */ #ifdef MASK_RETURN_ADDR ! expand_and (Pmode, addr, MASK_RETURN_ADDR, addr); #endif /* Then adjust to find the real return address. */ *************** rtx *** 2946,2952 **** expand_builtin_frob_return_addr (addr_tree) tree addr_tree; { ! rtx addr = expand_expr (addr_tree, NULL_RTX, Pmode, 0); #ifdef RETURN_ADDR_OFFSET addr = force_reg (Pmode, addr); --- 3282,3293 ---- expand_builtin_frob_return_addr (addr_tree) tree addr_tree; { ! rtx addr = expand_expr (addr_tree, NULL_RTX, ptr_mode, 0); ! ! #ifdef POINTERS_EXTEND_UNSIGNED ! if (GET_MODE (addr) != Pmode) ! addr = convert_memory_address (Pmode, addr); ! #endif #ifdef RETURN_ADDR_OFFSET addr = force_reg (Pmode, addr); *************** expand_builtin_eh_return (stackadj_tree, *** 2968,2973 **** --- 3309,3322 ---- stackadj = expand_expr (stackadj_tree, cfun->eh->ehr_stackadj, VOIDmode, 0); handler = expand_expr (handler_tree, cfun->eh->ehr_handler, VOIDmode, 0); + #ifdef POINTERS_EXTEND_UNSIGNED + if (GET_MODE (stackadj) != Pmode) + stackadj = convert_memory_address (Pmode, stackadj); + + if (GET_MODE (handler) != Pmode) + handler = convert_memory_address (Pmode, handler); + #endif + if (! cfun->eh->ehr_label) { cfun->eh->ehr_stackadj = copy_to_reg (stackadj); *************** expand_eh_return () *** 3015,3022 **** else #endif { - rtx handler; - ra = EH_RETURN_HANDLER_RTX; if (! ra) { --- 3364,3369 ---- *************** expand_eh_return () *** 3025,3048 **** } emit_move_insn (sa, cfun->eh->ehr_stackadj); ! ! handler = cfun->eh->ehr_handler; ! if (GET_MODE (ra) != Pmode) ! { ! #ifdef POINTERS_EXTEND_UNSIGNED ! handler = convert_memory_address (GET_MODE (ra), handler); ! #else ! handler = convert_to_mode (GET_MODE (ra), handler, 0); ! #endif ! } ! emit_move_insn (ra, handler); } emit_label (around_label); } /* In the following functions, we represent entries in the action table ! as 1-based indicies. Special cases are: 0: null action record, non-null landing pad; implies cleanups -1: null action record, null landing pad; implies no action --- 3372,3385 ---- } emit_move_insn (sa, cfun->eh->ehr_stackadj); ! emit_move_insn (ra, cfun->eh->ehr_handler); } emit_label (around_label); } /* In the following functions, we represent entries in the action table ! as 1-based indices. Special cases are: 0: null action record, non-null landing pad; implies cleanups -1: null action record, null landing pad; implies no action *************** add_action_record (ar_hash, filter, next *** 3099,3105 **** /* The filter value goes in untouched. The link to the next record is a "self-relative" byte offset, or zero to indicate that there is no next record. So convert the absolute 1 based ! indicies we've been carrying around into a displacement. */ push_sleb128 (&cfun->eh->action_record_data, filter); if (next) --- 3436,3442 ---- /* The filter value goes in untouched. The link to the next record is a "self-relative" byte offset, or zero to indicate that there is no next record. So convert the absolute 1 based ! indices we've been carrying around into a displacement. */ push_sleb128 (&cfun->eh->action_record_data, filter); if (next) *************** collect_one_action_chain (ar_hash, regio *** 3144,3157 **** /* Process the associated catch regions in reverse order. If there's a catch-all handler, then we don't need to search outer regions. Use a magic -3 value to record ! that we havn't done the outer search. */ next = -3; for (c = region->u.try.last_catch; c ; c = c->u.catch.prev_catch) { ! if (c->u.catch.type == NULL) ! next = add_action_record (ar_hash, c->u.catch.filter, 0); else { if (next == -3) { next = collect_one_action_chain (ar_hash, region->outer); --- 3481,3505 ---- /* Process the associated catch regions in reverse order. If there's a catch-all handler, then we don't need to search outer regions. Use a magic -3 value to record ! that we haven't done the outer search. */ next = -3; for (c = region->u.try.last_catch; c ; c = c->u.catch.prev_catch) { ! if (c->u.catch.type_list == NULL) ! { ! /* Retrieve the filter from the head of the filter list ! where we have stored it (see assign_filter_values). */ ! int filter ! = TREE_INT_CST_LOW (TREE_VALUE (c->u.catch.filter_list)); ! ! next = add_action_record (ar_hash, filter, 0); ! } else { + /* Once the outer search is done, trigger an action record for + each filter we have. */ + tree flt_node; + if (next == -3) { next = collect_one_action_chain (ar_hash, region->outer); *************** collect_one_action_chain (ar_hash, regio *** 3166,3172 **** else if (next <= 0) next = add_action_record (ar_hash, 0, 0); } ! next = add_action_record (ar_hash, c->u.catch.filter, next); } } return next; --- 3514,3526 ---- else if (next <= 0) next = add_action_record (ar_hash, 0, 0); } ! ! flt_node = c->u.catch.filter_list; ! for (; flt_node; flt_node = TREE_CHAIN (flt_node)) ! { ! int filter = TREE_INT_CST_LOW (TREE_VALUE (flt_node)); ! next = add_action_record (ar_hash, filter, next); ! } } } return next; *************** convert_to_eh_region_ranges () *** 3235,3241 **** rtx last_action_insn = NULL_RTX; rtx last_landing_pad = NULL_RTX; rtx first_no_action_insn = NULL_RTX; ! int call_site; if (USING_SJLJ_EXCEPTIONS || cfun->eh->region_tree == NULL) return; --- 3589,3595 ---- rtx last_action_insn = NULL_RTX; rtx last_landing_pad = NULL_RTX; rtx first_no_action_insn = NULL_RTX; ! int call_site = 0; if (USING_SJLJ_EXCEPTIONS || cfun->eh->region_tree == NULL) return; *************** convert_to_eh_region_ranges () *** 3328,3334 **** are created. */ if (this_action >= -1) { ! call_site = add_call_site (this_landing_pad, this_action < 0 ? 0 : this_action); note = emit_note_before (NOTE_INSN_EH_REGION_BEG, iter); NOTE_EH_HANDLER (note) = call_site; --- 3682,3688 ---- are created. */ if (this_action >= -1) { ! call_site = add_call_site (this_landing_pad, this_action < 0 ? 0 : this_action); note = emit_note_before (NOTE_INSN_EH_REGION_BEG, iter); NOTE_EH_HANDLER (note) = call_site; *************** sjlj_size_of_call_site_table () *** 3426,3432 **** static void dw2_output_call_site_table () { ! const char *function_start_lab = IDENTIFIER_POINTER (current_function_func_begin_label); int n = cfun->eh->call_site_data_used; int i; --- 3780,3786 ---- static void dw2_output_call_site_table () { ! const char *const function_start_lab = IDENTIFIER_POINTER (current_function_func_begin_label); int n = cfun->eh->call_site_data_used; int i; *************** output_function_exception_table () *** 3506,3512 **** #endif int have_tt_data; int funcdef_number; ! int tt_format_size; /* Not all functions need anything. */ if (! cfun->uses_eh_lsda) --- 3860,3866 ---- #endif int have_tt_data; int funcdef_number; ! int tt_format_size = 0; /* Not all functions need anything. */ if (! cfun->uses_eh_lsda) *************** output_function_exception_table () *** 3523,3529 **** /* Note that varasm still thinks we're in the function's code section. The ".endp" directive that will immediately follow will take us back. */ #else ! exception_section (); #endif have_tt_data = (VARRAY_ACTIVE_SIZE (cfun->eh->ttype_data) > 0 --- 3877,3883 ---- /* Note that varasm still thinks we're in the function's code section. The ".endp" directive that will immediately follow will take us back. */ #else ! (*targetm.asm_out.exception_section) (); #endif have_tt_data = (VARRAY_ACTIVE_SIZE (cfun->eh->ttype_data) > 0 *************** output_function_exception_table () *** 3540,3546 **** #endif tt_format_size = size_of_encoded_value (tt_format); ! assemble_eh_align (tt_format_size * BITS_PER_UNIT); } ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "LLSDA", funcdef_number); --- 3894,3900 ---- #endif tt_format_size = size_of_encoded_value (tt_format); ! assemble_align (tt_format_size * BITS_PER_UNIT); } ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "LLSDA", funcdef_number); *************** output_function_exception_table () *** 3574,3580 **** { #ifdef HAVE_AS_LEB128 char ttype_after_disp_label[32]; ! ASM_GENERATE_INTERNAL_LABEL (ttype_after_disp_label, "LLSDATTD", funcdef_number); dw2_asm_output_delta_uleb128 (ttype_label, ttype_after_disp_label, "@TType base offset"); --- 3928,3934 ---- { #ifdef HAVE_AS_LEB128 char ttype_after_disp_label[32]; ! ASM_GENERATE_INTERNAL_LABEL (ttype_after_disp_label, "LLSDATTD", funcdef_number); dw2_asm_output_delta_uleb128 (ttype_label, ttype_after_disp_label, "@TType base offset"); *************** output_function_exception_table () *** 3647,3668 **** (i ? NULL : "Action record table")); if (have_tt_data) ! assemble_eh_align (tt_format_size * BITS_PER_UNIT); i = VARRAY_ACTIVE_SIZE (cfun->eh->ttype_data); while (i-- > 0) { tree type = VARRAY_TREE (cfun->eh->ttype_data, i); if (type == NULL_TREE) type = integer_zero_node; else type = lookup_type_for_runtime (type); ! dw2_asm_output_encoded_addr_rtx (tt_format, ! expand_expr (type, NULL_RTX, VOIDmode, ! EXPAND_INITIALIZER), ! NULL); } #ifdef HAVE_AS_LEB128 --- 4001,4025 ---- (i ? NULL : "Action record table")); if (have_tt_data) ! assemble_align (tt_format_size * BITS_PER_UNIT); i = VARRAY_ACTIVE_SIZE (cfun->eh->ttype_data); while (i-- > 0) { tree type = VARRAY_TREE (cfun->eh->ttype_data, i); + rtx value; if (type == NULL_TREE) type = integer_zero_node; else type = lookup_type_for_runtime (type); ! value = expand_expr (type, NULL_RTX, VOIDmode, EXPAND_INITIALIZER); ! if (tt_format == DW_EH_PE_absptr || tt_format == DW_EH_PE_aligned) ! assemble_integer (value, tt_format_size, ! tt_format_size * BITS_PER_UNIT, 1); ! else ! dw2_asm_output_encoded_addr_rtx (tt_format, value, NULL); } #ifdef HAVE_AS_LEB128 diff -Nrc3pad gcc-3.0.4/gcc/except.h gcc-3.1/gcc/except.h *** gcc-3.0.4/gcc/except.h Fri Jul 6 23:17:41 2001 --- gcc-3.1/gcc/except.h Tue Apr 9 20:38:58 2002 *************** *** 1,41 **** /* Exception Handling interface routines. ! Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Mike Stump . ! 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. */ ! ! ! #ifndef TREE_CODE ! union tree_node; ! #define tree union tree_node * ! #endif - #ifndef RTX_CODE - struct rtx_def; - #define rtx struct rtx_def * - #endif ! #ifndef _VARRAY_H_ struct varray_head_tag; #define varray_type struct varray_head_tag * #endif /* Per-function EH data. Used only in except.c, but GC and others manipulate pointers to the opaque type. */ --- 1,34 ---- /* Exception Handling interface routines. ! Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Mike Stump . ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ ! #ifndef GCC_VARRAY_H struct varray_head_tag; #define varray_type struct varray_head_tag * #endif + struct function; + + struct inline_remap; /* Per-function EH data. Used only in except.c, but GC and others manipulate pointers to the opaque type. */ *************** extern void expand_eh_region_end_cleanup *** 61,67 **** extern void expand_start_all_catch PARAMS ((void)); /* Begin a catch clause. TYPE is an object to be matched by the ! runtime, or null if this is a catch-all clause. */ extern void expand_start_catch PARAMS ((tree)); /* End a catch clause. Control will resume after the try/catch block. */ --- 54,61 ---- extern void expand_start_all_catch PARAMS ((void)); /* Begin a catch clause. TYPE is an object to be matched by the ! runtime, or a list of such objects, or null if this is a catch-all ! clause. */ extern void expand_start_catch PARAMS ((tree)); /* End a catch clause. Control will resume after the try/catch block. */ *************** extern void expand_end_all_catch PARAMS *** 72,78 **** /* End an exception region for an exception type filter. ALLOWED is a TREE_LIST of TREE_VALUE objects to be matched by the runtime. ! FAILURE is a function to invoke if a mismatch ocurrs. */ extern void expand_eh_region_end_allowed PARAMS ((tree, tree)); /* End an exception region for a must-not-throw filter. FAILURE is a --- 66,72 ---- /* End an exception region for an exception type filter. ALLOWED is a TREE_LIST of TREE_VALUE objects to be matched by the runtime. ! FAILURE is a function to invoke if a mismatch occurs. */ extern void expand_eh_region_end_allowed PARAMS ((tree, tree)); /* End an exception region for a must-not-throw filter. FAILURE is a *************** extern void add_partial_entry PARAMS ( *** 102,110 **** add_partial_entry. */ extern void end_protect_partials PARAMS ((void)); ! ! /* A list of labels used for exception handlers. */ ! extern rtx exception_handler_labels; /* Determine if the given INSN can throw an exception. */ extern bool can_throw_internal PARAMS ((rtx)); --- 96,104 ---- add_partial_entry. */ extern void end_protect_partials PARAMS ((void)); ! /* Invokes CALLBACK for every exception handler label. Only used by old ! loop hackery; should not be used by new code. */ ! extern void for_each_eh_label PARAMS ((void (*) (rtx))); /* Determine if the given INSN can throw an exception. */ extern bool can_throw_internal PARAMS ((rtx)); *************** extern void maybe_remove_eh_handler PAR *** 126,131 **** --- 120,126 ---- extern void convert_from_eh_region_ranges PARAMS ((void)); extern void convert_to_eh_region_ranges PARAMS ((void)); extern void find_exception_handler_labels PARAMS ((void)); + extern bool current_function_has_exception_handlers PARAMS ((void)); extern void output_function_exception_table PARAMS ((void)); extern void expand_builtin_unwind_init PARAMS ((void)); *************** extern rtx expand_builtin_frob_return_ad *** 136,154 **** extern rtx expand_builtin_dwarf_fp_regnum PARAMS ((void)); extern void expand_builtin_eh_return PARAMS ((tree, tree)); extern void expand_eh_return PARAMS ((void)); - extern rtx get_exception_pointer PARAMS ((struct function *)); ! ! struct function; ! struct inline_remap; ! extern int duplicate_eh_regions PARAMS ((struct function *, struct inline_remap *)); extern void sjlj_emit_function_exit_after PARAMS ((rtx)); /* If non-NULL, this is a function that returns an expression to be ! executed if an unhandled exception is propogated out of a cleanup region. For example, in C++, an exception thrown by a destructor during stack unwinding is required to result in a call to `std::terminate', so the C++ version of this function returns a --- 131,145 ---- extern rtx expand_builtin_dwarf_fp_regnum PARAMS ((void)); extern void expand_builtin_eh_return PARAMS ((tree, tree)); extern void expand_eh_return PARAMS ((void)); extern rtx get_exception_pointer PARAMS ((struct function *)); ! extern int duplicate_eh_regions PARAMS ((struct function *, struct inline_remap *)); extern void sjlj_emit_function_exit_after PARAMS ((rtx)); /* If non-NULL, this is a function that returns an expression to be ! executed if an unhandled exception is propagated out of a cleanup region. For example, in C++, an exception thrown by a destructor during stack unwinding is required to result in a call to `std::terminate', so the C++ version of this function returns a *************** extern int (*lang_eh_type_covers) PARAMS *** 161,175 **** /* Map a type to a runtime object to match type. */ extern tree (*lang_eh_runtime_type) PARAMS ((tree)); ! #ifndef TREE_CODE ! #undef tree ! #endif ! ! #ifndef RTX_CODE ! #undef rtx ! #endif ! ! #ifndef _VARRAY_H_ #undef varray_type #endif --- 152,158 ---- /* Map a type to a runtime object to match type. */ extern tree (*lang_eh_runtime_type) PARAMS ((tree)); ! #ifndef GCC_VARRAY_H #undef varray_type #endif diff -Nrc3pad gcc-3.0.4/gcc/exgettext gcc-3.1/gcc/exgettext *** gcc-3.0.4/gcc/exgettext Sun Feb 6 06:57:20 2000 --- gcc-3.1/gcc/exgettext Thu Jan 1 00:00:00 1970 *************** *** 1,118 **** - #! /bin/sh - # Wrapper around gettext for GCC sources. - # Copyright 1998 Free Software Foundation, Inc. - - # Written by Paul Eggert . - - # 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. - - # Set environment to default value, if not already set. - : ${AWK=awk} - - # The argument to this wrapper is the xgettext command to be executed. - # Extract the xgettext program name from the rest of the command. - xgettext=${1?} - shift - - # Save work if we're just wrapping a no-op. - case $xgettext in - :) exit;; - esac - - # Find the files to be scanned, and the directory to scan them from. - directory=. - files= - for i - do - case $i in - --directory=*) - directory=`expr " $i" : ' --directory=\(.*\)'`;; - --files-from=*) - files_from=`expr " $i" : ' --files-from=\(.*\)'` - files=`$AWK '/^[^#]/ { print }' $files_from`;; - esac - done - - # Generate keyword options for xgettext, - # by scanning for declarations of functions - # whose parameter names end in "msgid". - generate_keyword_options=' - /^[A-Z_a-z].*\(.*msgid[,)]/ { - - paren_index = index($0, "(") - - name = substr($0, 1, paren_index - 1) - sub(/[^0-9A-Z_a-z]*$/, "", name) - sub(/[ ]+PARAMS/, "", name) - sub(/[ ]+VPARAMS/, "", name) - sub(/.*[^0-9A-Z_a-z]/, "", name) - - args = substr($0, paren_index) - sub(/msgid[,)].*/, "", args) - for (n = 1; sub(/^[^,]*,/, "", args); n++) { - continue; - } - - if (n == 1) { - keyword = name - } else { - keyword = name ":" n - } - - if (! keyword_seen[keyword]++) { - print "--keyword=" keyword - } - } - ' - keyword_options=`( - cd $directory && - $AWK "$generate_keyword_options" $files < /dev/null - )` || exit - - # Generate temporary file reflecting the %e strings in the scanned files. - tmp=tmp-emsgids.c - - generate_emsgids=' - /%e.*}/ { - line = $0 - while ((percent_index = index(line, "%e")) != 0) { - line = substr(line, percent_index + 2) - bracket_index = index(line, "}") - if (bracket_index == 0) { - continue - } - msgid = substr(line, 1, bracket_index - 1) - if (index(msgid, "%") != 0) { - continue - } - printf "#line %d \"%s\"\n", FNR, FILENAME - printf "_(\"%s\")\n", msgid - line = substr(line, bracket_index + 1) - } - } - ' - (cd $directory && - $AWK "$generate_emsgids" $files < /dev/null - ) > $directory/$tmp || exit - - # Run the xgettext command, with temporary added as a file to scan. - "$xgettext" $keyword_options ${1+"$@"} $tmp || exit - - # Clean up. - # If we don't get here, `make clean' will remove this file later. - rm -f $directory/$tmp --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/explow.c gcc-3.1/gcc/explow.c *** gcc-3.0.4/gcc/explow.c Sat May 12 20:32:26 2001 --- gcc-3.1/gcc/explow.c Thu Feb 21 23:06:14 2002 *************** *** 1,23 **** /* Subroutines for manipulating rtx's in semantically interesting ways. Copyright (C) 1987, 1991, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" --- 1,23 ---- /* Subroutines for manipulating rtx's in semantically interesting ways. Copyright (C) 1987, 1991, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" *************** Boston, MA 02111-1307, USA. */ *** 29,42 **** #include "flags.h" #include "function.h" #include "expr.h" #include "hard-reg-set.h" #include "insn-config.h" #include "recog.h" - #if !defined PREFERRED_STACK_BOUNDARY && defined STACK_BOUNDARY - #define PREFERRED_STACK_BOUNDARY STACK_BOUNDARY - #endif - static rtx break_out_memory_refs PARAMS ((rtx)); static void emit_stack_probe PARAMS ((rtx)); --- 29,40 ---- #include "flags.h" #include "function.h" #include "expr.h" + #include "optabs.h" #include "hard-reg-set.h" #include "insn-config.h" + #include "ggc.h" #include "recog.h" static rtx break_out_memory_refs PARAMS ((rtx)); static void emit_stack_probe PARAMS ((rtx)); *************** trunc_int_for_mode (c, mode) *** 54,81 **** if (mode == BImode) return c & 1 ? STORE_FLAG_VALUE : 0; ! /* We clear out all bits that don't belong in MODE, unless they and our ! sign bit are all one. So we get either a reasonable negative ! value or a reasonable unsigned value. */ ! ! if (width < HOST_BITS_PER_WIDE_INT ! && ((c & ((HOST_WIDE_INT) (-1) << (width - 1))) ! != ((HOST_WIDE_INT) (-1) << (width - 1)))) ! c &= ((HOST_WIDE_INT) 1 << width) - 1; ! ! /* If this would be an entire word for the target, but is not for ! the host, then sign-extend on the host so that the number will look ! the same way on the host that it would on the target. ! ! For example, when building a 64 bit alpha hosted 32 bit sparc ! targeted compiler, then we want the 32 bit unsigned value -1 to be ! represented as a 64 bit value -1, and not as 0x00000000ffffffff. ! The later confuses the sparc backend. */ ! if (BITS_PER_WORD < HOST_BITS_PER_WIDE_INT ! && BITS_PER_WORD == width ! && (c & ((HOST_WIDE_INT) 1 << (width - 1)))) ! c |= ((HOST_WIDE_INT) (-1) << width); return c; } --- 52,67 ---- if (mode == BImode) return c & 1 ? STORE_FLAG_VALUE : 0; ! /* Sign-extend for the requested mode. */ ! if (width < HOST_BITS_PER_WIDE_INT) ! { ! HOST_WIDE_INT sign = 1; ! sign <<= width - 1; ! c &= (sign << 1) - 1; ! c ^= sign; ! c -= sign; ! } return c; } *************** trunc_int_for_mode (c, mode) *** 86,97 **** rtx plus_constant_wide (x, c) ! register rtx x; ! register HOST_WIDE_INT c; { ! register RTX_CODE code; ! register enum machine_mode mode; ! register rtx tem; int all_constant = 0; if (c == 0) --- 72,84 ---- rtx plus_constant_wide (x, c) ! rtx x; ! HOST_WIDE_INT c; { ! RTX_CODE code; ! rtx y; ! enum machine_mode mode; ! rtx tem; int all_constant = 0; if (c == 0) *************** plus_constant_wide (x, c) *** 101,106 **** --- 88,95 ---- code = GET_CODE (x); mode = GET_MODE (x); + y = x; + switch (code) { case CONST_INT: *************** plus_constant_wide (x, c) *** 153,159 **** Look for constant term in the sum and combine with C. For an integer constant term, we make a combined integer. For a constant term that is not an explicit integer, ! we cannot really combine, but group them together anyway. Restart or use a recursive call in case the remaining operand is something that we handle specially, such as a SYMBOL_REF. --- 142,148 ---- Look for constant term in the sum and combine with C. For an integer constant term, we make a combined integer. For a constant term that is not an explicit integer, ! we cannot really combine, but group them together anyway. Restart or use a recursive call in case the remaining operand is something that we handle specially, such as a SYMBOL_REF. *************** plus_constant_wide (x, c) *** 171,192 **** x = XEXP (x, 0); goto restart; } ! else if (CONSTANT_P (XEXP (x, 0))) { ! x = gen_rtx_PLUS (mode, ! plus_constant (XEXP (x, 0), c), ! XEXP (x, 1)); c = 0; } ! else if (CONSTANT_P (XEXP (x, 1))) { ! x = gen_rtx_PLUS (mode, ! XEXP (x, 0), ! plus_constant (XEXP (x, 1), c)); c = 0; } break; ! default: break; } --- 160,183 ---- x = XEXP (x, 0); goto restart; } ! else if (CONSTANT_P (XEXP (x, 1))) { ! x = gen_rtx_PLUS (mode, XEXP (x, 0), plus_constant (XEXP (x, 1), c)); c = 0; } ! else if (find_constant_term_loc (&y)) { ! /* We need to be careful since X may be shared and we can't ! modify it in place. */ ! rtx copy = copy_rtx (x); ! rtx *const_loc = find_constant_term_loc (©); ! ! *const_loc = plus_constant (*const_loc, c); ! x = copy; c = 0; } break; ! default: break; } *************** plus_constant_wide (x, c) *** 201,225 **** else return x; } - - /* This is the same as `plus_constant', except that it handles LO_SUM. - - This function should be used via the `plus_constant_for_output' macro. */ - - rtx - plus_constant_for_output_wide (x, c) - register rtx x; - register HOST_WIDE_INT c; - { - register enum machine_mode mode = GET_MODE (x); - - if (GET_CODE (x) == LO_SUM) - return gen_rtx_LO_SUM (mode, XEXP (x, 0), - plus_constant_for_output (XEXP (x, 1), c)); - - else - return plus_constant (x, c); - } /* If X is a sum, return a new sum like X but lacking any constant terms. Add all the removed constant terms into *CONSTPTR. --- 192,197 ---- *************** eliminate_constant_term (x, constptr) *** 231,237 **** rtx x; rtx *constptr; { ! register rtx x0, x1; rtx tem; if (GET_CODE (x) != PLUS) --- 203,209 ---- rtx x; rtx *constptr; { ! rtx x0, x1; rtx tem; if (GET_CODE (x) != PLUS) *************** rtx *** 313,326 **** expr_size (exp) tree exp; { ! tree size = size_in_bytes (TREE_TYPE (exp)); if (TREE_CODE (size) != INTEGER_CST && contains_placeholder_p (size)) size = build (WITH_RECORD_EXPR, sizetype, size, exp); ! return expand_expr (size, NULL_RTX, TYPE_MODE (sizetype), ! EXPAND_MEMORY_USE_BAD); } /* Return a copy of X in which all memory references --- 285,304 ---- expr_size (exp) tree exp; { ! tree size; ! ! if (TREE_CODE_CLASS (TREE_CODE (exp)) == 'd' ! && DECL_SIZE_UNIT (exp) != 0) ! size = DECL_SIZE_UNIT (exp); ! else ! size = size_in_bytes (TREE_TYPE (exp)); if (TREE_CODE (size) != INTEGER_CST && contains_placeholder_p (size)) size = build (WITH_RECORD_EXPR, sizetype, size, exp); ! return expand_expr (size, NULL_RTX, TYPE_MODE (sizetype), 0); ! } /* Return a copy of X in which all memory references *************** expr_size (exp) *** 341,347 **** static rtx break_out_memory_refs (x) ! register rtx x; { if (GET_CODE (x) == MEM || (CONSTANT_P (x) && CONSTANT_ADDRESS_P (x) --- 319,325 ---- static rtx break_out_memory_refs (x) ! rtx x; { if (GET_CODE (x) == MEM || (CONSTANT_P (x) && CONSTANT_ADDRESS_P (x) *************** break_out_memory_refs (x) *** 350,357 **** else if (GET_CODE (x) == PLUS || GET_CODE (x) == MINUS || GET_CODE (x) == MULT) { ! register rtx op0 = break_out_memory_refs (XEXP (x, 0)); ! register rtx op1 = break_out_memory_refs (XEXP (x, 1)); if (op0 != XEXP (x, 0) || op1 != XEXP (x, 1)) x = gen_rtx_fmt_ee (GET_CODE (x), Pmode, op0, op1); --- 328,335 ---- else if (GET_CODE (x) == PLUS || GET_CODE (x) == MINUS || GET_CODE (x) == MULT) { ! rtx op0 = break_out_memory_refs (XEXP (x, 0)); ! rtx op1 = break_out_memory_refs (XEXP (x, 1)); if (op0 != XEXP (x, 0) || op1 != XEXP (x, 1)) x = gen_rtx_fmt_ee (GET_CODE (x), Pmode, op0, op1); *************** convert_memory_address (to_mode, x) *** 385,409 **** return x; case SUBREG: ! if (GET_MODE (SUBREG_REG (x)) == to_mode) return SUBREG_REG (x); break; case LABEL_REF: ! temp = gen_rtx_LABEL_REF (to_mode, XEXP (x, 0)); ! LABEL_REF_NONLOCAL_P (temp) = LABEL_REF_NONLOCAL_P (x); ! return temp; case SYMBOL_REF: ! temp = gen_rtx_SYMBOL_REF (to_mode, XSTR (x, 0)); ! SYMBOL_REF_FLAG (temp) = SYMBOL_REF_FLAG (x); ! CONSTANT_POOL_ADDRESS_P (temp) = CONSTANT_POOL_ADDRESS_P (x); ! STRING_POOL_ADDRESS_P (temp) = STRING_POOL_ADDRESS_P (x); ! return temp; case CONST: ! return gen_rtx_CONST (to_mode, ! convert_memory_address (to_mode, XEXP (x, 0))); case PLUS: case MULT: --- 363,399 ---- return x; case SUBREG: ! if (POINTERS_EXTEND_UNSIGNED >= 0 ! && (SUBREG_PROMOTED_VAR_P (x) || REG_POINTER (SUBREG_REG (x))) ! && GET_MODE (SUBREG_REG (x)) == to_mode) return SUBREG_REG (x); break; case LABEL_REF: ! if (POINTERS_EXTEND_UNSIGNED >= 0) ! { ! temp = gen_rtx_LABEL_REF (to_mode, XEXP (x, 0)); ! LABEL_REF_NONLOCAL_P (temp) = LABEL_REF_NONLOCAL_P (x); ! return temp; ! } ! break; case SYMBOL_REF: ! if (POINTERS_EXTEND_UNSIGNED >= 0) ! { ! temp = gen_rtx_SYMBOL_REF (to_mode, XSTR (x, 0)); ! SYMBOL_REF_FLAG (temp) = SYMBOL_REF_FLAG (x); ! CONSTANT_POOL_ADDRESS_P (temp) = CONSTANT_POOL_ADDRESS_P (x); ! STRING_POOL_ADDRESS_P (temp) = STRING_POOL_ADDRESS_P (x); ! return temp; ! } ! break; case CONST: ! if (POINTERS_EXTEND_UNSIGNED >= 0) ! return gen_rtx_CONST (to_mode, ! convert_memory_address (to_mode, XEXP (x, 0))); ! break; case PLUS: case MULT: *************** convert_memory_address (to_mode, x) *** 411,425 **** permute the conversion and addition operation. We can always safely permute them if we are making the address narrower. In addition, always permute the operations if this is a constant. */ ! if (GET_MODE_SIZE (to_mode) < GET_MODE_SIZE (from_mode) ! || (GET_CODE (x) == PLUS && GET_CODE (XEXP (x, 1)) == CONST_INT ! && (INTVAL (XEXP (x, 1)) + 20000 < 40000 ! || CONSTANT_P (XEXP (x, 0))))) ! return gen_rtx_fmt_ee (GET_CODE (x), to_mode, convert_memory_address (to_mode, XEXP (x, 0)), convert_memory_address (to_mode, XEXP (x, 1))); break; ! default: break; } --- 401,416 ---- permute the conversion and addition operation. We can always safely permute them if we are making the address narrower. In addition, always permute the operations if this is a constant. */ ! if (POINTERS_EXTEND_UNSIGNED >= 0 ! && (GET_MODE_SIZE (to_mode) < GET_MODE_SIZE (from_mode) ! || (GET_CODE (x) == PLUS && GET_CODE (XEXP (x, 1)) == CONST_INT ! && (INTVAL (XEXP (x, 1)) + 20000 < 40000 ! || CONSTANT_P (XEXP (x, 0)))))) ! return gen_rtx_fmt_ee (GET_CODE (x), to_mode, convert_memory_address (to_mode, XEXP (x, 0)), convert_memory_address (to_mode, XEXP (x, 1))); break; ! default: break; } *************** convert_memory_address (to_mode, x) *** 444,450 **** rtx copy_all_regs (x) ! register rtx x; { if (GET_CODE (x) == REG) { --- 435,441 ---- rtx copy_all_regs (x) ! rtx x; { if (GET_CODE (x) == REG) { *************** copy_all_regs (x) *** 460,467 **** else if (GET_CODE (x) == PLUS || GET_CODE (x) == MINUS || GET_CODE (x) == MULT) { ! register rtx op0 = copy_all_regs (XEXP (x, 0)); ! register rtx op1 = copy_all_regs (XEXP (x, 1)); if (op0 != XEXP (x, 0) || op1 != XEXP (x, 1)) x = gen_rtx_fmt_ee (GET_CODE (x), Pmode, op0, op1); } --- 451,458 ---- else if (GET_CODE (x) == PLUS || GET_CODE (x) == MINUS || GET_CODE (x) == MULT) { ! rtx op0 = copy_all_regs (XEXP (x, 0)); ! rtx op1 = copy_all_regs (XEXP (x, 1)); if (op0 != XEXP (x, 0) || op1 != XEXP (x, 1)) x = gen_rtx_fmt_ee (GET_CODE (x), Pmode, op0, op1); } *************** copy_all_regs (x) *** 475,489 **** rtx memory_address (mode, x) enum machine_mode mode; ! register rtx x; { ! register rtx oldx = x; if (GET_CODE (x) == ADDRESSOF) return x; #ifdef POINTERS_EXTEND_UNSIGNED ! if (GET_MODE (x) == ptr_mode) x = convert_memory_address (Pmode, x); #endif --- 466,480 ---- rtx memory_address (mode, x) enum machine_mode mode; ! rtx x; { ! rtx oldx = x; if (GET_CODE (x) == ADDRESSOF) return x; #ifdef POINTERS_EXTEND_UNSIGNED ! if (GET_MODE (x) != Pmode) x = convert_memory_address (Pmode, x); #endif *************** validize_mem (ref) *** 625,634 **** { if (GET_CODE (ref) != MEM) return ref; ! if (memory_address_p (GET_MODE (ref), XEXP (ref, 0))) return ref; /* Don't alter REF itself, since that is probably a stack slot. */ ! return change_address (ref, GET_MODE (ref), XEXP (ref, 0)); } /* Given REF, either a MEM or a REG, and T, either the type of X or --- 616,627 ---- { if (GET_CODE (ref) != MEM) return ref; ! if (! (flag_force_addr && CONSTANT_ADDRESS_P (XEXP (ref, 0))) ! && memory_address_p (GET_MODE (ref), XEXP (ref, 0))) return ref; + /* Don't alter REF itself, since that is probably a stack slot. */ ! return replace_equiv_address (ref, XEXP (ref, 0)); } /* Given REF, either a MEM or a REG, and T, either the type of X or *************** maybe_set_unchanging (ref, t) *** 651,722 **** || TREE_CODE_CLASS (TREE_CODE (t)) == 'c') RTX_UNCHANGING_P (ref) = 1; } - - /* Given REF, a MEM, and T, either the type of X or the expression - corresponding to REF, set the memory attributes. OBJECTP is nonzero - if we are making a new object of this type. */ - - void - set_mem_attributes (ref, t, objectp) - rtx ref; - tree t; - int objectp; - { - tree type; - - /* It can happen that type_for_mode was given a mode for which there - is no language-level type. In which case it returns NULL, which - we can see here. */ - if (t == NULL_TREE) - return; - - type = TYPE_P (t) ? t : TREE_TYPE (t); - - /* Get the alias set from the expression or type (perhaps using a - front-end routine) and then copy bits from the type. */ - - /* It is incorrect to set RTX_UNCHANGING_P from TREE_READONLY (type) - here, because, in C and C++, the fact that a location is accessed - through a const expression does not mean that the value there can - never change. */ - MEM_ALIAS_SET (ref) = get_alias_set (t); - MEM_VOLATILE_P (ref) = TYPE_VOLATILE (type); - MEM_IN_STRUCT_P (ref) = AGGREGATE_TYPE_P (type); - - /* If we are making an object of this type, we know that it is a scalar if - the type is not an aggregate. */ - if (objectp && ! AGGREGATE_TYPE_P (type)) - MEM_SCALAR_P (ref) = 1; - - /* If T is a type, this is all we can do. Otherwise, we may be able - to deduce some more information about the expression. */ - if (TYPE_P (t)) - return; - - maybe_set_unchanging (ref, t); - if (TREE_THIS_VOLATILE (t)) - MEM_VOLATILE_P (ref) = 1; - - /* Now see if we can say more about whether it's an aggregate or - scalar. If we already know it's an aggregate, don't bother. */ - if (MEM_IN_STRUCT_P (ref)) - return; - - /* Now remove any NOPs: they don't change what the underlying object is. - Likewise for SAVE_EXPR. */ - while (TREE_CODE (t) == NOP_EXPR || TREE_CODE (t) == CONVERT_EXPR - || TREE_CODE (t) == NON_LVALUE_EXPR || TREE_CODE (t) == SAVE_EXPR) - t = TREE_OPERAND (t, 0); - - /* Since we already know the type isn't an aggregate, if this is a decl, - it must be a scalar. Or if it is a reference into an aggregate, - this is part of an aggregate. Otherwise we don't know. */ - if (DECL_P (t)) - MEM_SCALAR_P (ref) = 1; - else if (TREE_CODE (t) == COMPONENT_REF || TREE_CODE (t) == ARRAY_REF - || TREE_CODE (t) == BIT_FIELD_REF) - MEM_IN_STRUCT_P (ref) = 1; - } /* Return a modified copy of X with its memory address copied into a temporary register to protect it from side effects. --- 644,649 ---- *************** rtx *** 727,747 **** stabilize (x) rtx x; { - register rtx addr; ! if (GET_CODE (x) != MEM) return x; ! addr = XEXP (x, 0); ! if (rtx_unstable_p (addr)) ! { ! rtx temp = force_reg (Pmode, copy_all_regs (addr)); ! rtx mem = gen_rtx_MEM (GET_MODE (x), temp); ! ! MEM_COPY_ATTRIBUTES (mem, x); ! return mem; ! } ! return x; } /* Copy the value or contents of X to a new temp reg and return that reg. */ --- 654,666 ---- stabilize (x) rtx x; { ! if (GET_CODE (x) != MEM ! || ! rtx_unstable_p (XEXP (x, 0))) return x; ! return ! replace_equiv_address (x, force_reg (Pmode, copy_all_regs (XEXP (x, 0)))); } /* Copy the value or contents of X to a new temp reg and return that reg. */ *************** rtx *** 750,762 **** copy_to_reg (x) rtx x; { ! register rtx temp = gen_reg_rtx (GET_MODE (x)); ! /* If not an operand, must be an address with PLUS and MULT so ! do the computation. */ if (! general_operand (x, VOIDmode)) x = force_operand (x, temp); ! if (x != temp) emit_move_insn (temp, x); --- 669,681 ---- copy_to_reg (x) rtx x; { ! rtx temp = gen_reg_rtx (GET_MODE (x)); ! /* If not an operand, must be an address with PLUS and MULT so ! do the computation. */ if (! general_operand (x, VOIDmode)) x = force_operand (x, temp); ! if (x != temp) emit_move_insn (temp, x); *************** copy_to_mode_reg (mode, x) *** 781,790 **** enum machine_mode mode; rtx x; { ! register rtx temp = gen_reg_rtx (mode); ! /* If not an operand, must be an address with PLUS and MULT so ! do the computation. */ if (! general_operand (x, VOIDmode)) x = force_operand (x, temp); --- 700,709 ---- enum machine_mode mode; rtx x; { ! rtx temp = gen_reg_rtx (mode); ! /* If not an operand, must be an address with PLUS and MULT so ! do the computation. */ if (! general_operand (x, VOIDmode)) x = force_operand (x, temp); *************** force_reg (mode, x) *** 808,824 **** enum machine_mode mode; rtx x; { ! register rtx temp, insn, set; if (GET_CODE (x) == REG) return x; ! ! temp = gen_reg_rtx (mode); ! ! if (! general_operand (x, mode)) ! x = force_operand (x, NULL_RTX); ! ! insn = emit_move_insn (temp, x); /* Let optimizers know that TEMP's value never changes and that X can be substituted for it. Don't get confused --- 727,754 ---- enum machine_mode mode; rtx x; { ! rtx temp, insn, set; if (GET_CODE (x) == REG) return x; ! ! if (general_operand (x, mode)) ! { ! temp = gen_reg_rtx (mode); ! insn = emit_move_insn (temp, x); ! } ! else ! { ! temp = force_operand (x, NULL_RTX); ! if (GET_CODE (temp) == REG) ! insn = get_last_insn (); ! else ! { ! rtx temp2 = gen_reg_rtx (mode); ! insn = emit_move_insn (temp2, temp); ! temp = temp2; ! } ! } /* Let optimizers know that TEMP's value never changes and that X can be substituted for it. Don't get confused *************** force_reg (mode, x) *** 826,839 **** if (CONSTANT_P (x) && (set = single_set (insn)) != 0 && SET_DEST (set) == temp) ! { ! rtx note = find_reg_note (insn, REG_EQUAL, NULL_RTX); - if (note) - XEXP (note, 0) = x; - else - REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_EQUAL, x, REG_NOTES (insn)); - } return temp; } --- 756,763 ---- if (CONSTANT_P (x) && (set = single_set (insn)) != 0 && SET_DEST (set) == temp) ! set_unique_reg_note (insn, REG_EQUAL, x); return temp; } *************** rtx *** 844,850 **** force_not_mem (x) rtx x; { ! register rtx temp; if (GET_CODE (x) != MEM || GET_MODE (x) == BLKmode) return x; --- 768,774 ---- force_not_mem (x) rtx x; { ! rtx temp; if (GET_CODE (x) != MEM || GET_MODE (x) == BLKmode) return x; *************** copy_to_suggested_reg (x, target, mode) *** 863,869 **** rtx x, target; enum machine_mode mode; { ! register rtx temp; if (target && GET_CODE (target) == REG) temp = target; --- 787,793 ---- rtx x, target; enum machine_mode mode; { ! rtx temp; if (target && GET_CODE (target) == REG) temp = target; *************** promote_mode (type, mode, punsignedp, fo *** 911,917 **** unsignedp = POINTERS_EXTEND_UNSIGNED; break; #endif ! default: break; } --- 835,841 ---- unsignedp = POINTERS_EXTEND_UNSIGNED; break; #endif ! default: break; } *************** rtx *** 989,995 **** round_push (size) rtx size; { - #ifdef PREFERRED_STACK_BOUNDARY int align = PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT; if (align == 1) return size; --- 913,918 ---- *************** round_push (size) *** 1010,1016 **** NULL_RTX, 1); size = expand_mult (Pmode, size, GEN_INT (align), NULL_RTX, 1); } - #endif /* PREFERRED_STACK_BOUNDARY */ return size; } --- 933,938 ---- *************** emit_stack_save (save_level, psave, afte *** 1100,1108 **** } /* Restore the stack pointer for the purpose in SAVE_LEVEL. SA is the save ! area made by emit_stack_save. If it is zero, we have nothing to do. ! Put any emitted insns after insn AFTER, if nonzero, otherwise at current position. */ void --- 1022,1030 ---- } /* Restore the stack pointer for the purpose in SAVE_LEVEL. SA is the save ! area made by emit_stack_save. If it is zero, we have nothing to do. ! Put any emitted insns after insn AFTER, if nonzero, otherwise at current position. */ void *************** optimize_save_area_alloca (insns) *** 1186,1192 **** /* If we do not see the note in a pattern matching these precise characteristics, we did something ! entirely wrong in allocate_dynamic_stack_space. Note, one way this could happen is if SETJMP_VIA_SAVE_AREA was defined on a machine where stacks grow towards higher --- 1108,1114 ---- /* If we do not see the note in a pattern matching these precise characteristics, we did something ! entirely wrong in allocate_dynamic_stack_space. Note, one way this could happen is if SETJMP_VIA_SAVE_AREA was defined on a machine where stacks grow towards higher *************** optimize_save_area_alloca (insns) *** 1223,1229 **** break; if (srch == NULL_RTX) ! abort(); XEXP (srch, 1) = XEXP (note, 1); } --- 1145,1151 ---- break; if (srch == NULL_RTX) ! abort (); XEXP (srch, 1) = XEXP (note, 1); } *************** allocate_dynamic_stack_space (size, targ *** 1273,1285 **** /* We can't attempt to minimize alignment necessary, because we don't know the final value of preferred_stack_boundary yet while executing this code. */ - #ifdef PREFERRED_STACK_BOUNDARY cfun->preferred_stack_boundary = PREFERRED_STACK_BOUNDARY; - #endif /* We will need to ensure that the address we return is aligned to BIGGEST_ALIGNMENT. If STACK_DYNAMIC_OFFSET is defined, we don't ! always know its final value at this point in the compilation (it might depend on the size of the outgoing parameter lists, for example), so we must align the value to be returned in that case. (Note that STACK_DYNAMIC_OFFSET will have a default non-zero value if --- 1195,1205 ---- /* We can't attempt to minimize alignment necessary, because we don't know the final value of preferred_stack_boundary yet while executing this code. */ cfun->preferred_stack_boundary = PREFERRED_STACK_BOUNDARY; /* We will need to ensure that the address we return is aligned to BIGGEST_ALIGNMENT. If STACK_DYNAMIC_OFFSET is defined, we don't ! always know its final value at this point in the compilation (it might depend on the size of the outgoing parameter lists, for example), so we must align the value to be returned in that case. (Note that STACK_DYNAMIC_OFFSET will have a default non-zero value if *************** allocate_dynamic_stack_space (size, targ *** 1290,1296 **** If we have to align, we must leave space in SIZE for the hole that might result from the alignment operation. */ ! #if defined (STACK_DYNAMIC_OFFSET) || defined (STACK_POINTER_OFFSET) || ! defined (PREFERRED_STACK_BOUNDARY) #define MUST_ALIGN 1 #else #define MUST_ALIGN (PREFERRED_STACK_BOUNDARY < BIGGEST_ALIGNMENT) --- 1210,1216 ---- If we have to align, we must leave space in SIZE for the hole that might result from the alignment operation. */ ! #if defined (STACK_DYNAMIC_OFFSET) || defined (STACK_POINTER_OFFSET) #define MUST_ALIGN 1 #else #define MUST_ALIGN (PREFERRED_STACK_BOUNDARY < BIGGEST_ALIGNMENT) *************** allocate_dynamic_stack_space (size, targ *** 1298,1304 **** if (MUST_ALIGN) size ! = force_operand (plus_constant (size, BIGGEST_ALIGNMENT / BITS_PER_UNIT - 1), NULL_RTX); --- 1218,1224 ---- if (MUST_ALIGN) size ! = force_operand (plus_constant (size, BIGGEST_ALIGNMENT / BITS_PER_UNIT - 1), NULL_RTX); *************** allocate_dynamic_stack_space (size, targ *** 1320,1330 **** /* See optimize_save_area_alloca to understand what is being set up here. */ ! #if !defined(PREFERRED_STACK_BOUNDARY) || !defined(MUST_ALIGN) || (PREFERRED_STACK_BOUNDARY != BIGGEST_ALIGNMENT) ! /* If anyone creates a target with these characteristics, let them ! know that our optimization cannot work correctly in such a case. */ ! abort (); ! #endif if (GET_CODE (size) == CONST_INT) { --- 1240,1249 ---- /* See optimize_save_area_alloca to understand what is being set up here. */ ! /* ??? Code below assumes that the save area needs maximal ! alignment. This constraint may be too strong. */ ! if (PREFERRED_STACK_BOUNDARY != BIGGEST_ALIGNMENT) ! abort (); if (GET_CODE (size) == CONST_INT) { *************** allocate_dynamic_stack_space (size, targ *** 1370,1392 **** way of knowing which systems have this problem. So we avoid even momentarily mis-aligning the stack. */ - #ifdef PREFERRED_STACK_BOUNDARY /* If we added a variable amount to SIZE, we can no longer assume it is aligned. */ #if !defined (SETJMP_VIA_SAVE_AREA) if (MUST_ALIGN || known_align % PREFERRED_STACK_BOUNDARY != 0) #endif size = round_push (size); - #endif do_pending_stack_adjust (); /* We ought to be called always on the toplevel and stack ought to be aligned ! propertly. */ ! #ifdef PREFERRED_STACK_BOUNDARY if (stack_pointer_delta % (PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT)) abort (); - #endif /* If needed, check that we have the required amount of stack. Take into account what has already been checked. */ --- 1289,1307 ---- way of knowing which systems have this problem. So we avoid even momentarily mis-aligning the stack. */ /* If we added a variable amount to SIZE, we can no longer assume it is aligned. */ #if !defined (SETJMP_VIA_SAVE_AREA) if (MUST_ALIGN || known_align % PREFERRED_STACK_BOUNDARY != 0) #endif size = round_push (size); do_pending_stack_adjust (); /* We ought to be called always on the toplevel and stack ought to be aligned ! properly. */ if (stack_pointer_delta % (PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT)) abort (); /* If needed, check that we have the required amount of stack. Take into account what has already been checked. */ *************** allocate_dynamic_stack_space (size, targ *** 1410,1425 **** enum machine_mode mode = STACK_SIZE_MODE; insn_operand_predicate_fn pred; ! pred = insn_data[(int) CODE_FOR_allocate_stack].operand[0].predicate; ! if (pred && ! ((*pred) (target, Pmode))) ! #ifdef POINTERS_EXTEND_UNSIGNED ! target = convert_memory_address (Pmode, target); ! #else ! target = copy_to_mode_reg (Pmode, target); ! #endif ! if (mode == VOIDmode) ! mode = Pmode; pred = insn_data[(int) CODE_FOR_allocate_stack].operand[1].predicate; if (pred && ! ((*pred) (size, mode))) --- 1325,1336 ---- enum machine_mode mode = STACK_SIZE_MODE; insn_operand_predicate_fn pred; ! /* We don't have to check against the predicate for operand 0 since ! TARGET is known to be a pseudo of the proper mode, which must ! be valid for the operand. For operand 1, convert to the ! proper mode and validate. */ if (mode == VOIDmode) ! mode = insn_data[(int) CODE_FOR_allocate_stack].operand[1].mode; pred = insn_data[(int) CODE_FOR_allocate_stack].operand[1].predicate; if (pred && ! ((*pred) (size, mode))) *************** allocate_dynamic_stack_space (size, targ *** 1440,1455 **** rtx available; rtx space_available = gen_label_rtx (); #ifdef STACK_GROWS_DOWNWARD ! available = expand_binop (Pmode, sub_optab, stack_pointer_rtx, stack_limit_rtx, NULL_RTX, 1, OPTAB_WIDEN); #else ! available = expand_binop (Pmode, sub_optab, stack_limit_rtx, stack_pointer_rtx, NULL_RTX, 1, OPTAB_WIDEN); #endif emit_cmp_and_jump_insns (available, size, GEU, NULL_RTX, Pmode, 1, ! 0, space_available); #ifdef HAVE_trap if (HAVE_trap) emit_insn (gen_trap ()); --- 1351,1366 ---- rtx available; rtx space_available = gen_label_rtx (); #ifdef STACK_GROWS_DOWNWARD ! available = expand_binop (Pmode, sub_optab, stack_pointer_rtx, stack_limit_rtx, NULL_RTX, 1, OPTAB_WIDEN); #else ! available = expand_binop (Pmode, sub_optab, stack_limit_rtx, stack_pointer_rtx, NULL_RTX, 1, OPTAB_WIDEN); #endif emit_cmp_and_jump_insns (available, size, GEU, NULL_RTX, Pmode, 1, ! space_available); #ifdef HAVE_trap if (HAVE_trap) emit_insn (gen_trap ()); *************** allocate_dynamic_stack_space (size, targ *** 1473,1479 **** #endif /* SETJMP_VIA_SAVE_AREA */ #ifdef STACK_GROWS_DOWNWARD ! emit_move_insn (target, virtual_stack_dynamic_rtx); #endif } --- 1384,1390 ---- #endif /* SETJMP_VIA_SAVE_AREA */ #ifdef STACK_GROWS_DOWNWARD ! emit_move_insn (target, virtual_stack_dynamic_rtx); #endif } *************** allocate_dynamic_stack_space (size, targ *** 1492,1498 **** GEN_INT (BIGGEST_ALIGNMENT / BITS_PER_UNIT), NULL_RTX, 1); } ! /* Some systems require a particular insn to refer to the stack to make the pages exist. */ #ifdef HAVE_probe --- 1403,1409 ---- GEN_INT (BIGGEST_ALIGNMENT / BITS_PER_UNIT), NULL_RTX, 1); } ! /* Some systems require a particular insn to refer to the stack to make the pages exist. */ #ifdef HAVE_probe *************** allocate_dynamic_stack_space (size, targ *** 1507,1513 **** return target; } ! /* A front end may want to override GCC's stack checking by providing a run-time routine to call to check the stack, so provide a mechanism for calling that routine. */ --- 1418,1424 ---- return target; } ! /* A front end may want to override GCC's stack checking by providing a run-time routine to call to check the stack, so provide a mechanism for calling that routine. */ *************** set_stack_check_libfunc (libfunc) *** 1518,1523 **** --- 1429,1435 ---- rtx libfunc; { stack_check_libfunc = libfunc; + ggc_add_rtx_root (&stack_check_libfunc, 1); } /* Emit one stack probe at ADDRESS, an address within the stack. */ *************** emit_stack_probe (address) *** 1536,1542 **** emit_move_insn (memref, const0_rtx); } ! /* Probe a range of stack addresses from FIRST to FIRST+SIZE, inclusive. FIRST is a constant and size is a Pmode RTX. These are offsets from the current stack pointer. STACK_GROWS_DOWNWARD says whether to add or subtract from the stack. If SIZE is constant, this is done --- 1448,1454 ---- emit_move_insn (memref, const0_rtx); } ! /* Probe a range of stack addresses from FIRST to FIRST+SIZE, inclusive. FIRST is a constant and size is a Pmode RTX. These are offsets from the current stack pointer. STACK_GROWS_DOWNWARD says whether to add or subtract from the stack. If SIZE is constant, this is done *************** probe_stack_range (first, size) *** 1553,1559 **** HOST_WIDE_INT first; rtx size; { ! /* First see if the front end has set up a function for us to call to check the stack. */ if (stack_check_libfunc != 0) { --- 1465,1475 ---- HOST_WIDE_INT first; rtx size; { ! /* First ensure SIZE is Pmode. */ ! if (GET_MODE (size) != VOIDmode && GET_MODE (size) != Pmode) ! size = convert_to_mode (Pmode, size, 1); ! ! /* Next see if the front end has set up a function for us to call to check the stack. */ if (stack_check_libfunc != 0) { *************** probe_stack_range (first, size) *** 1567,1573 **** addr = convert_memory_address (ptr_mode, addr); #endif ! emit_library_call (stack_check_libfunc, 0, VOIDmode, 1, addr, ptr_mode); } --- 1483,1489 ---- addr = convert_memory_address (ptr_mode, addr); #endif ! emit_library_call (stack_check_libfunc, LCT_NORMAL, VOIDmode, 1, addr, ptr_mode); } *************** probe_stack_range (first, size) *** 1637,1649 **** || REGNO (test_addr) < FIRST_PSEUDO_REGISTER) test_addr = force_reg (Pmode, test_addr); ! emit_note (NULL_PTR, NOTE_INSN_LOOP_BEG); emit_jump (test_lab); emit_label (loop_lab); emit_stack_probe (test_addr); ! emit_note (NULL_PTR, NOTE_INSN_LOOP_CONT); #ifdef STACK_GROWS_DOWNWARD #define CMP_OPCODE GTU --- 1553,1565 ---- || REGNO (test_addr) < FIRST_PSEUDO_REGISTER) test_addr = force_reg (Pmode, test_addr); ! emit_note (NULL, NOTE_INSN_LOOP_BEG); emit_jump (test_lab); emit_label (loop_lab); emit_stack_probe (test_addr); ! emit_note (NULL, NOTE_INSN_LOOP_CONT); #ifdef STACK_GROWS_DOWNWARD #define CMP_OPCODE GTU *************** probe_stack_range (first, size) *** 1660,1668 **** emit_label (test_lab); emit_cmp_and_jump_insns (test_addr, last_addr, CMP_OPCODE, ! NULL_RTX, Pmode, 1, 0, loop_lab); emit_jump (end_lab); ! emit_note (NULL_PTR, NOTE_INSN_LOOP_END); emit_label (end_lab); emit_stack_probe (last_addr); --- 1576,1584 ---- emit_label (test_lab); emit_cmp_and_jump_insns (test_addr, last_addr, CMP_OPCODE, ! NULL_RTX, Pmode, 1, loop_lab); emit_jump (end_lab); ! emit_note (NULL, NOTE_INSN_LOOP_END); emit_label (end_lab); emit_stack_probe (last_addr); *************** probe_stack_range (first, size) *** 1676,1682 **** otherwise 0. OUTGOING is 1 if on a machine with register windows this function should return the register in which the function will put its result ! and 0 otherwise. */ rtx hard_function_value (valtype, func, outgoing) --- 1592,1598 ---- otherwise 0. OUTGOING is 1 if on a machine with register windows this function should return the register in which the function will put its result ! and 0 otherwise. */ rtx hard_function_value (valtype, func, outgoing) *************** hard_function_value (valtype, func, outg *** 1699,1704 **** --- 1615,1624 ---- unsigned HOST_WIDE_INT bytes = int_size_in_bytes (valtype); enum machine_mode tmpmode; + /* int_size_in_bytes can return -1. We don't need a check here + since the value of bytes will be large enough that no mode + will match and we will abort later in this function. */ + for (tmpmode = GET_CLASS_NARROWEST_MODE (MODE_INT); tmpmode != VOIDmode; tmpmode = GET_MODE_WIDER_MODE (tmpmode)) *************** hard_function_value (valtype, func, outg *** 1713,1719 **** abort (); PUT_MODE (val, tmpmode); ! } return val; } --- 1633,1639 ---- abort (); PUT_MODE (val, tmpmode); ! } return val; } diff -Nrc3pad gcc-3.0.4/gcc/expmed.c gcc-3.1/gcc/expmed.c *** gcc-3.0.4/gcc/expmed.c Tue Jan 22 19:05:31 2002 --- gcc-3.1/gcc/expmed.c Wed Mar 13 02:05:27 2002 *************** *** 1,24 **** /* Medium-level subroutines: convert bit-field store and extract and shifts, multiplies and divides to rtl instructions. Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" --- 1,24 ---- /* Medium-level subroutines: convert bit-field store and extract and shifts, multiplies and divides to rtl instructions. Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" *************** Boston, MA 02111-1307, USA. */ *** 30,62 **** #include "flags.h" #include "insn-config.h" #include "expr.h" #include "real.h" #include "recog.h" static void store_fixed_bit_field PARAMS ((rtx, unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT, ! unsigned HOST_WIDE_INT, rtx, ! unsigned int)); static void store_split_bit_field PARAMS ((rtx, unsigned HOST_WIDE_INT, ! unsigned HOST_WIDE_INT, rtx, ! unsigned int)); static rtx extract_fixed_bit_field PARAMS ((enum machine_mode, rtx, unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT, ! rtx, int, unsigned int)); static rtx mask_rtx PARAMS ((enum machine_mode, int, int, int)); static rtx lshift_value PARAMS ((enum machine_mode, rtx, int, int)); static rtx extract_split_bit_field PARAMS ((rtx, unsigned HOST_WIDE_INT, ! unsigned HOST_WIDE_INT, int, ! unsigned int)); static void do_cmp_and_jump PARAMS ((rtx, rtx, enum rtx_code, enum machine_mode, rtx)); /* Non-zero means divides or modulus operations are relatively cheap for ! powers of two, so don't use branches; emit the operation instead. Usually, this will mean that the MD file will emit non-branch sequences. */ --- 30,60 ---- #include "flags.h" #include "insn-config.h" #include "expr.h" + #include "optabs.h" #include "real.h" #include "recog.h" static void store_fixed_bit_field PARAMS ((rtx, unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT, ! unsigned HOST_WIDE_INT, rtx)); static void store_split_bit_field PARAMS ((rtx, unsigned HOST_WIDE_INT, ! unsigned HOST_WIDE_INT, rtx)); static rtx extract_fixed_bit_field PARAMS ((enum machine_mode, rtx, unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT, ! rtx, int)); static rtx mask_rtx PARAMS ((enum machine_mode, int, int, int)); static rtx lshift_value PARAMS ((enum machine_mode, rtx, int, int)); static rtx extract_split_bit_field PARAMS ((rtx, unsigned HOST_WIDE_INT, ! unsigned HOST_WIDE_INT, int)); static void do_cmp_and_jump PARAMS ((rtx, rtx, enum rtx_code, enum machine_mode, rtx)); /* Non-zero means divides or modulus operations are relatively cheap for ! powers of two, so don't use branches; emit the operation instead. Usually, this will mean that the MD file will emit non-branch sequences. */ *************** static int sdiv_pow2_cheap, smod_pow2_ch *** 74,79 **** --- 72,94 ---- #define MAX_BITS_PER_WORD BITS_PER_WORD #endif + /* Reduce conditional compilation elsewhere. */ + #ifndef HAVE_insv + #define HAVE_insv 0 + #define CODE_FOR_insv CODE_FOR_nothing + #define gen_insv(a,b,c,d) NULL_RTX + #endif + #ifndef HAVE_extv + #define HAVE_extv 0 + #define CODE_FOR_extv CODE_FOR_nothing + #define gen_extv(a,b,c,d) NULL_RTX + #endif + #ifndef HAVE_extzv + #define HAVE_extzv 0 + #define CODE_FOR_extzv CODE_FOR_nothing + #define gen_extzv(a,b,c,d) NULL_RTX + #endif + /* Cost of various pieces of RTL. Note that some of these are indexed by shift count and some by mode. */ static int add_cost, negate_cost, zero_cost; *************** negate_rtx (mode, x) *** 202,207 **** --- 217,274 ---- return result; } + + /* Report on the availability of insv/extv/extzv and the desired mode + of each of their operands. Returns MAX_MACHINE_MODE if HAVE_foo + is false; else the mode of the specified operand. If OPNO is -1, + all the caller cares about is whether the insn is available. */ + enum machine_mode + mode_for_extraction (pattern, opno) + enum extraction_pattern pattern; + int opno; + { + const struct insn_data *data; + + switch (pattern) + { + case EP_insv: + if (HAVE_insv) + { + data = &insn_data[CODE_FOR_insv]; + break; + } + return MAX_MACHINE_MODE; + + case EP_extv: + if (HAVE_extv) + { + data = &insn_data[CODE_FOR_extv]; + break; + } + return MAX_MACHINE_MODE; + + case EP_extzv: + if (HAVE_extzv) + { + data = &insn_data[CODE_FOR_extzv]; + break; + } + return MAX_MACHINE_MODE; + + default: + abort (); + } + + if (opno == -1) + return VOIDmode; + + /* Everyone who uses this function used to follow it with + if (result == VOIDmode) result = word_mode; */ + if (data->operand[opno].mode == VOIDmode) + return word_mode; + return data->operand[opno].mode; + } + /* Generate code to store value from rtx VALUE into a bit-field within structure STR_RTX *************** negate_rtx (mode, x) *** 219,252 **** else, we use the mode of operand 3. */ rtx ! store_bit_field (str_rtx, bitsize, bitnum, fieldmode, value, align, total_size) rtx str_rtx; unsigned HOST_WIDE_INT bitsize; unsigned HOST_WIDE_INT bitnum; enum machine_mode fieldmode; rtx value; - unsigned int align; HOST_WIDE_INT total_size; { unsigned int unit = (GET_CODE (str_rtx) == MEM) ? BITS_PER_UNIT : BITS_PER_WORD; unsigned HOST_WIDE_INT offset = bitnum / unit; unsigned HOST_WIDE_INT bitpos = bitnum % unit; ! register rtx op0 = str_rtx; ! #ifdef HAVE_insv ! unsigned HOST_WIDE_INT insv_bitsize; ! enum machine_mode op_mode; ! ! op_mode = insn_data[(int) CODE_FOR_insv].operand[3].mode; ! if (op_mode == VOIDmode) ! op_mode = word_mode; ! insv_bitsize = GET_MODE_BITSIZE (op_mode); ! #endif ! /* It is wrong to have align==0, since every object is aligned at ! least at a bit boundary. This usually means a bug elsewhere. */ ! if (align == 0) ! abort (); /* Discount the part of the structure before the desired byte. We need to know how many bytes are safe to reference after it. */ --- 286,307 ---- else, we use the mode of operand 3. */ rtx ! store_bit_field (str_rtx, bitsize, bitnum, fieldmode, value, total_size) rtx str_rtx; unsigned HOST_WIDE_INT bitsize; unsigned HOST_WIDE_INT bitnum; enum machine_mode fieldmode; rtx value; HOST_WIDE_INT total_size; { unsigned int unit = (GET_CODE (str_rtx) == MEM) ? BITS_PER_UNIT : BITS_PER_WORD; unsigned HOST_WIDE_INT offset = bitnum / unit; unsigned HOST_WIDE_INT bitpos = bitnum % unit; ! rtx op0 = str_rtx; ! int byte_offset; ! enum machine_mode op_mode = mode_for_extraction (EP_insv, 3); /* Discount the part of the structure before the desired byte. We need to know how many bytes are safe to reference after it. */ *************** store_bit_field (str_rtx, bitsize, bitnu *** 261,284 **** meaningful at a much higher level; when structures are copied between memory and regs, the higher-numbered regs always get higher addresses. */ ! offset += SUBREG_WORD (op0); /* We used to adjust BITPOS here, but now we do the whole adjustment right after the loop. */ op0 = SUBREG_REG (op0); } - /* If OP0 is a register, BITPOS must count within a word. - But as we have it, it counts within whatever size OP0 now has. - On a bigendian machine, these are not the same, so convert. */ - if (BYTES_BIG_ENDIAN - && GET_CODE (op0) != MEM - && unit > GET_MODE_BITSIZE (GET_MODE (op0))) - bitpos += unit - GET_MODE_BITSIZE (GET_MODE (op0)); - value = protect_from_queue (value, 0); if (flag_force_mem) ! value = force_not_mem (value); /* If the target is a register, overwriting the entire object, or storing a full-word or multi-word field can be done with just a SUBREG. --- 316,336 ---- meaningful at a much higher level; when structures are copied between memory and regs, the higher-numbered regs always get higher addresses. */ ! offset += (SUBREG_BYTE (op0) / UNITS_PER_WORD); /* We used to adjust BITPOS here, but now we do the whole adjustment right after the loop. */ op0 = SUBREG_REG (op0); } value = protect_from_queue (value, 0); if (flag_force_mem) ! { ! int old_generating_concat_p = generating_concat_p; ! generating_concat_p = 0; ! value = force_not_mem (value); ! generating_concat_p = old_generating_concat_p; ! } /* If the target is a register, overwriting the entire object, or storing a full-word or multi-word field can be done with just a SUBREG. *************** store_bit_field (str_rtx, bitsize, bitnu *** 286,300 **** If the target is memory, storing any naturally aligned field can be done with a simple store. For targets that support fast unaligned memory, any naturally sized, unit aligned field can be done directly. */ ! ! if (bitsize == GET_MODE_BITSIZE (fieldmode) && (GET_CODE (op0) != MEM ! ? (GET_MODE_SIZE (fieldmode) >= UNITS_PER_WORD || GET_MODE_SIZE (GET_MODE (op0)) == GET_MODE_SIZE (fieldmode)) ! : (! SLOW_UNALIGNED_ACCESS (fieldmode, align) || (offset * BITS_PER_UNIT % bitsize == 0 ! && align % GET_MODE_BITSIZE (fieldmode) == 0))) ! && (BYTES_BIG_ENDIAN ? bitpos + bitsize == unit : bitpos == 0)) { if (GET_MODE (op0) != fieldmode) { --- 338,356 ---- If the target is memory, storing any naturally aligned field can be done with a simple store. For targets that support fast unaligned memory, any naturally sized, unit aligned field can be done directly. */ ! ! byte_offset = (bitnum % BITS_PER_WORD) / BITS_PER_UNIT ! + (offset * UNITS_PER_WORD); ! ! if (bitpos == 0 ! && bitsize == GET_MODE_BITSIZE (fieldmode) && (GET_CODE (op0) != MEM ! ? ((GET_MODE_SIZE (fieldmode) >= UNITS_PER_WORD || GET_MODE_SIZE (GET_MODE (op0)) == GET_MODE_SIZE (fieldmode)) ! && byte_offset % GET_MODE_SIZE (fieldmode) == 0) ! : (! SLOW_UNALIGNED_ACCESS (fieldmode, MEM_ALIGN (op0)) || (offset * BITS_PER_UNIT % bitsize == 0 ! && MEM_ALIGN (op0) % GET_MODE_BITSIZE (fieldmode) == 0)))) { if (GET_MODE (op0) != fieldmode) { *************** store_bit_field (str_rtx, bitsize, bitnu *** 311,320 **** abort (); } if (GET_CODE (op0) == REG) ! op0 = gen_rtx_SUBREG (fieldmode, op0, offset); else ! op0 = change_address (op0, fieldmode, ! plus_constant (XEXP (op0, 0), offset)); } emit_move_insn (op0, value); return value; --- 367,375 ---- abort (); } if (GET_CODE (op0) == REG) ! op0 = gen_rtx_SUBREG (fieldmode, op0, byte_offset); else ! op0 = adjust_address (op0, fieldmode, offset); } emit_move_insn (op0, value); return value; *************** store_bit_field (str_rtx, bitsize, bitnu *** 329,335 **** if (imode != GET_MODE (op0)) { if (GET_CODE (op0) == MEM) ! op0 = change_address (op0, imode, NULL_RTX); else if (imode != BLKmode) op0 = gen_lowpart (imode, op0); else --- 384,390 ---- if (imode != GET_MODE (op0)) { if (GET_CODE (op0) == MEM) ! op0 = adjust_address (op0, imode, 0); else if (imode != BLKmode) op0 = gen_lowpart (imode, op0); else *************** store_bit_field (str_rtx, bitsize, bitnu *** 337,342 **** --- 392,414 ---- } } + /* We may be accessing data outside the field, which means + we can alias adjacent data. */ + if (GET_CODE (op0) == MEM) + { + op0 = shallow_copy_rtx (op0); + set_mem_alias_set (op0, 0); + set_mem_expr (op0, 0); + } + + /* If OP0 is a register, BITPOS must count within a word. + But as we have it, it counts within whatever size OP0 now has. + On a bigendian machine, these are not the same, so convert. */ + if (BYTES_BIG_ENDIAN + && GET_CODE (op0) != MEM + && unit > GET_MODE_BITSIZE (GET_MODE (op0))) + bitpos += unit - GET_MODE_BITSIZE (GET_MODE (op0)); + /* Storing an lsb-aligned field in a register can be done with a movestrict instruction. */ *************** store_bit_field (str_rtx, bitsize, bitnu *** 373,379 **** } emit_insn (GEN_FCN (icode) ! (gen_rtx_SUBREG (fieldmode, op0, offset), value)); return value; } --- 445,454 ---- } emit_insn (GEN_FCN (icode) ! (gen_rtx_SUBREG (fieldmode, op0, ! (bitnum % BITS_PER_WORD) / BITS_PER_UNIT ! + (offset * UNITS_PER_WORD)), ! value)); return value; } *************** store_bit_field (str_rtx, bitsize, bitnu *** 405,414 **** if I is 1, use the next to lowest word; and so on. */ unsigned int wordnum = (backwards ? nwords - i - 1 : i); unsigned int bit_offset = (backwards ! ? MAX ((int) bitsize - ((int) i + 1) ! * BITS_PER_WORD, ! 0) ! : (int) i * BITS_PER_WORD); store_bit_field (op0, MIN (BITS_PER_WORD, bitsize - i * BITS_PER_WORD), --- 480,489 ---- if I is 1, use the next to lowest word; and so on. */ unsigned int wordnum = (backwards ? nwords - i - 1 : i); unsigned int bit_offset = (backwards ! ? MAX ((int) bitsize - ((int) i + 1) ! * BITS_PER_WORD, ! 0) ! : (int) i * BITS_PER_WORD); store_bit_field (op0, MIN (BITS_PER_WORD, bitsize - i * BITS_PER_WORD), *************** store_bit_field (str_rtx, bitsize, bitnu *** 417,423 **** (GET_MODE (value) == VOIDmode ? fieldmode : GET_MODE (value))), ! align, total_size); } return value; } --- 492,498 ---- (GET_MODE (value) == VOIDmode ? fieldmode : GET_MODE (value))), ! total_size); } return value; } *************** store_bit_field (str_rtx, bitsize, bitnu *** 447,496 **** abort (); } op0 = gen_rtx_SUBREG (mode_for_size (BITS_PER_WORD, MODE_INT, 0), ! op0, offset); } offset = 0; } else ! { ! op0 = protect_from_queue (op0, 1); ! } /* If VALUE is a floating-point mode, access it as an integer of the corresponding size. This can occur on a machine with 64 bit registers that uses SFmode for float. This can also occur for unaligned float structure fields. */ ! if (GET_MODE_CLASS (GET_MODE (value)) == MODE_FLOAT) ! { ! if (GET_CODE (value) != REG) ! value = copy_to_reg (value); ! value = gen_rtx_SUBREG (word_mode, value, 0); ! } /* Now OFFSET is nonzero only if OP0 is memory and is therefore always measured in bytes. */ - #ifdef HAVE_insv if (HAVE_insv && GET_MODE (value) != BLKmode && !(bitsize == 1 && GET_CODE (value) == CONST_INT) /* Ensure insv's size is wide enough for this field. */ ! && (insv_bitsize >= bitsize) && ! ((GET_CODE (op0) == REG || GET_CODE (op0) == SUBREG) ! && (bitsize + bitpos > insv_bitsize))) { int xbitpos = bitpos; rtx value1; rtx xop0 = op0; rtx last = get_last_insn (); rtx pat; ! enum machine_mode maxmode; int save_volatile_ok = volatile_ok; - maxmode = insn_data[(int) CODE_FOR_insv].operand[3].mode; - if (maxmode == VOIDmode) - maxmode = word_mode; - volatile_ok = 1; /* If this machine's insv can only insert into a register, copy OP0 --- 522,561 ---- abort (); } op0 = gen_rtx_SUBREG (mode_for_size (BITS_PER_WORD, MODE_INT, 0), ! op0, (offset * UNITS_PER_WORD)); } offset = 0; } else ! op0 = protect_from_queue (op0, 1); /* If VALUE is a floating-point mode, access it as an integer of the corresponding size. This can occur on a machine with 64 bit registers that uses SFmode for float. This can also occur for unaligned float structure fields. */ ! if (GET_MODE_CLASS (GET_MODE (value)) != MODE_INT ! && GET_MODE_CLASS (GET_MODE (value)) != MODE_PARTIAL_INT) ! value = gen_lowpart (word_mode, value); /* Now OFFSET is nonzero only if OP0 is memory and is therefore always measured in bytes. */ if (HAVE_insv && GET_MODE (value) != BLKmode && !(bitsize == 1 && GET_CODE (value) == CONST_INT) /* Ensure insv's size is wide enough for this field. */ ! && (GET_MODE_BITSIZE (op_mode) >= bitsize) && ! ((GET_CODE (op0) == REG || GET_CODE (op0) == SUBREG) ! && (bitsize + bitpos > GET_MODE_BITSIZE (op_mode)))) { int xbitpos = bitpos; rtx value1; rtx xop0 = op0; rtx last = get_last_insn (); rtx pat; ! enum machine_mode maxmode = mode_for_extraction (EP_insv, 3); int save_volatile_ok = volatile_ok; volatile_ok = 1; /* If this machine's insv can only insert into a register, copy OP0 *************** store_bit_field (str_rtx, bitsize, bitnu *** 512,540 **** if (GET_MODE (op0) == BLKmode || GET_MODE_SIZE (GET_MODE (op0)) > GET_MODE_SIZE (maxmode)) bestmode ! = get_best_mode (bitsize, bitnum, align, maxmode, MEM_VOLATILE_P (op0)); else bestmode = GET_MODE (op0); if (bestmode == VOIDmode ! || (SLOW_UNALIGNED_ACCESS (bestmode, align) ! && GET_MODE_BITSIZE (bestmode) > align)) goto insv_loses; ! /* Adjust address to point to the containing unit of that mode. */ unit = GET_MODE_BITSIZE (bestmode); - /* Compute offset as multiple of this unit, counting in bytes. */ offset = (bitnum / unit) * GET_MODE_SIZE (bestmode); bitpos = bitnum % unit; ! op0 = change_address (op0, bestmode, ! plus_constant (XEXP (op0, 0), offset)); /* Fetch that unit, store the bitfield in it, then store the unit. */ tempreg = copy_to_reg (op0); store_bit_field (tempreg, bitsize, bitpos, fieldmode, value, ! align, total_size); emit_move_insn (op0, tempreg); return value; } --- 577,604 ---- if (GET_MODE (op0) == BLKmode || GET_MODE_SIZE (GET_MODE (op0)) > GET_MODE_SIZE (maxmode)) bestmode ! = get_best_mode (bitsize, bitnum, MEM_ALIGN (op0), maxmode, MEM_VOLATILE_P (op0)); else bestmode = GET_MODE (op0); if (bestmode == VOIDmode ! || (SLOW_UNALIGNED_ACCESS (bestmode, MEM_ALIGN (op0)) ! && GET_MODE_BITSIZE (bestmode) > MEM_ALIGN (op0))) goto insv_loses; ! /* Adjust address to point to the containing unit of that mode. ! Compute offset as multiple of this unit, counting in bytes. */ unit = GET_MODE_BITSIZE (bestmode); offset = (bitnum / unit) * GET_MODE_SIZE (bestmode); bitpos = bitnum % unit; ! op0 = adjust_address (op0, bestmode, offset); /* Fetch that unit, store the bitfield in it, then store the unit. */ tempreg = copy_to_reg (op0); store_bit_field (tempreg, bitsize, bitpos, fieldmode, value, ! total_size); emit_move_insn (op0, tempreg); return value; } *************** store_bit_field (str_rtx, bitsize, bitnu *** 542,556 **** /* Add OFFSET into OP0's address. */ if (GET_CODE (xop0) == MEM) ! xop0 = change_address (xop0, byte_mode, ! plus_constant (XEXP (xop0, 0), offset)); /* If xop0 is a register, we need it in MAXMODE to make it acceptable to the format of insv. */ if (GET_CODE (xop0) == SUBREG) /* We can't just change the mode, because this might clobber op0, and we will need the original value of op0 if insv fails. */ ! xop0 = gen_rtx_SUBREG (maxmode, SUBREG_REG (xop0), SUBREG_WORD (xop0)); if (GET_CODE (xop0) == REG && GET_MODE (xop0) != maxmode) xop0 = gen_rtx_SUBREG (maxmode, xop0, 0); --- 606,619 ---- /* Add OFFSET into OP0's address. */ if (GET_CODE (xop0) == MEM) ! xop0 = adjust_address (xop0, byte_mode, offset); /* If xop0 is a register, we need it in MAXMODE to make it acceptable to the format of insv. */ if (GET_CODE (xop0) == SUBREG) /* We can't just change the mode, because this might clobber op0, and we will need the original value of op0 if insv fails. */ ! xop0 = gen_rtx_SUBREG (maxmode, SUBREG_REG (xop0), SUBREG_BYTE (xop0)); if (GET_CODE (xop0) == REG && GET_MODE (xop0) != maxmode) xop0 = gen_rtx_SUBREG (maxmode, xop0, 0); *************** store_bit_field (str_rtx, bitsize, bitnu *** 579,592 **** if (GET_MODE_SIZE (GET_MODE (value)) < GET_MODE_SIZE (maxmode)) { ! /* Avoid making subreg of a subreg, or of a mem. */ ! if (GET_CODE (value1) != REG) ! value1 = copy_to_reg (value1); ! value1 = gen_rtx_SUBREG (maxmode, value1, 0); } else value1 = gen_lowpart (maxmode, value1); } else if (!CONSTANT_P (value)) /* Parse phase is supposed to make VALUE's data type match that of the component reference, which is a type --- 642,662 ---- if (GET_MODE_SIZE (GET_MODE (value)) < GET_MODE_SIZE (maxmode)) { ! rtx tmp; ! ! tmp = simplify_subreg (maxmode, value1, GET_MODE (value), 0); ! if (! tmp) ! tmp = simplify_gen_subreg (maxmode, ! force_reg (GET_MODE (value), ! value1), ! GET_MODE (value), 0); ! value1 = tmp; } else value1 = gen_lowpart (maxmode, value1); } + else if (GET_CODE (value) == CONST_INT) + value1 = GEN_INT (trunc_int_for_mode (INTVAL (value), maxmode)); else if (!CONSTANT_P (value)) /* Parse phase is supposed to make VALUE's data type match that of the component reference, which is a type *************** store_bit_field (str_rtx, bitsize, bitnu *** 607,620 **** else { delete_insns_since (last); ! store_fixed_bit_field (op0, offset, bitsize, bitpos, value, align); } } else insv_loses: - #endif /* Insv is not available; store using shifts and boolean ops. */ ! store_fixed_bit_field (op0, offset, bitsize, bitpos, value, align); return value; } --- 677,689 ---- else { delete_insns_since (last); ! store_fixed_bit_field (op0, offset, bitsize, bitpos, value); } } else insv_loses: /* Insv is not available; store using shifts and boolean ops. */ ! store_fixed_bit_field (op0, offset, bitsize, bitpos, value); return value; } *************** store_bit_field (str_rtx, bitsize, bitnu *** 626,651 **** (If OP0 is a register, it may be a full word or a narrower mode, but BITPOS still counts within a full word, which is significant on bigendian machines.) - STRUCT_ALIGN is the alignment the structure is known to have. Note that protect_from_queue has already been done on OP0 and VALUE. */ static void ! store_fixed_bit_field (op0, offset, bitsize, bitpos, value, struct_align) ! register rtx op0; unsigned HOST_WIDE_INT offset, bitsize, bitpos; ! register rtx value; ! unsigned int struct_align; { ! register enum machine_mode mode; unsigned int total_bits = BITS_PER_WORD; rtx subtarget, temp; int all_zero = 0; int all_one = 0; - if (! SLOW_UNALIGNED_ACCESS (word_mode, struct_align)) - struct_align = BIGGEST_ALIGNMENT; - /* There is a case not handled here: a structure with a known alignment of just a halfword and a field split across two aligned halfwords within the structure. --- 695,715 ---- (If OP0 is a register, it may be a full word or a narrower mode, but BITPOS still counts within a full word, which is significant on bigendian machines.) Note that protect_from_queue has already been done on OP0 and VALUE. */ static void ! store_fixed_bit_field (op0, offset, bitsize, bitpos, value) ! rtx op0; unsigned HOST_WIDE_INT offset, bitsize, bitpos; ! rtx value; { ! enum machine_mode mode; unsigned int total_bits = BITS_PER_WORD; rtx subtarget, temp; int all_zero = 0; int all_one = 0; /* There is a case not handled here: a structure with a known alignment of just a halfword and a field split across two aligned halfwords within the structure. *************** store_fixed_bit_field (op0, offset, bits *** 660,667 **** /* Special treatment for a bit field split across two registers. */ if (bitsize + bitpos > BITS_PER_WORD) { ! store_split_bit_field (op0, bitsize, bitpos, ! value, BITS_PER_WORD); return; } } --- 724,730 ---- /* Special treatment for a bit field split across two registers. */ if (bitsize + bitpos > BITS_PER_WORD) { ! store_split_bit_field (op0, bitsize, bitpos, value); return; } } *************** store_fixed_bit_field (op0, offset, bits *** 669,687 **** { /* Get the proper mode to use for this field. We want a mode that includes the entire field. If such a mode would be larger than ! a word, we won't be doing the extraction the normal way. */ mode = get_best_mode (bitsize, bitpos + offset * BITS_PER_UNIT, ! struct_align, word_mode, ! GET_CODE (op0) == MEM && MEM_VOLATILE_P (op0)); if (mode == VOIDmode) { /* The only way this should occur is if the field spans word boundaries. */ ! store_split_bit_field (op0, ! bitsize, bitpos + offset * BITS_PER_UNIT, ! value, struct_align); return; } --- 732,753 ---- { /* Get the proper mode to use for this field. We want a mode that includes the entire field. If such a mode would be larger than ! a word, we won't be doing the extraction the normal way. ! We don't want a mode bigger than the destination. */ + mode = GET_MODE (op0); + if (GET_MODE_BITSIZE (mode) == 0 + || GET_MODE_BITSIZE (mode) > GET_MODE_BITSIZE (word_mode)) + mode = word_mode; mode = get_best_mode (bitsize, bitpos + offset * BITS_PER_UNIT, ! MEM_ALIGN (op0), mode, MEM_VOLATILE_P (op0)); if (mode == VOIDmode) { /* The only way this should occur is if the field spans word boundaries. */ ! store_split_bit_field (op0, bitsize, bitpos + offset * BITS_PER_UNIT, ! value); return; } *************** store_fixed_bit_field (op0, offset, bits *** 703,710 **** Then alter OP0 to refer to that word. */ bitpos += (offset % (total_bits / BITS_PER_UNIT)) * BITS_PER_UNIT; offset -= (offset % (total_bits / BITS_PER_UNIT)); ! op0 = change_address (op0, mode, ! plus_constant (XEXP (op0, 0), offset)); } mode = GET_MODE (op0); --- 769,775 ---- Then alter OP0 to refer to that word. */ bitpos += (offset % (total_bits / BITS_PER_UNIT)) * BITS_PER_UNIT; offset -= (offset % (total_bits / BITS_PER_UNIT)); ! op0 = adjust_address (op0, mode, offset); } mode = GET_MODE (op0); *************** store_fixed_bit_field (op0, offset, bits *** 729,735 **** if (GET_CODE (value) == CONST_INT) { ! register HOST_WIDE_INT v = INTVAL (value); if (bitsize < HOST_BITS_PER_WIDE_INT) v &= ((HOST_WIDE_INT) 1 << bitsize) - 1; --- 794,800 ---- if (GET_CODE (value) == CONST_INT) { ! HOST_WIDE_INT v = INTVAL (value); if (bitsize < HOST_BITS_PER_WIDE_INT) v &= ((HOST_WIDE_INT) 1 << bitsize) - 1; *************** store_fixed_bit_field (op0, offset, bits *** 796,812 **** BITSIZE is the field width; BITPOS the position of its first bit (within the word). VALUE is the value to store. - ALIGN is the known alignment of OP0. - This is also the size of the memory objects to be used. This does not yet handle fields wider than BITS_PER_WORD. */ static void ! store_split_bit_field (op0, bitsize, bitpos, value, align) rtx op0; unsigned HOST_WIDE_INT bitsize, bitpos; rtx value; - unsigned int align; { unsigned int unit; unsigned int bitsdone = 0; --- 861,874 ---- BITSIZE is the field width; BITPOS the position of its first bit (within the word). VALUE is the value to store. This does not yet handle fields wider than BITS_PER_WORD. */ static void ! store_split_bit_field (op0, bitsize, bitpos, value) rtx op0; unsigned HOST_WIDE_INT bitsize, bitpos; rtx value; { unsigned int unit; unsigned int bitsdone = 0; *************** store_split_bit_field (op0, bitsize, bit *** 816,822 **** if (GET_CODE (op0) == REG || GET_CODE (op0) == SUBREG) unit = BITS_PER_WORD; else ! unit = MIN (align, BITS_PER_WORD); /* If VALUE is a constant other than a CONST_INT, get it into a register in WORD_MODE. If we can do this using gen_lowpart_common, do so. Note --- 878,884 ---- if (GET_CODE (op0) == REG || GET_CODE (op0) == SUBREG) unit = BITS_PER_WORD; else ! unit = MIN (MEM_ALIGN (op0), BITS_PER_WORD); /* If VALUE is a constant other than a CONST_INT, get it into a register in WORD_MODE. If we can do this using gen_lowpart_common, do so. Note *************** store_split_bit_field (op0, bitsize, bit *** 872,889 **** else /* The args are chosen so that the last part includes the lsb. Give extract_bit_field the value it needs (with ! endianness compensation) to fetch the piece we want. ! ! ??? We have no idea what the alignment of VALUE is, so ! we have to use a guess. */ ! part ! = extract_fixed_bit_field ! (word_mode, value, 0, thissize, ! total_bits - bitsize + bitsdone, NULL_RTX, 1, ! GET_MODE (value) == VOIDmode ! ? UNITS_PER_WORD ! : (GET_MODE (value) == BLKmode ! ? 1 : GET_MODE_ALIGNMENT (GET_MODE (value)))); } else { --- 934,943 ---- else /* The args are chosen so that the last part includes the lsb. Give extract_bit_field the value it needs (with ! endianness compensation) to fetch the piece we want. */ ! part = extract_fixed_bit_field (word_mode, value, 0, thissize, ! total_bits - bitsize + bitsdone, ! NULL_RTX, 1); } else { *************** store_split_bit_field (op0, bitsize, bit *** 893,905 **** >> bitsdone) & (((HOST_WIDE_INT) 1 << thissize) - 1)); else ! part ! = extract_fixed_bit_field ! (word_mode, value, 0, thissize, bitsdone, NULL_RTX, 1, ! GET_MODE (value) == VOIDmode ! ? UNITS_PER_WORD ! : (GET_MODE (value) == BLKmode ! ? 1 : GET_MODE_ALIGNMENT (GET_MODE (value)))); } /* If OP0 is a register, then handle OFFSET here. --- 947,954 ---- >> bitsdone) & (((HOST_WIDE_INT) 1 << thissize) - 1)); else ! part = extract_fixed_bit_field (word_mode, value, 0, thissize, ! bitsdone, NULL_RTX, 1); } /* If OP0 is a register, then handle OFFSET here. *************** store_split_bit_field (op0, bitsize, bit *** 910,917 **** the current word starting from the base register. */ if (GET_CODE (op0) == SUBREG) { ! word = operand_subword_force (SUBREG_REG (op0), ! SUBREG_WORD (op0) + offset, GET_MODE (SUBREG_REG (op0))); offset = 0; } --- 959,966 ---- the current word starting from the base register. */ if (GET_CODE (op0) == SUBREG) { ! int word_offset = (SUBREG_BYTE (op0) / UNITS_PER_WORD) + offset; ! word = operand_subword_force (SUBREG_REG (op0), word_offset, GET_MODE (SUBREG_REG (op0))); offset = 0; } *************** store_split_bit_field (op0, bitsize, bit *** 925,932 **** /* OFFSET is in UNITs, and UNIT is in bits. store_fixed_bit_field wants offset in bytes. */ ! store_fixed_bit_field (word, offset * unit / BITS_PER_UNIT, ! thissize, thispos, part, align); bitsdone += thissize; } } --- 974,981 ---- /* OFFSET is in UNITs, and UNIT is in bits. store_fixed_bit_field wants offset in bytes. */ ! store_fixed_bit_field (word, offset * unit / BITS_PER_UNIT, thissize, ! thispos, part); bitsdone += thissize; } } *************** store_split_bit_field (op0, bitsize, bit *** 943,949 **** TMODE is the mode the caller would like the value to have; but the value may be returned with type MODE instead. - ALIGN is the alignment that STR_RTX is known to have. TOTAL_SIZE is the size in bytes of the containing structure, or -1 if varying. --- 992,997 ---- *************** store_split_bit_field (op0, bitsize, bit *** 954,999 **** rtx extract_bit_field (str_rtx, bitsize, bitnum, unsignedp, ! target, mode, tmode, align, total_size) rtx str_rtx; unsigned HOST_WIDE_INT bitsize; unsigned HOST_WIDE_INT bitnum; int unsignedp; rtx target; enum machine_mode mode, tmode; - unsigned int align; HOST_WIDE_INT total_size; { unsigned int unit = (GET_CODE (str_rtx) == MEM) ? BITS_PER_UNIT : BITS_PER_WORD; unsigned HOST_WIDE_INT offset = bitnum / unit; unsigned HOST_WIDE_INT bitpos = bitnum % unit; ! register rtx op0 = str_rtx; rtx spec_target = target; rtx spec_target_subreg = 0; enum machine_mode int_mode; ! #ifdef HAVE_extv ! unsigned HOST_WIDE_INT extv_bitsize; ! enum machine_mode extv_mode; ! #endif ! #ifdef HAVE_extzv ! unsigned HOST_WIDE_INT extzv_bitsize; ! enum machine_mode extzv_mode; ! #endif ! ! #ifdef HAVE_extv ! extv_mode = insn_data[(int) CODE_FOR_extv].operand[0].mode; ! if (extv_mode == VOIDmode) ! extv_mode = word_mode; ! extv_bitsize = GET_MODE_BITSIZE (extv_mode); ! #endif ! ! #ifdef HAVE_extzv ! extzv_mode = insn_data[(int) CODE_FOR_extzv].operand[0].mode; ! if (extzv_mode == VOIDmode) ! extzv_mode = word_mode; ! extzv_bitsize = GET_MODE_BITSIZE (extzv_mode); ! #endif /* Discount the part of the structure before the desired byte. We need to know how many bytes are safe to reference after it. */ --- 1002,1028 ---- rtx extract_bit_field (str_rtx, bitsize, bitnum, unsignedp, ! target, mode, tmode, total_size) rtx str_rtx; unsigned HOST_WIDE_INT bitsize; unsigned HOST_WIDE_INT bitnum; int unsignedp; rtx target; enum machine_mode mode, tmode; HOST_WIDE_INT total_size; { unsigned int unit = (GET_CODE (str_rtx) == MEM) ? BITS_PER_UNIT : BITS_PER_WORD; unsigned HOST_WIDE_INT offset = bitnum / unit; unsigned HOST_WIDE_INT bitpos = bitnum % unit; ! rtx op0 = str_rtx; rtx spec_target = target; rtx spec_target_subreg = 0; enum machine_mode int_mode; ! enum machine_mode extv_mode = mode_for_extraction (EP_extv, 0); ! enum machine_mode extzv_mode = mode_for_extraction (EP_extzv, 0); ! enum machine_mode mode1; ! int byte_offset; /* Discount the part of the structure before the desired byte. We need to know how many bytes are safe to reference after it. */ *************** extract_bit_field (str_rtx, bitsize, bit *** 1008,1014 **** int outer_size = GET_MODE_BITSIZE (GET_MODE (op0)); int inner_size = GET_MODE_BITSIZE (GET_MODE (SUBREG_REG (op0))); ! offset += SUBREG_WORD (op0); inner_size = MIN (inner_size, BITS_PER_WORD); --- 1037,1043 ---- int outer_size = GET_MODE_BITSIZE (GET_MODE (op0)); int inner_size = GET_MODE_BITSIZE (GET_MODE (SUBREG_REG (op0))); ! offset += SUBREG_BYTE (op0) / UNITS_PER_WORD; inner_size = MIN (inner_size, BITS_PER_WORD); *************** extract_bit_field (str_rtx, bitsize, bit *** 1041,1047 **** if (imode != GET_MODE (op0)) { if (GET_CODE (op0) == MEM) ! op0 = change_address (op0, imode, NULL_RTX); else if (imode != BLKmode) op0 = gen_lowpart (imode, op0); else --- 1070,1076 ---- if (imode != GET_MODE (op0)) { if (GET_CODE (op0) == MEM) ! op0 = adjust_address (op0, imode, 0); else if (imode != BLKmode) op0 = gen_lowpart (imode, op0); else *************** extract_bit_field (str_rtx, bitsize, bit *** 1049,1058 **** } } /* ??? We currently assume TARGET is at least as big as BITSIZE. If that's wrong, the solution is to test for it and set TARGET to 0 if needed. */ ! /* If OP0 is a register, BITPOS must count within a word. But as we have it, it counts within whatever size OP0 now has. On a bigendian machine, these are not the same, so convert. */ --- 1078,1096 ---- } } + /* We may be accessing data outside the field, which means + we can alias adjacent data. */ + if (GET_CODE (op0) == MEM) + { + op0 = shallow_copy_rtx (op0); + set_mem_alias_set (op0, 0); + set_mem_expr (op0, 0); + } + /* ??? We currently assume TARGET is at least as big as BITSIZE. If that's wrong, the solution is to test for it and set TARGET to 0 if needed. */ ! /* If OP0 is a register, BITPOS must count within a word. But as we have it, it counts within whatever size OP0 now has. On a bigendian machine, these are not the same, so convert. */ *************** extract_bit_field (str_rtx, bitsize, bit *** 1067,1079 **** So too extracting a subword value in the least significant part of the register. */ if (((GET_CODE (op0) != MEM && TRULY_NOOP_TRUNCATION (GET_MODE_BITSIZE (mode), ! GET_MODE_BITSIZE (GET_MODE (op0)))) || (GET_CODE (op0) == MEM ! && (! SLOW_UNALIGNED_ACCESS (mode, align) || (offset * BITS_PER_UNIT % bitsize == 0 ! && align % bitsize == 0)))) && ((bitsize >= BITS_PER_WORD && bitsize == GET_MODE_BITSIZE (mode) && bitpos % BITS_PER_WORD == 0) || (mode_for_size (bitsize, GET_MODE_CLASS (tmode), 0) != BLKmode --- 1105,1126 ---- So too extracting a subword value in the least significant part of the register. */ + byte_offset = (bitnum % BITS_PER_WORD) / BITS_PER_UNIT + + (offset * UNITS_PER_WORD); + + mode1 = (VECTOR_MODE_P (tmode) + ? mode + : mode_for_size (bitsize, GET_MODE_CLASS (tmode), 0)); + if (((GET_CODE (op0) != MEM && TRULY_NOOP_TRUNCATION (GET_MODE_BITSIZE (mode), ! GET_MODE_BITSIZE (GET_MODE (op0))) ! && GET_MODE_SIZE (mode1) != 0 ! && byte_offset % GET_MODE_SIZE (mode1) == 0) || (GET_CODE (op0) == MEM ! && (! SLOW_UNALIGNED_ACCESS (mode, MEM_ALIGN (op0)) || (offset * BITS_PER_UNIT % bitsize == 0 ! && MEM_ALIGN (op0) % bitsize == 0)))) && ((bitsize >= BITS_PER_WORD && bitsize == GET_MODE_BITSIZE (mode) && bitpos % BITS_PER_WORD == 0) || (mode_for_size (bitsize, GET_MODE_CLASS (tmode), 0) != BLKmode *************** extract_bit_field (str_rtx, bitsize, bit *** 1085,1094 **** ? bitpos + bitsize == BITS_PER_WORD : bitpos == 0)))) { - enum machine_mode mode1 - = (VECTOR_MODE_P (tmode) ? mode - : mode_for_size (bitsize, GET_MODE_CLASS (tmode), 0)); - if (mode1 != GET_MODE (op0)) { if (GET_CODE (op0) == SUBREG) --- 1132,1137 ---- *************** extract_bit_field (str_rtx, bitsize, bit *** 1104,1113 **** abort (); } if (GET_CODE (op0) == REG) ! op0 = gen_rtx_SUBREG (mode1, op0, offset); else ! op0 = change_address (op0, mode1, ! plus_constant (XEXP (op0, 0), offset)); } if (mode1 != mode) return convert_to_mode (tmode, op0, unsignedp); --- 1147,1155 ---- abort (); } if (GET_CODE (op0) == REG) ! op0 = gen_rtx_SUBREG (mode1, op0, byte_offset); else ! op0 = adjust_address (op0, mode1, offset); } if (mode1 != mode) return convert_to_mode (tmode, op0, unsignedp); *************** extract_bit_field (str_rtx, bitsize, bit *** 1115,1121 **** } /* Handle fields bigger than a word. */ ! if (bitsize > BITS_PER_WORD) { /* Here we transfer the words of the field --- 1157,1163 ---- } /* Handle fields bigger than a word. */ ! if (bitsize > BITS_PER_WORD) { /* Here we transfer the words of the field *************** extract_bit_field (str_rtx, bitsize, bit *** 1151,1157 **** = extract_bit_field (op0, MIN (BITS_PER_WORD, bitsize - i * BITS_PER_WORD), bitnum + bit_offset, 1, target_part, mode, ! word_mode, align, total_size); if (target_part == 0) abort (); --- 1193,1199 ---- = extract_bit_field (op0, MIN (BITS_PER_WORD, bitsize - i * BITS_PER_WORD), bitnum + bit_offset, 1, target_part, mode, ! word_mode, total_size); if (target_part == 0) abort (); *************** extract_bit_field (str_rtx, bitsize, bit *** 1170,1180 **** total_words = GET_MODE_SIZE (GET_MODE (target)) / UNITS_PER_WORD; for (i = nwords; i < total_words; i++) ! { ! int wordnum = WORDS_BIG_ENDIAN ? total_words - i - 1 : i; ! rtx target_part = operand_subword (target, wordnum, 1, VOIDmode); ! emit_move_insn (target_part, const0_rtx); ! } } return target; } --- 1212,1222 ---- total_words = GET_MODE_SIZE (GET_MODE (target)) / UNITS_PER_WORD; for (i = nwords; i < total_words; i++) ! emit_move_insn ! (operand_subword (target, ! WORDS_BIG_ENDIAN ? total_words - i - 1 : i, ! 1, VOIDmode), ! const0_rtx); } return target; } *************** extract_bit_field (str_rtx, bitsize, bit *** 1187,1206 **** build_int_2 (GET_MODE_BITSIZE (mode) - bitsize, 0), NULL_RTX, 0); } ! /* From here on we know the desired field is smaller than a word. */ /* Check if there is a correspondingly-sized integer field, so we can safely extract it as one size of integer, if necessary; then truncate or extend to the size that is wanted; then use SUBREGs or convert_to_mode to get one of the modes we really wanted. */ ! int_mode = int_mode_for_mode (tmode); if (int_mode == BLKmode) int_mode = int_mode_for_mode (mode); if (int_mode == BLKmode) ! abort(); /* Should probably push op0 out to memory and then ! do a load. */ /* OFFSET is the number of words or bytes (UNIT says which) from STR_RTX to the first word or byte containing part of the field. */ --- 1229,1248 ---- build_int_2 (GET_MODE_BITSIZE (mode) - bitsize, 0), NULL_RTX, 0); } ! /* From here on we know the desired field is smaller than a word. */ /* Check if there is a correspondingly-sized integer field, so we can safely extract it as one size of integer, if necessary; then truncate or extend to the size that is wanted; then use SUBREGs or convert_to_mode to get one of the modes we really wanted. */ ! int_mode = int_mode_for_mode (tmode); if (int_mode == BLKmode) int_mode = int_mode_for_mode (mode); if (int_mode == BLKmode) ! abort (); /* Should probably push op0 out to memory and then ! do a load. */ /* OFFSET is the number of words or bytes (UNIT says which) from STR_RTX to the first word or byte containing part of the field. */ *************** extract_bit_field (str_rtx, bitsize, bit *** 1213,1236 **** if (GET_CODE (op0) != REG) op0 = copy_to_reg (op0); op0 = gen_rtx_SUBREG (mode_for_size (BITS_PER_WORD, MODE_INT, 0), ! op0, offset); } offset = 0; } else ! { ! op0 = protect_from_queue (str_rtx, 1); ! } /* Now OFFSET is nonzero only for memory operands. */ if (unsignedp) { - #ifdef HAVE_extzv if (HAVE_extzv ! && (extzv_bitsize >= bitsize) && ! ((GET_CODE (op0) == REG || GET_CODE (op0) == SUBREG) ! && (bitsize + bitpos > extzv_bitsize))) { unsigned HOST_WIDE_INT xbitpos = bitpos, xoffset = offset; rtx bitsize_rtx, bitpos_rtx; --- 1255,1275 ---- if (GET_CODE (op0) != REG) op0 = copy_to_reg (op0); op0 = gen_rtx_SUBREG (mode_for_size (BITS_PER_WORD, MODE_INT, 0), ! op0, (offset * UNITS_PER_WORD)); } offset = 0; } else ! op0 = protect_from_queue (str_rtx, 1); /* Now OFFSET is nonzero only for memory operands. */ if (unsignedp) { if (HAVE_extzv ! && (GET_MODE_BITSIZE (extzv_mode) >= bitsize) && ! ((GET_CODE (op0) == REG || GET_CODE (op0) == SUBREG) ! && (bitsize + bitpos > GET_MODE_BITSIZE (extzv_mode)))) { unsigned HOST_WIDE_INT xbitpos = bitpos, xoffset = offset; rtx bitsize_rtx, bitpos_rtx; *************** extract_bit_field (str_rtx, bitsize, bit *** 1240,1250 **** rtx xspec_target = spec_target; rtx xspec_target_subreg = spec_target_subreg; rtx pat; ! enum machine_mode maxmode; ! ! maxmode = insn_data[(int) CODE_FOR_extzv].operand[0].mode; ! if (maxmode == VOIDmode) ! maxmode = word_mode; if (GET_CODE (xop0) == MEM) { --- 1279,1285 ---- rtx xspec_target = spec_target; rtx xspec_target_subreg = spec_target_subreg; rtx pat; ! enum machine_mode maxmode = mode_for_extraction (EP_extzv, 0); if (GET_CODE (xop0) == MEM) { *************** extract_bit_field (str_rtx, bitsize, bit *** 1267,1280 **** if (GET_MODE (xop0) == BLKmode || (GET_MODE_SIZE (GET_MODE (op0)) > GET_MODE_SIZE (maxmode))) ! bestmode = get_best_mode (bitsize, bitnum, align, maxmode, MEM_VOLATILE_P (xop0)); else bestmode = GET_MODE (xop0); if (bestmode == VOIDmode ! || (SLOW_UNALIGNED_ACCESS (bestmode, align) ! && GET_MODE_BITSIZE (bestmode) > align)) goto extzv_loses; /* Compute offset as multiple of this unit, --- 1302,1316 ---- if (GET_MODE (xop0) == BLKmode || (GET_MODE_SIZE (GET_MODE (op0)) > GET_MODE_SIZE (maxmode))) ! bestmode = get_best_mode (bitsize, bitnum, ! MEM_ALIGN (xop0), maxmode, MEM_VOLATILE_P (xop0)); else bestmode = GET_MODE (xop0); if (bestmode == VOIDmode ! || (SLOW_UNALIGNED_ACCESS (bestmode, MEM_ALIGN (xop0)) ! && GET_MODE_BITSIZE (bestmode) > MEM_ALIGN (xop0))) goto extzv_loses; /* Compute offset as multiple of this unit, *************** extract_bit_field (str_rtx, bitsize, bit *** 1282,1290 **** unit = GET_MODE_BITSIZE (bestmode); xoffset = (bitnum / unit) * GET_MODE_SIZE (bestmode); xbitpos = bitnum % unit; ! xop0 = change_address (xop0, bestmode, ! plus_constant (XEXP (xop0, 0), ! xoffset)); /* Fetch it to a register in that size. */ xop0 = force_reg (bestmode, xop0); --- 1318,1325 ---- unit = GET_MODE_BITSIZE (bestmode); xoffset = (bitnum / unit) * GET_MODE_SIZE (bestmode); xbitpos = bitnum % unit; ! xop0 = adjust_address (xop0, bestmode, xoffset); ! /* Fetch it to a register in that size. */ xop0 = force_reg (bestmode, xop0); *************** extract_bit_field (str_rtx, bitsize, bit *** 1292,1299 **** } else /* Get ref to first byte containing part of the field. */ ! xop0 = change_address (xop0, byte_mode, ! plus_constant (XEXP (xop0, 0), xoffset)); volatile_ok = save_volatile_ok; } --- 1327,1333 ---- } else /* Get ref to first byte containing part of the field. */ ! xop0 = adjust_address (xop0, byte_mode, xoffset); volatile_ok = save_volatile_ok; } *************** extract_bit_field (str_rtx, bitsize, bit *** 1356,1377 **** { delete_insns_since (last); target = extract_fixed_bit_field (int_mode, op0, offset, bitsize, ! bitpos, target, 1, align); } } else ! extzv_loses: ! #endif ! target = extract_fixed_bit_field (int_mode, op0, offset, bitsize, ! bitpos, target, 1, align); } else { - #ifdef HAVE_extv if (HAVE_extv ! && (extv_bitsize >= bitsize) && ! ((GET_CODE (op0) == REG || GET_CODE (op0) == SUBREG) ! && (bitsize + bitpos > extv_bitsize))) { int xbitpos = bitpos, xoffset = offset; rtx bitsize_rtx, bitpos_rtx; --- 1390,1409 ---- { delete_insns_since (last); target = extract_fixed_bit_field (int_mode, op0, offset, bitsize, ! bitpos, target, 1); } } else ! extzv_loses: ! target = extract_fixed_bit_field (int_mode, op0, offset, bitsize, ! bitpos, target, 1); } else { if (HAVE_extv ! && (GET_MODE_BITSIZE (extv_mode) >= bitsize) && ! ((GET_CODE (op0) == REG || GET_CODE (op0) == SUBREG) ! && (bitsize + bitpos > GET_MODE_BITSIZE (extv_mode)))) { int xbitpos = bitpos, xoffset = offset; rtx bitsize_rtx, bitpos_rtx; *************** extract_bit_field (str_rtx, bitsize, bit *** 1380,1390 **** rtx xspec_target = spec_target; rtx xspec_target_subreg = spec_target_subreg; rtx pat; ! enum machine_mode maxmode; ! ! maxmode = insn_data[(int) CODE_FOR_extv].operand[0].mode; ! if (maxmode == VOIDmode) ! maxmode = word_mode; if (GET_CODE (xop0) == MEM) { --- 1412,1418 ---- rtx xspec_target = spec_target; rtx xspec_target_subreg = spec_target_subreg; rtx pat; ! enum machine_mode maxmode = mode_for_extraction (EP_extv, 0); if (GET_CODE (xop0) == MEM) { *************** extract_bit_field (str_rtx, bitsize, bit *** 1404,1417 **** if (GET_MODE (xop0) == BLKmode || (GET_MODE_SIZE (GET_MODE (op0)) > GET_MODE_SIZE (maxmode))) ! bestmode = get_best_mode (bitsize, bitnum, align, maxmode, MEM_VOLATILE_P (xop0)); else bestmode = GET_MODE (xop0); if (bestmode == VOIDmode ! || (SLOW_UNALIGNED_ACCESS (bestmode, align) ! && GET_MODE_BITSIZE (bestmode) > align)) goto extv_loses; /* Compute offset as multiple of this unit, --- 1432,1446 ---- if (GET_MODE (xop0) == BLKmode || (GET_MODE_SIZE (GET_MODE (op0)) > GET_MODE_SIZE (maxmode))) ! bestmode = get_best_mode (bitsize, bitnum, ! MEM_ALIGN (xop0), maxmode, MEM_VOLATILE_P (xop0)); else bestmode = GET_MODE (xop0); if (bestmode == VOIDmode ! || (SLOW_UNALIGNED_ACCESS (bestmode, MEM_ALIGN (xop0)) ! && GET_MODE_BITSIZE (bestmode) > MEM_ALIGN (xop0))) goto extv_loses; /* Compute offset as multiple of this unit, *************** extract_bit_field (str_rtx, bitsize, bit *** 1419,1427 **** unit = GET_MODE_BITSIZE (bestmode); xoffset = (bitnum / unit) * GET_MODE_SIZE (bestmode); xbitpos = bitnum % unit; ! xop0 = change_address (xop0, bestmode, ! plus_constant (XEXP (xop0, 0), ! xoffset)); /* Fetch it to a register in that size. */ xop0 = force_reg (bestmode, xop0); --- 1448,1455 ---- unit = GET_MODE_BITSIZE (bestmode); xoffset = (bitnum / unit) * GET_MODE_SIZE (bestmode); xbitpos = bitnum % unit; ! xop0 = adjust_address (xop0, bestmode, xoffset); ! /* Fetch it to a register in that size. */ xop0 = force_reg (bestmode, xop0); *************** extract_bit_field (str_rtx, bitsize, bit *** 1429,1436 **** } else /* Get ref to first byte containing part of the field. */ ! xop0 = change_address (xop0, byte_mode, ! plus_constant (XEXP (xop0, 0), xoffset)); } /* If op0 is a register, we need it in MAXMODE (which is usually --- 1457,1463 ---- } else /* Get ref to first byte containing part of the field. */ ! xop0 = adjust_address (xop0, byte_mode, xoffset); } /* If op0 is a register, we need it in MAXMODE (which is usually *************** extract_bit_field (str_rtx, bitsize, bit *** 1492,1505 **** { delete_insns_since (last); target = extract_fixed_bit_field (int_mode, op0, offset, bitsize, ! bitpos, target, 0, align); } ! } else ! extv_loses: ! #endif ! target = extract_fixed_bit_field (int_mode, op0, offset, bitsize, ! bitpos, target, 0, align); } if (target == spec_target) return target; --- 1519,1531 ---- { delete_insns_since (last); target = extract_fixed_bit_field (int_mode, op0, offset, bitsize, ! bitpos, target, 0); } ! } else ! extv_loses: ! target = extract_fixed_bit_field (int_mode, op0, offset, bitsize, ! bitpos, target, 0); } if (target == spec_target) return target; *************** extract_bit_field (str_rtx, bitsize, bit *** 1510,1523 **** /* If the target mode is floating-point, first convert to the integer mode of that size and then access it as a floating-point value via a SUBREG. */ ! if (GET_MODE_CLASS (tmode) == MODE_FLOAT) { target = convert_to_mode (mode_for_size (GET_MODE_BITSIZE (tmode), MODE_INT, 0), target, unsignedp); ! if (GET_CODE (target) != REG) ! target = copy_to_reg (target); ! return gen_rtx_SUBREG (tmode, target, 0); } else return convert_to_mode (tmode, target, unsignedp); --- 1536,1548 ---- /* If the target mode is floating-point, first convert to the integer mode of that size and then access it as a floating-point value via a SUBREG. */ ! if (GET_MODE_CLASS (tmode) != MODE_INT ! && GET_MODE_CLASS (tmode) != MODE_PARTIAL_INT) { target = convert_to_mode (mode_for_size (GET_MODE_BITSIZE (tmode), MODE_INT, 0), target, unsignedp); ! return gen_lowpart (tmode, target); } else return convert_to_mode (tmode, target, unsignedp); *************** extract_bit_field (str_rtx, bitsize, bit *** 1539,1556 **** UNSIGNEDP is nonzero for an unsigned bit field (don't sign-extend value). If TARGET is nonzero, attempts to store the value there and return TARGET, but this is not guaranteed. ! If TARGET is not used, create a pseudo-reg of mode TMODE for the value. ! ! ALIGN is the alignment that STR_RTX is known to have. */ static rtx extract_fixed_bit_field (tmode, op0, offset, bitsize, bitpos, ! target, unsignedp, align) enum machine_mode tmode; ! register rtx op0, target; unsigned HOST_WIDE_INT offset, bitsize, bitpos; int unsignedp; - unsigned int align; { unsigned int total_bits = BITS_PER_WORD; enum machine_mode mode; --- 1564,1578 ---- UNSIGNEDP is nonzero for an unsigned bit field (don't sign-extend value). If TARGET is nonzero, attempts to store the value there and return TARGET, but this is not guaranteed. ! If TARGET is not used, create a pseudo-reg of mode TMODE for the value. */ static rtx extract_fixed_bit_field (tmode, op0, offset, bitsize, bitpos, ! target, unsignedp) enum machine_mode tmode; ! rtx op0, target; unsigned HOST_WIDE_INT offset, bitsize, bitpos; int unsignedp; { unsigned int total_bits = BITS_PER_WORD; enum machine_mode mode; *************** extract_fixed_bit_field (tmode, op0, off *** 1559,1566 **** { /* Special treatment for a bit field split across two registers. */ if (bitsize + bitpos > BITS_PER_WORD) ! return extract_split_bit_field (op0, bitsize, bitpos, ! unsignedp, align); } else { --- 1581,1587 ---- { /* Special treatment for a bit field split across two registers. */ if (bitsize + bitpos > BITS_PER_WORD) ! return extract_split_bit_field (op0, bitsize, bitpos, unsignedp); } else { *************** extract_fixed_bit_field (tmode, op0, off *** 1568,1583 **** includes the entire field. If such a mode would be larger than a word, we won't be doing the extraction the normal way. */ ! mode = get_best_mode (bitsize, bitpos + offset * BITS_PER_UNIT, align, ! word_mode, ! GET_CODE (op0) == MEM && MEM_VOLATILE_P (op0)); if (mode == VOIDmode) /* The only way this should occur is if the field spans word boundaries. */ return extract_split_bit_field (op0, bitsize, bitpos + offset * BITS_PER_UNIT, ! unsignedp, align); total_bits = GET_MODE_BITSIZE (mode); --- 1589,1603 ---- includes the entire field. If such a mode would be larger than a word, we won't be doing the extraction the normal way. */ ! mode = get_best_mode (bitsize, bitpos + offset * BITS_PER_UNIT, ! MEM_ALIGN (op0), word_mode, MEM_VOLATILE_P (op0)); if (mode == VOIDmode) /* The only way this should occur is if the field spans word boundaries. */ return extract_split_bit_field (op0, bitsize, bitpos + offset * BITS_PER_UNIT, ! unsignedp); total_bits = GET_MODE_BITSIZE (mode); *************** extract_fixed_bit_field (tmode, op0, off *** 1597,1615 **** Then alter OP0 to refer to that word. */ bitpos += (offset % (total_bits / BITS_PER_UNIT)) * BITS_PER_UNIT; offset -= (offset % (total_bits / BITS_PER_UNIT)); ! op0 = change_address (op0, mode, ! plus_constant (XEXP (op0, 0), offset)); } mode = GET_MODE (op0); if (BYTES_BIG_ENDIAN) ! { ! /* BITPOS is the distance between our msb and that of OP0. ! Convert it to the distance from the lsb. */ ! ! bitpos = total_bits - bitsize - bitpos; ! } /* Now BITPOS is always the distance between the field's lsb and that of OP0. We have reduced the big-endian case to the little-endian case. */ --- 1617,1631 ---- Then alter OP0 to refer to that word. */ bitpos += (offset % (total_bits / BITS_PER_UNIT)) * BITS_PER_UNIT; offset -= (offset % (total_bits / BITS_PER_UNIT)); ! op0 = adjust_address (op0, mode, offset); } mode = GET_MODE (op0); if (BYTES_BIG_ENDIAN) ! /* BITPOS is the distance between our msb and that of OP0. ! Convert it to the distance from the lsb. */ ! bitpos = total_bits - bitsize - bitpos; /* Now BITPOS is always the distance between the field's lsb and that of OP0. We have reduced the big-endian case to the little-endian case. */ *************** extract_fixed_bit_field (tmode, op0, off *** 1636,1651 **** /* Unless the msb of the field used to be the msb when we shifted, mask out the upper bits. */ ! if (GET_MODE_BITSIZE (mode) != bitpos + bitsize ! #if 0 ! #ifdef SLOW_ZERO_EXTEND ! /* Always generate an `and' if ! we just zero-extended op0 and SLOW_ZERO_EXTEND, since it ! will combine fruitfully with the zero-extend. */ ! || tmode != mode ! #endif ! #endif ! ) return expand_binop (GET_MODE (op0), and_optab, op0, mask_rtx (GET_MODE (op0), 0, bitsize, 0), target, 1, OPTAB_LIB_WIDEN); --- 1652,1658 ---- /* Unless the msb of the field used to be the msb when we shifted, mask out the upper bits. */ ! if (GET_MODE_BITSIZE (mode) != bitpos + bitsize) return expand_binop (GET_MODE (op0), and_optab, op0, mask_rtx (GET_MODE (op0), 0, bitsize, 0), target, 1, OPTAB_LIB_WIDEN); *************** extract_fixed_bit_field (tmode, op0, off *** 1670,1676 **** if (GET_MODE_BITSIZE (mode) != (bitsize + bitpos)) { ! tree amount = build_int_2 (GET_MODE_BITSIZE (mode) - (bitsize + bitpos), 0); /* Maybe propagate the target for the shift. */ /* But not if we will return the result--could confuse integrate.c. */ rtx subtarget = (target != 0 && GET_CODE (target) == REG --- 1677,1684 ---- if (GET_MODE_BITSIZE (mode) != (bitsize + bitpos)) { ! tree amount ! = build_int_2 (GET_MODE_BITSIZE (mode) - (bitsize + bitpos), 0); /* Maybe propagate the target for the shift. */ /* But not if we will return the result--could confuse integrate.c. */ rtx subtarget = (target != 0 && GET_CODE (target) == REG *************** extract_fixed_bit_field (tmode, op0, off *** 1680,1686 **** } return expand_shift (RSHIFT_EXPR, mode, op0, ! build_int_2 (GET_MODE_BITSIZE (mode) - bitsize, 0), target, 0); } --- 1688,1694 ---- } return expand_shift (RSHIFT_EXPR, mode, op0, ! build_int_2 (GET_MODE_BITSIZE (mode) - bitsize, 0), target, 0); } *************** mask_rtx (mode, bitpos, bitsize, complem *** 1705,1711 **** if (bitpos + bitsize < HOST_BITS_PER_WIDE_INT) masklow &= ((unsigned HOST_WIDE_INT) -1 >> (HOST_BITS_PER_WIDE_INT - bitpos - bitsize)); ! if (bitpos <= HOST_BITS_PER_WIDE_INT) maskhigh = -1; else --- 1713,1719 ---- if (bitpos + bitsize < HOST_BITS_PER_WIDE_INT) masklow &= ((unsigned HOST_WIDE_INT) -1 >> (HOST_BITS_PER_WIDE_INT - bitpos - bitsize)); ! if (bitpos <= HOST_BITS_PER_WIDE_INT) maskhigh = -1; else *************** lshift_value (mode, value, bitpos, bitsi *** 1760,1776 **** OP0 is the REG, SUBREG or MEM rtx for the first of the two words. BITSIZE is the field width; BITPOS, position of its first bit, in the word. ! UNSIGNEDP is 1 if should zero-extend the contents; else sign-extend. ! ! ALIGN is the known alignment of OP0. This is also the size of the ! memory objects to be used. */ static rtx ! extract_split_bit_field (op0, bitsize, bitpos, unsignedp, align) rtx op0; unsigned HOST_WIDE_INT bitsize, bitpos; int unsignedp; - unsigned int align; { unsigned int unit; unsigned int bitsdone = 0; --- 1768,1780 ---- OP0 is the REG, SUBREG or MEM rtx for the first of the two words. BITSIZE is the field width; BITPOS, position of its first bit, in the word. ! UNSIGNEDP is 1 if should zero-extend the contents; else sign-extend. */ static rtx ! extract_split_bit_field (op0, bitsize, bitpos, unsignedp) rtx op0; unsigned HOST_WIDE_INT bitsize, bitpos; int unsignedp; { unsigned int unit; unsigned int bitsdone = 0; *************** extract_split_bit_field (op0, bitsize, b *** 1782,1788 **** if (GET_CODE (op0) == REG || GET_CODE (op0) == SUBREG) unit = BITS_PER_WORD; else ! unit = MIN (align, BITS_PER_WORD); while (bitsdone < bitsize) { --- 1786,1792 ---- if (GET_CODE (op0) == REG || GET_CODE (op0) == SUBREG) unit = BITS_PER_WORD; else ! unit = MIN (MEM_ALIGN (op0), BITS_PER_WORD); while (bitsdone < bitsize) { *************** extract_split_bit_field (op0, bitsize, b *** 1808,1815 **** the current word starting from the base register. */ if (GET_CODE (op0) == SUBREG) { ! word = operand_subword_force (SUBREG_REG (op0), ! SUBREG_WORD (op0) + offset, GET_MODE (SUBREG_REG (op0))); offset = 0; } --- 1812,1819 ---- the current word starting from the base register. */ if (GET_CODE (op0) == SUBREG) { ! int word_offset = (SUBREG_BYTE (op0) / UNITS_PER_WORD) + offset; ! word = operand_subword_force (SUBREG_REG (op0), word_offset, GET_MODE (SUBREG_REG (op0))); offset = 0; } *************** extract_split_bit_field (op0, bitsize, b *** 1827,1833 **** extract_fixed_bit_field wants offset in bytes. */ part = extract_fixed_bit_field (word_mode, word, offset * unit / BITS_PER_UNIT, ! thissize, thispos, 0, 1, align); bitsdone += thissize; /* Shift this part into place for the result. */ --- 1831,1837 ---- extract_fixed_bit_field wants offset in bytes. */ part = extract_fixed_bit_field (word_mode, word, offset * unit / BITS_PER_UNIT, ! thissize, thispos, 0, 1); bitsdone += thissize; /* Shift this part into place for the result. */ *************** expand_dec (target, dec) *** 1902,1916 **** rtx expand_shift (code, mode, shifted, amount, target, unsignedp) enum tree_code code; ! register enum machine_mode mode; rtx shifted; tree amount; ! register rtx target; int unsignedp; { ! register rtx op1, temp = 0; ! register int left = (code == LSHIFT_EXPR || code == LROTATE_EXPR); ! register int rotate = (code == LROTATE_EXPR || code == RROTATE_EXPR); int try; /* Previously detected shift-counts computed by NEGATE_EXPR --- 1906,1920 ---- rtx expand_shift (code, mode, shifted, amount, target, unsignedp) enum tree_code code; ! enum machine_mode mode; rtx shifted; tree amount; ! rtx target; int unsignedp; { ! rtx op1, temp = 0; ! int left = (code == LSHIFT_EXPR || code == LROTATE_EXPR); ! int rotate = (code == LROTATE_EXPR || code == RROTATE_EXPR); int try; /* Previously detected shift-counts computed by NEGATE_EXPR *************** expand_shift (code, mode, shifted, amoun *** 1928,1934 **** op1 = GEN_INT ((unsigned HOST_WIDE_INT) INTVAL (op1) % GET_MODE_BITSIZE (mode)); else if (GET_CODE (op1) == SUBREG ! && SUBREG_WORD (op1) == 0) op1 = SUBREG_REG (op1); } #endif --- 1932,1938 ---- op1 = GEN_INT ((unsigned HOST_WIDE_INT) INTVAL (op1) % GET_MODE_BITSIZE (mode)); else if (GET_CODE (op1) == SUBREG ! && SUBREG_BYTE (op1) == 0) op1 = SUBREG_REG (op1); } #endif *************** expand_shift (code, mode, shifted, amoun *** 1995,2004 **** that is in range, try a rotate in the opposite direction. */ if (temp == 0 && GET_CODE (op1) == CONST_INT ! && INTVAL (op1) > 0 && INTVAL (op1) < GET_MODE_BITSIZE (mode)) temp = expand_binop (mode, left ? rotr_optab : rotl_optab, ! shifted, GEN_INT (GET_MODE_BITSIZE (mode) - INTVAL (op1)), target, unsignedp, methods); --- 1999,2009 ---- that is in range, try a rotate in the opposite direction. */ if (temp == 0 && GET_CODE (op1) == CONST_INT ! && INTVAL (op1) > 0 ! && (unsigned int) INTVAL (op1) < GET_MODE_BITSIZE (mode)) temp = expand_binop (mode, left ? rotr_optab : rotl_optab, ! shifted, GEN_INT (GET_MODE_BITSIZE (mode) - INTVAL (op1)), target, unsignedp, methods); *************** expand_shift (code, mode, shifted, amoun *** 2029,2035 **** } /* We used to try extzv here for logical right shifts, but that was ! only useful for one machine, the VAX, and caused poor code generation there for lshrdi3, so the code was deleted and a define_expand for lshrsi3 was added to vax.md. */ } --- 2034,2040 ---- } /* We used to try extzv here for logical right shifts, but that was ! only useful for one machine, the VAX, and caused poor code generation there for lshrdi3, so the code was deleted and a define_expand for lshrsi3 was added to vax.md. */ } *************** synth_mult (alg_out, t, cost_limit) *** 2170,2176 **** for (w = 1; (w & t) != 0; w <<= 1) ; /* If T was -1, then W will be zero after the loop. This is another ! case where T ends with ...111. Handling this with (T + 1) and subtract 1 produces slightly better code and results in algorithm selection much faster than treating it like the ...0111 case below. */ --- 2175,2181 ---- for (w = 1; (w & t) != 0; w <<= 1) ; /* If T was -1, then W will be zero after the loop. This is another ! case where T ends with ...111. Handling this with (T + 1) and subtract 1 produces slightly better code and results in algorithm selection much faster than treating it like the ...0111 case below. */ *************** synth_mult (alg_out, t, cost_limit) *** 2341,2347 **** rtx expand_mult (mode, op0, op1, target, unsignedp) enum machine_mode mode; ! register rtx op0, op1, target; int unsignedp; { rtx const_op1 = op1; --- 2346,2352 ---- rtx expand_mult (mode, op0, op1, target, unsignedp) enum machine_mode mode; ! rtx op0, op1, target; int unsignedp; { rtx const_op1 = op1; *************** expand_mult (mode, op0, op1, target, uns *** 2381,2386 **** --- 2386,2395 ---- int mult_cost; enum {basic_variant, negate_variant, add_variant} variant = basic_variant; + /* op0 must be register to make mult_cost match the precomputed + shiftadd_cost array. */ + op0 = force_reg (mode, op0); + /* Try to do the computation three ways: multiply by the negative of OP1 and then negate, do the multiplication directly, or do multiplication by OP1 - 1. */ *************** expand_mult (mode, op0, op1, target, uns *** 2446,2452 **** && ! preserve) ? target : 0; rtx accum_target = preserve ? 0 : accum; ! switch (alg.op[opno]) { case alg_shift: --- 2455,2461 ---- && ! preserve) ? target : 0; rtx accum_target = preserve ? 0 : accum; ! switch (alg.op[opno]) { case alg_shift: *************** expand_mult (mode, op0, op1, target, uns *** 2528,2534 **** } insn = get_last_insn (); ! set_unique_reg_note (insn, REG_EQUAL, gen_rtx_MULT (nmode, tem, GEN_INT (val_so_far))); --- 2537,2543 ---- } insn = get_last_insn (); ! set_unique_reg_note (insn, REG_EQUAL, gen_rtx_MULT (nmode, tem, GEN_INT (val_so_far))); *************** expand_mult (mode, op0, op1, target, uns *** 2554,2560 **** /* This used to use umul_optab if unsigned, but for non-widening multiply there is no difference between signed and unsigned. */ ! op0 = expand_binop (mode, ! unsignedp && flag_trapv && (GET_MODE_CLASS(mode) == MODE_INT) ? smulv_optab : smul_optab, --- 2563,2569 ---- /* This used to use umul_optab if unsigned, but for non-widening multiply there is no difference between signed and unsigned. */ ! op0 = expand_binop (mode, ! unsignedp && flag_trapv && (GET_MODE_CLASS(mode) == MODE_INT) ? smulv_optab : smul_optab, *************** choose_multiplier (d, n, precision, mult *** 2650,2656 **** abort (); /* assert that mlow < mhigh. */ if (! (mlow_hi < mhigh_hi || (mlow_hi == mhigh_hi && mlow_lo < mhigh_lo))) ! abort(); /* If precision == N, then mlow, mhigh exceed 2^N (but they do not exceed 2^(N+1)). */ --- 2659,2665 ---- abort (); /* assert that mlow < mhigh. */ if (! (mlow_hi < mhigh_hi || (mlow_hi == mhigh_hi && mlow_lo < mhigh_lo))) ! abort (); /* If precision == N, then mlow, mhigh exceed 2^N (but they do not exceed 2^(N+1)). */ *************** invert_mod2n (x, n) *** 2727,2733 **** rtx expand_mult_highpart_adjust (mode, adj_operand, op0, op1, target, unsignedp) enum machine_mode mode; ! register rtx adj_operand, op0, op1, target; int unsignedp; { rtx tem; --- 2736,2742 ---- rtx expand_mult_highpart_adjust (mode, adj_operand, op0, op1, target, unsignedp) enum machine_mode mode; ! rtx adj_operand, op0, op1, target; int unsignedp; { rtx tem; *************** expand_mult_highpart_adjust (mode, adj_o *** 2736,2742 **** tem = expand_shift (RSHIFT_EXPR, mode, op0, build_int_2 (GET_MODE_BITSIZE (mode) - 1, 0), NULL_RTX, 0); ! tem = expand_and (tem, op1, NULL_RTX); adj_operand = force_operand (gen_rtx_fmt_ee (adj_code, mode, adj_operand, tem), adj_operand); --- 2745,2751 ---- tem = expand_shift (RSHIFT_EXPR, mode, op0, build_int_2 (GET_MODE_BITSIZE (mode) - 1, 0), NULL_RTX, 0); ! tem = expand_and (mode, tem, op1, NULL_RTX); adj_operand = force_operand (gen_rtx_fmt_ee (adj_code, mode, adj_operand, tem), adj_operand); *************** expand_mult_highpart_adjust (mode, adj_o *** 2744,2750 **** tem = expand_shift (RSHIFT_EXPR, mode, op1, build_int_2 (GET_MODE_BITSIZE (mode) - 1, 0), NULL_RTX, 0); ! tem = expand_and (tem, op0, NULL_RTX); target = force_operand (gen_rtx_fmt_ee (adj_code, mode, adj_operand, tem), target); --- 2753,2759 ---- tem = expand_shift (RSHIFT_EXPR, mode, op1, build_int_2 (GET_MODE_BITSIZE (mode) - 1, 0), NULL_RTX, 0); ! tem = expand_and (mode, tem, op0, NULL_RTX); target = force_operand (gen_rtx_fmt_ee (adj_code, mode, adj_operand, tem), target); *************** expand_mult_highpart_adjust (mode, adj_o *** 2764,2770 **** rtx expand_mult_highpart (mode, op0, cnst1, target, unsignedp, max_cost) enum machine_mode mode; ! register rtx op0, target; unsigned HOST_WIDE_INT cnst1; int unsignedp; int max_cost; --- 2773,2779 ---- rtx expand_mult_highpart (mode, op0, cnst1, target, unsignedp, max_cost) enum machine_mode mode; ! rtx op0, target; unsigned HOST_WIDE_INT cnst1; int unsignedp; int max_cost; *************** expand_mult_highpart (mode, op0, cnst1, *** 2780,2796 **** if (size > HOST_BITS_PER_WIDE_INT) abort (); ! op1 = GEN_INT (cnst1); ! if (GET_MODE_BITSIZE (wider_mode) <= HOST_BITS_PER_INT) ! wide_op1 = op1; ! else ! wide_op1 ! = immed_double_const (cnst1, ! (unsignedp ! ? (HOST_WIDE_INT) 0 ! : -(cnst1 >> (HOST_BITS_PER_WIDE_INT - 1))), ! wider_mode); /* expand_mult handles constant multiplication of word_mode or narrower. It does a poor job for large modes. */ --- 2789,2802 ---- if (size > HOST_BITS_PER_WIDE_INT) abort (); ! op1 = GEN_INT (trunc_int_for_mode (cnst1, mode)); ! wide_op1 ! = immed_double_const (cnst1, ! (unsignedp ! ? (HOST_WIDE_INT) 0 ! : -(cnst1 >> (HOST_BITS_PER_WIDE_INT - 1))), ! wider_mode); /* expand_mult handles constant multiplication of word_mode or narrower. It does a poor job for large modes. */ *************** expand_mult_highpart (mode, op0, cnst1, *** 2845,2851 **** { op1 = force_reg (mode, op1); goto try; ! } /* Try widening the mode and perform a non-widening multiplication. */ moptab = smul_optab; --- 2851,2857 ---- { op1 = force_reg (mode, op1); goto try; ! } /* Try widening the mode and perform a non-widening multiplication. */ moptab = smul_optab; *************** expand_divmod (rem_flag, code, mode, op0 *** 2946,2956 **** int rem_flag; enum tree_code code; enum machine_mode mode; ! register rtx op0, op1, target; int unsignedp; { enum machine_mode compute_mode; ! register rtx tquotient; rtx quotient = 0, remainder = 0; rtx last; int size; --- 2952,2962 ---- int rem_flag; enum tree_code code; enum machine_mode mode; ! rtx op0, op1, target; int unsignedp; { enum machine_mode compute_mode; ! rtx tquotient; rtx quotient = 0, remainder = 0; rtx last; int size; *************** expand_divmod (rem_flag, code, mode, op0 *** 3252,3258 **** if (insn != last && (set = single_set (insn)) != 0 && SET_DEST (set) == quotient) ! set_unique_reg_note (insn, REG_EQUAL, gen_rtx_UDIV (compute_mode, op0, op1)); } --- 3258,3264 ---- if (insn != last && (set = single_set (insn)) != 0 && SET_DEST (set) == quotient) ! set_unique_reg_note (insn, REG_EQUAL, gen_rtx_UDIV (compute_mode, op0, op1)); } *************** expand_divmod (rem_flag, code, mode, op0 *** 3267,3273 **** if (rem_flag && d < 0) { d = abs_d; ! op1 = GEN_INT (abs_d); } if (d == 1) --- 3273,3279 ---- if (rem_flag && d < 0) { d = abs_d; ! op1 = GEN_INT (trunc_int_for_mode (abs_d, compute_mode)); } if (d == 1) *************** expand_divmod (rem_flag, code, mode, op0 *** 3306,3312 **** t1 = copy_to_mode_reg (compute_mode, op0); do_cmp_and_jump (t1, const0_rtx, GE, compute_mode, label); ! expand_inc (t1, GEN_INT (abs_d - 1)); emit_label (label); quotient = expand_shift (RSHIFT_EXPR, compute_mode, t1, build_int_2 (lgup, 0), --- 3312,3319 ---- t1 = copy_to_mode_reg (compute_mode, op0); do_cmp_and_jump (t1, const0_rtx, GE, compute_mode, label); ! expand_inc (t1, GEN_INT (trunc_int_for_mode ! (abs_d - 1, compute_mode))); emit_label (label); quotient = expand_shift (RSHIFT_EXPR, compute_mode, t1, build_int_2 (lgup, 0), *************** expand_divmod (rem_flag, code, mode, op0 *** 3339,3349 **** && SET_DEST (set) == quotient && abs_d < ((unsigned HOST_WIDE_INT) 1 << (HOST_BITS_PER_WIDE_INT - 1))) ! set_unique_reg_note (insn, REG_EQUAL, gen_rtx_DIV (compute_mode, op0, ! GEN_INT (abs_d))); quotient = expand_unop (compute_mode, neg_optab, quotient, quotient, 0); --- 3346,3359 ---- && SET_DEST (set) == quotient && abs_d < ((unsigned HOST_WIDE_INT) 1 << (HOST_BITS_PER_WIDE_INT - 1))) ! set_unique_reg_note (insn, REG_EQUAL, gen_rtx_DIV (compute_mode, op0, ! GEN_INT ! (trunc_int_for_mode ! (abs_d, ! compute_mode)))); quotient = expand_unop (compute_mode, neg_optab, quotient, quotient, 0); *************** expand_divmod (rem_flag, code, mode, op0 *** 3427,3433 **** if (insn != last && (set = single_set (insn)) != 0 && SET_DEST (set) == quotient) ! set_unique_reg_note (insn, REG_EQUAL, gen_rtx_DIV (compute_mode, op0, op1)); } --- 3437,3443 ---- if (insn != last && (set = single_set (insn)) != 0 && SET_DEST (set) == quotient) ! set_unique_reg_note (insn, REG_EQUAL, gen_rtx_DIV (compute_mode, op0, op1)); } *************** expand_divmod (rem_flag, code, mode, op0 *** 3842,3849 **** ml = invert_mod2n (d >> pre_shift, size); t1 = expand_shift (RSHIFT_EXPR, compute_mode, op0, build_int_2 (pre_shift, 0), NULL_RTX, unsignedp); ! quotient = expand_mult (compute_mode, t1, GEN_INT (ml), NULL_RTX, ! 0); insn = get_last_insn (); set_unique_reg_note (insn, --- 3852,3861 ---- ml = invert_mod2n (d >> pre_shift, size); t1 = expand_shift (RSHIFT_EXPR, compute_mode, op0, build_int_2 (pre_shift, 0), NULL_RTX, unsignedp); ! quotient = expand_mult (compute_mode, t1, ! GEN_INT (trunc_int_for_mode ! (ml, compute_mode)), ! NULL_RTX, 0); insn = get_last_insn (); set_unique_reg_note (insn, *************** expand_divmod (rem_flag, code, mode, op0 *** 3918,3924 **** emit_label (label); } return gen_lowpart (mode, rem_flag ? remainder : quotient); ! default: abort (); } --- 3930,3936 ---- emit_label (label); } return gen_lowpart (mode, rem_flag ? remainder : quotient); ! default: abort (); } *************** expand_divmod (rem_flag, code, mode, op0 *** 3931,3938 **** if (rem_flag) { /* Try to produce the remainder without producing the quotient. ! If we seem to have a divmod patten that does not require widening, ! don't try windening here. We should really have an WIDEN argument to expand_twoval_binop, since what we'd really like to do here is 1) try a mod insn in compute_mode 2) try a divmod insn in compute_mode --- 3943,3950 ---- if (rem_flag) { /* Try to produce the remainder without producing the quotient. ! If we seem to have a divmod pattern that does not require widening, ! don't try widening here. We should really have an WIDEN argument to expand_twoval_binop, since what we'd really like to do here is 1) try a mod insn in compute_mode 2) try a divmod insn in compute_mode *************** expand_divmod (rem_flag, code, mode, op0 *** 4023,4029 **** /* Return a tree node with data type TYPE, describing the value of X. Usually this is an RTL_EXPR, if there is no obvious better choice. X may be an expression, however we only support those expressions ! generated by loop.c. */ tree make_tree (type, x) --- 4035,4041 ---- /* Return a tree node with data type TYPE, describing the value of X. Usually this is an RTL_EXPR, if there is no obvious better choice. X may be an expression, however we only support those expressions ! generated by loop.c. */ tree make_tree (type, x) *************** make_tree (type, x) *** 4057,4095 **** } return t; ! case PLUS: return fold (build (PLUS_EXPR, type, make_tree (type, XEXP (x, 0)), make_tree (type, XEXP (x, 1)))); ! case MINUS: return fold (build (MINUS_EXPR, type, make_tree (type, XEXP (x, 0)), make_tree (type, XEXP (x, 1)))); ! case NEG: return fold (build1 (NEGATE_EXPR, type, make_tree (type, XEXP (x, 0)))); case MULT: return fold (build (MULT_EXPR, type, make_tree (type, XEXP (x, 0)), make_tree (type, XEXP (x, 1)))); ! case ASHIFT: return fold (build (LSHIFT_EXPR, type, make_tree (type, XEXP (x, 0)), make_tree (type, XEXP (x, 1)))); ! case LSHIFTRT: return fold (convert (type, build (RSHIFT_EXPR, unsigned_type (type), make_tree (unsigned_type (type), XEXP (x, 0)), make_tree (type, XEXP (x, 1))))); ! case ASHIFTRT: return fold (convert (type, build (RSHIFT_EXPR, signed_type (type), make_tree (signed_type (type), XEXP (x, 0)), make_tree (type, XEXP (x, 1))))); ! case DIV: if (TREE_CODE (type) != REAL_TYPE) t = signed_type (type); --- 4069,4125 ---- } return t; ! ! case CONST_VECTOR: ! { ! int i, units; ! rtx elt; ! tree t = NULL_TREE; ! ! units = CONST_VECTOR_NUNITS (x); ! ! /* Build a tree with vector elements. */ ! for (i = units - 1; i >= 0; --i) ! { ! elt = CONST_VECTOR_ELT (x, i); ! t = tree_cons (NULL_TREE, make_tree (type, elt), t); ! } ! ! return build_vector (type, t); ! } ! case PLUS: return fold (build (PLUS_EXPR, type, make_tree (type, XEXP (x, 0)), make_tree (type, XEXP (x, 1)))); ! case MINUS: return fold (build (MINUS_EXPR, type, make_tree (type, XEXP (x, 0)), make_tree (type, XEXP (x, 1)))); ! case NEG: return fold (build1 (NEGATE_EXPR, type, make_tree (type, XEXP (x, 0)))); case MULT: return fold (build (MULT_EXPR, type, make_tree (type, XEXP (x, 0)), make_tree (type, XEXP (x, 1)))); ! case ASHIFT: return fold (build (LSHIFT_EXPR, type, make_tree (type, XEXP (x, 0)), make_tree (type, XEXP (x, 1)))); ! case LSHIFTRT: return fold (convert (type, build (RSHIFT_EXPR, unsigned_type (type), make_tree (unsigned_type (type), XEXP (x, 0)), make_tree (type, XEXP (x, 1))))); ! case ASHIFTRT: return fold (convert (type, build (RSHIFT_EXPR, signed_type (type), make_tree (signed_type (type), XEXP (x, 0)), make_tree (type, XEXP (x, 1))))); ! case DIV: if (TREE_CODE (type) != REAL_TYPE) t = signed_type (type); *************** expand_mult_add (x, target, mult, add, m *** 4157,4179 **** If TARGET is 0, a pseudo-register or constant is returned. */ rtx ! expand_and (op0, op1, target) rtx op0, op1, target; { ! enum machine_mode mode = VOIDmode; ! rtx tem; ! ! if (GET_MODE (op0) != VOIDmode) ! mode = GET_MODE (op0); ! else if (GET_MODE (op1) != VOIDmode) ! mode = GET_MODE (op1); ! if (mode != VOIDmode) tem = expand_binop (mode, and_optab, op0, op1, target, 0, OPTAB_LIB_WIDEN); - else if (GET_CODE (op0) == CONST_INT && GET_CODE (op1) == CONST_INT) - tem = GEN_INT (INTVAL (op0) & INTVAL (op1)); - else - abort (); if (target == 0) target = tem; --- 4187,4202 ---- If TARGET is 0, a pseudo-register or constant is returned. */ rtx ! expand_and (mode, op0, op1, target) ! enum machine_mode mode; rtx op0, op1, target; { ! rtx tem = 0; ! if (GET_MODE (op0) == VOIDmode && GET_MODE (op1) == VOIDmode) ! tem = simplify_binary_operation (AND, mode, op0, op1); ! if (tem == 0) tem = expand_binop (mode, and_optab, op0, op1, target, 0, OPTAB_LIB_WIDEN); if (target == 0) target = tem; *************** expand_and (op0, op1, target) *** 4187,4193 **** Return 0 if that cannot be done. MODE is the mode to use for OP0 and OP1 should they be CONST_INTs. If ! it is VOIDmode, they cannot both be CONST_INT. UNSIGNEDP is for the case where we have to widen the operands to perform the operation. It says to use zero-extension. --- 4210,4216 ---- Return 0 if that cannot be done. MODE is the mode to use for OP0 and OP1 should they be CONST_INTs. If ! it is VOIDmode, they cannot both be CONST_INT. UNSIGNEDP is for the case where we have to widen the operands to perform the operation. It says to use zero-extension. *************** emit_store_flag (target, code, op0, op1, *** 4214,4227 **** rtx last = get_last_insn (); rtx pattern, comparison; if (unsignedp) code = unsigned_condition (code); /* If one operand is constant, make it the second one. Only do this if the other operand is not constant as well. */ ! if ((CONSTANT_P (op0) && ! CONSTANT_P (op1)) ! || (GET_CODE (op0) == CONST_INT && GET_CODE (op1) != CONST_INT)) { tem = op0; op0 = op1; --- 4237,4253 ---- rtx last = get_last_insn (); rtx pattern, comparison; + /* ??? Ok to do this and then fail? */ + op0 = protect_from_queue (op0, 0); + op1 = protect_from_queue (op1, 0); + if (unsignedp) code = unsigned_condition (code); /* If one operand is constant, make it the second one. Only do this if the other operand is not constant as well. */ ! if (swap_commutative_operands_p (op0, op1)) { tem = op0; op0 = op1; *************** emit_store_flag (target, code, op0, op1, *** 4232,4238 **** if (mode == VOIDmode) mode = GET_MODE (op0); ! /* For some comparisons with 1 and -1, we can convert this to comparisons with zero. This will often produce more opportunities for store-flag insns. */ --- 4258,4264 ---- if (mode == VOIDmode) mode = GET_MODE (op0); ! /* For some comparisons with 1 and -1, we can convert this to comparisons with zero. This will often produce more opportunities for store-flag insns. */ *************** emit_store_flag (target, code, op0, op1, *** 4270,4276 **** the comparison into one involving a single word. */ if (GET_MODE_BITSIZE (mode) == BITS_PER_WORD * 2 && GET_MODE_CLASS (mode) == MODE_INT ! && op1 == const0_rtx) { if (code == EQ || code == NE) { --- 4296,4303 ---- the comparison into one involving a single word. */ if (GET_MODE_BITSIZE (mode) == BITS_PER_WORD * 2 && GET_MODE_CLASS (mode) == MODE_INT ! && op1 == const0_rtx ! && (GET_CODE (op0) != MEM || ! MEM_VOLATILE_P (op0))) { if (code == EQ || code == NE) { *************** emit_store_flag (target, code, op0, op1, *** 4351,4369 **** last = get_last_insn (); comparison ! = compare_from_rtx (op0, op1, code, unsignedp, mode, NULL_RTX, 0); if (GET_CODE (comparison) == CONST_INT) return (comparison == const0_rtx ? const0_rtx : normalizep == 1 ? const1_rtx : normalizep == -1 ? constm1_rtx : const_true_rtx); ! /* If the code of COMPARISON doesn't match CODE, something is ! wrong; we can no longer be sure that we have the operation. ! We could handle this case, but it should not happen. */ ! if (GET_CODE (comparison) != code) ! abort (); /* Get a reference to the target in the proper mode for this insn. */ compare_mode = insn_data[(int) icode].operand[0].mode; --- 4378,4397 ---- last = get_last_insn (); comparison ! = compare_from_rtx (op0, op1, code, unsignedp, mode, NULL_RTX); if (GET_CODE (comparison) == CONST_INT) return (comparison == const0_rtx ? const0_rtx : normalizep == 1 ? const1_rtx : normalizep == -1 ? constm1_rtx : const_true_rtx); ! /* The code of COMPARISON may not match CODE if compare_from_rtx ! decided to swap its operands and reverse the original code. ! We know that compare_from_rtx returns either a CONST_INT or ! a new comparison code, so it is safe to just extract the ! code from COMPARISON. */ ! code = GET_CODE (comparison); /* Get a reference to the target in the proper mode for this insn. */ compare_mode = insn_data[(int) icode].operand[0].mode; *************** emit_store_flag (target, code, op0, op1, *** 4427,4440 **** subtarget, normalizep == 1); else if (STORE_FLAG_VALUE & 1) { ! op0 = expand_and (op0, const1_rtx, subtarget); if (normalizep == -1) op0 = expand_unop (compare_mode, neg_optab, op0, op0, 0); } else abort (); ! /* If we were converting to a smaller mode, do the conversion now. */ if (target_mode != compare_mode) { --- 4455,4468 ---- subtarget, normalizep == 1); else if (STORE_FLAG_VALUE & 1) { ! op0 = expand_and (compare_mode, op0, const1_rtx, subtarget); if (normalizep == -1) op0 = expand_unop (compare_mode, neg_optab, op0, op0, 0); } else abort (); ! /* If we were converting to a smaller mode, do the conversion now. */ if (target_mode != compare_mode) { *************** emit_store_flag (target, code, op0, op1, *** 4479,4485 **** return tem; } ! /* Some other cases we can do are EQ, NE, LE, and GT comparisons with the constant zero. Reject all other comparisons at this point. Only do LE and GT if branches are expensive since they are expensive on 2-operand machines. */ --- 4507,4513 ---- return tem; } ! /* Some other cases we can do are EQ, NE, LE, and GT comparisons with the constant zero. Reject all other comparisons at this point. Only do LE and GT if branches are expensive since they are expensive on 2-operand machines. */ *************** emit_store_flag (target, code, op0, op1, *** 4541,4563 **** tem = expand_binop (mode, sub_optab, tem, op0, subtarget, 0, OPTAB_WIDEN); } ! if (code == EQ || code == NE) { /* For EQ or NE, one way to do the comparison is to apply an operation that converts the operand into a positive number if it is non-zero or zero if it was originally zero. Then, for EQ, we subtract 1 and for NE we negate. This puts the result in the sign bit. Then we ! normalize with a shift, if needed. Two operations that can do the above actions are ABS and FFS, so try them. If that doesn't work, and MODE is smaller than a full word, we can use zero-extension to the wider mode (an unsigned conversion) as the operation. */ ! /* Note that ABS doesn't yield a positive number for INT_MIN, but ! that is compensated by the subsequent overflow when subtracting ! one / negating. */ if (abs_optab->handlers[(int) mode].insn_code != CODE_FOR_nothing) tem = expand_unop (mode, abs_optab, op0, subtarget, 1); --- 4569,4591 ---- tem = expand_binop (mode, sub_optab, tem, op0, subtarget, 0, OPTAB_WIDEN); } ! if (code == EQ || code == NE) { /* For EQ or NE, one way to do the comparison is to apply an operation that converts the operand into a positive number if it is non-zero or zero if it was originally zero. Then, for EQ, we subtract 1 and for NE we negate. This puts the result in the sign bit. Then we ! normalize with a shift, if needed. Two operations that can do the above actions are ABS and FFS, so try them. If that doesn't work, and MODE is smaller than a full word, we can use zero-extension to the wider mode (an unsigned conversion) as the operation. */ ! /* Note that ABS doesn't yield a positive number for INT_MIN, but ! that is compensated by the subsequent overflow when subtracting ! one / negating. */ if (abs_optab->handlers[(int) mode].insn_code != CODE_FOR_nothing) tem = expand_unop (mode, abs_optab, op0, subtarget, 1); *************** emit_store_flag_force (target, code, op0 *** 4651,4657 **** emit_move_insn (target, const1_rtx); label = gen_label_rtx (); ! do_compare_rtx_and_jump (op0, op1, code, unsignedp, mode, NULL_RTX, 0, NULL_RTX, label); emit_move_insn (target, const0_rtx); --- 4679,4685 ---- emit_move_insn (target, const1_rtx); label = gen_label_rtx (); ! do_compare_rtx_and_jump (op0, op1, code, unsignedp, mode, NULL_RTX, NULL_RTX, label); emit_move_insn (target, const0_rtx); *************** do_cmp_and_jump (arg1, arg2, op, mode, l *** 4709,4732 **** that's the only equality operations we do */ case EQ: if (arg2 != const0_rtx || mode != GET_MODE(arg1)) ! abort(); do_jump_by_parts_equality_rtx (arg1, label2, label); break; case NE: if (arg2 != const0_rtx || mode != GET_MODE(arg1)) ! abort(); do_jump_by_parts_equality_rtx (arg1, label, label2); break; default: ! abort(); } emit_label (label2); } else ! { ! emit_cmp_and_jump_insns (arg1, arg2, op, NULL_RTX, mode, 0, 0, label); ! } } --- 4737,4758 ---- that's the only equality operations we do */ case EQ: if (arg2 != const0_rtx || mode != GET_MODE(arg1)) ! abort (); do_jump_by_parts_equality_rtx (arg1, label2, label); break; case NE: if (arg2 != const0_rtx || mode != GET_MODE(arg1)) ! abort (); do_jump_by_parts_equality_rtx (arg1, label, label2); break; default: ! abort (); } emit_label (label2); } else ! emit_cmp_and_jump_insns (arg1, arg2, op, NULL_RTX, mode, 0, label); } diff -Nrc3pad gcc-3.0.4/gcc/expr.c gcc-3.1/gcc/expr.c *** gcc-3.0.4/gcc/expr.c Sat Dec 8 00:36:51 2001 --- gcc-3.1/gcc/expr.c Tue May 7 05:43:11 2002 *************** *** 1,23 **** /* Convert tree expression to rtl instructions, for GNU compiler. Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, ! 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" #include "system.h" --- 1,23 ---- /* Convert tree expression to rtl instructions, for GNU compiler. Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, ! 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" #include "system.h" *************** Boston, MA 02111-1307, USA. */ *** 31,44 **** --- 31,48 ---- #include "except.h" #include "function.h" #include "insn-config.h" + #include "insn-attr.h" /* Include expr.h after insn-config.h so we get HAVE_conditional_move. */ #include "expr.h" + #include "optabs.h" + #include "libfuncs.h" #include "recog.h" #include "reload.h" #include "output.h" #include "typeclass.h" #include "toplev.h" #include "ggc.h" + #include "langhooks.h" #include "intl.h" #include "tm_p.h" *************** Boston, MA 02111-1307, USA. */ *** 69,83 **** #define CASE_VECTOR_PC_RELATIVE 0 #endif - /* Hook called by safe_from_p for language-specific tree codes. It is - up to the language front-end to install a hook if it has any such - codes that safe_from_p needs to know about. Since same_from_p will - recursively explore the TREE_OPERANDs of an expression, this hook - should not reexamine those pieces. This routine may recursively - call safe_from_p; it should always pass `0' as the TOP_P - parameter. */ - int (*lang_safe_from_p) PARAMS ((rtx, tree)); - /* If this is nonzero, we do not bother generating VOLATILE around volatile memory references, and we are willing to output indirect addresses. If cse is to follow, we reject --- 73,78 ---- *************** int (*lang_safe_from_p) PARAMS ((rtx, tr *** 86,96 **** the same indirect address eventually. */ int cse_not_expected; - /* Don't check memory usage, since code is being emitted to check a memory - usage. Used when current_function_check_memory_usage is true, to avoid - infinite recursion. */ - static int in_check_memory_usage; - /* Chain of pending expressions for PLACEHOLDER_EXPR to replace. */ static tree placeholder_list = 0; --- 81,86 ---- *************** struct store_by_pieces *** 129,136 **** extern struct obstack permanent_obstack; - static rtx get_push_address PARAMS ((int)); - static rtx enqueue_insn PARAMS ((rtx, rtx)); static unsigned HOST_WIDE_INT move_by_pieces_ninsns PARAMS ((unsigned HOST_WIDE_INT, --- 119,124 ---- *************** static int is_zeros_p PARAMS ((tree)); *** 151,177 **** static int mostly_zeros_p PARAMS ((tree)); static void store_constructor_field PARAMS ((rtx, unsigned HOST_WIDE_INT, HOST_WIDE_INT, enum machine_mode, ! tree, tree, unsigned int, int, ! int)); ! static void store_constructor PARAMS ((tree, rtx, unsigned int, int, ! HOST_WIDE_INT)); static rtx store_field PARAMS ((rtx, HOST_WIDE_INT, HOST_WIDE_INT, enum machine_mode, ! tree, enum machine_mode, int, ! unsigned int, HOST_WIDE_INT, int)); ! static enum memory_use_mode ! get_memory_usage_from_modifier PARAMS ((enum expand_modifier)); ! static tree save_noncopied_parts PARAMS ((tree, tree)); ! static tree init_noncopied_parts PARAMS ((tree, tree)); ! static int fixed_type_p PARAMS ((tree)); static rtx var_rtx PARAMS ((tree)); ! static rtx expand_expr_unaligned PARAMS ((tree, unsigned int *)); static rtx expand_increment PARAMS ((tree, int, int)); static void do_jump_by_parts_greater PARAMS ((tree, int, rtx, rtx)); static void do_jump_by_parts_equality PARAMS ((tree, rtx, rtx)); static void do_compare_and_jump PARAMS ((tree, enum rtx_code, enum rtx_code, rtx, rtx)); static rtx do_store_flag PARAMS ((tree, rtx, enum machine_mode, int)); /* Record for each mode whether we can move a register directly to or from an object of that mode in memory. If we can't, we won't try --- 139,164 ---- static int mostly_zeros_p PARAMS ((tree)); static void store_constructor_field PARAMS ((rtx, unsigned HOST_WIDE_INT, HOST_WIDE_INT, enum machine_mode, ! tree, tree, int, int)); ! static void store_constructor PARAMS ((tree, rtx, int, HOST_WIDE_INT)); static rtx store_field PARAMS ((rtx, HOST_WIDE_INT, HOST_WIDE_INT, enum machine_mode, ! tree, enum machine_mode, int, tree, ! int)); static rtx var_rtx PARAMS ((tree)); ! static HOST_WIDE_INT highest_pow2_factor PARAMS ((tree)); ! static HOST_WIDE_INT highest_pow2_factor_for_type PARAMS ((tree, tree)); ! static int is_aligning_offset PARAMS ((tree, tree)); static rtx expand_increment PARAMS ((tree, int, int)); static void do_jump_by_parts_greater PARAMS ((tree, int, rtx, rtx)); static void do_jump_by_parts_equality PARAMS ((tree, rtx, rtx)); static void do_compare_and_jump PARAMS ((tree, enum rtx_code, enum rtx_code, rtx, rtx)); static rtx do_store_flag PARAMS ((tree, rtx, enum machine_mode, int)); + #ifdef PUSH_ROUNDING + static void emit_single_push_insn PARAMS ((enum machine_mode, rtx, tree)); + #endif + static void do_tablejump PARAMS ((rtx, enum machine_mode, rtx, rtx, rtx)); /* Record for each mode whether we can move a register directly to or from an object of that mode in memory. If we can't, we won't try *************** enqueue_insn (var, body) *** 362,371 **** rtx protect_from_queue (x, modify) ! register rtx x; int modify; { ! register RTX_CODE code = GET_CODE (x); #if 0 /* A QUEUED can hang around after the queue is forced out. */ /* Shortcut for most common case. */ --- 349,358 ---- rtx protect_from_queue (x, modify) ! rtx x; int modify; { ! RTX_CODE code = GET_CODE (x); #if 0 /* A QUEUED can hang around after the queue is forced out. */ /* Shortcut for most common case. */ *************** protect_from_queue (x, modify) *** 383,405 **** if (code == MEM && GET_MODE (x) != BLKmode && GET_CODE (XEXP (x, 0)) == QUEUED && !modify) { ! register rtx y = XEXP (x, 0); ! register rtx new = gen_rtx_MEM (GET_MODE (x), QUEUED_VAR (y)); ! ! MEM_COPY_ATTRIBUTES (new, x); if (QUEUED_INSN (y)) { ! register rtx temp = gen_reg_rtx (GET_MODE (new)); emit_insn_before (gen_move_insn (temp, new), QUEUED_INSN (y)); return temp; } /* Copy the address into a pseudo, so that the returned value remains correct across calls to emit_queue. */ ! XEXP (new, 0) = copy_to_reg (XEXP (new, 0)); ! return new; } /* Otherwise, recursively protect the subexpressions of all the kinds of rtx's that can contain a QUEUED. */ if (code == MEM) --- 370,392 ---- if (code == MEM && GET_MODE (x) != BLKmode && GET_CODE (XEXP (x, 0)) == QUEUED && !modify) { ! rtx y = XEXP (x, 0); ! rtx new = replace_equiv_address_nv (x, QUEUED_VAR (y)); if (QUEUED_INSN (y)) { ! rtx temp = gen_reg_rtx (GET_MODE (x)); ! emit_insn_before (gen_move_insn (temp, new), QUEUED_INSN (y)); return temp; } + /* Copy the address into a pseudo, so that the returned value remains correct across calls to emit_queue. */ ! return replace_equiv_address (new, copy_to_reg (XEXP (new, 0))); } + /* Otherwise, recursively protect the subexpressions of all the kinds of rtx's that can contain a QUEUED. */ if (code == MEM) *************** int *** 450,456 **** queued_subexp_p (x) rtx x; { ! register enum rtx_code code = GET_CODE (x); switch (code) { case QUEUED: --- 437,443 ---- queued_subexp_p (x) rtx x; { ! enum rtx_code code = GET_CODE (x); switch (code) { case QUEUED: *************** queued_subexp_p (x) *** 472,478 **** void emit_queue () { ! register rtx p; while ((p = pending_chain)) { rtx body = QUEUED_BODY (p); --- 459,465 ---- void emit_queue () { ! rtx p; while ((p = pending_chain)) { rtx body = QUEUED_BODY (p); *************** emit_queue () *** 495,501 **** void convert_move (to, from, unsignedp) ! register rtx to, from; int unsignedp; { enum machine_mode to_mode = GET_MODE (to); --- 482,488 ---- void convert_move (to, from, unsignedp) ! rtx to, from; int unsignedp; { enum machine_mode to_mode = GET_MODE (to); *************** convert_move (to, from, unsignedp) *** 540,548 **** abort (); if (VECTOR_MODE_P (to_mode)) ! from = gen_rtx_SUBREG (to_mode, from, 0); else ! to = gen_rtx_SUBREG (from_mode, to, 0); emit_move_insn (to, from); return; --- 527,535 ---- abort (); if (VECTOR_MODE_P (to_mode)) ! from = simplify_gen_subreg (to_mode, from, GET_MODE (from), 0); else ! to = simplify_gen_subreg (from_mode, to, GET_MODE (to), 0); emit_move_insn (to, from); return; *************** convert_move (to, from, unsignedp) *** 874,880 **** && STORE_FLAG_VALUE == -1) { emit_cmp_insn (lowfrom, const0_rtx, NE, NULL_RTX, ! lowpart_mode, 0, 0); fill_value = gen_reg_rtx (word_mode); emit_insn (gen_slt (fill_value)); } --- 861,867 ---- && STORE_FLAG_VALUE == -1) { emit_cmp_insn (lowfrom, const0_rtx, NE, NULL_RTX, ! lowpart_mode, 0); fill_value = gen_reg_rtx (word_mode); emit_insn (gen_slt (fill_value)); } *************** convert_move (to, from, unsignedp) *** 1067,1072 **** --- 1054,1062 ---- if ((code = can_extend_p (to_mode, from_mode, unsignedp)) != CODE_FOR_nothing) { + if (flag_force_mem) + from = force_not_mem (from); + emit_unop_insn (code, to, from, equiv_code); return; } *************** convert_modes (mode, oldmode, x, unsigne *** 1291,1297 **** rtx x; int unsignedp; { ! register rtx temp; /* If FROM is a SUBREG that indicates that we have already done at least the required extension, strip it. */ --- 1281,1287 ---- rtx x; int unsignedp; { ! rtx temp; /* If FROM is a SUBREG that indicates that we have already done at least the required extension, strip it. */ *************** convert_modes (mode, oldmode, x, unsigne *** 1364,1370 **** && (val & ((HOST_WIDE_INT) 1 << (width - 1)))) val |= (HOST_WIDE_INT) (-1) << width; ! return GEN_INT (val); } return gen_lowpart (mode, x); --- 1354,1360 ---- && (val & ((HOST_WIDE_INT) 1 << (width - 1)))) val |= (HOST_WIDE_INT) (-1) << width; ! return GEN_INT (trunc_int_for_mode (val, mode)); } return gen_lowpart (mode, x); *************** convert_modes (mode, oldmode, x, unsigne *** 1386,1395 **** #define MOVE_MAX_PIECES MOVE_MAX #endif ! /* Generate several move instructions to copy LEN bytes ! from block FROM to block TO. (These are MEM rtx's with BLKmode). ! The caller must pass FROM and TO ! through protect_from_queue before calling. ALIGN is maximum alignment we can assume. */ void --- 1376,1388 ---- #define MOVE_MAX_PIECES MOVE_MAX #endif ! /* Generate several move instructions to copy LEN bytes from block FROM to ! block TO. (These are MEM rtx's with BLKmode). The caller must pass FROM ! and TO through protect_from_queue before calling. ! ! If PUSH_ROUNDING is defined and TO is NULL, emit_single_push_insn is ! used to push FROM to the stack. ! ALIGN is maximum alignment we can assume. */ void *************** move_by_pieces (to, from, len, align) *** 1399,1417 **** unsigned int align; { struct move_by_pieces data; ! rtx to_addr = XEXP (to, 0), from_addr = XEXP (from, 0); unsigned int max_size = MOVE_MAX_PIECES + 1; enum machine_mode mode = VOIDmode, tmode; enum insn_code icode; data.offset = 0; - data.to_addr = to_addr; data.from_addr = from_addr; ! data.to = to; data.from = from; - data.autinc_to - = (GET_CODE (to_addr) == PRE_INC || GET_CODE (to_addr) == PRE_DEC - || GET_CODE (to_addr) == POST_INC || GET_CODE (to_addr) == POST_DEC); data.autinc_from = (GET_CODE (from_addr) == PRE_INC || GET_CODE (from_addr) == PRE_DEC || GET_CODE (from_addr) == POST_INC --- 1392,1427 ---- unsigned int align; { struct move_by_pieces data; ! rtx to_addr, from_addr = XEXP (from, 0); unsigned int max_size = MOVE_MAX_PIECES + 1; enum machine_mode mode = VOIDmode, tmode; enum insn_code icode; data.offset = 0; data.from_addr = from_addr; ! if (to) ! { ! to_addr = XEXP (to, 0); ! data.to = to; ! data.autinc_to ! = (GET_CODE (to_addr) == PRE_INC || GET_CODE (to_addr) == PRE_DEC ! || GET_CODE (to_addr) == POST_INC || GET_CODE (to_addr) == POST_DEC); ! data.reverse ! = (GET_CODE (to_addr) == PRE_DEC || GET_CODE (to_addr) == POST_DEC); ! } ! else ! { ! to_addr = NULL_RTX; ! data.to = NULL_RTX; ! data.autinc_to = 1; ! #ifdef STACK_GROWS_DOWNWARD ! data.reverse = 1; ! #else ! data.reverse = 0; ! #endif ! } ! data.to_addr = to_addr; data.from = from; data.autinc_from = (GET_CODE (from_addr) == PRE_INC || GET_CODE (from_addr) == PRE_DEC || GET_CODE (from_addr) == POST_INC *************** move_by_pieces (to, from, len, align) *** 1419,1426 **** data.explicit_inc_from = 0; data.explicit_inc_to = 0; - data.reverse - = (GET_CODE (to_addr) == PRE_DEC || GET_CODE (to_addr) == POST_DEC); if (data.reverse) data.offset = len; data.len = len; --- 1429,1434 ---- *************** move_by_pieces_1 (genfun, mode, data) *** 1546,1582 **** struct move_by_pieces *data; { unsigned int size = GET_MODE_SIZE (mode); ! rtx to1, from1; while (data->len >= size) { if (data->reverse) data->offset -= size; ! if (data->autinc_to) { ! to1 = gen_rtx_MEM (mode, data->to_addr); ! MEM_COPY_ATTRIBUTES (to1, data->to); } - else - to1 = change_address (data->to, mode, - plus_constant (data->to_addr, data->offset)); if (data->autinc_from) ! { ! from1 = gen_rtx_MEM (mode, data->from_addr); ! MEM_COPY_ATTRIBUTES (from1, data->from); ! } else ! from1 = change_address (data->from, mode, ! plus_constant (data->from_addr, data->offset)); if (HAVE_PRE_DECREMENT && data->explicit_inc_to < 0) ! emit_insn (gen_add2_insn (data->to_addr, GEN_INT (-size))); if (HAVE_PRE_DECREMENT && data->explicit_inc_from < 0) ! emit_insn (gen_add2_insn (data->from_addr, GEN_INT (-size))); ! emit_insn ((*genfun) (to1, from1)); if (HAVE_POST_INCREMENT && data->explicit_inc_to > 0) emit_insn (gen_add2_insn (data->to_addr, GEN_INT (size))); --- 1554,1598 ---- struct move_by_pieces *data; { unsigned int size = GET_MODE_SIZE (mode); ! rtx to1 = NULL_RTX, from1; while (data->len >= size) { if (data->reverse) data->offset -= size; ! if (data->to) { ! if (data->autinc_to) ! to1 = adjust_automodify_address (data->to, mode, data->to_addr, ! data->offset); ! else ! to1 = adjust_address (data->to, mode, data->offset); } if (data->autinc_from) ! from1 = adjust_automodify_address (data->from, mode, data->from_addr, ! data->offset); else ! from1 = adjust_address (data->from, mode, data->offset); if (HAVE_PRE_DECREMENT && data->explicit_inc_to < 0) ! emit_insn (gen_add2_insn (data->to_addr, ! GEN_INT (-(HOST_WIDE_INT)size))); if (HAVE_PRE_DECREMENT && data->explicit_inc_from < 0) ! emit_insn (gen_add2_insn (data->from_addr, ! GEN_INT (-(HOST_WIDE_INT)size))); ! if (data->to) ! emit_insn ((*genfun) (to1, from1)); ! else ! { ! #ifdef PUSH_ROUNDING ! emit_single_push_insn (mode, from1, NULL); ! #else ! abort (); ! #endif ! } if (HAVE_POST_INCREMENT && data->explicit_inc_to > 0) emit_insn (gen_add2_insn (data->to_addr, GEN_INT (size))); *************** move_by_pieces_1 (genfun, mode, data) *** 1603,1618 **** 0 otherwise. */ rtx ! emit_block_move (x, y, size, align) rtx x, y; rtx size; - unsigned int align; { rtx retval = 0; #ifdef TARGET_MEM_FUNCTIONS static tree fn; tree call_expr, arg_list; #endif if (GET_MODE (x) != BLKmode) abort (); --- 1619,1634 ---- 0 otherwise. */ rtx ! emit_block_move (x, y, size) rtx x, y; rtx size; { rtx retval = 0; #ifdef TARGET_MEM_FUNCTIONS static tree fn; tree call_expr, arg_list; #endif + unsigned int align = MIN (MEM_ALIGN (x), MEM_ALIGN (y)); if (GET_MODE (x) != BLKmode) abort (); *************** emit_block_move (x, y, size, align) *** 1748,1754 **** TREE_PUBLIC (fn) = 1; DECL_ARTIFICIAL (fn) = 1; TREE_NOTHROW (fn) = 1; ! make_decl_rtl (fn, NULL_PTR); assemble_external (fn); } --- 1764,1770 ---- TREE_PUBLIC (fn) = 1; DECL_ARTIFICIAL (fn) = 1; TREE_NOTHROW (fn) = 1; ! make_decl_rtl (fn, NULL); assemble_external (fn); } *************** emit_block_move (x, y, size, align) *** 1780,1785 **** --- 1796,1807 ---- TREE_UNSIGNED (integer_type_node)), TYPE_MODE (integer_type_node)); #endif + + /* If we are initializing a readonly value, show the above call + clobbered it. Otherwise, a load from it may erroneously be hoisted + from a loop. */ + if (RTX_UNCHANGING_P (x)) + emit_insn (gen_rtx_CLOBBER (VOIDmode, x)); } return retval; *************** move_block_from_reg (regno, x, nregs, si *** 1853,1869 **** /* If SIZE is that of a mode no bigger than a word, just use that mode's store operation. */ if (size <= UNITS_PER_WORD ! && (mode = mode_for_size (size * BITS_PER_UNIT, MODE_INT, 0)) != BLKmode) { ! emit_move_insn (change_address (x, mode, NULL), ! gen_rtx_REG (mode, regno)); return; } /* Blocks smaller than a word on a BYTES_BIG_ENDIAN machine must be aligned to the left before storing to memory. Note that the previous test doesn't handle all cases (e.g. SIZE == 3). */ ! if (size < UNITS_PER_WORD && BYTES_BIG_ENDIAN) { rtx tem = operand_subword (x, 0, 1, BLKmode); rtx shift; --- 1875,1893 ---- /* If SIZE is that of a mode no bigger than a word, just use that mode's store operation. */ if (size <= UNITS_PER_WORD ! && (mode = mode_for_size (size * BITS_PER_UNIT, MODE_INT, 0)) != BLKmode ! && !FUNCTION_ARG_REG_LITTLE_ENDIAN) { ! emit_move_insn (adjust_address (x, mode, 0), gen_rtx_REG (mode, regno)); return; } /* Blocks smaller than a word on a BYTES_BIG_ENDIAN machine must be aligned to the left before storing to memory. Note that the previous test doesn't handle all cases (e.g. SIZE == 3). */ ! if (size < UNITS_PER_WORD ! && BYTES_BIG_ENDIAN ! && !FUNCTION_ARG_REG_LITTLE_ENDIAN) { rtx tem = operand_subword (x, 0, 1, BLKmode); rtx shift; *************** move_block_from_reg (regno, x, nregs, si *** 1909,1917 **** /* Emit code to move a block SRC to a block DST, where DST is non-consecutive registers represented by a PARALLEL. SSIZE represents the total size of ! block SRC in bytes, or -1 if not known. ALIGN is the known alignment of ! SRC in bits. */ ! /* ??? If SSIZE % UNITS_PER_WORD != 0, we make the blatent assumption that the balance will be in what would be the low-order memory addresses, i.e. left justified for big endian, right justified for little endian. This happens to be true for the targets currently using this support. If this --- 1933,1940 ---- /* Emit code to move a block SRC to a block DST, where DST is non-consecutive registers represented by a PARALLEL. SSIZE represents the total size of ! block SRC in bytes, or -1 if not known. */ ! /* ??? If SSIZE % UNITS_PER_WORD != 0, we make the blatant assumption that the balance will be in what would be the low-order memory addresses, i.e. left justified for big endian, right justified for little endian. This happens to be true for the targets currently using this support. If this *************** move_block_from_reg (regno, x, nregs, si *** 1919,1927 **** would be needed. */ void ! emit_group_load (dst, orig_src, ssize, align) rtx dst, orig_src; - unsigned int align; int ssize; { rtx *tmps, src; --- 1942,1949 ---- would be needed. */ void ! emit_group_load (dst, orig_src, ssize) rtx dst, orig_src; int ssize; { rtx *tmps, src; *************** emit_group_load (dst, orig_src, ssize, a *** 1969,1997 **** src = gen_reg_rtx (mode); else src = gen_reg_rtx (GET_MODE (orig_src)); emit_move_insn (src, orig_src); } /* Optimize the access just a bit. */ if (GET_CODE (src) == MEM ! && align >= GET_MODE_ALIGNMENT (mode) && bytepos * BITS_PER_UNIT % GET_MODE_ALIGNMENT (mode) == 0 && bytelen == GET_MODE_SIZE (mode)) { tmps[i] = gen_reg_rtx (mode); ! emit_move_insn (tmps[i], ! change_address (src, mode, ! plus_constant (XEXP (src, 0), ! bytepos))); } else if (GET_CODE (src) == CONCAT) { ! if (bytepos == 0 ! && bytelen == GET_MODE_SIZE (GET_MODE (XEXP (src, 0)))) ! tmps[i] = XEXP (src, 0); ! else if (bytepos == (HOST_WIDE_INT) GET_MODE_SIZE (GET_MODE (XEXP (src, 0))) ! && bytelen == GET_MODE_SIZE (GET_MODE (XEXP (src, 1)))) ! tmps[i] = XEXP (src, 1); else abort (); } --- 1991,2029 ---- src = gen_reg_rtx (mode); else src = gen_reg_rtx (GET_MODE (orig_src)); + emit_move_insn (src, orig_src); } /* Optimize the access just a bit. */ if (GET_CODE (src) == MEM ! && MEM_ALIGN (src) >= GET_MODE_ALIGNMENT (mode) && bytepos * BITS_PER_UNIT % GET_MODE_ALIGNMENT (mode) == 0 && bytelen == GET_MODE_SIZE (mode)) { tmps[i] = gen_reg_rtx (mode); ! emit_move_insn (tmps[i], adjust_address (src, mode, bytepos)); } else if (GET_CODE (src) == CONCAT) { ! if ((bytepos == 0 ! && bytelen == GET_MODE_SIZE (GET_MODE (XEXP (src, 0)))) ! || (bytepos == (HOST_WIDE_INT) GET_MODE_SIZE (GET_MODE (XEXP (src, 0))) ! && bytelen == GET_MODE_SIZE (GET_MODE (XEXP (src, 1))))) ! { ! tmps[i] = XEXP (src, bytepos != 0); ! if (! CONSTANT_P (tmps[i]) ! && (GET_CODE (tmps[i]) != REG || GET_MODE (tmps[i]) != mode)) ! tmps[i] = extract_bit_field (tmps[i], bytelen * BITS_PER_UNIT, ! 0, 1, NULL_RTX, mode, mode, ssize); ! } ! else if (bytepos == 0) ! { ! rtx mem = assign_stack_temp (GET_MODE (src), ! GET_MODE_SIZE (GET_MODE (src)), 0); ! emit_move_insn (mem, src); ! tmps[i] = adjust_address (mem, mode, 0); ! } else abort (); } *************** emit_group_load (dst, orig_src, ssize, a *** 2001,2007 **** else tmps[i] = extract_bit_field (src, bytelen * BITS_PER_UNIT, bytepos * BITS_PER_UNIT, 1, NULL_RTX, ! mode, mode, align, ssize); if (BYTES_BIG_ENDIAN && shift) expand_binop (mode, ashl_optab, tmps[i], GEN_INT (shift), --- 2033,2039 ---- else tmps[i] = extract_bit_field (src, bytelen * BITS_PER_UNIT, bytepos * BITS_PER_UNIT, 1, NULL_RTX, ! mode, mode, ssize); if (BYTES_BIG_ENDIAN && shift) expand_binop (mode, ashl_optab, tmps[i], GEN_INT (shift), *************** emit_group_load (dst, orig_src, ssize, a *** 2017,2029 **** /* Emit code to move a block SRC to a block DST, where SRC is non-consecutive registers represented by a PARALLEL. SSIZE represents the total size of ! block DST, or -1 if not known. ALIGN is the known alignment of DST. */ void ! emit_group_store (orig_dst, src, ssize, align) rtx orig_dst, src; int ssize; - unsigned int align; { rtx *tmps, dst; int start, i; --- 2049,2060 ---- /* Emit code to move a block SRC to a block DST, where SRC is non-consecutive registers represented by a PARALLEL. SSIZE represents the total size of ! block DST, or -1 if not known. */ void ! emit_group_store (orig_dst, src, ssize) rtx orig_dst, src; int ssize; { rtx *tmps, dst; int start, i; *************** emit_group_store (orig_dst, src, ssize, *** 2067,2077 **** the temporary. */ temp = assign_stack_temp (GET_MODE (dst), ssize, 0); ! emit_group_store (temp, src, ssize, align); ! emit_group_load (dst, temp, ssize, align); return; } ! else if (GET_CODE (dst) != MEM) { dst = gen_reg_rtx (GET_MODE (orig_dst)); /* Make life a bit easier for combine. */ --- 2098,2108 ---- the temporary. */ temp = assign_stack_temp (GET_MODE (dst), ssize, 0); ! emit_group_store (temp, src, ssize); ! emit_group_load (dst, temp, ssize); return; } ! else if (GET_CODE (dst) != MEM && GET_CODE (dst) != CONCAT) { dst = gen_reg_rtx (GET_MODE (orig_dst)); /* Make life a bit easier for combine. */ *************** emit_group_store (orig_dst, src, ssize, *** 2084,2089 **** --- 2115,2121 ---- HOST_WIDE_INT bytepos = INTVAL (XEXP (XVECEXP (src, 0, i), 1)); enum machine_mode mode = GET_MODE (tmps[i]); unsigned int bytelen = GET_MODE_SIZE (mode); + rtx dest = dst; /* Handle trailing fragments that run over the size of the struct. */ if (ssize >= 0 && bytepos + (HOST_WIDE_INT) bytelen > ssize) *************** emit_group_store (orig_dst, src, ssize, *** 2097,2114 **** bytelen = ssize - bytepos; } /* Optimize the access just a bit. */ ! if (GET_CODE (dst) == MEM ! && align >= GET_MODE_ALIGNMENT (mode) && bytepos * BITS_PER_UNIT % GET_MODE_ALIGNMENT (mode) == 0 && bytelen == GET_MODE_SIZE (mode)) ! emit_move_insn (change_address (dst, mode, ! plus_constant (XEXP (dst, 0), ! bytepos)), ! tmps[i]); else ! store_bit_field (dst, bytelen * BITS_PER_UNIT, bytepos * BITS_PER_UNIT, ! mode, tmps[i], align, ssize); } emit_queue (); --- 2129,2156 ---- bytelen = ssize - bytepos; } + if (GET_CODE (dst) == CONCAT) + { + if (bytepos + bytelen <= GET_MODE_SIZE (GET_MODE (XEXP (dst, 0)))) + dest = XEXP (dst, 0); + else if (bytepos >= GET_MODE_SIZE (GET_MODE (XEXP (dst, 0)))) + { + bytepos -= GET_MODE_SIZE (GET_MODE (XEXP (dst, 0))); + dest = XEXP (dst, 1); + } + else + abort (); + } + /* Optimize the access just a bit. */ ! if (GET_CODE (dest) == MEM ! && MEM_ALIGN (dest) >= GET_MODE_ALIGNMENT (mode) && bytepos * BITS_PER_UNIT % GET_MODE_ALIGNMENT (mode) == 0 && bytelen == GET_MODE_SIZE (mode)) ! emit_move_insn (adjust_address (dest, mode, bytepos), tmps[i]); else ! store_bit_field (dest, bytelen * BITS_PER_UNIT, bytepos * BITS_PER_UNIT, ! mode, tmps[i], ssize); } emit_queue (); *************** copy_blkmode_from_reg (tgtblk, srcreg, t *** 2147,2163 **** preserve_temp_slots (tgtblk); } ! /* This code assumes srcreg is at least a full word. If it isn't, ! copy it into a new pseudo which is a full word. */ if (GET_MODE (srcreg) != BLKmode && GET_MODE_SIZE (GET_MODE (srcreg)) < UNITS_PER_WORD) ! srcreg = convert_to_mode (word_mode, srcreg, TREE_UNSIGNED (type)); /* Structures whose size is not a multiple of a word are aligned to the least significant byte (to the right). On a BYTES_BIG_ENDIAN machine, this means we must skip the empty high order bytes when calculating the bit offset. */ ! if (BYTES_BIG_ENDIAN && bytes % UNITS_PER_WORD) big_endian_correction = (BITS_PER_WORD - ((bytes % UNITS_PER_WORD) * BITS_PER_UNIT)); --- 2189,2216 ---- preserve_temp_slots (tgtblk); } ! /* This code assumes srcreg is at least a full word. If it isn't, copy it ! into a new pseudo which is a full word. ! ! If FUNCTION_ARG_REG_LITTLE_ENDIAN is set and convert_to_mode does a copy, ! the wrong part of the register gets copied so we fake a type conversion ! in place. */ if (GET_MODE (srcreg) != BLKmode && GET_MODE_SIZE (GET_MODE (srcreg)) < UNITS_PER_WORD) ! { ! if (FUNCTION_ARG_REG_LITTLE_ENDIAN) ! srcreg = simplify_gen_subreg (word_mode, srcreg, GET_MODE (srcreg), 0); ! else ! srcreg = convert_to_mode (word_mode, srcreg, TREE_UNSIGNED (type)); ! } /* Structures whose size is not a multiple of a word are aligned to the least significant byte (to the right). On a BYTES_BIG_ENDIAN machine, this means we must skip the empty high order bytes when calculating the bit offset. */ ! if (BYTES_BIG_ENDIAN ! && !FUNCTION_ARG_REG_LITTLE_ENDIAN ! && bytes % UNITS_PER_WORD) big_endian_correction = (BITS_PER_WORD - ((bytes % UNITS_PER_WORD) * BITS_PER_UNIT)); *************** copy_blkmode_from_reg (tgtblk, srcreg, t *** 2175,2181 **** (the first time through). */ if (xbitpos % BITS_PER_WORD == 0 || xbitpos == big_endian_correction) ! src = operand_subword_force (srcreg, xbitpos / BITS_PER_WORD, BLKmode); /* We need a new destination operand each time bitpos is on a word boundary. */ --- 2228,2235 ---- (the first time through). */ if (xbitpos % BITS_PER_WORD == 0 || xbitpos == big_endian_correction) ! src = operand_subword_force (srcreg, xbitpos / BITS_PER_WORD, ! GET_MODE (srcreg)); /* We need a new destination operand each time bitpos is on a word boundary. */ *************** copy_blkmode_from_reg (tgtblk, srcreg, t *** 2188,2195 **** extract_bit_field (src, bitsize, xbitpos % BITS_PER_WORD, 1, NULL_RTX, word_mode, word_mode, ! bitsize, BITS_PER_WORD), ! bitsize, BITS_PER_WORD); } return tgtblk; --- 2242,2249 ---- extract_bit_field (src, bitsize, xbitpos % BITS_PER_WORD, 1, NULL_RTX, word_mode, word_mode, ! BITS_PER_WORD), ! BITS_PER_WORD); } return tgtblk; *************** clear_by_pieces (to, len, align) *** 2365,2371 **** struct store_by_pieces data; data.constfun = clear_by_pieces_1; ! data.constfundata = NULL_PTR; data.len = len; data.to = to; store_by_pieces_1 (&data, align); --- 2419,2425 ---- struct store_by_pieces data; data.constfun = clear_by_pieces_1; ! data.constfundata = NULL; data.len = len; data.to = to; store_by_pieces_1 (&data, align); *************** store_by_pieces_2 (genfun, mode, data) *** 2489,2501 **** data->offset -= size; if (data->autinc_to) ! { ! to1 = gen_rtx_MEM (mode, data->to_addr); ! MEM_COPY_ATTRIBUTES (to1, data->to); ! } else ! to1 = change_address (data->to, mode, ! plus_constant (data->to_addr, data->offset)); if (HAVE_PRE_DECREMENT && data->explicit_inc_to < 0) emit_insn (gen_add2_insn (data->to_addr, --- 2543,2552 ---- data->offset -= size; if (data->autinc_to) ! to1 = adjust_automodify_address (data->to, mode, data->to_addr, ! data->offset); else ! to1 = adjust_address (data->to, mode, data->offset); if (HAVE_PRE_DECREMENT && data->explicit_inc_to < 0) emit_insn (gen_add2_insn (data->to_addr, *************** store_by_pieces_2 (genfun, mode, data) *** 2515,2535 **** } /* Write zeros through the storage of OBJECT. If OBJECT has BLKmode, SIZE is ! its length in bytes and ALIGN is the maximum alignment we can is has. ! ! If we call a function that returns the length of the block, return it. */ rtx ! clear_storage (object, size, align) rtx object; rtx size; - unsigned int align; { #ifdef TARGET_MEM_FUNCTIONS static tree fn; tree call_expr, arg_list; #endif rtx retval = 0; /* If OBJECT is not BLKmode and SIZE is the same size as its mode, just move a zero. Otherwise, do this a piece at a time. */ --- 2566,2585 ---- } /* Write zeros through the storage of OBJECT. If OBJECT has BLKmode, SIZE is ! its length in bytes. */ rtx ! clear_storage (object, size) rtx object; rtx size; { #ifdef TARGET_MEM_FUNCTIONS static tree fn; tree call_expr, arg_list; #endif rtx retval = 0; + unsigned int align = (GET_CODE (object) == MEM ? MEM_ALIGN (object) + : GET_MODE_ALIGNMENT (GET_MODE (object))); /* If OBJECT is not BLKmode and SIZE is the same size as its mode, just move a zero. Otherwise, do this a piece at a time. */ *************** clear_storage (object, size, align) *** 2652,2665 **** TREE_PUBLIC (fn) = 1; DECL_ARTIFICIAL (fn) = 1; TREE_NOTHROW (fn) = 1; ! make_decl_rtl (fn, NULL_PTR); assemble_external (fn); } /* We need to make an argument list for the function call. memset has three arguments, the first is a void * addresses, the ! second a integer with the initialization value, the last is a size_t byte count for the copy. */ arg_list = build_tree_list (NULL_TREE, --- 2702,2715 ---- TREE_PUBLIC (fn) = 1; DECL_ARTIFICIAL (fn) = 1; TREE_NOTHROW (fn) = 1; ! make_decl_rtl (fn, NULL); assemble_external (fn); } /* We need to make an argument list for the function call. memset has three arguments, the first is a void * addresses, the ! second an integer with the initialization value, the last is a size_t byte count for the copy. */ arg_list = build_tree_list (NULL_TREE, *************** clear_storage (object, size, align) *** 2685,2690 **** --- 2735,2746 ---- VOIDmode, 2, object, Pmode, size, TYPE_MODE (integer_type_node)); #endif + + /* If we are initializing a readonly value, show the above call + clobbered it. Otherwise, a load from it may erroneously be + hoisted from a loop. */ + if (RTX_UNCHANGING_P (object)) + emit_insn (gen_rtx_CLOBBER (VOIDmode, object)); } } *************** emit_move_insn (x, y) *** 2728,2740 **** && ! push_operand (x, GET_MODE (x))) || (flag_force_addr && CONSTANT_ADDRESS_P (XEXP (x, 0))))) ! x = change_address (x, VOIDmode, XEXP (x, 0)); if (GET_CODE (y) == MEM && (! memory_address_p (GET_MODE (y), XEXP (y, 0)) || (flag_force_addr && CONSTANT_ADDRESS_P (XEXP (y, 0))))) ! y = change_address (y, VOIDmode, XEXP (y, 0)); if (mode == BLKmode) abort (); --- 2784,2796 ---- && ! push_operand (x, GET_MODE (x))) || (flag_force_addr && CONSTANT_ADDRESS_P (XEXP (x, 0))))) ! x = validize_mem (x); if (GET_CODE (y) == MEM && (! memory_address_p (GET_MODE (y), XEXP (y, 0)) || (flag_force_addr && CONSTANT_ADDRESS_P (XEXP (y, 0))))) ! y = validize_mem (y); if (mode == BLKmode) abort (); *************** emit_move_insn (x, y) *** 2742,2749 **** last_insn = emit_move_insn_1 (x, y); if (y_cst && GET_CODE (x) == REG) ! REG_NOTES (last_insn) ! = gen_rtx_EXPR_LIST (REG_EQUAL, y_cst, REG_NOTES (last_insn)); return last_insn; } --- 2798,2804 ---- last_insn = emit_move_insn_1 (x, y); if (y_cst && GET_CODE (x) == REG) ! set_unique_reg_note (last_insn, REG_EQUAL, y_cst); return last_insn; } *************** emit_move_insn_1 (x, y) *** 2759,2765 **** enum machine_mode mode = GET_MODE (x); enum machine_mode submode; enum mode_class class = GET_MODE_CLASS (mode); - unsigned int i; if ((unsigned int) mode >= (unsigned int) MAX_MACHINE_MODE) abort (); --- 2814,2819 ---- *************** emit_move_insn_1 (x, y) *** 2781,2786 **** --- 2835,2889 ---- /* Don't split destination if it is a stack push. */ int stack = push_operand (x, GET_MODE (x)); + #ifdef PUSH_ROUNDING + /* In case we output to the stack, but the size is smaller machine can + push exactly, we need to use move instructions. */ + if (stack + && (PUSH_ROUNDING (GET_MODE_SIZE (submode)) + != GET_MODE_SIZE (submode))) + { + rtx temp; + HOST_WIDE_INT offset1, offset2; + + /* Do not use anti_adjust_stack, since we don't want to update + stack_pointer_delta. */ + temp = expand_binop (Pmode, + #ifdef STACK_GROWS_DOWNWARD + sub_optab, + #else + add_optab, + #endif + stack_pointer_rtx, + GEN_INT + (PUSH_ROUNDING + (GET_MODE_SIZE (GET_MODE (x)))), + stack_pointer_rtx, 0, OPTAB_LIB_WIDEN); + + if (temp != stack_pointer_rtx) + emit_move_insn (stack_pointer_rtx, temp); + + #ifdef STACK_GROWS_DOWNWARD + offset1 = 0; + offset2 = GET_MODE_SIZE (submode); + #else + offset1 = -PUSH_ROUNDING (GET_MODE_SIZE (GET_MODE (x))); + offset2 = (-PUSH_ROUNDING (GET_MODE_SIZE (GET_MODE (x))) + + GET_MODE_SIZE (submode)); + #endif + + emit_move_insn (change_address (x, submode, + gen_rtx_PLUS (Pmode, + stack_pointer_rtx, + GEN_INT (offset1))), + gen_realpart (submode, y)); + emit_move_insn (change_address (x, submode, + gen_rtx_PLUS (Pmode, + stack_pointer_rtx, + GEN_INT (offset2))), + gen_imagpart (submode, y)); + } + else + #endif /* If this is a stack, push the highpart first, so it will be in the argument order. *************** emit_move_insn_1 (x, y) *** 2823,2830 **** if (GET_MODE_BITSIZE (mode) < 2 * BITS_PER_WORD && (reload_in_progress | reload_completed) == 0) { ! int packed_dest_p = (REG_P (x) && REGNO (x) < FIRST_PSEUDO_REGISTER); ! int packed_src_p = (REG_P (y) && REGNO (y) < FIRST_PSEUDO_REGISTER); if (packed_dest_p || packed_src_p) { --- 2926,2935 ---- if (GET_MODE_BITSIZE (mode) < 2 * BITS_PER_WORD && (reload_in_progress | reload_completed) == 0) { ! int packed_dest_p ! = (REG_P (x) && REGNO (x) < FIRST_PSEUDO_REGISTER); ! int packed_src_p ! = (REG_P (y) && REGNO (y) < FIRST_PSEUDO_REGISTER); if (packed_dest_p || packed_src_p) { *************** emit_move_insn_1 (x, y) *** 2838,2844 **** { rtx mem = assign_stack_temp (reg_mode, GET_MODE_SIZE (mode), 0); ! rtx cmem = change_address (mem, mode, NULL_RTX); cfun->cannot_inline = N_("function using short complex types cannot be inline"); --- 2943,2949 ---- { rtx mem = assign_stack_temp (reg_mode, GET_MODE_SIZE (mode), 0); ! rtx cmem = adjust_address (mem, mode, 0); cfun->cannot_inline = N_("function using short complex types cannot be inline"); *************** emit_move_insn_1 (x, y) *** 2846,2857 **** --- 2951,2964 ---- if (packed_dest_p) { rtx sreg = gen_rtx_SUBREG (reg_mode, x, 0); + emit_move_insn_1 (cmem, y); return emit_move_insn_1 (sreg, mem); } else { rtx sreg = gen_rtx_SUBREG (reg_mode, y, 0); + emit_move_insn_1 (mem, sreg); return emit_move_insn_1 (x, cmem); } *************** emit_move_insn_1 (x, y) *** 2872,2880 **** && ! (reload_in_progress || reload_completed) && (GET_CODE (realpart_x) == SUBREG || GET_CODE (imagpart_x) == SUBREG)) ! { ! emit_insn (gen_rtx_CLOBBER (VOIDmode, x)); ! } emit_insn (GEN_FCN (mov_optab->handlers[(int) submode].insn_code) (realpart_x, realpart_y)); --- 2979,2985 ---- && ! (reload_in_progress || reload_completed) && (GET_CODE (realpart_x) == SUBREG || GET_CODE (imagpart_x) == SUBREG)) ! emit_insn (gen_rtx_CLOBBER (VOIDmode, x)); emit_insn (GEN_FCN (mov_optab->handlers[(int) submode].insn_code) (realpart_x, realpart_y)); *************** emit_move_insn_1 (x, y) *** 2893,2898 **** --- 2998,3004 ---- rtx last_insn = 0; rtx seq, inner; int need_clobber; + int i; #ifdef PUSH_ROUNDING *************** emit_move_insn_1 (x, y) *** 2900,2907 **** X with a reference to the stack pointer. */ if (push_operand (x, GET_MODE (x))) { ! anti_adjust_stack (GEN_INT (GET_MODE_SIZE (GET_MODE (x)))); ! x = change_address (x, VOIDmode, stack_pointer_rtx); } #endif --- 3006,3045 ---- X with a reference to the stack pointer. */ if (push_operand (x, GET_MODE (x))) { ! rtx temp; ! enum rtx_code code; ! ! /* Do not use anti_adjust_stack, since we don't want to update ! stack_pointer_delta. */ ! temp = expand_binop (Pmode, ! #ifdef STACK_GROWS_DOWNWARD ! sub_optab, ! #else ! add_optab, ! #endif ! stack_pointer_rtx, ! GEN_INT ! (PUSH_ROUNDING ! (GET_MODE_SIZE (GET_MODE (x)))), ! stack_pointer_rtx, 0, OPTAB_LIB_WIDEN); ! ! if (temp != stack_pointer_rtx) ! emit_move_insn (stack_pointer_rtx, temp); ! ! code = GET_CODE (XEXP (x, 0)); ! ! /* Just hope that small offsets off SP are OK. */ ! if (code == POST_INC) ! temp = gen_rtx_PLUS (Pmode, stack_pointer_rtx, ! GEN_INT (-((HOST_WIDE_INT) ! GET_MODE_SIZE (GET_MODE (x))))); ! else if (code == POST_DEC) ! temp = gen_rtx_PLUS (Pmode, stack_pointer_rtx, ! GEN_INT (GET_MODE_SIZE (GET_MODE (x)))); ! else ! temp = stack_pointer_rtx; ! ! x = change_address (x, VOIDmode, temp); } #endif *************** emit_move_insn_1 (x, y) *** 2909,2928 **** is scheduled for replacement. */ if (reload_in_progress && GET_CODE (x) == MEM && (inner = find_replacement (&XEXP (x, 0))) != XEXP (x, 0)) ! { ! rtx new = gen_rtx_MEM (GET_MODE (x), inner); ! ! MEM_COPY_ATTRIBUTES (new, x); ! x = new; ! } if (reload_in_progress && GET_CODE (y) == MEM && (inner = find_replacement (&XEXP (y, 0))) != XEXP (y, 0)) ! { ! rtx new = gen_rtx_MEM (GET_MODE (y), inner); ! ! MEM_COPY_ATTRIBUTES (new, y); ! y = new; ! } start_sequence (); --- 3047,3056 ---- is scheduled for replacement. */ if (reload_in_progress && GET_CODE (x) == MEM && (inner = find_replacement (&XEXP (x, 0))) != XEXP (x, 0)) ! x = replace_equiv_address_nv (x, inner); if (reload_in_progress && GET_CODE (y) == MEM && (inner = find_replacement (&XEXP (y, 0))) != XEXP (y, 0)) ! y = replace_equiv_address_nv (y, inner); start_sequence (); *************** emit_move_insn_1 (x, y) *** 2963,2971 **** if (x != y && ! (reload_in_progress || reload_completed) && need_clobber != 0) ! { ! emit_insn (gen_rtx_CLOBBER (VOIDmode, x)); ! } emit_insn (seq); --- 3091,3097 ---- if (x != y && ! (reload_in_progress || reload_completed) && need_clobber != 0) ! emit_insn (gen_rtx_CLOBBER (VOIDmode, x)); emit_insn (seq); *************** push_block (size, extra, below) *** 2991,2997 **** rtx size; int extra, below; { ! register rtx temp; size = convert_modes (Pmode, ptr_mode, size, 1); if (CONSTANT_P (size)) --- 3117,3123 ---- rtx size; int extra, below; { ! rtx temp; size = convert_modes (Pmode, ptr_mode, size, 1); if (CONSTANT_P (size)) *************** push_block (size, extra, below) *** 3008,3025 **** } #ifndef STACK_GROWS_DOWNWARD - #ifdef ARGS_GROW_DOWNWARD - if (!ACCUMULATE_OUTGOING_ARGS) - #else if (0) - #endif #else if (1) #endif { - /* Return the lowest stack address when STACK or ARGS grow downward and - we are not aaccumulating outgoing arguments (the c4x port uses such - conventions). */ temp = virtual_outgoing_args_rtx; if (extra != 0 && below) temp = plus_constant (temp, extra); --- 3134,3144 ---- *************** push_block (size, extra, below) *** 3040,3069 **** return memory_address (GET_CLASS_NARROWEST_MODE (MODE_INT), temp); } ! rtx ! gen_push_operand () ! { ! return gen_rtx_fmt_e (STACK_PUSH_CODE, Pmode, stack_pointer_rtx); ! } ! /* Return an rtx for the address of the beginning of a as-if-it-was-pushed ! block of SIZE bytes. */ ! static rtx ! get_push_address (size) ! int size; { ! register rtx temp; ! if (STACK_PUSH_CODE == POST_DEC) ! temp = gen_rtx_PLUS (Pmode, stack_pointer_rtx, GEN_INT (size)); ! else if (STACK_PUSH_CODE == POST_INC) ! temp = gen_rtx_MINUS (Pmode, stack_pointer_rtx, GEN_INT (size)); else ! temp = stack_pointer_rtx; ! return copy_to_reg (temp); } /* Generate code to push X onto the stack, assuming it has mode MODE and type TYPE. --- 3159,3222 ---- return memory_address (GET_CLASS_NARROWEST_MODE (MODE_INT), temp); } ! #ifdef PUSH_ROUNDING ! /* Emit single push insn. */ ! static void ! emit_single_push_insn (mode, x, type) ! rtx x; ! enum machine_mode mode; ! tree type; { ! rtx dest_addr; ! unsigned rounded_size = PUSH_ROUNDING (GET_MODE_SIZE (mode)); ! rtx dest; ! enum insn_code icode; ! insn_operand_predicate_fn pred; ! stack_pointer_delta += PUSH_ROUNDING (GET_MODE_SIZE (mode)); ! /* If there is push pattern, use it. Otherwise try old way of throwing ! MEM representing push operation to move expander. */ ! icode = push_optab->handlers[(int) mode].insn_code; ! if (icode != CODE_FOR_nothing) ! { ! if (((pred = insn_data[(int) icode].operand[0].predicate) ! && !((*pred) (x, mode)))) ! x = force_reg (mode, x); ! emit_insn (GEN_FCN (icode) (x)); ! return; ! } ! if (GET_MODE_SIZE (mode) == rounded_size) ! dest_addr = gen_rtx_fmt_e (STACK_PUSH_CODE, Pmode, stack_pointer_rtx); else ! { ! #ifdef STACK_GROWS_DOWNWARD ! dest_addr = gen_rtx_PLUS (Pmode, stack_pointer_rtx, ! GEN_INT (-(HOST_WIDE_INT) rounded_size)); ! #else ! dest_addr = gen_rtx_PLUS (Pmode, stack_pointer_rtx, ! GEN_INT (rounded_size)); ! #endif ! dest_addr = gen_rtx_PRE_MODIFY (Pmode, stack_pointer_rtx, dest_addr); ! } ! dest = gen_rtx_MEM (mode, dest_addr); ! ! if (type != 0) ! { ! set_mem_attributes (dest, type, 1); ! ! if (flag_optimize_sibling_calls) ! /* Function incoming arguments may overlap with sibling call ! outgoing arguments and we cannot allow reordering of reads ! from function arguments with stores to outgoing arguments ! of sibling calls. */ ! set_mem_alias_set (dest, 0); ! } ! emit_move_insn (dest, x); } + #endif /* Generate code to push X onto the stack, assuming it has mode MODE and type TYPE. *************** void *** 3101,3107 **** emit_push_insn (x, mode, type, size, align, partial, reg, extra, args_addr, args_so_far, reg_parm_stack_space, alignment_pad) ! register rtx x; enum machine_mode mode; tree type; rtx size; --- 3254,3260 ---- emit_push_insn (x, mode, type, size, align, partial, reg, extra, args_addr, args_so_far, reg_parm_stack_space, alignment_pad) ! rtx x; enum machine_mode mode; tree type; rtx size; *************** emit_push_insn (x, mode, type, size, ali *** 3127,3134 **** Default is below for small data on big-endian machines; else above. */ enum direction where_pad = FUNCTION_ARG_PADDING (mode, type); ! /* Invert direction if stack is post-update. */ ! if (STACK_PUSH_CODE == POST_INC || STACK_PUSH_CODE == POST_DEC) if (where_pad != none) where_pad = (where_pad == downward ? upward : downward); --- 3280,3288 ---- Default is below for small data on big-endian machines; else above. */ enum direction where_pad = FUNCTION_ARG_PADDING (mode, type); ! /* Invert direction if stack is post-decrement. ! FIXME: why? */ ! if (STACK_PUSH_CODE == POST_DEC) if (where_pad != none) where_pad = (where_pad == downward ? upward : downward); *************** emit_push_insn (x, mode, type, size, ali *** 3138,3144 **** { /* Copy a block into the stack, entirely or partially. */ ! register rtx temp; int used = partial * UNITS_PER_WORD; int offset = used % (PARM_BOUNDARY / BITS_PER_UNIT); int skip; --- 3292,3298 ---- { /* Copy a block into the stack, entirely or partially. */ ! rtx temp; int used = partial * UNITS_PER_WORD; int offset = used % (PARM_BOUNDARY / BITS_PER_UNIT); int skip; *************** emit_push_insn (x, mode, type, size, ali *** 3152,3159 **** because registers will take care of them. */ if (partial != 0) ! xinner = change_address (xinner, BLKmode, ! plus_constant (XEXP (xinner, 0), used)); /* If the partial register-part of the arg counts in its stack size, skip the part of stack space corresponding to the registers. --- 3306,3312 ---- because registers will take care of them. */ if (partial != 0) ! xinner = adjust_address (xinner, BLKmode, used); /* If the partial register-part of the arg counts in its stack size, skip the part of stack space corresponding to the registers. *************** emit_push_insn (x, mode, type, size, ali *** 3186,3216 **** && where_pad != none && where_pad != stack_direction) anti_adjust_stack (GEN_INT (extra)); ! stack_pointer_delta += INTVAL (size) - used; ! move_by_pieces (gen_rtx_MEM (BLKmode, gen_push_operand ()), xinner, ! INTVAL (size) - used, align); ! ! if (current_function_check_memory_usage && ! in_check_memory_usage) ! { ! rtx temp; ! ! in_check_memory_usage = 1; ! temp = get_push_address (INTVAL (size) - used); ! if (GET_CODE (x) == MEM && type && AGGREGATE_TYPE_P (type)) ! emit_library_call (chkr_copy_bitmap_libfunc, ! LCT_CONST_MAKE_BLOCK, VOIDmode, 3, temp, ! Pmode, XEXP (xinner, 0), Pmode, ! GEN_INT (INTVAL (size) - used), ! TYPE_MODE (sizetype)); ! else ! emit_library_call (chkr_set_right_libfunc, ! LCT_CONST_MAKE_BLOCK, VOIDmode, 3, temp, ! Pmode, GEN_INT (INTVAL (size) - used), ! TYPE_MODE (sizetype), ! GEN_INT (MEMORY_USE_RW), ! TYPE_MODE (integer_type_node)); ! in_check_memory_usage = 0; ! } } else #endif /* PUSH_ROUNDING */ --- 3339,3345 ---- && where_pad != none && where_pad != stack_direction) anti_adjust_stack (GEN_INT (extra)); ! move_by_pieces (NULL, xinner, INTVAL (size) - used, align); } else #endif /* PUSH_ROUNDING */ *************** emit_push_insn (x, mode, type, size, ali *** 3249,3274 **** args_addr, args_so_far), skip)); - if (current_function_check_memory_usage && ! in_check_memory_usage) - { - in_check_memory_usage = 1; - target = copy_to_reg (temp); - if (GET_CODE (x) == MEM && type && AGGREGATE_TYPE_P (type)) - emit_library_call (chkr_copy_bitmap_libfunc, - LCT_CONST_MAKE_BLOCK, VOIDmode, 3, - target, Pmode, - XEXP (xinner, 0), Pmode, - size, TYPE_MODE (sizetype)); - else - emit_library_call (chkr_set_right_libfunc, - LCT_CONST_MAKE_BLOCK, VOIDmode, 3, - target, Pmode, - size, TYPE_MODE (sizetype), - GEN_INT (MEMORY_USE_RW), - TYPE_MODE (integer_type_node)); - in_check_memory_usage = 0; - } - target = gen_rtx_MEM (BLKmode, temp); if (type != 0) --- 3378,3383 ---- *************** emit_push_insn (x, mode, type, size, ali *** 3278,3285 **** outgoing arguments and we cannot allow reordering of reads from function arguments with stores to outgoing arguments of sibling calls. */ ! MEM_ALIAS_SET (target) = 0; } /* TEMP is the address of the block. Copy the data there. */ if (GET_CODE (size) == CONST_INT --- 3387,3396 ---- outgoing arguments and we cannot allow reordering of reads from function arguments with stores to outgoing arguments of sibling calls. */ ! set_mem_alias_set (target, 0); } + else + set_mem_align (target, align); /* TEMP is the address of the block. Copy the data there. */ if (GET_CODE (size) == CONST_INT *************** emit_push_insn (x, mode, type, size, ali *** 3440,3449 **** #ifdef PUSH_ROUNDING if (args_addr == 0 && PUSH_ARGS) ! { ! addr = gen_push_operand (); ! stack_pointer_delta += PUSH_ROUNDING (GET_MODE_SIZE (mode)); ! } else #endif { --- 3551,3557 ---- #ifdef PUSH_ROUNDING if (args_addr == 0 && PUSH_ARGS) ! emit_single_push_insn (mode, x, type); else #endif { *************** emit_push_insn (x, mode, type, size, ali *** 3456,3497 **** addr = memory_address (mode, gen_rtx_PLUS (Pmode, args_addr, args_so_far)); target = addr; ! } ! dest = gen_rtx_MEM (mode, addr); ! if (type != 0) ! { ! set_mem_attributes (dest, type, 1); ! /* Function incoming arguments may overlap with sibling call ! outgoing arguments and we cannot allow reordering of reads ! from function arguments with stores to outgoing arguments ! of sibling calls. */ ! MEM_ALIAS_SET (dest) = 0; } - emit_move_insn (dest, x); - - if (current_function_check_memory_usage && ! in_check_memory_usage) - { - in_check_memory_usage = 1; - if (target == 0) - target = get_push_address (GET_MODE_SIZE (mode)); - - if (GET_CODE (x) == MEM && type && AGGREGATE_TYPE_P (type)) - emit_library_call (chkr_copy_bitmap_libfunc, - LCT_CONST_MAKE_BLOCK, VOIDmode, 3, target, - Pmode, XEXP (x, 0), Pmode, - GEN_INT (GET_MODE_SIZE (mode)), - TYPE_MODE (sizetype)); - else - emit_library_call (chkr_set_right_libfunc, - LCT_CONST_MAKE_BLOCK, VOIDmode, 3, target, - Pmode, GEN_INT (GET_MODE_SIZE (mode)), - TYPE_MODE (sizetype), - GEN_INT (MEMORY_USE_RW), - TYPE_MODE (integer_type_node)); - in_check_memory_usage = 0; - } } ret: --- 3564,3583 ---- addr = memory_address (mode, gen_rtx_PLUS (Pmode, args_addr, args_so_far)); target = addr; ! dest = gen_rtx_MEM (mode, addr); ! if (type != 0) ! { ! set_mem_attributes (dest, type, 1); ! /* Function incoming arguments may overlap with sibling call ! outgoing arguments and we cannot allow reordering of reads ! from function arguments with stores to outgoing arguments ! of sibling calls. */ ! set_mem_alias_set (dest, 0); ! } ! emit_move_insn (dest, x); } } ret: *************** emit_push_insn (x, mode, type, size, ali *** 3503,3509 **** /* Handle calls that pass values in multiple non-contiguous locations. The Irix 6 ABI has examples of this. */ if (GET_CODE (reg) == PARALLEL) ! emit_group_load (reg, x, -1, align); /* ??? size? */ else move_block_to_reg (REGNO (reg), x, partial, mode); } --- 3589,3595 ---- /* Handle calls that pass values in multiple non-contiguous locations. The Irix 6 ABI has examples of this. */ if (GET_CODE (reg) == PARALLEL) ! emit_group_load (reg, x, -1); /* ??? size? */ else move_block_to_reg (REGNO (reg), x, partial, mode); } *************** expand_assignment (to, from, want_value, *** 3552,3558 **** int want_value; int suggest_reg ATTRIBUTE_UNUSED; { ! register rtx to_rtx = 0; rtx result; /* Don't crash if the lhs of the assignment was erroneous. */ --- 3638,3644 ---- int want_value; int suggest_reg ATTRIBUTE_UNUSED; { ! rtx to_rtx = 0; rtx result; /* Don't crash if the lhs of the assignment was erroneous. */ *************** expand_assignment (to, from, want_value, *** 3570,3588 **** problem. */ if (TREE_CODE (to) == COMPONENT_REF || TREE_CODE (to) == BIT_FIELD_REF ! || TREE_CODE (to) == ARRAY_REF) { enum machine_mode mode1; HOST_WIDE_INT bitsize, bitpos; tree offset; int unsignedp; int volatilep = 0; tree tem; - unsigned int alignment; push_temp_slots (); tem = get_inner_reference (to, &bitsize, &bitpos, &offset, &mode1, ! &unsignedp, &volatilep, &alignment); /* If we are going to use store_bit_field and extract_bit_field, make sure to_rtx will be safe for multiple use. */ --- 3656,3674 ---- problem. */ if (TREE_CODE (to) == COMPONENT_REF || TREE_CODE (to) == BIT_FIELD_REF ! || TREE_CODE (to) == ARRAY_REF || TREE_CODE (to) == ARRAY_RANGE_REF) { enum machine_mode mode1; HOST_WIDE_INT bitsize, bitpos; + rtx orig_to_rtx; tree offset; int unsignedp; int volatilep = 0; tree tem; push_temp_slots (); tem = get_inner_reference (to, &bitsize, &bitpos, &offset, &mode1, ! &unsignedp, &volatilep); /* If we are going to use store_bit_field and extract_bit_field, make sure to_rtx will be safe for multiple use. */ *************** expand_assignment (to, from, want_value, *** 3590,3742 **** if (mode1 == VOIDmode && want_value) tem = stabilize_reference (tem); ! to_rtx = expand_expr (tem, NULL_RTX, VOIDmode, EXPAND_MEMORY_USE_DONT); if (offset != 0) { ! rtx offset_rtx = expand_expr (offset, NULL_RTX, VOIDmode, 0); if (GET_CODE (to_rtx) != MEM) abort (); - if (GET_MODE (offset_rtx) != ptr_mode) - { #ifdef POINTERS_EXTEND_UNSIGNED ! offset_rtx = convert_memory_address (ptr_mode, offset_rtx); #else ! offset_rtx = convert_to_mode (ptr_mode, offset_rtx, 0); #endif - } /* A constant address in TO_RTX can have VOIDmode, we must not try to call force_reg for that case. Avoid that case. */ if (GET_CODE (to_rtx) == MEM && GET_MODE (to_rtx) == BLKmode && GET_MODE (XEXP (to_rtx, 0)) != VOIDmode ! && bitsize && (bitpos % bitsize) == 0 && (bitsize % GET_MODE_ALIGNMENT (mode1)) == 0 ! && alignment == GET_MODE_ALIGNMENT (mode1)) { ! rtx temp = change_address (to_rtx, mode1, ! plus_constant (XEXP (to_rtx, 0), ! (bitpos / ! BITS_PER_UNIT))); ! if (GET_CODE (XEXP (temp, 0)) == REG) ! to_rtx = temp; ! else ! to_rtx = change_address (to_rtx, mode1, ! force_reg (GET_MODE (XEXP (temp, 0)), ! XEXP (temp, 0))); bitpos = 0; } ! to_rtx = change_address (to_rtx, VOIDmode, ! gen_rtx_PLUS (ptr_mode, XEXP (to_rtx, 0), ! force_reg (ptr_mode, ! offset_rtx))); } ! if (volatilep) { ! if (GET_CODE (to_rtx) == MEM) ! { ! /* When the offset is zero, to_rtx is the address of the ! structure we are storing into, and hence may be shared. ! We must make a new MEM before setting the volatile bit. */ ! if (offset == 0) ! to_rtx = copy_rtx (to_rtx); ! MEM_VOLATILE_P (to_rtx) = 1; ! } ! #if 0 /* This was turned off because, when a field is volatile ! in an object which is not volatile, the object may be in a register, ! and then we would abort over here. */ ! else ! abort (); ! #endif } if (TREE_CODE (to) == COMPONENT_REF && TREE_READONLY (TREE_OPERAND (to, 1))) { ! if (offset == 0) to_rtx = copy_rtx (to_rtx); - RTX_UNCHANGING_P (to_rtx) = 1; } ! /* Check the access. */ ! if (current_function_check_memory_usage && GET_CODE (to_rtx) == MEM) { ! rtx to_addr; ! int size; ! int best_mode_size; ! enum machine_mode best_mode; ! ! best_mode = get_best_mode (bitsize, bitpos, ! TYPE_ALIGN (TREE_TYPE (tem)), ! mode1, volatilep); ! if (best_mode == VOIDmode) ! best_mode = QImode; ! ! best_mode_size = GET_MODE_BITSIZE (best_mode); ! to_addr = plus_constant (XEXP (to_rtx, 0), (bitpos / BITS_PER_UNIT)); ! size = CEIL ((bitpos % best_mode_size) + bitsize, best_mode_size); ! size *= GET_MODE_SIZE (best_mode); ! ! /* Check the access right of the pointer. */ ! in_check_memory_usage = 1; ! if (size) ! emit_library_call (chkr_check_addr_libfunc, LCT_CONST_MAKE_BLOCK, ! VOIDmode, 3, to_addr, Pmode, ! GEN_INT (size), TYPE_MODE (sizetype), ! GEN_INT (MEMORY_USE_WO), ! TYPE_MODE (integer_type_node)); ! in_check_memory_usage = 0; } ! /* If this is a varying-length object, we must get the address of ! the source and do an explicit block move. */ ! if (bitsize < 0) ! { ! unsigned int from_align; ! rtx from_rtx = expand_expr_unaligned (from, &from_align); ! rtx inner_to_rtx ! = change_address (to_rtx, VOIDmode, ! plus_constant (XEXP (to_rtx, 0), ! bitpos / BITS_PER_UNIT)); ! ! emit_block_move (inner_to_rtx, from_rtx, expr_size (from), ! MIN (alignment, from_align)); ! free_temp_slots (); ! pop_temp_slots (); ! return to_rtx; ! } ! else ! { ! result = store_field (to_rtx, bitsize, bitpos, mode1, from, ! (want_value ! /* Spurious cast for HPUX compiler. */ ! ? ((enum machine_mode) ! TYPE_MODE (TREE_TYPE (to))) ! : VOIDmode), ! unsignedp, ! alignment, ! int_size_in_bytes (TREE_TYPE (tem)), ! get_alias_set (to)); ! preserve_temp_slots (result); ! free_temp_slots (); ! pop_temp_slots (); ! /* If the value is meaningful, convert RESULT to the proper mode. ! Otherwise, return nothing. */ ! return (want_value ? convert_modes (TYPE_MODE (TREE_TYPE (to)), ! TYPE_MODE (TREE_TYPE (from)), ! result, ! TREE_UNSIGNED (TREE_TYPE (to))) ! : NULL_RTX); ! } } /* If the rhs is a function call and its value is not an aggregate, --- 3676,3781 ---- if (mode1 == VOIDmode && want_value) tem = stabilize_reference (tem); ! orig_to_rtx = to_rtx = expand_expr (tem, NULL_RTX, VOIDmode, 0); ! if (offset != 0) { ! rtx offset_rtx = expand_expr (offset, NULL_RTX, VOIDmode, EXPAND_SUM); if (GET_CODE (to_rtx) != MEM) abort (); #ifdef POINTERS_EXTEND_UNSIGNED ! if (GET_MODE (offset_rtx) != Pmode) ! offset_rtx = convert_memory_address (Pmode, offset_rtx); #else ! if (GET_MODE (offset_rtx) != ptr_mode) ! offset_rtx = convert_to_mode (ptr_mode, offset_rtx, 0); #endif /* A constant address in TO_RTX can have VOIDmode, we must not try to call force_reg for that case. Avoid that case. */ if (GET_CODE (to_rtx) == MEM && GET_MODE (to_rtx) == BLKmode && GET_MODE (XEXP (to_rtx, 0)) != VOIDmode ! && bitsize > 0 && (bitpos % bitsize) == 0 && (bitsize % GET_MODE_ALIGNMENT (mode1)) == 0 ! && MEM_ALIGN (to_rtx) == GET_MODE_ALIGNMENT (mode1)) { ! to_rtx = adjust_address (to_rtx, mode1, bitpos / BITS_PER_UNIT); bitpos = 0; } ! to_rtx = offset_address (to_rtx, offset_rtx, ! highest_pow2_factor_for_type (TREE_TYPE (to), ! offset)); } ! if (GET_CODE (to_rtx) == MEM) { ! tree old_expr = MEM_EXPR (to_rtx); ! /* If the field is at offset zero, we could have been given the ! DECL_RTX of the parent struct. Don't munge it. */ ! to_rtx = shallow_copy_rtx (to_rtx); ! ! set_mem_attributes (to_rtx, to, 0); ! ! /* If we changed MEM_EXPR, that means we're now referencing ! the COMPONENT_REF, which means that MEM_OFFSET must be ! relative to that field. But we've not yet reflected BITPOS ! in TO_RTX. This will be done in store_field. Adjust for ! that by biasing MEM_OFFSET by -bitpos. */ ! if (MEM_EXPR (to_rtx) != old_expr && MEM_OFFSET (to_rtx) ! && (bitpos / BITS_PER_UNIT) != 0) ! set_mem_offset (to_rtx, GEN_INT (INTVAL (MEM_OFFSET (to_rtx)) ! - (bitpos / BITS_PER_UNIT))); ! } ! ! /* Deal with volatile and readonly fields. The former is only done ! for MEM. Also set MEM_KEEP_ALIAS_SET_P if needed. */ ! if (volatilep && GET_CODE (to_rtx) == MEM) ! { ! if (to_rtx == orig_to_rtx) ! to_rtx = copy_rtx (to_rtx); ! MEM_VOLATILE_P (to_rtx) = 1; } if (TREE_CODE (to) == COMPONENT_REF && TREE_READONLY (TREE_OPERAND (to, 1))) { ! if (to_rtx == orig_to_rtx) to_rtx = copy_rtx (to_rtx); RTX_UNCHANGING_P (to_rtx) = 1; } ! if (GET_CODE (to_rtx) == MEM && ! can_address_p (to)) { ! if (to_rtx == orig_to_rtx) ! to_rtx = copy_rtx (to_rtx); ! MEM_KEEP_ALIAS_SET_P (to_rtx) = 1; } ! result = store_field (to_rtx, bitsize, bitpos, mode1, from, ! (want_value ! /* Spurious cast for HPUX compiler. */ ! ? ((enum machine_mode) ! TYPE_MODE (TREE_TYPE (to))) ! : VOIDmode), ! unsignedp, TREE_TYPE (tem), get_alias_set (to)); ! preserve_temp_slots (result); ! free_temp_slots (); ! pop_temp_slots (); ! /* If the value is meaningful, convert RESULT to the proper mode. ! Otherwise, return nothing. */ ! return (want_value ? convert_modes (TYPE_MODE (TREE_TYPE (to)), ! TYPE_MODE (TREE_TYPE (from)), ! result, ! TREE_UNSIGNED (TREE_TYPE (to))) ! : NULL_RTX); } /* If the rhs is a function call and its value is not an aggregate, *************** expand_assignment (to, from, want_value, *** 3759,3779 **** push_temp_slots (); value = expand_expr (from, NULL_RTX, VOIDmode, 0); if (to_rtx == 0) ! to_rtx = expand_expr (to, NULL_RTX, VOIDmode, EXPAND_MEMORY_USE_WO); /* Handle calls that return values in multiple non-contiguous locations. The Irix 6 ABI has examples of this. */ if (GET_CODE (to_rtx) == PARALLEL) ! emit_group_load (to_rtx, value, int_size_in_bytes (TREE_TYPE (from)), ! TYPE_ALIGN (TREE_TYPE (from))); else if (GET_MODE (to_rtx) == BLKmode) ! emit_block_move (to_rtx, value, expr_size (from), ! TYPE_ALIGN (TREE_TYPE (from))); else { #ifdef POINTERS_EXTEND_UNSIGNED ! if (TREE_CODE (TREE_TYPE (to)) == REFERENCE_TYPE ! || TREE_CODE (TREE_TYPE (to)) == POINTER_TYPE) value = convert_memory_address (GET_MODE (to_rtx), value); #endif emit_move_insn (to_rtx, value); --- 3798,3816 ---- push_temp_slots (); value = expand_expr (from, NULL_RTX, VOIDmode, 0); if (to_rtx == 0) ! to_rtx = expand_expr (to, NULL_RTX, VOIDmode, EXPAND_WRITE); /* Handle calls that return values in multiple non-contiguous locations. The Irix 6 ABI has examples of this. */ if (GET_CODE (to_rtx) == PARALLEL) ! emit_group_load (to_rtx, value, int_size_in_bytes (TREE_TYPE (from))); else if (GET_MODE (to_rtx) == BLKmode) ! emit_block_move (to_rtx, value, expr_size (from)); else { #ifdef POINTERS_EXTEND_UNSIGNED ! if (POINTER_TYPE_P (TREE_TYPE (to)) ! && GET_MODE (to_rtx) != GET_MODE (value)) value = convert_memory_address (GET_MODE (to_rtx), value); #endif emit_move_insn (to_rtx, value); *************** expand_assignment (to, from, want_value, *** 3788,3798 **** Don't re-expand if it was expanded already (in COMPONENT_REF case). */ if (to_rtx == 0) ! { ! to_rtx = expand_expr (to, NULL_RTX, VOIDmode, EXPAND_MEMORY_USE_WO); ! if (GET_CODE (to_rtx) == MEM) ! MEM_ALIAS_SET (to_rtx) = get_alias_set (to); ! } /* Don't move directly into a return register. */ if (TREE_CODE (to) == RESULT_DECL --- 3825,3831 ---- Don't re-expand if it was expanded already (in COMPONENT_REF case). */ if (to_rtx == 0) ! to_rtx = expand_expr (to, NULL_RTX, VOIDmode, EXPAND_WRITE); /* Don't move directly into a return register. */ if (TREE_CODE (to) == RESULT_DECL *************** expand_assignment (to, from, want_value, *** 3804,3811 **** temp = expand_expr (from, 0, GET_MODE (to_rtx), 0); if (GET_CODE (to_rtx) == PARALLEL) ! emit_group_load (to_rtx, temp, int_size_in_bytes (TREE_TYPE (from)), ! TYPE_ALIGN (TREE_TYPE (from))); else emit_move_insn (to_rtx, temp); --- 3837,3843 ---- temp = expand_expr (from, 0, GET_MODE (to_rtx), 0); if (GET_CODE (to_rtx) == PARALLEL) ! emit_group_load (to_rtx, temp, int_size_in_bytes (TREE_TYPE (from))); else emit_move_insn (to_rtx, temp); *************** expand_assignment (to, from, want_value, *** 3826,3842 **** push_temp_slots (); size = expr_size (from); ! from_rtx = expand_expr (from, NULL_RTX, VOIDmode, ! EXPAND_MEMORY_USE_DONT); ! ! /* Copy the rights of the bitmap. */ ! if (current_function_check_memory_usage) ! emit_library_call (chkr_copy_bitmap_libfunc, LCT_CONST_MAKE_BLOCK, ! VOIDmode, 3, XEXP (to_rtx, 0), Pmode, ! XEXP (from_rtx, 0), Pmode, ! convert_to_mode (TYPE_MODE (sizetype), ! size, TREE_UNSIGNED (sizetype)), ! TYPE_MODE (sizetype)); #ifdef TARGET_MEM_FUNCTIONS emit_library_call (memmove_libfunc, LCT_NORMAL, --- 3858,3864 ---- push_temp_slots (); size = expr_size (from); ! from_rtx = expand_expr (from, NULL_RTX, VOIDmode, 0); #ifdef TARGET_MEM_FUNCTIONS emit_library_call (memmove_libfunc, LCT_NORMAL, *************** expand_assignment (to, from, want_value, *** 3895,3906 **** rtx store_expr (exp, target, want_value) ! register tree exp; ! register rtx target; int want_value; { ! register rtx temp; int dont_return_target = 0; if (TREE_CODE (exp) == COMPOUND_EXPR) { --- 3917,3929 ---- rtx store_expr (exp, target, want_value) ! tree exp; ! rtx target; int want_value; { ! rtx temp; int dont_return_target = 0; + int dont_store_target = 0; if (TREE_CODE (exp) == COMPOUND_EXPR) { *************** store_expr (exp, target, want_value) *** 3971,3977 **** { temp = expand_expr (exp, target, GET_MODE (target), 0); if (GET_MODE (temp) != BLKmode && GET_MODE (temp) != VOIDmode) ! temp = copy_to_reg (temp); dont_return_target = 1; } else if (GET_CODE (target) == SUBREG && SUBREG_PROMOTED_VAR_P (target)) --- 3994,4008 ---- { temp = expand_expr (exp, target, GET_MODE (target), 0); if (GET_MODE (temp) != BLKmode && GET_MODE (temp) != VOIDmode) ! { ! /* If TEMP is already in the desired TARGET, only copy it from ! memory and don't store it there again. */ ! if (temp == target ! || (rtx_equal_p (temp, target) ! && ! side_effects_p (temp) && ! side_effects_p (target))) ! dont_store_target = 1; ! temp = copy_to_reg (temp); ! } dont_return_target = 1; } else if (GET_CODE (target) == SUBREG && SUBREG_PROMOTED_VAR_P (target)) *************** store_expr (exp, target, want_value) *** 3980,3985 **** --- 4011,4018 ---- and then convert to the wider mode. Our value is the computed expression. */ { + rtx inner_target = 0; + /* If we don't want a value, we can do the conversion inside EXP, which will often result in some optimizations. Do the conversion in two steps: first change the signedness, if needed, then *************** store_expr (exp, target, want_value) *** 4000,4008 **** exp = convert (type_for_mode (GET_MODE (SUBREG_REG (target)), SUBREG_PROMOTED_UNSIGNED_P (target)), exp); } ! temp = expand_expr (exp, NULL_RTX, VOIDmode, 0); /* If TEMP is a volatile MEM and we want a result value, make the access now so it gets done only once. Likewise if --- 4033,4043 ---- exp = convert (type_for_mode (GET_MODE (SUBREG_REG (target)), SUBREG_PROMOTED_UNSIGNED_P (target)), exp); + + inner_target = SUBREG_REG (target); } ! temp = expand_expr (exp, inner_target, VOIDmode, 0); /* If TEMP is a volatile MEM and we want a result value, make the access now so it gets done only once. Likewise if *************** store_expr (exp, target, want_value) *** 4015,4023 **** /* If TEMP is a VOIDmode constant, use convert_modes to make sure that we properly convert it. */ if (CONSTANT_P (temp) && GET_MODE (temp) == VOIDmode) ! temp = convert_modes (GET_MODE (SUBREG_REG (target)), ! TYPE_MODE (TREE_TYPE (exp)), temp, ! SUBREG_PROMOTED_UNSIGNED_P (target)); convert_move (SUBREG_REG (target), temp, SUBREG_PROMOTED_UNSIGNED_P (target)); --- 4050,4062 ---- /* If TEMP is a VOIDmode constant, use convert_modes to make sure that we properly convert it. */ if (CONSTANT_P (temp) && GET_MODE (temp) == VOIDmode) ! { ! temp = convert_modes (GET_MODE (target), TYPE_MODE (TREE_TYPE (exp)), ! temp, SUBREG_PROMOTED_UNSIGNED_P (target)); ! temp = convert_modes (GET_MODE (SUBREG_REG (target)), ! GET_MODE (target), temp, ! SUBREG_PROMOTED_UNSIGNED_P (target)); ! } convert_move (SUBREG_REG (target), temp, SUBREG_PROMOTED_UNSIGNED_P (target)); *************** store_expr (exp, target, want_value) *** 4026,4038 **** target. Otherwise, the caller might get confused by a result whose mode is larger than expected. */ ! if (want_value && GET_MODE (temp) != GET_MODE (target) ! && GET_MODE (temp) != VOIDmode) { ! temp = gen_rtx_SUBREG (GET_MODE (target), temp, 0); ! SUBREG_PROMOTED_VAR_P (temp) = 1; ! SUBREG_PROMOTED_UNSIGNED_P (temp) ! = SUBREG_PROMOTED_UNSIGNED_P (target); } return want_value ? temp : NULL_RTX; --- 4065,4083 ---- target. Otherwise, the caller might get confused by a result whose mode is larger than expected. */ ! if (want_value && GET_MODE (temp) != GET_MODE (target)) { ! if (GET_MODE (temp) != VOIDmode) ! { ! temp = gen_lowpart_SUBREG (GET_MODE (target), temp); ! SUBREG_PROMOTED_VAR_P (temp) = 1; ! SUBREG_PROMOTED_UNSIGNED_P (temp) ! = SUBREG_PROMOTED_UNSIGNED_P (target); ! } ! else ! temp = convert_modes (GET_MODE (target), ! GET_MODE (SUBREG_REG (target)), ! temp, SUBREG_PROMOTED_UNSIGNED_P (target)); } return want_value ? temp : NULL_RTX; *************** store_expr (exp, target, want_value) *** 4065,4092 **** temp = convert_modes (GET_MODE (target), TYPE_MODE (TREE_TYPE (exp)), temp, TREE_UNSIGNED (TREE_TYPE (exp))); - if (current_function_check_memory_usage - && GET_CODE (target) == MEM - && AGGREGATE_TYPE_P (TREE_TYPE (exp))) - { - in_check_memory_usage = 1; - if (GET_CODE (temp) == MEM) - emit_library_call (chkr_copy_bitmap_libfunc, LCT_CONST_MAKE_BLOCK, - VOIDmode, 3, XEXP (target, 0), Pmode, - XEXP (temp, 0), Pmode, - expr_size (exp), TYPE_MODE (sizetype)); - else - emit_library_call (chkr_check_addr_libfunc, LCT_CONST_MAKE_BLOCK, - VOIDmode, 3, XEXP (target, 0), Pmode, - expr_size (exp), TYPE_MODE (sizetype), - GEN_INT (MEMORY_USE_WO), - TYPE_MODE (integer_type_node)); - in_check_memory_usage = 0; - } - /* If value was not generated in the target, store it there. ! Convert the value to TARGET's type first if nec. */ ! /* If TEMP and TARGET compare equal according to rtx_equal_p, but one or both of them are volatile memory refs, we have to distinguish two cases: - expand_expr has used TARGET. In this case, we must not generate --- 4110,4118 ---- temp = convert_modes (GET_MODE (target), TYPE_MODE (TREE_TYPE (exp)), temp, TREE_UNSIGNED (TREE_TYPE (exp))); /* If value was not generated in the target, store it there. ! Convert the value to TARGET's type first if necessary. ! If TEMP and TARGET compare equal according to rtx_equal_p, but one or both of them are volatile memory refs, we have to distinguish two cases: - expand_expr has used TARGET. In this case, we must not generate *************** store_expr (exp, target, want_value) *** 4101,4107 **** if ((! rtx_equal_p (temp, target) || (temp != target && (side_effects_p (temp) || side_effects_p (target)))) ! && TREE_CODE (exp) != ERROR_MARK) { target = protect_from_queue (target, 1); if (GET_MODE (temp) != GET_MODE (target) --- 4127,4139 ---- if ((! rtx_equal_p (temp, target) || (temp != target && (side_effects_p (temp) || side_effects_p (target)))) ! && TREE_CODE (exp) != ERROR_MARK ! && ! dont_store_target ! /* If store_expr stores a DECL whose DECL_RTL(exp) == TARGET, ! but TARGET is not valid memory reference, TEMP will differ ! from TARGET although it is really the same location. */ ! && (TREE_CODE_CLASS (TREE_CODE (exp)) != 'd' ! || target != DECL_RTL_IF_SET (exp))) { target = protect_from_queue (target, 1); if (GET_MODE (temp) != GET_MODE (target) *************** store_expr (exp, target, want_value) *** 4122,4139 **** else if (GET_MODE (temp) == BLKmode && TREE_CODE (exp) == STRING_CST) { ! /* Handle copying a string constant into an array. ! The string constant may be shorter than the array. ! So copy just the string's actual length, and clear the rest. */ ! rtx size; ! rtx addr; - /* Get the size of the data type of the string, - which is actually the size of the target. */ - size = expr_size (exp); if (GET_CODE (size) == CONST_INT && INTVAL (size) < TREE_STRING_LENGTH (exp)) ! emit_block_move (target, temp, size, TYPE_ALIGN (TREE_TYPE (exp))); else { /* Compute the size of the data to copy from the string. */ --- 4154,4168 ---- else if (GET_MODE (temp) == BLKmode && TREE_CODE (exp) == STRING_CST) { ! /* Handle copying a string constant into an array. The string ! constant may be shorter than the array. So copy just the string's ! actual length, and clear the rest. First get the size of the data ! type of the string, which is actually the size of the target. */ ! rtx size = expr_size (exp); if (GET_CODE (size) == CONST_INT && INTVAL (size) < TREE_STRING_LENGTH (exp)) ! emit_block_move (target, temp, size); else { /* Compute the size of the data to copy from the string. */ *************** store_expr (exp, target, want_value) *** 4141,4206 **** = size_binop (MIN_EXPR, make_tree (sizetype, size), size_int (TREE_STRING_LENGTH (exp))); - unsigned int align = TYPE_ALIGN (TREE_TYPE (exp)); rtx copy_size_rtx = expand_expr (copy_size, NULL_RTX, VOIDmode, 0); rtx label = 0; /* Copy that much. */ ! emit_block_move (target, temp, copy_size_rtx, ! TYPE_ALIGN (TREE_TYPE (exp))); /* Figure out how much is left in TARGET that we have to clear. Do all calculations in ptr_mode. */ - - addr = XEXP (target, 0); - addr = convert_modes (ptr_mode, Pmode, addr, 1); - if (GET_CODE (copy_size_rtx) == CONST_INT) { ! addr = plus_constant (addr, TREE_STRING_LENGTH (exp)); ! size = plus_constant (size, -TREE_STRING_LENGTH (exp)); ! align = MIN (align, ! (unsigned int) (BITS_PER_UNIT ! * (INTVAL (copy_size_rtx) ! & - INTVAL (copy_size_rtx)))); } else { ! addr = force_reg (ptr_mode, addr); ! addr = expand_binop (ptr_mode, add_optab, addr, copy_size_rtx, NULL_RTX, 0, OPTAB_LIB_WIDEN); ! size = expand_binop (ptr_mode, sub_optab, size, ! copy_size_rtx, NULL_RTX, 0, ! OPTAB_LIB_WIDEN); ! align = BITS_PER_UNIT; label = gen_label_rtx (); emit_cmp_and_jump_insns (size, const0_rtx, LT, NULL_RTX, ! GET_MODE (size), 0, 0, label); } - align = MIN (align, expr_align (copy_size)); if (size != const0_rtx) ! { ! rtx dest = gen_rtx_MEM (BLKmode, addr); ! ! MEM_COPY_ATTRIBUTES (dest, target); ! ! /* Be sure we can write on ADDR. */ ! in_check_memory_usage = 1; ! if (current_function_check_memory_usage) ! emit_library_call (chkr_check_addr_libfunc, ! LCT_CONST_MAKE_BLOCK, VOIDmode, 3, ! addr, Pmode, ! size, TYPE_MODE (sizetype), ! GEN_INT (MEMORY_USE_WO), ! TYPE_MODE (integer_type_node)); ! in_check_memory_usage = 0; ! clear_storage (dest, size, align); ! } if (label) emit_label (label); --- 4170,4212 ---- = size_binop (MIN_EXPR, make_tree (sizetype, size), size_int (TREE_STRING_LENGTH (exp))); rtx copy_size_rtx = expand_expr (copy_size, NULL_RTX, VOIDmode, 0); rtx label = 0; /* Copy that much. */ ! copy_size_rtx = convert_to_mode (ptr_mode, copy_size_rtx, 0); ! emit_block_move (target, temp, copy_size_rtx); /* Figure out how much is left in TARGET that we have to clear. Do all calculations in ptr_mode. */ if (GET_CODE (copy_size_rtx) == CONST_INT) { ! size = plus_constant (size, -INTVAL (copy_size_rtx)); ! target = adjust_address (target, BLKmode, ! INTVAL (copy_size_rtx)); } else { ! size = expand_binop (TYPE_MODE (sizetype), sub_optab, size, copy_size_rtx, NULL_RTX, 0, OPTAB_LIB_WIDEN); ! #ifdef POINTERS_EXTEND_UNSIGNED ! if (GET_MODE (copy_size_rtx) != Pmode) ! copy_size_rtx = convert_memory_address (Pmode, ! copy_size_rtx); ! #endif ! target = offset_address (target, copy_size_rtx, ! highest_pow2_factor (copy_size)); label = gen_label_rtx (); emit_cmp_and_jump_insns (size, const0_rtx, LT, NULL_RTX, ! GET_MODE (size), 0, label); } if (size != const0_rtx) ! clear_storage (target, size); if (label) emit_label (label); *************** store_expr (exp, target, want_value) *** 4209,4219 **** /* Handle calls that return values in multiple non-contiguous locations. The Irix 6 ABI has examples of this. */ else if (GET_CODE (target) == PARALLEL) ! emit_group_load (target, temp, int_size_in_bytes (TREE_TYPE (exp)), ! TYPE_ALIGN (TREE_TYPE (exp))); else if (GET_MODE (temp) == BLKmode) ! emit_block_move (target, temp, expr_size (exp), ! TYPE_ALIGN (TREE_TYPE (exp))); else emit_move_insn (target, temp); } --- 4215,4223 ---- /* Handle calls that return values in multiple non-contiguous locations. The Irix 6 ABI has examples of this. */ else if (GET_CODE (target) == PARALLEL) ! emit_group_load (target, temp, int_size_in_bytes (TREE_TYPE (exp))); else if (GET_MODE (temp) == BLKmode) ! emit_block_move (target, temp, expr_size (exp)); else emit_move_insn (target, temp); } *************** is_zeros_p (exp) *** 4250,4255 **** --- 4254,4260 ---- case CONVERT_EXPR: case NOP_EXPR: case NON_LVALUE_EXPR: + case VIEW_CONVERT_EXPR: return is_zeros_p (TREE_OPERAND (exp, 0)); case INTEGER_CST: *************** is_zeros_p (exp) *** 4262,4267 **** --- 4267,4280 ---- case REAL_CST: return REAL_VALUES_IDENTICAL (TREE_REAL_CST (exp), dconst0); + case VECTOR_CST: + for (elt = TREE_VECTOR_CST_ELTS (exp); elt; + elt = TREE_CHAIN (elt)) + if (!is_zeros_p (TREE_VALUE (elt))) + return 0; + + return 1; + case CONSTRUCTOR: if (TREE_TYPE (exp) && TREE_CODE (TREE_TYPE (exp)) == SET_TYPE) return CONSTRUCTOR_ELTS (exp) == NULL_TREE; *************** mostly_zeros_p (exp) *** 4312,4318 **** /* Helper function for store_constructor. TARGET, BITSIZE, BITPOS, MODE, EXP are as for store_field. TYPE is the type of the CONSTRUCTOR, not the element type. ! ALIGN and CLEARED are as for store_constructor. ALIAS_SET is the alias set to use for any stores. This provides a recursive shortcut back to store_constructor when it isn't --- 4325,4331 ---- /* Helper function for store_constructor. TARGET, BITSIZE, BITPOS, MODE, EXP are as for store_field. TYPE is the type of the CONSTRUCTOR, not the element type. ! CLEARED is as for store_constructor. ALIAS_SET is the alias set to use for any stores. This provides a recursive shortcut back to store_constructor when it isn't *************** mostly_zeros_p (exp) *** 4321,4334 **** clear a substructure if the outer structure has already been cleared. */ static void ! store_constructor_field (target, bitsize, bitpos, ! mode, exp, type, align, cleared, alias_set) rtx target; unsigned HOST_WIDE_INT bitsize; HOST_WIDE_INT bitpos; enum machine_mode mode; tree exp, type; - unsigned int align; int cleared; int alias_set; { --- 4334,4346 ---- clear a substructure if the outer structure has already been cleared. */ static void ! store_constructor_field (target, bitsize, bitpos, mode, exp, type, cleared, ! alias_set) rtx target; unsigned HOST_WIDE_INT bitsize; HOST_WIDE_INT bitpos; enum machine_mode mode; tree exp, type; int cleared; int alias_set; { *************** store_constructor_field (target, bitsize *** 4339,4382 **** generate unnecessary clear instructions anyways. */ && (bitpos == 0 || GET_CODE (target) == MEM)) { ! if (bitpos != 0) target ! = change_address (target, GET_MODE (target) == BLKmode || 0 != (bitpos % GET_MODE_ALIGNMENT (GET_MODE (target))) ! ? BLKmode : VOIDmode, ! plus_constant (XEXP (target, 0), ! bitpos / BITS_PER_UNIT)); ! /* Show the alignment may no longer be what it was and update the alias ! set, if required. */ ! if (bitpos != 0) ! align = MIN (align, (unsigned int) bitpos & - bitpos); ! if (GET_CODE (target) == MEM) ! MEM_ALIAS_SET (target) = alias_set; ! store_constructor (exp, target, align, cleared, bitsize / BITS_PER_UNIT); } else ! store_field (target, bitsize, bitpos, mode, exp, VOIDmode, 0, align, ! int_size_in_bytes (type), alias_set); } /* Store the value of constructor EXP into the rtx TARGET. ! TARGET is either a REG or a MEM. ! ALIGN is the maximum known alignment for TARGET. CLEARED is true if TARGET is known to have been zero'd. SIZE is the number of bytes of TARGET we are allowed to modify: this may not be the same as the size of EXP if we are assigning to a field which has been packed to exclude padding bits. */ static void ! store_constructor (exp, target, align, cleared, size) tree exp; rtx target; - unsigned int align; int cleared; HOST_WIDE_INT size; { --- 4351,4392 ---- generate unnecessary clear instructions anyways. */ && (bitpos == 0 || GET_CODE (target) == MEM)) { ! if (GET_CODE (target) == MEM) target ! = adjust_address (target, GET_MODE (target) == BLKmode || 0 != (bitpos % GET_MODE_ALIGNMENT (GET_MODE (target))) ! ? BLKmode : VOIDmode, bitpos / BITS_PER_UNIT); ! /* Update the alias set, if required. */ ! if (GET_CODE (target) == MEM && ! MEM_KEEP_ALIAS_SET_P (target) ! && MEM_ALIAS_SET (target) != 0) ! { ! target = copy_rtx (target); ! set_mem_alias_set (target, alias_set); ! } ! store_constructor (exp, target, cleared, bitsize / BITS_PER_UNIT); } else ! store_field (target, bitsize, bitpos, mode, exp, VOIDmode, 0, type, ! alias_set); } /* Store the value of constructor EXP into the rtx TARGET. ! TARGET is either a REG or a MEM; we know it cannot conflict, since ! safe_from_p has been called. CLEARED is true if TARGET is known to have been zero'd. SIZE is the number of bytes of TARGET we are allowed to modify: this may not be the same as the size of EXP if we are assigning to a field which has been packed to exclude padding bits. */ static void ! store_constructor (exp, target, cleared, size) tree exp; rtx target; int cleared; HOST_WIDE_INT size; { *************** store_constructor (exp, target, align, c *** 4385,4431 **** HOST_WIDE_INT exp_size = int_size_in_bytes (type); #endif - /* We know our target cannot conflict, since safe_from_p has been called. */ - #if 0 - /* Don't try copying piece by piece into a hard register - since that is vulnerable to being clobbered by EXP. - Instead, construct in a pseudo register and then copy it all. */ - if (GET_CODE (target) == REG && REGNO (target) < FIRST_PSEUDO_REGISTER) - { - rtx temp = gen_reg_rtx (GET_MODE (target)); - store_constructor (exp, temp, align, cleared, size); - emit_move_insn (target, temp); - return; - } - #endif - if (TREE_CODE (type) == RECORD_TYPE || TREE_CODE (type) == UNION_TYPE || TREE_CODE (type) == QUAL_UNION_TYPE) { ! register tree elt; ! /* Inform later passes that the whole union value is dead. */ if ((TREE_CODE (type) == UNION_TYPE || TREE_CODE (type) == QUAL_UNION_TYPE) ! && ! cleared) { ! emit_insn (gen_rtx_CLOBBER (VOIDmode, target)); ! ! /* If the constructor is empty, clear the union. */ ! if (! CONSTRUCTOR_ELTS (exp) && ! cleared) ! clear_storage (target, expr_size (exp), TYPE_ALIGN (type)); } /* If we are building a static constructor into a register, set the initial value as zero so we can fold the value into a constant. But if more than one register is involved, this probably loses. */ ! else if (GET_CODE (target) == REG && TREE_STATIC (exp) && GET_MODE_SIZE (GET_MODE (target)) <= UNITS_PER_WORD) { ! if (! cleared) ! emit_move_insn (target, CONST0_RTX (GET_MODE (target))); ! cleared = 1; } --- 4395,4424 ---- HOST_WIDE_INT exp_size = int_size_in_bytes (type); #endif if (TREE_CODE (type) == RECORD_TYPE || TREE_CODE (type) == UNION_TYPE || TREE_CODE (type) == QUAL_UNION_TYPE) { ! tree elt; ! /* We either clear the aggregate or indicate the value is dead. */ if ((TREE_CODE (type) == UNION_TYPE || TREE_CODE (type) == QUAL_UNION_TYPE) ! && ! cleared ! && ! CONSTRUCTOR_ELTS (exp)) ! /* If the constructor is empty, clear the union. */ { ! clear_storage (target, expr_size (exp)); ! cleared = 1; } /* If we are building a static constructor into a register, set the initial value as zero so we can fold the value into a constant. But if more than one register is involved, this probably loses. */ ! else if (! cleared && GET_CODE (target) == REG && TREE_STATIC (exp) && GET_MODE_SIZE (GET_MODE (target)) <= UNITS_PER_WORD) { ! emit_move_insn (target, CONST0_RTX (GET_MODE (target))); cleared = 1; } *************** store_constructor (exp, target, align, c *** 4434,4453 **** clear the whole structure first. Don't do this if TARGET is a register whose mode size isn't equal to SIZE since clear_storage can't handle this case. */ ! else if (size > 0 && ((list_length (CONSTRUCTOR_ELTS (exp)) != fields_length (type)) || mostly_zeros_p (exp)) && (GET_CODE (target) != REG ! || (HOST_WIDE_INT) GET_MODE_SIZE (GET_MODE (target)) == size)) { ! if (! cleared) ! clear_storage (target, GEN_INT (size), align); ! cleared = 1; } ! else if (! cleared) ! /* Inform later passes that the old value is dead. */ emit_insn (gen_rtx_CLOBBER (VOIDmode, target)); /* Store each element of the constructor into --- 4427,4445 ---- clear the whole structure first. Don't do this if TARGET is a register whose mode size isn't equal to SIZE since clear_storage can't handle this case. */ ! else if (! cleared && size > 0 && ((list_length (CONSTRUCTOR_ELTS (exp)) != fields_length (type)) || mostly_zeros_p (exp)) && (GET_CODE (target) != REG ! || ((HOST_WIDE_INT) GET_MODE_SIZE (GET_MODE (target)) ! == size))) { ! clear_storage (target, GEN_INT (size)); cleared = 1; } ! ! if (! cleared) emit_insn (gen_rtx_CLOBBER (VOIDmode, target)); /* Store each element of the constructor into *************** store_constructor (exp, target, align, c *** 4455,4465 **** for (elt = CONSTRUCTOR_ELTS (exp); elt; elt = TREE_CHAIN (elt)) { ! register tree field = TREE_PURPOSE (elt); ! #ifdef WORD_REGISTER_OPERATIONS tree value = TREE_VALUE (elt); ! #endif ! register enum machine_mode mode; HOST_WIDE_INT bitsize; HOST_WIDE_INT bitpos = 0; int unsignedp; --- 4447,4455 ---- for (elt = CONSTRUCTOR_ELTS (exp); elt; elt = TREE_CHAIN (elt)) { ! tree field = TREE_PURPOSE (elt); tree value = TREE_VALUE (elt); ! enum machine_mode mode; HOST_WIDE_INT bitsize; HOST_WIDE_INT bitpos = 0; int unsignedp; *************** store_constructor (exp, target, align, c *** 4472,4478 **** if (field == 0) continue; ! if (cleared && is_zeros_p (TREE_VALUE (elt))) continue; if (host_integerp (DECL_SIZE (field), 1)) --- 4462,4468 ---- if (field == 0) continue; ! if (cleared && is_zeros_p (value)) continue; if (host_integerp (DECL_SIZE (field), 1)) *************** store_constructor (exp, target, align, c *** 4507,4527 **** if (GET_CODE (to_rtx) != MEM) abort (); - if (GET_MODE (offset_rtx) != ptr_mode) - { #ifdef POINTERS_EXTEND_UNSIGNED ! offset_rtx = convert_memory_address (ptr_mode, offset_rtx); #else ! offset_rtx = convert_to_mode (ptr_mode, offset_rtx, 0); #endif - } ! to_rtx ! = change_address (to_rtx, VOIDmode, ! gen_rtx_PLUS (ptr_mode, XEXP (to_rtx, 0), ! force_reg (ptr_mode, ! offset_rtx))); ! align = DECL_OFFSET_ALIGN (field); } if (TREE_READONLY (field)) --- 4497,4512 ---- if (GET_CODE (to_rtx) != MEM) abort (); #ifdef POINTERS_EXTEND_UNSIGNED ! if (GET_MODE (offset_rtx) != Pmode) ! offset_rtx = convert_memory_address (Pmode, offset_rtx); #else ! if (GET_MODE (offset_rtx) != ptr_mode) ! offset_rtx = convert_to_mode (ptr_mode, offset_rtx, 0); #endif ! to_rtx = offset_address (to_rtx, offset_rtx, ! highest_pow2_factor (offset)); } if (TREE_READONLY (field)) *************** store_constructor (exp, target, align, c *** 4546,4556 **** --- 4531,4543 ---- && bitpos + BITS_PER_WORD <= exp_size * BITS_PER_UNIT) { tree type = TREE_TYPE (value); + if (TYPE_PRECISION (type) < BITS_PER_WORD) { type = type_for_size (BITS_PER_WORD, TREE_UNSIGNED (type)); value = convert (type, value); } + if (BYTES_BIG_ENDIAN) value = fold (build (LSHIFT_EXPR, type, value, *************** store_constructor (exp, target, align, c *** 4559,4585 **** mode = word_mode; } #endif store_constructor_field (to_rtx, bitsize, bitpos, mode, ! TREE_VALUE (elt), type, align, cleared, ! (DECL_NONADDRESSABLE_P (field) ! && GET_CODE (to_rtx) == MEM) ! ? MEM_ALIAS_SET (to_rtx) ! : get_alias_set (TREE_TYPE (field))); } } ! else if (TREE_CODE (type) == ARRAY_TYPE) { ! register tree elt; ! register int i; int need_to_clear; tree domain = TYPE_DOMAIN (type); tree elttype = TREE_TYPE (type); ! int const_bounds_p = (TYPE_MIN_VALUE (domain) ! && TYPE_MAX_VALUE (domain) ! && host_integerp (TYPE_MIN_VALUE (domain), 0) ! && host_integerp (TYPE_MAX_VALUE (domain), 0)); ! HOST_WIDE_INT minelt; ! HOST_WIDE_INT maxelt; /* If we have constant bounds for the range of the type, get them. */ if (const_bounds_p) --- 4546,4591 ---- mode = word_mode; } #endif + + if (GET_CODE (to_rtx) == MEM && !MEM_KEEP_ALIAS_SET_P (to_rtx) + && DECL_NONADDRESSABLE_P (field)) + { + to_rtx = copy_rtx (to_rtx); + MEM_KEEP_ALIAS_SET_P (to_rtx) = 1; + } + store_constructor_field (to_rtx, bitsize, bitpos, mode, ! value, type, cleared, ! get_alias_set (TREE_TYPE (field))); } } ! else if (TREE_CODE (type) == ARRAY_TYPE ! || TREE_CODE (type) == VECTOR_TYPE) { ! tree elt; ! int i; int need_to_clear; tree domain = TYPE_DOMAIN (type); tree elttype = TREE_TYPE (type); ! int const_bounds_p; ! HOST_WIDE_INT minelt = 0; ! HOST_WIDE_INT maxelt = 0; ! ! /* Vectors are like arrays, but the domain is stored via an array ! type indirectly. */ ! if (TREE_CODE (type) == VECTOR_TYPE) ! { ! /* Note that although TYPE_DEBUG_REPRESENTATION_TYPE uses ! the same field as TYPE_DOMAIN, we are not guaranteed that ! it always will. */ ! domain = TYPE_DEBUG_REPRESENTATION_TYPE (type); ! domain = TYPE_DOMAIN (TREE_TYPE (TYPE_FIELDS (domain))); ! } ! ! const_bounds_p = (TYPE_MIN_VALUE (domain) ! && TYPE_MAX_VALUE (domain) ! && host_integerp (TYPE_MIN_VALUE (domain), 0) ! && host_integerp (TYPE_MAX_VALUE (domain), 0)); /* If we have constant bounds for the range of the type, get them. */ if (const_bounds_p) *************** store_constructor (exp, target, align, c *** 4641,4650 **** if (need_to_clear && size > 0) { if (! cleared) ! clear_storage (target, GEN_INT (size), align); cleared = 1; } ! else /* Inform later passes that the old value is dead. */ emit_insn (gen_rtx_CLOBBER (VOIDmode, target)); --- 4647,4661 ---- if (need_to_clear && size > 0) { if (! cleared) ! { ! if (REG_P (target)) ! emit_move_insn (target, CONST0_RTX (GET_MODE (target))); ! else ! clear_storage (target, GEN_INT (size)); ! } cleared = 1; } ! else if (REG_P (target)) /* Inform later passes that the old value is dead. */ emit_insn (gen_rtx_CLOBBER (VOIDmode, target)); *************** store_constructor (exp, target, align, c *** 4655,4666 **** elt; elt = TREE_CHAIN (elt), i++) { ! register enum machine_mode mode; HOST_WIDE_INT bitsize; HOST_WIDE_INT bitpos; int unsignedp; tree value = TREE_VALUE (elt); - unsigned int align = TYPE_ALIGN (TREE_TYPE (value)); tree index = TREE_PURPOSE (elt); rtx xtarget = target; --- 4666,4676 ---- elt; elt = TREE_CHAIN (elt), i++) { ! enum machine_mode mode; HOST_WIDE_INT bitsize; HOST_WIDE_INT bitpos; int unsignedp; tree value = TREE_VALUE (elt); tree index = TREE_PURPOSE (elt); rtx xtarget = target; *************** store_constructor (exp, target, align, c *** 4680,4686 **** { tree lo_index = TREE_OPERAND (index, 0); tree hi_index = TREE_OPERAND (index, 1); ! rtx index_r, pos_rtx, addr, hi_r, loop_top, loop_end; struct nesting *loop; HOST_WIDE_INT lo, hi, count; tree position; --- 4690,4696 ---- { tree lo_index = TREE_OPERAND (index, 0); tree hi_index = TREE_OPERAND (index, 1); ! rtx index_r, pos_rtx, hi_r, loop_top, loop_end; struct nesting *loop; HOST_WIDE_INT lo, hi, count; tree position; *************** store_constructor (exp, target, align, c *** 4702,4712 **** for (; lo <= hi; lo++) { bitpos = lo * tree_low_cst (TYPE_SIZE (elttype), 0); store_constructor_field ! (target, bitsize, bitpos, mode, value, type, align, ! cleared, ! TYPE_NONALIASED_COMPONENT (type) ! ? MEM_ALIAS_SET (target) : get_alias_set (elttype)); } } else --- 4712,4730 ---- for (; lo <= hi; lo++) { bitpos = lo * tree_low_cst (TYPE_SIZE (elttype), 0); + + if (GET_CODE (target) == MEM + && !MEM_KEEP_ALIAS_SET_P (target) + && TREE_CODE (type) == ARRAY_TYPE + && TYPE_NONALIASED_COMPONENT (type)) + { + target = copy_rtx (target); + MEM_KEEP_ALIAS_SET_P (target) = 1; + } + store_constructor_field ! (target, bitsize, bitpos, mode, value, type, cleared, ! get_alias_set (elttype)); } } else *************** store_constructor (exp, target, align, c *** 4744,4753 **** TYPE_SIZE_UNIT (elttype))); pos_rtx = expand_expr (position, 0, VOIDmode, 0); ! addr = gen_rtx_PLUS (Pmode, XEXP (target, 0), pos_rtx); ! xtarget = change_address (target, mode, addr); if (TREE_CODE (value) == CONSTRUCTOR) ! store_constructor (value, xtarget, align, cleared, bitsize / BITS_PER_UNIT); else store_expr (value, xtarget, 0); --- 4762,4772 ---- TYPE_SIZE_UNIT (elttype))); pos_rtx = expand_expr (position, 0, VOIDmode, 0); ! xtarget = offset_address (target, pos_rtx, ! highest_pow2_factor (position)); ! xtarget = adjust_address (xtarget, mode, 0); if (TREE_CODE (value) == CONSTRUCTOR) ! store_constructor (value, xtarget, cleared, bitsize / BITS_PER_UNIT); else store_expr (value, xtarget, 0); *************** store_constructor (exp, target, align, c *** 4766,4772 **** else if ((index != 0 && ! host_integerp (index, 0)) || ! host_integerp (TYPE_SIZE (elttype), 1)) { - rtx pos_rtx, addr; tree position; if (index == 0) --- 4785,4790 ---- *************** store_constructor (exp, target, align, c *** 4780,4788 **** position = size_binop (MULT_EXPR, index, convert (ssizetype, TYPE_SIZE_UNIT (elttype))); ! pos_rtx = expand_expr (position, 0, VOIDmode, 0); ! addr = gen_rtx_PLUS (Pmode, XEXP (target, 0), pos_rtx); ! xtarget = change_address (target, mode, addr); store_expr (value, xtarget, 0); } else --- 4798,4807 ---- position = size_binop (MULT_EXPR, index, convert (ssizetype, TYPE_SIZE_UNIT (elttype))); ! xtarget = offset_address (target, ! expand_expr (position, 0, VOIDmode, 0), ! highest_pow2_factor (position)); ! xtarget = adjust_address (xtarget, mode, 0); store_expr (value, xtarget, 0); } else *************** store_constructor (exp, target, align, c *** 4793,4804 **** else bitpos = (i * tree_low_cst (TYPE_SIZE (elttype), 1)); store_constructor_field (target, bitsize, bitpos, mode, value, ! type, align, cleared, ! TYPE_NONALIASED_COMPONENT (type) ! && GET_CODE (target) == MEM ! ? MEM_ALIAS_SET (target) : ! get_alias_set (elttype)); } } --- 4812,4827 ---- else bitpos = (i * tree_low_cst (TYPE_SIZE (elttype), 1)); + if (GET_CODE (target) == MEM && !MEM_KEEP_ALIAS_SET_P (target) + && TREE_CODE (type) == ARRAY_TYPE + && TYPE_NONALIASED_COMPONENT (type)) + { + target = copy_rtx (target); + MEM_KEEP_ALIAS_SET_P (target) = 1; + } + store_constructor_field (target, bitsize, bitpos, mode, value, ! type, cleared, get_alias_set (elttype)); } } *************** store_constructor (exp, target, align, c *** 4826,4832 **** if (elt == NULL_TREE && size > 0) { if (!cleared) ! clear_storage (target, GEN_INT (size), TYPE_ALIGN (type)); return; } --- 4849,4855 ---- if (elt == NULL_TREE && size > 0) { if (!cleared) ! clear_storage (target, GEN_INT (size)); return; } *************** store_constructor (exp, target, align, c *** 4875,4884 **** XEXP if the set is multi-word, but not if it's single-word. */ if (GET_CODE (target) == MEM) ! { ! to_rtx = plus_constant (XEXP (target, 0), offset); ! to_rtx = change_address (target, mode, to_rtx); ! } else if (offset == 0) to_rtx = target; else --- 4898,4904 ---- XEXP if the set is multi-word, but not if it's single-word. */ if (GET_CODE (target) == MEM) ! to_rtx = adjust_address (target, mode, offset); else if (offset == 0) to_rtx = target; else *************** store_constructor (exp, target, align, c *** 4904,4910 **** || (tree_low_cst (TREE_VALUE (elt), 0) - tree_low_cst (TREE_PURPOSE (elt), 0) + 1 != (HOST_WIDE_INT) nbits)))) ! clear_storage (target, expr_size (exp), TYPE_ALIGN (type)); for (; elt != NULL_TREE; elt = TREE_CHAIN (elt)) { --- 4924,4930 ---- || (tree_low_cst (TREE_VALUE (elt), 0) - tree_low_cst (TREE_PURPOSE (elt), 0) + 1 != (HOST_WIDE_INT) nbits)))) ! clear_storage (target, expr_size (exp)); for (; elt != NULL_TREE; elt = TREE_CHAIN (elt)) { *************** store_constructor (exp, target, align, c *** 5001,5016 **** has mode VALUE_MODE if that is convenient to do. In this case, UNSIGNEDP must be nonzero if the value is an unsigned type. ! ALIGN is the alignment that TARGET is known to have. ! TOTAL_SIZE is the size in bytes of the structure, or -1 if varying. ALIAS_SET is the alias set for the destination. This value will (in general) be different from that for TARGET, since TARGET is a reference to the containing structure. */ static rtx ! store_field (target, bitsize, bitpos, mode, exp, value_mode, ! unsignedp, align, total_size, alias_set) rtx target; HOST_WIDE_INT bitsize; HOST_WIDE_INT bitpos; --- 5021,5035 ---- has mode VALUE_MODE if that is convenient to do. In this case, UNSIGNEDP must be nonzero if the value is an unsigned type. ! TYPE is the type of the underlying object, ALIAS_SET is the alias set for the destination. This value will (in general) be different from that for TARGET, since TARGET is a reference to the containing structure. */ static rtx ! store_field (target, bitsize, bitpos, mode, exp, value_mode, unsignedp, type, ! alias_set) rtx target; HOST_WIDE_INT bitsize; HOST_WIDE_INT bitpos; *************** store_field (target, bitsize, bitpos, mo *** 5018,5025 **** tree exp; enum machine_mode value_mode; int unsignedp; ! unsigned int align; ! HOST_WIDE_INT total_size; int alias_set; { HOST_WIDE_INT width_mask = 0; --- 5037,5043 ---- tree exp; enum machine_mode value_mode; int unsignedp; ! tree type; int alias_set; { HOST_WIDE_INT width_mask = 0; *************** store_field (target, bitsize, bitpos, mo *** 5031,5038 **** side-effects. */ if (bitsize == 0) return expand_expr (exp, const0_rtx, VOIDmode, 0); ! ! if (bitsize < HOST_BITS_PER_WIDE_INT) width_mask = ((HOST_WIDE_INT) 1 << bitsize) - 1; /* If we are storing into an unaligned field of an aligned union that is --- 5049,5055 ---- side-effects. */ if (bitsize == 0) return expand_expr (exp, const0_rtx, VOIDmode, 0); ! else if (bitsize >=0 && bitsize < HOST_BITS_PER_WIDE_INT) width_mask = ((HOST_WIDE_INT) 1 << bitsize) - 1; /* If we are storing into an unaligned field of an aligned union that is *************** store_field (target, bitsize, bitpos, mo *** 5051,5073 **** { rtx object = assign_temp ! (build_qualified_type (type_for_mode (GET_MODE (target), 0), ! TYPE_QUAL_CONST), 0, 1, 1); ! rtx blk_object = copy_rtx (object); ! ! PUT_MODE (blk_object, BLKmode); if (bitsize != (HOST_WIDE_INT) GET_MODE_BITSIZE (GET_MODE (target))) emit_move_insn (object, target); ! store_field (blk_object, bitsize, bitpos, mode, exp, VOIDmode, 0, ! align, total_size, alias_set); - /* Even though we aren't returning target, we need to - give it the updated value. */ emit_move_insn (target, object); return blk_object; } --- 5068,5086 ---- { rtx object = assign_temp ! (build_qualified_type (type, TYPE_QUALS (type) | TYPE_QUAL_CONST), 0, 1, 1); ! rtx blk_object = adjust_address (object, BLKmode, 0); if (bitsize != (HOST_WIDE_INT) GET_MODE_BITSIZE (GET_MODE (target))) emit_move_insn (object, target); ! store_field (blk_object, bitsize, bitpos, mode, exp, VOIDmode, 0, type, ! alias_set); emit_move_insn (target, object); + /* We want to return the BLKmode version of the data. */ return blk_object; } *************** store_field (target, bitsize, bitpos, mo *** 5092,5103 **** || GET_CODE (target) == SUBREG /* If the field isn't aligned enough to store as an ordinary memref, store it as a bit field. */ ! || (mode != BLKmode && SLOW_UNALIGNED_ACCESS (mode, align) ! && (align < GET_MODE_ALIGNMENT (mode) || bitpos % GET_MODE_ALIGNMENT (mode))) - || (mode == BLKmode && SLOW_UNALIGNED_ACCESS (mode, align) - && (TYPE_ALIGN (TREE_TYPE (exp)) > align - || bitpos % TYPE_ALIGN (TREE_TYPE (exp)) != 0)) /* If the RHS and field are a constant size and the size of the RHS isn't the same size as the bitfield, we must use bitfield operations. */ --- 5105,5113 ---- || GET_CODE (target) == SUBREG /* If the field isn't aligned enough to store as an ordinary memref, store it as a bit field. */ ! || (mode != BLKmode && SLOW_UNALIGNED_ACCESS (mode, MEM_ALIGN (target)) ! && (MEM_ALIGN (target) < GET_MODE_ALIGNMENT (mode) || bitpos % GET_MODE_ALIGNMENT (mode))) /* If the RHS and field are a constant size and the size of the RHS isn't the same size as the bitfield, we must use bitfield operations. */ *************** store_field (target, bitsize, bitpos, mo *** 5112,5118 **** low-order bits. However, if EXP's type is a record and this is big-endian machine, we want the upper BITSIZE bits. */ if (BYTES_BIG_ENDIAN && GET_MODE_CLASS (GET_MODE (temp)) == MODE_INT ! && bitsize < GET_MODE_BITSIZE (GET_MODE (temp)) && TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE) temp = expand_shift (RSHIFT_EXPR, GET_MODE (temp), temp, size_int (GET_MODE_BITSIZE (GET_MODE (temp)) --- 5122,5128 ---- low-order bits. However, if EXP's type is a record and this is big-endian machine, we want the upper BITSIZE bits. */ if (BYTES_BIG_ENDIAN && GET_MODE_CLASS (GET_MODE (temp)) == MODE_INT ! && bitsize < (HOST_WIDE_INT) GET_MODE_BITSIZE (GET_MODE (temp)) && TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE) temp = expand_shift (RSHIFT_EXPR, GET_MODE (temp), temp, size_int (GET_MODE_BITSIZE (GET_MODE (temp)) *************** store_field (target, bitsize, bitpos, mo *** 5130,5192 **** boundary. If so, we simply do a block copy. */ if (GET_MODE (target) == BLKmode && GET_MODE (temp) == BLKmode) { - unsigned int exp_align = expr_align (exp); - if (GET_CODE (target) != MEM || GET_CODE (temp) != MEM || bitpos % BITS_PER_UNIT != 0) abort (); ! target = change_address (target, VOIDmode, ! plus_constant (XEXP (target, 0), ! bitpos / BITS_PER_UNIT)); ! ! /* Make sure that ALIGN is no stricter than the alignment of EXP. */ ! align = MIN (exp_align, align); ! ! /* Find an alignment that is consistent with the bit position. */ ! while ((bitpos % align) != 0) ! align >>= 1; ! emit_block_move (target, temp, ! bitsize == -1 ? expr_size (exp) ! : GEN_INT ((bitsize + BITS_PER_UNIT - 1) ! / BITS_PER_UNIT), ! align); return value_mode == VOIDmode ? const0_rtx : target; } /* Store the value in the bitfield. */ ! store_bit_field (target, bitsize, bitpos, mode, temp, align, total_size); if (value_mode != VOIDmode) { ! /* The caller wants an rtx for the value. */ ! /* If possible, avoid refetching from the bitfield itself. */ if (width_mask != 0 && ! (GET_CODE (target) == MEM && MEM_VOLATILE_P (target))) { tree count; enum machine_mode tmode; - if (unsignedp) - return expand_and (temp, GEN_INT (width_mask), NULL_RTX); tmode = GET_MODE (temp); if (tmode == VOIDmode) tmode = value_mode; count = build_int_2 (GET_MODE_BITSIZE (tmode) - bitsize, 0); temp = expand_shift (LSHIFT_EXPR, tmode, temp, count, 0, 0); return expand_shift (RSHIFT_EXPR, tmode, temp, count, 0, 0); } return extract_bit_field (target, bitsize, bitpos, unsignedp, ! NULL_RTX, value_mode, 0, align, ! total_size); } return const0_rtx; } else { rtx addr = XEXP (target, 0); ! rtx to_rtx; /* If a value is wanted, it must be the lhs; so make the address stable for multiple use. */ --- 5140,5196 ---- boundary. If so, we simply do a block copy. */ if (GET_MODE (target) == BLKmode && GET_MODE (temp) == BLKmode) { if (GET_CODE (target) != MEM || GET_CODE (temp) != MEM || bitpos % BITS_PER_UNIT != 0) abort (); ! target = adjust_address (target, VOIDmode, bitpos / BITS_PER_UNIT); emit_block_move (target, temp, ! GEN_INT ((bitsize + BITS_PER_UNIT - 1) ! / BITS_PER_UNIT)); return value_mode == VOIDmode ? const0_rtx : target; } /* Store the value in the bitfield. */ ! store_bit_field (target, bitsize, bitpos, mode, temp, ! int_size_in_bytes (type)); ! if (value_mode != VOIDmode) { ! /* The caller wants an rtx for the value. ! If possible, avoid refetching from the bitfield itself. */ if (width_mask != 0 && ! (GET_CODE (target) == MEM && MEM_VOLATILE_P (target))) { tree count; enum machine_mode tmode; tmode = GET_MODE (temp); if (tmode == VOIDmode) tmode = value_mode; + + if (unsignedp) + return expand_and (tmode, temp, + GEN_INT (trunc_int_for_mode (width_mask, + tmode)), + NULL_RTX); + count = build_int_2 (GET_MODE_BITSIZE (tmode) - bitsize, 0); temp = expand_shift (LSHIFT_EXPR, tmode, temp, count, 0, 0); return expand_shift (RSHIFT_EXPR, tmode, temp, count, 0, 0); } + return extract_bit_field (target, bitsize, bitpos, unsignedp, ! NULL_RTX, value_mode, VOIDmode, ! int_size_in_bytes (type)); } return const0_rtx; } else { rtx addr = XEXP (target, 0); ! rtx to_rtx = target; /* If a value is wanted, it must be the lhs; so make the address stable for multiple use. */ *************** store_field (target, bitsize, bitpos, mo *** 5198,5230 **** && GET_CODE (XEXP (addr, 1)) == CONST_INT && (XEXP (addr, 0) == virtual_incoming_args_rtx || XEXP (addr, 0) == virtual_stack_vars_rtx))) ! addr = copy_to_reg (addr); /* Now build a reference to just the desired component. */ ! to_rtx = copy_rtx (change_address (target, mode, ! plus_constant (addr, ! (bitpos ! / BITS_PER_UNIT)))); MEM_SET_IN_STRUCT_P (to_rtx, 1); ! /* If the address of the structure varies, then it might be on ! the stack. And, stack slots may be shared across scopes. ! So, two different structures, of different types, can end up ! at the same location. We will give the structures alias set ! zero; here we must be careful not to give non-zero alias sets ! to their fields. */ ! if (!rtx_varies_p (addr, /*for_alias=*/0)) ! MEM_ALIAS_SET (to_rtx) = alias_set; ! else ! MEM_ALIAS_SET (to_rtx) = 0; return store_expr (exp, to_rtx, value_mode != VOIDmode); } } /* Given an expression EXP that may be a COMPONENT_REF, a BIT_FIELD_REF, ! or an ARRAY_REF, look for nested COMPONENT_REFs, BIT_FIELD_REFs, or ! ARRAY_REFs and find the ultimate containing object, which we return. We set *PBITSIZE to the size in bits that we want, *PBITPOS to the bit position, and *PUNSIGNEDP to the signedness of the field. --- 5202,5227 ---- && GET_CODE (XEXP (addr, 1)) == CONST_INT && (XEXP (addr, 0) == virtual_incoming_args_rtx || XEXP (addr, 0) == virtual_stack_vars_rtx))) ! to_rtx = replace_equiv_address (to_rtx, copy_to_reg (addr)); /* Now build a reference to just the desired component. */ ! to_rtx = adjust_address (target, mode, bitpos / BITS_PER_UNIT); ! ! if (to_rtx == target) ! to_rtx = copy_rtx (to_rtx); ! MEM_SET_IN_STRUCT_P (to_rtx, 1); ! if (!MEM_KEEP_ALIAS_SET_P (to_rtx) && MEM_ALIAS_SET (to_rtx) != 0) ! set_mem_alias_set (to_rtx, alias_set); return store_expr (exp, to_rtx, value_mode != VOIDmode); } } /* Given an expression EXP that may be a COMPONENT_REF, a BIT_FIELD_REF, ! an ARRAY_REF, or an ARRAY_RANGE_REF, look for nested operations of these ! codes and find the ultimate containing object, which we return. We set *PBITSIZE to the size in bits that we want, *PBITPOS to the bit position, and *PUNSIGNEDP to the signedness of the field. *************** store_field (target, bitsize, bitpos, mo *** 5232,5240 **** giving the variable offset (in units) in *POFFSET. This offset is in addition to the bit position. If the position is not variable, we store 0 in *POFFSET. - We set *PALIGNMENT to the alignment of the address that will be - computed. This is the alignment of the thing we return if *POFFSET - is zero, but can be more less strictly aligned if *POFFSET is nonzero. If any of the extraction expressions is volatile, we store 1 in *PVOLATILEP. Otherwise we don't change that. --- 5229,5234 ---- *************** store_field (target, bitsize, bitpos, mo *** 5245,5255 **** If the field describes a variable-sized object, *PMODE is set to VOIDmode and *PBITSIZE is set to -1. An access cannot be made in ! this case, but the address of the object can be found. */ tree get_inner_reference (exp, pbitsize, pbitpos, poffset, pmode, ! punsignedp, pvolatilep, palignment) tree exp; HOST_WIDE_INT *pbitsize; HOST_WIDE_INT *pbitpos; --- 5239,5249 ---- If the field describes a variable-sized object, *PMODE is set to VOIDmode and *PBITSIZE is set to -1. An access cannot be made in ! this case, but the address of the object can be found. */ tree get_inner_reference (exp, pbitsize, pbitpos, poffset, pmode, ! punsignedp, pvolatilep) tree exp; HOST_WIDE_INT *pbitsize; HOST_WIDE_INT *pbitpos; *************** get_inner_reference (exp, pbitsize, pbit *** 5257,5269 **** enum machine_mode *pmode; int *punsignedp; int *pvolatilep; - unsigned int *palignment; { tree size_tree = 0; enum machine_mode mode = VOIDmode; tree offset = size_zero_node; tree bit_offset = bitsize_zero_node; ! unsigned int alignment = BIGGEST_ALIGNMENT; tree tem; /* First get the mode, signedness, and size. We do this from just the --- 5251,5262 ---- enum machine_mode *pmode; int *punsignedp; int *pvolatilep; { tree size_tree = 0; enum machine_mode mode = VOIDmode; tree offset = size_zero_node; tree bit_offset = bitsize_zero_node; ! tree placeholder_ptr = 0; tree tem; /* First get the mode, signedness, and size. We do this from just the *************** get_inner_reference (exp, pbitsize, pbit *** 5324,5339 **** bit_offset = size_binop (PLUS_EXPR, bit_offset, DECL_FIELD_BIT_OFFSET (field)); ! if (! host_integerp (offset, 0)) ! alignment = MIN (alignment, DECL_OFFSET_ALIGN (field)); } ! else if (TREE_CODE (exp) == ARRAY_REF) { tree index = TREE_OPERAND (exp, 1); ! tree domain = TYPE_DOMAIN (TREE_TYPE (TREE_OPERAND (exp, 0))); tree low_bound = (domain ? TYPE_MIN_VALUE (domain) : 0); ! tree unit_size = TYPE_SIZE_UNIT (TREE_TYPE (exp)); /* We assume all arrays have sizes that are a multiple of a byte. First subtract the lower bound, if any, in the type of the --- 5317,5333 ---- bit_offset = size_binop (PLUS_EXPR, bit_offset, DECL_FIELD_BIT_OFFSET (field)); ! /* ??? Right now we don't do anything with DECL_OFFSET_ALIGN. */ } ! else if (TREE_CODE (exp) == ARRAY_REF ! || TREE_CODE (exp) == ARRAY_RANGE_REF) { tree index = TREE_OPERAND (exp, 1); ! tree array = TREE_OPERAND (exp, 0); ! tree domain = TYPE_DOMAIN (TREE_TYPE (array)); tree low_bound = (domain ? TYPE_MIN_VALUE (domain) : 0); ! tree unit_size = TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (array))); /* We assume all arrays have sizes that are a multiple of a byte. First subtract the lower bound, if any, in the type of the *************** get_inner_reference (exp, pbitsize, pbit *** 5351,5358 **** index = build (WITH_RECORD_EXPR, TREE_TYPE (index), index, exp); if (! TREE_CONSTANT (unit_size) && contains_placeholder_p (unit_size)) ! unit_size = build (WITH_RECORD_EXPR, sizetype, unit_size, ! TREE_OPERAND (exp, 0)); offset = size_binop (PLUS_EXPR, offset, size_binop (MULT_EXPR, --- 5345,5351 ---- index = build (WITH_RECORD_EXPR, TREE_TYPE (index), index, exp); if (! TREE_CONSTANT (unit_size) && contains_placeholder_p (unit_size)) ! unit_size = build (WITH_RECORD_EXPR, sizetype, unit_size, array); offset = size_binop (PLUS_EXPR, offset, size_binop (MULT_EXPR, *************** get_inner_reference (exp, pbitsize, pbit *** 5360,5366 **** --- 5353,5374 ---- unit_size)); } + else if (TREE_CODE (exp) == PLACEHOLDER_EXPR) + { + tree new = find_placeholder (exp, &placeholder_ptr); + + /* If we couldn't find the replacement, return the PLACEHOLDER_EXPR. + We might have been called from tree optimization where we + haven't set up an object yet. */ + if (new == 0) + break; + else + exp = new; + + continue; + } else if (TREE_CODE (exp) != NON_LVALUE_EXPR + && TREE_CODE (exp) != VIEW_CONVERT_EXPR && ! ((TREE_CODE (exp) == NOP_EXPR || TREE_CODE (exp) == CONVERT_EXPR) && (TYPE_MODE (TREE_TYPE (exp)) *************** get_inner_reference (exp, pbitsize, pbit *** 5371,5389 **** if (TREE_THIS_VOLATILE (exp)) *pvolatilep = 1; - /* If the offset is non-constant already, then we can't assume any - alignment more than the alignment here. */ - if (! TREE_CONSTANT (offset)) - alignment = MIN (alignment, TYPE_ALIGN (TREE_TYPE (exp))); - exp = TREE_OPERAND (exp, 0); } - if (DECL_P (exp)) - alignment = MIN (alignment, DECL_ALIGN (exp)); - else if (TREE_TYPE (exp) != 0) - alignment = MIN (alignment, TYPE_ALIGN (TREE_TYPE (exp))); - /* If OFFSET is constant, see if we can return the whole thing as a constant bit position. Otherwise, split it up. */ if (host_integerp (offset, 0) --- 5379,5387 ---- *************** get_inner_reference (exp, pbitsize, pbit *** 5396,5433 **** *pbitpos = tree_low_cst (bit_offset, 0), *poffset = offset; *pmode = mode; - *palignment = alignment; return exp; } ! /* Subroutine of expand_exp: compute memory_usage from modifier. */ ! static enum memory_use_mode ! get_memory_usage_from_modifier (modifier) ! enum expand_modifier modifier; { ! switch (modifier) { ! case EXPAND_NORMAL: ! case EXPAND_SUM: ! return MEMORY_USE_RO; ! break; ! case EXPAND_MEMORY_USE_WO: ! return MEMORY_USE_WO; ! break; ! case EXPAND_MEMORY_USE_RW: ! return MEMORY_USE_RW; ! break; ! case EXPAND_MEMORY_USE_DONT: ! /* EXPAND_CONST_ADDRESS and EXPAND_INITIALIZER are converted into ! MEMORY_USE_DONT, because they are modifiers to a call of ! expand_expr in the ADDR_EXPR case of expand_expr. */ ! case EXPAND_CONST_ADDRESS: ! case EXPAND_INITIALIZER: ! return MEMORY_USE_DONT; ! case EXPAND_MEMORY_USE_BAD: default: ! abort (); } } --- 5394,5425 ---- *pbitpos = tree_low_cst (bit_offset, 0), *poffset = offset; *pmode = mode; return exp; } ! /* Return 1 if T is an expression that get_inner_reference handles. */ ! int ! handled_component_p (t) ! tree t; { ! switch (TREE_CODE (t)) { ! case BIT_FIELD_REF: ! case COMPONENT_REF: ! case ARRAY_REF: ! case ARRAY_RANGE_REF: ! case NON_LVALUE_EXPR: ! case VIEW_CONVERT_EXPR: ! return 1; ! ! case NOP_EXPR: ! case CONVERT_EXPR: ! return (TYPE_MODE (TREE_TYPE (t)) ! == TYPE_MODE (TREE_TYPE (TREE_OPERAND (t, 0)))); ! default: ! return 0; } } *************** rtx *** 5442,5458 **** force_operand (value, target) rtx value, target; { ! register optab binoptab = 0; /* Use a temporary to force order of execution of calls to `force_operand'. */ rtx tmp; ! register rtx op2; /* Use subtarget as the target for operand 0 of a binary operation. */ ! register rtx subtarget = get_subtarget (target); /* Check for a PIC address load. */ ! if (flag_pic ! && (GET_CODE (value) == PLUS || GET_CODE (value) == MINUS) && XEXP (value, 0) == pic_offset_table_rtx && (GET_CODE (XEXP (value, 1)) == SYMBOL_REF || GET_CODE (XEXP (value, 1)) == LABEL_REF --- 5434,5449 ---- force_operand (value, target) rtx value, target; { ! optab binoptab = 0; /* Use a temporary to force order of execution of calls to `force_operand'. */ rtx tmp; ! rtx op2; /* Use subtarget as the target for operand 0 of a binary operation. */ ! rtx subtarget = get_subtarget (target); /* Check for a PIC address load. */ ! if ((GET_CODE (value) == PLUS || GET_CODE (value) == MINUS) && XEXP (value, 0) == pic_offset_table_rtx && (GET_CODE (XEXP (value, 1)) == SYMBOL_REF || GET_CODE (XEXP (value, 1)) == LABEL_REF *************** force_operand (value, target) *** 5519,5590 **** /* We give UNSIGNEDP = 0 to expand_binop because the only operations we are expanding here are signed ones. */ } - return value; - } - - /* Subroutine of expand_expr: - save the non-copied parts (LIST) of an expr (LHS), and return a list - which can restore these values to their previous values, - should something modify their storage. */ - - static tree - save_noncopied_parts (lhs, list) - tree lhs; - tree list; - { - tree tail; - tree parts = 0; - - for (tail = list; tail; tail = TREE_CHAIN (tail)) - if (TREE_CODE (TREE_VALUE (tail)) == TREE_LIST) - parts = chainon (parts, save_noncopied_parts (lhs, TREE_VALUE (tail))); - else - { - tree part = TREE_VALUE (tail); - tree part_type = TREE_TYPE (part); - tree to_be_saved = build (COMPONENT_REF, part_type, lhs, part); - rtx target - = assign_temp (build_qualified_type (part_type, - (TYPE_QUALS (part_type) - | TYPE_QUAL_CONST)), - 0, 1, 1); - - if (! memory_address_p (TYPE_MODE (part_type), XEXP (target, 0))) - target = change_address (target, TYPE_MODE (part_type), NULL_RTX); - parts = tree_cons (to_be_saved, - build (RTL_EXPR, part_type, NULL_TREE, - (tree) target), - parts); - store_expr (TREE_PURPOSE (parts), RTL_EXPR_RTL (TREE_VALUE (parts)), 0); - } - return parts; - } ! /* Subroutine of expand_expr: ! record the non-copied parts (LIST) of an expr (LHS), and return a list ! which specifies the initial values of these parts. */ ! ! static tree ! init_noncopied_parts (lhs, list) ! tree lhs; ! tree list; ! { ! tree tail; ! tree parts = 0; ! for (tail = list; tail; tail = TREE_CHAIN (tail)) ! if (TREE_CODE (TREE_VALUE (tail)) == TREE_LIST) ! parts = chainon (parts, init_noncopied_parts (lhs, TREE_VALUE (tail))); ! else if (TREE_PURPOSE (tail)) ! { ! tree part = TREE_VALUE (tail); ! tree part_type = TREE_TYPE (part); ! tree to_be_initialized = build (COMPONENT_REF, part_type, lhs, part); ! parts = tree_cons (TREE_PURPOSE (tail), to_be_initialized, parts); ! } ! return parts; } ! /* Subroutine of expand_expr: return nonzero iff there is no way that EXP can reference X, which is being modified. TOP_P is nonzero if this call is going to be used to determine whether we need a temporary --- 5510,5534 ---- /* We give UNSIGNEDP = 0 to expand_binop because the only operations we are expanding here are signed ones. */ } ! #ifdef INSN_SCHEDULING ! /* On machines that have insn scheduling, we want all memory reference to be ! explicit, so we need to deal with such paradoxical SUBREGs. */ ! if (GET_CODE (value) == SUBREG && GET_CODE (SUBREG_REG (value)) == MEM ! && (GET_MODE_SIZE (GET_MODE (value)) ! > GET_MODE_SIZE (GET_MODE (SUBREG_REG (value))))) ! value ! = simplify_gen_subreg (GET_MODE (value), ! force_reg (GET_MODE (SUBREG_REG (value)), ! force_operand (SUBREG_REG (value), ! NULL_RTX)), ! GET_MODE (SUBREG_REG (value)), ! SUBREG_BYTE (value)); ! #endif ! return value; } ! /* Subroutine of expand_expr: return nonzero iff there is no way that EXP can reference X, which is being modified. TOP_P is nonzero if this call is going to be used to determine whether we need a temporary *************** safe_from_p (x, exp, top_p) *** 5661,5667 **** switch (TREE_CODE_CLASS (TREE_CODE (exp))) { case 'd': ! exp_rtl = DECL_RTL_SET_P (exp) ? DECL_RTL (exp) : NULL_RTX; break; case 'c': --- 5605,5611 ---- switch (TREE_CODE_CLASS (TREE_CODE (exp))) { case 'd': ! exp_rtl = DECL_RTL_IF_SET (exp); break; case 'c': *************** safe_from_p (x, exp, top_p) *** 5696,5704 **** switch (TREE_CODE (exp)) { case ADDR_EXPR: ! return (staticp (TREE_OPERAND (exp, 0)) ! || TREE_STATIC (exp) ! || safe_from_p (x, TREE_OPERAND (exp, 0), 0)); case INDIRECT_REF: if (GET_CODE (x) == MEM --- 5640,5665 ---- switch (TREE_CODE (exp)) { case ADDR_EXPR: ! /* If the operand is static or we are static, we can't conflict. ! Likewise if we don't conflict with the operand at all. */ ! if (staticp (TREE_OPERAND (exp, 0)) ! || TREE_STATIC (exp) ! || safe_from_p (x, TREE_OPERAND (exp, 0), 0)) ! return 1; ! ! /* Otherwise, the only way this can conflict is if we are taking ! the address of a DECL a that address if part of X, which is ! very rare. */ ! exp = TREE_OPERAND (exp, 0); ! if (DECL_P (exp)) ! { ! if (!DECL_RTL_SET_P (exp) ! || GET_CODE (DECL_RTL (exp)) != MEM) ! return 0; ! else ! exp_rtl = XEXP (DECL_RTL (exp), 0); ! } ! break; case INDIRECT_REF: if (GET_CODE (x) == MEM *************** safe_from_p (x, exp, top_p) *** 5726,5732 **** break; case WITH_CLEANUP_EXPR: ! exp_rtl = RTL_EXPR_RTL (exp); break; case CLEANUP_POINT_EXPR: --- 5687,5693 ---- break; case WITH_CLEANUP_EXPR: ! exp_rtl = WITH_CLEANUP_EXPR_RTL (exp); break; case CLEANUP_POINT_EXPR: *************** safe_from_p (x, exp, top_p) *** 5759,5765 **** return safe_from_p (x, TREE_OPERAND (exp, 1), 0); case METHOD_CALL_EXPR: ! /* This takes a rtx argument, but shouldn't appear here. */ abort (); default: --- 5720,5726 ---- return safe_from_p (x, TREE_OPERAND (exp, 1), 0); case METHOD_CALL_EXPR: ! /* This takes an rtx argument, but shouldn't appear here. */ abort (); default: *************** safe_from_p (x, exp, top_p) *** 5780,5787 **** special handling. */ if ((unsigned int) TREE_CODE (exp) >= (unsigned int) LAST_AND_UNUSED_TREE_CODE ! && lang_safe_from_p ! && !(*lang_safe_from_p) (x, exp)) return 0; } --- 5741,5747 ---- special handling. */ if ((unsigned int) TREE_CODE (exp) >= (unsigned int) LAST_AND_UNUSED_TREE_CODE ! && !(*lang_hooks.safe_from_p) (x, exp)) return 0; } *************** safe_from_p (x, exp, top_p) *** 5801,5807 **** are memory and they conflict. */ return ! (rtx_equal_p (x, exp_rtl) || (GET_CODE (x) == MEM && GET_CODE (exp_rtl) == MEM ! && true_dependence (exp_rtl, GET_MODE (x), x, rtx_addr_varies_p))); } --- 5761,5767 ---- are memory and they conflict. */ return ! (rtx_equal_p (x, exp_rtl) || (GET_CODE (x) == MEM && GET_CODE (exp_rtl) == MEM ! && true_dependence (exp_rtl, VOIDmode, x, rtx_addr_varies_p))); } *************** safe_from_p (x, exp, top_p) *** 5809,5830 **** return 1; } - /* Subroutine of expand_expr: return nonzero iff EXP is an - expression whose type is statically determinable. */ - - static int - fixed_type_p (exp) - tree exp; - { - if (TREE_CODE (exp) == PARM_DECL - || TREE_CODE (exp) == VAR_DECL - || TREE_CODE (exp) == CALL_EXPR || TREE_CODE (exp) == TARGET_EXPR - || TREE_CODE (exp) == COMPONENT_REF - || TREE_CODE (exp) == ARRAY_REF) - return 1; - return 0; - } - /* Subroutine of expand_expr: return rtx if EXP is a variable or parameter; else return 0. */ --- 5769,5774 ---- *************** check_max_integer_computation_mode (exp) *** 5898,5903 **** --- 5842,5998 ---- } #endif + /* Return the highest power of two that EXP is known to be a multiple of. + This is used in updating alignment of MEMs in array references. */ + + static HOST_WIDE_INT + highest_pow2_factor (exp) + tree exp; + { + HOST_WIDE_INT c0, c1; + + switch (TREE_CODE (exp)) + { + case INTEGER_CST: + /* We can find the lowest bit that's a one. If the low + HOST_BITS_PER_WIDE_INT bits are zero, return BIGGEST_ALIGNMENT. + We need to handle this case since we can find it in a COND_EXPR, + a MIN_EXPR, or a MAX_EXPR. If the constant overlows, we have an + erroneous program, so return BIGGEST_ALIGNMENT to avoid any + later ICE. */ + if (TREE_CONSTANT_OVERFLOW (exp)) + return BIGGEST_ALIGNMENT; + else + { + /* Note: tree_low_cst is intentionally not used here, + we don't care about the upper bits. */ + c0 = TREE_INT_CST_LOW (exp); + c0 &= -c0; + return c0 ? c0 : BIGGEST_ALIGNMENT; + } + break; + + case PLUS_EXPR: case MINUS_EXPR: case MIN_EXPR: case MAX_EXPR: + c0 = highest_pow2_factor (TREE_OPERAND (exp, 0)); + c1 = highest_pow2_factor (TREE_OPERAND (exp, 1)); + return MIN (c0, c1); + + case MULT_EXPR: + c0 = highest_pow2_factor (TREE_OPERAND (exp, 0)); + c1 = highest_pow2_factor (TREE_OPERAND (exp, 1)); + return c0 * c1; + + case ROUND_DIV_EXPR: case TRUNC_DIV_EXPR: case FLOOR_DIV_EXPR: + case CEIL_DIV_EXPR: + if (integer_pow2p (TREE_OPERAND (exp, 1)) + && host_integerp (TREE_OPERAND (exp, 1), 1)) + { + c0 = highest_pow2_factor (TREE_OPERAND (exp, 0)); + c1 = tree_low_cst (TREE_OPERAND (exp, 1), 1); + return MAX (1, c0 / c1); + } + break; + + case NON_LVALUE_EXPR: case NOP_EXPR: case CONVERT_EXPR: + case SAVE_EXPR: case WITH_RECORD_EXPR: + return highest_pow2_factor (TREE_OPERAND (exp, 0)); + + case COMPOUND_EXPR: + return highest_pow2_factor (TREE_OPERAND (exp, 1)); + + case COND_EXPR: + c0 = highest_pow2_factor (TREE_OPERAND (exp, 1)); + c1 = highest_pow2_factor (TREE_OPERAND (exp, 2)); + return MIN (c0, c1); + + default: + break; + } + + return 1; + } + + /* Similar, except that it is known that the expression must be a multiple + of the alignment of TYPE. */ + + static HOST_WIDE_INT + highest_pow2_factor_for_type (type, exp) + tree type; + tree exp; + { + HOST_WIDE_INT type_align, factor; + + factor = highest_pow2_factor (exp); + type_align = TYPE_ALIGN (type) / BITS_PER_UNIT; + return MAX (factor, type_align); + } + + /* Return an object on the placeholder list that matches EXP, a + PLACEHOLDER_EXPR. An object "matches" if it is of the type of the + PLACEHOLDER_EXPR or a pointer type to it. For further information, see + tree.def. If no such object is found, return 0. If PLIST is nonzero, it + is a location which initially points to a starting location in the + placeholder list (zero means start of the list) and where a pointer into + the placeholder list at which the object is found is placed. */ + + tree + find_placeholder (exp, plist) + tree exp; + tree *plist; + { + tree type = TREE_TYPE (exp); + tree placeholder_expr; + + for (placeholder_expr + = plist && *plist ? TREE_CHAIN (*plist) : placeholder_list; + placeholder_expr != 0; + placeholder_expr = TREE_CHAIN (placeholder_expr)) + { + tree need_type = TYPE_MAIN_VARIANT (type); + tree elt; + + /* Find the outermost reference that is of the type we want. If none, + see if any object has a type that is a pointer to the type we + want. */ + for (elt = TREE_PURPOSE (placeholder_expr); elt != 0; + elt = ((TREE_CODE (elt) == COMPOUND_EXPR + || TREE_CODE (elt) == COND_EXPR) + ? TREE_OPERAND (elt, 1) + : (TREE_CODE_CLASS (TREE_CODE (elt)) == 'r' + || TREE_CODE_CLASS (TREE_CODE (elt)) == '1' + || TREE_CODE_CLASS (TREE_CODE (elt)) == '2' + || TREE_CODE_CLASS (TREE_CODE (elt)) == 'e') + ? TREE_OPERAND (elt, 0) : 0)) + if (TYPE_MAIN_VARIANT (TREE_TYPE (elt)) == need_type) + { + if (plist) + *plist = placeholder_expr; + return elt; + } + + for (elt = TREE_PURPOSE (placeholder_expr); elt != 0; + elt + = ((TREE_CODE (elt) == COMPOUND_EXPR + || TREE_CODE (elt) == COND_EXPR) + ? TREE_OPERAND (elt, 1) + : (TREE_CODE_CLASS (TREE_CODE (elt)) == 'r' + || TREE_CODE_CLASS (TREE_CODE (elt)) == '1' + || TREE_CODE_CLASS (TREE_CODE (elt)) == '2' + || TREE_CODE_CLASS (TREE_CODE (elt)) == 'e') + ? TREE_OPERAND (elt, 0) : 0)) + if (POINTER_TYPE_P (TREE_TYPE (elt)) + && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (elt))) + == need_type)) + { + if (plist) + *plist = placeholder_expr; + return build1 (INDIRECT_REF, need_type, elt); + } + } + + return 0; + } + /* expand_expr: generate code for computing expression EXP. An rtx for the computed value is returned. The value is never null. In the case of a void EXP, const0_rtx is returned. *************** check_max_integer_computation_mode (exp) *** 5935,5956 **** rtx expand_expr (exp, target, tmode, modifier) ! register tree exp; rtx target; enum machine_mode tmode; enum expand_modifier modifier; { ! register rtx op0, op1, temp; tree type = TREE_TYPE (exp); int unsignedp = TREE_UNSIGNED (type); ! register enum machine_mode mode; ! register enum tree_code code = TREE_CODE (exp); optab this_optab; rtx subtarget, original_target; int ignore; tree context; - /* Used by check-memory-usage to make modifier read only. */ - enum expand_modifier ro_modifier; /* Handle ERROR_MARK before anybody tries to access its type. */ if (TREE_CODE (exp) == ERROR_MARK || TREE_CODE (type) == ERROR_MARK) --- 6030,6049 ---- rtx expand_expr (exp, target, tmode, modifier) ! tree exp; rtx target; enum machine_mode tmode; enum expand_modifier modifier; { ! rtx op0, op1, temp; tree type = TREE_TYPE (exp); int unsignedp = TREE_UNSIGNED (type); ! enum machine_mode mode; ! enum tree_code code = TREE_CODE (exp); optab this_optab; rtx subtarget, original_target; int ignore; tree context; /* Handle ERROR_MARK before anybody tries to access its type. */ if (TREE_CODE (exp) == ERROR_MARK || TREE_CODE (type) == ERROR_MARK) *************** expand_expr (exp, target, tmode, modifie *** 5968,5983 **** ignore = (target == const0_rtx || ((code == NON_LVALUE_EXPR || code == NOP_EXPR || code == CONVERT_EXPR || code == REFERENCE_EXPR ! || code == COND_EXPR) && TREE_CODE (type) == VOID_TYPE)); - /* Make a read-only version of the modifier. */ - if (modifier == EXPAND_NORMAL || modifier == EXPAND_SUM - || modifier == EXPAND_CONST_ADDRESS || modifier == EXPAND_INITIALIZER) - ro_modifier = modifier; - else - ro_modifier = EXPAND_NORMAL; - /* If we are going to ignore this result, we need only do something if there is a side-effect somewhere in the expression. If there is, short-circuit the most common cases here. Note that we must --- 6061,6069 ---- ignore = (target == const0_rtx || ((code == NON_LVALUE_EXPR || code == NOP_EXPR || code == CONVERT_EXPR || code == REFERENCE_EXPR ! || code == COND_EXPR || code == VIEW_CONVERT_EXPR) && TREE_CODE (type) == VOID_TYPE)); /* If we are going to ignore this result, we need only do something if there is a side-effect somewhere in the expression. If there is, short-circuit the most common cases here. Note that we must *************** expand_expr (exp, target, tmode, modifie *** 5996,6002 **** && mode != VOIDmode && mode != BLKmode && modifier != EXPAND_CONST_ADDRESS) { ! temp = expand_expr (exp, NULL_RTX, VOIDmode, ro_modifier); if (GET_CODE (temp) == MEM) temp = copy_to_reg (temp); return const0_rtx; --- 6082,6088 ---- && mode != VOIDmode && mode != BLKmode && modifier != EXPAND_CONST_ADDRESS) { ! temp = expand_expr (exp, NULL_RTX, VOIDmode, modifier); if (GET_CODE (temp) == MEM) temp = copy_to_reg (temp); return const0_rtx; *************** expand_expr (exp, target, tmode, modifie *** 6004,6032 **** if (TREE_CODE_CLASS (code) == '1' || code == COMPONENT_REF || code == INDIRECT_REF || code == BUFFER_REF) ! return expand_expr (TREE_OPERAND (exp, 0), const0_rtx, ! VOIDmode, ro_modifier); else if (TREE_CODE_CLASS (code) == '2' || TREE_CODE_CLASS (code) == '<' ! || code == ARRAY_REF) { ! expand_expr (TREE_OPERAND (exp, 0), const0_rtx, VOIDmode, ro_modifier); ! expand_expr (TREE_OPERAND (exp, 1), const0_rtx, VOIDmode, ro_modifier); return const0_rtx; } else if ((code == TRUTH_ANDIF_EXPR || code == TRUTH_ORIF_EXPR) && ! TREE_SIDE_EFFECTS (TREE_OPERAND (exp, 1))) /* If the second operand has no side effects, just evaluate the first. */ ! return expand_expr (TREE_OPERAND (exp, 0), const0_rtx, ! VOIDmode, ro_modifier); else if (code == BIT_FIELD_REF) { ! expand_expr (TREE_OPERAND (exp, 0), const0_rtx, VOIDmode, ro_modifier); ! expand_expr (TREE_OPERAND (exp, 1), const0_rtx, VOIDmode, ro_modifier); ! expand_expr (TREE_OPERAND (exp, 2), const0_rtx, VOIDmode, ro_modifier); return const0_rtx; } ! ; target = 0; } --- 6090,6119 ---- if (TREE_CODE_CLASS (code) == '1' || code == COMPONENT_REF || code == INDIRECT_REF || code == BUFFER_REF) ! return expand_expr (TREE_OPERAND (exp, 0), const0_rtx, VOIDmode, ! modifier); ! else if (TREE_CODE_CLASS (code) == '2' || TREE_CODE_CLASS (code) == '<' ! || code == ARRAY_REF || code == ARRAY_RANGE_REF) { ! expand_expr (TREE_OPERAND (exp, 0), const0_rtx, VOIDmode, modifier); ! expand_expr (TREE_OPERAND (exp, 1), const0_rtx, VOIDmode, modifier); return const0_rtx; } else if ((code == TRUTH_ANDIF_EXPR || code == TRUTH_ORIF_EXPR) && ! TREE_SIDE_EFFECTS (TREE_OPERAND (exp, 1))) /* If the second operand has no side effects, just evaluate the first. */ ! return expand_expr (TREE_OPERAND (exp, 0), const0_rtx, VOIDmode, ! modifier); else if (code == BIT_FIELD_REF) { ! expand_expr (TREE_OPERAND (exp, 0), const0_rtx, VOIDmode, modifier); ! expand_expr (TREE_OPERAND (exp, 1), const0_rtx, VOIDmode, modifier); ! expand_expr (TREE_OPERAND (exp, 2), const0_rtx, VOIDmode, modifier); return const0_rtx; } ! target = 0; } *************** expand_expr (exp, target, tmode, modifie *** 6040,6045 **** --- 6127,6133 ---- && TREE_CODE (exp) != INTEGER_CST && TREE_CODE (exp) != PARM_DECL && TREE_CODE (exp) != ARRAY_REF + && TREE_CODE (exp) != ARRAY_RANGE_REF && TREE_CODE (exp) != COMPONENT_REF && TREE_CODE (exp) != BIT_FIELD_REF && TREE_CODE (exp) != INDIRECT_REF *************** expand_expr (exp, target, tmode, modifie *** 6058,6063 **** --- 6146,6152 ---- && TREE_CODE (exp) != INTEGER_CST && TREE_CODE (exp) != PARM_DECL && TREE_CODE (exp) != ARRAY_REF + && TREE_CODE (exp) != ARRAY_RANGE_REF && TREE_CODE (exp) != COMPONENT_REF && TREE_CODE (exp) != BIT_FIELD_REF && TREE_CODE (exp) != INDIRECT_REF *************** expand_expr (exp, target, tmode, modifie *** 6074,6083 **** /* If will do cse, generate all results into pseudo registers since 1) that allows cse to find more things and 2) otherwise cse could produce an insn the machine ! cannot support. */ if (! cse_not_expected && mode != BLKmode && target ! && (GET_CODE (target) != REG || REGNO (target) < FIRST_PSEUDO_REGISTER)) target = subtarget; switch (code) --- 6163,6174 ---- /* If will do cse, generate all results into pseudo registers since 1) that allows cse to find more things and 2) otherwise cse could produce an insn the machine ! cannot support. And exception is a CONSTRUCTOR into a multi-word ! MEM: that's much more likely to be most efficient into the MEM. */ if (! cse_not_expected && mode != BLKmode && target ! && (GET_CODE (target) != REG || REGNO (target) < FIRST_PSEUDO_REGISTER) ! && ! (code == CONSTRUCTOR && GET_MODE_SIZE (mode) > UNITS_PER_WORD)) target = subtarget; switch (code) *************** expand_expr (exp, target, tmode, modifie *** 6125,6160 **** if (DECL_SIZE (exp) == 0 && COMPLETE_TYPE_P (TREE_TYPE (exp)) && (TREE_STATIC (exp) || DECL_EXTERNAL (exp))) { ! layout_decl (exp, 0); ! PUT_MODE (DECL_RTL (exp), DECL_MODE (exp)); ! } ! ! /* Although static-storage variables start off initialized, according to ! ANSI C, a memcpy could overwrite them with uninitialized values. So ! we check them too. This also lets us check for read-only variables ! accessed via a non-const declaration, in case it won't be detected ! any other way (e.g., in an embedded system or OS kernel without ! memory protection). ! Aggregates are not checked here; they're handled elsewhere. */ ! if (cfun && current_function_check_memory_usage ! && code == VAR_DECL ! && GET_CODE (DECL_RTL (exp)) == MEM ! && ! AGGREGATE_TYPE_P (TREE_TYPE (exp))) ! { ! enum memory_use_mode memory_usage; ! memory_usage = get_memory_usage_from_modifier (modifier); ! in_check_memory_usage = 1; ! if (memory_usage != MEMORY_USE_DONT) ! emit_library_call (chkr_check_addr_libfunc, ! LCT_CONST_MAKE_BLOCK, VOIDmode, 3, ! XEXP (DECL_RTL (exp), 0), Pmode, ! GEN_INT (int_size_in_bytes (type)), ! TYPE_MODE (sizetype), ! GEN_INT (memory_usage), ! TYPE_MODE (integer_type_node)); ! in_check_memory_usage = 0; } /* ... fall through ... */ --- 6216,6234 ---- if (DECL_SIZE (exp) == 0 && COMPLETE_TYPE_P (TREE_TYPE (exp)) && (TREE_STATIC (exp) || DECL_EXTERNAL (exp))) { ! rtx value = DECL_RTL_IF_SET (exp); ! layout_decl (exp, 0); ! /* If the RTL was already set, update its mode and memory ! attributes. */ ! if (value != 0) ! { ! PUT_MODE (value, DECL_MODE (exp)); ! SET_DECL_RTL (exp, 0); ! set_mem_attributes (value, exp, 1); ! SET_DECL_RTL (exp, value); ! } } /* ... fall through ... */ *************** expand_expr (exp, target, tmode, modifie *** 6201,6212 **** abort (); addr = XEXP (DECL_RTL (exp), 0); if (GET_CODE (addr) == MEM) ! addr = change_address (addr, Pmode, ! fix_lexical_addr (XEXP (addr, 0), exp)); else addr = fix_lexical_addr (addr, exp); ! temp = change_address (DECL_RTL (exp), mode, addr); } /* This is the case of an array whose size is to be determined --- 6275,6287 ---- abort (); addr = XEXP (DECL_RTL (exp), 0); if (GET_CODE (addr) == MEM) ! addr ! = replace_equiv_address (addr, ! fix_lexical_addr (XEXP (addr, 0), exp)); else addr = fix_lexical_addr (addr, exp); ! temp = replace_equiv_address (DECL_RTL (exp), addr); } /* This is the case of an array whose size is to be determined *************** expand_expr (exp, target, tmode, modifie *** 6215,6222 **** else if (GET_CODE (DECL_RTL (exp)) == MEM && GET_CODE (XEXP (DECL_RTL (exp), 0)) == REG) ! temp = change_address (DECL_RTL (exp), GET_MODE (DECL_RTL (exp)), ! XEXP (DECL_RTL (exp), 0)); /* If DECL_RTL is memory, we are in the normal case and either the address is not valid or it is not a register and -fforce-addr --- 6290,6296 ---- else if (GET_CODE (DECL_RTL (exp)) == MEM && GET_CODE (XEXP (DECL_RTL (exp), 0)) == REG) ! temp = validize_mem (DECL_RTL (exp)); /* If DECL_RTL is memory, we are in the normal case and either the address is not valid or it is not a register and -fforce-addr *************** expand_expr (exp, target, tmode, modifie *** 6230,6237 **** XEXP (DECL_RTL (exp), 0)) || (flag_force_addr && GET_CODE (XEXP (DECL_RTL (exp), 0)) != REG))) ! temp = change_address (DECL_RTL (exp), VOIDmode, ! copy_rtx (XEXP (DECL_RTL (exp), 0))); /* If we got something, return it. But first, set the alignment if the address is a register. */ --- 6304,6311 ---- XEXP (DECL_RTL (exp), 0)) || (flag_force_addr && GET_CODE (XEXP (DECL_RTL (exp), 0)) != REG))) ! temp = replace_equiv_address (DECL_RTL (exp), ! copy_rtx (XEXP (DECL_RTL (exp), 0))); /* If we got something, return it. But first, set the alignment if the address is a register. */ *************** expand_expr (exp, target, tmode, modifie *** 6248,6262 **** but mark it so that we know that it was already extended. */ if (GET_CODE (DECL_RTL (exp)) == REG ! && GET_MODE (DECL_RTL (exp)) != mode) { /* Get the signedness used for this variable. Ensure we get the same mode we got when the variable was declared. */ if (GET_MODE (DECL_RTL (exp)) ! != promote_mode (type, DECL_MODE (exp), &unsignedp, 0)) abort (); ! temp = gen_rtx_SUBREG (mode, DECL_RTL (exp), 0); SUBREG_PROMOTED_VAR_P (temp) = 1; SUBREG_PROMOTED_UNSIGNED_P (temp) = unsignedp; return temp; --- 6322,6337 ---- but mark it so that we know that it was already extended. */ if (GET_CODE (DECL_RTL (exp)) == REG ! && GET_MODE (DECL_RTL (exp)) != DECL_MODE (exp)) { /* Get the signedness used for this variable. Ensure we get the same mode we got when the variable was declared. */ if (GET_MODE (DECL_RTL (exp)) ! != promote_mode (type, DECL_MODE (exp), &unsignedp, ! (TREE_CODE (exp) == RESULT_DECL ? 1 : 0))) abort (); ! temp = gen_lowpart_SUBREG (mode, DECL_RTL (exp)); SUBREG_PROMOTED_VAR_P (temp) = 1; SUBREG_PROMOTED_UNSIGNED_P (temp) = unsignedp; return temp; *************** expand_expr (exp, target, tmode, modifie *** 6265,6276 **** return DECL_RTL (exp); case INTEGER_CST: ! return immed_double_const (TREE_INT_CST_LOW (exp), TREE_INT_CST_HIGH (exp), mode); case CONST_DECL: ! return expand_expr (DECL_INITIAL (exp), target, VOIDmode, ! EXPAND_MEMORY_USE_BAD); case REAL_CST: /* If optimized, generate immediate CONST_DOUBLE --- 6340,6361 ---- return DECL_RTL (exp); case INTEGER_CST: ! temp = immed_double_const (TREE_INT_CST_LOW (exp), TREE_INT_CST_HIGH (exp), mode); + /* ??? If overflow is set, fold will have done an incomplete job, + which can result in (plus xx (const_int 0)), which can get + simplified by validate_replace_rtx during virtual register + instantiation, which can result in unrecognizable insns. + Avoid this by forcing all overflows into registers. */ + if (TREE_CONSTANT_OVERFLOW (exp) + && modifier != EXPAND_INITIALIZER) + temp = force_reg (mode, temp); + + return temp; + case CONST_DECL: ! return expand_expr (DECL_INITIAL (exp), target, VOIDmode, 0); case REAL_CST: /* If optimized, generate immediate CONST_DOUBLE *************** expand_expr (exp, target, tmode, modifie *** 6300,6307 **** && (! memory_address_p (mode, XEXP (TREE_CST_RTL (exp), 0)) || (flag_force_addr && GET_CODE (XEXP (TREE_CST_RTL (exp), 0)) != REG))) ! return change_address (TREE_CST_RTL (exp), VOIDmode, ! copy_rtx (XEXP (TREE_CST_RTL (exp), 0))); return TREE_CST_RTL (exp); case EXPR_WITH_FILE_LOCATION: --- 6385,6392 ---- && (! memory_address_p (mode, XEXP (TREE_CST_RTL (exp), 0)) || (flag_force_addr && GET_CODE (XEXP (TREE_CST_RTL (exp), 0)) != REG))) ! return replace_equiv_address (TREE_CST_RTL (exp), ! copy_rtx (XEXP (TREE_CST_RTL (exp), 0))); return TREE_CST_RTL (exp); case EXPR_WITH_FILE_LOCATION: *************** expand_expr (exp, target, tmode, modifie *** 6313,6319 **** lineno = EXPR_WFL_LINENO (exp); if (EXPR_WFL_EMIT_LINE_NOTE (exp)) emit_line_note (input_filename, lineno); ! /* Possibly avoid switching back and force here. */ to_return = expand_expr (EXPR_WFL_NODE (exp), target, tmode, modifier); input_filename = saved_input_filename; lineno = saved_lineno; --- 6398,6404 ---- lineno = EXPR_WFL_LINENO (exp); if (EXPR_WFL_EMIT_LINE_NOTE (exp)) emit_line_note (input_filename, lineno); ! /* Possibly avoid switching back and forth here. */ to_return = expand_expr (EXPR_WFL_NODE (exp), target, tmode, modifier); input_filename = saved_input_filename; lineno = saved_lineno; *************** expand_expr (exp, target, tmode, modifie *** 6350,6357 **** } if (temp == 0 || GET_CODE (temp) != MEM) abort (); ! return change_address (temp, mode, ! fix_lexical_addr (XEXP (temp, 0), exp)); } if (SAVE_EXPR_RTL (exp) == 0) { --- 6435,6443 ---- } if (temp == 0 || GET_CODE (temp) != MEM) abort (); ! return ! replace_equiv_address (temp, ! fix_lexical_addr (XEXP (temp, 0), exp)); } if (SAVE_EXPR_RTL (exp) == 0) { *************** expand_expr (exp, target, tmode, modifie *** 6376,6389 **** if (GET_CODE (temp) == REG && GET_MODE (temp) != mode) { ! temp = gen_rtx_SUBREG (mode, SAVE_EXPR_RTL (exp), 0); SUBREG_PROMOTED_VAR_P (temp) = 1; SUBREG_PROMOTED_UNSIGNED_P (temp) = unsignedp; } if (temp == const0_rtx) ! expand_expr (TREE_OPERAND (exp, 0), const0_rtx, VOIDmode, ! EXPAND_MEMORY_USE_BAD); else store_expr (TREE_OPERAND (exp, 0), temp, 0); --- 6462,6474 ---- if (GET_CODE (temp) == REG && GET_MODE (temp) != mode) { ! temp = gen_lowpart_SUBREG (mode, SAVE_EXPR_RTL (exp)); SUBREG_PROMOTED_VAR_P (temp) = 1; SUBREG_PROMOTED_UNSIGNED_P (temp) = unsignedp; } if (temp == const0_rtx) ! expand_expr (TREE_OPERAND (exp, 0), const0_rtx, VOIDmode, 0); else store_expr (TREE_OPERAND (exp, 0), temp, 0); *************** expand_expr (exp, target, tmode, modifie *** 6399,6405 **** { /* Compute the signedness and make the proper SUBREG. */ promote_mode (type, mode, &unsignedp, 0); ! temp = gen_rtx_SUBREG (mode, SAVE_EXPR_RTL (exp), 0); SUBREG_PROMOTED_VAR_P (temp) = 1; SUBREG_PROMOTED_UNSIGNED_P (temp) = unsignedp; return temp; --- 6484,6490 ---- { /* Compute the signedness and make the proper SUBREG. */ promote_mode (type, mode, &unsignedp, 0); ! temp = gen_lowpart_SUBREG (mode, SAVE_EXPR_RTL (exp)); SUBREG_PROMOTED_VAR_P (temp) = 1; SUBREG_PROMOTED_UNSIGNED_P (temp) = unsignedp; return temp; *************** expand_expr (exp, target, tmode, modifie *** 6417,6482 **** case PLACEHOLDER_EXPR: { ! tree placeholder_expr; ! ! /* If there is an object on the head of the placeholder list, ! see if some object in it of type TYPE or a pointer to it. For ! further information, see tree.def. */ ! for (placeholder_expr = placeholder_list; ! placeholder_expr != 0; ! placeholder_expr = TREE_CHAIN (placeholder_expr)) ! { ! tree need_type = TYPE_MAIN_VARIANT (type); ! tree object = 0; ! tree old_list = placeholder_list; ! tree elt; ! ! /* Find the outermost reference that is of the type we want. ! If none, see if any object has a type that is a pointer to ! the type we want. */ ! for (elt = TREE_PURPOSE (placeholder_expr); ! elt != 0 && object == 0; ! elt ! = ((TREE_CODE (elt) == COMPOUND_EXPR ! || TREE_CODE (elt) == COND_EXPR) ! ? TREE_OPERAND (elt, 1) ! : (TREE_CODE_CLASS (TREE_CODE (elt)) == 'r' ! || TREE_CODE_CLASS (TREE_CODE (elt)) == '1' ! || TREE_CODE_CLASS (TREE_CODE (elt)) == '2' ! || TREE_CODE_CLASS (TREE_CODE (elt)) == 'e') ! ? TREE_OPERAND (elt, 0) : 0)) ! if (TYPE_MAIN_VARIANT (TREE_TYPE (elt)) == need_type) ! object = elt; ! for (elt = TREE_PURPOSE (placeholder_expr); ! elt != 0 && object == 0; ! elt ! = ((TREE_CODE (elt) == COMPOUND_EXPR ! || TREE_CODE (elt) == COND_EXPR) ! ? TREE_OPERAND (elt, 1) ! : (TREE_CODE_CLASS (TREE_CODE (elt)) == 'r' ! || TREE_CODE_CLASS (TREE_CODE (elt)) == '1' ! || TREE_CODE_CLASS (TREE_CODE (elt)) == '2' ! || TREE_CODE_CLASS (TREE_CODE (elt)) == 'e') ! ? TREE_OPERAND (elt, 0) : 0)) ! if (POINTER_TYPE_P (TREE_TYPE (elt)) ! && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (elt))) ! == need_type)) ! object = build1 (INDIRECT_REF, need_type, elt); ! if (object != 0) ! { ! /* Expand this object skipping the list entries before ! it was found in case it is also a PLACEHOLDER_EXPR. ! In that case, we want to translate it using subsequent ! entries. */ ! placeholder_list = TREE_CHAIN (placeholder_expr); ! temp = expand_expr (object, original_target, tmode, ! ro_modifier); ! placeholder_list = old_list; ! return temp; ! } ! } } /* We can't find the object or there was a missing WITH_RECORD_EXPR. */ --- 6502,6518 ---- case PLACEHOLDER_EXPR: { ! tree old_list = placeholder_list; ! tree placeholder_expr = 0; ! exp = find_placeholder (exp, &placeholder_expr); ! if (exp == 0) ! abort (); ! placeholder_list = TREE_CHAIN (placeholder_expr); ! temp = expand_expr (exp, original_target, tmode, modifier); ! placeholder_list = old_list; ! return temp; } /* We can't find the object or there was a missing WITH_RECORD_EXPR. */ *************** expand_expr (exp, target, tmode, modifie *** 6487,6494 **** and pop the list. */ placeholder_list = tree_cons (TREE_OPERAND (exp, 1), NULL_TREE, placeholder_list); ! target = expand_expr (TREE_OPERAND (exp, 0), original_target, ! tmode, ro_modifier); placeholder_list = TREE_CHAIN (placeholder_list); return target; --- 6523,6530 ---- and pop the list. */ placeholder_list = tree_cons (TREE_OPERAND (exp, 1), NULL_TREE, placeholder_list); ! target = expand_expr (TREE_OPERAND (exp, 0), original_target, tmode, ! modifier); placeholder_list = TREE_CHAIN (placeholder_list); return target; *************** expand_expr (exp, target, tmode, modifie *** 6500,6513 **** return const0_rtx; case EXIT_EXPR: ! expand_exit_loop_if_false (NULL_PTR, invert_truthvalue (TREE_OPERAND (exp, 0))); return const0_rtx; case LABELED_BLOCK_EXPR: if (LABELED_BLOCK_BODY (exp)) ! expand_expr_stmt (LABELED_BLOCK_BODY (exp)); ! /* Should perhaps use expand_label, but this is simpler and safer. */ do_pending_stack_adjust (); emit_label (label_rtx (LABELED_BLOCK_LABEL (exp))); return const0_rtx; --- 6536,6549 ---- return const0_rtx; case EXIT_EXPR: ! expand_exit_loop_if_false (NULL, invert_truthvalue (TREE_OPERAND (exp, 0))); return const0_rtx; case LABELED_BLOCK_EXPR: if (LABELED_BLOCK_BODY (exp)) ! expand_expr_stmt_value (LABELED_BLOCK_BODY (exp), 0, 1); ! /* Should perhaps use expand_label, but this is simpler and safer. */ do_pending_stack_adjust (); emit_label (label_rtx (LABELED_BLOCK_LABEL (exp))); return const0_rtx; *************** expand_expr (exp, target, tmode, modifie *** 6521,6527 **** case LOOP_EXPR: push_temp_slots (); expand_start_loop (1); ! expand_expr_stmt (TREE_OPERAND (exp, 0)); expand_end_loop (); pop_temp_slots (); --- 6557,6563 ---- case LOOP_EXPR: push_temp_slots (); expand_start_loop (1); ! expand_expr_stmt_value (TREE_OPERAND (exp, 0), 0, 1); expand_end_loop (); pop_temp_slots (); *************** expand_expr (exp, target, tmode, modifie *** 6553,6559 **** vars = TREE_CHAIN (vars); } ! temp = expand_expr (TREE_OPERAND (exp, 1), target, tmode, ro_modifier); expand_end_bindings (TREE_OPERAND (exp, 0), 0, 0); --- 6589,6595 ---- vars = TREE_CHAIN (vars); } ! temp = expand_expr (TREE_OPERAND (exp, 1), target, tmode, modifier); expand_end_bindings (TREE_OPERAND (exp, 0), 0, 0); *************** expand_expr (exp, target, tmode, modifie *** 6578,6586 **** if (ignore) { tree elt; for (elt = CONSTRUCTOR_ELTS (exp); elt; elt = TREE_CHAIN (elt)) ! expand_expr (TREE_VALUE (elt), const0_rtx, VOIDmode, ! EXPAND_MEMORY_USE_BAD); return const0_rtx; } --- 6614,6623 ---- if (ignore) { tree elt; + for (elt = CONSTRUCTOR_ELTS (exp); elt; elt = TREE_CHAIN (elt)) ! expand_expr (TREE_VALUE (elt), const0_rtx, VOIDmode, 0); ! return const0_rtx; } *************** expand_expr (exp, target, tmode, modifie *** 6606,6618 **** if (modifier != EXPAND_CONST_ADDRESS && modifier != EXPAND_INITIALIZER ! && modifier != EXPAND_SUM ! && (! memory_address_p (GET_MODE (constructor), ! XEXP (constructor, 0)) ! || (flag_force_addr ! && GET_CODE (XEXP (constructor, 0)) != REG))) ! constructor = change_address (constructor, VOIDmode, ! XEXP (constructor, 0)); return constructor; } else --- 6643,6651 ---- if (modifier != EXPAND_CONST_ADDRESS && modifier != EXPAND_INITIALIZER ! && modifier != EXPAND_SUM) ! constructor = validize_mem (constructor); ! return constructor; } else *************** expand_expr (exp, target, tmode, modifie *** 6626,6634 **** (TYPE_QUALS (type) | (TREE_READONLY (exp) * TYPE_QUAL_CONST))), ! TREE_ADDRESSABLE (exp), 1, 1); ! store_constructor (exp, target, TYPE_ALIGN (TREE_TYPE (exp)), 0, int_size_in_bytes (TREE_TYPE (exp))); return target; } --- 6659,6667 ---- (TYPE_QUALS (type) | (TREE_READONLY (exp) * TYPE_QUAL_CONST))), ! 0, TREE_ADDRESSABLE (exp), 1); ! store_constructor (exp, target, 0, int_size_in_bytes (TREE_TYPE (exp))); return target; } *************** expand_expr (exp, target, tmode, modifie *** 6646,6691 **** && compare_tree_int (index, TREE_STRING_LENGTH (string)) < 0 && GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1 ! && modifier != EXPAND_MEMORY_USE_WO) return ! GEN_INT (TREE_STRING_POINTER (string)[TREE_INT_CST_LOW (index)]); op0 = expand_expr (exp1, NULL_RTX, VOIDmode, EXPAND_SUM); op0 = memory_address (mode, op0); - - if (cfun && current_function_check_memory_usage - && ! AGGREGATE_TYPE_P (TREE_TYPE (exp))) - { - enum memory_use_mode memory_usage; - memory_usage = get_memory_usage_from_modifier (modifier); - - if (memory_usage != MEMORY_USE_DONT) - { - in_check_memory_usage = 1; - emit_library_call (chkr_check_addr_libfunc, - LCT_CONST_MAKE_BLOCK, VOIDmode, 3, op0, - Pmode, GEN_INT (int_size_in_bytes (type)), - TYPE_MODE (sizetype), - GEN_INT (memory_usage), - TYPE_MODE (integer_type_node)); - in_check_memory_usage = 0; - } - } - temp = gen_rtx_MEM (mode, op0); set_mem_attributes (temp, exp, 0); - /* It is incorrect to set RTX_UNCHANGING_P from TREE_READONLY - here, because, in C and C++, the fact that a location is accessed - through a pointer to const does not mean that the value there can - never change. Languages where it can never change should - also set TREE_STATIC. */ - RTX_UNCHANGING_P (temp) = TREE_READONLY (exp) & TREE_STATIC (exp); - /* If we are writing to this object and its type is a record with readonly fields, we must mark it as readonly so it will conflict with readonly references to those fields. */ ! if (modifier == EXPAND_MEMORY_USE_WO && readonly_fields_p (type)) RTX_UNCHANGING_P (temp) = 1; return temp; --- 6679,6698 ---- && compare_tree_int (index, TREE_STRING_LENGTH (string)) < 0 && GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1 ! && modifier != EXPAND_WRITE) return ! GEN_INT (trunc_int_for_mode (TREE_STRING_POINTER (string) ! [TREE_INT_CST_LOW (index)], mode)); op0 = expand_expr (exp1, NULL_RTX, VOIDmode, EXPAND_SUM); op0 = memory_address (mode, op0); temp = gen_rtx_MEM (mode, op0); set_mem_attributes (temp, exp, 0); /* If we are writing to this object and its type is a record with readonly fields, we must mark it as readonly so it will conflict with readonly references to those fields. */ ! if (modifier == EXPAND_WRITE && readonly_fields_p (type)) RTX_UNCHANGING_P (temp) = 1; return temp; *************** expand_expr (exp, target, tmode, modifie *** 6718,6737 **** Don't fold if this is for wide characters since it's too difficult to do correctly and this is a very rare case. */ ! if (TREE_CODE (array) == STRING_CST && TREE_CODE (index) == INTEGER_CST && compare_tree_int (index, TREE_STRING_LENGTH (array)) < 0 && GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1) return ! GEN_INT (TREE_STRING_POINTER (array)[TREE_INT_CST_LOW (index)]); /* If this is a constant index into a constant array, just get the value from the array. Handle both the cases when we have an explicit constructor and when our operand is a variable that was declared const. */ ! if (TREE_CODE (array) == CONSTRUCTOR && ! TREE_SIDE_EFFECTS (array) && TREE_CODE (index) == INTEGER_CST && 0 > compare_tree_int (index, list_length (CONSTRUCTOR_ELTS --- 6725,6747 ---- Don't fold if this is for wide characters since it's too difficult to do correctly and this is a very rare case. */ ! if (modifier != EXPAND_CONST_ADDRESS && modifier != EXPAND_INITIALIZER ! && TREE_CODE (array) == STRING_CST && TREE_CODE (index) == INTEGER_CST && compare_tree_int (index, TREE_STRING_LENGTH (array)) < 0 && GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1) return ! GEN_INT (trunc_int_for_mode (TREE_STRING_POINTER (array) ! [TREE_INT_CST_LOW (index)], mode)); /* If this is a constant index into a constant array, just get the value from the array. Handle both the cases when we have an explicit constructor and when our operand is a variable that was declared const. */ ! if (modifier != EXPAND_CONST_ADDRESS && modifier != EXPAND_INITIALIZER ! && TREE_CODE (array) == CONSTRUCTOR && ! TREE_SIDE_EFFECTS (array) && TREE_CODE (index) == INTEGER_CST && 0 > compare_tree_int (index, list_length (CONSTRUCTOR_ELTS *************** expand_expr (exp, target, tmode, modifie *** 6745,6755 **** ; if (elem) ! return expand_expr (fold (TREE_VALUE (elem)), target, ! tmode, ro_modifier); } else if (optimize >= 1 && TREE_READONLY (array) && ! TREE_SIDE_EFFECTS (array) && TREE_CODE (array) == VAR_DECL && DECL_INITIAL (array) && TREE_CODE (DECL_INITIAL (array)) != ERROR_MARK) --- 6755,6767 ---- ; if (elem) ! return expand_expr (fold (TREE_VALUE (elem)), target, tmode, ! modifier); } else if (optimize >= 1 + && modifier != EXPAND_CONST_ADDRESS + && modifier != EXPAND_INITIALIZER && TREE_READONLY (array) && ! TREE_SIDE_EFFECTS (array) && TREE_CODE (array) == VAR_DECL && DECL_INITIAL (array) && TREE_CODE (DECL_INITIAL (array)) != ERROR_MARK) *************** expand_expr (exp, target, tmode, modifie *** 6770,6776 **** if (elem && !TREE_SIDE_EFFECTS (TREE_VALUE (elem))) return expand_expr (fold (TREE_VALUE (elem)), target, ! tmode, ro_modifier); } else if (TREE_CODE (init) == STRING_CST && 0 > compare_tree_int (index, --- 6782,6788 ---- if (elem && !TREE_SIDE_EFFECTS (TREE_VALUE (elem))) return expand_expr (fold (TREE_VALUE (elem)), target, ! tmode, modifier); } else if (TREE_CODE (init) == STRING_CST && 0 > compare_tree_int (index, *************** expand_expr (exp, target, tmode, modifie *** 6781,6789 **** if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1) ! return (GEN_INT ! (TREE_STRING_POINTER ! (init)[TREE_INT_CST_LOW (index)])); } } } --- 6793,6801 ---- if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1) ! return GEN_INT (trunc_int_for_mode ! (TREE_STRING_POINTER (init) ! [TREE_INT_CST_LOW (index)], mode)); } } } *************** expand_expr (exp, target, tmode, modifie *** 6792,6802 **** case COMPONENT_REF: case BIT_FIELD_REF: /* If the operand is a CONSTRUCTOR, we can just extract the appropriate field if it is present. Don't do this if we have already written the data since we want to refer to that copy and varasm.c assumes that's what we'll do. */ ! if (code != ARRAY_REF && TREE_CODE (TREE_OPERAND (exp, 0)) == CONSTRUCTOR && TREE_CST_RTL (TREE_OPERAND (exp, 0)) == 0) { --- 6804,6815 ---- case COMPONENT_REF: case BIT_FIELD_REF: + case ARRAY_RANGE_REF: /* If the operand is a CONSTRUCTOR, we can just extract the appropriate field if it is present. Don't do this if we have already written the data since we want to refer to that copy and varasm.c assumes that's what we'll do. */ ! if (code == COMPONENT_REF && TREE_CODE (TREE_OPERAND (exp, 0)) == CONSTRUCTOR && TREE_CST_RTL (TREE_OPERAND (exp, 0)) == 0) { *************** expand_expr (exp, target, tmode, modifie *** 6823,6838 **** { HOST_WIDE_INT bitsize = TREE_INT_CST_LOW (DECL_SIZE (TREE_PURPOSE (elt))); if (TREE_UNSIGNED (TREE_TYPE (TREE_PURPOSE (elt)))) { op1 = GEN_INT (((HOST_WIDE_INT) 1 << bitsize) - 1); ! op0 = expand_and (op0, op1, target); } else { - enum machine_mode imode - = TYPE_MODE (TREE_TYPE (TREE_PURPOSE (elt))); tree count = build_int_2 (GET_MODE_BITSIZE (imode) - bitsize, 0); --- 6836,6851 ---- { HOST_WIDE_INT bitsize = TREE_INT_CST_LOW (DECL_SIZE (TREE_PURPOSE (elt))); + enum machine_mode imode + = TYPE_MODE (TREE_TYPE (TREE_PURPOSE (elt))); if (TREE_UNSIGNED (TREE_TYPE (TREE_PURPOSE (elt)))) { op1 = GEN_INT (((HOST_WIDE_INT) 1 << bitsize) - 1); ! op0 = expand_and (imode, op0, op1, target); } else { tree count = build_int_2 (GET_MODE_BITSIZE (imode) - bitsize, 0); *************** expand_expr (exp, target, tmode, modifie *** 6853,6862 **** HOST_WIDE_INT bitsize, bitpos; tree offset; int volatilep = 0; - unsigned int alignment; tree tem = get_inner_reference (exp, &bitsize, &bitpos, &offset, ! &mode1, &unsignedp, &volatilep, ! &alignment); /* If we got back the original object, something is wrong. Perhaps we are evaluating an expression too early. In any event, don't --- 6866,6874 ---- HOST_WIDE_INT bitsize, bitpos; tree offset; int volatilep = 0; tree tem = get_inner_reference (exp, &bitsize, &bitpos, &offset, ! &mode1, &unsignedp, &volatilep); ! rtx orig_op0; /* If we got back the original object, something is wrong. Perhaps we are evaluating an expression too early. In any event, don't *************** expand_expr (exp, target, tmode, modifie *** 6868,6882 **** computation, since it will need a temporary and TARGET is known to have to do. This occurs in unchecked conversion in Ada. */ ! op0 = expand_expr (tem, ! (TREE_CODE (TREE_TYPE (tem)) == UNION_TYPE ! && (TREE_CODE (TYPE_SIZE (TREE_TYPE (tem))) ! != INTEGER_CST) ! ? target : NULL_RTX), ! VOIDmode, ! (modifier == EXPAND_INITIALIZER ! || modifier == EXPAND_CONST_ADDRESS) ! ? modifier : EXPAND_NORMAL); /* If this is a constant, put it into a register if it is a legitimate constant and OFFSET is 0 and memory if it isn't. */ --- 6880,6895 ---- computation, since it will need a temporary and TARGET is known to have to do. This occurs in unchecked conversion in Ada. */ ! orig_op0 = op0 ! = expand_expr (tem, ! (TREE_CODE (TREE_TYPE (tem)) == UNION_TYPE ! && (TREE_CODE (TYPE_SIZE (TREE_TYPE (tem))) ! != INTEGER_CST) ! ? target : NULL_RTX), ! VOIDmode, ! (modifier == EXPAND_INITIALIZER ! || modifier == EXPAND_CONST_ADDRESS) ! ? modifier : EXPAND_NORMAL); /* If this is a constant, put it into a register if it is a legitimate constant and OFFSET is 0 and memory if it isn't. */ *************** expand_expr (exp, target, tmode, modifie *** 6892,6927 **** if (offset != 0) { ! rtx offset_rtx = expand_expr (offset, NULL_RTX, VOIDmode, 0); ! /* If this object is in memory, put it into a register. This case can't occur in C, but can in Ada if we have unchecked conversion of an expression from a scalar type to an array or record type. */ if (GET_CODE (op0) == REG || GET_CODE (op0) == SUBREG || GET_CODE (op0) == CONCAT || GET_CODE (op0) == ADDRESSOF) { ! tree nt = build_qualified_type (TREE_TYPE (tem), ! (TYPE_QUALS (TREE_TYPE (tem)) ! | TYPE_QUAL_CONST)); ! rtx memloc = assign_temp (nt, 1, 1, 1); ! mark_temp_addr_taken (memloc); ! emit_move_insn (memloc, op0); ! op0 = memloc; } if (GET_CODE (op0) != MEM) abort (); - if (GET_MODE (offset_rtx) != ptr_mode) - { #ifdef POINTERS_EXTEND_UNSIGNED ! offset_rtx = convert_memory_address (ptr_mode, offset_rtx); #else ! offset_rtx = convert_to_mode (ptr_mode, offset_rtx, 0); #endif - } /* A constant address in OP0 can have VOIDmode, we must not try to call force_reg for that case. Avoid that case. */ --- 6905,6949 ---- if (offset != 0) { ! rtx offset_rtx = expand_expr (offset, NULL_RTX, VOIDmode, EXPAND_SUM); ! /* If this object is in a register, put it into memory. This case can't occur in C, but can in Ada if we have unchecked conversion of an expression from a scalar type to an array or record type. */ if (GET_CODE (op0) == REG || GET_CODE (op0) == SUBREG || GET_CODE (op0) == CONCAT || GET_CODE (op0) == ADDRESSOF) { ! /* If the operand is a SAVE_EXPR, we can deal with this by ! forcing the SAVE_EXPR into memory. */ ! if (TREE_CODE (TREE_OPERAND (exp, 0)) == SAVE_EXPR) ! { ! put_var_into_stack (TREE_OPERAND (exp, 0)); ! op0 = SAVE_EXPR_RTL (TREE_OPERAND (exp, 0)); ! } ! else ! { ! tree nt ! = build_qualified_type (TREE_TYPE (tem), ! (TYPE_QUALS (TREE_TYPE (tem)) ! | TYPE_QUAL_CONST)); ! rtx memloc = assign_temp (nt, 1, 1, 1); ! emit_move_insn (memloc, op0); ! op0 = memloc; ! } } if (GET_CODE (op0) != MEM) abort (); #ifdef POINTERS_EXTEND_UNSIGNED ! if (GET_MODE (offset_rtx) != Pmode) ! offset_rtx = convert_memory_address (Pmode, offset_rtx); #else ! if (GET_MODE (offset_rtx) != ptr_mode) ! offset_rtx = convert_to_mode (ptr_mode, offset_rtx, 0); #endif /* A constant address in OP0 can have VOIDmode, we must not try to call force_reg for that case. Avoid that case. */ *************** expand_expr (exp, target, tmode, modifie *** 6931,6990 **** && bitsize != 0 && (bitpos % bitsize) == 0 && (bitsize % GET_MODE_ALIGNMENT (mode1)) == 0 ! && alignment == GET_MODE_ALIGNMENT (mode1)) { ! rtx temp = change_address (op0, mode1, ! plus_constant (XEXP (op0, 0), ! (bitpos / ! BITS_PER_UNIT))); ! if (GET_CODE (XEXP (temp, 0)) == REG) ! op0 = temp; ! else ! op0 = change_address (op0, mode1, ! force_reg (GET_MODE (XEXP (temp, 0)), ! XEXP (temp, 0))); bitpos = 0; } ! op0 = change_address (op0, VOIDmode, ! gen_rtx_PLUS (ptr_mode, XEXP (op0, 0), ! force_reg (ptr_mode, ! offset_rtx))); } /* Don't forget about volatility even if this is a bitfield. */ if (GET_CODE (op0) == MEM && volatilep && ! MEM_VOLATILE_P (op0)) { ! op0 = copy_rtx (op0); MEM_VOLATILE_P (op0) = 1; } ! /* Check the access. */ ! if (cfun != 0 && current_function_check_memory_usage ! && GET_CODE (op0) == MEM) { ! enum memory_use_mode memory_usage; ! memory_usage = get_memory_usage_from_modifier (modifier); ! ! if (memory_usage != MEMORY_USE_DONT) ! { ! rtx to; ! int size; ! ! to = plus_constant (XEXP (op0, 0), (bitpos / BITS_PER_UNIT)); ! size = (bitpos % BITS_PER_UNIT) + bitsize + BITS_PER_UNIT - 1; ! ! /* Check the access right of the pointer. */ ! in_check_memory_usage = 1; ! if (size > BITS_PER_UNIT) ! emit_library_call (chkr_check_addr_libfunc, ! LCT_CONST_MAKE_BLOCK, VOIDmode, 3, to, ! Pmode, GEN_INT (size / BITS_PER_UNIT), ! TYPE_MODE (sizetype), ! GEN_INT (memory_usage), ! TYPE_MODE (integer_type_node)); ! in_check_memory_usage = 0; ! } } /* In cases where an aligned union has an unaligned object --- 6953,6991 ---- && bitsize != 0 && (bitpos % bitsize) == 0 && (bitsize % GET_MODE_ALIGNMENT (mode1)) == 0 ! && MEM_ALIGN (op0) == GET_MODE_ALIGNMENT (mode1)) { ! op0 = adjust_address (op0, mode1, bitpos / BITS_PER_UNIT); bitpos = 0; } ! op0 = offset_address (op0, offset_rtx, ! highest_pow2_factor (offset)); } + /* If OFFSET is making OP0 more aligned than BIGGEST_ALIGNMENT, + record its alignment as BIGGEST_ALIGNMENT. */ + if (GET_CODE (op0) == MEM && bitpos == 0 && offset != 0 + && is_aligning_offset (offset, tem)) + set_mem_align (op0, BIGGEST_ALIGNMENT); + /* Don't forget about volatility even if this is a bitfield. */ if (GET_CODE (op0) == MEM && volatilep && ! MEM_VOLATILE_P (op0)) { ! if (op0 == orig_op0) ! op0 = copy_rtx (op0); ! MEM_VOLATILE_P (op0) = 1; } ! /* The following code doesn't handle CONCAT. ! Assume only bitpos == 0 can be used for CONCAT, due to ! one element arrays having the same mode as its element. */ ! if (GET_CODE (op0) == CONCAT) { ! if (bitpos != 0 || bitsize != GET_MODE_BITSIZE (GET_MODE (op0))) ! abort (); ! return op0; } /* In cases where an aligned union has an unaligned object *************** expand_expr (exp, target, tmode, modifie *** 6992,7028 **** an integer-mode (e.g., SImode) object. Handle this case by doing the extract into an object as wide as the field (which we know to be the width of a basic mode), then ! storing into memory, and changing the mode to BLKmode. ! If we ultimately want the address (EXPAND_CONST_ADDRESS or ! EXPAND_INITIALIZER), then we must not copy to a temporary. */ if (mode1 == VOIDmode || GET_CODE (op0) == REG || GET_CODE (op0) == SUBREG ! || (modifier != EXPAND_CONST_ADDRESS ! && modifier != EXPAND_INITIALIZER ! && ((mode1 != BLKmode && ! direct_load[(int) mode1] ! && GET_MODE_CLASS (mode) != MODE_COMPLEX_INT ! && GET_MODE_CLASS (mode) != MODE_COMPLEX_FLOAT) ! /* If the field isn't aligned enough to fetch as a memref, ! fetch it as a bit field. */ ! || (mode1 != BLKmode ! && SLOW_UNALIGNED_ACCESS (mode1, alignment) ! && ((TYPE_ALIGN (TREE_TYPE (tem)) ! < GET_MODE_ALIGNMENT (mode)) ! || (bitpos % GET_MODE_ALIGNMENT (mode) != 0))) ! /* If the type and the field are a constant size and the ! size of the type isn't the same size as the bitfield, ! we must use bitfield operations. */ ! || ((bitsize >= 0 ! && (TREE_CODE (TYPE_SIZE (TREE_TYPE (exp))) ! == INTEGER_CST) ! && 0 != compare_tree_int (TYPE_SIZE (TREE_TYPE (exp)), ! bitsize))))) ! || (modifier != EXPAND_CONST_ADDRESS ! && modifier != EXPAND_INITIALIZER ! && mode == BLKmode ! && SLOW_UNALIGNED_ACCESS (mode, alignment) ! && (TYPE_ALIGN (type) > alignment ! || bitpos % TYPE_ALIGN (type) != 0))) { enum machine_mode ext_mode = mode; --- 6993,7021 ---- an integer-mode (e.g., SImode) object. Handle this case by doing the extract into an object as wide as the field (which we know to be the width of a basic mode), then ! storing into memory, and changing the mode to BLKmode. */ if (mode1 == VOIDmode || GET_CODE (op0) == REG || GET_CODE (op0) == SUBREG ! || (mode1 != BLKmode && ! direct_load[(int) mode1] ! && GET_MODE_CLASS (mode) != MODE_COMPLEX_INT ! && GET_MODE_CLASS (mode) != MODE_COMPLEX_FLOAT ! && modifier != EXPAND_CONST_ADDRESS ! && modifier != EXPAND_INITIALIZER) ! /* If the field isn't aligned enough to fetch as a memref, ! fetch it as a bit field. */ ! || (mode1 != BLKmode ! && SLOW_UNALIGNED_ACCESS (mode1, MEM_ALIGN (op0)) ! && ((TYPE_ALIGN (TREE_TYPE (tem)) ! < GET_MODE_ALIGNMENT (mode)) ! || (bitpos % GET_MODE_ALIGNMENT (mode) != 0))) ! /* If the type and the field are a constant size and the ! size of the type isn't the same size as the bitfield, ! we must use bitfield operations. */ ! || (bitsize >= 0 ! && (TREE_CODE (TYPE_SIZE (TREE_TYPE (exp))) ! == INTEGER_CST) ! && 0 != compare_tree_int (TYPE_SIZE (TREE_TYPE (exp)), ! bitsize))) { enum machine_mode ext_mode = mode; *************** expand_expr (exp, target, tmode, modifie *** 7041,7057 **** || bitpos % BITS_PER_UNIT != 0) abort (); ! op0 = change_address (op0, VOIDmode, ! plus_constant (XEXP (op0, 0), ! bitpos / BITS_PER_UNIT)); if (target == 0) target = assign_temp (type, 0, 1, 1); emit_block_move (target, op0, ! bitsize == -1 ? expr_size (exp) ! : GEN_INT ((bitsize + BITS_PER_UNIT - 1) ! / BITS_PER_UNIT), ! BITS_PER_UNIT); return target; } --- 7034,7046 ---- || bitpos % BITS_PER_UNIT != 0) abort (); ! op0 = adjust_address (op0, VOIDmode, bitpos / BITS_PER_UNIT); if (target == 0) target = assign_temp (type, 0, 1, 1); emit_block_move (target, op0, ! GEN_INT ((bitsize + BITS_PER_UNIT - 1) ! / BITS_PER_UNIT)); return target; } *************** expand_expr (exp, target, tmode, modifie *** 7059,7069 **** op0 = validize_mem (op0); if (GET_CODE (op0) == MEM && GET_CODE (XEXP (op0, 0)) == REG) ! mark_reg_pointer (XEXP (op0, 0), alignment); op0 = extract_bit_field (op0, bitsize, bitpos, unsignedp, target, ext_mode, ext_mode, - alignment, int_size_in_bytes (TREE_TYPE (tem))); /* If the result is a record type and BITSIZE is narrower than --- 7048,7057 ---- op0 = validize_mem (op0); if (GET_CODE (op0) == MEM && GET_CODE (XEXP (op0, 0)) == REG) ! mark_reg_pointer (XEXP (op0, 0), MEM_ALIGN (op0)); op0 = extract_bit_field (op0, bitsize, bitpos, unsignedp, target, ext_mode, ext_mode, int_size_in_bytes (TREE_TYPE (tem))); /* If the result is a record type and BITSIZE is narrower than *************** expand_expr (exp, target, tmode, modifie *** 7071,7077 **** machine, we must put the field into the high-order bits. */ if (TREE_CODE (type) == RECORD_TYPE && BYTES_BIG_ENDIAN && GET_MODE_CLASS (GET_MODE (op0)) == MODE_INT ! && bitsize < GET_MODE_BITSIZE (GET_MODE (op0))) op0 = expand_shift (LSHIFT_EXPR, GET_MODE (op0), op0, size_int (GET_MODE_BITSIZE (GET_MODE (op0)) - bitsize), --- 7059,7065 ---- machine, we must put the field into the high-order bits. */ if (TREE_CODE (type) == RECORD_TYPE && BYTES_BIG_ENDIAN && GET_MODE_CLASS (GET_MODE (op0)) == MODE_INT ! && bitsize < (HOST_WIDE_INT) GET_MODE_BITSIZE (GET_MODE (op0))) op0 = expand_shift (LSHIFT_EXPR, GET_MODE (op0), op0, size_int (GET_MODE_BITSIZE (GET_MODE (op0)) - bitsize), *************** expand_expr (exp, target, tmode, modifie *** 7079,7091 **** if (mode == BLKmode) { ! tree nt = build_qualified_type (type_for_mode (ext_mode, 0), ! TYPE_QUAL_CONST); ! rtx new = assign_temp (nt, 0, 1, 1); emit_move_insn (new, op0); op0 = copy_rtx (new); PUT_MODE (op0, BLKmode); } return op0; --- 7067,7080 ---- if (mode == BLKmode) { ! rtx new = assign_temp (build_qualified_type ! (type_for_mode (ext_mode, 0), ! TYPE_QUAL_CONST), 0, 1, 1); emit_move_insn (new, op0); op0 = copy_rtx (new); PUT_MODE (op0, BLKmode); + set_mem_attributes (op0, exp, 1); } return op0; *************** expand_expr (exp, target, tmode, modifie *** 7099,7120 **** /* Get a reference to just this component. */ if (modifier == EXPAND_CONST_ADDRESS || modifier == EXPAND_SUM || modifier == EXPAND_INITIALIZER) ! { ! rtx new = gen_rtx_MEM (mode1, ! plus_constant (XEXP (op0, 0), ! (bitpos / BITS_PER_UNIT))); ! ! MEM_COPY_ATTRIBUTES (new, op0); ! op0 = new; ! } else ! op0 = change_address (op0, mode1, ! plus_constant (XEXP (op0, 0), ! (bitpos / BITS_PER_UNIT))); set_mem_attributes (op0, exp, 0); if (GET_CODE (XEXP (op0, 0)) == REG) ! mark_reg_pointer (XEXP (op0, 0), alignment); MEM_VOLATILE_P (op0) |= volatilep; if (mode == mode1 || mode1 == BLKmode || mode1 == tmode --- 7088,7103 ---- /* Get a reference to just this component. */ if (modifier == EXPAND_CONST_ADDRESS || modifier == EXPAND_SUM || modifier == EXPAND_INITIALIZER) ! op0 = adjust_address_nv (op0, mode1, bitpos / BITS_PER_UNIT); else ! op0 = adjust_address (op0, mode1, bitpos / BITS_PER_UNIT); ! ! if (op0 == orig_op0) ! op0 = copy_rtx (op0); set_mem_attributes (op0, exp, 0); if (GET_CODE (XEXP (op0, 0)) == REG) ! mark_reg_pointer (XEXP (op0, 0), MEM_ALIGN (op0)); MEM_VOLATILE_P (op0) |= volatilep; if (mode == mode1 || mode1 == BLKmode || mode1 == tmode *************** expand_expr (exp, target, tmode, modifie *** 7128,7133 **** --- 7111,7153 ---- return target; } + case VTABLE_REF: + { + rtx insn, before = get_last_insn (), vtbl_ref; + + /* Evaluate the interior expression. */ + subtarget = expand_expr (TREE_OPERAND (exp, 0), target, + tmode, modifier); + + /* Get or create an instruction off which to hang a note. */ + if (REG_P (subtarget)) + { + target = subtarget; + insn = get_last_insn (); + if (insn == before) + abort (); + if (! INSN_P (insn)) + insn = prev_nonnote_insn (insn); + } + else + { + target = gen_reg_rtx (GET_MODE (subtarget)); + insn = emit_move_insn (target, subtarget); + } + + /* Collect the data for the note. */ + vtbl_ref = XEXP (DECL_RTL (TREE_OPERAND (exp, 1)), 0); + vtbl_ref = plus_constant (vtbl_ref, + tree_low_cst (TREE_OPERAND (exp, 2), 0)); + /* Discard the initial CONST that was added. */ + vtbl_ref = XEXP (vtbl_ref, 0); + + REG_NOTES (insn) + = gen_rtx_EXPR_LIST (REG_VTABLE_REF, vtbl_ref, REG_NOTES (insn)); + + return target; + } + /* Intended for a reference to a buffer of a file-object in Pascal. But it's not certain that a special tree code will really be necessary for these. INDIRECT_REF might work for them. */ *************** expand_expr (exp, target, tmode, modifie *** 7184,7200 **** if (! (GET_CODE (index_val) == CONST_INT && GET_CODE (lo_r) == CONST_INT)) ! { ! emit_cmp_and_jump_insns (index_val, lo_r, LT, NULL_RTX, ! GET_MODE (index_val), iunsignedp, 0, op1); ! } if (! (GET_CODE (index_val) == CONST_INT && GET_CODE (hi_r) == CONST_INT)) ! { ! emit_cmp_and_jump_insns (index_val, hi_r, GT, NULL_RTX, ! GET_MODE (index_val), iunsignedp, 0, op1); ! } /* Calculate the element number of bit zero in the first word of the set. */ --- 7204,7216 ---- if (! (GET_CODE (index_val) == CONST_INT && GET_CODE (lo_r) == CONST_INT)) ! emit_cmp_and_jump_insns (index_val, lo_r, LT, NULL_RTX, ! GET_MODE (index_val), iunsignedp, op1); if (! (GET_CODE (index_val) == CONST_INT && GET_CODE (hi_r) == CONST_INT)) ! emit_cmp_and_jump_insns (index_val, hi_r, GT, NULL_RTX, ! GET_MODE (index_val), iunsignedp, op1); /* Calculate the element number of bit zero in the first word of the set. */ *************** expand_expr (exp, target, tmode, modifie *** 7240,7255 **** } case WITH_CLEANUP_EXPR: ! if (RTL_EXPR_RTL (exp) == 0) { ! RTL_EXPR_RTL (exp) ! = expand_expr (TREE_OPERAND (exp, 0), target, tmode, ro_modifier); ! expand_decl_cleanup (NULL_TREE, TREE_OPERAND (exp, 2)); /* That's it for this cleanup. */ ! TREE_OPERAND (exp, 2) = 0; } ! return RTL_EXPR_RTL (exp); case CLEANUP_POINT_EXPR: { --- 7256,7271 ---- } case WITH_CLEANUP_EXPR: ! if (WITH_CLEANUP_EXPR_RTL (exp) == 0) { ! WITH_CLEANUP_EXPR_RTL (exp) ! = expand_expr (TREE_OPERAND (exp, 0), target, tmode, modifier); ! expand_decl_cleanup (NULL_TREE, TREE_OPERAND (exp, 1)); /* That's it for this cleanup. */ ! TREE_OPERAND (exp, 1) = 0; } ! return WITH_CLEANUP_EXPR_RTL (exp); case CLEANUP_POINT_EXPR: { *************** expand_expr (exp, target, tmode, modifie *** 7259,7265 **** target_temp_slot_level = temp_slot_level; ! op0 = expand_expr (TREE_OPERAND (exp, 0), target, tmode, ro_modifier); /* If we're going to use this value, load it up now. */ if (! ignore) op0 = force_not_mem (op0); --- 7275,7281 ---- target_temp_slot_level = temp_slot_level; ! op0 = expand_expr (TREE_OPERAND (exp, 0), target, tmode, modifier); /* If we're going to use this value, load it up now. */ if (! ignore) op0 = force_not_mem (op0); *************** expand_expr (exp, target, tmode, modifie *** 7295,7308 **** { tree valtype = TREE_TYPE (TREE_OPERAND (exp, 0)); ! /* If both input and output are BLKmode, this conversion ! isn't actually doing anything unless we need to make the ! alignment stricter. */ ! if (mode == BLKmode && TYPE_MODE (valtype) == BLKmode ! && (TYPE_ALIGN (type) <= TYPE_ALIGN (valtype) ! || TYPE_ALIGN (type) >= BIGGEST_ALIGNMENT)) ! return expand_expr (TREE_OPERAND (exp, 0), target, tmode, ! modifier); if (target == 0) target = assign_temp (type, 0, 1, 1); --- 7311,7327 ---- { tree valtype = TREE_TYPE (TREE_OPERAND (exp, 0)); ! /* If both input and output are BLKmode, this conversion isn't doing ! anything except possibly changing memory attribute. */ ! if (mode == BLKmode && TYPE_MODE (valtype) == BLKmode) ! { ! rtx result = expand_expr (TREE_OPERAND (exp, 0), target, tmode, ! modifier); ! ! result = copy_rtx (result); ! set_mem_attributes (result, exp, 0); ! return result; ! } if (target == 0) target = assign_temp (type, 0, 1, 1); *************** expand_expr (exp, target, tmode, modifie *** 7310,7316 **** if (GET_CODE (target) == MEM) /* Store data into beginning of memory target. */ store_expr (TREE_OPERAND (exp, 0), ! change_address (target, TYPE_MODE (valtype), 0), 0); else if (GET_CODE (target) == REG) /* Store this field into a union of the proper type. */ --- 7329,7335 ---- if (GET_CODE (target) == MEM) /* Store data into beginning of memory target. */ store_expr (TREE_OPERAND (exp, 0), ! adjust_address (target, TYPE_MODE (valtype), 0), 0); else if (GET_CODE (target) == REG) /* Store this field into a union of the proper type. */ *************** expand_expr (exp, target, tmode, modifie *** 7320,7327 **** * BITS_PER_UNIT), (HOST_WIDE_INT) GET_MODE_BITSIZE (mode)), 0, TYPE_MODE (valtype), TREE_OPERAND (exp, 0), ! VOIDmode, 0, BITS_PER_UNIT, ! int_size_in_bytes (type), 0); else abort (); --- 7339,7345 ---- * BITS_PER_UNIT), (HOST_WIDE_INT) GET_MODE_BITSIZE (mode)), 0, TYPE_MODE (valtype), TREE_OPERAND (exp, 0), ! VOIDmode, 0, type, 0); else abort (); *************** expand_expr (exp, target, tmode, modifie *** 7332,7338 **** if (mode == TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0)))) { op0 = expand_expr (TREE_OPERAND (exp, 0), target, VOIDmode, ! ro_modifier); /* If the signedness of the conversion differs and OP0 is a promoted SUBREG, clear that indication since we now --- 7350,7356 ---- if (mode == TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0)))) { op0 = expand_expr (TREE_OPERAND (exp, 0), target, VOIDmode, ! modifier); /* If the signedness of the conversion differs and OP0 is a promoted SUBREG, clear that indication since we now *************** expand_expr (exp, target, tmode, modifie *** 7344,7358 **** return op0; } ! op0 = expand_expr (TREE_OPERAND (exp, 0), NULL_RTX, mode, 0); if (GET_MODE (op0) == mode) return op0; /* If OP0 is a constant, just convert it into the proper mode. */ if (CONSTANT_P (op0)) ! return ! convert_modes (mode, TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0))), ! op0, TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (exp, 0)))); if (modifier == EXPAND_INITIALIZER) return gen_rtx_fmt_e (unsignedp ? ZERO_EXTEND : SIGN_EXTEND, mode, op0); --- 7362,7385 ---- return op0; } ! op0 = expand_expr (TREE_OPERAND (exp, 0), NULL_RTX, mode, modifier); if (GET_MODE (op0) == mode) return op0; /* If OP0 is a constant, just convert it into the proper mode. */ if (CONSTANT_P (op0)) ! { ! tree inner_type = TREE_TYPE (TREE_OPERAND (exp, 0)); ! enum machine_mode inner_mode = TYPE_MODE (inner_type); ! ! if (modifier == EXPAND_INITIALIZER) ! return simplify_gen_subreg (mode, op0, inner_mode, ! subreg_lowpart_offset (mode, ! inner_mode)); ! else ! return convert_modes (mode, inner_mode, op0, ! TREE_UNSIGNED (inner_type)); ! } if (modifier == EXPAND_INITIALIZER) return gen_rtx_fmt_e (unsignedp ? ZERO_EXTEND : SIGN_EXTEND, mode, op0); *************** expand_expr (exp, target, tmode, modifie *** 7366,7377 **** TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (exp, 0)))); return target; case PLUS_EXPR: /* We come here from MINUS_EXPR when the second operand is a constant. */ plus_expr: this_optab = ! unsignedp && flag_trapv ! && (GET_MODE_CLASS(mode) == MODE_INT) ? addv_optab : add_optab; /* If we are adding a constant, an RTL_EXPR that is sp, fp, or ap, and --- 7393,7476 ---- TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (exp, 0)))); return target; + case VIEW_CONVERT_EXPR: + op0 = expand_expr (TREE_OPERAND (exp, 0), NULL_RTX, mode, modifier); + + /* If the input and output modes are both the same, we are done. + Otherwise, if neither mode is BLKmode and both are within a word, we + can use gen_lowpart. If neither is true, make sure the operand is + in memory and convert the MEM to the new mode. */ + if (TYPE_MODE (type) == GET_MODE (op0)) + ; + else if (TYPE_MODE (type) != BLKmode && GET_MODE (op0) != BLKmode + && GET_MODE_SIZE (TYPE_MODE (type)) <= UNITS_PER_WORD + && GET_MODE_SIZE (GET_MODE (op0)) <= UNITS_PER_WORD) + op0 = gen_lowpart (TYPE_MODE (type), op0); + else if (GET_CODE (op0) != MEM) + { + /* If the operand is not a MEM, force it into memory. Since we + are going to be be changing the mode of the MEM, don't call + force_const_mem for constants because we don't allow pool + constants to change mode. */ + tree inner_type = TREE_TYPE (TREE_OPERAND (exp, 0)); + + if (TREE_ADDRESSABLE (exp)) + abort (); + + if (target == 0 || GET_MODE (target) != TYPE_MODE (inner_type)) + target + = assign_stack_temp_for_type + (TYPE_MODE (inner_type), + GET_MODE_SIZE (TYPE_MODE (inner_type)), 0, inner_type); + + emit_move_insn (target, op0); + op0 = target; + } + + /* At this point, OP0 is in the correct mode. If the output type is such + that the operand is known to be aligned, indicate that it is. + Otherwise, we need only be concerned about alignment for non-BLKmode + results. */ + if (GET_CODE (op0) == MEM) + { + op0 = copy_rtx (op0); + + if (TYPE_ALIGN_OK (type)) + set_mem_align (op0, MAX (MEM_ALIGN (op0), TYPE_ALIGN (type))); + else if (TYPE_MODE (type) != BLKmode && STRICT_ALIGNMENT + && MEM_ALIGN (op0) < GET_MODE_ALIGNMENT (TYPE_MODE (type))) + { + tree inner_type = TREE_TYPE (TREE_OPERAND (exp, 0)); + HOST_WIDE_INT temp_size + = MAX (int_size_in_bytes (inner_type), + (HOST_WIDE_INT) GET_MODE_SIZE (TYPE_MODE (type))); + rtx new = assign_stack_temp_for_type (TYPE_MODE (type), + temp_size, 0, type); + rtx new_with_op0_mode = adjust_address (new, GET_MODE (op0), 0); + + if (TREE_ADDRESSABLE (exp)) + abort (); + + if (GET_MODE (op0) == BLKmode) + emit_block_move (new_with_op0_mode, op0, + GEN_INT (GET_MODE_SIZE (TYPE_MODE (type)))); + else + emit_move_insn (new_with_op0_mode, op0); + + op0 = new; + } + + op0 = adjust_address (op0, TYPE_MODE (type), 0); + } + + return op0; + case PLUS_EXPR: /* We come here from MINUS_EXPR when the second operand is a constant. */ plus_expr: this_optab = ! unsignedp && flag_trapv ! && (GET_MODE_CLASS (mode) == MODE_INT) ? addv_optab : add_optab; /* If we are adding a constant, an RTL_EXPR that is sp, fp, or ap, and *************** expand_expr (exp, target, tmode, modifie *** 7438,7444 **** rtx constant_part; op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode, ! EXPAND_SUM); if (! CONSTANT_P (op0)) { op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX, --- 7537,7544 ---- rtx constant_part; op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode, ! (modifier == EXPAND_INITIALIZER ! ? EXPAND_INITIALIZER : EXPAND_SUM)); if (! CONSTANT_P (op0)) { op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX, *************** expand_expr (exp, target, tmode, modifie *** 7475,7482 **** if (! safe_from_p (subtarget, TREE_OPERAND (exp, 1), 1)) subtarget = 0; ! op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode, ro_modifier); ! op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX, VOIDmode, ro_modifier); both_summands: /* Make sure any term that's a sum with a constant comes last. */ --- 7575,7582 ---- if (! safe_from_p (subtarget, TREE_OPERAND (exp, 1), 1)) subtarget = 0; ! op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode, modifier); ! op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX, VOIDmode, modifier); both_summands: /* Make sure any term that's a sum with a constant comes last. */ *************** expand_expr (exp, target, tmode, modifie *** 7535,7544 **** && really_constant_p (TREE_OPERAND (exp, 0)) && really_constant_p (TREE_OPERAND (exp, 1))) { ! rtx op0 = expand_expr (TREE_OPERAND (exp, 0), NULL_RTX, ! VOIDmode, ro_modifier); ! rtx op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX, ! VOIDmode, ro_modifier); /* If the last operand is a CONST_INT, use plus_constant of the negated constant. Else make the MINUS. */ --- 7635,7644 ---- && really_constant_p (TREE_OPERAND (exp, 0)) && really_constant_p (TREE_OPERAND (exp, 1))) { ! rtx op0 = expand_expr (TREE_OPERAND (exp, 0), NULL_RTX, VOIDmode, ! modifier); ! rtx op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX, VOIDmode, ! modifier); /* If the last operand is a CONST_INT, use plus_constant of the negated constant. Else make the MINUS. */ *************** expand_expr (exp, target, tmode, modifie *** 7575,7581 **** check the second operand. */ if (TREE_CODE (TREE_OPERAND (exp, 0)) == INTEGER_CST) { ! register tree t1 = TREE_OPERAND (exp, 0); TREE_OPERAND (exp, 0) = TREE_OPERAND (exp, 1); TREE_OPERAND (exp, 1) = t1; } --- 7675,7681 ---- check the second operand. */ if (TREE_CODE (TREE_OPERAND (exp, 0)) == INTEGER_CST) { ! tree t1 = TREE_OPERAND (exp, 0); TREE_OPERAND (exp, 0) = TREE_OPERAND (exp, 1); TREE_OPERAND (exp, 1) = t1; } *************** expand_expr (exp, target, tmode, modifie *** 7584,7606 **** indexed address, for machines that support that. */ if (modifier == EXPAND_SUM && mode == ptr_mode ! && TREE_CODE (TREE_OPERAND (exp, 1)) == INTEGER_CST ! && GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT) { op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode, EXPAND_SUM); ! /* Apply distributive law if OP0 is x+c. */ ! if (GET_CODE (op0) == PLUS ! && GET_CODE (XEXP (op0, 1)) == CONST_INT) ! return ! gen_rtx_PLUS ! (mode, ! gen_rtx_MULT ! (mode, XEXP (op0, 0), ! GEN_INT (TREE_INT_CST_LOW (TREE_OPERAND (exp, 1)))), ! GEN_INT (TREE_INT_CST_LOW (TREE_OPERAND (exp, 1)) ! * INTVAL (XEXP (op0, 1)))); if (GET_CODE (op0) != REG) op0 = force_operand (op0, NULL_RTX); --- 7684,7703 ---- indexed address, for machines that support that. */ if (modifier == EXPAND_SUM && mode == ptr_mode ! && host_integerp (TREE_OPERAND (exp, 1), 0)) { op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode, EXPAND_SUM); ! /* If we knew for certain that this is arithmetic for an array ! reference, and we knew the bounds of the array, then we could ! apply the distributive law across (PLUS X C) for constant C. ! Without such knowledge, we risk overflowing the computation ! when both X and C are large, but X+C isn't. */ ! /* ??? Could perhaps special-case EXP being unsigned and C being ! positive. In that case we are certain that X+C is no smaller ! than X and so the transformed expression will overflow iff the ! original would have. */ if (GET_CODE (op0) != REG) op0 = force_operand (op0, NULL_RTX); *************** expand_expr (exp, target, tmode, modifie *** 7609,7615 **** return gen_rtx_MULT (mode, op0, ! GEN_INT (TREE_INT_CST_LOW (TREE_OPERAND (exp, 1)))); } if (! safe_from_p (subtarget, TREE_OPERAND (exp, 1), 1)) --- 7706,7712 ---- return gen_rtx_MULT (mode, op0, ! GEN_INT (tree_low_cst (TREE_OPERAND (exp, 1), 0))); } if (! safe_from_p (subtarget, TREE_OPERAND (exp, 1), 1)) *************** expand_expr (exp, target, tmode, modifie *** 7706,7712 **** return expand_divmod (0, code, mode, op0, op1, target, unsignedp); case RDIV_EXPR: ! this_optab = flodiv_optab; goto binop; case TRUNC_MOD_EXPR: --- 7803,7820 ---- return expand_divmod (0, code, mode, op0, op1, target, unsignedp); case RDIV_EXPR: ! /* Emit a/b as a*(1/b). Later we may manage CSE the reciprocal saving ! expensive divide. If not, combine will rebuild the original ! computation. */ ! if (flag_unsafe_math_optimizations && optimize && !optimize_size ! && TREE_CODE (type) == REAL_TYPE ! && !real_onep (TREE_OPERAND (exp, 0))) ! return expand_expr (build (MULT_EXPR, type, TREE_OPERAND (exp, 0), ! build (RDIV_EXPR, type, ! build_real (type, dconst1), ! TREE_OPERAND (exp, 1))), ! target, tmode, unsignedp); ! this_optab = sdiv_optab; goto binop; case TRUNC_MOD_EXPR: *************** expand_expr (exp, target, tmode, modifie *** 7821,7827 **** { int unsignedp = TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (exp, 1))); do_compare_rtx_and_jump (target, op1, code == MAX_EXPR ? GE : LE, ! unsignedp, mode, NULL_RTX, 0, NULL_RTX, op0); } emit_move_insn (target, op1); --- 7929,7935 ---- { int unsignedp = TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (exp, 1))); do_compare_rtx_and_jump (target, op1, code == MAX_EXPR ? GE : LE, ! unsignedp, mode, NULL_RTX, NULL_RTX, op0); } emit_move_insn (target, op1); *************** expand_expr (exp, target, tmode, modifie *** 7909,7920 **** temp = expand_expr (TREE_OPERAND (exp, 0), original_target, VOIDmode, 0); if (temp != original_target) ! temp = copy_to_reg (temp); op1 = gen_label_rtx (); emit_cmp_and_jump_insns (temp, const0_rtx, EQ, NULL_RTX, ! GET_MODE (temp), unsignedp, 0, op1); emit_move_insn (temp, const1_rtx); emit_label (op1); return temp; --- 8017,8045 ---- temp = expand_expr (TREE_OPERAND (exp, 0), original_target, VOIDmode, 0); + /* If temp is constant, we can just compute the result. */ + if (GET_CODE (temp) == CONST_INT) + { + if (INTVAL (temp) != 0) + emit_move_insn (target, const1_rtx); + else + emit_move_insn (target, const0_rtx); + + return target; + } + if (temp != original_target) ! { ! enum machine_mode mode1 = GET_MODE (temp); ! if (mode1 == VOIDmode) ! mode1 = tmode != VOIDmode ? tmode : mode; ! ! temp = copy_to_mode_reg (mode1, temp); ! } op1 = gen_label_rtx (); emit_cmp_and_jump_insns (temp, const0_rtx, EQ, NULL_RTX, ! GET_MODE (temp), unsignedp, op1); emit_move_insn (temp, const1_rtx); emit_label (op1); return temp; *************** expand_expr (exp, target, tmode, modifie *** 8010,8020 **** if (ignore) { expand_expr (TREE_OPERAND (exp, 0), const0_rtx, VOIDmode, ! ro_modifier); return const0_rtx; } ! op0 = expand_expr (TREE_OPERAND (exp, 0), target, mode, ro_modifier); if (GET_MODE (op0) == mode) return op0; --- 8135,8145 ---- if (ignore) { expand_expr (TREE_OPERAND (exp, 0), const0_rtx, VOIDmode, ! modifier); return const0_rtx; } ! op0 = expand_expr (TREE_OPERAND (exp, 0), target, mode, modifier); if (GET_MODE (op0) == mode) return op0; *************** expand_expr (exp, target, tmode, modifie *** 8065,8072 **** || GET_CODE (original_target) == REG || TREE_ADDRESSABLE (type)) #endif ! && ! (GET_CODE (original_target) == MEM ! && MEM_VOLATILE_P (original_target))) temp = original_target; else if (TREE_ADDRESSABLE (type)) abort (); --- 8190,8197 ---- || GET_CODE (original_target) == REG || TREE_ADDRESSABLE (type)) #endif ! && (GET_CODE (original_target) != MEM ! || TREE_ADDRESSABLE (type))) temp = original_target; else if (TREE_ADDRESSABLE (type)) abort (); *************** expand_expr (exp, target, tmode, modifie *** 8355,8389 **** { tree lhs = TREE_OPERAND (exp, 0); tree rhs = TREE_OPERAND (exp, 1); - tree noncopied_parts = 0; - tree lhs_type = TREE_TYPE (lhs); temp = expand_assignment (lhs, rhs, ! ignore, original_target != 0); - if (TYPE_NONCOPIED_PARTS (lhs_type) != 0 && !fixed_type_p (rhs)) - noncopied_parts = init_noncopied_parts (stabilize_reference (lhs), - TYPE_NONCOPIED_PARTS (lhs_type)); - while (noncopied_parts != 0) - { - expand_assignment (TREE_VALUE (noncopied_parts), - TREE_PURPOSE (noncopied_parts), 0, 0); - noncopied_parts = TREE_CHAIN (noncopied_parts); - } return temp; } case MODIFY_EXPR: { /* If lhs is complex, expand calls in rhs before computing it. ! That's so we don't compute a pointer and save it over a call. ! If lhs is simple, compute it first so we can give it as a ! target if the rhs is just a call. This avoids an extra temp and copy ! and that prevents a partial-subsumption which makes bad code. ! Actually we could treat component_ref's of vars like vars. */ tree lhs = TREE_OPERAND (exp, 0); tree rhs = TREE_OPERAND (exp, 1); - tree noncopied_parts = 0; - tree lhs_type = TREE_TYPE (lhs); temp = 0; --- 8480,8502 ---- { tree lhs = TREE_OPERAND (exp, 0); tree rhs = TREE_OPERAND (exp, 1); temp = expand_assignment (lhs, rhs, ! ignore, original_target != 0); return temp; } case MODIFY_EXPR: { /* If lhs is complex, expand calls in rhs before computing it. ! That's so we don't compute a pointer and save it over a ! call. If lhs is simple, compute it first so we can give it ! as a target if the rhs is just a call. This avoids an ! extra temp and copy and that prevents a partial-subsumption ! which makes bad code. Actually we could treat ! component_ref's of vars like vars. */ tree lhs = TREE_OPERAND (exp, 0); tree rhs = TREE_OPERAND (exp, 1); temp = 0; *************** expand_expr (exp, target, tmode, modifie *** 8419,8436 **** return const0_rtx; } - if (TYPE_NONCOPIED_PARTS (lhs_type) != 0 - && ! (fixed_type_p (lhs) && fixed_type_p (rhs))) - noncopied_parts = save_noncopied_parts (stabilize_reference (lhs), - TYPE_NONCOPIED_PARTS (lhs_type)); - temp = expand_assignment (lhs, rhs, ! ignore, original_target != 0); ! while (noncopied_parts != 0) ! { ! expand_assignment (TREE_PURPOSE (noncopied_parts), ! TREE_VALUE (noncopied_parts), 0, 0); ! noncopied_parts = TREE_CHAIN (noncopied_parts); ! } return temp; } --- 8532,8539 ---- return const0_rtx; } temp = expand_assignment (lhs, rhs, ! ignore, original_target != 0); ! return temp; } *************** expand_expr (exp, target, tmode, modifie *** 8451,8460 **** return expand_increment (exp, ! ignore, ignore); case ADDR_EXPR: - /* If nonzero, TEMP will be set to the address of something that might - be a MEM corresponding to a stack slot. */ - temp = 0; - /* Are we taking the address of a nested function? */ if (TREE_CODE (TREE_OPERAND (exp, 0)) == FUNCTION_DECL && decl_function_context (TREE_OPERAND (exp, 0)) != 0 --- 8554,8559 ---- *************** expand_expr (exp, target, tmode, modifie *** 8468,8473 **** --- 8567,8580 ---- return a zero. */ else if (TREE_CODE (TREE_OPERAND (exp, 0)) == ERROR_MARK) return const0_rtx; + /* If we are taking the address of a constant and are at the + top level, we have to use output_constant_def since we can't + call force_const_mem at top level. */ + else if (cfun == 0 + && (TREE_CODE (TREE_OPERAND (exp, 0)) == CONSTRUCTOR + || (TREE_CODE_CLASS (TREE_CODE (TREE_OPERAND (exp, 0))) + == 'c'))) + op0 = XEXP (output_constant_def (TREE_OPERAND (exp, 0), 0), 0); else { /* We make sure to pass const0_rtx down if we came in with *************** expand_expr (exp, target, tmode, modifie *** 8494,8558 **** if (CONSTANT_P (op0)) op0 = force_const_mem (TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0))), op0); - else if (GET_CODE (op0) == MEM) - { - mark_temp_addr_taken (op0); - temp = XEXP (op0, 0); - } - else if (GET_CODE (op0) == REG || GET_CODE (op0) == SUBREG || GET_CODE (op0) == CONCAT || GET_CODE (op0) == ADDRESSOF || GET_CODE (op0) == PARALLEL) { ! /* If this object is in a register, it must be not ! be BLKmode. */ ! tree inner_type = TREE_TYPE (TREE_OPERAND (exp, 0)); ! tree nt = build_qualified_type (inner_type, ! (TYPE_QUALS (inner_type) ! | TYPE_QUAL_CONST)); ! rtx memloc = assign_temp (nt, 1, 1, 1); ! ! mark_temp_addr_taken (memloc); ! if (GET_CODE (op0) == PARALLEL) ! /* Handle calls that pass values in multiple non-contiguous ! locations. The Irix 6 ABI has examples of this. */ ! emit_group_store (memloc, op0, ! int_size_in_bytes (inner_type), ! TYPE_ALIGN (inner_type)); else ! emit_move_insn (memloc, op0); ! op0 = memloc; } if (GET_CODE (op0) != MEM) abort (); if (modifier == EXPAND_SUM || modifier == EXPAND_INITIALIZER) { ! temp = XEXP (op0, 0); #ifdef POINTERS_EXTEND_UNSIGNED ! if (GET_MODE (temp) == Pmode && GET_MODE (temp) != mode && mode == ptr_mode) ! temp = convert_memory_address (ptr_mode, temp); #endif ! return temp; } op0 = force_operand (XEXP (op0, 0), target); } ! if (flag_force_addr && GET_CODE (op0) != REG) op0 = force_reg (Pmode, op0); if (GET_CODE (op0) == REG && ! REG_USERVAR_P (op0)) mark_reg_pointer (op0, TYPE_ALIGN (TREE_TYPE (type))); - /* If we might have had a temp slot, add an equivalent address - for it. */ - if (temp != 0) - update_temp_slot_address (temp, op0); - #ifdef POINTERS_EXTEND_UNSIGNED if (GET_MODE (op0) == Pmode && GET_MODE (op0) != mode && mode == ptr_mode) --- 8601,8697 ---- if (CONSTANT_P (op0)) op0 = force_const_mem (TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0))), op0); else if (GET_CODE (op0) == REG || GET_CODE (op0) == SUBREG || GET_CODE (op0) == CONCAT || GET_CODE (op0) == ADDRESSOF || GET_CODE (op0) == PARALLEL) { ! /* If the operand is a SAVE_EXPR, we can deal with this by ! forcing the SAVE_EXPR into memory. */ ! if (TREE_CODE (TREE_OPERAND (exp, 0)) == SAVE_EXPR) ! { ! put_var_into_stack (TREE_OPERAND (exp, 0)); ! op0 = SAVE_EXPR_RTL (TREE_OPERAND (exp, 0)); ! } else ! { ! /* If this object is in a register, it can't be BLKmode. */ ! tree inner_type = TREE_TYPE (TREE_OPERAND (exp, 0)); ! rtx memloc = assign_temp (inner_type, 1, 1, 1); ! ! if (GET_CODE (op0) == PARALLEL) ! /* Handle calls that pass values in multiple ! non-contiguous locations. The Irix 6 ABI has examples ! of this. */ ! emit_group_store (memloc, op0, ! int_size_in_bytes (inner_type)); ! else ! emit_move_insn (memloc, op0); ! ! op0 = memloc; ! } } if (GET_CODE (op0) != MEM) abort (); + mark_temp_addr_taken (op0); if (modifier == EXPAND_SUM || modifier == EXPAND_INITIALIZER) { ! op0 = XEXP (op0, 0); #ifdef POINTERS_EXTEND_UNSIGNED ! if (GET_MODE (op0) == Pmode && GET_MODE (op0) != mode && mode == ptr_mode) ! op0 = convert_memory_address (ptr_mode, op0); #endif ! return op0; ! } ! ! /* If OP0 is not aligned as least as much as the type requires, we ! need to make a temporary, copy OP0 to it, and take the address of ! the temporary. We want to use the alignment of the type, not of ! the operand. Note that this is incorrect for FUNCTION_TYPE, but ! the test for BLKmode means that can't happen. The test for ! BLKmode is because we never make mis-aligned MEMs with ! non-BLKmode. ! ! We don't need to do this at all if the machine doesn't have ! strict alignment. */ ! if (STRICT_ALIGNMENT && GET_MODE (op0) == BLKmode ! && (TYPE_ALIGN (TREE_TYPE (TREE_OPERAND (exp, 0))) ! > MEM_ALIGN (op0)) ! && MEM_ALIGN (op0) < BIGGEST_ALIGNMENT) ! { ! tree inner_type = TREE_TYPE (TREE_OPERAND (exp, 0)); ! rtx new ! = assign_stack_temp_for_type ! (TYPE_MODE (inner_type), ! MEM_SIZE (op0) ? INTVAL (MEM_SIZE (op0)) ! : int_size_in_bytes (inner_type), ! 1, build_qualified_type (inner_type, ! (TYPE_QUALS (inner_type) ! | TYPE_QUAL_CONST))); ! ! if (TYPE_ALIGN_OK (inner_type)) ! abort (); ! ! emit_block_move (new, op0, expr_size (TREE_OPERAND (exp, 0))); ! op0 = new; } op0 = force_operand (XEXP (op0, 0), target); } ! if (flag_force_addr ! && GET_CODE (op0) != REG ! && modifier != EXPAND_CONST_ADDRESS ! && modifier != EXPAND_INITIALIZER ! && modifier != EXPAND_SUM) op0 = force_reg (Pmode, op0); if (GET_CODE (op0) == REG && ! REG_USERVAR_P (op0)) mark_reg_pointer (op0, TYPE_ALIGN (TREE_TYPE (type))); #ifdef POINTERS_EXTEND_UNSIGNED if (GET_MODE (op0) == Pmode && GET_MODE (op0) != mode && mode == ptr_mode) *************** expand_expr (exp, target, tmode, modifie *** 8732,9049 **** return temp; } ! /* Similar to expand_expr, except that we don't specify a target, target ! mode, or modifier and we return the alignment of the inner type. This is ! used in cases where it is not necessary to align the result to the ! alignment of its type as long as we know the alignment of the result, for ! example for comparisons of BLKmode values. */ ! static rtx ! expand_expr_unaligned (exp, palign) ! register tree exp; ! unsigned int *palign; { ! register rtx op0; ! tree type = TREE_TYPE (exp); ! register enum machine_mode mode = TYPE_MODE (type); ! ! /* Default the alignment we return to that of the type. */ ! *palign = TYPE_ALIGN (type); ! ! /* The only cases in which we do anything special is if the resulting mode ! is BLKmode. */ ! if (mode != BLKmode) ! return expand_expr (exp, NULL_RTX, VOIDmode, EXPAND_NORMAL); ! ! switch (TREE_CODE (exp)) ! { ! case CONVERT_EXPR: ! case NOP_EXPR: ! case NON_LVALUE_EXPR: ! /* Conversions between BLKmode values don't change the underlying ! alignment or value. */ ! if (TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0))) == BLKmode) ! return expand_expr_unaligned (TREE_OPERAND (exp, 0), palign); ! break; ! ! case ARRAY_REF: ! /* Much of the code for this case is copied directly from expand_expr. ! We need to duplicate it here because we will do something different ! in the fall-through case, so we need to handle the same exceptions ! it does. */ ! { ! tree array = TREE_OPERAND (exp, 0); ! tree domain = TYPE_DOMAIN (TREE_TYPE (array)); ! tree low_bound = domain ? TYPE_MIN_VALUE (domain) : integer_zero_node; ! tree index = convert (sizetype, TREE_OPERAND (exp, 1)); ! HOST_WIDE_INT i; ! ! if (TREE_CODE (TREE_TYPE (TREE_OPERAND (exp, 0))) != ARRAY_TYPE) ! abort (); ! ! /* Optimize the special-case of a zero lower bound. ! ! We convert the low_bound to sizetype to avoid some problems ! with constant folding. (E.g. suppose the lower bound is 1, ! and its mode is QI. Without the conversion, (ARRAY ! +(INDEX-(unsigned char)1)) becomes ((ARRAY+(-(unsigned char)1)) ! +INDEX), which becomes (ARRAY+255+INDEX). Oops!) */ ! ! if (! integer_zerop (low_bound)) ! index = size_diffop (index, convert (sizetype, low_bound)); ! ! /* If this is a constant index into a constant array, ! just get the value from the array. Handle both the cases when ! we have an explicit constructor and when our operand is a variable ! that was declared const. */ ! ! if (TREE_CODE (array) == CONSTRUCTOR && ! TREE_SIDE_EFFECTS (array) ! && host_integerp (index, 0) ! && 0 > compare_tree_int (index, ! list_length (CONSTRUCTOR_ELTS ! (TREE_OPERAND (exp, 0))))) ! { ! tree elem; ! ! for (elem = CONSTRUCTOR_ELTS (TREE_OPERAND (exp, 0)), ! i = tree_low_cst (index, 0); ! elem != 0 && i != 0; i--, elem = TREE_CHAIN (elem)) ! ; ! ! if (elem) ! return expand_expr_unaligned (fold (TREE_VALUE (elem)), palign); ! } ! ! else if (optimize >= 1 ! && TREE_READONLY (array) && ! TREE_SIDE_EFFECTS (array) ! && TREE_CODE (array) == VAR_DECL && DECL_INITIAL (array) ! && TREE_CODE (DECL_INITIAL (array)) != ERROR_MARK) ! { ! if (TREE_CODE (index) == INTEGER_CST) ! { ! tree init = DECL_INITIAL (array); ! ! if (TREE_CODE (init) == CONSTRUCTOR) ! { ! tree elem; ! ! for (elem = CONSTRUCTOR_ELTS (init); ! ! tree_int_cst_equal (TREE_PURPOSE (elem), index); ! elem = TREE_CHAIN (elem)) ! ; ! ! if (elem) ! return expand_expr_unaligned (fold (TREE_VALUE (elem)), ! palign); ! } ! } ! } ! } ! /* Fall through. */ ! ! case COMPONENT_REF: ! case BIT_FIELD_REF: ! /* If the operand is a CONSTRUCTOR, we can just extract the ! appropriate field if it is present. Don't do this if we have ! already written the data since we want to refer to that copy ! and varasm.c assumes that's what we'll do. */ ! if (TREE_CODE (exp) != ARRAY_REF ! && TREE_CODE (TREE_OPERAND (exp, 0)) == CONSTRUCTOR ! && TREE_CST_RTL (TREE_OPERAND (exp, 0)) == 0) ! { ! tree elt; ! ! for (elt = CONSTRUCTOR_ELTS (TREE_OPERAND (exp, 0)); elt; ! elt = TREE_CHAIN (elt)) ! if (TREE_PURPOSE (elt) == TREE_OPERAND (exp, 1)) ! /* Note that unlike the case in expand_expr, we know this is ! BLKmode and hence not an integer. */ ! return expand_expr_unaligned (TREE_VALUE (elt), palign); ! } ! ! { ! enum machine_mode mode1; ! HOST_WIDE_INT bitsize, bitpos; ! tree offset; ! int volatilep = 0; ! unsigned int alignment; ! int unsignedp; ! tree tem = get_inner_reference (exp, &bitsize, &bitpos, &offset, ! &mode1, &unsignedp, &volatilep, ! &alignment); ! ! /* If we got back the original object, something is wrong. Perhaps ! we are evaluating an expression too early. In any event, don't ! infinitely recurse. */ ! if (tem == exp) ! abort (); ! ! op0 = expand_expr (tem, NULL_RTX, VOIDmode, EXPAND_NORMAL); ! ! /* If this is a constant, put it into a register if it is a ! legitimate constant and OFFSET is 0 and memory if it isn't. */ ! if (CONSTANT_P (op0)) ! { ! enum machine_mode inner_mode = TYPE_MODE (TREE_TYPE (tem)); ! ! if (inner_mode != BLKmode && LEGITIMATE_CONSTANT_P (op0) ! && offset == 0) ! op0 = force_reg (inner_mode, op0); ! else ! op0 = validize_mem (force_const_mem (inner_mode, op0)); ! } ! ! if (offset != 0) ! { ! rtx offset_rtx = expand_expr (offset, NULL_RTX, VOIDmode, 0); ! ! /* If this object is in a register, put it into memory. ! This case can't occur in C, but can in Ada if we have ! unchecked conversion of an expression from a scalar type to ! an array or record type. */ ! if (GET_CODE (op0) == REG || GET_CODE (op0) == SUBREG ! || GET_CODE (op0) == CONCAT || GET_CODE (op0) == ADDRESSOF) ! { ! tree nt = build_qualified_type (TREE_TYPE (tem), ! (TYPE_QUALS (TREE_TYPE (tem)) ! | TYPE_QUAL_CONST)); ! rtx memloc = assign_temp (nt, 1, 1, 1); ! ! mark_temp_addr_taken (memloc); ! emit_move_insn (memloc, op0); ! op0 = memloc; ! } ! ! if (GET_CODE (op0) != MEM) ! abort (); ! ! if (GET_MODE (offset_rtx) != ptr_mode) ! { ! #ifdef POINTERS_EXTEND_UNSIGNED ! offset_rtx = convert_memory_address (ptr_mode, offset_rtx); ! #else ! offset_rtx = convert_to_mode (ptr_mode, offset_rtx, 0); ! #endif ! } ! ! op0 = change_address (op0, VOIDmode, ! gen_rtx_PLUS (ptr_mode, XEXP (op0, 0), ! force_reg (ptr_mode, ! offset_rtx))); ! } ! ! /* Don't forget about volatility even if this is a bitfield. */ ! if (GET_CODE (op0) == MEM && volatilep && ! MEM_VOLATILE_P (op0)) ! { ! op0 = copy_rtx (op0); ! MEM_VOLATILE_P (op0) = 1; ! } ! ! /* Check the access. */ ! if (current_function_check_memory_usage && GET_CODE (op0) == MEM) ! { ! rtx to; ! int size; ! ! to = plus_constant (XEXP (op0, 0), (bitpos / BITS_PER_UNIT)); ! size = (bitpos % BITS_PER_UNIT) + bitsize + BITS_PER_UNIT - 1; ! ! /* Check the access right of the pointer. */ ! in_check_memory_usage = 1; ! if (size > BITS_PER_UNIT) ! emit_library_call (chkr_check_addr_libfunc, ! LCT_CONST_MAKE_BLOCK, VOIDmode, 3, ! to, ptr_mode, GEN_INT (size / BITS_PER_UNIT), ! TYPE_MODE (sizetype), ! GEN_INT (MEMORY_USE_RO), ! TYPE_MODE (integer_type_node)); ! in_check_memory_usage = 0; ! } ! ! /* In cases where an aligned union has an unaligned object ! as a field, we might be extracting a BLKmode value from ! an integer-mode (e.g., SImode) object. Handle this case ! by doing the extract into an object as wide as the field ! (which we know to be the width of a basic mode), then ! storing into memory, and changing the mode to BLKmode. ! If we ultimately want the address (EXPAND_CONST_ADDRESS or ! EXPAND_INITIALIZER), then we must not copy to a temporary. */ ! if (mode1 == VOIDmode ! || GET_CODE (op0) == REG || GET_CODE (op0) == SUBREG ! || (SLOW_UNALIGNED_ACCESS (mode1, alignment) ! && (TYPE_ALIGN (type) > alignment ! || bitpos % TYPE_ALIGN (type) != 0))) ! { ! enum machine_mode ext_mode = mode_for_size (bitsize, MODE_INT, 1); ! ! if (ext_mode == BLKmode) ! { ! /* In this case, BITPOS must start at a byte boundary. */ ! if (GET_CODE (op0) != MEM ! || bitpos % BITS_PER_UNIT != 0) ! abort (); ! ! op0 = change_address (op0, VOIDmode, ! plus_constant (XEXP (op0, 0), ! bitpos / BITS_PER_UNIT)); ! } ! else ! { ! tree nt = build_qualified_type (type_for_mode (ext_mode, 0), ! TYPE_QUAL_CONST); ! rtx new = assign_temp (nt, 0, 1, 1); ! ! op0 = extract_bit_field (validize_mem (op0), bitsize, bitpos, ! unsignedp, NULL_RTX, ext_mode, ! ext_mode, alignment, ! int_size_in_bytes (TREE_TYPE (tem))); ! ! /* If the result is a record type and BITSIZE is narrower than ! the mode of OP0, an integral mode, and this is a big endian ! machine, we must put the field into the high-order bits. */ ! if (TREE_CODE (type) == RECORD_TYPE && BYTES_BIG_ENDIAN ! && GET_MODE_CLASS (GET_MODE (op0)) == MODE_INT ! && bitsize < GET_MODE_BITSIZE (GET_MODE (op0))) ! op0 = expand_shift (LSHIFT_EXPR, GET_MODE (op0), op0, ! size_int (GET_MODE_BITSIZE ! (GET_MODE (op0)) ! - bitsize), ! op0, 1); ! ! emit_move_insn (new, op0); ! op0 = copy_rtx (new); ! PUT_MODE (op0, BLKmode); ! } ! } ! else ! /* Get a reference to just this component. */ ! op0 = change_address (op0, mode1, ! plus_constant (XEXP (op0, 0), ! (bitpos / BITS_PER_UNIT))); ! ! MEM_ALIAS_SET (op0) = get_alias_set (exp); ! ! /* Adjust the alignment in case the bit position is not ! a multiple of the alignment of the inner object. */ ! while (bitpos % alignment != 0) ! alignment >>= 1; ! ! if (GET_CODE (XEXP (op0, 0)) == REG) ! mark_reg_pointer (XEXP (op0, 0), alignment); ! MEM_IN_STRUCT_P (op0) = 1; ! MEM_VOLATILE_P (op0) |= volatilep; ! *palign = alignment; ! return op0; ! } ! default: ! break; ! } ! return expand_expr (exp, NULL_RTX, VOIDmode, EXPAND_NORMAL); } /* Return the tree node if a ARG corresponds to a string constant or zero --- 8871,8924 ---- return temp; } ! /* Subroutine of above: returns 1 if OFFSET corresponds to an offset that ! when applied to the address of EXP produces an address known to be ! aligned more than BIGGEST_ALIGNMENT. */ ! static int ! is_aligning_offset (offset, exp) ! tree offset; ! tree exp; { ! /* Strip off any conversions and WITH_RECORD_EXPR nodes. */ ! while (TREE_CODE (offset) == NON_LVALUE_EXPR ! || TREE_CODE (offset) == NOP_EXPR ! || TREE_CODE (offset) == CONVERT_EXPR ! || TREE_CODE (offset) == WITH_RECORD_EXPR) ! offset = TREE_OPERAND (offset, 0); ! /* We must now have a BIT_AND_EXPR with a constant that is one less than ! power of 2 and which is larger than BIGGEST_ALIGNMENT. */ ! if (TREE_CODE (offset) != BIT_AND_EXPR ! || !host_integerp (TREE_OPERAND (offset, 1), 1) ! || compare_tree_int (TREE_OPERAND (offset, 1), BIGGEST_ALIGNMENT) <= 0 ! || !exact_log2 (tree_low_cst (TREE_OPERAND (offset, 1), 1) + 1) < 0) ! return 0; ! /* Look at the first operand of BIT_AND_EXPR and strip any conversion. ! It must be NEGATE_EXPR. Then strip any more conversions. */ ! offset = TREE_OPERAND (offset, 0); ! while (TREE_CODE (offset) == NON_LVALUE_EXPR ! || TREE_CODE (offset) == NOP_EXPR ! || TREE_CODE (offset) == CONVERT_EXPR) ! offset = TREE_OPERAND (offset, 0); ! if (TREE_CODE (offset) != NEGATE_EXPR) ! return 0; ! offset = TREE_OPERAND (offset, 0); ! while (TREE_CODE (offset) == NON_LVALUE_EXPR ! || TREE_CODE (offset) == NOP_EXPR ! || TREE_CODE (offset) == CONVERT_EXPR) ! offset = TREE_OPERAND (offset, 0); ! /* This must now be the address either of EXP or of a PLACEHOLDER_EXPR ! whose type is the same as EXP. */ ! return (TREE_CODE (offset) == ADDR_EXPR ! && (TREE_OPERAND (offset, 0) == exp ! || (TREE_CODE (TREE_OPERAND (offset, 0)) == PLACEHOLDER_EXPR ! && (TREE_TYPE (TREE_OPERAND (offset, 0)) ! == TREE_TYPE (exp))))); } /* Return the tree node if a ARG corresponds to a string constant or zero *************** string_constant (arg, ptr_offset) *** 9095,9106 **** static rtx expand_increment (exp, post, ignore) ! register tree exp; int post, ignore; { ! register rtx op0, op1; ! register rtx temp, value; ! register tree incremented = TREE_OPERAND (exp, 0); optab this_optab = add_optab; int icode; enum machine_mode mode = TYPE_MODE (TREE_TYPE (exp)); --- 8970,8981 ---- static rtx expand_increment (exp, post, ignore) ! tree exp; int post, ignore; { ! rtx op0, op1; ! rtx temp, value; ! tree incremented = TREE_OPERAND (exp, 0); optab this_optab = add_optab; int icode; enum machine_mode mode = TYPE_MODE (TREE_TYPE (exp)); *************** expand_increment (exp, post, ignore) *** 9129,9138 **** /* Compute the operands as RTX. Note whether OP0 is the actual lvalue or a copy of it: I believe it is a copy iff it is a register or subreg ! and insns were generated in computing it. */ temp = get_last_insn (); ! op0 = expand_expr (incremented, NULL_RTX, VOIDmode, EXPAND_MEMORY_USE_RW); /* If OP0 is a SUBREG made for a promoted variable, we cannot increment in place but instead must do sign- or zero-extension during assignment, --- 9004,9013 ---- /* Compute the operands as RTX. Note whether OP0 is the actual lvalue or a copy of it: I believe it is a copy iff it is a register or subreg ! and insns were generated in computing it. */ temp = get_last_insn (); ! op0 = expand_expr (incremented, NULL_RTX, VOIDmode, 0); /* If OP0 is a SUBREG made for a promoted variable, we cannot increment in place but instead must do sign- or zero-extension during assignment, *************** expand_increment (exp, post, ignore) *** 9163,9170 **** op0_is_copy = ((GET_CODE (op0) == SUBREG || GET_CODE (op0) == REG) && temp != get_last_insn ()); ! op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX, VOIDmode, ! EXPAND_MEMORY_USE_BAD); /* Decide whether incrementing or decrementing. */ if (TREE_CODE (exp) == POSTDECREMENT_EXPR --- 9038,9044 ---- op0_is_copy = ((GET_CODE (op0) == SUBREG || GET_CODE (op0) == REG) && temp != get_last_insn ()); ! op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX, VOIDmode, 0); /* Decide whether incrementing or decrementing. */ if (TREE_CODE (exp) == POSTDECREMENT_EXPR *************** expand_increment (exp, post, ignore) *** 9180,9186 **** } if (TYPE_TRAP_SIGNED (TREE_TYPE (exp))) ! this_optab = this_optab == add_optab ? addv_optab : subv_optab; /* For a preincrement, see if we can do this with a single instruction. */ if (!post) --- 9054,9060 ---- } if (TYPE_TRAP_SIGNED (TREE_TYPE (exp))) ! this_optab = this_optab == add_optab ? addv_optab : subv_optab; /* For a preincrement, see if we can do this with a single instruction. */ if (!post) *************** expand_increment (exp, post, ignore) *** 9260,9266 **** : copy_to_reg (XEXP (op0, 0))); rtx temp, result; ! op0 = change_address (op0, VOIDmode, addr); temp = force_reg (GET_MODE (op0), op0); if (! (*insn_data[icode].operand[2].predicate) (op1, mode)) op1 = force_reg (mode, op1); --- 9134,9140 ---- : copy_to_reg (XEXP (op0, 0))); rtx temp, result; ! op0 = replace_equiv_address (op0, addr); temp = force_reg (GET_MODE (op0), op0); if (! (*insn_data[icode].operand[2].predicate) (op1, mode)) op1 = force_reg (mode, op1); *************** expand_increment (exp, post, ignore) *** 9285,9293 **** temp = copy_rtx (value = op0); /* Increment however we can. */ ! op1 = expand_binop (mode, this_optab, value, op1, ! current_function_check_memory_usage ? NULL_RTX : op0, TREE_UNSIGNED (TREE_TYPE (exp)), OPTAB_LIB_WIDEN); /* Make sure the value is stored into OP0. */ if (op1 != op0) emit_move_insn (op0, op1); --- 9159,9167 ---- temp = copy_rtx (value = op0); /* Increment however we can. */ ! op1 = expand_binop (mode, this_optab, value, op1, op0, TREE_UNSIGNED (TREE_TYPE (exp)), OPTAB_LIB_WIDEN); + /* Make sure the value is stored into OP0. */ if (op1 != op0) emit_move_insn (op0, op1); *************** do_jump (exp, if_false_label, if_true_la *** 9380,9386 **** tree exp; rtx if_false_label, if_true_label; { ! register enum tree_code code = TREE_CODE (exp); /* Some cases need to create a label to jump to in order to properly fall through. These cases set DROP_THROUGH_LABEL nonzero. */ --- 9254,9260 ---- tree exp; rtx if_false_label, if_true_label; { ! enum tree_code code = TREE_CODE (exp); /* Some cases need to create a label to jump to in order to properly fall through. These cases set DROP_THROUGH_LABEL nonzero. */ *************** do_jump (exp, if_false_label, if_true_la *** 9419,9425 **** case NOP_EXPR: if (TREE_CODE (TREE_OPERAND (exp, 0)) == COMPONENT_REF || TREE_CODE (TREE_OPERAND (exp, 0)) == BIT_FIELD_REF ! || TREE_CODE (TREE_OPERAND (exp, 0)) == ARRAY_REF) goto normal; case CONVERT_EXPR: /* If we are narrowing the operand, we have to do the compare in the --- 9293,9300 ---- case NOP_EXPR: if (TREE_CODE (TREE_OPERAND (exp, 0)) == COMPONENT_REF || TREE_CODE (TREE_OPERAND (exp, 0)) == BIT_FIELD_REF ! || TREE_CODE (TREE_OPERAND (exp, 0)) == ARRAY_REF ! || TREE_CODE (TREE_OPERAND (exp, 0)) == ARRAY_RANGE_REF) goto normal; case CONVERT_EXPR: /* If we are narrowing the operand, we have to do the compare in the *************** do_jump (exp, if_false_label, if_true_la *** 9525,9530 **** --- 9400,9406 ---- case COMPONENT_REF: case BIT_FIELD_REF: case ARRAY_REF: + case ARRAY_RANGE_REF: { HOST_WIDE_INT bitsize, bitpos; int unsignedp; *************** do_jump (exp, if_false_label, if_true_la *** 9532,9543 **** tree type; tree offset; int volatilep = 0; - unsigned int alignment; /* Get description of this reference. We don't actually care about the underlying object here. */ get_inner_reference (exp, &bitsize, &bitpos, &offset, &mode, ! &unsignedp, &volatilep, &alignment); type = type_for_size (bitsize, unsignedp); if (! SLOW_BYTE_ACCESS --- 9408,9418 ---- tree type; tree offset; int volatilep = 0; /* Get description of this reference. We don't actually care about the underlying object here. */ get_inner_reference (exp, &bitsize, &bitpos, &offset, &mode, ! &unsignedp, &volatilep); type = type_for_size (bitsize, unsignedp); if (! SLOW_BYTE_ACCESS *************** do_jump (exp, if_false_label, if_true_la *** 9564,9570 **** else { ! register rtx label1 = gen_label_rtx (); drop_through_label = gen_label_rtx (); do_jump (TREE_OPERAND (exp, 0), label1, NULL_RTX); --- 9439,9445 ---- else { ! rtx label1 = gen_label_rtx (); drop_through_label = gen_label_rtx (); do_jump (TREE_OPERAND (exp, 0), label1, NULL_RTX); *************** do_jump (exp, if_false_label, if_true_la *** 9775,9780 **** --- 9650,9688 ---- } break; + /* Special case: + __builtin_expect (, 0) and + __builtin_expect (, 1) + + We need to do this here, so that is not converted to a SCC + operation on machines that use condition code registers and COMPARE + like the PowerPC, and then the jump is done based on whether the SCC + operation produced a 1 or 0. */ + case CALL_EXPR: + /* Check for a built-in function. */ + if (TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR) + { + tree fndecl = TREE_OPERAND (TREE_OPERAND (exp, 0), 0); + tree arglist = TREE_OPERAND (exp, 1); + + if (TREE_CODE (fndecl) == FUNCTION_DECL + && DECL_BUILT_IN (fndecl) + && DECL_FUNCTION_CODE (fndecl) == BUILT_IN_EXPECT + && arglist != NULL_TREE + && TREE_CHAIN (arglist) != NULL_TREE) + { + rtx seq = expand_builtin_expect_jump (exp, if_false_label, + if_true_label); + + if (seq != NULL_RTX) + { + emit_insn (seq); + return; + } + } + } + /* fall through and generate the normal code. */ + default: normal: temp = expand_expr (exp, NULL_RTX, VOIDmode, 0); *************** do_jump (exp, if_false_label, if_true_la *** 9806,9812 **** else if (GET_MODE (temp) != VOIDmode) do_compare_rtx_and_jump (temp, CONST0_RTX (GET_MODE (temp)), NE, TREE_UNSIGNED (TREE_TYPE (exp)), ! GET_MODE (temp), NULL_RTX, 0, if_false_label, if_true_label); else abort (); --- 9714,9720 ---- else if (GET_MODE (temp) != VOIDmode) do_compare_rtx_and_jump (temp, CONST0_RTX (GET_MODE (temp)), NE, TREE_UNSIGNED (TREE_TYPE (exp)), ! GET_MODE (temp), NULL_RTX, if_false_label, if_true_label); else abort (); *************** do_jump_by_parts_greater_rtx (mode, unsi *** 9881,9892 **** /* All but high-order word must be compared as unsigned. */ do_compare_rtx_and_jump (op0_word, op1_word, GT, ! (unsignedp || i > 0), word_mode, NULL_RTX, 0, NULL_RTX, if_true_label); /* Consider lower words only if these are equal. */ do_compare_rtx_and_jump (op0_word, op1_word, NE, unsignedp, word_mode, ! NULL_RTX, 0, NULL_RTX, if_false_label); } if (if_false_label) --- 9789,9800 ---- /* All but high-order word must be compared as unsigned. */ do_compare_rtx_and_jump (op0_word, op1_word, GT, ! (unsignedp || i > 0), word_mode, NULL_RTX, NULL_RTX, if_true_label); /* Consider lower words only if these are equal. */ do_compare_rtx_and_jump (op0_word, op1_word, NE, unsignedp, word_mode, ! NULL_RTX, NULL_RTX, if_false_label); } if (if_false_label) *************** do_jump_by_parts_equality (exp, if_false *** 9917,9924 **** do_compare_rtx_and_jump (operand_subword_force (op0, i, mode), operand_subword_force (op1, i, mode), EQ, TREE_UNSIGNED (TREE_TYPE (exp)), ! word_mode, NULL_RTX, 0, if_false_label, ! NULL_RTX); if (if_true_label) emit_jump (if_true_label); --- 9825,9831 ---- do_compare_rtx_and_jump (operand_subword_force (op0, i, mode), operand_subword_force (op1, i, mode), EQ, TREE_UNSIGNED (TREE_TYPE (exp)), ! word_mode, NULL_RTX, if_false_label, NULL_RTX); if (if_true_label) emit_jump (if_true_label); *************** do_jump_by_parts_equality_rtx (op0, if_f *** 9955,9961 **** if (part != 0) { do_compare_rtx_and_jump (part, const0_rtx, EQ, 1, word_mode, ! NULL_RTX, 0, if_false_label, if_true_label); return; } --- 9862,9868 ---- if (part != 0) { do_compare_rtx_and_jump (part, const0_rtx, EQ, 1, word_mode, ! NULL_RTX, if_false_label, if_true_label); return; } *************** do_jump_by_parts_equality_rtx (op0, if_f *** 9966,9972 **** for (i = 0; i < nwords; i++) do_compare_rtx_and_jump (operand_subword_force (op0, i, GET_MODE (op0)), ! const0_rtx, EQ, 1, word_mode, NULL_RTX, 0, if_false_label, NULL_RTX); if (if_true_label) --- 9873,9879 ---- for (i = 0; i < nwords; i++) do_compare_rtx_and_jump (operand_subword_force (op0, i, GET_MODE (op0)), ! const0_rtx, EQ, 1, word_mode, NULL_RTX, if_false_label, NULL_RTX); if (if_true_label) *************** do_jump_by_parts_equality_rtx (op0, if_f *** 9985,10011 **** things pushed on the stack that aren't yet used. If MODE is BLKmode, SIZE is an RTX giving the size of the objects being ! compared. ! ! If ALIGN is non-zero, it is the alignment of this type; if zero, the ! size of MODE should be used. */ rtx ! compare_from_rtx (op0, op1, code, unsignedp, mode, size, align) ! register rtx op0, op1; enum rtx_code code; int unsignedp; enum machine_mode mode; rtx size; - unsigned int align; { rtx tem; /* If one operand is constant, make it the second one. Only do this if the other operand is not constant as well. */ ! if ((CONSTANT_P (op0) && ! CONSTANT_P (op1)) ! || (GET_CODE (op0) == CONST_INT && GET_CODE (op1) != CONST_INT)) { tem = op0; op0 = op1; --- 9892,9913 ---- things pushed on the stack that aren't yet used. If MODE is BLKmode, SIZE is an RTX giving the size of the objects being ! compared. */ rtx ! compare_from_rtx (op0, op1, code, unsignedp, mode, size) ! rtx op0, op1; enum rtx_code code; int unsignedp; enum machine_mode mode; rtx size; { rtx tem; /* If one operand is constant, make it the second one. Only do this if the other operand is not constant as well. */ ! if (swap_commutative_operands_p (op0, op1)) { tem = op0; op0 = op1; *************** compare_from_rtx (op0, op1, code, unsign *** 10047,10053 **** } #endif ! emit_cmp_insn (op0, op1, code, size, mode, unsignedp, align); return gen_rtx_fmt_ee (code, VOIDmode, cc0_rtx, const0_rtx); } --- 9949,9955 ---- } #endif ! emit_cmp_insn (op0, op1, code, size, mode, unsignedp); return gen_rtx_fmt_ee (code, VOIDmode, cc0_rtx, const0_rtx); } *************** compare_from_rtx (op0, op1, code, unsign *** 10056,10075 **** The decision as to signed or unsigned comparison must be made by the caller. If MODE is BLKmode, SIZE is an RTX giving the size of the objects being ! compared. ! ! If ALIGN is non-zero, it is the alignment of this type; if zero, the ! size of MODE should be used. */ void ! do_compare_rtx_and_jump (op0, op1, code, unsignedp, mode, size, align, if_false_label, if_true_label) ! register rtx op0, op1; enum rtx_code code; int unsignedp; enum machine_mode mode; rtx size; - unsigned int align; rtx if_false_label, if_true_label; { rtx tem; --- 9958,9973 ---- The decision as to signed or unsigned comparison must be made by the caller. If MODE is BLKmode, SIZE is an RTX giving the size of the objects being ! compared. */ void ! do_compare_rtx_and_jump (op0, op1, code, unsignedp, mode, size, if_false_label, if_true_label) ! rtx op0, op1; enum rtx_code code; int unsignedp; enum machine_mode mode; rtx size; rtx if_false_label, if_true_label; { rtx tem; *************** do_compare_rtx_and_jump (op0, op1, code, *** 10087,10094 **** /* If one operand is constant, make it the second one. Only do this if the other operand is not constant as well. */ ! if ((CONSTANT_P (op0) && ! CONSTANT_P (op1)) ! || (GET_CODE (op0) == CONST_INT && GET_CODE (op1) != CONST_INT)) { tem = op0; op0 = op1; --- 9985,9991 ---- /* If one operand is constant, make it the second one. Only do this if the other operand is not constant as well. */ ! if (swap_commutative_operands_p (op0, op1)) { tem = op0; op0 = op1; *************** do_compare_rtx_and_jump (op0, op1, code, *** 10148,10154 **** if_true_label = gen_label_rtx (); } ! emit_cmp_and_jump_insns (op0, op1, code, size, mode, unsignedp, align, if_true_label); if (if_false_label) --- 10045,10051 ---- if_true_label = gen_label_rtx (); } ! emit_cmp_and_jump_insns (op0, op1, code, size, mode, unsignedp, if_true_label); if (if_false_label) *************** do_compare_rtx_and_jump (op0, op1, code, *** 10170,10192 **** static void do_compare_and_jump (exp, signed_code, unsigned_code, if_false_label, if_true_label) ! register tree exp; enum rtx_code signed_code, unsigned_code; rtx if_false_label, if_true_label; { ! unsigned int align0, align1; ! register rtx op0, op1; ! register tree type; ! register enum machine_mode mode; int unsignedp; enum rtx_code code; /* Don't crash if the comparison was erroneous. */ ! op0 = expand_expr_unaligned (TREE_OPERAND (exp, 0), &align0); if (TREE_CODE (TREE_OPERAND (exp, 0)) == ERROR_MARK) return; ! op1 = expand_expr_unaligned (TREE_OPERAND (exp, 1), &align1); if (TREE_CODE (TREE_OPERAND (exp, 1)) == ERROR_MARK) return; --- 10067,10088 ---- static void do_compare_and_jump (exp, signed_code, unsigned_code, if_false_label, if_true_label) ! tree exp; enum rtx_code signed_code, unsigned_code; rtx if_false_label, if_true_label; { ! rtx op0, op1; ! tree type; ! enum machine_mode mode; int unsignedp; enum rtx_code code; /* Don't crash if the comparison was erroneous. */ ! op0 = expand_expr (TREE_OPERAND (exp, 0), NULL_RTX, VOIDmode, 0); if (TREE_CODE (TREE_OPERAND (exp, 0)) == ERROR_MARK) return; ! op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX, VOIDmode, 0); if (TREE_CODE (TREE_OPERAND (exp, 1)) == ERROR_MARK) return; *************** do_compare_and_jump (exp, signed_code, u *** 10238,10244 **** do_compare_rtx_and_jump (op0, op1, code, unsignedp, mode, ((mode == BLKmode) ? expr_size (TREE_OPERAND (exp, 0)) : NULL_RTX), - MIN (align0, align1), if_false_label, if_true_label); } --- 10134,10139 ---- *************** do_store_flag (exp, target, mode, only_c *** 10452,10458 **** /* Put the AND last so it can combine with more things. */ if (bitnum != TYPE_PRECISION (type) - 1) ! op0 = expand_and (op0, const1_rtx, subtarget); return op0; } --- 10347,10353 ---- /* Put the AND last so it can combine with more things. */ if (bitnum != TYPE_PRECISION (type) - 1) ! op0 = expand_and (mode, op0, const1_rtx, subtarget); return op0; } *************** do_store_flag (exp, target, mode, only_c *** 10517,10528 **** emit_move_insn (target, invert ? const0_rtx : const1_rtx); result = compare_from_rtx (op0, op1, code, unsignedp, ! operand_mode, NULL_RTX, 0); if (GET_CODE (result) == CONST_INT) return (((result == const0_rtx && ! invert) || (result != const0_rtx && invert)) ? const0_rtx : const1_rtx); label = gen_label_rtx (); if (bcc_gen_fctn[(int) code] == 0) abort (); --- 10412,10431 ---- emit_move_insn (target, invert ? const0_rtx : const1_rtx); result = compare_from_rtx (op0, op1, code, unsignedp, ! operand_mode, NULL_RTX); if (GET_CODE (result) == CONST_INT) return (((result == const0_rtx && ! invert) || (result != const0_rtx && invert)) ? const0_rtx : const1_rtx); + /* The code of RESULT may not match CODE if compare_from_rtx + decided to swap its operands and reverse the original code. + + We know that compare_from_rtx returns either a CONST_INT or + a new comparison code, so it is safe to just extract the + code from RESULT. */ + code = GET_CODE (result); + label = gen_label_rtx (); if (bcc_gen_fctn[(int) code] == 0) abort (); *************** do_store_flag (exp, target, mode, only_c *** 10534,10544 **** return target; } - /* Generate a tablejump instruction (used for switch statements). */ ! #ifdef HAVE_tablejump ! /* INDEX is the value being switched on, with the lowest value in the table already subtracted. MODE is its expected mode (needed if INDEX is constant). RANGE is the length of the jump table. --- 10437,10548 ---- return target; } ! /* Stubs in case we haven't got a casesi insn. */ ! #ifndef HAVE_casesi ! # define HAVE_casesi 0 ! # define gen_casesi(a, b, c, d, e) (0) ! # define CODE_FOR_casesi CODE_FOR_nothing ! #endif ! /* If the machine does not have a case insn that compares the bounds, ! this means extra overhead for dispatch tables, which raises the ! threshold for using them. */ ! #ifndef CASE_VALUES_THRESHOLD ! #define CASE_VALUES_THRESHOLD (HAVE_casesi ? 4 : 5) ! #endif /* CASE_VALUES_THRESHOLD */ ! ! unsigned int ! case_values_threshold () ! { ! return CASE_VALUES_THRESHOLD; ! } ! ! /* Attempt to generate a casesi instruction. Returns 1 if successful, ! 0 otherwise (i.e. if there is no casesi instruction). */ ! int ! try_casesi (index_type, index_expr, minval, range, ! table_label, default_label) ! tree index_type, index_expr, minval, range; ! rtx table_label ATTRIBUTE_UNUSED; ! rtx default_label; ! { ! enum machine_mode index_mode = SImode; ! int index_bits = GET_MODE_BITSIZE (index_mode); ! rtx op1, op2, index; ! enum machine_mode op_mode; ! ! if (! HAVE_casesi) ! return 0; ! ! /* Convert the index to SImode. */ ! if (GET_MODE_BITSIZE (TYPE_MODE (index_type)) > GET_MODE_BITSIZE (index_mode)) ! { ! enum machine_mode omode = TYPE_MODE (index_type); ! rtx rangertx = expand_expr (range, NULL_RTX, VOIDmode, 0); ! ! /* We must handle the endpoints in the original mode. */ ! index_expr = build (MINUS_EXPR, index_type, ! index_expr, minval); ! minval = integer_zero_node; ! index = expand_expr (index_expr, NULL_RTX, VOIDmode, 0); ! emit_cmp_and_jump_insns (rangertx, index, LTU, NULL_RTX, ! omode, 1, default_label); ! /* Now we can safely truncate. */ ! index = convert_to_mode (index_mode, index, 0); ! } ! else ! { ! if (TYPE_MODE (index_type) != index_mode) ! { ! index_expr = convert (type_for_size (index_bits, 0), ! index_expr); ! index_type = TREE_TYPE (index_expr); ! } ! ! index = expand_expr (index_expr, NULL_RTX, VOIDmode, 0); ! } ! emit_queue (); ! index = protect_from_queue (index, 0); ! do_pending_stack_adjust (); ! ! op_mode = insn_data[(int) CODE_FOR_casesi].operand[0].mode; ! if (! (*insn_data[(int) CODE_FOR_casesi].operand[0].predicate) ! (index, op_mode)) ! index = copy_to_mode_reg (op_mode, index); ! ! op1 = expand_expr (minval, NULL_RTX, VOIDmode, 0); ! ! op_mode = insn_data[(int) CODE_FOR_casesi].operand[1].mode; ! op1 = convert_modes (op_mode, TYPE_MODE (TREE_TYPE (minval)), ! op1, TREE_UNSIGNED (TREE_TYPE (minval))); ! if (! (*insn_data[(int) CODE_FOR_casesi].operand[1].predicate) ! (op1, op_mode)) ! op1 = copy_to_mode_reg (op_mode, op1); ! ! op2 = expand_expr (range, NULL_RTX, VOIDmode, 0); ! ! op_mode = insn_data[(int) CODE_FOR_casesi].operand[2].mode; ! op2 = convert_modes (op_mode, TYPE_MODE (TREE_TYPE (range)), ! op2, TREE_UNSIGNED (TREE_TYPE (range))); ! if (! (*insn_data[(int) CODE_FOR_casesi].operand[2].predicate) ! (op2, op_mode)) ! op2 = copy_to_mode_reg (op_mode, op2); ! ! emit_jump_insn (gen_casesi (index, op1, op2, ! table_label, default_label)); ! return 1; ! } ! ! /* Attempt to generate a tablejump instruction; same concept. */ ! #ifndef HAVE_tablejump ! #define HAVE_tablejump 0 ! #define gen_tablejump(x, y) (0) ! #endif ! ! /* Subroutine of the next function. ! ! INDEX is the value being switched on, with the lowest value in the table already subtracted. MODE is its expected mode (needed if INDEX is constant). RANGE is the length of the jump table. *************** do_store_flag (exp, target, mode, only_c *** 10547,10558 **** DEFAULT_LABEL is a CODE_LABEL rtx to jump to if the index value is out of range. */ ! void do_tablejump (index, mode, range, table_label, default_label) rtx index, range, table_label, default_label; enum machine_mode mode; { ! register rtx temp, vector; /* Do an unsigned comparison (in the proper mode) between the index expression and the value which represents the length of the range. --- 10551,10562 ---- DEFAULT_LABEL is a CODE_LABEL rtx to jump to if the index value is out of range. */ ! static void do_tablejump (index, mode, range, table_label, default_label) rtx index, range, table_label, default_label; enum machine_mode mode; { ! rtx temp, vector; /* Do an unsigned comparison (in the proper mode) between the index expression and the value which represents the length of the range. *************** do_tablejump (index, mode, range, table_ *** 10563,10569 **** the maximum value of the range. */ emit_cmp_and_jump_insns (index, range, GTU, NULL_RTX, mode, 1, ! 0, default_label); /* If index is in range, it must fit in Pmode. Convert to Pmode so we can index with it. */ --- 10567,10573 ---- the maximum value of the range. */ emit_cmp_and_jump_insns (index, range, GTU, NULL_RTX, mode, 1, ! default_label); /* If index is in range, it must fit in Pmode. Convert to Pmode so we can index with it. */ *************** do_tablejump (index, mode, range, table_ *** 10609,10612 **** emit_barrier (); } ! #endif /* HAVE_tablejump */ --- 10613,10643 ---- emit_barrier (); } ! int ! try_tablejump (index_type, index_expr, minval, range, ! table_label, default_label) ! tree index_type, index_expr, minval, range; ! rtx table_label, default_label; ! { ! rtx index; ! ! if (! HAVE_tablejump) ! return 0; ! ! index_expr = fold (build (MINUS_EXPR, index_type, ! convert (index_type, index_expr), ! convert (index_type, minval))); ! index = expand_expr (index_expr, NULL_RTX, VOIDmode, 0); ! emit_queue (); ! index = protect_from_queue (index, 0); ! do_pending_stack_adjust (); ! ! do_tablejump (index, TYPE_MODE (index_type), ! convert_modes (TYPE_MODE (index_type), ! TYPE_MODE (TREE_TYPE (range)), ! expand_expr (range, NULL_RTX, ! VOIDmode, 0), ! TREE_UNSIGNED (TREE_TYPE (range))), ! table_label, default_label); ! return 1; ! } diff -Nrc3pad gcc-3.0.4/gcc/expr.h gcc-3.1/gcc/expr.h *** gcc-3.0.4/gcc/expr.h Sun May 13 07:09:53 2001 --- gcc-3.1/gcc/expr.h Sun Mar 31 09:42:05 2002 *************** *** 2,23 **** Copyright (C) 1987, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* The default branch cost is 1. */ #ifndef BRANCH_COST --- 2,23 ---- Copyright (C) 1987, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* The default branch cost is 1. */ #ifndef BRANCH_COST *************** Boston, MA 02111-1307, USA. */ *** 48,73 **** EXPAND_INITIALIZER is similar but also record any labels on forced_labels. EXPAND_CONST_ADDRESS means it is ok to return a MEM whose address is a constant that is not a legitimate address. ! EXPAND_MEMORY_USE_* are explained below. */ ! enum expand_modifier {EXPAND_NORMAL, EXPAND_SUM, ! EXPAND_CONST_ADDRESS, EXPAND_INITIALIZER, ! EXPAND_MEMORY_USE_WO, EXPAND_MEMORY_USE_RW, ! EXPAND_MEMORY_USE_BAD, EXPAND_MEMORY_USE_DONT}; ! ! /* Argument for chkr_* functions. ! MEMORY_USE_RO: the pointer reads memory. ! MEMORY_USE_WO: the pointer writes to memory. ! MEMORY_USE_RW: the pointer modifies memory (ie it reads and writes). An ! example is (*ptr)++ ! MEMORY_USE_BAD: use this if you don't know the behavior of the pointer, or ! if you know there are no pointers. Using an INDIRECT_REF ! with MEMORY_USE_BAD will abort. ! MEMORY_USE_TW: just test for writing, without update. Special. ! MEMORY_USE_DONT: the memory is neither read nor written. This is used by ! '->' and '.'. */ ! enum memory_use_mode {MEMORY_USE_BAD = 0, MEMORY_USE_RO = 1, ! MEMORY_USE_WO = 2, MEMORY_USE_RW = 3, ! MEMORY_USE_TW = 6, MEMORY_USE_DONT = 99}; /* Prevent the compiler from deferring stack pops. See inhibit_defer_pop for more information. */ --- 48,56 ---- EXPAND_INITIALIZER is similar but also record any labels on forced_labels. EXPAND_CONST_ADDRESS means it is ok to return a MEM whose address is a constant that is not a legitimate address. ! EXPAND_WRITE means we are only going to write to the resulting rtx. */ ! enum expand_modifier {EXPAND_NORMAL, EXPAND_SUM, EXPAND_CONST_ADDRESS, ! EXPAND_INITIALIZER, EXPAND_WRITE}; /* Prevent the compiler from deferring stack pops. See inhibit_defer_pop for more information. */ *************** struct args_size *** 92,126 **** /* Add the value of the tree INC to the `struct args_size' TO. */ ! #define ADD_PARM_SIZE(TO, INC) \ ! { tree inc = (INC); \ ! if (host_integerp (inc, 0)) \ ! (TO).constant += tree_low_cst (inc, 0); \ ! else if ((TO).var == 0) \ ! (TO).var = inc; \ ! else \ ! (TO).var = size_binop (PLUS_EXPR, (TO).var, inc); } ! #define SUB_PARM_SIZE(TO, DEC) \ ! { tree dec = (DEC); \ ! if (host_integerp (dec, 0)) \ ! (TO).constant -= tree_low_cst (dec, 0); \ ! else if ((TO).var == 0) \ ! (TO).var = size_binop (MINUS_EXPR, ssize_int (0), dec); \ ! else \ ! (TO).var = size_binop (MINUS_EXPR, (TO).var, dec); } /* Convert the implicit sum in a `struct args_size' into a tree of type ssizetype. */ #define ARGS_SIZE_TREE(SIZE) \ ((SIZE).var == 0 ? ssize_int ((SIZE).constant) \ ! : size_binop (PLUS_EXPR, (SIZE).var, ssize_int ((SIZE).constant))) /* Convert the implicit sum in a `struct args_size' into an rtx. */ #define ARGS_SIZE_RTX(SIZE) \ ((SIZE).var == 0 ? GEN_INT ((SIZE).constant) \ ! : expand_expr (ARGS_SIZE_TREE (SIZE), NULL_RTX, VOIDmode, \ ! EXPAND_MEMORY_USE_BAD)) /* Supply a default definition for FUNCTION_ARG_PADDING: usually pad upward, but pad short args downward on --- 75,116 ---- /* Add the value of the tree INC to the `struct args_size' TO. */ ! #define ADD_PARM_SIZE(TO, INC) \ ! do { \ ! tree inc = (INC); \ ! if (host_integerp (inc, 0)) \ ! (TO).constant += tree_low_cst (inc, 0); \ ! else if ((TO).var == 0) \ ! (TO).var = convert (ssizetype, inc); \ ! else \ ! (TO).var = size_binop (PLUS_EXPR, (TO).var, \ ! convert (ssizetype, inc)); \ ! } while (0) ! #define SUB_PARM_SIZE(TO, DEC) \ ! do { \ ! tree dec = (DEC); \ ! if (host_integerp (dec, 0)) \ ! (TO).constant -= tree_low_cst (dec, 0); \ ! else if ((TO).var == 0) \ ! (TO).var = size_binop (MINUS_EXPR, ssize_int (0), \ ! convert (ssizetype, dec)); \ ! else \ ! (TO).var = size_binop (MINUS_EXPR, (TO).var, \ ! convert (ssizetype, dec)); \ ! } while (0) /* Convert the implicit sum in a `struct args_size' into a tree of type ssizetype. */ #define ARGS_SIZE_TREE(SIZE) \ ((SIZE).var == 0 ? ssize_int ((SIZE).constant) \ ! : size_binop (PLUS_EXPR, convert (ssizetype, (SIZE).var), \ ! ssize_int ((SIZE).constant))) /* Convert the implicit sum in a `struct args_size' into an rtx. */ #define ARGS_SIZE_RTX(SIZE) \ ((SIZE).var == 0 ? GEN_INT ((SIZE).constant) \ ! : expand_expr (ARGS_SIZE_TREE (SIZE), NULL_RTX, VOIDmode, 0)) /* Supply a default definition for FUNCTION_ARG_PADDING: usually pad upward, but pad short args downward on *************** enum direction {none, upward, downward}; *** 253,468 **** #define STACK_CHECK_MAX_VAR_SIZE (STACK_CHECK_MAX_FRAME_SIZE / 100) #endif ! /* Optabs are tables saying how to generate insn bodies ! for various machine modes and numbers of operands. ! Each optab applies to one operation. ! For example, add_optab applies to addition. ! ! The insn_code slot is the enum insn_code that says how to ! generate an insn for this operation on a particular machine mode. ! It is CODE_FOR_nothing if there is no such insn on the target machine. ! ! The `lib_call' slot is the name of the library function that ! can be used to perform the operation. ! ! A few optabs, such as move_optab and cmp_optab, are used ! by special code. */ ! ! typedef struct optab ! { ! enum rtx_code code; ! struct { ! enum insn_code insn_code; ! rtx libfunc; ! } handlers [NUM_MACHINE_MODES]; ! } * optab; ! ! /* Given an enum insn_code, access the function to construct ! the body of that kind of insn. */ ! #ifdef FUNCTION_CONVERSION_BUG ! /* Some compilers fail to convert a function properly to a ! pointer-to-function when used as an argument. ! So produce the pointer-to-function directly. ! Luckily, these compilers seem to work properly when you ! call the pointer-to-function. */ ! #define GEN_FCN(CODE) (insn_data[(int) (CODE)].genfun) ! #else ! #define GEN_FCN(CODE) (*insn_data[(int) (CODE)].genfun) ! #endif ! ! /* Enumeration of valid indexes into optab_table. */ ! enum optab_index ! { ! OTI_add, ! OTI_addv, ! OTI_sub, ! OTI_subv, ! ! /* Signed and fp multiply */ ! OTI_smul, ! OTI_smulv, ! /* Signed multiply, return high word */ ! OTI_smul_highpart, ! OTI_umul_highpart, ! /* Signed multiply with result one machine mode wider than args */ ! OTI_smul_widen, ! OTI_umul_widen, ! ! /* Signed divide */ ! OTI_sdiv, ! OTI_sdivv, ! /* Signed divide-and-remainder in one */ ! OTI_sdivmod, ! OTI_udiv, ! OTI_udivmod, ! /* Signed remainder */ ! OTI_smod, ! OTI_umod, ! /* Optab for floating divide. */ ! OTI_flodiv, ! /* Convert float to integer in float fmt */ ! OTI_ftrunc, ! ! /* Logical and */ ! OTI_and, ! /* Logical or */ ! OTI_ior, ! /* Logical xor */ ! OTI_xor, ! ! /* Arithmetic shift left */ ! OTI_ashl, ! /* Logical shift right */ ! OTI_lshr, ! /* Arithmetic shift right */ ! OTI_ashr, ! /* Rotate left */ ! OTI_rotl, ! /* Rotate right */ ! OTI_rotr, ! /* Signed and floating-point minimum value */ ! OTI_smin, ! /* Signed and floating-point maximum value */ ! OTI_smax, ! /* Unsigned minimum value */ ! OTI_umin, ! /* Unsigned maximum value */ ! OTI_umax, ! ! /* Move instruction. */ ! OTI_mov, ! /* Move, preserving high part of register. */ ! OTI_movstrict, ! ! /* Unary operations */ ! /* Negation */ ! OTI_neg, ! OTI_negv, ! /* Abs value */ ! OTI_abs, ! OTI_absv, ! /* Bitwise not */ ! OTI_one_cmpl, ! /* Find first bit set */ ! OTI_ffs, ! /* Square root */ ! OTI_sqrt, ! /* Sine */ ! OTI_sin, ! /* Cosine */ ! OTI_cos, ! ! /* Compare insn; two operands. */ ! OTI_cmp, ! /* Used only for libcalls for unsigned comparisons. */ ! OTI_ucmp, ! /* tst insn; compare one operand against 0 */ ! OTI_tst, ! ! /* String length */ ! OTI_strlen, ! ! /* Combined compare & jump/store flags/move operations. */ ! OTI_cbranch, ! OTI_cmov, ! OTI_cstore, ! ! OTI_MAX ! }; ! ! extern optab optab_table[OTI_MAX]; ! ! #define add_optab (optab_table[OTI_add]) ! #define sub_optab (optab_table[OTI_sub]) ! #define smul_optab (optab_table[OTI_smul]) ! #define addv_optab (optab_table[OTI_addv]) ! #define subv_optab (optab_table[OTI_subv]) ! #define smul_highpart_optab (optab_table[OTI_smul_highpart]) ! #define umul_highpart_optab (optab_table[OTI_umul_highpart]) ! #define smul_widen_optab (optab_table[OTI_smul_widen]) ! #define umul_widen_optab (optab_table[OTI_umul_widen]) ! #define sdiv_optab (optab_table[OTI_sdiv]) ! #define smulv_optab (optab_table[OTI_smulv]) ! #define sdivv_optab (optab_table[OTI_sdivv]) ! #define sdivmod_optab (optab_table[OTI_sdivmod]) ! #define udiv_optab (optab_table[OTI_udiv]) ! #define udivmod_optab (optab_table[OTI_udivmod]) ! #define smod_optab (optab_table[OTI_smod]) ! #define umod_optab (optab_table[OTI_umod]) ! #define flodiv_optab (optab_table[OTI_flodiv]) ! #define ftrunc_optab (optab_table[OTI_ftrunc]) ! #define and_optab (optab_table[OTI_and]) ! #define ior_optab (optab_table[OTI_ior]) ! #define xor_optab (optab_table[OTI_xor]) ! #define ashl_optab (optab_table[OTI_ashl]) ! #define lshr_optab (optab_table[OTI_lshr]) ! #define ashr_optab (optab_table[OTI_ashr]) ! #define rotl_optab (optab_table[OTI_rotl]) ! #define rotr_optab (optab_table[OTI_rotr]) ! #define smin_optab (optab_table[OTI_smin]) ! #define smax_optab (optab_table[OTI_smax]) ! #define umin_optab (optab_table[OTI_umin]) ! #define umax_optab (optab_table[OTI_umax]) ! ! #define mov_optab (optab_table[OTI_mov]) ! #define movstrict_optab (optab_table[OTI_movstrict]) ! ! #define neg_optab (optab_table[OTI_neg]) ! #define negv_optab (optab_table[OTI_negv]) ! #define abs_optab (optab_table[OTI_abs]) ! #define absv_optab (optab_table[OTI_absv]) ! #define one_cmpl_optab (optab_table[OTI_one_cmpl]) ! #define ffs_optab (optab_table[OTI_ffs]) ! #define sqrt_optab (optab_table[OTI_sqrt]) ! #define sin_optab (optab_table[OTI_sin]) ! #define cos_optab (optab_table[OTI_cos]) ! ! #define cmp_optab (optab_table[OTI_cmp]) ! #define ucmp_optab (optab_table[OTI_ucmp]) ! #define tst_optab (optab_table[OTI_tst]) ! ! #define strlen_optab (optab_table[OTI_strlen]) ! ! #define cbranch_optab (optab_table[OTI_cbranch]) ! #define cmov_optab (optab_table[OTI_cmov]) ! #define cstore_optab (optab_table[OTI_cstore]) ! ! /* Tables of patterns for extending one integer mode to another. */ ! extern enum insn_code extendtab[MAX_MACHINE_MODE][MAX_MACHINE_MODE][2]; ! ! /* Tables of patterns for converting between fixed and floating point. */ ! extern enum insn_code fixtab[NUM_MACHINE_MODES][NUM_MACHINE_MODES][2]; ! extern enum insn_code fixtrunctab[NUM_MACHINE_MODES][NUM_MACHINE_MODES][2]; ! extern enum insn_code floattab[NUM_MACHINE_MODES][NUM_MACHINE_MODES][2]; ! ! /* Contains the optab used for each rtx code. */ ! extern optab code_to_optab[NUM_RTX_CODE + 1]; ! /* Passed to expand_binop and expand_unop to say which options to try to use ! if the requested operation can't be open-coded on the requisite mode. ! Either OPTAB_LIB or OPTAB_LIB_WIDEN says try using a library call. ! Either OPTAB_WIDEN or OPTAB_LIB_WIDEN says try using a wider mode. ! OPTAB_MUST_WIDEN says try widening and don't try anything else. */ enum optab_methods { --- 243,257 ---- #define STACK_CHECK_MAX_VAR_SIZE (STACK_CHECK_MAX_FRAME_SIZE / 100) #endif ! /* Functions from optabs.c, commonly used, and without need for the optabs ! tables: */ ! /* Passed to expand_simple_binop and expand_binop to say which options ! to try to use if the requested operation can't be open-coded on the ! requisite mode. Either OPTAB_LIB or OPTAB_LIB_WIDEN says try using ! a library call. Either OPTAB_WIDEN or OPTAB_LIB_WIDEN says try ! using a wider mode. OPTAB_MUST_WIDEN says try widening and don't ! try anything else. */ enum optab_methods { *************** enum optab_methods *** 473,833 **** OPTAB_MUST_WIDEN }; ! /* Enumeration of indexes into libfunc_table. */ ! enum libfunc_index ! { ! LTI_extendsfdf2, ! LTI_extendsfxf2, ! LTI_extendsftf2, ! LTI_extenddfxf2, ! LTI_extenddftf2, ! ! LTI_truncdfsf2, ! LTI_truncxfsf2, ! LTI_trunctfsf2, ! LTI_truncxfdf2, ! LTI_trunctfdf2, ! ! LTI_memcpy, ! LTI_memmove, ! LTI_bcopy, ! LTI_memcmp, ! LTI_bcmp, ! LTI_memset, ! LTI_bzero, ! ! LTI_unwind_resume, ! LTI_eh_personality, ! LTI_setjmp, ! LTI_longjmp, ! LTI_unwind_sjlj_register, ! LTI_unwind_sjlj_unregister, ! ! LTI_eqhf2, ! LTI_nehf2, ! LTI_gthf2, ! LTI_gehf2, ! LTI_lthf2, ! LTI_lehf2, ! LTI_unordhf2, ! ! LTI_eqsf2, ! LTI_nesf2, ! LTI_gtsf2, ! LTI_gesf2, ! LTI_ltsf2, ! LTI_lesf2, ! LTI_unordsf2, ! ! LTI_eqdf2, ! LTI_nedf2, ! LTI_gtdf2, ! LTI_gedf2, ! LTI_ltdf2, ! LTI_ledf2, ! LTI_unorddf2, ! ! LTI_eqxf2, ! LTI_nexf2, ! LTI_gtxf2, ! LTI_gexf2, ! LTI_ltxf2, ! LTI_lexf2, ! LTI_unordxf2, ! ! LTI_eqtf2, ! LTI_netf2, ! LTI_gttf2, ! LTI_getf2, ! LTI_lttf2, ! LTI_letf2, ! LTI_unordtf2, ! ! LTI_floatsisf, ! LTI_floatdisf, ! LTI_floattisf, ! ! LTI_floatsidf, ! LTI_floatdidf, ! LTI_floattidf, ! ! LTI_floatsixf, ! LTI_floatdixf, ! LTI_floattixf, ! ! LTI_floatsitf, ! LTI_floatditf, ! LTI_floattitf, ! ! LTI_fixsfsi, ! LTI_fixsfdi, ! LTI_fixsfti, ! ! LTI_fixdfsi, ! LTI_fixdfdi, ! LTI_fixdfti, ! ! LTI_fixxfsi, ! LTI_fixxfdi, ! LTI_fixxfti, ! ! LTI_fixtfsi, ! LTI_fixtfdi, ! LTI_fixtfti, ! ! LTI_fixunssfsi, ! LTI_fixunssfdi, ! LTI_fixunssfti, ! ! LTI_fixunsdfsi, ! LTI_fixunsdfdi, ! LTI_fixunsdfti, ! ! LTI_fixunsxfsi, ! LTI_fixunsxfdi, ! LTI_fixunsxfti, ! ! LTI_fixunstfsi, ! LTI_fixunstfdi, ! LTI_fixunstfti, ! ! LTI_chkr_check_addr, ! LTI_chkr_set_right, ! LTI_chkr_copy_bitmap, ! LTI_chkr_check_exec, ! LTI_chkr_check_str, ! ! LTI_profile_function_entry, ! LTI_profile_function_exit, ! ! LTI_MAX ! }; ! ! /* SYMBOL_REF rtx's for the library functions that are called ! implicitly and not via optabs. */ ! extern rtx libfunc_table[LTI_MAX]; ! ! /* Accessor macros for libfunc_table. */ ! #define extendsfdf2_libfunc (libfunc_table[LTI_extendsfdf2]) ! #define extendsfxf2_libfunc (libfunc_table[LTI_extendsfxf2]) ! #define extendsftf2_libfunc (libfunc_table[LTI_extendsftf2]) ! #define extenddfxf2_libfunc (libfunc_table[LTI_extenddfxf2]) ! #define extenddftf2_libfunc (libfunc_table[LTI_extenddftf2]) ! ! #define truncdfsf2_libfunc (libfunc_table[LTI_truncdfsf2]) ! #define truncxfsf2_libfunc (libfunc_table[LTI_truncxfsf2]) ! #define trunctfsf2_libfunc (libfunc_table[LTI_trunctfsf2]) ! #define truncxfdf2_libfunc (libfunc_table[LTI_truncxfdf2]) ! #define trunctfdf2_libfunc (libfunc_table[LTI_trunctfdf2]) ! ! #define memcpy_libfunc (libfunc_table[LTI_memcpy]) ! #define memmove_libfunc (libfunc_table[LTI_memmove]) ! #define bcopy_libfunc (libfunc_table[LTI_bcopy]) ! #define memcmp_libfunc (libfunc_table[LTI_memcmp]) ! #define bcmp_libfunc (libfunc_table[LTI_bcmp]) ! #define memset_libfunc (libfunc_table[LTI_memset]) ! #define bzero_libfunc (libfunc_table[LTI_bzero]) ! ! #define unwind_resume_libfunc (libfunc_table[LTI_unwind_resume]) ! #define eh_personality_libfunc (libfunc_table[LTI_eh_personality]) ! #define setjmp_libfunc (libfunc_table[LTI_setjmp]) ! #define longjmp_libfunc (libfunc_table[LTI_longjmp]) ! #define unwind_sjlj_register_libfunc (libfunc_table[LTI_unwind_sjlj_register]) ! #define unwind_sjlj_unregister_libfunc \ ! (libfunc_table[LTI_unwind_sjlj_unregister]) ! ! #define eqhf2_libfunc (libfunc_table[LTI_eqhf2]) ! #define nehf2_libfunc (libfunc_table[LTI_nehf2]) ! #define gthf2_libfunc (libfunc_table[LTI_gthf2]) ! #define gehf2_libfunc (libfunc_table[LTI_gehf2]) ! #define lthf2_libfunc (libfunc_table[LTI_lthf2]) ! #define lehf2_libfunc (libfunc_table[LTI_lehf2]) ! #define unordhf2_libfunc (libfunc_table[LTI_unordhf2]) ! ! #define eqsf2_libfunc (libfunc_table[LTI_eqsf2]) ! #define nesf2_libfunc (libfunc_table[LTI_nesf2]) ! #define gtsf2_libfunc (libfunc_table[LTI_gtsf2]) ! #define gesf2_libfunc (libfunc_table[LTI_gesf2]) ! #define ltsf2_libfunc (libfunc_table[LTI_ltsf2]) ! #define lesf2_libfunc (libfunc_table[LTI_lesf2]) ! #define unordsf2_libfunc (libfunc_table[LTI_unordsf2]) ! ! #define eqdf2_libfunc (libfunc_table[LTI_eqdf2]) ! #define nedf2_libfunc (libfunc_table[LTI_nedf2]) ! #define gtdf2_libfunc (libfunc_table[LTI_gtdf2]) ! #define gedf2_libfunc (libfunc_table[LTI_gedf2]) ! #define ltdf2_libfunc (libfunc_table[LTI_ltdf2]) ! #define ledf2_libfunc (libfunc_table[LTI_ledf2]) ! #define unorddf2_libfunc (libfunc_table[LTI_unorddf2]) ! ! #define eqxf2_libfunc (libfunc_table[LTI_eqxf2]) ! #define nexf2_libfunc (libfunc_table[LTI_nexf2]) ! #define gtxf2_libfunc (libfunc_table[LTI_gtxf2]) ! #define gexf2_libfunc (libfunc_table[LTI_gexf2]) ! #define ltxf2_libfunc (libfunc_table[LTI_ltxf2]) ! #define lexf2_libfunc (libfunc_table[LTI_lexf2]) ! #define unordxf2_libfunc (libfunc_table[LTI_unordxf2]) ! ! #define eqtf2_libfunc (libfunc_table[LTI_eqtf2]) ! #define netf2_libfunc (libfunc_table[LTI_netf2]) ! #define gttf2_libfunc (libfunc_table[LTI_gttf2]) ! #define getf2_libfunc (libfunc_table[LTI_getf2]) ! #define lttf2_libfunc (libfunc_table[LTI_lttf2]) ! #define letf2_libfunc (libfunc_table[LTI_letf2]) ! #define unordtf2_libfunc (libfunc_table[LTI_unordtf2]) ! ! #define floatsisf_libfunc (libfunc_table[LTI_floatsisf]) ! #define floatdisf_libfunc (libfunc_table[LTI_floatdisf]) ! #define floattisf_libfunc (libfunc_table[LTI_floattisf]) ! ! #define floatsidf_libfunc (libfunc_table[LTI_floatsidf]) ! #define floatdidf_libfunc (libfunc_table[LTI_floatdidf]) ! #define floattidf_libfunc (libfunc_table[LTI_floattidf]) ! ! #define floatsixf_libfunc (libfunc_table[LTI_floatsixf]) ! #define floatdixf_libfunc (libfunc_table[LTI_floatdixf]) ! #define floattixf_libfunc (libfunc_table[LTI_floattixf]) ! ! #define floatsitf_libfunc (libfunc_table[LTI_floatsitf]) ! #define floatditf_libfunc (libfunc_table[LTI_floatditf]) ! #define floattitf_libfunc (libfunc_table[LTI_floattitf]) ! ! #define fixsfsi_libfunc (libfunc_table[LTI_fixsfsi]) ! #define fixsfdi_libfunc (libfunc_table[LTI_fixsfdi]) ! #define fixsfti_libfunc (libfunc_table[LTI_fixsfti]) ! ! #define fixdfsi_libfunc (libfunc_table[LTI_fixdfsi]) ! #define fixdfdi_libfunc (libfunc_table[LTI_fixdfdi]) ! #define fixdfti_libfunc (libfunc_table[LTI_fixdfti]) ! ! #define fixxfsi_libfunc (libfunc_table[LTI_fixxfsi]) ! #define fixxfdi_libfunc (libfunc_table[LTI_fixxfdi]) ! #define fixxfti_libfunc (libfunc_table[LTI_fixxfti]) ! ! #define fixtfsi_libfunc (libfunc_table[LTI_fixtfsi]) ! #define fixtfdi_libfunc (libfunc_table[LTI_fixtfdi]) ! #define fixtfti_libfunc (libfunc_table[LTI_fixtfti]) ! ! #define fixunssfsi_libfunc (libfunc_table[LTI_fixunssfsi]) ! #define fixunssfdi_libfunc (libfunc_table[LTI_fixunssfdi]) ! #define fixunssfti_libfunc (libfunc_table[LTI_fixunssfti]) ! ! #define fixunsdfsi_libfunc (libfunc_table[LTI_fixunsdfsi]) ! #define fixunsdfdi_libfunc (libfunc_table[LTI_fixunsdfdi]) ! #define fixunsdfti_libfunc (libfunc_table[LTI_fixunsdfti]) ! ! #define fixunsxfsi_libfunc (libfunc_table[LTI_fixunsxfsi]) ! #define fixunsxfdi_libfunc (libfunc_table[LTI_fixunsxfdi]) ! #define fixunsxfti_libfunc (libfunc_table[LTI_fixunsxfti]) ! ! #define fixunstfsi_libfunc (libfunc_table[LTI_fixunstfsi]) ! #define fixunstfdi_libfunc (libfunc_table[LTI_fixunstfdi]) ! #define fixunstfti_libfunc (libfunc_table[LTI_fixunstfti]) ! ! #define chkr_check_addr_libfunc (libfunc_table[LTI_chkr_check_addr]) ! #define chkr_set_right_libfunc (libfunc_table[LTI_chkr_set_right]) ! #define chkr_copy_bitmap_libfunc (libfunc_table[LTI_chkr_copy_bitmap]) ! #define chkr_check_exec_libfunc (libfunc_table[LTI_chkr_check_exec]) ! #define chkr_check_str_libfunc (libfunc_table[LTI_chkr_check_str]) ! ! #define profile_function_entry_libfunc (libfunc_table[LTI_profile_function_entry]) ! #define profile_function_exit_libfunc (libfunc_table[LTI_profile_function_exit]) ! ! typedef rtx (*rtxfun) PARAMS ((rtx)); ! ! /* Indexed by the rtx-code for a conditional (eg. EQ, LT,...) ! gives the gen_function to make a branch to test that condition. */ ! ! extern rtxfun bcc_gen_fctn[NUM_RTX_CODE]; ! ! /* Indexed by the rtx-code for a conditional (eg. EQ, LT,...) ! gives the insn code to make a store-condition insn ! to test that condition. */ ! ! extern enum insn_code setcc_gen_code[NUM_RTX_CODE]; ! ! #ifdef HAVE_conditional_move ! /* Indexed by the machine mode, gives the insn code to make a conditional ! move insn. */ ! ! extern enum insn_code movcc_gen_code[NUM_MACHINE_MODES]; ! #endif ! ! /* This array records the insn_code of insns to perform block moves. */ ! extern enum insn_code movstr_optab[NUM_MACHINE_MODES]; ! ! /* This array records the insn_code of insns to perform block clears. */ ! extern enum insn_code clrstr_optab[NUM_MACHINE_MODES]; ! ! /* Define functions given in optabs.c. */ ! ! /* Expand a binary operation given optab and rtx operands. */ ! extern rtx expand_binop PARAMS ((enum machine_mode, optab, rtx, rtx, rtx, ! int, enum optab_methods)); ! ! /* Expand a binary operation with both signed and unsigned forms. */ ! extern rtx sign_expand_binop PARAMS ((enum machine_mode, optab, optab, rtx, ! rtx, rtx, int, enum optab_methods)); ! ! /* Generate code to perform an operation on two operands with two results. */ ! extern int expand_twoval_binop PARAMS ((optab, rtx, rtx, rtx, rtx, int)); ! ! /* Expand a unary arithmetic operation given optab rtx operand. */ ! extern rtx expand_unop PARAMS ((enum machine_mode, optab, rtx, rtx, int)); ! ! /* Expand the absolute value operation. */ ! extern rtx expand_abs PARAMS ((enum machine_mode, rtx, rtx, int, int)); ! ! /* Expand the complex absolute value operation. */ ! extern rtx expand_complex_abs PARAMS ((enum machine_mode, rtx, rtx, int)); ! ! /* Generate an instruction with a given INSN_CODE with an output and ! an input. */ ! extern void emit_unop_insn PARAMS ((int, rtx, rtx, enum rtx_code)); ! /* Emit code to perform a series of operations on a multi-word quantity, one ! word at a time. */ ! extern rtx emit_no_conflict_block PARAMS ((rtx, rtx, rtx, rtx, rtx)); ! /* Emit code to make a call to a constant function or a library call. */ extern void emit_libcall_block PARAMS ((rtx, rtx, rtx, rtx)); ! /* Emit one rtl instruction to store zero in specified rtx. */ ! extern void emit_clr_insn PARAMS ((rtx)); ! ! /* Emit one rtl insn to store 1 in specified rtx assuming it contains 0. */ ! extern void emit_0_to_1_insn PARAMS ((rtx)); ! ! /* Emit one rtl insn to compare two rtx's. */ ! extern void emit_cmp_insn PARAMS ((rtx, rtx, enum rtx_code, rtx, ! enum machine_mode, int, unsigned int)); /* Emit a pair of rtl insns to compare two rtx's and to jump to a label if the comparison is true. */ extern void emit_cmp_and_jump_insns PARAMS ((rtx, rtx, enum rtx_code, rtx, ! enum machine_mode, int, ! unsigned int, rtx)); ! ! /* The various uses that a comparison can have; used by can_compare_p: ! jumps, conditional moves, store flag operations. */ ! enum can_compare_purpose ! { ! ccp_jump, ! ccp_cmov, ! ccp_store_flag ! }; ! ! /* Nonzero if a compare of mode MODE can be done straightforwardly ! (without splitting it into pieces). */ ! extern int can_compare_p PARAMS ((enum rtx_code, enum machine_mode, ! enum can_compare_purpose)); ! ! extern void prepare_cmp_insn PARAMS ((rtx *, rtx *, enum rtx_code *, rtx, ! enum machine_mode *, int *, int, ! enum can_compare_purpose)); ! ! extern rtx prepare_operand PARAMS ((int, rtx, int, enum machine_mode, ! enum machine_mode, int)); /* Generate code to indirectly jump to a location given in the rtx LOC. */ extern void emit_indirect_jump PARAMS ((rtx)); --- 262,298 ---- OPTAB_MUST_WIDEN }; ! /* Generate code for a simple binary or unary operation. "Simple" in ! this case means "can be unambiguously described by a (mode, code) ! pair and mapped to a single optab." */ ! extern rtx expand_simple_binop PARAMS ((enum machine_mode, enum rtx_code, rtx, ! rtx, rtx, int, enum optab_methods)); ! extern rtx expand_simple_unop PARAMS ((enum machine_mode, enum rtx_code, ! rtx, rtx, int)); ! /* Report whether the machine description contains an insn which can ! perform the operation described by CODE and MODE. */ ! extern int have_insn_for PARAMS ((enum rtx_code, enum machine_mode)); ! /* Emit code to make a call to a constant function or a library call. */ extern void emit_libcall_block PARAMS ((rtx, rtx, rtx, rtx)); ! /* Create but don't emit one rtl instruction to perform certain operations. ! Modes must match; operands must meet the operation's predicates. ! Likewise for subtraction and for just copying. ! These do not call protect_from_queue; caller must do so. */ ! extern rtx gen_add2_insn PARAMS ((rtx, rtx)); ! extern rtx gen_add3_insn PARAMS ((rtx, rtx, rtx)); ! extern rtx gen_sub2_insn PARAMS ((rtx, rtx)); ! extern rtx gen_sub3_insn PARAMS ((rtx, rtx, rtx)); ! extern rtx gen_move_insn PARAMS ((rtx, rtx)); ! extern int have_add2_insn PARAMS ((rtx, rtx)); ! extern int have_sub2_insn PARAMS ((rtx, rtx)); /* Emit a pair of rtl insns to compare two rtx's and to jump to a label if the comparison is true. */ extern void emit_cmp_and_jump_insns PARAMS ((rtx, rtx, enum rtx_code, rtx, ! enum machine_mode, int, rtx)); /* Generate code to indirectly jump to a location given in the rtx LOC. */ extern void emit_indirect_jump PARAMS ((rtx)); *************** int can_conditionally_move_p PARAMS ((en *** 843,884 **** #endif - /* Create but don't emit one rtl instruction to add one rtx into another. - Modes must match; operands must meet the operation's predicates. - Likewise for subtraction and for just copying. - These do not call protect_from_queue; caller must do so. */ - extern rtx gen_add2_insn PARAMS ((rtx, rtx)); - extern rtx gen_sub2_insn PARAMS ((rtx, rtx)); - extern rtx gen_move_insn PARAMS ((rtx, rtx)); - extern int have_add2_insn PARAMS ((enum machine_mode)); - extern int have_sub2_insn PARAMS ((enum machine_mode)); - - /* Return the INSN_CODE to use for an extend operation. */ - extern enum insn_code can_extend_p PARAMS ((enum machine_mode, - enum machine_mode, int)); - - /* Generate the body of an insn to extend Y (with mode MFROM) - into X (with mode MTO). Do zero-extension if UNSIGNEDP is nonzero. */ - extern rtx gen_extend_insn PARAMS ((rtx, rtx, enum machine_mode, - enum machine_mode, int)); - - /* Initialize the tables that control conversion between fixed and - floating values. */ - extern void init_fixtab PARAMS ((void)); - extern void init_floattab PARAMS ((void)); - - /* Generate code for a FLOAT_EXPR. */ - extern void expand_float PARAMS ((rtx, rtx, int)); - - /* Generate code for a FIX_EXPR. */ - extern void expand_fix PARAMS ((rtx, rtx, int)); - - /* Call this to initialize an optab function entry. */ - extern rtx init_one_libfunc PARAMS ((const char *)); - - /* Call this once to initialize the contents of the optabs - appropriately for the current target machine. */ - extern void init_optabs PARAMS ((void)); /* Functions from expmed.c: */ --- 308,313 ---- *************** extern void init_optabs PARAMS ((void)); *** 887,893 **** extern rtx negate_rtx PARAMS ((enum machine_mode, rtx)); /* Expand a logical AND operation. */ ! extern rtx expand_and PARAMS ((rtx, rtx, rtx)); /* Emit a store-flag operation. */ extern rtx emit_store_flag PARAMS ((rtx, enum rtx_code, rtx, rtx, --- 316,322 ---- extern rtx negate_rtx PARAMS ((enum machine_mode, rtx)); /* Expand a logical AND operation. */ ! extern rtx expand_and PARAMS ((enum machine_mode, rtx, rtx, rtx)); /* Emit a store-flag operation. */ extern rtx emit_store_flag PARAMS ((rtx, enum rtx_code, rtx, rtx, *************** extern rtx get_condition PARAMS ((rtx, r *** 911,934 **** extern rtx gen_cond_trap PARAMS ((enum rtx_code, rtx, rtx, rtx)); /* Functions from builtins.c: */ - #ifdef TREE_CODE extern rtx expand_builtin PARAMS ((tree, rtx, rtx, enum machine_mode, int)); - extern tree expand_tree_builtin PARAMS ((tree, tree, tree)); extern void std_expand_builtin_va_start PARAMS ((int, tree, rtx)); extern rtx std_expand_builtin_va_arg PARAMS ((tree, tree)); extern rtx expand_builtin_va_arg PARAMS ((tree, tree)); ! #endif ! extern void expand_builtin_setjmp_setup PARAMS ((rtx, rtx)); extern void expand_builtin_setjmp_receiver PARAMS ((rtx)); extern void expand_builtin_longjmp PARAMS ((rtx, rtx)); extern rtx expand_builtin_saveregs PARAMS ((void)); extern HOST_WIDE_INT get_varargs_alias_set PARAMS ((void)); extern HOST_WIDE_INT get_frame_alias_set PARAMS ((void)); extern void record_base_value PARAMS ((unsigned int, rtx, int)); extern void record_alias_subset PARAMS ((HOST_WIDE_INT, HOST_WIDE_INT)); extern HOST_WIDE_INT new_alias_set PARAMS ((void)); /* Functions from expr.c: */ --- 340,364 ---- extern rtx gen_cond_trap PARAMS ((enum rtx_code, rtx, rtx, rtx)); /* Functions from builtins.c: */ extern rtx expand_builtin PARAMS ((tree, rtx, rtx, enum machine_mode, int)); extern void std_expand_builtin_va_start PARAMS ((int, tree, rtx)); extern rtx std_expand_builtin_va_arg PARAMS ((tree, tree)); extern rtx expand_builtin_va_arg PARAMS ((tree, tree)); ! extern void default_init_builtins PARAMS ((void)); ! extern rtx default_expand_builtin PARAMS ((tree, rtx, rtx, ! enum machine_mode, int)); extern void expand_builtin_setjmp_setup PARAMS ((rtx, rtx)); extern void expand_builtin_setjmp_receiver PARAMS ((rtx)); extern void expand_builtin_longjmp PARAMS ((rtx, rtx)); extern rtx expand_builtin_saveregs PARAMS ((void)); + extern void expand_builtin_trap PARAMS ((void)); extern HOST_WIDE_INT get_varargs_alias_set PARAMS ((void)); extern HOST_WIDE_INT get_frame_alias_set PARAMS ((void)); extern void record_base_value PARAMS ((unsigned int, rtx, int)); extern void record_alias_subset PARAMS ((HOST_WIDE_INT, HOST_WIDE_INT)); extern HOST_WIDE_INT new_alias_set PARAMS ((void)); + extern int can_address_p PARAMS ((tree)); /* Functions from expr.c: */ *************** extern rtx convert_modes PARAMS ((enum m *** 968,974 **** rtx, int)); /* Emit code to move a block Y to a block X. */ ! extern rtx emit_block_move PARAMS ((rtx, rtx, rtx, unsigned int)); /* Copy all or part of a value X into registers starting at REGNO. The number of registers to be filled is NREGS. */ --- 398,404 ---- rtx, int)); /* Emit code to move a block Y to a block X. */ ! extern rtx emit_block_move PARAMS ((rtx, rtx, rtx)); /* Copy all or part of a value X into registers starting at REGNO. The number of registers to be filled is NREGS. */ *************** extern void move_block_from_reg PARAMS ( *** 980,993 **** /* Load a BLKmode value into non-consecutive registers represented by a PARALLEL. */ ! extern void emit_group_load PARAMS ((rtx, rtx, int, unsigned int)); /* Store a BLKmode value from non-consecutive registers represented by a PARALLEL. */ ! extern void emit_group_store PARAMS ((rtx, rtx, int, unsigned int)); #ifdef TREE_CODE ! /* Copy BLKmode object from a set of registers. */ extern rtx copy_blkmode_from_reg PARAMS ((rtx,rtx,tree)); #endif --- 410,423 ---- /* Load a BLKmode value into non-consecutive registers represented by a PARALLEL. */ ! extern void emit_group_load PARAMS ((rtx, rtx, int)); /* Store a BLKmode value from non-consecutive registers represented by a PARALLEL. */ ! extern void emit_group_store PARAMS ((rtx, rtx, int)); #ifdef TREE_CODE ! /* Copy BLKmode object from a set of registers. */ extern rtx copy_blkmode_from_reg PARAMS ((rtx,rtx,tree)); #endif *************** extern void use_regs PARAMS ((rtx *, int *** 1002,1010 **** extern void use_group_regs PARAMS ((rtx *, rtx)); /* Write zeros through the storage of OBJECT. ! If OBJECT has BLKmode, SIZE is its length in bytes and ALIGN is its ! alignment. */ ! extern rtx clear_storage PARAMS ((rtx, rtx, unsigned int)); /* Return non-zero if it is desirable to store LEN bytes generated by CONSTFUN with several move instructions by store_by_pieces --- 432,439 ---- extern void use_group_regs PARAMS ((rtx *, rtx)); /* Write zeros through the storage of OBJECT. ! If OBJECT has BLKmode, SIZE is its length in bytes. */ ! extern rtx clear_storage PARAMS ((rtx, rtx)); /* Return non-zero if it is desirable to store LEN bytes generated by CONSTFUN with several move instructions by store_by_pieces *************** extern rtx emit_move_insn_1 PARAMS ((rtx *** 1035,1050 **** and return an rtx to address the beginning of the block. */ extern rtx push_block PARAMS ((rtx, int, int)); - /* Make an operand to push something on the stack. */ - extern rtx gen_push_operand PARAMS ((void)); - #ifdef TREE_CODE /* Generate code to push something onto the stack, given its mode and type. */ extern void emit_push_insn PARAMS ((rtx, enum machine_mode, tree, rtx, unsigned int, int, rtx, int, rtx, rtx, int, rtx)); ! /* Expand an assignment that stores the value of FROM into TO. */ extern rtx expand_assignment PARAMS ((tree, tree, int, int)); /* Generate code for computing expression EXP, --- 464,476 ---- and return an rtx to address the beginning of the block. */ extern rtx push_block PARAMS ((rtx, int, int)); #ifdef TREE_CODE /* Generate code to push something onto the stack, given its mode and type. */ extern void emit_push_insn PARAMS ((rtx, enum machine_mode, tree, rtx, unsigned int, int, rtx, int, rtx, rtx, int, rtx)); ! /* Expand an assignment that stores the value of FROM into TO. */ extern rtx expand_assignment PARAMS ((tree, tree, int, int)); /* Generate code for computing expression EXP, *************** extern rtx store_expr PARAMS ((tree, rtx *** 1059,1071 **** Useful after calling expand_expr with 1 as sum_ok. */ extern rtx force_operand PARAMS ((rtx, rtx)); ! #ifdef TREE_CODE /* Generate code for computing expression EXP. An rtx for the computed value is returned. The value is never null. In the case of a void EXP, const0_rtx is returned. */ extern rtx expand_expr PARAMS ((tree, rtx, enum machine_mode, enum expand_modifier)); - #endif /* At the start of a function, record that we have no previously-pushed arguments waiting to be popped. */ --- 485,504 ---- Useful after calling expand_expr with 1 as sum_ok. */ extern rtx force_operand PARAMS ((rtx, rtx)); ! /* Return an object on the placeholder list that matches EXP, a ! PLACEHOLDER_EXPR. An object "matches" if it is of the type of the ! PLACEHOLDER_EXPR or a pointer type to it. For further information, see ! tree.def. If no such object is found, abort. If PLIST is nonzero, it is ! a location which initially points to a starting location in the ! placeholder list (zero means start of the list) and where a pointer into ! the placeholder list at which the object is found is placed. */ ! extern tree find_placeholder PARAMS ((tree, tree *)); ! /* Generate code for computing expression EXP. An rtx for the computed value is returned. The value is never null. In the case of a void EXP, const0_rtx is returned. */ extern rtx expand_expr PARAMS ((tree, rtx, enum machine_mode, enum expand_modifier)); /* At the start of a function, record that we have no previously-pushed arguments waiting to be popped. */ *************** extern void do_jump PARAMS ((tree, rtx, *** 1096,1108 **** /* Generate rtl to compare two rtx's, will call emit_cmp_insn. */ extern rtx compare_from_rtx PARAMS ((rtx, rtx, enum rtx_code, int, ! enum machine_mode, rtx, unsigned int)); extern void do_compare_rtx_and_jump PARAMS ((rtx, rtx, enum rtx_code, int, enum machine_mode, rtx, ! unsigned int, rtx, rtx)); - /* Generate a tablejump instruction (used for switch statements). */ - extern void do_tablejump PARAMS ((rtx, enum machine_mode, rtx, rtx, rtx)); #ifdef TREE_CODE /* rtl.h and tree.h were included. */ --- 529,547 ---- /* Generate rtl to compare two rtx's, will call emit_cmp_insn. */ extern rtx compare_from_rtx PARAMS ((rtx, rtx, enum rtx_code, int, ! enum machine_mode, rtx)); extern void do_compare_rtx_and_jump PARAMS ((rtx, rtx, enum rtx_code, int, enum machine_mode, rtx, ! rtx, rtx)); ! ! /* Two different ways of generating switch statements. */ ! extern int try_casesi PARAMS ((tree, tree, tree, tree, rtx, rtx)); ! extern int try_tablejump PARAMS ((tree, tree, tree, tree, rtx, rtx)); ! ! /* Smallest number of adjacent cases before we use a jump table. ! XXX Should be a target hook. */ ! extern unsigned int case_values_threshold PARAMS ((void)); #ifdef TREE_CODE /* rtl.h and tree.h were included. */ *************** extern rtx trampoline_address PARAMS ((t *** 1122,1128 **** in its original home. This becomes invalid if any more code is emitted. */ extern rtx hard_function_value PARAMS ((tree, tree, int)); ! extern rtx prepare_call_address PARAMS ((rtx, tree, rtx *, int)); extern rtx expand_call PARAMS ((tree, rtx, int)); --- 561,567 ---- in its original home. This becomes invalid if any more code is emitted. */ extern rtx hard_function_value PARAMS ((tree, tree, int)); ! extern rtx prepare_call_address PARAMS ((rtx, tree, rtx *, int, int)); extern rtx expand_call PARAMS ((tree, rtx, int)); *************** extern rtx memory_address PARAMS ((enum *** 1157,1168 **** --- 596,661 ---- /* Like `memory_address' but pretent `flag_force_addr' is 0. */ extern rtx memory_address_noforce PARAMS ((enum machine_mode, rtx)); + /* Set the alias set of MEM to SET. */ + extern void set_mem_alias_set PARAMS ((rtx, HOST_WIDE_INT)); + + /* Set the alignment of MEM to ALIGN bits. */ + extern void set_mem_align PARAMS ((rtx, unsigned int)); + + /* Set the expr for MEM to EXPR. */ + extern void set_mem_expr PARAMS ((rtx, tree)); + + /* Set the offset for MEM to OFFSET. */ + extern void set_mem_offset PARAMS ((rtx, rtx)); + /* Return a memory reference like MEMREF, but with its mode changed to MODE and its address changed to ADDR. (VOIDmode means don't change the mode. NULL for ADDR means don't change the address.) */ extern rtx change_address PARAMS ((rtx, enum machine_mode, rtx)); + /* Return a memory reference like MEMREF, but with its mode changed + to MODE and its address offset by OFFSET bytes. */ + #define adjust_address(MEMREF, MODE, OFFSET) \ + adjust_address_1 (MEMREF, MODE, OFFSET, 1, 1) + + /* Likewise, but the reference is not required to be valid. */ + #define adjust_address_nv(MEMREF, MODE, OFFSET) \ + adjust_address_1 (MEMREF, MODE, OFFSET, 0, 1) + + /* Return a memory reference like MEMREF, but with its mode changed + to MODE and its address changed to ADDR, which is assumed to be + increased by OFFSET bytes from MEMREF. */ + #define adjust_automodify_address(MEMREF, MODE, ADDR, OFFSET) \ + adjust_automodify_address_1 (MEMREF, MODE, ADDR, OFFSET, 1) + + /* Likewise, but the reference is not required to be valid. */ + #define adjust_automodify_address_nv(MEMREF, MODE, ADDR, OFFSET) \ + adjust_automodify_address_1 (MEMREF, MODE, ADDR, OFFSET, 0) + + extern rtx adjust_address_1 PARAMS ((rtx, enum machine_mode, HOST_WIDE_INT, + int, int)); + extern rtx adjust_automodify_address_1 PARAMS ((rtx, enum machine_mode, + rtx, HOST_WIDE_INT, int)); + + /* Return a memory reference like MEMREF, but whose address is changed by + adding OFFSET, an RTX, to it. POW2 is the highest power of two factor + known to be in OFFSET (possibly 1). */ + extern rtx offset_address PARAMS ((rtx, rtx, HOST_WIDE_INT)); + + /* Return a memory reference like MEMREF, but with its address changed to + ADDR. The caller is asserting that the actual piece of memory pointed + to is the same, just the form of the address is being changed, such as + by putting something into a register. */ + extern rtx replace_equiv_address PARAMS ((rtx, rtx)); + + /* Likewise, but the reference is not required to be valid. */ + extern rtx replace_equiv_address_nv PARAMS ((rtx, rtx)); + + /* Return a memory reference like MEMREF, but with its mode widened to + MODE and adjusted by OFFSET. */ + extern rtx widen_memory_access PARAMS ((rtx, enum machine_mode, HOST_WIDE_INT)); + /* Return a memory reference like MEMREF, but which is known to have a valid address. */ extern rtx validize_mem PARAMS ((rtx)); *************** extern void set_mem_attributes PARAMS (( *** 1182,1190 **** /* Assemble the static constant template for function entry trampolines. */ extern rtx assemble_trampoline_template PARAMS ((void)); - /* Return 1 if two rtx's are equivalent in structure and elements. */ - extern int rtx_equal_p PARAMS ((rtx, rtx)); - /* Given rtx, return new rtx whose address won't be affected by any side effects. It has been copied to a new temporary reg. */ extern rtx stabilize PARAMS ((rtx)); --- 675,680 ---- *************** extern rtx hard_libcall_value PARAMS ((e *** 1252,1265 **** of STACK_BOUNDARY / BITS_PER_UNIT. */ extern rtx round_push PARAMS ((rtx)); extern rtx store_bit_field PARAMS ((rtx, unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT, ! enum machine_mode, rtx, ! unsigned int, HOST_WIDE_INT)); extern rtx extract_bit_field PARAMS ((rtx, unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT, int, rtx, enum machine_mode, enum machine_mode, ! unsigned int, HOST_WIDE_INT)); extern rtx expand_mult PARAMS ((enum machine_mode, rtx, rtx, rtx, int)); extern rtx expand_mult_add PARAMS ((rtx, rtx, rtx, rtx,enum machine_mode, int)); extern rtx expand_mult_highpart_adjust PARAMS ((enum machine_mode, rtx, rtx, rtx, rtx, int)); --- 742,762 ---- of STACK_BOUNDARY / BITS_PER_UNIT. */ extern rtx round_push PARAMS ((rtx)); + /* Return the mode desired by operand N of a particular bitfield + insert/extract insn, or MAX_MACHINE_MODE if no such insn is + available. */ + + enum extraction_pattern { EP_insv, EP_extv, EP_extzv }; + extern enum machine_mode + mode_for_extraction PARAMS ((enum extraction_pattern, int)); + extern rtx store_bit_field PARAMS ((rtx, unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT, ! enum machine_mode, rtx, HOST_WIDE_INT)); extern rtx extract_bit_field PARAMS ((rtx, unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT, int, rtx, enum machine_mode, enum machine_mode, ! HOST_WIDE_INT)); extern rtx expand_mult PARAMS ((enum machine_mode, rtx, rtx, rtx, int)); extern rtx expand_mult_add PARAMS ((rtx, rtx, rtx, rtx,enum machine_mode, int)); extern rtx expand_mult_highpart_adjust PARAMS ((enum machine_mode, rtx, rtx, rtx, rtx, int)); *************** extern rtx (*lang_expand_expr) PARAMS (( *** 1273,1298 **** enum machine_mode, enum expand_modifier modifier)); - #ifdef TREE_CODE - /* Hook called by output_constant for language-specific tree codes. - It is up to the language front-end to install a hook if it has any - such codes that output_constant needs to know about. Returns a - language-independent constant equivalent to its input. */ - extern tree (*lang_expand_constant) PARAMS ((tree)); - extern int safe_from_p PARAMS ((rtx, tree, int)); ! /* Hook called by safe_from_p for language-specific tree codes. It is ! up to the language front-end to install a hook if it has any such ! codes that safe_from_p needs to know about. Since same_from_p will ! recursively explore the TREE_OPERANDs of an expression, this hook ! should not reexamine those pieces. This routine may recursively ! call safe_from_p; it should always pass `0' as the TOP_P ! parameter. */ ! extern int (*lang_safe_from_p) PARAMS ((rtx, tree)); ! #endif ! extern void init_all_optabs PARAMS ((void)); extern void do_jump_by_parts_equality_rtx PARAMS ((rtx, rtx, rtx)); extern void do_jump_by_parts_greater_rtx PARAMS ((enum machine_mode, int, rtx, rtx, rtx, --- 770,785 ---- enum machine_mode, enum expand_modifier modifier)); extern int safe_from_p PARAMS ((rtx, tree, int)); ! /* Call this once to initialize the contents of the optabs ! appropriately for the current target machine. */ ! extern void init_optabs PARAMS ((void)); extern void init_all_optabs PARAMS ((void)); + + /* Call this to initialize an optab function entry. */ + extern rtx init_one_libfunc PARAMS ((const char *)); + extern void do_jump_by_parts_equality_rtx PARAMS ((rtx, rtx, rtx)); extern void do_jump_by_parts_greater_rtx PARAMS ((enum machine_mode, int, rtx, rtx, rtx, diff -Nrc3pad gcc-3.0.4/gcc/final.c gcc-3.1/gcc/final.c *** gcc-3.0.4/gcc/final.c Mon Nov 26 00:48:08 2001 --- gcc-3.1/gcc/final.c Tue Apr 23 08:11:19 2002 *************** *** 1,23 **** /* Convert RTL to assembler code and output it, for GNU compiler. Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, ! 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* This is the final pass of the compiler. It looks at the rtl code for a function and outputs assembler code. --- 1,23 ---- /* Convert RTL to assembler code and output it, for GNU compiler. Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, ! 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* This is the final pass of the compiler. It looks at the rtl code for a function and outputs assembler code. *************** Boston, MA 02111-1307, USA. */ *** 41,48 **** (the one that tests the condition codes) to be modified. The code for the function prologue and epilogue are generated ! directly as assembler code by the macros FUNCTION_PROLOGUE and ! FUNCTION_EPILOGUE. Those instructions never exist as rtl. */ #include "config.h" #include "system.h" --- 41,48 ---- (the one that tests the condition codes) to be modified. The code for the function prologue and epilogue are generated ! directly in assembler by the target functions function_prologue and ! function_epilogue. Those instructions never exist as rtl. */ #include "config.h" #include "system.h" *************** Boston, MA 02111-1307, USA. */ *** 65,108 **** #include "reload.h" #include "intl.h" #include "basic-block.h" ! ! /* Get N_SLINE and N_SOL from stab.h if we can expect the file to exist. */ ! #if defined (DBX_DEBUGGING_INFO) || defined (XCOFF_DEBUGGING_INFO) ! #include "dbxout.h" ! #if defined (USG) || !defined (HAVE_STAB_H) ! #include "gstab.h" /* If doing DBX on sysV, use our own stab.h. */ ! #else ! #include ! #endif ! ! #endif /* DBX_DEBUGGING_INFO || XCOFF_DEBUGGING_INFO */ #ifdef XCOFF_DEBUGGING_INFO ! #include "xcoffout.h" ! #endif ! ! #ifdef DWARF_DEBUGGING_INFO ! #include "dwarfout.h" #endif #if defined (DWARF2_UNWIND_INFO) || defined (DWARF2_DEBUGGING_INFO) #include "dwarf2out.h" #endif - #ifdef SDB_DEBUGGING_INFO - #include "sdbout.h" - #endif - - /* .stabd code for line number. */ - #ifndef N_SLINE - #define N_SLINE 0x44 - #endif - - /* .stabs code for included file name. */ - #ifndef N_SOL - #define N_SOL 0x84 - #endif - /* If we aren't using cc0, CC_STATUS_INIT shouldn't exist. So define a null default for it to save conditionalization later. */ #ifndef CC_STATUS_INIT --- 65,83 ---- #include "reload.h" #include "intl.h" #include "basic-block.h" ! #include "target.h" ! #include "debug.h" ! #include "expr.h" #ifdef XCOFF_DEBUGGING_INFO ! #include "xcoffout.h" /* Needed for external data ! declarations for e.g. AIX 4.x. */ #endif #if defined (DWARF2_UNWIND_INFO) || defined (DWARF2_DEBUGGING_INFO) #include "dwarf2out.h" #endif /* If we aren't using cc0, CC_STATUS_INIT shouldn't exist. So define a null default for it to save conditionalization later. */ #ifndef CC_STATUS_INIT *************** static int high_function_linenum; *** 139,148 **** /* Filename of last NOTE. */ static const char *last_filename; - /* Number of basic blocks seen so far; - used if profile_block_flag is set. */ - static int count_basic_blocks; - /* Number of instrumented arcs when profile_arc_flag is set. */ extern int count_instrumented_edges; --- 114,119 ---- *************** char regs_ever_live[FIRST_PSEUDO_REGISTE *** 199,208 **** int frame_pointer_needed; - /* Assign unique numbers to labels generated for profiling. */ - - int profile_label_no; - /* Number of unmatched NOTE_INSN_BLOCK_BEG notes we have seen. */ static int block_depth; --- 170,175 ---- *************** static char *line_note_exists; *** 231,275 **** rtx current_insn_predicate; #endif - /* Linked list to hold line numbers for each basic block. */ - - struct bb_list - { - struct bb_list *next; /* pointer to next basic block */ - int line_num; /* line number */ - int file_label_num; /* LPBC label # for stored filename */ - int func_label_num; /* LPBC label # for stored function name */ - }; - - static struct bb_list *bb_head = 0; /* Head of basic block list */ - static struct bb_list **bb_tail = &bb_head; /* Ptr to store next bb ptr */ - static int bb_file_label_num = -1; /* Current label # for file */ - static int bb_func_label_num = -1; /* Current label # for func */ - - /* Linked list to hold the strings for each file and function name output. */ - - struct bb_str - { - struct bb_str *next; /* pointer to next string */ - const char *string; /* string */ - int label_num; /* label number */ - int length; /* string length */ - }; - - static struct bb_str *sbb_head = 0; /* Head of string list. */ - static struct bb_str **sbb_tail = &sbb_head; /* Ptr to store next bb str */ - static int sbb_label_num = 0; /* Last label used */ - #ifdef HAVE_ATTR_length static int asm_insn_count PARAMS ((rtx)); #endif static void profile_function PARAMS ((FILE *)); static void profile_after_prologue PARAMS ((FILE *)); ! static void add_bb PARAMS ((FILE *)); ! static int add_bb_string PARAMS ((const char *, int)); ! static void output_source_line PARAMS ((FILE *, rtx)); ! static rtx walk_alter_subreg PARAMS ((rtx)); static void output_asm_name PARAMS ((void)); static void output_operand PARAMS ((rtx, int)); #ifdef LEAF_REGISTERS static void leaf_renumber_regs PARAMS ((rtx)); --- 198,213 ---- rtx current_insn_predicate; #endif #ifdef HAVE_ATTR_length static int asm_insn_count PARAMS ((rtx)); #endif static void profile_function PARAMS ((FILE *)); static void profile_after_prologue PARAMS ((FILE *)); ! static void notice_source_line PARAMS ((rtx)); ! static rtx walk_alter_subreg PARAMS ((rtx *)); static void output_asm_name PARAMS ((void)); + static tree get_mem_expr_from_op PARAMS ((rtx, int *)); + static void output_asm_operand_names PARAMS ((rtx *, int *, int)); static void output_operand PARAMS ((rtx, int)); #ifdef LEAF_REGISTERS static void leaf_renumber_regs PARAMS ((rtx)); *************** void *** 305,332 **** end_final (filename) const char *filename; { ! int i; ! ! if (profile_block_flag || profile_arc_flag) { char name[20]; int align = exact_log2 (BIGGEST_ALIGNMENT / BITS_PER_UNIT); int size, rounded; - struct bb_list *ptr; - struct bb_str *sptr; int long_bytes = LONG_TYPE_SIZE / BITS_PER_UNIT; int pointer_bytes = POINTER_SIZE / BITS_PER_UNIT; ! if (profile_block_flag) ! size = long_bytes * count_basic_blocks; ! else ! size = long_bytes * count_instrumented_edges; rounded = size; rounded += (BIGGEST_ALIGNMENT / BITS_PER_UNIT) - 1; rounded = (rounded / (BIGGEST_ALIGNMENT / BITS_PER_UNIT) * (BIGGEST_ALIGNMENT / BITS_PER_UNIT)); data_section (); /* Output the main header, of 11 words: --- 243,271 ---- end_final (filename) const char *filename; { ! if (profile_arc_flag) { char name[20]; int align = exact_log2 (BIGGEST_ALIGNMENT / BITS_PER_UNIT); int size, rounded; int long_bytes = LONG_TYPE_SIZE / BITS_PER_UNIT; + int gcov_type_bytes = GCOV_TYPE_SIZE / BITS_PER_UNIT; int pointer_bytes = POINTER_SIZE / BITS_PER_UNIT; + unsigned int align2 = LONG_TYPE_SIZE; ! size = gcov_type_bytes * count_instrumented_edges; rounded = size; rounded += (BIGGEST_ALIGNMENT / BITS_PER_UNIT) - 1; rounded = (rounded / (BIGGEST_ALIGNMENT / BITS_PER_UNIT) * (BIGGEST_ALIGNMENT / BITS_PER_UNIT)); + /* ??? This _really_ ought to be done with a structure layout + and with assemble_constructor. If long_bytes != pointer_bytes + we'll be emitting unaligned data at some point. */ + if (long_bytes != pointer_bytes) + abort (); + data_section (); /* Output the main header, of 11 words: *************** end_final (filename) *** 348,417 **** ASM_OUTPUT_ALIGN (asm_out_file, align); ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "LPBX", 0); - /* zero word */ - assemble_integer (const0_rtx, long_bytes, 1); ! /* address of filename */ ASM_GENERATE_INTERNAL_LABEL (name, "LPBX", 1); ! assemble_integer (gen_rtx_SYMBOL_REF (Pmode, name), pointer_bytes, 1); ! /* address of count table */ ASM_GENERATE_INTERNAL_LABEL (name, "LPBX", 2); ! assemble_integer (gen_rtx_SYMBOL_REF (Pmode, name), pointer_bytes, 1); ! /* count of the # of basic blocks or # of instrumented arcs */ ! if (profile_block_flag) ! assemble_integer (GEN_INT (count_basic_blocks), long_bytes, 1); ! else ! assemble_integer (GEN_INT (count_instrumented_edges), long_bytes, 1); ! /* zero word (link field) */ ! assemble_integer (const0_rtx, pointer_bytes, 1); ! /* address of basic block start address table */ ! if (profile_block_flag) ! { ! ASM_GENERATE_INTERNAL_LABEL (name, "LPBX", 3); ! assemble_integer (gen_rtx_SYMBOL_REF (Pmode, name), pointer_bytes, ! 1); ! } ! else ! assemble_integer (const0_rtx, pointer_bytes, 1); ! /* byte count for extended structure. */ ! assemble_integer (GEN_INT (11 * UNITS_PER_WORD), long_bytes, 1); ! /* address of function name table */ ! if (profile_block_flag) ! { ! ASM_GENERATE_INTERNAL_LABEL (name, "LPBX", 4); ! assemble_integer (gen_rtx_SYMBOL_REF (Pmode, name), pointer_bytes, ! 1); ! } ! else ! assemble_integer (const0_rtx, pointer_bytes, 1); ! /* address of line number and filename tables if debugging. */ ! if (write_symbols != NO_DEBUG && profile_block_flag) ! { ! ASM_GENERATE_INTERNAL_LABEL (name, "LPBX", 5); ! assemble_integer (gen_rtx_SYMBOL_REF (Pmode, name), ! pointer_bytes, 1); ! ASM_GENERATE_INTERNAL_LABEL (name, "LPBX", 6); ! assemble_integer (gen_rtx_SYMBOL_REF (Pmode, name), ! pointer_bytes, 1); ! } ! else ! { ! assemble_integer (const0_rtx, pointer_bytes, 1); ! assemble_integer (const0_rtx, pointer_bytes, 1); ! } ! /* space for extension ptr (link field) */ ! assemble_integer (const0_rtx, UNITS_PER_WORD, 1); ! /* Output the file name changing the suffix to .d for Sun tcov ! compatibility. */ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "LPBX", 1); { char *cwd = getpwd (); --- 287,330 ---- ASM_OUTPUT_ALIGN (asm_out_file, align); ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "LPBX", 0); ! /* Zero word. */ ! assemble_integer (const0_rtx, long_bytes, align2, 1); ! ! /* Address of filename. */ ASM_GENERATE_INTERNAL_LABEL (name, "LPBX", 1); ! assemble_integer (gen_rtx_SYMBOL_REF (Pmode, name), pointer_bytes, ! align2, 1); ! /* Address of count table. */ ASM_GENERATE_INTERNAL_LABEL (name, "LPBX", 2); ! assemble_integer (gen_rtx_SYMBOL_REF (Pmode, name), pointer_bytes, ! align2, 1); ! /* Count of the # of instrumented arcs. */ ! assemble_integer (GEN_INT (count_instrumented_edges), ! long_bytes, align2, 1); ! /* Zero word (link field). */ ! assemble_integer (const0_rtx, pointer_bytes, align2, 1); ! assemble_integer (const0_rtx, pointer_bytes, align2, 1); ! /* Byte count for extended structure. */ ! assemble_integer (GEN_INT (11 * UNITS_PER_WORD), long_bytes, align2, 1); ! /* Address of function name table. */ ! assemble_integer (const0_rtx, pointer_bytes, align2, 1); ! /* Address of line number and filename tables if debugging. */ ! assemble_integer (const0_rtx, pointer_bytes, align2, 1); ! assemble_integer (const0_rtx, pointer_bytes, align2, 1); ! /* Space for extension ptr (link field). */ ! assemble_integer (const0_rtx, UNITS_PER_WORD, align2, 1); ! /* Output the file name changing the suffix to .d for ! Sun tcov compatibility. */ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "LPBX", 1); { char *cwd = getpwd (); *************** end_final (filename) *** 422,431 **** strcat (data_file, "/"); strcat (data_file, filename); strip_off_ending (data_file, len); ! if (profile_block_flag) ! strcat (data_file, ".d"); ! else ! strcat (data_file, ".da"); assemble_string (data_file, strlen (data_file) + 1); } --- 335,341 ---- strcat (data_file, "/"); strcat (data_file, filename); strip_off_ending (data_file, len); ! strcat (data_file, ".da"); assemble_string (data_file, strlen (data_file) + 1); } *************** end_final (filename) *** 458,553 **** #endif #endif } ! /* Output any basic block strings */ ! if (profile_block_flag) ! { ! readonly_data_section (); ! if (sbb_head) ! { ! ASM_OUTPUT_ALIGN (asm_out_file, align); ! for (sptr = sbb_head; sptr != 0; sptr = sptr->next) ! { ! ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "LPBC", ! sptr->label_num); ! assemble_string (sptr->string, sptr->length); ! } ! } ! } ! ! /* Output the table of addresses. */ ! if (profile_block_flag) ! { ! /* Realign in new section */ ! ASM_OUTPUT_ALIGN (asm_out_file, align); ! ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "LPBX", 3); ! for (i = 0; i < count_basic_blocks; i++) ! { ! ASM_GENERATE_INTERNAL_LABEL (name, "LPB", i); ! assemble_integer (gen_rtx_SYMBOL_REF (Pmode, name), ! pointer_bytes, 1); ! } ! } ! ! /* Output the table of function names. */ ! if (profile_block_flag) ! { ! ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "LPBX", 4); ! for ((ptr = bb_head), (i = 0); ptr != 0; (ptr = ptr->next), i++) ! { ! if (ptr->func_label_num >= 0) ! { ! ASM_GENERATE_INTERNAL_LABEL (name, "LPBC", ! ptr->func_label_num); ! assemble_integer (gen_rtx_SYMBOL_REF (Pmode, name), ! pointer_bytes, 1); ! } ! else ! assemble_integer (const0_rtx, pointer_bytes, 1); ! } ! ! for (; i < count_basic_blocks; i++) ! assemble_integer (const0_rtx, pointer_bytes, 1); ! } ! ! if (write_symbols != NO_DEBUG && profile_block_flag) ! { ! /* Output the table of line numbers. */ ! ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "LPBX", 5); ! for ((ptr = bb_head), (i = 0); ptr != 0; (ptr = ptr->next), i++) ! assemble_integer (GEN_INT (ptr->line_num), long_bytes, 1); ! ! for (; i < count_basic_blocks; i++) ! assemble_integer (const0_rtx, long_bytes, 1); ! ! /* Output the table of file names. */ ! ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "LPBX", 6); ! for ((ptr = bb_head), (i = 0); ptr != 0; (ptr = ptr->next), i++) ! { ! if (ptr->file_label_num >= 0) ! { ! ASM_GENERATE_INTERNAL_LABEL (name, "LPBC", ! ptr->file_label_num); ! assemble_integer (gen_rtx_SYMBOL_REF (Pmode, name), ! pointer_bytes, 1); ! } ! else ! assemble_integer (const0_rtx, pointer_bytes, 1); ! } ! for (; i < count_basic_blocks; i++) ! assemble_integer (const0_rtx, pointer_bytes, 1); ! } ! /* End with the address of the table of addresses, ! so we can find it easily, as the last word in the file's text. */ ! if (profile_block_flag) ! { ! ASM_GENERATE_INTERNAL_LABEL (name, "LPBX", 3); ! assemble_integer (gen_rtx_SYMBOL_REF (Pmode, name), pointer_bytes, ! 1); ! } ! } } /* Enable APP processing of subsequent output. --- 368,392 ---- #endif #endif } + } + } ! /* Default target function prologue and epilogue assembler output. ! If not overridden for epilogue code, then the function body itself ! contains return instructions wherever needed. */ ! void ! default_function_pro_epilogue (file, size) ! FILE *file ATTRIBUTE_UNUSED; ! HOST_WIDE_INT size ATTRIBUTE_UNUSED; ! { ! } ! /* Default target hook that outputs nothing to a stream. */ ! void ! no_asm_to_stream (file) ! FILE *file ATTRIBUTE_UNUSED; ! { } /* Enable APP processing of subsequent output. *************** int insn_current_address; *** 612,618 **** /* Address of insn being processed in previous iteration. */ int insn_last_address; ! /* konwn invariant alignment of insn being processed. */ int insn_current_align; /* After shorten_branches, for any insn, uid_align[INSN_UID (insn)] --- 451,457 ---- /* Address of insn being processed in previous iteration. */ int insn_last_address; ! /* known invariant alignment of insn being processed. */ int insn_current_align; /* After shorten_branches, for any insn, uid_align[INSN_UID (insn)] *************** static struct label_alignment *label_ali *** 639,649 **** void init_insn_lengths () { - if (label_align) - { - free (label_align); - label_align = 0; - } if (uid_shuid) { free (uid_shuid); --- 478,483 ---- *************** get_attr_length (insn) *** 775,781 **** #endif #ifndef LABEL_ALIGN_MAX_SKIP ! #define LABEL_ALIGN_MAX_SKIP (align_labels-1) #endif #ifndef LOOP_ALIGN --- 609,615 ---- #endif #ifndef LABEL_ALIGN_MAX_SKIP ! #define LABEL_ALIGN_MAX_SKIP align_labels_max_skip #endif #ifndef LOOP_ALIGN *************** get_attr_length (insn) *** 783,797 **** #endif #ifndef LOOP_ALIGN_MAX_SKIP ! #define LOOP_ALIGN_MAX_SKIP (align_loops-1) #endif #ifndef LABEL_ALIGN_AFTER_BARRIER ! #define LABEL_ALIGN_AFTER_BARRIER(LABEL) align_jumps_log #endif #ifndef LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP ! #define LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP (align_jumps-1) #endif #ifndef ADDR_VEC_ALIGN --- 617,639 ---- #endif #ifndef LOOP_ALIGN_MAX_SKIP ! #define LOOP_ALIGN_MAX_SKIP align_loops_max_skip #endif #ifndef LABEL_ALIGN_AFTER_BARRIER ! #define LABEL_ALIGN_AFTER_BARRIER(LABEL) 0 #endif #ifndef LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP ! #define LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP 0 ! #endif ! ! #ifndef JUMP_ALIGN ! #define JUMP_ALIGN(LABEL) align_jumps_log ! #endif ! ! #ifndef JUMP_ALIGN_MAX_SKIP ! #define JUMP_ALIGN_MAX_SKIP align_jumps_max_skip #endif #ifndef ADDR_VEC_ALIGN *************** label_to_alignment (label) *** 851,857 **** For casesi tables, we also want to know worst case minimum amounts of address difference, in case a machine description wants to introduce some common offset that is added to all offsets in a table. ! For this purpose, align_fuzz with a growth argument of 0 comuptes the appropriate adjustment. */ /* Compute the maximum delta by which the difference of the addresses of --- 693,699 ---- For casesi tables, we also want to know worst case minimum amounts of address difference, in case a machine description wants to introduce some common offset that is added to all offsets in a table. ! For this purpose, align_fuzz with a growth argument of 0 computes the appropriate adjustment. */ /* Compute the maximum delta by which the difference of the addresses of *************** insn_current_reference_address (branch) *** 925,931 **** return insn_current_address; dest = JUMP_LABEL (branch); ! /* BRANCH has no proper alignment chain set, so use SEQ. BRANCH also has no INSN_SHUID. */ if (INSN_SHUID (seq) < INSN_SHUID (dest)) { --- 767,773 ---- return insn_current_address; dest = JUMP_LABEL (branch); ! /* BRANCH has no proper alignment chain set, so use SEQ. BRANCH also has no INSN_SHUID. */ if (INSN_SHUID (seq) < INSN_SHUID (dest)) { *************** insn_current_reference_address (branch) *** 942,947 **** --- 784,871 ---- } #endif /* HAVE_ATTR_length */ + void + compute_alignments () + { + int i; + int log, max_skip, max_log; + + if (label_align) + { + free (label_align); + label_align = 0; + } + + max_labelno = max_label_num (); + min_labelno = get_first_label_num (); + label_align = (struct label_alignment *) + xcalloc (max_labelno - min_labelno + 1, sizeof (struct label_alignment)); + + /* If not optimizing or optimizing for size, don't assign any alignments. */ + if (! optimize || optimize_size) + return; + + for (i = 0; i < n_basic_blocks; i++) + { + basic_block bb = BASIC_BLOCK (i); + rtx label = bb->head; + int fallthru_frequency = 0, branch_frequency = 0, has_fallthru = 0; + edge e; + + if (GET_CODE (label) != CODE_LABEL) + continue; + max_log = LABEL_ALIGN (label); + max_skip = LABEL_ALIGN_MAX_SKIP; + + for (e = bb->pred; e; e = e->pred_next) + { + if (e->flags & EDGE_FALLTHRU) + has_fallthru = 1, fallthru_frequency += EDGE_FREQUENCY (e); + else + branch_frequency += EDGE_FREQUENCY (e); + } + + /* There are two purposes to align block with no fallthru incoming edge: + 1) to avoid fetch stalls when branch destination is near cache boundary + 2) to improve cache efficiency in case the previous block is not executed + (so it does not need to be in the cache). + + We to catch first case, we align frequently executed blocks. + To catch the second, we align blocks that are executed more frequently + than the predecessor and the predecessor is likely to not be executed + when function is called. */ + + if (!has_fallthru + && (branch_frequency > BB_FREQ_MAX / 10 + || (bb->frequency > BASIC_BLOCK (i - 1)->frequency * 10 + && (BASIC_BLOCK (i - 1)->frequency + <= ENTRY_BLOCK_PTR->frequency / 2)))) + { + log = JUMP_ALIGN (label); + if (max_log < log) + { + max_log = log; + max_skip = JUMP_ALIGN_MAX_SKIP; + } + } + /* In case block is frequent and reached mostly by non-fallthru edge, + align it. It is most likely an first block of loop. */ + if (has_fallthru + && branch_frequency + fallthru_frequency > BB_FREQ_MAX / 10 + && branch_frequency > fallthru_frequency * 5) + { + log = LOOP_ALIGN (label); + if (max_log < log) + { + max_log = log; + max_skip = LOOP_ALIGN_MAX_SKIP; + } + } + LABEL_TO_ALIGNMENT (label) = max_log; + LABEL_TO_MAX_SKIP (label) = max_skip; + } + } + /* Make a pass over all insns and compute their actual lengths by shortening any branches of variable length if possible. */ *************** insn_current_reference_address (branch) *** 955,961 **** port splits out-of-range conditional branches in MACHINE_DEPENDENT_REORG. In order to do this, it needs proper length information, which it obtains by calling shorten_branches. This cannot be collapsed with ! shorten_branches itself into a single pass unless we also want to intergate reorg.c, since the branch splitting exposes new instructions with delay slots. */ --- 879,885 ---- port splits out-of-range conditional branches in MACHINE_DEPENDENT_REORG. In order to do this, it needs proper length information, which it obtains by calling shorten_branches. This cannot be collapsed with ! shorten_branches itself into a single pass unless we also want to integrate reorg.c, since the branch splitting exposes new instructions with delay slots. */ *************** shorten_branches (first) *** 977,1019 **** int uid; rtx align_tab[MAX_CODE_ALIGN]; - /* In order to make sure that all instructions have valid length info, - we must split them before we compute the address/length info. */ - - for (insn = NEXT_INSN (first); insn; insn = NEXT_INSN (insn)) - if (INSN_P (insn)) - { - rtx old = insn; - /* Don't split the insn if it has been deleted. */ - if (! INSN_DELETED_P (old)) - insn = try_split (PATTERN (old), old, 1); - /* When not optimizing, the old insn will be still left around - with only the 'deleted' bit set. Transform it into a note - to avoid confusion of subsequent processing. */ - if (INSN_DELETED_P (old)) - { - PUT_CODE (old, NOTE); - NOTE_LINE_NUMBER (old) = NOTE_INSN_DELETED; - NOTE_SOURCE_FILE (old) = 0; - } - } #endif - /* We must do some computations even when not actually shortening, in - order to get the alignment information for the labels. */ - - init_insn_lengths (); - /* Compute maximum UID and allocate label_align / uid_shuid. */ max_uid = get_max_uid (); - max_labelno = max_label_num (); - min_labelno = get_first_label_num (); - label_align = (struct label_alignment *) - xcalloc ((max_labelno - min_labelno + 1), sizeof (struct label_alignment)); - uid_shuid = (int *) xmalloc (max_uid * sizeof *uid_shuid); /* Initialize label_align and set up uid_shuid to be strictly monotonically rising with insn order. */ /* We use max_log here to keep track of the maximum alignment we want to --- 901,936 ---- int uid; rtx align_tab[MAX_CODE_ALIGN]; #endif /* Compute maximum UID and allocate label_align / uid_shuid. */ max_uid = get_max_uid (); uid_shuid = (int *) xmalloc (max_uid * sizeof *uid_shuid); + if (max_labelno != max_label_num ()) + { + int old = max_labelno; + int n_labels; + int n_old_labels; + + max_labelno = max_label_num (); + + n_labels = max_labelno - min_labelno + 1; + n_old_labels = old - min_labelno + 1; + + label_align = (struct label_alignment *) xrealloc + (label_align, n_labels * sizeof (struct label_alignment)); + + /* Range of labels grows monotonically in the function. Abort here + means that the initialization of array got lost. */ + if (n_old_labels > n_labels) + abort (); + + memset (label_align + n_old_labels, 0, + (n_labels - n_old_labels) * sizeof (struct label_alignment)); + } + /* Initialize label_align and set up uid_shuid to be strictly monotonically rising with insn order. */ /* We use max_log here to keep track of the maximum alignment we want to *************** shorten_branches (first) *** 1040,1045 **** --- 957,970 ---- { rtx next; + /* Merge in alignments computed by compute_alignments. */ + log = LABEL_TO_ALIGNMENT (insn); + if (max_log < log) + { + max_log = log; + max_skip = LABEL_TO_MAX_SKIP (insn); + } + log = LABEL_ALIGN (insn); if (max_log < log) { *************** shorten_branches (first) *** 1090,1130 **** break; } } - /* Again, we allow NOTE_INSN_LOOP_BEG - INSN - CODE_LABEL - sequences in order to handle reorg output efficiently. */ - else if (GET_CODE (insn) == NOTE - && NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG) - { - rtx label; - int nest = 0; - - /* Search for the label that starts the loop. - Don't skip past the end of the loop, since that could - lead to putting an alignment where it does not belong. - However, a label after a nested (non-)loop would be OK. */ - for (label = insn; label; label = NEXT_INSN (label)) - { - if (GET_CODE (label) == NOTE - && NOTE_LINE_NUMBER (label) == NOTE_INSN_LOOP_BEG) - nest++; - else if (GET_CODE (label) == NOTE - && NOTE_LINE_NUMBER (label) == NOTE_INSN_LOOP_END - && --nest == 0) - break; - else if (GET_CODE (label) == CODE_LABEL) - { - log = LOOP_ALIGN (label); - if (max_log < log) - { - max_log = log; - max_skip = LOOP_ALIGN_MAX_SKIP; - } - break; - } - } - } - else - continue; } #ifdef HAVE_ATTR_length --- 1015,1020 ---- *************** shorten_branches (first) *** 1312,1318 **** #ifdef ADJUST_INSN_LENGTH ADJUST_INSN_LENGTH (insn, insn_lengths[uid]); if (insn_lengths[uid] < 0) ! fatal_insn ("Negative insn length", insn); #endif } --- 1202,1208 ---- #ifdef ADJUST_INSN_LENGTH ADJUST_INSN_LENGTH (insn, insn_lengths[uid]); if (insn_lengths[uid] < 0) ! fatal_insn ("negative insn length", insn); #endif } *************** shorten_branches (first) *** 1369,1380 **** rtx rel_lab = XEXP (XEXP (body, 0), 0); rtx min_lab = XEXP (XEXP (body, 2), 0); rtx max_lab = XEXP (XEXP (body, 3), 0); - addr_diff_vec_flags flags = ADDR_DIFF_VEC_FLAGS (body); int rel_addr = INSN_ADDRESSES (INSN_UID (rel_lab)); int min_addr = INSN_ADDRESSES (INSN_UID (min_lab)); int max_addr = INSN_ADDRESSES (INSN_UID (max_lab)); rtx prev; int rel_align = 0; /* Try to find a known alignment for rel_lab. */ for (prev = rel_lab; --- 1259,1273 ---- rtx rel_lab = XEXP (XEXP (body, 0), 0); rtx min_lab = XEXP (XEXP (body, 2), 0); rtx max_lab = XEXP (XEXP (body, 3), 0); int rel_addr = INSN_ADDRESSES (INSN_UID (rel_lab)); int min_addr = INSN_ADDRESSES (INSN_UID (min_lab)); int max_addr = INSN_ADDRESSES (INSN_UID (max_lab)); rtx prev; int rel_align = 0; + addr_diff_vec_flags flags; + + /* Avoid automatic aggregate initialization. */ + flags = ADDR_DIFF_VEC_FLAGS (body); /* Try to find a known alignment for rel_lab. */ for (prev = rel_lab; *************** shorten_branches (first) *** 1472,1480 **** if (! (varying_length[uid])) { ! insn_current_address += insn_lengths[uid]; continue; } if (GET_CODE (insn) == INSN && GET_CODE (PATTERN (insn)) == SEQUENCE) { int i; --- 1365,1392 ---- if (! (varying_length[uid])) { ! if (GET_CODE (insn) == INSN ! && GET_CODE (PATTERN (insn)) == SEQUENCE) ! { ! int i; ! ! body = PATTERN (insn); ! for (i = 0; i < XVECLEN (body, 0); i++) ! { ! rtx inner_insn = XVECEXP (body, 0, i); ! int inner_uid = INSN_UID (inner_insn); ! ! INSN_ADDRESSES (inner_uid) = insn_current_address; ! ! insn_current_address += insn_lengths[inner_uid]; ! } ! } ! else ! insn_current_address += insn_lengths[uid]; ! continue; } + if (GET_CODE (insn) == INSN && GET_CODE (PATTERN (insn)) == SEQUENCE) { int i; *************** asm_insn_count (body) *** 1549,1556 **** if (GET_CODE (body) == ASM_INPUT) template = XSTR (body, 0); else ! template = decode_asm_operands (body, NULL_PTR, NULL_PTR, ! NULL_PTR, NULL_PTR); for (; *template; template++) if (IS_ASM_LOGICAL_LINE_SEPARATOR (*template) || *template == '\n') --- 1461,1467 ---- if (GET_CODE (body) == ASM_INPUT) template = XSTR (body, 0); else ! template = decode_asm_operands (body, NULL, NULL, NULL, NULL); for (; *template; template++) if (IS_ASM_LOGICAL_LINE_SEPARATOR (*template) || *template == '\n') *************** final_start_function (first, file, optim *** 1593,1629 **** } #endif - /* Initial line number is supposed to be output - before the function's prologue and label - so that the function's address will not appear to be - in the last statement of the preceding function. */ if (NOTE_LINE_NUMBER (first) != NOTE_INSN_DELETED) ! last_linenum = high_block_linenum = high_function_linenum ! = NOTE_LINE_NUMBER (first); ! #if defined (DWARF2_UNWIND_INFO) || defined (IA64_UNWIND_INFO) \ ! || defined (DWARF2_DEBUGGING_INFO) ! dwarf2out_begin_prologue (); ! #endif ! /* For SDB and XCOFF, the function beginning must be marked between ! the function label and the prologue. We always need this, even when ! -g1 was used. Defer on MIPS systems so that parameter descriptions ! follow function entry. */ ! #if defined(SDB_DEBUGGING_INFO) && !defined(MIPS_DEBUGGING_INFO) ! if (write_symbols == SDB_DEBUG) ! sdbout_begin_function (last_linenum); ! else ! #endif ! #ifdef XCOFF_DEBUGGING_INFO ! if (write_symbols == XCOFF_DEBUG) ! xcoffout_begin_function (file, last_linenum); ! else #endif - /* But only output line number for other debug info types if -g2 - or better. */ - if (NOTE_LINE_NUMBER (first) != NOTE_INSN_DELETED) - output_source_line (file, first); #ifdef LEAF_REG_REMAP if (current_function_uses_only_leaf_regs) --- 1504,1519 ---- } #endif if (NOTE_LINE_NUMBER (first) != NOTE_INSN_DELETED) ! notice_source_line (first); ! high_block_linenum = high_function_linenum = last_linenum; ! (*debug_hooks->begin_prologue) (last_linenum, last_filename); ! #if defined (DWARF2_UNWIND_INFO) || defined (IA64_UNWIND_INFO) ! if (write_symbols != DWARF2_DEBUG && write_symbols != VMS_AND_DWARF2_DEBUG) ! dwarf2out_begin_prologue (0, NULL); #endif #ifdef LEAF_REG_REMAP if (current_function_uses_only_leaf_regs) *************** final_start_function (first, file, optim *** 1633,1639 **** /* The Sun386i and perhaps other machines don't work right if the profiling code comes after the prologue. */ #ifdef PROFILE_BEFORE_PROLOGUE ! if (profile_flag) profile_function (file); #endif /* PROFILE_BEFORE_PROLOGUE */ --- 1523,1529 ---- /* The Sun386i and perhaps other machines don't work right if the profiling code comes after the prologue. */ #ifdef PROFILE_BEFORE_PROLOGUE ! if (current_function_profile) profile_function (file); #endif /* PROFILE_BEFORE_PROLOGUE */ *************** final_start_function (first, file, optim *** 1646,1662 **** function. */ if (write_symbols) { - number_blocks (current_function_decl); remove_unnecessary_notes (); /* We never actually put out begin/end notes for the top-level block in the function. But, conceptually, that block is always needed. */ TREE_ASM_WRITTEN (DECL_INITIAL (current_function_decl)) = 1; } - #ifdef FUNCTION_PROLOGUE /* First output the function prologue: code to set up the stack frame. */ ! FUNCTION_PROLOGUE (file, get_frame_size ()); #endif /* If the machine represents the prologue as RTL, the profiling code must --- 1536,1557 ---- function. */ if (write_symbols) { remove_unnecessary_notes (); + reorder_blocks (); + number_blocks (current_function_decl); /* We never actually put out begin/end notes for the top-level block in the function. But, conceptually, that block is always needed. */ TREE_ASM_WRITTEN (DECL_INITIAL (current_function_decl)) = 1; } /* First output the function prologue: code to set up the stack frame. */ ! (*targetm.asm_out.function_prologue) (file, get_frame_size ()); ! ! #ifdef VMS_DEBUGGING_INFO ! /* Output label after the prologue of the function. */ ! if (write_symbols == VMS_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG) ! vmsdbgout_after_prologue (); #endif /* If the machine represents the prologue as RTL, the profiling code must *************** final_start_function (first, file, optim *** 1665,1703 **** if (! HAVE_prologue) #endif profile_after_prologue (file); - - profile_label_no++; - - /* If we are doing basic block profiling, remember a printable version - of the function name. */ - if (profile_block_flag) - { - bb_func_label_num = - add_bb_string ((*decl_printable_name) (current_function_decl, 2), - FALSE); - } } static void profile_after_prologue (file) FILE *file ATTRIBUTE_UNUSED; { - #ifdef FUNCTION_BLOCK_PROFILER - if (profile_block_flag) - { - FUNCTION_BLOCK_PROFILER (file, count_basic_blocks); - } - #endif /* FUNCTION_BLOCK_PROFILER */ - #ifndef PROFILE_BEFORE_PROLOGUE ! if (profile_flag) profile_function (file); #endif /* not PROFILE_BEFORE_PROLOGUE */ } static void profile_function (file) ! FILE *file; { #ifndef NO_PROFILE_COUNTERS int align = MIN (BIGGEST_ALIGNMENT, LONG_TYPE_SIZE); --- 1560,1580 ---- if (! HAVE_prologue) #endif profile_after_prologue (file); } static void profile_after_prologue (file) FILE *file ATTRIBUTE_UNUSED; { #ifndef PROFILE_BEFORE_PROLOGUE ! if (current_function_profile) profile_function (file); #endif /* not PROFILE_BEFORE_PROLOGUE */ } static void profile_function (file) ! FILE *file ATTRIBUTE_UNUSED; { #ifndef NO_PROFILE_COUNTERS int align = MIN (BIGGEST_ALIGNMENT, LONG_TYPE_SIZE); *************** profile_function (file) *** 1714,1721 **** #ifndef NO_PROFILE_COUNTERS data_section (); ASM_OUTPUT_ALIGN (file, floor_log2 (align / BITS_PER_UNIT)); ! ASM_OUTPUT_INTERNAL_LABEL (file, "LP", profile_label_no); ! assemble_integer (const0_rtx, LONG_TYPE_SIZE / BITS_PER_UNIT, 1); #endif function_section (current_function_decl); --- 1591,1598 ---- #ifndef NO_PROFILE_COUNTERS data_section (); ASM_OUTPUT_ALIGN (file, floor_log2 (align / BITS_PER_UNIT)); ! ASM_OUTPUT_INTERNAL_LABEL (file, "LP", current_function_profile_label_no); ! assemble_integer (const0_rtx, LONG_TYPE_SIZE / BITS_PER_UNIT, align, 1); #endif function_section (current_function_decl); *************** profile_function (file) *** 1744,1750 **** #endif #endif ! FUNCTION_PROFILER (file, profile_label_no); #if defined(STATIC_CHAIN_INCOMING_REGNUM) && defined(ASM_OUTPUT_REG_PUSH) if (cxt) --- 1621,1627 ---- #endif #endif ! FUNCTION_PROFILER (file, current_function_profile_label_no); #if defined(STATIC_CHAIN_INCOMING_REGNUM) && defined(ASM_OUTPUT_REG_PUSH) if (cxt) *************** profile_function (file) *** 1776,1916 **** even though not all of them are needed. */ void ! final_end_function (first, file, optimize) ! rtx first ATTRIBUTE_UNUSED; ! FILE *file ATTRIBUTE_UNUSED; ! int optimize ATTRIBUTE_UNUSED; { app_disable (); ! #ifdef SDB_DEBUGGING_INFO ! if (write_symbols == SDB_DEBUG) ! sdbout_end_function (high_function_linenum); ! #endif ! ! #ifdef DWARF_DEBUGGING_INFO ! if (write_symbols == DWARF_DEBUG) ! dwarfout_end_function (); ! #endif ! ! #ifdef XCOFF_DEBUGGING_INFO ! if (write_symbols == XCOFF_DEBUG) ! xcoffout_end_function (file, high_function_linenum); ! #endif - #ifdef FUNCTION_EPILOGUE /* Finally, output the function epilogue: code to restore the stack frame and return to the caller. */ ! FUNCTION_EPILOGUE (file, get_frame_size ()); ! #endif ! ! #ifdef SDB_DEBUGGING_INFO ! if (write_symbols == SDB_DEBUG) ! sdbout_end_epilogue (); ! #endif ! #ifdef DWARF_DEBUGGING_INFO ! if (write_symbols == DWARF_DEBUG) ! dwarfout_end_epilogue (); ! #endif ! #if defined (DWARF2_UNWIND_INFO) || defined (DWARF2_DEBUGGING_INFO) ! if (dwarf2out_do_frame ()) dwarf2out_end_epilogue (); #endif - - #ifdef XCOFF_DEBUGGING_INFO - if (write_symbols == XCOFF_DEBUG) - xcoffout_end_epilogue (file); - #endif - - bb_func_label_num = -1; /* not in function, nuke label # */ - - /* If FUNCTION_EPILOGUE is not defined, then the function body - itself contains return instructions wherever needed. */ - } - - /* Add a block to the linked list that remembers the current line/file/function - for basic block profiling. Emit the label in front of the basic block and - the instructions that increment the count field. */ - - static void - add_bb (file) - FILE *file; - { - struct bb_list *ptr = - (struct bb_list *) permalloc (sizeof (struct bb_list)); - - /* Add basic block to linked list. */ - ptr->next = 0; - ptr->line_num = last_linenum; - ptr->file_label_num = bb_file_label_num; - ptr->func_label_num = bb_func_label_num; - *bb_tail = ptr; - bb_tail = &ptr->next; - - /* Enable the table of basic-block use counts - to point at the code it applies to. */ - ASM_OUTPUT_INTERNAL_LABEL (file, "LPB", count_basic_blocks); - - /* Before first insn of this basic block, increment the - count of times it was entered. */ - #ifdef BLOCK_PROFILER - BLOCK_PROFILER (file, count_basic_blocks); - #endif - #ifdef HAVE_cc0 - CC_STATUS_INIT; - #endif - - new_block = 0; - count_basic_blocks++; - } - - /* Add a string to be used for basic block profiling. */ - - static int - add_bb_string (string, perm_p) - const char *string; - int perm_p; - { - int len; - struct bb_str *ptr = 0; - - if (!string) - { - string = ""; - perm_p = TRUE; - } - - /* Allocate a new string if the current string isn't permanent. If - the string is permanent search for the same string in other - allocations. */ - - len = strlen (string) + 1; - if (!perm_p) - { - char *p = (char *) permalloc (len); - memcpy (p, string, len); - string = p; - } - else - for (ptr = sbb_head; ptr != (struct bb_str *) 0; ptr = ptr->next) - if (ptr->string == string) - break; - - /* Allocate a new string block if we need to. */ - if (!ptr) - { - ptr = (struct bb_str *) permalloc (sizeof (*ptr)); - ptr->next = 0; - ptr->length = len; - ptr->label_num = sbb_label_num++; - ptr->string = string; - *sbb_tail = ptr; - sbb_tail = &ptr->next; - } - - return ptr->label_num; } /* Output assembler code for some insns: all or part of a function. --- 1653,1676 ---- even though not all of them are needed. */ void ! final_end_function () { app_disable (); ! (*debug_hooks->end_function) (high_function_linenum); /* Finally, output the function epilogue: code to restore the stack frame and return to the caller. */ ! (*targetm.asm_out.function_epilogue) (asm_out_file, get_frame_size ()); ! /* And debug output. */ ! (*debug_hooks->end_epilogue) (); ! #if defined (DWARF2_UNWIND_INFO) ! if (write_symbols != DWARF2_DEBUG && write_symbols != VMS_AND_DWARF2_DEBUG ! && dwarf2out_do_frame ()) dwarf2out_end_epilogue (); #endif } /* Output assembler code for some insns: all or part of a function. *************** final (first, file, optimize, prescan) *** 1931,1937 **** int optimize; int prescan; { ! register rtx insn; int max_line = 0; int max_uid = 0; --- 1691,1697 ---- int optimize; int prescan; { ! rtx insn; int max_line = 0; int max_uid = 0; *************** final (first, file, optimize, prescan) *** 1955,1962 **** && NOTE_LINE_NUMBER (insn) == NOTE_LINE_NUMBER (last) && NOTE_SOURCE_FILE (insn) == NOTE_SOURCE_FILE (last))) { ! NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED; ! NOTE_SOURCE_FILE (insn) = 0; continue; } last = insn; --- 1715,1721 ---- && NOTE_LINE_NUMBER (insn) == NOTE_LINE_NUMBER (last) && NOTE_SOURCE_FILE (insn) == NOTE_SOURCE_FILE (last))) { ! delete_insn (insn); /* Use delete_note. */ continue; } last = insn; *************** final (first, file, optimize, prescan) *** 2002,2008 **** for (insn = NEXT_INSN (first); insn;) { #ifdef HAVE_ATTR_length ! if (INSN_UID (insn) >= INSN_ADDRESSES_SIZE ()) { #ifdef STACK_REGS /* Irritatingly, the reg-stack pass is creating new instructions --- 1761,1767 ---- for (insn = NEXT_INSN (first); insn;) { #ifdef HAVE_ATTR_length ! if ((unsigned) INSN_UID (insn) >= INSN_ADDRESSES_SIZE ()) { #ifdef STACK_REGS /* Irritatingly, the reg-stack pass is creating new instructions *************** final (first, file, optimize, prescan) *** 2022,2032 **** insn = final_scan_insn (insn, file, optimize, prescan, 0); } - /* Do basic-block profiling here - if the last insn was a conditional branch. */ - if (profile_block_flag && new_block) - add_bb (file); - free (line_note_exists); line_note_exists = NULL; } --- 1781,1786 ---- *************** final_scan_insn (insn, file, optimize, p *** 2091,2100 **** case NOTE_INSN_DELETED: case NOTE_INSN_LOOP_BEG: case NOTE_INSN_LOOP_END: case NOTE_INSN_LOOP_CONT: case NOTE_INSN_LOOP_VTOP: case NOTE_INSN_FUNCTION_END: - case NOTE_INSN_SETJMP: case NOTE_INSN_REPEATED_LINE_NUMBER: case NOTE_INSN_RANGE_BEG: case NOTE_INSN_RANGE_END: --- 1845,1854 ---- case NOTE_INSN_DELETED: case NOTE_INSN_LOOP_BEG: case NOTE_INSN_LOOP_END: + case NOTE_INSN_LOOP_END_TOP_COND: case NOTE_INSN_LOOP_CONT: case NOTE_INSN_LOOP_VTOP: case NOTE_INSN_FUNCTION_END: case NOTE_INSN_REPEATED_LINE_NUMBER: case NOTE_INSN_RANGE_BEG: case NOTE_INSN_RANGE_END: *************** final_scan_insn (insn, file, optimize, p *** 2122,2165 **** break; case NOTE_INSN_PROLOGUE_END: ! #ifdef FUNCTION_END_PROLOGUE ! FUNCTION_END_PROLOGUE (file); ! #endif profile_after_prologue (file); break; case NOTE_INSN_EPILOGUE_BEG: ! #ifdef FUNCTION_BEGIN_EPILOGUE ! FUNCTION_BEGIN_EPILOGUE (file); ! #endif break; case NOTE_INSN_FUNCTION_BEG: ! #if defined(SDB_DEBUGGING_INFO) && defined(MIPS_DEBUGGING_INFO) ! /* MIPS stabs require the parameter descriptions to be after the ! function entry point rather than before. */ ! if (write_symbols == SDB_DEBUG) ! { ! app_disable (); ! sdbout_begin_function (last_linenum); ! } ! #endif ! #ifdef DWARF_DEBUGGING_INFO ! /* This outputs a marker where the function body starts, so it ! must be after the prologue. */ ! if (write_symbols == DWARF_DEBUG) ! { ! app_disable (); ! dwarfout_begin_function (); ! } ! #endif break; case NOTE_INSN_BLOCK_BEG: if (debug_info_level == DINFO_LEVEL_NORMAL || debug_info_level == DINFO_LEVEL_VERBOSE || write_symbols == DWARF_DEBUG ! || write_symbols == DWARF2_DEBUG) { int n = BLOCK_NUMBER (NOTE_BLOCK (insn)); --- 1876,1901 ---- break; case NOTE_INSN_PROLOGUE_END: ! (*targetm.asm_out.function_end_prologue) (file); profile_after_prologue (file); break; case NOTE_INSN_EPILOGUE_BEG: ! (*targetm.asm_out.function_begin_epilogue) (file); break; case NOTE_INSN_FUNCTION_BEG: ! app_disable (); ! (*debug_hooks->end_prologue) (last_linenum); break; case NOTE_INSN_BLOCK_BEG: if (debug_info_level == DINFO_LEVEL_NORMAL || debug_info_level == DINFO_LEVEL_VERBOSE || write_symbols == DWARF_DEBUG ! || write_symbols == DWARF2_DEBUG ! || write_symbols == VMS_AND_DWARF2_DEBUG ! || write_symbols == VMS_DEBUG) { int n = BLOCK_NUMBER (NOTE_BLOCK (insn)); *************** final_scan_insn (insn, file, optimize, p *** 2167,2193 **** ++block_depth; high_block_linenum = last_linenum; ! /* Output debugging info about the symbol-block beginning. */ ! #ifdef SDB_DEBUGGING_INFO ! if (write_symbols == SDB_DEBUG) ! sdbout_begin_block (file, last_linenum, n); ! #endif ! #ifdef XCOFF_DEBUGGING_INFO ! if (write_symbols == XCOFF_DEBUG) ! xcoffout_begin_block (file, last_linenum, n); ! #endif ! #ifdef DBX_DEBUGGING_INFO ! if (write_symbols == DBX_DEBUG) ! ASM_OUTPUT_INTERNAL_LABEL (file, "LBB", n); ! #endif ! #ifdef DWARF_DEBUGGING_INFO ! if (write_symbols == DWARF_DEBUG) ! dwarfout_begin_block (n); ! #endif ! #ifdef DWARF2_DEBUGGING_INFO ! if (write_symbols == DWARF2_DEBUG) ! dwarf2out_begin_block (n); ! #endif /* Mark this block as output. */ TREE_ASM_WRITTEN (NOTE_BLOCK (insn)) = 1; --- 1903,1910 ---- ++block_depth; high_block_linenum = last_linenum; ! /* Output debugging info about the symbol-block beginning. */ ! (*debug_hooks->begin_block) (last_linenum, n); /* Mark this block as output. */ TREE_ASM_WRITTEN (NOTE_BLOCK (insn)) = 1; *************** final_scan_insn (insn, file, optimize, p *** 2198,2204 **** if (debug_info_level == DINFO_LEVEL_NORMAL || debug_info_level == DINFO_LEVEL_VERBOSE || write_symbols == DWARF_DEBUG ! || write_symbols == DWARF2_DEBUG) { int n = BLOCK_NUMBER (NOTE_BLOCK (insn)); --- 1915,1923 ---- if (debug_info_level == DINFO_LEVEL_NORMAL || debug_info_level == DINFO_LEVEL_VERBOSE || write_symbols == DWARF_DEBUG ! || write_symbols == DWARF2_DEBUG ! || write_symbols == VMS_AND_DWARF2_DEBUG ! || write_symbols == VMS_DEBUG) { int n = BLOCK_NUMBER (NOTE_BLOCK (insn)); *************** final_scan_insn (insn, file, optimize, p *** 2209,2234 **** if (block_depth < 0) abort (); ! #ifdef XCOFF_DEBUGGING_INFO ! if (write_symbols == XCOFF_DEBUG) ! xcoffout_end_block (file, high_block_linenum, n); ! #endif ! #ifdef DBX_DEBUGGING_INFO ! if (write_symbols == DBX_DEBUG) ! ASM_OUTPUT_INTERNAL_LABEL (file, "LBE", n); ! #endif ! #ifdef SDB_DEBUGGING_INFO ! if (write_symbols == SDB_DEBUG) ! sdbout_end_block (file, high_block_linenum, n); ! #endif ! #ifdef DWARF_DEBUGGING_INFO ! if (write_symbols == DWARF_DEBUG) ! dwarfout_end_block (n); ! #endif ! #ifdef DWARF2_DEBUGGING_INFO ! if (write_symbols == DWARF2_DEBUG) ! dwarf2out_end_block (n); ! #endif } break; --- 1928,1934 ---- if (block_depth < 0) abort (); ! (*debug_hooks->end_block) (high_block_linenum, n); } break; *************** final_scan_insn (insn, file, optimize, p *** 2248,2254 **** /* This note is a line-number. */ { ! register rtx note; int note_after = 0; /* If there is anything real after this note, output it. --- 1948,1954 ---- /* This note is a line-number. */ { ! rtx note; int note_after = 0; /* If there is anything real after this note, output it. *************** final_scan_insn (insn, file, optimize, p *** 2285,2291 **** /* Output this line note if it is the first or the last line note in a row. */ if (!note_after) ! output_source_line (file, insn); } break; } --- 1985,1994 ---- /* Output this line note if it is the first or the last line note in a row. */ if (!note_after) ! { ! notice_source_line (insn); ! (*debug_hooks->source_line) (last_linenum, last_filename); ! } } break; } *************** final_scan_insn (insn, file, optimize, p *** 2309,2319 **** #endif if (align && NEXT_INSN (insn)) #ifdef ASM_OUTPUT_MAX_SKIP_ALIGN ! ASM_OUTPUT_MAX_SKIP_ALIGN (file, align, max_skip); #else ! ASM_OUTPUT_ALIGN (file, align); #endif } #ifdef HAVE_cc0 CC_STATUS_INIT; --- 2012,2024 ---- #endif if (align && NEXT_INSN (insn)) + { #ifdef ASM_OUTPUT_MAX_SKIP_ALIGN ! ASM_OUTPUT_MAX_SKIP_ALIGN (file, align, max_skip); #else ! ASM_OUTPUT_ALIGN (file, align); #endif + } } #ifdef HAVE_cc0 CC_STATUS_INIT; *************** final_scan_insn (insn, file, optimize, p *** 2347,2359 **** new_block = 1; #ifdef FINAL_PRESCAN_LABEL ! FINAL_PRESCAN_INSN (insn, NULL_PTR, 0); #endif ! #ifdef SDB_DEBUGGING_INFO ! if (write_symbols == SDB_DEBUG && LABEL_NAME (insn)) ! sdbout_label (insn); ! #endif if (app_on) { fputs (ASM_APP_OFF, file); --- 2052,2063 ---- new_block = 1; #ifdef FINAL_PRESCAN_LABEL ! FINAL_PRESCAN_INSN (insn, NULL, 0); #endif ! if (LABEL_NAME (insn)) ! (*debug_hooks->label) (insn); ! if (app_on) { fputs (ASM_APP_OFF, file); *************** final_scan_insn (insn, file, optimize, p *** 2378,2389 **** #else if (! JUMP_TABLES_IN_TEXT_SECTION) { readonly_data_section (); ! #ifdef READONLY_DATA_SECTION ! ASM_OUTPUT_ALIGN (file, ! exact_log2 (BIGGEST_ALIGNMENT ! / BITS_PER_UNIT)); ! #endif /* READONLY_DATA_SECTION */ } else function_section (current_function_decl); --- 2082,2097 ---- #else if (! JUMP_TABLES_IN_TEXT_SECTION) { + int log_align; + readonly_data_section (); ! ! #ifdef ADDR_VEC_ALIGN ! log_align = ADDR_VEC_ALIGN (NEXT_INSN (insn)); ! #else ! log_align = exact_log2 (BIGGEST_ALIGNMENT / BITS_PER_UNIT); ! #endif ! ASM_OUTPUT_ALIGN (file, log_align); } else function_section (current_function_decl); *************** final_scan_insn (insn, file, optimize, p *** 2409,2420 **** default: { ! register rtx body = PATTERN (insn); int insn_code_number; const char *template; - #ifdef HAVE_cc0 rtx note; - #endif /* An INSN, JUMP_INSN or CALL_INSN. First check for special kinds that recog doesn't recognize. */ --- 2117,2126 ---- default: { ! rtx body = PATTERN (insn); int insn_code_number; const char *template; rtx note; /* An INSN, JUMP_INSN or CALL_INSN. First check for special kinds that recog doesn't recognize. */ *************** final_scan_insn (insn, file, optimize, p *** 2443,2449 **** if (GET_CODE (body) == ADDR_VEC || GET_CODE (body) == ADDR_DIFF_VEC) { #if !(defined(ASM_OUTPUT_ADDR_VEC) || defined(ASM_OUTPUT_ADDR_DIFF_VEC)) ! register int vlen, idx; #endif if (prescan > 0) --- 2149,2155 ---- if (GET_CODE (body) == ADDR_VEC || GET_CODE (body) == ADDR_DIFF_VEC) { #if !(defined(ASM_OUTPUT_ADDR_VEC) || defined(ASM_OUTPUT_ADDR_DIFF_VEC)) ! int vlen, idx; #endif if (prescan > 0) *************** final_scan_insn (insn, file, optimize, p *** 2510,2532 **** break; } - /* Do basic-block profiling when we reach a new block. - Done here to avoid jump tables. */ - if (profile_block_flag && new_block) - add_bb (file); - if (GET_CODE (body) == ASM_INPUT) { /* There's no telling what that did to the condition codes. */ CC_STATUS_INIT; if (prescan > 0) break; ! if (! app_on) { ! fputs (ASM_APP_ON, file); ! app_on = 1; } - fprintf (asm_out_file, "\t%s\n", XSTR (body, 0)); break; } --- 2216,2239 ---- break; } if (GET_CODE (body) == ASM_INPUT) { + const char *string = XSTR (body, 0); + /* There's no telling what that did to the condition codes. */ CC_STATUS_INIT; if (prescan > 0) break; ! ! if (string[0]) { ! if (! app_on) ! { ! fputs (ASM_APP_ON, file); ! app_on = 1; ! } ! fprintf (asm_out_file, "\t%s\n", string); } break; } *************** final_scan_insn (insn, file, optimize, p *** 2542,2562 **** if (prescan > 0) break; - if (! app_on) - { - fputs (ASM_APP_ON, file); - app_on = 1; - } - /* Get out the operand values. */ ! string = decode_asm_operands (body, ops, NULL_PTR, ! NULL_PTR, NULL_PTR); /* Inhibit aborts on what would otherwise be compiler bugs. */ insn_noperands = noperands; this_is_asm_operands = insn; /* Output the insn using them. */ ! output_asm_insn (string, ops); this_is_asm_operands = 0; break; } --- 2249,2271 ---- if (prescan > 0) break; /* Get out the operand values. */ ! string = decode_asm_operands (body, ops, NULL, NULL, NULL); /* Inhibit aborts on what would otherwise be compiler bugs. */ insn_noperands = noperands; this_is_asm_operands = insn; /* Output the insn using them. */ ! if (string[0]) ! { ! if (! app_on) ! { ! fputs (ASM_APP_ON, file); ! app_on = 1; ! } ! output_asm_insn (string, ops); ! } ! this_is_asm_operands = 0; break; } *************** final_scan_insn (insn, file, optimize, p *** 2570,2576 **** if (GET_CODE (body) == SEQUENCE) { /* A delayed-branch sequence */ ! register int i; rtx next; if (prescan > 0) --- 2279,2285 ---- if (GET_CODE (body) == SEQUENCE) { /* A delayed-branch sequence */ ! int i; rtx next; if (prescan > 0) *************** final_scan_insn (insn, file, optimize, p *** 2613,2634 **** { CC_STATUS_INIT; } - - /* Following a conditional branch sequence, we have a new basic - block. */ - if (profile_block_flag) - { - rtx insn = XVECEXP (body, 0, 0); - rtx body = PATTERN (insn); - - if ((GET_CODE (insn) == JUMP_INSN && GET_CODE (body) == SET - && GET_CODE (SET_SRC (body)) != LABEL_REF) - || (GET_CODE (insn) == JUMP_INSN - && GET_CODE (body) == PARALLEL - && GET_CODE (XVECEXP (body, 0, 0)) == SET - && GET_CODE (SET_SRC (XVECEXP (body, 0, 0))) != LABEL_REF)) - new_block = 1; - } break; } --- 2322,2327 ---- *************** final_scan_insn (insn, file, optimize, p *** 2658,2672 **** && insn != last_ignored_compare) { if (GET_CODE (SET_SRC (set)) == SUBREG) ! SET_SRC (set) = alter_subreg (SET_SRC (set)); else if (GET_CODE (SET_SRC (set)) == COMPARE) { if (GET_CODE (XEXP (SET_SRC (set), 0)) == SUBREG) XEXP (SET_SRC (set), 0) ! = alter_subreg (XEXP (SET_SRC (set), 0)); if (GET_CODE (XEXP (SET_SRC (set), 1)) == SUBREG) XEXP (SET_SRC (set), 1) ! = alter_subreg (XEXP (SET_SRC (set), 1)); } if ((cc_status.value1 != 0 && rtx_equal_p (SET_SRC (set), cc_status.value1)) --- 2351,2365 ---- && insn != last_ignored_compare) { if (GET_CODE (SET_SRC (set)) == SUBREG) ! SET_SRC (set) = alter_subreg (&SET_SRC (set)); else if (GET_CODE (SET_SRC (set)) == COMPARE) { if (GET_CODE (XEXP (SET_SRC (set), 0)) == SUBREG) XEXP (SET_SRC (set), 0) ! = alter_subreg (&XEXP (SET_SRC (set), 0)); if (GET_CODE (XEXP (SET_SRC (set), 1)) == SUBREG) XEXP (SET_SRC (set), 1) ! = alter_subreg (&XEXP (SET_SRC (set), 1)); } if ((cc_status.value1 != 0 && rtx_equal_p (SET_SRC (set), cc_status.value1)) *************** final_scan_insn (insn, file, optimize, p *** 2674,2680 **** && rtx_equal_p (SET_SRC (set), cc_status.value2))) { /* Don't delete insn if it has an addressing side-effect. */ ! if (! FIND_REG_INC_NOTE (insn, 0) /* or if anything in it is volatile. */ && ! volatile_refs_p (PATTERN (insn))) { --- 2367,2373 ---- && rtx_equal_p (SET_SRC (set), cc_status.value2))) { /* Don't delete insn if it has an addressing side-effect. */ ! if (! FIND_REG_INC_NOTE (insn, NULL_RTX) /* or if anything in it is volatile. */ && ! volatile_refs_p (PATTERN (insn))) { *************** final_scan_insn (insn, file, optimize, p *** 2687,2703 **** } #endif - /* Following a conditional branch, we have a new basic block. - But if we are inside a sequence, the new block starts after the - last insn of the sequence. */ - if (profile_block_flag && final_sequence == 0 - && ((GET_CODE (insn) == JUMP_INSN && GET_CODE (body) == SET - && GET_CODE (SET_SRC (body)) != LABEL_REF) - || (GET_CODE (insn) == JUMP_INSN && GET_CODE (body) == PARALLEL - && GET_CODE (XVECEXP (body, 0, 0)) == SET - && GET_CODE (SET_SRC (XVECEXP (body, 0, 0))) != LABEL_REF))) - new_block = 1; - #ifndef STACK_REGS /* Don't bother outputting obvious no-ops, even without -O. This optimization is fast and doesn't interfere with debugging. --- 2380,2385 ---- *************** final_scan_insn (insn, file, optimize, p *** 2734,2740 **** It may also return 1 meaning condition now always true or -1 meaning condition now always false or 2 meaning condition nontrivial but altered. */ ! register int result = alter_cond (XEXP (SET_SRC (body), 0)); /* If condition now has fixed value, replace the IF_THEN_ELSE with its then-operand or its else-operand. */ if (result == 1) --- 2416,2422 ---- It may also return 1 meaning condition now always true or -1 meaning condition now always false or 2 meaning condition nontrivial but altered. */ ! int result = alter_cond (XEXP (SET_SRC (body), 0)); /* If condition now has fixed value, replace the IF_THEN_ELSE with its then-operand or its else-operand. */ if (result == 1) *************** final_scan_insn (insn, file, optimize, p *** 2747,2755 **** (It would not be recognized.) */ if (SET_SRC (body) == pc_rtx) { ! PUT_CODE (insn, NOTE); ! NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED; ! NOTE_SOURCE_FILE (insn) = 0; break; } else if (GET_CODE (SET_SRC (body)) == RETURN) --- 2429,2435 ---- (It would not be recognized.) */ if (SET_SRC (body) == pc_rtx) { ! delete_insn (insn); break; } else if (GET_CODE (SET_SRC (body)) == RETURN) *************** final_scan_insn (insn, file, optimize, p *** 2797,2803 **** case EQ: case NE: { ! register int result; if (XEXP (cond_rtx, 0) != cc0_rtx) break; result = alter_cond (cond_rtx); --- 2477,2483 ---- case EQ: case NE: { ! int result; if (XEXP (cond_rtx, 0) != cc0_rtx) break; result = alter_cond (cond_rtx); *************** final_scan_insn (insn, file, optimize, p *** 2808,2818 **** else if (result == 2) INSN_CODE (insn) = -1; if (SET_DEST (set) == SET_SRC (set)) ! { ! PUT_CODE (insn, NOTE); ! NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED; ! NOTE_SOURCE_FILE (insn) = 0; ! } } break; --- 2488,2494 ---- else if (result == 2) INSN_CODE (insn) = -1; if (SET_DEST (set) == SET_SRC (set)) ! delete_insn (insn); } break; *************** final_scan_insn (insn, file, optimize, p *** 2834,2840 **** if (next != 0 && next != NEXT_INSN (insn)) { rtx prev = PREV_INSN (insn); - rtx note; for (note = NEXT_INSN (insn); note != next; note = NEXT_INSN (note)) --- 2510,2515 ---- *************** final_scan_insn (insn, file, optimize, p *** 2871,2877 **** print_rtl_single (asm_out_file, insn); print_rtx_head = ""; } ! if (! constrain_operands_cached (1)) fatal_insn_not_found (insn); --- 2546,2552 ---- print_rtl_single (asm_out_file, insn); print_rtx_head = ""; } ! if (! constrain_operands_cached (1)) fatal_insn_not_found (insn); *************** final_scan_insn (insn, file, optimize, p *** 2930,2939 **** prev = PREV_INSN (prev)) { if (GET_CODE (prev) == NOTE) ! { ! NOTE_LINE_NUMBER (prev) = NOTE_INSN_DELETED; ! NOTE_SOURCE_FILE (prev) = 0; ! } } return prev; --- 2605,2611 ---- prev = PREV_INSN (prev)) { if (GET_CODE (prev) == NOTE) ! delete_insn (prev); /* Use delete_note. */ } return prev; *************** final_scan_insn (insn, file, optimize, p *** 2947,2953 **** /* If we didn't split the insn, go away. */ if (new == insn && PATTERN (new) == body) ! fatal_insn ("Could not split insn", insn); #ifdef HAVE_ATTR_length /* This instruction should have been split in shorten_branches, --- 2619,2625 ---- /* If we didn't split the insn, go away. */ if (new == insn && PATTERN (new) == body) ! fatal_insn ("could not split insn", insn); #ifdef HAVE_ATTR_length /* This instruction should have been split in shorten_branches, *************** final_scan_insn (insn, file, optimize, p *** 2991,2996 **** --- 2663,2674 ---- INSN_DELETED_P (insn) = 1; #endif + /* Emit information for vtable gc. */ + note = find_reg_note (insn, REG_VTABLE_REF, NULL_RTX); + if (note) + assemble_vtable_entry (XEXP (XEXP (note, 0), 0), + INTVAL (XEXP (XEXP (note, 0), 1))); + current_output_insn = debug_insn = 0; } } *************** final_scan_insn (insn, file, optimize, p *** 3001,3066 **** based on the NOTE-insn INSN, assumed to be a line number. */ static void ! output_source_line (file, insn) ! FILE *file ATTRIBUTE_UNUSED; rtx insn; { ! register const char *filename = NOTE_SOURCE_FILE (insn); ! ! /* Remember filename for basic block profiling. ! Filenames are allocated on the permanent obstack ! or are passed in ARGV, so we don't have to save ! the string. */ ! ! if (profile_block_flag && last_filename != filename) ! bb_file_label_num = add_bb_string (filename, TRUE); last_filename = filename; last_linenum = NOTE_LINE_NUMBER (insn); high_block_linenum = MAX (last_linenum, high_block_linenum); high_function_linenum = MAX (last_linenum, high_function_linenum); - - if (write_symbols != NO_DEBUG) - { - #ifdef SDB_DEBUGGING_INFO - if (write_symbols == SDB_DEBUG - #if 0 /* People like having line numbers even in wrong file! */ - /* COFF can't handle multiple source files--lose, lose. */ - && !strcmp (filename, main_input_filename) - #endif - /* COFF relative line numbers must be positive. */ - && last_linenum > sdb_begin_function_line) - { - #ifdef ASM_OUTPUT_SOURCE_LINE - ASM_OUTPUT_SOURCE_LINE (file, last_linenum); - #else - fprintf (file, "\t.ln\t%d\n", - ((sdb_begin_function_line > -1) - ? last_linenum - sdb_begin_function_line : 1)); - #endif - } - #endif - - #if defined (DBX_DEBUGGING_INFO) - if (write_symbols == DBX_DEBUG) - dbxout_source_line (file, filename, NOTE_LINE_NUMBER (insn)); - #endif - - #if defined (XCOFF_DEBUGGING_INFO) - if (write_symbols == XCOFF_DEBUG) - xcoffout_source_line (file, filename, insn); - #endif - - #ifdef DWARF_DEBUGGING_INFO - if (write_symbols == DWARF_DEBUG) - dwarfout_line (filename, NOTE_LINE_NUMBER (insn)); - #endif - - #ifdef DWARF2_DEBUGGING_INFO - if (write_symbols == DWARF2_DEBUG) - dwarf2out_line (filename, NOTE_LINE_NUMBER (insn)); - #endif - } } /* For each operand in INSN, simplify (subreg (reg)) so that it refers --- 2679,2693 ---- based on the NOTE-insn INSN, assumed to be a line number. */ static void ! notice_source_line (insn) rtx insn; { ! const char *filename = NOTE_SOURCE_FILE (insn); last_filename = filename; last_linenum = NOTE_LINE_NUMBER (insn); high_block_linenum = MAX (last_linenum, high_block_linenum); high_function_linenum = MAX (last_linenum, high_function_linenum); } /* For each operand in INSN, simplify (subreg (reg)) so that it refers *************** cleanup_subreg_operands (insn) *** 3074,3095 **** extract_insn_cached (insn); for (i = 0; i < recog_data.n_operands; i++) { ! if (GET_CODE (recog_data.operand[i]) == SUBREG) ! recog_data.operand[i] = alter_subreg (recog_data.operand[i]); else if (GET_CODE (recog_data.operand[i]) == PLUS || GET_CODE (recog_data.operand[i]) == MULT || GET_CODE (recog_data.operand[i]) == MEM) ! recog_data.operand[i] = walk_alter_subreg (recog_data.operand[i]); } for (i = 0; i < recog_data.n_dups; i++) { if (GET_CODE (*recog_data.dup_loc[i]) == SUBREG) ! *recog_data.dup_loc[i] = alter_subreg (*recog_data.dup_loc[i]); else if (GET_CODE (*recog_data.dup_loc[i]) == PLUS || GET_CODE (*recog_data.dup_loc[i]) == MULT || GET_CODE (*recog_data.dup_loc[i]) == MEM) ! *recog_data.dup_loc[i] = walk_alter_subreg (*recog_data.dup_loc[i]); } } --- 2701,2727 ---- extract_insn_cached (insn); for (i = 0; i < recog_data.n_operands; i++) { ! /* The following test cannot use recog_data.operand when tesing ! for a SUBREG: the underlying object might have been changed ! already if we are inside a match_operator expression that ! matches the else clause. Instead we test the underlying ! expression directly. */ ! if (GET_CODE (*recog_data.operand_loc[i]) == SUBREG) ! recog_data.operand[i] = alter_subreg (recog_data.operand_loc[i]); else if (GET_CODE (recog_data.operand[i]) == PLUS || GET_CODE (recog_data.operand[i]) == MULT || GET_CODE (recog_data.operand[i]) == MEM) ! recog_data.operand[i] = walk_alter_subreg (recog_data.operand_loc[i]); } for (i = 0; i < recog_data.n_dups; i++) { if (GET_CODE (*recog_data.dup_loc[i]) == SUBREG) ! *recog_data.dup_loc[i] = alter_subreg (recog_data.dup_loc[i]); else if (GET_CODE (*recog_data.dup_loc[i]) == PLUS || GET_CODE (*recog_data.dup_loc[i]) == MULT || GET_CODE (*recog_data.dup_loc[i]) == MEM) ! *recog_data.dup_loc[i] = walk_alter_subreg (recog_data.dup_loc[i]); } } *************** cleanup_subreg_operands (insn) *** 3097,3179 **** based on the thing it is a subreg of. */ rtx ! alter_subreg (x) ! register rtx x; { ! register rtx y = SUBREG_REG (x); ! ! if (GET_CODE (y) == SUBREG) ! y = alter_subreg (y); ! ! /* If reload is operating, we may be replacing inside this SUBREG. ! Check for that and make a new one if so. */ ! if (reload_in_progress && find_replacement (&SUBREG_REG (x)) != 0) ! x = copy_rtx (x); ! ! if (GET_CODE (y) == REG) ! { ! int regno; ! /* If the word size is larger than the size of this register, ! adjust the register number to compensate. */ ! /* ??? Note that this just catches stragglers created by/for ! integrate. It would be better if we either caught these ! earlier, or kept _all_ subregs until now and eliminate ! gen_lowpart and friends. */ ! #ifdef ALTER_HARD_SUBREG ! regno = ALTER_HARD_SUBREG (GET_MODE (x), SUBREG_WORD (x), ! GET_MODE (y), REGNO (y)); ! #else ! regno = REGNO (y) + SUBREG_WORD (x); ! #endif ! PUT_CODE (x, REG); ! REGNO (x) = regno; ! ORIGINAL_REGNO (x) = ORIGINAL_REGNO (y); ! /* This field has a different meaning for REGs and SUBREGs. Make sure ! to clear it! */ ! x->used = 0; ! } ! else if (GET_CODE (y) == MEM) { ! register int offset = SUBREG_WORD (x) * UNITS_PER_WORD; ! if (BYTES_BIG_ENDIAN) ! offset -= (MIN (UNITS_PER_WORD, GET_MODE_SIZE (GET_MODE (x))) ! - MIN (UNITS_PER_WORD, GET_MODE_SIZE (GET_MODE (y)))); ! PUT_CODE (x, MEM); ! MEM_COPY_ATTRIBUTES (x, y); ! XEXP (x, 0) = plus_constant (XEXP (y, 0), offset); } ! return x; } /* Do alter_subreg on all the SUBREGs contained in X. */ static rtx ! walk_alter_subreg (x) ! rtx x; { switch (GET_CODE (x)) { case PLUS: case MULT: ! XEXP (x, 0) = walk_alter_subreg (XEXP (x, 0)); ! XEXP (x, 1) = walk_alter_subreg (XEXP (x, 1)); break; case MEM: ! XEXP (x, 0) = walk_alter_subreg (XEXP (x, 0)); break; case SUBREG: ! return alter_subreg (x); default: break; } ! return x; } #ifdef HAVE_cc0 --- 2729,2796 ---- based on the thing it is a subreg of. */ rtx ! alter_subreg (xp) ! rtx *xp; { ! rtx x = *xp; ! rtx y = SUBREG_REG (x); ! /* simplify_subreg does not remove subreg from volatile references. ! We are required to. */ ! if (GET_CODE (y) == MEM) ! *xp = adjust_address (y, GET_MODE (x), SUBREG_BYTE (x)); ! else { ! rtx new = simplify_subreg (GET_MODE (x), y, GET_MODE (y), ! SUBREG_BYTE (x)); ! if (new != 0) ! *xp = new; ! /* Simplify_subreg can't handle some REG cases, but we have to. */ ! else if (GET_CODE (y) == REG) ! { ! unsigned int regno = subreg_hard_regno (x, 1); ! PUT_CODE (x, REG); ! REGNO (x) = regno; ! ORIGINAL_REGNO (x) = ORIGINAL_REGNO (y); ! /* This field has a different meaning for REGs and SUBREGs. Make ! sure to clear it! */ ! x->used = 0; ! } ! else ! abort (); } ! return *xp; } /* Do alter_subreg on all the SUBREGs contained in X. */ static rtx ! walk_alter_subreg (xp) ! rtx *xp; { + rtx x = *xp; switch (GET_CODE (x)) { case PLUS: case MULT: ! XEXP (x, 0) = walk_alter_subreg (&XEXP (x, 0)); ! XEXP (x, 1) = walk_alter_subreg (&XEXP (x, 1)); break; case MEM: ! XEXP (x, 0) = walk_alter_subreg (&XEXP (x, 0)); break; case SUBREG: ! return alter_subreg (xp); default: break; } ! return *xp; } #ifdef HAVE_cc0 *************** walk_alter_subreg (x) *** 3189,3195 **** static int alter_cond (cond) ! register rtx cond; { int value = 0; --- 2806,2812 ---- static int alter_cond (cond) ! rtx cond; { int value = 0; *************** alter_cond (cond) *** 3342,3361 **** In an `asm', it's the user's fault; otherwise, the compiler's fault. */ void ! output_operand_lossage (msgid) ! const char *msgid; { if (this_is_asm_operands) ! error_for_asm (this_is_asm_operands, "invalid `asm': %s", _(msgid)); else ! { ! error ("output_operand: %s", _(msgid)); ! abort (); ! } } /* Output of assembler code from a template, and its subroutines. */ /* Output text from TEMPLATE to the assembler output file, obeying %-directions to substitute operands taken from the vector OPERANDS. --- 2959,3084 ---- In an `asm', it's the user's fault; otherwise, the compiler's fault. */ void ! output_operand_lossage VPARAMS ((const char *msgid, ...)) { + char *fmt_string; + char *new_message; + const char *pfx_str; + VA_OPEN (ap, msgid); + VA_FIXEDARG (ap, const char *, msgid); + + pfx_str = this_is_asm_operands ? _("invalid `asm': ") : "output_operand: "; + asprintf (&fmt_string, "%s%s", pfx_str, _(msgid)); + vasprintf (&new_message, fmt_string, ap); + if (this_is_asm_operands) ! error_for_asm (this_is_asm_operands, "%s", new_message); else ! internal_error ("%s", new_message); ! ! free (fmt_string); ! free (new_message); ! VA_CLOSE (ap); } /* Output of assembler code from a template, and its subroutines. */ + /* Annotate the assembly with a comment describing the pattern and + alternative used. */ + + static void + output_asm_name () + { + if (debug_insn) + { + int num = INSN_CODE (debug_insn); + fprintf (asm_out_file, "\t%s %d\t%s", + ASM_COMMENT_START, INSN_UID (debug_insn), + insn_data[num].name); + if (insn_data[num].n_alternatives > 1) + fprintf (asm_out_file, "/%d", which_alternative + 1); + #ifdef HAVE_ATTR_length + fprintf (asm_out_file, "\t[length = %d]", + get_attr_length (debug_insn)); + #endif + /* Clear this so only the first assembler insn + of any rtl insn will get the special comment for -dp. */ + debug_insn = 0; + } + } + + /* If OP is a REG or MEM and we can find a MEM_EXPR corresponding to it + or its address, return that expr . Set *PADDRESSP to 1 if the expr + corresponds to the address of the object and 0 if to the object. */ + + static tree + get_mem_expr_from_op (op, paddressp) + rtx op; + int *paddressp; + { + tree expr; + int inner_addressp; + + *paddressp = 0; + + if (GET_CODE (op) == REG && ORIGINAL_REGNO (op) >= FIRST_PSEUDO_REGISTER) + return REGNO_DECL (ORIGINAL_REGNO (op)); + else if (GET_CODE (op) != MEM) + return 0; + + if (MEM_EXPR (op) != 0) + return MEM_EXPR (op); + + /* Otherwise we have an address, so indicate it and look at the address. */ + *paddressp = 1; + op = XEXP (op, 0); + + /* First check if we have a decl for the address, then look at the right side + if it is a PLUS. Otherwise, strip off arithmetic and keep looking. + But don't allow the address to itself be indirect. */ + if ((expr = get_mem_expr_from_op (op, &inner_addressp)) && ! inner_addressp) + return expr; + else if (GET_CODE (op) == PLUS + && (expr = get_mem_expr_from_op (XEXP (op, 1), &inner_addressp))) + return expr; + + while (GET_RTX_CLASS (GET_CODE (op)) == '1' + || GET_RTX_CLASS (GET_CODE (op)) == '2') + op = XEXP (op, 0); + + expr = get_mem_expr_from_op (op, &inner_addressp); + return inner_addressp ? 0 : expr; + } + + /* Output operand names for assembler instructions. OPERANDS is the + operand vector, OPORDER is the order to write the operands, and NOPS + is the number of operands to write. */ + + static void + output_asm_operand_names (operands, oporder, nops) + rtx *operands; + int *oporder; + int nops; + { + int wrote = 0; + int i; + + for (i = 0; i < nops; i++) + { + int addressp; + tree expr = get_mem_expr_from_op (operands[oporder[i]], &addressp); + + if (expr) + { + fprintf (asm_out_file, "%c%s %s", + wrote ? ',' : '\t', wrote ? "" : ASM_COMMENT_START, + addressp ? "*" : ""); + print_mem_expr (asm_out_file, expr); + wrote = 1; + } + } + } + /* Output text from TEMPLATE to the assembler output file, obeying %-directions to substitute operands taken from the vector OPERANDS. *************** output_operand_lossage (msgid) *** 3372,3416 **** and print a constant expression for minus the value of the operand, with no other punctuation. */ - static void - output_asm_name () - { - if (flag_print_asm_name) - { - /* Annotate the assembly with a comment describing the pattern and - alternative used. */ - if (debug_insn) - { - register int num = INSN_CODE (debug_insn); - fprintf (asm_out_file, "\t%s %d\t%s", - ASM_COMMENT_START, INSN_UID (debug_insn), - insn_data[num].name); - if (insn_data[num].n_alternatives > 1) - fprintf (asm_out_file, "/%d", which_alternative + 1); - #ifdef HAVE_ATTR_length - fprintf (asm_out_file, "\t[length = %d]", - get_attr_length (debug_insn)); - #endif - /* Clear this so only the first assembler insn - of any rtl insn will get the special comment for -dp. */ - debug_insn = 0; - } - } - } - void output_asm_insn (template, operands) const char *template; rtx *operands; { ! register const char *p; ! register int c; /* An insn may return a null string template in a case where no assembler code is needed. */ if (*template == 0) return; p = template; putc ('\t', asm_out_file); --- 3095,3120 ---- and print a constant expression for minus the value of the operand, with no other punctuation. */ void output_asm_insn (template, operands) const char *template; rtx *operands; { ! const char *p; ! int c; ! #ifdef ASSEMBLER_DIALECT ! int dialect = 0; ! #endif ! int oporder[MAX_RECOG_OPERANDS]; ! char opoutput[MAX_RECOG_OPERANDS]; ! int ops = 0; /* An insn may return a null string template in a case where no assembler code is needed. */ if (*template == 0) return; + memset (opoutput, 0, sizeof opoutput); p = template; putc ('\t', asm_out_file); *************** output_asm_insn (template, operands) *** 3422,3428 **** switch (c) { case '\n': ! output_asm_name (); putc (c, asm_out_file); #ifdef ASM_OUTPUT_OPCODE while ((c = *p) == '\t') --- 3126,3139 ---- switch (c) { case '\n': ! if (flag_verbose_asm) ! output_asm_operand_names (operands, oporder, ops); ! if (flag_print_asm_name) ! output_asm_name (); ! ! ops = 0; ! memset (opoutput, 0, sizeof opoutput); ! putc (c, asm_out_file); #ifdef ASM_OUTPUT_OPCODE while ((c = *p) == '\t') *************** output_asm_insn (template, operands) *** 3437,3443 **** #ifdef ASSEMBLER_DIALECT case '{': { ! register int i; /* If we want the first dialect, do nothing. Otherwise, skip DIALECT_NUMBER of strings ending with '|'. */ --- 3148,3159 ---- #ifdef ASSEMBLER_DIALECT case '{': { ! int i; ! ! if (dialect) ! output_operand_lossage ("nested assembly dialect alternatives"); ! else ! dialect = 1; /* If we want the first dialect, do nothing. Otherwise, skip DIALECT_NUMBER of strings ending with '|'. */ *************** output_asm_insn (template, operands) *** 3450,3465 **** if (*p == '|') p++; } } break; case '|': ! /* Skip to close brace. */ ! while (*p && *p++ != '}') ! ; break; case '}': break; #endif --- 3166,3200 ---- if (*p == '|') p++; } + + if (*p == '\0') + output_operand_lossage ("unterminated assembly dialect alternative"); } break; case '|': ! if (dialect) ! { ! /* Skip to close brace. */ ! do ! { ! if (*p == '\0') ! { ! output_operand_lossage ("unterminated assembly dialect alternative"); ! break; ! } ! } ! while (*p++ != '}'); ! dialect = 0; ! } ! else ! putc (c, asm_out_file); break; case '}': + if (! dialect) + putc (c, asm_out_file); + dialect = 0; break; #endif *************** output_asm_insn (template, operands) *** 3483,3496 **** Letters `acln' are implemented directly. Other letters are passed to `output_operand' so that the PRINT_OPERAND macro can define them. */ ! else if (ISLOWER (*p) || ISUPPER (*p)) { int letter = *p++; c = atoi (p); ! if (! (*p >= '0' && *p <= '9')) ! output_operand_lossage ("operand number missing after %-letter"); ! else if (this_is_asm_operands && (c < 0 || (unsigned int) c >= insn_noperands)) output_operand_lossage ("operand number out of range"); else if (letter == 'l') output_asm_label (operands[c]); --- 3218,3232 ---- Letters `acln' are implemented directly. Other letters are passed to `output_operand' so that the PRINT_OPERAND macro can define them. */ ! else if (ISALPHA (*p)) { int letter = *p++; c = atoi (p); ! if (! ISDIGIT (*p)) ! output_operand_lossage ("operand number missing after %%-letter"); ! else if (this_is_asm_operands ! && (c < 0 || (unsigned int) c >= insn_noperands)) output_operand_lossage ("operand number out of range"); else if (letter == 'l') output_asm_label (operands[c]); *************** output_asm_insn (template, operands) *** 3517,3527 **** else output_operand (operands[c], letter); ! while ((c = *p) >= '0' && c <= '9') p++; } /* % followed by a digit outputs an operand the default way. */ ! else if (*p >= '0' && *p <= '9') { c = atoi (p); if (this_is_asm_operands --- 3253,3267 ---- else output_operand (operands[c], letter); ! if (!opoutput[c]) ! oporder[ops++] = c; ! opoutput[c] = 1; ! ! while (ISDIGIT (c = *p)) p++; } /* % followed by a digit outputs an operand the default way. */ ! else if (ISDIGIT (*p)) { c = atoi (p); if (this_is_asm_operands *************** output_asm_insn (template, operands) *** 3529,3535 **** output_operand_lossage ("operand number out of range"); else output_operand (operands[c], 0); ! while ((c = *p) >= '0' && c <= '9') p++; } /* % followed by punctuation: output something for that --- 3269,3280 ---- output_operand_lossage ("operand number out of range"); else output_operand (operands[c], 0); ! ! if (!opoutput[c]) ! oporder[ops++] = c; ! opoutput[c] = 1; ! ! while (ISDIGIT (c = *p)) p++; } /* % followed by punctuation: output something for that *************** output_asm_insn (template, operands) *** 3547,3553 **** putc (c, asm_out_file); } ! output_asm_name (); putc ('\n', asm_out_file); } --- 3292,3302 ---- putc (c, asm_out_file); } ! /* Write out the variable names for operands, if we know them. */ ! if (flag_verbose_asm) ! output_asm_operand_names (operands, oporder, ops); ! if (flag_print_asm_name) ! output_asm_name (); putc ('\n', asm_out_file); } *************** output_asm_label (x) *** 3567,3573 **** && NOTE_LINE_NUMBER (x) == NOTE_INSN_DELETED_LABEL)) ASM_GENERATE_INTERNAL_LABEL (buf, "L", CODE_LABEL_NUMBER (x)); else ! output_operand_lossage ("`%l' operand isn't a label"); assemble_name (asm_out_file, buf); } --- 3316,3322 ---- && NOTE_LINE_NUMBER (x) == NOTE_INSN_DELETED_LABEL)) ASM_GENERATE_INTERNAL_LABEL (buf, "L", CODE_LABEL_NUMBER (x)); else ! output_operand_lossage ("`%%l' operand isn't a label"); assemble_name (asm_out_file, buf); } *************** output_operand (x, code) *** 3588,3594 **** int code ATTRIBUTE_UNUSED; { if (x && GET_CODE (x) == SUBREG) ! x = alter_subreg (x); /* If X is a pseudo-register, abort now rather than writing trash to the assembler file. */ --- 3337,3343 ---- int code ATTRIBUTE_UNUSED; { if (x && GET_CODE (x) == SUBREG) ! x = alter_subreg (&x); /* If X is a pseudo-register, abort now rather than writing trash to the assembler file. */ *************** void *** 3607,3613 **** output_address (x) rtx x; { ! walk_alter_subreg (x); PRINT_OPERAND_ADDRESS (asm_out_file, x); } --- 3356,3362 ---- output_address (x) rtx x; { ! walk_alter_subreg (&x); PRINT_OPERAND_ADDRESS (asm_out_file, x); } *************** output_addr_const (file, x) *** 3626,3635 **** switch (GET_CODE (x)) { case PC: ! if (flag_pic) ! putc ('.', file); ! else ! abort (); break; case SYMBOL_REF: --- 3375,3381 ---- switch (GET_CODE (x)) { case PC: ! putc ('.', file); break; case SYMBOL_REF: *************** output_addr_const (file, x) *** 3645,3651 **** --- 3391,3401 ---- /* Fall through. */ case CODE_LABEL: ASM_GENERATE_INTERNAL_LABEL (buf, "L", CODE_LABEL_NUMBER (x)); + #ifdef ASM_OUTPUT_LABEL_REF + ASM_OUTPUT_LABEL_REF (file, buf); + #else assemble_name (file, buf); + #endif break; case CONST_INT: *************** output_addr_const (file, x) *** 3704,3723 **** output_addr_const (file, XEXP (x, 0)); fprintf (file, "-"); ! if ((GET_CODE (XEXP (x, 1)) == CONST_INT ! && INTVAL (XEXP (x, 1)) < 0) ! || GET_CODE (XEXP (x, 1)) != CONST_INT) { ! fprintf (file, "%s", ASM_OPEN_PAREN); output_addr_const (file, XEXP (x, 1)); ! fprintf (file, "%s", ASM_CLOSE_PAREN); } - else - output_addr_const (file, XEXP (x, 1)); break; case ZERO_EXTEND: case SIGN_EXTEND: output_addr_const (file, XEXP (x, 0)); break; --- 3454,3474 ---- output_addr_const (file, XEXP (x, 0)); fprintf (file, "-"); ! if ((GET_CODE (XEXP (x, 1)) == CONST_INT && INTVAL (XEXP (x, 1)) >= 0) ! || GET_CODE (XEXP (x, 1)) == PC ! || GET_CODE (XEXP (x, 1)) == SYMBOL_REF) ! output_addr_const (file, XEXP (x, 1)); ! else { ! fputs (targetm.asm_out.open_paren, file); output_addr_const (file, XEXP (x, 1)); ! fputs (targetm.asm_out.close_paren, file); } break; case ZERO_EXTEND: case SIGN_EXTEND: + case SUBREG: output_addr_const (file, XEXP (x, 0)); break; *************** output_addr_const (file, x) *** 3745,3764 **** void asm_fprintf VPARAMS ((FILE *file, const char *p, ...)) { - #ifndef ANSI_PROTOTYPES - FILE *file; - const char *p; - #endif - va_list argptr; char buf[10]; char *q, c; ! VA_START (argptr, p); ! ! #ifndef ANSI_PROTOTYPES ! file = va_arg (argptr, FILE *); ! p = va_arg (argptr, const char *); ! #endif buf[0] = '%'; --- 3496,3507 ---- void asm_fprintf VPARAMS ((FILE *file, const char *p, ...)) { char buf[10]; char *q, c; ! VA_OPEN (argptr, p); ! VA_FIXEDARG (argptr, FILE *, file); ! VA_FIXEDARG (argptr, const char *, p); buf[0] = '%'; *************** asm_fprintf VPARAMS ((FILE *file, const *** 3796,3802 **** case '%': c = *p++; q = &buf[1]; ! while ((c >= '0' && c <= '9') || c == '.') { *q++ = c; c = *p++; --- 3539,3545 ---- case '%': c = *p++; q = &buf[1]; ! while (ISDIGIT (c) || c == '.') { *q++ = c; c = *p++; *************** asm_fprintf VPARAMS ((FILE *file, const *** 3906,3912 **** default: fputc (c, file); } ! va_end (argptr); } /* Split up a CONST_DOUBLE or integer constant rtx --- 3649,3655 ---- default: fputc (c, file); } ! VA_CLOSE (argptr); } /* Split up a CONST_DOUBLE or integer constant rtx *************** leaf_function_p () *** 4086,4092 **** rtx insn; rtx link; ! if (profile_flag || profile_block_flag || profile_arc_flag) return 0; for (insn = get_insns (); insn; insn = NEXT_INSN (insn)) --- 3829,3835 ---- rtx insn; rtx link; ! if (current_function_profile || profile_arc_flag) return 0; for (insn = get_insns (); insn; insn = NEXT_INSN (insn)) *************** leaf_function_p () *** 4119,4124 **** --- 3862,3886 ---- return 1; } + /* Return 1 if branch is an forward branch. + Uses insn_shuid array, so it works only in the final pass. May be used by + output templates to customary add branch prediction hints. + */ + int + final_forward_branch_p (insn) + rtx insn; + { + int insn_id, label_id; + if (!uid_shuid) + abort (); + insn_id = INSN_SHUID (insn); + label_id = INSN_SHUID (JUMP_LABEL (insn)); + /* We've hit some insns that does not have id information available. */ + if (!insn_id || !label_id) + abort (); + return insn_id < label_id; + } + /* On some machines, a function with no call insns can run faster if it doesn't create its own register window. When output, the leaf function should use only the "output" *************** leaf_renumber_regs (first) *** 4180,4189 **** void leaf_renumber_regs_insn (in_rtx) ! register rtx in_rtx; { ! register int i, j; ! register const char *format_ptr; if (in_rtx == 0) return; --- 3942,3951 ---- void leaf_renumber_regs_insn (in_rtx) ! rtx in_rtx; { ! int i, j; ! const char *format_ptr; if (in_rtx == 0) return; diff -Nrc3pad gcc-3.0.4/gcc/fix-header.c gcc-3.1/gcc/fix-header.c *** gcc-3.0.4/gcc/fix-header.c Sat Feb 3 13:33:14 2001 --- gcc-3.1/gcc/fix-header.c Thu Dec 27 03:35:19 2001 *************** *** 1,6 **** /* fix-header.c - Make C header file suitable for C++. Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000 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 --- 1,6 ---- /* fix-header.c - Make C header file suitable for C++. Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001 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 *************** int missing_extern_C_count = 0; *** 104,110 **** directory. (It might be more efficient to do directory pruning earlier in fixproto, but this is simpler and easier to customize.) */ ! static char *files_to_ignore[] = { "X11/", FIXPROTO_IGNORE_LIST 0 --- 104,110 ---- directory. (It might be more efficient to do directory pruning earlier in fixproto, but this is simpler and easier to customize.) */ ! static const char *const files_to_ignore[] = { "X11/", FIXPROTO_IGNORE_LIST 0 *************** static int inf_skip_spaces PARAMS ((int) *** 199,205 **** static int inf_read_upto PARAMS ((sstring *, int)); static int inf_scan_ident PARAMS ((sstring *, int)); static int check_protection PARAMS ((int *, int *)); ! static void cb_file_change PARAMS ((cpp_reader *, const cpp_file_change *)); static void add_symbols (flags, names) --- 199,205 ---- static int inf_read_upto PARAMS ((sstring *, int)); static int inf_scan_ident PARAMS ((sstring *, int)); static int check_protection PARAMS ((int *, int *)); ! static void cb_file_change PARAMS ((cpp_reader *, const struct line_map *)); static void add_symbols (flags, names) *************** add_symbols (flags, names) *** 215,223 **** } struct std_include_entry { ! const char *name; ! symbol_flags flags; ! namelist names; }; const char NONE[] = ""; /* The empty namelist. */ --- 215,223 ---- } struct std_include_entry { ! const char *const name; ! const symbol_flags flags; ! const namelist names; }; const char NONE[] = ""; /* The empty namelist. */ *************** const char NONE[] = ""; /* The empty na *** 225,233 **** /* Special name to indicate a continuation line in std_include_table. */ const char CONTINUED[] = ""; ! struct std_include_entry *include_entry; ! struct std_include_entry std_include_table [] = { { "ctype.h", ANSI_SYMBOL, "isalnum\0isalpha\0iscntrl\0isdigit\0isgraph\0islower\0\ isprint\0ispunct\0isspace\0isupper\0isxdigit\0tolower\0toupper\0" }, --- 225,233 ---- /* Special name to indicate a continuation line in std_include_table. */ const char CONTINUED[] = ""; ! const struct std_include_entry *include_entry; ! const struct std_include_entry std_include_table [] = { { "ctype.h", ANSI_SYMBOL, "isalnum\0isalpha\0iscntrl\0isdigit\0isgraph\0islower\0\ isprint\0ispunct\0isspace\0isupper\0isxdigit\0tolower\0toupper\0" }, *************** recognized_function (fname, line, kind, *** 532,539 **** missing_extern_C_count++; #endif ! fn = lookup_std_proto ((const char *)fname->val.node->name, ! fname->val.node->length); /* Remove the function from the list of required function. */ if (fn) --- 532,539 ---- missing_extern_C_count++; #endif ! fn = lookup_std_proto ((const char *) NODE_NAME (fname->val.node), ! NODE_LEN (fname->val.node)); /* Remove the function from the list of required function. */ if (fn) *************** check_macro_names (pfile, names) *** 598,609 **** } static void ! cb_file_change (pfile, fc) cpp_reader *pfile ATTRIBUTE_UNUSED; ! const cpp_file_change *fc; { /* Just keep track of current file name. */ ! cur_file = fc->to.filename; } static void --- 598,609 ---- } static void ! cb_file_change (pfile, map) cpp_reader *pfile ATTRIBUTE_UNUSED; ! const struct line_map *map; { /* Just keep track of current file name. */ ! cur_file = map->to_file; } static void *************** read_scan_file (in_fname, argc, argv) *** 612,623 **** int argc; char **argv; { ! cpp_reader* scan_in; cpp_callbacks *cb; cpp_options *options; struct fn_decl *fn; int i; ! register struct symbol_list *cur_symbols; obstack_init (&scan_file_obstack); --- 612,623 ---- int argc; char **argv; { ! cpp_reader *scan_in; cpp_callbacks *cb; cpp_options *options; struct fn_decl *fn; int i; ! struct symbol_list *cur_symbols; obstack_init (&scan_file_obstack); *************** read_scan_file (in_fname, argc, argv) *** 638,646 **** if (CPP_FATAL_ERRORS (scan_in)) exit (FATAL_EXIT_CODE); ! if (! cpp_start_read (scan_in, in_fname)) exit (FATAL_EXIT_CODE); /* We are scanning a system header, so mark it as such. */ cpp_make_system_header (scan_in, 1, 0); --- 638,648 ---- if (CPP_FATAL_ERRORS (scan_in)) exit (FATAL_EXIT_CODE); ! if (! cpp_read_main_file (scan_in, in_fname, NULL)) exit (FATAL_EXIT_CODE); + cpp_finish_options (scan_in); + /* We are scanning a system header, so mark it as such. */ cpp_make_system_header (scan_in, 1, 0); *************** read_scan_file (in_fname, argc, argv) *** 658,675 **** /* Scan the macro expansion of "getchar();". */ cpp_push_buffer (scan_in, getchar_call, sizeof(getchar_call) - 1, ! BUF_BUILTIN, in_fname); for (;;) { ! cpp_token t; ! cpp_get_token (scan_in, &t); ! if (t.type == CPP_EOF) break; ! else if (cpp_ideq (&t, "_filbuf")) seen_filbuf++; } - cpp_pop_buffer (scan_in); if (seen_filbuf) { --- 660,675 ---- /* Scan the macro expansion of "getchar();". */ cpp_push_buffer (scan_in, getchar_call, sizeof(getchar_call) - 1, ! /* from_stage3 */ true, 1); for (;;) { ! const cpp_token *t = cpp_get_token (scan_in); ! if (t->type == CPP_EOF) break; ! else if (cpp_ideq (t, "_filbuf")) seen_filbuf++; } if (seen_filbuf) { *************** write_rbrac () *** 732,738 **** { struct fn_decl *fn; const char *cptr; ! register struct symbol_list *cur_symbols; if (required_unseen_count) { --- 732,738 ---- { struct fn_decl *fn; const char *cptr; ! struct symbol_list *cur_symbols; if (required_unseen_count) { *************** inf_read_upto (str, delim) *** 931,947 **** static int inf_scan_ident (s, c) ! register sstring *s; int c; { s->ptr = s->base; ! if (ISALPHA (c) || c == '_') { for (;;) { SSTRING_PUT (s, c); c = INF_GET (); ! if (c == EOF || !(ISALNUM (c) || c == '_')) break; } } --- 931,947 ---- static int inf_scan_ident (s, c) ! sstring *s; int c; { s->ptr = s->base; ! if (ISIDST (c)) { for (;;) { SSTRING_PUT (s, c); c = INF_GET (); ! if (c == EOF || !(ISIDNUM (c))) break; } } *************** main (argc, argv) *** 1076,1086 **** int endif_line; long to_read; long int inf_size; ! register struct symbol_list *cur_symbols; if (argv[0] && argv[0][0]) { ! register char *p; progname = 0; for (p = argv[0]; *p; p++) --- 1076,1086 ---- int endif_line; long to_read; long int inf_size; ! struct symbol_list *cur_symbols; if (argv[0] && argv[0][0]) { ! char *p; progname = 0; for (p = argv[0]; *p; p++) *************** main (argc, argv) *** 1102,1108 **** #ifdef FIXPROTO_IGNORE_LIST for (i = 0; files_to_ignore[i] != NULL; i++) { ! char *ignore_name = files_to_ignore[i]; int ignore_len = strlen (ignore_name); if (strncmp (inc_filename, ignore_name, ignore_len) == 0) { --- 1102,1108 ---- #ifdef FIXPROTO_IGNORE_LIST for (i = 0; files_to_ignore[i] != NULL; i++) { ! const char *const ignore_name = files_to_ignore[i]; int ignore_len = strlen (ignore_name); if (strncmp (inc_filename, ignore_name, ignore_len) == 0) { *************** main (argc, argv) *** 1134,1140 **** if (include_entry->name != NULL) { ! struct std_include_entry *entry; cur_symbol_table_size = 0; for (entry = include_entry; ;) { --- 1134,1140 ---- if (include_entry->name != NULL) { ! const struct std_include_entry *entry; cur_symbol_table_size = 0; for (entry = include_entry; ;) { *************** main (argc, argv) *** 1184,1192 **** } inf_size = sbuf.st_size; inf_buffer = (char *) xmalloc (inf_size + 2); - inf_buffer[inf_size] = '\n'; - inf_buffer[inf_size + 1] = '\0'; - inf_limit = inf_buffer + inf_size; inf_ptr = inf_buffer; to_read = inf_size; --- 1184,1189 ---- *************** main (argc, argv) *** 1209,1214 **** --- 1206,1216 ---- close (inf_fd); + /* Inf_size may have changed if read was short (as on VMS) */ + inf_buffer[inf_size] = '\n'; + inf_buffer[inf_size + 1] = '\0'; + inf_limit = inf_buffer + inf_size; + /* If file doesn't end with '\n', add one. */ if (inf_limit > inf_buffer && inf_limit[-1] != '\n') inf_limit++; *************** main (argc, argv) *** 1252,1258 **** c = INF_GET (); if (c == EOF) break; ! if (ISALPHA (c) || c == '_') { c = inf_scan_ident (&buf, c); (void) INF_UNGET (c); --- 1254,1260 ---- c = INF_GET (); if (c == EOF) break; ! if (ISIDST (c)) { c = inf_scan_ident (&buf, c); (void) INF_UNGET (c); *************** v_fatal (str, ap) *** 1318,1334 **** static void fatal VPARAMS ((const char *str, ...)) { ! #ifndef ANSI_PROTOTYPES ! const char *str; ! #endif ! va_list ap; ! ! VA_START (ap, str); ! ! #ifndef ANSI_PROTOTYPES ! str = va_arg (ap, const char *); ! #endif v_fatal (str, ap); ! va_end (ap); } --- 1320,1328 ---- static void fatal VPARAMS ((const char *str, ...)) { ! VA_OPEN (ap, str); ! VA_FIXEDARG (ap, const char *, str); v_fatal (str, ap); ! VA_CLOSE (ap); } diff -Nrc3pad gcc-3.0.4/gcc/fixinc/Makefile.in gcc-3.1/gcc/fixinc/Makefile.in *** gcc-3.0.4/gcc/fixinc/Makefile.in Sat May 26 18:56:14 2001 --- gcc-3.1/gcc/fixinc/Makefile.in Sun Sep 2 22:05:56 2001 *************** fixlib.o : fixlib.c *** 109,115 **** machname.h: ../specs $(SHELL) $(srcdir)/genfixes $@ ! $(srcdir)/fixincl.x: fixincl.tpl inclhack.def cd $(srcdir) ; $(SHELL) ./genfixes $@ clean: --- 109,115 ---- machname.h: ../specs $(SHELL) $(srcdir)/genfixes $@ ! $(srcdir)/fixincl.x: @MAINT@ fixincl.tpl inclhack.def cd $(srcdir) ; $(SHELL) ./genfixes $@ clean: diff -Nrc3pad gcc-3.0.4/gcc/fixinc/check.tpl gcc-3.1/gcc/fixinc/check.tpl *** gcc-3.0.4/gcc/fixinc/check.tpl Fri Jul 20 03:45:07 2001 --- gcc-3.1/gcc/fixinc/check.tpl Mon Apr 29 02:28:36 2002 *************** else *** 171,176 **** fi $exitok[= ! (set-writable) =] --- 171,176 ---- fi $exitok[= ! (if (defined? 'set-writable) (set-writable)) =] diff -Nrc3pad gcc-3.0.4/gcc/fixinc/fixfixes.c gcc-3.1/gcc/fixinc/fixfixes.c *** gcc-3.0.4/gcc/fixinc/fixfixes.c Fri Jul 20 03:26:15 2001 --- gcc-3.1/gcc/fixinc/fixfixes.c Sun Oct 21 21:32:15 2001 *************** emit_gnu_type ( text, rm ) *** 164,170 **** typedef __%s_TYPE__ %s_t;\n\ #endif\n"; ! const char* pz_guard = (strcmp (z_type, "wchar") == 0) ? " && ! defined(__cplusplus)" : ""; printf (z_fmt, z_TYPE, pz_guard, z_TYPE, z_TYPE, z_type); --- 164,170 ---- typedef __%s_TYPE__ %s_t;\n\ #endif\n"; ! const char *const pz_guard = (strcmp (z_type, "wchar") == 0) ? " && ! defined(__cplusplus)" : ""; printf (z_fmt, z_TYPE, pz_guard, z_TYPE, z_TYPE, z_type); *************** FIX_PROC_HEAD( char_macro_use_fix ) *** 374,380 **** continue; if (!ISALPHA (*p)) continue; ! if (ISALNUM (p[1]) || p[1] == '_') continue; /* Splat all preceding text into the output buffer, --- 374,380 ---- continue; if (!ISALPHA (*p)) continue; ! if (ISIDNUM (p[1])) continue; /* Splat all preceding text into the output buffer, *************** FIX_PROC_HEAD( char_macro_def_fix ) *** 447,453 **** goto found; p++; } ! while (ISALPHA (*p) || ISALNUM (*p) || *p == '_'); /* Hit end of macro name without finding the string. */ continue; --- 447,453 ---- goto found; p++; } ! while (ISIDNUM (*p)); /* Hit end of macro name without finding the string. */ continue; *************** FIX_PROC_HEAD( char_macro_def_fix ) *** 461,467 **** continue; if (!ISALPHA (*p)) continue; ! if (ISALNUM (p[1]) || p[1] == '_') continue; /* The character at P is the one to look for in the following --- 461,467 ---- continue; if (!ISALPHA (*p)) continue; ! if (ISIDNUM (p[1])) continue; /* The character at P is the one to look for in the following diff -Nrc3pad gcc-3.0.4/gcc/fixinc/fixincl.x gcc-3.1/gcc/fixinc/fixincl.x *** gcc-3.0.4/gcc/fixinc/fixincl.x Wed Feb 20 19:40:47 2002 --- gcc-3.1/gcc/fixinc/fixincl.x Mon Apr 29 19:31:17 2002 *************** *** 5,11 **** * files which are fixed to work correctly with ANSI C and placed in a * directory that GNU C will search. * ! * This file contains 144 fixup descriptions. * * See README for more information. * --- 5,11 ---- * files which are fixed to work correctly with ANSI C and placed in a * directory that GNU C will search. * ! * This file contains 142 fixup descriptions. * * See README for more information. * *************** *** 32,227 **** /* * * * * * * * * * * * * * * * * * * * * * * * * * * - * Description of Aaa_Bad_Fixes fix - */ - tSCC zAaa_Bad_FixesName[] = - "AAA_bad_fixes"; - - /* - * File name selection pattern - */ - tSCC zAaa_Bad_FixesList[] = - "|sundev/ipi_error.h|"; - /* - * Machine/OS name selection pattern - */ - #define apzAaa_Bad_FixesMachs (const char**)NULL - #define AAA_BAD_FIXES_TEST_CT 0 - #define aAaa_Bad_FixesTests (tTestDesc*)NULL - - /* - * Fix Command Arguments for Aaa_Bad_Fixes - */ - static const char* apzAaa_Bad_FixesPatch[] = { - (char*)NULL }; - - /* * * * * * * * * * * * * * * * * * * * * * * * * * - * - * Description of Aaa_Ki fix - */ - tSCC zAaa_KiName[] = - "AAA_ki"; - - /* - * File name selection pattern - */ - tSCC zAaa_KiList[] = - "|sys/ki.h|"; - /* - * Machine/OS name selection pattern - */ - #define apzAaa_KiMachs (const char**)NULL - - /* - * content selection pattern - do fix if pattern found - */ - tSCC zAaa_KiSelect0[] = - "11.00 HP-UX LP64"; - - #define AAA_KI_TEST_CT 1 - static tTestDesc aAaa_KiTests[] = { - { TT_EGREP, zAaa_KiSelect0, (regex_t*)NULL }, }; - - /* - * Fix Command Arguments for Aaa_Ki - */ - static const char* apzAaa_KiPatch[] = { - (char*)NULL }; - - /* * * * * * * * * * * * * * * * * * * * * * * * * * - * - * Description of Aaa_Ki_Calls fix - */ - tSCC zAaa_Ki_CallsName[] = - "AAA_ki_calls"; - - /* - * File name selection pattern - */ - tSCC zAaa_Ki_CallsList[] = - "|sys/ki_calls.h|"; - /* - * Machine/OS name selection pattern - */ - #define apzAaa_Ki_CallsMachs (const char**)NULL - - /* - * content selection pattern - do fix if pattern found - */ - tSCC zAaa_Ki_CallsSelect0[] = - "kthread_create_caller_t"; - - #define AAA_KI_CALLS_TEST_CT 1 - static tTestDesc aAaa_Ki_CallsTests[] = { - { TT_EGREP, zAaa_Ki_CallsSelect0, (regex_t*)NULL }, }; - - /* - * Fix Command Arguments for Aaa_Ki_Calls - */ - static const char* apzAaa_Ki_CallsPatch[] = { - (char*)NULL }; - - /* * * * * * * * * * * * * * * * * * * * * * * * * * - * - * Description of Aaa_Ki_Defs fix - */ - tSCC zAaa_Ki_DefsName[] = - "AAA_ki_defs"; - - /* - * File name selection pattern - */ - tSCC zAaa_Ki_DefsList[] = - "|sys/ki_defs.h|"; - /* - * Machine/OS name selection pattern - */ - #define apzAaa_Ki_DefsMachs (const char**)NULL - - /* - * content selection pattern - do fix if pattern found - */ - tSCC zAaa_Ki_DefsSelect0[] = - "Kernel Instrumentation Definitions"; - - #define AAA_KI_DEFS_TEST_CT 1 - static tTestDesc aAaa_Ki_DefsTests[] = { - { TT_EGREP, zAaa_Ki_DefsSelect0, (regex_t*)NULL }, }; - - /* - * Fix Command Arguments for Aaa_Ki_Defs - */ - static const char* apzAaa_Ki_DefsPatch[] = { - (char*)NULL }; - - /* * * * * * * * * * * * * * * * * * * * * * * * * * - * - * Description of Aaa_Ki_Iface fix - */ - tSCC zAaa_Ki_IfaceName[] = - "AAA_ki_iface"; - - /* - * File name selection pattern - */ - tSCC zAaa_Ki_IfaceList[] = - "|sys/ki_iface.h|"; - /* - * Machine/OS name selection pattern - */ - #define apzAaa_Ki_IfaceMachs (const char**)NULL - - /* - * content selection pattern - do fix if pattern found - */ - tSCC zAaa_Ki_IfaceSelect0[] = - "These definitions are for HP Internal developers"; - - #define AAA_KI_IFACE_TEST_CT 1 - static tTestDesc aAaa_Ki_IfaceTests[] = { - { TT_EGREP, zAaa_Ki_IfaceSelect0, (regex_t*)NULL }, }; - - /* - * Fix Command Arguments for Aaa_Ki_Iface - */ - static const char* apzAaa_Ki_IfacePatch[] = { - (char*)NULL }; - - /* * * * * * * * * * * * * * * * * * * * * * * * * * - * - * Description of Aaa_Standards fix - */ - tSCC zAaa_StandardsName[] = - "AAA_standards"; - - /* - * File name selection pattern - */ - tSCC zAaa_StandardsList[] = - "|standards.h|"; - /* - * Machine/OS name selection pattern - */ - #define apzAaa_StandardsMachs (const char**)NULL - - /* - * content selection pattern - do fix if pattern found - */ - tSCC zAaa_StandardsSelect0[] = - "GNU and MIPS C compilers define __STDC__ differently"; - - #define AAA_STANDARDS_TEST_CT 1 - static tTestDesc aAaa_StandardsTests[] = { - { TT_EGREP, zAaa_StandardsSelect0, (regex_t*)NULL }, }; - - /* - * Fix Command Arguments for Aaa_Standards - */ - static const char* apzAaa_StandardsPatch[] = { - (char*)NULL }; - - /* * * * * * * * * * * * * * * * * * * * * * * * * * - * * Description of Aab_Dgux_Int_Varargs fix */ tSCC zAab_Dgux_Int_VarargsName[] = --- 32,37 ---- *************** tSCC zAab_Dgux_Int_VarargsList[] = *** 245,253 **** static const char* apzAab_Dgux_Int_VarargsPatch[] = { "#ifndef __INT_VARARGS_H\n\ #define __INT_VARARGS_H\n\n\ ! /************************************************************************/\n\ ! /* _INT_VARARGS.H - Define the common stuff for varargs/stdarg/stdio. */\n\ ! /************************************************************************/\n\n\ /*\n\ ** This file is a DG internal header. Never include this\n\ ** file directly.\n\ --- 55,63 ---- static const char* apzAab_Dgux_Int_VarargsPatch[] = { "#ifndef __INT_VARARGS_H\n\ #define __INT_VARARGS_H\n\n\ ! /********************************************************/\n\ ! /* Define the common stuff for varargs/stdarg/stdio. */\n\ ! /********************************************************/\n\n\ /*\n\ ** This file is a DG internal header. Never include this\n\ ** file directly.\n\ *************** typedef char * va_list;\n\ *** 288,294 **** #endif /* _IX86_ANY */\n\n\ #endif /* __LINT__ */\n\ #endif /* !(defined(_VA_LIST) || defined(_VA_LIST_)) */\n\ ! #endif /* #ifndef __INT_VARARGS_H */\n", (char*)NULL }; /* * * * * * * * * * * * * * * * * * * * * * * * * * --- 98,104 ---- #endif /* _IX86_ANY */\n\n\ #endif /* __LINT__ */\n\ #endif /* !(defined(_VA_LIST) || defined(_VA_LIST_)) */\n\ ! #endif /* #ifndef __INT_VARARGS_H */", (char*)NULL }; /* * * * * * * * * * * * * * * * * * * * * * * * * * *************** static const char* apzAab_Fd_Zero_Asm_Po *** 334,347 **** #define __FD_ZERO(fdsetp) \\\n\ do { \\\n\ int __d0, __d1; \\\n\ ! \t\t__asm__ __volatile__(\"cld ; rep ; stosl\" \\\n\ ! \t\t\t: \"=&c\" (__d0), \"=&D\" (__d1) \\\n\ ! \t\t\t: \"a\" (0), \"0\" (__FDSET_LONGS), \\\n\ ! \t\t\t \"1\" ((__kernel_fd_set *) (fdsetp)) :\"memory\"); \\\n\ } while (0)\n\ #endif\n\n\ #define _POSIX_TYPES_H_WRAPPER\n\ ! #endif /* _POSIX_TYPES_H_WRAPPER */\n", (char*)NULL }; /* * * * * * * * * * * * * * * * * * * * * * * * * * --- 144,157 ---- #define __FD_ZERO(fdsetp) \\\n\ do { \\\n\ int __d0, __d1; \\\n\ ! __asm__ __volatile__(\"cld ; rep ; stosl\" \\\n\ ! : \"=&c\" (__d0), \"=&D\" (__d1) \\\n\ ! : \"a\" (0), \"0\" (__FDSET_LONGS), \\\n\ ! \"1\" ((__kernel_fd_set *) (fdsetp)) :\"memory\"); \\\n\ } while (0)\n\ #endif\n\n\ #define _POSIX_TYPES_H_WRAPPER\n\ ! #endif /* _POSIX_TYPES_H_WRAPPER */", (char*)NULL }; /* * * * * * * * * * * * * * * * * * * * * * * * * * *************** extern int memcmp();\n\n\ *** 487,492 **** --- 297,334 ---- /* * * * * * * * * * * * * * * * * * * * * * * * * * * + * Description of Aab_Solaris_Sys_Varargs_H fix + */ + tSCC zAab_Solaris_Sys_Varargs_HName[] = + "AAB_solaris_sys_varargs_h"; + + /* + * File name selection pattern + */ + tSCC zAab_Solaris_Sys_Varargs_HList[] = + "|sys/varargs.h|"; + /* + * Machine/OS name selection pattern + */ + tSCC* apzAab_Solaris_Sys_Varargs_HMachs[] = { + "*-*-solaris*", + (const char*)NULL }; + #define AAB_SOLARIS_SYS_VARARGS_H_TEST_CT 0 + #define aAab_Solaris_Sys_Varargs_HTests (tTestDesc*)NULL + + /* + * Fix Command Arguments for Aab_Solaris_Sys_Varargs_H + */ + static const char* apzAab_Solaris_Sys_Varargs_HPatch[] = { + "#ifdef __STDC__\n\ + #include \n\ + #else\n\ + #include \n\ + #endif\n", + (char*)NULL }; + + /* * * * * * * * * * * * * * * * * * * * * * * * * * + * * Description of Aab_Svr4_Replace_Byteorder fix */ tSCC zAab_Svr4_Replace_ByteorderName[] = *************** static const char* apzAlpha___AssertPatc *** 934,939 **** --- 776,816 ---- /* * * * * * * * * * * * * * * * * * * * * * * * * * * + * Description of Alpha_Assert fix + */ + tSCC zAlpha_AssertName[] = + "alpha_assert"; + + /* + * File name selection pattern + */ + tSCC zAlpha_AssertList[] = + "|assert.h|"; + /* + * Machine/OS name selection pattern + */ + #define apzAlpha_AssertMachs (const char**)NULL + + /* + * content selection pattern - do fix if pattern found + */ + tSCC zAlpha_AssertSelect0[] = + "(#define assert\\(EX\\).*)\\(\\(int\\) \\(EX\\)\\)"; + + #define ALPHA_ASSERT_TEST_CT 1 + static tTestDesc aAlpha_AssertTests[] = { + { TT_EGREP, zAlpha_AssertSelect0, (regex_t*)NULL }, }; + + /* + * Fix Command Arguments for Alpha_Assert + */ + static const char* apzAlpha_AssertPatch[] = { + "format", + "%1(EX)", + (char*)NULL }; + + /* * * * * * * * * * * * * * * * * * * * * * * * * * + * * Description of Alpha_Getopt fix */ tSCC zAlpha_GetoptName[] = *************** static const char* apzSolaris_Mutex_Init *** 3817,3822 **** --- 3694,3778 ---- /* * * * * * * * * * * * * * * * * * * * * * * * * * * + * Description of Solaris_Stdio_Tag fix + */ + tSCC zSolaris_Stdio_TagName[] = + "solaris_stdio_tag"; + + /* + * File name selection pattern + */ + tSCC zSolaris_Stdio_TagList[] = + "|stdio_tag.h|"; + /* + * Machine/OS name selection pattern + */ + #define apzSolaris_Stdio_TagMachs (const char**)NULL + + /* + * content selection pattern - do fix if pattern found + */ + tSCC zSolaris_Stdio_TagSelect0[] = + "__cplusplus < 54321L"; + + #define SOLARIS_STDIO_TAG_TEST_CT 1 + static tTestDesc aSolaris_Stdio_TagTests[] = { + { TT_EGREP, zSolaris_Stdio_TagSelect0, (regex_t*)NULL }, }; + + /* + * Fix Command Arguments for Solaris_Stdio_Tag + */ + static const char* apzSolaris_Stdio_TagPatch[] = { "sed", + "-e", "s/defined(__cplusplus) && (__cplusplus < 54321L)/0/", + (char*)NULL }; + + /* * * * * * * * * * * * * * * * * * * * * * * * * * + * + * Description of Solaris_Widec fix + */ + tSCC zSolaris_WidecName[] = + "solaris_widec"; + + /* + * File name selection pattern + */ + tSCC zSolaris_WidecList[] = + "|widec.h|"; + /* + * Machine/OS name selection pattern + */ + tSCC* apzSolaris_WidecMachs[] = { + "*-*-solaris2.[0-5]*", + (const char*)NULL }; + + /* + * content selection pattern - do fix if pattern found + */ + tSCC zSolaris_WidecSelect0[] = + "#include "; + + /* + * content bypass pattern - skip fix if pattern found + */ + tSCC zSolaris_WidecBypass0[] = + "include.*wchar\\.h"; + + #define SOLARIS_WIDEC_TEST_CT 2 + static tTestDesc aSolaris_WidecTests[] = { + { TT_NEGREP, zSolaris_WidecBypass0, (regex_t*)NULL }, + { TT_EGREP, zSolaris_WidecSelect0, (regex_t*)NULL }, }; + + /* + * Fix Command Arguments for Solaris_Widec + */ + static const char* apzSolaris_WidecPatch[] = { + "format", + "%0\n\ + #include ", + (char*)NULL }; + + /* * * * * * * * * * * * * * * * * * * * * * * * * * + * * Description of Statsswtch fix */ tSCC zStatsswtchName[] = *************** tSCC zStrict_Ansi_NotSelect0[] = *** 3954,3966 **** "^([ \t]*#[ \t]*if.*)(!__STDC__|__STDC__[ \t]*==[ \t]*0|__STDC__[ \t]*!=[ \t]*1|__STDC__[ \t]*-[ \t]*0[ \t]*==[ \t]*0)"; /* * perform the C function call test */ tSCC zStrict_Ansi_NotFTst0[] = "stdc_0_in_system_headers"; ! #define STRICT_ANSI_NOT_TEST_CT 2 static tTestDesc aStrict_Ansi_NotTests[] = { { TT_FUNCTION, zStrict_Ansi_NotFTst0, 0 /* unused */ }, { TT_EGREP, zStrict_Ansi_NotSelect0, (regex_t*)NULL }, }; /* --- 3910,3929 ---- "^([ \t]*#[ \t]*if.*)(!__STDC__|__STDC__[ \t]*==[ \t]*0|__STDC__[ \t]*!=[ \t]*1|__STDC__[ \t]*-[ \t]*0[ \t]*==[ \t]*0)"; /* + * content bypass pattern - skip fix if pattern found + */ + tSCC zStrict_Ansi_NotBypass0[] = + "GNU and MIPS C compilers define __STDC__ differently"; + + /* * perform the C function call test */ tSCC zStrict_Ansi_NotFTst0[] = "stdc_0_in_system_headers"; ! #define STRICT_ANSI_NOT_TEST_CT 3 static tTestDesc aStrict_Ansi_NotTests[] = { { TT_FUNCTION, zStrict_Ansi_NotFTst0, 0 /* unused */ }, + { TT_NEGREP, zStrict_Ansi_NotBypass0, (regex_t*)NULL }, { TT_EGREP, zStrict_Ansi_NotSelect0, (regex_t*)NULL }, }; /* *************** static const char* apzX11_SprintfPatch[] *** 5620,5642 **** */ #define REGEX_COUNT 151 #define MACH_LIST_SIZE_LIMIT 279 ! #define FIX_COUNT 144 /* * Enumerate the fixes */ typedef enum { - AAA_BAD_FIXES_FIXIDX, - AAA_KI_FIXIDX, - AAA_KI_CALLS_FIXIDX, - AAA_KI_DEFS_FIXIDX, - AAA_KI_IFACE_FIXIDX, - AAA_STANDARDS_FIXIDX, AAB_DGUX_INT_VARARGS_FIXIDX, AAB_FD_ZERO_ASM_POSIX_TYPES_H_FIXIDX, AAB_FD_ZERO_GNU_TYPES_H_FIXIDX, AAB_FD_ZERO_SELECTBITS_H_FIXIDX, AAB_SUN_MEMCPY_FIXIDX, AAB_SVR4_REPLACE_BYTEORDER_FIXIDX, AAB_ULTRIX_ANSI_COMPAT_FIXIDX, AAB_ULTRIX_LIMITS_FIXIDX, --- 5583,5600 ---- */ #define REGEX_COUNT 151 #define MACH_LIST_SIZE_LIMIT 279 ! #define FIX_COUNT 142 /* * Enumerate the fixes */ typedef enum { AAB_DGUX_INT_VARARGS_FIXIDX, AAB_FD_ZERO_ASM_POSIX_TYPES_H_FIXIDX, AAB_FD_ZERO_GNU_TYPES_H_FIXIDX, AAB_FD_ZERO_SELECTBITS_H_FIXIDX, AAB_SUN_MEMCPY_FIXIDX, + AAB_SOLARIS_SYS_VARARGS_H_FIXIDX, AAB_SVR4_REPLACE_BYTEORDER_FIXIDX, AAB_ULTRIX_ANSI_COMPAT_FIXIDX, AAB_ULTRIX_LIMITS_FIXIDX, *************** typedef enum { *** 5647,5652 **** --- 5605,5611 ---- AIX_SYSWAIT_FIXIDX, AIX_VOLATILE_FIXIDX, ALPHA___ASSERT_FIXIDX, + ALPHA_ASSERT_FIXIDX, ALPHA_GETOPT_FIXIDX, ALPHA_PARENS_FIXIDX, ALPHA_SBRK_FIXIDX, *************** typedef enum { *** 5723,5728 **** --- 5682,5689 ---- SCO_STATIC_FUNC_FIXIDX, SCO_UTIME_FIXIDX, SOLARIS_MUTEX_INIT_FIXIDX, + SOLARIS_STDIO_TAG_FIXIDX, + SOLARIS_WIDEC_FIXIDX, STATSSWTCH_FIXIDX, STDIO_STDARG_H_FIXIDX, STDIO_VA_LIST_FIXIDX, *************** typedef enum { *** 5773,5808 **** } t_fixinc_idx; tFixDesc fixDescList[ FIX_COUNT ] = { - { zAaa_Bad_FixesName, zAaa_Bad_FixesList, - apzAaa_Bad_FixesMachs, - AAA_BAD_FIXES_TEST_CT, FD_MACH_ONLY | FD_REPLACEMENT, - aAaa_Bad_FixesTests, apzAaa_Bad_FixesPatch, 0 }, - - { zAaa_KiName, zAaa_KiList, - apzAaa_KiMachs, - AAA_KI_TEST_CT, FD_MACH_ONLY | FD_REPLACEMENT, - aAaa_KiTests, apzAaa_KiPatch, 0 }, - - { zAaa_Ki_CallsName, zAaa_Ki_CallsList, - apzAaa_Ki_CallsMachs, - AAA_KI_CALLS_TEST_CT, FD_MACH_ONLY | FD_REPLACEMENT, - aAaa_Ki_CallsTests, apzAaa_Ki_CallsPatch, 0 }, - - { zAaa_Ki_DefsName, zAaa_Ki_DefsList, - apzAaa_Ki_DefsMachs, - AAA_KI_DEFS_TEST_CT, FD_MACH_ONLY | FD_REPLACEMENT, - aAaa_Ki_DefsTests, apzAaa_Ki_DefsPatch, 0 }, - - { zAaa_Ki_IfaceName, zAaa_Ki_IfaceList, - apzAaa_Ki_IfaceMachs, - AAA_KI_IFACE_TEST_CT, FD_MACH_ONLY | FD_REPLACEMENT, - aAaa_Ki_IfaceTests, apzAaa_Ki_IfacePatch, 0 }, - - { zAaa_StandardsName, zAaa_StandardsList, - apzAaa_StandardsMachs, - AAA_STANDARDS_TEST_CT, FD_MACH_ONLY | FD_REPLACEMENT, - aAaa_StandardsTests, apzAaa_StandardsPatch, 0 }, - { zAab_Dgux_Int_VarargsName, zAab_Dgux_Int_VarargsList, apzAab_Dgux_Int_VarargsMachs, AAB_DGUX_INT_VARARGS_TEST_CT, FD_MACH_ONLY | FD_REPLACEMENT, --- 5734,5739 ---- *************** tFixDesc fixDescList[ FIX_COUNT ] = { *** 5828,5833 **** --- 5759,5769 ---- AAB_SUN_MEMCPY_TEST_CT, FD_MACH_ONLY | FD_REPLACEMENT, aAab_Sun_MemcpyTests, apzAab_Sun_MemcpyPatch, 0 }, + { zAab_Solaris_Sys_Varargs_HName, zAab_Solaris_Sys_Varargs_HList, + apzAab_Solaris_Sys_Varargs_HMachs, + AAB_SOLARIS_SYS_VARARGS_H_TEST_CT, FD_MACH_ONLY | FD_REPLACEMENT, + aAab_Solaris_Sys_Varargs_HTests, apzAab_Solaris_Sys_Varargs_HPatch, 0 }, + { zAab_Svr4_Replace_ByteorderName, zAab_Svr4_Replace_ByteorderList, apzAab_Svr4_Replace_ByteorderMachs, AAB_SVR4_REPLACE_BYTEORDER_TEST_CT, FD_MACH_ONLY | FD_REPLACEMENT, *************** tFixDesc fixDescList[ FIX_COUNT ] = { *** 5878,5883 **** --- 5814,5824 ---- ALPHA___ASSERT_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, aAlpha___AssertTests, apzAlpha___AssertPatch, 0 }, + { zAlpha_AssertName, zAlpha_AssertList, + apzAlpha_AssertMachs, + ALPHA_ASSERT_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, + aAlpha_AssertTests, apzAlpha_AssertPatch, 0 }, + { zAlpha_GetoptName, zAlpha_GetoptList, apzAlpha_GetoptMachs, ALPHA_GETOPT_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, *************** tFixDesc fixDescList[ FIX_COUNT ] = { *** 6258,6263 **** --- 6199,6214 ---- SOLARIS_MUTEX_INIT_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, aSolaris_Mutex_InitTests, apzSolaris_Mutex_InitPatch, 0 }, + { zSolaris_Stdio_TagName, zSolaris_Stdio_TagList, + apzSolaris_Stdio_TagMachs, + SOLARIS_STDIO_TAG_TEST_CT, FD_MACH_ONLY, + aSolaris_Stdio_TagTests, apzSolaris_Stdio_TagPatch, 0 }, + + { zSolaris_WidecName, zSolaris_WidecList, + apzSolaris_WidecMachs, + SOLARIS_WIDEC_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, + aSolaris_WidecTests, apzSolaris_WidecPatch, 0 }, + { zStatsswtchName, zStatsswtchList, apzStatsswtchMachs, STATSSWTCH_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, diff -Nrc3pad gcc-3.0.4/gcc/fixinc/gnu-regex.c gcc-3.1/gcc/fixinc/gnu-regex.c *** gcc-3.0.4/gcc/fixinc/gnu-regex.c Sat May 26 18:56:14 2001 --- gcc-3.1/gcc/fixinc/gnu-regex.c Wed Feb 27 00:23:56 2002 *************** *** 22,30 **** along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - #undef _GNU_SOURCE - #define _GNU_SOURCE - #ifdef HAVE_CONFIG_H # include #endif --- 22,27 ---- *************** extern char *re_syntax_table; *** 156,161 **** --- 153,160 ---- static char re_syntax_table[CHAR_SET_SIZE]; + static void init_syntax_once PARAMS ((void)); + static void init_syntax_once () { *************** weak_alias (__re_set_syntax, re_set_synt *** 947,953 **** POSIX doesn't require that we do anything for REG_NOERROR, but why not be nice? */ ! static const char *re_error_msgid[] = { gettext_noop ("Success"), /* REG_NOERROR */ gettext_noop ("No match"), /* REG_NOMATCH */ --- 946,952 ---- POSIX doesn't require that we do anything for REG_NOERROR, but why not be nice? */ ! static const char *const re_error_msgid[] = { gettext_noop ("Success"), /* REG_NOERROR */ gettext_noop ("No match"), /* REG_NOMATCH */ diff -Nrc3pad gcc-3.0.4/gcc/fixinc/inclhack.def gcc-3.1/gcc/fixinc/inclhack.def *** gcc-3.0.4/gcc/fixinc/inclhack.def Thu Dec 13 02:20:27 2001 --- gcc-3.1/gcc/fixinc/inclhack.def Mon Apr 29 19:31:17 2002 *************** autogen definitions fixincl; *** 10,16 **** blocksort output=XXX \ pattern='^/\*$' \ ! start='DO +NOT +DO +BROKEN +FIXES' \ trailer='^/\*EOF\*[/]' \ input=inclhack.def \ key='hackname[ ]*=[ ]*(.*);' --- 10,16 ---- blocksort output=XXX \ pattern='^/\*$' \ ! start='== REPLACEMENT FIXES ==' \ trailer='^/\*EOF\*[/]' \ input=inclhack.def \ key='hackname[ ]*=[ ]*(.*);' *************** autogen definitions fixincl; *** 22,99 **** FIXINC_DEBUG = yes; #endif ! /* DO NOT DO BROKEN FIXES (empty replacement fixes) */ ! ! /* ! * 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 ! * require fixing, we remove it from the fixed directory. ! */ ! fix = { ! hackname = AAA_bad_fixes; ! files = sundev/ipi_error.h; ! /* shouldn't there be a select expression here??? */ ! replace; /* empty replacement -> no fixing the file */ ! }; ! ! ! /* ! * Purge some HP-UX 11 files that are only broken after they are "fixed". ! */ ! fix = { ! hackname = AAA_ki; ! files = sys/ki.h; ! select = '11.00 HP-UX LP64'; ! replace; /* empty replacement -> no fixing the file */ ! }; ! ! ! /* ! * Purge some HP-UX 11 files that are only broken after they are "fixed". ! */ ! fix = { ! hackname = AAA_ki_calls; ! files = sys/ki_calls.h; ! select = 'kthread_create_caller_t'; ! replace; /* empty replacement -> no fixing the file */ ! }; ! ! ! /* ! * Purge some HP-UX 11 files that are only broken after they are "fixed". ! */ ! fix = { ! hackname = AAA_ki_defs; ! files = sys/ki_defs.h; ! select = 'Kernel Instrumentation Definitions'; ! replace; /* empty replacement -> no fixing the file */ ! }; ! ! ! /* ! * Purge some HP-UX 11 files that are only broken after they are "fixed". ! */ ! fix = { ! hackname = AAA_ki_iface; ! files = sys/ki_iface.h; ! select = 'These definitions are for HP Internal developers'; ! replace; /* empty replacement -> no fixing the file */ ! }; ! ! ! /* ! * Tru64 UNIX V4.0F/V5.1 defines _NO_PROTO and _NONSTD_TYPES ! * correctly for GCC, but strict_ansi_not breaks it. ! */ ! fix = { ! hackname = AAA_standards; ! files = standards.h; ! select = 'GNU and MIPS C compilers define __STDC__ differently'; ! replace; /* empty replacement -> no fixing the file */ ! }; ! ! /* And now, the real fixes, replacement text fixes first: */ /* * Completely replace <_int_varargs.h> with a file that includes gcc's --- 22,28 ---- FIXINC_DEBUG = yes; #endif ! /* == REPLACEMENT FIXES == */ /* * Completely replace <_int_varargs.h> with a file that includes gcc's *************** fix = { *** 102,170 **** fix = { hackname = AAB_dgux_int_varargs; files = _int_varargs.h; ! replace = ! "#ifndef __INT_VARARGS_H ! \#define __INT_VARARGS_H ! ! /************************************************************************/ ! /* _INT_VARARGS.H - Define the common stuff for varargs/stdarg/stdio. */ ! /************************************************************************/ ! ! /*" " ! ** This file is a DG internal header. Never include this ! ** file directly. ! */ ! ! \#ifndef ___int_features_h ! \#include ! \#endif ! ! \#if !(defined(_VA_LIST) || defined(_VA_LIST_)) ! \#define _VA_LIST ! \#define _VA_LIST_ ! ! \#ifdef __LINT__ ! ! \#ifdef __STDC__ ! typedef void * va_list; ! \#else ! typedef char * va_list; ! \#endif ! ! \#else ! \#if _M88K_ANY ! ! \#if defined(__DCC__) ! ! typedef struct { ! int next_arg; ! int *mem_ptr; ! int *reg_ptr; ! } va_list; ! ! \#else /* ! defined(__DCC__) */ ! ! typedef struct { ! int __va_arg; /* argument number */ ! int *__va_stk; /* start of args passed on stack */ ! int *__va_reg; /* start of args passed in regs */ ! } va_list; ! ! \#endif /* ! defined(__DCC__) */ ! ! \#elif _IX86_ANY ! ! \#if defined(__GNUC__) || defined(__STDC__) ! typedef void * va_list; ! \#else ! typedef char * va_list; ! \#endif ! ! \#endif /* _IX86_ANY */ ! ! \#endif /* __LINT__ */ ! \#endif /* !(defined(_VA_LIST) || defined(_VA_LIST_)) */ ! \#endif /* #ifndef __INT_VARARGS_H */\n"; }; --- 31,100 ---- fix = { hackname = AAB_dgux_int_varargs; files = _int_varargs.h; ! replace = <<- _EOF_ ! #ifndef __INT_VARARGS_H ! #define __INT_VARARGS_H ! ! /********************************************************/ ! /* Define the common stuff for varargs/stdarg/stdio. */ ! /********************************************************/ ! ! /* ! ** This file is a DG internal header. Never include this ! ** file directly. ! */ ! ! #ifndef ___int_features_h ! #include ! #endif ! ! #if !(defined(_VA_LIST) || defined(_VA_LIST_)) ! #define _VA_LIST ! #define _VA_LIST_ ! ! #ifdef __LINT__ ! ! #ifdef __STDC__ ! typedef void * va_list; ! #else ! typedef char * va_list; ! #endif ! ! #else ! #if _M88K_ANY ! ! #if defined(__DCC__) ! ! typedef struct { ! int next_arg; ! int *mem_ptr; ! int *reg_ptr; ! } va_list; ! ! #else /* ! defined(__DCC__) */ ! ! typedef struct { ! int __va_arg; /* argument number */ ! int *__va_stk; /* start of args passed on stack */ ! int *__va_reg; /* start of args passed in regs */ ! } va_list; ! ! #endif /* ! defined(__DCC__) */ ! ! #elif _IX86_ANY ! ! #if defined(__GNUC__) || defined(__STDC__) ! typedef void * va_list; ! #else ! typedef char * va_list; ! #endif ! ! #endif /* _IX86_ANY */ ! ! #endif /* __LINT__ */ ! #endif /* !(defined(_VA_LIST) || defined(_VA_LIST_)) */ ! #endif /* #ifndef __INT_VARARGS_H */ ! _EOF_; }; *************** fix = { *** 183,211 **** * the wrapper, this will follow the #include_next chain until * we arrive at the real . */ ! replace = ! ! '/* This file fixes a bug in the __FD_ZERO macro ! for older versions of the Linux kernel. */ ! \#ifndef _POSIX_TYPES_H_WRAPPER ! \#include ! \#include_next ! ! \#if defined(__FD_ZERO) && !defined(__GLIBC__) ! \#undef __FD_ZERO ! \#define __FD_ZERO(fdsetp) \\ ! do { \\ ! int __d0, __d1; \\ ! __asm__ __volatile__("cld ; rep ; stosl" \\ ! : "=&c" (__d0), "=&D" (__d1) \\ ! : "a" (0), "0" (__FDSET_LONGS), \\ ! "1" ((__kernel_fd_set *) (fdsetp)) :"memory"); \\ ! } while (0) ! \#endif ! ! \#define _POSIX_TYPES_H_WRAPPER ! \#endif /* _POSIX_TYPES_H_WRAPPER */ ! '; }; --- 113,140 ---- * the wrapper, this will follow the #include_next chain until * we arrive at the real . */ ! replace = <<- _EOF_ ! /* This file fixes a bug in the __FD_ZERO macro ! for older versions of the Linux kernel. */ ! #ifndef _POSIX_TYPES_H_WRAPPER ! #include ! #include_next ! ! #if defined(__FD_ZERO) && !defined(__GLIBC__) ! #undef __FD_ZERO ! #define __FD_ZERO(fdsetp) \ ! do { \ ! int __d0, __d1; \ ! __asm__ __volatile__("cld ; rep ; stosl" \ ! : "=&c" (__d0), "=&D" (__d1) \ ! : "a" (0), "0" (__FDSET_LONGS), \ ! "1" ((__kernel_fd_set *) (fdsetp)) :"memory"); \ ! } while (0) ! #endif ! ! #define _POSIX_TYPES_H_WRAPPER ! #endif /* _POSIX_TYPES_H_WRAPPER */ ! _EOF_; }; *************** extern int memcmp(); *** 331,336 **** --- 260,282 ---- /* + * Solaris is a DDK (aka kernel-land) header providing + * the same interface as . No idea why they couldn't have just + * used the standard header. + */ + fix = { + hackname = AAB_solaris_sys_varargs_h; + files = "sys/varargs.h"; + mach = '*-*-solaris*'; + replace = "#ifdef __STDC__\n" + "#include \n" + "#else\n" + "#include \n" + "#endif\n"; + }; + + + /* * Completely replace with a file that includes gcc's * stdarg.h or varargs.h files as appropriate. */ *************** fix = { *** 657,662 **** --- 603,622 ---- /* + * Fix assert macro in assert.h on Alpha OSF/1. + * The superfluous int cast breaks C++. + */ + fix = { + hackname = alpha_assert; + files = "assert.h"; + select = '(#define assert\(EX\).*)\(\(int\) \(EX\)\)'; + c_fix = format; + c_fix_arg = "%1(EX)"; + test_text = '#define assert(EX) (((int) (EX)) ? (void)0 : __assert(#EX, __FILE__, __LINE__))'; + }; + + + /* * Fix getopt declarations in stdio.h and stdlib.h on Alpha OSF/1 and AIX. */ fix = { *************** fix = { *** 2118,2123 **** --- 2078,2115 ---- /* + * Solaris 2.8 has what appears to be some gross workaround for + * some old version of their c++ compiler. G++ doesn't want it + * either, but doesn't want to be tied to SunPRO version numbers. + */ + fix = { + hackname = solaris_stdio_tag; + files = stdio_tag.h; + + select = '__cplusplus < 54321L'; + sed = 's/defined(__cplusplus) && (__cplusplus < 54321L)/0/'; + + test_text = "#if\tdefined(__cplusplus) && (__cplusplus < 54321L)"; + }; + + /* + * until Solaris 2.5.1 defines macros for a couple of + * functions, breaking their prototypes if that file is included afterwards. + * Include early to avoid this issue, as is done on Solaris 2.6 + * and up. + */ + fix = { + hackname = solaris_widec; + files = widec.h; + mach = '*-*-solaris2.[0-5]*'; + bypass = "include.*wchar\\.h"; + select = "#include "; + c_fix = format; + c_fix_arg = "%0\n#include "; + test_text = "#include "; + }; + + /* * Sony NEWSOS 5.0 does not support the complete ANSI C standard. */ #ifdef SONY *************** fix = { *** 2244,2249 **** --- 2236,2243 ---- "|__STDC__[ \t]*==[ \t]*0" "|__STDC__[ \t]*!=[ \t]*1" "|__STDC__[ \t]*-[ \t]*0[ \t]*==[ \t]*0)"; + /* Tru64 UNIX V4.0F/V5.1 supports GCC usage of __STDC__. */ + bypass = 'GNU and MIPS C compilers define __STDC__ differently'; c_test = stdc_0_in_system_headers; c_fix = format; diff -Nrc3pad gcc-3.0.4/gcc/fixinc/mkfixinc.sh gcc-3.1/gcc/fixinc/mkfixinc.sh *** gcc-3.0.4/gcc/fixinc/mkfixinc.sh Thu Dec 13 02:20:27 2001 --- gcc-3.1/gcc/fixinc/mkfixinc.sh Sat Jan 5 04:06:51 2002 *************** case $machine in *** 60,66 **** fixincludes=fixinc.ptx ;; ! alpha*-dec-vms* | \ arm-semi-aout | \ armel-semi-aout | \ arm-semi-aof | \ --- 60,66 ---- fixincludes=fixinc.ptx ;; ! alpha*-dec-*vms* | \ arm-semi-aout | \ armel-semi-aout | \ arm-semi-aof | \ diff -Nrc3pad gcc-3.0.4/gcc/fixinc/procopen.c gcc-3.1/gcc/fixinc/procopen.c *** gcc-3.0.4/gcc/fixinc/procopen.c Wed Dec 13 20:07:46 2000 --- gcc-3.1/gcc/fixinc/procopen.c Wed Apr 4 00:46:26 2001 *************** *** 46,52 **** * If you do not wish that, delete this exception notice. */ #include "auto-host.h" ! #include "gansidecl.h" #include "system.h" #include "server.h" --- 46,52 ---- * If you do not wish that, delete this exception notice. */ #include "auto-host.h" ! #include "ansidecl.h" #include "system.h" #include "server.h" diff -Nrc3pad gcc-3.0.4/gcc/fixinc/server.h gcc-3.1/gcc/fixinc/server.h *** gcc-3.0.4/gcc/fixinc/server.h Wed Dec 13 20:07:46 2000 --- gcc-3.1/gcc/fixinc/server.h Sat May 26 01:31:46 2001 *************** *** 46,53 **** * If you do not wish that, delete this exception notice. */ ! #ifndef FIXINC_SERVER_H ! #define FIXINC_SERVER_H #include #ifdef HAVE_UNISTD_H --- 46,53 ---- * If you do not wish that, delete this exception notice. */ ! #ifndef GCC_SERVER_H ! #define GCC_SERVER_H #include #ifdef HAVE_UNISTD_H *************** pid_t proc2_open PARAMS (( t_fd_pair * *** 78,81 **** int chain_open PARAMS (( int in_fd, tCC ** pp_args, pid_t * p_child)); void close_server PARAMS (( void )); ! #endif /* FIXINC_SERVER_H */ --- 78,82 ---- int chain_open PARAMS (( int in_fd, tCC ** pp_args, pid_t * p_child)); void close_server PARAMS (( void )); ! ! #endif /* ! GCC_SERVER_H */ diff -Nrc3pad gcc-3.0.4/gcc/fixinc/tests/base/assert.h gcc-3.1/gcc/fixinc/tests/base/assert.h *** gcc-3.0.4/gcc/fixinc/tests/base/assert.h Sat May 26 18:56:14 2001 --- gcc-3.1/gcc/fixinc/tests/base/assert.h Sat Mar 23 21:33:48 2002 *************** extern void __assert(const char *, const *** 24,29 **** --- 24,34 ---- #endif /* ALPHA___ASSERT_CHECK */ + #if defined( ALPHA_ASSERT_CHECK ) + #define assert(EX) ((EX) ? (void)0 : __assert(#EX, __FILE__, __LINE__)) + #endif /* ALPHA_ASSERT_CHECK */ + + #if defined( BROKEN_ASSERT_STDIO_CHECK ) extern FILE* stderr; #endif /* BROKEN_ASSERT_STDIO_CHECK */ diff -Nrc3pad gcc-3.0.4/gcc/fixinc/tests/base/stdio_tag.h gcc-3.1/gcc/fixinc/tests/base/stdio_tag.h *** gcc-3.0.4/gcc/fixinc/tests/base/stdio_tag.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/fixinc/tests/base/stdio_tag.h Sat Mar 23 21:33:49 2002 *************** *** 0 **** --- 1,14 ---- + /* DO NOT EDIT THIS FILE. + + It has been auto-edited by fixincludes from: + + "fixinc/tests/inc/stdio_tag.h" + + This had to be done to correct non-standard usages in the + original, manufacturer supplied header file. */ + + + + #if defined( SOLARIS_STDIO_TAG_CHECK ) + #if 0 + #endif /* SOLARIS_STDIO_TAG_CHECK */ diff -Nrc3pad gcc-3.0.4/gcc/fixinc/tests/base/widec.h gcc-3.1/gcc/fixinc/tests/base/widec.h *** gcc-3.0.4/gcc/fixinc/tests/base/widec.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/fixinc/tests/base/widec.h Mon Apr 29 19:31:19 2002 *************** *** 0 **** --- 1,15 ---- + /* DO NOT EDIT THIS FILE. + + It has been auto-edited by fixincludes from: + + "fixinc/tests/inc/widec.h" + + This had to be done to correct non-standard usages in the + original, manufacturer supplied header file. */ + + + + #if defined( SOLARIS_WIDEC_CHECK ) + #include + #include + #endif /* SOLARIS_WIDEC_CHECK */ diff -Nrc3pad gcc-3.0.4/gcc/fixproto gcc-3.1/gcc/fixproto *** gcc-3.0.4/gcc/fixproto Sat Jan 27 21:07:57 2001 --- gcc-3.1/gcc/fixproto Wed Aug 22 14:35:04 2001 *************** *** 5,29 **** # # COPYRIGHT # Copyright (C) 1993, 1994, 1997, 1998 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. # # DESCRIPTION ! # Adjunct script for GNU CC to populate a directory with ANSI, # Posix.1, and C++ compatible header files. # # Each file found under SOURCE-DIR-ALL is analyzed and "fixed." --- 5,29 ---- # # COPYRIGHT # Copyright (C) 1993, 1994, 1997, 1998 Free Software Foundation, Inc. ! # This file is part of GCC. # ! # GCC is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # ! # GCC is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License ! # along with GCC; see the file COPYING. If not, write to # the Free Software Foundation, 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # # DESCRIPTION ! # Adjunct script for GCC to populate a directory with ANSI, # Posix.1, and C++ compatible header files. # # Each file found under SOURCE-DIR-ALL is analyzed and "fixed." diff -Nrc3pad gcc-3.0.4/gcc/flags.h gcc-3.1/gcc/flags.h *** gcc-3.0.4/gcc/flags.h Sat May 12 20:55:52 2001 --- gcc-3.1/gcc/flags.h Thu Mar 21 23:12:21 2002 *************** *** 1,23 **** ! /* Compilation switch flag definitions for GNU CC. Copyright (C) 1987, 1988, 1994, 1995, 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #ifndef GCC_FLAGS_H #define GCC_FLAGS_H --- 1,23 ---- ! /* Compilation switch flag definitions for GCC. Copyright (C) 1987, 1988, 1994, 1995, 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #ifndef GCC_FLAGS_H #define GCC_FLAGS_H *************** enum debug_info_type *** 32,38 **** SDB_DEBUG, /* Write COFF for (old) SDB (using sdbout.c). */ DWARF_DEBUG, /* Write Dwarf debug info (using dwarfout.c). */ DWARF2_DEBUG, /* Write Dwarf v2 debug info (using dwarf2out.c). */ ! XCOFF_DEBUG /* Write IBM/Xcoff debug info (using dbxout.c). */ }; /* Specify which kind of debugging info to generate. */ --- 32,41 ---- SDB_DEBUG, /* Write COFF for (old) SDB (using sdbout.c). */ DWARF_DEBUG, /* Write Dwarf debug info (using dwarfout.c). */ DWARF2_DEBUG, /* Write Dwarf v2 debug info (using dwarf2out.c). */ ! XCOFF_DEBUG, /* Write IBM/Xcoff debug info (using dbxout.c). */ ! VMS_DEBUG, /* Write VMS debug info (using vmsdbgout.c). */ ! VMS_AND_DWARF2_DEBUG /* Write VMS debug info (using vmsdbgout.c). ! and DWARF v2 debug info (using dwarf2out.c). */ }; /* Specify which kind of debugging info to generate. */ *************** enum debug_info_level *** 42,48 **** { DINFO_LEVEL_NONE, /* Write no debugging info. */ DINFO_LEVEL_TERSE, /* Write minimal info to support tracebacks only. */ ! DINFO_LEVEL_NORMAL, /* Write info for all declarations (and line table). */ DINFO_LEVEL_VERBOSE /* Write normal info plus #define/#undef info. */ }; --- 45,51 ---- { DINFO_LEVEL_NONE, /* Write no debugging info. */ DINFO_LEVEL_TERSE, /* Write minimal info to support tracebacks only. */ ! DINFO_LEVEL_NORMAL, /* Write info for all declarations (and line table). */ DINFO_LEVEL_VERBOSE /* Write normal info plus #define/#undef info. */ }; *************** extern int extra_warnings; *** 89,95 **** /* Nonzero to warn about unused variables, functions et.al. Use set_Wunused() to update the -Wunused-* flags that correspond to the ! -Wunused option. */ extern void set_Wunused PARAMS ((int setting)); --- 92,98 ---- /* Nonzero to warn about unused variables, functions et.al. Use set_Wunused() to update the -Wunused-* flags that correspond to the ! -Wunused option. */ extern void set_Wunused PARAMS ((int setting)); *************** extern int warn_uninitialized; *** 119,125 **** extern int warn_unknown_pragmas; ! /* Nonzero means warn about all declarations which shadow others. */ extern int warn_shadow; --- 122,128 ---- extern int warn_unknown_pragmas; ! /* Nonzero means warn about all declarations which shadow others. */ extern int warn_shadow; *************** extern int warn_switch; *** 132,138 **** extern int warn_return_type; ! /* Warn about functions which might be candidates for attribute noreturn. */ extern int warn_missing_noreturn; --- 135,141 ---- extern int warn_return_type; ! /* Warn about functions which might be candidates for attribute noreturn. */ extern int warn_missing_noreturn; *************** extern int warn_missing_noreturn; *** 142,153 **** extern int warn_cast_align; - /* Nonzero means warn about any identifiers that match in the first N - characters. The value N is in `id_clash_len'. */ - - extern int warn_id_clash; - extern int id_clash_len; - /* Nonzero means warn about any objects definitions whose size is larger than N bytes. Also want about function definitions whose returned values are larger than N bytes. The value N is in `larger_than_size'. */ --- 145,150 ---- *************** extern int warn_padded; *** 172,194 **** extern int warn_disabled_optimization; ! /* Nonzero if generating code to do profiling. */ ! extern int profile_flag; ! /* Nonzero if generating code to do profiling on the basis of basic blocks. */ ! extern int profile_block_flag; ! /* Nonzero if generating code to profile program flow graph arcs. */ extern int profile_arc_flag; ! /* Nonzero if generating info for gcov to calculate line test coverage. */ extern int flag_test_coverage; ! /* Nonzero indicates that branch taken probabilities should be calculated. */ extern int flag_branch_probabilities; --- 169,192 ---- extern int warn_disabled_optimization; ! /* Nonzero means warn about uses of __attribute__((deprecated)) ! declarations. */ ! extern int warn_deprecated_decl; ! /* Nonzero if generating code to do profiling. */ ! extern int profile_flag; ! /* Nonzero if generating code to profile program flow graph arcs. */ extern int profile_arc_flag; ! /* Nonzero if generating info for gcov to calculate line test coverage. */ extern int flag_test_coverage; ! /* Nonzero indicates that branch taken probabilities should be calculated. */ extern int flag_branch_probabilities; *************** extern int flag_unroll_loops; *** 272,283 **** extern int flag_unroll_all_loops; /* Nonzero forces all invariant computations in loops to be moved ! outside the loop. */ extern int flag_move_all_movables; /* Nonzero forces all general induction variables in loops to be ! strength reduced. */ extern int flag_reduce_all_givs; --- 270,285 ---- extern int flag_unroll_all_loops; /* Nonzero forces all invariant computations in loops to be moved ! outside the loop. */ extern int flag_move_all_movables; + /* Nonzero enables prefetch optimizations for arrays in loops. */ + + extern int flag_prefetch_loop_arrays; + /* Nonzero forces all general induction variables in loops to be ! strength reduced. */ extern int flag_reduce_all_givs; *************** extern int flag_volatile_global; *** 327,348 **** extern int flag_volatile_static; - /* Nonzero allows GCC to violate some IEEE or ANSI rules regarding math - operations in the interest of optimization. For example it allows - GCC to assume arguments to sqrt are nonnegative numbers, allowing - faster code for sqrt to be generated. */ - - extern int flag_fast_math; - /* Nonzero allows GCC to optimize sibling and tail recursive calls. */ extern int flag_optimize_sibling_calls; /* Nonzero means the front end generally wants `errno' maintained by math ! operations, like built-in SQRT, unless overridden by flag_fast_math. */ extern int flag_errno_math; /* 0 means straightforward implementation of complex divide acceptable. 1 means wide ranges of inputs must work for complex divide. 2 means C99-like requirements for complex divide (not yet implemented). */ --- 329,356 ---- extern int flag_volatile_static; /* Nonzero allows GCC to optimize sibling and tail recursive calls. */ extern int flag_optimize_sibling_calls; /* Nonzero means the front end generally wants `errno' maintained by math ! operations, like built-in SQRT. */ extern int flag_errno_math; + /* Nonzero means that unsafe floating-point math optimizations are allowed + for the sake of speed. IEEE compliance is not guaranteed, and operations + are allowed to assume that their arguments and results are "normal" + (e.g., nonnegative for SQRT). */ + + extern int flag_unsafe_math_optimizations; + + /* Zero means that floating-point math operations cannot generate a + (user-visible) trap. This is the case, for example, in nonstop + IEEE 754 arithmetic. */ + + extern int flag_trapping_math; + /* 0 means straightforward implementation of complex divide acceptable. 1 means wide ranges of inputs must work for complex divide. 2 means C99-like requirements for complex divide (not yet implemented). */ *************** extern int flag_keep_inline_functions; *** 372,377 **** --- 380,390 ---- extern int flag_no_inline; + /* Nonzero means that we don't want inlining by virtue of -fno-inline, + not just because the tree inliner turned us off. */ + + extern int flag_really_no_inline; + /* Nonzero if we are only using compiler to check syntax errors. */ extern int flag_syntax_only; *************** extern int flag_schedule_speculative_loa *** 408,423 **** extern int flag_schedule_speculative_load_dangerous; /* flag_branch_on_count_reg means try to replace add-1,compare,branch tupple ! by a cheaper branch, on a count register. */ extern int flag_branch_on_count_reg; /* This option is set to 1 on -fsingle-precision-constant option which is used to convert the floating point constants to single precision ! constants. */ extern int flag_single_precision_constant; ! /* Nonzero means put things in delayed-branch slots if supported. */ extern int flag_delayed_branch; --- 421,436 ---- extern int flag_schedule_speculative_load_dangerous; /* flag_branch_on_count_reg means try to replace add-1,compare,branch tupple ! by a cheaper branch, on a count register. */ extern int flag_branch_on_count_reg; /* This option is set to 1 on -fsingle-precision-constant option which is used to convert the floating point constants to single precision ! constants. */ extern int flag_single_precision_constant; ! /* Nonzero means put things in delayed-branch slots if supported. */ extern int flag_delayed_branch; *************** extern int flag_exceptions; *** 451,456 **** --- 464,473 ---- extern int flag_unwind_tables; + /* Nonzero means generate frame unwind info table exact at each insn boundary */ + + extern int flag_asynchronous_unwind_tables; + /* Nonzero means don't place uninitialized global data in common storage by default. */ *************** extern int flag_regmove; *** 523,529 **** /* Instrument functions with calls at entry and exit, for profiling. */ extern int flag_instrument_function_entry_exit; ! /* Perform a peephole pass before sched2. */ extern int flag_peephole2; /* Try to guess branch probablities. */ --- 540,546 ---- /* Instrument functions with calls at entry and exit, for profiling. */ extern int flag_instrument_function_entry_exit; ! /* Perform a peephole pass before sched2. */ extern int flag_peephole2; /* Try to guess branch probablities. */ *************** extern int flag_bounded_pointers; *** 544,549 **** --- 561,571 ---- For CHILL: defaults to off. */ extern int flag_bounds_check; + /* This will attempt to merge constant section constants, if 1 only + string constants and constants from constant pool, if 2 also constant + variables. */ + extern int flag_merge_constants; + /* If one, renumber instruction UIDs to reduce the number of unused UIDs if there are a lot of instructions. If greater than one, unconditionally renumber instruction UIDs. */ *************** extern int flag_renumber_insns; *** 557,575 **** extern int frame_pointer_needed; - /* Nonzero if GCC must add code to check memory access (used by Checker). */ - - extern int flag_check_memory_usage; - /* Nonzero if the generated code should trap on signed overflow for PLUS / SUB / MULT. */ extern int flag_trapv; - /* Nonzero if GCC must prefix function names (used with - flag_check_memory_usage). */ - - extern int flag_prefix_function_name; - /* Value of the -G xx switch, and whether it was passed or not. */ extern int g_switch_value; extern int g_switch_set; --- 579,588 ---- *************** extern int g_switch_set; *** 581,590 **** --- 594,606 ---- extern int align_loops; extern int align_loops_log; + extern int align_loops_max_skip; extern int align_jumps; extern int align_jumps_log; + extern int align_jumps_max_skip; extern int align_labels; extern int align_labels_log; + extern int align_labels_max_skip; extern int align_functions; extern int align_functions_log; *************** extern enum graph_dump_types graph_dump_ *** 605,610 **** --- 621,635 ---- extern int flag_no_ident; + /* Nonzero if we want to perform enhanced load motion during gcse. */ + + extern int flag_gcse_lm; + + /* Nonzero if we want to perform store motion after gcse. */ + + extern int flag_gcse_sm; + + /* Nonzero means we should do dwarf2 duplicate elimination. */ extern int flag_eliminate_dwarf2_dups; *************** extern int flag_detailed_statistics; *** 616,619 **** /* Nonzero means enable synchronous exceptions for non-call instructions. */ extern int flag_non_call_exceptions; ! #endif /* GCC_FLAGS_H */ --- 641,644 ---- /* Nonzero means enable synchronous exceptions for non-call instructions. */ extern int flag_non_call_exceptions; ! #endif /* ! GCC_FLAGS_H */ diff -Nrc3pad gcc-3.0.4/gcc/floatlib.c gcc-3.1/gcc/floatlib.c *** gcc-3.0.4/gcc/floatlib.c Wed Jan 27 01:42:18 1999 --- gcc-3.1/gcc/floatlib.c Thu Oct 11 03:15:38 2001 *************** *** 10,17 **** Warning! Only single-precision is actually implemented. This file won't really be much use until double-precision is supported. ! However, once that is done, this file might eventually become a ! replacement for libgcc1.c. It might also make possible cross-compilation for an IEEE target machine from a non-IEEE host such as a VAX. --- 10,16 ---- Warning! Only single-precision is actually implemented. This file won't really be much use until double-precision is supported. ! However, once that is done, this file might make possible cross-compilation for an IEEE target machine from a non-IEEE host such as a VAX. *************** union float_long *** 101,109 **** float __addsf3 (float a1, float a2) { ! register long mant1, mant2; ! register union float_long fl1, fl2; ! register int exp1, exp2; int sign = 0; fl1.f = a1; --- 100,108 ---- float __addsf3 (float a1, float a2) { ! long mant1, mant2; ! union float_long fl1, fl2; ! int exp1, exp2; int sign = 0; fl1.f = a1; *************** test_done: *** 197,203 **** float __subsf3 (float a1, float a2) { ! register union float_long fl1, fl2; fl1.f = a1; fl2.f = a2; --- 196,202 ---- float __subsf3 (float a1, float a2) { ! union float_long fl1, fl2; fl1.f = a1; fl2.f = a2; *************** __subsf3 (float a1, float a2) *** 217,223 **** long __cmpsf2 (float a1, float a2) { ! register union float_long fl1, fl2; fl1.f = a1; fl2.f = a2; --- 216,222 ---- long __cmpsf2 (float a1, float a2) { ! union float_long fl1, fl2; fl1.f = a1; fl2.f = a2; *************** __cmpsf2 (float a1, float a2) *** 238,246 **** float __mulsf3 (float a1, float a2) { ! register union float_long fl1, fl2; ! register unsigned long result; ! register int exp; int sign; fl1.f = a1; --- 237,245 ---- float __mulsf3 (float a1, float a2) { ! union float_long fl1, fl2; ! unsigned long result; ! int exp; int sign; fl1.f = a1; *************** test_done: *** 295,304 **** float __divsf3 (float a1, float a2) { ! register union float_long fl1, fl2; ! register int result; ! register int mask; ! register int exp, sign; fl1.f = a1; fl2.f = a2; --- 294,303 ---- float __divsf3 (float a1, float a2) { ! union float_long fl1, fl2; ! int result; ! int mask; ! int exp, sign; fl1.f = a1; fl2.f = a2; *************** __divsf3 (float a1, float a2) *** 359,367 **** /* convert int to double */ double ! __floatsidf (register long a1) { ! register int sign = 0, exp = 31 + EXCESSD; union double_long dl; if (!a1) --- 358,366 ---- /* convert int to double */ double ! __floatsidf (long a1) { ! int sign = 0, exp = 31 + EXCESSD; union double_long dl; if (!a1) *************** __floatsidf (register long a1) *** 398,406 **** } double ! __floatdidf (register long long a1) { ! register int exp = 63 + EXCESSD; union double_long dl; dl.l.upper = dl.l.lower = 0; --- 397,405 ---- } double ! __floatdidf (long long a1) { ! int exp = 63 + EXCESSD; union double_long dl; dl.l.upper = dl.l.lower = 0; *************** __floatdidf (register long long a1) *** 429,441 **** } float ! __floatsisf (register long a1) { (float)__floatsidf(a1); } float ! __floatdisf (register long long a1) { (float)__floatdidf(a1); } --- 428,440 ---- } float ! __floatsisf (long a1) { (float)__floatsidf(a1); } float ! __floatdisf (long long a1) { (float)__floatdidf(a1); } *************** __floatdisf (register long long a1) *** 444,450 **** float __negsf2 (float a1) { ! register union float_long fl1; fl1.f = a1; if (!fl1.l) --- 443,449 ---- float __negsf2 (float a1) { ! union float_long fl1; fl1.f = a1; if (!fl1.l) *************** __negsf2 (float a1) *** 458,464 **** double __negdf2 (double a1) { ! register union double_long dl1; dl1.d = a1; --- 457,463 ---- double __negdf2 (double a1) { ! union double_long dl1; dl1.d = a1; *************** __negdf2 (double a1) *** 473,481 **** double __extendsfdf2 (float a1) { ! register union float_long fl1; ! register union double_long dl; ! register int exp; fl1.f = a1; --- 472,480 ---- double __extendsfdf2 (float a1) { ! union float_long fl1; ! union double_long dl; ! int exp; fl1.f = a1; *************** __extendsfdf2 (float a1) *** 498,507 **** float __truncdfsf2 (double a1) { ! register int exp; ! register long mant; ! register union float_long fl; ! register union double_long dl1; dl1.d = a1; --- 497,506 ---- float __truncdfsf2 (double a1) { ! int exp; ! long mant; ! union float_long fl; ! union double_long dl1; dl1.d = a1; *************** __truncdfsf2 (double a1) *** 535,541 **** long __cmpdf2 (double a1, double a2) { ! register union double_long dl1, dl2; dl1.d = a1; dl2.d = a2; --- 534,540 ---- long __cmpdf2 (double a1, double a2) { ! union double_long dl1, dl2; dl1.d = a1; dl2.d = a2; *************** __cmpdf2 (double a1, double a2) *** 560,568 **** long __fixdfsi (double a1) { ! register union double_long dl1; ! register int exp; ! register long l; dl1.d = a1; --- 559,567 ---- long __fixdfsi (double a1) { ! union double_long dl1; ! int exp; ! long l; dl1.d = a1; *************** __fixdfsi (double a1) *** 588,596 **** long long __fixdfdi (double a1) { ! register union double_long dl1; ! register int exp; ! register long long l; dl1.d = a1; --- 587,595 ---- long long __fixdfdi (double a1) { ! union double_long dl1; ! int exp; ! long long l; dl1.d = a1; *************** __fixdfdi (double a1) *** 620,628 **** unsigned long __fixunsdfsi (double a1) { ! register union double_long dl1; ! register int exp; ! register unsigned long l; dl1.d = a1; --- 619,627 ---- unsigned long __fixunsdfsi (double a1) { ! union double_long dl1; ! int exp; ! unsigned long l; dl1.d = a1; *************** __fixunsdfsi (double a1) *** 648,656 **** unsigned long long __fixunsdfdi (double a1) { ! register union double_long dl1; ! register int exp; ! register unsigned long long l; dl1.d = a1; --- 647,655 ---- unsigned long long __fixunsdfdi (double a1) { ! union double_long dl1; ! int exp; ! unsigned long long l; dl1.d = a1; *************** __fixunsdfdi (double a1) *** 677,685 **** double __adddf3 (double a1, double a2) { ! register long long mant1, mant2; ! register union double_long fl1, fl2; ! register int exp1, exp2; int sign = 0; fl1.d = a1; --- 676,684 ---- double __adddf3 (double a1, double a2) { ! long long mant1, mant2; ! union double_long fl1, fl2; ! int exp1, exp2; int sign = 0; fl1.d = a1; *************** test_done: *** 766,772 **** double __subdf3 (double a1, double a2) { ! register union double_long fl1, fl2; fl1.d = a1; fl2.d = a2; --- 765,771 ---- double __subdf3 (double a1, double a2) { ! union double_long fl1, fl2; fl1.d = a1; fl2.d = a2; *************** __subdf3 (double a1, double a2) *** 785,793 **** double __muldf3 (double a1, double a2) { ! register union double_long fl1, fl2; ! register unsigned long long result; ! register int exp; int sign; fl1.d = a1; --- 784,792 ---- double __muldf3 (double a1, double a2) { ! union double_long fl1, fl2; ! unsigned long long result; ! int exp; int sign; fl1.d = a1; *************** test_done: *** 839,847 **** double __divdf3 (double a1, double a2) { ! register union double_long fl1, fl2; ! register long long mask,result; ! register int exp, sign; fl1.d = a1; fl2.d = a2; --- 838,846 ---- double __divdf3 (double a1, double a2) { ! union double_long fl1, fl2; ! long long mask,result; ! int exp, sign; fl1.d = a1; fl2.d = a2; diff -Nrc3pad gcc-3.0.4/gcc/flow.c gcc-3.1/gcc/flow.c *** gcc-3.0.4/gcc/flow.c Tue Oct 30 18:01:10 2001 --- gcc-3.1/gcc/flow.c Thu Apr 18 20:21:09 2002 *************** *** 2,23 **** Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* This file contains the data flow analysis pass of the compiler. It computes data flow information which tells combine_instructions --- 2,23 ---- Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* This file contains the data flow analysis pass of the compiler. It computes data flow information which tells combine_instructions *************** Boston, MA 02111-1307, USA. */ *** 135,140 **** --- 135,141 ---- #include "recog.h" #include "expr.h" #include "ssa.h" + #include "timevar.h" #include "obstack.h" #include "splay-tree.h" *************** Boston, MA 02111-1307, USA. */ *** 166,220 **** #ifndef EPILOGUE_USES #define EPILOGUE_USES(REGNO) 0 #endif ! /* The obstack on which the flow graph components are allocated. */ ! ! struct obstack flow_obstack; ! static char *flow_firstobj; ! ! /* Number of basic blocks in the current function. */ ! ! int n_basic_blocks; ! ! /* Number of edges in the current function. */ ! ! int n_edges; ! ! /* The basic block array. */ ! ! varray_type basic_block_info; ! ! /* The special entry and exit blocks. */ ! ! struct basic_block_def entry_exit_blocks[2] ! = {{NULL, /* head */ ! NULL, /* end */ ! NULL, /* pred */ ! NULL, /* succ */ ! NULL, /* local_set */ ! NULL, /* cond_local_set */ ! NULL, /* global_live_at_start */ ! NULL, /* global_live_at_end */ ! NULL, /* aux */ ! ENTRY_BLOCK, /* index */ ! 0, /* loop_depth */ ! 0 /* count */ ! }, ! { ! NULL, /* head */ ! NULL, /* end */ ! NULL, /* pred */ ! NULL, /* succ */ ! NULL, /* local_set */ ! NULL, /* cond_local_set */ ! NULL, /* global_live_at_start */ ! NULL, /* global_live_at_end */ ! NULL, /* aux */ ! EXIT_BLOCK, /* index */ ! 0, /* loop_depth */ ! 0 /* count */ ! } ! }; /* Nonzero if the second flow pass has completed. */ int flow2_completed; --- 167,181 ---- #ifndef EPILOGUE_USES #define EPILOGUE_USES(REGNO) 0 #endif + #ifndef EH_USES + #define EH_USES(REGNO) 0 + #endif ! #ifdef HAVE_conditional_execution ! #ifndef REVERSE_CONDEXEC_PREDICATES_P ! #define REVERSE_CONDEXEC_PREDICATES_P(x, y) ((x) == reverse_condition (y)) ! #endif ! #endif /* Nonzero if the second flow pass has completed. */ int flow2_completed; *************** int (*lang_missing_noreturn_ok_p) PARAMS *** 253,269 **** static HARD_REG_SET elim_reg_set; - /* The basic block structure for every insn, indexed by uid. */ - - varray_type basic_block_for_insn; - - /* The labels mentioned in non-jump rtl. Valid during find_basic_blocks. */ - /* ??? Should probably be using LABEL_NUSES instead. It would take a - bit of surgery to be able to use or co-opt the routines in jump. */ - - static rtx label_value_list; - static rtx tail_recursion_label_list; - /* Holds information for tracking conditional register life information. */ struct reg_cond_life_info { --- 214,219 ---- *************** struct propagate_block_info *** 333,383 **** new elements on the floor. */ #define MAX_MEM_SET_LIST_LEN 100 - /* Store the data structures necessary for depth-first search. */ - struct depth_first_search_dsS { - /* stack for backtracking during the algorithm */ - basic_block *stack; - - /* number of edges in the stack. That is, positions 0, ..., sp-1 - have edges. */ - unsigned int sp; - - /* record of basic blocks already seen by depth-first search */ - sbitmap visited_blocks; - }; - typedef struct depth_first_search_dsS *depth_first_search_ds; - /* Forward declarations */ - static int count_basic_blocks PARAMS ((rtx)); - static void find_basic_blocks_1 PARAMS ((rtx)); - static rtx find_label_refs PARAMS ((rtx, rtx)); - static void clear_edges PARAMS ((void)); - static void make_edges PARAMS ((rtx)); - static void make_label_edge PARAMS ((sbitmap *, basic_block, - rtx, int)); - static void make_eh_edge PARAMS ((sbitmap *, basic_block, rtx)); - static void mark_critical_edges PARAMS ((void)); - - static void commit_one_edge_insertion PARAMS ((edge)); - - static void delete_unreachable_blocks PARAMS ((void)); - static int can_delete_note_p PARAMS ((rtx)); - static void expunge_block PARAMS ((basic_block)); - static int can_delete_label_p PARAMS ((rtx)); - static int tail_recursion_label_p PARAMS ((rtx)); - static int merge_blocks_move_predecessor_nojumps PARAMS ((basic_block, - basic_block)); - static int merge_blocks_move_successor_nojumps PARAMS ((basic_block, - basic_block)); - static int merge_blocks PARAMS ((edge,basic_block,basic_block)); - static void try_merge_blocks PARAMS ((void)); - static void tidy_fallthru_edges PARAMS ((void)); static int verify_wide_reg_1 PARAMS ((rtx *, void *)); ! static void verify_wide_reg PARAMS ((int, rtx, rtx)); static void verify_local_live_at_start PARAMS ((regset, basic_block)); - static int set_noop_p PARAMS ((rtx)); - static int noop_move_p PARAMS ((rtx)); - static void delete_noop_moves PARAMS ((rtx)); static void notice_stack_pointer_modification_1 PARAMS ((rtx, rtx, void *)); static void notice_stack_pointer_modification PARAMS ((rtx)); static void mark_reg PARAMS ((rtx, void *)); --- 283,292 ---- new elements on the floor. */ #define MAX_MEM_SET_LIST_LEN 100 /* Forward declarations */ static int verify_wide_reg_1 PARAMS ((rtx *, void *)); ! static void verify_wide_reg PARAMS ((int, basic_block)); static void verify_local_live_at_start PARAMS ((regset, basic_block)); static void notice_stack_pointer_modification_1 PARAMS ((rtx, rtx, void *)); static void notice_stack_pointer_modification PARAMS ((rtx)); static void mark_reg PARAMS ((rtx, void *)); *************** static void mark_regs_live_at_end PARAMS *** 385,391 **** static int set_phi_alternative_reg PARAMS ((rtx, int, int, void *)); static void calculate_global_regs_live PARAMS ((sbitmap, sbitmap, int)); static void propagate_block_delete_insn PARAMS ((basic_block, rtx)); ! static rtx propagate_block_delete_libcall PARAMS ((basic_block, rtx, rtx)); static int insn_dead_p PARAMS ((struct propagate_block_info *, rtx, int, rtx)); static int libcall_dead_p PARAMS ((struct propagate_block_info *, --- 294,300 ---- static int set_phi_alternative_reg PARAMS ((rtx, int, int, void *)); static void calculate_global_regs_live PARAMS ((sbitmap, sbitmap, int)); static void propagate_block_delete_insn PARAMS ((basic_block, rtx)); ! static rtx propagate_block_delete_libcall PARAMS ((rtx, rtx)); static int insn_dead_p PARAMS ((struct propagate_block_info *, rtx, int, rtx)); static int libcall_dead_p PARAMS ((struct propagate_block_info *, *************** static void mark_set_regs PARAMS ((stru *** 395,400 **** --- 304,311 ---- static void mark_set_1 PARAMS ((struct propagate_block_info *, enum rtx_code, rtx, rtx, rtx, int)); + static int find_regno_partial PARAMS ((rtx *, void *)); + #ifdef HAVE_conditional_execution static int mark_regno_cond_dead PARAMS ((struct propagate_block_info *, int, rtx)); *************** static void mark_used_regs PARAMS ((str *** 422,534 **** rtx, rtx, rtx)); void dump_flow_info PARAMS ((FILE *)); void debug_flow_info PARAMS ((void)); ! static void dump_edge_info PARAMS ((FILE *, edge, int)); ! static void print_rtl_and_abort PARAMS ((void)); ! static void invalidate_mems_from_autoinc PARAMS ((struct propagate_block_info *, rtx)); static void invalidate_mems_from_set PARAMS ((struct propagate_block_info *, rtx)); ! static void remove_fake_successors PARAMS ((basic_block)); ! static void flow_nodes_print PARAMS ((const char *, const sbitmap, ! FILE *)); ! static void flow_edge_list_print PARAMS ((const char *, const edge *, ! int, FILE *)); ! static void flow_loops_cfg_dump PARAMS ((const struct loops *, ! FILE *)); ! static int flow_loop_nested_p PARAMS ((struct loop *, ! struct loop *)); ! static int flow_loop_entry_edges_find PARAMS ((basic_block, const sbitmap, ! edge **)); ! static int flow_loop_exit_edges_find PARAMS ((const sbitmap, edge **)); ! static int flow_loop_nodes_find PARAMS ((basic_block, basic_block, sbitmap)); ! static int flow_depth_first_order_compute PARAMS ((int *, int *)); ! static void flow_dfs_compute_reverse_init ! PARAMS ((depth_first_search_ds)); ! static void flow_dfs_compute_reverse_add_bb ! PARAMS ((depth_first_search_ds, basic_block)); ! static basic_block flow_dfs_compute_reverse_execute ! PARAMS ((depth_first_search_ds)); ! static void flow_dfs_compute_reverse_finish ! PARAMS ((depth_first_search_ds)); ! static void flow_loop_pre_header_scan PARAMS ((struct loop *)); ! static basic_block flow_loop_pre_header_find PARAMS ((basic_block, ! const sbitmap *)); ! static void flow_loop_tree_node_add PARAMS ((struct loop *, struct loop *)); ! static void flow_loops_tree_build PARAMS ((struct loops *)); ! static int flow_loop_level_compute PARAMS ((struct loop *, int)); ! static int flow_loops_level_compute PARAMS ((struct loops *)); ! static void allocate_bb_life_data PARAMS ((void)); - /* Find basic blocks of the current function. - F is the first insn of the function and NREGS the number of register - numbers in use. */ - - void - find_basic_blocks (f, nregs, file) - rtx f; - int nregs ATTRIBUTE_UNUSED; - FILE *file ATTRIBUTE_UNUSED; - { - int max_uid; - - /* Flush out existing data. */ - if (basic_block_info != NULL) - { - int i; - - clear_edges (); - - /* Clear bb->aux on all extant basic blocks. We'll use this as a - tag for reuse during create_basic_block, just in case some pass - copies around basic block notes improperly. */ - for (i = 0; i < n_basic_blocks; ++i) - BASIC_BLOCK (i)->aux = NULL; - - VARRAY_FREE (basic_block_info); - } - - n_basic_blocks = count_basic_blocks (f); - - /* Size the basic block table. The actual structures will be allocated - by find_basic_blocks_1, since we want to keep the structure pointers - stable across calls to find_basic_blocks. */ - /* ??? This whole issue would be much simpler if we called find_basic_blocks - exactly once, and thereafter we don't have a single long chain of - instructions at all until close to the end of compilation when we - actually lay them out. */ - - VARRAY_BB_INIT (basic_block_info, n_basic_blocks, "basic_block_info"); - - find_basic_blocks_1 (f); - - /* Record the block to which an insn belongs. */ - /* ??? This should be done another way, by which (perhaps) a label is - tagged directly with the basic block that it starts. It is used for - more than that currently, but IMO that is the only valid use. */ - - max_uid = get_max_uid (); - #ifdef AUTO_INC_DEC - /* Leave space for insns life_analysis makes in some cases for auto-inc. - These cases are rare, so we don't need too much space. */ - max_uid += max_uid / 10; - #endif - - compute_bb_for_insn (max_uid); - - /* Discover the edges of our cfg. */ - make_edges (label_value_list); - - /* Do very simple cleanup now, for the benefit of code that runs between - here and cleanup_cfg, e.g. thread_prologue_and_epilogue_insns. */ - tidy_fallthru_edges (); - - mark_critical_edges (); - - #ifdef ENABLE_CHECKING - verify_flow_info (); - #endif - } void check_function_return_warnings () --- 333,347 ---- rtx, rtx, rtx)); void dump_flow_info PARAMS ((FILE *)); void debug_flow_info PARAMS ((void)); ! static void add_to_mem_set_list PARAMS ((struct propagate_block_info *, ! rtx)); static void invalidate_mems_from_autoinc PARAMS ((struct propagate_block_info *, rtx)); static void invalidate_mems_from_set PARAMS ((struct propagate_block_info *, rtx)); ! static void delete_dead_jumptables PARAMS ((void)); ! static void clear_log_links PARAMS ((sbitmap)); void check_function_return_warnings () *************** check_function_return_warnings () *** 561,2657 **** { /* Recompute insn->block mapping, since the initial mapping is set before we delete unreachable blocks. */ - compute_bb_for_insn (max_uid); - if (BLOCK_FOR_INSN (cfun->x_clobber_return_insn) != NULL) warning ("control reaches end of non-void function"); } } } - - /* Count the basic blocks of the function. */ - - static int - count_basic_blocks (f) - rtx f; - { - register rtx insn; - register RTX_CODE prev_code; - register int count = 0; - int saw_abnormal_edge = 0; - - prev_code = JUMP_INSN; - for (insn = f; insn; insn = NEXT_INSN (insn)) - { - enum rtx_code code = GET_CODE (insn); - - if (code == CODE_LABEL - || (GET_RTX_CLASS (code) == 'i' - && (prev_code == JUMP_INSN - || prev_code == BARRIER - || saw_abnormal_edge))) - { - saw_abnormal_edge = 0; - count++; - } - - /* Record whether this insn created an edge. */ - if (code == CALL_INSN) - { - rtx note; - - /* If there is a nonlocal goto label and the specified - region number isn't -1, we have an edge. */ - if (nonlocal_goto_handler_labels - && ((note = find_reg_note (insn, REG_EH_REGION, NULL_RTX)) == 0 - || INTVAL (XEXP (note, 0)) >= 0)) - saw_abnormal_edge = 1; - - else if (can_throw_internal (insn)) - saw_abnormal_edge = 1; - } - else if (flag_non_call_exceptions - && code == INSN - && can_throw_internal (insn)) - saw_abnormal_edge = 1; - - if (code != NOTE) - prev_code = code; - } - - /* The rest of the compiler works a bit smoother when we don't have to - check for the edge case of do-nothing functions with no basic blocks. */ - if (count == 0) - { - emit_insn (gen_rtx_USE (VOIDmode, const0_rtx)); - count = 1; - } - - return count; - } - - /* Scan a list of insns for labels referred to other than by jumps. - This is used to scan the alternatives of a call placeholder. */ - static rtx - find_label_refs (f, lvl) - rtx f; - rtx lvl; - { - rtx insn; - - for (insn = f; insn; insn = NEXT_INSN (insn)) - if (INSN_P (insn) && GET_CODE (insn) != JUMP_INSN) - { - rtx note; - - /* Make a list of all labels referred to other than by jumps - (which just don't have the REG_LABEL notes). - - Make a special exception for labels followed by an ADDR*VEC, - as this would be a part of the tablejump setup code. - - Make a special exception to registers loaded with label - values just before jump insns that use them. */ - - for (note = REG_NOTES (insn); note; note = XEXP (note, 1)) - if (REG_NOTE_KIND (note) == REG_LABEL) - { - rtx lab = XEXP (note, 0), next; - - if ((next = next_nonnote_insn (lab)) != NULL - && GET_CODE (next) == JUMP_INSN - && (GET_CODE (PATTERN (next)) == ADDR_VEC - || GET_CODE (PATTERN (next)) == ADDR_DIFF_VEC)) - ; - else if (GET_CODE (lab) == NOTE) - ; - else if (GET_CODE (NEXT_INSN (insn)) == JUMP_INSN - && find_reg_note (NEXT_INSN (insn), REG_LABEL, lab)) - ; - else - lvl = alloc_EXPR_LIST (0, XEXP (note, 0), lvl); - } - } - - return lvl; - } - - /* Find all basic blocks of the function whose first insn is F. - - Collect and return a list of labels whose addresses are taken. This - will be used in make_edges for use with computed gotos. */ - - static void - find_basic_blocks_1 (f) - rtx f; - { - register rtx insn, next; - int i = 0; - rtx bb_note = NULL_RTX; - rtx lvl = NULL_RTX; - rtx trll = NULL_RTX; - rtx head = NULL_RTX; - rtx end = NULL_RTX; - - /* We process the instructions in a slightly different way than we did - previously. This is so that we see a NOTE_BASIC_BLOCK after we have - closed out the previous block, so that it gets attached at the proper - place. Since this form should be equivalent to the previous, - count_basic_blocks continues to use the old form as a check. */ - - for (insn = f; insn; insn = next) - { - enum rtx_code code = GET_CODE (insn); - - next = NEXT_INSN (insn); - - switch (code) - { - case NOTE: - { - int kind = NOTE_LINE_NUMBER (insn); - - /* Look for basic block notes with which to keep the - basic_block_info pointers stable. Unthread the note now; - we'll put it back at the right place in create_basic_block. - Or not at all if we've already found a note in this block. */ - if (kind == NOTE_INSN_BASIC_BLOCK) - { - if (bb_note == NULL_RTX) - bb_note = insn; - else - next = flow_delete_insn (insn); - } - break; - } - - case CODE_LABEL: - /* A basic block starts at a label. If we've closed one off due - to a barrier or some such, no need to do it again. */ - if (head != NULL_RTX) - { - /* While we now have edge lists with which other portions of - the compiler might determine a call ending a basic block - does not imply an abnormal edge, it will be a bit before - everything can be updated. So continue to emit a noop at - the end of such a block. */ - if (GET_CODE (end) == CALL_INSN && ! SIBLING_CALL_P (end)) - { - rtx nop = gen_rtx_USE (VOIDmode, const0_rtx); - end = emit_insn_after (nop, end); - } - - create_basic_block (i++, head, end, bb_note); - bb_note = NULL_RTX; - } - - head = end = insn; - break; - - case JUMP_INSN: - /* A basic block ends at a jump. */ - if (head == NULL_RTX) - head = insn; - else - { - /* ??? Make a special check for table jumps. The way this - happens is truly and amazingly gross. We are about to - create a basic block that contains just a code label and - an addr*vec jump insn. Worse, an addr_diff_vec creates - its own natural loop. - - Prevent this bit of brain damage, pasting things together - correctly in make_edges. - - The correct solution involves emitting the table directly - on the tablejump instruction as a note, or JUMP_LABEL. */ - - if (GET_CODE (PATTERN (insn)) == ADDR_VEC - || GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC) - { - head = end = NULL; - n_basic_blocks--; - break; - } - } - end = insn; - goto new_bb_inclusive; - - case BARRIER: - /* A basic block ends at a barrier. It may be that an unconditional - jump already closed the basic block -- no need to do it again. */ - if (head == NULL_RTX) - break; - - /* While we now have edge lists with which other portions of the - compiler might determine a call ending a basic block does not - imply an abnormal edge, it will be a bit before everything can - be updated. So continue to emit a noop at the end of such a - block. */ - if (GET_CODE (end) == CALL_INSN && ! SIBLING_CALL_P (end)) - { - rtx nop = gen_rtx_USE (VOIDmode, const0_rtx); - end = emit_insn_after (nop, end); - } - goto new_bb_exclusive; - - case CALL_INSN: - { - /* Record whether this call created an edge. */ - rtx note = find_reg_note (insn, REG_EH_REGION, NULL_RTX); - int region = (note ? INTVAL (XEXP (note, 0)) : 0); - - if (GET_CODE (PATTERN (insn)) == CALL_PLACEHOLDER) - { - /* Scan each of the alternatives for label refs. */ - lvl = find_label_refs (XEXP (PATTERN (insn), 0), lvl); - lvl = find_label_refs (XEXP (PATTERN (insn), 1), lvl); - lvl = find_label_refs (XEXP (PATTERN (insn), 2), lvl); - /* Record its tail recursion label, if any. */ - if (XEXP (PATTERN (insn), 3) != NULL_RTX) - trll = alloc_EXPR_LIST (0, XEXP (PATTERN (insn), 3), trll); - } - - /* A basic block ends at a call that can either throw or - do a non-local goto. */ - if ((nonlocal_goto_handler_labels && region >= 0) - || can_throw_internal (insn)) - { - new_bb_inclusive: - if (head == NULL_RTX) - head = insn; - end = insn; - - new_bb_exclusive: - create_basic_block (i++, head, end, bb_note); - head = end = NULL_RTX; - bb_note = NULL_RTX; - break; - } - } - /* Fall through. */ - - case INSN: - /* Non-call exceptions generate new blocks just like calls. */ - if (flag_non_call_exceptions && can_throw_internal (insn)) - goto new_bb_inclusive; - - if (head == NULL_RTX) - head = insn; - end = insn; - break; - - default: - abort (); - } - - if (GET_CODE (insn) == INSN || GET_CODE (insn) == CALL_INSN) - { - rtx note; - - /* Make a list of all labels referred to other than by jumps. - - Make a special exception for labels followed by an ADDR*VEC, - as this would be a part of the tablejump setup code. - - Make a special exception to registers loaded with label - values just before jump insns that use them. */ - - for (note = REG_NOTES (insn); note; note = XEXP (note, 1)) - if (REG_NOTE_KIND (note) == REG_LABEL) - { - rtx lab = XEXP (note, 0), next; - - if ((next = next_nonnote_insn (lab)) != NULL - && GET_CODE (next) == JUMP_INSN - && (GET_CODE (PATTERN (next)) == ADDR_VEC - || GET_CODE (PATTERN (next)) == ADDR_DIFF_VEC)) - ; - else if (GET_CODE (lab) == NOTE) - ; - else if (GET_CODE (NEXT_INSN (insn)) == JUMP_INSN - && find_reg_note (NEXT_INSN (insn), REG_LABEL, lab)) - ; - else - lvl = alloc_EXPR_LIST (0, XEXP (note, 0), lvl); - } - } - } - - if (head != NULL_RTX) - create_basic_block (i++, head, end, bb_note); - else if (bb_note) - flow_delete_insn (bb_note); - - if (i != n_basic_blocks) - abort (); - - label_value_list = lvl; - tail_recursion_label_list = trll; - } - - /* Tidy the CFG by deleting unreachable code and whatnot. */ - - void - cleanup_cfg () - { - delete_unreachable_blocks (); - try_merge_blocks (); - mark_critical_edges (); - - /* Kill the data we won't maintain. */ - free_EXPR_LIST_list (&label_value_list); - free_EXPR_LIST_list (&tail_recursion_label_list); - } - - /* Create a new basic block consisting of the instructions between - HEAD and END inclusive. Reuses the note and basic block struct - in BB_NOTE, if any. */ - - void - create_basic_block (index, head, end, bb_note) - int index; - rtx head, end, bb_note; - { - basic_block bb; - - if (bb_note - && ! RTX_INTEGRATED_P (bb_note) - && (bb = NOTE_BASIC_BLOCK (bb_note)) != NULL - && bb->aux == NULL) - { - /* If we found an existing note, thread it back onto the chain. */ - - rtx after; - - if (GET_CODE (head) == CODE_LABEL) - after = head; - else - { - after = PREV_INSN (head); - head = bb_note; - } - - if (after != bb_note && NEXT_INSN (after) != bb_note) - reorder_insns (bb_note, bb_note, after); - } - else - { - /* Otherwise we must create a note and a basic block structure. - Since we allow basic block structs in rtl, give the struct - the same lifetime by allocating it off the function obstack - rather than using malloc. */ - - bb = (basic_block) obstack_alloc (&flow_obstack, sizeof (*bb)); - memset (bb, 0, sizeof (*bb)); - - if (GET_CODE (head) == CODE_LABEL) - bb_note = emit_note_after (NOTE_INSN_BASIC_BLOCK, head); - else - { - bb_note = emit_note_before (NOTE_INSN_BASIC_BLOCK, head); - head = bb_note; - } - NOTE_BASIC_BLOCK (bb_note) = bb; - } - - /* Always include the bb note in the block. */ - if (NEXT_INSN (end) == bb_note) - end = bb_note; - - bb->head = head; - bb->end = end; - bb->index = index; - BASIC_BLOCK (index) = bb; - - /* Tag the block so that we know it has been used when considering - other basic block notes. */ - bb->aux = bb; - } - - /* Records the basic block struct in BB_FOR_INSN, for every instruction - indexed by INSN_UID. MAX is the size of the array. */ - - void - compute_bb_for_insn (max) - int max; - { - int i; - - if (basic_block_for_insn) - VARRAY_FREE (basic_block_for_insn); - VARRAY_BB_INIT (basic_block_for_insn, max, "basic_block_for_insn"); - - for (i = 0; i < n_basic_blocks; ++i) - { - basic_block bb = BASIC_BLOCK (i); - rtx insn, end; - - end = bb->end; - insn = bb->head; - while (1) - { - int uid = INSN_UID (insn); - if (uid < max) - VARRAY_BB (basic_block_for_insn, uid) = bb; - if (insn == end) - break; - insn = NEXT_INSN (insn); - } - } - } - - /* Free the memory associated with the edge structures. */ - - static void - clear_edges () - { - int i; - edge n, e; - - for (i = 0; i < n_basic_blocks; ++i) - { - basic_block bb = BASIC_BLOCK (i); - - for (e = bb->succ; e; e = n) - { - n = e->succ_next; - free (e); - } - - bb->succ = 0; - bb->pred = 0; - } - - for (e = ENTRY_BLOCK_PTR->succ; e; e = n) - { - n = e->succ_next; - free (e); - } - - ENTRY_BLOCK_PTR->succ = 0; - EXIT_BLOCK_PTR->pred = 0; - - n_edges = 0; - } - - /* Identify the edges between basic blocks. - - NONLOCAL_LABEL_LIST is a list of non-local labels in the function. Blocks - that are otherwise unreachable may be reachable with a non-local goto. - - BB_EH_END is an array indexed by basic block number in which we record - the list of exception regions active at the end of the basic block. */ - - static void - make_edges (label_value_list) - rtx label_value_list; - { - int i; - sbitmap *edge_cache = NULL; - - /* Assume no computed jump; revise as we create edges. */ - current_function_has_computed_jump = 0; - - /* Heavy use of computed goto in machine-generated code can lead to - nearly fully-connected CFGs. In that case we spend a significant - amount of time searching the edge lists for duplicates. */ - if (forced_labels || label_value_list) - { - edge_cache = sbitmap_vector_alloc (n_basic_blocks, n_basic_blocks); - sbitmap_vector_zero (edge_cache, n_basic_blocks); - } - - /* By nature of the way these get numbered, block 0 is always the entry. */ - make_edge (edge_cache, ENTRY_BLOCK_PTR, BASIC_BLOCK (0), EDGE_FALLTHRU); - - for (i = 0; i < n_basic_blocks; ++i) - { - basic_block bb = BASIC_BLOCK (i); - rtx insn, x; - enum rtx_code code; - int force_fallthru = 0; - - /* Examine the last instruction of the block, and discover the - ways we can leave the block. */ - - insn = bb->end; - code = GET_CODE (insn); - - /* A branch. */ - if (code == JUMP_INSN) - { - rtx tmp; - - /* Recognize exception handling placeholders. */ - if (GET_CODE (PATTERN (insn)) == RESX) - make_eh_edge (edge_cache, bb, insn); - - /* Recognize a non-local goto as a branch outside the - current function. */ - else if (find_reg_note (insn, REG_NON_LOCAL_GOTO, NULL_RTX)) - ; - - /* ??? Recognize a tablejump and do the right thing. */ - else if ((tmp = JUMP_LABEL (insn)) != NULL_RTX - && (tmp = NEXT_INSN (tmp)) != NULL_RTX - && GET_CODE (tmp) == JUMP_INSN - && (GET_CODE (PATTERN (tmp)) == ADDR_VEC - || GET_CODE (PATTERN (tmp)) == ADDR_DIFF_VEC)) - { - rtvec vec; - int j; - - if (GET_CODE (PATTERN (tmp)) == ADDR_VEC) - vec = XVEC (PATTERN (tmp), 0); - else - vec = XVEC (PATTERN (tmp), 1); - - for (j = GET_NUM_ELEM (vec) - 1; j >= 0; --j) - make_label_edge (edge_cache, bb, - XEXP (RTVEC_ELT (vec, j), 0), 0); - - /* Some targets (eg, ARM) emit a conditional jump that also - contains the out-of-range target. Scan for these and - add an edge if necessary. */ - if ((tmp = single_set (insn)) != NULL - && SET_DEST (tmp) == pc_rtx - && GET_CODE (SET_SRC (tmp)) == IF_THEN_ELSE - && GET_CODE (XEXP (SET_SRC (tmp), 2)) == LABEL_REF) - make_label_edge (edge_cache, bb, - XEXP (XEXP (SET_SRC (tmp), 2), 0), 0); - - #ifdef CASE_DROPS_THROUGH - /* Silly VAXen. The ADDR_VEC is going to be in the way of - us naturally detecting fallthru into the next block. */ - force_fallthru = 1; - #endif - } - - /* If this is a computed jump, then mark it as reaching - everything on the label_value_list and forced_labels list. */ - else if (computed_jump_p (insn)) - { - current_function_has_computed_jump = 1; - - for (x = label_value_list; x; x = XEXP (x, 1)) - make_label_edge (edge_cache, bb, XEXP (x, 0), EDGE_ABNORMAL); - - for (x = forced_labels; x; x = XEXP (x, 1)) - make_label_edge (edge_cache, bb, XEXP (x, 0), EDGE_ABNORMAL); - } - - /* Returns create an exit out. */ - else if (returnjump_p (insn)) - make_edge (edge_cache, bb, EXIT_BLOCK_PTR, 0); - - /* Otherwise, we have a plain conditional or unconditional jump. */ - else - { - if (! JUMP_LABEL (insn)) - abort (); - make_label_edge (edge_cache, bb, JUMP_LABEL (insn), 0); - } - } - - /* If this is a sibling call insn, then this is in effect a - combined call and return, and so we need an edge to the - exit block. No need to worry about EH edges, since we - wouldn't have created the sibling call in the first place. */ - - if (code == CALL_INSN && SIBLING_CALL_P (insn)) - make_edge (edge_cache, bb, EXIT_BLOCK_PTR, - EDGE_ABNORMAL | EDGE_ABNORMAL_CALL); - - /* If this is a CALL_INSN, then mark it as reaching the active EH - handler for this CALL_INSN. If we're handling non-call - exceptions then any insn can reach any of the active handlers. - - Also mark the CALL_INSN as reaching any nonlocal goto handler. */ - - else if (code == CALL_INSN || flag_non_call_exceptions) - { - /* Add any appropriate EH edges. */ - make_eh_edge (edge_cache, bb, insn); - - if (code == CALL_INSN && nonlocal_goto_handler_labels) - { - /* ??? This could be made smarter: in some cases it's possible - to tell that certain calls will not do a nonlocal goto. - - For example, if the nested functions that do the nonlocal - gotos do not have their addresses taken, then only calls to - those functions or to other nested functions that use them - could possibly do nonlocal gotos. */ - /* We do know that a REG_EH_REGION note with a value less - than 0 is guaranteed not to perform a non-local goto. */ - rtx note = find_reg_note (insn, REG_EH_REGION, NULL_RTX); - if (!note || INTVAL (XEXP (note, 0)) >= 0) - for (x = nonlocal_goto_handler_labels; x; x = XEXP (x, 1)) - make_label_edge (edge_cache, bb, XEXP (x, 0), - EDGE_ABNORMAL | EDGE_ABNORMAL_CALL); - } - } - - /* Find out if we can drop through to the next block. */ - insn = next_nonnote_insn (insn); - if (!insn || (i + 1 == n_basic_blocks && force_fallthru)) - make_edge (edge_cache, bb, EXIT_BLOCK_PTR, EDGE_FALLTHRU); - else if (i + 1 < n_basic_blocks) - { - rtx tmp = BLOCK_HEAD (i + 1); - if (GET_CODE (tmp) == NOTE) - tmp = next_nonnote_insn (tmp); - if (force_fallthru || insn == tmp) - make_edge (edge_cache, bb, BASIC_BLOCK (i + 1), EDGE_FALLTHRU); - } - } - - if (edge_cache) - sbitmap_vector_free (edge_cache); - } - - /* Create an edge between two basic blocks. FLAGS are auxiliary information - about the edge that is accumulated between calls. */ - - void - make_edge (edge_cache, src, dst, flags) - sbitmap *edge_cache; - basic_block src, dst; - int flags; - { - int use_edge_cache; - edge e; - - /* Don't bother with edge cache for ENTRY or EXIT; there aren't that - many edges to them, and we didn't allocate memory for it. */ - use_edge_cache = (edge_cache - && src != ENTRY_BLOCK_PTR - && dst != EXIT_BLOCK_PTR); - - /* Make sure we don't add duplicate edges. */ - switch (use_edge_cache) - { - default: - /* Quick test for non-existance of the edge. */ - if (! TEST_BIT (edge_cache[src->index], dst->index)) - break; - - /* The edge exists; early exit if no work to do. */ - if (flags == 0) - return; - - /* FALLTHRU */ - case 0: - for (e = src->succ; e; e = e->succ_next) - if (e->dest == dst) - { - e->flags |= flags; - return; - } - break; - } - - e = (edge) xcalloc (1, sizeof (*e)); - n_edges++; - - e->succ_next = src->succ; - e->pred_next = dst->pred; - e->src = src; - e->dest = dst; - e->flags = flags; - - src->succ = e; - dst->pred = e; - - if (use_edge_cache) - SET_BIT (edge_cache[src->index], dst->index); - } - - /* Create an edge from a basic block to a label. */ - - static void - make_label_edge (edge_cache, src, label, flags) - sbitmap *edge_cache; - basic_block src; - rtx label; - int flags; - { - if (GET_CODE (label) != CODE_LABEL) - abort (); - - /* If the label was never emitted, this insn is junk, but avoid a - crash trying to refer to BLOCK_FOR_INSN (label). This can happen - as a result of a syntax error and a diagnostic has already been - printed. */ - - if (INSN_UID (label) == 0) - return; - - make_edge (edge_cache, src, BLOCK_FOR_INSN (label), flags); - } - - /* Create the edges generated by INSN in REGION. */ - - static void - make_eh_edge (edge_cache, src, insn) - sbitmap *edge_cache; - basic_block src; - rtx insn; - { - int is_call = (GET_CODE (insn) == CALL_INSN ? EDGE_ABNORMAL_CALL : 0); - rtx handlers, i; - - handlers = reachable_handlers (insn); - - for (i = handlers; i; i = XEXP (i, 1)) - make_label_edge (edge_cache, src, XEXP (i, 0), - EDGE_ABNORMAL | EDGE_EH | is_call); - - free_INSN_LIST_list (&handlers); - } - - /* Identify critical edges and set the bits appropriately. */ - - static void - mark_critical_edges () - { - int i, n = n_basic_blocks; - basic_block bb; - - /* We begin with the entry block. This is not terribly important now, - but could be if a front end (Fortran) implemented alternate entry - points. */ - bb = ENTRY_BLOCK_PTR; - i = -1; - - while (1) - { - edge e; - - /* (1) Critical edges must have a source with multiple successors. */ - if (bb->succ && bb->succ->succ_next) - { - for (e = bb->succ; e; e = e->succ_next) - { - /* (2) Critical edges must have a destination with multiple - predecessors. Note that we know there is at least one - predecessor -- the edge we followed to get here. */ - if (e->dest->pred->pred_next) - e->flags |= EDGE_CRITICAL; - else - e->flags &= ~EDGE_CRITICAL; - } - } - else - { - for (e = bb->succ; e; e = e->succ_next) - e->flags &= ~EDGE_CRITICAL; - } - - if (++i >= n) - break; - bb = BASIC_BLOCK (i); - } - } ! /* Split a block BB after insn INSN creating a new fallthru edge. ! Return the new edge. Note that to keep other parts of the compiler happy, ! this function renumbers all the basic blocks so that the new ! one has a number one greater than the block split. */ ! ! edge ! split_block (bb, insn) ! basic_block bb; ! rtx insn; ! { ! basic_block new_bb; ! edge new_edge; ! edge e; ! rtx bb_note; ! int i, j; ! ! /* There is no point splitting the block after its end. */ ! if (bb->end == insn) ! return 0; ! ! /* Create the new structures. */ ! new_bb = (basic_block) obstack_alloc (&flow_obstack, sizeof (*new_bb)); ! new_edge = (edge) xcalloc (1, sizeof (*new_edge)); ! n_edges++; ! ! memset (new_bb, 0, sizeof (*new_bb)); ! ! new_bb->head = NEXT_INSN (insn); ! new_bb->end = bb->end; ! bb->end = insn; ! ! new_bb->succ = bb->succ; ! bb->succ = new_edge; ! new_bb->pred = new_edge; ! new_bb->count = bb->count; ! new_bb->loop_depth = bb->loop_depth; ! ! new_edge->src = bb; ! new_edge->dest = new_bb; ! new_edge->flags = EDGE_FALLTHRU; ! new_edge->probability = REG_BR_PROB_BASE; ! new_edge->count = bb->count; ! ! /* Redirect the src of the successor edges of bb to point to new_bb. */ ! for (e = new_bb->succ; e; e = e->succ_next) ! e->src = new_bb; ! ! /* Place the new block just after the block being split. */ ! VARRAY_GROW (basic_block_info, ++n_basic_blocks); ! ! /* Some parts of the compiler expect blocks to be number in ! sequential order so insert the new block immediately after the ! block being split.. */ ! j = bb->index; ! for (i = n_basic_blocks - 1; i > j + 1; --i) ! { ! basic_block tmp = BASIC_BLOCK (i - 1); ! BASIC_BLOCK (i) = tmp; ! tmp->index = i; ! } ! ! BASIC_BLOCK (i) = new_bb; ! new_bb->index = i; ! ! /* Create the basic block note. */ ! bb_note = emit_note_before (NOTE_INSN_BASIC_BLOCK, ! new_bb->head); ! NOTE_BASIC_BLOCK (bb_note) = new_bb; ! new_bb->head = bb_note; ! ! update_bb_for_insn (new_bb); ! ! if (bb->global_live_at_start) ! { ! new_bb->global_live_at_start = OBSTACK_ALLOC_REG_SET (&flow_obstack); ! new_bb->global_live_at_end = OBSTACK_ALLOC_REG_SET (&flow_obstack); ! COPY_REG_SET (new_bb->global_live_at_end, bb->global_live_at_end); ! ! /* We now have to calculate which registers are live at the end ! of the split basic block and at the start of the new basic ! block. Start with those registers that are known to be live ! at the end of the original basic block and get ! propagate_block to determine which registers are live. */ ! COPY_REG_SET (new_bb->global_live_at_start, bb->global_live_at_end); ! propagate_block (new_bb, new_bb->global_live_at_start, NULL, NULL, 0); ! COPY_REG_SET (bb->global_live_at_end, ! new_bb->global_live_at_start); ! } ! ! return new_edge; ! } ! ! ! /* Split a (typically critical) edge. Return the new block. ! Abort on abnormal edges. ! ! ??? The code generally expects to be called on critical edges. ! The case of a block ending in an unconditional jump to a ! block with multiple predecessors is not handled optimally. */ ! ! basic_block ! split_edge (edge_in) ! edge edge_in; ! { ! basic_block old_pred, bb, old_succ; ! edge edge_out; ! rtx bb_note; ! int i, j; ! ! /* Abnormal edges cannot be split. */ ! if ((edge_in->flags & EDGE_ABNORMAL) != 0) ! abort (); ! ! old_pred = edge_in->src; ! old_succ = edge_in->dest; ! ! /* Remove the existing edge from the destination's pred list. */ ! { ! edge *pp; ! for (pp = &old_succ->pred; *pp != edge_in; pp = &(*pp)->pred_next) ! continue; ! *pp = edge_in->pred_next; ! edge_in->pred_next = NULL; ! } ! ! /* Create the new structures. */ ! bb = (basic_block) obstack_alloc (&flow_obstack, sizeof (*bb)); ! edge_out = (edge) xcalloc (1, sizeof (*edge_out)); ! n_edges++; ! ! memset (bb, 0, sizeof (*bb)); ! ! /* ??? This info is likely going to be out of date very soon. */ ! if (old_succ->global_live_at_start) ! { ! bb->global_live_at_start = OBSTACK_ALLOC_REG_SET (&flow_obstack); ! bb->global_live_at_end = OBSTACK_ALLOC_REG_SET (&flow_obstack); ! COPY_REG_SET (bb->global_live_at_start, old_succ->global_live_at_start); ! COPY_REG_SET (bb->global_live_at_end, old_succ->global_live_at_start); ! } ! ! /* Wire them up. */ ! bb->pred = edge_in; ! bb->succ = edge_out; ! bb->count = edge_in->count; ! ! edge_in->dest = bb; ! edge_in->flags &= ~EDGE_CRITICAL; ! ! edge_out->pred_next = old_succ->pred; ! edge_out->succ_next = NULL; ! edge_out->src = bb; ! edge_out->dest = old_succ; ! edge_out->flags = EDGE_FALLTHRU; ! edge_out->probability = REG_BR_PROB_BASE; ! edge_out->count = edge_in->count; ! ! old_succ->pred = edge_out; ! ! /* Tricky case -- if there existed a fallthru into the successor ! (and we're not it) we must add a new unconditional jump around ! the new block we're actually interested in. ! ! Further, if that edge is critical, this means a second new basic ! block must be created to hold it. In order to simplify correct ! insn placement, do this before we touch the existing basic block ! ordering for the block we were really wanting. */ ! if ((edge_in->flags & EDGE_FALLTHRU) == 0) ! { ! edge e; ! for (e = edge_out->pred_next; e; e = e->pred_next) ! if (e->flags & EDGE_FALLTHRU) ! break; ! ! if (e) ! { ! basic_block jump_block; ! rtx pos; ! ! if ((e->flags & EDGE_CRITICAL) == 0 ! && e->src != ENTRY_BLOCK_PTR) ! { ! /* Non critical -- we can simply add a jump to the end ! of the existing predecessor. */ ! jump_block = e->src; ! } ! else ! { ! /* We need a new block to hold the jump. The simplest ! way to do the bulk of the work here is to recursively ! call ourselves. */ ! jump_block = split_edge (e); ! e = jump_block->succ; ! } ! ! /* Now add the jump insn ... */ ! pos = emit_jump_insn_after (gen_jump (old_succ->head), ! jump_block->end); ! jump_block->end = pos; ! if (basic_block_for_insn) ! set_block_for_insn (pos, jump_block); ! emit_barrier_after (pos); ! ! /* ... let jump know that label is in use, ... */ ! JUMP_LABEL (pos) = old_succ->head; ! ++LABEL_NUSES (old_succ->head); ! ! /* ... and clear fallthru on the outgoing edge. */ ! e->flags &= ~EDGE_FALLTHRU; ! ! /* Continue splitting the interesting edge. */ ! } ! } ! ! /* Place the new block just in front of the successor. */ ! VARRAY_GROW (basic_block_info, ++n_basic_blocks); ! if (old_succ == EXIT_BLOCK_PTR) ! j = n_basic_blocks - 1; ! else ! j = old_succ->index; ! for (i = n_basic_blocks - 1; i > j; --i) ! { ! basic_block tmp = BASIC_BLOCK (i - 1); ! BASIC_BLOCK (i) = tmp; ! tmp->index = i; ! } ! BASIC_BLOCK (i) = bb; ! bb->index = i; ! ! /* Create the basic block note. ! ! Where we place the note can have a noticable impact on the generated ! code. Consider this cfg: ! ! E ! | ! 0 ! / \ ! +->1-->2--->E ! | | ! +--+ ! ! If we need to insert an insn on the edge from block 0 to block 1, ! we want to ensure the instructions we insert are outside of any ! loop notes that physically sit between block 0 and block 1. Otherwise ! we confuse the loop optimizer into thinking the loop is a phony. */ ! if (old_succ != EXIT_BLOCK_PTR ! && PREV_INSN (old_succ->head) ! && GET_CODE (PREV_INSN (old_succ->head)) == NOTE ! && NOTE_LINE_NUMBER (PREV_INSN (old_succ->head)) == NOTE_INSN_LOOP_BEG) ! bb_note = emit_note_before (NOTE_INSN_BASIC_BLOCK, ! PREV_INSN (old_succ->head)); ! else if (old_succ != EXIT_BLOCK_PTR) ! bb_note = emit_note_before (NOTE_INSN_BASIC_BLOCK, old_succ->head); ! else ! bb_note = emit_note_after (NOTE_INSN_BASIC_BLOCK, get_last_insn ()); ! NOTE_BASIC_BLOCK (bb_note) = bb; ! bb->head = bb->end = bb_note; ! ! /* Not quite simple -- for non-fallthru edges, we must adjust the ! predecessor's jump instruction to target our new block. */ ! if ((edge_in->flags & EDGE_FALLTHRU) == 0) ! { ! rtx tmp, insn = old_pred->end; ! rtx old_label = old_succ->head; ! rtx new_label = gen_label_rtx (); ! ! if (GET_CODE (insn) != JUMP_INSN) ! abort (); ! ! /* ??? Recognize a tablejump and adjust all matching cases. */ ! if ((tmp = JUMP_LABEL (insn)) != NULL_RTX ! && (tmp = NEXT_INSN (tmp)) != NULL_RTX ! && GET_CODE (tmp) == JUMP_INSN ! && (GET_CODE (PATTERN (tmp)) == ADDR_VEC ! || GET_CODE (PATTERN (tmp)) == ADDR_DIFF_VEC)) ! { ! rtvec vec; ! int j; ! ! if (GET_CODE (PATTERN (tmp)) == ADDR_VEC) ! vec = XVEC (PATTERN (tmp), 0); ! else ! vec = XVEC (PATTERN (tmp), 1); ! ! for (j = GET_NUM_ELEM (vec) - 1; j >= 0; --j) ! if (XEXP (RTVEC_ELT (vec, j), 0) == old_label) ! { ! RTVEC_ELT (vec, j) = gen_rtx_LABEL_REF (VOIDmode, new_label); ! --LABEL_NUSES (old_label); ! ++LABEL_NUSES (new_label); ! } ! ! /* Handle casesi dispatch insns */ ! if ((tmp = single_set (insn)) != NULL ! && SET_DEST (tmp) == pc_rtx ! && GET_CODE (SET_SRC (tmp)) == IF_THEN_ELSE ! && GET_CODE (XEXP (SET_SRC (tmp), 2)) == LABEL_REF ! && XEXP (XEXP (SET_SRC (tmp), 2), 0) == old_label) ! { ! XEXP (SET_SRC (tmp), 2) = gen_rtx_LABEL_REF (VOIDmode, ! new_label); ! --LABEL_NUSES (old_label); ! ++LABEL_NUSES (new_label); ! } ! } ! else ! { ! /* This would have indicated an abnormal edge. */ ! if (computed_jump_p (insn)) ! abort (); ! ! /* A return instruction can't be redirected. */ ! if (returnjump_p (insn)) ! abort (); ! ! /* If the insn doesn't go where we think, we're confused. */ ! if (JUMP_LABEL (insn) != old_label) ! abort (); ! ! redirect_jump (insn, new_label, 0); ! } ! ! emit_label_before (new_label, bb_note); ! bb->head = new_label; ! } ! ! return bb; ! } ! ! /* Queue instructions for insertion on an edge between two basic blocks. ! The new instructions and basic blocks (if any) will not appear in the ! CFG until commit_edge_insertions is called. */ ! ! void ! insert_insn_on_edge (pattern, e) ! rtx pattern; ! edge e; ! { ! /* We cannot insert instructions on an abnormal critical edge. ! It will be easier to find the culprit if we die now. */ ! if ((e->flags & (EDGE_ABNORMAL|EDGE_CRITICAL)) ! == (EDGE_ABNORMAL|EDGE_CRITICAL)) ! abort (); ! ! if (e->insns == NULL_RTX) ! start_sequence (); ! else ! push_to_sequence (e->insns); ! ! emit_insn (pattern); ! ! e->insns = get_insns (); ! end_sequence (); ! } ! ! /* Update the CFG for the instructions queued on edge E. */ ! ! static void ! commit_one_edge_insertion (e) ! edge e; ! { ! rtx before = NULL_RTX, after = NULL_RTX, insns, tmp, last; ! basic_block bb; ! ! /* Pull the insns off the edge now since the edge might go away. */ ! insns = e->insns; ! e->insns = NULL_RTX; ! ! /* Figure out where to put these things. If the destination has ! one predecessor, insert there. Except for the exit block. */ ! if (e->dest->pred->pred_next == NULL ! && e->dest != EXIT_BLOCK_PTR) ! { ! bb = e->dest; ! ! /* Get the location correct wrt a code label, and "nice" wrt ! a basic block note, and before everything else. */ ! tmp = bb->head; ! if (GET_CODE (tmp) == CODE_LABEL) ! tmp = NEXT_INSN (tmp); ! if (NOTE_INSN_BASIC_BLOCK_P (tmp)) ! tmp = NEXT_INSN (tmp); ! if (tmp == bb->head) ! before = tmp; ! else ! after = PREV_INSN (tmp); ! } ! ! /* If the source has one successor and the edge is not abnormal, ! insert there. Except for the entry block. */ ! else if ((e->flags & EDGE_ABNORMAL) == 0 ! && e->src->succ->succ_next == NULL ! && e->src != ENTRY_BLOCK_PTR) ! { ! bb = e->src; ! /* It is possible to have a non-simple jump here. Consider a target ! where some forms of unconditional jumps clobber a register. This ! happens on the fr30 for example. ! ! We know this block has a single successor, so we can just emit ! the queued insns before the jump. */ ! if (GET_CODE (bb->end) == JUMP_INSN) ! { ! before = bb->end; ! } ! else ! { ! /* We'd better be fallthru, or we've lost track of what's what. */ ! if ((e->flags & EDGE_FALLTHRU) == 0) ! abort (); ! ! after = bb->end; ! } ! } ! ! /* Otherwise we must split the edge. */ ! else ! { ! bb = split_edge (e); ! after = bb->end; ! } ! ! /* Now that we've found the spot, do the insertion. */ ! ! /* Set the new block number for these insns, if structure is allocated. */ ! if (basic_block_for_insn) ! { ! rtx i; ! for (i = insns; i != NULL_RTX; i = NEXT_INSN (i)) ! set_block_for_insn (i, bb); ! } ! ! if (before) ! { ! emit_insns_before (insns, before); ! if (before == bb->head) ! bb->head = insns; ! ! last = prev_nonnote_insn (before); ! } ! else ! { ! last = emit_insns_after (insns, after); ! if (after == bb->end) ! bb->end = last; ! } ! ! if (returnjump_p (last)) ! { ! /* ??? Remove all outgoing edges from BB and add one for EXIT. ! This is not currently a problem because this only happens ! for the (single) epilogue, which already has a fallthru edge ! to EXIT. */ ! ! e = bb->succ; ! if (e->dest != EXIT_BLOCK_PTR ! || e->succ_next != NULL ! || (e->flags & EDGE_FALLTHRU) == 0) ! abort (); ! e->flags &= ~EDGE_FALLTHRU; ! ! emit_barrier_after (last); ! bb->end = last; ! ! if (before) ! flow_delete_insn (before); ! } ! else if (GET_CODE (last) == JUMP_INSN) ! abort (); ! } ! ! /* Update the CFG for all queued instructions. */ ! ! void ! commit_edge_insertions () ! { ! int i; ! basic_block bb; ! ! #ifdef ENABLE_CHECKING ! verify_flow_info (); ! #endif ! ! i = -1; ! bb = ENTRY_BLOCK_PTR; ! while (1) ! { ! edge e, next; ! ! for (e = bb->succ; e; e = next) ! { ! next = e->succ_next; ! if (e->insns) ! commit_one_edge_insertion (e); ! } ! ! if (++i >= n_basic_blocks) ! break; ! bb = BASIC_BLOCK (i); ! } ! } ! ! /* Add fake edges to the function exit for any non constant calls in ! the bitmap of blocks specified by BLOCKS or to the whole CFG if ! BLOCKS is zero. Return the nuber of blocks that were split. */ ! ! int ! flow_call_edges_add (blocks) ! sbitmap blocks; ! { ! int i; ! int blocks_split = 0; ! int bb_num = 0; ! basic_block *bbs; ! ! /* Map bb indicies into basic block pointers since split_block ! will renumber the basic blocks. */ ! ! bbs = xmalloc (n_basic_blocks * sizeof (*bbs)); ! ! if (! blocks) ! { ! for (i = 0; i < n_basic_blocks; i++) ! bbs[bb_num++] = BASIC_BLOCK (i); ! } ! else ! { ! EXECUTE_IF_SET_IN_SBITMAP (blocks, 0, i, ! { ! bbs[bb_num++] = BASIC_BLOCK (i); ! }); ! } ! ! ! /* Now add fake edges to the function exit for any non constant ! calls since there is no way that we can determine if they will ! return or not... */ ! ! for (i = 0; i < bb_num; i++) ! { ! basic_block bb = bbs[i]; ! rtx insn; ! rtx prev_insn; ! ! for (insn = bb->end; ; insn = prev_insn) ! { ! prev_insn = PREV_INSN (insn); ! if (GET_CODE (insn) == CALL_INSN && ! CONST_CALL_P (insn)) ! { ! edge e; ! ! /* Note that the following may create a new basic block ! and renumber the existing basic blocks. */ ! e = split_block (bb, insn); ! if (e) ! blocks_split++; ! ! make_edge (NULL, bb, EXIT_BLOCK_PTR, EDGE_FAKE); ! } ! if (insn == bb->head) ! break; ! } ! } ! ! if (blocks_split) ! verify_flow_info (); ! ! free (bbs); ! return blocks_split; ! } ! ! /* Delete all unreachable basic blocks. */ ! ! static void ! delete_unreachable_blocks () ! { ! basic_block *worklist, *tos; ! edge e; ! int i, n; ! ! n = n_basic_blocks; ! tos = worklist = (basic_block *) xmalloc (sizeof (basic_block) * n); ! ! /* Use basic_block->aux as a marker. Clear them all. */ ! ! for (i = 0; i < n; ++i) ! BASIC_BLOCK (i)->aux = NULL; ! ! /* Add our starting points to the worklist. Almost always there will ! be only one. It isn't inconcievable that we might one day directly ! support Fortran alternate entry points. */ ! ! for (e = ENTRY_BLOCK_PTR->succ; e; e = e->succ_next) ! { ! *tos++ = e->dest; ! ! /* Mark the block with a handy non-null value. */ ! e->dest->aux = e; ! } ! ! /* Iterate: find everything reachable from what we've already seen. */ ! ! while (tos != worklist) ! { ! basic_block b = *--tos; ! ! for (e = b->succ; e; e = e->succ_next) ! if (!e->dest->aux) ! { ! *tos++ = e->dest; ! e->dest->aux = e; ! } ! } ! ! /* Delete all unreachable basic blocks. Count down so that we ! don't interfere with the block renumbering that happens in ! flow_delete_block. */ ! ! for (i = n - 1; i >= 0; --i) ! { ! basic_block b = BASIC_BLOCK (i); ! ! if (b->aux != NULL) ! /* This block was found. Tidy up the mark. */ ! b->aux = NULL; ! else ! flow_delete_block (b); ! } ! ! tidy_fallthru_edges (); ! ! free (worklist); ! } ! ! /* Return true if NOTE is not one of the ones that must be kept paired, ! so that we may simply delete them. */ ! ! static int ! can_delete_note_p (note) ! rtx note; ! { ! return (NOTE_LINE_NUMBER (note) == NOTE_INSN_DELETED ! || NOTE_LINE_NUMBER (note) == NOTE_INSN_BASIC_BLOCK); ! } ! ! /* Unlink a chain of insns between START and FINISH, leaving notes ! that must be paired. */ ! ! void ! flow_delete_insn_chain (start, finish) ! rtx start, finish; ! { ! /* Unchain the insns one by one. It would be quicker to delete all ! of these with a single unchaining, rather than one at a time, but ! we need to keep the NOTE's. */ ! ! rtx next; ! ! while (1) ! { ! next = NEXT_INSN (start); ! if (GET_CODE (start) == NOTE && !can_delete_note_p (start)) ! ; ! else if (GET_CODE (start) == CODE_LABEL ! && ! can_delete_label_p (start)) ! { ! const char *name = LABEL_NAME (start); ! PUT_CODE (start, NOTE); ! NOTE_LINE_NUMBER (start) = NOTE_INSN_DELETED_LABEL; ! NOTE_SOURCE_FILE (start) = name; ! } ! else ! next = flow_delete_insn (start); ! ! if (start == finish) ! break; ! start = next; ! } ! } ! ! /* Delete the insns in a (non-live) block. We physically delete every ! non-deleted-note insn, and update the flow graph appropriately. ! ! Return nonzero if we deleted an exception handler. */ ! ! /* ??? Preserving all such notes strikes me as wrong. It would be nice ! to post-process the stream to remove empty blocks, loops, ranges, etc. */ ! ! int ! flow_delete_block (b) ! basic_block b; ! { ! int deleted_handler = 0; ! rtx insn, end, tmp; ! ! /* If the head of this block is a CODE_LABEL, then it might be the ! label for an exception handler which can't be reached. ! ! We need to remove the label from the exception_handler_label list ! and remove the associated NOTE_INSN_EH_REGION_BEG and ! NOTE_INSN_EH_REGION_END notes. */ ! ! insn = b->head; ! ! never_reached_warning (insn); ! ! if (GET_CODE (insn) == CODE_LABEL) ! maybe_remove_eh_handler (insn); ! ! /* Include any jump table following the basic block. */ ! end = b->end; ! if (GET_CODE (end) == JUMP_INSN ! && (tmp = JUMP_LABEL (end)) != NULL_RTX ! && (tmp = NEXT_INSN (tmp)) != NULL_RTX ! && GET_CODE (tmp) == JUMP_INSN ! && (GET_CODE (PATTERN (tmp)) == ADDR_VEC ! || GET_CODE (PATTERN (tmp)) == ADDR_DIFF_VEC)) ! end = tmp; ! ! /* Include any barrier that may follow the basic block. */ ! tmp = next_nonnote_insn (end); ! if (tmp && GET_CODE (tmp) == BARRIER) ! end = tmp; ! ! /* Selectively delete the entire chain. */ ! flow_delete_insn_chain (insn, end); ! ! /* Remove the edges into and out of this block. Note that there may ! indeed be edges in, if we are removing an unreachable loop. */ ! { ! edge e, next, *q; ! ! for (e = b->pred; e; e = next) ! { ! for (q = &e->src->succ; *q != e; q = &(*q)->succ_next) ! continue; ! *q = e->succ_next; ! next = e->pred_next; ! n_edges--; ! free (e); ! } ! for (e = b->succ; e; e = next) ! { ! for (q = &e->dest->pred; *q != e; q = &(*q)->pred_next) ! continue; ! *q = e->pred_next; ! next = e->succ_next; ! n_edges--; ! free (e); ! } ! ! b->pred = NULL; ! b->succ = NULL; ! } ! ! /* Remove the basic block from the array, and compact behind it. */ ! expunge_block (b); ! ! return deleted_handler; ! } ! ! /* Remove block B from the basic block array and compact behind it. */ ! ! static void ! expunge_block (b) ! basic_block b; ! { ! int i, n = n_basic_blocks; ! ! for (i = b->index; i + 1 < n; ++i) ! { ! basic_block x = BASIC_BLOCK (i + 1); ! BASIC_BLOCK (i) = x; ! x->index = i; ! } ! ! basic_block_info->num_elements--; ! n_basic_blocks--; ! } ! ! /* Delete INSN by patching it out. Return the next insn. */ rtx ! flow_delete_insn (insn) ! rtx insn; { ! rtx prev = PREV_INSN (insn); ! rtx next = NEXT_INSN (insn); ! rtx note; ! ! PREV_INSN (insn) = NULL_RTX; ! NEXT_INSN (insn) = NULL_RTX; ! INSN_DELETED_P (insn) = 1; ! if (prev) ! NEXT_INSN (prev) = next; ! if (next) ! PREV_INSN (next) = prev; ! else ! set_last_insn (prev); if (GET_CODE (insn) == CODE_LABEL) ! remove_node_from_expr_list (insn, &nonlocal_goto_handler_labels); ! ! /* If deleting a jump, decrement the use count of the label. Deleting ! the label itself should happen in the normal course of block merging. */ ! if (GET_CODE (insn) == JUMP_INSN ! && JUMP_LABEL (insn) ! && GET_CODE (JUMP_LABEL (insn)) == CODE_LABEL) ! LABEL_NUSES (JUMP_LABEL (insn))--; ! ! /* Also if deleting an insn that references a label. */ ! else if ((note = find_reg_note (insn, REG_LABEL, NULL_RTX)) != NULL_RTX ! && GET_CODE (XEXP (note, 0)) == CODE_LABEL) ! LABEL_NUSES (XEXP (note, 0))--; ! ! return next; ! } ! ! /* True if a given label can be deleted. */ ! ! static int ! can_delete_label_p (label) ! rtx label; ! { ! rtx x; ! ! if (LABEL_PRESERVE_P (label)) ! return 0; ! ! for (x = forced_labels; x; x = XEXP (x, 1)) ! if (label == XEXP (x, 0)) ! return 0; ! for (x = label_value_list; x; x = XEXP (x, 1)) ! if (label == XEXP (x, 0)) ! return 0; ! for (x = exception_handler_labels; x; x = XEXP (x, 1)) ! if (label == XEXP (x, 0)) ! return 0; ! ! /* User declared labels must be preserved. */ ! if (LABEL_NAME (label) != 0) ! return 0; ! ! return 1; ! } ! ! static int ! tail_recursion_label_p (label) ! rtx label; ! { ! rtx x; ! ! for (x = tail_recursion_label_list; x; x = XEXP (x, 1)) ! if (label == XEXP (x, 0)) ! return 1; ! ! return 0; ! } ! ! /* Blocks A and B are to be merged into a single block A. The insns ! are already contiguous, hence `nomove'. */ ! ! void ! merge_blocks_nomove (a, b) ! basic_block a, b; ! { ! edge e; ! rtx b_head, b_end, a_end; ! rtx del_first = NULL_RTX, del_last = NULL_RTX; ! int b_empty = 0; ! ! /* If there was a CODE_LABEL beginning B, delete it. */ ! b_head = b->head; ! b_end = b->end; ! if (GET_CODE (b_head) == CODE_LABEL) ! { ! /* Detect basic blocks with nothing but a label. This can happen ! in particular at the end of a function. */ ! if (b_head == b_end) ! b_empty = 1; ! del_first = del_last = b_head; ! b_head = NEXT_INSN (b_head); ! } ! ! /* Delete the basic block note. */ ! if (NOTE_INSN_BASIC_BLOCK_P (b_head)) ! { ! if (b_head == b_end) ! b_empty = 1; ! if (! del_last) ! del_first = b_head; ! del_last = b_head; ! b_head = NEXT_INSN (b_head); ! } ! ! /* If there was a jump out of A, delete it. */ ! a_end = a->end; ! if (GET_CODE (a_end) == JUMP_INSN) ! { ! rtx prev; ! ! for (prev = PREV_INSN (a_end); ; prev = PREV_INSN (prev)) ! if (GET_CODE (prev) != NOTE ! || NOTE_LINE_NUMBER (prev) == NOTE_INSN_BASIC_BLOCK ! || prev == a->head) ! break; ! ! del_first = a_end; ! ! #ifdef HAVE_cc0 ! /* If this was a conditional jump, we need to also delete ! the insn that set cc0. */ ! if (prev && sets_cc0_p (prev)) ! { ! rtx tmp = prev; ! prev = prev_nonnote_insn (prev); ! if (!prev) ! prev = a->head; ! del_first = tmp; ! } ! #endif ! ! a_end = prev; ! } ! else if (GET_CODE (NEXT_INSN (a_end)) == BARRIER) ! del_first = NEXT_INSN (a_end); ! ! /* Delete everything marked above as well as crap that might be ! hanging out between the two blocks. */ ! flow_delete_insn_chain (del_first, del_last); ! ! /* Normally there should only be one successor of A and that is B, but ! partway though the merge of blocks for conditional_execution we'll ! be merging a TEST block with THEN and ELSE successors. Free the ! whole lot of them and hope the caller knows what they're doing. */ ! while (a->succ) ! remove_edge (a->succ); ! ! /* Adjust the edges out of B for the new owner. */ ! for (e = b->succ; e; e = e->succ_next) ! e->src = a; ! a->succ = b->succ; ! ! /* B hasn't quite yet ceased to exist. Attempt to prevent mishap. */ ! b->pred = b->succ = NULL; ! ! /* Reassociate the insns of B with A. */ ! if (!b_empty) ! { ! if (basic_block_for_insn) ! { ! BLOCK_FOR_INSN (b_head) = a; ! while (b_head != b_end) ! { ! b_head = NEXT_INSN (b_head); ! BLOCK_FOR_INSN (b_head) = a; ! } ! } ! a_end = b_end; ! } ! a->end = a_end; ! ! expunge_block (b); ! } ! ! /* Blocks A and B are to be merged into a single block. A has no incoming ! fallthru edge, so it can be moved before B without adding or modifying ! any jumps (aside from the jump from A to B). */ ! ! static int ! merge_blocks_move_predecessor_nojumps (a, b) ! basic_block a, b; ! { ! rtx start, end, barrier; ! int index; ! ! start = a->head; ! end = a->end; ! ! barrier = next_nonnote_insn (end); ! if (GET_CODE (barrier) != BARRIER) ! abort (); ! flow_delete_insn (barrier); ! ! /* Move block and loop notes out of the chain so that we do not ! disturb their order. ! ! ??? A better solution would be to squeeze out all the non-nested notes ! and adjust the block trees appropriately. Even better would be to have ! a tighter connection between block trees and rtl so that this is not ! necessary. */ ! start = squeeze_notes (start, end); ! ! /* Scramble the insn chain. */ ! if (end != PREV_INSN (b->head)) ! reorder_insns (start, end, PREV_INSN (b->head)); ! ! if (rtl_dump_file) ! { ! fprintf (rtl_dump_file, "Moved block %d before %d and merged.\n", ! a->index, b->index); ! } ! ! /* Swap the records for the two blocks around. Although we are deleting B, ! A is now where B was and we want to compact the BB array from where ! A used to be. */ ! BASIC_BLOCK (a->index) = b; ! BASIC_BLOCK (b->index) = a; ! index = a->index; ! a->index = b->index; ! b->index = index; ! ! /* Now blocks A and B are contiguous. Merge them. */ ! merge_blocks_nomove (a, b); ! ! return 1; ! } ! ! /* Blocks A and B are to be merged into a single block. B has no outgoing ! fallthru edge, so it can be moved after A without adding or modifying ! any jumps (aside from the jump from A to B). */ ! ! static int ! merge_blocks_move_successor_nojumps (a, b) ! basic_block a, b; ! { ! rtx start, end, barrier; ! ! start = b->head; ! end = b->end; ! barrier = NEXT_INSN (end); ! ! /* Recognize a jump table following block B. */ ! if (GET_CODE (barrier) == CODE_LABEL ! && NEXT_INSN (barrier) ! && GET_CODE (NEXT_INSN (barrier)) == JUMP_INSN ! && (GET_CODE (PATTERN (NEXT_INSN (barrier))) == ADDR_VEC ! || GET_CODE (PATTERN (NEXT_INSN (barrier))) == ADDR_DIFF_VEC)) ! { ! end = NEXT_INSN (barrier); ! barrier = NEXT_INSN (end); ! } ! ! /* There had better have been a barrier there. Delete it. */ ! if (GET_CODE (barrier) != BARRIER) abort (); - flow_delete_insn (barrier); - - /* Move block and loop notes out of the chain so that we do not - disturb their order. - - ??? A better solution would be to squeeze out all the non-nested notes - and adjust the block trees appropriately. Even better would be to have - a tighter connection between block trees and rtl so that this is not - necessary. */ - start = squeeze_notes (start, end); - - /* Scramble the insn chain. */ - reorder_insns (start, end, a->end); - - /* Now blocks A and B are contiguous. Merge them. */ - merge_blocks_nomove (a, b); - - if (rtl_dump_file) - { - fprintf (rtl_dump_file, "Moved block %d after %d and merged.\n", - b->index, a->index); - } - - return 1; - } - - /* Attempt to merge basic blocks that are potentially non-adjacent. - Return true iff the attempt succeeded. */ - - static int - merge_blocks (e, b, c) - edge e; - basic_block b, c; - { - if (GET_CODE (c->head) == CODE_LABEL) - { - rtx x; - - /* If C has a tail recursion label, do not merge. There is no - edge recorded from the call_placeholder back to this label, as - that would make optimize_sibling_and_tail_recursive_calls more - complex for no gain. */ - if (tail_recursion_label_p (c->head)) - return 0; - - /* If C has a nonlocal goto label, do not merge either. */ - for (x = nonlocal_goto_handler_labels; x; x = XEXP (x, 1)) - if (XEXP (x, 0) == c->head) - return 0; - } - - /* If B has a fallthru edge to C, no need to move anything. */ - if (e->flags & EDGE_FALLTHRU) - { - merge_blocks_nomove (b, c); - - if (rtl_dump_file) - { - fprintf (rtl_dump_file, "Merged %d and %d without moving.\n", - b->index, c->index); - } - - return 1; - } - else - { - edge tmp_edge; - int c_has_outgoing_fallthru; - int b_has_incoming_fallthru; - - /* We must make sure to not munge nesting of exception regions, - lexical blocks, and loop notes. - - The first is taken care of by requiring that the active eh - region at the end of one block always matches the active eh - region at the beginning of the next block. - - The later two are taken care of by squeezing out all the notes. */ - - /* ??? A throw/catch edge (or any abnormal edge) should be rarely - executed and we may want to treat blocks which have two out - edges, one normal, one abnormal as only having one edge for - block merging purposes. */ - - for (tmp_edge = c->succ; tmp_edge; tmp_edge = tmp_edge->succ_next) - if (tmp_edge->flags & EDGE_FALLTHRU) - break; - c_has_outgoing_fallthru = (tmp_edge != NULL); - - for (tmp_edge = b->pred; tmp_edge; tmp_edge = tmp_edge->pred_next) - if (tmp_edge->flags & EDGE_FALLTHRU) - break; - b_has_incoming_fallthru = (tmp_edge != NULL); - - /* If B does not have an incoming fallthru, then it can be moved - immediately before C without introducing or modifying jumps. - C cannot be the first block, so we do not have to worry about - accessing a non-existent block. */ - if (! b_has_incoming_fallthru) - return merge_blocks_move_predecessor_nojumps (b, c); - - /* Otherwise, we're going to try to move C after B. If C does - not have an outgoing fallthru, then it can be moved - immediately after B without introducing or modifying jumps. */ - if (! c_has_outgoing_fallthru) - return merge_blocks_move_successor_nojumps (b, c); - - /* Otherwise, we'll need to insert an extra jump, and possibly - a new block to contain it. */ - /* ??? Not implemented yet. */ - - return 0; - } - } - - /* Top level driver for merge_blocks. */ - - static void - try_merge_blocks () - { - int i; - - /* Attempt to merge blocks as made possible by edge removal. If a block - has only one successor, and the successor has only one predecessor, - they may be combined. */ - - for (i = 0; i < n_basic_blocks;) - { - basic_block c, b = BASIC_BLOCK (i); - edge s; - - /* A loop because chains of blocks might be combineable. */ - while ((s = b->succ) != NULL - && s->succ_next == NULL - && (s->flags & EDGE_EH) == 0 - && (c = s->dest) != EXIT_BLOCK_PTR - && c->pred->pred_next == NULL - /* If the jump insn has side effects, we can't kill the edge. */ - && (GET_CODE (b->end) != JUMP_INSN - || onlyjump_p (b->end)) - && merge_blocks (s, b, c)) - continue; - - /* Don't get confused by the index shift caused by deleting blocks. */ - i = b->index + 1; - } - } - - /* The given edge should potentially be a fallthru edge. If that is in - fact true, delete the jump and barriers that are in the way. */ - - void - tidy_fallthru_edge (e, b, c) - edge e; - basic_block b, c; - { - rtx q; - - /* ??? In a late-running flow pass, other folks may have deleted basic - blocks by nopping out blocks, leaving multiple BARRIERs between here - and the target label. They ought to be chastized and fixed. - - We can also wind up with a sequence of undeletable labels between - one block and the next. - - So search through a sequence of barriers, labels, and notes for - the head of block C and assert that we really do fall through. */ - - if (next_real_insn (b->end) != next_real_insn (PREV_INSN (c->head))) - return; - - /* Remove what will soon cease being the jump insn from the source block. - If block B consisted only of this single jump, turn it into a deleted - note. */ - q = b->end; - if (GET_CODE (q) == JUMP_INSN - && onlyjump_p (q) - && (any_uncondjump_p (q) - || (b->succ == e && e->succ_next == NULL))) - { - #ifdef HAVE_cc0 - /* If this was a conditional jump, we need to also delete - the insn that set cc0. */ - if (any_condjump_p (q) && sets_cc0_p (PREV_INSN (q))) - q = PREV_INSN (q); - #endif - - if (b->head == q) - { - PUT_CODE (q, NOTE); - NOTE_LINE_NUMBER (q) = NOTE_INSN_DELETED; - NOTE_SOURCE_FILE (q) = 0; - } - else - { - q = PREV_INSN (q); - - /* We don't want a block to end on a line-number note since that has - the potential of changing the code between -g and not -g. */ - while (GET_CODE (q) == NOTE && NOTE_LINE_NUMBER (q) >= 0) - q = PREV_INSN (q); - } - - b->end = q; - } - - /* Selectively unlink the sequence. */ - if (q != PREV_INSN (c->head)) - flow_delete_insn_chain (NEXT_INSN (q), PREV_INSN (c->head)); - - e->flags |= EDGE_FALLTHRU; - } - - /* Fix up edges that now fall through, or rather should now fall through - but previously required a jump around now deleted blocks. Simplify - the search by only examining blocks numerically adjacent, since this - is how find_basic_blocks created them. */ - - static void - tidy_fallthru_edges () - { - int i; - - for (i = 1; i < n_basic_blocks; ++i) - { - basic_block b = BASIC_BLOCK (i - 1); - basic_block c = BASIC_BLOCK (i); - edge s; - - /* We care about simple conditional or unconditional jumps with - a single successor. - - If we had a conditional branch to the next instruction when - find_basic_blocks was called, then there will only be one - out edge for the block which ended with the conditional - branch (since we do not create duplicate edges). ! Furthermore, the edge will be marked as a fallthru because we ! merge the flags for the duplicate edges. So we do not want to ! check that the edge is not a FALLTHRU edge. */ ! if ((s = b->succ) != NULL ! && ! (s->flags & EDGE_COMPLEX) ! && s->succ_next == NULL ! && s->dest == c ! /* If the jump insn has side effects, we can't tidy the edge. */ ! && (GET_CODE (b->end) != JUMP_INSN ! || onlyjump_p (b->end))) ! tidy_fallthru_edge (s, b, c); ! } } /* Perform data flow analysis. --- 374,405 ---- { /* Recompute insn->block mapping, since the initial mapping is set before we delete unreachable blocks. */ if (BLOCK_FOR_INSN (cfun->x_clobber_return_insn) != NULL) warning ("control reaches end of non-void function"); } } } ! /* Return the INSN immediately following the NOTE_INSN_BASIC_BLOCK ! note associated with the BLOCK. */ rtx ! first_insn_after_basic_block_note (block) ! basic_block block; { ! rtx insn; ! /* Get the first instruction in the block. */ ! insn = block->head; + if (insn == NULL_RTX) + return NULL_RTX; if (GET_CODE (insn) == CODE_LABEL) ! insn = NEXT_INSN (insn); ! if (!NOTE_INSN_BASIC_BLOCK_P (insn)) abort (); ! return NEXT_INSN (insn); } /* Perform data flow analysis. *************** life_analysis (f, file, flags) *** 2665,2672 **** int flags; { #ifdef ELIMINABLE_REGS ! register int i; ! static struct {int from, to; } eliminables[] = ELIMINABLE_REGS; #endif /* Record which registers will be eliminated. We use this in --- 413,420 ---- int flags; { #ifdef ELIMINABLE_REGS ! int i; ! static const struct {const int from, to; } eliminables[] = ELIMINABLE_REGS; #endif /* Record which registers will be eliminated. We use this in *************** life_analysis (f, file, flags) *** 2682,2688 **** #endif if (! optimize) ! flags &= ~(PROP_LOG_LINKS | PROP_AUTOINC); /* The post-reload life analysis have (on a global basis) the same registers live as was computed by reload itself. elimination --- 430,436 ---- #endif if (! optimize) ! flags &= ~(PROP_LOG_LINKS | PROP_AUTOINC | PROP_ALLOW_CFG_CHANGES); /* The post-reload life analysis have (on a global basis) the same registers live as was computed by reload itself. elimination *************** life_analysis (f, file, flags) *** 2704,2709 **** --- 452,458 ---- /* Always remove no-op moves. Do this before other processing so that we don't have to keep re-scanning them. */ delete_noop_moves (f); + purge_all_dead_edges (false); /* Some targets can emit simpler epilogues if they know that sp was not ever modified during the function. After reload, of course, *************** life_analysis (f, file, flags) *** 2740,2746 **** { rtx insn; ! /* Search for any REG_LABEL notes whih reference deleted labels. */ for (insn = get_insns (); insn; insn = NEXT_INSN (insn)) { rtx inote = find_reg_note (insn, REG_LABEL, NULL_RTX); --- 489,495 ---- { rtx insn; ! /* Search for any REG_LABEL notes which reference deleted labels. */ for (insn = get_insns (); insn; insn = NEXT_INSN (insn)) { rtx inote = find_reg_note (insn, REG_LABEL, NULL_RTX); *************** life_analysis (f, file, flags) *** 2750,2759 **** } } #endif } /* A subroutine of verify_wide_reg, called through for_each_rtx. ! Search for REGNO. If found, abort if it is not wider than word_mode. */ static int verify_wide_reg_1 (px, pregno) --- 499,511 ---- } } #endif + /* Removing dead insns should've made jumptables really dead. */ + delete_dead_jumptables (); } /* A subroutine of verify_wide_reg, called through for_each_rtx. ! Search for REGNO. If found, return 2 if it is not wider than ! word_mode. */ static int verify_wide_reg_1 (px, pregno) *************** verify_wide_reg_1 (px, pregno) *** 2766,2799 **** if (GET_CODE (x) == REG && REGNO (x) == regno) { if (GET_MODE_BITSIZE (GET_MODE (x)) <= BITS_PER_WORD) ! abort (); return 1; } return 0; } /* A subroutine of verify_local_live_at_start. Search through insns ! between HEAD and END looking for register REGNO. */ static void ! verify_wide_reg (regno, head, end) int regno; ! rtx head, end; { while (1) { ! if (INSN_P (head) ! && for_each_rtx (&PATTERN (head), verify_wide_reg_1, ®no)) ! return; if (head == end) break; head = NEXT_INSN (head); } - /* We didn't find the register at all. Something's way screwy. */ if (rtl_dump_file) ! fprintf (rtl_dump_file, "Aborting in verify_wide_reg; reg %d\n", regno); ! print_rtl_and_abort (); } /* A subroutine of update_life_info. Verify that there are no untoward --- 518,560 ---- if (GET_CODE (x) == REG && REGNO (x) == regno) { if (GET_MODE_BITSIZE (GET_MODE (x)) <= BITS_PER_WORD) ! return 2; return 1; } return 0; } /* A subroutine of verify_local_live_at_start. Search through insns ! of BB looking for register REGNO. */ static void ! verify_wide_reg (regno, bb) int regno; ! basic_block bb; { + rtx head = bb->head, end = bb->end; + while (1) { ! if (INSN_P (head)) ! { ! int r = for_each_rtx (&PATTERN (head), verify_wide_reg_1, ®no); ! if (r == 1) ! return; ! if (r == 2) ! break; ! } if (head == end) break; head = NEXT_INSN (head); } if (rtl_dump_file) ! { ! fprintf (rtl_dump_file, "Register %d died unexpectedly.\n", regno); ! dump_bb (bb, rtl_dump_file); ! } ! abort (); } /* A subroutine of update_life_info. Verify that there are no untoward *************** verify_local_live_at_start (new_live_at_ *** 2813,2824 **** if (rtl_dump_file) { fprintf (rtl_dump_file, ! "live_at_start mismatch in bb %d, aborting\n", bb->index); - debug_bitmap_file (rtl_dump_file, bb->global_live_at_start); debug_bitmap_file (rtl_dump_file, new_live_at_start); } ! print_rtl_and_abort (); } } else --- 574,586 ---- if (rtl_dump_file) { fprintf (rtl_dump_file, ! "live_at_start mismatch in bb %d, aborting\nNew:\n", bb->index); debug_bitmap_file (rtl_dump_file, new_live_at_start); + fputs ("Old:\n", rtl_dump_file); + dump_bb (bb, rtl_dump_file); } ! abort (); } } else *************** verify_local_live_at_start (new_live_at_ *** 2834,2847 **** if (REGNO_REG_SET_P (bb->global_live_at_start, i)) { if (rtl_dump_file) ! fprintf (rtl_dump_file, ! "Register %d died unexpectedly in block %d\n", i, ! bb->index); ! print_rtl_and_abort (); } /* Verify that the now-live register is wider than word_mode. */ ! verify_wide_reg (i, bb->head, bb->end); }); } } --- 596,611 ---- if (REGNO_REG_SET_P (bb->global_live_at_start, i)) { if (rtl_dump_file) ! { ! fprintf (rtl_dump_file, ! "Register %d died unexpectedly.\n", i); ! dump_bb (bb, rtl_dump_file); ! } ! abort (); } /* Verify that the now-live register is wider than word_mode. */ ! verify_wide_reg (i, bb); }); } } *************** update_life_info (blocks, extent, prop_f *** 2872,2885 **** regset tmp; regset_head tmp_head; int i; tmp = INITIALIZE_REG_SET (tmp_head); /* For a global update, we go through the relaxation process again. */ if (extent != UPDATE_LIFE_LOCAL) { ! calculate_global_regs_live (blocks, blocks, ! prop_flags & PROP_SCAN_DEAD_CODE); /* If asked, remove notes from the blocks we'll update. */ if (extent == UPDATE_LIFE_GLOBAL_RM_NOTES) --- 636,701 ---- regset tmp; regset_head tmp_head; int i; + int stabilized_prop_flags = prop_flags; tmp = INITIALIZE_REG_SET (tmp_head); + timevar_push ((extent == UPDATE_LIFE_LOCAL || blocks) + ? TV_LIFE_UPDATE : TV_LIFE); + + /* Changes to the CFG are only allowed when + doing a global update for the entire CFG. */ + if ((prop_flags & PROP_ALLOW_CFG_CHANGES) + && (extent == UPDATE_LIFE_LOCAL || blocks)) + abort (); + + /* Clear log links in case we are asked to (re)compute them. */ + if (prop_flags & PROP_LOG_LINKS) + clear_log_links (blocks); + /* For a global update, we go through the relaxation process again. */ if (extent != UPDATE_LIFE_LOCAL) { ! for ( ; ; ) ! { ! int changed = 0; ! ! calculate_global_regs_live (blocks, blocks, ! prop_flags & (PROP_SCAN_DEAD_CODE ! | PROP_ALLOW_CFG_CHANGES)); ! ! if ((prop_flags & (PROP_KILL_DEAD_CODE | PROP_ALLOW_CFG_CHANGES)) ! != (PROP_KILL_DEAD_CODE | PROP_ALLOW_CFG_CHANGES)) ! break; ! ! /* Removing dead code may allow the CFG to be simplified which ! in turn may allow for further dead code detection / removal. */ ! for (i = n_basic_blocks - 1; i >= 0; --i) ! { ! basic_block bb = BASIC_BLOCK (i); ! ! COPY_REG_SET (tmp, bb->global_live_at_end); ! changed |= propagate_block (bb, tmp, NULL, NULL, ! prop_flags & (PROP_SCAN_DEAD_CODE ! | PROP_KILL_DEAD_CODE)); ! } ! ! /* Don't pass PROP_SCAN_DEAD_CODE or PROP_KILL_DEAD_CODE to ! subsequent propagate_block calls, since removing or acting as ! removing dead code can affect global register liveness, which ! is supposed to be finalized for this call after this loop. */ ! stabilized_prop_flags ! &= ~(PROP_SCAN_DEAD_CODE | PROP_KILL_DEAD_CODE); ! ! if (! changed) ! break; ! ! /* We repeat regardless of what cleanup_cfg says. If there were ! instructions deleted above, that might have been only a ! partial improvement (see MAX_MEM_SET_LIST_LEN usage). ! Further improvement may be possible. */ ! cleanup_cfg (CLEANUP_EXPENSIVE); ! } /* If asked, remove notes from the blocks we'll update. */ if (extent == UPDATE_LIFE_GLOBAL_RM_NOTES) *************** update_life_info (blocks, extent, prop_f *** 2893,2899 **** basic_block bb = BASIC_BLOCK (i); COPY_REG_SET (tmp, bb->global_live_at_end); ! propagate_block (bb, tmp, NULL, NULL, prop_flags); if (extent == UPDATE_LIFE_LOCAL) verify_local_live_at_start (tmp, bb); --- 709,715 ---- basic_block bb = BASIC_BLOCK (i); COPY_REG_SET (tmp, bb->global_live_at_end); ! propagate_block (bb, tmp, NULL, NULL, stabilized_prop_flags); if (extent == UPDATE_LIFE_LOCAL) verify_local_live_at_start (tmp, bb); *************** update_life_info (blocks, extent, prop_f *** 2906,2912 **** basic_block bb = BASIC_BLOCK (i); COPY_REG_SET (tmp, bb->global_live_at_end); ! propagate_block (bb, tmp, NULL, NULL, prop_flags); if (extent == UPDATE_LIFE_LOCAL) verify_local_live_at_start (tmp, bb); --- 722,729 ---- basic_block bb = BASIC_BLOCK (i); COPY_REG_SET (tmp, bb->global_live_at_end); ! ! propagate_block (bb, tmp, NULL, NULL, stabilized_prop_flags); if (extent == UPDATE_LIFE_LOCAL) verify_local_live_at_start (tmp, bb); *************** update_life_info (blocks, extent, prop_f *** 2943,2948 **** --- 760,767 ---- } }); } + timevar_pop ((extent == UPDATE_LIFE_LOCAL || blocks) + ? TV_LIFE_UPDATE : TV_LIFE); } /* Free the variables allocated by find_basic_blocks. *************** void *** 2953,2968 **** free_basic_block_vars (keep_head_end_p) int keep_head_end_p; { - if (basic_block_for_insn) - { - VARRAY_FREE (basic_block_for_insn); - basic_block_for_insn = NULL; - } - if (! keep_head_end_p) { ! clear_edges (); ! VARRAY_FREE (basic_block_info); n_basic_blocks = 0; ENTRY_BLOCK_PTR->aux = NULL; --- 772,784 ---- free_basic_block_vars (keep_head_end_p) int keep_head_end_p; { if (! keep_head_end_p) { ! if (basic_block_info) ! { ! clear_edges (); ! VARRAY_FREE (basic_block_info); ! } n_basic_blocks = 0; ENTRY_BLOCK_PTR->aux = NULL; *************** free_basic_block_vars (keep_head_end_p) *** 2972,3050 **** } } ! /* Return nonzero if the destination of SET equals the source. */ ! ! static int ! set_noop_p (set) ! rtx set; ! { ! rtx src = SET_SRC (set); ! rtx dst = SET_DEST (set); ! ! if (GET_CODE (src) == SUBREG && GET_CODE (dst) == SUBREG) ! { ! if (SUBREG_WORD (src) != SUBREG_WORD (dst)) ! return 0; ! src = SUBREG_REG (src); ! dst = SUBREG_REG (dst); ! } ! ! return (GET_CODE (src) == REG && GET_CODE (dst) == REG ! && REGNO (src) == REGNO (dst)); ! } ! ! /* Return nonzero if an insn consists only of SETs, each of which only sets a ! value to itself. */ ! static int ! noop_move_p (insn) ! rtx insn; { ! rtx pat = PATTERN (insn); ! ! /* Insns carrying these notes are useful later on. */ ! if (find_reg_note (insn, REG_EQUAL, NULL_RTX)) ! return 0; ! ! if (GET_CODE (pat) == SET && set_noop_p (pat)) ! return 1; ! if (GET_CODE (pat) == PARALLEL) { ! int i; ! /* If nothing but SETs of registers to themselves, ! this insn can also be deleted. */ ! for (i = 0; i < XVECLEN (pat, 0); i++) { ! rtx tem = XVECEXP (pat, 0, i); ! if (GET_CODE (tem) == USE ! || GET_CODE (tem) == CLOBBER) ! continue; ! if (GET_CODE (tem) != SET || ! set_noop_p (tem)) ! return 0; } - - return 1; } - return 0; } ! /* Delete any insns that copy a register to itself. */ ! static void ! delete_noop_moves (f) ! rtx f; { ! rtx insn; ! for (insn = f; insn; insn = NEXT_INSN (insn)) { ! if (GET_CODE (insn) == INSN && noop_move_p (insn)) { ! PUT_CODE (insn, NOTE); ! NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED; ! NOTE_SOURCE_FILE (insn) = 0; } } } --- 788,860 ---- } } ! /* Delete any insns that copy a register to itself. */ ! void ! delete_noop_moves (f) ! rtx f ATTRIBUTE_UNUSED; { ! int i; ! rtx insn, next; ! basic_block bb; ! for (i = 0; i < n_basic_blocks; i++) { ! bb = BASIC_BLOCK (i); ! for (insn = bb->head; insn != NEXT_INSN (bb->end); insn = next) { ! next = NEXT_INSN (insn); ! if (INSN_P (insn) && noop_move_p (insn)) ! { ! rtx note; ! /* If we're about to remove the first insn of a libcall ! then move the libcall note to the next real insn and ! update the retval note. */ ! if ((note = find_reg_note (insn, REG_LIBCALL, NULL_RTX)) ! && XEXP (note, 0) != insn) ! { ! rtx new_libcall_insn = next_real_insn (insn); ! rtx retval_note = find_reg_note (XEXP (note, 0), ! REG_RETVAL, NULL_RTX); ! REG_NOTES (new_libcall_insn) ! = gen_rtx_INSN_LIST (REG_LIBCALL, XEXP (note, 0), ! REG_NOTES (new_libcall_insn)); ! XEXP (retval_note, 0) = new_libcall_insn; ! } ! /* Do not call delete_insn here since that may change ! the basic block boundaries which upsets some callers. */ ! PUT_CODE (insn, NOTE); ! NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED; ! NOTE_SOURCE_FILE (insn) = 0; ! } } } } ! /* Delete any jump tables never referenced. We can't delete them at the ! time of removing tablejump insn as they are referenced by the preceding ! insns computing the destination, so we delay deleting and garbagecollect ! them once life information is computed. */ static void ! delete_dead_jumptables () { ! rtx insn, next; ! for (insn = get_insns (); insn; insn = next) { ! next = NEXT_INSN (insn); ! if (GET_CODE (insn) == CODE_LABEL ! && LABEL_NUSES (insn) == LABEL_PRESERVE_P (insn) ! && GET_CODE (next) == JUMP_INSN ! && (GET_CODE (PATTERN (next)) == ADDR_VEC ! || GET_CODE (PATTERN (next)) == ADDR_DIFF_VEC)) { ! if (rtl_dump_file) ! fprintf (rtl_dump_file, "Dead jumptable %i removed\n", INSN_UID (insn)); ! delete_insn (NEXT_INSN (insn)); ! delete_insn (insn); ! next = NEXT_INSN (next); } } } *************** static void *** 3123,3129 **** mark_regs_live_at_end (set) regset set; { ! int i; /* If exiting needs the right stack value, consider the stack pointer live at the end of the function. */ --- 933,939 ---- mark_regs_live_at_end (set) regset set; { ! unsigned int i; /* If exiting needs the right stack value, consider the stack pointer live at the end of the function. */ *************** mark_regs_live_at_end (set) *** 3151,3165 **** #endif } - #ifdef PIC_OFFSET_TABLE_REGNUM #ifndef PIC_OFFSET_TABLE_REG_CALL_CLOBBERED /* Many architectures have a GP register even without flag_pic. Assume the pic register is not in use, or will be handled by other means, if it is not fixed. */ ! if (fixed_regs[PIC_OFFSET_TABLE_REGNUM]) SET_REGNO_REG_SET (set, PIC_OFFSET_TABLE_REGNUM); #endif - #endif /* Mark all global registers, and all registers used by the epilogue as being live at the end of the function since they may be --- 961,974 ---- #endif } #ifndef PIC_OFFSET_TABLE_REG_CALL_CLOBBERED /* Many architectures have a GP register even without flag_pic. Assume the pic register is not in use, or will be handled by other means, if it is not fixed. */ ! if (PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM ! && fixed_regs[PIC_OFFSET_TABLE_REGNUM]) SET_REGNO_REG_SET (set, PIC_OFFSET_TABLE_REGNUM); #endif /* Mark all global registers, and all registers used by the epilogue as being live at the end of the function since they may be *************** mark_regs_live_at_end (set) *** 3172,3178 **** { /* Mark all call-saved registers that we actually used. */ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) ! if (regs_ever_live[i] && ! call_used_regs[i] && ! LOCAL_REGNO (i)) SET_REGNO_REG_SET (set, i); } --- 981,988 ---- { /* Mark all call-saved registers that we actually used. */ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) ! if (regs_ever_live[i] && ! LOCAL_REGNO (i) ! && ! TEST_HARD_REG_BIT (regs_invalidated_by_call, i)) SET_REGNO_REG_SET (set, i); } *************** calculate_global_regs_live (blocks_in, b *** 3247,3253 **** new_live_at_end = INITIALIZE_REG_SET (new_live_at_end_head); call_used = INITIALIZE_REG_SET (call_used_head); ! /* Inconveniently, this is only redily available in hard reg set form. */ for (i = 0; i < FIRST_PSEUDO_REGISTER; ++i) if (call_used_regs[i]) SET_REGNO_REG_SET (call_used, i); --- 1057,1063 ---- new_live_at_end = INITIALIZE_REG_SET (new_live_at_end_head); call_used = INITIALIZE_REG_SET (call_used_head); ! /* Inconveniently, this is only readily available in hard reg set form. */ for (i = 0; i < FIRST_PSEUDO_REGISTER; ++i) if (call_used_regs[i]) SET_REGNO_REG_SET (call_used, i); *************** calculate_global_regs_live (blocks_in, b *** 3285,3293 **** --- 1095,1126 ---- } } + /* We clean aux when we remove the initially-enqueued bbs, but we + don't enqueue ENTRY and EXIT initially, so clean them upfront and + unconditionally. */ + ENTRY_BLOCK_PTR->aux = EXIT_BLOCK_PTR->aux = NULL; + if (blocks_out) sbitmap_zero (blocks_out); + /* We work through the queue until there are no more blocks. What + is live at the end of this block is precisely the union of what + is live at the beginning of all its successors. So, we set its + GLOBAL_LIVE_AT_END field based on the GLOBAL_LIVE_AT_START field + for its successors. Then, we compute GLOBAL_LIVE_AT_START for + this block by walking through the instructions in this block in + reverse order and updating as we go. If that changed + GLOBAL_LIVE_AT_START, we add the predecessors of the block to the + queue; they will now need to recalculate GLOBAL_LIVE_AT_END. + + We are guaranteed to terminate, because GLOBAL_LIVE_AT_START + never shrinks. If a register appears in GLOBAL_LIVE_AT_START, it + must either be live at the end of the block, or used within the + block. In the latter case, it will certainly never disappear + from GLOBAL_LIVE_AT_START. In the former case, the register + could go away only if it disappeared from GLOBAL_LIVE_AT_START + for one of the successor blocks. By induction, that cannot + occur. */ while (qhead != qtail) { int rescan, changed; *************** calculate_global_regs_live (blocks_in, b *** 3299,3321 **** qhead = queue; bb->aux = NULL; ! /* Begin by propogating live_at_start from the successor blocks. */ CLEAR_REG_SET (new_live_at_end); - for (e = bb->succ; e; e = e->succ_next) - { - basic_block sb = e->dest; ! /* Call-clobbered registers die across exception and call edges. */ ! /* ??? Abnormal call edges ignored for the moment, as this gets ! confused by sibling call edges, which crashes reg-stack. */ ! if (e->flags & EDGE_EH) ! { ! bitmap_operation (tmp, sb->global_live_at_start, ! call_used, BITMAP_AND_COMPL); ! IOR_REG_SET (new_live_at_end, tmp); ! } ! else ! IOR_REG_SET (new_live_at_end, sb->global_live_at_start); } /* The all-important stack pointer must always be live. */ --- 1132,1173 ---- qhead = queue; bb->aux = NULL; ! /* Begin by propagating live_at_start from the successor blocks. */ CLEAR_REG_SET (new_live_at_end); ! if (bb->succ) ! for (e = bb->succ; e; e = e->succ_next) ! { ! basic_block sb = e->dest; ! ! /* Call-clobbered registers die across exception and ! call edges. */ ! /* ??? Abnormal call edges ignored for the moment, as this gets ! confused by sibling call edges, which crashes reg-stack. */ ! if (e->flags & EDGE_EH) ! { ! bitmap_operation (tmp, sb->global_live_at_start, ! call_used, BITMAP_AND_COMPL); ! IOR_REG_SET (new_live_at_end, tmp); ! } ! else ! IOR_REG_SET (new_live_at_end, sb->global_live_at_start); ! ! /* If a target saves one register in another (instead of on ! the stack) the save register will need to be live for EH. */ ! if (e->flags & EDGE_EH) ! for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) ! if (EH_USES (i)) ! SET_REGNO_REG_SET (new_live_at_end, i); ! } ! else ! { ! /* This might be a noreturn function that throws. And ! even if it isn't, getting the unwind info right helps ! debugging. */ ! for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) ! if (EH_USES (i)) ! SET_REGNO_REG_SET (new_live_at_end, i); } /* The all-important stack pointer must always be live. */ *************** calculate_global_regs_live (blocks_in, b *** 3337,3348 **** SET_REGNO_REG_SET (new_live_at_end, ARG_POINTER_REGNUM); #endif - #ifdef PIC_OFFSET_TABLE_REGNUM /* Any constant, or pseudo with constant equivalences, may require reloading from memory using the pic register. */ ! if (fixed_regs[PIC_OFFSET_TABLE_REGNUM]) SET_REGNO_REG_SET (new_live_at_end, PIC_OFFSET_TABLE_REGNUM); - #endif } /* Regs used in phi nodes are not included in --- 1189,1199 ---- SET_REGNO_REG_SET (new_live_at_end, ARG_POINTER_REGNUM); #endif /* Any constant, or pseudo with constant equivalences, may require reloading from memory using the pic register. */ ! if (PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM ! && fixed_regs[PIC_OFFSET_TABLE_REGNUM]) SET_REGNO_REG_SET (new_live_at_end, PIC_OFFSET_TABLE_REGNUM); } /* Regs used in phi nodes are not included in *************** calculate_global_regs_live (blocks_in, b *** 3487,3502 **** free (queue); } /* Subroutines of life analysis. */ /* Allocate the permanent data structures that represent the results of life analysis. Not static since used also for stupid life analysis. */ ! static void allocate_bb_life_data () { ! register int i; for (i = 0; i < n_basic_blocks; i++) { --- 1338,1462 ---- free (queue); } + + + /* This structure is used to pass parameters to an from the + the function find_regno_partial(). It is used to pass in the + register number we are looking, as well as to return any rtx + we find. */ + + typedef struct { + unsigned regno_to_find; + rtx retval; + } find_regno_partial_param; + + + /* Find the rtx for the reg numbers specified in 'data' if it is + part of an expression which only uses part of the register. Return + it in the structure passed in. */ + static int + find_regno_partial (ptr, data) + rtx *ptr; + void *data; + { + find_regno_partial_param *param = (find_regno_partial_param *)data; + unsigned reg = param->regno_to_find; + param->retval = NULL_RTX; + + if (*ptr == NULL_RTX) + return 0; + + switch (GET_CODE (*ptr)) + { + case ZERO_EXTRACT: + case SIGN_EXTRACT: + case STRICT_LOW_PART: + if (GET_CODE (XEXP (*ptr, 0)) == REG && REGNO (XEXP (*ptr, 0)) == reg) + { + param->retval = XEXP (*ptr, 0); + return 1; + } + break; + + case SUBREG: + if (GET_CODE (SUBREG_REG (*ptr)) == REG + && REGNO (SUBREG_REG (*ptr)) == reg) + { + param->retval = SUBREG_REG (*ptr); + return 1; + } + break; + + default: + break; + } + + return 0; + } + + /* Process all immediate successors of the entry block looking for pseudo + registers which are live on entry. Find all of those whose first + instance is a partial register reference of some kind, and initialize + them to 0 after the entry block. This will prevent bit sets within + registers whose value is unknown, and may contain some kind of sticky + bits we don't want. */ + + int + initialize_uninitialized_subregs () + { + rtx insn; + edge e; + int reg, did_something = 0; + find_regno_partial_param param; + + for (e = ENTRY_BLOCK_PTR->succ; e; e = e->succ_next) + { + basic_block bb = e->dest; + regset map = bb->global_live_at_start; + EXECUTE_IF_SET_IN_REG_SET (map, + FIRST_PSEUDO_REGISTER, reg, + { + int uid = REGNO_FIRST_UID (reg); + rtx i; + + /* Find an insn which mentions the register we are looking for. + Its preferable to have an instance of the register's rtl since + there may be various flags set which we need to duplicate. + If we can't find it, its probably an automatic whose initial + value doesn't matter, or hopefully something we don't care about. */ + for (i = get_insns (); i && INSN_UID (i) != uid; i = NEXT_INSN (i)) + ; + if (i != NULL_RTX) + { + /* Found the insn, now get the REG rtx, if we can. */ + param.regno_to_find = reg; + for_each_rtx (&i, find_regno_partial, ¶m); + if (param.retval != NULL_RTX) + { + insn = gen_move_insn (param.retval, + CONST0_RTX (GET_MODE (param.retval))); + insert_insn_on_edge (insn, e); + did_something = 1; + } + } + }); + } + + if (did_something) + commit_edge_insertions (); + return did_something; + } + /* Subroutines of life analysis. */ /* Allocate the permanent data structures that represent the results of life analysis. Not static since used also for stupid life analysis. */ ! void allocate_bb_life_data () { ! int i; for (i = 0; i < n_basic_blocks; i++) { *************** propagate_block_delete_insn (bb, insn) *** 3546,3551 **** --- 1506,1512 ---- rtx insn; { rtx inote = find_reg_note (insn, REG_LABEL, NULL_RTX); + bool purge = false; /* If the insn referred to a label, and that label was attached to an ADDR_VEC, it's safe to delete the ADDR_VEC. In fact, it's *************** propagate_block_delete_insn (bb, insn) *** 3583,3612 **** for (i = 0; i < len; i++) LABEL_NUSES (XEXP (XVECEXP (pat, diff_vec_p, i), 0))--; ! flow_delete_insn (next); } } if (bb->end == insn) ! bb->end = PREV_INSN (insn); ! flow_delete_insn (insn); } /* Delete dead libcalls for propagate_block. Return the insn before the libcall. */ static rtx ! propagate_block_delete_libcall (bb, insn, note) ! basic_block bb; rtx insn, note; { rtx first = XEXP (note, 0); rtx before = PREV_INSN (first); ! if (insn == bb->end) ! bb->end = before; ! ! flow_delete_insn_chain (first, insn); return before; } --- 1544,1571 ---- for (i = 0; i < len; i++) LABEL_NUSES (XEXP (XVECEXP (pat, diff_vec_p, i), 0))--; ! delete_insn (next); } } if (bb->end == insn) ! purge = true; ! delete_insn (insn); ! if (purge) ! purge_dead_edges (bb); } /* Delete dead libcalls for propagate_block. Return the insn before the libcall. */ static rtx ! propagate_block_delete_libcall ( insn, note) rtx insn, note; { rtx first = XEXP (note, 0); rtx before = PREV_INSN (first); ! delete_insn_chain (first, insn); return before; } *************** propagate_one_insn (pbi, insn) *** 3653,3659 **** || (HAVE_sibcall_epilogue && sibcall_epilogue_contains (insn))) && find_reg_note (insn, REG_MAYBE_DEAD, NULL_RTX) == 0) ! abort (); /* Record sets. Do this even for dead instructions, since they would have killed the values if they hadn't been deleted. */ --- 1612,1618 ---- || (HAVE_sibcall_epilogue && sibcall_epilogue_contains (insn))) && find_reg_note (insn, REG_MAYBE_DEAD, NULL_RTX) == 0) ! fatal_insn ("Attempt to delete prologue/epilogue insn:", insn); /* Record sets. Do this even for dead instructions, since they would have killed the values if they hadn't been deleted. */ *************** propagate_one_insn (pbi, insn) *** 3665,3671 **** pbi->cc0_live = 0; if (libcall_is_dead) ! prev = propagate_block_delete_libcall (pbi->bb, insn, note); else propagate_block_delete_insn (pbi->bb, insn); --- 1624,1630 ---- pbi->cc0_live = 0; if (libcall_is_dead) ! prev = propagate_block_delete_libcall ( insn, note); else propagate_block_delete_insn (pbi->bb, insn); *************** propagate_one_insn (pbi, insn) *** 3676,3682 **** a following memory address. */ #ifdef AUTO_INC_DEC { ! register rtx x = single_set (insn); /* Does this instruction increment or decrement a register? */ if ((flags & PROP_AUTOINC) --- 1635,1641 ---- a following memory address. */ #ifdef AUTO_INC_DEC { ! rtx x = single_set (insn); /* Does this instruction increment or decrement a register? */ if ((flags & PROP_AUTOINC) *************** propagate_one_insn (pbi, insn) *** 3720,3725 **** --- 1679,1685 ---- ; else { + rtx note; /* Any regs live at the time of a call instruction must not go in a register clobbered by calls. Find all regs now live and record this for them. */ *************** propagate_one_insn (pbi, insn) *** 3734,3740 **** if (GET_CODE (insn) == CALL_INSN) { ! register int i; rtx note, cond; cond = NULL_RTX; --- 1694,1700 ---- if (GET_CODE (insn) == CALL_INSN) { ! int i; rtx note, cond; cond = NULL_RTX; *************** propagate_one_insn (pbi, insn) *** 3742,3748 **** cond = COND_EXEC_TEST (PATTERN (insn)); /* Non-constant calls clobber memory. */ ! if (! CONST_CALL_P (insn)) { free_EXPR_LIST_list (&pbi->mem_set_list); pbi->mem_set_list_len = 0; --- 1702,1708 ---- cond = COND_EXEC_TEST (PATTERN (insn)); /* Non-constant calls clobber memory. */ ! if (! CONST_OR_PURE_CALL_P (insn)) { free_EXPR_LIST_list (&pbi->mem_set_list); pbi->mem_set_list_len = 0; *************** propagate_one_insn (pbi, insn) *** 3758,3765 **** /* Calls change all call-used and global registers. */ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) ! if (call_used_regs[i] && ! global_regs[i] ! && ! fixed_regs[i]) { /* We do not want REG_UNUSED notes for these registers. */ mark_set_1 (pbi, CLOBBER, gen_rtx_REG (reg_raw_mode[i], i), --- 1718,1724 ---- /* Calls change all call-used and global registers. */ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) ! if (TEST_HARD_REG_BIT (regs_invalidated_by_call, i)) { /* We do not want REG_UNUSED notes for these registers. */ mark_set_1 (pbi, CLOBBER, gen_rtx_REG (reg_raw_mode[i], i), *************** propagate_one_insn (pbi, insn) *** 3776,3781 **** --- 1735,1744 ---- /* Record uses. */ if (! insn_is_dead) mark_used_regs (pbi, PATTERN (insn), NULL_RTX, insn); + if ((flags & PROP_EQUAL_NOTES) + && ((note = find_reg_note (insn, REG_EQUAL, NULL_RTX)) + || (note = find_reg_note (insn, REG_EQUIV, NULL_RTX)))) + mark_used_regs (pbi, XEXP (note, 0), NULL_RTX, insn); /* Sometimes we may have inserted something before INSN (such as a move) when we make an auto-inc. So ensure we will scan those insns. */ *************** propagate_one_insn (pbi, insn) *** 3785,3791 **** if (! insn_is_dead && GET_CODE (insn) == CALL_INSN) { ! register int i; rtx note, cond; cond = NULL_RTX; --- 1748,1754 ---- if (! insn_is_dead && GET_CODE (insn) == CALL_INSN) { ! int i; rtx note, cond; cond = NULL_RTX; *************** init_propagate_block_info (bb, live, loc *** 3958,3999 **** && bb->succ->dest == EXIT_BLOCK_PTR && ! current_function_calls_eh_return))) { ! rtx insn; for (insn = bb->end; insn != bb->head; insn = PREV_INSN (insn)) if (GET_CODE (insn) == INSN ! && GET_CODE (PATTERN (insn)) == SET ! && GET_CODE (SET_DEST (PATTERN (insn))) == MEM) { ! rtx mem = SET_DEST (PATTERN (insn)); /* This optimization is performed by faking a store to the memory at the end of the block. This doesn't work for unchanging memories because multiple stores to unchanging memory is illegal and alias analysis doesn't consider it. */ ! if (RTX_UNCHANGING_P (mem)) continue; ! if (XEXP (mem, 0) == frame_pointer_rtx ! || (GET_CODE (XEXP (mem, 0)) == PLUS ! && XEXP (XEXP (mem, 0), 0) == frame_pointer_rtx ! && GET_CODE (XEXP (XEXP (mem, 0), 1)) == CONST_INT)) ! { ! #ifdef AUTO_INC_DEC ! /* Store a copy of mem, otherwise the address may be scrogged ! by find_auto_inc. This matters because insn_dead_p uses ! an rtx_equal_p check to determine if two addresses are ! the same. This works before find_auto_inc, but fails ! after find_auto_inc, causing discrepencies between the ! set of live registers calculated during the ! calculate_global_regs_live phase and what actually exists ! after flow completes, leading to aborts. */ ! if (flags & PROP_AUTOINC) ! mem = shallow_copy_rtx (mem); ! #endif ! pbi->mem_set_list = alloc_EXPR_LIST (0, mem, pbi->mem_set_list); ! if (++pbi->mem_set_list_len >= MAX_MEM_SET_LIST_LEN) ! break; ! } } } --- 1921,1947 ---- && bb->succ->dest == EXIT_BLOCK_PTR && ! current_function_calls_eh_return))) { ! rtx insn, set; for (insn = bb->end; insn != bb->head; insn = PREV_INSN (insn)) if (GET_CODE (insn) == INSN ! && (set = single_set (insn)) ! && GET_CODE (SET_DEST (set)) == MEM) { ! rtx mem = SET_DEST (set); ! rtx canon_mem = canon_rtx (mem); /* This optimization is performed by faking a store to the memory at the end of the block. This doesn't work for unchanging memories because multiple stores to unchanging memory is illegal and alias analysis doesn't consider it. */ ! if (RTX_UNCHANGING_P (canon_mem)) continue; ! if (XEXP (canon_mem, 0) == frame_pointer_rtx ! || (GET_CODE (XEXP (canon_mem, 0)) == PLUS ! && XEXP (XEXP (canon_mem, 0), 0) == frame_pointer_rtx ! && GET_CODE (XEXP (XEXP (canon_mem, 0), 1)) == CONST_INT)) ! add_to_mem_set_list (pbi, canon_mem); } } *************** free_propagate_block_info (pbi) *** 4035,4043 **** and cleared in COND_LOCAL_SET. It is valid for LOCAL_SET and COND_LOCAL_SET to be the same set. In this case, the resulting set will be equal to the union of the two sets that ! would otherwise be computed. */ ! void propagate_block (bb, live, local_set, cond_local_set, flags) basic_block bb; regset live; --- 1983,1993 ---- and cleared in COND_LOCAL_SET. It is valid for LOCAL_SET and COND_LOCAL_SET to be the same set. In this case, the resulting set will be equal to the union of the two sets that ! would otherwise be computed. ! Return non-zero if an INSN is deleted (i.e. by dead code removal). */ ! ! int propagate_block (bb, live, local_set, cond_local_set, flags) basic_block bb; regset live; *************** propagate_block (bb, live, local_set, co *** 4047,4058 **** { struct propagate_block_info *pbi; rtx insn, prev; pbi = init_propagate_block_info (bb, live, local_set, cond_local_set, flags); if (flags & PROP_REG_INFO) { ! register int i; /* Process the regs live at the end of the block. Mark them as not local to any one basic block. */ --- 1997,2009 ---- { struct propagate_block_info *pbi; rtx insn, prev; + int changed; pbi = init_propagate_block_info (bb, live, local_set, cond_local_set, flags); if (flags & PROP_REG_INFO) { ! int i; /* Process the regs live at the end of the block. Mark them as not local to any one basic block. */ *************** propagate_block (bb, live, local_set, co *** 4062,4083 **** /* Scan the block an insn at a time from end to beginning. */ for (insn = bb->end;; insn = prev) { /* If this is a call to `setjmp' et al, warn if any non-volatile datum is live. */ if ((flags & PROP_REG_INFO) ! && GET_CODE (insn) == NOTE ! && NOTE_LINE_NUMBER (insn) == NOTE_INSN_SETJMP) IOR_REG_SET (regs_live_at_setjmp, pbi->reg_live); prev = propagate_one_insn (pbi, insn); if (insn == bb->head) break; } free_propagate_block_info (pbi); } /* Return 1 if X (the body of an insn, or part of it) is just dead stores --- 2013,2038 ---- /* Scan the block an insn at a time from end to beginning. */ + changed = 0; for (insn = bb->end;; insn = prev) { /* If this is a call to `setjmp' et al, warn if any non-volatile datum is live. */ if ((flags & PROP_REG_INFO) ! && GET_CODE (insn) == CALL_INSN ! && find_reg_note (insn, REG_SETJMP, NULL)) IOR_REG_SET (regs_live_at_setjmp, pbi->reg_live); prev = propagate_one_insn (pbi, insn); + changed |= NEXT_INSN (prev) != insn; if (insn == bb->head) break; } free_propagate_block_info (pbi); + + return changed; } /* Return 1 if X (the body of an insn, or part of it) is just dead stores *************** insn_dead_p (pbi, x, call_ok, notes) *** 4099,4119 **** enum rtx_code code = GET_CODE (x); #ifdef AUTO_INC_DEC ! /* If flow is invoked after reload, we must take existing AUTO_INC ! expresions into account. */ ! if (reload_completed) { ! for (; notes; notes = XEXP (notes, 1)) { ! if (REG_NOTE_KIND (notes) == REG_INC) ! { ! int regno = REGNO (XEXP (notes, 0)); ! /* Don't delete insns to set global regs. */ ! if ((regno < FIRST_PSEUDO_REGISTER && global_regs[regno]) ! || REGNO_REG_SET_P (pbi->reg_live, regno)) ! return 0; ! } } } #endif --- 2054,2071 ---- enum rtx_code code = GET_CODE (x); #ifdef AUTO_INC_DEC ! /* As flow is invoked after combine, we must take existing AUTO_INC ! expressions into account. */ ! for (; notes; notes = XEXP (notes, 1)) { ! if (REG_NOTE_KIND (notes) == REG_INC) { ! int regno = REGNO (XEXP (notes, 0)); ! /* Don't delete insns to set global regs. */ ! if ((regno < FIRST_PSEUDO_REGISTER && global_regs[regno]) ! || REGNO_REG_SET_P (pbi->reg_live, regno)) ! return 0; } } #endif *************** insn_dead_p (pbi, x, call_ok, notes) *** 4143,4166 **** if (GET_CODE (r) == MEM) { ! rtx temp; ! if (MEM_VOLATILE_P (r)) return 0; /* Walk the set of memory locations we are currently tracking and see if one is an identical match to this memory location. If so, this memory write is dead (remember, we're walking backwards from the end of the block to the start). Since rtx_equal_p does not check the alias set or flags, we also ! must have the potential for them to conflict (anti_dependence). */ for (temp = pbi->mem_set_list; temp != 0; temp = XEXP (temp, 1)) if (anti_dependence (r, XEXP (temp, 0))) { rtx mem = XEXP (temp, 0); ! if (rtx_equal_p (mem, r)) return 1; #ifdef AUTO_INC_DEC /* Check if memory reference matches an auto increment. Only post increment/decrement or modify are valid. */ --- 2095,2123 ---- if (GET_CODE (r) == MEM) { ! rtx temp, canon_r; ! if (MEM_VOLATILE_P (r) || GET_MODE (r) == BLKmode) return 0; + canon_r = canon_rtx (r); + /* Walk the set of memory locations we are currently tracking and see if one is an identical match to this memory location. If so, this memory write is dead (remember, we're walking backwards from the end of the block to the start). Since rtx_equal_p does not check the alias set or flags, we also ! must have the potential for them to conflict (anti_dependence). */ for (temp = pbi->mem_set_list; temp != 0; temp = XEXP (temp, 1)) if (anti_dependence (r, XEXP (temp, 0))) { rtx mem = XEXP (temp, 0); ! if (rtx_equal_p (XEXP (canon_r, 0), XEXP (mem, 0)) ! && (GET_MODE_SIZE (GET_MODE (canon_r)) ! <= GET_MODE_SIZE (GET_MODE (mem)))) return 1; + #ifdef AUTO_INC_DEC /* Check if memory reference matches an auto increment. Only post increment/decrement or modify are valid. */ *************** libcall_dead_p (pbi, note, insn) *** 4290,4301 **** if (x) { ! register rtx r = SET_SRC (x); if (GET_CODE (r) == REG) { rtx call = XEXP (note, 0); rtx call_pat; ! register int i; /* Find the call insn. */ while (call != insn && GET_CODE (call) != CALL_INSN) --- 2247,2259 ---- if (x) { ! rtx r = SET_SRC (x); ! if (GET_CODE (r) == REG) { rtx call = XEXP (note, 0); rtx call_pat; ! int i; /* Find the call insn. */ while (call != insn && GET_CODE (call) != CALL_INSN) *************** libcall_dead_p (pbi, note, insn) *** 4338,4344 **** int regno_uninitialized (regno) ! int regno; { if (n_basic_blocks == 0 || (regno < FIRST_PSEUDO_REGISTER --- 2296,2302 ---- int regno_uninitialized (regno) ! unsigned int regno; { if (n_basic_blocks == 0 || (regno < FIRST_PSEUDO_REGISTER *************** regno_clobbered_at_setjmp (regno) *** 4366,4371 **** --- 2324,2376 ---- && REGNO_REG_SET_P (regs_live_at_setjmp, regno)); } + /* Add MEM to PBI->MEM_SET_LIST. MEM should be canonical. Respect the + maximal list size; look for overlaps in mode and select the largest. */ + static void + add_to_mem_set_list (pbi, mem) + struct propagate_block_info *pbi; + rtx mem; + { + rtx i; + + /* We don't know how large a BLKmode store is, so we must not + take them into consideration. */ + if (GET_MODE (mem) == BLKmode) + return; + + for (i = pbi->mem_set_list; i ; i = XEXP (i, 1)) + { + rtx e = XEXP (i, 0); + if (rtx_equal_p (XEXP (mem, 0), XEXP (e, 0))) + { + if (GET_MODE_SIZE (GET_MODE (mem)) > GET_MODE_SIZE (GET_MODE (e))) + { + #ifdef AUTO_INC_DEC + /* If we must store a copy of the mem, we can just modify + the mode of the stored copy. */ + if (pbi->flags & PROP_AUTOINC) + PUT_MODE (e, GET_MODE (mem)); + else + #endif + XEXP (i, 0) = mem; + } + return; + } + } + + if (pbi->mem_set_list_len < MAX_MEM_SET_LIST_LEN) + { + #ifdef AUTO_INC_DEC + /* Store a copy of mem, otherwise the address may be + scrogged by find_auto_inc. */ + if (pbi->flags & PROP_AUTOINC) + mem = shallow_copy_rtx (mem); + #endif + pbi->mem_set_list = alloc_EXPR_LIST (0, mem, pbi->mem_set_list); + pbi->mem_set_list_len++; + } + } + /* INSN references memory, possibly using autoincrement addressing modes. Find any entries on the mem_set_list that need to be invalidated due to an address change. */ *************** invalidate_mems_from_autoinc (pbi, insn) *** 4377,4412 **** { rtx note = REG_NOTES (insn); for (note = REG_NOTES (insn); note; note = XEXP (note, 1)) ! { ! if (REG_NOTE_KIND (note) == REG_INC) ! { ! rtx temp = pbi->mem_set_list; ! rtx prev = NULL_RTX; ! rtx next; ! ! while (temp) ! { ! next = XEXP (temp, 1); ! if (reg_overlap_mentioned_p (XEXP (note, 0), XEXP (temp, 0))) ! { ! /* Splice temp out of list. */ ! if (prev) ! XEXP (prev, 1) = next; ! else ! pbi->mem_set_list = next; ! free_EXPR_LIST_node (temp); ! pbi->mem_set_list_len--; ! } ! else ! prev = temp; ! temp = next; ! } ! } ! } } ! /* EXP is either a MEM or a REG. Remove any dependant entries ! from pbi->mem_set_list. */ static void invalidate_mems_from_set (pbi, exp) --- 2382,2392 ---- { rtx note = REG_NOTES (insn); for (note = REG_NOTES (insn); note; note = XEXP (note, 1)) ! if (REG_NOTE_KIND (note) == REG_INC) ! invalidate_mems_from_set (pbi, XEXP (note, 0)); } ! /* EXP is a REG. Remove any dependent entries from pbi->mem_set_list. */ static void invalidate_mems_from_set (pbi, exp) *************** invalidate_mems_from_set (pbi, exp) *** 4420,4429 **** while (temp) { next = XEXP (temp, 1); ! if ((GET_CODE (exp) == MEM ! && output_dependence (XEXP (temp, 0), exp)) ! || (GET_CODE (exp) == REG ! && reg_overlap_mentioned_p (exp, XEXP (temp, 0)))) { /* Splice this entry out of the list. */ if (prev) --- 2400,2406 ---- while (temp) { next = XEXP (temp, 1); ! if (reg_overlap_mentioned_p (exp, XEXP (temp, 0))) { /* Splice this entry out of the list. */ if (prev) *************** mark_set_regs (pbi, x, insn) *** 4479,4485 **** case PARALLEL: { ! register int i; for (i = XVECLEN (x, 0) - 1; i >= 0; i--) { rtx sub = XVECEXP (x, 0, i); --- 2456,2463 ---- case PARALLEL: { ! int i; ! for (i = XVECLEN (x, 0) - 1; i >= 0; i--) { rtx sub = XVECEXP (x, 0, i); *************** mark_set_regs (pbi, x, insn) *** 4512,4518 **** } } ! /* Process a single SET rtx, X. */ static void mark_set_1 (pbi, code, reg, cond, insn, flags) --- 2490,2500 ---- } } ! /* Process a single set, which appears in INSN. REG (which may not ! actually be a REG, it may also be a SUBREG, PARALLEL, etc.) is ! being set using the CODE (which may be SET, CLOBBER, or COND_EXEC). ! If the set is conditional (because it appear in a COND_EXEC), COND ! will be the condition. */ static void mark_set_1 (pbi, code, reg, cond, insn, flags) *************** mark_set_1 (pbi, code, reg, cond, insn, *** 4574,4585 **** regno_last = regno_first = REGNO (SUBREG_REG (reg)); if (regno_first < FIRST_PSEUDO_REGISTER) { ! #ifdef ALTER_HARD_SUBREG ! regno_first = ALTER_HARD_SUBREG (outer_mode, SUBREG_WORD (reg), ! inner_mode, regno_first); ! #else ! regno_first += SUBREG_WORD (reg); ! #endif regno_last = (regno_first + HARD_REGNO_NREGS (regno_first, outer_mode) - 1); --- 2556,2564 ---- regno_last = regno_first = REGNO (SUBREG_REG (reg)); if (regno_first < FIRST_PSEUDO_REGISTER) { ! regno_first += subreg_regno_offset (regno_first, inner_mode, ! SUBREG_BYTE (reg), ! outer_mode); regno_last = (regno_first + HARD_REGNO_NREGS (regno_first, outer_mode) - 1); *************** mark_set_1 (pbi, code, reg, cond, insn, *** 4619,4625 **** If this set is a REG, then it kills any MEMs which use the reg. */ if (optimize && (flags & PROP_SCAN_DEAD_CODE)) { ! if (GET_CODE (reg) == MEM || GET_CODE (reg) == REG) invalidate_mems_from_set (pbi, reg); /* If the memory reference had embedded side effects (autoincrement --- 2598,2604 ---- If this set is a REG, then it kills any MEMs which use the reg. */ if (optimize && (flags & PROP_SCAN_DEAD_CODE)) { ! if (GET_CODE (reg) == REG) invalidate_mems_from_set (pbi, reg); /* If the memory reference had embedded side effects (autoincrement *************** mark_set_1 (pbi, code, reg, cond, insn, *** 4628,4654 **** if (insn && GET_CODE (reg) == MEM) invalidate_mems_from_autoinc (pbi, insn); ! if (pbi->mem_set_list_len < MAX_MEM_SET_LIST_LEN ! && GET_CODE (reg) == MEM && ! side_effects_p (reg) /* ??? With more effort we could track conditional memory life. */ && ! cond - /* We do not know the size of a BLKmode store, so we do not track - them for redundant store elimination. */ - && GET_MODE (reg) != BLKmode /* There are no REG_INC notes for SP, so we can't assume we'll see everything that invalidates it. To be safe, don't eliminate any stores though SP; none of them should be redundant anyway. */ && ! reg_mentioned_p (stack_pointer_rtx, reg)) ! { ! #ifdef AUTO_INC_DEC ! /* Store a copy of mem, otherwise the address may be ! scrogged by find_auto_inc. */ ! if (flags & PROP_AUTOINC) ! reg = shallow_copy_rtx (reg); ! #endif ! pbi->mem_set_list = alloc_EXPR_LIST (0, reg, pbi->mem_set_list); ! pbi->mem_set_list_len++; ! } } if (GET_CODE (reg) == REG --- 2607,2620 ---- if (insn && GET_CODE (reg) == MEM) invalidate_mems_from_autoinc (pbi, insn); ! if (GET_CODE (reg) == MEM && ! side_effects_p (reg) /* ??? With more effort we could track conditional memory life. */ && ! cond /* There are no REG_INC notes for SP, so we can't assume we'll see everything that invalidates it. To be safe, don't eliminate any stores though SP; none of them should be redundant anyway. */ && ! reg_mentioned_p (stack_pointer_rtx, reg)) ! add_to_mem_set_list (pbi, canon_rtx (reg)); } if (GET_CODE (reg) == REG *************** mark_set_1 (pbi, code, reg, cond, insn, *** 4706,4713 **** if (flags & (PROP_LOG_LINKS | PROP_REG_INFO | PROP_DEATH_NOTES | PROP_AUTOINC)) { ! register rtx y; ! register int blocknum = pbi->bb->index; y = NULL_RTX; if (flags & (PROP_LOG_LINKS | PROP_AUTOINC)) --- 2672,2679 ---- if (flags & (PROP_LOG_LINKS | PROP_REG_INFO | PROP_DEATH_NOTES | PROP_AUTOINC)) { ! rtx y; ! int blocknum = pbi->bb->index; y = NULL_RTX; if (flags & (PROP_LOG_LINKS | PROP_AUTOINC)) *************** mark_set_1 (pbi, code, reg, cond, insn, *** 4726,4733 **** /* Count (weighted) references, stores, etc. This counts a register twice if it is modified, but that is correct. */ REG_N_SETS (i) += 1; ! REG_N_REFS (i) += (optimize_size ? 1 ! : pbi->bb->loop_depth + 1); /* The insns where a reg is live are normally counted elsewhere, but we want the count to include the insn --- 2692,2699 ---- /* Count (weighted) references, stores, etc. This counts a register twice if it is modified, but that is correct. */ REG_N_SETS (i) += 1; ! REG_N_REFS (i) += 1; ! REG_FREQ (i) += REG_FREQ_FROM_BB (pbi->bb); /* The insns where a reg is live are normally counted elsewhere, but we want the count to include the insn *************** mark_regno_cond_dead (pbi, regno, cond) *** 4885,4891 **** SET_REGNO_REG_SET (pbi->reg_cond_reg, REGNO (XEXP (cond, 0))); ! /* Not unconditionaly dead. */ return 0; } else --- 2851,2857 ---- SET_REGNO_REG_SET (pbi->reg_cond_reg, REGNO (XEXP (cond, 0))); ! /* Not unconditionally dead. */ return 0; } else *************** mark_regno_cond_dead (pbi, regno, cond) *** 4917,4923 **** SET_REGNO_REG_SET (pbi->reg_cond_reg, REGNO (XEXP (cond, 0))); ! /* Not unconditionaly dead. */ return 0; } } --- 2883,2889 ---- SET_REGNO_REG_SET (pbi->reg_cond_reg, REGNO (XEXP (cond, 0))); ! /* Not unconditionally dead. */ return 0; } } *************** flush_reg_cond_reg (pbi, regno) *** 4992,4998 **** For ior/and, the ADD flag determines whether we want to add the new condition X to the old one unconditionally. If it is zero, we will only return a new expression if X allows us to simplify part of ! OLD, otherwise we return OLD unchanged to the caller. If ADD is nonzero, we will return a new condition in all cases. The toplevel caller of one of these functions should always pass 1 for ADD. */ --- 2958,2964 ---- For ior/and, the ADD flag determines whether we want to add the new condition X to the old one unconditionally. If it is zero, we will only return a new expression if X allows us to simplify part of ! OLD, otherwise we return NULL to the caller. If ADD is nonzero, we will return a new condition in all cases. The toplevel caller of one of these functions should always pass 1 for ADD. */ *************** ior_reg_cond (old, x, add) *** 5007,5020 **** if (GET_RTX_CLASS (GET_CODE (old)) == '<') { if (GET_RTX_CLASS (GET_CODE (x)) == '<' ! && GET_CODE (x) == reverse_condition (GET_CODE (old)) && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0))) return const1_rtx; if (GET_CODE (x) == GET_CODE (old) && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0))) return old; if (! add) ! return old; return gen_rtx_IOR (0, old, x); } --- 2973,2986 ---- if (GET_RTX_CLASS (GET_CODE (old)) == '<') { if (GET_RTX_CLASS (GET_CODE (x)) == '<' ! && REVERSE_CONDEXEC_PREDICATES_P (GET_CODE (x), GET_CODE (old)) && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0))) return const1_rtx; if (GET_CODE (x) == GET_CODE (old) && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0))) return old; if (! add) ! return NULL; return gen_rtx_IOR (0, old, x); } *************** ior_reg_cond (old, x, add) *** 5023,5073 **** case IOR: op0 = ior_reg_cond (XEXP (old, 0), x, 0); op1 = ior_reg_cond (XEXP (old, 1), x, 0); ! if (op0 != XEXP (old, 0) || op1 != XEXP (old, 1)) { if (op0 == const0_rtx) ! return op1; if (op1 == const0_rtx) ! return op0; if (op0 == const1_rtx || op1 == const1_rtx) return const1_rtx; ! if (op0 == XEXP (old, 0)) ! op0 = gen_rtx_IOR (0, op0, x); ! else ! op1 = gen_rtx_IOR (0, op1, x); return gen_rtx_IOR (0, op0, op1); } if (! add) ! return old; return gen_rtx_IOR (0, old, x); case AND: op0 = ior_reg_cond (XEXP (old, 0), x, 0); op1 = ior_reg_cond (XEXP (old, 1), x, 0); ! if (op0 != XEXP (old, 0) || op1 != XEXP (old, 1)) { if (op0 == const1_rtx) ! return op1; if (op1 == const1_rtx) ! return op0; if (op0 == const0_rtx || op1 == const0_rtx) return const0_rtx; ! if (op0 == XEXP (old, 0)) ! op0 = gen_rtx_IOR (0, op0, x); ! else ! op1 = gen_rtx_IOR (0, op1, x); return gen_rtx_AND (0, op0, op1); } if (! add) ! return old; return gen_rtx_IOR (0, old, x); case NOT: op0 = and_reg_cond (XEXP (old, 0), not_reg_cond (x), 0); ! if (op0 != XEXP (old, 0)) return not_reg_cond (op0); if (! add) ! return old; return gen_rtx_IOR (0, old, x); default: --- 2989,3051 ---- case IOR: op0 = ior_reg_cond (XEXP (old, 0), x, 0); op1 = ior_reg_cond (XEXP (old, 1), x, 0); ! if (op0 != NULL || op1 != NULL) { if (op0 == const0_rtx) ! return op1 ? op1 : gen_rtx_IOR (0, XEXP (old, 1), x); if (op1 == const0_rtx) ! return op0 ? op0 : gen_rtx_IOR (0, XEXP (old, 0), x); if (op0 == const1_rtx || op1 == const1_rtx) return const1_rtx; ! if (op0 == NULL) ! op0 = gen_rtx_IOR (0, XEXP (old, 0), x); ! else if (rtx_equal_p (x, op0)) ! /* (x | A) | x ~ (x | A). */ ! return old; ! if (op1 == NULL) ! op1 = gen_rtx_IOR (0, XEXP (old, 1), x); ! else if (rtx_equal_p (x, op1)) ! /* (A | x) | x ~ (A | x). */ ! return old; return gen_rtx_IOR (0, op0, op1); } if (! add) ! return NULL; return gen_rtx_IOR (0, old, x); case AND: op0 = ior_reg_cond (XEXP (old, 0), x, 0); op1 = ior_reg_cond (XEXP (old, 1), x, 0); ! if (op0 != NULL || op1 != NULL) { if (op0 == const1_rtx) ! return op1 ? op1 : gen_rtx_IOR (0, XEXP (old, 1), x); if (op1 == const1_rtx) ! return op0 ? op0 : gen_rtx_IOR (0, XEXP (old, 0), x); if (op0 == const0_rtx || op1 == const0_rtx) return const0_rtx; ! if (op0 == NULL) ! op0 = gen_rtx_IOR (0, XEXP (old, 0), x); ! else if (rtx_equal_p (x, op0)) ! /* (x & A) | x ~ x. */ ! return op0; ! if (op1 == NULL) ! op1 = gen_rtx_IOR (0, XEXP (old, 1), x); ! else if (rtx_equal_p (x, op1)) ! /* (A & x) | x ~ x. */ ! return op1; return gen_rtx_AND (0, op0, op1); } if (! add) ! return NULL; return gen_rtx_IOR (0, old, x); case NOT: op0 = and_reg_cond (XEXP (old, 0), not_reg_cond (x), 0); ! if (op0 != NULL) return not_reg_cond (op0); if (! add) ! return NULL; return gen_rtx_IOR (0, old, x); default: *************** and_reg_cond (old, x, add) *** 5117,5123 **** && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0))) return old; if (! add) ! return old; return gen_rtx_AND (0, old, x); } --- 3095,3101 ---- && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0))) return old; if (! add) ! return NULL; return gen_rtx_AND (0, old, x); } *************** and_reg_cond (old, x, add) *** 5126,5187 **** case IOR: op0 = and_reg_cond (XEXP (old, 0), x, 0); op1 = and_reg_cond (XEXP (old, 1), x, 0); ! if (op0 != XEXP (old, 0) || op1 != XEXP (old, 1)) { if (op0 == const0_rtx) ! return op1; if (op1 == const0_rtx) ! return op0; if (op0 == const1_rtx || op1 == const1_rtx) return const1_rtx; ! if (op0 == XEXP (old, 0)) ! op0 = gen_rtx_AND (0, op0, x); ! else ! op1 = gen_rtx_AND (0, op1, x); return gen_rtx_IOR (0, op0, op1); } if (! add) ! return old; return gen_rtx_AND (0, old, x); case AND: op0 = and_reg_cond (XEXP (old, 0), x, 0); op1 = and_reg_cond (XEXP (old, 1), x, 0); ! if (op0 != XEXP (old, 0) || op1 != XEXP (old, 1)) { if (op0 == const1_rtx) ! return op1; if (op1 == const1_rtx) ! return op0; if (op0 == const0_rtx || op1 == const0_rtx) return const0_rtx; ! if (op0 == XEXP (old, 0)) ! op0 = gen_rtx_AND (0, op0, x); ! else ! op1 = gen_rtx_AND (0, op1, x); return gen_rtx_AND (0, op0, op1); } if (! add) ! return old; ! ! /* If X is identical to one of the existing terms of the AND, ! then just return what we already have. */ ! /* ??? There really should be some sort of recursive check here in ! case there are nested ANDs. */ ! if ((GET_CODE (XEXP (old, 0)) == GET_CODE (x) ! && REGNO (XEXP (XEXP (old, 0), 0)) == REGNO (XEXP (x, 0))) ! || (GET_CODE (XEXP (old, 1)) == GET_CODE (x) ! && REGNO (XEXP (XEXP (old, 1), 0)) == REGNO (XEXP (x, 0)))) ! return old; ! return gen_rtx_AND (0, old, x); case NOT: op0 = ior_reg_cond (XEXP (old, 0), not_reg_cond (x), 0); ! if (op0 != XEXP (old, 0)) return not_reg_cond (op0); if (! add) ! return old; return gen_rtx_AND (0, old, x); default: --- 3104,3166 ---- case IOR: op0 = and_reg_cond (XEXP (old, 0), x, 0); op1 = and_reg_cond (XEXP (old, 1), x, 0); ! if (op0 != NULL || op1 != NULL) { if (op0 == const0_rtx) ! return op1 ? op1 : gen_rtx_AND (0, XEXP (old, 1), x); if (op1 == const0_rtx) ! return op0 ? op0 : gen_rtx_AND (0, XEXP (old, 0), x); if (op0 == const1_rtx || op1 == const1_rtx) return const1_rtx; ! if (op0 == NULL) ! op0 = gen_rtx_AND (0, XEXP (old, 0), x); ! else if (rtx_equal_p (x, op0)) ! /* (x | A) & x ~ x. */ ! return op0; ! if (op1 == NULL) ! op1 = gen_rtx_AND (0, XEXP (old, 1), x); ! else if (rtx_equal_p (x, op1)) ! /* (A | x) & x ~ x. */ ! return op1; return gen_rtx_IOR (0, op0, op1); } if (! add) ! return NULL; return gen_rtx_AND (0, old, x); case AND: op0 = and_reg_cond (XEXP (old, 0), x, 0); op1 = and_reg_cond (XEXP (old, 1), x, 0); ! if (op0 != NULL || op1 != NULL) { if (op0 == const1_rtx) ! return op1 ? op1 : gen_rtx_AND (0, XEXP (old, 1), x); if (op1 == const1_rtx) ! return op0 ? op0 : gen_rtx_AND (0, XEXP (old, 0), x); if (op0 == const0_rtx || op1 == const0_rtx) return const0_rtx; ! if (op0 == NULL) ! op0 = gen_rtx_AND (0, XEXP (old, 0), x); ! else if (rtx_equal_p (x, op0)) ! /* (x & A) & x ~ (x & A). */ ! return old; ! if (op1 == NULL) ! op1 = gen_rtx_AND (0, XEXP (old, 1), x); ! else if (rtx_equal_p (x, op1)) ! /* (A & x) & x ~ (A & x). */ ! return old; return gen_rtx_AND (0, op0, op1); } if (! add) ! return NULL; return gen_rtx_AND (0, old, x); case NOT: op0 = ior_reg_cond (XEXP (old, 0), not_reg_cond (x), 0); ! if (op0 != NULL) return not_reg_cond (op0); if (! add) ! return NULL; return gen_rtx_AND (0, old, x); default: *************** attempt_auto_inc (pbi, inc, insn, mem, i *** 5307,5316 **** insns = get_insns (); end_sequence (); - if (basic_block_for_insn) - for (temp = insns; temp; temp = NEXT_INSN (temp)) - set_block_for_insn (temp, pbi->bb); - /* If we can't make the auto-inc, or can't make the replacement into Y, exit. There's no point in making the change below if we can't do the auto-inc and doing --- 3286,3291 ---- *************** attempt_auto_inc (pbi, inc, insn, mem, i *** 5397,5403 **** /* Count an extra reference to the reg. When a reg is incremented, spilling it is worse, so we want to make that less likely. */ ! REG_N_REFS (regno) += (optimize_size ? 1 : pbi->bb->loop_depth + 1); /* Count the increment as a setting of the register, even though it isn't a SET in rtl. */ --- 3372,3378 ---- /* Count an extra reference to the reg. When a reg is incremented, spilling it is worse, so we want to make that less likely. */ ! REG_FREQ (regno) += REG_FREQ_FROM_BB (pbi->bb); /* Count the increment as a setting of the register, even though it isn't a SET in rtl. */ *************** mark_used_reg (pbi, reg, cond, insn) *** 5555,5569 **** { /* Keep track of which basic block each reg appears in. */ ! register int blocknum = pbi->bb->index; if (REG_BASIC_BLOCK (regno_first) == REG_BLOCK_UNKNOWN) REG_BASIC_BLOCK (regno_first) = blocknum; else if (REG_BASIC_BLOCK (regno_first) != blocknum) REG_BASIC_BLOCK (regno_first) = REG_BLOCK_GLOBAL; /* Count (weighted) number of uses of each reg. */ ! REG_N_REFS (regno_first) ! += (optimize_size ? 1 : pbi->bb->loop_depth + 1); } } --- 3530,3544 ---- { /* Keep track of which basic block each reg appears in. */ ! int blocknum = pbi->bb->index; if (REG_BASIC_BLOCK (regno_first) == REG_BLOCK_UNKNOWN) REG_BASIC_BLOCK (regno_first) = blocknum; else if (REG_BASIC_BLOCK (regno_first) != blocknum) REG_BASIC_BLOCK (regno_first) = REG_BLOCK_GLOBAL; /* Count (weighted) number of uses of each reg. */ ! REG_FREQ (regno_first) += REG_FREQ_FROM_BB (pbi->bb); ! REG_N_REFS (regno_first)++; } } *************** mark_used_reg (pbi, reg, cond, insn) *** 5610,5615 **** --- 3585,3594 ---- /* Mark the register as being live. */ for (i = regno_first; i <= regno_last; ++i) { + #ifdef HAVE_conditional_execution + int this_was_live = REGNO_REG_SET_P (pbi->reg_live, i); + #endif + SET_REGNO_REG_SET (pbi->reg_live, i); #ifdef HAVE_conditional_execution *************** mark_used_reg (pbi, reg, cond, insn) *** 5621,5627 **** struct reg_cond_life_info *rcli; rtx ncond; ! if (some_was_live) { node = splay_tree_lookup (pbi->reg_cond_dead, i); if (node == NULL) --- 3600,3606 ---- struct reg_cond_life_info *rcli; rtx ncond; ! if (this_was_live) { node = splay_tree_lookup (pbi->reg_cond_dead, i); if (node == NULL) *************** mark_used_reg (pbi, reg, cond, insn) *** 5663,5669 **** SET_REGNO_REG_SET (pbi->reg_cond_reg, REGNO (XEXP (cond, 0))); } } ! else if (some_was_live) { /* The register may have been conditionally live previously, but is now unconditionally live. Remove it from the conditionally --- 3642,3648 ---- SET_REGNO_REG_SET (pbi->reg_cond_reg, REGNO (XEXP (cond, 0))); } } ! else if (this_was_live) { /* The register may have been conditionally live previously, but is now unconditionally live. Remove it from the conditionally *************** mark_used_regs (pbi, x, cond, insn) *** 5687,5697 **** struct propagate_block_info *pbi; rtx x, cond, insn; { ! register RTX_CODE code; ! register int regno; int flags = pbi->flags; retry: code = GET_CODE (x); switch (code) { --- 3666,3678 ---- struct propagate_block_info *pbi; rtx x, cond, insn; { ! RTX_CODE code; ! int regno; int flags = pbi->flags; retry: + if (!x) + return; code = GET_CODE (x); switch (code) { *************** mark_used_regs (pbi, x, cond, insn) *** 5700,5705 **** --- 3681,3687 ---- case CONST_INT: case CONST: case CONST_DOUBLE: + case CONST_VECTOR: case PC: case ADDR_VEC: case ADDR_DIFF_VEC: *************** mark_used_regs (pbi, x, cond, insn) *** 5789,5795 **** case SET: { ! register rtx testreg = SET_DEST (x); int mark_dest = 0; /* If storing into MEM, don't show it as being used. But do --- 3771,3777 ---- case SET: { ! rtx testreg = SET_DEST (x); int mark_dest = 0; /* If storing into MEM, don't show it as being used. But do *************** mark_used_regs (pbi, x, cond, insn) *** 5830,5836 **** does not use any of the old value. But these other ways of storing in a register do use the old value. */ if (GET_CODE (testreg) == SUBREG ! && !(REG_SIZE (SUBREG_REG (testreg)) > REG_SIZE (testreg))) ; else mark_dest = 1; --- 3812,3821 ---- does not use any of the old value. But these other ways of storing in a register do use the old value. */ if (GET_CODE (testreg) == SUBREG ! && !((REG_BYTES (SUBREG_REG (testreg)) ! + UNITS_PER_WORD - 1) / UNITS_PER_WORD ! > (REG_BYTES (testreg) ! + UNITS_PER_WORD - 1) / UNITS_PER_WORD)) ; else mark_dest = 1; *************** mark_used_regs (pbi, x, cond, insn) *** 5928,5935 **** /* Recursively scan the operands of this expression. */ { ! register const char *fmt = GET_RTX_FORMAT (code); ! register int i; for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) { --- 3913,3920 ---- /* Recursively scan the operands of this expression. */ { ! const char * const fmt = GET_RTX_FORMAT (code); ! int i; for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) { *************** mark_used_regs (pbi, x, cond, insn) *** 5945,5951 **** } else if (fmt[i] == 'E') { ! register int j; for (j = 0; j < XVECLEN (x, i); j++) mark_used_regs (pbi, XVECEXP (x, i, j), cond, insn); } --- 3930,3936 ---- } else if (fmt[i] == 'E') { ! int j; for (j = 0; j < XVECLEN (x, i); j++) mark_used_regs (pbi, XVECEXP (x, i, j), cond, insn); } *************** try_pre_increment_1 (pbi, insn) *** 5984,5991 **** so we want to make that less likely. */ if (regno >= FIRST_PSEUDO_REGISTER) { ! REG_N_REFS (regno) += (optimize_size ? 1 ! : pbi->bb->loop_depth + 1); REG_N_SETS (regno)++; } --- 3969,3975 ---- so we want to make that less likely. */ if (regno >= FIRST_PSEUDO_REGISTER) { ! REG_FREQ (regno) += REG_FREQ_FROM_BB (pbi->bb); REG_N_SETS (regno)++; } *************** try_pre_increment (insn, reg, amount) *** 6009,6015 **** rtx insn, reg; HOST_WIDE_INT amount; { ! register rtx use; /* Nonzero if we can try to make a pre-increment or pre-decrement. For example, addl $4,r1; movl (r1),... can become movl +(r1),... */ --- 3993,3999 ---- rtx insn, reg; HOST_WIDE_INT amount; { ! rtx use; /* Nonzero if we can try to make a pre-increment or pre-decrement. For example, addl $4,r1; movl (r1),... can become movl +(r1),... */ *************** try_pre_increment (insn, reg, amount) *** 6048,6060 **** use = 0; if (pre_ok) use = find_use_as_address (PATTERN (insn), reg, 0); ! if (post_ok && (use == 0 || use == (rtx) 1)) { use = find_use_as_address (PATTERN (insn), reg, -amount); do_post = 1; } ! if (use == 0 || use == (rtx) 1) return 0; if (GET_MODE_SIZE (GET_MODE (use)) != (amount > 0 ? amount : - amount)) --- 4032,4044 ---- use = 0; if (pre_ok) use = find_use_as_address (PATTERN (insn), reg, 0); ! if (post_ok && (use == 0 || use == (rtx) (size_t) 1)) { use = find_use_as_address (PATTERN (insn), reg, -amount); do_post = 1; } ! if (use == 0 || use == (rtx) (size_t) 1) return 0; if (GET_MODE_SIZE (GET_MODE (use)) != (amount > 0 ? amount : - amount)) *************** try_pre_increment (insn, reg, amount) *** 6082,6100 **** If such an address does not appear, return 0. If REG appears more than once, or is used other than in such an address, ! return (rtx)1. */ rtx find_use_as_address (x, reg, plusconst) ! register rtx x; rtx reg; HOST_WIDE_INT plusconst; { enum rtx_code code = GET_CODE (x); ! const char *fmt = GET_RTX_FORMAT (code); ! register int i; ! register rtx value = 0; ! register rtx tem; if (code == MEM && XEXP (x, 0) == reg && plusconst == 0) return x; --- 4066,4084 ---- If such an address does not appear, return 0. If REG appears more than once, or is used other than in such an address, ! return (rtx) 1. */ rtx find_use_as_address (x, reg, plusconst) ! rtx x; rtx reg; HOST_WIDE_INT plusconst; { enum rtx_code code = GET_CODE (x); ! const char * const fmt = GET_RTX_FORMAT (code); ! int i; ! rtx value = 0; ! rtx tem; if (code == MEM && XEXP (x, 0) == reg && plusconst == 0) return x; *************** find_use_as_address (x, reg, plusconst) *** 6110,6120 **** /* If REG occurs inside a MEM used in a bit-field reference, that is unacceptable. */ if (find_use_as_address (XEXP (x, 0), reg, 0) != 0) ! return (rtx) (HOST_WIDE_INT) 1; } if (x == reg) ! return (rtx) (HOST_WIDE_INT) 1; for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) { --- 4094,4104 ---- /* If REG occurs inside a MEM used in a bit-field reference, that is unacceptable. */ if (find_use_as_address (XEXP (x, 0), reg, 0) != 0) ! return (rtx) (size_t) 1; } if (x == reg) ! return (rtx) (size_t) 1; for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) { *************** find_use_as_address (x, reg, plusconst) *** 6124,6141 **** if (value == 0) value = tem; else if (tem != 0) ! return (rtx) (HOST_WIDE_INT) 1; } else if (fmt[i] == 'E') { ! register int j; for (j = XVECLEN (x, i) - 1; j >= 0; j--) { tem = find_use_as_address (XVECEXP (x, i, j), reg, plusconst); if (value == 0) value = tem; else if (tem != 0) ! return (rtx) (HOST_WIDE_INT) 1; } } } --- 4108,4125 ---- if (value == 0) value = tem; else if (tem != 0) ! return (rtx) (size_t) 1; } else if (fmt[i] == 'E') { ! int j; for (j = XVECLEN (x, i) - 1; j >= 0; j--) { tem = find_use_as_address (XVECEXP (x, i, j), reg, plusconst); if (value == 0) value = tem; else if (tem != 0) ! return (rtx) (size_t) 1; } } } *************** dump_regset (r, outf) *** 6167,6172 **** --- 4151,4160 ---- }); } + /* Print a human-reaable representation of R on the standard error + stream. This function is designed to be used from within the + debugger. */ + void debug_regset (r) regset r; *************** debug_regset (r) *** 6175,6463 **** putc ('\n', stderr); } - void - dump_flow_info (file) - FILE *file; - { - register int i; - static const char * const reg_class_names[] = REG_CLASS_NAMES; - - fprintf (file, "%d registers.\n", max_regno); - for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++) - if (REG_N_REFS (i)) - { - enum reg_class class, altclass; - fprintf (file, "\nRegister %d used %d times across %d insns", - i, REG_N_REFS (i), REG_LIVE_LENGTH (i)); - if (REG_BASIC_BLOCK (i) >= 0) - fprintf (file, " in block %d", REG_BASIC_BLOCK (i)); - if (REG_N_SETS (i)) - fprintf (file, "; set %d time%s", REG_N_SETS (i), - (REG_N_SETS (i) == 1) ? "" : "s"); - if (REG_USERVAR_P (regno_reg_rtx[i])) - fprintf (file, "; user var"); - if (REG_N_DEATHS (i) != 1) - fprintf (file, "; dies in %d places", REG_N_DEATHS (i)); - if (REG_N_CALLS_CROSSED (i) == 1) - fprintf (file, "; crosses 1 call"); - else if (REG_N_CALLS_CROSSED (i)) - fprintf (file, "; crosses %d calls", REG_N_CALLS_CROSSED (i)); - if (PSEUDO_REGNO_BYTES (i) != UNITS_PER_WORD) - fprintf (file, "; %d bytes", PSEUDO_REGNO_BYTES (i)); - class = reg_preferred_class (i); - altclass = reg_alternate_class (i); - if (class != GENERAL_REGS || altclass != ALL_REGS) - { - if (altclass == ALL_REGS || class == ALL_REGS) - fprintf (file, "; pref %s", reg_class_names[(int) class]); - else if (altclass == NO_REGS) - fprintf (file, "; %s or none", reg_class_names[(int) class]); - else - fprintf (file, "; pref %s, else %s", - reg_class_names[(int) class], - reg_class_names[(int) altclass]); - } - if (REG_POINTER (regno_reg_rtx[i])) - fprintf (file, "; pointer"); - fprintf (file, ".\n"); - } - - fprintf (file, "\n%d basic blocks, %d edges.\n", n_basic_blocks, n_edges); - for (i = 0; i < n_basic_blocks; i++) - { - register basic_block bb = BASIC_BLOCK (i); - register edge e; - - fprintf (file, "\nBasic block %d: first insn %d, last %d, loop_depth %d, count %d.\n", - i, INSN_UID (bb->head), INSN_UID (bb->end), bb->loop_depth, bb->count); - - fprintf (file, "Predecessors: "); - for (e = bb->pred; e; e = e->pred_next) - dump_edge_info (file, e, 0); - - fprintf (file, "\nSuccessors: "); - for (e = bb->succ; e; e = e->succ_next) - dump_edge_info (file, e, 1); - - fprintf (file, "\nRegisters live at start:"); - dump_regset (bb->global_live_at_start, file); - - fprintf (file, "\nRegisters live at end:"); - dump_regset (bb->global_live_at_end, file); - - putc ('\n', file); - } - - putc ('\n', file); - } - - void - debug_flow_info () - { - dump_flow_info (stderr); - } - - static void - dump_edge_info (file, e, do_succ) - FILE *file; - edge e; - int do_succ; - { - basic_block side = (do_succ ? e->dest : e->src); - - if (side == ENTRY_BLOCK_PTR) - fputs (" ENTRY", file); - else if (side == EXIT_BLOCK_PTR) - fputs (" EXIT", file); - else - fprintf (file, " %d", side->index); - - if (e->count) - fprintf (file, " count:%d", e->count); - - if (e->flags) - { - static const char * const bitnames[] = { - "fallthru", "crit", "ab", "abcall", "eh", "fake" - }; - int comma = 0; - int i, flags = e->flags; - - fputc (' ', file); - fputc ('(', file); - for (i = 0; flags; i++) - if (flags & (1 << i)) - { - flags &= ~(1 << i); - - if (comma) - fputc (',', file); - if (i < (int) ARRAY_SIZE (bitnames)) - fputs (bitnames[i], file); - else - fprintf (file, "%d", i); - comma = 1; - } - fputc (')', file); - } - } - - /* Print out one basic block with live information at start and end. */ - - void - dump_bb (bb, outf) - basic_block bb; - FILE *outf; - { - rtx insn; - rtx last; - edge e; - - fprintf (outf, ";; Basic block %d, loop depth %d, count %d", - bb->index, bb->loop_depth, bb->count); - putc ('\n', outf); - - fputs (";; Predecessors: ", outf); - for (e = bb->pred; e; e = e->pred_next) - dump_edge_info (outf, e, 0); - putc ('\n', outf); - - fputs (";; Registers live at start:", outf); - dump_regset (bb->global_live_at_start, outf); - putc ('\n', outf); - - for (insn = bb->head, last = NEXT_INSN (bb->end); - insn != last; - insn = NEXT_INSN (insn)) - print_rtl_single (outf, insn); - - fputs (";; Registers live at end:", outf); - dump_regset (bb->global_live_at_end, outf); - putc ('\n', outf); - - fputs (";; Successors: ", outf); - for (e = bb->succ; e; e = e->succ_next) - dump_edge_info (outf, e, 1); - putc ('\n', outf); - } - - void - debug_bb (bb) - basic_block bb; - { - dump_bb (bb, stderr); - } - - void - debug_bb_n (n) - int n; - { - dump_bb (BASIC_BLOCK (n), stderr); - } - - /* Like print_rtl, but also print out live information for the start of each - basic block. */ - - void - print_rtl_with_bb (outf, rtx_first) - FILE *outf; - rtx rtx_first; - { - register rtx tmp_rtx; - - if (rtx_first == 0) - fprintf (outf, "(nil)\n"); - else - { - int i; - enum bb_state { NOT_IN_BB, IN_ONE_BB, IN_MULTIPLE_BB }; - int max_uid = get_max_uid (); - basic_block *start = (basic_block *) - xcalloc (max_uid, sizeof (basic_block)); - basic_block *end = (basic_block *) - xcalloc (max_uid, sizeof (basic_block)); - enum bb_state *in_bb_p = (enum bb_state *) - xcalloc (max_uid, sizeof (enum bb_state)); - - for (i = n_basic_blocks - 1; i >= 0; i--) - { - basic_block bb = BASIC_BLOCK (i); - rtx x; - - start[INSN_UID (bb->head)] = bb; - end[INSN_UID (bb->end)] = bb; - for (x = bb->head; x != NULL_RTX; x = NEXT_INSN (x)) - { - enum bb_state state = IN_MULTIPLE_BB; - if (in_bb_p[INSN_UID (x)] == NOT_IN_BB) - state = IN_ONE_BB; - in_bb_p[INSN_UID (x)] = state; - - if (x == bb->end) - break; - } - } - - for (tmp_rtx = rtx_first; NULL != tmp_rtx; tmp_rtx = NEXT_INSN (tmp_rtx)) - { - int did_output; - basic_block bb; - - if ((bb = start[INSN_UID (tmp_rtx)]) != NULL) - { - fprintf (outf, ";; Start of basic block %d, registers live:", - bb->index); - dump_regset (bb->global_live_at_start, outf); - putc ('\n', outf); - } - - if (in_bb_p[INSN_UID (tmp_rtx)] == NOT_IN_BB - && GET_CODE (tmp_rtx) != NOTE - && GET_CODE (tmp_rtx) != BARRIER) - fprintf (outf, ";; Insn is not within a basic block\n"); - else if (in_bb_p[INSN_UID (tmp_rtx)] == IN_MULTIPLE_BB) - fprintf (outf, ";; Insn is in multiple basic blocks\n"); - - did_output = print_rtl_single (outf, tmp_rtx); - - if ((bb = end[INSN_UID (tmp_rtx)]) != NULL) - { - fprintf (outf, ";; End of basic block %d, registers live:\n", - bb->index); - dump_regset (bb->global_live_at_end, outf); - putc ('\n', outf); - } - - if (did_output) - putc ('\n', outf); - } - - free (start); - free (end); - free (in_bb_p); - } - - if (current_function_epilogue_delay_list != 0) - { - fprintf (outf, "\n;; Insns in epilogue delay list:\n\n"); - for (tmp_rtx = current_function_epilogue_delay_list; tmp_rtx != 0; - tmp_rtx = XEXP (tmp_rtx, 1)) - print_rtl_single (outf, XEXP (tmp_rtx, 0)); - } - } - - /* Dump the rtl into the current debugging dump file, then abort. */ - static void - print_rtl_and_abort () - { - if (rtl_dump_file) - { - print_rtl_with_bb (rtl_dump_file, get_insns ()); - fclose (rtl_dump_file); - } - abort (); - } - /* Recompute register set/reference counts immediately prior to register allocation. --- 4163,4168 ---- *************** count_or_remove_death_notes (blocks, kil *** 6557,8387 **** return count; } ! ! ! /* Update insns block within BB. */ ! ! void ! update_bb_for_insn (bb) ! basic_block bb; ! { ! rtx insn; ! ! if (! basic_block_for_insn) ! return; ! ! for (insn = bb->head; ; insn = NEXT_INSN (insn)) ! { ! set_block_for_insn (insn, bb); ! ! if (insn == bb->end) ! break; ! } ! } ! ! ! /* Record INSN's block as BB. */ ! ! void ! set_block_for_insn (insn, bb) ! rtx insn; ! basic_block bb; ! { ! size_t uid = INSN_UID (insn); ! if (uid >= basic_block_for_insn->num_elements) ! { ! int new_size; ! ! /* Add one-eighth the size so we don't keep calling xrealloc. */ ! new_size = uid + (uid + 7) / 8; ! ! VARRAY_GROW (basic_block_for_insn, new_size); ! } ! VARRAY_BB (basic_block_for_insn, uid) = bb; ! } ! ! /* Record INSN's block number as BB. */ ! /* ??? This has got to go. */ ! ! void ! set_block_num (insn, bb) ! rtx insn; ! int bb; ! { ! set_block_for_insn (insn, BASIC_BLOCK (bb)); ! } ! ! /* Verify the CFG consistency. This function check some CFG invariants and ! aborts when something is wrong. Hope that this function will help to ! convert many optimization passes to preserve CFG consistent. ! ! Currently it does following checks: ! ! - test head/end pointers ! - overlapping of basic blocks ! - edge list corectness ! - headers of basic blocks (the NOTE_INSN_BASIC_BLOCK note) ! - tails of basic blocks (ensure that boundary is necesary) ! - scans body of the basic block for JUMP_INSN, CODE_LABEL ! and NOTE_INSN_BASIC_BLOCK ! - check that all insns are in the basic blocks ! (except the switch handling code, barriers and notes) ! - check that all returns are followed by barriers ! ! In future it can be extended check a lot of other stuff as well ! (reachability of basic blocks, life information, etc. etc.). */ ! ! void ! verify_flow_info () ! { ! const int max_uid = get_max_uid (); ! const rtx rtx_first = get_insns (); ! rtx last_head = get_last_insn (); ! basic_block *bb_info; ! rtx x; ! int i, last_bb_num_seen, num_bb_notes, err = 0; ! ! bb_info = (basic_block *) xcalloc (max_uid, sizeof (basic_block)); ! ! for (i = n_basic_blocks - 1; i >= 0; i--) ! { ! basic_block bb = BASIC_BLOCK (i); ! rtx head = bb->head; ! rtx end = bb->end; ! ! /* Verify the end of the basic block is in the INSN chain. */ ! for (x = last_head; x != NULL_RTX; x = PREV_INSN (x)) ! if (x == end) ! break; ! if (!x) ! { ! error ("End insn %d for block %d not found in the insn stream.", ! INSN_UID (end), bb->index); ! err = 1; ! } ! ! /* Work backwards from the end to the head of the basic block ! to verify the head is in the RTL chain. */ ! for (; x != NULL_RTX; x = PREV_INSN (x)) ! { ! /* While walking over the insn chain, verify insns appear ! in only one basic block and initialize the BB_INFO array ! used by other passes. */ ! if (bb_info[INSN_UID (x)] != NULL) ! { ! error ("Insn %d is in multiple basic blocks (%d and %d)", ! INSN_UID (x), bb->index, bb_info[INSN_UID (x)]->index); ! err = 1; ! } ! bb_info[INSN_UID (x)] = bb; ! ! if (x == head) ! break; ! } ! if (!x) ! { ! error ("Head insn %d for block %d not found in the insn stream.", ! INSN_UID (head), bb->index); ! err = 1; ! } ! ! last_head = x; ! } ! ! /* Now check the basic blocks (boundaries etc.) */ ! for (i = n_basic_blocks - 1; i >= 0; i--) ! { ! basic_block bb = BASIC_BLOCK (i); ! /* Check corectness of edge lists */ ! edge e; ! ! e = bb->succ; ! while (e) ! { ! if (e->src != bb) ! { ! fprintf (stderr, ! "verify_flow_info: Basic block %d succ edge is corrupted\n", ! bb->index); ! fprintf (stderr, "Predecessor: "); ! dump_edge_info (stderr, e, 0); ! fprintf (stderr, "\nSuccessor: "); ! dump_edge_info (stderr, e, 1); ! fflush (stderr); ! err = 1; ! } ! if (e->dest != EXIT_BLOCK_PTR) ! { ! edge e2 = e->dest->pred; ! while (e2 && e2 != e) ! e2 = e2->pred_next; ! if (!e2) ! { ! error ("Basic block %i edge lists are corrupted", bb->index); ! err = 1; ! } ! } ! e = e->succ_next; ! } ! ! e = bb->pred; ! while (e) ! { ! if (e->dest != bb) ! { ! error ("Basic block %d pred edge is corrupted", bb->index); ! fputs ("Predecessor: ", stderr); ! dump_edge_info (stderr, e, 0); ! fputs ("\nSuccessor: ", stderr); ! dump_edge_info (stderr, e, 1); ! fputc ('\n', stderr); ! err = 1; ! } ! if (e->src != ENTRY_BLOCK_PTR) ! { ! edge e2 = e->src->succ; ! while (e2 && e2 != e) ! e2 = e2->succ_next; ! if (!e2) ! { ! error ("Basic block %i edge lists are corrupted", bb->index); ! err = 1; ! } ! } ! e = e->pred_next; ! } ! ! /* OK pointers are correct. Now check the header of basic ! block. It ought to contain optional CODE_LABEL followed ! by NOTE_BASIC_BLOCK. */ ! x = bb->head; ! if (GET_CODE (x) == CODE_LABEL) ! { ! if (bb->end == x) ! { ! error ("NOTE_INSN_BASIC_BLOCK is missing for block %d", ! bb->index); ! err = 1; ! } ! x = NEXT_INSN (x); ! } ! if (!NOTE_INSN_BASIC_BLOCK_P (x) || NOTE_BASIC_BLOCK (x) != bb) ! { ! error ("NOTE_INSN_BASIC_BLOCK is missing for block %d\n", ! bb->index); ! err = 1; ! } ! ! if (bb->end == x) ! { ! /* Do checks for empty blocks here */ ! } ! else ! { ! x = NEXT_INSN (x); ! while (x) ! { ! if (NOTE_INSN_BASIC_BLOCK_P (x)) ! { ! error ("NOTE_INSN_BASIC_BLOCK %d in the middle of basic block %d", ! INSN_UID (x), bb->index); ! err = 1; ! } ! ! if (x == bb->end) ! break; ! ! if (GET_CODE (x) == JUMP_INSN ! || GET_CODE (x) == CODE_LABEL ! || GET_CODE (x) == BARRIER) ! { ! error ("In basic block %d:", bb->index); ! fatal_insn ("Flow control insn inside a basic block", x); ! } ! ! x = NEXT_INSN (x); ! } ! } ! } ! ! last_bb_num_seen = -1; ! num_bb_notes = 0; ! x = rtx_first; ! while (x) ! { ! if (NOTE_INSN_BASIC_BLOCK_P (x)) ! { ! basic_block bb = NOTE_BASIC_BLOCK (x); ! num_bb_notes++; ! if (bb->index != last_bb_num_seen + 1) ! /* Basic blocks not numbered consecutively. */ ! abort (); ! ! last_bb_num_seen = bb->index; ! } ! ! if (!bb_info[INSN_UID (x)]) ! { ! switch (GET_CODE (x)) ! { ! case BARRIER: ! case NOTE: ! break; ! ! case CODE_LABEL: ! /* An addr_vec is placed outside any block block. */ ! if (NEXT_INSN (x) ! && GET_CODE (NEXT_INSN (x)) == JUMP_INSN ! && (GET_CODE (PATTERN (NEXT_INSN (x))) == ADDR_DIFF_VEC ! || GET_CODE (PATTERN (NEXT_INSN (x))) == ADDR_VEC)) ! { ! x = NEXT_INSN (x); ! } ! ! /* But in any case, non-deletable labels can appear anywhere. */ ! break; ! ! default: ! fatal_insn ("Insn outside basic block", x); ! } ! } ! ! if (INSN_P (x) ! && GET_CODE (x) == JUMP_INSN ! && returnjump_p (x) && ! condjump_p (x) ! && ! (NEXT_INSN (x) && GET_CODE (NEXT_INSN (x)) == BARRIER)) ! fatal_insn ("Return not followed by barrier", x); ! ! x = NEXT_INSN (x); ! } ! ! if (num_bb_notes != n_basic_blocks) ! internal_error ! ("number of bb notes in insn chain (%d) != n_basic_blocks (%d)", ! num_bb_notes, n_basic_blocks); ! ! if (err) ! abort (); ! ! /* Clean up. */ ! free (bb_info); ! } ! ! /* Functions to access an edge list with a vector representation. ! Enough data is kept such that given an index number, the ! pred and succ that edge represents can be determined, or ! given a pred and a succ, its index number can be returned. ! This allows algorithms which consume a lot of memory to ! represent the normally full matrix of edge (pred,succ) with a ! single indexed vector, edge (EDGE_INDEX (pred, succ)), with no ! wasted space in the client code due to sparse flow graphs. */ ! ! /* This functions initializes the edge list. Basically the entire ! flowgraph is processed, and all edges are assigned a number, ! and the data structure is filled in. */ ! ! struct edge_list * ! create_edge_list () ! { ! struct edge_list *elist; ! edge e; ! int num_edges; ! int x; ! int block_count; ! ! block_count = n_basic_blocks + 2; /* Include the entry and exit blocks. */ ! ! num_edges = 0; ! ! /* Determine the number of edges in the flow graph by counting successor ! edges on each basic block. */ ! for (x = 0; x < n_basic_blocks; x++) ! { ! basic_block bb = BASIC_BLOCK (x); ! ! for (e = bb->succ; e; e = e->succ_next) ! num_edges++; ! } ! /* Don't forget successors of the entry block. */ ! for (e = ENTRY_BLOCK_PTR->succ; e; e = e->succ_next) ! num_edges++; ! ! elist = (struct edge_list *) xmalloc (sizeof (struct edge_list)); ! elist->num_blocks = block_count; ! elist->num_edges = num_edges; ! elist->index_to_edge = (edge *) xmalloc (sizeof (edge) * num_edges); ! ! num_edges = 0; ! ! /* Follow successors of the entry block, and register these edges. */ ! for (e = ENTRY_BLOCK_PTR->succ; e; e = e->succ_next) ! { ! elist->index_to_edge[num_edges] = e; ! num_edges++; ! } ! ! for (x = 0; x < n_basic_blocks; x++) ! { ! basic_block bb = BASIC_BLOCK (x); ! ! /* Follow all successors of blocks, and register these edges. */ ! for (e = bb->succ; e; e = e->succ_next) ! { ! elist->index_to_edge[num_edges] = e; ! num_edges++; ! } ! } ! return elist; ! } ! ! /* This function free's memory associated with an edge list. */ ! ! void ! free_edge_list (elist) ! struct edge_list *elist; ! { ! if (elist) ! { ! free (elist->index_to_edge); ! free (elist); ! } ! } ! ! /* This function provides debug output showing an edge list. */ ! ! void ! print_edge_list (f, elist) ! FILE *f; ! struct edge_list *elist; ! { ! int x; ! fprintf (f, "Compressed edge list, %d BBs + entry & exit, and %d edges\n", ! elist->num_blocks - 2, elist->num_edges); ! ! for (x = 0; x < elist->num_edges; x++) ! { ! fprintf (f, " %-4d - edge(", x); ! if (INDEX_EDGE_PRED_BB (elist, x) == ENTRY_BLOCK_PTR) ! fprintf (f, "entry,"); ! else ! fprintf (f, "%d,", INDEX_EDGE_PRED_BB (elist, x)->index); ! ! if (INDEX_EDGE_SUCC_BB (elist, x) == EXIT_BLOCK_PTR) ! fprintf (f, "exit)\n"); ! else ! fprintf (f, "%d)\n", INDEX_EDGE_SUCC_BB (elist, x)->index); ! } ! } ! ! /* This function provides an internal consistency check of an edge list, ! verifying that all edges are present, and that there are no ! extra edges. */ ! ! void ! verify_edge_list (f, elist) ! FILE *f; ! struct edge_list *elist; ! { ! int x, pred, succ, index; ! edge e; ! ! for (x = 0; x < n_basic_blocks; x++) ! { ! basic_block bb = BASIC_BLOCK (x); ! ! for (e = bb->succ; e; e = e->succ_next) ! { ! pred = e->src->index; ! succ = e->dest->index; ! index = EDGE_INDEX (elist, e->src, e->dest); ! if (index == EDGE_INDEX_NO_EDGE) ! { ! fprintf (f, "*p* No index for edge from %d to %d\n", pred, succ); ! continue; ! } ! if (INDEX_EDGE_PRED_BB (elist, index)->index != pred) ! fprintf (f, "*p* Pred for index %d should be %d not %d\n", ! index, pred, INDEX_EDGE_PRED_BB (elist, index)->index); ! if (INDEX_EDGE_SUCC_BB (elist, index)->index != succ) ! fprintf (f, "*p* Succ for index %d should be %d not %d\n", ! index, succ, INDEX_EDGE_SUCC_BB (elist, index)->index); ! } ! } ! for (e = ENTRY_BLOCK_PTR->succ; e; e = e->succ_next) ! { ! pred = e->src->index; ! succ = e->dest->index; ! index = EDGE_INDEX (elist, e->src, e->dest); ! if (index == EDGE_INDEX_NO_EDGE) ! { ! fprintf (f, "*p* No index for edge from %d to %d\n", pred, succ); ! continue; ! } ! if (INDEX_EDGE_PRED_BB (elist, index)->index != pred) ! fprintf (f, "*p* Pred for index %d should be %d not %d\n", ! index, pred, INDEX_EDGE_PRED_BB (elist, index)->index); ! if (INDEX_EDGE_SUCC_BB (elist, index)->index != succ) ! fprintf (f, "*p* Succ for index %d should be %d not %d\n", ! index, succ, INDEX_EDGE_SUCC_BB (elist, index)->index); ! } ! /* We've verified that all the edges are in the list, no lets make sure ! there are no spurious edges in the list. */ ! ! for (pred = 0; pred < n_basic_blocks; pred++) ! for (succ = 0; succ < n_basic_blocks; succ++) ! { ! basic_block p = BASIC_BLOCK (pred); ! basic_block s = BASIC_BLOCK (succ); ! ! int found_edge = 0; ! ! for (e = p->succ; e; e = e->succ_next) ! if (e->dest == s) ! { ! found_edge = 1; ! break; ! } ! for (e = s->pred; e; e = e->pred_next) ! if (e->src == p) ! { ! found_edge = 1; ! break; ! } ! if (EDGE_INDEX (elist, BASIC_BLOCK (pred), BASIC_BLOCK (succ)) ! == EDGE_INDEX_NO_EDGE && found_edge != 0) ! fprintf (f, "*** Edge (%d, %d) appears to not have an index\n", ! pred, succ); ! if (EDGE_INDEX (elist, BASIC_BLOCK (pred), BASIC_BLOCK (succ)) ! != EDGE_INDEX_NO_EDGE && found_edge == 0) ! fprintf (f, "*** Edge (%d, %d) has index %d, but there is no edge\n", ! pred, succ, EDGE_INDEX (elist, BASIC_BLOCK (pred), ! BASIC_BLOCK (succ))); ! } ! for (succ = 0; succ < n_basic_blocks; succ++) ! { ! basic_block p = ENTRY_BLOCK_PTR; ! basic_block s = BASIC_BLOCK (succ); ! ! int found_edge = 0; ! ! for (e = p->succ; e; e = e->succ_next) ! if (e->dest == s) ! { ! found_edge = 1; ! break; ! } ! for (e = s->pred; e; e = e->pred_next) ! if (e->src == p) ! { ! found_edge = 1; ! break; ! } ! if (EDGE_INDEX (elist, ENTRY_BLOCK_PTR, BASIC_BLOCK (succ)) ! == EDGE_INDEX_NO_EDGE && found_edge != 0) ! fprintf (f, "*** Edge (entry, %d) appears to not have an index\n", ! succ); ! if (EDGE_INDEX (elist, ENTRY_BLOCK_PTR, BASIC_BLOCK (succ)) ! != EDGE_INDEX_NO_EDGE && found_edge == 0) ! fprintf (f, "*** Edge (entry, %d) has index %d, but no edge exists\n", ! succ, EDGE_INDEX (elist, ENTRY_BLOCK_PTR, ! BASIC_BLOCK (succ))); ! } ! for (pred = 0; pred < n_basic_blocks; pred++) ! { ! basic_block p = BASIC_BLOCK (pred); ! basic_block s = EXIT_BLOCK_PTR; ! ! int found_edge = 0; ! ! for (e = p->succ; e; e = e->succ_next) ! if (e->dest == s) ! { ! found_edge = 1; ! break; ! } ! for (e = s->pred; e; e = e->pred_next) ! if (e->src == p) ! { ! found_edge = 1; ! break; ! } ! if (EDGE_INDEX (elist, BASIC_BLOCK (pred), EXIT_BLOCK_PTR) ! == EDGE_INDEX_NO_EDGE && found_edge != 0) ! fprintf (f, "*** Edge (%d, exit) appears to not have an index\n", ! pred); ! if (EDGE_INDEX (elist, BASIC_BLOCK (pred), EXIT_BLOCK_PTR) ! != EDGE_INDEX_NO_EDGE && found_edge == 0) ! fprintf (f, "*** Edge (%d, exit) has index %d, but no edge exists\n", ! pred, EDGE_INDEX (elist, BASIC_BLOCK (pred), ! EXIT_BLOCK_PTR)); ! } ! } ! ! /* This routine will determine what, if any, edge there is between ! a specified predecessor and successor. */ ! ! int ! find_edge_index (edge_list, pred, succ) ! struct edge_list *edge_list; ! basic_block pred, succ; ! { ! int x; ! for (x = 0; x < NUM_EDGES (edge_list); x++) ! { ! if (INDEX_EDGE_PRED_BB (edge_list, x) == pred ! && INDEX_EDGE_SUCC_BB (edge_list, x) == succ) ! return x; ! } ! return (EDGE_INDEX_NO_EDGE); ! } ! ! /* This function will remove an edge from the flow graph. */ ! ! void ! remove_edge (e) ! edge e; ! { ! edge last_pred = NULL; ! edge last_succ = NULL; ! edge tmp; ! basic_block src, dest; ! src = e->src; ! dest = e->dest; ! for (tmp = src->succ; tmp && tmp != e; tmp = tmp->succ_next) ! last_succ = tmp; ! ! if (!tmp) ! abort (); ! if (last_succ) ! last_succ->succ_next = e->succ_next; ! else ! src->succ = e->succ_next; ! ! for (tmp = dest->pred; tmp && tmp != e; tmp = tmp->pred_next) ! last_pred = tmp; ! ! if (!tmp) ! abort (); ! if (last_pred) ! last_pred->pred_next = e->pred_next; ! else ! dest->pred = e->pred_next; ! ! n_edges--; ! free (e); ! } ! ! /* This routine will remove any fake successor edges for a basic block. ! When the edge is removed, it is also removed from whatever predecessor ! list it is in. */ ! ! static void ! remove_fake_successors (bb) ! basic_block bb; ! { ! edge e; ! for (e = bb->succ; e;) ! { ! edge tmp = e; ! e = e->succ_next; ! if ((tmp->flags & EDGE_FAKE) == EDGE_FAKE) ! remove_edge (tmp); ! } ! } ! ! /* This routine will remove all fake edges from the flow graph. If ! we remove all fake successors, it will automatically remove all ! fake predecessors. */ ! ! void ! remove_fake_edges () ! { ! int x; ! ! for (x = 0; x < n_basic_blocks; x++) ! remove_fake_successors (BASIC_BLOCK (x)); ! ! /* We've handled all successors except the entry block's. */ ! remove_fake_successors (ENTRY_BLOCK_PTR); ! } ! ! /* This function will add a fake edge between any block which has no ! successors, and the exit block. Some data flow equations require these ! edges to exist. */ ! ! void ! add_noreturn_fake_exit_edges () ! { ! int x; ! ! for (x = 0; x < n_basic_blocks; x++) ! if (BASIC_BLOCK (x)->succ == NULL) ! make_edge (NULL, BASIC_BLOCK (x), EXIT_BLOCK_PTR, EDGE_FAKE); ! } ! ! /* This function adds a fake edge between any infinite loops to the ! exit block. Some optimizations require a path from each node to ! the exit node. ! ! See also Morgan, Figure 3.10, pp. 82-83. ! ! The current implementation is ugly, not attempting to minimize the ! number of inserted fake edges. To reduce the number of fake edges ! to insert, add fake edges from _innermost_ loops containing only ! nodes not reachable from the exit block. */ ! ! void ! connect_infinite_loops_to_exit () ! { ! basic_block unvisited_block; ! ! /* Perform depth-first search in the reverse graph to find nodes ! reachable from the exit block. */ ! struct depth_first_search_dsS dfs_ds; ! ! flow_dfs_compute_reverse_init (&dfs_ds); ! flow_dfs_compute_reverse_add_bb (&dfs_ds, EXIT_BLOCK_PTR); ! ! /* Repeatedly add fake edges, updating the unreachable nodes. */ ! while (1) ! { ! unvisited_block = flow_dfs_compute_reverse_execute (&dfs_ds); ! if (!unvisited_block) ! break; ! make_edge (NULL, unvisited_block, EXIT_BLOCK_PTR, EDGE_FAKE); ! flow_dfs_compute_reverse_add_bb (&dfs_ds, unvisited_block); ! } ! ! flow_dfs_compute_reverse_finish (&dfs_ds); ! ! return; ! } ! ! /* Redirect an edge's successor from one block to another. */ ! ! void ! redirect_edge_succ (e, new_succ) ! edge e; ! basic_block new_succ; ! { ! edge *pe; ! ! /* Disconnect the edge from the old successor block. */ ! for (pe = &e->dest->pred; *pe != e; pe = &(*pe)->pred_next) ! continue; ! *pe = (*pe)->pred_next; ! ! /* Reconnect the edge to the new successor block. */ ! e->pred_next = new_succ->pred; ! new_succ->pred = e; ! e->dest = new_succ; ! } ! ! /* Redirect an edge's predecessor from one block to another. */ ! ! void ! redirect_edge_pred (e, new_pred) ! edge e; ! basic_block new_pred; ! { ! edge *pe; ! ! /* Disconnect the edge from the old predecessor block. */ ! for (pe = &e->src->succ; *pe != e; pe = &(*pe)->succ_next) ! continue; ! *pe = (*pe)->succ_next; ! ! /* Reconnect the edge to the new predecessor block. */ ! e->succ_next = new_pred->succ; ! new_pred->succ = e; ! e->src = new_pred; ! } ! ! /* Dump the list of basic blocks in the bitmap NODES. */ ! ! static void ! flow_nodes_print (str, nodes, file) ! const char *str; ! const sbitmap nodes; ! FILE *file; ! { ! int node; ! ! if (! nodes) ! return; ! ! fprintf (file, "%s { ", str); ! EXECUTE_IF_SET_IN_SBITMAP (nodes, 0, node, {fprintf (file, "%d ", node);}); ! fputs ("}\n", file); ! } ! ! ! /* Dump the list of edges in the array EDGE_LIST. */ ! ! static void ! flow_edge_list_print (str, edge_list, num_edges, file) ! const char *str; ! const edge *edge_list; ! int num_edges; ! FILE *file; ! { ! int i; ! ! if (! edge_list) ! return; ! ! fprintf (file, "%s { ", str); ! for (i = 0; i < num_edges; i++) ! fprintf (file, "%d->%d ", edge_list[i]->src->index, ! edge_list[i]->dest->index); ! fputs ("}\n", file); ! } ! ! ! /* Dump loop related CFG information. */ static void ! flow_loops_cfg_dump (loops, file) ! const struct loops *loops; ! FILE *file; ! { ! int i; ! ! if (! loops->num || ! file || ! loops->cfg.dom) ! return; ! ! for (i = 0; i < n_basic_blocks; i++) ! { ! edge succ; ! ! fprintf (file, ";; %d succs { ", i); ! for (succ = BASIC_BLOCK (i)->succ; succ; succ = succ->succ_next) ! fprintf (file, "%d ", succ->dest->index); ! flow_nodes_print ("} dom", loops->cfg.dom[i], file); ! } ! ! /* Dump the DFS node order. */ ! if (loops->cfg.dfs_order) ! { ! fputs (";; DFS order: ", file); ! for (i = 0; i < n_basic_blocks; i++) ! fprintf (file, "%d ", loops->cfg.dfs_order[i]); ! fputs ("\n", file); ! } ! /* Dump the reverse completion node order. */ ! if (loops->cfg.rc_order) ! { ! fputs (";; RC order: ", file); ! for (i = 0; i < n_basic_blocks; i++) ! fprintf (file, "%d ", loops->cfg.rc_order[i]); ! fputs ("\n", file); ! } ! } ! ! /* Return non-zero if the nodes of LOOP are a subset of OUTER. */ ! ! static int ! flow_loop_nested_p (outer, loop) ! struct loop *outer; ! struct loop *loop; ! { ! return sbitmap_a_subset_b_p (loop->nodes, outer->nodes); ! } ! ! ! /* Dump the loop information specified by LOOP to the stream FILE ! using auxiliary dump callback function LOOP_DUMP_AUX if non null. */ ! void ! flow_loop_dump (loop, file, loop_dump_aux, verbose) ! const struct loop *loop; ! FILE *file; ! void (*loop_dump_aux) PARAMS((const struct loop *, FILE *, int)); ! int verbose; ! { ! if (! loop || ! loop->header) ! return; ! ! fprintf (file, ";;\n;; Loop %d (%d to %d):%s%s\n", ! loop->num, INSN_UID (loop->first->head), ! INSN_UID (loop->last->end), ! loop->shared ? " shared" : "", ! loop->invalid ? " invalid" : ""); ! fprintf (file, ";; header %d, latch %d, pre-header %d, first %d, last %d\n", ! loop->header->index, loop->latch->index, ! loop->pre_header ? loop->pre_header->index : -1, ! loop->first->index, loop->last->index); ! fprintf (file, ";; depth %d, level %d, outer %ld\n", ! loop->depth, loop->level, ! (long) (loop->outer ? loop->outer->num : -1)); ! ! if (loop->pre_header_edges) ! flow_edge_list_print (";; pre-header edges", loop->pre_header_edges, ! loop->num_pre_header_edges, file); ! flow_edge_list_print (";; entry edges", loop->entry_edges, ! loop->num_entries, file); ! fprintf (file, ";; %d", loop->num_nodes); ! flow_nodes_print (" nodes", loop->nodes, file); ! flow_edge_list_print (";; exit edges", loop->exit_edges, ! loop->num_exits, file); ! if (loop->exits_doms) ! flow_nodes_print (";; exit doms", loop->exits_doms, file); ! if (loop_dump_aux) ! loop_dump_aux (loop, file, verbose); ! } ! ! ! /* Dump the loop information specified by LOOPS to the stream FILE, ! using auxiliary dump callback function LOOP_DUMP_AUX if non null. */ ! void ! flow_loops_dump (loops, file, loop_dump_aux, verbose) ! const struct loops *loops; ! FILE *file; ! void (*loop_dump_aux) PARAMS((const struct loop *, FILE *, int)); ! int verbose; { int i; - int num_loops; - - num_loops = loops->num; - if (! num_loops || ! file) - return; - - fprintf (file, ";; %d loops found, %d levels\n", - num_loops, loops->levels); - - for (i = 0; i < num_loops; i++) - { - struct loop *loop = &loops->array[i]; - - flow_loop_dump (loop, file, loop_dump_aux, verbose); - - if (loop->shared) - { - int j; - - for (j = 0; j < i; j++) - { - struct loop *oloop = &loops->array[j]; - - if (loop->header == oloop->header) - { - int disjoint; - int smaller; - - smaller = loop->num_nodes < oloop->num_nodes; - - /* If the union of LOOP and OLOOP is different than - the larger of LOOP and OLOOP then LOOP and OLOOP - must be disjoint. */ - disjoint = ! flow_loop_nested_p (smaller ? loop : oloop, - smaller ? oloop : loop); - fprintf (file, - ";; loop header %d shared by loops %d, %d %s\n", - loop->header->index, i, j, - disjoint ? "disjoint" : "nested"); - } - } - } - } - - if (verbose) - flow_loops_cfg_dump (loops, file); - } - - - /* Free all the memory allocated for LOOPS. */ - - void - flow_loops_free (loops) - struct loops *loops; - { - if (loops->array) - { - int i; - - if (! loops->num) - abort (); - - /* Free the loop descriptors. */ - for (i = 0; i < loops->num; i++) - { - struct loop *loop = &loops->array[i]; - - if (loop->pre_header_edges) - free (loop->pre_header_edges); - if (loop->nodes) - sbitmap_free (loop->nodes); - if (loop->entry_edges) - free (loop->entry_edges); - if (loop->exit_edges) - free (loop->exit_edges); - if (loop->exits_doms) - sbitmap_free (loop->exits_doms); - } - free (loops->array); - loops->array = NULL; - - if (loops->cfg.dom) - sbitmap_vector_free (loops->cfg.dom); - if (loops->cfg.dfs_order) - free (loops->cfg.dfs_order); - - if (loops->shared_headers) - sbitmap_free (loops->shared_headers); - } - } - - - /* Find the entry edges into the loop with header HEADER and nodes - NODES and store in ENTRY_EDGES array. Return the number of entry - edges from the loop. */ - - static int - flow_loop_entry_edges_find (header, nodes, entry_edges) - basic_block header; - const sbitmap nodes; - edge **entry_edges; - { - edge e; - int num_entries; - - *entry_edges = NULL; - - num_entries = 0; - for (e = header->pred; e; e = e->pred_next) - { - basic_block src = e->src; - - if (src == ENTRY_BLOCK_PTR || ! TEST_BIT (nodes, src->index)) - num_entries++; - } - - if (! num_entries) - abort (); - - *entry_edges = (edge *) xmalloc (num_entries * sizeof (edge *)); ! num_entries = 0; ! for (e = header->pred; e; e = e->pred_next) { ! basic_block src = e->src; ! ! if (src == ENTRY_BLOCK_PTR || ! TEST_BIT (nodes, src->index)) ! (*entry_edges)[num_entries++] = e; } ! ! return num_entries; ! } ! ! ! /* Find the exit edges from the loop using the bitmap of loop nodes ! NODES and store in EXIT_EDGES array. Return the number of ! exit edges from the loop. */ ! ! static int ! flow_loop_exit_edges_find (nodes, exit_edges) ! const sbitmap nodes; ! edge **exit_edges; ! { ! edge e; ! int node; ! int num_exits; ! ! *exit_edges = NULL; ! ! /* Check all nodes within the loop to see if there are any ! successors not in the loop. Note that a node may have multiple ! exiting edges ????? A node can have one jumping edge and one fallthru ! edge so only one of these can exit the loop. */ ! num_exits = 0; ! EXECUTE_IF_SET_IN_SBITMAP (nodes, 0, node, { ! for (e = BASIC_BLOCK (node)->succ; e; e = e->succ_next) ! { ! basic_block dest = e->dest; ! ! if (dest == EXIT_BLOCK_PTR || ! TEST_BIT (nodes, dest->index)) ! num_exits++; ! } ! }); ! ! if (! num_exits) ! return 0; ! ! *exit_edges = (edge *) xmalloc (num_exits * sizeof (edge *)); ! ! /* Store all exiting edges into an array. */ ! num_exits = 0; ! EXECUTE_IF_SET_IN_SBITMAP (nodes, 0, node, { ! for (e = BASIC_BLOCK (node)->succ; e; e = e->succ_next) { ! basic_block dest = e->dest; ! ! if (dest == EXIT_BLOCK_PTR || ! TEST_BIT (nodes, dest->index)) ! (*exit_edges)[num_exits++] = e; ! } ! }); ! ! return num_exits; ! } ! ! ! /* Find the nodes contained within the loop with header HEADER and ! latch LATCH and store in NODES. Return the number of nodes within ! the loop. */ ! ! static int ! flow_loop_nodes_find (header, latch, nodes) ! basic_block header; ! basic_block latch; ! sbitmap nodes; ! { ! basic_block *stack; ! int sp; ! int num_nodes = 0; ! ! stack = (basic_block *) xmalloc (n_basic_blocks * sizeof (basic_block)); ! sp = 0; ! ! /* Start with only the loop header in the set of loop nodes. */ ! sbitmap_zero (nodes); ! SET_BIT (nodes, header->index); ! num_nodes++; ! header->loop_depth++; ! ! /* Push the loop latch on to the stack. */ ! if (! TEST_BIT (nodes, latch->index)) ! { ! SET_BIT (nodes, latch->index); ! latch->loop_depth++; ! num_nodes++; ! stack[sp++] = latch; ! } ! ! while (sp) ! { ! basic_block node; ! edge e; ! ! node = stack[--sp]; ! for (e = node->pred; e; e = e->pred_next) ! { ! basic_block ancestor = e->src; ! ! /* If each ancestor not marked as part of loop, add to set of ! loop nodes and push on to stack. */ ! if (ancestor != ENTRY_BLOCK_PTR ! && ! TEST_BIT (nodes, ancestor->index)) ! { ! SET_BIT (nodes, ancestor->index); ! ancestor->loop_depth++; ! num_nodes++; ! stack[sp++] = ancestor; ! } ! } ! } ! free (stack); ! return num_nodes; ! } ! ! /* Compute the depth first search order and store in the array ! DFS_ORDER if non-zero, marking the nodes visited in VISITED. If ! RC_ORDER is non-zero, return the reverse completion number for each ! node. Returns the number of nodes visited. A depth first search ! tries to get as far away from the starting point as quickly as ! possible. */ ! ! static int ! flow_depth_first_order_compute (dfs_order, rc_order) ! int *dfs_order; ! int *rc_order; ! { ! edge *stack; ! int sp; ! int dfsnum = 0; ! int rcnum = n_basic_blocks - 1; ! sbitmap visited; ! ! /* Allocate stack for back-tracking up CFG. */ ! stack = (edge *) xmalloc ((n_basic_blocks + 1) * sizeof (edge)); ! sp = 0; ! ! /* Allocate bitmap to track nodes that have been visited. */ ! visited = sbitmap_alloc (n_basic_blocks); ! ! /* None of the nodes in the CFG have been visited yet. */ ! sbitmap_zero (visited); ! ! /* Push the first edge on to the stack. */ ! stack[sp++] = ENTRY_BLOCK_PTR->succ; ! ! while (sp) ! { ! edge e; ! basic_block src; ! basic_block dest; ! ! /* Look at the edge on the top of the stack. */ ! e = stack[sp - 1]; ! src = e->src; ! dest = e->dest; ! ! /* Check if the edge destination has been visited yet. */ ! if (dest != EXIT_BLOCK_PTR && ! TEST_BIT (visited, dest->index)) ! { ! /* Mark that we have visited the destination. */ ! SET_BIT (visited, dest->index); ! ! if (dfs_order) ! dfs_order[dfsnum++] = dest->index; ! ! if (dest->succ) ! { ! /* Since the DEST node has been visited for the first ! time, check its successors. */ ! stack[sp++] = dest->succ; ! } ! else ! { ! /* There are no successors for the DEST node so assign ! its reverse completion number. */ ! if (rc_order) ! rc_order[rcnum--] = dest->index; ! } ! } ! else ! { ! if (! e->succ_next && src != ENTRY_BLOCK_PTR) ! { ! /* There are no more successors for the SRC node ! so assign its reverse completion number. */ ! if (rc_order) ! rc_order[rcnum--] = src->index; ! } ! ! if (e->succ_next) ! stack[sp - 1] = e->succ_next; ! else ! sp--; ! } ! } ! ! free (stack); ! sbitmap_free (visited); ! ! /* The number of nodes visited should not be greater than ! n_basic_blocks. */ ! if (dfsnum > n_basic_blocks) ! abort (); ! ! /* There are some nodes left in the CFG that are unreachable. */ ! if (dfsnum < n_basic_blocks) ! abort (); ! return dfsnum; ! } ! ! /* Compute the depth first search order on the _reverse_ graph and ! store in the array DFS_ORDER, marking the nodes visited in VISITED. ! Returns the number of nodes visited. ! ! The computation is split into three pieces: ! ! flow_dfs_compute_reverse_init () creates the necessary data ! structures. ! ! flow_dfs_compute_reverse_add_bb () adds a basic block to the data ! structures. The block will start the search. ! ! flow_dfs_compute_reverse_execute () continues (or starts) the ! search using the block on the top of the stack, stopping when the ! stack is empty. ! ! flow_dfs_compute_reverse_finish () destroys the necessary data ! structures. ! ! Thus, the user will probably call ..._init(), call ..._add_bb() to ! add a beginning basic block to the stack, call ..._execute(), ! possibly add another bb to the stack and again call ..._execute(), ! ..., and finally call _finish(). */ ! ! /* Initialize the data structures used for depth-first search on the ! reverse graph. If INITIALIZE_STACK is nonzero, the exit block is ! added to the basic block stack. DATA is the current depth-first ! search context. If INITIALIZE_STACK is non-zero, there is an ! element on the stack. */ ! ! static void ! flow_dfs_compute_reverse_init (data) ! depth_first_search_ds data; ! { ! /* Allocate stack for back-tracking up CFG. */ ! data->stack = ! (basic_block *) xmalloc ((n_basic_blocks - (INVALID_BLOCK + 1)) ! * sizeof (basic_block)); ! data->sp = 0; ! ! /* Allocate bitmap to track nodes that have been visited. */ ! data->visited_blocks = sbitmap_alloc (n_basic_blocks - (INVALID_BLOCK + 1)); ! ! /* None of the nodes in the CFG have been visited yet. */ ! sbitmap_zero (data->visited_blocks); ! ! return; ! } ! ! /* Add the specified basic block to the top of the dfs data ! structures. When the search continues, it will start at the ! block. */ ! ! static void ! flow_dfs_compute_reverse_add_bb (data, bb) ! depth_first_search_ds data; ! basic_block bb; ! { ! data->stack[data->sp++] = bb; ! return; ! } ! ! /* Continue the depth-first search through the reverse graph starting ! with the block at the stack's top and ending when the stack is ! empty. Visited nodes are marked. Returns an unvisited basic ! block, or NULL if there is none available. */ ! ! static basic_block ! flow_dfs_compute_reverse_execute (data) ! depth_first_search_ds data; ! { ! basic_block bb; ! edge e; ! int i; ! ! while (data->sp > 0) ! { ! bb = data->stack[--data->sp]; ! ! /* Mark that we have visited this node. */ ! if (!TEST_BIT (data->visited_blocks, bb->index - (INVALID_BLOCK + 1))) ! { ! SET_BIT (data->visited_blocks, bb->index - (INVALID_BLOCK + 1)); ! ! /* Perform depth-first search on adjacent vertices. */ ! for (e = bb->pred; e; e = e->pred_next) ! flow_dfs_compute_reverse_add_bb (data, e->src); ! } ! } ! ! /* Determine if there are unvisited basic blocks. */ ! for (i = n_basic_blocks - (INVALID_BLOCK + 1); --i >= 0;) ! if (!TEST_BIT (data->visited_blocks, i)) ! return BASIC_BLOCK (i + (INVALID_BLOCK + 1)); ! return NULL; ! } ! ! /* Destroy the data structures needed for depth-first search on the ! reverse graph. */ ! ! static void ! flow_dfs_compute_reverse_finish (data) ! depth_first_search_ds data; ! { ! free (data->stack); ! sbitmap_free (data->visited_blocks); ! return; ! } ! ! ! /* Find the root node of the loop pre-header extended basic block and ! the edges along the trace from the root node to the loop header. */ ! ! static void ! flow_loop_pre_header_scan (loop) ! struct loop *loop; ! { ! int num = 0; ! basic_block ebb; ! ! loop->num_pre_header_edges = 0; ! ! if (loop->num_entries != 1) ! return; ! ! ebb = loop->entry_edges[0]->src; ! ! if (ebb != ENTRY_BLOCK_PTR) ! { ! edge e; ! ! /* Count number of edges along trace from loop header to ! root of pre-header extended basic block. Usually this is ! only one or two edges. */ ! num++; ! while (ebb->pred->src != ENTRY_BLOCK_PTR && ! ebb->pred->pred_next) ! { ! ebb = ebb->pred->src; ! num++; ! } ! ! loop->pre_header_edges = (edge *) xmalloc (num * sizeof (edge *)); ! loop->num_pre_header_edges = num; ! ! /* Store edges in order that they are followed. The source ! of the first edge is the root node of the pre-header extended ! basic block and the destination of the last last edge is ! the loop header. */ ! for (e = loop->entry_edges[0]; num; e = e->src->pred) ! { ! loop->pre_header_edges[--num] = e; ! } ! } ! } ! ! ! /* Return the block for the pre-header of the loop with header ! HEADER where DOM specifies the dominator information. Return NULL if ! there is no pre-header. */ ! ! static basic_block ! flow_loop_pre_header_find (header, dom) ! basic_block header; ! const sbitmap *dom; ! { ! basic_block pre_header; ! edge e; ! ! /* If block p is a predecessor of the header and is the only block ! that the header does not dominate, then it is the pre-header. */ ! pre_header = NULL; ! for (e = header->pred; e; e = e->pred_next) ! { ! basic_block node = e->src; ! ! if (node != ENTRY_BLOCK_PTR ! && ! TEST_BIT (dom[node->index], header->index)) ! { ! if (pre_header == NULL) ! pre_header = node; ! else ! { ! /* There are multiple edges into the header from outside ! the loop so there is no pre-header block. */ ! pre_header = NULL; ! break; ! } ! } ! } ! return pre_header; ! } ! ! /* Add LOOP to the loop hierarchy tree where PREVLOOP was the loop ! previously added. The insertion algorithm assumes that the loops ! are added in the order found by a depth first search of the CFG. */ ! ! static void ! flow_loop_tree_node_add (prevloop, loop) ! struct loop *prevloop; ! struct loop *loop; ! { ! ! if (flow_loop_nested_p (prevloop, loop)) ! { ! prevloop->inner = loop; ! loop->outer = prevloop; ! return; ! } ! ! while (prevloop->outer) ! { ! if (flow_loop_nested_p (prevloop->outer, loop)) ! { ! prevloop->next = loop; ! loop->outer = prevloop->outer; ! return; ! } ! prevloop = prevloop->outer; ! } ! ! prevloop->next = loop; ! loop->outer = NULL; ! } ! ! /* Build the loop hierarchy tree for LOOPS. */ ! ! static void ! flow_loops_tree_build (loops) ! struct loops *loops; ! { ! int i; ! int num_loops; ! ! num_loops = loops->num; ! if (! num_loops) ! return; ! ! /* Root the loop hierarchy tree with the first loop found. ! Since we used a depth first search this should be the ! outermost loop. */ ! loops->tree = &loops->array[0]; ! loops->tree->outer = loops->tree->inner = loops->tree->next = NULL; ! ! /* Add the remaining loops to the tree. */ ! for (i = 1; i < num_loops; i++) ! flow_loop_tree_node_add (&loops->array[i - 1], &loops->array[i]); ! } ! ! /* Helper function to compute loop nesting depth and enclosed loop level ! for the natural loop specified by LOOP at the loop depth DEPTH. ! Returns the loop level. */ ! ! static int ! flow_loop_level_compute (loop, depth) ! struct loop *loop; ! int depth; ! { ! struct loop *inner; ! int level = 1; ! ! if (! loop) ! return 0; ! ! /* Traverse loop tree assigning depth and computing level as the ! maximum level of all the inner loops of this loop. The loop ! level is equivalent to the height of the loop in the loop tree ! and corresponds to the number of enclosed loop levels (including ! itself). */ ! for (inner = loop->inner; inner; inner = inner->next) ! { ! int ilevel; ! ! ilevel = flow_loop_level_compute (inner, depth + 1) + 1; ! ! if (ilevel > level) ! level = ilevel; ! } ! loop->level = level; ! loop->depth = depth; ! return level; ! } ! ! /* Compute the loop nesting depth and enclosed loop level for the loop ! hierarchy tree specfied by LOOPS. Return the maximum enclosed loop ! level. */ ! ! static int ! flow_loops_level_compute (loops) ! struct loops *loops; ! { ! struct loop *loop; ! int level; ! int levels = 0; ! ! /* Traverse all the outer level loops. */ ! for (loop = loops->tree; loop; loop = loop->next) ! { ! level = flow_loop_level_compute (loop, 1); ! if (level > levels) ! levels = level; ! } ! return levels; ! } ! ! ! /* Scan a single natural loop specified by LOOP collecting information ! about it specified by FLAGS. */ ! ! int ! flow_loop_scan (loops, loop, flags) ! struct loops *loops; ! struct loop *loop; ! int flags; ! { ! /* Determine prerequisites. */ ! if ((flags & LOOP_EXITS_DOMS) && ! loop->exit_edges) ! flags |= LOOP_EXIT_EDGES; ! ! if (flags & LOOP_ENTRY_EDGES) ! { ! /* Find edges which enter the loop header. ! Note that the entry edges should only ! enter the header of a natural loop. */ ! loop->num_entries ! = flow_loop_entry_edges_find (loop->header, ! loop->nodes, ! &loop->entry_edges); ! } ! ! if (flags & LOOP_EXIT_EDGES) ! { ! /* Find edges which exit the loop. */ ! loop->num_exits ! = flow_loop_exit_edges_find (loop->nodes, ! &loop->exit_edges); ! } ! ! if (flags & LOOP_EXITS_DOMS) ! { ! int j; ! ! /* Determine which loop nodes dominate all the exits ! of the loop. */ ! loop->exits_doms = sbitmap_alloc (n_basic_blocks); ! sbitmap_copy (loop->exits_doms, loop->nodes); ! for (j = 0; j < loop->num_exits; j++) ! sbitmap_a_and_b (loop->exits_doms, loop->exits_doms, ! loops->cfg.dom[loop->exit_edges[j]->src->index]); ! ! /* The header of a natural loop must dominate ! all exits. */ ! if (! TEST_BIT (loop->exits_doms, loop->header->index)) ! abort (); ! } ! ! if (flags & LOOP_PRE_HEADER) ! { ! /* Look to see if the loop has a pre-header node. */ ! loop->pre_header ! = flow_loop_pre_header_find (loop->header, loops->cfg.dom); ! ! /* Find the blocks within the extended basic block of ! the loop pre-header. */ ! flow_loop_pre_header_scan (loop); ! } ! return 1; ! } ! ! ! /* Find all the natural loops in the function and save in LOOPS structure ! and recalculate loop_depth information in basic block structures. ! FLAGS controls which loop information is collected. ! Return the number of natural loops found. */ ! ! int ! flow_loops_find (loops, flags) ! struct loops *loops; ! int flags; ! { ! int i; ! int b; ! int num_loops; ! edge e; ! sbitmap headers; ! sbitmap *dom; ! int *dfs_order; ! int *rc_order; ! ! /* This function cannot be repeatedly called with different ! flags to build up the loop information. The loop tree ! must always be built if this function is called. */ ! if (! (flags & LOOP_TREE)) ! abort (); ! ! memset (loops, 0, sizeof (*loops)); ! ! /* Taking care of this degenerate case makes the rest of ! this code simpler. */ ! if (n_basic_blocks == 0) ! return 0; ! ! dfs_order = NULL; ! rc_order = NULL; ! ! /* Compute the dominators. */ ! dom = sbitmap_vector_alloc (n_basic_blocks, n_basic_blocks); ! calculate_dominance_info (NULL, dom, CDI_DOMINATORS); ! ! /* Count the number of loop edges (back edges). This should be the ! same as the number of natural loops. */ ! ! num_loops = 0; ! for (b = 0; b < n_basic_blocks; b++) ! { ! basic_block header; ! ! header = BASIC_BLOCK (b); ! header->loop_depth = 0; ! ! for (e = header->pred; e; e = e->pred_next) ! { ! basic_block latch = e->src; ! ! /* Look for back edges where a predecessor is dominated ! by this block. A natural loop has a single entry ! node (header) that dominates all the nodes in the ! loop. It also has single back edge to the header ! from a latch node. Note that multiple natural loops ! may share the same header. */ ! if (b != header->index) ! abort (); ! ! if (latch != ENTRY_BLOCK_PTR && TEST_BIT (dom[latch->index], b)) ! num_loops++; ! } ! } ! ! if (num_loops) ! { ! /* Compute depth first search order of the CFG so that outer ! natural loops will be found before inner natural loops. */ ! dfs_order = (int *) xmalloc (n_basic_blocks * sizeof (int)); ! rc_order = (int *) xmalloc (n_basic_blocks * sizeof (int)); ! flow_depth_first_order_compute (dfs_order, rc_order); ! ! /* Save CFG derived information to avoid recomputing it. */ ! loops->cfg.dom = dom; ! loops->cfg.dfs_order = dfs_order; ! loops->cfg.rc_order = rc_order; ! ! /* Allocate loop structures. */ ! loops->array ! = (struct loop *) xcalloc (num_loops, sizeof (struct loop)); ! ! headers = sbitmap_alloc (n_basic_blocks); ! sbitmap_zero (headers); ! ! loops->shared_headers = sbitmap_alloc (n_basic_blocks); ! sbitmap_zero (loops->shared_headers); ! ! /* Find and record information about all the natural loops ! in the CFG. */ ! num_loops = 0; ! for (b = 0; b < n_basic_blocks; b++) ! { ! basic_block header; ! ! /* Search the nodes of the CFG in reverse completion order ! so that we can find outer loops first. */ ! header = BASIC_BLOCK (rc_order[b]); ! ! /* Look for all the possible latch blocks for this header. */ ! for (e = header->pred; e; e = e->pred_next) ! { ! basic_block latch = e->src; ! ! /* Look for back edges where a predecessor is dominated ! by this block. A natural loop has a single entry ! node (header) that dominates all the nodes in the ! loop. It also has single back edge to the header ! from a latch node. Note that multiple natural loops ! may share the same header. */ ! if (latch != ENTRY_BLOCK_PTR ! && TEST_BIT (dom[latch->index], header->index)) ! { ! struct loop *loop; ! ! loop = loops->array + num_loops; ! ! loop->header = header; ! loop->latch = latch; ! loop->num = num_loops; ! ! num_loops++; ! } ! } ! } ! ! for (i = 0; i < num_loops; i++) ! { ! struct loop *loop = &loops->array[i]; ! ! /* Keep track of blocks that are loop headers so ! that we can tell which loops should be merged. */ ! if (TEST_BIT (headers, loop->header->index)) ! SET_BIT (loops->shared_headers, loop->header->index); ! SET_BIT (headers, loop->header->index); ! ! /* Find nodes contained within the loop. */ ! loop->nodes = sbitmap_alloc (n_basic_blocks); ! loop->num_nodes ! = flow_loop_nodes_find (loop->header, loop->latch, loop->nodes); ! ! /* Compute first and last blocks within the loop. ! These are often the same as the loop header and ! loop latch respectively, but this is not always ! the case. */ ! loop->first ! = BASIC_BLOCK (sbitmap_first_set_bit (loop->nodes)); ! loop->last ! = BASIC_BLOCK (sbitmap_last_set_bit (loop->nodes)); ! ! flow_loop_scan (loops, loop, flags); ! } ! ! /* Natural loops with shared headers may either be disjoint or ! nested. Disjoint loops with shared headers cannot be inner ! loops and should be merged. For now just mark loops that share ! headers. */ ! for (i = 0; i < num_loops; i++) ! if (TEST_BIT (loops->shared_headers, loops->array[i].header->index)) ! loops->array[i].shared = 1; ! ! sbitmap_free (headers); ! } ! ! loops->num = num_loops; ! ! /* Build the loop hierarchy tree. */ ! flow_loops_tree_build (loops); ! ! /* Assign the loop nesting depth and enclosed loop level for each ! loop. */ ! loops->levels = flow_loops_level_compute (loops); ! ! return num_loops; ! } ! ! ! /* Update the information regarding the loops in the CFG ! specified by LOOPS. */ ! int ! flow_loops_update (loops, flags) ! struct loops *loops; ! int flags; ! { ! /* One day we may want to update the current loop data. For now ! throw away the old stuff and rebuild what we need. */ ! if (loops->array) ! flow_loops_free (loops); ! ! return flow_loops_find (loops, flags); ! } ! ! ! /* Return non-zero if edge E enters header of LOOP from outside of LOOP. */ ! ! int ! flow_loop_outside_edge_p (loop, e) ! const struct loop *loop; ! edge e; ! { ! if (e->dest != loop->header) ! abort (); ! return (e->src == ENTRY_BLOCK_PTR) ! || ! TEST_BIT (loop->nodes, e->src->index); ! } ! ! /* Clear LOG_LINKS fields of insns in a chain. ! Also clear the global_live_at_{start,end} fields of the basic block ! structures. */ ! ! void ! clear_log_links (insns) ! rtx insns; ! { ! rtx i; ! int b; ! ! for (i = insns; i; i = NEXT_INSN (i)) ! if (INSN_P (i)) ! LOG_LINKS (i) = 0; ! ! for (b = 0; b < n_basic_blocks; b++) ! { ! basic_block bb = BASIC_BLOCK (b); ! ! bb->global_live_at_start = NULL; ! bb->global_live_at_end = NULL; ! } ! ENTRY_BLOCK_PTR->global_live_at_end = NULL; ! EXIT_BLOCK_PTR->global_live_at_start = NULL; } /* Given a register bitmap, turn on the bits in a HARD_REG_SET that --- 4262,4293 ---- return count; } ! /* Clear LOG_LINKS fields of insns in a selected blocks or whole chain ! if blocks is NULL. */ static void ! clear_log_links (blocks) ! sbitmap blocks; { + rtx insn; int i; ! if (!blocks) { ! for (insn = get_insns (); insn; insn = NEXT_INSN (insn)) ! if (INSN_P (insn)) ! free_INSN_LIST_list (&LOG_LINKS (insn)); } ! else ! EXECUTE_IF_SET_IN_SBITMAP (blocks, 0, i, { ! basic_block bb = BASIC_BLOCK (i); ! for (insn = bb->head; insn != NEXT_INSN (bb->end); ! insn = NEXT_INSN (insn)) ! if (INSN_P (insn)) ! free_INSN_LIST_list (&LOG_LINKS (insn)); ! }); } /* Given a register bitmap, turn on the bits in a HARD_REG_SET that *************** reg_set_to_hard_reg_set (to, from) *** 8404,8426 **** SET_HARD_REG_BIT (*to, i); }); } - - /* Called once at intialization time. */ - - void - init_flow () - { - static int initialized; - - if (!initialized) - { - gcc_obstack_init (&flow_obstack); - flow_firstobj = (char *) obstack_alloc (&flow_obstack, 0); - initialized = 1; - } - else - { - obstack_free (&flow_obstack, flow_firstobj); - flow_firstobj = (char *) obstack_alloc (&flow_obstack, 0); - } - } --- 4310,4312 ---- diff -Nrc3pad gcc-3.0.4/gcc/fold-const.c gcc-3.1/gcc/fold-const.c *** gcc-3.0.4/gcc/fold-const.c Mon Aug 6 20:33:40 2001 --- gcc-3.1/gcc/fold-const.c Tue Apr 23 23:20:00 2002 *************** *** 1,23 **** /* Fold a constant sub-tree into a single node for C-compiler Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /*@@ This file should be rewritten to use an arbitrary precision @@ representation for "struct tree_int_cst" and "struct tree_real_cst". --- 1,23 ---- /* Fold a constant sub-tree into a single node for C-compiler Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /*@@ This file should be rewritten to use an arbitrary precision @@ representation for "struct tree_int_cst" and "struct tree_real_cst". *************** Boston, MA 02111-1307, USA. */ *** 44,50 **** #include "config.h" #include "system.h" - #include #include "flags.h" #include "tree.h" #include "rtl.h" --- 44,49 ---- *************** Boston, MA 02111-1307, USA. */ *** 52,57 **** --- 51,57 ---- #include "tm_p.h" #include "toplev.h" #include "ggc.h" + #include "hashtab.h" static void encode PARAMS ((HOST_WIDE_INT *, unsigned HOST_WIDE_INT, *************** static void encode PARAMS ((HOST_WIDE_I *** 59,71 **** static void decode PARAMS ((HOST_WIDE_INT *, unsigned HOST_WIDE_INT *, HOST_WIDE_INT *)); static tree negate_expr PARAMS ((tree)); static tree split_tree PARAMS ((tree, enum tree_code, tree *, tree *, ! int)); static tree associate_trees PARAMS ((tree, tree, enum tree_code, tree)); ! static tree int_const_binop PARAMS ((enum tree_code, tree, tree, int, int)); static void const_binop_1 PARAMS ((PTR)); static tree const_binop PARAMS ((enum tree_code, tree, tree, int)); static void fold_convert_1 PARAMS ((PTR)); static tree fold_convert PARAMS ((tree, tree)); static enum tree_code invert_tree_comparison PARAMS ((enum tree_code)); --- 59,76 ---- static void decode PARAMS ((HOST_WIDE_INT *, unsigned HOST_WIDE_INT *, HOST_WIDE_INT *)); + #ifndef REAL_ARITHMETIC + static void exact_real_inverse_1 PARAMS ((PTR)); + #endif static tree negate_expr PARAMS ((tree)); static tree split_tree PARAMS ((tree, enum tree_code, tree *, tree *, ! tree *, int)); static tree associate_trees PARAMS ((tree, tree, enum tree_code, tree)); ! static tree int_const_binop PARAMS ((enum tree_code, tree, tree, int)); static void const_binop_1 PARAMS ((PTR)); static tree const_binop PARAMS ((enum tree_code, tree, tree, int)); + static hashval_t size_htab_hash PARAMS ((const void *)); + static int size_htab_eq PARAMS ((const void *, const void *)); static void fold_convert_1 PARAMS ((PTR)); static tree fold_convert PARAMS ((tree, tree)); static enum tree_code invert_tree_comparison PARAMS ((enum tree_code)); *************** static int count_cond PARAMS ((tree, in *** 104,113 **** static tree fold_binary_op_with_conditional_arg PARAMS ((enum tree_code, tree, tree, tree, int)); - #ifndef BRANCH_COST - #define BRANCH_COST 1 - #endif - #if defined(HOST_EBCDIC) /* bit 8 is significant in EBCDIC */ #define CHARMASK 0xff --- 109,114 ---- *************** mul_double (l1, h1, l2, h2, lv, hv) *** 319,326 **** HOST_WIDE_INT arg1[4]; HOST_WIDE_INT arg2[4]; HOST_WIDE_INT prod[4 * 2]; ! register unsigned HOST_WIDE_INT carry; ! register int i, j, k; unsigned HOST_WIDE_INT toplow, neglow; HOST_WIDE_INT tophigh, neghigh; --- 320,327 ---- HOST_WIDE_INT arg1[4]; HOST_WIDE_INT arg2[4]; HOST_WIDE_INT prod[4 * 2]; ! unsigned HOST_WIDE_INT carry; ! int i, j, k; unsigned HOST_WIDE_INT toplow, neglow; HOST_WIDE_INT tophigh, neghigh; *************** lshift_double (l1, h1, count, prec, lv, *** 378,383 **** --- 379,386 ---- HOST_WIDE_INT *hv; int arith; { + unsigned HOST_WIDE_INT signmask; + if (count < 0) { rshift_double (l1, h1, -count, prec, lv, hv, arith); *************** lshift_double (l1, h1, count, prec, lv, *** 407,412 **** --- 410,435 ---- | (l1 >> (HOST_BITS_PER_WIDE_INT - count - 1) >> 1)); *lv = l1 << count; } + + /* Sign extend all bits that are beyond the precision. */ + + signmask = -((prec > HOST_BITS_PER_WIDE_INT + ? (*hv >> (prec - HOST_BITS_PER_WIDE_INT - 1)) + : (*lv >> (prec - 1))) & 1); + + if (prec >= 2 * HOST_BITS_PER_WIDE_INT) + ; + else if (prec >= HOST_BITS_PER_WIDE_INT) + { + *hv &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT)); + *hv |= signmask << (prec - HOST_BITS_PER_WIDE_INT); + } + else + { + *hv = signmask; + *lv &= ~((unsigned HOST_WIDE_INT) (-1) << prec); + *lv |= signmask << prec; + } } /* Shift the doubleword integer in L1, H1 right by COUNT places *************** void *** 418,424 **** rshift_double (l1, h1, count, prec, lv, hv, arith) unsigned HOST_WIDE_INT l1; HOST_WIDE_INT h1, count; ! unsigned int prec ATTRIBUTE_UNUSED; unsigned HOST_WIDE_INT *lv; HOST_WIDE_INT *hv; int arith; --- 441,447 ---- rshift_double (l1, h1, count, prec, lv, hv, arith) unsigned HOST_WIDE_INT l1; HOST_WIDE_INT h1, count; ! unsigned int prec; unsigned HOST_WIDE_INT *lv; HOST_WIDE_INT *hv; int arith; *************** rshift_double (l1, h1, count, prec, lv, *** 438,458 **** { /* Shifting by the host word size is undefined according to the ANSI standard, so we must handle this as a special case. */ ! *hv = signmask; ! *lv = signmask; } else if (count >= HOST_BITS_PER_WIDE_INT) { ! *hv = signmask; ! *lv = ((signmask << (2 * HOST_BITS_PER_WIDE_INT - count - 1) << 1) ! | ((unsigned HOST_WIDE_INT) h1 >> (count - HOST_BITS_PER_WIDE_INT))); } else { *lv = ((l1 >> count) | ((unsigned HOST_WIDE_INT) h1 << (HOST_BITS_PER_WIDE_INT - count - 1) << 1)); ! *hv = ((signmask << (HOST_BITS_PER_WIDE_INT - count)) ! | ((unsigned HOST_WIDE_INT) h1 >> count)); } } --- 461,500 ---- { /* Shifting by the host word size is undefined according to the ANSI standard, so we must handle this as a special case. */ ! *hv = 0; ! *lv = 0; } else if (count >= HOST_BITS_PER_WIDE_INT) { ! *hv = 0; ! *lv = (unsigned HOST_WIDE_INT) h1 >> (count - HOST_BITS_PER_WIDE_INT); } else { + *hv = (unsigned HOST_WIDE_INT) h1 >> count; *lv = ((l1 >> count) | ((unsigned HOST_WIDE_INT) h1 << (HOST_BITS_PER_WIDE_INT - count - 1) << 1)); ! } ! ! /* Zero / sign extend all bits that are beyond the precision. */ ! ! if (count >= (HOST_WIDE_INT)prec) ! { ! *hv = signmask; ! *lv = signmask; ! } ! else if ((prec - count) >= 2 * HOST_BITS_PER_WIDE_INT) ! ; ! else if ((prec - count) >= HOST_BITS_PER_WIDE_INT) ! { ! *hv &= ~((HOST_WIDE_INT) (-1) << (prec - count - HOST_BITS_PER_WIDE_INT)); ! *hv |= signmask << (prec - count - HOST_BITS_PER_WIDE_INT); ! } ! else ! { ! *hv = signmask; ! *lv &= ~((unsigned HOST_WIDE_INT) (-1) << (prec - count)); ! *lv |= signmask << (prec - count); } } *************** rrotate_double (l1, h1, count, prec, lv, *** 512,518 **** CODE is a tree code for a kind of division, one of TRUNC_DIV_EXPR, FLOOR_DIV_EXPR, CEIL_DIV_EXPR, ROUND_DIV_EXPR or EXACT_DIV_EXPR ! It controls how the quotient is rounded to a integer. Return nonzero if the operation overflows. UNS nonzero says do unsigned division. */ --- 554,560 ---- CODE is a tree code for a kind of division, one of TRUNC_DIV_EXPR, FLOOR_DIV_EXPR, CEIL_DIV_EXPR, ROUND_DIV_EXPR or EXACT_DIV_EXPR ! It controls how the quotient is rounded to an integer. Return nonzero if the operation overflows. UNS nonzero says do unsigned division. */ *************** div_and_round_double (code, uns, *** 532,538 **** int quo_neg = 0; HOST_WIDE_INT num[4 + 1]; /* extra element for scaling. */ HOST_WIDE_INT den[4], quo[4]; ! register int i, j; unsigned HOST_WIDE_INT work; unsigned HOST_WIDE_INT carry = 0; unsigned HOST_WIDE_INT lnum = lnum_orig; --- 574,580 ---- int quo_neg = 0; HOST_WIDE_INT num[4 + 1]; /* extra element for scaling. */ HOST_WIDE_INT den[4], quo[4]; ! int i, j; unsigned HOST_WIDE_INT work; unsigned HOST_WIDE_INT carry = 0; unsigned HOST_WIDE_INT lnum = lnum_orig; *************** div_and_round_double (code, uns, *** 655,661 **** else quo_est = BASE - 1; ! /* Refine quo_est so it's usually correct, and at most one high. */ tmp = work - quo_est * den[den_hi_sig]; if (tmp < BASE && (den[den_hi_sig - 1] * quo_est --- 697,703 ---- else quo_est = BASE - 1; ! /* Refine quo_est so it's usually correct, and at most one high. */ tmp = work - quo_est * den[den_hi_sig]; if (tmp < BASE && (den[den_hi_sig - 1] * quo_est *************** target_isinf (x) *** 819,828 **** unsigned sign : 1; unsigned exponent : 11; unsigned mantissa1 : 20; ! unsigned mantissa2; } little_endian; struct { ! unsigned mantissa2; unsigned mantissa1 : 20; unsigned exponent : 11; unsigned sign : 1; --- 861,870 ---- unsigned sign : 1; unsigned exponent : 11; unsigned mantissa1 : 20; ! unsigned mantissa2 : 32; } little_endian; struct { ! unsigned mantissa2 : 32; unsigned mantissa1 : 20; unsigned exponent : 11; unsigned sign : 1; *************** target_isnan (x) *** 859,868 **** unsigned sign : 1; unsigned exponent : 11; unsigned mantissa1 : 20; ! unsigned mantissa2; } little_endian; struct { ! unsigned mantissa2; unsigned mantissa1 : 20; unsigned exponent : 11; unsigned sign : 1; --- 901,910 ---- unsigned sign : 1; unsigned exponent : 11; unsigned mantissa1 : 20; ! unsigned mantissa2 : 32; } little_endian; struct { ! unsigned mantissa2 : 32; unsigned mantissa1 : 20; unsigned exponent : 11; unsigned sign : 1; *************** target_negative (x) *** 899,908 **** unsigned sign : 1; unsigned exponent : 11; unsigned mantissa1 : 20; ! unsigned mantissa2; } little_endian; struct { ! unsigned mantissa2; unsigned mantissa1 : 20; unsigned exponent : 11; unsigned sign : 1; --- 941,950 ---- unsigned sign : 1; unsigned exponent : 11; unsigned mantissa1 : 20; ! unsigned mantissa2 : 32; } little_endian; struct { ! unsigned mantissa2 : 32; unsigned mantissa1 : 20; unsigned exponent : 11; unsigned sign : 1; *************** target_negative (x) *** 956,1007 **** /* Try to change R into its exact multiplicative inverse in machine mode MODE. Return nonzero function value if successful. */ ! int ! exact_real_inverse (mode, r) ! enum machine_mode mode; ! REAL_VALUE_TYPE *r; { ! jmp_buf float_error; union ! { ! double d; ! unsigned short i[4]; ! }x, t, y; #ifdef CHECK_FLOAT_VALUE int i; #endif - /* Usually disable if bounds checks are not reliable. */ - if ((HOST_FLOAT_FORMAT != TARGET_FLOAT_FORMAT) && !flag_pretend_float) - return 0; - /* Set array index to the less significant bits in the unions, depending ! on the endian-ness of the host doubles. ! Disable if insufficient information on the data structure. */ ! #if HOST_FLOAT_FORMAT == UNKNOWN_FLOAT_FORMAT ! return 0; ! #else ! #if HOST_FLOAT_FORMAT == VAX_FLOAT_FORMAT ! #define K 2 ! #else ! #if HOST_FLOAT_FORMAT == IBM_FLOAT_FORMAT ! #define K 2 #else ! #define K (2 * HOST_FLOAT_WORDS_BIG_ENDIAN) ! #endif ! #endif #endif - if (setjmp (float_error)) - { - /* Don't do the optimization if there was an arithmetic error. */ - fail: - set_float_handler (NULL_PTR); - return 0; - } - set_float_handler (float_error); - /* Domain check the argument. */ x.d = *r; if (x.d == 0.0) --- 998,1039 ---- /* Try to change R into its exact multiplicative inverse in machine mode MODE. Return nonzero function value if successful. */ + struct exact_real_inverse_args + { + REAL_VALUE_TYPE *r; + enum machine_mode mode; + int success; + }; ! static void ! exact_real_inverse_1 (p) ! PTR p; { ! struct exact_real_inverse_args *args = ! (struct exact_real_inverse_args *) p; ! ! enum machine_mode mode = args->mode; ! REAL_VALUE_TYPE *r = args->r; ! union ! { ! double d; ! unsigned short i[4]; ! } ! x, t, y; #ifdef CHECK_FLOAT_VALUE int i; #endif /* Set array index to the less significant bits in the unions, depending ! on the endian-ness of the host doubles. */ ! #if HOST_FLOAT_FORMAT == VAX_FLOAT_FORMAT \ ! || HOST_FLOAT_FORMAT == IBM_FLOAT_FORMAT ! # define K 2 #else ! # define K (2 * HOST_FLOAT_WORDS_BIG_ENDIAN) #endif /* Domain check the argument. */ x.d = *r; if (x.d == 0.0) *************** fail: *** 1040,1048 **** #endif /* Output the reciprocal and return success flag. */ - set_float_handler (NULL_PTR); *r = y.d; ! return 1; } /* Convert C99 hexadecimal floating point string constant S. Return --- 1072,1111 ---- #endif /* Output the reciprocal and return success flag. */ *r = y.d; ! args->success = 1; ! return; ! ! fail: ! args->success = 0; ! return; ! ! #undef K ! } ! ! ! int ! exact_real_inverse (mode, r) ! enum machine_mode mode; ! REAL_VALUE_TYPE *r; ! { ! struct exact_real_inverse_args args; ! ! /* Disable if insufficient information on the data structure. */ ! #if HOST_FLOAT_FORMAT == UNKNOWN_FLOAT_FORMAT ! return 0; ! #endif ! ! /* Usually disable if bounds checks are not reliable. */ ! if ((HOST_FLOAT_FORMAT != TARGET_FLOAT_FORMAT) && !flag_pretend_float) ! return 0; ! ! args.mode = mode; ! args.r = r; ! ! if (do_float_handler (exact_real_inverse_1, (PTR) &args)) ! return args.success; ! return 0; } /* Convert C99 hexadecimal floating point string constant S. Return *************** fail: *** 1051,1061 **** REAL_VALUE_TYPE real_hex_to_f (s, mode) ! char *s; enum machine_mode mode; { REAL_VALUE_TYPE ip; ! char *p = s; unsigned HOST_WIDE_INT low, high; int shcount, nrmcount, k; int sign, expsign, isfloat; --- 1114,1124 ---- REAL_VALUE_TYPE real_hex_to_f (s, mode) ! const char *s; enum machine_mode mode; { REAL_VALUE_TYPE ip; ! const char *p = s; unsigned HOST_WIDE_INT low, high; int shcount, nrmcount, k; int sign, expsign, isfloat; *************** real_hex_to_f (s, mode) *** 1101,1116 **** shcount = 0; while ((c = *p) != '\0') { ! if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'F') ! || (c >= 'a' && c <= 'f')) { ! k = c & CHARMASK; ! if (k >= 'a' && k <= 'f') ! k = k - 'a' + 10; ! else if (k >= 'A') ! k = k - 'A' + 10; ! else ! k = k - '0'; if ((high & 0xf0000000) == 0) { --- 1164,1172 ---- shcount = 0; while ((c = *p) != '\0') { ! if (ISXDIGIT (c)) { ! k = hex_value (c & CHARMASK); if ((high & 0xf0000000) == 0) { *************** negate_expr (t) *** 1311,1317 **** case MINUS_EXPR: /* - (A - B) -> B - A */ ! if (! FLOAT_TYPE_P (type) || flag_fast_math) return convert (type, fold (build (MINUS_EXPR, TREE_TYPE (t), TREE_OPERAND (t, 1), --- 1367,1373 ---- case MINUS_EXPR: /* - (A - B) -> B - A */ ! if (! FLOAT_TYPE_P (type) || flag_unsafe_math_optimizations) return convert (type, fold (build (MINUS_EXPR, TREE_TYPE (t), TREE_OPERAND (t, 1), *************** negate_expr (t) *** 1322,1341 **** break; } ! return convert (type, build1 (NEGATE_EXPR, TREE_TYPE (t), t)); } /* Split a tree IN into a constant, literal and variable parts that could be combined with CODE to make IN. "constant" means an expression with TREE_CONSTANT but that isn't an actual constant. CODE must be a commutative arithmetic operation. Store the constant part into *CONP, ! the literal in &LITP and return the variable part. If a part isn't present, set it to null. If the tree does not decompose in this way, return the entire tree as the variable part and the other parts as null. If CODE is PLUS_EXPR we also split trees that use MINUS_EXPR. In that ! case, we negate an operand that was subtracted. If NEGATE_P is true, we ! are negating all of IN. If IN is itself a literal or constant, return it as appropriate. --- 1378,1400 ---- break; } ! return convert (type, fold (build1 (NEGATE_EXPR, TREE_TYPE (t), t))); } /* Split a tree IN into a constant, literal and variable parts that could be combined with CODE to make IN. "constant" means an expression with TREE_CONSTANT but that isn't an actual constant. CODE must be a commutative arithmetic operation. Store the constant part into *CONP, ! the literal in *LITP and return the variable part. If a part isn't present, set it to null. If the tree does not decompose in this way, return the entire tree as the variable part and the other parts as null. If CODE is PLUS_EXPR we also split trees that use MINUS_EXPR. In that ! case, we negate an operand that was subtracted. Except if it is a ! literal for which we use *MINUS_LITP instead. ! ! If NEGATE_P is true, we are negating all of IN, again except a literal ! for which we use *MINUS_LITP instead. If IN is itself a literal or constant, return it as appropriate. *************** negate_expr (t) *** 1343,1360 **** same type as IN, but they will have the same signedness and mode. */ static tree ! split_tree (in, code, conp, litp, negate_p) tree in; enum tree_code code; ! tree *conp, *litp; int negate_p; { tree var = 0; *conp = 0; *litp = 0; ! /* Strip any conversions that don't change the machine mode or signedness. */ STRIP_SIGN_NOPS (in); if (TREE_CODE (in) == INTEGER_CST || TREE_CODE (in) == REAL_CST) --- 1402,1420 ---- same type as IN, but they will have the same signedness and mode. */ static tree ! split_tree (in, code, conp, litp, minus_litp, negate_p) tree in; enum tree_code code; ! tree *conp, *litp, *minus_litp; int negate_p; { tree var = 0; *conp = 0; *litp = 0; + *minus_litp = 0; ! /* Strip any conversions that don't change the machine mode or signedness. */ STRIP_SIGN_NOPS (in); if (TREE_CODE (in) == INTEGER_CST || TREE_CODE (in) == REAL_CST) *************** split_tree (in, code, conp, litp, negate *** 1385,1391 **** *conp = op1, neg_conp_p = neg1_p, op1 = 0; /* If we haven't dealt with either operand, this is not a case we can ! decompose. Otherwise, VAR is either of the ones remaining, if any. */ if (op0 != 0 && op1 != 0) var = in; else if (op0 != 0) --- 1445,1451 ---- *conp = op1, neg_conp_p = neg1_p, op1 = 0; /* If we haven't dealt with either operand, this is not a case we can ! decompose. Otherwise, VAR is either of the ones remaining, if any. */ if (op0 != 0 && op1 != 0) var = in; else if (op0 != 0) *************** split_tree (in, code, conp, litp, negate *** 1394,1402 **** var = op1, neg_var_p = neg1_p; /* Now do any needed negations. */ ! if (neg_litp_p) *litp = negate_expr (*litp); ! if (neg_conp_p) *conp = negate_expr (*conp); ! if (neg_var_p) var = negate_expr (var); } else if (TREE_CONSTANT (in)) *conp = in; --- 1454,1465 ---- var = op1, neg_var_p = neg1_p; /* Now do any needed negations. */ ! if (neg_litp_p) ! *minus_litp = *litp, *litp = 0; ! if (neg_conp_p) ! *conp = negate_expr (*conp); ! if (neg_var_p) ! var = negate_expr (var); } else if (TREE_CONSTANT (in)) *conp = in; *************** split_tree (in, code, conp, litp, negate *** 1405,1413 **** if (negate_p) { ! var = negate_expr (var); *conp = negate_expr (*conp); ! *litp = negate_expr (*litp); } return var; --- 1468,1479 ---- if (negate_p) { ! if (*litp) ! *minus_litp = *litp, *litp = 0; ! else if (*minus_litp) ! *litp = *minus_litp, *minus_litp = 0; *conp = negate_expr (*conp); ! var = negate_expr (var); } return var; *************** split_tree (in, code, conp, litp, negate *** 1415,1423 **** /* Re-associate trees split by the above function. T1 and T2 are either expressions to associate or null. Return the new expression, if any. If ! we build an operation, do it in TYPE and with CODE, except if CODE is a ! MINUS_EXPR, in which case we use PLUS_EXPR since split_tree will already ! have taken care of the negations. */ static tree associate_trees (t1, t2, code, type) --- 1481,1487 ---- /* Re-associate trees split by the above function. T1 and T2 are either expressions to associate or null. Return the new expression, if any. If ! we build an operation, do it in TYPE and with CODE. */ static tree associate_trees (t1, t2, code, type) *************** associate_trees (t1, t2, code, type) *** 1430,1438 **** else if (t2 == 0) return t1; - if (code == MINUS_EXPR) - code = PLUS_EXPR; - /* If either input is CODE, a PLUS_EXPR, or a MINUS_EXPR, don't try to fold this since we will have infinite recursion. But do deal with any NEGATE_EXPRs. */ --- 1494,1499 ---- *************** associate_trees (t1, t2, code, type) *** 1455,1468 **** /* Combine two integer constants ARG1 and ARG2 under operation CODE to produce a new constant. ! If NOTRUNC is nonzero, do not truncate the result to fit the data type. ! If FORSIZE is nonzero, compute overflow for unsigned types. */ static tree ! int_const_binop (code, arg1, arg2, notrunc, forsize) enum tree_code code; ! register tree arg1, arg2; ! int notrunc, forsize; { unsigned HOST_WIDE_INT int1l, int2l; HOST_WIDE_INT int1h, int2h; --- 1516,1528 ---- /* Combine two integer constants ARG1 and ARG2 under operation CODE to produce a new constant. ! If NOTRUNC is nonzero, do not truncate the result to fit the data type. */ static tree ! int_const_binop (code, arg1, arg2, notrunc) enum tree_code code; ! tree arg1, arg2; ! int notrunc; { unsigned HOST_WIDE_INT int1l, int2l; HOST_WIDE_INT int1h, int2h; *************** int_const_binop (code, arg1, arg2, notru *** 1470,1477 **** HOST_WIDE_INT hi; unsigned HOST_WIDE_INT garbagel; HOST_WIDE_INT garbageh; ! register tree t; ! int uns = TREE_UNSIGNED (TREE_TYPE (arg1)); int overflow = 0; int no_overflow = 0; --- 1530,1540 ---- HOST_WIDE_INT hi; unsigned HOST_WIDE_INT garbagel; HOST_WIDE_INT garbageh; ! tree t; ! tree type = TREE_TYPE (arg1); ! int uns = TREE_UNSIGNED (type); ! int is_sizetype ! = (TREE_CODE (type) == INTEGER_TYPE && TYPE_IS_SIZETYPE (type)); int overflow = 0; int no_overflow = 0; *************** int_const_binop (code, arg1, arg2, notru *** 1504,1510 **** /* It's unclear from the C standard whether shifts can overflow. The following code ignores overflow; perhaps a C standard interpretation ruling is needed. */ ! lshift_double (int1l, int1h, int2l, TYPE_PRECISION (TREE_TYPE (arg1)), &low, &hi, !uns); no_overflow = 1; break; --- 1567,1573 ---- /* It's unclear from the C standard whether shifts can overflow. The following code ignores overflow; perhaps a C standard interpretation ruling is needed. */ ! lshift_double (int1l, int1h, int2l, TYPE_PRECISION (type), &low, &hi, !uns); no_overflow = 1; break; *************** int_const_binop (code, arg1, arg2, notru *** 1512,1518 **** case RROTATE_EXPR: int2l = - int2l; case LROTATE_EXPR: ! lrotate_double (int1l, int1h, int2l, TYPE_PRECISION (TREE_TYPE (arg1)), &low, &hi); break; --- 1575,1581 ---- case RROTATE_EXPR: int2l = - int2l; case LROTATE_EXPR: ! lrotate_double (int1l, int1h, int2l, TYPE_PRECISION (type), &low, &hi); break; *************** int_const_binop (code, arg1, arg2, notru *** 1546,1552 **** break; } ! /* ... fall through ... */ case ROUND_DIV_EXPR: if (int2h == 0 && int2l == 1) --- 1609,1615 ---- break; } ! /* ... fall through ... */ case ROUND_DIV_EXPR: if (int2h == 0 && int2l == 1) *************** int_const_binop (code, arg1, arg2, notru *** 1560,1567 **** low = 1, hi = 0; break; } ! overflow = div_and_round_double (code, uns, ! int1l, int1h, int2l, int2h, &low, &hi, &garbagel, &garbageh); break; --- 1623,1629 ---- low = 1, hi = 0; break; } ! overflow = div_and_round_double (code, uns, int1l, int1h, int2l, int2h, &low, &hi, &garbagel, &garbageh); break; *************** int_const_binop (code, arg1, arg2, notru *** 1579,1585 **** break; } ! /* ... fall through ... */ case ROUND_MOD_EXPR: overflow = div_and_round_double (code, uns, --- 1641,1647 ---- break; } ! /* ... fall through ... */ case ROUND_MOD_EXPR: overflow = div_and_round_double (code, uns, *************** int_const_binop (code, arg1, arg2, notru *** 1609,1617 **** abort (); } ! if (forsize && hi == 0 && low < 10000 && overflow == 0 && ! TREE_OVERFLOW (arg1) && ! TREE_OVERFLOW (arg2)) ! return size_int_type_wide (low, TREE_TYPE (arg1)); else { t = build_int_2 (low, hi); --- 1671,1684 ---- abort (); } ! /* If this is for a sizetype, can be represented as one (signed) ! HOST_WIDE_INT word, and doesn't overflow, use size_int since it caches ! constants. */ ! if (is_sizetype ! && ((hi == 0 && (HOST_WIDE_INT) low >= 0) ! || (hi == -1 && (HOST_WIDE_INT) low < 0)) && overflow == 0 && ! TREE_OVERFLOW (arg1) && ! TREE_OVERFLOW (arg2)) ! return size_int_type_wide (low, type); else { t = build_int_2 (low, hi); *************** int_const_binop (code, arg1, arg2, notru *** 1619,1632 **** } TREE_OVERFLOW (t) ! = ((notrunc ? (!uns || forsize) && overflow ! : force_fit_type (t, (!uns || forsize) && overflow) && ! no_overflow) | TREE_OVERFLOW (arg1) | TREE_OVERFLOW (arg2)); /* If we're doing a size calculation, unsigned arithmetic does overflow. So check if force_fit_type truncated the value. */ ! if (forsize && ! TREE_OVERFLOW (t) && (TREE_INT_CST_HIGH (t) != hi || TREE_INT_CST_LOW (t) != low)) --- 1686,1701 ---- } TREE_OVERFLOW (t) ! = ((notrunc ! ? (!uns || is_sizetype) && overflow ! : (force_fit_type (t, (!uns || is_sizetype) && overflow) ! && ! no_overflow)) | TREE_OVERFLOW (arg1) | TREE_OVERFLOW (arg2)); /* If we're doing a size calculation, unsigned arithmetic does overflow. So check if force_fit_type truncated the value. */ ! if (is_sizetype && ! TREE_OVERFLOW (t) && (TREE_INT_CST_HIGH (t) != hi || TREE_INT_CST_LOW (t) != low)) *************** const_binop_1 (data) *** 1710,1723 **** static tree const_binop (code, arg1, arg2, notrunc) enum tree_code code; ! register tree arg1, arg2; int notrunc; { STRIP_NOPS (arg1); STRIP_NOPS (arg2); if (TREE_CODE (arg1) == INTEGER_CST) ! return int_const_binop (code, arg1, arg2, notrunc, 0); #if ! defined (REAL_IS_NOT_DOUBLE) || defined (REAL_ARITHMETIC) if (TREE_CODE (arg1) == REAL_CST) --- 1779,1792 ---- static tree const_binop (code, arg1, arg2, notrunc) enum tree_code code; ! tree arg1, arg2; int notrunc; { STRIP_NOPS (arg1); STRIP_NOPS (arg2); if (TREE_CODE (arg1) == INTEGER_CST) ! return int_const_binop (code, arg1, arg2, notrunc); #if ! defined (REAL_IS_NOT_DOUBLE) || defined (REAL_ARITHMETIC) if (TREE_CODE (arg1) == REAL_CST) *************** const_binop (code, arg1, arg2, notrunc) *** 1745,1755 **** args.code = code; if (do_float_handler (const_binop_1, (PTR) &args)) ! /* Receive output from const_binop_1. */ t = args.t; else { ! /* We got an exception from const_binop_1. */ t = copy_node (arg1); overflow = 1; } --- 1814,1824 ---- args.code = code; if (do_float_handler (const_binop_1, (PTR) &args)) ! /* Receive output from const_binop_1. */ t = args.t; else { ! /* We got an exception from const_binop_1. */ t = copy_node (arg1); overflow = 1; } *************** const_binop (code, arg1, arg2, notrunc) *** 1766,1777 **** #endif /* not REAL_IS_NOT_DOUBLE, or REAL_ARITHMETIC */ if (TREE_CODE (arg1) == COMPLEX_CST) { ! register tree type = TREE_TYPE (arg1); ! register tree r1 = TREE_REALPART (arg1); ! register tree i1 = TREE_IMAGPART (arg1); ! register tree r2 = TREE_REALPART (arg2); ! register tree i2 = TREE_IMAGPART (arg2); ! register tree t; switch (code) { --- 1835,1846 ---- #endif /* not REAL_IS_NOT_DOUBLE, or REAL_ARITHMETIC */ if (TREE_CODE (arg1) == COMPLEX_CST) { ! tree type = TREE_TYPE (arg1); ! tree r1 = TREE_REALPART (arg1); ! tree i1 = TREE_IMAGPART (arg1); ! tree r2 = TREE_REALPART (arg2); ! tree i2 = TREE_IMAGPART (arg2); ! tree t; switch (code) { *************** const_binop (code, arg1, arg2, notrunc) *** 1805,1811 **** case RDIV_EXPR: { ! register tree magsquared = const_binop (PLUS_EXPR, const_binop (MULT_EXPR, r2, r2, notrunc), const_binop (MULT_EXPR, i2, i2, notrunc), --- 1874,1880 ---- case RDIV_EXPR: { ! tree magsquared = const_binop (PLUS_EXPR, const_binop (MULT_EXPR, r2, r2, notrunc), const_binop (MULT_EXPR, i2, i2, notrunc), *************** const_binop (code, arg1, arg2, notrunc) *** 1842,1847 **** --- 1911,1949 ---- } return 0; } + + /* These are the hash table functions for the hash table of INTEGER_CST + nodes of a sizetype. */ + + /* Return the hash code code X, an INTEGER_CST. */ + + static hashval_t + size_htab_hash (x) + const void *x; + { + tree t = (tree) x; + + return (TREE_INT_CST_HIGH (t) ^ TREE_INT_CST_LOW (t) + ^ (hashval_t) ((long) TREE_TYPE (t) >> 3) + ^ (TREE_OVERFLOW (t) << 20)); + } + + /* Return non-zero if the value represented by *X (an INTEGER_CST tree node) + is the same as that given by *Y, which is the same. */ + + static int + size_htab_eq (x, y) + const void *x; + const void *y; + { + tree xt = (tree) x; + tree yt = (tree) y; + + return (TREE_INT_CST_HIGH (xt) == TREE_INT_CST_HIGH (yt) + && TREE_INT_CST_LOW (xt) == TREE_INT_CST_LOW (yt) + && TREE_TYPE (xt) == TREE_TYPE (yt) + && TREE_OVERFLOW (xt) == TREE_OVERFLOW (yt)); + } /* Return an INTEGER_CST with value whose low-order HOST_BITS_PER_WIDE_INT bits are given by NUMBER and of the sizetype represented by KIND. */ *************** size_int_type_wide (number, type) *** 1861,1900 **** HOST_WIDE_INT number; tree type; { ! /* Type-size nodes already made for small sizes. */ ! static tree size_table[2048 + 1]; ! static int init_p = 0; ! tree t; ! if (! init_p) { ! ggc_add_tree_root ((tree *) size_table, ! sizeof size_table / sizeof (tree)); ! init_p = 1; } ! /* If this is a positive number that fits in the table we use to hold ! cached entries, see if it is already in the table and put it there ! if not. */ ! if (number >= 0 && number < (int) ARRAY_SIZE (size_table)) ! { ! if (size_table[number] != 0) ! for (t = size_table[number]; t != 0; t = TREE_CHAIN (t)) ! if (TREE_TYPE (t) == type) ! return t; ! t = build_int_2 (number, 0); ! TREE_TYPE (t) = type; ! TREE_CHAIN (t) = size_table[number]; ! size_table[number] = t; return t; } ! ! t = build_int_2 (number, number < 0 ? -1 : 0); ! TREE_TYPE (t) = type; ! TREE_OVERFLOW (t) = TREE_CONSTANT_OVERFLOW (t) = force_fit_type (t, 0); ! return t; } /* Combine operands OP1 and OP2 with arithmetic operation CODE. CODE --- 1963,2000 ---- HOST_WIDE_INT number; tree type; { ! static htab_t size_htab = 0; ! static tree new_const = 0; ! PTR *slot; ! if (size_htab == 0) { ! size_htab = htab_create (1024, size_htab_hash, size_htab_eq, NULL); ! ggc_add_deletable_htab (size_htab, NULL, NULL); ! new_const = make_node (INTEGER_CST); ! ggc_add_tree_root (&new_const, 1); } ! /* Adjust NEW_CONST to be the constant we want. If it's already in the ! hash table, we return the value from the hash table. Otherwise, we ! place that in the hash table and make a new node for the next time. */ ! TREE_INT_CST_LOW (new_const) = number; ! TREE_INT_CST_HIGH (new_const) = number < 0 ? -1 : 0; ! TREE_TYPE (new_const) = type; ! TREE_OVERFLOW (new_const) = TREE_CONSTANT_OVERFLOW (new_const) ! = force_fit_type (new_const, 0); ! slot = htab_find_slot (size_htab, new_const, INSERT); ! if (*slot == 0) ! { ! tree t = new_const; + *slot = (PTR) new_const; + new_const = make_node (INTEGER_CST); return t; } ! else ! return (tree) *slot; } /* Combine operands OP1 and OP2 with arithmetic operation CODE. CODE *************** size_binop (code, arg0, arg1) *** 1926,1932 **** return arg1; /* Handle general case of two integer constants. */ ! return int_const_binop (code, arg0, arg1, 0, 1); } if (arg0 == error_mark_node || arg1 == error_mark_node) --- 2026,2032 ---- return arg1; /* Handle general case of two integer constants. */ ! return int_const_binop (code, arg0, arg1, 0); } if (arg0 == error_mark_node || arg1 == error_mark_node) *************** size_diffop (arg0, arg1) *** 1980,1988 **** /* This structure is used to communicate arguments to fold_convert_1. */ struct fc_args { ! tree arg1; /* Input: value to convert. */ ! tree type; /* Input: type to convert value to. */ ! tree t; /* Ouput: result of conversion. */ }; /* Function to convert floating-point constants, protected by floating --- 2080,2088 ---- /* This structure is used to communicate arguments to fold_convert_1. */ struct fc_args { ! tree arg1; /* Input: value to convert. */ ! tree type; /* Input: type to convert value to. */ ! tree t; /* Output: result of conversion. */ }; /* Function to convert floating-point constants, protected by floating *************** fold_convert_1 (data) *** 2004,2013 **** static tree fold_convert (t, arg1) ! register tree t; ! register tree arg1; { ! register tree type = TREE_TYPE (t); int overflow = 0; if (POINTER_TYPE_P (type) || INTEGRAL_TYPE_P (type)) --- 2104,2113 ---- static tree fold_convert (t, arg1) ! tree t; ! tree arg1; { ! tree type = TREE_TYPE (t); int overflow = 0; if (POINTER_TYPE_P (type) || INTEGRAL_TYPE_P (type)) *************** operand_equal_p (arg0, arg1, only_const) *** 2328,2333 **** --- 2428,2454 ---- && REAL_VALUES_IDENTICAL (TREE_REAL_CST (arg0), TREE_REAL_CST (arg1))); + case VECTOR_CST: + { + tree v1, v2; + + if (TREE_CONSTANT_OVERFLOW (arg0) + || TREE_CONSTANT_OVERFLOW (arg1)) + return 0; + + v1 = TREE_VECTOR_CST_ELTS (arg0); + v2 = TREE_VECTOR_CST_ELTS (arg1); + while (v1 && v2) + { + if (!operand_equal_p (v1, v2, only_const)) + return 0; + v1 = TREE_CHAIN (v1); + v2 = TREE_CHAIN (v2); + } + + return 1; + } + case COMPLEX_CST: return (operand_equal_p (TREE_REALPART (arg0), TREE_REALPART (arg1), only_const) *************** operand_equal_p (arg0, arg1, only_const) *** 2383,2389 **** case 'r': /* If either of the pointer (or reference) expressions we are dereferencing ! contain a side effect, these cannot be equal. */ if (TREE_SIDE_EFFECTS (arg0) || TREE_SIDE_EFFECTS (arg1)) return 0; --- 2504,2510 ---- case 'r': /* If either of the pointer (or reference) expressions we are dereferencing ! contain a side effect, these cannot be equal. */ if (TREE_SIDE_EFFECTS (arg0) || TREE_SIDE_EFFECTS (arg1)) return 0; *************** operand_equal_p (arg0, arg1, only_const) *** 2396,2401 **** --- 2517,2523 ---- case COMPONENT_REF: case ARRAY_REF: + case ARRAY_RANGE_REF: return (operand_equal_p (TREE_OPERAND (arg0, 0), TREE_OPERAND (arg1, 0), 0) && operand_equal_p (TREE_OPERAND (arg0, 1), *************** invert_truthvalue (arg) *** 2719,2725 **** if (TREE_CODE_CLASS (code) == '<') { if (FLOAT_TYPE_P (TREE_TYPE (TREE_OPERAND (arg, 0))) ! && !flag_fast_math && code != NE_EXPR && code != EQ_EXPR) return build1 (TRUTH_NOT_EXPR, type, arg); else return build (invert_tree_comparison (code), type, --- 2841,2849 ---- if (TREE_CODE_CLASS (code) == '<') { if (FLOAT_TYPE_P (TREE_TYPE (TREE_OPERAND (arg, 0))) ! && !flag_unsafe_math_optimizations ! && code != NE_EXPR ! && code != EQ_EXPR) return build1 (TRUTH_NOT_EXPR, type, arg); else return build (invert_tree_comparison (code), type, *************** optimize_bit_field_compare (code, compar *** 2917,2923 **** enum machine_mode lmode, rmode, nmode; int lunsignedp, runsignedp; int lvolatilep = 0, rvolatilep = 0; - unsigned int alignment; tree linner, rinner = NULL_TREE; tree mask; tree offset; --- 3041,3046 ---- *************** optimize_bit_field_compare (code, compar *** 2928,2934 **** do anything if the inner expression is a PLACEHOLDER_EXPR since we then will no longer be able to replace it. */ linner = get_inner_reference (lhs, &lbitsize, &lbitpos, &offset, &lmode, ! &lunsignedp, &lvolatilep, &alignment); if (linner == lhs || lbitsize == GET_MODE_BITSIZE (lmode) || lbitsize < 0 || offset != 0 || TREE_CODE (linner) == PLACEHOLDER_EXPR) return 0; --- 3051,3057 ---- do anything if the inner expression is a PLACEHOLDER_EXPR since we then will no longer be able to replace it. */ linner = get_inner_reference (lhs, &lbitsize, &lbitpos, &offset, &lmode, ! &lunsignedp, &lvolatilep); if (linner == lhs || lbitsize == GET_MODE_BITSIZE (lmode) || lbitsize < 0 || offset != 0 || TREE_CODE (linner) == PLACEHOLDER_EXPR) return 0; *************** optimize_bit_field_compare (code, compar *** 2936,2944 **** if (!const_p) { /* If this is not a constant, we can only do something if bit positions, ! sizes, and signedness are the same. */ rinner = get_inner_reference (rhs, &rbitsize, &rbitpos, &offset, &rmode, ! &runsignedp, &rvolatilep, &alignment); if (rinner == rhs || lbitpos != rbitpos || lbitsize != rbitsize || lunsignedp != runsignedp || offset != 0 --- 3059,3067 ---- if (!const_p) { /* If this is not a constant, we can only do something if bit positions, ! sizes, and signedness are the same. */ rinner = get_inner_reference (rhs, &rbitsize, &rbitpos, &offset, &rmode, ! &runsignedp, &rvolatilep); if (rinner == rhs || lbitpos != rbitpos || lbitsize != rbitsize || lunsignedp != runsignedp || offset != 0 *************** optimize_bit_field_compare (code, compar *** 3010,3016 **** convert (unsigned_type, rhs), size_int (lbitsize), 0))) { ! warning ("comparison is always %d due to width of bitfield", code == NE_EXPR); return convert (compare_type, (code == NE_EXPR --- 3133,3139 ---- convert (unsigned_type, rhs), size_int (lbitsize), 0))) { ! warning ("comparison is always %d due to width of bit-field", code == NE_EXPR); return convert (compare_type, (code == NE_EXPR *************** optimize_bit_field_compare (code, compar *** 3023,3029 **** size_int (lbitsize - 1), 0); if (! integer_zerop (tem) && ! integer_all_onesp (tem)) { ! warning ("comparison is always %d due to width of bitfield", code == NE_EXPR); return convert (compare_type, (code == NE_EXPR --- 3146,3152 ---- size_int (lbitsize - 1), 0); if (! integer_zerop (tem) && ! integer_all_onesp (tem)) { ! warning ("comparison is always %d due to width of bit-field", code == NE_EXPR); return convert (compare_type, (code == NE_EXPR *************** decode_field_reference (exp, pbitsize, p *** 3096,3102 **** tree mask, inner, offset; tree unsigned_type; unsigned int precision; - unsigned int alignment; /* All the optimizations using this function assume integer fields. There are problems with FP fields since the type_for_size call --- 3219,3224 ---- *************** decode_field_reference (exp, pbitsize, p *** 3116,3122 **** } inner = get_inner_reference (exp, pbitsize, pbitpos, &offset, pmode, ! punsignedp, pvolatilep, &alignment); if ((inner == exp && and_mask == 0) || *pbitsize < 0 || offset != 0 || TREE_CODE (inner) == PLACEHOLDER_EXPR) --- 3238,3244 ---- } inner = get_inner_reference (exp, pbitsize, pbitpos, &offset, pmode, ! punsignedp, pvolatilep); if ((inner == exp && and_mask == 0) || *pbitsize < 0 || offset != 0 || TREE_CODE (inner) == PLACEHOLDER_EXPR) *************** range_binop (code, type, arg0, upper0_p, *** 3262,3268 **** the same. But, this is computer arithmetic, where numbers are finite. We can therefore make the transformation of any unbounded range with the value Z, Z being greater than any representable number. This permits ! us to treat unbounded ranges as equal. */ sgn0 = arg0 != 0 ? 0 : (upper0_p ? 1 : -1); sgn1 = arg1 != 0 ? 0 : (upper1_p ? 1 : -1); switch (code) --- 3384,3390 ---- the same. But, this is computer arithmetic, where numbers are finite. We can therefore make the transformation of any unbounded range with the value Z, Z being greater than any representable number. This permits ! us to treat unbounded ranges as equal. */ sgn0 = arg0 != 0 ? 0 : (upper0_p ? 1 : -1); sgn1 = arg1 != 0 ? 0 : (upper1_p ? 1 : -1); switch (code) *************** optimize_minmax_comparison (t) *** 4342,4349 **** other operations already in T. WIDE_TYPE, if non-null, is a type that should be used for the computation if wider than our type. ! For example, if we are dividing (X * 8) + (Y + 16) by 4, we can return ! (X * 2) + (Y + 4). We must, however, be assured that either the original expression would not overflow or that overflow is undefined for the type in the language in question. --- 4464,4471 ---- other operations already in T. WIDE_TYPE, if non-null, is a type that should be used for the computation if wider than our type. ! For example, if we are dividing (X * 8) + (Y * 16) by 4, we can return ! (X * 2) + (Y * 4). We must, however, be assured that either the original expression would not overflow or that overflow is undefined for the type in the language in question. *************** extract_muldiv (t, c, code, wide_type) *** 4452,4458 **** if (SAVE_EXPR_RTL (t) == 0 && ! TREE_SIDE_EFFECTS (TREE_OPERAND (t, 0)) && 0 != (t1 = extract_muldiv (TREE_OPERAND (t, 0), c, code, wide_type))) ! return save_expr (t1); break; case LSHIFT_EXPR: case RSHIFT_EXPR: --- 4574,4587 ---- if (SAVE_EXPR_RTL (t) == 0 && ! TREE_SIDE_EFFECTS (TREE_OPERAND (t, 0)) && 0 != (t1 = extract_muldiv (TREE_OPERAND (t, 0), c, code, wide_type))) ! { ! t1 = save_expr (t1); ! if (SAVE_EXPR_PERSISTENT_P (t) && TREE_CODE (t1) == SAVE_EXPR) ! SAVE_EXPR_PERSISTENT_P (t1) = 1; ! if (is_pending_size (t)) ! put_pending_size (t1); ! return t1; ! } break; case LSHIFT_EXPR: case RSHIFT_EXPR: *************** extract_muldiv (t, c, code, wide_type) *** 4505,4517 **** { if (code == CEIL_DIV_EXPR) code = FLOOR_DIV_EXPR; - else if (code == CEIL_MOD_EXPR) - code = FLOOR_MOD_EXPR; else if (code == FLOOR_DIV_EXPR) code = CEIL_DIV_EXPR; ! else if (code == FLOOR_MOD_EXPR) ! code = CEIL_MOD_EXPR; ! else if (code != MULT_EXPR) break; } --- 4634,4643 ---- { if (code == CEIL_DIV_EXPR) code = FLOOR_DIV_EXPR; else if (code == FLOOR_DIV_EXPR) code = CEIL_DIV_EXPR; ! else if (code != MULT_EXPR ! && code != CEIL_MOD_EXPR && code != FLOOR_MOD_EXPR) break; } *************** extract_muldiv (t, c, code, wide_type) *** 4542,4548 **** /* The last case is if we are a multiply. In that case, we can apply the distributive law to commute the multiply and addition ! if the multiplication of the constants doesn't overflow. */ if (code == MULT_EXPR) return fold (build (tcode, ctype, fold (build (code, ctype, convert (ctype, op0), --- 4668,4674 ---- /* The last case is if we are a multiply. In that case, we can apply the distributive law to commute the multiply and addition ! if the multiplication of the constants doesn't overflow. */ if (code == MULT_EXPR) return fold (build (tcode, ctype, fold (build (code, ctype, convert (ctype, op0), *************** extract_muldiv (t, c, code, wide_type) *** 4560,4566 **** && integer_zerop (const_binop (TRUNC_MOD_EXPR, op1, c, 0))) return omit_one_operand (type, integer_zero_node, op0); ! /* ... fall through ... */ case TRUNC_DIV_EXPR: case CEIL_DIV_EXPR: case FLOOR_DIV_EXPR: case ROUND_DIV_EXPR: case EXACT_DIV_EXPR: --- 4686,4692 ---- && integer_zerop (const_binop (TRUNC_MOD_EXPR, op1, c, 0))) return omit_one_operand (type, integer_zero_node, op0); ! /* ... fall through ... */ case TRUNC_DIV_EXPR: case CEIL_DIV_EXPR: case FLOOR_DIV_EXPR: case ROUND_DIV_EXPR: case EXACT_DIV_EXPR: *************** extract_muldiv (t, c, code, wide_type) *** 4591,4597 **** multiple of the other, in which case we replace this with either an operation or CODE or TCODE. ! If we have an unsigned type that is not a sizetype, we canot do this since it will change the result if the original computation overflowed. */ if ((! TREE_UNSIGNED (ctype) --- 4717,4723 ---- multiple of the other, in which case we replace this with either an operation or CODE or TCODE. ! If we have an unsigned type that is not a sizetype, we cannot do this since it will change the result if the original computation overflowed. */ if ((! TREE_UNSIGNED (ctype) *************** fold_binary_op_with_conditional_arg (cod *** 4724,4730 **** side of the expression to be executed if the condition is true will be pointed to by TRUE_LHS. Similarly, the right-hand side of the expression to be executed if the condition is true will be ! pointed to by TRUE_RHS. FALSE_LHS and FALSE_RHS are analagous -- but apply to the expression to be executed if the conditional is false. */ tree *true_lhs; --- 4850,4856 ---- side of the expression to be executed if the condition is true will be pointed to by TRUE_LHS. Similarly, the right-hand side of the expression to be executed if the condition is true will be ! pointed to by TRUE_RHS. FALSE_LHS and FALSE_RHS are analogous -- but apply to the expression to be executed if the conditional is false. */ tree *true_lhs; *************** tree *** 4841,4853 **** fold (expr) tree expr; { ! register tree t = expr; tree t1 = NULL_TREE; tree tem; tree type = TREE_TYPE (expr); ! register tree arg0 = NULL_TREE, arg1 = NULL_TREE; ! register enum tree_code code = TREE_CODE (t); ! register int kind = TREE_CODE_CLASS (code); int invert; /* WINS will be nonzero when the switch is done if all operands are constant. */ --- 4967,4979 ---- fold (expr) tree expr; { ! tree t = expr; tree t1 = NULL_TREE; tree tem; tree type = TREE_TYPE (expr); ! tree arg0 = NULL_TREE, arg1 = NULL_TREE; ! enum tree_code code = TREE_CODE (t); ! int kind = TREE_CODE_CLASS (code); int invert; /* WINS will be nonzero when the switch is done if all operands are constant. */ *************** fold (expr) *** 4855,4861 **** /* Don't try to process an RTL_EXPR since its operands aren't trees. Likewise for a SAVE_EXPR that's already been evaluated. */ ! if (code == RTL_EXPR || (code == SAVE_EXPR && SAVE_EXPR_RTL (t)) != 0) return t; /* Return right away if a constant. */ --- 4981,4987 ---- /* Don't try to process an RTL_EXPR since its operands aren't trees. Likewise for a SAVE_EXPR that's already been evaluated. */ ! if (code == RTL_EXPR || (code == SAVE_EXPR && SAVE_EXPR_RTL (t) != 0)) return t; /* Return right away if a constant. */ *************** fold (expr) *** 4894,4901 **** } else if (IS_EXPR_CODE_CLASS (kind) || kind == 'r') { ! register int len = TREE_CODE_LENGTH (code); ! register int i; for (i = 0; i < len; i++) { tree op = TREE_OPERAND (t, i); --- 5020,5027 ---- } else if (IS_EXPR_CODE_CLASS (kind) || kind == 'r') { ! int len = first_rtl_op (code); ! int i; for (i = 0; i < len; i++) { tree op = TREE_OPERAND (t, i); *************** fold (expr) *** 5080,5085 **** --- 5206,5212 ---- { case INTEGER_CST: case REAL_CST: + case VECTOR_CST: case STRING_CST: case COMPLEX_CST: case CONSTRUCTOR: *************** fold (expr) *** 5198,5203 **** --- 5325,5336 ---- } return fold_convert (t, arg0); + case VIEW_CONVERT_EXPR: + if (TREE_CODE (TREE_OPERAND (t, 0)) == VIEW_CONVERT_EXPR) + return build1 (VIEW_CONVERT_EXPR, type, + TREE_OPERAND (TREE_OPERAND (t, 0), 0)); + return t; + #if 0 /* This loses on &"foo"[0]. */ case ARRAY_REF: { *************** fold (expr) *** 5255,5261 **** /* Convert - (a - b) to (b - a) for non-floating-point. */ else if (TREE_CODE (arg0) == MINUS_EXPR ! && (! FLOAT_TYPE_P (type) || flag_fast_math)) return build (MINUS_EXPR, type, TREE_OPERAND (arg0, 1), TREE_OPERAND (arg0, 0)); --- 5388,5394 ---- /* Convert - (a - b) to (b - a) for non-floating-point. */ else if (TREE_CODE (arg0) == MINUS_EXPR ! && (! FLOAT_TYPE_P (type) || flag_unsafe_math_optimizations)) return build (MINUS_EXPR, type, TREE_OPERAND (arg0, 1), TREE_OPERAND (arg0, 0)); *************** fold (expr) *** 5458,5464 **** } /* In IEEE floating point, x+0 may not equal x. */ else if ((TARGET_FLOAT_FORMAT != IEEE_FLOAT_FORMAT ! || flag_fast_math) && real_zerop (arg1)) return non_lvalue (convert (type, arg0)); /* x+(-0) equals x, even for IEEE. */ --- 5591,5597 ---- } /* In IEEE floating point, x+0 may not equal x. */ else if ((TARGET_FLOAT_FORMAT != IEEE_FLOAT_FORMAT ! || flag_unsafe_math_optimizations) && real_zerop (arg1)) return non_lvalue (convert (type, arg0)); /* x+(-0) equals x, even for IEEE. */ *************** fold (expr) *** 5472,5478 **** /* (A << B) + (A >> (Z - B)) if A is unsigned and Z is the size of A is a rotate of A by B bits. */ { ! register enum tree_code code0, code1; code0 = TREE_CODE (arg0); code1 = TREE_CODE (arg1); if (((code0 == RSHIFT_EXPR && code1 == LSHIFT_EXPR) --- 5605,5611 ---- /* (A << B) + (A >> (Z - B)) if A is unsigned and Z is the size of A is a rotate of A by B bits. */ { ! enum tree_code code0, code1; code0 = TREE_CODE (arg0); code1 = TREE_CODE (arg1); if (((code0 == RSHIFT_EXPR && code1 == LSHIFT_EXPR) *************** fold (expr) *** 5481,5488 **** TREE_OPERAND (arg1, 0), 0) && TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (arg0, 0)))) { ! register tree tree01, tree11; ! register enum tree_code code01, code11; tree01 = TREE_OPERAND (arg0, 1); tree11 = TREE_OPERAND (arg1, 1); --- 5614,5621 ---- TREE_OPERAND (arg1, 0), 0) && TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (arg0, 0)))) { ! tree tree01, tree11; ! enum tree_code code01, code11; tree01 = TREE_OPERAND (arg0, 1); tree11 = TREE_OPERAND (arg1, 1); *************** fold (expr) *** 5542,5571 **** parentheses. Rather than remember where the parentheses were, we don't associate floats at all. It shouldn't matter much. However, associating multiplications is only very slightly inaccurate, so do ! that if -ffast-math is specified. */ if (! wins && (! FLOAT_TYPE_P (type) ! || (flag_fast_math && code != MULT_EXPR))) { ! tree var0, con0, lit0, var1, con1, lit1; /* Split both trees into variables, constants, and literals. Then associate each group together, the constants with literals, then the result with variables. This increases the chances of literals being recombined later and of generating relocatable ! expressions for the sum of a constant and literal. */ ! var0 = split_tree (arg0, code, &con0, &lit0, 0); ! var1 = split_tree (arg1, code, &con1, &lit1, code == MINUS_EXPR); /* Only do something if we found more than two objects. Otherwise, nothing has changed and we risk infinite recursion. */ ! if (2 < ((var0 != 0) + (var1 != 0) + (con0 != 0) + (con1 != 0) ! + (lit0 != 0) + (lit1 != 0))) { var0 = associate_trees (var0, var1, code, type); con0 = associate_trees (con0, con1, code, type); lit0 = associate_trees (lit0, lit1, code, type); con0 = associate_trees (con0, lit0, code, type); return convert (type, associate_trees (var0, con0, code, type)); } --- 5675,5748 ---- parentheses. Rather than remember where the parentheses were, we don't associate floats at all. It shouldn't matter much. However, associating multiplications is only very slightly inaccurate, so do ! that if -funsafe-math-optimizations is specified. */ if (! wins && (! FLOAT_TYPE_P (type) ! || (flag_unsafe_math_optimizations && code == MULT_EXPR))) { ! tree var0, con0, lit0, minus_lit0; ! tree var1, con1, lit1, minus_lit1; /* Split both trees into variables, constants, and literals. Then associate each group together, the constants with literals, then the result with variables. This increases the chances of literals being recombined later and of generating relocatable ! expressions for the sum of a constant and literal. */ ! var0 = split_tree (arg0, code, &con0, &lit0, &minus_lit0, 0); ! var1 = split_tree (arg1, code, &con1, &lit1, &minus_lit1, ! code == MINUS_EXPR); /* Only do something if we found more than two objects. Otherwise, nothing has changed and we risk infinite recursion. */ ! if (2 < ((var0 != 0) + (var1 != 0) ! + (con0 != 0) + (con1 != 0) ! + (lit0 != 0) + (lit1 != 0) ! + (minus_lit0 != 0) + (minus_lit1 != 0))) { + /* Recombine MINUS_EXPR operands by using PLUS_EXPR. */ + if (code == MINUS_EXPR) + code = PLUS_EXPR; + var0 = associate_trees (var0, var1, code, type); con0 = associate_trees (con0, con1, code, type); lit0 = associate_trees (lit0, lit1, code, type); + minus_lit0 = associate_trees (minus_lit0, minus_lit1, code, type); + + /* Preserve the MINUS_EXPR if the negative part of the literal is + greater than the positive part. Otherwise, the multiplicative + folding code (i.e extract_muldiv) may be fooled in case + unsigned constants are substracted, like in the following + example: ((X*2 + 4) - 8U)/2. */ + if (minus_lit0 && lit0) + { + if (tree_int_cst_lt (lit0, minus_lit0)) + { + minus_lit0 = associate_trees (minus_lit0, lit0, + MINUS_EXPR, type); + lit0 = 0; + } + else + { + lit0 = associate_trees (lit0, minus_lit0, + MINUS_EXPR, type); + minus_lit0 = 0; + } + } + if (minus_lit0) + { + if (con0 == 0) + return convert (type, associate_trees (var0, minus_lit0, + MINUS_EXPR, type)); + else + { + con0 = associate_trees (con0, minus_lit0, + MINUS_EXPR, type); + return convert (type, associate_trees (var0, con0, + PLUS_EXPR, type)); + } + } + con0 = associate_trees (con0, lit0, code, type); return convert (type, associate_trees (var0, con0, code, type)); } *************** fold (expr) *** 5623,5629 **** } else if (TARGET_FLOAT_FORMAT != IEEE_FLOAT_FORMAT ! || flag_fast_math) { /* Except with IEEE floating point, 0-x equals -x. */ if (! wins && real_zerop (arg0)) --- 5800,5806 ---- } else if (TARGET_FLOAT_FORMAT != IEEE_FLOAT_FORMAT ! || flag_unsafe_math_optimizations) { /* Except with IEEE floating point, 0-x equals -x. */ if (! wins && real_zerop (arg0)) *************** fold (expr) *** 5639,5645 **** Also note that operand_equal_p is always false if an operand is volatile. */ ! if ((! FLOAT_TYPE_P (type) || flag_fast_math) && operand_equal_p (arg0, arg1, 0)) return convert (type, integer_zero_node); --- 5816,5822 ---- Also note that operand_equal_p is always false if an operand is volatile. */ ! if ((! FLOAT_TYPE_P (type) || flag_unsafe_math_optimizations) && operand_equal_p (arg0, arg1, 0)) return convert (type, integer_zero_node); *************** fold (expr) *** 5678,5684 **** { /* x*0 is 0, except for IEEE floating point. */ if ((TARGET_FLOAT_FORMAT != IEEE_FLOAT_FORMAT ! || flag_fast_math) && real_zerop (arg1)) return omit_one_operand (type, arg1, arg0); /* In IEEE floating point, x*1 is not equivalent to x for snans. --- 5855,5861 ---- { /* x*0 is 0, except for IEEE floating point. */ if ((TARGET_FLOAT_FORMAT != IEEE_FLOAT_FORMAT ! || flag_unsafe_math_optimizations) && real_zerop (arg1)) return omit_one_operand (type, arg1, arg0); /* In IEEE floating point, x*1 is not equivalent to x for snans. *************** fold (expr) *** 5835,5850 **** /* If ARG1 is a constant, we can convert this to a multiply by the reciprocal. This does not have the same rounding properties, ! so only do this if -ffast-math. We can actually always safely ! do it if ARG1 is a power of two, but it's hard to tell if it is ! or not in a portable manner. */ if (TREE_CODE (arg1) == REAL_CST) { ! if (flag_fast_math && 0 != (tem = const_binop (code, build_real (type, dconst1), arg1, 0))) return fold (build (MULT_EXPR, type, arg0, tem)); ! /* Find the reciprocal if optimizing and the result is exact. */ else if (optimize) { REAL_VALUE_TYPE r; --- 6012,6027 ---- /* If ARG1 is a constant, we can convert this to a multiply by the reciprocal. This does not have the same rounding properties, ! so only do this if -funsafe-math-optimizations. We can actually ! always safely do it if ARG1 is a power of two, but it's hard to ! tell if it is or not in a portable manner. */ if (TREE_CODE (arg1) == REAL_CST) { ! if (flag_unsafe_math_optimizations && 0 != (tem = const_binop (code, build_real (type, dconst1), arg1, 0))) return fold (build (MULT_EXPR, type, arg0, tem)); ! /* Find the reciprocal if optimizing and the result is exact. */ else if (optimize) { REAL_VALUE_TYPE r; *************** fold (expr) *** 5856,5861 **** --- 6033,6055 ---- } } } + /* Convert A/B/C to A/(B*C). */ + if (flag_unsafe_math_optimizations + && TREE_CODE (arg0) == RDIV_EXPR) + { + return fold (build (RDIV_EXPR, type, TREE_OPERAND (arg0, 0), + build (MULT_EXPR, type, TREE_OPERAND (arg0, 1), + arg1))); + } + /* Convert A/(B/C) to (A/B)*C. */ + if (flag_unsafe_math_optimizations + && TREE_CODE (arg1) == RDIV_EXPR) + { + return fold (build (MULT_EXPR, type, + build (RDIV_EXPR, type, arg0, + TREE_OPERAND (arg1, 0)), + TREE_OPERAND (arg1, 1))); + } goto binary; case TRUNC_DIV_EXPR: *************** fold (expr) *** 6018,6024 **** truth and/or operations and the transformation will still be valid. Also note that we only care about order for the ANDIF and ORIF operators. If B contains side effects, this ! might change the truth-value of A. */ if (TREE_CODE (arg0) == TREE_CODE (arg1) && (TREE_CODE (arg0) == TRUTH_ANDIF_EXPR || TREE_CODE (arg0) == TRUTH_ORIF_EXPR --- 6212,6218 ---- truth and/or operations and the transformation will still be valid. Also note that we only care about order for the ANDIF and ORIF operators. If B contains side effects, this ! might change the truth-value of A. */ if (TREE_CODE (arg0) == TREE_CODE (arg1) && (TREE_CODE (arg0) == TRUTH_ANDIF_EXPR || TREE_CODE (arg0) == TRUTH_ORIF_EXPR *************** fold (expr) *** 6489,6495 **** case EQ_EXPR: case GE_EXPR: case LE_EXPR: ! if (INTEGRAL_TYPE_P (TREE_TYPE (arg0))) return constant_boolean_node (1, type); code = EQ_EXPR; TREE_SET_CODE (t, code); --- 6683,6689 ---- case EQ_EXPR: case GE_EXPR: case LE_EXPR: ! if (! FLOAT_TYPE_P (TREE_TYPE (arg0))) return constant_boolean_node (1, type); code = EQ_EXPR; TREE_SET_CODE (t, code); *************** fold (expr) *** 6497,6503 **** case NE_EXPR: /* For NE, we can only do this simplification if integer. */ ! if (! INTEGRAL_TYPE_P (TREE_TYPE (arg0))) break; /* ... fall through ... */ case GT_EXPR: --- 6691,6697 ---- case NE_EXPR: /* For NE, we can only do this simplification if integer. */ ! if (FLOAT_TYPE_P (TREE_TYPE (arg0))) break; /* ... fall through ... */ case GT_EXPR: *************** fold (expr) *** 6576,6582 **** } else if (TREE_INT_CST_HIGH (arg1) == -1 ! && (- TREE_INT_CST_LOW (arg1) == ((unsigned HOST_WIDE_INT) 1 << (width - 1))) && ! TREE_UNSIGNED (TREE_TYPE (arg1))) switch (TREE_CODE (t)) --- 6770,6776 ---- } else if (TREE_INT_CST_HIGH (arg1) == -1 ! && (TREE_INT_CST_LOW (arg1) == ((unsigned HOST_WIDE_INT) 1 << (width - 1))) && ! TREE_UNSIGNED (TREE_TYPE (arg1))) switch (TREE_CODE (t)) *************** fold (expr) *** 6602,6613 **** } else if (TREE_INT_CST_HIGH (arg1) == 0 ! && (TREE_INT_CST_LOW (arg1) ! == ((unsigned HOST_WIDE_INT) 1 << (width - 1)) - 1) ! && TREE_UNSIGNED (TREE_TYPE (arg1)) ! /* signed_type does not work on pointer types. */ ! && INTEGRAL_TYPE_P (TREE_TYPE (arg0))) ! switch (TREE_CODE (t)) { case LE_EXPR: --- 6796,6806 ---- } else if (TREE_INT_CST_HIGH (arg1) == 0 ! && (TREE_INT_CST_LOW (arg1) ! == ((unsigned HOST_WIDE_INT) 1 << (width - 1)) - 1) ! && TREE_UNSIGNED (TREE_TYPE (arg1)) ! /* signed_type does not work on pointer types. */ ! && INTEGRAL_TYPE_P (TREE_TYPE (arg1))) switch (TREE_CODE (t)) { case LE_EXPR: *************** fold (expr) *** 6626,6631 **** --- 6819,6850 ---- default: break; } + + else if (TREE_INT_CST_HIGH (arg1) == 0 + && (TREE_INT_CST_LOW (arg1) + == ((unsigned HOST_WIDE_INT) 2 << (width - 1)) - 1) + && TREE_UNSIGNED (TREE_TYPE (arg1))) + switch (TREE_CODE (t)) + { + case GT_EXPR: + return omit_one_operand (type, + convert (type, integer_zero_node), + arg0); + case GE_EXPR: + TREE_SET_CODE (t, EQ_EXPR); + break; + + case LE_EXPR: + return omit_one_operand (type, + convert (type, integer_one_node), + arg0); + case LT_EXPR: + TREE_SET_CODE (t, NE_EXPR); + break; + + default: + break; + } } } *************** fold (expr) *** 6770,6775 **** --- 6989,7021 ---- fold (build (code, type, imag0, imag1)))); } + /* Optimize comparisons of strlen vs zero to a compare of the + first character of the string vs zero. To wit, + strlen(ptr) == 0 => *ptr == 0 + strlen(ptr) != 0 => *ptr != 0 + Other cases should reduce to one of these two (or a constant) + due to the return value of strlen being unsigned. */ + if ((code == EQ_EXPR || code == NE_EXPR) + && integer_zerop (arg1) + && TREE_CODE (arg0) == CALL_EXPR + && TREE_CODE (TREE_OPERAND (arg0, 0)) == ADDR_EXPR) + { + tree fndecl = TREE_OPERAND (TREE_OPERAND (arg0, 0), 0); + tree arglist; + + if (TREE_CODE (fndecl) == FUNCTION_DECL + && DECL_BUILT_IN (fndecl) + && DECL_BUILT_IN_CLASS (fndecl) != BUILT_IN_MD + && DECL_FUNCTION_CODE (fndecl) == BUILT_IN_STRLEN + && (arglist = TREE_OPERAND (arg0, 1)) + && TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) == POINTER_TYPE + && ! TREE_CHAIN (arglist)) + return fold (build (code, type, + build1 (INDIRECT_REF, char_type_node, + TREE_VALUE(arglist)), + integer_zero_node)); + } + /* From here on, the only cases we handle are when the result is known to be a constant. *************** fold (expr) *** 6902,6908 **** if (TREE_CODE_CLASS (TREE_CODE (arg0)) == '<' && (TARGET_FLOAT_FORMAT != IEEE_FLOAT_FORMAT || ! FLOAT_TYPE_P (TREE_TYPE (TREE_OPERAND (arg0, 0))) ! || flag_fast_math) && operand_equal_for_comparison_p (TREE_OPERAND (arg0, 0), arg1, TREE_OPERAND (arg0, 1))) { --- 7148,7154 ---- if (TREE_CODE_CLASS (TREE_CODE (arg0)) == '<' && (TARGET_FLOAT_FORMAT != IEEE_FLOAT_FORMAT || ! FLOAT_TYPE_P (TREE_TYPE (TREE_OPERAND (arg0, 0))) ! || flag_unsafe_math_optimizations) && operand_equal_for_comparison_p (TREE_OPERAND (arg0, 0), arg1, TREE_OPERAND (arg0, 1))) { *************** fold (expr) *** 6911,6917 **** STRIP_NOPS (arg2); ! /* If we have A op 0 ? A : -A, this is A, -A, abs (A), or abs (-A), depending on the comparison operation. */ if ((FLOAT_TYPE_P (TREE_TYPE (TREE_OPERAND (arg0, 1))) ? real_zerop (TREE_OPERAND (arg0, 1)) --- 7157,7163 ---- STRIP_NOPS (arg2); ! /* If we have A op 0 ? A : -A, this is A, -A, abs (A), or -abs (A), depending on the comparison operation. */ if ((FLOAT_TYPE_P (TREE_TYPE (TREE_OPERAND (arg0, 1))) ? real_zerop (TREE_OPERAND (arg0, 1)) *************** multiple_of_p (type, top, bottom) *** 7315,7321 **** < TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (top, 0))))) return 0; ! /* .. fall through ... */ case SAVE_EXPR: return multiple_of_p (type, TREE_OPERAND (top, 0), bottom); --- 7561,7567 ---- < TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (top, 0))))) return 0; ! /* .. fall through ... */ case SAVE_EXPR: return multiple_of_p (type, TREE_OPERAND (top, 0), bottom); *************** tree_expr_nonnegative_p (t) *** 7342,7354 **** --- 7588,7628 ---- { switch (TREE_CODE (t)) { + case ABS_EXPR: + case FFS_EXPR: + return 1; case INTEGER_CST: return tree_int_cst_sgn (t) >= 0; + case TRUNC_DIV_EXPR: + case CEIL_DIV_EXPR: + case FLOOR_DIV_EXPR: + case ROUND_DIV_EXPR: + return tree_expr_nonnegative_p (TREE_OPERAND (t, 0)) + && tree_expr_nonnegative_p (TREE_OPERAND (t, 1)); + case TRUNC_MOD_EXPR: + case CEIL_MOD_EXPR: + case FLOOR_MOD_EXPR: + case ROUND_MOD_EXPR: + return tree_expr_nonnegative_p (TREE_OPERAND (t, 0)); case COND_EXPR: return tree_expr_nonnegative_p (TREE_OPERAND (t, 1)) && tree_expr_nonnegative_p (TREE_OPERAND (t, 2)); + case COMPOUND_EXPR: + return tree_expr_nonnegative_p (TREE_OPERAND (t, 1)); + case MIN_EXPR: + return tree_expr_nonnegative_p (TREE_OPERAND (t, 0)) + && tree_expr_nonnegative_p (TREE_OPERAND (t, 1)); + case MAX_EXPR: + return tree_expr_nonnegative_p (TREE_OPERAND (t, 0)) + || tree_expr_nonnegative_p (TREE_OPERAND (t, 1)); + case MODIFY_EXPR: + return tree_expr_nonnegative_p (TREE_OPERAND (t, 1)); case BIND_EXPR: return tree_expr_nonnegative_p (TREE_OPERAND (t, 1)); + case SAVE_EXPR: + return tree_expr_nonnegative_p (TREE_OPERAND (t, 0)); + case NON_LVALUE_EXPR: + return tree_expr_nonnegative_p (TREE_OPERAND (t, 0)); case RTL_EXPR: return rtl_expr_nonnegative_p (RTL_EXPR_RTL (t)); *************** rtl_expr_nonnegative_p (r) *** 7379,7384 **** --- 7653,7675 ---- return CONST_DOUBLE_HIGH (r) >= 0; return 0; + case CONST_VECTOR: + { + int units, i; + rtx elt; + + units = CONST_VECTOR_NUNITS (r); + + for (i = 0; i < units; ++i) + { + elt = CONST_VECTOR_ELT (r, i); + if (!rtl_expr_nonnegative_p (elt)) + return 0; + } + + return 1; + } + case SYMBOL_REF: case LABEL_REF: /* These are always nonnegative. */ diff -Nrc3pad gcc-3.0.4/gcc/fp-test.c gcc-3.1/gcc/fp-test.c *** gcc-3.0.4/gcc/fp-test.c Mon Jan 24 20:10:01 2000 --- gcc-3.1/gcc/fp-test.c Wed Aug 22 14:35:08 2001 *************** *** 2,23 **** Copyright (C) 1995, 2000 Free Software Foundation, Inc. Contributed by Ronald F. Guilmette . ! 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 a trivial test program which may be useful to people who are porting the GCC or G++ compilers to a new system. The intent here is --- 2,23 ---- Copyright (C) 1995, 2000 Free Software Foundation, Inc. Contributed by Ronald F. Guilmette . ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it ! under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ! ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public ! License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* This is a trivial test program which may be useful to people who are porting the GCC or G++ compilers to a new system. The intent here is diff -Nrc3pad gcc-3.0.4/gcc/function.c gcc-3.1/gcc/function.c *** gcc-3.0.4/gcc/function.c Wed Sep 12 20:55:20 2001 --- gcc-3.1/gcc/function.c Tue Apr 23 08:11:19 2002 *************** *** 1,23 **** /* Expands front end tree to back end RTL for GNU C-Compiler Copyright (C) 1987, 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, ! 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* This file handles the generation of rtl code from tree structure at the level of the function as a whole. --- 1,23 ---- /* Expands front end tree to back end RTL for GNU C-Compiler Copyright (C) 1987, 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, ! 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* This file handles the generation of rtl code from tree structure at the level of the function as a whole. *************** Boston, MA 02111-1307, USA. */ *** 46,51 **** --- 46,52 ---- #include "except.h" #include "function.h" #include "expr.h" + #include "libfuncs.h" #include "regs.h" #include "hard-reg-set.h" #include "insn-config.h" *************** Boston, MA 02111-1307, USA. */ *** 57,62 **** --- 58,64 ---- #include "hash.h" #include "ggc.h" #include "tm_p.h" + #include "integrate.h" #ifndef TRAMPOLINE_ALIGNMENT #define TRAMPOLINE_ALIGNMENT FUNCTION_BOUNDARY *************** Boston, MA 02111-1307, USA. */ *** 66,75 **** #define LOCAL_ALIGNMENT(TYPE, ALIGNMENT) ALIGNMENT #endif - #if !defined (PREFERRED_STACK_BOUNDARY) && defined (STACK_BOUNDARY) - #define PREFERRED_STACK_BOUNDARY STACK_BOUNDARY - #endif - /* Some systems use __main in a way incompatible with its use in gcc, in these cases use the macros NAME__MAIN to give a quoted symbol and SYMBOL__MAIN to give the same symbol without quotes for an alternative entry point. You --- 68,73 ---- *************** int current_function_sp_is_unchanging; *** 120,127 **** int current_function_uses_only_leaf_regs; /* Nonzero once virtual register instantiation has been done. ! assign_stack_local uses frame_pointer_rtx when this is nonzero. */ ! static int virtuals_instantiated; /* These variables hold pointers to functions to create and destroy target specific, per-function data structures. */ --- 118,130 ---- int current_function_uses_only_leaf_regs; /* Nonzero once virtual register instantiation has been done. ! assign_stack_local uses frame_pointer_rtx when this is nonzero. ! calls.c:emit_library_call_value_1 uses it to set up ! post-instantiation libcalls. */ ! int virtuals_instantiated; ! ! /* Assign unique numbers to labels generated for profiling. */ ! static int profile_label_no; /* These variables hold pointers to functions to create and destroy target specific, per-function data structures. */ *************** tree inline_function_decl; *** 145,153 **** /* The currently compiled function. */ struct function *cfun = 0; - /* Global list of all compiled functions. */ - struct function *all_functions = 0; - /* These arrays record the INSN_UIDs of the prologue and epilogue insns. */ static varray_type prologue; static varray_type epilogue; --- 148,153 ---- *************** struct temp_slot *** 184,190 **** slot above. May be an EXPR_LIST if multiple addresses exist. */ rtx address; /* The alignment (in bits) of the slot. */ ! int align; /* The size, in units, of the slot. */ HOST_WIDE_INT size; /* The type of the object in the slot, or zero if it doesn't correspond --- 184,190 ---- slot above. May be an EXPR_LIST if multiple addresses exist. */ rtx address; /* The alignment (in bits) of the slot. */ ! unsigned int align; /* The size, in units, of the slot. */ HOST_WIDE_INT size; /* The type of the object in the slot, or zero if it doesn't correspond *************** struct fixup_replacement *** 222,228 **** struct fixup_replacement *next; }; ! struct insns_for_mem_entry { /* The KEY in HE will be a MEM. */ struct hash_entry he; /* These are the INSNS which reference the MEM. */ --- 222,229 ---- struct fixup_replacement *next; }; ! struct insns_for_mem_entry ! { /* The KEY in HE will be a MEM. */ struct hash_entry he; /* These are the INSNS which reference the MEM. */ *************** struct insns_for_mem_entry { *** 233,240 **** static rtx assign_stack_local_1 PARAMS ((enum machine_mode, HOST_WIDE_INT, int, struct function *)); - static rtx assign_stack_temp_for_type PARAMS ((enum machine_mode, - HOST_WIDE_INT, int, tree)); static struct temp_slot *find_temp_slot_from_address PARAMS ((rtx)); static void put_reg_into_stack PARAMS ((struct function *, rtx, tree, enum machine_mode, enum machine_mode, --- 234,239 ---- *************** static void put_reg_into_stack PARAMS (( *** 243,263 **** static void schedule_fixup_var_refs PARAMS ((struct function *, rtx, tree, enum machine_mode, struct hash_table *)); ! static void fixup_var_refs PARAMS ((rtx, enum machine_mode, int, struct hash_table *)); static struct fixup_replacement *find_fixup_replacement PARAMS ((struct fixup_replacement **, rtx)); static void fixup_var_refs_insns PARAMS ((rtx, rtx, enum machine_mode, ! int, int)); static void fixup_var_refs_insns_with_hash PARAMS ((struct hash_table *, rtx, ! enum machine_mode, int)); static void fixup_var_refs_insn PARAMS ((rtx, rtx, enum machine_mode, ! int, int)); static void fixup_var_refs_1 PARAMS ((rtx, enum machine_mode, rtx *, rtx, ! struct fixup_replacement **)); ! static rtx fixup_memory_subreg PARAMS ((rtx, rtx, int)); ! static rtx walk_fixup_memory_subreg PARAMS ((rtx, rtx, int)); static rtx fixup_stack_1 PARAMS ((rtx, rtx)); static void optimize_bit_field PARAMS ((rtx, rtx, rtx *)); static void instantiate_decls PARAMS ((tree, int)); --- 242,263 ---- static void schedule_fixup_var_refs PARAMS ((struct function *, rtx, tree, enum machine_mode, struct hash_table *)); ! static void fixup_var_refs PARAMS ((rtx, enum machine_mode, int, rtx, struct hash_table *)); static struct fixup_replacement *find_fixup_replacement PARAMS ((struct fixup_replacement **, rtx)); static void fixup_var_refs_insns PARAMS ((rtx, rtx, enum machine_mode, ! int, int, rtx)); static void fixup_var_refs_insns_with_hash PARAMS ((struct hash_table *, rtx, ! enum machine_mode, int, rtx)); static void fixup_var_refs_insn PARAMS ((rtx, rtx, enum machine_mode, ! int, int, rtx)); static void fixup_var_refs_1 PARAMS ((rtx, enum machine_mode, rtx *, rtx, ! struct fixup_replacement **, rtx)); ! static rtx fixup_memory_subreg PARAMS ((rtx, rtx, enum machine_mode, int)); ! static rtx walk_fixup_memory_subreg PARAMS ((rtx, rtx, enum machine_mode, ! int)); static rtx fixup_stack_1 PARAMS ((rtx, rtx)); static void optimize_bit_field PARAMS ((rtx, rtx, rtx *)); static void instantiate_decls PARAMS ((tree, int)); *************** static void pad_below PARAMS ((struct a *** 275,285 **** static rtx round_trampoline_addr PARAMS ((rtx)); static rtx adjust_trampoline_addr PARAMS ((rtx)); static tree *identify_blocks_1 PARAMS ((rtx, tree *, tree *, tree *)); ! static void reorder_blocks_0 PARAMS ((rtx)); static void reorder_blocks_1 PARAMS ((rtx, tree, varray_type *)); static tree blocks_nreverse PARAMS ((tree)); static int all_blocks PARAMS ((tree, tree *)); static tree *get_block_vector PARAMS ((tree, int *)); /* We always define `record_insns' even if its not used so that we can always export `prologue_epilogue_contains'. */ static void record_insns PARAMS ((rtx, varray_type *)) ATTRIBUTE_UNUSED; --- 275,287 ---- static rtx round_trampoline_addr PARAMS ((rtx)); static rtx adjust_trampoline_addr PARAMS ((rtx)); static tree *identify_blocks_1 PARAMS ((rtx, tree *, tree *, tree *)); ! static void reorder_blocks_0 PARAMS ((tree)); static void reorder_blocks_1 PARAMS ((rtx, tree, varray_type *)); + static void reorder_fix_fragments PARAMS ((tree)); static tree blocks_nreverse PARAMS ((tree)); static int all_blocks PARAMS ((tree, tree *)); static tree *get_block_vector PARAMS ((tree, int *)); + extern tree debug_find_var_in_block_tree PARAMS ((tree, tree)); /* We always define `record_insns' even if its not used so that we can always export `prologue_epilogue_contains'. */ static void record_insns PARAMS ((rtx, varray_type *)) ATTRIBUTE_UNUSED; *************** static void emit_return_into_block PARAM *** 289,298 **** #endif static void put_addressof_into_stack PARAMS ((rtx, struct hash_table *)); static bool purge_addressof_1 PARAMS ((rtx *, rtx, int, int, ! struct hash_table *)); static void purge_single_hard_subreg_set PARAMS ((rtx)); ! #ifdef HAVE_epilogue ! static void keep_stack_depressed PARAMS ((rtx)); #endif static int is_addressof PARAMS ((rtx *, void *)); static struct hash_entry *insns_for_mem_newfunc PARAMS ((struct hash_entry *, --- 291,300 ---- #endif static void put_addressof_into_stack PARAMS ((rtx, struct hash_table *)); static bool purge_addressof_1 PARAMS ((rtx *, rtx, int, int, ! struct hash_table *)); static void purge_single_hard_subreg_set PARAMS ((rtx)); ! #if defined(HAVE_epilogue) && defined(INCOMING_RETURN_ADDR_RTX) ! static rtx keep_stack_depressed PARAMS ((rtx)); #endif static int is_addressof PARAMS ((rtx *, void *)); static struct hash_entry *insns_for_mem_newfunc PARAMS ((struct hash_entry *, *************** static unsigned long insns_for_mem_hash *** 302,316 **** static bool insns_for_mem_comp PARAMS ((hash_table_key, hash_table_key)); static int insns_for_mem_walk PARAMS ((rtx *, void *)); static void compute_insns_for_mem PARAMS ((rtx, rtx, struct hash_table *)); - static void mark_temp_slot PARAMS ((struct temp_slot *)); static void mark_function_status PARAMS ((struct function *)); ! static void mark_function_chain PARAMS ((void *)); static void prepare_function_start PARAMS ((void)); static void do_clobber_return_reg PARAMS ((rtx, void *)); static void do_use_return_reg PARAMS ((rtx, void *)); /* Pointer to chain of `struct function' for containing functions. */ ! struct function *outer_function_chain; /* Given a function decl for a containing function, return the `struct function' for it. */ --- 304,317 ---- static bool insns_for_mem_comp PARAMS ((hash_table_key, hash_table_key)); static int insns_for_mem_walk PARAMS ((rtx *, void *)); static void compute_insns_for_mem PARAMS ((rtx, rtx, struct hash_table *)); static void mark_function_status PARAMS ((struct function *)); ! static void maybe_mark_struct_function PARAMS ((void *)); static void prepare_function_start PARAMS ((void)); static void do_clobber_return_reg PARAMS ((rtx, void *)); static void do_use_return_reg PARAMS ((rtx, void *)); /* Pointer to chain of `struct function' for containing functions. */ ! static struct function *outer_function_chain; /* Given a function decl for a containing function, return the `struct function' for it. */ *************** find_function_data (decl) *** 321,327 **** { struct function *p; ! for (p = outer_function_chain; p; p = p->next) if (p->decl == decl) return p; --- 322,328 ---- { struct function *p; ! for (p = outer_function_chain; p; p = p->outer) if (p->decl == decl) return p; *************** void *** 338,358 **** push_function_context_to (context) tree context; { ! struct function *p, *context_data; if (context) { ! context_data = (context == current_function_decl ! ? cfun ! : find_function_data (context)); ! context_data->contains_functions = 1; } if (cfun == 0) init_dummy_function_start (); p = cfun; ! p->next = outer_function_chain; outer_function_chain = p; p->fixup_var_refs_queue = 0; --- 339,362 ---- push_function_context_to (context) tree context; { ! struct function *p; if (context) { ! if (context == current_function_decl) ! cfun->contains_functions = 1; ! else ! { ! struct function *containing = find_function_data (context); ! containing->contains_functions = 1; ! } } if (cfun == 0) init_dummy_function_start (); p = cfun; ! p->outer = outer_function_chain; outer_function_chain = p; p->fixup_var_refs_queue = 0; *************** pop_function_context_from (context) *** 377,386 **** { struct function *p = outer_function_chain; struct var_refs_queue *queue; - struct var_refs_queue *next; cfun = p; ! outer_function_chain = p->next; current_function_decl = p->decl; reg_renumber = 0; --- 381,389 ---- { struct function *p = outer_function_chain; struct var_refs_queue *queue; cfun = p; ! outer_function_chain = p->outer; current_function_decl = p->decl; reg_renumber = 0; *************** pop_function_context_from (context) *** 390,404 **** if (restore_lang_status) (*restore_lang_status) (p); ! /* Finish doing put_var_into_stack for any of our variables ! which became addressable during the nested function. */ ! for (queue = p->fixup_var_refs_queue; queue; queue = next) { ! next = queue->next; ! fixup_var_refs (queue->modified, queue->promoted_mode, ! queue->unsignedp, 0); ! free (queue); } p->fixup_var_refs_queue = 0; /* Reset variables that have known state during rtx generation. */ --- 393,422 ---- if (restore_lang_status) (*restore_lang_status) (p); ! /* Finish doing put_var_into_stack for any of our variables which became ! addressable during the nested function. If only one entry has to be ! fixed up, just do that one. Otherwise, first make a list of MEMs that ! are not to be unshared. */ ! if (p->fixup_var_refs_queue == 0) ! ; ! else if (p->fixup_var_refs_queue->next == 0) ! fixup_var_refs (p->fixup_var_refs_queue->modified, ! p->fixup_var_refs_queue->promoted_mode, ! p->fixup_var_refs_queue->unsignedp, ! p->fixup_var_refs_queue->modified, 0); ! else { ! rtx list = 0; ! ! for (queue = p->fixup_var_refs_queue; queue; queue = queue->next) ! list = gen_rtx_EXPR_LIST (VOIDmode, queue->modified, list); ! ! for (queue = p->fixup_var_refs_queue; queue; queue = queue->next) ! fixup_var_refs (queue->modified, queue->promoted_mode, ! queue->unsignedp, list, 0); ! } + p->fixup_var_refs_queue = 0; /* Reset variables that have known state during rtx generation. */ *************** void *** 439,447 **** free_after_compilation (f) struct function *f; { - struct temp_slot *ts; - struct temp_slot *next; - free_eh_status (f); free_expr_status (f); free_emit_status (f); --- 457,462 ---- *************** free_after_compilation (f) *** 453,465 **** if (f->x_parm_reg_stack_loc) free (f->x_parm_reg_stack_loc); - for (ts = f->x_temp_slots; ts; ts = next) - { - next = ts->next; - free (ts); - } f->x_temp_slots = NULL; - f->arg_offset_rtx = NULL; f->return_rtx = NULL; f->internal_arg_pointer = NULL; --- 468,474 ---- *************** assign_stack_local_1 (mode, size, align, *** 534,542 **** int align; struct function *function; { ! register rtx x, addr; int bigend_correction = 0; int alignment; if (align == 0) { --- 543,552 ---- int align; struct function *function; { ! rtx x, addr; int bigend_correction = 0; int alignment; + int frame_off, frame_alignment, frame_phase; if (align == 0) { *************** assign_stack_local_1 (mode, size, align, *** 574,588 **** if (function->stack_alignment_needed < alignment * BITS_PER_UNIT) function->stack_alignment_needed = alignment * BITS_PER_UNIT; /* Round frame offset to that alignment. We must be careful here, since FRAME_OFFSET might be negative and division with a negative dividend isn't as well defined as we might like. So we instead assume that ALIGNMENT is a power of two and use logical operations which are unambiguous. */ #ifdef FRAME_GROWS_DOWNWARD ! function->x_frame_offset = FLOOR_ROUND (function->x_frame_offset, alignment); #else ! function->x_frame_offset = CEIL_ROUND (function->x_frame_offset, alignment); #endif /* On a big-endian machine, if we are allocating more space than we will use, --- 584,604 ---- if (function->stack_alignment_needed < alignment * BITS_PER_UNIT) function->stack_alignment_needed = alignment * BITS_PER_UNIT; + /* Calculate how many bytes the start of local variables is off from + stack alignment. */ + frame_alignment = PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT; + frame_off = STARTING_FRAME_OFFSET % frame_alignment; + frame_phase = frame_off ? frame_alignment - frame_off : 0; + /* Round frame offset to that alignment. We must be careful here, since FRAME_OFFSET might be negative and division with a negative dividend isn't as well defined as we might like. So we instead assume that ALIGNMENT is a power of two and use logical operations which are unambiguous. */ #ifdef FRAME_GROWS_DOWNWARD ! function->x_frame_offset = FLOOR_ROUND (function->x_frame_offset - frame_phase, alignment) + frame_phase; #else ! function->x_frame_offset = CEIL_ROUND (function->x_frame_offset - frame_phase, alignment) + frame_phase; #endif /* On a big-endian machine, if we are allocating more space than we will use, *************** assign_stack_local (mode, size, align) *** 641,654 **** TYPE is the type that will be used for the stack slot. */ ! static rtx assign_stack_temp_for_type (mode, size, keep, type) enum machine_mode mode; HOST_WIDE_INT size; int keep; tree type; { ! int align; struct temp_slot *p, *best_p = 0; /* If SIZE is -1 it means that somebody tried to allocate a temporary --- 657,670 ---- TYPE is the type that will be used for the stack slot. */ ! rtx assign_stack_temp_for_type (mode, size, keep, type) enum machine_mode mode; HOST_WIDE_INT size; int keep; tree type; { ! unsigned int align; struct temp_slot *p, *best_p = 0; /* If SIZE is -1 it means that somebody tried to allocate a temporary *************** assign_stack_temp_for_type (mode, size, *** 698,704 **** if (best_p->size - rounded_size >= alignment) { ! p = (struct temp_slot *) xmalloc (sizeof (struct temp_slot)); p->in_use = p->addr_taken = 0; p->size = best_p->size - rounded_size; p->base_offset = best_p->base_offset + rounded_size; --- 714,720 ---- if (best_p->size - rounded_size >= alignment) { ! p = (struct temp_slot *) ggc_alloc (sizeof (struct temp_slot)); p->in_use = p->addr_taken = 0; p->size = best_p->size - rounded_size; p->base_offset = best_p->base_offset + rounded_size; *************** assign_stack_temp_for_type (mode, size, *** 729,735 **** { HOST_WIDE_INT frame_offset_old = frame_offset; ! p = (struct temp_slot *) xmalloc (sizeof (struct temp_slot)); /* We are passing an explicit alignment request to assign_stack_local. One side effect of that is assign_stack_local will not round SIZE --- 745,751 ---- { HOST_WIDE_INT frame_offset_old = frame_offset; ! p = (struct temp_slot *) ggc_alloc (sizeof (struct temp_slot)); /* We are passing an explicit alignment request to assign_stack_local. One side effect of that is assign_stack_local will not round SIZE *************** assign_stack_temp_for_type (mode, size, *** 739,745 **** and round it now. We also make sure ALIGNMENT is at least BIGGEST_ALIGNMENT. */ if (mode == BLKmode && align < BIGGEST_ALIGNMENT) ! abort(); p->slot = assign_stack_local (mode, (mode == BLKmode ? CEIL_ROUND (size, align / BITS_PER_UNIT) --- 755,761 ---- and round it now. We also make sure ALIGNMENT is at least BIGGEST_ALIGNMENT. */ if (mode == BLKmode && align < BIGGEST_ALIGNMENT) ! abort (); p->slot = assign_stack_local (mode, (mode == BLKmode ? CEIL_ROUND (size, align / BITS_PER_UNIT) *************** assign_stack_temp_for_type (mode, size, *** 801,816 **** MEM_IN_STRUCT_P (p->slot) = 0; MEM_SCALAR_P (p->slot) = 0; MEM_VOLATILE_P (p->slot) = 0; /* If we know the alias set for the memory that will be used, use it. If there's no TYPE, then we don't know anything about the alias set for the memory. */ ! if (type) ! MEM_ALIAS_SET (p->slot) = get_alias_set (type); ! else ! MEM_ALIAS_SET (p->slot) = 0; ! /* If a type is specified, set the relevant flags. */ if (type != 0) { RTX_UNCHANGING_P (p->slot) = TYPE_READONLY (type); --- 817,831 ---- MEM_IN_STRUCT_P (p->slot) = 0; MEM_SCALAR_P (p->slot) = 0; MEM_VOLATILE_P (p->slot) = 0; + set_mem_alias_set (p->slot, 0); /* If we know the alias set for the memory that will be used, use it. If there's no TYPE, then we don't know anything about the alias set for the memory. */ ! set_mem_alias_set (p->slot, type ? get_alias_set (type) : 0); ! set_mem_align (p->slot, align); ! /* If a type is specified, set the relevant flags. */ if (type != 0) { RTX_UNCHANGING_P (p->slot) = TYPE_READONLY (type); *************** assign_stack_temp (mode, size, keep) *** 833,839 **** return assign_stack_temp_for_type (mode, size, keep, NULL_TREE); } ! /* Assign a temporary of given TYPE. KEEP is as for assign_stack_temp. MEMORY_REQUIRED is 1 if the result must be addressable stack memory; it is 0 if a register is OK. --- 848,857 ---- return assign_stack_temp_for_type (mode, size, keep, NULL_TREE); } ! /* Assign a temporary. ! If TYPE_OR_DECL is a decl, then we are doing it on behalf of the decl ! and so that should be used in error messages. In either case, we ! allocate of the given type. KEEP is as for assign_stack_temp. MEMORY_REQUIRED is 1 if the result must be addressable stack memory; it is 0 if a register is OK. *************** assign_stack_temp (mode, size, keep) *** 841,855 **** to wider modes. */ rtx ! assign_temp (type, keep, memory_required, dont_promote) ! tree type; int keep; int memory_required; int dont_promote ATTRIBUTE_UNUSED; { ! enum machine_mode mode = TYPE_MODE (type); #ifndef PROMOTE_FOR_CALL_ONLY ! int unsignedp = TREE_UNSIGNED (type); #endif if (mode == BLKmode || memory_required) --- 859,884 ---- to wider modes. */ rtx ! assign_temp (type_or_decl, keep, memory_required, dont_promote) ! tree type_or_decl; int keep; int memory_required; int dont_promote ATTRIBUTE_UNUSED; { ! tree type, decl; ! enum machine_mode mode; #ifndef PROMOTE_FOR_CALL_ONLY ! int unsignedp; ! #endif ! ! if (DECL_P (type_or_decl)) ! decl = type_or_decl, type = TREE_TYPE (decl); ! else ! decl = NULL, type = type_or_decl; ! ! mode = TYPE_MODE (type); ! #ifndef PROMOTE_FOR_CALL_ONLY ! unsignedp = TREE_UNSIGNED (type); #endif if (mode == BLKmode || memory_required) *************** assign_temp (type, keep, memory_required *** 871,876 **** --- 900,916 ---- && host_integerp (TYPE_ARRAY_MAX_SIZE (type), 1)) size = tree_low_cst (TYPE_ARRAY_MAX_SIZE (type), 1); + /* The size of the temporary may be too large to fit into an integer. */ + /* ??? Not sure this should happen except for user silliness, so limit + this to things that aren't compiler-generated temporaries. The + rest of the time we'll abort in assign_stack_temp_for_type. */ + if (decl && size == -1 + && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST) + { + error_with_decl (decl, "size of variable `%s' is too large"); + size = 1; + } + tmp = assign_stack_temp_for_type (mode, size, keep, type); return tmp; } *************** combine_temp_slots () *** 902,908 **** return; /* If there are a lot of temp slots, don't do anything unless ! high levels of optimizaton. */ if (! flag_expensive_optimizations) for (p = temp_slots, num_slots = 0; p; p = p->next, num_slots++) if (num_slots > 100 || (num_slots > 10 && optimize == 0)) --- 942,948 ---- return; /* If there are a lot of temp slots, don't do anything unless ! high levels of optimization. */ if (! flag_expensive_optimizations) for (p = temp_slots, num_slots = 0; p; p = p->next, num_slots++) if (num_slots > 100 || (num_slots > 10 && optimize == 0)) *************** combine_temp_slots () *** 936,945 **** } /* Either delete Q or advance past it. */ if (delete_q) ! { ! prev_q->next = q->next; ! free (q); ! } else prev_q = q; } --- 976,982 ---- } /* Either delete Q or advance past it. */ if (delete_q) ! prev_q->next = q->next; else prev_q = q; } *************** free_temps_for_rtl_expr (t) *** 1211,1217 **** /* If this slot is below the current TEMP_SLOT_LEVEL, then it needs to be preserved. This can happen if a temporary in the RTL_EXPR was addressed; preserve_temp_slots will move ! the temporary into a higher level. */ if (temp_slot_level <= p->level) p->in_use = 0; else --- 1248,1254 ---- /* If this slot is below the current TEMP_SLOT_LEVEL, then it needs to be preserved. This can happen if a temporary in the RTL_EXPR was addressed; preserve_temp_slots will move ! the temporary into a higher level. */ if (temp_slot_level <= p->level) p->in_use = 0; else *************** void *** 1320,1326 **** put_var_into_stack (decl) tree decl; { ! register rtx reg; enum machine_mode promoted_mode, decl_mode; struct function *function = 0; tree context; --- 1357,1363 ---- put_var_into_stack (decl) tree decl; { ! rtx reg; enum machine_mode promoted_mode, decl_mode; struct function *function = 0; tree context; *************** put_var_into_stack (decl) *** 1348,1357 **** /* Get the mode it's actually stored in. */ promoted_mode = GET_MODE (reg); ! /* If this variable comes from an outer function, ! find that function's saved context. */ if (context != current_function_decl && context != inline_function_decl) ! for (function = outer_function_chain; function; function = function->next) if (function->decl == context) break; --- 1385,1397 ---- /* Get the mode it's actually stored in. */ promoted_mode = GET_MODE (reg); ! /* If this variable comes from an outer function, find that ! function's saved context. Don't use find_function_data here, ! because it might not be in any active function. ! FIXME: Is that really supposed to happen? ! It does in ObjC at least. */ if (context != current_function_decl && context != inline_function_decl) ! for (function = outer_function_chain; function; function = function->outer) if (function->decl == context) break; *************** put_var_into_stack (decl) *** 1421,1427 **** --- 1461,1475 ---- /* Change the CONCAT into a combined MEM for both parts. */ PUT_CODE (reg, MEM); + MEM_ATTRS (reg) = 0; + + /* set_mem_attributes uses DECL_RTL to avoid re-generating of + already computed alias sets. Here we want to re-generate. */ + if (DECL_P (decl)) + SET_DECL_RTL (decl, NULL); set_mem_attributes (reg, decl, 1); + if (DECL_P (decl)) + SET_DECL_RTL (decl, reg); /* The two parts are in memory order already. Use the lower parts address as ours. */ *************** put_var_into_stack (decl) *** 1439,1452 **** } else return; - - if (current_function_check_memory_usage) - emit_library_call (chkr_set_right_libfunc, LCT_CONST_MAKE_BLOCK, VOIDmode, - 3, XEXP (reg, 0), Pmode, - GEN_INT (GET_MODE_SIZE (GET_MODE (reg))), - TYPE_MODE (sizetype), - GEN_INT (MEMORY_USE_RW), - TYPE_MODE (integer_type_node)); } /* Subroutine of put_var_into_stack. This puts a single pseudo reg REG --- 1487,1492 ---- *************** put_reg_into_stack (function, reg, type, *** 1484,1489 **** --- 1524,1530 ---- PUT_CODE (reg, MEM); PUT_MODE (reg, decl_mode); XEXP (reg, 0) = XEXP (new, 0); + MEM_ATTRS (reg) = 0; /* `volatil' bit means one thing for MEMs, another entirely for REGs. */ MEM_VOLATILE_P (reg) = volatile_p; *************** put_reg_into_stack (function, reg, type, *** 1496,1503 **** { MEM_SET_IN_STRUCT_P (reg, AGGREGATE_TYPE_P (type) || MEM_IN_STRUCT_P (new)); ! MEM_ALIAS_SET (reg) = get_alias_set (type); } if (used_p) schedule_fixup_var_refs (function, reg, type, promoted_mode, ht); } --- 1537,1545 ---- { MEM_SET_IN_STRUCT_P (reg, AGGREGATE_TYPE_P (type) || MEM_IN_STRUCT_P (new)); ! set_mem_alias_set (reg, get_alias_set (type)); } + if (used_p) schedule_fixup_var_refs (function, reg, type, promoted_mode, ht); } *************** schedule_fixup_var_refs (function, reg, *** 1521,1527 **** struct var_refs_queue *temp; temp ! = (struct var_refs_queue *) xmalloc (sizeof (struct var_refs_queue)); temp->modified = reg; temp->promoted_mode = promoted_mode; temp->unsignedp = unsigned_p; --- 1563,1569 ---- struct var_refs_queue *temp; temp ! = (struct var_refs_queue *) ggc_alloc (sizeof (struct var_refs_queue)); temp->modified = reg; temp->promoted_mode = promoted_mode; temp->unsignedp = unsigned_p; *************** schedule_fixup_var_refs (function, reg, *** 1530,1544 **** } else /* Variable is local; fix it up now. */ ! fixup_var_refs (reg, promoted_mode, unsigned_p, ht); } static void ! fixup_var_refs (var, promoted_mode, unsignedp, ht) rtx var; enum machine_mode promoted_mode; int unsignedp; struct hash_table *ht; { tree pending; rtx first_insn = get_insns (); --- 1572,1587 ---- } else /* Variable is local; fix it up now. */ ! fixup_var_refs (reg, promoted_mode, unsigned_p, reg, ht); } static void ! fixup_var_refs (var, promoted_mode, unsignedp, may_share, ht) rtx var; enum machine_mode promoted_mode; int unsignedp; struct hash_table *ht; + rtx may_share; { tree pending; rtx first_insn = get_insns (); *************** fixup_var_refs (var, promoted_mode, unsi *** 1550,1568 **** { if (stack != 0) abort (); ! fixup_var_refs_insns_with_hash (ht, var, promoted_mode, unsignedp); return; } fixup_var_refs_insns (first_insn, var, promoted_mode, unsignedp, ! stack == 0); /* Scan all pending sequences too. */ for (; stack; stack = stack->next) { push_to_full_sequence (stack->first, stack->last); fixup_var_refs_insns (stack->first, var, promoted_mode, unsignedp, ! stack->next != 0); /* Update remembered end of sequence in case we added an insn at the end. */ stack->last = get_last_insn (); --- 1593,1612 ---- { if (stack != 0) abort (); ! fixup_var_refs_insns_with_hash (ht, var, promoted_mode, unsignedp, ! may_share); return; } fixup_var_refs_insns (first_insn, var, promoted_mode, unsignedp, ! stack == 0, may_share); /* Scan all pending sequences too. */ for (; stack; stack = stack->next) { push_to_full_sequence (stack->first, stack->last); fixup_var_refs_insns (stack->first, var, promoted_mode, unsignedp, ! stack->next != 0, may_share); /* Update remembered end of sequence in case we added an insn at the end. */ stack->last = get_last_insn (); *************** fixup_var_refs (var, promoted_mode, unsi *** 1576,1582 **** if (seq != const0_rtx && seq != 0) { push_to_sequence (seq); ! fixup_var_refs_insns (seq, var, promoted_mode, unsignedp, 0); end_sequence (); } } --- 1620,1627 ---- if (seq != const0_rtx && seq != 0) { push_to_sequence (seq); ! fixup_var_refs_insns (seq, var, promoted_mode, unsignedp, 0, ! may_share); end_sequence (); } } *************** find_fixup_replacement (replacements, x) *** 1609,1625 **** return p; } ! /* Scan the insn-chain starting with INSN for refs to VAR ! and fix them up. TOPLEVEL is nonzero if this chain is the ! main chain of insns for the current function. */ static void ! fixup_var_refs_insns (insn, var, promoted_mode, unsignedp, toplevel) rtx insn; rtx var; enum machine_mode promoted_mode; int unsignedp; int toplevel; { while (insn) { --- 1654,1672 ---- return p; } ! /* Scan the insn-chain starting with INSN for refs to VAR and fix them ! up. TOPLEVEL is nonzero if this chain is the main chain of insns ! for the current function. MAY_SHARE is either a MEM that is not ! to be unshared or a list of them. */ static void ! fixup_var_refs_insns (insn, var, promoted_mode, unsignedp, toplevel, may_share) rtx insn; rtx var; enum machine_mode promoted_mode; int unsignedp; int toplevel; + rtx may_share; { while (insn) { *************** fixup_var_refs_insns (insn, var, promote *** 1644,1650 **** if (seq) { push_to_sequence (seq); ! fixup_var_refs_insns (seq, var, promoted_mode, unsignedp, 0); XEXP (PATTERN (insn), i) = get_insns (); end_sequence (); } --- 1691,1698 ---- if (seq) { push_to_sequence (seq); ! fixup_var_refs_insns (seq, var, promoted_mode, unsignedp, 0, ! may_share); XEXP (PATTERN (insn), i) = get_insns (); end_sequence (); } *************** fixup_var_refs_insns (insn, var, promote *** 1652,1658 **** } else if (INSN_P (insn)) ! fixup_var_refs_insn (insn, var, promoted_mode, unsignedp, toplevel); insn = next; } --- 1700,1707 ---- } else if (INSN_P (insn)) ! fixup_var_refs_insn (insn, var, promoted_mode, unsignedp, toplevel, ! may_share); insn = next; } *************** fixup_var_refs_insns (insn, var, promote *** 1664,1689 **** N.B. No need for special processing of CALL_PLACEHOLDERs here, because the hash table will point straight to the interesting insn (inside the CALL_PLACEHOLDER). */ static void ! fixup_var_refs_insns_with_hash (ht, var, promoted_mode, unsignedp) struct hash_table *ht; rtx var; enum machine_mode promoted_mode; int unsignedp; { ! struct insns_for_mem_entry *ime = (struct insns_for_mem_entry *) ! hash_lookup (ht, var, /*create=*/0, /*copy=*/0); ! rtx insn_list = ime->insns; ! ! while (insn_list) ! { ! rtx insn = XEXP (insn_list, 0); ! ! if (INSN_P (insn)) ! fixup_var_refs_insn (insn, var, promoted_mode, unsignedp, 1); ! insn_list = XEXP (insn_list, 1); ! } } --- 1713,1736 ---- N.B. No need for special processing of CALL_PLACEHOLDERs here, because the hash table will point straight to the interesting insn (inside the CALL_PLACEHOLDER). */ + static void ! fixup_var_refs_insns_with_hash (ht, var, promoted_mode, unsignedp, may_share) struct hash_table *ht; rtx var; enum machine_mode promoted_mode; int unsignedp; + rtx may_share; { ! struct insns_for_mem_entry *ime ! = (struct insns_for_mem_entry *) hash_lookup (ht, var, ! /*create=*/0, /*copy=*/0); ! rtx insn_list; ! for (insn_list = ime->insns; insn_list != 0; insn_list = XEXP (insn_list, 1)) ! if (INSN_P (XEXP (insn_list, 0))) ! fixup_var_refs_insn (XEXP (insn_list, 0), var, promoted_mode, ! unsignedp, 1, may_share); } *************** fixup_var_refs_insns_with_hash (ht, var, *** 1692,1704 **** references to, PROMOTED_MODE and UNSIGNEDP describe VAR, and TOPLEVEL is nonzero if this is the main insn chain for this function. */ static void ! fixup_var_refs_insn (insn, var, promoted_mode, unsignedp, toplevel) rtx insn; rtx var; enum machine_mode promoted_mode; int unsignedp; int toplevel; { rtx call_dest = 0; rtx set, prev, prev_set; --- 1739,1753 ---- references to, PROMOTED_MODE and UNSIGNEDP describe VAR, and TOPLEVEL is nonzero if this is the main insn chain for this function. */ + static void ! fixup_var_refs_insn (insn, var, promoted_mode, unsignedp, toplevel, no_share) rtx insn; rtx var; enum machine_mode promoted_mode; int unsignedp; int toplevel; + rtx no_share; { rtx call_dest = 0; rtx set, prev, prev_set; *************** fixup_var_refs_insn (insn, var, promoted *** 1725,1735 **** find_reg_note (XEXP (note, 0), REG_RETVAL, NULL_RTX)); ! /* In unoptimized compilation, we shouldn't call delete_insn ! except in jump.c doing warnings. */ ! PUT_CODE (insn, NOTE); ! NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED; ! NOTE_SOURCE_FILE (insn) = 0; } /* The insn to load VAR from a home in the arglist --- 1774,1780 ---- find_reg_note (XEXP (note, 0), REG_RETVAL, NULL_RTX)); ! delete_insn (insn); } /* The insn to load VAR from a home in the arglist *************** fixup_var_refs_insn (insn, var, promoted *** 1750,1760 **** && SET_DEST (prev_set) == SET_SRC (set) && rtx_equal_p (SET_SRC (prev_set), var)))) { ! /* In unoptimized compilation, we shouldn't call delete_insn ! except in jump.c doing warnings. */ ! PUT_CODE (insn, NOTE); ! NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED; ! NOTE_SOURCE_FILE (insn) = 0; } else { --- 1795,1801 ---- && SET_DEST (prev_set) == SET_SRC (set) && rtx_equal_p (SET_SRC (prev_set), var)))) { ! delete_insn (insn); } else { *************** fixup_var_refs_insn (insn, var, promoted *** 1811,1817 **** it here. */ fixup_var_refs_1 (var, promoted_mode, &PATTERN (insn), insn, ! &replacements); /* If this is last_parm_insn, and any instructions were output after it to fix it up, then we must set last_parm_insn to --- 1852,1858 ---- it here. */ fixup_var_refs_1 (var, promoted_mode, &PATTERN (insn), insn, ! &replacements, no_share); /* If this is last_parm_insn, and any instructions were output after it to fix it up, then we must set last_parm_insn to *************** fixup_var_refs_insn (insn, var, promoted *** 1831,1837 **** /* OLD might be a (subreg (mem)). */ if (GET_CODE (replacements->old) == SUBREG) replacements->old ! = fixup_memory_subreg (replacements->old, insn, 0); else replacements->old = fixup_stack_1 (replacements->old, insn); --- 1872,1879 ---- /* OLD might be a (subreg (mem)). */ if (GET_CODE (replacements->old) == SUBREG) replacements->old ! = fixup_memory_subreg (replacements->old, insn, ! promoted_mode, 0); else replacements->old = fixup_stack_1 (replacements->old, insn); *************** fixup_var_refs_insn (insn, var, promoted *** 1871,1877 **** { if (GET_CODE (note) != INSN_LIST) XEXP (note, 0) ! = walk_fixup_memory_subreg (XEXP (note, 0), insn, 1); note = XEXP (note, 1); } } --- 1913,1920 ---- { if (GET_CODE (note) != INSN_LIST) XEXP (note, 0) ! = walk_fixup_memory_subreg (XEXP (note, 0), insn, ! promoted_mode, 1); note = XEXP (note, 1); } } *************** fixup_var_refs_insn (insn, var, promoted *** 1888,1905 **** or the SUBREG, as appropriate, to the pseudo. */ static void ! fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements) ! register rtx var; enum machine_mode promoted_mode; ! register rtx *loc; rtx insn; struct fixup_replacement **replacements; { ! register int i; ! register rtx x = *loc; RTX_CODE code = GET_CODE (x); ! register const char *fmt; ! register rtx tem, tem1; struct fixup_replacement *replacement; switch (code) --- 1931,1949 ---- or the SUBREG, as appropriate, to the pseudo. */ static void ! fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements, no_share) ! rtx var; enum machine_mode promoted_mode; ! rtx *loc; rtx insn; struct fixup_replacement **replacements; + rtx no_share; { ! int i; ! rtx x = *loc; RTX_CODE code = GET_CODE (x); ! const char *fmt; ! rtx tem, tem1; struct fixup_replacement *replacement; switch (code) *************** fixup_var_refs_1 (var, promoted_mode, lo *** 1990,1996 **** { replacement = find_fixup_replacement (replacements, x); if (replacement->new == 0) ! replacement->new = copy_most_rtx (x, var); *loc = x = replacement->new; code = GET_CODE (x); --- 2034,2040 ---- { replacement = find_fixup_replacement (replacements, x); if (replacement->new == 0) ! replacement->new = copy_most_rtx (x, no_share); *loc = x = replacement->new; code = GET_CODE (x); *************** fixup_var_refs_1 (var, promoted_mode, lo *** 2005,2010 **** --- 2049,2055 ---- case SYMBOL_REF: case LABEL_REF: case CONST_DOUBLE: + case CONST_VECTOR: return; case SIGN_EXTRACT: *************** fixup_var_refs_1 (var, promoted_mode, lo *** 2040,2046 **** return; } else ! tem = fixup_memory_subreg (tem, insn, 0); } else tem = fixup_stack_1 (tem, insn); --- 2085,2091 ---- return; } else ! tem = fixup_memory_subreg (tem, insn, promoted_mode, 0); } else tem = fixup_stack_1 (tem, insn); *************** fixup_var_refs_1 (var, promoted_mode, lo *** 2058,2080 **** enum machine_mode is_mode = GET_MODE (tem); HOST_WIDE_INT pos = INTVAL (XEXP (x, 2)); - #ifdef HAVE_extzv if (GET_CODE (x) == ZERO_EXTRACT) { ! wanted_mode ! = insn_data[(int) CODE_FOR_extzv].operand[1].mode; ! if (wanted_mode == VOIDmode) ! wanted_mode = word_mode; } ! #endif ! #ifdef HAVE_extv ! if (GET_CODE (x) == SIGN_EXTRACT) { ! wanted_mode = insn_data[(int) CODE_FOR_extv].operand[1].mode; ! if (wanted_mode == VOIDmode) ! wanted_mode = word_mode; } ! #endif /* If we have a narrower mode, we can do something. */ if (wanted_mode != VOIDmode && GET_MODE_SIZE (wanted_mode) < GET_MODE_SIZE (is_mode)) --- 2103,2123 ---- enum machine_mode is_mode = GET_MODE (tem); HOST_WIDE_INT pos = INTVAL (XEXP (x, 2)); if (GET_CODE (x) == ZERO_EXTRACT) { ! enum machine_mode new_mode ! = mode_for_extraction (EP_extzv, 1); ! if (new_mode != MAX_MACHINE_MODE) ! wanted_mode = new_mode; } ! else if (GET_CODE (x) == SIGN_EXTRACT) { ! enum machine_mode new_mode ! = mode_for_extraction (EP_extv, 1); ! if (new_mode != MAX_MACHINE_MODE) ! wanted_mode = new_mode; } ! /* If we have a narrower mode, we can do something. */ if (wanted_mode != VOIDmode && GET_MODE_SIZE (wanted_mode) < GET_MODE_SIZE (is_mode)) *************** fixup_var_refs_1 (var, promoted_mode, lo *** 2091,2099 **** pos %= GET_MODE_BITSIZE (wanted_mode); ! newmem = gen_rtx_MEM (wanted_mode, ! plus_constant (XEXP (tem, 0), offset)); ! MEM_COPY_ATTRIBUTES (newmem, tem); /* Make the change and see if the insn remains valid. */ INSN_CODE (insn) = -1; --- 2134,2140 ---- pos %= GET_MODE_BITSIZE (wanted_mode); ! newmem = adjust_address_nv (tem, wanted_mode, offset); /* Make the change and see if the insn remains valid. */ INSN_CODE (insn) = -1; *************** fixup_var_refs_1 (var, promoted_mode, lo *** 2130,2136 **** if (SUBREG_PROMOTED_VAR_P (x)) { *loc = var; ! fixup_var_refs_1 (var, GET_MODE (var), loc, insn, replacements); return; } --- 2171,2178 ---- if (SUBREG_PROMOTED_VAR_P (x)) { *loc = var; ! fixup_var_refs_1 (var, GET_MODE (var), loc, insn, replacements, ! no_share); return; } *************** fixup_var_refs_1 (var, promoted_mode, lo *** 2158,2164 **** return; } ! replacement->new = *loc = fixup_memory_subreg (x, insn, 0); INSN_CODE (insn) = -1; if (! flag_force_mem && recog_memoized (insn) >= 0) --- 2200,2207 ---- return; } ! replacement->new = *loc = fixup_memory_subreg (x, insn, ! promoted_mode, 0); INSN_CODE (insn) = -1; if (! flag_force_mem && recog_memoized (insn) >= 0) *************** fixup_var_refs_1 (var, promoted_mode, lo *** 2176,2182 **** optimize_bit_field (x, insn, 0); if (GET_CODE (SET_SRC (x)) == SIGN_EXTRACT || GET_CODE (SET_SRC (x)) == ZERO_EXTRACT) ! optimize_bit_field (x, insn, NULL_PTR); /* For a paradoxical SUBREG inside a ZERO_EXTRACT, load the object into a register and then store it back out. */ --- 2219,2225 ---- optimize_bit_field (x, insn, 0); if (GET_CODE (SET_SRC (x)) == SIGN_EXTRACT || GET_CODE (SET_SRC (x)) == ZERO_EXTRACT) ! optimize_bit_field (x, insn, 0); /* For a paradoxical SUBREG inside a ZERO_EXTRACT, load the object into a register and then store it back out. */ *************** fixup_var_refs_1 (var, promoted_mode, lo *** 2211,2219 **** { rtx dest = SET_DEST (x); rtx src = SET_SRC (x); - #ifdef HAVE_insv rtx outerdest = dest; - #endif while (GET_CODE (dest) == SUBREG || GET_CODE (dest) == STRICT_LOW_PART || GET_CODE (dest) == SIGN_EXTRACT --- 2254,2260 ---- *************** fixup_var_refs_1 (var, promoted_mode, lo *** 2221,2227 **** dest = XEXP (dest, 0); if (GET_CODE (src) == SUBREG) ! src = XEXP (src, 0); /* If VAR does not appear at the top level of the SET just scan the lower levels of the tree. */ --- 2262,2268 ---- dest = XEXP (dest, 0); if (GET_CODE (src) == SUBREG) ! src = SUBREG_REG (src); /* If VAR does not appear at the top level of the SET just scan the lower levels of the tree. */ *************** fixup_var_refs_1 (var, promoted_mode, lo *** 2232,2248 **** /* We will need to rerecognize this insn. */ INSN_CODE (insn) = -1; ! #ifdef HAVE_insv ! if (GET_CODE (outerdest) == ZERO_EXTRACT && dest == var) { /* Since this case will return, ensure we fixup all the operands here. */ fixup_var_refs_1 (var, promoted_mode, &XEXP (outerdest, 1), ! insn, replacements); fixup_var_refs_1 (var, promoted_mode, &XEXP (outerdest, 2), ! insn, replacements); fixup_var_refs_1 (var, promoted_mode, &SET_SRC (x), ! insn, replacements); tem = XEXP (outerdest, 0); --- 2273,2289 ---- /* We will need to rerecognize this insn. */ INSN_CODE (insn) = -1; ! if (GET_CODE (outerdest) == ZERO_EXTRACT && dest == var ! && mode_for_extraction (EP_insv, -1) != MAX_MACHINE_MODE) { /* Since this case will return, ensure we fixup all the operands here. */ fixup_var_refs_1 (var, promoted_mode, &XEXP (outerdest, 1), ! insn, replacements, no_share); fixup_var_refs_1 (var, promoted_mode, &XEXP (outerdest, 2), ! insn, replacements, no_share); fixup_var_refs_1 (var, promoted_mode, &SET_SRC (x), ! insn, replacements, no_share); tem = XEXP (outerdest, 0); *************** fixup_var_refs_1 (var, promoted_mode, lo *** 2251,2257 **** This was legitimate when the MEM was a REG. */ if (GET_CODE (tem) == SUBREG && SUBREG_REG (tem) == var) ! tem = fixup_memory_subreg (tem, insn, 0); else tem = fixup_stack_1 (tem, insn); --- 2292,2298 ---- This was legitimate when the MEM was a REG. */ if (GET_CODE (tem) == SUBREG && SUBREG_REG (tem) == var) ! tem = fixup_memory_subreg (tem, insn, promoted_mode, 0); else tem = fixup_stack_1 (tem, insn); *************** fixup_var_refs_1 (var, promoted_mode, lo *** 2264,2272 **** enum machine_mode is_mode = GET_MODE (tem); HOST_WIDE_INT pos = INTVAL (XEXP (outerdest, 2)); ! wanted_mode = insn_data[(int) CODE_FOR_insv].operand[0].mode; ! if (wanted_mode == VOIDmode) ! wanted_mode = word_mode; /* If we have a narrower mode, we can do something. */ if (GET_MODE_SIZE (wanted_mode) < GET_MODE_SIZE (is_mode)) --- 2305,2311 ---- enum machine_mode is_mode = GET_MODE (tem); HOST_WIDE_INT pos = INTVAL (XEXP (outerdest, 2)); ! wanted_mode = mode_for_extraction (EP_insv, 0); /* If we have a narrower mode, we can do something. */ if (GET_MODE_SIZE (wanted_mode) < GET_MODE_SIZE (is_mode)) *************** fixup_var_refs_1 (var, promoted_mode, lo *** 2281,2290 **** pos %= GET_MODE_BITSIZE (wanted_mode); ! newmem = gen_rtx_MEM (wanted_mode, ! plus_constant (XEXP (tem, 0), ! offset)); ! MEM_COPY_ATTRIBUTES (newmem, tem); /* Make the change and see if the insn remains valid. */ INSN_CODE (insn) = -1; --- 2320,2326 ---- pos %= GET_MODE_BITSIZE (wanted_mode); ! newmem = adjust_address_nv (tem, wanted_mode, offset); /* Make the change and see if the insn remains valid. */ INSN_CODE (insn) = -1; *************** fixup_var_refs_1 (var, promoted_mode, lo *** 2310,2316 **** XEXP (outerdest, 0) = tem1; return; } - #endif /* STRICT_LOW_PART is a no-op on memory references and it can cause combinations to be unrecognizable, --- 2346,2351 ---- *************** fixup_var_refs_1 (var, promoted_mode, lo *** 2341,2355 **** { rtx pat, last; ! replacement = find_fixup_replacement (replacements, SET_SRC (x)); ! if (replacement->new) ! SET_SRC (x) = replacement->new; ! else if (GET_CODE (SET_SRC (x)) == SUBREG) ! SET_SRC (x) = replacement->new ! = fixup_memory_subreg (SET_SRC (x), insn, 0); else ! SET_SRC (x) = replacement->new ! = fixup_stack_1 (SET_SRC (x), insn); if (recog_memoized (insn) >= 0) return; --- 2376,2405 ---- { rtx pat, last; ! if (GET_CODE (SET_SRC (x)) == SUBREG ! && (GET_MODE_SIZE (GET_MODE (SET_SRC (x))) ! > GET_MODE_SIZE (GET_MODE (var)))) ! { ! /* This (subreg VAR) is now a paradoxical subreg. We need ! to replace VAR instead of the subreg. */ ! replacement = find_fixup_replacement (replacements, var); ! if (replacement->new == NULL_RTX) ! replacement->new = gen_reg_rtx (GET_MODE (var)); ! SUBREG_REG (SET_SRC (x)) = replacement->new; ! } else ! { ! replacement = find_fixup_replacement (replacements, SET_SRC (x)); ! if (replacement->new) ! SET_SRC (x) = replacement->new; ! else if (GET_CODE (SET_SRC (x)) == SUBREG) ! SET_SRC (x) = replacement->new ! = fixup_memory_subreg (SET_SRC (x), insn, promoted_mode, ! 0); ! else ! SET_SRC (x) = replacement->new ! = fixup_stack_1 (SET_SRC (x), insn); ! } if (recog_memoized (insn) >= 0) return; *************** fixup_var_refs_1 (var, promoted_mode, lo *** 2378,2386 **** REG_NOTES (insn) = REG_NOTES (last); PATTERN (insn) = PATTERN (last); ! PUT_CODE (last, NOTE); ! NOTE_LINE_NUMBER (last) = NOTE_INSN_DELETED; ! NOTE_SOURCE_FILE (last) = 0; } else PATTERN (insn) = pat; --- 2428,2434 ---- REG_NOTES (insn) = REG_NOTES (last); PATTERN (insn) = PATTERN (last); ! delete_insn (last); } else PATTERN (insn) = pat; *************** fixup_var_refs_1 (var, promoted_mode, lo *** 2400,2406 **** rtx pat, last; if (GET_CODE (SET_DEST (x)) == SUBREG) ! SET_DEST (x) = fixup_memory_subreg (SET_DEST (x), insn, 0); else SET_DEST (x) = fixup_stack_1 (SET_DEST (x), insn); --- 2448,2455 ---- rtx pat, last; if (GET_CODE (SET_DEST (x)) == SUBREG) ! SET_DEST (x) = fixup_memory_subreg (SET_DEST (x), insn, ! promoted_mode, 0); else SET_DEST (x) = fixup_stack_1 (SET_DEST (x), insn); *************** fixup_var_refs_1 (var, promoted_mode, lo *** 2423,2431 **** REG_NOTES (insn) = REG_NOTES (last); PATTERN (insn) = PATTERN (last); ! PUT_CODE (last, NOTE); ! NOTE_LINE_NUMBER (last) = NOTE_INSN_DELETED; ! NOTE_SOURCE_FILE (last) = 0; } else PATTERN (insn) = pat; --- 2472,2478 ---- REG_NOTES (insn) = REG_NOTES (last); PATTERN (insn) = PATTERN (last); ! delete_insn (last); } else PATTERN (insn) = pat; *************** fixup_var_refs_1 (var, promoted_mode, lo *** 2447,2452 **** --- 2494,2500 ---- { rtx temp; rtx fixeddest = SET_DEST (x); + enum machine_mode temp_mode; /* STRICT_LOW_PART can be discarded, around a MEM. */ if (GET_CODE (fixeddest) == STRICT_LOW_PART) *************** fixup_var_refs_1 (var, promoted_mode, lo *** 2454,2466 **** /* Convert (SUBREG (MEM)) to a MEM in a changed mode. */ if (GET_CODE (fixeddest) == SUBREG) { ! fixeddest = fixup_memory_subreg (fixeddest, insn, 0); ! promoted_mode = GET_MODE (fixeddest); } else ! fixeddest = fixup_stack_1 (fixeddest, insn); ! temp = gen_reg_rtx (promoted_mode); emit_insn_after (gen_move_insn (fixeddest, gen_lowpart (GET_MODE (fixeddest), --- 2502,2518 ---- /* Convert (SUBREG (MEM)) to a MEM in a changed mode. */ if (GET_CODE (fixeddest) == SUBREG) { ! fixeddest = fixup_memory_subreg (fixeddest, insn, ! promoted_mode, 0); ! temp_mode = GET_MODE (fixeddest); } else ! { ! fixeddest = fixup_stack_1 (fixeddest, insn); ! temp_mode = promoted_mode; ! } ! temp = gen_reg_rtx (temp_mode); emit_insn_after (gen_move_insn (fixeddest, gen_lowpart (GET_MODE (fixeddest), *************** fixup_var_refs_1 (var, promoted_mode, lo *** 2481,2529 **** for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) { if (fmt[i] == 'e') ! fixup_var_refs_1 (var, promoted_mode, &XEXP (x, i), insn, replacements); else if (fmt[i] == 'E') { ! register int j; for (j = 0; j < XVECLEN (x, i); j++) fixup_var_refs_1 (var, promoted_mode, &XVECEXP (x, i, j), ! insn, replacements); } } } ! /* Given X, an rtx of the form (SUBREG:m1 (MEM:m2 addr)), ! return an rtx (MEM:m1 newaddr) which is equivalent. ! If any insns must be emitted to compute NEWADDR, put them before INSN. UNCRITICAL nonzero means accept paradoxical subregs. This is used for subregs found inside REG_NOTES. */ static rtx ! fixup_memory_subreg (x, insn, uncritical) rtx x; rtx insn; int uncritical; { ! int offset = SUBREG_WORD (x) * UNITS_PER_WORD; ! rtx addr = XEXP (SUBREG_REG (x), 0); enum machine_mode mode = GET_MODE (x); rtx result; /* Paradoxical SUBREGs are usually invalid during RTL generation. */ ! if (GET_MODE_SIZE (mode) > GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))) ! && ! uncritical) abort (); if (BYTES_BIG_ENDIAN) ! offset += (MIN (UNITS_PER_WORD, GET_MODE_SIZE (GET_MODE (SUBREG_REG (x)))) ! - MIN (UNITS_PER_WORD, GET_MODE_SIZE (mode))); ! addr = plus_constant (addr, offset); ! if (!flag_force_addr && memory_address_p (mode, addr)) /* Shortcut if no insns need be emitted. */ ! return change_address (SUBREG_REG (x), mode, addr); start_sequence (); ! result = change_address (SUBREG_REG (x), mode, addr); emit_insn_before (gen_sequence (), insn); end_sequence (); return result; --- 2533,2591 ---- for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) { if (fmt[i] == 'e') ! fixup_var_refs_1 (var, promoted_mode, &XEXP (x, i), insn, replacements, ! no_share); else if (fmt[i] == 'E') { ! int j; for (j = 0; j < XVECLEN (x, i); j++) fixup_var_refs_1 (var, promoted_mode, &XVECEXP (x, i, j), ! insn, replacements, no_share); } } } ! /* Previously, X had the form (SUBREG:m1 (REG:PROMOTED_MODE ...)). ! The REG was placed on the stack, so X now has the form (SUBREG:m1 ! (MEM:m2 ...)). ! ! Return an rtx (MEM:m1 newaddr) which is equivalent. If any insns ! must be emitted to compute NEWADDR, put them before INSN. UNCRITICAL nonzero means accept paradoxical subregs. This is used for subregs found inside REG_NOTES. */ static rtx ! fixup_memory_subreg (x, insn, promoted_mode, uncritical) rtx x; rtx insn; + enum machine_mode promoted_mode; int uncritical; { ! int offset; ! rtx mem = SUBREG_REG (x); ! rtx addr = XEXP (mem, 0); enum machine_mode mode = GET_MODE (x); rtx result; /* Paradoxical SUBREGs are usually invalid during RTL generation. */ ! if (GET_MODE_SIZE (mode) > GET_MODE_SIZE (GET_MODE (mem)) && ! uncritical) abort (); + offset = SUBREG_BYTE (x); if (BYTES_BIG_ENDIAN) ! /* If the PROMOTED_MODE is wider than the mode of the MEM, adjust ! the offset so that it points to the right location within the ! MEM. */ ! offset -= (GET_MODE_SIZE (promoted_mode) - GET_MODE_SIZE (GET_MODE (mem))); ! ! if (!flag_force_addr ! && memory_address_p (mode, plus_constant (addr, offset))) /* Shortcut if no insns need be emitted. */ ! return adjust_address (mem, mode, offset); ! start_sequence (); ! result = adjust_address (mem, mode, offset); emit_insn_before (gen_sequence (), insn); end_sequence (); return result; *************** fixup_memory_subreg (x, insn, uncritical *** 2534,2552 **** If X itself is a (SUBREG (MEM ...) ...), return the replacement expression. Otherwise return X, with its contents possibly altered. ! If any insns must be emitted to compute NEWADDR, put them before INSN. ! ! UNCRITICAL is as in fixup_memory_subreg. */ static rtx ! walk_fixup_memory_subreg (x, insn, uncritical) ! register rtx x; rtx insn; int uncritical; { ! register enum rtx_code code; ! register const char *fmt; ! register int i; if (x == 0) return 0; --- 2596,2614 ---- If X itself is a (SUBREG (MEM ...) ...), return the replacement expression. Otherwise return X, with its contents possibly altered. ! INSN, PROMOTED_MODE and UNCRITICAL are as for ! fixup_memory_subreg. */ static rtx ! walk_fixup_memory_subreg (x, insn, promoted_mode, uncritical) ! rtx x; rtx insn; + enum machine_mode promoted_mode; int uncritical; { ! enum rtx_code code; ! const char *fmt; ! int i; if (x == 0) return 0; *************** walk_fixup_memory_subreg (x, insn, uncri *** 2554,2560 **** code = GET_CODE (x); if (code == SUBREG && GET_CODE (SUBREG_REG (x)) == MEM) ! return fixup_memory_subreg (x, insn, uncritical); /* Nothing special about this RTX; fix its operands. */ --- 2616,2622 ---- code = GET_CODE (x); if (code == SUBREG && GET_CODE (SUBREG_REG (x)) == MEM) ! return fixup_memory_subreg (x, insn, promoted_mode, uncritical); /* Nothing special about this RTX; fix its operands. */ *************** walk_fixup_memory_subreg (x, insn, uncri *** 2562,2574 **** for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) { if (fmt[i] == 'e') ! XEXP (x, i) = walk_fixup_memory_subreg (XEXP (x, i), insn, uncritical); else if (fmt[i] == 'E') { ! register int j; for (j = 0; j < XVECLEN (x, i); j++) XVECEXP (x, i, j) ! = walk_fixup_memory_subreg (XVECEXP (x, i, j), insn, uncritical); } } return x; --- 2624,2638 ---- for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) { if (fmt[i] == 'e') ! XEXP (x, i) = walk_fixup_memory_subreg (XEXP (x, i), insn, ! promoted_mode, uncritical); else if (fmt[i] == 'E') { ! int j; for (j = 0; j < XVECLEN (x, i); j++) XVECEXP (x, i, j) ! = walk_fixup_memory_subreg (XVECEXP (x, i, j), insn, ! promoted_mode, uncritical); } } return x; *************** fixup_stack_1 (x, insn) *** 2585,2597 **** rtx x; rtx insn; { ! register int i; ! register RTX_CODE code = GET_CODE (x); ! register const char *fmt; if (code == MEM) { ! register rtx ad = XEXP (x, 0); /* If we have address of a stack slot but it's not valid (displacement is too large), compute the sum in a register. */ if (GET_CODE (ad) == PLUS --- 2649,2661 ---- rtx x; rtx insn; { ! int i; ! RTX_CODE code = GET_CODE (x); ! const char *fmt; if (code == MEM) { ! rtx ad = XEXP (x, 0); /* If we have address of a stack slot but it's not valid (displacement is too large), compute the sum in a register. */ if (GET_CODE (ad) == PLUS *************** fixup_stack_1 (x, insn) *** 2616,2622 **** seq = gen_sequence (); end_sequence (); emit_insn_before (seq, insn); ! return change_address (x, VOIDmode, temp); } return x; } --- 2680,2686 ---- seq = gen_sequence (); end_sequence (); emit_insn_before (seq, insn); ! return replace_equiv_address (x, temp); } return x; } *************** fixup_stack_1 (x, insn) *** 2628,2634 **** XEXP (x, i) = fixup_stack_1 (XEXP (x, i), insn); else if (fmt[i] == 'E') { ! register int j; for (j = 0; j < XVECLEN (x, i); j++) XVECEXP (x, i, j) = fixup_stack_1 (XVECEXP (x, i, j), insn); } --- 2692,2698 ---- XEXP (x, i) = fixup_stack_1 (XEXP (x, i), insn); else if (fmt[i] == 'E') { ! int j; for (j = 0; j < XVECLEN (x, i); j++) XVECEXP (x, i, j) = fixup_stack_1 (XVECEXP (x, i, j), insn); } *************** optimize_bit_field (body, insn, equiv_me *** 2653,2659 **** rtx insn; rtx *equiv_mem; { ! register rtx bitfield; int destflag; rtx seq = 0; enum machine_mode mode; --- 2717,2723 ---- rtx insn; rtx *equiv_mem; { ! rtx bitfield; int destflag; rtx seq = 0; enum machine_mode mode; *************** optimize_bit_field (body, insn, equiv_me *** 2673,2679 **** != BLKmode) && INTVAL (XEXP (bitfield, 2)) % INTVAL (XEXP (bitfield, 1)) == 0) { ! register rtx memref = 0; /* Now check that the containing word is memory, not a register, and that it is safe to change the machine mode. */ --- 2737,2743 ---- != BLKmode) && INTVAL (XEXP (bitfield, 2)) % INTVAL (XEXP (bitfield, 1)) == 0) { ! rtx memref = 0; /* Now check that the containing word is memory, not a register, and that it is safe to change the machine mode. */ *************** optimize_bit_field (body, insn, equiv_me *** 2711,2717 **** offset /= BITS_PER_UNIT; if (GET_CODE (XEXP (bitfield, 0)) == SUBREG) { ! offset += SUBREG_WORD (XEXP (bitfield, 0)) * UNITS_PER_WORD; if (BYTES_BIG_ENDIAN) offset -= (MIN (UNITS_PER_WORD, GET_MODE_SIZE (GET_MODE (XEXP (bitfield, 0)))) --- 2775,2782 ---- offset /= BITS_PER_UNIT; if (GET_CODE (XEXP (bitfield, 0)) == SUBREG) { ! offset += (SUBREG_BYTE (XEXP (bitfield, 0)) ! / UNITS_PER_WORD) * UNITS_PER_WORD; if (BYTES_BIG_ENDIAN) offset -= (MIN (UNITS_PER_WORD, GET_MODE_SIZE (GET_MODE (XEXP (bitfield, 0)))) *************** optimize_bit_field (body, insn, equiv_me *** 2720,2727 **** } start_sequence (); ! memref = change_address (memref, mode, ! plus_constant (XEXP (memref, 0), offset)); insns = get_insns (); end_sequence (); emit_insns_before (insns, insn); --- 2785,2791 ---- } start_sequence (); ! memref = adjust_address (memref, mode, offset); insns = get_insns (); end_sequence (); emit_insns_before (insns, insn); *************** optimize_bit_field (body, insn, equiv_me *** 2736,2742 **** { rtx src = SET_SRC (body); while (GET_CODE (src) == SUBREG ! && SUBREG_WORD (src) == 0) src = SUBREG_REG (src); if (GET_MODE (src) != GET_MODE (memref)) src = gen_lowpart (GET_MODE (memref), SET_SRC (body)); --- 2800,2806 ---- { rtx src = SET_SRC (body); while (GET_CODE (src) == SUBREG ! && SUBREG_BYTE (src) == 0) src = SUBREG_REG (src); if (GET_MODE (src) != GET_MODE (memref)) src = gen_lowpart (GET_MODE (memref), SET_SRC (body)); *************** optimize_bit_field (body, insn, equiv_me *** 2757,2763 **** rtx dest = SET_DEST (body); while (GET_CODE (dest) == SUBREG ! && SUBREG_WORD (dest) == 0 && (GET_MODE_CLASS (GET_MODE (dest)) == GET_MODE_CLASS (GET_MODE (SUBREG_REG (dest)))) && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (dest))) --- 2821,2827 ---- rtx dest = SET_DEST (body); while (GET_CODE (dest) == SUBREG ! && SUBREG_BYTE (dest) == 0 && (GET_MODE_CLASS (GET_MODE (dest)) == GET_MODE_CLASS (GET_MODE (SUBREG_REG (dest)))) && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (dest))) *************** static int cfa_offset; *** 2850,2859 **** #define ARG_POINTER_CFA_OFFSET(FNDECL) FIRST_PARM_OFFSET (FNDECL) #endif ! /* Build up a (MEM (ADDRESSOF (REG))) rtx for a register REG that just had ! its address taken. DECL is the decl for the object stored in the ! register, for later use if we do need to force REG into the stack. ! REG is overwritten by the MEM like in put_reg_into_stack. */ rtx gen_mem_addressof (reg, decl) --- 2914,2923 ---- #define ARG_POINTER_CFA_OFFSET(FNDECL) FIRST_PARM_OFFSET (FNDECL) #endif ! /* Build up a (MEM (ADDRESSOF (REG))) rtx for a register REG that just had its ! address taken. DECL is the decl or SAVE_EXPR for the object stored in the ! register, for later use if we do need to force REG into the stack. REG is ! overwritten by the MEM like in put_reg_into_stack. */ rtx gen_mem_addressof (reg, decl) *************** gen_mem_addressof (reg, decl) *** 2863,2894 **** rtx r = gen_rtx_ADDRESSOF (Pmode, gen_reg_rtx (GET_MODE (reg)), REGNO (reg), decl); /* If the original REG was a user-variable, then so is the REG whose address is being taken. Likewise for unchanging. */ REG_USERVAR_P (XEXP (r, 0)) = REG_USERVAR_P (reg); RTX_UNCHANGING_P (XEXP (r, 0)) = RTX_UNCHANGING_P (reg); PUT_CODE (reg, MEM); XEXP (reg, 0) = r; if (decl) { tree type = TREE_TYPE (decl); ! PUT_MODE (reg, DECL_MODE (decl)); ! MEM_VOLATILE_P (reg) = TREE_SIDE_EFFECTS (decl); ! MEM_SET_IN_STRUCT_P (reg, AGGREGATE_TYPE_P (type)); ! MEM_ALIAS_SET (reg) = get_alias_set (decl); ! if (TREE_USED (decl) || DECL_INITIAL (decl) != 0) ! fixup_var_refs (reg, GET_MODE (reg), TREE_UNSIGNED (type), 0); ! } ! else ! { ! /* We have no alias information about this newly created MEM. */ ! MEM_ALIAS_SET (reg) = 0; ! fixup_var_refs (reg, GET_MODE (reg), 0, 0); } return reg; } --- 2927,2970 ---- rtx r = gen_rtx_ADDRESSOF (Pmode, gen_reg_rtx (GET_MODE (reg)), REGNO (reg), decl); + /* Calculate this before we start messing with decl's RTL. */ + HOST_WIDE_INT set = decl ? get_alias_set (decl) : 0; + /* If the original REG was a user-variable, then so is the REG whose address is being taken. Likewise for unchanging. */ REG_USERVAR_P (XEXP (r, 0)) = REG_USERVAR_P (reg); RTX_UNCHANGING_P (XEXP (r, 0)) = RTX_UNCHANGING_P (reg); PUT_CODE (reg, MEM); + MEM_ATTRS (reg) = 0; XEXP (reg, 0) = r; + if (decl) { tree type = TREE_TYPE (decl); + enum machine_mode decl_mode + = (DECL_P (decl) ? DECL_MODE (decl) : TYPE_MODE (TREE_TYPE (decl))); + rtx decl_rtl = (TREE_CODE (decl) == SAVE_EXPR ? SAVE_EXPR_RTL (decl) + : DECL_RTL_IF_SET (decl)); ! PUT_MODE (reg, decl_mode); ! /* Clear DECL_RTL momentarily so functions below will work ! properly, then set it again. */ ! if (DECL_P (decl) && decl_rtl == reg) ! SET_DECL_RTL (decl, 0); ! set_mem_attributes (reg, decl, 1); ! set_mem_alias_set (reg, set); ! ! if (DECL_P (decl) && decl_rtl == reg) ! SET_DECL_RTL (decl, reg); ! ! if (TREE_USED (decl) || (DECL_P (decl) && DECL_INITIAL (decl) != 0)) ! fixup_var_refs (reg, GET_MODE (reg), TREE_UNSIGNED (type), reg, 0); } + else + fixup_var_refs (reg, GET_MODE (reg), 0, reg, 0); return reg; } *************** put_addressof_into_stack (r, ht) *** 2929,2936 **** volatile_p = (TREE_CODE (decl) != SAVE_EXPR && TREE_THIS_VOLATILE (decl)); used_p = (TREE_USED (decl) ! || (TREE_CODE (decl) != SAVE_EXPR ! && DECL_INITIAL (decl) != 0)); } else { --- 3005,3011 ---- volatile_p = (TREE_CODE (decl) != SAVE_EXPR && TREE_THIS_VOLATILE (decl)); used_p = (TREE_USED (decl) ! || (DECL_P (decl) && DECL_INITIAL (decl) != 0)); } else { *************** purge_addressof_1 (loc, insn, force, sto *** 2991,3004 **** result &= purge_addressof_1 (&SET_SRC (x), insn, force, 0, ht); return result; } ! ! else if (code == ADDRESSOF && GET_CODE (XEXP (x, 0)) == MEM) { /* We must create a copy of the rtx because it was created by overwriting a REG rtx which is always shared. */ ! rtx sub = copy_rtx (XEXP (XEXP (x, 0), 0)); ! rtx insns; ! if (validate_change (insn, loc, sub, 0) || validate_replace_rtx (x, sub, insn)) return true; --- 3066,3084 ---- result &= purge_addressof_1 (&SET_SRC (x), insn, force, 0, ht); return result; } ! else if (code == ADDRESSOF) { + rtx sub, insns; + + if (GET_CODE (XEXP (x, 0)) != MEM) + { + put_addressof_into_stack (x, ht); + return true; + } + /* We must create a copy of the rtx because it was created by overwriting a REG rtx which is always shared. */ ! sub = copy_rtx (XEXP (XEXP (x, 0), 0)); if (validate_change (insn, loc, sub, 0) || validate_replace_rtx (x, sub, insn)) return true; *************** purge_addressof_1 (loc, insn, force, sto *** 3018,3031 **** else if (code == MEM && GET_CODE (XEXP (x, 0)) == ADDRESSOF && ! force) { rtx sub = XEXP (XEXP (x, 0), 0); - rtx sub2; if (GET_CODE (sub) == MEM) ! { ! sub2 = gen_rtx_MEM (GET_MODE (x), copy_rtx (XEXP (sub, 0))); ! MEM_COPY_ATTRIBUTES (sub2, sub); ! sub = sub2; ! } else if (GET_CODE (sub) == REG && (MEM_VOLATILE_P (x) || GET_MODE (x) == BLKmode)) ; --- 3098,3106 ---- else if (code == MEM && GET_CODE (XEXP (x, 0)) == ADDRESSOF && ! force) { rtx sub = XEXP (XEXP (x, 0), 0); if (GET_CODE (sub) == MEM) ! sub = adjust_address_nv (sub, GET_MODE (x), 0); else if (GET_CODE (sub) == REG && (MEM_VOLATILE_P (x) || GET_MODE (x) == BLKmode)) ; *************** purge_addressof_1 (loc, insn, force, sto *** 3067,3073 **** code did. This is especially true of REG_RETVAL. */ ! if (GET_CODE (z) == SUBREG && SUBREG_WORD (z) == 0) z = SUBREG_REG (z); if (GET_MODE_SIZE (GET_MODE (x)) > UNITS_PER_WORD --- 3142,3148 ---- code did. This is especially true of REG_RETVAL. */ ! if (GET_CODE (z) == SUBREG && SUBREG_BYTE (z) == 0) z = SUBREG_REG (z); if (GET_MODE_SIZE (GET_MODE (x)) > UNITS_PER_WORD *************** purge_addressof_1 (loc, insn, force, sto *** 3093,3099 **** example when the original insn was a MEM in a wider mode, and the note is part of a sign extension of a narrowed version of that MEM. Gcc testcase compile/990829-1.c can ! generate an example of this siutation. Rather than complain we return false, which will prompt our caller to remove the offending note. */ return false; --- 3168,3174 ---- example when the original insn was a MEM in a wider mode, and the note is part of a sign extension of a narrowed version of that MEM. Gcc testcase compile/990829-1.c can ! generate an example of this situation. Rather than complain we return false, which will prompt our caller to remove the offending note. */ return false; *************** purge_addressof_1 (loc, insn, force, sto *** 3133,3140 **** start_sequence (); store_bit_field (sub, size_x, 0, GET_MODE (x), ! val, GET_MODE_SIZE (GET_MODE (sub)), ! GET_MODE_ALIGNMENT (GET_MODE (sub))); /* Make sure to unshare any shared rtl that store_bit_field might have created. */ --- 3208,3214 ---- start_sequence (); store_bit_field (sub, size_x, 0, GET_MODE (x), ! val, GET_MODE_SIZE (GET_MODE (sub))); /* Make sure to unshare any shared rtl that store_bit_field might have created. */ *************** purge_addressof_1 (loc, insn, force, sto *** 3155,3161 **** start_sequence (); val = extract_bit_field (sub, size_x, 0, 1, NULL_RTX, GET_MODE (x), GET_MODE (x), - GET_MODE_SIZE (GET_MODE (sub)), GET_MODE_SIZE (GET_MODE (sub))); if (! validate_change (insn, loc, val, 0)) --- 3229,3234 ---- *************** purge_addressof_1 (loc, insn, force, sto *** 3210,3231 **** } goto restart; } - give_up:; - /* else give up and put it into the stack */ - } - - else if (code == ADDRESSOF) - { - put_addressof_into_stack (x, ht); - return true; - } - else if (code == SET) - { - result = purge_addressof_1 (&SET_DEST (x), insn, force, 1, ht); - result &= purge_addressof_1 (&SET_SRC (x), insn, force, 0, ht); - return result; } /* Scan all subexpressions. */ fmt = GET_RTX_FORMAT (code); for (i = 0; i < GET_RTX_LENGTH (code); i++, fmt++) --- 3283,3291 ---- } goto restart; } } + give_up: /* Scan all subexpressions. */ fmt = GET_RTX_FORMAT (code); for (i = 0; i < GET_RTX_LENGTH (code); i++, fmt++) *************** insns_for_mem_comp (k1, k2) *** 3279,3290 **** return k1 == k2; } ! struct insns_for_mem_walk_info { /* The hash table that we are using to record which INSNs use which MEMs. */ struct hash_table *ht; ! /* The INSN we are currently proessing. */ rtx insn; /* Zero if we are walking to find ADDRESSOFs, one if we are walking --- 3339,3351 ---- return k1 == k2; } ! struct insns_for_mem_walk_info ! { /* The hash table that we are using to record which INSNs use which MEMs. */ struct hash_table *ht; ! /* The INSN we are currently processing. */ rtx insn; /* Zero if we are walking to find ADDRESSOFs, one if we are walking *************** compute_insns_for_mem (insns, last_insn, *** 3352,3357 **** --- 3413,3419 ---- /* Helper function for purge_addressof called through for_each_rtx. Returns true iff the rtl is an ADDRESSOF. */ + static int is_addressof (rtl, data) rtx *rtl; *************** purge_addressof (insns) *** 3434,3440 **** unshare_all_rtl_again (get_insns ()); } ! /* Convert a SET of a hard subreg to a set of the appropriet hard register. A subroutine of purge_hard_subreg_sets. */ static void --- 3496,3502 ---- unshare_all_rtl_again (get_insns ()); } ! /* Convert a SET of a hard subreg to a set of the appropriate hard register. A subroutine of purge_hard_subreg_sets. */ static void *************** purge_single_hard_subreg_set (pattern) *** 3443,3459 **** { rtx reg = SET_DEST (pattern); enum machine_mode mode = GET_MODE (SET_DEST (pattern)); ! int word = 0; ! ! while (GET_CODE (reg) == SUBREG) { ! word += SUBREG_WORD (reg); reg = SUBREG_REG (reg); } ! ! if (REGNO (reg) < FIRST_PSEUDO_REGISTER) { ! reg = gen_rtx_REG (mode, REGNO (reg) + word); SET_DEST (pattern) = reg; } } --- 3505,3526 ---- { rtx reg = SET_DEST (pattern); enum machine_mode mode = GET_MODE (SET_DEST (pattern)); ! int offset = 0; ! ! if (GET_CODE (reg) == SUBREG && GET_CODE (SUBREG_REG (reg)) == REG ! && REGNO (SUBREG_REG (reg)) < FIRST_PSEUDO_REGISTER) { ! offset = subreg_regno_offset (REGNO (SUBREG_REG (reg)), ! GET_MODE (SUBREG_REG (reg)), ! SUBREG_BYTE (reg), ! GET_MODE (reg)); reg = SUBREG_REG (reg); } ! ! ! if (GET_CODE (reg) == REG && REGNO (reg) < FIRST_PSEUDO_REGISTER) { ! reg = gen_rtx_REG (mode, REGNO (reg) + offset); SET_DEST (pattern) = reg; } } *************** instantiate_decls (fndecl, valid_only) *** 3572,3584 **** for (decl = DECL_ARGUMENTS (fndecl); decl; decl = TREE_CHAIN (decl)) { HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (decl)); instantiate_decl (DECL_RTL (decl), size, valid_only); /* If the parameter was promoted, then the incoming RTL mode may be larger than the declared type size. We must use the larger of the two sizes. */ ! size = MAX (GET_MODE_SIZE (GET_MODE (DECL_INCOMING_RTL (decl))), size); instantiate_decl (DECL_INCOMING_RTL (decl), size, valid_only); } --- 3639,3653 ---- for (decl = DECL_ARGUMENTS (fndecl); decl; decl = TREE_CHAIN (decl)) { HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (decl)); + HOST_WIDE_INT size_rtl; instantiate_decl (DECL_RTL (decl), size, valid_only); /* If the parameter was promoted, then the incoming RTL mode may be larger than the declared type size. We must use the larger of the two sizes. */ ! size_rtl = GET_MODE_SIZE (GET_MODE (DECL_INCOMING_RTL (decl))); ! size = MAX (size_rtl, size); instantiate_decl (DECL_INCOMING_RTL (decl), size, valid_only); } *************** instantiate_decl (x, size, valid_only) *** 3675,3681 **** } /* Given a piece of RTX and a pointer to a HOST_WIDE_INT, if the RTX ! is a virtual register, return the requivalent hard register and set the offset indirectly through the pointer. Otherwise, return 0. */ static rtx --- 3744,3750 ---- } /* Given a piece of RTX and a pointer to a HOST_WIDE_INT, if the RTX ! is a virtual register, return the equivalent hard register and set the offset indirectly through the pointer. Otherwise, return 0. */ static rtx *************** instantiate_virtual_regs_1 (loc, object, *** 3746,3751 **** --- 3815,3821 ---- { case CONST_INT: case CONST_DOUBLE: + case CONST_VECTOR: case CONST: case SYMBOL_REF: case CODE_LABEL: *************** instantiate_virtual_regs_1 (loc, object, *** 4002,4007 **** --- 4072,4078 ---- } /* Fall through to generic unary operation case. */ + case PREFETCH: case SUBREG: case STRICT_LOW_PART: case NEG: case NOT: *************** delete_handlers () *** 4143,4149 **** || (nonlocal_goto_stack_level != 0 && reg_mentioned_p (nonlocal_goto_stack_level, PATTERN (insn)))) ! delete_insn (insn); } } } --- 4214,4220 ---- || (nonlocal_goto_stack_level != 0 && reg_mentioned_p (nonlocal_goto_stack_level, PATTERN (insn)))) ! delete_related_insns (insn); } } } *************** get_first_nonparm_insn () *** 4170,4177 **** rtx get_first_block_beg () { ! register rtx searcher; ! register rtx insn = get_first_nonparm_insn (); for (searcher = insn; searcher; searcher = NEXT_INSN (searcher)) if (GET_CODE (searcher) == NOTE --- 4241,4248 ---- rtx get_first_block_beg () { ! rtx searcher; ! rtx insn = get_first_nonparm_insn (); for (searcher = insn; searcher; searcher = NEXT_INSN (searcher)) if (GET_CODE (searcher) == NOTE *************** void *** 4231,4239 **** assign_parms (fndecl) tree fndecl; { ! register tree parm; ! register rtx entry_parm = 0; ! register rtx stack_parm = 0; CUMULATIVE_ARGS args_so_far; enum machine_mode promoted_mode, passed_mode; enum machine_mode nominal_mode, promoted_nominal_mode; --- 4302,4310 ---- assign_parms (fndecl) tree fndecl; { ! tree parm; ! rtx entry_parm = 0; ! rtx stack_parm = 0; CUMULATIVE_ARGS args_so_far; enum machine_mode promoted_mode, passed_mode; enum machine_mode nominal_mode, promoted_nominal_mode; *************** assign_parms (fndecl) *** 4329,4344 **** tree passed_type = DECL_ARG_TYPE (parm); tree nominal_type = TREE_TYPE (parm); int pretend_named; ! /* Set LAST_NAMED if this is last named arg before some anonymous args. */ ! int last_named = ((TREE_CHAIN (parm) == 0 ! || DECL_NAME (TREE_CHAIN (parm)) == 0) ! && (stdarg || current_function_varargs)); /* Set NAMED_ARG if this arg should be treated as a named arg. For most machines, if this is a varargs/stdarg function, then we treat the last named arg as if it were anonymous too. */ ! int named_arg = STRICT_ARGUMENT_NAMING ? 1 : ! last_named; if (TREE_TYPE (parm) == error_mark_node /* This can happen after weird syntax errors --- 4400,4424 ---- tree passed_type = DECL_ARG_TYPE (parm); tree nominal_type = TREE_TYPE (parm); int pretend_named; + int last_named = 0, named_arg; ! /* Set LAST_NAMED if this is last named arg before last anonymous args. */ ! if (stdarg || current_function_varargs) ! { ! tree tem; ! ! for (tem = TREE_CHAIN (parm); tem; tem = TREE_CHAIN (tem)) ! if (DECL_NAME (tem)) ! break; ! ! if (tem == 0) ! last_named = 1; ! } /* Set NAMED_ARG if this arg should be treated as a named arg. For most machines, if this is a varargs/stdarg function, then we treat the last named arg as if it were anonymous too. */ ! named_arg = STRICT_ARGUMENT_NAMING ? 1 : ! last_named; if (TREE_TYPE (parm) == error_mark_node /* This can happen after weird syntax errors *************** assign_parms (fndecl) *** 4513,4520 **** locations. The Irix 6 ABI has examples of this. */ if (GET_CODE (entry_parm) == PARALLEL) emit_group_store (validize_mem (stack_parm), entry_parm, ! int_size_in_bytes (TREE_TYPE (parm)), ! TYPE_ALIGN (TREE_TYPE (parm))); else move_block_from_reg (REGNO (entry_parm), --- 4593,4599 ---- locations. The Irix 6 ABI has examples of this. */ if (GET_CODE (entry_parm) == PARALLEL) emit_group_store (validize_mem (stack_parm), entry_parm, ! int_size_in_bytes (TREE_TYPE (parm))); else move_block_from_reg (REGNO (entry_parm), *************** assign_parms (fndecl) *** 4655,4662 **** locations. The Irix 6 ABI has examples of this. */ if (GET_CODE (entry_parm) == PARALLEL) emit_group_store (validize_mem (stack_parm), entry_parm, ! int_size_in_bytes (TREE_TYPE (parm)), ! TYPE_ALIGN (TREE_TYPE (parm))); else move_block_from_reg (REGNO (entry_parm), validize_mem (stack_parm), --- 4734,4740 ---- locations. The Irix 6 ABI has examples of this. */ if (GET_CODE (entry_parm) == PARALLEL) emit_group_store (validize_mem (stack_parm), entry_parm, ! int_size_in_bytes (TREE_TYPE (parm))); else move_block_from_reg (REGNO (entry_parm), validize_mem (stack_parm), *************** assign_parms (fndecl) *** 4666,4673 **** SET_DECL_RTL (parm, stack_parm); } else if (! ((! optimize ! && ! DECL_REGISTER (parm) ! && ! DECL_INLINE (fndecl)) || TREE_SIDE_EFFECTS (parm) /* If -ffloat-store specified, don't put explicit float variables into registers. */ --- 4744,4750 ---- SET_DECL_RTL (parm, stack_parm); } else if (! ((! optimize ! && ! DECL_REGISTER (parm)) || TREE_SIDE_EFFECTS (parm) /* If -ffloat-store specified, don't put explicit float variables into registers. */ *************** assign_parms (fndecl) *** 4680,4686 **** /* Store the parm in a pseudoregister during the function, but we may need to do it in a wider mode. */ ! register rtx parmreg; unsigned int regno, regnoi = 0, regnor = 0; unsignedp = TREE_UNSIGNED (TREE_TYPE (parm)); --- 4757,4763 ---- /* Store the parm in a pseudoregister during the function, but we may need to do it in a wider mode. */ ! rtx parmreg; unsigned int regno, regnoi = 0, regnor = 0; unsignedp = TREE_UNSIGNED (TREE_TYPE (parm)); *************** assign_parms (fndecl) *** 4695,4704 **** appropriately. */ if (passed_pointer) { ! SET_DECL_RTL (parm, ! gen_rtx_MEM (TYPE_MODE (TREE_TYPE (passed_type)), ! parmreg)); ! set_mem_attributes (DECL_RTL (parm), parm, 1); } else { --- 4772,4781 ---- appropriately. */ if (passed_pointer) { ! rtx x = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (passed_type)), ! parmreg); ! set_mem_attributes (x, parm, 1); ! SET_DECL_RTL (parm, x); } else { *************** assign_parms (fndecl) *** 4737,4742 **** --- 4814,4833 ---- push_to_sequence (conversion_insns); tempreg = convert_to_mode (nominal_mode, tempreg, unsignedp); + if (GET_CODE (tempreg) == SUBREG + && GET_MODE (tempreg) == nominal_mode + && GET_CODE (SUBREG_REG (tempreg)) == REG + && nominal_mode == passed_mode + && GET_MODE (SUBREG_REG (tempreg)) == GET_MODE (entry_parm) + && GET_MODE_SIZE (GET_MODE (tempreg)) + < GET_MODE_SIZE (GET_MODE (entry_parm))) + { + /* The argument is already sign/zero extended, so note it + into the subreg. */ + SUBREG_PROMOTED_VAR_P (tempreg) = 1; + SUBREG_PROMOTED_UNSIGNED_P (tempreg) = unsignedp; + } + /* TREE_USED gets set erroneously during expand_assignment. */ save_tree_used = TREE_USED (parm); expand_assignment (parm, *************** assign_parms (fndecl) *** 4752,4765 **** /* If we were passed a pointer but the actual value can safely live in a register, put it in one. */ if (passed_pointer && TYPE_MODE (TREE_TYPE (parm)) != BLKmode ! && ! ((! optimize ! && ! DECL_REGISTER (parm) ! && ! DECL_INLINE (fndecl)) ! || TREE_SIDE_EFFECTS (parm) ! /* If -ffloat-store specified, don't put explicit ! float variables into registers. */ ! || (flag_float_store ! && TREE_CODE (TREE_TYPE (parm)) == REAL_TYPE))) { /* We can't use nominal_mode, because it will have been set to Pmode above. We must use the actual mode of the parm. */ --- 4843,4857 ---- /* If we were passed a pointer but the actual value can safely live in a register, put it in one. */ if (passed_pointer && TYPE_MODE (TREE_TYPE (parm)) != BLKmode ! /* If by-reference argument was promoted, demote it. */ ! && (TYPE_MODE (TREE_TYPE (parm)) != GET_MODE (DECL_RTL (parm)) ! || ! ((! optimize ! && ! DECL_REGISTER (parm)) ! || TREE_SIDE_EFFECTS (parm) ! /* If -ffloat-store specified, don't put explicit ! float variables into registers. */ ! || (flag_float_store ! && TREE_CODE (TREE_TYPE (parm)) == REAL_TYPE)))) { /* We can't use nominal_mode, because it will have been set to Pmode above. We must use the actual mode of the parm. */ *************** assign_parms (fndecl) *** 4825,4838 **** store_expr (parm, copy, 0); emit_move_insn (parmreg, XEXP (copy, 0)); - if (current_function_check_memory_usage) - emit_library_call (chkr_set_right_libfunc, - LCT_CONST_MAKE_BLOCK, VOIDmode, 3, - XEXP (copy, 0), Pmode, - GEN_INT (int_size_in_bytes (type)), - TYPE_MODE (sizetype), - GEN_INT (MEMORY_USE_RW), - TYPE_MODE (integer_type_node)); conversion_insns = get_insns (); did_conversion = 1; end_sequence (); --- 4917,4922 ---- *************** assign_parms (fndecl) *** 4944,4950 **** { /* If we end up putting something into the stack, fixup_var_refs_insns will need to make a pass over ! all the instructions. It looks throughs the pending sequences -- but it can't see the ones in the CONVERSION_INSNS, if they're not on the sequence stack. So, we go back to that sequence, just so that --- 5028,5034 ---- { /* If we end up putting something into the stack, fixup_var_refs_insns will need to make a pass over ! all the instructions. It looks through the pending sequences -- but it can't see the ones in the CONVERSION_INSNS, if they're not on the sequence stack. So, we go back to that sequence, just so that *************** assign_parms (fndecl) *** 4962,4968 **** if (promoted_mode != nominal_mode) { ! /* Conversion is required. */ rtx tempreg = gen_reg_rtx (GET_MODE (entry_parm)); emit_move_insn (tempreg, validize_mem (entry_parm)); --- 5046,5052 ---- if (promoted_mode != nominal_mode) { ! /* Conversion is required. */ rtx tempreg = gen_reg_rtx (GET_MODE (entry_parm)); emit_move_insn (tempreg, validize_mem (entry_parm)); *************** assign_parms (fndecl) *** 4971,4981 **** entry_parm = convert_to_mode (nominal_mode, tempreg, TREE_UNSIGNED (TREE_TYPE (parm))); if (stack_parm) ! { ! /* ??? This may need a big-endian conversion on sparc64. */ ! stack_parm = change_address (stack_parm, nominal_mode, ! NULL_RTX); ! } conversion_insns = get_insns (); did_conversion = 1; end_sequence (); --- 5055,5063 ---- entry_parm = convert_to_mode (nominal_mode, tempreg, TREE_UNSIGNED (TREE_TYPE (parm))); if (stack_parm) ! /* ??? This may need a big-endian conversion on sparc64. */ ! stack_parm = adjust_address (stack_parm, nominal_mode, 0); ! conversion_insns = get_insns (); did_conversion = 1; end_sequence (); *************** assign_parms (fndecl) *** 5003,5022 **** emit_move_insn (validize_mem (stack_parm), validize_mem (entry_parm)); } - if (current_function_check_memory_usage) - { - push_to_sequence (conversion_insns); - emit_library_call (chkr_set_right_libfunc, LCT_CONST_MAKE_BLOCK, - VOIDmode, 3, XEXP (stack_parm, 0), Pmode, - GEN_INT (GET_MODE_SIZE (GET_MODE - (entry_parm))), - TYPE_MODE (sizetype), - GEN_INT (MEMORY_USE_RW), - TYPE_MODE (integer_type_node)); - conversion_insns = get_insns (); - end_sequence (); - } SET_DECL_RTL (parm, stack_parm); } --- 5085,5091 ---- *************** assign_parms (fndecl) *** 5025,5036 **** if (parm == function_result_decl) { tree result = DECL_RESULT (fndecl); ! SET_DECL_RTL (result, ! gen_rtx_MEM (DECL_MODE (result), DECL_RTL (parm))); ! set_mem_attributes (DECL_RTL (result), result, 1); } } /* Output all parameter conversion instructions (possibly including calls) --- 5094,5120 ---- if (parm == function_result_decl) { tree result = DECL_RESULT (fndecl); + rtx addr = DECL_RTL (parm); + rtx x; ! #ifdef POINTERS_EXTEND_UNSIGNED ! if (GET_MODE (addr) != Pmode) ! addr = convert_memory_address (Pmode, addr); ! #endif ! x = gen_rtx_MEM (DECL_MODE (result), addr); ! set_mem_attributes (x, result, 1); ! SET_DECL_RTL (result, x); } + + if (GET_CODE (DECL_RTL (parm)) == REG) + REGNO_DECL (REGNO (DECL_RTL (parm))) = parm; + else if (GET_CODE (DECL_RTL (parm)) == CONCAT) + { + REGNO_DECL (REGNO (XEXP (DECL_RTL (parm), 0))) = parm; + REGNO_DECL (REGNO (XEXP (DECL_RTL (parm), 1))) = parm; + } + } /* Output all parameter conversion instructions (possibly including calls) *************** assign_parms (fndecl) *** 5051,5070 **** #endif #endif - #ifdef STACK_BOUNDARY #define STACK_BYTES (STACK_BOUNDARY / BITS_PER_UNIT) current_function_args_size = ((current_function_args_size + STACK_BYTES - 1) / STACK_BYTES) * STACK_BYTES; - #endif #ifdef ARGS_GROW_DOWNWARD current_function_arg_offset_rtx = (stack_args_size.var == 0 ? GEN_INT (-stack_args_size.constant) : expand_expr (size_diffop (stack_args_size.var, size_int (-stack_args_size.constant)), ! NULL_RTX, VOIDmode, EXPAND_MEMORY_USE_BAD)); #else current_function_arg_offset_rtx = ARGS_SIZE_RTX (stack_args_size); #endif --- 5135,5152 ---- #endif #endif #define STACK_BYTES (STACK_BOUNDARY / BITS_PER_UNIT) current_function_args_size = ((current_function_args_size + STACK_BYTES - 1) / STACK_BYTES) * STACK_BYTES; #ifdef ARGS_GROW_DOWNWARD current_function_arg_offset_rtx = (stack_args_size.var == 0 ? GEN_INT (-stack_args_size.constant) : expand_expr (size_diffop (stack_args_size.var, size_int (-stack_args_size.constant)), ! NULL_RTX, VOIDmode, 0)); #else current_function_arg_offset_rtx = ARGS_SIZE_RTX (stack_args_size); #endif *************** assign_parms (fndecl) *** 5089,5094 **** --- 5171,5205 ---- current_function_return_rtx = (DECL_RTL_SET_P (DECL_RESULT (fndecl)) ? DECL_RTL (DECL_RESULT (fndecl)) : NULL_RTX); + + /* If scalar return value was computed in a pseudo-reg, or was a named + return value that got dumped to the stack, copy that to the hard + return register. */ + if (DECL_RTL_SET_P (DECL_RESULT (fndecl))) + { + tree decl_result = DECL_RESULT (fndecl); + rtx decl_rtl = DECL_RTL (decl_result); + + if (REG_P (decl_rtl) + ? REGNO (decl_rtl) >= FIRST_PSEUDO_REGISTER + : DECL_REGISTER (decl_result)) + { + rtx real_decl_rtl; + + #ifdef FUNCTION_OUTGOING_VALUE + real_decl_rtl = FUNCTION_OUTGOING_VALUE (TREE_TYPE (decl_result), + fndecl); + #else + real_decl_rtl = FUNCTION_VALUE (TREE_TYPE (decl_result), + fndecl); + #endif + REG_FUNCTION_VALUE_P (real_decl_rtl) = 1; + /* The delay slot scheduler assumes that current_function_return_rtx + holds the hard register containing the return value, not a + temporary pseudo. */ + current_function_return_rtx = real_decl_rtl; + } + } } /* Indicate whether REGNO is an incoming argument to the current function *************** promoted_input_arg (regno, pmode, punsig *** 5158,5164 **** /* offset_ptr will be negative for ARGS_GROW_DOWNWARD case; initial_offset_ptr is positive because locate_and_pad_parm's callers pass in the total size of args so far as ! initial_offset_ptr. arg_size_ptr is always positive.*/ void locate_and_pad_parm (passed_mode, type, in_regs, fndecl, --- 5269,5275 ---- /* offset_ptr will be negative for ARGS_GROW_DOWNWARD case; initial_offset_ptr is positive because locate_and_pad_parm's callers pass in the total size of args so far as ! initial_offset_ptr. arg_size_ptr is always positive. */ void locate_and_pad_parm (passed_mode, type, in_regs, fndecl, *************** void *** 5365,5371 **** uninitialized_vars_warning (block) tree block; { ! register tree decl, sub; for (decl = BLOCK_VARS (block); decl; decl = TREE_CHAIN (decl)) { if (warn_uninitialized --- 5476,5482 ---- uninitialized_vars_warning (block) tree block; { ! tree decl, sub; for (decl = BLOCK_VARS (block); decl; decl = TREE_CHAIN (decl)) { if (warn_uninitialized *************** uninitialized_vars_warning (block) *** 5406,5412 **** void setjmp_args_warning () { ! register tree decl; for (decl = DECL_ARGUMENTS (current_function_decl); decl; decl = TREE_CHAIN (decl)) if (DECL_RTL (decl) != 0 --- 5517,5523 ---- void setjmp_args_warning () { ! tree decl; for (decl = DECL_ARGUMENTS (current_function_decl); decl; decl = TREE_CHAIN (decl)) if (DECL_RTL (decl) != 0 *************** void *** 5423,5429 **** setjmp_protect (block) tree block; { ! register tree decl, sub; for (decl = BLOCK_VARS (block); decl; decl = TREE_CHAIN (decl)) if ((TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL) --- 5534,5540 ---- setjmp_protect (block) tree block; { ! tree decl, sub; for (decl = BLOCK_VARS (block); decl; decl = TREE_CHAIN (decl)) if ((TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL) *************** setjmp_protect (block) *** 5455,5461 **** void setjmp_protect_args () { ! register tree decl; for (decl = DECL_ARGUMENTS (current_function_decl); decl; decl = TREE_CHAIN (decl)) if ((TREE_CODE (decl) == VAR_DECL --- 5566,5572 ---- void setjmp_protect_args () { ! tree decl; for (decl = DECL_ARGUMENTS (current_function_decl); decl; decl = TREE_CHAIN (decl)) if ((TREE_CODE (decl) == VAR_DECL *************** fix_lexical_addr (addr, var) *** 5522,5533 **** if (context == current_function_decl || context == inline_function_decl) return addr; ! for (fp = outer_function_chain; fp; fp = fp->next) ! if (fp->decl == context) ! break; ! ! if (fp == 0) ! abort (); if (GET_CODE (addr) == ADDRESSOF && GET_CODE (XEXP (addr, 0)) == MEM) addr = XEXP (XEXP (addr, 0), 0); --- 5633,5639 ---- if (context == current_function_decl || context == inline_function_decl) return addr; ! fp = find_function_data (context); if (GET_CODE (addr) == ADDRESSOF && GET_CODE (XEXP (addr, 0)) == MEM) addr = XEXP (XEXP (addr, 0), 0); *************** fix_lexical_addr (addr, var) *** 5556,5570 **** #ifdef NEED_SEPARATE_AP rtx addr; ! if (fp->x_arg_pointer_save_area == 0) ! fp->x_arg_pointer_save_area ! = assign_stack_local_1 (Pmode, GET_MODE_SIZE (Pmode), 0, fp); ! ! addr = fix_lexical_addr (XEXP (fp->x_arg_pointer_save_area, 0), var); addr = memory_address (Pmode, addr); base = gen_rtx_MEM (Pmode, addr); ! MEM_ALIAS_SET (base) = get_frame_alias_set (); base = copy_to_reg (base); #else displacement += (FIRST_PARM_OFFSET (context) - STARTING_FRAME_OFFSET); --- 5662,5673 ---- #ifdef NEED_SEPARATE_AP rtx addr; ! addr = get_arg_pointer_save_area (fp); ! addr = fix_lexical_addr (XEXP (addr, 0), var); addr = memory_address (Pmode, addr); base = gen_rtx_MEM (Pmode, addr); ! set_mem_alias_set (base, get_frame_alias_set ()); base = copy_to_reg (base); #else displacement += (FIRST_PARM_OFFSET (context) - STARTING_FRAME_OFFSET); *************** trampoline_address (function) *** 5614,5620 **** return adjust_trampoline_addr (XEXP (RTL_EXPR_RTL (TREE_VALUE (link)), 0)); ! for (fp = outer_function_chain; fp; fp = fp->next) for (link = fp->x_trampoline_list; link; link = TREE_CHAIN (link)) if (TREE_PURPOSE (link) == function) { --- 5717,5723 ---- return adjust_trampoline_addr (XEXP (RTL_EXPR_RTL (TREE_VALUE (link)), 0)); ! for (fp = outer_function_chain; fp; fp = fp->outer) for (link = fp->x_trampoline_list; link; link = TREE_CHAIN (link)) if (TREE_PURPOSE (link) == function) { *************** trampoline_address (function) *** 5630,5638 **** fn_context = decl_function_context (function); if (fn_context != current_function_decl && fn_context != inline_function_decl) ! for (fp = outer_function_chain; fp; fp = fp->next) ! if (fp->decl == fn_context) ! break; /* Allocate run-time space for this trampoline (usually in the defining function's stack frame). */ --- 5733,5739 ---- fn_context = decl_function_context (function); if (fn_context != current_function_decl && fn_context != inline_function_decl) ! fp = find_function_data (fn_context); /* Allocate run-time space for this trampoline (usually in the defining function's stack frame). */ *************** round_trampoline_addr (tramp) *** 5684,5702 **** #ifdef TRAMPOLINE_ALIGNMENT /* Round address up to desired boundary. */ rtx temp = gen_reg_rtx (Pmode); ! temp = expand_binop (Pmode, add_optab, tramp, ! GEN_INT (TRAMPOLINE_ALIGNMENT / BITS_PER_UNIT - 1), ! temp, 0, OPTAB_LIB_WIDEN); ! tramp = expand_binop (Pmode, and_optab, temp, ! GEN_INT (-TRAMPOLINE_ALIGNMENT / BITS_PER_UNIT), ! temp, 0, OPTAB_LIB_WIDEN); #endif return tramp; } /* Given a trampoline address, round it then apply any platform-specific adjustments so that the result can be used for a ! function call . */ static rtx adjust_trampoline_addr (tramp) --- 5785,5804 ---- #ifdef TRAMPOLINE_ALIGNMENT /* Round address up to desired boundary. */ rtx temp = gen_reg_rtx (Pmode); ! rtx addend = GEN_INT (TRAMPOLINE_ALIGNMENT / BITS_PER_UNIT - 1); ! rtx mask = GEN_INT (-TRAMPOLINE_ALIGNMENT / BITS_PER_UNIT); ! ! temp = expand_simple_binop (Pmode, PLUS, tramp, addend, ! temp, 0, OPTAB_LIB_WIDEN); ! tramp = expand_simple_binop (Pmode, AND, temp, mask, ! temp, 0, OPTAB_LIB_WIDEN); #endif return tramp; } /* Given a trampoline address, round it then apply any platform-specific adjustments so that the result can be used for a ! function call . */ static rtx adjust_trampoline_addr (tramp) *************** identify_blocks_1 (insns, block_vector, *** 5813,5820 **** return block_vector; } ! /* Identify BLOCKs referenced by more than one ! NOTE_INSN_BLOCK_{BEG,END}, and create duplicate blocks. */ void reorder_blocks () --- 5915,5925 ---- return block_vector; } ! /* Identify BLOCKs referenced by more than one NOTE_INSN_BLOCK_{BEG,END}, ! and create duplicate blocks. */ ! /* ??? Need an option to either create block fragments or to create ! abstract origin duplicates of a source block. It really depends ! on what optimization has been performed. */ void reorder_blocks () *************** reorder_blocks () *** 5827,5873 **** VARRAY_TREE_INIT (block_stack, 10, "block_stack"); /* Prune the old trees away, so that they don't get in the way. */ BLOCK_SUBBLOCKS (block) = NULL_TREE; BLOCK_CHAIN (block) = NULL_TREE; ! reorder_blocks_0 (get_insns ()); reorder_blocks_1 (get_insns (), block, &block_stack); - BLOCK_SUBBLOCKS (block) = blocks_nreverse (BLOCK_SUBBLOCKS (block)); VARRAY_FREE (block_stack); } ! /* Helper function for reorder_blocks. Process the insn chain beginning ! at INSNS. Recurse for CALL_PLACEHOLDER insns. */ static void ! reorder_blocks_0 (insns) ! rtx insns; { ! rtx insn; ! ! for (insn = insns; insn; insn = NEXT_INSN (insn)) { ! if (GET_CODE (insn) == NOTE) ! { ! if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_BLOCK_BEG) ! { ! tree block = NOTE_BLOCK (insn); ! TREE_ASM_WRITTEN (block) = 0; ! } ! } ! else if (GET_CODE (insn) == CALL_INSN ! && GET_CODE (PATTERN (insn)) == CALL_PLACEHOLDER) ! { ! rtx cp = PATTERN (insn); ! reorder_blocks_0 (XEXP (cp, 0)); ! if (XEXP (cp, 1)) ! reorder_blocks_0 (XEXP (cp, 1)); ! if (XEXP (cp, 2)) ! reorder_blocks_0 (XEXP (cp, 2)); ! } } } --- 5932,5965 ---- VARRAY_TREE_INIT (block_stack, 10, "block_stack"); + /* Reset the TREE_ASM_WRITTEN bit for all blocks. */ + reorder_blocks_0 (block); + /* Prune the old trees away, so that they don't get in the way. */ BLOCK_SUBBLOCKS (block) = NULL_TREE; BLOCK_CHAIN (block) = NULL_TREE; ! /* Recreate the block tree from the note nesting. */ reorder_blocks_1 (get_insns (), block, &block_stack); BLOCK_SUBBLOCKS (block) = blocks_nreverse (BLOCK_SUBBLOCKS (block)); + /* Remove deleted blocks from the block fragment chains. */ + reorder_fix_fragments (block); + VARRAY_FREE (block_stack); } ! /* Helper function for reorder_blocks. Reset TREE_ASM_WRITTEN. */ static void ! reorder_blocks_0 (block) ! tree block; { ! while (block) { ! TREE_ASM_WRITTEN (block) = 0; ! reorder_blocks_0 (BLOCK_SUBBLOCKS (block)); ! block = BLOCK_CHAIN (block); } } *************** reorder_blocks_1 (insns, current_block, *** 5886,5897 **** if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_BLOCK_BEG) { tree block = NOTE_BLOCK (insn); ! /* If we have seen this block before, copy it. */ if (TREE_ASM_WRITTEN (block)) { ! block = copy_node (block); ! NOTE_BLOCK (insn) = block; } BLOCK_SUBBLOCKS (block) = 0; TREE_ASM_WRITTEN (block) = 1; BLOCK_SUPERCONTEXT (block) = current_block; --- 5978,6003 ---- if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_BLOCK_BEG) { tree block = NOTE_BLOCK (insn); ! ! /* If we have seen this block before, that means it now ! spans multiple address regions. Create a new fragment. */ if (TREE_ASM_WRITTEN (block)) { ! tree new_block = copy_node (block); ! tree origin; ! ! origin = (BLOCK_FRAGMENT_ORIGIN (block) ! ? BLOCK_FRAGMENT_ORIGIN (block) ! : block); ! BLOCK_FRAGMENT_ORIGIN (new_block) = origin; ! BLOCK_FRAGMENT_CHAIN (new_block) ! = BLOCK_FRAGMENT_CHAIN (origin); ! BLOCK_FRAGMENT_CHAIN (origin) = new_block; ! ! NOTE_BLOCK (insn) = new_block; ! block = new_block; } + BLOCK_SUBBLOCKS (block) = 0; TREE_ASM_WRITTEN (block) = 1; BLOCK_SUPERCONTEXT (block) = current_block; *************** reorder_blocks_1 (insns, current_block, *** 5922,5927 **** --- 6028,6089 ---- } } + /* Rationalize BLOCK_FRAGMENT_ORIGIN. If an origin block no longer + appears in the block tree, select one of the fragments to become + the new origin block. */ + + static void + reorder_fix_fragments (block) + tree block; + { + while (block) + { + tree dup_origin = BLOCK_FRAGMENT_ORIGIN (block); + tree new_origin = NULL_TREE; + + if (dup_origin) + { + if (! TREE_ASM_WRITTEN (dup_origin)) + { + new_origin = BLOCK_FRAGMENT_CHAIN (dup_origin); + + /* Find the first of the remaining fragments. There must + be at least one -- the current block. */ + while (! TREE_ASM_WRITTEN (new_origin)) + new_origin = BLOCK_FRAGMENT_CHAIN (new_origin); + BLOCK_FRAGMENT_ORIGIN (new_origin) = NULL_TREE; + } + } + else if (! dup_origin) + new_origin = block; + + /* Re-root the rest of the fragments to the new origin. In the + case that DUP_ORIGIN was null, that means BLOCK was the origin + of a chain of fragments and we want to remove those fragments + that didn't make it to the output. */ + if (new_origin) + { + tree *pp = &BLOCK_FRAGMENT_CHAIN (new_origin); + tree chain = *pp; + + while (chain) + { + if (TREE_ASM_WRITTEN (chain)) + { + BLOCK_FRAGMENT_ORIGIN (chain) = new_origin; + *pp = chain; + pp = &BLOCK_FRAGMENT_CHAIN (chain); + } + chain = BLOCK_FRAGMENT_CHAIN (chain); + } + *pp = NULL_TREE; + } + + reorder_fix_fragments (BLOCK_SUBBLOCKS (block)); + block = BLOCK_CHAIN (block); + } + } + /* Reverse the order of elements in the chain T of blocks, and return the new head of the chain (old last element). */ *************** static tree *** 5929,5935 **** blocks_nreverse (t) tree t; { ! register tree prev = 0, decl, next; for (decl = t; decl; decl = next) { next = BLOCK_CHAIN (decl); --- 6091,6097 ---- blocks_nreverse (t) tree t; { ! tree prev = 0, decl, next; for (decl = t; decl; decl = next) { next = BLOCK_CHAIN (decl); *************** number_blocks (fn) *** 6020,6031 **** return; } /* Allocate a function structure and reset its contents to the defaults. */ static void prepare_function_start () { ! cfun = (struct function *) xcalloc (1, sizeof (struct function)); init_stmt_for_function (); init_eh_for_function (); --- 6182,6217 ---- return; } + + /* If VAR is present in a subblock of BLOCK, return the subblock. */ + + tree + debug_find_var_in_block_tree (var, block) + tree var; + tree block; + { + tree t; + + for (t = BLOCK_VARS (block); t; t = TREE_CHAIN (t)) + if (t == var) + return block; + + for (t = BLOCK_SUBBLOCKS (block); t; t = TREE_CHAIN (t)) + { + tree ret = debug_find_var_in_block_tree (var, t); + if (ret) + return ret; + } + + return NULL_TREE; + } /* Allocate a function structure and reset its contents to the defaults. */ + static void prepare_function_start () { ! cfun = (struct function *) ggc_alloc_cleared (sizeof (struct function)); init_stmt_for_function (); init_eh_for_function (); *************** prepare_function_start () *** 6073,6085 **** cfun->original_decl_initial = 0; cfun->original_arg_vector = 0; - #ifdef STACK_BOUNDARY cfun->stack_alignment_needed = STACK_BOUNDARY; cfun->preferred_stack_boundary = STACK_BOUNDARY; - #else - cfun->stack_alignment_needed = 0; - cfun->preferred_stack_boundary = 0; - #endif /* Set if a call to setjmp is seen. */ current_function_calls_setjmp = 0; --- 6259,6266 ---- *************** init_function_start (subr, filename, lin *** 6173,6182 **** { prepare_function_start (); - /* Remember this function for later. */ - cfun->next_global = all_functions; - all_functions = cfun; - current_function_name = (*decl_printable_name) (subr, 2); cfun->decl = subr; --- 6354,6359 ---- *************** init_function_start (subr, filename, lin *** 6198,6204 **** /* Make sure first insn is a note even if we don't want linenums. This makes sure the first insn will never be deleted. Also, final expects a note to appear there. */ ! emit_note (NULL_PTR, NOTE_INSN_DELETED); /* Set flags used by final.c. */ if (aggregate_value_p (DECL_RESULT (subr))) --- 6375,6381 ---- /* Make sure first insn is a note even if we don't want linenums. This makes sure the first insn will never be deleted. Also, final expects a note to appear there. */ ! emit_note (NULL, NOTE_INSN_DELETED); /* Set flags used by final.c. */ if (aggregate_value_p (DECL_RESULT (subr))) *************** expand_main_function () *** 6255,6271 **** if (FORCE_PREFERRED_STACK_BOUNDARY_IN_MAIN) { int align = PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT; ! rtx tmp; ! /* Forcably align the stack. */ #ifdef STACK_GROWS_DOWNWARD ! tmp = expand_binop (Pmode, and_optab, stack_pointer_rtx, ! GEN_INT (-align), stack_pointer_rtx, 1, OPTAB_WIDEN); #else ! tmp = expand_binop (Pmode, add_optab, stack_pointer_rtx, ! GEN_INT (align - 1), NULL_RTX, 1, OPTAB_WIDEN); ! tmp = expand_binop (Pmode, and_optab, tmp, GEN_INT (-align), ! stack_pointer_rtx, 1, OPTAB_WIDEN); #endif if (tmp != stack_pointer_rtx) emit_move_insn (stack_pointer_rtx, tmp); --- 6432,6449 ---- if (FORCE_PREFERRED_STACK_BOUNDARY_IN_MAIN) { int align = PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT; ! rtx tmp, seq; ! start_sequence (); ! /* Forcibly align the stack. */ #ifdef STACK_GROWS_DOWNWARD ! tmp = expand_simple_binop (Pmode, AND, stack_pointer_rtx, GEN_INT(-align), ! stack_pointer_rtx, 1, OPTAB_WIDEN); #else ! tmp = expand_simple_binop (Pmode, PLUS, stack_pointer_rtx, ! GEN_INT (align - 1), NULL_RTX, 1, OPTAB_WIDEN); ! tmp = expand_simple_binop (Pmode, AND, tmp, GEN_INT (-align), ! stack_pointer_rtx, 1, OPTAB_WIDEN); #endif if (tmp != stack_pointer_rtx) emit_move_insn (stack_pointer_rtx, tmp); *************** expand_main_function () *** 6273,6283 **** /* Enlist allocate_dynamic_stack_space to pick up the pieces. */ tmp = force_reg (Pmode, const0_rtx); allocate_dynamic_stack_space (tmp, NULL_RTX, BIGGEST_ALIGNMENT); } #endif #ifndef HAS_INIT_SECTION ! emit_library_call (gen_rtx_SYMBOL_REF (Pmode, NAME__MAIN), 0, VOIDmode, 0); #endif } --- 6451,6471 ---- /* Enlist allocate_dynamic_stack_space to pick up the pieces. */ tmp = force_reg (Pmode, const0_rtx); allocate_dynamic_stack_space (tmp, NULL_RTX, BIGGEST_ALIGNMENT); + seq = gen_sequence (); + end_sequence (); + + for (tmp = get_last_insn (); tmp; tmp = PREV_INSN (tmp)) + if (NOTE_P (tmp) && NOTE_LINE_NUMBER (tmp) == NOTE_INSN_FUNCTION_BEG) + break; + if (tmp) + emit_insn_before (seq, tmp); + else + emit_insn (seq); } #endif #ifndef HAS_INIT_SECTION ! emit_library_call (gen_rtx_SYMBOL_REF (Pmode, NAME__MAIN), LCT_NORMAL, VOIDmode, 0); #endif } *************** expand_pending_sizes (pending_sizes) *** 6299,6306 **** /* Evaluate now the sizes of any types declared among the arguments. */ for (tem = pending_sizes; tem; tem = TREE_CHAIN (tem)) { ! expand_expr (TREE_VALUE (tem), const0_rtx, VOIDmode, ! EXPAND_MEMORY_USE_BAD); /* Flush the queue in case this parameter declaration has side-effects. */ emit_queue (); --- 6487,6493 ---- /* Evaluate now the sizes of any types declared among the arguments. */ for (tem = pending_sizes; tem; tem = TREE_CHAIN (tem)) { ! expand_expr (TREE_VALUE (tem), const0_rtx, VOIDmode, 0); /* Flush the queue in case this parameter declaration has side-effects. */ emit_queue (); *************** expand_function_start (subr, parms_have_ *** 6325,6339 **** valid operands of arithmetic insns. */ init_recog_no_volatile (); - /* Set this before generating any memory accesses. */ - current_function_check_memory_usage - = (flag_check_memory_usage - && ! DECL_NO_CHECK_MEMORY_USAGE (current_function_decl)); - current_function_instrument_entry_exit = (flag_instrument_function_entry_exit && ! DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (subr)); current_function_limit_stack = (stack_limit_rtx != NULL_RTX && ! DECL_NO_LIMIT_STACK (subr)); --- 6512,6525 ---- valid operands of arithmetic insns. */ init_recog_no_volatile (); current_function_instrument_entry_exit = (flag_instrument_function_entry_exit && ! DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (subr)); + current_function_profile + = (profile_flag + && ! DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (subr)); + current_function_limit_stack = (stack_limit_rtx != NULL_RTX && ! DECL_NO_LIMIT_STACK (subr)); *************** expand_function_start (subr, parms_have_ *** 6371,6377 **** if (aggregate_value_p (DECL_RESULT (subr))) { /* Returning something that won't go in a register. */ ! register rtx value_address = 0; #ifdef PCC_STATIC_STRUCT_RETURN if (current_function_returns_pcc_struct) --- 6557,6563 ---- if (aggregate_value_p (DECL_RESULT (subr))) { /* Returning something that won't go in a register. */ ! rtx value_address = 0; #ifdef PCC_STATIC_STRUCT_RETURN if (current_function_returns_pcc_struct) *************** expand_function_start (subr, parms_have_ *** 6393,6415 **** } if (value_address) { ! SET_DECL_RTL (DECL_RESULT (subr), ! gen_rtx_MEM (DECL_MODE (DECL_RESULT (subr)), ! value_address)); ! set_mem_attributes (DECL_RTL (DECL_RESULT (subr)), ! DECL_RESULT (subr), 1); } } else if (DECL_MODE (DECL_RESULT (subr)) == VOIDmode) /* If return mode is void, this decl rtl should not be used. */ SET_DECL_RTL (DECL_RESULT (subr), NULL_RTX); ! else if (parms_have_cleanups ! || current_function_instrument_entry_exit ! || (flag_exceptions && USING_SJLJ_EXCEPTIONS)) { ! /* If function will end with cleanup code for parms, compute the ! return values into a pseudo reg, which we will copy into the ! true return register after the cleanups are done. */ /* In order to figure out what mode to use for the pseudo, we figure out what the mode of the eventual return register will --- 6579,6596 ---- } if (value_address) { ! rtx x = gen_rtx_MEM (DECL_MODE (DECL_RESULT (subr)), value_address); ! set_mem_attributes (x, DECL_RESULT (subr), 1); ! SET_DECL_RTL (DECL_RESULT (subr), x); } } else if (DECL_MODE (DECL_RESULT (subr)) == VOIDmode) /* If return mode is void, this decl rtl should not be used. */ SET_DECL_RTL (DECL_RESULT (subr), NULL_RTX); ! else { ! /* Compute the return values into a pseudo reg, which we will copy ! into the true return register after the cleanups are done. */ /* In order to figure out what mode to use for the pseudo, we figure out what the mode of the eventual return register will *************** expand_function_start (subr, parms_have_ *** 6418,6446 **** = hard_function_value (TREE_TYPE (DECL_RESULT (subr)), subr, 1); ! /* Since we know the return value is not an aggregate, we should ! have a REG here. */ ! if (!REG_P (hard_reg)) ! abort (); ! ! /* Create the pseudo. */ ! SET_DECL_RTL (DECL_RESULT (subr), ! gen_reg_rtx (GET_MODE (hard_reg))); ! /* Needed because we may need to move this to memory ! in case it's a named return value whose address is taken. */ ! DECL_REGISTER (DECL_RESULT (subr)) = 1; ! } ! else ! { ! /* Scalar, returned in a register. */ ! SET_DECL_RTL (DECL_RESULT (subr), ! hard_function_value (TREE_TYPE (DECL_RESULT (subr)), ! subr, 1)); ! ! /* Mark this reg as the function's return value. */ ! if (GET_CODE (DECL_RTL (DECL_RESULT (subr))) == REG) { ! REG_FUNCTION_VALUE_P (DECL_RTL (DECL_RESULT (subr))) = 1; /* Needed because we may need to move this to memory in case it's a named return value whose address is taken. */ DECL_REGISTER (DECL_RESULT (subr)) = 1; --- 6599,6613 ---- = hard_function_value (TREE_TYPE (DECL_RESULT (subr)), subr, 1); ! /* Structures that are returned in registers are not aggregate_value_p, ! so we may see a PARALLEL. Don't play pseudo games with this. */ ! if (! REG_P (hard_reg)) ! SET_DECL_RTL (DECL_RESULT (subr), hard_reg); ! else { ! /* Create the pseudo. */ ! SET_DECL_RTL (DECL_RESULT (subr), gen_reg_rtx (GET_MODE (hard_reg))); ! /* Needed because we may need to move this to memory in case it's a named return value whose address is taken. */ DECL_REGISTER (DECL_RESULT (subr)) = 1; *************** expand_function_start (subr, parms_have_ *** 6463,6472 **** The move is supposed to make sdb output more accurate. */ /* Indicate the beginning of the function body, as opposed to parm setup. */ ! emit_note (NULL_PTR, NOTE_INSN_FUNCTION_BEG); if (GET_CODE (get_last_insn ()) != NOTE) ! emit_note (NULL_PTR, NOTE_INSN_DELETED); parm_birth_insn = get_last_insn (); context_display = 0; --- 6630,6639 ---- The move is supposed to make sdb output more accurate. */ /* Indicate the beginning of the function body, as opposed to parm setup. */ ! emit_note (NULL, NOTE_INSN_FUNCTION_BEG); if (GET_CODE (get_last_insn ()) != NOTE) ! emit_note (NULL, NOTE_INSN_DELETED); parm_birth_insn = get_last_insn (); context_display = 0; *************** expand_function_start (subr, parms_have_ *** 6504,6510 **** -(HOST_WIDE_INT) GET_MODE_SIZE (Pmode)); #endif last_ptr = gen_rtx_MEM (Pmode, memory_address (Pmode, last_ptr)); ! MEM_ALIAS_SET (last_ptr) = get_frame_alias_set (); last_ptr = copy_to_reg (last_ptr); /* If we are not optimizing, ensure that we know that this --- 6671,6677 ---- -(HOST_WIDE_INT) GET_MODE_SIZE (Pmode)); #endif last_ptr = gen_rtx_MEM (Pmode, memory_address (Pmode, last_ptr)); ! set_mem_alias_set (last_ptr, get_frame_alias_set ()); last_ptr = copy_to_reg (last_ptr); /* If we are not optimizing, ensure that we know that this *************** expand_function_start (subr, parms_have_ *** 6522,6544 **** fun = XEXP (fun, 0); else abort (); ! emit_library_call (profile_function_entry_libfunc, 0, VOIDmode, 2, ! fun, Pmode, expand_builtin_return_addr (BUILT_IN_RETURN_ADDRESS, 0, hard_frame_pointer_rtx), Pmode); } #ifdef PROFILE_HOOK ! if (profile_flag) ! PROFILE_HOOK (profile_label_no); #endif /* After the display initializations is where the tail-recursion label should go, if we end up needing one. Ensure we have a NOTE here since some things (like trampolines) get placed before this. */ ! tail_recursion_reentry = emit_note (NULL_PTR, NOTE_INSN_DELETED); /* Evaluate now the sizes of any types declared among the arguments. */ expand_pending_sizes (nreverse (get_pending_sizes ())); --- 6689,6714 ---- fun = XEXP (fun, 0); else abort (); ! emit_library_call (profile_function_entry_libfunc, LCT_NORMAL, VOIDmode, ! 2, fun, Pmode, expand_builtin_return_addr (BUILT_IN_RETURN_ADDRESS, 0, hard_frame_pointer_rtx), Pmode); } + if (current_function_profile) + { + current_function_profile_label_no = profile_label_no++; #ifdef PROFILE_HOOK ! PROFILE_HOOK (current_function_profile_label_no); #endif + } /* After the display initializations is where the tail-recursion label should go, if we end up needing one. Ensure we have a NOTE here since some things (like trampolines) get placed before this. */ ! tail_recursion_reentry = emit_note (NULL, NOTE_INSN_DELETED); /* Evaluate now the sizes of any types declared among the arguments. */ expand_pending_sizes (nreverse (get_pending_sizes ())); *************** expand_dummy_function_end () *** 6560,6566 **** free_after_parsing (cfun); free_after_compilation (cfun); - free (cfun); cfun = 0; } --- 6730,6735 ---- *************** diddle_return_value (doit, arg) *** 6573,6609 **** void *arg; { rtx outgoing = current_function_return_rtx; - int pcc; if (! outgoing) return; - pcc = (current_function_returns_struct - || current_function_returns_pcc_struct); - - if ((GET_CODE (outgoing) == REG - && REGNO (outgoing) >= FIRST_PSEUDO_REGISTER) - || pcc) - { - tree type = TREE_TYPE (DECL_RESULT (current_function_decl)); - - /* A PCC-style return returns a pointer to the memory in which - the structure is stored. */ - if (pcc) - type = build_pointer_type (type); - - #ifdef FUNCTION_OUTGOING_VALUE - outgoing = FUNCTION_OUTGOING_VALUE (type, current_function_decl); - #else - outgoing = FUNCTION_VALUE (type, current_function_decl); - #endif - /* If this is a BLKmode structure being returned in registers, then use - the mode computed in expand_return. */ - if (GET_MODE (outgoing) == BLKmode) - PUT_MODE (outgoing, GET_MODE (current_function_return_rtx)); - REG_FUNCTION_VALUE_P (outgoing) = 1; - } - if (GET_CODE (outgoing) == REG) (*doit) (outgoing, arg); else if (GET_CODE (outgoing) == PARALLEL) --- 6742,6751 ---- *************** void *** 6632,6637 **** --- 6774,6790 ---- clobber_return_register () { diddle_return_value (do_clobber_return_reg, NULL); + + /* In case we do use pseudo to return value, clobber it too. */ + if (DECL_RTL_SET_P (DECL_RESULT (current_function_decl))) + { + tree decl_result = DECL_RESULT (current_function_decl); + rtx decl_rtl = DECL_RTL (decl_result); + if (REG_P (decl_rtl) && REGNO (decl_rtl) >= FIRST_PSEUDO_REGISTER) + { + do_clobber_return_reg (decl_rtl, NULL); + } + } } static void *************** expand_function_end (filename, line, end *** 6661,6666 **** --- 6814,6820 ---- int end_bindings; { tree link; + rtx clobber_after; #ifdef TRAMPOLINE_TEMPLATE static rtx initial_trampoline; *************** expand_function_end (filename, line, end *** 6668,6673 **** --- 6822,6832 ---- finish_expr_for_function (); + /* If arg_pointer_save_area was referenced only from a nested + function, we will not have initialized it yet. Do that now. */ + if (arg_pointer_save_area && ! cfun->arg_pointer_save_area_init) + get_arg_pointer_save_area (cfun); + #ifdef NON_SAVING_SETJMP /* Don't put any variables in registers if we call setjmp on a machine that fails to restore the registers. */ *************** expand_function_end (filename, line, end *** 6680,6699 **** } #endif - /* Save the argument pointer if a save area was made for it. */ - if (arg_pointer_save_area) - { - /* arg_pointer_save_area may not be a valid memory address, so we - have to check it and fix it if necessary. */ - rtx seq; - start_sequence (); - emit_move_insn (validize_mem (arg_pointer_save_area), - virtual_incoming_args_rtx); - seq = gen_sequence (); - end_sequence (); - emit_insn_before (seq, tail_recursion_reentry); - } - /* Initialize any trampolines required by this function. */ for (link = trampoline_list; link; link = TREE_CHAIN (link)) { --- 6839,6844 ---- *************** expand_function_end (filename, line, end *** 6712,6717 **** --- 6857,6863 ---- { initial_trampoline = gen_rtx_MEM (BLKmode, assemble_trampoline_template ()); + set_mem_align (initial_trampoline, TRAMPOLINE_ALIGNMENT); ggc_add_rtx_root (&initial_trampoline, 1); } *************** expand_function_end (filename, line, end *** 6721,6730 **** start_sequence (); tramp = round_trampoline_addr (XEXP (tramp, 0)); #ifdef TRAMPOLINE_TEMPLATE ! blktramp = change_address (initial_trampoline, BLKmode, tramp); emit_block_move (blktramp, initial_trampoline, ! GEN_INT (TRAMPOLINE_SIZE), ! TRAMPOLINE_ALIGNMENT); #endif INITIALIZE_TRAMPOLINE (tramp, XEXP (DECL_RTL (function), 0), context); seq = get_insns (); --- 6867,6875 ---- start_sequence (); tramp = round_trampoline_addr (XEXP (tramp, 0)); #ifdef TRAMPOLINE_TEMPLATE ! blktramp = replace_equiv_address (initial_trampoline, tramp); emit_block_move (blktramp, initial_trampoline, ! GEN_INT (TRAMPOLINE_SIZE)); #endif INITIALIZE_TRAMPOLINE (tramp, XEXP (DECL_RTL (function), 0), context); seq = get_insns (); *************** expand_function_end (filename, line, end *** 6789,6795 **** /* Mark the end of the function body. If control reaches this insn, the function can drop through without returning a value. */ ! emit_note (NULL_PTR, NOTE_INSN_FUNCTION_END); /* Must mark the last line number note in the function, so that the test coverage code can avoid counting the last line twice. This just tells --- 6934,6940 ---- /* Mark the end of the function body. If control reaches this insn, the function can drop through without returning a value. */ ! emit_note (NULL, NOTE_INSN_FUNCTION_END); /* Must mark the last line number note in the function, so that the test coverage code can avoid counting the last line twice. This just tells *************** expand_function_end (filename, line, end *** 6797,6833 **** already exists a copy of this note somewhere above. This line number note is still needed for debugging though, so we can't delete it. */ if (flag_test_coverage) ! emit_note (NULL_PTR, NOTE_INSN_REPEATED_LINE_NUMBER); /* Output a linenumber for the end of the function. SDB depends on this. */ emit_line_note_force (filename, line); /* Output the label for the actual return from the function, if one is expected. This happens either because a function epilogue is used instead of a return instruction, or because a return was done with a goto in order to run local cleanups, or because of pcc-style structure returning. */ - if (return_label) ! { ! rtx before, after; ! ! /* Before the return label, clobber the return registers so that ! they are not propogated live to the rest of the function. This ! can only happen with functions that drop through; if there had ! been a return statement, there would have either been a return ! rtx, or a jump to the return label. */ ! ! before = get_last_insn (); ! clobber_return_register (); ! after = get_last_insn (); ! ! if (before != after) ! cfun->x_clobber_return_insn = after; ! ! emit_label (return_label); ! } /* C++ uses this. */ if (end_bindings) --- 6942,6970 ---- already exists a copy of this note somewhere above. This line number note is still needed for debugging though, so we can't delete it. */ if (flag_test_coverage) ! emit_note (NULL, NOTE_INSN_REPEATED_LINE_NUMBER); /* Output a linenumber for the end of the function. SDB depends on this. */ emit_line_note_force (filename, line); + /* Before the return label (if any), clobber the return + registers so that they are not propagated live to the rest of + the function. This can only happen with functions that drop + through; if there had been a return statement, there would + have either been a return rtx, or a jump to the return label. + + We delay actual code generation after the current_function_value_rtx + is computed. */ + clobber_after = get_last_insn (); + /* Output the label for the actual return from the function, if one is expected. This happens either because a function epilogue is used instead of a return instruction, or because a return was done with a goto in order to run local cleanups, or because of pcc-style structure returning. */ if (return_label) ! emit_label (return_label); /* C++ uses this. */ if (end_bindings) *************** expand_function_end (filename, line, end *** 6840,6847 **** fun = XEXP (fun, 0); else abort (); ! emit_library_call (profile_function_exit_libfunc, 0, VOIDmode, 2, ! fun, Pmode, expand_builtin_return_addr (BUILT_IN_RETURN_ADDRESS, 0, hard_frame_pointer_rtx), --- 6977,6984 ---- fun = XEXP (fun, 0); else abort (); ! emit_library_call (profile_function_exit_libfunc, LCT_NORMAL, VOIDmode, ! 2, fun, Pmode, expand_builtin_return_addr (BUILT_IN_RETURN_ADDRESS, 0, hard_frame_pointer_rtx), *************** expand_function_end (filename, line, end *** 6879,6901 **** ? REGNO (decl_rtl) >= FIRST_PSEUDO_REGISTER : DECL_REGISTER (decl_result)) { ! rtx real_decl_rtl; ! #ifdef FUNCTION_OUTGOING_VALUE ! real_decl_rtl = FUNCTION_OUTGOING_VALUE (TREE_TYPE (decl_result), ! current_function_decl); ! #else ! real_decl_rtl = FUNCTION_VALUE (TREE_TYPE (decl_result), ! current_function_decl); ! #endif ! REG_FUNCTION_VALUE_P (real_decl_rtl) = 1; /* If this is a BLKmode structure being returned in registers, then use the mode computed in expand_return. Note that if decl_rtl is memory, then its mode may have been changed, but that current_function_return_rtx has not. */ if (GET_MODE (real_decl_rtl) == BLKmode) ! PUT_MODE (real_decl_rtl, GET_MODE (current_function_return_rtx)); /* If a named return value dumped decl_return to memory, then we may need to re-do the PROMOTE_MODE signed/unsigned --- 7016,7033 ---- ? REGNO (decl_rtl) >= FIRST_PSEUDO_REGISTER : DECL_REGISTER (decl_result)) { ! rtx real_decl_rtl = current_function_return_rtx; ! /* This should be set in assign_parms. */ ! if (! REG_FUNCTION_VALUE_P (real_decl_rtl)) ! abort (); /* If this is a BLKmode structure being returned in registers, then use the mode computed in expand_return. Note that if decl_rtl is memory, then its mode may have been changed, but that current_function_return_rtx has not. */ if (GET_MODE (real_decl_rtl) == BLKmode) ! PUT_MODE (real_decl_rtl, GET_MODE (decl_rtl)); /* If a named return value dumped decl_return to memory, then we may need to re-do the PROMOTE_MODE signed/unsigned *************** expand_function_end (filename, line, end *** 6913,6927 **** } else if (GET_CODE (real_decl_rtl) == PARALLEL) emit_group_load (real_decl_rtl, decl_rtl, ! int_size_in_bytes (TREE_TYPE (decl_result)), ! TYPE_ALIGN (TREE_TYPE (decl_result))); else emit_move_insn (real_decl_rtl, decl_rtl); - - /* The delay slot scheduler assumes that current_function_return_rtx - holds the hard register containing the return value, not a - temporary pseudo. */ - current_function_return_rtx = real_decl_rtl; } } --- 7045,7053 ---- } else if (GET_CODE (real_decl_rtl) == PARALLEL) emit_group_load (real_decl_rtl, decl_rtl, ! int_size_in_bytes (TREE_TYPE (decl_result))); else emit_move_insn (real_decl_rtl, decl_rtl); } } *************** expand_function_end (filename, line, end *** 6968,6991 **** communicate between __builtin_eh_return and the epilogue. */ expand_eh_return (); /* ??? This should no longer be necessary since stupid is no longer with us, but there are some parts of the compiler (eg reload_combine, and sh mach_dep_reorg) that still try and compute their own lifetime info instead of using the general framework. */ use_return_register (); - /* Output a return insn if we are using one. - Otherwise, let the rtl chain end here, to drop through - into the epilogue. */ - - #ifdef HAVE_return - if (HAVE_return) - { - emit_jump_insn (gen_return ()); - emit_barrier (); - } - #endif - /* Fix up any gotos that jumped out to the outermost binding level of the function. Must follow emitting RETURN_LABEL. */ --- 7094,7120 ---- communicate between __builtin_eh_return and the epilogue. */ expand_eh_return (); + /* Emit the actual code to clobber return register. */ + { + rtx seq, after; + + start_sequence (); + clobber_return_register (); + seq = gen_sequence (); + end_sequence (); + + after = emit_insn_after (seq, clobber_after); + + if (clobber_after != after) + cfun->x_clobber_return_insn = after; + } + /* ??? This should no longer be necessary since stupid is no longer with us, but there are some parts of the compiler (eg reload_combine, and sh mach_dep_reorg) that still try and compute their own lifetime info instead of using the general framework. */ use_return_register (); /* Fix up any gotos that jumped out to the outermost binding level of the function. Must follow emitting RETURN_LABEL. */ *************** expand_function_end (filename, line, end *** 6995,7000 **** --- 7124,7161 ---- then you will lose. */ expand_fixups (get_insns ()); } + + rtx + get_arg_pointer_save_area (f) + struct function *f; + { + rtx ret = f->x_arg_pointer_save_area; + + if (! ret) + { + ret = assign_stack_local_1 (Pmode, GET_MODE_SIZE (Pmode), 0, f); + f->x_arg_pointer_save_area = ret; + } + + if (f == cfun && ! f->arg_pointer_save_area_init) + { + rtx seq; + + /* Save the arg pointer at the beginning of the function. The + generated stack slot may not be a valid memory address, so we + have to check it and fix it if necessary. */ + start_sequence (); + emit_move_insn (validize_mem (ret), virtual_incoming_args_rtx); + seq = gen_sequence (); + end_sequence (); + + push_topmost_sequence (); + emit_insn_after (seq, get_insns ()); + pop_topmost_sequence (); + } + + return ret; + } /* Extend a vector that records the INSN_UIDs of INSNS (either a sequence or a single insn). */ *************** contains (insn, vec) *** 7031,7037 **** rtx insn; varray_type vec; { ! register int i, j; if (GET_CODE (insn) == INSN && GET_CODE (PATTERN (insn)) == SEQUENCE) --- 7192,7198 ---- rtx insn; varray_type vec; { ! int i, j; if (GET_CODE (insn) == INSN && GET_CODE (PATTERN (insn)) == SEQUENCE) *************** emit_return_into_block (bb, line_note) *** 7087,7165 **** end = emit_jump_insn_after (gen_return (), bb->end); if (line_note) emit_line_note_after (NOTE_SOURCE_FILE (line_note), ! NOTE_LINE_NUMBER (line_note), bb->end); ! ! while (1) ! { ! set_block_for_insn (p, bb); ! if (p == bb->end) ! break; ! p = PREV_INSN (p); ! } ! bb->end = end; } #endif /* HAVE_return */ ! #ifdef HAVE_epilogue /* Modify SEQ, a SEQUENCE that is part of the epilogue, to no modifications ! to the stack pointer. */ ! static void keep_stack_depressed (seq) rtx seq; { ! int i; ! rtx sp_from_reg = 0; ! int sp_modified_unknown = 0; ! /* If the epilogue is just a single instruction, it's OK as is */ if (GET_CODE (seq) != SEQUENCE) ! return; ! /* Scan all insns in SEQ looking for ones that modified the stack ! pointer. Record if it modified the stack pointer by copying it ! from the frame pointer or if it modified it in some other way. ! Then modify any subsequent stack pointer references to take that ! into account. We start by only allowing SP to be copied from a ! register (presumably FP) and then be subsequently referenced. */ for (i = 0; i < XVECLEN (seq, 0); i++) { rtx insn = XVECEXP (seq, 0, i); ! if (GET_RTX_CLASS (GET_CODE (insn)) != 'i') ! continue; ! if (reg_set_p (stack_pointer_rtx, insn)) { ! rtx set = single_set (insn); ! /* If SP is set as a side-effect, we can't support this. */ ! if (set == 0) ! abort (); ! if (GET_CODE (SET_SRC (set)) == REG) ! sp_from_reg = SET_SRC (set); else ! sp_modified_unknown = 1; ! /* Don't allow the SP modification to happen. */ ! PUT_CODE (insn, NOTE); ! NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED; ! NOTE_SOURCE_FILE (insn) = 0; } ! else if (reg_referenced_p (stack_pointer_rtx, PATTERN (insn))) { ! if (sp_modified_unknown) abort (); ! else if (sp_from_reg != 0) ! PATTERN (insn) ! = replace_rtx (PATTERN (insn), stack_pointer_rtx, sp_from_reg); } } } #endif --- 7248,7555 ---- end = emit_jump_insn_after (gen_return (), bb->end); if (line_note) emit_line_note_after (NOTE_SOURCE_FILE (line_note), ! NOTE_LINE_NUMBER (line_note), PREV_INSN (bb->end)); } #endif /* HAVE_return */ ! #if defined(HAVE_epilogue) && defined(INCOMING_RETURN_ADDR_RTX) ! ! /* These functions convert the epilogue into a variant that does not modify the ! stack pointer. This is used in cases where a function returns an object ! whose size is not known until it is computed. The called function leaves the ! object on the stack, leaves the stack depressed, and returns a pointer to ! the object. ! ! What we need to do is track all modifications and references to the stack ! pointer, deleting the modifications and changing the references to point to ! the location the stack pointer would have pointed to had the modifications ! taken place. ! ! These functions need to be portable so we need to make as few assumptions ! about the epilogue as we can. However, the epilogue basically contains ! three things: instructions to reset the stack pointer, instructions to ! reload registers, possibly including the frame pointer, and an ! instruction to return to the caller. ! ! If we can't be sure of what a relevant epilogue insn is doing, we abort. ! We also make no attempt to validate the insns we make since if they are ! invalid, we probably can't do anything valid. The intent is that these ! routines get "smarter" as more and more machines start to use them and ! they try operating on different epilogues. ! ! We use the following structure to track what the part of the epilogue that ! we've already processed has done. We keep two copies of the SP equivalence, ! one for use during the insn we are processing and one for use in the next ! insn. The difference is because one part of a PARALLEL may adjust SP ! and the other may use it. */ ! ! struct epi_info ! { ! rtx sp_equiv_reg; /* REG that SP is set from, perhaps SP. */ ! HOST_WIDE_INT sp_offset; /* Offset from SP_EQUIV_REG of present SP. */ ! rtx new_sp_equiv_reg; /* REG to be used at end of insn. */ ! HOST_WIDE_INT new_sp_offset; /* Offset to be used at end of insn. */ ! rtx equiv_reg_src; /* If nonzero, the value that SP_EQUIV_REG ! should be set to once we no longer need ! its value. */ ! }; ! ! static void handle_epilogue_set PARAMS ((rtx, struct epi_info *)); ! static void emit_equiv_load PARAMS ((struct epi_info *)); /* Modify SEQ, a SEQUENCE that is part of the epilogue, to no modifications ! to the stack pointer. Return the new sequence. */ ! static rtx keep_stack_depressed (seq) rtx seq; { ! int i, j; ! struct epi_info info; ! /* If the epilogue is just a single instruction, it ust be OK as is. */ if (GET_CODE (seq) != SEQUENCE) ! return seq; ! /* Otherwise, start a sequence, initialize the information we have, and ! process all the insns we were given. */ ! start_sequence (); ! ! info.sp_equiv_reg = stack_pointer_rtx; ! info.sp_offset = 0; ! info.equiv_reg_src = 0; for (i = 0; i < XVECLEN (seq, 0); i++) { rtx insn = XVECEXP (seq, 0, i); ! if (!INSN_P (insn)) ! { ! add_insn (insn); ! continue; ! } ! /* If this insn references the register that SP is equivalent to and ! we have a pending load to that register, we must force out the load ! first and then indicate we no longer know what SP's equivalent is. */ ! if (info.equiv_reg_src != 0 ! && reg_referenced_p (info.sp_equiv_reg, PATTERN (insn))) { ! emit_equiv_load (&info); ! info.sp_equiv_reg = 0; ! } ! info.new_sp_equiv_reg = info.sp_equiv_reg; ! info.new_sp_offset = info.sp_offset; ! /* If this is a (RETURN) and the return address is on the stack, ! update the address and change to an indirect jump. */ ! if (GET_CODE (PATTERN (insn)) == RETURN ! || (GET_CODE (PATTERN (insn)) == PARALLEL ! && GET_CODE (XVECEXP (PATTERN (insn), 0, 0)) == RETURN)) ! { ! rtx retaddr = INCOMING_RETURN_ADDR_RTX; ! rtx base = 0; ! HOST_WIDE_INT offset = 0; ! rtx jump_insn, jump_set; ! ! /* If the return address is in a register, we can emit the insn ! unchanged. Otherwise, it must be a MEM and we see what the ! base register and offset are. In any case, we have to emit any ! pending load to the equivalent reg of SP, if any. */ ! if (GET_CODE (retaddr) == REG) ! { ! emit_equiv_load (&info); ! add_insn (insn); ! continue; ! } ! else if (GET_CODE (retaddr) == MEM ! && GET_CODE (XEXP (retaddr, 0)) == REG) ! base = gen_rtx_REG (Pmode, REGNO (XEXP (retaddr, 0))), offset = 0; ! else if (GET_CODE (retaddr) == MEM ! && GET_CODE (XEXP (retaddr, 0)) == PLUS ! && GET_CODE (XEXP (XEXP (retaddr, 0), 0)) == REG ! && GET_CODE (XEXP (XEXP (retaddr, 0), 1)) == CONST_INT) ! { ! base = gen_rtx_REG (Pmode, REGNO (XEXP (XEXP (retaddr, 0), 0))); ! offset = INTVAL (XEXP (XEXP (retaddr, 0), 1)); ! } else ! abort (); ! /* If the base of the location containing the return pointer ! is SP, we must update it with the replacement address. Otherwise, ! just build the necessary MEM. */ ! retaddr = plus_constant (base, offset); ! if (base == stack_pointer_rtx) ! retaddr = simplify_replace_rtx (retaddr, stack_pointer_rtx, ! plus_constant (info.sp_equiv_reg, ! info.sp_offset)); ! ! retaddr = gen_rtx_MEM (Pmode, retaddr); ! ! /* If there is a pending load to the equivalent register for SP ! and we reference that register, we must load our address into ! a scratch register and then do that load. */ ! if (info.equiv_reg_src ! && reg_overlap_mentioned_p (info.equiv_reg_src, retaddr)) ! { ! unsigned int regno; ! rtx reg; ! ! for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) ! if (HARD_REGNO_MODE_OK (regno, Pmode) ! && !fixed_regs[regno] ! && TEST_HARD_REG_BIT (regs_invalidated_by_call, regno) ! && !REGNO_REG_SET_P (EXIT_BLOCK_PTR->global_live_at_start, ! regno) ! && !refers_to_regno_p (regno, ! regno + HARD_REGNO_NREGS (regno, ! Pmode), ! info.equiv_reg_src, NULL)) ! break; ! ! if (regno == FIRST_PSEUDO_REGISTER) ! abort (); ! ! reg = gen_rtx_REG (Pmode, regno); ! emit_move_insn (reg, retaddr); ! retaddr = reg; ! } ! ! emit_equiv_load (&info); ! jump_insn = emit_jump_insn (gen_indirect_jump (retaddr)); ! ! /* Show the SET in the above insn is a RETURN. */ ! jump_set = single_set (jump_insn); ! if (jump_set == 0) ! abort (); ! else ! SET_IS_RETURN_P (jump_set) = 1; } ! ! /* If SP is not mentioned in the pattern and its equivalent register, if ! any, is not modified, just emit it. Otherwise, if neither is set, ! replace the reference to SP and emit the insn. If none of those are ! true, handle each SET individually. */ ! else if (!reg_mentioned_p (stack_pointer_rtx, PATTERN (insn)) ! && (info.sp_equiv_reg == stack_pointer_rtx ! || !reg_set_p (info.sp_equiv_reg, insn))) ! add_insn (insn); ! else if (! reg_set_p (stack_pointer_rtx, insn) ! && (info.sp_equiv_reg == stack_pointer_rtx ! || !reg_set_p (info.sp_equiv_reg, insn))) { ! if (! validate_replace_rtx (stack_pointer_rtx, ! plus_constant (info.sp_equiv_reg, ! info.sp_offset), ! insn)) abort (); ! add_insn (insn); } + else if (GET_CODE (PATTERN (insn)) == SET) + handle_epilogue_set (PATTERN (insn), &info); + else if (GET_CODE (PATTERN (insn)) == PARALLEL) + { + for (j = 0; j < XVECLEN (PATTERN (insn), 0); j++) + if (GET_CODE (XVECEXP (PATTERN (insn), 0, j)) == SET) + handle_epilogue_set (XVECEXP (PATTERN (insn), 0, j), &info); + } + else + add_insn (insn); + + info.sp_equiv_reg = info.new_sp_equiv_reg; + info.sp_offset = info.new_sp_offset; } + + seq = gen_sequence (); + end_sequence (); + return seq; + } + + /* SET is a SET from an insn in the epilogue. P is a pointer to the epi_info + structure that contains information about what we've seen so far. We + process this SET by either updating that data or by emitting one or + more insns. */ + + static void + handle_epilogue_set (set, p) + rtx set; + struct epi_info *p; + { + /* First handle the case where we are setting SP. Record what it is being + set from. If unknown, abort. */ + if (reg_set_p (stack_pointer_rtx, set)) + { + if (SET_DEST (set) != stack_pointer_rtx) + abort (); + + if (GET_CODE (SET_SRC (set)) == PLUS + && GET_CODE (XEXP (SET_SRC (set), 1)) == CONST_INT) + { + p->new_sp_equiv_reg = XEXP (SET_SRC (set), 0); + p->new_sp_offset = INTVAL (XEXP (SET_SRC (set), 1)); + } + else + p->new_sp_equiv_reg = SET_SRC (set), p->new_sp_offset = 0; + + /* If we are adjusting SP, we adjust from the old data. */ + if (p->new_sp_equiv_reg == stack_pointer_rtx) + { + p->new_sp_equiv_reg = p->sp_equiv_reg; + p->new_sp_offset += p->sp_offset; + } + + if (p->new_sp_equiv_reg == 0 || GET_CODE (p->new_sp_equiv_reg) != REG) + abort (); + + return; + } + + /* Next handle the case where we are setting SP's equivalent register. + If we already have a value to set it to, abort. We could update, but + there seems little point in handling that case. Note that we have + to allow for the case where we are setting the register set in + the previous part of a PARALLEL inside a single insn. But use the + old offset for any updates within this insn. */ + else if (p->new_sp_equiv_reg != 0 && reg_set_p (p->new_sp_equiv_reg, set)) + { + if (!rtx_equal_p (p->new_sp_equiv_reg, SET_DEST (set)) + || p->equiv_reg_src != 0) + abort (); + else + p->equiv_reg_src + = simplify_replace_rtx (SET_SRC (set), stack_pointer_rtx, + plus_constant (p->sp_equiv_reg, + p->sp_offset)); + } + + /* Otherwise, replace any references to SP in the insn to its new value + and emit the insn. */ + else + { + SET_SRC (set) = simplify_replace_rtx (SET_SRC (set), stack_pointer_rtx, + plus_constant (p->sp_equiv_reg, + p->sp_offset)); + SET_DEST (set) = simplify_replace_rtx (SET_DEST (set), stack_pointer_rtx, + plus_constant (p->sp_equiv_reg, + p->sp_offset)); + emit_insn (set); + } + } + + /* Emit an insn to do the load shown in p->equiv_reg_src, if needed. */ + + static void + emit_equiv_load (p) + struct epi_info *p; + { + if (p->equiv_reg_src != 0) + emit_move_insn (p->sp_equiv_reg, p->equiv_reg_src); + + p->equiv_reg_src = 0; } #endif *************** thread_prologue_and_epilogue_insns (f) *** 7173,7179 **** --- 7563,7571 ---- { int inserted = 0; edge e; + #if defined (HAVE_sibcall_epilogue) || defined (HAVE_epilogue) || defined (HAVE_return) || defined (HAVE_prologue) rtx seq; + #endif #ifdef HAVE_prologue rtx prologue_end = NULL_RTX; #endif *************** thread_prologue_and_epilogue_insns (f) *** 7197,7215 **** seq = gen_sequence (); end_sequence (); ! /* If optimization is off, and perhaps in an empty function, ! the entry block will have no successors. */ ! if (ENTRY_BLOCK_PTR->succ) ! { ! /* Can't deal with multiple successsors of the entry block. */ ! if (ENTRY_BLOCK_PTR->succ->succ_next) ! abort (); ! insert_insn_on_edge (seq, ENTRY_BLOCK_PTR->succ); ! inserted = 1; ! } ! else ! emit_insn_after (seq, f); } #endif --- 7589,7602 ---- seq = gen_sequence (); end_sequence (); ! /* Can't deal with multiple successors of the entry block ! at the moment. Function should always have at least one ! entry point. */ ! if (!ENTRY_BLOCK_PTR->succ || ENTRY_BLOCK_PTR->succ->succ_next) ! abort (); ! insert_insn_on_edge (seq, ENTRY_BLOCK_PTR->succ); ! inserted = 1; } #endif *************** thread_prologue_and_epilogue_insns (f) *** 7283,7289 **** if (simplejump_p (jump)) { emit_return_into_block (bb, epilogue_line_note); ! flow_delete_insn (jump); } /* If we have a conditional jump, we can try to replace --- 7670,7676 ---- if (simplejump_p (jump)) { emit_return_into_block (bb, epilogue_line_note); ! delete_insn (jump); } /* If we have a conditional jump, we can try to replace *************** thread_prologue_and_epilogue_insns (f) *** 7323,7328 **** --- 7710,7716 ---- emit_barrier_after (last->end); emit_return_into_block (last, epilogue_line_note); epilogue_end = last->end; + last->succ->flags &= ~EDGE_FALLTHRU; goto epilogue_done; } } *************** thread_prologue_and_epilogue_insns (f) *** 7346,7356 **** seq = gen_epilogue (); ! /* If this function returns with the stack depressed, massage ! the epilogue to actually do that. */ if (TREE_CODE (TREE_TYPE (current_function_decl)) == FUNCTION_TYPE && TYPE_RETURNS_STACK_DEPRESSED (TREE_TYPE (current_function_decl))) ! keep_stack_depressed (seq); emit_jump_insn (seq); --- 7734,7746 ---- seq = gen_epilogue (); ! #ifdef INCOMING_RETURN_ADDR_RTX ! /* If this function returns with the stack depressed and we can support ! it, massage the epilogue to actually do that. */ if (TREE_CODE (TREE_TYPE (current_function_decl)) == FUNCTION_TYPE && TYPE_RETURNS_STACK_DEPRESSED (TREE_TYPE (current_function_decl))) ! seq = keep_stack_depressed (seq); ! #endif emit_jump_insn (seq); *************** epilogue_done: *** 7391,7400 **** i = PREV_INSN (insn); newinsn = emit_insn_before (seq, insn); - /* Update the UID to basic block map. */ - for (i = NEXT_INSN (i); i != insn; i = NEXT_INSN (i)) - set_block_for_insn (i, bb); - /* Retain a map of the epilogue insns. Used in life analysis to avoid getting rid of sibcall epilogue insns. */ record_insns (GET_CODE (seq) == SEQUENCE --- 7781,7786 ---- *************** epilogue_done: *** 7412,7418 **** there are line number notes before where we inserted the prologue we should move them, and (2) we should generate a note before the end of the first basic block, if there isn't ! one already there. */ for (insn = prologue_end; insn; insn = prev) { --- 7798,7810 ---- there are line number notes before where we inserted the prologue we should move them, and (2) we should generate a note before the end of the first basic block, if there isn't ! one already there. ! ! ??? This behaviour is completely broken when dealing with ! multiple entry functions. We simply place the note always ! into first basic block and let alternate entry points ! to be missed. ! */ for (insn = prologue_end; insn; insn = prev) { *************** epilogue_done: *** 7430,7436 **** /* Find the last line number note in the first block. */ for (insn = BASIC_BLOCK (0)->end; ! insn != prologue_end; insn = PREV_INSN (insn)) if (GET_CODE (insn) == NOTE && NOTE_LINE_NUMBER (insn) > 0) break; --- 7822,7828 ---- /* Find the last line number note in the first block. */ for (insn = BASIC_BLOCK (0)->end; ! insn != prologue_end && insn; insn = PREV_INSN (insn)) if (GET_CODE (insn) == NOTE && NOTE_LINE_NUMBER (insn) > 0) break; *************** epilogue_done: *** 7458,7464 **** rtx insn, next; /* Similarly, move any line notes that appear after the epilogue. ! There is no need, however, to be quite so anal about the existance of such a note. */ for (insn = epilogue_end; insn; insn = next) { --- 7850,7856 ---- rtx insn, next; /* Similarly, move any line notes that appear after the epilogue. ! There is no need, however, to be quite so anal about the existence of such a note. */ for (insn = epilogue_end; insn; insn = next) { *************** reposition_prologue_and_epilogue_notes ( *** 7478,7580 **** rtx f ATTRIBUTE_UNUSED; { #if defined (HAVE_prologue) || defined (HAVE_epilogue) int len; if ((len = VARRAY_SIZE (prologue)) > 0) { ! register rtx insn, note = 0; /* Scan from the beginning until we reach the last prologue insn. We apparently can't depend on basic_block_{head,end} after reorg has run. */ ! for (insn = f; len && insn; insn = NEXT_INSN (insn)) { if (GET_CODE (insn) == NOTE) { if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_PROLOGUE_END) note = insn; } ! else if ((len -= contains (insn, prologue)) == 0) { ! rtx next; ! /* Find the prologue-end note if we haven't already, and ! move it to just after the last prologue insn. */ ! if (note == 0) ! { ! for (note = insn; (note = NEXT_INSN (note));) ! if (GET_CODE (note) == NOTE ! && NOTE_LINE_NUMBER (note) == NOTE_INSN_PROLOGUE_END) ! break; ! } ! next = NEXT_INSN (note); ! /* Whether or not we can depend on BLOCK_HEAD, ! attempt to keep it up-to-date. */ ! if (BLOCK_HEAD (0) == note) ! BLOCK_HEAD (0) = next; ! remove_insn (note); ! add_insn_after (note, insn); ! } } } if ((len = VARRAY_SIZE (epilogue)) > 0) { ! register rtx insn, note = 0; /* Scan from the end until we reach the first epilogue insn. We apparently can't depend on basic_block_{head,end} after reorg has run. */ ! for (insn = get_last_insn (); len && insn; insn = PREV_INSN (insn)) { if (GET_CODE (insn) == NOTE) { if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_EPILOGUE_BEG) note = insn; } ! else if ((len -= contains (insn, epilogue)) == 0) { ! /* Find the epilogue-begin note if we haven't already, and ! move it to just before the first epilogue insn. */ ! if (note == 0) ! { ! for (note = insn; (note = PREV_INSN (note));) ! if (GET_CODE (note) == NOTE ! && NOTE_LINE_NUMBER (note) == NOTE_INSN_EPILOGUE_BEG) ! break; ! } ! ! /* Whether or not we can depend on BLOCK_HEAD, ! attempt to keep it up-to-date. */ ! if (n_basic_blocks ! && BLOCK_HEAD (n_basic_blocks-1) == insn) ! BLOCK_HEAD (n_basic_blocks-1) = note; ! ! remove_insn (note); ! add_insn_before (note, insn); } } - } - #endif /* HAVE_prologue or HAVE_epilogue */ - } ! /* Mark T for GC. */ ! ! static void ! mark_temp_slot (t) ! struct temp_slot *t; ! { ! while (t) ! { ! ggc_mark_rtx (t->slot); ! ggc_mark_rtx (t->address); ! ggc_mark_tree (t->rtl_expr); ! ggc_mark_tree (t->type); ! t = t->next; } } /* Mark P for GC. */ --- 7870,7962 ---- rtx f ATTRIBUTE_UNUSED; { #if defined (HAVE_prologue) || defined (HAVE_epilogue) + rtx insn, last, note; int len; if ((len = VARRAY_SIZE (prologue)) > 0) { ! last = 0, note = 0; /* Scan from the beginning until we reach the last prologue insn. We apparently can't depend on basic_block_{head,end} after reorg has run. */ ! for (insn = f; insn; insn = NEXT_INSN (insn)) { if (GET_CODE (insn) == NOTE) { if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_PROLOGUE_END) note = insn; } ! else if (contains (insn, prologue)) { ! last = insn; ! if (--len == 0) ! break; ! } ! } ! ! if (last) ! { ! rtx next; ! /* Find the prologue-end note if we haven't already, and ! move it to just after the last prologue insn. */ ! if (note == 0) ! { ! for (note = last; (note = NEXT_INSN (note));) ! if (GET_CODE (note) == NOTE ! && NOTE_LINE_NUMBER (note) == NOTE_INSN_PROLOGUE_END) ! break; ! } ! next = NEXT_INSN (note); ! /* Avoid placing note between CODE_LABEL and BASIC_BLOCK note. */ ! if (GET_CODE (last) == CODE_LABEL) ! last = NEXT_INSN (last); ! reorder_insns (note, note, last); } } if ((len = VARRAY_SIZE (epilogue)) > 0) { ! last = 0, note = 0; /* Scan from the end until we reach the first epilogue insn. We apparently can't depend on basic_block_{head,end} after reorg has run. */ ! for (insn = get_last_insn (); insn; insn = PREV_INSN (insn)) { if (GET_CODE (insn) == NOTE) { if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_EPILOGUE_BEG) note = insn; } ! else if (contains (insn, epilogue)) { ! last = insn; ! if (--len == 0) ! break; } } ! if (last) ! { ! /* Find the epilogue-begin note if we haven't already, and ! move it to just before the first epilogue insn. */ ! if (note == 0) ! { ! for (note = insn; (note = PREV_INSN (note));) ! if (GET_CODE (note) == NOTE ! && NOTE_LINE_NUMBER (note) == NOTE_INSN_EPILOGUE_BEG) ! break; ! } ! if (PREV_INSN (last) != note) ! reorder_insns (note, note, PREV_INSN (last)); ! } } + #endif /* HAVE_prologue or HAVE_epilogue */ } /* Mark P for GC. */ *************** static void *** 7583,7588 **** --- 7965,7972 ---- mark_function_status (p) struct function *p; { + struct var_refs_queue *q; + struct temp_slot *t; int i; rtx *r; *************** mark_function_status (p) *** 7613,7665 **** ggc_mark_rtx (p->epilogue_delay_list); ggc_mark_rtx (p->x_clobber_return_insn); ! mark_temp_slot (p->x_temp_slots); ! { ! struct var_refs_queue *q = p->fixup_var_refs_queue; ! while (q) ! { ! ggc_mark_rtx (q->modified); ! q = q->next; } - } ggc_mark_rtx (p->x_nonlocal_goto_handler_slots); ggc_mark_rtx (p->x_nonlocal_goto_handler_labels); ggc_mark_rtx (p->x_nonlocal_goto_stack_level); ggc_mark_tree (p->x_nonlocal_labels); } ! /* Mark the function chain ARG (which is really a struct function **) ! for GC. */ static void ! mark_function_chain (arg) void *arg; { struct function *f = *(struct function **) arg; ! for (; f; f = f->next_global) ! { ! ggc_mark_tree (f->decl); ! mark_function_status (f); ! mark_eh_status (f->eh); ! mark_stmt_status (f->stmt); ! mark_expr_status (f->expr); ! mark_emit_status (f->emit); ! mark_varasm_status (f->varasm); ! if (mark_machine_status) ! (*mark_machine_status) (f); ! if (mark_lang_status) ! (*mark_lang_status) (f); ! if (f->original_arg_vector) ! ggc_mark_rtvec ((rtvec) f->original_arg_vector); ! if (f->original_decl_initial) ! ggc_mark_tree (f->original_decl_initial); ! } } /* Called once, at initialization, to initialize function.c. */ --- 7997,8068 ---- ggc_mark_rtx (p->epilogue_delay_list); ggc_mark_rtx (p->x_clobber_return_insn); ! for (t = p->x_temp_slots; t != 0; t = t->next) ! { ! ggc_mark (t); ! ggc_mark_rtx (t->slot); ! ggc_mark_rtx (t->address); ! ggc_mark_tree (t->rtl_expr); ! ggc_mark_tree (t->type); ! } ! for (q = p->fixup_var_refs_queue; q != 0; q = q->next) ! { ! ggc_mark (q); ! ggc_mark_rtx (q->modified); } ggc_mark_rtx (p->x_nonlocal_goto_handler_slots); ggc_mark_rtx (p->x_nonlocal_goto_handler_labels); ggc_mark_rtx (p->x_nonlocal_goto_stack_level); ggc_mark_tree (p->x_nonlocal_labels); + + mark_hard_reg_initial_vals (p); } ! /* Mark the struct function pointed to by *ARG for GC, if it is not ! NULL. This is used to mark the current function and the outer ! function chain. */ static void ! maybe_mark_struct_function (arg) void *arg; { struct function *f = *(struct function **) arg; ! if (f == 0) ! return; ! ggc_mark_struct_function (f); ! } ! /* Mark a struct function * for GC. This is called from ggc-common.c. */ ! void ! ggc_mark_struct_function (f) ! struct function *f; ! { ! ggc_mark (f); ! ggc_mark_tree (f->decl); ! ! mark_function_status (f); ! mark_eh_status (f->eh); ! mark_stmt_status (f->stmt); ! mark_expr_status (f->expr); ! mark_emit_status (f->emit); ! mark_varasm_status (f->varasm); ! ! if (mark_machine_status) ! (*mark_machine_status) (f); ! if (mark_lang_status) ! (*mark_lang_status) (f); ! ! if (f->original_arg_vector) ! ggc_mark_rtvec ((rtvec) f->original_arg_vector); ! if (f->original_decl_initial) ! ggc_mark_tree (f->original_decl_initial); ! if (f->outer) ! ggc_mark_struct_function (f->outer); } /* Called once, at initialization, to initialize function.c. */ *************** mark_function_chain (arg) *** 7667,7674 **** void init_function_once () { ! ggc_add_root (&all_functions, 1, sizeof all_functions, ! mark_function_chain); VARRAY_INT_INIT (prologue, 0, "prologue"); VARRAY_INT_INIT (epilogue, 0, "epilogue"); --- 8070,8078 ---- void init_function_once () { ! ggc_add_root (&cfun, 1, sizeof cfun, maybe_mark_struct_function); ! ggc_add_root (&outer_function_chain, 1, sizeof outer_function_chain, ! maybe_mark_struct_function); VARRAY_INT_INIT (prologue, 0, "prologue"); VARRAY_INT_INIT (epilogue, 0, "epilogue"); diff -Nrc3pad gcc-3.0.4/gcc/function.h gcc-3.1/gcc/function.h *** gcc-3.0.4/gcc/function.h Sun May 13 07:09:54 2001 --- gcc-3.1/gcc/function.h Tue Apr 23 08:11:21 2002 *************** *** 2,33 **** Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ ! ! ! #if !defined(NULL_TREE) && !defined(tree) ! typedef union union_node *_function_tree; ! #define tree _function_tree ! #endif ! #if !defined(NULL_RTX) && !defined(rtx) ! typedef struct rtx_def *_function_rtx; ! #define rtx _function_rtx ! #endif struct var_refs_queue { --- 2,23 ---- Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ struct var_refs_queue { *************** struct emit_status *** 97,106 **** int x_last_linenum; const char *x_last_filename; ! /* The length of the regno_pointer_align and x_regno_reg_rtx vectors. ! Since these vectors are needed during the expansion phase when ! the total number of registers in the function is not yet known, ! the vectors are copied and made bigger when necessary. */ int regno_pointer_align_length; /* Indexed by pseudo register number, if nonzero gives the known alignment --- 87,96 ---- int x_last_linenum; const char *x_last_filename; ! /* The length of the regno_pointer_align, regno_decl, and x_regno_reg_rtx ! vectors. Since these vectors are needed during the expansion phase when ! the total number of registers in the function is not yet known, the ! vectors are copied and made bigger when necessary. */ int regno_pointer_align_length; /* Indexed by pseudo register number, if nonzero gives the known alignment *************** struct emit_status *** 108,113 **** --- 98,107 ---- Allocated in parallel with x_regno_reg_rtx. */ unsigned char *regno_pointer_align; + /* Indexed by pseudo register number, if nonzero gives the decl + corresponding to that register. */ + tree *regno_decl; + /* Indexed by pseudo register number, gives the rtx for that pseudo. Allocated in parallel with regno_pointer_align. */ rtx *x_regno_reg_rtx; *************** struct emit_status *** 120,125 **** --- 114,120 ---- #define seq_stack (cfun->emit->sequence_stack) #define REGNO_POINTER_ALIGN(REGNO) (cfun->emit->regno_pointer_align[REGNO]) + #define REGNO_DECL(REGNO) (cfun->emit->regno_decl[REGNO]) struct expr_status { *************** struct expr_status *** 178,186 **** struct function { - struct function *next_global; - struct function *next; - struct eh_status *eh; struct stmt_status *stmt; struct expr_status *expr; --- 173,178 ---- *************** struct function *** 192,200 **** /* Name of this function. */ const char *name; ! /* Points to the FUNCTION_DECL of this function. */ tree decl; /* Number of bytes of args popped by function being compiled on its return. Zero if no bytes are to be popped. May affect compilation of return insn or of function epilogue. */ --- 184,195 ---- /* Name of this function. */ const char *name; ! /* Points to the FUNCTION_DECL of this function. */ tree decl; + /* Function containing this function, if any. */ + struct function *outer; + /* Number of bytes of args popped by function being compiled on its return. Zero if no bytes are to be popped. May affect compilation of return insn or of function epilogue. */ *************** struct function *** 235,240 **** --- 230,239 ---- inline. */ const char *cannot_inline; + /* Opaque pointer used by get_hard_reg_initial_val and + has_hard_reg_initial_val (see integrate.[hc]). */ + struct initial_value_struct *hard_reg_initial_vals; + /* Number of function calls seen so far in current function. */ int x_function_call_count; *************** struct function *** 325,331 **** rtx x_last_parm_insn; /* 1 + last pseudo register number possibly used for loading a copy ! of a parameter of this function. */ unsigned int x_max_parm_reg; /* Vector indexed by REGNO, containing location on stack in which --- 324,330 ---- rtx x_last_parm_insn; /* 1 + last pseudo register number possibly used for loading a copy ! of a parameter of this function. */ unsigned int x_max_parm_reg; /* Vector indexed by REGNO, containing location on stack in which *************** struct function *** 365,370 **** --- 364,372 ---- /* Highest label number in current function. */ int inl_max_label_num; + /* Profile label number. */ + int profile_label_no; + /* For md files. */ /* tm.h can use this to store whatever it likes. */ *************** struct function *** 435,442 **** generated. */ unsigned int instrument_entry_exit : 1; ! /* Nonzero if memory access checking be enabled in the current function. */ ! unsigned int check_memory_usage : 1; /* Nonzero if stack limit checking should be enabled in the current function. */ --- 437,444 ---- generated. */ unsigned int instrument_entry_exit : 1; ! /* Nonzero if profiling code should be generated. */ ! unsigned int profile : 1; /* Nonzero if stack limit checking should be enabled in the current function. */ *************** struct function *** 473,485 **** /* Nonzero if the current function needs an lsda for exception handling. */ unsigned int uses_eh_lsda : 1; }; /* The function currently being compiled. */ extern struct function *cfun; ! /* A list of all functions we have compiled so far. */ ! extern struct function *all_functions; /* For backward compatibility... eventually these should all go away. */ #define current_function_name (cfun->name) --- 475,490 ---- /* Nonzero if the current function needs an lsda for exception handling. */ unsigned int uses_eh_lsda : 1; + + /* Nonzero if code to initialize arg_pointer_save_area has been emited. */ + unsigned int arg_pointer_save_area_init : 1; }; /* The function currently being compiled. */ extern struct function *cfun; ! /* Nonzero if we've already converted virtual regs to hard regs. */ ! extern int virtuals_instantiated; /* For backward compatibility... eventually these should all go away. */ #define current_function_name (cfun->name) *************** extern struct function *all_functions; *** 505,511 **** #define current_function_internal_arg_pointer (cfun->internal_arg_pointer) #define current_function_return_rtx (cfun->return_rtx) #define current_function_instrument_entry_exit (cfun->instrument_entry_exit) ! #define current_function_check_memory_usage (cfun->check_memory_usage) #define current_function_limit_stack (cfun->limit_stack) #define current_function_uses_pic_offset_table (cfun->uses_pic_offset_table) #define current_function_uses_const_pool (cfun->uses_const_pool) --- 510,517 ---- #define current_function_internal_arg_pointer (cfun->internal_arg_pointer) #define current_function_return_rtx (cfun->return_rtx) #define current_function_instrument_entry_exit (cfun->instrument_entry_exit) ! #define current_function_profile (cfun->profile) ! #define current_function_profile_label_no (cfun->profile_label_no) #define current_function_limit_stack (cfun->limit_stack) #define current_function_uses_pic_offset_table (cfun->uses_pic_offset_table) #define current_function_uses_const_pool (cfun->uses_const_pool) *************** extern tree inline_function_decl; *** 546,554 **** return the `struct function' for it. */ struct function *find_function_data PARAMS ((tree)); - /* Pointer to chain of `struct function' for containing functions. */ - extern struct function *outer_function_chain; - /* Set NOTE_BLOCK for each block note in the current function. */ extern void identify_blocks PARAMS ((void)); --- 552,557 ---- *************** extern void clobber_return_register PARA *** 602,616 **** extern void use_return_register PARAMS ((void)); #endif extern void init_virtual_regs PARAMS ((struct emit_status *)); /* Called once, at initialization, to initialize function.c. */ extern void init_function_once PARAMS ((void)); - - #ifdef rtx - #undef rtx - #endif - - #ifdef tree - #undef tree - #endif --- 605,613 ---- extern void use_return_register PARAMS ((void)); #endif + extern rtx get_arg_pointer_save_area PARAMS ((struct function *)); + extern void init_virtual_regs PARAMS ((struct emit_status *)); /* Called once, at initialization, to initialize function.c. */ extern void init_function_once PARAMS ((void)); diff -Nrc3pad gcc-3.0.4/gcc/future.options gcc-3.1/gcc/future.options *** gcc-3.0.4/gcc/future.options Wed Dec 16 20:55:53 1998 --- gcc-3.1/gcc/future.options Sun Jan 6 21:15:14 2002 *************** Reply-To: friedman@gnu.ai.mit.edu *** 27,29 **** --- 27,40 ---- -mno-dialogue -pedophile -vomit-frame-pointer + + From: Alexandre Oliva + Date: 06 Jan 2002 17:37:07 -0200 + + On Jan 2, 2002, in a long, heated thread concerning the interpretation + of certain passages of the C standard, jtv wrote: + + > (Yes, I'm a pedant. I'm pining for the day when gcc will support the + > options "-ffascist -Wanal") + + How about introducing the options `-flame -War' :-) diff -Nrc3pad gcc-3.0.4/gcc/gansidecl.h gcc-3.1/gcc/gansidecl.h *** gcc-3.0.4/gcc/gansidecl.h Mon Nov 20 21:09:25 2000 --- gcc-3.1/gcc/gansidecl.h Thu Jan 1 00:00:00 1970 *************** *** 1,57 **** - /* ANSI and traditional C compatibility macros. - Copyright (C) 1996, 1997, 1998, 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 mimics some of the support provided by include/ansidecl.h - in binutils and gdb releases. - ??? Over time the two should be merged into one. */ - - #ifndef __GANSIDECL_H__ - #define __GANSIDECL_H__ - - #include "ansidecl.h" - - /* Autoconf will possibly define the `inline' or `const' keywords as - macros, however this is only valid for the stage1 compiler. If we - detect a modern version of gcc, unconditionally reset the values. - This makes sure the right thing happens in stage2 and later. We - need to do this very early; i.e. before any systems header files or - gcc header files in case they use these keywords. Otherwise - conflicts might occur. */ - #if (GCC_VERSION >= 2007) - # ifdef __STDC__ - # undef const - # endif - # undef inline - # define inline __inline__ /* Modern gcc can use `__inline__' freely. */ - # ifndef HAVE_LONG_DOUBLE - # define HAVE_LONG_DOUBLE 1 - # endif - /* Assume that (non-traditional) gcc used in stage2 or later has the - stringize feature. */ - # if !defined (HAVE_STRINGIZE) && __STDC__ - # define HAVE_STRINGIZE 1 - # endif /* ! HAVE_STRINGIZE && __STDC__ */ - #endif /* GCC >= 2.7 */ - - #ifndef NULL_PTR - #define NULL_PTR ((PTR) 0) - #endif - - #endif /* __GANSIDECL_H__ */ --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/gbl-ctors.h gcc-3.1/gcc/gbl-ctors.h *** gcc-3.0.4/gcc/gbl-ctors.h Fri Jul 28 16:08:54 2000 --- gcc-3.1/gcc/gbl-ctors.h Wed Aug 22 14:35:12 2001 *************** *** 6,27 **** Free Software Foundation, Inc. Contributed by Ron Guilmette (rfg@segfault.us.com) ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* This file contains definitions and declarations of things relating to the normal start-up-time invocation of C++ --- 6,27 ---- Free Software Foundation, Inc. Contributed by Ron Guilmette (rfg@segfault.us.com) ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* This file contains definitions and declarations of things relating to the normal start-up-time invocation of C++ diff -Nrc3pad gcc-3.0.4/gcc/gcc.c gcc-3.1/gcc/gcc.c *** gcc-3.0.4/gcc/gcc.c Wed Jan 2 21:03:39 2002 --- gcc-3.1/gcc/gcc.c Tue Apr 23 22:53:29 2002 *************** *** 1,23 **** /* Compiler driver program that can handle many languages. Copyright (C) 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. This paragraph is here to try to keep Sun CC from dying. The number of chars here seems crucial!!!! */ --- 1,23 ---- /* Compiler driver program that can handle many languages. Copyright (C) 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. This paragraph is here to try to keep Sun CC from dying. The number of chars here seems crucial!!!! */ *************** CC recognizes how to compile each input *** 32,37 **** --- 32,75 ---- Once it knows which kind of compilation to perform, the procedure for compilation is specified by a string called a "spec". */ + /* A Short Introduction to Adding a Command-Line Option. + + Before adding a command-line option, consider if it is really + necessary. Each additional command-line option adds complexity and + is difficult to remove in subsequent versions. + + In the following, consider adding the command-line argument + `--bar'. + + 1. Each command-line option is specified in the specs file. The + notation is described below in the comment entitled "The Specs + Language". Read it. + + 2. In this file, add an entry to "option_map" equating the long + `--' argument version and any shorter, single letter version. Read + the comments in the declaration of "struct option_map" for an + explanation. Do not omit the first `-'. + + 3. Look in the "specs" file to determine which program or option + list should be given the argument, e.g., "cc1_options". Add the + appropriate syntax for the shorter option version to the + corresponding "const char *" entry in this file. Omit the first + `-' from the option. For example, use `-bar', rather than `--bar'. + + 4. If the argument takes an argument, e.g., `--baz argument1', + modify either DEFAULT_SWITCH_TAKES_ARG or + DEFAULT_WORD_SWITCH_TAKES_ARG in this file. Omit the first `-' + from `--baz'. + + 5. Document the option in this file's display_help(). If the + option is passed to a subprogram, modify its corresponding + function, e.g., cppinit.c:print_help() or toplev.c:display_help(), + instead. + + 6. Compile and test. Make sure that your new specs file is being + read. For example, use a debugger to investigate the value of + "specs_file" in main(). */ + #include "config.h" #include "system.h" #include *************** compilation is specified by a string cal *** 42,51 **** #include "intl.h" #include "prefix.h" #include "gcc.h" ! ! #ifdef VMS ! #define exit __posix_exit ! #endif #ifdef HAVE_SYS_RESOURCE_H #include --- 80,86 ---- #include "intl.h" #include "prefix.h" #include "gcc.h" ! #include "flags.h" #ifdef HAVE_SYS_RESOURCE_H #include *************** compilation is specified by a string cal *** 54,71 **** extern int getrusage PARAMS ((int, struct rusage *)); #endif ! /* By default there is no special suffix for executables. */ ! #ifdef EXECUTABLE_SUFFIX ! #define HAVE_EXECUTABLE_SUFFIX #else ! #define EXECUTABLE_SUFFIX "" #endif ! /* By default, the suffix for object files is ".o". */ ! #ifdef OBJECT_SUFFIX ! #define HAVE_OBJECT_SUFFIX #else ! #define OBJECT_SUFFIX ".o" #endif #ifndef VMS --- 89,115 ---- extern int getrusage PARAMS ((int, struct rusage *)); #endif ! /* By default there is no special suffix for target executables. */ ! /* FIXME: when autoconf is fixed, remove the host check - dj */ ! #if defined(TARGET_EXECUTABLE_SUFFIX) && defined(HOST_EXECUTABLE_SUFFIX) ! #define HAVE_TARGET_EXECUTABLE_SUFFIX #else ! #undef TARGET_EXECUTABLE_SUFFIX ! #define TARGET_EXECUTABLE_SUFFIX "" #endif ! /* By default there is no special suffix for host executables. */ ! #ifdef HOST_EXECUTABLE_SUFFIX ! #define HAVE_HOST_EXECUTABLE_SUFFIX #else ! #define HOST_EXECUTABLE_SUFFIX "" ! #endif ! ! /* By default, the suffix for target object files is ".o". */ ! #ifdef TARGET_OBJECT_SUFFIX ! #define HAVE_TARGET_OBJECT_SUFFIX ! #else ! #define TARGET_OBJECT_SUFFIX ".o" #endif #ifndef VMS *************** extern int getrusage PARAMS ((int, struc *** 76,82 **** #endif /* DIR_UP */ #endif /* VMS */ ! static char dir_separator_str[] = { DIR_SEPARATOR, 0 }; #define obstack_chunk_alloc xmalloc #define obstack_chunk_free free --- 120,126 ---- #endif /* DIR_UP */ #endif /* VMS */ ! static const char dir_separator_str[] = { DIR_SEPARATOR, 0 }; #define obstack_chunk_alloc xmalloc #define obstack_chunk_free free *************** static int print_help_list; *** 142,148 **** static int verbose_flag; ! /* Flag indicating to print target specific command line options. */ static int target_help_flag; --- 186,199 ---- static int verbose_flag; ! /* Flag indicating whether we should ONLY print the command and ! arguments (like verbose_flag) without executing the command. ! Displayed arguments are quoted so that the generated command ! line is suitable for execution. This is intended for use in ! shell scripts to capture the driver-generated command line. */ ! static int verbose_only_flag; ! ! /* Flag indicating to print target specific command line options. */ static int target_help_flag; *************** static const char *cross_compile = "0"; *** 183,193 **** switch. The only case we support now is simply appending or deleting a string to or from the end of the first part of the configuration name. */ ! struct modify_target { ! const char *sw; ! enum add_del {ADD, DELETE} add_del; ! const char *str; } modify_target[] = MODIFY_TARGET_NAME; #endif --- 234,244 ---- switch. The only case we support now is simply appending or deleting a string to or from the end of the first part of the configuration name. */ ! static const struct modify_target { ! const char *const sw; ! const enum add_del {ADD, DELETE} add_del; ! const char *const str; } modify_target[] = MODIFY_TARGET_NAME; #endif *************** static void process_command PARAMS ((in *** 270,280 **** static int execute PARAMS ((void)); static void clear_args PARAMS ((void)); static void fatal_error PARAMS ((int)); static void init_gcc_specs PARAMS ((struct obstack *, ! const char *, const char *)); ! /* Specs are strings containing lines, each of which (if not blank) is made up of a program name, and arguments separated by spaces. The program name must be exact and start from root, since no path is searched and it is unreliable to depend on the current working directory. --- 321,338 ---- static int execute PARAMS ((void)); static void clear_args PARAMS ((void)); static void fatal_error PARAMS ((int)); + #ifdef ENABLE_SHARED_LIBGCC static void init_gcc_specs PARAMS ((struct obstack *, ! const char *, const char *, const char *)); + #endif + #if defined(HAVE_TARGET_OBJECT_SUFFIX) || defined(HAVE_TARGET_EXECUTABLE_SUFFIX) + static const char *convert_filename PARAMS ((const char *, int, int)); + #endif ! /* The Specs Language ! ! Specs are strings containing lines, each of which (if not blank) is made up of a program name, and arguments separated by spaces. The program name must be exact and start from root, since no path is searched and it is unreliable to depend on the current working directory. *************** or with constant text in a single argume *** 387,393 **** if multilib_dir is not set or is ".", output "". %S process STARTFILE_SPEC as a spec. A capital S is actually used here. %E process ENDFILE_SPEC as a spec. A capital E is actually used here. - %c process SIGNED_CHAR_SPEC as a spec. %C process CPP_SPEC as a spec. %1 process CC1_SPEC as a spec. %2 process CC1PLUS_SPEC as a spec. --- 445,450 ---- *************** or with constant text in a single argume *** 412,418 **** specified to CC. Note that the tail part of the -S option (i.e. the part matched by the `*') will be substituted for each occurrence of %* within X. ! %{ argument required. o => argument optional. j => join argument to equivalent, making one word. * => require other text after NAME as an argument. */ ! const char *arg_info; }; /* This is the table of mappings. Mappings are tried sequentially for each option encountered; the first one that matches, wins. */ ! struct option_map option_map[] = { {"--all-warnings", "-Wall", 0}, {"--ansi", "-ansi", 0}, {"--assemble", "-S", 0}, {"--assert", "-A", "a"}, {"--classpath", "-fclasspath=", "aj"}, ! {"--CLASSPATH", "-fCLASSPATH=", "aj"}, {"--comments", "-C", 0}, {"--compile", "-c", 0}, {"--debug", "-g", "oj"}, --- 894,922 ---- struct option_map { /* The long option's name. */ ! const char *const name; /* The equivalent short option. */ ! const char *const equivalent; /* Argument info. A string of flag chars; NULL equals no options. a => argument required. o => argument optional. j => join argument to equivalent, making one word. * => require other text after NAME as an argument. */ ! const char *const arg_info; }; /* This is the table of mappings. Mappings are tried sequentially for each option encountered; the first one that matches, wins. */ ! static const struct option_map option_map[] = { {"--all-warnings", "-Wall", 0}, {"--ansi", "-ansi", 0}, {"--assemble", "-S", 0}, {"--assert", "-A", "a"}, {"--classpath", "-fclasspath=", "aj"}, ! {"--bootclasspath", "-fbootclasspath=", "aj"}, ! {"--CLASSPATH", "-fclasspath=", "aj"}, {"--comments", "-C", 0}, {"--compile", "-c", 0}, {"--debug", "-g", "oj"}, *************** struct option_map option_map[] = *** 859,864 **** --- 942,948 ---- {"--library-directory", "-L", "a"}, {"--machine", "-m", "aj"}, {"--machine-", "-m", "*j"}, + {"--no-integrated-cpp", "-no-integrated-cpp", 0}, {"--no-line-commands", "-P", 0}, {"--no-precompiled-includes", "-noprecomp", 0}, {"--no-standard-includes", "-nostdinc", 0}, *************** struct option_map option_map[] = *** 883,888 **** --- 967,973 ---- {"--profile", "-p", 0}, {"--profile-blocks", "-a", 0}, {"--quiet", "-q", 0}, + {"--resource", "-fcompile-resource=", "aj"}, {"--save-temps", "-save-temps", 0}, {"--shared", "-shared", 0}, {"--silent", "-q", 0}, *************** struct option_map option_map[] = *** 900,912 **** {"--use-version", "-V", "a"}, {"--user-dependencies", "-MM", 0}, {"--verbose", "-v", 0}, - {"--version", "-dumpversion", 0}, {"--warn-", "-W", "*j"}, {"--write-dependencies", "-MD", 0}, {"--write-user-dependencies", "-MMD", 0}, {"--", "-f", "*j"} }; /* Translate the options described by *ARGCP and *ARGVP. Make a new vector and store it back in *ARGVP, and store its length in *ARGVC. */ --- 985,1008 ---- {"--use-version", "-V", "a"}, {"--user-dependencies", "-MM", 0}, {"--verbose", "-v", 0}, {"--warn-", "-W", "*j"}, {"--write-dependencies", "-MD", 0}, {"--write-user-dependencies", "-MMD", 0}, {"--", "-f", "*j"} }; + + #ifdef TARGET_OPTION_TRANSLATE_TABLE + static const struct { + const char *const option_found; + const char *const replacements; + } target_option_translations[] = + { + TARGET_OPTION_TRANSLATE_TABLE, + { 0, 0 } + }; + #endif + /* Translate the options described by *ARGCP and *ARGVP. Make a new vector and store it back in *ARGVP, and store its length in *ARGVC. */ *************** translate_options (argcp, argvp) *** 919,926 **** int i; int argc = *argcp; const char *const *argv = *argvp; const char **newv = ! (const char **) xmalloc ((argc + 2) * 2 * sizeof (const char *)); int newindex = 0; i = 0; --- 1015,1023 ---- int i; int argc = *argcp; const char *const *argv = *argvp; + int newvsize = (argc + 2) * 2 * sizeof (const char *); const char **newv = ! (const char **) xmalloc (newvsize); int newindex = 0; i = 0; *************** translate_options (argcp, argvp) *** 928,933 **** --- 1025,1079 ---- while (i < argc) { + #ifdef TARGET_OPTION_TRANSLATE_TABLE + int tott_idx; + + for (tott_idx = 0; + target_option_translations[tott_idx].option_found; + tott_idx++) + { + if (strcmp (target_option_translations[tott_idx].option_found, + argv[i]) == 0) + { + int spaces = 1; + const char *sp; + char *np; + + for (sp = target_option_translations[tott_idx].replacements; + *sp; sp++) + { + if (*sp == ' ') + spaces ++; + } + + newvsize += spaces * sizeof (const char *); + newv = (const char **) xrealloc (newv, newvsize); + + sp = target_option_translations[tott_idx].replacements; + np = xstrdup (sp); + + while (1) + { + while (*np == ' ') + np++; + if (*np == 0) + break; + newv[newindex++] = np; + while (*np != ' ' && *np) + np++; + if (*np == 0) + break; + *np++ = 0; + } + + i ++; + break; + } + } + if (target_option_translations[tott_idx].option_found) + continue; + #endif + /* Translate -- options. */ if (argv[i][0] == '-' && argv[i][1] == '-') { *************** translate_options (argcp, argvp) *** 954,960 **** if (strlen (option_map[k].name) >= arglen && !strncmp (argv[i], option_map[k].name, arglen)) { ! error ("Ambiguous abbreviation %s", argv[i]); break; } --- 1100,1106 ---- if (strlen (option_map[k].name) >= arglen && !strncmp (argv[i], option_map[k].name, arglen)) { ! error ("ambiguous abbreviation %s", argv[i]); break; } *************** translate_options (argcp, argvp) *** 981,987 **** else if (strchr (arginfo, '*') != 0) { ! error ("Incomplete `%s' option", option_map[j].name); break; } --- 1127,1133 ---- else if (strchr (arginfo, '*') != 0) { ! error ("incomplete `%s' option", option_map[j].name); break; } *************** translate_options (argcp, argvp) *** 992,998 **** { if (i + 1 == argc) { ! error ("Missing argument to `%s' option", option_map[j].name); break; } --- 1138,1144 ---- { if (i + 1 == argc) { ! error ("missing argument to `%s' option", option_map[j].name); break; } *************** translate_options (argcp, argvp) *** 1005,1011 **** else if (strchr (arginfo, 'o') == 0) { if (arg != 0) ! error ("Extraneous argument to `%s' option", option_map[j].name); arg = 0; } --- 1151,1157 ---- else if (strchr (arginfo, 'o') == 0) { if (arg != 0) ! error ("extraneous argument to `%s' option", option_map[j].name); arg = 0; } *************** translate_options (argcp, argvp) *** 1013,1019 **** /* Store the translation as one argv elt or as two. */ if (arg != 0 && strchr (arginfo, 'j') != 0) newv[newindex++] = concat (option_map[j].equivalent, arg, ! NULL_PTR); else if (arg != 0) { newv[newindex++] = option_map[j].equivalent; --- 1159,1165 ---- /* Store the translation as one argv elt or as two. */ if (arg != 0 && strchr (arginfo, 'j') != 0) newv[newindex++] = concat (option_map[j].equivalent, arg, ! NULL); else if (arg != 0) { newv[newindex++] = option_map[j].equivalent; *************** skip_whitespace (p) *** 1097,1103 **** struct prefix_list { ! char *prefix; /* String to prepend to the path. */ struct prefix_list *next; /* Next in linked list. */ int require_machine_suffix; /* Don't use without machine_suffix. */ /* 2 means try both machine_suffix and just_machine_suffix. */ --- 1243,1249 ---- struct prefix_list { ! const char *prefix; /* String to prepend to the path. */ struct prefix_list *next; /* Next in linked list. */ int require_machine_suffix; /* Don't use without machine_suffix. */ /* 2 means try both machine_suffix and just_machine_suffix. */ *************** static const char *gcc_exec_prefix; *** 1172,1191 **** #define STANDARD_BINDIR_PREFIX "/usr/local/bin" #endif ! static const char *standard_exec_prefix = STANDARD_EXEC_PREFIX; ! static const char *standard_exec_prefix_1 = "/usr/lib/gcc/"; static const char *md_exec_prefix = MD_EXEC_PREFIX; static const char *md_startfile_prefix = MD_STARTFILE_PREFIX; static const char *md_startfile_prefix_1 = MD_STARTFILE_PREFIX_1; ! static const char *standard_startfile_prefix = STANDARD_STARTFILE_PREFIX; ! static const char *standard_startfile_prefix_1 = "/lib/"; ! static const char *standard_startfile_prefix_2 = "/usr/lib/"; ! static const char *tooldir_base_prefix = TOOLDIR_BASE_PREFIX; static const char *tooldir_prefix; ! static const char *standard_bindir_prefix = STANDARD_BINDIR_PREFIX; /* Subdirectory to use for locating libraries. Set by set_multilib_dir based on the compilation options. */ --- 1318,1337 ---- #define STANDARD_BINDIR_PREFIX "/usr/local/bin" #endif ! static const char *const standard_exec_prefix = STANDARD_EXEC_PREFIX; ! static const char *const standard_exec_prefix_1 = "/usr/lib/gcc/"; static const char *md_exec_prefix = MD_EXEC_PREFIX; static const char *md_startfile_prefix = MD_STARTFILE_PREFIX; static const char *md_startfile_prefix_1 = MD_STARTFILE_PREFIX_1; ! static const char *const standard_startfile_prefix = STANDARD_STARTFILE_PREFIX; ! static const char *const standard_startfile_prefix_1 = "/lib/"; ! static const char *const standard_startfile_prefix_2 = "/usr/lib/"; ! static const char *const tooldir_base_prefix = TOOLDIR_BASE_PREFIX; static const char *tooldir_prefix; ! static const char *const standard_bindir_prefix = STANDARD_BINDIR_PREFIX; /* Subdirectory to use for locating libraries. Set by set_multilib_dir based on the compilation options. */ *************** struct spec_list *** 1212,1239 **** }; #define INIT_STATIC_SPEC(NAME,PTR) \ ! { NAME, NULL_PTR, PTR, (struct spec_list *) 0, sizeof (NAME) - 1, 0 } /* List of statically defined specs. */ static struct spec_list static_specs[] = { INIT_STATIC_SPEC ("asm", &asm_spec), INIT_STATIC_SPEC ("asm_final", &asm_final_spec), INIT_STATIC_SPEC ("asm_options", &asm_options), INIT_STATIC_SPEC ("invoke_as", &invoke_as), INIT_STATIC_SPEC ("cpp", &cpp_spec), INIT_STATIC_SPEC ("cpp_options", &cpp_options), INIT_STATIC_SPEC ("trad_capable_cpp", &trad_capable_cpp), INIT_STATIC_SPEC ("cc1", &cc1_spec), INIT_STATIC_SPEC ("cc1_options", &cc1_options), INIT_STATIC_SPEC ("cc1plus", &cc1plus_spec), INIT_STATIC_SPEC ("endfile", &endfile_spec), INIT_STATIC_SPEC ("link", &link_spec), INIT_STATIC_SPEC ("lib", &lib_spec), INIT_STATIC_SPEC ("libgcc", &libgcc_spec), INIT_STATIC_SPEC ("startfile", &startfile_spec), INIT_STATIC_SPEC ("switches_need_spaces", &switches_need_spaces), - INIT_STATIC_SPEC ("signed_char", &signed_char_spec), INIT_STATIC_SPEC ("predefines", &cpp_predefines), INIT_STATIC_SPEC ("cross_compile", &cross_compile), INIT_STATIC_SPEC ("version", &compiler_version), --- 1358,1387 ---- }; #define INIT_STATIC_SPEC(NAME,PTR) \ ! { NAME, NULL, PTR, (struct spec_list *) 0, sizeof (NAME) - 1, 0 } /* List of statically defined specs. */ static struct spec_list static_specs[] = { INIT_STATIC_SPEC ("asm", &asm_spec), + INIT_STATIC_SPEC ("asm_debug", &asm_debug), INIT_STATIC_SPEC ("asm_final", &asm_final_spec), INIT_STATIC_SPEC ("asm_options", &asm_options), INIT_STATIC_SPEC ("invoke_as", &invoke_as), INIT_STATIC_SPEC ("cpp", &cpp_spec), INIT_STATIC_SPEC ("cpp_options", &cpp_options), + INIT_STATIC_SPEC ("cpp_unique_options", &cpp_unique_options), INIT_STATIC_SPEC ("trad_capable_cpp", &trad_capable_cpp), INIT_STATIC_SPEC ("cc1", &cc1_spec), INIT_STATIC_SPEC ("cc1_options", &cc1_options), INIT_STATIC_SPEC ("cc1plus", &cc1plus_spec), + INIT_STATIC_SPEC ("link_gcc_c_sequence", &link_gcc_c_sequence_spec), INIT_STATIC_SPEC ("endfile", &endfile_spec), INIT_STATIC_SPEC ("link", &link_spec), INIT_STATIC_SPEC ("lib", &lib_spec), INIT_STATIC_SPEC ("libgcc", &libgcc_spec), INIT_STATIC_SPEC ("startfile", &startfile_spec), INIT_STATIC_SPEC ("switches_need_spaces", &switches_need_spaces), INIT_STATIC_SPEC ("predefines", &cpp_predefines), INIT_STATIC_SPEC ("cross_compile", &cross_compile), INIT_STATIC_SPEC ("version", &compiler_version), *************** static struct spec_list static_specs[] = *** 1254,1264 **** That is all that the EXTRA_SPECS macro gives us. */ struct spec_list_1 { ! const char *name; ! const char *ptr; }; ! static struct spec_list_1 extra_specs_1[] = { EXTRA_SPECS }; static struct spec_list *extra_specs = (struct spec_list *) 0; #endif --- 1402,1412 ---- That is all that the EXTRA_SPECS macro gives us. */ struct spec_list_1 { ! const char *const name; ! const char *const ptr; }; ! static const struct spec_list_1 extra_specs_1[] = { EXTRA_SPECS }; static struct spec_list *extra_specs = (struct spec_list *) 0; #endif *************** static struct spec_list *specs = (struct *** 1269,1299 **** /* Add appropriate libgcc specs to OBSTACK, taking into account various permutations of -shared-libgcc, -shared, and such. */ static void ! init_gcc_specs (obstack, shared_name, static_name) struct obstack *obstack; const char *shared_name; const char *static_name; { ! char buffer[128]; ! /* If we see -shared-libgcc, then use the shared version. */ ! sprintf (buffer, "%%{shared-libgcc:%s %s}", shared_name, static_name); ! obstack_grow (obstack, buffer, strlen (buffer)); ! /* If we see -static-libgcc, then use the static version. */ ! sprintf (buffer, "%%{static-libgcc:%s}", static_name); ! obstack_grow (obstack, buffer, strlen (buffer)); ! /* Otherwise, if we see -shared, then use the shared version. */ ! sprintf (buffer, ! "%%{!shared-libgcc:%%{!static-libgcc:%%{shared:%s}}}", ! shared_name); ! obstack_grow (obstack, buffer, strlen (buffer)); ! /* Otherwise, use the static version. */ ! sprintf (buffer, ! "%%{!shared-libgcc:%%{!static-libgcc:%%{!shared:%s}}}", ! static_name); ! obstack_grow (obstack, buffer, strlen (buffer)); } /* Initialize the specs lookup routines. */ --- 1417,1449 ---- /* Add appropriate libgcc specs to OBSTACK, taking into account various permutations of -shared-libgcc, -shared, and such. */ + #ifdef ENABLE_SHARED_LIBGCC static void ! init_gcc_specs (obstack, shared_name, static_name, eh_name) struct obstack *obstack; const char *shared_name; const char *static_name; + const char *eh_name; { ! char *buf; ! buf = concat ("%{static|static-libgcc:", static_name, " ", eh_name, ! "}%{!static:%{!static-libgcc:", ! "%{!shared:%{!shared-libgcc:", static_name, " ", ! eh_name, "}%{shared-libgcc:", shared_name, " ", ! static_name, "}}%{shared:", ! #ifdef LINK_EH_SPEC ! "%{shared-libgcc:", shared_name, ! "}%{!shared-libgcc:", static_name, "}", ! #else ! shared_name, ! #endif ! "}}}", NULL); ! ! obstack_grow (obstack, buf, strlen (buf)); ! free (buf); } + #endif /* ENABLE_SHARED_LIBGCC */ /* Initialize the specs lookup routines. */ *************** init_spec () *** 1308,1314 **** return; /* Already initialized. */ if (verbose_flag) ! notice ("Using builtin specs.\n"); #ifdef EXTRA_SPECS extra_specs = (struct spec_list *) --- 1458,1464 ---- return; /* Already initialized. */ if (verbose_flag) ! notice ("Using built-in specs.\n"); #ifdef EXTRA_SPECS extra_specs = (struct spec_list *) *************** init_spec () *** 1347,1353 **** (3) For each ET_DYN we're linking against (either through -lfoo or /some/path/foo.so), check to see whether it or one of ! its dependancies depends on a shared libgcc. (4) If "-shared" --- 1497,1503 ---- (3) For each ET_DYN we're linking against (either through -lfoo or /some/path/foo.so), check to see whether it or one of ! its dependencies depends on a shared libgcc. (4) If "-shared" *************** init_spec () *** 1378,1384 **** "-lgcc_s%M" #endif , ! "-lgcc"); p += 5; in_sep = 0; } --- 1528,1535 ---- "-lgcc_s%M" #endif , ! "-lgcc", ! "-lgcc_eh"); p += 5; in_sep = 0; } *************** init_spec () *** 1393,1399 **** "-lgcc_s%M" #endif , ! "libgcc.a%s"); p += 10; in_sep = 0; } --- 1544,1551 ---- "-lgcc_s%M" #endif , ! "libgcc.a%s", ! "libgcc_eh.a%s"); p += 10; in_sep = 0; } *************** init_spec () *** 1412,1423 **** #ifdef USE_AS_TRADITIONAL_FORMAT /* Prepend "--traditional-format" to whatever asm_spec we had before. */ { ! static char tf[] = "--traditional-format "; obstack_grow (&obstack, tf, sizeof(tf) - 1); obstack_grow0 (&obstack, asm_spec, strlen (asm_spec)); asm_spec = obstack_finish (&obstack); } #endif specs = sl; } --- 1564,1581 ---- #ifdef USE_AS_TRADITIONAL_FORMAT /* Prepend "--traditional-format" to whatever asm_spec we had before. */ { ! static const char tf[] = "--traditional-format "; obstack_grow (&obstack, tf, sizeof(tf) - 1); obstack_grow0 (&obstack, asm_spec, strlen (asm_spec)); asm_spec = obstack_finish (&obstack); } #endif + #ifdef LINK_EH_SPEC + /* Prepend LINK_EH_SPEC to whatever link_spec we had before. */ + obstack_grow (&obstack, LINK_EH_SPEC, sizeof(LINK_EH_SPEC) - 1); + obstack_grow0 (&obstack, link_spec, strlen (link_spec)); + link_spec = obstack_finish (&obstack); + #endif specs = sl; } *************** set_spec (name, spec) *** 1469,1475 **** old_spec = *(sl->ptr_spec); *(sl->ptr_spec) = ((spec[0] == '+' && ISSPACE ((unsigned char)spec[1])) ! ? concat (old_spec, spec + 1, NULL_PTR) : xstrdup (spec)); #ifdef DEBUG_SPECS --- 1627,1633 ---- old_spec = *(sl->ptr_spec); *(sl->ptr_spec) = ((spec[0] == '+' && ISSPACE ((unsigned char)spec[1])) ! ? concat (old_spec, spec + 1, NULL) : xstrdup (spec)); #ifdef DEBUG_SPECS *************** store_arg (arg, delete_always, delete_fa *** 1555,1561 **** record_temp_file (arg, delete_always, delete_failure); } ! /* Load specs from a file name named FILENAME, replacing occurances of various different types of line-endings, \r\n, \n\r and just \r, with a single \n. */ --- 1713,1719 ---- record_temp_file (arg, delete_always, delete_failure); } ! /* Load specs from a file name named FILENAME, replacing occurrences of various different types of line-endings, \r\n, \n\r and just \r, with a single \n. */ *************** load_specs (filename) *** 1618,1624 **** A suffix which starts with `*' is a definition for one of the machine-specific sub-specs. The "suffix" should be ! *asm, *cc1, *cpp, *link, *startfile, *signed_char, etc. The corresponding spec is stored in asm_spec, etc., rather than in the `compilers' vector. --- 1776,1782 ---- A suffix which starts with `*' is a definition for one of the machine-specific sub-specs. The "suffix" should be ! *asm, *cc1, *cpp, *link, *startfile, etc. The corresponding spec is stored in asm_spec, etc., rather than in the `compilers' vector. *************** read_specs (filename, main_p) *** 1630,1636 **** int main_p; { char *buffer; ! register char *p; buffer = load_specs (filename); --- 1788,1794 ---- int main_p; { char *buffer; ! char *p; buffer = load_specs (filename); *************** read_specs (filename, main_p) *** 1697,1703 **** if (new_filename) read_specs (new_filename, FALSE); else if (verbose_flag) ! notice ("Could not find specs file %s\n", p1); continue; } else if (!strncmp (p1, "%rename", sizeof "%rename" - 1) --- 1855,1861 ---- if (new_filename) read_specs (new_filename, FALSE); else if (verbose_flag) ! notice ("could not find specs file %s\n", p1); continue; } else if (!strncmp (p1, "%rename", sizeof "%rename" - 1) *************** record_temp_file (filename, always_delet *** 1896,1906 **** int always_delete; int fail_delete; { ! register char *const name = xstrdup (filename); if (always_delete) { ! register struct temp_file *temp; for (temp = always_delete_queue; temp; temp = temp->next) if (! strcmp (name, temp->name)) goto already1; --- 2054,2064 ---- int always_delete; int fail_delete; { ! char *const name = xstrdup (filename); if (always_delete) { ! struct temp_file *temp; for (temp = always_delete_queue; temp; temp = temp->next) if (! strcmp (name, temp->name)) goto already1; *************** record_temp_file (filename, always_delet *** 1915,1921 **** if (fail_delete) { ! register struct temp_file *temp; for (temp = failure_delete_queue; temp; temp = temp->next) if (! strcmp (name, temp->name)) goto already2; --- 2073,2079 ---- if (fail_delete) { ! struct temp_file *temp; for (temp = failure_delete_queue; temp; temp = temp->next) if (! strcmp (name, temp->name)) goto already2; *************** delete_if_ordinary (name) *** 1957,1963 **** static void delete_temp_files () { ! register struct temp_file *temp; for (temp = always_delete_queue; temp; temp = temp->next) delete_if_ordinary (temp->name); --- 2115,2121 ---- static void delete_temp_files () { ! struct temp_file *temp; for (temp = always_delete_queue; temp; temp = temp->next) delete_if_ordinary (temp->name); *************** delete_temp_files () *** 1969,1975 **** static void delete_failure_queue () { ! register struct temp_file *temp; for (temp = failure_delete_queue; temp; temp = temp->next) delete_if_ordinary (temp->name); --- 2127,2133 ---- static void delete_failure_queue () { ! struct temp_file *temp; for (temp = failure_delete_queue; temp; temp = temp->next) delete_if_ordinary (temp->name); *************** clear_failure_queue () *** 1981,2040 **** failure_delete_queue = 0; } - /* Routine to add variables to the environment. We do this to pass - the pathname of the gcc driver, and the directories search to the - collect2 program, which is being run as ld. This way, we can be - sure of executing the right compiler when collect2 wants to build - constructors and destructors. Since the environment variables we - use come from an obstack, we don't have to worry about allocating - space for them. */ - - #ifndef HAVE_PUTENV - - void - putenv (str) - char *str; - { - #ifndef VMS /* nor about VMS */ - - extern char **environ; - char **old_environ = environ; - char **envp; - int num_envs = 0; - int name_len = 1; - int str_len = strlen (str); - char *p = str; - int ch; - - while ((ch = *p++) != '\0' && ch != '=') - name_len++; - - if (!ch) - abort (); - - /* Search for replacing an existing environment variable, and - count the number of total environment variables. */ - for (envp = old_environ; *envp; envp++) - { - num_envs++; - if (!strncmp (str, *envp, name_len)) - { - *envp = str; - return; - } - } - - /* Add a new environment variable */ - environ = (char **) xmalloc (sizeof (char *) * (num_envs + 2)); - *environ = str; - memcpy ((char *) (environ + 1), (char *) old_environ, - sizeof (char *) * (num_envs + 1)); - - #endif /* VMS */ - } - - #endif /* HAVE_PUTENV */ - /* Build a list of search directories from PATHS. PREFIX is a string to prepend to the list. If CHECK_DIR_P is non-zero we ensure the directory exists. --- 2139,2144 ---- *************** split_directories (name, ptr_num_dirs) *** 2178,2184 **** if (p - 1 - q > 0) dirs[num_dirs++] = save_string (q, p - 1 - q); ! dirs[num_dirs] = NULL_PTR; if (ptr_num_dirs) *ptr_num_dirs = num_dirs; --- 2282,2288 ---- if (p - 1 - q > 0) dirs[num_dirs++] = save_string (q, p - 1 - q); ! dirs[num_dirs] = NULL; if (ptr_num_dirs) *ptr_num_dirs = num_dirs; *************** free_split_directories (dirs) *** 2193,2199 **** { int i = 0; ! while (dirs[i] != NULL_PTR) free (dirs[i++]); free ((char *) dirs); --- 2297,2303 ---- { int i = 0; ! while (dirs[i] != NULL) free (dirs[i++]); free ((char *) dirs); *************** make_relative_prefix (progname, bin_pref *** 2231,2238 **** GET_ENV_PATH_LIST (temp, "PATH"); if (temp) { ! char *startp, *endp; ! char *nstore = (char *) alloca (strlen (temp) + strlen (progname) + 1); startp = endp = temp; while (1) --- 2335,2346 ---- GET_ENV_PATH_LIST (temp, "PATH"); if (temp) { ! char *startp, *endp, *nstore; ! size_t prefixlen = strlen (temp) + 1; ! if (prefixlen < 2) ! prefixlen = 2; ! ! nstore = (char *) alloca (prefixlen + strlen (progname) + 1); startp = endp = temp; while (1) *************** make_relative_prefix (progname, bin_pref *** 2258,2265 **** } strcat (nstore, progname); if (! access (nstore, X_OK) ! #ifdef HAVE_EXECUTABLE_SUFFIX ! || ! access (strcat (nstore, EXECUTABLE_SUFFIX), X_OK) #endif ) { --- 2366,2373 ---- } strcat (nstore, progname); if (! access (nstore, X_OK) ! #ifdef HAVE_HOST_EXECUTABLE_SUFFIX ! || ! access (strcat (nstore, HOST_EXECUTABLE_SUFFIX), X_OK) #endif ) { *************** make_relative_prefix (progname, bin_pref *** 2300,2306 **** free_split_directories (prog_dirs); free_split_directories (bin_dirs); prog_dirs = bin_dirs = (char **) 0; ! return NULL_PTR; } } --- 2408,2414 ---- free_split_directories (prog_dirs); free_split_directories (bin_dirs); prog_dirs = bin_dirs = (char **) 0; ! return NULL; } } *************** make_relative_prefix (progname, bin_pref *** 2320,2326 **** free_split_directories (prog_dirs); free_split_directories (bin_dirs); free_split_directories (prefix_dirs); ! return NULL_PTR; } /* Build up the pathnames in argv[0]. */ --- 2428,2434 ---- free_split_directories (prog_dirs); free_split_directories (bin_dirs); free_split_directories (prefix_dirs); ! return NULL; } /* Build up the pathnames in argv[0]. */ *************** find_a_file (pprefix, name, mode) *** 2378,2384 **** int mode; { char *temp; ! const char *file_suffix = ((mode & X_OK) != 0 ? EXECUTABLE_SUFFIX : ""); struct prefix_list *pl; int len = pprefix->max_len + strlen (name) + strlen (file_suffix) + 1; --- 2486,2493 ---- int mode; { char *temp; ! const char *const file_suffix = ! ((mode & X_OK) != 0 ? HOST_EXECUTABLE_SUFFIX : ""); struct prefix_list *pl; int len = pprefix->max_len + strlen (name) + strlen (file_suffix) + 1; *************** add_prefix (pprefix, prefix, component, *** 2553,2559 **** pprefix->max_len = len; pl = (struct prefix_list *) xmalloc (sizeof (struct prefix_list)); ! pl->prefix = save_string (prefix, len); pl->require_machine_suffix = require_machine_suffix; pl->used_flag_ptr = warn; pl->priority = priority; --- 2662,2668 ---- pprefix->max_len = len; pl = (struct prefix_list *) xmalloc (sizeof (struct prefix_list)); ! pl->prefix = prefix; pl->require_machine_suffix = require_machine_suffix; pl->used_flag_ptr = warn; pl->priority = priority; *************** execute () *** 2635,2642 **** { const char *const *j; ! for (j = commands[i].argv; *j; j++) ! fprintf (stderr, " %s", *j); /* Print a pipe symbol after all but the last command. */ if (i + 1 != n_commands) --- 2744,2767 ---- { const char *const *j; ! if (verbose_only_flag) ! { ! for (j = commands[i].argv; *j; j++) ! { ! const char *p; ! fprintf (stderr, " \""); ! for (p = *j; *p; ++p) ! { ! if (*p == '"' || *p == '\\' || *p == '$') ! fputc ('\\', stderr); ! fputc (*p, stderr); ! } ! fputc ('"', stderr); ! } ! } ! else ! for (j = commands[i].argv; *j; j++) ! fprintf (stderr, " %s", *j); /* Print a pipe symbol after all but the last command. */ if (i + 1 != n_commands) *************** execute () *** 2644,2649 **** --- 2769,2776 ---- fprintf (stderr, "\n"); } fflush (stderr); + if (verbose_only_flag != 0) + return 0; #ifdef DEBUG notice ("\nGo ahead? (y or n) "); fflush (stderr); *************** static int warn_std; *** 2833,2849 **** /* Gives value to pass as "warn" to add_prefix for standard prefixes. */ static int *warn_std_ptr = 0; ! #if defined(HAVE_OBJECT_SUFFIX) || defined(HAVE_EXECUTABLE_SUFFIX) /* Convert NAME to a new name if it is the standard suffix. DO_EXE ! is true if we should look for an executable suffix as well. */ ! static char * ! convert_filename (name, do_exe) ! char *name; ! int do_exe; { int i; int len; if (name == NULL) --- 2960,2980 ---- /* Gives value to pass as "warn" to add_prefix for standard prefixes. */ static int *warn_std_ptr = 0; ! #if defined(HAVE_TARGET_OBJECT_SUFFIX) || defined(HAVE_TARGET_EXECUTABLE_SUFFIX) /* Convert NAME to a new name if it is the standard suffix. DO_EXE ! is true if we should look for an executable suffix. DO_OBJ ! is true if we should look for an object suffix. */ ! static const char * ! convert_filename (name, do_exe, do_obj) ! const char *name; ! int do_exe ATTRIBUTE_UNUSED; ! int do_obj ATTRIBUTE_UNUSED; { + #if defined(HAVE_TARGET_EXECUTABLE_SUFFIX) int i; + #endif int len; if (name == NULL) *************** convert_filename (name, do_exe) *** 2851,2872 **** len = strlen (name); ! #ifdef HAVE_OBJECT_SUFFIX ! /* Convert x.o to x.obj if OBJECT_SUFFIX is ".obj". */ ! if (len > 2 && name[len - 2] == '.' && name[len - 1] == 'o') { obstack_grow (&obstack, name, len - 2); ! obstack_grow0 (&obstack, OBJECT_SUFFIX, strlen (OBJECT_SUFFIX)); name = obstack_finish (&obstack); } #endif ! #if defined(HAVE_EXECUTABLE_SUFFIX) && !defined(NO_AUTO_EXE_SUFFIX) /* If there is no filetype, make it the executable suffix (which includes the "."). But don't get confused if we have just "-o". */ ! if (! do_exe || EXECUTABLE_SUFFIX[0] == 0 || (len == 2 && name[0] == '-')) return name; for (i = len - 1; i >= 0; i--) --- 2982,3003 ---- len = strlen (name); ! #ifdef HAVE_TARGET_OBJECT_SUFFIX ! /* Convert x.o to x.obj if TARGET_OBJECT_SUFFIX is ".obj". */ ! if (do_obj && len > 2 && name[len - 2] == '.' && name[len - 1] == 'o') { obstack_grow (&obstack, name, len - 2); ! obstack_grow0 (&obstack, TARGET_OBJECT_SUFFIX, strlen (TARGET_OBJECT_SUFFIX)); name = obstack_finish (&obstack); } #endif ! #if defined(HAVE_TARGET_EXECUTABLE_SUFFIX) /* If there is no filetype, make it the executable suffix (which includes the "."). But don't get confused if we have just "-o". */ ! if (! do_exe || TARGET_EXECUTABLE_SUFFIX[0] == 0 || (len == 2 && name[0] == '-')) return name; for (i = len - 1; i >= 0; i--) *************** convert_filename (name, do_exe) *** 2878,2884 **** return name; obstack_grow (&obstack, name, len); ! obstack_grow0 (&obstack, EXECUTABLE_SUFFIX, strlen (EXECUTABLE_SUFFIX)); name = obstack_finish (&obstack); #endif --- 3009,3016 ---- return name; obstack_grow (&obstack, name, len); ! obstack_grow0 (&obstack, TARGET_EXECUTABLE_SUFFIX, ! strlen (TARGET_EXECUTABLE_SUFFIX)); name = obstack_finish (&obstack); #endif *************** display_help () *** 2916,2927 **** fputs (_(" -save-temps Do not delete intermediate files\n"), stdout); fputs (_(" -pipe Use pipes rather than intermediate files\n"), stdout); fputs (_(" -time Time the execution of each subprocess\n"), stdout); ! fputs (_(" -specs= Override builtin specs with the contents of \n"), stdout); fputs (_(" -std= Assume that the input sources are for \n"), stdout); fputs (_(" -B Add to the compiler's search paths\n"), stdout); fputs (_(" -b Run gcc for target , if installed\n"), stdout); fputs (_(" -V Run gcc version number , if installed\n"), stdout); fputs (_(" -v Display the programs invoked by the compiler\n"), stdout); fputs (_(" -E Preprocess only; do not compile, assemble or link\n"), stdout); fputs (_(" -S Compile only; do not assemble or link\n"), stdout); fputs (_(" -c Compile and assemble, but do not link\n"), stdout); --- 3048,3060 ---- fputs (_(" -save-temps Do not delete intermediate files\n"), stdout); fputs (_(" -pipe Use pipes rather than intermediate files\n"), stdout); fputs (_(" -time Time the execution of each subprocess\n"), stdout); ! fputs (_(" -specs= Override built-in specs with the contents of \n"), stdout); fputs (_(" -std= Assume that the input sources are for \n"), stdout); fputs (_(" -B Add to the compiler's search paths\n"), stdout); fputs (_(" -b Run gcc for target , if installed\n"), stdout); fputs (_(" -V Run gcc version number , if installed\n"), stdout); fputs (_(" -v Display the programs invoked by the compiler\n"), stdout); + fputs (_(" -### Like -v but options quoted and commands not executed\n"), stdout); fputs (_(" -E Preprocess only; do not compile, assemble or link\n"), stdout); fputs (_(" -S Compile only; do not assemble or link\n"), stdout); fputs (_(" -c Compile and assemble, but do not link\n"), stdout); *************** display_help () *** 2929,2935 **** fputs (_("\ -x Specify the language of the following input files\n\ Permissable languages include: c c++ assembler none\n\ ! 'none' means revert to the default behaviour of\n\ guessing the language based on the file's extension\n\ "), stdout); --- 3062,3068 ---- fputs (_("\ -x Specify the language of the following input files\n\ Permissable languages include: c c++ assembler none\n\ ! 'none' means revert to the default behavior of\n\ guessing the language based on the file's extension\n\ "), stdout); *************** process_command (argc, argv) *** 3006,3012 **** int argc; const char *const *argv; { ! register int i; const char *temp; char *temp1; const char *spec_lang = 0; --- 3139,3145 ---- int argc; const char *const *argv; { ! int i; const char *temp; char *temp1; const char *spec_lang = 0; *************** process_command (argc, argv) *** 3048,3054 **** gcc_exec_prefix = make_relative_prefix (argv[0], standard_bindir_prefix, standard_exec_prefix); if (gcc_exec_prefix) ! putenv (concat ("GCC_EXEC_PREFIX=", gcc_exec_prefix, NULL_PTR)); } #endif --- 3181,3187 ---- gcc_exec_prefix = make_relative_prefix (argv[0], standard_bindir_prefix, standard_exec_prefix); if (gcc_exec_prefix) ! putenv (concat ("GCC_EXEC_PREFIX=", gcc_exec_prefix, NULL)); } #endif *************** process_command (argc, argv) *** 3069,3077 **** set_std_prefix (gcc_exec_prefix, len); add_prefix (&exec_prefixes, gcc_exec_prefix, "GCC", ! PREFIX_PRIORITY_LAST, 0, NULL_PTR); add_prefix (&startfile_prefixes, gcc_exec_prefix, "GCC", ! PREFIX_PRIORITY_LAST, 0, NULL_PTR); } /* COMPILER_PATH and LIBRARY_PATH have values --- 3202,3210 ---- set_std_prefix (gcc_exec_prefix, len); add_prefix (&exec_prefixes, gcc_exec_prefix, "GCC", ! PREFIX_PRIORITY_LAST, 0, NULL); add_prefix (&startfile_prefixes, gcc_exec_prefix, "GCC", ! PREFIX_PRIORITY_LAST, 0, NULL); } /* COMPILER_PATH and LIBRARY_PATH have values *************** process_command (argc, argv) *** 3090,3096 **** { strncpy (nstore, startp, endp - startp); if (endp == startp) ! strcpy (nstore, concat (".", dir_separator_str, NULL_PTR)); else if (!IS_DIR_SEPARATOR (endp[-1])) { nstore[endp - startp] = DIR_SEPARATOR; --- 3223,3229 ---- { strncpy (nstore, startp, endp - startp); if (endp == startp) ! strcpy (nstore, concat (".", dir_separator_str, NULL)); else if (!IS_DIR_SEPARATOR (endp[-1])) { nstore[endp - startp] = DIR_SEPARATOR; *************** process_command (argc, argv) *** 3099,3108 **** else nstore[endp - startp] = 0; add_prefix (&exec_prefixes, nstore, 0, ! PREFIX_PRIORITY_LAST, 0, NULL_PTR); add_prefix (&include_prefixes, ! concat (nstore, "include", NULL_PTR), ! 0, PREFIX_PRIORITY_LAST, 0, NULL_PTR); if (*endp == 0) break; endp = startp = endp + 1; --- 3232,3241 ---- else nstore[endp - startp] = 0; add_prefix (&exec_prefixes, nstore, 0, ! PREFIX_PRIORITY_LAST, 0, NULL); add_prefix (&include_prefixes, ! concat (nstore, "include", NULL), ! 0, PREFIX_PRIORITY_LAST, 0, NULL); if (*endp == 0) break; endp = startp = endp + 1; *************** process_command (argc, argv) *** 3125,3131 **** { strncpy (nstore, startp, endp - startp); if (endp == startp) ! strcpy (nstore, concat (".", dir_separator_str, NULL_PTR)); else if (!IS_DIR_SEPARATOR (endp[-1])) { nstore[endp - startp] = DIR_SEPARATOR; --- 3258,3264 ---- { strncpy (nstore, startp, endp - startp); if (endp == startp) ! strcpy (nstore, concat (".", dir_separator_str, NULL)); else if (!IS_DIR_SEPARATOR (endp[-1])) { nstore[endp - startp] = DIR_SEPARATOR; *************** process_command (argc, argv) *** 3133,3140 **** } else nstore[endp - startp] = 0; ! add_prefix (&startfile_prefixes, nstore, NULL_PTR, ! PREFIX_PRIORITY_LAST, 0, NULL_PTR); if (*endp == 0) break; endp = startp = endp + 1; --- 3266,3273 ---- } else nstore[endp - startp] = 0; ! add_prefix (&startfile_prefixes, nstore, NULL, ! PREFIX_PRIORITY_LAST, 0, NULL); if (*endp == 0) break; endp = startp = endp + 1; *************** process_command (argc, argv) *** 3158,3164 **** { strncpy (nstore, startp, endp - startp); if (endp == startp) ! strcpy (nstore, concat (".", dir_separator_str, NULL_PTR)); else if (!IS_DIR_SEPARATOR (endp[-1])) { nstore[endp - startp] = DIR_SEPARATOR; --- 3291,3297 ---- { strncpy (nstore, startp, endp - startp); if (endp == startp) ! strcpy (nstore, concat (".", dir_separator_str, NULL)); else if (!IS_DIR_SEPARATOR (endp[-1])) { nstore[endp - startp] = DIR_SEPARATOR; *************** process_command (argc, argv) *** 3166,3173 **** } else nstore[endp - startp] = 0; ! add_prefix (&startfile_prefixes, nstore, NULL_PTR, ! PREFIX_PRIORITY_LAST, 0, NULL_PTR); if (*endp == 0) break; endp = startp = endp + 1; --- 3299,3306 ---- } else nstore[endp - startp] = 0; ! add_prefix (&startfile_prefixes, nstore, NULL, ! PREFIX_PRIORITY_LAST, 0, NULL); if (*endp == 0) break; endp = startp = endp + 1; *************** process_command (argc, argv) *** 3210,3215 **** --- 3343,3359 ---- printf ("%s\n", spec_machine); exit (0); } + else if (strcmp (argv[i], "-fversion") == 0) + { + /* translate_options () has turned --version into -fversion. */ + printf (_("%s (GCC) %s\n"), programname, version_string); + fputs (_("Copyright (C) 2002 Free Software Foundation, Inc.\n"), + stdout); + fputs (_("This is free software; see the source for copying conditions. There is NO\n\ + warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"), + stdout); + exit (0); + } else if (strcmp (argv[i], "-fhelp") == 0) { /* translate_options () has turned --help into -fhelp. */ *************** process_command (argc, argv) *** 3227,3233 **** } else if (strcmp (argv[i], "-ftarget-help") == 0) { ! /* translate_options() has turned --target-help into -ftarget-help. */ target_help_flag = 1; /* We will be passing a dummy file on to the sub-processes. */ --- 3371,3377 ---- } else if (strcmp (argv[i], "-ftarget-help") == 0) { ! /* translate_options() has turned --target-help into -ftarget-help. */ target_help_flag = 1; /* We will be passing a dummy file on to the sub-processes. */ *************** process_command (argc, argv) *** 3309,3314 **** --- 3453,3466 ---- n_infiles++; i++; } + else if (strcmp (argv[i], "-l") == 0) + { + if (i + 1 == argc) + fatal ("argument to `-l' is missing"); + + n_infiles++; + i++; + } else if (strncmp (argv[i], "-l", 2) == 0) n_infiles++; else if (strcmp (argv[i], "-save-temps") == 0) *************** process_command (argc, argv) *** 3348,3357 **** } else if (strcmp (argv[i], "-time") == 0) report_times = 1; else if (argv[i][0] == '-' && argv[i][1] != 0) { ! register const char *p = &argv[i][1]; ! register int c = *p; switch (c) { --- 3500,3518 ---- } else if (strcmp (argv[i], "-time") == 0) report_times = 1; + else if (strcmp (argv[i], "-###") == 0) + { + /* This is similar to -v except that there is no execution + of the commands and the echoed arguments are quoted. It + is intended for use in shell scripts to capture the + driver-generated command line. */ + verbose_only_flag++; + verbose_flag++; + } else if (argv[i][0] == '-' && argv[i][1] != 0) { ! const char *p = &argv[i][1]; ! int c = *p; switch (c) { *************** process_command (argc, argv) *** 3370,3413 **** case 'B': { const char *value; if (p[1] == 0 && i + 1 == argc) fatal ("argument to `-B' is missing"); if (p[1] == 0) value = argv[++i]; else value = p + 1; ! { ! /* As a kludge, if the arg is "[foo/]stageN/", just ! add "[foo/]include" to the include prefix. */ ! int len = strlen (value); ! if ((len == 7 ! || (len > 7 ! && (IS_DIR_SEPARATOR (value[len - 8])))) ! && strncmp (value + len - 7, "stage", 5) == 0 ! && ISDIGIT (value[len - 2]) ! && (IS_DIR_SEPARATOR (value[len - 1]))) ! { ! if (len == 7) ! add_prefix (&include_prefixes, "include", NULL_PTR, ! PREFIX_PRIORITY_B_OPT, 0, NULL_PTR); ! else ! { ! char *string = xmalloc (len + 1); ! strncpy (string, value, len-7); ! strcpy (string+len-7, "include"); ! add_prefix (&include_prefixes, string, NULL_PTR, ! PREFIX_PRIORITY_B_OPT, 0, NULL_PTR); ! } ! } ! } ! add_prefix (&exec_prefixes, value, NULL_PTR, PREFIX_PRIORITY_B_OPT, 0, &warn_B); ! add_prefix (&startfile_prefixes, value, NULL_PTR, PREFIX_PRIORITY_B_OPT, 0, &warn_B); ! add_prefix (&include_prefixes, concat (value, "include", ! NULL_PTR), ! NULL_PTR, ! PREFIX_PRIORITY_B_OPT, 0, NULL_PTR); n_switches++; } break; --- 3531,3593 ---- case 'B': { const char *value; + int len; + if (p[1] == 0 && i + 1 == argc) fatal ("argument to `-B' is missing"); if (p[1] == 0) value = argv[++i]; else value = p + 1; ! ! len = strlen (value); ! ! /* Catch the case where the user has forgotten to append a ! directory separator to the path. Note, they may be using ! -B to add an executable name prefix, eg "i386-elf-", in ! order to distinguish between multiple installations of ! GCC in the same directory. Hence we must check to see ! if appending a directory separator actually makes a ! valid directory name. */ ! if (! IS_DIR_SEPARATOR (value [len - 1]) ! && is_directory (value, "", 0)) ! { ! char *tmp = xmalloc (len + 2); ! strcpy (tmp, value); ! tmp[len] = DIR_SEPARATOR; ! tmp[++ len] = 0; ! value = tmp; ! } ! ! /* As a kludge, if the arg is "[foo/]stageN/", just ! add "[foo/]include" to the include prefix. */ ! if ((len == 7 ! || (len > 7 ! && (IS_DIR_SEPARATOR (value[len - 8])))) ! && strncmp (value + len - 7, "stage", 5) == 0 ! && ISDIGIT (value[len - 2]) ! && (IS_DIR_SEPARATOR (value[len - 1]))) ! { ! if (len == 7) ! add_prefix (&include_prefixes, "include", NULL, ! PREFIX_PRIORITY_B_OPT, 0, NULL); ! else ! { ! char * string = xmalloc (len + 1); ! ! strncpy (string, value, len - 7); ! strcpy (string + len - 7, "include"); ! add_prefix (&include_prefixes, string, NULL, ! PREFIX_PRIORITY_B_OPT, 0, NULL); ! } ! } ! ! add_prefix (&exec_prefixes, value, NULL, PREFIX_PRIORITY_B_OPT, 0, &warn_B); ! add_prefix (&startfile_prefixes, value, NULL, PREFIX_PRIORITY_B_OPT, 0, &warn_B); ! add_prefix (&include_prefixes, concat (value, "include", NULL), ! NULL, PREFIX_PRIORITY_B_OPT, 0, NULL); n_switches++; } break; *************** process_command (argc, argv) *** 3475,3481 **** case 'o': have_o = 1; ! #if defined(HAVE_EXECUTABLE_SUFFIX) if (! have_c) { int skip; --- 3655,3661 ---- case 'o': have_o = 1; ! #if defined(HAVE_TARGET_EXECUTABLE_SUFFIX) if (! have_c) { int skip; *************** process_command (argc, argv) *** 3495,3514 **** have_c = 1; break; } ! else if (skip = SWITCH_TAKES_ARG (argv[j][1])) j += skip - (argv[j][2] != 0); ! else if (skip = WORD_SWITCH_TAKES_ARG (argv[j] + 1)) j += skip; } j++; } } #endif ! #if defined(HAVE_EXECUTABLE_SUFFIX) || defined(HAVE_OBJECT_SUFFIX) if (p[1] == 0) ! argv[i + 1] = convert_filename (argv[i + 1], ! have_c); else ! argv[i] = convert_filename (argv[i], ! have_c); #endif goto normal_switch; --- 3675,3694 ---- have_c = 1; break; } ! else if ((skip = SWITCH_TAKES_ARG (argv[j][1]))) j += skip - (argv[j][2] != 0); ! else if ((skip = WORD_SWITCH_TAKES_ARG (argv[j] + 1))) j += skip; } j++; } } #endif ! #if defined(HAVE_TARGET_EXECUTABLE_SUFFIX) || defined(HAVE_TARGET_OBJECT_SUFFIX) if (p[1] == 0) ! argv[i + 1] = convert_filename (argv[i + 1], ! have_c, 0); else ! argv[i] = convert_filename (argv[i], ! have_c, 0); #endif goto normal_switch; *************** process_command (argc, argv) *** 3593,3599 **** PREFIX_PRIORITY_LAST, 1, warn_std_ptr); tooldir_prefix = concat (tooldir_base_prefix, spec_machine, ! dir_separator_str, NULL_PTR); /* If tooldir is relative, base it on exec_prefixes. A relative tooldir lets us move the installed tree as a unit. --- 3773,3779 ---- PREFIX_PRIORITY_LAST, 1, warn_std_ptr); tooldir_prefix = concat (tooldir_base_prefix, spec_machine, ! dir_separator_str, NULL); /* If tooldir is relative, base it on exec_prefixes. A relative tooldir lets us move the installed tree as a unit. *************** process_command (argc, argv) *** 3608,3636 **** { char *gcc_exec_tooldir_prefix = concat (gcc_exec_prefix, spec_machine, dir_separator_str, ! spec_version, dir_separator_str, tooldir_prefix, NULL_PTR); add_prefix (&exec_prefixes, concat (gcc_exec_tooldir_prefix, "bin", ! dir_separator_str, NULL_PTR), ! NULL_PTR, PREFIX_PRIORITY_LAST, 0, NULL_PTR); add_prefix (&startfile_prefixes, concat (gcc_exec_tooldir_prefix, "lib", ! dir_separator_str, NULL_PTR), ! NULL_PTR, PREFIX_PRIORITY_LAST, 0, NULL_PTR); } tooldir_prefix = concat (standard_exec_prefix, spec_machine, dir_separator_str, spec_version, ! dir_separator_str, tooldir_prefix, NULL_PTR); } add_prefix (&exec_prefixes, ! concat (tooldir_prefix, "bin", dir_separator_str, NULL_PTR), ! "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL_PTR); add_prefix (&startfile_prefixes, ! concat (tooldir_prefix, "lib", dir_separator_str, NULL_PTR), ! "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL_PTR); /* More prefixes are enabled in main, after we read the specs file and determine whether this is cross-compilation or not. */ --- 3788,3816 ---- { char *gcc_exec_tooldir_prefix = concat (gcc_exec_prefix, spec_machine, dir_separator_str, ! spec_version, dir_separator_str, tooldir_prefix, NULL); add_prefix (&exec_prefixes, concat (gcc_exec_tooldir_prefix, "bin", ! dir_separator_str, NULL), ! NULL, PREFIX_PRIORITY_LAST, 0, NULL); add_prefix (&startfile_prefixes, concat (gcc_exec_tooldir_prefix, "lib", ! dir_separator_str, NULL), ! NULL, PREFIX_PRIORITY_LAST, 0, NULL); } tooldir_prefix = concat (standard_exec_prefix, spec_machine, dir_separator_str, spec_version, ! dir_separator_str, tooldir_prefix, NULL); } add_prefix (&exec_prefixes, ! concat (tooldir_prefix, "bin", dir_separator_str, NULL), ! "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL); add_prefix (&startfile_prefixes, ! concat (tooldir_prefix, "lib", dir_separator_str, NULL), ! "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL); /* More prefixes are enabled in main, after we read the specs file and determine whether this is cross-compilation or not. */ *************** process_command (argc, argv) *** 3719,3724 **** --- 3899,3910 ---- infiles[n_infiles].language = "*"; infiles[n_infiles++].name = argv[++i]; } + else if (strcmp (argv[i], "-l") == 0) + { /* POSIX allows separation of -l and the lib arg; + canonicalize by concatenating -l with its arg */ + infiles[n_infiles].language = "*"; + infiles[n_infiles++].name = concat ("-l", argv[++i], NULL); + } else if (strncmp (argv[i], "-l", 2) == 0) { infiles[n_infiles].language = "*"; *************** process_command (argc, argv) *** 3735,3746 **** { /* -save-temps overrides -pipe, so that temp files are produced */ if (save_temps_flag) ! error ("Warning: -pipe ignored because -save-temps specified"); /* -time overrides -pipe because we can't get correct stats when multiple children are running at once. */ else if (report_times) ! error ("Warning: -pipe ignored because -time specified"); } else if (argv[i][0] == '-' && argv[i][1] != 0) { const char *p = &argv[i][1]; --- 3921,3934 ---- { /* -save-temps overrides -pipe, so that temp files are produced */ if (save_temps_flag) ! error ("warning: -pipe ignored because -save-temps specified"); /* -time overrides -pipe because we can't get correct stats when multiple children are running at once. */ else if (report_times) ! error ("warning: -pipe ignored because -time specified"); } + else if (strcmp (argv[i], "-###") == 0) + ; else if (argv[i][0] == '-' && argv[i][1] != 0) { const char *p = &argv[i][1]; *************** process_command (argc, argv) *** 3790,3804 **** /* On some systems, ld cannot handle some options without a space. So split the option from its argument. */ char *part1 = (char *) xmalloc (2); - char *tmp; part1[0] = c; part1[1] = '\0'; switches[n_switches].part1 = part1; switches[n_switches].args = (const char **) xmalloc (2 * sizeof (const char *)); ! switches[n_switches].args[0] = tmp = xmalloc (strlen (p)); ! strcpy (tmp, &p[1]); switches[n_switches].args[1] = 0; } else --- 3978,3990 ---- /* On some systems, ld cannot handle some options without a space. So split the option from its argument. */ char *part1 = (char *) xmalloc (2); part1[0] = c; part1[1] = '\0'; switches[n_switches].part1 = part1; switches[n_switches].args = (const char **) xmalloc (2 * sizeof (const char *)); ! switches[n_switches].args[0] = xstrdup (p+1); switches[n_switches].args[1] = 0; } else *************** process_command (argc, argv) *** 3822,3829 **** } else { ! #ifdef HAVE_OBJECT_SUFFIX ! argv[i] = convert_filename (argv[i], 0); #endif if (strcmp (argv[i], "-") != 0 && access (argv[i], F_OK) < 0) --- 4008,4015 ---- } else { ! #ifdef HAVE_TARGET_OBJECT_SUFFIX ! argv[i] = convert_filename (argv[i], 0, access (argv[i], F_OK)); #endif if (strcmp (argv[i], "-") != 0 && access (argv[i], F_OK) < 0) *************** process_command (argc, argv) *** 3840,3846 **** } if (n_infiles == last_language_n_infiles && spec_lang != 0) ! error ("Warning: `-x %s' after last input file has no effect", spec_lang); /* Ensure we only invoke each subprocess once. */ if (target_help_flag || print_help_list) --- 4026,4032 ---- } if (n_infiles == last_language_n_infiles && spec_lang != 0) ! error ("warning: `-x %s' after last input file has no effect", spec_lang); /* Ensure we only invoke each subprocess once. */ if (target_help_flag || print_help_list) *************** static int basename_length; *** 3950,3955 **** --- 4136,4143 ---- static int suffixed_basename_length; static const char *input_basename; static const char *input_suffix; + static struct stat input_stat; + static int input_stat_set; /* The compiler used to process the current input file. */ static struct compiler *input_file_compiler; *************** static int this_is_library_file; *** 3977,3983 **** static int input_from_pipe; /* Nonnull means substitute this for any suffix when outputting a switches ! arguments. */ static const char *suffix_subst; /* Process the spec SPEC and run the commands specified therein. --- 4165,4171 ---- static int input_from_pipe; /* Nonnull means substitute this for any suffix when outputting a switches ! arguments. */ static const char *suffix_subst; /* Process the spec SPEC and run the commands specified therein. *************** do_spec (spec) *** 3997,4003 **** input_from_pipe = 0; suffix_subst = NULL; ! value = do_spec_1 (spec, 0, NULL_PTR); /* Force out any unfinished command. If -pipe, this forces out the last command if it ended in `|'. */ --- 4185,4191 ---- input_from_pipe = 0; suffix_subst = NULL; ! value = do_spec_1 (spec, 0, NULL); /* Force out any unfinished command. If -pipe, this forces out the last command if it ended in `|'. */ *************** do_spec_1 (spec, inswitch, soft_matched_ *** 4033,4040 **** int inswitch; const char *soft_matched_part; { ! register const char *p = spec; ! register int c; int i; const char *string; int value; --- 4221,4228 ---- int inswitch; const char *soft_matched_part; { ! const char *p = spec; ! int c; int i; const char *string; int value; *************** do_spec_1 (spec, inswitch, soft_matched_ *** 4137,4143 **** switch (c = *p++) { case 0: ! fatal ("Invalid specification! Bug in cc."); case 'b': obstack_grow (&obstack, input_basename, basename_length); --- 4325,4331 ---- switch (c = *p++) { case 0: ! fatal ("invalid specification! Bug in cc"); case 'b': obstack_grow (&obstack, input_basename, basename_length); *************** do_spec_1 (spec, inswitch, soft_matched_ *** 4188,4215 **** strcat (buffer, machine_suffix); if (is_directory (buffer, multilib_dir, 1)) { ! do_spec_1 ("-L", 0, NULL_PTR); #ifdef SPACE_AFTER_L_OPTION ! do_spec_1 (" ", 0, NULL_PTR); #endif ! do_spec_1 (buffer, 1, NULL_PTR); ! do_spec_1 (multilib_dir, 1, NULL_PTR); /* Make this a separate argument. */ ! do_spec_1 (" ", 0, NULL_PTR); } } if (!pl->require_machine_suffix) { if (is_directory (pl->prefix, multilib_dir, 1)) { ! do_spec_1 ("-L", 0, NULL_PTR); #ifdef SPACE_AFTER_L_OPTION ! do_spec_1 (" ", 0, NULL_PTR); #endif ! do_spec_1 (pl->prefix, 1, NULL_PTR); ! do_spec_1 (multilib_dir, 1, NULL_PTR); /* Make this a separate argument. */ ! do_spec_1 (" ", 0, NULL_PTR); } } } --- 4376,4403 ---- strcat (buffer, machine_suffix); if (is_directory (buffer, multilib_dir, 1)) { ! do_spec_1 ("-L", 0, NULL); #ifdef SPACE_AFTER_L_OPTION ! do_spec_1 (" ", 0, NULL); #endif ! do_spec_1 (buffer, 1, NULL); ! do_spec_1 (multilib_dir, 1, NULL); /* Make this a separate argument. */ ! do_spec_1 (" ", 0, NULL); } } if (!pl->require_machine_suffix) { if (is_directory (pl->prefix, multilib_dir, 1)) { ! do_spec_1 ("-L", 0, NULL); #ifdef SPACE_AFTER_L_OPTION ! do_spec_1 (" ", 0, NULL); #endif ! do_spec_1 (pl->prefix, 1, NULL); ! do_spec_1 (multilib_dir, 1, NULL); /* Make this a separate argument. */ ! do_spec_1 (" ", 0, NULL); } } } *************** do_spec_1 (spec, inswitch, soft_matched_ *** 4217,4227 **** { if (is_directory (pl->prefix, machine_suffix, 1)) { ! do_spec_1 ("-L", 0, NULL_PTR); #ifdef SPACE_AFTER_L_OPTION ! do_spec_1 (" ", 0, NULL_PTR); #endif ! do_spec_1 (pl->prefix, 1, NULL_PTR); /* Remove slash from machine_suffix. */ if (strlen (machine_suffix) >= bufsize) bufsize = strlen (machine_suffix) * 2 + 1; --- 4405,4415 ---- { if (is_directory (pl->prefix, machine_suffix, 1)) { ! do_spec_1 ("-L", 0, NULL); #ifdef SPACE_AFTER_L_OPTION ! do_spec_1 (" ", 0, NULL); #endif ! do_spec_1 (pl->prefix, 1, NULL); /* Remove slash from machine_suffix. */ if (strlen (machine_suffix) >= bufsize) bufsize = strlen (machine_suffix) * 2 + 1; *************** do_spec_1 (spec, inswitch, soft_matched_ *** 4230,4247 **** idx = strlen (buffer); if (IS_DIR_SEPARATOR (buffer[idx - 1])) buffer[idx - 1] = 0; ! do_spec_1 (buffer, 1, NULL_PTR); /* Make this a separate argument. */ ! do_spec_1 (" ", 0, NULL_PTR); } } if (!pl->require_machine_suffix) { if (is_directory (pl->prefix, "", 1)) { ! do_spec_1 ("-L", 0, NULL_PTR); #ifdef SPACE_AFTER_L_OPTION ! do_spec_1 (" ", 0, NULL_PTR); #endif /* Remove slash from pl->prefix. */ if (strlen (pl->prefix) >= bufsize) --- 4418,4435 ---- idx = strlen (buffer); if (IS_DIR_SEPARATOR (buffer[idx - 1])) buffer[idx - 1] = 0; ! do_spec_1 (buffer, 1, NULL); /* Make this a separate argument. */ ! do_spec_1 (" ", 0, NULL); } } if (!pl->require_machine_suffix) { if (is_directory (pl->prefix, "", 1)) { ! do_spec_1 ("-L", 0, NULL); #ifdef SPACE_AFTER_L_OPTION ! do_spec_1 (" ", 0, NULL); #endif /* Remove slash from pl->prefix. */ if (strlen (pl->prefix) >= bufsize) *************** do_spec_1 (spec, inswitch, soft_matched_ *** 4251,4259 **** idx = strlen (buffer); if (IS_DIR_SEPARATOR (buffer[idx - 1])) buffer[idx - 1] = 0; ! do_spec_1 (buffer, 1, NULL_PTR); /* Make this a separate argument. */ ! do_spec_1 (" ", 0, NULL_PTR); } } } --- 4439,4447 ---- idx = strlen (buffer); if (IS_DIR_SEPARATOR (buffer[idx - 1])) buffer[idx - 1] = 0; ! do_spec_1 (buffer, 1, NULL); /* Make this a separate argument. */ ! do_spec_1 (" ", 0, NULL); } } } *************** do_spec_1 (spec, inswitch, soft_matched_ *** 4315,4326 **** case 'g': case 'u': case 'U': - if (save_temps_flag) - { - obstack_grow (&obstack, input_basename, basename_length); - delete_this_arg = 0; - } - else { struct temp_name *t; int suffix_length; --- 4503,4508 ---- *************** do_spec_1 (spec, inswitch, soft_matched_ *** 4337,4353 **** if (*p == '.' || ISALPHA ((unsigned char) *p)) abort (); if (suffix_length == 0) ! suffix = OBJECT_SUFFIX; else { saved_suffix = (char *) xmalloc (suffix_length ! + strlen (OBJECT_SUFFIX)); strncpy (saved_suffix, suffix, suffix_length); strcpy (saved_suffix + suffix_length, ! OBJECT_SUFFIX); } - suffix_length += strlen (OBJECT_SUFFIX); } /* See if we already have an association of %g/%u/%U and --- 4519,4583 ---- if (*p == '.' || ISALPHA ((unsigned char) *p)) abort (); if (suffix_length == 0) ! suffix = TARGET_OBJECT_SUFFIX; else { saved_suffix = (char *) xmalloc (suffix_length ! + strlen (TARGET_OBJECT_SUFFIX)); strncpy (saved_suffix, suffix, suffix_length); strcpy (saved_suffix + suffix_length, ! TARGET_OBJECT_SUFFIX); ! } ! suffix_length += strlen (TARGET_OBJECT_SUFFIX); ! } ! ! /* If the input_filename has the same suffix specified ! for the %g, %u, or %U, and -save-temps is specified, ! we could end up using that file as an intermediate ! thus clobbering the user's source file (.e.g., ! gcc -save-temps foo.s would clobber foo.s with the ! output of cpp0). So check for this condition and ! generate a temp file as the intermediate. */ ! ! if (save_temps_flag) ! { ! temp_filename_length = basename_length + suffix_length; ! temp_filename = alloca (temp_filename_length + 1); ! strncpy ((char *) temp_filename, input_basename, basename_length); ! strncpy ((char *) temp_filename + basename_length, suffix, ! suffix_length); ! *((char *) temp_filename + temp_filename_length) = '\0'; ! if (strcmp (temp_filename, input_filename) != 0) ! { ! struct stat st_temp; ! ! /* Note, set_input() resets input_stat_set to 0. */ ! if (input_stat_set == 0) ! { ! input_stat_set = stat (input_filename, &input_stat); ! if (input_stat_set >= 0) ! input_stat_set = 1; ! } ! ! /* If we have the stat for the input_filename ! and we can do the stat for the temp_filename ! then the they could still refer to the same ! file if st_dev/st_ino's are the same. */ ! ! if (input_stat_set != 1 ! || stat (temp_filename, &st_temp) < 0 ! || input_stat.st_dev != st_temp.st_dev ! || input_stat.st_ino != st_temp.st_ino) ! { ! temp_filename = save_string (temp_filename, ! temp_filename_length + 1); ! obstack_grow (&obstack, temp_filename, ! temp_filename_length); ! arg_going = 1; ! break; ! } } } /* See if we already have an association of %g/%u/%U and *************** do_spec_1 (spec, inswitch, soft_matched_ *** 4403,4422 **** if (gcc_exec_prefix) { ! do_spec_1 ("-iprefix", 1, NULL_PTR); /* Make this a separate argument. */ ! do_spec_1 (" ", 0, NULL_PTR); ! do_spec_1 (gcc_exec_prefix, 1, NULL_PTR); ! do_spec_1 (" ", 0, NULL_PTR); } for (; pl; pl = pl->next) { ! do_spec_1 ("-isystem", 1, NULL_PTR); /* Make this a separate argument. */ ! do_spec_1 (" ", 0, NULL_PTR); ! do_spec_1 (pl->prefix, 1, NULL_PTR); ! do_spec_1 (" ", 0, NULL_PTR); } } break; --- 4633,4652 ---- if (gcc_exec_prefix) { ! do_spec_1 ("-iprefix", 1, NULL); /* Make this a separate argument. */ ! do_spec_1 (" ", 0, NULL); ! do_spec_1 (gcc_exec_prefix, 1, NULL); ! do_spec_1 (" ", 0, NULL); } for (; pl; pl = pl->next) { ! do_spec_1 ("-isystem", 1, NULL); /* Make this a separate argument. */ ! do_spec_1 (" ", 0, NULL); ! do_spec_1 (pl->prefix, 1, NULL); ! do_spec_1 (" ", 0, NULL); } } break; *************** do_spec_1 (spec, inswitch, soft_matched_ *** 4433,4439 **** } case 'O': ! obstack_grow (&obstack, OBJECT_SUFFIX, strlen (OBJECT_SUFFIX)); arg_going = 1; break; --- 4663,4669 ---- } case 'O': ! obstack_grow (&obstack, TARGET_OBJECT_SUFFIX, strlen (TARGET_OBJECT_SUFFIX)); arg_going = 1; break; *************** do_spec_1 (spec, inswitch, soft_matched_ *** 4491,4499 **** case 'X': for (i = 0; i < n_linker_options; i++) { ! do_spec_1 (linker_options[i], 1, NULL_PTR); /* Make each accumulated option a separate argument. */ ! do_spec_1 (" ", 0, NULL_PTR); } break; --- 4721,4729 ---- case 'X': for (i = 0; i < n_linker_options; i++) { ! do_spec_1 (linker_options[i], 1, NULL); /* Make each accumulated option a separate argument. */ ! do_spec_1 (" ", 0, NULL); } break; *************** do_spec_1 (spec, inswitch, soft_matched_ *** 4501,4509 **** case 'Y': for (i = 0; i < n_assembler_options; i++) { ! do_spec_1 (assembler_options[i], 1, NULL_PTR); /* Make each accumulated option a separate argument. */ ! do_spec_1 (" ", 0, NULL_PTR); } break; --- 4731,4739 ---- case 'Y': for (i = 0; i < n_assembler_options; i++) { ! do_spec_1 (assembler_options[i], 1, NULL); /* Make each accumulated option a separate argument. */ ! do_spec_1 (" ", 0, NULL); } break; *************** do_spec_1 (spec, inswitch, soft_matched_ *** 4511,4519 **** case 'Z': for (i = 0; i < n_preprocessor_options; i++) { ! do_spec_1 (preprocessor_options[i], 1, NULL_PTR); /* Make each accumulated option a separate argument. */ ! do_spec_1 (" ", 0, NULL_PTR); } break; --- 4741,4749 ---- case 'Z': for (i = 0; i < n_preprocessor_options; i++) { ! do_spec_1 (preprocessor_options[i], 1, NULL); /* Make each accumulated option a separate argument. */ ! do_spec_1 (" ", 0, NULL); } break; *************** do_spec_1 (spec, inswitch, soft_matched_ *** 4521,4587 **** a certain constant string as a spec. */ case '1': ! value = do_spec_1 (cc1_spec, 0, NULL_PTR); if (value != 0) return value; break; case '2': ! value = do_spec_1 (cc1plus_spec, 0, NULL_PTR); if (value != 0) return value; break; case 'a': ! value = do_spec_1 (asm_spec, 0, NULL_PTR); if (value != 0) return value; break; case 'A': ! value = do_spec_1 (asm_final_spec, 0, NULL_PTR); ! if (value != 0) ! return value; ! break; ! ! case 'c': ! value = do_spec_1 (signed_char_spec, 0, NULL_PTR); if (value != 0) return value; break; case 'C': { ! const char* spec = (input_file_compiler->cpp_spec ? input_file_compiler->cpp_spec : cpp_spec); ! value = do_spec_1 (spec, 0, NULL_PTR); if (value != 0) return value; } break; case 'E': ! value = do_spec_1 (endfile_spec, 0, NULL_PTR); if (value != 0) return value; break; case 'l': ! value = do_spec_1 (link_spec, 0, NULL_PTR); if (value != 0) return value; break; case 'L': ! value = do_spec_1 (lib_spec, 0, NULL_PTR); if (value != 0) return value; break; case 'G': ! value = do_spec_1 (libgcc_spec, 0, NULL_PTR); if (value != 0) return value; break; --- 4751,4811 ---- a certain constant string as a spec. */ case '1': ! value = do_spec_1 (cc1_spec, 0, NULL); if (value != 0) return value; break; case '2': ! value = do_spec_1 (cc1plus_spec, 0, NULL); if (value != 0) return value; break; case 'a': ! value = do_spec_1 (asm_spec, 0, NULL); if (value != 0) return value; break; case 'A': ! value = do_spec_1 (asm_final_spec, 0, NULL); if (value != 0) return value; break; case 'C': { ! const char *const spec = (input_file_compiler->cpp_spec ? input_file_compiler->cpp_spec : cpp_spec); ! value = do_spec_1 (spec, 0, NULL); if (value != 0) return value; } break; case 'E': ! value = do_spec_1 (endfile_spec, 0, NULL); if (value != 0) return value; break; case 'l': ! value = do_spec_1 (link_spec, 0, NULL); if (value != 0) return value; break; case 'L': ! value = do_spec_1 (lib_spec, 0, NULL); if (value != 0) return value; break; case 'G': ! value = do_spec_1 (libgcc_spec, 0, NULL); if (value != 0) return value; break; *************** do_spec_1 (spec, inswitch, soft_matched_ *** 4627,4633 **** *x = 0; ! value = do_spec_1 (buf, 0, NULL_PTR); if (value != 0) return value; } --- 4851,4857 ---- *x = 0; ! value = do_spec_1 (buf, 0, NULL); if (value != 0) return value; } *************** do_spec_1 (spec, inswitch, soft_matched_ *** 4758,4771 **** *x = 0; ! value = do_spec_1 (buf, 0, NULL_PTR); if (value != 0) return value; } break; case 'S': ! value = do_spec_1 (startfile_spec, 0, NULL_PTR); if (value != 0) return value; break; --- 4982,4995 ---- *x = 0; ! value = do_spec_1 (buf, 0, NULL); if (value != 0) return value; } break; case 'S': ! value = do_spec_1 (startfile_spec, 0, NULL); if (value != 0) return value; break; *************** do_spec_1 (spec, inswitch, soft_matched_ *** 4796,4809 **** case '*': if (soft_matched_part) { ! do_spec_1 (soft_matched_part, 1, NULL_PTR); ! do_spec_1 (" ", 0, NULL_PTR); } else /* Catch the case where a spec string contains something like '%{foo:%*}'. ie there is no * in the pattern on the left hand side of the :. */ ! error ("Spec failure: '%%*' has not been initialised by pattern match"); break; /* Process a string found as the value of a spec given by name. --- 5020,5033 ---- case '*': if (soft_matched_part) { ! do_spec_1 (soft_matched_part, 1, NULL); ! do_spec_1 (" ", 0, NULL); } else /* Catch the case where a spec string contains something like '%{foo:%*}'. ie there is no * in the pattern on the left hand side of the :. */ ! error ("spec failure: '%%*' has not been initialized by pattern match"); break; /* Process a string found as the value of a spec given by name. *************** do_spec_1 (spec, inswitch, soft_matched_ *** 4812,4818 **** %[...] modifies -D options the way %P does; %(...) uses the spec unmodified. */ case '[': ! error ("Warning: use of obsolete %%[ operator in specs"); case '(': { const char *name = p; --- 5036,5042 ---- %[...] modifies -D options the way %P does; %(...) uses the spec unmodified. */ case '[': ! error ("warning: use of obsolete %%[ operator in specs"); case '(': { const char *name = p; *************** do_spec_1 (spec, inswitch, soft_matched_ *** 4840,4846 **** { if (c == '(') { ! value = do_spec_1 (name, 0, NULL_PTR); if (value != 0) return value; } --- 5064,5070 ---- { if (c == '(') { ! value = do_spec_1 (name, 0, NULL); if (value != 0) return value; } *************** do_spec_1 (spec, inswitch, soft_matched_ *** 4880,4886 **** } *x = 0; ! value = do_spec_1 (buf, 0, NULL_PTR); if (value != 0) return value; } --- 5104,5110 ---- } *x = 0; ! value = do_spec_1 (buf, 0, NULL); if (value != 0) return value; } *************** do_spec_1 (spec, inswitch, soft_matched_ *** 4951,4961 **** case '|': if (input_from_pipe) ! do_spec_1 ("-", 0, NULL_PTR); break; default: ! error ("Spec failure: Unrecognised spec option '%c'", c); break; } break; --- 5175,5185 ---- case '|': if (input_from_pipe) ! do_spec_1 ("-", 0, NULL); break; default: ! error ("spec failure: unrecognized spec option '%c'", c); break; } break; *************** do_spec_1 (spec, inswitch, soft_matched_ *** 4979,4985 **** static const char * handle_braces (p) ! register const char *p; { const char *filter, *body = NULL, *endbody = NULL; int pipe_p = 0; --- 5203,5209 ---- static const char * handle_braces (p) ! const char *p; { const char *filter, *body = NULL, *endbody = NULL; int pipe_p = 0; *************** next_member: *** 5051,5058 **** { if (*p != '}' && *p != '&') { ! register int count = 1; ! register const char *q = p; while (*q++ != ':') continue; --- 5275,5282 ---- { if (*p != '}' && *p != '&') { ! int count = 1; ! const char *q = p; while (*q++ != ':') continue; *************** next_member: *** 5065,5071 **** else if (*q == '}') count--; else if (*q == 0) ! abort (); q++; } endbody = q; --- 5289,5295 ---- else if (*q == '}') count--; else if (*q == 0) ! fatal ("mismatched braces in specs"); q++; } endbody = q; *************** next_member: *** 5084,5096 **** abort (); if (negate != found ! && do_spec_1 (save_string (body, endbody-body-1), 0, NULL_PTR) < 0) return 0; } else if (p[-1] == '*' && (p[0] == '}' || p[0] == '&')) { /* Substitute all matching switches as separate args. */ ! register int i; for (i = 0; i < n_switches; i++) if (!strncmp (switches[i].part1, filter, p - 1 - filter) --- 5308,5320 ---- abort (); if (negate != found ! && do_spec_1 (save_string (body, endbody-body-1), 0, NULL) < 0) return 0; } else if (p[-1] == '*' && (p[0] == '}' || p[0] == '&')) { /* Substitute all matching switches as separate args. */ ! int i; for (i = 0; i < n_switches; i++) if (!strncmp (switches[i].part1, filter, p - 1 - filter) *************** next_member: *** 5108,5114 **** else { /* Test for presence of the specified switch. */ ! register int i; int present = 0; /* If name specified ends in *, as in {x*:...}, --- 5332,5338 ---- else { /* Test for presence of the specified switch. */ ! int i; int present = 0; /* If name specified ends in *, as in {x*:...}, *************** next_member: *** 5206,5212 **** { /* Here if a %{|...} conditional fails: output a minus sign, which means "standard output" or "standard input". */ ! do_spec_1 ("-", 0, NULL_PTR); return endbody; } } --- 5430,5436 ---- { /* Here if a %{|...} conditional fails: output a minus sign, which means "standard output" or "standard input". */ ! do_spec_1 ("-", 0, NULL); return endbody; } } *************** next_member: *** 5237,5243 **** else if (true_once) { if (do_spec_1 (save_string (body, endbody - body - 1), ! 0, NULL_PTR) < 0) return 0; } --- 5461,5467 ---- else if (true_once) { if (do_spec_1 (save_string (body, endbody - body - 1), ! 0, NULL) < 0) return 0; } *************** give_switch (switchnum, omit_first_word, *** 5342,5349 **** if (!omit_first_word) { ! do_spec_1 ("-", 0, NULL_PTR); ! do_spec_1 (switches[switchnum].part1, 1, NULL_PTR); } if (switches[switchnum].args != 0) --- 5566,5573 ---- if (!omit_first_word) { ! do_spec_1 ("-", 0, NULL); ! do_spec_1 (switches[switchnum].part1, 1, NULL); } if (switches[switchnum].args != 0) *************** give_switch (switchnum, omit_first_word, *** 5354,5360 **** const char *arg = *p; if (include_blanks) ! do_spec_1 (" ", 0, NULL_PTR); if (suffix_subst) { unsigned length = strlen (arg); --- 5578,5584 ---- const char *arg = *p; if (include_blanks) ! do_spec_1 (" ", 0, NULL); if (suffix_subst) { unsigned length = strlen (arg); *************** give_switch (switchnum, omit_first_word, *** 5367,5383 **** dot = 1; break; } ! do_spec_1 (arg, 1, NULL_PTR); if (dot) ((char *)arg)[length] = '.'; ! do_spec_1 (suffix_subst, 1, NULL_PTR); } else ! do_spec_1 (arg, 1, NULL_PTR); } } ! do_spec_1 (" ", 0, NULL_PTR); switches[switchnum].validated = 1; } --- 5591,5607 ---- dot = 1; break; } ! do_spec_1 (arg, 1, NULL); if (dot) ((char *)arg)[length] = '.'; ! do_spec_1 (suffix_subst, 1, NULL); } else ! do_spec_1 (arg, 1, NULL); } } ! do_spec_1 (" ", 0, NULL); switches[switchnum].validated = 1; } *************** find_file (name) *** 5394,5405 **** /* Try multilib_dir if it is defined. */ if (multilib_dir != NULL) { ! char *try; ! ! try = (char *) alloca (strlen (multilib_dir) + strlen (name) + 2); ! strcpy (try, multilib_dir); ! strcat (try, dir_separator_str); ! strcat (try, name); newname = find_a_file (&startfile_prefixes, try, R_OK); --- 5618,5624 ---- /* Try multilib_dir if it is defined. */ if (multilib_dir != NULL) { ! const char *const try = ACONCAT ((multilib_dir, dir_separator_str, name, NULL)); newname = find_a_file (&startfile_prefixes, try, R_OK); *************** is_directory (path1, path2, linker) *** 5450,5460 **** if (linker && ((cp - path == 6 && strcmp (path, concat (dir_separator_str, "lib", ! dir_separator_str, ".", NULL_PTR)) == 0) || (cp - path == 10 && strcmp (path, concat (dir_separator_str, "usr", dir_separator_str, "lib", ! dir_separator_str, ".", NULL_PTR)) == 0))) return 0; return (stat (path, &st) >= 0 && S_ISDIR (st.st_mode)); --- 5669,5679 ---- if (linker && ((cp - path == 6 && strcmp (path, concat (dir_separator_str, "lib", ! dir_separator_str, ".", NULL)) == 0) || (cp - path == 10 && strcmp (path, concat (dir_separator_str, "usr", dir_separator_str, "lib", ! dir_separator_str, ".", NULL)) == 0))) return 0; return (stat (path, &st) >= 0 && S_ISDIR (st.st_mode)); *************** void *** 5467,5473 **** set_input (filename) const char *filename; { ! register const char *p; input_filename = filename; input_filename_length = strlen (input_filename); --- 5686,5692 ---- set_input (filename) const char *filename; { ! const char *p; input_filename = filename; input_filename_length = strlen (input_filename); *************** set_input (filename) *** 5496,5501 **** --- 5715,5725 ---- } else input_suffix = ""; + + /* If a spec for 'g', 'u', or 'U' is seen with -save-temps then + we will need to do a stat on the input_filename. The + INPUT_STAT_SET signals that the stat is needed. */ + input_stat_set = 0; } /* On fatal signals, delete all the temporary files. */ *************** main (argc, argv) *** 5535,5556 **** xmalloc_set_program_name (programname); #ifdef GCC_DRIVER_HOST_INITIALIZATION ! /* Perform host dependant initialization when needed. */ GCC_DRIVER_HOST_INITIALIZATION; #endif ! /* LC_CTYPE determines the character set used by the terminal so it has be set ! to output messages correctly. */ ! ! #ifdef HAVE_LC_MESSAGES ! setlocale (LC_CTYPE, ""); ! setlocale (LC_MESSAGES, ""); ! #else ! setlocale (LC_ALL, ""); ! #endif ! ! (void) bindtextdomain (PACKAGE, localedir); ! (void) textdomain (PACKAGE); if (signal (SIGINT, SIG_IGN) != SIG_IGN) signal (SIGINT, fatal_error); --- 5759,5769 ---- xmalloc_set_program_name (programname); #ifdef GCC_DRIVER_HOST_INITIALIZATION ! /* Perform host dependent initialization when needed. */ GCC_DRIVER_HOST_INITIALIZATION; #endif ! gcc_init_libintl (); if (signal (SIGINT, SIG_IGN) != SIG_IGN) signal (SIGINT, fatal_error); *************** main (argc, argv) *** 5647,5654 **** /* Read specs from a file if there is one. */ machine_suffix = concat (spec_machine, dir_separator_str, ! spec_version, dir_separator_str, NULL_PTR); ! just_machine_suffix = concat (spec_machine, dir_separator_str, NULL_PTR); specs_file = find_a_file (&startfile_prefixes, "specs", R_OK); /* Read the specs file unless it is a default one. */ --- 5860,5867 ---- /* Read specs from a file if there is one. */ machine_suffix = concat (spec_machine, dir_separator_str, ! spec_version, dir_separator_str, NULL); ! just_machine_suffix = concat (spec_machine, dir_separator_str, NULL); specs_file = find_a_file (&startfile_prefixes, "specs", R_OK); /* Read the specs file unless it is a default one. */ *************** main (argc, argv) *** 5675,5692 **** if (*md_exec_prefix) { add_prefix (&exec_prefixes, md_exec_prefix, "GCC", ! PREFIX_PRIORITY_LAST, 0, NULL_PTR); add_prefix (&startfile_prefixes, md_exec_prefix, "GCC", ! PREFIX_PRIORITY_LAST, 0, NULL_PTR); } if (*md_startfile_prefix) add_prefix (&startfile_prefixes, md_startfile_prefix, "GCC", ! PREFIX_PRIORITY_LAST, 0, NULL_PTR); if (*md_startfile_prefix_1) add_prefix (&startfile_prefixes, md_startfile_prefix_1, "GCC", ! PREFIX_PRIORITY_LAST, 0, NULL_PTR); /* If standard_startfile_prefix is relative, base it on standard_exec_prefix. This lets us move the installed tree --- 5888,5905 ---- if (*md_exec_prefix) { add_prefix (&exec_prefixes, md_exec_prefix, "GCC", ! PREFIX_PRIORITY_LAST, 0, NULL); add_prefix (&startfile_prefixes, md_exec_prefix, "GCC", ! PREFIX_PRIORITY_LAST, 0, NULL); } if (*md_startfile_prefix) add_prefix (&startfile_prefixes, md_startfile_prefix, "GCC", ! PREFIX_PRIORITY_LAST, 0, NULL); if (*md_startfile_prefix_1) add_prefix (&startfile_prefixes, md_startfile_prefix_1, "GCC", ! PREFIX_PRIORITY_LAST, 0, NULL); /* If standard_startfile_prefix is relative, base it on standard_exec_prefix. This lets us move the installed tree *************** main (argc, argv) *** 5694,5721 **** standard_startfile_prefix on that as well. */ if (IS_ABSOLUTE_PATHNAME (standard_startfile_prefix)) add_prefix (&startfile_prefixes, standard_startfile_prefix, "BINUTILS", ! PREFIX_PRIORITY_LAST, 0, NULL_PTR); else { if (gcc_exec_prefix) add_prefix (&startfile_prefixes, concat (gcc_exec_prefix, machine_suffix, ! standard_startfile_prefix, NULL_PTR), ! NULL_PTR, PREFIX_PRIORITY_LAST, 0, NULL_PTR); add_prefix (&startfile_prefixes, concat (standard_exec_prefix, machine_suffix, ! standard_startfile_prefix, NULL_PTR), ! NULL_PTR, PREFIX_PRIORITY_LAST, 0, NULL_PTR); } add_prefix (&startfile_prefixes, standard_startfile_prefix_1, ! "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL_PTR); add_prefix (&startfile_prefixes, standard_startfile_prefix_2, ! "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL_PTR); #if 0 /* Can cause surprises, and one can use -B./ instead. */ ! add_prefix (&startfile_prefixes, "./", NULL_PTR, ! PREFIX_PRIORITY_LAST, 1, NULL_PTR); #endif } else --- 5907,5934 ---- standard_startfile_prefix on that as well. */ if (IS_ABSOLUTE_PATHNAME (standard_startfile_prefix)) add_prefix (&startfile_prefixes, standard_startfile_prefix, "BINUTILS", ! PREFIX_PRIORITY_LAST, 0, NULL); else { if (gcc_exec_prefix) add_prefix (&startfile_prefixes, concat (gcc_exec_prefix, machine_suffix, ! standard_startfile_prefix, NULL), ! NULL, PREFIX_PRIORITY_LAST, 0, NULL); add_prefix (&startfile_prefixes, concat (standard_exec_prefix, machine_suffix, ! standard_startfile_prefix, NULL), ! NULL, PREFIX_PRIORITY_LAST, 0, NULL); } add_prefix (&startfile_prefixes, standard_startfile_prefix_1, ! "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL); add_prefix (&startfile_prefixes, standard_startfile_prefix_2, ! "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL); #if 0 /* Can cause surprises, and one can use -B./ instead. */ ! add_prefix (&startfile_prefixes, "./", NULL, ! PREFIX_PRIORITY_LAST, 1, NULL); #endif } else *************** main (argc, argv) *** 5724,5731 **** && gcc_exec_prefix) add_prefix (&startfile_prefixes, concat (gcc_exec_prefix, machine_suffix, ! standard_startfile_prefix, NULL_PTR), ! "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL_PTR); } /* Process any user specified specs in the order given on the command --- 5937,5944 ---- && gcc_exec_prefix) add_prefix (&startfile_prefixes, concat (gcc_exec_prefix, machine_suffix, ! standard_startfile_prefix, NULL), ! "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL); } /* Process any user specified specs in the order given on the command *************** main (argc, argv) *** 5738,5754 **** /* If we have a GCC_EXEC_PREFIX envvar, modify it for cpp's sake. */ if (gcc_exec_prefix) ! { ! char *temp = (char *) xmalloc (strlen (gcc_exec_prefix) ! + strlen (spec_version) ! + strlen (spec_machine) + 3); ! strcpy (temp, gcc_exec_prefix); ! strcat (temp, spec_machine); ! strcat (temp, dir_separator_str); ! strcat (temp, spec_version); ! strcat (temp, dir_separator_str); ! gcc_exec_prefix = temp; ! } /* Now we have the specs. Set the `valid' bits for switches that match anything in any spec. */ --- 5951,5958 ---- /* If we have a GCC_EXEC_PREFIX envvar, modify it for cpp's sake. */ if (gcc_exec_prefix) ! gcc_exec_prefix = concat (gcc_exec_prefix, spec_machine, dir_separator_str, ! spec_version, dir_separator_str, NULL); /* Now we have the specs. Set the `valid' bits for switches that match anything in any spec. */ *************** main (argc, argv) *** 5805,5816 **** if (target_help_flag) { ! /* Print if any target specific options.*/ /* We do not exit here. Instead we have created a fake input file called 'target-dummy' which needs to be compiled, and we pass this on to the various sub-processes, along with the --target-help ! switch. */ } if (print_help_list) --- 6009,6020 ---- if (target_help_flag) { ! /* Print if any target specific options. */ /* We do not exit here. Instead we have created a fake input file called 'target-dummy' which needs to be compiled, and we pass this on to the various sub-processes, along with the --target-help ! switch. */ } if (print_help_list) *************** main (argc, argv) *** 5827,5833 **** /* We do not exit here. Instead we have created a fake input file called 'help-dummy' which needs to be compiled, and we pass this ! on the the various sub-processes, along with the --help switch. */ } if (verbose_flag) --- 6031,6037 ---- /* We do not exit here. Instead we have created a fake input file called 'help-dummy' which needs to be compiled, and we pass this ! on the various sub-processes, along with the --help switch. */ } if (verbose_flag) *************** main (argc, argv) *** 5870,5876 **** } if (n_infiles == added_libraries) ! fatal ("No input files"); /* Make a place to record the compiler output file names that correspond to the input files. */ --- 6074,6080 ---- } if (n_infiles == added_libraries) ! fatal ("no input files"); /* Make a place to record the compiler output file names that correspond to the input files. */ *************** lookup_compiler (name, length, language) *** 6071,6077 **** /* An alias entry maps a suffix to a language. Search for the language; pass 0 for NAME and LENGTH to avoid infinite recursion if language not found. */ ! return lookup_compiler (NULL_PTR, 0, cp->spec + 1); } return 0; } --- 6275,6281 ---- /* An alias entry maps a suffix to a language. Search for the language; pass 0 for NAME and LENGTH to avoid infinite recursion if language not found. */ ! return lookup_compiler (NULL, 0, cp->spec + 1); } return 0; } *************** save_string (s, len) *** 6081,6087 **** const char *s; int len; { ! register char *result = xmalloc (len + 1); memcpy (result, s, len); result[len] = 0; --- 6285,6291 ---- const char *s; int len; { ! char *result = xmalloc (len + 1); memcpy (result, s, len); result[len] = 0; *************** pfatal_pexecute (errmsg_fmt, errmsg_arg) *** 6129,6135 **** void fancy_abort () { ! fatal ("Internal gcc abort."); } /* Output an error message and exit */ --- 6333,6339 ---- void fancy_abort () { ! fatal ("internal gcc abort"); } /* Output an error message and exit */ *************** fancy_abort () *** 6137,6156 **** void fatal VPARAMS ((const char *msgid, ...)) { ! #ifndef ANSI_PROTOTYPES ! const char *msgid; ! #endif ! va_list ap; ! ! VA_START (ap, msgid); ! ! #ifndef ANSI_PROTOTYPES ! msgid = va_arg (ap, const char *); ! #endif fprintf (stderr, "%s: ", programname); vfprintf (stderr, _(msgid), ap); ! va_end (ap); fprintf (stderr, "\n"); delete_temp_files (); exit (1); --- 6341,6352 ---- void fatal VPARAMS ((const char *msgid, ...)) { ! VA_OPEN (ap, msgid); ! VA_FIXEDARG (ap, const char *, msgid); fprintf (stderr, "%s: ", programname); vfprintf (stderr, _(msgid), ap); ! VA_CLOSE (ap); fprintf (stderr, "\n"); delete_temp_files (); exit (1); *************** fatal VPARAMS ((const char *msgid, ...)) *** 6159,6178 **** void error VPARAMS ((const char *msgid, ...)) { ! #ifndef ANSI_PROTOTYPES ! const char *msgid; ! #endif ! va_list ap; ! ! VA_START (ap, msgid); ! ! #ifndef ANSI_PROTOTYPES ! msgid = va_arg (ap, const char *); ! #endif fprintf (stderr, "%s: ", programname); vfprintf (stderr, _(msgid), ap); ! va_end (ap); fprintf (stderr, "\n"); } --- 6355,6366 ---- void error VPARAMS ((const char *msgid, ...)) { ! VA_OPEN (ap, msgid); ! VA_FIXEDARG (ap, const char *, msgid); fprintf (stderr, "%s: ", programname); vfprintf (stderr, _(msgid), ap); ! VA_CLOSE (ap); fprintf (stderr, "\n"); } *************** error VPARAMS ((const char *msgid, ...)) *** 6180,6213 **** static void notice VPARAMS ((const char *msgid, ...)) { ! #ifndef ANSI_PROTOTYPES ! const char *msgid; ! #endif ! va_list ap; ! ! VA_START (ap, msgid); ! ! #ifndef ANSI_PROTOTYPES ! msgid = va_arg (ap, const char *); ! #endif vfprintf (stderr, _(msgid), ap); ! va_end (ap); } static void validate_all_switches () { struct compiler *comp; ! register const char *p; ! register char c; struct spec_list *spec; for (comp = compilers; comp->spec; comp++) { p = comp->spec; while ((c = *p++)) ! if (c == '%' && *p == '{') /* We have a switch spec. */ validate_switches (p + 1); } --- 6368,6393 ---- static void notice VPARAMS ((const char *msgid, ...)) { ! VA_OPEN (ap, msgid); ! VA_FIXEDARG (ap, const char *, msgid); vfprintf (stderr, _(msgid), ap); ! VA_CLOSE (ap); } static void validate_all_switches () { struct compiler *comp; ! const char *p; ! char c; struct spec_list *spec; for (comp = compilers; comp->spec; comp++) { p = comp->spec; while ((c = *p++)) ! if (c == '%' && (*p == '{' || (*p == 'W' && *++p == '{'))) /* We have a switch spec. */ validate_switches (p + 1); } *************** validate_all_switches () *** 6217,6230 **** { p = *(spec->ptr_spec); while ((c = *p++)) ! if (c == '%' && *p == '{') /* We have a switch spec. */ validate_switches (p + 1); } p = link_command_spec; while ((c = *p++)) ! if (c == '%' && *p == '{') /* We have a switch spec. */ validate_switches (p + 1); } --- 6397,6410 ---- { p = *(spec->ptr_spec); while ((c = *p++)) ! if (c == '%' && (*p == '{' || (*p == 'W' && *++p == '{'))) /* We have a switch spec. */ validate_switches (p + 1); } p = link_command_spec; while ((c = *p++)) ! if (c == '%' && (*p == '{' || (*p == 'W' && *++p == '{'))) /* We have a switch spec. */ validate_switches (p + 1); } *************** static void *** 6236,6244 **** validate_switches (start) const char *start; { ! register const char *p = start; const char *filter; ! register int i; int suffix; if (*p == '|') --- 6416,6424 ---- validate_switches (start) const char *start; { ! const char *p = start; const char *filter; ! int i; int suffix; if (*p == '|') diff -Nrc3pad gcc-3.0.4/gcc/gcc.h gcc-3.1/gcc/gcc.h *** gcc-3.0.4/gcc/gcc.h Wed Nov 28 17:30:54 2001 --- gcc-3.1/gcc/gcc.h Wed Nov 28 17:34:54 2001 *************** *** 1,29 **** /* Header file for modules that link with gcc.c Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ ! #ifndef __GCC_H__ ! #define __GCC_H__ #include "version.h" ! /* These are exported by gcc.c. */ extern int do_spec PARAMS ((const char *)); extern void record_temp_file PARAMS ((const char *, int, int)); extern void fancy_abort PARAMS ((void)) ATTRIBUTE_NORETURN; --- 1,29 ---- /* Header file for modules that link with gcc.c Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ ! #ifndef GCC_GCC_H ! #define GCC_GCC_H #include "version.h" ! /* These are exported by gcc.c. */ extern int do_spec PARAMS ((const char *)); extern void record_temp_file PARAMS ((const char *, int, int)); extern void fancy_abort PARAMS ((void)) ATTRIBUTE_NORETURN; *************** extern void error PARAMS ((const char *, *** 35,55 **** extern void pfatal_with_name PARAMS ((const char *)) ATTRIBUTE_NORETURN; extern void set_input PARAMS ((const char *)); ! /* Spec files linked with gcc.c must provide definitions for these. */ ! /* Called before processing to change/add/remove arguments. */ extern void lang_specific_driver PARAMS ((int *, const char *const **, int *)); ! /* Called before linking. Returns 0 on success and -1 on failure. */ extern int lang_specific_pre_link PARAMS ((void)); extern int n_infiles; ! /* Number of extra output files that lang_specific_pre_link may generate. */ extern int lang_specific_extra_outfiles; /* A vector of corresponding output files is made up later. */ extern const char **outfiles; ! #endif /* ! __GCC_H__ */ --- 35,55 ---- extern void pfatal_with_name PARAMS ((const char *)) ATTRIBUTE_NORETURN; extern void set_input PARAMS ((const char *)); ! /* Spec files linked with gcc.c must provide definitions for these. */ ! /* Called before processing to change/add/remove arguments. */ extern void lang_specific_driver PARAMS ((int *, const char *const **, int *)); ! /* Called before linking. Returns 0 on success and -1 on failure. */ extern int lang_specific_pre_link PARAMS ((void)); extern int n_infiles; ! /* Number of extra output files that lang_specific_pre_link may generate. */ extern int lang_specific_extra_outfiles; /* A vector of corresponding output files is made up later. */ extern const char **outfiles; ! #endif /* ! GCC_GCC_H */ diff -Nrc3pad gcc-3.0.4/gcc/gcc.hlp gcc-3.1/gcc/gcc.hlp *** gcc-3.0.4/gcc/gcc.hlp Wed Dec 16 20:56:01 1998 --- gcc-3.1/gcc/gcc.hlp Wed Aug 22 14:35:15 2001 *************** *** 354,361 **** When this qualifier is present, warnings about usage that should be avoided are given by the compiler. For more information, see "Using ! and Porting GNU CC", in the section on command line options, under ! "-Wall". Warnings are also generated by the preprocessor when this qualifier is given. --- 354,361 ---- When this qualifier is present, warnings about usage that should be avoided are given by the compiler. For more information, see "Using ! and Porting the GNU Compiler Collection (GCC)", in the section on ! command line options, under "-Wall". Warnings are also generated by the preprocessor when this qualifier is given. *************** *** 364,371 **** There are several known incompatibilities between GNU-C and VAX-C. Some common ones will be briefly described here. A complete ! description can be found in "Using and Porting GNU CC" in the chapter ! entitled "Using GNU CC on VMS". GNU-C provides case hacking as a means of giving case sensitivity to symbol names. The case hack is a hexadecimal number appended to --- 364,371 ---- There are several known incompatibilities between GNU-C and VAX-C. Some common ones will be briefly described here. A complete ! description can be found in "Using and Porting the GNU Compiler ! Collection (GCC)" in the chapter entitled "Using GCC on VMS". GNU-C provides case hacking as a means of giving case sensitivity to symbol names. The case hack is a hexadecimal number appended to diff -Nrc3pad gcc-3.0.4/gcc/gccbug.in gcc-3.1/gcc/gccbug.in *** gcc-3.0.4/gcc/gccbug.in Tue Jun 5 18:55:14 2001 --- gcc-3.1/gcc/gccbug.in Thu Jan 31 19:36:23 2002 *************** *** 1,6 **** #!/bin/sh # Submit a problem report to a GNATS site. ! # Copyright (C) 1993, 2000, 2001 Free Software Foundation, Inc. # Contributed by Brendan Kehoe (brendan@cygnus.com), based on a # version written by Heinz G. Seidl (hgs@cygnus.com). # --- 1,6 ---- #!/bin/sh # Submit a problem report to a GNATS site. ! # Copyright (C) 1993, 2000, 2001, 2002 Free Software Foundation, Inc. # Contributed by Brendan Kehoe (brendan@cygnus.com), based on a # version written by Heinz G. Seidl (hgs@cygnus.com). # *************** *** 18,24 **** # # You should have received a copy of the GNU General Public License # along with GNU GNATS; see the file COPYING. If not, write to ! # the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. # The version of this send-pr. VERSION=3.113 --- 18,25 ---- # # You should have received a copy of the GNU General Public License # along with GNU GNATS; see the file COPYING. If not, write to ! # the Free Software Foundation, 59 Temple Place - Suite 330, ! # Boston, MA 02111-1307, USA. # The version of this send-pr. VERSION=3.113 *************** while [ $# -gt 0 ]; do *** 182,188 **** -l | -CL | --lisp) FORMAT=lisp ;; --request-id) REQUEST_ID=true ;; -h | --help) echo "$USAGE"; $REMOVE_TEMP; exit 0 ;; ! -V | --version) echo "$VERSION"; $REMOVE_TEMP; exit 0 ;; -*) echo "$USAGE" ; $REMOVE_TEMP; exit 1 ;; *) echo "$USAGE" ; $REMOVE_TEMP; exit 1 esac --- 183,196 ---- -l | -CL | --lisp) FORMAT=lisp ;; --request-id) REQUEST_ID=true ;; -h | --help) echo "$USAGE"; $REMOVE_TEMP; exit 0 ;; ! -V | --version) cat <. ! 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. */ ! #ifndef GCOV_IO_H ! #define GCOV_IO_H #include #include static int __fetch_long PARAMS ((long *, char *, size_t)) ATTRIBUTE_UNUSED; - static int __store_long PARAMS ((long, char *, size_t)) ATTRIBUTE_UNUSED; static int __read_long PARAMS ((long *, FILE *, size_t)) ATTRIBUTE_UNUSED; static int __write_long PARAMS ((long, FILE *, size_t)) ATTRIBUTE_UNUSED; ! /* These routines only work for signed values. */ /* Store a portable representation of VALUE in DEST using BYTES*8-1 bits. Return a non-zero value if VALUE requires more than BYTES*8-1 bits ! to store. */ static int ! __store_long (value, dest, bytes) ! long value; char *dest; size_t bytes; { --- 2,46 ---- Copyright (C) 1996, 1997, 1998, 2000 Free Software Foundation, Inc. Contributed by Bob Manson . ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ ! #ifndef GCC_GCOV_IO_H ! #define GCC_GCOV_IO_H #include #include static int __fetch_long PARAMS ((long *, char *, size_t)) ATTRIBUTE_UNUSED; static int __read_long PARAMS ((long *, FILE *, size_t)) ATTRIBUTE_UNUSED; static int __write_long PARAMS ((long, FILE *, size_t)) ATTRIBUTE_UNUSED; + static int __fetch_gcov_type PARAMS ((gcov_type *, char *, size_t)) ATTRIBUTE_UNUSED; + static int __store_gcov_type PARAMS ((gcov_type, char *, size_t)) ATTRIBUTE_UNUSED; + static int __read_gcov_type PARAMS ((gcov_type *, FILE *, size_t)) ATTRIBUTE_UNUSED; + static int __write_gcov_type PARAMS ((gcov_type, FILE *, size_t)) ATTRIBUTE_UNUSED; ! /* These routines only work for signed values. */ /* Store a portable representation of VALUE in DEST using BYTES*8-1 bits. Return a non-zero value if VALUE requires more than BYTES*8-1 bits ! to store. */ static int ! __store_gcov_type (value, dest, bytes) ! gcov_type value; char *dest; size_t bytes; { *************** __store_long (value, dest, bytes) *** 46,52 **** if (value < 0) { ! long oldvalue = value; value = -value; if (oldvalue != -value) return 1; --- 49,55 ---- if (value < 0) { ! gcov_type oldvalue = value; value = -value; if (oldvalue != -value) return 1; *************** __store_long (value, dest, bytes) *** 68,74 **** /* Retrieve a quantity containing BYTES*8-1 bits from SOURCE and store the result in DEST. Returns a non-zero value if the value in SOURCE ! will not fit in DEST. */ static int __fetch_long (dest, source, bytes) --- 71,100 ---- /* Retrieve a quantity containing BYTES*8-1 bits from SOURCE and store the result in DEST. Returns a non-zero value if the value in SOURCE ! will not fit in DEST. */ ! ! static int ! __fetch_gcov_type (dest, source, bytes) ! gcov_type *dest; ! char *source; ! size_t bytes; ! { ! gcov_type value = 0; ! int i; ! ! for (i = bytes - 1; (size_t) i > (sizeof (*dest) - 1); i--) ! if (source[i] & ((size_t) i == (bytes - 1) ? 127 : 255 )) ! return 1; ! ! for (; i >= 0; i--) ! value = value * 256 + (source[i] & ((size_t)i == (bytes - 1) ? 127 : 255)); ! ! if ((source[bytes - 1] & 128) && (value > 0)) ! value = - value; ! ! *dest = value; ! return 0; ! } static int __fetch_long (dest, source, bytes) *************** __fetch_long (dest, source, bytes) *** 100,106 **** Note that VALUE may not actually be large enough to hold BYTES*8 bits, but BYTES characters will be written anyway. ! BYTES may be a maximum of 10. */ static int __write_long (value, file, bytes) --- 126,146 ---- Note that VALUE may not actually be large enough to hold BYTES*8 bits, but BYTES characters will be written anyway. ! BYTES may be a maximum of 10. */ ! ! static int ! __write_gcov_type (value, file, bytes) ! gcov_type value; ! FILE *file; ! size_t bytes; ! { ! char c[10]; ! ! if (bytes > 10 || __store_gcov_type (value, c, bytes)) ! return 1; ! else ! return fwrite(c, 1, bytes, file) != bytes; ! } static int __write_long (value, file, bytes) *************** __write_long (value, file, bytes) *** 110,116 **** { char c[10]; ! if (bytes > 10 || __store_long (value, c, bytes)) return 1; else return fwrite(c, 1, bytes, file) != bytes; --- 150,156 ---- { char c[10]; ! if (bytes > 10 || __store_gcov_type ((gcov_type)value, c, bytes)) return 1; else return fwrite(c, 1, bytes, file) != bytes; *************** __write_long (value, file, bytes) *** 123,129 **** Note that DEST may not be large enough to hold all of the requested data, but the function will read BYTES characters anyway. ! BYTES may be a maximum of 10. */ static int __read_long (dest, file, bytes) --- 163,183 ---- Note that DEST may not be large enough to hold all of the requested data, but the function will read BYTES characters anyway. ! BYTES may be a maximum of 10. */ ! ! static int ! __read_gcov_type (dest, file, bytes) ! gcov_type *dest; ! FILE *file; ! size_t bytes; ! { ! char c[10]; ! ! if (bytes > 10 || fread(c, 1, bytes, file) != bytes) ! return 1; ! else ! return __fetch_gcov_type (dest, c, bytes); ! } static int __read_long (dest, file, bytes) *************** __read_long (dest, file, bytes) *** 139,142 **** return __fetch_long (dest, c, bytes); } ! #endif --- 193,196 ---- return __fetch_long (dest, c, bytes); } ! #endif /* ! GCC_GCOV_IO_H */ diff -Nrc3pad gcc-3.0.4/gcc/gcov.c gcc-3.1/gcc/gcov.c *** gcc-3.0.4/gcc/gcov.c Sun Dec 17 14:35:05 2000 --- gcc-3.1/gcc/gcov.c Sat Jan 5 22:11:20 2002 *************** *** 1,7 **** /* Gcov.c: prepend line execution counts and branch probabilities to a source file. Copyright (C) 1990, 1991, 1992, 1993, 1994, 1996, 1997, 1998, ! 1999, 2000 Free Software Foundation, Inc. Contributed by James E. Wilson of Cygnus Support. Mangled by Bob Manson of Cygnus Support. --- 1,7 ---- /* Gcov.c: prepend line execution counts and branch probabilities to a source file. Copyright (C) 1990, 1991, 1992, 1993, 1994, 1996, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by James E. Wilson of Cygnus Support. Mangled by Bob Manson of Cygnus Support. *************** Boston, MA 02111-1307, USA. */ *** 46,53 **** --- 46,57 ---- #include "config.h" #include "system.h" #include "intl.h" + #include "version.h" #undef abort + #include + + typedef HOST_WIDEST_INT gcov_type; #include "gcov-io.h" /* The .bb file format consists of several lists of 4-byte integers *************** Boston, MA 02111-1307, USA. */ *** 78,85 **** /* The functions in this file for creating and solution program flow graphs are very similar to functions in the gcc source file profile.c. */ - char gcov_version_string[] = "GNU gcov version 1.5\n"; - /* This is the size of the buffer used to read in source file lines. */ #define STRING_SIZE 200 --- 82,87 ---- *************** struct sourcefile *sources; *** 104,110 **** struct adj_list { int source; int target; ! int arc_count; unsigned int count_valid : 1; unsigned int on_tree : 1; unsigned int fake : 1; --- 106,112 ---- struct adj_list { int source; int target; ! gcov_type arc_count; unsigned int count_valid : 1; unsigned int on_tree : 1; unsigned int fake : 1; *************** struct adj_list { *** 123,131 **** struct bb_info { struct adj_list *succ; struct adj_list *pred; ! int succ_count; ! int pred_count; ! int exec_count; unsigned int count_valid : 1; unsigned int on_tree : 1; #if 0 --- 125,133 ---- struct bb_info { struct adj_list *succ; struct adj_list *pred; ! gcov_type succ_count; ! gcov_type pred_count; ! gcov_type exec_count; unsigned int count_valid : 1; unsigned int on_tree : 1; #if 0 *************** struct bb_info { *** 139,146 **** struct arcdata { ! int hits; ! int total; int call_insn; struct arcdata *next; }; --- 141,148 ---- struct arcdata { ! gcov_type hits; ! gcov_type total; int call_insn; struct arcdata *next; }; *************** static char *object_directory = 0; *** 217,223 **** /* Output the number of times a branch was taken as opposed to the percentage of times it was taken. Turned on by the -c option */ ! static int output_branch_counts = 0; /* Forward declarations. */ --- 219,225 ---- /* Output the number of times a branch was taken as opposed to the percentage of times it was taken. Turned on by the -c option */ ! static int output_branch_counts = 0; /* Forward declarations. */ *************** static void open_files PARAMS ((void)); *** 226,232 **** static void read_files PARAMS ((void)); static void scan_for_source_files PARAMS ((void)); static void output_data PARAMS ((void)); ! static void print_usage PARAMS ((void)) ATTRIBUTE_NORETURN; static void init_arc PARAMS ((struct adj_list *, int, int, struct bb_info *)); static struct adj_list *reverse_arcs PARAMS ((struct adj_list *)); static void create_program_flow_graph PARAMS ((struct bb_info_list *)); --- 228,235 ---- static void read_files PARAMS ((void)); static void scan_for_source_files PARAMS ((void)); static void output_data PARAMS ((void)); ! static void print_usage PARAMS ((int)) ATTRIBUTE_NORETURN; ! static void print_version PARAMS ((void)) ATTRIBUTE_NORETURN; static void init_arc PARAMS ((struct adj_list *, int, int, struct bb_info *)); static struct adj_list *reverse_arcs PARAMS ((struct adj_list *)); static void create_program_flow_graph PARAMS ((struct bb_info_list *)); *************** main (argc, argv) *** 242,259 **** int argc; char **argv; { ! /* LC_CTYPE determines the character set used by the terminal so it has be set ! to output messages correctly. */ ! ! #ifdef HAVE_LC_MESSAGES ! setlocale (LC_CTYPE, ""); ! setlocale (LC_MESSAGES, ""); ! #else ! setlocale (LC_ALL, ""); ! #endif ! ! (void) bindtextdomain (PACKAGE, localedir); ! (void) textdomain (PACKAGE); process_args (argc, argv); --- 245,251 ---- int argc; char **argv; { ! gcc_init_libintl (); process_args (argc, argv); *************** static void fnotice PARAMS ((FILE *, con *** 272,292 **** static void fnotice VPARAMS ((FILE *file, const char *msgid, ...)) { ! #ifndef ANSI_PROTOTYPES ! FILE *file; ! const char *msgid; ! #endif ! va_list ap; ! ! VA_START (ap, msgid); ! ! #ifndef ANSI_PROTOTYPES ! file = va_arg (ap, FILE *); ! msgid = va_arg (ap, const char *); ! #endif vfprintf (file, _(msgid), ap); ! va_end (ap); } /* More 'friendly' abort that prints the line and file. --- 264,275 ---- static void fnotice VPARAMS ((FILE *file, const char *msgid, ...)) { ! VA_OPEN (ap, msgid); ! VA_FIXEDARG (ap, FILE *, file); ! VA_FIXEDARG (ap, const char *, msgid); vfprintf (file, _(msgid), ap); ! VA_CLOSE (ap); } /* More 'friendly' abort that prints the line and file. *************** fancy_abort () *** 300,314 **** exit (FATAL_EXIT_CODE); } ! /* Print a usage message and exit. */ static void ! print_usage () { ! fnotice (stderr, "gcov [-b] [-v] [-n] [-l] [-f] [-o OBJDIR] file\n"); ! exit (FATAL_EXIT_CODE); } /* Parse the command line. */ static void --- 283,339 ---- exit (FATAL_EXIT_CODE); } ! /* Print a usage message and exit. If ERROR_P is nonzero, this is an error, ! otherwise the output of --help. */ static void ! print_usage (error_p) ! int error_p; { ! FILE *file = error_p ? stderr : stdout; ! int status = error_p ? FATAL_EXIT_CODE : SUCCESS_EXIT_CODE; ! fnotice (file, "Usage: gcov [OPTION]... SOURCEFILE\n\n"); ! fnotice (file, "Print code coverage information.\n\n"); ! fnotice (file, " -h, --help Print this help, then exit\n"); ! fnotice (file, " -v, --version Print version number, then exit\n"); ! fnotice (file, " -b, --branch-probabilities Include branch probabilities in output\n"); ! fnotice (file, " -c, --branch-counts Given counts of branches taken\n\ ! rather than percentages\n"); ! fnotice (file, " -n, --no-output Do not create an output file\n"); ! fnotice (file, " -l, --long-file-names Use long output file names for included\n\ ! source files\n"); ! fnotice (file, " -f, --function-summaries Output summaries for each function\n"); ! fnotice (file, " -o, --object-directory OBJDIR Search for object files in OBJDIR\n"); ! fnotice (file, "\nFor bug reporting instructions, please see:\n%s.\n", ! GCCBUGURL); ! exit (status); ! } ! ! /* Print version information and exit. */ ! ! static void ! print_version () ! { ! fnotice (stdout, "gcov (GCC) %s\n", version_string); ! fnotice (stdout, "Copyright (C) 2001 Free Software Foundation, Inc.\n"); ! fnotice (stdout, ! "This is free software; see the source for copying conditions. There is NO\n\ ! warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"); ! exit (SUCCESS_EXIT_CODE); } + static const struct option options[] = + { + { "help", no_argument, NULL, 'h' }, + { "version", no_argument, NULL, 'v' }, + { "branch-probabilities", no_argument, NULL, 'b' }, + { "branch-counts", no_argument, NULL, 'c' }, + { "no-output", no_argument, NULL, 'n' }, + { "long-file-names", no_argument, NULL, 'l' }, + { "function-summaries", no_argument, NULL, 'f' }, + { "object-directory", required_argument, NULL, 'o' } + }; + /* Parse the command line. */ static void *************** process_args (argc, argv) *** 316,352 **** int argc; char **argv; { ! int i; ! for (i = 1; i < argc; i++) { ! if (argv[i][0] == '-') { ! if (argv[i][1] == 'b') ! output_branch_probs = 1; ! else if (argv[i][1] == 'c') ! output_branch_counts = 1; ! else if (argv[i][1] == 'v') ! fputs (gcov_version_string, stderr); ! else if (argv[i][1] == 'n') ! output_gcov_file = 0; ! else if (argv[i][1] == 'l') ! output_long_names = 1; ! else if (argv[i][1] == 'f') ! output_function_summary = 1; ! else if (argv[i][1] == 'o' && argv[i][2] == '\0') ! object_directory = argv[++i]; ! else ! print_usage (); } - else if (! input_file_name) - input_file_name = argv[i]; - else - print_usage (); } ! if (! input_file_name) ! print_usage (); } --- 341,386 ---- int argc; char **argv; { ! int opt; ! while ((opt = getopt_long (argc, argv, "hvbclnfo:", options, NULL)) != -1) { ! switch (opt) { ! case 'h': ! print_usage (false); ! /* print_usage will exit. */ ! case 'v': ! print_version (); ! /* print_version will exit. */ ! case 'b': ! output_branch_probs = 1; ! break; ! case 'c': ! output_branch_counts = 1; ! break; ! case 'n': ! output_gcov_file = 0; ! break; ! case 'l': ! output_long_names = 1; ! break; ! case 'f': ! output_function_summary = 1; ! break; ! case 'o': ! object_directory = optarg; ! break; ! default: ! print_usage (true); ! /* print_usage will exit. */ } } ! if (optind != argc - 1) ! print_usage (true); ! ! input_file_name = argv[optind]; } *************** open_files () *** 437,443 **** fnotice (stderr, "Could not open data file %s.\n", da_file_name); fnotice (stderr, "Assuming that all execution counts are zero.\n"); } ! bbg_file = fopen (bbg_file_name, "rb"); if (bbg_file == NULL) { --- 471,477 ---- fnotice (stderr, "Could not open data file %s.\n", da_file_name); fnotice (stderr, "Assuming that all execution counts are zero.\n"); } ! bbg_file = fopen (bbg_file_name, "rb"); if (bbg_file == NULL) { *************** init_arc (arcptr, source, target, bb_gra *** 485,491 **** } ! /* Reverse the arcs on a arc list. */ static struct adj_list * reverse_arcs (arcptr) --- 519,525 ---- } ! /* Reverse the arcs on an arc list. */ static struct adj_list * reverse_arcs (arcptr) *************** create_program_flow_graph (bptr) *** 579,587 **** for (arcptr = bb_graph[i].succ; arcptr; arcptr = arcptr->succ_next) if (! arcptr->on_tree) { ! long tmp_count = 0; ! if (da_file && __read_long (&tmp_count, da_file, 8)) ! abort(); arcptr->arc_count = tmp_count; arcptr->count_valid = 1; --- 613,621 ---- for (arcptr = bb_graph[i].succ; arcptr; arcptr = arcptr->succ_next) if (! arcptr->on_tree) { ! gcov_type tmp_count = 0; ! if (da_file && __read_gcov_type (&tmp_count, da_file, 8)) ! abort (); arcptr->arc_count = tmp_count; arcptr->count_valid = 1; *************** create_program_flow_graph (bptr) *** 589,600 **** bb_graph[arcptr->target].pred_count--; } } ! static void solve_program_flow_graph (bptr) struct bb_info_list *bptr; { ! int passes, changes, total; int i; struct adj_list *arcptr; struct bb_info *bb_graph; --- 623,635 ---- bb_graph[arcptr->target].pred_count--; } } ! static void solve_program_flow_graph (bptr) struct bb_info_list *bptr; { ! int passes, changes; ! gcov_type total; int i; struct adj_list *arcptr; struct bb_info *bb_graph; *************** solve_program_flow_graph (bptr) *** 705,711 **** } } } ! /* If the graph has been correctly solved, every block will have a succ and pred count of zero. */ for (i = 0; i < num_blocks; i++) --- 740,746 ---- } } } ! /* If the graph has been correctly solved, every block will have a succ and pred count of zero. */ for (i = 0; i < num_blocks; i++) *************** read_files () *** 725,731 **** /* Read and ignore the first word of the .da file, which is the count of how many numbers follow. */ if (da_file && __read_long (&total, da_file, 8)) ! abort(); while (! feof (bbg_file)) { --- 760,766 ---- /* Read and ignore the first word of the .da file, which is the count of how many numbers follow. */ if (da_file && __read_long (&total, da_file, 8)) ! abort (); while (! feof (bbg_file)) { *************** read_files () *** 770,776 **** bb_data = (char *) xmalloc ((unsigned) buf.st_size); fread (bb_data, sizeof (char), buf.st_size, bb_file); ! fclose (bb_file); if (da_file) fclose (da_file); --- 805,811 ---- bb_data = (char *) xmalloc ((unsigned) buf.st_size); fread (bb_data, sizeof (char), buf.st_size, bb_file); ! fclose (bb_file); if (da_file) fclose (da_file); *************** scan_for_source_files () *** 786,792 **** { struct sourcefile *s_ptr = NULL; char *ptr; ! int count; long line_num; /* Search the bb_data to find: --- 821,827 ---- { struct sourcefile *s_ptr = NULL; char *ptr; ! long count; long line_num; /* Search the bb_data to find: *************** scan_for_source_files () *** 849,856 **** } else if (line_num < 0) { ! /* Don't know what this is, but it's garbage. */ ! abort(); } } } --- 884,891 ---- } else if (line_num < 0) { ! /* Don't know what this is, but it's garbage. */ ! abort (); } } } *************** calculate_branch_probs (current_graph, b *** 876,882 **** struct arcdata **branch_probs; int last_line_num; { ! int total; struct adj_list *arcptr; struct arcdata *end_ptr, *a_ptr; --- 911,917 ---- struct arcdata **branch_probs; int last_line_num; { ! gcov_type total; struct adj_list *arcptr; struct arcdata *end_ptr, *a_ptr; *************** calculate_branch_probs (current_graph, b *** 888,894 **** if (arcptr->fall_through) continue; ! a_ptr = (struct arcdata *) xmalloc (sizeof (struct arcdata)); a_ptr->total = total; if (total == 0) --- 923,929 ---- if (arcptr->fall_through) continue; ! a_ptr = (struct arcdata *) xmalloc (sizeof (struct arcdata)); a_ptr->total = total; if (total == 0) *************** output_data () *** 975,981 **** int this_file; /* An array indexed by line number which indicates how many times that line was executed. */ ! long *line_counts; /* An array indexed by line number which indicates whether the line was present in the bb file (i.e. whether it had code associate with it). Lines never executed are those which both exist, and have zero execution --- 1010,1016 ---- int this_file; /* An array indexed by line number which indicates how many times that line was executed. */ ! gcov_type *line_counts; /* An array indexed by line number which indicates whether the line was present in the bb file (i.e. whether it had code associate with it). Lines never executed are those which both exist, and have zero execution *************** output_data () *** 988,994 **** char *source_file_name; FILE *source_file; struct bb_info_list *current_graph; ! int count; char *cptr; long block_num; long line_num; --- 1023,1029 ---- char *source_file_name; FILE *source_file; struct bb_info_list *current_graph; ! long count; char *cptr; long block_num; long line_num; *************** output_data () *** 1016,1027 **** { /* If this is a relative file name, and an object directory has been specified, then make it relative to the object directory name. */ ! if (! (*s_ptr->name == '/' || *s_ptr->name == DIR_SEPARATOR ! /* Check for disk name on MS-DOS-based systems. */ ! || (DIR_SEPARATOR == '\\' ! && s_ptr->name[1] == ':' ! && (s_ptr->name[2] == DIR_SEPARATOR ! || s_ptr->name[2] == '/'))) && object_directory != 0 && *object_directory != '\0') { --- 1051,1057 ---- { /* If this is a relative file name, and an object directory has been specified, then make it relative to the object directory name. */ ! if (! IS_ABSOLUTE_PATHNAME (s_ptr->name) && object_directory != 0 && *object_directory != '\0') { *************** output_data () *** 1035,1046 **** else source_file_name = s_ptr->name; ! line_counts = (long *) xcalloc (sizeof (long), s_ptr->maxlineno); line_exists = xcalloc (1, s_ptr->maxlineno); if (output_branch_probs) branch_probs = (struct arcdata **) xcalloc (sizeof (struct arcdata *), s_ptr->maxlineno); ! /* There will be a zero at the beginning of the bb info, before the first list of line numbers, so must initialize block_num to 0. */ block_num = 0; --- 1065,1076 ---- else source_file_name = s_ptr->name; ! line_counts = (gcov_type *) xcalloc (sizeof (gcov_type), s_ptr->maxlineno); line_exists = xcalloc (1, s_ptr->maxlineno); if (output_branch_probs) branch_probs = (struct arcdata **) xcalloc (sizeof (struct arcdata *), s_ptr->maxlineno); ! /* There will be a zero at the beginning of the bb info, before the first list of line numbers, so must initialize block_num to 0. */ block_num = 0; *************** output_data () *** 1064,1070 **** this_file = 0; else this_file = 1; ! /* Scan past the file name. */ do { count++; --- 1094,1100 ---- this_file = 0; else this_file = 1; ! /* Scan past the file name. */ do { count++; *************** output_data () *** 1137,1143 **** function_name); abort (); } ! if (output_branch_probs && this_file) calculate_branch_probs (current_graph, block_num, branch_probs, last_line_num); --- 1167,1173 ---- function_name); abort (); } ! if (output_branch_probs && this_file) calculate_branch_probs (current_graph, block_num, branch_probs, last_line_num); *************** output_data () *** 1244,1250 **** /* Now the statistics are ready. Read in the source file one line at a time, and output that line to the gcov file preceded by its execution count if non zero. */ ! source_file = fopen (source_file_name, "r"); if (source_file == NULL) { --- 1274,1280 ---- /* Now the statistics are ready. Read in the source file one line at a time, and output that line to the gcov file preceded by its execution count if non zero. */ ! source_file = fopen (source_file_name, "r"); if (source_file == NULL) { *************** output_data () *** 1264,1270 **** if (output_long_names && strcmp (cptr, input_file_name)) { gcov_file_name = xmalloc (count + 7 + strlen (input_file_name)); ! cptr = strrchr (input_file_name, '/'); if (cptr) strcpy (gcov_file_name, cptr + 1); --- 1294,1300 ---- if (output_long_names && strcmp (cptr, input_file_name)) { gcov_file_name = xmalloc (count + 7 + strlen (input_file_name)); ! cptr = strrchr (input_file_name, '/'); if (cptr) strcpy (gcov_file_name, cptr + 1); *************** output_data () *** 1324,1331 **** if (line_exists[count]) { if (line_counts[count]) ! fprintf (gcov_file, "%12ld %s", line_counts[count], ! string); else fprintf (gcov_file, " ###### %s", string); } --- 1354,1365 ---- if (line_exists[count]) { if (line_counts[count]) ! { ! char c[20]; ! sprintf (c, HOST_WIDEST_INT_PRINT_DEC, (HOST_WIDEST_INT)line_counts[count]); ! fprintf (gcov_file, "%12s %s", c, ! string); ! } else fprintf (gcov_file, " ###### %s", string); } *************** output_data () *** 1354,1367 **** else { if (output_branch_counts) ! fnotice (gcov_file, ! "call %d returns = %d\n", ! i, a_ptr->total - a_ptr->hits); else ! fnotice (gcov_file, ! "call %d returns = %d%%\n", ! i, 100 - ((a_ptr->hits * 100) + ! (a_ptr->total >> 1))/a_ptr->total); } } else --- 1388,1410 ---- else { if (output_branch_counts) ! { ! char c[20]; ! sprintf (c, HOST_WIDEST_INT_PRINT_DEC, ! a_ptr->total - a_ptr->hits); ! fnotice (gcov_file, ! "call %d returns = %s\n", i, c); ! } else ! { ! char c[20]; ! sprintf (c, HOST_WIDEST_INT_PRINT_DEC, ! 100 - ((a_ptr->hits * 100) ! + (a_ptr->total >> 1)) ! / a_ptr->total); ! fnotice (gcov_file, ! "call %d returns = %s%%\n", i, c); ! } } } else *************** output_data () *** 1372,1387 **** else { if (output_branch_counts) ! fnotice (gcov_file, ! "branch %d taken = %d\n", ! i, a_ptr->hits); else fnotice (gcov_file, ! "branch %d taken = %d%%\n", i, ! ((a_ptr->hits * 100) + ! (a_ptr->total >> 1))/ ! a_ptr->total); ! } } } --- 1415,1437 ---- else { if (output_branch_counts) ! { ! char c[20]; ! sprintf (c, HOST_WIDEST_INT_PRINT_DEC, ! a_ptr->hits); ! fnotice (gcov_file, ! "branch %d taken = %s\n", i, c); ! } else + { + char c[20]; + sprintf (c, HOST_WIDEST_INT_PRINT_DEC, + ((a_ptr->hits * 100) + + (a_ptr->total >> 1)) + / a_ptr->total); fnotice (gcov_file, ! "branch %d taken = %s%%\n", i, c); ! } } } } diff -Nrc3pad gcc-3.0.4/gcc/gcse.c gcc-3.1/gcc/gcse.c *** gcc-3.0.4/gcc/gcse.c Mon Sep 17 21:29:55 2001 --- gcc-3.1/gcc/gcse.c Mon Apr 22 18:14:28 2002 *************** *** 1,30 **** /* Global common subexpression elimination/Partial redundancy elimination and global constant/copy propagation for GNU compiler. ! Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* TODO - reordering of memory allocation and freeing to be more space efficient - do rough calc of how many regs are needed in each block, and a rough calc of how many regs are available in each class and use that to throttle back the code in cases where RTX_COST is minimal. - - dead store elimination - a store to the same address as a load does not kill the load if the source of the store is also the destination of the load. Handling this allows more load motion, particularly out of loops. --- 1,30 ---- /* Global common subexpression elimination/Partial redundancy elimination and global constant/copy propagation for GNU compiler. ! Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 ! Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* TODO - reordering of memory allocation and freeing to be more space efficient - do rough calc of how many regs are needed in each block, and a rough calc of how many regs are available in each class and use that to throttle back the code in cases where RTX_COST is minimal. - a store to the same address as a load does not kill the load if the source of the store is also the destination of the load. Handling this allows more load motion, particularly out of loops. *************** Boston, MA 02111-1307, USA. */ *** 159,173 **** #include "output.h" #include "function.h" #include "expr.h" #include "params.h" #include "obstack.h" #define obstack_chunk_alloc gmalloc #define obstack_chunk_free free - /* Maximum number of passes to perform. */ - #define MAX_PASSES 1 - /* Propagate flow information through back edges and thus enable PRE's moving loop invariant calculations out of loops. --- 159,172 ---- #include "output.h" #include "function.h" #include "expr.h" + #include "except.h" + #include "ggc.h" #include "params.h" #include "obstack.h" #define obstack_chunk_alloc gmalloc #define obstack_chunk_free free /* Propagate flow information through back edges and thus enable PRE's moving loop invariant calculations out of loops. *************** Boston, MA 02111-1307, USA. */ *** 231,237 **** substitutions. PRE is quite expensive in complicated functions because the DFA can take ! awhile to converge. Hence we only perform one pass. Macro MAX_PASSES can be modified if one wants to experiment. ********************** --- 230,236 ---- substitutions. PRE is quite expensive in complicated functions because the DFA can take ! awhile to converge. Hence we only perform one pass. The parameter max-gcse-passes can be modified if one wants to experiment. ********************** *************** static int reg_set_table_size; *** 454,463 **** /* Amount to grow `reg_set_table' by when it's full. */ #define REG_SET_TABLE_SLOP 100 /* Bitmap containing one bit for each register in the program. Used when performing GCSE to track which registers have been set since the start of the basic block. */ ! static sbitmap reg_set_bitmap; /* For each block, a bitmap of registers set in the block. This is used by expr_killed_p and compute_transp. --- 453,489 ---- /* Amount to grow `reg_set_table' by when it's full. */ #define REG_SET_TABLE_SLOP 100 + /* This is a list of expressions which are MEMs and will be used by load + or store motion. + Load motion tracks MEMs which aren't killed by + anything except itself. (ie, loads and stores to a single location). + We can then allow movement of these MEM refs with a little special + allowance. (all stores copy the same value to the reaching reg used + for the loads). This means all values used to store into memory must have + no side effects so we can re-issue the setter value. + Store Motion uses this structure as an expression table to track stores + which look interesting, and might be moveable towards the exit block. */ + + struct ls_expr + { + struct expr * expr; /* Gcse expression reference for LM. */ + rtx pattern; /* Pattern of this mem. */ + rtx loads; /* INSN list of loads seen. */ + rtx stores; /* INSN list of stores seen. */ + struct ls_expr * next; /* Next in the list. */ + int invalid; /* Invalid for some reason. */ + int index; /* If it maps to a bitmap index. */ + int hash_index; /* Index when in a hash table. */ + rtx reaching_reg; /* Register to use when re-writing. */ + }; + + /* Head of the list of load/store memory refs. */ + static struct ls_expr * pre_ldst_mems = NULL; + /* Bitmap containing one bit for each register in the program. Used when performing GCSE to track which registers have been set since the start of the basic block. */ ! static regset reg_set_bitmap; /* For each block, a bitmap of registers set in the block. This is used by expr_killed_p and compute_transp. *************** static sbitmap reg_set_bitmap; *** 466,480 **** gcse) and it's currently not easy to realloc sbitmap vectors. */ static sbitmap *reg_set_in_block; ! /* For each block, non-zero if memory is set in that block. ! This is computed during hash table computation and is used by ! expr_killed_p and compute_transp. ! ??? Handling of memory is very simple, we don't make any attempt ! to optimize things (later). ! ??? This can be computed by compute_sets since the information ! doesn't change. */ ! static char *mem_set_in_block; /* Various variables for statistics gathering. */ /* Memory used in a pass. --- 492,505 ---- gcse) and it's currently not easy to realloc sbitmap vectors. */ static sbitmap *reg_set_in_block; ! /* Array, indexed by basic block number for a list of insns which modify ! memory within that block. */ ! static rtx * modify_mem_list; ! bitmap modify_mem_list_set; + /* This array parallels modify_mem_list, but is kept canonicalized. */ + static rtx * canon_modify_mem_list; + bitmap canon_modify_mem_list_set; /* Various variables for statistics gathering. */ /* Memory used in a pass. *************** static void compute_transpout PARAMS ((v *** 581,601 **** static void compute_local_properties PARAMS ((sbitmap *, sbitmap *, sbitmap *, int)); static void compute_cprop_data PARAMS ((void)); ! static void find_used_regs PARAMS ((rtx)); static int try_replace_reg PARAMS ((rtx, rtx, rtx)); static struct expr *find_avail_set PARAMS ((int, rtx)); ! static int cprop_jump PARAMS ((rtx, rtx, struct reg_use *, rtx)); #ifdef HAVE_cc0 ! static int cprop_cc0_jump PARAMS ((rtx, struct reg_use *, rtx)); #endif ! static int cprop_insn PARAMS ((rtx, int)); static int cprop PARAMS ((int)); static int one_cprop_pass PARAMS ((int, int)); static void alloc_pre_mem PARAMS ((int, int)); static void free_pre_mem PARAMS ((void)); static void compute_pre_data PARAMS ((void)); ! static int pre_expr_reaches_here_p PARAMS ((int, struct expr *, int)); ! static void insert_insn_end_bb PARAMS ((struct expr *, int, int)); static void pre_insert_copy_insn PARAMS ((struct expr *, rtx)); static void pre_insert_copies PARAMS ((void)); static int pre_delete PARAMS ((void)); --- 606,630 ---- static void compute_local_properties PARAMS ((sbitmap *, sbitmap *, sbitmap *, int)); static void compute_cprop_data PARAMS ((void)); ! static void find_used_regs PARAMS ((rtx *, void *)); static int try_replace_reg PARAMS ((rtx, rtx, rtx)); static struct expr *find_avail_set PARAMS ((int, rtx)); ! static int cprop_jump PARAMS ((basic_block, rtx, rtx, rtx)); #ifdef HAVE_cc0 ! static int cprop_cc0_jump PARAMS ((basic_block, rtx, struct reg_use *, rtx)); #endif ! static void mems_conflict_for_gcse_p PARAMS ((rtx, rtx, void *)); ! static int load_killed_in_block_p PARAMS ((basic_block, int, rtx, int)); ! static void canon_list_insert PARAMS ((rtx, rtx, void *)); ! static int cprop_insn PARAMS ((basic_block, rtx, int)); static int cprop PARAMS ((int)); static int one_cprop_pass PARAMS ((int, int)); static void alloc_pre_mem PARAMS ((int, int)); static void free_pre_mem PARAMS ((void)); static void compute_pre_data PARAMS ((void)); ! static int pre_expr_reaches_here_p PARAMS ((basic_block, struct expr *, ! basic_block)); ! static void insert_insn_end_bb PARAMS ((struct expr *, basic_block, int)); static void pre_insert_copy_insn PARAMS ((struct expr *, rtx)); static void pre_insert_copies PARAMS ((void)); static int pre_delete PARAMS ((void)); *************** static void alloc_code_hoist_mem PARAMS *** 606,626 **** static void free_code_hoist_mem PARAMS ((void)); static void compute_code_hoist_vbeinout PARAMS ((void)); static void compute_code_hoist_data PARAMS ((void)); ! static int hoist_expr_reaches_here_p PARAMS ((int, int, int, char *)); static void hoist_code PARAMS ((void)); static int one_code_hoisting_pass PARAMS ((void)); static void alloc_rd_mem PARAMS ((int, int)); static void free_rd_mem PARAMS ((void)); ! static void handle_rd_kill_set PARAMS ((rtx, int, int)); static void compute_kill_rd PARAMS ((void)); static void compute_rd PARAMS ((void)); static void alloc_avail_expr_mem PARAMS ((int, int)); static void free_avail_expr_mem PARAMS ((void)); static void compute_ae_gen PARAMS ((void)); ! static int expr_killed_p PARAMS ((rtx, int)); static void compute_ae_kill PARAMS ((sbitmap *, sbitmap *)); static int expr_reaches_here_p PARAMS ((struct occr *, struct expr *, ! int, int)); static rtx computing_insn PARAMS ((struct expr *, rtx)); static int def_reaches_here_p PARAMS ((rtx, rtx)); static int can_disregard_other_sets PARAMS ((struct reg_set **, rtx, int)); --- 635,656 ---- static void free_code_hoist_mem PARAMS ((void)); static void compute_code_hoist_vbeinout PARAMS ((void)); static void compute_code_hoist_data PARAMS ((void)); ! static int hoist_expr_reaches_here_p PARAMS ((basic_block, int, basic_block, ! char *)); static void hoist_code PARAMS ((void)); static int one_code_hoisting_pass PARAMS ((void)); static void alloc_rd_mem PARAMS ((int, int)); static void free_rd_mem PARAMS ((void)); ! static void handle_rd_kill_set PARAMS ((rtx, int, basic_block)); static void compute_kill_rd PARAMS ((void)); static void compute_rd PARAMS ((void)); static void alloc_avail_expr_mem PARAMS ((int, int)); static void free_avail_expr_mem PARAMS ((void)); static void compute_ae_gen PARAMS ((void)); ! static int expr_killed_p PARAMS ((rtx, basic_block)); static void compute_ae_kill PARAMS ((sbitmap *, sbitmap *)); static int expr_reaches_here_p PARAMS ((struct occr *, struct expr *, ! basic_block, int)); static rtx computing_insn PARAMS ((struct expr *, rtx)); static int def_reaches_here_p PARAMS ((rtx, rtx)); static int can_disregard_other_sets PARAMS ((struct reg_set **, rtx, int)); *************** static int handle_avail_expr PARAMS ((rt *** 628,642 **** static int classic_gcse PARAMS ((void)); static int one_classic_gcse_pass PARAMS ((int)); static void invalidate_nonnull_info PARAMS ((rtx, rtx, void *)); ! static void delete_null_pointer_checks_1 PARAMS ((varray_type *, unsigned int *, sbitmap *, sbitmap *, struct null_pointer_info *)); static rtx process_insert_insn PARAMS ((struct expr *)); static int pre_edge_insert PARAMS ((struct edge_list *, struct expr **)); static int expr_reaches_here_p_work PARAMS ((struct occr *, struct expr *, ! int, int, char *)); ! static int pre_expr_reaches_here_p_work PARAMS ((int, struct expr *, ! int, char *)); /* Entry point for global common subexpression elimination. F is the first instruction in the function. */ --- 658,705 ---- static int classic_gcse PARAMS ((void)); static int one_classic_gcse_pass PARAMS ((int)); static void invalidate_nonnull_info PARAMS ((rtx, rtx, void *)); ! static void delete_null_pointer_checks_1 PARAMS ((unsigned int *, sbitmap *, sbitmap *, struct null_pointer_info *)); static rtx process_insert_insn PARAMS ((struct expr *)); static int pre_edge_insert PARAMS ((struct edge_list *, struct expr **)); static int expr_reaches_here_p_work PARAMS ((struct occr *, struct expr *, ! basic_block, int, char *)); ! static int pre_expr_reaches_here_p_work PARAMS ((basic_block, struct expr *, ! basic_block, char *)); ! static struct ls_expr * ldst_entry PARAMS ((rtx)); ! static void free_ldst_entry PARAMS ((struct ls_expr *)); ! static void free_ldst_mems PARAMS ((void)); ! static void print_ldst_list PARAMS ((FILE *)); ! static struct ls_expr * find_rtx_in_ldst PARAMS ((rtx)); ! static int enumerate_ldsts PARAMS ((void)); ! static inline struct ls_expr * first_ls_expr PARAMS ((void)); ! static inline struct ls_expr * next_ls_expr PARAMS ((struct ls_expr *)); ! static int simple_mem PARAMS ((rtx)); ! static void invalidate_any_buried_refs PARAMS ((rtx)); ! static void compute_ld_motion_mems PARAMS ((void)); ! static void trim_ld_motion_mems PARAMS ((void)); ! static void update_ld_motion_stores PARAMS ((struct expr *)); ! static void reg_set_info PARAMS ((rtx, rtx, void *)); ! static int store_ops_ok PARAMS ((rtx, basic_block)); ! static void find_moveable_store PARAMS ((rtx)); ! static int compute_store_table PARAMS ((void)); ! static int load_kills_store PARAMS ((rtx, rtx)); ! static int find_loads PARAMS ((rtx, rtx)); ! static int store_killed_in_insn PARAMS ((rtx, rtx)); ! static int store_killed_after PARAMS ((rtx, rtx, basic_block)); ! static int store_killed_before PARAMS ((rtx, rtx, basic_block)); ! static void build_store_vectors PARAMS ((void)); ! static void insert_insn_start_bb PARAMS ((rtx, basic_block)); ! static int insert_store PARAMS ((struct ls_expr *, edge)); ! static void replace_store_insn PARAMS ((rtx, rtx, basic_block)); ! static void delete_store PARAMS ((struct ls_expr *, ! basic_block)); ! static void free_store_memory PARAMS ((void)); ! static void store_motion PARAMS ((void)); ! static void free_insn_expr_list_list PARAMS ((rtx *)); ! static void clear_modify_mem_tables PARAMS ((void)); ! static void free_modify_mem_tables PARAMS ((void)); /* Entry point for global common subexpression elimination. F is the first instruction in the function. */ *************** gcse_main (f, file) *** 654,659 **** --- 717,726 ---- /* Point to release obstack data from for each pass. */ char *gcse_obstack_bottom; + /* Insertion of instructions on edges can create new basic blocks; we + need the original basic block count so that we can properly deallocate + arrays sized on the number of basic blocks originally in the cfg. */ + int orig_bb_count; /* We do not construct an accurate cfg in functions which call setjmp, so just punt to be safe. */ if (current_function_calls_setjmp) *************** gcse_main (f, file) *** 673,678 **** --- 740,746 ---- if (file) dump_flow_info (file); + orig_bb_count = n_basic_blocks; /* Return if there's nothing to do. */ if (n_basic_blocks <= 1) return 0; *************** gcse_main (f, file) *** 688,695 **** if (n_basic_blocks > 1000 && n_edges / n_basic_blocks >= 20) { if (warn_disabled_optimization) ! warning ("GCSE disabled: %d > 1000 basic blocks and %d >= 20 edges/basic block", ! n_basic_blocks, n_edges / n_basic_blocks); return 0; } --- 756,763 ---- if (n_basic_blocks > 1000 && n_edges / n_basic_blocks >= 20) { if (warn_disabled_optimization) ! warning ("GCSE disabled: %d > 1000 basic blocks and %d >= 20 edges/basic block", ! n_basic_blocks, n_edges / n_basic_blocks); return 0; } *************** gcse_main (f, file) *** 716,721 **** --- 784,791 ---- gcc_obstack_init (&gcse_obstack); bytes_used = 0; + /* We need alias. */ + init_alias_analysis (); /* Record where pseudo-registers are set. This data is kept accurate during each pass. ??? We could also record hard-reg information here [since it's unchanging], however it is currently done during hash table *************** gcse_main (f, file) *** 733,739 **** max_pass_bytes = 0; gcse_obstack_bottom = gcse_alloc (1); changed = 1; ! while (changed && pass < MAX_PASSES) { changed = 0; if (file) --- 803,809 ---- max_pass_bytes = 0; gcse_obstack_bottom = gcse_alloc (1); changed = 1; ! while (changed && pass < MAX_GCSE_PASSES) { changed = 0; if (file) *************** gcse_main (f, file) *** 757,762 **** --- 827,846 ---- else { changed |= one_pre_gcse_pass (pass + 1); + /* We may have just created new basic blocks. Release and + recompute various things which are sized on the number of + basic blocks. */ + if (changed) + { + free_modify_mem_tables (); + modify_mem_list + = (rtx *) gmalloc (n_basic_blocks * sizeof (rtx)); + canon_modify_mem_list + = (rtx *) gmalloc (n_basic_blocks * sizeof (rtx)); + memset ((char *) modify_mem_list, 0, n_basic_blocks * sizeof (rtx)); + memset ((char *) canon_modify_mem_list, 0, n_basic_blocks * sizeof (rtx)); + orig_bb_count = n_basic_blocks; + } free_reg_set_mem (); alloc_reg_set_mem (max_reg_num ()); compute_sets (f); *************** gcse_main (f, file) *** 815,822 **** pass, pass > 1 ? "es" : "", max_pass_bytes); } ! obstack_free (&gcse_obstack, NULL_PTR); free_reg_set_mem (); return run_jump_opt_after_gcse; } --- 899,914 ---- pass, pass > 1 ? "es" : "", max_pass_bytes); } ! obstack_free (&gcse_obstack, NULL); free_reg_set_mem (); + /* We are finished with alias. */ + end_alias_analysis (); + allocate_reg_info (max_reg_num (), FALSE, FALSE); + + /* Store motion disabled until it is fixed. */ + if (0 && !optimize_size && flag_gcse_sm) + store_motion (); + /* Record where pseudo-registers are set. */ return run_jump_opt_after_gcse; } *************** compute_can_copy () *** 829,835 **** { int i; #ifndef AVOID_CCMODE_COPIES ! rtx reg,insn; #endif memset (can_copy_p, 0, NUM_MACHINE_MODES); --- 921,927 ---- { int i; #ifndef AVOID_CCMODE_COPIES ! rtx reg, insn; #endif memset (can_copy_p, 0, NUM_MACHINE_MODES); *************** compute_can_copy () *** 842,848 **** #else reg = gen_rtx_REG ((enum machine_mode) i, LAST_VIRTUAL_REGISTER + 1); insn = emit_insn (gen_rtx_SET (VOIDmode, reg, reg)); ! if (recog (PATTERN (insn), insn, NULL_PTR) >= 0) can_copy_p[i] = 1; #endif } --- 934,940 ---- #else reg = gen_rtx_REG ((enum machine_mode) i, LAST_VIRTUAL_REGISTER + 1); insn = emit_insn (gen_rtx_SET (VOIDmode, reg, reg)); ! if (recog (PATTERN (insn), insn, NULL) >= 0) can_copy_p[i] = 1; #endif } *************** static void *** 894,900 **** alloc_gcse_mem (f) rtx f; { ! int i,n; rtx insn; /* Find the largest UID and create a mapping from UIDs to CUIDs. --- 986,992 ---- alloc_gcse_mem (f) rtx f; { ! int i, n; rtx insn; /* Find the largest UID and create a mapping from UIDs to CUIDs. *************** alloc_gcse_mem (f) *** 924,935 **** CUID_INSN (i++) = insn; /* Allocate vars to track sets of regs. */ ! reg_set_bitmap = (sbitmap) sbitmap_alloc (max_gcse_regno); /* Allocate vars to track sets of regs, memory per block. */ reg_set_in_block = (sbitmap *) sbitmap_vector_alloc (n_basic_blocks, max_gcse_regno); ! mem_set_in_block = (char *) gmalloc (n_basic_blocks); } /* Free memory allocated by alloc_gcse_mem. */ --- 1016,1034 ---- CUID_INSN (i++) = insn; /* Allocate vars to track sets of regs. */ ! reg_set_bitmap = BITMAP_XMALLOC (); /* Allocate vars to track sets of regs, memory per block. */ reg_set_in_block = (sbitmap *) sbitmap_vector_alloc (n_basic_blocks, max_gcse_regno); ! /* Allocate array to keep a list of insns which modify memory in each ! basic block. */ ! modify_mem_list = (rtx *) gmalloc (n_basic_blocks * sizeof (rtx)); ! canon_modify_mem_list = (rtx *) gmalloc (n_basic_blocks * sizeof (rtx)); ! memset ((char *) modify_mem_list, 0, n_basic_blocks * sizeof (rtx)); ! memset ((char *) canon_modify_mem_list, 0, n_basic_blocks * sizeof (rtx)); ! modify_mem_list_set = BITMAP_XMALLOC (); ! canon_modify_mem_list_set = BITMAP_XMALLOC (); } /* Free memory allocated by alloc_gcse_mem. */ *************** free_gcse_mem () *** 940,949 **** free (uid_cuid); free (cuid_insn); ! free (reg_set_bitmap); ! free (reg_set_in_block); ! free (mem_set_in_block); } /* Many of the global optimization algorithms work by solving dataflow --- 1039,1050 ---- free (uid_cuid); free (cuid_insn); ! BITMAP_XFREE (reg_set_bitmap); ! sbitmap_vector_free (reg_set_in_block); ! free_modify_mem_tables (); ! BITMAP_XFREE (modify_mem_list_set); ! BITMAP_XFREE (canon_modify_mem_list_set); } /* Many of the global optimization algorithms work by solving dataflow *************** static void *** 1118,1124 **** free_reg_set_mem () { free (reg_set_table); ! obstack_free (®_set_obstack, NULL_PTR); } /* Record REGNO in the reg_set table. */ --- 1219,1225 ---- free_reg_set_mem () { free (reg_set_table); ! obstack_free (®_set_obstack, NULL); } /* Record REGNO in the reg_set table. */ *************** record_one_set (regno, insn) *** 1128,1134 **** int regno; rtx insn; { ! /* allocate a new reg_set element and link it onto the list */ struct reg_set *new_reg_info; /* If the table isn't big enough, enlarge it. */ --- 1229,1235 ---- int regno; rtx insn; { ! /* Allocate a new reg_set element and link it onto the list. */ struct reg_set *new_reg_info; /* If the table isn't big enough, enlarge it. */ *************** record_one_set (regno, insn) *** 1140,1146 **** = (struct reg_set **) grealloc ((char *) reg_set_table, new_size * sizeof (struct reg_set *)); memset ((char *) (reg_set_table + reg_set_table_size), 0, ! (new_size - reg_set_table_size) * sizeof (struct reg_set *)); reg_set_table_size = new_size; } --- 1241,1247 ---- = (struct reg_set **) grealloc ((char *) reg_set_table, new_size * sizeof (struct reg_set *)); memset ((char *) (reg_set_table + reg_set_table_size), 0, ! (new_size - reg_set_table_size) * sizeof (struct reg_set *)); reg_set_table_size = new_size; } *************** compute_sets (f) *** 1185,1219 **** /* Hash table support. */ ! /* For each register, the cuid of the first/last insn in the block to set it, ! or -1 if not set. */ #define NEVER_SET -1 - static int *reg_first_set; - static int *reg_last_set; ! /* While computing "first/last set" info, this is the CUID of first/last insn ! to set memory or -1 if not set. `mem_last_set' is also used when ! performing GCSE to record whether memory has been set since the beginning ! of the block. ! Note that handling of memory is very simple, we don't make any attempt ! to optimize things (later). */ ! static int mem_first_set; ! static int mem_last_set; ! /* Perform a quick check whether X, the source of a set, is something ! we want to consider for GCSE. */ static int want_to_gcse_p (x) rtx x; { switch (GET_CODE (x)) { case REG: case SUBREG: case CONST_INT: case CONST_DOUBLE: case CALL: return 0; --- 1286,1324 ---- /* Hash table support. */ ! /* For each register, the cuid of the first/last insn in the block ! that set it, or -1 if not set. */ #define NEVER_SET -1 ! struct reg_avail_info ! { ! int last_bb; ! int first_set; ! int last_set; ! }; ! static struct reg_avail_info *reg_avail_info; ! static int current_bb; ! ! /* See whether X, the source of a set, is something we want to consider for ! GCSE. */ static int want_to_gcse_p (x) rtx x; { + static rtx test_insn = 0; + int num_clobbers = 0; + int icode; + switch (GET_CODE (x)) { case REG: case SUBREG: case CONST_INT: case CONST_DOUBLE: + case CONST_VECTOR: case CALL: return 0; *************** want_to_gcse_p (x) *** 1221,1227 **** break; } ! return 1; } /* Return non-zero if the operands of expression X are unchanged from the --- 1326,1356 ---- break; } ! /* If this is a valid operand, we are OK. If it's VOIDmode, we aren't. */ ! if (general_operand (x, GET_MODE (x))) ! return 1; ! else if (GET_MODE (x) == VOIDmode) ! return 0; ! ! /* Otherwise, check if we can make a valid insn from it. First initialize ! our test insn if we haven't already. */ ! if (test_insn == 0) ! { ! test_insn ! = make_insn_raw (gen_rtx_SET (VOIDmode, ! gen_rtx_REG (word_mode, ! FIRST_PSEUDO_REGISTER * 2), ! const0_rtx)); ! NEXT_INSN (test_insn) = PREV_INSN (test_insn) = 0; ! ggc_add_rtx_root (&test_insn, 1); ! } ! ! /* Now make an insn like the one we would make when GCSE'ing and see if ! valid. */ ! PUT_MODE (SET_DEST (PATTERN (test_insn)), GET_MODE (x)); ! SET_SRC (PATTERN (test_insn)) = x; ! return ((icode = recog (PATTERN (test_insn), test_insn, &num_clobbers)) >= 0 ! && (num_clobbers == 0 || ! added_clobbers_hard_reg_p (icode))); } /* Return non-zero if the operands of expression X are unchanged from the *************** oprs_unchanged_p (x, insn, avail_p) *** 1244,1262 **** switch (code) { case REG: ! if (avail_p) ! return (reg_last_set[REGNO (x)] == NEVER_SET ! || reg_last_set[REGNO (x)] < INSN_CUID (insn)); ! else ! return (reg_first_set[REGNO (x)] == NEVER_SET ! || reg_first_set[REGNO (x)] >= INSN_CUID (insn)); case MEM: ! if (avail_p && mem_last_set != NEVER_SET ! && mem_last_set >= INSN_CUID (insn)) ! return 0; ! else if (! avail_p && mem_first_set != NEVER_SET ! && mem_first_set < INSN_CUID (insn)) return 0; else return oprs_unchanged_p (XEXP (x, 0), insn, avail_p); --- 1373,1392 ---- switch (code) { case REG: ! { ! struct reg_avail_info *info = ®_avail_info[REGNO (x)]; ! ! if (info->last_bb != current_bb) ! return 1; ! if (avail_p) ! return info->last_set < INSN_CUID (insn); ! else ! return info->first_set >= INSN_CUID (insn); ! } case MEM: ! if (load_killed_in_block_p (BASIC_BLOCK (current_bb), INSN_CUID (insn), ! x, avail_p)) return 0; else return oprs_unchanged_p (XEXP (x, 0), insn, avail_p); *************** oprs_unchanged_p (x, insn, avail_p) *** 1274,1279 **** --- 1404,1410 ---- case CONST: case CONST_INT: case CONST_DOUBLE: + case CONST_VECTOR: case SYMBOL_REF: case LABEL_REF: case ADDR_VEC: *************** oprs_unchanged_p (x, insn, avail_p) *** 1306,1311 **** --- 1437,1541 ---- return 1; } + /* Used for communication between mems_conflict_for_gcse_p and + load_killed_in_block_p. Nonzero if mems_conflict_for_gcse_p finds a + conflict between two memory references. */ + static int gcse_mems_conflict_p; + + /* Used for communication between mems_conflict_for_gcse_p and + load_killed_in_block_p. A memory reference for a load instruction, + mems_conflict_for_gcse_p will see if a memory store conflicts with + this memory load. */ + static rtx gcse_mem_operand; + + /* DEST is the output of an instruction. If it is a memory reference, and + possibly conflicts with the load found in gcse_mem_operand, then set + gcse_mems_conflict_p to a nonzero value. */ + + static void + mems_conflict_for_gcse_p (dest, setter, data) + rtx dest, setter ATTRIBUTE_UNUSED; + void *data ATTRIBUTE_UNUSED; + { + while (GET_CODE (dest) == SUBREG + || GET_CODE (dest) == ZERO_EXTRACT + || GET_CODE (dest) == SIGN_EXTRACT + || GET_CODE (dest) == STRICT_LOW_PART) + dest = XEXP (dest, 0); + + /* If DEST is not a MEM, then it will not conflict with the load. Note + that function calls are assumed to clobber memory, but are handled + elsewhere. */ + if (GET_CODE (dest) != MEM) + return; + + /* If we are setting a MEM in our list of specially recognized MEMs, + don't mark as killed this time. */ + + if (dest == gcse_mem_operand && pre_ldst_mems != NULL) + { + if (!find_rtx_in_ldst (dest)) + gcse_mems_conflict_p = 1; + return; + } + + if (true_dependence (dest, GET_MODE (dest), gcse_mem_operand, + rtx_addr_varies_p)) + gcse_mems_conflict_p = 1; + } + + /* Return nonzero if the expression in X (a memory reference) is killed + in block BB before or after the insn with the CUID in UID_LIMIT. + AVAIL_P is nonzero for kills after UID_LIMIT, and zero for kills + before UID_LIMIT. + + To check the entire block, set UID_LIMIT to max_uid + 1 and + AVAIL_P to 0. */ + + static int + load_killed_in_block_p (bb, uid_limit, x, avail_p) + basic_block bb; + int uid_limit; + rtx x; + int avail_p; + { + rtx list_entry = modify_mem_list[bb->index]; + while (list_entry) + { + rtx setter; + /* Ignore entries in the list that do not apply. */ + if ((avail_p + && INSN_CUID (XEXP (list_entry, 0)) < uid_limit) + || (! avail_p + && INSN_CUID (XEXP (list_entry, 0)) > uid_limit)) + { + list_entry = XEXP (list_entry, 1); + continue; + } + + setter = XEXP (list_entry, 0); + + /* If SETTER is a call everything is clobbered. Note that calls + to pure functions are never put on the list, so we need not + worry about them. */ + if (GET_CODE (setter) == CALL_INSN) + return 1; + + /* SETTER must be an INSN of some kind that sets memory. Call + note_stores to examine each hunk of memory that is modified. + + The note_stores interface is pretty limited, so we have to + communicate via global variables. Yuk. */ + gcse_mem_operand = x; + gcse_mems_conflict_p = 0; + note_stores (PATTERN (setter), mems_conflict_for_gcse_p, NULL); + if (gcse_mems_conflict_p) + return 1; + list_entry = XEXP (list_entry, 1); + } + return 0; + } + /* Return non-zero if the operands of expression X are unchanged from the start of INSN's basic block up to but not including INSN. */ *************** hash_expr (x, mode, do_not_record_p, has *** 1348,1360 **** hash = hash_expr_1 (x, mode, do_not_record_p); return hash % hash_table_size; } /* Hash a string. Just add its bytes up. */ static inline unsigned hash_string_1 (ps) const char *ps; { unsigned hash = 0; ! const unsigned char *p = (const unsigned char *)ps; if (p) while (*p) --- 1578,1592 ---- hash = hash_expr_1 (x, mode, do_not_record_p); return hash % hash_table_size; } + /* Hash a string. Just add its bytes up. */ + static inline unsigned hash_string_1 (ps) const char *ps; { unsigned hash = 0; ! const unsigned char *p = (const unsigned char *) ps; if (p) while (*p) *************** hash_expr_1 (x, mode, do_not_record_p) *** 1408,1413 **** --- 1640,1661 ---- + (unsigned int) CONST_DOUBLE_HIGH (x)); return hash; + case CONST_VECTOR: + { + int units; + rtx elt; + + units = CONST_VECTOR_NUNITS (x); + + for (i = 0; i < units; ++i) + { + elt = CONST_VECTOR_ELT (x, i); + hash += hash_expr_1 (elt, GET_MODE (elt), do_not_record_p); + } + + return hash; + } + /* Assume there is only one rtx object for any given label. */ case LABEL_REF: /* We don't hash on the address of the CODE_LABEL to avoid bootstrap *************** static int *** 1556,1564 **** expr_equiv_p (x, y) rtx x, y; { ! register int i, j; ! register enum rtx_code code; ! register const char *fmt; if (x == y) return 1; --- 1804,1812 ---- expr_equiv_p (x, y) rtx x, y; { ! int i, j; ! enum rtx_code code; ! const char *fmt; if (x == y) return 1; *************** expr_equiv_p (x, y) *** 1687,1693 **** default: abort (); } ! } return 1; } --- 1935,1941 ---- default: abort (); } ! } return 1; } *************** insert_set_in_table (x, insn) *** 1871,1877 **** /* Set the fields of the expr element. We must copy X because it can be modified when copy propagation is performed on its operands. */ - /* ??? Should this go in a different obstack? */ cur_expr->expr = copy_rtx (x); cur_expr->bitmap_index = n_sets++; cur_expr->next_same_hash = NULL; --- 2119,2124 ---- *************** hash_scan_set (pat, insn, set_p) *** 1924,1959 **** { rtx src = SET_SRC (pat); rtx dest = SET_DEST (pat); if (GET_CODE (src) == CALL) hash_scan_call (src, insn); ! if (GET_CODE (dest) == REG) { ! int regno = REGNO (dest); ! rtx tmp, note; /* Only record sets of pseudo-regs in the hash table. */ if (! set_p && regno >= FIRST_PSEUDO_REGISTER /* Don't GCSE something if we can't do a reg/reg copy. */ && can_copy_p [GET_MODE (dest)] /* Is SET_SRC something we want to gcse? */ && want_to_gcse_p (src) /* Don't GCSE if it has attached REG_EQUIV note. At this point this only function parameters should have REG_EQUIV notes and if the argument slot is used somewhere ! explicitely, it means address of parameter has been taken, so we should not extend the lifetime of the pseudo. */ && ((note = find_reg_note (insn, REG_EQUIV, NULL_RTX)) == 0 || GET_CODE (XEXP (note, 0)) != MEM)) { /* An expression is not anticipatable if its operands are ! modified before this insn. */ ! int antic_p = oprs_anticipatable_p (src, insn); /* An expression is not available if its operands are ! subsequently modified, including this insn. */ ! int avail_p = oprs_available_p (src, insn); insert_expr_in_table (src, GET_MODE (dest), insn, antic_p, avail_p); } --- 2171,2223 ---- { rtx src = SET_SRC (pat); rtx dest = SET_DEST (pat); + rtx note; if (GET_CODE (src) == CALL) hash_scan_call (src, insn); ! else if (GET_CODE (dest) == REG) { ! unsigned int regno = REGNO (dest); ! rtx tmp; ! ! /* If this is a single set and we are doing constant propagation, ! see if a REG_NOTE shows this equivalent to a constant. */ ! if (set_p && (note = find_reg_equal_equiv_note (insn)) != 0 ! && CONSTANT_P (XEXP (note, 0))) ! src = XEXP (note, 0), pat = gen_rtx_SET (VOIDmode, dest, src); /* Only record sets of pseudo-regs in the hash table. */ if (! set_p && regno >= FIRST_PSEUDO_REGISTER /* Don't GCSE something if we can't do a reg/reg copy. */ && can_copy_p [GET_MODE (dest)] + /* GCSE commonly inserts instruction after the insn. We can't + do that easily for EH_REGION notes so disable GCSE on these + for now. */ + && !can_throw_internal (insn) /* Is SET_SRC something we want to gcse? */ && want_to_gcse_p (src) + /* Don't CSE a nop. */ + && ! set_noop_p (pat) /* Don't GCSE if it has attached REG_EQUIV note. At this point this only function parameters should have REG_EQUIV notes and if the argument slot is used somewhere ! explicitly, it means address of parameter has been taken, so we should not extend the lifetime of the pseudo. */ && ((note = find_reg_note (insn, REG_EQUIV, NULL_RTX)) == 0 || GET_CODE (XEXP (note, 0)) != MEM)) { /* An expression is not anticipatable if its operands are ! modified before this insn or if this is not the only SET in ! this insn. */ ! int antic_p = oprs_anticipatable_p (src, insn) && single_set (insn); /* An expression is not available if its operands are ! subsequently modified, including this insn. It's also not ! available if this is a branch, because we can't insert ! a set after the branch. */ ! int avail_p = (oprs_available_p (src, insn) ! && ! JUMP_P (insn)); insert_expr_in_table (src, GET_MODE (dest), insn, antic_p, avail_p); } *************** hash_scan_set (pat, insn, set_p) *** 1963,1972 **** && regno >= FIRST_PSEUDO_REGISTER && ((GET_CODE (src) == REG && REGNO (src) >= FIRST_PSEUDO_REGISTER ! && can_copy_p [GET_MODE (dest)]) ! || GET_CODE (src) == CONST_INT ! || GET_CODE (src) == SYMBOL_REF ! || GET_CODE (src) == CONST_DOUBLE) /* A copy is not available if its src or dest is subsequently modified. Here we want to search from INSN+1 on, but oprs_available_p searches from INSN on. */ --- 2227,2235 ---- && regno >= FIRST_PSEUDO_REGISTER && ((GET_CODE (src) == REG && REGNO (src) >= FIRST_PSEUDO_REGISTER ! && can_copy_p [GET_MODE (dest)] ! && REGNO (src) != regno) ! || CONSTANT_P (src)) /* A copy is not available if its src or dest is subsequently modified. Here we want to search from INSN+1 on, but oprs_available_p searches from INSN on. */ *************** hash_scan_insn (insn, set_p, in_libcall_ *** 2013,2037 **** rtx pat = PATTERN (insn); int i; /* Pick out the sets of INSN and for other forms of instructions record what's been modified. */ ! if (GET_CODE (pat) == SET && ! in_libcall_block) ! { ! /* Ignore obvious no-ops. */ ! if (SET_SRC (pat) != SET_DEST (pat)) ! hash_scan_set (pat, insn, set_p); ! } else if (GET_CODE (pat) == PARALLEL) for (i = 0; i < XVECLEN (pat, 0); i++) { rtx x = XVECEXP (pat, 0, i); if (GET_CODE (x) == SET) ! { ! if (GET_CODE (SET_SRC (x)) == CALL) ! hash_scan_call (SET_SRC (x), insn); ! } else if (GET_CODE (x) == CLOBBER) hash_scan_clobber (x, insn); else if (GET_CODE (x) == CALL) --- 2276,2296 ---- rtx pat = PATTERN (insn); int i; + if (in_libcall_block) + return; + /* Pick out the sets of INSN and for other forms of instructions record what's been modified. */ ! if (GET_CODE (pat) == SET) ! hash_scan_set (pat, insn, set_p); else if (GET_CODE (pat) == PARALLEL) for (i = 0; i < XVECLEN (pat, 0); i++) { rtx x = XVECEXP (pat, 0, i); if (GET_CODE (x) == SET) ! hash_scan_set (x, insn, set_p); else if (GET_CODE (x) == CLOBBER) hash_scan_clobber (x, insn); else if (GET_CODE (x) == CALL) *************** dump_hash_table (file, name, table, tabl *** 2089,2100 **** /* Record register first/last/block set information for REGNO in INSN. ! reg_first_set records the first place in the block where the register is set and is used to compute "anticipatability". ! reg_last_set records the last place in the block where the register is set and is used to compute "availability". reg_set_in_block records whether the register is set in the block and is used to compute "transparency". */ --- 2348,2362 ---- /* Record register first/last/block set information for REGNO in INSN. ! first_set records the first place in the block where the register is set and is used to compute "anticipatability". ! last_set records the last place in the block where the register is set and is used to compute "availability". + last_bb records the block for which first_set and last_set are + valid, as a quick test to invalidate them. + reg_set_in_block records whether the register is set in the block and is used to compute "transparency". */ *************** record_last_reg_set_info (insn, regno) *** 2103,2126 **** rtx insn; int regno; { ! if (reg_first_set[regno] == NEVER_SET) ! reg_first_set[regno] = INSN_CUID (insn); ! reg_last_set[regno] = INSN_CUID (insn); ! SET_BIT (reg_set_in_block[BLOCK_NUM (insn)], regno); } ! /* Record memory first/last/block set information for INSN. */ static void record_last_mem_set_info (insn) rtx insn; { ! if (mem_first_set == NEVER_SET) ! mem_first_set = INSN_CUID (insn); ! mem_last_set = INSN_CUID (insn); ! mem_set_in_block[BLOCK_NUM (insn)] = 1; } /* Called from compute_hash_table via note_stores to handle one --- 2365,2447 ---- rtx insn; int regno; { ! struct reg_avail_info *info = ®_avail_info[regno]; ! int cuid = INSN_CUID (insn); ! info->last_set = cuid; ! if (info->last_bb != current_bb) ! { ! info->last_bb = current_bb; ! info->first_set = cuid; ! SET_BIT (reg_set_in_block[current_bb], regno); ! } } ! ! /* Record all of the canonicalized MEMs of record_last_mem_set_info's insn. ! Note we store a pair of elements in the list, so they have to be ! taken off pairwise. */ ! ! static void ! canon_list_insert (dest, unused1, v_insn) ! rtx dest ATTRIBUTE_UNUSED; ! rtx unused1 ATTRIBUTE_UNUSED; ! void * v_insn; ! { ! rtx dest_addr, insn; ! int bb; ! ! while (GET_CODE (dest) == SUBREG ! || GET_CODE (dest) == ZERO_EXTRACT ! || GET_CODE (dest) == SIGN_EXTRACT ! || GET_CODE (dest) == STRICT_LOW_PART) ! dest = XEXP (dest, 0); ! ! /* If DEST is not a MEM, then it will not conflict with a load. Note ! that function calls are assumed to clobber memory, but are handled ! elsewhere. */ ! ! if (GET_CODE (dest) != MEM) ! return; ! ! dest_addr = get_addr (XEXP (dest, 0)); ! dest_addr = canon_rtx (dest_addr); ! insn = (rtx) v_insn; ! bb = BLOCK_NUM (insn); ! ! canon_modify_mem_list[bb] = ! alloc_EXPR_LIST (VOIDmode, dest_addr, canon_modify_mem_list[bb]); ! canon_modify_mem_list[bb] = ! alloc_EXPR_LIST (VOIDmode, dest, canon_modify_mem_list[bb]); ! bitmap_set_bit (canon_modify_mem_list_set, bb); ! } ! ! /* Record memory modification information for INSN. We do not actually care ! about the memory location(s) that are set, or even how they are set (consider ! a CALL_INSN). We merely need to record which insns modify memory. */ static void record_last_mem_set_info (insn) rtx insn; { ! int bb = BLOCK_NUM (insn); ! /* load_killed_in_block_p will handle the case of calls clobbering ! everything. */ ! modify_mem_list[bb] = alloc_INSN_LIST (insn, modify_mem_list[bb]); ! bitmap_set_bit (modify_mem_list_set, bb); ! ! if (GET_CODE (insn) == CALL_INSN) ! { ! /* Note that traversals of this loop (other than for free-ing) ! will break after encountering a CALL_INSN. So, there's no ! need to insert a pair of items, as canon_list_insert does. */ ! canon_modify_mem_list[bb] = ! alloc_INSN_LIST (insn, canon_modify_mem_list[bb]); ! bitmap_set_bit (canon_modify_mem_list_set, bb); ! } ! else ! note_stores (PATTERN (insn), canon_list_insert, (void*) insn); } /* Called from compute_hash_table via note_stores to handle one *************** static void *** 2166,2244 **** compute_hash_table (set_p) int set_p; { ! int bb; /* While we compute the hash table we also compute a bit array of which registers are set in which blocks. - We also compute which blocks set memory, in the absence of aliasing - support [which is TODO]. ??? This isn't needed during const/copy propagation, but it's cheap to compute. Later. */ sbitmap_vector_zero (reg_set_in_block, n_basic_blocks); - memset ((char *) mem_set_in_block, 0, n_basic_blocks); /* Some working arrays used to track first and last set in each block. */ ! /* ??? One could use alloca here, but at some size a threshold is crossed ! beyond which one should use malloc. Are we at that threshold here? */ ! reg_first_set = (int *) gmalloc (max_gcse_regno * sizeof (int)); ! reg_last_set = (int *) gmalloc (max_gcse_regno * sizeof (int)); ! for (bb = 0; bb < n_basic_blocks; bb++) { rtx insn; unsigned int regno; int in_libcall_block; - unsigned int i; /* First pass over the instructions records information used to determine when registers and memory are first and last set. ! ??? The mem_set_in_block and hard-reg reg_set_in_block computation could be moved to compute_sets since they currently don't change. */ ! for (i = 0; i < max_gcse_regno; i++) ! reg_first_set[i] = reg_last_set[i] = NEVER_SET; ! ! mem_first_set = NEVER_SET; ! mem_last_set = NEVER_SET; ! ! for (insn = BLOCK_HEAD (bb); ! insn && insn != NEXT_INSN (BLOCK_END (bb)); insn = NEXT_INSN (insn)) { - #ifdef NON_SAVING_SETJMP - if (NON_SAVING_SETJMP && GET_CODE (insn) == NOTE - && NOTE_LINE_NUMBER (insn) == NOTE_INSN_SETJMP) - { - for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) - record_last_reg_set_info (insn, regno); - continue; - } - #endif - if (! INSN_P (insn)) continue; if (GET_CODE (insn) == CALL_INSN) { ! for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) ! if ((call_used_regs[regno] ! && regno != STACK_POINTER_REGNUM ! #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM ! && regno != HARD_FRAME_POINTER_REGNUM ! #endif ! #if ARG_POINTER_REGNUM != FRAME_POINTER_REGNUM ! && ! (regno == ARG_POINTER_REGNUM && fixed_regs[regno]) ! #endif ! #if defined (PIC_OFFSET_TABLE_REGNUM) && !defined (PIC_OFFSET_TABLE_REG_CALL_CLOBBERED) ! && ! (regno == PIC_OFFSET_TABLE_REGNUM && flag_pic) #endif ! && regno != FRAME_POINTER_REGNUM) ! || global_regs[regno]) record_last_reg_set_info (insn, regno); ! if (! CONST_CALL_P (insn)) ! record_last_mem_set_info (insn); } note_stores (PATTERN (insn), record_last_set_info, insn); --- 2487,2542 ---- compute_hash_table (set_p) int set_p; { ! unsigned int i; /* While we compute the hash table we also compute a bit array of which registers are set in which blocks. ??? This isn't needed during const/copy propagation, but it's cheap to compute. Later. */ sbitmap_vector_zero (reg_set_in_block, n_basic_blocks); + /* re-Cache any INSN_LIST nodes we have allocated. */ + clear_modify_mem_tables (); /* Some working arrays used to track first and last set in each block. */ ! reg_avail_info = (struct reg_avail_info*) ! gmalloc (max_gcse_regno * sizeof (struct reg_avail_info)); ! for (i = 0; i < max_gcse_regno; ++i) ! reg_avail_info[i].last_bb = NEVER_SET; ! ! for (current_bb = 0; current_bb < n_basic_blocks; current_bb++) { rtx insn; unsigned int regno; int in_libcall_block; /* First pass over the instructions records information used to determine when registers and memory are first and last set. ! ??? hard-reg reg_set_in_block computation could be moved to compute_sets since they currently don't change. */ ! for (insn = BLOCK_HEAD (current_bb); ! insn && insn != NEXT_INSN (BLOCK_END (current_bb)); insn = NEXT_INSN (insn)) { if (! INSN_P (insn)) continue; if (GET_CODE (insn) == CALL_INSN) { ! bool clobbers_all = false; ! #ifdef NON_SAVING_SETJMP ! if (NON_SAVING_SETJMP ! && find_reg_note (insn, REG_SETJMP, NULL_RTX)) ! clobbers_all = true; #endif ! for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) ! if (clobbers_all ! || TEST_HARD_REG_BIT (regs_invalidated_by_call, regno)) record_last_reg_set_info (insn, regno); ! mark_call (insn); } note_stores (PATTERN (insn), record_last_set_info, insn); *************** compute_hash_table (set_p) *** 2246,2269 **** /* The next pass builds the hash table. */ ! for (insn = BLOCK_HEAD (bb), in_libcall_block = 0; ! insn && insn != NEXT_INSN (BLOCK_END (bb)); insn = NEXT_INSN (insn)) if (INSN_P (insn)) { if (find_reg_note (insn, REG_LIBCALL, NULL_RTX)) ! in_libcall_block = 1; ! else if (find_reg_note (insn, REG_RETVAL, NULL_RTX)) ! in_libcall_block = 0; ! hash_scan_insn (insn, set_p, in_libcall_block); ! } } ! free (reg_first_set); ! free (reg_last_set); ! ! /* Catch bugs early. */ ! reg_first_set = reg_last_set = 0; } /* Allocate space for the set hash table. --- 2544,2566 ---- /* The next pass builds the hash table. */ ! for (insn = BLOCK_HEAD (current_bb), in_libcall_block = 0; ! insn && insn != NEXT_INSN (BLOCK_END (current_bb)); insn = NEXT_INSN (insn)) if (INSN_P (insn)) { if (find_reg_note (insn, REG_LIBCALL, NULL_RTX)) ! in_libcall_block = 1; ! else if (set_p && find_reg_note (insn, REG_RETVAL, NULL_RTX)) ! in_libcall_block = 0; ! hash_scan_insn (insn, set_p, in_libcall_block); ! if (!set_p && find_reg_note (insn, REG_RETVAL, NULL_RTX)) ! in_libcall_block = 0; ! } } ! free (reg_avail_info); ! reg_avail_info = NULL; } /* Allocate space for the set hash table. *************** compute_set_hash_table () *** 2304,2310 **** /* Initialize count of number of entries in hash table. */ n_sets = 0; memset ((char *) set_hash_table, 0, ! set_hash_table_size * sizeof (struct expr *)); compute_hash_table (1); } --- 2601,2607 ---- /* Initialize count of number of entries in hash table. */ n_sets = 0; memset ((char *) set_hash_table, 0, ! set_hash_table_size * sizeof (struct expr *)); compute_hash_table (1); } *************** compute_expr_hash_table () *** 2348,2354 **** /* Initialize count of number of entries in hash table. */ n_exprs = 0; memset ((char *) expr_hash_table, 0, ! expr_hash_table_size * sizeof (struct expr *)); compute_hash_table (0); } --- 2645,2651 ---- /* Initialize count of number of entries in hash table. */ n_exprs = 0; memset ((char *) expr_hash_table, 0, ! expr_hash_table_size * sizeof (struct expr *)); compute_hash_table (0); } *************** next_set (regno, expr) *** 2420,2425 **** --- 2717,2771 ---- return expr; } + /* Like free_INSN_LIST_list or free_EXPR_LIST_list, except that the node + types may be mixed. */ + + static void + free_insn_expr_list_list (listp) + rtx *listp; + { + rtx list, next; + + for (list = *listp; list ; list = next) + { + next = XEXP (list, 1); + if (GET_CODE (list) == EXPR_LIST) + free_EXPR_LIST_node (list); + else + free_INSN_LIST_node (list); + } + + *listp = NULL; + } + + /* Clear canon_modify_mem_list and modify_mem_list tables. */ + static void + clear_modify_mem_tables () + { + int i; + + EXECUTE_IF_SET_IN_BITMAP + (modify_mem_list_set, 0, i, free_INSN_LIST_list (modify_mem_list + i)); + bitmap_clear (modify_mem_list_set); + + EXECUTE_IF_SET_IN_BITMAP + (canon_modify_mem_list_set, 0, i, + free_insn_expr_list_list (canon_modify_mem_list + i)); + bitmap_clear (canon_modify_mem_list_set); + } + + /* Release memory used by modify_mem_list_set and canon_modify_mem_list_set. */ + + static void + free_modify_mem_tables () + { + clear_modify_mem_tables (); + free (modify_mem_list); + free (canon_modify_mem_list); + modify_mem_list = 0; + canon_modify_mem_list = 0; + } + /* Reset tables used to keep track of what's still available [since the start of the block]. */ *************** reset_opr_set_tables () *** 2428,2439 **** { /* Maintain a bitmap of which regs have been set since beginning of the block. */ ! sbitmap_zero (reg_set_bitmap); /* Also keep a record of the last instruction to modify memory. For now this is very trivial, we only record whether any memory location has been modified. */ ! mem_last_set = 0; } /* Return non-zero if the operands of X are not set before INSN in --- 2774,2785 ---- { /* Maintain a bitmap of which regs have been set since beginning of the block. */ ! CLEAR_REG_SET (reg_set_bitmap); /* Also keep a record of the last instruction to modify memory. For now this is very trivial, we only record whether any memory location has been modified. */ ! clear_modify_mem_tables (); } /* Return non-zero if the operands of X are not set before INSN in *************** oprs_not_set_p (x, insn) *** 2458,2463 **** --- 2804,2810 ---- case CONST: case CONST_INT: case CONST_DOUBLE: + case CONST_VECTOR: case SYMBOL_REF: case LABEL_REF: case ADDR_VEC: *************** oprs_not_set_p (x, insn) *** 2465,2477 **** return 1; case MEM: ! if (mem_last_set != 0) return 0; else return oprs_not_set_p (XEXP (x, 0), insn); case REG: ! return ! TEST_BIT (reg_set_bitmap, REGNO (x)); default: break; --- 2812,2825 ---- return 1; case MEM: ! if (load_killed_in_block_p (BLOCK_FOR_INSN (insn), ! INSN_CUID (insn), x, 0)) return 0; else return oprs_not_set_p (XEXP (x, 0), insn); case REG: ! return ! REGNO_REG_SET_P (reg_set_bitmap, REGNO (x)); default: break; *************** static void *** 2505,2511 **** mark_call (insn) rtx insn; { ! mem_last_set = INSN_CUID (insn); } /* Mark things set by a SET. */ --- 2853,2860 ---- mark_call (insn) rtx insn; { ! if (! CONST_OR_PURE_CALL_P (insn)) ! record_last_mem_set_info (insn); } /* Mark things set by a SET. */ *************** mark_set (pat, insn) *** 2523,2531 **** dest = XEXP (dest, 0); if (GET_CODE (dest) == REG) ! SET_BIT (reg_set_bitmap, REGNO (dest)); else if (GET_CODE (dest) == MEM) ! mem_last_set = INSN_CUID (insn); if (GET_CODE (SET_SRC (pat)) == CALL) mark_call (insn); --- 2872,2880 ---- dest = XEXP (dest, 0); if (GET_CODE (dest) == REG) ! SET_REGNO_REG_SET (reg_set_bitmap, REGNO (dest)); else if (GET_CODE (dest) == MEM) ! record_last_mem_set_info (insn); if (GET_CODE (SET_SRC (pat)) == CALL) mark_call (insn); *************** mark_clobber (pat, insn) *** 2543,2551 **** clob = XEXP (clob, 0); if (GET_CODE (clob) == REG) ! SET_BIT (reg_set_bitmap, REGNO (clob)); else ! mem_last_set = INSN_CUID (insn); } /* Record things set by INSN. --- 2892,2900 ---- clob = XEXP (clob, 0); if (GET_CODE (clob) == REG) ! SET_REGNO_REG_SET (reg_set_bitmap, REGNO (clob)); else ! record_last_mem_set_info (insn); } /* Record things set by INSN. *************** alloc_rd_mem (n_blocks, n_insns) *** 2606,2615 **** static void free_rd_mem () { ! free (rd_kill); ! free (rd_gen); ! free (reaching_defs); ! free (rd_out); } /* Add INSN to the kills of BB. REGNO, set in BB, is killed by INSN. */ --- 2955,2964 ---- static void free_rd_mem () { ! sbitmap_vector_free (rd_kill); ! sbitmap_vector_free (rd_gen); ! sbitmap_vector_free (reaching_defs); ! sbitmap_vector_free (rd_out); } /* Add INSN to the kills of BB. REGNO, set in BB, is killed by INSN. */ *************** free_rd_mem () *** 2617,2629 **** static void handle_rd_kill_set (insn, regno, bb) rtx insn; ! int regno, bb; { struct reg_set *this_reg; for (this_reg = reg_set_table[regno]; this_reg; this_reg = this_reg ->next) if (BLOCK_NUM (this_reg->insn) != BLOCK_NUM (insn)) ! SET_BIT (rd_kill[bb], INSN_CUID (this_reg->insn)); } /* Compute the set of kill's for reaching definitions. */ --- 2966,2979 ---- static void handle_rd_kill_set (insn, regno, bb) rtx insn; ! int regno; ! basic_block bb; { struct reg_set *this_reg; for (this_reg = reg_set_table[regno]; this_reg; this_reg = this_reg ->next) if (BLOCK_NUM (this_reg->insn) != BLOCK_NUM (insn)) ! SET_BIT (rd_kill[bb->index], INSN_CUID (this_reg->insn)); } /* Compute the set of kill's for reaching definitions. */ *************** static void *** 2632,2638 **** compute_kill_rd () { int bb, cuid; ! int regno, i; /* For each block For each set bit in `gen' of the block (i.e each insn which --- 2982,2989 ---- compute_kill_rd () { int bb, cuid; ! unsigned int regno; ! int i; /* For each block For each set bit in `gen' of the block (i.e each insn which *************** compute_kill_rd () *** 2641,2647 **** Look at the linked list starting at reg_set_table[regx] For each setting of regx in the linked list, which is not in this block ! Set the bit in `kill' corresponding to that insn. */ for (bb = 0; bb < n_basic_blocks; bb++) for (cuid = 0; cuid < max_cuid; cuid++) if (TEST_BIT (rd_gen[bb], cuid)) --- 2992,2998 ---- Look at the linked list starting at reg_set_table[regx] For each setting of regx in the linked list, which is not in this block ! Set the bit in `kill' corresponding to that insn. */ for (bb = 0; bb < n_basic_blocks; bb++) for (cuid = 0; cuid < max_cuid; cuid++) if (TEST_BIT (rd_gen[bb], cuid)) *************** compute_kill_rd () *** 2652,2674 **** if (GET_CODE (insn) == CALL_INSN) { for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) ! { ! if ((call_used_regs[regno] ! && regno != STACK_POINTER_REGNUM ! #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM ! && regno != HARD_FRAME_POINTER_REGNUM ! #endif ! #if ARG_POINTER_REGNUM != FRAME_POINTER_REGNUM ! && ! (regno == ARG_POINTER_REGNUM ! && fixed_regs[regno]) ! #endif ! #if defined (PIC_OFFSET_TABLE_REGNUM) && !defined (PIC_OFFSET_TABLE_REG_CALL_CLOBBERED) ! && ! (regno == PIC_OFFSET_TABLE_REGNUM && flag_pic) ! #endif ! && regno != FRAME_POINTER_REGNUM) ! || global_regs[regno]) ! handle_rd_kill_set (insn, regno, bb); ! } } if (GET_CODE (pat) == PARALLEL) --- 3003,3010 ---- if (GET_CODE (insn) == CALL_INSN) { for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) ! if (TEST_HARD_REG_BIT (regs_invalidated_by_call, regno)) ! handle_rd_kill_set (insn, regno, BASIC_BLOCK (bb)); } if (GET_CODE (pat) == PARALLEL) *************** compute_kill_rd () *** 2681,2693 **** && GET_CODE (XEXP (XVECEXP (pat, 0, i), 0)) == REG) handle_rd_kill_set (insn, REGNO (XEXP (XVECEXP (pat, 0, i), 0)), ! bb); } } else if (GET_CODE (pat) == SET && GET_CODE (SET_DEST (pat)) == REG) /* Each setting of this register outside of this block must be marked in the set of kills in this block. */ ! handle_rd_kill_set (insn, REGNO (SET_DEST (pat)), bb); } } --- 3017,3029 ---- && GET_CODE (XEXP (XVECEXP (pat, 0, i), 0)) == REG) handle_rd_kill_set (insn, REGNO (XEXP (XVECEXP (pat, 0, i), 0)), ! BASIC_BLOCK (bb)); } } else if (GET_CODE (pat) == SET && GET_CODE (SET_DEST (pat)) == REG) /* Each setting of this register outside of this block must be marked in the set of kills in this block. */ ! handle_rd_kill_set (insn, REGNO (SET_DEST (pat)), BASIC_BLOCK (bb)); } } *************** alloc_avail_expr_mem (n_blocks, n_exprs) *** 2746,2755 **** static void free_avail_expr_mem () { ! free (ae_kill); ! free (ae_gen); ! free (ae_in); ! free (ae_out); } /* Compute the set of available expressions generated in each basic block. */ --- 3082,3091 ---- static void free_avail_expr_mem () { ! sbitmap_vector_free (ae_kill); ! sbitmap_vector_free (ae_gen); ! sbitmap_vector_free (ae_in); ! sbitmap_vector_free (ae_out); } /* Compute the set of available expressions generated in each basic block. */ *************** compute_ae_gen () *** 2776,2782 **** static int expr_killed_p (x, bb) rtx x; ! int bb; { int i, j; enum rtx_code code; --- 3112,3118 ---- static int expr_killed_p (x, bb) rtx x; ! basic_block bb; { int i, j; enum rtx_code code; *************** expr_killed_p (x, bb) *** 2789,2798 **** switch (code) { case REG: ! return TEST_BIT (reg_set_in_block[bb], REGNO (x)); case MEM: ! if (mem_set_in_block[bb]) return 1; else return expr_killed_p (XEXP (x, 0), bb); --- 3125,3134 ---- switch (code) { case REG: ! return TEST_BIT (reg_set_in_block[bb->index], REGNO (x)); case MEM: ! if (load_killed_in_block_p (bb, get_max_uid () + 1, x, 0)) return 1; else return expr_killed_p (XEXP (x, 0), bb); *************** expr_killed_p (x, bb) *** 2802,2807 **** --- 3138,3144 ---- case CONST: case CONST_INT: case CONST_DOUBLE: + case CONST_VECTOR: case SYMBOL_REF: case LABEL_REF: case ADDR_VEC: *************** compute_ae_kill (ae_gen, ae_kill) *** 2851,2857 **** if (TEST_BIT (ae_gen[bb], expr->bitmap_index)) continue; ! if (expr_killed_p (expr->expr, bb)) SET_BIT (ae_kill[bb], expr->bitmap_index); } } --- 3188,3194 ---- if (TEST_BIT (ae_gen[bb], expr->bitmap_index)) continue; ! if (expr_killed_p (expr->expr, BASIC_BLOCK (bb))) SET_BIT (ae_kill[bb], expr->bitmap_index); } } *************** static int *** 2878,2927 **** expr_reaches_here_p_work (occr, expr, bb, check_self_loop, visited) struct occr *occr; struct expr *expr; ! int bb; int check_self_loop; char *visited; { edge pred; ! for (pred = BASIC_BLOCK(bb)->pred; pred != NULL; pred = pred->pred_next) { ! int pred_bb = pred->src->index; ! if (visited[pred_bb]) /* This predecessor has already been visited. Nothing to do. */ ; else if (pred_bb == bb) { /* BB loops on itself. */ if (check_self_loop ! && TEST_BIT (ae_gen[pred_bb], expr->bitmap_index) ! && BLOCK_NUM (occr->insn) == pred_bb) return 1; ! visited[pred_bb] = 1; } /* Ignore this predecessor if it kills the expression. */ ! else if (TEST_BIT (ae_kill[pred_bb], expr->bitmap_index)) ! visited[pred_bb] = 1; /* Does this predecessor generate this expression? */ ! else if (TEST_BIT (ae_gen[pred_bb], expr->bitmap_index)) { /* Is this the occurrence we're looking for? Note that there's only one generating occurrence per block so we just need to check the block number. */ ! if (BLOCK_NUM (occr->insn) == pred_bb) return 1; ! visited[pred_bb] = 1; } /* Neither gen nor kill. */ else { ! visited[pred_bb] = 1; if (expr_reaches_here_p_work (occr, expr, pred_bb, check_self_loop, visited)) --- 3215,3264 ---- expr_reaches_here_p_work (occr, expr, bb, check_self_loop, visited) struct occr *occr; struct expr *expr; ! basic_block bb; int check_self_loop; char *visited; { edge pred; ! for (pred = bb->pred; pred != NULL; pred = pred->pred_next) { ! basic_block pred_bb = pred->src; ! if (visited[pred_bb->index]) /* This predecessor has already been visited. Nothing to do. */ ; else if (pred_bb == bb) { /* BB loops on itself. */ if (check_self_loop ! && TEST_BIT (ae_gen[pred_bb->index], expr->bitmap_index) ! && BLOCK_NUM (occr->insn) == pred_bb->index) return 1; ! visited[pred_bb->index] = 1; } /* Ignore this predecessor if it kills the expression. */ ! else if (TEST_BIT (ae_kill[pred_bb->index], expr->bitmap_index)) ! visited[pred_bb->index] = 1; /* Does this predecessor generate this expression? */ ! else if (TEST_BIT (ae_gen[pred_bb->index], expr->bitmap_index)) { /* Is this the occurrence we're looking for? Note that there's only one generating occurrence per block so we just need to check the block number. */ ! if (BLOCK_NUM (occr->insn) == pred_bb->index) return 1; ! visited[pred_bb->index] = 1; } /* Neither gen nor kill. */ else { ! visited[pred_bb->index] = 1; if (expr_reaches_here_p_work (occr, expr, pred_bb, check_self_loop, visited)) *************** expr_reaches_here_p_work (occr, expr, bb *** 2934,2946 **** } /* This wrapper for expr_reaches_here_p_work() is to ensure that any ! memory allocated for that function is returned. */ static int expr_reaches_here_p (occr, expr, bb, check_self_loop) struct occr *occr; struct expr *expr; ! int bb; int check_self_loop; { int rval; --- 3271,3283 ---- } /* This wrapper for expr_reaches_here_p_work() is to ensure that any ! memory allocated for that function is returned. */ static int expr_reaches_here_p (occr, expr, bb, check_self_loop) struct occr *occr; struct expr *expr; ! basic_block bb; int check_self_loop; { int rval; *************** computing_insn (expr, insn) *** 2962,2972 **** struct expr *expr; rtx insn; { ! int bb = BLOCK_NUM (insn); if (expr->avail_occr->next == NULL) { ! if (BLOCK_NUM (expr->avail_occr->insn) == bb) /* The available expression is actually itself (i.e. a loop in the flow graph) so do nothing. */ return NULL; --- 3299,3309 ---- struct expr *expr; rtx insn; { ! basic_block bb = BLOCK_FOR_INSN (insn); if (expr->avail_occr->next == NULL) { ! if (BLOCK_FOR_INSN (expr->avail_occr->insn) == bb) /* The available expression is actually itself (i.e. a loop in the flow graph) so do nothing. */ return NULL; *************** computing_insn (expr, insn) *** 2986,2992 **** for (occr = expr->avail_occr; occr != NULL; occr = occr->next) { ! if (BLOCK_NUM (occr->insn) == bb) { /* The expression is generated in this block. The only time we care about this is when the expression --- 3323,3329 ---- for (occr = expr->avail_occr; occr != NULL; occr = occr->next) { ! if (BLOCK_FOR_INSN (occr->insn) == bb) { /* The expression is generated in this block. The only time we care about this is when the expression *************** handle_avail_expr (insn, expr) *** 3112,3118 **** rtx insn; struct expr *expr; { ! rtx pat, insn_computes_expr; rtx to; struct reg_set *this_reg; int found_setting, use_src; --- 3449,3455 ---- rtx insn; struct expr *expr; { ! rtx pat, insn_computes_expr, expr_set; rtx to; struct reg_set *this_reg; int found_setting, use_src; *************** handle_avail_expr (insn, expr) *** 3123,3128 **** --- 3460,3468 ---- insn_computes_expr = computing_insn (expr, insn); if (insn_computes_expr == NULL) return 0; + expr_set = single_set (insn_computes_expr); + if (!expr_set) + abort (); found_setting = 0; use_src = 0; *************** handle_avail_expr (insn, expr) *** 3130,3141 **** /* At this point we know only one computation of EXPR outside of this block reaches this insn. Now try to find a register that the expression is computed into. */ ! if (GET_CODE (SET_SRC (PATTERN (insn_computes_expr))) == REG) { /* This is the case when the available expression that reaches here has already been handled as an available expression. */ unsigned int regnum_for_replacing ! = REGNO (SET_SRC (PATTERN (insn_computes_expr))); /* If the register was created by GCSE we can't use `reg_set_table', however we know it's set only once. */ --- 3470,3481 ---- /* At this point we know only one computation of EXPR outside of this block reaches this insn. Now try to find a register that the expression is computed into. */ ! if (GET_CODE (SET_SRC (expr_set)) == REG) { /* This is the case when the available expression that reaches here has already been handled as an available expression. */ unsigned int regnum_for_replacing ! = REGNO (SET_SRC (expr_set)); /* If the register was created by GCSE we can't use `reg_set_table', however we know it's set only once. */ *************** handle_avail_expr (insn, expr) *** 3145,3160 **** || (((this_reg = reg_set_table[regnum_for_replacing]), this_reg->next == NULL) || can_disregard_other_sets (&this_reg, insn, 0))) ! { ! use_src = 1; ! found_setting = 1; ! } } if (!found_setting) { unsigned int regnum_for_replacing ! = REGNO (SET_DEST (PATTERN (insn_computes_expr))); /* This shouldn't happen. */ if (regnum_for_replacing >= max_gcse_regno) --- 3485,3500 ---- || (((this_reg = reg_set_table[regnum_for_replacing]), this_reg->next == NULL) || can_disregard_other_sets (&this_reg, insn, 0))) ! { ! use_src = 1; ! found_setting = 1; ! } } if (!found_setting) { unsigned int regnum_for_replacing ! = REGNO (SET_DEST (expr_set)); /* This shouldn't happen. */ if (regnum_for_replacing >= max_gcse_regno) *************** handle_avail_expr (insn, expr) *** 3173,3181 **** { pat = PATTERN (insn); if (use_src) ! to = SET_SRC (PATTERN (insn_computes_expr)); else ! to = SET_DEST (PATTERN (insn_computes_expr)); changed = validate_change (insn, &SET_SRC (pat), to, 0); /* We should be able to ignore the return code from validate_change but --- 3513,3521 ---- { pat = PATTERN (insn); if (use_src) ! to = SET_SRC (expr_set); else ! to = SET_DEST (expr_set); changed = validate_change (insn, &SET_SRC (pat), to, 0); /* We should be able to ignore the return code from validate_change but *************** handle_avail_expr (insn, expr) *** 3203,3222 **** replace all uses of REGB with REGN. */ rtx new_insn; ! to = gen_reg_rtx (GET_MODE (SET_DEST (PATTERN (insn_computes_expr)))); /* Generate the new insn. */ /* ??? If the change fails, we return 0, even though we created an insn. I think this is ok. */ new_insn = emit_insn_after (gen_rtx_SET (VOIDmode, to, ! SET_DEST (PATTERN ! (insn_computes_expr))), insn_computes_expr); - /* Keep block number table up to date. */ - set_block_num (new_insn, BLOCK_NUM (insn_computes_expr)); - /* Keep register set table up to date. */ record_one_set (REGNO (to), new_insn); --- 3543,3558 ---- replace all uses of REGB with REGN. */ rtx new_insn; ! to = gen_reg_rtx (GET_MODE (SET_DEST (expr_set))); /* Generate the new insn. */ /* ??? If the change fails, we return 0, even though we created an insn. I think this is ok. */ new_insn = emit_insn_after (gen_rtx_SET (VOIDmode, to, ! SET_DEST (expr_set)), insn_computes_expr); /* Keep register set table up to date. */ record_one_set (REGNO (to), new_insn); *************** alloc_cprop_mem (n_blocks, n_sets) *** 3392,3401 **** static void free_cprop_mem () { ! free (cprop_pavloc); ! free (cprop_absaltered); ! free (cprop_avin); ! free (cprop_avout); } /* For each block, compute whether X is transparent. X is either an --- 3728,3737 ---- static void free_cprop_mem () { ! sbitmap_vector_free (cprop_pavloc); ! sbitmap_vector_free (cprop_absaltered); ! sbitmap_vector_free (cprop_avin); ! sbitmap_vector_free (cprop_avout); } /* For each block, compute whether X is transparent. X is either an *************** compute_transp (x, indx, bmap, set_p) *** 3459,3475 **** return; case MEM: ! if (set_p) ! { ! for (bb = 0; bb < n_basic_blocks; bb++) ! if (mem_set_in_block[bb]) ! SET_BIT (bmap[bb], indx); ! } ! else { ! for (bb = 0; bb < n_basic_blocks; bb++) ! if (mem_set_in_block[bb]) ! RESET_BIT (bmap[bb], indx); } x = XEXP (x, 0); --- 3795,3834 ---- return; case MEM: ! for (bb = 0; bb < n_basic_blocks; bb++) { ! rtx list_entry = canon_modify_mem_list[bb]; ! ! while (list_entry) ! { ! rtx dest, dest_addr; ! ! if (GET_CODE (XEXP (list_entry, 0)) == CALL_INSN) ! { ! if (set_p) ! SET_BIT (bmap[bb], indx); ! else ! RESET_BIT (bmap[bb], indx); ! break; ! } ! /* LIST_ENTRY must be an INSN of some kind that sets memory. ! Examine each hunk of memory that is modified. */ ! ! dest = XEXP (list_entry, 0); ! list_entry = XEXP (list_entry, 1); ! dest_addr = XEXP (list_entry, 0); ! ! if (canon_true_dependence (dest, GET_MODE (dest), dest_addr, ! x, rtx_addr_varies_p)) ! { ! if (set_p) ! SET_BIT (bmap[bb], indx); ! else ! RESET_BIT (bmap[bb], indx); ! break; ! } ! list_entry = XEXP (list_entry, 1); ! } } x = XEXP (x, 0); *************** compute_transp (x, indx, bmap, set_p) *** 3480,3485 **** --- 3839,3845 ---- case CONST: case CONST_INT: case CONST_DOUBLE: + case CONST_VECTOR: case SYMBOL_REF: case LABEL_REF: case ADDR_VEC: *************** static int reg_use_count; *** 3542,3597 **** This doesn't hurt anything but it will slow things down. */ static void ! find_used_regs (x) ! rtx x; { int i, j; enum rtx_code code; const char *fmt; /* repeat is used to turn tail-recursion into iteration since GCC can't do it when there's no return value. */ repeat: - if (x == 0) return; code = GET_CODE (x); ! switch (code) { - case REG: if (reg_use_count == MAX_USES) return; reg_use_table[reg_use_count].reg_rtx = x; reg_use_count++; - return; - - case MEM: - x = XEXP (x, 0); - goto repeat; - - case PC: - case CC0: - case CONST: - case CONST_INT: - case CONST_DOUBLE: - case SYMBOL_REF: - case LABEL_REF: - case CLOBBER: - case ADDR_VEC: - case ADDR_DIFF_VEC: - case ASM_INPUT: /*FIXME*/ - return; - - case SET: - if (GET_CODE (SET_DEST (x)) == MEM) - find_used_regs (SET_DEST (x)); - x = SET_SRC (x); - goto repeat; - - default: - break; } /* Recursively scan the operands of this expression. */ --- 3902,3930 ---- This doesn't hurt anything but it will slow things down. */ static void ! find_used_regs (xptr, data) ! rtx *xptr; ! void *data ATTRIBUTE_UNUSED; { int i, j; enum rtx_code code; const char *fmt; + rtx x = *xptr; /* repeat is used to turn tail-recursion into iteration since GCC can't do it when there's no return value. */ repeat: if (x == 0) return; code = GET_CODE (x); ! if (REG_P (x)) { if (reg_use_count == MAX_USES) return; reg_use_table[reg_use_count].reg_rtx = x; reg_use_count++; } /* Recursively scan the operands of this expression. */ *************** find_used_regs (x) *** 3609,3619 **** goto repeat; } ! find_used_regs (XEXP (x, i)); } else if (fmt[i] == 'E') for (j = 0; j < XVECLEN (x, i); j++) ! find_used_regs (XVECEXP (x, i, j)); } } --- 3942,3952 ---- goto repeat; } ! find_used_regs (&XEXP (x, i), data); } else if (fmt[i] == 'E') for (j = 0; j < XVECLEN (x, i); j++) ! find_used_regs (&XVECEXP (x, i, j), data); } } *************** static int *** 3624,3686 **** try_replace_reg (from, to, insn) rtx from, to, insn; { ! rtx note; ! rtx src; ! int success; ! rtx set; ! ! note = find_reg_note (insn, REG_EQUAL, NULL_RTX); ! ! if (!note) ! note = find_reg_note (insn, REG_EQUIV, NULL_RTX); ! ! /* If this fails we could try to simplify the result of the ! replacement and attempt to recognize the simplified insn. ! ! But we need a general simplify_rtx that doesn't have pass ! specific state variables. I'm not aware of one at the moment. */ success = validate_replace_src (from, to, insn); - set = single_set (insn); ! /* We've failed to do replacement. Try to add REG_EQUAL note to not loose ! information. */ ! if (!success && !note) { ! if (!set) ! return 0; ! note = REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_EQUAL, ! copy_rtx (SET_SRC (set)), ! REG_NOTES (insn)); } ! /* Always do the replacement in REQ_EQUAL and REG_EQUIV notes. Also ! try to simplify them. */ ! if (note) ! { ! rtx simplified; ! ! if (!validate_replace_rtx_subexp (from, to, insn, &XEXP (note, 0))) ! abort(); ! src = XEXP (note, 0); ! /* Try to simplify resulting note. */ ! simplified = simplify_rtx (src); ! if (simplified) ! { ! src = simplified; ! XEXP (note, 0) = src; ! } - /* REG_EQUAL may get simplified into register. - We don't allow that. Remove that note. This code ought - not to hapen, because previous code ought to syntetize - reg-reg move, but be on the safe side. */ - else if (REG_P (src)) - remove_note (insn, note); - } return success; } --- 3957,3998 ---- try_replace_reg (from, to, insn) rtx from, to, insn; { ! rtx note = find_reg_equal_equiv_note (insn); ! rtx src = 0; ! int success = 0; ! rtx set = single_set (insn); success = validate_replace_src (from, to, insn); ! /* If above failed and this is a single set, try to simplify the source of ! the set given our substitution. We could perhaps try this for multiple ! SETs, but it probably won't buy us anything. */ ! if (!success && set != 0) { ! src = simplify_replace_rtx (SET_SRC (set), from, to); ! if (!rtx_equal_p (src, SET_SRC (set)) ! && validate_change (insn, &SET_SRC (set), src, 0)) ! success = 1; } ! /* If we've failed to do replacement, have a single SET, and don't already ! have a note, add a REG_EQUAL note to not lose information. */ ! if (!success && note == 0 && set != 0) ! note = set_unique_reg_note (insn, REG_EQUAL, copy_rtx (src)); ! /* If there is already a NOTE, update the expression in it with our ! replacement. */ ! else if (note != 0) ! XEXP (note, 0) = simplify_replace_rtx (XEXP (note, 0), from, to); ! /* REG_EQUAL may get simplified into register. ! We don't allow that. Remove that note. This code ought ! not to hapen, because previous code ought to syntetize ! reg-reg move, but be on the safe side. */ ! if (note && REG_P (XEXP (note, 0))) ! remove_note (insn, note); return success; } *************** find_avail_set (regno, insn) *** 3706,3712 **** This can not happen since the set of (reg Y) would have killed the set of (reg X) making it unavailable at the start of this block. */ while (1) ! { rtx src; struct expr *set = lookup_set (regno, NULL_RTX); --- 4018,4024 ---- This can not happen since the set of (reg Y) would have killed the set of (reg X) making it unavailable at the start of this block. */ while (1) ! { rtx src; struct expr *set = lookup_set (regno, NULL_RTX); *************** find_avail_set (regno, insn) *** 3747,3753 **** /* Follow the copy chain, ie start another iteration of the loop and see if we have an available copy into SRC. */ regno = REGNO (src); ! } /* SET1 holds the last set that was available and anticipatable at INSN. */ --- 4059,4065 ---- /* Follow the copy chain, ie start another iteration of the loop and see if we have an available copy into SRC. */ regno = REGNO (src); ! } /* SET1 holds the last set that was available and anticipatable at INSN. */ *************** find_avail_set (regno, insn) *** 3755,3836 **** } /* Subroutine of cprop_insn that tries to propagate constants into ! JUMP_INSNS. INSN must be a conditional jump; COPY is a copy of it ! that we can use for substitutions. ! REG_USED is the use we will try to replace, SRC is the constant we ! will try to substitute for it. ! Returns nonzero if a change was made. */ static int ! cprop_jump (insn, copy, reg_used, src) ! rtx insn, copy; ! struct reg_use *reg_used; rtx src; { ! rtx set = PATTERN (copy); ! rtx temp; ! ! /* Replace the register with the appropriate constant. */ ! replace_rtx (SET_SRC (set), reg_used->reg_rtx, src); ! ! temp = simplify_ternary_operation (GET_CODE (SET_SRC (set)), ! GET_MODE (SET_SRC (set)), ! GET_MODE (XEXP (SET_SRC (set), 0)), ! XEXP (SET_SRC (set), 0), ! XEXP (SET_SRC (set), 1), ! XEXP (SET_SRC (set), 2)); /* If no simplification can be made, then try the next register. */ ! if (temp == 0) return 0; ! SET_SRC (set) = temp; ! ! /* That may have changed the structure of TEMP, so ! force it to be rerecognized if it has not turned ! into a nop or unconditional jump. */ ! ! INSN_CODE (copy) = -1; ! if ((SET_DEST (set) == pc_rtx ! && (SET_SRC (set) == pc_rtx ! || GET_CODE (SET_SRC (set)) == LABEL_REF)) ! || recog (PATTERN (copy), copy, NULL) >= 0) { ! /* This has either become an unconditional jump ! or a nop-jump. We'd like to delete nop jumps ! here, but doing so confuses gcse. So we just ! make the replacement and let later passes ! sort things out. */ ! PATTERN (insn) = set; ! INSN_CODE (insn) = -1; ! ! /* One less use of the label this insn used to jump to ! if we turned this into a NOP jump. */ ! if (SET_SRC (set) == pc_rtx && JUMP_LABEL (insn) != 0) ! --LABEL_NUSES (JUMP_LABEL (insn)); /* If this has turned into an unconditional jump, then put a barrier after it so that the unreachable code will be deleted. */ if (GET_CODE (SET_SRC (set)) == LABEL_REF) emit_barrier_after (insn); ! run_jump_opt_after_gcse = 1; ! ! const_prop_count++; ! if (gcse_file != NULL) ! { ! fprintf (gcse_file, ! "CONST-PROP: Replacing reg %d in insn %d with constant ", ! REGNO (reg_used->reg_rtx), INSN_UID (insn)); ! print_rtl (gcse_file, src); ! fprintf (gcse_file, "\n"); ! } ! return 1; } ! return 0; } #ifdef HAVE_cc0 --- 4067,4120 ---- } /* Subroutine of cprop_insn that tries to propagate constants into ! JUMP_INSNS. INSN must be a conditional jump. FROM is what we will try to ! replace, SRC is the constant we will try to substitute for it. Returns ! nonzero if a change was made. We know INSN has just a SET. */ static int ! cprop_jump (bb, insn, from, src) ! rtx insn; ! rtx from; rtx src; + basic_block bb; { ! rtx set = PATTERN (insn); ! rtx new = simplify_replace_rtx (SET_SRC (set), from, src); /* If no simplification can be made, then try the next register. */ ! if (rtx_equal_p (new, SET_SRC (set))) return 0; ! /* If this is now a no-op delete it, otherwise this must be a valid insn. */ ! if (new == pc_rtx) ! delete_insn (insn); ! else { ! if (! validate_change (insn, &SET_SRC (set), new, 0)) ! return 0; /* If this has turned into an unconditional jump, then put a barrier after it so that the unreachable code will be deleted. */ if (GET_CODE (SET_SRC (set)) == LABEL_REF) emit_barrier_after (insn); + } ! run_jump_opt_after_gcse = 1; ! const_prop_count++; ! if (gcse_file != NULL) ! { ! fprintf (gcse_file, ! "CONST-PROP: Replacing reg %d in insn %d with constant ", ! REGNO (from), INSN_UID (insn)); ! print_rtl (gcse_file, src); ! fprintf (gcse_file, "\n"); } ! purge_dead_edges (bb); ! ! return 1; } #ifdef HAVE_cc0 *************** cprop_jump (insn, copy, reg_used, src) *** 3842,3875 **** Returns nonzero if a change was made. */ static int ! cprop_cc0_jump (insn, reg_used, src) rtx insn; struct reg_use *reg_used; rtx src; { rtx jump = NEXT_INSN (insn); ! rtx copy = copy_rtx (jump); ! rtx set = PATTERN (copy); ! /* We need to copy the source of the cc0 setter, as cprop_jump is going to ! substitute into it. */ ! replace_rtx (SET_SRC (set), cc0_rtx, copy_rtx (SET_SRC (PATTERN (insn)))); ! if (! cprop_jump (jump, copy, reg_used, src)) return 0; /* If we succeeded, delete the cc0 setter. */ ! PUT_CODE (insn, NOTE); ! NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED; ! NOTE_SOURCE_FILE (insn) = 0; return 1; ! } #endif /* Perform constant and copy propagation on INSN. The result is non-zero if a change was made. */ static int ! cprop_insn (insn, alter_jumps) rtx insn; int alter_jumps; { --- 4126,4159 ---- Returns nonzero if a change was made. */ static int ! cprop_cc0_jump (bb, insn, reg_used, src) ! basic_block bb; rtx insn; struct reg_use *reg_used; rtx src; { + /* First substitute in the SET_SRC of INSN, then substitute that for + CC0 in JUMP. */ rtx jump = NEXT_INSN (insn); ! rtx new_src = simplify_replace_rtx (SET_SRC (PATTERN (insn)), ! reg_used->reg_rtx, src); ! if (! cprop_jump (bb, jump, cc0_rtx, new_src)) return 0; /* If we succeeded, delete the cc0 setter. */ ! delete_insn (insn); ! return 1; ! } #endif /* Perform constant and copy propagation on INSN. The result is non-zero if a change was made. */ static int ! cprop_insn (bb, insn, alter_jumps) ! basic_block bb; rtx insn; int alter_jumps; { *************** cprop_insn (insn, alter_jumps) *** 3877,3899 **** int changed = 0; rtx note; ! /* Only propagate into SETs. Note that a conditional jump is a ! SET with pc_rtx as the destination. */ ! if ((GET_CODE (insn) != INSN ! && GET_CODE (insn) != JUMP_INSN) ! || GET_CODE (PATTERN (insn)) != SET) return 0; reg_use_count = 0; ! find_used_regs (PATTERN (insn)); ! note = find_reg_note (insn, REG_EQUIV, NULL_RTX); ! if (!note) ! note = find_reg_note (insn, REG_EQUAL, NULL_RTX); ! /* We may win even when propagating constants into notes. */ if (note) ! find_used_regs (XEXP (note, 0)); for (reg_used = ®_use_table[0]; reg_use_count > 0; reg_used++, reg_use_count--) --- 4161,4177 ---- int changed = 0; rtx note; ! if (!INSN_P (insn)) return 0; reg_use_count = 0; ! note_uses (&PATTERN (insn), find_used_regs, NULL); ! note = find_reg_equal_equiv_note (insn); ! /* We may win even when propagating constants into notes. */ if (note) ! find_used_regs (&XEXP (note, 0), NULL); for (reg_used = ®_use_table[0]; reg_use_count > 0; reg_used++, reg_use_count--) *************** cprop_insn (insn, alter_jumps) *** 3903,3909 **** struct expr *set; /* Ignore registers created by GCSE. ! We do this because ... */ if (regno >= max_gcse_regno) continue; --- 4181,4187 ---- struct expr *set; /* Ignore registers created by GCSE. ! We do this because ... */ if (regno >= max_gcse_regno) continue; *************** cprop_insn (insn, alter_jumps) *** 3926,3933 **** src = SET_SRC (pat); /* Constant propagation. */ ! if (GET_CODE (src) == CONST_INT || GET_CODE (src) == CONST_DOUBLE ! || GET_CODE (src) == SYMBOL_REF) { /* Handle normal insns first. */ if (GET_CODE (insn) == INSN --- 4204,4210 ---- src = SET_SRC (pat); /* Constant propagation. */ ! if (CONSTANT_P (src)) { /* Handle normal insns first. */ if (GET_CODE (insn) == INSN *************** cprop_insn (insn, alter_jumps) *** 3959,3965 **** && GET_CODE (insn) == JUMP_INSN && condjump_p (insn) && ! simplejump_p (insn)) ! changed |= cprop_jump (insn, copy_rtx (insn), reg_used, src); #ifdef HAVE_cc0 /* Similar code for machines that use a pair of CC0 setter and conditional jump insn. */ --- 4236,4243 ---- && GET_CODE (insn) == JUMP_INSN && condjump_p (insn) && ! simplejump_p (insn)) ! changed |= cprop_jump (bb, insn, reg_used->reg_rtx, src); ! #ifdef HAVE_cc0 /* Similar code for machines that use a pair of CC0 setter and conditional jump insn. */ *************** cprop_insn (insn, alter_jumps) *** 3968,3980 **** && SET_DEST (PATTERN (insn)) == cc0_rtx && GET_CODE (NEXT_INSN (insn)) == JUMP_INSN && condjump_p (NEXT_INSN (insn)) ! && ! simplejump_p (NEXT_INSN (insn))) ! { ! if (cprop_cc0_jump (insn, reg_used, src)) ! { ! changed = 1; ! break; ! } } #endif } --- 4246,4256 ---- && SET_DEST (PATTERN (insn)) == cc0_rtx && GET_CODE (NEXT_INSN (insn)) == JUMP_INSN && condjump_p (NEXT_INSN (insn)) ! && ! simplejump_p (NEXT_INSN (insn)) ! && cprop_cc0_jump (bb, insn, reg_used, src)) ! { ! changed = 1; ! break; } #endif } *************** cprop (alter_jumps) *** 4027,4044 **** for (insn = BLOCK_HEAD (bb); insn != NULL && insn != NEXT_INSN (BLOCK_END (bb)); insn = NEXT_INSN (insn)) ! { ! if (INSN_P (insn)) ! { ! changed |= cprop_insn (insn, alter_jumps); ! /* Keep track of everything modified by this insn. */ ! /* ??? Need to be careful w.r.t. mods done to INSN. Don't ! call mark_oprs_set if we turned the insn into a NOTE. */ ! if (GET_CODE (insn) != NOTE) ! mark_oprs_set (insn); ! } ! } } if (gcse_file != NULL) --- 4303,4318 ---- for (insn = BLOCK_HEAD (bb); insn != NULL && insn != NEXT_INSN (BLOCK_END (bb)); insn = NEXT_INSN (insn)) ! if (INSN_P (insn)) ! { ! changed |= cprop_insn (BASIC_BLOCK (bb), insn, alter_jumps); ! /* Keep track of everything modified by this insn. */ ! /* ??? Need to be careful w.r.t. mods done to INSN. Don't ! call mark_oprs_set if we turned the insn into a NOTE. */ ! if (GET_CODE (insn) != NOTE) ! mark_oprs_set (insn); ! } } if (gcse_file != NULL) *************** alloc_pre_mem (n_blocks, n_exprs) *** 4149,4172 **** static void free_pre_mem () { ! free (transp); ! free (comp); /* ANTLOC and AE_KILL are freed just after pre_lcm finishes. */ if (pre_optimal) ! free (pre_optimal); if (pre_redundant) ! free (pre_redundant); if (pre_insert_map) ! free (pre_insert_map); if (pre_delete_map) ! free (pre_delete_map); ! if (ae_in) ! free (ae_in); if (ae_out) ! free (ae_out); transp = comp = NULL; pre_optimal = pre_redundant = pre_insert_map = pre_delete_map = NULL; --- 4423,4445 ---- static void free_pre_mem () { ! sbitmap_vector_free (transp); ! sbitmap_vector_free (comp); /* ANTLOC and AE_KILL are freed just after pre_lcm finishes. */ if (pre_optimal) ! sbitmap_vector_free (pre_optimal); if (pre_redundant) ! sbitmap_vector_free (pre_redundant); if (pre_insert_map) ! sbitmap_vector_free (pre_insert_map); if (pre_delete_map) ! sbitmap_vector_free (pre_delete_map); if (ae_in) ! sbitmap_vector_free (ae_in); if (ae_out) ! sbitmap_vector_free (ae_out); transp = comp = NULL; pre_optimal = pre_redundant = pre_insert_map = pre_delete_map = NULL; *************** compute_pre_data () *** 4224,4234 **** edge_list = pre_edge_lcm (gcse_file, n_exprs, transp, comp, antloc, ae_kill, &pre_insert_map, &pre_delete_map); ! free (antloc); antloc = NULL; ! free (ae_kill); ae_kill = NULL; ! free (trapping_expr); } /* PRE utilities */ --- 4497,4507 ---- edge_list = pre_edge_lcm (gcse_file, n_exprs, transp, comp, antloc, ae_kill, &pre_insert_map, &pre_delete_map); ! sbitmap_vector_free (antloc); antloc = NULL; ! sbitmap_vector_free (ae_kill); ae_kill = NULL; ! sbitmap_free (trapping_expr); } /* PRE utilities */ *************** compute_pre_data () *** 4248,4271 **** static int pre_expr_reaches_here_p_work (occr_bb, expr, bb, visited) ! int occr_bb; struct expr *expr; ! int bb; char *visited; { edge pred; ! for (pred = BASIC_BLOCK (bb)->pred; pred != NULL; pred = pred->pred_next) { ! int pred_bb = pred->src->index; if (pred->src == ENTRY_BLOCK_PTR /* Has predecessor has already been visited? */ ! || visited[pred_bb]) ;/* Nothing to do. */ /* Does this predecessor generate this expression? */ ! else if (TEST_BIT (comp[pred_bb], expr->bitmap_index)) { /* Is this the occurrence we're looking for? Note that there's only one generating occurrence per block --- 4521,4544 ---- static int pre_expr_reaches_here_p_work (occr_bb, expr, bb, visited) ! basic_block occr_bb; struct expr *expr; ! basic_block bb; char *visited; { edge pred; ! for (pred = bb->pred; pred != NULL; pred = pred->pred_next) { ! basic_block pred_bb = pred->src; if (pred->src == ENTRY_BLOCK_PTR /* Has predecessor has already been visited? */ ! || visited[pred_bb->index]) ;/* Nothing to do. */ /* Does this predecessor generate this expression? */ ! else if (TEST_BIT (comp[pred_bb->index], expr->bitmap_index)) { /* Is this the occurrence we're looking for? Note that there's only one generating occurrence per block *************** pre_expr_reaches_here_p_work (occr_bb, e *** 4273,4288 **** if (occr_bb == pred_bb) return 1; ! visited[pred_bb] = 1; } /* Ignore this predecessor if it kills the expression. */ ! else if (! TEST_BIT (transp[pred_bb], expr->bitmap_index)) ! visited[pred_bb] = 1; /* Neither gen nor kill. */ else { ! visited[pred_bb] = 1; if (pre_expr_reaches_here_p_work (occr_bb, expr, pred_bb, visited)) return 1; } --- 4546,4561 ---- if (occr_bb == pred_bb) return 1; ! visited[pred_bb->index] = 1; } /* Ignore this predecessor if it kills the expression. */ ! else if (! TEST_BIT (transp[pred_bb->index], expr->bitmap_index)) ! visited[pred_bb->index] = 1; /* Neither gen nor kill. */ else { ! visited[pred_bb->index] = 1; if (pre_expr_reaches_here_p_work (occr_bb, expr, pred_bb, visited)) return 1; } *************** pre_expr_reaches_here_p_work (occr_bb, e *** 4293,4310 **** } /* The wrapper for pre_expr_reaches_here_work that ensures that any ! memory allocated for that function is returned. */ static int pre_expr_reaches_here_p (occr_bb, expr, bb) ! int occr_bb; struct expr *expr; ! int bb; { int rval; char *visited = (char *) xcalloc (n_basic_blocks, 1); ! rval = pre_expr_reaches_here_p_work(occr_bb, expr, bb, visited); free (visited); return rval; --- 4566,4583 ---- } /* The wrapper for pre_expr_reaches_here_work that ensures that any ! memory allocated for that function is returned. */ static int pre_expr_reaches_here_p (occr_bb, expr, bb) ! basic_block occr_bb; struct expr *expr; ! basic_block bb; { int rval; char *visited = (char *) xcalloc (n_basic_blocks, 1); ! rval = pre_expr_reaches_here_p_work (occr_bb, expr, bb, visited); free (visited); return rval; *************** process_insert_insn (expr) *** 4320,4332 **** struct expr *expr; { rtx reg = expr->reaching_reg; ! rtx pat, copied_expr; ! rtx first_new_insn; start_sequence (); ! copied_expr = copy_rtx (expr->expr); ! emit_move_insn (reg, copied_expr); ! first_new_insn = get_insns (); pat = gen_sequence (); end_sequence (); --- 4593,4614 ---- struct expr *expr; { rtx reg = expr->reaching_reg; ! rtx exp = copy_rtx (expr->expr); ! rtx pat; start_sequence (); ! ! /* If the expression is something that's an operand, like a constant, ! just copy it to a register. */ ! if (general_operand (exp, GET_MODE (reg))) ! emit_move_insn (reg, exp); ! ! /* Otherwise, make a new insn to compute this expression and make sure the ! insn will be recognized (this also adds any needed CLOBBERs). Copy the ! expression to make sure we don't have any sharing issues. */ ! else if (insn_invalid_p (emit_insn (gen_rtx_SET (VOIDmode, reg, exp)))) ! abort (); ! pat = gen_sequence (); end_sequence (); *************** process_insert_insn (expr) *** 4344,4353 **** static void insert_insn_end_bb (expr, bb, pre) struct expr *expr; ! int bb; int pre; { ! rtx insn = BLOCK_END (bb); rtx new_insn; rtx reg = expr->reaching_reg; int regno = REGNO (reg); --- 4626,4635 ---- static void insert_insn_end_bb (expr, bb, pre) struct expr *expr; ! basic_block bb; int pre; { ! rtx insn = bb->end; rtx new_insn; rtx reg = expr->reaching_reg; int regno = REGNO (reg); *************** insert_insn_end_bb (expr, bb, pre) *** 4357,4369 **** pat = process_insert_insn (expr); /* If the last insn is a jump, insert EXPR in front [taking care to ! handle cc0, etc. properly]. */ ! if (GET_CODE (insn) == JUMP_INSN) { #ifdef HAVE_cc0 rtx note; #endif /* If this is a jump table, then we can't insert stuff here. Since we know the previous real insn must be the tablejump, we insert --- 4639,4661 ---- pat = process_insert_insn (expr); /* If the last insn is a jump, insert EXPR in front [taking care to ! handle cc0, etc. properly]. Similary we need to care trapping ! instructions in presence of non-call exceptions. */ ! if (GET_CODE (insn) == JUMP_INSN ! || (GET_CODE (insn) == INSN ! && (bb->succ->succ_next || (bb->succ->flags & EDGE_ABNORMAL)))) { #ifdef HAVE_cc0 rtx note; #endif + /* It should always be the case that we can put these instructions + anywhere in the basic block with performing PRE optimizations. + Check this. */ + if (GET_CODE (insn) == INSN && pre + && !TEST_BIT (antloc[bb->index], expr->bitmap_index) + && !TEST_BIT (transp[bb->index], expr->bitmap_index)) + abort (); /* If this is a jump table, then we can't insert stuff here. Since we know the previous real insn must be the tablejump, we insert *************** insert_insn_end_bb (expr, bb, pre) *** 4388,4404 **** } #endif /* FIXME: What if something in cc0/jump uses value set in new insn? */ ! new_insn = emit_block_insn_before (pat, insn, BASIC_BLOCK (bb)); } /* Likewise if the last insn is a call, as will happen in the presence of exception handling. */ ! else if (GET_CODE (insn) == CALL_INSN) { - HARD_REG_SET parm_regs; - int nparm_regs; - rtx p; - /* Keeping in mind SMALL_REGISTER_CLASSES and parameters in registers, we search backward and place the instructions before the first parameter is loaded. Do this for everyone for consistency and a --- 4680,4693 ---- } #endif /* FIXME: What if something in cc0/jump uses value set in new insn? */ ! new_insn = emit_insn_before (pat, insn); } /* Likewise if the last insn is a call, as will happen in the presence of exception handling. */ ! else if (GET_CODE (insn) == CALL_INSN ! && (bb->succ->succ_next || (bb->succ->flags & EDGE_ABNORMAL))) { /* Keeping in mind SMALL_REGISTER_CLASSES and parameters in registers, we search backward and place the instructions before the first parameter is loaded. Do this for everyone for consistency and a *************** insert_insn_end_bb (expr, bb, pre) *** 4409,4448 **** Check this. */ if (pre ! && !TEST_BIT (antloc[bb], expr->bitmap_index) ! && !TEST_BIT (transp[bb], expr->bitmap_index)) abort (); /* Since different machines initialize their parameter registers in different orders, assume nothing. Collect the set of all parameter registers. */ ! CLEAR_HARD_REG_SET (parm_regs); ! nparm_regs = 0; ! for (p = CALL_INSN_FUNCTION_USAGE (insn); p ; p = XEXP (p, 1)) ! if (GET_CODE (XEXP (p, 0)) == USE ! && GET_CODE (XEXP (XEXP (p, 0), 0)) == REG) ! { ! if (REGNO (XEXP (XEXP (p, 0), 0)) >= FIRST_PSEUDO_REGISTER) ! abort (); ! ! SET_HARD_REG_BIT (parm_regs, REGNO (XEXP (XEXP (p, 0), 0))); ! nparm_regs++; ! } - /* Search backward for the first set of a register in this set. */ - while (nparm_regs && BLOCK_HEAD (bb) != insn) - { - insn = PREV_INSN (insn); - p = single_set (insn); - if (p && GET_CODE (SET_DEST (p)) == REG - && REGNO (SET_DEST (p)) < FIRST_PSEUDO_REGISTER - && TEST_HARD_REG_BIT (parm_regs, REGNO (SET_DEST (p)))) - { - CLEAR_HARD_REG_BIT (parm_regs, REGNO (SET_DEST (p))); - nparm_regs--; - } - } - /* If we found all the parameter loads, then we want to insert before the first parameter load. --- 4698,4712 ---- Check this. */ if (pre ! && !TEST_BIT (antloc[bb->index], expr->bitmap_index) ! && !TEST_BIT (transp[bb->index], expr->bitmap_index)) abort (); /* Since different machines initialize their parameter registers in different orders, assume nothing. Collect the set of all parameter registers. */ ! insn = find_first_parameter_load (insn, bb->head); /* If we found all the parameter loads, then we want to insert before the first parameter load. *************** insert_insn_end_bb (expr, bb, pre) *** 4455,4467 **** || NOTE_INSN_BASIC_BLOCK_P (insn)) insn = NEXT_INSN (insn); ! new_insn = emit_block_insn_before (pat, insn, BASIC_BLOCK (bb)); } else ! { ! new_insn = emit_insn_after (pat, insn); ! BLOCK_END (bb) = new_insn; ! } /* Keep block number table up to date. Note, PAT could be a multiple insn sequence, we have to make --- 4719,4728 ---- || NOTE_INSN_BASIC_BLOCK_P (insn)) insn = NEXT_INSN (insn); ! new_insn = emit_insn_before (pat, insn); } else ! new_insn = emit_insn_after (pat, insn); /* Keep block number table up to date. Note, PAT could be a multiple insn sequence, we have to make *************** insert_insn_end_bb (expr, bb, pre) *** 4471,4478 **** for (i = 0; i < XVECLEN (pat, 0); i++) { rtx insn = XVECEXP (pat, 0, i); - - set_block_num (insn, bb); if (INSN_P (insn)) add_label_notes (PATTERN (insn), new_insn); --- 4732,4737 ---- *************** insert_insn_end_bb (expr, bb, pre) *** 4481,4488 **** } else { ! add_label_notes (SET_SRC (pat), new_insn); ! set_block_num (new_insn, bb); /* Keep register set table up to date. */ record_one_set (regno, new_insn); --- 4740,4746 ---- } else { ! add_label_notes (pat, new_insn); /* Keep register set table up to date. */ record_one_set (regno, new_insn); *************** insert_insn_end_bb (expr, bb, pre) *** 4493,4499 **** if (gcse_file) { fprintf (gcse_file, "PRE/HOIST: end of bb %d, insn %d, ", ! bb, INSN_UID (new_insn)); fprintf (gcse_file, "copying expression %d to reg %d\n", expr->bitmap_index, regno); } --- 4751,4757 ---- if (gcse_file) { fprintf (gcse_file, "PRE/HOIST: end of bb %d, insn %d, ", ! bb->index, INSN_UID (new_insn)); fprintf (gcse_file, "copying expression %d to reg %d\n", expr->bitmap_index, regno); } *************** pre_edge_insert (edge_list, index_map) *** 4521,4528 **** for (e = 0; e < num_edges; e++) { int indx; ! basic_block pred = INDEX_EDGE_PRED_BB (edge_list, e); ! int bb = pred->index; for (i = indx = 0; i < set_size; i++, indx += SBITMAP_ELT_BITS) { --- 4779,4785 ---- for (e = 0; e < num_edges; e++) { int indx; ! basic_block bb = INDEX_EDGE_PRED_BB (edge_list, e); for (i = indx = 0; i < set_size; i++, indx += SBITMAP_ELT_BITS) { *************** pre_edge_insert (edge_list, index_map) *** 4534,4547 **** struct expr *expr = index_map[j]; struct occr *occr; ! /* Now look at each deleted occurence of this expression. */ for (occr = expr->antic_occr; occr != NULL; occr = occr->next) { if (! occr->deleted_p) continue; /* Insert this expression on this edge if if it would ! reach the deleted occurence in BB. */ if (!TEST_BIT (inserted[e], j)) { rtx insn; --- 4791,4804 ---- struct expr *expr = index_map[j]; struct occr *occr; ! /* Now look at each deleted occurrence of this expression. */ for (occr = expr->antic_occr; occr != NULL; occr = occr->next) { if (! occr->deleted_p) continue; /* Insert this expression on this edge if if it would ! reach the deleted occurrence in BB. */ if (!TEST_BIT (inserted[e], j)) { rtx insn; *************** pre_edge_insert (edge_list, index_map) *** 4565,4576 **** if (gcse_file) { fprintf (gcse_file, "PRE/HOIST: edge (%d,%d), ", ! bb, INDEX_EDGE_SUCC_BB (edge_list, e)->index); fprintf (gcse_file, "copy expression %d\n", expr->bitmap_index); } SET_BIT (inserted[e], j); did_insert = 1; gcse_create_count++; --- 4822,4834 ---- if (gcse_file) { fprintf (gcse_file, "PRE/HOIST: edge (%d,%d), ", ! bb->index, INDEX_EDGE_SUCC_BB (edge_list, e)->index); fprintf (gcse_file, "copy expression %d\n", expr->bitmap_index); } + update_ld_motion_stores (expr); SET_BIT (inserted[e], j); did_insert = 1; gcse_create_count++; *************** pre_edge_insert (edge_list, index_map) *** 4580,4586 **** } } ! free (inserted); return did_insert; } --- 4838,4844 ---- } } ! sbitmap_vector_free (inserted); return did_insert; } *************** pre_insert_copy_insn (expr, insn) *** 4596,4616 **** int indx = expr->bitmap_index; rtx set = single_set (insn); rtx new_insn; - int bb = BLOCK_NUM (insn); if (!set) abort (); ! new_insn = emit_insn_after (gen_rtx_SET (VOIDmode, reg, SET_DEST (set)), ! insn); ! ! /* Keep block number table up to date. */ ! set_block_num (new_insn, bb); /* Keep register set table up to date. */ record_one_set (regno, new_insn); - if (insn == BLOCK_END (bb)) - BLOCK_END (bb) = new_insn; gcse_create_count++; --- 4854,4867 ---- int indx = expr->bitmap_index; rtx set = single_set (insn); rtx new_insn; if (!set) abort (); ! new_insn = emit_insn_after (gen_move_insn (reg, SET_DEST (set)), insn); /* Keep register set table up to date. */ record_one_set (regno, new_insn); gcse_create_count++; *************** pre_insert_copy_insn (expr, insn) *** 4619,4624 **** --- 4870,4876 ---- "PRE: bb %d, insn %d, copy expression %d in insn %d to reg %d\n", BLOCK_NUM (insn), INSN_UID (new_insn), indx, INSN_UID (insn), regno); + update_ld_motion_stores (expr); } /* Copy available expressions that reach the redundant expression *************** pre_insert_copies () *** 4667,4674 **** continue; /* Or if the expression doesn't reach the deleted one. */ ! if (! pre_expr_reaches_here_p (BLOCK_NUM (avail->insn), expr, ! BLOCK_NUM (occr->insn))) continue; /* Copy the result of avail to reaching_reg. */ --- 4919,4927 ---- continue; /* Or if the expression doesn't reach the deleted one. */ ! if (! pre_expr_reaches_here_p (BLOCK_FOR_INSN (avail->insn), ! expr, ! BLOCK_FOR_INSN (occr->insn))) continue; /* Copy the result of avail to reaching_reg. */ *************** pre_delete () *** 4707,4715 **** { rtx insn = occr->insn; rtx set; ! int bb = BLOCK_NUM (insn); ! if (TEST_BIT (pre_delete_map[bb], indx)) { set = single_set (insn); if (! set) --- 4960,4968 ---- { rtx insn = occr->insn; rtx set; ! basic_block bb = BLOCK_FOR_INSN (insn); ! if (TEST_BIT (pre_delete_map[bb->index], indx)) { set = single_set (insn); if (! set) *************** pre_delete () *** 4728,4734 **** However, on the x86 some of the movXX patterns actually contain clobbers of scratch regs. This may cause the insn created by validate_change to not match any pattern ! and thus cause validate_change to fail. */ if (validate_change (insn, &SET_SRC (set), expr->reaching_reg, 0)) { --- 4981,4987 ---- However, on the x86 some of the movXX patterns actually contain clobbers of scratch regs. This may cause the insn created by validate_change to not match any pattern ! and thus cause validate_change to fail. */ if (validate_change (insn, &SET_SRC (set), expr->reaching_reg, 0)) { *************** pre_delete () *** 4744,4750 **** "PRE: redundant insn %d (expression %d) in ", INSN_UID (insn), indx); fprintf (gcse_file, "bb %d, reaching reg is %d\n", ! bb, REGNO (expr->reaching_reg)); } } } --- 4997,5003 ---- "PRE: redundant insn %d (expression %d) in ", INSN_UID (insn), indx); fprintf (gcse_file, "bb %d, reaching reg is %d\n", ! bb->index, REGNO (expr->reaching_reg)); } } } *************** pre_gcse () *** 4812,4818 **** } free (index_map); ! free (pre_redundant_insns); return changed; } --- 5065,5071 ---- } free (index_map); ! sbitmap_free (pre_redundant_insns); return changed; } *************** one_pre_gcse_pass (pass) *** 4831,4837 **** --- 5084,5094 ---- alloc_expr_hash_table (max_cuid); add_noreturn_fake_exit_edges (); + if (flag_gcse_lm) + compute_ld_motion_mems (); + compute_expr_hash_table (); + trim_ld_motion_mems (); if (gcse_file) dump_hash_table (gcse_file, "Expression", expr_hash_table, expr_hash_table_size, n_exprs); *************** one_pre_gcse_pass (pass) *** 4845,4850 **** --- 5102,5108 ---- free_pre_mem (); } + free_ldst_mems (); remove_fake_edges (); free_expr_hash_table (); *************** add_label_notes (x, insn) *** 4888,4894 **** We no longer ignore such label references (see LABEL_REF handling in mark_jump_label for additional information). */ ! REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_LABEL, XEXP (x, 0), REG_NOTES (insn)); if (LABEL_P (XEXP (x, 0))) LABEL_NUSES (XEXP (x, 0))++; --- 5146,5152 ---- We no longer ignore such label references (see LABEL_REF handling in mark_jump_label for additional information). */ ! REG_NOTES (insn) = gen_rtx_INSN_LIST (REG_LABEL, XEXP (x, 0), REG_NOTES (insn)); if (LABEL_P (XEXP (x, 0))) LABEL_NUSES (XEXP (x, 0))++; *************** invalidate_nonnull_info (x, setter, data *** 4988,4996 **** they are not our responsibility to free. */ static void ! delete_null_pointer_checks_1 (delete_list, block_reg, nonnull_avin, nonnull_avout, npi) - varray_type *delete_list; unsigned int *block_reg; sbitmap *nonnull_avin; sbitmap *nonnull_avout; --- 5246,5253 ---- they are not our responsibility to free. */ static void ! delete_null_pointer_checks_1 (block_reg, nonnull_avin, nonnull_avout, npi) unsigned int *block_reg; sbitmap *nonnull_avin; sbitmap *nonnull_avout; *************** delete_null_pointer_checks_1 (delete_lis *** 5043,5049 **** continue; } ! /* See if we've got a useable memory load. We handle it first in case it uses its address register as a dest (which kills the nonnull property). */ if (GET_CODE (SET_SRC (set)) == MEM --- 5300,5306 ---- continue; } ! /* See if we've got a usable memory load. We handle it first in case it uses its address register as a dest (which kills the nonnull property). */ if (GET_CODE (SET_SRC (set)) == MEM *************** delete_null_pointer_checks_1 (delete_lis *** 5120,5131 **** LABEL_NUSES (JUMP_LABEL (new_jump))++; emit_barrier_after (new_jump); } - if (!*delete_list) - VARRAY_RTX_INIT (*delete_list, 10, "delete_list"); ! VARRAY_PUSH_RTX (*delete_list, last_insn); if (compare_and_branch == 2) ! VARRAY_PUSH_RTX (*delete_list, earliest); /* Don't check this block again. (Note that BLOCK_END is invalid here; we deleted the last instruction in the --- 5377,5387 ---- LABEL_NUSES (JUMP_LABEL (new_jump))++; emit_barrier_after (new_jump); } ! delete_insn (last_insn); if (compare_and_branch == 2) ! delete_insn (earliest); ! purge_dead_edges (BASIC_BLOCK (bb)); /* Don't check this block again. (Note that BLOCK_END is invalid here; we deleted the last instruction in the *************** delete_null_pointer_checks (f) *** 5164,5175 **** { sbitmap *nonnull_avin, *nonnull_avout; unsigned int *block_reg; - varray_type delete_list = NULL; int bb; int reg; int regs_per_pass; int max_reg; - unsigned int i; struct null_pointer_info npi; /* If we have only a single block, then there's nothing to do. */ --- 5420,5429 ---- *************** delete_null_pointer_checks (f) *** 5216,5222 **** /* LAST_INSN is a conditional jump. Get its condition. */ condition = get_condition (last_insn, &earliest); ! /* If we were unable to get the condition, or it is not a equality comparison against zero then there's nothing we can do. */ if (!condition || (GET_CODE (condition) != NE && GET_CODE (condition) != EQ) --- 5470,5476 ---- /* LAST_INSN is a conditional jump. Get its condition. */ condition = get_condition (last_insn, &earliest); ! /* If we were unable to get the condition, or it is not an equality comparison against zero then there's nothing we can do. */ if (!condition || (GET_CODE (condition) != NE && GET_CODE (condition) != EQ) *************** delete_null_pointer_checks (f) *** 5238,5263 **** { npi.min_reg = reg; npi.max_reg = MIN (reg + regs_per_pass, max_reg); ! delete_null_pointer_checks_1 (&delete_list, block_reg, nonnull_avin, nonnull_avout, &npi); } - /* Now delete the instructions all at once. This breaks the CFG. */ - if (delete_list) - { - for (i = 0; i < VARRAY_ACTIVE_SIZE (delete_list); i++) - delete_insn (VARRAY_RTX (delete_list, i)); - VARRAY_FREE (delete_list); - } - /* Free the table of registers compared at the end of every block. */ free (block_reg); /* Free bitmaps. */ ! free (npi.nonnull_local); ! free (npi.nonnull_killed); ! free (nonnull_avin); ! free (nonnull_avout); } /* Code Hoisting variables and subroutines. */ --- 5492,5509 ---- { npi.min_reg = reg; npi.max_reg = MIN (reg + regs_per_pass, max_reg); ! delete_null_pointer_checks_1 (block_reg, nonnull_avin, nonnull_avout, &npi); } /* Free the table of registers compared at the end of every block. */ free (block_reg); /* Free bitmaps. */ ! sbitmap_vector_free (npi.nonnull_local); ! sbitmap_vector_free (npi.nonnull_killed); ! sbitmap_vector_free (nonnull_avin); ! sbitmap_vector_free (nonnull_avout); } /* Code Hoisting variables and subroutines. */ *************** alloc_code_hoist_mem (n_blocks, n_exprs) *** 5302,5317 **** static void free_code_hoist_mem () { ! free (antloc); ! free (transp); ! free (comp); ! free (hoist_vbein); ! free (hoist_vbeout); ! free (hoist_exprs); ! free (transpout); ! free (dominators); } /* Compute the very busy expressions at entry/exit from each block. --- 5548,5563 ---- static void free_code_hoist_mem () { ! sbitmap_vector_free (antloc); ! sbitmap_vector_free (transp); ! sbitmap_vector_free (comp); ! sbitmap_vector_free (hoist_vbein); ! sbitmap_vector_free (hoist_vbeout); ! sbitmap_vector_free (hoist_exprs); ! sbitmap_vector_free (transpout); ! sbitmap_vector_free (dominators); } /* Compute the very busy expressions at entry/exit from each block. *************** compute_code_hoist_data () *** 5379,5387 **** static int hoist_expr_reaches_here_p (expr_bb, expr_index, bb, visited) ! int expr_bb; int expr_index; ! int bb; char *visited; { edge pred; --- 5625,5633 ---- static int hoist_expr_reaches_here_p (expr_bb, expr_index, bb, visited) ! basic_block expr_bb; int expr_index; ! basic_block bb; char *visited; { edge pred; *************** hoist_expr_reaches_here_p (expr_bb, expr *** 5390,5418 **** if (visited == NULL) { ! visited_allocated_locally = 1; ! visited = xcalloc (n_basic_blocks, 1); } ! for (pred = BASIC_BLOCK (bb)->pred; pred != NULL; pred = pred->pred_next) { ! int pred_bb = pred->src->index; if (pred->src == ENTRY_BLOCK_PTR) break; ! else if (visited[pred_bb]) continue; /* Does this predecessor generate this expression? */ ! else if (TEST_BIT (comp[pred_bb], expr_index)) break; ! else if (! TEST_BIT (transp[pred_bb], expr_index)) break; /* Not killed. */ else { ! visited[pred_bb] = 1; if (! hoist_expr_reaches_here_p (expr_bb, expr_index, pred_bb, visited)) break; --- 5636,5664 ---- if (visited == NULL) { ! visited_allocated_locally = 1; ! visited = xcalloc (n_basic_blocks, 1); } ! for (pred = bb->pred; pred != NULL; pred = pred->pred_next) { ! basic_block pred_bb = pred->src; if (pred->src == ENTRY_BLOCK_PTR) break; ! else if (visited[pred_bb->index]) continue; /* Does this predecessor generate this expression? */ ! else if (TEST_BIT (comp[pred_bb->index], expr_index)) break; ! else if (! TEST_BIT (transp[pred_bb->index], expr_index)) break; /* Not killed. */ else { ! visited[pred_bb->index] = 1; if (! hoist_expr_reaches_here_p (expr_bb, expr_index, pred_bb, visited)) break; *************** hoist_code () *** 5480,5490 **** Keep track of how many times this expression is hoistable from a dominated block into BB. */ ! if (hoist_expr_reaches_here_p (bb, i, dominated, NULL)) hoistable++; } ! /* If we found more than one hoistable occurence of this expression, then note it in the bitmap of expressions to hoist. It makes no sense to hoist things which are computed in only one BB, and doing so tends to pessimize register --- 5726,5737 ---- Keep track of how many times this expression is hoistable from a dominated block into BB. */ ! if (hoist_expr_reaches_here_p (BASIC_BLOCK (bb), i, ! BASIC_BLOCK (dominated), NULL)) hoistable++; } ! /* If we found more than one hoistable occurrence of this expression, then note it in the bitmap of expressions to hoist. It makes no sense to hoist things which are computed in only one BB, and doing so tends to pessimize register *************** hoist_code () *** 5535,5550 **** /* The expression is computed in the dominated block and it would be safe to compute it at the start of the dominated block. Now we have to determine if the ! expresion would reach the dominated block if it was placed at the end of BB. */ ! if (hoist_expr_reaches_here_p (bb, i, dominated, NULL)) { struct expr *expr = index_map[i]; struct occr *occr = expr->antic_occr; rtx insn; rtx set; ! /* Find the right occurence of this expression. */ while (BLOCK_NUM (occr->insn) != dominated && occr) occr = occr->next; --- 5782,5798 ---- /* The expression is computed in the dominated block and it would be safe to compute it at the start of the dominated block. Now we have to determine if the ! expression would reach the dominated block if it was placed at the end of BB. */ ! if (hoist_expr_reaches_here_p (BASIC_BLOCK (bb), i, ! BASIC_BLOCK (dominated), NULL)) { struct expr *expr = index_map[i]; struct occr *occr = expr->antic_occr; rtx insn; rtx set; ! /* Find the right occurrence of this expression. */ while (BLOCK_NUM (occr->insn) != dominated && occr) occr = occr->next; *************** hoist_code () *** 5579,5585 **** occr->deleted_p = 1; if (!insn_inserted_p) { ! insert_insn_end_bb (index_map[i], bb, 0); insn_inserted_p = 1; } } --- 5827,5834 ---- occr->deleted_p = 1; if (!insn_inserted_p) { ! insert_insn_end_bb (index_map[i], ! BASIC_BLOCK (bb), 0); insn_inserted_p = 1; } } *************** hoist_code () *** 5589,5595 **** } } ! free (index_map); } /* Top level routine to perform one code hoisting (aka unification) pass --- 5838,5844 ---- } } ! free (index_map); } /* Top level routine to perform one code hoisting (aka unification) pass *************** one_code_hoisting_pass () *** 5619,5621 **** --- 5868,6991 ---- return changed; } + + /* Here we provide the things required to do store motion towards + the exit. In order for this to be effective, gcse also needed to + be taught how to move a load when it is kill only by a store to itself. + + int i; + float a[10]; + + void foo(float scale) + { + for (i=0; i<10; i++) + a[i] *= scale; + } + + 'i' is both loaded and stored to in the loop. Normally, gcse cannot move + the load out since its live around the loop, and stored at the bottom + of the loop. + + The 'Load Motion' referred to and implemented in this file is + an enhancement to gcse which when using edge based lcm, recognizes + this situation and allows gcse to move the load out of the loop. + + Once gcse has hoisted the load, store motion can then push this + load towards the exit, and we end up with no loads or stores of 'i' + in the loop. */ + + /* This will search the ldst list for a matching expression. If it + doesn't find one, we create one and initialize it. */ + + static struct ls_expr * + ldst_entry (x) + rtx x; + { + struct ls_expr * ptr; + + for (ptr = first_ls_expr(); ptr != NULL; ptr = next_ls_expr (ptr)) + if (expr_equiv_p (ptr->pattern, x)) + break; + + if (!ptr) + { + ptr = (struct ls_expr *) xmalloc (sizeof (struct ls_expr)); + + ptr->next = pre_ldst_mems; + ptr->expr = NULL; + ptr->pattern = x; + ptr->loads = NULL_RTX; + ptr->stores = NULL_RTX; + ptr->reaching_reg = NULL_RTX; + ptr->invalid = 0; + ptr->index = 0; + ptr->hash_index = 0; + pre_ldst_mems = ptr; + } + + return ptr; + } + + /* Free up an individual ldst entry. */ + + static void + free_ldst_entry (ptr) + struct ls_expr * ptr; + { + free_INSN_LIST_list (& ptr->loads); + free_INSN_LIST_list (& ptr->stores); + + free (ptr); + } + + /* Free up all memory associated with the ldst list. */ + + static void + free_ldst_mems () + { + while (pre_ldst_mems) + { + struct ls_expr * tmp = pre_ldst_mems; + + pre_ldst_mems = pre_ldst_mems->next; + + free_ldst_entry (tmp); + } + + pre_ldst_mems = NULL; + } + + /* Dump debugging info about the ldst list. */ + + static void + print_ldst_list (file) + FILE * file; + { + struct ls_expr * ptr; + + fprintf (file, "LDST list: \n"); + + for (ptr = first_ls_expr(); ptr != NULL; ptr = next_ls_expr (ptr)) + { + fprintf (file, " Pattern (%3d): ", ptr->index); + + print_rtl (file, ptr->pattern); + + fprintf (file, "\n Loads : "); + + if (ptr->loads) + print_rtl (file, ptr->loads); + else + fprintf (file, "(nil)"); + + fprintf (file, "\n Stores : "); + + if (ptr->stores) + print_rtl (file, ptr->stores); + else + fprintf (file, "(nil)"); + + fprintf (file, "\n\n"); + } + + fprintf (file, "\n"); + } + + /* Returns 1 if X is in the list of ldst only expressions. */ + + static struct ls_expr * + find_rtx_in_ldst (x) + rtx x; + { + struct ls_expr * ptr; + + for (ptr = pre_ldst_mems; ptr != NULL; ptr = ptr->next) + if (expr_equiv_p (ptr->pattern, x) && ! ptr->invalid) + return ptr; + + return NULL; + } + + /* Assign each element of the list of mems a monotonically increasing value. */ + + static int + enumerate_ldsts () + { + struct ls_expr * ptr; + int n = 0; + + for (ptr = pre_ldst_mems; ptr != NULL; ptr = ptr->next) + ptr->index = n++; + + return n; + } + + /* Return first item in the list. */ + + static inline struct ls_expr * + first_ls_expr () + { + return pre_ldst_mems; + } + + /* Return the next item in ther list after the specified one. */ + + static inline struct ls_expr * + next_ls_expr (ptr) + struct ls_expr * ptr; + { + return ptr->next; + } + + /* Load Motion for loads which only kill themselves. */ + + /* Return true if x is a simple MEM operation, with no registers or + side effects. These are the types of loads we consider for the + ld_motion list, otherwise we let the usual aliasing take care of it. */ + + static int + simple_mem (x) + rtx x; + { + if (GET_CODE (x) != MEM) + return 0; + + if (MEM_VOLATILE_P (x)) + return 0; + + if (GET_MODE (x) == BLKmode) + return 0; + + if (!rtx_varies_p (XEXP (x, 0), 0)) + return 1; + + return 0; + } + + /* Make sure there isn't a buried reference in this pattern anywhere. + If there is, invalidate the entry for it since we're not capable + of fixing it up just yet.. We have to be sure we know about ALL + loads since the aliasing code will allow all entries in the + ld_motion list to not-alias itself. If we miss a load, we will get + the wrong value since gcse might common it and we won't know to + fix it up. */ + + static void + invalidate_any_buried_refs (x) + rtx x; + { + const char * fmt; + int i, j; + struct ls_expr * ptr; + + /* Invalidate it in the list. */ + if (GET_CODE (x) == MEM && simple_mem (x)) + { + ptr = ldst_entry (x); + ptr->invalid = 1; + } + + /* Recursively process the insn. */ + fmt = GET_RTX_FORMAT (GET_CODE (x)); + + for (i = GET_RTX_LENGTH (GET_CODE (x)) - 1; i >= 0; i--) + { + if (fmt[i] == 'e') + invalidate_any_buried_refs (XEXP (x, i)); + else if (fmt[i] == 'E') + for (j = XVECLEN (x, i) - 1; j >= 0; j--) + invalidate_any_buried_refs (XVECEXP (x, i, j)); + } + } + + /* Find all the 'simple' MEMs which are used in LOADs and STORES. Simple + being defined as MEM loads and stores to symbols, with no + side effects and no registers in the expression. If there are any + uses/defs which don't match this criteria, it is invalidated and + trimmed out later. */ + + static void + compute_ld_motion_mems () + { + struct ls_expr * ptr; + int bb; + rtx insn; + + pre_ldst_mems = NULL; + + for (bb = 0; bb < n_basic_blocks; bb++) + { + for (insn = BLOCK_HEAD (bb); + insn && insn != NEXT_INSN (BLOCK_END (bb)); + insn = NEXT_INSN (insn)) + { + if (GET_RTX_CLASS (GET_CODE (insn)) == 'i') + { + if (GET_CODE (PATTERN (insn)) == SET) + { + rtx src = SET_SRC (PATTERN (insn)); + rtx dest = SET_DEST (PATTERN (insn)); + + /* Check for a simple LOAD... */ + if (GET_CODE (src) == MEM && simple_mem (src)) + { + ptr = ldst_entry (src); + if (GET_CODE (dest) == REG) + ptr->loads = alloc_INSN_LIST (insn, ptr->loads); + else + ptr->invalid = 1; + } + else + { + /* Make sure there isn't a buried load somewhere. */ + invalidate_any_buried_refs (src); + } + + /* Check for stores. Don't worry about aliased ones, they + will block any movement we might do later. We only care + about this exact pattern since those are the only + circumstance that we will ignore the aliasing info. */ + if (GET_CODE (dest) == MEM && simple_mem (dest)) + { + ptr = ldst_entry (dest); + + if (GET_CODE (src) != MEM + && GET_CODE (src) != ASM_OPERANDS) + ptr->stores = alloc_INSN_LIST (insn, ptr->stores); + else + ptr->invalid = 1; + } + } + else + invalidate_any_buried_refs (PATTERN (insn)); + } + } + } + } + + /* Remove any references that have been either invalidated or are not in the + expression list for pre gcse. */ + + static void + trim_ld_motion_mems () + { + struct ls_expr * last = NULL; + struct ls_expr * ptr = first_ls_expr (); + + while (ptr != NULL) + { + int del = ptr->invalid; + struct expr * expr = NULL; + + /* Delete if entry has been made invalid. */ + if (!del) + { + unsigned int i; + + del = 1; + /* Delete if we cannot find this mem in the expression list. */ + for (i = 0; i < expr_hash_table_size && del; i++) + { + for (expr = expr_hash_table[i]; + expr != NULL; + expr = expr->next_same_hash) + if (expr_equiv_p (expr->expr, ptr->pattern)) + { + del = 0; + break; + } + } + } + + if (del) + { + if (last != NULL) + { + last->next = ptr->next; + free_ldst_entry (ptr); + ptr = last->next; + } + else + { + pre_ldst_mems = pre_ldst_mems->next; + free_ldst_entry (ptr); + ptr = pre_ldst_mems; + } + } + else + { + /* Set the expression field if we are keeping it. */ + last = ptr; + ptr->expr = expr; + ptr = ptr->next; + } + } + + /* Show the world what we've found. */ + if (gcse_file && pre_ldst_mems != NULL) + print_ldst_list (gcse_file); + } + + /* This routine will take an expression which we are replacing with + a reaching register, and update any stores that are needed if + that expression is in the ld_motion list. Stores are updated by + copying their SRC to the reaching register, and then storeing + the reaching register into the store location. These keeps the + correct value in the reaching register for the loads. */ + + static void + update_ld_motion_stores (expr) + struct expr * expr; + { + struct ls_expr * mem_ptr; + + if ((mem_ptr = find_rtx_in_ldst (expr->expr))) + { + /* We can try to find just the REACHED stores, but is shouldn't + matter to set the reaching reg everywhere... some might be + dead and should be eliminated later. */ + + /* We replace SET mem = expr with + SET reg = expr + SET mem = reg , where reg is the + reaching reg used in the load. */ + rtx list = mem_ptr->stores; + + for ( ; list != NULL_RTX; list = XEXP (list, 1)) + { + rtx insn = XEXP (list, 0); + rtx pat = PATTERN (insn); + rtx src = SET_SRC (pat); + rtx reg = expr->reaching_reg; + rtx copy, new; + + /* If we've already copied it, continue. */ + if (expr->reaching_reg == src) + continue; + + if (gcse_file) + { + fprintf (gcse_file, "PRE: store updated with reaching reg "); + print_rtl (gcse_file, expr->reaching_reg); + fprintf (gcse_file, ":\n "); + print_inline_rtx (gcse_file, insn, 8); + fprintf (gcse_file, "\n"); + } + + copy = gen_move_insn ( reg, SET_SRC (pat)); + new = emit_insn_before (copy, insn); + record_one_set (REGNO (reg), new); + SET_SRC (pat) = reg; + + /* un-recognize this pattern since it's probably different now. */ + INSN_CODE (insn) = -1; + gcse_create_count++; + } + } + } + + /* Store motion code. */ + + /* This is used to communicate the target bitvector we want to use in the + reg_set_info routine when called via the note_stores mechanism. */ + static sbitmap * regvec; + + /* Used in computing the reverse edge graph bit vectors. */ + static sbitmap * st_antloc; + + /* Global holding the number of store expressions we are dealing with. */ + static int num_stores; + + /* Checks to set if we need to mark a register set. Called from note_stores. */ + + static void + reg_set_info (dest, setter, data) + rtx dest, setter ATTRIBUTE_UNUSED; + void * data ATTRIBUTE_UNUSED; + { + if (GET_CODE (dest) == SUBREG) + dest = SUBREG_REG (dest); + + if (GET_CODE (dest) == REG) + SET_BIT (*regvec, REGNO (dest)); + } + + /* Return non-zero if the register operands of expression X are killed + anywhere in basic block BB. */ + + static int + store_ops_ok (x, bb) + rtx x; + basic_block bb; + { + int i; + enum rtx_code code; + const char * fmt; + + /* Repeat is used to turn tail-recursion into iteration. */ + repeat: + + if (x == 0) + return 1; + + code = GET_CODE (x); + switch (code) + { + case REG: + /* If a reg has changed after us in this + block, the operand has been killed. */ + return TEST_BIT (reg_set_in_block[bb->index], REGNO (x)); + + case MEM: + x = XEXP (x, 0); + goto repeat; + + case PRE_DEC: + case PRE_INC: + case POST_DEC: + case POST_INC: + return 0; + + case PC: + case CC0: /*FIXME*/ + case CONST: + case CONST_INT: + case CONST_DOUBLE: + case CONST_VECTOR: + case SYMBOL_REF: + case LABEL_REF: + case ADDR_VEC: + case ADDR_DIFF_VEC: + return 1; + + default: + break; + } + + i = GET_RTX_LENGTH (code) - 1; + fmt = GET_RTX_FORMAT (code); + + for (; i >= 0; i--) + { + if (fmt[i] == 'e') + { + rtx tem = XEXP (x, i); + + /* If we are about to do the last recursive call + needed at this level, change it into iteration. + This function is called enough to be worth it. */ + if (i == 0) + { + x = tem; + goto repeat; + } + + if (! store_ops_ok (tem, bb)) + return 0; + } + else if (fmt[i] == 'E') + { + int j; + + for (j = 0; j < XVECLEN (x, i); j++) + { + if (! store_ops_ok (XVECEXP (x, i, j), bb)) + return 0; + } + } + } + + return 1; + } + + /* Determine whether insn is MEM store pattern that we will consider moving. */ + + static void + find_moveable_store (insn) + rtx insn; + { + struct ls_expr * ptr; + rtx dest = PATTERN (insn); + + if (GET_CODE (dest) != SET + || GET_CODE (SET_SRC (dest)) == ASM_OPERANDS) + return; + + dest = SET_DEST (dest); + + if (GET_CODE (dest) != MEM || MEM_VOLATILE_P (dest) + || GET_MODE (dest) == BLKmode) + return; + + if (GET_CODE (XEXP (dest, 0)) != SYMBOL_REF) + return; + + if (rtx_varies_p (XEXP (dest, 0), 0)) + return; + + ptr = ldst_entry (dest); + ptr->stores = alloc_INSN_LIST (insn, ptr->stores); + } + + /* Perform store motion. Much like gcse, except we move expressions the + other way by looking at the flowgraph in reverse. */ + + static int + compute_store_table () + { + int bb, ret; + unsigned regno; + rtx insn, pat; + + max_gcse_regno = max_reg_num (); + + reg_set_in_block = (sbitmap *) sbitmap_vector_alloc (n_basic_blocks, + max_gcse_regno); + sbitmap_vector_zero (reg_set_in_block, n_basic_blocks); + pre_ldst_mems = 0; + + /* Find all the stores we care about. */ + for (bb = 0; bb < n_basic_blocks; bb++) + { + regvec = & (reg_set_in_block[bb]); + for (insn = BLOCK_END (bb); + insn && insn != PREV_INSN (BLOCK_HEAD (bb)); + insn = PREV_INSN (insn)) + { + /* Ignore anything that is not a normal insn. */ + if (! INSN_P (insn)) + continue; + + if (GET_CODE (insn) == CALL_INSN) + { + bool clobbers_all = false; + #ifdef NON_SAVING_SETJMP + if (NON_SAVING_SETJMP + && find_reg_note (insn, REG_SETJMP, NULL_RTX)) + clobbers_all = true; + #endif + + for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) + if (clobbers_all + || TEST_HARD_REG_BIT (regs_invalidated_by_call, regno)) + SET_BIT (reg_set_in_block[bb], regno); + } + + pat = PATTERN (insn); + note_stores (pat, reg_set_info, NULL); + + /* Now that we've marked regs, look for stores. */ + if (GET_CODE (pat) == SET) + find_moveable_store (insn); + } + } + + ret = enumerate_ldsts (); + + if (gcse_file) + { + fprintf (gcse_file, "Store Motion Expressions.\n"); + print_ldst_list (gcse_file); + } + + return ret; + } + + /* Check to see if the load X is aliased with STORE_PATTERN. */ + + static int + load_kills_store (x, store_pattern) + rtx x, store_pattern; + { + if (true_dependence (x, GET_MODE (x), store_pattern, rtx_addr_varies_p)) + return 1; + return 0; + } + + /* Go through the entire insn X, looking for any loads which might alias + STORE_PATTERN. Return 1 if found. */ + + static int + find_loads (x, store_pattern) + rtx x, store_pattern; + { + const char * fmt; + int i, j; + int ret = 0; + + if (!x) + return 0; + + if (GET_CODE (x) == SET) + x = SET_SRC (x); + + if (GET_CODE (x) == MEM) + { + if (load_kills_store (x, store_pattern)) + return 1; + } + + /* Recursively process the insn. */ + fmt = GET_RTX_FORMAT (GET_CODE (x)); + + for (i = GET_RTX_LENGTH (GET_CODE (x)) - 1; i >= 0 && !ret; i--) + { + if (fmt[i] == 'e') + ret |= find_loads (XEXP (x, i), store_pattern); + else if (fmt[i] == 'E') + for (j = XVECLEN (x, i) - 1; j >= 0; j--) + ret |= find_loads (XVECEXP (x, i, j), store_pattern); + } + return ret; + } + + /* Check if INSN kills the store pattern X (is aliased with it). + Return 1 if it it does. */ + + static int + store_killed_in_insn (x, insn) + rtx x, insn; + { + if (GET_RTX_CLASS (GET_CODE (insn)) != 'i') + return 0; + + if (GET_CODE (insn) == CALL_INSN) + { + /* A normal or pure call might read from pattern, + but a const call will not. */ + return ! CONST_OR_PURE_CALL_P (insn) || pure_call_p (insn); + } + + if (GET_CODE (PATTERN (insn)) == SET) + { + rtx pat = PATTERN (insn); + /* Check for memory stores to aliased objects. */ + if (GET_CODE (SET_DEST (pat)) == MEM && !expr_equiv_p (SET_DEST (pat), x)) + /* pretend its a load and check for aliasing. */ + if (find_loads (SET_DEST (pat), x)) + return 1; + return find_loads (SET_SRC (pat), x); + } + else + return find_loads (PATTERN (insn), x); + } + + /* Returns 1 if the expression X is loaded or clobbered on or after INSN + within basic block BB. */ + + static int + store_killed_after (x, insn, bb) + rtx x, insn; + basic_block bb; + { + rtx last = bb->end; + + if (insn == last) + return 0; + + /* Check if the register operands of the store are OK in this block. + Note that if registers are changed ANYWHERE in the block, we'll + decide we can't move it, regardless of whether it changed above + or below the store. This could be improved by checking the register + operands while lookinng for aliasing in each insn. */ + if (!store_ops_ok (XEXP (x, 0), bb)) + return 1; + + for ( ; insn && insn != NEXT_INSN (last); insn = NEXT_INSN (insn)) + if (store_killed_in_insn (x, insn)) + return 1; + + return 0; + } + + /* Returns 1 if the expression X is loaded or clobbered on or before INSN + within basic block BB. */ + static int + store_killed_before (x, insn, bb) + rtx x, insn; + basic_block bb; + { + rtx first = bb->head; + + if (insn == first) + return store_killed_in_insn (x, insn); + + /* Check if the register operands of the store are OK in this block. + Note that if registers are changed ANYWHERE in the block, we'll + decide we can't move it, regardless of whether it changed above + or below the store. This could be improved by checking the register + operands while lookinng for aliasing in each insn. */ + if (!store_ops_ok (XEXP (x, 0), bb)) + return 1; + + for ( ; insn && insn != PREV_INSN (first); insn = PREV_INSN (insn)) + if (store_killed_in_insn (x, insn)) + return 1; + + return 0; + } + + #define ANTIC_STORE_LIST(x) ((x)->loads) + #define AVAIL_STORE_LIST(x) ((x)->stores) + + /* Given the table of available store insns at the end of blocks, + determine which ones are not killed by aliasing, and generate + the appropriate vectors for gen and killed. */ + static void + build_store_vectors () + { + basic_block bb; + int b; + rtx insn, st; + struct ls_expr * ptr; + + /* Build the gen_vector. This is any store in the table which is not killed + by aliasing later in its block. */ + ae_gen = (sbitmap *) sbitmap_vector_alloc (n_basic_blocks, num_stores); + sbitmap_vector_zero (ae_gen, n_basic_blocks); + + st_antloc = (sbitmap *) sbitmap_vector_alloc (n_basic_blocks, num_stores); + sbitmap_vector_zero (st_antloc, n_basic_blocks); + + for (ptr = first_ls_expr (); ptr != NULL; ptr = next_ls_expr (ptr)) + { + /* Put all the stores into either the antic list, or the avail list, + or both. */ + rtx store_list = ptr->stores; + ptr->stores = NULL_RTX; + + for (st = store_list; st != NULL; st = XEXP (st, 1)) + { + insn = XEXP (st, 0); + bb = BLOCK_FOR_INSN (insn); + + if (!store_killed_after (ptr->pattern, insn, bb)) + { + /* If we've already seen an availale expression in this block, + we can delete the one we saw already (It occurs earlier in + the block), and replace it with this one). We'll copy the + old SRC expression to an unused register in case there + are any side effects. */ + if (TEST_BIT (ae_gen[bb->index], ptr->index)) + { + /* Find previous store. */ + rtx st; + for (st = AVAIL_STORE_LIST (ptr); st ; st = XEXP (st, 1)) + if (BLOCK_FOR_INSN (XEXP (st, 0)) == bb) + break; + if (st) + { + rtx r = gen_reg_rtx (GET_MODE (ptr->pattern)); + if (gcse_file) + fprintf (gcse_file, "Removing redundant store:\n"); + replace_store_insn (r, XEXP (st, 0), bb); + XEXP (st, 0) = insn; + continue; + } + } + SET_BIT (ae_gen[bb->index], ptr->index); + AVAIL_STORE_LIST (ptr) = alloc_INSN_LIST (insn, + AVAIL_STORE_LIST (ptr)); + } + + if (!store_killed_before (ptr->pattern, insn, bb)) + { + SET_BIT (st_antloc[BLOCK_NUM (insn)], ptr->index); + ANTIC_STORE_LIST (ptr) = alloc_INSN_LIST (insn, + ANTIC_STORE_LIST (ptr)); + } + } + + /* Free the original list of store insns. */ + free_INSN_LIST_list (&store_list); + } + + ae_kill = (sbitmap *) sbitmap_vector_alloc (n_basic_blocks, num_stores); + sbitmap_vector_zero (ae_kill, n_basic_blocks); + + transp = (sbitmap *) sbitmap_vector_alloc (n_basic_blocks, num_stores); + sbitmap_vector_zero (transp, n_basic_blocks); + + for (ptr = first_ls_expr (); ptr != NULL; ptr = next_ls_expr (ptr)) + for (b = 0; b < n_basic_blocks; b++) + { + if (store_killed_after (ptr->pattern, BLOCK_HEAD (b), BASIC_BLOCK (b))) + { + /* The anticipatable expression is not killed if it's gen'd. */ + /* + We leave this check out for now. If we have a code sequence + in a block which looks like: + ST MEMa = x + L y = MEMa + ST MEMa = z + We should flag this as having an ANTIC expression, NOT + transparent, NOT killed, and AVAIL. + Unfortunately, since we haven't re-written all loads to + use the reaching reg, we'll end up doing an incorrect + Load in the middle here if we push the store down. It happens in + gcc.c-torture/execute/960311-1.c with -O3 + If we always kill it in this case, we'll sometimes do + uneccessary work, but it shouldn't actually hurt anything. + if (!TEST_BIT (ae_gen[b], ptr->index)). */ + SET_BIT (ae_kill[b], ptr->index); + } + else + SET_BIT (transp[b], ptr->index); + } + + /* Any block with no exits calls some non-returning function, so + we better mark the store killed here, or we might not store to + it at all. If we knew it was abort, we wouldn't have to store, + but we don't know that for sure. */ + if (gcse_file) + { + fprintf (gcse_file, "ST_avail and ST_antic (shown under loads..)\n"); + print_ldst_list (gcse_file); + dump_sbitmap_vector (gcse_file, "st_antloc", "", st_antloc, n_basic_blocks); + dump_sbitmap_vector (gcse_file, "st_kill", "", ae_kill, n_basic_blocks); + dump_sbitmap_vector (gcse_file, "Transpt", "", transp, n_basic_blocks); + dump_sbitmap_vector (gcse_file, "st_avloc", "", ae_gen, n_basic_blocks); + } + } + + /* Insert an instruction at the begining of a basic block, and update + the BLOCK_HEAD if needed. */ + + static void + insert_insn_start_bb (insn, bb) + rtx insn; + basic_block bb; + { + /* Insert at start of successor block. */ + rtx prev = PREV_INSN (bb->head); + rtx before = bb->head; + while (before != 0) + { + if (GET_CODE (before) != CODE_LABEL + && (GET_CODE (before) != NOTE + || NOTE_LINE_NUMBER (before) != NOTE_INSN_BASIC_BLOCK)) + break; + prev = before; + if (prev == bb->end) + break; + before = NEXT_INSN (before); + } + + insn = emit_insn_after (insn, prev); + + if (gcse_file) + { + fprintf (gcse_file, "STORE_MOTION insert store at start of BB %d:\n", + bb->index); + print_inline_rtx (gcse_file, insn, 6); + fprintf (gcse_file, "\n"); + } + } + + /* This routine will insert a store on an edge. EXPR is the ldst entry for + the memory reference, and E is the edge to insert it on. Returns non-zero + if an edge insertion was performed. */ + + static int + insert_store (expr, e) + struct ls_expr * expr; + edge e; + { + rtx reg, insn; + basic_block bb; + edge tmp; + + /* We did all the deleted before this insert, so if we didn't delete a + store, then we haven't set the reaching reg yet either. */ + if (expr->reaching_reg == NULL_RTX) + return 0; + + reg = expr->reaching_reg; + insn = gen_move_insn (expr->pattern, reg); + + /* If we are inserting this expression on ALL predecessor edges of a BB, + insert it at the start of the BB, and reset the insert bits on the other + edges so we don't try to insert it on the other edges. */ + bb = e->dest; + for (tmp = e->dest->pred; tmp ; tmp = tmp->pred_next) + { + int index = EDGE_INDEX (edge_list, tmp->src, tmp->dest); + if (index == EDGE_INDEX_NO_EDGE) + abort (); + if (! TEST_BIT (pre_insert_map[index], expr->index)) + break; + } + + /* If tmp is NULL, we found an insertion on every edge, blank the + insertion vector for these edges, and insert at the start of the BB. */ + if (!tmp && bb != EXIT_BLOCK_PTR) + { + for (tmp = e->dest->pred; tmp ; tmp = tmp->pred_next) + { + int index = EDGE_INDEX (edge_list, tmp->src, tmp->dest); + RESET_BIT (pre_insert_map[index], expr->index); + } + insert_insn_start_bb (insn, bb); + return 0; + } + + /* We can't insert on this edge, so we'll insert at the head of the + successors block. See Morgan, sec 10.5. */ + if ((e->flags & EDGE_ABNORMAL) == EDGE_ABNORMAL) + { + insert_insn_start_bb (insn, bb); + return 0; + } + + insert_insn_on_edge (insn, e); + + if (gcse_file) + { + fprintf (gcse_file, "STORE_MOTION insert insn on edge (%d, %d):\n", + e->src->index, e->dest->index); + print_inline_rtx (gcse_file, insn, 6); + fprintf (gcse_file, "\n"); + } + + return 1; + } + + /* This routine will replace a store with a SET to a specified register. */ + + static void + replace_store_insn (reg, del, bb) + rtx reg, del; + basic_block bb; + { + rtx insn; + + insn = gen_move_insn (reg, SET_SRC (PATTERN (del))); + insn = emit_insn_after (insn, del); + + if (gcse_file) + { + fprintf (gcse_file, + "STORE_MOTION delete insn in BB %d:\n ", bb->index); + print_inline_rtx (gcse_file, del, 6); + fprintf (gcse_file, "\nSTORE MOTION replaced with insn:\n "); + print_inline_rtx (gcse_file, insn, 6); + fprintf (gcse_file, "\n"); + } + + delete_insn (del); + } + + + /* Delete a store, but copy the value that would have been stored into + the reaching_reg for later storing. */ + + static void + delete_store (expr, bb) + struct ls_expr * expr; + basic_block bb; + { + rtx reg, i, del; + + if (expr->reaching_reg == NULL_RTX) + expr->reaching_reg = gen_reg_rtx (GET_MODE (expr->pattern)); + + + /* If there is more than 1 store, the earlier ones will be dead, + but it doesn't hurt to replace them here. */ + reg = expr->reaching_reg; + + for (i = AVAIL_STORE_LIST (expr); i; i = XEXP (i, 1)) + { + del = XEXP (i, 0); + if (BLOCK_FOR_INSN (del) == bb) + { + /* We know there is only one since we deleted redundant + ones during the available computation. */ + replace_store_insn (reg, del, bb); + break; + } + } + } + + /* Free memory used by store motion. */ + + static void + free_store_memory () + { + free_ldst_mems (); + + if (ae_gen) + sbitmap_vector_free (ae_gen); + if (ae_kill) + sbitmap_vector_free (ae_kill); + if (transp) + sbitmap_vector_free (transp); + if (st_antloc) + sbitmap_vector_free (st_antloc); + if (pre_insert_map) + sbitmap_vector_free (pre_insert_map); + if (pre_delete_map) + sbitmap_vector_free (pre_delete_map); + if (reg_set_in_block) + sbitmap_vector_free (reg_set_in_block); + + ae_gen = ae_kill = transp = st_antloc = NULL; + pre_insert_map = pre_delete_map = reg_set_in_block = NULL; + } + + /* Perform store motion. Much like gcse, except we move expressions the + other way by looking at the flowgraph in reverse. */ + + static void + store_motion () + { + int x; + struct ls_expr * ptr; + int update_flow = 0; + + if (gcse_file) + { + fprintf (gcse_file, "before store motion\n"); + print_rtl (gcse_file, get_insns ()); + } + + + init_alias_analysis (); + + /* Find all the stores that are live to the end of their block. */ + num_stores = compute_store_table (); + if (num_stores == 0) + { + sbitmap_vector_free (reg_set_in_block); + end_alias_analysis (); + return; + } + + /* Now compute whats actually available to move. */ + add_noreturn_fake_exit_edges (); + build_store_vectors (); + + edge_list = pre_edge_rev_lcm (gcse_file, num_stores, transp, ae_gen, + st_antloc, ae_kill, &pre_insert_map, + &pre_delete_map); + + /* Now we want to insert the new stores which are going to be needed. */ + for (ptr = first_ls_expr (); ptr != NULL; ptr = next_ls_expr (ptr)) + { + for (x = 0; x < n_basic_blocks; x++) + if (TEST_BIT (pre_delete_map[x], ptr->index)) + delete_store (ptr, BASIC_BLOCK (x)); + + for (x = 0; x < NUM_EDGES (edge_list); x++) + if (TEST_BIT (pre_insert_map[x], ptr->index)) + update_flow |= insert_store (ptr, INDEX_EDGE (edge_list, x)); + } + + if (update_flow) + commit_edge_insertions (); + + free_store_memory (); + free_edge_list (edge_list); + remove_fake_edges (); + end_alias_analysis (); + } diff -Nrc3pad gcc-3.0.4/gcc/gdbinit.in gcc-3.1/gcc/gdbinit.in *** gcc-3.0.4/gcc/gdbinit.in Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/gdbinit.in Tue Aug 21 08:54:33 2001 *************** *** 0 **** --- 1,102 ---- + define pr + set debug_rtx ($) + end + + document pr + Print the full structure of the rtx that is $. + Works only when an inferior is executing. + end + + define prl + set debug_rtx_list ($, debug_rtx_count) + end + + document prl + Print the full structure of all rtx insns beginning at $. + Works only when an inferior is executing. + Uses variable debug_rtx_count to control number of insns printed: + debug_rtx_count > 0: print from $ on. + debug_rtx_count < 0: print a window around $. + + There is also debug_rtx_find (rtx, uid) that will scan a list for UID and print + it using debug_rtx_list. Usage example: set $foo=debug_rtx_find(first, 42) + end + + define pt + set debug_tree ($) + end + + document pt + Print the full structure of the tree that is $. + Works only when an inferior is executing. + end + + define ptc + output (enum tree_code) $.common.code + echo \n + end + + document ptc + Print the tree-code of the tree node that is $. + end + + define pdn + output $.decl.name->identifier.pointer + echo \n + end + + document pdn + Print the name of the decl-node that is $. + end + + define ptn + output $.type.name->decl.name->identifier.pointer + echo \n + end + + document ptn + Print the name of the type-node that is $. + end + + define prc + output (enum rtx_code) $.code + echo \ ( + output $.mode + echo )\n + end + + document prc + Print the rtx-code and machine mode of the rtx that is $. + end + + define pi + print $.fld[0].rtx@7 + end + + document pi + Print the fields of an instruction that is $. + end + + define pbs + set print_binding_stack () + end + + document pbs + In cc1plus, print the current binding stack, frame by frame, up to and + including the global binding level. + end + + # Put breakpoints at exit and fancy_abort in case abort is mapped + # to either fprintf/exit or fancy_abort. + b fancy_abort + + # Make gdb complain about symbol reading errors. This is so that gcc + # developers can see and fix bugs in gcc debug output. + set complaints 20 + + # Don't let abort actually run, as it will make + # stdio stop working and therefore the `pr' command above as well. + # Put this last because gcc does not reference it any more unless + # USE_SYSTEM_ABORT is defined, so gdb may complain and bail out. + b exit + b abort diff -Nrc3pad gcc-3.0.4/gcc/gen-protos.c gcc-3.1/gcc/gen-protos.c *** gcc-3.0.4/gcc/gen-protos.c Sun Feb 27 00:10:14 2000 --- gcc-3.1/gcc/gen-protos.c Sun Oct 21 21:32:00 2001 *************** parse_fn_proto (start, end, fn) *** 69,75 **** char *start, *end; struct fn_decl *fn; { ! register char *ptr; int param_nesting = 1; char *param_start, *param_end, *decl_start, *name_start, *name_end; --- 69,75 ---- char *start, *end; struct fn_decl *fn; { ! char *ptr; int param_nesting = 1; char *param_start, *param_end, *decl_start, *name_start, *name_end; *************** parse_fn_proto (start, end, fn) *** 109,115 **** } name_end = ptr+1; ! while (ISALNUM ((unsigned char)*ptr) || *ptr == '_') --ptr; name_start = ptr+1; while (*ptr == ' ' || *ptr == '\t') ptr--; ptr[1] = 0; --- 109,116 ---- } name_end = ptr+1; ! while (ISIDNUM (*ptr)) ! --ptr; name_start = ptr+1; while (*ptr == ' ' || *ptr == '\t') ptr--; ptr[1] = 0; diff -Nrc3pad gcc-3.0.4/gcc/genattr.c gcc-3.1/gcc/genattr.c *** gcc-3.0.4/gcc/genattr.c Fri Nov 10 16:01:14 2000 --- gcc-3.1/gcc/genattr.c Sun Dec 2 00:04:18 2001 *************** *** 2,23 **** Copyright (C) 1991, 1994, 1996, 1998, 1999, 2000 Free Software Foundation, Inc. Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu) ! 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 "hconfig.h" --- 2,23 ---- Copyright (C) 1991, 1994, 1996, 1998, 1999, 2000 Free Software Foundation, Inc. Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu) ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "hconfig.h" *************** write_units (num_units, multiplicity, si *** 145,163 **** printf ("#define INSN_SCHEDULING\n\n"); printf ("extern int result_ready_cost PARAMS ((rtx));\n"); printf ("extern int function_units_used PARAMS ((rtx));\n\n"); ! printf ("extern struct function_unit_desc\n"); printf ("{\n"); ! printf (" const char *name;\n"); ! printf (" int bitmask;\n"); ! printf (" int multiplicity;\n"); ! printf (" int simultaneity;\n"); ! printf (" int default_cost;\n"); ! printf (" int max_issue_delay;\n"); ! printf (" int (*ready_cost_function) PARAMS ((rtx));\n"); ! printf (" int (*conflict_cost_function) PARAMS ((rtx, rtx));\n"); ! printf (" int max_blockage;\n"); ! printf (" unsigned int (*blockage_range_function) PARAMS ((rtx));\n"); ! printf (" int (*blockage_function) PARAMS ((rtx, rtx));\n"); printf ("} function_units[];\n\n"); printf ("#define FUNCTION_UNITS_SIZE %d\n", num_units); printf ("#define MIN_MULTIPLICITY %d\n", multiplicity->min); --- 145,163 ---- printf ("#define INSN_SCHEDULING\n\n"); printf ("extern int result_ready_cost PARAMS ((rtx));\n"); printf ("extern int function_units_used PARAMS ((rtx));\n\n"); ! printf ("extern const struct function_unit_desc\n"); printf ("{\n"); ! printf (" const char *const name;\n"); ! printf (" const int bitmask;\n"); ! printf (" const int multiplicity;\n"); ! printf (" const int simultaneity;\n"); ! printf (" const int default_cost;\n"); ! printf (" const int max_issue_delay;\n"); ! printf (" int (*const ready_cost_function) PARAMS ((rtx));\n"); ! printf (" int (*const conflict_cost_function) PARAMS ((rtx, rtx));\n"); ! printf (" const int max_blockage;\n"); ! printf (" unsigned int (*const blockage_range_function) PARAMS ((rtx));\n"); ! printf (" int (*const blockage_function) PARAMS ((rtx, rtx));\n"); printf ("} function_units[];\n\n"); printf ("#define FUNCTION_UNITS_SIZE %d\n", num_units); printf ("#define MIN_MULTIPLICITY %d\n", multiplicity->min); *************** main (argc, argv) *** 208,226 **** progname = "genattr"; if (argc <= 1) ! fatal ("No input file name."); ! if (init_md_reader (argv[1]) != SUCCESS_EXIT_CODE) return (FATAL_EXIT_CODE); ! printf ("/* Generated automatically by the program `genattr'\n\ ! from the machine description file `md'. */\n\n"); /* For compatibility, define the attribute `alternative', which is just a reference to the variable `which_alternative'. */ ! printf ("#define HAVE_ATTR_alternative\n"); ! printf ("#define get_attr_alternative(insn) which_alternative\n"); /* Read the machine description. */ --- 208,228 ---- progname = "genattr"; if (argc <= 1) ! fatal ("no input file name"); ! if (init_md_reader_args (argc, argv) != SUCCESS_EXIT_CODE) return (FATAL_EXIT_CODE); ! puts ("/* Generated automatically by the program `genattr'"); ! puts (" from the machine description file `md'. */\n"); ! puts ("#ifndef GCC_INSN_ATTR_H"); ! puts ("#define GCC_INSN_ATTR_H\n"); /* For compatibility, define the attribute `alternative', which is just a reference to the variable `which_alternative'. */ ! puts ("#define HAVE_ATTR_alternative"); ! puts ("#define get_attr_alternative(insn) which_alternative"); /* Read the machine description. */ *************** from the machine description file `md'. *** 279,289 **** if (unit == 0) { - int len = strlen (name) + 1; unit = (struct function_unit *) ! alloca (sizeof (struct function_unit)); ! unit->name = (char *) alloca (len); ! memcpy (unit->name, name, len); unit->multiplicity = multiplicity; unit->simultaneity = simultaneity; unit->ready_cost.min = unit->ready_cost.max = ready_cost; --- 281,289 ---- if (unit == 0) { unit = (struct function_unit *) ! xmalloc (sizeof (struct function_unit)); ! unit->name = xstrdup (name); unit->multiplicity = multiplicity; unit->simultaneity = simultaneity; unit->ready_cost.min = unit->ready_cost.max = ready_cost; *************** from the machine description file `md'. *** 297,303 **** } else if (unit->multiplicity != multiplicity || unit->simultaneity != simultaneity) ! fatal ("Differing specifications given for `%s' function unit.", unit->name); extend_range (&unit->ready_cost, ready_cost, ready_cost); --- 297,303 ---- } else if (unit->multiplicity != multiplicity || unit->simultaneity != simultaneity) ! fatal ("Differing specifications given for `%s' function unit", unit->name); extend_range (&unit->ready_cost, ready_cost, ready_cost); *************** from the machine description file `md'. *** 361,368 **** printf("#define ATTR_FLAG_unlikely\t0x10\n"); printf("#define ATTR_FLAG_very_unlikely\t0x20\n"); ! fflush (stdout); ! return (ferror (stdout) != 0 ? FATAL_EXIT_CODE : SUCCESS_EXIT_CODE); } /* Define this so we can link with print-rtl.o to get debug_rtx function. */ --- 361,372 ---- printf("#define ATTR_FLAG_unlikely\t0x10\n"); printf("#define ATTR_FLAG_very_unlikely\t0x20\n"); ! puts("\n#endif /* GCC_INSN_ATTR_H */"); ! ! if (ferror (stdout) || fflush (stdout) || fclose (stdout)) ! return FATAL_EXIT_CODE; ! ! return SUCCESS_EXIT_CODE; } /* Define this so we can link with print-rtl.o to get debug_rtx function. */ diff -Nrc3pad gcc-3.0.4/gcc/genattrtab.c gcc-3.1/gcc/genattrtab.c *** gcc-3.0.4/gcc/genattrtab.c Sat Dec 16 19:00:57 2000 --- gcc-3.1/gcc/genattrtab.c Tue Feb 19 02:53:13 2002 *************** *** 1,24 **** /* Generate code from machine description to compute values of attributes. Copyright (C) 1991, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000 Free Software Foundation, Inc. Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu) ! 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 program handles insn attributes and the DEFINE_DELAY and DEFINE_FUNCTION_UNIT definitions. --- 1,24 ---- /* Generate code from machine description to compute values of attributes. Copyright (C) 1991, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2002 Free Software Foundation, Inc. Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu) ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* This program handles insn attributes and the DEFINE_DELAY and DEFINE_FUNCTION_UNIT definitions. *************** struct function_unit *** 231,237 **** struct function_unit_op *ops; /* Pointer to first operation type. */ int needs_conflict_function; /* Nonzero if a conflict function required. */ int needs_blockage_function; /* Nonzero if a blockage function required. */ ! int needs_range_function; /* Nonzero if blockage range function needed.*/ rtx default_cost; /* Conflict cost, if constant. */ struct range issue_delay; /* Range of issue delay values. */ int max_blockage; /* Maximum time an insn blocks the unit. */ --- 231,237 ---- struct function_unit_op *ops; /* Pointer to first operation type. */ int needs_conflict_function; /* Nonzero if a conflict function required. */ int needs_blockage_function; /* Nonzero if a blockage function required. */ ! int needs_range_function; /* Nonzero if blockage range function needed. */ rtx default_cost; /* Conflict cost, if constant. */ struct range issue_delay; /* Range of issue delay values. */ int max_blockage; /* Maximum time an insn blocks the unit. */ *************** rtx pic_offset_table_rtx; *** 365,371 **** static void attr_hash_add_rtx PARAMS ((int, rtx)); static void attr_hash_add_string PARAMS ((int, char *)); static rtx attr_rtx PARAMS ((enum rtx_code, ...)); ! static char *attr_printf PARAMS ((int, const char *, ...)) ATTRIBUTE_PRINTF_2; static char *attr_string PARAMS ((const char *, int)); static rtx check_attr_test PARAMS ((rtx, int, int)); --- 365,372 ---- static void attr_hash_add_rtx PARAMS ((int, rtx)); static void attr_hash_add_string PARAMS ((int, char *)); static rtx attr_rtx PARAMS ((enum rtx_code, ...)); ! static rtx attr_rtx_1 PARAMS ((enum rtx_code, va_list)); ! static char *attr_printf PARAMS ((unsigned int, const char *, ...)) ATTRIBUTE_PRINTF_2; static char *attr_string PARAMS ((const char *, int)); static rtx check_attr_test PARAMS ((rtx, int, int)); *************** static rtx evaluate_eq_attr PARAMS ((rtx *** 417,422 **** --- 418,424 ---- static rtx simplify_and_tree PARAMS ((rtx, rtx *, int, int)); static rtx simplify_or_tree PARAMS ((rtx, rtx *, int, int)); static rtx simplify_test_exp PARAMS ((rtx, int, int)); + static rtx simplify_test_exp_in_temp PARAMS ((rtx, int, int)); static void optimize_attrs PARAMS ((void)); static void gen_attr PARAMS ((rtx, int)); static int count_alternatives PARAMS ((rtx)); *************** attr_hash_add_rtx (hashcode, rtl) *** 502,508 **** int hashcode; rtx rtl; { ! register struct attr_hash *h; h = (struct attr_hash *) obstack_alloc (hash_obstack, sizeof (struct attr_hash)); --- 504,510 ---- int hashcode; rtx rtl; { ! struct attr_hash *h; h = (struct attr_hash *) obstack_alloc (hash_obstack, sizeof (struct attr_hash)); *************** attr_hash_add_string (hashcode, str) *** 519,525 **** int hashcode; char *str; { ! register struct attr_hash *h; h = (struct attr_hash *) obstack_alloc (hash_obstack, sizeof (struct attr_hash)); --- 521,527 ---- int hashcode; char *str; { ! struct attr_hash *h; h = (struct attr_hash *) obstack_alloc (hash_obstack, sizeof (struct attr_hash)); *************** attr_hash_add_string (hashcode, str) *** 540,564 **** rtx attr_rtx (code, [element1, ..., elementn]) */ static rtx ! attr_rtx VPARAMS ((enum rtx_code code, ...)) { ! #ifndef ANSI_PROTOTYPES ! enum rtx_code code; ! #endif ! va_list p; ! register int i; /* Array indices... */ ! register const char *fmt; /* Current rtx's format... */ ! register rtx rt_val = NULL_RTX;/* RTX to return to caller... */ int hashcode; ! register struct attr_hash *h; struct obstack *old_obstack = rtl_obstack; - VA_START (p, code); - - #ifndef ANSI_PROTOTYPES - code = va_arg (p, enum rtx_code); - #endif - /* For each of several cases, search the hash table for an existing entry. Use that entry if one is found; otherwise create a new RTL and add it to the table. */ --- 542,556 ---- rtx attr_rtx (code, [element1, ..., elementn]) */ static rtx ! attr_rtx_1 (code, p) ! enum rtx_code code; ! va_list p; { ! rtx rt_val = NULL_RTX;/* RTX to return to caller... */ int hashcode; ! struct attr_hash *h; struct obstack *old_obstack = rtl_obstack; /* For each of several cases, search the hash table for an existing entry. Use that entry if one is found; otherwise create a new RTL and add it to the table. */ *************** attr_rtx VPARAMS ((enum rtx_code code, . *** 572,578 **** { rt_val = rtx_alloc (code); XEXP (rt_val, 0) = arg0; - va_end (p); return rt_val; } --- 564,569 ---- *************** attr_rtx VPARAMS ((enum rtx_code code, . *** 581,587 **** if (h->hashcode == hashcode && GET_CODE (h->u.rtl) == code && XEXP (h->u.rtl, 0) == arg0) ! goto found; if (h == 0) { --- 572,578 ---- if (h->hashcode == hashcode && GET_CODE (h->u.rtl) == code && XEXP (h->u.rtl, 0) == arg0) ! return h->u.rtl; if (h == 0) { *************** attr_rtx VPARAMS ((enum rtx_code code, . *** 603,609 **** rt_val = rtx_alloc (code); XEXP (rt_val, 0) = arg0; XEXP (rt_val, 1) = arg1; - va_end (p); return rt_val; } --- 594,599 ---- *************** attr_rtx VPARAMS ((enum rtx_code code, . *** 613,619 **** && GET_CODE (h->u.rtl) == code && XEXP (h->u.rtl, 0) == arg0 && XEXP (h->u.rtl, 1) == arg1) ! goto found; if (h == 0) { --- 603,609 ---- && GET_CODE (h->u.rtl) == code && XEXP (h->u.rtl, 0) == arg0 && XEXP (h->u.rtl, 1) == arg1) ! return h->u.rtl; if (h == 0) { *************** attr_rtx VPARAMS ((enum rtx_code code, . *** 636,642 **** if (h->hashcode == hashcode && GET_CODE (h->u.rtl) == code && XSTR (h->u.rtl, 0) == arg0) ! goto found; if (h == 0) { --- 626,632 ---- if (h->hashcode == hashcode && GET_CODE (h->u.rtl) == code && XSTR (h->u.rtl, 0) == arg0) ! return h->u.rtl; if (h == 0) { *************** attr_rtx VPARAMS ((enum rtx_code code, . *** 658,664 **** && GET_CODE (h->u.rtl) == code && XSTR (h->u.rtl, 0) == arg0 && XSTR (h->u.rtl, 1) == arg1) ! goto found; if (h == 0) { --- 648,654 ---- && GET_CODE (h->u.rtl) == code && XSTR (h->u.rtl, 0) == arg0 && XSTR (h->u.rtl, 1) == arg1) ! return h->u.rtl; if (h == 0) { *************** attr_rtx VPARAMS ((enum rtx_code code, . *** 672,690 **** { HOST_WIDE_INT arg0 = va_arg (p, HOST_WIDE_INT); if (arg0 == 0) ! { ! va_end (p); ! return false_rtx; ! } ! if (arg0 == 1) ! { ! va_end (p); ! return true_rtx; ! } ! goto nohash; } else { nohash: rt_val = rtx_alloc (code); /* Allocate the storage space. */ --- 662,677 ---- { HOST_WIDE_INT arg0 = va_arg (p, HOST_WIDE_INT); if (arg0 == 0) ! return false_rtx; ! else if (arg0 == 1) ! return true_rtx; ! else ! goto nohash; } else { + int i; /* Array indices... */ + const char *fmt; /* Current rtx's format... */ nohash: rt_val = rtx_alloc (code); /* Allocate the storage space. */ *************** attr_rtx VPARAMS ((enum rtx_code code, . *** 721,739 **** abort (); } } - va_end (p); return rt_val; } rtl_obstack = old_obstack; - va_end (p); attr_hash_add_rtx (hashcode, rt_val); RTX_INTEGRATED_P (rt_val) = 1; return rt_val; ! found: ! va_end (p); ! return h->u.rtl; } /* Create a new string printed with the printf line arguments into a space --- 708,732 ---- abort (); } } return rt_val; } rtl_obstack = old_obstack; attr_hash_add_rtx (hashcode, rt_val); RTX_INTEGRATED_P (rt_val) = 1; return rt_val; + } ! static rtx ! attr_rtx VPARAMS ((enum rtx_code code, ...)) ! { ! rtx result; ! ! VA_OPEN (p, code); ! VA_FIXEDARG (p, enum rtx_code, code); ! result = attr_rtx_1 (code, p); ! VA_CLOSE (p); ! return result; } /* Create a new string printed with the printf line arguments into a space *************** attr_rtx VPARAMS ((enum rtx_code code, . *** 742,767 **** rtx attr_printf (len, format, [arg1, ..., argn]) */ static char * ! attr_printf VPARAMS ((register int len, const char *fmt, ...)) { ! #ifndef ANSI_PROTOTYPES ! register int len; ! const char *fmt; ! #endif ! va_list p; ! register char *str; ! ! VA_START (p, fmt); ! #ifndef ANSI_PROTOTYPES ! len = va_arg (p, int); ! fmt = va_arg (p, const char *); ! #endif - /* Print the string into a temporary location. */ - str = (char *) alloca (len); vsprintf (str, fmt, p); ! va_end (p); return attr_string (str, strlen (str)); } --- 735,753 ---- rtx attr_printf (len, format, [arg1, ..., argn]) */ static char * ! attr_printf VPARAMS ((unsigned int len, const char *fmt, ...)) { ! char str[256]; ! VA_OPEN (p, fmt); ! VA_FIXEDARG (p, unsigned int, len); ! VA_FIXEDARG (p, const char *, fmt); ! ! if (len > sizeof str - 1) /* Leave room for \0. */ ! abort (); vsprintf (str, fmt, p); ! VA_CLOSE (p); return attr_string (str, strlen (str)); } *************** attr_string (str, len) *** 789,798 **** const char *str; int len; { ! register struct attr_hash *h; int hashcode; int i; ! register char *new_str; /* Compute the hash code. */ hashcode = (len + 1) * 613 + (unsigned) str[0]; --- 775,784 ---- const char *str; int len; { ! struct attr_hash *h; int hashcode; int i; ! char *new_str; /* Compute the hash code. */ hashcode = (len + 1) * 613 + (unsigned) str[0]; *************** attr_equal_p (x, y) *** 834,845 **** static rtx attr_copy_rtx (orig) ! register rtx orig; { ! register rtx copy; ! register int i, j; ! register RTX_CODE code; ! register const char *format_ptr; /* No need to copy a permanent object. */ if (RTX_INTEGRATED_P (orig)) --- 820,831 ---- static rtx attr_copy_rtx (orig) ! rtx orig; { ! rtx copy; ! int i, j; ! RTX_CODE code; ! const char *format_ptr; /* No need to copy a permanent object. */ if (RTX_INTEGRATED_P (orig)) *************** attr_copy_rtx (orig) *** 853,858 **** --- 839,845 ---- case QUEUED: case CONST_INT: case CONST_DOUBLE: + case CONST_VECTOR: case SYMBOL_REF: case CODE_LABEL: case PC: *************** attr_copy_rtx (orig) *** 926,932 **** in the attribute (or `alternative_name') to speed up subsequent `find_attr' calls and eliminate most `strcmp' calls. ! Return the new expression, if any. */ static rtx check_attr_test (exp, is_const, lineno) --- 913,919 ---- in the attribute (or `alternative_name') to speed up subsequent `find_attr' calls and eliminate most `strcmp' calls. ! Return the new expression, if any. */ static rtx check_attr_test (exp, is_const, lineno) *************** check_attr_test (exp, is_const, lineno) *** 962,972 **** return exp; } else ! fatal ("Unknown attribute `%s' in EQ_ATTR", XSTR (exp, 0)); } if (is_const && ! attr->is_const) ! fatal ("Constant expression uses insn attribute `%s' in EQ_ATTR", XSTR (exp, 0)); /* Copy this just to make it permanent, --- 949,959 ---- return exp; } else ! fatal ("unknown attribute `%s' in EQ_ATTR", XSTR (exp, 0)); } if (is_const && ! attr->is_const) ! fatal ("constant expression uses insn attribute `%s' in EQ_ATTR", XSTR (exp, 0)); /* Copy this just to make it permanent, *************** check_attr_test (exp, is_const, lineno) *** 982,989 **** if (attr->is_numeric) { for (p = XSTR (exp, 1); *p; p++) ! if (*p < '0' || *p > '9') ! fatal ("Attribute `%s' takes only numeric values", XSTR (exp, 0)); } else --- 969,976 ---- if (attr->is_numeric) { for (p = XSTR (exp, 1); *p; p++) ! if (! ISDIGIT (*p)) ! fatal ("attribute `%s' takes only numeric values", XSTR (exp, 0)); } else *************** check_attr_test (exp, is_const, lineno) *** 994,1000 **** break; if (av == NULL) ! fatal ("Unknown value `%s' for `%s' attribute", XSTR (exp, 1), XSTR (exp, 0)); } } --- 981,987 ---- break; if (av == NULL) ! fatal ("unknown value `%s' for `%s' attribute", XSTR (exp, 1), XSTR (exp, 0)); } } *************** check_attr_value (exp, attr) *** 1118,1124 **** if (attr && attr->negative_ok && *p == '-') p++; for (; *p; p++) ! if (*p > '9' || *p < '0') { message_with_line (attr ? attr->lineno : 0, "non-numeric value for numeric attribute %s", --- 1105,1111 ---- if (attr && attr->negative_ok && *p == '-') p++; for (; *p; p++) ! if (! ISDIGIT (*p)) { message_with_line (attr ? attr->lineno : 0, "non-numeric value for numeric attribute %s", *************** make_canonical (attr, exp) *** 1452,1458 **** if (! strcmp (XSTR (exp, 0), "*")) { if (attr == 0 || attr->default_val == 0) ! fatal ("(attr_value \"*\") used in invalid context."); exp = attr->default_val->value; } --- 1439,1445 ---- if (! strcmp (XSTR (exp, 0), "*")) { if (attr == 0 || attr->default_val == 0) ! fatal ("(attr_value \"*\") used in invalid context"); exp = attr->default_val->value; } *************** expand_delays () *** 1643,1651 **** newexp = attr_rtx (IF_THEN_ELSE, condexp, make_numeric_value (1), make_numeric_value (0)); ! p = attr_printf (sizeof ("*delay__") + MAX_DIGITS * 2, ! "*delay_%d_%d", ! delay->num, i / 3); make_internal_attr (p, newexp, 1); if (have_annul_true) --- 1630,1637 ---- newexp = attr_rtx (IF_THEN_ELSE, condexp, make_numeric_value (1), make_numeric_value (0)); ! p = attr_printf (sizeof "*delay__" + MAX_DIGITS * 2, ! "*delay_%d_%d", delay->num, i / 3); make_internal_attr (p, newexp, 1); if (have_annul_true) *************** expand_delays () *** 1655,1661 **** newexp = attr_rtx (IF_THEN_ELSE, condexp, make_numeric_value (1), make_numeric_value (0)); ! p = attr_printf (sizeof ("*annul_true__") + MAX_DIGITS * 2, "*annul_true_%d_%d", delay->num, i / 3); make_internal_attr (p, newexp, 1); } --- 1641,1647 ---- newexp = attr_rtx (IF_THEN_ELSE, condexp, make_numeric_value (1), make_numeric_value (0)); ! p = attr_printf (sizeof "*annul_true__" + MAX_DIGITS * 2, "*annul_true_%d_%d", delay->num, i / 3); make_internal_attr (p, newexp, 1); } *************** expand_delays () *** 1667,1673 **** newexp = attr_rtx (IF_THEN_ELSE, condexp, make_numeric_value (1), make_numeric_value (0)); ! p = attr_printf (sizeof ("*annul_false__") + MAX_DIGITS * 2, "*annul_false_%d_%d", delay->num, i / 3); make_internal_attr (p, newexp, 1); } --- 1653,1659 ---- newexp = attr_rtx (IF_THEN_ELSE, condexp, make_numeric_value (1), make_numeric_value (0)); ! p = attr_printf (sizeof "*annul_false__" + MAX_DIGITS * 2, "*annul_false_%d_%d", delay->num, i / 3); make_internal_attr (p, newexp, 1); } *************** operate_exp (op, left, right) *** 1790,1796 **** return newexp; } else ! fatal ("Badly formed attribute value"); } /* A hack to prevent expand_units from completely blowing up: ORX_OP does --- 1776,1782 ---- return newexp; } else ! fatal ("badly formed attribute value"); } /* A hack to prevent expand_units from completely blowing up: ORX_OP does *************** operate_exp (op, left, right) *** 1842,1848 **** } else ! fatal ("Badly formed attribute value."); /* NOTREACHED */ return NULL; } --- 1828,1834 ---- } else ! fatal ("badly formed attribute value"); /* NOTREACHED */ return NULL; } *************** expand_units () *** 1920,1926 **** != unit->issue_delay.max); if (unit->needs_conflict_function) { ! str = attr_printf (strlen (unit->name) + sizeof ("*_cost_") + MAX_DIGITS, "*%s_cost_%d", unit->name, op->num); make_internal_attr (str, issue_exp, 1); } --- 1906,1913 ---- != unit->issue_delay.max); if (unit->needs_conflict_function) { ! str = attr_printf ((strlen (unit->name) + sizeof "*_cost_" ! + MAX_DIGITS), "*%s_cost_%d", unit->name, op->num); make_internal_attr (str, issue_exp, 1); } *************** expand_units () *** 1983,1994 **** /* Create an array of ops for each unit. Add an extra unit for the result_ready_cost function that has the ops of all other units. */ unit_ops = (struct function_unit_op ***) ! alloca ((num_units + 1) * sizeof (struct function_unit_op **)); unit_num = (struct function_unit **) ! alloca ((num_units + 1) * sizeof (struct function_unit *)); unit_num[num_units] = unit = (struct function_unit *) ! alloca (sizeof (struct function_unit)); unit->num = num_units; unit->num_opclasses = 0; --- 1970,1981 ---- /* Create an array of ops for each unit. Add an extra unit for the result_ready_cost function that has the ops of all other units. */ unit_ops = (struct function_unit_op ***) ! xmalloc ((num_units + 1) * sizeof (struct function_unit_op **)); unit_num = (struct function_unit **) ! xmalloc ((num_units + 1) * sizeof (struct function_unit *)); unit_num[num_units] = unit = (struct function_unit *) ! xmalloc (sizeof (struct function_unit)); unit->num = num_units; unit->num_opclasses = 0; *************** expand_units () *** 1997,2003 **** unit_num[num_units]->num_opclasses += unit->num_opclasses; unit_num[unit->num] = unit; unit_ops[unit->num] = op_array = (struct function_unit_op **) ! alloca (unit->num_opclasses * sizeof (struct function_unit_op *)); for (op = unit->ops; op; op = op->next) op_array[op->num] = op; --- 1984,1990 ---- unit_num[num_units]->num_opclasses += unit->num_opclasses; unit_num[unit->num] = unit; unit_ops[unit->num] = op_array = (struct function_unit_op **) ! xmalloc (unit->num_opclasses * sizeof (struct function_unit_op *)); for (op = unit->ops; op; op = op->next) op_array[op->num] = op; *************** expand_units () *** 2005,2016 **** /* Compose the array of ops for the extra unit. */ unit_ops[num_units] = op_array = (struct function_unit_op **) ! alloca (unit_num[num_units]->num_opclasses * sizeof (struct function_unit_op *)); for (unit = units, i = 0; unit; i += unit->num_opclasses, unit = unit->next) ! bcopy ((char *) unit_ops[unit->num], (char *) &op_array[i], ! unit->num_opclasses * sizeof (struct function_unit_op *)); /* Compute the ready cost function for each unit by computing the condition for each non-default value. */ --- 1992,2003 ---- /* Compose the array of ops for the extra unit. */ unit_ops[num_units] = op_array = (struct function_unit_op **) ! xmalloc (unit_num[num_units]->num_opclasses * sizeof (struct function_unit_op *)); for (unit = units, i = 0; unit; i += unit->num_opclasses, unit = unit->next) ! memcpy (&op_array[i], unit_ops[unit->num], ! unit->num_opclasses * sizeof (struct function_unit_op *)); /* Compute the ready cost function for each unit by computing the condition for each non-default value. */ *************** expand_units () *** 2149,2155 **** } /* Make an attribute for use in the blockage function. */ ! str = attr_printf (strlen (unit->name) + sizeof ("*_block_") + MAX_DIGITS, "*%s_block_%d", unit->name, op->num); make_internal_attr (str, blockage, 1); } --- 2136,2143 ---- } /* Make an attribute for use in the blockage function. */ ! str = attr_printf ((strlen (unit->name) + sizeof "*_block_" ! + MAX_DIGITS), "*%s_block_%d", unit->name, op->num); make_internal_attr (str, blockage, 1); } *************** expand_units () *** 2182,2193 **** newexp = operate_exp (RANGE_OP, min_blockage, max_blockage); newexp = simplify_knowing (newexp, unit->condexp); ! str = attr_printf (strlen (unit->name) + sizeof ("*_unit_blockage_range"), "*%s_unit_blockage_range", unit->name); make_internal_attr (str, newexp, 20); } ! str = attr_printf (strlen (unit->name) + sizeof ("*_unit_ready_cost"), "*%s_unit_ready_cost", unit->name); } else --- 2170,2182 ---- newexp = operate_exp (RANGE_OP, min_blockage, max_blockage); newexp = simplify_knowing (newexp, unit->condexp); ! str = attr_printf ((strlen (unit->name) ! + sizeof "*_unit_blockage_range"), "*%s_unit_blockage_range", unit->name); make_internal_attr (str, newexp, 20); } ! str = attr_printf (strlen (unit->name) + sizeof "*_unit_ready_cost", "*%s_unit_ready_cost", unit->name); } else *************** expand_units () *** 2229,2235 **** } /* Simplifying caseexp with simplify_by_exploding doesn't win. */ ! str = attr_printf (strlen (unit->name) + sizeof ("*_cases"), "*%s_cases", unit->name); make_internal_attr (str, caseexp, 1); } --- 2218,2224 ---- } /* Simplifying caseexp with simplify_by_exploding doesn't win. */ ! str = attr_printf (strlen (unit->name) + sizeof "*_cases", "*%s_cases", unit->name); make_internal_attr (str, caseexp, 1); } *************** static rtx *** 2264,2273 **** encode_units_mask (x) rtx x; { ! register int i; ! register int j; ! register enum rtx_code code; ! register const char *fmt; code = GET_CODE (x); --- 2253,2262 ---- encode_units_mask (x) rtx x; { ! int i; ! int j; ! enum rtx_code code; ! const char *fmt; code = GET_CODE (x); *************** encode_units_mask (x) *** 2290,2295 **** --- 2279,2285 ---- case QUEUED: case CONST_INT: case CONST_DOUBLE: + case CONST_VECTOR: case SYMBOL_REF: case CODE_LABEL: case PC: *************** substitute_address (exp, no_address_fn, *** 2449,2459 **** static void make_length_attrs () { ! static const char *new_names[] = {"*insn_default_length", "*insn_variable_length_p", "*insn_current_length"}; ! static rtx (*no_address_fn[]) PARAMS ((rtx)) = {identity_fn, zero_fn, zero_fn}; ! static rtx (*address_fn[]) PARAMS ((rtx)) = {max_fn, one_fn, identity_fn}; size_t i; struct attr_desc *length_attr, *new_attr; struct attr_value *av, *new_av; --- 2439,2449 ---- static void make_length_attrs () { ! static const char *const new_names[] = {"*insn_default_length", "*insn_variable_length_p", "*insn_current_length"}; ! static rtx (*const no_address_fn[]) PARAMS ((rtx)) = {identity_fn, zero_fn, zero_fn}; ! static rtx (*const address_fn[]) PARAMS ((rtx)) = {max_fn, one_fn, identity_fn}; size_t i; struct attr_desc *length_attr, *new_attr; struct attr_value *av, *new_av; *************** make_length_attrs () *** 2466,2472 **** return; if (! length_attr->is_numeric) ! fatal ("length attribute must be numeric."); length_attr->is_const = 0; length_attr->is_special = 1; --- 2456,2462 ---- return; if (! length_attr->is_numeric) ! fatal ("length attribute must be numeric"); length_attr->is_const = 0; length_attr->is_special = 1; *************** simplify_cond (exp, insn_code, insn_inde *** 2571,2579 **** rtx defval = XEXP (exp, 1); rtx new_defval = XEXP (exp, 1); int len = XVECLEN (exp, 0); ! rtx *tests = (rtx *) alloca (len * sizeof (rtx)); int allsame = 1; char *first_spacer; /* This lets us free all storage allocated below, if appropriate. */ first_spacer = (char *) obstack_finish (rtl_obstack); --- 2561,2570 ---- rtx defval = XEXP (exp, 1); rtx new_defval = XEXP (exp, 1); int len = XVECLEN (exp, 0); ! rtx *tests = (rtx *) xmalloc (len * sizeof (rtx)); int allsame = 1; char *first_spacer; + rtx ret; /* This lets us free all storage allocated below, if appropriate. */ first_spacer = (char *) obstack_finish (rtl_obstack); *************** simplify_cond (exp, insn_code, insn_inde *** 2591,2597 **** rtx newtest, newval; /* Simplify this test. */ ! newtest = SIMPLIFY_TEST_EXP (tests[i], insn_code, insn_index); tests[i] = newtest; newval = tests[i + 1]; --- 2582,2588 ---- rtx newtest, newval; /* Simplify this test. */ ! newtest = simplify_test_exp_in_temp (tests[i], insn_code, insn_index); tests[i] = newtest; newval = tests[i + 1]; *************** simplify_cond (exp, insn_code, insn_inde *** 2656,2666 **** if (len == 0) { if (GET_CODE (defval) == COND) ! return simplify_cond (defval, insn_code, insn_index); ! return defval; } else if (allsame) ! return exp; else { rtx newexp = rtx_alloc (COND); --- 2647,2658 ---- if (len == 0) { if (GET_CODE (defval) == COND) ! ret = simplify_cond (defval, insn_code, insn_index); ! else ! ret = defval; } else if (allsame) ! ret = exp; else { rtx newexp = rtx_alloc (COND); *************** simplify_cond (exp, insn_code, insn_inde *** 2668,2675 **** XVEC (newexp, 0) = rtvec_alloc (len); memcpy (XVEC (newexp, 0)->elem, tests, len * sizeof (rtx)); XEXP (newexp, 1) = new_defval; ! return newexp; } } /* Remove an insn entry from an attribute value. */ --- 2660,2669 ---- XVEC (newexp, 0) = rtvec_alloc (len); memcpy (XVEC (newexp, 0)->elem, tests, len * sizeof (rtx)); XEXP (newexp, 1) = new_defval; ! ret = newexp; } + free (tests); + return ret; } /* Remove an insn entry from an attribute value. */ *************** insert_right_side (code, exp, term, insn *** 2777,2783 **** newexp = attr_rtx (code, exp, term); } ! return SIMPLIFY_TEST_EXP (newexp, insn_code, insn_index); } /* If we have an expression which AND's a bunch of --- 2771,2777 ---- newexp = attr_rtx (code, exp, term); } ! return simplify_test_exp_in_temp (newexp, insn_code, insn_index); } /* If we have an expression which AND's a bunch of *************** evaluate_eq_attr (exp, value, insn_code, *** 2864,2876 **** } else if (GET_CODE (value) == SYMBOL_REF) { ! char *p, *string; if (GET_CODE (exp) != EQ_ATTR) abort (); ! string = (char *) alloca (2 + strlen (XSTR (exp, 0)) ! + strlen (XSTR (exp, 1))); strcpy (string, XSTR (exp, 0)); strcat (string, "_"); strcat (string, XSTR (exp, 1)); --- 2858,2872 ---- } else if (GET_CODE (value) == SYMBOL_REF) { ! char *p; ! char string[256]; if (GET_CODE (exp) != EQ_ATTR) abort (); ! if (strlen (XSTR (exp, 0)) + strlen (XSTR (exp, 1)) + 2 > 256) ! abort (); ! strcpy (string, XSTR (exp, 0)); strcat (string, "_"); strcat (string, XSTR (exp, 1)); *************** evaluate_eq_attr (exp, value, insn_code, *** 2903,2910 **** for (i = 0; i < XVECLEN (value, 0); i += 2) { ! rtx this = SIMPLIFY_TEST_EXP (XVECEXP (value, 0, i), ! insn_code, insn_index); SIMPLIFY_ALTERNATIVE (this); --- 2899,2906 ---- for (i = 0; i < XVECLEN (value, 0); i += 2) { ! rtx this = simplify_test_exp_in_temp (XVECEXP (value, 0, i), ! insn_code, insn_index); SIMPLIFY_ALTERNATIVE (this); *************** simplify_and_tree (exp, pterm, insn_code *** 2985,2991 **** { newexp = attr_rtx (GET_CODE (exp), left, right); ! exp = SIMPLIFY_TEST_EXP (newexp, insn_code, insn_index); } } --- 2981,2987 ---- { newexp = attr_rtx (GET_CODE (exp), left, right); ! exp = simplify_test_exp_in_temp (newexp, insn_code, insn_index); } } *************** simplify_and_tree (exp, pterm, insn_code *** 3008,3014 **** { newexp = attr_rtx (GET_CODE (exp), left, right); ! exp = SIMPLIFY_TEST_EXP (newexp, insn_code, insn_index); } } --- 3004,3010 ---- { newexp = attr_rtx (GET_CODE (exp), left, right); ! exp = simplify_test_exp_in_temp (newexp, insn_code, insn_index); } } *************** simplify_or_tree (exp, pterm, insn_code, *** 3104,3110 **** { newexp = attr_rtx (GET_CODE (exp), left, right); ! exp = SIMPLIFY_TEST_EXP (newexp, insn_code, insn_index); } } --- 3100,3106 ---- { newexp = attr_rtx (GET_CODE (exp), left, right); ! exp = simplify_test_exp_in_temp (newexp, insn_code, insn_index); } } *************** simplify_or_tree (exp, pterm, insn_code, *** 3127,3133 **** { newexp = attr_rtx (GET_CODE (exp), left, right); ! exp = SIMPLIFY_TEST_EXP (newexp, insn_code, insn_index); } } --- 3123,3129 ---- { newexp = attr_rtx (GET_CODE (exp), left, right); ! exp = simplify_test_exp_in_temp (newexp, insn_code, insn_index); } } *************** simplify_or_tree (exp, pterm, insn_code, *** 3153,3159 **** return exp; } /* Compute approximate cost of the expression. Used to decide whether ! expression is cheap enought for inline. */ static int attr_rtx_cost (x) rtx x; --- 3149,3155 ---- return exp; } /* Compute approximate cost of the expression. Used to decide whether ! expression is cheap enough for inline. */ static int attr_rtx_cost (x) rtx x; *************** attr_rtx_cost (x) *** 3200,3205 **** --- 3196,3224 ---- return cost; } + + /* Simplify test expression and use temporary obstack in order to avoid + memory bloat. Use RTX_UNCHANGING_P to avoid unnecesary simplifications + and avoid unnecesary copying if possible. */ + + static rtx + simplify_test_exp_in_temp (exp, insn_code, insn_index) + rtx exp; + int insn_code, insn_index; + { + rtx x; + struct obstack *old; + if (RTX_UNCHANGING_P (exp)) + return exp; + old = rtl_obstack; + rtl_obstack = temp_obstack; + x = simplify_test_exp (exp, insn_code, insn_index); + rtl_obstack = old; + if (x == exp || rtl_obstack == temp_obstack) + return x; + return attr_copy_rtx (x); + } + /* Given an expression, see if it can be simplified for a particular insn code based on the values of other attributes being tested. This can eliminate nested get_attr_... calls. *************** simplify_test_exp (exp, insn_code, insn_ *** 3288,3294 **** { i = compute_alternative_mask (exp, AND); if (i & ~insn_alternatives[insn_code]) ! fatal ("Invalid alternative specified for pattern number %d", insn_index); /* If all alternatives are excluded, this is false. */ --- 3307,3313 ---- { i = compute_alternative_mask (exp, AND); if (i & ~insn_alternatives[insn_code]) ! fatal ("invalid alternative specified for pattern number %d", insn_index); /* If all alternatives are excluded, this is false. */ *************** simplify_test_exp (exp, insn_code, insn_ *** 3372,3378 **** { i = compute_alternative_mask (exp, IOR); if (i & ~insn_alternatives[insn_code]) ! fatal ("Invalid alternative specified for pattern number %d", insn_index); /* If all alternatives are included, this is true. */ --- 3391,3397 ---- { i = compute_alternative_mask (exp, IOR); if (i & ~insn_alternatives[insn_code]) ! fatal ("invalid alternative specified for pattern number %d", insn_index); /* If all alternatives are included, this is true. */ *************** simplify_test_exp (exp, insn_code, insn_ *** 3449,3455 **** /* Look at the value for this insn code in the specified attribute. We normally can replace this comparison with the condition that ! would give this insn the values being tested for. */ if (XSTR (exp, 0) != alternative_name && (attr = find_attr (XSTR (exp, 0), 0)) != NULL) for (av = attr->first_value; av; av = av->next) --- 3468,3474 ---- /* Look at the value for this insn code in the specified attribute. We normally can replace this comparison with the condition that ! would give this insn the values being tested for. */ if (XSTR (exp, 0) != alternative_name && (attr = find_attr (XSTR (exp, 0), 0)) != NULL) for (av = attr->first_value; av; av = av->next) *************** simplify_test_exp (exp, insn_code, insn_ *** 3457,3469 **** if (ie->insn_code == insn_code) { rtx x; - struct obstack *old = rtl_obstack; - rtl_obstack = temp_obstack; x = evaluate_eq_attr (exp, av->value, insn_code, insn_index); x = SIMPLIFY_TEST_EXP (x, insn_code, insn_index); - rtl_obstack = old; if (attr_rtx_cost(x) < 20) ! return attr_copy_rtx (x); } break; --- 3476,3485 ---- if (ie->insn_code == insn_code) { rtx x; x = evaluate_eq_attr (exp, av->value, insn_code, insn_index); x = SIMPLIFY_TEST_EXP (x, insn_code, insn_index); if (attr_rtx_cost(x) < 20) ! return x; } break; *************** optimize_attrs () *** 3492,3498 **** struct attr_value *av; struct insn_ent *ie; rtx newexp; - int something_changed = 1; int i; struct attr_value_list { --- 3508,3513 ---- *************** optimize_attrs () *** 3513,3519 **** /* Make 2 extra elements, for "code" values -2 and -1. */ insn_code_values ! = (struct attr_value_list **) alloca ((insn_code_number + 2) * sizeof (struct attr_value_list *)); memset ((char *) insn_code_values, 0, (insn_code_number + 2) * sizeof (struct attr_value_list *)); --- 3528,3534 ---- /* Make 2 extra elements, for "code" values -2 and -1. */ insn_code_values ! = (struct attr_value_list **) xmalloc ((insn_code_number + 2) * sizeof (struct attr_value_list *)); memset ((char *) insn_code_values, 0, (insn_code_number + 2) * sizeof (struct attr_value_list *)); *************** optimize_attrs () *** 3521,3529 **** /* Offset the table address so we can index by -2 or -1. */ insn_code_values += 2; - /* Allocate the attr_value_list structures using xmalloc rather than - alloca, because using alloca can overflow the maximum permitted - stack limit on SPARC Lynx. */ iv = ivbuf = ((struct attr_value_list *) xmalloc (num_insn_ents * sizeof (struct attr_value_list))); --- 3536,3541 ---- *************** optimize_attrs () *** 3552,3598 **** for (iv = insn_code_values[i]; iv; iv = iv->next) clear_struct_flag (iv->av->value); ! /* Loop until nothing changes for one iteration. */ ! something_changed = 1; ! while (something_changed) { ! something_changed = 0; ! for (iv = insn_code_values[i]; iv; iv = iv->next) ! { ! struct obstack *old = rtl_obstack; ! attr = iv->attr; ! av = iv->av; ! ie = iv->ie; ! if (GET_CODE (av->value) != COND) ! continue; ! rtl_obstack = temp_obstack; #if 0 /* This was intended as a speed up, but it was slower. */ ! if (insn_n_alternatives[ie->insn_code] > 6 ! && count_sub_rtxs (av->value, 200) >= 200) ! newexp = simplify_by_alternatives (av->value, ie->insn_code, ! ie->insn_index); ! else #endif ! newexp = simplify_cond (av->value, ie->insn_code, ! ie->insn_index); ! rtl_obstack = old; ! if (newexp != av->value) ! { ! newexp = attr_copy_rtx (newexp); ! remove_insn_ent (av, ie); ! av = get_attr_value (newexp, attr, ie->insn_code); ! iv->av = av; ! insert_insn_ent (av, ie); ! something_changed = 1; ! } } } } free (ivbuf); } #if 0 --- 3564,3611 ---- for (iv = insn_code_values[i]; iv; iv = iv->next) clear_struct_flag (iv->av->value); ! for (iv = insn_code_values[i]; iv; iv = iv->next) { ! struct obstack *old = rtl_obstack; ! attr = iv->attr; ! av = iv->av; ! ie = iv->ie; ! if (GET_CODE (av->value) != COND) ! continue; ! rtl_obstack = temp_obstack; #if 0 /* This was intended as a speed up, but it was slower. */ ! if (insn_n_alternatives[ie->insn_code] > 6 ! && count_sub_rtxs (av->value, 200) >= 200) ! newexp = simplify_by_alternatives (av->value, ie->insn_code, ! ie->insn_index); ! else #endif ! newexp = av->value; ! while (GET_CODE (newexp) == COND) ! { ! rtx newexp2 = simplify_cond (newexp, ie->insn_code, ! ie->insn_index); ! if (newexp2 == newexp) ! break; ! newexp = newexp2; ! } ! rtl_obstack = old; ! if (newexp != av->value) ! { ! newexp = attr_copy_rtx (newexp); ! remove_insn_ent (av, ie); ! av = get_attr_value (newexp, attr, ie->insn_code); ! iv->av = av; ! insert_insn_ent (av, ie); } } } free (ivbuf); + free (insn_code_values - 2); } #if 0 *************** simplify_by_exploding (exp) *** 3641,3646 **** --- 3654,3660 ---- rtx *condtest, *condval; int i, j, total, ndim = 0; int most_tests, num_marks, new_marks; + rtx ret; /* Locate all the EQ_ATTR expressions. */ if (! find_and_mark_used_attributes (exp, &list, &ndim) || ndim == 0) *************** simplify_by_exploding (exp) *** 3655,3661 **** cover the domain of the attribute. This makes the expanded COND form order independent. */ ! space = (struct dimension *) alloca (ndim * sizeof (struct dimension)); total = 1; for (ndim = 0; list; ndim++) --- 3669,3675 ---- cover the domain of the attribute. This makes the expanded COND form order independent. */ ! space = (struct dimension *) xmalloc (ndim * sizeof (struct dimension)); total = 1; for (ndim = 0; list; ndim++) *************** simplify_by_exploding (exp) *** 3710,3717 **** for (i = 0; i < ndim; i++) space[i].current_value = space[i].values; ! condtest = (rtx *) alloca (total * sizeof (rtx)); ! condval = (rtx *) alloca (total * sizeof (rtx)); /* Expand the tests and values by iterating over all values in the attribute space. */ --- 3724,3731 ---- for (i = 0; i < ndim; i++) space[i].current_value = space[i].values; ! condtest = (rtx *) xmalloc (total * sizeof (rtx)); ! condval = (rtx *) xmalloc (total * sizeof (rtx)); /* Expand the tests and values by iterating over all values in the attribute space. */ *************** simplify_by_exploding (exp) *** 3727,3732 **** --- 3741,3747 ---- /* We are now finished with the original expression. */ unmark_used_attributes (0, space, ndim); + free (space); /* Find the most used constant value and make that the default. */ most_tests = -1; *************** simplify_by_exploding (exp) *** 3753,3779 **** /* Give up if nothing is constant. */ if (num_marks == 0) ! return exp; ! /* If all values are the default, use that. */ ! if (total == most_tests) ! return defval; /* Make a COND with the most common constant value the default. (A more complex method where tests with the same value were combined didn't seem to improve things.) */ ! condexp = rtx_alloc (COND); ! XVEC (condexp, 0) = rtvec_alloc ((total - most_tests) * 2); ! XEXP (condexp, 1) = defval; ! for (i = j = 0; i < total; i++) ! if (condval[i] != defval) ! { ! XVECEXP (condexp, 0, 2 * j) = condtest[i]; ! XVECEXP (condexp, 0, 2 * j + 1) = condval[i]; ! j++; ! } ! ! return condexp; } /* Set the MEM_VOLATILE_P flag for all EQ_ATTR expressions in EXP and --- 3768,3799 ---- /* Give up if nothing is constant. */ if (num_marks == 0) ! ret = exp; ! /* If all values are the default, use that. */ ! else if (total == most_tests) ! ret = defval; /* Make a COND with the most common constant value the default. (A more complex method where tests with the same value were combined didn't seem to improve things.) */ ! else ! { ! condexp = rtx_alloc (COND); ! XVEC (condexp, 0) = rtvec_alloc ((total - most_tests) * 2); ! XEXP (condexp, 1) = defval; ! for (i = j = 0; i < total; i++) ! if (condval[i] != defval) ! { ! XVECEXP (condexp, 0, 2 * j) = condtest[i]; ! XVECEXP (condexp, 0, 2 * j + 1) = condval[i]; ! j++; ! } ! ret = condexp; ! } ! free (condtest); ! free (condval); ! return ret; } /* Set the MEM_VOLATILE_P flag for all EQ_ATTR expressions in EXP and *************** static rtx *** 3998,4004 **** simplify_with_current_value_aux (exp) rtx exp; { ! register int i; rtx cond; switch (GET_CODE (exp)) --- 4018,4024 ---- simplify_with_current_value_aux (exp) rtx exp; { ! int i; rtx cond; switch (GET_CODE (exp)) *************** static void *** 4077,4086 **** clear_struct_flag (x) rtx x; { ! register int i; ! register int j; ! register enum rtx_code code; ! register const char *fmt; MEM_IN_STRUCT_P (x) = 0; if (RTX_UNCHANGING_P (x)) --- 4097,4106 ---- clear_struct_flag (x) rtx x; { ! int i; ! int j; ! enum rtx_code code; ! const char *fmt; MEM_IN_STRUCT_P (x) = 0; if (RTX_UNCHANGING_P (x)) *************** clear_struct_flag (x) *** 4094,4099 **** --- 4114,4120 ---- case QUEUED: case CONST_INT: case CONST_DOUBLE: + case CONST_VECTOR: case SYMBOL_REF: case CODE_LABEL: case PC: *************** count_sub_rtxs (x, max) *** 4135,4144 **** rtx x; int max; { ! register int i; ! register int j; ! register enum rtx_code code; ! register const char *fmt; int total = 0; code = GET_CODE (x); --- 4156,4165 ---- rtx x; int max; { ! int i; ! int j; ! enum rtx_code code; ! const char *fmt; int total = 0; code = GET_CODE (x); *************** count_sub_rtxs (x, max) *** 4149,4154 **** --- 4170,4176 ---- case QUEUED: case CONST_INT: case CONST_DOUBLE: + case CONST_VECTOR: case SYMBOL_REF: case CODE_LABEL: case PC: *************** write_test_expr (exp, flags) *** 4727,4733 **** if (XSTR (exp, 1) == NULL || *XSTR (exp, 1) == '\0') { if (GET_MODE (exp) == VOIDmode) ! fatal ("Null MATCH_OPERAND specified as test"); else printf ("GET_MODE (operands[%d]) == %smode", XINT (exp, 0), GET_MODE_NAME (GET_MODE (exp))); --- 4749,4755 ---- if (XSTR (exp, 1) == NULL || *XSTR (exp, 1) == '\0') { if (GET_MODE (exp) == VOIDmode) ! fatal ("null MATCH_OPERAND specified as test"); else printf ("GET_MODE (operands[%d]) == %smode", XINT (exp, 0), GET_MODE_NAME (GET_MODE (exp))); *************** static void *** 4881,4888 **** walk_attr_value (exp) rtx exp; { ! register int i, j; ! register const char *fmt; RTX_CODE code; if (exp == NULL) --- 4903,4910 ---- walk_attr_value (exp) rtx exp; { ! int i, j; ! const char *fmt; RTX_CODE code; if (exp == NULL) *************** write_expr_attr_cache (p, attr) *** 5250,5260 **** return 0; if (!attr->is_numeric) ! printf (" register enum attr_%s ", attr->name); else if (attr->unsigned_p) ! printf (" register unsigned int "); else ! printf (" register int "); printf ("attr_%s = get_attr_%s (insn);\n", attr->name, attr->name); return 1; --- 5272,5282 ---- return 0; if (!attr->is_numeric) ! printf (" enum attr_%s ", attr->name); else if (attr->unsigned_p) ! printf (" unsigned int "); else ! printf (" int "); printf ("attr_%s = get_attr_%s (insn);\n", attr->name, attr->name); return 1; *************** write_toplevel_expr (p) *** 5299,5305 **** if (!attr->is_const) write_expr_attr_cache (p, attr); ! printf (" register unsigned long accum = 0;\n\n"); while (GET_CODE (p) == IOR) { --- 5321,5327 ---- if (!attr->is_const) write_expr_attr_cache (p, attr); ! printf (" unsigned long accum = 0;\n\n"); while (GET_CODE (p) == IOR) { *************** write_eligible_delay (kind) *** 5502,5508 **** printf ("int\n"); printf ("eligible_for_%s (delay_insn, slot, candidate_insn, flags)\n", kind); ! printf (" rtx delay_insn;\n"); printf (" int slot;\n"); printf (" rtx candidate_insn;\n"); printf (" int flags ATTRIBUTE_UNUSED;\n"); --- 5524,5530 ---- printf ("int\n"); printf ("eligible_for_%s (delay_insn, slot, candidate_insn, flags)\n", kind); ! printf (" rtx delay_insn ATTRIBUTE_UNUSED;\n"); printf (" int slot;\n"); printf (" rtx candidate_insn;\n"); printf (" int flags ATTRIBUTE_UNUSED;\n"); *************** write_function_unit_info () *** 5631,5637 **** the function units. The name is included for documentation purposes only. */ ! printf ("struct function_unit_desc function_units[] = {\n"); /* Write out the descriptions in numeric order, but don't force that order on the list. Doing so increases the runtime of genattrtab.c. */ --- 5653,5659 ---- the function units. The name is included for documentation purposes only. */ ! printf ("const struct function_unit_desc function_units[] = {\n"); /* Write out the descriptions in numeric order, but don't force that order on the list. Doing so increases the runtime of genattrtab.c. */ *************** write_complex_function (unit, name, conn *** 5677,5683 **** struct attr_desc *case_attr, *attr; struct attr_value *av, *common_av; rtx value; ! char *str; int using_case; int i; --- 5699,5705 ---- struct attr_desc *case_attr, *attr; struct attr_value *av, *common_av; rtx value; ! char str[256]; int using_case; int i; *************** write_complex_function (unit, name, conn *** 5694,5700 **** printf (" {\n"); /* Write the `switch' statement to get the case value. */ ! str = (char *) alloca (strlen (unit->name) + strlen (name) + strlen (connection) + 10); sprintf (str, "*%s_cases", unit->name); case_attr = find_attr (str, 0); if (! case_attr) --- 5716,5723 ---- printf (" {\n"); /* Write the `switch' statement to get the case value. */ ! if (strlen (unit->name) + sizeof "*_cases" > 256) ! abort (); sprintf (str, "*%s_cases", unit->name); case_attr = find_attr (str, 0); if (! case_attr) *************** extend_range (range, min, max) *** 5956,5966 **** static rtx copy_rtx_unchanging (orig) ! register rtx orig; { #if 0 ! register rtx copy; ! register RTX_CODE code; #endif if (RTX_UNCHANGING_P (orig) || MEM_IN_STRUCT_P (orig)) --- 5979,5989 ---- static rtx copy_rtx_unchanging (orig) ! rtx orig; { #if 0 ! rtx copy; ! RTX_CODE code; #endif if (RTX_UNCHANGING_P (orig) || MEM_IN_STRUCT_P (orig)) *************** main (argc, argv) *** 6046,6066 **** progname = "genattrtab"; if (argc <= 1) ! fatal ("No input file name."); ! ! #if defined (RLIMIT_STACK) && defined (HAVE_GETRLIMIT) && defined (HAVE_SETRLIMIT) ! /* Get rid of any avoidable limit on stack size. */ ! { ! struct rlimit rlim; ! ! /* Set the stack limit huge so that alloca does not fail. */ ! getrlimit (RLIMIT_STACK, &rlim); ! rlim.rlim_cur = rlim.rlim_max; ! setrlimit (RLIMIT_STACK, &rlim); ! } ! #endif ! if (init_md_reader (argv[1]) != SUCCESS_EXIT_CODE) return (FATAL_EXIT_CODE); obstack_init (hash_obstack); --- 6069,6077 ---- progname = "genattrtab"; if (argc <= 1) ! fatal ("no input file name"); ! if (init_md_reader_args (argc, argv) != SUCCESS_EXIT_CODE) return (FATAL_EXIT_CODE); obstack_init (hash_obstack); *************** from the machine description file `md'. *** 6148,6153 **** --- 6159,6165 ---- printf ("#include \"output.h\"\n"); printf ("#include \"insn-attr.h\"\n"); printf ("#include \"toplev.h\"\n"); + printf ("#include \"flags.h\"\n"); printf ("\n"); printf ("#define operands recog_data.operand\n\n"); diff -Nrc3pad gcc-3.0.4/gcc/gencheck.c gcc-3.1/gcc/gencheck.c *** gcc-3.0.4/gcc/gencheck.c Wed Jun 14 17:26:17 2000 --- gcc-3.1/gcc/gencheck.c Sat Jan 5 22:11:20 2002 *************** *** 1,33 **** /* Generate check macros for tree codes. ! Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "hconfig.h" #include "system.h" ! #define DEFTREECODE(SYM, NAME, TYPE, LEN) STRINGIFY(SYM), ! const char *tree_codes[] = { #include "tree.def" #include "c-common.def" #include "gencheck.h" ! (char*)0 }; static void usage PARAMS ((void)); --- 1,33 ---- /* Generate check macros for tree codes. ! Copyright (C) 1998, 1999, 2000, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "hconfig.h" #include "system.h" ! #define DEFTREECODE(SYM, NAME, TYPE, LEN) STRINGX(SYM), ! static const char *const tree_codes[] = { #include "tree.def" #include "c-common.def" #include "gencheck.h" ! (char*) 0 }; static void usage PARAMS ((void)); *************** static void usage PARAMS ((void)); *** 35,41 **** static void usage () { ! fprintf (stderr,"Usage: gencheck\n"); } extern int main PARAMS ((int, char **)); --- 35,41 ---- static void usage () { ! fputs ("Usage: gencheck\n", stderr); } extern int main PARAMS ((int, char **)); *************** main (argc, argv) *** 57,89 **** return (1); } ! printf ("/* This file is generated using gencheck. Do not edit. */\n"); for (i = 0; tree_codes[i]; i++) { printf ("#define %s_CHECK(t)\tTREE_CHECK (t, %s)\n", tree_codes[i], tree_codes[i]); } return 0; } - - #if defined(USE_C_ALLOCA) - /* FIXME: We only need an xmalloc definition because we are forced to - link with alloca.o on some platforms. This should go away if/when - we link against libiberty.a. (ghazi@caip.rutgers.edu 6/3/98) */ - PTR - xmalloc (nbytes) - size_t nbytes; - { - register PTR tmp = (PTR) malloc (nbytes); - - if (!tmp) - { - fprintf (stderr, "can't allocate %d bytes (out of virtual memory)\n", - nbytes); - exit (FATAL_EXIT_CODE); - } - - return tmp; - } - #endif /* USE_C_ALLOCA */ --- 57,72 ---- return (1); } ! puts ("/* This file is generated using gencheck. Do not edit. */\n"); ! puts ("#ifndef GCC_TREE_CHECK_H"); ! puts ("#define GCC_TREE_CHECK_H\n"); ! for (i = 0; tree_codes[i]; i++) { printf ("#define %s_CHECK(t)\tTREE_CHECK (t, %s)\n", tree_codes[i], tree_codes[i]); } + puts ("\n#endif /* GCC_TREE_CHECK_H */"); return 0; } diff -Nrc3pad gcc-3.0.4/gcc/gencodes.c gcc-3.1/gcc/gencodes.c *** gcc-3.0.4/gcc/gencodes.c Mon Jan 15 13:19:31 2001 --- gcc-3.1/gcc/gencodes.c Sun Dec 2 00:04:18 2001 *************** *** 4,25 **** Copyright (C) 1987, 1991, 1995, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "hconfig.h" --- 4,25 ---- Copyright (C) 1987, 1991, 1995, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "hconfig.h" *************** Boston, MA 02111-1307, USA. */ *** 28,74 **** #include "errors.h" #include "gensupport.h" ! ! static int insn_code_number; ! ! static void gen_insn PARAMS ((rtx)); ! static void output_predicate_decls PARAMS ((void)); ! static int print_md_constant PARAMS ((void **, void *)); static void ! gen_insn (insn) ! rtx insn; { /* Don't mention instructions whose names are the null string or begin with '*'. They are in the machine description just to be recognized. */ ! if (XSTR (insn, 0)[0] != 0 && XSTR (insn, 0)[0] != '*') ! printf (" CODE_FOR_%s = %d,\n", XSTR (insn, 0), ! insn_code_number); ! } ! ! /* Print out declarations for all predicates mentioned in ! PREDICATE_CODES. */ ! ! static void ! output_predicate_decls () ! { ! #ifdef PREDICATE_CODES ! static struct { ! const char *name; ! RTX_CODE codes[NUM_RTX_CODE]; ! } predicate[] = { ! PREDICATE_CODES ! }; ! size_t i; ! ! putc ('\n', stdout); ! puts ("struct rtx_def;\n#include \"machmode.h\"\n"); ! for (i = 0; i < sizeof predicate / sizeof *predicate; i++) ! printf ("extern int %s PARAMS ((struct rtx_def *, enum machine_mode));\n", ! predicate[i].name); ! putc ('\n', stdout); ! #endif } extern int main PARAMS ((int, char **)); --- 28,45 ---- #include "errors.h" #include "gensupport.h" ! static void gen_insn PARAMS ((const char *, int)); static void ! gen_insn (name, code) ! const char *name; ! int code; { /* Don't mention instructions whose names are the null string or begin with '*'. They are in the machine description just to be recognized. */ ! if (name[0] != 0 && name[0] != '*') ! printf (" CODE_FOR_%s = %d,\n", name, code); } extern int main PARAMS ((int, char **)); *************** main (argc, argv) *** 83,127 **** progname = "gencodes"; if (argc <= 1) ! fatal ("No input file name."); ! if (init_md_reader (argv[1]) != SUCCESS_EXIT_CODE) return (FATAL_EXIT_CODE); ! printf ("/* Generated automatically by the program `gencodes'\n\ ! from the machine description file `md'. */\n\n"); ! ! printf ("#ifndef MAX_INSN_CODE\n\n"); /* Read the machine description. */ - insn_code_number = 0; - printf ("enum insn_code {\n"); - while (1) { int line_no; desc = read_md_rtx (&line_no, &insn_code_number); if (desc == NULL) break; if (GET_CODE (desc) == DEFINE_INSN || GET_CODE (desc) == DEFINE_EXPAND) ! gen_insn (desc); } ! printf (" CODE_FOR_nothing = %d };\n", insn_code_number + 1); ! ! printf ("\n#define MAX_INSN_CODE ((int) CODE_FOR_nothing)\n\n"); ! ! traverse_md_constants (print_md_constant, stdout); ! ! output_predicate_decls (); ! printf ("\n#endif /* MAX_INSN_CODE */\n"); ! fflush (stdout); ! return (ferror (stdout) != 0 ? FATAL_EXIT_CODE : SUCCESS_EXIT_CODE); } /* Define this so we can link with print-rtl.o to get debug_rtx function. */ --- 54,97 ---- progname = "gencodes"; if (argc <= 1) ! fatal ("no input file name"); ! if (init_md_reader_args (argc, argv) != SUCCESS_EXIT_CODE) return (FATAL_EXIT_CODE); ! puts ("\ ! /* Generated automatically by the program `gencodes'\n\ ! from the machine description file `md'. */\n\ ! \n\ ! #ifndef GCC_INSN_CODES_H\n\ ! #define GCC_INSN_CODES_H\n\ ! \n\ ! enum insn_code {"); /* Read the machine description. */ while (1) { int line_no; + int insn_code_number; desc = read_md_rtx (&line_no, &insn_code_number); if (desc == NULL) break; if (GET_CODE (desc) == DEFINE_INSN || GET_CODE (desc) == DEFINE_EXPAND) ! gen_insn (XSTR (desc, 0), insn_code_number); } ! puts ("CODE_FOR_nothing\n\ ! };\n\ ! \n\ ! #endif /* GCC_INSN_CODES_H */"); ! if (ferror (stdout) || fflush (stdout) || fclose (stdout)) ! return FATAL_EXIT_CODE; ! return SUCCESS_EXIT_CODE; } /* Define this so we can link with print-rtl.o to get debug_rtx function. */ *************** get_insn_name (code) *** 132,149 **** { return NULL; } - - /* Called via traverse_md_constants; emit a #define for - the current constant definition. */ - - static int - print_md_constant (slot, info) - void **slot; - void *info; - { - struct md_constant *def = *slot; - FILE *file = info; - - fprintf (file, "#define %s %s\n", def->name, def->value); - return 1; - } --- 102,104 ---- diff -Nrc3pad gcc-3.0.4/gcc/genconfig.c gcc-3.1/gcc/genconfig.c *** gcc-3.0.4/gcc/genconfig.c Sun May 28 02:17:58 2000 --- gcc-3.1/gcc/genconfig.c Sun Dec 2 00:04:18 2001 *************** *** 3,24 **** Copyright (C) 1987, 1991, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "hconfig.h" --- 3,24 ---- Copyright (C) 1987, 1991, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "hconfig.h" *************** walk_insn_part (part, recog_p, non_pc_se *** 67,75 **** int recog_p; int non_pc_set_src; { ! register int i, j; ! register RTX_CODE code; ! register const char *format_ptr; if (part == 0) return; --- 67,75 ---- int recog_p; int non_pc_set_src; { ! int i, j; ! RTX_CODE code; ! const char *format_ptr; if (part == 0) return; *************** main (argc, argv) *** 275,290 **** progname = "genconfig"; if (argc <= 1) ! fatal ("No input file name."); ! if (init_md_reader (argv[1]) != SUCCESS_EXIT_CODE) return (FATAL_EXIT_CODE); ! printf ("/* Generated automatically by the program `genconfig'\n\ ! from the machine description file `md'. */\n\n"); ! /* Allow at least 10 operands for the sake of asm constructs. */ ! max_recog_operands = 9; /* We will add 1 later. */ max_dup_operands = 1; /* Read the machine description. */ --- 275,294 ---- progname = "genconfig"; if (argc <= 1) ! fatal ("no input file name"); ! if (init_md_reader_args (argc, argv) != SUCCESS_EXIT_CODE) return (FATAL_EXIT_CODE); ! puts ("/* Generated automatically by the program `genconfig'"); ! puts (" from the machine description file `md'. */\n"); ! puts ("#ifndef GCC_INSN_CONFIG_H"); ! puts ("#define GCC_INSN_CONFIG_H\n"); ! /* Allow at least 30 operands for the sake of asm constructs. */ ! /* ??? We *really* ought to reorganize things such that there ! is no fixed upper bound. */ ! max_recog_operands = 29; /* We will add 1 later. */ max_dup_operands = 1; /* Read the machine description. */ *************** from the machine description file `md'. *** 356,363 **** printf ("#define MAX_INSNS_PER_PEEP2 %d\n", max_insns_per_peep2); } ! fflush (stdout); ! return (ferror (stdout) != 0 ? FATAL_EXIT_CODE : SUCCESS_EXIT_CODE); } /* Define this so we can link with print-rtl.o to get debug_rtx function. */ --- 360,371 ---- printf ("#define MAX_INSNS_PER_PEEP2 %d\n", max_insns_per_peep2); } ! puts("\n#endif /* GCC_INSN_CONFIG_H */"); ! ! if (ferror (stdout) || fflush (stdout) || fclose (stdout)) ! return FATAL_EXIT_CODE; ! ! return SUCCESS_EXIT_CODE; } /* Define this so we can link with print-rtl.o to get debug_rtx function. */ diff -Nrc3pad gcc-3.0.4/gcc/genconstants.c gcc-3.1/gcc/genconstants.c *** gcc-3.0.4/gcc/genconstants.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/genconstants.c Sun Dec 2 00:04:18 2001 *************** *** 0 **** --- 1,89 ---- + /* Generate from machine description: + a series of #define statements, one for each constant named in + a (define_constants ...) pattern. + + Copyright (C) 1987, 1991, 1995, 1998, + 1999, 2000, 2001 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GCC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + /* This program does not use gensupport.c because it does not need to + look at insn patterns, only (define_constants), and we want to + minimize dependencies. */ + + #include "hconfig.h" + #include "system.h" + #include "rtl.h" + #include "errors.h" + #include "gensupport.h" + + static int print_md_constant PARAMS ((void **, void *)); + extern int main PARAMS ((int, char **)); + + /* Called via traverse_md_constants; emit a #define for + the current constant definition. */ + + static int + print_md_constant (slot, info) + void **slot; + void *info; + { + struct md_constant *def = *slot; + FILE *file = info; + + fprintf (file, "#define %s %s\n", def->name, def->value); + return 1; + } + + int + main (argc, argv) + int argc; + char **argv; + { + int dummy1, dummy2; + rtx desc; + + progname = "genconstants"; + + if (argc <= 1) + fatal ("no input file name"); + + if (init_md_reader (argv[1]) != SUCCESS_EXIT_CODE) + return (FATAL_EXIT_CODE); + + /* Scan and discard the entire file. This has the side effect + of loading up the constants table that we wish to scan. */ + do + desc = read_md_rtx (&dummy1, &dummy2); + while (desc); + + puts ("/* Generated automatically by the program `genconstants'"); + puts (" from the machine description file `md'. */\n"); + puts ("#ifndef GCC_INSN_CONSTANTS_H"); + puts ("#define GCC_INSN_CONSTANTS_H\n"); + + traverse_md_constants (print_md_constant, stdout); + + puts ("\n#endif /* GCC_INSN_CONSTANTS_H */"); + + if (ferror (stdout) || fflush (stdout) || fclose (stdout)) + return FATAL_EXIT_CODE; + + return SUCCESS_EXIT_CODE; + } + diff -Nrc3pad gcc-3.0.4/gcc/genemit.c gcc-3.1/gcc/genemit.c *** gcc-3.0.4/gcc/genemit.c Sat May 12 20:32:33 2001 --- gcc-3.1/gcc/genemit.c Wed Mar 20 21:54:48 2002 *************** *** 1,23 **** /* Generate code from machine description to emit insns as rtl. ! Copyright (C) 1987, 1988, 1991, 1994, 1995, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "hconfig.h" --- 1,23 ---- /* Generate code from machine description to emit insns as rtl. ! Copyright (C) 1987, 1988, 1991, 1994, 1995, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "hconfig.h" *************** struct clobber_pat *** 44,49 **** --- 44,50 ---- rtx pattern; int first_clobber; struct clobber_pat *next; + int has_hard_reg; } *clobber_list; /* Records one insn that uses the clobber list. */ *************** struct clobber_ent *** 57,67 **** static void max_operand_1 PARAMS ((rtx)); static int max_operand_vec PARAMS ((rtx, int)); static void print_code PARAMS ((RTX_CODE)); ! static void gen_exp PARAMS ((rtx, enum rtx_code)); static void gen_insn PARAMS ((rtx)); static void gen_expand PARAMS ((rtx)); static void gen_split PARAMS ((rtx)); static void output_add_clobbers PARAMS ((void)); static void gen_rtx_scratch PARAMS ((rtx, enum rtx_code)); static void output_peephole2_scratches PARAMS ((rtx)); --- 58,69 ---- static void max_operand_1 PARAMS ((rtx)); static int max_operand_vec PARAMS ((rtx, int)); static void print_code PARAMS ((RTX_CODE)); ! static void gen_exp PARAMS ((rtx, enum rtx_code, char *)); static void gen_insn PARAMS ((rtx)); static void gen_expand PARAMS ((rtx)); static void gen_split PARAMS ((rtx)); static void output_add_clobbers PARAMS ((void)); + static void output_added_clobbers_hard_reg_p PARAMS ((void)); static void gen_rtx_scratch PARAMS ((rtx, enum rtx_code)); static void output_peephole2_scratches PARAMS ((rtx)); *************** static void *** 70,79 **** max_operand_1 (x) rtx x; { ! register RTX_CODE code; ! register int i; ! register int len; ! register const char *fmt; if (x == 0) return; --- 72,81 ---- max_operand_1 (x) rtx x; { ! RTX_CODE code; ! int i; ! int len; ! const char *fmt; if (x == 0) return; *************** max_operand_vec (insn, arg) *** 112,119 **** rtx insn; int arg; { ! register int len = XVECLEN (insn, arg); ! register int i; max_opno = -1; max_dup_opno = -1; --- 114,121 ---- rtx insn; int arg; { ! int len = XVECLEN (insn, arg); ! int i; max_opno = -1; max_dup_opno = -1; *************** static void *** 129,135 **** print_code (code) RTX_CODE code; { ! register const char *p1; for (p1 = GET_RTX_NAME (code); *p1; p1++) putchar (TOUPPER(*p1)); } --- 131,137 ---- print_code (code) RTX_CODE code; { ! const char *p1; for (p1 = GET_RTX_NAME (code); *p1; p1++) putchar (TOUPPER(*p1)); } *************** gen_rtx_scratch (x, subroutine_type) *** 153,166 **** substituting any operand references appearing within. */ static void ! gen_exp (x, subroutine_type) rtx x; enum rtx_code subroutine_type; { ! register RTX_CODE code; ! register int i; ! register int len; ! register const char *fmt; if (x == 0) { --- 155,169 ---- substituting any operand references appearing within. */ static void ! gen_exp (x, subroutine_type, used) rtx x; enum rtx_code subroutine_type; + char *used; { ! RTX_CODE code; ! int i; ! int len; ! const char *fmt; if (x == 0) { *************** gen_exp (x, subroutine_type) *** 174,179 **** --- 177,191 ---- { case MATCH_OPERAND: case MATCH_DUP: + if (used) + { + if (used[XINT (x, 0)]) + { + printf ("copy_rtx (operand%d)", XINT (x, 0)); + return; + } + used[XINT (x, 0)] = 1; + } printf ("operand%d", XINT (x, 0)); return; *************** gen_exp (x, subroutine_type) *** 186,192 **** for (i = 0; i < XVECLEN (x, 1); i++) { printf (",\n\t\t"); ! gen_exp (XVECEXP (x, 1, i), subroutine_type); } printf (")"); return; --- 198,204 ---- for (i = 0; i < XVECLEN (x, 1); i++) { printf (",\n\t\t"); ! gen_exp (XVECEXP (x, 1, i), subroutine_type, used); } printf (")"); return; *************** gen_exp (x, subroutine_type) *** 197,203 **** for (i = 0; i < XVECLEN (x, 2); i++) { printf (",\n\t\t"); ! gen_exp (XVECEXP (x, 2, i), subroutine_type); } printf (")"); return; --- 209,215 ---- for (i = 0; i < XVECLEN (x, 2); i++) { printf (",\n\t\t"); ! gen_exp (XVECEXP (x, 2, i), subroutine_type, used); } printf (")"); return; *************** gen_exp (x, subroutine_type) *** 260,266 **** break; printf (",\n\t"); if (fmt[i] == 'e' || fmt[i] == 'u') ! gen_exp (XEXP (x, i), subroutine_type); else if (fmt[i] == 'i') printf ("%u", XINT (x, i)); else if (fmt[i] == 's') --- 272,278 ---- break; printf (",\n\t"); if (fmt[i] == 'e' || fmt[i] == 'u') ! gen_exp (XEXP (x, i), subroutine_type, used); else if (fmt[i] == 'i') printf ("%u", XINT (x, i)); else if (fmt[i] == 's') *************** gen_exp (x, subroutine_type) *** 272,278 **** for (j = 0; j < XVECLEN (x, i); j++) { printf (",\n\t\t"); ! gen_exp (XVECEXP (x, i, j), subroutine_type); } printf (")"); } --- 284,290 ---- for (j = 0; j < XVECLEN (x, i); j++) { printf (",\n\t\t"); ! gen_exp (XVECEXP (x, i, j), subroutine_type, used); } printf (")"); } *************** gen_insn (insn) *** 289,295 **** rtx insn; { int operands; ! register int i; /* See if the pattern for this insn ends with a group of CLOBBERs of (hard) registers or MATCH_SCRATCHes. If so, store away the information for --- 301,307 ---- rtx insn; { int operands; ! int i; /* See if the pattern for this insn ends with a group of CLOBBERs of (hard) registers or MATCH_SCRATCHes. If so, store away the information for *************** gen_insn (insn) *** 297,314 **** if (XVEC (insn, 1)) { for (i = XVECLEN (insn, 1) - 1; i > 0; i--) ! if (GET_CODE (XVECEXP (insn, 1, i)) != CLOBBER ! || (GET_CODE (XEXP (XVECEXP (insn, 1, i), 0)) != REG ! && GET_CODE (XEXP (XVECEXP (insn, 1, i), 0)) != MATCH_SCRATCH)) ! break; if (i != XVECLEN (insn, 1) - 1) { ! register struct clobber_pat *p; ! register struct clobber_ent *link = (struct clobber_ent *) xmalloc (sizeof (struct clobber_ent)); ! register int j; link->code_number = insn_code_number; --- 309,333 ---- if (XVEC (insn, 1)) { + int has_hard_reg = 0; + for (i = XVECLEN (insn, 1) - 1; i > 0; i--) ! { ! if (GET_CODE (XVECEXP (insn, 1, i)) != CLOBBER) ! break; ! ! if (GET_CODE (XEXP (XVECEXP (insn, 1, i), 0)) == REG) ! has_hard_reg = 1; ! else if (GET_CODE (XEXP (XVECEXP (insn, 1, i), 0)) != MATCH_SCRATCH) ! break; ! } if (i != XVECLEN (insn, 1) - 1) { ! struct clobber_pat *p; ! struct clobber_ent *link = (struct clobber_ent *) xmalloc (sizeof (struct clobber_ent)); ! int j; link->code_number = insn_code_number; *************** gen_insn (insn) *** 349,354 **** --- 368,374 ---- p->pattern = insn; p->first_clobber = i + 1; p->next = clobber_list; + p->has_hard_reg = has_hard_reg; clobber_list = p; } *************** gen_insn (insn) *** 387,393 **** if (XVECLEN (insn, 1) == 1) { printf (" return "); ! gen_exp (XVECEXP (insn, 1, 0), DEFINE_INSN); printf (";\n}\n\n"); } else --- 407,413 ---- if (XVECLEN (insn, 1) == 1) { printf (" return "); ! gen_exp (XVECEXP (insn, 1, 0), DEFINE_INSN, NULL); printf (";\n}\n\n"); } else *************** gen_insn (insn) *** 398,404 **** for (i = 0; i < XVECLEN (insn, 1); i++) { printf (",\n\t\t"); ! gen_exp (XVECEXP (insn, 1, i), DEFINE_INSN); } printf ("));\n}\n\n"); } --- 418,424 ---- for (i = 0; i < XVECLEN (insn, 1); i++) { printf (",\n\t\t"); ! gen_exp (XVECEXP (insn, 1, i), DEFINE_INSN, NULL); } printf ("));\n}\n\n"); } *************** gen_expand (expand) *** 411,417 **** rtx expand; { int operands; ! register int i; if (strlen (XSTR (expand, 0)) == 0) fatal ("define_expand lacks a name"); --- 431,437 ---- rtx expand; { int operands; ! int i; if (strlen (XSTR (expand, 0)) == 0) fatal ("define_expand lacks a name"); *************** gen_expand (expand) *** 444,450 **** && XVECLEN (expand, 1) == 1) { printf (" return "); ! gen_exp (XVECEXP (expand, 1, 0), DEFINE_EXPAND); printf (";\n}\n\n"); return; } --- 464,470 ---- && XVECLEN (expand, 1) == 1) { printf (" return "); ! gen_exp (XVECEXP (expand, 1, 0), DEFINE_EXPAND, NULL); printf (";\n}\n\n"); return; } *************** gen_expand (expand) *** 454,460 **** for (i = operands; i <= max_dup_opno; i++) printf (" rtx operand%d;\n", i); for (; i <= max_scratch_opno; i++) ! printf (" rtx operand%d;\n", i); printf (" rtx _val = 0;\n"); printf (" start_sequence ();\n"); --- 474,480 ---- for (i = operands; i <= max_dup_opno; i++) printf (" rtx operand%d;\n", i); for (; i <= max_scratch_opno; i++) ! printf (" rtx operand%d ATTRIBUTE_UNUSED;\n", i); printf (" rtx _val = 0;\n"); printf (" start_sequence ();\n"); *************** gen_expand (expand) *** 525,531 **** printf (" emit ("); else printf (" emit_insn ("); ! gen_exp (next, DEFINE_EXPAND); printf (");\n"); if (GET_CODE (next) == SET && GET_CODE (SET_DEST (next)) == PC && GET_CODE (SET_SRC (next)) == LABEL_REF) --- 545,551 ---- printf (" emit ("); else printf (" emit_insn ("); ! gen_exp (next, DEFINE_EXPAND, NULL); printf (");\n"); if (GET_CODE (next) == SET && GET_CODE (SET_DEST (next)) == PC && GET_CODE (SET_SRC (next)) == LABEL_REF) *************** static void *** 546,557 **** gen_split (split) rtx split; { ! register int i; int operands; ! const char *name = "split"; ! ! if (GET_CODE (split) == DEFINE_PEEPHOLE2) ! name = "peephole2"; if (XVEC (split, 0) == 0) fatal ("define_%s (definition %d) lacks a pattern", name, --- 566,577 ---- gen_split (split) rtx split; { ! int i; int operands; ! const char *const name = ! ((GET_CODE (split) == DEFINE_PEEPHOLE2) ? "peephole2" : "split"); ! const char *unused; ! char *used; if (XVEC (split, 0) == 0) fatal ("define_%s (definition %d) lacks a pattern", name, *************** gen_split (split) *** 564,585 **** max_operand_vec (split, 2); operands = MAX (max_opno, MAX (max_dup_opno, max_scratch_opno)) + 1; /* Output the prototype, function name and argument declarations. */ if (GET_CODE (split) == DEFINE_PEEPHOLE2) { printf ("extern rtx gen_%s_%d PARAMS ((rtx, rtx *));\n", name, insn_code_number); ! printf ("rtx\ngen_%s_%d (curr_insn, operands)\n\ ! rtx curr_insn ATTRIBUTE_UNUSED;\n\ ! rtx *operands;\n", name, insn_code_number); } else { printf ("extern rtx gen_split_%d PARAMS ((rtx *));\n", insn_code_number); ! printf ("rtx\ngen_%s_%d (operands)\n rtx *operands;\n", name, ! insn_code_number); } printf ("{\n"); --- 584,607 ---- max_operand_vec (split, 2); operands = MAX (max_opno, MAX (max_dup_opno, max_scratch_opno)) + 1; + unused = (operands == 0 ? " ATTRIBUTE_UNUSED" : ""); + used = xcalloc (1, operands); /* Output the prototype, function name and argument declarations. */ if (GET_CODE (split) == DEFINE_PEEPHOLE2) { printf ("extern rtx gen_%s_%d PARAMS ((rtx, rtx *));\n", name, insn_code_number); ! printf ("rtx\ngen_%s_%d (curr_insn, operands)\n", name, insn_code_number); + printf (" rtx curr_insn ATTRIBUTE_UNUSED;\n"); + printf (" rtx *operands%s;\n", unused); } else { printf ("extern rtx gen_split_%d PARAMS ((rtx *));\n", insn_code_number); ! printf ("rtx\ngen_%s_%d (operands)\n", name, insn_code_number); ! printf (" rtx *operands%s;\n", unused); } printf ("{\n"); *************** gen_split (split) *** 635,641 **** printf (" emit ("); else printf (" emit_insn ("); ! gen_exp (next, GET_CODE (split)); printf (");\n"); if (GET_CODE (next) == SET && GET_CODE (SET_DEST (next)) == PC && GET_CODE (SET_SRC (next)) == LABEL_REF) --- 657,663 ---- printf (" emit ("); else printf (" emit_insn ("); ! gen_exp (next, GET_CODE (split), used); printf (");\n"); if (GET_CODE (next) == SET && GET_CODE (SET_DEST (next)) == PC && GET_CODE (SET_SRC (next)) == LABEL_REF) *************** gen_split (split) *** 648,653 **** --- 670,677 ---- printf (" _val = gen_sequence ();\n"); printf (" end_sequence ();\n"); printf (" return _val;\n}\n\n"); + + free (used); } /* Write a function, `add_clobbers', that is given a PARALLEL of sufficient *************** output_add_clobbers () *** 662,668 **** int i; printf ("\n\nvoid\nadd_clobbers (pattern, insn_code_number)\n"); ! printf (" rtx pattern;\n int insn_code_number;\n"); printf ("{\n"); printf (" switch (insn_code_number)\n"); printf (" {\n"); --- 686,692 ---- int i; printf ("\n\nvoid\nadd_clobbers (pattern, insn_code_number)\n"); ! printf (" rtx pattern ATTRIBUTE_UNUSED;\n int insn_code_number;\n"); printf ("{\n"); printf (" switch (insn_code_number)\n"); printf (" {\n"); *************** output_add_clobbers () *** 676,682 **** { printf (" XVECEXP (pattern, 0, %d) = ", i); gen_exp (XVECEXP (clobber->pattern, 1, i), ! GET_CODE (clobber->pattern)); printf (";\n"); } --- 700,706 ---- { printf (" XVECEXP (pattern, 0, %d) = ", i); gen_exp (XVECEXP (clobber->pattern, 1, i), ! GET_CODE (clobber->pattern), NULL); printf (";\n"); } *************** output_add_clobbers () *** 689,696 **** printf ("}\n"); } /* Generate code to invoke find_free_register () as needed for the ! scratch registers used by the peephole2 pattern in SPLIT. */ static void output_peephole2_scratches (split) --- 713,758 ---- printf ("}\n"); } + /* Write a function, `added_clobbers_hard_reg_p' this is given an insn_code + number that needs clobbers and returns 1 if they include a clobber of a + hard reg and 0 if they just clobber SCRATCH. */ + + static void + output_added_clobbers_hard_reg_p () + { + struct clobber_pat *clobber; + struct clobber_ent *ent; + int clobber_p, used; + + printf ("\n\nint\nadded_clobbers_hard_reg_p (insn_code_number)\n"); + printf (" int insn_code_number;\n"); + printf ("{\n"); + printf (" switch (insn_code_number)\n"); + printf (" {\n"); + + for (clobber_p = 0; clobber_p <= 1; clobber_p++) + { + used = 0; + for (clobber = clobber_list; clobber; clobber = clobber->next) + if (clobber->has_hard_reg == clobber_p) + for (ent = clobber->insns; ent; ent = ent->next) + { + printf (" case %d:\n", ent->code_number); + used++; + } + + if (used) + printf (" return %d;\n\n", clobber_p); + } + + printf (" default:\n"); + printf (" abort ();\n"); + printf (" }\n"); + printf ("}\n"); + } + /* Generate code to invoke find_free_register () as needed for the ! scratch registers used by the peephole2 pattern in SPLIT. */ static void output_peephole2_scratches (split) *************** main (argc, argv) *** 744,752 **** progname = "genemit"; if (argc <= 1) ! fatal ("No input file name."); ! if (init_md_reader (argv[1]) != SUCCESS_EXIT_CODE) return (FATAL_EXIT_CODE); /* Assign sequential codes to all entries in the machine description --- 806,814 ---- progname = "genemit"; if (argc <= 1) ! fatal ("no input file name"); ! if (init_md_reader_args (argc, argv) != SUCCESS_EXIT_CODE) return (FATAL_EXIT_CODE); /* Assign sequential codes to all entries in the machine description *************** from the machine description file `md'. *** 764,769 **** --- 826,832 ---- printf ("#include \"tm_p.h\"\n"); printf ("#include \"function.h\"\n"); printf ("#include \"expr.h\"\n"); + printf ("#include \"optabs.h\"\n"); printf ("#include \"real.h\"\n"); printf ("#include \"flags.h\"\n"); printf ("#include \"output.h\"\n"); *************** from the machine description file `md'. *** 772,777 **** --- 835,841 ---- printf ("#include \"recog.h\"\n"); printf ("#include \"resource.h\"\n"); printf ("#include \"reload.h\"\n"); + printf ("#include \"toplev.h\"\n"); printf ("#include \"ggc.h\"\n\n"); printf ("#define FAIL return (end_sequence (), _val)\n"); printf ("#define DONE return (_val = gen_sequence (), end_sequence (), _val)\n"); *************** from the machine description file `md'. *** 810,817 **** ++insn_index_number; } ! /* Write out the routine to add CLOBBERs to a pattern. */ output_add_clobbers (); fflush (stdout); return (ferror (stdout) != 0 ? FATAL_EXIT_CODE : SUCCESS_EXIT_CODE); --- 874,883 ---- ++insn_index_number; } ! /* Write out the routines to add CLOBBERs to a pattern and say whether they ! clobber a hard reg. */ output_add_clobbers (); + output_added_clobbers_hard_reg_p (); fflush (stdout); return (ferror (stdout) != 0 ? FATAL_EXIT_CODE : SUCCESS_EXIT_CODE); diff -Nrc3pad gcc-3.0.4/gcc/genextract.c gcc-3.1/gcc/genextract.c *** gcc-3.0.4/gcc/genextract.c Thu May 18 22:05:14 2000 --- gcc-3.1/gcc/genextract.c Thu Mar 7 22:05:38 2002 *************** *** 2,23 **** Copyright (C) 1987, 1991, 1992, 1993, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "hconfig.h" --- 2,23 ---- Copyright (C) 1987, 1991, 1992, 1993, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "hconfig.h" *************** static void *** 102,110 **** gen_insn (insn) rtx insn; { ! register int i; ! register struct extraction *p; ! register struct code_ptr *link; op_count = 0; dup_count = 0; --- 102,110 ---- gen_insn (insn) rtx insn; { ! int i; ! struct extraction *p; ! struct code_ptr *link; op_count = 0; dup_count = 0; *************** gen_insn (insn) *** 120,126 **** else for (i = XVECLEN (insn, 1) - 1; i >= 0; i--) { ! char *path = (char *) alloca (2); path[0] = 'a' + i; path[1] = 0; --- 120,126 ---- else for (i = XVECLEN (insn, 1) - 1; i >= 0; i--) { ! char path[2]; path[0] = 'a' + i; path[1] = 0; *************** walk_rtx (x, path) *** 183,192 **** rtx x; const char *path; { ! register RTX_CODE code; ! register int i; ! register int len; ! register const char *fmt; int depth = strlen (path); char *newpath; --- 183,192 ---- rtx x; const char *path; { ! RTX_CODE code; ! int i; ! int len; ! const char *fmt; int depth = strlen (path); char *newpath; *************** walk_rtx (x, path) *** 210,242 **** break; case MATCH_DUP: - case MATCH_PAR_DUP: duplocs[dup_count] = xstrdup (path); dupnums[dup_count] = XINT (x, 0); dup_count++; break; case MATCH_OP_DUP: duplocs[dup_count] = xstrdup (path); dupnums[dup_count] = XINT (x, 0); dup_count++; ! newpath = (char *) alloca (depth + 2); strcpy (newpath, path); newpath[depth + 1] = 0; for (i = XVECLEN (x, 1) - 1; i >= 0; i--) { ! newpath[depth] = '0' + i; walk_rtx (XVECEXP (x, 1, i), newpath); } return; case MATCH_OPERATOR: oplocs[XINT (x, 0)] = xstrdup (path); op_count = MAX (op_count, XINT (x, 0) + 1); ! newpath = (char *) alloca (depth + 2); strcpy (newpath, path); newpath[depth + 1] = 0; --- 210,243 ---- break; case MATCH_DUP: duplocs[dup_count] = xstrdup (path); dupnums[dup_count] = XINT (x, 0); dup_count++; break; + case MATCH_PAR_DUP: case MATCH_OP_DUP: duplocs[dup_count] = xstrdup (path); dupnums[dup_count] = XINT (x, 0); dup_count++; ! newpath = (char *) xmalloc (depth + 2); strcpy (newpath, path); newpath[depth + 1] = 0; for (i = XVECLEN (x, 1) - 1; i >= 0; i--) { ! newpath[depth] = (code == MATCH_OP_DUP ? '0' : 'a') + i; walk_rtx (XVECEXP (x, 1, i), newpath); } + free (newpath); return; case MATCH_OPERATOR: oplocs[XINT (x, 0)] = xstrdup (path); op_count = MAX (op_count, XINT (x, 0) + 1); ! newpath = (char *) xmalloc (depth + 2); strcpy (newpath, path); newpath[depth + 1] = 0; *************** walk_rtx (x, path) *** 245,257 **** newpath[depth] = '0' + i; walk_rtx (XVECEXP (x, 2, i), newpath); } return; case MATCH_PARALLEL: oplocs[XINT (x, 0)] = xstrdup (path); op_count = MAX (op_count, XINT (x, 0) + 1); ! newpath = (char *) alloca (depth + 2); strcpy (newpath, path); newpath[depth + 1] = 0; --- 246,259 ---- newpath[depth] = '0' + i; walk_rtx (XVECEXP (x, 2, i), newpath); } + free (newpath); return; case MATCH_PARALLEL: oplocs[XINT (x, 0)] = xstrdup (path); op_count = MAX (op_count, XINT (x, 0) + 1); ! newpath = (char *) xmalloc (depth + 2); strcpy (newpath, path); newpath[depth + 1] = 0; *************** walk_rtx (x, path) *** 260,265 **** --- 262,268 ---- newpath[depth] = 'a' + i; walk_rtx (XVECEXP (x, 2, i), newpath); } + free (newpath); return; case ADDRESS: *************** walk_rtx (x, path) *** 270,276 **** break; } ! newpath = (char *) alloca (depth + 2); strcpy (newpath, path); newpath[depth + 1] = 0; --- 273,279 ---- break; } ! newpath = (char *) xmalloc (depth + 2); strcpy (newpath, path); newpath[depth + 1] = 0; *************** walk_rtx (x, path) *** 293,298 **** --- 296,302 ---- } } } + free (newpath); } /* Given a PATH, representing a path down the instruction's *************** static void *** 303,310 **** print_path (path) const char *path; { ! register int len = strlen (path); ! register int i; if (len == 0) { --- 307,314 ---- print_path (path) const char *path; { ! int len = strlen (path); ! int i; if (len == 0) { *************** main (argc, argv) *** 356,364 **** progname = "genextract"; if (argc <= 1) ! fatal ("No input file name."); ! if (init_md_reader (argv[1]) != SUCCESS_EXIT_CODE) return (FATAL_EXIT_CODE); /* Assign sequential codes to all entries in the machine description --- 360,368 ---- progname = "genextract"; if (argc <= 1) ! fatal ("no input file name"); ! if (init_md_reader_args (argc, argv) != SUCCESS_EXIT_CODE) return (FATAL_EXIT_CODE); /* Assign sequential codes to all entries in the machine description *************** from the machine description file `md'. *** 383,390 **** printf ("void\ninsn_extract (insn)\n"); printf (" rtx insn;\n"); printf ("{\n"); ! printf (" register rtx *ro = recog_data.operand;\n"); ! printf (" register rtx **ro_loc = recog_data.operand_loc;\n"); printf (" rtx pat = PATTERN (insn);\n"); printf (" int i ATTRIBUTE_UNUSED;\n\n"); printf (" memset (ro, 0, sizeof (*ro) * MAX_RECOG_OPERANDS);\n"); --- 387,394 ---- printf ("void\ninsn_extract (insn)\n"); printf (" rtx insn;\n"); printf ("{\n"); ! printf (" rtx *ro = recog_data.operand;\n"); ! printf (" rtx **ro_loc = recog_data.operand_loc;\n"); printf (" rtx pat = PATTERN (insn);\n"); printf (" int i ATTRIBUTE_UNUSED;\n\n"); printf (" memset (ro, 0, sizeof (*ro) * MAX_RECOG_OPERANDS);\n"); *************** from the machine description file `md'. *** 430,438 **** /* The vector in the insn says how many operands it has. And all it contains are operands. In fact, the vector was ! created just for the sake of this function. */ printf (" for (i = XVECLEN (pat, 0) - 1; i >= 0; i--)\n"); ! printf (" ro[i] = XVECEXP (pat, 0, i);\n"); printf (" break;\n\n"); } --- 434,444 ---- /* The vector in the insn says how many operands it has. And all it contains are operands. In fact, the vector was ! created just for the sake of this function. We need to set the ! location of the operands for sake of simplifications after ! extraction, like eliminating subregs. */ printf (" for (i = XVECLEN (pat, 0) - 1; i >= 0; i--)\n"); ! printf (" ro[i] = *(ro_loc[i] = &XVECEXP (pat, 0, i));\n"); printf (" break;\n\n"); } diff -Nrc3pad gcc-3.0.4/gcc/genflags.c gcc-3.1/gcc/genflags.c *** gcc-3.0.4/gcc/genflags.c Sat May 12 20:32:34 2001 --- gcc-3.1/gcc/genflags.c Wed Mar 13 01:25:06 2002 *************** *** 4,25 **** Copyright (C) 1987, 1991, 1995, 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "hconfig.h" --- 4,25 ---- Copyright (C) 1987, 1991, 1995, 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "hconfig.h" *************** static void *** 54,63 **** max_operand_1 (x) rtx x; { ! register RTX_CODE code; ! register int i; ! register int len; ! register const char *fmt; if (x == 0) return; --- 54,63 ---- max_operand_1 (x) rtx x; { ! RTX_CODE code; ! int i; ! int len; ! const char *fmt; if (x == 0) return; *************** static int *** 87,94 **** num_operands (insn) rtx insn; { ! register int len = XVECLEN (insn, 1); ! register int i; max_opno = -1; --- 87,94 ---- num_operands (insn) rtx insn; { ! int len = XVECLEN (insn, 1); ! int i; max_opno = -1; *************** gen_proto (insn) *** 156,162 **** gen_macro (name, num, 5); } ! printf ("extern struct rtx_def * gen_%-*s PARAMS ((", max_id_len, name); if (num == 0) printf ("void"); --- 156,162 ---- gen_macro (name, num, 5); } ! printf ("extern struct rtx_def *gen_%-*s PARAMS ((", max_id_len, name); if (num == 0) printf ("void"); *************** gen_insn (insn) *** 201,207 **** printf ("("); for (p = XSTR (insn, 2); *p; p++) { ! if (*p == '\n') printf (" \\\n"); else printf ("%c", *p); --- 201,207 ---- printf ("("); for (p = XSTR (insn, 2); *p; p++) { ! if (IS_VSPACE (*p)) printf (" \\\n"); else printf ("%c", *p); *************** main (argc, argv) *** 228,240 **** obstack_init (&obstack); if (argc <= 1) ! fatal ("No input file name."); ! if (init_md_reader (argv[1]) != SUCCESS_EXIT_CODE) return (FATAL_EXIT_CODE); ! printf ("/* Generated automatically by the program `genflags'\n\ ! from the machine description file `md'. */\n\n"); /* Read the machine description. */ --- 228,242 ---- obstack_init (&obstack); if (argc <= 1) ! fatal ("no input file name"); ! if (init_md_reader_args (argc, argv) != SUCCESS_EXIT_CODE) return (FATAL_EXIT_CODE); ! puts ("/* Generated automatically by the program `genflags'"); ! puts (" from the machine description file `md'. */\n"); ! puts ("#ifndef GCC_INSN_FLAGS_H"); ! puts ("#define GCC_INSN_FLAGS_H\n"); /* Read the machine description. */ *************** from the machine description file `md'. *** 258,265 **** for (insn_ptr = insns; *insn_ptr; insn_ptr++) gen_proto (*insn_ptr); ! fflush (stdout); ! return (ferror (stdout) != 0 ? FATAL_EXIT_CODE : SUCCESS_EXIT_CODE); } /* Define this so we can link with print-rtl.o to get debug_rtx function. */ --- 260,271 ---- for (insn_ptr = insns; *insn_ptr; insn_ptr++) gen_proto (*insn_ptr); ! puts("\n#endif /* GCC_INSN_FLAGS_H */"); ! ! if (ferror (stdout) || fflush (stdout) || fclose (stdout)) ! return FATAL_EXIT_CODE; ! ! return SUCCESS_EXIT_CODE; } /* Define this so we can link with print-rtl.o to get debug_rtx function. */ diff -Nrc3pad gcc-3.0.4/gcc/gengenrtl.c gcc-3.1/gcc/gengenrtl.c *** gcc-3.0.4/gcc/gengenrtl.c Fri Oct 13 06:26:26 2000 --- gcc-3.1/gcc/gengenrtl.c Sun Dec 23 16:07:06 2001 *************** *** 1,22 **** /* Generate code to allocate RTL structures. Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "hconfig.h" --- 1,22 ---- /* Generate code to allocate RTL structures. Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "hconfig.h" *************** Boston, MA 02111-1307, USA. */ *** 71,89 **** #endif /* REAL_WIDTH */ #if REAL_WIDTH == 1 ! # define CONST_DOUBLE_FORMAT "e0ww" #else # if REAL_WIDTH == 2 ! # define CONST_DOUBLE_FORMAT "e0ww" # else # if REAL_WIDTH == 3 ! # define CONST_DOUBLE_FORMAT "e0www" # else # if REAL_WIDTH == 4 ! # define CONST_DOUBLE_FORMAT "e0wwww" # else # if REAL_WIDTH == 5 ! # define CONST_DOUBLE_FORMAT "e0wwwww" # else # define CONST_DOUBLE_FORMAT /* nothing - will cause syntax error */ # endif --- 71,89 ---- #endif /* REAL_WIDTH */ #if REAL_WIDTH == 1 ! # define CONST_DOUBLE_FORMAT "0ww" #else # if REAL_WIDTH == 2 ! # define CONST_DOUBLE_FORMAT "0ww" # else # if REAL_WIDTH == 3 ! # define CONST_DOUBLE_FORMAT "0www" # else # if REAL_WIDTH == 4 ! # define CONST_DOUBLE_FORMAT "0wwww" # else # if REAL_WIDTH == 5 ! # define CONST_DOUBLE_FORMAT "0wwwww" # else # define CONST_DOUBLE_FORMAT /* nothing - will cause syntax error */ # endif *************** Boston, MA 02111-1307, USA. */ *** 95,111 **** struct rtx_definition { ! const char *enumname, *name, *format; }; ! #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) { STRINGIFY(ENUM), NAME, FORMAT }, ! struct rtx_definition defs[] = { #include "rtl.def" /* rtl expressions are documented here */ }; ! const char *formats[NUM_RTX_CODE]; static const char *type_from_format PARAMS ((int)); static const char *accessor_from_format PARAMS ((int)); --- 95,111 ---- struct rtx_definition { ! const char *const enumname, *const name, *const format; }; ! #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) { STRINGX(ENUM), NAME, FORMAT }, ! static const struct rtx_definition defs[] = { #include "rtl.def" /* rtl expressions are documented here */ }; ! static const char *formats[NUM_RTX_CODE]; static const char *type_from_format PARAMS ((int)); static const char *accessor_from_format PARAMS ((int)); *************** special_rtx (idx) *** 208,217 **** return (strcmp (defs[idx].enumname, "CONST_INT") == 0 || strcmp (defs[idx].enumname, "CONST_DOUBLE") == 0 || strcmp (defs[idx].enumname, "REG") == 0 || strcmp (defs[idx].enumname, "MEM") == 0); } ! /* Place a list of all format specifiers we use into the array FORMAT. */ static void find_formats () --- 208,218 ---- return (strcmp (defs[idx].enumname, "CONST_INT") == 0 || strcmp (defs[idx].enumname, "CONST_DOUBLE") == 0 || strcmp (defs[idx].enumname, "REG") == 0 + || strcmp (defs[idx].enumname, "SUBREG") == 0 || strcmp (defs[idx].enumname, "MEM") == 0); } ! /* Place a list of all format specifiers we use into the array FORMAT. */ static void find_formats () *************** genheader () *** 351,357 **** { int i; const char **fmt; ! for (fmt = formats; *fmt; ++fmt) gendecl (*fmt); --- 352,361 ---- { int i; const char **fmt; ! ! puts ("#ifndef GCC_GENRTL_H"); ! puts ("#define GCC_GENRTL_H\n"); ! for (fmt = formats; *fmt; ++fmt) gendecl (*fmt); *************** genheader () *** 360,365 **** --- 364,371 ---- for (i = 0; i < NUM_RTX_CODE; i++) if (! special_format (defs[i].format)) genmacro (i); + + puts ("\n#endif /* GCC_GENRTL_H */"); } /* Generate the text of the code file we write, genrtl.c. */ *************** gencode () *** 384,407 **** gendef (*fmt); } - #if defined(USE_C_ALLOCA) - PTR - xmalloc (nbytes) - size_t nbytes; - { - register PTR tmp = (PTR) malloc (nbytes); - - if (!tmp) - { - fprintf (stderr, "can't allocate %d bytes (out of virtual memory)\n", - nbytes); - exit (FATAL_EXIT_CODE); - } - - return tmp; - } - #endif /* USE_C_ALLOCA */ - /* This is the main program. We accept only one argument, "-h", which says we are writing the genrtl.h file. Otherwise we are writing the genrtl.c file. */ --- 390,395 ---- *************** main (argc, argv) *** 420,425 **** else gencode (); ! fflush (stdout); ! return (ferror (stdout) != 0 ? FATAL_EXIT_CODE : SUCCESS_EXIT_CODE); } --- 408,415 ---- else gencode (); ! if (ferror (stdout) || fflush (stdout) || fclose (stdout)) ! return FATAL_EXIT_CODE; ! ! return SUCCESS_EXIT_CODE; } diff -Nrc3pad gcc-3.0.4/gcc/genmultilib gcc-3.1/gcc/genmultilib *** gcc-3.0.4/gcc/genmultilib Tue May 9 19:55:47 2000 --- gcc-3.1/gcc/genmultilib Sun Oct 7 18:02:43 2001 *************** *** 2,23 **** # Generates multilib.h. # Copyright (C) 1994, 1995, 1996, 1997, 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 shell script produces a header file which the gcc driver # program uses to pick which library to use based on the machine --- 2,23 ---- # Generates multilib.h. # Copyright (C) 1994, 1995, 1996, 1997, 1999 Free Software Foundation, Inc. ! #This file is part of GCC. ! #GCC is free software; you can redistribute it and/or modify it under ! #the terms of the GNU General Public License as published by the Free ! #Software Foundation; either version 2, or (at your option) any later ! #version. ! #GCC is distributed in the hope that it will be useful, but WITHOUT ! #ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ! #FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! #for more details. #You should have received a copy of the GNU General Public License ! #along with GCC; see the file COPYING. If not, write to the Free ! #Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! #02111-1307, USA. # This shell script produces a header file which the gcc driver # program uses to pick which library to use based on the machine *************** *** 57,64 **** # the compiler similar to exceptions. The difference being that exclusions # allow matching default options that genmultilib does not know about and # is done at runtime as opposed to being sorted out at compile time. ! # Each element in the list is a seperate exclusion rule. Each rule is ! # a list of options (sans preceding '-') seperated by a '/'. The options # on the rule are grouped as an AND operation, and all options much match # for the rule to exclude a set. Options can be preceded with a '!' to # match a logical NOT. --- 57,64 ---- # the compiler similar to exceptions. The difference being that exclusions # allow matching default options that genmultilib does not know about and # is done at runtime as opposed to being sorted out at compile time. ! # Each element in the list is a separate exclusion rule. Each rule is ! # a list of options (sans preceding '-') separated by a '/'. The options # on the rule are grouped as an AND operation, and all options much match # for the rule to exclude a set. Options can be preceded with a '!' to # match a logical NOT. diff -Nrc3pad gcc-3.0.4/gcc/genopinit.c gcc-3.1/gcc/genopinit.c *** gcc-3.0.4/gcc/genopinit.c Sat May 12 20:32:34 2001 --- gcc-3.1/gcc/genopinit.c Sun Dec 2 00:04:19 2001 *************** *** 2,23 **** Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "hconfig.h" --- 2,23 ---- Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "hconfig.h" *************** Boston, MA 02111-1307, USA. */ *** 56,62 **** used for comparisons. In that case, $c and $C are the lower-case and upper-case forms of the comparison, respectively. */ ! const char * const optabs[] = { "extendtab[$B][$A][0] = CODE_FOR_$(extend$a$b2$)", "extendtab[$B][$A][1] = CODE_FOR_$(zero_extend$a$b2$)", "fixtab[$A][$B][0] = CODE_FOR_$(fix$F$a$I$b2$)", --- 56,62 ---- used for comparisons. In that case, $c and $C are the lower-case and upper-case forms of the comparison, respectively. */ ! static const char * const optabs[] = { "extendtab[$B][$A][0] = CODE_FOR_$(extend$a$b2$)", "extendtab[$B][$A][1] = CODE_FOR_$(zero_extend$a$b2$)", "fixtab[$A][$B][0] = CODE_FOR_$(fix$F$a$I$b2$)", *************** const char * const optabs[] = *** 81,94 **** "smul_highpart_optab->handlers[$A].insn_code = CODE_FOR_$(smul$a3_highpart$)", "smul_widen_optab->handlers[$B].insn_code = CODE_FOR_$(mul$a$b3$)$N", "umul_widen_optab->handlers[$B].insn_code = CODE_FOR_$(umul$a$b3$)$N", ! "sdiv_optab->handlers[$A].insn_code = CODE_FOR_$(div$I$a3$)", "sdivv_optab->handlers[(int) $A].insn_code = CODE_FOR_$(div$V$I$a3$)", "udiv_optab->handlers[$A].insn_code = CODE_FOR_$(udiv$I$a3$)", "sdivmod_optab->handlers[$A].insn_code = CODE_FOR_$(divmod$a4$)", "udivmod_optab->handlers[$A].insn_code = CODE_FOR_$(udivmod$a4$)", "smod_optab->handlers[$A].insn_code = CODE_FOR_$(mod$a3$)", "umod_optab->handlers[$A].insn_code = CODE_FOR_$(umod$a3$)", - "flodiv_optab->handlers[$A].insn_code = CODE_FOR_$(div$F$a3$)", "ftrunc_optab->handlers[$A].insn_code = CODE_FOR_$(ftrunc$F$a2$)", "and_optab->handlers[$A].insn_code = CODE_FOR_$(and$a3$)", "ior_optab->handlers[$A].insn_code = CODE_FOR_$(ior$a3$)", --- 81,93 ---- "smul_highpart_optab->handlers[$A].insn_code = CODE_FOR_$(smul$a3_highpart$)", "smul_widen_optab->handlers[$B].insn_code = CODE_FOR_$(mul$a$b3$)$N", "umul_widen_optab->handlers[$B].insn_code = CODE_FOR_$(umul$a$b3$)$N", ! "sdiv_optab->handlers[$A].insn_code = CODE_FOR_$(div$a3$)", "sdivv_optab->handlers[(int) $A].insn_code = CODE_FOR_$(div$V$I$a3$)", "udiv_optab->handlers[$A].insn_code = CODE_FOR_$(udiv$I$a3$)", "sdivmod_optab->handlers[$A].insn_code = CODE_FOR_$(divmod$a4$)", "udivmod_optab->handlers[$A].insn_code = CODE_FOR_$(udivmod$a4$)", "smod_optab->handlers[$A].insn_code = CODE_FOR_$(mod$a3$)", "umod_optab->handlers[$A].insn_code = CODE_FOR_$(umod$a3$)", "ftrunc_optab->handlers[$A].insn_code = CODE_FOR_$(ftrunc$F$a2$)", "and_optab->handlers[$A].insn_code = CODE_FOR_$(and$a3$)", "ior_optab->handlers[$A].insn_code = CODE_FOR_$(ior$a3$)", *************** const char * const optabs[] = *** 128,133 **** --- 127,133 ---- "cbranch_optab->handlers[$A].insn_code = CODE_FOR_$(cbranch$a4$)", "cmov_optab->handlers[$A].insn_code = CODE_FOR_$(cmov$a6$)", "cstore_optab->handlers[$A].insn_code = CODE_FOR_$(cstore$a4$)", + "push_optab->handlers[$A].insn_code = CODE_FOR_$(push$a1$)", "reload_in_optab[$A] = CODE_FOR_$(reload_in$a$)", "reload_out_optab[$A] = CODE_FOR_$(reload_out$a$)", "movstr_optab[$A] = CODE_FOR_$(movstr$a$)", *************** gen_insn (insn) *** 219,229 **** break; if (*p == 0 ! && (! force_int || mode_class[i] == MODE_INT) && (! force_partial_int || mode_class[i] == MODE_INT ! || mode_class[i] == MODE_PARTIAL_INT) ! && (! force_float || mode_class[i] == MODE_FLOAT)) break; } --- 219,232 ---- break; if (*p == 0 ! && (! force_int || mode_class[i] == MODE_INT ! || mode_class[i] == MODE_VECTOR_INT) && (! force_partial_int || mode_class[i] == MODE_INT ! || mode_class[i] == MODE_PARTIAL_INT ! || mode_class[i] == MODE_VECTOR_INT) ! && (! force_float || mode_class[i] == MODE_FLOAT ! || mode_class[i] == MODE_VECTOR_FLOAT)) break; } *************** main (argc, argv) *** 314,322 **** progname = "genopinit"; if (argc <= 1) ! fatal ("No input file name."); ! if (init_md_reader (argv[1]) != SUCCESS_EXIT_CODE) return (FATAL_EXIT_CODE); printf ("/* Generated automatically by the program `genopinit'\n\ --- 317,325 ---- progname = "genopinit"; if (argc <= 1) ! fatal ("no input file name"); ! if (init_md_reader_args (argc, argv) != SUCCESS_EXIT_CODE) return (FATAL_EXIT_CODE); printf ("/* Generated automatically by the program `genopinit'\n\ *************** from the machine description file `md'. *** 329,334 **** --- 332,338 ---- printf ("#include \"insn-config.h\"\n"); printf ("#include \"recog.h\"\n"); printf ("#include \"expr.h\"\n"); + printf ("#include \"optabs.h\"\n"); printf ("#include \"reload.h\"\n\n"); printf ("void\ninit_all_optabs ()\n{\n"); diff -Nrc3pad gcc-3.0.4/gcc/genoutput.c gcc-3.1/gcc/genoutput.c *** gcc-3.0.4/gcc/genoutput.c Sat May 12 20:32:35 2001 --- gcc-3.1/gcc/genoutput.c Wed Mar 13 01:25:07 2002 *************** *** 2,23 **** Copyright (C) 1987, 1988, 1992, 1994, 1995, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* This program reads the machine description for the compiler target machine --- 2,23 ---- Copyright (C) 1987, 1988, 1992, 1994, 1995, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* This program reads the machine description for the compiler target machine *************** output_prologue () *** 222,227 **** --- 222,229 ---- printf ("#include \"flags.h\"\n"); printf ("#include \"ggc.h\"\n"); printf ("#include \"rtl.h\"\n"); + printf ("#include \"expr.h\"\n"); + printf ("#include \"insn-codes.h\"\n"); printf ("#include \"tm_p.h\"\n"); printf ("#include \"function.h\"\n"); printf ("#include \"regs.h\"\n"); *************** output_prologue () *** 239,251 **** /* We need to define all predicates used. Keep a list of those we have defined so far. There normally aren't very many predicates used, so a linked list should be fast enough. */ static void output_predicate_decls () { ! struct predicate { const char *name; struct predicate *next; } *predicates = 0; ! register struct operand_data *d; ! struct predicate *p; for (d = odata; d; d = d->next) if (d->predicate && d->predicate[0]) --- 241,254 ---- /* We need to define all predicates used. Keep a list of those we have defined so far. There normally aren't very many predicates used, so a linked list should be fast enough. */ + struct predicate { const char *name; struct predicate *next; }; static void output_predicate_decls () { ! struct predicate *predicates = 0; ! struct operand_data *d; ! struct predicate *p, *next; for (d = odata; d; d = d->next) if (d->predicate && d->predicate[0]) *************** output_predicate_decls () *** 258,264 **** { printf ("extern int %s PARAMS ((rtx, enum machine_mode));\n", d->predicate); ! p = (struct predicate *) alloca (sizeof (struct predicate)); p->name = d->predicate; p->next = predicates; predicates = p; --- 261,267 ---- { printf ("extern int %s PARAMS ((rtx, enum machine_mode));\n", d->predicate); ! p = (struct predicate *) xmalloc (sizeof (struct predicate)); p->name = d->predicate; p->next = predicates; predicates = p; *************** output_predicate_decls () *** 266,277 **** } printf ("\n\n"); } static void output_operand_data () { ! register struct operand_data *d; printf ("\nstatic const struct insn_operand_data operand_data[] = \n{\n"); --- 269,285 ---- } printf ("\n\n"); + for (p = predicates; p; p = next) + { + next = p->next; + free (p); + } } static void output_operand_data () { ! struct operand_data *d; printf ("\nstatic const struct insn_operand_data operand_data[] = \n{\n"); *************** output_operand_data () *** 298,309 **** static void output_insn_data () { ! register struct data *d; int name_offset = 0; int next_name_offset; const char * last_name = 0; const char * next_name = 0; ! register struct data *n; for (n = idata, next_name_offset = 1; n; n = n->next, next_name_offset++) if (n->name) --- 306,317 ---- static void output_insn_data () { ! struct data *d; int name_offset = 0; int next_name_offset; const char * last_name = 0; const char * next_name = 0; ! struct data *n; for (n = idata, next_name_offset = 1; n; n = n->next, next_name_offset++) if (n->name) *************** output_insn_data () *** 358,365 **** printf (" \""); while (*p) { ! if (*p == '\n' && prev != '\\') ! printf ("\\n\\\n"); else putchar (*p); prev = *p; --- 366,378 ---- printf (" \""); while (*p) { ! if (IS_VSPACE (*p) && prev != '\\') ! { ! /* Preserve two consecutive \n's or \r's, but treat \r\n ! as a single newline. */ ! if (*p == '\n' && prev != '\r') ! printf ("\\n\\\n"); ! } else putchar (*p); prev = *p; *************** scan_operands (d, part, this_address_p, *** 421,428 **** int this_address_p; int this_strict_low; { ! register int i, j; ! register const char *format_ptr; int opno; if (part == 0) --- 434,441 ---- int this_address_p; int this_strict_low; { ! int i, j; ! const char *format_ptr; int opno; if (part == 0) *************** scan_operands (d, part, this_address_p, *** 522,528 **** case MATCH_OP_DUP: case MATCH_PAR_DUP: ++num_dups; ! return; case ADDRESS: scan_operands (d, XEXP (part, 0), 1, 0); --- 535,541 ---- case MATCH_OP_DUP: case MATCH_PAR_DUP: ++num_dups; ! break; case ADDRESS: scan_operands (d, XEXP (part, 0), 1, 0); *************** process_template (d, template) *** 654,661 **** struct data *d; const char *template; { ! register const char *cp; ! register int i; /* Templates starting with * contain straight code to be run. */ if (template[0] == '*') --- 667,674 ---- struct data *d; const char *template; { ! const char *cp; ! int i; /* Templates starting with * contain straight code to be run. */ if (template[0] == '*') *************** process_template (d, template) *** 686,696 **** for (i = 0, cp = &template[1]; *cp; ) { ! while (*cp == '\n' || *cp == ' ' || *cp== '\t') cp++; printf (" \""); ! while (*cp != '\n' && *cp != '\0') { putchar (*cp); cp++; --- 699,709 ---- for (i = 0, cp = &template[1]; *cp; ) { ! while (ISSPACE (*cp)) cp++; printf (" \""); ! while (!IS_VSPACE (*cp) && *cp != '\0') { putchar (*cp); cp++; *************** process_template (d, template) *** 705,711 **** if (i != d->n_alternatives) { message_with_line (d->lineno, ! "Wrong number of alternatives in the output template"); have_error = 1; } --- 718,724 ---- if (i != d->n_alternatives) { message_with_line (d->lineno, ! "wrong number of alternatives in the output template"); have_error = 1; } *************** static void *** 724,730 **** validate_insn_alternatives (d) struct data *d; { ! register int n = 0, start; /* Make sure all the operands have the same number of alternatives in their constraints. Let N be that number. */ --- 737,743 ---- validate_insn_alternatives (d) struct data *d; { ! int n = 0, start; /* Make sure all the operands have the same number of alternatives in their constraints. Let N be that number. */ *************** gen_insn (insn, lineno) *** 771,778 **** rtx insn; int lineno; { ! register struct data *d = (struct data *) xmalloc (sizeof (struct data)); ! register int i; d->code_number = next_code_number; d->index_number = next_index_number; --- 784,791 ---- rtx insn; int lineno; { ! struct data *d = (struct data *) xmalloc (sizeof (struct data)); ! int i; d->code_number = next_code_number; d->index_number = next_index_number; *************** gen_insn (insn, lineno) *** 801,807 **** validate_insn_operands (d); validate_insn_alternatives (d); place_operands (d); ! process_template (d, XSTR (insn, 3)); } /* Look at a define_peephole just read. Assign its code number. --- 814,820 ---- validate_insn_operands (d); validate_insn_alternatives (d); place_operands (d); ! process_template (d, XTMPL (insn, 3)); } /* Look at a define_peephole just read. Assign its code number. *************** gen_peephole (peep, lineno) *** 813,820 **** rtx peep; int lineno; { ! register struct data *d = (struct data *) xmalloc (sizeof (struct data)); ! register int i; d->code_number = next_code_number; d->index_number = next_index_number; --- 826,833 ---- rtx peep; int lineno; { ! struct data *d = (struct data *) xmalloc (sizeof (struct data)); ! int i; d->code_number = next_code_number; d->index_number = next_index_number; *************** gen_peephole (peep, lineno) *** 842,848 **** validate_insn_alternatives (d); place_operands (d); ! process_template (d, XSTR (peep, 2)); } /* Process a define_expand just read. Assign its code number, --- 855,861 ---- validate_insn_alternatives (d); place_operands (d); ! process_template (d, XTMPL (peep, 2)); } /* Process a define_expand just read. Assign its code number, *************** gen_expand (insn, lineno) *** 853,860 **** rtx insn; int lineno; { ! register struct data *d = (struct data *) xmalloc (sizeof (struct data)); ! register int i; d->code_number = next_code_number; d->index_number = next_index_number; --- 866,873 ---- rtx insn; int lineno; { ! struct data *d = (struct data *) xmalloc (sizeof (struct data)); ! int i; d->code_number = next_code_number; d->index_number = next_index_number; *************** gen_split (split, lineno) *** 898,905 **** rtx split; int lineno; { ! register struct data *d = (struct data *) xmalloc (sizeof (struct data)); ! register int i; d->code_number = next_code_number; d->index_number = next_index_number; --- 911,918 ---- rtx split; int lineno; { ! struct data *d = (struct data *) xmalloc (sizeof (struct data)); ! int i; d->code_number = next_code_number; d->index_number = next_index_number; *************** main (argc, argv) *** 943,951 **** progname = "genoutput"; if (argc <= 1) ! fatal ("No input file name."); ! if (init_md_reader (argv[1]) != SUCCESS_EXIT_CODE) return (FATAL_EXIT_CODE); output_prologue (); --- 956,964 ---- progname = "genoutput"; if (argc <= 1) ! fatal ("no input file name"); ! if (init_md_reader_args (argc, argv) != SUCCESS_EXIT_CODE) return (FATAL_EXIT_CODE); output_prologue (); diff -Nrc3pad gcc-3.0.4/gcc/genpeep.c gcc-3.1/gcc/genpeep.c *** gcc-3.0.4/gcc/genpeep.c Tue Aug 1 03:16:19 2000 --- gcc-3.1/gcc/genpeep.c Sun Dec 2 00:04:19 2001 *************** *** 2,23 **** Copyright (C) 1987, 1989, 1992, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "hconfig.h" --- 2,23 ---- Copyright (C) 1987, 1989, 1992, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "hconfig.h" *************** gen_peephole (peep) *** 97,103 **** /* Walk the insn's pattern, remembering at all times the path down to the walking point. */ ! match_rtx (XVECEXP (peep, 0, i), NULL_PTR, insn_code_number); } /* We get this far if the pattern matches. --- 97,103 ---- /* Walk the insn's pattern, remembering at all times the path down to the walking point. */ ! match_rtx (XVECEXP (peep, 0, i), NULL, insn_code_number); } /* We get this far if the pattern matches. *************** gen_peephole (peep) *** 119,125 **** printf (" if (want_jump && GET_CODE (ins1) != JUMP_INSN)\n"); printf (" {\n"); printf (" rtx insn2 = emit_jump_insn_before (PATTERN (ins1), ins1);\n"); ! printf (" delete_insn (ins1);\n"); printf (" ins1 = ins2;\n"); printf (" }\n"); #endif --- 119,125 ---- printf (" if (want_jump && GET_CODE (ins1) != JUMP_INSN)\n"); printf (" {\n"); printf (" rtx insn2 = emit_jump_insn_before (PATTERN (ins1), ins1);\n"); ! printf (" delete_related_insns (ins1);\n"); printf (" ins1 = ins2;\n"); printf (" }\n"); #endif *************** match_rtx (x, path, fail_label) *** 146,155 **** struct link *path; int fail_label; { ! register RTX_CODE code; ! register int i; ! register int len; ! register const char *fmt; struct link link; if (x == 0) --- 146,155 ---- struct link *path; int fail_label; { ! RTX_CODE code; ! int i; ! int len; ! const char *fmt; struct link link; if (x == 0) *************** static void *** 364,370 **** print_code (code) RTX_CODE code; { ! register const char *p1; for (p1 = GET_RTX_NAME (code); *p1; p1++) putchar (TOUPPER(*p1)); } --- 364,370 ---- print_code (code) RTX_CODE code; { ! const char *p1; for (p1 = GET_RTX_NAME (code); *p1; p1++) putchar (TOUPPER(*p1)); } *************** main (argc, argv) *** 383,391 **** progname = "genpeep"; if (argc <= 1) ! fatal ("No input file name."); ! if (init_md_reader (argv[1]) != SUCCESS_EXIT_CODE) return (FATAL_EXIT_CODE); printf ("/* Generated automatically by the program `genpeep'\n\ --- 383,391 ---- progname = "genpeep"; if (argc <= 1) ! fatal ("no input file name"); ! if (init_md_reader_args (argc, argv) != SUCCESS_EXIT_CODE) return (FATAL_EXIT_CODE); printf ("/* Generated automatically by the program `genpeep'\n\ diff -Nrc3pad gcc-3.0.4/gcc/genpreds.c gcc-3.1/gcc/genpreds.c *** gcc-3.0.4/gcc/genpreds.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/genpreds.c Sun Oct 7 16:50:52 2001 *************** *** 0 **** --- 1,68 ---- + /* Generate from machine description: + - some macros CODE_FOR_... giving the insn_code_number value + for each of the defined standard insn names. + Copyright (C) 1987, 1991, 1995, 1998, + 1999, 2000, 2001 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GCC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + #include "hconfig.h" + #include "system.h" + + #define NO_GENRTL_H + #include "rtl.h" + + static void output_predicate_decls PARAMS ((void)); + extern int main PARAMS ((void)); + + static void + output_predicate_decls () + { + #ifdef PREDICATE_CODES + static const struct { + const char *const name; + const RTX_CODE codes[NUM_RTX_CODE]; + } predicate[] = { + PREDICATE_CODES + }; + size_t i; + + puts ("#ifdef RTX_CODE\n"); + for (i = 0; i < sizeof predicate / sizeof *predicate; i++) + printf ("extern int %s PARAMS ((rtx, enum machine_mode));\n", + predicate[i].name); + puts ("\n#endif /* RTX_CODE */\n"); + #endif + } + + int + main () + { + puts ("/* Generated automatically by the program `genpreds'. */\n"); + puts ("#ifndef GCC_TM_PREDS_H"); + puts ("#define GCC_TM_PREDS_H\n"); + + output_predicate_decls (); + + puts ("#endif /* GCC_TM_PREDS_H */"); + + if (ferror (stdout) || fflush (stdout) || fclose (stdout)) + return FATAL_EXIT_CODE; + + return SUCCESS_EXIT_CODE; + } diff -Nrc3pad gcc-3.0.4/gcc/genrecog.c gcc-3.1/gcc/genrecog.c *** gcc-3.0.4/gcc/genrecog.c Fri Mar 2 19:51:57 2001 --- gcc-3.1/gcc/genrecog.c Thu Mar 21 07:11:59 2002 *************** *** 1,23 **** /* Generate code from machine description to recognize rtl as insns. Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1997, 1998, ! 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* This program is used to produce insn-recog.c, which contains a --- 1,23 ---- /* Generate code from machine description to recognize rtl as insns. Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it ! under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ! ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public ! License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* This program is used to produce insn-recog.c, which contains a *************** struct decision_head *** 73,79 **** struct decision *first; struct decision *last; }; ! /* A single test. The two accept types aren't tests per-se, but their equality (or lack thereof) does affect tree merging so it is convenient to keep them here. */ --- 73,79 ---- struct decision *first; struct decision *last; }; ! /* A single test. The two accept types aren't tests per-se, but their equality (or lack thereof) does affect tree merging so it is convenient to keep them here. */ *************** struct decision_test *** 84,95 **** struct decision_test *next; /* These types are roughly in the order in which we'd like to test them. */ ! enum decision_type { ! DT_mode, DT_code, DT_veclen, ! DT_elt_zero_int, DT_elt_one_int, DT_elt_zero_wide, ! DT_veclen_ge, DT_dup, DT_pred, DT_c_test, ! DT_accept_op, DT_accept_insn ! } type; union { --- 84,96 ---- struct decision_test *next; /* These types are roughly in the order in which we'd like to test them. */ ! enum decision_type ! { ! DT_mode, DT_code, DT_veclen, ! DT_elt_zero_int, DT_elt_one_int, DT_elt_zero_wide, DT_elt_zero_wide_safe, ! DT_veclen_ge, DT_dup, DT_pred, DT_c_test, ! DT_accept_op, DT_accept_insn ! } type; union { *************** static int error_count; *** 180,189 **** of tree nodes. Also, if a predicate can match only one code, we can hardwire that code into the node testing the predicate. */ ! static struct pred_table { ! const char *name; ! RTX_CODE codes[NUM_RTX_CODE]; } preds[] = { {"general_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF, LABEL_REF, SUBREG, REG, MEM}}, --- 181,190 ---- of tree nodes. Also, if a predicate can match only one code, we can hardwire that code into the node testing the predicate. */ ! static const struct pred_table { ! const char *const name; ! const RTX_CODE codes[NUM_RTX_CODE]; } preds[] = { {"general_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF, LABEL_REF, SUBREG, REG, MEM}}, *************** static struct pred_table *** 215,221 **** #define NUM_KNOWN_PREDS ARRAY_SIZE (preds) ! static const char * special_mode_pred_table[] = { #ifdef SPECIAL_MODE_PREDICATES SPECIAL_MODE_PREDICATES #endif --- 216,222 ---- #define NUM_KNOWN_PREDS ARRAY_SIZE (preds) ! static const char *const special_mode_pred_table[] = { #ifdef SPECIAL_MODE_PREDICATES SPECIAL_MODE_PREDICATES #endif *************** static struct decision_head make_insn_se *** 294,300 **** PARAMS ((rtx, enum routine_type)); static void process_tree PARAMS ((struct decision_head *, enum routine_type)); ! static void record_insn_name PARAMS ((int, const char *)); --- 295,301 ---- PARAMS ((rtx, enum routine_type)); static void process_tree PARAMS ((struct decision_head *, enum routine_type)); ! static void record_insn_name PARAMS ((int, const char *)); *************** new_decision (position, last) *** 316,322 **** const char *position; struct decision_head *last; { ! register struct decision *new = (struct decision *) xmalloc (sizeof (struct decision)); memset (new, 0, sizeof (*new)); --- 317,323 ---- const char *position; struct decision_head *last; { ! struct decision *new = (struct decision *) xmalloc (sizeof (struct decision)); memset (new, 0, sizeof (*new)); *************** validate_pattern (pattern, insn, set, se *** 544,578 **** } } ! /* A MATCH_OPERAND that is a SET should have an output reload. */ ! if (set && code == MATCH_OPERAND ! && XSTR (pattern, 2)[0] != '\0') { ! if (set_code == '+') { ! if (XSTR (pattern, 2)[0] == '+') ! ; ! /* If we've only got an output reload for this operand, ! we'd better have a matching input operand. */ ! else if (XSTR (pattern, 2)[0] == '=' ! && find_matching_operand (insn, XINT (pattern, 0))) ! ; ! else { message_with_line (pattern_lineno, ! "operand %d missing in-out reload", XINT (pattern, 0)); error_count++; } } - else if (XSTR (pattern, 2)[0] != '=' - && XSTR (pattern, 2)[0] != '+') - { - message_with_line (pattern_lineno, - "operand %d missing output reload", - XINT (pattern, 0)); - error_count++; - } } /* Allowing non-lvalues in destinations -- particularly CONST_INT -- --- 545,596 ---- } } ! if (code == MATCH_OPERAND) { ! const char constraints0 = XSTR (pattern, 2)[0]; ! ! /* In DEFINE_EXPAND, DEFINE_SPLIT, and DEFINE_PEEPHOLE2, we ! don't use the MATCH_OPERAND constraint, only the predicate. ! This is confusing to folks doing new ports, so help them ! not make the mistake. */ ! if (GET_CODE (insn) == DEFINE_EXPAND ! || GET_CODE (insn) == DEFINE_SPLIT ! || GET_CODE (insn) == DEFINE_PEEPHOLE2) { ! if (constraints0) ! message_with_line (pattern_lineno, ! "warning: constraints not supported in %s", ! rtx_name[GET_CODE (insn)]); ! } ! ! /* A MATCH_OPERAND that is a SET should have an output reload. */ ! else if (set && constraints0) ! { ! if (set_code == '+') ! { ! if (constraints0 == '+') ! ; ! /* If we've only got an output reload for this operand, ! we'd better have a matching input operand. */ ! else if (constraints0 == '=' ! && find_matching_operand (insn, XINT (pattern, 0))) ! ; ! else ! { ! message_with_line (pattern_lineno, ! "operand %d missing in-out reload", ! XINT (pattern, 0)); ! error_count++; ! } ! } ! else if (constraints0 != '=' && constraints0 != '+') { message_with_line (pattern_lineno, ! "operand %d missing output reload", XINT (pattern, 0)); error_count++; } } } /* Allowing non-lvalues in destinations -- particularly CONST_INT -- *************** validate_pattern (pattern, insn, set, se *** 590,596 **** /* A modeless MATCH_OPERAND can be handy when we can check for multiple modes in the c_test. In most other cases, it is a mistake. Only DEFINE_INSN is eligible, since SPLIT ! and PEEP2 can FAIL within the output pattern. Exclude address_operand, since its mode is related to the mode of the memory not the operand. Exclude the SET_DEST of a call instruction, as that is a common idiom. */ --- 608,614 ---- /* A modeless MATCH_OPERAND can be handy when we can check for multiple modes in the c_test. In most other cases, it is a mistake. Only DEFINE_INSN is eligible, since SPLIT ! and PEEP2 can FAIL within the output pattern. Exclude address_operand, since its mode is related to the mode of the memory not the operand. Exclude the SET_DEST of a call instruction, as that is a common idiom. */ *************** validate_pattern (pattern, insn, set, se *** 622,627 **** --- 640,650 ---- dest = SET_DEST (pattern); src = SET_SRC (pattern); + /* STRICT_LOW_PART is a wrapper. Its argument is the real + destination, and it's mode should match the source. */ + if (GET_CODE (dest) == STRICT_LOW_PART) + dest = XEXP (dest, 0); + /* Find the referant for a DUP. */ if (GET_CODE (dest) == MATCH_DUP *************** validate_pattern (pattern, insn, set, se *** 634,644 **** || GET_CODE (src) == MATCH_PAR_DUP) src = find_operand (insn, XINT (src, 0)); - /* STRICT_LOW_PART is a wrapper. Its argument is the real - destination, and it's mode should match the source. */ - if (GET_CODE (dest) == STRICT_LOW_PART) - dest = XEXP (dest, 0); - dmode = GET_MODE (dest); smode = GET_MODE (src); --- 657,662 ---- *************** validate_pattern (pattern, insn, set, se *** 658,664 **** error_count++; } ! /* If only one of the operands is VOIDmode, and PC or CC0 is not involved, it's probably a mistake. */ else if (dmode != smode && GET_CODE (dest) != PC --- 676,682 ---- error_count++; } ! /* If only one of the operands is VOIDmode, and PC or CC0 is not involved, it's probably a mistake. */ else if (dmode != smode && GET_CODE (dest) != PC *************** add_to_sequence (pattern, last, position *** 757,764 **** struct decision_test *test; struct decision_test **place; char *subpos; ! register size_t i; ! register const char *fmt; int depth = strlen (position); int len; enum machine_mode mode; --- 775,782 ---- struct decision_test *test; struct decision_test **place; char *subpos; ! size_t i; ! const char *fmt; int depth = strlen (position); int len; enum machine_mode mode; *************** add_to_sequence (pattern, last, position *** 766,772 **** if (depth > max_depth) max_depth = depth; ! subpos = (char *) alloca (depth + 2); strcpy (subpos, position); subpos[depth + 1] = 0; --- 784,790 ---- if (depth > max_depth) max_depth = depth; ! subpos = (char *) xmalloc (depth + 2); strcpy (subpos, position); subpos[depth + 1] = 0; *************** add_to_sequence (pattern, last, position *** 780,786 **** switch (code) { case PARALLEL: ! /* Toplevel peephole pattern. */ if (insn_type == PEEPHOLE2 && top) { /* We don't need the node we just created -- unlink it. */ --- 798,804 ---- switch (code) { case PARALLEL: ! /* Toplevel peephole pattern. */ if (insn_type == PEEPHOLE2 && top) { /* We don't need the node we just created -- unlink it. */ *************** add_to_sequence (pattern, last, position *** 789,802 **** for (i = 0; i < (size_t) XVECLEN (pattern, 0); i++) { /* Which insn we're looking at is represented by A-Z. We don't ! ever use 'A', however; it is always implied. */ subpos[depth] = (i > 0 ? 'A' + i : 0); sub = add_to_sequence (XVECEXP (pattern, 0, i), last, subpos, insn_type, 0); last = &sub->success; } ! return sub; } /* Else nothing special. */ --- 807,820 ---- for (i = 0; i < (size_t) XVECLEN (pattern, 0); i++) { /* Which insn we're looking at is represented by A-Z. We don't ! ever use 'A', however; it is always implied. */ subpos[depth] = (i > 0 ? 'A' + i : 0); sub = add_to_sequence (XVECEXP (pattern, 0, i), last, subpos, insn_type, 0); last = &sub->success; } ! goto ret; } /* Else nothing special. */ *************** add_to_sequence (pattern, last, position *** 841,858 **** test->u.pred.name = pred_name; test->u.pred.mode = mode; ! /* See if we know about this predicate and save its number. If ! we do, and it only accepts one code, note that fact. The ! predicate `const_int_operand' only tests for a CONST_INT, so ! if we do so we can avoid calling it at all. ! Finally, if we know that the predicate does not allow ! CONST_INT, we know that the only way the predicate can match ! is if the modes match (here we use the kludge of relying on ! the fact that "address_operand" accepts CONST_INT; otherwise, ! it would have to be a special case), so we can test the mode ! (but we need not). This fact should considerably simplify the ! generated code. */ for (i = 0; i < NUM_KNOWN_PREDS; i++) if (! strcmp (preds[i].name, pred_name)) --- 859,874 ---- test->u.pred.name = pred_name; test->u.pred.mode = mode; ! /* See if we know about this predicate and save its number. ! If we do, and it only accepts one code, note that fact. ! If we know that the predicate does not allow CONST_INT, ! we know that the only way the predicate can match is if ! the modes match (here we use the kludge of relying on the ! fact that "address_operand" accepts CONST_INT; otherwise, ! it would have to be a special case), so we can test the ! mode (but we need not). This fact should considerably ! simplify the generated code. */ for (i = 0; i < NUM_KNOWN_PREDS; i++) if (! strcmp (preds[i].name, pred_name)) *************** add_to_sequence (pattern, last, position *** 956,965 **** } else if (fmt[i] == 'w') { if (i != 0) abort (); ! test = new_decision_test (DT_elt_zero_wide, &place); test->u.intval = XWINT (pattern, i); } else if (fmt[i] == 'E') --- 972,987 ---- } else if (fmt[i] == 'w') { + /* If this value actually fits in an int, we can use a switch + statement here, so indicate that. */ + enum decision_type type + = ((int) XWINT (pattern, i) == XWINT (pattern, i)) + ? DT_elt_zero_wide_safe : DT_elt_zero_wide; + if (i != 0) abort (); ! test = new_decision_test (type, &place); test->u.intval = XWINT (pattern, i); } else if (fmt[i] == 'E') *************** add_to_sequence (pattern, last, position *** 985,991 **** case 'E': { ! register int j; for (j = 0; j < XVECLEN (pattern, i); j++) { subpos[depth] = 'a' + j; --- 1007,1013 ---- case 'E': { ! int j; for (j = 0; j < XVECLEN (pattern, i); j++) { subpos[depth] = 'a' + j; *************** add_to_sequence (pattern, last, position *** 1027,1032 **** --- 1049,1056 ---- if (this->tests == NULL) abort (); + ret: + free (subpos); return sub; } *************** maybe_both_true_2 (d1, d2) *** 1053,1058 **** --- 1077,1083 ---- case DT_elt_zero_int: case DT_elt_one_int: case DT_elt_zero_wide: + case DT_elt_zero_wide_safe: return d1->u.intval == d2->u.intval; default: *************** maybe_both_true_1 (d1, d2) *** 1150,1156 **** struct decision_test *t1, *t2; /* A match_operand with no predicate can match anything. Recognize ! this by the existance of a lone DT_accept_op test. */ if (d1->type == DT_accept_op || d2->type == DT_accept_op) return 1; --- 1175,1181 ---- struct decision_test *t1, *t2; /* A match_operand with no predicate can match anything. Recognize ! this by the existence of a lone DT_accept_op test. */ if (d1->type == DT_accept_op || d2->type == DT_accept_op) return 1; *************** maybe_both_true (d1, d2, toplevel) *** 1208,1214 **** if (cmp != 0) { if (toplevel) ! abort(); /* If the d2->position was lexically lower, swap. */ if (cmp > 0) --- 1233,1239 ---- if (cmp != 0) { if (toplevel) ! abort (); /* If the d2->position was lexically lower, swap. */ if (cmp > 0) *************** nodes_identical_1 (d1, d2) *** 1276,1281 **** --- 1301,1307 ---- case DT_elt_zero_int: case DT_elt_one_int: case DT_elt_zero_wide: + case DT_elt_zero_wide_safe: return d1->u.intval == d2->u.intval; case DT_accept_op: *************** nodes_identical_1 (d1, d2) *** 1291,1297 **** } /* True iff the two nodes are identical (on one level only). Due ! to the way these lists are constructed, we shouldn't have to consider different orderings on the tests. */ static int --- 1317,1323 ---- } /* True iff the two nodes are identical (on one level only). Due ! to the way these lists are constructed, we shouldn't have to consider different orderings on the tests. */ static int *************** nodes_identical (d1, d2) *** 1327,1333 **** /* A subroutine of merge_trees; given two nodes that have been declared identical, cope with two insn accept states. If they differ in the number of clobbers, then the conflict was created by make_insn_sequence ! and we can drop the with-clobbers version on the floor. If both nodes have no additional clobbers, we have found an ambiguity in the source machine description. */ --- 1353,1359 ---- /* A subroutine of merge_trees; given two nodes that have been declared identical, cope with two insn accept states. If they differ in the number of clobbers, then the conflict was created by make_insn_sequence ! and we can drop the with-clobbers version on the floor. If both nodes have no additional clobbers, we have found an ambiguity in the source machine description. */ *************** merge_trees (oldh, addh) *** 1415,1421 **** that tests just the same mode. If we have no match, place NEW after the closest match we found. */ ! for (old = oldh->last; old; old = old->prev) { if (nodes_identical (old, add)) --- 1441,1447 ---- that tests just the same mode. If we have no match, place NEW after the closest match we found. */ ! for (old = oldh->last; old; old = old->prev) { if (nodes_identical (old, add)) *************** merge_trees (oldh, addh) *** 1457,1463 **** } } ! /* Walk the tree looking for sub-nodes that perform common tests. Factor out the common test into a new node. This enables us (depending on the test type) to emit switch statements later. */ --- 1483,1489 ---- } } ! /* Walk the tree looking for sub-nodes that perform common tests. Factor out the common test into a new node. This enables us (depending on the test type) to emit switch statements later. */ *************** factor_tests (head) *** 1479,1492 **** if (next->tests->type != type) continue; ! /* Don't want all node types, just those we can turn into switch statements. */ if (type != DT_mode && type != DT_code && type != DT_veclen && type != DT_elt_zero_int && type != DT_elt_one_int ! && type != DT_elt_zero_wide) continue; /* If we'd been performing more than one test, create a new node --- 1505,1518 ---- if (next->tests->type != type) continue; ! /* Don't want all node types, just those we can turn into switch statements. */ if (type != DT_mode && type != DT_code && type != DT_veclen && type != DT_elt_zero_int && type != DT_elt_one_int ! && type != DT_elt_zero_wide_safe) continue; /* If we'd been performing more than one test, create a new node *************** factor_tests (head) *** 1497,1503 **** new->tests = first->tests->next; first->tests->next = NULL; } ! /* Crop the node tree off after our first test. */ first->next = NULL; old_last = head->last; --- 1523,1529 ---- new->tests = first->tests->next; first->tests->next = NULL; } ! /* Crop the node tree off after our first test. */ first->next = NULL; old_last = head->last; *************** find_afterward (head, real_afterward) *** 1614,1620 **** { struct decision *p, *q, *afterward; ! /* We can't propogate alternatives across subroutine boundaries. This is not incorrect, merely a minor optimization loss. */ p = head->first; --- 1640,1646 ---- { struct decision *p, *q, *afterward; ! /* We can't propagate alternatives across subroutine boundaries. This is not incorrect, merely a minor optimization loss. */ p = head->first; *************** find_afterward (head, real_afterward) *** 1627,1633 **** if (maybe_both_true (p, q, 1)) break; ! /* If we reached the end of the list without finding one, use the incoming afterward position. */ if (!q) q = afterward; --- 1653,1659 ---- if (maybe_both_true (p, q, 1)) break; ! /* If we reached the end of the list without finding one, use the incoming afterward position. */ if (!q) q = afterward; *************** find_afterward (head, real_afterward) *** 1654,1660 **** new state, branch to node AFTERWARD if non-zero, otherwise return. Failure to move to the new state can only occur if we are trying to ! match multiple insns and we try to step past the end of the stream. */ static void change_state (oldpos, newpos, afterward, indent) --- 1680,1686 ---- new state, branch to node AFTERWARD if non-zero, otherwise return. Failure to move to the new state can only occur if we are trying to ! match multiple insns and we try to step past the end of the stream. */ static void change_state (oldpos, newpos, afterward, indent) *************** change_state (oldpos, newpos, afterward, *** 1674,1700 **** /* Hunt for the last [A-Z] in both strings. */ for (old_has_insn = odepth - 1; old_has_insn >= 0; --old_has_insn) ! if (oldpos[old_has_insn] >= 'A' && oldpos[old_has_insn] <= 'Z') break; for (new_has_insn = ndepth - 1; new_has_insn >= 0; --new_has_insn) ! if (newpos[new_has_insn] >= 'A' && newpos[new_has_insn] <= 'Z') break; /* Go down to desired level. */ while (depth < ndepth) { ! /* It's a different insn from the first one. */ ! if (newpos[depth] >= 'A' && newpos[depth] <= 'Z') { /* We can only fail if we're moving down the tree. */ if (old_has_insn >= 0 && oldpos[old_has_insn] >= newpos[depth]) { ! printf ("%stem = peep2_next_insn (%d);\n", indent, newpos[depth] - 'A'); } else { ! printf ("%stem = peep2_next_insn (%d);\n", indent, newpos[depth] - 'A'); printf ("%sif (tem == NULL_RTX)\n", indent); if (afterward) --- 1700,1726 ---- /* Hunt for the last [A-Z] in both strings. */ for (old_has_insn = odepth - 1; old_has_insn >= 0; --old_has_insn) ! if (ISUPPER (oldpos[old_has_insn])) break; for (new_has_insn = ndepth - 1; new_has_insn >= 0; --new_has_insn) ! if (ISUPPER (newpos[new_has_insn])) break; /* Go down to desired level. */ while (depth < ndepth) { ! /* It's a different insn from the first one. */ ! if (ISUPPER (newpos[depth])) { /* We can only fail if we're moving down the tree. */ if (old_has_insn >= 0 && oldpos[old_has_insn] >= newpos[depth]) { ! printf ("%stem = peep2_next_insn (%d);\n", indent, newpos[depth] - 'A'); } else { ! printf ("%stem = peep2_next_insn (%d);\n", indent, newpos[depth] - 'A'); printf ("%sif (tem == NULL_RTX)\n", indent); if (afterward) *************** change_state (oldpos, newpos, afterward, *** 1704,1710 **** } printf ("%sx%d = PATTERN (tem);\n", indent, depth + 1); } ! else if (newpos[depth] >= 'a' && newpos[depth] <= 'z') printf ("%sx%d = XVECEXP (x%d, 0, %d);\n", indent, depth + 1, depth, newpos[depth] - 'a'); else --- 1730,1736 ---- } printf ("%sx%d = PATTERN (tem);\n", indent, depth + 1); } ! else if (ISLOWER (newpos[depth])) printf ("%sx%d = XVECEXP (x%d, 0, %d);\n", indent, depth + 1, depth, newpos[depth] - 'a'); else *************** static void *** 1721,1727 **** print_code (code) enum rtx_code code; { ! register const char *p; for (p = GET_RTX_NAME (code); *p; p++) putchar (TOUPPER (*p)); } --- 1747,1753 ---- print_code (code) enum rtx_code code; { ! const char *p; for (p = GET_RTX_NAME (code); *p; p++) putchar (TOUPPER (*p)); } *************** write_afterward (start, afterward, inden *** 1743,1749 **** } } ! /* Emit a switch statement, if possible, for an initial sequence of nodes at START. Return the first node yet untested. */ static struct decision * --- 1769,1775 ---- } } ! /* Emit a switch statement, if possible, for an initial sequence of nodes at START. Return the first node yet untested. */ static struct decision * *************** write_switch (start, depth) *** 1777,1783 **** printf (" switch (GET_CODE (x%d))\n {\n", depth); code = p->tests->u.code; ! do { if (p != start && p->need_label && needs_label == NULL) needs_label = p; --- 1803,1809 ---- printf (" switch (GET_CODE (x%d))\n {\n", depth); code = p->tests->u.code; ! do { if (p != start && p->need_label && needs_label == NULL) needs_label = p; *************** write_switch (start, depth) *** 1856,1864 **** || type == DT_veclen || type == DT_elt_zero_int || type == DT_elt_one_int ! || type == DT_elt_zero_wide) { ! printf (" switch ("); switch (type) { case DT_mode: --- 1882,1899 ---- || type == DT_veclen || type == DT_elt_zero_int || type == DT_elt_one_int ! || type == DT_elt_zero_wide_safe) { ! const char *indent = ""; ! ! /* We cast switch parameter to integer, so we must ensure that the value ! fits. */ ! if (type == DT_elt_zero_wide_safe) ! { ! indent = " "; ! printf(" if ((int) XWINT (x%d, 0) == XWINT (x%d, 0))\n", depth, depth); ! } ! printf ("%s switch (", indent); switch (type) { case DT_mode: *************** write_switch (start, depth) *** 1873,1879 **** case DT_elt_one_int: printf ("XINT (x%d, 1)", depth); break; ! case DT_elt_zero_wide: /* Convert result of XWINT to int for portability since some C compilers won't do it and some will. */ printf ("(int) XWINT (x%d, 0)", depth); --- 1908,1914 ---- case DT_elt_one_int: printf ("XINT (x%d, 1)", depth); break; ! case DT_elt_zero_wide_safe: /* Convert result of XWINT to int for portability since some C compilers won't do it and some will. */ printf ("(int) XWINT (x%d, 0)", depth); *************** write_switch (start, depth) *** 1881,1887 **** default: abort (); } ! printf (")\n {\n"); do { --- 1916,1922 ---- default: abort (); } ! printf (")\n%s {\n", indent); do { *************** write_switch (start, depth) *** 1896,1902 **** if (p != start && p->need_label && needs_label == NULL) needs_label = p; ! printf (" case "); switch (type) { case DT_mode: --- 1931,1937 ---- if (p != start && p->need_label && needs_label == NULL) needs_label = p; ! printf ("%s case ", indent); switch (type) { case DT_mode: *************** write_switch (start, depth) *** 1908,1919 **** case DT_elt_zero_int: case DT_elt_one_int: case DT_elt_zero_wide: printf (HOST_WIDE_INT_PRINT_DEC, p->tests->u.intval); break; default: abort (); } ! printf (":\n goto L%d;\n", p->success.first->number); p->success.first->need_label = 1; p = p->next; --- 1943,1955 ---- case DT_elt_zero_int: case DT_elt_one_int: case DT_elt_zero_wide: + case DT_elt_zero_wide_safe: printf (HOST_WIDE_INT_PRINT_DEC, p->tests->u.intval); break; default: abort (); } ! printf (":\n%s goto L%d;\n", indent, p->success.first->number); p->success.first->need_label = 1; p = p->next; *************** write_switch (start, depth) *** 1921,1927 **** while (p && p->tests->type == type && !p->tests->next); case_done: ! printf (" default:\n break;\n }\n"); return needs_label != NULL ? needs_label : p; } --- 1957,1964 ---- while (p && p->tests->type == type && !p->tests->next); case_done: ! printf ("%s default:\n%s break;\n%s }\n", ! indent, indent, indent); return needs_label != NULL ? needs_label : p; } *************** write_cond (p, depth, subroutine_type) *** 1964,1969 **** --- 2001,2007 ---- break; case DT_elt_zero_wide: + case DT_elt_zero_wide_safe: printf ("XWINT (x%d, 0) == ", depth); printf (HOST_WIDE_INT_PRINT_DEC, p->u.intval); break; *************** write_action (p, test, depth, uncond, su *** 2068,2074 **** int match_len = 0, i; for (i = strlen (p->position) - 1; i >= 0; --i) ! if (p->position[i] >= 'A' && p->position[i] <= 'Z') { match_len = p->position[i] - 'A'; break; --- 2106,2112 ---- int match_len = 0, i; for (i = strlen (p->position) - 1; i >= 0; --i) ! if (ISUPPER (p->position[i])) { match_len = p->position[i] - 'A'; break; *************** write_tree (head, prevpos, type, initial *** 2210,2216 **** enum routine_type type; int initial; { ! register struct decision *p = head->first; putchar ('\n'); if (p->need_label) --- 2248,2254 ---- enum routine_type type; int initial; { ! struct decision *p = head->first; putchar ('\n'); if (p->need_label) *************** write_subroutine (head, type) *** 2272,2278 **** const char *s_or_e; char extension[32]; int i; ! s_or_e = subfunction ? "static " : ""; if (subfunction) --- 2310,2316 ---- const char *s_or_e; char extension[32]; int i; ! s_or_e = subfunction ? "static " : ""; if (subfunction) *************** write_subroutine (head, type) *** 2288,2294 **** printf ("%sint recog%s PARAMS ((rtx, rtx, int *));\n", s_or_e, extension); printf ("%sint\n\ recog%s (x0, insn, pnum_clobbers)\n\ ! register rtx x0;\n\ rtx insn ATTRIBUTE_UNUSED;\n\ int *pnum_clobbers ATTRIBUTE_UNUSED;\n", s_or_e, extension); break; --- 2326,2332 ---- printf ("%sint recog%s PARAMS ((rtx, rtx, int *));\n", s_or_e, extension); printf ("%sint\n\ recog%s (x0, insn, pnum_clobbers)\n\ ! rtx x0 ATTRIBUTE_UNUSED;\n\ rtx insn ATTRIBUTE_UNUSED;\n\ int *pnum_clobbers ATTRIBUTE_UNUSED;\n", s_or_e, extension); break; *************** recog%s (x0, insn, pnum_clobbers)\n\ *** 2296,2302 **** printf ("%srtx split%s PARAMS ((rtx, rtx));\n", s_or_e, extension); printf ("%srtx\n\ split%s (x0, insn)\n\ ! register rtx x0;\n\ rtx insn ATTRIBUTE_UNUSED;\n", s_or_e, extension); break; case PEEPHOLE2: --- 2334,2340 ---- printf ("%srtx split%s PARAMS ((rtx, rtx));\n", s_or_e, extension); printf ("%srtx\n\ split%s (x0, insn)\n\ ! rtx x0 ATTRIBUTE_UNUSED;\n\ rtx insn ATTRIBUTE_UNUSED;\n", s_or_e, extension); break; case PEEPHOLE2: *************** split%s (x0, insn)\n\ *** 2304,2318 **** s_or_e, extension); printf ("%srtx\n\ peephole2%s (x0, insn, _pmatch_len)\n\ ! register rtx x0;\n\ rtx insn ATTRIBUTE_UNUSED;\n\ int *_pmatch_len ATTRIBUTE_UNUSED;\n", s_or_e, extension); break; } ! printf ("{\n register rtx * const operands ATTRIBUTE_UNUSED = &recog_data.operand[0];\n"); for (i = 1; i <= max_depth; i++) ! printf (" register rtx x%d ATTRIBUTE_UNUSED;\n", i); printf (" %s tem ATTRIBUTE_UNUSED;\n", IS_SPLIT (type) ? "rtx" : "int"); --- 2342,2356 ---- s_or_e, extension); printf ("%srtx\n\ peephole2%s (x0, insn, _pmatch_len)\n\ ! rtx x0 ATTRIBUTE_UNUSED;\n\ rtx insn ATTRIBUTE_UNUSED;\n\ int *_pmatch_len ATTRIBUTE_UNUSED;\n", s_or_e, extension); break; } ! printf ("{\n rtx * const operands ATTRIBUTE_UNUSED = &recog_data.operand[0];\n"); for (i = 1; i <= max_depth; i++) ! printf (" rtx x%d ATTRIBUTE_UNUSED;\n", i); printf (" %s tem ATTRIBUTE_UNUSED;\n", IS_SPLIT (type) ? "rtx" : "int"); *************** write_header () *** 2366,2371 **** --- 2404,2411 ---- #include \"flags.h\"\n\ #include \"hard-reg-set.h\"\n\ #include \"resource.h\"\n\ + #include \"toplev.h\"\n\ + #include \"reload.h\"\n\ \n"); puts ("\n\ *************** main (argc, argv) *** 2615,2623 **** memset (&peephole2_tree, 0, sizeof peephole2_tree); if (argc <= 1) ! fatal ("No input file name."); ! if (init_md_reader (argv[1]) != SUCCESS_EXIT_CODE) return (FATAL_EXIT_CODE); next_insn_code = 0; --- 2655,2663 ---- memset (&peephole2_tree, 0, sizeof peephole2_tree); if (argc <= 1) ! fatal ("no input file name"); ! if (init_md_reader_args (argc, argv) != SUCCESS_EXIT_CODE) return (FATAL_EXIT_CODE); next_insn_code = 0; *************** main (argc, argv) *** 2648,2654 **** h = make_insn_sequence (desc, PEEPHOLE2); merge_trees (&peephole2_tree, &h); } ! next_index++; } --- 2688,2694 ---- h = make_insn_sequence (desc, PEEPHOLE2); merge_trees (&peephole2_tree, &h); } ! next_index++; } *************** record_insn_name (code, name) *** 2691,2697 **** new_size = (insn_name_ptr_size ? insn_name_ptr_size * 2 : 512); insn_name_ptr = (char **) xrealloc (insn_name_ptr, sizeof(char *) * new_size); ! memset (insn_name_ptr + insn_name_ptr_size, 0, sizeof(char *) * (new_size - insn_name_ptr_size)); insn_name_ptr_size = new_size; } --- 2731,2737 ---- new_size = (insn_name_ptr_size ? insn_name_ptr_size * 2 : 512); insn_name_ptr = (char **) xrealloc (insn_name_ptr, sizeof(char *) * new_size); ! memset (insn_name_ptr + insn_name_ptr_size, 0, sizeof(char *) * (new_size - insn_name_ptr_size)); insn_name_ptr_size = new_size; } *************** record_insn_name (code, name) *** 2706,2714 **** last_real_name = new = xstrdup (name); last_real_code = code; } ! insn_name_ptr[code] = new; ! } static void debug_decision_2 (test) --- 2746,2754 ---- last_real_name = new = xstrdup (name); last_real_code = code; } ! insn_name_ptr[code] = new; ! } static void debug_decision_2 (test) *************** debug_decision_2 (test) *** 2735,2740 **** --- 2775,2784 ---- fprintf (stderr, "elt0_w="); fprintf (stderr, HOST_WIDE_INT_PRINT_DEC, test->u.intval); break; + case DT_elt_zero_wide_safe: + fprintf (stderr, "elt0_ws="); + fprintf (stderr, HOST_WIDE_INT_PRINT_DEC, test->u.intval); + break; case DT_veclen_ge: fprintf (stderr, "veclen>=%d", test->u.veclen); break; *************** debug_decision_2 (test) *** 2757,2763 **** fprintf (stderr, "A_op=%d", test->u.opno); break; case DT_accept_insn: ! fprintf (stderr, "A_insn=(%d,%d)", test->u.insn.code_number, test->u.insn.num_clobbers_to_add); break; --- 2801,2807 ---- fprintf (stderr, "A_op=%d", test->u.opno); break; case DT_accept_insn: ! fprintf (stderr, "A_insn=(%d,%d)", test->u.insn.code_number, test->u.insn.num_clobbers_to_add); break; diff -Nrc3pad gcc-3.0.4/gcc/gensupport.c gcc-3.1/gcc/gensupport.c *** gcc-3.0.4/gcc/gensupport.c Thu Mar 15 19:02:00 2001 --- gcc-3.1/gcc/gensupport.c Sun Dec 2 00:04:19 2001 *************** *** 1,22 **** /* Support routines for the various generation passes. ! Copyright (C) 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "hconfig.h" #include "system.h" --- 1,22 ---- /* Support routines for the various generation passes. ! Copyright (C) 2000, 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it ! under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ! ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public ! License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "hconfig.h" #include "system.h" *************** *** 26,31 **** --- 26,34 ---- #include "gensupport.h" + /* In case some macros used by files we include need it, define this here. */ + int target_flags; + static struct obstack obstack; struct obstack *rtl_obstack = &obstack; *************** static int predicable_default; *** 39,44 **** --- 42,49 ---- static const char *predicable_true; static const char *predicable_false; + static char *base_dir = NULL; + /* We initially queue all patterns, process the define_insn and define_cond_exec patterns, then return them one at a time. */ *************** static struct queue_elem *other_queue; *** 59,64 **** --- 64,86 ---- static struct queue_elem **other_tail = &other_queue; static void queue_pattern PARAMS ((rtx, struct queue_elem ***, int)); + + /* Current maximum length of directory names in the search path + for include files. (Altered as we get more of them.) */ + + size_t max_include_len; + + struct file_name_list + { + struct file_name_list *next; + const char *fname; + }; + + struct file_name_list *include = 0; /* First dir to search */ + /* First dir to search for */ + struct file_name_list *first_bracket_include = 0; + struct file_name_list *last_include = 0; /* Last in chain */ + static void remove_constraints PARAMS ((rtx)); static void process_rtx PARAMS ((rtx, int)); *************** static const char *alter_output_for_insn *** 75,102 **** int, int)); static void process_one_cond_exec PARAMS ((struct queue_elem *)); static void process_define_cond_exec PARAMS ((void)); void message_with_line VPARAMS ((int lineno, const char *msg, ...)) { ! #ifndef ANSI_PROTOTYPES ! int lineno; ! const char *msg; ! #endif ! va_list ap; ! ! VA_START (ap, msg); ! ! #ifndef ANSI_PROTOTYPES ! lineno = va_arg (ap, int); ! msg = va_arg (ap, const char *); ! #endif fprintf (stderr, "%s:%d: ", read_rtx_filename, lineno); vfprintf (stderr, msg, ap); fputc ('\n', stderr); ! va_end (ap); } /* Queue PATTERN on LIST_TAIL. */ --- 97,132 ---- int, int)); static void process_one_cond_exec PARAMS ((struct queue_elem *)); static void process_define_cond_exec PARAMS ((void)); + static int process_include PARAMS ((rtx, int)); + static char *save_string PARAMS ((const char *, int)); + static int init_include_reader PARAMS ((FILE *)); void message_with_line VPARAMS ((int lineno, const char *msg, ...)) { ! VA_OPEN (ap, msg); ! VA_FIXEDARG (ap, int, lineno); ! VA_FIXEDARG (ap, const char *, msg); fprintf (stderr, "%s:%d: ", read_rtx_filename, lineno); vfprintf (stderr, msg, ap); fputc ('\n', stderr); ! VA_CLOSE (ap); ! } ! ! /* Make a version of gen_rtx_CONST_INT so that GEN_INT can be used in ! the gensupport programs. */ ! ! rtx ! gen_rtx_CONST_INT (mode, arg) ! enum machine_mode mode ATTRIBUTE_UNUSED; ! HOST_WIDE_INT arg; ! { ! rtx rt = rtx_alloc (CONST_INT); ! ! XWINT (rt, 0) = arg; ! return rt; } /* Queue PATTERN on LIST_TAIL. */ *************** static void *** 121,128 **** remove_constraints (part) rtx part; { ! register int i, j; ! register const char *format_ptr; if (part == 0) return; --- 151,158 ---- remove_constraints (part) rtx part; { ! int i, j; ! const char *format_ptr; if (part == 0) return; *************** remove_constraints (part) *** 149,154 **** --- 179,322 ---- } } + /* The entry point for initializing the reader. */ + + static int + init_include_reader (inf) + FILE *inf; + { + int c; + + errors = 0; + + /* Read the entire file. */ + while (1) + { + rtx desc; + int lineno; + + c = read_skip_spaces (inf); + if (c == EOF) + break; + + ungetc (c, inf); + lineno = read_rtx_lineno; + desc = read_rtx (inf); + process_rtx (desc, lineno); + } + fclose (inf); + + /* Process define_cond_exec patterns. */ + if (define_cond_exec_queue != NULL) + process_define_cond_exec (); + + return errors ? FATAL_EXIT_CODE : SUCCESS_EXIT_CODE; + } + + /* Process an include file assuming that it lives in gcc/config/{target}/ + if the include looks line (include "file" ) */ + static int + process_include (desc, lineno) + rtx desc; + int lineno; + { + const char *filename = XSTR (desc, 0); + char *pathname = NULL; + FILE *input_file; + char *fname = NULL; + struct file_name_list *stackp; + int flen; + + stackp = include; + + /* If specified file name is absolute, just open it. */ + if (IS_ABSOLUTE_PATHNAME (filename) || !stackp) + { + if (base_dir) + { + pathname = xmalloc (strlen (base_dir) + strlen (filename) + 1); + pathname = strcpy (pathname, base_dir); + strcat (pathname, filename); + strcat (pathname, "\0"); + } + else + { + pathname = xstrdup (filename); + } + read_rtx_filename = pathname; + input_file = fopen (pathname, "r"); + + if (input_file == 0) + { + perror (pathname); + return FATAL_EXIT_CODE; + } + } + else if (stackp) + { + + flen = strlen (filename); + + fname = (char *) xmalloc (max_include_len + flen + 2); + + /* + 2 above for slash and terminating null. */ + + /* Search directory path, trying to open the file. + Copy each filename tried into FNAME. */ + + for (; stackp; stackp = stackp->next) + { + if (stackp->fname) + { + strcpy (fname, stackp->fname); + strcat (fname, "/"); + fname[strlen (fname) + flen] = 0; + } + else + { + fname[0] = 0; + } + strncat (fname, (const char *) filename, flen); + read_rtx_filename = fname; + input_file = fopen (fname, "r"); + if (input_file != NULL) + break; + } + if (stackp == NULL) + { + if (strchr (fname, '/') == NULL || strchr (fname, '\\' ) || base_dir) + { + if (base_dir) + { + pathname = + xmalloc (strlen (base_dir) + strlen (filename) + 1); + pathname = strcpy (pathname, base_dir); + strcat (pathname, filename); + strcat (pathname, "\0"); + } + else + pathname = xstrdup (filename); + } + read_rtx_filename = pathname; + input_file = fopen (pathname, "r"); + + if (input_file == 0) + { + perror (filename); + return FATAL_EXIT_CODE; + } + } + + } + + if (init_include_reader (input_file) == FATAL_EXIT_CODE) + message_with_line (lineno, "read errors found in include file %s\n", pathname); + + if (fname) + free (fname); + return SUCCESS_EXIT_CODE; + } + /* Process a top level rtx in some way, queueing as appropriate. */ static void *************** process_rtx (desc, lineno) *** 170,175 **** --- 338,352 ---- queue_pattern (desc, &define_attr_tail, lineno); break; + case INCLUDE: + if (process_include (desc, lineno) == FATAL_EXIT_CODE) + { + const char *filename = XSTR (desc, 0); + message_with_line (lineno, "include file at %s not found\n", + filename); + } + break; + case DEFINE_INSN_AND_SPLIT: { const char *split_cond; *************** process_rtx (desc, lineno) *** 177,183 **** rtvec attr; int i; ! /* Create a split with values from the insn_and_split. */ split = rtx_alloc (DEFINE_SPLIT); i = XVECLEN (desc, 1); --- 354,360 ---- rtvec attr; int i; ! /* Create a split with values from the insn_and_split. */ split = rtx_alloc (DEFINE_SPLIT); i = XVECLEN (desc, 1); *************** is_predicable (elem) *** 308,314 **** return 0; message_with_line (elem->lineno, ! "Unknown value `%s' for `predicable' attribute", value); errors = 1; return 0; --- 485,491 ---- return 0; message_with_line (elem->lineno, ! "unknown value `%s' for `predicable' attribute", value); errors = 1; return 0; *************** identify_predicable_attribute () *** 331,337 **** goto found; message_with_line (define_cond_exec_queue->lineno, ! "Attribute `predicable' not defined"); errors = 1; return; --- 508,514 ---- goto found; message_with_line (define_cond_exec_queue->lineno, ! "attribute `predicable' not defined"); errors = 1; return; *************** identify_predicable_attribute () *** 345,351 **** if (p_true == NULL || strchr (++p_true, ',') != NULL) { message_with_line (elem->lineno, ! "Attribute `predicable' is not a boolean"); errors = 1; return; } --- 522,528 ---- if (p_true == NULL || strchr (++p_true, ',') != NULL) { message_with_line (elem->lineno, ! "attribute `predicable' is not a boolean"); errors = 1; return; } *************** identify_predicable_attribute () *** 362,374 **** case CONST: message_with_line (elem->lineno, ! "Attribute `predicable' cannot be const"); errors = 1; return; default: message_with_line (elem->lineno, ! "Attribute `predicable' must have a constant default"); errors = 1; return; } --- 539,551 ---- case CONST: message_with_line (elem->lineno, ! "attribute `predicable' cannot be const"); errors = 1; return; default: message_with_line (elem->lineno, ! "attribute `predicable' must have a constant default"); errors = 1; return; } *************** identify_predicable_attribute () *** 380,386 **** else { message_with_line (elem->lineno, ! "Unknown value `%s' for `predicable' attribute", value); errors = 1; } --- 557,563 ---- else { message_with_line (elem->lineno, ! "unknown value `%s' for `predicable' attribute", value); errors = 1; } *************** collect_insn_data (pattern, palt, pmax) *** 453,459 **** collect_insn_data (XVECEXP (pattern, i, j), palt, pmax); break; ! case 'i': case 'w': case '0': case 's': case 'S': break; default: --- 630,636 ---- collect_insn_data (XVECEXP (pattern, i, j), palt, pmax); break; ! case 'i': case 'w': case '0': case 's': case 'S': case 'T': break; default: *************** alter_predicate_for_insn (pattern, alt, *** 481,487 **** if (n_alternatives (c) != 1) { message_with_line (lineno, ! "Too many alternatives for operand %d", XINT (pattern, 0)); errors = 1; return NULL; --- 658,664 ---- if (n_alternatives (c) != 1) { message_with_line (lineno, ! "too many alternatives for operand %d", XINT (pattern, 0)); errors = 1; return NULL; *************** shift_output_template (new, old, disp) *** 597,604 **** c = *old++; if (ISDIGIT ((unsigned char) c)) c += disp; ! else if (ISUPPER ((unsigned char) c) ! || ISLOWER ((unsigned char) c)) { *new++ = c; c = *old++ + disp; --- 774,780 ---- c = *old++; if (ISDIGIT ((unsigned char) c)) c += disp; ! else if (ISALPHA (c)) { *new++ = c; c = *old++ + disp; *************** alter_output_for_insn (ce_elem, insn_ele *** 622,628 **** /* ??? Could coordinate with genoutput to not duplicate code here. */ ce_out = XSTR (ce_elem->data, 2); ! insn_out = XSTR (insn_elem->data, 3); if (!ce_out || *ce_out == '\0') return insn_out; --- 798,804 ---- /* ??? Could coordinate with genoutput to not duplicate code here. */ ce_out = XSTR (ce_elem->data, 2); ! insn_out = XTMPL (insn_elem->data, 3); if (!ce_out || *ce_out == '\0') return insn_out; *************** process_one_cond_exec (ce_elem) *** 724,730 **** } XSTR (insn, 2) = alter_test_for_insn (ce_elem, insn_elem); ! XSTR (insn, 3) = alter_output_for_insn (ce_elem, insn_elem, alternatives, max_operand); /* ??? Set `predicable' to false. Not crucial since it's really --- 900,906 ---- } XSTR (insn, 2) = alter_test_for_insn (ce_elem, insn_elem); ! XTMPL (insn, 3) = alter_output_for_insn (ce_elem, insn_elem, alternatives, max_operand); /* ??? Set `predicable' to false. Not crucial since it's really *************** process_define_cond_exec () *** 760,765 **** --- 936,1009 ---- for (elem = define_cond_exec_queue; elem ; elem = elem->next) process_one_cond_exec (elem); } + + static char * + save_string (s, len) + const char *s; + int len; + { + register char *result = xmalloc (len + 1); + + memcpy (result, s, len); + result[len] = 0; + return result; + } + + + /* The entry point for initializing the reader. */ + + int + init_md_reader_args (argc, argv) + int argc; + char **argv; + { + int i; + const char *in_fname; + + max_include_len = 0; + in_fname = NULL; + for (i = 1; i < argc; i++) + { + if (argv[i][0] != '-') + { + if (in_fname == NULL) + in_fname = argv[i]; + } + else + { + int c = argv[i][1]; + switch (c) + { + case 'I': /* Add directory to path for includes. */ + { + struct file_name_list *dirtmp; + + dirtmp = (struct file_name_list *) + xmalloc (sizeof (struct file_name_list)); + dirtmp->next = 0; /* New one goes on the end */ + if (include == 0) + include = dirtmp; + else + last_include->next = dirtmp; + last_include = dirtmp; /* Tail follows the last one */ + if (argv[i][1] == 'I' && argv[i][2] != 0) + dirtmp->fname = argv[i] + 2; + else if (i + 1 == argc) + fatal ("directory name missing after -I option"); + else + dirtmp->fname = argv[++i]; + if (strlen (dirtmp->fname) > max_include_len) + max_include_len = strlen (dirtmp->fname); + } + break; + default: + fatal ("invalid option `%s'", argv[i]); + + } + } + } + return init_md_reader (in_fname); + } /* The entry point for initializing the reader. */ *************** init_md_reader (filename) *** 769,774 **** --- 1013,1026 ---- { FILE *input_file; int c; + char *lastsl; + + if (!IS_ABSOLUTE_PATHNAME (filename)) + { + lastsl = strrchr (filename, '/'); + if (lastsl != NULL) + base_dir = save_string (filename, lastsl - filename + 1 ); + } read_rtx_filename = filename; input_file = fopen (filename, "r"); *************** init_md_reader (filename) *** 790,796 **** c = read_skip_spaces (input_file); if (c == EOF) ! break; ungetc (c, input_file); lineno = read_rtx_lineno; --- 1042,1048 ---- c = read_skip_spaces (input_file); if (c == EOF) ! break; ungetc (c, input_file); lineno = read_rtx_lineno; *************** read_md_rtx (lineno, seqnr) *** 850,904 **** return desc; } - - /* Until we can use the versions in libiberty. */ - char * - xstrdup (input) - const char *input; - { - register size_t len = strlen (input) + 1; - register char *output = xmalloc (len); - memcpy (output, input, len); - return output; - } - - PTR - xcalloc (nelem, elsize) - size_t nelem, elsize; - { - PTR newmem; - - if (nelem == 0 || elsize == 0) - nelem = elsize = 1; - - newmem = calloc (nelem, elsize); - if (!newmem) - fatal ("virtual memory exhausted"); - return (newmem); - } - - PTR - xrealloc (old, size) - PTR old; - size_t size; - { - register PTR ptr; - if (old) - ptr = (PTR) realloc (old, size); - else - ptr = (PTR) malloc (size); - if (!ptr) - fatal ("virtual memory exhausted"); - return ptr; - } - - PTR - xmalloc (size) - size_t size; - { - register PTR val = (PTR) malloc (size); - - if (val == 0) - fatal ("virtual memory exhausted"); - return val; - } --- 1102,1104 ---- diff -Nrc3pad gcc-3.0.4/gcc/gensupport.h gcc-3.1/gcc/gensupport.h *** gcc-3.0.4/gcc/gensupport.h Sat May 6 22:30:13 2000 --- gcc-3.1/gcc/gensupport.h Wed Nov 14 20:17:08 2001 *************** *** 1,26 **** /* Declarations for rtx-reader support for gen* routines. Copyright (C) 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ struct obstack; extern struct obstack *rtl_obstack; extern int init_md_reader PARAMS ((const char *)); extern rtx read_md_rtx PARAMS ((int *, int *)); --- 1,27 ---- /* Declarations for rtx-reader support for gen* routines. Copyright (C) 2000 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ struct obstack; extern struct obstack *rtl_obstack; + extern int init_md_reader_args PARAMS ((int, char **)); extern int init_md_reader PARAMS ((const char *)); extern rtx read_md_rtx PARAMS ((int *, int *)); diff -Nrc3pad gcc-3.0.4/gcc/ggc-callbacks.c gcc-3.1/gcc/ggc-callbacks.c *** gcc-3.0.4/gcc/ggc-callbacks.c Fri Oct 13 06:26:26 2000 --- gcc-3.1/gcc/ggc-callbacks.c Wed Aug 22 14:35:17 2001 *************** *** 1,22 **** /* Empty GC callbacks to be used by languages that don't support GC. Copyright (C) 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" #include "system.h" --- 1,22 ---- /* Empty GC callbacks to be used by languages that don't support GC. Copyright (C) 1999, 2000 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it ! under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ! ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public ! License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" #include "system.h" diff -Nrc3pad gcc-3.0.4/gcc/ggc-common.c gcc-3.1/gcc/ggc-common.c *** gcc-3.0.4/gcc/ggc-common.c Tue Mar 20 22:03:33 2001 --- gcc-3.1/gcc/ggc-common.c Sun Apr 28 20:35:54 2002 *************** *** 1,20 **** /* Simple garbage collection for the GNU compiler. ! Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it ! under the terms of the GNU General Public License as published by the ! Free Software Foundation; either version 2, or (at your option) any ! later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ! ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 1,20 ---- /* Simple garbage collection for the GNU compiler. ! Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ *************** Software Foundation, 59 Temple Place - S *** 27,32 **** --- 27,33 ---- #include "tree.h" #include "tm_p.h" #include "hash.h" + #include "hashtab.h" #include "varray.h" #include "ggc.h" *************** void (*lang_mark_false_label_stack) PARA *** 42,55 **** /* Trees that have been marked, but whose children still need marking. */ varray_type ggc_pending_trees; static void ggc_mark_rtx_ptr PARAMS ((void *)); static void ggc_mark_tree_ptr PARAMS ((void *)); static void ggc_mark_rtx_varray_ptr PARAMS ((void *)); static void ggc_mark_tree_varray_ptr PARAMS ((void *)); static void ggc_mark_tree_hash_table_ptr PARAMS ((void *)); static void ggc_mark_trees PARAMS ((void)); static bool ggc_mark_tree_hash_table_entry PARAMS ((struct hash_entry *, ! hash_table_key)); /* Maintain global roots that are preserved during GC. */ --- 43,58 ---- /* Trees that have been marked, but whose children still need marking. */ varray_type ggc_pending_trees; + static void ggc_mark_rtx_children_1 PARAMS ((rtx)); static void ggc_mark_rtx_ptr PARAMS ((void *)); static void ggc_mark_tree_ptr PARAMS ((void *)); static void ggc_mark_rtx_varray_ptr PARAMS ((void *)); static void ggc_mark_tree_varray_ptr PARAMS ((void *)); static void ggc_mark_tree_hash_table_ptr PARAMS ((void *)); + static int ggc_htab_delete PARAMS ((void **, void *)); static void ggc_mark_trees PARAMS ((void)); static bool ggc_mark_tree_hash_table_entry PARAMS ((struct hash_entry *, ! hash_table_key)); /* Maintain global roots that are preserved during GC. */ *************** ggc_del_root (base) *** 163,169 **** x = x->next; } ! abort(); } /* Iterate through all registered roots and mark each element. */ --- 166,238 ---- x = x->next; } ! abort (); ! } ! ! /* Add a hash table to be scanned when all roots have been processed. We ! delete any entry in the table that has not been marked. */ ! ! struct d_htab_root ! { ! struct d_htab_root *next; ! htab_t htab; ! ggc_htab_marked_p marked_p; ! ggc_htab_mark mark; ! }; ! ! static struct d_htab_root *d_htab_roots; ! ! /* Add X, an htab, to a list of htabs that contain objects which are allocated ! from GC memory. Once all other roots are marked, we check each object in ! the htab to see if it has already been marked. If not, it is deleted. ! ! MARKED_P, if specified, is a function that returns 1 if the entry is to ! be considered as "marked". If not present, the data structure pointed to ! by the htab slot is tested. This function should be supplied if some ! other object (such as something pointed to by that object) should be tested ! in which case the function tests whether that object (or objects) are ! marked (using ggc_marked_p) and returns nonzero if it is. ! ! MARK, if specified, is a function that is passed the contents of a slot ! that has been determined to have been "marked" (via the above function) ! and marks any other objects pointed to by that object. For example, ! we might have a hash table of memory attribute blocks, which are pointed ! to by a MEM RTL but have a pointer to a DECL. MARKED_P in that case will ! not be specified because we want to know if the attribute block is pointed ! to by the MEM, but MARK must be specified because if the block has been ! marked, we need to mark the DECL. */ ! ! void ! ggc_add_deletable_htab (x, marked_p, mark) ! PTR x; ! ggc_htab_marked_p marked_p; ! ggc_htab_mark mark; ! { ! struct d_htab_root *r ! = (struct d_htab_root *) xmalloc (sizeof (struct d_htab_root)); ! ! r->next = d_htab_roots; ! r->htab = (htab_t) x; ! r->marked_p = marked_p ? marked_p : ggc_marked_p; ! r->mark = mark; ! d_htab_roots = r; ! } ! ! /* Process a slot of an htab by deleting it if it has not been marked. */ ! ! static int ! ggc_htab_delete (slot, info) ! void **slot; ! void *info; ! { ! struct d_htab_root *r = (struct d_htab_root *) info; ! ! if (! (*r->marked_p) (*slot)) ! htab_clear_slot (r->htab, slot); ! else if (r->mark) ! (*r->mark) (*slot); ! ! return 1; } /* Iterate through all registered roots and mark each element. */ *************** ggc_del_root (base) *** 171,177 **** void ggc_mark_roots () { ! struct ggc_root* x; VARRAY_TREE_INIT (ggc_pending_trees, 4096, "ggc_pending_trees"); --- 240,247 ---- void ggc_mark_roots () { ! struct ggc_root *x; ! struct d_htab_root *y; VARRAY_TREE_INIT (ggc_pending_trees, 4096, "ggc_pending_trees"); *************** ggc_mark_roots () *** 189,194 **** --- 259,274 ---- /* Mark all the queued up trees, and their children. */ ggc_mark_trees (); VARRAY_FREE (ggc_pending_trees); + + /* Now scan all hash tables that have objects which are to be deleted if + they are not already marked. Since these may mark more trees, we need + to reinitialize that varray. */ + VARRAY_TREE_INIT (ggc_pending_trees, 1024, "ggc_pending_trees"); + + for (y = d_htab_roots; y != NULL; y = y->next) + htab_traverse (y->htab, ggc_htab_delete, (PTR) y); + ggc_mark_trees (); + VARRAY_FREE (ggc_pending_trees); } /* R had not been previously marked, but has now been marked via *************** void *** 198,203 **** --- 278,320 ---- ggc_mark_rtx_children (r) rtx r; { + rtx i, last; + + /* Special case the instruction chain. This is a data structure whose + chain length is potentially unbounded, and which contain references + within the chain (e.g. label_ref and insn_list). If do nothing here, + we risk blowing the stack recursing through a long chain of insns. + + Combat this by marking all of the instructions in the chain before + marking the contents of those instructions. */ + + switch (GET_CODE (r)) + { + case INSN: + case JUMP_INSN: + case CALL_INSN: + case NOTE: + case CODE_LABEL: + case BARRIER: + for (i = NEXT_INSN (r); ; i = NEXT_INSN (i)) + if (! ggc_test_and_set_mark (i)) + break; + last = i; + + for (i = NEXT_INSN (r); i != last; i = NEXT_INSN (i)) + ggc_mark_rtx_children_1 (i); + + default: + break; + } + + ggc_mark_rtx_children_1 (r); + } + + static void + ggc_mark_rtx_children_1 (r) + rtx r; + { const char *fmt; int i; rtx next_rtx; *************** ggc_mark_rtx_children (r) *** 219,224 **** --- 336,344 ---- have any right poking our noses in? */ switch (code) { + case MEM: + ggc_mark (MEM_ATTRS (r)); + break; case JUMP_INSN: ggc_mark_rtx (JUMP_LABEL (r)); break; *************** ggc_mark_trees () *** 374,386 **** ggc_mark_tree (DECL_INITIAL (t)); ggc_mark_tree (DECL_ABSTRACT_ORIGIN (t)); ggc_mark_tree (DECL_SECTION_NAME (t)); ! ggc_mark_tree (DECL_MACHINE_ATTRIBUTES (t)); if (DECL_RTL_SET_P (t)) ggc_mark_rtx (DECL_RTL (t)); ggc_mark_rtx (DECL_LIVE_RANGE_RTL (t)); ggc_mark_tree (DECL_VINDEX (t)); if (DECL_ASSEMBLER_NAME_SET_P (t)) ggc_mark_tree (DECL_ASSEMBLER_NAME (t)); lang_mark_tree (t); break; --- 494,513 ---- ggc_mark_tree (DECL_INITIAL (t)); ggc_mark_tree (DECL_ABSTRACT_ORIGIN (t)); ggc_mark_tree (DECL_SECTION_NAME (t)); ! ggc_mark_tree (DECL_ATTRIBUTES (t)); if (DECL_RTL_SET_P (t)) ggc_mark_rtx (DECL_RTL (t)); ggc_mark_rtx (DECL_LIVE_RANGE_RTL (t)); ggc_mark_tree (DECL_VINDEX (t)); if (DECL_ASSEMBLER_NAME_SET_P (t)) ggc_mark_tree (DECL_ASSEMBLER_NAME (t)); + if (TREE_CODE (t) == FUNCTION_DECL) + { + ggc_mark_tree (DECL_SAVED_TREE (t)); + ggc_mark_tree (DECL_INLINED_FNS (t)); + if (DECL_SAVED_INSNS (t)) + ggc_mark_struct_function (DECL_SAVED_INSNS (t)); + } lang_mark_tree (t); break; *************** ggc_mark_trees () *** 397,403 **** ggc_mark_tree (TYPE_NEXT_VARIANT (t)); ggc_mark_tree (TYPE_MAIN_VARIANT (t)); ggc_mark_tree (TYPE_BINFO (t)); - ggc_mark_tree (TYPE_NONCOPIED_PARTS (t)); ggc_mark_tree (TYPE_CONTEXT (t)); lang_mark_tree (t); break; --- 524,529 ---- *************** ggc_mark_tree_varray (v) *** 462,468 **** ggc_mark_tree (VARRAY_TREE (v, i)); } ! /* Mark the hash table-entry HE. It's key field is really a tree. */ static bool ggc_mark_tree_hash_table_entry (he, k) --- 588,594 ---- ggc_mark_tree (VARRAY_TREE (v, i)); } ! /* Mark the hash table-entry HE. Its key field is really a tree. */ static bool ggc_mark_tree_hash_table_entry (he, k) diff -Nrc3pad gcc-3.0.4/gcc/ggc-none.c gcc-3.1/gcc/ggc-none.c *** gcc-3.0.4/gcc/ggc-none.c Sat May 12 20:32:36 2001 --- gcc-3.1/gcc/ggc-none.c Wed Aug 22 14:35:17 2001 *************** *** 1,22 **** /* Null garbage collection for the GNU compiler. Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* This version is used by the gen* programs, where we don't really need GC at all. This prevents problems with pulling in all the --- 1,22 ---- /* Null garbage collection for the GNU compiler. Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it ! under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ! ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public ! License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* This version is used by the gen* programs, where we don't really need GC at all. This prevents problems with pulling in all the diff -Nrc3pad gcc-3.0.4/gcc/ggc-page.c gcc-3.1/gcc/ggc-page.c *** gcc-3.0.4/gcc/ggc-page.c Tue Mar 20 22:36:05 2001 --- gcc-3.1/gcc/ggc-page.c Sat Jan 5 22:11:21 2002 *************** *** 1,22 **** /* "Bag-of-pages" garbage collector for the GNU compiler. ! Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" #include "system.h" --- 1,22 ---- /* "Bag-of-pages" garbage collector for the GNU compiler. ! Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" #include "system.h" *************** Boston, MA 02111-1307, USA. */ *** 110,116 **** 1: GC statistics only. 2: Page-entry allocations/deallocations as well. 3: Object allocations as well. ! 4: Object marks as well. */ #define GGC_DEBUG_LEVEL (0) #ifndef HOST_BITS_PER_PTR --- 110,116 ---- 1: GC statistics only. 2: Page-entry allocations/deallocations as well. 3: Object allocations as well. ! 4: Object marks as well. */ #define GGC_DEBUG_LEVEL (0) #ifndef HOST_BITS_PER_PTR *************** ggc_allocated_p (p) *** 405,411 **** base = &table->table[0]; #endif ! /* Extract the level 1 and 2 indicies. */ L1 = LOOKUP_L1 (p); L2 = LOOKUP_L2 (p); --- 405,411 ---- base = &table->table[0]; #endif ! /* Extract the level 1 and 2 indices. */ L1 = LOOKUP_L1 (p); L2 = LOOKUP_L2 (p); *************** lookup_page_table_entry(p) *** 432,438 **** base = &table->table[0]; #endif ! /* Extract the level 1 and 2 indicies. */ L1 = LOOKUP_L1 (p); L2 = LOOKUP_L2 (p); --- 432,438 ---- base = &table->table[0]; #endif ! /* Extract the level 1 and 2 indices. */ L1 = LOOKUP_L1 (p); L2 = LOOKUP_L2 (p); *************** found: *** 467,473 **** base = &table->table[0]; #endif ! /* Extract the level 1 and 2 indicies. */ L1 = LOOKUP_L1 (p); L2 = LOOKUP_L2 (p); --- 467,473 ---- base = &table->table[0]; #endif ! /* Extract the level 1 and 2 indices. */ L1 = LOOKUP_L1 (p); L2 = LOOKUP_L2 (p); *************** alloc_anon (pref, size) *** 518,524 **** if (page == (char *) MAP_FAILED) { ! perror ("Virtual memory exhausted"); exit (FATAL_EXIT_CODE); } --- 518,524 ---- if (page == (char *) MAP_FAILED) { ! perror ("virtual memory exhausted"); exit (FATAL_EXIT_CODE); } *************** static inline size_t *** 535,541 **** page_group_index (allocation, page) char *allocation, *page; { ! return (size_t)(page - allocation) >> G.lg_pagesize; } /* Set and clear the in_use bit for this page in the page group. */ --- 535,541 ---- page_group_index (allocation, page) char *allocation, *page; { ! return (size_t) (page - allocation) >> G.lg_pagesize; } /* Set and clear the in_use bit for this page in the page group. */ *************** alloc_page (order) *** 592,598 **** if (p != NULL) { ! /* Recycle the allocated memory from this page ... */ *pp = p->next; page = p->page; --- 592,598 ---- if (p != NULL) { ! /* Recycle the allocated memory from this page ... */ *pp = p->next; page = p->page; *************** alloc_page (order) *** 654,660 **** alloc_size = entry_size + G.pagesize - 1; allocation = xmalloc (alloc_size); ! page = (char *)(((size_t) allocation + G.pagesize - 1) & -G.pagesize); head_slop = page - allocation; if (multiple_pages) tail_slop = ((size_t) allocation + alloc_size) & (G.pagesize - 1); --- 654,660 ---- alloc_size = entry_size + G.pagesize - 1; allocation = xmalloc (alloc_size); ! page = (char *) (((size_t) allocation + G.pagesize - 1) & -G.pagesize); head_slop = page - allocation; if (multiple_pages) tail_slop = ((size_t) allocation + alloc_size) & (G.pagesize - 1); *************** release_pages () *** 826,836 **** } /* This table provides a fast way to determine ceil(log_2(size)) for ! allocation requests. The minimum allocation size is four bytes. */ static unsigned char size_lookup[257] = ! { ! 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, --- 826,836 ---- } /* This table provides a fast way to determine ceil(log_2(size)) for ! allocation requests. The minimum allocation size is eight bytes. */ static unsigned char size_lookup[257] = ! { ! 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, *************** ggc_set_mark (p) *** 987,993 **** word = bit / HOST_BITS_PER_LONG; mask = (unsigned long) 1 << (bit % HOST_BITS_PER_LONG); ! /* If the bit was previously set, skip it. */ if (entry->in_use_p[word] & mask) return 1; --- 987,993 ---- word = bit / HOST_BITS_PER_LONG; mask = (unsigned long) 1 << (bit % HOST_BITS_PER_LONG); ! /* If the bit was previously set, skip it. */ if (entry->in_use_p[word] & mask) return 1; *************** ggc_set_mark (p) *** 1001,1006 **** --- 1001,1035 ---- return 0; } + /* Return 1 if P has been marked, zero otherwise. + P must have been allocated by the GC allocator; it mustn't point to + static objects, stack variables, or memory allocated with malloc. */ + + int + ggc_marked_p (p) + const void *p; + { + page_entry *entry; + unsigned bit, word; + unsigned long mask; + + /* Look up the page on which the object is alloced. If the object + wasn't allocated by the collector, we'll probably die. */ + entry = lookup_page_table_entry (p); + #ifdef ENABLE_CHECKING + if (entry == NULL) + abort (); + #endif + + /* Calculate the index of the object on the page; this is its bit + position in the in_use_p bitmap. */ + bit = (((const char *) p) - entry->page) / OBJECT_SIZE (entry->order); + word = bit / HOST_BITS_PER_LONG; + mask = (unsigned long) 1 << (bit % HOST_BITS_PER_LONG); + + return (entry->in_use_p[word] & mask) != 0; + } + /* Return the size of the gc-able object P. */ size_t *************** init_ggc () *** 1053,1059 **** abort (); } ! /* We have a good page, might as well hold onto it... */ e = (struct page_entry *) xcalloc (1, sizeof (struct page_entry)); e->bytes = G.pagesize; e->page = p; --- 1082,1088 ---- abort (); } ! /* We have a good page, might as well hold onto it... */ e = (struct page_entry *) xcalloc (1, sizeof (struct page_entry)); e->bytes = G.pagesize; e->page = p; *************** ggc_print_statistics () *** 1446,1452 **** /* Collect some information about the various sizes of allocation. */ fprintf (stderr, "\n%-5s %10s %10s %10s\n", ! "Log", "Allocated", "Used", "Overhead"); for (i = 0; i < NUM_ORDERS; ++i) { page_entry *p; --- 1475,1481 ---- /* Collect some information about the various sizes of allocation. */ fprintf (stderr, "\n%-5s %10s %10s %10s\n", ! "Size", "Allocated", "Used", "Overhead"); for (i = 0; i < NUM_ORDERS; ++i) { page_entry *p; *************** ggc_print_statistics () *** 1472,1478 **** overhead += (sizeof (page_entry) - sizeof (long) + BITMAP_SIZE (OBJECTS_PER_PAGE (i) + 1)); } ! fprintf (stderr, "%-5d %10ld%c %10ld%c %10ld%c\n", i, SCALE (allocated), LABEL (allocated), SCALE (in_use), LABEL (in_use), SCALE (overhead), LABEL (overhead)); --- 1501,1507 ---- overhead += (sizeof (page_entry) - sizeof (long) + BITMAP_SIZE (OBJECTS_PER_PAGE (i) + 1)); } ! fprintf (stderr, "%-5d %10ld%c %10ld%c %10ld%c\n", OBJECT_SIZE (i), SCALE (allocated), LABEL (allocated), SCALE (in_use), LABEL (in_use), SCALE (overhead), LABEL (overhead)); diff -Nrc3pad gcc-3.0.4/gcc/ggc-simple.c gcc-3.1/gcc/ggc-simple.c *** gcc-3.0.4/gcc/ggc-simple.c Wed Feb 14 04:38:49 2001 --- gcc-3.1/gcc/ggc-simple.c Thu Sep 20 15:12:53 2001 *************** *** 1,22 **** /* Simple garbage collection for the GNU compiler. Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" #include "system.h" --- 1,22 ---- /* Simple garbage collection for the GNU compiler. Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it ! under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ! ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public ! License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" #include "system.h" *************** ggc_set_mark (p) *** 228,233 **** --- 228,250 ---- return 0; } + /* Return 1 if P has been marked, zero otherwise. */ + + int + ggc_marked_p (p) + const void *p; + { + struct ggc_mem *x; + + x = (struct ggc_mem *) ((const char *)p - offsetof (struct ggc_mem, u)); + #ifdef GGC_ALWAYS_VERIFY + if (! tree_lookup (x)) + abort (); + #endif + + return x->mark; + } + /* Return the size of the gc-able object P. */ size_t diff -Nrc3pad gcc-3.0.4/gcc/ggc.h gcc-3.1/gcc/ggc.h *** gcc-3.0.4/gcc/ggc.h Wed Feb 14 04:38:49 2001 --- gcc-3.1/gcc/ggc.h Thu Oct 11 12:43:42 2001 *************** *** 1,24 **** /* Garbage collection for the GNU compiler. Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it ! under the terms of the GNU General Public License as published by the ! Free Software Foundation; either version 2, or (at your option) any ! later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ! ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - #include "gansidecl.h" #include "varray.h" /* Symbols are marked with `ggc' for `gcc gc' so as not to interfere with --- 1,23 ---- /* Garbage collection for the GNU compiler. Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "varray.h" /* Symbols are marked with `ggc' for `gcc gc' so as not to interfere with *************** extern const char digit_vector[]; /* "0" *** 48,70 **** extern varray_type ggc_pending_trees; /* Manipulate global roots that are needed between calls to gc. */ ! void ggc_add_root PARAMS ((void *base, int nelt, int size, void (*)(void *))); ! void ggc_add_rtx_root PARAMS ((struct rtx_def **, int nelt)); ! void ggc_add_tree_root PARAMS ((union tree_node **, int nelt)); ! void ggc_add_rtx_varray_root PARAMS ((struct varray_head_tag **, int nelt)); ! void ggc_add_tree_varray_root PARAMS ((struct varray_head_tag **, int nelt)); ! void ggc_add_tree_hash_table_root PARAMS ((struct hash_table **, int nelt)); ! void ggc_del_root PARAMS ((void *base)); /* Mark nodes from the gc_add_root callback. These functions follow pointers to mark other objects too. */ ! extern void ggc_mark_rtx_varray PARAMS ((struct varray_head_tag *)); ! extern void ggc_mark_tree_varray PARAMS ((struct varray_head_tag *)); ! extern void ggc_mark_tree_hash_table PARAMS ((struct hash_table *)); ! extern void ggc_mark_roots PARAMS ((void)); ! extern void ggc_mark_rtx_children PARAMS ((struct rtx_def *)); ! extern void ggc_mark_rtvec_children PARAMS ((struct rtvec_def *)); /* If EXPR is not NULL and previously unmarked, mark it and evaluate to true. Otherwise evaluate to false. */ --- 47,85 ---- extern varray_type ggc_pending_trees; /* Manipulate global roots that are needed between calls to gc. */ ! extern void ggc_add_root PARAMS ((void *base, int nelt, ! int size, void (*)(void *))); ! extern void ggc_add_rtx_root PARAMS ((struct rtx_def **, int nelt)); ! extern void ggc_add_tree_root PARAMS ((union tree_node **, ! int nelt)); ! extern void ggc_add_rtx_varray_root PARAMS ((struct varray_head_tag **, ! int nelt)); ! extern void ggc_add_tree_varray_root PARAMS ((struct varray_head_tag **, ! int nelt)); ! extern void ggc_add_tree_hash_table_root PARAMS ((struct hash_table **, ! int nelt)); ! extern void ggc_del_root PARAMS ((void *base)); ! ! /* Types used for mark test and marking functions, if specified, in call ! below. */ ! typedef int (*ggc_htab_marked_p) PARAMS ((const void *)); ! typedef void (*ggc_htab_mark) PARAMS ((const void *)); ! ! /* Add a hash table to be scanned when all roots have been processed. We ! delete any entry in the table that has not been marked. The argument is ! really htab_t. */ ! extern void ggc_add_deletable_htab PARAMS ((PTR, ggc_htab_marked_p, ! ggc_htab_mark)); /* Mark nodes from the gc_add_root callback. These functions follow pointers to mark other objects too. */ ! extern void ggc_mark_rtx_varray PARAMS ((struct varray_head_tag *)); ! extern void ggc_mark_tree_varray PARAMS ((struct varray_head_tag *)); ! extern void ggc_mark_tree_hash_table PARAMS ((struct hash_table *)); ! extern void ggc_mark_roots PARAMS ((void)); ! extern void ggc_mark_rtx_children PARAMS ((struct rtx_def *)); ! extern void ggc_mark_rtvec_children PARAMS ((struct rtvec_def *)); /* If EXPR is not NULL and previously unmarked, mark it and evaluate to true. Otherwise evaluate to false. */ *************** extern void ggc_mark_rtvec_children PARA *** 85,90 **** --- 100,112 ---- VARRAY_PUSH_TREE (ggc_pending_trees, t__); \ } while (0) + #define ggc_mark_nonnull_tree(EXPR) \ + do { \ + tree t__ = (EXPR); \ + if (! ggc_set_mark (t__)) \ + VARRAY_PUSH_TREE (ggc_pending_trees, t__); \ + } while (0) + #define ggc_mark_rtvec(EXPR) \ do { \ rtvec v__ = (EXPR); \ *************** extern void ggc_mark_rtvec_children PARA *** 101,124 **** /* A GC implementation must provide these functions. */ ! /* Initialize the garbage collector. */ ! extern void init_ggc PARAMS ((void)); ! extern void init_stringpool PARAMS ((void)); /* Start a new GGC context. Memory allocated in previous contexts will not be collected while the new context is active. */ ! extern void ggc_push_context PARAMS ((void)); /* Finish a GC context. Any uncollected memory in the new context will be merged with the old context. */ ! extern void ggc_pop_context PARAMS ((void)); /* Allocation. */ /* The internal primitive. */ ! void *ggc_alloc PARAMS ((size_t)); /* Like ggc_alloc, but allocates cleared memory. */ ! void *ggc_alloc_cleared PARAMS ((size_t)); #define ggc_alloc_rtx(NSLOTS) \ ((struct rtx_def *) ggc_alloc (sizeof (struct rtx_def) \ --- 123,146 ---- /* A GC implementation must provide these functions. */ ! /* Initialize the garbage collector. */ ! extern void init_ggc PARAMS ((void)); ! extern void init_stringpool PARAMS ((void)); /* Start a new GGC context. Memory allocated in previous contexts will not be collected while the new context is active. */ ! extern void ggc_push_context PARAMS ((void)); /* Finish a GC context. Any uncollected memory in the new context will be merged with the old context. */ ! extern void ggc_pop_context PARAMS ((void)); /* Allocation. */ /* The internal primitive. */ ! extern void *ggc_alloc PARAMS ((size_t)); /* Like ggc_alloc, but allocates cleared memory. */ ! extern void *ggc_alloc_cleared PARAMS ((size_t)); #define ggc_alloc_rtx(NSLOTS) \ ((struct rtx_def *) ggc_alloc (sizeof (struct rtx_def) \ *************** void *ggc_alloc_cleared PARAMS ((size_t) *** 133,159 **** /* Allocate a gc-able string, and fill it with LENGTH bytes from CONTENTS. If LENGTH is -1, then CONTENTS is assumed to be a null-terminated string and the memory sized accordingly. */ ! const char *ggc_alloc_string PARAMS ((const char *contents, int length)); /* Make a copy of S, in GC-able memory. */ #define ggc_strdup(S) ggc_alloc_string((S), -1) /* Invoke the collector. Garbage collection occurs only when this function is called, not during allocations. */ ! void ggc_collect PARAMS ((void)); /* Actually set the mark on a particular region of memory, but don't follow pointers. This function is called by ggc_mark_*. It returns zero if the object was not previously marked; non-zero if the object was already marked, or if, for any other reason, pointers in this data structure should not be traversed. */ ! int ggc_set_mark PARAMS ((const void *)); /* Callbacks to the languages. */ /* This is the language's opportunity to mark nodes held through the lang_specific hooks in the tree. */ ! void lang_mark_tree PARAMS ((union tree_node *)); /* The FALSE_LABEL_STACK, declared in except.h, has language-dependent semantics. If a front-end needs to mark the false label stack, it --- 155,187 ---- /* Allocate a gc-able string, and fill it with LENGTH bytes from CONTENTS. If LENGTH is -1, then CONTENTS is assumed to be a null-terminated string and the memory sized accordingly. */ ! extern const char *ggc_alloc_string PARAMS ((const char *contents, ! int length)); /* Make a copy of S, in GC-able memory. */ #define ggc_strdup(S) ggc_alloc_string((S), -1) /* Invoke the collector. Garbage collection occurs only when this function is called, not during allocations. */ ! extern void ggc_collect PARAMS ((void)); /* Actually set the mark on a particular region of memory, but don't follow pointers. This function is called by ggc_mark_*. It returns zero if the object was not previously marked; non-zero if the object was already marked, or if, for any other reason, pointers in this data structure should not be traversed. */ ! extern int ggc_set_mark PARAMS ((const void *)); ! ! /* Return 1 if P has been marked, zero otherwise. ! P must have been allocated by the GC allocator; it mustn't point to ! static objects, stack variables, or memory allocated with malloc. */ ! extern int ggc_marked_p PARAMS ((const void *)); /* Callbacks to the languages. */ /* This is the language's opportunity to mark nodes held through the lang_specific hooks in the tree. */ ! extern void lang_mark_tree PARAMS ((union tree_node *)); /* The FALSE_LABEL_STACK, declared in except.h, has language-dependent semantics. If a front-end needs to mark the false label stack, it *************** extern void (*lang_mark_false_label_stac *** 163,174 **** /* Mark functions for various structs scattered about. */ ! void mark_eh_status PARAMS ((struct eh_status *)); ! void mark_emit_status PARAMS ((struct emit_status *)); ! void mark_expr_status PARAMS ((struct expr_status *)); ! void mark_stmt_status PARAMS ((struct stmt_status *)); ! void mark_varasm_status PARAMS ((struct varasm_status *)); ! void mark_optab PARAMS ((void *)); /* Statistics. */ --- 191,202 ---- /* Mark functions for various structs scattered about. */ ! void mark_eh_status PARAMS ((struct eh_status *)); ! void mark_emit_status PARAMS ((struct emit_status *)); ! void mark_expr_status PARAMS ((struct expr_status *)); ! void mark_stmt_status PARAMS ((struct stmt_status *)); ! void mark_varasm_status PARAMS ((struct varasm_status *)); ! void mark_optab PARAMS ((void *)); /* Statistics. */ *************** typedef struct ggc_statistics *** 197,208 **** } ggc_statistics; /* Return the number of bytes allocated at the indicated address. */ ! size_t ggc_get_size PARAMS ((const void *)); /* Used by the various collectors to gather and print statistics that do not depend on the collector in use. */ ! void ggc_print_common_statistics PARAMS ((FILE *, ggc_statistics *)); /* Print allocation statistics. */ ! extern void ggc_print_statistics PARAMS ((void)); ! void stringpool_statistics PARAMS ((void)); --- 225,236 ---- } ggc_statistics; /* Return the number of bytes allocated at the indicated address. */ ! extern size_t ggc_get_size PARAMS ((const void *)); /* Used by the various collectors to gather and print statistics that do not depend on the collector in use. */ ! extern void ggc_print_common_statistics PARAMS ((FILE *, ggc_statistics *)); /* Print allocation statistics. */ ! extern void ggc_print_statistics PARAMS ((void)); ! extern void stringpool_statistics PARAMS ((void)); diff -Nrc3pad gcc-3.0.4/gcc/ginclude/math-3300.h gcc-3.1/gcc/ginclude/math-3300.h *** gcc-3.0.4/gcc/ginclude/math-3300.h Wed Dec 16 21:19:19 1998 --- gcc-3.1/gcc/ginclude/math-3300.h Thu Jan 1 00:00:00 1970 *************** *** 1,461 **** - /******************************************************************\ - * * - * last modified: 18 May 1989. * - * * - * Copyright (C) 1989 by Matthew Self. * - * You may freely distribute verbatim copies of this software * - * provided that this copyright notice is retained in all copies. * - * You may distribute modifications to this software under the * - * conditions above if you also clearly note such modifications * - * with their author and date. * - * * - * Note: errno is not set to EDOM when domain errors occur for * - * most of these functions. Rather, it is assumed that the * - * 68881's OPERR exception will be enabled and handled * - * appropriately by the operating system. Similarly, overflow * - * and underflow do not set errno to ERANGE. * - * * - * Send bugs to Matthew Self (self@bayes.arc.nasa.gov). * - * * - \******************************************************************/ - - #include - - #undef HUGE_VAL - #define HUGE_VAL \ - ({ \ - double huge_val; \ - \ - __asm ("fmove%.d %#0x7ff0000000000000,%0" /* Infinity */ \ - : "=f" (huge_val) \ - : /* no inputs */); \ - huge_val; \ - }) - - __inline static const double sin (double x) - { - double value; - - __asm ("fsin%.x %1,%0" - : "=f" (value) - : "f" (x)); - return value; - } - - __inline static const double cos (double x) - { - double value; - - __asm ("fcos%.x %1,%0" - : "=f" (value) - : "f" (x)); - return value; - } - - __inline static const double tan (double x) - { - double value; - - __asm ("ftan%.x %1,%0" - : "=f" (value) - : "f" (x)); - return value; - } - - __inline static const double asin (double x) - { - double value; - - __asm ("fasin%.x %1,%0" - : "=f" (value) - : "f" (x)); - return value; - } - - __inline static const double acos (double x) - { - double value; - - __asm ("facos%.x %1,%0" - : "=f" (value) - : "f" (x)); - return value; - } - - __inline static const double atan (double x) - { - double value; - - __asm ("fatan%.x %1,%0" - : "=f" (value) - : "f" (x)); - return value; - } - - __inline static const double atan2 (double y, double x) - { - double pi, pi_over_2; - - __asm ("fmovecr%.x %#0,%0" /* extended precision pi */ - : "=f" (pi) - : /* no inputs */ ); - __asm ("fscale%.b %#-1,%0" /* no loss of accuracy */ - : "=f" (pi_over_2) - : "0" (pi)); - if (x > 0) - { - if (y > 0) - { - if (x > y) - return atan (y / x); - else - return pi_over_2 - atan (x / y); - } - else - { - if (x > -y) - return atan (y / x); - else - return - pi_over_2 - atan (x / y); - } - } - else - { - if (y > 0) - { - if (-x > y) - return pi + atan (y / x); - else - return pi_over_2 - atan (x / y); - } - else - { - if (-x > -y) - return - pi + atan (y / x); - else if (y < 0) - return - pi_over_2 - atan (x / y); - else - { - double value; - - errno = EDOM; - __asm ("fmove%.d %#0x7fffffffffffffff,%0" /* quiet NaN */ - : "=f" (value) - : /* no inputs */); - return value; - } - } - } - } - - __inline static const double sinh (double x) - { - double value; - - __asm ("fsinh%.x %1,%0" - : "=f" (value) - : "f" (x)); - return value; - } - - __inline static const double cosh (double x) - { - double value; - - __asm ("fcosh%.x %1,%0" - : "=f" (value) - : "f" (x)); - return value; - } - - __inline static const double tanh (double x) - { - double value; - - __asm ("ftanh%.x %1,%0" - : "=f" (value) - : "f" (x)); - return value; - } - - __inline static const double atanh (double x) - { - double value; - - __asm ("fatanh%.x %1,%0" - : "=f" (value) - : "f" (x)); - return value; - } - - __inline static const double exp (double x) - { - double value; - - __asm ("fetox%.x %1,%0" - : "=f" (value) - : "f" (x)); - return value; - } - - __inline static const double expm1 (double x) - { - double value; - - __asm ("fetoxm1%.x %1,%0" - : "=f" (value) - : "f" (x)); - return value; - } - - __inline static const double log (double x) - { - double value; - - __asm ("flogn%.x %1,%0" - : "=f" (value) - : "f" (x)); - return value; - } - - __inline static const double log1p (double x) - { - double value; - - __asm ("flognp1%.x %1,%0" - : "=f" (value) - : "f" (x)); - return value; - } - - __inline static const double log10 (double x) - { - double value; - - __asm ("flog10%.x %1,%0" - : "=f" (value) - : "f" (x)); - return value; - } - - __inline static const double sqrt (double x) - { - double value; - - __asm ("fsqrt%.x %1,%0" - : "=f" (value) - : "f" (x)); - return value; - } - - __inline static const double pow (const double x, const double y) - { - if (x > 0) - return exp (y * log (x)); - else if (x == 0) - { - if (y > 0) - return 0.0; - else - { - double value; - - errno = EDOM; - __asm ("fmove%.d %#0x7fffffffffffffff,%0" /* quiet NaN */ - : "=f" (value) - : /* no inputs */); - return value; - } - } - else - { - double temp; - - __asm ("fintrz%.x %1,%0" - : "=f" (temp) /* integer-valued float */ - : "f" (y)); - if (y == temp) - { - int i = (int) y; - - if ((i & 1) == 0) /* even */ - return exp (y * log (x)); - else - return - exp (y * log (x)); - } - else - { - double value; - - errno = EDOM; - __asm ("fmove%.d %#0x7fffffffffffffff,%0" /* quiet NaN */ - : "=f" (value) - : /* no inputs */); - return value; - } - } - } - - __inline static const double fabs (double x) - { - double value; - - __asm ("fabs%.x %1,%0" - : "=f" (value) - : "f" (x)); - return value; - } - - __inline static const double ceil (double x) - { - int rounding_mode, round_up; - double value; - - __asm volatile ("fmove%.l %%fpcr,%0" - : "=dm" (rounding_mode) - : /* no inputs */ ); - round_up = rounding_mode | 0x30; - __asm volatile ("fmove%.l %0,%%fpcr" - : /* no outputs */ - : "dmi" (round_up)); - __asm volatile ("fint%.x %1,%0" - : "=f" (value) - : "f" (x)); - __asm volatile ("fmove%.l %0,%%fpcr" - : /* no outputs */ - : "dmi" (rounding_mode)); - return value; - } - - __inline static const double floor (double x) - { - int rounding_mode, round_down; - double value; - - __asm volatile ("fmove%.l %%fpcr,%0" - : "=dm" (rounding_mode) - : /* no inputs */ ); - round_down = (rounding_mode & ~0x10) - | 0x20; - __asm volatile ("fmove%.l %0,%%fpcr" - : /* no outputs */ - : "dmi" (round_down)); - __asm volatile ("fint%.x %1,%0" - : "=f" (value) - : "f" (x)); - __asm volatile ("fmove%.l %0,%%fpcr" - : /* no outputs */ - : "dmi" (rounding_mode)); - return value; - } - - __inline static const double rint (double x) - { - int rounding_mode, round_nearest; - double value; - - __asm volatile ("fmove%.l %%fpcr,%0" - : "=dm" (rounding_mode) - : /* no inputs */ ); - round_nearest = rounding_mode & ~0x30; - __asm volatile ("fmove%.l %0,%%fpcr" - : /* no outputs */ - : "dmi" (round_nearest)); - __asm volatile ("fint%.x %1,%0" - : "=f" (value) - : "f" (x)); - __asm volatile ("fmove%.l %0,%%fpcr" - : /* no outputs */ - : "dmi" (rounding_mode)); - return value; - } - - __inline static const double fmod (double x, double y) - { - double value; - - __asm ("fmod%.x %2,%0" - : "=f" (value) - : "0" (x), - "f" (y)); - return value; - } - - __inline static const double drem (double x, double y) - { - double value; - - __asm ("frem%.x %2,%0" - : "=f" (value) - : "0" (x), - "f" (y)); - return value; - } - - __inline static const double scalb (double x, int n) - { - double value; - - __asm ("fscale%.l %2,%0" - : "=f" (value) - : "0" (x), - "dmi" (n)); - return value; - } - - __inline static double logb (double x) - { - double exponent; - - __asm ("fgetexp%.x %1,%0" - : "=f" (exponent) - : "f" (x)); - return exponent; - } - - __inline static const double ldexp (double x, int n) - { - double value; - - __asm ("fscale%.l %2,%0" - : "=f" (value) - : "0" (x), - "dmi" (n)); - return value; - } - - __inline static double frexp (double x, int *exp) - { - double float_exponent; - int int_exponent; - double mantissa; - - __asm ("fgetexp%.x %1,%0" - : "=f" (float_exponent) /* integer-valued float */ - : "f" (x)); - int_exponent = (int) float_exponent; - __asm ("fgetman%.x %1,%0" - : "=f" (mantissa) /* 1.0 <= mantissa < 2.0 */ - : "f" (x)); - if (mantissa != 0) - { - __asm ("fscale%.b %#-1,%0" - : "=f" (mantissa) /* mantissa /= 2.0 */ - : "0" (mantissa)); - int_exponent += 1; - } - *exp = int_exponent; - return mantissa; - } - - __inline static double modf (double x, double *ip) - { - double temp; - - __asm ("fintrz%.x %1,%0" - : "=f" (temp) /* integer-valued float */ - : "f" (x)); - *ip = temp; - return x - temp; - } - --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/ginclude/math-68881.h gcc-3.1/gcc/ginclude/math-68881.h *** gcc-3.0.4/gcc/ginclude/math-68881.h Wed Dec 16 21:19:20 1998 --- gcc-3.1/gcc/ginclude/math-68881.h Thu Jan 1 00:00:00 1970 *************** *** 1,529 **** - /******************************************************************\ - * * - * last modified: 23 May 1992. * - * * - * Copyright (C) 1989 by Matthew Self. * - * You may freely distribute verbatim copies of this software * - * provided that this copyright notice is retained in all copies. * - * You may distribute modifications to this software under the * - * conditions above if you also clearly note such modifications * - * with their author and date. * - * * - * Note: errno is not set to EDOM when domain errors occur for * - * most of these functions. Rather, it is assumed that the * - * 68881's OPERR exception will be enabled and handled * - * appropriately by the operating system. Similarly, overflow * - * and underflow do not set errno to ERANGE. * - * * - * Send bugs to Matthew Self (self@bayes.arc.nasa.gov). * - * * - \******************************************************************/ - - /* This file is NOT a part of GCC, just distributed with it. */ - - /* If you find this in GCC, - please send bug reports to bug-gcc@prep.ai.mit.edu. */ - - /* Changed by Richard Stallman: - May 1993, add conditional to prevent multiple inclusion. - % inserted before a #. - New function `hypot' added. - Nans written in hex to avoid 0rnan. - May 1992, use %! for fpcr register. Break lines before function names. - December 1989, add parens around `&' in pow. - November 1990, added alternate definition of HUGE_VAL for Sun. */ - - /* Changed by Jim Wilson: - September 1993, Use #undef before HUGE_VAL instead of #ifdef/#endif. */ - - /* Changed by Ian Lance Taylor: - September 1994, use extern inline instead of static inline. */ - - #ifndef __math_68881 - #define __math_68881 - - #include - - #undef HUGE_VAL - #ifdef __sun__ - /* The Sun assembler fails to handle the hex constant in the usual defn. */ - #define HUGE_VAL \ - ({ \ - static union { int i[2]; double d; } u = { {0x7ff00000, 0} }; \ - u.d; \ - }) - #else - #define HUGE_VAL \ - ({ \ - double huge_val; \ - \ - __asm ("fmove%.d %#0x7ff0000000000000,%0" /* Infinity */ \ - : "=f" (huge_val) \ - : /* no inputs */); \ - huge_val; \ - }) - #endif - - __inline extern double - sin (double x) - { - double value; - - __asm ("fsin%.x %1,%0" - : "=f" (value) - : "f" (x)); - return value; - } - - __inline extern double - cos (double x) - { - double value; - - __asm ("fcos%.x %1,%0" - : "=f" (value) - : "f" (x)); - return value; - } - - __inline extern double - tan (double x) - { - double value; - - __asm ("ftan%.x %1,%0" - : "=f" (value) - : "f" (x)); - return value; - } - - __inline extern double - asin (double x) - { - double value; - - __asm ("fasin%.x %1,%0" - : "=f" (value) - : "f" (x)); - return value; - } - - __inline extern double - acos (double x) - { - double value; - - __asm ("facos%.x %1,%0" - : "=f" (value) - : "f" (x)); - return value; - } - - __inline extern double - atan (double x) - { - double value; - - __asm ("fatan%.x %1,%0" - : "=f" (value) - : "f" (x)); - return value; - } - - __inline extern double - atan2 (double y, double x) - { - double pi, pi_over_2; - - __asm ("fmovecr%.x %#0,%0" /* extended precision pi */ - : "=f" (pi) - : /* no inputs */ ); - __asm ("fscale%.b %#-1,%0" /* no loss of accuracy */ - : "=f" (pi_over_2) - : "0" (pi)); - if (x > 0) - { - if (y > 0) - { - if (x > y) - return atan (y / x); - else - return pi_over_2 - atan (x / y); - } - else - { - if (x > -y) - return atan (y / x); - else - return - pi_over_2 - atan (x / y); - } - } - else - { - if (y < 0) - { - if (-x > -y) - return - pi + atan (y / x); - else - return - pi_over_2 - atan (x / y); - } - else - { - if (-x > y) - return pi + atan (y / x); - else if (y > 0) - return pi_over_2 - atan (x / y); - else - { - double value; - - errno = EDOM; - __asm ("fmove%.d %#0x7fffffffffffffff,%0" /* quiet NaN */ - : "=f" (value) - : /* no inputs */); - return value; - } - } - } - } - - __inline extern double - sinh (double x) - { - double value; - - __asm ("fsinh%.x %1,%0" - : "=f" (value) - : "f" (x)); - return value; - } - - __inline extern double - cosh (double x) - { - double value; - - __asm ("fcosh%.x %1,%0" - : "=f" (value) - : "f" (x)); - return value; - } - - __inline extern double - tanh (double x) - { - double value; - - __asm ("ftanh%.x %1,%0" - : "=f" (value) - : "f" (x)); - return value; - } - - __inline extern double - atanh (double x) - { - double value; - - __asm ("fatanh%.x %1,%0" - : "=f" (value) - : "f" (x)); - return value; - } - - __inline extern double - exp (double x) - { - double value; - - __asm ("fetox%.x %1,%0" - : "=f" (value) - : "f" (x)); - return value; - } - - __inline extern double - expm1 (double x) - { - double value; - - __asm ("fetoxm1%.x %1,%0" - : "=f" (value) - : "f" (x)); - return value; - } - - __inline extern double - log (double x) - { - double value; - - __asm ("flogn%.x %1,%0" - : "=f" (value) - : "f" (x)); - return value; - } - - __inline extern double - log1p (double x) - { - double value; - - __asm ("flognp1%.x %1,%0" - : "=f" (value) - : "f" (x)); - return value; - } - - __inline extern double - log10 (double x) - { - double value; - - __asm ("flog10%.x %1,%0" - : "=f" (value) - : "f" (x)); - return value; - } - - __inline extern double - sqrt (double x) - { - double value; - - __asm ("fsqrt%.x %1,%0" - : "=f" (value) - : "f" (x)); - return value; - } - - __inline extern double - hypot (double x, double y) - { - return sqrt (x*x + y*y); - } - - __inline extern double - pow (double x, double y) - { - if (x > 0) - return exp (y * log (x)); - else if (x == 0) - { - if (y > 0) - return 0.0; - else - { - double value; - - errno = EDOM; - __asm ("fmove%.d %#0x7fffffffffffffff,%0" /* quiet NaN */ - : "=f" (value) - : /* no inputs */); - return value; - } - } - else - { - double temp; - - __asm ("fintrz%.x %1,%0" - : "=f" (temp) /* integer-valued float */ - : "f" (y)); - if (y == temp) - { - int i = (int) y; - - if ((i & 1) == 0) /* even */ - return exp (y * log (-x)); - else - return - exp (y * log (-x)); - } - else - { - double value; - - errno = EDOM; - __asm ("fmove%.d %#0x7fffffffffffffff,%0" /* quiet NaN */ - : "=f" (value) - : /* no inputs */); - return value; - } - } - } - - __inline extern double - fabs (double x) - { - double value; - - __asm ("fabs%.x %1,%0" - : "=f" (value) - : "f" (x)); - return value; - } - - __inline extern double - ceil (double x) - { - int rounding_mode, round_up; - double value; - - __asm volatile ("fmove%.l %!,%0" - : "=dm" (rounding_mode) - : /* no inputs */ ); - round_up = rounding_mode | 0x30; - __asm volatile ("fmove%.l %0,%!" - : /* no outputs */ - : "dmi" (round_up)); - __asm volatile ("fint%.x %1,%0" - : "=f" (value) - : "f" (x)); - __asm volatile ("fmove%.l %0,%!" - : /* no outputs */ - : "dmi" (rounding_mode)); - return value; - } - - __inline extern double - floor (double x) - { - int rounding_mode, round_down; - double value; - - __asm volatile ("fmove%.l %!,%0" - : "=dm" (rounding_mode) - : /* no inputs */ ); - round_down = (rounding_mode & ~0x10) - | 0x20; - __asm volatile ("fmove%.l %0,%!" - : /* no outputs */ - : "dmi" (round_down)); - __asm volatile ("fint%.x %1,%0" - : "=f" (value) - : "f" (x)); - __asm volatile ("fmove%.l %0,%!" - : /* no outputs */ - : "dmi" (rounding_mode)); - return value; - } - - __inline extern double - rint (double x) - { - int rounding_mode, round_nearest; - double value; - - __asm volatile ("fmove%.l %!,%0" - : "=dm" (rounding_mode) - : /* no inputs */ ); - round_nearest = rounding_mode & ~0x30; - __asm volatile ("fmove%.l %0,%!" - : /* no outputs */ - : "dmi" (round_nearest)); - __asm volatile ("fint%.x %1,%0" - : "=f" (value) - : "f" (x)); - __asm volatile ("fmove%.l %0,%!" - : /* no outputs */ - : "dmi" (rounding_mode)); - return value; - } - - __inline extern double - fmod (double x, double y) - { - double value; - - __asm ("fmod%.x %2,%0" - : "=f" (value) - : "0" (x), - "f" (y)); - return value; - } - - __inline extern double - drem (double x, double y) - { - double value; - - __asm ("frem%.x %2,%0" - : "=f" (value) - : "0" (x), - "f" (y)); - return value; - } - - __inline extern double - scalb (double x, int n) - { - double value; - - __asm ("fscale%.l %2,%0" - : "=f" (value) - : "0" (x), - "dmi" (n)); - return value; - } - - __inline extern double - logb (double x) - { - double exponent; - - __asm ("fgetexp%.x %1,%0" - : "=f" (exponent) - : "f" (x)); - return exponent; - } - - __inline extern double - ldexp (double x, int n) - { - double value; - - __asm ("fscale%.l %2,%0" - : "=f" (value) - : "0" (x), - "dmi" (n)); - return value; - } - - __inline extern double - frexp (double x, int *exp) - { - double float_exponent; - int int_exponent; - double mantissa; - - __asm ("fgetexp%.x %1,%0" - : "=f" (float_exponent) /* integer-valued float */ - : "f" (x)); - int_exponent = (int) float_exponent; - __asm ("fgetman%.x %1,%0" - : "=f" (mantissa) /* 1.0 <= mantissa < 2.0 */ - : "f" (x)); - if (mantissa != 0) - { - __asm ("fscale%.b %#-1,%0" - : "=f" (mantissa) /* mantissa /= 2.0 */ - : "0" (mantissa)); - int_exponent += 1; - } - *exp = int_exponent; - return mantissa; - } - - __inline extern double - modf (double x, double *ip) - { - double temp; - - __asm ("fintrz%.x %1,%0" - : "=f" (temp) /* integer-valued float */ - : "f" (x)); - *ip = temp; - return x - temp; - } - - #endif /* not __math_68881 */ --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/ginclude/ppc-asm.h gcc-3.1/gcc/ginclude/ppc-asm.h *** gcc-3.0.4/gcc/ginclude/ppc-asm.h Sat Dec 1 13:29:22 2001 --- gcc-3.1/gcc/ginclude/ppc-asm.h Thu Jan 1 00:00:00 1970 *************** *** 1,178 **** - /* PowerPC asm definitions for GNU C. */ - /* Under winnt, 1) gas supports the following as names and 2) in particular - defining "toc" breaks the FUNC_START macro as ".toc" becomes ".2" */ - - #if !defined(__WINNT__) - #define r0 0 - #define sp 1 - #define toc 2 - #define r3 3 - #define r4 4 - #define r5 5 - #define r6 6 - #define r7 7 - #define r8 8 - #define r9 9 - #define r10 10 - #define r11 11 - #define r12 12 - #define r13 13 - #define r14 14 - #define r15 15 - #define r16 16 - #define r17 17 - #define r18 18 - #define r19 19 - #define r20 20 - #define r21 21 - #define r22 22 - #define r23 23 - #define r24 24 - #define r25 25 - #define r26 26 - #define r27 27 - #define r28 28 - #define r29 29 - #define r30 30 - #define r31 31 - - #define cr0 0 - #define cr1 1 - #define cr2 2 - #define cr3 3 - #define cr4 4 - #define cr5 5 - #define cr6 6 - #define cr7 7 - - #define f0 0 - #define f1 1 - #define f2 2 - #define f3 3 - #define f4 4 - #define f5 5 - #define f6 6 - #define f7 7 - #define f8 8 - #define f9 9 - #define f10 10 - #define f11 11 - #define f12 12 - #define f13 13 - #define f14 14 - #define f15 15 - #define f16 16 - #define f17 17 - #define f18 18 - #define f19 19 - #define f20 20 - #define f21 21 - #define f22 22 - #define f23 23 - #define f24 24 - #define f25 25 - #define f26 26 - #define f27 27 - #define f28 28 - #define f29 29 - #define f30 30 - #define f31 31 - #endif - - /* - * Macros to glue together two tokens. - */ - - #ifdef __STDC__ - #define XGLUE(a,b) a##b - #else - #define XGLUE(a,b) a/**/b - #endif - - #define GLUE(a,b) XGLUE(a,b) - - /* - * Macros to begin and end a function written in assembler. If -mcall-aixdesc - * or -mcall-nt, create a function descriptor with the given name, and create - * the real function with one or two leading periods respectively. - */ - - #ifdef _RELOCATABLE - #define DESC_SECTION ".got2" - #else - #define DESC_SECTION ".got1" - #endif - - #if defined(_CALL_AIXDESC) - #define FUNC_NAME(name) GLUE(.,name) - #define JUMP_TARGET(name) FUNC_NAME(name) - #define FUNC_START(name) \ - .section DESC_SECTION,"aw"; \ - name: \ - .long GLUE(.,name); \ - .long _GLOBAL_OFFSET_TABLE_; \ - .long 0; \ - .previous; \ - .type GLUE(.,name),@function; \ - .globl name; \ - .globl GLUE(.,name); \ - GLUE(.,name): - - #define FUNC_END(name) \ - GLUE(.L,name): \ - .size GLUE(.,name),GLUE(.L,name)-GLUE(.,name) - - #elif defined(__WINNT__) - #define FUNC_NAME(name) GLUE(..,name) - #define JUMP_TARGET(name) FUNC_NAME(name) - #define FUNC_START(name) \ - .pdata; \ - .align 2; \ - .ualong GLUE(..,name),GLUE(name,.e),0,0,GLUE(..,name); \ - .reldata; \ - name: \ - .ualong GLUE(..,name),.toc; \ - .section .text; \ - .globl name; \ - .globl GLUE(..,name); \ - GLUE(..,name): - - #define FUNC_END(name) \ - GLUE(name,.e): ; \ - GLUE(FE_MOT_RESVD..,name): - - #elif defined(_CALL_NT) - #define FUNC_NAME(name) GLUE(..,name) - #define JUMP_TARGET(name) FUNC_NAME(name) - #define FUNC_START(name) \ - .section DESC_SECTION,"aw"; \ - name: \ - .long GLUE(..,name); \ - .long _GLOBAL_OFFSET_TABLE_; \ - .previous; \ - .type GLUE(..,name),@function; \ - .globl name; \ - .globl GLUE(..,name); \ - GLUE(..,name): - - #define FUNC_END(name) \ - GLUE(.L,name): \ - .size GLUE(..,name),GLUE(.L,name)-GLUE(..,name) - - #else - #define FUNC_NAME(name) GLUE(__USER_LABEL_PREFIX__,name) - #if defined __PIC__ || defined __pic__ - #define JUMP_TARGET(name) FUNC_NAME(name@plt) - #else - #define JUMP_TARGET(name) FUNC_NAME(name) - #endif - #define FUNC_START(name) \ - .type FUNC_NAME(name),@function; \ - .globl FUNC_NAME(name); \ - FUNC_NAME(name): - - #define FUNC_END(name) \ - GLUE(.L,name): \ - .size FUNC_NAME(name),GLUE(.L,name)-FUNC_NAME(name) - #endif - --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/ginclude/proto.h gcc-3.1/gcc/ginclude/proto.h *** gcc-3.0.4/gcc/ginclude/proto.h Wed Dec 16 21:19:22 1998 --- gcc-3.1/gcc/ginclude/proto.h Thu Jan 1 00:00:00 1970 *************** *** 1,4 **** - /* This header file is to avoid trouble with semi-ANSI header files - on the Convex in system version 8.0. */ - - #define _PROTO(list) () --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/ginclude/stddef.h gcc-3.1/gcc/ginclude/stddef.h *** gcc-3.0.4/gcc/ginclude/stddef.h Fri Aug 4 16:00:48 2000 --- gcc-3.1/gcc/ginclude/stddef.h Wed Jan 9 04:56:25 2002 *************** _TYPE_wchar_t; *** 115,121 **** #endif /* In case nobody has defined these types, but we aren't running under ! GCC 2.00, make sure that __PTRDIFF_TYPE__, __SIZE__TYPE__, and __WCHAR_TYPE__ have reasonable values. This can happen if the parts of GCC is compiled by an older compiler, that actually include gstddef.h, such as collect2. */ --- 115,121 ---- #endif /* In case nobody has defined these types, but we aren't running under ! GCC 2.00, make sure that __PTRDIFF_TYPE__, __SIZE_TYPE__, and __WCHAR_TYPE__ have reasonable values. This can happen if the parts of GCC is compiled by an older compiler, that actually include gstddef.h, such as collect2. */ *************** typedef __PTRDIFF_TYPE__ ptrdiff_t; *** 165,170 **** --- 165,171 ---- or if we want this type in particular. */ #if defined (_STDDEF_H) || defined (__need_size_t) #ifndef __size_t__ /* BeOS */ + #ifndef __SIZE_T__ /* Cray Unicos/Mk */ #ifndef _SIZE_T /* in case has defined it. */ #ifndef _SYS_SIZE_T_H #ifndef _T_SIZE_ *************** typedef __PTRDIFF_TYPE__ ptrdiff_t; *** 179,184 **** --- 180,186 ---- #ifndef _SIZET_ #ifndef __size_t #define __size_t__ /* BeOS */ + #define __SIZE_T__ /* Cray Unicos/Mk */ #define _SIZE_T #define _SYS_SIZE_T_H #define _T_SIZE_ *************** typedef long ssize_t; *** 214,219 **** --- 216,222 ---- #endif /* _T_SIZE_ */ #endif /* _SYS_SIZE_T_H */ #endif /* _SIZE_T */ + #endif /* __SIZE_T__ */ #endif /* __size_t__ */ #undef __need_size_t #endif /* _STDDEF_H or __need_size_t. */ *************** typedef long ssize_t; *** 228,239 **** --- 231,244 ---- or if we want this type in particular. */ #if defined (_STDDEF_H) || defined (__need_wchar_t) #ifndef __wchar_t__ /* BeOS */ + #ifndef __WCHAR_T__ /* Cray Unicos/Mk */ #ifndef _WCHAR_T #ifndef _T_WCHAR_ #ifndef _T_WCHAR #ifndef __WCHAR_T #ifndef _WCHAR_T_ #ifndef _BSD_WCHAR_T_ + #ifndef _BSD_WCHAR_T_DEFINED_ /* Darwin */ #ifndef _WCHAR_T_DEFINED_ #ifndef _WCHAR_T_DEFINED #ifndef _WCHAR_T_H *************** typedef long ssize_t; *** 241,246 **** --- 246,252 ---- #ifndef __INT_WCHAR_T_H #ifndef _GCC_WCHAR_T #define __wchar_t__ /* BeOS */ + #define __WCHAR_T__ /* Cray Unicos/Mk */ #define _WCHAR_T #define _T_WCHAR_ #define _T_WCHAR *************** typedef long ssize_t; *** 269,274 **** --- 275,281 ---- #ifdef _BSD_RUNE_T_ #if !defined (_ANSI_SOURCE) && !defined (_POSIX_SOURCE) typedef _BSD_RUNE_T_ rune_t; + #define _BSD_WCHAR_T_DEFINED_ #if defined (__FreeBSD__) /* Why is this file so hard to maintain properly? In constrast to the comment above regarding BSD/386 1.1, on FreeBSD for as long *************** typedef __WCHAR_TYPE__ wchar_t; *** 298,303 **** --- 305,312 ---- #endif #endif #endif + #endif + #endif /* __WCHAR_T__ */ #endif /* __wchar_t__ */ #undef __need_wchar_t #endif /* _STDDEF_H or __need_wchar_t. */ diff -Nrc3pad gcc-3.0.4/gcc/glimits.h gcc-3.1/gcc/glimits.h *** gcc-3.0.4/gcc/glimits.h Fri Aug 10 22:14:30 2001 --- gcc-3.1/gcc/glimits.h Tue Aug 14 00:53:23 2001 *************** *** 33,48 **** #define CHAR_MAX 127 #endif /* Minimum and maximum values a `signed short int' can hold. */ #undef SHRT_MIN ! /* For the sake of 16 bit hosts, we may not use -32768 */ ! #define SHRT_MIN (-32767-1) #undef SHRT_MAX ! #define SHRT_MAX 32767 ! ! /* Maximum value an `unsigned short int' can hold. (Minimum is 0). */ ! #undef USHRT_MAX ! #define USHRT_MAX 65535 /* Minimum and maximum values a `signed int' can hold. */ #ifndef __INT_MAX__ --- 33,47 ---- #define CHAR_MAX 127 #endif + #ifndef __SHRT_MAX__ + #define __SHRT_MAX__ 32767 + #endif + /* Minimum and maximum values a `signed short int' can hold. */ #undef SHRT_MIN ! #define SHRT_MIN (-SHRT_MAX-1) #undef SHRT_MAX ! #define SHRT_MAX __SHRT_MAX__ /* Minimum and maximum values a `signed int' can hold. */ #ifndef __INT_MAX__ *************** *** 53,58 **** --- 52,65 ---- #undef INT_MAX #define INT_MAX __INT_MAX__ + /* Maximum value an `unsigned short int' can hold. (Minimum is 0). */ + #undef USHRT_MAX + #if __SHRT_MAX__ == __INT_MAX__ + #define USHRT_MAX (SHRT_MAX * 2U + 1U) + #else + #define USHRT_MAX (SHRT_MAX * 2 + 1) + #endif + /* Maximum value an `unsigned int' can hold. (Minimum is 0). */ #undef UINT_MAX #define UINT_MAX (INT_MAX * 2U + 1) *************** *** 60,66 **** /* Minimum and maximum values a `signed long int' can hold. (Same as `int'). */ #ifndef __LONG_MAX__ ! #if defined (__alpha__) || (defined (__sparc__) && defined(__arch64__)) || defined (__sparcv9) || defined (__s390x__) #define __LONG_MAX__ 9223372036854775807L #else #define __LONG_MAX__ 2147483647L --- 67,73 ---- /* Minimum and maximum values a `signed long int' can hold. (Same as `int'). */ #ifndef __LONG_MAX__ ! #if defined (__alpha__) || (defined (__sparc__) && defined(__arch64__)) || defined (__sparcv9) #define __LONG_MAX__ 9223372036854775807L #else #define __LONG_MAX__ 2147483647L diff -Nrc3pad gcc-3.0.4/gcc/global.c gcc-3.1/gcc/global.c *** gcc-3.0.4/gcc/global.c Tue Dec 5 19:12:19 2000 --- gcc-3.1/gcc/global.c Sat Jan 12 01:43:51 2002 *************** *** 1,23 **** /* Allocate registers for pseudo-registers that span basic blocks. Copyright (C) 1987, 1988, 1991, 1994, 1996, 1997, 1998, ! 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" --- 1,23 ---- /* Allocate registers for pseudo-registers that span basic blocks. Copyright (C) 1987, 1988, 1991, 1994, 1996, 1997, 1998, ! 1999, 2000, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" *************** Boston, MA 02111-1307, USA. */ *** 75,81 **** 5. Allocate the variables in that order; each if possible into a preferred register, else into another register. */ ! /* Number of pseudo-registers which are candidates for allocation. */ static int max_allocno; --- 75,81 ---- 5. Allocate the variables in that order; each if possible into a preferred register, else into another register. */ ! /* Number of pseudo-registers which are candidates for allocation. */ static int max_allocno; *************** struct allocno *** 94,102 **** /* Number of calls crossed by each allocno. */ int calls_crossed; ! /* Number of refs (weighted) to each allocno. */ int n_refs; /* Guess at live length of each allocno. This is actually the max of the live lengths of the regs. */ int live_length; --- 94,105 ---- /* Number of calls crossed by each allocno. */ int calls_crossed; ! /* Number of refs to each allocno. */ int n_refs; + /* Frequency of uses of each allocno. */ + int freq; + /* Guess at live length of each allocno. This is actually the max of the live lengths of the regs. */ int live_length; *************** static int allocno_row_words; *** 165,176 **** /* Two macros to test or store 1 in an element of `conflicts'. */ #define CONFLICTP(I, J) \ ! (conflicts[(I) * allocno_row_words + (unsigned)(J) / INT_BITS] \ ! & ((INT_TYPE) 1 << ((unsigned)(J) % INT_BITS))) #define SET_CONFLICT(I, J) \ ! (conflicts[(I) * allocno_row_words + (unsigned)(J) / INT_BITS] \ ! |= ((INT_TYPE) 1 << ((unsigned)(J) % INT_BITS))) /* For any allocno set in ALLOCNO_SET, set ALLOCNO to that allocno, and execute CODE. */ --- 168,179 ---- /* Two macros to test or store 1 in an element of `conflicts'. */ #define CONFLICTP(I, J) \ ! (conflicts[(I) * allocno_row_words + (unsigned) (J) / INT_BITS] \ ! & ((INT_TYPE) 1 << ((unsigned) (J) % INT_BITS))) #define SET_CONFLICT(I, J) \ ! (conflicts[(I) * allocno_row_words + (unsigned) (J) / INT_BITS] \ ! |= ((INT_TYPE) 1 << ((unsigned) (J) % INT_BITS))) /* For any allocno set in ALLOCNO_SET, set ALLOCNO to that allocno, and execute CODE. */ *************** static HARD_REG_SET no_global_alloc_regs *** 215,225 **** static HARD_REG_SET regs_used_so_far; ! /* Number of refs (weighted) to each hard reg, as used by local alloc. It is zero for a reg that contains global pseudos or is explicitly used. */ static int local_reg_n_refs[FIRST_PSEUDO_REGISTER]; /* Guess at live length of each hard reg, as used by local alloc. This is actually the sum of the live lengths of the specific regs. */ --- 218,231 ---- static HARD_REG_SET regs_used_so_far; ! /* Number of refs to each hard reg, as used by local alloc. It is zero for a reg that contains global pseudos or is explicitly used. */ static int local_reg_n_refs[FIRST_PSEUDO_REGISTER]; + /* Frequency of uses of given hard reg. */ + static int local_reg_freq[FIRST_PSEUDO_REGISTER]; + /* Guess at live length of each hard reg, as used by local alloc. This is actually the sum of the live lengths of the specific regs. */ *************** static INT_TYPE *allocnos_live; *** 242,257 **** a bit vector indexed by allocno. */ #define ALLOCNO_LIVE_P(I) \ ! (allocnos_live[(unsigned)(I) / INT_BITS] \ ! & ((INT_TYPE) 1 << ((unsigned)(I) % INT_BITS))) #define SET_ALLOCNO_LIVE(I) \ ! (allocnos_live[(unsigned)(I) / INT_BITS] \ ! |= ((INT_TYPE) 1 << ((unsigned)(I) % INT_BITS))) #define CLEAR_ALLOCNO_LIVE(I) \ ! (allocnos_live[(unsigned)(I) / INT_BITS] \ ! &= ~((INT_TYPE) 1 << ((unsigned)(I) % INT_BITS))) /* This is turned off because it doesn't work right for DImode. (And it is only used for DImode, so the other cases are worthless.) --- 248,263 ---- a bit vector indexed by allocno. */ #define ALLOCNO_LIVE_P(I) \ ! (allocnos_live[(unsigned) (I) / INT_BITS] \ ! & ((INT_TYPE) 1 << ((unsigned) (I) % INT_BITS))) #define SET_ALLOCNO_LIVE(I) \ ! (allocnos_live[(unsigned) (I) / INT_BITS] \ ! |= ((INT_TYPE) 1 << ((unsigned) (I) % INT_BITS))) #define CLEAR_ALLOCNO_LIVE(I) \ ! (allocnos_live[(unsigned) (I) / INT_BITS] \ ! &= ~((INT_TYPE) 1 << ((unsigned) (I) % INT_BITS))) /* This is turned off because it doesn't work right for DImode. (And it is only used for DImode, so the other cases are worthless.) *************** global_alloc (file) *** 320,326 **** { int retval; #ifdef ELIMINABLE_REGS ! static struct {int from, to; } eliminables[] = ELIMINABLE_REGS; #endif int need_fp = (! flag_omit_frame_pointer --- 326,332 ---- { int retval; #ifdef ELIMINABLE_REGS ! static const struct {const int from, to; } eliminables[] = ELIMINABLE_REGS; #endif int need_fp = (! flag_omit_frame_pointer *************** global_alloc (file) *** 329,335 **** #endif || FRAME_POINTER_REQUIRED); ! register size_t i; rtx x; max_allocno = 0; --- 335,341 ---- #endif || FRAME_POINTER_REQUIRED); ! size_t i; rtx x; max_allocno = 0; *************** global_alloc (file) *** 447,452 **** --- 453,459 ---- allocno[num].size = PSEUDO_REGNO_SIZE (i); allocno[num].calls_crossed += REG_N_CALLS_CROSSED (i); allocno[num].n_refs += REG_N_REFS (i); + allocno[num].freq += REG_FREQ (i); if (allocno[num].live_length < REG_LIVE_LENGTH (i)) allocno[num].live_length = REG_LIVE_LENGTH (i); } *************** global_alloc (file) *** 456,461 **** --- 463,469 ---- override it. */ memset ((char *) local_reg_live_length, 0, sizeof local_reg_live_length); memset ((char *) local_reg_n_refs, 0, sizeof local_reg_n_refs); + memset ((char *) local_reg_freq, 0, sizeof local_reg_freq); for (i = FIRST_PSEUDO_REGISTER; i < (size_t) max_regno; i++) if (reg_renumber[i] >= 0) { *************** global_alloc (file) *** 466,471 **** --- 474,480 ---- for (j = regno; j < endregno; j++) { local_reg_n_refs[j] += REG_N_REFS (i); + local_reg_freq[j] += REG_FREQ (i); local_reg_live_length[j] += REG_LIVE_LENGTH (i); } } *************** global_alloc (file) *** 473,479 **** /* We can't override local-alloc for a reg used not just by local-alloc. */ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) if (regs_ever_live[i]) ! local_reg_n_refs[i] = 0; allocno_row_words = (max_allocno + INT_BITS - 1) / INT_BITS; --- 482,488 ---- /* We can't override local-alloc for a reg used not just by local-alloc. */ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) if (regs_ever_live[i]) ! local_reg_n_refs[i] = 0, local_reg_freq[i] = 0; allocno_row_words = (max_allocno + INT_BITS - 1) / INT_BITS; *************** allocno_compare (v1p, v2p) *** 602,617 **** int v1 = *(const int *)v1p, v2 = *(const int *)v2p; /* Note that the quotient will never be bigger than the value of floor_log2 times the maximum number of ! times a register can occur in one insn (surely less than 100). ! Multiplying this by 10000 can't overflow. */ ! register int pri1 ! = (((double) (floor_log2 (allocno[v1].n_refs) * allocno[v1].n_refs) / allocno[v1].live_length) ! * 10000 * allocno[v1].size); ! register int pri2 ! = (((double) (floor_log2 (allocno[v2].n_refs) * allocno[v2].n_refs) / allocno[v2].live_length) ! * 10000 * allocno[v2].size); if (pri2 - pri1) return pri2 - pri1; --- 611,627 ---- int v1 = *(const int *)v1p, v2 = *(const int *)v2p; /* Note that the quotient will never be bigger than the value of floor_log2 times the maximum number of ! times a register can occur in one insn (surely less than 100) ! weighted by the frequency (maximally REG_FREQ_MAX). ! Multiplying this by 10000/REG_FREQ_MAX can't overflow. */ ! int pri1 ! = (((double) (floor_log2 (allocno[v1].n_refs) * allocno[v1].freq) / allocno[v1].live_length) ! * (10000 / REG_FREQ_MAX) * allocno[v1].size); ! int pri2 ! = (((double) (floor_log2 (allocno[v2].n_refs) * allocno[v2].freq) / allocno[v2].live_length) ! * (10000 / REG_FREQ_MAX) * allocno[v2].size); if (pri2 - pri1) return pri2 - pri1; *************** allocno_compare (v1p, v2p) *** 626,633 **** static void global_conflicts () { ! register int b, i; ! register rtx insn; int *block_start_allocnos; /* Make a vector that mark_reg_{store,clobber} will store in. */ --- 636,643 ---- static void global_conflicts () { ! int b, i; ! rtx insn; int *block_start_allocnos; /* Make a vector that mark_reg_{store,clobber} will store in. */ *************** global_conflicts () *** 654,666 **** are explicitly marked in basic_block_live_at_start. */ { ! register regset old = BASIC_BLOCK (b)->global_live_at_start; int ax = 0; REG_SET_TO_HARD_REG_SET (hard_regs_live, old); EXECUTE_IF_SET_IN_REG_SET (old, FIRST_PSEUDO_REGISTER, i, { ! register int a = reg_allocno[i]; if (a >= 0) { SET_ALLOCNO_LIVE (a); --- 664,676 ---- are explicitly marked in basic_block_live_at_start. */ { ! regset old = BASIC_BLOCK (b)->global_live_at_start; int ax = 0; REG_SET_TO_HARD_REG_SET (hard_regs_live, old); EXECUTE_IF_SET_IN_REG_SET (old, FIRST_PSEUDO_REGISTER, i, { ! int a = reg_allocno[i]; if (a >= 0) { SET_ALLOCNO_LIVE (a); *************** global_conflicts () *** 721,728 **** while (1) { ! register RTX_CODE code = GET_CODE (insn); ! register rtx link; /* Make regs_set an empty set. */ --- 731,738 ---- while (1) { ! RTX_CODE code = GET_CODE (insn); ! rtx link; /* Make regs_set an empty set. */ *************** find_reg (num, losers, alt_regs_p, accep *** 974,980 **** int accept_call_clobbered; int retrying; { ! register int i, best_reg, pass; #ifdef HARD_REG_SET register /* Declare it register if it's a scalar. */ #endif --- 984,990 ---- int accept_call_clobbered; int retrying; { ! int i, best_reg, pass; #ifdef HARD_REG_SET register /* Declare it register if it's a scalar. */ #endif *************** find_reg (num, losers, alt_regs_p, accep *** 1038,1045 **** || accept_call_clobbered || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode))) { ! register int j; ! register int lim = regno + HARD_REGNO_NREGS (regno, mode); for (j = regno + 1; (j < lim && ! TEST_HARD_REG_BIT (used, j)); --- 1048,1055 ---- || accept_call_clobbered || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode))) { ! int j; ! int lim = regno + HARD_REGNO_NREGS (regno, mode); for (j = regno + 1; (j < lim && ! TEST_HARD_REG_BIT (used, j)); *************** find_reg (num, losers, alt_regs_p, accep *** 1076,1089 **** for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) if (TEST_HARD_REG_BIT (allocno[num].hard_reg_copy_preferences, i) && HARD_REGNO_MODE_OK (i, mode) && (REGNO_REG_CLASS (i) == REGNO_REG_CLASS (best_reg) || reg_class_subset_p (REGNO_REG_CLASS (i), REGNO_REG_CLASS (best_reg)) || reg_class_subset_p (REGNO_REG_CLASS (best_reg), REGNO_REG_CLASS (i)))) { ! register int j; ! register int lim = i + HARD_REGNO_NREGS (i, mode); for (j = i + 1; (j < lim && ! TEST_HARD_REG_BIT (used, j) --- 1086,1102 ---- for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) if (TEST_HARD_REG_BIT (allocno[num].hard_reg_copy_preferences, i) && HARD_REGNO_MODE_OK (i, mode) + && (allocno[num].calls_crossed == 0 + || accept_call_clobbered + || ! HARD_REGNO_CALL_PART_CLOBBERED (i, mode)) && (REGNO_REG_CLASS (i) == REGNO_REG_CLASS (best_reg) || reg_class_subset_p (REGNO_REG_CLASS (i), REGNO_REG_CLASS (best_reg)) || reg_class_subset_p (REGNO_REG_CLASS (best_reg), REGNO_REG_CLASS (i)))) { ! int j; ! int lim = i + HARD_REGNO_NREGS (i, mode); for (j = i + 1; (j < lim && ! TEST_HARD_REG_BIT (used, j) *************** find_reg (num, losers, alt_regs_p, accep *** 1112,1125 **** for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) if (TEST_HARD_REG_BIT (allocno[num].hard_reg_preferences, i) && HARD_REGNO_MODE_OK (i, mode) && (REGNO_REG_CLASS (i) == REGNO_REG_CLASS (best_reg) || reg_class_subset_p (REGNO_REG_CLASS (i), REGNO_REG_CLASS (best_reg)) || reg_class_subset_p (REGNO_REG_CLASS (best_reg), REGNO_REG_CLASS (i)))) { ! register int j; ! register int lim = i + HARD_REGNO_NREGS (i, mode); for (j = i + 1; (j < lim && ! TEST_HARD_REG_BIT (used, j) --- 1125,1141 ---- for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) if (TEST_HARD_REG_BIT (allocno[num].hard_reg_preferences, i) && HARD_REGNO_MODE_OK (i, mode) + && (allocno[num].calls_crossed == 0 + || accept_call_clobbered + || ! HARD_REGNO_CALL_PART_CLOBBERED (i, mode)) && (REGNO_REG_CLASS (i) == REGNO_REG_CLASS (best_reg) || reg_class_subset_p (REGNO_REG_CLASS (i), REGNO_REG_CLASS (best_reg)) || reg_class_subset_p (REGNO_REG_CLASS (best_reg), REGNO_REG_CLASS (i)))) { ! int j; ! int lim = i + HARD_REGNO_NREGS (i, mode); for (j = i + 1; (j < lim && ! TEST_HARD_REG_BIT (used, j) *************** find_reg (num, losers, alt_regs_p, accep *** 1192,1197 **** --- 1208,1216 ---- /* Don't use a reg no good for this pseudo. */ && ! TEST_HARD_REG_BIT (used2, regno) && HARD_REGNO_MODE_OK (regno, mode) + && (allocno[num].calls_crossed == 0 + || accept_call_clobbered + || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)) #ifdef CLASS_CANNOT_CHANGE_MODE && ! (REG_CHANGES_MODE (allocno[num].reg) && (TEST_HARD_REG_BIT *************** find_reg (num, losers, alt_regs_p, accep *** 1202,1212 **** { /* We explicitly evaluate the divide results into temporary variables so as to avoid excess precision problems that occur ! on a i386-unknown-sysv4.2 (unixware) host. */ ! double tmp1 = ((double) local_reg_n_refs[regno] / local_reg_live_length[regno]); ! double tmp2 = ((double) allocno[num].n_refs / allocno[num].live_length); if (tmp1 < tmp2) --- 1221,1231 ---- { /* We explicitly evaluate the divide results into temporary variables so as to avoid excess precision problems that occur ! on an i386-unknown-sysv4.2 (unixware) host. */ ! double tmp1 = ((double) local_reg_freq[regno] / local_reg_live_length[regno]); ! double tmp2 = ((double) allocno[num].freq / allocno[num].live_length); if (tmp1 < tmp2) *************** find_reg (num, losers, alt_regs_p, accep *** 1236,1242 **** if (best_reg >= 0) { ! register int lim, j; HARD_REG_SET this_reg; /* Yes. Record it as the hard register of this pseudo-reg. */ --- 1255,1261 ---- if (best_reg >= 0) { ! int lim, j; HARD_REG_SET this_reg; /* Yes. Record it as the hard register of this pseudo-reg. */ *************** find_reg (num, losers, alt_regs_p, accep *** 1256,1261 **** --- 1275,1281 ---- SET_HARD_REG_BIT (regs_used_so_far, j); /* This is no longer a reg used just by local regs. */ local_reg_n_refs[j] = 0; + local_reg_freq[j] = 0; } /* For each other pseudo-reg conflicting with this one, mark it as conflicting with the hard regs this one occupies. */ *************** retry_global_alloc (regno, forbidden_reg *** 1279,1295 **** int regno; HARD_REG_SET forbidden_regs; { ! int allocno = reg_allocno[regno]; ! if (allocno >= 0) { /* If we have more than one register class, first try allocating in the class that is cheapest for this pseudo-reg. If that fails, try any reg. */ if (N_REG_CLASSES > 1) ! find_reg (allocno, forbidden_regs, 0, 0, 1); if (reg_renumber[regno] < 0 && reg_alternate_class (regno) != NO_REGS) ! find_reg (allocno, forbidden_regs, 1, 0, 1); /* If we found a register, modify the RTL for the register to show the hard register, and mark that register live. */ --- 1299,1315 ---- int regno; HARD_REG_SET forbidden_regs; { ! int alloc_no = reg_allocno[regno]; ! if (alloc_no >= 0) { /* If we have more than one register class, first try allocating in the class that is cheapest for this pseudo-reg. If that fails, try any reg. */ if (N_REG_CLASSES > 1) ! find_reg (alloc_no, forbidden_regs, 0, 0, 1); if (reg_renumber[regno] < 0 && reg_alternate_class (regno) != NO_REGS) ! find_reg (alloc_no, forbidden_regs, 1, 0, 1); /* If we found a register, modify the RTL for the register to show the hard register, and mark that register live. */ *************** static void *** 1311,1317 **** record_one_conflict (regno) int regno; { ! register int j; if (regno < FIRST_PSEUDO_REGISTER) /* When a hard register becomes live, --- 1331,1337 ---- record_one_conflict (regno) int regno; { ! int j; if (regno < FIRST_PSEUDO_REGISTER) /* When a hard register becomes live, *************** record_one_conflict (regno) *** 1325,1332 **** record conflicts first with hard regs, then with other pseudo regs. */ { ! register int ialloc = reg_allocno[regno]; ! register int ialloc_prod = ialloc * allocno_row_words; IOR_HARD_REG_SET (allocno[ialloc].hard_reg_conflicts, hard_regs_live); for (j = allocno_row_words - 1; j >= 0; j--) { --- 1345,1353 ---- record conflicts first with hard regs, then with other pseudo regs. */ { ! int ialloc = reg_allocno[regno]; ! int ialloc_prod = ialloc * allocno_row_words; ! IOR_HARD_REG_SET (allocno[ialloc].hard_reg_conflicts, hard_regs_live); for (j = allocno_row_words - 1; j >= 0; j--) { *************** record_one_conflict (regno) *** 1352,1362 **** static void record_conflicts (allocno_vec, len) ! register int *allocno_vec; ! register int len; { ! register int num; ! register int ialloc_prod; while (--len >= 0) { --- 1373,1383 ---- static void record_conflicts (allocno_vec, len) ! int *allocno_vec; ! int len; { ! int num; ! int ialloc_prod; while (--len >= 0) { *************** record_conflicts (allocno_vec, len) *** 1370,1376 **** static void mirror_conflicts () { ! register int i, j; int rw = allocno_row_words; int rwb = rw * INT_BITS; INT_TYPE *p = conflicts; --- 1391,1397 ---- static void mirror_conflicts () { ! int i, j; int rw = allocno_row_words; int rwb = rw * INT_BITS; INT_TYPE *p = conflicts; *************** mark_reg_store (reg, setter, data) *** 1420,1438 **** rtx reg, setter; void *data ATTRIBUTE_UNUSED; { ! register int regno; ! ! /* WORD is which word of a multi-register group is being stored. ! For the case where the store is actually into a SUBREG of REG. ! Except we don't use it; I believe the entire REG needs to be ! made live. */ ! int word = 0; if (GET_CODE (reg) == SUBREG) ! { ! word = SUBREG_WORD (reg); ! reg = SUBREG_REG (reg); ! } if (GET_CODE (reg) != REG) return; --- 1441,1450 ---- rtx reg, setter; void *data ATTRIBUTE_UNUSED; { ! int regno; if (GET_CODE (reg) == SUBREG) ! reg = SUBREG_REG (reg); if (GET_CODE (reg) != REG) return; *************** mark_reg_store (reg, setter, data) *** 1456,1467 **** } if (reg_renumber[regno] >= 0) ! regno = reg_renumber[regno] /* + word */; /* Handle hardware regs (and pseudos allocated to hard regs). */ if (regno < FIRST_PSEUDO_REGISTER && ! fixed_regs[regno]) { ! register int last = regno + HARD_REGNO_NREGS (regno, GET_MODE (reg)); while (regno < last) { record_one_conflict (regno); --- 1468,1479 ---- } if (reg_renumber[regno] >= 0) ! regno = reg_renumber[regno]; /* Handle hardware regs (and pseudos allocated to hard regs). */ if (regno < FIRST_PSEUDO_REGISTER && ! fixed_regs[regno]) { ! int last = regno + HARD_REGNO_NREGS (regno, GET_MODE (reg)); while (regno < last) { record_one_conflict (regno); *************** static void *** 1489,1495 **** mark_reg_conflicts (reg) rtx reg; { ! register int regno; if (GET_CODE (reg) == SUBREG) reg = SUBREG_REG (reg); --- 1501,1507 ---- mark_reg_conflicts (reg) rtx reg; { ! int regno; if (GET_CODE (reg) == SUBREG) reg = SUBREG_REG (reg); *************** mark_reg_conflicts (reg) *** 1513,1519 **** /* Handle hardware regs (and pseudos allocated to hard regs). */ if (regno < FIRST_PSEUDO_REGISTER && ! fixed_regs[regno]) { ! register int last = regno + HARD_REGNO_NREGS (regno, GET_MODE (reg)); while (regno < last) { record_one_conflict (regno); --- 1525,1531 ---- /* Handle hardware regs (and pseudos allocated to hard regs). */ if (regno < FIRST_PSEUDO_REGISTER && ! fixed_regs[regno]) { ! int last = regno + HARD_REGNO_NREGS (regno, GET_MODE (reg)); while (regno < last) { record_one_conflict (regno); *************** static void *** 1529,1535 **** mark_reg_death (reg) rtx reg; { ! register int regno = REGNO (reg); /* Either this is one of the max_allocno pseudo regs not allocated, or it is a hardware reg. First handle the pseudo-regs. */ --- 1541,1547 ---- mark_reg_death (reg) rtx reg; { ! int regno = REGNO (reg); /* Either this is one of the max_allocno pseudo regs not allocated, or it is a hardware reg. First handle the pseudo-regs. */ *************** mark_reg_death (reg) *** 1548,1554 **** { /* Pseudo regs already assigned hardware regs are treated almost the same as explicit hardware regs. */ ! register int last = regno + HARD_REGNO_NREGS (regno, GET_MODE (reg)); while (regno < last) { CLEAR_HARD_REG_BIT (hard_regs_live, regno); --- 1560,1566 ---- { /* Pseudo regs already assigned hardware regs are treated almost the same as explicit hardware regs. */ ! int last = regno + HARD_REGNO_NREGS (regno, GET_MODE (reg)); while (regno < last) { CLEAR_HARD_REG_BIT (hard_regs_live, regno); *************** mark_reg_death (reg) *** 1564,1573 **** static void mark_reg_live_nc (regno, mode) ! register int regno; enum machine_mode mode; { ! register int last = regno + HARD_REGNO_NREGS (regno, mode); while (regno < last) { SET_HARD_REG_BIT (hard_regs_live, regno); --- 1576,1585 ---- static void mark_reg_live_nc (regno, mode) ! int regno; enum machine_mode mode; { ! int last = regno + HARD_REGNO_NREGS (regno, mode); while (regno < last) { SET_HARD_REG_BIT (hard_regs_live, regno); *************** set_preference (dest, src) *** 1606,1612 **** else if (GET_CODE (src) == SUBREG && GET_CODE (SUBREG_REG (src)) == REG) { src_regno = REGNO (SUBREG_REG (src)); ! offset += SUBREG_WORD (src); } else return; --- 1618,1632 ---- else if (GET_CODE (src) == SUBREG && GET_CODE (SUBREG_REG (src)) == REG) { src_regno = REGNO (SUBREG_REG (src)); ! ! if (REGNO (SUBREG_REG (src)) < FIRST_PSEUDO_REGISTER) ! offset += subreg_regno_offset (REGNO (SUBREG_REG (src)), ! GET_MODE (SUBREG_REG (src)), ! SUBREG_BYTE (src), ! GET_MODE (src)); ! else ! offset += (SUBREG_BYTE (src) ! / REGMODE_NATURAL_SIZE (GET_MODE (src))); } else return; *************** set_preference (dest, src) *** 1616,1622 **** else if (GET_CODE (dest) == SUBREG && GET_CODE (SUBREG_REG (dest)) == REG) { dest_regno = REGNO (SUBREG_REG (dest)); ! offset -= SUBREG_WORD (dest); } else return; --- 1636,1650 ---- else if (GET_CODE (dest) == SUBREG && GET_CODE (SUBREG_REG (dest)) == REG) { dest_regno = REGNO (SUBREG_REG (dest)); ! ! if (REGNO (SUBREG_REG (dest)) < FIRST_PSEUDO_REGISTER) ! offset -= subreg_regno_offset (REGNO (SUBREG_REG (dest)), ! GET_MODE (SUBREG_REG (dest)), ! SUBREG_BYTE (dest), ! GET_MODE (dest)); ! else ! offset -= (SUBREG_BYTE (dest) ! / REGMODE_NATURAL_SIZE (GET_MODE (dest))); } else return; *************** mark_elimination (from, to) *** 1684,1690 **** for (i = 0; i < n_basic_blocks; i++) { ! register regset r = BASIC_BLOCK (i)->global_live_at_start; if (REGNO_REG_SET_P (r, from)) { CLEAR_REGNO_REG_SET (r, from); --- 1712,1718 ---- for (i = 0; i < n_basic_blocks; i++) { ! regset r = BASIC_BLOCK (i)->global_live_at_start; if (REGNO_REG_SET_P (r, from)) { CLEAR_REGNO_REG_SET (r, from); *************** build_insn_chain (first) *** 1844,1854 **** no real insns are after the end of the last basic block. We may want to reorganize the loop somewhat since this test should ! always be the right exit test. */ if (b == n_basic_blocks) { for (first = NEXT_INSN (first) ; first; first = NEXT_INSN (first)) ! if (INSN_P (first) && GET_CODE (PATTERN (first)) != USE) abort (); break; } --- 1872,1888 ---- no real insns are after the end of the last basic block. We may want to reorganize the loop somewhat since this test should ! always be the right exit test. Allow an ADDR_VEC or ADDR_DIF_VEC if ! the previous real insn is a JUMP_INSN. */ if (b == n_basic_blocks) { for (first = NEXT_INSN (first) ; first; first = NEXT_INSN (first)) ! if (INSN_P (first) ! && GET_CODE (PATTERN (first)) != USE ! && ! ((GET_CODE (PATTERN (first)) == ADDR_VEC ! || GET_CODE (PATTERN (first)) == ADDR_DIFF_VEC) ! && prev_real_insn (first) != 0 ! && GET_CODE (prev_real_insn (first)) == JUMP_INSN)) abort (); break; } *************** static void *** 1864,1872 **** dump_conflicts (file) FILE *file; { ! register int i; ! register int has_preferences; ! register int nregs; nregs = 0; for (i = 0; i < max_allocno; i++) { --- 1898,1906 ---- dump_conflicts (file) FILE *file; { ! int i; ! int has_preferences; ! int nregs; nregs = 0; for (i = 0; i < max_allocno; i++) { *************** dump_conflicts (file) *** 1892,1898 **** for (i = 0; i < max_allocno; i++) { ! register int j; fprintf (file, ";; %d conflicts:", allocno[i].reg); for (j = 0; j < max_allocno; j++) if (CONFLICTP (j, i)) --- 1926,1932 ---- for (i = 0; i < max_allocno; i++) { ! int j; fprintf (file, ";; %d conflicts:", allocno[i].reg); for (j = 0; j < max_allocno; j++) if (CONFLICTP (j, i)) *************** void *** 1922,1928 **** dump_global_regs (file) FILE *file; { ! register int i, j; fprintf (file, ";; Register dispositions:\n"); for (i = FIRST_PSEUDO_REGISTER, j = 0; i < max_regno; i++) --- 1956,1962 ---- dump_global_regs (file) FILE *file; { ! int i, j; fprintf (file, ";; Register dispositions:\n"); for (i = FIRST_PSEUDO_REGISTER, j = 0; i < max_regno; i++) diff -Nrc3pad gcc-3.0.4/gcc/gmon.c gcc-3.1/gcc/gmon.c *** gcc-3.0.4/gcc/gmon.c Mon Nov 22 18:40:19 1999 --- gcc-3.1/gcc/gmon.c Thu Oct 11 03:15:44 2001 *************** monstartup(lowpc, highpc) *** 74,80 **** { int monsize; char *buffer; ! register int o; /* * round lowpc and highpc to multiples of the density we're using --- 74,80 ---- { int monsize; char *buffer; ! int o; /* * round lowpc and highpc to multiples of the density we're using diff -Nrc3pad gcc-3.0.4/gcc/graph.c gcc-3.1/gcc/graph.c *** gcc-3.0.4/gcc/graph.c Sun Feb 4 22:43:59 2001 --- gcc-3.1/gcc/graph.c Thu Oct 11 03:15:44 2001 *************** *** 2,23 **** Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Ulrich Drepper , 1998. ! 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 #include "system.h" --- 2,23 ---- Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Ulrich Drepper , 1998. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include #include "system.h" *************** Boston, MA 02111-1307, USA. */ *** 31,37 **** #include "toplev.h" #include "graph.h" ! static const char *graph_ext[] = { /* no_graph */ "", /* vcg */ ".vcg", --- 31,37 ---- #include "toplev.h" #include "graph.h" ! static const char *const graph_ext[] = { /* no_graph */ "", /* vcg */ ".vcg", *************** label: \"basic block %d", *** 80,86 **** } #if 0 ! /* FIXME Should this be printed? It makes the graph significantly larger. */ /* Print the live-at-start register list. */ fputc ('\n', fp); --- 80,86 ---- } #if 0 ! /* FIXME Should this be printed? It makes the graph significantly larger. */ /* Print the live-at-start register list. */ fputc ('\n', fp); *************** print_rtl_graph_with_bb (base, suffix, r *** 236,242 **** const char *suffix; rtx rtx_first; { ! register rtx tmp_rtx; size_t namelen = strlen (base); size_t suffixlen = strlen (suffix); size_t extlen = strlen (graph_ext[graph_dump_format]) + 1; --- 236,242 ---- const char *suffix; rtx rtx_first; { ! rtx tmp_rtx; size_t namelen = strlen (base); size_t suffixlen = strlen (suffix); size_t extlen = strlen (graph_ext[graph_dump_format]) + 1; diff -Nrc3pad gcc-3.0.4/gcc/graph.h gcc-3.1/gcc/graph.h *** gcc-3.0.4/gcc/graph.h Sat Oct 2 20:16:10 1999 --- gcc-3.1/gcc/graph.h Wed Aug 22 14:35:18 2001 *************** *** 1,28 **** /* Header file for graph routines. 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. */ ! #ifndef __GRAPH_H__ ! #define __GRAPH_H__ extern void print_rtl_graph_with_bb PARAMS ((const char *, const char *, rtx)); extern void clean_graph_dump_file PARAMS ((const char *, const char *)); extern void finish_graph_dump_file PARAMS ((const char *, const char *)); ! #endif /* ! __GRAPH_H__ */ --- 1,28 ---- /* Header file for graph routines. Copyright (C) 1999 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ ! #ifndef GCC_GRAPH_H ! #define GCC_GRAPH_H extern void print_rtl_graph_with_bb PARAMS ((const char *, const char *, rtx)); extern void clean_graph_dump_file PARAMS ((const char *, const char *)); extern void finish_graph_dump_file PARAMS ((const char *, const char *)); ! #endif /* ! GCC_GRAPH_H */ diff -Nrc3pad gcc-3.0.4/gcc/gstab.h gcc-3.1/gcc/gstab.h *** gcc-3.0.4/gcc/gstab.h Wed Dec 16 20:56:34 1998 --- gcc-3.1/gcc/gstab.h Sat May 26 01:31:34 2001 *************** *** 1,8 **** ! #ifndef __GNU_STAB__ ! ! /* Indicate the GNU stab.h is in use. */ ! ! #define __GNU_STAB__ #define __define_stab(NAME, CODE, STRING) NAME=CODE, --- 1,5 ---- ! #ifndef GCC_GSTAB_H ! #define GCC_GSTAB_H #define __define_stab(NAME, CODE, STRING) NAME=CODE, *************** LAST_UNUSED_STAB_CODE *** 14,17 **** #undef __define_stab ! #endif /* __GNU_STAB_ */ --- 11,14 ---- #undef __define_stab ! #endif /* ! GCC_GSTAB_H */ diff -Nrc3pad gcc-3.0.4/gcc/gthr-aix.h gcc-3.1/gcc/gthr-aix.h *** gcc-3.0.4/gcc/gthr-aix.h Tue Sep 19 20:30:27 2000 --- gcc-3.1/gcc/gthr-aix.h Wed Aug 22 14:35:18 2001 *************** *** 2,23 **** /* Compile this one with gcc. */ /* Copyright (C) 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* As a special exception, if you link this library with other files, some of which are compiled with GCC, to produce an executable, --- 2,23 ---- /* Compile this one with gcc. */ /* Copyright (C) 2000 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* As a special exception, if you link this library with other files, some of which are compiled with GCC, to produce an executable, *************** Boston, MA 02111-1307, USA. */ *** 26,33 **** This exception does not however invalidate any other reasons why the executable file might be covered by the GNU General Public License. */ ! #ifndef __gthr_aix_h ! #define __gthr_aix_h #ifdef _THREAD_SAFE #include "gthr-posix.h" --- 26,33 ---- This exception does not however invalidate any other reasons why the executable file might be covered by the GNU General Public License. */ ! #ifndef GCC_GTHR_AIX_H ! #define GCC_GTHR_AIX_H #ifdef _THREAD_SAFE #include "gthr-posix.h" *************** Boston, MA 02111-1307, USA. */ *** 35,38 **** #include "gthr-single.h" #endif ! #endif /* __gthr_aix_h */ --- 35,38 ---- #include "gthr-single.h" #endif ! #endif /* GCC_GTHR_AIX_H */ diff -Nrc3pad gcc-3.0.4/gcc/gthr-dce.h gcc-3.1/gcc/gthr-dce.h *** gcc-3.0.4/gcc/gthr-dce.h Wed Jun 13 17:02:40 2001 --- gcc-3.1/gcc/gthr-dce.h Wed Mar 13 17:17:05 2002 *************** *** 2,23 **** /* Compile this one with gcc. */ /* Copyright (C) 1997, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* As a special exception, if you link this library with other files, some of which are compiled with GCC, to produce an executable, --- 2,23 ---- /* Compile this one with gcc. */ /* Copyright (C) 1997, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* As a special exception, if you link this library with other files, some of which are compiled with GCC, to produce an executable, *************** Boston, MA 02111-1307, USA. */ *** 26,37 **** This exception does not however invalidate any other reasons why the executable file might be covered by the GNU General Public License. */ ! #ifndef __gthr_dce_h ! #define __gthr_dce_h /* DCE threads interface. DCE threads are based on POSIX threads draft 4, and many things ! have changed since then. */ #define __GTHREADS 1 --- 26,43 ---- This exception does not however invalidate any other reasons why the executable file might be covered by the GNU General Public License. */ ! #ifndef GCC_GTHR_DCE_H ! #define GCC_GTHR_DCE_H + /* If _DCE_THREADS is not defined, then we're building the single + threaded version of the libraries and do not want to reference + anything related to pthreads or dce. */ + #ifndef _DCE_THREADS + #include "gthr-single.h" + #else /* DCE threads interface. DCE threads are based on POSIX threads draft 4, and many things ! have changed since then. */ #define __GTHREADS 1 *************** typedef pthread_mutex_t __gthread_mutex_ *** 68,74 **** #pragma weak pthread_mutex_unlock #ifdef _LIBOBJC ! /* Objective C. */ #pragma weak pthread_cond_broadcast #pragma weak pthread_cond_destroy #pragma weak pthread_cond_init --- 74,80 ---- #pragma weak pthread_mutex_unlock #ifdef _LIBOBJC ! /* Objective C. */ #pragma weak pthread_cond_broadcast #pragma weak pthread_cond_destroy #pragma weak pthread_cond_init *************** typedef pthread_mutex_t __gthread_mutex_ *** 81,91 **** #pragma weak pthread_yield #endif - static void *__gthread_active_ptr = (void *) &pthread_create; - static inline int __gthread_active_p (void) { return __gthread_active_ptr != 0; } --- 87,96 ---- #pragma weak pthread_yield #endif static inline int __gthread_active_p (void) { + static void *const __gthread_active_ptr = (void *) &pthread_create; return __gthread_active_ptr != 0; } *************** static void *thread_local_storage = NULL *** 109,115 **** /* Backend initialization functions */ ! /* Initialize the threads subsystem. */ static inline int __gthread_objc_init_thread_system(void) { --- 114,120 ---- /* Backend initialization functions */ ! /* Initialize the threads subsystem. */ static inline int __gthread_objc_init_thread_system(void) { *************** __gthread_objc_init_thread_system(void) *** 120,126 **** return -1; } ! /* Close the threads subsystem. */ static inline int __gthread_objc_close_thread_system(void) { --- 125,131 ---- return -1; } ! /* Close the threads subsystem. */ static inline int __gthread_objc_close_thread_system(void) { *************** __gthread_objc_close_thread_system(void) *** 132,138 **** /* Backend thread functions */ ! /* Create a new thread of execution. */ static inline objc_thread_t __gthread_objc_thread_detach(void (*func)(void *), void *arg) { --- 137,143 ---- /* Backend thread functions */ ! /* Create a new thread of execution. */ static inline objc_thread_t __gthread_objc_thread_detach(void (*func)(void *), void *arg) { *************** __gthread_objc_thread_detach(void (*func *** 147,153 **** { /* ??? May not work! (64bit) */ thread_id = *(objc_thread_t *)&new_thread_handle; ! pthread_detach(&new_thread_handle); /* Fully detach thread. */ } else thread_id = NULL; --- 152,158 ---- { /* ??? May not work! (64bit) */ thread_id = *(objc_thread_t *)&new_thread_handle; ! pthread_detach(&new_thread_handle); /* Fully detach thread. */ } else thread_id = NULL; *************** __gthread_objc_thread_detach(void (*func *** 155,161 **** return thread_id; } ! /* Set the current thread's priority. */ static inline int __gthread_objc_thread_set_priority(int priority) { --- 160,166 ---- return thread_id; } ! /* Set the current thread's priority. */ static inline int __gthread_objc_thread_set_priority(int priority) { *************** __gthread_objc_thread_set_priority(int p *** 178,184 **** break; } ! /* Change the priority. */ if (pthread_setprio(pthread_self(), sys_priority) >= 0) return 0; else --- 183,189 ---- break; } ! /* Change the priority. */ if (pthread_setprio(pthread_self(), sys_priority) >= 0) return 0; else *************** __gthread_objc_thread_set_priority(int p *** 186,192 **** return -1; } ! /* Return the current thread's priority. */ static inline int __gthread_objc_thread_get_priority(void) { --- 191,197 ---- return -1; } ! /* Return the current thread's priority. */ static inline int __gthread_objc_thread_get_priority(void) { *************** __gthread_objc_thread_get_priority(void) *** 212,218 **** return OBJC_THREAD_INTERACTIVE_PRIORITY; } ! /* Yield our process time to another thread. */ static inline void __gthread_objc_thread_yield(void) { --- 217,223 ---- return OBJC_THREAD_INTERACTIVE_PRIORITY; } ! /* Yield our process time to another thread. */ static inline void __gthread_objc_thread_yield(void) { *************** __gthread_objc_thread_yield(void) *** 220,226 **** pthread_yield(); } ! /* Terminate the current thread. */ static inline int __gthread_objc_thread_exit(void) { --- 225,231 ---- pthread_yield(); } ! /* Terminate the current thread. */ static inline int __gthread_objc_thread_exit(void) { *************** __gthread_objc_thread_exit(void) *** 232,238 **** return -1; } ! /* Returns an integer value which uniquely describes a thread. */ static inline objc_thread_t __gthread_objc_thread_id(void) { --- 237,243 ---- return -1; } ! /* Returns an integer value which uniquely describes a thread. */ static inline objc_thread_t __gthread_objc_thread_id(void) { *************** __gthread_objc_thread_id(void) *** 246,252 **** return (objc_thread_t)1; } ! /* Sets the thread's local storage pointer. */ static inline int __gthread_objc_thread_set_data(void *value) { --- 251,257 ---- return (objc_thread_t)1; } ! /* Sets the thread's local storage pointer. */ static inline int __gthread_objc_thread_set_data(void *value) { *************** __gthread_objc_thread_set_data(void *val *** 259,265 **** } } ! /* Returns the thread's local storage pointer. */ static inline void * __gthread_objc_thread_get_data(void) { --- 264,270 ---- } } ! /* Returns the thread's local storage pointer. */ static inline void * __gthread_objc_thread_get_data(void) { *************** __gthread_objc_thread_get_data(void) *** 278,284 **** /* Backend mutex functions */ ! /* Allocate a mutex. */ static inline int __gthread_objc_mutex_allocate(objc_mutex_t mutex) { --- 283,289 ---- /* Backend mutex functions */ ! /* Allocate a mutex. */ static inline int __gthread_objc_mutex_allocate(objc_mutex_t mutex) { *************** __gthread_objc_mutex_allocate(objc_mutex *** 298,304 **** return 0; } ! /* Deallocate a mutex. */ static inline int __gthread_objc_mutex_deallocate(objc_mutex_t mutex) { --- 303,309 ---- return 0; } ! /* Deallocate a mutex. */ static inline int __gthread_objc_mutex_deallocate(objc_mutex_t mutex) { *************** __gthread_objc_mutex_deallocate(objc_mut *** 314,320 **** return 0; } ! /* Grab a lock on a mutex. */ static inline int __gthread_objc_mutex_lock(objc_mutex_t mutex) { --- 319,325 ---- return 0; } ! /* Grab a lock on a mutex. */ static inline int __gthread_objc_mutex_lock(objc_mutex_t mutex) { *************** __gthread_objc_mutex_lock(objc_mutex_t m *** 324,330 **** return 0; } ! /* Try to grab a lock on a mutex. */ static inline int __gthread_objc_mutex_trylock(objc_mutex_t mutex) { --- 329,335 ---- return 0; } ! /* Try to grab a lock on a mutex. */ static inline int __gthread_objc_mutex_trylock(objc_mutex_t mutex) { *************** __gthread_objc_mutex_unlock(objc_mutex_t *** 347,369 **** /* Backend condition mutex functions */ ! /* Allocate a condition. */ static inline int __gthread_objc_condition_allocate(objc_condition_t condition) { if (__gthread_active_p ()) ! /* Unimplemented. */ return -1; else return 0; } ! /* Deallocate a condition. */ static inline int __gthread_objc_condition_deallocate(objc_condition_t condition) { if (__gthread_active_p ()) ! /* Unimplemented. */ return -1; else return 0; --- 352,374 ---- /* Backend condition mutex functions */ ! /* Allocate a condition. */ static inline int __gthread_objc_condition_allocate(objc_condition_t condition) { if (__gthread_active_p ()) ! /* Unimplemented. */ return -1; else return 0; } ! /* Deallocate a condition. */ static inline int __gthread_objc_condition_deallocate(objc_condition_t condition) { if (__gthread_active_p ()) ! /* Unimplemented. */ return -1; else return 0; *************** static inline int *** 374,402 **** __gthread_objc_condition_wait(objc_condition_t condition, objc_mutex_t mutex) { if (__gthread_active_p ()) ! /* Unimplemented. */ return -1; else return 0; } ! /* Wake up all threads waiting on this condition. */ static inline int __gthread_objc_condition_broadcast(objc_condition_t condition) { if (__gthread_active_p ()) ! /* Unimplemented. */ return -1; else return 0; } ! /* Wake up one thread waiting on this condition. */ static inline int __gthread_objc_condition_signal(objc_condition_t condition) { if (__gthread_active_p ()) ! /* Unimplemented. */ return -1; else return 0; --- 379,407 ---- __gthread_objc_condition_wait(objc_condition_t condition, objc_mutex_t mutex) { if (__gthread_active_p ()) ! /* Unimplemented. */ return -1; else return 0; } ! /* Wake up all threads waiting on this condition. */ static inline int __gthread_objc_condition_broadcast(objc_condition_t condition) { if (__gthread_active_p ()) ! /* Unimplemented. */ return -1; else return 0; } ! /* Wake up one thread waiting on this condition. */ static inline int __gthread_objc_condition_signal(objc_condition_t condition) { if (__gthread_active_p ()) ! /* Unimplemented. */ return -1; else return 0; *************** __gthread_key_create (__gthread_key_t *k *** 422,428 **** static inline int __gthread_key_dtor (UNUSED (__gthread_key_t key), UNUSED (void *ptr)) { ! /* Nothing needed. */ return 0; } --- 427,433 ---- static inline int __gthread_key_dtor (UNUSED (__gthread_key_t key), UNUSED (void *ptr)) { ! /* Nothing needed. */ return 0; } *************** __gthread_mutex_unlock (__gthread_mutex_ *** 487,490 **** #undef UNUSED ! #endif /* not __gthr_dce_h */ --- 492,496 ---- #undef UNUSED ! #endif ! #endif /* ! GCC_GTHR_DCE_H */ diff -Nrc3pad gcc-3.0.4/gcc/gthr-posix.h gcc-3.1/gcc/gthr-posix.h *** gcc-3.0.4/gcc/gthr-posix.h Wed Jul 18 11:02:20 2001 --- gcc-3.1/gcc/gthr-posix.h Wed Mar 13 17:17:05 2002 *************** *** 2,23 **** /* Compile this one with gcc. */ /* Copyright (C) 1997, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* As a special exception, if you link this library with other files, some of which are compiled with GCC, to produce an executable, --- 2,23 ---- /* Compile this one with gcc. */ /* Copyright (C) 1997, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* As a special exception, if you link this library with other files, some of which are compiled with GCC, to produce an executable, *************** Boston, MA 02111-1307, USA. */ *** 26,36 **** This exception does not however invalidate any other reasons why the executable file might be covered by the GNU General Public License. */ ! #ifndef __gthr_posix_h ! #define __gthr_posix_h /* POSIX threads specific definitions. ! Easy, since the interface is just one-to-one mapping. */ #define __GTHREADS 1 --- 26,36 ---- This exception does not however invalidate any other reasons why the executable file might be covered by the GNU General Public License. */ ! #ifndef GCC_GTHR_POSIX_H ! #define GCC_GTHR_POSIX_H /* POSIX threads specific definitions. ! Easy, since the interface is just one-to-one mapping. */ #define __GTHREADS 1 *************** typedef pthread_mutex_t __gthread_mutex_ *** 57,63 **** #pragma weak pthread_mutex_unlock #ifdef _LIBOBJC ! /* Objective C. */ #pragma weak pthread_cond_broadcast #pragma weak pthread_cond_destroy #pragma weak pthread_cond_init --- 57,63 ---- #pragma weak pthread_mutex_unlock #ifdef _LIBOBJC ! /* Objective C. */ #pragma weak pthread_cond_broadcast #pragma weak pthread_cond_destroy #pragma weak pthread_cond_init *************** typedef pthread_mutex_t __gthread_mutex_ *** 77,87 **** #pragma weak pthread_setschedparam #endif - static void *__gthread_active_ptr = (void *) &pthread_create; - static inline int __gthread_active_p (void) { return __gthread_active_ptr != 0; } --- 77,86 ---- #pragma weak pthread_setschedparam #endif static inline int __gthread_active_p (void) { + static void *const __gthread_active_ptr = (void *) &pthread_create; return __gthread_active_ptr != 0; } *************** static void *thread_local_storage = NULL *** 113,119 **** /* Backend initialization functions */ ! /* Initialize the threads subsystem. */ static inline int __gthread_objc_init_thread_system(void) { --- 112,118 ---- /* Backend initialization functions */ ! /* Initialize the threads subsystem. */ static inline int __gthread_objc_init_thread_system(void) { *************** __gthread_objc_init_thread_system(void) *** 135,141 **** return -1; } ! /* Close the threads subsystem. */ static inline int __gthread_objc_close_thread_system(void) { --- 134,140 ---- return -1; } ! /* Close the threads subsystem. */ static inline int __gthread_objc_close_thread_system(void) { *************** __gthread_objc_close_thread_system(void) *** 149,155 **** /* Backend thread functions */ ! /* Create a new thread of execution. */ static inline objc_thread_t __gthread_objc_thread_detach(void (*func)(void *), void *arg) { --- 148,154 ---- /* Backend thread functions */ ! /* Create a new thread of execution. */ static inline objc_thread_t __gthread_objc_thread_detach(void (*func)(void *), void *arg) { *************** __gthread_objc_thread_detach(void (*func *** 167,173 **** return thread_id; } ! /* Set the current thread's priority. */ static inline int __gthread_objc_thread_set_priority(int priority) { --- 166,172 ---- return thread_id; } ! /* Set the current thread's priority. */ static inline int __gthread_objc_thread_set_priority(int priority) { *************** __gthread_objc_thread_set_priority(int p *** 205,211 **** } } ! /* Return the current thread's priority. */ static inline int __gthread_objc_thread_get_priority(void) { --- 204,210 ---- } } ! /* Return the current thread's priority. */ static inline int __gthread_objc_thread_get_priority(void) { *************** __gthread_objc_thread_get_priority(void) *** 223,229 **** return OBJC_THREAD_INTERACTIVE_PRIORITY; } ! /* Yield our process time to another thread. */ static inline void __gthread_objc_thread_yield(void) { --- 222,228 ---- return OBJC_THREAD_INTERACTIVE_PRIORITY; } ! /* Yield our process time to another thread. */ static inline void __gthread_objc_thread_yield(void) { *************** __gthread_objc_thread_yield(void) *** 231,237 **** sched_yield(); } ! /* Terminate the current thread. */ static inline int __gthread_objc_thread_exit(void) { --- 230,236 ---- sched_yield(); } ! /* Terminate the current thread. */ static inline int __gthread_objc_thread_exit(void) { *************** __gthread_objc_thread_exit(void) *** 243,249 **** return -1; } ! /* Returns an integer value which uniquely describes a thread. */ static inline objc_thread_t __gthread_objc_thread_id(void) { --- 242,248 ---- return -1; } ! /* Returns an integer value which uniquely describes a thread. */ static inline objc_thread_t __gthread_objc_thread_id(void) { *************** __gthread_objc_thread_id(void) *** 253,259 **** return (objc_thread_t) 1; } ! /* Sets the thread's local storage pointer. */ static inline int __gthread_objc_thread_set_data(void *value) { --- 252,258 ---- return (objc_thread_t) 1; } ! /* Sets the thread's local storage pointer. */ static inline int __gthread_objc_thread_set_data(void *value) { *************** __gthread_objc_thread_set_data(void *val *** 266,272 **** } } ! /* Returns the thread's local storage pointer. */ static inline void * __gthread_objc_thread_get_data(void) { --- 265,271 ---- } } ! /* Returns the thread's local storage pointer. */ static inline void * __gthread_objc_thread_get_data(void) { *************** __gthread_objc_thread_get_data(void) *** 278,284 **** /* Backend mutex functions */ ! /* Allocate a mutex. */ static inline int __gthread_objc_mutex_allocate(objc_mutex_t mutex) { --- 277,283 ---- /* Backend mutex functions */ ! /* Allocate a mutex. */ static inline int __gthread_objc_mutex_allocate(objc_mutex_t mutex) { *************** __gthread_objc_mutex_allocate(objc_mutex *** 297,303 **** return 0; } ! /* Deallocate a mutex. */ static inline int __gthread_objc_mutex_deallocate(objc_mutex_t mutex) { --- 296,302 ---- return 0; } ! /* Deallocate a mutex. */ static inline int __gthread_objc_mutex_deallocate(objc_mutex_t mutex) { *************** __gthread_objc_mutex_deallocate(objc_mut *** 327,333 **** return 0; } ! /* Grab a lock on a mutex. */ static inline int __gthread_objc_mutex_lock(objc_mutex_t mutex) { --- 326,332 ---- return 0; } ! /* Grab a lock on a mutex. */ static inline int __gthread_objc_mutex_lock(objc_mutex_t mutex) { *************** __gthread_objc_mutex_lock(objc_mutex_t m *** 340,346 **** return 0; } ! /* Try to grab a lock on a mutex. */ static inline int __gthread_objc_mutex_trylock(objc_mutex_t mutex) { --- 339,345 ---- return 0; } ! /* Try to grab a lock on a mutex. */ static inline int __gthread_objc_mutex_trylock(objc_mutex_t mutex) { *************** __gthread_objc_mutex_unlock(objc_mutex_t *** 368,374 **** /* Backend condition mutex functions */ ! /* Allocate a condition. */ static inline int __gthread_objc_condition_allocate(objc_condition_t condition) { --- 367,373 ---- /* Backend condition mutex functions */ ! /* Allocate a condition. */ static inline int __gthread_objc_condition_allocate(objc_condition_t condition) { *************** __gthread_objc_condition_allocate(objc_c *** 387,393 **** return 0; } ! /* Deallocate a condition. */ static inline int __gthread_objc_condition_deallocate(objc_condition_t condition) { --- 386,392 ---- return 0; } ! /* Deallocate a condition. */ static inline int __gthread_objc_condition_deallocate(objc_condition_t condition) { *************** __gthread_objc_condition_wait(objc_condi *** 413,419 **** return 0; } ! /* Wake up all threads waiting on this condition. */ static inline int __gthread_objc_condition_broadcast(objc_condition_t condition) { --- 412,418 ---- return 0; } ! /* Wake up all threads waiting on this condition. */ static inline int __gthread_objc_condition_broadcast(objc_condition_t condition) { *************** __gthread_objc_condition_broadcast(objc_ *** 423,429 **** return 0; } ! /* Wake up one thread waiting on this condition. */ static inline int __gthread_objc_condition_signal(objc_condition_t condition) { --- 422,428 ---- return 0; } ! /* Wake up one thread waiting on this condition. */ static inline int __gthread_objc_condition_signal(objc_condition_t condition) { *************** __gthread_key_create (__gthread_key_t *k *** 453,459 **** static inline int __gthread_key_dtor (__gthread_key_t key, void *ptr) { ! /* Just reset the key value to zero. */ if (ptr) return pthread_setspecific (key, 0); else --- 452,458 ---- static inline int __gthread_key_dtor (__gthread_key_t key, void *ptr) { ! /* Just reset the key value to zero. */ if (ptr) return pthread_setspecific (key, 0); else *************** __gthread_mutex_unlock (__gthread_mutex_ *** 507,510 **** #endif /* _LIBOBJC */ ! #endif /* not __gthr_posix_h */ --- 506,509 ---- #endif /* _LIBOBJC */ ! #endif /* ! GCC_GTHR_POSIX_H */ diff -Nrc3pad gcc-3.0.4/gcc/gthr-rtems.h gcc-3.1/gcc/gthr-rtems.h *** gcc-3.0.4/gcc/gthr-rtems.h Fri Feb 15 14:42:53 2002 --- gcc-3.1/gcc/gthr-rtems.h Mon Apr 22 18:24:11 2002 *************** *** 3,24 **** /* Compile this one with gcc. */ /* Copyright (C) 1997, 1999, 2000, 2002 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* As a special exception, if you link this library with other files, some of which are compiled with GCC, to produce an executable, --- 3,24 ---- /* Compile this one with gcc. */ /* Copyright (C) 1997, 1999, 2000, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* As a special exception, if you link this library with other files, some of which are compiled with GCC, to produce an executable, *************** Boston, MA 02111-1307, USA. */ *** 27,34 **** This exception does not however invalidate any other reasons why the executable file might be covered by the GNU General Public License. */ ! #ifndef __gthr_rtems_h ! #define __gthr_rtems_h #ifdef __cplusplus extern "C" { --- 27,34 ---- This exception does not however invalidate any other reasons why the executable file might be covered by the GNU General Public License. */ ! #ifndef GCC_GTHR_RTEMS_H ! #define GCC_GTHR_RTEMS_H #ifdef __cplusplus extern "C" { *************** typedef void *__gthread_mutex_t; *** 51,57 **** */ /* generic per task variables */ ! extern int rtems_gxx_once (__gthread_once_t *once, void (*func) ()); extern int rtems_gxx_key_create (__gthread_key_t *key, void (*dtor) (void *)); extern int rtems_gxx_key_dtor (__gthread_key_t key, void *ptr); extern int rtems_gxx_key_delete (__gthread_key_t key); --- 51,57 ---- */ /* generic per task variables */ ! extern int rtems_gxx_once (__gthread_once_t *once, void (*func) (void)); extern int rtems_gxx_key_create (__gthread_key_t *key, void (*dtor) (void *)); extern int rtems_gxx_key_dtor (__gthread_key_t key, void *ptr); extern int rtems_gxx_key_delete (__gthread_key_t key); *************** __gthread_active_p (void) *** 74,80 **** /* Wrapper calls */ static inline int ! __gthread_once (__gthread_once_t *once, void (*func) ()) { return rtems_gxx_once( once, func ); } --- 74,80 ---- /* Wrapper calls */ static inline int ! __gthread_once (__gthread_once_t *once, void (*func) (void)) { return rtems_gxx_once( once, func ); } *************** __gthread_mutex_unlock (__gthread_mutex_ *** 131,135 **** } #endif ! ! #endif /* __gthr_rtems_h */ --- 131,134 ---- } #endif ! #endif /* ! GCC_GTHR_RTEMS_H */ diff -Nrc3pad gcc-3.0.4/gcc/gthr-single.h gcc-3.1/gcc/gthr-single.h *** gcc-3.0.4/gcc/gthr-single.h Sat May 12 18:50:19 2001 --- gcc-3.1/gcc/gthr-single.h Fri Oct 12 13:10:33 2001 *************** *** 2,23 **** /* Compile this one with gcc. */ /* Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* As a special exception, if you link this library with other files, some of which are compiled with GCC, to produce an executable, --- 2,23 ---- /* Compile this one with gcc. */ /* Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* As a special exception, if you link this library with other files, some of which are compiled with GCC, to produce an executable, *************** Boston, MA 02111-1307, USA. */ *** 26,35 **** This exception does not however invalidate any other reasons why the executable file might be covered by the GNU General Public License. */ ! #ifndef __gthr_single_h ! #define __gthr_single_h ! /* Just provide compatibility for mutex handling. */ typedef int __gthread_mutex_t; --- 26,35 ---- This exception does not however invalidate any other reasons why the executable file might be covered by the GNU General Public License. */ ! #ifndef GCC_GTHR_SINGLE_H ! #define GCC_GTHR_SINGLE_H ! /* Just provide compatibility for mutex handling. */ typedef int __gthread_mutex_t; *************** static void *thread_local_storage = NULL *** 48,54 **** /* Backend initialization functions */ ! /* Initialize the threads subsystem. */ static inline int __gthread_objc_init_thread_system(void) { --- 48,54 ---- /* Backend initialization functions */ ! /* Initialize the threads subsystem. */ static inline int __gthread_objc_init_thread_system(void) { *************** __gthread_objc_init_thread_system(void) *** 56,62 **** return -1; } ! /* Close the threads subsystem. */ static inline int __gthread_objc_close_thread_system(void) { --- 56,62 ---- return -1; } ! /* Close the threads subsystem. */ static inline int __gthread_objc_close_thread_system(void) { *************** __gthread_objc_close_thread_system(void) *** 66,72 **** /* Backend thread functions */ ! /* Create a new thread of execution. */ static inline objc_thread_t __gthread_objc_thread_detach(void (* func)(void *), void * UNUSED(arg)) { --- 66,72 ---- /* Backend thread functions */ ! /* Create a new thread of execution. */ static inline objc_thread_t __gthread_objc_thread_detach(void (* func)(void *), void * UNUSED(arg)) { *************** __gthread_objc_thread_detach(void (* fun *** 74,80 **** return NULL; } ! /* Set the current thread's priority. */ static inline int __gthread_objc_thread_set_priority(int UNUSED(priority)) { --- 74,80 ---- return NULL; } ! /* Set the current thread's priority. */ static inline int __gthread_objc_thread_set_priority(int UNUSED(priority)) { *************** __gthread_objc_thread_set_priority(int U *** 82,102 **** return -1; } ! /* Return the current thread's priority. */ static inline int __gthread_objc_thread_get_priority(void) { return OBJC_THREAD_INTERACTIVE_PRIORITY; } ! /* Yield our process time to another thread. */ static inline void __gthread_objc_thread_yield(void) { return; } ! /* Terminate the current thread. */ static inline int __gthread_objc_thread_exit(void) { --- 82,102 ---- return -1; } ! /* Return the current thread's priority. */ static inline int __gthread_objc_thread_get_priority(void) { return OBJC_THREAD_INTERACTIVE_PRIORITY; } ! /* Yield our process time to another thread. */ static inline void __gthread_objc_thread_yield(void) { return; } ! /* Terminate the current thread. */ static inline int __gthread_objc_thread_exit(void) { *************** __gthread_objc_thread_exit(void) *** 106,120 **** return -1; } ! /* Returns an integer value which uniquely describes a thread. */ static inline objc_thread_t __gthread_objc_thread_id(void) { ! /* No thread support, use 1. */ return (objc_thread_t)1; } ! /* Sets the thread's local storage pointer. */ static inline int __gthread_objc_thread_set_data(void *value) { --- 106,120 ---- return -1; } ! /* Returns an integer value which uniquely describes a thread. */ static inline objc_thread_t __gthread_objc_thread_id(void) { ! /* No thread support, use 1. */ return (objc_thread_t)1; } ! /* Sets the thread's local storage pointer. */ static inline int __gthread_objc_thread_set_data(void *value) { *************** __gthread_objc_thread_set_data(void *val *** 122,128 **** return 0; } ! /* Returns the thread's local storage pointer. */ static inline void * __gthread_objc_thread_get_data(void) { --- 122,128 ---- return 0; } ! /* Returns the thread's local storage pointer. */ static inline void * __gthread_objc_thread_get_data(void) { *************** __gthread_objc_thread_get_data(void) *** 131,151 **** /* Backend mutex functions */ ! /* Allocate a mutex. */ static inline int __gthread_objc_mutex_allocate(objc_mutex_t UNUSED(mutex)) { return 0; } ! /* Deallocate a mutex. */ static inline int __gthread_objc_mutex_deallocate(objc_mutex_t UNUSED(mutex)) { return 0; } ! /* Grab a lock on a mutex. */ static inline int __gthread_objc_mutex_lock(objc_mutex_t UNUSED(mutex)) { --- 131,151 ---- /* Backend mutex functions */ ! /* Allocate a mutex. */ static inline int __gthread_objc_mutex_allocate(objc_mutex_t UNUSED(mutex)) { return 0; } ! /* Deallocate a mutex. */ static inline int __gthread_objc_mutex_deallocate(objc_mutex_t UNUSED(mutex)) { return 0; } ! /* Grab a lock on a mutex. */ static inline int __gthread_objc_mutex_lock(objc_mutex_t UNUSED(mutex)) { *************** __gthread_objc_mutex_lock(objc_mutex_t U *** 153,159 **** return 0; } ! /* Try to grab a lock on a mutex. */ static inline int __gthread_objc_mutex_trylock(objc_mutex_t UNUSED(mutex)) { --- 153,159 ---- return 0; } ! /* Try to grab a lock on a mutex. */ static inline int __gthread_objc_mutex_trylock(objc_mutex_t UNUSED(mutex)) { *************** __gthread_objc_mutex_unlock(objc_mutex_t *** 170,183 **** /* Backend condition mutex functions */ ! /* Allocate a condition. */ static inline int __gthread_objc_condition_allocate(objc_condition_t UNUSED(condition)) { return 0; } ! /* Deallocate a condition. */ static inline int __gthread_objc_condition_deallocate(objc_condition_t UNUSED(condition)) { --- 170,183 ---- /* Backend condition mutex functions */ ! /* Allocate a condition. */ static inline int __gthread_objc_condition_allocate(objc_condition_t UNUSED(condition)) { return 0; } ! /* Deallocate a condition. */ static inline int __gthread_objc_condition_deallocate(objc_condition_t UNUSED(condition)) { *************** __gthread_objc_condition_wait(objc_condi *** 192,205 **** return 0; } ! /* Wake up all threads waiting on this condition. */ static inline int __gthread_objc_condition_broadcast(objc_condition_t UNUSED(condition)) { return 0; } ! /* Wake up one thread waiting on this condition. */ static inline int __gthread_objc_condition_signal(objc_condition_t UNUSED(condition)) { --- 192,205 ---- return 0; } ! /* Wake up all threads waiting on this condition. */ static inline int __gthread_objc_condition_broadcast(objc_condition_t UNUSED(condition)) { return 0; } ! /* Wake up one thread waiting on this condition. */ static inline int __gthread_objc_condition_signal(objc_condition_t UNUSED(condition)) { *************** __gthread_mutex_unlock (__gthread_mutex_ *** 236,239 **** #undef UNUSED ! #endif /* not __gthr_single_h */ --- 236,239 ---- #undef UNUSED ! #endif /* ! GCC_GTHR_SINGLE_H */ diff -Nrc3pad gcc-3.0.4/gcc/gthr-solaris.h gcc-3.1/gcc/gthr-solaris.h *** gcc-3.0.4/gcc/gthr-solaris.h Wed May 30 22:39:08 2001 --- gcc-3.1/gcc/gthr-solaris.h Wed Mar 13 17:17:05 2002 *************** *** 2,23 **** /* Compile this one with gcc. */ /* Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* As a special exception, if you link this library with other files, some of which are compiled with GCC, to produce an executable, --- 2,23 ---- /* Compile this one with gcc. */ /* Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* As a special exception, if you link this library with other files, some of which are compiled with GCC, to produce an executable, *************** Boston, MA 02111-1307, USA. */ *** 26,37 **** This exception does not however invalidate any other reasons why the executable file might be covered by the GNU General Public License. */ ! #ifndef __gthr_solaris_h ! #define __gthr_solaris_h /* Solaris threads as found in Solaris 2.[456]. Actually these are Unix International (UI) threads, but I don't ! know if anyone else implements these. */ #define __GTHREADS 1 --- 26,37 ---- This exception does not however invalidate any other reasons why the executable file might be covered by the GNU General Public License. */ ! #ifndef GCC_GTHR_SOLARIS_H ! #define GCC_GTHR_SOLARIS_H /* Solaris threads as found in Solaris 2.[456]. Actually these are Unix International (UI) threads, but I don't ! know if anyone else implements these. */ #define __GTHREADS 1 *************** typedef mutex_t __gthread_mutex_t; *** 79,91 **** #endif /* This will not actually work in Solaris 2.5, since libc contains ! dummy symbols of all thr_* routines. */ ! ! static void *__gthread_active_ptr = (void *) &thr_create; static inline int __gthread_active_p (void) { return __gthread_active_ptr != 0; } --- 79,90 ---- #endif /* This will not actually work in Solaris 2.5, since libc contains ! dummy symbols of all thr_* routines. */ static inline int __gthread_active_p (void) { + static void *const __gthread_active_ptr = (void *) &thr_create; return __gthread_active_ptr != 0; } *************** static void *thread_local_storage = NULL *** 109,115 **** /* Backend initialization functions */ ! /* Initialize the threads subsystem. */ static inline int __gthread_objc_init_thread_system(void) { --- 108,114 ---- /* Backend initialization functions */ ! /* Initialize the threads subsystem. */ static inline int __gthread_objc_init_thread_system(void) { *************** __gthread_objc_init_thread_system(void) *** 121,127 **** return -1; } ! /* Close the threads subsystem. */ static inline int __gthread_objc_close_thread_system(void) { --- 120,126 ---- return -1; } ! /* Close the threads subsystem. */ static inline int __gthread_objc_close_thread_system(void) { *************** __gthread_objc_close_thread_system(void) *** 133,139 **** /* Backend thread functions */ ! /* Create a new thread of execution. */ static inline objc_thread_t __gthread_objc_thread_detach(void (*func)(void *), void *arg) { --- 132,138 ---- /* Backend thread functions */ ! /* Create a new thread of execution. */ static inline objc_thread_t __gthread_objc_thread_detach(void (*func)(void *), void *arg) { *************** __gthread_objc_thread_detach(void (*func *** 153,159 **** return thread_id; } ! /* Set the current thread's priority. */ static inline int __gthread_objc_thread_set_priority(int priority) { --- 152,158 ---- return thread_id; } ! /* Set the current thread's priority. */ static inline int __gthread_objc_thread_set_priority(int priority) { *************** __gthread_objc_thread_set_priority(int p *** 183,189 **** return -1; } ! /* Return the current thread's priority. */ static inline int __gthread_objc_thread_get_priority(void) { --- 182,188 ---- return -1; } ! /* Return the current thread's priority. */ static inline int __gthread_objc_thread_get_priority(void) { *************** __gthread_objc_thread_get_priority(void) *** 201,211 **** return OBJC_THREAD_LOW_PRIORITY; } ! /* Couldn't get priority. */ return -1; } ! /* Yield our process time to another thread. */ static inline void __gthread_objc_thread_yield(void) { --- 200,210 ---- return OBJC_THREAD_LOW_PRIORITY; } ! /* Couldn't get priority. */ return -1; } ! /* Yield our process time to another thread. */ static inline void __gthread_objc_thread_yield(void) { *************** __gthread_objc_thread_yield(void) *** 213,219 **** thr_yield(); } ! /* Terminate the current thread. */ static inline int __gthread_objc_thread_exit(void) { --- 212,218 ---- thr_yield(); } ! /* Terminate the current thread. */ static inline int __gthread_objc_thread_exit(void) { *************** __gthread_objc_thread_exit(void) *** 225,231 **** return -1; } ! /* Returns an integer value which uniquely describes a thread. */ static inline objc_thread_t __gthread_objc_thread_id(void) { --- 224,230 ---- return -1; } ! /* Returns an integer value which uniquely describes a thread. */ static inline objc_thread_t __gthread_objc_thread_id(void) { *************** __gthread_objc_thread_id(void) *** 235,241 **** return (objc_thread_t)1; } ! /* Sets the thread's local storage pointer. */ static inline int __gthread_objc_thread_set_data(void *value) { --- 234,240 ---- return (objc_thread_t)1; } ! /* Sets the thread's local storage pointer. */ static inline int __gthread_objc_thread_set_data(void *value) { *************** __gthread_objc_thread_set_data(void *val *** 253,259 **** } } ! /* Returns the thread's local storage pointer. */ static inline void * __gthread_objc_thread_get_data(void) { --- 252,258 ---- } } ! /* Returns the thread's local storage pointer. */ static inline void * __gthread_objc_thread_get_data(void) { *************** __gthread_objc_thread_get_data(void) *** 272,278 **** /* Backend mutex functions */ ! /* Allocate a mutex. */ static inline int __gthread_objc_mutex_allocate(objc_mutex_t mutex) { --- 271,277 ---- /* Backend mutex functions */ ! /* Allocate a mutex. */ static inline int __gthread_objc_mutex_allocate(objc_mutex_t mutex) { *************** __gthread_objc_mutex_allocate(objc_mutex *** 283,289 **** return 0; } ! /* Deallocate a mutex. */ static inline int __gthread_objc_mutex_deallocate(objc_mutex_t mutex) { --- 282,288 ---- return 0; } ! /* Deallocate a mutex. */ static inline int __gthread_objc_mutex_deallocate(objc_mutex_t mutex) { *************** __gthread_objc_mutex_deallocate(objc_mut *** 293,299 **** return 0; } ! /* Grab a lock on a mutex. */ static inline int __gthread_objc_mutex_lock(objc_mutex_t mutex) { --- 292,298 ---- return 0; } ! /* Grab a lock on a mutex. */ static inline int __gthread_objc_mutex_lock(objc_mutex_t mutex) { *************** __gthread_objc_mutex_lock(objc_mutex_t m *** 304,310 **** return 0; } ! /* Try to grab a lock on a mutex. */ static inline int __gthread_objc_mutex_trylock(objc_mutex_t mutex) { --- 303,309 ---- return 0; } ! /* Try to grab a lock on a mutex. */ static inline int __gthread_objc_mutex_trylock(objc_mutex_t mutex) { *************** __gthread_objc_mutex_unlock(objc_mutex_t *** 328,334 **** /* Backend condition mutex functions */ ! /* Allocate a condition. */ static inline int __gthread_objc_condition_allocate(objc_condition_t condition) { --- 327,333 ---- /* Backend condition mutex functions */ ! /* Allocate a condition. */ static inline int __gthread_objc_condition_allocate(objc_condition_t condition) { *************** __gthread_objc_condition_allocate(objc_c *** 339,345 **** return 0; } ! /* Deallocate a condition. */ static inline int __gthread_objc_condition_deallocate(objc_condition_t condition) { --- 338,344 ---- return 0; } ! /* Deallocate a condition. */ static inline int __gthread_objc_condition_deallocate(objc_condition_t condition) { *************** __gthread_objc_condition_wait(objc_condi *** 360,366 **** return 0; } ! /* Wake up all threads waiting on this condition. */ static inline int __gthread_objc_condition_broadcast(objc_condition_t condition) { --- 359,365 ---- return 0; } ! /* Wake up all threads waiting on this condition. */ static inline int __gthread_objc_condition_broadcast(objc_condition_t condition) { *************** __gthread_objc_condition_broadcast(objc_ *** 370,376 **** return 0; } ! /* Wake up one thread waiting on this condition. */ static inline int __gthread_objc_condition_signal(objc_condition_t condition) { --- 369,375 ---- return 0; } ! /* Wake up one thread waiting on this condition. */ static inline int __gthread_objc_condition_signal(objc_condition_t condition) { *************** static inline int *** 410,416 **** __gthread_key_create (__gthread_key_t *key, void (*dtor) (void *)) { /* Solaris 2.5 contains thr_* routines no-op in libc, so test if we actually ! got a reasonable key value, and if not, fail. */ *key = -1; if (thr_keycreate (key, dtor) != 0 || *key == -1) return -1; --- 409,415 ---- __gthread_key_create (__gthread_key_t *key, void (*dtor) (void *)) { /* Solaris 2.5 contains thr_* routines no-op in libc, so test if we actually ! got a reasonable key value, and if not, fail. */ *key = -1; if (thr_keycreate (key, dtor) != 0 || *key == -1) return -1; *************** __gthread_key_create (__gthread_key_t *k *** 421,434 **** static inline int __gthread_key_dtor (__gthread_key_t key, void *ptr) { ! /* Nothing needed. */ return 0; } static inline int __gthread_key_delete (__gthread_key_t key) { ! /* Not possible. */ return -1; } --- 420,433 ---- static inline int __gthread_key_dtor (__gthread_key_t key, void *ptr) { ! /* Nothing needed. */ return 0; } static inline int __gthread_key_delete (__gthread_key_t key) { ! /* Not possible. */ return -1; } *************** __gthread_mutex_unlock (__gthread_mutex_ *** 477,480 **** #endif /* _LIBOBJC */ ! #endif /* not __gthr_solaris_h */ --- 476,479 ---- #endif /* _LIBOBJC */ ! #endif /* ! GCC_GTHR_SOLARIS_H */ diff -Nrc3pad gcc-3.0.4/gcc/gthr-vxworks.h gcc-3.1/gcc/gthr-vxworks.h *** gcc-3.0.4/gcc/gthr-vxworks.h Thu Jul 20 07:27:26 2000 --- gcc-3.1/gcc/gthr-vxworks.h Fri Oct 12 13:10:33 2001 *************** *** 3,24 **** /* Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc. Contributed by Mike Stump . ! 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. */ /* As a special exception, if you link this library with other files, some of which are compiled with GCC, to produce an executable, --- 3,24 ---- /* Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc. Contributed by Mike Stump . ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* As a special exception, if you link this library with other files, some of which are compiled with GCC, to produce an executable, *************** Boston, MA 02111-1307, USA. */ *** 27,34 **** This exception does not however invalidate any other reasons why the executable file might be covered by the GNU General Public License. */ ! #ifndef __gthr_vxworks_h ! #define __gthr_vxworks_h #ifdef _LIBOBJC --- 27,34 ---- This exception does not however invalidate any other reasons why the executable file might be covered by the GNU General Public License. */ ! #ifndef GCC_GTHR_VXWORKS_H ! #define GCC_GTHR_VXWORKS_H #ifdef _LIBOBJC *************** static void *thread_local_storage = NULL *** 37,43 **** /* Backend initialization functions */ ! /* Initialize the threads subsystem. */ int __gthread_objc_init_thread_system(void) { --- 37,43 ---- /* Backend initialization functions */ ! /* Initialize the threads subsystem. */ int __gthread_objc_init_thread_system(void) { *************** __gthread_objc_init_thread_system(void) *** 45,51 **** return -1; } ! /* Close the threads subsystem. */ int __gthread_objc_close_thread_system(void) { --- 45,51 ---- return -1; } ! /* Close the threads subsystem. */ int __gthread_objc_close_thread_system(void) { *************** __gthread_objc_close_thread_system(void) *** 55,61 **** /* Backend thread functions */ ! /* Create a new thread of execution. */ objc_thread_t __gthread_objc_thread_detach(void (*func)(void *arg), void *arg) { --- 55,61 ---- /* Backend thread functions */ ! /* Create a new thread of execution. */ objc_thread_t __gthread_objc_thread_detach(void (*func)(void *arg), void *arg) { *************** __gthread_objc_thread_detach(void (*func *** 63,69 **** return NULL; } ! /* Set the current thread's priority. */ int __gthread_objc_thread_set_priority(int priority) { --- 63,69 ---- return NULL; } ! /* Set the current thread's priority. */ int __gthread_objc_thread_set_priority(int priority) { *************** __gthread_objc_thread_set_priority(int p *** 71,91 **** return -1; } ! /* Return the current thread's priority. */ int __gthread_objc_thread_get_priority(void) { return OBJC_THREAD_INTERACTIVE_PRIORITY; } ! /* Yield our process time to another thread. */ void __gthread_objc_thread_yield(void) { return; } ! /* Terminate the current thread. */ int __gthread_objc_thread_exit(void) { --- 71,91 ---- return -1; } ! /* Return the current thread's priority. */ int __gthread_objc_thread_get_priority(void) { return OBJC_THREAD_INTERACTIVE_PRIORITY; } ! /* Yield our process time to another thread. */ void __gthread_objc_thread_yield(void) { return; } ! /* Terminate the current thread. */ int __gthread_objc_thread_exit(void) { *************** __gthread_objc_thread_exit(void) *** 95,109 **** return -1; } ! /* Returns an integer value which uniquely describes a thread. */ objc_thread_t __gthread_objc_thread_id(void) { ! /* No thread support, use 1. */ return (objc_thread_t)1; } ! /* Sets the thread's local storage pointer. */ int __gthread_objc_thread_set_data(void *value) { --- 95,109 ---- return -1; } ! /* Returns an integer value which uniquely describes a thread. */ objc_thread_t __gthread_objc_thread_id(void) { ! /* No thread support, use 1. */ return (objc_thread_t)1; } ! /* Sets the thread's local storage pointer. */ int __gthread_objc_thread_set_data(void *value) { *************** __gthread_objc_thread_set_data(void *val *** 111,117 **** return 0; } ! /* Returns the thread's local storage pointer. */ void * __gthread_objc_thread_get_data(void) { --- 111,117 ---- return 0; } ! /* Returns the thread's local storage pointer. */ void * __gthread_objc_thread_get_data(void) { *************** __gthread_objc_thread_get_data(void) *** 120,140 **** /* Backend mutex functions */ ! /* Allocate a mutex. */ int __gthread_objc_mutex_allocate(objc_mutex_t mutex) { return 0; } ! /* Deallocate a mutex. */ int __gthread_objc_mutex_deallocate(objc_mutex_t mutex) { return 0; } ! /* Grab a lock on a mutex. */ int __gthread_objc_mutex_lock(objc_mutex_t mutex) { --- 120,140 ---- /* Backend mutex functions */ ! /* Allocate a mutex. */ int __gthread_objc_mutex_allocate(objc_mutex_t mutex) { return 0; } ! /* Deallocate a mutex. */ int __gthread_objc_mutex_deallocate(objc_mutex_t mutex) { return 0; } ! /* Grab a lock on a mutex. */ int __gthread_objc_mutex_lock(objc_mutex_t mutex) { *************** __gthread_objc_mutex_lock(objc_mutex_t m *** 142,148 **** return 0; } ! /* Try to grab a lock on a mutex. */ int __gthread_objc_mutex_trylock(objc_mutex_t mutex) { --- 142,148 ---- return 0; } ! /* Try to grab a lock on a mutex. */ int __gthread_objc_mutex_trylock(objc_mutex_t mutex) { *************** __gthread_objc_mutex_unlock(objc_mutex_t *** 159,172 **** /* Backend condition mutex functions */ ! /* Allocate a condition. */ int __gthread_objc_condition_allocate(objc_condition_t condition) { return 0; } ! /* Deallocate a condition. */ int __gthread_objc_condition_deallocate(objc_condition_t condition) { --- 159,172 ---- /* Backend condition mutex functions */ ! /* Allocate a condition. */ int __gthread_objc_condition_allocate(objc_condition_t condition) { return 0; } ! /* Deallocate a condition. */ int __gthread_objc_condition_deallocate(objc_condition_t condition) { *************** __gthread_objc_condition_wait(objc_condi *** 180,193 **** return 0; } ! /* Wake up all threads waiting on this condition. */ int __gthread_objc_condition_broadcast(objc_condition_t condition) { return 0; } ! /* Wake up one thread waiting on this condition. */ int __gthread_objc_condition_signal(objc_condition_t condition) { --- 180,193 ---- return 0; } ! /* Wake up all threads waiting on this condition. */ int __gthread_objc_condition_broadcast(objc_condition_t condition) { return 0; } ! /* Wake up one thread waiting on this condition. */ int __gthread_objc_condition_signal(objc_condition_t condition) { *************** __gthread_objc_condition_signal(objc_con *** 197,203 **** #else /* _LIBOBJC */ /* POSIX threads specific definitions. ! Easy, since the interface is just one-to-one mapping. */ #define __GTHREADS 1 --- 197,203 ---- #else /* _LIBOBJC */ /* POSIX threads specific definitions. ! Easy, since the interface is just one-to-one mapping. */ #define __GTHREADS 1 *************** __gthread_key_create (__gthread_key_t *k *** 264,270 **** static inline int __gthread_key_dtor (__gthread_key_t key, void *ptr) { ! /* Just reset the key value to zero. */ if (ptr) return __gthread_setspecific (key, 0); else --- 264,270 ---- static inline int __gthread_key_dtor (__gthread_key_t key, void *ptr) { ! /* Just reset the key value to zero. */ if (ptr) return __gthread_setspecific (key, 0); else *************** __gthread_mutex_unlock (__gthread_mutex_ *** 307,310 **** #endif /* _LIBOBJC */ ! #endif /* not __gthr_vxworks_h */ --- 307,310 ---- #endif /* _LIBOBJC */ ! #endif /* ! GCC_GTHR_VXWORKS_H */ diff -Nrc3pad gcc-3.0.4/gcc/gthr-win32.h gcc-3.1/gcc/gthr-win32.h *** gcc-3.0.4/gcc/gthr-win32.h Mon Nov 19 00:43:36 2001 --- gcc-3.1/gcc/gthr-win32.h Sun Feb 3 20:58:51 2002 *************** *** 1,24 **** /* Threads compatibility routines for libgcc2 and libobjc. */ /* Compile this one with gcc. */ ! /* Copyright (C) 1999, 2000 Free Software Foundation, Inc. Contributed by Mumit Khan . ! 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. */ /* As a special exception, if you link this library with other files, some of which are compiled with GCC, to produce an executable, --- 1,24 ---- /* Threads compatibility routines for libgcc2 and libobjc. */ /* Compile this one with gcc. */ ! /* Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc. Contributed by Mumit Khan . ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* As a special exception, if you link this library with other files, some of which are compiled with GCC, to produce an executable, *************** Boston, MA 02111-1307, USA. */ *** 27,34 **** This exception does not however invalidate any other reasons why the executable file might be covered by the GNU General Public License. */ ! #ifndef __gthr_win32_h ! #define __gthr_win32_h /* Windows32 threads specific definitions. The windows32 threading model does not map well into pthread-inspired gcc's threading model, and so --- 27,34 ---- This exception does not however invalidate any other reasons why the executable file might be covered by the GNU General Public License. */ ! #ifndef GCC_GTHR_WIN32_H ! #define GCC_GTHR_WIN32_H /* Windows32 threads specific definitions. The windows32 threading model does not map well into pthread-inspired gcc's threading model, and so *************** Boston, MA 02111-1307, USA. */ *** 64,70 **** #define __GTHREADS 1 - #include #include #ifdef __MINGW32__ #include <_mingw.h> --- 64,69 ---- *************** Boston, MA 02111-1307, USA. */ *** 72,83 **** #ifdef _LIBOBJC /* Key structure for maintaining thread specific storage */ static DWORD __gthread_objc_data_tls = (DWORD)-1; /* Backend initialization functions */ ! /* Initialize the threads subsystem. */ int __gthread_objc_init_thread_system(void) { --- 71,91 ---- #ifdef _LIBOBJC + /* This is necessary to prevent windef.h (included from windows.h) from + defining it's own BOOL as a typedef. */ + #ifndef __OBJC__ + #define __OBJC__ + #endif + #include + /* Now undef the windows BOOL. */ + #undef BOOL + /* Key structure for maintaining thread specific storage */ static DWORD __gthread_objc_data_tls = (DWORD)-1; /* Backend initialization functions */ ! /* Initialize the threads subsystem. */ int __gthread_objc_init_thread_system(void) { *************** __gthread_objc_init_thread_system(void) *** 88,94 **** return -1; } ! /* Close the threads subsystem. */ int __gthread_objc_close_thread_system(void) { --- 96,102 ---- return -1; } ! /* Close the threads subsystem. */ int __gthread_objc_close_thread_system(void) { *************** __gthread_objc_close_thread_system(void) *** 99,105 **** /* Backend thread functions */ ! /* Create a new thread of execution. */ objc_thread_t __gthread_objc_thread_detach(void (*func)(void *arg), void *arg) { --- 107,113 ---- /* Backend thread functions */ ! /* Create a new thread of execution. */ objc_thread_t __gthread_objc_thread_detach(void (*func)(void *arg), void *arg) { *************** __gthread_objc_thread_detach(void (*func *** 113,119 **** return (objc_thread_t)thread_id; } ! /* Set the current thread's priority. */ int __gthread_objc_thread_set_priority(int priority) { --- 121,127 ---- return (objc_thread_t)thread_id; } ! /* Set the current thread's priority. */ int __gthread_objc_thread_set_priority(int priority) { *************** __gthread_objc_thread_set_priority(int p *** 140,146 **** return -1; } ! /* Return the current thread's priority. */ int __gthread_objc_thread_get_priority(void) { --- 148,154 ---- return -1; } ! /* Return the current thread's priority. */ int __gthread_objc_thread_get_priority(void) { *************** __gthread_objc_thread_get_priority(void) *** 165,182 **** return OBJC_THREAD_LOW_PRIORITY; } ! /* Couldn't get priority. */ return -1; } ! /* Yield our process time to another thread. */ void __gthread_objc_thread_yield(void) { Sleep(0); } ! /* Terminate the current thread. */ int __gthread_objc_thread_exit(void) { --- 173,190 ---- return OBJC_THREAD_LOW_PRIORITY; } ! /* Couldn't get priority. */ return -1; } ! /* Yield our process time to another thread. */ void __gthread_objc_thread_yield(void) { Sleep(0); } ! /* Terminate the current thread. */ int __gthread_objc_thread_exit(void) { *************** __gthread_objc_thread_exit(void) *** 187,200 **** return -1; } ! /* Returns an integer value which uniquely describes a thread. */ objc_thread_t __gthread_objc_thread_id(void) { return (objc_thread_t)GetCurrentThreadId(); } ! /* Sets the thread's local storage pointer. */ int __gthread_objc_thread_set_data(void *value) { --- 195,208 ---- return -1; } ! /* Returns an integer value which uniquely describes a thread. */ objc_thread_t __gthread_objc_thread_id(void) { return (objc_thread_t)GetCurrentThreadId(); } ! /* Sets the thread's local storage pointer. */ int __gthread_objc_thread_set_data(void *value) { *************** __gthread_objc_thread_set_data(void *val *** 204,210 **** return -1; } ! /* Returns the thread's local storage pointer. */ void * __gthread_objc_thread_get_data(void) { --- 212,218 ---- return -1; } ! /* Returns the thread's local storage pointer. */ void * __gthread_objc_thread_get_data(void) { *************** __gthread_objc_thread_get_data(void) *** 213,219 **** lasterror = GetLastError(); ! ptr = TlsGetValue(__gthread_objc_data_tls); /* Return thread data. */ SetLastError( lasterror ); --- 221,227 ---- lasterror = GetLastError(); ! ptr = TlsGetValue(__gthread_objc_data_tls); /* Return thread data. */ SetLastError( lasterror ); *************** __gthread_objc_thread_get_data(void) *** 222,228 **** /* Backend mutex functions */ ! /* Allocate a mutex. */ int __gthread_objc_mutex_allocate(objc_mutex_t mutex) { --- 230,236 ---- /* Backend mutex functions */ ! /* Allocate a mutex. */ int __gthread_objc_mutex_allocate(objc_mutex_t mutex) { *************** __gthread_objc_mutex_allocate(objc_mutex *** 232,238 **** return 0; } ! /* Deallocate a mutex. */ int __gthread_objc_mutex_deallocate(objc_mutex_t mutex) { --- 240,246 ---- return 0; } ! /* Deallocate a mutex. */ int __gthread_objc_mutex_deallocate(objc_mutex_t mutex) { *************** __gthread_objc_mutex_deallocate(objc_mut *** 240,246 **** return 0; } ! /* Grab a lock on a mutex. */ int __gthread_objc_mutex_lock(objc_mutex_t mutex) { --- 248,254 ---- return 0; } ! /* Grab a lock on a mutex. */ int __gthread_objc_mutex_lock(objc_mutex_t mutex) { *************** __gthread_objc_mutex_lock(objc_mutex_t m *** 253,259 **** return 0; } ! /* Try to grab a lock on a mutex. */ int __gthread_objc_mutex_trylock(objc_mutex_t mutex) { --- 261,267 ---- return 0; } ! /* Try to grab a lock on a mutex. */ int __gthread_objc_mutex_trylock(objc_mutex_t mutex) { *************** __gthread_objc_mutex_unlock(objc_mutex_t *** 278,296 **** /* Backend condition mutex functions */ ! /* Allocate a condition. */ int __gthread_objc_condition_allocate(objc_condition_t condition) { ! /* Unimplemented. */ return -1; } ! /* Deallocate a condition. */ int __gthread_objc_condition_deallocate(objc_condition_t condition) { ! /* Unimplemented. */ return -1; } --- 286,304 ---- /* Backend condition mutex functions */ ! /* Allocate a condition. */ int __gthread_objc_condition_allocate(objc_condition_t condition) { ! /* Unimplemented. */ return -1; } ! /* Deallocate a condition. */ int __gthread_objc_condition_deallocate(objc_condition_t condition) { ! /* Unimplemented. */ return -1; } *************** __gthread_objc_condition_deallocate(objc *** 298,328 **** int __gthread_objc_condition_wait(objc_condition_t condition, objc_mutex_t mutex) { ! /* Unimplemented. */ return -1; } ! /* Wake up all threads waiting on this condition. */ int __gthread_objc_condition_broadcast(objc_condition_t condition) { ! /* Unimplemented. */ return -1; } ! /* Wake up one thread waiting on this condition. */ int __gthread_objc_condition_signal(objc_condition_t condition) { ! /* Unimplemented. */ return -1; } #else /* _LIBOBJC */ ! #ifdef __MINGW32__ ! #include <_mingw.h> ! #endif typedef DWORD __gthread_key_t; --- 306,334 ---- int __gthread_objc_condition_wait(objc_condition_t condition, objc_mutex_t mutex) { ! /* Unimplemented. */ return -1; } ! /* Wake up all threads waiting on this condition. */ int __gthread_objc_condition_broadcast(objc_condition_t condition) { ! /* Unimplemented. */ return -1; } ! /* Wake up one thread waiting on this condition. */ int __gthread_objc_condition_signal(objc_condition_t condition) { ! /* Unimplemented. */ return -1; } #else /* _LIBOBJC */ ! #include typedef DWORD __gthread_key_t; *************** typedef HANDLE __gthread_mutex_t; *** 339,345 **** #if __MINGW32_MAJOR_VERSION >= 1 || \ (__MINGW32_MAJOR_VERSION == 0 && __MINGW32_MINOR_VERSION > 2) #define MINGW32_SUPPORTS_MT_EH 1 ! extern int __mingwthr_key_dtor PARAMS ((DWORD, void (*) (void *))); /* Mingw runtime >= v0.3 provides a magic variable that is set to non-zero if -mthreads option was specified, or 0 otherwise. This is to get around the lack of weak symbols in PE-COFF. */ --- 345,358 ---- #if __MINGW32_MAJOR_VERSION >= 1 || \ (__MINGW32_MAJOR_VERSION == 0 && __MINGW32_MINOR_VERSION > 2) #define MINGW32_SUPPORTS_MT_EH 1 ! #ifdef __cplusplus ! extern "C" { ! #endif ! extern int __mingwthr_key_dtor (DWORD, void (*) (void *)); ! #ifdef __cplusplus ! } ! #endif ! /* Mingw runtime >= v0.3 provides a magic variable that is set to non-zero if -mthreads option was specified, or 0 otherwise. This is to get around the lack of weak symbols in PE-COFF. */ *************** __gthread_key_create (__gthread_key_t *k *** 413,419 **** static inline int __gthread_key_dtor (__gthread_key_t key, void *ptr) { ! /* Nothing needed. */ return 0; } --- 426,432 ---- static inline int __gthread_key_dtor (__gthread_key_t key, void *ptr) { ! /* Nothing needed. */ return 0; } *************** __gthread_mutex_unlock (__gthread_mutex_ *** 492,496 **** #endif /* _LIBOBJC */ ! #endif /* not __gthr_win32_h */ --- 505,509 ---- #endif /* _LIBOBJC */ ! #endif /* ! GCC_GTHR_WIN32_H */ diff -Nrc3pad gcc-3.0.4/gcc/gthr.h gcc-3.1/gcc/gthr.h *** gcc-3.0.4/gcc/gthr.h Thu Jan 27 18:49:12 2000 --- gcc-3.1/gcc/gthr.h Sun Oct 28 12:42:03 2001 *************** *** 2,23 **** /* Compile this one with gcc. */ /* Copyright (C) 1997, 1998 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. */ /* As a special exception, if you link this library with other files, some of which are compiled with GCC, to produce an executable, --- 2,23 ---- /* Compile this one with gcc. */ /* Copyright (C) 1997, 1998 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* As a special exception, if you link this library with other files, some of which are compiled with GCC, to produce an executable, *************** Boston, MA 02111-1307, USA. */ *** 26,33 **** This exception does not however invalidate any other reasons why the executable file might be covered by the GNU General Public License. */ ! #ifndef __gthr_h ! #define __gthr_h /* If this file is compiled with threads support, it must #define __GTHREADS 1 --- 26,33 ---- This exception does not however invalidate any other reasons why the executable file might be covered by the GNU General Public License. */ ! #ifndef GCC_GTHR_H ! #define GCC_GTHR_H /* If this file is compiled with threads support, it must #define __GTHREADS 1 *************** Boston, MA 02111-1307, USA. */ *** 49,55 **** to initialize __gthread_mutex_t to get a fast non-recursive mutex. __GTHREAD_MUTEX_INIT_FUNCTION ! some systems can't initalize a mutex without a function call. On such systems, define this to a function which looks like this: void __GTHREAD_MUTEX_INIT_FUNCTION (__gthread_mutex_t *) --- 49,55 ---- to initialize __gthread_mutex_t to get a fast non-recursive mutex. __GTHREAD_MUTEX_INIT_FUNCTION ! some systems can't initialize a mutex without a function call. On such systems, define this to a function which looks like this: void __GTHREAD_MUTEX_INIT_FUNCTION (__gthread_mutex_t *) *************** Boston, MA 02111-1307, USA. */ *** 80,86 **** Solaris/UI threads with -D_SOLARIS_THREADS */ ! /* Check first for thread specific defines. */ #if _PTHREADS #include "gthr-posix.h" #elif _DCE_THREADS --- 80,86 ---- Solaris/UI threads with -D_SOLARIS_THREADS */ ! /* Check first for thread specific defines. */ #if _PTHREADS #include "gthr-posix.h" #elif _DCE_THREADS *************** Boston, MA 02111-1307, USA. */ *** 88,94 **** #elif _SOLARIS_THREADS #include "gthr-solaris.h" ! /* Include GTHREAD_FILE if one is defined. */ #elif defined(HAVE_GTHR_DEFAULT) #if SUPPORTS_WEAK #ifndef GTHREAD_USE_WEAK --- 88,94 ---- #elif _SOLARIS_THREADS #include "gthr-solaris.h" ! /* Include GTHREAD_FILE if one is defined. */ #elif defined(HAVE_GTHR_DEFAULT) #if SUPPORTS_WEAK #ifndef GTHREAD_USE_WEAK *************** Boston, MA 02111-1307, USA. */ *** 97,105 **** #endif #include "gthr-default.h" ! /* Fallback to single thread definitions. */ #else #include "gthr-single.h" #endif ! #endif /* not __gthr_h */ --- 97,105 ---- #endif #include "gthr-default.h" ! /* Fallback to single thread definitions. */ #else #include "gthr-single.h" #endif ! #endif /* ! GCC_GTHR_H */ diff -Nrc3pad gcc-3.0.4/gcc/haifa-sched.c gcc-3.1/gcc/haifa-sched.c *** gcc-3.0.4/gcc/haifa-sched.c Sat May 12 20:32:36 2001 --- gcc-3.1/gcc/haifa-sched.c Thu Feb 28 18:29:05 2002 *************** *** 1,24 **** /* Instruction scheduling pass. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) Enhanced by, and currently maintained by, Jim Wilson (wilson@cygnus.com) ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it ! under the terms of the GNU General Public License as published by the ! Free Software Foundation; either version 2, or (at your option) any ! later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ! ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free ! the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Instruction scheduling pass. This file, along with sched-deps.c, --- 1,24 ---- /* Instruction scheduling pass. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) Enhanced by, and currently maintained by, Jim Wilson (wilson@cygnus.com) ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Instruction scheduling pass. This file, along with sched-deps.c, *************** the Free Software Foundation, 59 Temple *** 148,153 **** --- 148,154 ---- #include "toplev.h" #include "recog.h" #include "sched-int.h" + #include "target.h" #ifdef INSN_SCHEDULING *************** the Free Software Foundation, 59 Temple *** 157,166 **** static int issue_rate; - #ifndef ISSUE_RATE - #define ISSUE_RATE 1 - #endif - /* sched-verbose controls the amount of debugging output the scheduler prints. It is controlled by -fsched-verbose=N: N>0 and no -DSR : the output is directed to stderr. --- 158,163 ---- *************** HAIFA_INLINE int *** 363,369 **** insn_unit (insn) rtx insn; { ! register int unit = INSN_UNIT (insn); if (unit == 0) { --- 360,366 ---- insn_unit (insn) rtx insn; { ! int unit = INSN_UNIT (insn); if (unit == 0) { *************** HAIFA_INLINE int *** 649,655 **** insn_cost (insn, link, used) rtx insn, link, used; { ! register int cost = INSN_COST (insn); if (cost == 0) { --- 646,652 ---- insn_cost (insn, link, used) rtx insn, link, used; { ! int cost = INSN_COST (insn); if (cost == 0) { *************** insn_cost (insn, link, used) *** 693,704 **** if (LINK_COST_FREE (link)) cost = 0; ! #ifdef ADJUST_COST ! else if (!LINK_COST_ZERO (link)) { ! int ncost = cost; - ADJUST_COST (used, link, insn, ncost); if (ncost < 1) { LINK_COST_FREE (link) = 1; --- 690,699 ---- if (LINK_COST_FREE (link)) cost = 0; ! else if (!LINK_COST_ZERO (link) && targetm.sched.adjust_cost) { ! int ncost = (*targetm.sched.adjust_cost) (used, link, insn, cost); if (ncost < 1) { LINK_COST_FREE (link) = 1; *************** insn_cost (insn, link, used) *** 708,714 **** LINK_COST_ZERO (link) = 1; cost = ncost; } ! #endif return cost; } --- 703,709 ---- LINK_COST_ZERO (link) = 1; cost = ncost; } ! return cost; } *************** ready_sort (ready) *** 952,958 **** HAIFA_INLINE static void adjust_priority (prev) ! rtx prev ATTRIBUTE_UNUSED; { /* ??? There used to be code here to try and estimate how an insn affected register lifetimes, but it did it by looking at REG_DEAD --- 947,953 ---- HAIFA_INLINE static void adjust_priority (prev) ! rtx prev; { /* ??? There used to be code here to try and estimate how an insn affected register lifetimes, but it did it by looking at REG_DEAD *************** adjust_priority (prev) *** 961,969 **** Revisit when we have a machine model to work with and not before. */ ! #ifdef ADJUST_PRIORITY ! ADJUST_PRIORITY (prev); ! #endif } /* Clock at which the previous instruction was issued. */ --- 956,964 ---- Revisit when we have a machine model to work with and not before. */ ! if (targetm.sched.adjust_priority) ! INSN_PRIORITY (prev) = ! (*targetm.sched.adjust_priority) (prev, INSN_PRIORITY (prev)); } /* Clock at which the previous instruction was issued. */ *************** unlink_other_notes (insn, tail) *** 1071,1078 **** PREV_INSN (next) = prev; /* See sched_analyze to see how these are handled. */ ! if (NOTE_LINE_NUMBER (insn) != NOTE_INSN_SETJMP ! && NOTE_LINE_NUMBER (insn) != NOTE_INSN_LOOP_BEG && NOTE_LINE_NUMBER (insn) != NOTE_INSN_LOOP_END && NOTE_LINE_NUMBER (insn) != NOTE_INSN_RANGE_BEG && NOTE_LINE_NUMBER (insn) != NOTE_INSN_RANGE_END --- 1066,1072 ---- PREV_INSN (next) = prev; /* See sched_analyze to see how these are handled. */ ! if (NOTE_LINE_NUMBER (insn) != NOTE_INSN_LOOP_BEG && NOTE_LINE_NUMBER (insn) != NOTE_INSN_LOOP_END && NOTE_LINE_NUMBER (insn) != NOTE_INSN_RANGE_BEG && NOTE_LINE_NUMBER (insn) != NOTE_INSN_RANGE_END *************** rm_line_notes (head, tail) *** 1203,1209 **** } /* Save line number notes for each insn in block B. HEAD and TAIL are ! the boundaries of the block in which notes should be processed.*/ void save_line_notes (b, head, tail) --- 1197,1203 ---- } /* Save line number notes for each insn in block B. HEAD and TAIL are ! the boundaries of the block in which notes should be processed. */ void save_line_notes (b, head, tail) *************** save_line_notes (b, head, tail) *** 1231,1237 **** /* After a block was scheduled, insert line notes into the insns list. HEAD and TAIL are the boundaries of the block in which notes should ! be processed.*/ void restore_line_notes (head, tail) --- 1225,1231 ---- /* After a block was scheduled, insert line notes into the insns list. HEAD and TAIL are the boundaries of the block in which notes should ! be processed. */ void restore_line_notes (head, tail) *************** queue_to_ready (ready) *** 1468,1474 **** of the pending insns at that point to the ready list. */ if (ready->n_ready == 0) { ! register int stalls; for (stalls = 1; stalls < INSN_QUEUE_SIZE; stalls++) { --- 1462,1468 ---- of the pending insns at that point to the ready list. */ if (ready->n_ready == 0) { ! int stalls; for (stalls = 1; stalls < INSN_QUEUE_SIZE; stalls++) { *************** move_insn1 (insn, last) *** 1537,1543 **** return insn; } ! /* Search INSN for REG_SAVE_NOTE note pairs for NOTE_INSN_SETJMP, NOTE_INSN_{LOOP,EHREGION}_{BEG,END}; and convert them back into NOTEs. The REG_SAVE_NOTE note following first one is contains the saved value for NOTE_BLOCK_NUMBER which is useful for --- 1531,1537 ---- return insn; } ! /* Search INSN for REG_SAVE_NOTE note pairs for NOTE_INSN_{LOOP,EHREGION}_{BEG,END}; and convert them back into NOTEs. The REG_SAVE_NOTE note following first one is contains the saved value for NOTE_BLOCK_NUMBER which is useful for *************** reemit_notes (insn, last) *** 1558,1572 **** { enum insn_note note_type = INTVAL (XEXP (note, 0)); ! if (note_type == NOTE_INSN_SETJMP) ! { ! retval = emit_note_after (NOTE_INSN_SETJMP, insn); ! CONST_CALL_P (retval) = CONST_CALL_P (note); ! remove_note (insn, note); ! note = XEXP (note, 1); ! } ! else if (note_type == NOTE_INSN_RANGE_BEG ! || note_type == NOTE_INSN_RANGE_END) { last = emit_note_before (note_type, last); remove_note (insn, note); --- 1552,1559 ---- { enum insn_note note_type = INTVAL (XEXP (note, 0)); ! if (note_type == NOTE_INSN_RANGE_BEG ! || note_type == NOTE_INSN_RANGE_END) { last = emit_note_before (note_type, last); remove_note (insn, note); *************** move_insn (insn, last) *** 1630,1635 **** --- 1617,1634 ---- return retval; } + /* Called from backends from targetm.sched.reorder to emit stuff into + the instruction stream. */ + + rtx + sched_emit_insn (pat) + rtx pat; + { + rtx insn = emit_insn_after (pat, last_scheduled_insn); + last_scheduled_insn = insn; + return insn; + } + /* Use forward list scheduling to rearrange insns of block B in region RGN, possibly bringing insns from subsequent blocks in the same region. */ *************** schedule_block (b, rgn_n_insns) *** 1638,1644 **** int b; int rgn_n_insns; { - rtx last; struct ready_list ready; int can_issue_more; --- 1637,1642 ---- *************** schedule_block (b, rgn_n_insns) *** 1676,1694 **** clear_units (); /* Allocate the ready list. */ ! ready.veclen = rgn_n_insns + 1 + ISSUE_RATE; ready.first = ready.veclen - 1; ready.vec = (rtx *) xmalloc (ready.veclen * sizeof (rtx)); ready.n_ready = 0; (*current_sched_info->init_ready_list) (&ready); ! #ifdef MD_SCHED_INIT ! MD_SCHED_INIT (sched_dump, sched_verbose, ready.veclen); ! #endif ! /* No insns scheduled in this block yet. */ ! last_scheduled_insn = 0; /* Initialize INSN_QUEUE. Q_SIZE is the total number of insns in the queue. */ --- 1674,1691 ---- clear_units (); /* Allocate the ready list. */ ! ready.veclen = rgn_n_insns + 1 + issue_rate; ready.first = ready.veclen - 1; ready.vec = (rtx *) xmalloc (ready.veclen * sizeof (rtx)); ready.n_ready = 0; (*current_sched_info->init_ready_list) (&ready); ! if (targetm.sched.md_init) ! (*targetm.sched.md_init) (sched_dump, sched_verbose, ready.veclen); ! /* We start inserting insns after PREV_HEAD. */ ! last_scheduled_insn = prev_head; /* Initialize INSN_QUEUE. Q_SIZE is the total number of insns in the queue. */ *************** schedule_block (b, rgn_n_insns) *** 1700,1708 **** /* Start just before the beginning of time. */ clock_var = -1; - /* We start inserting insns after PREV_HEAD. */ - last = prev_head; - /* Loop until all the insns in BB are scheduled. */ while ((*current_sched_info->schedule_more_p) ()) { --- 1697,1702 ---- *************** schedule_block (b, rgn_n_insns) *** 1714,1724 **** list. */ queue_to_ready (&ready); - #ifdef HAVE_cycle_display - if (HAVE_cycle_display) - last = emit_insn_after (gen_cycle_display (GEN_INT (clock_var)), last); - #endif - if (ready.n_ready == 0) abort (); --- 1708,1713 ---- *************** schedule_block (b, rgn_n_insns) *** 1733,1744 **** /* Allow the target to reorder the list, typically for better instruction bundling. */ ! #ifdef MD_SCHED_REORDER ! MD_SCHED_REORDER (sched_dump, sched_verbose, ready_lastpos (&ready), ! ready.n_ready, clock_var, can_issue_more); ! #else ! can_issue_more = issue_rate; ! #endif if (sched_verbose) { --- 1722,1738 ---- /* Allow the target to reorder the list, typically for better instruction bundling. */ ! if (targetm.sched.reorder) ! can_issue_more = ! (*targetm.sched.reorder) (sched_dump, sched_verbose, ! ready_lastpos (&ready), ! &ready.n_ready, clock_var); ! else ! can_issue_more = issue_rate; ! ! if (sched_verbose && targetm.sched.cycle_display) ! last_scheduled_insn ! = (*targetm.sched.cycle_display) (clock_var, last_scheduled_insn); if (sched_verbose) { *************** schedule_block (b, rgn_n_insns) *** 1764,1791 **** if (! (*current_sched_info->can_schedule_ready_p) (insn)) goto next; ! last_scheduled_insn = insn; ! last = move_insn (insn, last); ! #ifdef MD_SCHED_VARIABLE_ISSUE ! MD_SCHED_VARIABLE_ISSUE (sched_dump, sched_verbose, insn, ! can_issue_more); ! #else ! can_issue_more--; ! #endif schedule_insn (insn, &ready, clock_var); next: ! ; ! #ifdef MD_SCHED_REORDER2 ! /* Sort the ready list based on priority. */ ! if (ready.n_ready > 0) ! ready_sort (&ready); ! MD_SCHED_REORDER2 (sched_dump, sched_verbose, ! ready.n_ready ? ready_lastpos (&ready) : NULL, ! ready.n_ready, clock_var, can_issue_more); ! #endif } /* Debug info. */ --- 1758,1786 ---- if (! (*current_sched_info->can_schedule_ready_p) (insn)) goto next; ! last_scheduled_insn = move_insn (insn, last_scheduled_insn); ! if (targetm.sched.variable_issue) ! can_issue_more = ! (*targetm.sched.variable_issue) (sched_dump, sched_verbose, ! insn, can_issue_more); ! else ! can_issue_more--; schedule_insn (insn, &ready, clock_var); next: ! if (targetm.sched.reorder2) ! { ! /* Sort the ready list based on priority. */ ! if (ready.n_ready > 0) ! ready_sort (&ready); ! can_issue_more = ! (*targetm.sched.reorder2) (sched_dump,sched_verbose, ! ready.n_ready ! ? ready_lastpos (&ready) : NULL, ! &ready.n_ready, clock_var); ! } } /* Debug info. */ *************** schedule_block (b, rgn_n_insns) *** 1793,1801 **** visualize_scheduled_insns (clock_var); } ! #ifdef MD_SCHED_FINISH ! MD_SCHED_FINISH (sched_dump, sched_verbose); ! #endif /* Debug info. */ if (sched_verbose) --- 1788,1795 ---- visualize_scheduled_insns (clock_var); } ! if (targetm.sched.md_finish) ! (*targetm.sched.md_finish) (sched_dump, sched_verbose); /* Debug info. */ if (sched_verbose) *************** schedule_block (b, rgn_n_insns) *** 1812,1818 **** /* Update head/tail boundaries. */ head = NEXT_INSN (prev_head); ! tail = last; /* Restore-other-notes: NOTE_LIST is the end of a chain of notes previously found among the insns. Insert them at the beginning --- 1806,1812 ---- /* Update head/tail boundaries. */ head = NEXT_INSN (prev_head); ! tail = last_scheduled_insn; /* Restore-other-notes: NOTE_LIST is the end of a chain of notes previously found among the insns. Insert them at the beginning *************** sched_init (dump_file) *** 1904,1912 **** ? stderr : dump_file); /* Initialize issue_rate. */ ! issue_rate = ISSUE_RATE; ! ! split_all_insns (1); /* We use LUID 0 for the fake insn (UID 0) which holds dependencies for pseudos which do not cross calls. */ --- 1898,1907 ---- ? stderr : dump_file); /* Initialize issue_rate. */ ! if (targetm.sched.issue_rate) ! issue_rate = (*targetm.sched.issue_rate) (); ! else ! issue_rate = 1; /* We use LUID 0 for the fake insn (UID 0) which holds dependencies for pseudos which do not cross calls. */ *************** sched_init (dump_file) *** 1971,1977 **** } } ! /* Find units used in this fuction, for visualization. */ if (sched_verbose) init_target_units (); --- 1966,1972 ---- } } ! /* Find units used in this function, for visualization. */ if (sched_verbose) init_target_units (); *************** sched_init (dump_file) *** 1984,1990 **** && GET_CODE (insn) != CODE_LABEL /* Don't emit a NOTE if it would end up before a BARRIER. */ && GET_CODE (NEXT_INSN (insn)) != BARRIER)) ! emit_note_after (NOTE_INSN_DELETED, BLOCK_END (n_basic_blocks - 1)); /* Compute INSN_REG_WEIGHT for all blocks. We must do this before removing death notes. */ --- 1979,1989 ---- && GET_CODE (insn) != CODE_LABEL /* Don't emit a NOTE if it would end up before a BARRIER. */ && GET_CODE (NEXT_INSN (insn)) != BARRIER)) ! { ! emit_note_after (NOTE_INSN_DELETED, BLOCK_END (n_basic_blocks - 1)); ! /* Make insn to appear outside BB. */ ! BLOCK_END (n_basic_blocks - 1) = PREV_INSN (BLOCK_END (n_basic_blocks - 1)); ! } /* Compute INSN_REG_WEIGHT for all blocks. We must do this before removing death notes. */ diff -Nrc3pad gcc-3.0.4/gcc/halfpic.c gcc-3.1/gcc/halfpic.c *** gcc-3.0.4/gcc/halfpic.c Tue Sep 7 05:47:55 1999 --- gcc-3.1/gcc/halfpic.c Mon Dec 17 15:05:22 2001 *************** *** 1,22 **** /* OSF/rose half-pic support functions. Copyright (C) 1992, 1997, 1998, 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. */ /* The OSF/rose half-pic model assumes that the non-library code does not need to have full PIC (position independent code), but rather, --- 1,22 ---- /* OSF/rose half-pic support functions. Copyright (C) 1992, 1997, 1998, 1999 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* The OSF/rose half-pic model assumes that the non-library code does not need to have full PIC (position independent code), but rather, *************** Boston, MA 02111-1307, USA. */ *** 35,53 **** #include "system.h" #include "tree.h" #include "rtl.h" #include "obstack.h" #define obstack_chunk_alloc xmalloc #define obstack_chunk_free free - extern rtx eliminate_constant_term (); - extern void assemble_name (); - extern void output_addr_const (); - int flag_half_pic = 0; /* Global half-pic flag. */ int half_pic_number_ptrs = 0; /* # distinct pointers found */ int half_pic_number_refs = 0; /* # half-pic references */ ! int (*ptr_half_pic_address_p)() = half_pic_address_p; /* Obstack to hold generated pic names. */ static struct obstack half_pic_obstack; --- 35,52 ---- #include "system.h" #include "tree.h" #include "rtl.h" + #include "expr.h" + #include "output.h" #include "obstack.h" + #include "halfpic.h" #define obstack_chunk_alloc xmalloc #define obstack_chunk_free free int flag_half_pic = 0; /* Global half-pic flag. */ int half_pic_number_ptrs = 0; /* # distinct pointers found */ int half_pic_number_refs = 0; /* # half-pic references */ ! int (*ptr_half_pic_address_p) PARAMS ((rtx)) = half_pic_address_p; /* Obstack to hold generated pic names. */ static struct obstack half_pic_obstack; *************** struct all_refs { *** 59,73 **** struct all_refs *next; /* next name created */ int external_p; /* name is an external reference */ int pointer_p; /* pointer created. */ ! char *ref_name; /* reference name to ptr to real_name */ int ref_len; /* reference name length */ ! char *real_name; /* real function/data name */ int real_len; /* strlen (real_name) */ }; static struct all_refs *half_pic_names; ! static char *half_pic_prefix; static int half_pic_prefix_len; --- 58,72 ---- struct all_refs *next; /* next name created */ int external_p; /* name is an external reference */ int pointer_p; /* pointer created. */ ! const char *ref_name; /* reference name to ptr to real_name */ int ref_len; /* reference name length */ ! const char *real_name; /* real function/data name */ int real_len; /* strlen (real_name) */ }; static struct all_refs *half_pic_names; ! static const char *half_pic_prefix; static int half_pic_prefix_len; *************** static int half_pic_prefix_len; *** 83,98 **** #define HASHBITS 30 static struct all_refs * half_pic_hash (name, len, create_p) ! char *name; /* name to hash */ int len; /* length of the name (or 0 to call strlen) */ int create_p; /* != 0 to create new hash bucket if new */ { static struct all_refs *hash_table[MAX_HASH_TABLE]; static struct all_refs zero_all_refs; ! unsigned char *uname; int hash; int i; int ch; --- 82,99 ---- #define HASHBITS 30 + static struct all_refs *half_pic_hash PARAMS ((const char *, int, int)); + static struct all_refs * half_pic_hash (name, len, create_p) ! const char *name; /* name to hash */ int len; /* length of the name (or 0 to call strlen) */ int create_p; /* != 0 to create new hash bucket if new */ { static struct all_refs *hash_table[MAX_HASH_TABLE]; static struct all_refs zero_all_refs; ! const unsigned char *uname; int hash; int i; int ch; *************** half_pic_hash (name, len, create_p) *** 103,109 **** len = strlen (name); /* Compute hash code */ ! uname = (unsigned char *)name; ch = uname[0]; hash = len * 613 + ch; for (i = 1; i < len; i += 2) --- 104,110 ---- len = strlen (name); /* Compute hash code */ ! uname = (const unsigned char *)name; ch = uname[0]; hash = len * 613 + ch; for (i = 1; i < len; i += 2) *************** half_pic_finish (stream) *** 186,192 **** if (p->pointer_p) { ASM_OUTPUT_LABEL (stream, p->ref_name); ! ASM_OUTPUT_INT (stream, gen_rtx_SYMBOL_REF (Pmode, p->real_name)); } } } --- 187,194 ---- if (p->pointer_p) { ASM_OUTPUT_LABEL (stream, p->ref_name); ! assemble_aligned_integer (POINTER_SIZE / BITS_PER_UNIT, ! gen_rtx_SYMBOL_REF (Pmode, p->real_name)); } } } *************** half_pic_encode (decl) *** 246,252 **** void half_pic_declare (name) ! char *name; { struct all_refs *ptr; --- 248,254 ---- void half_pic_declare (name) ! const char *name; { struct all_refs *ptr; *************** half_pic_declare (name) *** 270,276 **** void half_pic_external (name) ! char *name; { struct all_refs *ptr; --- 272,278 ---- void half_pic_external (name) ! const char *name; { struct all_refs *ptr; *************** int *** 296,302 **** half_pic_address_p (addr) rtx addr; { ! char *name; int len; struct all_refs *ptr; --- 298,304 ---- half_pic_address_p (addr) rtx addr; { ! const char *name; int len; struct all_refs *ptr; *************** struct rtx_def * *** 363,369 **** half_pic_ptr (operand) rtx operand; { ! char *name; struct all_refs *p; int len; --- 365,371 ---- half_pic_ptr (operand) rtx operand; { ! const char *name; struct all_refs *p; int len; diff -Nrc3pad gcc-3.0.4/gcc/halfpic.h gcc-3.1/gcc/halfpic.h *** gcc-3.0.4/gcc/halfpic.h Sat Feb 26 13:50:42 2000 --- gcc-3.1/gcc/halfpic.h Mon Dec 31 06:03:23 2001 *************** *** 1,30 **** /* OSF/rose half-pic support definitions. Copyright (C) 1992, 1996, 1997, 1998, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #ifndef NO_HALF_PIC - #ifdef ANSI_PROTOTYPES - union tree_node; /* forward reference */ - struct rtx_def; - #endif - /* Declare the variable flag_half_pic as 'int' instead of 'extern int', so that BSS variables are created (even though this is not strict ANSI). This is because rtl.c now refers to the --- 1,25 ---- /* OSF/rose half-pic support definitions. Copyright (C) 1992, 1996, 1997, 1998, 2000 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #ifndef NO_HALF_PIC /* Declare the variable flag_half_pic as 'int' instead of 'extern int', so that BSS variables are created (even though this is not strict ANSI). This is because rtl.c now refers to the *************** struct rtx_def; *** 35,52 **** be true in the gen* programs). */ int flag_half_pic; /* Global half-pic flag. */ ! int (*ptr_half_pic_address_p) (); /* ptr to half_pic_address_p () */ extern int half_pic_number_ptrs; /* # distinct pointers found */ extern int half_pic_number_refs; /* # half-pic references */ ! extern void half_pic_encode PARAMS ((union tree_node *)); /* encode whether half-pic */ ! extern void half_pic_declare PARAMS ((char *)); /* declare object local */ ! extern void half_pic_external PARAMS ((char *)); /* declare object external */ extern void half_pic_init PARAMS ((void)); /* half_pic initialization */ extern int half_pic_address_p PARAMS ((struct rtx_def *)); /* true if an address is half-pic */ extern struct rtx_def *half_pic_ptr PARAMS ((struct rtx_def *)); /* return RTX for half-pic pointer */ ! /* Can't use prototype since FILE isn't defined yet. */ ! extern void half_pic_finish (/* FILE * */); /* half_pic termination */ /* Macros to provide access to the half-pic stuff (so they can easily be stubbed out. */ --- 30,48 ---- be true in the gen* programs). */ int flag_half_pic; /* Global half-pic flag. */ ! int (*ptr_half_pic_address_p) PARAMS ((struct rtx_def *)); /* ptr to half_pic_address_p () */ extern int half_pic_number_ptrs; /* # distinct pointers found */ extern int half_pic_number_refs; /* # half-pic references */ ! extern void half_pic_encode PARAMS ((union tree_node *)); /* encode whether half-pic */ ! extern void half_pic_declare PARAMS ((const char *)); /* declare object local */ ! extern void half_pic_external PARAMS ((const char *)); /* declare object external */ extern void half_pic_init PARAMS ((void)); /* half_pic initialization */ extern int half_pic_address_p PARAMS ((struct rtx_def *)); /* true if an address is half-pic */ extern struct rtx_def *half_pic_ptr PARAMS ((struct rtx_def *)); /* return RTX for half-pic pointer */ ! #ifdef BUFSIZ ! extern void half_pic_finish PARAMS ((FILE *)); /* half_pic termination */ ! #endif /* Macros to provide access to the half-pic stuff (so they can easily be stubbed out. */ diff -Nrc3pad gcc-3.0.4/gcc/hard-reg-set.h gcc-3.1/gcc/hard-reg-set.h *** gcc-3.0.4/gcc/hard-reg-set.h Sun Jan 7 10:38:29 2001 --- gcc-3.1/gcc/hard-reg-set.h Sun Dec 23 04:59:05 2001 *************** *** 1,25 **** /* Sets (bit vectors) of hard registers, and operations on them. Copyright (C) 1987, 1992, 1994, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ ! #ifndef _HARD_REG_SET_H ! #define _HARD_REG_SET_H 1 /* Define the type of a set of hard registers. */ --- 1,25 ---- /* Sets (bit vectors) of hard registers, and operations on them. Copyright (C) 1987, 1992, 1994, 2000 Free Software Foundation, Inc. ! This file is part of GCC ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ ! #ifndef GCC_HARD_REG_SET_H ! #define GCC_HARD_REG_SET_H /* Define the type of a set of hard registers. */ *************** typedef HARD_REG_ELT_TYPE HARD_REG_SET[H *** 127,179 **** #if FIRST_PSEUDO_REGISTER <= 2*HOST_BITS_PER_WIDE_INT #define CLEAR_HARD_REG_SET(TO) \ ! do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO); \ scan_tp_[0] = 0; \ scan_tp_[1] = 0; } while (0) #define SET_HARD_REG_SET(TO) \ ! do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO); \ scan_tp_[0] = -1; \ scan_tp_[1] = -1; } while (0) #define COPY_HARD_REG_SET(TO, FROM) \ ! do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ scan_tp_[0] = scan_fp_[0]; \ scan_tp_[1] = scan_fp_[1]; } while (0) #define COMPL_HARD_REG_SET(TO, FROM) \ ! do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ scan_tp_[0] = ~ scan_fp_[0]; \ scan_tp_[1] = ~ scan_fp_[1]; } while (0) #define AND_HARD_REG_SET(TO, FROM) \ ! do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ ! scan_tp_[0] &= scan_fp_[0]; \ scan_tp_[1] &= scan_fp_[1]; } while (0) #define AND_COMPL_HARD_REG_SET(TO, FROM) \ ! do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ scan_tp_[0] &= ~ scan_fp_[0]; \ scan_tp_[1] &= ~ scan_fp_[1]; } while (0) #define IOR_HARD_REG_SET(TO, FROM) \ ! do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ scan_tp_[0] |= scan_fp_[0]; \ scan_tp_[1] |= scan_fp_[1]; } while (0) #define IOR_COMPL_HARD_REG_SET(TO, FROM) \ ! do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ scan_tp_[0] |= ~ scan_fp_[0]; \ scan_tp_[1] |= ~ scan_fp_[1]; } while (0) #define GO_IF_HARD_REG_SUBSET(X,Y,TO) \ ! do { register HARD_REG_ELT_TYPE *scan_xp_ = (X), *scan_yp_ = (Y); \ if ((0 == (scan_xp_[0] & ~ scan_yp_[0])) \ && (0 == (scan_xp_[1] & ~ scan_yp_[1]))) \ goto TO; } while (0) #define GO_IF_HARD_REG_EQUAL(X,Y,TO) \ ! do { register HARD_REG_ELT_TYPE *scan_xp_ = (X), *scan_yp_ = (Y); \ if ((scan_xp_[0] == scan_yp_[0]) \ && (scan_xp_[1] == scan_yp_[1])) \ goto TO; } while (0) --- 127,179 ---- #if FIRST_PSEUDO_REGISTER <= 2*HOST_BITS_PER_WIDE_INT #define CLEAR_HARD_REG_SET(TO) \ ! do { HARD_REG_ELT_TYPE *scan_tp_ = (TO); \ scan_tp_[0] = 0; \ scan_tp_[1] = 0; } while (0) #define SET_HARD_REG_SET(TO) \ ! do { HARD_REG_ELT_TYPE *scan_tp_ = (TO); \ scan_tp_[0] = -1; \ scan_tp_[1] = -1; } while (0) #define COPY_HARD_REG_SET(TO, FROM) \ ! do { HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ scan_tp_[0] = scan_fp_[0]; \ scan_tp_[1] = scan_fp_[1]; } while (0) #define COMPL_HARD_REG_SET(TO, FROM) \ ! do { HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ scan_tp_[0] = ~ scan_fp_[0]; \ scan_tp_[1] = ~ scan_fp_[1]; } while (0) #define AND_HARD_REG_SET(TO, FROM) \ ! do { HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ ! scan_tp_[0] &= scan_fp_[0]; \ scan_tp_[1] &= scan_fp_[1]; } while (0) #define AND_COMPL_HARD_REG_SET(TO, FROM) \ ! do { HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ scan_tp_[0] &= ~ scan_fp_[0]; \ scan_tp_[1] &= ~ scan_fp_[1]; } while (0) #define IOR_HARD_REG_SET(TO, FROM) \ ! do { HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ scan_tp_[0] |= scan_fp_[0]; \ scan_tp_[1] |= scan_fp_[1]; } while (0) #define IOR_COMPL_HARD_REG_SET(TO, FROM) \ ! do { HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ scan_tp_[0] |= ~ scan_fp_[0]; \ scan_tp_[1] |= ~ scan_fp_[1]; } while (0) #define GO_IF_HARD_REG_SUBSET(X,Y,TO) \ ! do { HARD_REG_ELT_TYPE *scan_xp_ = (X), *scan_yp_ = (Y); \ if ((0 == (scan_xp_[0] & ~ scan_yp_[0])) \ && (0 == (scan_xp_[1] & ~ scan_yp_[1]))) \ goto TO; } while (0) #define GO_IF_HARD_REG_EQUAL(X,Y,TO) \ ! do { HARD_REG_ELT_TYPE *scan_xp_ = (X), *scan_yp_ = (Y); \ if ((scan_xp_[0] == scan_yp_[0]) \ && (scan_xp_[1] == scan_yp_[1])) \ goto TO; } while (0) *************** do { register HARD_REG_ELT_TYPE *scan_xp *** 181,242 **** #else #if FIRST_PSEUDO_REGISTER <= 3*HOST_BITS_PER_WIDE_INT #define CLEAR_HARD_REG_SET(TO) \ ! do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO); \ scan_tp_[0] = 0; \ scan_tp_[1] = 0; \ scan_tp_[2] = 0; } while (0) #define SET_HARD_REG_SET(TO) \ ! do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO); \ scan_tp_[0] = -1; \ scan_tp_[1] = -1; \ scan_tp_[2] = -1; } while (0) #define COPY_HARD_REG_SET(TO, FROM) \ ! do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ scan_tp_[0] = scan_fp_[0]; \ scan_tp_[1] = scan_fp_[1]; \ scan_tp_[2] = scan_fp_[2]; } while (0) #define COMPL_HARD_REG_SET(TO, FROM) \ ! do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ scan_tp_[0] = ~ scan_fp_[0]; \ scan_tp_[1] = ~ scan_fp_[1]; \ scan_tp_[2] = ~ scan_fp_[2]; } while (0) #define AND_HARD_REG_SET(TO, FROM) \ ! do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ ! scan_tp_[0] &= scan_fp_[0]; \ ! scan_tp_[1] &= scan_fp_[1]; \ scan_tp_[2] &= scan_fp_[2]; } while (0) #define AND_COMPL_HARD_REG_SET(TO, FROM) \ ! do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ scan_tp_[0] &= ~ scan_fp_[0]; \ scan_tp_[1] &= ~ scan_fp_[1]; \ scan_tp_[2] &= ~ scan_fp_[2]; } while (0) #define IOR_HARD_REG_SET(TO, FROM) \ ! do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ scan_tp_[0] |= scan_fp_[0]; \ scan_tp_[1] |= scan_fp_[1]; \ scan_tp_[2] |= scan_fp_[2]; } while (0) #define IOR_COMPL_HARD_REG_SET(TO, FROM) \ ! do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ scan_tp_[0] |= ~ scan_fp_[0]; \ scan_tp_[1] |= ~ scan_fp_[1]; \ scan_tp_[2] |= ~ scan_fp_[2]; } while (0) #define GO_IF_HARD_REG_SUBSET(X,Y,TO) \ ! do { register HARD_REG_ELT_TYPE *scan_xp_ = (X), *scan_yp_ = (Y); \ if ((0 == (scan_xp_[0] & ~ scan_yp_[0])) \ && (0 == (scan_xp_[1] & ~ scan_yp_[1])) \ && (0 == (scan_xp_[2] & ~ scan_yp_[2]))) \ goto TO; } while (0) #define GO_IF_HARD_REG_EQUAL(X,Y,TO) \ ! do { register HARD_REG_ELT_TYPE *scan_xp_ = (X), *scan_yp_ = (Y); \ if ((scan_xp_[0] == scan_yp_[0]) \ && (scan_xp_[1] == scan_yp_[1]) \ && (scan_xp_[2] == scan_yp_[2])) \ --- 181,242 ---- #else #if FIRST_PSEUDO_REGISTER <= 3*HOST_BITS_PER_WIDE_INT #define CLEAR_HARD_REG_SET(TO) \ ! do { HARD_REG_ELT_TYPE *scan_tp_ = (TO); \ scan_tp_[0] = 0; \ scan_tp_[1] = 0; \ scan_tp_[2] = 0; } while (0) #define SET_HARD_REG_SET(TO) \ ! do { HARD_REG_ELT_TYPE *scan_tp_ = (TO); \ scan_tp_[0] = -1; \ scan_tp_[1] = -1; \ scan_tp_[2] = -1; } while (0) #define COPY_HARD_REG_SET(TO, FROM) \ ! do { HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ scan_tp_[0] = scan_fp_[0]; \ scan_tp_[1] = scan_fp_[1]; \ scan_tp_[2] = scan_fp_[2]; } while (0) #define COMPL_HARD_REG_SET(TO, FROM) \ ! do { HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ scan_tp_[0] = ~ scan_fp_[0]; \ scan_tp_[1] = ~ scan_fp_[1]; \ scan_tp_[2] = ~ scan_fp_[2]; } while (0) #define AND_HARD_REG_SET(TO, FROM) \ ! do { HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ ! scan_tp_[0] &= scan_fp_[0]; \ ! scan_tp_[1] &= scan_fp_[1]; \ scan_tp_[2] &= scan_fp_[2]; } while (0) #define AND_COMPL_HARD_REG_SET(TO, FROM) \ ! do { HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ scan_tp_[0] &= ~ scan_fp_[0]; \ scan_tp_[1] &= ~ scan_fp_[1]; \ scan_tp_[2] &= ~ scan_fp_[2]; } while (0) #define IOR_HARD_REG_SET(TO, FROM) \ ! do { HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ scan_tp_[0] |= scan_fp_[0]; \ scan_tp_[1] |= scan_fp_[1]; \ scan_tp_[2] |= scan_fp_[2]; } while (0) #define IOR_COMPL_HARD_REG_SET(TO, FROM) \ ! do { HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ scan_tp_[0] |= ~ scan_fp_[0]; \ scan_tp_[1] |= ~ scan_fp_[1]; \ scan_tp_[2] |= ~ scan_fp_[2]; } while (0) #define GO_IF_HARD_REG_SUBSET(X,Y,TO) \ ! do { HARD_REG_ELT_TYPE *scan_xp_ = (X), *scan_yp_ = (Y); \ if ((0 == (scan_xp_[0] & ~ scan_yp_[0])) \ && (0 == (scan_xp_[1] & ~ scan_yp_[1])) \ && (0 == (scan_xp_[2] & ~ scan_yp_[2]))) \ goto TO; } while (0) #define GO_IF_HARD_REG_EQUAL(X,Y,TO) \ ! do { HARD_REG_ELT_TYPE *scan_xp_ = (X), *scan_yp_ = (Y); \ if ((scan_xp_[0] == scan_yp_[0]) \ && (scan_xp_[1] == scan_yp_[1]) \ && (scan_xp_[2] == scan_yp_[2])) \ *************** do { register HARD_REG_ELT_TYPE *scan_xp *** 245,307 **** #else #if FIRST_PSEUDO_REGISTER <= 4*HOST_BITS_PER_WIDE_INT #define CLEAR_HARD_REG_SET(TO) \ ! do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO); \ scan_tp_[0] = 0; \ scan_tp_[1] = 0; \ scan_tp_[2] = 0; \ scan_tp_[3] = 0; } while (0) #define SET_HARD_REG_SET(TO) \ ! do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO); \ scan_tp_[0] = -1; \ scan_tp_[1] = -1; \ scan_tp_[2] = -1; \ scan_tp_[3] = -1; } while (0) #define COPY_HARD_REG_SET(TO, FROM) \ ! do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ scan_tp_[0] = scan_fp_[0]; \ scan_tp_[1] = scan_fp_[1]; \ scan_tp_[2] = scan_fp_[2]; \ scan_tp_[3] = scan_fp_[3]; } while (0) #define COMPL_HARD_REG_SET(TO, FROM) \ ! do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ scan_tp_[0] = ~ scan_fp_[0]; \ scan_tp_[1] = ~ scan_fp_[1]; \ scan_tp_[2] = ~ scan_fp_[2]; \ scan_tp_[3] = ~ scan_fp_[3]; } while (0) #define AND_HARD_REG_SET(TO, FROM) \ ! do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ ! scan_tp_[0] &= scan_fp_[0]; \ ! scan_tp_[1] &= scan_fp_[1]; \ ! scan_tp_[2] &= scan_fp_[2]; \ scan_tp_[3] &= scan_fp_[3]; } while (0) #define AND_COMPL_HARD_REG_SET(TO, FROM) \ ! do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ scan_tp_[0] &= ~ scan_fp_[0]; \ scan_tp_[1] &= ~ scan_fp_[1]; \ scan_tp_[2] &= ~ scan_fp_[2]; \ scan_tp_[3] &= ~ scan_fp_[3]; } while (0) #define IOR_HARD_REG_SET(TO, FROM) \ ! do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ scan_tp_[0] |= scan_fp_[0]; \ scan_tp_[1] |= scan_fp_[1]; \ scan_tp_[2] |= scan_fp_[2]; \ scan_tp_[3] |= scan_fp_[3]; } while (0) #define IOR_COMPL_HARD_REG_SET(TO, FROM) \ ! do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ scan_tp_[0] |= ~ scan_fp_[0]; \ scan_tp_[1] |= ~ scan_fp_[1]; \ scan_tp_[2] |= ~ scan_fp_[2]; \ scan_tp_[3] |= ~ scan_fp_[3]; } while (0) #define GO_IF_HARD_REG_SUBSET(X,Y,TO) \ ! do { register HARD_REG_ELT_TYPE *scan_xp_ = (X), *scan_yp_ = (Y); \ if ((0 == (scan_xp_[0] & ~ scan_yp_[0])) \ && (0 == (scan_xp_[1] & ~ scan_yp_[1])) \ && (0 == (scan_xp_[2] & ~ scan_yp_[2])) \ --- 245,307 ---- #else #if FIRST_PSEUDO_REGISTER <= 4*HOST_BITS_PER_WIDE_INT #define CLEAR_HARD_REG_SET(TO) \ ! do { HARD_REG_ELT_TYPE *scan_tp_ = (TO); \ scan_tp_[0] = 0; \ scan_tp_[1] = 0; \ scan_tp_[2] = 0; \ scan_tp_[3] = 0; } while (0) #define SET_HARD_REG_SET(TO) \ ! do { HARD_REG_ELT_TYPE *scan_tp_ = (TO); \ scan_tp_[0] = -1; \ scan_tp_[1] = -1; \ scan_tp_[2] = -1; \ scan_tp_[3] = -1; } while (0) #define COPY_HARD_REG_SET(TO, FROM) \ ! do { HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ scan_tp_[0] = scan_fp_[0]; \ scan_tp_[1] = scan_fp_[1]; \ scan_tp_[2] = scan_fp_[2]; \ scan_tp_[3] = scan_fp_[3]; } while (0) #define COMPL_HARD_REG_SET(TO, FROM) \ ! do { HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ scan_tp_[0] = ~ scan_fp_[0]; \ scan_tp_[1] = ~ scan_fp_[1]; \ scan_tp_[2] = ~ scan_fp_[2]; \ scan_tp_[3] = ~ scan_fp_[3]; } while (0) #define AND_HARD_REG_SET(TO, FROM) \ ! do { HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ ! scan_tp_[0] &= scan_fp_[0]; \ ! scan_tp_[1] &= scan_fp_[1]; \ ! scan_tp_[2] &= scan_fp_[2]; \ scan_tp_[3] &= scan_fp_[3]; } while (0) #define AND_COMPL_HARD_REG_SET(TO, FROM) \ ! do { HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ scan_tp_[0] &= ~ scan_fp_[0]; \ scan_tp_[1] &= ~ scan_fp_[1]; \ scan_tp_[2] &= ~ scan_fp_[2]; \ scan_tp_[3] &= ~ scan_fp_[3]; } while (0) #define IOR_HARD_REG_SET(TO, FROM) \ ! do { HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ scan_tp_[0] |= scan_fp_[0]; \ scan_tp_[1] |= scan_fp_[1]; \ scan_tp_[2] |= scan_fp_[2]; \ scan_tp_[3] |= scan_fp_[3]; } while (0) #define IOR_COMPL_HARD_REG_SET(TO, FROM) \ ! do { HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ scan_tp_[0] |= ~ scan_fp_[0]; \ scan_tp_[1] |= ~ scan_fp_[1]; \ scan_tp_[2] |= ~ scan_fp_[2]; \ scan_tp_[3] |= ~ scan_fp_[3]; } while (0) #define GO_IF_HARD_REG_SUBSET(X,Y,TO) \ ! do { HARD_REG_ELT_TYPE *scan_xp_ = (X), *scan_yp_ = (Y); \ if ((0 == (scan_xp_[0] & ~ scan_yp_[0])) \ && (0 == (scan_xp_[1] & ~ scan_yp_[1])) \ && (0 == (scan_xp_[2] & ~ scan_yp_[2])) \ *************** do { register HARD_REG_ELT_TYPE *scan_xp *** 309,315 **** goto TO; } while (0) #define GO_IF_HARD_REG_EQUAL(X,Y,TO) \ ! do { register HARD_REG_ELT_TYPE *scan_xp_ = (X), *scan_yp_ = (Y); \ if ((scan_xp_[0] == scan_yp_[0]) \ && (scan_xp_[1] == scan_yp_[1]) \ && (scan_xp_[2] == scan_yp_[2]) \ --- 309,315 ---- goto TO; } while (0) #define GO_IF_HARD_REG_EQUAL(X,Y,TO) \ ! do { HARD_REG_ELT_TYPE *scan_xp_ = (X), *scan_yp_ = (Y); \ if ((scan_xp_[0] == scan_yp_[0]) \ && (scan_xp_[1] == scan_yp_[1]) \ && (scan_xp_[2] == scan_yp_[2]) \ *************** do { register HARD_REG_ELT_TYPE *scan_xp *** 319,381 **** #else /* FIRST_PSEUDO_REGISTER > 3*HOST_BITS_PER_WIDE_INT */ #define CLEAR_HARD_REG_SET(TO) \ ! do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO); \ ! register int i; \ for (i = 0; i < HARD_REG_SET_LONGS; i++) \ *scan_tp_++ = 0; } while (0) #define SET_HARD_REG_SET(TO) \ ! do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO); \ ! register int i; \ for (i = 0; i < HARD_REG_SET_LONGS; i++) \ *scan_tp_++ = -1; } while (0) #define COPY_HARD_REG_SET(TO, FROM) \ ! do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ ! register int i; \ for (i = 0; i < HARD_REG_SET_LONGS; i++) \ *scan_tp_++ = *scan_fp_++; } while (0) #define COMPL_HARD_REG_SET(TO, FROM) \ ! do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ ! register int i; \ for (i = 0; i < HARD_REG_SET_LONGS; i++) \ *scan_tp_++ = ~ *scan_fp_++; } while (0) #define AND_HARD_REG_SET(TO, FROM) \ ! do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ ! register int i; \ for (i = 0; i < HARD_REG_SET_LONGS; i++) \ *scan_tp_++ &= *scan_fp_++; } while (0) #define AND_COMPL_HARD_REG_SET(TO, FROM) \ ! do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ ! register int i; \ for (i = 0; i < HARD_REG_SET_LONGS; i++) \ *scan_tp_++ &= ~ *scan_fp_++; } while (0) #define IOR_HARD_REG_SET(TO, FROM) \ ! do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ ! register int i; \ for (i = 0; i < HARD_REG_SET_LONGS; i++) \ *scan_tp_++ |= *scan_fp_++; } while (0) #define IOR_COMPL_HARD_REG_SET(TO, FROM) \ ! do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ ! register int i; \ for (i = 0; i < HARD_REG_SET_LONGS; i++) \ *scan_tp_++ |= ~ *scan_fp_++; } while (0) #define GO_IF_HARD_REG_SUBSET(X,Y,TO) \ ! do { register HARD_REG_ELT_TYPE *scan_xp_ = (X), *scan_yp_ = (Y); \ ! register int i; \ for (i = 0; i < HARD_REG_SET_LONGS; i++) \ if (0 != (*scan_xp_++ & ~ *scan_yp_++)) break; \ if (i == HARD_REG_SET_LONGS) goto TO; } while (0) #define GO_IF_HARD_REG_EQUAL(X,Y,TO) \ ! do { register HARD_REG_ELT_TYPE *scan_xp_ = (X), *scan_yp_ = (Y); \ ! register int i; \ for (i = 0; i < HARD_REG_SET_LONGS; i++) \ if (*scan_xp_++ != *scan_yp_++) break; \ if (i == HARD_REG_SET_LONGS) goto TO; } while (0) --- 319,381 ---- #else /* FIRST_PSEUDO_REGISTER > 3*HOST_BITS_PER_WIDE_INT */ #define CLEAR_HARD_REG_SET(TO) \ ! do { HARD_REG_ELT_TYPE *scan_tp_ = (TO); \ ! int i; \ for (i = 0; i < HARD_REG_SET_LONGS; i++) \ *scan_tp_++ = 0; } while (0) #define SET_HARD_REG_SET(TO) \ ! do { HARD_REG_ELT_TYPE *scan_tp_ = (TO); \ ! int i; \ for (i = 0; i < HARD_REG_SET_LONGS; i++) \ *scan_tp_++ = -1; } while (0) #define COPY_HARD_REG_SET(TO, FROM) \ ! do { HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ ! int i; \ for (i = 0; i < HARD_REG_SET_LONGS; i++) \ *scan_tp_++ = *scan_fp_++; } while (0) #define COMPL_HARD_REG_SET(TO, FROM) \ ! do { HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ ! int i; \ for (i = 0; i < HARD_REG_SET_LONGS; i++) \ *scan_tp_++ = ~ *scan_fp_++; } while (0) #define AND_HARD_REG_SET(TO, FROM) \ ! do { HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ ! int i; \ for (i = 0; i < HARD_REG_SET_LONGS; i++) \ *scan_tp_++ &= *scan_fp_++; } while (0) #define AND_COMPL_HARD_REG_SET(TO, FROM) \ ! do { HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ ! int i; \ for (i = 0; i < HARD_REG_SET_LONGS; i++) \ *scan_tp_++ &= ~ *scan_fp_++; } while (0) #define IOR_HARD_REG_SET(TO, FROM) \ ! do { HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ ! int i; \ for (i = 0; i < HARD_REG_SET_LONGS; i++) \ *scan_tp_++ |= *scan_fp_++; } while (0) #define IOR_COMPL_HARD_REG_SET(TO, FROM) \ ! do { HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \ ! int i; \ for (i = 0; i < HARD_REG_SET_LONGS; i++) \ *scan_tp_++ |= ~ *scan_fp_++; } while (0) #define GO_IF_HARD_REG_SUBSET(X,Y,TO) \ ! do { HARD_REG_ELT_TYPE *scan_xp_ = (X), *scan_yp_ = (Y); \ ! int i; \ for (i = 0; i < HARD_REG_SET_LONGS; i++) \ if (0 != (*scan_xp_++ & ~ *scan_yp_++)) break; \ if (i == HARD_REG_SET_LONGS) goto TO; } while (0) #define GO_IF_HARD_REG_EQUAL(X,Y,TO) \ ! do { HARD_REG_ELT_TYPE *scan_xp_ = (X), *scan_yp_ = (Y); \ ! int i; \ for (i = 0; i < HARD_REG_SET_LONGS; i++) \ if (*scan_xp_++ != *scan_yp_++) break; \ if (i == HARD_REG_SET_LONGS) goto TO; } while (0) *************** extern HARD_REG_SET call_fixed_reg_set; *** 431,436 **** --- 431,445 ---- extern char global_regs[FIRST_PSEUDO_REGISTER]; + /* Contains 1 for registers that are set or clobbered by calls. */ + /* ??? Ideally, this would be just call_used_regs plus global_regs, but + for someone's bright idea to have call_used_regs strictly include + fixed_regs. Which leaves us guessing as to the set of fixed_regs + that are actually preserved. We know for sure that those associated + with the local stack frame are safe, but scant others. */ + + extern HARD_REG_SET regs_invalidated_by_call; + #ifdef REG_ALLOC_ORDER /* Table of register numbers in the order in which to try to use them. */ *************** extern int inv_reg_alloc_order[FIRST_PSE *** 443,449 **** /* For each reg class, a HARD_REG_SET saying which registers are in it. */ ! extern HARD_REG_SET reg_class_contents[]; /* For each reg class, number of regs it contains. */ --- 452,458 ---- /* For each reg class, a HARD_REG_SET saying which registers are in it. */ ! extern HARD_REG_SET reg_class_contents[N_REG_CLASSES]; /* For each reg class, number of regs it contains. */ *************** extern int n_non_fixed_regs; *** 475,478 **** extern const char * reg_names[FIRST_PSEUDO_REGISTER]; ! #endif /* _HARD_REG_SET_H */ --- 484,487 ---- extern const char * reg_names[FIRST_PSEUDO_REGISTER]; ! #endif /* ! GCC_HARD_REG_SET_H */ diff -Nrc3pad gcc-3.0.4/gcc/hash.c gcc-3.1/gcc/hash.c *** gcc-3.0.4/gcc/hash.c Fri May 4 14:45:08 2001 --- gcc-3.1/gcc/hash.c Thu Oct 11 03:15:47 2001 *************** hash_lookup (table, key, create, copy) *** 91,97 **** hash_table_key (*copy) PARAMS ((struct obstack* memory, hash_table_key key)); { ! register unsigned long hash; struct hash_entry *hashp; unsigned int index; --- 91,97 ---- hash_table_key (*copy) PARAMS ((struct obstack* memory, hash_table_key key)); { ! unsigned long hash; struct hash_entry *hashp; unsigned int index; diff -Nrc3pad gcc-3.0.4/gcc/hashtable.c gcc-3.1/gcc/hashtable.c *** gcc-3.0.4/gcc/hashtable.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/hashtable.c Mon Sep 10 22:34:03 2001 *************** *** 0 **** --- 1,326 ---- + /* Hash tables. + Copyright (C) 2000, 2001 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. + + In other words, you are welcome to use, share and improve this program. + You are forbidden to forbid anyone else to use, share and improve + what you give them. Help stamp out software-hoarding! */ + + #include "config.h" + #include "system.h" + #include "hashtable.h" + + /* The code below is a specialization of Vladimir Makarov's expandable + hash tables (see libiberty/hashtab.c). The abstraction penalty was + too high to continue using the generic form. This code knows + intrinsically how to calculate a hash value, and how to compare an + existing entry with a potential new one. Also, the ability to + delete members from the table has been removed. */ + + static unsigned int calc_hash PARAMS ((const unsigned char *, unsigned int)); + static void ht_expand PARAMS ((hash_table *)); + + /* Let particular systems override the size of a chunk. */ + #ifndef OBSTACK_CHUNK_SIZE + #define OBSTACK_CHUNK_SIZE 0 + #endif + /* Let them override the alloc and free routines too. */ + #ifndef OBSTACK_CHUNK_ALLOC + #define OBSTACK_CHUNK_ALLOC xmalloc + #endif + #ifndef OBSTACK_CHUNK_FREE + #define OBSTACK_CHUNK_FREE free + #endif + + /* Initialise an obstack. */ + void + gcc_obstack_init (obstack) + struct obstack *obstack; + { + _obstack_begin (obstack, OBSTACK_CHUNK_SIZE, 0, + (void *(*) PARAMS ((long))) OBSTACK_CHUNK_ALLOC, + (void (*) PARAMS ((void *))) OBSTACK_CHUNK_FREE); + } + + /* Calculate the hash of the string STR of length LEN. */ + + static unsigned int + calc_hash (str, len) + const unsigned char *str; + unsigned int len; + { + unsigned int n = len; + unsigned int r = 0; + #define HASHSTEP(r, c) ((r) * 67 + ((c) - 113)); + + while (n--) + r = HASHSTEP (r, *str++); + + return r + len; + #undef HASHSTEP + } + + /* Initialize an identifier hashtable. */ + + hash_table * + ht_create (order) + unsigned int order; + { + unsigned int nslots = 1 << order; + hash_table *table; + + table = (hash_table *) xmalloc (sizeof (hash_table)); + memset (table, 0, sizeof (hash_table)); + + /* Strings need no alignment. */ + gcc_obstack_init (&table->stack); + obstack_alignment_mask (&table->stack) = 0; + + table->entries = (hashnode *) xcalloc (nslots, sizeof (hashnode)); + table->nslots = nslots; + return table; + } + + /* Frees all memory associated with a hash table. */ + + void + ht_destroy (table) + hash_table *table; + { + obstack_free (&table->stack, NULL); + free (table->entries); + free (table); + } + + /* Returns the hash entry for the a STR of length LEN. If that string + already exists in the table, returns the existing entry, and, if + INSERT is CPP_ALLOCED, frees the last obstack object. If the + identifier hasn't been seen before, and INSERT is CPP_NO_INSERT, + returns NULL. Otherwise insert and returns a new entry. A new + string is alloced if INSERT is CPP_ALLOC, otherwise INSERT is + CPP_ALLOCED and the item is assumed to be at the top of the + obstack. */ + hashnode + ht_lookup (table, str, len, insert) + hash_table *table; + const unsigned char *str; + unsigned int len; + enum ht_lookup_option insert; + { + unsigned int hash = calc_hash (str, len); + unsigned int hash2; + unsigned int index; + size_t sizemask; + hashnode node; + + sizemask = table->nslots - 1; + index = hash & sizemask; + + /* hash2 must be odd, so we're guaranteed to visit every possible + location in the table during rehashing. */ + hash2 = ((hash * 17) & sizemask) | 1; + table->searches++; + + for (;;) + { + node = table->entries[index]; + + if (node == NULL) + break; + + if (HT_LEN (node) == len && !memcmp (HT_STR (node), str, len)) + { + if (insert == HT_ALLOCED) + /* The string we search for was placed at the end of the + obstack. Release it. */ + obstack_free (&table->stack, (PTR) str); + return node; + } + + index = (index + hash2) & sizemask; + table->collisions++; + } + + if (insert == HT_NO_INSERT) + return NULL; + + node = (*table->alloc_node) (table); + table->entries[index] = node; + + HT_LEN (node) = len; + if (insert == HT_ALLOC) + HT_STR (node) = obstack_copy0 (&table->stack, str, len); + else + HT_STR (node) = str; + + if (++table->nelements * 4 >= table->nslots * 3) + /* Must expand the string table. */ + ht_expand (table); + + return node; + } + + /* Double the size of a hash table, re-hashing existing entries. */ + + static void + ht_expand (table) + hash_table *table; + { + hashnode *nentries, *p, *limit; + unsigned int size, sizemask; + + size = table->nslots * 2; + nentries = (hashnode *) xcalloc (size, sizeof (hashnode)); + sizemask = size - 1; + + p = table->entries; + limit = p + table->nslots; + do + if (*p) + { + unsigned int index, hash, hash2; + + hash = calc_hash (HT_STR (*p), HT_LEN (*p)); + hash2 = ((hash * 17) & sizemask) | 1; + index = hash & sizemask; + + for (;;) + { + if (! nentries[index]) + { + nentries[index] = *p; + break; + } + + index = (index + hash2) & sizemask; + } + } + while (++p < limit); + + free (table->entries); + table->entries = nentries; + table->nslots = size; + } + + /* For all nodes in TABLE, callback CB with parameters TABLE->PFILE, + the node, and V. */ + void + ht_forall (table, cb, v) + hash_table *table; + ht_cb cb; + const PTR v; + { + hashnode *p, *limit; + + p = table->entries; + limit = p + table->nslots; + do + if (*p) + { + if ((*cb) (table->pfile, *p, v) == 0) + break; + } + while (++p < limit); + } + + /* Dump allocation statistics to stderr. */ + + void + ht_dump_statistics (table) + hash_table *table; + { + size_t nelts, nids, overhead, headers; + size_t total_bytes, longest, sum_of_squares; + double exp_len, exp_len2, exp2_len; + hashnode *p, *limit; + + #define SCALE(x) ((unsigned long) ((x) < 1024*10 \ + ? (x) \ + : ((x) < 1024*1024*10 \ + ? (x) / 1024 \ + : (x) / (1024*1024)))) + #define LABEL(x) ((x) < 1024*10 ? ' ' : ((x) < 1024*1024*10 ? 'k' : 'M')) + + total_bytes = longest = sum_of_squares = nids = 0; + p = table->entries; + limit = p + table->nslots; + do + if (*p) + { + size_t n = HT_LEN (*p); + + total_bytes += n; + sum_of_squares += n * n; + if (n > longest) + longest = n; + nids++; + } + while (++p < limit); + + nelts = table->nelements; + overhead = obstack_memory_used (&table->stack) - total_bytes; + headers = table->nslots * sizeof (hashnode); + + fprintf (stderr, "\nString pool\nentries\t\t%lu\n", + (unsigned long) nelts); + fprintf (stderr, "identifiers\t%lu (%.2f%%)\n", + (unsigned long) nids, nids * 100.0 / nelts); + fprintf (stderr, "slots\t\t%lu\n", + (unsigned long) table->nslots); + fprintf (stderr, "bytes\t\t%lu%c (%lu%c overhead)\n", + SCALE (total_bytes), LABEL (total_bytes), + SCALE (overhead), LABEL (overhead)); + fprintf (stderr, "table size\t%lu%c\n", + SCALE (headers), LABEL (headers)); + + exp_len = (double)total_bytes / (double)nelts; + exp2_len = exp_len * exp_len; + exp_len2 = (double) sum_of_squares / (double) nelts; + + fprintf (stderr, "coll/search\t%.4f\n", + (double) table->collisions / (double) table->searches); + fprintf (stderr, "ins/search\t%.4f\n", + (double) nelts / (double) table->searches); + fprintf (stderr, "avg. entry\t%.2f bytes (+/- %.2f)\n", + exp_len, approx_sqrt (exp_len2 - exp2_len)); + fprintf (stderr, "longest entry\t%lu\n", + (unsigned long) longest); + #undef SCALE + #undef LABEL + } + + /* Return the approximate positive square root of a number N. This is for + statistical reports, not code generation. */ + double + approx_sqrt (x) + double x; + { + double s, d; + + if (x < 0) + abort (); + if (x == 0) + return 0; + + s = x; + do + { + d = (s * s - x) / (2 * s); + s -= d; + } + while (d > .0001); + return s; + } diff -Nrc3pad gcc-3.0.4/gcc/hashtable.h gcc-3.1/gcc/hashtable.h *** gcc-3.0.4/gcc/hashtable.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/hashtable.h Sat Aug 11 12:37:19 2001 *************** *** 0 **** --- 1,90 ---- + /* Hash tables. + Copyright (C) 2000, 2001 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. */ + + #ifndef GCC_HASHTABLE_H + #define GCC_HASHTABLE_H + + #include "obstack.h" + + /* This is what each hash table entry points to. It may be embedded + deeply within another object. */ + typedef struct ht_identifier ht_identifier; + struct ht_identifier + { + unsigned int len; + const unsigned char *str; + }; + + #define HT_LEN(NODE) ((NODE)->len) + #define HT_STR(NODE) ((NODE)->str) + + /* We want code outside cpplib, such as the compiler front-ends, to be + able to include this header, and to be able to link with + cpphashtbl.o without pulling in any other parts of cpplib. */ + + struct cpp_reader; + typedef struct ht hash_table; + typedef struct ht_identifier *hashnode; + + enum ht_lookup_option {HT_NO_INSERT = 0, HT_ALLOC, HT_ALLOCED}; + + /* An identifier hash table for cpplib and the front ends. */ + struct ht + { + /* Identifiers are allocated from here. */ + struct obstack stack; + + hashnode *entries; + /* Call back. */ + hashnode (*alloc_node) PARAMS ((hash_table *)); + + unsigned int nslots; /* Total slots in the entries array. */ + unsigned int nelements; /* Number of live elements. */ + + /* Link to reader, if any. For the benefit of cpplib. */ + struct cpp_reader *pfile; + + /* Table usage statistics. */ + unsigned int searches; + unsigned int collisions; + }; + + extern void gcc_obstack_init PARAMS ((struct obstack *)); + + /* Initialise the hashtable with 2 ^ order entries. */ + extern hash_table *ht_create PARAMS ((unsigned int order)); + + /* Frees all memory associated with a hash table. */ + extern void ht_destroy PARAMS ((hash_table *)); + + extern hashnode ht_lookup PARAMS ((hash_table *, const unsigned char *, + unsigned int, enum ht_lookup_option)); + + /* For all nodes in TABLE, make a callback. The callback takes + TABLE->PFILE, the node, and a PTR, and the callback sequence stops + if the callback returns zero. */ + typedef int (*ht_cb) PARAMS ((struct cpp_reader *, hashnode, const void *)); + extern void ht_forall PARAMS ((hash_table *, ht_cb, const void *)); + + /* Dump allocation statistics to stderr. */ + extern void ht_dump_statistics PARAMS ((hash_table *)); + + /* Approximate positive square root of a host double. This is for + statistical reports, not code generation. */ + extern double approx_sqrt PARAMS ((double)); + + #endif /* GCC_HASHTABLE_H */ diff -Nrc3pad gcc-3.0.4/gcc/hooks.c gcc-3.1/gcc/hooks.c *** gcc-3.0.4/gcc/hooks.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/hooks.c Sat Feb 9 02:18:11 2002 *************** *** 0 **** --- 1,34 ---- + /* General-purpose hooks. + Copyright (C) 2002 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. + + In other words, you are welcome to use, share and improve this program. + You are forbidden to forbid anyone else to use, share and improve + what you give them. Help stamp out software-hoarding! */ + + /* This file contains generic hooks that can be used as defaults for + target or language-dependent hook initializers. */ + + #include "config.h" + #include "system.h" + #include "hooks.h" + + /* Generic hook that takes no arguments and returns false. */ + bool + hook_void_bool_false () + { + return false; + } diff -Nrc3pad gcc-3.0.4/gcc/hooks.h gcc-3.1/gcc/hooks.h *** gcc-3.0.4/gcc/hooks.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/hooks.h Sat Feb 9 02:18:11 2002 *************** *** 0 **** --- 1,22 ---- + /* General-purpose hooks. + Copyright (C) 2002 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. + + In other words, you are welcome to use, share and improve this program. + You are forbidden to forbid anyone else to use, share and improve + what you give them. Help stamp out software-hoarding! */ + + bool hook_void_bool_false PARAMS ((void)); diff -Nrc3pad gcc-3.0.4/gcc/hwint.h gcc-3.1/gcc/hwint.h *** gcc-3.0.4/gcc/hwint.h Wed Jan 10 22:27:40 2001 --- gcc-3.1/gcc/hwint.h Fri Apr 12 19:59:09 2002 *************** *** 1,20 **** /* HOST_WIDE_INT definitions for the GNU compiler. Copyright (C) 1998 Free Software Foundation, Inc. ! This file is part of GNU CC. Provide definitions for macros which depend on HOST_BITS_PER_INT ! and HOST_BITS_PER_LONG. */ ! #ifndef __HWINT_H__ ! #define __HWINT_H__ ! /* Only do all of this if both of these macros are defined, otherwise ! they'll evaluate to zero, which is not what you want. */ ! #if defined (HOST_BITS_PER_LONG) && defined (HOST_BITS_PER_INT) /* Find the largest host integer type and set its size and type. */ #ifndef HOST_BITS_PER_WIDE_INT # if HOST_BITS_PER_LONG > HOST_BITS_PER_INT --- 1,59 ---- /* HOST_WIDE_INT definitions for the GNU compiler. Copyright (C) 1998 Free Software Foundation, Inc. ! This file is part of GCC. Provide definitions for macros which depend on HOST_BITS_PER_INT ! and HOST_BITS_PER_LONG. */ ! #ifndef GCC_HWINT_H ! #define GCC_HWINT_H ! /* This describes the machine the compiler is hosted on. */ ! #define HOST_BITS_PER_CHAR CHAR_BIT ! #define HOST_BITS_PER_SHORT (CHAR_BIT * SIZEOF_SHORT) ! #define HOST_BITS_PER_INT (CHAR_BIT * SIZEOF_INT) ! #define HOST_BITS_PER_LONG (CHAR_BIT * SIZEOF_LONG) ! ! #ifdef HAVE_LONG_LONG ! # define HOST_BITS_PER_LONGLONG (CHAR_BIT * SIZEOF_LONG_LONG) ! #else ! #ifdef HAVE___INT64 ! # define HOST_BITS_PER_LONGLONG (CHAR_BIT * SIZEOF___INT64) ! #else ! /* If we're here and we're GCC, assume this is stage 2+ of a bootstrap ! and 'long long' has the width of the *target*'s long long. */ ! # if GCC_VERSION > 3000 ! # define HOST_BITS_PER_LONGLONG LONG_LONG_TYPE_SIZE ! # endif /* gcc */ ! #endif ! #endif /* no long long */ /* Find the largest host integer type and set its size and type. */ + /* Use long long on the host if the target has a wider long type than + the host. */ + + #if ! defined HOST_BITS_PER_WIDE_INT \ + && defined HOST_BITS_PER_LONGLONG \ + && (HOST_BITS_PER_LONGLONG > HOST_BITS_PER_LONG) \ + && (defined (LONG_LONG_MAX) || defined (LONGLONG_MAX) \ + || defined (LLONG_MAX) || defined (__GNUC__)) + + # ifdef MAX_LONG_TYPE_SIZE + # if MAX_LONG_TYPE_SIZE > HOST_BITS_PER_LONG + # define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_LONGLONG + # define HOST_WIDE_INT long long + # endif + # else + # if LONG_TYPE_SIZE > HOST_BITS_PER_LONG + # define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_LONGLONG + # define HOST_WIDE_INT long long + # endif + # endif + + #endif + #ifndef HOST_BITS_PER_WIDE_INT # if HOST_BITS_PER_LONG > HOST_BITS_PER_INT *************** *** 27,33 **** #endif /* ! HOST_BITS_PER_WIDE_INT */ - /* Provide defaults for the way to print a HOST_WIDE_INT in various manners. */ --- 66,71 ---- *************** *** 91,96 **** # endif #endif /* ! HOST_WIDE_INT_PRINT_DOUBLE_HEX */ ! #endif /* HOST_BITS_PER_LONG && HOST_BITS_PER_INT */ ! #endif /* __HWINT_H__ */ --- 129,153 ---- # endif #endif /* ! HOST_WIDE_INT_PRINT_DOUBLE_HEX */ ! /* Find HOST_WIDEST_INT and set its bit size, type and print macros. ! It will be the largest integer mode supported by the host which may ! (or may not) be larger than HOST_WIDE_INT. */ ! #ifndef HOST_WIDEST_INT ! #if defined HOST_BITS_PER_LONGLONG \ ! && HOST_BITS_PER_LONGLONG > HOST_BITS_PER_LONG ! # define HOST_BITS_PER_WIDEST_INT HOST_BITS_PER_LONGLONG ! # define HOST_WIDEST_INT long long ! # define HOST_WIDEST_INT_PRINT_DEC "%lld" ! # define HOST_WIDEST_INT_PRINT_UNSIGNED "%llu" ! # define HOST_WIDEST_INT_PRINT_HEX "0x%llx" ! # else ! # define HOST_BITS_PER_WIDEST_INT HOST_BITS_PER_LONG ! # define HOST_WIDEST_INT long ! # define HOST_WIDEST_INT_PRINT_DEC "%ld" ! # define HOST_WIDEST_INT_PRINT_UNSIGNED "%lu" ! # define HOST_WIDEST_INT_PRINT_HEX "0x%lx" ! # endif /* long long wider than long */ ! #endif /* ! HOST_WIDEST_INT */ ! ! #endif /* ! GCC_HWINT_H */ diff -Nrc3pad gcc-3.0.4/gcc/ifcvt.c gcc-3.1/gcc/ifcvt.c *** gcc-3.0.4/gcc/ifcvt.c Thu Nov 29 23:29:35 2001 --- gcc-3.1/gcc/ifcvt.c Fri May 3 20:24:01 2002 *************** *** 1,22 **** /* If-conversion support. ! Copyright (C) 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" #include "system.h" --- 1,22 ---- /* If-conversion support. ! Copyright (C) 2000, 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it ! under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ! ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public ! License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" #include "system.h" *************** *** 27,36 **** --- 27,39 ---- #include "flags.h" #include "insn-config.h" #include "recog.h" + #include "except.h" #include "hard-reg-set.h" #include "basic-block.h" #include "expr.h" + #include "real.h" #include "output.h" + #include "toplev.h" #include "tm_p.h" *************** *** 46,51 **** --- 49,60 ---- #ifndef HAVE_decscc #define HAVE_decscc 0 #endif + #ifndef HAVE_trap + #define HAVE_trap 0 + #endif + #ifndef HAVE_conditional_trap + #define HAVE_conditional_trap 0 + #endif #ifndef MAX_CONDITIONAL_EXECUTE #define MAX_CONDITIONAL_EXECUTE (BRANCH_COST + 1) *************** static int cond_exec_process_if_block PA *** 82,87 **** --- 91,97 ---- basic_block, basic_block)); static rtx noce_get_condition PARAMS ((rtx, rtx *)); + static int noce_operand_ok PARAMS ((rtx)); static int noce_process_if_block PARAMS ((basic_block, basic_block, basic_block, basic_block)); *************** static int find_if_header PARAMS ((basi *** 94,102 **** static int find_if_block PARAMS ((basic_block, edge, edge)); static int find_if_case_1 PARAMS ((basic_block, edge, edge)); static int find_if_case_2 PARAMS ((basic_block, edge, edge)); static int find_memory PARAMS ((rtx *, void *)); static int dead_or_predicable PARAMS ((basic_block, basic_block, ! basic_block, rtx, int)); static void noce_emit_move_insn PARAMS ((rtx, rtx)); /* Abuse the basic_block AUX field to store the original block index, --- 104,114 ---- static int find_if_block PARAMS ((basic_block, edge, edge)); static int find_if_case_1 PARAMS ((basic_block, edge, edge)); static int find_if_case_2 PARAMS ((basic_block, edge, edge)); + static int find_cond_trap PARAMS ((basic_block, edge, edge)); + static rtx block_has_only_trap PARAMS ((basic_block)); static int find_memory PARAMS ((rtx *, void *)); static int dead_or_predicable PARAMS ((basic_block, basic_block, ! basic_block, basic_block, int)); static void noce_emit_move_insn PARAMS ((rtx, rtx)); /* Abuse the basic_block AUX field to store the original block index, *************** cond_exec_process_if_block (test_bb, the *** 316,322 **** rtx then_end; /* last insn + 1 in THEN block */ rtx else_start = NULL_RTX; /* first insn in ELSE block or NULL */ rtx else_end = NULL_RTX; /* last insn + 1 in ELSE block */ ! int max; /* max # of insns to convert. */ int then_mod_ok; /* whether conditional mods are ok in THEN */ rtx true_expr; /* test for else block insns */ rtx false_expr; /* test for then block insns */ --- 328,334 ---- rtx then_end; /* last insn + 1 in THEN block */ rtx else_start = NULL_RTX; /* first insn in ELSE block or NULL */ rtx else_end = NULL_RTX; /* last insn + 1 in ELSE block */ ! int max; /* max # of insns to convert. */ int then_mod_ok; /* whether conditional mods are ok in THEN */ rtx true_expr; /* test for else block insns */ rtx false_expr; /* test for then block insns */ *************** cond_exec_process_if_block (test_bb, the *** 466,471 **** --- 478,484 ---- struct noce_if_info { + basic_block test_bb; rtx insn_a, insn_b; rtx x, a, b; rtx jump, cond, cond_earliest; *************** static rtx noce_emit_cmove PARAMS ((str *** 482,487 **** --- 495,504 ---- rtx, rtx, rtx)); static int noce_try_cmove PARAMS ((struct noce_if_info *)); static int noce_try_cmove_arith PARAMS ((struct noce_if_info *)); + static rtx noce_get_alt_condition PARAMS ((struct noce_if_info *, + rtx, rtx *)); + static int noce_try_minmax PARAMS ((struct noce_if_info *)); + static int noce_try_abs PARAMS ((struct noce_if_info *)); /* Helper function for noce_try_store_flag*. */ *************** noce_emit_store_flag (if_info, x, revers *** 504,518 **** if (cond_complex) cond = XEXP (SET_SRC (pc_set (if_info->jump)), 0); if ((if_info->cond_earliest == if_info->jump || cond_complex) && (normalize == 0 || STORE_FLAG_VALUE == normalize)) { rtx tmp; - code = GET_CODE (cond); - if (reversep) - code = reverse_condition (code); - tmp = gen_rtx_fmt_ee (code, GET_MODE (x), XEXP (cond, 0), XEXP (cond, 1)); tmp = gen_rtx_SET (VOIDmode, x, tmp); --- 521,536 ---- if (cond_complex) cond = XEXP (SET_SRC (pc_set (if_info->jump)), 0); + if (reversep) + code = reversed_comparison_code (cond, if_info->jump); + else + code = GET_CODE (cond); + if ((if_info->cond_earliest == if_info->jump || cond_complex) && (normalize == 0 || STORE_FLAG_VALUE == normalize)) { rtx tmp; tmp = gen_rtx_fmt_ee (code, GET_MODE (x), XEXP (cond, 0), XEXP (cond, 1)); tmp = gen_rtx_SET (VOIDmode, x, tmp); *************** noce_emit_store_flag (if_info, x, revers *** 538,554 **** if (cond_complex) return NULL_RTX; - code = GET_CODE (cond); - if (reversep) - code = reverse_condition (code); - return emit_store_flag (x, code, XEXP (cond, 0), XEXP (cond, 1), VOIDmode, (code == LTU || code == LEU || code == GEU || code == GTU), normalize); } ! /* Emit instruction to move a rtx into STRICT_LOW_PART. */ static void noce_emit_move_insn (x, y) rtx x, y; --- 556,568 ---- if (cond_complex) return NULL_RTX; return emit_store_flag (x, code, XEXP (cond, 0), XEXP (cond, 1), VOIDmode, (code == LTU || code == LEU || code == GEU || code == GTU), normalize); } ! /* Emit instruction to move an rtx into STRICT_LOW_PART. */ static void noce_emit_move_insn (x, y) rtx x, y; *************** noce_emit_move_insn (x, y) *** 567,578 **** inner = XEXP (outer, 0); outmode = GET_MODE (outer); inmode = GET_MODE (inner); ! bitpos = SUBREG_WORD (outer) * BITS_PER_WORD; ! if (BYTES_BIG_ENDIAN) ! bitpos += (GET_MODE_BITSIZE (inmode) - GET_MODE_BITSIZE (outmode)) ! % BITS_PER_WORD; ! store_bit_field (inner, GET_MODE_BITSIZE (outmode), ! bitpos, outmode, y, GET_MODE_BITSIZE (inmode), GET_MODE_BITSIZE (inmode)); } --- 581,588 ---- inner = XEXP (outer, 0); outmode = GET_MODE (outer); inmode = GET_MODE (inner); ! bitpos = SUBREG_BYTE (outer) * BITS_PER_UNIT; ! store_bit_field (inner, GET_MODE_BITSIZE (outmode), bitpos, outmode, y, GET_MODE_BITSIZE (inmode)); } *************** noce_try_store_flag (if_info) *** 596,602 **** else if (if_info->b == const0_rtx && GET_CODE (if_info->a) == CONST_INT && INTVAL (if_info->a) == STORE_FLAG_VALUE ! && can_reverse_comparison_p (if_info->cond, if_info->jump)) reversep = 1; else return FALSE; --- 606,613 ---- else if (if_info->b == const0_rtx && GET_CODE (if_info->a) == CONST_INT && INTVAL (if_info->a) == STORE_FLAG_VALUE ! && (reversed_comparison_code (if_info->cond, if_info->jump) ! != UNKNOWN)) reversep = 1; else return FALSE; *************** noce_try_store_flag (if_info) *** 611,617 **** seq = get_insns (); end_sequence (); ! emit_insns_before (seq, if_info->cond_earliest); return TRUE; } --- 622,628 ---- seq = get_insns (); end_sequence (); ! emit_insns_before (seq, if_info->jump); return TRUE; } *************** noce_try_store_flag_constants (if_info) *** 632,652 **** int reversep; HOST_WIDE_INT itrue, ifalse, diff, tmp; int normalize, can_reverse; if (! no_new_pseudos && GET_CODE (if_info->a) == CONST_INT && GET_CODE (if_info->b) == CONST_INT) { ifalse = INTVAL (if_info->a); itrue = INTVAL (if_info->b); - diff = itrue - ifalse; /* Make sure we can represent the difference between the two values. */ if ((itrue - ifalse > 0) != ((ifalse < 0) != (itrue < 0) ? ifalse < 0 : ifalse < itrue)) return FALSE; ! can_reverse = can_reverse_comparison_p (if_info->cond, if_info->jump); reversep = 0; if (diff == STORE_FLAG_VALUE || diff == -STORE_FLAG_VALUE) --- 643,667 ---- int reversep; HOST_WIDE_INT itrue, ifalse, diff, tmp; int normalize, can_reverse; + enum machine_mode mode; if (! no_new_pseudos && GET_CODE (if_info->a) == CONST_INT && GET_CODE (if_info->b) == CONST_INT) { + mode = GET_MODE (if_info->x); ifalse = INTVAL (if_info->a); itrue = INTVAL (if_info->b); /* Make sure we can represent the difference between the two values. */ if ((itrue - ifalse > 0) != ((ifalse < 0) != (itrue < 0) ? ifalse < 0 : ifalse < itrue)) return FALSE; ! diff = trunc_int_for_mode (itrue - ifalse, mode); ! ! can_reverse = (reversed_comparison_code (if_info->cond, if_info->jump) ! != UNKNOWN); reversep = 0; if (diff == STORE_FLAG_VALUE || diff == -STORE_FLAG_VALUE) *************** noce_try_store_flag_constants (if_info) *** 674,680 **** if (reversep) { tmp = itrue; itrue = ifalse; ifalse = tmp; ! diff = -diff; } start_sequence (); --- 689,695 ---- if (reversep) { tmp = itrue; itrue = ifalse; ifalse = tmp; ! diff = trunc_int_for_mode (-diff, mode); } start_sequence (); *************** noce_try_store_flag_constants (if_info) *** 689,730 **** => x = 3 + (test == 0); */ if (diff == STORE_FLAG_VALUE || diff == -STORE_FLAG_VALUE) { ! target = expand_binop (GET_MODE (if_info->x), ! (diff == STORE_FLAG_VALUE ! ? add_optab : sub_optab), ! GEN_INT (ifalse), target, if_info->x, 0, ! OPTAB_WIDEN); } /* if (test) x = 8; else x = 0; => x = (test != 0) << 3; */ else if (ifalse == 0 && (tmp = exact_log2 (itrue)) >= 0) { ! target = expand_binop (GET_MODE (if_info->x), ashl_optab, ! target, GEN_INT (tmp), if_info->x, 0, ! OPTAB_WIDEN); } /* if (test) x = -1; else x = b; => x = -(test != 0) | b; */ else if (itrue == -1) { ! target = expand_binop (GET_MODE (if_info->x), ior_optab, ! target, GEN_INT (ifalse), if_info->x, 0, ! OPTAB_WIDEN); } /* if (test) x = a; else x = b; => x = (-(test != 0) & (b - a)) + a; */ else { ! target = expand_binop (GET_MODE (if_info->x), and_optab, ! target, GEN_INT (diff), if_info->x, 0, ! OPTAB_WIDEN); if (target) ! target = expand_binop (GET_MODE (if_info->x), add_optab, ! target, GEN_INT (ifalse), if_info->x, 0, ! OPTAB_WIDEN); } if (! target) --- 704,745 ---- => x = 3 + (test == 0); */ if (diff == STORE_FLAG_VALUE || diff == -STORE_FLAG_VALUE) { ! target = expand_simple_binop (mode, ! (diff == STORE_FLAG_VALUE ! ? PLUS : MINUS), ! GEN_INT (ifalse), target, if_info->x, 0, ! OPTAB_WIDEN); } /* if (test) x = 8; else x = 0; => x = (test != 0) << 3; */ else if (ifalse == 0 && (tmp = exact_log2 (itrue)) >= 0) { ! target = expand_simple_binop (mode, ASHIFT, ! target, GEN_INT (tmp), if_info->x, 0, ! OPTAB_WIDEN); } /* if (test) x = -1; else x = b; => x = -(test != 0) | b; */ else if (itrue == -1) { ! target = expand_simple_binop (mode, IOR, ! target, GEN_INT (ifalse), if_info->x, 0, ! OPTAB_WIDEN); } /* if (test) x = a; else x = b; => x = (-(test != 0) & (b - a)) + a; */ else { ! target = expand_simple_binop (mode, AND, ! target, GEN_INT (diff), if_info->x, 0, ! OPTAB_WIDEN); if (target) ! target = expand_simple_binop (mode, PLUS, ! target, GEN_INT (ifalse), ! if_info->x, 0, OPTAB_WIDEN); } if (! target) *************** noce_try_store_flag_constants (if_info) *** 742,748 **** if (seq_contains_jump (seq)) return FALSE; ! emit_insns_before (seq, if_info->cond_earliest); return TRUE; } --- 757,763 ---- if (seq_contains_jump (seq)) return FALSE; ! emit_insns_before (seq, if_info->jump); return TRUE; } *************** noce_try_store_flag_inc (if_info) *** 770,776 **** && (XEXP (if_info->a, 1) == const1_rtx || XEXP (if_info->a, 1) == constm1_rtx) && rtx_equal_p (XEXP (if_info->a, 0), if_info->x) ! && can_reverse_comparison_p (if_info->cond, if_info->jump)) { if (STORE_FLAG_VALUE == INTVAL (XEXP (if_info->a, 1))) subtract = 0, normalize = 0; --- 785,792 ---- && (XEXP (if_info->a, 1) == const1_rtx || XEXP (if_info->a, 1) == constm1_rtx) && rtx_equal_p (XEXP (if_info->a, 0), if_info->x) ! && (reversed_comparison_code (if_info->cond, if_info->jump) ! != UNKNOWN)) { if (STORE_FLAG_VALUE == INTVAL (XEXP (if_info->a, 1))) subtract = 0, normalize = 0; *************** noce_try_store_flag_inc (if_info) *** 786,794 **** 1, normalize); if (target) ! target = expand_binop (GET_MODE (if_info->x), ! subtract ? sub_optab : add_optab, ! if_info->x, target, if_info->x, 0, OPTAB_WIDEN); if (target) { if (target != if_info->x) --- 802,811 ---- 1, normalize); if (target) ! target = expand_simple_binop (GET_MODE (if_info->x), ! subtract ? MINUS : PLUS, ! if_info->x, target, if_info->x, ! 0, OPTAB_WIDEN); if (target) { if (target != if_info->x) *************** noce_try_store_flag_inc (if_info) *** 800,806 **** if (seq_contains_jump (seq)) return FALSE; ! emit_insns_before (seq, if_info->cond_earliest); return TRUE; } --- 817,823 ---- if (seq_contains_jump (seq)) return FALSE; ! emit_insns_before (seq, if_info->jump); return TRUE; } *************** noce_try_store_flag_mask (if_info) *** 826,833 **** || STORE_FLAG_VALUE == -1) && ((if_info->a == const0_rtx && rtx_equal_p (if_info->b, if_info->x)) ! || ((reversep = can_reverse_comparison_p (if_info->cond, ! if_info->jump)) && if_info->b == const0_rtx && rtx_equal_p (if_info->a, if_info->x)))) { --- 843,851 ---- || STORE_FLAG_VALUE == -1) && ((if_info->a == const0_rtx && rtx_equal_p (if_info->b, if_info->x)) ! || ((reversep = (reversed_comparison_code (if_info->cond, ! if_info->jump) ! != UNKNOWN)) && if_info->b == const0_rtx && rtx_equal_p (if_info->a, if_info->x)))) { *************** noce_try_store_flag_mask (if_info) *** 836,844 **** gen_reg_rtx (GET_MODE (if_info->x)), reversep, -1); if (target) ! target = expand_binop (GET_MODE (if_info->x), and_optab, ! if_info->x, target, if_info->x, 0, ! OPTAB_WIDEN); if (target) { --- 854,862 ---- gen_reg_rtx (GET_MODE (if_info->x)), reversep, -1); if (target) ! target = expand_simple_binop (GET_MODE (if_info->x), AND, ! if_info->x, target, if_info->x, 0, ! OPTAB_WIDEN); if (target) { *************** noce_try_store_flag_mask (if_info) *** 851,857 **** if (seq_contains_jump (seq)) return FALSE; ! emit_insns_before (seq, if_info->cond_earliest); return TRUE; } --- 869,875 ---- if (seq_contains_jump (seq)) return FALSE; ! emit_insns_before (seq, if_info->jump); return TRUE; } *************** noce_try_cmove (if_info) *** 946,952 **** seq = get_insns (); end_sequence (); ! emit_insns_before (seq, if_info->cond_earliest); return TRUE; } else --- 964,970 ---- seq = get_insns (); end_sequence (); ! emit_insns_before (seq, if_info->jump); return TRUE; } else *************** noce_try_cmove_arith (if_info) *** 1005,1011 **** insn_b = if_info->insn_b; /* Possibly rearrange operands to make things come out more natural. */ ! if (can_reverse_comparison_p (if_info->cond, if_info->jump)) { int reversep = 0; if (rtx_equal_p (b, x)) --- 1023,1029 ---- insn_b = if_info->insn_b; /* Possibly rearrange operands to make things come out more natural. */ ! if (reversed_comparison_code (if_info->cond, if_info->jump) != UNKNOWN) { int reversep = 0; if (rtx_equal_p (b, x)) *************** noce_try_cmove_arith (if_info) *** 1015,1021 **** if (reversep) { ! code = reverse_condition (code); tmp = a, a = b, b = tmp; tmp = insn_a, insn_a = insn_b, insn_b = tmp; } --- 1033,1039 ---- if (reversep) { ! code = reversed_comparison_code (if_info->cond, if_info->jump); tmp = a, a = b, b = tmp; tmp = insn_a, insn_a = insn_b, insn_b = tmp; } *************** noce_try_cmove_arith (if_info) *** 1097,1103 **** if (MEM_SCALAR_P (if_info->a) && MEM_SCALAR_P (if_info->b)) MEM_SCALAR_P (tmp) = 1; if (MEM_ALIAS_SET (if_info->a) == MEM_ALIAS_SET (if_info->b)) ! MEM_ALIAS_SET (tmp) = MEM_ALIAS_SET (if_info->a); noce_emit_move_insn (if_info->x, tmp); } --- 1115,1123 ---- if (MEM_SCALAR_P (if_info->a) && MEM_SCALAR_P (if_info->b)) MEM_SCALAR_P (tmp) = 1; if (MEM_ALIAS_SET (if_info->a) == MEM_ALIAS_SET (if_info->b)) ! set_mem_alias_set (tmp, MEM_ALIAS_SET (if_info->a)); ! set_mem_align (tmp, ! MIN (MEM_ALIGN (if_info->a), MEM_ALIGN (if_info->b))); noce_emit_move_insn (if_info->x, tmp); } *************** noce_try_cmove_arith (if_info) *** 1106,1112 **** tmp = get_insns (); end_sequence (); ! emit_insns_before (tmp, if_info->cond_earliest); return TRUE; end_seq_and_fail: --- 1126,1132 ---- tmp = get_insns (); end_sequence (); ! emit_insns_before (tmp, if_info->jump); return TRUE; end_seq_and_fail: *************** noce_try_cmove_arith (if_info) *** 1114,1119 **** --- 1134,1509 ---- return FALSE; } + /* For most cases, the simplified condition we found is the best + choice, but this is not the case for the min/max/abs transforms. + For these we wish to know that it is A or B in the condition. */ + + static rtx + noce_get_alt_condition (if_info, target, earliest) + struct noce_if_info *if_info; + rtx target; + rtx *earliest; + { + rtx cond, set, insn; + int reverse; + + /* If target is already mentioned in the known condition, return it. */ + if (reg_mentioned_p (target, if_info->cond)) + { + *earliest = if_info->cond_earliest; + return if_info->cond; + } + + set = pc_set (if_info->jump); + cond = XEXP (SET_SRC (set), 0); + reverse + = GET_CODE (XEXP (SET_SRC (set), 2)) == LABEL_REF + && XEXP (XEXP (SET_SRC (set), 2), 0) == JUMP_LABEL (if_info->jump); + + /* If we're looking for a constant, try to make the conditional + have that constant in it. There are two reasons why it may + not have the constant we want: + + 1. GCC may have needed to put the constant in a register, because + the target can't compare directly against that constant. For + this case, we look for a SET immediately before the comparison + that puts a constant in that register. + + 2. GCC may have canonicalized the conditional, for example + replacing "if x < 4" with "if x <= 3". We can undo that (or + make equivalent types of changes) to get the constants we need + if they're off by one in the right direction. */ + + if (GET_CODE (target) == CONST_INT) + { + enum rtx_code code = GET_CODE (if_info->cond); + rtx op_a = XEXP (if_info->cond, 0); + rtx op_b = XEXP (if_info->cond, 1); + rtx prev_insn; + + /* First, look to see if we put a constant in a register. */ + prev_insn = PREV_INSN (if_info->cond_earliest); + if (prev_insn + && INSN_P (prev_insn) + && GET_CODE (PATTERN (prev_insn)) == SET) + { + rtx src = find_reg_equal_equiv_note (prev_insn); + if (!src) + src = SET_SRC (PATTERN (prev_insn)); + if (GET_CODE (src) == CONST_INT) + { + if (rtx_equal_p (op_a, SET_DEST (PATTERN (prev_insn)))) + op_a = src; + else if (rtx_equal_p (op_b, SET_DEST (PATTERN (prev_insn)))) + op_b = src; + + if (GET_CODE (op_a) == CONST_INT) + { + rtx tmp = op_a; + op_a = op_b; + op_b = tmp; + code = swap_condition (code); + } + } + } + + /* Now, look to see if we can get the right constant by + adjusting the conditional. */ + if (GET_CODE (op_b) == CONST_INT) + { + HOST_WIDE_INT desired_val = INTVAL (target); + HOST_WIDE_INT actual_val = INTVAL (op_b); + + switch (code) + { + case LT: + if (actual_val == desired_val + 1) + { + code = LE; + op_b = GEN_INT (desired_val); + } + break; + case LE: + if (actual_val == desired_val - 1) + { + code = LT; + op_b = GEN_INT (desired_val); + } + break; + case GT: + if (actual_val == desired_val - 1) + { + code = GE; + op_b = GEN_INT (desired_val); + } + break; + case GE: + if (actual_val == desired_val + 1) + { + code = GT; + op_b = GEN_INT (desired_val); + } + break; + default: + break; + } + } + + /* If we made any changes, generate a new conditional that is + equivalent to what we started with, but has the right + constants in it. */ + if (code != GET_CODE (if_info->cond) + || op_a != XEXP (if_info->cond, 0) + || op_b != XEXP (if_info->cond, 1)) + { + cond = gen_rtx_fmt_ee (code, GET_MODE (cond), op_a, op_b); + *earliest = if_info->cond_earliest; + return cond; + } + } + + cond = canonicalize_condition (if_info->jump, cond, reverse, + earliest, target); + if (! cond || ! reg_mentioned_p (target, cond)) + return NULL; + + /* We almost certainly searched back to a different place. + Need to re-verify correct lifetimes. */ + + /* X may not be mentioned in the range (cond_earliest, jump]. */ + for (insn = if_info->jump; insn != *earliest; insn = PREV_INSN (insn)) + if (INSN_P (insn) && reg_mentioned_p (if_info->x, insn)) + return NULL; + + /* A and B may not be modified in the range [cond_earliest, jump). */ + for (insn = *earliest; insn != if_info->jump; insn = NEXT_INSN (insn)) + if (INSN_P (insn) + && (modified_in_p (if_info->a, insn) + || modified_in_p (if_info->b, insn))) + return NULL; + + return cond; + } + + /* Convert "if (a < b) x = a; else x = b;" to "x = min(a, b);", etc. */ + + static int + noce_try_minmax (if_info) + struct noce_if_info *if_info; + { + rtx cond, earliest, target, seq; + enum rtx_code code, op; + int unsignedp; + + /* ??? Can't guarantee that expand_binop won't create pseudos. */ + if (no_new_pseudos) + return FALSE; + + /* ??? Reject FP modes since we don't know how 0 vs -0 or NaNs + will be resolved with an SMIN/SMAX. It wouldn't be too hard + to get the target to tell us... */ + if (FLOAT_MODE_P (GET_MODE (if_info->x)) + && TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT + && ! flag_unsafe_math_optimizations) + return FALSE; + + cond = noce_get_alt_condition (if_info, if_info->a, &earliest); + if (!cond) + return FALSE; + + /* Verify the condition is of the form we expect, and canonicalize + the comparison code. */ + code = GET_CODE (cond); + if (rtx_equal_p (XEXP (cond, 0), if_info->a)) + { + if (! rtx_equal_p (XEXP (cond, 1), if_info->b)) + return FALSE; + } + else if (rtx_equal_p (XEXP (cond, 1), if_info->a)) + { + if (! rtx_equal_p (XEXP (cond, 0), if_info->b)) + return FALSE; + code = swap_condition (code); + } + else + return FALSE; + + /* Determine what sort of operation this is. Note that the code is for + a taken branch, so the code->operation mapping appears backwards. */ + switch (code) + { + case LT: + case LE: + case UNLT: + case UNLE: + op = SMAX; + unsignedp = 0; + break; + case GT: + case GE: + case UNGT: + case UNGE: + op = SMIN; + unsignedp = 0; + break; + case LTU: + case LEU: + op = UMAX; + unsignedp = 1; + break; + case GTU: + case GEU: + op = UMIN; + unsignedp = 1; + break; + default: + return FALSE; + } + + start_sequence (); + + target = expand_simple_binop (GET_MODE (if_info->x), op, + if_info->a, if_info->b, + if_info->x, unsignedp, OPTAB_WIDEN); + if (! target) + { + end_sequence (); + return FALSE; + } + if (target != if_info->x) + noce_emit_move_insn (if_info->x, target); + + seq = get_insns (); + end_sequence (); + + if (seq_contains_jump (seq)) + return FALSE; + + emit_insns_before (seq, if_info->jump); + if_info->cond = cond; + if_info->cond_earliest = earliest; + + return TRUE; + } + + /* Convert "if (a < 0) x = -a; else x = a;" to "x = abs(a);", etc. */ + + static int + noce_try_abs (if_info) + struct noce_if_info *if_info; + { + rtx cond, earliest, target, seq, a, b, c; + int negate; + + /* ??? Can't guarantee that expand_binop won't create pseudos. */ + if (no_new_pseudos) + return FALSE; + + /* Recognize A and B as constituting an ABS or NABS. */ + a = if_info->a; + b = if_info->b; + if (GET_CODE (a) == NEG && rtx_equal_p (XEXP (a, 0), b)) + negate = 0; + else if (GET_CODE (b) == NEG && rtx_equal_p (XEXP (b, 0), a)) + { + c = a; a = b; b = c; + negate = 1; + } + else + return FALSE; + + cond = noce_get_alt_condition (if_info, b, &earliest); + if (!cond) + return FALSE; + + /* Verify the condition is of the form we expect. */ + if (rtx_equal_p (XEXP (cond, 0), b)) + c = XEXP (cond, 1); + else if (rtx_equal_p (XEXP (cond, 1), b)) + c = XEXP (cond, 0); + else + return FALSE; + + /* Verify that C is zero. Search backward through the block for + a REG_EQUAL note if necessary. */ + if (REG_P (c)) + { + rtx insn, note = NULL; + for (insn = earliest; + insn != if_info->test_bb->head; + insn = PREV_INSN (insn)) + if (INSN_P (insn) + && ((note = find_reg_note (insn, REG_EQUAL, c)) + || (note = find_reg_note (insn, REG_EQUIV, c)))) + break; + if (! note) + return FALSE; + c = XEXP (note, 0); + } + if (GET_CODE (c) == MEM + && GET_CODE (XEXP (c, 0)) == SYMBOL_REF + && CONSTANT_POOL_ADDRESS_P (XEXP (c, 0))) + c = get_pool_constant (XEXP (c, 0)); + + /* Work around funny ideas get_condition has wrt canonicalization. + Note that these rtx constants are known to be CONST_INT, and + therefore imply integer comparisons. */ + if (c == constm1_rtx && GET_CODE (cond) == GT) + ; + else if (c == const1_rtx && GET_CODE (cond) == LT) + ; + else if (c != CONST0_RTX (GET_MODE (b))) + return FALSE; + + /* Determine what sort of operation this is. */ + switch (GET_CODE (cond)) + { + case LT: + case LE: + case UNLT: + case UNLE: + negate = !negate; + break; + case GT: + case GE: + case UNGT: + case UNGE: + break; + default: + return FALSE; + } + + start_sequence (); + + target = expand_simple_unop (GET_MODE (if_info->x), ABS, b, if_info->x, 0); + + /* ??? It's a quandry whether cmove would be better here, especially + for integers. Perhaps combine will clean things up. */ + if (target && negate) + target = expand_simple_unop (GET_MODE (target), NEG, target, if_info->x, 0); + + if (! target) + { + end_sequence (); + return FALSE; + } + + if (target != if_info->x) + noce_emit_move_insn (if_info->x, target); + + seq = get_insns (); + end_sequence (); + + if (seq_contains_jump (seq)) + return FALSE; + + emit_insns_before (seq, if_info->jump); + if_info->cond = cond; + if_info->cond_earliest = earliest; + + return TRUE; + } + /* Look for the condition for the jump first. We'd prefer to avoid get_condition if we can -- it tries to look back for the contents of an original compare. On targets that use normal integers for *************** noce_get_condition (jump, earliest) *** 1155,1160 **** --- 1545,1596 ---- return cond; } + /* Return true if OP is ok for if-then-else processing. */ + + static int + noce_operand_ok (op) + rtx op; + { + /* We special-case memories, so handle any of them with + no address side effects. */ + if (GET_CODE (op) == MEM) + return ! side_effects_p (XEXP (op, 0)); + + if (side_effects_p (op)) + return FALSE; + + /* ??? Unfortuantely may_trap_p can't look at flag_trapping_math, due to + being linked into the genfoo programs. This is probably a mistake. + With finite operands, most fp operations don't trap. */ + if (!flag_trapping_math && FLOAT_MODE_P (GET_MODE (op))) + switch (GET_CODE (op)) + { + case DIV: + case MOD: + case UDIV: + case UMOD: + /* ??? This is kinda lame -- almost every target will have forced + the constant into a register first. But given the expense of + division, this is probably for the best. */ + return (CONSTANT_P (XEXP (op, 1)) + && XEXP (op, 1) != CONST0_RTX (GET_MODE (op)) + && ! may_trap_p (XEXP (op, 0))); + + default: + switch (GET_RTX_CLASS (GET_CODE (op))) + { + case '1': + return ! may_trap_p (XEXP (op, 0)); + case 'c': + case '2': + return ! may_trap_p (XEXP (op, 0)) && ! may_trap_p (XEXP (op, 1)); + } + break; + } + + return ! may_trap_p (op); + } + /* Given a simple IF-THEN or IF-THEN-ELSE block, attempt to convert it without using conditional execution. Return TRUE if we were successful at converting the the block. */ *************** noce_process_if_block (test_bb, then_bb, *** 1263,1274 **** } /* Don't operate on sources that may trap or are volatile. */ ! if (side_effects_p (a) || side_effects_p (b) ! || (GET_CODE (a) != MEM && may_trap_p (a)) ! || (GET_CODE (b) != MEM && may_trap_p (b))) return FALSE; /* Set up the info block for our subroutines. */ if_info.cond = cond; if_info.jump = jump; if_info.insn_a = insn_a; --- 1699,1709 ---- } /* Don't operate on sources that may trap or are volatile. */ ! if (! noce_operand_ok (a) || ! noce_operand_ok (b)) return FALSE; /* Set up the info block for our subroutines. */ + if_info.test_bb = test_bb; if_info.cond = cond; if_info.jump = jump; if_info.insn_a = insn_a; *************** noce_process_if_block (test_bb, then_bb, *** 1315,1320 **** --- 1750,1759 ---- if (noce_try_store_flag (&if_info)) goto success; + if (noce_try_minmax (&if_info)) + goto success; + if (noce_try_abs (&if_info)) + goto success; if (HAVE_conditional_move && noce_try_cmove (&if_info)) goto success; *************** noce_process_if_block (test_bb, then_bb, *** 1335,1343 **** success: /* The original sets may now be killed. */ ! if (insn_a == then_bb->end) ! then_bb->end = PREV_INSN (insn_a); ! flow_delete_insn (insn_a); /* Several special cases here: First, we may have reused insn_b above, in which case insn_b is now NULL. Second, we want to delete insn_b --- 1774,1780 ---- success: /* The original sets may now be killed. */ ! delete_insn (insn_a); /* Several special cases here: First, we may have reused insn_b above, in which case insn_b is now NULL. Second, we want to delete insn_b *************** noce_process_if_block (test_bb, then_bb, *** 1346,1372 **** the TEST block, it may in fact be loading data needed for the comparison. We'll let life_analysis remove the insn if it's really dead. */ if (insn_b && else_bb) ! { ! if (insn_b == else_bb->end) ! else_bb->end = PREV_INSN (insn_b); ! flow_delete_insn (insn_b); ! } ! /* The new insns will have been inserted before cond_earliest. We should be able to remove the jump with impunity, but the condition itself may have been modified by gcse to be shared across basic blocks. */ ! test_bb->end = PREV_INSN (jump); ! flow_delete_insn (jump); /* If we used a temporary, fix it up now. */ if (orig_x != x) { start_sequence (); ! noce_emit_move_insn (orig_x, x); insn_b = gen_sequence (); end_sequence (); ! test_bb->end = emit_insn_after (insn_b, test_bb->end); } /* Merge the blocks! */ --- 1783,1804 ---- the TEST block, it may in fact be loading data needed for the comparison. We'll let life_analysis remove the insn if it's really dead. */ if (insn_b && else_bb) ! delete_insn (insn_b); ! /* The new insns will have been inserted just before the jump. We should be able to remove the jump with impunity, but the condition itself may have been modified by gcse to be shared across basic blocks. */ ! delete_insn (jump); /* If we used a temporary, fix it up now. */ if (orig_x != x) { start_sequence (); ! noce_emit_move_insn (copy_rtx (orig_x), x); insn_b = gen_sequence (); end_sequence (); ! emit_insn_after (insn_b, test_bb->end); } /* Merge the blocks! */ *************** merge_if_block (test_bb, then_bb, else_b *** 1414,1424 **** /* First merge TEST block into THEN block. This is a no-brainer since the THEN block did not have a code label to begin with. */ ! ! if (life_data_ok) ! COPY_REG_SET (combo_bb->global_live_at_end, then_bb->global_live_at_end); ! merge_blocks_nomove (combo_bb, then_bb); ! num_removed_blocks++; /* The ELSE block, if it existed, had a label. That label count will almost always be zero, but odd things can happen when labels --- 1846,1859 ---- /* First merge TEST block into THEN block. This is a no-brainer since the THEN block did not have a code label to begin with. */ ! if (then_bb) ! { ! if (life_data_ok) ! COPY_REG_SET (combo_bb->global_live_at_end, ! then_bb->global_live_at_end); ! merge_blocks_nomove (combo_bb, then_bb); ! num_removed_blocks++; ! } /* The ELSE block, if it existed, had a label. That label count will almost always be zero, but odd things can happen when labels *************** merge_if_block (test_bb, then_bb, else_b *** 1434,1448 **** if (! join_bb) { /* The outgoing edge for the current COMBO block should already be correct. Verify this. */ if (combo_bb->succ == NULL_EDGE) ! abort (); ! /* There should sill be a branch at the end of the THEN or ELSE blocks taking us to our final destination. */ ! if (! simplejump_p (combo_bb->end) ! && ! returnjump_p (combo_bb->end)) abort (); } --- 1869,1902 ---- if (! join_bb) { + rtx last = combo_bb->end; + /* The outgoing edge for the current COMBO block should already be correct. Verify this. */ if (combo_bb->succ == NULL_EDGE) ! { ! if (find_reg_note (last, REG_NORETURN, NULL)) ! ; ! else if (GET_CODE (last) == INSN ! && GET_CODE (PATTERN (last)) == TRAP_IF ! && TRAP_CONDITION (PATTERN (last)) == const_true_rtx) ! ; ! else ! abort (); ! } ! /* There should still be something at the end of the THEN or ELSE blocks taking us to our final destination. */ ! else if (GET_CODE (last) == JUMP_INSN) ! ; ! else if (combo_bb->succ->dest == EXIT_BLOCK_PTR ! && GET_CODE (last) == CALL_INSN ! && SIBLING_CALL_P (last)) ! ; ! else if ((combo_bb->succ->flags & EDGE_EH) ! && can_throw_internal (last)) ! ; ! else abort (); } *************** merge_if_block (test_bb, then_bb, else_b *** 1452,1458 **** is more than one remaining edge, it must come from elsewhere. There may be zero incoming edges if the THEN block didn't actually join back up (as with a call to abort). */ ! else if (join_bb->pred == NULL || join_bb->pred->pred_next == NULL) { /* We can merge the JOIN. */ if (life_data_ok) --- 1906,1914 ---- is more than one remaining edge, it must come from elsewhere. There may be zero incoming edges if the THEN block didn't actually join back up (as with a call to abort). */ ! else if ((join_bb->pred == NULL ! || join_bb->pred->pred_next == NULL) ! && join_bb != EXIT_BLOCK_PTR) { /* We can merge the JOIN. */ if (life_data_ok) *************** merge_if_block (test_bb, then_bb, else_b *** 1472,1478 **** abort (); /* Remove the jump and cruft from the end of the COMBO block. */ ! tidy_fallthru_edge (combo_bb->succ, combo_bb, join_bb); } /* Make sure we update life info properly. */ --- 1928,1935 ---- abort (); /* Remove the jump and cruft from the end of the COMBO block. */ ! if (join_bb != EXIT_BLOCK_PTR) ! tidy_fallthru_edge (combo_bb->succ, combo_bb, join_bb); } /* Make sure we update life info properly. */ *************** find_if_header (test_bb) *** 1517,1522 **** --- 1974,1982 ---- if (find_if_block (test_bb, then_edge, else_edge)) goto success; + if (HAVE_trap && HAVE_conditional_trap + && find_cond_trap (test_bb, then_edge, else_edge)) + goto success; if (post_dominators && (! HAVE_conditional_execution || reload_completed)) { *************** find_if_block (test_bb, then_edge, else_ *** 1635,1641 **** next_index = then_bb->index; if (else_bb && ++next_index != else_bb->index) return FALSE; ! if (++next_index != join_bb->index) { if (else_bb) join_bb = NULL; --- 2095,2101 ---- next_index = then_bb->index; if (else_bb && ++next_index != else_bb->index) return FALSE; ! if (++next_index != join_bb->index && join_bb->index != EXIT_BLOCK) { if (else_bb) join_bb = NULL; *************** find_if_block (test_bb, then_edge, else_ *** 1647,1652 **** --- 2107,2234 ---- return process_if_block (test_bb, then_bb, else_bb, join_bb); } + /* Convert a branch over a trap, or a branch to a trap, + into a conditional trap. */ + + static int + find_cond_trap (test_bb, then_edge, else_edge) + basic_block test_bb; + edge then_edge, else_edge; + { + basic_block then_bb, else_bb, trap_bb, other_bb; + rtx trap, jump, cond, cond_earliest, seq; + enum rtx_code code; + + then_bb = then_edge->dest; + else_bb = else_edge->dest; + + /* Locate the block with the trap instruction. */ + /* ??? While we look for no successors, we really ought to allow + EH successors. Need to fix merge_if_block for that to work. */ + if ((trap = block_has_only_trap (then_bb)) != NULL) + trap_bb = then_bb, other_bb = else_bb; + else if ((trap = block_has_only_trap (else_bb)) != NULL) + trap_bb = else_bb, other_bb = then_bb; + else + return FALSE; + + if (rtl_dump_file) + { + fprintf (rtl_dump_file, "\nTRAP-IF block found, start %d, trap %d\n", + test_bb->index, trap_bb->index); + } + + /* If this is not a standard conditional jump, we can't parse it. */ + jump = test_bb->end; + cond = noce_get_condition (jump, &cond_earliest); + if (! cond) + return FALSE; + + /* If the conditional jump is more than just a conditional jump, + then we can not do if-conversion on this block. */ + if (! onlyjump_p (jump)) + return FALSE; + + /* We must be comparing objects whose modes imply the size. */ + if (GET_MODE (XEXP (cond, 0)) == BLKmode) + return FALSE; + + /* Reverse the comparison code, if necessary. */ + code = GET_CODE (cond); + if (then_bb == trap_bb) + { + code = reversed_comparison_code (cond, jump); + if (code == UNKNOWN) + return FALSE; + } + + /* Attempt to generate the conditional trap. */ + seq = gen_cond_trap (code, XEXP (cond, 0), XEXP (cond, 1), + TRAP_CODE (PATTERN (trap))); + if (seq == NULL) + return FALSE; + + /* Emit the new insns before cond_earliest. */ + emit_insn_before (seq, cond_earliest); + + /* Delete the trap block if possible. */ + remove_edge (trap_bb == then_bb ? then_edge : else_edge); + if (trap_bb->pred == NULL) + { + flow_delete_block (trap_bb); + num_removed_blocks++; + } + + /* If the non-trap block and the test are now adjacent, merge them. + Otherwise we must insert a direct branch. */ + if (test_bb->index + 1 == other_bb->index) + { + delete_insn (jump); + merge_if_block (test_bb, NULL, NULL, other_bb); + } + else + { + rtx lab, newjump; + + lab = JUMP_LABEL (jump); + newjump = emit_jump_insn_after (gen_jump (lab), jump); + LABEL_NUSES (lab) += 1; + JUMP_LABEL (newjump) = lab; + emit_barrier_after (newjump); + + delete_insn (jump); + } + + return TRUE; + } + + /* Subroutine of find_cond_trap: if BB contains only a trap insn, + return it. */ + + static rtx + block_has_only_trap (bb) + basic_block bb; + { + rtx trap; + + /* We're not the exit block. */ + if (bb == EXIT_BLOCK_PTR) + return NULL_RTX; + + /* The block must have no successors. */ + if (bb->succ) + return NULL_RTX; + + /* The only instruction in the THEN block must be the trap. */ + trap = first_active_insn (bb); + if (! (trap == bb->end + && GET_CODE (PATTERN (trap)) == TRAP_IF + && TRAP_CONDITION (PATTERN (trap)) == const_true_rtx)) + return NULL_RTX; + + return trap; + } + /* Look for IF-THEN-ELSE cases in which one of THEN or ELSE is transformable, but not necessarily the other. There need be no JOIN block. *************** find_if_case_1 (test_bb, then_edge, else *** 1730,1738 **** edge then_edge, else_edge; { basic_block then_bb = then_edge->dest; ! basic_block else_bb = else_edge->dest; edge then_succ = then_bb->succ; - rtx new_lab; /* THEN has one successor. */ if (!then_succ || then_succ->succ_next != NULL) --- 2312,2319 ---- edge then_edge, else_edge; { basic_block then_bb = then_edge->dest; ! basic_block else_bb = else_edge->dest, new_bb; edge then_succ = then_bb->succ; /* THEN has one successor. */ if (!then_succ || then_succ->succ_next != NULL) *************** find_if_case_1 (test_bb, then_edge, else *** 1746,1753 **** if (then_bb->pred->pred_next != NULL) return FALSE; ! /* ELSE follows THEN. (??? could be moved) */ ! if (else_bb->index != then_bb->index + 1) return FALSE; num_possible_if_blocks++; --- 2327,2334 ---- if (then_bb->pred->pred_next != NULL) return FALSE; ! /* THEN must do something. */ ! if (forwarder_block_p (then_bb)) return FALSE; num_possible_if_blocks++; *************** find_if_case_1 (test_bb, then_edge, else *** 1760,1777 **** if (count_bb_insns (then_bb) > BRANCH_COST) return FALSE; - /* Find the label for THEN's destination. */ - if (then_succ->dest == EXIT_BLOCK_PTR) - new_lab = NULL_RTX; - else - { - new_lab = JUMP_LABEL (then_bb->end); - if (! new_lab) - abort (); - } - /* Registers set are dead, or are predicable. */ ! if (! dead_or_predicable (test_bb, then_bb, else_bb, new_lab, 1)) return FALSE; /* Conversion went ok, including moving the insns and fixing up the --- 2341,2349 ---- if (count_bb_insns (then_bb) > BRANCH_COST) return FALSE; /* Registers set are dead, or are predicable. */ ! if (! dead_or_predicable (test_bb, then_bb, else_bb, ! then_bb->succ->dest, 1)) return FALSE; /* Conversion went ok, including moving the insns and fixing up the *************** find_if_case_1 (test_bb, then_edge, else *** 1782,1790 **** else_bb->global_live_at_start, then_bb->global_live_at_end, BITMAP_IOR); ! make_edge (NULL, test_bb, then_succ->dest, 0); flow_delete_block (then_bb); ! tidy_fallthru_edge (else_edge, test_bb, else_bb); num_removed_blocks++; num_updated_if_blocks++; --- 2354,2370 ---- else_bb->global_live_at_start, then_bb->global_live_at_end, BITMAP_IOR); ! new_bb = redirect_edge_and_branch_force (FALLTHRU_EDGE (test_bb), else_bb); ! /* Make rest of code believe that the newly created block is the THEN_BB ! block we are going to remove. */ ! if (new_bb) ! { ! new_bb->aux = then_bb->aux; ! SET_UPDATE_LIFE (then_bb); ! } flow_delete_block (then_bb); ! /* We've possibly created jump to next insn, cleanup_cfg will solve that ! later. */ num_removed_blocks++; num_updated_if_blocks++; *************** find_if_case_2 (test_bb, then_edge, else *** 1802,1808 **** basic_block then_bb = then_edge->dest; basic_block else_bb = else_edge->dest; edge else_succ = else_bb->succ; ! rtx new_lab, note; /* ELSE has one successor. */ if (!else_succ || else_succ->succ_next != NULL) --- 2382,2388 ---- basic_block then_bb = then_edge->dest; basic_block else_bb = else_edge->dest; edge else_succ = else_bb->succ; ! rtx note; /* ELSE has one successor. */ if (!else_succ || else_succ->succ_next != NULL) *************** find_if_case_2 (test_bb, then_edge, else *** 1841,1867 **** if (count_bb_insns (then_bb) > BRANCH_COST) return FALSE; - /* Find the label for ELSE's destination. */ - if (else_succ->dest == EXIT_BLOCK_PTR) - new_lab = NULL_RTX; - else - { - if (else_succ->flags & EDGE_FALLTHRU) - { - new_lab = else_succ->dest->head; - if (GET_CODE (new_lab) != CODE_LABEL) - abort (); - } - else - { - new_lab = JUMP_LABEL (else_bb->end); - if (! new_lab) - abort (); - } - } - /* Registers set are dead, or are predicable. */ ! if (! dead_or_predicable (test_bb, else_bb, then_bb, new_lab, 0)) return FALSE; /* Conversion went ok, including moving the insns and fixing up the --- 2421,2428 ---- if (count_bb_insns (then_bb) > BRANCH_COST) return FALSE; /* Registers set are dead, or are predicable. */ ! if (! dead_or_predicable (test_bb, else_bb, then_bb, else_succ->dest, 0)) return FALSE; /* Conversion went ok, including moving the insns and fixing up the *************** find_if_case_2 (test_bb, then_edge, else *** 1872,1879 **** then_bb->global_live_at_start, else_bb->global_live_at_end, BITMAP_IOR); - remove_edge (else_edge); - make_edge (NULL, test_bb, else_succ->dest, 0); flow_delete_block (else_bb); num_removed_blocks++; --- 2433,2438 ---- *************** find_memory (px, data) *** 1907,1916 **** static int dead_or_predicable (test_bb, merge_bb, other_bb, new_dest, reversep) basic_block test_bb, merge_bb, other_bb; ! rtx new_dest; int reversep; { ! rtx head, end, jump, earliest, old_dest; jump = test_bb->end; --- 2466,2475 ---- static int dead_or_predicable (test_bb, merge_bb, other_bb, new_dest, reversep) basic_block test_bb, merge_bb, other_bb; ! basic_block new_dest; int reversep; { ! rtx head, end, jump, earliest, old_dest, new_label = NULL_RTX; jump = test_bb->end; *************** dead_or_predicable (test_bb, merge_bb, o *** 2003,2009 **** /* ??? Even non-trapping memories such as stack frame references must be avoided. For stores, we collect no lifetime info; for reads, we'd have to assert ! true_dependance false against every store in the TEST range. */ if (for_each_rtx (&PATTERN (insn), find_memory, NULL)) return FALSE; --- 2562,2568 ---- /* ??? Even non-trapping memories such as stack frame references must be avoided. For stores, we collect no lifetime info; for reads, we'd have to assert ! true_dependence false against every store in the TEST range. */ if (for_each_rtx (&PATTERN (insn), find_memory, NULL)) return FALSE; *************** dead_or_predicable (test_bb, merge_bb, o *** 2095,2119 **** change group management. */ old_dest = JUMP_LABEL (jump); ! if (reversep ! ? ! invert_jump_1 (jump, new_dest) ! : ! redirect_jump_1 (jump, new_dest)) ! goto cancel; if (! apply_change_group ()) return FALSE; ! if (old_dest) ! LABEL_NUSES (old_dest) -= 1; ! if (new_dest) ! LABEL_NUSES (new_dest) += 1; ! JUMP_LABEL (jump) = new_dest; ! ! if (reversep) { ! rtx note = find_reg_note (jump, REG_BR_PROB, NULL_RTX); ! if (note) ! XEXP (note, 0) = GEN_INT (REG_BR_PROB_BASE - INTVAL (XEXP (note, 0))); } /* Move the insns out of MERGE_BB to before the branch. */ --- 2654,2694 ---- change group management. */ old_dest = JUMP_LABEL (jump); ! if (other_bb != new_dest) ! { ! new_label = block_label (new_dest); ! if (reversep ! ? ! invert_jump_1 (jump, new_label) ! : ! redirect_jump_1 (jump, new_label)) ! goto cancel; ! } if (! apply_change_group ()) return FALSE; ! if (other_bb != new_dest) { ! if (old_dest) ! LABEL_NUSES (old_dest) -= 1; ! if (new_label) ! LABEL_NUSES (new_label) += 1; ! JUMP_LABEL (jump) = new_label; ! if (reversep) ! invert_br_probabilities (jump); ! ! redirect_edge_succ (BRANCH_EDGE (test_bb), new_dest); ! if (reversep) ! { ! gcov_type count, probability; ! count = BRANCH_EDGE (test_bb)->count; ! BRANCH_EDGE (test_bb)->count = FALLTHRU_EDGE (test_bb)->count; ! FALLTHRU_EDGE (test_bb)->count = count; ! probability = BRANCH_EDGE (test_bb)->probability; ! BRANCH_EDGE (test_bb)->probability ! = FALLTHRU_EDGE (test_bb)->probability; ! FALLTHRU_EDGE (test_bb)->probability = probability; ! update_br_prob_note (test_bb); ! } } /* Move the insns out of MERGE_BB to before the branch. */ *************** dead_or_predicable (test_bb, merge_bb, o *** 2122,2143 **** if (end == merge_bb->end) merge_bb->end = PREV_INSN (head); ! head = squeeze_notes (head, end); ! if (GET_CODE (end) == NOTE ! && (NOTE_LINE_NUMBER (end) == NOTE_INSN_BLOCK_END ! || NOTE_LINE_NUMBER (end) == NOTE_INSN_BLOCK_BEG ! || NOTE_LINE_NUMBER (end) == NOTE_INSN_LOOP_BEG ! || NOTE_LINE_NUMBER (end) == NOTE_INSN_LOOP_END ! || NOTE_LINE_NUMBER (end) == NOTE_INSN_LOOP_CONT ! || NOTE_LINE_NUMBER (end) == NOTE_INSN_LOOP_VTOP)) ! { ! if (head == end) ! return TRUE; ! end = PREV_INSN (end); ! } reorder_insns (head, end, PREV_INSN (earliest)); } return TRUE; cancel: --- 2697,2717 ---- if (end == merge_bb->end) merge_bb->end = PREV_INSN (head); ! if (squeeze_notes (&head, &end)) ! return TRUE; reorder_insns (head, end, PREV_INSN (earliest)); } + + /* Remove the jump and edge if we can. */ + if (other_bb == new_dest) + { + delete_insn (jump); + remove_edge (BRANCH_EDGE (test_bb)); + /* ??? Can't merge blocks here, as then_bb is still in use. + At minimum, the merge will get done just before bb-reorder. */ + } + return TRUE; cancel: *************** if_convert (x_life_data_ok) *** 2190,2198 **** if (rtl_dump_file) fflush (rtl_dump_file); - /* Rebuild basic_block_for_insn for update_life_info and for gcse. */ - compute_bb_for_insn (get_max_uid ()); - /* Rebuild life info for basic blocks that require it. */ if (num_removed_blocks && life_data_ok) { --- 2764,2769 ---- *************** if_convert (x_life_data_ok) *** 2210,2215 **** --- 2781,2787 ---- if (UPDATE_LIFE (BASIC_BLOCK (block_num))) SET_BIT (update_life_blocks, block_num); + clear_aux_for_blocks (); count_or_remove_death_notes (update_life_blocks, 1); /* ??? See about adding a mode that verifies that the initial set of blocks don't let registers come live. */ *************** if_convert (x_life_data_ok) *** 2219,2224 **** --- 2791,2798 ---- sbitmap_free (update_life_blocks); } + else + clear_aux_for_blocks (); /* Write the final stats. */ if (rtl_dump_file && num_possible_if_blocks > 0) diff -Nrc3pad gcc-3.0.4/gcc/input.h gcc-3.1/gcc/input.h *** gcc-3.0.4/gcc/input.h Tue May 9 19:55:47 2000 --- gcc-3.1/gcc/input.h Wed Aug 22 14:35:19 2001 *************** *** 2,23 **** Used by parsers, lexical analyzers, and error message routines. Copyright (C) 1993, 1997, 1998, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* Source file current line is coming from. */ extern const char *input_filename; --- 2,23 ---- Used by parsers, lexical analyzers, and error message routines. Copyright (C) 1993, 1997, 1998, 2000 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* Source file current line is coming from. */ extern const char *input_filename; diff -Nrc3pad gcc-3.0.4/gcc/insn-addr.h gcc-3.1/gcc/insn-addr.h *** gcc-3.0.4/gcc/insn-addr.h Fri Jul 28 02:17:24 2000 --- gcc-3.1/gcc/insn-addr.h Sun Dec 9 16:31:46 2001 *************** *** 1,25 **** /* Macros to support INSN_ADDRESSES Copyright (C) 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ ! #ifndef _INSN_ADDR_H ! #define _INSN_ADDR_H 1 #include "varray.h" --- 1,25 ---- /* Macros to support INSN_ADDRESSES Copyright (C) 2000 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ ! #ifndef GCC_INSN_ADDR_H ! #define GCC_INSN_ADDR_H #include "varray.h" *************** extern int insn_current_address; *** 33,46 **** #define INSN_ADDRESSES_FREE() VARRAY_FREE (insn_addresses_) #define INSN_ADDRESSES_SET_P() (insn_addresses_ != 0) #define INSN_ADDRESSES_SIZE() VARRAY_SIZE (insn_addresses_) ! #define INSN_ADDRESSES_NEW(insn,addr) do { \ ! int insn_uid__ = INSN_UID ((insn)), insn_addr__ = (addr); \ \ ! if (INSN_ADDRESSES_SET_P()) { \ ! if (INSN_ADDRESSES_SIZE() <= insn_uid__) \ ! insn_addresses_ = VARRAY_GROW (insn_addresses_, insn_uid__ + 1); \ ! INSN_ADDRESSES (insn_uid__) = insn_addr__; \ } \ ! } while (0) ! #endif /* _INSN_ADDR_H */ --- 33,50 ---- #define INSN_ADDRESSES_FREE() VARRAY_FREE (insn_addresses_) #define INSN_ADDRESSES_SET_P() (insn_addresses_ != 0) #define INSN_ADDRESSES_SIZE() VARRAY_SIZE (insn_addresses_) ! #define INSN_ADDRESSES_NEW(insn, addr) do \ ! { \ ! unsigned insn_uid__ = INSN_UID ((insn)); \ ! int insn_addr__ = (addr); \ \ ! if (INSN_ADDRESSES_SET_P ()) \ ! { \ ! if (INSN_ADDRESSES_SIZE () <= insn_uid__) \ ! VARRAY_GROW (insn_addresses_, insn_uid__ + 1); \ ! INSN_ADDRESSES (insn_uid__) = insn_addr__; \ ! } \ } \ ! while (0) ! #endif /* ! GCC_INSN_ADDR_H */ diff -Nrc3pad gcc-3.0.4/gcc/integrate.c gcc-3.1/gcc/integrate.c *** gcc-3.0.4/gcc/integrate.c Thu Jan 31 20:42:56 2002 --- gcc-3.1/gcc/integrate.c Fri Apr 12 19:17:54 2002 *************** *** 1,24 **** ! /* Procedure integration for GNU CC. Copyright (C) 1988, 1991, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" #include "system.h" --- 1,24 ---- ! /* Procedure integration for GCC. Copyright (C) 1988, 1991, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" #include "system.h" *************** Boston, MA 02111-1307, USA. */ *** 28,33 **** --- 28,34 ---- #include "tm_p.h" #include "regs.h" #include "flags.h" + #include "debug.h" #include "insn-config.h" #include "expr.h" #include "output.h" *************** Boston, MA 02111-1307, USA. */ *** 40,45 **** --- 41,48 ---- #include "intl.h" #include "loop.h" #include "params.h" + #include "ggc.h" + #include "target.h" #include "obstack.h" #define obstack_chunk_alloc xmalloc *************** extern struct obstack *function_maybeper *** 61,73 **** ? (1 + (3 * list_length (DECL_ARGUMENTS (DECL))) / 2) \ : (8 * (8 + list_length (DECL_ARGUMENTS (DECL))))) #endif - - /* Decide whether a function with a target specific attribute - attached can be inlined. By default we disallow this. */ - #ifndef FUNCTION_ATTRIBUTE_INLINABLE_P - #define FUNCTION_ATTRIBUTE_INLINABLE_P(FNDECL) 0 - #endif static rtvec initialize_for_inline PARAMS ((tree)); static void note_modified_parmregs PARAMS ((rtx, rtx, void *)); static void integrate_parm_decls PARAMS ((tree, struct inline_remap *, --- 64,84 ---- ? (1 + (3 * list_length (DECL_ARGUMENTS (DECL))) / 2) \ : (8 * (8 + list_length (DECL_ARGUMENTS (DECL))))) #endif + + /* Private type used by {get/has}_func_hard_reg_initial_val. */ + typedef struct initial_value_pair { + rtx hard_reg; + rtx pseudo; + } initial_value_pair; + typedef struct initial_value_struct { + int num_entries; + int max_entries; + initial_value_pair *entries; + } initial_value_struct; + + static void setup_initial_hard_reg_value_integration PARAMS ((struct function *, struct inline_remap *)); + static rtvec initialize_for_inline PARAMS ((tree)); static void note_modified_parmregs PARAMS ((rtx, rtx, void *)); static void integrate_parm_decls PARAMS ((tree, struct inline_remap *, *************** get_label_from_map (map, i) *** 114,119 **** --- 125,162 ---- return x; } + /* Return false if the function FNDECL cannot be inlined on account of its + attributes, true otherwise. */ + bool + function_attribute_inlinable_p (fndecl) + tree fndecl; + { + bool has_machine_attr = false; + tree a; + + for (a = DECL_ATTRIBUTES (fndecl); a; a = TREE_CHAIN (a)) + { + tree name = TREE_PURPOSE (a); + int i; + + for (i = 0; targetm.attribute_table[i].name != NULL; i++) + { + if (is_attribute_p (targetm.attribute_table[i].name, name)) + { + has_machine_attr = true; + break; + } + } + if (has_machine_attr) + break; + } + + if (has_machine_attr) + return (*targetm.function_attribute_inlinable_p) (fndecl); + else + return true; + } + /* Zero if the current function (whose FUNCTION_DECL is FNDECL) is safe and reasonable to integrate into other functions. Nonzero means value is a warning msgid with a single %s *************** get_label_from_map (map, i) *** 121,129 **** const char * function_cannot_inline_p (fndecl) ! register tree fndecl; { ! register rtx insn; tree last = tree_last (TYPE_ARG_TYPES (TREE_TYPE (fndecl))); /* For functions marked as inline increase the maximum size to --- 164,172 ---- const char * function_cannot_inline_p (fndecl) ! tree fndecl; { ! rtx insn; tree last = tree_last (TYPE_ARG_TYPES (TREE_TYPE (fndecl))); /* For functions marked as inline increase the maximum size to *************** function_cannot_inline_p (fndecl) *** 135,142 **** + 8 * list_length (DECL_ARGUMENTS (fndecl))) : INTEGRATE_THRESHOLD (fndecl); ! register int ninsns = 0; ! register tree parms; if (DECL_UNINLINABLE (fndecl)) return N_("function cannot be inline"); --- 178,185 ---- + 8 * list_length (DECL_ARGUMENTS (fndecl))) : INTEGRATE_THRESHOLD (fndecl); ! int ninsns = 0; ! tree parms; if (DECL_UNINLINABLE (fndecl)) return N_("function cannot be inline"); *************** function_cannot_inline_p (fndecl) *** 234,242 **** /* If the function has a target specific attribute attached to it, then we assume that we should not inline it. This can be overriden ! by the target if it defines FUNCTION_ATTRIBUTE_INLINABLE_P. */ ! if (DECL_MACHINE_ATTRIBUTES (fndecl) ! && ! FUNCTION_ATTRIBUTE_INLINABLE_P (fndecl)) return N_("function with target specific attribute(s) cannot be inlined"); return NULL; --- 277,284 ---- /* If the function has a target specific attribute attached to it, then we assume that we should not inline it. This can be overriden ! by the target if it defines TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P. */ ! if (!function_attribute_inlinable_p (fndecl)) return N_("function with target specific attribute(s) cannot be inlined"); return NULL; *************** save_for_inline (fndecl) *** 398,405 **** Also set up ARG_VECTOR, which holds the unmodified DECL_RTX values for the parms, prior to elimination of virtual registers. These values are needed for substituting parms properly. */ ! ! parmdecl_map = (tree *) xmalloc (max_parm_reg * sizeof (tree)); /* Make and emit a return-label if we have not already done so. */ --- 440,447 ---- Also set up ARG_VECTOR, which holds the unmodified DECL_RTX values for the parms, prior to elimination of virtual registers. These values are needed for substituting parms properly. */ ! if (! flag_no_inline) ! parmdecl_map = (tree *) xmalloc (max_parm_reg * sizeof (tree)); /* Make and emit a return-label if we have not already done so. */ *************** save_for_inline (fndecl) *** 409,415 **** emit_label (return_label); } ! argvec = initialize_for_inline (fndecl); /* If there are insns that copy parms from the stack into pseudo registers, those insns are not copied. `expand_inline_function' must --- 451,467 ---- emit_label (return_label); } ! if (! flag_no_inline) ! argvec = initialize_for_inline (fndecl); ! else ! argvec = NULL; ! ! /* Delete basic block notes created by early run of find_basic_block. ! The notes would be later used by find_basic_blocks to reuse the memory ! for basic_block structures on already freed obstack. */ ! for (insn = get_insns (); insn ; insn = NEXT_INSN (insn)) ! if (GET_CODE (insn) == NOTE && NOTE_LINE_NUMBER (insn) == NOTE_INSN_BASIC_BLOCK) ! delete_related_insns (insn); /* If there are insns that copy parms from the stack into pseudo registers, those insns are not copied. `expand_inline_function' must *************** save_for_inline (fndecl) *** 419,445 **** if (GET_CODE (insn) != NOTE) abort (); ! /* Get the insn which signals the end of parameter setup code. */ ! first_nonparm_insn = get_first_nonparm_insn (); ! /* Now just scan the chain of insns to see what happens to our ! PARM_DECLs. If a PARM_DECL is used but never modified, we ! can substitute its rtl directly when expanding inline (and ! perform constant folding when its incoming value is constant). ! Otherwise, we have to copy its value into a new register and track ! the new register's life. */ ! in_nonparm_insns = 0; ! save_parm_insns (insn, first_nonparm_insn); ! cfun->inl_max_label_num = max_label_num (); ! cfun->inl_last_parm_insn = cfun->x_last_parm_insn; ! cfun->original_arg_vector = argvec; cfun->original_decl_initial = DECL_INITIAL (fndecl); cfun->no_debugging_symbols = (write_symbols == NO_DEBUG); DECL_SAVED_INSNS (fndecl) = cfun; /* Clean up. */ ! free (parmdecl_map); } /* Scan the chain of insns to see what happens to our PARM_DECLs. If a --- 471,501 ---- if (GET_CODE (insn) != NOTE) abort (); ! if (! flag_no_inline) ! { ! /* Get the insn which signals the end of parameter setup code. */ ! first_nonparm_insn = get_first_nonparm_insn (); ! /* Now just scan the chain of insns to see what happens to our ! PARM_DECLs. If a PARM_DECL is used but never modified, we ! can substitute its rtl directly when expanding inline (and ! perform constant folding when its incoming value is ! constant). Otherwise, we have to copy its value into a new ! register and track the new register's life. */ ! in_nonparm_insns = 0; ! save_parm_insns (insn, first_nonparm_insn); ! cfun->inl_max_label_num = max_label_num (); ! cfun->inl_last_parm_insn = cfun->x_last_parm_insn; ! cfun->original_arg_vector = argvec; ! } cfun->original_decl_initial = DECL_INITIAL (fndecl); cfun->no_debugging_symbols = (write_symbols == NO_DEBUG); DECL_SAVED_INSNS (fndecl) = cfun; /* Clean up. */ ! if (! flag_no_inline) ! free (parmdecl_map); } /* Scan the chain of insns to see what happens to our PARM_DECLs. If a *************** process_reg_param (map, loc, copy) *** 539,545 **** } /* Compare two BLOCKs for qsort. The key we sort on is the ! BLOCK_ABSTRACT_ORIGIN of the blocks. */ static int compare_blocks (v1, v2) --- 595,602 ---- } /* Compare two BLOCKs for qsort. The key we sort on is the ! BLOCK_ABSTRACT_ORIGIN of the blocks. We cannot just subtract the ! two pointers, because it may overflow sizeof(int). */ static int compare_blocks (v1, v2) *************** compare_blocks (v1, v2) *** 548,556 **** { tree b1 = *((const tree *) v1); tree b2 = *((const tree *) v2); ! return ((char *) BLOCK_ABSTRACT_ORIGIN (b1) ! - (char *) BLOCK_ABSTRACT_ORIGIN (b2)); } /* Compare two BLOCKs for bsearch. The first pointer corresponds to --- 605,616 ---- { tree b1 = *((const tree *) v1); tree b2 = *((const tree *) v2); + char *p1 = (char *) BLOCK_ABSTRACT_ORIGIN (b1); + char *p2 = (char *) BLOCK_ABSTRACT_ORIGIN (b2); ! if (p1 == p2) ! return 0; ! return p1 < p2 ? -1 : 1; } /* Compare two BLOCKs for bsearch. The first pointer corresponds to *************** find_block (v1, v2) *** 563,570 **** { const union tree_node *b1 = (const union tree_node *) v1; tree b2 = *((const tree *) v2); ! return ((const char *) b1 - (char *) BLOCK_ABSTRACT_ORIGIN (b2)); } /* Integrate the procedure defined by FNDECL. Note that this function --- 623,634 ---- { const union tree_node *b1 = (const union tree_node *) v1; tree b2 = *((const tree *) v2); + char *p1 = (char *) b1; + char *p2 = (char *) BLOCK_ABSTRACT_ORIGIN (b2); ! if (p1 == p2) ! return 0; ! return p1 < p2 ? -1 : 1; } /* Integrate the procedure defined by FNDECL. Note that this function *************** expand_inline_function (fndecl, parms, t *** 599,605 **** tree *arg_trees; rtx *arg_vals; int max_regno; ! register int i; int min_labelno = inl_f->emit->x_first_label_num; int max_labelno = inl_f->inl_max_label_num; int nargs; --- 663,669 ---- tree *arg_trees; rtx *arg_vals; int max_regno; ! int i; int min_labelno = inl_f->emit->x_first_label_num; int max_labelno = inl_f->inl_max_label_num; int nargs; *************** expand_inline_function (fndecl, parms, t *** 607,615 **** rtx stack_save = 0; rtx temp; struct inline_remap *map = 0; - #ifdef HAVE_cc0 - rtx cc0_insn = 0; - #endif rtvec arg_vector = (rtvec) inl_f->original_arg_vector; rtx static_chain_value = 0; int inl_max_uid; --- 671,676 ---- *************** expand_inline_function (fndecl, parms, t *** 645,663 **** enum machine_mode mode; if (actual == 0) ! return (rtx) (HOST_WIDE_INT) -1; arg = TREE_VALUE (actual); mode = TYPE_MODE (DECL_ARG_TYPE (formal)); ! if (mode != TYPE_MODE (TREE_TYPE (arg)) /* If they are block mode, the types should match exactly. They don't match exactly if TREE_TYPE (FORMAL) == ERROR_MARK_NODE, which could happen if the parameter has incomplete type. */ || (mode == BLKmode && (TYPE_MAIN_VARIANT (TREE_TYPE (arg)) != TYPE_MAIN_VARIANT (TREE_TYPE (formal))))) ! return (rtx) (HOST_WIDE_INT) -1; } /* Extra arguments are valid, but will be ignored below, so we must --- 706,725 ---- enum machine_mode mode; if (actual == 0) ! return (rtx) (size_t) -1; arg = TREE_VALUE (actual); mode = TYPE_MODE (DECL_ARG_TYPE (formal)); ! if (arg == error_mark_node ! || mode != TYPE_MODE (TREE_TYPE (arg)) /* If they are block mode, the types should match exactly. They don't match exactly if TREE_TYPE (FORMAL) == ERROR_MARK_NODE, which could happen if the parameter has incomplete type. */ || (mode == BLKmode && (TYPE_MAIN_VARIANT (TREE_TYPE (arg)) != TYPE_MAIN_VARIANT (TREE_TYPE (formal))))) ! return (rtx) (size_t) -1; } /* Extra arguments are valid, but will be ignored below, so we must *************** expand_inline_function (fndecl, parms, t *** 702,714 **** else if (GET_CODE (loc) != MEM) { if (GET_MODE (loc) != TYPE_MODE (TREE_TYPE (arg))) ! /* The mode if LOC and ARG can differ if LOC was a variable ! that had its mode promoted via PROMOTED_MODE. */ ! arg_vals[i] = convert_modes (GET_MODE (loc), ! TYPE_MODE (TREE_TYPE (arg)), ! expand_expr (arg, NULL_RTX, mode, ! EXPAND_SUM), ! TREE_UNSIGNED (TREE_TYPE (formal))); else arg_vals[i] = expand_expr (arg, NULL_RTX, mode, EXPAND_SUM); } --- 764,787 ---- else if (GET_CODE (loc) != MEM) { if (GET_MODE (loc) != TYPE_MODE (TREE_TYPE (arg))) ! { ! int unsignedp = TREE_UNSIGNED (TREE_TYPE (formal)); ! enum machine_mode pmode = TYPE_MODE (TREE_TYPE (formal)); ! ! pmode = promote_mode (TREE_TYPE (formal), pmode, ! &unsignedp, 0); ! ! if (GET_MODE (loc) != pmode) ! abort (); ! ! /* The mode if LOC and ARG can differ if LOC was a variable ! that had its mode promoted via PROMOTED_MODE. */ ! arg_vals[i] = convert_modes (pmode, ! TYPE_MODE (TREE_TYPE (arg)), ! expand_expr (arg, NULL_RTX, mode, ! EXPAND_SUM), ! unsignedp); ! } else arg_vals[i] = expand_expr (arg, NULL_RTX, mode, EXPAND_SUM); } *************** expand_inline_function (fndecl, parms, t *** 795,801 **** insn that can be used as an insertion point. */ map->insns_at_start = get_last_insn (); if (map->insns_at_start == 0) ! map->insns_at_start = emit_note (NULL_PTR, NOTE_INSN_DELETED); map->regno_pointer_align = inl_f->emit->regno_pointer_align; map->x_regno_reg_rtx = inl_f->emit->x_regno_reg_rtx; --- 868,874 ---- insn that can be used as an insertion point. */ map->insns_at_start = get_last_insn (); if (map->insns_at_start == 0) ! map->insns_at_start = emit_note (NULL, NOTE_INSN_DELETED); map->regno_pointer_align = inl_f->emit->regno_pointer_align; map->x_regno_reg_rtx = inl_f->emit->x_regno_reg_rtx; *************** expand_inline_function (fndecl, parms, t *** 1009,1015 **** /* The function returns an object in a register and we use the return value. Set up our target for remapping. */ ! /* Machine mode function was declared to return. */ enum machine_mode departing_mode = TYPE_MODE (type); /* (Possibly wider) machine mode it actually computes (for the sake of callers that fail to declare it right). --- 1082,1088 ---- /* The function returns an object in a register and we use the return value. Set up our target for remapping. */ ! /* Machine mode function was declared to return. */ enum machine_mode departing_mode = TYPE_MODE (type); /* (Possibly wider) machine mode it actually computes (for the sake of callers that fail to declare it right). *************** expand_inline_function (fndecl, parms, t *** 1071,1076 **** --- 1144,1174 ---- else map->reg_map[REGNO (loc)] = reg_to_map; } + else if (GET_CODE (loc) == CONCAT) + { + enum machine_mode departing_mode = TYPE_MODE (type); + enum machine_mode arriving_mode + = GET_MODE (DECL_RTL (DECL_RESULT (fndecl))); + + if (departing_mode != arriving_mode) + abort (); + if (GET_CODE (XEXP (loc, 0)) != REG + || GET_CODE (XEXP (loc, 1)) != REG) + abort (); + + /* Don't use MEMs as direct targets because on some machines + substituting a MEM for a REG makes invalid insns. + Let the combiner substitute the MEM if that is valid. */ + if (target == 0 || GET_CODE (target) != REG + || GET_MODE (target) != departing_mode) + target = gen_reg_rtx (departing_mode); + + if (GET_CODE (target) != CONCAT) + abort (); + + map->reg_map[REGNO (XEXP (loc, 0))] = XEXP (target, 0); + map->reg_map[REGNO (XEXP (loc, 1))] = XEXP (target, 1); + } else abort (); *************** expand_inline_function (fndecl, parms, t *** 1122,1127 **** --- 1220,1228 ---- if (inl_f->calls_alloca) emit_stack_save (SAVE_BLOCK, &stack_save, NULL_RTX); + /* Map pseudos used for initial hard reg values. */ + setup_initial_hard_reg_value_integration (inl_f, map); + /* Now copy the insns one by one. */ copy_insn_list (insns, map, static_chain_value); *************** copy_insn_list (insns, map, static_chain *** 1219,1225 **** struct inline_remap *map; rtx static_chain_value; { ! register int i; rtx insn; rtx temp; #ifdef HAVE_cc0 --- 1320,1326 ---- struct inline_remap *map; rtx static_chain_value; { ! int i; rtx insn; rtx temp; #ifdef HAVE_cc0 *************** copy_insn_list (insns, map, static_chain *** 1438,1451 **** { #ifdef HAVE_cc0 /* If the previous insn set cc0 for us, delete it. */ ! if (sets_cc0_p (PREV_INSN (copy))) ! delete_insn (PREV_INSN (copy)); #endif /* If this is now a no-op, delete it. */ if (map->last_pc_value == pc_rtx) { ! delete_insn (copy); copy = 0; } else --- 1539,1552 ---- { #ifdef HAVE_cc0 /* If the previous insn set cc0 for us, delete it. */ ! if (only_sets_cc0_p (PREV_INSN (copy))) ! delete_related_insns (PREV_INSN (copy)); #endif /* If this is now a no-op, delete it. */ if (map->last_pc_value == pc_rtx) { ! delete_related_insns (copy); copy = 0; } else *************** copy_insn_list (insns, map, static_chain *** 1497,1503 **** copy = emit_call_insn (pattern); SIBLING_CALL_P (copy) = SIBLING_CALL_P (insn); ! CONST_CALL_P (copy) = CONST_CALL_P (insn); /* Because the USAGE information potentially contains objects other than hard registers, we need to copy it. */ --- 1598,1604 ---- copy = emit_call_insn (pattern); SIBLING_CALL_P (copy) = SIBLING_CALL_P (insn); ! CONST_OR_PURE_CALL_P (copy) = CONST_OR_PURE_CALL_P (insn); /* Because the USAGE information potentially contains objects other than hard registers, we need to copy it. */ *************** copy_insn_list (insns, map, static_chain *** 1530,1550 **** break; case NOTE: /* NOTE_INSN_FUNCTION_END and NOTE_INSN_FUNCTION_BEG are discarded because it is important to have only one of each in the current function. ! NOTE_INSN_DELETED notes aren't useful. ! ! NOTE_INSN_BASIC_BLOCK is discarded because the saved bb ! pointer (which will soon be dangling) confuses flow's ! attempts to preserve bb structures during the compilation ! of a function. */ if (NOTE_LINE_NUMBER (insn) != NOTE_INSN_FUNCTION_END && NOTE_LINE_NUMBER (insn) != NOTE_INSN_FUNCTION_BEG ! && NOTE_LINE_NUMBER (insn) != NOTE_INSN_DELETED ! && NOTE_LINE_NUMBER (insn) != NOTE_INSN_BASIC_BLOCK) { copy = emit_note (NOTE_SOURCE_FILE (insn), NOTE_LINE_NUMBER (insn)); --- 1631,1654 ---- break; case NOTE: + if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_DELETED_LABEL) + { + copy = emit_label (get_label_from_map (map, + CODE_LABEL_NUMBER (insn))); + LABEL_NAME (copy) = NOTE_SOURCE_FILE (insn); + map->const_age++; + break; + } + /* NOTE_INSN_FUNCTION_END and NOTE_INSN_FUNCTION_BEG are discarded because it is important to have only one of each in the current function. ! NOTE_INSN_DELETED notes aren't useful. */ if (NOTE_LINE_NUMBER (insn) != NOTE_INSN_FUNCTION_END && NOTE_LINE_NUMBER (insn) != NOTE_INSN_FUNCTION_BEG ! && NOTE_LINE_NUMBER (insn) != NOTE_INSN_DELETED) { copy = emit_note (NOTE_SOURCE_FILE (insn), NOTE_LINE_NUMBER (insn)); *************** copy_insn_notes (insns, map, eh_region_o *** 1627,1633 **** next = XEXP (note, 1); if (REG_NOTE_KIND (note) == REG_LABEL) remove_note (new_insn, note); ! else if (REG_NOTE_KIND (note) == REG_EH_REGION) XEXP (note, 0) = GEN_INT (INTVAL (XEXP (note, 0)) + eh_region_offset); } --- 1731,1738 ---- next = XEXP (note, 1); if (REG_NOTE_KIND (note) == REG_LABEL) remove_note (new_insn, note); ! else if (REG_NOTE_KIND (note) == REG_EH_REGION ! && INTVAL (XEXP (note, 0)) > 0) XEXP (note, 0) = GEN_INT (INTVAL (XEXP (note, 0)) + eh_region_offset); } *************** integrate_parm_decls (args, map, arg_vec *** 1656,1663 **** struct inline_remap *map; rtvec arg_vector; { ! register tree tail; ! register int i; for (tail = args, i = 0; tail; tail = TREE_CHAIN (tail), i++) { --- 1761,1768 ---- struct inline_remap *map; rtvec arg_vector; { ! tree tail; ! int i; for (tail = args, i = 0; tail; tail = TREE_CHAIN (tail), i++) { *************** integrate_decl_tree (let, map) *** 1718,1723 **** --- 1823,1837 ---- r = DECL_RTL (d); subst_constants (&r, NULL_RTX, map, 1); SET_DECL_RTL (d, r); + + if (GET_CODE (r) == REG) + REGNO_DECL (REGNO (r)) = d; + else if (GET_CODE (r) == CONCAT) + { + REGNO_DECL (REGNO (XEXP (r, 0))) = d; + REGNO_DECL (REGNO (XEXP (r, 1))) = d; + } + apply_change_group (); } *************** integrate_decl_tree (let, map) *** 1758,1772 **** rtx copy_rtx_and_substitute (orig, map, for_lhs) ! register rtx orig; struct inline_remap *map; int for_lhs; { ! register rtx copy, temp; ! register int i, j; ! register RTX_CODE code; ! register enum machine_mode mode; ! register const char *format_ptr; int regno; if (orig == 0) --- 1872,1886 ---- rtx copy_rtx_and_substitute (orig, map, for_lhs) ! rtx orig; struct inline_remap *map; int for_lhs; { ! rtx copy, temp; ! int i, j; ! RTX_CODE code; ! enum machine_mode mode; ! const char *format_ptr; int regno; if (orig == 0) *************** copy_rtx_and_substitute (orig, map, for_ *** 1933,1957 **** case SUBREG: copy = copy_rtx_and_substitute (SUBREG_REG (orig), map, for_lhs); ! /* SUBREG is ordinary, but don't make nested SUBREGs. */ ! if (GET_CODE (copy) == SUBREG) ! return gen_rtx_SUBREG (GET_MODE (orig), SUBREG_REG (copy), ! SUBREG_WORD (orig) + SUBREG_WORD (copy)); ! else if (GET_CODE (copy) == CONCAT) ! { ! rtx retval = subreg_realpart_p (orig) ? XEXP (copy, 0) : XEXP (copy, 1); ! ! if (GET_MODE (retval) == GET_MODE (orig)) ! return retval; ! else ! return gen_rtx_SUBREG (GET_MODE (orig), retval, ! (SUBREG_WORD (orig) % ! (GET_MODE_UNIT_SIZE (GET_MODE (SUBREG_REG (orig))) ! / (unsigned) UNITS_PER_WORD))); ! } ! else ! return gen_rtx_SUBREG (GET_MODE (orig), copy, ! SUBREG_WORD (orig)); case ADDRESSOF: copy = gen_rtx_ADDRESSOF (mode, --- 2047,2055 ---- case SUBREG: copy = copy_rtx_and_substitute (SUBREG_REG (orig), map, for_lhs); ! return simplify_gen_subreg (GET_MODE (orig), copy, ! GET_MODE (SUBREG_REG (orig)), ! SUBREG_BYTE (orig)); case ADDRESSOF: copy = gen_rtx_ADDRESSOF (mode, *************** copy_rtx_and_substitute (orig, map, for_ *** 1989,2006 **** copy = SUBREG_REG (copy); return gen_rtx_fmt_e (code, VOIDmode, copy); case CODE_LABEL: LABEL_PRESERVE_P (get_label_from_map (map, CODE_LABEL_NUMBER (orig))) = LABEL_PRESERVE_P (orig); return get_label_from_map (map, CODE_LABEL_NUMBER (orig)); - /* We need to handle "deleted" labels that appear in the DECL_RTL - of a LABEL_DECL. */ - case NOTE: - if (NOTE_LINE_NUMBER (orig) == NOTE_INSN_DELETED_LABEL) - return map->insn_map[INSN_UID (orig)]; - break; - case LABEL_REF: copy = gen_rtx_LABEL_REF --- 2087,2104 ---- copy = SUBREG_REG (copy); return gen_rtx_fmt_e (code, VOIDmode, copy); + /* We need to handle "deleted" labels that appear in the DECL_RTL + of a LABEL_DECL. */ + case NOTE: + if (NOTE_LINE_NUMBER (orig) != NOTE_INSN_DELETED_LABEL) + break; + + /* ... FALLTHRU ... */ case CODE_LABEL: LABEL_PRESERVE_P (get_label_from_map (map, CODE_LABEL_NUMBER (orig))) = LABEL_PRESERVE_P (orig); return get_label_from_map (map, CODE_LABEL_NUMBER (orig)); case LABEL_REF: copy = gen_rtx_LABEL_REF *************** copy_rtx_and_substitute (orig, map, for_ *** 2030,2035 **** --- 2128,2134 ---- case PC: case CC0: case CONST_INT: + case CONST_VECTOR: return orig; case SYMBOL_REF: *************** copy_rtx_and_substitute (orig, map, for_ *** 2133,2145 **** #ifndef NO_FUNCTION_CSE if (! (optimize && ! flag_no_function_cse)) #endif ! return ! gen_rtx_CALL ! (GET_MODE (orig), ! gen_rtx_MEM (GET_MODE (XEXP (orig, 0)), ! copy_rtx_and_substitute (XEXP (XEXP (orig, 0), 0), ! map, 0)), ! copy_rtx_and_substitute (XEXP (orig, 1), map, 0)); break; #if 0 --- 2232,2249 ---- #ifndef NO_FUNCTION_CSE if (! (optimize && ! flag_no_function_cse)) #endif ! { ! rtx copy ! = gen_rtx_MEM (GET_MODE (XEXP (orig, 0)), ! copy_rtx_and_substitute (XEXP (XEXP (orig, 0), 0), ! map, 0)); ! ! MEM_COPY_ATTRIBUTES (copy, XEXP (orig, 0)); ! ! return ! gen_rtx_CALL (GET_MODE (orig), copy, ! copy_rtx_and_substitute (XEXP (orig, 1), map, 0)); ! } break; #if 0 *************** copy_rtx_and_substitute (orig, map, for_ *** 2206,2215 **** return validize_mem (force_const_mem (const_mode, constant)); } ! copy = rtx_alloc (MEM); ! PUT_MODE (copy, mode); ! XEXP (copy, 0) = copy_rtx_and_substitute (XEXP (orig, 0), map, 0); MEM_COPY_ATTRIBUTES (copy, orig); return copy; default: --- 2310,2325 ---- return validize_mem (force_const_mem (const_mode, constant)); } ! copy = gen_rtx_MEM (mode, copy_rtx_and_substitute (XEXP (orig, 0), ! map, 0)); MEM_COPY_ATTRIBUTES (copy, orig); + + /* If inlining and this is not for the LHS, turn off RTX_UNCHANGING_P + since this may be an indirect reference to a parameter and the + actual may not be readonly. */ + if (inlining && !for_lhs) + RTX_UNCHANGING_P (copy) = 0; + return copy; default: *************** subst_constants (loc, insn, map, memonly *** 2364,2372 **** int memonly; { rtx x = *loc; ! register int i, j; ! register enum rtx_code code; ! register const char *format_ptr; int num_changes = num_validated_changes (); rtx new = 0; enum machine_mode op0_mode = MAX_MACHINE_MODE; --- 2474,2482 ---- int memonly; { rtx x = *loc; ! int i, j; ! enum rtx_code code; ! const char *format_ptr; int num_changes = num_validated_changes (); rtx new = 0; enum machine_mode op0_mode = MAX_MACHINE_MODE; *************** subst_constants (loc, insn, map, memonly *** 2378,2383 **** --- 2488,2494 ---- case PC: case CONST_INT: case CONST_DOUBLE: + case CONST_VECTOR: case SYMBOL_REF: case CONST: case LABEL_REF: *************** subst_constants (loc, insn, map, memonly *** 2433,2451 **** valid. We handle two cases: extracting a full word in an integral mode and extracting the low part. */ subst_constants (&inner, NULL_RTX, map, 0); ! ! if (GET_MODE_CLASS (GET_MODE (x)) == MODE_INT ! && GET_MODE_SIZE (GET_MODE (x)) == UNITS_PER_WORD ! && GET_MODE (SUBREG_REG (x)) != VOIDmode) ! new = operand_subword (inner, SUBREG_WORD (x), 0, ! GET_MODE (SUBREG_REG (x))); ! ! cancel_changes (num_changes); ! if (new == 0 && subreg_lowpart_p (x)) ! new = gen_lowpart_common (GET_MODE (x), inner); if (new) validate_change (insn, loc, new, 1); return; } --- 2544,2557 ---- valid. We handle two cases: extracting a full word in an integral mode and extracting the low part. */ subst_constants (&inner, NULL_RTX, map, 0); ! new = simplify_gen_subreg (GET_MODE (x), inner, ! GET_MODE (SUBREG_REG (x)), ! SUBREG_BYTE (x)); if (new) validate_change (insn, loc, new, 1); + else + cancel_changes (num_changes); return; } *************** subst_constants (loc, insn, map, memonly *** 2642,2648 **** new = CONST0_RTX (mode); else { ! REAL_VALUE_TYPE val = FLOAT_STORE_FLAG_VALUE (mode); new = CONST_DOUBLE_FROM_REAL_VALUE (val, mode); } } --- 2748,2757 ---- new = CONST0_RTX (mode); else { ! REAL_VALUE_TYPE val; ! ! /* Avoid automatic aggregate initialization. */ ! val = FLOAT_STORE_FLAG_VALUE (mode); new = CONST_DOUBLE_FROM_REAL_VALUE (val, mode); } } *************** mark_stores (dest, x, data) *** 2715,2721 **** regno = REGNO (dest), mode = GET_MODE (dest); else if (GET_CODE (dest) == SUBREG && GET_CODE (SUBREG_REG (dest)) == REG) { ! regno = REGNO (SUBREG_REG (dest)) + SUBREG_WORD (dest); mode = GET_MODE (SUBREG_REG (dest)); } --- 2824,2835 ---- regno = REGNO (dest), mode = GET_MODE (dest); else if (GET_CODE (dest) == SUBREG && GET_CODE (SUBREG_REG (dest)) == REG) { ! regno = REGNO (SUBREG_REG (dest)); ! if (regno < FIRST_PSEUDO_REGISTER) ! regno += subreg_regno_offset (REGNO (SUBREG_REG (dest)), ! GET_MODE (SUBREG_REG (dest)), ! SUBREG_BYTE (dest), ! GET_MODE (dest)); mode = GET_MODE (SUBREG_REG (dest)); } *************** mark_stores (dest, x, data) *** 2748,2761 **** static void set_block_origin_self (stmt) ! register tree stmt; { if (BLOCK_ABSTRACT_ORIGIN (stmt) == NULL_TREE) { BLOCK_ABSTRACT_ORIGIN (stmt) = stmt; { ! register tree local_decl; for (local_decl = BLOCK_VARS (stmt); local_decl != NULL_TREE; --- 2862,2875 ---- static void set_block_origin_self (stmt) ! tree stmt; { if (BLOCK_ABSTRACT_ORIGIN (stmt) == NULL_TREE) { BLOCK_ABSTRACT_ORIGIN (stmt) = stmt; { ! tree local_decl; for (local_decl = BLOCK_VARS (stmt); local_decl != NULL_TREE; *************** set_block_origin_self (stmt) *** 2764,2770 **** } { ! register tree subblock; for (subblock = BLOCK_SUBBLOCKS (stmt); subblock != NULL_TREE; --- 2878,2884 ---- } { ! tree subblock; for (subblock = BLOCK_SUBBLOCKS (stmt); subblock != NULL_TREE; *************** set_block_origin_self (stmt) *** 2787,2800 **** void set_decl_origin_self (decl) ! register tree decl; { if (DECL_ABSTRACT_ORIGIN (decl) == NULL_TREE) { DECL_ABSTRACT_ORIGIN (decl) = decl; if (TREE_CODE (decl) == FUNCTION_DECL) { ! register tree arg; for (arg = DECL_ARGUMENTS (decl); arg; arg = TREE_CHAIN (arg)) DECL_ABSTRACT_ORIGIN (arg) = arg; --- 2901,2914 ---- void set_decl_origin_self (decl) ! tree decl; { if (DECL_ABSTRACT_ORIGIN (decl) == NULL_TREE) { DECL_ABSTRACT_ORIGIN (decl) = decl; if (TREE_CODE (decl) == FUNCTION_DECL) { ! tree arg; for (arg = DECL_ARGUMENTS (decl); arg; arg = TREE_CHAIN (arg)) DECL_ABSTRACT_ORIGIN (arg) = arg; *************** set_decl_origin_self (decl) *** 2812,2822 **** static void set_block_abstract_flags (stmt, setting) ! register tree stmt; ! register int setting; { ! register tree local_decl; ! register tree subblock; BLOCK_ABSTRACT (stmt) = setting; --- 2926,2936 ---- static void set_block_abstract_flags (stmt, setting) ! tree stmt; ! int setting; { ! tree local_decl; ! tree subblock; BLOCK_ABSTRACT (stmt) = setting; *************** set_block_abstract_flags (stmt, setting) *** 2839,2851 **** void set_decl_abstract_flags (decl, setting) ! register tree decl; ! register int setting; { DECL_ABSTRACT (decl) = setting; if (TREE_CODE (decl) == FUNCTION_DECL) { ! register tree arg; for (arg = DECL_ARGUMENTS (decl); arg; arg = TREE_CHAIN (arg)) DECL_ABSTRACT (arg) = setting; --- 2953,2965 ---- void set_decl_abstract_flags (decl, setting) ! tree decl; ! int setting; { DECL_ABSTRACT (decl) = setting; if (TREE_CODE (decl) == FUNCTION_DECL) { ! tree arg; for (arg = DECL_ARGUMENTS (decl); arg; arg = TREE_CHAIN (arg)) DECL_ABSTRACT (arg) = setting; *************** output_inline_function (fndecl) *** 2865,2870 **** --- 2979,2985 ---- { struct function *old_cfun = cfun; enum debug_info_type old_write_symbols = write_symbols; + struct gcc_debug_hooks *old_debug_hooks = debug_hooks; struct function *f = DECL_SAVED_INSNS (fndecl); cfun = f; *************** output_inline_function (fndecl) *** 2878,2897 **** /* If requested, suppress debugging information. */ if (f->no_debugging_symbols) ! write_symbols = NO_DEBUG; ! ! /* Do any preparation, such as emitting abstract debug info for the inline ! before it gets mangled by optimization. */ ! note_outlining_of_inline_function (fndecl); ! /* Compile this function all the way down to assembly code. */ rest_of_compilation (fndecl); - - /* We can't inline this anymore. */ - f->inlinable = 0; DECL_INLINE (fndecl) = 0; cfun = old_cfun; current_function_decl = old_cfun ? old_cfun->decl : 0; write_symbols = old_write_symbols; } --- 2993,3189 ---- /* If requested, suppress debugging information. */ if (f->no_debugging_symbols) ! { ! write_symbols = NO_DEBUG; ! debug_hooks = &do_nothing_debug_hooks; ! } ! /* Compile this function all the way down to assembly code. As a ! side effect this destroys the saved RTL representation, but ! that's okay, because we don't need to inline this anymore. */ rest_of_compilation (fndecl); DECL_INLINE (fndecl) = 0; cfun = old_cfun; current_function_decl = old_cfun ? old_cfun->decl : 0; write_symbols = old_write_symbols; + debug_hooks = old_debug_hooks; + } + + + /* Functions to keep track of the values hard regs had at the start of + the function. */ + + rtx + get_hard_reg_initial_reg (fun, reg) + struct function *fun; + rtx reg; + { + struct initial_value_struct *ivs = fun->hard_reg_initial_vals; + int i; + + if (ivs == 0) + return NULL_RTX; + + for (i = 0; i < ivs->num_entries; i++) + if (rtx_equal_p (ivs->entries[i].pseudo, reg)) + return ivs->entries[i].hard_reg; + + return NULL_RTX; + } + + rtx + has_func_hard_reg_initial_val (fun, reg) + struct function *fun; + rtx reg; + { + struct initial_value_struct *ivs = fun->hard_reg_initial_vals; + int i; + + if (ivs == 0) + return NULL_RTX; + + for (i = 0; i < ivs->num_entries; i++) + if (rtx_equal_p (ivs->entries[i].hard_reg, reg)) + return ivs->entries[i].pseudo; + + return NULL_RTX; + } + + rtx + get_func_hard_reg_initial_val (fun, reg) + struct function *fun; + rtx reg; + { + struct initial_value_struct *ivs = fun->hard_reg_initial_vals; + rtx rv = has_func_hard_reg_initial_val (fun, reg); + + if (rv) + return rv; + + if (ivs == 0) + { + fun->hard_reg_initial_vals = (void *) xmalloc (sizeof (initial_value_struct)); + ivs = fun->hard_reg_initial_vals; + ivs->num_entries = 0; + ivs->max_entries = 5; + ivs->entries = (initial_value_pair *) xmalloc (5 * sizeof (initial_value_pair)); + } + + if (ivs->num_entries >= ivs->max_entries) + { + ivs->max_entries += 5; + ivs->entries = + (initial_value_pair *) xrealloc (ivs->entries, + ivs->max_entries + * sizeof (initial_value_pair)); + } + + ivs->entries[ivs->num_entries].hard_reg = reg; + ivs->entries[ivs->num_entries].pseudo = gen_reg_rtx (GET_MODE (reg)); + + return ivs->entries[ivs->num_entries++].pseudo; + } + + rtx + get_hard_reg_initial_val (mode, regno) + enum machine_mode mode; + int regno; + { + return get_func_hard_reg_initial_val (cfun, gen_rtx_REG (mode, regno)); + } + + rtx + has_hard_reg_initial_val (mode, regno) + enum machine_mode mode; + int regno; + { + return has_func_hard_reg_initial_val (cfun, gen_rtx_REG (mode, regno)); + } + + void + mark_hard_reg_initial_vals (fun) + struct function *fun; + { + struct initial_value_struct *ivs = fun->hard_reg_initial_vals; + int i; + + if (ivs == 0) + return; + + for (i = 0; i < ivs->num_entries; i ++) + { + ggc_mark_rtx (ivs->entries[i].hard_reg); + ggc_mark_rtx (ivs->entries[i].pseudo); + } + } + + static void + setup_initial_hard_reg_value_integration (inl_f, remap) + struct function *inl_f; + struct inline_remap *remap; + { + struct initial_value_struct *ivs = inl_f->hard_reg_initial_vals; + int i; + + if (ivs == 0) + return; + + for (i = 0; i < ivs->num_entries; i ++) + remap->reg_map[REGNO (ivs->entries[i].pseudo)] + = get_func_hard_reg_initial_val (cfun, ivs->entries[i].hard_reg); + } + + + void + emit_initial_value_sets () + { + struct initial_value_struct *ivs = cfun->hard_reg_initial_vals; + int i; + rtx seq; + + if (ivs == 0) + return; + + start_sequence (); + for (i = 0; i < ivs->num_entries; i++) + emit_move_insn (ivs->entries[i].pseudo, ivs->entries[i].hard_reg); + seq = get_insns (); + end_sequence (); + + emit_insns_after (seq, get_insns ()); + } + + /* If the backend knows where to allocate pseudos for hard + register initial values, register these allocations now. */ + void + allocate_initial_values (reg_equiv_memory_loc) + rtx *reg_equiv_memory_loc ATTRIBUTE_UNUSED; + { + #ifdef ALLOCATE_INITIAL_VALUE + struct initial_value_struct *ivs = cfun->hard_reg_initial_vals; + int i; + + if (ivs == 0) + return; + + for (i = 0; i < ivs->num_entries; i++) + { + int regno = REGNO (ivs->entries[i].pseudo); + rtx x = ALLOCATE_INITIAL_VALUE (ivs->entries[i].hard_reg); + + if (x == NULL_RTX || REG_N_SETS (REGNO (ivs->entries[i].pseudo)) > 1) + ; /* Do nothing. */ + else if (GET_CODE (x) == MEM) + reg_equiv_memory_loc[regno] = x; + else if (GET_CODE (x) == REG) + { + reg_renumber[regno] = REGNO (x); + /* Poke the regno right into regno_reg_rtx + so that even fixed regs are accepted. */ + REGNO (ivs->entries[i].pseudo) = REGNO (x); + } + else abort (); + } + #endif } diff -Nrc3pad gcc-3.0.4/gcc/integrate.h gcc-3.1/gcc/integrate.h *** gcc-3.0.4/gcc/integrate.h Sat May 12 21:12:02 2001 --- gcc-3.1/gcc/integrate.h Thu Nov 15 03:02:24 2001 *************** *** 1,22 **** /* Function integration definitions for GNU C-Compiler Copyright (C) 1990, 1995, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "varray.h" --- 1,22 ---- /* Function integration definitions for GNU C-Compiler Copyright (C) 1990, 1995, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "varray.h" *************** struct inline_remap *** 36,42 **** { /* True if we are doing function integration, false otherwise. Used to control whether RTX_UNCHANGING bits are copied by ! copy_rtx_and_substitute. */ int integrating; /* Definition of function be inlined. */ union tree_node *fndecl; --- 36,42 ---- { /* True if we are doing function integration, false otherwise. Used to control whether RTX_UNCHANGING bits are copied by ! copy_rtx_and_substitute. */ int integrating; /* Definition of function be inlined. */ union tree_node *fndecl; *************** struct inline_remap *** 129,140 **** --- 129,165 ---- labels, and frame-pointer offsets as necessary. */ extern rtx copy_rtx_and_substitute PARAMS ((rtx, struct inline_remap *, int)); + /* Return a pseudo that corresponds to the value in the specified hard + reg as of the start of the function (for inlined functions, the + value at the start of the parent function). */ + extern rtx get_hard_reg_initial_val PARAMS ((enum machine_mode, int)); + /* Likewise, but for a different than the current function, or + arbitrary expression. */ + extern rtx get_func_hard_reg_initial_val PARAMS ((struct function *, rtx)); + /* Likewise, but iff someone else has caused it to become allocated. */ + extern rtx has_func_hard_reg_initial_val PARAMS ((struct function *, rtx)); + /* Likewise, but for common cases. */ + extern rtx has_hard_reg_initial_val PARAMS ((enum machine_mode, int)); + /* If a pseudo represents an initial hard reg (or expression), return + it, else return NULL_RTX. */ + extern rtx get_hard_reg_initial_reg PARAMS ((struct function *, rtx)); + /* This is for GC. */ + extern void mark_hard_reg_initial_vals PARAMS ((struct function *)); + /* Called from rest_of_compilation. */ + extern void emit_initial_value_sets PARAMS ((void)); + extern void allocate_initial_values PARAMS ((rtx *)); + /* Copy a declaration when one function is substituted inline into another. */ extern union tree_node *copy_decl_for_inlining PARAMS ((union tree_node *, union tree_node *, union tree_node *)); + /* Check whether there's any attribute in a function declaration that + makes the function uninlinable. Returns false if it finds any, + true otherwise. */ + extern bool function_attribute_inlinable_p PARAMS ((union tree_node *)); + extern void try_constants PARAMS ((rtx, struct inline_remap *)); /* Return the label indicated. */ diff -Nrc3pad gcc-3.0.4/gcc/intl/ChangeLog gcc-3.1/gcc/intl/ChangeLog *** gcc-3.0.4/gcc/intl/ChangeLog Wed Feb 20 18:42:05 2002 --- gcc-3.1/gcc/intl/ChangeLog Wed May 15 02:19:43 2002 *************** *** 1,30 **** ! 2002-02-20 Release Manager ! * GCC 3.0.4 Released. ! 2002-02-20 Release Manager ! * GCC 3.0.4 Released. ! 2001-12-20 Release Manager ! * GCC 3.0.3 Released. ! 2001-10-23 Release Manager ! * GCC 3.0.2 Released. ! 2001-08-19 Release Manager ! * GCC 3.0.1 Released. ! 2001-08-19 Release Manager ! * GCC 3.0.1 Released. ! 20010617 Release Manager ! * GCC 3.0 Released. 2001-05-25 Rainer Orth --- 1,67 ---- ! 2002-05-14 Release Manager ! * GCC 3.1 Released. ! 2002-05-14 Release Manager ! * GCC 3.1 Released. ! Tue Dec 11 07:08:57 2001 Douglas B. Rupp ! * localealias.c (strings.h): Include. ! Mon Dec 10 06:09:57 2001 Douglas B. Rupp ! * Makefile.in (OUTPUT_OPTION): Add configure variable. ! (.c.o): Add $(OUTPUT_OPTION). ! 2001-11-03 Kaveh R. Ghazi ! * l10nflist.c (_nl_normalize_codeset): Cast argument of ctype ! function to `unsigned char'. ! * loadmsgcat.c (_nl_load_domain): Likewise. ! * localealias.c (read_alias_file, alias_compare): Likewise. ! * localcharset.c: Include "gettextP.h". ! * plural.y (__attribute__): Define. ! (yyerror): Mark parameter with __attribute__ ((__unused__)). ! * plural.c: Regenerate. ! 2001-10-24 Zack Weinberg ! * loadmsgcat.c (INTTYPE_SIGNED, INTTYPE_MINIMUM, ! INTTYPE_MAXIMUM): Clone from system.h. ! (_nl_load_domain): Use them when testing for overflow of size_t. ! Cast result of sizeof to off_t to compare to st_size value. ! Move side effects out of conditional for comprehensibility. ! 2001-10-21 Zack Weinberg ! * dcigettext.c: Don't use #elif. ! * gettextP.h: Prototype nls_uint32 and locale_charset here. ! Always define ZERO to 1 to avoid warnings (ZERO is used in ! flexible-array-member declarations). ! * loadmsgcat.c: Apply __extension__ to structure definitions ! using C99 designated initializer syntax. ! Do not prototype locale_charset here. ! * localcharset.c: Prototype get_charset_aliases before use. ! Get rid of STATIC nonsense. ! ! 2001-10-19 Zack Weinberg ! ! * Makefile.in: Don't copy libgnuintl.h anywhere. ! ! 2001-10-12 Zack Weinberg ! ! * Update entire directory from gettext 0.10.40. ! * cat-compat.c, linux-msg.sed, po2tbl.sed.in, xopen-msg.sed: ! Removed. ! * config.charset, dcigettext.c, dcngettext.c, libgnuintl.h, ! localcharset.c, locale.alias, ngettext.c, plural.c, plural.y, ! ref-add.sin, ref-del.sin: New. ! ! 2001-07-06 Roman Lechtchinsky ! ! * gettextP.h (SWAP): Change parameter type to unsigned int. 2001-05-25 Rainer Orth *************** *** 63,69 **** in call to _nl_normalize_codeset. * l10nflist.c: Define _GNU_SOURCE before any system header is included. ! 1998-04-29 Ulrich Drepper * intl/localealias.c (read_alias_file): Use unsigned char for --- 100,106 ---- in call to _nl_normalize_codeset. * l10nflist.c: Define _GNU_SOURCE before any system header is included. ! 1998-04-29 Ulrich Drepper * intl/localealias.c (read_alias_file): Use unsigned char for *************** Fri Jul 19 00:15:46 1996 Ulrich Drepper *** 239,245 **** Sat Jul 13 18:11:35 1996 Ulrich Drepper * Makefile.in (install): Split goal. Now depend on install-exec ! and install-data. (install-exec, install-data): New goals. Created from former install goal. Reported by Karl Berry. --- 276,282 ---- Sat Jul 13 18:11:35 1996 Ulrich Drepper * Makefile.in (install): Split goal. Now depend on install-exec ! and install-data. (install-exec, install-data): New goals. Created from former install goal. Reported by Karl Berry. *************** Sat Jul 13 18:11:35 1996 Ulrich Drepper *** 247,253 **** Sat Jun 22 04:58:14 1996 Ulrich Drepper * Makefile.in (MKINSTALLDIRS): New variable. Path to ! mkinstalldirs script. (install): use MKINSTALLDIRS variable or if the script is not present try to find it in the $top_scrdir). --- 284,290 ---- Sat Jun 22 04:58:14 1996 Ulrich Drepper * Makefile.in (MKINSTALLDIRS): New variable. Path to ! mkinstalldirs script. (install): use MKINSTALLDIRS variable or if the script is not present try to find it in the $top_scrdir). *************** Tue Jun 11 17:05:13 1996 Ulrich Drepper *** 275,281 **** result to __result to prevent name clash. * l10nflist.c, localealias.c, dcgettext.c: Define _GNU_SOURCE to ! get prototype for stpcpy and strcasecmp. * intlh.inst.in, libgettext.h: Move declaration of `_nl_msg_cat_cntr' outside __extension__ block to prevent warning --- 312,318 ---- result to __result to prevent name clash. * l10nflist.c, localealias.c, dcgettext.c: Define _GNU_SOURCE to ! get prototype for stpcpy and strcasecmp. * intlh.inst.in, libgettext.h: Move declaration of `_nl_msg_cat_cntr' outside __extension__ block to prevent warning *************** Thu Jun 6 01:49:52 1996 Ulrich Drepper *** 300,306 **** Patch by Eric Backus. * localealias.c [!HAVE_ALLOCA]: Define alloca as macro using ! malloc. (read_alias_file): Rename varriabe alloca_list to block_list as the macro calls assume. Patch by Eric Backus. --- 337,343 ---- Patch by Eric Backus. * localealias.c [!HAVE_ALLOCA]: Define alloca as macro using ! malloc. (read_alias_file): Rename varriabe alloca_list to block_list as the macro calls assume. Patch by Eric Backus. *************** Thu Jun 6 01:49:52 1996 Ulrich Drepper *** 309,318 **** Reported by Roland McGrath. * Makefile.in (all): Depend on all-@USE_INCLUDED_LIBINTL@, not ! all-@USE_NLS@. * Makefile.in (install): intlh.inst comes from local dir, not ! $(srcdir). * Makefile.in (intlh.inst): Special handling of this goal. If used in gettext, this is really a rul to construct this file. If --- 346,355 ---- Reported by Roland McGrath. * Makefile.in (all): Depend on all-@USE_INCLUDED_LIBINTL@, not ! all-@USE_NLS@. * Makefile.in (install): intlh.inst comes from local dir, not ! $(srcdir). * Makefile.in (intlh.inst): Special handling of this goal. If used in gettext, this is really a rul to construct this file. If *************** Tue Jun 4 02:47:49 1996 Ulrich Drepper *** 339,357 **** * libintl.inst: Renamed to intlh.inst.in. * localealias.c, dcgettext.c [__GNUC__]: Define HAVE_ALLOCA to 1 ! because gcc has __buitlin_alloca. Reported by Roland McGrath. Mon Jun 3 00:32:16 1996 Ulrich Drepper * Makefile.in (installcheck): New goal to fulfill needs of ! automake's distcheck. * Makefile.in (install): Reorder commands so that VERSION is ! found. * Makefile.in (gettextsrcdir): Now use subdirectory intl/ in ! @datadir@/gettext. (COMSRCS): Add l10nfile.c. (OBJECTS): Add l10nfile.o. (DISTFILES): Rename to DISTFILE.normal. Remove $(DISTFILES.common). --- 376,394 ---- * libintl.inst: Renamed to intlh.inst.in. * localealias.c, dcgettext.c [__GNUC__]: Define HAVE_ALLOCA to 1 ! because gcc has __buitlin_alloca. Reported by Roland McGrath. Mon Jun 3 00:32:16 1996 Ulrich Drepper * Makefile.in (installcheck): New goal to fulfill needs of ! automake's distcheck. * Makefile.in (install): Reorder commands so that VERSION is ! found. * Makefile.in (gettextsrcdir): Now use subdirectory intl/ in ! @datadir@/gettext. (COMSRCS): Add l10nfile.c. (OBJECTS): Add l10nfile.o. (DISTFILES): Rename to DISTFILE.normal. Remove $(DISTFILES.common). *************** Mon Jun 3 00:32:16 1996 Ulrich Drepper *** 367,373 **** Sun Jun 2 17:33:06 1996 Ulrich Drepper * loadmsgcat.c (_nl_load_domain): Parameter is now comes from ! find_l10nfile. Sat Jun 1 02:23:03 1996 Ulrich Drepper --- 404,410 ---- Sun Jun 2 17:33:06 1996 Ulrich Drepper * loadmsgcat.c (_nl_load_domain): Parameter is now comes from ! find_l10nfile. Sat Jun 1 02:23:03 1996 Ulrich Drepper *************** Sat Jun 1 02:23:03 1996 Ulrich Drepper *** 377,383 **** code. Use new l10nfile handling. * localealias.c [!HAVE_ALLOCA]: Add code for handling missing ! alloca code. * l10nflist.c: Initial revision. --- 414,420 ---- code. Use new l10nfile handling. * localealias.c [!HAVE_ALLOCA]: Add code for handling missing ! alloca code. * l10nflist.c: Initial revision. *************** Tue Mar 26 12:39:14 1996 Ulrich Drepper *** 396,402 **** Sat Mar 23 02:00:35 1996 Ulrich Drepper * finddomain.c (stpcpy): Rename to stpcpy__ to prevent clashing ! with external declaration. Sat Mar 2 00:47:09 1996 Ulrich Drepper --- 433,439 ---- Sat Mar 23 02:00:35 1996 Ulrich Drepper * finddomain.c (stpcpy): Rename to stpcpy__ to prevent clashing ! with external declaration. Sat Mar 2 00:47:09 1996 Ulrich Drepper *************** Sat Mar 2 00:47:09 1996 Ulrich Drepper *** 405,411 **** Sat Feb 17 00:25:59 1996 Ulrich Drepper * gettextP.h [loaded_domain]: Array `successor' must now contain up ! to 63 elements (because of codeset name normalization). * finddomain.c: Implement codeset name normalization. --- 442,448 ---- Sat Feb 17 00:25:59 1996 Ulrich Drepper * gettextP.h [loaded_domain]: Array `successor' must now contain up ! to 63 elements (because of codeset name normalization). * finddomain.c: Implement codeset name normalization. *************** Thu Feb 15 04:39:09 1996 Ulrich Drepper *** 418,424 **** Mon Jan 15 21:46:01 1996 Howard Gayle * localealias.c (alias_compare): Increment string pointers in loop ! of strcasecmp replacement. Fri Dec 29 21:16:34 1995 Ulrich Drepper --- 455,461 ---- Mon Jan 15 21:46:01 1996 Howard Gayle * localealias.c (alias_compare): Increment string pointers in loop ! of strcasecmp replacement. Fri Dec 29 21:16:34 1995 Ulrich Drepper *************** Fri Dec 29 15:08:16 1995 Ulrich Drepper *** 433,439 **** Tue Dec 19 22:09:13 1995 Ulrich Drepper * Makefile.in (Makefile): Explicitly use $(SHELL) for running ! shell scripts. Fri Dec 15 17:34:59 1995 Andreas Schwab --- 470,476 ---- Tue Dec 19 22:09:13 1995 Ulrich Drepper * Makefile.in (Makefile): Explicitly use $(SHELL) for running ! shell scripts. Fri Dec 15 17:34:59 1995 Andreas Schwab diff -Nrc3pad gcc-3.0.4/gcc/intl/Makefile.in gcc-3.1/gcc/intl/Makefile.in *** gcc-3.0.4/gcc/intl/Makefile.in Tue Jun 6 07:23:42 2000 --- gcc-3.1/gcc/intl/Makefile.in Mon Dec 10 12:04:22 2001 *************** *** 1,19 **** # Makefile for directory with message catalog handling in GNU NLS Utilities. ! # Copyright (C) 1995, 1996, 1997 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, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. PACKAGE = @PACKAGE@ VERSION = @VERSION@ --- 1,20 ---- # Makefile for directory with message catalog handling in GNU NLS Utilities. ! # Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc. # ! # This program is free software; you can redistribute it and/or modify it ! # under the terms of the GNU Library 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 ! # Library General Public License for more details. # ! # You should have received a copy of the GNU Library General Public ! # License along with this program; if not, write to the Free Software ! # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, ! # USA. PACKAGE = @PACKAGE@ VERSION = @VERSION@ *************** VPATH = @srcdir@ *** 28,103 **** prefix = @prefix@ exec_prefix = @exec_prefix@ transform = @program_transform_name@ ! libdir = $(exec_prefix)/lib ! includedir = $(prefix)/include ! datadir = $(prefix)/@DATADIRNAME@ localedir = $(datadir)/locale ! gnulocaledir = $(prefix)/share/locale ! gettextsrcdir = @datadir@/gettext/intl ! aliaspath = $(localedir):. subdir = intl INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ MKINSTALLDIRS = @MKINSTALLDIRS@ ! l = @l@ AR = ar CC = @CC@ LIBTOOL = @LIBTOOL@ RANLIB = @RANLIB@ ! DEFS = -DIN_GCC -DLOCALEDIR=\"$(localedir)\" -DGNULOCALEDIR=\"$(gnulocaledir)\" \ ! -DLOCALE_ALIAS_PATH=\"$(aliaspath)\" @DEFS@ CPPFLAGS = @CPPFLAGS@ CFLAGS = @CFLAGS@ LDFLAGS = @LDFLAGS@ COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) ! HEADERS = $(COMHDRS) libgettext.h loadinfo.h COMHDRS = gettext.h gettextP.h hash-string.h ! SOURCES = $(COMSRCS) intl-compat.c cat-compat.c COMSRCS = bindtextdom.c dcgettext.c dgettext.c gettext.c \ finddomain.c loadmsgcat.c localealias.c textdomain.c l10nflist.c \ ! explodename.c OBJECTS = @INTLOBJS@ bindtextdom.$lo dcgettext.$lo dgettext.$lo gettext.$lo \ finddomain.$lo loadmsgcat.$lo localealias.$lo textdomain.$lo l10nflist.$lo \ ! explodename.$lo ! CATOBJS = cat-compat.$lo ../po/cat-id-tbl.$lo GETTOBJS = intl-compat.$lo ! DISTFILES.common = ChangeLog Makefile.in linux-msg.sed po2tbl.sed.in \ ! xopen-msg.sed $(HEADERS) $(SOURCES) DISTFILES.normal = VERSION ! DISTFILES.gettext = libintl.glibc intlh.inst.in .SUFFIXES: ! .SUFFIXES: .c .o .lo .c.o: ! $(COMPILE) $< .c.lo: $(LIBTOOL) --mode=compile $(COMPILE) $< ! INCLUDES = -I.. -I. -I$(top_srcdir)/intl -I$(top_srcdir)/lib -I$(srcdir)/.. \ ! -I$(srcdir)/../config -I$(srcdir)/../../include ! all: all-@USE_INCLUDED_LIBINTL@ ! all-yes: libintl.$la intlh.inst ! all-no: ! libintl.a: $(OBJECTS) rm -f $@ $(AR) cru $@ $(OBJECTS) $(RANLIB) $@ ! libintl.la: $(OBJECTS) ! $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ $(OBJECTS) \ ! -version-info 1:0 -rpath $(libdir) ! ../po/cat-id-tbl.$lo: ../po/cat-id-tbl.c $(top_srcdir)/po/$(PACKAGE).pot ! cd ../po && $(MAKE) cat-id-tbl.$lo check: all --- 29,138 ---- prefix = @prefix@ exec_prefix = @exec_prefix@ transform = @program_transform_name@ ! libdir = @libdir@ ! includedir = @includedir@ ! datadir = @datadir@ localedir = $(datadir)/locale ! gettextsrcdir = $(datadir)/gettext/intl ! aliaspath = $(localedir) subdir = intl INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ MKINSTALLDIRS = @MKINSTALLDIRS@ + mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac` ! l = @INTL_LIBTOOL_SUFFIX_PREFIX@ ! OUTPUT_OPTION = @OUTPUT_OPTION@ AR = ar CC = @CC@ LIBTOOL = @LIBTOOL@ RANLIB = @RANLIB@ + YACC = @INTLBISON@ -y -d + YFLAGS = --name-prefix=__gettext ! DEFS = -DIN_GCC -DLOCALEDIR=\"$(localedir)\" -DLOCALE_ALIAS_PATH=\"$(aliaspath)\" \ ! -DLIBDIR=\"$(libdir)\" @DEFS@ CPPFLAGS = @CPPFLAGS@ CFLAGS = @CFLAGS@ LDFLAGS = @LDFLAGS@ COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) ! HEADERS = $(COMHDRS) libgnuintl.h libgettext.h loadinfo.h COMHDRS = gettext.h gettextP.h hash-string.h ! SOURCES = $(COMSRCS) intl-compat.c COMSRCS = bindtextdom.c dcgettext.c dgettext.c gettext.c \ finddomain.c loadmsgcat.c localealias.c textdomain.c l10nflist.c \ ! explodename.c dcigettext.c dcngettext.c dngettext.c ngettext.c plural.y \ ! localcharset.c OBJECTS = @INTLOBJS@ bindtextdom.$lo dcgettext.$lo dgettext.$lo gettext.$lo \ finddomain.$lo loadmsgcat.$lo localealias.$lo textdomain.$lo l10nflist.$lo \ ! explodename.$lo dcigettext.$lo dcngettext.$lo dngettext.$lo ngettext.$lo \ ! plural.$lo localcharset.$lo GETTOBJS = intl-compat.$lo ! DISTFILES.common = Makefile.in \ ! config.charset locale.alias ref-add.sin ref-del.sin $(HEADERS) $(SOURCES) ! DISTFILES.generated = plural.c DISTFILES.normal = VERSION ! DISTFILES.gettext = COPYING.LIB-2 COPYING.LIB-2.1 libintl.glibc ! DISTFILES.obsolete = xopen-msg.sed linux-msg.sed po2tbl.sed.in cat-compat.c ! ! # Libtool's library version information for libintl. ! # Before making a gettext release, the gettext maintainer must change this ! # according to the libtool documentation, section "Library interface versions". ! # Maintainers of other packages that include the intl directory must *not* ! # change these values. ! LTV_CURRENT=1 ! LTV_REVISION=1 ! LTV_AGE=0 .SUFFIXES: ! .SUFFIXES: .c .y .o .lo .sin .sed .c.o: ! $(COMPILE) $< $(OUTPUT_OPTION) .c.lo: $(LIBTOOL) --mode=compile $(COMPILE) $< ! .y.c: ! $(YACC) $(YFLAGS) --output $@ $< ! rm -f $*.h ! .sin.sed: ! sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $< > t-$@ ! mv t-$@ $@ ! INCLUDES = -I.. -I. -I$(top_srcdir)/intl -I$(top_srcdir) \ ! -I$(top_srcdir)/config -I$(top_srcdir)/../include ! # GCC LOCAL: Removed libintl.h from all-yes. ! all: all-@USE_INCLUDED_LIBINTL@ ! all-yes: libintl.$la charset.alias ref-add.sed ref-del.sed ! all-no: all-no-@BUILD_INCLUDED_LIBINTL@ ! all-no-yes: libgnuintl.$la ! all-no-no: ! ! libintl.a libgnuintl.a: $(OBJECTS) rm -f $@ $(AR) cru $@ $(OBJECTS) $(RANLIB) $@ ! libintl.la libgnuintl.la: $(OBJECTS) ! $(LIBTOOL) --mode=link \ ! $(CC) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) $(LDFLAGS) -o $@ \ ! $(OBJECTS) @LIBICONV@ \ ! -version-info $(LTV_CURRENT):$(LTV_REVISION):$(LTV_AGE) \ ! -rpath $(libdir) \ ! -no-undefined ! #GCC LOCAL: Do not install this file. ! #libintl.h: libgnuintl.h ! # cp $(srcdir)/libgnuintl.h libintl.h ! ! charset.alias: config.charset ! $(SHELL) $(srcdir)/config.charset '@host@' > t-$@ ! mv t-$@ $@ check: all *************** check: all *** 105,140 **** # only use the library should use install instead. # We must not install the libintl.h/libintl.a files if we are on a ! # system which has the gettext() function in its C library or in a ! # separate library or use the catgets interface. A special case is ! # where configure found a previously installed GNU gettext library. # If you want to use the one which comes with this version of the # package, you have to use `configure --with-included-gettext'. install: install-exec install-data install-exec: all if test "$(PACKAGE)" = "gettext" \ && test '@INTLOBJS@' = '$(GETTOBJS)'; then \ ! if test -r $(MKINSTALLDIRS); then \ ! $(MKINSTALLDIRS) $(libdir) $(includedir); \ else \ ! $(top_srcdir)/mkinstalldirs $(libdir) $(includedir); \ fi; \ ! $(INSTALL_DATA) intlh.inst $(includedir)/libintl.h; \ ! $(INSTALL_DATA) libintl.a $(libdir)/libintl.a; \ else \ : ; \ fi install-data: all if test "$(PACKAGE)" = "gettext"; then \ ! if test -r $(MKINSTALLDIRS); then \ ! $(MKINSTALLDIRS) $(gettextsrcdir); \ ! else \ ! $(top_srcdir)/mkinstalldirs $(gettextsrcdir); \ ! fi; \ ! $(INSTALL_DATA) VERSION $(gettextsrcdir)/VERSION; \ ! dists="$(DISTFILES.common)"; \ for file in $$dists; do \ ! $(INSTALL_DATA) $(srcdir)/$$file $(gettextsrcdir)/$$file; \ done; \ else \ : ; \ --- 140,209 ---- # only use the library should use install instead. # We must not install the libintl.h/libintl.a files if we are on a ! # system which has the GNU gettext() function in its C library or in a ! # separate library. # If you want to use the one which comes with this version of the # package, you have to use `configure --with-included-gettext'. install: install-exec install-data install-exec: all if test "$(PACKAGE)" = "gettext" \ && test '@INTLOBJS@' = '$(GETTOBJS)'; then \ ! $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \ ! $(INSTALL_DATA) libintl.h $(DESTDIR)$(includedir)/libintl.h; \ ! $(LIBTOOL) --mode=install \ ! $(INSTALL_DATA) libintl.$la $(DESTDIR)$(libdir)/libintl.$la; \ ! else \ ! : ; \ ! fi ! if test '@USE_INCLUDED_LIBINTL@' = yes; then \ ! $(mkinstalldirs) $(DESTDIR)$(libdir); \ ! temp=$(DESTDIR)$(libdir)/t-charset.alias; \ ! dest=$(DESTDIR)$(libdir)/charset.alias; \ ! if test -f $(DESTDIR)$(libdir)/charset.alias; then \ ! orig=$(DESTDIR)$(libdir)/charset.alias; \ ! sed -f ref-add.sed $$orig > $$temp; \ ! $(INSTALL_DATA) $$temp $$dest; \ ! rm -f $$temp; \ else \ ! if test @GLIBC21@ = no; then \ ! orig=charset.alias; \ ! sed -f ref-add.sed $$orig > $$temp; \ ! $(INSTALL_DATA) $$temp $$dest; \ ! rm -f $$temp; \ ! fi; \ fi; \ ! $(mkinstalldirs) $(DESTDIR)$(localedir); \ ! test -f $(DESTDIR)$(localedir)/locale.alias \ ! && orig=$(DESTDIR)$(localedir)/locale.alias \ ! || orig=$(srcdir)/locale.alias; \ ! temp=$(DESTDIR)$(localedir)/t-locale.alias; \ ! dest=$(DESTDIR)$(localedir)/locale.alias; \ ! sed -f ref-add.sed $$orig > $$temp; \ ! $(INSTALL_DATA) $$temp $$dest; \ ! rm -f $$temp; \ else \ : ; \ fi install-data: all if test "$(PACKAGE)" = "gettext"; then \ ! $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ ! $(INSTALL_DATA) VERSION $(DESTDIR)$(gettextsrcdir)/VERSION; \ ! $(INSTALL_DATA) ChangeLog.inst $(DESTDIR)$(gettextsrcdir)/ChangeLog; \ ! dists="COPYING.LIB-2 COPYING.LIB-2.1 $(DISTFILES.common)"; \ for file in $$dists; do \ ! $(INSTALL_DATA) $(srcdir)/$$file \ ! $(DESTDIR)$(gettextsrcdir)/$$file; \ ! done; \ ! chmod a+x $(DESTDIR)$(gettextsrcdir)/config.charset; \ ! dists="$(DISTFILES.generated)"; \ ! for file in $$dists; do \ ! if test -f $$file; then dir=.; else dir=$(srcdir); fi; \ ! $(INSTALL_DATA) $$dir/$$file \ ! $(DESTDIR)$(gettextsrcdir)/$$file; \ ! done; \ ! dists="$(DISTFILES.obsolete)"; \ ! for file in $$dists; do \ ! rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ *************** install-data: all *** 144,153 **** installcheck: uninstall: if test "$(PACKAGE)" = "gettext"; then \ ! dists="$(DISTFILES.common)"; \ ! for file in $$dists; do \ ! rm -f $(gettextsrcdir)/$$file; \ done; \ else \ : ; \ --- 213,255 ---- installcheck: uninstall: + if test "$(PACKAGE)" = "gettext" \ + && test '@INTLOBJS@' = '$(GETTOBJS)'; then \ + rm -f $(DESTDIR)$(includedir)/libintl.h; \ + $(LIBTOOL) --mode=uninstall \ + rm -f $(DESTDIR)$(libdir)/libintl.$la; \ + else \ + : ; \ + fi + if test '@USE_INCLUDED_LIBINTL@' = yes; then \ + if test -f $(DESTDIR)$(libdir)/charset.alias; then \ + temp=$(DESTDIR)$(libdir)/t-charset.alias; \ + dest=$(DESTDIR)$(libdir)/charset.alias; \ + sed -f ref-del.sed $$dest > $$temp; \ + if grep '^# Packages using this file: $$' $$temp > /dev/null; then \ + rm -f $$dest; \ + else \ + $(INSTALL_DATA) $$temp $$dest; \ + fi; \ + rm -f $$temp; \ + fi; \ + if test -f $(DESTDIR)$(localedir)/locale.alias; then \ + temp=$(DESTDIR)$(localedir)/t-locale.alias; \ + dest=$(DESTDIR)$(localedir)/locale.alias; \ + sed -f ref-del.sed $$dest > $$temp; \ + if grep '^# Packages using this file: $$' $$temp > /dev/null; then \ + rm -f $$dest; \ + else \ + $(INSTALL_DATA) $$temp $$dest; \ + fi; \ + rm -f $$temp; \ + fi; \ + else \ + : ; \ + fi if test "$(PACKAGE)" = "gettext"; then \ ! for file in VERSION ChangeLog COPYING.LIB-2 COPYING.LIB-2.1 $(DISTFILES.common) $(DISTFILES.generated); do \ ! rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ *************** uninstall: *** 155,161 **** info dvi: ! $(OBJECTS): ../config.h libgettext.h bindtextdom.$lo finddomain.$lo loadmsgcat.$lo: gettextP.h gettext.h loadinfo.h dcgettext.$lo: gettextP.h gettext.h hash-string.h loadinfo.h --- 257,263 ---- info dvi: ! $(OBJECTS): ../config.h libgnuintl.h bindtextdom.$lo finddomain.$lo loadmsgcat.$lo: gettextP.h gettext.h loadinfo.h dcgettext.$lo: gettextP.h gettext.h hash-string.h loadinfo.h *************** ID: $(HEADERS) $(SOURCES) *** 171,182 **** mostlyclean: ! rm -f *.a *.o *.lo core core.* clean: mostlyclean distclean: clean ! rm -f Makefile ID TAGS po2msg.sed po2tbl.sed maintainer-clean: distclean @echo "This command is intended for maintainers to use;" --- 273,291 ---- mostlyclean: ! rm -f *.a *.la *.o *.lo core core.* ! rm -f libintl.h charset.alias ref-add.sed ref-del.sed ! rm -f -r .libs _libs clean: mostlyclean distclean: clean ! rm -f Makefile ID TAGS ! if test "$(PACKAGE)" = gettext; then \ ! rm -f ChangeLog.inst $(DISTFILES.normal); \ ! else \ ! : ; \ ! fi maintainer-clean: distclean @echo "This command is intended for maintainers to use;" *************** maintainer-clean: distclean *** 186,219 **** # GNU gettext needs not contain the file `VERSION' but contains some # other files which should not be distributed in other packages. distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) ! dist distdir: Makefile $(DISTFILES) if test "$(PACKAGE)" = gettext; then \ additional="$(DISTFILES.gettext)"; \ else \ additional="$(DISTFILES.normal)"; \ fi; \ ! for file in $(DISTFILES.common) $$additional; do \ ! ln $(srcdir)/$$file $(distdir) 2> /dev/null \ ! || cp -p $(srcdir)/$$file $(distdir); \ done - dist-libc: - tar zcvf intl-glibc.tar.gz $(COMSRCS) $(COMHDRS) libintl.h.glibc - Makefile: Makefile.in ../config.status cd .. \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status - # The dependency for intlh.inst is different in gettext and all other - # packages. Because we cannot you GNU make features we have to solve - # the problem while rewriting Makefile.in. - @GT_YES@intlh.inst: intlh.inst.in ../config.status - @GT_YES@ cd .. \ - @GT_YES@ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= \ - @GT_YES@ $(SHELL) ./config.status - @GT_NO@.PHONY: intlh.inst - @GT_NO@intlh.inst: - # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: --- 295,317 ---- # GNU gettext needs not contain the file `VERSION' but contains some # other files which should not be distributed in other packages. distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) ! dist distdir: Makefile if test "$(PACKAGE)" = gettext; then \ additional="$(DISTFILES.gettext)"; \ else \ additional="$(DISTFILES.normal)"; \ fi; \ ! $(MAKE) $(DISTFILES.common) $(DISTFILES.generated) $$additional; \ ! for file in ChangeLog $(DISTFILES.common) $(DISTFILES.generated) $$additional; do \ ! if test -f $$file; then dir=.; else dir=$(srcdir); fi; \ ! ln $$dir/$$file $(distdir) 2> /dev/null \ ! || cp -p $$dir/$$file $(distdir); \ done Makefile: Makefile.in ../config.status cd .. \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff -Nrc3pad gcc-3.0.4/gcc/intl/VERSION gcc-3.1/gcc/intl/VERSION *** gcc-3.0.4/gcc/intl/VERSION Sat Sep 4 15:08:49 1999 --- gcc-3.1/gcc/intl/VERSION Fri Oct 12 17:24:30 2001 *************** *** 1 **** ! GNU gettext library from gettext-0.10.35 --- 1 ---- ! GNU gettext library from gettext-0.10.40 diff -Nrc3pad gcc-3.0.4/gcc/intl/bindtextdom.c gcc-3.1/gcc/intl/bindtextdom.c *** gcc-3.0.4/gcc/intl/bindtextdom.c Mon Sep 18 22:05:52 2000 --- gcc-3.1/gcc/intl/bindtextdom.c Fri Oct 12 17:24:30 2001 *************** *** 1,50 **** /* Implementation of the bindtextdomain(3) function ! Copyright (C) 1995, 1996, 1997, 1998 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, ! Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include #endif ! #if defined STDC_HEADERS || defined _LIBC ! # include ! #else ! # ifdef HAVE_MALLOC_H ! # include ! # else ! void free (); ! # endif ! #endif ! #if defined HAVE_STRING_H || defined _LIBC ! # include #else ! # include ! # ifndef memcpy ! # define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num) ! # endif #endif #ifdef _LIBC ! # include #else ! # include "libgettext.h" #endif - #include "gettext.h" - #include "gettextP.h" /* The internal variables in the standalone libintl.a must have different names than the internal variables in GNU libc, otherwise programs --- 1,45 ---- /* Implementation of the bindtextdomain(3) function ! Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc. ! This program is free software; you can redistribute it and/or modify it ! under the terms of the GNU Library 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 ! Library General Public License for more details. ! You should have received a copy of the GNU Library General Public ! License along with this program; if not, write to the Free Software ! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, ! USA. */ #ifdef HAVE_CONFIG_H # include #endif ! #include ! #include ! #include ! #ifdef _LIBC ! # include #else ! # include "libgnuintl.h" #endif + #include "gettextP.h" #ifdef _LIBC ! /* We have to handle multi-threaded applications. */ ! # include #else ! /* Provide dummy implementation if this is outside glibc. */ ! # define __libc_rwlock_define(CLASS, NAME) ! # define __libc_rwlock_wrlock(NAME) ! # define __libc_rwlock_unlock(NAME) #endif /* The internal variables in the standalone libintl.a must have different names than the internal variables in GNU libc, otherwise programs *************** void free (); *** 54,59 **** --- 49,59 ---- # define _nl_domain_bindings _nl_domain_bindings__ #endif + /* Some compilers, like SunOS4 cc, don't have offsetof in . */ + #ifndef offsetof + # define offsetof(type,ident) ((size_t)&(((type*)0)->ident)) + #endif + /* @@ end of prolog @@ */ /* Contains the default location of the message catalogs. */ *************** extern const char _nl_default_dirname[]; *** 62,67 **** --- 62,70 ---- /* List with bindings of specific domains. */ extern struct binding *_nl_domain_bindings; + /* Lock variable to protect the global data in the gettext implementation. */ + __libc_rwlock_define (extern, _nl_state_lock) + /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source *************** extern struct binding *_nl_domain_bindin *** 69,93 **** prefix. So we have to make a difference here. */ #ifdef _LIBC # define BINDTEXTDOMAIN __bindtextdomain # ifndef strdup # define strdup(str) __strdup (str) # endif #else # define BINDTEXTDOMAIN bindtextdomain__ #endif ! /* Specify that the DOMAINNAME message catalog will be found ! in DIRNAME rather than in the system locale data base. */ ! char * ! BINDTEXTDOMAIN (domainname, dirname) const char *domainname; ! const char *dirname; { struct binding *binding; /* Some sanity checks. */ if (domainname == NULL || domainname[0] == '\0') ! return NULL; for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next) { --- 72,119 ---- prefix. So we have to make a difference here. */ #ifdef _LIBC # define BINDTEXTDOMAIN __bindtextdomain + # define BIND_TEXTDOMAIN_CODESET __bind_textdomain_codeset # ifndef strdup # define strdup(str) __strdup (str) # endif #else # define BINDTEXTDOMAIN bindtextdomain__ + # define BIND_TEXTDOMAIN_CODESET bind_textdomain_codeset__ #endif ! /* Prototypes for local functions. */ ! static void set_binding_values PARAMS ((const char *domainname, ! const char **dirnamep, ! const char **codesetp)); ! ! /* Specifies the directory name *DIRNAMEP and the output codeset *CODESETP ! to be used for the DOMAINNAME message catalog. ! If *DIRNAMEP or *CODESETP is NULL, the corresponding attribute is not ! modified, only the current value is returned. ! If DIRNAMEP or CODESETP is NULL, the corresponding attribute is neither ! modified nor returned. */ ! static void ! set_binding_values (domainname, dirnamep, codesetp) const char *domainname; ! const char **dirnamep; ! const char **codesetp; { struct binding *binding; + int modified; /* Some sanity checks. */ if (domainname == NULL || domainname[0] == '\0') ! { ! if (dirnamep) ! *dirnamep = NULL; ! if (codesetp) ! *codesetp = NULL; ! return; ! } ! ! __libc_rwlock_wrlock (_nl_state_lock); ! ! modified = 0; for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next) { *************** BINDTEXTDOMAIN (domainname, dirname) *** 103,185 **** } } - if (dirname == NULL) - /* The current binding has be to returned. */ - return binding == NULL ? (char *) _nl_default_dirname : binding->dirname; - if (binding != NULL) { ! /* The domain is already bound. If the new value and the old ! one are equal we simply do nothing. Otherwise replace the ! old binding. */ ! if (strcmp (dirname, binding->dirname) != 0) { ! char *new_dirname; ! if (strcmp (dirname, _nl_default_dirname) == 0) ! new_dirname = (char *) _nl_default_dirname; else { #if defined _LIBC || defined HAVE_STRDUP ! new_dirname = strdup (dirname); ! if (new_dirname == NULL) ! return NULL; #else ! size_t len = strlen (dirname) + 1; ! new_dirname = (char *) malloc (len); ! if (new_dirname == NULL) ! return NULL; ! ! memcpy (new_dirname, dirname, len); #endif } ! if (binding->dirname != _nl_default_dirname) ! free (binding->dirname); ! binding->dirname = new_dirname; } } else { /* We have to create a new binding. */ ! #if !defined _LIBC && !defined HAVE_STRDUP ! size_t len; ! #endif struct binding *new_binding = ! (struct binding *) malloc (sizeof (*new_binding)); ! if (new_binding == NULL) ! return NULL; #if defined _LIBC || defined HAVE_STRDUP ! new_binding->domainname = strdup (domainname); ! if (new_binding->domainname == NULL) ! return NULL; #else ! len = strlen (domainname) + 1; ! new_binding->domainname = (char *) malloc (len); ! if (new_binding->domainname == NULL) ! return NULL; ! memcpy (new_binding->domainname, domainname, len); #endif ! ! if (strcmp (dirname, _nl_default_dirname) == 0) ! new_binding->dirname = (char *) _nl_default_dirname; else { #if defined _LIBC || defined HAVE_STRDUP ! new_binding->dirname = strdup (dirname); ! if (new_binding->dirname == NULL) ! return NULL; #else ! len = strlen (dirname) + 1; ! new_binding->dirname = (char *) malloc (len); ! if (new_binding->dirname == NULL) ! return NULL; ! memcpy (new_binding->dirname, dirname, len); #endif } /* Now enqueue it. */ if (_nl_domain_bindings == NULL --- 129,301 ---- } } if (binding != NULL) { ! if (dirnamep) { ! const char *dirname = *dirnamep; ! if (dirname == NULL) ! /* The current binding has be to returned. */ ! *dirnamep = binding->dirname; else { + /* The domain is already bound. If the new value and the old + one are equal we simply do nothing. Otherwise replace the + old binding. */ + char *result = binding->dirname; + if (strcmp (dirname, result) != 0) + { + if (strcmp (dirname, _nl_default_dirname) == 0) + result = (char *) _nl_default_dirname; + else + { #if defined _LIBC || defined HAVE_STRDUP ! result = strdup (dirname); #else ! size_t len = strlen (dirname) + 1; ! result = (char *) malloc (len); ! if (__builtin_expect (result != NULL, 1)) ! memcpy (result, dirname, len); #endif + } + + if (__builtin_expect (result != NULL, 1)) + { + if (binding->dirname != _nl_default_dirname) + free (binding->dirname); + + binding->dirname = result; + modified = 1; + } + } + *dirnamep = result; } + } ! if (codesetp) ! { ! const char *codeset = *codesetp; ! if (codeset == NULL) ! /* The current binding has be to returned. */ ! *codesetp = binding->codeset; ! else ! { ! /* The domain is already bound. If the new value and the old ! one are equal we simply do nothing. Otherwise replace the ! old binding. */ ! char *result = binding->codeset; ! if (result == NULL || strcmp (codeset, result) != 0) ! { ! #if defined _LIBC || defined HAVE_STRDUP ! result = strdup (codeset); ! #else ! size_t len = strlen (codeset) + 1; ! result = (char *) malloc (len); ! if (__builtin_expect (result != NULL, 1)) ! memcpy (result, codeset, len); ! #endif ! ! if (__builtin_expect (result != NULL, 1)) ! { ! if (binding->codeset != NULL) ! free (binding->codeset); ! ! binding->codeset = result; ! binding->codeset_cntr++; ! modified = 1; ! } ! } ! *codesetp = result; ! } } } + else if ((dirnamep == NULL || *dirnamep == NULL) + && (codesetp == NULL || *codesetp == NULL)) + { + /* Simply return the default values. */ + if (dirnamep) + *dirnamep = _nl_default_dirname; + if (codesetp) + *codesetp = NULL; + } else { /* We have to create a new binding. */ ! size_t len = strlen (domainname) + 1; struct binding *new_binding = ! (struct binding *) malloc (offsetof (struct binding, domainname) + len); ! if (__builtin_expect (new_binding == NULL, 0)) ! goto failed; ! ! memcpy (new_binding->domainname, domainname, len); ! ! if (dirnamep) ! { ! const char *dirname = *dirnamep; + if (dirname == NULL) + /* The default value. */ + dirname = _nl_default_dirname; + else + { + if (strcmp (dirname, _nl_default_dirname) == 0) + dirname = _nl_default_dirname; + else + { + char *result; #if defined _LIBC || defined HAVE_STRDUP ! result = strdup (dirname); ! if (__builtin_expect (result == NULL, 0)) ! goto failed_dirname; #else ! size_t len = strlen (dirname) + 1; ! result = (char *) malloc (len); ! if (__builtin_expect (result == NULL, 0)) ! goto failed_dirname; ! memcpy (result, dirname, len); #endif ! dirname = result; ! } ! } ! *dirnamep = dirname; ! new_binding->dirname = (char *) dirname; ! } else + /* The default value. */ + new_binding->dirname = (char *) _nl_default_dirname; + + new_binding->codeset_cntr = 0; + + if (codesetp) { + const char *codeset = *codesetp; + + if (codeset != NULL) + { + char *result; + #if defined _LIBC || defined HAVE_STRDUP ! result = strdup (codeset); ! if (__builtin_expect (result == NULL, 0)) ! goto failed_codeset; #else ! size_t len = strlen (codeset) + 1; ! result = (char *) malloc (len); ! if (__builtin_expect (result == NULL, 0)) ! goto failed_codeset; ! memcpy (result, codeset, len); #endif + codeset = result; + new_binding->codeset_cntr++; + } + *codesetp = codeset; + new_binding->codeset = (char *) codeset; } + else + new_binding->codeset = NULL; /* Now enqueue it. */ if (_nl_domain_bindings == NULL *************** BINDTEXTDOMAIN (domainname, dirname) *** 199,211 **** binding->next = new_binding; } ! binding = new_binding; } ! return binding->dirname; } #ifdef _LIBC ! /* Alias for function name in GNU C Library. */ weak_alias (__bindtextdomain, bindtextdomain); #endif --- 315,369 ---- binding->next = new_binding; } ! modified = 1; ! ! /* Here we deal with memory allocation failures. */ ! if (0) ! { ! failed_codeset: ! if (new_binding->dirname != _nl_default_dirname) ! free (new_binding->dirname); ! failed_dirname: ! free (new_binding); ! failed: ! if (dirnamep) ! *dirnamep = NULL; ! if (codesetp) ! *codesetp = NULL; ! } } ! /* If we modified any binding, we flush the caches. */ ! if (modified) ! ++_nl_msg_cat_cntr; ! ! __libc_rwlock_unlock (_nl_state_lock); ! } ! ! /* Specify that the DOMAINNAME message catalog will be found ! in DIRNAME rather than in the system locale data base. */ ! char * ! BINDTEXTDOMAIN (domainname, dirname) ! const char *domainname; ! const char *dirname; ! { ! set_binding_values (domainname, &dirname, NULL); ! return (char *) dirname; ! } ! ! /* Specify the character encoding in which the messages from the ! DOMAINNAME message catalog will be returned. */ ! char * ! BIND_TEXTDOMAIN_CODESET (domainname, codeset) ! const char *domainname; ! const char *codeset; ! { ! set_binding_values (domainname, NULL, &codeset); ! return (char *) codeset; } #ifdef _LIBC ! /* Aliases for function names in GNU C Library. */ weak_alias (__bindtextdomain, bindtextdomain); + weak_alias (__bind_textdomain_codeset, bind_textdomain_codeset); #endif diff -Nrc3pad gcc-3.0.4/gcc/intl/cat-compat.c gcc-3.1/gcc/intl/cat-compat.c *** gcc-3.0.4/gcc/intl/cat-compat.c Sat Sep 4 15:08:49 1999 --- gcc-3.1/gcc/intl/cat-compat.c Thu Jan 1 00:00:00 1970 *************** *** 1,262 **** - /* Compatibility code for gettext-using-catgets interface. - Copyright (C) 1995, 1997 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, - Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - - #ifdef HAVE_CONFIG_H - # include - #endif - - #include - - #ifdef STDC_HEADERS - # include - # include - #else - char *getenv (); - # ifdef HAVE_MALLOC_H - # include - # endif - #endif - - #ifdef HAVE_NL_TYPES_H - # include - #endif - - #include "libgettext.h" - - /* @@ end of prolog @@ */ - - /* XPG3 defines the result of `setlocale (category, NULL)' as: - ``Directs `setlocale()' to query `category' and return the current - setting of `local'.'' - However it does not specify the exact format. And even worse: POSIX - defines this not at all. So we can use this feature only on selected - system (e.g. those using GNU C Library). */ - #ifdef _LIBC - # define HAVE_LOCALE_NULL - #endif - - /* The catalog descriptor. */ - static nl_catd catalog = (nl_catd) -1; - - /* Name of the default catalog. */ - static const char default_catalog_name[] = "messages"; - - /* Name of currently used catalog. */ - static const char *catalog_name = default_catalog_name; - - /* Get ID for given string. If not found return -1. */ - static int msg_to_cat_id PARAMS ((const char *msg)); - - /* Substitution for systems lacking this function in their C library. */ - #if !_LIBC && !HAVE_STPCPY - static char *stpcpy PARAMS ((char *dest, const char *src)); - #endif - - - /* Set currently used domain/catalog. */ - char * - textdomain (domainname) - const char *domainname; - { - nl_catd new_catalog; - char *new_name; - size_t new_name_len; - char *lang; - - #if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES \ - && defined HAVE_LOCALE_NULL - lang = setlocale (LC_MESSAGES, NULL); - #else - lang = getenv ("LC_ALL"); - if (lang == NULL || lang[0] == '\0') - { - lang = getenv ("LC_MESSAGES"); - if (lang == NULL || lang[0] == '\0') - lang = getenv ("LANG"); - } - #endif - if (lang == NULL || lang[0] == '\0') - lang = "C"; - - /* See whether name of currently used domain is asked. */ - if (domainname == NULL) - return (char *) catalog_name; - - if (domainname[0] == '\0') - domainname = default_catalog_name; - - /* Compute length of added path element. */ - new_name_len = sizeof (LOCALEDIR) - 1 + 1 + strlen (lang) - + sizeof ("/LC_MESSAGES/") - 1 + sizeof (PACKAGE) - 1 - + sizeof (".cat"); - - new_name = (char *) malloc (new_name_len); - if (new_name == NULL) - return NULL; - - strcpy (new_name, PACKAGE); - new_catalog = catopen (new_name, 0); - - if (new_catalog == (nl_catd) -1) - { - /* NLSPATH search didn't work, try absolute path */ - sprintf (new_name, "%s/%s/LC_MESSAGES/%s.cat", LOCALEDIR, lang, - PACKAGE); - new_catalog = catopen (new_name, 0); - - if (new_catalog == (nl_catd) -1) - { - free (new_name); - return (char *) catalog_name; - } - } - - /* Close old catalog. */ - if (catalog != (nl_catd) -1) - catclose (catalog); - if (catalog_name != default_catalog_name) - free ((char *) catalog_name); - - catalog = new_catalog; - catalog_name = new_name; - - return (char *) catalog_name; - } - - char * - bindtextdomain (domainname, dirname) - const char *domainname; - const char *dirname; - { - #if HAVE_SETENV || HAVE_PUTENV - char *old_val, *new_val, *cp; - size_t new_val_len; - - /* This does not make much sense here but to be compatible do it. */ - if (domainname == NULL) - return NULL; - - /* Compute length of added path element. If we use setenv we don't need - the first byts for NLSPATH=, but why complicate the code for this - peanuts. */ - new_val_len = sizeof ("NLSPATH=") - 1 + strlen (dirname) - + sizeof ("/%L/LC_MESSAGES/%N.cat"); - - old_val = getenv ("NLSPATH"); - if (old_val == NULL || old_val[0] == '\0') - { - old_val = NULL; - new_val_len += 1 + sizeof (LOCALEDIR) - 1 - + sizeof ("/%L/LC_MESSAGES/%N.cat"); - } - else - new_val_len += strlen (old_val); - - new_val = (char *) malloc (new_val_len); - if (new_val == NULL) - return NULL; - - # if HAVE_SETENV - cp = new_val; - # else - cp = stpcpy (new_val, "NLSPATH="); - # endif - - cp = stpcpy (cp, dirname); - cp = stpcpy (cp, "/%L/LC_MESSAGES/%N.cat:"); - - if (old_val == NULL) - { - # if __STDC__ - stpcpy (cp, LOCALEDIR "/%L/LC_MESSAGES/%N.cat"); - # else - - cp = stpcpy (cp, LOCALEDIR); - stpcpy (cp, "/%L/LC_MESSAGES/%N.cat"); - # endif - } - else - stpcpy (cp, old_val); - - # if HAVE_SETENV - setenv ("NLSPATH", new_val, 1); - free (new_val); - # else - putenv (new_val); - /* Do *not* free the environment entry we just entered. It is used - from now on. */ - # endif - - #endif - - return (char *) domainname; - } - - #undef gettext - char * - gettext (msg) - const char *msg; - { - int msgid; - - if (msg == NULL || catalog == (nl_catd) -1) - return (char *) msg; - - /* Get the message from the catalog. We always use set number 1. - The message ID is computed by the function `msg_to_cat_id' - which works on the table generated by `po-to-tbl'. */ - msgid = msg_to_cat_id (msg); - if (msgid == -1) - return (char *) msg; - - return catgets (catalog, 1, msgid, (char *) msg); - } - - /* Look through the table `_msg_tbl' which has `_msg_tbl_length' entries - for the one equal to msg. If it is found return the ID. In case when - the string is not found return -1. */ - static int - msg_to_cat_id (msg) - const char *msg; - { - int cnt; - - for (cnt = 0; cnt < _msg_tbl_length; ++cnt) - if (strcmp (msg, _msg_tbl[cnt]._msg) == 0) - return _msg_tbl[cnt]._msg_number; - - return -1; - } - - - /* @@ begin of epilog @@ */ - - /* We don't want libintl.a to depend on any other library. So we - avoid the non-standard function stpcpy. In GNU C Library this - function is available, though. Also allow the symbol HAVE_STPCPY - to be defined. */ - #if !_LIBC && !HAVE_STPCPY - static char * - stpcpy (dest, src) - char *dest; - const char *src; - { - while ((*dest++ = *src++) != '\0') - /* Do nothing. */ ; - return dest - 1; - } - #endif --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/intl/config.charset gcc-3.1/gcc/intl/config.charset *** gcc-3.0.4/gcc/intl/config.charset Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/intl/config.charset Fri Oct 12 17:24:30 2001 *************** *** 0 **** --- 1,438 ---- + #! /bin/sh + # Output a system dependent table of character encoding aliases. + # + # Copyright (C) 2000-2001 Free Software Foundation, Inc. + # + # This program is free software; you can redistribute it and/or modify it + # under the terms of the GNU Library 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 + # Library General Public License for more details. + # + # You should have received a copy of the GNU Library General Public + # License along with this program; if not, write to the Free Software + # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + # USA. + # + # The table consists of lines of the form + # ALIAS CANONICAL + # + # ALIAS is the (system dependent) result of "nl_langinfo (CODESET)". + # ALIAS is compared in a case sensitive way. + # + # CANONICAL is the GNU canonical name for this character encoding. + # It must be an encoding supported by libiconv. Support by GNU libc is + # also desirable. CANONICAL is case insensitive. Usually an upper case + # MIME charset name is preferred. + # The current list of GNU canonical charset names is as follows. + # + # name used by which systems a MIME name? + # ASCII, ANSI_X3.4-1968 glibc solaris freebsd + # ISO-8859-1 glibc aix hpux irix osf solaris freebsd yes + # ISO-8859-2 glibc aix hpux irix osf solaris freebsd yes + # ISO-8859-3 glibc yes + # ISO-8859-4 osf solaris freebsd yes + # ISO-8859-5 glibc aix hpux irix osf solaris freebsd yes + # ISO-8859-6 glibc aix hpux solaris yes + # ISO-8859-7 glibc aix hpux irix osf solaris yes + # ISO-8859-8 glibc aix hpux osf solaris yes + # ISO-8859-9 glibc aix hpux irix osf solaris yes + # ISO-8859-13 glibc + # ISO-8859-15 glibc aix osf solaris freebsd + # KOI8-R glibc solaris freebsd yes + # KOI8-U glibc freebsd yes + # CP437 dos + # CP775 dos + # CP850 aix osf dos + # CP852 dos + # CP855 dos + # CP856 aix + # CP857 dos + # CP861 dos + # CP862 dos + # CP864 dos + # CP865 dos + # CP866 freebsd dos + # CP869 dos + # CP874 win32 dos + # CP922 aix + # CP932 aix win32 dos + # CP943 aix + # CP949 osf win32 dos + # CP950 win32 dos + # CP1046 aix + # CP1124 aix + # CP1129 aix + # CP1250 win32 + # CP1251 glibc win32 + # CP1252 aix win32 + # CP1253 win32 + # CP1254 win32 + # CP1255 win32 + # CP1256 win32 + # CP1257 win32 + # GB2312 glibc aix hpux irix solaris freebsd yes + # EUC-JP glibc aix hpux irix osf solaris freebsd yes + # EUC-KR glibc aix hpux irix osf solaris freebsd yes + # EUC-TW glibc aix hpux irix osf solaris + # BIG5 glibc aix hpux osf solaris freebsd yes + # BIG5-HKSCS glibc + # GBK aix osf win32 dos + # GB18030 glibc + # SHIFT_JIS hpux osf solaris freebsd yes + # JOHAB glibc win32 + # TIS-620 glibc aix hpux osf solaris + # VISCII glibc yes + # HP-ROMAN8 hpux + # HP-ARABIC8 hpux + # HP-GREEK8 hpux + # HP-HEBREW8 hpux + # HP-TURKISH8 hpux + # HP-KANA8 hpux + # DEC-KANJI osf + # DEC-HANYU osf + # UTF-8 glibc aix hpux osf solaris yes + # + # Note: Names which are not marked as being a MIME name should not be used in + # Internet protocols for information interchange (mail, news, etc.). + # + # Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications + # must understand both names and treat them as equivalent. + # + # The first argument passed to this file is the canonical host specification, + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM + # or + # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM + + host="$1" + os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'` + echo "# This file contains a table of character encoding aliases," + echo "# suitable for operating system '${os}'." + echo "# It was automatically generated from config.charset." + # List of references, updated during installation: + echo "# Packages using this file: " + case "$os" in + linux* | *-gnu*) + # With glibc-2.1 or newer, we don't need any canonicalization, + # because glibc has iconv and both glibc and libiconv support all + # GNU canonical names directly. Therefore, the Makefile does not + # need to install the alias file at all. + # The following applies only to glibc-2.0.x and older libcs. + echo "ISO_646.IRV:1983 ASCII" + ;; + aix*) + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-6 ISO-8859-6" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-8 ISO-8859-8" + echo "ISO8859-9 ISO-8859-9" + echo "ISO8859-15 ISO-8859-15" + echo "IBM-850 CP850" + echo "IBM-856 CP856" + echo "IBM-921 ISO-8859-13" + echo "IBM-922 CP922" + echo "IBM-932 CP932" + echo "IBM-943 CP943" + echo "IBM-1046 CP1046" + echo "IBM-1124 CP1124" + echo "IBM-1129 CP1129" + echo "IBM-1252 CP1252" + echo "IBM-eucCN GB2312" + echo "IBM-eucJP EUC-JP" + echo "IBM-eucKR EUC-KR" + echo "IBM-eucTW EUC-TW" + echo "big5 BIG5" + echo "GBK GBK" + echo "TIS-620 TIS-620" + echo "UTF-8 UTF-8" + ;; + hpux*) + echo "iso88591 ISO-8859-1" + echo "iso88592 ISO-8859-2" + echo "iso88595 ISO-8859-5" + echo "iso88596 ISO-8859-6" + echo "iso88597 ISO-8859-7" + echo "iso88598 ISO-8859-8" + echo "iso88599 ISO-8859-9" + echo "iso885915 ISO-8859-15" + echo "roman8 HP-ROMAN8" + echo "arabic8 HP-ARABIC8" + echo "greek8 HP-GREEK8" + echo "hebrew8 HP-HEBREW8" + echo "turkish8 HP-TURKISH8" + echo "kana8 HP-KANA8" + echo "tis620 TIS-620" + echo "big5 BIG5" + echo "eucJP EUC-JP" + echo "eucKR EUC-KR" + echo "eucTW EUC-TW" + echo "hp15CN GB2312" + #echo "ccdc ?" # what is this? + echo "SJIS SHIFT_JIS" + echo "utf8 UTF-8" + ;; + irix*) + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-9 ISO-8859-9" + echo "eucCN GB2312" + echo "eucJP EUC-JP" + echo "eucKR EUC-KR" + echo "eucTW EUC-TW" + ;; + osf*) + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-4 ISO-8859-4" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-8 ISO-8859-8" + echo "ISO8859-9 ISO-8859-9" + echo "ISO8859-15 ISO-8859-15" + echo "cp850 CP850" + echo "big5 BIG5" + echo "dechanyu DEC-HANYU" + echo "dechanzi GB2312" + echo "deckanji DEC-KANJI" + echo "deckorean EUC-KR" + echo "eucJP EUC-JP" + echo "eucKR EUC-KR" + echo "eucTW EUC-TW" + echo "GBK GBK" + echo "KSC5601 CP949" + echo "sdeckanji EUC-JP" + echo "SJIS SHIFT_JIS" + echo "TACTIS TIS-620" + echo "UTF-8 UTF-8" + ;; + solaris*) + echo "646 ASCII" + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-4 ISO-8859-4" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-6 ISO-8859-6" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-8 ISO-8859-8" + echo "ISO8859-9 ISO-8859-9" + echo "ISO8859-15 ISO-8859-15" + echo "koi8-r KOI8-R" + echo "BIG5 BIG5" + echo "gb2312 GB2312" + echo "cns11643 EUC-TW" + echo "5601 EUC-KR" + echo "eucJP EUC-JP" + echo "PCK SHIFT_JIS" + echo "TIS620.2533 TIS-620" + #echo "sun_eu_greek ?" # what is this? + echo "UTF-8 UTF-8" + ;; + freebsd*) + # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore + # localcharset.c falls back to using the full locale name + # from the environment variables. + echo "C ASCII" + echo "US-ASCII ASCII" + for l in la_LN lt_LN; do + echo "$l.ASCII ASCII" + done + for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \ + fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \ + lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do + echo "$l.ISO_8859-1 ISO-8859-1" + echo "$l.DIS_8859-15 ISO-8859-15" + done + for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do + echo "$l.ISO_8859-2 ISO-8859-2" + done + for l in la_LN lt_LT; do + echo "$l.ISO_8859-4 ISO-8859-4" + done + for l in ru_RU ru_SU; do + echo "$l.KOI8-R KOI8-R" + echo "$l.ISO_8859-5 ISO-8859-5" + echo "$l.CP866 CP866" + done + echo "uk_UA.KOI8-U KOI8-U" + echo "zh_TW.BIG5 BIG5" + echo "zh_TW.Big5 BIG5" + echo "zh_CN.EUC GB2312" + echo "ja_JP.EUC EUC-JP" + echo "ja_JP.SJIS SHIFT_JIS" + echo "ja_JP.Shift_JIS SHIFT_JIS" + echo "ko_KR.EUC EUC-KR" + ;; + beos*) + # BeOS has a single locale, and it has UTF-8 encoding. + echo "* UTF-8" + ;; + msdosdjgpp*) + # DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore + # localcharset.c falls back to using the full locale name + # from the environment variables. + echo "#" + echo "# The encodings given here may not all be correct." + echo "# If you find that the encoding given for your language and" + echo "# country is not the one your DOS machine actually uses, just" + echo "# correct it in this file, and send a mail to" + echo "# Juan Manuel Guerrero " + echo "# and Bruno Haible ." + echo "#" + echo "C ASCII" + # ISO-8859-1 languages + echo "ca CP850" + echo "ca_ES CP850" + echo "da CP865" # not CP850 ?? + echo "da_DK CP865" # not CP850 ?? + echo "de CP850" + echo "de_AT CP850" + echo "de_CH CP850" + echo "de_DE CP850" + echo "en CP850" + echo "en_AU CP850" # not CP437 ?? + echo "en_CA CP850" + echo "en_GB CP850" + echo "en_NZ CP437" + echo "en_US CP437" + echo "en_ZA CP850" # not CP437 ?? + echo "es CP850" + echo "es_AR CP850" + echo "es_BO CP850" + echo "es_CL CP850" + echo "es_CO CP850" + echo "es_CR CP850" + echo "es_CU CP850" + echo "es_DO CP850" + echo "es_EC CP850" + echo "es_ES CP850" + echo "es_GT CP850" + echo "es_HN CP850" + echo "es_MX CP850" + echo "es_NI CP850" + echo "es_PA CP850" + echo "es_PY CP850" + echo "es_PE CP850" + echo "es_SV CP850" + echo "es_UY CP850" + echo "es_VE CP850" + echo "et CP850" + echo "et_EE CP850" + echo "eu CP850" + echo "eu_ES CP850" + echo "fi CP850" + echo "fi_FI CP850" + echo "fr CP850" + echo "fr_BE CP850" + echo "fr_CA CP850" + echo "fr_CH CP850" + echo "fr_FR CP850" + echo "ga CP850" + echo "ga_IE CP850" + echo "gd CP850" + echo "gd_GB CP850" + echo "gl CP850" + echo "gl_ES CP850" + echo "id CP850" # not CP437 ?? + echo "id_ID CP850" # not CP437 ?? + echo "is CP861" # not CP850 ?? + echo "is_IS CP861" # not CP850 ?? + echo "it CP850" + echo "it_CH CP850" + echo "it_IT CP850" + echo "lt CP775" + echo "lt_LT CP775" + echo "lv CP775" + echo "lv_LV CP775" + echo "nb CP865" # not CP850 ?? + echo "nb_NO CP865" # not CP850 ?? + echo "nl CP850" + echo "nl_BE CP850" + echo "nl_NL CP850" + echo "nn CP865" # not CP850 ?? + echo "nn_NO CP865" # not CP850 ?? + echo "no CP865" # not CP850 ?? + echo "no_NO CP865" # not CP850 ?? + echo "pt CP850" + echo "pt_BR CP850" + echo "pt_PT CP850" + echo "sv CP850" + echo "sv_SE CP850" + # ISO-8859-2 languages + echo "cs CP852" + echo "cs_CZ CP852" + echo "hr CP852" + echo "hr_HR CP852" + echo "hu CP852" + echo "hu_HU CP852" + echo "pl CP852" + echo "pl_PL CP852" + echo "ro CP852" + echo "ro_RO CP852" + echo "sk CP852" + echo "sk_SK CP852" + echo "sl CP852" + echo "sl_SI CP852" + echo "sq CP852" + echo "sq_AL CP852" + echo "sr CP852" # CP852 or CP866 or CP855 ?? + echo "sr_YU CP852" # CP852 or CP866 or CP855 ?? + # ISO-8859-3 languages + echo "mt CP850" + echo "mt_MT CP850" + # ISO-8859-5 languages + echo "be CP866" + echo "be_BE CP866" + echo "bg CP866" # not CP855 ?? + echo "bg_BG CP866" # not CP855 ?? + echo "mk CP866" # not CP855 ?? + echo "mk_MK CP866" # not CP855 ?? + echo "ru KOI8-R" # not CP866 ?? + echo "ru_RU KOI8-R" # not CP866 ?? + # ISO-8859-6 languages + echo "ar CP864" + echo "ar_AE CP864" + echo "ar_DZ CP864" + echo "ar_EG CP864" + echo "ar_IQ CP864" + echo "ar_IR CP864" + echo "ar_JO CP864" + echo "ar_KW CP864" + echo "ar_MA CP864" + echo "ar_OM CP864" + echo "ar_QA CP864" + echo "ar_SA CP864" + echo "ar_SY CP864" + # ISO-8859-7 languages + echo "el CP869" + echo "el_GR CP869" + # ISO-8859-8 languages + echo "he CP862" + echo "he_IL CP862" + # ISO-8859-9 languages + echo "tr CP857" + echo "tr_TR CP857" + # Japanese + echo "ja CP932" + echo "ja_JP CP932" + # Chinese + echo "zh_CN GBK" + echo "zh_TW CP950" # not CP938 ?? + # Korean + echo "kr CP949" # not CP934 ?? + echo "kr_KR CP949" # not CP934 ?? + # Thai + echo "th CP874" + echo "th_TH CP874" + # Other + echo "eo CP850" + echo "eo_EO CP850" + ;; + esac diff -Nrc3pad gcc-3.0.4/gcc/intl/dcgettext.c gcc-3.1/gcc/intl/dcgettext.c *** gcc-3.0.4/gcc/intl/dcgettext.c Mon Sep 18 22:05:52 2000 --- gcc-3.1/gcc/intl/dcgettext.c Fri Oct 12 17:24:30 2001 *************** *** 1,231 **** /* Implementation of the dcgettext(3) function. ! Copyright (C) 1995, 1996, 1997, 1998 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, ! Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include #endif - # ifndef _GNU_SOURCE - # define _GNU_SOURCE 1 - # endif - - #include - - #ifdef __GNUC__ - # define alloca __builtin_alloca - # define HAVE_ALLOCA 1 - #else - # if defined HAVE_ALLOCA_H || defined _LIBC - # include - # else - # ifdef _AIX - #pragma alloca - # else - # ifndef alloca - char *alloca (); - # endif - # endif - # endif - #endif - - #include - #ifndef errno - extern int errno; - #endif - #ifndef __set_errno - # define __set_errno(val) errno = (val) - #endif - - #if defined STDC_HEADERS || defined _LIBC - # include - #else - char *getenv (); - # ifdef HAVE_MALLOC_H - # include - # else - void free (); - # endif - #endif - - #if defined HAVE_STRING_H || defined _LIBC - # include - #else - # include - #endif - #if !HAVE_STRCHR && !defined _LIBC - # ifndef strchr - # define strchr index - # endif - #endif - - #if defined HAVE_UNISTD_H || defined _LIBC - # include - #endif - - #include "gettext.h" #include "gettextP.h" #ifdef _LIBC # include #else ! # include "libgettext.h" ! #endif ! #include "hash-string.h" ! ! /* The internal variables in the standalone libintl.a must have different ! names than the internal variables in GNU libc, otherwise programs ! using libintl.a cannot be linked statically. */ ! #if !defined _LIBC ! # define _nl_default_default_domain _nl_default_default_domain__ ! # define _nl_current_default_domain _nl_current_default_domain__ ! # define _nl_default_dirname _nl_default_dirname__ ! # define _nl_domain_bindings _nl_domain_bindings__ #endif /* @@ end of prolog @@ */ - #ifdef _LIBC - /* Rename the non ANSI C functions. This is required by the standard - because some ANSI C functions will require linking with this object - file and the name space must not be polluted. */ - # define getcwd __getcwd - # ifndef stpcpy - # define stpcpy __stpcpy - # endif - #else - # if !defined HAVE_GETCWD - char *getwd (); - # define getcwd(buf, max) getwd (buf) - # elif !defined (HAVE_DECL_GETCWD) - char *getcwd (); - # endif - # ifndef HAVE_STPCPY - static char *stpcpy PARAMS ((char *dest, const char *src)); - # endif - #endif - - /* Amount to increase buffer size by in each try. */ - #define PATH_INCR 32 - - /* The following is from pathmax.h. */ - /* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define - PATH_MAX but might cause redefinition warnings when sys/param.h is - later included (as on MORE/BSD 4.3). */ - #if defined(_POSIX_VERSION) || (defined(HAVE_LIMITS_H) && !defined(__GNUC__)) - # include - #endif - - #ifndef _POSIX_PATH_MAX - # define _POSIX_PATH_MAX 255 - #endif - - #if !defined(PATH_MAX) && defined(_PC_PATH_MAX) - # define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX)) - #endif - - /* Don't include sys/param.h if it already has been. */ - #if defined(HAVE_SYS_PARAM_H) && !defined(PATH_MAX) && !defined(MAXPATHLEN) - # include - #endif - - #if !defined(PATH_MAX) && defined(MAXPATHLEN) - # define PATH_MAX MAXPATHLEN - #endif - - #ifndef PATH_MAX - # define PATH_MAX _POSIX_PATH_MAX - #endif - - /* XPG3 defines the result of `setlocale (category, NULL)' as: - ``Directs `setlocale()' to query `category' and return the current - setting of `local'.'' - However it does not specify the exact format. And even worse: POSIX - defines this not at all. So we can use this feature only on selected - system (e.g. those using GNU C Library). */ - #ifdef _LIBC - # define HAVE_LOCALE_NULL - #endif - - /* Name of the default domain used for gettext(3) prior any call to - textdomain(3). The default value for this is "messages". */ - const char _nl_default_default_domain[] = "messages"; - - /* Value used as the default domain for gettext(3). */ - const char *_nl_current_default_domain = _nl_default_default_domain; - - /* Contains the default location of the message catalogs. */ - const char _nl_default_dirname[] = GNULOCALEDIR; - - /* List with bindings of specific domains created by bindtextdomain() - calls. */ - struct binding *_nl_domain_bindings; - - /* Prototypes for local functions. */ - static char *find_msg PARAMS ((struct loaded_l10nfile *domain_file, - const char *msgid)) internal_function; - static const char *category_to_name PARAMS ((int category)) internal_function; - static const char *guess_category_value PARAMS ((int category, - const char *categoryname)) - internal_function; - - - /* For those loosing systems which don't have `alloca' we have to add - some additional code emulating it. */ - #ifdef HAVE_ALLOCA - /* Nothing has to be done. */ - # define ADD_BLOCK(list, address) /* nothing */ - # define FREE_BLOCKS(list) /* nothing */ - #else - struct block_list - { - void *address; - struct block_list *next; - }; - # define ADD_BLOCK(list, addr) \ - do { \ - struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \ - /* If we cannot get a free block we cannot add the new element to \ - the list. */ \ - if (newp != NULL) { \ - newp->address = (addr); \ - newp->next = (list); \ - (list) = newp; \ - } \ - } while (0) - # define FREE_BLOCKS(list) \ - do { \ - while (list != NULL) { \ - struct block_list *old = list; \ - list = list->next; \ - free (old); \ - } \ - } while (0) - # undef alloca - # define alloca(size) (malloc (size)) - #endif /* have alloca */ - - /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define DCGETTEXT __dcgettext #else # define DCGETTEXT dcgettext__ #endif /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY --- 1,44 ---- /* Implementation of the dcgettext(3) function. ! Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. ! This program is free software; you can redistribute it and/or modify it ! under the terms of the GNU Library 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 ! Library General Public License for more details. ! You should have received a copy of the GNU Library General Public ! License along with this program; if not, write to the Free Software ! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, ! USA. */ #ifdef HAVE_CONFIG_H # include #endif #include "gettextP.h" #ifdef _LIBC # include #else ! # include "libgnuintl.h" #endif /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define DCGETTEXT __dcgettext + # define DCIGETTEXT __dcigettext #else # define DCGETTEXT dcgettext__ + # define DCIGETTEXT dcigettext__ #endif /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY *************** DCGETTEXT (domainname, msgid, category) *** 236,638 **** const char *msgid; int category; { ! #ifndef HAVE_ALLOCA ! struct block_list *block_list = NULL; ! #endif ! struct loaded_l10nfile *domain; ! struct binding *binding; ! const char *categoryname; ! const char *categoryvalue; ! char *dirname, *xdomainname; ! char *single_locale; ! char *retval; ! int saved_errno = errno; ! ! /* If no real MSGID is given return NULL. */ ! if (msgid == NULL) ! return NULL; ! ! /* If DOMAINNAME is NULL, we are interested in the default domain. If ! CATEGORY is not LC_MESSAGES this might not make much sense but the ! defintion left this undefined. */ ! if (domainname == NULL) ! domainname = _nl_current_default_domain; ! ! /* First find matching binding. */ ! for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next) ! { ! int compare = strcmp (domainname, binding->domainname); ! if (compare == 0) ! /* We found it! */ ! break; ! if (compare < 0) ! { ! /* It is not in the list. */ ! binding = NULL; ! break; ! } ! } ! ! if (binding == NULL) ! dirname = (char *) _nl_default_dirname; ! else if (binding->dirname[0] == '/') ! dirname = binding->dirname; ! else ! { ! /* We have a relative path. Make it absolute now. */ ! size_t dirname_len = strlen (binding->dirname) + 1; ! size_t path_max; ! char *ret; ! ! path_max = (unsigned) PATH_MAX; ! path_max += 2; /* The getcwd docs say to do this. */ ! ! dirname = (char *) alloca (path_max + dirname_len); ! ADD_BLOCK (block_list, dirname); ! ! __set_errno (0); ! while ((ret = getcwd (dirname, path_max)) == NULL && errno == ERANGE) ! { ! path_max += PATH_INCR; ! dirname = (char *) alloca (path_max + dirname_len); ! ADD_BLOCK (block_list, dirname); ! __set_errno (0); ! } ! ! if (ret == NULL) ! { ! /* We cannot get the current working directory. Don't signal an ! error but simply return the default string. */ ! FREE_BLOCKS (block_list); ! __set_errno (saved_errno); ! return (char *) msgid; ! } ! ! stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname); ! } ! ! /* Now determine the symbolic name of CATEGORY and its value. */ ! categoryname = category_to_name (category); ! categoryvalue = guess_category_value (category, categoryname); ! ! xdomainname = (char *) alloca (strlen (categoryname) ! + strlen (domainname) + 5); ! ADD_BLOCK (block_list, xdomainname); ! ! stpcpy (stpcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"), ! domainname), ! ".mo"); ! ! /* Creating working area. */ ! single_locale = (char *) alloca (strlen (categoryvalue) + 1); ! ADD_BLOCK (block_list, single_locale); ! ! ! /* Search for the given string. This is a loop because we perhaps ! got an ordered list of languages to consider for th translation. */ ! while (1) ! { ! /* Make CATEGORYVALUE point to the next element of the list. */ ! while (categoryvalue[0] != '\0' && categoryvalue[0] == ':') ! ++categoryvalue; ! if (categoryvalue[0] == '\0') ! { ! /* The whole contents of CATEGORYVALUE has been searched but ! no valid entry has been found. We solve this situation ! by implicitly appending a "C" entry, i.e. no translation ! will take place. */ ! single_locale[0] = 'C'; ! single_locale[1] = '\0'; ! } ! else ! { ! char *cp = single_locale; ! while (categoryvalue[0] != '\0' && categoryvalue[0] != ':') ! *cp++ = *categoryvalue++; ! *cp = '\0'; ! } ! ! /* If the current locale value is C (or POSIX) we don't load a ! domain. Return the MSGID. */ ! if (strcmp (single_locale, "C") == 0 ! || strcmp (single_locale, "POSIX") == 0) ! { ! FREE_BLOCKS (block_list); ! __set_errno (saved_errno); ! return (char *) msgid; ! } ! ! ! /* Find structure describing the message catalog matching the ! DOMAINNAME and CATEGORY. */ ! domain = _nl_find_domain (dirname, single_locale, xdomainname); ! ! if (domain != NULL) ! { ! retval = find_msg (domain, msgid); ! ! if (retval == NULL) ! { ! int cnt; ! ! for (cnt = 0; domain->successor[cnt] != NULL; ++cnt) ! { ! retval = find_msg (domain->successor[cnt], msgid); ! ! if (retval != NULL) ! break; ! } ! } ! ! if (retval != NULL) ! { ! FREE_BLOCKS (block_list); ! __set_errno (saved_errno); ! return retval; ! } ! } ! } ! /* NOTREACHED */ } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__dcgettext, dcgettext); #endif - - - static char * - internal_function - find_msg (domain_file, msgid) - struct loaded_l10nfile *domain_file; - const char *msgid; - { - size_t top, act, bottom; - struct loaded_domain *domain; - - if (domain_file->decided == 0) - _nl_load_domain (domain_file); - - if (domain_file->data == NULL) - return NULL; - - domain = (struct loaded_domain *) domain_file->data; - - /* Locate the MSGID and its translation. */ - if (domain->hash_size > 2 && domain->hash_tab != NULL) - { - /* Use the hashing table. */ - nls_uint32 len = strlen (msgid); - nls_uint32 hash_val = hash_string (msgid); - nls_uint32 idx = hash_val % domain->hash_size; - nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2)); - nls_uint32 nstr = W (domain->must_swap, domain->hash_tab[idx]); - - if (nstr == 0) - /* Hash table entry is empty. */ - return NULL; - - if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) == len - && strcmp (msgid, - domain->data + W (domain->must_swap, - domain->orig_tab[nstr - 1].offset)) == 0) - return (char *) domain->data + W (domain->must_swap, - domain->trans_tab[nstr - 1].offset); - - while (1) - { - if (idx >= domain->hash_size - incr) - idx -= domain->hash_size - incr; - else - idx += incr; - - nstr = W (domain->must_swap, domain->hash_tab[idx]); - if (nstr == 0) - /* Hash table entry is empty. */ - return NULL; - - if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) == len - && strcmp (msgid, - domain->data + W (domain->must_swap, - domain->orig_tab[nstr - 1].offset)) - == 0) - return (char *) domain->data - + W (domain->must_swap, domain->trans_tab[nstr - 1].offset); - } - /* NOTREACHED */ - } - - /* Now we try the default method: binary search in the sorted - array of messages. */ - bottom = 0; - act = 0; - top = domain->nstrings; - while (bottom < top) - { - int cmp_val; - - act = (bottom + top) / 2; - cmp_val = strcmp (msgid, domain->data - + W (domain->must_swap, - domain->orig_tab[act].offset)); - if (cmp_val < 0) - top = act; - else if (cmp_val > 0) - bottom = act + 1; - else - break; - } - - /* If an translation is found return this. */ - return bottom >= top ? NULL : (char *) domain->data - + W (domain->must_swap, - domain->trans_tab[act].offset); - } - - - /* Return string representation of locale CATEGORY. */ - static const char * - internal_function - category_to_name (category) - int category; - { - const char *retval; - - switch (category) - { - #ifdef LC_COLLATE - case LC_COLLATE: - retval = "LC_COLLATE"; - break; - #endif - #ifdef LC_CTYPE - case LC_CTYPE: - retval = "LC_CTYPE"; - break; - #endif - #ifdef LC_MONETARY - case LC_MONETARY: - retval = "LC_MONETARY"; - break; - #endif - #ifdef LC_NUMERIC - case LC_NUMERIC: - retval = "LC_NUMERIC"; - break; - #endif - #ifdef LC_TIME - case LC_TIME: - retval = "LC_TIME"; - break; - #endif - #ifdef LC_MESSAGES - case LC_MESSAGES: - retval = "LC_MESSAGES"; - break; - #endif - #ifdef LC_RESPONSE - case LC_RESPONSE: - retval = "LC_RESPONSE"; - break; - #endif - #ifdef LC_ALL - case LC_ALL: - /* This might not make sense but is perhaps better than any other - value. */ - retval = "LC_ALL"; - break; - #endif - default: - /* If you have a better idea for a default value let me know. */ - retval = "LC_XXX"; - } - - return retval; - } - - /* Guess value of current locale from value of the environment variables. */ - static const char * - internal_function - guess_category_value (category, categoryname) - int category; - const char *categoryname; - { - const char *retval; - (void) category; /* shut up compiler */ - (void) categoryname; /* ditto */ - - /* The highest priority value is the `LANGUAGE' environment - variable. This is a GNU extension. */ - retval = getenv ("LANGUAGE"); - if (retval != NULL && retval[0] != '\0') - return retval; - - /* `LANGUAGE' is not set. So we have to proceed with the POSIX - methods of looking to `LC_ALL', `LC_xxx', and `LANG'. On some - systems this can be done by the `setlocale' function itself. */ - #if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL - return setlocale (category, NULL); - #else - /* Setting of LC_ALL overwrites all other. */ - retval = getenv ("LC_ALL"); - if (retval != NULL && retval[0] != '\0') - return retval; - - /* Next comes the name of the desired category. */ - retval = getenv (categoryname); - if (retval != NULL && retval[0] != '\0') - return retval; - - /* Last possibility is the LANG environment variable. */ - retval = getenv ("LANG"); - if (retval != NULL && retval[0] != '\0') - return retval; - - /* We use C as the default domain. POSIX says this is implementation - defined. */ - return "C"; - #endif - } - - /* @@ begin of epilog @@ */ - - /* We don't want libintl.a to depend on any other library. So we - avoid the non-standard function stpcpy. In GNU C Library this - function is available, though. Also allow the symbol HAVE_STPCPY - to be defined. */ - #if !_LIBC && !HAVE_STPCPY - static char * - stpcpy (dest, src) - char *dest; - const char *src; - { - while ((*dest++ = *src++) != '\0') - /* Do nothing. */ ; - return dest - 1; - } - #endif - - - #ifdef _LIBC - /* If we want to free all resources we have to do some work at - program's end. */ - static void __attribute__ ((unused)) - free_mem (void) - { - struct binding *runp; - - for (runp = _nl_domain_bindings; runp != NULL; runp = runp->next) - { - free (runp->domainname); - if (runp->dirname != _nl_default_dirname) - /* Yes, this is a pointer comparison. */ - free (runp->dirname); - } - - if (_nl_current_default_domain != _nl_default_default_domain) - /* Yes, again a pointer comparison. */ - free ((char *) _nl_current_default_domain); - } - - text_set_element (__libc_subfreeres, free_mem); - #endif --- 49,58 ---- const char *msgid; int category; { ! return DCIGETTEXT (domainname, msgid, NULL, 0, 0, category); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__dcgettext, dcgettext); #endif diff -Nrc3pad gcc-3.0.4/gcc/intl/dcigettext.c gcc-3.1/gcc/intl/dcigettext.c *** gcc-3.0.4/gcc/intl/dcigettext.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/intl/dcigettext.c Sun Oct 21 16:29:13 2001 *************** *** 0 **** --- 1,1265 ---- + /* Implementation of the internal dcigettext function. + Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + + /* Tell glibc's to provide a prototype for mempcpy(). + This must come before because may include + , and once has been included, it's too late. */ + #ifndef _GNU_SOURCE + # define _GNU_SOURCE 1 + #endif + + #ifdef HAVE_CONFIG_H + # include + #endif + + #include + + #ifdef __GNUC__ + # define alloca __builtin_alloca + # define HAVE_ALLOCA 1 + #else + # if defined HAVE_ALLOCA_H || defined _LIBC + # include + # else + # ifdef _AIX + #pragma alloca + # else + # ifndef alloca + char *alloca (); + # endif + # endif + # endif + #endif + + #include + #ifndef errno + extern int errno; + #endif + #ifndef __set_errno + # define __set_errno(val) errno = (val) + #endif + + #include + #include + + #include + #if !HAVE_STRCHR && !defined _LIBC + # ifndef strchr + # define strchr index + # endif + #endif + + #if defined HAVE_UNISTD_H || defined _LIBC + # include + #endif + + #include + + #if defined HAVE_SYS_PARAM_H || defined _LIBC + # include + #endif + + #include "gettextP.h" + #ifdef _LIBC + # include + #else + # include "libgnuintl.h" + #endif + #include "hash-string.h" + + /* Thread safetyness. */ + #ifdef _LIBC + # include + #else + /* Provide dummy implementation if this is outside glibc. */ + # define __libc_lock_define_initialized(CLASS, NAME) + # define __libc_lock_lock(NAME) + # define __libc_lock_unlock(NAME) + # define __libc_rwlock_define_initialized(CLASS, NAME) + # define __libc_rwlock_rdlock(NAME) + # define __libc_rwlock_unlock(NAME) + #endif + + /* Alignment of types. */ + #if defined __GNUC__ && __GNUC__ >= 2 + # define alignof(TYPE) __alignof__ (TYPE) + #else + # define alignof(TYPE) \ + ((int) &((struct { char dummy1; TYPE dummy2; } *) 0)->dummy2) + #endif + + /* The internal variables in the standalone libintl.a must have different + names than the internal variables in GNU libc, otherwise programs + using libintl.a cannot be linked statically. */ + #if !defined _LIBC + # define _nl_default_default_domain _nl_default_default_domain__ + # define _nl_current_default_domain _nl_current_default_domain__ + # define _nl_default_dirname _nl_default_dirname__ + # define _nl_domain_bindings _nl_domain_bindings__ + #endif + + /* Some compilers, like SunOS4 cc, don't have offsetof in . */ + #ifndef offsetof + # define offsetof(type,ident) ((size_t)&(((type*)0)->ident)) + #endif + + /* @@ end of prolog @@ */ + + #ifdef _LIBC + /* Rename the non ANSI C functions. This is required by the standard + because some ANSI C functions will require linking with this object + file and the name space must not be polluted. + GCC LOCAL: Don't use #elif. */ + # define getcwd __getcwd + # ifndef stpcpy + # define stpcpy __stpcpy + # endif + # define tfind __tfind + #else + # if !defined HAVE_GETCWD + char *getwd (); + # define getcwd(buf, max) getwd (buf) + # else + # if !defined HAVE_DECL_GETCWD + char *getcwd (); + # endif + # endif + # ifndef HAVE_STPCPY + static char *stpcpy PARAMS ((char *dest, const char *src)); + # endif + # ifndef HAVE_MEMPCPY + static void *mempcpy PARAMS ((void *dest, const void *src, size_t n)); + # endif + #endif + + /* Amount to increase buffer size by in each try. */ + #define PATH_INCR 32 + + /* The following is from pathmax.h. */ + /* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define + PATH_MAX but might cause redefinition warnings when sys/param.h is + later included (as on MORE/BSD 4.3). */ + #if defined _POSIX_VERSION || (defined HAVE_LIMITS_H && !defined __GNUC__) + # include + #endif + + #ifndef _POSIX_PATH_MAX + # define _POSIX_PATH_MAX 255 + #endif + + #if !defined PATH_MAX && defined _PC_PATH_MAX + # define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX)) + #endif + + /* Don't include sys/param.h if it already has been. */ + #if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN + # include + #endif + + #if !defined PATH_MAX && defined MAXPATHLEN + # define PATH_MAX MAXPATHLEN + #endif + + #ifndef PATH_MAX + # define PATH_MAX _POSIX_PATH_MAX + #endif + + /* Pathname support. + ISSLASH(C) tests whether C is a directory separator character. + IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not, + it may be concatenated to a directory pathname. + IS_PATH_WITH_DIR(P) tests whether P contains a directory specification. + */ + #if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__ + /* Win32, OS/2, DOS */ + # define ISSLASH(C) ((C) == '/' || (C) == '\\') + # define HAS_DEVICE(P) \ + ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \ + && (P)[1] == ':') + # define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P)) + # define IS_PATH_WITH_DIR(P) \ + (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P)) + #else + /* Unix */ + # define ISSLASH(C) ((C) == '/') + # define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0]) + # define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL) + #endif + + /* XPG3 defines the result of `setlocale (category, NULL)' as: + ``Directs `setlocale()' to query `category' and return the current + setting of `local'.'' + However it does not specify the exact format. Neither do SUSV2 and + ISO C 99. So we can use this feature only on selected systems (e.g. + those using GNU C Library). */ + #if defined _LIBC || (defined __GNU_LIBRARY__ && __GNU_LIBRARY__ >= 2) + # define HAVE_LOCALE_NULL + #endif + + /* This is the type used for the search tree where known translations + are stored. */ + struct known_translation_t + { + /* Domain in which to search. */ + char *domainname; + + /* The category. */ + int category; + + /* State of the catalog counter at the point the string was found. */ + int counter; + + /* Catalog where the string was found. */ + struct loaded_l10nfile *domain; + + /* And finally the translation. */ + const char *translation; + size_t translation_length; + + /* Pointer to the string in question. */ + char msgid[ZERO]; + }; + + /* Root of the search tree with known translations. We can use this + only if the system provides the `tsearch' function family. */ + #if defined HAVE_TSEARCH || defined _LIBC + # include + + static void *root; + + # ifdef _LIBC + # define tsearch __tsearch + # endif + + /* Function to compare two entries in the table of known translations. */ + static int transcmp PARAMS ((const void *p1, const void *p2)); + static int + transcmp (p1, p2) + const void *p1; + const void *p2; + { + const struct known_translation_t *s1; + const struct known_translation_t *s2; + int result; + + s1 = (const struct known_translation_t *) p1; + s2 = (const struct known_translation_t *) p2; + + result = strcmp (s1->msgid, s2->msgid); + if (result == 0) + { + result = strcmp (s1->domainname, s2->domainname); + if (result == 0) + /* We compare the category last (though this is the cheapest + operation) since it is hopefully always the same (namely + LC_MESSAGES). */ + result = s1->category - s2->category; + } + + return result; + } + #endif + + /* Name of the default domain used for gettext(3) prior any call to + textdomain(3). The default value for this is "messages". */ + const char _nl_default_default_domain[] = "messages"; + + /* Value used as the default domain for gettext(3). */ + const char *_nl_current_default_domain = _nl_default_default_domain; + + /* Contains the default location of the message catalogs. */ + const char _nl_default_dirname[] = LOCALEDIR; + + /* List with bindings of specific domains created by bindtextdomain() + calls. */ + struct binding *_nl_domain_bindings; + + /* Prototypes for local functions. */ + static char *plural_lookup PARAMS ((struct loaded_l10nfile *domain, + unsigned long int n, + const char *translation, + size_t translation_len)) + internal_function; + static unsigned long int plural_eval PARAMS ((struct expression *pexp, + unsigned long int n)) + internal_function; + static const char *category_to_name PARAMS ((int category)) internal_function; + static const char *guess_category_value PARAMS ((int category, + const char *categoryname)) + internal_function; + + + /* For those loosing systems which don't have `alloca' we have to add + some additional code emulating it. */ + #ifdef HAVE_ALLOCA + /* Nothing has to be done. */ + # define ADD_BLOCK(list, address) /* nothing */ + # define FREE_BLOCKS(list) /* nothing */ + #else + struct block_list + { + void *address; + struct block_list *next; + }; + # define ADD_BLOCK(list, addr) \ + do { \ + struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \ + /* If we cannot get a free block we cannot add the new element to \ + the list. */ \ + if (newp != NULL) { \ + newp->address = (addr); \ + newp->next = (list); \ + (list) = newp; \ + } \ + } while (0) + # define FREE_BLOCKS(list) \ + do { \ + while (list != NULL) { \ + struct block_list *old = list; \ + list = list->next; \ + free (old); \ + } \ + } while (0) + # undef alloca + # define alloca(size) (malloc (size)) + #endif /* have alloca */ + + + #ifdef _LIBC + /* List of blocks allocated for translations. */ + typedef struct transmem_list + { + struct transmem_list *next; + char data[ZERO]; + } transmem_block_t; + static struct transmem_list *transmem_list; + #else + typedef unsigned char transmem_block_t; + #endif + + + /* Names for the libintl functions are a problem. They must not clash + with existing names and they should follow ANSI C. But this source + code is also used in GNU C Library where the names have a __ + prefix. So we have to make a difference here. */ + #ifdef _LIBC + # define DCIGETTEXT __dcigettext + #else + # define DCIGETTEXT dcigettext__ + #endif + + /* Lock variable to protect the global data in the gettext implementation. */ + #ifdef _LIBC + __libc_rwlock_define_initialized (, _nl_state_lock) + #endif + + /* Checking whether the binaries runs SUID must be done and glibc provides + easier methods therefore we make a difference here. */ + #ifdef _LIBC + # define ENABLE_SECURE __libc_enable_secure + # define DETERMINE_SECURE + #else + # ifndef HAVE_GETUID + # define getuid() 0 + # endif + # ifndef HAVE_GETGID + # define getgid() 0 + # endif + # ifndef HAVE_GETEUID + # define geteuid() getuid() + # endif + # ifndef HAVE_GETEGID + # define getegid() getgid() + # endif + static int enable_secure; + # define ENABLE_SECURE (enable_secure == 1) + # define DETERMINE_SECURE \ + if (enable_secure == 0) \ + { \ + if (getuid () != geteuid () || getgid () != getegid ()) \ + enable_secure = 1; \ + else \ + enable_secure = -1; \ + } + #endif + + /* Look up MSGID in the DOMAINNAME message catalog for the current + CATEGORY locale and, if PLURAL is nonzero, search over string + depending on the plural form determined by N. */ + char * + DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category) + const char *domainname; + const char *msgid1; + const char *msgid2; + int plural; + unsigned long int n; + int category; + { + #ifndef HAVE_ALLOCA + struct block_list *block_list = NULL; + #endif + struct loaded_l10nfile *domain; + struct binding *binding; + const char *categoryname; + const char *categoryvalue; + char *dirname, *xdomainname; + char *single_locale; + char *retval; + size_t retlen; + int saved_errno; + #if defined HAVE_TSEARCH || defined _LIBC + struct known_translation_t *search; + struct known_translation_t **foundp = NULL; + size_t msgid_len; + #endif + size_t domainname_len; + + /* If no real MSGID is given return NULL. */ + if (msgid1 == NULL) + return NULL; + + __libc_rwlock_rdlock (_nl_state_lock); + + /* If DOMAINNAME is NULL, we are interested in the default domain. If + CATEGORY is not LC_MESSAGES this might not make much sense but the + definition left this undefined. */ + if (domainname == NULL) + domainname = _nl_current_default_domain; + + #if defined HAVE_TSEARCH || defined _LIBC + msgid_len = strlen (msgid1) + 1; + + /* Try to find the translation among those which we found at + some time. */ + search = (struct known_translation_t *) + alloca (offsetof (struct known_translation_t, msgid) + msgid_len); + memcpy (search->msgid, msgid1, msgid_len); + search->domainname = (char *) domainname; + search->category = category; + + foundp = (struct known_translation_t **) tfind (search, &root, transcmp); + if (foundp != NULL && (*foundp)->counter == _nl_msg_cat_cntr) + { + /* Now deal with plural. */ + if (plural) + retval = plural_lookup ((*foundp)->domain, n, (*foundp)->translation, + (*foundp)->translation_length); + else + retval = (char *) (*foundp)->translation; + + __libc_rwlock_unlock (_nl_state_lock); + return retval; + } + #endif + + /* Preserve the `errno' value. */ + saved_errno = errno; + + /* See whether this is a SUID binary or not. */ + DETERMINE_SECURE; + + /* First find matching binding. */ + for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next) + { + int compare = strcmp (domainname, binding->domainname); + if (compare == 0) + /* We found it! */ + break; + if (compare < 0) + { + /* It is not in the list. */ + binding = NULL; + break; + } + } + + if (binding == NULL) + dirname = (char *) _nl_default_dirname; + else if (IS_ABSOLUTE_PATH (binding->dirname)) + dirname = binding->dirname; + else + { + /* We have a relative path. Make it absolute now. */ + size_t dirname_len = strlen (binding->dirname) + 1; + size_t path_max; + char *ret; + + path_max = (unsigned int) PATH_MAX; + path_max += 2; /* The getcwd docs say to do this. */ + + for (;;) + { + dirname = (char *) alloca (path_max + dirname_len); + ADD_BLOCK (block_list, dirname); + + __set_errno (0); + ret = getcwd (dirname, path_max); + if (ret != NULL || errno != ERANGE) + break; + + path_max += path_max / 2; + path_max += PATH_INCR; + } + + if (ret == NULL) + { + /* We cannot get the current working directory. Don't signal an + error but simply return the default string. */ + FREE_BLOCKS (block_list); + __libc_rwlock_unlock (_nl_state_lock); + __set_errno (saved_errno); + return (plural == 0 + ? (char *) msgid1 + /* Use the Germanic plural rule. */ + : n == 1 ? (char *) msgid1 : (char *) msgid2); + } + + stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname); + } + + /* Now determine the symbolic name of CATEGORY and its value. */ + categoryname = category_to_name (category); + categoryvalue = guess_category_value (category, categoryname); + + domainname_len = strlen (domainname); + xdomainname = (char *) alloca (strlen (categoryname) + + domainname_len + 5); + ADD_BLOCK (block_list, xdomainname); + + stpcpy (mempcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"), + domainname, domainname_len), + ".mo"); + + /* Creating working area. */ + single_locale = (char *) alloca (strlen (categoryvalue) + 1); + ADD_BLOCK (block_list, single_locale); + + + /* Search for the given string. This is a loop because we perhaps + got an ordered list of languages to consider for the translation. */ + while (1) + { + /* Make CATEGORYVALUE point to the next element of the list. */ + while (categoryvalue[0] != '\0' && categoryvalue[0] == ':') + ++categoryvalue; + if (categoryvalue[0] == '\0') + { + /* The whole contents of CATEGORYVALUE has been searched but + no valid entry has been found. We solve this situation + by implicitly appending a "C" entry, i.e. no translation + will take place. */ + single_locale[0] = 'C'; + single_locale[1] = '\0'; + } + else + { + char *cp = single_locale; + while (categoryvalue[0] != '\0' && categoryvalue[0] != ':') + *cp++ = *categoryvalue++; + *cp = '\0'; + + /* When this is a SUID binary we must not allow accessing files + outside the dedicated directories. */ + if (ENABLE_SECURE && IS_PATH_WITH_DIR (single_locale)) + /* Ingore this entry. */ + continue; + } + + /* If the current locale value is C (or POSIX) we don't load a + domain. Return the MSGID. */ + if (strcmp (single_locale, "C") == 0 + || strcmp (single_locale, "POSIX") == 0) + { + FREE_BLOCKS (block_list); + __libc_rwlock_unlock (_nl_state_lock); + __set_errno (saved_errno); + return (plural == 0 + ? (char *) msgid1 + /* Use the Germanic plural rule. */ + : n == 1 ? (char *) msgid1 : (char *) msgid2); + } + + + /* Find structure describing the message catalog matching the + DOMAINNAME and CATEGORY. */ + domain = _nl_find_domain (dirname, single_locale, xdomainname, binding); + + if (domain != NULL) + { + retval = _nl_find_msg (domain, binding, msgid1, &retlen); + + if (retval == NULL) + { + int cnt; + + for (cnt = 0; domain->successor[cnt] != NULL; ++cnt) + { + retval = _nl_find_msg (domain->successor[cnt], binding, + msgid1, &retlen); + + if (retval != NULL) + { + domain = domain->successor[cnt]; + break; + } + } + } + + if (retval != NULL) + { + /* Found the translation of MSGID1 in domain DOMAIN: + starting at RETVAL, RETLEN bytes. */ + FREE_BLOCKS (block_list); + __set_errno (saved_errno); + #if defined HAVE_TSEARCH || defined _LIBC + if (foundp == NULL) + { + /* Create a new entry and add it to the search tree. */ + struct known_translation_t *newp; + + newp = (struct known_translation_t *) + malloc (offsetof (struct known_translation_t, msgid) + + msgid_len + domainname_len + 1); + if (newp != NULL) + { + newp->domainname = + mempcpy (newp->msgid, msgid1, msgid_len); + memcpy (newp->domainname, domainname, domainname_len + 1); + newp->category = category; + newp->counter = _nl_msg_cat_cntr; + newp->domain = domain; + newp->translation = retval; + newp->translation_length = retlen; + + /* Insert the entry in the search tree. */ + foundp = (struct known_translation_t **) + tsearch (newp, &root, transcmp); + if (foundp == NULL + || __builtin_expect (*foundp != newp, 0)) + /* The insert failed. */ + free (newp); + } + } + else + { + /* We can update the existing entry. */ + (*foundp)->counter = _nl_msg_cat_cntr; + (*foundp)->domain = domain; + (*foundp)->translation = retval; + (*foundp)->translation_length = retlen; + } + #endif + /* Now deal with plural. */ + if (plural) + retval = plural_lookup (domain, n, retval, retlen); + + __libc_rwlock_unlock (_nl_state_lock); + return retval; + } + } + } + /* NOTREACHED */ + } + + + char * + internal_function + _nl_find_msg (domain_file, domainbinding, msgid, lengthp) + struct loaded_l10nfile *domain_file; + struct binding *domainbinding; + const char *msgid; + size_t *lengthp; + { + struct loaded_domain *domain; + size_t act; + char *result; + size_t resultlen; + + if (domain_file->decided == 0) + _nl_load_domain (domain_file, domainbinding); + + if (domain_file->data == NULL) + return NULL; + + domain = (struct loaded_domain *) domain_file->data; + + /* Locate the MSGID and its translation. */ + if (domain->hash_size > 2 && domain->hash_tab != NULL) + { + /* Use the hashing table. */ + nls_uint32 len = strlen (msgid); + nls_uint32 hash_val = hash_string (msgid); + nls_uint32 idx = hash_val % domain->hash_size; + nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2)); + + while (1) + { + nls_uint32 nstr = W (domain->must_swap, domain->hash_tab[idx]); + + if (nstr == 0) + /* Hash table entry is empty. */ + return NULL; + + /* Compare msgid with the original string at index nstr-1. + We compare the lengths with >=, not ==, because plural entries + are represented by strings with an embedded NUL. */ + if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) >= len + && (strcmp (msgid, + domain->data + W (domain->must_swap, + domain->orig_tab[nstr - 1].offset)) + == 0)) + { + act = nstr - 1; + goto found; + } + + if (idx >= domain->hash_size - incr) + idx -= domain->hash_size - incr; + else + idx += incr; + } + /* NOTREACHED */ + } + else + { + /* Try the default method: binary search in the sorted array of + messages. */ + size_t top, bottom; + + bottom = 0; + act = 0; + top = domain->nstrings; + while (bottom < top) + { + int cmp_val; + + act = (bottom + top) / 2; + cmp_val = strcmp (msgid, (domain->data + + W (domain->must_swap, + domain->orig_tab[act].offset))); + if (cmp_val < 0) + top = act; + else if (cmp_val > 0) + bottom = act + 1; + else + goto found; + } + /* No translation was found. */ + return NULL; + } + + found: + /* The translation was found at index ACT. If we have to convert the + string to use a different character set, this is the time. */ + result = ((char *) domain->data + + W (domain->must_swap, domain->trans_tab[act].offset)); + resultlen = W (domain->must_swap, domain->trans_tab[act].length) + 1; + + #if defined _LIBC || HAVE_ICONV + if (domain->codeset_cntr + != (domainbinding != NULL ? domainbinding->codeset_cntr : 0)) + { + /* The domain's codeset has changed through bind_textdomain_codeset() + since the message catalog was initialized or last accessed. We + have to reinitialize the converter. */ + _nl_free_domain_conv (domain); + _nl_init_domain_conv (domain_file, domain, domainbinding); + } + + if ( + # ifdef _LIBC + domain->conv != (__gconv_t) -1 + # else + # if HAVE_ICONV + domain->conv != (iconv_t) -1 + # endif + # endif + ) + { + /* We are supposed to do a conversion. First allocate an + appropriate table with the same structure as the table + of translations in the file, where we can put the pointers + to the converted strings in. + There is a slight complication with plural entries. They + are represented by consecutive NUL terminated strings. We + handle this case by converting RESULTLEN bytes, including + NULs. */ + + if (domain->conv_tab == NULL + && ((domain->conv_tab = (char **) calloc (domain->nstrings, + sizeof (char *))) + == NULL)) + /* Mark that we didn't succeed allocating a table. */ + domain->conv_tab = (char **) -1; + + if (__builtin_expect (domain->conv_tab == (char **) -1, 0)) + /* Nothing we can do, no more memory. */ + goto converted; + + if (domain->conv_tab[act] == NULL) + { + /* We haven't used this string so far, so it is not + translated yet. Do this now. */ + /* We use a bit more efficient memory handling. + We allocate always larger blocks which get used over + time. This is faster than many small allocations. */ + __libc_lock_define_initialized (static, lock) + # define INITIAL_BLOCK_SIZE 4080 + static unsigned char *freemem; + static size_t freemem_size; + + const unsigned char *inbuf; + unsigned char *outbuf; + int malloc_count; + # ifndef _LIBC + transmem_block_t *transmem_list = NULL; + # endif + + __libc_lock_lock (lock); + + inbuf = (const unsigned char *) result; + outbuf = freemem + sizeof (size_t); + + malloc_count = 0; + while (1) + { + transmem_block_t *newmem; + # ifdef _LIBC + size_t non_reversible; + int res; + + if (freemem_size < sizeof (size_t)) + goto resize_freemem; + + res = __gconv (domain->conv, + &inbuf, inbuf + resultlen, + &outbuf, + outbuf + freemem_size - sizeof (size_t), + &non_reversible); + + if (res == __GCONV_OK || res == __GCONV_EMPTY_INPUT) + break; + + if (res != __GCONV_FULL_OUTPUT) + { + __libc_lock_unlock (lock); + goto converted; + } + + inbuf = result; + # else + # if HAVE_ICONV + const char *inptr = (const char *) inbuf; + size_t inleft = resultlen; + char *outptr = (char *) outbuf; + size_t outleft; + + if (freemem_size < sizeof (size_t)) + goto resize_freemem; + + outleft = freemem_size - sizeof (size_t); + if (iconv (domain->conv, + (ICONV_CONST char **) &inptr, &inleft, + &outptr, &outleft) + != (size_t) (-1)) + { + outbuf = (unsigned char *) outptr; + break; + } + if (errno != E2BIG) + { + __libc_lock_unlock (lock); + goto converted; + } + # endif + # endif + + resize_freemem: + /* We must allocate a new buffer or resize the old one. */ + if (malloc_count > 0) + { + ++malloc_count; + freemem_size = malloc_count * INITIAL_BLOCK_SIZE; + newmem = (transmem_block_t *) realloc (transmem_list, + freemem_size); + # ifdef _LIBC + if (newmem != NULL) + transmem_list = transmem_list->next; + else + { + struct transmem_list *old = transmem_list; + + transmem_list = transmem_list->next; + free (old); + } + # endif + } + else + { + malloc_count = 1; + freemem_size = INITIAL_BLOCK_SIZE; + newmem = (transmem_block_t *) malloc (freemem_size); + } + if (__builtin_expect (newmem == NULL, 0)) + { + freemem = NULL; + freemem_size = 0; + __libc_lock_unlock (lock); + goto converted; + } + + # ifdef _LIBC + /* Add the block to the list of blocks we have to free + at some point. */ + newmem->next = transmem_list; + transmem_list = newmem; + + freemem = newmem->data; + freemem_size -= offsetof (struct transmem_list, data); + # else + transmem_list = newmem; + freemem = newmem; + # endif + + outbuf = freemem + sizeof (size_t); + } + + /* We have now in our buffer a converted string. Put this + into the table of conversions. */ + *(size_t *) freemem = outbuf - freemem - sizeof (size_t); + domain->conv_tab[act] = (char *) freemem; + /* Shrink freemem, but keep it aligned. */ + freemem_size -= outbuf - freemem; + freemem = outbuf; + freemem += freemem_size & (alignof (size_t) - 1); + freemem_size = freemem_size & ~ (alignof (size_t) - 1); + + __libc_lock_unlock (lock); + } + + /* Now domain->conv_tab[act] contains the translation of all + the plural variants. */ + result = domain->conv_tab[act] + sizeof (size_t); + resultlen = *(size_t *) domain->conv_tab[act]; + } + + converted: + /* The result string is converted. */ + + #endif /* _LIBC || HAVE_ICONV */ + + *lengthp = resultlen; + return result; + } + + + /* Look up a plural variant. */ + static char * + internal_function + plural_lookup (domain, n, translation, translation_len) + struct loaded_l10nfile *domain; + unsigned long int n; + const char *translation; + size_t translation_len; + { + struct loaded_domain *domaindata = (struct loaded_domain *) domain->data; + unsigned long int index; + const char *p; + + index = plural_eval (domaindata->plural, n); + if (index >= domaindata->nplurals) + /* This should never happen. It means the plural expression and the + given maximum value do not match. */ + index = 0; + + /* Skip INDEX strings at TRANSLATION. */ + p = translation; + while (index-- > 0) + { + #ifdef _LIBC + p = __rawmemchr (p, '\0'); + #else + p = strchr (p, '\0'); + #endif + /* And skip over the NUL byte. */ + p++; + + if (p >= translation + translation_len) + /* This should never happen. It means the plural expression + evaluated to a value larger than the number of variants + available for MSGID1. */ + return (char *) translation; + } + return (char *) p; + } + + + /* Function to evaluate the plural expression and return an index value. */ + static unsigned long int + internal_function + plural_eval (pexp, n) + struct expression *pexp; + unsigned long int n; + { + switch (pexp->nargs) + { + case 0: + switch (pexp->operation) + { + case var: + return n; + case num: + return pexp->val.num; + default: + break; + } + /* NOTREACHED */ + break; + case 1: + { + /* pexp->operation must be lnot. */ + unsigned long int arg = plural_eval (pexp->val.args[0], n); + return ! arg; + } + case 2: + { + unsigned long int leftarg = plural_eval (pexp->val.args[0], n); + if (pexp->operation == lor) + return leftarg || plural_eval (pexp->val.args[1], n); + else if (pexp->operation == land) + return leftarg && plural_eval (pexp->val.args[1], n); + else + { + unsigned long int rightarg = plural_eval (pexp->val.args[1], n); + + switch (pexp->operation) + { + case mult: + return leftarg * rightarg; + case divide: + return leftarg / rightarg; + case module: + return leftarg % rightarg; + case plus: + return leftarg + rightarg; + case minus: + return leftarg - rightarg; + case less_than: + return leftarg < rightarg; + case greater_than: + return leftarg > rightarg; + case less_or_equal: + return leftarg <= rightarg; + case greater_or_equal: + return leftarg >= rightarg; + case equal: + return leftarg == rightarg; + case not_equal: + return leftarg != rightarg; + default: + break; + } + } + /* NOTREACHED */ + break; + } + case 3: + { + /* pexp->operation must be qmop. */ + unsigned long int boolarg = plural_eval (pexp->val.args[0], n); + return plural_eval (pexp->val.args[boolarg ? 1 : 2], n); + } + } + /* NOTREACHED */ + return 0; + } + + + /* Return string representation of locale CATEGORY. */ + static const char * + internal_function + category_to_name (category) + int category; + { + const char *retval; + + switch (category) + { + #ifdef LC_COLLATE + case LC_COLLATE: + retval = "LC_COLLATE"; + break; + #endif + #ifdef LC_CTYPE + case LC_CTYPE: + retval = "LC_CTYPE"; + break; + #endif + #ifdef LC_MONETARY + case LC_MONETARY: + retval = "LC_MONETARY"; + break; + #endif + #ifdef LC_NUMERIC + case LC_NUMERIC: + retval = "LC_NUMERIC"; + break; + #endif + #ifdef LC_TIME + case LC_TIME: + retval = "LC_TIME"; + break; + #endif + #ifdef LC_MESSAGES + case LC_MESSAGES: + retval = "LC_MESSAGES"; + break; + #endif + #ifdef LC_RESPONSE + case LC_RESPONSE: + retval = "LC_RESPONSE"; + break; + #endif + #ifdef LC_ALL + case LC_ALL: + /* This might not make sense but is perhaps better than any other + value. */ + retval = "LC_ALL"; + break; + #endif + default: + /* If you have a better idea for a default value let me know. */ + retval = "LC_XXX"; + } + + return retval; + } + + /* Guess value of current locale from value of the environment variables. */ + static const char * + internal_function + guess_category_value (category, categoryname) + int category; + const char *categoryname; + { + const char *language; + const char *retval; + (void) category; /* shut up compiler */ + (void) categoryname; /* ditto */ + + /* The highest priority value is the `LANGUAGE' environment + variable. But we don't use the value if the currently selected + locale is the C locale. This is a GNU extension. */ + language = getenv ("LANGUAGE"); + if (language != NULL && language[0] == '\0') + language = NULL; + + /* We have to proceed with the POSIX methods of looking to `LC_ALL', + `LC_xxx', and `LANG'. On some systems this can be done by the + `setlocale' function itself. */ + #if defined _LIBC || (defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL) + retval = setlocale (category, NULL); + #else + /* Setting of LC_ALL overwrites all other. */ + retval = getenv ("LC_ALL"); + if (retval == NULL || retval[0] == '\0') + { + /* Next comes the name of the desired category. */ + retval = getenv (categoryname); + if (retval == NULL || retval[0] == '\0') + { + /* Last possibility is the LANG environment variable. */ + retval = getenv ("LANG"); + if (retval == NULL || retval[0] == '\0') + /* We use C as the default domain. POSIX says this is + implementation defined. */ + return "C"; + } + } + #endif + + return language != NULL && strcmp (retval, "C") != 0 ? language : retval; + } + + /* @@ begin of epilog @@ */ + + /* We don't want libintl.a to depend on any other library. So we + avoid the non-standard function stpcpy. In GNU C Library this + function is available, though. Also allow the symbol HAVE_STPCPY + to be defined. */ + #if !_LIBC && !HAVE_STPCPY + static char * + stpcpy (dest, src) + char *dest; + const char *src; + { + while ((*dest++ = *src++) != '\0') + /* Do nothing. */ ; + return dest - 1; + } + #endif + + #if !_LIBC && !HAVE_MEMPCPY + static void * + mempcpy (dest, src, n) + void *dest; + const void *src; + size_t n; + { + return (void *) ((char *) memcpy (dest, src, n) + n); + } + #endif + + + #ifdef _LIBC + /* If we want to free all resources we have to do some work at + program's end. */ + static void __attribute__ ((unused)) + free_mem (void) + { + void *old; + + while (_nl_domain_bindings != NULL) + { + struct binding *oldp = _nl_domain_bindings; + _nl_domain_bindings = _nl_domain_bindings->next; + if (oldp->dirname != _nl_default_dirname) + /* Yes, this is a pointer comparison. */ + free (oldp->dirname); + free (oldp->codeset); + free (oldp); + } + + if (_nl_current_default_domain != _nl_default_default_domain) + /* Yes, again a pointer comparison. */ + free ((char *) _nl_current_default_domain); + + /* Remove the search tree with the known translations. */ + __tdestroy (root, free); + root = NULL; + + while (transmem_list != NULL) + { + old = transmem_list; + transmem_list = transmem_list->next; + free (old); + } + } + + text_set_element (__libc_subfreeres, free_mem); + #endif diff -Nrc3pad gcc-3.0.4/gcc/intl/dcngettext.c gcc-3.1/gcc/intl/dcngettext.c *** gcc-3.0.4/gcc/intl/dcngettext.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/intl/dcngettext.c Fri Oct 12 17:24:30 2001 *************** *** 0 **** --- 1,60 ---- + /* Implementation of the dcngettext(3) function. + Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + + #ifdef HAVE_CONFIG_H + # include + #endif + + #include "gettextP.h" + #ifdef _LIBC + # include + #else + # include "libgnuintl.h" + #endif + + /* @@ end of prolog @@ */ + + /* Names for the libintl functions are a problem. They must not clash + with existing names and they should follow ANSI C. But this source + code is also used in GNU C Library where the names have a __ + prefix. So we have to make a difference here. */ + #ifdef _LIBC + # define DCNGETTEXT __dcngettext + # define DCIGETTEXT __dcigettext + #else + # define DCNGETTEXT dcngettext__ + # define DCIGETTEXT dcigettext__ + #endif + + /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY + locale. */ + char * + DCNGETTEXT (domainname, msgid1, msgid2, n, category) + const char *domainname; + const char *msgid1; + const char *msgid2; + unsigned long int n; + int category; + { + return DCIGETTEXT (domainname, msgid1, msgid2, 1, n, category); + } + + #ifdef _LIBC + /* Alias for function name in GNU C Library. */ + weak_alias (__dcngettext, dcngettext); + #endif diff -Nrc3pad gcc-3.0.4/gcc/intl/dgettext.c gcc-3.1/gcc/intl/dgettext.c *** gcc-3.0.4/gcc/intl/dgettext.c Sat Sep 4 15:08:49 1999 --- gcc-3.1/gcc/intl/dgettext.c Fri Oct 12 17:24:30 2001 *************** *** 1,32 **** ! /* Implementation of the dgettext(3) function ! Copyright (C) 1995, 1996, 1997 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, ! Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include #endif ! #if defined HAVE_LOCALE_H || defined _LIBC ! # include ! #endif #ifdef _LIBC # include #else ! # include "libgettext.h" #endif /* @@ end of prolog @@ */ --- 1,32 ---- ! /* Implementation of the dgettext(3) function. ! Copyright (C) 1995-1997, 2000, 2001 Free Software Foundation, Inc. ! This program is free software; you can redistribute it and/or modify it ! under the terms of the GNU Library 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 ! Library General Public License for more details. ! You should have received a copy of the GNU Library General Public ! License along with this program; if not, write to the Free Software ! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, ! USA. */ #ifdef HAVE_CONFIG_H # include #endif ! #include + #include "gettextP.h" #ifdef _LIBC # include #else ! # include "libgnuintl.h" #endif /* @@ end of prolog @@ */ diff -Nrc3pad gcc-3.0.4/gcc/intl/dngettext.c gcc-3.1/gcc/intl/dngettext.c *** gcc-3.0.4/gcc/intl/dngettext.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/intl/dngettext.c Fri Oct 12 17:24:30 2001 *************** *** 0 **** --- 1,61 ---- + /* Implementation of the dngettext(3) function. + Copyright (C) 1995-1997, 2000, 2001 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + + #ifdef HAVE_CONFIG_H + # include + #endif + + #include + + #include "gettextP.h" + #ifdef _LIBC + # include + #else + # include "libgnuintl.h" + #endif + + /* @@ end of prolog @@ */ + + /* Names for the libintl functions are a problem. They must not clash + with existing names and they should follow ANSI C. But this source + code is also used in GNU C Library where the names have a __ + prefix. So we have to make a difference here. */ + #ifdef _LIBC + # define DNGETTEXT __dngettext + # define DCNGETTEXT __dcngettext + #else + # define DNGETTEXT dngettext__ + # define DCNGETTEXT dcngettext__ + #endif + + /* Look up MSGID in the DOMAINNAME message catalog of the current + LC_MESSAGES locale and skip message according to the plural form. */ + char * + DNGETTEXT (domainname, msgid1, msgid2, n) + const char *domainname; + const char *msgid1; + const char *msgid2; + unsigned long int n; + { + return DCNGETTEXT (domainname, msgid1, msgid2, n, LC_MESSAGES); + } + + #ifdef _LIBC + /* Alias for function name in GNU C Library. */ + weak_alias (__dngettext, dngettext); + #endif diff -Nrc3pad gcc-3.0.4/gcc/intl/explodename.c gcc-3.1/gcc/intl/explodename.c *** gcc-3.0.4/gcc/intl/explodename.c Tue Jun 6 07:23:42 2000 --- gcc-3.1/gcc/intl/explodename.c Fri Oct 12 17:24:30 2001 *************** *** 1,33 **** ! /* Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. Contributed by Ulrich Drepper , 1995. ! 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, ! Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include #endif ! #if defined STDC_HEADERS || defined _LIBC ! # include ! #endif ! ! #if defined HAVE_STRING_H || defined _LIBC ! # include ! #else ! # include ! #endif #include #include "loadinfo.h" --- 1,27 ---- ! /* Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc. Contributed by Ulrich Drepper , 1995. ! This program is free software; you can redistribute it and/or modify it ! under the terms of the GNU Library 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 ! Library General Public License for more details. ! You should have received a copy of the GNU Library General Public ! License along with this program; if not, write to the Free Software ! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, ! USA. */ #ifdef HAVE_CONFIG_H # include #endif ! #include ! #include #include #include "loadinfo.h" *************** *** 43,48 **** --- 37,54 ---- /* @@ end of prolog @@ */ + char * + _nl_find_language (name) + const char *name; + { + while (name[0] != '\0' && name[0] != '_' && name[0] != '@' + && name[0] != '+' && name[0] != ',') + ++name; + + return (char *) name; + } + + int _nl_explode_name (name, language, modifier, territory, codeset, normalized_codeset, special, sponsor, revision) *************** _nl_explode_name (name, language, modifi *** 74,82 **** mask = 0; syntax = undecided; *language = cp = name; ! while (cp[0] != '\0' && cp[0] != '_' && cp[0] != '@' ! && cp[0] != '+' && cp[0] != ',') ! ++cp; if (*language == cp) /* This does not make sense: language has to be specified. Use --- 80,86 ---- mask = 0; syntax = undecided; *language = cp = name; ! cp = _nl_find_language (*language); if (*language == cp) /* This does not make sense: language has to be specified. Use *************** _nl_explode_name (name, language, modifi *** 108,116 **** if (*codeset != cp && (*codeset)[0] != '\0') { ! *normalized_codeset = _nl_normalize_codeset ( ! *((unsigned char **) codeset), ! cp - *codeset); if (strcmp (*codeset, *normalized_codeset) == 0) free ((char *) *normalized_codeset); else --- 112,119 ---- if (*codeset != cp && (*codeset)[0] != '\0') { ! *normalized_codeset = _nl_normalize_codeset (*codeset, ! cp - *codeset); if (strcmp (*codeset, *normalized_codeset) == 0) free ((char *) *normalized_codeset); else diff -Nrc3pad gcc-3.0.4/gcc/intl/finddomain.c gcc-3.1/gcc/intl/finddomain.c *** gcc-3.0.4/gcc/intl/finddomain.c Sat Sep 4 15:08:49 1999 --- gcc-3.1/gcc/intl/finddomain.c Fri Oct 12 17:24:30 2001 *************** *** 1,64 **** /* Handle list of needed message catalogs ! Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. ! Written by Ulrich Drepper , 1995. ! 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, ! Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include #endif - #include - #include #include #include ! ! #if defined STDC_HEADERS || defined _LIBC ! # include ! #else ! # ifdef HAVE_MALLOC_H ! # include ! # else ! void free (); ! # endif ! #endif ! ! #if defined HAVE_STRING_H || defined _LIBC ! # include ! #else ! # include ! # ifndef memcpy ! # define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num) ! # endif ! #endif ! #if !HAVE_STRCHR && !defined _LIBC ! # ifndef strchr ! # define strchr index ! # endif ! #endif #if defined HAVE_UNISTD_H || defined _LIBC # include #endif - #include "gettext.h" #include "gettextP.h" #ifdef _LIBC # include #else ! # include "libgettext.h" #endif /* @@ end of prolog @@ */ --- 1,40 ---- /* Handle list of needed message catalogs ! Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. ! Written by Ulrich Drepper , 1995. ! This program is free software; you can redistribute it and/or modify it ! under the terms of the GNU Library 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 ! Library General Public License for more details. ! You should have received a copy of the GNU Library General Public ! License along with this program; if not, write to the Free Software ! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, ! USA. */ #ifdef HAVE_CONFIG_H # include #endif #include #include ! #include ! #include #if defined HAVE_UNISTD_H || defined _LIBC # include #endif #include "gettextP.h" #ifdef _LIBC # include #else ! # include "libgnuintl.h" #endif /* @@ end of prolog @@ */ *************** static struct loaded_l10nfile *_nl_loade *** 71,80 **** established bindings. */ struct loaded_l10nfile * internal_function ! _nl_find_domain (dirname, locale, domainname) const char *dirname; char *locale; const char *domainname; { struct loaded_l10nfile *retval; const char *language; --- 47,57 ---- established bindings. */ struct loaded_l10nfile * internal_function ! _nl_find_domain (dirname, locale, domainname, domainbinding) const char *dirname; char *locale; const char *domainname; + struct binding *domainbinding; { struct loaded_l10nfile *retval; const char *language; *************** _nl_find_domain (dirname, locale, domain *** 120,126 **** int cnt; if (retval->decided == 0) ! _nl_load_domain (retval); if (retval->data != NULL) return retval; --- 97,103 ---- int cnt; if (retval->decided == 0) ! _nl_load_domain (retval, domainbinding); if (retval->data != NULL) return retval; *************** _nl_find_domain (dirname, locale, domain *** 128,134 **** for (cnt = 0; retval->successor[cnt] != NULL; ++cnt) { if (retval->successor[cnt]->decided == 0) ! _nl_load_domain (retval->successor[cnt]); if (retval->successor[cnt]->data != NULL) break; --- 105,111 ---- for (cnt = 0; retval->successor[cnt] != NULL; ++cnt) { if (retval->successor[cnt]->decided == 0) ! _nl_load_domain (retval->successor[cnt], domainbinding); if (retval->successor[cnt]->data != NULL) break; *************** _nl_find_domain (dirname, locale, domain *** 175,188 **** return NULL; if (retval->decided == 0) ! _nl_load_domain (retval); if (retval->data == NULL) { int cnt; for (cnt = 0; retval->successor[cnt] != NULL; ++cnt) { if (retval->successor[cnt]->decided == 0) ! _nl_load_domain (retval->successor[cnt]); if (retval->successor[cnt]->data != NULL) break; } --- 152,165 ---- return NULL; if (retval->decided == 0) ! _nl_load_domain (retval, domainbinding); if (retval->data == NULL) { int cnt; for (cnt = 0; retval->successor[cnt] != NULL; ++cnt) { if (retval->successor[cnt]->decided == 0) ! _nl_load_domain (retval->successor[cnt], domainbinding); if (retval->successor[cnt]->data != NULL) break; } *************** _nl_find_domain (dirname, locale, domain *** 192,197 **** --- 169,178 ---- if (alias_value != NULL) free (locale); + /* The space for normalized_codeset is dynamically allocated. Free it. */ + if (mask & XPG_NORM_CODESET) + free ((void *) normalized_codeset); + return retval; } *************** free_mem (void) *** 208,213 **** --- 189,195 ---- if (runp->data != NULL) _nl_unload_domain ((struct loaded_domain *) runp->data); runp = runp->next; + free ((char *) here->filename); free (here); } } diff -Nrc3pad gcc-3.0.4/gcc/intl/gettext.c gcc-3.1/gcc/intl/gettext.c *** gcc-3.0.4/gcc/intl/gettext.c Sat Sep 4 15:08:49 1999 --- gcc-3.1/gcc/intl/gettext.c Fri Oct 12 17:24:30 2001 *************** *** 1,19 **** /* Implementation of gettext(3) function. ! Copyright (C) 1995, 1997 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, ! Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include --- 1,20 ---- /* Implementation of gettext(3) function. ! Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc. ! This program is free software; you can redistribute it and/or modify it ! under the terms of the GNU Library 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 ! Library General Public License for more details. ! You should have received a copy of the GNU Library General Public ! License along with this program; if not, write to the Free Software ! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, ! USA. */ #ifdef HAVE_CONFIG_H # include *************** *** 23,43 **** # define __need_NULL # include #else ! # ifdef STDC_HEADERS ! # include /* Just for NULL. */ ! # else ! # ifdef HAVE_STRING_H ! # include ! # else ! # define NULL ((void *) 0) ! # endif ! # endif #endif #ifdef _LIBC # include #else ! # include "libgettext.h" #endif /* @@ end of prolog @@ */ --- 24,37 ---- # define __need_NULL # include #else ! # include /* Just for NULL. */ #endif + #include "gettextP.h" #ifdef _LIBC # include #else ! # include "libgnuintl.h" #endif /* @@ end of prolog @@ */ *************** *** 48,57 **** prefix. So we have to make a difference here. */ #ifdef _LIBC # define GETTEXT __gettext ! # define DGETTEXT __dgettext #else # define GETTEXT gettext__ ! # define DGETTEXT dgettext__ #endif /* Look up MSGID in the current default message catalog for the current --- 42,51 ---- prefix. So we have to make a difference here. */ #ifdef _LIBC # define GETTEXT __gettext ! # define DCGETTEXT __dcgettext #else # define GETTEXT gettext__ ! # define DCGETTEXT dcgettext__ #endif /* Look up MSGID in the current default message catalog for the current *************** char * *** 61,67 **** GETTEXT (msgid) const char *msgid; { ! return DGETTEXT (NULL, msgid); } #ifdef _LIBC --- 55,61 ---- GETTEXT (msgid) const char *msgid; { ! return DCGETTEXT (NULL, msgid, LC_MESSAGES); } #ifdef _LIBC diff -Nrc3pad gcc-3.0.4/gcc/intl/gettext.h gcc-3.1/gcc/intl/gettext.h *** gcc-3.0.4/gcc/intl/gettext.h Wed Sep 6 06:09:15 2000 --- gcc-3.1/gcc/intl/gettext.h Fri Oct 12 17:24:30 2001 *************** *** 1,26 **** ! /* Internal header for GNU gettext internationalization functions. ! Copyright (C) 1995, 1997 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 Library General Public ! License along with the GNU C Library; see the file COPYING.LIB. If not, ! write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #ifndef _GETTEXT_H #define _GETTEXT_H 1 - #include - #if HAVE_LIMITS_H || _LIBC # include #endif --- 1,24 ---- ! /* Description of GNU message catalog format: general file layout. ! Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc. ! This program is free software; you can redistribute it and/or modify it ! under the terms of the GNU Library 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 ! Library General Public License for more details. You should have received a copy of the GNU Library General Public ! License along with this program; if not, write to the Free Software ! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, ! USA. */ #ifndef _GETTEXT_H #define _GETTEXT_H 1 #if HAVE_LIMITS_H || _LIBC # include #endif *************** *** 37,46 **** /* The following contortions are an attempt to use the C preprocessor to determine an unsigned integral type that is 32 bits wide. An alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but ! doing that would require that the configure script compile and *run* ! the resulting executable. Locally running cross-compiled executables ! is usually not possible. We use the maximum values for signed int's ! for the test to avoid using `U' suffixes. */ #define INT_MAX_32_BITS 2147483647 --- 35,43 ---- /* The following contortions are an attempt to use the C preprocessor to determine an unsigned integral type that is 32 bits wide. An alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but ! as of version autoconf-2.13, the AC_CHECK_SIZEOF macro doesn't work ! when cross-compiling. We use the maximum values for signed ints ! for the test to avoid using U suffixes. */ #define INT_MAX_32_BITS 2147483647 *************** *** 50,60 **** (that certainly have ) have 64+-bit integral types. */ #ifndef INT_MAX ! # define INT_MAX INT_MAX_32_BITS #endif #if INT_MAX == INT_MAX_32_BITS ! typedef unsigned nls_uint32; #else # if SHRT_MAX == INT_MAX_32_BITS typedef unsigned short nls_uint32; --- 47,57 ---- (that certainly have ) have 64+-bit integral types. */ #ifndef INT_MAX ! # define INT_MAX UINT_MAX_32_BITS #endif #if INT_MAX == INT_MAX_32_BITS ! typedef unsigned int nls_uint32; #else # if SHRT_MAX == INT_MAX_32_BITS typedef unsigned short nls_uint32; diff -Nrc3pad gcc-3.0.4/gcc/intl/gettextP.h gcc-3.1/gcc/intl/gettextP.h *** gcc-3.0.4/gcc/intl/gettextP.h Sat Sep 4 15:08:49 1999 --- gcc-3.1/gcc/intl/gettextP.h Sun Oct 21 16:29:13 2001 *************** *** 1,26 **** ! /* Header describing internals of gettext library ! Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. ! Written by Ulrich Drepper , 1995. ! 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, ! Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef _GETTEXTP_H #define _GETTEXTP_H #include "loadinfo.h" /* @@ end of prolog @@ */ #ifndef PARAMS --- 1,39 ---- ! /* Header describing internals of libintl library. ! Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. ! Written by Ulrich Drepper , 1995. ! This program is free software; you can redistribute it and/or modify it ! under the terms of the GNU Library 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 ! Library General Public License for more details. ! You should have received a copy of the GNU Library General Public ! License along with this program; if not, write to the Free Software ! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, ! USA. */ #ifndef _GETTEXTP_H #define _GETTEXTP_H + #include /* Get size_t. */ + + #ifdef _LIBC + # include "../iconv/gconv_int.h" + #else + # if HAVE_ICONV + # include + # endif + #endif + #include "loadinfo.h" + #include "gettext.h" /* Get nls_uint32. */ + /* @@ end of prolog @@ */ #ifndef PARAMS *************** *** 35,40 **** --- 48,59 ---- # define internal_function #endif + /* Tell the compiler when a conditional or integer expression is + almost always true or almost always false. */ + #ifndef HAVE_BUILTIN_EXPECT + # define __builtin_expect(expr, val) (expr) + #endif + #ifndef W # define W(flag, data) ((flag) ? SWAP (data) : (data)) #endif *************** *** 44,51 **** # include # define SWAP(i) bswap_32 (i) #else ! static nls_uint32 SWAP PARAMS ((nls_uint32 i)); ! static inline nls_uint32 SWAP (i) nls_uint32 i; --- 63,70 ---- # include # define SWAP(i) bswap_32 (i) #else ! /* GCC LOCAL: Prototype first to avoid warnings. */ ! static inline nls_uint32 SWAP PARAMS ((nls_uint32)); static inline nls_uint32 SWAP (i) nls_uint32 i; *************** SWAP (i) *** 55,60 **** --- 74,125 ---- #endif + /* This is the representation of the expressions to determine the + plural form. */ + struct expression + { + int nargs; /* Number of arguments. */ + enum operator + { + /* Without arguments: */ + var, /* The variable "n". */ + num, /* Decimal number. */ + /* Unary operators: */ + lnot, /* Logical NOT. */ + /* Binary operators: */ + mult, /* Multiplication. */ + divide, /* Division. */ + module, /* Module operation. */ + plus, /* Addition. */ + minus, /* Subtraction. */ + less_than, /* Comparison. */ + greater_than, /* Comparison. */ + less_or_equal, /* Comparison. */ + greater_or_equal, /* Comparison. */ + equal, /* Comparision for equality. */ + not_equal, /* Comparision for inequality. */ + land, /* Logical AND. */ + lor, /* Logical OR. */ + /* Ternary operators: */ + qmop /* Question mark operator. */ + } operation; + union + { + unsigned long int num; /* Number value for `num'. */ + struct expression *args[3]; /* Up to three arguments. */ + } val; + }; + + /* This is the data structure to pass information to the parser and get + the result in a thread-safe way. */ + struct parse_args + { + const char *cp; + struct expression *res; + }; + + + /* The representation of an opened message catalog. */ struct loaded_domain { const char *data; *************** struct loaded_domain *** 66,88 **** struct string_desc *trans_tab; nls_uint32 hash_size; nls_uint32 *hash_tab; }; struct binding { struct binding *next; - char *domainname; char *dirname; }; struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname, char *__locale, ! const char *__domainname)) internal_function; ! void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain)) internal_function; void _nl_unload_domain PARAMS ((struct loaded_domain *__domain)) internal_function; /* @@ begin of epilog @@ */ --- 131,258 ---- struct string_desc *trans_tab; nls_uint32 hash_size; nls_uint32 *hash_tab; + int codeset_cntr; + #ifdef _LIBC + __gconv_t conv; + #else + # if HAVE_ICONV + iconv_t conv; + # endif + #endif + char **conv_tab; + + struct expression *plural; + unsigned long int nplurals; }; + /* We want to allocate a string at the end of the struct. But ISO C + doesn't allow zero sized arrays. + GCC LOCAL: Always use 1, to avoid warnings. */ + /*#ifdef __GNUC__*/ + /*# define ZERO 0*/ + /*#else*/ + # define ZERO 1 + /*#endif*/ + + /* A set of settings bound to a message domain. Used to store settings + from bindtextdomain() and bind_textdomain_codeset(). */ struct binding { struct binding *next; char *dirname; + int codeset_cntr; /* Incremented each time codeset changes. */ + char *codeset; + char domainname[ZERO]; }; + /* A counter which is incremented each time some previous translations + become invalid. + This variable is part of the external ABI of the GNU libintl. */ + extern int _nl_msg_cat_cntr; + struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname, char *__locale, ! const char *__domainname, ! struct binding *__domainbinding)) internal_function; ! void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain, ! struct binding *__domainbinding)) internal_function; void _nl_unload_domain PARAMS ((struct loaded_domain *__domain)) internal_function; + const char *_nl_init_domain_conv PARAMS ((struct loaded_l10nfile *__domain_file, + struct loaded_domain *__domain, + struct binding *__domainbinding)) + internal_function; + void _nl_free_domain_conv PARAMS ((struct loaded_domain *__domain)) + internal_function; + + char *_nl_find_msg PARAMS ((struct loaded_l10nfile *domain_file, + struct binding *domainbinding, + const char *msgid, size_t *lengthp)) + internal_function; + + /* GCC LOCAL: This prototype moved here from next to its + use in loadmsgcat.c. */ + extern const char *locale_charset PARAMS ((void)) internal_function; + + #ifdef _LIBC + extern char *__gettext PARAMS ((const char *__msgid)); + extern char *__dgettext PARAMS ((const char *__domainname, + const char *__msgid)); + extern char *__dcgettext PARAMS ((const char *__domainname, + const char *__msgid, int __category)); + extern char *__ngettext PARAMS ((const char *__msgid1, const char *__msgid2, + unsigned long int __n)); + extern char *__dngettext PARAMS ((const char *__domainname, + const char *__msgid1, const char *__msgid2, + unsigned long int n)); + extern char *__dcngettext PARAMS ((const char *__domainname, + const char *__msgid1, const char *__msgid2, + unsigned long int __n, int __category)); + extern char *__dcigettext PARAMS ((const char *__domainname, + const char *__msgid1, const char *__msgid2, + int __plural, unsigned long int __n, + int __category)); + extern char *__textdomain PARAMS ((const char *__domainname)); + extern char *__bindtextdomain PARAMS ((const char *__domainname, + const char *__dirname)); + extern char *__bind_textdomain_codeset PARAMS ((const char *__domainname, + const char *__codeset)); + #else + extern char *gettext__ PARAMS ((const char *__msgid)); + extern char *dgettext__ PARAMS ((const char *__domainname, + const char *__msgid)); + extern char *dcgettext__ PARAMS ((const char *__domainname, + const char *__msgid, int __category)); + extern char *ngettext__ PARAMS ((const char *__msgid1, const char *__msgid2, + unsigned long int __n)); + extern char *dngettext__ PARAMS ((const char *__domainname, + const char *__msgid1, const char *__msgid2, + unsigned long int __n)); + extern char *dcngettext__ PARAMS ((const char *__domainname, + const char *__msgid1, const char *__msgid2, + unsigned long int __n, int __category)); + extern char *dcigettext__ PARAMS ((const char *__domainname, + const char *__msgid1, const char *__msgid2, + int __plural, unsigned long int __n, + int __category)); + extern char *textdomain__ PARAMS ((const char *__domainname)); + extern char *bindtextdomain__ PARAMS ((const char *__domainname, + const char *__dirname)); + extern char *bind_textdomain_codeset__ PARAMS ((const char *__domainname, + const char *__codeset)); + #endif + + #ifdef _LIBC + extern void __gettext_free_exp PARAMS ((struct expression *exp)) + internal_function; + extern int __gettextparse PARAMS ((void *arg)); + #else + extern void gettext_free_exp__ PARAMS ((struct expression *exp)) + internal_function; + extern int gettextparse__ PARAMS ((void *arg)); + #endif /* @@ begin of epilog @@ */ diff -Nrc3pad gcc-3.0.4/gcc/intl/hash-string.h gcc-3.1/gcc/intl/hash-string.h *** gcc-3.0.4/gcc/intl/hash-string.h Sat Sep 4 15:08:49 1999 --- gcc-3.1/gcc/intl/hash-string.h Fri Oct 12 17:24:30 2001 *************** *** 1,20 **** ! /* Implements a string hashing function. ! Copyright (C) 1995, 1997 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 Library General Public ! License along with the GNU C Library; see the file COPYING.LIB. If not, ! write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* @@ end of prolog @@ */ --- 1,20 ---- ! /* Description of GNU message catalog format: string hashing function. ! Copyright (C) 1995, 1997, 1998, 2000, 2001 Free Software Foundation, Inc. ! This program is free software; you can redistribute it and/or modify it ! under the terms of the GNU Library 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 ! Library General Public License for more details. You should have received a copy of the GNU Library General Public ! License along with this program; if not, write to the Free Software ! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, ! USA. */ /* @@ end of prolog @@ */ *************** *** 33,41 **** /* Defines the so called `hashpjw' function by P.J. Weinberger [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools, 1986, 1987 Bell Telephone Laboratories, Inc.] */ ! static unsigned long hash_string PARAMS ((const char *__str_param)); ! static inline unsigned long hash_string (str_param) const char *str_param; { --- 33,41 ---- /* Defines the so called `hashpjw' function by P.J. Weinberger [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools, 1986, 1987 Bell Telephone Laboratories, Inc.] */ ! static unsigned long int hash_string PARAMS ((const char *__str_param)); ! static inline unsigned long int hash_string (str_param) const char *str_param; { *************** hash_string (str_param) *** 47,54 **** while (*str != '\0') { hval <<= 4; ! hval += (unsigned long) *str++; ! g = hval & ((unsigned long) 0xf << (HASHWORDBITS - 4)); if (g != 0) { hval ^= g >> (HASHWORDBITS - 8); --- 47,54 ---- while (*str != '\0') { hval <<= 4; ! hval += (unsigned long int) *str++; ! g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4)); if (g != 0) { hval ^= g >> (HASHWORDBITS - 8); diff -Nrc3pad gcc-3.0.4/gcc/intl/intl-compat.c gcc-3.1/gcc/intl/intl-compat.c *** gcc-3.0.4/gcc/intl/intl-compat.c Sat Sep 4 15:08:49 1999 --- gcc-3.1/gcc/intl/intl-compat.c Fri Oct 12 17:24:30 2001 *************** *** 1,43 **** /* intl-compat.c - Stub functions to call gettext functions from GNU gettext Library. ! Copyright (C) 1995 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, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include #endif ! #include "libgettext.h" /* @@ end of prolog @@ */ #undef gettext #undef dgettext #undef dcgettext #undef textdomain #undef bindtextdomain char * ! bindtextdomain (domainname, dirname) const char *domainname; ! const char *dirname; { ! return bindtextdomain__ (domainname, dirname); } --- 1,99 ---- /* intl-compat.c - Stub functions to call gettext functions from GNU gettext Library. ! Copyright (C) 1995, 2000, 2001 Software Foundation, Inc. ! This program is free software; you can redistribute it and/or modify it ! under the terms of the GNU Library 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 ! Library General Public License for more details. ! You should have received a copy of the GNU Library General Public ! License along with this program; if not, write to the Free Software ! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, ! USA. */ #ifdef HAVE_CONFIG_H # include #endif ! #include "libgnuintl.h" ! #include "gettextP.h" /* @@ end of prolog @@ */ + /* This file redirects the gettext functions (without prefix or suffix) to + those defined in the included GNU gettext library (with "__" suffix). + It is compiled into libintl when the included GNU gettext library is + configured --with-included-gettext. + + This redirection works also in the case that the system C library or + the system libintl library contain gettext/textdomain/... functions. + If it didn't, we would need to add preprocessor level redirections to + libgnuintl.h of the following form: + + # define gettext gettext__ + # define dgettext dgettext__ + # define dcgettext dcgettext__ + # define ngettext ngettext__ + # define dngettext dngettext__ + # define dcngettext dcngettext__ + # define textdomain textdomain__ + # define bindtextdomain bindtextdomain__ + # define bind_textdomain_codeset bind_textdomain_codeset__ + + How does this redirection work? There are two cases. + A. When libintl.a is linked into an executable, it works because + functions defined in the executable always override functions in + the shared libraries. + B. When libintl.so is used, it works because + 1. those systems defining gettext/textdomain/... in the C library + (namely, Solaris 2.4 and newer, and GNU libc 2.0 and newer) are + ELF systems and define these symbols as weak, thus explicitly + letting other shared libraries override it. + 2. those systems defining gettext/textdomain/... in a standalone + libintl.so library (namely, Solaris 2.3 and newer) have this + shared library in /usr/lib, and the linker will search /usr/lib + *after* the directory where the GNU gettext library is installed. + + A third case, namely when libintl.a is linked into a shared library + whose name is not libintl.so, is not supported. In this case, on + Solaris, when -lintl precedes the linker option for the shared library + containing GNU gettext, the system's gettext would indeed override + the GNU gettext. Anyone doing this kind of stuff must be clever enough + to 1. compile libintl.a with -fPIC, 2. remove -lintl from his linker + command line. */ + #undef gettext #undef dgettext #undef dcgettext + #undef ngettext + #undef dngettext + #undef dcngettext #undef textdomain #undef bindtextdomain + #undef bind_textdomain_codeset char * ! gettext (msgid) ! const char *msgid; ! { ! return gettext__ (msgid); ! } ! ! ! char * ! dgettext (domainname, msgid) const char *domainname; ! const char *msgid; { ! return dgettext__ (domainname, msgid); } *************** dcgettext (domainname, msgid, category) *** 52,70 **** char * ! dgettext (domainname, msgid) const char *domainname; ! const char *msgid; { ! return dgettext__ (domainname, msgid); } char * ! gettext (msgid) ! const char *msgid; { ! return gettext__ (msgid); } --- 108,142 ---- char * ! ngettext (msgid1, msgid2, n) ! const char *msgid1; ! const char *msgid2; ! unsigned long int n; ! { ! return ngettext__ (msgid1, msgid2, n); ! } ! ! ! char * ! dngettext (domainname, msgid1, msgid2, n) const char *domainname; ! const char *msgid1; ! const char *msgid2; ! unsigned long int n; { ! return dngettext__ (domainname, msgid1, msgid2, n); } char * ! dcngettext (domainname, msgid1, msgid2, n, category) ! const char *domainname; ! const char *msgid1; ! const char *msgid2; ! unsigned long int n; ! int category; { ! return dcngettext__ (domainname, msgid1, msgid2, n, category); } *************** textdomain (domainname) *** 74,76 **** --- 146,166 ---- { return textdomain__ (domainname); } + + + char * + bindtextdomain (domainname, dirname) + const char *domainname; + const char *dirname; + { + return bindtextdomain__ (domainname, dirname); + } + + + char * + bind_textdomain_codeset (domainname, codeset) + const char *domainname; + const char *codeset; + { + return bind_textdomain_codeset__ (domainname, codeset); + } diff -Nrc3pad gcc-3.0.4/gcc/intl/l10nflist.c gcc-3.1/gcc/intl/l10nflist.c *** gcc-3.0.4/gcc/intl/l10nflist.c Tue Jun 6 07:23:42 2000 --- gcc-3.1/gcc/intl/l10nflist.c Sat Nov 3 21:51:46 2001 *************** *** 1,37 **** ! /* Handle list of needed message catalogs ! Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. Contributed by Ulrich Drepper , 1995. ! 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, ! Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ! #ifdef HAVE_CONFIG_H ! # include ! #endif #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif ! #if defined HAVE_STRING_H || defined _LIBC ! # include ! #else ! # include ! # ifndef memcpy ! # define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num) ! # endif #endif #if !HAVE_STRCHR && !defined _LIBC # ifndef strchr # define strchr index --- 1,33 ---- ! /* Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Ulrich Drepper , 1995. ! This program is free software; you can redistribute it and/or modify it ! under the terms of the GNU Library 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 ! Library General Public License for more details. ! You should have received a copy of the GNU Library General Public ! License along with this program; if not, write to the Free Software ! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, ! USA. */ + /* Tell glibc's to provide a prototype for stpcpy(). + This must come before because may include + , and once has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif ! #ifdef HAVE_CONFIG_H ! # include #endif + + #include #if !HAVE_STRCHR && !defined _LIBC # ifndef strchr # define strchr index *************** *** 43,52 **** #endif #include #include ! ! #if defined STDC_HEADERS || defined _LIBC ! # include ! #endif #include "loadinfo.h" --- 39,45 ---- #endif #include #include ! #include #include "loadinfo.h" *************** _nl_make_l10nflist (l10nfile_list, dirli *** 224,230 **** /* Construct file name. */ memcpy (abs_filename, dirlist, dirlist_len); ! __argz_stringify (abs_filename, dirlist_len, ':'); cp = abs_filename + (dirlist_len - 1); *cp++ = '/'; cp = stpcpy (cp, language); --- 217,223 ---- /* Construct file name. */ memcpy (abs_filename, dirlist, dirlist_len); ! __argz_stringify (abs_filename, dirlist_len, PATH_SEPARATOR); cp = abs_filename + (dirlist_len - 1); *cp++ = '/'; cp = stpcpy (cp, language); *************** _nl_make_l10nflist (l10nfile_list, dirli *** 349,358 **** /* Normalize codeset name. There is no standard for the codeset names. Normalization allows the user to use any of the common ! names. */ const char * _nl_normalize_codeset (codeset, name_len) ! const unsigned char *codeset; size_t name_len; { int len = 0; --- 342,352 ---- /* Normalize codeset name. There is no standard for the codeset names. Normalization allows the user to use any of the common ! names. The return value is dynamically allocated and has to be ! freed by the caller. */ const char * _nl_normalize_codeset (codeset, name_len) ! const char *codeset; size_t name_len; { int len = 0; *************** _nl_normalize_codeset (codeset, name_len *** 362,372 **** size_t cnt; for (cnt = 0; cnt < name_len; ++cnt) ! if (isalnum (codeset[cnt])) { ++len; ! if (isalpha (codeset[cnt])) only_digit = 0; } --- 356,366 ---- size_t cnt; for (cnt = 0; cnt < name_len; ++cnt) ! if (isalnum ((unsigned char)codeset[cnt])) { ++len; ! if (isalpha ((unsigned char)codeset[cnt])) only_digit = 0; } *************** _nl_normalize_codeset (codeset, name_len *** 380,388 **** wp = retval; for (cnt = 0; cnt < name_len; ++cnt) ! if (isalpha (codeset[cnt])) ! *wp++ = tolower (codeset[cnt]); ! else if (isdigit (codeset[cnt])) *wp++ = codeset[cnt]; *wp = '\0'; --- 374,382 ---- wp = retval; for (cnt = 0; cnt < name_len; ++cnt) ! if (isalpha ((unsigned char)codeset[cnt])) ! *wp++ = tolower ((unsigned char)codeset[cnt]); ! else if (isdigit ((unsigned char)codeset[cnt])) *wp++ = codeset[cnt]; *wp = '\0'; diff -Nrc3pad gcc-3.0.4/gcc/intl/libgettext.h gcc-3.1/gcc/intl/libgettext.h *** gcc-3.0.4/gcc/intl/libgettext.h Sat Sep 4 15:08:49 1999 --- gcc-3.1/gcc/intl/libgettext.h Fri Oct 12 17:24:30 2001 *************** *** 1,182 **** ! /* Message catalogs for internationalization. ! Copyright (C) 1995, 1996, 1997, 1998 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, ! Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ! ! /* Because on some systems (e.g. Solaris) we sometimes have to include ! the systems libintl.h as well as this file we have more complex ! include protection above. But the systems header might perhaps also ! define _LIBINTL_H and therefore we have to protect the definition here. */ ! ! #if !defined _LIBINTL_H || !defined _LIBGETTEXT_H ! #ifndef _LIBINTL_H ! # define _LIBINTL_H 1 ! #endif ! #define _LIBGETTEXT_H 1 ! ! /* We define an additional symbol to signal that we use the GNU ! implementation of gettext. */ ! #define __USE_GNU_GETTEXT 1 ! ! #include ! ! #if HAVE_LOCALE_H ! # include ! #endif ! ! ! #ifdef __cplusplus ! extern "C" { ! #endif ! ! /* @@ end of prolog @@ */ ! ! #ifndef PARAMS ! # if __STDC__ || defined __cplusplus ! # define PARAMS(args) args ! # else ! # define PARAMS(args) () ! # endif ! #endif ! ! #ifndef NULL ! # if !defined __cplusplus || defined __GNUC__ ! # define NULL ((void *) 0) ! # else ! # define NULL (0) ! # endif ! #endif ! ! #if !HAVE_LC_MESSAGES ! /* This value determines the behaviour of the gettext() and dgettext() ! function. But some system does not have this defined. Define it ! to a default value. */ ! # define LC_MESSAGES (-1) ! #endif ! ! ! /* Declarations for gettext-using-catgets interface. Derived from ! Jim Meyering's libintl.h. */ ! struct _msg_ent ! { ! const char *_msg; ! int _msg_number; ! }; ! ! ! #if HAVE_CATGETS ! /* These two variables are defined in the automatically by po-to-tbl.sed ! generated file `cat-id-tbl.c'. */ ! extern const struct _msg_ent _msg_tbl[]; ! extern int _msg_tbl_length; ! #endif ! ! ! /* For automatical extraction of messages sometimes no real ! translation is needed. Instead the string itself is the result. */ ! #define gettext_noop(Str) (Str) ! ! /* Look up MSGID in the current default message catalog for the current ! LC_MESSAGES locale. If not found, returns MSGID itself (the default ! text). */ ! extern char *gettext PARAMS ((const char *__msgid)); ! extern char *gettext__ PARAMS ((const char *__msgid)); ! ! /* Look up MSGID in the DOMAINNAME message catalog for the current ! LC_MESSAGES locale. */ ! extern char *dgettext PARAMS ((const char *__domainname, const char *__msgid)); ! extern char *dgettext__ PARAMS ((const char *__domainname, ! const char *__msgid)); ! ! /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY ! locale. */ ! extern char *dcgettext PARAMS ((const char *__domainname, const char *__msgid, ! int __category)); ! extern char *dcgettext__ PARAMS ((const char *__domainname, ! const char *__msgid, int __category)); ! ! /* Set the current default message catalog to DOMAINNAME. ! If DOMAINNAME is null, return the current default. ! If DOMAINNAME is "", reset to the default of "messages". */ ! extern char *textdomain PARAMS ((const char *__domainname)); ! extern char *textdomain__ PARAMS ((const char *__domainname)); ! /* Specify that the DOMAINNAME message catalog will be found ! in DIRNAME rather than in the system locale data base. */ ! extern char *bindtextdomain PARAMS ((const char *__domainname, ! const char *__dirname)); ! extern char *bindtextdomain__ PARAMS ((const char *__domainname, ! const char *__dirname)); #if ENABLE_NLS ! /* Solaris 2.3 has the gettext function but dcgettext is missing. ! So we omit this optimization for Solaris 2.3. BTW, Solaris 2.4 ! has dcgettext. */ ! # if !HAVE_CATGETS && (!HAVE_GETTEXT || HAVE_DCGETTEXT) ! ! # define gettext(Msgid) \ ! dgettext (NULL, Msgid) ! ! # define dgettext(Domainname, Msgid) \ ! dcgettext (Domainname, Msgid, LC_MESSAGES) ! ! # if defined __GNUC__ && __GNUC__ == 2 && __GNUC_MINOR__ >= 7 ! /* This global variable is defined in loadmsgcat.c. We need a sign, ! whether a new catalog was loaded, which can be associated with all ! translations. */ ! extern int _nl_msg_cat_cntr; ! ! # define dcgettext(Domainname, Msgid, Category) \ ! (__extension__ \ ! ({ \ ! char *__result; \ ! if (__builtin_constant_p (Msgid)) \ ! { \ ! static char *__translation__; \ ! static int __catalog_counter__; \ ! if (! __translation__ || __catalog_counter__ != _nl_msg_cat_cntr) \ ! { \ ! __translation__ = \ ! dcgettext__ (Domainname, Msgid, Category); \ ! __catalog_counter__ = _nl_msg_cat_cntr; \ ! } \ ! __result = __translation__; \ ! } \ ! else \ ! __result = dcgettext__ (Domainname, Msgid, Category); \ ! __result; \ ! })) ! # endif ! # endif #else # define gettext(Msgid) (Msgid) # define dgettext(Domainname, Msgid) (Msgid) # define dcgettext(Domainname, Msgid, Category) (Msgid) ! # define textdomain(Domainname) ((char *) Domainname) ! # define bindtextdomain(Domainname, Dirname) ((char *) Dirname) #endif ! /* @@ begin of epilog @@ */ ! ! #ifdef __cplusplus ! } ! #endif ! #endif --- 1,49 ---- ! /* Convenience header for conditional use of GNU . ! Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc. ! This program is free software; you can redistribute it and/or modify it ! under the terms of the GNU Library 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 ! Library General Public License for more details. ! You should have received a copy of the GNU Library General Public ! License along with this program; if not, write to the Free Software ! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, ! USA. */ ! #ifndef _LIBGETTEXT_H ! #define _LIBGETTEXT_H 1 + /* NLS can be disabled through the configure --disable-nls option. */ #if ENABLE_NLS ! /* Get declarations of GNU message catalog functions. */ ! # include #else # define gettext(Msgid) (Msgid) # define dgettext(Domainname, Msgid) (Msgid) # define dcgettext(Domainname, Msgid, Category) (Msgid) ! # define ngettext(Msgid1, Msgid2, N) \ ! ((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2)) ! # define dngettext(Domainname, Msgid1, Msgid2, N) \ ! ((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2)) ! # define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ ! ((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2)) ! # define textdomain(Domainname) ((char *) (Domainname)) ! # define bindtextdomain(Domainname, Dirname) ((char *) (Dirname)) ! # define bind_textdomain_codeset(Domainname, Codeset) ((char *) (Codeset)) #endif ! /* For automatical extraction of messages sometimes no real ! translation is needed. Instead the string itself is the result. */ ! #define gettext_noop(Str) (Str) ! #endif /* _LIBGETTEXT_H */ diff -Nrc3pad gcc-3.0.4/gcc/intl/libgnuintl.h gcc-3.1/gcc/intl/libgnuintl.h *** gcc-3.0.4/gcc/intl/libgnuintl.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/intl/libgnuintl.h Fri Oct 12 17:24:30 2001 *************** *** 0 **** --- 1,128 ---- + /* Message catalogs for internationalization. + Copyright (C) 1995-1997, 2000, 2001 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + + #ifndef _LIBINTL_H + #define _LIBINTL_H 1 + + #include + + /* The LC_MESSAGES locale category is the category used by the functions + gettext() and dgettext(). It is specified in POSIX, but not in ANSI C. + On systems that don't define it, use an arbitrary value instead. + On Solaris, defines __LOCALE_H then includes (i.e. + this file!) and then only defines LC_MESSAGES. To avoid a redefinition + warning, don't define LC_MESSAGES in this case. */ + #if !defined LC_MESSAGES && !defined __LOCALE_H + # define LC_MESSAGES 1729 + #endif + + /* We define an additional symbol to signal that we use the GNU + implementation of gettext. */ + #define __USE_GNU_GETTEXT 1 + + /* Resolve a platform specific conflict on DJGPP. GNU gettext takes + precedence over _conio_gettext. */ + #ifdef __DJGPP__ + # undef gettext + # define gettext gettext + #endif + + #ifndef PARAMS + # if __STDC__ || defined __cplusplus + # define PARAMS(args) args + # else + # define PARAMS(args) () + # endif + #endif + + #ifdef __cplusplus + extern "C" { + #endif + + /* Look up MSGID in the current default message catalog for the current + LC_MESSAGES locale. If not found, returns MSGID itself (the default + text). */ + extern char *gettext PARAMS ((const char *__msgid)); + + /* Look up MSGID in the DOMAINNAME message catalog for the current + LC_MESSAGES locale. */ + extern char *dgettext PARAMS ((const char *__domainname, const char *__msgid)); + + /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY + locale. */ + extern char *dcgettext PARAMS ((const char *__domainname, const char *__msgid, + int __category)); + + + /* Similar to `gettext' but select the plural form corresponding to the + number N. */ + extern char *ngettext PARAMS ((const char *__msgid1, const char *__msgid2, + unsigned long int __n)); + + /* Similar to `dgettext' but select the plural form corresponding to the + number N. */ + extern char *dngettext PARAMS ((const char *__domainname, const char *__msgid1, + const char *__msgid2, unsigned long int __n)); + + /* Similar to `dcgettext' but select the plural form corresponding to the + number N. */ + extern char *dcngettext PARAMS ((const char *__domainname, const char *__msgid1, + const char *__msgid2, unsigned long int __n, + int __category)); + + + /* Set the current default message catalog to DOMAINNAME. + If DOMAINNAME is null, return the current default. + If DOMAINNAME is "", reset to the default of "messages". */ + extern char *textdomain PARAMS ((const char *__domainname)); + + /* Specify that the DOMAINNAME message catalog will be found + in DIRNAME rather than in the system locale data base. */ + extern char *bindtextdomain PARAMS ((const char *__domainname, + const char *__dirname)); + + /* Specify the character encoding in which the messages from the + DOMAINNAME message catalog will be returned. */ + extern char *bind_textdomain_codeset PARAMS ((const char *__domainname, + const char *__codeset)); + + + /* Optimized version of the functions above. */ + #if defined __OPTIMIZED + /* These are macros, but could also be inline functions. */ + + # define gettext(msgid) \ + dgettext (NULL, msgid) + + # define dgettext(domainname, msgid) \ + dcgettext (domainname, msgid, LC_MESSAGES) + + # define ngettext(msgid1, msgid2, n) \ + dngettext (NULL, msgid1, msgid2, n) + + # define dngettext(domainname, msgid1, msgid2, n) \ + dcngettext (domainname, msgid1, msgid2, n, LC_MESSAGES) + + #endif /* Optimizing. */ + + + #ifdef __cplusplus + } + #endif + + #endif /* libintl.h */ diff -Nrc3pad gcc-3.0.4/gcc/intl/linux-msg.sed gcc-3.1/gcc/intl/linux-msg.sed *** gcc-3.0.4/gcc/intl/linux-msg.sed Sat Sep 4 15:08:49 1999 --- gcc-3.1/gcc/intl/linux-msg.sed Thu Jan 1 00:00:00 1970 *************** *** 1,100 **** - # po2msg.sed - Convert Uniforum style .po file to Linux style .msg file - # Copyright (C) 1995 Free Software Foundation, Inc. - # Ulrich Drepper , 1995. - # - # 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, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - # - # - # The first directive in the .msg should be the definition of the - # message set number. We use always set number 1. - # - 1 { - i\ - $set 1 # Automatically created by po2msg.sed - h - s/.*/0/ - x - } - # - # Mitch's old catalog format does not allow comments. - # - # We copy the original message as a comment into the .msg file. - # - /^msgid/ { - s/msgid[ ]*"// - # - # This does not work now with the new format. - # /"$/! { - # s/\\$// - # s/$/ ... (more lines following)"/ - # } - x - # The following nice solution is by - # Bruno - td - # Increment a decimal number in pattern space. - # First hide trailing `9' digits. - :d - s/9\(_*\)$/_\1/ - td - # Assure at least one digit is available. - s/^\(_*\)$/0\1/ - # Increment the last digit. - s/8\(_*\)$/9\1/ - s/7\(_*\)$/8\1/ - s/6\(_*\)$/7\1/ - s/5\(_*\)$/6\1/ - s/4\(_*\)$/5\1/ - s/3\(_*\)$/4\1/ - s/2\(_*\)$/3\1/ - s/1\(_*\)$/2\1/ - s/0\(_*\)$/1\1/ - # Convert the hidden `9' digits to `0's. - s/_/0/g - x - G - s/\(.*\)"\n\([0-9]*\)/$ #\2 Original Message:(\1)/p - } - # - # The .msg file contains, other then the .po file, only the translations - # but each given a unique ID. Starting from 1 and incrementing by 1 for - # each message we assign them to the messages. - # It is important that the .po file used to generate the cat-id-tbl.c file - # (with po-to-tbl) is the same as the one used here. (At least the order - # of declarations must not be changed.) - # - /^msgstr/ { - s/msgstr[ ]*"\(.*\)"/# \1/ - # Clear substitution flag. - tb - # Append the next line. - :b - N - # Look whether second part is continuation line. - s/\(.*\n\)"\(.*\)"/\1\2/ - # Yes, then branch. - ta - P - D - # Note that D includes a jump to the start!! - # We found a continuation line. But before printing insert '\'. - :a - s/\(.*\)\(\n.*\)/\1\\\2/ - P - # We cannot use D here. - s/.*\n\(.*\)/\1/ - tb - } - d --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/intl/loadinfo.h gcc-3.1/gcc/intl/loadinfo.h *** gcc-3.0.4/gcc/intl/loadinfo.h Sat Sep 4 15:08:49 1999 --- gcc-3.1/gcc/intl/loadinfo.h Fri Oct 12 17:24:30 2001 *************** *** 1,20 **** ! /* Copyright (C) 1996, 1997 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1996. ! 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, ! Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef PARAMS # if __STDC__ --- 1,24 ---- ! /* Copyright (C) 1996-1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1996. ! This program is free software; you can redistribute it and/or modify it ! under the terms of the GNU Library 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 ! Library General Public License for more details. ! You should have received a copy of the GNU Library General Public ! License along with this program; if not, write to the Free Software ! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, ! USA. */ ! ! #ifndef _LOADINFO_H ! #define _LOADINFO_H 1 #ifndef PARAMS # if __STDC__ *************** *** 24,29 **** --- 28,52 ---- # endif #endif + #ifndef internal_function + # define internal_function + #endif + + /* Tell the compiler when a conditional or integer expression is + almost always true or almost always false. */ + #ifndef HAVE_BUILTIN_EXPECT + # define __builtin_expect(expr, val) (expr) + #endif + + /* Separator in PATH like lists of pathnames. */ + #if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__ + /* Win32, OS/2, DOS */ + # define PATH_SEPARATOR ';' + #else + /* Unix */ + # define PATH_SEPARATOR ':' + #endif + /* Encoding of locale name parts. */ #define CEN_REVISION 1 #define CEN_SPONSOR 2 *************** struct loaded_l10nfile *** 50,56 **** }; ! extern const char *_nl_normalize_codeset PARAMS ((const unsigned char *codeset, size_t name_len)); extern struct loaded_l10nfile * --- 73,83 ---- }; ! /* Normalize codeset name. There is no standard for the codeset ! names. Normalization allows the user to use any of the common ! names. The return value is dynamically allocated and has to be ! freed by the caller. */ ! extern const char *_nl_normalize_codeset PARAMS ((const char *codeset, size_t name_len)); extern struct loaded_l10nfile * *************** _nl_make_l10nflist PARAMS ((struct loade *** 66,71 **** --- 93,100 ---- extern const char *_nl_expand_alias PARAMS ((const char *name)); + /* normalized_codeset is dynamically allocated and has to be freed by + the caller. */ extern int _nl_explode_name PARAMS ((char *name, const char **language, const char **modifier, const char **territory, *************** extern int _nl_explode_name PARAMS ((cha *** 74,76 **** --- 103,109 ---- const char **special, const char **sponsor, const char **revision)); + + extern char *_nl_find_language PARAMS ((const char *name)); + + #endif /* loadinfo.h */ diff -Nrc3pad gcc-3.0.4/gcc/intl/loadmsgcat.c gcc-3.1/gcc/intl/loadmsgcat.c *** gcc-3.0.4/gcc/intl/loadmsgcat.c Tue Jun 6 07:23:42 2000 --- gcc-3.1/gcc/intl/loadmsgcat.c Sat Nov 3 21:51:46 2001 *************** *** 1,43 **** /* Load needed message catalogs. ! Copyright (C) 1995, 1996, 1997, 1998 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, ! Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include ! #if defined STDC_HEADERS || defined _LIBC ! # include #endif #if defined HAVE_UNISTD_H || defined _LIBC # include #endif ! #if defined HAVE_MMAP_FILE || defined _LIBC # include #endif #include "gettext.h" #include "gettextP.h" /* @@ end of prolog @@ */ #ifdef _LIBC --- 1,92 ---- /* Load needed message catalogs. ! Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. ! This program is free software; you can redistribute it and/or modify it ! under the terms of the GNU Library 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 ! Library General Public License for more details. ! You should have received a copy of the GNU Library General Public ! License along with this program; if not, write to the Free Software ! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, ! USA. */ ! ! /* Tell glibc's to provide a prototype for mempcpy(). ! This must come before because may include ! , and once has been included, it's too late. */ ! #ifndef _GNU_SOURCE ! # define _GNU_SOURCE 1 ! #endif #ifdef HAVE_CONFIG_H # include #endif + #include + #include #include #include #include ! #ifdef __GNUC__ ! # define alloca __builtin_alloca ! # define HAVE_ALLOCA 1 ! #else ! # if defined HAVE_ALLOCA_H || defined _LIBC ! # include ! # else ! # ifdef _AIX ! #pragma alloca ! # else ! # ifndef alloca ! char *alloca (); ! # endif ! # endif ! # endif #endif + #include + #include + #if defined HAVE_UNISTD_H || defined _LIBC # include #endif ! #ifdef _LIBC ! # include ! # include ! #endif ! ! #if (defined HAVE_MMAP_FILE && !defined DISALLOW_MMAP) \ ! || (defined _LIBC && defined _POSIX_MAPPED_FILES) # include + # undef HAVE_MMAP + # define HAVE_MMAP 1 + #else + # undef HAVE_MMAP #endif #include "gettext.h" #include "gettextP.h" + #ifdef _LIBC + # include "../locale/localeinfo.h" + #endif + + /* GCC LOCAL: These macros are used below. */ + /* The extra casts work around common compiler bugs. */ + #define INTTYPE_SIGNED(t) (! ((t) 0 < (t) -1)) + /* The outer cast is needed to work around a bug in Cray C 5.0.3.0. + It is necessary at least when t == time_t. */ + #define INTTYPE_MINIMUM(t) ((t) (INTTYPE_SIGNED (t) \ + ? ~ (t) 0 << (sizeof(t) * CHAR_BIT - 1) : (t) 0)) + #define INTTYPE_MAXIMUM(t) ((t) (~ (t) 0 - INTTYPE_MINIMUM (t))) + /* @@ end of prolog @@ */ #ifdef _LIBC *************** *** 51,82 **** # define munmap __munmap #endif /* We need a sign, whether a new catalog was loaded, which can be associated with all translations. This is important if the translations are cached by one of GCC's features. */ ! int _nl_msg_cat_cntr = 0; /* Load the message catalogs specified by FILENAME. If it is no valid message catalog do nothing. */ void internal_function ! _nl_load_domain (domain_file) struct loaded_l10nfile *domain_file; { int fd; size_t size; struct stat st; struct mo_file_header *data = (struct mo_file_header *) -1; - #if (defined HAVE_MMAP_FILE && !defined DISALLOW_MMAP) \ - || defined _LIBC int use_mmap = 0; - #endif struct loaded_domain *domain; domain_file->decided = 1; domain_file->data = NULL; /* If the record does not represent a valid locale the FILENAME might be NULL. This can happen when according to the given specification the locale file name is different for XPG and CEN --- 100,374 ---- # define munmap __munmap #endif + /* Names for the libintl functions are a problem. They must not clash + with existing names and they should follow ANSI C. But this source + code is also used in GNU C Library where the names have a __ + prefix. So we have to make a difference here. */ + #ifdef _LIBC + # define PLURAL_PARSE __gettextparse + #else + # define PLURAL_PARSE gettextparse__ + #endif + + /* For those losing systems which don't have `alloca' we have to add + some additional code emulating it. */ + #ifdef HAVE_ALLOCA + # define freea(p) /* nothing */ + #else + # define alloca(n) malloc (n) + # define freea(p) free (p) + #endif + + /* For systems that distinguish between text and binary I/O. + O_BINARY is usually declared in . */ + #if !defined O_BINARY && defined _O_BINARY + /* For MSC-compatible compilers. */ + # define O_BINARY _O_BINARY + # define O_TEXT _O_TEXT + #endif + #ifdef __BEOS__ + /* BeOS 5 has O_BINARY and O_TEXT, but they have no effect. */ + # undef O_BINARY + # undef O_TEXT + #endif + /* On reasonable systems, binary I/O is the default. */ + #ifndef O_BINARY + # define O_BINARY 0 + #endif + /* We need a sign, whether a new catalog was loaded, which can be associated with all translations. This is important if the translations are cached by one of GCC's features. */ ! int _nl_msg_cat_cntr; ! ! #if (defined __GNUC__ && !defined __APPLE_CC__) \ ! || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L) ! ! /* These structs are the constant expression for the germanic plural ! form determination. It represents the expression "n != 1". ! GCC LOCAL: Use __extension__ to suppress -Wtraditional warnings. */ ! __extension__ static const struct expression plvar = ! { ! .nargs = 0, ! .operation = var, ! }; ! __extension__ static const struct expression plone = ! { ! .nargs = 0, ! .operation = num, ! .val = ! { ! .num = 1 ! } ! }; ! __extension__ static struct expression germanic_plural = ! { ! .nargs = 2, ! .operation = not_equal, ! .val = ! { ! .args = ! { ! [0] = (struct expression *) &plvar, ! [1] = (struct expression *) &plone ! } ! } ! }; ! ! # define INIT_GERMANIC_PLURAL() ! ! #else ! ! /* For compilers without support for ISO C 99 struct/union initializers: ! Initialization at run-time. */ ! ! static struct expression plvar; ! static struct expression plone; ! static struct expression germanic_plural; ! ! static void ! init_germanic_plural () ! { ! if (plone.val.num == 0) ! { ! plvar.nargs = 0; ! plvar.operation = var; ! ! plone.nargs = 0; ! plone.operation = num; ! plone.val.num = 1; ! ! germanic_plural.nargs = 2; ! germanic_plural.operation = not_equal; ! germanic_plural.val.args[0] = &plvar; ! germanic_plural.val.args[1] = &plone; ! } ! } ! ! # define INIT_GERMANIC_PLURAL() init_germanic_plural () ! ! #endif ! ! ! /* Initialize the codeset dependent parts of an opened message catalog. ! Return the header entry. */ ! const char * ! internal_function ! _nl_init_domain_conv (domain_file, domain, domainbinding) ! struct loaded_l10nfile *domain_file; ! struct loaded_domain *domain; ! struct binding *domainbinding; ! { ! /* Find out about the character set the file is encoded with. ! This can be found (in textual form) in the entry "". If this ! entry does not exist or if this does not contain the `charset=' ! information, we will assume the charset matches the one the ! current locale and we don't have to perform any conversion. */ ! char *nullentry; ! size_t nullentrylen; ! ! /* Preinitialize fields, to avoid recursion during _nl_find_msg. */ ! domain->codeset_cntr = ! (domainbinding != NULL ? domainbinding->codeset_cntr : 0); ! #ifdef _LIBC ! domain->conv = (__gconv_t) -1; ! #else ! # if HAVE_ICONV ! domain->conv = (iconv_t) -1; ! # endif ! #endif ! domain->conv_tab = NULL; ! ! /* Get the header entry. */ ! nullentry = _nl_find_msg (domain_file, domainbinding, "", &nullentrylen); ! ! if (nullentry != NULL) ! { ! #if defined _LIBC || HAVE_ICONV ! const char *charsetstr; ! ! charsetstr = strstr (nullentry, "charset="); ! if (charsetstr != NULL) ! { ! size_t len; ! char *charset; ! const char *outcharset; ! ! charsetstr += strlen ("charset="); ! len = strcspn (charsetstr, " \t\n"); ! ! charset = (char *) alloca (len + 1); ! # if defined _LIBC || HAVE_MEMPCPY ! *((char *) mempcpy (charset, charsetstr, len)) = '\0'; ! # else ! memcpy (charset, charsetstr, len); ! charset[len] = '\0'; ! # endif + /* The output charset should normally be determined by the + locale. But sometimes the locale is not used or not correctly + set up, so we provide a possibility for the user to override + this. Moreover, the value specified through + bind_textdomain_codeset overrides both. */ + if (domainbinding != NULL && domainbinding->codeset != NULL) + outcharset = domainbinding->codeset; + else + { + outcharset = getenv ("OUTPUT_CHARSET"); + if (outcharset == NULL || outcharset[0] == '\0') + { + # ifdef _LIBC + outcharset = (*_nl_current[LC_CTYPE])->values[_NL_ITEM_INDEX (CODESET)].string; + # else + # if HAVE_ICONV + outcharset = locale_charset (); + # endif + # endif + } + } + + # ifdef _LIBC + /* We always want to use transliteration. */ + outcharset = norm_add_slashes (outcharset, "TRANSLIT"); + charset = norm_add_slashes (charset, NULL); + if (__gconv_open (outcharset, charset, &domain->conv, + GCONV_AVOID_NOCONV) + != __GCONV_OK) + domain->conv = (__gconv_t) -1; + # else + # if HAVE_ICONV + /* When using GNU libiconv, we want to use transliteration. */ + # if _LIBICONV_VERSION >= 0x0105 + len = strlen (outcharset); + { + char *tmp = (char *) alloca (len + 10 + 1); + memcpy (tmp, outcharset, len); + memcpy (tmp + len, "//TRANSLIT", 10 + 1); + outcharset = tmp; + } + # endif + domain->conv = iconv_open (outcharset, charset); + # if _LIBICONV_VERSION >= 0x0105 + freea (outcharset); + # endif + # endif + # endif + + freea (charset); + } + #endif /* _LIBC || HAVE_ICONV */ + } + + return nullentry; + } + + /* Frees the codeset dependent parts of an opened message catalog. */ + void + internal_function + _nl_free_domain_conv (domain) + struct loaded_domain *domain; + { + if (domain->conv_tab != NULL && domain->conv_tab != (char **) -1) + free (domain->conv_tab); + + #ifdef _LIBC + if (domain->conv != (__gconv_t) -1) + __gconv_close (domain->conv); + #else + # if HAVE_ICONV + if (domain->conv != (iconv_t) -1) + iconv_close (domain->conv); + # endif + #endif + } /* Load the message catalogs specified by FILENAME. If it is no valid message catalog do nothing. */ void internal_function ! _nl_load_domain (domain_file, domainbinding) struct loaded_l10nfile *domain_file; + struct binding *domainbinding; { int fd; size_t size; + #ifdef _LIBC + struct stat64 st; + #else struct stat st; + #endif struct mo_file_header *data = (struct mo_file_header *) -1; int use_mmap = 0; struct loaded_domain *domain; + const char *nullentry; domain_file->decided = 1; domain_file->data = NULL; + /* Note that it would be useless to store domainbinding in domain_file + because domainbinding might be == NULL now but != NULL later (after + a call to bind_textdomain_codeset). */ + /* If the record does not represent a valid locale the FILENAME might be NULL. This can happen when according to the given specification the locale file name is different for XPG and CEN *************** _nl_load_domain (domain_file) *** 85,112 **** return; /* Try to open the addressed file. */ ! fd = open (domain_file->filename, O_RDONLY); if (fd == -1) return; /* We must know about the size of the file. */ ! if (fstat (fd, &st) != 0 ! || (size = (size_t) st.st_size) != (size_t) st.st_size ! || size < sizeof (struct mo_file_header)) { /* Something went wrong. */ close (fd); return; } ! #if (defined HAVE_MMAP_FILE && !defined DISALLOW_MMAP) \ ! || defined _LIBC /* Now we are ready to load the file. If mmap() is available we try this first. If not available or it failed we try to load it. */ data = (struct mo_file_header *) mmap (NULL, size, PROT_READ, MAP_PRIVATE, fd, 0); ! if (data != (struct mo_file_header *) -1) { /* mmap() call was successful. */ close (fd); --- 377,412 ---- return; /* Try to open the addressed file. */ ! fd = open (domain_file->filename, O_RDONLY | O_BINARY); if (fd == -1) return; /* We must know about the size of the file. */ ! /* GCC_LOCAL: Use INTTYPE_MAXIMUM for overflow check, cast sizeof to ! off_t, move set of size below if. */ ! if ( ! #ifdef _LIBC ! __builtin_expect (fstat64 (fd, &st) != 0, 0) ! #else ! __builtin_expect (fstat (fd, &st) != 0, 0) ! #endif ! || __builtin_expect (st.st_size > INTTYPE_MAXIMUM (ssize_t), 0) ! || __builtin_expect (st.st_size < (off_t) sizeof (struct mo_file_header), ! 0)) { /* Something went wrong. */ close (fd); return; } + size = (size_t) st.st_size; ! #ifdef HAVE_MMAP /* Now we are ready to load the file. If mmap() is available we try this first. If not available or it failed we try to load it. */ data = (struct mo_file_header *) mmap (NULL, size, PROT_READ, MAP_PRIVATE, fd, 0); ! if (__builtin_expect (data != (struct mo_file_header *) -1, 1)) { /* mmap() call was successful. */ close (fd); *************** _nl_load_domain (domain_file) *** 130,141 **** do { long int nb = (long int) read (fd, read_ptr, to_read); ! if (nb == -1) { close (fd); return; } - read_ptr += nb; to_read -= nb; } --- 430,444 ---- do { long int nb = (long int) read (fd, read_ptr, to_read); ! if (nb <= 0) { + #ifdef EINTR + if (nb == -1 && errno == EINTR) + continue; + #endif close (fd); return; } read_ptr += nb; to_read -= nb; } *************** _nl_load_domain (domain_file) *** 146,156 **** /* Using the magic number we can test whether it really is a message catalog file. */ ! if (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED) { /* The magic number is wrong: not a message catalog file. */ ! #if (defined HAVE_MMAP_FILE && !defined DISALLOW_MMAP) \ ! || defined _LIBC if (use_mmap) munmap ((caddr_t) data, size); else --- 449,459 ---- /* Using the magic number we can test whether it really is a message catalog file. */ ! if (__builtin_expect (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED, ! 0)) { /* The magic number is wrong: not a message catalog file. */ ! #ifdef HAVE_MMAP if (use_mmap) munmap ((caddr_t) data, size); else *************** _nl_load_domain (domain_file) *** 159,175 **** return; } ! domain_file->data ! = (struct loaded_domain *) malloc (sizeof (struct loaded_domain)); ! if (domain_file->data == NULL) return; - domain = (struct loaded_domain *) domain_file->data; domain->data = (char *) data; - #if (defined HAVE_MMAP_FILE && !defined DISALLOW_MMAP) \ - || defined _LIBC domain->use_mmap = use_mmap; - #endif domain->mmap_size = size; domain->must_swap = data->magic != _MAGIC; --- 462,474 ---- return; } ! domain = (struct loaded_domain *) malloc (sizeof (struct loaded_domain)); ! if (domain == NULL) return; + domain_file->data = domain; domain->data = (char *) data; domain->use_mmap = use_mmap; domain->mmap_size = size; domain->must_swap = data->magic != _MAGIC; *************** _nl_load_domain (domain_file) *** 187,195 **** ((char *) data + W (domain->must_swap, data->hash_tab_offset)); break; default: ! /* This is an illegal revision. */ ! #if (defined HAVE_MMAP_FILE && !defined DISALLOW_MMAP) \ ! || defined _LIBC if (use_mmap) munmap ((caddr_t) data, size); else --- 486,493 ---- ((char *) data + W (domain->must_swap, data->hash_tab_offset)); break; default: ! /* This is an invalid revision. */ ! #ifdef HAVE_MMAP if (use_mmap) munmap ((caddr_t) data, size); else *************** _nl_load_domain (domain_file) *** 200,208 **** return; } ! /* Show that one domain is changed. This might make some cached ! translations invalid. */ ! ++_nl_msg_cat_cntr; } --- 498,559 ---- return; } ! /* Now initialize the character set converter from the character set ! the file is encoded with (found in the header entry) to the domain's ! specified character set or the locale's character set. */ ! nullentry = _nl_init_domain_conv (domain_file, domain, domainbinding); ! ! /* Also look for a plural specification. */ ! if (nullentry != NULL) ! { ! const char *plural; ! const char *nplurals; ! ! plural = strstr (nullentry, "plural="); ! nplurals = strstr (nullentry, "nplurals="); ! if (plural == NULL || nplurals == NULL) ! goto no_plural; ! else ! { ! /* First get the number. */ ! char *endp; ! unsigned long int n; ! struct parse_args args; ! ! nplurals += 9; ! while (*nplurals != '\0' && isspace ((unsigned char)*nplurals)) ! ++nplurals; ! #if defined HAVE_STRTOUL || defined _LIBC ! n = strtoul (nplurals, &endp, 10); ! #else ! for (endp = nplurals, n = 0; *endp >= '0' && *endp <= '9'; endp++) ! n = n * 10 + (*endp - '0'); ! #endif ! domain->nplurals = n; ! if (nplurals == endp) ! goto no_plural; ! ! /* Due to the restrictions bison imposes onto the interface of the ! scanner function we have to put the input string and the result ! passed up from the parser into the same structure which address ! is passed down to the parser. */ ! plural += 7; ! args.cp = plural; ! if (PLURAL_PARSE (&args) != 0) ! goto no_plural; ! domain->plural = args.res; ! } ! } ! else ! { ! /* By default we are using the Germanic form: singular form only ! for `one', the plural form otherwise. Yes, this is also what ! English is using since English is a Germanic language. */ ! no_plural: ! INIT_GERMANIC_PLURAL (); ! domain->plural = &germanic_plural; ! domain->nplurals = 2; ! } } *************** internal_function *** 212,220 **** --- 563,578 ---- _nl_unload_domain (domain) struct loaded_domain *domain; { + if (domain->plural != &germanic_plural) + __gettext_free_exp (domain->plural); + + _nl_free_domain_conv (domain); + + # ifdef _POSIX_MAPPED_FILES if (domain->use_mmap) munmap ((caddr_t) domain->data, domain->mmap_size); else + # endif /* _POSIX_MAPPED_FILES */ free ((void *) domain->data); free (domain); diff -Nrc3pad gcc-3.0.4/gcc/intl/localcharset.c gcc-3.1/gcc/intl/localcharset.c *** gcc-3.0.4/gcc/intl/localcharset.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/intl/localcharset.c Sat Nov 3 21:51:46 2001 *************** *** 0 **** --- 1,274 ---- + /* Determine a canonical name for the current locale's character encoding. + + Copyright (C) 2000-2001 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + + /* Written by Bruno Haible . */ + + #ifdef HAVE_CONFIG_H + # include + #endif + + #if HAVE_STDDEF_H + # include + #endif + + #include + #if HAVE_STRING_H + # include + #else + # include + #endif + #if HAVE_STDLIB_H + # include + #endif + + #if defined _WIN32 || defined __WIN32__ + # undef WIN32 /* avoid warning on mingw32 */ + # define WIN32 + #endif + + #ifndef WIN32 + # if HAVE_LANGINFO_CODESET + # include + # else + # if HAVE_SETLOCALE + # include + # endif + # endif + #else /* WIN32 */ + # define WIN32_LEAN_AND_MEAN + # include + #endif + + #include "gettextP.h" + + #ifndef DIRECTORY_SEPARATOR + # define DIRECTORY_SEPARATOR '/' + #endif + + #ifndef ISSLASH + # define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR) + #endif + + /* The following static variable is declared 'volatile' to avoid a + possible multithread problem in the function get_charset_aliases. If we + are running in a threaded environment, and if two threads initialize + 'charset_aliases' simultaneously, both will produce the same value, + and everything will be ok if the two assignments to 'charset_aliases' + are atomic. But I don't know what will happen if the two assignments mix. */ + #if __STDC__ != 1 + # define volatile /* empty */ + #endif + /* Pointer to the contents of the charset.alias file, if it has already been + read, else NULL. Its format is: + ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */ + static const char * volatile charset_aliases; + + /* GCC LOCAL: Static function prototypes. */ + static const char *get_charset_aliases PARAMS ((void)); + + /* Return a pointer to the contents of the charset.alias file. */ + static const char * + get_charset_aliases () + { + const char *cp; + + cp = charset_aliases; + if (cp == NULL) + { + #ifndef WIN32 + FILE *fp; + const char *dir = LIBDIR; + const char *base = "charset.alias"; + char *file_name; + + /* Concatenate dir and base into freshly allocated file_name. */ + { + size_t dir_len = strlen (dir); + size_t base_len = strlen (base); + int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1])); + file_name = (char *) malloc (dir_len + add_slash + base_len + 1); + if (file_name != NULL) + { + memcpy (file_name, dir, dir_len); + if (add_slash) + file_name[dir_len] = DIRECTORY_SEPARATOR; + memcpy (file_name + dir_len + add_slash, base, base_len + 1); + } + } + + if (file_name == NULL || (fp = fopen (file_name, "r")) == NULL) + /* Out of memory or file not found, treat it as empty. */ + cp = ""; + else + { + /* Parse the file's contents. */ + int c; + char buf1[50+1]; + char buf2[50+1]; + char *res_ptr = NULL; + size_t res_size = 0; + size_t l1, l2; + + for (;;) + { + c = getc (fp); + if (c == EOF) + break; + if (c == '\n' || c == ' ' || c == '\t') + continue; + if (c == '#') + { + /* Skip comment, to end of line. */ + do + c = getc (fp); + while (!(c == EOF || c == '\n')); + if (c == EOF) + break; + continue; + } + ungetc (c, fp); + if (fscanf(fp, "%50s %50s", buf1, buf2) < 2) + break; + l1 = strlen (buf1); + l2 = strlen (buf2); + if (res_size == 0) + { + res_size = l1 + 1 + l2 + 1; + res_ptr = malloc (res_size + 1); + } + else + { + res_size += l1 + 1 + l2 + 1; + res_ptr = realloc (res_ptr, res_size + 1); + } + if (res_ptr == NULL) + { + /* Out of memory. */ + res_size = 0; + break; + } + strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1); + strcpy (res_ptr + res_size - (l2 + 1), buf2); + } + fclose (fp); + if (res_size == 0) + cp = ""; + else + { + *(res_ptr + res_size) = '\0'; + cp = res_ptr; + } + } + + if (file_name != NULL) + free (file_name); + + #else /* WIN32 */ + + /* To avoid the troubles of installing a separate file in the same + directory as the DLL and of retrieving the DLL's directory at + runtime, simply inline the aliases here. */ + + cp = "CP936" "\0" "GBK" "\0" + "CP1361" "\0" "JOHAB" "\0"; + #endif + + charset_aliases = cp; + } + + return cp; + } + + /* Determine the current locale's character encoding, and canonicalize it + into one of the canonical names listed in config.charset. + The result must not be freed; it is statically allocated. + If the canonical name cannot be determined, the result is a non-canonical + name. + GCC LOCAL: Get rid of STATIC nonsense. */ + + const char * + locale_charset () + { + const char *codeset; + const char *aliases; + + #ifndef WIN32 + + # if HAVE_LANGINFO_CODESET + + /* Most systems support nl_langinfo (CODESET) nowadays. */ + codeset = nl_langinfo (CODESET); + + # else + + /* On old systems which lack it, use setlocale or getenv. */ + const char *locale = NULL; + + /* But most old systems don't have a complete set of locales. Some + (like SunOS 4 or DJGPP) have only the C locale. Therefore we don't + use setlocale here; it would return "C" when it doesn't support the + locale name the user has set. */ + # if HAVE_SETLOCALE && 0 + locale = setlocale (LC_CTYPE, NULL); + # endif + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_ALL"); + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_CTYPE"); + if (locale == NULL || locale[0] == '\0') + locale = getenv ("LANG"); + } + } + + /* On some old systems, one used to set locale = "iso8859_1". On others, + you set it to "language_COUNTRY.charset". In any case, we resolve it + through the charset.alias file. */ + codeset = locale; + + # endif + + #else /* WIN32 */ + + static char buf[2 + 10 + 1]; + + /* Win32 has a function returning the locale's codepage as a number. */ + sprintf (buf, "CP%u", GetACP ()); + codeset = buf; + + #endif + + if (codeset == NULL) + /* The canonical name cannot be determined. */ + codeset = ""; + + /* Resolve alias. */ + for (aliases = get_charset_aliases (); + *aliases != '\0'; + aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1) + if (strcmp (codeset, aliases) == 0 + || (aliases[0] == '*' && aliases[1] == '\0')) + { + codeset = aliases + strlen (aliases) + 1; + break; + } + + return codeset; + } diff -Nrc3pad gcc-3.0.4/gcc/intl/locale.alias gcc-3.1/gcc/intl/locale.alias *** gcc-3.0.4/gcc/intl/locale.alias Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/intl/locale.alias Fri Oct 12 17:24:30 2001 *************** *** 0 **** --- 1,78 ---- + # Locale name alias data base. + # Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. + # + # This program is free software; you can redistribute it and/or modify it + # under the terms of the GNU Library 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 + # Library General Public License for more details. + # + # You should have received a copy of the GNU Library General Public + # License along with this program; if not, write to the Free Software + # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + # USA. + + # The format of this file is the same as for the corresponding file of + # the X Window System, which normally can be found in + # /usr/lib/X11/locale/locale.alias + # A single line contains two fields: an alias and a substitution value. + # All entries are case independent. + + # Note: This file is far from being complete. If you have a value for + # your own site which you think might be useful for others too, share + # it with the rest of us. Send it using the `glibcbug' script to + # bugs@gnu.org. + + # Packages using this file: + + bokmal no_NO.ISO-8859-1 + bokmål no_NO.ISO-8859-1 + catalan ca_ES.ISO-8859-1 + croatian hr_HR.ISO-8859-2 + czech cs_CZ.ISO-8859-2 + danish da_DK.ISO-8859-1 + dansk da_DK.ISO-8859-1 + deutsch de_DE.ISO-8859-1 + dutch nl_NL.ISO-8859-1 + eesti et_EE.ISO-8859-1 + estonian et_EE.ISO-8859-1 + finnish fi_FI.ISO-8859-1 + français fr_FR.ISO-8859-1 + french fr_FR.ISO-8859-1 + galego gl_ES.ISO-8859-1 + galician gl_ES.ISO-8859-1 + german de_DE.ISO-8859-1 + greek el_GR.ISO-8859-7 + hebrew he_IL.ISO-8859-8 + hrvatski hr_HR.ISO-8859-2 + hungarian hu_HU.ISO-8859-2 + icelandic is_IS.ISO-8859-1 + italian it_IT.ISO-8859-1 + japanese ja_JP.eucJP + japanese.euc ja_JP.eucJP + ja_JP ja_JP.eucJP + ja_JP.ujis ja_JP.eucJP + japanese.sjis ja_JP.SJIS + korean ko_KR.eucKR + korean.euc ko_KR.eucKR + ko_KR ko_KR.eucKR + lithuanian lt_LT.ISO-8859-13 + nb_NO no_NO.ISO-8859-1 + nb_NO.ISO-8859-1 no_NO.ISO-8859-1 + norwegian no_NO.ISO-8859-1 + nynorsk nn_NO.ISO-8859-1 + polish pl_PL.ISO-8859-2 + portuguese pt_PT.ISO-8859-1 + romanian ro_RO.ISO-8859-2 + russian ru_RU.ISO-8859-5 + slovak sk_SK.ISO-8859-2 + slovene sl_SI.ISO-8859-2 + slovenian sl_SI.ISO-8859-2 + spanish es_ES.ISO-8859-1 + swedish sv_SE.ISO-8859-1 + thai th_TH.TIS-620 + turkish tr_TR.ISO-8859-9 diff -Nrc3pad gcc-3.0.4/gcc/intl/localealias.c gcc-3.1/gcc/intl/localealias.c *** gcc-3.0.4/gcc/intl/localealias.c Wed Aug 2 17:01:13 2000 --- gcc-3.1/gcc/intl/localealias.c Tue Dec 11 13:22:48 2001 *************** *** 1,29 **** /* Handle aliases for locale names. ! Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. ! Written by Ulrich Drepper , 1995. ! 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, ! Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include #endif - # ifndef _GNU_SOURCE - # define _GNU_SOURCE 1 - # endif - #include #include #include --- 1,32 ---- /* Handle aliases for locale names. ! Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. ! This program is free software; you can redistribute it and/or modify it ! under the terms of the GNU Library 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 ! Library General Public License for more details. ! You should have received a copy of the GNU Library General Public ! License along with this program; if not, write to the Free Software ! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, ! USA. */ ! ! /* Tell glibc's to provide a prototype for mempcpy(). ! This must come before because may include ! , and once has been included, it's too late. */ ! #ifndef _GNU_SOURCE ! # define _GNU_SOURCE 1 ! #endif #ifdef HAVE_CONFIG_H # include #endif #include #include #include *************** char *alloca (); *** 45,76 **** # endif #endif ! #if defined STDC_HEADERS || defined _LIBC ! # include ! #else ! char *getenv (); ! # ifdef HAVE_MALLOC_H ! # include ! # else ! void free (); ! # endif ! #endif ! #if defined HAVE_STRING_H || defined _LIBC ! # include ! #else ! # include ! # ifndef memcpy ! # define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num) ! # endif ! #endif #if !HAVE_STRCHR && !defined _LIBC # ifndef strchr # define strchr index # endif #endif ! #include "gettext.h" #include "gettextP.h" /* @@ end of prolog @@ */ --- 48,66 ---- # endif #endif ! #include ! #include #if !HAVE_STRCHR && !defined _LIBC # ifndef strchr # define strchr index # endif #endif ! #ifdef STRING_WITH_STRINGS ! #include ! #endif ! #include "gettextP.h" /* @@ end of prolog @@ */ *************** void free (); *** 81,87 **** file and the name space must not be polluted. */ # define strcasecmp __strcasecmp ! # define mempcpy __mempcpy # define HAVE_MEMPCPY 1 /* We need locking here since we can be called from different places. */ --- 71,79 ---- file and the name space must not be polluted. */ # define strcasecmp __strcasecmp ! # ifndef mempcpy ! # define mempcpy __mempcpy ! # endif # define HAVE_MEMPCPY 1 /* We need locking here since we can be called from different places. */ *************** void free (); *** 90,130 **** __libc_lock_define_initialized (static, lock); #endif ! /* For those loosing systems which don't have `alloca' we have to add some additional code emulating it. */ #ifdef HAVE_ALLOCA ! /* Nothing has to be done. */ ! # define ADD_BLOCK(list, address) /* nothing */ ! # define FREE_BLOCKS(list) /* nothing */ #else ! struct block_list ! { ! void *address; ! struct block_list *next; ! }; ! # define ADD_BLOCK(list, addr) \ ! do { \ ! struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \ ! /* If we cannot get a free block we cannot add the new element to \ ! the list. */ \ ! if (newp != NULL) { \ ! newp->address = (addr); \ ! newp->next = (list); \ ! (list) = newp; \ ! } \ ! } while (0) ! # define FREE_BLOCKS(list) \ ! do { \ ! while (list != NULL) { \ ! struct block_list *old = list; \ ! list = list->next; \ ! free (old); \ ! } \ ! } while (0) ! # undef alloca ! # define alloca(size) (malloc (size)) ! #endif /* have alloca */ struct alias_map --- 82,108 ---- __libc_lock_define_initialized (static, lock); #endif + #ifndef internal_function + # define internal_function + #endif ! /* For those losing systems which don't have `alloca' we have to add some additional code emulating it. */ #ifdef HAVE_ALLOCA ! # define freea(p) /* nothing */ #else ! # define alloca(n) malloc (n) ! # define freea(p) free (p) ! #endif ! ! #if defined _LIBC_REENTRANT || defined HAVE_FGETS_UNLOCKED ! # undef fgets ! # define fgets(buf, len, s) fgets_unlocked (buf, len, s) ! #endif ! #if defined _LIBC_REENTRANT || defined HAVE_FEOF_UNLOCKED ! # undef feof ! # define feof(s) feof_unlocked (s) ! #endif struct alias_map *************** struct alias_map *** 134,151 **** }; ! static char *string_space = NULL; ! static size_t string_space_act = 0; ! static size_t string_space_max = 0; static struct alias_map *map; ! static size_t nmap = 0; ! static size_t maxmap = 0; /* Prototypes for local functions. */ static size_t read_alias_file PARAMS ((const char *fname, int fname_len)) internal_function; ! static void extend_alias_table PARAMS ((void)); static int alias_compare PARAMS ((const struct alias_map *map1, const struct alias_map *map2)); --- 112,129 ---- }; ! static char *string_space; ! static size_t string_space_act; ! static size_t string_space_max; static struct alias_map *map; ! static size_t nmap; ! static size_t maxmap; /* Prototypes for local functions. */ static size_t read_alias_file PARAMS ((const char *fname, int fname_len)) internal_function; ! static int extend_alias_table PARAMS ((void)); static int alias_compare PARAMS ((const struct alias_map *map1, const struct alias_map *map2)); *************** _nl_expand_alias (name) *** 191,201 **** { const char *start; ! while (locale_alias_path[0] == ':') ++locale_alias_path; start = locale_alias_path; ! while (locale_alias_path[0] != '\0' && locale_alias_path[0] != ':') ++locale_alias_path; if (start < locale_alias_path) --- 169,180 ---- { const char *start; ! while (locale_alias_path[0] == PATH_SEPARATOR) ++locale_alias_path; start = locale_alias_path; ! while (locale_alias_path[0] != '\0' ! && locale_alias_path[0] != PATH_SEPARATOR) ++locale_alias_path; if (start < locale_alias_path) *************** read_alias_file (fname, fname_len) *** 218,242 **** const char *fname; int fname_len; { - #ifndef HAVE_ALLOCA - struct block_list *block_list = NULL; - #endif FILE *fp; char *full_fname; size_t added; static const char aliasfile[] = "/locale.alias"; full_fname = (char *) alloca (fname_len + sizeof aliasfile); ! ADD_BLOCK (block_list, full_fname); memcpy (full_fname, fname, fname_len); memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile); fp = fopen (full_fname, "r"); if (fp == NULL) ! { ! FREE_BLOCKS (block_list); ! return 0; ! } added = 0; while (!feof (fp)) --- 197,220 ---- const char *fname; int fname_len; { FILE *fp; char *full_fname; size_t added; static const char aliasfile[] = "/locale.alias"; full_fname = (char *) alloca (fname_len + sizeof aliasfile); ! #ifdef HAVE_MEMPCPY ! mempcpy (mempcpy (full_fname, fname, fname_len), ! aliasfile, sizeof aliasfile); ! #else memcpy (full_fname, fname, fname_len); memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile); + #endif fp = fopen (full_fname, "r"); + freea (full_fname); if (fp == NULL) ! return 0; added = 0; while (!feof (fp)) *************** read_alias_file (fname, fname_len) *** 246,263 **** b) these fields must be usable as file names and so must not be that long */ ! unsigned char buf[BUFSIZ]; ! unsigned char *alias; ! unsigned char *value; ! unsigned char *cp; ! if (fgets ((char *)buf, sizeof buf, fp) == NULL) /* EOF reached. */ break; /* Possibly not the whole line fits into the buffer. Ignore the rest of the line. */ ! if (strchr ((char *)buf, '\n') == NULL) { char altbuf[BUFSIZ]; do --- 224,241 ---- b) these fields must be usable as file names and so must not be that long */ ! char buf[BUFSIZ]; ! char *alias; ! char *value; ! char *cp; ! if (fgets (buf, sizeof buf, fp) == NULL) /* EOF reached. */ break; /* Possibly not the whole line fits into the buffer. Ignore the rest of the line. */ ! if (strchr (buf, '\n') == NULL) { char altbuf[BUFSIZ]; do *************** read_alias_file (fname, fname_len) *** 270,290 **** cp = buf; /* Ignore leading white space. */ ! while (isspace (cp[0])) ++cp; /* A leading '#' signals a comment line. */ if (cp[0] != '\0' && cp[0] != '#') { alias = cp++; ! while (cp[0] != '\0' && !isspace (cp[0])) ++cp; /* Terminate alias name. */ if (cp[0] != '\0') *cp++ = '\0'; /* Now look for the beginning of the value. */ ! while (isspace (cp[0])) ++cp; if (cp[0] != '\0') --- 248,268 ---- cp = buf; /* Ignore leading white space. */ ! while (isspace ((unsigned char)cp[0])) ++cp; /* A leading '#' signals a comment line. */ if (cp[0] != '\0' && cp[0] != '#') { alias = cp++; ! while (cp[0] != '\0' && !isspace ((unsigned char)cp[0])) ++cp; /* Terminate alias name. */ if (cp[0] != '\0') *cp++ = '\0'; /* Now look for the beginning of the value. */ ! while (isspace ((unsigned char)cp[0])) ++cp; if (cp[0] != '\0') *************** read_alias_file (fname, fname_len) *** 293,299 **** size_t value_len; value = cp++; ! while (cp[0] != '\0' && !isspace (cp[0])) ++cp; /* Terminate value. */ if (cp[0] == '\n') --- 271,277 ---- size_t value_len; value = cp++; ! while (cp[0] != '\0' && !isspace ((unsigned char)cp[0])) ++cp; /* Terminate value. */ if (cp[0] == '\n') *************** read_alias_file (fname, fname_len) *** 308,317 **** *cp++ = '\0'; if (nmap >= maxmap) ! extend_alias_table (); ! alias_len = strlen ((char *)alias) + 1; ! value_len = strlen ((char *)value) + 1; if (string_space_act + alias_len + value_len > string_space_max) { --- 286,296 ---- *cp++ = '\0'; if (nmap >= maxmap) ! if (__builtin_expect (extend_alias_table (), 0)) ! return added; ! alias_len = strlen (alias) + 1; ! value_len = strlen (value) + 1; if (string_space_act + alias_len + value_len > string_space_max) { *************** read_alias_file (fname, fname_len) *** 321,330 **** ? alias_len + value_len : 1024)); char *new_pool = (char *) realloc (string_space, new_size); if (new_pool == NULL) { ! FREE_BLOCKS (block_list); ! return added; } string_space = new_pool; string_space_max = new_size; } --- 300,318 ---- ? alias_len + value_len : 1024)); char *new_pool = (char *) realloc (string_space, new_size); if (new_pool == NULL) + return added; + + if (__builtin_expect (string_space != new_pool, 0)) { ! size_t i; ! ! for (i = 0; i < nmap; i++) ! { ! map[i].alias += new_pool - string_space; ! map[i].value += new_pool - string_space; ! } } + string_space = new_pool; string_space_max = new_size; } *************** read_alias_file (fname, fname_len) *** 351,362 **** qsort (map, nmap, sizeof (struct alias_map), (int (*) PARAMS ((const void *, const void *))) alias_compare); - FREE_BLOCKS (block_list); return added; } ! static void extend_alias_table () { size_t new_size; --- 339,349 ---- qsort (map, nmap, sizeof (struct alias_map), (int (*) PARAMS ((const void *, const void *))) alias_compare); return added; } ! static int extend_alias_table () { size_t new_size; *************** extend_alias_table () *** 367,376 **** * sizeof (struct alias_map))); if (new_map == NULL) /* Simply don't extend: we don't have any more core. */ ! return; map = new_map; maxmap = new_size; } --- 354,364 ---- * sizeof (struct alias_map))); if (new_map == NULL) /* Simply don't extend: we don't have any more core. */ ! return -1; map = new_map; maxmap = new_size; + return 0; } *************** alias_compare (map1, map2) *** 406,413 **** { /* I know this seems to be odd but the tolower() function in some systems libc cannot handle nonalpha characters. */ ! c1 = isupper (*p1) ? tolower (*p1) : *p1; ! c2 = isupper (*p2) ? tolower (*p2) : *p2; if (c1 == '\0') break; ++p1; --- 394,401 ---- { /* I know this seems to be odd but the tolower() function in some systems libc cannot handle nonalpha characters. */ ! c1 = isupper ((unsigned char)*p1) ? tolower ((unsigned char)*p1) : *p1; ! c2 = isupper ((unsigned char)*p2) ? tolower ((unsigned char)*p2) : *p2; if (c1 == '\0') break; ++p1; diff -Nrc3pad gcc-3.0.4/gcc/intl/ngettext.c gcc-3.1/gcc/intl/ngettext.c *** gcc-3.0.4/gcc/intl/ngettext.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/intl/ngettext.c Fri Oct 12 17:24:30 2001 *************** *** 0 **** --- 1,68 ---- + /* Implementation of ngettext(3) function. + Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + + #ifdef HAVE_CONFIG_H + # include + #endif + + #ifdef _LIBC + # define __need_NULL + # include + #else + # include /* Just for NULL. */ + #endif + + #include "gettextP.h" + #ifdef _LIBC + # include + #else + # include "libgnuintl.h" + #endif + + #include + + /* @@ end of prolog @@ */ + + /* Names for the libintl functions are a problem. They must not clash + with existing names and they should follow ANSI C. But this source + code is also used in GNU C Library where the names have a __ + prefix. So we have to make a difference here. */ + #ifdef _LIBC + # define NGETTEXT __ngettext + # define DCNGETTEXT __dcngettext + #else + # define NGETTEXT ngettext__ + # define DCNGETTEXT dcngettext__ + #endif + + /* Look up MSGID in the current default message catalog for the current + LC_MESSAGES locale. If not found, returns MSGID itself (the default + text). */ + char * + NGETTEXT (msgid1, msgid2, n) + const char *msgid1; + const char *msgid2; + unsigned long int n; + { + return DCNGETTEXT (NULL, msgid1, msgid2, n, LC_MESSAGES); + } + + #ifdef _LIBC + /* Alias for function name in GNU C Library. */ + weak_alias (__ngettext, ngettext); + #endif diff -Nrc3pad gcc-3.0.4/gcc/intl/plural.c gcc-3.1/gcc/intl/plural.c *** gcc-3.0.4/gcc/intl/plural.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/intl/plural.c Sat Nov 3 21:51:46 2001 *************** *** 0 **** --- 1,1329 ---- + + /* A Bison parser, made from plural.y + by GNU Bison version 1.28 */ + + #define YYBISON 1 /* Identify Bison output. */ + + #define yyparse __gettextparse + #define yylex __gettextlex + #define yyerror __gettexterror + #define yylval __gettextlval + #define yychar __gettextchar + #define yydebug __gettextdebug + #define yynerrs __gettextnerrs + #define EQUOP2 257 + #define CMPOP2 258 + #define ADDOP2 259 + #define MULOP2 260 + #define NUMBER 261 + + #line 1 "plural.y" + + /* Expression parsing for plural form selection. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Written by Ulrich Drepper , 2000. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + + /* The bison generated parser uses alloca. AIX 3 forces us to put this + declaration at the beginning of the file. The declaration in bison's + skeleton file comes too late. This must come before + because may include arbitrary system headers. */ + #if defined _AIX && !defined __GNUC__ + #pragma alloca + #endif + + #ifdef HAVE_CONFIG_H + # include + #endif + + #include + #include "gettextP.h" + + /* Names for the libintl functions are a problem. They must not clash + with existing names and they should follow ANSI C. But this source + code is also used in GNU C Library where the names have a __ + prefix. So we have to make a difference here. */ + #ifdef _LIBC + # define FREE_EXPRESSION __gettext_free_exp + #else + # define FREE_EXPRESSION gettext_free_exp__ + # define __gettextparse gettextparse__ + #endif + + #define YYLEX_PARAM &((struct parse_args *) arg)->cp + #define YYPARSE_PARAM arg + + #line 53 "plural.y" + typedef union { + unsigned long int num; + enum operator op; + struct expression *exp; + } YYSTYPE; + #line 59 "plural.y" + + /* Prototypes for local functions. */ + static struct expression *new_exp PARAMS ((int nargs, enum operator op, + struct expression * const *args)); + static inline struct expression *new_exp_0 PARAMS ((enum operator op)); + static inline struct expression *new_exp_1 PARAMS ((enum operator op, + struct expression *right)); + static struct expression *new_exp_2 PARAMS ((enum operator op, + struct expression *left, + struct expression *right)); + static inline struct expression *new_exp_3 PARAMS ((enum operator op, + struct expression *bexp, + struct expression *tbranch, + struct expression *fbranch)); + static int yylex PARAMS ((YYSTYPE *lval, const char **pexp)); + static void yyerror PARAMS ((const char *str)); + + /* Allocation of expressions. */ + + static struct expression * + new_exp (nargs, op, args) + int nargs; + enum operator op; + struct expression * const *args; + { + int i; + struct expression *newp; + + /* If any of the argument could not be malloc'ed, just return NULL. */ + for (i = nargs - 1; i >= 0; i--) + if (args[i] == NULL) + goto fail; + + /* Allocate a new expression. */ + newp = (struct expression *) malloc (sizeof (*newp)); + if (newp != NULL) + { + newp->nargs = nargs; + newp->operation = op; + for (i = nargs - 1; i >= 0; i--) + newp->val.args[i] = args[i]; + return newp; + } + + fail: + for (i = nargs - 1; i >= 0; i--) + FREE_EXPRESSION (args[i]); + + return NULL; + } + + static inline struct expression * + new_exp_0 (op) + enum operator op; + { + return new_exp (0, op, NULL); + } + + static inline struct expression * + new_exp_1 (op, right) + enum operator op; + struct expression *right; + { + struct expression *args[1]; + + args[0] = right; + return new_exp (1, op, args); + } + + static struct expression * + new_exp_2 (op, left, right) + enum operator op; + struct expression *left; + struct expression *right; + { + struct expression *args[2]; + + args[0] = left; + args[1] = right; + return new_exp (2, op, args); + } + + static inline struct expression * + new_exp_3 (op, bexp, tbranch, fbranch) + enum operator op; + struct expression *bexp; + struct expression *tbranch; + struct expression *fbranch; + { + struct expression *args[3]; + + args[0] = bexp; + args[1] = tbranch; + args[2] = fbranch; + return new_exp (3, op, args); + } + + #include + + #ifndef __cplusplus + #ifndef __STDC__ + #define const + #endif + #endif + + + + #define YYFINAL 27 + #define YYFLAG -32768 + #define YYNTBASE 16 + + #define YYTRANSLATE(x) ((unsigned)(x) <= 261 ? yytranslate[x] : 18) + + static const char yytranslate[] = { 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 10, 2, 2, 2, 2, 5, 2, 14, + 15, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 12, 2, 2, + 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 13, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 1, 6, 7, 8, 9, + 11 + }; + + #if YYDEBUG != 0 + static const short yyprhs[] = { 0, + 0, 2, 8, 12, 16, 20, 24, 28, 32, 35, + 37, 39 + }; + + static const short yyrhs[] = { 17, + 0, 17, 3, 17, 12, 17, 0, 17, 4, 17, + 0, 17, 5, 17, 0, 17, 6, 17, 0, 17, + 7, 17, 0, 17, 8, 17, 0, 17, 9, 17, + 0, 10, 17, 0, 13, 0, 11, 0, 14, 17, + 15, 0 + }; + + #endif + + #if YYDEBUG != 0 + static const short yyrline[] = { 0, + 178, 186, 190, 194, 198, 202, 206, 210, 214, 218, + 222, 227 + }; + #endif + + + #if YYDEBUG != 0 || defined (YYERROR_VERBOSE) + + static const char * const yytname[] = { "$","error","$undefined.","'?'","'|'", + "'&'","EQUOP2","CMPOP2","ADDOP2","MULOP2","'!'","NUMBER","':'","'n'","'('","')'", + "start","exp", NULL + }; + #endif + + static const short yyr1[] = { 0, + 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17 + }; + + static const short yyr2[] = { 0, + 1, 5, 3, 3, 3, 3, 3, 3, 2, 1, + 1, 3 + }; + + static const short yydefact[] = { 0, + 0, 11, 10, 0, 1, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 12, 0, 3, 4, 5, 6, + 7, 8, 0, 2, 0, 0, 0 + }; + + static const short yydefgoto[] = { 25, + 5 + }; + + static const short yypact[] = { -9, + -9,-32768,-32768, -9, 34,-32768, 11, -9, -9, -9, + -9, -9, -9, -9,-32768, 24, 39, 43, 16, 26, + -3,-32768, -9, 34, 21, 53,-32768 + }; + + static const short yypgoto[] = {-32768, + -1 + }; + + + #define YYLAST 53 + + + static const short yytable[] = { 6, + 1, 2, 7, 3, 4, 14, 16, 17, 18, 19, + 20, 21, 22, 8, 9, 10, 11, 12, 13, 14, + 26, 24, 12, 13, 14, 15, 8, 9, 10, 11, + 12, 13, 14, 13, 14, 23, 8, 9, 10, 11, + 12, 13, 14, 10, 11, 12, 13, 14, 11, 12, + 13, 14, 27 + }; + + static const short yycheck[] = { 1, + 10, 11, 4, 13, 14, 9, 8, 9, 10, 11, + 12, 13, 14, 3, 4, 5, 6, 7, 8, 9, + 0, 23, 7, 8, 9, 15, 3, 4, 5, 6, + 7, 8, 9, 8, 9, 12, 3, 4, 5, 6, + 7, 8, 9, 5, 6, 7, 8, 9, 6, 7, + 8, 9, 0 + }; + #define YYPURE 1 + + /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ + #line 3 "/home/haible/gnu/arch/linuxlibc6/share/bison.simple" + /* This file comes from bison-1.28. */ + + /* Skeleton output parser for bison, + Copyright (C) 1984, 1989, 1990 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, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + /* As a special exception, when this file is copied by Bison into a + Bison output file, you may use that output file without restriction. + This special exception was added by the Free Software Foundation + in version 1.24 of Bison. */ + + /* This is the parser code that is written into each bison parser + when the %semantic_parser declaration is not specified in the grammar. + It was written by Richard Stallman by simplifying the hairy parser + used when %semantic_parser is specified. */ + + #ifndef YYSTACK_USE_ALLOCA + #ifdef alloca + #define YYSTACK_USE_ALLOCA + #else /* alloca not defined */ + #ifdef __GNUC__ + #define YYSTACK_USE_ALLOCA + #define alloca __builtin_alloca + #else /* not GNU C. */ + #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386)) + #define YYSTACK_USE_ALLOCA + #include + #else /* not sparc */ + /* We think this test detects Watcom and Microsoft C. */ + /* This used to test MSDOS, but that is a bad idea + since that symbol is in the user namespace. */ + #if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__) + #if 0 /* No need for malloc.h, which pollutes the namespace; + instead, just don't use alloca. */ + #include + #endif + #else /* not MSDOS, or __TURBOC__ */ + #if defined(_AIX) + /* I don't know what this was needed for, but it pollutes the namespace. + So I turned it off. rms, 2 May 1997. */ + /* #include */ + #pragma alloca + #define YYSTACK_USE_ALLOCA + #else /* not MSDOS, or __TURBOC__, or _AIX */ + #if 0 + #ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up, + and on HPUX 10. Eventually we can turn this on. */ + #define YYSTACK_USE_ALLOCA + #define alloca __builtin_alloca + #endif /* __hpux */ + #endif + #endif /* not _AIX */ + #endif /* not MSDOS, or __TURBOC__ */ + #endif /* not sparc */ + #endif /* not GNU C */ + #endif /* alloca not defined */ + #endif /* YYSTACK_USE_ALLOCA not defined */ + + #ifdef YYSTACK_USE_ALLOCA + #define YYSTACK_ALLOC alloca + #else + #define YYSTACK_ALLOC malloc + #endif + + /* Note: there must be only one dollar sign in this file. + It is replaced by the list of actions, each action + as one case of the switch. */ + + #define yyerrok (yyerrstatus = 0) + #define yyclearin (yychar = YYEMPTY) + #define YYEMPTY -2 + #define YYEOF 0 + #define YYACCEPT goto yyacceptlab + #define YYABORT goto yyabortlab + #define YYERROR goto yyerrlab1 + /* Like YYERROR except do call yyerror. + This remains here temporarily to ease the + transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ + #define YYFAIL goto yyerrlab + #define YYRECOVERING() (!!yyerrstatus) + #define YYBACKUP(token, value) \ + do \ + if (yychar == YYEMPTY && yylen == 1) \ + { yychar = (token), yylval = (value); \ + yychar1 = YYTRANSLATE (yychar); \ + YYPOPSTACK; \ + goto yybackup; \ + } \ + else \ + { yyerror ("syntax error: cannot back up"); YYERROR; } \ + while (0) + + #define YYTERROR 1 + #define YYERRCODE 256 + + #ifndef YYPURE + #define YYLEX yylex() + #endif + + #ifdef YYPURE + #ifdef YYLSP_NEEDED + #ifdef YYLEX_PARAM + #define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM) + #else + #define YYLEX yylex(&yylval, &yylloc) + #endif + #else /* not YYLSP_NEEDED */ + #ifdef YYLEX_PARAM + #define YYLEX yylex(&yylval, YYLEX_PARAM) + #else + #define YYLEX yylex(&yylval) + #endif + #endif /* not YYLSP_NEEDED */ + #endif + + /* If nonreentrant, generate the variables here */ + + #ifndef YYPURE + + int yychar; /* the lookahead symbol */ + YYSTYPE yylval; /* the semantic value of the */ + /* lookahead symbol */ + + #ifdef YYLSP_NEEDED + YYLTYPE yylloc; /* location data for the lookahead */ + /* symbol */ + #endif + + int yynerrs; /* number of parse errors so far */ + #endif /* not YYPURE */ + + #if YYDEBUG != 0 + int yydebug; /* nonzero means print parse trace */ + /* Since this is uninitialized, it does not stop multiple parsers + from coexisting. */ + #endif + + /* YYINITDEPTH indicates the initial size of the parser's stacks */ + + #ifndef YYINITDEPTH + #define YYINITDEPTH 200 + #endif + + /* YYMAXDEPTH is the maximum size the stacks can grow to + (effective only if the built-in stack extension method is used). */ + + #if YYMAXDEPTH == 0 + #undef YYMAXDEPTH + #endif + + #ifndef YYMAXDEPTH + #define YYMAXDEPTH 10000 + #endif + + /* Define __yy_memcpy. Note that the size argument + should be passed with type unsigned int, because that is what the non-GCC + definitions require. With GCC, __builtin_memcpy takes an arg + of type size_t, but it can handle unsigned int. */ + + #if __GNUC__ > 1 /* GNU C and GNU C++ define this. */ + #define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT) + #else /* not GNU C or C++ */ + #ifndef __cplusplus + + /* This is the most reliable way to avoid incompatibilities + in available built-in functions on various systems. */ + static void + __yy_memcpy (to, from, count) + char *to; + char *from; + unsigned int count; + { + register char *f = from; + register char *t = to; + register int i = count; + + while (i-- > 0) + *t++ = *f++; + } + + #else /* __cplusplus */ + + /* This is the most reliable way to avoid incompatibilities + in available built-in functions on various systems. */ + static void + __yy_memcpy (char *to, char *from, unsigned int count) + { + register char *t = to; + register char *f = from; + register int i = count; + + while (i-- > 0) + *t++ = *f++; + } + + #endif + #endif + + #line 217 "/home/haible/gnu/arch/linuxlibc6/share/bison.simple" + + /* The user can define YYPARSE_PARAM as the name of an argument to be passed + into yyparse. The argument should have type void *. + It should actually point to an object. + Grammar actions can access the variable by casting it + to the proper pointer type. */ + + #ifdef YYPARSE_PARAM + #ifdef __cplusplus + #define YYPARSE_PARAM_ARG void *YYPARSE_PARAM + #define YYPARSE_PARAM_DECL + #else /* not __cplusplus */ + #define YYPARSE_PARAM_ARG YYPARSE_PARAM + #define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; + #endif /* not __cplusplus */ + #else /* not YYPARSE_PARAM */ + #define YYPARSE_PARAM_ARG + #define YYPARSE_PARAM_DECL + #endif /* not YYPARSE_PARAM */ + + /* Prevent warning if -Wstrict-prototypes. */ + #ifdef __GNUC__ + #ifdef YYPARSE_PARAM + int yyparse (void *); + #else + int yyparse (void); + #endif + #endif + + int + yyparse(YYPARSE_PARAM_ARG) + YYPARSE_PARAM_DECL + { + register int yystate; + register int yyn; + register short *yyssp; + register YYSTYPE *yyvsp; + int yyerrstatus; /* number of tokens to shift before error messages enabled */ + int yychar1 = 0; /* lookahead token as an internal (translated) token number */ + + short yyssa[YYINITDEPTH]; /* the state stack */ + YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */ + + short *yyss = yyssa; /* refer to the stacks thru separate pointers */ + YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */ + + #ifdef YYLSP_NEEDED + YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */ + YYLTYPE *yyls = yylsa; + YYLTYPE *yylsp; + + #define YYPOPSTACK (yyvsp--, yyssp--, yylsp--) + #else + #define YYPOPSTACK (yyvsp--, yyssp--) + #endif + + int yystacksize = YYINITDEPTH; + int yyfree_stacks = 0; + + #ifdef YYPURE + int yychar; + YYSTYPE yylval; + int yynerrs; + #ifdef YYLSP_NEEDED + YYLTYPE yylloc; + #endif + #endif + + YYSTYPE yyval; /* the variable used to return */ + /* semantic values from the action */ + /* routines */ + + int yylen; + + #if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Starting parse\n"); + #endif + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + + yyssp = yyss - 1; + yyvsp = yyvs; + #ifdef YYLSP_NEEDED + yylsp = yyls; + #endif + + /* Push a new state, which is found in yystate . */ + /* In all cases, when you get here, the value and location stacks + have just been pushed. so pushing a state here evens the stacks. */ + yynewstate: + + *++yyssp = yystate; + + if (yyssp >= yyss + yystacksize - 1) + { + /* Give user a chance to reallocate the stack */ + /* Use copies of these so that the &'s don't force the real ones into memory. */ + YYSTYPE *yyvs1 = yyvs; + short *yyss1 = yyss; + #ifdef YYLSP_NEEDED + YYLTYPE *yyls1 = yyls; + #endif + + /* Get the current used size of the three stacks, in elements. */ + int size = yyssp - yyss + 1; + + #ifdef yyoverflow + /* Each stack pointer address is followed by the size of + the data in use in that stack, in bytes. */ + #ifdef YYLSP_NEEDED + /* This used to be a conditional around just the two extra args, + but that might be undefined if yyoverflow is a macro. */ + yyoverflow("parser stack overflow", + &yyss1, size * sizeof (*yyssp), + &yyvs1, size * sizeof (*yyvsp), + &yyls1, size * sizeof (*yylsp), + &yystacksize); + #else + yyoverflow("parser stack overflow", + &yyss1, size * sizeof (*yyssp), + &yyvs1, size * sizeof (*yyvsp), + &yystacksize); + #endif + + yyss = yyss1; yyvs = yyvs1; + #ifdef YYLSP_NEEDED + yyls = yyls1; + #endif + #else /* no yyoverflow */ + /* Extend the stack our own way. */ + if (yystacksize >= YYMAXDEPTH) + { + yyerror("parser stack overflow"); + if (yyfree_stacks) + { + free (yyss); + free (yyvs); + #ifdef YYLSP_NEEDED + free (yyls); + #endif + } + return 2; + } + yystacksize *= 2; + if (yystacksize > YYMAXDEPTH) + yystacksize = YYMAXDEPTH; + #ifndef YYSTACK_USE_ALLOCA + yyfree_stacks = 1; + #endif + yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp)); + __yy_memcpy ((char *)yyss, (char *)yyss1, + size * (unsigned int) sizeof (*yyssp)); + yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp)); + __yy_memcpy ((char *)yyvs, (char *)yyvs1, + size * (unsigned int) sizeof (*yyvsp)); + #ifdef YYLSP_NEEDED + yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp)); + __yy_memcpy ((char *)yyls, (char *)yyls1, + size * (unsigned int) sizeof (*yylsp)); + #endif + #endif /* no yyoverflow */ + + yyssp = yyss + size - 1; + yyvsp = yyvs + size - 1; + #ifdef YYLSP_NEEDED + yylsp = yyls + size - 1; + #endif + + #if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Stack size increased to %d\n", yystacksize); + #endif + + if (yyssp >= yyss + yystacksize - 1) + YYABORT; + } + + #if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Entering state %d\n", yystate); + #endif + + goto yybackup; + yybackup: + + /* Do appropriate processing given the current state. */ + /* Read a lookahead token if we need one and don't already have one. */ + /* yyresume: */ + + /* First try to decide what to do without reference to lookahead token. */ + + yyn = yypact[yystate]; + if (yyn == YYFLAG) + goto yydefault; + + /* Not known => get a lookahead token if don't already have one. */ + + /* yychar is either YYEMPTY or YYEOF + or a valid token in external form. */ + + if (yychar == YYEMPTY) + { + #if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Reading a token: "); + #endif + yychar = YYLEX; + } + + /* Convert token to internal form (in yychar1) for indexing tables with */ + + if (yychar <= 0) /* This means end of input. */ + { + yychar1 = 0; + yychar = YYEOF; /* Don't call YYLEX any more */ + + #if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Now at end of input.\n"); + #endif + } + else + { + yychar1 = YYTRANSLATE(yychar); + + #if YYDEBUG != 0 + if (yydebug) + { + fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]); + /* Give the individual parser a way to print the precise meaning + of a token, for further debugging info. */ + #ifdef YYPRINT + YYPRINT (stderr, yychar, yylval); + #endif + fprintf (stderr, ")\n"); + } + #endif + } + + yyn += yychar1; + if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1) + goto yydefault; + + yyn = yytable[yyn]; + + /* yyn is what to do for this token type in this state. + Negative => reduce, -yyn is rule number. + Positive => shift, yyn is new state. + New state is final state => don't bother to shift, + just return success. + 0, or most negative number => error. */ + + if (yyn < 0) + { + if (yyn == YYFLAG) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + else if (yyn == 0) + goto yyerrlab; + + if (yyn == YYFINAL) + YYACCEPT; + + /* Shift the lookahead token. */ + + #if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]); + #endif + + /* Discard the token being shifted unless it is eof. */ + if (yychar != YYEOF) + yychar = YYEMPTY; + + *++yyvsp = yylval; + #ifdef YYLSP_NEEDED + *++yylsp = yylloc; + #endif + + /* count tokens shifted since error; after three, turn off error status. */ + if (yyerrstatus) yyerrstatus--; + + yystate = yyn; + goto yynewstate; + + /* Do the default action for the current state. */ + yydefault: + + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + + /* Do a reduction. yyn is the number of a rule to reduce with. */ + yyreduce: + yylen = yyr2[yyn]; + if (yylen > 0) + yyval = yyvsp[1-yylen]; /* implement default value of the action */ + + #if YYDEBUG != 0 + if (yydebug) + { + int i; + + fprintf (stderr, "Reducing via rule %d (line %d), ", + yyn, yyrline[yyn]); + + /* Print the symbols being reduced, and their result. */ + for (i = yyprhs[yyn]; yyrhs[i] > 0; i++) + fprintf (stderr, "%s ", yytname[yyrhs[i]]); + fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]); + } + #endif + + + switch (yyn) { + + case 1: + #line 179 "plural.y" + { + if (yyvsp[0].exp == NULL) + YYABORT; + ((struct parse_args *) arg)->res = yyvsp[0].exp; + ; + break;} + case 2: + #line 187 "plural.y" + { + yyval.exp = new_exp_3 (qmop, yyvsp[-4].exp, yyvsp[-2].exp, yyvsp[0].exp); + ; + break;} + case 3: + #line 191 "plural.y" + { + yyval.exp = new_exp_2 (lor, yyvsp[-2].exp, yyvsp[0].exp); + ; + break;} + case 4: + #line 195 "plural.y" + { + yyval.exp = new_exp_2 (land, yyvsp[-2].exp, yyvsp[0].exp); + ; + break;} + case 5: + #line 199 "plural.y" + { + yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); + ; + break;} + case 6: + #line 203 "plural.y" + { + yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); + ; + break;} + case 7: + #line 207 "plural.y" + { + yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); + ; + break;} + case 8: + #line 211 "plural.y" + { + yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); + ; + break;} + case 9: + #line 215 "plural.y" + { + yyval.exp = new_exp_1 (lnot, yyvsp[0].exp); + ; + break;} + case 10: + #line 219 "plural.y" + { + yyval.exp = new_exp_0 (var); + ; + break;} + case 11: + #line 223 "plural.y" + { + if ((yyval.exp = new_exp_0 (num)) != NULL) + yyval.exp->val.num = yyvsp[0].num; + ; + break;} + case 12: + #line 228 "plural.y" + { + yyval.exp = yyvsp[-1].exp; + ; + break;} + } + /* the action file gets copied in in place of this dollarsign */ + #line 543 "/home/haible/gnu/arch/linuxlibc6/share/bison.simple" + + yyvsp -= yylen; + yyssp -= yylen; + #ifdef YYLSP_NEEDED + yylsp -= yylen; + #endif + + #if YYDEBUG != 0 + if (yydebug) + { + short *ssp1 = yyss - 1; + fprintf (stderr, "state stack now"); + while (ssp1 != yyssp) + fprintf (stderr, " %d", *++ssp1); + fprintf (stderr, "\n"); + } + #endif + + *++yyvsp = yyval; + + #ifdef YYLSP_NEEDED + yylsp++; + if (yylen == 0) + { + yylsp->first_line = yylloc.first_line; + yylsp->first_column = yylloc.first_column; + yylsp->last_line = (yylsp-1)->last_line; + yylsp->last_column = (yylsp-1)->last_column; + yylsp->text = 0; + } + else + { + yylsp->last_line = (yylsp+yylen-1)->last_line; + yylsp->last_column = (yylsp+yylen-1)->last_column; + } + #endif + + /* Now "shift" the result of the reduction. + Determine what state that goes to, + based on the state we popped back to + and the rule number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTBASE] + *yyssp; + if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTBASE]; + + goto yynewstate; + + yyerrlab: /* here on detecting error */ + + if (! yyerrstatus) + /* If not already recovering from an error, report this error. */ + { + ++yynerrs; + + #ifdef YYERROR_VERBOSE + yyn = yypact[yystate]; + + if (yyn > YYFLAG && yyn < YYLAST) + { + int size = 0; + char *msg; + int x, count; + + count = 0; + /* Start X at -yyn if nec to avoid negative indexes in yycheck. */ + for (x = (yyn < 0 ? -yyn : 0); + x < (sizeof(yytname) / sizeof(char *)); x++) + if (yycheck[x + yyn] == x) + size += strlen(yytname[x]) + 15, count++; + msg = (char *) malloc(size + 15); + if (msg != 0) + { + strcpy(msg, "parse error"); + + if (count < 5) + { + count = 0; + for (x = (yyn < 0 ? -yyn : 0); + x < (sizeof(yytname) / sizeof(char *)); x++) + if (yycheck[x + yyn] == x) + { + strcat(msg, count == 0 ? ", expecting `" : " or `"); + strcat(msg, yytname[x]); + strcat(msg, "'"); + count++; + } + } + yyerror(msg); + free(msg); + } + else + yyerror ("parse error; also virtual memory exceeded"); + } + else + #endif /* YYERROR_VERBOSE */ + yyerror("parse error"); + } + + goto yyerrlab1; + yyerrlab1: /* here on error raised explicitly by an action */ + + if (yyerrstatus == 3) + { + /* if just tried and failed to reuse lookahead token after an error, discard it. */ + + /* return failure if at end of input */ + if (yychar == YYEOF) + YYABORT; + + #if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]); + #endif + + yychar = YYEMPTY; + } + + /* Else will try to reuse lookahead token + after shifting the error token. */ + + yyerrstatus = 3; /* Each real token shifted decrements this */ + + goto yyerrhandle; + + yyerrdefault: /* current state does not do anything special for the error token. */ + + #if 0 + /* This is wrong; only states that explicitly want error tokens + should shift them. */ + yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/ + if (yyn) goto yydefault; + #endif + + yyerrpop: /* pop the current state because it cannot handle the error token */ + + if (yyssp == yyss) YYABORT; + yyvsp--; + yystate = *--yyssp; + #ifdef YYLSP_NEEDED + yylsp--; + #endif + + #if YYDEBUG != 0 + if (yydebug) + { + short *ssp1 = yyss - 1; + fprintf (stderr, "Error: state stack now"); + while (ssp1 != yyssp) + fprintf (stderr, " %d", *++ssp1); + fprintf (stderr, "\n"); + } + #endif + + yyerrhandle: + + yyn = yypact[yystate]; + if (yyn == YYFLAG) + goto yyerrdefault; + + yyn += YYTERROR; + if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR) + goto yyerrdefault; + + yyn = yytable[yyn]; + if (yyn < 0) + { + if (yyn == YYFLAG) + goto yyerrpop; + yyn = -yyn; + goto yyreduce; + } + else if (yyn == 0) + goto yyerrpop; + + if (yyn == YYFINAL) + YYACCEPT; + + #if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Shifting error token, "); + #endif + + *++yyvsp = yylval; + #ifdef YYLSP_NEEDED + *++yylsp = yylloc; + #endif + + yystate = yyn; + goto yynewstate; + + yyacceptlab: + /* YYACCEPT comes here. */ + if (yyfree_stacks) + { + free (yyss); + free (yyvs); + #ifdef YYLSP_NEEDED + free (yyls); + #endif + } + return 0; + + yyabortlab: + /* YYABORT comes here. */ + if (yyfree_stacks) + { + free (yyss); + free (yyvs); + #ifdef YYLSP_NEEDED + free (yyls); + #endif + } + return 1; + } + #line 233 "plural.y" + + + void + internal_function + FREE_EXPRESSION (exp) + struct expression *exp; + { + if (exp == NULL) + return; + + /* Handle the recursive case. */ + switch (exp->nargs) + { + case 3: + FREE_EXPRESSION (exp->val.args[2]); + /* FALLTHROUGH */ + case 2: + FREE_EXPRESSION (exp->val.args[1]); + /* FALLTHROUGH */ + case 1: + FREE_EXPRESSION (exp->val.args[0]); + /* FALLTHROUGH */ + default: + break; + } + + free (exp); + } + + + static int + yylex (lval, pexp) + YYSTYPE *lval; + const char **pexp; + { + const char *exp = *pexp; + int result; + + while (1) + { + if (exp[0] == '\0') + { + *pexp = exp; + return YYEOF; + } + + if (exp[0] != ' ' && exp[0] != '\t') + break; + + ++exp; + } + + result = *exp++; + switch (result) + { + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + { + unsigned long int n = result - '0'; + while (exp[0] >= '0' && exp[0] <= '9') + { + n *= 10; + n += exp[0] - '0'; + ++exp; + } + lval->num = n; + result = NUMBER; + } + break; + + case '=': + if (exp[0] == '=') + { + ++exp; + lval->op = equal; + result = EQUOP2; + } + else + result = YYERRCODE; + break; + + case '!': + if (exp[0] == '=') + { + ++exp; + lval->op = not_equal; + result = EQUOP2; + } + break; + + case '&': + case '|': + if (exp[0] == result) + ++exp; + else + result = YYERRCODE; + break; + + case '<': + if (exp[0] == '=') + { + ++exp; + lval->op = less_or_equal; + } + else + lval->op = less_than; + result = CMPOP2; + break; + + case '>': + if (exp[0] == '=') + { + ++exp; + lval->op = greater_or_equal; + } + else + lval->op = greater_than; + result = CMPOP2; + break; + + case '*': + lval->op = mult; + result = MULOP2; + break; + + case '/': + lval->op = divide; + result = MULOP2; + break; + + case '%': + lval->op = module; + result = MULOP2; + break; + + case '+': + lval->op = plus; + result = ADDOP2; + break; + + case '-': + lval->op = minus; + result = ADDOP2; + break; + + case 'n': + case '?': + case ':': + case '(': + case ')': + /* Nothing, just return the character. */ + break; + + case ';': + case '\n': + case '\0': + /* Be safe and let the user call this function again. */ + --exp; + result = YYEOF; + break; + + default: + result = YYERRCODE; + #if YYDEBUG != 0 + --exp; + #endif + break; + } + + *pexp = exp; + + return result; + } + + #if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) + #define __attribute__(x) + #endif + + static void + yyerror (str) + const char *str __attribute__ ((__unused__)); + { + /* Do nothing. We don't print error messages here. */ + } diff -Nrc3pad gcc-3.0.4/gcc/intl/plural.y gcc-3.1/gcc/intl/plural.y *** gcc-3.0.4/gcc/intl/plural.y Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/intl/plural.y Sat Nov 3 21:51:46 2001 *************** *** 0 **** --- 1,416 ---- + %{ + /* Expression parsing for plural form selection. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Written by Ulrich Drepper , 2000. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + + /* The bison generated parser uses alloca. AIX 3 forces us to put this + declaration at the beginning of the file. The declaration in bison's + skeleton file comes too late. This must come before + because may include arbitrary system headers. */ + #if defined _AIX && !defined __GNUC__ + #pragma alloca + #endif + + #ifdef HAVE_CONFIG_H + # include + #endif + + #include + #include "gettextP.h" + + /* Names for the libintl functions are a problem. They must not clash + with existing names and they should follow ANSI C. But this source + code is also used in GNU C Library where the names have a __ + prefix. So we have to make a difference here. */ + #ifdef _LIBC + # define FREE_EXPRESSION __gettext_free_exp + #else + # define FREE_EXPRESSION gettext_free_exp__ + # define __gettextparse gettextparse__ + #endif + + #define YYLEX_PARAM &((struct parse_args *) arg)->cp + #define YYPARSE_PARAM arg + %} + %pure_parser + %expect 10 + + %union { + unsigned long int num; + enum operator op; + struct expression *exp; + } + + %{ + /* Prototypes for local functions. */ + static struct expression *new_exp PARAMS ((int nargs, enum operator op, + struct expression * const *args)); + static inline struct expression *new_exp_0 PARAMS ((enum operator op)); + static inline struct expression *new_exp_1 PARAMS ((enum operator op, + struct expression *right)); + static struct expression *new_exp_2 PARAMS ((enum operator op, + struct expression *left, + struct expression *right)); + static inline struct expression *new_exp_3 PARAMS ((enum operator op, + struct expression *bexp, + struct expression *tbranch, + struct expression *fbranch)); + static int yylex PARAMS ((YYSTYPE *lval, const char **pexp)); + static void yyerror PARAMS ((const char *str)); + + /* Allocation of expressions. */ + + static struct expression * + new_exp (nargs, op, args) + int nargs; + enum operator op; + struct expression * const *args; + { + int i; + struct expression *newp; + + /* If any of the argument could not be malloc'ed, just return NULL. */ + for (i = nargs - 1; i >= 0; i--) + if (args[i] == NULL) + goto fail; + + /* Allocate a new expression. */ + newp = (struct expression *) malloc (sizeof (*newp)); + if (newp != NULL) + { + newp->nargs = nargs; + newp->operation = op; + for (i = nargs - 1; i >= 0; i--) + newp->val.args[i] = args[i]; + return newp; + } + + fail: + for (i = nargs - 1; i >= 0; i--) + FREE_EXPRESSION (args[i]); + + return NULL; + } + + static inline struct expression * + new_exp_0 (op) + enum operator op; + { + return new_exp (0, op, NULL); + } + + static inline struct expression * + new_exp_1 (op, right) + enum operator op; + struct expression *right; + { + struct expression *args[1]; + + args[0] = right; + return new_exp (1, op, args); + } + + static struct expression * + new_exp_2 (op, left, right) + enum operator op; + struct expression *left; + struct expression *right; + { + struct expression *args[2]; + + args[0] = left; + args[1] = right; + return new_exp (2, op, args); + } + + static inline struct expression * + new_exp_3 (op, bexp, tbranch, fbranch) + enum operator op; + struct expression *bexp; + struct expression *tbranch; + struct expression *fbranch; + { + struct expression *args[3]; + + args[0] = bexp; + args[1] = tbranch; + args[2] = fbranch; + return new_exp (3, op, args); + } + + %} + + /* This declares that all operators have the same associativity and the + precedence order as in C. See [Harbison, Steele: C, A Reference Manual]. + There is no unary minus and no bitwise operators. + Operators with the same syntactic behaviour have been merged into a single + token, to save space in the array generated by bison. */ + %right '?' /* ? */ + %left '|' /* || */ + %left '&' /* && */ + %left EQUOP2 /* == != */ + %left CMPOP2 /* < > <= >= */ + %left ADDOP2 /* + - */ + %left MULOP2 /* * / % */ + %right '!' /* ! */ + + %token EQUOP2 CMPOP2 ADDOP2 MULOP2 + %token NUMBER + %type exp + + %% + + start: exp + { + if ($1 == NULL) + YYABORT; + ((struct parse_args *) arg)->res = $1; + } + ; + + exp: exp '?' exp ':' exp + { + $$ = new_exp_3 (qmop, $1, $3, $5); + } + | exp '|' exp + { + $$ = new_exp_2 (lor, $1, $3); + } + | exp '&' exp + { + $$ = new_exp_2 (land, $1, $3); + } + | exp EQUOP2 exp + { + $$ = new_exp_2 ($2, $1, $3); + } + | exp CMPOP2 exp + { + $$ = new_exp_2 ($2, $1, $3); + } + | exp ADDOP2 exp + { + $$ = new_exp_2 ($2, $1, $3); + } + | exp MULOP2 exp + { + $$ = new_exp_2 ($2, $1, $3); + } + | '!' exp + { + $$ = new_exp_1 (lnot, $2); + } + | 'n' + { + $$ = new_exp_0 (var); + } + | NUMBER + { + if (($$ = new_exp_0 (num)) != NULL) + $$->val.num = $1; + } + | '(' exp ')' + { + $$ = $2; + } + ; + + %% + + void + internal_function + FREE_EXPRESSION (exp) + struct expression *exp; + { + if (exp == NULL) + return; + + /* Handle the recursive case. */ + switch (exp->nargs) + { + case 3: + FREE_EXPRESSION (exp->val.args[2]); + /* FALLTHROUGH */ + case 2: + FREE_EXPRESSION (exp->val.args[1]); + /* FALLTHROUGH */ + case 1: + FREE_EXPRESSION (exp->val.args[0]); + /* FALLTHROUGH */ + default: + break; + } + + free (exp); + } + + + static int + yylex (lval, pexp) + YYSTYPE *lval; + const char **pexp; + { + const char *exp = *pexp; + int result; + + while (1) + { + if (exp[0] == '\0') + { + *pexp = exp; + return YYEOF; + } + + if (exp[0] != ' ' && exp[0] != '\t') + break; + + ++exp; + } + + result = *exp++; + switch (result) + { + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + { + unsigned long int n = result - '0'; + while (exp[0] >= '0' && exp[0] <= '9') + { + n *= 10; + n += exp[0] - '0'; + ++exp; + } + lval->num = n; + result = NUMBER; + } + break; + + case '=': + if (exp[0] == '=') + { + ++exp; + lval->op = equal; + result = EQUOP2; + } + else + result = YYERRCODE; + break; + + case '!': + if (exp[0] == '=') + { + ++exp; + lval->op = not_equal; + result = EQUOP2; + } + break; + + case '&': + case '|': + if (exp[0] == result) + ++exp; + else + result = YYERRCODE; + break; + + case '<': + if (exp[0] == '=') + { + ++exp; + lval->op = less_or_equal; + } + else + lval->op = less_than; + result = CMPOP2; + break; + + case '>': + if (exp[0] == '=') + { + ++exp; + lval->op = greater_or_equal; + } + else + lval->op = greater_than; + result = CMPOP2; + break; + + case '*': + lval->op = mult; + result = MULOP2; + break; + + case '/': + lval->op = divide; + result = MULOP2; + break; + + case '%': + lval->op = module; + result = MULOP2; + break; + + case '+': + lval->op = plus; + result = ADDOP2; + break; + + case '-': + lval->op = minus; + result = ADDOP2; + break; + + case 'n': + case '?': + case ':': + case '(': + case ')': + /* Nothing, just return the character. */ + break; + + case ';': + case '\n': + case '\0': + /* Be safe and let the user call this function again. */ + --exp; + result = YYEOF; + break; + + default: + result = YYERRCODE; + #if YYDEBUG != 0 + --exp; + #endif + break; + } + + *pexp = exp; + + return result; + } + + #if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) + #define __attribute__(x) + #endif + + static void + yyerror (str) + const char *str __attribute__ ((__unused__)); + { + /* Do nothing. We don't print error messages here. */ + } diff -Nrc3pad gcc-3.0.4/gcc/intl/po2tbl.sed.in gcc-3.1/gcc/intl/po2tbl.sed.in *** gcc-3.0.4/gcc/intl/po2tbl.sed.in Sat May 26 00:48:14 2001 --- gcc-3.1/gcc/intl/po2tbl.sed.in Thu Jan 1 00:00:00 1970 *************** *** 1,102 **** - # po2tbl.sed - Convert Uniforum style .po file to lookup table for catgets - # Copyright (C) 1995 Free Software Foundation, Inc. - # Ulrich Drepper , 1995. - # - # 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, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - # - 1 { - i\ - /* Automatically generated by po2tbl.sed from @PACKAGE@.pot. */\ - \ - #if HAVE_CONFIG_H\ - # include \ - #endif\ - \ - #include "libgettext.h"\ - \ - const struct _msg_ent _msg_tbl[] = { - h - s/.*/0/ - x - } - # - # Write msgid entries in C array form. - # - /^msgid/ { - s/msgid[ ]*\(".*"\)/ {\1/ - tb - # Append the next line - :b - N - # Look whether second part is continuation line. - s/\(.*\)"\(\n\)"\(.*"\)/\1\2\3/ - # Yes, then branch. - ta - # Because we assume that the input file correctly formed the line - # just read cannot be again be a msgid line. So it's safe to ignore - # it. - s/\(.*\)\n.*/\1/ - bc - # We found a continuation line. But before printing insert '\'. - :a - s/\(.*\)\(\n.*\)/\1\\\2/ - P - # We cannot use D here. - s/.*\n\(.*\)/\1/ - # Some buggy seds do not clear the `successful substitution since last ``t''' - # flag on `N', so we do a `t' here to clear it. - tb - # Not reached - :c - x - # The following nice solution is by - # Bruno - td - # Increment a decimal number in pattern space. - # First hide trailing `9' digits. - :d - s/9\(_*\)$/_\1/ - td - # Assure at least one digit is available. - s/^\(_*\)$/0\1/ - # Increment the last digit. - s/8\(_*\)$/9\1/ - s/7\(_*\)$/8\1/ - s/6\(_*\)$/7\1/ - s/5\(_*\)$/6\1/ - s/4\(_*\)$/5\1/ - s/3\(_*\)$/4\1/ - s/2\(_*\)$/3\1/ - s/1\(_*\)$/2\1/ - s/0\(_*\)$/1\1/ - # Convert the hidden `9' digits to `0's. - s/_/0/g - x - G - s/\(.*\)\n\([0-9]*\)/\1, \2},/ - s/\(.*\)"$/\1/ - p - } - # - # Last line. - # - $ { - i\ - };\ - - g - s/0*\(.*\)/int _msg_tbl_length = \1;/p - } - d --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/intl/ref-add.sin gcc-3.1/gcc/intl/ref-add.sin *** gcc-3.0.4/gcc/intl/ref-add.sin Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/intl/ref-add.sin Fri Oct 12 17:24:30 2001 *************** *** 0 **** --- 1,31 ---- + # Add this package to a list of references stored in a text file. + # + # Copyright (C) 2000 Free Software Foundation, Inc. + # + # This program is free software; you can redistribute it and/or modify it + # under the terms of the GNU Library 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 + # Library General Public License for more details. + # + # You should have received a copy of the GNU Library General Public + # License along with this program; if not, write to the Free Software + # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + # USA. + # + # Written by Bruno Haible . + # + /^# Packages using this file: / { + s/# Packages using this file:// + ta + :a + s/ @PACKAGE@ / @PACKAGE@ / + tb + s/ $/ @PACKAGE@ / + :b + s/^/# Packages using this file:/ + } diff -Nrc3pad gcc-3.0.4/gcc/intl/ref-del.sin gcc-3.1/gcc/intl/ref-del.sin *** gcc-3.0.4/gcc/intl/ref-del.sin Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/intl/ref-del.sin Fri Oct 12 17:24:30 2001 *************** *** 0 **** --- 1,26 ---- + # Remove this package from a list of references stored in a text file. + # + # Copyright (C) 2000 Free Software Foundation, Inc. + # + # This program is free software; you can redistribute it and/or modify it + # under the terms of the GNU Library 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 + # Library General Public License for more details. + # + # You should have received a copy of the GNU Library General Public + # License along with this program; if not, write to the Free Software + # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + # USA. + # + # Written by Bruno Haible . + # + /^# Packages using this file: / { + s/# Packages using this file:// + s/ @PACKAGE@ / / + s/^/# Packages using this file:/ + } diff -Nrc3pad gcc-3.0.4/gcc/intl/textdomain.c gcc-3.1/gcc/intl/textdomain.c *** gcc-3.0.4/gcc/intl/textdomain.c Mon Sep 18 22:05:52 2000 --- gcc-3.1/gcc/intl/textdomain.c Fri Oct 12 17:24:30 2001 *************** *** 1,42 **** /* Implementation of the textdomain(3) function. ! Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. ! Written by Ulrich Drepper , 1995. ! 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, ! Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include #endif ! #if defined STDC_HEADERS || defined _LIBC ! # include ! #endif ! #if defined STDC_HEADERS || defined HAVE_STRING_H || defined _LIBC ! # include #else ! # include ! # ifndef memcpy ! # define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num) ! # endif #endif #ifdef _LIBC ! # include #else ! # include "libgettext.h" #endif /* The internal variables in the standalone libintl.a must have different --- 1,43 ---- /* Implementation of the textdomain(3) function. ! Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc. ! This program is free software; you can redistribute it and/or modify it ! under the terms of the GNU Library 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 ! Library General Public License for more details. ! You should have received a copy of the GNU Library General Public ! License along with this program; if not, write to the Free Software ! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, ! USA. */ #ifdef HAVE_CONFIG_H # include #endif ! #include ! #include ! #ifdef _LIBC ! # include #else ! # include "libgnuintl.h" #endif + #include "gettextP.h" #ifdef _LIBC ! /* We have to handle multi-threaded applications. */ ! # include #else ! /* Provide dummy implementation if this is outside glibc. */ ! # define __libc_rwlock_define(CLASS, NAME) ! # define __libc_rwlock_wrlock(NAME) ! # define __libc_rwlock_unlock(NAME) #endif /* The internal variables in the standalone libintl.a must have different *************** extern const char *_nl_current_default_d *** 69,74 **** --- 70,78 ---- # define TEXTDOMAIN textdomain__ #endif + /* Lock variable to protect the global data in the gettext implementation. */ + __libc_rwlock_define (extern, _nl_state_lock) + /* Set the current default message catalog to DOMAINNAME. If DOMAINNAME is null, return the current default. If DOMAINNAME is "", reset to the default of "messages". */ *************** char * *** 76,113 **** TEXTDOMAIN (domainname) const char *domainname; { ! char *old; /* A NULL pointer requests the current setting. */ if (domainname == NULL) return (char *) _nl_current_default_domain; ! old = (char *) _nl_current_default_domain; /* If domain name is the null string set to default domain "messages". */ if (domainname[0] == '\0' || strcmp (domainname, _nl_default_default_domain) == 0) ! _nl_current_default_domain = _nl_default_default_domain; else { /* If the following malloc fails `_nl_current_default_domain' will be NULL. This value will be returned and so signals we are out of core. */ #if defined _LIBC || defined HAVE_STRDUP ! _nl_current_default_domain = strdup (domainname); #else size_t len = strlen (domainname) + 1; ! char *cp = (char *) malloc (len); ! if (cp != NULL) ! memcpy (cp, domainname, len); ! _nl_current_default_domain = cp; #endif } ! if (old != _nl_default_default_domain) ! free (old); ! return (char *) _nl_current_default_domain; } #ifdef _LIBC --- 80,139 ---- TEXTDOMAIN (domainname) const char *domainname; { ! char *new_domain; ! char *old_domain; /* A NULL pointer requests the current setting. */ if (domainname == NULL) return (char *) _nl_current_default_domain; ! __libc_rwlock_wrlock (_nl_state_lock); ! ! old_domain = (char *) _nl_current_default_domain; /* If domain name is the null string set to default domain "messages". */ if (domainname[0] == '\0' || strcmp (domainname, _nl_default_default_domain) == 0) ! { ! _nl_current_default_domain = _nl_default_default_domain; ! new_domain = (char *) _nl_current_default_domain; ! } ! else if (strcmp (domainname, old_domain) == 0) ! /* This can happen and people will use it to signal that some ! environment variable changed. */ ! new_domain = old_domain; else { /* If the following malloc fails `_nl_current_default_domain' will be NULL. This value will be returned and so signals we are out of core. */ #if defined _LIBC || defined HAVE_STRDUP ! new_domain = strdup (domainname); #else size_t len = strlen (domainname) + 1; ! new_domain = (char *) malloc (len); ! if (new_domain != NULL) ! memcpy (new_domain, domainname, len); #endif + + if (new_domain != NULL) + _nl_current_default_domain = new_domain; } ! /* We use this possibility to signal a change of the loaded catalogs ! since this is most likely the case and there is no other easy we ! to do it. Do it only when the call was successful. */ ! if (new_domain != NULL) ! { ! ++_nl_msg_cat_cntr; ! if (old_domain != new_domain && old_domain != _nl_default_default_domain) ! free (old_domain); ! } ! ! __libc_rwlock_unlock (_nl_state_lock); ! ! return new_domain; } #ifdef _LIBC diff -Nrc3pad gcc-3.0.4/gcc/intl/xopen-msg.sed gcc-3.1/gcc/intl/xopen-msg.sed *** gcc-3.0.4/gcc/intl/xopen-msg.sed Sat Sep 4 15:08:49 1999 --- gcc-3.1/gcc/intl/xopen-msg.sed Thu Jan 1 00:00:00 1970 *************** *** 1,104 **** - # po2msg.sed - Convert Uniforum style .po file to X/Open style .msg file - # Copyright (C) 1995 Free Software Foundation, Inc. - # Ulrich Drepper , 1995. - # - # 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, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - # - # - # The first directive in the .msg should be the definition of the - # message set number. We use always set number 1. - # - 1 { - i\ - $set 1 # Automatically created by po2msg.sed - h - s/.*/0/ - x - } - # - # We copy all comments into the .msg file. Perhaps they can help. - # - /^#/ s/^#[ ]*/$ /p - # - # We copy the original message as a comment into the .msg file. - # - /^msgid/ { - # Does not work now - # /"$/! { - # s/\\$// - # s/$/ ... (more lines following)"/ - # } - s/^msgid[ ]*"\(.*\)"$/$ Original Message: \1/ - p - } - # - # The .msg file contains, other then the .po file, only the translations - # but each given a unique ID. Starting from 1 and incrementing by 1 for - # each message we assign them to the messages. - # It is important that the .po file used to generate the cat-id-tbl.c file - # (with po-to-tbl) is the same as the one used here. (At least the order - # of declarations must not be changed.) - # - /^msgstr/ { - s/msgstr[ ]*"\(.*\)"/\1/ - x - # The following nice solution is by - # Bruno - td - # Increment a decimal number in pattern space. - # First hide trailing `9' digits. - :d - s/9\(_*\)$/_\1/ - td - # Assure at least one digit is available. - s/^\(_*\)$/0\1/ - # Increment the last digit. - s/8\(_*\)$/9\1/ - s/7\(_*\)$/8\1/ - s/6\(_*\)$/7\1/ - s/5\(_*\)$/6\1/ - s/4\(_*\)$/5\1/ - s/3\(_*\)$/4\1/ - s/2\(_*\)$/3\1/ - s/1\(_*\)$/2\1/ - s/0\(_*\)$/1\1/ - # Convert the hidden `9' digits to `0's. - s/_/0/g - x - # Bring the line in the format ` ' - G - s/^[^\n]*$/& / - s/\(.*\)\n\([0-9]*\)/\2 \1/ - # Clear flag from last substitution. - tb - # Append the next line. - :b - N - # Look whether second part is a continuation line. - s/\(.*\n\)"\(.*\)"/\1\2/ - # Yes, then branch. - ta - P - D - # Note that `D' includes a jump to the start!! - # We found a continuation line. But before printing insert '\'. - :a - s/\(.*\)\(\n.*\)/\1\\\2/ - P - # We cannot use the sed command `D' here - s/.*\n\(.*\)/\1/ - tb - } - d --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/intl.c gcc-3.1/gcc/intl.c *** gcc-3.0.4/gcc/intl.c Sat Sep 4 15:08:54 1999 --- gcc-3.1/gcc/intl.c Tue Jan 8 19:03:18 2002 *************** *** 1,6 **** ! /* intl.c - internationalization */ ! #include "gansidecl.h" #include "intl.h" ! const char localedir[] = LOCALEDIR; --- 1,46 ---- ! /* Message translation utilities. ! Copyright (C) 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. ! ! You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ ! ! #include "config.h" ! #include "system.h" #include "intl.h" ! #ifdef ENABLE_NLS ! ! /* Initialize the translation library for GCC. This performs the ! appropriate sequence of calls - setlocale, bindtextdomain, ! textdomain. LC_CTYPE determines the character set used by the ! terminal, so it has be set to output messages correctly. */ ! ! void ! gcc_init_libintl () ! { ! #ifdef HAVE_LC_MESSAGES ! setlocale (LC_CTYPE, ""); ! setlocale (LC_MESSAGES, ""); ! #else ! setlocale (LC_ALL, ""); ! #endif ! ! (void) bindtextdomain ("gcc", LOCALEDIR); ! (void) textdomain ("gcc"); ! } ! ! #endif diff -Nrc3pad gcc-3.0.4/gcc/intl.h gcc-3.1/gcc/intl.h *** gcc-3.0.4/gcc/intl.h Sat Sep 4 15:08:54 1999 --- gcc-3.1/gcc/intl.h Fri Oct 19 15:17:36 2001 *************** *** 1,5 **** /* intl.h - internationalization ! Copyright 1998 Free Software Foundation, Inc. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by --- 1,5 ---- /* intl.h - internationalization ! Copyright 1998, 2001 Free Software Foundation, Inc. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by *************** *** 14,20 **** You should have received a copy of the GNU General Public License along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #ifdef HAVE_LOCALE_H # include --- 14,23 ---- You should have received a copy of the GNU General Public License along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ ! ! #ifndef GCC_INTL_H ! #define GCC_INTL_H #ifdef HAVE_LOCALE_H # include *************** *** 24,46 **** # define setlocale(category, locale) (locale) #endif ! #ifdef ENABLE_NLS ! # include ! extern const char localedir[]; #else ! /* Stubs that do something close enough. */ ! # ifdef textdomain ! # undef textdomain # endif # define textdomain(domain) (domain) ! # ifdef bindtextdomain ! # undef bindtextdomain ! # endif # define bindtextdomain(domain, directory) (domain) ! # ifdef gettext ! # undef gettext ! # endif # define gettext(msgid) (msgid) #endif #ifndef _ --- 27,53 ---- # define setlocale(category, locale) (locale) #endif ! #ifdef USE_INCLUDED_LIBINTL ! # include #else ! # ifdef HAVE_LIBINTL_H ! # include ! # else ! # undef ENABLE_NLS # endif + #endif + + #ifdef ENABLE_NLS + extern void gcc_init_libintl PARAMS ((void)); + #else + /* Stubs. */ + # undef textdomain # define textdomain(domain) (domain) ! # undef bindtextdomain # define bindtextdomain(domain, directory) (domain) ! # undef gettext # define gettext(msgid) (msgid) + # define gcc_init_libintl() /* nothing */ #endif #ifndef _ *************** *** 50,52 **** --- 57,61 ---- #ifndef N_ # define N_(msgid) (msgid) #endif + + #endif /* intl.h */ diff -Nrc3pad gcc-3.0.4/gcc/jump.c gcc-3.1/gcc/jump.c *** gcc-3.0.4/gcc/jump.c Fri Jul 13 18:33:57 2001 --- gcc-3.1/gcc/jump.c Tue Apr 9 20:38:58 2002 *************** *** 1,32 **** /* Optimize jump instructions, for GNU compiler. Copyright (C) 1987, 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997 ! 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ ! ! /* This is the jump-optimization pass of the compiler. ! It is run two or three times: once before cse, sometimes once after cse, ! and once after reload (before final). ! jump_optimize deletes unreachable code and labels that are not used. ! It also deletes jumps that jump to the following insn, ! and simplifies jumps around unconditional jumps and jumps ! to unconditional jumps. Each CODE_LABEL has a count of the times it is used stored in the LABEL_NUSES internal field, and each JUMP_INSN --- 1,27 ---- /* Optimize jump instructions, for GNU compiler. Copyright (C) 1987, 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997 ! 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ ! /* This is the pathetic reminder of old fame of the jump-optimization pass ! of the compiler. Now it contains basically set of utility function to ! operate with jumps. Each CODE_LABEL has a count of the times it is used stored in the LABEL_NUSES internal field, and each JUMP_INSN *************** Boston, MA 02111-1307, USA. */ *** 36,53 **** formerly used them. The JUMP_LABEL info is sometimes looked at by later passes. - Optionally, cross-jumping can be done. Currently it is done - only the last time (when after reload and before final). - In fact, the code for cross-jumping now assumes that register - allocation has been done, since it uses `rtx_renumbered_equal_p'. - - Jump optimization is done after cse when cse's constant-propagation - causes jumps to become unconditional or to be deleted. - - Unreachable loops are not detected here, because the labels - have references and the insns appear reachable from the labels. - find_basic_blocks in flow.c finds and deletes such loops. - The subroutines delete_insn, redirect_jump, and invert_jump are used from other passes as well. */ --- 31,36 ---- *************** Boston, MA 02111-1307, USA. */ *** 66,78 **** #include "real.h" #include "except.h" #include "toplev.h" - /* ??? Eventually must record somehow the labels used by jumps - from nested functions. */ - /* Pre-record the next or previous real insn for each label? - No, this pass is very fast anyway. */ - /* Condense consecutive labels? - This would make life analysis faster, maybe. */ /* Optimize jump y; x: ... y: jumpif... x? Don't know if it is worth bothering with. */ /* Optimize two cases of conditional jump to conditional jump? --- 49,57 ---- #include "real.h" #include "except.h" #include "toplev.h" + #include "reload.h" + #include "predict.h" /* Optimize jump y; x: ... y: jumpif... x? Don't know if it is worth bothering with. */ /* Optimize two cases of conditional jump to conditional jump? *************** Boston, MA 02111-1307, USA. */ *** 80,142 **** or even change what is live at any point. So perhaps let combiner do it. */ - /* Vector indexed by uid. - For each CODE_LABEL, index by its uid to get first unconditional jump - that jumps to the label. - For each JUMP_INSN, index by its uid to get the next unconditional jump - that jumps to the same label. - Element 0 is the start of a chain of all return insns. - (It is safe to use element 0 because insn uid 0 is not used. */ - - static rtx *jump_chain; - - /* Maximum index in jump_chain. */ - - static int max_jump_chain; - - /* Indicates whether death notes are significant in cross jump analysis. - Normally they are not significant, because of A and B jump to C, - and R dies in A, it must die in B. But this might not be true after - stack register conversion, and we must compare death notes in that - case. */ - - static int cross_jump_death_matters = 0; - static int init_label_info PARAMS ((rtx)); ! static void delete_barrier_successors PARAMS ((rtx)); ! static void mark_all_labels PARAMS ((rtx, int)); ! static rtx delete_unreferenced_labels PARAMS ((rtx)); ! static void delete_noop_moves PARAMS ((rtx)); static int duplicate_loop_exit_test PARAMS ((rtx)); - static void find_cross_jump PARAMS ((rtx, rtx, int, rtx *, rtx *)); - static void do_cross_jump PARAMS ((rtx, rtx, rtx)); - static int jump_back_p PARAMS ((rtx, rtx)); - static int tension_vector_labels PARAMS ((rtx, int)); static void delete_computation PARAMS ((rtx)); static void redirect_exp_1 PARAMS ((rtx *, rtx, rtx, rtx)); static int redirect_exp PARAMS ((rtx, rtx, rtx)); static void invert_exp_1 PARAMS ((rtx)); static int invert_exp PARAMS ((rtx)); - static void delete_from_jump_chain PARAMS ((rtx)); - static int delete_labelref_insn PARAMS ((rtx, rtx, int)); - static void mark_modified_reg PARAMS ((rtx, rtx, void *)); - static void redirect_tablejump PARAMS ((rtx, rtx)); - static void jump_optimize_1 PARAMS ((rtx, int, int, int, int, int)); static int returnjump_p_1 PARAMS ((rtx *, void *)); static void delete_prior_computation PARAMS ((rtx, rtx)); - /* Main external entry point into the jump optimizer. See comments before - jump_optimize_1 for descriptions of the arguments. */ - void - jump_optimize (f, cross_jump, noop_moves, after_regscan) - rtx f; - int cross_jump; - int noop_moves; - int after_regscan; - { - jump_optimize_1 (f, cross_jump, noop_moves, after_regscan, 0, 0); - } - /* Alternate entry into the jump optimizer. This entry point only rebuilds the JUMP_LABEL field in jumping insns and REG_LABEL notes in non-jumping instructions. */ --- 59,75 ---- or even change what is live at any point. So perhaps let combiner do it. */ static int init_label_info PARAMS ((rtx)); ! static void mark_all_labels PARAMS ((rtx)); static int duplicate_loop_exit_test PARAMS ((rtx)); static void delete_computation PARAMS ((rtx)); static void redirect_exp_1 PARAMS ((rtx *, rtx, rtx, rtx)); static int redirect_exp PARAMS ((rtx, rtx, rtx)); static void invert_exp_1 PARAMS ((rtx)); static int invert_exp PARAMS ((rtx)); static int returnjump_p_1 PARAMS ((rtx *, void *)); static void delete_prior_computation PARAMS ((rtx, rtx)); /* Alternate entry into the jump optimizer. This entry point only rebuilds the JUMP_LABEL field in jumping insns and REG_LABEL notes in non-jumping instructions. */ *************** void *** 144,222 **** rebuild_jump_labels (f) rtx f; { ! jump_optimize_1 (f, 0, 0, 0, 1, 0); ! } ! ! /* Alternate entry into the jump optimizer. Do only trivial optimizations. */ ! ! void ! jump_optimize_minimal (f) ! rtx f; ! { ! jump_optimize_1 (f, 0, 0, 0, 0, 1); ! } ! ! /* Delete no-op jumps and optimize jumps to jumps ! and jumps around jumps. ! Delete unused labels and unreachable code. ! ! If CROSS_JUMP is 1, detect matching code ! before a jump and its destination and unify them. ! If CROSS_JUMP is 2, do cross-jumping, but pay attention to death notes. ! ! If NOOP_MOVES is nonzero, delete no-op move insns. ! ! If AFTER_REGSCAN is nonzero, then this jump pass is being run immediately ! after regscan, and it is safe to use regno_first_uid and regno_last_uid. ! ! If MARK_LABELS_ONLY is nonzero, then we only rebuild the jump chain ! and JUMP_LABEL field for jumping insns. ! ! If `optimize' is zero, don't change any code, ! just determine whether control drops off the end of the function. ! This case occurs when we have -W and not -O. ! It works because `delete_insn' checks the value of `optimize' ! and refrains from actually deleting when that is 0. ! ! If MINIMAL is nonzero, then we only perform trivial optimizations: ! ! * Removal of unreachable code after BARRIERs. ! * Removal of unreferenced CODE_LABELs. ! * Removal of a jump to the next instruction. ! * Removal of a conditional jump followed by an unconditional jump ! to the same target as the conditional jump. ! * Simplify a conditional jump around an unconditional jump. ! * Simplify a jump to a jump. ! * Delete extraneous line number notes. ! */ ! ! static void ! jump_optimize_1 (f, cross_jump, noop_moves, after_regscan, ! mark_labels_only, minimal) ! rtx f; ! int cross_jump; ! int noop_moves; ! int after_regscan; ! int mark_labels_only; ! int minimal; ! { ! register rtx insn, next; ! int changed; ! int old_max_reg; ! int first = 1; int max_uid = 0; - rtx last_insn; - enum rtx_code reversed_code; - cross_jump_death_matters = (cross_jump == 2); max_uid = init_label_info (f) + 1; ! /* Leave some extra room for labels and duplicate exit test insns ! we make. */ ! max_jump_chain = max_uid * 14 / 10; ! jump_chain = (rtx *) xcalloc (max_jump_chain, sizeof (rtx)); ! ! mark_all_labels (f, cross_jump); /* Keep track of labels used from static data; we don't track them closely enough to delete them here, so make sure their reference --- 77,88 ---- rebuild_jump_labels (f) rtx f; { ! rtx insn; int max_uid = 0; max_uid = init_label_info (f) + 1; ! mark_all_labels (f); /* Keep track of labels used from static data; we don't track them closely enough to delete them here, so make sure their reference *************** jump_optimize_1 (f, cross_jump, noop_mov *** 225,764 **** for (insn = forced_labels; insn; insn = XEXP (insn, 1)) if (GET_CODE (XEXP (insn, 0)) == CODE_LABEL) LABEL_NUSES (XEXP (insn, 0))++; ! /* Keep track of labels used for marking handlers for exception ! regions; they cannot usually be deleted. */ ! ! for (insn = exception_handler_labels; insn; insn = XEXP (insn, 1)) ! if (GET_CODE (XEXP (insn, 0)) == CODE_LABEL) ! LABEL_NUSES (XEXP (insn, 0))++; ! ! /* Quit now if we just wanted to rebuild the JUMP_LABEL and REG_LABEL ! notes and recompute LABEL_NUSES. */ ! if (mark_labels_only) ! goto end; ! ! delete_barrier_successors (f); ! ! last_insn = delete_unreferenced_labels (f); ! ! if (noop_moves) ! delete_noop_moves (f); ! ! /* If we haven't yet gotten to reload and we have just run regscan, ! delete any insn that sets a register that isn't used elsewhere. ! This helps some of the optimizations below by having less insns ! being jumped around. */ ! ! if (optimize && ! reload_completed && after_regscan) ! for (insn = f; insn; insn = next) ! { ! rtx set = single_set (insn); ! ! next = NEXT_INSN (insn); ! ! if (set && GET_CODE (SET_DEST (set)) == REG ! && REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER ! && REGNO_FIRST_UID (REGNO (SET_DEST (set))) == INSN_UID (insn) ! /* We use regno_last_note_uid so as not to delete the setting ! of a reg that's used in notes. A subsequent optimization ! might arrange to use that reg for real. */ ! && REGNO_LAST_NOTE_UID (REGNO (SET_DEST (set))) == INSN_UID (insn) ! && ! side_effects_p (SET_SRC (set)) ! && ! find_reg_note (insn, REG_RETVAL, 0) ! /* An ADDRESSOF expression can turn into a use of the internal arg ! pointer, so do not delete the initialization of the internal ! arg pointer yet. If it is truly dead, flow will delete the ! initializing insn. */ ! && SET_DEST (set) != current_function_internal_arg_pointer) ! delete_insn (insn); ! } ! ! /* Now iterate optimizing jumps until nothing changes over one pass. */ ! changed = 1; ! old_max_reg = max_reg_num (); ! while (changed) { ! changed = 0; ! ! for (insn = f; insn; insn = next) { ! rtx reallabelprev; ! rtx temp, temp1, temp2 = NULL_RTX; ! rtx temp4 ATTRIBUTE_UNUSED; ! rtx nlabel; ! int this_is_any_uncondjump; ! int this_is_any_condjump; ! int this_is_onlyjump; ! ! next = NEXT_INSN (insn); ! ! /* See if this is a NOTE_INSN_LOOP_BEG followed by an unconditional ! jump. Try to optimize by duplicating the loop exit test if so. ! This is only safe immediately after regscan, because it uses ! the values of regno_first_uid and regno_last_uid. */ ! if (after_regscan && GET_CODE (insn) == NOTE ! && NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG ! && (temp1 = next_nonnote_insn (insn)) != 0 ! && any_uncondjump_p (temp1) ! && onlyjump_p (temp1)) ! { ! temp = PREV_INSN (insn); ! if (duplicate_loop_exit_test (insn)) ! { ! changed = 1; ! next = NEXT_INSN (temp); ! continue; ! } ! } ! ! if (GET_CODE (insn) != JUMP_INSN) ! continue; ! ! this_is_any_condjump = any_condjump_p (insn); ! this_is_any_uncondjump = any_uncondjump_p (insn); ! this_is_onlyjump = onlyjump_p (insn); ! ! /* Tension the labels in dispatch tables. */ ! ! if (GET_CODE (PATTERN (insn)) == ADDR_VEC) ! changed |= tension_vector_labels (PATTERN (insn), 0); ! if (GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC) ! changed |= tension_vector_labels (PATTERN (insn), 1); ! ! /* See if this jump goes to another jump and redirect if so. */ ! nlabel = follow_jumps (JUMP_LABEL (insn)); ! if (nlabel != JUMP_LABEL (insn)) ! changed |= redirect_jump (insn, nlabel, 1); ! ! if (! optimize || minimal) ! continue; ! ! /* If a dispatch table always goes to the same place, ! get rid of it and replace the insn that uses it. */ ! ! if (GET_CODE (PATTERN (insn)) == ADDR_VEC ! || GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC) ! { ! int i; ! rtx pat = PATTERN (insn); ! int diff_vec_p = GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC; ! int len = XVECLEN (pat, diff_vec_p); ! rtx dispatch = prev_real_insn (insn); ! rtx set; ! ! for (i = 0; i < len; i++) ! if (XEXP (XVECEXP (pat, diff_vec_p, i), 0) ! != XEXP (XVECEXP (pat, diff_vec_p, 0), 0)) ! break; ! ! if (i == len ! && dispatch != 0 ! && GET_CODE (dispatch) == JUMP_INSN ! && JUMP_LABEL (dispatch) != 0 ! /* Don't mess with a casesi insn. ! XXX according to the comment before computed_jump_p(), ! all casesi insns should be a parallel of the jump ! and a USE of a LABEL_REF. */ ! && ! ((set = single_set (dispatch)) != NULL ! && (GET_CODE (SET_SRC (set)) == IF_THEN_ELSE)) ! && next_real_insn (JUMP_LABEL (dispatch)) == insn) ! { ! redirect_tablejump (dispatch, ! XEXP (XVECEXP (pat, diff_vec_p, 0), 0)); ! changed = 1; ! } ! } ! ! reallabelprev = prev_active_insn (JUMP_LABEL (insn)); ! ! /* Detect jump to following insn. */ ! if (reallabelprev == insn ! && (this_is_any_condjump || this_is_any_uncondjump) ! && this_is_onlyjump) ! { ! next = next_real_insn (JUMP_LABEL (insn)); ! delete_jump (insn); ! ! /* Remove the "inactive" but "real" insns (i.e. uses and ! clobbers) in between here and there. */ ! temp = insn; ! while ((temp = next_real_insn (temp)) != next) ! delete_insn (temp); ! ! changed = 1; ! continue; ! } ! ! /* Detect a conditional jump going to the same place ! as an immediately following unconditional jump. */ ! else if (this_is_any_condjump && this_is_onlyjump ! && (temp = next_active_insn (insn)) != 0 ! && simplejump_p (temp) ! && (next_active_insn (JUMP_LABEL (insn)) ! == next_active_insn (JUMP_LABEL (temp)))) ! { ! /* Don't mess up test coverage analysis. */ ! temp2 = temp; ! if (flag_test_coverage && !reload_completed) ! for (temp2 = insn; temp2 != temp; temp2 = NEXT_INSN (temp2)) ! if (GET_CODE (temp2) == NOTE && NOTE_LINE_NUMBER (temp2) > 0) ! break; ! ! if (temp2 == temp) ! { ! /* Ensure that we jump to the later of the two labels. ! Consider: ! ! if (test) goto L2; ! goto L1; ! ... ! L1: ! (clobber return-reg) ! L2: ! (use return-reg) ! ! If we leave the goto L1, we'll incorrectly leave ! return-reg dead for TEST true. */ ! ! temp2 = next_active_insn (JUMP_LABEL (insn)); ! if (!temp2) ! temp2 = get_last_insn (); ! if (GET_CODE (temp2) != CODE_LABEL) ! temp2 = prev_label (temp2); ! if (temp2 != JUMP_LABEL (temp)) ! redirect_jump (temp, temp2, 1); ! ! delete_jump (insn); ! changed = 1; ! continue; ! } ! } ! ! /* Detect a conditional jump jumping over an unconditional jump. */ ! ! else if (this_is_any_condjump ! && reallabelprev != 0 ! && GET_CODE (reallabelprev) == JUMP_INSN ! && prev_active_insn (reallabelprev) == insn ! && no_labels_between_p (insn, reallabelprev) ! && any_uncondjump_p (reallabelprev) ! && onlyjump_p (reallabelprev)) ! { ! /* When we invert the unconditional jump, we will be ! decrementing the usage count of its old label. ! Make sure that we don't delete it now because that ! might cause the following code to be deleted. */ ! rtx prev_uses = prev_nonnote_insn (reallabelprev); ! rtx prev_label = JUMP_LABEL (insn); ! ! if (prev_label) ! ++LABEL_NUSES (prev_label); ! ! if (invert_jump (insn, JUMP_LABEL (reallabelprev), 1)) ! { ! /* It is very likely that if there are USE insns before ! this jump, they hold REG_DEAD notes. These REG_DEAD ! notes are no longer valid due to this optimization, ! and will cause the life-analysis that following passes ! (notably delayed-branch scheduling) to think that ! these registers are dead when they are not. ! ! To prevent this trouble, we just remove the USE insns ! from the insn chain. */ ! ! while (prev_uses && GET_CODE (prev_uses) == INSN ! && GET_CODE (PATTERN (prev_uses)) == USE) ! { ! rtx useless = prev_uses; ! prev_uses = prev_nonnote_insn (prev_uses); ! delete_insn (useless); ! } ! ! delete_insn (reallabelprev); ! changed = 1; ! } ! ! /* We can now safely delete the label if it is unreferenced ! since the delete_insn above has deleted the BARRIER. */ ! if (prev_label && --LABEL_NUSES (prev_label) == 0) ! delete_insn (prev_label); ! ! next = NEXT_INSN (insn); ! } ! ! /* If we have an unconditional jump preceded by a USE, try to put ! the USE before the target and jump there. This simplifies many ! of the optimizations below since we don't have to worry about ! dealing with these USE insns. We only do this if the label ! being branch to already has the identical USE or if code ! never falls through to that label. */ ! ! else if (this_is_any_uncondjump ! && (temp = prev_nonnote_insn (insn)) != 0 ! && GET_CODE (temp) == INSN ! && GET_CODE (PATTERN (temp)) == USE ! && (temp1 = prev_nonnote_insn (JUMP_LABEL (insn))) != 0 ! && (GET_CODE (temp1) == BARRIER ! || (GET_CODE (temp1) == INSN ! && rtx_equal_p (PATTERN (temp), PATTERN (temp1)))) ! /* Don't do this optimization if we have a loop containing ! only the USE instruction, and the loop start label has ! a usage count of 1. This is because we will redo this ! optimization everytime through the outer loop, and jump ! opt will never exit. */ ! && ! ((temp2 = prev_nonnote_insn (temp)) != 0 ! && temp2 == JUMP_LABEL (insn) ! && LABEL_NUSES (temp2) == 1)) ! { ! if (GET_CODE (temp1) == BARRIER) ! { ! emit_insn_after (PATTERN (temp), temp1); ! temp1 = NEXT_INSN (temp1); ! } ! ! delete_insn (temp); ! redirect_jump (insn, get_label_before (temp1), 1); ! reallabelprev = prev_real_insn (temp1); ! changed = 1; ! next = NEXT_INSN (insn); ! } ! ! #ifdef HAVE_trap ! /* Detect a conditional jump jumping over an unconditional trap. */ ! if (HAVE_trap ! && this_is_any_condjump && this_is_onlyjump ! && reallabelprev != 0 ! && GET_CODE (reallabelprev) == INSN ! && GET_CODE (PATTERN (reallabelprev)) == TRAP_IF ! && TRAP_CONDITION (PATTERN (reallabelprev)) == const_true_rtx ! && prev_active_insn (reallabelprev) == insn ! && no_labels_between_p (insn, reallabelprev) ! && (temp2 = get_condition (insn, &temp4)) ! && ((reversed_code = reversed_comparison_code (temp2, insn)) ! != UNKNOWN)) ! { ! rtx new = gen_cond_trap (reversed_code, ! XEXP (temp2, 0), XEXP (temp2, 1), ! TRAP_CODE (PATTERN (reallabelprev))); ! if (new) ! { ! emit_insn_before (new, temp4); ! delete_insn (reallabelprev); ! delete_jump (insn); ! changed = 1; ! continue; ! } ! } ! /* Detect a jump jumping to an unconditional trap. */ ! else if (HAVE_trap && this_is_onlyjump ! && (temp = next_active_insn (JUMP_LABEL (insn))) ! && GET_CODE (temp) == INSN ! && GET_CODE (PATTERN (temp)) == TRAP_IF ! && (this_is_any_uncondjump ! || (this_is_any_condjump ! && (temp2 = get_condition (insn, &temp4))))) ! { ! rtx tc = TRAP_CONDITION (PATTERN (temp)); ! if (tc == const_true_rtx ! || (! this_is_any_uncondjump && rtx_equal_p (temp2, tc))) ! { ! rtx new; ! /* Replace an unconditional jump to a trap with a trap. */ ! if (this_is_any_uncondjump) ! { ! emit_barrier_after (emit_insn_before (gen_trap (), insn)); ! delete_jump (insn); ! changed = 1; ! continue; ! } ! new = gen_cond_trap (GET_CODE (temp2), XEXP (temp2, 0), ! XEXP (temp2, 1), ! TRAP_CODE (PATTERN (temp))); ! if (new) ! { ! emit_insn_before (new, temp4); ! delete_jump (insn); ! changed = 1; ! continue; ! } ! } ! /* If the trap condition and jump condition are mutually ! exclusive, redirect the jump to the following insn. */ ! else if (GET_RTX_CLASS (GET_CODE (tc)) == '<' ! && this_is_any_condjump ! && swap_condition (GET_CODE (temp2)) == GET_CODE (tc) ! && rtx_equal_p (XEXP (tc, 0), XEXP (temp2, 0)) ! && rtx_equal_p (XEXP (tc, 1), XEXP (temp2, 1)) ! && redirect_jump (insn, get_label_after (temp), 1)) ! { ! changed = 1; ! continue; ! } ! } ! #endif ! else { ! /* Now that the jump has been tensioned, ! try cross jumping: check for identical code ! before the jump and before its target label. */ ! ! /* First, cross jumping of conditional jumps: */ ! ! if (cross_jump && condjump_p (insn)) ! { ! rtx newjpos, newlpos; ! rtx x = prev_real_insn (JUMP_LABEL (insn)); ! ! /* A conditional jump may be crossjumped ! only if the place it jumps to follows ! an opposing jump that comes back here. */ ! ! if (x != 0 && ! jump_back_p (x, insn)) ! /* We have no opposing jump; ! cannot cross jump this insn. */ ! x = 0; ! ! newjpos = 0; ! /* TARGET is nonzero if it is ok to cross jump ! to code before TARGET. If so, see if matches. */ ! if (x != 0) ! find_cross_jump (insn, x, 2, ! &newjpos, &newlpos); ! ! if (newjpos != 0) ! { ! do_cross_jump (insn, newjpos, newlpos); ! /* Make the old conditional jump ! into an unconditional one. */ ! SET_SRC (PATTERN (insn)) ! = gen_rtx_LABEL_REF (VOIDmode, JUMP_LABEL (insn)); ! INSN_CODE (insn) = -1; ! emit_barrier_after (insn); ! /* Add to jump_chain unless this is a new label ! whose UID is too large. */ ! if (INSN_UID (JUMP_LABEL (insn)) < max_jump_chain) ! { ! jump_chain[INSN_UID (insn)] ! = jump_chain[INSN_UID (JUMP_LABEL (insn))]; ! jump_chain[INSN_UID (JUMP_LABEL (insn))] = insn; ! } ! changed = 1; ! next = insn; ! } ! } ! ! /* Cross jumping of unconditional jumps: ! a few differences. */ ! ! if (cross_jump && simplejump_p (insn)) ! { ! rtx newjpos, newlpos; ! rtx target; ! ! newjpos = 0; ! ! /* TARGET is nonzero if it is ok to cross jump ! to code before TARGET. If so, see if matches. */ ! find_cross_jump (insn, JUMP_LABEL (insn), 1, ! &newjpos, &newlpos); ! ! /* If cannot cross jump to code before the label, ! see if we can cross jump to another jump to ! the same label. */ ! /* Try each other jump to this label. */ ! if (INSN_UID (JUMP_LABEL (insn)) < max_uid) ! for (target = jump_chain[INSN_UID (JUMP_LABEL (insn))]; ! target != 0 && newjpos == 0; ! target = jump_chain[INSN_UID (target)]) ! if (target != insn ! && JUMP_LABEL (target) == JUMP_LABEL (insn) ! /* Ignore TARGET if it's deleted. */ ! && ! INSN_DELETED_P (target)) ! find_cross_jump (insn, target, 2, ! &newjpos, &newlpos); ! ! if (newjpos != 0) ! { ! do_cross_jump (insn, newjpos, newlpos); ! changed = 1; ! next = insn; ! } ! } ! ! /* This code was dead in the previous jump.c! */ ! if (cross_jump && GET_CODE (PATTERN (insn)) == RETURN) ! { ! /* Return insns all "jump to the same place" ! so we can cross-jump between any two of them. */ ! ! rtx newjpos, newlpos, target; ! ! newjpos = 0; ! ! /* If cannot cross jump to code before the label, ! see if we can cross jump to another jump to ! the same label. */ ! /* Try each other jump to this label. */ ! for (target = jump_chain[0]; ! target != 0 && newjpos == 0; ! target = jump_chain[INSN_UID (target)]) ! if (target != insn ! && ! INSN_DELETED_P (target) ! && GET_CODE (PATTERN (target)) == RETURN) ! find_cross_jump (insn, target, 2, ! &newjpos, &newlpos); ! ! if (newjpos != 0) ! { ! do_cross_jump (insn, newjpos, newlpos); ! changed = 1; ! next = insn; ! } ! } } } - - first = 0; } /* Delete extraneous line number notes. Note that two consecutive notes for different lines are not really extraneous. There should be some indication where that line belonged, even if it became empty. */ ! { ! rtx last_note = 0; ! ! for (insn = f; insn; insn = NEXT_INSN (insn)) ! if (GET_CODE (insn) == NOTE) ! { ! if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_FUNCTION_BEG) ! /* Any previous line note was for the prologue; gdb wants a new ! note after the prologue even if it is for the same line. */ ! last_note = NULL_RTX; ! else if (NOTE_LINE_NUMBER (insn) >= 0) ! { ! /* Delete this note if it is identical to previous note. */ ! if (last_note ! && NOTE_SOURCE_FILE (insn) == NOTE_SOURCE_FILE (last_note) ! && NOTE_LINE_NUMBER (insn) == NOTE_LINE_NUMBER (last_note)) ! { ! delete_insn (insn); ! continue; ! } ! ! last_note = insn; ! } ! } ! } ! end: ! /* Clean up. */ ! free (jump_chain); ! jump_chain = 0; } /* Initialize LABEL_NUSES and JUMP_LABEL fields. Delete any REG_LABEL --- 91,186 ---- for (insn = forced_labels; insn; insn = XEXP (insn, 1)) if (GET_CODE (XEXP (insn, 0)) == CODE_LABEL) LABEL_NUSES (XEXP (insn, 0))++; + } + + /* Some old code expects exactly one BARRIER as the NEXT_INSN of a + non-fallthru insn. This is not generally true, as multiple barriers + may have crept in, or the BARRIER may be separated from the last + real insn by one or more NOTEs. ! This simple pass moves barriers and removes duplicates so that the ! old code is happy. ! */ ! void ! cleanup_barriers () ! { ! rtx insn, next, prev; ! for (insn = get_insns (); insn; insn = next) { ! next = NEXT_INSN (insn); ! if (GET_CODE (insn) == BARRIER) { ! prev = prev_nonnote_insn (insn); ! if (GET_CODE (prev) == BARRIER) ! delete_barrier (insn); ! else if (prev != PREV_INSN (insn)) ! reorder_insns (insn, insn, prev); ! } ! } ! } ! ! void ! copy_loop_headers (f) ! rtx f; ! { ! rtx insn, next; ! /* Now iterate optimizing jumps until nothing changes over one pass. */ ! for (insn = f; insn; insn = next) ! { ! rtx temp, temp1; ! next = NEXT_INSN (insn); ! /* See if this is a NOTE_INSN_LOOP_BEG followed by an unconditional ! jump. Try to optimize by duplicating the loop exit test if so. ! This is only safe immediately after regscan, because it uses ! the values of regno_first_uid and regno_last_uid. */ ! if (GET_CODE (insn) == NOTE ! && NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG ! && (temp1 = next_nonnote_insn (insn)) != 0 ! && any_uncondjump_p (temp1) && onlyjump_p (temp1)) ! { ! temp = PREV_INSN (insn); ! if (duplicate_loop_exit_test (insn)) { ! next = NEXT_INSN (temp); } } } + } + void + purge_line_number_notes (f) + rtx f; + { + rtx last_note = 0; + rtx insn; /* Delete extraneous line number notes. Note that two consecutive notes for different lines are not really extraneous. There should be some indication where that line belonged, even if it became empty. */ ! for (insn = f; insn; insn = NEXT_INSN (insn)) ! if (GET_CODE (insn) == NOTE) ! { ! if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_FUNCTION_BEG) ! /* Any previous line note was for the prologue; gdb wants a new ! note after the prologue even if it is for the same line. */ ! last_note = NULL_RTX; ! else if (NOTE_LINE_NUMBER (insn) >= 0) ! { ! /* Delete this note if it is identical to previous note. */ ! if (last_note ! && NOTE_SOURCE_FILE (insn) == NOTE_SOURCE_FILE (last_note) ! && NOTE_LINE_NUMBER (insn) == NOTE_LINE_NUMBER (last_note)) ! { ! delete_related_insns (insn); ! continue; ! } ! last_note = insn; ! } ! } } /* Initialize LABEL_NUSES and JUMP_LABEL fields. Delete any REG_LABEL *************** init_label_info (f) *** 796,878 **** return largest_uid; } - /* Delete insns following barriers, up to next label. - - Also delete no-op jumps created by gcse. */ - - static void - delete_barrier_successors (f) - rtx f; - { - rtx insn; - rtx set; - - for (insn = f; insn;) - { - if (GET_CODE (insn) == BARRIER) - { - insn = NEXT_INSN (insn); - - never_reached_warning (insn); - - while (insn != 0 && GET_CODE (insn) != CODE_LABEL) - { - if (GET_CODE (insn) == JUMP_INSN) - { - /* Detect when we're deleting a tablejump; get rid of - the jump table as well. */ - rtx next1 = next_nonnote_insn (insn); - rtx next2 = next1 ? next_nonnote_insn (next1) : 0; - if (next2 && GET_CODE (next1) == CODE_LABEL - && GET_CODE (next2) == JUMP_INSN - && (GET_CODE (PATTERN (next2)) == ADDR_VEC - || GET_CODE (PATTERN (next2)) == ADDR_DIFF_VEC)) - { - delete_insn (insn); - insn = next2; - } - else - insn = delete_insn (insn); - } - else if (GET_CODE (insn) == NOTE - && NOTE_LINE_NUMBER (insn) != NOTE_INSN_FUNCTION_END) - insn = NEXT_INSN (insn); - else - insn = delete_insn (insn); - } - /* INSN is now the code_label. */ - } - - /* Also remove (set (pc) (pc)) insns which can be created by - gcse. We eliminate such insns now to avoid having them - cause problems later. */ - else if (GET_CODE (insn) == JUMP_INSN - && (set = pc_set (insn)) != NULL - && SET_SRC (set) == pc_rtx - && SET_DEST (set) == pc_rtx - && onlyjump_p (insn)) - insn = delete_insn (insn); - - else - insn = NEXT_INSN (insn); - } - } - /* Mark the label each jump jumps to. ! Combine consecutive labels, and count uses of labels. ! ! For each label, make a chain (using `jump_chain') ! of all the *unconditional* jumps that jump to it; ! also make a chain of all returns. ! ! CROSS_JUMP indicates whether we are doing cross jumping ! and if we are whether we will be paying attention to ! death notes or not. */ static void ! mark_all_labels (f, cross_jump) rtx f; - int cross_jump; { rtx insn; --- 218,229 ---- return largest_uid; } /* Mark the label each jump jumps to. ! Combine consecutive labels, and count uses of labels. */ static void ! mark_all_labels (f) rtx f; { rtx insn; *************** mark_all_labels (f, cross_jump) *** 882,890 **** if (GET_CODE (insn) == CALL_INSN && GET_CODE (PATTERN (insn)) == CALL_PLACEHOLDER) { ! mark_all_labels (XEXP (PATTERN (insn), 0), cross_jump); ! mark_all_labels (XEXP (PATTERN (insn), 1), cross_jump); ! mark_all_labels (XEXP (PATTERN (insn), 2), cross_jump); /* Canonicalize the tail recursion label attached to the CALL_PLACEHOLDER insn. */ --- 233,241 ---- if (GET_CODE (insn) == CALL_INSN && GET_CODE (PATTERN (insn)) == CALL_PLACEHOLDER) { ! mark_all_labels (XEXP (PATTERN (insn), 0)); ! mark_all_labels (XEXP (PATTERN (insn), 1)); ! mark_all_labels (XEXP (PATTERN (insn), 2)); /* Canonicalize the tail recursion label attached to the CALL_PLACEHOLDER insn. */ *************** mark_all_labels (f, cross_jump) *** 892,905 **** { rtx label_ref = gen_rtx_LABEL_REF (VOIDmode, XEXP (PATTERN (insn), 3)); ! mark_jump_label (label_ref, insn, cross_jump, 0); XEXP (PATTERN (insn), 3) = XEXP (label_ref, 0); } continue; } ! mark_jump_label (PATTERN (insn), insn, cross_jump, 0); if (! INSN_DELETED_P (insn) && GET_CODE (insn) == JUMP_INSN) { /* When we know the LABEL_REF contained in a REG used in --- 243,256 ---- { rtx label_ref = gen_rtx_LABEL_REF (VOIDmode, XEXP (PATTERN (insn), 3)); ! mark_jump_label (label_ref, insn, 0); XEXP (PATTERN (insn), 3) = XEXP (label_ref, 0); } continue; } ! mark_jump_label (PATTERN (insn), insn, 0); if (! INSN_DELETED_P (insn) && GET_CODE (insn) == JUMP_INSN) { /* When we know the LABEL_REF contained in a REG used in *************** mark_all_labels (f, cross_jump) *** 915,1118 **** rtx label_ref = gen_rtx_LABEL_REF (VOIDmode, XEXP (label_note, 0)); ! mark_jump_label (label_ref, insn, cross_jump, 0); XEXP (label_note, 0) = XEXP (label_ref, 0); JUMP_LABEL (insn) = XEXP (label_note, 0); } } - if (JUMP_LABEL (insn) != 0 && simplejump_p (insn)) - { - jump_chain[INSN_UID (insn)] - = jump_chain[INSN_UID (JUMP_LABEL (insn))]; - jump_chain[INSN_UID (JUMP_LABEL (insn))] = insn; - } - if (GET_CODE (PATTERN (insn)) == RETURN) - { - jump_chain[INSN_UID (insn)] = jump_chain[0]; - jump_chain[0] = insn; - } } } } - /* Delete all labels already not referenced. - Also find and return the last insn. */ - - static rtx - delete_unreferenced_labels (f) - rtx f; - { - rtx final = NULL_RTX; - rtx insn; - - for (insn = f; insn;) - { - if (GET_CODE (insn) == CODE_LABEL - && LABEL_NUSES (insn) == 0 - && LABEL_ALTERNATE_NAME (insn) == NULL) - insn = delete_insn (insn); - else - { - final = insn; - insn = NEXT_INSN (insn); - } - } - - return final; - } - - /* Delete various simple forms of moves which have no necessary - side effect. */ - - static void - delete_noop_moves (f) - rtx f; - { - rtx insn, next; - - for (insn = f; insn;) - { - next = NEXT_INSN (insn); - - if (GET_CODE (insn) == INSN) - { - register rtx body = PATTERN (insn); - - /* Detect and delete no-op move instructions - resulting from not allocating a parameter in a register. */ - - if (GET_CODE (body) == SET - && (SET_DEST (body) == SET_SRC (body) - || (GET_CODE (SET_DEST (body)) == MEM - && GET_CODE (SET_SRC (body)) == MEM - && rtx_equal_p (SET_SRC (body), SET_DEST (body)))) - && ! (GET_CODE (SET_DEST (body)) == MEM - && MEM_VOLATILE_P (SET_DEST (body))) - && ! (GET_CODE (SET_SRC (body)) == MEM - && MEM_VOLATILE_P (SET_SRC (body)))) - delete_computation (insn); - - /* Detect and ignore no-op move instructions - resulting from smart or fortuitous register allocation. */ - - else if (GET_CODE (body) == SET) - { - int sreg = true_regnum (SET_SRC (body)); - int dreg = true_regnum (SET_DEST (body)); - - if (sreg == dreg && sreg >= 0) - delete_insn (insn); - else if (sreg >= 0 && dreg >= 0) - { - rtx trial; - rtx tem = find_equiv_reg (NULL_RTX, insn, 0, - sreg, NULL_PTR, dreg, - GET_MODE (SET_SRC (body))); - - if (tem != 0 - && GET_MODE (tem) == GET_MODE (SET_DEST (body))) - { - /* DREG may have been the target of a REG_DEAD note in - the insn which makes INSN redundant. If so, reorg - would still think it is dead. So search for such a - note and delete it if we find it. */ - if (! find_regno_note (insn, REG_UNUSED, dreg)) - for (trial = prev_nonnote_insn (insn); - trial && GET_CODE (trial) != CODE_LABEL; - trial = prev_nonnote_insn (trial)) - if (find_regno_note (trial, REG_DEAD, dreg)) - { - remove_death (dreg, trial); - break; - } - - /* Deleting insn could lose a death-note for SREG. */ - if ((trial = find_regno_note (insn, REG_DEAD, sreg))) - { - /* Change this into a USE so that we won't emit - code for it, but still can keep the note. */ - PATTERN (insn) - = gen_rtx_USE (VOIDmode, XEXP (trial, 0)); - INSN_CODE (insn) = -1; - /* Remove all reg notes but the REG_DEAD one. */ - REG_NOTES (insn) = trial; - XEXP (trial, 1) = NULL_RTX; - } - else - delete_insn (insn); - } - } - else if (dreg >= 0 && CONSTANT_P (SET_SRC (body)) - && find_equiv_reg (SET_SRC (body), insn, 0, dreg, - NULL_PTR, 0, - GET_MODE (SET_DEST (body)))) - { - /* This handles the case where we have two consecutive - assignments of the same constant to pseudos that didn't - get a hard reg. Each SET from the constant will be - converted into a SET of the spill register and an - output reload will be made following it. This produces - two loads of the same constant into the same spill - register. */ - - rtx in_insn = insn; - - /* Look back for a death note for the first reg. - If there is one, it is no longer accurate. */ - while (in_insn && GET_CODE (in_insn) != CODE_LABEL) - { - if ((GET_CODE (in_insn) == INSN - || GET_CODE (in_insn) == JUMP_INSN) - && find_regno_note (in_insn, REG_DEAD, dreg)) - { - remove_death (dreg, in_insn); - break; - } - in_insn = PREV_INSN (in_insn); - } - - /* Delete the second load of the value. */ - delete_insn (insn); - } - } - else if (GET_CODE (body) == PARALLEL) - { - /* If each part is a set between two identical registers or - a USE or CLOBBER, delete the insn. */ - int i, sreg, dreg; - rtx tem; - - for (i = XVECLEN (body, 0) - 1; i >= 0; i--) - { - tem = XVECEXP (body, 0, i); - if (GET_CODE (tem) == USE || GET_CODE (tem) == CLOBBER) - continue; - - if (GET_CODE (tem) != SET - || (sreg = true_regnum (SET_SRC (tem))) < 0 - || (dreg = true_regnum (SET_DEST (tem))) < 0 - || dreg != sreg) - break; - } - - if (i < 0) - delete_insn (insn); - } - /* Also delete insns to store bit fields if they are no-ops. */ - /* Not worth the hair to detect this in the big-endian case. */ - else if (! BYTES_BIG_ENDIAN - && GET_CODE (body) == SET - && GET_CODE (SET_DEST (body)) == ZERO_EXTRACT - && XEXP (SET_DEST (body), 2) == const0_rtx - && XEXP (SET_DEST (body), 0) == SET_SRC (body) - && ! (GET_CODE (SET_SRC (body)) == MEM - && MEM_VOLATILE_P (SET_SRC (body)))) - delete_insn (insn); - } - insn = next; - } - } - /* LOOP_START is a NOTE_INSN_LOOP_BEG note that is followed by an unconditional jump. Assume that this unconditional jump is to the exit test code. If the code is sufficiently simple, make a copy of it before INSN, --- 266,280 ---- rtx label_ref = gen_rtx_LABEL_REF (VOIDmode, XEXP (label_note, 0)); ! mark_jump_label (label_ref, insn, 0); XEXP (label_note, 0) = XEXP (label_ref, 0); JUMP_LABEL (insn) = XEXP (label_note, 0); } } } } } /* LOOP_START is a NOTE_INSN_LOOP_BEG note that is followed by an unconditional jump. Assume that this unconditional jump is to the exit test code. If the code is sufficiently simple, make a copy of it before INSN, *************** duplicate_loop_exit_test (loop_start) *** 1135,1140 **** --- 297,303 ---- rtx lastexit; int max_reg = max_reg_num (); rtx *reg_map = 0; + rtx loop_pre_header_label; /* Scan the exit code. We do not perform this optimization if any insn: *************** duplicate_loop_exit_test (loop_start) *** 1235,1240 **** --- 398,404 ---- reg_map[REGNO (reg)] = gen_reg_rtx (GET_MODE (reg)); } } + loop_pre_header_label = gen_label_rtx (); /* Now copy each insn. */ for (insn = exitcode; insn != lastexit; insn = NEXT_INSN (insn)) *************** duplicate_loop_exit_test (loop_start) *** 1258,1264 **** if (reg_map) replace_regs (PATTERN (copy), reg_map, max_reg, 1); ! mark_jump_label (PATTERN (copy), copy, 0, 0); /* Copy all REG_NOTES except REG_LABEL since mark_jump_label will make them. */ --- 422,428 ---- if (reg_map) replace_regs (PATTERN (copy), reg_map, max_reg, 1); ! mark_jump_label (PATTERN (copy), copy, 0); /* Copy all REG_NOTES except REG_LABEL since mark_jump_label will make them. */ *************** duplicate_loop_exit_test (loop_start) *** 1286,1292 **** loop_start); if (reg_map) replace_regs (PATTERN (copy), reg_map, max_reg, 1); ! mark_jump_label (PATTERN (copy), copy, 0, 0); if (REG_NOTES (insn)) { REG_NOTES (copy) = copy_insn_1 (REG_NOTES (insn)); --- 450,456 ---- loop_start); if (reg_map) replace_regs (PATTERN (copy), reg_map, max_reg, 1); ! mark_jump_label (PATTERN (copy), copy, 0); if (REG_NOTES (insn)) { REG_NOTES (copy) = copy_insn_1 (REG_NOTES (insn)); *************** duplicate_loop_exit_test (loop_start) *** 1294,1307 **** replace_regs (REG_NOTES (copy), reg_map, max_reg, 1); } ! /* If this is a simple jump, add it to the jump chain. */ ! ! if (INSN_UID (copy) < max_jump_chain && JUMP_LABEL (copy) ! && simplejump_p (copy)) { ! jump_chain[INSN_UID (copy)] ! = jump_chain[INSN_UID (JUMP_LABEL (copy))]; ! jump_chain[INSN_UID (JUMP_LABEL (copy))] = copy; } break; --- 458,485 ---- replace_regs (REG_NOTES (copy), reg_map, max_reg, 1); } ! /* Predict conditional jump that do make loop looping as taken. ! Other jumps are probably exit conditions, so predict ! them as untaken. */ ! if (any_condjump_p (copy)) { ! rtx label = JUMP_LABEL (copy); ! if (label) ! { ! /* The jump_insn after loop_start should be followed ! by barrier and loopback label. */ ! if (prev_nonnote_insn (label) ! && (prev_nonnote_insn (prev_nonnote_insn (label)) ! == next_nonnote_insn (loop_start))) ! { ! predict_insn_def (copy, PRED_LOOP_HEADER, TAKEN); ! /* To keep pre-header, we need to redirect all loop ! entrances before the LOOP_BEG note. */ ! redirect_jump (copy, loop_pre_header_label, 0); ! } ! else ! predict_insn_def (copy, PRED_LOOP_HEADER, NOT_TAKEN); ! } } break; *************** duplicate_loop_exit_test (loop_start) *** 1329,1345 **** if (! first_copy) first_copy = copy; ! mark_jump_label (PATTERN (copy), copy, 0, 0); ! if (INSN_UID (copy) < max_jump_chain ! && INSN_UID (JUMP_LABEL (copy)) < max_jump_chain) ! { ! jump_chain[INSN_UID (copy)] ! = jump_chain[INSN_UID (JUMP_LABEL (copy))]; ! jump_chain[INSN_UID (JUMP_LABEL (copy))] = copy; ! } emit_barrier_before (loop_start); } /* Now scan from the first insn we copied to the last insn we copied (copy) for new pseudo registers. Do this after the code to jump to the end label since that might create a new pseudo too. */ --- 507,518 ---- if (! first_copy) first_copy = copy; ! mark_jump_label (PATTERN (copy), copy, 0); emit_barrier_before (loop_start); } + emit_label_before (loop_pre_header_label, loop_start); + /* Now scan from the first insn we copied to the last insn we copied (copy) for new pseudo registers. Do this after the code to jump to the end label since that might create a new pseudo too. */ *************** duplicate_loop_exit_test (loop_start) *** 1348,1354 **** /* Mark the exit code as the virtual top of the converted loop. */ emit_note_before (NOTE_INSN_LOOP_VTOP, exitcode); ! delete_insn (next_nonnote_insn (loop_start)); /* Clean up. */ if (reg_map) --- 521,527 ---- /* Mark the exit code as the virtual top of the converted loop. */ emit_note_before (NOTE_INSN_LOOP_VTOP, exitcode); ! delete_related_insns (next_nonnote_insn (loop_start)); /* Clean up. */ if (reg_map) *************** duplicate_loop_exit_test (loop_start) *** 1358,1376 **** } /* Move all block-beg, block-end, loop-beg, loop-cont, loop-vtop, loop-end, ! notes between START and END out before START. Assume that END is not ! such a note. START may be such a note. Returns the value of the new ! starting insn, which may be different if the original start was such a ! note. */ ! rtx ! squeeze_notes (start, end) ! rtx start, end; { rtx insn; rtx next; ! for (insn = start; insn != end; insn = next) { next = NEXT_INSN (insn); if (GET_CODE (insn) == NOTE --- 531,555 ---- } /* Move all block-beg, block-end, loop-beg, loop-cont, loop-vtop, loop-end, ! notes between START and END out before START. START and END may be such ! notes. Returns the values of the new starting and ending insns, which ! may be different if the original ones were such notes. ! Return true if there were only such notes and no real instructions. */ ! bool ! squeeze_notes (startp, endp) ! rtx* startp; ! rtx* endp; { + rtx start = *startp; + rtx end = *endp; + rtx insn; rtx next; + rtx last = NULL; + rtx past_end = NEXT_INSN (end); ! for (insn = start; insn != past_end; insn = next) { next = NEXT_INSN (insn); if (GET_CODE (insn) == NOTE *************** squeeze_notes (start, end) *** 1394,1644 **** PREV_INSN (next) = prev; } } } ! return start; ! } ! ! /* Compare the instructions before insn E1 with those before E2 ! to find an opportunity for cross jumping. ! (This means detecting identical sequences of insns followed by ! jumps to the same place, or followed by a label and a jump ! to that label, and replacing one with a jump to the other.) ! ! Assume E1 is a jump that jumps to label E2 ! (that is not always true but it might as well be). ! Find the longest possible equivalent sequences ! and store the first insns of those sequences into *F1 and *F2. ! Store zero there if no equivalent preceding instructions are found. ! ! We give up if we find a label in stream 1. ! Actually we could transfer that label into stream 2. */ ! ! static void ! find_cross_jump (e1, e2, minimum, f1, f2) ! rtx e1, e2; ! int minimum; ! rtx *f1, *f2; ! { ! register rtx i1 = e1, i2 = e2; ! register rtx p1, p2; ! int lose = 0; ! ! rtx last1 = 0, last2 = 0; ! rtx afterlast1 = 0, afterlast2 = 0; ! ! *f1 = 0; ! *f2 = 0; ! ! while (1) ! { ! i1 = prev_nonnote_insn (i1); ! ! i2 = PREV_INSN (i2); ! while (i2 && (GET_CODE (i2) == NOTE || GET_CODE (i2) == CODE_LABEL)) ! i2 = PREV_INSN (i2); ! ! if (i1 == 0) ! break; ! ! /* Don't allow the range of insns preceding E1 or E2 ! to include the other (E2 or E1). */ ! if (i2 == e1 || i1 == e2) ! break; ! ! /* If we will get to this code by jumping, those jumps will be ! tensioned to go directly to the new label (before I2), ! so this cross-jumping won't cost extra. So reduce the minimum. */ ! if (GET_CODE (i1) == CODE_LABEL) ! { ! --minimum; ! break; ! } ! ! if (i2 == 0 || GET_CODE (i1) != GET_CODE (i2)) ! break; ! ! p1 = PATTERN (i1); ! p2 = PATTERN (i2); ! ! /* If this is a CALL_INSN, compare register usage information. ! If we don't check this on stack register machines, the two ! CALL_INSNs might be merged leaving reg-stack.c with mismatching ! numbers of stack registers in the same basic block. ! If we don't check this on machines with delay slots, a delay slot may ! be filled that clobbers a parameter expected by the subroutine. ! ! ??? We take the simple route for now and assume that if they're ! equal, they were constructed identically. */ ! ! if (GET_CODE (i1) == CALL_INSN ! && ! rtx_equal_p (CALL_INSN_FUNCTION_USAGE (i1), ! CALL_INSN_FUNCTION_USAGE (i2))) ! lose = 1; ! ! #ifdef STACK_REGS ! /* If cross_jump_death_matters is not 0, the insn's mode ! indicates whether or not the insn contains any stack-like ! regs. */ ! ! if (!lose && cross_jump_death_matters && stack_regs_mentioned (i1)) ! { ! /* If register stack conversion has already been done, then ! death notes must also be compared before it is certain that ! the two instruction streams match. */ ! ! rtx note; ! HARD_REG_SET i1_regset, i2_regset; ! ! CLEAR_HARD_REG_SET (i1_regset); ! CLEAR_HARD_REG_SET (i2_regset); ! ! for (note = REG_NOTES (i1); note; note = XEXP (note, 1)) ! if (REG_NOTE_KIND (note) == REG_DEAD ! && STACK_REG_P (XEXP (note, 0))) ! SET_HARD_REG_BIT (i1_regset, REGNO (XEXP (note, 0))); ! ! for (note = REG_NOTES (i2); note; note = XEXP (note, 1)) ! if (REG_NOTE_KIND (note) == REG_DEAD ! && STACK_REG_P (XEXP (note, 0))) ! SET_HARD_REG_BIT (i2_regset, REGNO (XEXP (note, 0))); ! ! GO_IF_HARD_REG_EQUAL (i1_regset, i2_regset, done); ! ! lose = 1; ! ! done: ! ; ! } ! #endif ! ! /* Don't allow old-style asm or volatile extended asms to be accepted ! for cross jumping purposes. It is conceptually correct to allow ! them, since cross-jumping preserves the dynamic instruction order ! even though it is changing the static instruction order. However, ! if an asm is being used to emit an assembler pseudo-op, such as ! the MIPS `.set reorder' pseudo-op, then the static instruction order ! matters and it must be preserved. */ ! if (GET_CODE (p1) == ASM_INPUT || GET_CODE (p2) == ASM_INPUT ! || (GET_CODE (p1) == ASM_OPERANDS && MEM_VOLATILE_P (p1)) ! || (GET_CODE (p2) == ASM_OPERANDS && MEM_VOLATILE_P (p2))) ! lose = 1; ! ! if (lose || GET_CODE (p1) != GET_CODE (p2) ! || ! rtx_renumbered_equal_p (p1, p2)) ! { ! /* The following code helps take care of G++ cleanups. */ ! rtx equiv1; ! rtx equiv2; ! ! if (!lose && GET_CODE (p1) == GET_CODE (p2) ! && ((equiv1 = find_reg_note (i1, REG_EQUAL, NULL_RTX)) != 0 ! || (equiv1 = find_reg_note (i1, REG_EQUIV, NULL_RTX)) != 0) ! && ((equiv2 = find_reg_note (i2, REG_EQUAL, NULL_RTX)) != 0 ! || (equiv2 = find_reg_note (i2, REG_EQUIV, NULL_RTX)) != 0) ! /* If the equivalences are not to a constant, they may ! reference pseudos that no longer exist, so we can't ! use them. */ ! && CONSTANT_P (XEXP (equiv1, 0)) ! && rtx_equal_p (XEXP (equiv1, 0), XEXP (equiv2, 0))) ! { ! rtx s1 = single_set (i1); ! rtx s2 = single_set (i2); ! if (s1 != 0 && s2 != 0 ! && rtx_renumbered_equal_p (SET_DEST (s1), SET_DEST (s2))) ! { ! validate_change (i1, &SET_SRC (s1), XEXP (equiv1, 0), 1); ! validate_change (i2, &SET_SRC (s2), XEXP (equiv2, 0), 1); ! if (! rtx_renumbered_equal_p (p1, p2)) ! cancel_changes (0); ! else if (apply_change_group ()) ! goto win; ! } ! } ! ! /* Insns fail to match; cross jumping is limited to the following ! insns. */ ! ! #ifdef HAVE_cc0 ! /* Don't allow the insn after a compare to be shared by ! cross-jumping unless the compare is also shared. ! Here, if either of these non-matching insns is a compare, ! exclude the following insn from possible cross-jumping. */ ! if (sets_cc0_p (p1) || sets_cc0_p (p2)) ! last1 = afterlast1, last2 = afterlast2, ++minimum; ! #endif ! ! /* If cross-jumping here will feed a jump-around-jump ! optimization, this jump won't cost extra, so reduce ! the minimum. */ ! if (GET_CODE (i1) == JUMP_INSN ! && JUMP_LABEL (i1) ! && prev_real_insn (JUMP_LABEL (i1)) == e1) ! --minimum; ! break; ! } ! ! win: ! if (GET_CODE (p1) != USE && GET_CODE (p1) != CLOBBER) ! { ! /* Ok, this insn is potentially includable in a cross-jump here. */ ! afterlast1 = last1, afterlast2 = last2; ! last1 = i1, last2 = i2, --minimum; ! } ! } ! ! if (minimum <= 0 && last1 != 0 && last1 != e1) ! *f1 = last1, *f2 = last2; ! } ! ! static void ! do_cross_jump (insn, newjpos, newlpos) ! rtx insn, newjpos, newlpos; ! { ! /* Find an existing label at this point ! or make a new one if there is none. */ ! register rtx label = get_label_before (newlpos); ! ! /* Make the same jump insn jump to the new point. */ ! if (GET_CODE (PATTERN (insn)) == RETURN) ! { ! /* Remove from jump chain of returns. */ ! delete_from_jump_chain (insn); ! /* Change the insn. */ ! PATTERN (insn) = gen_jump (label); ! INSN_CODE (insn) = -1; ! JUMP_LABEL (insn) = label; ! LABEL_NUSES (label)++; ! /* Add to new the jump chain. */ ! if (INSN_UID (label) < max_jump_chain ! && INSN_UID (insn) < max_jump_chain) ! { ! jump_chain[INSN_UID (insn)] = jump_chain[INSN_UID (label)]; ! jump_chain[INSN_UID (label)] = insn; ! } ! } ! else ! redirect_jump (insn, label, 1); ! ! /* Delete the matching insns before the jump. Also, remove any REG_EQUAL ! or REG_EQUIV note in the NEWLPOS stream that isn't also present in ! the NEWJPOS stream. */ ! ! while (newjpos != insn) ! { ! rtx lnote; ! for (lnote = REG_NOTES (newlpos); lnote; lnote = XEXP (lnote, 1)) ! if ((REG_NOTE_KIND (lnote) == REG_EQUAL ! || REG_NOTE_KIND (lnote) == REG_EQUIV) ! && ! find_reg_note (newjpos, REG_EQUAL, XEXP (lnote, 0)) ! && ! find_reg_note (newjpos, REG_EQUIV, XEXP (lnote, 0))) ! remove_note (newlpos, lnote); ! delete_insn (newjpos); ! newjpos = next_real_insn (newjpos); ! newlpos = next_real_insn (newlpos); ! } } /* Return the label before INSN, or put a new label there. */ --- 573,591 ---- PREV_INSN (next) = prev; } } + else + last = insn; } ! /* There were no real instructions. */ ! if (start == past_end) ! return true; ! end = last; ! *startp = start; ! *endp = end; ! return false; } /* Return the label before INSN, or put a new label there. */ *************** get_label_after (insn) *** 1685,1734 **** return label; } - /* Return 1 if INSN is a jump that jumps to right after TARGET - only on the condition that TARGET itself would drop through. - Assumes that TARGET is a conditional jump. */ - - static int - jump_back_p (insn, target) - rtx insn, target; - { - rtx cinsn, ctarget; - enum rtx_code codei, codet; - rtx set, tset; - - if (! any_condjump_p (insn) - || any_uncondjump_p (target) - || target != prev_real_insn (JUMP_LABEL (insn))) - return 0; - set = pc_set (insn); - tset = pc_set (target); - - cinsn = XEXP (SET_SRC (set), 0); - ctarget = XEXP (SET_SRC (tset), 0); - - codei = GET_CODE (cinsn); - codet = GET_CODE (ctarget); - - if (XEXP (SET_SRC (set), 1) == pc_rtx) - { - codei = reversed_comparison_code (cinsn, insn); - if (codei == UNKNOWN) - return 0; - } - - if (XEXP (SET_SRC (tset), 2) == pc_rtx) - { - codet = reversed_comparison_code (ctarget, target); - if (codei == UNKNOWN) - return 0; - } - - return (codei == codet - && rtx_renumbered_equal_p (XEXP (cinsn, 0), XEXP (ctarget, 0)) - && rtx_renumbered_equal_p (XEXP (cinsn, 1), XEXP (ctarget, 1))); - } - /* Given a comparison (CODE ARG0 ARG1), inside an insn, INSN, return a code of reversed comparison if it is possible to do so. Otherwise return UNKNOWN. UNKNOWN may be returned in case we are having CC_MODE compare and we don't --- 632,637 ---- *************** reversed_comparison_code_parts (code, ar *** 1758,1802 **** && REVERSIBLE_CC_MODE (mode)) { #ifdef REVERSE_CONDITION ! return REVERSE_CONDITION (code, mode); #endif ! return reverse_condition (code); ! } #endif /* Try a few special cases based on the comparison code. */ switch (code) { ! case GEU: ! case GTU: ! case LEU: ! case LTU: ! case NE: ! case EQ: ! /* It is always safe to reverse EQ and NE, even for the floating ! point. Similary the unsigned comparisons are never used for ! floating point so we can reverse them in the default way. */ ! return reverse_condition (code); ! case ORDERED: ! case UNORDERED: ! case LTGT: ! case UNEQ: ! /* In case we already see unordered comparison, we can be sure to ! be dealing with floating point so we don't need any more tests. */ ! return reverse_condition_maybe_unordered (code); ! case UNLT: ! case UNLE: ! case UNGT: ! case UNGE: ! /* We don't have safe way to reverse these yet. */ ! return UNKNOWN; ! default: ! break; } /* In case we give up IEEE compatibility, all comparisons are reversible. */ if (TARGET_FLOAT_FORMAT != IEEE_FLOAT_FORMAT ! || flag_fast_math) return reverse_condition (code); if (GET_MODE_CLASS (mode) == MODE_CC --- 661,705 ---- && REVERSIBLE_CC_MODE (mode)) { #ifdef REVERSE_CONDITION ! return REVERSE_CONDITION (code, mode); #endif ! return reverse_condition (code); ! } #endif /* Try a few special cases based on the comparison code. */ switch (code) { ! case GEU: ! case GTU: ! case LEU: ! case LTU: ! case NE: ! case EQ: ! /* It is always safe to reverse EQ and NE, even for the floating ! point. Similary the unsigned comparisons are never used for ! floating point so we can reverse them in the default way. */ ! return reverse_condition (code); ! case ORDERED: ! case UNORDERED: ! case LTGT: ! case UNEQ: ! /* In case we already see unordered comparison, we can be sure to ! be dealing with floating point so we don't need any more tests. */ ! return reverse_condition_maybe_unordered (code); ! case UNLT: ! case UNLE: ! case UNGT: ! case UNGE: ! /* We don't have safe way to reverse these yet. */ ! return UNKNOWN; ! default: ! break; } /* In case we give up IEEE compatibility, all comparisons are reversible. */ if (TARGET_FLOAT_FORMAT != IEEE_FLOAT_FORMAT ! || flag_unsafe_math_optimizations) return reverse_condition (code); if (GET_MODE_CLASS (mode) == MODE_CC *************** reversed_comparison_code_parts (code, ar *** 1832,1838 **** mode = GET_MODE (XEXP (comparison, 1)); break; } ! /* We can get past reg-reg moves. This may be usefull for model of i387 comparisons that first move flag registers around. */ if (REG_P (src)) { --- 735,741 ---- mode = GET_MODE (XEXP (comparison, 1)); break; } ! /* We can get past reg-reg moves. This may be useful for model of i387 comparisons that first move flag registers around. */ if (REG_P (src)) { *************** reversed_comparison_code (comparison, in *** 1870,1904 **** XEXP (comparison, 1), insn); } - /* Given a comparison, COMPARISON, inside a conditional jump insn, INSN, - return non-zero if it is safe to reverse this comparison. It is if our - floating-point is not IEEE, if this is an NE or EQ comparison, or if - this is known to be an integer comparison. - - Use of this function is depreached and you should use - REVERSED_COMPARISON_CODE bits instead. - */ - - int - can_reverse_comparison_p (comparison, insn) - rtx comparison; - rtx insn; - { - enum rtx_code code; - - /* If this is not actually a comparison, we can't reverse it. */ - if (GET_RTX_CLASS (GET_CODE (comparison)) != '<') - return 0; - - code = reversed_comparison_code (comparison, insn); - if (code == UNKNOWN) - return 0; - - /* The code will follow can_reverse_comparison_p with reverse_condition, - so see if it will get proper result. */ - return (code == reverse_condition (GET_CODE (comparison))); - } - /* Given an rtx-code for a comparison, return the code for the negated comparison. If no such code exists, return UNKNOWN. --- 773,778 ---- *************** int *** 2213,2219 **** condjump_p (insn) rtx insn; { ! register rtx x = PATTERN (insn); if (GET_CODE (x) != SET || GET_CODE (SET_DEST (x)) != PC) --- 1087,1093 ---- condjump_p (insn) rtx insn; { ! rtx x = PATTERN (insn); if (GET_CODE (x) != SET || GET_CODE (SET_DEST (x)) != PC) *************** int *** 2244,2250 **** condjump_in_parallel_p (insn) rtx insn; { ! register rtx x = PATTERN (insn); if (GET_CODE (x) != PARALLEL) return 0; --- 1118,1124 ---- condjump_in_parallel_p (insn) rtx insn; { ! rtx x = PATTERN (insn); if (GET_CODE (x) != PARALLEL) return 0; *************** returnjump_p_1 (loc, data) *** 2362,2368 **** void *data ATTRIBUTE_UNUSED; { rtx x = *loc; ! return x && GET_CODE (x) == RETURN; } int --- 1236,1244 ---- void *data ATTRIBUTE_UNUSED; { rtx x = *loc; ! ! return x && (GET_CODE (x) == RETURN ! || (GET_CODE (x) == SET && SET_IS_RETURN_P (x))); } int *************** onlyjump_p (insn) *** 2399,2404 **** --- 1275,1297 ---- #ifdef HAVE_cc0 + /* Return non-zero if X is an RTX that only sets the condition codes + and has no side effects. */ + + int + only_sets_cc0_p (x) + rtx x; + { + + if (! x) + return 0; + + if (INSN_P (x)) + x = PATTERN (x); + + return sets_cc0_p (x) == 1 && ! side_effects_p (x); + } + /* Return 1 if X is an RTX that does nothing but set the condition codes and CLOBBER or USE registers. Return -1 if X does explicitly set the condition codes, *************** onlyjump_p (insn) *** 2406,2413 **** int sets_cc0_p (x) ! rtx x ATTRIBUTE_UNUSED; { if (GET_CODE (x) == SET && SET_DEST (x) == cc0_rtx) return 1; if (GET_CODE (x) == PARALLEL) --- 1299,1313 ---- int sets_cc0_p (x) ! rtx x; { + + if (! x) + return 0; + + if (INSN_P (x)) + x = PATTERN (x); + if (GET_CODE (x) == SET && SET_DEST (x) == cc0_rtx) return 1; if (GET_CODE (x) == PARALLEL) *************** rtx *** 2442,2451 **** follow_jumps (label) rtx label; { ! register rtx insn; ! register rtx next; ! register rtx value = label; ! register int depth; for (depth = 0; (depth < 10 --- 1342,1351 ---- follow_jumps (label) rtx label; { ! rtx insn; ! rtx next; ! rtx value = label; ! int depth; for (depth = 0; (depth < 10 *************** follow_jumps (label) *** 2488,2520 **** return value; } - /* Assuming that field IDX of X is a vector of label_refs, - replace each of them by the ultimate label reached by it. - Return nonzero if a change is made. - If IGNORE_LOOPS is 0, we do not chain across a NOTE_INSN_LOOP_BEG. */ - - static int - tension_vector_labels (x, idx) - register rtx x; - register int idx; - { - int changed = 0; - register int i; - for (i = XVECLEN (x, idx) - 1; i >= 0; i--) - { - register rtx olabel = XEXP (XVECEXP (x, idx, i), 0); - register rtx nlabel = follow_jumps (olabel); - if (nlabel && nlabel != olabel) - { - XEXP (XVECEXP (x, idx, i), 0) = nlabel; - ++LABEL_NUSES (nlabel); - if (--LABEL_NUSES (olabel) == 0) - delete_insn (olabel); - changed = 1; - } - } - return changed; - } /* Find all CODE_LABELs referred to in X, and increment their use counts. If INSN is a JUMP_INSN and there is at least one CODE_LABEL referenced --- 1388,1393 ---- *************** tension_vector_labels (x, idx) *** 2527,2547 **** must be kept distinct if we have not yet done loop-optimization, because the gap between them is where loop-optimize will want to move invariant code to. CROSS_JUMP tells us ! that loop-optimization is done with. ! ! Once reload has completed (CROSS_JUMP non-zero), we need not consider ! two labels distinct if they are separated by only USE or CLOBBER insns. */ void ! mark_jump_label (x, insn, cross_jump, in_mem) ! register rtx x; rtx insn; - int cross_jump; int in_mem; { ! register RTX_CODE code = GET_CODE (x); ! register int i; ! register const char *fmt; switch (code) { --- 1400,1416 ---- must be kept distinct if we have not yet done loop-optimization, because the gap between them is where loop-optimize will want to move invariant code to. CROSS_JUMP tells us ! that loop-optimization is done with. */ void ! mark_jump_label (x, insn, in_mem) ! rtx x; rtx insn; int in_mem; { ! RTX_CODE code = GET_CODE (x); ! int i; ! const char *fmt; switch (code) { *************** mark_jump_label (x, insn, cross_jump, in *** 2565,2578 **** /* If this is a constant-pool reference, see if it is a label. */ if (CONSTANT_POOL_ADDRESS_P (x)) ! mark_jump_label (get_pool_constant (x), insn, cross_jump, in_mem); break; case LABEL_REF: { rtx label = XEXP (x, 0); - rtx olabel = label; - rtx next; /* Ignore remaining references to unreachable labels that have been deleted. */ --- 1434,1445 ---- /* If this is a constant-pool reference, see if it is a label. */ if (CONSTANT_POOL_ADDRESS_P (x)) ! mark_jump_label (get_pool_constant (x), insn, in_mem); break; case LABEL_REF: { rtx label = XEXP (x, 0); /* Ignore remaining references to unreachable labels that have been deleted. */ *************** mark_jump_label (x, insn, cross_jump, in *** 2587,2614 **** if (LABEL_REF_NONLOCAL_P (x)) break; - /* If there are other labels following this one, - replace it with the last of the consecutive labels. */ - for (next = NEXT_INSN (label); next; next = NEXT_INSN (next)) - { - if (GET_CODE (next) == CODE_LABEL) - label = next; - else if (cross_jump && GET_CODE (next) == INSN - && (GET_CODE (PATTERN (next)) == USE - || GET_CODE (PATTERN (next)) == CLOBBER)) - continue; - else if (GET_CODE (next) != NOTE) - break; - else if (! cross_jump - && (NOTE_LINE_NUMBER (next) == NOTE_INSN_LOOP_BEG - || NOTE_LINE_NUMBER (next) == NOTE_INSN_FUNCTION_END - /* ??? Optional. Disables some optimizations, but - makes gcov output more accurate with -O. */ - || (flag_test_coverage - && NOTE_LINE_NUMBER (next) > 0))) - break; - } - XEXP (x, 0) = label; if (! insn || ! INSN_DELETED_P (insn)) ++LABEL_NUSES (label); --- 1454,1459 ---- *************** mark_jump_label (x, insn, cross_jump, in *** 2619,2645 **** JUMP_LABEL (insn) = label; else { - /* If we've changed the label, update notes accordingly. */ - if (label != olabel) - { - rtx note; - - /* We may have a REG_LABEL note to indicate that this - instruction uses the label. */ - note = find_reg_note (insn, REG_LABEL, olabel); - if (note) - XEXP (note, 0) = label; - - /* We may also have a REG_EQUAL note to indicate that - a register is being set to the address of the - label. */ - note = find_reg_note (insn, REG_EQUAL, NULL_RTX); - if (note - && GET_CODE (XEXP (note, 0)) == LABEL_REF - && XEXP (XEXP (note, 0), 0) == olabel) - XEXP (XEXP (note, 0), 0) = label; - } - /* Add a REG_LABEL note for LABEL unless there already is one. All uses of a label, except for labels that are the targets of jumps, must have a --- 1464,1469 ---- *************** mark_jump_label (x, insn, cross_jump, in *** 2661,2668 **** int eltnum = code == ADDR_DIFF_VEC ? 1 : 0; for (i = 0; i < XVECLEN (x, eltnum); i++) ! mark_jump_label (XVECEXP (x, eltnum, i), NULL_RTX, ! cross_jump, in_mem); } return; --- 1485,1491 ---- int eltnum = code == ADDR_DIFF_VEC ? 1 : 0; for (i = 0; i < XVECLEN (x, eltnum); i++) ! mark_jump_label (XVECEXP (x, eltnum, i), NULL_RTX, in_mem); } return; *************** mark_jump_label (x, insn, cross_jump, in *** 2674,2685 **** for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) { if (fmt[i] == 'e') ! mark_jump_label (XEXP (x, i), insn, cross_jump, in_mem); else if (fmt[i] == 'E') { ! register int j; for (j = 0; j < XVECLEN (x, i); j++) ! mark_jump_label (XVECEXP (x, i, j), insn, cross_jump, in_mem); } } } --- 1497,1508 ---- for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) { if (fmt[i] == 'e') ! mark_jump_label (XEXP (x, i), insn, in_mem); else if (fmt[i] == 'E') { ! int j; for (j = 0; j < XVECLEN (x, i); j++) ! mark_jump_label (XVECEXP (x, i, j), insn, in_mem); } } } *************** void *** 2692,2698 **** delete_jump (insn) rtx insn; { ! register rtx set = single_set (insn); if (set && GET_CODE (SET_DEST (set)) == PC) delete_computation (insn); --- 1515,1521 ---- delete_jump (insn) rtx insn; { ! rtx set = single_set (insn); if (set && GET_CODE (SET_DEST (set)) == PC) delete_computation (insn); *************** delete_prior_computation (note, insn) *** 2732,2738 **** /* If we reach a CALL which is not calling a const function or the callee pops the arguments, then give up. */ if (GET_CODE (our_prev) == CALL_INSN ! && (! CONST_CALL_P (our_prev) || GET_CODE (pat) != SET || GET_CODE (SET_SRC (pat)) != CALL)) break; --- 1555,1561 ---- /* If we reach a CALL which is not calling a const function or the callee pops the arguments, then give up. */ if (GET_CODE (our_prev) == CALL_INSN ! && (! CONST_OR_PURE_CALL_P (our_prev) || GET_CODE (pat) != SET || GET_CODE (SET_SRC (pat)) != CALL)) break; *************** delete_computation (insn) *** 2882,2905 **** delete_prior_computation (note, insn); } ! delete_insn (insn); } ! /* Delete insn INSN from the chain of insns and update label ref counts. ! May delete some following insns as a consequence; may even delete ! a label elsewhere and insns that follow it. ! Returns the first insn after INSN that was not deleted. */ rtx ! delete_insn (insn) ! register rtx insn; { ! register rtx next = NEXT_INSN (insn); ! register rtx prev = PREV_INSN (insn); ! register int was_code_label = (GET_CODE (insn) == CODE_LABEL); ! register int dont_really_delete = 0; rtx note; while (next && INSN_DELETED_P (next)) next = NEXT_INSN (next); --- 1705,1728 ---- delete_prior_computation (note, insn); } ! delete_related_insns (insn); } ! /* Delete insn INSN from the chain of insns and update label ref counts ! and delete insns now unreachable. ! Returns the first insn after INSN that was not deleted. ! ! Usage of this instruction is deprecated. Use delete_insn instead and ! subsequent cfg_cleanup pass to delete unreachable code if needed. */ rtx ! delete_related_insns (insn) ! rtx insn; { ! int was_code_label = (GET_CODE (insn) == CODE_LABEL); rtx note; + rtx next = NEXT_INSN (insn), prev = PREV_INSN (insn); while (next && INSN_DELETED_P (next)) next = NEXT_INSN (next); *************** delete_insn (insn) *** 2908,2969 **** if (INSN_DELETED_P (insn)) return next; ! if (was_code_label) ! remove_node_from_expr_list (insn, &nonlocal_goto_handler_labels); ! ! /* Don't delete user-declared labels. When optimizing, convert them ! to special NOTEs instead. When not optimizing, leave them alone. */ ! if (was_code_label && LABEL_NAME (insn) != 0) ! { ! if (optimize) ! { ! const char *name = LABEL_NAME (insn); ! PUT_CODE (insn, NOTE); ! NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED_LABEL; ! NOTE_SOURCE_FILE (insn) = name; ! } ! ! dont_really_delete = 1; ! } ! else ! /* Mark this insn as deleted. */ ! INSN_DELETED_P (insn) = 1; ! ! /* If this is an unconditional jump, delete it from the jump chain. */ ! if (simplejump_p (insn)) ! delete_from_jump_chain (insn); /* If instruction is followed by a barrier, delete the barrier too. */ if (next != 0 && GET_CODE (next) == BARRIER) ! { ! INSN_DELETED_P (next) = 1; ! next = NEXT_INSN (next); ! } ! ! /* Patch out INSN (and the barrier if any) */ ! ! if (! dont_really_delete) ! { ! if (prev) ! { ! NEXT_INSN (prev) = next; ! if (GET_CODE (prev) == INSN && GET_CODE (PATTERN (prev)) == SEQUENCE) ! NEXT_INSN (XVECEXP (PATTERN (prev), 0, ! XVECLEN (PATTERN (prev), 0) - 1)) = next; ! } ! ! if (next) ! { ! PREV_INSN (next) = prev; ! if (GET_CODE (next) == INSN && GET_CODE (PATTERN (next)) == SEQUENCE) ! PREV_INSN (XVECEXP (PATTERN (next), 0, 0)) = prev; ! } ! ! if (prev && NEXT_INSN (prev) == 0) ! set_last_insn (prev); ! } /* If deleting a jump, decrement the count of the label, and delete the label if it is now unused. */ --- 1731,1743 ---- if (INSN_DELETED_P (insn)) return next; ! delete_insn (insn); /* If instruction is followed by a barrier, delete the barrier too. */ if (next != 0 && GET_CODE (next) == BARRIER) ! delete_insn (next); /* If deleting a jump, decrement the count of the label, and delete the label if it is now unused. */ *************** delete_insn (insn) *** 2972,2983 **** { rtx lab = JUMP_LABEL (insn), lab_next; ! if (--LABEL_NUSES (lab) == 0) { /* This can delete NEXT or PREV, either directly if NEXT is JUMP_LABEL (INSN), or indirectly through more levels of jumps. */ ! delete_insn (lab); /* I feel a little doubtful about this loop, but I see no clean and sure alternative way --- 1746,1757 ---- { rtx lab = JUMP_LABEL (insn), lab_next; ! if (LABEL_NUSES (lab) == 0) { /* This can delete NEXT or PREV, either directly if NEXT is JUMP_LABEL (INSN), or indirectly through more levels of jumps. */ ! delete_related_insns (lab); /* I feel a little doubtful about this loop, but I see no clean and sure alternative way *************** delete_insn (insn) *** 2993,3002 **** || GET_CODE (PATTERN (lab_next)) == ADDR_DIFF_VEC)) { /* If we're deleting the tablejump, delete the dispatch table. ! We may not be able to kill the label immediately preceeding just yet, as it might be referenced in code leading up to the tablejump. */ ! delete_insn (lab_next); } } --- 1767,1776 ---- || GET_CODE (PATTERN (lab_next)) == ADDR_DIFF_VEC)) { /* If we're deleting the tablejump, delete the dispatch table. ! We may not be able to kill the label immediately preceding just yet, as it might be referenced in code leading up to the tablejump. */ ! delete_related_insns (lab_next); } } *************** delete_insn (insn) *** 3011,3018 **** int len = XVECLEN (pat, diff_vec_p); for (i = 0; i < len; i++) ! if (--LABEL_NUSES (XEXP (XVECEXP (pat, diff_vec_p, i), 0)) == 0) ! delete_insn (XEXP (XVECEXP (pat, diff_vec_p, i), 0)); while (next && INSN_DELETED_P (next)) next = NEXT_INSN (next); return next; --- 1785,1792 ---- int len = XVECLEN (pat, diff_vec_p); for (i = 0; i < len; i++) ! if (LABEL_NUSES (XEXP (XVECEXP (pat, diff_vec_p, i), 0)) == 0) ! delete_related_insns (XEXP (XVECEXP (pat, diff_vec_p, i), 0)); while (next && INSN_DELETED_P (next)) next = NEXT_INSN (next); return next; *************** delete_insn (insn) *** 3024,3031 **** if (REG_NOTE_KIND (note) == REG_LABEL /* This could also be a NOTE_INSN_DELETED_LABEL note. */ && GET_CODE (XEXP (note, 0)) == CODE_LABEL) ! if (--LABEL_NUSES (XEXP (note, 0)) == 0) ! delete_insn (XEXP (note, 0)); while (prev && (INSN_DELETED_P (prev) || GET_CODE (prev) == NOTE)) prev = PREV_INSN (prev); --- 1798,1805 ---- if (REG_NOTE_KIND (note) == REG_LABEL /* This could also be a NOTE_INSN_DELETED_LABEL note. */ && GET_CODE (XEXP (note, 0)) == CODE_LABEL) ! if (LABEL_NUSES (XEXP (note, 0)) == 0) ! delete_related_insns (XEXP (note, 0)); while (prev && (INSN_DELETED_P (prev) || GET_CODE (prev) == NOTE)) prev = PREV_INSN (prev); *************** delete_insn (insn) *** 3039,3051 **** && GET_CODE (NEXT_INSN (insn)) == JUMP_INSN && (GET_CODE (PATTERN (NEXT_INSN (insn))) == ADDR_VEC || GET_CODE (PATTERN (NEXT_INSN (insn))) == ADDR_DIFF_VEC)) ! next = delete_insn (NEXT_INSN (insn)); /* If INSN was a label, delete insns following it if now unreachable. */ if (was_code_label && prev && GET_CODE (prev) == BARRIER) { ! register RTX_CODE code; while (next != 0 && (GET_RTX_CLASS (code = GET_CODE (next)) == 'i' || code == NOTE || code == BARRIER --- 1813,1825 ---- && GET_CODE (NEXT_INSN (insn)) == JUMP_INSN && (GET_CODE (PATTERN (NEXT_INSN (insn))) == ADDR_VEC || GET_CODE (PATTERN (NEXT_INSN (insn))) == ADDR_DIFF_VEC)) ! next = delete_related_insns (NEXT_INSN (insn)); /* If INSN was a label, delete insns following it if now unreachable. */ if (was_code_label && prev && GET_CODE (prev) == BARRIER) { ! RTX_CODE code; while (next != 0 && (GET_RTX_CLASS (code = GET_CODE (next)) == 'i' || code == NOTE || code == BARRIER *************** delete_insn (insn) *** 3062,3068 **** deletion of unreachable code, after a different label. As long as the value from this recursive call is correct, this invocation functions correctly. */ ! next = delete_insn (next); } } --- 1836,1842 ---- deletion of unreachable code, after a different label. As long as the value from this recursive call is correct, this invocation functions correctly. */ ! next = delete_related_insns (next); } } *************** next_nondeleted_insn (insn) *** 3088,3101 **** void delete_for_peephole (from, to) ! register rtx from, to; { ! register rtx insn = from; while (1) { ! register rtx next = NEXT_INSN (insn); ! register rtx prev = PREV_INSN (insn); if (GET_CODE (insn) != NOTE) { --- 1862,1875 ---- void delete_for_peephole (from, to) ! rtx from, to; { ! rtx insn = from; while (1) { ! rtx next = NEXT_INSN (insn); ! rtx prev = PREV_INSN (insn); if (GET_CODE (insn) != NOTE) { *************** delete_for_peephole (from, to) *** 3132,3144 **** so it's possible to get spurious warnings from this. */ void ! never_reached_warning (avoided_insn) ! rtx avoided_insn; { rtx insn; rtx a_line_note = NULL; ! int two_avoided_lines = 0; ! int contains_insn = 0; if (! warn_notreached) return; --- 1906,1917 ---- so it's possible to get spurious warnings from this. */ void ! never_reached_warning (avoided_insn, finish) ! rtx avoided_insn, finish; { rtx insn; rtx a_line_note = NULL; ! int two_avoided_lines = 0, contains_insn = 0, reached_end = 0; if (! warn_notreached) return; *************** never_reached_warning (avoided_insn) *** 3148,3157 **** for (insn = avoided_insn; insn != NULL; insn = NEXT_INSN (insn)) { ! if (GET_CODE (insn) == CODE_LABEL) break; ! else if (GET_CODE (insn) == NOTE /* A line number note? */ ! && NOTE_LINE_NUMBER (insn) >= 0) { if (a_line_note == NULL) a_line_note = insn; --- 1921,1931 ---- for (insn = avoided_insn; insn != NULL; insn = NEXT_INSN (insn)) { ! if (finish == NULL && GET_CODE (insn) == CODE_LABEL) break; ! ! if (GET_CODE (insn) == NOTE /* A line number note? */ ! && NOTE_LINE_NUMBER (insn) >= 0) { if (a_line_note == NULL) a_line_note = insn; *************** never_reached_warning (avoided_insn) *** 3160,3166 **** != NOTE_LINE_NUMBER (insn)); } else if (INSN_P (insn)) ! contains_insn = 1; } if (two_avoided_lines && contains_insn) warning_with_file_and_line (NOTE_SOURCE_FILE (a_line_note), --- 1934,1947 ---- != NOTE_LINE_NUMBER (insn)); } else if (INSN_P (insn)) ! { ! if (reached_end) ! break; ! contains_insn = 1; ! } ! ! if (insn == finish) ! reached_end = 1; } if (two_avoided_lines && contains_insn) warning_with_file_and_line (NOTE_SOURCE_FILE (a_line_note), *************** redirect_exp_1 (loc, olabel, nlabel, ins *** 3177,3186 **** rtx olabel, nlabel; rtx insn; { ! register rtx x = *loc; ! register RTX_CODE code = GET_CODE (x); ! register int i; ! register const char *fmt; if (code == LABEL_REF) { --- 1958,1967 ---- rtx olabel, nlabel; rtx insn; { ! rtx x = *loc; ! RTX_CODE code = GET_CODE (x); ! int i; ! const char *fmt; if (code == LABEL_REF) { *************** redirect_exp_1 (loc, olabel, nlabel, ins *** 3220,3226 **** redirect_exp_1 (&XEXP (x, i), olabel, nlabel, insn); else if (fmt[i] == 'E') { ! register int j; for (j = 0; j < XVECLEN (x, i); j++) redirect_exp_1 (&XVECEXP (x, i, j), olabel, nlabel, insn); } --- 2001,2007 ---- redirect_exp_1 (&XEXP (x, i), olabel, nlabel, insn); else if (fmt[i] == 'E') { ! int j; for (j = 0; j < XVECLEN (x, i); j++) redirect_exp_1 (&XVECEXP (x, i, j), olabel, nlabel, insn); } *************** redirect_jump (jump, nlabel, delete_unus *** 3283,3289 **** rtx jump, nlabel; int delete_unused; { ! register rtx olabel = JUMP_LABEL (jump); if (nlabel == olabel) return 1; --- 2064,2070 ---- rtx jump, nlabel; int delete_unused; { ! rtx olabel = JUMP_LABEL (jump); if (nlabel == olabel) return 1; *************** redirect_jump (jump, nlabel, delete_unus *** 3291,3313 **** if (! redirect_exp (olabel, nlabel, jump)) return 0; - /* If this is an unconditional branch, delete it from the jump_chain of - OLABEL and add it to the jump_chain of NLABEL (assuming both labels - have UID's in range and JUMP_CHAIN is valid). */ - if (jump_chain && (simplejump_p (jump) - || GET_CODE (PATTERN (jump)) == RETURN)) - { - int label_index = nlabel ? INSN_UID (nlabel) : 0; - - delete_from_jump_chain (jump); - if (label_index < max_jump_chain - && INSN_UID (jump) < max_jump_chain) - { - jump_chain[INSN_UID (jump)] = jump_chain[label_index]; - jump_chain[label_index] = jump; - } - } - JUMP_LABEL (jump) = nlabel; if (nlabel) ++LABEL_NUSES (nlabel); --- 2072,2077 ---- *************** redirect_jump (jump, nlabel, delete_unus *** 3320,3327 **** && NOTE_LINE_NUMBER (NEXT_INSN (olabel)) == NOTE_INSN_FUNCTION_END) emit_note_after (NOTE_INSN_FUNCTION_END, nlabel); ! if (olabel && --LABEL_NUSES (olabel) == 0 && delete_unused) ! delete_insn (olabel); return 1; } --- 2084,2093 ---- && NOTE_LINE_NUMBER (NEXT_INSN (olabel)) == NOTE_INSN_FUNCTION_END) emit_note_after (NOTE_INSN_FUNCTION_END, nlabel); ! if (olabel && --LABEL_NUSES (olabel) == 0 && delete_unused ! /* Undefined labels will remain outside the insn stream. */ ! && INSN_UID (olabel)) ! delete_related_insns (olabel); return 1; } *************** static void *** 3333,3339 **** invert_exp_1 (insn) rtx insn; { ! register RTX_CODE code; rtx x = pc_set (insn); if (!x) --- 2099,2105 ---- invert_exp_1 (insn) rtx insn; { ! RTX_CODE code; rtx x = pc_set (insn); if (!x) *************** invert_exp_1 (insn) *** 3344,3351 **** if (code == IF_THEN_ELSE) { ! register rtx comp = XEXP (x, 0); ! register rtx tem; enum rtx_code reversed_code; /* We can do this in two ways: The preferable way, which can only --- 2110,2117 ---- if (code == IF_THEN_ELSE) { ! rtx comp = XEXP (x, 0); ! rtx tem; enum rtx_code reversed_code; /* We can do this in two ways: The preferable way, which can only *************** invert_jump (jump, nlabel, delete_unused *** 3426,3438 **** if (redirect_jump (jump, nlabel, delete_unused)) { ! /* An inverted jump means that a probability taken becomes a ! probability not taken. Subtract the branch probability from the ! probability base to convert it back to a taken probability. */ ! ! rtx note = find_reg_note (jump, REG_BR_PROB, NULL_RTX); ! if (note) ! XEXP (note, 0) = GEN_INT (REG_BR_PROB_BASE - INTVAL (XEXP (note, 0))); return 1; } --- 2192,2198 ---- if (redirect_jump (jump, nlabel, delete_unused)) { ! invert_br_probabilities (jump); return 1; } *************** invert_jump (jump, nlabel, delete_unused *** 3444,3574 **** return 0; } - /* Delete the instruction JUMP from any jump chain it might be on. */ - - static void - delete_from_jump_chain (jump) - rtx jump; - { - int index; - rtx olabel = JUMP_LABEL (jump); - - /* Handle unconditional jumps. */ - if (jump_chain && olabel != 0 - && INSN_UID (olabel) < max_jump_chain - && simplejump_p (jump)) - index = INSN_UID (olabel); - /* Handle return insns. */ - else if (jump_chain && GET_CODE (PATTERN (jump)) == RETURN) - index = 0; - else - return; - - if (jump_chain[index] == jump) - jump_chain[index] = jump_chain[INSN_UID (jump)]; - else - { - rtx insn; - - for (insn = jump_chain[index]; - insn != 0; - insn = jump_chain[INSN_UID (insn)]) - if (jump_chain[INSN_UID (insn)] == jump) - { - jump_chain[INSN_UID (insn)] = jump_chain[INSN_UID (jump)]; - break; - } - } - } - - /* Make jump JUMP jump to label NLABEL, assuming it used to be a tablejump. - - If the old jump target label (before the dispatch table) becomes unused, - it and the dispatch table may be deleted. In that case, find the insn - before the jump references that label and delete it and logical successors - too. */ - - static void - redirect_tablejump (jump, nlabel) - rtx jump, nlabel; - { - register rtx olabel = JUMP_LABEL (jump); - rtx *notep, note, next; - - /* Add this jump to the jump_chain of NLABEL. */ - if (jump_chain && INSN_UID (nlabel) < max_jump_chain - && INSN_UID (jump) < max_jump_chain) - { - jump_chain[INSN_UID (jump)] = jump_chain[INSN_UID (nlabel)]; - jump_chain[INSN_UID (nlabel)] = jump; - } - - for (notep = ®_NOTES (jump), note = *notep; note; note = next) - { - next = XEXP (note, 1); - - if (REG_NOTE_KIND (note) != REG_DEAD - /* Verify that the REG_NOTE is legitimate. */ - || GET_CODE (XEXP (note, 0)) != REG - || ! reg_mentioned_p (XEXP (note, 0), PATTERN (jump))) - notep = &XEXP (note, 1); - else - { - delete_prior_computation (note, jump); - *notep = next; - } - } - - PATTERN (jump) = gen_jump (nlabel); - JUMP_LABEL (jump) = nlabel; - ++LABEL_NUSES (nlabel); - INSN_CODE (jump) = -1; - - if (--LABEL_NUSES (olabel) == 0) - { - delete_labelref_insn (jump, olabel, 0); - delete_insn (olabel); - } - } - - /* Find the insn referencing LABEL that is a logical predecessor of INSN. - If we found one, delete it and then delete this insn if DELETE_THIS is - non-zero. Return non-zero if INSN or a predecessor references LABEL. */ - - static int - delete_labelref_insn (insn, label, delete_this) - rtx insn, label; - int delete_this; - { - int deleted = 0; - rtx link; - - if (GET_CODE (insn) != NOTE - && reg_mentioned_p (label, PATTERN (insn))) - { - if (delete_this) - { - delete_insn (insn); - deleted = 1; - } - else - return 1; - } - - for (link = LOG_LINKS (insn); link; link = XEXP (link, 1)) - if (delete_labelref_insn (XEXP (link, 0), label, 1)) - { - if (delete_this) - { - delete_insn (insn); - deleted = 1; - } - else - return 1; - } - - return deleted; - } /* Like rtx_equal_p except that it considers two REGs as equal if they renumber to the same value and considers two commutative --- 2204,2209 ---- *************** int *** 3587,3595 **** rtx_renumbered_equal_p (x, y) rtx x, y; { ! register int i; ! register RTX_CODE code = GET_CODE (x); ! register const char *fmt; if (x == y) return 1; --- 2222,2230 ---- rtx_renumbered_equal_p (x, y) rtx x, y; { ! int i; ! RTX_CODE code = GET_CODE (x); ! const char *fmt; if (x == y) return 1; *************** rtx_renumbered_equal_p (x, y) *** 3599,3605 **** && GET_CODE (SUBREG_REG (y)) == REG))) { int reg_x = -1, reg_y = -1; ! int word_x = 0, word_y = 0; if (GET_MODE (x) != GET_MODE (y)) return 0; --- 2234,2240 ---- && GET_CODE (SUBREG_REG (y)) == REG))) { int reg_x = -1, reg_y = -1; ! int byte_x = 0, byte_y = 0; if (GET_MODE (x) != GET_MODE (y)) return 0; *************** rtx_renumbered_equal_p (x, y) *** 3612,3626 **** if (code == SUBREG) { reg_x = REGNO (SUBREG_REG (x)); ! word_x = SUBREG_WORD (x); if (reg_renumber[reg_x] >= 0) { ! reg_x = reg_renumber[reg_x] + word_x; ! word_x = 0; } } - else { reg_x = REGNO (x); --- 2247,2263 ---- if (code == SUBREG) { reg_x = REGNO (SUBREG_REG (x)); ! byte_x = SUBREG_BYTE (x); if (reg_renumber[reg_x] >= 0) { ! reg_x = subreg_regno_offset (reg_renumber[reg_x], ! GET_MODE (SUBREG_REG (x)), ! byte_x, ! GET_MODE (x)); ! byte_x = 0; } } else { reg_x = REGNO (x); *************** rtx_renumbered_equal_p (x, y) *** 3631,3645 **** if (GET_CODE (y) == SUBREG) { reg_y = REGNO (SUBREG_REG (y)); ! word_y = SUBREG_WORD (y); if (reg_renumber[reg_y] >= 0) { ! reg_y = reg_renumber[reg_y]; ! word_y = 0; } } - else { reg_y = REGNO (y); --- 2268,2284 ---- if (GET_CODE (y) == SUBREG) { reg_y = REGNO (SUBREG_REG (y)); ! byte_y = SUBREG_BYTE (y); if (reg_renumber[reg_y] >= 0) { ! reg_y = subreg_regno_offset (reg_renumber[reg_y], ! GET_MODE (SUBREG_REG (y)), ! byte_y, ! GET_MODE (y)); ! byte_y = 0; } } else { reg_y = REGNO (y); *************** rtx_renumbered_equal_p (x, y) *** 3647,3653 **** reg_y = reg_renumber[reg_y]; } ! return reg_x >= 0 && reg_x == reg_y && word_x == word_y; } /* Now we have disposed of all the cases --- 2286,2292 ---- reg_y = reg_renumber[reg_y]; } ! return reg_x >= 0 && reg_x == reg_y && byte_x == byte_y; } /* Now we have disposed of all the cases *************** rtx_renumbered_equal_p (x, y) *** 3714,3720 **** fmt = GET_RTX_FORMAT (code); for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) { ! register int j; switch (fmt[i]) { case 'w': --- 2353,2359 ---- fmt = GET_RTX_FORMAT (code); for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) { ! int j; switch (fmt[i]) { case 'w': *************** rtx_renumbered_equal_p (x, y) *** 3727,3732 **** --- 2366,2376 ---- return 0; break; + case 't': + if (XTREE (x, i) != XTREE (y, i)) + return 0; + break; + case 's': if (strcmp (XSTR (x, i), XSTR (y, i))) return 0; *************** true_regnum (x) *** 3778,4250 **** { int base = true_regnum (SUBREG_REG (x)); if (base >= 0 && base < FIRST_PSEUDO_REGISTER) ! return SUBREG_WORD (x) + base; } return -1; } - - /* Optimize code of the form: - - for (x = a[i]; x; ...) - ... - for (x = a[i]; x; ...) - ... - foo: - - Loop optimize will change the above code into - - if (x = a[i]) - for (;;) - { ...; if (! (x = ...)) break; } - if (x = a[i]) - for (;;) - { ...; if (! (x = ...)) break; } - foo: - - In general, if the first test fails, the program can branch - directly to `foo' and skip the second try which is doomed to fail. - We run this after loop optimization and before flow analysis. */ - - /* When comparing the insn patterns, we track the fact that different - pseudo-register numbers may have been used in each computation. - The following array stores an equivalence -- same_regs[I] == J means - that pseudo register I was used in the first set of tests in a context - where J was used in the second set. We also count the number of such - pending equivalences. If nonzero, the expressions really aren't the - same. */ - - static int *same_regs; - - static int num_same_regs; - - /* Track any registers modified between the target of the first jump and - the second jump. They never compare equal. */ - - static char *modified_regs; - - /* Record if memory was modified. */ - - static int modified_mem; - - /* Called via note_stores on each insn between the target of the first - branch and the second branch. It marks any changed registers. */ - - static void - mark_modified_reg (dest, x, data) - rtx dest; - rtx x; - void *data ATTRIBUTE_UNUSED; - { - int regno; - unsigned int i; - - if (GET_CODE (dest) == SUBREG) - dest = SUBREG_REG (dest); - - if (GET_CODE (dest) == MEM) - modified_mem = 1; - - if (GET_CODE (dest) != REG) - return; - - regno = REGNO (dest); - if (regno >= FIRST_PSEUDO_REGISTER) - modified_regs[regno] = 1; - /* Don't consider a hard condition code register as modified, - if it is only being set. thread_jumps will check if it is set - to the same value. */ - else if (GET_MODE_CLASS (GET_MODE (dest)) != MODE_CC - || GET_CODE (x) != SET - || ! rtx_equal_p (dest, SET_DEST (x)) - || HARD_REGNO_NREGS (regno, GET_MODE (dest)) != 1) - for (i = 0; i < HARD_REGNO_NREGS (regno, GET_MODE (dest)); i++) - modified_regs[regno + i] = 1; - } - - /* F is the first insn in the chain of insns. */ - - void - thread_jumps (f, max_reg, flag_before_loop) - rtx f; - int max_reg; - int flag_before_loop; - { - /* Basic algorithm is to find a conditional branch, - the label it may branch to, and the branch after - that label. If the two branches test the same condition, - walk back from both branch paths until the insn patterns - differ, or code labels are hit. If we make it back to - the target of the first branch, then we know that the first branch - will either always succeed or always fail depending on the relative - senses of the two branches. So adjust the first branch accordingly - in this case. */ - - rtx label, b1, b2, t1, t2; - enum rtx_code code1, code2; - rtx b1op0, b1op1, b2op0, b2op1; - int changed = 1; - int i; - int *all_reset; - enum rtx_code reversed_code1, reversed_code2; - - /* Allocate register tables and quick-reset table. */ - modified_regs = (char *) xmalloc (max_reg * sizeof (char)); - same_regs = (int *) xmalloc (max_reg * sizeof (int)); - all_reset = (int *) xmalloc (max_reg * sizeof (int)); - for (i = 0; i < max_reg; i++) - all_reset[i] = -1; - - while (changed) - { - changed = 0; - - for (b1 = f; b1; b1 = NEXT_INSN (b1)) - { - rtx set; - rtx set2; - - /* Get to a candidate branch insn. */ - if (GET_CODE (b1) != JUMP_INSN - || ! any_condjump_p (b1) || JUMP_LABEL (b1) == 0) - continue; - - memset (modified_regs, 0, max_reg * sizeof (char)); - modified_mem = 0; - - memcpy (same_regs, all_reset, max_reg * sizeof (int)); - num_same_regs = 0; - - label = JUMP_LABEL (b1); - - /* Look for a branch after the target. Record any registers and - memory modified between the target and the branch. Stop when we - get to a label since we can't know what was changed there. */ - for (b2 = NEXT_INSN (label); b2; b2 = NEXT_INSN (b2)) - { - if (GET_CODE (b2) == CODE_LABEL) - break; - - else if (GET_CODE (b2) == JUMP_INSN) - { - /* If this is an unconditional jump and is the only use of - its target label, we can follow it. */ - if (any_uncondjump_p (b2) - && onlyjump_p (b2) - && JUMP_LABEL (b2) != 0 - && LABEL_NUSES (JUMP_LABEL (b2)) == 1) - { - b2 = JUMP_LABEL (b2); - continue; - } - else - break; - } - - if (GET_CODE (b2) != CALL_INSN && GET_CODE (b2) != INSN) - continue; - - if (GET_CODE (b2) == CALL_INSN) - { - modified_mem = 1; - for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) - if (call_used_regs[i] && ! fixed_regs[i] - && i != STACK_POINTER_REGNUM - && i != FRAME_POINTER_REGNUM - && i != HARD_FRAME_POINTER_REGNUM - && i != ARG_POINTER_REGNUM) - modified_regs[i] = 1; - } - - note_stores (PATTERN (b2), mark_modified_reg, NULL); - } - - /* Check the next candidate branch insn from the label - of the first. */ - if (b2 == 0 - || GET_CODE (b2) != JUMP_INSN - || b2 == b1 - || !any_condjump_p (b2) - || !onlyjump_p (b2)) - continue; - set = pc_set (b1); - set2 = pc_set (b2); - - /* Get the comparison codes and operands, reversing the - codes if appropriate. If we don't have comparison codes, - we can't do anything. */ - b1op0 = XEXP (XEXP (SET_SRC (set), 0), 0); - b1op1 = XEXP (XEXP (SET_SRC (set), 0), 1); - code1 = GET_CODE (XEXP (SET_SRC (set), 0)); - reversed_code1 = code1; - if (XEXP (SET_SRC (set), 1) == pc_rtx) - code1 = reversed_comparison_code (XEXP (SET_SRC (set), 0), b1); - else - reversed_code1 = reversed_comparison_code (XEXP (SET_SRC (set), 0), b1); - - b2op0 = XEXP (XEXP (SET_SRC (set2), 0), 0); - b2op1 = XEXP (XEXP (SET_SRC (set2), 0), 1); - code2 = GET_CODE (XEXP (SET_SRC (set2), 0)); - reversed_code2 = code2; - if (XEXP (SET_SRC (set2), 1) == pc_rtx) - code2 = reversed_comparison_code (XEXP (SET_SRC (set2), 0), b2); - else - reversed_code2 = reversed_comparison_code (XEXP (SET_SRC (set2), 0), b2); - - /* If they test the same things and knowing that B1 branches - tells us whether or not B2 branches, check if we - can thread the branch. */ - if (rtx_equal_for_thread_p (b1op0, b2op0, b2) - && rtx_equal_for_thread_p (b1op1, b2op1, b2) - && (comparison_dominates_p (code1, code2) - || comparison_dominates_p (code1, reversed_code2))) - - { - t1 = prev_nonnote_insn (b1); - t2 = prev_nonnote_insn (b2); - - while (t1 != 0 && t2 != 0) - { - if (t2 == label) - { - /* We have reached the target of the first branch. - If there are no pending register equivalents, - we know that this branch will either always - succeed (if the senses of the two branches are - the same) or always fail (if not). */ - rtx new_label; - - if (num_same_regs != 0) - break; - - if (comparison_dominates_p (code1, code2)) - new_label = JUMP_LABEL (b2); - else - new_label = get_label_after (b2); - - if (JUMP_LABEL (b1) != new_label) - { - rtx prev = PREV_INSN (new_label); - - if (flag_before_loop - && GET_CODE (prev) == NOTE - && NOTE_LINE_NUMBER (prev) == NOTE_INSN_LOOP_BEG) - { - /* Don't thread to the loop label. If a loop - label is reused, loop optimization will - be disabled for that loop. */ - new_label = gen_label_rtx (); - emit_label_after (new_label, PREV_INSN (prev)); - } - changed |= redirect_jump (b1, new_label, 1); - } - break; - } - - /* If either of these is not a normal insn (it might be - a JUMP_INSN, CALL_INSN, or CODE_LABEL) we fail. (NOTEs - have already been skipped above.) Similarly, fail - if the insns are different. */ - if (GET_CODE (t1) != INSN || GET_CODE (t2) != INSN - || recog_memoized (t1) != recog_memoized (t2) - || ! rtx_equal_for_thread_p (PATTERN (t1), - PATTERN (t2), t2)) - break; - - t1 = prev_nonnote_insn (t1); - t2 = prev_nonnote_insn (t2); - } - } - } - } - - /* Clean up. */ - free (modified_regs); - free (same_regs); - free (all_reset); - } - - /* This is like RTX_EQUAL_P except that it knows about our handling of - possibly equivalent registers and knows to consider volatile and - modified objects as not equal. - - YINSN is the insn containing Y. */ - - int - rtx_equal_for_thread_p (x, y, yinsn) - rtx x, y; - rtx yinsn; - { - register int i; - register int j; - register enum rtx_code code; - register const char *fmt; - - code = GET_CODE (x); - /* Rtx's of different codes cannot be equal. */ - if (code != GET_CODE (y)) - return 0; - - /* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent. - (REG:SI x) and (REG:HI x) are NOT equivalent. */ - - if (GET_MODE (x) != GET_MODE (y)) - return 0; - - /* For floating-point, consider everything unequal. This is a bit - pessimistic, but this pass would only rarely do anything for FP - anyway. */ - if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT - && FLOAT_MODE_P (GET_MODE (x)) && ! flag_fast_math) - return 0; - - /* For commutative operations, the RTX match if the operand match in any - order. Also handle the simple binary and unary cases without a loop. */ - if (code == EQ || code == NE || GET_RTX_CLASS (code) == 'c') - return ((rtx_equal_for_thread_p (XEXP (x, 0), XEXP (y, 0), yinsn) - && rtx_equal_for_thread_p (XEXP (x, 1), XEXP (y, 1), yinsn)) - || (rtx_equal_for_thread_p (XEXP (x, 0), XEXP (y, 1), yinsn) - && rtx_equal_for_thread_p (XEXP (x, 1), XEXP (y, 0), yinsn))); - else if (GET_RTX_CLASS (code) == '<' || GET_RTX_CLASS (code) == '2') - return (rtx_equal_for_thread_p (XEXP (x, 0), XEXP (y, 0), yinsn) - && rtx_equal_for_thread_p (XEXP (x, 1), XEXP (y, 1), yinsn)); - else if (GET_RTX_CLASS (code) == '1') - return rtx_equal_for_thread_p (XEXP (x, 0), XEXP (y, 0), yinsn); - - /* Handle special-cases first. */ - switch (code) - { - case REG: - if (REGNO (x) == REGNO (y) && ! modified_regs[REGNO (x)]) - return 1; - - /* If neither is user variable or hard register, check for possible - equivalence. */ - if (REG_USERVAR_P (x) || REG_USERVAR_P (y) - || REGNO (x) < FIRST_PSEUDO_REGISTER - || REGNO (y) < FIRST_PSEUDO_REGISTER) - return 0; - - if (same_regs[REGNO (x)] == -1) - { - same_regs[REGNO (x)] = REGNO (y); - num_same_regs++; - - /* If this is the first time we are seeing a register on the `Y' - side, see if it is the last use. If not, we can't thread the - jump, so mark it as not equivalent. */ - if (REGNO_LAST_UID (REGNO (y)) != INSN_UID (yinsn)) - return 0; - - return 1; - } - else - return (same_regs[REGNO (x)] == (int) REGNO (y)); - - break; - - case MEM: - /* If memory modified or either volatile, not equivalent. - Else, check address. */ - if (modified_mem || MEM_VOLATILE_P (x) || MEM_VOLATILE_P (y)) - return 0; - - return rtx_equal_for_thread_p (XEXP (x, 0), XEXP (y, 0), yinsn); - - case ASM_INPUT: - if (MEM_VOLATILE_P (x) || MEM_VOLATILE_P (y)) - return 0; - - break; - - case SET: - /* Cancel a pending `same_regs' if setting equivalenced registers. - Then process source. */ - if (GET_CODE (SET_DEST (x)) == REG - && GET_CODE (SET_DEST (y)) == REG) - { - if (same_regs[REGNO (SET_DEST (x))] == (int) REGNO (SET_DEST (y))) - { - same_regs[REGNO (SET_DEST (x))] = -1; - num_same_regs--; - } - else if (REGNO (SET_DEST (x)) != REGNO (SET_DEST (y))) - return 0; - } - else - { - if (rtx_equal_for_thread_p (SET_DEST (x), SET_DEST (y), yinsn) == 0) - return 0; - } - - return rtx_equal_for_thread_p (SET_SRC (x), SET_SRC (y), yinsn); - - case LABEL_REF: - return XEXP (x, 0) == XEXP (y, 0); - - case SYMBOL_REF: - return XSTR (x, 0) == XSTR (y, 0); - - default: - break; - } - - if (x == y) - return 1; - - fmt = GET_RTX_FORMAT (code); - for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) - { - switch (fmt[i]) - { - case 'w': - if (XWINT (x, i) != XWINT (y, i)) - return 0; - break; - - case 'n': - case 'i': - if (XINT (x, i) != XINT (y, i)) - return 0; - break; - - case 'V': - case 'E': - /* Two vectors must have the same length. */ - if (XVECLEN (x, i) != XVECLEN (y, i)) - return 0; - - /* And the corresponding elements must match. */ - for (j = 0; j < XVECLEN (x, i); j++) - if (rtx_equal_for_thread_p (XVECEXP (x, i, j), - XVECEXP (y, i, j), yinsn) == 0) - return 0; - break; - - case 'e': - if (rtx_equal_for_thread_p (XEXP (x, i), XEXP (y, i), yinsn) == 0) - return 0; - break; - - case 'S': - case 's': - if (strcmp (XSTR (x, i), XSTR (y, i))) - return 0; - break; - - case 'u': - /* These are just backpointers, so they don't matter. */ - break; - - case '0': - case 't': - break; - - /* It is believed that rtx's at this level will never - contain anything but integers and other rtx's, - except for within LABEL_REFs and SYMBOL_REFs. */ - default: - abort (); - } - } - return 1; - } --- 2422,2430 ---- { int base = true_regnum (SUBREG_REG (x)); if (base >= 0 && base < FIRST_PSEUDO_REGISTER) ! return base + subreg_regno_offset (REGNO (SUBREG_REG (x)), ! GET_MODE (SUBREG_REG (x)), ! SUBREG_BYTE (x), GET_MODE (x)); } return -1; } diff -Nrc3pad gcc-3.0.4/gcc/langhooks-def.h gcc-3.1/gcc/langhooks-def.h *** gcc-3.0.4/gcc/langhooks-def.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/langhooks-def.h Tue Mar 19 07:56:35 2002 *************** *** 0 **** --- 1,161 ---- + /* Default macros to initialize the lang_hooks data structure. + Copyright 2001 Free Software Foundation, Inc. + Contributed by Alexandre Oliva + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GNU CC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU CC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + #ifndef GCC_LANG_HOOKS_DEF_H + #define GCC_LANG_HOOKS_DEF_H + + /* Provide a hook routine for alias sets that always returns 1. This is + used by languages that haven't deal with alias sets yet. */ + extern HOST_WIDE_INT hook_get_alias_set_0 PARAMS ((tree)); + + /* Note to creators of new hooks: + + The macros in this file should NOT be surrounded by a + #ifdef...#endif pair, since this file declares the defaults. Each + front end overrides any hooks it wishes to, in the file containing + its struct lang_hooks, AFTER including this file. + + Prefix all default hooks with "lhd_". */ + + /* See langhooks.h for the definition and documentation of each hook. */ + + extern void lhd_do_nothing PARAMS ((void)); + extern int lhd_decode_option PARAMS ((int, char **)); + extern HOST_WIDE_INT lhd_get_alias_set PARAMS ((tree)); + extern tree lhd_return_tree PARAMS ((tree)); + extern int lhd_safe_from_p PARAMS ((rtx, tree)); + extern int lhd_staticp PARAMS ((tree)); + extern void lhd_clear_binding_stack PARAMS ((void)); + extern void lhd_print_tree_nothing PARAMS ((FILE *, tree, int)); + extern void lhd_set_yydebug PARAMS ((int)); + + /* Declarations of default tree inlining hooks. */ + tree lhd_tree_inlining_walk_subtrees PARAMS ((tree *, int *, + walk_tree_fn, + void *, void *)); + int lhd_tree_inlining_cannot_inline_tree_fn PARAMS ((tree *)); + int lhd_tree_inlining_disregard_inline_limits PARAMS ((tree)); + tree lhd_tree_inlining_add_pending_fn_decls PARAMS ((void *, tree)); + int lhd_tree_inlining_tree_chain_matters_p PARAMS ((tree)); + int lhd_tree_inlining_auto_var_in_fn_p PARAMS ((tree, tree)); + tree lhd_tree_inlining_copy_res_decl_for_inlining PARAMS ((tree, tree, + tree, void *, + int *, void *)); + int lhd_tree_inlining_anon_aggr_type_p PARAMS ((tree)); + int lhd_tree_inlining_start_inlining PARAMS ((tree)); + void lhd_tree_inlining_end_inlining PARAMS ((tree)); + tree lhd_tree_inlining_convert_parm_for_inlining PARAMS ((tree, tree, tree)); + + #define LANG_HOOKS_NAME "GNU unknown" + #define LANG_HOOKS_IDENTIFIER_SIZE sizeof (struct lang_identifier) + #define LANG_HOOKS_INIT lhd_do_nothing + #define LANG_HOOKS_FINISH lhd_do_nothing + #define LANG_HOOKS_CLEAR_BINDING_STACK lhd_clear_binding_stack + #define LANG_HOOKS_INIT_OPTIONS lhd_do_nothing + #define LANG_HOOKS_DECODE_OPTION lhd_decode_option + #define LANG_HOOKS_POST_OPTIONS lhd_do_nothing + #define LANG_HOOKS_GET_ALIAS_SET lhd_get_alias_set + #define LANG_HOOKS_EXPAND_CONSTANT lhd_return_tree + #define LANG_HOOKS_SAFE_FROM_P lhd_safe_from_p + #define LANG_HOOKS_STATICP lhd_staticp + #define LANG_HOOKS_HONOR_READONLY false + #define LANG_HOOKS_PRINT_STATISTICS lhd_do_nothing + #define LANG_HOOKS_PRINT_XNODE lhd_print_tree_nothing + #define LANG_HOOKS_PRINT_DECL lhd_print_tree_nothing + #define LANG_HOOKS_PRINT_TYPE lhd_print_tree_nothing + #define LANG_HOOKS_PRINT_IDENTIFIER lhd_print_tree_nothing + #define LANG_HOOKS_SET_YYDEBUG lhd_set_yydebug + + /* Tree inlining hooks. */ + #define LANG_HOOKS_TREE_INLINING_WALK_SUBTREES lhd_tree_inlining_walk_subtrees + #define LANG_HOOKS_TREE_INLINING_CANNOT_INLINE_TREE_FN \ + lhd_tree_inlining_cannot_inline_tree_fn + #define LANG_HOOKS_TREE_INLINING_DISREGARD_INLINE_LIMITS \ + lhd_tree_inlining_disregard_inline_limits + #define LANG_HOOKS_TREE_INLINING_ADD_PENDING_FN_DECLS \ + lhd_tree_inlining_add_pending_fn_decls + #define LANG_HOOKS_TREE_INLINING_TREE_CHAIN_MATTERS_P \ + lhd_tree_inlining_tree_chain_matters_p + #define LANG_HOOKS_TREE_INLINING_AUTO_VAR_IN_FN_P \ + lhd_tree_inlining_auto_var_in_fn_p + #define LANG_HOOKS_TREE_INLINING_COPY_RES_DECL_FOR_INLINING \ + lhd_tree_inlining_copy_res_decl_for_inlining + #define LANG_HOOKS_TREE_INLINING_ANON_AGGR_TYPE_P \ + lhd_tree_inlining_anon_aggr_type_p + #define LANG_HOOKS_TREE_INLINING_START_INLINING \ + lhd_tree_inlining_start_inlining + #define LANG_HOOKS_TREE_INLINING_END_INLINING \ + lhd_tree_inlining_end_inlining + #define LANG_HOOKS_TREE_INLINING_CONVERT_PARM_FOR_INLINING \ + lhd_tree_inlining_convert_parm_for_inlining + + #define LANG_HOOKS_TREE_INLINING_INITIALIZER { \ + LANG_HOOKS_TREE_INLINING_WALK_SUBTREES, \ + LANG_HOOKS_TREE_INLINING_CANNOT_INLINE_TREE_FN, \ + LANG_HOOKS_TREE_INLINING_DISREGARD_INLINE_LIMITS, \ + LANG_HOOKS_TREE_INLINING_ADD_PENDING_FN_DECLS, \ + LANG_HOOKS_TREE_INLINING_TREE_CHAIN_MATTERS_P, \ + LANG_HOOKS_TREE_INLINING_AUTO_VAR_IN_FN_P, \ + LANG_HOOKS_TREE_INLINING_COPY_RES_DECL_FOR_INLINING, \ + LANG_HOOKS_TREE_INLINING_ANON_AGGR_TYPE_P, \ + LANG_HOOKS_TREE_INLINING_START_INLINING, \ + LANG_HOOKS_TREE_INLINING_END_INLINING, \ + LANG_HOOKS_TREE_INLINING_CONVERT_PARM_FOR_INLINING \ + } \ + + /* Tree dump hooks. */ + int lhd_tree_dump_dump_tree PARAMS ((void *, tree)); + int lhd_tree_dump_type_quals PARAMS ((tree)); + + #define LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN lhd_tree_dump_dump_tree + #define LANG_HOOKS_TREE_DUMP_TYPE_QUALS_FN lhd_tree_dump_type_quals + + #define LANG_HOOKS_TREE_DUMP_INITIALIZER { \ + LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN, \ + LANG_HOOKS_TREE_DUMP_TYPE_QUALS_FN \ + } \ + + /* The whole thing. The structure is defined in langhooks.h. */ + #define LANG_HOOKS_INITIALIZER { \ + LANG_HOOKS_NAME, \ + LANG_HOOKS_IDENTIFIER_SIZE, \ + LANG_HOOKS_INIT_OPTIONS, \ + LANG_HOOKS_DECODE_OPTION, \ + LANG_HOOKS_POST_OPTIONS, \ + LANG_HOOKS_INIT, \ + LANG_HOOKS_FINISH, \ + LANG_HOOKS_CLEAR_BINDING_STACK, \ + LANG_HOOKS_GET_ALIAS_SET, \ + LANG_HOOKS_EXPAND_CONSTANT, \ + LANG_HOOKS_SAFE_FROM_P, \ + LANG_HOOKS_STATICP, \ + LANG_HOOKS_HONOR_READONLY, \ + LANG_HOOKS_PRINT_STATISTICS, \ + LANG_HOOKS_PRINT_XNODE, \ + LANG_HOOKS_PRINT_DECL, \ + LANG_HOOKS_PRINT_TYPE, \ + LANG_HOOKS_PRINT_IDENTIFIER, \ + LANG_HOOKS_SET_YYDEBUG, \ + LANG_HOOKS_TREE_INLINING_INITIALIZER, \ + LANG_HOOKS_TREE_DUMP_INITIALIZER \ + } + + #endif /* GCC_LANG_HOOKS_DEF_H */ diff -Nrc3pad gcc-3.0.4/gcc/langhooks.c gcc-3.1/gcc/langhooks.c *** gcc-3.0.4/gcc/langhooks.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/langhooks.c Thu Mar 21 23:12:21 2002 *************** *** 0 **** --- 1,305 ---- + /* Default language-specific hooks. + Copyright 2001 Free Software Foundation, Inc. + Contributed by Alexandre Oliva + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GNU CC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU CC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + #include "config.h" + #include "system.h" + #include "toplev.h" + #include "tree.h" + #include "c-tree.h" + #include "tree-inline.h" + #include "rtl.h" + #include "insn-config.h" + #include "integrate.h" + #include "flags.h" + #include "langhooks.h" + #include "langhooks-def.h" + + /* Do nothing; in many cases the default hook. */ + + void + lhd_do_nothing () + { + } + + /* Do nothing (return the tree node passed). */ + + tree + lhd_return_tree (t) + tree t; + { + return t; + } + + /* Do nothing; the default hook to decode an option. */ + + int + lhd_decode_option (argc, argv) + int argc ATTRIBUTE_UNUSED; + char **argv ATTRIBUTE_UNUSED; + { + return 0; + } + + /* Called from by print-tree.c. */ + + void + lhd_print_tree_nothing (file, node, indent) + FILE *file ATTRIBUTE_UNUSED; + tree node ATTRIBUTE_UNUSED; + int indent ATTRIBUTE_UNUSED; + { + } + + /* Called from safe_from_p. */ + + int + lhd_safe_from_p (x, exp) + rtx x ATTRIBUTE_UNUSED; + tree exp ATTRIBUTE_UNUSED; + { + return 1; + } + + /* Called from staticp. */ + + int + lhd_staticp (exp) + tree exp ATTRIBUTE_UNUSED; + { + return 0; + } + + /* Called when -dy is given on the command line. */ + + void + lhd_set_yydebug (value) + int value; + { + if (value) + fprintf (stderr, "warning: no yacc/bison-generated output to debug!\n"); + } + + /* Provide a default routine to clear the binding stack. This is used + by languages that don't need to do anything special. */ + void + lhd_clear_binding_stack () + { + while (! global_bindings_p ()) + poplevel (0, 0, 0); + } + + /* Provide a default routine for alias sets that always returns -1. This + is used by languages that don't need to do anything special. */ + + HOST_WIDE_INT + lhd_get_alias_set (t) + tree t ATTRIBUTE_UNUSED; + { + return -1; + } + + /* Provide a hook routine for alias sets that always returns 0. This is + used by languages that haven't deal with alias sets yet. */ + + HOST_WIDE_INT + hook_get_alias_set_0 (t) + tree t ATTRIBUTE_UNUSED; + { + return 0; + } + + /* lang_hooks.tree_inlining.walk_subtrees is called by walk_tree() + after handling common cases, but before walking code-specific + sub-trees. If this hook is overridden for a language, it should + handle language-specific tree codes, as well as language-specific + information associated to common tree codes. If a tree node is + completely handled within this function, it should set *SUBTREES to + 0, so that generic handling isn't attempted. For language-specific + tree codes, generic handling would abort(), so make sure it is set + properly. Both SUBTREES and *SUBTREES is guaranteed to be non-zero + when the function is called. */ + + tree + lhd_tree_inlining_walk_subtrees (tp,subtrees,func,data,htab) + tree *tp ATTRIBUTE_UNUSED; + int *subtrees ATTRIBUTE_UNUSED; + walk_tree_fn func ATTRIBUTE_UNUSED; + void *data ATTRIBUTE_UNUSED; + void *htab ATTRIBUTE_UNUSED; + { + return NULL_TREE; + } + + /* lang_hooks.tree_inlining.cannot_inline_tree_fn is called to + determine whether there are language-specific reasons for not + inlining a given function. */ + + int + lhd_tree_inlining_cannot_inline_tree_fn (fnp) + tree *fnp; + { + if (flag_really_no_inline + && lookup_attribute ("always_inline", DECL_ATTRIBUTES (*fnp)) == NULL) + return 1; + + return 0; + } + + /* lang_hooks.tree_inlining.disregard_inline_limits is called to + determine whether a function should be considered for inlining even + if it would exceed inlining limits. */ + + int + lhd_tree_inlining_disregard_inline_limits (fn) + tree fn; + { + if (lookup_attribute ("always_inline", DECL_ATTRIBUTES (fn)) != NULL) + return 1; + + return 0; + } + + /* lang_hooks.tree_inlining.add_pending_fn_decls is called before + starting to inline a function, to push any language-specific + functions that should not be inlined into the current function, + into VAFNP. PFN is the top of varray, and should be returned if no + functions are pushed into VAFNP. The top of the varray should be + returned. */ + + tree + lhd_tree_inlining_add_pending_fn_decls (vafnp, pfn) + void *vafnp ATTRIBUTE_UNUSED; + tree pfn; + { + return pfn; + } + + /* lang_hooks.tree_inlining.tree_chain_matters_p indicates whether the + TREE_CHAIN of a language-specific tree node is relevant, i.e., + whether it should be walked, copied and preserved across copies. */ + + int + lhd_tree_inlining_tree_chain_matters_p (t) + tree t ATTRIBUTE_UNUSED; + { + return 0; + } + + /* lang_hooks.tree_inlining.auto_var_in_fn_p is called to determine + whether VT is an automatic variable defined in function FT. */ + + int + lhd_tree_inlining_auto_var_in_fn_p (var, fn) + tree var, fn; + { + return (DECL_P (var) && DECL_CONTEXT (var) == fn + && (((TREE_CODE (var) == VAR_DECL || TREE_CODE (var) == PARM_DECL) + && ! TREE_STATIC (var)) + || TREE_CODE (var) == LABEL_DECL + || TREE_CODE (var) == RESULT_DECL)); + } + + /* lang_hooks.tree_inlining.copy_res_decl_for_inlining should return a + declaration for the result RES of function FN to be inlined into + CALLER. NDP points to an integer that should be set in case a new + declaration wasn't created (presumably because RES was of aggregate + type, such that a TARGET_EXPR is used for the result). TEXPS is a + pointer to a varray with the stack of TARGET_EXPRs seen while + inlining functions into caller; the top of TEXPS is supposed to + match RES. */ + + tree + lhd_tree_inlining_copy_res_decl_for_inlining (res, fn, caller, + dm, ndp, texps) + tree res, fn, caller; + void *dm ATTRIBUTE_UNUSED; + int *ndp ATTRIBUTE_UNUSED; + void *texps ATTRIBUTE_UNUSED; + { + return copy_decl_for_inlining (res, fn, caller); + } + + /* lang_hooks.tree_inlining.anon_aggr_type_p determines whether T is a + type node representing an anonymous aggregate (union, struct, etc), + i.e., one whose members are in the same scope as the union itself. */ + + int + lhd_tree_inlining_anon_aggr_type_p (t) + tree t ATTRIBUTE_UNUSED; + { + return 0; + } + + /* lang_hooks.tree_inlining.start_inlining and end_inlining perform any + language-specific bookkeeping necessary for processing + FN. start_inlining returns non-zero if inlining should proceed, zero if + not. + + For instance, the C++ version keeps track of template instantiations to + avoid infinite recursion. */ + + int + lhd_tree_inlining_start_inlining (fn) + tree fn ATTRIBUTE_UNUSED; + { + return 1; + } + + void + lhd_tree_inlining_end_inlining (fn) + tree fn ATTRIBUTE_UNUSED; + { + } + + /* lang_hooks.tree_inlining.convert_parm_for_inlining performs any + language-specific conversion before assigning VALUE to PARM. */ + + tree + lhd_tree_inlining_convert_parm_for_inlining (parm, value, fndecl) + tree parm ATTRIBUTE_UNUSED; + tree value; + tree fndecl ATTRIBUTE_UNUSED; + { + return value; + } + + /* lang_hooks.tree_dump.dump_tree: Dump language-specific parts of tree + nodes. Returns non-zero if it does not want the usual dumping of the + second argument. */ + + int + lhd_tree_dump_dump_tree (di, t) + void *di ATTRIBUTE_UNUSED; + tree t ATTRIBUTE_UNUSED; + { + return 0; + } + + /* lang_hooks.tree_dump.type_qual: Determine type qualifiers in a + language-specific way. */ + + int + lhd_tree_dump_type_quals (t) + tree t; + { + return TYPE_QUALS (t); + } + diff -Nrc3pad gcc-3.0.4/gcc/langhooks.h gcc-3.1/gcc/langhooks.h *** gcc-3.0.4/gcc/langhooks.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/langhooks.h Tue Mar 19 07:56:35 2002 *************** *** 0 **** --- 1,167 ---- + /* The lang_hooks data structure. + Copyright 2001 Free Software Foundation, Inc. + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GNU CC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU CC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + #ifndef GCC_LANG_HOOKS_H + #define GCC_LANG_HOOKS_H + + /* A print hook for print_tree (). */ + typedef void (*lang_print_tree_hook) PARAMS ((FILE *, tree, int indent)); + + /* The following hooks are documented in langhooks.c. Must not be + NULL. */ + + struct lang_hooks_for_tree_inlining + { + union tree_node *(*walk_subtrees) PARAMS ((union tree_node **, int *, + union tree_node *(*) + (union tree_node **, + int *, void *), + void *, void *)); + int (*cannot_inline_tree_fn) PARAMS ((union tree_node **)); + int (*disregard_inline_limits) PARAMS ((union tree_node *)); + union tree_node *(*add_pending_fn_decls) PARAMS ((void *, + union tree_node *)); + int (*tree_chain_matters_p) PARAMS ((union tree_node *)); + int (*auto_var_in_fn_p) PARAMS ((union tree_node *, union tree_node *)); + union tree_node *(*copy_res_decl_for_inlining) PARAMS ((union tree_node *, + union tree_node *, + union tree_node *, + void *, int *, + void *)); + int (*anon_aggr_type_p) PARAMS ((union tree_node *)); + int (*start_inlining) PARAMS ((union tree_node *)); + void (*end_inlining) PARAMS ((union tree_node *)); + union tree_node *(*convert_parm_for_inlining) PARAMS ((union tree_node *, + union tree_node *, + union tree_node *)); + }; + + /* The following hooks are used by tree-dump.c. */ + + struct lang_hooks_for_tree_dump + { + /* Dump language-specific parts of tree nodes. Returns non-zero if it + does not want the usual dumping of the second argument. */ + int (*dump_tree) PARAMS ((void *, tree)); + + /* Determine type qualifiers in a language-specific way. */ + int (*type_quals) PARAMS ((tree)); + }; + + /* Language-specific hooks. See langhooks-def.h for defaults. */ + + struct lang_hooks + { + /* String identifying the front end. e.g. "GNU C++". */ + const char *name; + + /* sizeof (struct lang_identifier), so make_node () creates + identifier nodes long enough for the language-specific slots. */ + size_t identifier_size; + + /* The first callback made to the front end, for simple + initialization needed before any calls to decode_option. */ + void (*init_options) PARAMS ((void)); + + /* Function called with an option vector as argument, to decode a + single option (typically starting with -f or -W or +). It should + return the number of command-line arguments it uses if it handles + the option, or 0 and not complain if it does not recognise the + option. If this function returns a negative number, then its + absolute value is the number of command-line arguments used, but, + in addition, no language-independent option processing should be + done for this option. */ + int (*decode_option) PARAMS ((int, char **)); + + /* Called when all command line options have been parsed. Should do + any required consistency checks, modifications etc. Complex + initialization should be left to the "init" callback, since GC + and the identifier hashes are set up between now and then. */ + void (*post_options) PARAMS ((void)); + + /* Called after post_options, to initialize the front end. The main + input filename is passed, which may be NULL; the front end should + return the original filename (e.g. foo.i -> foo.c). Return NULL + to indicate a serious error of some sort; in that case no + compilation is performed, and the finish hook is called + immediately. */ + const char * (*init) PARAMS ((const char *)); + + /* Called at the end of compilation, as a finalizer. */ + void (*finish) PARAMS ((void)); + + /* Called immediately after parsing to clear the binding stack. */ + void (*clear_binding_stack) PARAMS ((void)); + + /* Called to obtain the alias set to be used for an expression or type. + Returns -1 if the language does nothing special for it. */ + HOST_WIDE_INT (*get_alias_set) PARAMS ((tree)); + + /* Called with an expression that is to be processed as a constant. + Returns either the same expression or a language-independent + constant equivalent to its input. */ + tree (*expand_constant) PARAMS ((tree)); + + /* Hook called by safe_from_p for language-specific tree codes. It is + up to the language front-end to install a hook if it has any such + codes that safe_from_p needs to know about. Since same_from_p will + recursively explore the TREE_OPERANDs of an expression, this hook + should not reexamine those pieces. This routine may recursively + call safe_from_p; it should always pass `0' as the TOP_P + parameter. */ + int (*safe_from_p) PARAMS ((rtx, tree)); + + /* Hook called by staticp for language-specific tree codes. */ + int (*staticp) PARAMS ((tree)); + + /* Nonzero if TYPE_READONLY and TREE_READONLY should always be honored. */ + bool honor_readonly; + + /* The front end can add its own statistics to -fmem-report with + this hook. It should output to stderr. */ + void (*print_statistics) PARAMS ((void)); + + /* Called by print_tree when there is a tree of class 'x' that it + doesn't know how to display. */ + lang_print_tree_hook print_xnode; + + /* Called to print language-dependent parts of a class 'd', class + 't', and IDENTIFIER_NODE nodes. */ + lang_print_tree_hook print_decl; + lang_print_tree_hook print_type; + lang_print_tree_hook print_identifier; + + /* Set yydebug for bison-based parsers, when -dy is given on the + command line. By default, if the parameter is non-zero, prints a + warning that the front end does not use such a parser. */ + void (*set_yydebug) PARAMS ((int)); + + struct lang_hooks_for_tree_inlining tree_inlining; + + struct lang_hooks_for_tree_dump tree_dump; + + /* Whenever you add entries here, make sure you adjust langhooks-def.h + and langhooks.c accordingly. */ + }; + + /* Each front end provides its own. */ + extern const struct lang_hooks lang_hooks; + + #endif /* GCC_LANG_HOOKS_H */ diff -Nrc3pad gcc-3.0.4/gcc/lcm.c gcc-3.1/gcc/lcm.c *** gcc-3.0.4/gcc/lcm.c Mon Feb 12 06:18:44 2001 --- gcc-3.1/gcc/lcm.c Sat Jan 12 01:18:42 2002 *************** *** 1,25 **** /* Generic partial redundancy elimination with lazy code motion support. Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* These routines are meant to be used by various optimization ! passes which can be modeled as lazy code motion problems. Including, but not limited to: * Traditional partial redundancy elimination. --- 1,25 ---- /* Generic partial redundancy elimination with lazy code motion support. Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* These routines are meant to be used by various optimization ! passes which can be modeled as lazy code motion problems. Including, but not limited to: * Traditional partial redundancy elimination. *************** static void compute_rev_insert_delete PA *** 95,102 **** /* Edge based lcm routines. */ ! /* Compute expression anticipatability at entrance and exit of each block. ! This is done based on the flow graph, and not on the pred-succ lists. Other than that, its pretty much identical to compute_antinout. */ static void --- 95,102 ---- /* Edge based lcm routines. */ ! /* Compute expression anticipatability at entrance and exit of each block. ! This is done based on the flow graph, and not on the pred-succ lists. Other than that, its pretty much identical to compute_antinout. */ static void *************** compute_antinout_edge (antloc, transp, a *** 128,134 **** *qin++ = BASIC_BLOCK (bb); BASIC_BLOCK (bb)->aux = BASIC_BLOCK (bb); } ! qin = worklist; qend = &worklist[n_basic_blocks]; qlen = n_basic_blocks; --- 128,134 ---- *qin++ = BASIC_BLOCK (bb); BASIC_BLOCK (bb)->aux = BASIC_BLOCK (bb); } ! qin = worklist; qend = &worklist[n_basic_blocks]; qlen = n_basic_blocks; *************** compute_antinout_edge (antloc, transp, a *** 177,182 **** --- 177,184 ---- } } + clear_aux_for_edges (); + clear_aux_for_blocks (); free (worklist); } *************** compute_earliest (edge_list, n_exprs, an *** 189,195 **** sbitmap *antin, *antout, *avout, *kill, *earliest; { sbitmap difference, temp_bitmap; ! int x, num_edges; basic_block pred, succ; num_edges = NUM_EDGES (edge_list); --- 191,197 ---- sbitmap *antin, *antout, *avout, *kill, *earliest; { sbitmap difference, temp_bitmap; ! int x, num_edges; basic_block pred, succ; num_edges = NUM_EDGES (edge_list); *************** compute_earliest (edge_list, n_exprs, an *** 213,220 **** sbitmap_zero (earliest[x]); else { ! sbitmap_difference (difference, antin[succ->index], ! avout[pred->index]); sbitmap_not (temp_bitmap, antout[pred->index]); sbitmap_a_and_b_or_c (earliest[x], difference, kill[pred->index], temp_bitmap); --- 215,222 ---- sbitmap_zero (earliest[x]); else { ! sbitmap_difference (difference, antin[succ->index], ! avout[pred->index]); sbitmap_not (temp_bitmap, antout[pred->index]); sbitmap_a_and_b_or_c (earliest[x], difference, kill[pred->index], temp_bitmap); *************** compute_earliest (edge_list, n_exprs, an *** 222,229 **** } } ! free (temp_bitmap); ! free (difference); } /* later(p,s) is dependent on the calculation of laterin(p). --- 224,231 ---- } } ! sbitmap_free (temp_bitmap); ! sbitmap_free (difference); } /* later(p,s) is dependent on the calculation of laterin(p). *************** compute_earliest (edge_list, n_exprs, an *** 254,260 **** EXIT block are handled in the normal fashion inside the loop. However, the insertion/deletion computation needs LATERIN(EXIT), so we have to compute it. */ ! static void compute_laterin (edge_list, earliest, antloc, later, laterin) struct edge_list *edge_list; --- 256,262 ---- EXIT block are handled in the normal fashion inside the loop. However, the insertion/deletion computation needs LATERIN(EXIT), so we have to compute it. */ ! static void compute_laterin (edge_list, earliest, antloc, later, laterin) struct edge_list *edge_list; *************** compute_laterin (edge_list, earliest, an *** 307,313 **** qin = worklist; /* Note that we do not use the last allocated element for our queue, as EXIT_BLOCK is never inserted into it. In fact the above allocation ! of n_basic_blocks + 1 elements is not encessary. */ qend = &worklist[n_basic_blocks]; qlen = n_basic_blocks; --- 309,315 ---- qin = worklist; /* Note that we do not use the last allocated element for our queue, as EXIT_BLOCK is never inserted into it. In fact the above allocation ! of n_basic_blocks + 1 elements is not encessary. */ qend = &worklist[n_basic_blocks]; qlen = n_basic_blocks; *************** compute_laterin (edge_list, earliest, an *** 354,359 **** --- 356,362 ---- laterin[n_basic_blocks], later[(size_t) e->aux]); + clear_aux_for_edges (); free (worklist); } *************** compute_insert_delete (edge_list, antloc *** 369,375 **** for (x = 0; x < n_basic_blocks; x++) sbitmap_difference (delete[x], antloc[x], laterin[x]); ! for (x = 0; x < NUM_EDGES (edge_list); x++) { basic_block b = INDEX_EDGE_SUCC_BB (edge_list, x); --- 372,378 ---- for (x = 0; x < n_basic_blocks; x++) sbitmap_difference (delete[x], antloc[x], laterin[x]); ! for (x = 0; x < NUM_EDGES (edge_list); x++) { basic_block b = INDEX_EDGE_SUCC_BB (edge_list, x); *************** pre_edge_lcm (file, n_exprs, transp, avl *** 422,428 **** avin = sbitmap_vector_alloc (n_basic_blocks, n_exprs); avout = sbitmap_vector_alloc (n_basic_blocks, n_exprs); compute_available (avloc, kill, avout, avin); ! free (avin); /* Compute global anticipatability. */ antin = sbitmap_vector_alloc (n_basic_blocks, n_exprs); --- 425,431 ---- avin = sbitmap_vector_alloc (n_basic_blocks, n_exprs); avout = sbitmap_vector_alloc (n_basic_blocks, n_exprs); compute_available (avloc, kill, avout, avin); ! sbitmap_vector_free (avin); /* Compute global anticipatability. */ antin = sbitmap_vector_alloc (n_basic_blocks, n_exprs); *************** pre_edge_lcm (file, n_exprs, transp, avl *** 446,454 **** dump_sbitmap_vector (file, "earliest", "", earliest, num_edges); #endif ! free (antout); ! free (antin); ! free (avout); later = sbitmap_vector_alloc (num_edges, n_exprs); --- 449,457 ---- dump_sbitmap_vector (file, "earliest", "", earliest, num_edges); #endif ! sbitmap_vector_free (antout); ! sbitmap_vector_free (antin); ! sbitmap_vector_free (avout); later = sbitmap_vector_alloc (num_edges, n_exprs); *************** pre_edge_lcm (file, n_exprs, transp, avl *** 464,477 **** } #endif ! free (earliest); *insert = sbitmap_vector_alloc (num_edges, n_exprs); *delete = sbitmap_vector_alloc (n_basic_blocks, n_exprs); compute_insert_delete (edge_list, antloc, later, laterin, *insert, *delete); ! free (laterin); ! free (later); #ifdef LCM_DEBUG_INFO if (file) --- 467,480 ---- } #endif ! sbitmap_vector_free (earliest); *insert = sbitmap_vector_alloc (num_edges, n_exprs); *delete = sbitmap_vector_alloc (n_basic_blocks, n_exprs); compute_insert_delete (edge_list, antloc, later, laterin, *insert, *delete); ! sbitmap_vector_free (laterin); ! sbitmap_vector_free (later); #ifdef LCM_DEBUG_INFO if (file) *************** pre_edge_lcm (file, n_exprs, transp, avl *** 490,496 **** void compute_available (avloc, kill, avout, avin) ! sbitmap *avloc, *kill, *avout, *avin; { int bb; edge e; --- 493,499 ---- void compute_available (avloc, kill, avout, avin) ! sbitmap *avloc, *kill, *avout, *avin; { int bb; edge e; *************** compute_available (avloc, kill, avout, a *** 513,519 **** *qin++ = BASIC_BLOCK (bb); BASIC_BLOCK (bb)->aux = BASIC_BLOCK (bb); } ! qin = worklist; qend = &worklist[n_basic_blocks]; qlen = n_basic_blocks; --- 516,522 ---- *qin++ = BASIC_BLOCK (bb); BASIC_BLOCK (bb)->aux = BASIC_BLOCK (bb); } ! qin = worklist; qend = &worklist[n_basic_blocks]; qlen = n_basic_blocks; *************** compute_available (avloc, kill, avout, a *** 565,584 **** } } free (worklist); } /* Compute the farthest vector for edge based lcm. */ static void ! compute_farthest (edge_list, n_exprs, st_avout, st_avin, st_antin, kill, farthest) struct edge_list *edge_list; int n_exprs; sbitmap *st_avout, *st_avin, *st_antin, *kill, *farthest; { sbitmap difference, temp_bitmap; ! int x, num_edges; basic_block pred, succ; num_edges = NUM_EDGES (edge_list); --- 568,589 ---- } } + clear_aux_for_edges (); + clear_aux_for_blocks (); free (worklist); } /* Compute the farthest vector for edge based lcm. */ static void ! compute_farthest (edge_list, n_exprs, st_avout, st_avin, st_antin, kill, farthest) struct edge_list *edge_list; int n_exprs; sbitmap *st_avout, *st_avin, *st_antin, *kill, *farthest; { sbitmap difference, temp_bitmap; ! int x, num_edges; basic_block pred, succ; num_edges = NUM_EDGES (edge_list); *************** compute_farthest (edge_list, n_exprs, st *** 598,614 **** sbitmap_zero (farthest[x]); else { ! sbitmap_difference (difference, st_avout[pred->index], st_antin[succ->index]); sbitmap_not (temp_bitmap, st_avin[succ->index]); ! sbitmap_a_and_b_or_c (farthest[x], difference, kill[succ->index], temp_bitmap); } } } ! free (temp_bitmap); ! free (difference); } /* Compute nearer and nearerout vectors for edge based lcm. --- 603,619 ---- sbitmap_zero (farthest[x]); else { ! sbitmap_difference (difference, st_avout[pred->index], st_antin[succ->index]); sbitmap_not (temp_bitmap, st_avin[succ->index]); ! sbitmap_a_and_b_or_c (farthest[x], difference, kill[succ->index], temp_bitmap); } } } ! sbitmap_free (temp_bitmap); ! sbitmap_free (difference); } /* Compute nearer and nearerout vectors for edge based lcm. *************** compute_nearerout (edge_list, farthest, *** 656,662 **** *tos++ = b; b->aux = b; } ! /* Iterate until the worklist is empty. */ while (tos != worklist) { --- 661,667 ---- *tos++ = b; b->aux = b; } ! /* Iterate until the worklist is empty. */ while (tos != worklist) { *************** compute_nearerout (edge_list, farthest, *** 695,700 **** --- 700,706 ---- nearerout[n_basic_blocks], nearer[(size_t) e->aux]); + clear_aux_for_edges (); free (tos); } *************** compute_rev_insert_delete (edge_list, st *** 710,716 **** for (x = 0; x < n_basic_blocks; x++) sbitmap_difference (delete[x], st_avloc[x], nearerout[x]); ! for (x = 0; x < NUM_EDGES (edge_list); x++) { basic_block b = INDEX_EDGE_PRED_BB (edge_list, x); --- 716,722 ---- for (x = 0; x < n_basic_blocks; x++) sbitmap_difference (delete[x], st_avloc[x], nearerout[x]); ! for (x = 0; x < NUM_EDGES (edge_list); x++) { basic_block b = INDEX_EDGE_PRED_BB (edge_list, x); *************** compute_rev_insert_delete (edge_list, st *** 721,733 **** } } ! /* Given local properties TRANSP, ST_AVLOC, ST_ANTLOC, KILL return the insert and delete vectors for edge based reverse LCM. Returns an edgelist which is used to map the insert vector to what edge an expression should be inserted on. */ struct edge_list * ! pre_edge_rev_lcm (file, n_exprs, transp, st_avloc, st_antloc, kill, insert, delete) FILE *file ATTRIBUTE_UNUSED; int n_exprs; --- 727,739 ---- } } ! /* Given local properties TRANSP, ST_AVLOC, ST_ANTLOC, KILL return the insert and delete vectors for edge based reverse LCM. Returns an edgelist which is used to map the insert vector to what edge an expression should be inserted on. */ struct edge_list * ! pre_edge_rev_lcm (file, n_exprs, transp, st_avloc, st_antloc, kill, insert, delete) FILE *file ATTRIBUTE_UNUSED; int n_exprs; *************** pre_edge_rev_lcm (file, n_exprs, transp, *** 783,789 **** /* Compute farthestness. */ farthest = sbitmap_vector_alloc (num_edges, n_exprs); ! compute_farthest (edge_list, n_exprs, st_avout, st_avin, st_antin, kill, farthest); #ifdef LCM_DEBUG_INFO --- 789,795 ---- /* Compute farthestness. */ farthest = sbitmap_vector_alloc (num_edges, n_exprs); ! compute_farthest (edge_list, n_exprs, st_avout, st_avin, st_antin, kill, farthest); #ifdef LCM_DEBUG_INFO *************** pre_edge_rev_lcm (file, n_exprs, transp, *** 791,798 **** dump_sbitmap_vector (file, "farthest", "", farthest, num_edges); #endif ! free (st_avin); ! free (st_avout); nearer = sbitmap_vector_alloc (num_edges, n_exprs); --- 797,807 ---- dump_sbitmap_vector (file, "farthest", "", farthest, num_edges); #endif ! sbitmap_vector_free (st_antin); ! sbitmap_vector_free (st_antout); ! ! sbitmap_vector_free (st_avin); ! sbitmap_vector_free (st_avout); nearer = sbitmap_vector_alloc (num_edges, n_exprs); *************** pre_edge_rev_lcm (file, n_exprs, transp, *** 803,823 **** #ifdef LCM_DEBUG_INFO if (file) { ! dump_sbitmap_vector (file, "nearerout", "", nearerout, n_basic_blocks + 1); dump_sbitmap_vector (file, "nearer", "", nearer, num_edges); } #endif ! free (farthest); *insert = sbitmap_vector_alloc (num_edges, n_exprs); *delete = sbitmap_vector_alloc (n_basic_blocks, n_exprs); compute_rev_insert_delete (edge_list, st_avloc, nearer, nearerout, *insert, *delete); ! free (nearerout); ! free (nearer); #ifdef LCM_DEBUG_INFO if (file) --- 812,832 ---- #ifdef LCM_DEBUG_INFO if (file) { ! dump_sbitmap_vector (file, "nearerout", "", nearerout, n_basic_blocks + 1); dump_sbitmap_vector (file, "nearer", "", nearer, num_edges); } #endif ! sbitmap_vector_free (farthest); *insert = sbitmap_vector_alloc (num_edges, n_exprs); *delete = sbitmap_vector_alloc (n_basic_blocks, n_exprs); compute_rev_insert_delete (edge_list, st_avloc, nearer, nearerout, *insert, *delete); ! sbitmap_vector_free (nearerout); ! sbitmap_vector_free (nearer); #ifdef LCM_DEBUG_INFO if (file) *************** pre_edge_rev_lcm (file, n_exprs, transp, *** 827,833 **** n_basic_blocks); } #endif - return edge_list; } --- 836,841 ---- *************** pre_edge_rev_lcm (file, n_exprs, transp, *** 853,865 **** More details are located in the code for optimize_mode_switching(). */ /* This structure contains the information for each insn which requires ! either single or double mode to be set. MODE is the mode this insn must be executed in. INSN_PTR is the insn to be executed (may be the note that marks the beginning of a basic block). BBNUM is the flow graph basic block this insn occurs in. NEXT is the next insn in the same basic block. */ ! struct seginfo { int mode; rtx insn_ptr; --- 861,873 ---- More details are located in the code for optimize_mode_switching(). */ /* This structure contains the information for each insn which requires ! either single or double mode to be set. MODE is the mode this insn must be executed in. INSN_PTR is the insn to be executed (may be the note that marks the beginning of a basic block). BBNUM is the flow graph basic block this insn occurs in. NEXT is the next insn in the same basic block. */ ! struct seginfo { int mode; rtx insn_ptr; *************** new_seginfo (mode, insn, bb, regs_live) *** 912,918 **** return ptr; } ! /* Add a seginfo element to the end of a list. HEAD is a pointer to the list beginning. INFO is the structure to be linked in. */ --- 920,926 ---- return ptr; } ! /* Add a seginfo element to the end of a list. HEAD is a pointer to the list beginning. INFO is the structure to be linked in. */ *************** optimize_mode_switching (file) *** 1011,1027 **** { rtx insn; int bb, e; - edge eg; int need_commit = 0; sbitmap *kill; struct edge_list *edge_list; ! static int num_modes[] = NUM_MODES_FOR_MODE_SWITCHING; #define N_ENTITIES (sizeof num_modes / sizeof (int)) int entity_map[N_ENTITIES]; struct bb_info *bb_info[N_ENTITIES]; int i, j; int n_entities; int max_num_modes = 0; #ifdef NORMAL_MODE /* Increment n_basic_blocks before allocating bb_info. */ --- 1019,1035 ---- { rtx insn; int bb, e; int need_commit = 0; sbitmap *kill; struct edge_list *edge_list; ! static const int num_modes[] = NUM_MODES_FOR_MODE_SWITCHING; #define N_ENTITIES (sizeof num_modes / sizeof (int)) int entity_map[N_ENTITIES]; struct bb_info *bb_info[N_ENTITIES]; int i, j; int n_entities; int max_num_modes = 0; + bool emited = false; #ifdef NORMAL_MODE /* Increment n_basic_blocks before allocating bb_info. */ *************** optimize_mode_switching (file) *** 1085,1091 **** REG_SET_TO_HARD_REG_SET (live_now, BASIC_BLOCK (bb)->global_live_at_start); ! for (insn = BLOCK_HEAD (bb); insn != NULL && insn != NEXT_INSN (BLOCK_END (bb)); insn = NEXT_INSN (insn)) { --- 1093,1099 ---- REG_SET_TO_HARD_REG_SET (live_now, BASIC_BLOCK (bb)->global_live_at_start); ! for (insn = BLOCK_HEAD (bb); insn != NULL && insn != NEXT_INSN (BLOCK_END (bb)); insn = NEXT_INSN (insn)) { *************** optimize_mode_switching (file) *** 1128,1133 **** --- 1136,1143 ---- if (mode != no_mode) { + edge eg; + for (eg = ENTRY_BLOCK_PTR->succ; eg; eg = eg->succ_next) { bb = eg->dest->index; *************** optimize_mode_switching (file) *** 1173,1179 **** { int m = current_mode[j] = MODE_PRIORITY_TO_MODE (entity_map[j], i); struct bb_info *info = bb_info[j]; ! for (bb = 0 ; bb < n_basic_blocks; bb++) { if (info[bb].seginfo->mode == m) --- 1183,1189 ---- { int m = current_mode[j] = MODE_PRIORITY_TO_MODE (entity_map[j], i); struct bb_info *info = bb_info[j]; ! for (bb = 0 ; bb < n_basic_blocks; bb++) { if (info[bb].seginfo->mode == m) *************** optimize_mode_switching (file) *** 1230,1239 **** --- 1240,1255 ---- mode_set = gen_sequence (); end_sequence (); + /* Do not bother to insert empty sequence. */ + if (GET_CODE (mode_set) == SEQUENCE + && !XVECLEN (mode_set, 0)) + continue; + /* If this is an abnormal edge, we'll insert at the end of the previous block. */ if (eg->flags & EDGE_ABNORMAL) { + emited = true; if (GET_CODE (src_bb->end) == JUMP_INSN) emit_insn_before (mode_set, src_bb->end); /* It doesn't make sense to switch to normal mode *************** optimize_mode_switching (file) *** 1248,1254 **** the case of EH edges, EH entry points also start in normal mode, so a similar reasoning applies. */ else if (GET_CODE (src_bb->end) == INSN) ! src_bb->end = emit_insn_after (mode_set, src_bb->end); else abort (); bb_info[j][src_bb->index].computing = mode; --- 1264,1270 ---- the case of EH edges, EH entry points also start in normal mode, so a similar reasoning applies. */ else if (GET_CODE (src_bb->end) == INSN) ! emit_insn_after (mode_set, src_bb->end); else abort (); bb_info[j][src_bb->index].computing = mode; *************** optimize_mode_switching (file) *** 1270,1275 **** --- 1286,1292 ---- } } + clear_aux_for_edges (); free_edge_list (edge_list); } *************** optimize_mode_switching (file) *** 1279,1285 **** VARRAY_POP (basic_block_info); EXIT_BLOCK_PTR->index = EXIT_BLOCK; #endif ! /* Now output the remaining mode sets in all the segments. */ for (j = n_entities - 1; j >= 0; j--) { --- 1296,1302 ---- VARRAY_POP (basic_block_info); EXIT_BLOCK_PTR->index = EXIT_BLOCK; #endif ! /* Now output the remaining mode sets in all the segments. */ for (j = n_entities - 1; j >= 0; j--) { *************** optimize_mode_switching (file) *** 1303,1316 **** mode_set = gen_sequence (); end_sequence (); /* If this is an abnormal edge, we'll insert at the end of the previous block. */ if (eg->flags & EDGE_ABNORMAL) { if (GET_CODE (eg->src->end) == JUMP_INSN) emit_insn_before (mode_set, eg->src->end); else if (GET_CODE (eg->src->end) == INSN) ! eg->src->end = emit_insn_after (mode_set, eg->src->end); else abort (); } --- 1320,1339 ---- mode_set = gen_sequence (); end_sequence (); + /* Do not bother to insert empty sequence. */ + if (GET_CODE (mode_set) == SEQUENCE + && !XVECLEN (mode_set, 0)) + continue; + /* If this is an abnormal edge, we'll insert at the end of the previous block. */ if (eg->flags & EDGE_ABNORMAL) { + emited = true; if (GET_CODE (eg->src->end) == JUMP_INSN) emit_insn_before (mode_set, eg->src->end); else if (GET_CODE (eg->src->end) == INSN) ! emit_insn_after (mode_set, eg->src->end); else abort (); } *************** optimize_mode_switching (file) *** 1320,1326 **** insert_insn_on_edge (mode_set, eg); } } ! } #endif --- 1343,1349 ---- insert_insn_on_edge (mode_set, eg); } } ! } #endif *************** optimize_mode_switching (file) *** 1339,1352 **** mode_set = gen_sequence (); end_sequence (); if (GET_CODE (ptr->insn_ptr) == NOTE && (NOTE_LINE_NUMBER (ptr->insn_ptr) == NOTE_INSN_BASIC_BLOCK)) ! emit_block_insn_after (mode_set, ptr->insn_ptr, ! BASIC_BLOCK (ptr->bbnum)); else ! emit_block_insn_before (mode_set, ptr->insn_ptr, ! BASIC_BLOCK (ptr->bbnum)); } free (ptr); --- 1362,1379 ---- mode_set = gen_sequence (); end_sequence (); + /* Do not bother to insert empty sequence. */ + if (GET_CODE (mode_set) == SEQUENCE + && !XVECLEN (mode_set, 0)) + continue; + + emited = true; if (GET_CODE (ptr->insn_ptr) == NOTE && (NOTE_LINE_NUMBER (ptr->insn_ptr) == NOTE_INSN_BASIC_BLOCK)) ! emit_insn_after (mode_set, ptr->insn_ptr); else ! emit_insn_before (mode_set, ptr->insn_ptr); } free (ptr); *************** optimize_mode_switching (file) *** 1357,1363 **** } /* Finished. Free up all the things we've allocated. */ ! sbitmap_vector_free (kill); sbitmap_vector_free (antic); sbitmap_vector_free (transp); --- 1384,1390 ---- } /* Finished. Free up all the things we've allocated. */ ! sbitmap_vector_free (kill); sbitmap_vector_free (antic); sbitmap_vector_free (transp); *************** optimize_mode_switching (file) *** 1368,1376 **** if (need_commit) commit_edge_insertions (); /* Ideally we'd figure out what blocks were affected and start from there, but this is enormously complicated by commit_edge_insertions, ! which would screw up any indicies we'd collected, and also need to be involved in the update. Bail and recompute global life info for everything. */ --- 1395,1406 ---- if (need_commit) commit_edge_insertions (); + if (!need_commit && !emited) + return 0; + /* Ideally we'd figure out what blocks were affected and start from there, but this is enormously complicated by commit_edge_insertions, ! which would screw up any indices we'd collected, and also need to be involved in the update. Bail and recompute global life info for everything. */ diff -Nrc3pad gcc-3.0.4/gcc/libfuncs.h gcc-3.1/gcc/libfuncs.h *** gcc-3.0.4/gcc/libfuncs.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/libfuncs.h Sun Mar 31 09:42:06 2002 *************** *** 0 **** --- 1,274 ---- + /* Definitions for code generation pass of GNU compiler. + Copyright (C) 2001 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GCC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + #ifndef GCC_LIBFUNCS_H + #define GCC_LIBFUNCS_H + + /* Enumeration of indexes into libfunc_table. */ + enum libfunc_index + { + LTI_extendsfdf2, + LTI_extendsfxf2, + LTI_extendsftf2, + LTI_extenddfxf2, + LTI_extenddftf2, + + LTI_truncdfsf2, + LTI_truncxfsf2, + LTI_trunctfsf2, + LTI_truncxfdf2, + LTI_trunctfdf2, + + LTI_abort, + LTI_memcpy, + LTI_memmove, + LTI_bcopy, + LTI_memcmp, + LTI_bcmp, + LTI_memset, + LTI_bzero, + + LTI_unwind_resume, + LTI_eh_personality, + LTI_setjmp, + LTI_longjmp, + LTI_unwind_sjlj_register, + LTI_unwind_sjlj_unregister, + + LTI_eqhf2, + LTI_nehf2, + LTI_gthf2, + LTI_gehf2, + LTI_lthf2, + LTI_lehf2, + LTI_unordhf2, + + LTI_eqsf2, + LTI_nesf2, + LTI_gtsf2, + LTI_gesf2, + LTI_ltsf2, + LTI_lesf2, + LTI_unordsf2, + + LTI_eqdf2, + LTI_nedf2, + LTI_gtdf2, + LTI_gedf2, + LTI_ltdf2, + LTI_ledf2, + LTI_unorddf2, + + LTI_eqxf2, + LTI_nexf2, + LTI_gtxf2, + LTI_gexf2, + LTI_ltxf2, + LTI_lexf2, + LTI_unordxf2, + + LTI_eqtf2, + LTI_netf2, + LTI_gttf2, + LTI_getf2, + LTI_lttf2, + LTI_letf2, + LTI_unordtf2, + + LTI_floatsisf, + LTI_floatdisf, + LTI_floattisf, + + LTI_floatsidf, + LTI_floatdidf, + LTI_floattidf, + + LTI_floatsixf, + LTI_floatdixf, + LTI_floattixf, + + LTI_floatsitf, + LTI_floatditf, + LTI_floattitf, + + LTI_fixsfsi, + LTI_fixsfdi, + LTI_fixsfti, + + LTI_fixdfsi, + LTI_fixdfdi, + LTI_fixdfti, + + LTI_fixxfsi, + LTI_fixxfdi, + LTI_fixxfti, + + LTI_fixtfsi, + LTI_fixtfdi, + LTI_fixtfti, + + LTI_fixunssfsi, + LTI_fixunssfdi, + LTI_fixunssfti, + + LTI_fixunsdfsi, + LTI_fixunsdfdi, + LTI_fixunsdfti, + + LTI_fixunsxfsi, + LTI_fixunsxfdi, + LTI_fixunsxfti, + + LTI_fixunstfsi, + LTI_fixunstfdi, + LTI_fixunstfti, + + LTI_profile_function_entry, + LTI_profile_function_exit, + + LTI_MAX + }; + + /* SYMBOL_REF rtx's for the library functions that are called + implicitly and not via optabs. */ + extern rtx libfunc_table[LTI_MAX]; + + /* Accessor macros for libfunc_table. */ + #define extendsfdf2_libfunc (libfunc_table[LTI_extendsfdf2]) + #define extendsfxf2_libfunc (libfunc_table[LTI_extendsfxf2]) + #define extendsftf2_libfunc (libfunc_table[LTI_extendsftf2]) + #define extenddfxf2_libfunc (libfunc_table[LTI_extenddfxf2]) + #define extenddftf2_libfunc (libfunc_table[LTI_extenddftf2]) + + #define truncdfsf2_libfunc (libfunc_table[LTI_truncdfsf2]) + #define truncxfsf2_libfunc (libfunc_table[LTI_truncxfsf2]) + #define trunctfsf2_libfunc (libfunc_table[LTI_trunctfsf2]) + #define truncxfdf2_libfunc (libfunc_table[LTI_truncxfdf2]) + #define trunctfdf2_libfunc (libfunc_table[LTI_trunctfdf2]) + + #define abort_libfunc (libfunc_table[LTI_abort]) + #define memcpy_libfunc (libfunc_table[LTI_memcpy]) + #define memmove_libfunc (libfunc_table[LTI_memmove]) + #define bcopy_libfunc (libfunc_table[LTI_bcopy]) + #define memcmp_libfunc (libfunc_table[LTI_memcmp]) + #define bcmp_libfunc (libfunc_table[LTI_bcmp]) + #define memset_libfunc (libfunc_table[LTI_memset]) + #define bzero_libfunc (libfunc_table[LTI_bzero]) + + #define unwind_resume_libfunc (libfunc_table[LTI_unwind_resume]) + #define eh_personality_libfunc (libfunc_table[LTI_eh_personality]) + #define setjmp_libfunc (libfunc_table[LTI_setjmp]) + #define longjmp_libfunc (libfunc_table[LTI_longjmp]) + #define unwind_sjlj_register_libfunc (libfunc_table[LTI_unwind_sjlj_register]) + #define unwind_sjlj_unregister_libfunc \ + (libfunc_table[LTI_unwind_sjlj_unregister]) + + #define eqhf2_libfunc (libfunc_table[LTI_eqhf2]) + #define nehf2_libfunc (libfunc_table[LTI_nehf2]) + #define gthf2_libfunc (libfunc_table[LTI_gthf2]) + #define gehf2_libfunc (libfunc_table[LTI_gehf2]) + #define lthf2_libfunc (libfunc_table[LTI_lthf2]) + #define lehf2_libfunc (libfunc_table[LTI_lehf2]) + #define unordhf2_libfunc (libfunc_table[LTI_unordhf2]) + + #define eqsf2_libfunc (libfunc_table[LTI_eqsf2]) + #define nesf2_libfunc (libfunc_table[LTI_nesf2]) + #define gtsf2_libfunc (libfunc_table[LTI_gtsf2]) + #define gesf2_libfunc (libfunc_table[LTI_gesf2]) + #define ltsf2_libfunc (libfunc_table[LTI_ltsf2]) + #define lesf2_libfunc (libfunc_table[LTI_lesf2]) + #define unordsf2_libfunc (libfunc_table[LTI_unordsf2]) + + #define eqdf2_libfunc (libfunc_table[LTI_eqdf2]) + #define nedf2_libfunc (libfunc_table[LTI_nedf2]) + #define gtdf2_libfunc (libfunc_table[LTI_gtdf2]) + #define gedf2_libfunc (libfunc_table[LTI_gedf2]) + #define ltdf2_libfunc (libfunc_table[LTI_ltdf2]) + #define ledf2_libfunc (libfunc_table[LTI_ledf2]) + #define unorddf2_libfunc (libfunc_table[LTI_unorddf2]) + + #define eqxf2_libfunc (libfunc_table[LTI_eqxf2]) + #define nexf2_libfunc (libfunc_table[LTI_nexf2]) + #define gtxf2_libfunc (libfunc_table[LTI_gtxf2]) + #define gexf2_libfunc (libfunc_table[LTI_gexf2]) + #define ltxf2_libfunc (libfunc_table[LTI_ltxf2]) + #define lexf2_libfunc (libfunc_table[LTI_lexf2]) + #define unordxf2_libfunc (libfunc_table[LTI_unordxf2]) + + #define eqtf2_libfunc (libfunc_table[LTI_eqtf2]) + #define netf2_libfunc (libfunc_table[LTI_netf2]) + #define gttf2_libfunc (libfunc_table[LTI_gttf2]) + #define getf2_libfunc (libfunc_table[LTI_getf2]) + #define lttf2_libfunc (libfunc_table[LTI_lttf2]) + #define letf2_libfunc (libfunc_table[LTI_letf2]) + #define unordtf2_libfunc (libfunc_table[LTI_unordtf2]) + + #define floatsisf_libfunc (libfunc_table[LTI_floatsisf]) + #define floatdisf_libfunc (libfunc_table[LTI_floatdisf]) + #define floattisf_libfunc (libfunc_table[LTI_floattisf]) + + #define floatsidf_libfunc (libfunc_table[LTI_floatsidf]) + #define floatdidf_libfunc (libfunc_table[LTI_floatdidf]) + #define floattidf_libfunc (libfunc_table[LTI_floattidf]) + + #define floatsixf_libfunc (libfunc_table[LTI_floatsixf]) + #define floatdixf_libfunc (libfunc_table[LTI_floatdixf]) + #define floattixf_libfunc (libfunc_table[LTI_floattixf]) + + #define floatsitf_libfunc (libfunc_table[LTI_floatsitf]) + #define floatditf_libfunc (libfunc_table[LTI_floatditf]) + #define floattitf_libfunc (libfunc_table[LTI_floattitf]) + + #define fixsfsi_libfunc (libfunc_table[LTI_fixsfsi]) + #define fixsfdi_libfunc (libfunc_table[LTI_fixsfdi]) + #define fixsfti_libfunc (libfunc_table[LTI_fixsfti]) + + #define fixdfsi_libfunc (libfunc_table[LTI_fixdfsi]) + #define fixdfdi_libfunc (libfunc_table[LTI_fixdfdi]) + #define fixdfti_libfunc (libfunc_table[LTI_fixdfti]) + + #define fixxfsi_libfunc (libfunc_table[LTI_fixxfsi]) + #define fixxfdi_libfunc (libfunc_table[LTI_fixxfdi]) + #define fixxfti_libfunc (libfunc_table[LTI_fixxfti]) + + #define fixtfsi_libfunc (libfunc_table[LTI_fixtfsi]) + #define fixtfdi_libfunc (libfunc_table[LTI_fixtfdi]) + #define fixtfti_libfunc (libfunc_table[LTI_fixtfti]) + + #define fixunssfsi_libfunc (libfunc_table[LTI_fixunssfsi]) + #define fixunssfdi_libfunc (libfunc_table[LTI_fixunssfdi]) + #define fixunssfti_libfunc (libfunc_table[LTI_fixunssfti]) + + #define fixunsdfsi_libfunc (libfunc_table[LTI_fixunsdfsi]) + #define fixunsdfdi_libfunc (libfunc_table[LTI_fixunsdfdi]) + #define fixunsdfti_libfunc (libfunc_table[LTI_fixunsdfti]) + + #define fixunsxfsi_libfunc (libfunc_table[LTI_fixunsxfsi]) + #define fixunsxfdi_libfunc (libfunc_table[LTI_fixunsxfdi]) + #define fixunsxfti_libfunc (libfunc_table[LTI_fixunsxfti]) + + #define fixunstfsi_libfunc (libfunc_table[LTI_fixunstfsi]) + #define fixunstfdi_libfunc (libfunc_table[LTI_fixunstfdi]) + #define fixunstfti_libfunc (libfunc_table[LTI_fixunstfti]) + + #define profile_function_entry_libfunc (libfunc_table[LTI_profile_function_entry]) + #define profile_function_exit_libfunc (libfunc_table[LTI_profile_function_exit]) + + #endif /* GCC_LIBFUNCS_H */ diff -Nrc3pad gcc-3.0.4/gcc/libgcc1-test.c gcc-3.1/gcc/libgcc1-test.c *** gcc-3.0.4/gcc/libgcc1-test.c Tue Oct 5 23:07:09 1999 --- gcc-3.1/gcc/libgcc1-test.c Thu Jan 1 00:00:00 1970 *************** *** 1,119 **** - /* This small function uses all the arithmetic operators that - libgcc1.c can handle. If you can link it, then - you have provided replacements for all the libgcc1.c functions that - your target machine needs. */ - - #include - - int foo (); - double dfoo (); - void discard (int); - void ddiscard (double); - - /* We don't want __main here because that can drag in atexit (among other - things) which won't necessarily exist yet. */ - - int - main_without__main () - { - int a = foo (), b = foo (); - unsigned int au = foo (), bu = foo (); - float af = dfoo (), bf = dfoo (); - double ad = dfoo (), bd = dfoo (); - - discard (a * b); - discard (a / b); - discard (a % b); - - discard (au / bu); - discard (au % bu); - - discard (a >> b); - discard (a << b); - - discard (au >> bu); - discard (au << bu); - - ddiscard (ad + bd); - ddiscard (ad - bd); - ddiscard (ad * bd); - ddiscard (ad / bd); - ddiscard (-ad); - - ddiscard (af + bf); - ddiscard (af - bf); - ddiscard (af * bf); - ddiscard (af / bf); - ddiscard (-af); - - discard ((int) ad); - discard ((int) af); - - ddiscard ((double) a); - ddiscard ((float) a); - ddiscard ((float) ad); - - discard (ad == bd); - discard (ad < bd); - discard (ad > bd); - discard (ad != bd); - discard (ad <= bd); - discard (ad >= bd); - - discard (af == bf); - discard (af < bf); - discard (af > bf); - discard (af != bf); - discard (af <= bf); - discard (af >= bf); - - return 0; - } - - void - discard (x) - int x __attribute__((__unused__)); - {} - - void - ddiscard (x) - double x __attribute__((__unused__)); - {} - - int - foo () - { - static int table[] = {20, 69, 4, 12}; - static int idx; - - return table[idx++]; - } - - double - dfoo () - { - static double table[] = {20.4, 69.96, 4.4, 202.202}; - static int idx; - - return table[idx++]; - } - - /* Provide functions that some versions of the linker use to default - the start address if -e symbol is not used, to avoid the warning - message saying the start address is defaulted. */ - extern void start() __asm__("start"); - extern void _start() __asm__("_start"); - extern void __start() __asm__("__start"); - - /* Provide functions that might be needed by soft-float emulation routines. */ - void *memcpy(void *to, - const void *from __attribute__((__unused__)), - size_t len __attribute__((__unused__))) - { - return to; - } - - void start() {} - void _start() {} - void __start() {} - void mainCRTStartup() {} --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/libgcc1.c gcc-3.1/gcc/libgcc1.c *** gcc-3.0.4/gcc/libgcc1.c Mon May 15 23:14:15 2000 --- gcc-3.1/gcc/libgcc1.c Thu Jan 1 00:00:00 1970 *************** *** 1,590 **** - /* Subroutines needed by GCC output code on some machines. */ - /* Compile this file with the Unix C compiler! */ - /* Copyright (C) 1987, 1988, 1992, 1994, 1995 Free Software Foundation, Inc. - - This file is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - In addition to the permissions in the GNU General Public License, the - Free Software Foundation gives you unlimited permission to link the - compiled version of this file into combinations with other programs, - and to distribute those combinations without any restriction coming - from the use of this file. (The General Public License restrictions - do apply in other respects; for example, they cover modification of - the file, and distribution when not linked into a combine - executable.) - - This file 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; see the file COPYING. If not, write to - the Free Software Foundation, 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - - #include "config.h" - - /* Don't use `fancy_abort' here even if config.h says to use it. */ - #ifdef abort - #undef abort - #endif - - /* On some machines, cc is really GCC. For these machines, we can't - expect these functions to be properly compiled unless GCC open codes - the operation (which is precisely when the function won't be used). - So allow tm.h to specify ways of accomplishing the operations - by defining the macros perform_*. - - On a machine where cc is some other compiler, there is usually no - reason to define perform_*. The other compiler normally has other ways - of implementing all of these operations. - - In some cases a certain machine may come with GCC installed as cc - or may have some other compiler. Then it may make sense for tm.h - to define perform_* only if __GNUC__ is defined. */ - - #ifndef perform_mulsi3 - #define perform_mulsi3(a, b) return a * b - #endif - - #ifndef perform_divsi3 - #define perform_divsi3(a, b) return a / b - #endif - - #ifndef perform_udivsi3 - #define perform_udivsi3(a, b) return a / b - #endif - - #ifndef perform_modsi3 - #define perform_modsi3(a, b) return a % b - #endif - - #ifndef perform_umodsi3 - #define perform_umodsi3(a, b) return a % b - #endif - - #ifndef perform_lshrsi3 - #define perform_lshrsi3(a, b) return a >> b - #endif - - #ifndef perform_ashrsi3 - #define perform_ashrsi3(a, b) return a >> b - #endif - - #ifndef perform_ashlsi3 - #define perform_ashlsi3(a, b) return a << b - #endif - - #ifndef perform_adddf3 - #define perform_adddf3(a, b) return a + b - #endif - - #ifndef perform_subdf3 - #define perform_subdf3(a, b) return a - b - #endif - - #ifndef perform_muldf3 - #define perform_muldf3(a, b) return a * b - #endif - - #ifndef perform_divdf3 - #define perform_divdf3(a, b) return a / b - #endif - - #ifndef perform_addsf3 - #define perform_addsf3(a, b) return INTIFY (a + b) - #endif - - #ifndef perform_subsf3 - #define perform_subsf3(a, b) return INTIFY (a - b) - #endif - - #ifndef perform_mulsf3 - #define perform_mulsf3(a, b) return INTIFY (a * b) - #endif - - #ifndef perform_divsf3 - #define perform_divsf3(a, b) return INTIFY (a / b) - #endif - - #ifndef perform_negdf2 - #define perform_negdf2(a) return -a - #endif - - #ifndef perform_negsf2 - #define perform_negsf2(a) return INTIFY (-a) - #endif - - #ifndef perform_fixdfsi - #define perform_fixdfsi(a) return (nongcc_SI_type) a; - #endif - - #ifndef perform_fixsfsi - #define perform_fixsfsi(a) return (nongcc_SI_type) a - #endif - - #ifndef perform_floatsidf - #define perform_floatsidf(a) return (double) a - #endif - - #ifndef perform_floatsisf - #define perform_floatsisf(a) return INTIFY ((float) a) - #endif - - #ifndef perform_extendsfdf2 - #define perform_extendsfdf2(a) return a - #endif - - #ifndef perform_truncdfsf2 - #define perform_truncdfsf2(a) return INTIFY (a) - #endif - - /* Note that eqdf2 returns a value for "true" that is == 0, - nedf2 returns a value for "true" that is != 0, - gtdf2 returns a value for "true" that is > 0, - and so on. */ - - #ifndef perform_eqdf2 - #define perform_eqdf2(a, b) return !(a == b) - #endif - - #ifndef perform_nedf2 - #define perform_nedf2(a, b) return a != b - #endif - - #ifndef perform_gtdf2 - #define perform_gtdf2(a, b) return a > b - #endif - - #ifndef perform_gedf2 - #define perform_gedf2(a, b) return (a >= b) - 1 - #endif - - #ifndef perform_ltdf2 - #define perform_ltdf2(a, b) return -(a < b) - #endif - - #ifndef perform_ledf2 - #define perform_ledf2(a, b) return 1 - (a <= b) - #endif - - #ifndef perform_eqsf2 - #define perform_eqsf2(a, b) return !(a == b) - #endif - - #ifndef perform_nesf2 - #define perform_nesf2(a, b) return a != b - #endif - - #ifndef perform_gtsf2 - #define perform_gtsf2(a, b) return a > b - #endif - - #ifndef perform_gesf2 - #define perform_gesf2(a, b) return (a >= b) - 1 - #endif - - #ifndef perform_ltsf2 - #define perform_ltsf2(a, b) return -(a < b) - #endif - - #ifndef perform_lesf2 - #define perform_lesf2(a, b) return 1 - (a <= b); - #endif - - /* Define the C data type to use for an SImode value. */ - - #ifndef nongcc_SI_type - #define nongcc_SI_type long int - #endif - - /* Define the C data type to use for a value of word size */ - #ifndef nongcc_word_type - #define nongcc_word_type nongcc_SI_type - #endif - - /* Define the type to be used for returning an SF mode value - and the method for turning a float into that type. - These definitions work for machines where an SF value is - returned in the same register as an int. */ - - #ifndef FLOAT_VALUE_TYPE - #define FLOAT_VALUE_TYPE int - #endif - - #ifndef INTIFY - #define INTIFY(FLOATVAL) (intify.f = (FLOATVAL), intify.i) - #endif - - #ifndef FLOATIFY - #define FLOATIFY(INTVAL) ((INTVAL).f) - #endif - - #ifndef FLOAT_ARG_TYPE - #define FLOAT_ARG_TYPE union flt_or_int - #endif - - union flt_or_value { FLOAT_VALUE_TYPE i; float f; }; - - union flt_or_int { int i; float f; }; - - - #ifdef L_mulsi3 - nongcc_SI_type - __mulsi3 (a, b) - nongcc_SI_type a, b; - { - perform_mulsi3 (a, b); - } - #endif - - #ifdef L_udivsi3 - nongcc_SI_type - __udivsi3 (a, b) - unsigned nongcc_SI_type a, b; - { - perform_udivsi3 (a, b); - } - #endif - - #ifdef L_divsi3 - nongcc_SI_type - __divsi3 (a, b) - nongcc_SI_type a, b; - { - perform_divsi3 (a, b); - } - #endif - - #ifdef L_umodsi3 - nongcc_SI_type - __umodsi3 (a, b) - unsigned nongcc_SI_type a, b; - { - perform_umodsi3 (a, b); - } - #endif - - #ifdef L_modsi3 - nongcc_SI_type - __modsi3 (a, b) - nongcc_SI_type a, b; - { - perform_modsi3 (a, b); - } - #endif - - #ifdef L_lshrsi3 - nongcc_SI_type - __lshrsi3 (a, b) - unsigned nongcc_SI_type a, b; - { - perform_lshrsi3 (a, b); - } - #endif - - #ifdef L_ashrsi3 - nongcc_SI_type - __ashrsi3 (a, b) - nongcc_SI_type a, b; - { - perform_ashrsi3 (a, b); - } - #endif - - #ifdef L_ashlsi3 - nongcc_SI_type - __ashlsi3 (a, b) - nongcc_SI_type a, b; - { - perform_ashlsi3 (a, b); - } - #endif - - #ifdef L_divdf3 - double - __divdf3 (a, b) - double a, b; - { - perform_divdf3 (a, b); - } - #endif - - #ifdef L_muldf3 - double - __muldf3 (a, b) - double a, b; - { - perform_muldf3 (a, b); - } - #endif - - #ifdef L_negdf2 - double - __negdf2 (a) - double a; - { - perform_negdf2 (a); - } - #endif - - #ifdef L_adddf3 - double - __adddf3 (a, b) - double a, b; - { - perform_adddf3 (a, b); - } - #endif - - #ifdef L_subdf3 - double - __subdf3 (a, b) - double a, b; - { - perform_subdf3 (a, b); - } - #endif - - /* Note that eqdf2 returns a value for "true" that is == 0, - nedf2 returns a value for "true" that is != 0, - gtdf2 returns a value for "true" that is > 0, - and so on. */ - - #ifdef L_eqdf2 - nongcc_word_type - __eqdf2 (a, b) - double a, b; - { - /* Value == 0 iff a == b. */ - perform_eqdf2 (a, b); - } - #endif - - #ifdef L_nedf2 - nongcc_word_type - __nedf2 (a, b) - double a, b; - { - /* Value != 0 iff a != b. */ - perform_nedf2 (a, b); - } - #endif - - #ifdef L_gtdf2 - nongcc_word_type - __gtdf2 (a, b) - double a, b; - { - /* Value > 0 iff a > b. */ - perform_gtdf2 (a, b); - } - #endif - - #ifdef L_gedf2 - nongcc_word_type - __gedf2 (a, b) - double a, b; - { - /* Value >= 0 iff a >= b. */ - perform_gedf2 (a, b); - } - #endif - - #ifdef L_ltdf2 - nongcc_word_type - __ltdf2 (a, b) - double a, b; - { - /* Value < 0 iff a < b. */ - perform_ltdf2 (a, b); - } - #endif - - #ifdef L_ledf2 - nongcc_word_type - __ledf2 (a, b) - double a, b; - { - /* Value <= 0 iff a <= b. */ - perform_ledf2 (a, b); - } - #endif - - #ifdef L_fixdfsi - nongcc_SI_type - __fixdfsi (a) - double a; - { - perform_fixdfsi (a); - } - #endif - - #ifdef L_fixsfsi - nongcc_SI_type - __fixsfsi (a) - FLOAT_ARG_TYPE a; - { - union flt_or_value intify; - perform_fixsfsi (FLOATIFY (a)); - } - #endif - - #ifdef L_floatsidf - double - __floatsidf (a) - nongcc_SI_type a; - { - perform_floatsidf (a); - } - #endif - - #ifdef L_floatsisf - FLOAT_VALUE_TYPE - __floatsisf (a) - nongcc_SI_type a; - { - union flt_or_value intify; - perform_floatsisf (a); - } - #endif - - #ifdef L_addsf3 - FLOAT_VALUE_TYPE - __addsf3 (a, b) - FLOAT_ARG_TYPE a, b; - { - union flt_or_value intify; - perform_addsf3 (FLOATIFY (a), FLOATIFY (b)); - } - #endif - - #ifdef L_negsf2 - FLOAT_VALUE_TYPE - __negsf2 (a) - FLOAT_ARG_TYPE a; - { - union flt_or_value intify; - perform_negsf2 (FLOATIFY (a)); - } - #endif - - #ifdef L_subsf3 - FLOAT_VALUE_TYPE - __subsf3 (a, b) - FLOAT_ARG_TYPE a, b; - { - union flt_or_value intify; - perform_subsf3 (FLOATIFY (a), FLOATIFY (b)); - } - #endif - - #ifdef L_eqsf2 - nongcc_word_type - __eqsf2 (a, b) - FLOAT_ARG_TYPE a, b; - { - union flt_or_int intify; - /* Value == 0 iff a == b. */ - perform_eqsf2 (FLOATIFY (a), FLOATIFY (b)); - } - #endif - - #ifdef L_nesf2 - nongcc_word_type - __nesf2 (a, b) - FLOAT_ARG_TYPE a, b; - { - union flt_or_int intify; - /* Value != 0 iff a != b. */ - perform_nesf2 (FLOATIFY (a), FLOATIFY (b)); - } - #endif - - #ifdef L_gtsf2 - nongcc_word_type - __gtsf2 (a, b) - FLOAT_ARG_TYPE a, b; - { - union flt_or_int intify; - /* Value > 0 iff a > b. */ - perform_gtsf2 (FLOATIFY (a), FLOATIFY (b)); - } - #endif - - #ifdef L_gesf2 - nongcc_word_type - __gesf2 (a, b) - FLOAT_ARG_TYPE a, b; - { - union flt_or_int intify; - /* Value >= 0 iff a >= b. */ - perform_gesf2 (FLOATIFY (a), FLOATIFY (b)); - } - #endif - - #ifdef L_ltsf2 - nongcc_word_type - __ltsf2 (a, b) - FLOAT_ARG_TYPE a, b; - { - union flt_or_int intify; - /* Value < 0 iff a < b. */ - perform_ltsf2 (FLOATIFY (a), FLOATIFY (b)); - } - #endif - - #ifdef L_lesf2 - nongcc_word_type - __lesf2 (a, b) - FLOAT_ARG_TYPE a, b; - { - union flt_or_int intify; - /* Value <= 0 iff a <= b. */ - perform_lesf2 (FLOATIFY (a), FLOATIFY (b)); - } - #endif - - #ifdef L_mulsf3 - FLOAT_VALUE_TYPE - __mulsf3 (a, b) - FLOAT_ARG_TYPE a, b; - { - union flt_or_value intify; - perform_mulsf3 (FLOATIFY (a), FLOATIFY (b)); - } - #endif - - #ifdef L_divsf3 - FLOAT_VALUE_TYPE - __divsf3 (a, b) - FLOAT_ARG_TYPE a, b; - { - union flt_or_value intify; - perform_divsf3 (FLOATIFY (a), FLOATIFY (b)); - } - #endif - - #ifdef L_truncdfsf2 - FLOAT_VALUE_TYPE - __truncdfsf2 (a) - double a; - { - union flt_or_value intify; - perform_truncdfsf2 (a); - } - #endif - - #ifdef L_extendsfdf2 - double - __extendsfdf2 (a) - FLOAT_ARG_TYPE a; - { - union flt_or_value intify; - perform_extendsfdf2 (FLOATIFY (a)); - } - #endif --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/libgcc2.c gcc-3.1/gcc/libgcc2.c *** gcc-3.0.4/gcc/libgcc2.c Sat Jun 9 00:18:24 2001 --- gcc-3.1/gcc/libgcc2.c Wed Apr 3 04:20:51 2002 *************** *** 3,14 **** /* Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. In addition to the permissions in the GNU General Public License, the Free Software Foundation gives you unlimited permission to link the --- 3,14 ---- /* Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. In addition to the permissions in the GNU General Public License, the Free Software Foundation gives you unlimited permission to link the *************** do apply in other respects; for example, *** 19,33 **** the file, and distribution when not linked into a combine executable.) ! 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. */ /* It is incorrect to include config.h here, because this file is being compiled for the target, and hence definitions concerning only the host --- 19,33 ---- the file, and distribution when not linked into a combine executable.) ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* It is incorrect to include config.h here, because this file is being compiled for the target, and hence definitions concerning only the host *************** Boston, MA 02111-1307, USA. */ *** 35,41 **** #include "tconfig.h" #include "tsystem.h" - #include "hwint.h" #include "machmode.h" --- 35,40 ---- *************** __addvsi3 (Wtype a, Wtype b) *** 77,83 **** abort (); return w; ! } #endif #ifdef L_addvdi3 --- 76,82 ---- abort (); return w; ! } #endif #ifdef L_addvdi3 *************** __floatdidf (DWtype u) *** 1070,1076 **** /* Define codes for all the float formats that we know of. Note that this is copied from real.h. */ ! #define UNKNOWN_FLOAT_FORMAT 0 #define IEEE_FLOAT_FORMAT 1 #define VAX_FLOAT_FORMAT 2 --- 1069,1075 ---- /* Define codes for all the float formats that we know of. Note that this is copied from real.h. */ ! #define UNKNOWN_FLOAT_FORMAT 0 #define IEEE_FLOAT_FORMAT 1 #define VAX_FLOAT_FORMAT 2 *************** __eprintf (const char *string, const cha *** 1264,1275 **** #ifdef L_bb /* Structure emitted by -a */ struct bb { long zero_word; const char *filename; ! long *counts; long ncounts; struct bb *next; const unsigned long *addresses; --- 1263,1281 ---- #ifdef L_bb + #if LONG_TYPE_SIZE == GCOV_TYPE_SIZE + typedef long gcov_type; + #else + typedef long long gcov_type; + #endif + + /* Structure emitted by -a */ struct bb { long zero_word; const char *filename; ! gcov_type *counts; long ncounts; struct bb *next; const unsigned long *addresses; *************** BLOCK_PROFILER_CODE *** 1293,1299 **** #undef NULL /* Avoid errors if stdio.h and our stddef.h mismatch. */ #include - char *ctime PARAMS ((const time_t *)); #include "gbl-ctors.h" #include "gcov-io.h" --- 1299,1304 ---- *************** char *ctime PARAMS ((const time_t *)); *** 1305,1593 **** static struct bb *bb_head; - static int num_digits (long value, int base) __attribute__ ((const)); - - /* Return the number of digits needed to print a value */ - /* __inline__ */ static int num_digits (long value, int base) - { - int minus = (value < 0 && base != 16); - unsigned long v = (minus) ? -value : value; - int ret = minus; - - do - { - v /= base; - ret++; - } - while (v); - - return ret; - } - void __bb_exit_func (void) { ! FILE *da_file, *file; ! long time_value; int i; if (bb_head == 0) return; i = strlen (bb_head->filename) - 3; ! if (!strcmp (bb_head->filename+i, ".da")) { ! /* Must be -fprofile-arcs not -a. ! Dump data in a form that gcov expects. */ ! struct bb *ptr; ! for (ptr = bb_head; ptr != (struct bb *) 0; ptr = ptr->next) { ! int firstchar; ! ! /* Make sure the output file exists - ! but don't clobber exiting data. */ ! if ((da_file = fopen (ptr->filename, "a")) != 0) ! fclose (da_file); ! ! /* Need to re-open in order to be able to write from the start. */ ! da_file = fopen (ptr->filename, "r+b"); ! /* Some old systems might not allow the 'b' mode modifier. ! Therefore, try to open without it. This can lead to a race ! condition so that when you delete and re-create the file, the ! file might be opened in text mode, but then, you shouldn't ! delete the file in the first place. */ ! if (da_file == 0) ! da_file = fopen (ptr->filename, "r+"); ! if (da_file == 0) ! { ! fprintf (stderr, "arc profiling: Can't open output file %s.\n", ! ptr->filename); ! continue; ! } ! /* After a fork, another process might try to read and/or write ! the same file simultanously. So if we can, lock the file to ! avoid race conditions. */ #if defined (TARGET_HAS_F_SETLKW) ! { ! struct flock s_flock; ! s_flock.l_type = F_WRLCK; ! s_flock.l_whence = SEEK_SET; ! s_flock.l_start = 0; ! s_flock.l_len = 1; ! s_flock.l_pid = getpid (); ! while (fcntl (fileno (da_file), F_SETLKW, &s_flock) ! && errno == EINTR); ! } #endif ! /* If the file is not empty, and the number of counts in it is the ! same, then merge them in. */ ! firstchar = fgetc (da_file); ! if (firstchar == EOF) ! { ! if (ferror (da_file)) ! { ! fprintf (stderr, "arc profiling: Can't read output file "); ! perror (ptr->filename); ! } ! } ! else { ! long n_counts = 0; ! ! if (ungetc (firstchar, da_file) == EOF) ! rewind (da_file); ! if (__read_long (&n_counts, da_file, 8) != 0) ! { ! fprintf (stderr, "arc profiling: Can't read output file %s.\n", ! ptr->filename); ! continue; ! } ! ! if (n_counts == ptr->ncounts) ! { ! int i; ! ! for (i = 0; i < n_counts; i++) ! { ! long v = 0; ! ! if (__read_long (&v, da_file, 8) != 0) ! { ! fprintf (stderr, "arc profiling: Can't read output file %s.\n", ! ptr->filename); ! break; ! } ! ptr->counts[i] += v; ! } ! } ! } ! rewind (da_file); ! ! /* ??? Should first write a header to the file. Preferably, a 4 byte ! magic number, 4 bytes containing the time the program was ! compiled, 4 bytes containing the last modification time of the ! source file, and 4 bytes indicating the compiler options used. ! ! That way we can easily verify that the proper source/executable/ ! data file combination is being used from gcov. */ ! ! if (__write_long (ptr->ncounts, da_file, 8) != 0) { ! ! fprintf (stderr, "arc profiling: Error writing output file %s.\n", ptr->filename); } ! else { ! int j; ! long *count_ptr = ptr->counts; ! int ret = 0; ! for (j = ptr->ncounts; j > 0; j--) { ! if (__write_long (*count_ptr, da_file, 8) != 0) { ! ret=1; break; } ! count_ptr++; } - if (ret) - fprintf (stderr, "arc profiling: Error writing output file %s.\n", - ptr->filename); } - - if (fclose (da_file) == EOF) - fprintf (stderr, "arc profiling: Error closing output file %s.\n", - ptr->filename); - } - - return; - } - - /* Must be basic block profiling. Emit a human readable output file. */ - - file = fopen ("bb.out", "a"); - - if (!file) - perror ("bb.out"); ! else ! { ! struct bb *ptr; ! /* This is somewhat type incorrect, but it avoids worrying about ! exactly where time.h is included from. It should be ok unless ! a void * differs from other pointer formats, or if sizeof (long) ! is < sizeof (time_t). It would be nice if we could assume the ! use of rationale standards here. */ ! time ((void *) &time_value); ! fprintf (file, "Basic block profiling finished on %s\n", ctime ((void *) &time_value)); ! /* We check the length field explicitly in order to allow compatibility ! with older GCC's which did not provide it. */ ! for (ptr = bb_head; ptr != (struct bb *) 0; ptr = ptr->next) { - int i; - int func_p = (ptr->nwords >= (long) sizeof (struct bb) - && ptr->nwords <= 1000 - && ptr->functions); - int line_p = (func_p && ptr->line_nums); - int file_p = (func_p && ptr->filenames); - int addr_p = (ptr->addresses != 0); - long ncounts = ptr->ncounts; - long cnt_max = 0; - long line_max = 0; - long addr_max = 0; - int file_len = 0; - int func_len = 0; - int blk_len = num_digits (ncounts, 10); - int cnt_len; - int line_len; - int addr_len; ! fprintf (file, "File %s, %ld basic blocks \n\n", ! ptr->filename, ncounts); ! ! /* Get max values for each field. */ ! for (i = 0; i < ncounts; i++) { ! const char *p; ! int len; ! ! if (cnt_max < ptr->counts[i]) ! cnt_max = ptr->counts[i]; ! ! if (addr_p && (unsigned long) addr_max < ptr->addresses[i]) ! addr_max = ptr->addresses[i]; ! ! if (line_p && line_max < ptr->line_nums[i]) ! line_max = ptr->line_nums[i]; ! ! if (func_p) ! { ! p = (ptr->functions[i]) ? (ptr->functions[i]) : ""; ! len = strlen (p); ! if (func_len < len) ! func_len = len; ! } ! ! if (file_p) { ! p = (ptr->filenames[i]) ? (ptr->filenames[i]) : ""; ! len = strlen (p); ! if (file_len < len) ! file_len = len; } } ! ! addr_len = num_digits (addr_max, 16); ! cnt_len = num_digits (cnt_max, 10); ! line_len = num_digits (line_max, 10); ! ! /* Now print out the basic block information. */ ! for (i = 0; i < ncounts; i++) ! { ! fprintf (file, ! " Block #%*d: executed %*ld time(s)", ! blk_len, i+1, ! cnt_len, ptr->counts[i]); ! ! if (addr_p) ! fprintf (file, " address= 0x%.*lx", addr_len, ! ptr->addresses[i]); ! ! if (func_p) ! fprintf (file, " function= %-*s", func_len, ! (ptr->functions[i]) ? ptr->functions[i] : ""); ! ! if (line_p) ! fprintf (file, " line= %*ld", line_len, ptr->line_nums[i]); ! ! if (file_p) ! fprintf (file, " file= %s", ! (ptr->filenames[i]) ? ptr->filenames[i] : ""); ! ! fprintf (file, "\n"); ! } ! ! fprintf (file, "\n"); ! fflush (file); } ! fprintf (file, "\n\n"); ! fclose (file); } } void --- 1310,1457 ---- static struct bb *bb_head; void __bb_exit_func (void) { ! FILE *da_file; int i; + struct bb *ptr; if (bb_head == 0) return; i = strlen (bb_head->filename) - 3; ! ! for (ptr = bb_head; ptr != (struct bb *) 0; ptr = ptr->next) { ! int firstchar; ! /* Make sure the output file exists - ! but don't clobber exiting data. */ ! if ((da_file = fopen (ptr->filename, "a")) != 0) ! fclose (da_file); ! /* Need to re-open in order to be able to write from the start. */ ! da_file = fopen (ptr->filename, "r+b"); ! /* Some old systems might not allow the 'b' mode modifier. ! Therefore, try to open without it. This can lead to a race ! condition so that when you delete and re-create the file, the ! file might be opened in text mode, but then, you shouldn't ! delete the file in the first place. */ ! if (da_file == 0) ! da_file = fopen (ptr->filename, "r+"); ! if (da_file == 0) { ! fprintf (stderr, "arc profiling: Can't open output file %s.\n", ! ptr->filename); ! continue; ! } ! /* After a fork, another process might try to read and/or write ! the same file simultanously. So if we can, lock the file to ! avoid race conditions. */ #if defined (TARGET_HAS_F_SETLKW) ! { ! struct flock s_flock; ! s_flock.l_type = F_WRLCK; ! s_flock.l_whence = SEEK_SET; ! s_flock.l_start = 0; ! s_flock.l_len = 1; ! s_flock.l_pid = getpid (); ! while (fcntl (fileno (da_file), F_SETLKW, &s_flock) ! && errno == EINTR); ! } #endif ! /* If the file is not empty, and the number of counts in it is the ! same, then merge them in. */ ! firstchar = fgetc (da_file); ! if (firstchar == EOF) ! { ! if (ferror (da_file)) { ! fprintf (stderr, "arc profiling: Can't read output file "); ! perror (ptr->filename); } + } + else + { + long n_counts = 0; ! if (ungetc (firstchar, da_file) == EOF) ! rewind (da_file); ! if (__read_long (&n_counts, da_file, 8) != 0) { ! fprintf (stderr, "arc profiling: Can't read output file %s.\n", ptr->filename); + continue; } ! ! if (n_counts == ptr->ncounts) { ! int i; ! ! for (i = 0; i < n_counts; i++) { ! gcov_type v = 0; ! ! if (__read_gcov_type (&v, da_file, 8) != 0) { ! fprintf (stderr, ! "arc profiling: Can't read output file %s.\n", ! ptr->filename); break; } ! ptr->counts[i] += v; } } ! } ! rewind (da_file); ! /* ??? Should first write a header to the file. Preferably, a 4 byte ! magic number, 4 bytes containing the time the program was ! compiled, 4 bytes containing the last modification time of the ! source file, and 4 bytes indicating the compiler options used. ! That way we can easily verify that the proper source/executable/ ! data file combination is being used from gcov. */ ! if (__write_gcov_type (ptr->ncounts, da_file, 8) != 0) { ! fprintf (stderr, "arc profiling: Error writing output file %s.\n", ! ptr->filename); ! } ! else ! { ! int j; ! gcov_type *count_ptr = ptr->counts; ! int ret = 0; ! for (j = ptr->ncounts; j > 0; j--) { ! if (__write_gcov_type (*count_ptr, da_file, 8) != 0) { ! ret = 1; ! break; } + count_ptr++; } ! if (ret) ! fprintf (stderr, "arc profiling: Error writing output file %s.\n", ! ptr->filename); } ! if (fclose (da_file) == EOF) ! fprintf (stderr, "arc profiling: Error closing output file %s.\n", ! ptr->filename); } + + return; } void *************** __bb_fork_func (void) *** 1626,2348 **** } } - #ifndef MACHINE_STATE_SAVE - #define MACHINE_STATE_SAVE(ID) - #endif - #ifndef MACHINE_STATE_RESTORE - #define MACHINE_STATE_RESTORE(ID) - #endif - - /* Number of buckets in hashtable of basic block addresses. */ - - #define BB_BUCKETS 311 - - /* Maximum length of string in file bb.in. */ - - #define BBINBUFSIZE 500 - - struct bb_edge - { - struct bb_edge *next; - unsigned long src_addr; - unsigned long dst_addr; - unsigned long count; - }; - - enum bb_func_mode - { - TRACE_KEEP = 0, TRACE_ON = 1, TRACE_OFF = 2 - }; - - struct bb_func - { - struct bb_func *next; - char *funcname; - char *filename; - enum bb_func_mode mode; - }; - - /* This is the connection to the outside world. - The BLOCK_PROFILER macro must set __bb.blocks - and __bb.blockno. */ - - struct { - unsigned long blockno; - struct bb *blocks; - } __bb; - - /* Vars to store addrs of source and destination basic blocks - of a jump. */ - - static unsigned long bb_src = 0; - static unsigned long bb_dst = 0; - - static FILE *bb_tracefile = (FILE *) 0; - static struct bb_edge **bb_hashbuckets = (struct bb_edge **) 0; - static struct bb_func *bb_func_head = (struct bb_func *) 0; - static unsigned long bb_callcount = 0; - static int bb_mode = 0; - - static unsigned long *bb_stack = (unsigned long *) 0; - static size_t bb_stacksize = 0; - - static int reported = 0; - - /* Trace modes: - Always : Print execution frequencies of basic blocks - to file bb.out. - bb_mode & 1 != 0 : Dump trace of basic blocks to file bbtrace[.gz] - bb_mode & 2 != 0 : Print jump frequencies to file bb.out. - bb_mode & 4 != 0 : Cut call instructions from basic block flow. - bb_mode & 8 != 0 : Insert return instructions in basic block flow. - */ - - #ifdef HAVE_POPEN - - /*#include */ - #include - /*#include */ - - /* Commands executed by gopen. */ - - #define GOPENDECOMPRESS "gzip -cd " - #define GOPENCOMPRESS "gzip -c >" - - /* Like fopen but pipes through gzip. mode may only be "r" or "w". - If it does not compile, simply replace gopen by fopen and delete - '.gz' from any first parameter to gopen. */ - - static FILE * - gopen (char *fn, char *mode) - { - int use_gzip; - char *p; - - if (mode[1]) - return (FILE *) 0; - - if (mode[0] != 'r' && mode[0] != 'w') - return (FILE *) 0; - - p = fn + strlen (fn)-1; - use_gzip = ((p[-1] == '.' && (p[0] == 'Z' || p[0] == 'z')) - || (p[-2] == '.' && p[-1] == 'g' && p[0] == 'z')); - - if (use_gzip) - { - if (mode[0]=='r') - { - FILE *f; - char *s = (char *) malloc (sizeof (char) * strlen (fn) - + sizeof (GOPENDECOMPRESS)); - strcpy (s, GOPENDECOMPRESS); - strcpy (s + (sizeof (GOPENDECOMPRESS)-1), fn); - f = popen (s, mode); - free (s); - return f; - } - - else - { - FILE *f; - char *s = (char *) malloc (sizeof (char) * strlen (fn) - + sizeof (GOPENCOMPRESS)); - strcpy (s, GOPENCOMPRESS); - strcpy (s + (sizeof (GOPENCOMPRESS)-1), fn); - if (!(f = popen (s, mode))) - f = fopen (s, mode); - free (s); - return f; - } - } - - else - return fopen (fn, mode); - } - - static int - gclose (FILE *f) - { - struct stat buf; - - if (f != 0) - { - if (!fstat (fileno (f), &buf) && S_ISFIFO (buf.st_mode)) - return pclose (f); - - return fclose (f); - } - return 0; - } - - #endif /* HAVE_POPEN */ - - /* Called once per program. */ - - static void - __bb_exit_trace_func (void) - { - FILE *file = fopen ("bb.out", "a"); - struct bb_func *f; - struct bb *b; - - if (!file) - perror ("bb.out"); - - if (bb_mode & 1) - { - if (!bb_tracefile) - perror ("bbtrace"); - else - #ifdef HAVE_POPEN - gclose (bb_tracefile); - #else - fclose (bb_tracefile); - #endif /* HAVE_POPEN */ - } - - /* Check functions in `bb.in'. */ - - if (file) - { - long time_value; - const struct bb_func *p; - int printed_something = 0; - struct bb *ptr; - long blk; - - /* This is somewhat type incorrect. */ - time ((void *) &time_value); - - for (p = bb_func_head; p != (struct bb_func *) 0; p = p->next) - { - for (ptr = bb_head; ptr != (struct bb *) 0; ptr = ptr->next) - { - if (!ptr->filename || (p->filename != (char *) 0 && strcmp (p->filename, ptr->filename))) - continue; - for (blk = 0; blk < ptr->ncounts; blk++) - { - if (!strcmp (p->funcname, ptr->functions[blk])) - goto found; - } - } - - if (!printed_something) - { - fprintf (file, "Functions in `bb.in' not executed during basic block profiling on %s\n", ctime ((void *) &time_value)); - printed_something = 1; - } - - fprintf (file, "\tFunction %s", p->funcname); - if (p->filename) - fprintf (file, " of file %s", p->filename); - fprintf (file, "\n" ); - - found: ; - } - - if (printed_something) - fprintf (file, "\n"); - - } - - if (bb_mode & 2) - { - if (!bb_hashbuckets) - { - if (!reported) - { - fprintf (stderr, "Profiler: out of memory\n"); - reported = 1; - } - return; - } - - else if (file) - { - long time_value; - int i; - unsigned long addr_max = 0; - unsigned long cnt_max = 0; - int cnt_len; - int addr_len; - - /* This is somewhat type incorrect, but it avoids worrying about - exactly where time.h is included from. It should be ok unless - a void * differs from other pointer formats, or if sizeof (long) - is < sizeof (time_t). It would be nice if we could assume the - use of rationale standards here. */ - - time ((void *) &time_value); - fprintf (file, "Basic block jump tracing"); - - switch (bb_mode & 12) - { - case 0: - fprintf (file, " (with call)"); - break; - - case 4: - /* Print nothing. */ - break; - - case 8: - fprintf (file, " (with call & ret)"); - break; - - case 12: - fprintf (file, " (with ret)"); - break; - } - - fprintf (file, " finished on %s\n", ctime ((void *) &time_value)); - - for (i = 0; i < BB_BUCKETS; i++) - { - struct bb_edge *bucket = bb_hashbuckets[i]; - for ( ; bucket; bucket = bucket->next ) - { - if (addr_max < bucket->src_addr) - addr_max = bucket->src_addr; - if (addr_max < bucket->dst_addr) - addr_max = bucket->dst_addr; - if (cnt_max < bucket->count) - cnt_max = bucket->count; - } - } - addr_len = num_digits (addr_max, 16); - cnt_len = num_digits (cnt_max, 10); - - for ( i = 0; i < BB_BUCKETS; i++) - { - struct bb_edge *bucket = bb_hashbuckets[i]; - for ( ; bucket; bucket = bucket->next ) - { - fprintf (file, - "Jump from block 0x%.*lx to block 0x%.*lx executed %*lu time(s)\n", - addr_len, bucket->src_addr, - addr_len, bucket->dst_addr, - cnt_len, bucket->count); - } - } - - fprintf (file, "\n"); - - } - } - - if (file) - fclose (file); - - /* Free allocated memory. */ - - f = bb_func_head; - while (f) - { - struct bb_func *old = f; - - f = f->next; - if (old->funcname) free (old->funcname); - if (old->filename) free (old->filename); - free (old); - } - - if (bb_stack) - free (bb_stack); - - if (bb_hashbuckets) - { - int i; - - for (i = 0; i < BB_BUCKETS; i++) - { - struct bb_edge *old, *bucket = bb_hashbuckets[i]; - - while (bucket) - { - old = bucket; - bucket = bucket->next; - free (old); - } - } - free (bb_hashbuckets); - } - - for (b = bb_head; b; b = b->next) - if (b->flags) free (b->flags); - } - - /* Called once per program. */ - - static void - __bb_init_prg (void) - { - FILE *file; - char buf[BBINBUFSIZE]; - const char *p; - const char *pos; - enum bb_func_mode m; - int i; - - /* Initialize destructor. */ - atexit (__bb_exit_func); - - if (!(file = fopen ("bb.in", "r"))) - return; - - while(fgets (buf, BBINBUFSIZE, file) != 0) - { - i = strlen (buf); - if (buf[i] == '\n') - buf[i--] = '\0'; - - p = buf; - if (*p == '-') - { - m = TRACE_OFF; - p++; - } - else - { - m = TRACE_ON; - } - if (!strcmp (p, "__bb_trace__")) - bb_mode |= 1; - else if (!strcmp (p, "__bb_jumps__")) - bb_mode |= 2; - else if (!strcmp (p, "__bb_hidecall__")) - bb_mode |= 4; - else if (!strcmp (p, "__bb_showret__")) - bb_mode |= 8; - else - { - struct bb_func *f = (struct bb_func *) malloc (sizeof (struct bb_func)); - if (f) - { - unsigned long l; - f->next = bb_func_head; - if ((pos = strchr (p, ':'))) - { - if (!(f->funcname = (char *) malloc (strlen (pos+1)+1))) - continue; - strcpy (f->funcname, pos+1); - l = pos-p; - if ((f->filename = (char *) malloc (l+1))) - { - strncpy (f->filename, p, l); - f->filename[l] = '\0'; - } - else - f->filename = (char *) 0; - } - else - { - if (!(f->funcname = (char *) malloc (strlen (p)+1))) - continue; - strcpy (f->funcname, p); - f->filename = (char *) 0; - } - f->mode = m; - bb_func_head = f; - } - } - } - fclose (file); - - #ifdef HAVE_POPEN - - if (bb_mode & 1) - bb_tracefile = gopen ("bbtrace.gz", "w"); - - #else - - if (bb_mode & 1) - bb_tracefile = fopen ("bbtrace", "w"); - - #endif /* HAVE_POPEN */ - - if (bb_mode & 2) - { - bb_hashbuckets = (struct bb_edge **) - malloc (BB_BUCKETS * sizeof (struct bb_edge *)); - if (bb_hashbuckets) - /* Use a loop here rather than calling bzero to avoid having to - conditionalize its existance. */ - for (i = 0; i < BB_BUCKETS; i++) - bb_hashbuckets[i] = 0; - } - - if (bb_mode & 12) - { - bb_stacksize = 10; - bb_stack = (unsigned long *) malloc (bb_stacksize * sizeof (*bb_stack)); - } - - /* Initialize destructor. */ - atexit (__bb_exit_trace_func); - } - - /* Called upon entering a basic block. */ - - void - __bb_trace_func (void) - { - struct bb_edge *bucket; - - MACHINE_STATE_SAVE("1") - - if (!bb_callcount || (__bb.blocks->flags && (__bb.blocks->flags[__bb.blockno] & TRACE_OFF))) - goto skip; - - bb_dst = __bb.blocks->addresses[__bb.blockno]; - __bb.blocks->counts[__bb.blockno]++; - - if (bb_tracefile) - { - fwrite (&bb_dst, sizeof (unsigned long), 1, bb_tracefile); - } - - if (bb_hashbuckets) - { - struct bb_edge **startbucket, **oldnext; - - oldnext = startbucket - = & bb_hashbuckets[ (((int) bb_src*8) ^ (int) bb_dst) % BB_BUCKETS ]; - bucket = *startbucket; - - for (bucket = *startbucket; bucket; - oldnext = &(bucket->next), bucket = *oldnext) - { - if (bucket->src_addr == bb_src - && bucket->dst_addr == bb_dst) - { - bucket->count++; - *oldnext = bucket->next; - bucket->next = *startbucket; - *startbucket = bucket; - goto ret; - } - } - - bucket = (struct bb_edge *) malloc (sizeof (struct bb_edge)); - - if (!bucket) - { - if (!reported) - { - fprintf (stderr, "Profiler: out of memory\n"); - reported = 1; - } - } - - else - { - bucket->src_addr = bb_src; - bucket->dst_addr = bb_dst; - bucket->next = *startbucket; - *startbucket = bucket; - bucket->count = 1; - } - } - - ret: - bb_src = bb_dst; - - skip: - ; - - MACHINE_STATE_RESTORE("1") - - } - - /* Called when returning from a function and `__bb_showret__' is set. */ - - static void - __bb_trace_func_ret (void) - { - struct bb_edge *bucket; - - if (!bb_callcount || (__bb.blocks->flags && (__bb.blocks->flags[__bb.blockno] & TRACE_OFF))) - goto skip; - - if (bb_hashbuckets) - { - struct bb_edge **startbucket, **oldnext; - - oldnext = startbucket - = & bb_hashbuckets[ (((int) bb_dst * 8) ^ (int) bb_src) % BB_BUCKETS ]; - bucket = *startbucket; - - for (bucket = *startbucket; bucket; - oldnext = &(bucket->next), bucket = *oldnext) - { - if (bucket->src_addr == bb_dst - && bucket->dst_addr == bb_src) - { - bucket->count++; - *oldnext = bucket->next; - bucket->next = *startbucket; - *startbucket = bucket; - goto ret; - } - } - - bucket = (struct bb_edge *) malloc (sizeof (struct bb_edge)); - - if (!bucket) - { - if (!reported) - { - fprintf (stderr, "Profiler: out of memory\n"); - reported = 1; - } - } - - else - { - bucket->src_addr = bb_dst; - bucket->dst_addr = bb_src; - bucket->next = *startbucket; - *startbucket = bucket; - bucket->count = 1; - } - } - - ret: - bb_dst = bb_src; - - skip: - ; - - } - - /* Called upon entering the first function of a file. */ - - static void - __bb_init_file (struct bb *blocks) - { - - const struct bb_func *p; - long blk, ncounts = blocks->ncounts; - const char **functions = blocks->functions; - - /* Set up linked list. */ - blocks->zero_word = 1; - blocks->next = bb_head; - bb_head = blocks; - - blocks->flags = 0; - if (!bb_func_head - || !(blocks->flags = (char *) malloc (sizeof (char) * blocks->ncounts))) - return; - - for (blk = 0; blk < ncounts; blk++) - blocks->flags[blk] = 0; - - for (blk = 0; blk < ncounts; blk++) - { - for (p = bb_func_head; p; p = p->next) - { - if (!strcmp (p->funcname, functions[blk]) - && (!p->filename || !strcmp (p->filename, blocks->filename))) - { - blocks->flags[blk] |= p->mode; - } - } - } - - } - - /* Called when exiting from a function. */ - - void - __bb_trace_ret (void) - { - - MACHINE_STATE_SAVE("2") - - if (bb_callcount) - { - if ((bb_mode & 12) && bb_stacksize > bb_callcount) - { - bb_src = bb_stack[bb_callcount]; - if (bb_mode & 8) - __bb_trace_func_ret (); - } - - bb_callcount -= 1; - } - - MACHINE_STATE_RESTORE("2") - - } - - /* Called when entering a function. */ - - void - __bb_init_trace_func (struct bb *blocks, unsigned long blockno) - { - static int trace_init = 0; - - MACHINE_STATE_SAVE("3") - - if (!blocks->zero_word) - { - if (!trace_init) - { - trace_init = 1; - __bb_init_prg (); - } - __bb_init_file (blocks); - } - - if (bb_callcount) - { - - bb_callcount += 1; - - if (bb_mode & 12) - { - if (bb_callcount >= bb_stacksize) - { - size_t newsize = bb_callcount + 100; - - bb_stack = (unsigned long *) realloc (bb_stack, newsize); - if (! bb_stack) - { - if (!reported) - { - fprintf (stderr, "Profiler: out of memory\n"); - reported = 1; - } - bb_stacksize = 0; - goto stack_overflow; - } - bb_stacksize = newsize; - } - bb_stack[bb_callcount] = bb_src; - - if (bb_mode & 4) - bb_src = 0; - - } - - stack_overflow:; - - } - - else if (blocks->flags && (blocks->flags[blockno] & TRACE_ON)) - { - bb_callcount = 1; - bb_src = 0; - - if (bb_stack) - bb_stack[bb_callcount] = bb_src; - } - - MACHINE_STATE_RESTORE("3") - } - #endif /* not inhibit_libc */ #endif /* not BLOCK_PROFILER_CODE */ #endif /* L_bb */ --- 1490,1495 ---- *************** void *** 2356,2362 **** __clear_cache (char *beg __attribute__((__unused__)), char *end __attribute__((__unused__))) { ! #ifdef CLEAR_INSN_CACHE CLEAR_INSN_CACHE (beg, end); #else #ifdef INSN_CACHE_SIZE --- 1503,1509 ---- __clear_cache (char *beg __attribute__((__unused__)), char *end __attribute__((__unused__))) { ! #ifdef CLEAR_INSN_CACHE CLEAR_INSN_CACHE (beg, end); #else #ifdef INSN_CACHE_SIZE *************** __clear_cache (char *beg __attribute__(( *** 2420,2426 **** /* Compute the cache alignment of the place to stop clearing. */ #if 0 /* This is not needed for gcc's purposes. */ /* If the block to clear is bigger than a cache plane, ! we clear the entire cache, and OFFSET is already correct. */ if (end < beg + INSN_CACHE_PLANE_SIZE) #endif offset = (((int) (end + INSN_CACHE_LINE_WIDTH - 1) --- 1567,1573 ---- /* Compute the cache alignment of the place to stop clearing. */ #if 0 /* This is not needed for gcc's purposes. */ /* If the block to clear is bigger than a cache plane, ! we clear the entire cache, and OFFSET is already correct. */ if (end < beg + INSN_CACHE_PLANE_SIZE) #endif offset = (((int) (end + INSN_CACHE_LINE_WIDTH - 1) *************** mprotect (char *addr, int len, int prot) *** 2508,2515 **** #endif /* WINNT && ! __CYGWIN__ && ! _UWIN */ ! #ifdef TRANSFER_FROM_TRAMPOLINE ! TRANSFER_FROM_TRAMPOLINE #endif #if defined (NeXT) && defined (__MACH__) --- 1655,1662 ---- #endif /* WINNT && ! __CYGWIN__ && ! _UWIN */ ! #ifdef TRANSFER_FROM_TRAMPOLINE ! TRANSFER_FROM_TRAMPOLINE #endif #if defined (NeXT) && defined (__MACH__) *************** __enable_execute_stack (char *addr) *** 2544,2550 **** #else __clear_cache ((int) addr, (int) eaddr); #endif ! } #endif /* defined (NeXT) && defined (__MACH__) */ --- 1691,1697 ---- #else __clear_cache ((int) addr, (int) eaddr); #endif ! } #endif /* defined (NeXT) && defined (__MACH__) */ *************** __enable_execute_stack (void) *** 2590,2598 **** int save_errno; static unsigned long lowest = USRSTACK; unsigned long current = (unsigned long) &save_errno & -NBPC; ! /* Ignore errno being set. memctl sets errno to EINVAL whenever the ! address is seen as 'negative'. That is the case with the stack. */ save_errno=errno; if (lowest > current) --- 1737,1745 ---- int save_errno; static unsigned long lowest = USRSTACK; unsigned long current = (unsigned long) &save_errno & -NBPC; ! /* Ignore errno being set. memctl sets errno to EINVAL whenever the ! address is seen as 'negative'. That is the case with the stack. */ save_errno=errno; if (lowest > current) *************** __clear_insn_cache (void) *** 2641,2651 **** int save_errno; /* Preserve errno, because users would be surprised to have ! errno changing without explicitly calling any system-call. */ save_errno = errno; ! /* Keep it simple : memctl (MCT_TEXT) always fully clears the insn cache. ! No need to use an address derived from _start or %sp, as 0 works also. */ memctl(0, 4096, MCT_TEXT); errno = save_errno; #endif --- 1788,1798 ---- int save_errno; /* Preserve errno, because users would be surprised to have ! errno changing without explicitly calling any system-call. */ save_errno = errno; ! /* Keep it simple : memctl (MCT_TEXT) always fully clears the insn cache. ! No need to use an address derived from _start or %sp, as 0 works also. */ memctl(0, 4096, MCT_TEXT); errno = save_errno; #endif *************** cacheflush (char *beg, int size, int fla *** 2728,2734 **** /* Some ELF crosses use crtstuff.c to provide __CTOR_LIST__, but use this code to run constructors. In that case, we need to handle EH here, too. */ ! #ifdef EH_FRAME_SECTION #include "unwind-dw2-fde.h" extern unsigned char __EH_FRAME_BEGIN__[]; #endif --- 1875,1881 ---- /* Some ELF crosses use crtstuff.c to provide __CTOR_LIST__, but use this code to run constructors. In that case, we need to handle EH here, too. */ ! #ifdef EH_FRAME_SECTION_NAME #include "unwind-dw2-fde.h" extern unsigned char __EH_FRAME_BEGIN__[]; #endif *************** __do_global_dtors (void) *** 2748,2754 **** (*(p-1)) (); } #endif ! #if defined (EH_FRAME_SECTION) && !defined (HAS_INIT_SECTION) { static int completed = 0; if (! completed) --- 1895,1901 ---- (*(p-1)) (); } #endif ! #if defined (EH_FRAME_SECTION_NAME) && !defined (HAS_INIT_SECTION) { static int completed = 0; if (! completed) *************** __do_global_dtors (void) *** 2767,2773 **** void __do_global_ctors (void) { ! #ifdef EH_FRAME_SECTION { static struct object object; __register_frame_info (__EH_FRAME_BEGIN__, &object); --- 1914,1920 ---- void __do_global_ctors (void) { ! #ifdef EH_FRAME_SECTION_NAME { static struct object object; __register_frame_info (__EH_FRAME_BEGIN__, &object); *************** SYMBOL__MAIN () *** 2821,2827 **** Long term no port should use those extensions. But many still do. */ #if !defined(INIT_SECTION_ASM_OP) && !defined(CTOR_LISTS_DEFINED_EXTERNALLY) ! #if defined (ASM_OUTPUT_CONSTRUCTOR) || defined (USE_COLLECT2) func_ptr __CTOR_LIST__[2] = {0, 0}; func_ptr __DTOR_LIST__[2] = {0, 0}; #else --- 1968,1974 ---- Long term no port should use those extensions. But many still do. */ #if !defined(INIT_SECTION_ASM_OP) && !defined(CTOR_LISTS_DEFINED_EXTERNALLY) ! #if defined (TARGET_ASM_CONSTRUCTOR) || defined (USE_COLLECT2) func_ptr __CTOR_LIST__[2] = {0, 0}; func_ptr __DTOR_LIST__[2] = {0, 0}; #else *************** atexit (func_ptr func) *** 2872,2878 **** extern void _cleanup (void); extern void _exit (int) __attribute__ ((__noreturn__)); ! void exit (int status) { if (atexit_chain) --- 2019,2025 ---- extern void _cleanup (void); extern void _exit (int) __attribute__ ((__noreturn__)); ! void exit (int status) { if (atexit_chain) diff -Nrc3pad gcc-3.0.4/gcc/libgcc2.h gcc-3.1/gcc/libgcc2.h *** gcc-3.0.4/gcc/libgcc2.h Mon May 21 04:27:18 2001 --- gcc-3.1/gcc/libgcc2.h Wed Aug 22 14:35:22 2001 *************** *** 2,49 **** /* Copyright (C) 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ ! ! #ifndef __LIBGCC2_H__ ! #define __LIBGCC2_H__ ! typedef void (*__terminate_func_ptr)(void) __attribute__ ((__noreturn__)); extern int __gcc_bcmp (const unsigned char *, const unsigned char *, size_t); extern void __clear_cache (char *, char *); - extern void __pure_virtual (void) __attribute__ ((__noreturn__)); - extern void __terminate (void) __attribute__ ((__noreturn__)); - extern __terminate_func_ptr __terminate_set_func (__terminate_func_ptr); - extern void __default_terminate (void) __attribute__ ((__noreturn__)); - extern void *__throw_type_match (void *, void *, void *); - extern void *__get_eh_context (void); - extern void **__get_eh_info (void); - extern void ***__get_dynamic_handler_chain (void); - extern int __eh_rtime_match (void *); - extern void __unwinding_cleanup (void); - extern void __rethrow (void *); - extern void __throw (void); - extern void __sjthrow (void) __attribute__ ((__noreturn__)); - extern void __sjpopnthrow (void) __attribute__ ((__noreturn__)); extern void __eprintf (const char *, const char *, unsigned int, const char *) __attribute__ ((__noreturn__)); - extern void *__eh_alloc (size_t); - extern void __eh_free (void *); struct bb; extern void __bb_exit_func (void); --- 2,31 ---- /* Copyright (C) 2000, 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ ! #ifndef GCC_LIBGCC2_H ! #define GCC_LIBGCC2_H extern int __gcc_bcmp (const unsigned char *, const unsigned char *, size_t); extern void __clear_cache (char *, char *); extern void __eprintf (const char *, const char *, unsigned int, const char *) __attribute__ ((__noreturn__)); struct bb; extern void __bb_exit_func (void); *************** typedef unsigned int USItype __attribute *** 94,102 **** /* These typedefs are usually forbidden on archs with UNITS_PER_WORD 2 */ typedef int DItype __attribute__ ((mode (DI))); typedef unsigned int UDItype __attribute__ ((mode (DI))); ! /* We cannot represent a TItype constant on a machine with 32-bit ! HOST_WIDE_INTs, so it doesn't make sense to define these types. */ ! #if MIN_UNITS_PER_WORD > 4 && HOST_BITS_PER_WIDE_INT >= 64 /* These typedefs are usually forbidden on archs with UNITS_PER_WORD 4 */ typedef int TItype __attribute__ ((mode (TI))); typedef unsigned int UTItype __attribute__ ((mode (TI))); --- 76,82 ---- /* These typedefs are usually forbidden on archs with UNITS_PER_WORD 2 */ typedef int DItype __attribute__ ((mode (DI))); typedef unsigned int UDItype __attribute__ ((mode (DI))); ! #if MIN_UNITS_PER_WORD > 4 /* These typedefs are usually forbidden on archs with UNITS_PER_WORD 4 */ typedef int TItype __attribute__ ((mode (TI))); typedef unsigned int UTItype __attribute__ ((mode (TI))); *************** typedef int word_type __attribute__ ((mo *** 155,163 **** #define float bogus_type #define double bogus_type ! /* We can only support a Wtype that fits within a HOST_WIDE_INT. Otherwise, ! DWtype overflows the tree and RTL types. */ ! #if MIN_UNITS_PER_WORD > 4 && HOST_BITS_PER_WIDE_INT >= 64 #define W_TYPE_SIZE (8 * BITS_PER_UNIT) #define Wtype DItype #define UWtype UDItype --- 135,141 ---- #define float bogus_type #define double bogus_type ! #if MIN_UNITS_PER_WORD > 4 #define W_TYPE_SIZE (8 * BITS_PER_UNIT) #define Wtype DItype #define UWtype UDItype *************** typedef union *** 320,323 **** #include "longlong.h" ! #endif /* __LIBGCC2_H__ */ --- 298,301 ---- #include "longlong.h" ! #endif /* ! GCC_LIBGCC2_H */ diff -Nrc3pad gcc-3.0.4/gcc/line-map.c gcc-3.1/gcc/line-map.c *** gcc-3.0.4/gcc/line-map.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/line-map.c Tue Aug 21 23:05:09 2001 *************** *** 0 **** --- 1,235 ---- + /* Map logical line numbers to (source file, line number) pairs. + Copyright (C) 2001 + 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. + + In other words, you are welcome to use, share and improve this program. + You are forbidden to forbid anyone else to use, share and improve + what you give them. Help stamp out software-hoarding! */ + + #include "config.h" + #include "system.h" + #include "line-map.h" + #include "intl.h" + + static void trace_include + PARAMS ((const struct line_maps *, const struct line_map *)); + + /* Initialize a line map set. */ + + void + init_line_maps (set) + struct line_maps *set; + { + set->maps = 0; + set->allocated = 0; + set->used = 0; + set->last_listed = -1; + set->trace_includes = false; + set->depth = 0; + } + + /* Free a line map set. */ + + void + free_line_maps (set) + struct line_maps *set; + { + if (set->maps) + { + struct line_map *map; + + /* Depending upon whether we are handling preprocessed input or + not, this can be a user error or an ICE. */ + for (map = CURRENT_LINE_MAP (set); ! MAIN_FILE_P (map); + map = INCLUDED_FROM (set, map)) + fprintf (stderr, "line-map.c: file \"%s\" entered but not left\n", + map->to_file); + + free (set->maps); + } + } + + /* Add a mapping of logical source line to physical source file and + line number. Ther text pointed to by TO_FILE must have a lifetime + at least as long as the final call to lookup_line (). + + FROM_LINE should be monotonic increasing across calls to this + function. */ + + const struct line_map * + add_line_map (set, reason, sysp, from_line, to_file, to_line) + struct line_maps *set; + enum lc_reason reason; + unsigned int sysp; + unsigned int from_line; + const char *to_file; + unsigned int to_line; + { + struct line_map *map; + + if (set->used && from_line < set->maps[set->used - 1].from_line) + abort (); + + if (set->used == set->allocated) + { + set->allocated = 2 * set->allocated + 256; + set->maps = (struct line_map *) + xrealloc (set->maps, set->allocated * sizeof (struct line_map)); + } + + map = &set->maps[set->used++]; + + /* If we don't keep our line maps consistent, we can easily + segfault. Don't rely on the client to do it for us. */ + if (set->depth == 0) + reason = LC_ENTER; + else if (reason == LC_LEAVE) + { + struct line_map *from; + bool error; + + if (MAIN_FILE_P (map - 1)) + { + error = true; + reason = LC_RENAME; + from = map - 1; + } + else + { + from = INCLUDED_FROM (set, map - 1); + error = to_file && strcmp (from->to_file, to_file); + } + + /* Depending upon whether we are handling preprocessed input or + not, this can be a user error or an ICE. */ + if (error) + fprintf (stderr, "line-map.c: file \"%s\" left but not entered\n", + to_file); + + /* A TO_FILE of NULL is special - we use the natural values. */ + if (error || to_file == NULL) + { + to_file = from->to_file; + to_line = LAST_SOURCE_LINE (from) + 1; + sysp = from->sysp; + } + } + + map->reason = reason; + map->sysp = sysp; + map->from_line = from_line; + map->to_file = to_file; + map->to_line = to_line; + + if (reason == LC_ENTER) + { + set->depth++; + map->included_from = set->used - 2; + if (set->trace_includes) + trace_include (set, map); + } + else if (reason == LC_RENAME) + map->included_from = map[-1].included_from; + else if (reason == LC_LEAVE) + { + set->depth--; + map->included_from = INCLUDED_FROM (set, map - 1)->included_from; + } + + return map; + } + + /* Given a logical line, returns the map from which the corresponding + (source file, line) pair can be deduced. Since the set is built + chronologically, the logical lines are monotonic increasing, and so + the list is sorted and we can use a binary search. */ + + const struct line_map * + lookup_line (set, line) + struct line_maps *set; + unsigned int line; + { + unsigned int md, mn = 0, mx = set->used; + + if (mx == 0) + abort (); + + while (mx - mn > 1) + { + md = (mn + mx) / 2; + if (set->maps[md].from_line > line) + mx = md; + else + mn = md; + } + + return &set->maps[mn]; + } + + /* Print the file names and line numbers of the #include commands + which led to the map MAP, if any, to stderr. Nothing is output if + the most recently listed stack is the same as the current one. */ + + void + print_containing_files (set, map) + struct line_maps *set; + const struct line_map *map; + { + if (MAIN_FILE_P (map) || set->last_listed == map->included_from) + return; + + set->last_listed = map->included_from; + map = INCLUDED_FROM (set, map); + + fprintf (stderr, _("In file included from %s:%u"), + map->to_file, LAST_SOURCE_LINE (map)); + + while (! MAIN_FILE_P (map)) + { + map = INCLUDED_FROM (set, map); + /* Translators note: this message is used in conjunction + with "In file included from %s:%ld" and some other + tricks. We want something like this: + + | In file included from sys/select.h:123, + | from sys/types.h:234, + | from userfile.c:31: + | bits/select.h:45: + + with all the "from"s lined up. + The trailing comma is at the beginning of this message, + and the trailing colon is not translated. */ + fprintf (stderr, _(",\n from %s:%u"), + map->to_file, LAST_SOURCE_LINE (map)); + } + + fputs (":\n", stderr); + } + + /* Print an include trace, for e.g. the -H option of the preprocessor. */ + + static void + trace_include (set, map) + const struct line_maps *set; + const struct line_map *map; + { + unsigned int i = set->depth; + + while (--i) + putc ('.', stderr); + fprintf (stderr, " %s\n", map->to_file); + } diff -Nrc3pad gcc-3.0.4/gcc/line-map.h gcc-3.1/gcc/line-map.h *** gcc-3.0.4/gcc/line-map.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/line-map.h Tue Aug 21 23:05:09 2001 *************** *** 0 **** --- 1,119 ---- + /* Map logical line numbers to (source file, line number) pairs. + Copyright (C) 2001 + 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. + + In other words, you are welcome to use, share and improve this program. + You are forbidden to forbid anyone else to use, share and improve + what you give them. Help stamp out software-hoarding! */ + + #ifndef GCC_LINE_MAP_H + #define GCC_LINE_MAP_H + + /* Reason for adding a line change with add_line_map (). LC_ENTER is + when including a new file, e.g. a #include directive in C. + LC_LEAVE is when reaching a file's end. LC_RENAME is when a file + name or line number changes for neither of the above reasons + (e.g. a #line directive in C). */ + enum lc_reason {LC_ENTER = 0, LC_LEAVE, LC_RENAME}; + + /* The logical line FROM_LINE maps to physical source file TO_FILE at + line TO_LINE, and subsequently one-to-one until the next line_map + structure in the set. INCLUDED_FROM is an index into the set that + gives the line mapping at whose end the current one was included. + File(s) at the bottom of the include stack have this set to -1. + REASON is the reason for creation of this line map, SYSP is one for + a system header, two for a C system header file that therefore + needs to be extern "C" protected in C++, and zero otherwise. */ + struct line_map + { + const char *to_file; + unsigned int to_line; + unsigned int from_line; + int included_from; + ENUM_BITFIELD (lc_reason) reason : CHAR_BIT; + unsigned char sysp; + }; + + /* A set of chronological line_map structures. */ + struct line_maps + { + struct line_map *maps; + unsigned int allocated; + unsigned int used; + + /* The most recently listed include stack, if any, starts with + LAST_LISTED as the topmost including file. -1 indicates nothing + has been listed yet. */ + int last_listed; + + /* Depth of the include stack, including the current file. */ + unsigned int depth; + + /* If true, prints an include trace a la -H. */ + bool trace_includes; + }; + + /* Initialize a line map set. */ + extern void init_line_maps + PARAMS ((struct line_maps *)); + + /* Free a line map set. */ + extern void free_line_maps + PARAMS ((struct line_maps *)); + + /* Add a mapping of logical source line to physical source file and + line number. The text pointed to by TO_FILE must have a lifetime + at least as long as the line maps. If reason is LC_LEAVE, and + TO_FILE is NULL, then TO_FILE, TO_LINE and SYSP are given their + natural values considering the file we are returning to. + + FROM_LINE should be monotonic increasing across calls to this + function. A call to this function can relocate the previous set of + maps, so any stored line_map pointers should not be used. */ + extern const struct line_map *add_line_map + PARAMS ((struct line_maps *, enum lc_reason, unsigned int sysp, + unsigned int from_line, const char *to_file, unsigned int to_line)); + + /* Given a logical line, returns the map from which the corresponding + (source file, line) pair can be deduced. */ + extern const struct line_map *lookup_line + PARAMS ((struct line_maps *, unsigned int)); + + /* Print the file names and line numbers of the #include commands + which led to the map MAP, if any, to stderr. Nothing is output if + the most recently listed stack is the same as the current one. */ + extern void print_containing_files + PARAMS ((struct line_maps *, const struct line_map *)); + + /* Converts a map and logical line to source line. */ + #define SOURCE_LINE(MAP, LINE) ((LINE) + (MAP)->to_line - (MAP)->from_line) + + /* Returns the last source line within a map. This is the (last) line + of the #include, or other directive, that caused a map change. */ + #define LAST_SOURCE_LINE(MAP) SOURCE_LINE ((MAP), (MAP)[1].from_line - 1) + + /* Returns the map a given map was included from. */ + #define INCLUDED_FROM(SET, MAP) (&(SET)->maps[(MAP)->included_from]) + + /* Non-zero if the map is at the bottom of the include stack. */ + #define MAIN_FILE_P(MAP) ((MAP)->included_from < 0) + + /* The current line map. Saves a call to lookup_line if the caller is + sure he is in the scope of the current map. */ + #define CURRENT_LINE_MAP(MAPS) ((MAPS)->maps + (MAPS)->used - 1) + + #endif /* !GCC_LINE_MAP_H */ diff -Nrc3pad gcc-3.0.4/gcc/lists.c gcc-3.1/gcc/lists.c *** gcc-3.0.4/gcc/lists.c Sun May 27 16:07:26 2001 --- gcc-3.1/gcc/lists.c Thu Oct 11 03:15:53 2001 *************** *** 2,23 **** Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 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 "config.h" #include "system.h" --- 2,23 ---- Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" #include "system.h" *************** static void *** 45,51 **** free_list (listp, unused_listp) rtx *listp, *unused_listp; { ! register rtx link, prev_link; prev_link = *listp; link = XEXP (prev_link, 1); --- 45,51 ---- free_list (listp, unused_listp) rtx *listp, *unused_listp; { ! rtx link, prev_link; prev_link = *listp; link = XEXP (prev_link, 1); *************** zap_lists (dummy) *** 118,125 **** unused_insn_list = NULL; } - /* Register a ggc root which clears the unused lists at GC time. */ - void init_EXPR_INSN_LIST_cache () { --- 118,123 ---- diff -Nrc3pad gcc-3.0.4/gcc/local-alloc.c gcc-3.1/gcc/local-alloc.c *** gcc-3.0.4/gcc/local-alloc.c Fri Feb 2 01:03:47 2001 --- gcc-3.1/gcc/local-alloc.c Wed Apr 3 02:09:12 2002 *************** *** 1,23 **** /* Allocate registers within a basic block, for GNU compiler. Copyright (C) 1987, 1988, 1991, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* Allocation of hard register numbers to pseudo registers is done in two passes. In this pass we consider only regs that are born and --- 1,23 ---- /* Allocate registers within a basic block, for GNU compiler. Copyright (C) 1987, 1988, 1991, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* Allocation of hard register numbers to pseudo registers is done in two passes. In this pass we consider only regs that are born and *************** Boston, MA 02111-1307, USA. */ *** 73,90 **** #include "recog.h" #include "output.h" #include "toplev.h" /* Next quantity number available for allocation. */ static int next_qty; ! /* Information we maitain about each quantity. */ struct qty { /* The number of refs to quantity Q. */ int n_refs; /* Insn number (counting from head of basic block) where quantity Q was born. -1 if birth has not been recorded. */ --- 73,96 ---- #include "recog.h" #include "output.h" #include "toplev.h" + #include "except.h" + #include "integrate.h" /* Next quantity number available for allocation. */ static int next_qty; ! /* Information we maintain about each quantity. */ struct qty { /* The number of refs to quantity Q. */ int n_refs; + /* The frequency of uses of quantity Q. */ + + int freq; + /* Insn number (counting from head of basic block) where quantity Q was born. -1 if birth has not been recorded. */ *************** alloc_qty (regno, mode, size, birth) *** 307,313 **** enum machine_mode mode; int size, birth; { ! register int qtyno = next_qty++; reg_qty[regno] = qtyno; reg_offset[regno] = 0; --- 313,319 ---- enum machine_mode mode; int size, birth; { ! int qtyno = next_qty++; reg_qty[regno] = qtyno; reg_offset[regno] = 0; *************** alloc_qty (regno, mode, size, birth) *** 321,326 **** --- 327,333 ---- qty[qtyno].min_class = reg_preferred_class (regno); qty[qtyno].alternate_class = reg_alternate_class (regno); qty[qtyno].n_refs = REG_N_REFS (regno); + qty[qtyno].freq = REG_FREQ (regno); qty[qtyno].changes_mode = REG_CHANGES_MODE (regno); } *************** alloc_qty (regno, mode, size, birth) *** 329,335 **** int local_alloc () { ! register int b, i; int max_qty; /* We need to keep track of whether or not we recorded a LABEL_REF so --- 336,342 ---- int local_alloc () { ! int b, i; int max_qty; /* We need to keep track of whether or not we recorded a LABEL_REF so *************** local_alloc () *** 366,374 **** reg_offset = (char *) xmalloc (max_regno * sizeof (char)); reg_next_in_qty = (int *) xmalloc (max_regno * sizeof (int)); - /* Allocate the reg_renumber array. */ - allocate_reg_info (max_regno, FALSE, TRUE); - /* Determine which pseudo-registers can be allocated by local-alloc. In general, these are the registers used only in a single block and which only die once. --- 373,378 ---- *************** validate_equiv_mem (start, reg, memref) *** 493,499 **** return 1; if (GET_CODE (insn) == CALL_INSN && ! RTX_UNCHANGING_P (memref) ! && ! CONST_CALL_P (insn)) return 0; note_stores (PATTERN (insn), validate_equiv_mem_from_store, NULL); --- 497,503 ---- return 1; if (GET_CODE (insn) == CALL_INSN && ! RTX_UNCHANGING_P (memref) ! && ! CONST_OR_PURE_CALL_P (insn)) return 0; note_stores (PATTERN (insn), validate_equiv_mem_from_store, NULL); *************** static int *** 520,528 **** equiv_init_varies_p (x) rtx x; { ! register RTX_CODE code = GET_CODE (x); ! register int i; ! register const char *fmt; switch (code) { --- 524,532 ---- equiv_init_varies_p (x) rtx x; { ! RTX_CODE code = GET_CODE (x); ! int i; ! const char *fmt; switch (code) { *************** equiv_init_varies_p (x) *** 535,540 **** --- 539,545 ---- case CONST: case CONST_INT: case CONST_DOUBLE: + case CONST_VECTOR: case SYMBOL_REF: case LABEL_REF: return 0; *************** contains_replace_regs (x) *** 654,663 **** case LABEL_REF: case SYMBOL_REF: case CONST_DOUBLE: case PC: case CC0: case HIGH: - case LO_SUM: return 0; case REG: --- 659,668 ---- case LABEL_REF: case SYMBOL_REF: case CONST_DOUBLE: + case CONST_VECTOR: case PC: case CC0: case HIGH: return 0; case REG: *************** memref_referenced_p (memref, x) *** 704,709 **** --- 709,715 ---- case LABEL_REF: case SYMBOL_REF: case CONST_DOUBLE: + case CONST_VECTOR: case PC: case CC0: case HIGH: *************** memref_used_between_p (memref, start, en *** 775,780 **** --- 781,792 ---- } /* Return nonzero if the rtx X is invariant over the current function. */ + /* ??? Actually, the places this is used in reload expect exactly what + is tested here, and not everything that is function invariant. In + particular, the frame pointer and arg pointer are special cased; + pic_offset_table_rtx is not, and this will cause aborts when we + go to spill these things to memory. */ + int function_invariant_p (x) rtx x; *************** update_equiv_regs () *** 815,1038 **** /* Scan the insns and find which registers have equivalences. Do this in a separate scan of the insns because (due to -fcse-follow-jumps) a register can be set below its use. */ ! loop_depth = 0; ! for (insn = get_insns (); insn; insn = NEXT_INSN (insn)) { ! rtx note; ! rtx set; ! rtx dest, src; ! int regno; ! if (GET_CODE (insn) == NOTE) { ! if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG) ! ++loop_depth; ! else if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END) ! { ! if (! loop_depth) ! abort (); ! --loop_depth; ! } ! } ! ! if (! INSN_P (insn)) ! continue; ! for (note = REG_NOTES (insn); note; note = XEXP (note, 1)) ! if (REG_NOTE_KIND (note) == REG_INC) ! no_equiv (XEXP (note, 0), note, NULL); ! set = single_set (insn); ! /* If this insn contains more (or less) than a single SET, ! only mark all destinations as having no known equivalence. */ ! if (set == 0) ! { ! note_stores (PATTERN (insn), no_equiv, NULL); ! continue; ! } ! else if (GET_CODE (PATTERN (insn)) == PARALLEL) ! { ! int i; ! for (i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--) { ! rtx part = XVECEXP (PATTERN (insn), 0, i); ! if (part != set) ! note_stores (part, no_equiv, NULL); } ! } ! ! dest = SET_DEST (set); ! src = SET_SRC (set); ! ! /* If this sets a MEM to the contents of a REG that is only used ! in a single basic block, see if the register is always equivalent ! to that memory location and if moving the store from INSN to the ! insn that set REG is safe. If so, put a REG_EQUIV note on the ! initializing insn. ! Don't add a REG_EQUIV note if the insn already has one. The existing ! REG_EQUIV is likely more useful than the one we are adding. ! If one of the regs in the address has reg_equiv[REGNO].replace set, ! then we can't add this REG_EQUIV note. The reg_equiv[REGNO].replace ! optimization may move the set of this register immediately before ! insn, which puts it after reg_equiv[REGNO].init_insns, and hence ! the mention in the REG_EQUIV note would be to an uninitialized ! pseudo. */ ! /* ????? This test isn't good enough; we might see a MEM with a use of ! a pseudo register before we see its setting insn that will cause ! reg_equiv[].replace for that pseudo to be set. ! Equivalences to MEMs should be made in another pass, after the ! reg_equiv[].replace information has been gathered. */ ! if (GET_CODE (dest) == MEM && GET_CODE (src) == REG ! && (regno = REGNO (src)) >= FIRST_PSEUDO_REGISTER ! && REG_BASIC_BLOCK (regno) >= 0 ! && REG_N_SETS (regno) == 1 ! && reg_equiv[regno].init_insns != 0 ! && reg_equiv[regno].init_insns != const0_rtx ! && ! find_reg_note (XEXP (reg_equiv[regno].init_insns, 0), ! REG_EQUIV, NULL_RTX) ! && ! contains_replace_regs (XEXP (dest, 0))) ! { ! rtx init_insn = XEXP (reg_equiv[regno].init_insns, 0); ! if (validate_equiv_mem (init_insn, src, dest) ! && ! memref_used_between_p (dest, init_insn, insn)) ! REG_NOTES (init_insn) ! = gen_rtx_EXPR_LIST (REG_EQUIV, dest, REG_NOTES (init_insn)); ! } ! /* We only handle the case of a pseudo register being set ! once, or always to the same value. */ ! /* ??? The mn10200 port breaks if we add equivalences for ! values that need an ADDRESS_REGS register and set them equivalent ! to a MEM of a pseudo. The actual problem is in the over-conservative ! handling of INPADDR_ADDRESS / INPUT_ADDRESS / INPUT triples in ! calculate_needs, but we traditionally work around this problem ! here by rejecting equivalences when the destination is in a register ! that's likely spilled. This is fragile, of course, since the ! preferred class of a pseudo depends on all instructions that set ! or use it. */ ! if (GET_CODE (dest) != REG ! || (regno = REGNO (dest)) < FIRST_PSEUDO_REGISTER ! || reg_equiv[regno].init_insns == const0_rtx ! || (CLASS_LIKELY_SPILLED_P (reg_preferred_class (regno)) ! && GET_CODE (src) == MEM)) ! { ! /* This might be seting a SUBREG of a pseudo, a pseudo that is ! also set somewhere else to a constant. */ ! note_stores (set, no_equiv, NULL); ! continue; ! } ! note = find_reg_note (insn, REG_EQUAL, NULL_RTX); ! /* cse sometimes generates function invariants, but doesn't put a ! REG_EQUAL note on the insn. Since this note would be redundant, ! there's no point creating it earlier than here. */ ! if (! note && ! rtx_varies_p (src, 0)) ! REG_NOTES (insn) ! = note = gen_rtx_EXPR_LIST (REG_EQUAL, src, REG_NOTES (insn)); ! /* Don't bother considering a REG_EQUAL note containing an EXPR_LIST ! since it represents a function call */ ! if (note && GET_CODE (XEXP (note, 0)) == EXPR_LIST) ! note = NULL_RTX; ! if (REG_N_SETS (regno) != 1 ! && (! note ! || rtx_varies_p (XEXP (note, 0), 0) ! || (reg_equiv[regno].replacement ! && ! rtx_equal_p (XEXP (note, 0), ! reg_equiv[regno].replacement)))) ! { ! no_equiv (dest, set, NULL); ! continue; ! } ! /* Record this insn as initializing this register. */ ! reg_equiv[regno].init_insns ! = gen_rtx_INSN_LIST (VOIDmode, insn, reg_equiv[regno].init_insns); ! /* If this register is known to be equal to a constant, record that ! it is always equivalent to the constant. */ ! if (note && ! rtx_varies_p (XEXP (note, 0), 0)) ! PUT_MODE (note, (enum machine_mode) REG_EQUIV); ! /* If this insn introduces a "constant" register, decrease the priority ! of that register. Record this insn if the register is only used once ! more and the equivalence value is the same as our source. ! The latter condition is checked for two reasons: First, it is an ! indication that it may be more efficient to actually emit the insn ! as written (if no registers are available, reload will substitute ! the equivalence). Secondly, it avoids problems with any registers ! dying in this insn whose death notes would be missed. ! If we don't have a REG_EQUIV note, see if this insn is loading ! a register used only in one basic block from a MEM. If so, and the ! MEM remains unchanged for the life of the register, add a REG_EQUIV ! note. */ ! note = find_reg_note (insn, REG_EQUIV, NULL_RTX); ! if (note == 0 && REG_BASIC_BLOCK (regno) >= 0 ! && GET_CODE (SET_SRC (set)) == MEM ! && validate_equiv_mem (insn, dest, SET_SRC (set))) ! REG_NOTES (insn) = note = gen_rtx_EXPR_LIST (REG_EQUIV, SET_SRC (set), ! REG_NOTES (insn)); ! if (note) ! { ! int regno = REGNO (dest); ! /* Record whether or not we created a REG_EQUIV note for a LABEL_REF. ! We might end up substituting the LABEL_REF for uses of the ! pseudo here or later. That kind of transformation may turn an ! indirect jump into a direct jump, in which case we must rerun the ! jump optimizer to ensure that the JUMP_LABEL fields are valid. */ ! if (GET_CODE (XEXP (note, 0)) == LABEL_REF ! || (GET_CODE (XEXP (note, 0)) == CONST ! && GET_CODE (XEXP (XEXP (note, 0), 0)) == PLUS ! && (GET_CODE (XEXP (XEXP (XEXP (note, 0), 0), 0)) ! == LABEL_REF))) ! recorded_label_ref = 1; ! reg_equiv[regno].replacement = XEXP (note, 0); ! reg_equiv[regno].src = src; ! reg_equiv[regno].loop_depth = loop_depth; ! /* Don't mess with things live during setjmp. */ ! if (REG_LIVE_LENGTH (regno) >= 0) { ! /* Note that the statement below does not affect the priority ! in local-alloc! */ ! REG_LIVE_LENGTH (regno) *= 2; ! /* If the register is referenced exactly twice, meaning it is ! set once and used once, indicate that the reference may be ! replaced by the equivalence we computed above. Do this ! even if the register is only used in one block so that ! dependencies can be handled where the last register is ! used in a different block (i.e. HIGH / LO_SUM sequences) ! and to reduce the number of registers alive across calls. ! It would be nice to use "loop_depth * 2" in the compare ! below. Unfortunately, LOOP_DEPTH need not be constant within ! a basic block so this would be too complicated. - This case normally occurs when a parameter is read from - memory and then used exactly once, not in a loop. */ ! if (REG_N_REFS (regno) == 2 ! && (rtx_equal_p (XEXP (note, 0), src) ! || ! equiv_init_varies_p (src)) ! && GET_CODE (insn) == INSN ! && equiv_init_movable_p (PATTERN (insn), regno)) ! reg_equiv[regno].replace = 1; } } } --- 827,1036 ---- /* Scan the insns and find which registers have equivalences. Do this in a separate scan of the insns because (due to -fcse-follow-jumps) a register can be set below its use. */ ! for (block = 0; block < n_basic_blocks; block++) { ! basic_block bb = BASIC_BLOCK (block); ! loop_depth = bb->loop_depth; ! for (insn = bb->head; insn != NEXT_INSN (bb->end); insn = NEXT_INSN (insn)) { ! rtx note; ! rtx set; ! rtx dest, src; ! int regno; ! if (! INSN_P (insn)) ! continue; ! for (note = REG_NOTES (insn); note; note = XEXP (note, 1)) ! if (REG_NOTE_KIND (note) == REG_INC) ! no_equiv (XEXP (note, 0), note, NULL); ! set = single_set (insn); ! /* If this insn contains more (or less) than a single SET, ! only mark all destinations as having no known equivalence. */ ! if (set == 0) { ! note_stores (PATTERN (insn), no_equiv, NULL); ! continue; } ! else if (GET_CODE (PATTERN (insn)) == PARALLEL) ! { ! int i; ! for (i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--) ! { ! rtx part = XVECEXP (PATTERN (insn), 0, i); ! if (part != set) ! note_stores (part, no_equiv, NULL); ! } ! } ! dest = SET_DEST (set); ! src = SET_SRC (set); ! /* If this sets a MEM to the contents of a REG that is only used ! in a single basic block, see if the register is always equivalent ! to that memory location and if moving the store from INSN to the ! insn that set REG is safe. If so, put a REG_EQUIV note on the ! initializing insn. ! Don't add a REG_EQUIV note if the insn already has one. The existing ! REG_EQUIV is likely more useful than the one we are adding. ! If one of the regs in the address has reg_equiv[REGNO].replace set, ! then we can't add this REG_EQUIV note. The reg_equiv[REGNO].replace ! optimization may move the set of this register immediately before ! insn, which puts it after reg_equiv[REGNO].init_insns, and hence ! the mention in the REG_EQUIV note would be to an uninitialized ! pseudo. */ ! /* ????? This test isn't good enough; we might see a MEM with a use of ! a pseudo register before we see its setting insn that will cause ! reg_equiv[].replace for that pseudo to be set. ! Equivalences to MEMs should be made in another pass, after the ! reg_equiv[].replace information has been gathered. */ ! if (GET_CODE (dest) == MEM && GET_CODE (src) == REG ! && (regno = REGNO (src)) >= FIRST_PSEUDO_REGISTER ! && REG_BASIC_BLOCK (regno) >= 0 ! && REG_N_SETS (regno) == 1 ! && reg_equiv[regno].init_insns != 0 ! && reg_equiv[regno].init_insns != const0_rtx ! && ! find_reg_note (XEXP (reg_equiv[regno].init_insns, 0), ! REG_EQUIV, NULL_RTX) ! && ! contains_replace_regs (XEXP (dest, 0))) ! { ! rtx init_insn = XEXP (reg_equiv[regno].init_insns, 0); ! if (validate_equiv_mem (init_insn, src, dest) ! && ! memref_used_between_p (dest, init_insn, insn)) ! REG_NOTES (init_insn) ! = gen_rtx_EXPR_LIST (REG_EQUIV, dest, REG_NOTES (init_insn)); ! } ! /* We only handle the case of a pseudo register being set ! once, or always to the same value. */ ! /* ??? The mn10200 port breaks if we add equivalences for ! values that need an ADDRESS_REGS register and set them equivalent ! to a MEM of a pseudo. The actual problem is in the over-conservative ! handling of INPADDR_ADDRESS / INPUT_ADDRESS / INPUT triples in ! calculate_needs, but we traditionally work around this problem ! here by rejecting equivalences when the destination is in a register ! that's likely spilled. This is fragile, of course, since the ! preferred class of a pseudo depends on all instructions that set ! or use it. */ ! if (GET_CODE (dest) != REG ! || (regno = REGNO (dest)) < FIRST_PSEUDO_REGISTER ! || reg_equiv[regno].init_insns == const0_rtx ! || (CLASS_LIKELY_SPILLED_P (reg_preferred_class (regno)) ! && GET_CODE (src) == MEM)) ! { ! /* This might be seting a SUBREG of a pseudo, a pseudo that is ! also set somewhere else to a constant. */ ! note_stores (set, no_equiv, NULL); ! continue; ! } ! note = find_reg_note (insn, REG_EQUAL, NULL_RTX); ! /* cse sometimes generates function invariants, but doesn't put a ! REG_EQUAL note on the insn. Since this note would be redundant, ! there's no point creating it earlier than here. */ ! if (! note && ! rtx_varies_p (src, 0)) ! note = set_unique_reg_note (insn, REG_EQUAL, src); ! /* Don't bother considering a REG_EQUAL note containing an EXPR_LIST ! since it represents a function call */ ! if (note && GET_CODE (XEXP (note, 0)) == EXPR_LIST) ! note = NULL_RTX; ! if (REG_N_SETS (regno) != 1 ! && (! note ! || rtx_varies_p (XEXP (note, 0), 0) ! || (reg_equiv[regno].replacement ! && ! rtx_equal_p (XEXP (note, 0), ! reg_equiv[regno].replacement)))) ! { ! no_equiv (dest, set, NULL); ! continue; ! } ! /* Record this insn as initializing this register. */ ! reg_equiv[regno].init_insns ! = gen_rtx_INSN_LIST (VOIDmode, insn, reg_equiv[regno].init_insns); ! /* If this register is known to be equal to a constant, record that ! it is always equivalent to the constant. */ ! if (note && ! rtx_varies_p (XEXP (note, 0), 0)) ! PUT_MODE (note, (enum machine_mode) REG_EQUIV); ! /* If this insn introduces a "constant" register, decrease the priority ! of that register. Record this insn if the register is only used once ! more and the equivalence value is the same as our source. ! The latter condition is checked for two reasons: First, it is an ! indication that it may be more efficient to actually emit the insn ! as written (if no registers are available, reload will substitute ! the equivalence). Secondly, it avoids problems with any registers ! dying in this insn whose death notes would be missed. ! If we don't have a REG_EQUIV note, see if this insn is loading ! a register used only in one basic block from a MEM. If so, and the ! MEM remains unchanged for the life of the register, add a REG_EQUIV ! note. */ ! note = find_reg_note (insn, REG_EQUIV, NULL_RTX); ! if (note == 0 && REG_BASIC_BLOCK (regno) >= 0 ! && GET_CODE (SET_SRC (set)) == MEM ! && validate_equiv_mem (insn, dest, SET_SRC (set))) ! REG_NOTES (insn) = note = gen_rtx_EXPR_LIST (REG_EQUIV, SET_SRC (set), ! REG_NOTES (insn)); ! if (note) { ! int regno = REGNO (dest); + /* Record whether or not we created a REG_EQUIV note for a LABEL_REF. + We might end up substituting the LABEL_REF for uses of the + pseudo here or later. That kind of transformation may turn an + indirect jump into a direct jump, in which case we must rerun the + jump optimizer to ensure that the JUMP_LABEL fields are valid. */ + if (GET_CODE (XEXP (note, 0)) == LABEL_REF + || (GET_CODE (XEXP (note, 0)) == CONST + && GET_CODE (XEXP (XEXP (note, 0), 0)) == PLUS + && (GET_CODE (XEXP (XEXP (XEXP (note, 0), 0), 0)) + == LABEL_REF))) + recorded_label_ref = 1; ! reg_equiv[regno].replacement = XEXP (note, 0); ! reg_equiv[regno].src = src; ! reg_equiv[regno].loop_depth = loop_depth; ! /* Don't mess with things live during setjmp. */ ! if (REG_LIVE_LENGTH (regno) >= 0 && optimize) ! { ! /* Note that the statement below does not affect the priority ! in local-alloc! */ ! REG_LIVE_LENGTH (regno) *= 2; ! /* If the register is referenced exactly twice, meaning it is ! set once and used once, indicate that the reference may be ! replaced by the equivalence we computed above. Do this ! even if the register is only used in one block so that ! dependencies can be handled where the last register is ! used in a different block (i.e. HIGH / LO_SUM sequences) ! and to reduce the number of registers alive across ! calls. */ ! ! if (REG_N_REFS (regno) == 2 ! && (rtx_equal_p (XEXP (note, 0), src) ! || ! equiv_init_varies_p (src)) ! && GET_CODE (insn) == INSN ! && equiv_init_movable_p (PATTERN (insn), regno)) ! reg_equiv[regno].replace = 1; ! } } } } *************** update_equiv_regs () *** 1044,1170 **** can't replace the reference, and the initialzing reference is within the same loop (or in an inner loop), then move the register initialization just before the use, so that they are in the same ! basic block. ! ! Skip this optimization if loop_depth isn't initially zero since ! that indicates a mismatch between loop begin and loop end notes ! (i.e. gcc.dg/noncompile/920721-2.c). */ ! block = n_basic_blocks - 1; ! for (insn = (loop_depth == 0) ? get_last_insn () : NULL_RTX; ! insn; insn = PREV_INSN (insn)) { ! rtx link; ! if (! INSN_P (insn)) { ! if (GET_CODE (insn) == NOTE) ! { ! if (NOTE_INSN_BASIC_BLOCK_P (insn)) ! block = NOTE_BASIC_BLOCK (insn)->index - 1; ! else if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG) ! { ! if (! loop_depth) ! abort (); ! --loop_depth; ! } ! else if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END) ! ++loop_depth; ! } ! continue; ! } ! for (link = REG_NOTES (insn); link; link = XEXP (link, 1)) ! { ! if (REG_NOTE_KIND (link) == REG_DEAD ! /* Make sure this insn still refers to the register. */ ! && reg_mentioned_p (XEXP (link, 0), PATTERN (insn))) { ! int regno = REGNO (XEXP (link, 0)); ! rtx equiv_insn; ! ! if (! reg_equiv[regno].replace ! || reg_equiv[regno].loop_depth < loop_depth) ! continue; ! /* reg_equiv[REGNO].replace gets set only when ! REG_N_REFS[REGNO] is 2, i.e. the register is set ! once and used once. (If it were only set, but not used, ! flow would have deleted the setting insns.) Hence ! there can only be one insn in reg_equiv[REGNO].init_insns. */ ! if (reg_equiv[regno].init_insns == NULL_RTX ! || XEXP (reg_equiv[regno].init_insns, 1) != NULL_RTX) ! abort (); ! equiv_insn = XEXP (reg_equiv[regno].init_insns, 0); ! if (asm_noperands (PATTERN (equiv_insn)) < 0 ! && validate_replace_rtx (regno_reg_rtx[regno], ! reg_equiv[regno].src, insn)) ! { ! rtx equiv_link; ! rtx last_link; ! rtx note; ! /* Find the last note. */ ! for (last_link = link; XEXP (last_link, 1); ! last_link = XEXP (last_link, 1)) ! ; ! /* Append the REG_DEAD notes from equiv_insn. */ ! equiv_link = REG_NOTES (equiv_insn); ! while (equiv_link) { ! note = equiv_link; ! equiv_link = XEXP (equiv_link, 1); ! if (REG_NOTE_KIND (note) == REG_DEAD) { ! remove_note (equiv_insn, note); ! XEXP (last_link, 1) = note; ! XEXP (note, 1) = NULL_RTX; ! last_link = note; } - } ! remove_death (regno, insn); ! REG_N_REFS (regno) = 0; ! PUT_CODE (equiv_insn, NOTE); ! NOTE_LINE_NUMBER (equiv_insn) = NOTE_INSN_DELETED; ! NOTE_SOURCE_FILE (equiv_insn) = 0; ! ! reg_equiv[regno].init_insns ! = XEXP (reg_equiv[regno].init_insns, 1); ! } ! /* Move the initialization of the register to just before ! INSN. Update the flow information. */ ! else if (PREV_INSN (insn) != equiv_insn) ! { ! rtx new_insn; ! new_insn = emit_insn_before (PATTERN (equiv_insn), insn); ! REG_NOTES (new_insn) = REG_NOTES (equiv_insn); ! REG_NOTES (equiv_insn) = 0; ! /* Make sure this insn is recognized before reload begins, ! otherwise eliminate_regs_in_insn will abort. */ ! INSN_CODE (new_insn) = INSN_CODE (equiv_insn); ! PUT_CODE (equiv_insn, NOTE); ! NOTE_LINE_NUMBER (equiv_insn) = NOTE_INSN_DELETED; ! NOTE_SOURCE_FILE (equiv_insn) = 0; ! XEXP (reg_equiv[regno].init_insns, 0) = new_insn; ! REG_BASIC_BLOCK (regno) = block >= 0 ? block : 0; ! REG_N_CALLS_CROSSED (regno) = 0; ! REG_LIVE_LENGTH (regno) = 2; ! if (block >= 0 && insn == BLOCK_HEAD (block)) ! BLOCK_HEAD (block) = PREV_INSN (insn); ! /* Remember to clear REGNO from all basic block's live ! info. */ ! SET_REGNO_REG_SET (&cleared_regs, regno); ! clear_regnos++; } } } --- 1042,1155 ---- can't replace the reference, and the initialzing reference is within the same loop (or in an inner loop), then move the register initialization just before the use, so that they are in the same ! basic block. */ ! for (block = n_basic_blocks - 1; block >= 0; block--) { ! basic_block bb = BASIC_BLOCK (block); ! loop_depth = bb->loop_depth; ! for (insn = bb->end; insn != PREV_INSN (bb->head); insn = PREV_INSN (insn)) { ! rtx link; ! if (! INSN_P (insn)) ! continue; ! for (link = REG_NOTES (insn); link; link = XEXP (link, 1)) { ! if (REG_NOTE_KIND (link) == REG_DEAD ! /* Make sure this insn still refers to the register. */ ! && reg_mentioned_p (XEXP (link, 0), PATTERN (insn))) ! { ! int regno = REGNO (XEXP (link, 0)); ! rtx equiv_insn; ! if (! reg_equiv[regno].replace ! || reg_equiv[regno].loop_depth < loop_depth) ! continue; ! /* reg_equiv[REGNO].replace gets set only when ! REG_N_REFS[REGNO] is 2, i.e. the register is set ! once and used once. (If it were only set, but not used, ! flow would have deleted the setting insns.) Hence ! there can only be one insn in reg_equiv[REGNO].init_insns. */ ! if (reg_equiv[regno].init_insns == NULL_RTX ! || XEXP (reg_equiv[regno].init_insns, 1) != NULL_RTX) ! abort (); ! equiv_insn = XEXP (reg_equiv[regno].init_insns, 0); ! /* We may not move instructions that can throw, since ! that changes basic block boundaries and we are not ! prepared to adjust the CFG to match. */ ! if (can_throw_internal (equiv_insn)) ! continue; ! if (asm_noperands (PATTERN (equiv_insn)) < 0 ! && validate_replace_rtx (regno_reg_rtx[regno], ! reg_equiv[regno].src, insn)) { ! rtx equiv_link; ! rtx last_link; ! rtx note; ! ! /* Find the last note. */ ! for (last_link = link; XEXP (last_link, 1); ! last_link = XEXP (last_link, 1)) ! ; ! ! /* Append the REG_DEAD notes from equiv_insn. */ ! equiv_link = REG_NOTES (equiv_insn); ! while (equiv_link) { ! note = equiv_link; ! equiv_link = XEXP (equiv_link, 1); ! if (REG_NOTE_KIND (note) == REG_DEAD) ! { ! remove_note (equiv_insn, note); ! XEXP (last_link, 1) = note; ! XEXP (note, 1) = NULL_RTX; ! last_link = note; ! } } ! remove_death (regno, insn); ! REG_N_REFS (regno) = 0; ! REG_FREQ (regno) = 0; ! delete_insn (equiv_insn); ! ! reg_equiv[regno].init_insns ! = XEXP (reg_equiv[regno].init_insns, 1); ! } ! /* Move the initialization of the register to just before ! INSN. Update the flow information. */ ! else if (PREV_INSN (insn) != equiv_insn) ! { ! rtx new_insn; ! new_insn = emit_insn_before (PATTERN (equiv_insn), insn); ! REG_NOTES (new_insn) = REG_NOTES (equiv_insn); ! REG_NOTES (equiv_insn) = 0; ! /* Make sure this insn is recognized before reload begins, ! otherwise eliminate_regs_in_insn will abort. */ ! INSN_CODE (new_insn) = INSN_CODE (equiv_insn); ! delete_insn (equiv_insn); ! XEXP (reg_equiv[regno].init_insns, 0) = new_insn; ! REG_BASIC_BLOCK (regno) = block >= 0 ? block : 0; ! REG_N_CALLS_CROSSED (regno) = 0; ! REG_LIVE_LENGTH (regno) = 2; ! if (block >= 0 && insn == BLOCK_HEAD (block)) ! BLOCK_HEAD (block) = PREV_INSN (insn); ! /* Remember to clear REGNO from all basic block's live ! info. */ ! SET_REGNO_REG_SET (&cleared_regs, regno); ! clear_regnos++; ! } } } } *************** static void *** 1238,1246 **** block_alloc (b) int b; { ! register int i, q; ! register rtx insn; ! rtx note; int insn_number = 0; int insn_count = 0; int max_uid = get_max_uid (); --- 1223,1231 ---- block_alloc (b) int b; { ! int i, q; ! rtx insn; ! rtx note, hard_reg; int insn_number = 0; int insn_count = 0; int max_uid = get_max_uid (); *************** block_alloc (b) *** 1281,1289 **** if (INSN_P (insn)) { ! register rtx link, set; ! register int win = 0; ! register rtx r0, r1 = NULL_RTX; int combined_regno = -1; int i; --- 1266,1274 ---- if (INSN_P (insn)) { ! rtx link, set; ! int win = 0; ! rtx r0, r1 = NULL_RTX; int combined_regno = -1; int i; *************** block_alloc (b) *** 1325,1331 **** for (i = 1; i < recog_data.n_operands; i++) { const char *p = recog_data.constraints[i]; ! int this_match = (requires_inout (p)); n_matching_alts += this_match; if (this_match == recog_data.n_alternatives) --- 1310,1316 ---- for (i = 1; i < recog_data.n_operands; i++) { const char *p = recog_data.constraints[i]; ! int this_match = requires_inout (p); n_matching_alts += this_match; if (this_match == recog_data.n_alternatives) *************** block_alloc (b) *** 1364,1369 **** --- 1349,1366 ---- while (GET_CODE (r1) == PLUS || GET_CODE (r1) == MULT) r1 = XEXP (r1, 0); + /* Avoid making a call-saved register unnecessarily + clobbered. */ + hard_reg = get_hard_reg_initial_reg (cfun, r1); + if (hard_reg != NULL_RTX) + { + if (GET_CODE (hard_reg) == REG + && IN_RANGE (REGNO (hard_reg), + 0, FIRST_PSEUDO_REGISTER - 1) + && ! call_used_regs[REGNO (hard_reg)]) + continue; + } + if (GET_CODE (r0) == REG || GET_CODE (r0) == SUBREG) { /* We have two priorities for hard register preferences. *************** block_alloc (b) *** 1606,1612 **** discourage the register allocator from creating false dependencies. ! The adjustment value is choosen to indicate that this qty conflicts with all the qtys in the instructions immediately before and after the lifetime of this qty. --- 1603,1609 ---- discourage the register allocator from creating false dependencies. ! The adjustment value is chosen to indicate that this qty conflicts with all the qtys in the instructions immediately before and after the lifetime of this qty. *************** block_alloc (b) *** 1692,1704 **** /* Note that the quotient will never be bigger than the value of floor_log2 times the maximum number of ! times a register can occur in one insn (surely less than 100). ! Multiplying this by 10000 can't overflow. QTY_CMP_PRI is also used by qty_sugg_compare. */ #define QTY_CMP_PRI(q) \ ! ((int) (((double) (floor_log2 (qty[q].n_refs) * qty[q].n_refs * qty[q].size) \ ! / (qty[q].death - qty[q].birth)) * 10000)) static int qty_compare (q1, q2) --- 1689,1702 ---- /* Note that the quotient will never be bigger than the value of floor_log2 times the maximum number of ! times a register can occur in one insn (surely less than 100) ! weighted by frequency (max REG_FREQ_MAX). ! Multiplying this by 10000/REG_FREQ_MAX can't overflow. QTY_CMP_PRI is also used by qty_sugg_compare. */ #define QTY_CMP_PRI(q) \ ! ((int) (((double) (floor_log2 (qty[q].n_refs) * qty[q].freq * qty[q].size) \ ! / (qty[q].death - qty[q].birth)) * (10000 / REG_FREQ_MAX))) static int qty_compare (q1, q2) *************** qty_compare_1 (q1p, q2p) *** 1712,1719 **** const PTR q1p; const PTR q2p; { ! register int q1 = *(const int *) q1p, q2 = *(const int *) q2p; ! register int tem = QTY_CMP_PRI (q2) - QTY_CMP_PRI (q1); if (tem != 0) return tem; --- 1710,1717 ---- const PTR q1p; const PTR q2p; { ! int q1 = *(const int *) q1p, q2 = *(const int *) q2p; ! int tem = QTY_CMP_PRI (q2) - QTY_CMP_PRI (q1); if (tem != 0) return tem; *************** static int *** 1739,1745 **** qty_sugg_compare (q1, q2) int q1, q2; { ! register int tem = QTY_CMP_SUGG (q1) - QTY_CMP_SUGG (q2); if (tem != 0) return tem; --- 1737,1743 ---- qty_sugg_compare (q1, q2) int q1, q2; { ! int tem = QTY_CMP_SUGG (q1) - QTY_CMP_SUGG (q2); if (tem != 0) return tem; *************** qty_sugg_compare_1 (q1p, q2p) *** 1752,1759 **** const PTR q1p; const PTR q2p; { ! register int q1 = *(const int *) q1p, q2 = *(const int *) q2p; ! register int tem = QTY_CMP_SUGG (q1) - QTY_CMP_SUGG (q2); if (tem != 0) return tem; --- 1750,1757 ---- const PTR q1p; const PTR q2p; { ! int q1 = *(const int *) q1p, q2 = *(const int *) q2p; ! int tem = QTY_CMP_SUGG (q1) - QTY_CMP_SUGG (q2); if (tem != 0) return tem; *************** combine_regs (usedreg, setreg, may_save_ *** 1800,1809 **** rtx insn; int already_dead; { ! register int ureg, sreg; ! register int offset = 0; int usize, ssize; ! register int sqty; /* Determine the numbers and sizes of registers being used. If a subreg is present that does not change the entire register, don't consider --- 1798,1807 ---- rtx insn; int already_dead; { ! int ureg, sreg; ! int offset = 0; int usize, ssize; ! int sqty; /* Determine the numbers and sizes of registers being used. If a subreg is present that does not change the entire register, don't consider *************** combine_regs (usedreg, setreg, may_save_ *** 1811,1837 **** while (GET_CODE (usedreg) == SUBREG) { ! if (GET_MODE_SIZE (GET_MODE (SUBREG_REG (usedreg))) > UNITS_PER_WORD) ! may_save_copy = 0; ! offset += SUBREG_WORD (usedreg); ! usedreg = SUBREG_REG (usedreg); } if (GET_CODE (usedreg) != REG) return 0; ureg = REGNO (usedreg); ! usize = REG_SIZE (usedreg); while (GET_CODE (setreg) == SUBREG) { ! if (GET_MODE_SIZE (GET_MODE (SUBREG_REG (setreg))) > UNITS_PER_WORD) ! may_save_copy = 0; ! offset -= SUBREG_WORD (setreg); ! setreg = SUBREG_REG (setreg); } if (GET_CODE (setreg) != REG) return 0; sreg = REGNO (setreg); ! ssize = REG_SIZE (setreg); /* If UREG is a pseudo-register that hasn't already been assigned a quantity number, it means that it is not local to this block or dies --- 1809,1877 ---- while (GET_CODE (usedreg) == SUBREG) { ! rtx subreg = SUBREG_REG (usedreg); ! ! if (GET_CODE (subreg) == REG) ! { ! if (GET_MODE_SIZE (GET_MODE (subreg)) > UNITS_PER_WORD) ! may_save_copy = 0; ! ! if (REGNO (subreg) < FIRST_PSEUDO_REGISTER) ! offset += subreg_regno_offset (REGNO (subreg), ! GET_MODE (subreg), ! SUBREG_BYTE (usedreg), ! GET_MODE (usedreg)); ! else ! offset += (SUBREG_BYTE (usedreg) ! / REGMODE_NATURAL_SIZE (GET_MODE (usedreg))); ! } ! ! usedreg = subreg; } + if (GET_CODE (usedreg) != REG) return 0; + ureg = REGNO (usedreg); ! if (ureg < FIRST_PSEUDO_REGISTER) ! usize = HARD_REGNO_NREGS (ureg, GET_MODE (usedreg)); ! else ! usize = ((GET_MODE_SIZE (GET_MODE (usedreg)) ! + (REGMODE_NATURAL_SIZE (GET_MODE (usedreg)) - 1)) ! / REGMODE_NATURAL_SIZE (GET_MODE (usedreg))); while (GET_CODE (setreg) == SUBREG) { ! rtx subreg = SUBREG_REG (setreg); ! ! if (GET_CODE (subreg) == REG) ! { ! if (GET_MODE_SIZE (GET_MODE (subreg)) > UNITS_PER_WORD) ! may_save_copy = 0; ! ! if (REGNO (subreg) < FIRST_PSEUDO_REGISTER) ! offset -= subreg_regno_offset (REGNO (subreg), ! GET_MODE (subreg), ! SUBREG_BYTE (setreg), ! GET_MODE (setreg)); ! else ! offset -= (SUBREG_BYTE (setreg) ! / REGMODE_NATURAL_SIZE (GET_MODE (setreg))); ! } ! ! setreg = subreg; } + if (GET_CODE (setreg) != REG) return 0; + sreg = REGNO (setreg); ! if (sreg < FIRST_PSEUDO_REGISTER) ! ssize = HARD_REGNO_NREGS (sreg, GET_MODE (setreg)); ! else ! ssize = ((GET_MODE_SIZE (GET_MODE (setreg)) ! + (REGMODE_NATURAL_SIZE (GET_MODE (setreg)) - 1)) ! / REGMODE_NATURAL_SIZE (GET_MODE (setreg))); /* If UREG is a pseudo-register that hasn't already been assigned a quantity number, it means that it is not local to this block or dies *************** combine_regs (usedreg, setreg, may_save_ *** 1942,1950 **** /* Update info about quantity SQTY. */ qty[sqty].n_calls_crossed += REG_N_CALLS_CROSSED (sreg); qty[sqty].n_refs += REG_N_REFS (sreg); if (usize < ssize) { ! register int i; for (i = qty[sqty].first_reg; i >= 0; i = reg_next_in_qty[i]) reg_offset[i] -= offset; --- 1982,1991 ---- /* Update info about quantity SQTY. */ qty[sqty].n_calls_crossed += REG_N_CALLS_CROSSED (sreg); qty[sqty].n_refs += REG_N_REFS (sreg); + qty[sqty].freq += REG_FREQ (sreg); if (usize < ssize) { ! int i; for (i = qty[sqty].first_reg; i >= 0; i = reg_next_in_qty[i]) reg_offset[i] -= offset; *************** reg_meets_class_p (reg, class) *** 1968,1974 **** int reg; enum reg_class class; { ! register enum reg_class rclass = reg_preferred_class (reg); return (reg_class_subset_p (rclass, class) || reg_class_subset_p (class, rclass)); } --- 2009,2015 ---- int reg; enum reg_class class; { ! enum reg_class rclass = reg_preferred_class (reg); return (reg_class_subset_p (rclass, class) || reg_class_subset_p (class, rclass)); } *************** reg_is_born (reg, birth) *** 2029,2038 **** rtx reg; int birth; { ! register int regno; if (GET_CODE (reg) == SUBREG) ! regno = REGNO (SUBREG_REG (reg)) + SUBREG_WORD (reg); else regno = REGNO (reg); --- 2070,2083 ---- rtx reg; int birth; { ! int regno; if (GET_CODE (reg) == SUBREG) ! { ! regno = REGNO (SUBREG_REG (reg)); ! if (regno < FIRST_PSEUDO_REGISTER) ! regno = subreg_hard_regno (reg, 1); ! } else regno = REGNO (reg); *************** reg_is_born (reg, birth) *** 2063,2072 **** static void wipe_dead_reg (reg, output_p) ! register rtx reg; int output_p; { ! register int regno = REGNO (reg); /* If this insn has multiple results, and the dead reg is used in one of the results, --- 2108,2117 ---- static void wipe_dead_reg (reg, output_p) ! rtx reg; int output_p; { ! int regno = REGNO (reg); /* If this insn has multiple results, and the dead reg is used in one of the results, *************** find_free_reg (class, mode, qtyno, accep *** 2138,2151 **** int just_try_suggested; int born_index, dead_index; { ! register int i, ins; #ifdef HARD_REG_SET /* Declare it register if it's a scalar. */ register #endif HARD_REG_SET used, first_used; #ifdef ELIMINABLE_REGS ! static struct {int from, to; } eliminables[] = ELIMINABLE_REGS; #endif /* Validate our parameters. */ --- 2183,2196 ---- int just_try_suggested; int born_index, dead_index; { ! int i, ins; #ifdef HARD_REG_SET /* Declare it register if it's a scalar. */ register #endif HARD_REG_SET used, first_used; #ifdef ELIMINABLE_REGS ! static const struct {const int from, to; } eliminables[] = ELIMINABLE_REGS; #endif /* Validate our parameters. */ *************** find_free_reg (class, mode, qtyno, accep *** 2231,2238 **** || accept_call_clobbered || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode))) { ! register int j; ! register int size1 = HARD_REGNO_NREGS (regno, mode); for (j = 1; j < size1 && ! TEST_HARD_REG_BIT (used, regno + j); j++); if (j == size1) { --- 2276,2283 ---- || accept_call_clobbered || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode))) { ! int j; ! int size1 = HARD_REGNO_NREGS (regno, mode); for (j = 1; j < size1 && ! TEST_HARD_REG_BIT (used, regno + j); j++); if (j == size1) { *************** find_free_reg (class, mode, qtyno, accep *** 2289,2299 **** static void mark_life (regno, mode, life) ! register int regno; enum machine_mode mode; int life; { ! register int j = HARD_REGNO_NREGS (regno, mode); if (life) while (--j >= 0) SET_HARD_REG_BIT (regs_live, regno + j); --- 2334,2344 ---- static void mark_life (regno, mode, life) ! int regno; enum machine_mode mode; int life; { ! int j = HARD_REGNO_NREGS (regno, mode); if (life) while (--j >= 0) SET_HARD_REG_BIT (regs_live, regno + j); *************** post_mark_life (regno, mode, life, birth *** 2312,2318 **** enum machine_mode mode; int life, birth, death; { ! register int j = HARD_REGNO_NREGS (regno, mode); #ifdef HARD_REG_SET /* Declare it register if it's a scalar. */ register --- 2357,2363 ---- enum machine_mode mode; int life, birth, death; { ! int j = HARD_REGNO_NREGS (regno, mode); #ifdef HARD_REG_SET /* Declare it register if it's a scalar. */ register *************** requires_inout (p) *** 2402,2409 **** case '=': case '+': case '?': case '#': case '&': case '!': case '*': case '%': - case '1': case '2': case '3': case '4': case '5': - case '6': case '7': case '8': case '9': case 'm': case '<': case '>': case 'V': case 'o': case 'E': case 'F': case 'G': case 'H': case 's': case 'i': case 'n': --- 2447,2452 ---- *************** requires_inout (p) *** 2424,2429 **** --- 2467,2479 ---- found_zero = 1; break; + case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + /* Skip the balance of the matching constraint. */ + while (ISDIGIT (*p)) + p++; + break; + default: if (REG_CLASS_FROM_LETTER (c) == NO_REGS) break; *************** void *** 2444,2450 **** dump_local_alloc (file) FILE *file; { ! register int i; for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++) if (reg_renumber[i] != -1) fprintf (file, ";; Register %d in %d.\n", i, reg_renumber[i]); --- 2494,2500 ---- dump_local_alloc (file) FILE *file; { ! int i; for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++) if (reg_renumber[i] != -1) fprintf (file, ";; Register %d in %d.\n", i, reg_renumber[i]); diff -Nrc3pad gcc-3.0.4/gcc/longlong.h gcc-3.1/gcc/longlong.h *** gcc-3.0.4/gcc/longlong.h Sat Mar 3 19:40:37 2001 --- gcc-3.1/gcc/longlong.h Sat Feb 9 03:08:05 2002 *************** extern const UQItype __clz_tab[]; *** 222,228 **** "rIJ" ((USItype) (bh)), \ "r" ((USItype) (al)), \ "rIJ" ((USItype) (bl))) ! /* Call libgcc1 routine. */ #define umul_ppmm(w1, w0, u, v) \ do { \ DWunion __w; \ --- 222,228 ---- "rIJ" ((USItype) (bh)), \ "r" ((USItype) (al)), \ "rIJ" ((USItype) (bl))) ! /* Call libgcc routine. */ #define umul_ppmm(w1, w0, u, v) \ do { \ DWunion __w; \ *************** UDItype __umulsidi3 (USItype, USItype); *** 585,591 **** "1" ((USItype) (al)), \ "g" ((USItype) (bl))) ! /* The '020, '030, '040 and CPU32 have 32x32->64 and 64/32->32q-32r. */ #if defined (__mc68020__) || defined(mc68020) \ || defined(__mc68030__) || defined(mc68030) \ || defined(__mc68040__) || defined(mc68040) \ --- 585,591 ---- "1" ((USItype) (al)), \ "g" ((USItype) (bl))) ! /* The '020, '030, '040 and CPU32 have 32x32->64 and 64/32->32q-32r. */ #if defined (__mc68020__) || defined(mc68020) \ || defined(__mc68030__) || defined(mc68030) \ || defined(__mc68040__) || defined(mc68040) \ *************** UDItype __umulsidi3 (USItype, USItype); *** 654,660 **** #endif /* not mcf5200 */ #endif /* not mc68020 */ ! /* The '020, '030, '040 and '060 have bitfield insns. */ #if defined (__mc68020__) || defined(mc68020) \ || defined(__mc68030__) || defined(mc68030) \ || defined(__mc68040__) || defined(mc68040) \ --- 654,660 ---- #endif /* not mcf5200 */ #endif /* not mc68020 */ ! /* The '020, '030, '040 and '060 have bitfield insns. */ #if defined (__mc68020__) || defined(mc68020) \ || defined(__mc68030__) || defined(mc68030) \ || defined(__mc68040__) || defined(mc68040) \ *************** UDItype __umulsidi3 (USItype, USItype); *** 1002,1007 **** --- 1002,1022 ---- #define UMUL_TIME 5 #endif + #if defined (__SH5__) && __SHMEDIA__ && W_TYPE_SIZE == 32 + #define __umulsidi3(u,v) ((UDItype)(USItype)u*(USItype)v) + #define count_leading_zeros(count, x) \ + do \ + { \ + UDItype x_ = (USItype)(x); \ + SItype c_; \ + \ + __asm__ ("nsb %1, %0" : "=r" (c_) : "r" (x_)); \ + (count) = c_ - 31; \ + } \ + while (0) + #define COUNT_LEADING_ZEROS_0 32 + #endif + #if defined (__sparc__) && !defined (__arch64__) && !defined (__sparcv9) \ && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ *************** UDItype __umulsidi3 (USItype, USItype); *** 1184,1190 **** : "r" ((USItype) (__d)), \ "1" ((USItype) (__n1)), \ "0" ((USItype) (__n0)) : "g1" __AND_CLOBBER_CC) ! #define UDIV_TIME (3+7*32) /* 7 instructions/iteration. 32 iterations. */ #endif /* __sparclite__ */ #endif /* __sparc_v8__ */ #endif /* sparc32 */ --- 1199,1205 ---- : "r" ((USItype) (__d)), \ "1" ((USItype) (__n1)), \ "0" ((USItype) (__n0)) : "g1" __AND_CLOBBER_CC) ! #define UDIV_TIME (3+7*32) /* 7 instructions/iteration. 32 iterations. */ #endif /* __sparclite__ */ #endif /* __sparc_v8__ */ #endif /* sparc32 */ *************** UDItype __umulsidi3 (USItype, USItype); *** 1377,1383 **** __x1 += __ll_highpart (__x0);/* this can't give carry */ \ __x1 += __x2; /* but this indeed can */ \ if (__x1 < __x2) /* did we get it? */ \ ! __x3 += __ll_B; /* yes, add it in the proper pos. */ \ \ (w1) = __x3 + __ll_highpart (__x1); \ (w0) = __ll_lowpart (__x1) * __ll_B + __ll_lowpart (__x0); \ --- 1392,1398 ---- __x1 += __ll_highpart (__x0);/* this can't give carry */ \ __x1 += __x2; /* but this indeed can */ \ if (__x1 < __x2) /* did we get it? */ \ ! __x3 += __ll_B; /* yes, add it in the proper pos. */ \ \ (w1) = __x3 + __ll_highpart (__x1); \ (w0) = __ll_lowpart (__x1) * __ll_B + __ll_lowpart (__x0); \ diff -Nrc3pad gcc-3.0.4/gcc/loop.c gcc-3.1/gcc/loop.c *** gcc-3.0.4/gcc/loop.c Mon Nov 5 19:10:33 2001 --- gcc-3.1/gcc/loop.c Wed Apr 10 06:52:19 2002 *************** *** 1,23 **** /* Perform various loop optimizations, including strength reduction. Copyright (C) 1987, 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, ! 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* This is the loop optimization pass of the compiler. It finds invariant computations within loops and moves them --- 1,23 ---- /* Perform various loop optimizations, including strength reduction. Copyright (C) 1987, 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, ! 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* This is the loop optimization pass of the compiler. It finds invariant computations within loops and moves them *************** Boston, MA 02111-1307, USA. */ *** 52,57 **** --- 52,144 ---- #include "cselib.h" #include "except.h" #include "toplev.h" + #include "predict.h" + #include "insn-flags.h" + #include "optabs.h" + + /* Not really meaningful values, but at least something. */ + #ifndef SIMULTANEOUS_PREFETCHES + #define SIMULTANEOUS_PREFETCHES 3 + #endif + #ifndef PREFETCH_BLOCK + #define PREFETCH_BLOCK 32 + #endif + #ifndef HAVE_prefetch + #define HAVE_prefetch 0 + #define CODE_FOR_prefetch 0 + #define gen_prefetch(a,b,c) (abort(), NULL_RTX) + #endif + + /* Give up the prefetch optimizations once we exceed a given threshhold. + It is unlikely that we would be able to optimize something in a loop + with so many detected prefetches. */ + #define MAX_PREFETCHES 100 + /* The number of prefetch blocks that are beneficial to fetch at once before + a loop with a known (and low) iteration count. */ + #define PREFETCH_BLOCKS_BEFORE_LOOP_MAX 6 + /* For very tiny loops it is not worthwhile to prefetch even before the loop, + since it is likely that the data are already in the cache. */ + #define PREFETCH_BLOCKS_BEFORE_LOOP_MIN 2 + /* The minimal number of prefetch blocks that a loop must consume to make + the emitting of prefetch instruction in the body of loop worthwhile. */ + #define PREFETCH_BLOCKS_IN_LOOP_MIN 6 + + /* Parameterize some prefetch heuristics so they can be turned on and off + easily for performance testing on new architecures. These can be + defined in target-dependent files. */ + + /* Prefetch is worthwhile only when loads/stores are dense. */ + #ifndef PREFETCH_ONLY_DENSE_MEM + #define PREFETCH_ONLY_DENSE_MEM 1 + #endif + + /* Define what we mean by "dense" loads and stores; This value divided by 256 + is the minimum percentage of memory references that worth prefetching. */ + #ifndef PREFETCH_DENSE_MEM + #define PREFETCH_DENSE_MEM 220 + #endif + + /* Do not prefetch for a loop whose iteration count is known to be low. */ + #ifndef PREFETCH_NO_LOW_LOOPCNT + #define PREFETCH_NO_LOW_LOOPCNT 1 + #endif + + /* Define what we mean by a "low" iteration count. */ + #ifndef PREFETCH_LOW_LOOPCNT + #define PREFETCH_LOW_LOOPCNT 32 + #endif + + /* Do not prefetch for a loop that contains a function call; such a loop is + probably not an internal loop. */ + #ifndef PREFETCH_NO_CALL + #define PREFETCH_NO_CALL 1 + #endif + + /* Do not prefetch accesses with an extreme stride. */ + #ifndef PREFETCH_NO_EXTREME_STRIDE + #define PREFETCH_NO_EXTREME_STRIDE 1 + #endif + + /* Define what we mean by an "extreme" stride. */ + #ifndef PREFETCH_EXTREME_STRIDE + #define PREFETCH_EXTREME_STRIDE 4096 + #endif + + /* Do not handle reversed order prefetches (negative stride). */ + #ifndef PREFETCH_NO_REVERSE_ORDER + #define PREFETCH_NO_REVERSE_ORDER 1 + #endif + + /* Prefetch even if the GIV is not always executed. */ + #ifndef PREFETCH_NOT_ALWAYS + #define PREFETCH_NOT_ALWAYS 0 + #endif + + /* If the loop requires more prefetches than the target can process in + parallel then don't prefetch anything in that loop. */ + #ifndef PREFETCH_LIMIT_TO_SIMULTANEOUS + #define PREFETCH_LIMIT_TO_SIMULTANEOUS 1 + #endif #define LOOP_REG_LIFETIME(LOOP, REGNO) \ ((REGNO_LAST_LUID (REGNO) - REGNO_FIRST_LUID (REGNO))) *************** Boston, MA 02111-1307, USA. */ *** 60,65 **** --- 147,156 ---- ((REGNO_LAST_LUID (REGNO) > INSN_LUID ((LOOP)->end) \ || REGNO_FIRST_LUID (REGNO) < INSN_LUID ((LOOP)->start))) + #define LOOP_REGNO_NREGS(REGNO, SET_DEST) \ + ((REGNO) < FIRST_PSEUDO_REGISTER \ + ? HARD_REGNO_NREGS ((REGNO), GET_MODE (SET_DEST)) : 1) + /* Vector mapping INSN_UIDs to luids. The luids are like uids but increase monotonically always. *************** FILE *loop_dump_stream; *** 144,149 **** --- 235,241 ---- /* Forward declarations. */ + static void invalidate_loops_containing_label PARAMS ((rtx)); static void find_and_verify_loops PARAMS ((rtx, struct loops *)); static void mark_loop_jump PARAMS ((rtx, struct loop *)); static void prescan_loop PARAMS ((struct loop *)); *************** static void record_giv PARAMS ((const st *** 207,213 **** rtx, rtx, rtx, rtx, rtx, rtx, int, enum g_types, int, int, rtx *)); static void update_giv_derive PARAMS ((const struct loop *, rtx)); ! static void check_ext_dependant_givs PARAMS ((struct iv_class *, struct loop_info *)); static int basic_induction_var PARAMS ((const struct loop *, rtx, enum machine_mode, rtx, rtx, --- 299,305 ---- rtx, rtx, rtx, rtx, rtx, rtx, int, enum g_types, int, int, rtx *)); static void update_giv_derive PARAMS ((const struct loop *, rtx)); ! static void check_ext_dependent_givs PARAMS ((struct iv_class *, struct loop_info *)); static int basic_induction_var PARAMS ((const struct loop *, rtx, enum machine_mode, rtx, rtx, *************** static rtx gen_add_mult PARAMS ((rtx, rt *** 252,258 **** static void loop_regs_update PARAMS ((const struct loop *, rtx)); static int iv_add_mult_cost PARAMS ((rtx, rtx, rtx, rtx)); ! static rtx loop_insn_emit_after PARAMS((const struct loop *, basic_block, rtx, rtx)); static rtx loop_call_insn_emit_before PARAMS((const struct loop *, basic_block, rtx, rtx)); --- 344,350 ---- static void loop_regs_update PARAMS ((const struct loop *, rtx)); static int iv_add_mult_cost PARAMS ((rtx, rtx, rtx, rtx)); ! static rtx loop_insn_emit_after PARAMS((const struct loop *, basic_block, rtx, rtx)); static rtx loop_call_insn_emit_before PARAMS((const struct loop *, basic_block, rtx, rtx)); *************** static rtx loop_insn_sink_or_swim PARAMS *** 261,266 **** --- 353,359 ---- static void loop_dump_aux PARAMS ((const struct loop *, FILE *, int)); static void loop_delete_insns PARAMS ((rtx, rtx)); + static HOST_WIDE_INT remove_constant_addition PARAMS ((rtx *)); void debug_ivs PARAMS ((const struct loop *)); void debug_iv_class PARAMS ((const struct iv_class *)); void debug_biv PARAMS ((const struct induction *)); *************** typedef struct loop_replace_args *** 282,289 **** } loop_replace_args; /* Nonzero iff INSN is between START and END, inclusive. */ ! #define INSN_IN_RANGE_P(INSN, START, END) \ ! (INSN_UID (INSN) < max_uid_for_loop \ && INSN_LUID (INSN) >= INSN_LUID (START) \ && INSN_LUID (INSN) <= INSN_LUID (END)) --- 375,382 ---- } loop_replace_args; /* Nonzero iff INSN is between START and END, inclusive. */ ! #define INSN_IN_RANGE_P(INSN, START, END) \ ! (INSN_UID (INSN) < max_uid_for_loop \ && INSN_LUID (INSN) >= INSN_LUID (START) \ && INSN_LUID (INSN) <= INSN_LUID (END)) *************** loop_optimize (f, dumpfile, flags) *** 355,362 **** FILE *dumpfile; int flags; { ! register rtx insn; ! register int i; struct loops loops_data; struct loops *loops = &loops_data; struct loop_info *loops_info; --- 448,455 ---- FILE *dumpfile; int flags; { ! rtx insn; ! int i; struct loops loops_data; struct loops *loops = &loops_data; struct loop_info *loops_info; *************** scan_loop (loop, flags) *** 521,527 **** { struct loop_info *loop_info = LOOP_INFO (loop); struct loop_regs *regs = LOOP_REGS (loop); ! register int i; rtx loop_start = loop->start; rtx loop_end = loop->end; rtx p; --- 614,620 ---- { struct loop_info *loop_info = LOOP_INFO (loop); struct loop_regs *regs = LOOP_REGS (loop); ! int i; rtx loop_start = loop->start; rtx loop_end = loop->end; rtx p; *************** scan_loop (loop, flags) *** 670,675 **** --- 763,771 ---- if (GET_CODE (p) == INSN && (set = single_set (p)) && GET_CODE (SET_DEST (set)) == REG + #ifdef PIC_OFFSET_TABLE_REG_CALL_CLOBBERED + && SET_DEST (set) != pic_offset_table_rtx + #endif && ! regs->array[REGNO (SET_DEST (set))].may_not_optimize) { int tem1 = 0; *************** scan_loop (loop, flags) *** 704,709 **** --- 800,817 ---- } } + /* For parallels, add any possible uses to the depencies, as we can't move + the insn without resolving them first. */ + if (GET_CODE (PATTERN (p)) == PARALLEL) + { + for (i = 0; i < XVECLEN (PATTERN (p), 0); i++) + { + rtx x = XVECEXP (PATTERN (p), 0, i); + if (GET_CODE (x) == USE) + dependencies = gen_rtx_EXPR_LIST (VOIDmode, XEXP (x, 0), dependencies); + } + } + /* Don't try to optimize a register that was made by loop-optimization for an inner loop. We don't know its life-span, so we can't compute the benefit. */ *************** scan_loop (loop, flags) *** 714,720 **** something after this point in the loop might depend on its value before the set). */ ! reg_in_basic_block_p (p, SET_DEST (set)) ! /* And the set is not guaranteed to be executed one the loop starts, or the value before the set is needed before the set occurs... --- 822,828 ---- something after this point in the loop might depend on its value before the set). */ ! reg_in_basic_block_p (p, SET_DEST (set)) ! /* And the set is not guaranteed to be executed once the loop starts, or the value before the set is needed before the set occurs... *************** scan_loop (loop, flags) *** 748,755 **** && ! ((maybe_never || call_passed) && may_trap_p (src))) { ! register struct movable *m; ! register int regno = REGNO (SET_DEST (set)); /* A potential lossage is where we have a case where two insns can be combined as long as they are both in the loop, but --- 856,863 ---- && ! ((maybe_never || call_passed) && may_trap_p (src))) { ! struct movable *m; ! int regno = REGNO (SET_DEST (set)); /* A potential lossage is where we have a case where two insns can be combined as long as they are both in the loop, but *************** scan_loop (loop, flags) *** 794,803 **** = replace_rtx (REG_NOTES (regs->array[regno].single_usage), SET_DEST (set), copy_rtx (SET_SRC (set))); ! PUT_CODE (p, NOTE); ! NOTE_LINE_NUMBER (p) = NOTE_INSN_DELETED; ! NOTE_SOURCE_FILE (p) = 0; ! regs->array[regno].set_in_loop = 0; continue; } --- 902,910 ---- = replace_rtx (REG_NOTES (regs->array[regno].single_usage), SET_DEST (set), copy_rtx (SET_SRC (set))); ! delete_insn (p); ! for (i = 0; i < LOOP_REGNO_NREGS (regno, SET_DEST (set)); i++) ! regs->array[regno+i].set_in_loop = 0; continue; } *************** scan_loop (loop, flags) *** 827,833 **** m->savings = regs->array[regno].n_times_set; if (find_reg_note (p, REG_RETVAL, NULL_RTX)) m->savings += libcall_benefit (p); ! regs->array[regno].set_in_loop = move_insn ? -2 : -1; /* Add M to the end of the chain MOVABLES. */ loop_movables_add (movables, m); --- 934,941 ---- m->savings = regs->array[regno].n_times_set; if (find_reg_note (p, REG_RETVAL, NULL_RTX)) m->savings += libcall_benefit (p); ! for (i = 0; i < LOOP_REGNO_NREGS (regno, SET_DEST (set)); i++) ! regs->array[regno+i].set_in_loop = move_insn ? -2 : -1; /* Add M to the end of the chain MOVABLES. */ loop_movables_add (movables, m); *************** scan_loop (loop, flags) *** 881,890 **** == SET_DEST (set)) && !reg_mentioned_p (SET_DEST (set), SET_SRC (set1))) { ! register int regno = REGNO (SET_DEST (set)); if (regs->array[regno].set_in_loop == 2) { ! register struct movable *m; m = (struct movable *) xmalloc (sizeof (struct movable)); m->next = 0; m->insn = p; --- 989,998 ---- == SET_DEST (set)) && !reg_mentioned_p (SET_DEST (set), SET_SRC (set1))) { ! int regno = REGNO (SET_DEST (set)); if (regs->array[regno].set_in_loop == 2) { ! struct movable *m; m = (struct movable *) xmalloc (sizeof (struct movable)); m->next = 0; m->insn = p; *************** scan_loop (loop, flags) *** 928,934 **** m->match = 0; m->lifetime = LOOP_REG_LIFETIME (loop, regno); m->savings = 1; ! regs->array[regno].set_in_loop = -1; /* Add M to the end of the chain MOVABLES. */ loop_movables_add (movables, m); } --- 1036,1043 ---- m->match = 0; m->lifetime = LOOP_REG_LIFETIME (loop, regno); m->savings = 1; ! for (i = 0; i < LOOP_REGNO_NREGS (regno, SET_DEST (set)); i++) ! regs->array[regno+i].set_in_loop = -1; /* Add M to the end of the chain MOVABLES. */ loop_movables_add (movables, m); } *************** scan_loop (loop, flags) *** 937,943 **** /* Past a call insn, we get to insns which might not be executed because the call might exit. This matters for insns that trap. Constant and pure call insns always return, so they don't count. */ ! else if (GET_CODE (p) == CALL_INSN && ! CONST_CALL_P (p)) call_passed = 1; /* Past a label or a jump, we get to insns for which we can't count on whether or how many times they will be --- 1046,1052 ---- /* Past a call insn, we get to insns which might not be executed because the call might exit. This matters for insns that trap. Constant and pure call insns always return, so they don't count. */ ! else if (GET_CODE (p) == CALL_INSN && ! CONST_OR_PURE_CALL_P (p)) call_passed = 1; /* Past a label or a jump, we get to insns for which we can't count on whether or how many times they will be *************** scan_loop (loop, flags) *** 950,956 **** beginning, don't set maybe_never for that. This must be an unconditional jump, otherwise the code at the top of the loop might never be executed. Unconditional jumps are ! followed a by barrier then loop end. */ && ! (GET_CODE (p) == JUMP_INSN && JUMP_LABEL (p) == loop->top && NEXT_INSN (NEXT_INSN (p)) == loop_end && any_uncondjump_p (p))) --- 1059,1065 ---- beginning, don't set maybe_never for that. This must be an unconditional jump, otherwise the code at the top of the loop might never be executed. Unconditional jumps are ! followed by a barrier then the loop_end. */ && ! (GET_CODE (p) == JUMP_INSN && JUMP_LABEL (p) == loop->top && NEXT_INSN (NEXT_INSN (p)) == loop_end && any_uncondjump_p (p))) *************** scan_loop (loop, flags) *** 994,1000 **** optimizing for code size. */ if (! optimize_size) ! move_movables (loop, movables, threshold, insn_count); /* Now candidates that still are negative are those not moved. Change regs->array[I].set_in_loop to indicate that those are not actually --- 1103,1127 ---- optimizing for code size. */ if (! optimize_size) ! { ! move_movables (loop, movables, threshold, insn_count); ! ! /* Recalculate regs->array if move_movables has created new ! registers. */ ! if (max_reg_num () > regs->num) ! { ! loop_regs_scan (loop, 0); ! for (update_start = loop_start; ! PREV_INSN (update_start) ! && GET_CODE (PREV_INSN (update_start)) != CODE_LABEL; ! update_start = PREV_INSN (update_start)) ! ; ! update_end = NEXT_INSN (loop_end); ! ! reg_scan_update (update_start, update_end, loop_max_reg); ! loop_max_reg = max_reg_num (); ! } ! } /* Now candidates that still are negative are those not moved. Change regs->array[I].set_in_loop to indicate that those are not actually *************** scan_loop (loop, flags) *** 1034,1040 **** if (update_end && GET_CODE (update_end) == CODE_LABEL && --LABEL_NUSES (update_end) == 0) ! delete_insn (update_end); } --- 1161,1167 ---- if (update_end && GET_CODE (update_end) == CODE_LABEL && --LABEL_NUSES (update_end) == 0) ! delete_related_insns (update_end); } *************** static void *** 1241,1247 **** ignore_some_movables (movables) struct loop_movables *movables; { ! register struct movable *m, *m1; for (m = movables->head; m; m = m->next) { --- 1368,1374 ---- ignore_some_movables (movables) struct loop_movables *movables; { ! struct movable *m, *m1; for (m = movables->head; m; m = m->next) { *************** static void *** 1273,1279 **** force_movables (movables) struct loop_movables *movables; { ! register struct movable *m, *m1; for (m1 = movables->head; m1; m1 = m1->next) /* Omit this if moving just the (SET (REG) 0) of a zero-extend. */ if (!m1->partial && !m1->done) --- 1400,1407 ---- force_movables (movables) struct loop_movables *movables; { ! struct movable *m, *m1; ! for (m1 = movables->head; m1; m1 = m1->next) /* Omit this if moving just the (SET (REG) 0) of a zero-extend. */ if (!m1->partial && !m1->done) *************** combine_movables (movables, regs) *** 1313,1319 **** struct loop_movables *movables; struct loop_regs *regs; { ! register struct movable *m; char *matched_regs = (char *) xmalloc (regs->num); enum machine_mode mode; --- 1441,1447 ---- struct loop_movables *movables; struct loop_regs *regs; { ! struct movable *m; char *matched_regs = (char *) xmalloc (regs->num); enum machine_mode mode; *************** combine_movables (movables, regs) *** 1325,1331 **** if (m->match == 0 && regs->array[m->regno].n_times_set == 1 && !m->partial) { ! register struct movable *m1; int regno = m->regno; memset (matched_regs, 0, regs->num); --- 1453,1459 ---- if (m->match == 0 && regs->array[m->regno].n_times_set == 1 && !m->partial) { ! struct movable *m1; int regno = m->regno; memset (matched_regs, 0, regs->num); *************** combine_movables (movables, regs) *** 1334,1340 **** /* We want later insns to match the first one. Don't make the first one match any later ones. So start this loop at m->next. */ for (m1 = m->next; m1; m1 = m1->next) ! if (m != m1 && m1->match == 0 && regs->array[m1->regno].n_times_set == 1 /* A reg used outside the loop mustn't be eliminated. */ && !m1->global --- 1462,1471 ---- /* We want later insns to match the first one. Don't make the first one match any later ones. So start this loop at m->next. */ for (m1 = m->next; m1; m1 = m1->next) ! /* ??? HACK! move_movables does not verify that the replacement ! is valid, which can have disasterous effects with hard regs ! and match_dup. Turn combination off for now. */ ! if (0 && m != m1 && m1->match == 0 && regs->array[m1->regno].n_times_set == 1 /* A reg used outside the loop mustn't be eliminated. */ && !m1->global *************** combine_movables (movables, regs) *** 1378,1384 **** for (mode = GET_CLASS_NARROWEST_MODE (MODE_INT); mode != VOIDmode; mode = GET_MODE_WIDER_MODE (mode)) { ! register struct movable *m0 = 0; /* Combine all the registers for extension from mode MODE. Don't combine any that are used outside this loop. */ --- 1509,1515 ---- for (mode = GET_CLASS_NARROWEST_MODE (MODE_INT); mode != VOIDmode; mode = GET_MODE_WIDER_MODE (mode)) { ! struct movable *m0 = 0; /* Combine all the registers for extension from mode MODE. Don't combine any that are used outside this loop. */ *************** combine_movables (movables, regs) *** 1386,1392 **** if (m->partial && ! m->global && mode == GET_MODE (SET_SRC (PATTERN (NEXT_INSN (m->insn))))) { ! register struct movable *m1; int first = REGNO_FIRST_LUID (m->regno); int last = REGNO_LAST_LUID (m->regno); --- 1517,1524 ---- if (m->partial && ! m->global && mode == GET_MODE (SET_SRC (PATTERN (NEXT_INSN (m->insn))))) { ! struct movable *m1; ! int first = REGNO_FIRST_LUID (m->regno); int last = REGNO_LAST_LUID (m->regno); *************** rtx_equal_for_loop_p (x, y, movables, re *** 1480,1490 **** struct loop_movables *movables; struct loop_regs *regs; { ! register int i; ! register int j; ! register struct movable *m; ! register enum rtx_code code; ! register const char *fmt; if (x == y) return 1; --- 1612,1622 ---- struct loop_movables *movables; struct loop_regs *regs; { ! int i; ! int j; ! struct movable *m; ! enum rtx_code code; ! const char *fmt; if (x == y) return 1; *************** rtx_equal_for_loop_p (x, y, movables, re *** 1591,1597 **** /* If X contains any LABEL_REF's, add REG_LABEL notes for them to all insns in INSNS which use the reference. LABEL_NUSES for CODE_LABEL ! references is incremented once for each added note. */ static void add_label_notes (x, insns) --- 1723,1729 ---- /* If X contains any LABEL_REF's, add REG_LABEL notes for them to all insns in INSNS which use the reference. LABEL_NUSES for CODE_LABEL ! references is incremented once for each added note. */ static void add_label_notes (x, insns) *************** add_label_notes (x, insns) *** 1613,1619 **** for (insn = insns; insn; insn = NEXT_INSN (insn)) if (reg_mentioned_p (XEXP (x, 0), insn)) { ! REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_LABEL, XEXP (x, 0), REG_NOTES (insn)); if (LABEL_P (XEXP (x, 0))) LABEL_NUSES (XEXP (x, 0))++; --- 1745,1751 ---- for (insn = insns; insn; insn = NEXT_INSN (insn)) if (reg_mentioned_p (XEXP (x, 0), insn)) { ! REG_NOTES (insn) = gen_rtx_INSN_LIST (REG_LABEL, XEXP (x, 0), REG_NOTES (insn)); if (LABEL_P (XEXP (x, 0))) LABEL_NUSES (XEXP (x, 0))++; *************** move_movables (loop, movables, threshold *** 1645,1652 **** struct loop_regs *regs = LOOP_REGS (loop); int nregs = regs->num; rtx new_start = 0; ! register struct movable *m; ! register rtx p; rtx loop_start = loop->start; rtx loop_end = loop->end; /* Map of pseudo-register replacements to handle combining --- 1777,1784 ---- struct loop_regs *regs = LOOP_REGS (loop); int nregs = regs->num; rtx new_start = 0; ! struct movable *m; ! rtx p; rtx loop_start = loop->start; rtx loop_end = loop->end; /* Map of pseudo-register replacements to handle combining *************** move_movables (loop, movables, threshold *** 1697,1704 **** m->insn)))) && (! m->forces || m->forces->done)) { ! register int regno; ! register rtx p; int savings = m->savings; /* We have an insn that is safe to move. --- 1829,1836 ---- m->insn)))) && (! m->forces || m->forces->done)) { ! int regno; ! rtx p; int savings = m->savings; /* We have an insn that is safe to move. *************** move_movables (loop, movables, threshold *** 1734,1740 **** && regs->array[m->forces->regno].n_times_set == 1)) { int count; ! register struct movable *m1; rtx first = NULL_RTX; /* Now move the insns that set the reg. */ --- 1866,1872 ---- && regs->array[m->forces->regno].n_times_set == 1)) { int count; ! struct movable *m1; rtx first = NULL_RTX; /* Now move the insns that set the reg. */ *************** move_movables (loop, movables, threshold *** 1818,1826 **** i1 = loop_insn_hoist (loop, seq); if (! find_reg_note (i1, REG_EQUAL, NULL_RTX)) ! REG_NOTES (i1) ! = gen_rtx_EXPR_LIST (m->is_equiv ? REG_EQUIV : REG_EQUAL, ! m->set_src, REG_NOTES (i1)); if (loop_dump_stream) fprintf (loop_dump_stream, " moved to %d", INSN_UID (i1)); --- 1950,1958 ---- i1 = loop_insn_hoist (loop, seq); if (! find_reg_note (i1, REG_EQUAL, NULL_RTX)) ! set_unique_reg_note (i1, ! m->is_equiv ? REG_EQUIV : REG_EQUAL, ! m->set_src); if (loop_dump_stream) fprintf (loop_dump_stream, " moved to %d", INSN_UID (i1)); *************** move_movables (loop, movables, threshold *** 1923,1928 **** --- 2055,2061 ---- if (temp == fn_address_insn) fn_address_insn = i1; REG_NOTES (i1) = REG_NOTES (temp); + REG_NOTES (temp) = NULL; delete_insn (temp); } if (new_start == 0) *************** move_movables (loop, movables, threshold *** 1938,1945 **** rtx tem; start_sequence (); ! tem = expand_binop ! (GET_MODE (reg), and_optab, reg, GEN_INT ((((HOST_WIDE_INT) 1 << GET_MODE_BITSIZE (m->savemode))) - 1), --- 2071,2078 ---- rtx tem; start_sequence (); ! tem = expand_simple_binop ! (GET_MODE (reg), AND, reg, GEN_INT ((((HOST_WIDE_INT) 1 << GET_MODE_BITSIZE (m->savemode))) - 1), *************** move_movables (loop, movables, threshold *** 1977,1986 **** i1 = loop_insn_hoist (loop, seq); if (! find_reg_note (i1, REG_EQUAL, NULL_RTX)) ! REG_NOTES (i1) ! = gen_rtx_EXPR_LIST ((m->is_equiv ? REG_EQUIV ! : REG_EQUAL), ! m->set_src, REG_NOTES (i1)); } else i1 = loop_insn_hoist (loop, PATTERN (p)); --- 2110,2117 ---- i1 = loop_insn_hoist (loop, seq); if (! find_reg_note (i1, REG_EQUAL, NULL_RTX)) ! set_unique_reg_note (i1, m->is_equiv ? REG_EQUIV ! : REG_EQUAL, m->set_src); } else i1 = loop_insn_hoist (loop, PATTERN (p)); *************** move_movables (loop, movables, threshold *** 1988,1993 **** --- 2119,2125 ---- if (REG_NOTES (i1) == 0) { REG_NOTES (i1) = REG_NOTES (p); + REG_NOTES (p) = NULL; /* If there is a REG_EQUAL note present whose value is not loop invariant, then delete it, since it *************** move_movables (loop, movables, threshold *** 2044,2050 **** /* The reg set here is now invariant. */ if (! m->partial) ! regs->array[regno].set_in_loop = 0; m->done = 1; --- 2176,2186 ---- /* The reg set here is now invariant. */ if (! m->partial) ! { ! int i; ! for (i = 0; i < LOOP_REGNO_NREGS (regno, m->set_dest); i++) ! regs->array[regno+i].set_in_loop = 0; ! } m->done = 1; *************** move_movables (loop, movables, threshold *** 2090,2105 **** and prevent further processing of it. */ m1->done = 1; ! /* if library call, delete all insn except last, which ! is deleted below */ if ((temp = find_reg_note (m1->insn, REG_RETVAL, NULL_RTX))) ! { ! for (temp = XEXP (temp, 0); temp != m1->insn; ! temp = NEXT_INSN (temp)) ! delete_insn (temp); ! } ! delete_insn (m1->insn); /* Any other movable that loads the same register MUST be moved. */ --- 2226,2237 ---- and prevent further processing of it. */ m1->done = 1; ! /* if library call, delete all insns. */ if ((temp = find_reg_note (m1->insn, REG_RETVAL, NULL_RTX))) ! delete_insn_chain (XEXP (temp, 0), m1->insn); ! else ! delete_insn (m1->insn); /* Any other movable that loads the same register MUST be moved. */ *************** move_movables (loop, movables, threshold *** 2108,2114 **** /* The reg merged here is now invariant, if the reg it matches is invariant. */ if (! m->partial) ! regs->array[m1->regno].set_in_loop = 0; } } else if (loop_dump_stream) --- 2240,2252 ---- /* The reg merged here is now invariant, if the reg it matches is invariant. */ if (! m->partial) ! { ! int i; ! for (i = 0; ! i < LOOP_REGNO_NREGS (regno, m1->set_dest); ! i++) ! regs->array[m1->regno+i].set_in_loop = 0; ! } } } else if (loop_dump_stream) *************** loop_movables_free (movables) *** 2166,2172 **** m_next = m->next; free (m); } ! } #if 0 /* Scan X and replace the address of any MEM in it with ADDR. --- 2304,2310 ---- m_next = m->next; free (m); } ! } #if 0 /* Scan X and replace the address of any MEM in it with ADDR. *************** static void *** 2176,2184 **** replace_call_address (x, reg, addr) rtx x, reg, addr; { ! register enum rtx_code code; ! register int i; ! register const char *fmt; if (x == 0) return; --- 2314,2322 ---- replace_call_address (x, reg, addr) rtx x, reg, addr; { ! enum rtx_code code; ! int i; ! const char *fmt; if (x == 0) return; *************** replace_call_address (x, reg, addr) *** 2224,2230 **** replace_call_address (XEXP (x, i), reg, addr); else if (fmt[i] == 'E') { ! register int j; for (j = 0; j < XVECLEN (x, i); j++) replace_call_address (XVECEXP (x, i, j), reg, addr); } --- 2362,2368 ---- replace_call_address (XEXP (x, i), reg, addr); else if (fmt[i] == 'E') { ! int j; for (j = 0; j < XVECLEN (x, i); j++) replace_call_address (XVECEXP (x, i, j), reg, addr); } *************** count_nonfixed_reads (loop, x) *** 2240,2248 **** const struct loop *loop; rtx x; { ! register enum rtx_code code; ! register int i; ! register const char *fmt; int value; if (x == 0) --- 2378,2386 ---- const struct loop *loop; rtx x; { ! enum rtx_code code; ! int i; ! const char *fmt; int value; if (x == 0) *************** count_nonfixed_reads (loop, x) *** 2277,2283 **** value += count_nonfixed_reads (loop, XEXP (x, i)); if (fmt[i] == 'E') { ! register int j; for (j = 0; j < XVECLEN (x, i); j++) value += count_nonfixed_reads (loop, XVECEXP (x, i, j)); } --- 2415,2421 ---- value += count_nonfixed_reads (loop, XEXP (x, i)); if (fmt[i] == 'E') { ! int j; for (j = 0; j < XVECLEN (x, i); j++) value += count_nonfixed_reads (loop, XVECEXP (x, i, j)); } *************** static void *** 2295,2301 **** prescan_loop (loop) struct loop *loop; { ! register int level = 1; rtx insn; struct loop_info *loop_info = LOOP_INFO (loop); rtx start = loop->start; --- 2433,2439 ---- prescan_loop (loop) struct loop *loop; { ! int level = 1; rtx insn; struct loop_info *loop_info = LOOP_INFO (loop); rtx start = loop->start; *************** prescan_loop (loop) *** 2323,2329 **** loop_info->num_mem_sets = 0; ! for (insn = start; insn && GET_CODE (insn) != CODE_LABEL; insn = PREV_INSN (insn)) { if (GET_CODE (insn) == CALL_INSN) --- 2461,2467 ---- loop_info->num_mem_sets = 0; ! for (insn = start; insn && GET_CODE (insn) != CODE_LABEL; insn = PREV_INSN (insn)) { if (GET_CODE (insn) == CALL_INSN) *************** prescan_loop (loop) *** 2336,2343 **** for (insn = NEXT_INSN (start); insn != NEXT_INSN (end); insn = NEXT_INSN (insn)) { ! if (GET_CODE (insn) == NOTE) { if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG) { ++level; --- 2474,2482 ---- for (insn = NEXT_INSN (start); insn != NEXT_INSN (end); insn = NEXT_INSN (insn)) { ! switch (GET_CODE (insn)) { + case NOTE: if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG) { ++level; *************** prescan_loop (loop) *** 2345,2368 **** loop->level++; } else if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END) ! { ! --level; ! } ! } ! else if (GET_CODE (insn) == CALL_INSN) ! { ! if (! CONST_CALL_P (insn)) { loop_info->unknown_address_altered = 1; loop_info->has_nonconst_call = 1; } loop_info->has_call = 1; ! } ! else if (GET_CODE (insn) == INSN || GET_CODE (insn) == JUMP_INSN) ! { ! rtx label1 = NULL_RTX; ! rtx label2 = NULL_RTX; if (volatile_refs_p (PATTERN (insn))) loop_info->has_volatile = 1; --- 2484,2559 ---- loop->level++; } else if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END) ! --level; ! break; ! ! case CALL_INSN: ! if (! CONST_OR_PURE_CALL_P (insn)) { loop_info->unknown_address_altered = 1; loop_info->has_nonconst_call = 1; } + else if (pure_call_p (insn)) + loop_info->has_nonconst_call = 1; loop_info->has_call = 1; ! if (can_throw_internal (insn)) ! loop_info->has_multiple_exit_targets = 1; ! break; + case JUMP_INSN: + if (! loop_info->has_multiple_exit_targets) + { + rtx set = pc_set (insn); + + if (set) + { + rtx src = SET_SRC (set); + rtx label1, label2; + + if (GET_CODE (src) == IF_THEN_ELSE) + { + label1 = XEXP (src, 1); + label2 = XEXP (src, 2); + } + else + { + label1 = src; + label2 = NULL_RTX; + } + + do + { + if (label1 && label1 != pc_rtx) + { + if (GET_CODE (label1) != LABEL_REF) + { + /* Something tricky. */ + loop_info->has_multiple_exit_targets = 1; + break; + } + else if (XEXP (label1, 0) != exit_target + && LABEL_OUTSIDE_LOOP_P (label1)) + { + /* A jump outside the current loop. */ + loop_info->has_multiple_exit_targets = 1; + break; + } + } + + label1 = label2; + label2 = NULL_RTX; + } + while (label1); + } + else + { + /* A return, or something tricky. */ + loop_info->has_multiple_exit_targets = 1; + } + } + /* FALLTHRU */ + + case INSN: if (volatile_refs_p (PATTERN (insn))) loop_info->has_volatile = 1; *************** prescan_loop (loop) *** 2375,2422 **** if (! loop_info->first_loop_store_insn && loop_info->store_mems) loop_info->first_loop_store_insn = insn; ! if (! loop_info->has_multiple_exit_targets ! && GET_CODE (insn) == JUMP_INSN ! && GET_CODE (PATTERN (insn)) == SET ! && SET_DEST (PATTERN (insn)) == pc_rtx) ! { ! if (GET_CODE (SET_SRC (PATTERN (insn))) == IF_THEN_ELSE) ! { ! label1 = XEXP (SET_SRC (PATTERN (insn)), 1); ! label2 = XEXP (SET_SRC (PATTERN (insn)), 2); ! } ! else ! { ! label1 = SET_SRC (PATTERN (insn)); ! } ! ! do ! { ! if (label1 && label1 != pc_rtx) ! { ! if (GET_CODE (label1) != LABEL_REF) ! { ! /* Something tricky. */ ! loop_info->has_multiple_exit_targets = 1; ! break; ! } ! else if (XEXP (label1, 0) != exit_target ! && LABEL_OUTSIDE_LOOP_P (label1)) ! { ! /* A jump outside the current loop. */ ! loop_info->has_multiple_exit_targets = 1; ! break; ! } ! } ! label1 = label2; ! label2 = NULL_RTX; ! } ! while (label1); ! } } - else if (GET_CODE (insn) == RETURN) - loop_info->has_multiple_exit_targets = 1; } /* Now, rescan the loop, setting up the LOOP_MEMS array. */ --- 2566,2578 ---- if (! loop_info->first_loop_store_insn && loop_info->store_mems) loop_info->first_loop_store_insn = insn; ! if (flag_non_call_exceptions && can_throw_internal (insn)) ! loop_info->has_multiple_exit_targets = 1; ! break; ! default: ! break; } } /* Now, rescan the loop, setting up the LOOP_MEMS array. */ *************** prescan_loop (loop) *** 2455,2460 **** --- 2611,2627 ---- } } + /* Invalidate all loops containing LABEL. */ + + static void + invalidate_loops_containing_label (label) + rtx label; + { + struct loop *loop; + for (loop = uid_loop[INSN_UID (label)]; loop; loop = loop->outer) + loop->invalid = 1; + } + /* Scan the function looking for loops. Record the start and end of each loop. Also mark as invalid loops any loops that contain a setjmp or are branched to from outside the loop. */ *************** find_and_verify_loops (f, loops) *** 2499,2517 **** current_loop = next_loop; break; - case NOTE_INSN_SETJMP: - /* In this case, we must invalidate our current loop and any - enclosing loop. */ - for (loop = current_loop; loop; loop = loop->outer) - { - loop->invalid = 1; - if (loop_dump_stream) - fprintf (loop_dump_stream, - "\nLoop at %d ignored due to setjmp.\n", - INSN_UID (loop->start)); - } - break; - case NOTE_INSN_LOOP_CONT: current_loop->cont = insn; break; --- 2666,2671 ---- *************** find_and_verify_loops (f, loops) *** 2532,2537 **** --- 2686,2706 ---- break; } + if (GET_CODE (insn) == CALL_INSN + && find_reg_note (insn, REG_SETJMP, NULL)) + { + /* In this case, we must invalidate our current loop and any + enclosing loop. */ + for (loop = current_loop; loop; loop = loop->outer) + { + loop->invalid = 1; + if (loop_dump_stream) + fprintf (loop_dump_stream, + "\nLoop at %d ignored due to setjmp.\n", + INSN_UID (loop->start)); + } + } + /* Note that this will mark the NOTE_INSN_LOOP_END note as being in the enclosing loop, but this doesn't matter. */ uid_loop[INSN_UID (insn)] = current_loop; *************** find_and_verify_loops (f, loops) *** 2539,2561 **** /* Any loop containing a label used in an initializer must be invalidated, because it can be jumped into from anywhere. */ - for (label = forced_labels; label; label = XEXP (label, 1)) ! { ! for (loop = uid_loop[INSN_UID (XEXP (label, 0))]; ! loop; loop = loop->outer) ! loop->invalid = 1; ! } /* Any loop containing a label used for an exception handler must be invalidated, because it can be jumped into from anywhere. */ ! ! for (label = exception_handler_labels; label; label = XEXP (label, 1)) ! { ! for (loop = uid_loop[INSN_UID (XEXP (label, 0))]; ! loop; loop = loop->outer) ! loop->invalid = 1; ! } /* Now scan all insn's in the function. If any JUMP_INSN branches into a loop that it is not contained within, that loop is marked invalid. --- 2708,2719 ---- /* Any loop containing a label used in an initializer must be invalidated, because it can be jumped into from anywhere. */ for (label = forced_labels; label; label = XEXP (label, 1)) ! invalidate_loops_containing_label (XEXP (label, 0)); /* Any loop containing a label used for an exception handler must be invalidated, because it can be jumped into from anywhere. */ ! for_each_eh_label (invalidate_loops_containing_label); /* Now scan all insn's in the function. If any JUMP_INSN branches into a loop that it is not contained within, that loop is marked invalid. *************** find_and_verify_loops (f, loops) *** 2579,2589 **** { rtx note = find_reg_note (insn, REG_LABEL, NULL_RTX); if (note) ! { ! for (loop = uid_loop[INSN_UID (XEXP (note, 0))]; ! loop; loop = loop->outer) ! loop->invalid = 1; ! } } if (GET_CODE (insn) != JUMP_INSN) --- 2737,2743 ---- { rtx note = find_reg_note (insn, REG_LABEL, NULL_RTX); if (note) ! invalidate_loops_containing_label (XEXP (note, 0)); } if (GET_CODE (insn) != JUMP_INSN) *************** find_and_verify_loops (f, loops) *** 2663,2668 **** --- 2817,2830 ---- = JUMP_LABEL (insn) ? JUMP_LABEL (insn) : get_last_insn (); struct loop *target_loop = uid_loop[INSN_UID (target)]; rtx loc, loc2; + rtx tmp; + + /* Search for possible garbage past the conditional jumps + and look for the last barrier. */ + for (tmp = last_insn_to_move; + tmp && GET_CODE (tmp) != CODE_LABEL; tmp = NEXT_INSN (tmp)) + if (GET_CODE (tmp) == BARRIER) + last_insn_to_move = tmp; for (loc = target; loc; loc = PREV_INSN (loc)) if (GET_CODE (loc) == BARRIER *************** find_and_verify_loops (f, loops) *** 2706,2712 **** /* If no suitable BARRIER was found, create a suitable one before TARGET. Since TARGET is a fall through path, we'll need to insert an jump around our block ! and a add a BARRIER before TARGET. This creates an extra unconditional jump outside the loop. However, the benefits of removing rarely --- 2868,2874 ---- /* If no suitable BARRIER was found, create a suitable one before TARGET. Since TARGET is a fall through path, we'll need to insert an jump around our block ! and add a BARRIER before TARGET. This creates an extra unconditional jump outside the loop. However, the benefits of removing rarely *************** find_and_verify_loops (f, loops) *** 2726,2733 **** /* Include the BARRIER after INSN and copy the block after LOC. */ ! new_label = squeeze_notes (new_label, ! last_insn_to_move); reorder_insns (new_label, last_insn_to_move, loc); /* All those insns are now in TARGET_LOOP. */ --- 2888,2895 ---- /* Include the BARRIER after INSN and copy the block after LOC. */ ! if (squeeze_notes (&new_label, &last_insn_to_move)) ! abort (); reorder_insns (new_label, last_insn_to_move, loc); /* All those insns are now in TARGET_LOOP. */ *************** find_and_verify_loops (f, loops) *** 2777,2783 **** if (JUMP_LABEL (insn) != 0 && (next_real_insn (JUMP_LABEL (insn)) == next_real_insn (insn))) ! delete_insn (insn); } /* Continue the loop after where the conditional --- 2939,2945 ---- if (JUMP_LABEL (insn) != 0 && (next_real_insn (JUMP_LABEL (insn)) == next_real_insn (insn))) ! delete_related_insns (insn); } /* Continue the loop after where the conditional *************** find_and_verify_loops (f, loops) *** 2787,2793 **** insn = NEXT_INSN (cond_label); if (--LABEL_NUSES (cond_label) == 0) ! delete_insn (cond_label); /* This loop will be continued with NEXT_INSN (insn). */ insn = PREV_INSN (insn); --- 2949,2955 ---- insn = NEXT_INSN (cond_label); if (--LABEL_NUSES (cond_label) == 0) ! delete_related_insns (cond_label); /* This loop will be continued with NEXT_INSN (insn). */ insn = PREV_INSN (insn); *************** note_set_pseudo_multiple_uses (x, y, dat *** 3040,3052 **** int loop_invariant_p (loop, x) const struct loop *loop; ! register rtx x; { struct loop_info *loop_info = LOOP_INFO (loop); struct loop_regs *regs = LOOP_REGS (loop); ! register int i; ! register enum rtx_code code; ! register const char *fmt; int conditional = 0; rtx mem_list_entry; --- 3202,3214 ---- int loop_invariant_p (loop, x) const struct loop *loop; ! rtx x; { struct loop_info *loop_info = LOOP_INFO (loop); struct loop_regs *regs = LOOP_REGS (loop); ! int i; ! enum rtx_code code; ! const char *fmt; int conditional = 0; rtx mem_list_entry; *************** loop_invariant_p (loop, x) *** 3086,3092 **** since the reg might be set by initialization within the loop. */ if ((x == frame_pointer_rtx || x == hard_frame_pointer_rtx ! || x == arg_pointer_rtx) && ! current_function_has_nonlocal_goto) return 1; --- 3248,3254 ---- since the reg might be set by initialization within the loop. */ if ((x == frame_pointer_rtx || x == hard_frame_pointer_rtx ! || x == arg_pointer_rtx || x == pic_offset_table_rtx) && ! current_function_has_nonlocal_goto) return 1; *************** loop_invariant_p (loop, x) *** 3144,3150 **** } else if (fmt[i] == 'E') { ! register int j; for (j = 0; j < XVECLEN (x, i); j++) { int tem = loop_invariant_p (loop, XVECEXP (x, i, j)); --- 3306,3312 ---- } else if (fmt[i] == 'E') { ! int j; for (j = 0; j < XVECLEN (x, i); j++) { int tem = loop_invariant_p (loop, XVECEXP (x, i, j)); *************** consec_sets_invariant_p (loop, reg, n_se *** 3194,3200 **** while (count > 0) { ! register enum rtx_code code; rtx set; p = NEXT_INSN (p); --- 3356,3362 ---- while (count > 0) { ! enum rtx_code code; rtx set; p = NEXT_INSN (p); *************** all_sets_invariant_p (reg, insn, table) *** 3251,3262 **** rtx reg, insn; short *table; { ! register rtx p = insn; ! register int regno = REGNO (reg); while (1) { ! register enum rtx_code code; p = NEXT_INSN (p); code = GET_CODE (p); if (code == CODE_LABEL || code == JUMP_INSN) --- 3413,3424 ---- rtx reg, insn; short *table; { ! rtx p = insn; ! int regno = REGNO (reg); while (1) { ! enum rtx_code code; p = NEXT_INSN (p); code = GET_CODE (p); if (code == CODE_LABEL || code == JUMP_INSN) *************** count_one_set (regs, insn, x, last_set) *** 3338,3360 **** dest = XEXP (dest, 0); if (GET_CODE (dest) == REG) { ! register int regno = REGNO (dest); ! /* If this is the first setting of this reg ! in current basic block, and it was set before, ! it must be set in two basic blocks, so it cannot ! be moved out of the loop. */ ! if (regs->array[regno].set_in_loop > 0 ! && last_set == 0) ! regs->array[regno].may_not_optimize = 1; ! /* If this is not first setting in current basic block, ! see if reg was used in between previous one and this. ! If so, neither one can be moved. */ ! if (last_set[regno] != 0 ! && reg_used_between_p (dest, last_set[regno], insn)) ! regs->array[regno].may_not_optimize = 1; ! if (regs->array[regno].set_in_loop < 127) ! ++regs->array[regno].set_in_loop; ! last_set[regno] = insn; } } } --- 3500,3526 ---- dest = XEXP (dest, 0); if (GET_CODE (dest) == REG) { ! int i; ! int regno = REGNO (dest); ! for (i = 0; i < LOOP_REGNO_NREGS (regno, dest); i++) ! { ! /* If this is the first setting of this reg ! in current basic block, and it was set before, ! it must be set in two basic blocks, so it cannot ! be moved out of the loop. */ ! if (regs->array[regno].set_in_loop > 0 ! && last_set == 0) ! regs->array[regno+i].may_not_optimize = 1; ! /* If this is not first setting in current basic block, ! see if reg was used in between previous one and this. ! If so, neither one can be moved. */ ! if (last_set[regno] != 0 ! && reg_used_between_p (dest, last_set[regno], insn)) ! regs->array[regno+i].may_not_optimize = 1; ! if (regs->array[regno+i].set_in_loop < 127) ! ++regs->array[regno+i].set_in_loop; ! last_set[regno+i] = insn; ! } } } } *************** loop_reg_used_before_p (loop, set, insn) *** 3390,3395 **** --- 3556,4108 ---- return 0; } + + /* Information we collect about arrays that we might want to prefetch. */ + struct prefetch_info + { + struct iv_class *class; /* Class this prefetch is based on. */ + struct induction *giv; /* GIV this prefetch is based on. */ + rtx base_address; /* Start prefetching from this address plus + index. */ + HOST_WIDE_INT index; + HOST_WIDE_INT stride; /* Prefetch stride in bytes in each + iteration. */ + unsigned int bytes_accesed; /* Sum of sizes of all acceses to this + prefetch area in one iteration. */ + unsigned int total_bytes; /* Total bytes loop will access in this block. + This is set only for loops with known + iteration counts and is 0xffffffff + otherwise. */ + unsigned int write : 1; /* 1 for read/write prefetches. */ + unsigned int prefetch_in_loop : 1; + /* 1 for those chosen for prefetching. */ + unsigned int prefetch_before_loop : 1; + /* 1 for those chosen for prefetching. */ + }; + + /* Data used by check_store function. */ + struct check_store_data + { + rtx mem_address; + int mem_write; + }; + + static void check_store PARAMS ((rtx, rtx, void *)); + static void emit_prefetch_instructions PARAMS ((struct loop *)); + static int rtx_equal_for_prefetch_p PARAMS ((rtx, rtx)); + + /* Set mem_write when mem_address is found. Used as callback to + note_stores. */ + static void + check_store (x, pat, data) + rtx x, pat ATTRIBUTE_UNUSED; + void *data; + { + struct check_store_data *d = (struct check_store_data *) data; + + if ((GET_CODE (x) == MEM) && rtx_equal_p (d->mem_address, XEXP (x, 0))) + d->mem_write = 1; + } + + /* Like rtx_equal_p, but attempts to swap commutative operands. This is + important to get some addresses combined. Later more sophisticated + transformations can be added when necesary. + + ??? Same trick with swapping operand is done at several other places. + It can be nice to develop some common way to handle this. */ + + static int + rtx_equal_for_prefetch_p (x, y) + rtx x, y; + { + int i; + int j; + enum rtx_code code = GET_CODE (x); + const char *fmt; + + if (x == y) + return 1; + if (code != GET_CODE (y)) + return 0; + + code = GET_CODE (x); + + if (GET_RTX_CLASS (code) == 'c') + { + return ((rtx_equal_for_prefetch_p (XEXP (x, 0), XEXP (y, 0)) + && rtx_equal_for_prefetch_p (XEXP (x, 1), XEXP (y, 1))) + || (rtx_equal_for_prefetch_p (XEXP (x, 0), XEXP (y, 1)) + && rtx_equal_for_prefetch_p (XEXP (x, 1), XEXP (y, 0)))); + } + /* Compare the elements. If any pair of corresponding elements fails to + match, return 0 for the whole thing. */ + + fmt = GET_RTX_FORMAT (code); + for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) + { + switch (fmt[i]) + { + case 'w': + if (XWINT (x, i) != XWINT (y, i)) + return 0; + break; + + case 'i': + if (XINT (x, i) != XINT (y, i)) + return 0; + break; + + case 'E': + /* Two vectors must have the same length. */ + if (XVECLEN (x, i) != XVECLEN (y, i)) + return 0; + + /* And the corresponding elements must match. */ + for (j = 0; j < XVECLEN (x, i); j++) + if (rtx_equal_for_prefetch_p (XVECEXP (x, i, j), + XVECEXP (y, i, j)) == 0) + return 0; + break; + + case 'e': + if (rtx_equal_for_prefetch_p (XEXP (x, i), XEXP (y, i)) == 0) + return 0; + break; + + case 's': + if (strcmp (XSTR (x, i), XSTR (y, i))) + return 0; + break; + + case 'u': + /* These are just backpointers, so they don't matter. */ + break; + + case '0': + break; + + /* It is believed that rtx's at this level will never + contain anything but integers and other rtx's, + except for within LABEL_REFs and SYMBOL_REFs. */ + default: + abort (); + } + } + return 1; + } + + /* Remove constant addition value from the expression X (when present) + and return it. */ + + static HOST_WIDE_INT + remove_constant_addition (x) + rtx *x; + { + HOST_WIDE_INT addval = 0; + rtx exp = *x; + + /* Avoid clobbering a shared CONST expression. */ + if (GET_CODE (exp) == CONST) + { + if (GET_CODE (XEXP (exp, 0)) == PLUS + && GET_CODE (XEXP (XEXP (exp, 0), 0)) == SYMBOL_REF + && GET_CODE (XEXP (XEXP (exp, 0), 1)) == CONST_INT) + { + *x = XEXP (XEXP (exp, 0), 0); + return INTVAL (XEXP (XEXP (exp, 0), 1)); + } + return 0; + } + + if (GET_CODE (exp) == CONST_INT) + { + addval = INTVAL (exp); + *x = const0_rtx; + } + + /* For plus expression recurse on ourself. */ + else if (GET_CODE (exp) == PLUS) + { + addval += remove_constant_addition (&XEXP (exp, 0)); + addval += remove_constant_addition (&XEXP (exp, 1)); + + /* In case our parameter was constant, remove extra zero from the + expression. */ + if (XEXP (exp, 0) == const0_rtx) + *x = XEXP (exp, 1); + else if (XEXP (exp, 1) == const0_rtx) + *x = XEXP (exp, 0); + } + + return addval; + } + + /* Attempt to identify accesses to arrays that are most likely to cause cache + misses, and emit prefetch instructions a few prefetch blocks forward. + + To detect the arrays we use the GIV information that was collected by the + strength reduction pass. + + The prefetch instructions are generated after the GIV information is done + and before the strength reduction process. The new GIVs are injected into + the strength reduction tables, so the prefetch addresses are optimized as + well. + + GIVs are split into base address, stride, and constant addition values. + GIVs with the same address, stride and close addition values are combined + into a single prefetch. Also writes to GIVs are detected, so that prefetch + for write instructions can be used for the block we write to, on machines + that support write prefetches. + + Several heuristics are used to determine when to prefetch. They are + controlled by defined symbols that can be overridden for each target. */ + + static void + emit_prefetch_instructions (loop) + struct loop *loop; + { + int num_prefetches = 0; + int num_real_prefetches = 0; + int num_real_write_prefetches = 0; + int ahead; + int i; + struct iv_class *bl; + struct induction *iv; + struct prefetch_info info[MAX_PREFETCHES]; + struct loop_ivs *ivs = LOOP_IVS (loop); + + if (!HAVE_prefetch) + return; + + /* Consider only loops w/o calls. When a call is done, the loop is probably + slow enough to read the memory. */ + if (PREFETCH_NO_CALL && LOOP_INFO (loop)->has_call) + { + if (loop_dump_stream) + fprintf (loop_dump_stream, "Prefetch: ignoring loop - has call.\n"); + + return; + } + + if (PREFETCH_NO_LOW_LOOPCNT + && LOOP_INFO (loop)->n_iterations + && LOOP_INFO (loop)->n_iterations <= PREFETCH_LOW_LOOPCNT) + { + if (loop_dump_stream) + fprintf (loop_dump_stream, + "Prefetch: ignoring loop - not enought iterations.\n"); + return; + } + + /* Search all induction variables and pick those interesting for the prefetch + machinery. */ + for (bl = ivs->list; bl; bl = bl->next) + { + struct induction *biv = bl->biv, *biv1; + int basestride = 0; + + biv1 = biv; + + /* Expect all BIVs to be executed in each iteration. This makes our + analysis more conservative. */ + while (biv1) + { + /* Discard non-constant additions that we can't handle well yet, and + BIVs that are executed multiple times; such BIVs ought to be + handled in the nested loop. We accept not_every_iteration BIVs, + since these only result in larger strides and make our + heuristics more conservative. + ??? What does the last sentence mean? */ + if (GET_CODE (biv->add_val) != CONST_INT) + { + if (loop_dump_stream) + { + fprintf (loop_dump_stream, + "Prefetch: biv %i ignored: non-constant addition at insn %i:", + REGNO (biv->src_reg), INSN_UID (biv->insn)); + print_rtl (loop_dump_stream, biv->add_val); + fprintf (loop_dump_stream, "\n"); + } + break; + } + + if (biv->maybe_multiple) + { + if (loop_dump_stream) + { + fprintf (loop_dump_stream, + "Prefetch: biv %i ignored: maybe_multiple at insn %i:", + REGNO (biv->src_reg), INSN_UID (biv->insn)); + print_rtl (loop_dump_stream, biv->add_val); + fprintf (loop_dump_stream, "\n"); + } + break; + } + + basestride += INTVAL (biv1->add_val); + biv1 = biv1->next_iv; + } + + if (biv1 || !basestride) + continue; + + for (iv = bl->giv; iv; iv = iv->next_iv) + { + rtx address; + rtx temp; + HOST_WIDE_INT index = 0; + int add = 1; + HOST_WIDE_INT stride; + struct check_store_data d; + int size = GET_MODE_SIZE (GET_MODE (iv)); + + /* There are several reasons why an induction variable is not + interesting to us. */ + if (iv->giv_type != DEST_ADDR + /* We are interested only in constant stride memory references + in order to be able to compute density easily. */ + || GET_CODE (iv->mult_val) != CONST_INT + /* Don't handle reversed order prefetches, since they are usually + ineffective. Later we may be able to reverse such BIVs. */ + || (PREFETCH_NO_REVERSE_ORDER + && (stride = INTVAL (iv->mult_val) * basestride) < 0) + /* Prefetching of accesses with such an extreme stride is probably + not worthwhile, either. */ + || (PREFETCH_NO_EXTREME_STRIDE + && stride > PREFETCH_EXTREME_STRIDE) + /* Ignore GIVs with varying add values; we can't predict the + value for the next iteration. */ + || !loop_invariant_p (loop, iv->add_val) + /* Ignore GIVs in the nested loops; they ought to have been + handled already. */ + || iv->maybe_multiple) + { + if (loop_dump_stream) + fprintf (loop_dump_stream, "Prefetch: Ignoring giv at %i\n", + INSN_UID (iv->insn)); + continue; + } + + /* Determine the pointer to the basic array we are examining. It is + the sum of the BIV's initial value and the GIV's add_val. */ + index = 0; + + address = copy_rtx (iv->add_val); + temp = copy_rtx (bl->initial_value); + + address = simplify_gen_binary (PLUS, Pmode, temp, address); + index = remove_constant_addition (&address); + + index += size; + d.mem_write = 0; + d.mem_address = *iv->location; + + /* When the GIV is not always executed, we might be better off by + not dirtying the cache pages. */ + if (PREFETCH_NOT_ALWAYS || iv->always_executed) + note_stores (PATTERN (iv->insn), check_store, &d); + + /* Attempt to find another prefetch to the same array and see if we + can merge this one. */ + for (i = 0; i < num_prefetches; i++) + if (rtx_equal_for_prefetch_p (address, info[i].base_address) + && stride == info[i].stride) + { + /* In case both access same array (same location + just with small difference in constant indexes), merge + the prefetches. Just do the later and the earlier will + get prefetched from previous iteration. + 4096 is artificial threshold. It should not be too small, + but also not bigger than small portion of memory usually + traversed by single loop. */ + if (index >= info[i].index && index - info[i].index < 4096) + { + info[i].write |= d.mem_write; + info[i].bytes_accesed += size; + info[i].index = index; + info[i].giv = iv; + info[i].class = bl; + info[num_prefetches].base_address = address; + add = 0; + break; + } + + if (index < info[i].index && info[i].index - index < 4096) + { + info[i].write |= d.mem_write; + info[i].bytes_accesed += size; + add = 0; + break; + } + } + + /* Merging failed. */ + if (add) + { + info[num_prefetches].giv = iv; + info[num_prefetches].class = bl; + info[num_prefetches].index = index; + info[num_prefetches].stride = stride; + info[num_prefetches].base_address = address; + info[num_prefetches].write = d.mem_write; + info[num_prefetches].bytes_accesed = size; + num_prefetches++; + if (num_prefetches >= MAX_PREFETCHES) + { + if (loop_dump_stream) + fprintf (loop_dump_stream, + "Maximal number of prefetches exceeded.\n"); + return; + } + } + } + } + + for (i = 0; i < num_prefetches; i++) + { + /* Attempt to calculate the number of bytes fetched by the loop. + Avoid overflow. */ + if (LOOP_INFO (loop)->n_iterations + && ((unsigned HOST_WIDE_INT) (0xffffffff / info[i].stride) + >= LOOP_INFO (loop)->n_iterations)) + info[i].total_bytes = info[i].stride * LOOP_INFO (loop)->n_iterations; + else + info[i].total_bytes = 0xffffffff; + + /* Prefetch is worthwhile only when the loads/stores are dense. */ + if (PREFETCH_ONLY_DENSE_MEM + && info[i].bytes_accesed * 256 / info[i].stride > PREFETCH_DENSE_MEM + && (info[i].total_bytes / PREFETCH_BLOCK + >= PREFETCH_BLOCKS_BEFORE_LOOP_MIN)) + { + info[i].prefetch_before_loop = 1; + info[i].prefetch_in_loop + = (info[i].total_bytes / PREFETCH_BLOCK + > PREFETCH_BLOCKS_BEFORE_LOOP_MAX); + } + else + info[i].prefetch_in_loop = 0, info[i].prefetch_before_loop = 0; + + if (info[i].prefetch_in_loop) + { + num_real_prefetches += ((info[i].stride + PREFETCH_BLOCK - 1) + / PREFETCH_BLOCK); + if (info[i].write) + num_real_write_prefetches + += (info[i].stride + PREFETCH_BLOCK - 1) / PREFETCH_BLOCK; + } + } + + if (loop_dump_stream) + { + for (i = 0; i < num_prefetches; i++) + { + fprintf (loop_dump_stream, "Prefetch insn %i address: ", + INSN_UID (info[i].giv->insn)); + print_rtl (loop_dump_stream, info[i].base_address); + fprintf (loop_dump_stream, " Index: "); + fprintf (loop_dump_stream, HOST_WIDE_INT_PRINT_DEC, info[i].index); + fprintf (loop_dump_stream, " stride: "); + fprintf (loop_dump_stream, HOST_WIDE_INT_PRINT_DEC, info[i].stride); + fprintf (loop_dump_stream, + " density: %i%% total_bytes: %u%sin loop: %s before: %s\n", + (int) (info[i].bytes_accesed * 100 / info[i].stride), + info[i].total_bytes, + info[i].write ? " read/write " : " read only ", + info[i].prefetch_in_loop ? "yes" : "no", + info[i].prefetch_before_loop ? "yes" : "no"); + } + + fprintf (loop_dump_stream, "Real prefetches needed: %i (write: %i)\n", + num_real_prefetches, num_real_write_prefetches); + } + + if (!num_real_prefetches) + return; + + ahead = SIMULTANEOUS_PREFETCHES / num_real_prefetches; + + if (!ahead) + return; + + for (i = 0; i < num_prefetches; i++) + { + if (info[i].prefetch_in_loop) + { + int y; + + for (y = 0; y < ((info[i].stride + PREFETCH_BLOCK - 1) + / PREFETCH_BLOCK); y++) + { + rtx loc = copy_rtx (*info[i].giv->location); + rtx insn; + int bytes_ahead = PREFETCH_BLOCK * (ahead + y); + rtx before_insn = info[i].giv->insn; + rtx prev_insn = PREV_INSN (info[i].giv->insn); + + /* We can save some effort by offsetting the address on + architectures with offsettable memory references. */ + if (offsettable_address_p (0, VOIDmode, loc)) + loc = plus_constant (loc, bytes_ahead); + else + { + rtx reg = gen_reg_rtx (Pmode); + loop_iv_add_mult_emit_before (loop, loc, const1_rtx, + GEN_INT (bytes_ahead), reg, + 0, before_insn); + loc = reg; + } + + /* Make sure the address operand is valid for prefetch. */ + if (! (*insn_data[(int)CODE_FOR_prefetch].operand[0].predicate) + (loc, + insn_data[(int)CODE_FOR_prefetch].operand[0].mode)) + loc = force_reg (Pmode, loc); + emit_insn_before (gen_prefetch (loc, GEN_INT (info[i].write), + GEN_INT (3)), + before_insn); + + /* Check all insns emitted and record the new GIV + information. */ + insn = NEXT_INSN (prev_insn); + while (insn != before_insn) + { + insn = check_insn_for_givs (loop, insn, + info[i].giv->always_executed, + info[i].giv->maybe_multiple); + insn = NEXT_INSN (insn); + } + } + } + + if (info[i].prefetch_before_loop) + { + int y; + + /* Emit INSNs before the loop to fetch the first cache lines. */ + for (y = 0; + (!info[i].prefetch_in_loop || y < ahead) + && y * PREFETCH_BLOCK < (int) info[i].total_bytes; y ++) + { + rtx reg = gen_reg_rtx (Pmode); + rtx loop_start = loop->start; + rtx add_val = simplify_gen_binary (PLUS, Pmode, + info[i].giv->add_val, + GEN_INT (y * PREFETCH_BLOCK)); + + loop_iv_add_mult_emit_before (loop, info[i].class->initial_value, + info[i].giv->mult_val, + add_val, reg, 0, loop_start); + emit_insn_before (gen_prefetch (reg, GEN_INT (info[i].write), + GEN_INT (3)), + loop_start); + } + } + } + + return; + } + /* A "basic induction variable" or biv is a pseudo reg that is set (within this loop) only by incrementing or decrementing it. */ /* A "general induction variable" or giv is a pseudo reg whose *************** loop_bivs_find (loop) *** 3598,3604 **** ivs->list = 0; for_each_insn_in_loop (loop, check_insn_for_bivs); ! /* Scan ivs->list to remove all regs that proved not to be bivs. Make a sanity check against regs->n_times_set. */ for (backbl = &ivs->list, bl = *backbl; bl; bl = bl->next) --- 4311,4317 ---- ivs->list = 0; for_each_insn_in_loop (loop, check_insn_for_bivs); ! /* Scan ivs->list to remove all regs that proved not to be bivs. Make a sanity check against regs->n_times_set. */ for (backbl = &ivs->list, bl = *backbl; bl; bl = bl->next) *************** loop_bivs_check (loop) *** 3725,3732 **** if ((GET_MODE (src) == GET_MODE (regno_reg_rtx[bl->regno]) || GET_MODE (src) == VOIDmode) ! && valid_initial_value_p (src, bl->init_insn, ! LOOP_INFO (loop)->pre_header_has_call, loop->start)) { bl->initial_value = src; --- 4438,4445 ---- if ((GET_MODE (src) == GET_MODE (regno_reg_rtx[bl->regno]) || GET_MODE (src) == VOIDmode) ! && valid_initial_value_p (src, bl->init_insn, ! LOOP_INFO (loop)->pre_header_has_call, loop->start)) { bl->initial_value = src; *************** loop_givs_find (loop) *** 3757,3763 **** /* For each giv for which we still don't know whether or not it is replaceable, check to see if it is replaceable because its final value ! can be calculated. */ static void loop_givs_check (loop) --- 4470,4476 ---- /* For each giv for which we still don't know whether or not it is replaceable, check to see if it is replaceable because its final value ! can be calculated. */ static void loop_givs_check (loop) *************** loop_biv_eliminable_p (loop, bl, thresho *** 3809,3815 **** loop->start since these won't be affected by the value of the biv elsewhere in the function, so long as init_insn doesn't use the biv itself. */ ! if ((REGNO_LAST_LUID (bl->regno) < INSN_LUID (loop->end) && bl->init_insn && INSN_UID (bl->init_insn) < max_uid_for_loop --- 4522,4528 ---- loop->start since these won't be affected by the value of the biv elsewhere in the function, so long as init_insn doesn't use the biv itself. */ ! if ((REGNO_LAST_LUID (bl->regno) < INSN_LUID (loop->end) && bl->init_insn && INSN_UID (bl->init_insn) < max_uid_for_loop *************** loop_biv_eliminable_p (loop, bl, thresho *** 3817,3823 **** && ! reg_mentioned_p (bl->biv->dest_reg, SET_SRC (bl->init_set))) || (bl->final_value = final_biv_value (loop, bl))) return maybe_eliminate_biv (loop, bl, 0, threshold, insn_count); ! if (loop_dump_stream) { fprintf (loop_dump_stream, --- 4530,4536 ---- && ! reg_mentioned_p (bl->biv->dest_reg, SET_SRC (bl->init_set))) || (bl->final_value = final_biv_value (loop, bl))) return maybe_eliminate_biv (loop, bl, 0, threshold, insn_count); ! if (loop_dump_stream) { fprintf (loop_dump_stream, *************** loop_givs_reduce (loop, bl) *** 3847,3858 **** if (! v->ignore && v->same == 0) { int auto_inc_opt = 0; ! /* If the code for derived givs immediately below has already allocated a new_reg, we must keep it. */ if (! v->new_reg) v->new_reg = gen_reg_rtx (v->mode); ! #ifdef AUTO_INC_DEC /* If the target has auto-increment addressing modes, and this is an address giv, then try to put the increment --- 4560,4571 ---- if (! v->ignore && v->same == 0) { int auto_inc_opt = 0; ! /* If the code for derived givs immediately below has already allocated a new_reg, we must keep it. */ if (! v->new_reg) v->new_reg = gen_reg_rtx (v->mode); ! #ifdef AUTO_INC_DEC /* If the target has auto-increment addressing modes, and this is an address giv, then try to put the increment *************** loop_givs_reduce (loop, bl) *** 3869,3875 **** /* If other giv's have been combined with this one, then this will work only if all uses of the other giv's occur before this giv's insn. This is difficult to check. ! We simplify this by looking for the common case where there is one DEST_REG giv, and this giv's insn is the last use of the dest_reg of that DEST_REG giv. If the --- 4582,4588 ---- /* If other giv's have been combined with this one, then this will work only if all uses of the other giv's occur before this giv's insn. This is difficult to check. ! We simplify this by looking for the common case where there is one DEST_REG giv, and this giv's insn is the last use of the dest_reg of that DEST_REG giv. If the *************** loop_givs_reduce (loop, bl) *** 3881,3887 **** if (v->combined_with) { struct induction *other_giv = 0; ! for (tv = bl->giv; tv; tv = tv->next_iv) if (tv->same == v) { --- 4594,4600 ---- if (v->combined_with) { struct induction *other_giv = 0; ! for (tv = bl->giv; tv; tv = tv->next_iv) if (tv->same == v) { *************** loop_givs_reduce (loop, bl) *** 3909,3919 **** auto_inc_opt = -1; else auto_inc_opt = 1; ! #ifdef HAVE_cc0 { rtx prev; ! /* We can't put an insn immediately after one setting cc0, or immediately before one using cc0. */ if ((auto_inc_opt == 1 && sets_cc0_p (PATTERN (v->insn))) --- 4622,4632 ---- auto_inc_opt = -1; else auto_inc_opt = 1; ! #ifdef HAVE_cc0 { rtx prev; ! /* We can't put an insn immediately after one setting cc0, or immediately before one using cc0. */ if ((auto_inc_opt == 1 && sets_cc0_p (PATTERN (v->insn))) *************** loop_givs_reduce (loop, bl) *** 3924,3962 **** auto_inc_opt = 0; } #endif ! if (auto_inc_opt) v->auto_inc_opt = 1; } #endif ! /* For each place where the biv is incremented, add an insn to increment the new, reduced reg for the giv. */ for (tv = bl->biv; tv; tv = tv->next_iv) { rtx insert_before; ! if (! auto_inc_opt) insert_before = tv->insn; else if (auto_inc_opt == 1) insert_before = NEXT_INSN (v->insn); else insert_before = v->insn; ! if (tv->mult_val == const1_rtx) loop_iv_add_mult_emit_before (loop, tv->add_val, v->mult_val, ! v->new_reg, v->new_reg, 0, insert_before); else /* tv->mult_val == const0_rtx */ /* A multiply is acceptable here since this is presumed to be seldom executed. */ loop_iv_add_mult_emit_before (loop, tv->add_val, v->mult_val, ! v->add_val, v->new_reg, 0, insert_before); } ! /* Add code at loop start to initialize giv's reduced reg. */ ! loop_iv_add_mult_hoist (loop, extend_value_for_giv (v, bl->initial_value), v->mult_val, v->add_val, v->new_reg); --- 4637,4675 ---- auto_inc_opt = 0; } #endif ! if (auto_inc_opt) v->auto_inc_opt = 1; } #endif ! /* For each place where the biv is incremented, add an insn to increment the new, reduced reg for the giv. */ for (tv = bl->biv; tv; tv = tv->next_iv) { rtx insert_before; ! if (! auto_inc_opt) insert_before = tv->insn; else if (auto_inc_opt == 1) insert_before = NEXT_INSN (v->insn); else insert_before = v->insn; ! if (tv->mult_val == const1_rtx) loop_iv_add_mult_emit_before (loop, tv->add_val, v->mult_val, ! v->new_reg, v->new_reg, 0, insert_before); else /* tv->mult_val == const0_rtx */ /* A multiply is acceptable here since this is presumed to be seldom executed. */ loop_iv_add_mult_emit_before (loop, tv->add_val, v->mult_val, ! v->add_val, v->new_reg, 0, insert_before); } ! /* Add code at loop start to initialize giv's reduced reg. */ ! loop_iv_add_mult_hoist (loop, extend_value_for_giv (v, bl->initial_value), v->mult_val, v->add_val, v->new_reg); *************** loop_givs_dead_check (loop, bl) *** 3982,3993 **** if (v->ignore || (v->same && v->same->ignore)) continue; ! if (v->giv_type == DEST_REG && REGNO_FIRST_UID (REGNO (v->dest_reg)) == INSN_UID (v->insn)) { struct induction *v1; ! for (v1 = bl->giv; v1; v1 = v1->next_iv) if (REGNO_LAST_UID (REGNO (v->dest_reg)) == INSN_UID (v1->insn)) v->maybe_dead = 1; --- 4695,4706 ---- if (v->ignore || (v->same && v->same->ignore)) continue; ! if (v->giv_type == DEST_REG && REGNO_FIRST_UID (REGNO (v->dest_reg)) == INSN_UID (v->insn)) { struct induction *v1; ! for (v1 = bl->giv; v1; v1 = v1->next_iv) if (REGNO_LAST_UID (REGNO (v->dest_reg)) == INSN_UID (v1->insn)) v->maybe_dead = 1; *************** loop_givs_rescan (loop, bl, reg_map) *** 4008,4023 **** { if (v->same && v->same->ignore) v->ignore = 1; ! if (v->ignore) continue; ! /* Update expression if this was combined, in case other giv was replaced. */ if (v->same) v->new_reg = replace_rtx (v->new_reg, v->same->dest_reg, v->same->new_reg); ! /* See if this register is known to be a pointer to something. If so, see if we can find the alignment. First see if there is a destination register that is a pointer. If so, this shares the --- 4721,4736 ---- { if (v->same && v->same->ignore) v->ignore = 1; ! if (v->ignore) continue; ! /* Update expression if this was combined, in case other giv was replaced. */ if (v->same) v->new_reg = replace_rtx (v->new_reg, v->same->dest_reg, v->same->new_reg); ! /* See if this register is known to be a pointer to something. If so, see if we can find the alignment. First see if there is a destination register that is a pointer. If so, this shares the *************** loop_givs_rescan (loop, bl, reg_map) *** 4034,4045 **** && REG_POINTER (v->src_reg)) { unsigned int align = REGNO_POINTER_ALIGN (REGNO (v->src_reg)); ! if (align == 0 || GET_CODE (v->add_val) != CONST_INT || INTVAL (v->add_val) % (align / BITS_PER_UNIT) != 0) align = 0; ! mark_reg_pointer (v->new_reg, align); } else if (GET_CODE (v->new_reg) == REG --- 4747,4758 ---- && REG_POINTER (v->src_reg)) { unsigned int align = REGNO_POINTER_ALIGN (REGNO (v->src_reg)); ! if (align == 0 || GET_CODE (v->add_val) != CONST_INT || INTVAL (v->add_val) % (align / BITS_PER_UNIT) != 0) align = 0; ! mark_reg_pointer (v->new_reg, align); } else if (GET_CODE (v->new_reg) == REG *************** loop_givs_rescan (loop, bl, reg_map) *** 4047,4062 **** && REG_POINTER (v->add_val)) { unsigned int align = REGNO_POINTER_ALIGN (REGNO (v->add_val)); ! if (align == 0 || GET_CODE (v->mult_val) != CONST_INT || INTVAL (v->mult_val) % (align / BITS_PER_UNIT) != 0) align = 0; ! mark_reg_pointer (v->new_reg, align); } else if (GET_CODE (v->new_reg) == REG && v->giv_type == DEST_ADDR) mark_reg_pointer (v->new_reg, 0); ! if (v->giv_type == DEST_ADDR) /* Store reduced reg as the address in the memref where we found this giv. */ --- 4760,4775 ---- && REG_POINTER (v->add_val)) { unsigned int align = REGNO_POINTER_ALIGN (REGNO (v->add_val)); ! if (align == 0 || GET_CODE (v->mult_val) != CONST_INT || INTVAL (v->mult_val) % (align / BITS_PER_UNIT) != 0) align = 0; ! mark_reg_pointer (v->new_reg, align); } else if (GET_CODE (v->new_reg) == REG && v->giv_type == DEST_ADDR) mark_reg_pointer (v->new_reg, 0); ! if (v->giv_type == DEST_ADDR) /* Store reduced reg as the address in the memref where we found this giv. */ *************** loop_givs_rescan (loop, bl, reg_map) *** 4069,4091 **** { /* Not replaceable; emit an insn to set the original giv reg from the reduced giv, same as above. */ ! loop_insn_emit_after (loop, 0, v->insn, gen_move_insn (v->dest_reg, v->new_reg)); } ! /* When a loop is reversed, givs which depend on the reversed biv, and which are live outside the loop, must be set to their correct final value. This insn is only needed if the giv is not replaceable. The correct final value is the same as the value that the giv starts the reversed loop with. */ if (bl->reversed && ! v->replaceable) ! loop_iv_add_mult_sink (loop, extend_value_for_giv (v, bl->initial_value), v->mult_val, v->add_val, v->dest_reg); else if (v->final_value) ! loop_insn_sink_or_swim (loop, gen_move_insn (v->dest_reg, v->final_value)); ! if (loop_dump_stream) { fprintf (loop_dump_stream, "giv at %d reduced to ", --- 4782,4804 ---- { /* Not replaceable; emit an insn to set the original giv reg from the reduced giv, same as above. */ ! loop_insn_emit_after (loop, 0, v->insn, gen_move_insn (v->dest_reg, v->new_reg)); } ! /* When a loop is reversed, givs which depend on the reversed biv, and which are live outside the loop, must be set to their correct final value. This insn is only needed if the giv is not replaceable. The correct final value is the same as the value that the giv starts the reversed loop with. */ if (bl->reversed && ! v->replaceable) ! loop_iv_add_mult_sink (loop, extend_value_for_giv (v, bl->initial_value), v->mult_val, v->add_val, v->dest_reg); else if (v->final_value) ! loop_insn_sink_or_swim (loop, gen_move_insn (v->dest_reg, v->final_value)); ! if (loop_dump_stream) { fprintf (loop_dump_stream, "giv at %d reduced to ", *************** loop_giv_reduce_benefit (loop, bl, v, te *** 4111,4117 **** PUT_MODE (test_reg, v->mode); add_cost = iv_add_mult_cost (bl->biv->add_val, v->mult_val, test_reg, test_reg); ! /* Reduce benefit if not replaceable, since we will insert a move-insn to replace the insn that calculates this giv. Don't do this unless the giv is a user variable, since it will often be --- 4824,4830 ---- PUT_MODE (test_reg, v->mode); add_cost = iv_add_mult_cost (bl->biv->add_val, v->mult_val, test_reg, test_reg); ! /* Reduce benefit if not replaceable, since we will insert a move-insn to replace the insn that calculates this giv. Don't do this unless the giv is a user variable, since it will often be *************** loop_giv_reduce_benefit (loop, bl, v, te *** 4125,4131 **** if (! v->replaceable && ! bl->eliminable && REG_USERVAR_P (v->dest_reg)) benefit -= copy_cost; ! /* Decrease the benefit to count the add-insns that we will insert to increment the reduced reg for the giv. ??? This can overestimate the run-time cost of the additional insns, e.g. if --- 4838,4844 ---- if (! v->replaceable && ! bl->eliminable && REG_USERVAR_P (v->dest_reg)) benefit -= copy_cost; ! /* Decrease the benefit to count the add-insns that we will insert to increment the reduced reg for the giv. ??? This can overestimate the run-time cost of the additional insns, e.g. if *************** loop_ivs_free (loop) *** 4180,4186 **** { struct loop_ivs *ivs = LOOP_IVS (loop); struct iv_class *iv = ivs->list; ! free (ivs->regs); while (iv) --- 4893,4899 ---- { struct loop_ivs *ivs = LOOP_IVS (loop); struct iv_class *iv = ivs->list; ! free (ivs->regs); while (iv) *************** loop_ivs_free (loop) *** 4188,4194 **** struct iv_class *next = iv->next; struct induction *induction; struct induction *next_induction; ! for (induction = iv->biv; induction; induction = next_induction) { next_induction = induction->next_iv; --- 4901,4907 ---- struct iv_class *next = iv->next; struct induction *induction; struct induction *next_induction; ! for (induction = iv->biv; induction; induction = next_induction) { next_induction = induction->next_iv; *************** loop_ivs_free (loop) *** 4199,4205 **** next_induction = induction->next_iv; free (induction); } ! free (iv); iv = next; } --- 4912,4918 ---- next_induction = induction->next_iv; free (induction); } ! free (iv); iv = next; } *************** strength_reduce (loop, flags) *** 4276,4281 **** --- 4989,4999 ---- fail if the iteration variable is a giv. */ loop_iterations (loop); + #ifdef HAVE_prefetch + if (flags & LOOP_PREFETCH) + emit_prefetch_instructions (loop); + #endif + /* Now for each giv for which we still don't know whether or not it is replaceable, check to see if it is replaceable because its final value can be calculated. This must be done after loop_iterations is called, *************** strength_reduce (loop, flags) *** 4300,4306 **** { struct induction *v; int benefit; ! /* Test whether it will be possible to eliminate this biv provided all givs are reduced. */ bl->eliminable = loop_biv_eliminable_p (loop, bl, threshold, insn_count); --- 5018,5024 ---- { struct induction *v; int benefit; ! /* Test whether it will be possible to eliminate this biv provided all givs are reduced. */ bl->eliminable = loop_biv_eliminable_p (loop, bl, threshold, insn_count); *************** strength_reduce (loop, flags) *** 4312,4318 **** /* Check each extension dependent giv in this class to see if its root biv is safe from wrapping in the interior mode. */ ! check_ext_dependant_givs (bl, loop_info); /* Combine all giv's for this iv_class. */ combine_givs (regs, bl); --- 5030,5036 ---- /* Check each extension dependent giv in this class to see if its root biv is safe from wrapping in the interior mode. */ ! check_ext_dependent_givs (bl, loop_info); /* Combine all giv's for this iv_class. */ combine_givs (regs, bl); *************** strength_reduce (loop, flags) *** 4443,4448 **** --- 5161,5171 ---- fprintf (loop_dump_stream, "Reg %d: biv eliminated\n", bl->regno); } + /* See above note wrt final_value. But since we couldn't eliminate + the biv, we must set the value after the loop instead of before. */ + else if (bl->final_value && ! bl->reversed) + loop_insn_sink (loop, gen_move_insn (bl->biv->dest_reg, + bl->final_value)); } /* Go through all the instructions in the loop, making all the *************** strength_reduce (loop, flags) *** 4489,4495 **** collected. Always unroll loops that would be as small or smaller unrolled than when rolled. */ if ((flags & LOOP_UNROLL) ! || (loop_info->n_iterations > 0 && unrolled_insn_copies <= insn_count)) unroll_loop (loop, insn_count, 1); --- 5212,5219 ---- collected. Always unroll loops that would be as small or smaller unrolled than when rolled. */ if ((flags & LOOP_UNROLL) ! || (!(flags & LOOP_FIRST_PASS) ! && loop_info->n_iterations > 0 && unrolled_insn_copies <= insn_count)) unroll_loop (loop, insn_count, 1); *************** strength_reduce (loop, flags) *** 4498,4503 **** --- 5222,5239 ---- doloop_optimize (loop); #endif /* HAVE_doloop_end */ + /* In case number of iterations is known, drop branch prediction note + in the branch. Do that only in second loop pass, as loop unrolling + may change the number of iterations performed. */ + if ((flags & LOOP_BCT) + && loop_info->n_iterations / loop_info->unroll_number > 1) + { + int n = loop_info->n_iterations / loop_info->unroll_number; + predict_insn (PREV_INSN (loop->end), + PRED_LOOP_ITERATIONS, + REG_BR_PROB_BASE - REG_BR_PROB_BASE / n); + } + if (loop_dump_stream) fprintf (loop_dump_stream, "\n"); *************** check_insn_for_givs (loop, p, not_every_ *** 4618,4624 **** record_giv (loop, v, p, src_reg, dest_reg, mult_val, add_val, ext_val, benefit, DEST_REG, not_every_iteration, ! maybe_multiple, NULL_PTR); } } --- 5354,5360 ---- record_giv (loop, v, p, src_reg, dest_reg, mult_val, add_val, ext_val, benefit, DEST_REG, not_every_iteration, ! maybe_multiple, (rtx*) 0); } } *************** find_mem_givs (loop, x, insn, not_every_ *** 4692,4700 **** rtx insn; int not_every_iteration, maybe_multiple; { ! register int i, j; ! register enum rtx_code code; ! register const char *fmt; if (x == 0) return; --- 5428,5436 ---- rtx insn; int not_every_iteration, maybe_multiple; { ! int i, j; ! enum rtx_code code; ! const char *fmt; if (x == 0) return; *************** find_mem_givs (loop, x, insn, not_every_ *** 4727,4733 **** /* This code used to disable creating GIVs with mult_val == 1 and add_val == 0. However, this leads to lost optimizations when it comes time to combine a set of related DEST_ADDR GIVs, since ! this one would not be seen. */ if (general_induction_var (loop, XEXP (x, 0), &src_reg, &add_val, &mult_val, &ext_val, 1, &benefit, --- 5463,5469 ---- /* This code used to disable creating GIVs with mult_val == 1 and add_val == 0. However, this leads to lost optimizations when it comes time to combine a set of related DEST_ADDR GIVs, since ! this one would not be seen. */ if (general_induction_var (loop, XEXP (x, 0), &src_reg, &add_val, &mult_val, &ext_val, 1, &benefit, *************** record_biv (loop, v, insn, dest_reg, inc *** 4800,4806 **** v->dest_reg = dest_reg; v->mult_val = mult_val; v->add_val = inc_val; ! v->ext_dependant = NULL_RTX; v->location = location; v->mode = GET_MODE (dest_reg); v->always_computable = ! not_every_iteration; --- 5536,5542 ---- v->dest_reg = dest_reg; v->mult_val = mult_val; v->add_val = inc_val; ! v->ext_dependent = NULL_RTX; v->location = location; v->mode = GET_MODE (dest_reg); v->always_computable = ! not_every_iteration; *************** record_giv (loop, v, insn, src_reg, dest *** 4888,4896 **** rtx set = single_set (insn); rtx temp; ! /* Attempt to prove constantness of the values. */ temp = simplify_rtx (add_val); ! if (temp) add_val = temp; v->insn = insn; --- 5624,5635 ---- rtx set = single_set (insn); rtx temp; ! /* Attempt to prove constantness of the values. Don't let simplity_rtx ! undo the MULT canonicalization that we performed earlier. */ temp = simplify_rtx (add_val); ! if (temp ! && ! (GET_CODE (add_val) == MULT ! && GET_CODE (temp) == ASHIFT)) add_val = temp; v->insn = insn; *************** record_giv (loop, v, insn, src_reg, dest *** 4899,4905 **** v->dest_reg = dest_reg; v->mult_val = mult_val; v->add_val = add_val; ! v->ext_dependant = ext_val; v->benefit = benefit; v->location = location; v->cant_derive = 0; --- 5638,5644 ---- v->dest_reg = dest_reg; v->mult_val = mult_val; v->add_val = add_val; ! v->ext_dependent = ext_val; v->benefit = benefit; v->location = location; v->cant_derive = 0; *************** record_giv (loop, v, insn, src_reg, dest *** 4975,4986 **** { /* The giv can be replaced outright by the reduced register only if all of the following conditions are true: ! - the insn that sets the giv is always executed on any iteration on which the giv is used at all (there are two ways to deduce this: either the insn is executed on every iteration, or all uses follow that insn in the same basic block), ! - the giv is not used outside the loop - no assignments to the biv occur during the giv's lifetime. */ if (REGNO_FIRST_UID (REGNO (dest_reg)) == INSN_UID (insn) --- 5714,5725 ---- { /* The giv can be replaced outright by the reduced register only if all of the following conditions are true: ! - the insn that sets the giv is always executed on any iteration on which the giv is used at all (there are two ways to deduce this: either the insn is executed on every iteration, or all uses follow that insn in the same basic block), ! - the giv is not used outside the loop - no assignments to the biv occur during the giv's lifetime. */ if (REGNO_FIRST_UID (REGNO (dest_reg)) == INSN_UID (insn) *************** update_giv_derive (loop, p) *** 5363,5369 **** static int basic_induction_var (loop, x, mode, dest_reg, p, inc_val, mult_val, location) const struct loop *loop; ! register rtx x; enum machine_mode mode; rtx dest_reg; rtx p; --- 6102,6108 ---- static int basic_induction_var (loop, x, mode, dest_reg, p, inc_val, mult_val, location) const struct loop *loop; ! rtx x; enum machine_mode mode; rtx dest_reg; rtx p; *************** basic_induction_var (loop, x, mode, dest *** 5371,5377 **** rtx *mult_val; rtx **location; { ! register enum rtx_code code; rtx *argp, arg; rtx insn, set = 0; --- 6110,6116 ---- rtx *mult_val; rtx **location; { ! enum rtx_code code; rtx *argp, arg; rtx insn, set = 0; *************** basic_induction_var (loop, x, mode, dest *** 5407,5419 **** return 1; case SUBREG: ! /* If this is a SUBREG for a promoted variable, check the inner ! value. */ ! if (SUBREG_PROMOTED_VAR_P (x)) ! return basic_induction_var (loop, SUBREG_REG (x), ! GET_MODE (SUBREG_REG (x)), ! dest_reg, p, inc_val, mult_val, location); ! return 0; case REG: /* If this register is assigned in a previous insn, look at its --- 6146,6158 ---- return 1; case SUBREG: ! /* If what's inside the SUBREG is a BIV, then the SUBREG. This will ! handle addition of promoted variables. ! ??? The comment at the start of this function is wrong: promoted ! variable increments don't look like it says they do. */ ! return basic_induction_var (loop, SUBREG_REG (x), ! GET_MODE (SUBREG_REG (x)), ! dest_reg, p, inc_val, mult_val, location); case REG: /* If this register is assigned in a previous insn, look at its *************** basic_induction_var (loop, x, mode, dest *** 5464,5470 **** /* Fall through. */ /* Can accept constant setting of biv only when inside inner most loop. ! Otherwise, a biv of an inner loop may be incorrectly recognized as a biv of the outer loop, causing code to be moved INTO the inner loop. */ case MEM: --- 6203,6209 ---- /* Fall through. */ /* Can accept constant setting of biv only when inside inner most loop. ! Otherwise, a biv of an inner loop may be incorrectly recognized as a biv of the outer loop, causing code to be moved INTO the inner loop. */ case MEM: *************** basic_induction_var (loop, x, mode, dest *** 5475,5484 **** case CONST: /* convert_modes aborts if we try to convert to or from CCmode, so just exclude that case. It is very unlikely that a condition code value ! would be a useful iterator anyways. */ if (loop->level == 1 ! && GET_MODE_CLASS (mode) != MODE_CC ! && GET_MODE_CLASS (GET_MODE (dest_reg)) != MODE_CC) { /* Possible bug here? Perhaps we don't know the mode of X. */ *inc_val = convert_modes (GET_MODE (dest_reg), mode, x, 0); --- 6214,6224 ---- case CONST: /* convert_modes aborts if we try to convert to or from CCmode, so just exclude that case. It is very unlikely that a condition code value ! would be a useful iterator anyways. convert_modes aborts if we try to ! convert a float mode to non-float or vice versa too. */ if (loop->level == 1 ! && GET_MODE_CLASS (mode) == GET_MODE_CLASS (GET_MODE (dest_reg)) ! && GET_MODE_CLASS (mode) != MODE_CC) { /* Possible bug here? Perhaps we don't know the mode of X. */ *inc_val = convert_modes (GET_MODE (dest_reg), mode, x, 0); *************** general_induction_var (loop, x, src_reg, *** 5626,5632 **** /* Given an expression, X, try to form it as a linear function of a biv. We will canonicalize it to be of the form ! (plus (mult (BIV) (invar_1)) (invar_2)) with possible degeneracies. --- 6366,6372 ---- /* Given an expression, X, try to form it as a linear function of a biv. We will canonicalize it to be of the form ! (plus (mult (BIV) (invar_1)) (invar_2)) with possible degeneracies. *************** simplify_giv_expr (loop, x, ext_val, ben *** 5692,5698 **** case CONST_INT: case USE: /* Adding two invariants must result in an invariant, so enclose ! addition operation inside a USE and return it. */ if (GET_CODE (arg0) == USE) arg0 = XEXP (arg0, 0); if (GET_CODE (arg1) == USE) --- 6432,6438 ---- case CONST_INT: case USE: /* Adding two invariants must result in an invariant, so enclose ! addition operation inside a USE and return it. */ if (GET_CODE (arg0) == USE) arg0 = XEXP (arg0, 0); if (GET_CODE (arg1) == USE) *************** simplify_giv_expr (loop, x, ext_val, ben *** 5743,5755 **** tem = arg0, arg0 = arg1, arg1 = tem; if (GET_CODE (arg1) == PLUS) ! return ! simplify_giv_expr (loop, ! gen_rtx_PLUS (mode, ! gen_rtx_PLUS (mode, arg0, ! XEXP (arg1, 0)), ! XEXP (arg1, 1)), ! ext_val, benefit); /* Now must have MULT + MULT. Distribute if same biv, else not giv. */ if (GET_CODE (arg0) != MULT || GET_CODE (arg1) != MULT) --- 6483,6495 ---- tem = arg0, arg0 = arg1, arg1 = tem; if (GET_CODE (arg1) == PLUS) ! return ! simplify_giv_expr (loop, ! gen_rtx_PLUS (mode, ! gen_rtx_PLUS (mode, arg0, ! XEXP (arg1, 0)), ! XEXP (arg1, 1)), ! ext_val, benefit); /* Now must have MULT + MULT. Distribute if same biv, else not giv. */ if (GET_CODE (arg0) != MULT || GET_CODE (arg1) != MULT) *************** simplify_giv_expr (loop, x, ext_val, ben *** 5960,5971 **** arg0 = simplify_giv_expr (loop, tem, ext_val, benefit); if (*ext_val) { ! if (!v->ext_dependant) return arg0; } else { ! *ext_val = v->ext_dependant; return arg0; } return 0; --- 6700,6711 ---- arg0 = simplify_giv_expr (loop, tem, ext_val, benefit); if (*ext_val) { ! if (!v->ext_dependent) return arg0; } else { ! *ext_val = v->ext_dependent; return arg0; } return 0; *************** consec_sets_giv (loop, first_benefit, p, *** 6182,6188 **** v->benefit = first_benefit; v->cant_derive = 0; v->derive_adjustment = 0; ! v->ext_dependant = NULL_RTX; REG_IV_TYPE (ivs, REGNO (dest_reg)) = GENERAL_INDUCT; REG_IV_INFO (ivs, REGNO (dest_reg)) = v; --- 6922,6928 ---- v->benefit = first_benefit; v->cant_derive = 0; v->derive_adjustment = 0; ! v->ext_dependent = NULL_RTX; REG_IV_TYPE (ivs, REGNO (dest_reg)) = GENERAL_INDUCT; REG_IV_INFO (ivs, REGNO (dest_reg)) = v; *************** consec_sets_giv (loop, first_benefit, p, *** 6246,6252 **** it cannot possibly be a valid address, 0 is returned. To perform the computation, we note that ! G1 = x * v + a and G2 = y * v + b where `v' is the biv. --- 6986,6992 ---- it cannot possibly be a valid address, 0 is returned. To perform the computation, we note that ! G1 = x * v + a and G2 = y * v + b where `v' is the biv. *************** express_from_1 (a, b, mult) *** 6337,6343 **** } else if (CONSTANT_P (a)) { ! return simplify_gen_binary (MINUS, GET_MODE (b) != VOIDmode ? GET_MODE (b) : GET_MODE (a), b, a); } else if (GET_CODE (b) == PLUS) { --- 7077,7086 ---- } else if (CONSTANT_P (a)) { ! enum machine_mode mode_a = GET_MODE (a); ! enum machine_mode mode_b = GET_MODE (b); ! enum machine_mode mode = mode_b == VOIDmode ? mode_a : mode_b; ! return simplify_gen_binary (MINUS, mode, b, a); } else if (GET_CODE (b) == PLUS) { *************** combine_givs_p (g1, g2) *** 6442,6448 **** { rtx comb, ret; ! /* With the introduction of ext dependant givs, we must care for modes. G2 must not use a wider mode than G1. */ if (GET_MODE_SIZE (g1->mode) < GET_MODE_SIZE (g2->mode)) return NULL_RTX; --- 7185,7191 ---- { rtx comb, ret; ! /* With the introduction of ext dependent givs, we must care for modes. G2 must not use a wider mode than G1. */ if (GET_MODE_SIZE (g1->mode) < GET_MODE_SIZE (g2->mode)) return NULL_RTX; *************** combine_givs_p (g1, g2) *** 6488,6499 **** return NULL_RTX; } ! /* Check each extension dependant giv in this class to see if its root biv is safe from wrapping in the interior mode, which would make the giv illegal. */ static void ! check_ext_dependant_givs (bl, loop_info) struct iv_class *bl; struct loop_info *loop_info; { --- 7231,7242 ---- return NULL_RTX; } ! /* Check each extension dependent giv in this class to see if its root biv is safe from wrapping in the interior mode, which would make the giv illegal. */ static void ! check_ext_dependent_givs (bl, loop_info) struct iv_class *bl; struct loop_info *loop_info; { *************** check_ext_dependant_givs (bl, loop_info) *** 6578,6586 **** /* Invalidate givs that fail the tests. */ for (v = bl->giv; v; v = v->next_iv) ! if (v->ext_dependant) { ! enum rtx_code code = GET_CODE (v->ext_dependant); int ok = 0; switch (code) --- 7321,7329 ---- /* Invalidate givs that fail the tests. */ for (v = bl->giv; v; v = v->next_iv) ! if (v->ext_dependent) { ! enum rtx_code code = GET_CODE (v->ext_dependent); int ok = 0; switch (code) *************** check_ext_dependant_givs (bl, loop_info) *** 6600,6606 **** derived GIV. */ if (se_ok && ze_ok) { ! enum machine_mode outer_mode = GET_MODE (v->ext_dependant); unsigned HOST_WIDE_INT max = GET_MODE_MASK (outer_mode) >> 1; /* We know from the above that both endpoints are nonnegative, --- 7343,7349 ---- derived GIV. */ if (se_ok && ze_ok) { ! enum machine_mode outer_mode = GET_MODE (v->ext_dependent); unsigned HOST_WIDE_INT max = GET_MODE_MASK (outer_mode) >> 1; /* We know from the above that both endpoints are nonnegative, *************** check_ext_dependant_givs (bl, loop_info) *** 6620,6626 **** if (loop_dump_stream) { fprintf (loop_dump_stream, ! "Verified ext dependant giv at %d of reg %d\n", INSN_UID (v->insn), bl->regno); } } --- 7363,7369 ---- if (loop_dump_stream) { fprintf (loop_dump_stream, ! "Verified ext dependent giv at %d of reg %d\n", INSN_UID (v->insn), bl->regno); } } *************** check_ext_dependant_givs (bl, loop_info) *** 6643,6649 **** } fprintf (loop_dump_stream, ! "Failed ext dependant giv at %d, %s\n", INSN_UID (v->insn), why); } v->ignore = 1; --- 7386,7392 ---- } fprintf (loop_dump_stream, ! "Failed ext dependent giv at %d, %s\n", INSN_UID (v->insn), why); } v->ignore = 1; *************** extend_value_for_giv (v, value) *** 6659,6670 **** struct induction *v; rtx value; { ! rtx ext_dep = v->ext_dependant; if (! ext_dep) return value; ! /* Recall that check_ext_dependant_givs verified that the known bounds of a biv did not overflow or wrap with respect to the extension for the giv. Therefore, constants need no additional adjustment. */ if (CONSTANT_P (value) && GET_MODE (value) == VOIDmode) --- 7402,7413 ---- struct induction *v; rtx value; { ! rtx ext_dep = v->ext_dependent; if (! ext_dep) return value; ! /* Recall that check_ext_dependent_givs verified that the known bounds of a biv did not overflow or wrap with respect to the extension for the giv. Therefore, constants need no additional adjustment. */ if (CONSTANT_P (value) && GET_MODE (value) == VOIDmode) *************** restart: *** 6811,6816 **** --- 7554,7566 ---- g2->new_reg = can_combine[i * giv_count + j]; g2->same = g1; + /* For destination, we now may replace by mem expression instead + of register. This changes the costs considerably, so add the + compensation. */ + if (g2->giv_type == DEST_ADDR) + g2->benefit = (g2->benefit + reg_address_cost + - address_cost (g2->new_reg, + GET_MODE (g2->mem))); g1->combined_with++; g1->lifetime += g2->lifetime; *************** loop_regs_update (loop, seq) *** 6910,6920 **** record_base_value (REGNO (SET_DEST (set)), SET_SRC (set), 0); } } ! else { ! rtx set = single_set (seq); ! if (set && GET_CODE (SET_DEST (set)) == REG) ! record_base_value (REGNO (SET_DEST (set)), SET_SRC (set), 0); } } --- 7660,7670 ---- record_base_value (REGNO (SET_DEST (set)), SET_SRC (set), 0); } } ! else { ! if (GET_CODE (seq) == SET ! && GET_CODE (SET_DEST (seq)) == REG) ! record_base_value (REGNO (SET_DEST (seq)), SET_SRC (seq), 0); } } *************** loop_iv_add_mult_emit_before (loop, b, m *** 6940,6946 **** } /* Use copy_rtx to prevent unexpected sharing of these rtx. */ ! seq = gen_add_mult (copy_rtx (b), m, copy_rtx (a), reg); /* Increase the lifetime of any invariants moved further in code. */ update_reg_last_use (a, before_insn); --- 7690,7696 ---- } /* Use copy_rtx to prevent unexpected sharing of these rtx. */ ! seq = gen_add_mult (copy_rtx (b), copy_rtx (m), copy_rtx (a), reg); /* Increase the lifetime of any invariants moved further in code. */ update_reg_last_use (a, before_insn); *************** loop_iv_add_mult_sink (loop, b, m, a, re *** 6968,6974 **** rtx seq; /* Use copy_rtx to prevent unexpected sharing of these rtx. */ ! seq = gen_add_mult (copy_rtx (b), m, copy_rtx (a), reg); /* Increase the lifetime of any invariants moved further in code. ???? Is this really necessary? */ --- 7718,7724 ---- rtx seq; /* Use copy_rtx to prevent unexpected sharing of these rtx. */ ! seq = gen_add_mult (copy_rtx (b), copy_rtx (m), copy_rtx (a), reg); /* Increase the lifetime of any invariants moved further in code. ???? Is this really necessary? */ *************** loop_iv_add_mult_hoist (loop, b, m, a, r *** 6997,7003 **** rtx seq; /* Use copy_rtx to prevent unexpected sharing of these rtx. */ ! seq = gen_add_mult (copy_rtx (b), m, copy_rtx (a), reg); loop_insn_hoist (loop, seq); --- 7747,7753 ---- rtx seq; /* Use copy_rtx to prevent unexpected sharing of these rtx. */ ! seq = gen_add_mult (copy_rtx (b), copy_rtx (m), copy_rtx (a), reg); loop_insn_hoist (loop, seq); *************** check_dbra_loop (loop, insn_count) *** 7273,7279 **** which is reversible. */ int reversible_mem_store = 1; ! if (bl->giv_count == 0 && ! loop->exit_count) { rtx bivreg = regno_reg_rtx[bl->regno]; struct iv_class *blt; --- 8023,8031 ---- which is reversible. */ int reversible_mem_store = 1; ! if (bl->giv_count == 0 ! && !loop->exit_count ! && !loop_info->has_multiple_exit_targets) { rtx bivreg = regno_reg_rtx[bl->regno]; struct iv_class *blt; *************** check_dbra_loop (loop, insn_count) *** 7314,7322 **** } } ! /* A biv has uses besides counting if it is used to set another biv. */ for (blt = ivs->list; blt; blt = blt->next) ! if (blt->init_set && reg_mentioned_p (bivreg, SET_SRC (blt->init_set))) { no_use_except_counting = 0; break; --- 8066,8076 ---- } } ! /* A biv has uses besides counting if it is used to set ! another biv. */ for (blt = ivs->list; blt; blt = blt->next) ! if (blt->init_set ! && reg_mentioned_p (bivreg, SET_SRC (blt->init_set))) { no_use_except_counting = 0; break; *************** check_dbra_loop (loop, insn_count) *** 7526,7534 **** /* Save some info needed to produce the new insns. */ reg = bl->biv->dest_reg; ! jump_label = XEXP (SET_SRC (PATTERN (PREV_INSN (loop_end))), 1); ! if (jump_label == pc_rtx) ! jump_label = XEXP (SET_SRC (PATTERN (PREV_INSN (loop_end))), 2); new_add_val = GEN_INT (-INTVAL (bl->biv->add_val)); /* Set start_value; if this is not a CONST_INT, we need --- 8280,8286 ---- /* Save some info needed to produce the new insns. */ reg = bl->biv->dest_reg; ! jump_label = condjump_label (PREV_INSN (loop_end)); new_add_val = GEN_INT (-INTVAL (bl->biv->add_val)); /* Set start_value; if this is not a CONST_INT, we need *************** check_dbra_loop (loop, insn_count) *** 7544,7564 **** } else if (GET_CODE (initial_value) == CONST_INT) { - rtx offset = GEN_INT (-INTVAL (initial_value) - add_adjust); enum machine_mode mode = GET_MODE (reg); ! enum insn_code icode ! = add_optab->handlers[(int) mode].insn_code; ! if (! (*insn_data[icode].operand[0].predicate) (reg, mode) ! || ! ((*insn_data[icode].operand[1].predicate) ! (comparison_value, mode)) ! || ! ((*insn_data[icode].operand[2].predicate) ! (offset, mode))) return 0; start_value = gen_rtx_PLUS (mode, comparison_value, offset); ! loop_insn_hoist (loop, (GEN_FCN (icode) ! (reg, comparison_value, offset))); if (GET_CODE (comparison) == LE) final_value = gen_rtx_PLUS (mode, comparison_value, GEN_INT (add_val)); --- 8296,8311 ---- } else if (GET_CODE (initial_value) == CONST_INT) { enum machine_mode mode = GET_MODE (reg); ! rtx offset = GEN_INT (-INTVAL (initial_value) - add_adjust); ! rtx add_insn = gen_add3_insn (reg, comparison_value, offset); ! if (add_insn == 0) return 0; + start_value = gen_rtx_PLUS (mode, comparison_value, offset); ! loop_insn_hoist (loop, add_insn); if (GET_CODE (comparison) == LE) final_value = gen_rtx_PLUS (mode, comparison_value, GEN_INT (add_val)); *************** check_dbra_loop (loop, insn_count) *** 7566,7584 **** else if (! add_adjust) { enum machine_mode mode = GET_MODE (reg); ! enum insn_code icode ! = sub_optab->handlers[(int) mode].insn_code; ! if (! (*insn_data[icode].operand[0].predicate) (reg, mode) ! || ! ((*insn_data[icode].operand[1].predicate) ! (comparison_value, mode)) ! || ! ((*insn_data[icode].operand[2].predicate) ! (initial_value, mode))) return 0; start_value = gen_rtx_MINUS (mode, comparison_value, initial_value); ! loop_insn_hoist (loop, (GEN_FCN (icode) ! (reg, comparison_value, ! initial_value))); } else /* We could handle the other cases too, but it'll be --- 8313,8326 ---- else if (! add_adjust) { enum machine_mode mode = GET_MODE (reg); ! rtx sub_insn = gen_sub3_insn (reg, comparison_value, ! initial_value); ! ! if (sub_insn == 0) return 0; start_value = gen_rtx_MINUS (mode, comparison_value, initial_value); ! loop_insn_hoist (loop, sub_insn); } else /* We could handle the other cases too, but it'll be *************** check_dbra_loop (loop, insn_count) *** 7621,7634 **** loop_insn_sink (loop, gen_move_insn (reg, final_value)); /* Delete compare/branch at end of loop. */ ! delete_insn (PREV_INSN (loop_end)); if (compare_and_branch == 2) ! delete_insn (first_compare); /* Add new compare/branch insn at end of loop. */ start_sequence (); emit_cmp_and_jump_insns (reg, const0_rtx, cmp_code, NULL_RTX, ! GET_MODE (reg), 0, 0, XEXP (jump_label, 0)); tem = gen_sequence (); end_sequence (); --- 8363,8376 ---- loop_insn_sink (loop, gen_move_insn (reg, final_value)); /* Delete compare/branch at end of loop. */ ! delete_related_insns (PREV_INSN (loop_end)); if (compare_and_branch == 2) ! delete_related_insns (first_compare); /* Add new compare/branch insn at end of loop. */ start_sequence (); emit_cmp_and_jump_insns (reg, const0_rtx, cmp_code, NULL_RTX, ! GET_MODE (reg), 0, XEXP (jump_label, 0)); tem = gen_sequence (); end_sequence (); *************** maybe_eliminate_biv_1 (loop, x, insn, bl *** 8073,8079 **** v->new_reg, 1); /* Compute value to compare against. */ ! loop_iv_add_mult_emit_before (loop, arg, v->mult_val, v->add_val, tem, where_bb, where_insn); /* Use it in this insn. */ --- 8815,8821 ---- v->new_reg, 1); /* Compute value to compare against. */ ! loop_iv_add_mult_emit_before (loop, arg, v->mult_val, v->add_val, tem, where_bb, where_insn); /* Use it in this insn. */ *************** maybe_eliminate_biv_1 (loop, x, insn, bl *** 8111,8117 **** v->new_reg, 1); /* Compute value to compare against. */ ! loop_iv_add_mult_emit_before (loop, arg, v->mult_val, v->add_val, tem, where_bb, where_insn); validate_change (insn, &XEXP (x, arg_operand), tem, 1); --- 8853,8859 ---- v->new_reg, 1); /* Compute value to compare against. */ ! loop_iv_add_mult_emit_before (loop, arg, v->mult_val, v->add_val, tem, where_bb, where_insn); validate_change (insn, &XEXP (x, arg_operand), tem, 1); *************** maybe_eliminate_biv_1 (loop, x, insn, bl *** 8147,8153 **** if (v->ignore || v->maybe_dead || v->mode != mode) continue; ! for (tv = REG_IV_CLASS (ivs, REGNO (arg))->giv; tv; tv = tv->next_iv) if (! tv->ignore && ! tv->maybe_dead && rtx_equal_p (tv->mult_val, v->mult_val) --- 8889,8895 ---- if (v->ignore || v->maybe_dead || v->mode != mode) continue; ! for (tv = REG_IV_CLASS (ivs, REGNO (arg))->giv; tv; tv = tv->next_iv) if (! tv->ignore && ! tv->maybe_dead && rtx_equal_p (tv->mult_val, v->mult_val) *************** update_reg_last_use (x, insn) *** 8269,8276 **** /* Check for the case where INSN does not have a valid luid. In this case, there is no need to modify the regno_last_uid, as this can only happen when code is inserted after the loop_end to set a pseudo's final value, ! and hence this insn will never be the last use of x. ! ???? This comment is not correct. See for example loop_givs_reduce. This may insert an insn before another new insn. */ if (GET_CODE (x) == REG && REGNO (x) < max_reg_before_loop && INSN_UID (insn) < max_uid_for_loop --- 9011,9018 ---- /* Check for the case where INSN does not have a valid luid. In this case, there is no need to modify the regno_last_uid, as this can only happen when code is inserted after the loop_end to set a pseudo's final value, ! and hence this insn will never be the last use of x. ! ???? This comment is not correct. See for example loop_givs_reduce. This may insert an insn before another new insn. */ if (GET_CODE (x) == REG && REGNO (x) < max_reg_before_loop && INSN_UID (insn) < max_uid_for_loop *************** update_reg_last_use (x, insn) *** 8280,8287 **** } else { ! register int i, j; ! register const char *fmt = GET_RTX_FORMAT (GET_CODE (x)); for (i = GET_RTX_LENGTH (GET_CODE (x)) - 1; i >= 0; i--) { if (fmt[i] == 'e') --- 9022,9029 ---- } else { ! int i, j; ! const char *fmt = GET_RTX_FORMAT (GET_CODE (x)); for (i = GET_RTX_LENGTH (GET_CODE (x)) - 1; i >= 0; i--) { if (fmt[i] == 'e') *************** canonicalize_condition (insn, cond, reve *** 8330,8336 **** rtx tem; rtx op0, op1; int reverse_code = 0; - int did_reverse_condition = 0; enum machine_mode mode; code = GET_CODE (cond); --- 9072,9077 ---- *************** canonicalize_condition (insn, cond, reve *** 8339,8348 **** op1 = XEXP (cond, 1); if (reverse) ! { ! code = reverse_condition (code); ! did_reverse_condition ^= 1; ! } if (earliest) *earliest = insn; --- 9080,9088 ---- op1 = XEXP (cond, 1); if (reverse) ! code = reversed_comparison_code (cond, insn); ! if (code == UNKNOWN) ! return 0; if (earliest) *earliest = insn; *************** canonicalize_condition (insn, cond, reve *** 8393,8405 **** if ((prev = prev_nonnote_insn (prev)) == 0 || GET_CODE (prev) != INSN ! || FIND_REG_INC_NOTE (prev, 0) ! || (set = single_set (prev)) == 0) break; /* If this is setting OP0, get what it sets it to if it looks relevant. */ ! if (rtx_equal_p (SET_DEST (set), op0)) { enum machine_mode inner_mode = GET_MODE (SET_DEST (set)); --- 9133,9151 ---- if ((prev = prev_nonnote_insn (prev)) == 0 || GET_CODE (prev) != INSN ! || FIND_REG_INC_NOTE (prev, NULL_RTX)) ! break; ! ! set = set_of (op0, prev); ! ! if (set ! && (GET_CODE (set) != SET ! || !rtx_equal_p (SET_DEST (set), op0))) break; /* If this is setting OP0, get what it sets it to if it looks relevant. */ ! if (set) { enum machine_mode inner_mode = GET_MODE (SET_DEST (set)); *************** canonicalize_condition (insn, cond, reve *** 8459,8468 **** || mode == VOIDmode || inner_mode == VOIDmode)) { - /* We might have reversed a LT to get a GE here. But this wasn't - actually the comparison of data, so we don't flag that we - have had to reverse the condition. */ - did_reverse_condition ^= 1; reverse_code = 1; x = SET_SRC (set); } --- 9205,9210 ---- *************** canonicalize_condition (insn, cond, reve *** 8480,8489 **** code = GET_CODE (x); if (reverse_code) { ! code = reverse_condition (code); if (code == UNKNOWN) return 0; - did_reverse_condition ^= 1; reverse_code = 0; } --- 9222,9230 ---- code = GET_CODE (x); if (reverse_code) { ! code = reversed_comparison_code (x, prev); if (code == UNKNOWN) return 0; reverse_code = 0; } *************** canonicalize_condition (insn, cond, reve *** 8546,8560 **** } } - /* If this was floating-point and we reversed anything other than an - EQ or NE or (UN)ORDERED, return zero. */ - if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT - && did_reverse_condition - && code != NE && code != EQ && code != UNORDERED && code != ORDERED - && ! flag_fast_math - && GET_MODE_CLASS (GET_MODE (op0)) == MODE_FLOAT) - return 0; - #ifdef HAVE_cc0 /* Never return CC0; return zero instead. */ if (op0 == cc0_rtx) --- 9287,9292 ---- *************** get_condition_for_loop (loop, x) *** 8608,8614 **** const struct loop *loop; rtx x; { ! rtx comparison = get_condition (x, NULL_PTR); if (comparison == 0 || ! loop_invariant_p (loop, XEXP (comparison, 0)) --- 9340,9346 ---- const struct loop *loop; rtx x; { ! rtx comparison = get_condition (x, (rtx*) 0); if (comparison == 0 || ! loop_invariant_p (loop, XEXP (comparison, 0)) *************** loop_regs_scan (loop, extra_size) *** 8750,8756 **** if (regs->num >= regs->size) { regs->size = regs->num + extra_size; ! regs->array = (struct loop_reg *) xrealloc (regs->array, regs->size * sizeof (*regs->array)); --- 9482,9488 ---- if (regs->num >= regs->size) { regs->size = regs->num + extra_size; ! regs->array = (struct loop_reg *) xrealloc (regs->array, regs->size * sizeof (*regs->array)); *************** loop_regs_scan (loop, extra_size) *** 8787,8793 **** count_one_set (regs, insn, PATTERN (insn), last_set); else if (GET_CODE (PATTERN (insn)) == PARALLEL) { ! register int i; for (i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--) count_one_set (regs, insn, XVECEXP (PATTERN (insn), 0, i), last_set); --- 9519,9525 ---- count_one_set (regs, insn, PATTERN (insn), last_set); else if (GET_CODE (PATTERN (insn)) == PARALLEL) { ! int i; for (i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--) count_one_set (regs, insn, XVECEXP (PATTERN (insn), 0, i), last_set); *************** loop_regs_scan (loop, extra_size) *** 8798,8808 **** memset (last_set, 0, regs->num * sizeof (rtx)); } ! for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) ! { ! regs->array[i].may_not_optimize = 1; ! regs->array[i].set_in_loop = 1; ! } #ifdef AVOID_CCMODE_COPIES /* Don't try to move insns which set CC registers if we should not --- 9530,9547 ---- memset (last_set, 0, regs->num * sizeof (rtx)); } ! /* Invalidate all hard registers clobbered by calls. With one exception: ! a call-clobbered PIC register is still function-invariant for our ! purposes, since we can hoist any PIC calculations out of the loop. ! Thus the call to rtx_varies_p. */ ! if (LOOP_INFO (loop)->has_call) ! for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) ! if (TEST_HARD_REG_BIT (regs_invalidated_by_call, i) ! && rtx_varies_p (gen_rtx_REG (Pmode, i), /*for_alias=*/1)) ! { ! regs->array[i].may_not_optimize = 1; ! regs->array[i].set_in_loop = 1; ! } #ifdef AVOID_CCMODE_COPIES /* Don't try to move insns which set CC registers if we should not *************** loop_regs_scan (loop, extra_size) *** 8811,8817 **** if (GET_MODE_CLASS (GET_MODE (regno_reg_rtx[i])) == MODE_CC) regs->array[i].may_not_optimize = 1; #endif ! /* Set regs->array[I].n_times_set for the new registers. */ for (i = old_nregs; i < regs->num; i++) regs->array[i].n_times_set = regs->array[i].set_in_loop; --- 9550,9556 ---- if (GET_MODE_CLASS (GET_MODE (regno_reg_rtx[i])) == MODE_CC) regs->array[i].may_not_optimize = 1; #endif ! /* Set regs->array[I].n_times_set for the new registers. */ for (i = old_nregs; i < regs->num; i++) regs->array[i].n_times_set = regs->array[i].set_in_loop; *************** load_mems (loop) *** 9113,9121 **** } if (const_equiv) ! REG_NOTES (set) = gen_rtx_EXPR_LIST (REG_EQUAL, ! copy_rtx (const_equiv->loc), ! REG_NOTES (set)); if (written) { --- 9852,9858 ---- } if (const_equiv) ! set_unique_reg_note (set, REG_EQUAL, copy_rtx (const_equiv->loc)); if (written) { *************** try_copy_prop (loop, replacement, regno) *** 9264,9270 **** arg.set_seen = 0; note_stores (PATTERN (insn), note_reg_stored, &arg); if (arg.set_seen) ! break; } } if (! init_insn) --- 10001,10016 ---- arg.set_seen = 0; note_stores (PATTERN (insn), note_reg_stored, &arg); if (arg.set_seen) ! { ! rtx note = find_reg_note (insn, REG_EQUAL, NULL); ! ! /* It is possible that we've turned previously valid REG_EQUAL to ! invalid, as we change the REGNO to REPLACEMENT and unlike REGNO, ! REPLACEMENT is modified, we get different meaning. */ ! if (note && reg_mentioned_p (replacement, XEXP (note, 0))) ! remove_note (insn, note); ! break; ! } } } if (! init_insn) *************** loop_delete_insns (first, last) *** 9306,9316 **** { while (1) { - PUT_CODE (first, NOTE); - NOTE_LINE_NUMBER (first) = NOTE_INSN_DELETED; if (loop_dump_stream) fprintf (loop_dump_stream, ", deleting init_insn (%d)", INSN_UID (first)); /* If this was the LAST instructions we're supposed to delete, we're done. */ --- 10052,10061 ---- { while (1) { if (loop_dump_stream) fprintf (loop_dump_stream, ", deleting init_insn (%d)", INSN_UID (first)); + delete_insn (first); /* If this was the LAST instructions we're supposed to delete, we're done. */ *************** loop_iv_class_dump (bl, file, verbose) *** 9702,9708 **** /* List the givs. */ for (i = 0, v = bl->giv; v; v = v->next_iv, i++) { ! fprintf (file, " Giv%d: insn %d, benefit %d, ", i, INSN_UID (v->insn), v->benefit); if (v->giv_type == DEST_ADDR) print_simple_rtl (file, v->mem); --- 10447,10453 ---- /* List the givs. */ for (i = 0, v = bl->giv; v; v = v->next_iv, i++) { ! fprintf (file, " Giv%d: insn %d, benefit %d, ", i, INSN_UID (v->insn), v->benefit); if (v->giv_type == DEST_ADDR) print_simple_rtl (file, v->mem); *************** loop_biv_dump (v, file, verbose) *** 9730,9736 **** if (verbose && v->final_value) { ! fputc ('\n', file); fprintf (file, " final "); print_simple_rtl (file, v->final_value); } --- 10475,10481 ---- if (verbose && v->final_value) { ! fputc ('\n', file); fprintf (file, " final "); print_simple_rtl (file, v->final_value); } *************** loop_giv_dump (v, file, verbose) *** 9750,9774 **** if (v->giv_type == DEST_REG) fprintf (file, "Giv %d: insn %d", ! REGNO (v->dest_reg), INSN_UID (v->insn)); else fprintf (file, "Dest address: insn %d", INSN_UID (v->insn)); ! fprintf (file, " src reg %d benefit %d", REGNO (v->src_reg), v->benefit); fprintf (file, " lifetime %d", v->lifetime); ! if (v->replaceable) fprintf (file, " replaceable"); ! if (v->no_const_addval) fprintf (file, " ncav"); ! ! if (v->ext_dependant) { ! switch (GET_CODE (v->ext_dependant)) { case SIGN_EXTEND: fprintf (file, " ext se"); --- 10495,10519 ---- if (v->giv_type == DEST_REG) fprintf (file, "Giv %d: insn %d", ! REGNO (v->dest_reg), INSN_UID (v->insn)); else fprintf (file, "Dest address: insn %d", INSN_UID (v->insn)); ! fprintf (file, " src reg %d benefit %d", REGNO (v->src_reg), v->benefit); fprintf (file, " lifetime %d", v->lifetime); ! if (v->replaceable) fprintf (file, " replaceable"); ! if (v->no_const_addval) fprintf (file, " ncav"); ! ! if (v->ext_dependent) { ! switch (GET_CODE (v->ext_dependent)) { case SIGN_EXTEND: fprintf (file, " ext se"); *************** loop_giv_dump (v, file, verbose) *** 9778,9805 **** break; case TRUNCATE: fprintf (file, " ext tr"); ! break; default: abort (); } } ! fputc ('\n', file); fprintf (file, " mult "); print_simple_rtl (file, v->mult_val); ! fputc ('\n', file); fprintf (file, " add "); print_simple_rtl (file, v->add_val); if (verbose && v->final_value) { ! fputc ('\n', file); fprintf (file, " final "); print_simple_rtl (file, v->final_value); } ! fputc ('\n', file); } --- 10523,10550 ---- break; case TRUNCATE: fprintf (file, " ext tr"); ! break; default: abort (); } } ! fputc ('\n', file); fprintf (file, " mult "); print_simple_rtl (file, v->mult_val); ! fputc ('\n', file); fprintf (file, " add "); print_simple_rtl (file, v->add_val); if (verbose && v->final_value) { ! fputc ('\n', file); fprintf (file, " final "); print_simple_rtl (file, v->final_value); } ! fputc ('\n', file); } diff -Nrc3pad gcc-3.0.4/gcc/loop.h gcc-3.1/gcc/loop.h *** gcc-3.0.4/gcc/loop.h Fri May 11 15:49:29 2001 --- gcc-3.1/gcc/loop.h Wed Apr 3 07:53:51 2002 *************** *** 1,23 **** /* Loop optimization definitions for GNU C-Compiler ! Copyright (C) 1991, 1995, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "bitmap.h" #include "sbitmap.h" --- 1,23 ---- /* Loop optimization definitions for GNU C-Compiler ! Copyright (C) 1991, 1995, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "bitmap.h" #include "sbitmap.h" *************** Boston, MA 02111-1307, USA. */ *** 27,44 **** /* Flags passed to loop_optimize. */ #define LOOP_UNROLL 1 #define LOOP_BCT 2 /* Get the loop info pointer of a loop. */ #define LOOP_INFO(LOOP) ((struct loop_info *) (LOOP)->aux) /* Get a pointer to the loop movables structure. */ ! #define LOOP_MOVABLES(LOOP) (&LOOP_INFO (loop)->movables) /* Get a pointer to the loop registers structure. */ ! #define LOOP_REGS(LOOP) (&LOOP_INFO (loop)->regs) /* Get a pointer to the loop induction variables structure. */ ! #define LOOP_IVS(LOOP) (&LOOP_INFO (loop)->ivs) /* Get the luid of an insn. Catch the error of trying to reference the LUID of an insn added during loop, since these don't have LUIDs. */ --- 27,46 ---- /* Flags passed to loop_optimize. */ #define LOOP_UNROLL 1 #define LOOP_BCT 2 + #define LOOP_PREFETCH 4 + #define LOOP_FIRST_PASS 8 /* Get the loop info pointer of a loop. */ #define LOOP_INFO(LOOP) ((struct loop_info *) (LOOP)->aux) /* Get a pointer to the loop movables structure. */ ! #define LOOP_MOVABLES(LOOP) (&LOOP_INFO (LOOP)->movables) /* Get a pointer to the loop registers structure. */ ! #define LOOP_REGS(LOOP) (&LOOP_INFO (LOOP)->regs) /* Get a pointer to the loop induction variables structure. */ ! #define LOOP_IVS(LOOP) (&LOOP_INFO (LOOP)->ivs) /* Get the luid of an insn. Catch the error of trying to reference the LUID of an insn added during loop, since these don't have LUIDs. */ *************** struct induction *** 135,142 **** subtracted from add_val when this giv derives another. This occurs when the giv spans a biv update by incrementation. */ ! rtx ext_dependant; /* If nonzero, is a sign or zero extension ! if a biv on which this giv is dependant. */ struct induction *next_iv; /* For givs, links together all givs that are based on the same biv. For bivs, links together all biv entries that refer to the --- 137,144 ---- subtracted from add_val when this giv derives another. This occurs when the giv spans a biv update by incrementation. */ ! rtx ext_dependent; /* If nonzero, is a sign or zero extension ! if a biv on which this giv is dependent. */ struct induction *next_iv; /* For givs, links together all givs that are based on the same biv. For bivs, links together all biv entries that refer to the *************** struct iv_class *** 184,190 **** unsigned reversed : 1; /* 1 if we reversed the loop that this biv controls. */ unsigned all_reduced : 1; /* 1 if all givs using this biv have ! been reduced. */ }; --- 186,192 ---- unsigned reversed : 1; /* 1 if we reversed the loop that this biv controls. */ unsigned all_reduced : 1; /* 1 if all givs using this biv have ! been reduced. */ }; diff -Nrc3pad gcc-3.0.4/gcc/machmode.def gcc-3.1/gcc/machmode.def *** gcc-3.0.4/gcc/machmode.def Thu Dec 7 01:47:31 2000 --- gcc-3.1/gcc/machmode.def Sun Mar 24 08:13:15 2002 *************** *** 2,26 **** machine modes used in the GNU compiler. Copyright (C) 1987, 1992, 1994, 1997, 1998, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ ! /* This file defines all the MACHINE MODES used by GNU CC. A machine mode specifies a size and format of data at the machine level. --- 2,26 ---- machine modes used in the GNU compiler. Copyright (C) 1987, 1992, 1994, 1997, 1998, 2000 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ ! /* This file defines all the MACHINE MODES used by GCC. A machine mode specifies a size and format of data at the machine level. *************** Boston, MA 02111-1307, USA. */ *** 59,149 **** It is same as the fifth argument except for complexes and vectors, since they are really made of many equal size subunits. ! Seventh arg is next wider natural mode of the same class. ! 0 if there is none. */ /* VOIDmode is used when no mode needs to be specified, as for example on CONST_INT RTL expressions. */ ! DEF_MACHMODE (VOIDmode, "VOID", MODE_RANDOM, 0, 0, 0, VOIDmode) ! DEF_MACHMODE (BImode, "BI", MODE_INT, 1, 1, 1, QImode) ! DEF_MACHMODE (QImode, "QI", MODE_INT, BITS_PER_UNIT, 1, 1, HImode) ! DEF_MACHMODE (HImode, "HI", MODE_INT, BITS_PER_UNIT*2, 2, 2, SImode) ! DEF_MACHMODE (SImode, "SI", MODE_INT, BITS_PER_UNIT*4, 4, 4, DImode) ! DEF_MACHMODE (DImode, "DI", MODE_INT, BITS_PER_UNIT*8, 8, 8, TImode) ! DEF_MACHMODE (TImode, "TI", MODE_INT, BITS_PER_UNIT*16, 16, 16, OImode) ! DEF_MACHMODE (OImode, "OI", MODE_INT, BITS_PER_UNIT*32, 32, 32, VOIDmode) /* Pointers on some machines use these types to distinguish them from ints. Useful if a pointer is 4 bytes but has some bits that are not significant, so it is really not quite as wide as an integer. */ ! DEF_MACHMODE (PQImode, "PQI", MODE_PARTIAL_INT, BITS_PER_UNIT, 1, 1, PHImode) ! DEF_MACHMODE (PHImode, "PHI", MODE_PARTIAL_INT, BITS_PER_UNIT*2, 2, 2, PSImode) ! DEF_MACHMODE (PSImode, "PSI", MODE_PARTIAL_INT, BITS_PER_UNIT*4, 4, 4, PDImode) ! DEF_MACHMODE (PDImode, "PDI", MODE_PARTIAL_INT, BITS_PER_UNIT*8, 8, 8, VOIDmode) ! DEF_MACHMODE (QFmode, "QF", MODE_FLOAT, BITS_PER_UNIT, 1, 1, HFmode) ! DEF_MACHMODE (HFmode, "HF", MODE_FLOAT, BITS_PER_UNIT*2, 2, 2, TQFmode) ! DEF_MACHMODE (TQFmode, "TQF", MODE_FLOAT, BITS_PER_UNIT*3, 3, 3, SFmode) /* MIL-STD-1750A */ ! DEF_MACHMODE (SFmode, "SF", MODE_FLOAT, BITS_PER_UNIT*4, 4, 4, DFmode) ! DEF_MACHMODE (DFmode, "DF", MODE_FLOAT, BITS_PER_UNIT*8, 8, 8, XFmode) ! DEF_MACHMODE (XFmode, "XF", MODE_FLOAT, BITS_PER_UNIT*12, 12, 12, TFmode) /* IEEE extended */ ! DEF_MACHMODE (TFmode, "TF", MODE_FLOAT, BITS_PER_UNIT*16, 16, 16, VOIDmode) /* Complex modes. */ ! DEF_MACHMODE (QCmode, "QC", MODE_COMPLEX_FLOAT, BITS_PER_UNIT*2, 2, 1, HCmode) ! DEF_MACHMODE (HCmode, "HC", MODE_COMPLEX_FLOAT, BITS_PER_UNIT*4, 4, 2, SCmode) ! DEF_MACHMODE (SCmode, "SC", MODE_COMPLEX_FLOAT, BITS_PER_UNIT*8, 8, 4, DCmode) ! DEF_MACHMODE (DCmode, "DC", MODE_COMPLEX_FLOAT, BITS_PER_UNIT*16, 16, 8, XCmode) ! DEF_MACHMODE (XCmode, "XC", MODE_COMPLEX_FLOAT, BITS_PER_UNIT*24, 24, 12, TCmode) ! DEF_MACHMODE (TCmode, "TC", MODE_COMPLEX_FLOAT, BITS_PER_UNIT*32, 32, 16, VOIDmode) ! DEF_MACHMODE (CQImode, "CQI", MODE_COMPLEX_INT, BITS_PER_UNIT*2, 2, 1, CHImode) ! DEF_MACHMODE (CHImode, "CHI", MODE_COMPLEX_INT, BITS_PER_UNIT*4, 4, 2, CSImode) ! DEF_MACHMODE (CSImode, "CSI", MODE_COMPLEX_INT, BITS_PER_UNIT*8, 8, 4, CDImode) ! DEF_MACHMODE (CDImode, "CDI", MODE_COMPLEX_INT, BITS_PER_UNIT*16, 16, 8, CTImode) ! DEF_MACHMODE (CTImode, "CTI", MODE_COMPLEX_INT, BITS_PER_UNIT*32, 32, 16, COImode) ! DEF_MACHMODE (COImode, "COI", MODE_COMPLEX_INT, BITS_PER_UNIT*64, 64, 32, VOIDmode) /* Vector modes. */ /* There are no V1xx vector modes. These are equivalent to normal scalar modes. */ ! DEF_MACHMODE (V2QImode, "V2QI", MODE_VECTOR_INT, BITS_PER_UNIT*2, 2, 1, VOIDmode) ! DEF_MACHMODE (V2HImode, "V2HI", MODE_VECTOR_INT, BITS_PER_UNIT*4, 4, 2, VOIDmode) ! DEF_MACHMODE (V2SImode, "V2SI", MODE_VECTOR_INT, BITS_PER_UNIT*8, 8, 4, VOIDmode) ! DEF_MACHMODE (V2DImode, "V2DI", MODE_VECTOR_INT, BITS_PER_UNIT*16, 16, 8, VOIDmode) ! DEF_MACHMODE (V4QImode, "V4QI", MODE_VECTOR_INT, BITS_PER_UNIT*4, 4, 1, VOIDmode) ! DEF_MACHMODE (V4HImode, "V4HI", MODE_VECTOR_INT, BITS_PER_UNIT*8, 8, 2, VOIDmode) ! DEF_MACHMODE (V4SImode, "V4SI", MODE_VECTOR_INT, BITS_PER_UNIT*16, 16, 4, VOIDmode) ! DEF_MACHMODE (V4DImode, "V4DI", MODE_VECTOR_INT, BITS_PER_UNIT*32, 32, 8, VOIDmode) ! DEF_MACHMODE (V8QImode, "V8QI", MODE_VECTOR_INT, BITS_PER_UNIT*8, 8, 1, VOIDmode) ! DEF_MACHMODE (V8HImode, "V8HI", MODE_VECTOR_INT, BITS_PER_UNIT*16, 16, 2, VOIDmode) ! DEF_MACHMODE (V8SImode, "V8SI", MODE_VECTOR_INT, BITS_PER_UNIT*32, 32, 4, VOIDmode) ! DEF_MACHMODE (V8DImode, "V8DI", MODE_VECTOR_INT, BITS_PER_UNIT*64, 64, 8, VOIDmode) ! DEF_MACHMODE (V16QImode, "V16QI", MODE_VECTOR_INT, BITS_PER_UNIT*16, 16, 1, VOIDmode) ! DEF_MACHMODE (V2SFmode, "V2SF", MODE_VECTOR_FLOAT, BITS_PER_UNIT*8, 8, 4, VOIDmode) ! DEF_MACHMODE (V2DFmode, "V2DF", MODE_VECTOR_FLOAT, BITS_PER_UNIT*16, 16, 8, VOIDmode) ! DEF_MACHMODE (V4SFmode, "V4SF", MODE_VECTOR_FLOAT, BITS_PER_UNIT*16, 16, 4, VOIDmode) ! DEF_MACHMODE (V4DFmode, "V4DF", MODE_VECTOR_FLOAT, BITS_PER_UNIT*32, 32, 8, VOIDmode) ! DEF_MACHMODE (V8SFmode, "V8SF", MODE_VECTOR_FLOAT, BITS_PER_UNIT*32, 32, 4, VOIDmode) ! DEF_MACHMODE (V8DFmode, "V8DF", MODE_VECTOR_FLOAT, BITS_PER_UNIT*64, 64, 8, VOIDmode) /* BLKmode is used for structures, arrays, etc. that fit no more specific mode. */ ! DEF_MACHMODE (BLKmode, "BLK", MODE_RANDOM, 0, 0, 0, VOIDmode) /* The modes for representing the condition codes come last. CCmode is always defined. Additional modes for the condition code can be specified in the EXTRA_CC_MODES macro. All MODE_CC modes are the same width as SImode and have VOIDmode as their next wider mode. */ ! #define CC(E, M) DEF_MACHMODE (E, M, MODE_CC, BITS_PER_UNIT*4, 4, 4, VOIDmode) CC (CCmode, "CC") --- 59,160 ---- It is same as the fifth argument except for complexes and vectors, since they are really made of many equal size subunits. ! Seventh arg is next wider natural mode of the same class. 0 if ! there is none. Vector modes use this field to point to the next ! vector size, so we can iterate through the different vectors modes. ! The ordering is by increasing byte size, with QI coming before HI, ! HI before SI, etc. ! ! Eigth arg is the mode of the internal elements in a vector or ! complex, and VOIDmode if not applicable. ! */ /* VOIDmode is used when no mode needs to be specified, as for example on CONST_INT RTL expressions. */ ! DEF_MACHMODE (VOIDmode, "VOID", MODE_RANDOM, 0, 0, 0, VOIDmode, VOIDmode) ! DEF_MACHMODE (BImode, "BI", MODE_INT, 1, 1, 1, QImode, VOIDmode) ! DEF_MACHMODE (QImode, "QI", MODE_INT, BITS_PER_UNIT, 1, 1, HImode, VOIDmode) ! DEF_MACHMODE (HImode, "HI", MODE_INT, BITS_PER_UNIT*2, 2, 2, SImode, VOIDmode) ! DEF_MACHMODE (SImode, "SI", MODE_INT, BITS_PER_UNIT*4, 4, 4, DImode, VOIDmode) ! DEF_MACHMODE (DImode, "DI", MODE_INT, BITS_PER_UNIT*8, 8, 8, TImode, VOIDmode) ! DEF_MACHMODE (TImode, "TI", MODE_INT, BITS_PER_UNIT*16, 16, 16, OImode, VOIDmode) ! DEF_MACHMODE (OImode, "OI", MODE_INT, BITS_PER_UNIT*32, 32, 32, VOIDmode, VOIDmode) /* Pointers on some machines use these types to distinguish them from ints. Useful if a pointer is 4 bytes but has some bits that are not significant, so it is really not quite as wide as an integer. */ ! DEF_MACHMODE (PQImode, "PQI", MODE_PARTIAL_INT, BITS_PER_UNIT, 1, 1, PHImode, VOIDmode) ! DEF_MACHMODE (PHImode, "PHI", MODE_PARTIAL_INT, BITS_PER_UNIT*2, 2, 2, PSImode, VOIDmode) ! DEF_MACHMODE (PSImode, "PSI", MODE_PARTIAL_INT, BITS_PER_UNIT*4, 4, 4, PDImode, VOIDmode) ! DEF_MACHMODE (PDImode, "PDI", MODE_PARTIAL_INT, BITS_PER_UNIT*8, 8, 8, VOIDmode, VOIDmode) ! DEF_MACHMODE (QFmode, "QF", MODE_FLOAT, BITS_PER_UNIT, 1, 1, HFmode, VOIDmode) ! DEF_MACHMODE (HFmode, "HF", MODE_FLOAT, BITS_PER_UNIT*2, 2, 2, TQFmode, VOIDmode) ! DEF_MACHMODE (TQFmode, "TQF", MODE_FLOAT, BITS_PER_UNIT*3, 3, 3, SFmode, VOIDmode) /* MIL-STD-1750A */ ! DEF_MACHMODE (SFmode, "SF", MODE_FLOAT, BITS_PER_UNIT*4, 4, 4, DFmode, VOIDmode) ! DEF_MACHMODE (DFmode, "DF", MODE_FLOAT, BITS_PER_UNIT*8, 8, 8, XFmode, VOIDmode) ! DEF_MACHMODE (XFmode, "XF", MODE_FLOAT, BITS_PER_UNIT*12, 12, 12, TFmode, VOIDmode) /* IEEE extended */ ! DEF_MACHMODE (TFmode, "TF", MODE_FLOAT, BITS_PER_UNIT*16, 16, 16, VOIDmode, VOIDmode) /* Complex modes. */ ! DEF_MACHMODE (QCmode, "QC", MODE_COMPLEX_FLOAT, BITS_PER_UNIT*2, 2, 1, HCmode, QFmode) ! DEF_MACHMODE (HCmode, "HC", MODE_COMPLEX_FLOAT, BITS_PER_UNIT*4, 4, 2, SCmode, HFmode) ! DEF_MACHMODE (SCmode, "SC", MODE_COMPLEX_FLOAT, BITS_PER_UNIT*8, 8, 4, DCmode, SFmode) ! DEF_MACHMODE (DCmode, "DC", MODE_COMPLEX_FLOAT, BITS_PER_UNIT*16, 16, 8, XCmode, DFmode) ! DEF_MACHMODE (XCmode, "XC", MODE_COMPLEX_FLOAT, BITS_PER_UNIT*24, 24, 12, TCmode, XFmode) ! DEF_MACHMODE (TCmode, "TC", MODE_COMPLEX_FLOAT, BITS_PER_UNIT*32, 32, 16, VOIDmode, TFmode) ! DEF_MACHMODE (CQImode, "CQI", MODE_COMPLEX_INT, BITS_PER_UNIT*2, 2, 1, CHImode, QImode) ! DEF_MACHMODE (CHImode, "CHI", MODE_COMPLEX_INT, BITS_PER_UNIT*4, 4, 2, CSImode, HImode) ! DEF_MACHMODE (CSImode, "CSI", MODE_COMPLEX_INT, BITS_PER_UNIT*8, 8, 4, CDImode, SImode) ! DEF_MACHMODE (CDImode, "CDI", MODE_COMPLEX_INT, BITS_PER_UNIT*16, 16, 8, CTImode, DImode) ! DEF_MACHMODE (CTImode, "CTI", MODE_COMPLEX_INT, BITS_PER_UNIT*32, 32, 16, COImode, TImode) ! DEF_MACHMODE (COImode, "COI", MODE_COMPLEX_INT, BITS_PER_UNIT*64, 64, 32, VOIDmode, OImode) /* Vector modes. */ /* There are no V1xx vector modes. These are equivalent to normal scalar modes. */ ! /* The wider mode field for vectors follows in order of increasing bit ! size with QI coming before HI, HI before SI, and SI before DI ! within same bit sizes. */ ! DEF_MACHMODE (V2QImode, "V2QI", MODE_VECTOR_INT, BITS_PER_UNIT*2, 2, 1, V4QImode, QImode) ! DEF_MACHMODE (V2HImode, "V2HI", MODE_VECTOR_INT, BITS_PER_UNIT*4, 4, 2, V8QImode, HImode) ! DEF_MACHMODE (V2SImode, "V2SI", MODE_VECTOR_INT, BITS_PER_UNIT*8, 8, 4, V16QImode, SImode) ! DEF_MACHMODE (V2DImode, "V2DI", MODE_VECTOR_INT, BITS_PER_UNIT*16, 16, 8, V8SImode, DImode) ! DEF_MACHMODE (V4QImode, "V4QI", MODE_VECTOR_INT, BITS_PER_UNIT*4, 4, 1, V2HImode, QImode) ! DEF_MACHMODE (V4HImode, "V4HI", MODE_VECTOR_INT, BITS_PER_UNIT*8, 8, 2, V2SImode, HImode) ! DEF_MACHMODE (V4SImode, "V4SI", MODE_VECTOR_INT, BITS_PER_UNIT*16, 16, 4, V2DImode, SImode) ! DEF_MACHMODE (V4DImode, "V4DI", MODE_VECTOR_INT, BITS_PER_UNIT*32, 32, 8, V8DImode, DImode) ! DEF_MACHMODE (V8QImode, "V8QI", MODE_VECTOR_INT, BITS_PER_UNIT*8, 8, 1, V4HImode, QImode) ! DEF_MACHMODE (V8HImode, "V8HI", MODE_VECTOR_INT, BITS_PER_UNIT*16, 16, 2, V4SImode, HImode) ! DEF_MACHMODE (V8SImode, "V8SI", MODE_VECTOR_INT, BITS_PER_UNIT*32, 32, 4, V4DImode, SImode) ! DEF_MACHMODE (V8DImode, "V8DI", MODE_VECTOR_INT, BITS_PER_UNIT*64, 64, 8, VOIDmode, DImode) ! DEF_MACHMODE (V16QImode, "V16QI", MODE_VECTOR_INT, BITS_PER_UNIT*16, 16, 1, V8HImode, QImode) ! DEF_MACHMODE (V2SFmode, "V2SF", MODE_VECTOR_FLOAT, BITS_PER_UNIT*8, 8, 4, V4SFmode, SFmode) ! DEF_MACHMODE (V2DFmode, "V2DF", MODE_VECTOR_FLOAT, BITS_PER_UNIT*16, 16, 8, V8SFmode, DFmode) ! DEF_MACHMODE (V4SFmode, "V4SF", MODE_VECTOR_FLOAT, BITS_PER_UNIT*16, 16, 4, V2DFmode, SFmode) ! DEF_MACHMODE (V4DFmode, "V4DF", MODE_VECTOR_FLOAT, BITS_PER_UNIT*32, 32, 8, V8DFmode, DFmode) ! DEF_MACHMODE (V8SFmode, "V8SF", MODE_VECTOR_FLOAT, BITS_PER_UNIT*32, 32, 4,V4DFmode, SFmode) ! DEF_MACHMODE (V8DFmode, "V8DF", MODE_VECTOR_FLOAT, BITS_PER_UNIT*64, 64, 8, VOIDmode, DFmode) ! DEF_MACHMODE (V16SFmode, "V16SF", MODE_VECTOR_FLOAT, 512, 64, 4, VOIDmode, SFmode) /* BLKmode is used for structures, arrays, etc. that fit no more specific mode. */ ! DEF_MACHMODE (BLKmode, "BLK", MODE_RANDOM, 0, 0, 0, VOIDmode, VOIDmode) /* The modes for representing the condition codes come last. CCmode is always defined. Additional modes for the condition code can be specified in the EXTRA_CC_MODES macro. All MODE_CC modes are the same width as SImode and have VOIDmode as their next wider mode. */ ! #define CC(E, M) DEF_MACHMODE (E, M, MODE_CC, BITS_PER_UNIT*4, 4, 4, VOIDmode, VOIDmode) CC (CCmode, "CC") diff -Nrc3pad gcc-3.0.4/gcc/machmode.h gcc-3.1/gcc/machmode.h *** gcc-3.0.4/gcc/machmode.h Wed Jan 3 21:13:29 2001 --- gcc-3.1/gcc/machmode.h Tue Feb 19 02:53:26 2002 *************** *** 2,30 **** Copyright (C) 1991, 1993, 1994, 1996, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #ifndef HAVE_MACHINE_MODES #define HAVE_MACHINE_MODES /* Make an enum class that gives all the machine modes. */ ! #define DEF_MACHMODE(SYM, NAME, TYPE, BITSIZE, SIZE, UNIT, WIDER) SYM, enum machine_mode { #include "machmode.def" --- 2,30 ---- Copyright (C) 1991, 1993, 1994, 1996, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #ifndef HAVE_MACHINE_MODES #define HAVE_MACHINE_MODES /* Make an enum class that gives all the machine modes. */ ! #define DEF_MACHMODE(SYM, NAME, TYPE, BITSIZE, SIZE, UNIT, WIDER, INNER) SYM, enum machine_mode { #include "machmode.def" *************** MAX_MACHINE_MODE }; *** 38,44 **** /* Get the name of mode MODE as a string. */ ! extern const char * const mode_name[]; #define GET_MODE_NAME(MODE) (mode_name[(int) (MODE)]) enum mode_class { MODE_RANDOM, MODE_INT, MODE_FLOAT, MODE_PARTIAL_INT, MODE_CC, --- 38,44 ---- /* Get the name of mode MODE as a string. */ ! extern const char * const mode_name[NUM_MACHINE_MODES]; #define GET_MODE_NAME(MODE) (mode_name[(int) (MODE)]) enum mode_class { MODE_RANDOM, MODE_INT, MODE_FLOAT, MODE_PARTIAL_INT, MODE_CC, *************** enum mode_class { MODE_RANDOM, MODE_INT, *** 49,55 **** /* Get the general kind of object that mode MODE represents (integer, floating, complex, etc.) */ ! extern const enum mode_class mode_class[]; #define GET_MODE_CLASS(MODE) (mode_class[(int) (MODE)]) /* Nonzero if MODE is an integral mode. */ --- 49,55 ---- /* Get the general kind of object that mode MODE represents (integer, floating, complex, etc.) */ ! extern const enum mode_class mode_class[NUM_MACHINE_MODES]; #define GET_MODE_CLASS(MODE) (mode_class[(int) (MODE)]) /* Nonzero if MODE is an integral mode. */ *************** extern const enum mode_class mode_class[ *** 77,88 **** /* Get the size in bytes of an object of mode MODE. */ ! extern const unsigned int mode_size[]; #define GET_MODE_SIZE(MODE) (mode_size[(int) (MODE)]) /* Get the size in bytes of the basic parts of an object of mode MODE. */ ! extern const unsigned int mode_unit_size[]; #define GET_MODE_UNIT_SIZE(MODE) (mode_unit_size[(int) (MODE)]) /* Get the number of units in the object. */ --- 77,88 ---- /* Get the size in bytes of an object of mode MODE. */ ! extern const unsigned char mode_size[NUM_MACHINE_MODES]; #define GET_MODE_SIZE(MODE) (mode_size[(int) (MODE)]) /* Get the size in bytes of the basic parts of an object of mode MODE. */ ! extern const unsigned char mode_unit_size[NUM_MACHINE_MODES]; #define GET_MODE_UNIT_SIZE(MODE) (mode_unit_size[(int) (MODE)]) /* Get the number of units in the object. */ *************** extern const unsigned int mode_unit_size *** 93,99 **** /* Get the size in bits of an object of mode MODE. */ ! extern const unsigned int mode_bitsize[]; #define GET_MODE_BITSIZE(MODE) (mode_bitsize[(int) (MODE)]) #endif /* not HAVE_MACHINE_MODES */ --- 93,99 ---- /* Get the size in bits of an object of mode MODE. */ ! extern const unsigned short mode_bitsize[NUM_MACHINE_MODES]; #define GET_MODE_BITSIZE(MODE) (mode_bitsize[(int) (MODE)]) #endif /* not HAVE_MACHINE_MODES */ *************** extern const unsigned int mode_bitsize[] *** 103,112 **** /* Get a bitmask containing 1 for all bits in a word that fit within mode MODE. */ ! extern const unsigned HOST_WIDE_INT mode_mask_array[]; #define GET_MODE_MASK(MODE) mode_mask_array[(int) (MODE)] #endif /* defined (HOST_WIDE_INT) && ! defined GET_MODE_MASK */ #if ! defined GET_MODE_WIDER_MODE || ! defined GET_MODE_ALIGNMENT \ --- 103,118 ---- /* Get a bitmask containing 1 for all bits in a word that fit within mode MODE. */ ! extern const unsigned HOST_WIDE_INT mode_mask_array[NUM_MACHINE_MODES]; #define GET_MODE_MASK(MODE) mode_mask_array[(int) (MODE)] + extern const enum machine_mode inner_mode_array[NUM_MACHINE_MODES]; + + /* Return the mode of the inner elements in a vector. */ + + #define GET_MODE_INNER(MODE) inner_mode_array[(int) (MODE)] + #endif /* defined (HOST_WIDE_INT) && ! defined GET_MODE_MASK */ #if ! defined GET_MODE_WIDER_MODE || ! defined GET_MODE_ALIGNMENT \ *************** extern const unsigned HOST_WIDE_INT mode *** 114,120 **** /* Get the next wider natural mode (eg, QI -> HI -> SI -> DI -> TI). */ ! extern const unsigned char mode_wider_mode[]; #define GET_MODE_WIDER_MODE(MODE) ((enum machine_mode)mode_wider_mode[(int) (MODE)]) /* Return the mode for data of a given size SIZE and mode class CLASS. --- 120,126 ---- /* Get the next wider natural mode (eg, QI -> HI -> SI -> DI -> TI). */ ! extern const unsigned char mode_wider_mode[NUM_MACHINE_MODES]; #define GET_MODE_WIDER_MODE(MODE) ((enum machine_mode)mode_wider_mode[(int) (MODE)]) /* Return the mode for data of a given size SIZE and mode class CLASS. *************** extern unsigned get_mode_alignment PARAM *** 148,154 **** /* For each class, get the narrowest mode in that class. */ ! extern const enum machine_mode class_narrowest_mode[]; #define GET_CLASS_NARROWEST_MODE(CLASS) class_narrowest_mode[(int) (CLASS)] /* Define the integer modes whose sizes are BITS_PER_UNIT and BITS_PER_WORD --- 154,160 ---- /* For each class, get the narrowest mode in that class. */ ! extern const enum machine_mode class_narrowest_mode[(int) MAX_MODE_CLASS]; #define GET_CLASS_NARROWEST_MODE(CLASS) class_narrowest_mode[(int) (CLASS)] /* Define the integer modes whose sizes are BITS_PER_UNIT and BITS_PER_WORD diff -Nrc3pad gcc-3.0.4/gcc/main.c gcc-3.1/gcc/main.c *** gcc-3.0.4/gcc/main.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/main.c Sat Oct 20 11:24:35 2001 *************** *** 0 **** --- 1,36 ---- + /* main.c: defines main() for cc1, cc1plus, etc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2, or (at your option) any later + version. + + GCC is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to the Free + Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + + #include "config.h" + #include "system.h" + #include "toplev.h" + + int main PARAMS ((int argc, char **argv)); + + /* We define main() to call toplev_main(), which is defined in toplev.c. + We do this in a separate file in order to allow the language front-end + to define a different main(), if it so desires. */ + + int + main (argc, argv) + int argc; + char **argv; + { + return toplev_main (argc, argv); + } diff -Nrc3pad gcc-3.0.4/gcc/make-l2.com gcc-3.1/gcc/make-l2.com *** gcc-3.0.4/gcc/make-l2.com Wed Dec 16 20:57:17 1998 --- gcc-3.1/gcc/make-l2.com Thu Jan 1 00:00:00 1970 *************** *** 1,149 **** - $! make-l2.com -- VMS build procedure for libgcc2. - $ - $! Change working directory to the location of this command procedure. - $ flnm = f$enviroment("PROCEDURE") !get current procedure name - $ set default 'f$parse(flnm,,,"DEVICE")''f$parse(flnm,,,"DIRECTORY")' - $! - $! Command file to build libgcc2.olb. You should only run this once you - $! have the current compiler installed, otherwise some of the builtins will - $! not be recognized. Once you have built libgcc2.olb, you can merge this - $! with gnu_cc:[000000]gcclib.olb - $! - $! All of the C source code is assumed to be in libgcc2.c, and a list of the - $! modules that we need from there is in libgcc2.list (which is generated - $! when vmsconfig.com is run). The C++ source is found in the [.cp.inc] - $! directory and managed via libgcc2-cxx.list. - $! - $ if f$search("gcc-cc1.exe").eqs."" - $ then - $ gcc_cc1:=$gnu_cc:[000000]gcc-cc1 - $ if f$extract(0,1,f$trnlnm("GNU_CC_VERSION")).eqs."1" then goto nocompile - $ else - $ gcc_cc1:=$sys$disk:[]gcc-cc1 - $ endif - $! - $ if f$search("gcc-cpp.exe").eqs."" - $ then - $ gcc_cpp:=$gnu_cc:[000000]gcc-cpp - $ if f$extract(0,1,f$trnlnm("GNU_CC_VERSION")).eqs."1" then goto nocompile - $ Version:='f$trnlnm("GNU_CC_VERSION")' - $ else - $ gcc_cpp:=$sys$disk:[]gcc-cpp - $ open ifile$ version.opt - $ read ifile$ line - $ close ifile$ - $ Version=line - "ident=""" - """ - $ endif - $! - $ if f$search("gcc-cc1plus.exe").eqs."" - $ then gcc_cxx = "$gnu_cc:[000000]gcc-cc1plus" - $ else gcc_cxx = "$sys$disk:[]gcc-cc1plus" - $ endif - $! - $gcc_as:=$gnu_cc:[000000]gcc-as - $cpp_file:=sys$scratch:gcc_'f$getjpi(0,"pid")'.cpp - $ s_file:=sys$scratch:gcc_'f$getjpi(0,"pid")'.s - $! - $set symbol/scope=(nolocal,noglobal) - $! - $lib/create libgcc2.olb - $on error then goto c_err - $on control_y then goto c_err - $ - $if f$trnlnm("IFILE$").nes."" then close/noLog ifile$ - $open ifile$ libgcc2.list - $loop: - $! - $read ifile$ line/end=c_done - $i=0 - $loop1: - $flnm=f$element(i," ",line) - $i=i+1 - $if flnm.eqs."" then goto loop - $if flnm.eqs." " then goto loop - $! - $flnm = "L"+flnm - $if flnm.eqs."L_exit" then goto loop1 - $write sys$output "$ gcc/debug/define=""''flnm'"" LIBGCC2.C" - $! - $objname = flnm - $if flnm.eqs."L_builtin_New" then objname = "L_builtin_nnew" - $! - $! We do this by hand, since the VMS compiler driver does not have a way - $! of specifying an alternate location for the compiler executables. - $! - $ if arch .eqs. "alpha" - $ then - $ gcc_cpp "-D__IEEE_FLOAT" "-I[]" "-I[.config]" "-I[.ginclude]" "-D''flnm'" libgcc2.c 'cpp_file' - $ gcc_cc1 'cpp_file' -dumpbase 'objname' - - -quiet -mgas "-O1" -mfloat-ieee -o 's_file' - $ else - $ gcc_cpp "-I[]" "-I[.config]" "-I[.ginclude]" "-D''flnm'" libgcc2.c 'cpp_file' - $ gcc_cc1 'cpp_file' -dumpbase 'objname' - - -quiet -mgnu -g "-O1" -mvaxc-alignment -o 's_file' - $ endif - $ delete/nolog 'cpp_file'; - $ gcc_as 's_file' -o 'objname'.OBJ - $ if arch .eqs. "vax" - $ then - $! Assemble again, preserving lowercase symbol names this time. - $ gcc_as -h3 's_file' -o 'objname'-c.OBJ - $ library libgcc2.olb 'objname'.obj,'objname'-c.obj - $ delete/nolog 'objname'.obj;,'objname'-c.obj; - $ else - $ library libgcc2.olb 'objname'.obj - $ delete/nolog 'objname'.obj; - $ endif - $ delete/nolog 's_file'; - $! - $! - $goto loop1 - $! - $! In case of error or abort, go here (In order to close file). - $! - $c_err: !'f$verify(0) - $close ifile$ - $ exit %x2c - $! - $c_done: - $close ifile$ - $ - $ - $ EXIT - $ !gcc-2.8.0: C++ libgcc2 code disabled since it's not adequately tested - $ - $! - $ p1 = p1+" "+p2+" "+p3+" "+p4+" "+p5+" "+p6+" "+p7+" "+p8 - $ p1 = " " + f$edit(p1,"COMPRESS,TRIM,UPCASE") + " " - $! (note: substring locations can only be equal when neither string is present) - $ if f$locate(" CC1PLUS ",p1).eq.f$locate(" CXX ",p1) then goto cxx_done - $ if f$search("libgcc2-cxx.list").eqs."" then goto cxx_done - $! - $ open/read ifile$ libgcc2-cxx.list - $cxx_line_loop: - $ read ifile$ line/end=cxx_done - $ i = 0 - $cxx_file_loop: - $ flnm = f$element(i,",",line) - $ i = i + 1 - $ if flnm.eqs."" .or. flnm.eqs."," then goto cxx_line_loop - $ write sys$output "$ gcc/plus/debug ''flnm'.cc" - $ objname = flnm - $! - $ gcc_cpp -+ "-I[]" "-I[.ginclude]" "-I[.cp.inc]" [.cp]'flnm'.cc 'cpp_file' - $ gcc_cxx 'cpp_file' -dumpbase 'objname' -fexceptions - - -quiet -mgnu -g "-O1" -mvaxc-alignment -o 's_file' - $ delete/nolog 'cpp_file'; - $ gcc_as "-vGNU CC V''Version'" 's_file' -o 'objname'.OBJ - $! Assemble again, preserving lowercase symbol names this time. - $ gcc_as "-vGNU CC V''Version'" -h3 's_file' -o 'objname'-c.OBJ - $ delete/nolog 's_file'; - $ - $ library libgcc2.olb 'objname'.obj,'objname'-c.obj - $ delete/nolog 'objname'.obj;,'objname'-c.obj; - $! - $ goto cxx_file_loop - $! - $cxx_done: - $ close ifile$ - $ exit --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/makefile.vms gcc-3.1/gcc/makefile.vms *** gcc-3.0.4/gcc/makefile.vms Sun Nov 26 19:15:39 2000 --- gcc-3.1/gcc/makefile.vms Thu Jan 1 00:00:00 1970 *************** *** 1,413 **** - # - # makefile for GCC - # - # Created by Klaus K"ampf, kkaempf@progis.de - # - - # choose gcc or dec c - #CC = gcc - CC = cc - - # With or withou haifa scheduler ? - #HAIFA=,"HAIFA" - HAIFA= - - PWD=sys$$disk:[] - RM=delete/nolog - - ifeq ($(CC),gcc) - ifeq ($(ARCH),ALPHA) - CFLAGS=/define=("HAVE_CONFIG_H=1","USE_COLLECT2" $(HAIFA)) - LIBS=,gnu_cc_library:libgcc.olb/lib,sys$$library:vaxcrtl.olb/lib,gnu_cc_library:crt0.obj - else - CFLAGS=/define=("HAVE_CONFIG_H=1","USE_COLLECT2" $(HAIFA)) - LIBS=,gnu_cc_library:libgcc.olb/lib,sys$$library:vaxcrtl.olb/lib - endif - LFLAGS=/map/full - #LFLAGS= - else - ifeq ($(ARCH),ALPHA) - CFLAGS=/names=as_is/float=ieee/noopt/debug/define=("HAVE_CONFIG_H=1","USE_COLLECT2" $(HAIFA))\ - /warning=disable=(missingreturn,implicitfunc,ptrmismatch,undefescap,longextern,duptypespec) - else - CFLAGS=/noopt/debug/define=("HAVE_CONFIG_H=1","USE_COLLECT2" $(HAIFA)) - endif - LFLAGS=/nomap - LIBS=,sys$$library:vaxcrtl.olb/lib - endif - - BISON = bison - BISON_FLAGS= /Yacc/Define/Verbose - RENAME= rename/New_Version - LINK = link #/noshare/nosysshr - EDIT = edit - SEARCH= search - ABORT = exit %x002C - echo = write sys$$output - - CINCL1 = /Incl=([],[.config]) - CINCL2 = /Incl=([],[.ginclude],[.config]) - CINCL_SUB = /Incl=([],[-],[-.ginclude],[-.config]) - CINCL_CP= /Incl=([],[.config],[.cp],[.cp.inc]) - - MDFILE = [.config.$(ARCH)]$(ARCH).md - - ifeq ($(HAIFA),) - SCHED=sched - else - SCHED=haifa-sched - endif - - GENOBJS=[]rtl.obj,obstack.obj - - INDEPOBJS= []toplev.obj,version.obj,tree.obj,print-tree.obj,stor-layout.obj,\ - fold-const.obj,function.obj,stmt.obj,except.obj,expr.obj,calls.obj,expmed.obj,\ - explow.obj,optabs.obj,varasm.obj,rtl.obj,print-rtl.obj,rtlanal.obj,\ - emit-rtl.obj,genrtl.obj,real.obj,regmove.obj,dbxout.obj,sdbout.obj,dwarfout.obj,\ - dwarf2out.obj,xcoffout.obj,bitmap.obj,alias.obj,\ - integrate.obj,jump.obj,cse.obj,loop.obj,unroll.obj,flow.obj,stupid.obj,\ - combine.obj,regclass.obj,local-alloc.obj,global.obj,reload.obj,\ - reload1.obj,caller-save.obj,insn-peep.obj,reorg.obj,$(SCHED).obj,\ - final.obj,recog.obj,reg-stack.obj,insn-opinit.obj,insn-recog.obj,\ - insn-extract.obj,insn-output.obj,insn-emit.obj,\ - profile.obj,insn-attrtab.obj,\ - aux-output.obj,getpwd.obj,convert.obj - - CC1OBJS=[]c-parse.obj,c-lang.obj,c-lex.obj,c-pragma.obj,c-decl.obj,\ - c-typeck.obj,c-convert.obj,c-aux-info.obj,c-common.obj,c-iterate.obj,\ - obstack.obj - - OBJCOBJS= - - # list copied from cc1plus-objs.opt - - CC1PLUSOBJS=[.cp]call.obj,[.cp]decl2.obj,\ - [.cp]except.obj,[.cp]pt.obj,\ - [.cp]spew.obj,[.cp]xref.obj,[.cp]class.obj,\ - [.cp]expr.obj,[.cp]lex.obj,\ - [.cp]ptree.obj,[.cp]tree.obj,[.cp]cvt.obj,\ - [.cp]errfn.obj,[.cp]rtti.obj,[.cp]method.obj,\ - [.cp]search.obj,[.cp]typeck.obj,[.cp]decl.obj,\ - [.cp]error.obj,[.cp]friend.obj,[.cp]init.obj,[.cp]parse.obj,\ - [.cp]sig.obj,[.cp]typeck2.obj,[.cp]repo.obj,\ - [.cp]input.obj,\ - []obstack.obj,\ - []c-common.obj,[]c-pragma.obj - - CCCPOBJS=[]cccp.obj,cexp.obj,version.obj,prefix.obj - - ALLOCA=,[]alloca.obj - - LIBIBERTY = [-.libiberty]libiberty.olb - - CXX_LIB2FUNCS = [.cp]tinfo.obj,[.cp]tinfo2.obj,\ - [.cp]new.obj,[.cp]new1.obj,[.cp]new2.obj,[.cp]exception.obj - - .c.obj: - $(CC) $(CFLAGS) $(CINCL1) $ $@ - - limits.h: enquire.exe - mcr $(PWD)enquire.exe -l > $@ - - enquire.exe: enquire.obj - $(LINK)$(LFLAGS)/exe=$@ enquire.obj$(ALLOCA)$(LIBS) - - libgcc2.olb: - $$ @make-l2 - - libgccplus.olb: $(CXX_LIB2FUNCS) - lib/create libgccplus $(CXX_LIB2FUNCS) - - genattr.exe: genattr.obj,$(GENOBJS)$(ALLOCA) - $(LINK) $(LFLAGS)/exe=$@ $^$(LIBS) - - insn-attr.h: genattr.exe $(MDFILE) - mcr $(PWD)genattr.exe $(MDFILE) > $@ - - genflags.exe: genflags.obj,$(GENOBJS)$(ALLOCA) - $(LINK) $(LFLAGS)/exe=$@ $^$(LIBS) - - insn-flags.h: genflags.exe $(MDFILE) - mcr $(PWD)genflags.exe $(MDFILE) > $@ - - gencodes.exe: gencodes.obj,$(GENOBJS)$(ALLOCA) - $(LINK) $(LFLAGS)/exe=$@ $^$(LIBS) - - insn-codes.h: gencodes.exe $(MDFILE) - mcr $(PWD)gencodes.exe $(MDFILE) > $@ - - genconfig.exe: genconfig.obj,$(GENOBJS)$(ALLOCA) - $(LINK) $(LFLAGS)/exe=$@ $^$(LIBS) - - insn-config.h: genconfig.exe $(MDFILE) - mcr $(PWD)genconfig.exe $(MDFILE) > $@ - - genpeep.exe: genpeep.obj,$(GENOBJS)$(ALLOCA) - $(LINK) $(LFLAGS)/exe=$@ $^$(LIBS) - - insn-peep.c: genpeep.exe $(MDFILE) - mcr $(PWD)genpeep.exe $(MDFILE) > $@ - - genopinit.exe: genopinit.obj,$(GENOBJS)$(ALLOCA) - $(LINK) $(LFLAGS)/exe=$@ $^$(LIBS) - - insn-opinit.c: genopinit.exe $(MDFILE) - mcr $(PWD)genopinit.exe $(MDFILE) > $@ - - genrecog.exe: genrecog.obj,$(GENOBJS)$(ALLOCA) - $(LINK) $(LFLAGS)/exe=$@ $^$(LIBS) - - insn-recog.c: genrecog.exe $(MDFILE) - mcr $(PWD)genrecog.exe $(MDFILE) > $@ - - genextract.exe: genextract.obj,$(GENOBJS)$(ALLOCA) - $(LINK) $(LFLAGS)/exe=$@ $^$(LIBS) - - insn-extract.c: genextract.exe $(MDFILE) - mcr $(PWD)genextract.exe $(MDFILE) > $@ - - genoutput.exe: genoutput.obj,$(GENOBJS)$(ALLOCA) - $(LINK) $(LFLAGS)/exe=$@ $^$(LIBS) - - insn-output.c: genoutput.exe $(MDFILE) - mcr $(PWD)genoutput.exe $(MDFILE) > $@ - - genemit.exe: genemit.obj,$(GENOBJS)$(ALLOCA) - $(LINK) $(LFLAGS)/exe=$@ $^$(LIBS) - - insn-emit.c: genemit.exe $(MDFILE) - mcr $(PWD)genemit.exe $(MDFILE) > $@ - - genattrtab.exe: genattrtab.obj,rtlanal.obj,$(GENOBJS)$(ALLOCA) - $(LINK) $(LFLAGS)/exe=$@ $^$(LIBS) - - insn-attrtab.c: genattrtab.exe $(MDFILE) - mcr $(PWD)genattrtab.exe $(MDFILE) > $@ - - gengenrtl.exe: gengenrtl.obj,obstack.obj,$(ALLOCA) - $(LINK) $(LFLAGS)/exe=$@ $^$(LIBS) - - genrtl.h genrtl.c: gengenrtl.exe - mcr $(PWD)gengenrtl.exe genrtl.h genrtl.c - - cccp.obj: cccp.c config.h - aux-output.obj: aux-output.c insn-attr.h insn-flags.h insn-config.h - caller-save.obj: caller-save.c insn-config.h - calls.obj: calls.c insn-flags.h - combine.obj: combine.c insn-attr.h insn-flags.h insn-codes.h insn-config.h - cse.obj: cse.c insn-config.h - c-decl.obj: c-decl.c expr.h integrate.h insn-codes.h insn-config.h - c-lex.obj: c-lex.c genrtl.h - c-typeck.obj: c-typeck.c - dbxout.obj: dbxout.c insn-config.h - dwarfout.obj: dwarfout.c insn-config.h - dwarf2out.obj: dwarf2out.c insn-config.h - emit-rtl.obj: emit-rtl.c insn-config.h - except.obj: except.c insn-flags.h insn-codes.h insn-config.h - explow.obj: explow.c insn-flags.h insn-codes.h insn-config.h - expmed.obj: expmed.c insn-flags.h insn-codes.h insn-config.h - expr.obj: expr.c insn-flags.h insn-config.h - final.obj: final.c tm.h insn-attr.h insn-flags.h insn-codes.h insn-config.h - flow.obj: flow.c insn-config.h - function.obj: function.c insn-flags.h insn-codes.h insn-config.h insn-codes.h insn-config.h - genattrtab.obj: genattrtab.c insn-config.h - genextract.obj: genextract.c insn-config.h - global.obj: global.c insn-config.h - integrate.obj: integrate.c integrate.h insn-flags.h insn-config.h - jump.obj: jump.c insn-flags.h insn-config.h - local-alloc.obj: local-alloc.c insn-config.h - loop.obj: loop.c insn-flags.h insn-config.h - optabs.obj: optabs.c insn-flags.h insn-codes.h insn-config.h - print-rtl.obj: print-rtl.c - profile.obj: profile.c insn-flags.h insn-config.h - recog.obj: recog.c insn-attr.h insn-flags.h insn-codes.h insn-config.h - regclass.obj: regclass.c insn-config.h - reg-stack.obj: reg-stack.c insn-config.h - reload.obj: reload.c insn-codes.h insn-config.h - reload1.obj: reload1.c insn-flags.h insn-codes.h insn-config.h - reorg.obj: reorg.c insn-attr.h insn-flags.h insn-config.h - sched.obj: sched.c insn-attr.h insn-config.h - haifa-sched.obj: haifa-sched.c insn-attr.h insn-config.h - stmt.obj: stmt.c insn-flags.h insn-codes.h insn-config.h - stor-layout.obj: stor-layout.c - stupid.obj: stupid.c - toplev.obj: toplev.c insn-attr.h insn-config.h - unroll.obj: unroll.c insn-config.h - - insn-attrtab.obj: insn-attrtab.c insn-attr.h insn-config.h - insn-output.obj: insn-output.c insn-attr.h insn-flags.h insn-codes.h - insn-emit.obj: insn-emit.c insn-flags.h insn-codes.h insn-config.h - insn-opinit.obj: insn-opinit.c insn-flags.h insn-codes.h insn-config.h - insn-output.obj: insn-config.h - insn-recog.obj: insn-config.h - - varasm.obj: varasm.c tm.h - toplev.obj: toplev.c tm.h - - cexp.c: cexp.y - $(BISON) $(BISON_FLAGS)/output=$@ $< - c-parse.c: c-parse.y - $(BISON) $(BISON_FLAGS)/output=$@ $< - [.cp]parse.c: [.cp]parse.y - $(BISON) $(BISON_FLAGS)/output=$@ $< - [.cp]parse.h: [.cp]parse.c - @$(ECHO) "Must copy YYEMPTY from [.cp]parse.c to [.cp]parse.h" - $$ stop - aux-output.c: [.config.$(ARCH)]$(ARCH).c - copy $< $@ - - expr.h: insn-codes.h - reload.h: insn-config.h - integrate.h: insn-config.h - - config.h: - $$ @vmsconfig - - cleancccp: - $$ purge - $(RM) cccp.obj;,cexp.obj; - $(RM) cpp.exe; - - cleanlib: - $$ purge - $(RM) libgcc2.olb; - - cleanlibplus: - $$ purge - $(RM) [.cp]tinfo.obj; - $(RM) [.cp]tinfo2.obj; - $(RM) [.cp]new.obj; - $(RM) [.cp]new1.obj; - $(RM) [.cp]new2.obj; - $(RM) [.cp]exception.obj; - $(RM) libgccplus.olb; - - clean: - $$ purge - $$ purge [.cp] - $(RM) *.obj;* - $(RM) [.cp]*.obj;* - $(RM) [.cp]parse.output;* - $(RM) *.cpp;* - $(RM) *.s;* - $(RM) *.rtl;* - $(RM) a.out; - $(RM) *.combine; - $(RM) *.cpp; - $(RM) *.cse; - $(RM) *.cse2; - $(RM) *.dbr; - $(RM) *.flow; - $(RM) *.greg; - $(RM) *.jump; - $(RM) *.jump2; - $(RM) *.loop; - $(RM) *.lreg; - $(RM) *.rtl; - $(RM) *.sched; - $(RM) *.sched2; - $(RM) *.map; - $(RM) genattr.exe;,insn-attr.h; - $(RM) genflags.exe;,insn-flags.h; - $(RM) gencodes.exe;,insn-codes.h; - $(RM) genconfig.exe;,insn-config.h; - $(RM) genpeep.exe;,insn-peep.c; - $(RM) genopinit.exe;,insn-opinit.c; - $(RM) genrecog.exe;,insn-recog.c; - $(RM) genextract.exe;,insn-extract.c; - $(RM) genoutput.exe;,insn-output.c; - $(RM) genemit.exe;,insn-emit.c; - $(RM) genattrtab.exe;,insn-attrtab.c; - $(RM) gengenrtl.exe;,genrtl.c;,genrtl.h; - $(RM) cc1.exe; - $(RM) cpp.exe; - $(RM) cc1plus.exe; - $(RM) libgcc2.olb; - $(RM) libgccplus.olb; - $(RM) enquire.exe;,float.h;,limits.h; - # - # clean everything axpconfig.com creates - # - distclean: clean cleancccp - purge [...] - $(RM) config.h; - $(RM) tconfig.h; - $(RM) hconfig.h; - $(RM) tm.h; - $(RM) options.h; - $(RM) specs.h; - $(RM) aux-output.c; - - [.cp]call.obj: [.cp]call.c - [.cp]decl2.obj: [.cp]decl2.c - [.cp]except.obj: [.cp]except.c insn-codes.h insn-flags.h - [.cp]pt.obj: [.cp]pt.c - [.cp]spew.obj: [.cp]spew.c - [.cp]xref.obj: [.cp]xref.c - [.cp]class.obj: [.cp]class.c - [.cp]expr.obj: [.cp]expr.c insn-codes.h - [.cp]lex.obj: [.cp]lex.c [.cp]parse.h - [.cp]ptree.obj: [.cp]ptree.c - [.cp]tree.obj: [.cp]tree.c - [.cp]cvt.obj: [.cp]cvt.c - [.cp]errfn.obj: [.cp]errfn.c - [.cp]rtti.obj: [.cp]rtti.c - [.cp]method.obj: [.cp]method.c insn-codes.h - [.cp]search.obj: [.cp]search.c - [.cp]typeck.obj: [.cp]typeck.c - [.cp]decl.obj: [.cp]decl.c - [.cp]error.obj: [.cp]error.c - [.cp]friend.obj: [.cp]friend.c - [.cp]init.obj: [.cp]init.c - [.cp]parse.obj: [.cp]parse.c - $(CC) $(CFLAGS) $(CINCL_CP) $^/obj=$@ - [.cp]sig.obj: [.cp]sig.c - [.cp]typeck2.obj: [.cp]typeck2.c - [.cp]repo.obj: [.cp]repo.c - [.cp]input.obj: [.cp]input.c - $(TOUCH) $@ - # g++ library - [.cp]tinfo.obj: [.cp]tinfo.cc - [.cp]tinfo2.obj: [.cp]tinfo2.cc - [.cp]new.obj: [.cp]new.cc - [.cp]new1.obj: [.cp]new1.cc - [.cp]new2.obj: [.cp]new2.cc - [.cp]exception.obj: [.cp]exception.cc - - #EOF --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/mbchar.c gcc-3.1/gcc/mbchar.c *** gcc-3.0.4/gcc/mbchar.c Sat Apr 7 22:42:51 2001 --- gcc-3.1/gcc/mbchar.c Wed Aug 22 14:35:29 2001 *************** *** 1,22 **** /* Multibyte Character Functions. Copyright (C) 1998 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. */ /* Note regarding cross compilation: --- 1,22 ---- /* Multibyte Character Functions. Copyright (C) 1998 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* Note regarding cross compilation: *************** local_mbtowc (pwc, s, n) *** 184,190 **** if (s == NULL) { save_state = ASCII; ! /* State-dependent. */ return 1; } --- 184,190 ---- if (s == NULL) { save_state = ASCII; ! /* State-dependent. */ return 1; } *************** local_mbtowc (pwc, s, n) *** 283,289 **** return 1; #else ! /* This must be the "C" locale or unknown locale. */ return mbtowc (pwc, s, n); #endif } --- 283,289 ---- return 1; #else ! /* This must be the "C" locale or unknown locale. */ return mbtowc (pwc, s, n); #endif } diff -Nrc3pad gcc-3.0.4/gcc/mbchar.h gcc-3.1/gcc/mbchar.h *** gcc-3.0.4/gcc/mbchar.h Mon Jan 17 17:16:20 2000 --- gcc-3.1/gcc/mbchar.h Wed Aug 22 14:35:30 2001 *************** *** 1,25 **** /* Various declarations for functions found in mbchar.c Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ ! #ifndef __GCC_MBCHAR_H__ ! #define __GCC_MBCHAR_H__ #ifdef MULTIBYTE_CHARS --- 1,25 ---- /* Various declarations for functions found in mbchar.c Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ ! #ifndef GCC_MBCHAR_H ! #define GCC_MBCHAR_H #ifdef MULTIBYTE_CHARS *************** extern int local_mb_cur_max PARAMS ((voi *** 38,41 **** /* The locale being used for multibyte characters in string/char literals. */ extern const char *literal_codeset; #endif /* MULTIBYTE_CHARS */ ! #endif --- 38,41 ---- /* The locale being used for multibyte characters in string/char literals. */ extern const char *literal_codeset; #endif /* MULTIBYTE_CHARS */ ! #endif /* ! GCC_MBCHAR_H */ diff -Nrc3pad gcc-3.0.4/gcc/mips-tdump.c gcc-3.1/gcc/mips-tdump.c *** gcc-3.0.4/gcc/mips-tdump.c Sat Feb 3 14:05:28 2001 --- gcc-3.1/gcc/mips-tdump.c Wed Jan 2 23:18:55 2002 *************** *** 4,31 **** Contributed by hartzell@boulder.colorado.edu, Rewritten by meissner@osf.org. ! 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 "config.h" #include "system.h" #ifdef index #undef index - #undef rindex #endif #ifndef CROSS_COMPILE #include --- 4,30 ---- Contributed by hartzell@boulder.colorado.edu, Rewritten by meissner@osf.org. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" #include "system.h" #ifdef index #undef index #endif #ifndef CROSS_COMPILE #include *************** Boston, MA 02111-1307, USA. */ *** 47,80 **** #define MIPS_UNMARK_STAB(code) ((code)-CODE_MASK) #endif - #define __proto(x) PARAMS(x) - typedef PTR PTR_T; - typedef const PTR_T CPTR_T; - #define uchar unsigned char #define ushort unsigned short #define uint unsigned int #define ulong unsigned long - void fatal PARAMS ((const char *)) ATTRIBUTE_NORETURN; - void fancy_abort PARAMS ((void)) ATTRIBUTE_NORETURN; - - void - fatal (s) - const char *s; - { - fprintf (stderr, "%s\n", s); - exit (FATAL_EXIT_CODE); - } - - /* Due to size_t being defined in sys/types.h and different - in stddef.h, we have to do this by hand..... Note, these - types are correct for MIPS based systems, and may not be - correct for other systems. */ - - #define size_t uint - #define ptrdiff_t int - /* Redefinition of storage classes as an enumeration for better debugging. */ --- 46,56 ---- *************** ulong *rfile_desc; /* relative file tab *** 250,268 **** PDR *proc_desc; /* procedure tables */ /* Forward reference for functions. */ ! PTR_T read_seek __proto((PTR_T, size_t, off_t, const char *)); ! void read_tfile __proto((void)); ! void print_global_hdr __proto((struct filehdr *)); ! void print_sym_hdr __proto((HDRR *)); ! void print_file_desc __proto((FDR *, int)); ! void print_symbol __proto((SYMR *, int, char *, AUXU *, int, FDR *)); ! void print_aux __proto((AUXU, int, int)); ! void emit_aggregate __proto((char *, AUXU, AUXU, const char *, FDR *)); ! const char *st_to_string __proto((st_t)); ! const char *sc_to_string __proto((sc_t)); ! const char *glevel_to_string __proto((glevel_t)); ! const char *lang_to_string __proto((lang_t)); ! const char *type_to_string __proto((AUXU *, int, FDR *)); extern char *optarg; extern int optind; --- 226,244 ---- PDR *proc_desc; /* procedure tables */ /* Forward reference for functions. */ ! static PTR read_seek PARAMS ((PTR, size_t, off_t, const char *)); ! static void read_tfile PARAMS ((void)); ! static void print_global_hdr PARAMS ((struct filehdr *)); ! static void print_sym_hdr PARAMS ((HDRR *)); ! static void print_file_desc PARAMS ((FDR *, int)); ! static void print_symbol PARAMS ((SYMR *, int, const char *, AUXU *, int, FDR *)); ! static void print_aux PARAMS ((AUXU, int, int)); ! static void emit_aggregate PARAMS ((char *, AUXU, AUXU, const char *, FDR *)); ! static const char *st_to_string PARAMS ((st_t)); ! static const char *sc_to_string PARAMS ((sc_t)); ! static const char *glevel_to_string PARAMS ((glevel_t)); ! static const char *lang_to_string PARAMS ((lang_t)); ! static const char *type_to_string PARAMS ((AUXU *, int, FDR *)); extern char *optarg; extern int optind; *************** extern int opterr; *** 271,277 **** /* Create a table of debugging stab-codes and corresponding names. */ #define __define_stab(NAME, CODE, STRING) {(int)CODE, STRING}, ! struct {short code; char string[10];} stab_names[] = { #include "stab.def" #undef __define_stab }; --- 247,253 ---- /* Create a table of debugging stab-codes and corresponding names. */ #define __define_stab(NAME, CODE, STRING) {(int)CODE, STRING}, ! const struct {const short code; const char string[10];} stab_names[] = { #include "stab.def" #undef __define_stab }; *************** struct {short code; char string[10];} st *** 279,287 **** /* Read some bytes at a specified location, and return a pointer. */ ! PTR_T read_seek (ptr, size, offset, context) ! PTR_T ptr; /* pointer to buffer or NULL */ size_t size; /* # bytes to read */ off_t offset; /* offset to read at */ const char *context; /* context for error message */ --- 255,263 ---- /* Read some bytes at a specified location, and return a pointer. */ ! static PTR read_seek (ptr, size, offset, context) ! PTR ptr; /* pointer to buffer or NULL */ size_t size; /* # bytes to read */ off_t offset; /* offset to read at */ const char *context; /* context for error message */ *************** read_seek (ptr, size, offset, context) *** 291,305 **** if (size == 0) /* nothing to read */ return ptr; ! if ((ptr == (PTR_T) 0 && (ptr = malloc (size)) == (PTR_T) 0) ! || (tfile_offset != offset && lseek (tfile_fd, offset, 0) == -1) || (read_size = read (tfile_fd, ptr, size)) < 0) { perror (context); exit (1); } ! if (read_size != size) { fprintf (stderr, "%s: read %ld bytes, expected %ld bytes\n", context, read_size, (long) size); --- 267,283 ---- if (size == 0) /* nothing to read */ return ptr; ! if (!ptr) ! ptr = xmalloc (size); ! ! if ((tfile_offset != offset && lseek (tfile_fd, offset, 0) == -1) || (read_size = read (tfile_fd, ptr, size)) < 0) { perror (context); exit (1); } ! if (read_size != (long) size) { fprintf (stderr, "%s: read %ld bytes, expected %ld bytes\n", context, read_size, (long) size); *************** read_seek (ptr, size, offset, context) *** 313,319 **** /* Convert language code to string format. */ ! const char * lang_to_string (lang) lang_t lang; { --- 291,297 ---- /* Convert language code to string format. */ ! static const char * lang_to_string (lang) lang_t lang; { *************** lang_to_string (lang) *** 336,342 **** /* Convert storage class to string. */ ! const char * sc_to_string(storage_class) sc_t storage_class; { --- 314,320 ---- /* Convert storage class to string. */ ! static const char * sc_to_string(storage_class) sc_t storage_class; { *************** sc_to_string(storage_class) *** 374,380 **** /* Convert symbol type to string. */ ! const char * st_to_string(symbol_type) st_t symbol_type; { --- 352,358 ---- /* Convert symbol type to string. */ ! static const char * st_to_string(symbol_type) st_t symbol_type; { *************** st_to_string(symbol_type) *** 415,421 **** /* Convert debug level to string. */ ! const char * glevel_to_string (g_level) glevel_t g_level; { --- 393,399 ---- /* Convert debug level to string. */ ! static const char * glevel_to_string (g_level) glevel_t g_level; { *************** glevel_to_string (g_level) *** 433,439 **** /* Convert the type information to string format. */ ! const char * type_to_string (aux_ptr, index, fdp) AUXU *aux_ptr; int index; --- 411,417 ---- /* Convert the type information to string format. */ ! static const char * type_to_string (aux_ptr, index, fdp) AUXU *aux_ptr; int index; *************** type_to_string (aux_ptr, index, fdp) *** 746,752 **** /* Print out the global file header for object files. */ ! void print_global_hdr (ptr) struct filehdr *ptr; { --- 724,730 ---- /* Print out the global file header for object files. */ ! static void print_global_hdr (ptr) struct filehdr *ptr; { *************** print_global_hdr (ptr) *** 801,807 **** /* Print out the symbolic header. */ ! void print_sym_hdr (sym_ptr) HDRR *sym_ptr; { --- 779,785 ---- /* Print out the symbolic header. */ ! static void print_sym_hdr (sym_ptr) HDRR *sym_ptr; { *************** print_sym_hdr (sym_ptr) *** 875,885 **** /* Print out a symbol. */ ! void print_symbol (sym_ptr, number, strbase, aux_base, ifd, fdp) SYMR *sym_ptr; int number; ! char *strbase; AUXU *aux_base; int ifd; FDR *fdp; --- 853,863 ---- /* Print out a symbol. */ ! static void print_symbol (sym_ptr, number, strbase, aux_base, ifd, fdp) SYMR *sym_ptr; int number; ! const char *strbase; AUXU *aux_base; int ifd; FDR *fdp; *************** print_symbol (sym_ptr, number, strbase, *** 1033,1041 **** if (MIPS_IS_STAB(sym_ptr)) { ! register int i = ARRAY_SIZE (stab_names); const char *stab_name = "stab"; short code = MIPS_UNMARK_STAB(sym_ptr->index); while (--i >= 0) if (stab_names[i].code == code) { --- 1011,1020 ---- if (MIPS_IS_STAB(sym_ptr)) { ! int i = ARRAY_SIZE (stab_names); const char *stab_name = "stab"; short code = MIPS_UNMARK_STAB(sym_ptr->index); + while (--i >= 0) if (stab_names[i].code == code) { *************** print_symbol (sym_ptr, number, strbase, *** 1054,1060 **** /* Print out a word from the aux. table in various formats. */ ! void print_aux (u, auxi, used) AUXU u; int auxi; --- 1033,1039 ---- /* Print out a word from the aux. table in various formats. */ ! static void print_aux (u, auxi, used) AUXU u; int auxi; *************** print_aux (u, auxi, used) *** 1080,1086 **** /* Write aggregate information to a string. */ ! void emit_aggregate (string, u, u2, which, fdp) char *string; AUXU u; --- 1059,1065 ---- /* Write aggregate information to a string. */ ! static void emit_aggregate (string, u, u2, which, fdp) char *string; AUXU u; *************** emit_aggregate (string, u, u2, which, fd *** 1120,1126 **** /* Print out information about a file descriptor, and the symbols, procedures, and line numbers within it. */ ! void print_file_desc (fdp, number) FDR *fdp; int number; --- 1099,1105 ---- /* Print out information about a file descriptor, and the symbols, procedures, and line numbers within it. */ ! static void print_file_desc (fdp, number) FDR *fdp; int number; *************** print_file_desc (fdp, number) *** 1348,1365 **** /* Read in the portions of the .T file that we will print out. */ ! void ! read_tfile __proto((void)) { short magic; off_t sym_hdr_offset = 0; ! (void) read_seek ((PTR_T) &magic, sizeof (magic), (off_t) 0, "Magic number"); if (!tfile) { /* Print out the global header, since this is not a T-file. */ ! (void) read_seek ((PTR_T) &global_hdr, sizeof (global_hdr), (off_t) 0, "Global file header"); print_global_hdr (&global_hdr); --- 1327,1344 ---- /* Read in the portions of the .T file that we will print out. */ ! static void ! read_tfile () { short magic; off_t sym_hdr_offset = 0; ! (void) read_seek ((PTR) &magic, sizeof (magic), (off_t) 0, "Magic number"); if (!tfile) { /* Print out the global header, since this is not a T-file. */ ! (void) read_seek ((PTR) &global_hdr, sizeof (global_hdr), (off_t) 0, "Global file header"); print_global_hdr (&global_hdr); *************** read_tfile __proto((void)) *** 1373,1411 **** sym_hdr_offset = global_hdr.f_symptr; } ! (void) read_seek ((PTR_T) &sym_hdr, sizeof (sym_hdr), sym_hdr_offset, "Symbolic header"); print_sym_hdr (&sym_hdr); ! lines = (LINER *) read_seek ((PTR_T) 0, sym_hdr.cbLine, sym_hdr.cbLineOffset, "Line numbers"); ! dense_nums = (DNR *) read_seek ((PTR_T) 0, sym_hdr.idnMax * sizeof (DNR), sym_hdr.cbDnOffset, "Dense numbers"); ! proc_desc = (PDR *) read_seek ((PTR_T) 0, sym_hdr.ipdMax * sizeof (PDR), sym_hdr.cbPdOffset, "Procedure tables"); ! l_symbols = (SYMR *) read_seek ((PTR_T) 0, sym_hdr.isymMax * sizeof (SYMR), sym_hdr.cbSymOffset, "Local symbols"); ! opt_symbols = (OPTR *) read_seek ((PTR_T) 0, sym_hdr.ioptMax * sizeof (OPTR), sym_hdr.cbOptOffset, "Optimization symbols"); ! aux_symbols = (AUXU *) read_seek ((PTR_T) 0, sym_hdr.iauxMax * sizeof (AUXU), sym_hdr.cbAuxOffset, "Auxiliary symbols"); --- 1352,1390 ---- sym_hdr_offset = global_hdr.f_symptr; } ! (void) read_seek ((PTR) &sym_hdr, sizeof (sym_hdr), sym_hdr_offset, "Symbolic header"); print_sym_hdr (&sym_hdr); ! lines = (LINER *) read_seek (NULL, sym_hdr.cbLine, sym_hdr.cbLineOffset, "Line numbers"); ! dense_nums = (DNR *) read_seek (NULL, sym_hdr.idnMax * sizeof (DNR), sym_hdr.cbDnOffset, "Dense numbers"); ! proc_desc = (PDR *) read_seek (NULL, sym_hdr.ipdMax * sizeof (PDR), sym_hdr.cbPdOffset, "Procedure tables"); ! l_symbols = (SYMR *) read_seek (NULL, sym_hdr.isymMax * sizeof (SYMR), sym_hdr.cbSymOffset, "Local symbols"); ! opt_symbols = (OPTR *) read_seek (NULL, sym_hdr.ioptMax * sizeof (OPTR), sym_hdr.cbOptOffset, "Optimization symbols"); ! aux_symbols = (AUXU *) read_seek (NULL, sym_hdr.iauxMax * sizeof (AUXU), sym_hdr.cbAuxOffset, "Auxiliary symbols"); *************** read_tfile __proto((void)) *** 1413,1439 **** if (sym_hdr.iauxMax > 0) aux_used = xcalloc (sym_hdr.iauxMax, 1); ! l_strings = (char *) read_seek ((PTR_T) 0, sym_hdr.issMax, sym_hdr.cbSsOffset, "Local string table"); ! e_strings = (char *) read_seek ((PTR_T) 0, sym_hdr.issExtMax, sym_hdr.cbSsExtOffset, "External string table"); ! file_desc = (FDR *) read_seek ((PTR_T) 0, sym_hdr.ifdMax * sizeof (FDR), sym_hdr.cbFdOffset, "File tables"); ! rfile_desc = (ulong *) read_seek ((PTR_T) 0, sym_hdr.crfd * sizeof (ulong), sym_hdr.cbRfdOffset, "Relative file tables"); ! e_symbols = (EXTR *) read_seek ((PTR_T) 0, sym_hdr.iextMax * sizeof (EXTR), sym_hdr.cbExtOffset, "External symbols"); --- 1392,1418 ---- if (sym_hdr.iauxMax > 0) aux_used = xcalloc (sym_hdr.iauxMax, 1); ! l_strings = (char *) read_seek (NULL, sym_hdr.issMax, sym_hdr.cbSsOffset, "Local string table"); ! e_strings = (char *) read_seek (NULL, sym_hdr.issExtMax, sym_hdr.cbSsExtOffset, "External string table"); ! file_desc = (FDR *) read_seek (NULL, sym_hdr.ifdMax * sizeof (FDR), sym_hdr.cbFdOffset, "File tables"); ! rfile_desc = (ulong *) read_seek (NULL, sym_hdr.crfd * sizeof (ulong), sym_hdr.cbRfdOffset, "Relative file tables"); ! e_symbols = (EXTR *) read_seek (NULL, sym_hdr.iextMax * sizeof (EXTR), sym_hdr.cbExtOffset, "External symbols"); *************** main (argc, argv) *** 1568,1578 **** return 0; } - - - void - fancy_abort () - { - fprintf (stderr, "mips-tdump internal error"); - exit (1); - } --- 1547,1549 ---- diff -Nrc3pad gcc-3.0.4/gcc/mips-tfile.c gcc-3.1/gcc/mips-tfile.c *** gcc-3.0.4/gcc/mips-tfile.c Thu Jul 19 18:01:30 2001 --- gcc-3.1/gcc/mips-tfile.c Tue Jan 15 05:25:26 2002 *************** *** 2,27 **** contain debugging information specified by the GNU compiler in the form of comments (the mips assembler does not support assembly access to debug information). ! Copyright (C) 1991, 1993, 1994, 1995, 1997, 1998, ! 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Michael Meissner (meissner@cygnus.com). ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* Here is a brief description of the MIPS ECOFF symbol table. The --- 2,27 ---- contain debugging information specified by the GNU compiler in the form of comments (the mips assembler does not support assembly access to debug information). ! Copyright (C) 1991, 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2001 ! Free Software Foundation, Inc. Contributed by Michael Meissner (meissner@cygnus.com). ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* Here is a brief description of the MIPS ECOFF symbol table. The *************** Boston, MA 02111-1307, USA. */ *** 613,622 **** #define __LINE__ 0 #endif - #define __proto(x) PARAMS(x) - typedef PTR PTR_T; - typedef const PTR_T CPTR_T; - /* Due to size_t being defined in sys/types.h and different in stddef.h, we have to do this by hand..... Note, these types are correct for MIPS based systems, and may not be --- 613,618 ---- *************** typedef const PTR_T CPTR_T; *** 636,644 **** so they can't be static. */ extern void pfatal_with_name ! __proto((const char *)) ATTRIBUTE_NORETURN; ! extern void fancy_abort __proto((void)) ATTRIBUTE_NORETURN; ! void botch __proto((const char *)) ATTRIBUTE_NORETURN; extern void fatal PARAMS ((const char *format, ...)) ATTRIBUTE_PRINTF_1 ATTRIBUTE_NORETURN; extern void error PARAMS ((const char *format, ...)) ATTRIBUTE_PRINTF_1; --- 632,640 ---- so they can't be static. */ extern void pfatal_with_name ! PARAMS ((const char *)) ATTRIBUTE_NORETURN; ! extern void fancy_abort PARAMS ((void)) ATTRIBUTE_NORETURN; ! void botch PARAMS ((const char *)) ATTRIBUTE_NORETURN; extern void fatal PARAMS ((const char *format, ...)) ATTRIBUTE_PRINTF_1 ATTRIBUTE_NORETURN; extern void error PARAMS ((const char *format, ...)) ATTRIBUTE_PRINTF_1; *************** main () *** 662,670 **** #else /* MIPS_DEBUGGING defined */ /* The local and global symbols have a field index, so undo any defines ! of index -> strchr and rindex -> strrchr. */ - #undef rindex #undef index #include --- 658,665 ---- #else /* MIPS_DEBUGGING defined */ /* The local and global symbols have a field index, so undo any defines ! of index -> strchr. */ #undef index #include *************** main () *** 675,691 **** #include "mips/a.out.h" #endif /* CROSS_COMPILE */ ! #if defined (USG) || !defined (HAVE_STAB_H) ! #include "gstab.h" /* If doing DBX on sysV, use our own stab.h. */ ! #else ! #include /* On BSD, use the system's stab.h. */ ! #endif /* not USG */ - #ifdef __GNU_STAB__ #define STAB_CODE_TYPE enum __stab_debug_code - #else - #define STAB_CODE_TYPE int - #endif #ifndef MALLOC_CHECK #ifdef __SABER__ --- 670,678 ---- #include "mips/a.out.h" #endif /* CROSS_COMPILE */ ! #include "gstab.h" #define STAB_CODE_TYPE enum __stab_debug_code #ifndef MALLOC_CHECK #ifdef __SABER__ *************** main () *** 694,700 **** #endif #define IS_ASM_IDENT(ch) \ ! (ISALNUM (ch) || (ch) == '_' || (ch) == '.' || (ch) == '$') /* Redefinition of storage classes as an enumeration for better --- 681,687 ---- #endif #define IS_ASM_IDENT(ch) \ ! (ISIDNUM (ch) || (ch) == '.' || (ch) == '$') /* Redefinition of storage classes as an enumeration for better *************** enum alloc_type { *** 915,921 **** #define PAGE_SIZE 4096 /* size of varray pages */ #endif ! #define PAGE_USIZE ((Size_t)PAGE_SIZE) #ifndef MAX_CLUSTER_PAGES /* # pages to get from system */ --- 902,908 ---- #define PAGE_SIZE 4096 /* size of varray pages */ #endif ! #define PAGE_USIZE ((Size_t) PAGE_SIZE) #ifndef MAX_CLUSTER_PAGES /* # pages to get from system */ *************** static EXTR *last_func_eptr; *** 1286,1292 **** Maybe this will be fixed in 2.10 or 2.20 of the MIPS compiler suite, but for now go with what works. */ ! static bt_t map_coff_types[ (int)T_MAX ] = { bt_Nil, /* T_NULL */ bt_Nil, /* T_ARG */ bt_Char, /* T_CHAR */ --- 1273,1279 ---- Maybe this will be fixed in 2.10 or 2.20 of the MIPS compiler suite, but for now go with what works. */ ! static const bt_t map_coff_types[ (int) T_MAX ] = { bt_Nil, /* T_NULL */ bt_Nil, /* T_ARG */ bt_Char, /* T_CHAR */ *************** static bt_t map_coff_types[ (int)T_MAX ] *** 1306,1312 **** }; /* Convert COFF storage class to ECOFF storage class. */ ! static sc_t map_coff_storage[ (int)C_MAX ] = { sc_Nil, /* 0: C_NULL */ sc_Abs, /* 1: C_AUTO auto var */ sc_Undefined, /* 2: C_EXT external */ --- 1293,1299 ---- }; /* Convert COFF storage class to ECOFF storage class. */ ! static const sc_t map_coff_storage[ (int) C_MAX ] = { sc_Nil, /* 0: C_NULL */ sc_Abs, /* 1: C_AUTO auto var */ sc_Undefined, /* 2: C_EXT external */ *************** static sc_t map_coff_storage[ (int)C_MAX *** 1417,1423 **** }; /* Convert COFF storage class to ECOFF symbol type. */ ! static st_t map_coff_sym_type[ (int)C_MAX ] = { st_Nil, /* 0: C_NULL */ st_Local, /* 1: C_AUTO auto var */ st_Global, /* 2: C_EXT external */ --- 1404,1410 ---- }; /* Convert COFF storage class to ECOFF symbol type. */ ! static const st_t map_coff_sym_type[ (int) C_MAX ] = { st_Nil, /* 0: C_NULL */ st_Local, /* 1: C_AUTO auto var */ st_Global, /* 2: C_EXT external */ *************** static st_t map_coff_sym_type[ (int)C_MA *** 1528,1534 **** }; /* Map COFF derived types to ECOFF type qualifiers. */ ! static tq_t map_coff_derived_type[ (int)DT_MAX ] = { tq_Nil, /* 0: DT_NON no more qualifiers */ tq_Ptr, /* 1: DT_PTR pointer */ tq_Proc, /* 2: DT_FCN function */ --- 1515,1521 ---- }; /* Map COFF derived types to ECOFF type qualifiers. */ ! static const tq_t map_coff_derived_type[ (int) DT_MAX ] = { tq_Nil, /* 0: DT_NON no more qualifiers */ tq_Ptr, /* 1: DT_PTR pointer */ tq_Proc, /* 2: DT_FCN function */ *************** static tq_t map_coff_derived_type[ (int) *** 1537,1543 **** /* Keep track of different sized allocation requests. */ ! static alloc_info_t alloc_counts[ (int)alloc_type_last ]; /* Pointers and such to the original symbol table that is read in. */ --- 1524,1530 ---- /* Keep track of different sized allocation requests. */ ! static alloc_info_t alloc_counts[ (int) alloc_type_last ]; /* Pointers and such to the original symbol table that is read in. */ *************** static EXTR *orig_ext_syms; /* externa *** 1559,1565 **** /* Macros to convert an index into a given object within the original symbol table. */ #define CHECK(num,max,str) \ ! (((unsigned long)num > (unsigned long)max) ? out_of_bounds (num, max, str, __LINE__) : 0) #define ORIG_LINENUM(indx) (CHECK ((indx), orig_sym_hdr.cbLine, "line#"), (indx) + orig_linenum) #define ORIG_DENSE(indx) (CHECK ((indx), orig_sym_hdr.idnMax, "dense"), (indx) + orig_dense) --- 1546,1552 ---- /* Macros to convert an index into a given object within the original symbol table. */ #define CHECK(num,max,str) \ ! (((unsigned long) num > (unsigned long) max) ? out_of_bounds (num, max, str, __LINE__) : 0) #define ORIG_LINENUM(indx) (CHECK ((indx), orig_sym_hdr.cbLine, "line#"), (indx) + orig_linenum) #define ORIG_DENSE(indx) (CHECK ((indx), orig_sym_hdr.idnMax, "dense"), (indx) + orig_dense) *************** static int stabs_seen = 0; /* != 0 if s *** 1607,1613 **** #define STABS_SYMBOL "@stabs" #endif ! static char stabs_symbol[] = STABS_SYMBOL; /* Forward reference for functions. See the definition for more details. */ --- 1594,1600 ---- #define STABS_SYMBOL "@stabs" #endif ! static const char stabs_symbol[] = STABS_SYMBOL; /* Forward reference for functions. See the definition for more details. */ *************** static char stabs_symbol[] = STABS_SYMBO *** 1616,1728 **** #define STATIC static #endif ! STATIC int out_of_bounds __proto((symint_t, symint_t, const char *, int)); ! STATIC shash_t *hash_string __proto((const char *, Ptrdiff_t, shash_t **, symint_t *)); ! STATIC symint_t add_string __proto((varray_t *, shash_t **, const char *, const char *, shash_t **)); STATIC symint_t add_local_symbol ! __proto((const char *, const char *, st_t, sc_t, symint_t, symint_t)); ! STATIC symint_t add_ext_symbol __proto((EXTR *, ! int)); STATIC symint_t add_aux_sym_symint ! __proto((symint_t)); STATIC symint_t add_aux_sym_rndx ! __proto((int, symint_t)); ! STATIC symint_t add_aux_sym_tir __proto((type_info_t *, hash_state_t, thash_t **)); ! STATIC tag_t * get_tag __proto((const char *, const char *, symint_t, bt_t)); ! STATIC void add_unknown_tag __proto((tag_t *)); ! STATIC void add_procedure __proto((const char *, const char *)); ! STATIC void add_file __proto((const char *, const char *)); ! STATIC void add_bytes __proto((varray_t *, char *, Size_t)); ! STATIC void add_varray_page __proto((varray_t *)); ! STATIC void update_headers __proto((void)); ! STATIC void write_varray __proto((varray_t *, off_t, const char *)); ! STATIC void write_object __proto((void)); ! STATIC const char *st_to_string __proto((st_t)); ! STATIC const char *sc_to_string __proto((sc_t)); ! STATIC char *read_line __proto((void)); ! STATIC void parse_input __proto((void)); ! STATIC void mark_stabs __proto((const char *)); ! STATIC void parse_begin __proto((const char *)); ! STATIC void parse_bend __proto((const char *)); ! STATIC void parse_def __proto((const char *)); ! STATIC void parse_end __proto((const char *)); ! STATIC void parse_ent __proto((const char *)); ! STATIC void parse_file __proto((const char *)); STATIC void parse_stabs_common ! __proto((const char *, const char *, const char *)); ! STATIC void parse_stabs __proto((const char *)); ! STATIC void parse_stabn __proto((const char *)); ! STATIC page_t *read_seek __proto((Size_t, off_t, const char *)); ! STATIC void copy_object __proto((void)); ! STATIC void catch_signal __proto((int)) ATTRIBUTE_NORETURN; ! STATIC page_t *allocate_page __proto((void)); STATIC page_t *allocate_multiple_pages ! __proto((Size_t)); STATIC void free_multiple_pages ! __proto((page_t *, Size_t)); #ifndef MALLOC_CHECK STATIC page_t *allocate_cluster ! __proto((Size_t)); #endif ! STATIC forward_t *allocate_forward __proto((void)); ! STATIC scope_t *allocate_scope __proto((void)); ! STATIC shash_t *allocate_shash __proto((void)); ! STATIC tag_t *allocate_tag __proto((void)); ! STATIC thash_t *allocate_thash __proto((void)); ! STATIC thead_t *allocate_thead __proto((void)); ! STATIC vlinks_t *allocate_vlinks __proto((void)); ! ! STATIC void free_forward __proto((forward_t *)); ! STATIC void free_scope __proto((scope_t *)); ! STATIC void free_tag __proto((tag_t *)); ! STATIC void free_thead __proto((thead_t *)); ! ! STATIC char *local_index __proto((const char *, int)); ! STATIC char *local_rindex __proto((const char *, int)); ! extern char *mktemp __proto((char *)); ! extern long strtol __proto((const char *, char **, int)); extern char *optarg; extern int optind; --- 1603,1709 ---- #define STATIC static #endif ! STATIC int out_of_bounds PARAMS ((symint_t, symint_t, const char *, int)); ! STATIC shash_t *hash_string PARAMS ((const char *, Ptrdiff_t, shash_t **, symint_t *)); ! STATIC symint_t add_string PARAMS ((varray_t *, shash_t **, const char *, const char *, shash_t **)); STATIC symint_t add_local_symbol ! PARAMS ((const char *, const char *, st_t, sc_t, symint_t, symint_t)); ! STATIC symint_t add_ext_symbol PARAMS ((EXTR *, ! int)); STATIC symint_t add_aux_sym_symint ! PARAMS ((symint_t)); STATIC symint_t add_aux_sym_rndx ! PARAMS ((int, symint_t)); ! STATIC symint_t add_aux_sym_tir PARAMS ((type_info_t *, hash_state_t, thash_t **)); ! STATIC tag_t * get_tag PARAMS ((const char *, const char *, symint_t, bt_t)); ! STATIC void add_unknown_tag PARAMS ((tag_t *)); ! STATIC void add_procedure PARAMS ((const char *, const char *)); ! STATIC void add_file PARAMS ((const char *, const char *)); ! STATIC void add_bytes PARAMS ((varray_t *, char *, Size_t)); ! STATIC void add_varray_page PARAMS ((varray_t *)); ! STATIC void update_headers PARAMS ((void)); ! STATIC void write_varray PARAMS ((varray_t *, off_t, const char *)); ! STATIC void write_object PARAMS ((void)); ! STATIC const char *st_to_string PARAMS ((st_t)); ! STATIC const char *sc_to_string PARAMS ((sc_t)); ! STATIC char *read_line PARAMS ((void)); ! STATIC void parse_input PARAMS ((void)); ! STATIC void mark_stabs PARAMS ((const char *)); ! STATIC void parse_begin PARAMS ((const char *)); ! STATIC void parse_bend PARAMS ((const char *)); ! STATIC void parse_def PARAMS ((const char *)); ! STATIC void parse_end PARAMS ((const char *)); ! STATIC void parse_ent PARAMS ((const char *)); ! STATIC void parse_file PARAMS ((const char *)); STATIC void parse_stabs_common ! PARAMS ((const char *, const char *, const char *)); ! STATIC void parse_stabs PARAMS ((const char *)); ! STATIC void parse_stabn PARAMS ((const char *)); ! STATIC page_t *read_seek PARAMS ((Size_t, off_t, const char *)); ! STATIC void copy_object PARAMS ((void)); ! STATIC void catch_signal PARAMS ((int)) ATTRIBUTE_NORETURN; ! STATIC page_t *allocate_page PARAMS ((void)); STATIC page_t *allocate_multiple_pages ! PARAMS ((Size_t)); STATIC void free_multiple_pages ! PARAMS ((page_t *, Size_t)); #ifndef MALLOC_CHECK STATIC page_t *allocate_cluster ! PARAMS ((Size_t)); #endif ! STATIC forward_t *allocate_forward PARAMS ((void)); ! STATIC scope_t *allocate_scope PARAMS ((void)); ! STATIC shash_t *allocate_shash PARAMS ((void)); ! STATIC tag_t *allocate_tag PARAMS ((void)); ! STATIC thash_t *allocate_thash PARAMS ((void)); ! STATIC thead_t *allocate_thead PARAMS ((void)); ! STATIC vlinks_t *allocate_vlinks PARAMS ((void)); ! STATIC void free_forward PARAMS ((forward_t *)); ! STATIC void free_scope PARAMS ((scope_t *)); ! STATIC void free_tag PARAMS ((tag_t *)); ! STATIC void free_thead PARAMS ((thead_t *)); extern char *optarg; extern int optind; *************** extern int opterr; *** 1734,1745 **** do...... */ typedef struct _pseudo_ops { ! const char *name; /* pseudo-op in ascii */ ! int len; /* length of name to compare */ ! void (*func) __proto((const char *)); /* function to handle line */ } pseudo_ops_t; ! static pseudo_ops_t pseudo_ops[] = { { "#.def", sizeof("#.def")-1, parse_def }, { "#.begin", sizeof("#.begin")-1, parse_begin }, { "#.bend", sizeof("#.bend")-1, parse_bend }, --- 1715,1726 ---- do...... */ typedef struct _pseudo_ops { ! const char *const name; /* pseudo-op in ascii */ ! const int len; /* length of name to compare */ ! void (*const func) PARAMS ((const char *)); /* function to handle line */ } pseudo_ops_t; ! static const pseudo_ops_t pseudo_ops[] = { { "#.def", sizeof("#.def")-1, parse_def }, { "#.begin", sizeof("#.begin")-1, parse_begin }, { "#.bend", sizeof("#.bend")-1, parse_bend }, *************** add_varray_page (vp) *** 1769,1776 **** #endif new_links->datum = allocate_page (); ! alloc_counts[ (int)alloc_type_varray ].total_alloc++; ! alloc_counts[ (int)alloc_type_varray ].total_pages++; new_links->start_index = vp->num_allocated; vp->objects_last_page = 0; --- 1750,1757 ---- #endif new_links->datum = allocate_page (); ! alloc_counts[ (int) alloc_type_varray ].total_alloc++; ! alloc_counts[ (int) alloc_type_varray ].total_pages++; new_links->start_index = vp->num_allocated; vp->objects_last_page = 0; *************** hash_string (text, hash_len, hash_tbl, r *** 1797,1806 **** shash_t **hash_tbl; /* hash table */ symint_t *ret_hash_index; /* ptr to store hash index */ { ! register unsigned long hi; ! register Ptrdiff_t i; ! register shash_t *ptr; ! register int first_ch = *text; hi = hash_len; for (i = 0; i < hash_len; i++) --- 1778,1787 ---- shash_t **hash_tbl; /* hash table */ symint_t *ret_hash_index; /* ptr to store hash index */ { ! unsigned long hi; ! Ptrdiff_t i; ! shash_t *ptr; ! int first_ch = *text; hi = hash_len; for (i = 0; i < hash_len; i++) *************** hash_string (text, hash_len, hash_tbl, r *** 1815,1821 **** for (ptr = hash_tbl[hi]; ptr != (shash_t *) 0; ptr = ptr->next) if ((symint_t) hash_len == ptr->len && first_ch == ptr->string[0] ! && memcmp ((CPTR_T) text, (CPTR_T) ptr->string, hash_len) == 0) break; return ptr; --- 1796,1802 ---- for (ptr = hash_tbl[hi]; ptr != (shash_t *) 0; ptr = ptr->next) if ((symint_t) hash_len == ptr->len && first_ch == ptr->string[0] ! && memcmp (text, ptr->string, hash_len) == 0) break; return ptr; *************** add_string (vp, hash_tbl, start, end_p1, *** 1834,1850 **** const char *end_p1; /* 1st byte after string */ shash_t **ret_hash; /* return hash pointer */ { ! register Ptrdiff_t len = end_p1 - start; ! register shash_t *hash_ptr; symint_t hi; if (len >= (Ptrdiff_t) PAGE_USIZE) ! fatal ("String too big (%ld bytes)", (long) len); hash_ptr = hash_string (start, len, hash_tbl, &hi); if (hash_ptr == (shash_t *) 0) { ! register char *p; if (vp->objects_last_page + len >= (long) PAGE_USIZE) { --- 1815,1831 ---- const char *end_p1; /* 1st byte after string */ shash_t **ret_hash; /* return hash pointer */ { ! Ptrdiff_t len = end_p1 - start; ! shash_t *hash_ptr; symint_t hi; if (len >= (Ptrdiff_t) PAGE_USIZE) ! fatal ("string too big (%ld bytes)", (long) len); hash_ptr = hash_string (start, len, hash_tbl, &hi); if (hash_ptr == (shash_t *) 0) { ! char *p; if (vp->objects_last_page + len >= (long) PAGE_USIZE) { *************** add_local_symbol (str_start, str_end_p1, *** 1888,1901 **** symint_t value; /* value of symbol */ symint_t indx; /* index to local/aux. syms */ { ! register symint_t ret; ! register SYMR *psym; ! register scope_t *pscope; ! register thead_t *ptag_head; ! register tag_t *ptag; ! register tag_t *ptag_next; ! register varray_t *vp = &cur_file_ptr->symbols; ! register int scope_delta = 0; shash_t *hash_ptr = (shash_t *) 0; if (vp->objects_last_page == vp->objects_per_page) --- 1869,1882 ---- symint_t value; /* value of symbol */ symint_t indx; /* index to local/aux. syms */ { ! symint_t ret; ! SYMR *psym; ! scope_t *pscope; ! thead_t *ptag_head; ! tag_t *ptag; ! tag_t *ptag_next; ! varray_t *vp = &cur_file_ptr->symbols; ! int scope_delta = 0; shash_t *hash_ptr = (shash_t *) 0; if (vp->objects_last_page == vp->objects_per_page) *************** add_local_symbol (str_start, str_end_p1, *** 1917,1923 **** ret = vp->num_allocated++; ! if (MIPS_IS_STAB(psym)) return ret; /* Save the symbol within the hash table if this is a static --- 1898,1904 ---- ret = vp->num_allocated++; ! if (MIPS_IS_STAB (psym)) return ret; /* Save the symbol within the hash table if this is a static *************** add_local_symbol (str_start, str_end_p1, *** 1961,1967 **** case st_End: pscope = cur_file_ptr->cur_scope; ! if (pscope == (scope_t *)0) error ("internal error, too many st_End's"); else --- 1942,1948 ---- case st_End: pscope = cur_file_ptr->cur_scope; ! if (pscope == (scope_t *) 0) error ("internal error, too many st_End's"); else *************** add_ext_symbol (esym, ifd) *** 2064,2075 **** { const char *str_start; /* first byte in string */ const char *str_end_p1; /* first byte after string */ ! register EXTR *psym; ! register varray_t *vp = &ext_symbols; shash_t *hash_ptr = (shash_t *) 0; str_start = ORIG_ESTRS (esym->asym.iss); ! str_end_p1 = str_start + strlen(str_start); if (debug > 1) { --- 2045,2056 ---- { const char *str_start; /* first byte in string */ const char *str_end_p1; /* first byte after string */ ! EXTR *psym; ! varray_t *vp = &ext_symbols; shash_t *hash_ptr = (shash_t *) 0; str_start = ORIG_ESTRS (esym->asym.iss); ! str_end_p1 = str_start + strlen (str_start); if (debug > 1) { *************** STATIC symint_t *** 2115,2123 **** add_aux_sym_symint (aux_word) symint_t aux_word; /* auxiliary information word */ { ! register AUXU *aux_ptr; ! register efdr_t *file_ptr = cur_file_ptr; ! register varray_t *vp = &file_ptr->aux_syms; if (vp->objects_last_page == vp->objects_per_page) add_varray_page (vp); --- 2096,2104 ---- add_aux_sym_symint (aux_word) symint_t aux_word; /* auxiliary information word */ { ! AUXU *aux_ptr; ! efdr_t *file_ptr = cur_file_ptr; ! varray_t *vp = &file_ptr->aux_syms; if (vp->objects_last_page == vp->objects_per_page) add_varray_page (vp); *************** add_aux_sym_rndx (file_index, sym_index) *** 2136,2144 **** int file_index; symint_t sym_index; { ! register AUXU *aux_ptr; ! register efdr_t *file_ptr = cur_file_ptr; ! register varray_t *vp = &file_ptr->aux_syms; if (vp->objects_last_page == vp->objects_per_page) add_varray_page (vp); --- 2117,2125 ---- int file_index; symint_t sym_index; { ! AUXU *aux_ptr; ! efdr_t *file_ptr = cur_file_ptr; ! varray_t *vp = &file_ptr->aux_syms; if (vp->objects_last_page == vp->objects_per_page) add_varray_page (vp); *************** add_aux_sym_tir (t, state, hash_tbl) *** 2160,2168 **** hash_state_t state; /* whether to hash type or not */ thash_t **hash_tbl; /* pointer to hash table to use */ { ! register AUXU *aux_ptr; ! register efdr_t *file_ptr = cur_file_ptr; ! register varray_t *vp = &file_ptr->aux_syms; static AUXU init_aux; symint_t ret; int i; --- 2141,2149 ---- hash_state_t state; /* whether to hash type or not */ thash_t **hash_tbl; /* pointer to hash table to use */ { ! AUXU *aux_ptr; ! efdr_t *file_ptr = cur_file_ptr; ! varray_t *vp = &file_ptr->aux_syms; static AUXU init_aux; symint_t ret; int i; *************** add_aux_sym_tir (t, state, hash_tbl) *** 2205,2212 **** if (state != hash_no) { ! register thash_t *hash_ptr; ! register symint_t hi; hi = aux.isym & ((1 << HASHBITS) - 1); hi %= THASH_SIZE; --- 2186,2193 ---- if (state != hash_no) { ! thash_t *hash_ptr; ! symint_t hi; hi = aux.isym & ((1 << HASHBITS) - 1); hi %= THASH_SIZE; *************** add_aux_sym_tir (t, state, hash_tbl) *** 2251,2257 **** for an enum bitfield. */ if (t->bitfield) ! (void) add_aux_sym_symint ((symint_t)t->sizes[t->num_sizes-1]); /* Add tag information if needed. Structure, union, and enum --- 2232,2238 ---- for an enum bitfield. */ if (t->bitfield) ! (void) add_aux_sym_symint ((symint_t) t->sizes[t->num_sizes-1]); /* Add tag information if needed. Structure, union, and enum *************** add_aux_sym_tir (t, state, hash_tbl) *** 2262,2269 **** || t->basic_type == bt_Union || t->basic_type == bt_Enum) { ! register symint_t file_index = t->tag_ptr->ifd; ! register symint_t sym_index = t->tag_ptr->indx; if (t->unknown_tag) { --- 2243,2250 ---- || t->basic_type == bt_Union || t->basic_type == bt_Enum) { ! symint_t file_index = t->tag_ptr->ifd; ! symint_t sym_index = t->tag_ptr->indx; if (t->unknown_tag) { *************** add_aux_sym_tir (t, state, hash_tbl) *** 2277,2283 **** } else { ! register forward_t *forward_ref = allocate_forward (); forward_ref->type_ptr = aux_ptr; forward_ref->next = t->tag_ptr->forward_ref; --- 2258,2264 ---- } else { ! forward_t *forward_ref = allocate_forward (); forward_ref->type_ptr = aux_ptr; forward_ref->next = t->tag_ptr->forward_ref; *************** add_procedure (func_start, func_end_p1) *** 2433,2447 **** const char *func_start; /* 1st byte of func name */ const char *func_end_p1; /* 1st byte after func name */ { ! register PDR *new_proc_ptr; ! register efdr_t *file_ptr = cur_file_ptr; ! register varray_t *vp = &file_ptr->procs; ! register symint_t value = 0; ! register st_t proc_type = st_Proc; ! register shash_t *shash_ptr = hash_string (func_start, ! func_end_p1 - func_start, ! &orig_str_hash[0], ! (symint_t *) 0); if (debug) fputc ('\n', stderr); --- 2414,2428 ---- const char *func_start; /* 1st byte of func name */ const char *func_end_p1; /* 1st byte after func name */ { ! PDR *new_proc_ptr; ! efdr_t *file_ptr = cur_file_ptr; ! varray_t *vp = &file_ptr->procs; ! symint_t value = 0; ! st_t proc_type = st_Proc; ! shash_t *shash_ptr = hash_string (func_start, ! func_end_p1 - func_start, ! &orig_str_hash[0], ! (symint_t *) 0); if (debug) fputc ('\n', stderr); *************** add_procedure (func_start, func_end_p1) *** 2458,2482 **** cur_oproc_ptr = (PDR *) 0; if (shash_ptr != (shash_t *) 0) { ! register PDR *old_proc_ptr = shash_ptr->proc_ptr; ! register SYMR *sym_ptr = shash_ptr->sym_ptr; if (old_proc_ptr != (PDR *) 0 && sym_ptr != (SYMR *) 0 ! && ((st_t)sym_ptr->st == st_Proc || (st_t)sym_ptr->st == st_StaticProc)) { cur_oproc_begin = sym_ptr; cur_oproc_end = shash_ptr->end_ptr; value = sym_ptr->value; cur_oproc_ptr = old_proc_ptr; ! proc_type = (st_t)sym_ptr->st; *new_proc_ptr = *old_proc_ptr; /* initialize */ } } if (cur_oproc_ptr == (PDR *) 0) ! error ("Did not find a PDR block for %.*s", (int) (func_end_p1 - func_start), func_start); /* Determine the start of symbols. */ --- 2439,2463 ---- cur_oproc_ptr = (PDR *) 0; if (shash_ptr != (shash_t *) 0) { ! PDR *old_proc_ptr = shash_ptr->proc_ptr; ! SYMR *sym_ptr = shash_ptr->sym_ptr; if (old_proc_ptr != (PDR *) 0 && sym_ptr != (SYMR *) 0 ! && ((st_t) sym_ptr->st == st_Proc || (st_t) sym_ptr->st == st_StaticProc)) { cur_oproc_begin = sym_ptr; cur_oproc_end = shash_ptr->end_ptr; value = sym_ptr->value; cur_oproc_ptr = old_proc_ptr; ! proc_type = (st_t) sym_ptr->st; *new_proc_ptr = *old_proc_ptr; /* initialize */ } } if (cur_oproc_ptr == (PDR *) 0) ! error ("did not find a PDR block for %.*s", (int) (func_end_p1 - func_start), func_start); /* Determine the start of symbols. */ *************** add_file (file_start, file_end_p1) *** 2501,2509 **** { static char zero_bytes[2] = { '\0', '\0' }; ! register Ptrdiff_t len = file_end_p1 - file_start; ! register int first_ch = *file_start; ! register efdr_t *file_ptr; if (debug) fprintf (stderr, "\tfile\t%.*s\n", (int) len, file_start); --- 2482,2490 ---- { static char zero_bytes[2] = { '\0', '\0' }; ! Ptrdiff_t len = file_end_p1 - file_start; ! int first_ch = *file_start; ! efdr_t *file_ptr; if (debug) fprintf (stderr, "\tfile\t%.*s\n", (int) len, file_start); *************** add_file (file_start, file_end_p1) *** 2515,2521 **** { if (first_ch == file_ptr->name[0] && file_ptr->name[len] == '\0' ! && memcmp ((CPTR_T) file_start, (CPTR_T) file_ptr->name, len) == 0) { cur_file_ptr = file_ptr; break; --- 2496,2502 ---- { if (first_ch == file_ptr->name[0] && file_ptr->name[len] == '\0' ! && memcmp (file_start, file_ptr->name, len) == 0) { cur_file_ptr = file_ptr; break; *************** add_file (file_start, file_end_p1) *** 2545,2551 **** (shash_t **) 0); if (file_end_p1 - file_start > (long) PAGE_USIZE-2) ! fatal ("Filename goes over one page boundary."); /* Push the start of the filename. We assume that the filename will be stored at string offset 1. */ --- 2526,2532 ---- (shash_t **) 0); if (file_end_p1 - file_start > (long) PAGE_USIZE-2) ! fatal ("filename goes over one page boundary"); /* Push the start of the filename. We assume that the filename will be stored at string offset 1. */ *************** add_bytes (vp, input_ptr, nitems) *** 2580,2588 **** char *input_ptr; /* start of the bytes */ Size_t nitems; /* # items to move */ { ! register Size_t move_items; ! register Size_t move_bytes; ! register char *ptr; while (nitems > 0) { --- 2561,2569 ---- char *input_ptr; /* start of the bytes */ Size_t nitems; /* # items to move */ { ! Size_t move_items; ! Size_t move_bytes; ! char *ptr; while (nitems > 0) { *************** add_bytes (vp, input_ptr, nitems) *** 2599,2605 **** if (move_bytes >= 32) { ! (void) memcpy ((PTR_T) ptr, (CPTR_T) input_ptr, move_bytes); input_ptr += move_bytes; } else --- 2580,2586 ---- if (move_bytes >= 32) { ! (void) memcpy (ptr, input_ptr, move_bytes); input_ptr += move_bytes; } else *************** add_bytes (vp, input_ptr, nitems) *** 2614,2623 **** /* Convert storage class to string. */ STATIC const char * ! sc_to_string(storage_class) sc_t storage_class; { ! switch(storage_class) { case sc_Nil: return "Nil,"; case sc_Text: return "Text,"; --- 2595,2604 ---- /* Convert storage class to string. */ STATIC const char * ! sc_to_string (storage_class) sc_t storage_class; { ! switch (storage_class) { case sc_Nil: return "Nil,"; case sc_Text: return "Text,"; *************** sc_to_string(storage_class) *** 2652,2661 **** /* Convert symbol type to string. */ STATIC const char * ! st_to_string(symbol_type) st_t symbol_type; { ! switch(symbol_type) { case st_Nil: return "Nil,"; case st_Global: return "Global,"; --- 2633,2642 ---- /* Convert symbol type to string. */ STATIC const char * ! st_to_string (symbol_type) st_t symbol_type; { ! switch (symbol_type) { case st_Nil: return "Nil,"; case st_Global: return "Global,"; *************** st_to_string(symbol_type) *** 2689,2701 **** semi-colon, and return each logical line independently. */ STATIC char * ! read_line __proto((void)) { static int line_split_p = 0; ! register int string_p = 0; ! register int comment_p = 0; ! register int ch; ! register char *ptr; if (cur_line_start == (char *) 0) { /* allocate initial page */ --- 2670,2682 ---- semi-colon, and return each logical line independently. */ STATIC char * ! read_line () { static int line_split_p = 0; ! int string_p = 0; ! int comment_p = 0; ! int ch; ! char *ptr; if (cur_line_start == (char *) 0) { /* allocate initial page */ *************** read_line __proto((void)) *** 2713,2720 **** { if (++cur_line_nbytes >= cur_line_alloc-1) { ! register int num_pages = cur_line_alloc / PAGE_SIZE; ! register char *old_buffer = cur_line_start; cur_line_alloc += PAGE_SIZE; cur_line_start = (char *) allocate_multiple_pages (num_pages+1); --- 2694,2701 ---- { if (++cur_line_nbytes >= cur_line_alloc-1) { ! int num_pages = cur_line_alloc / PAGE_SIZE; ! char *old_buffer = cur_line_start; cur_line_alloc += PAGE_SIZE; cur_line_start = (char *) allocate_multiple_pages (num_pages+1); *************** read_line __proto((void)) *** 2732,2738 **** } else if (ch == '\0') ! error ("Null character found in input"); else if (!comment_p) { --- 2713,2719 ---- } else if (ch == '\0') ! error ("null character found in input"); else if (!comment_p) { *************** parse_begin (start) *** 2794,2807 **** if (hash_ptr == (shash_t *) 0) { ! error ("Label %.*s not found for #.begin", (int) (end_p1 - start), start); return; } if (cur_oproc_begin == (SYMR *) 0) { ! error ("Procedure table %.*s not found for #.begin", (int) (end_p1 - start), start); return; } --- 2775,2788 ---- if (hash_ptr == (shash_t *) 0) { ! error ("label %.*s not found for #.begin", (int) (end_p1 - start), start); return; } if (cur_oproc_begin == (SYMR *) 0) { ! error ("procedure table %.*s not found for #.begin", (int) (end_p1 - start), start); return; } *************** parse_bend (start) *** 2846,2865 **** if (hash_ptr == (shash_t *) 0) { ! error ("Label %.*s not found for #.bend", (int) (end_p1 - start), start); return; } if (cur_oproc_begin == (SYMR *) 0) { ! error ("Procedure table %.*s not found for #.bend", (int) (end_p1 - start), start); return; } (void) add_local_symbol ((const char *) 0, (const char *) 0, st_End, sc_Text, ! (symint_t)hash_ptr->sym_ptr->value - cur_oproc_begin->value, (symint_t) 0); } --- 2827,2846 ---- if (hash_ptr == (shash_t *) 0) { ! error ("label %.*s not found for #.bend", (int) (end_p1 - start), start); return; } if (cur_oproc_begin == (SYMR *) 0) { ! error ("procedure table %.*s not found for #.bend", (int) (end_p1 - start), start); return; } (void) add_local_symbol ((const char *) 0, (const char *) 0, st_End, sc_Text, ! (symint_t) hash_ptr->sym_ptr->value - cur_oproc_begin->value, (symint_t) 0); } *************** parse_def (name_start) *** 2884,2891 **** const char *arg_start; /* start of current argument */ const char *arg_end_p1; /* end+1 of current argument */ const char *name_end_p1; /* end+1 of label */ ! const char *tag_start = (const char *) 0; /* start of tag name */ ! const char *tag_end_p1 = (const char *) 0; /* end+1 of tag name */ sc_t storage_class = sc_Nil; st_t symbol_type = st_Nil; type_info_t t; --- 2865,2872 ---- const char *arg_start; /* start of current argument */ const char *arg_end_p1; /* end+1 of current argument */ const char *name_end_p1; /* end+1 of label */ ! const char *tag_start = 0; /* start of tag name */ ! const char *tag_end_p1 = 0; /* end+1 of tag name */ sc_t storage_class = sc_Nil; st_t symbol_type = st_Nil; type_info_t t; *************** parse_def (name_start) *** 2957,2963 **** /* Pick up the subdirective argument now. */ arg_was_number = arg_number = 0; ! arg_end_p1 = (const char *) 0; arg_start = dir_end_p1+1; ch = *arg_start; while (ch == ' ' || ch == '\t') --- 2938,2944 ---- /* Pick up the subdirective argument now. */ arg_was_number = arg_number = 0; ! arg_end_p1 = 0; arg_start = dir_end_p1+1; ch = *arg_start; while (ch == ' ' || ch == '\t') *************** parse_def (name_start) *** 3142,3154 **** tq_t *tq_ptr = &t.type_qualifiers[0]; t.orig_type = (coff_type_t) (arg_number & N_BTMASK); ! t.basic_type = map_coff_types [(int)t.orig_type]; for (i = N_TQ-1; i >= 0; i--) { int dt = (arg_number >> ((i * N_TQ_SHIFT) + N_BT_SHIFT) & N_TMASK); ! if (dt != (int)DT_NON) *tq_ptr++ = map_coff_derived_type [dt]; } --- 3123,3135 ---- tq_t *tq_ptr = &t.type_qualifiers[0]; t.orig_type = (coff_type_t) (arg_number & N_BTMASK); ! t.basic_type = map_coff_types [(int) t.orig_type]; for (i = N_TQ-1; i >= 0; i--) { int dt = (arg_number >> ((i * N_TQ_SHIFT) + N_BT_SHIFT) & N_TMASK); ! if (dt != (int) DT_NON) *tq_ptr++ = map_coff_derived_type [dt]; } *************** parse_def (name_start) *** 3308,3320 **** { if (tag_start == (char *) 0) { ! error ("No tag specified for %.*s", (int) (name_end_p1 - name_start), name_start); return; } ! t.tag_ptr = get_tag (tag_start, tag_end_p1, (symint_t)indexNil, t.basic_type); } --- 3289,3301 ---- { if (tag_start == (char *) 0) { ! error ("no tag specified for %.*s", (int) (name_end_p1 - name_start), name_start); return; } ! t.tag_ptr = get_tag (tag_start, tag_end_p1, (symint_t) indexNil, t.basic_type); } *************** parse_def (name_start) *** 3372,3378 **** that any error reporting above gives the correct name. */ case st_End: ! name_start = name_end_p1 = (const char *) 0; value = inside_enumeration = 0; break; --- 3353,3359 ---- that any error reporting above gives the correct name. */ case st_End: ! name_start = name_end_p1 = 0; value = inside_enumeration = 0; break; *************** parse_def (name_start) *** 3395,3401 **** for which the external symbol table is fine enough. */ if (eptr == (EXTR *) 0 ! || eptr->asym.st == (int)st_Nil || cur_proc_ptr != (PDR *) 0) { symint_t isym = add_local_symbol (name_start, name_end_p1, --- 3376,3382 ---- for which the external symbol table is fine enough. */ if (eptr == (EXTR *) 0 ! || eptr->asym.st == (int) st_Nil || cur_proc_ptr != (PDR *) 0) { symint_t isym = add_local_symbol (name_start, name_end_p1, *************** STATIC void *** 3454,3463 **** parse_end (start) const char *start; /* start of directive */ { ! register const char *start_func, *end_func_p1; ! register int ch; ! register symint_t value; ! register FDR *orig_fdr; if (cur_file_ptr == (efdr_t *) 0) { --- 3435,3444 ---- parse_end (start) const char *start; /* start of directive */ { ! const char *start_func, *end_func_p1; ! int ch; ! symint_t value; ! FDR *orig_fdr; if (cur_file_ptr == (efdr_t *) 0) { *************** parse_end (start) *** 3495,3505 **** orig_fdr = cur_file_ptr->orig_fdr; value = 0; ! if (orig_fdr != (FDR *)0 && cur_oproc_end != (SYMR *) 0) value = cur_oproc_end->value; else ! error ("Cannot find .end block for %.*s", (int) (end_func_p1 - start_func), start_func); (void) add_local_symbol (start_func, end_func_p1, --- 3476,3486 ---- orig_fdr = cur_file_ptr->orig_fdr; value = 0; ! if (orig_fdr != (FDR *) 0 && cur_oproc_end != (SYMR *) 0) value = cur_oproc_end->value; else ! error ("cannot find .end block for %.*s", (int) (end_func_p1 - start_func), start_func); (void) add_local_symbol (start_func, end_func_p1, *************** STATIC void *** 3517,3524 **** parse_ent (start) const char *start; /* start of directive */ { ! register const char *start_func, *end_func_p1; ! register int ch; if (cur_file_ptr == (efdr_t *) 0) { --- 3498,3505 ---- parse_ent (start) const char *start; /* start of directive */ { ! const char *start_func, *end_func_p1; ! int ch; if (cur_file_ptr == (efdr_t *) 0) { *************** parse_file (start) *** 3556,3575 **** const char *start; /* start of directive */ { char *p; ! register char *start_name, *end_name_p1; (void) strtol (start, &p, 0); if (start == p ! || (start_name = local_index (p, '"')) == (char *) 0 ! || (end_name_p1 = local_rindex (++start_name, '"')) == (char *) 0) { ! error ("Invalid .file directive"); return; } if (cur_proc_ptr != (PDR *) 0) { ! error ("No way to handle .file within .ent/.end section"); return; } --- 3537,3556 ---- const char *start; /* start of directive */ { char *p; ! char *start_name, *end_name_p1; (void) strtol (start, &p, 0); if (start == p ! || (start_name = strchr (p, '"')) == (char *) 0 ! || (end_name_p1 = strrchr (++start_name, '"')) == (char *) 0) { ! error ("invalid .file directive"); return; } if (cur_proc_ptr != (PDR *) 0) { ! error ("no way to handle .file within .ent/.end section"); return; } *************** mark_stabs (start) *** 3589,3595 **** stabs_seen = 1; (void) add_local_symbol (stabs_symbol, stabs_symbol + sizeof (stabs_symbol), ! stNil, scInfo, -1, MIPS_MARK_STAB(0)); } } --- 3570,3576 ---- stabs_seen = 1; (void) add_local_symbol (stabs_symbol, stabs_symbol + sizeof (stabs_symbol), ! stNil, scInfo, -1, MIPS_MARK_STAB (0)); } } *************** parse_stabs_common (string_start, string *** 3644,3650 **** /* Read code from stabs. */ if (!ISDIGIT (*rest)) { ! error ("Invalid .stabs/.stabn directive, code is non-numeric"); return; } --- 3625,3631 ---- /* Read code from stabs. */ if (!ISDIGIT (*rest)) { ! error ("invalid .stabs/.stabn directive, code is non-numeric"); return; } *************** parse_stabs_common (string_start, string *** 3656,3662 **** address. The symbol type is st_Label, which should be different from the other stabs, so that gdb can recognize it. */ ! if (code == (int)N_SLINE) { SYMR *sym_ptr, dummy_symr; shash_t *shash_ptr; --- 3637,3643 ---- address. The symbol type is st_Label, which should be different from the other stabs, so that gdb can recognize it. */ ! if (code == (int) N_SLINE) { SYMR *sym_ptr, dummy_symr; shash_t *shash_ptr; *************** parse_stabs_common (string_start, string *** 3664,3670 **** /* Skip ,0, */ if (p[0] != ',' || p[1] != '0' || p[2] != ',' || !ISDIGIT (p[3])) { ! error ("Invalid line number .stabs/.stabn directive"); return; } --- 3645,3651 ---- /* Skip ,0, */ if (p[0] != ',' || p[1] != '0' || p[2] != ',' || !ISDIGIT (p[3])) { ! error ("invalid line number .stabs/.stabn directive"); return; } *************** parse_stabs_common (string_start, string *** 3672,3685 **** ch = *++p; if (p[-1] != ',' || ISDIGIT (ch) || !IS_ASM_IDENT (ch)) { ! error ("Invalid line number .stabs/.stabn directive"); return; } dummy_symr.index = code; if (dummy_symr.index != code) { ! error ("Line number (%lu) for .stabs/.stabn directive cannot fit in index field (20 bits)", code); return; --- 3653,3666 ---- ch = *++p; if (p[-1] != ',' || ISDIGIT (ch) || !IS_ASM_IDENT (ch)) { ! error ("invalid line number .stabs/.stabn directive"); return; } dummy_symr.index = code; if (dummy_symr.index != code) { ! error ("line number (%lu) for .stabs/.stabn directive cannot fit in index field (20 bits)", code); return; *************** parse_stabs_common (string_start, string *** 3693,3705 **** if (shash_ptr == (shash_t *) 0 || (sym_ptr = shash_ptr->sym_ptr) == (SYMR *) 0) { ! error ("Invalid .stabs/.stabn directive, value not found"); return; } if ((st_t) sym_ptr->st != st_Label) { ! error ("Invalid line number .stabs/.stabn directive"); return; } --- 3674,3686 ---- if (shash_ptr == (shash_t *) 0 || (sym_ptr = shash_ptr->sym_ptr) == (SYMR *) 0) { ! error ("invalid .stabs/.stabn directive, value not found"); return; } if ((st_t) sym_ptr->st != st_Label) { ! error ("invalid line number .stabs/.stabn directive"); return; } *************** parse_stabs_common (string_start, string *** 3724,3730 **** if (!IS_ASM_IDENT (ch) && ch != '-') { failure: ! error ("Invalid .stabs/.stabn directive, bad character"); return; } --- 3705,3711 ---- if (!IS_ASM_IDENT (ch) && ch != '-') { failure: ! error ("invalid .stabs/.stabn directive, bad character"); return; } *************** parse_stabs_common (string_start, string *** 3735,3747 **** value = strtol (p, &p, 0); if (*p != '\n') { ! error ("Invalid .stabs/.stabn directive, stuff after numeric value"); return; } } else if (!IS_ASM_IDENT (ch)) { ! error ("Invalid .stabs/.stabn directive, bad character"); return; } else --- 3716,3728 ---- value = strtol (p, &p, 0); if (*p != '\n') { ! error ("invalid .stabs/.stabn directive, stuff after numeric value"); return; } } else if (!IS_ASM_IDENT (ch)) { ! error ("invalid .stabs/.stabn directive, bad character"); return; } else *************** parse_stabs_common (string_start, string *** 3754,3760 **** if ((end_p1 = strchr (start, '+')) == (char *) 0) { if ((end_p1 = strchr (start, '-')) == (char *) 0) ! end_p1 = start + strlen(start) - 1; } shash_ptr = hash_string (start, --- 3735,3741 ---- if ((end_p1 = strchr (start, '+')) == (char *) 0) { if ((end_p1 = strchr (start, '-')) == (char *) 0) ! end_p1 = start + strlen (start) - 1; } shash_ptr = hash_string (start, *************** parse_stabs_common (string_start, string *** 3773,3779 **** if (shash_ptr == (shash_t *) 0 || shash_ptr->esym_ptr == (EXTR *) 0) { ! error ("Invalid .stabs/.stabn directive, value not found"); return; } else --- 3754,3760 ---- if (shash_ptr == (shash_t *) 0 || shash_ptr->esym_ptr == (EXTR *) 0) { ! error ("invalid .stabs/.stabn directive, value not found"); return; } else *************** parse_stabs_common (string_start, string *** 3799,3805 **** if (((!ISDIGIT (*end_p1)) && (*end_p1 != '-')) || ((ch != '+') && (ch != '-'))) { ! error ("Invalid .stabs/.stabn directive, badly formed value"); return; } if (ch == '+') --- 3780,3786 ---- if (((!ISDIGIT (*end_p1)) && (*end_p1 != '-')) || ((ch != '+') && (ch != '-'))) { ! error ("invalid .stabs/.stabn directive, badly formed value"); return; } if (ch == '+') *************** parse_stabs_common (string_start, string *** 3809,3820 **** if (*p != '\n') { ! error ("Invalid .stabs/.stabn directive, stuff after numeric value"); return; } } } ! code = MIPS_MARK_STAB(code); } (void) add_local_symbol (string_start, string_end, st, sc, value, code); --- 3790,3801 ---- if (*p != '\n') { ! error ("invalid .stabs/.stabn directive, stuff after numeric value"); return; } } } ! code = MIPS_MARK_STAB (code); } (void) add_local_symbol (string_start, string_end, st, sc, value, code); *************** STATIC void *** 3827,3837 **** parse_stabs (start) const char *start; /* start of directive */ { ! const char *end = local_index (start+1, '"'); if (*start != '"' || end == (const char *) 0 || end[1] != ',') { ! error ("Invalid .stabs directive, no string"); return; } --- 3808,3818 ---- parse_stabs (start) const char *start; /* start of directive */ { ! const char *end = strchr (start+1, '"'); if (*start != '"' || end == (const char *) 0 || end[1] != ',') { ! error ("invalid .stabs directive, no string"); return; } *************** parse_stabn (start) *** 3851,3863 **** if needed. */ STATIC void ! parse_input __proto((void)) { ! register char *p; ! register Size_t i; ! register thead_t *ptag_head; ! register tag_t *ptag; ! register tag_t *ptag_next; if (debug) fprintf (stderr, "\tinput\n"); --- 3832,3844 ---- if needed. */ STATIC void ! parse_input () { ! char *p; ! Size_t i; ! thead_t *ptag_head; ! tag_t *ptag; ! tag_t *ptag_next; if (debug) fprintf (stderr, "\tinput\n"); *************** parse_input __proto((void)) *** 3914,3923 **** to write out the .T file. */ STATIC void ! update_headers __proto((void)) { ! register symint_t i; ! register efdr_t *file_ptr; /* Set up the symbolic header. */ file_offset = sizeof (symbolic_header) + orig_file_header.f_symptr; --- 3895,3904 ---- to write out the .T file. */ STATIC void ! update_headers () { ! symint_t i; ! efdr_t *file_ptr; /* Set up the symbolic header. */ file_offset = sizeof (symbolic_header) + orig_file_header.f_symptr; *************** update_headers __proto((void)) *** 3943,3952 **** file_ptr != (efdr_t *) 0; file_ptr = file_ptr->next_file) { ! register SYMR *sym_start; ! register SYMR *sym; ! register SYMR *sym_end_p1; ! register FDR *fd_ptr = file_ptr->orig_fdr; cur_file_ptr = file_ptr; --- 3924,3933 ---- file_ptr != (efdr_t *) 0; file_ptr = file_ptr->next_file) { ! SYMR *sym_start; ! SYMR *sym; ! SYMR *sym_end_p1; ! FDR *fd_ptr = file_ptr->orig_fdr; cur_file_ptr = file_ptr; *************** update_headers __proto((void)) *** 3958,3982 **** sym_end_p1 = sym_start + fd_ptr->csym; for (sym = sym_start; sym < sym_end_p1; sym++) { ! if ((st_t)sym->st == st_Static) { ! register char *str = ORIG_LSTRS (fd_ptr->issBase + sym->iss); ! register Size_t len = strlen (str); ! register shash_t *hash_ptr; /* Ignore internal labels. */ if (str[0] == '$' && str[1] == 'L') continue; hash_ptr = hash_string (str, ! (Ptrdiff_t)len, &file_ptr->shash_head[0], (symint_t *) 0); if (hash_ptr == (shash_t *) 0) { (void) add_local_symbol (str, str + len, ! (st_t)sym->st, (sc_t)sym->sc, ! (symint_t)sym->value, ! (symint_t)indexNil); } } } --- 3939,3963 ---- sym_end_p1 = sym_start + fd_ptr->csym; for (sym = sym_start; sym < sym_end_p1; sym++) { ! if ((st_t) sym->st == st_Static) { ! char *str = ORIG_LSTRS (fd_ptr->issBase + sym->iss); ! Size_t len = strlen (str); ! shash_t *hash_ptr; /* Ignore internal labels. */ if (str[0] == '$' && str[1] == 'L') continue; hash_ptr = hash_string (str, ! (Ptrdiff_t) len, &file_ptr->shash_head[0], (symint_t *) 0); if (hash_ptr == (shash_t *) 0) { (void) add_local_symbol (str, str + len, ! (st_t) sym->st, (sc_t) sym->sc, ! (symint_t) sym->value, ! (symint_t) indexNil); } } } *************** write_varray (vp, offset, str) *** 4114,4126 **** if (debug) { fputs ("\twarray\tvp = ", stderr); ! fprintf (stderr, HOST_PTR_PRINTF, vp); fprintf (stderr, ", offset = %7lu, size = %7lu, %s\n", (unsigned long) offset, vp->num_allocated * vp->object_size, str); } if (file_offset != offset ! && fseek (object_stream, (long)offset, SEEK_SET) < 0) pfatal_with_name (object_name); for (ptr = vp->first; ptr != (vlinks_t *) 0; ptr = ptr->next) --- 4095,4107 ---- if (debug) { fputs ("\twarray\tvp = ", stderr); ! fprintf (stderr, HOST_PTR_PRINTF, (PTR) vp); fprintf (stderr, ", offset = %7lu, size = %7lu, %s\n", (unsigned long) offset, vp->num_allocated * vp->object_size, str); } if (file_offset != offset ! && fseek (object_stream, (long) offset, SEEK_SET) < 0) pfatal_with_name (object_name); for (ptr = vp->first; ptr != (vlinks_t *) 0; ptr = ptr->next) *************** write_varray (vp, offset, str) *** 4129,4140 **** ? vp->objects_last_page * vp->object_size : vp->objects_per_page * vp->object_size; ! sys_write = fwrite ((PTR_T) ptr->datum, 1, num_write, object_stream); if (sys_write <= 0) pfatal_with_name (object_name); else if (sys_write != num_write) ! fatal ("Wrote %d bytes to %s, system returned %d", num_write, object_name, sys_write); --- 4110,4121 ---- ? vp->objects_last_page * vp->object_size : vp->objects_per_page * vp->object_size; ! sys_write = fwrite ((PTR) ptr->datum, 1, num_write, object_stream); if (sys_write <= 0) pfatal_with_name (object_name); else if (sys_write != num_write) ! fatal ("wrote %d bytes to %s, system returned %d", num_write, object_name, sys_write); *************** write_varray (vp, offset, str) *** 4147,4153 **** /* Write out the symbol table in the object file. */ STATIC void ! write_object __proto((void)) { int sys_write; efdr_t *file_ptr; --- 4128,4134 ---- /* Write out the symbol table in the object file. */ STATIC void ! write_object () { int sys_write; efdr_t *file_ptr; *************** write_object __proto((void)) *** 4156,4167 **** if (debug) { fputs ("\n\twrite\tvp = ", stderr); ! fprintf (stderr, HOST_PTR_PRINTF, (PTR_T *) &symbolic_header); fprintf (stderr, ", offset = %7u, size = %7lu, %s\n", 0, (unsigned long) sizeof (symbolic_header), "symbolic header"); } ! sys_write = fwrite ((PTR_T) &symbolic_header, 1, sizeof (symbolic_header), object_stream); --- 4137,4148 ---- if (debug) { fputs ("\n\twrite\tvp = ", stderr); ! fprintf (stderr, HOST_PTR_PRINTF, (PTR) &symbolic_header); fprintf (stderr, ", offset = %7u, size = %7lu, %s\n", 0, (unsigned long) sizeof (symbolic_header), "symbolic header"); } ! sys_write = fwrite ((PTR) &symbolic_header, 1, sizeof (symbolic_header), object_stream); *************** write_object __proto((void)) *** 4170,4176 **** pfatal_with_name (object_name); else if (sys_write != sizeof (symbolic_header)) ! fatal ("Wrote %d bytes to %s, system returned %d", (int) sizeof (symbolic_header), object_name, sys_write); --- 4151,4157 ---- pfatal_with_name (object_name); else if (sys_write != sizeof (symbolic_header)) ! fatal ("wrote %d bytes to %s, system returned %d", (int) sizeof (symbolic_header), object_name, sys_write); *************** write_object __proto((void)) *** 4189,4201 **** if (debug) { fputs ("\twrite\tvp = ", stderr); ! fprintf (stderr, HOST_PTR_PRINTF, (PTR_T *) &orig_linenum); fprintf (stderr, ", offset = %7lu, size = %7lu, %s\n", (long) symbolic_header.cbLineOffset, (long) symbolic_header.cbLine, "Line numbers"); } ! sys_write = fwrite ((PTR_T) orig_linenum, 1, symbolic_header.cbLine, object_stream); --- 4170,4182 ---- if (debug) { fputs ("\twrite\tvp = ", stderr); ! fprintf (stderr, HOST_PTR_PRINTF, (PTR) &orig_linenum); fprintf (stderr, ", offset = %7lu, size = %7lu, %s\n", (long) symbolic_header.cbLineOffset, (long) symbolic_header.cbLine, "Line numbers"); } ! sys_write = fwrite ((PTR) orig_linenum, 1, symbolic_header.cbLine, object_stream); *************** write_object __proto((void)) *** 4204,4210 **** pfatal_with_name (object_name); else if (sys_write != symbolic_header.cbLine) ! fatal ("Wrote %ld bytes to %s, system returned %ld", (long) symbolic_header.cbLine, object_name, sys_write); --- 4185,4191 ---- pfatal_with_name (object_name); else if (sys_write != symbolic_header.cbLine) ! fatal ("wrote %ld bytes to %s, system returned %ld", (long) symbolic_header.cbLine, object_name, sys_write); *************** write_object __proto((void)) *** 4224,4236 **** if (debug) { fputs ("\twrite\tvp = ", stderr); ! fprintf (stderr, HOST_PTR_PRINTF, (PTR_T *) &orig_opt_syms); fprintf (stderr, ", offset = %7lu, size = %7lu, %s\n", (long) symbolic_header.cbOptOffset, num_write, "Optimizer symbols"); } ! sys_write = fwrite ((PTR_T) orig_opt_syms, 1, num_write, object_stream); --- 4205,4217 ---- if (debug) { fputs ("\twrite\tvp = ", stderr); ! fprintf (stderr, HOST_PTR_PRINTF, (PTR) &orig_opt_syms); fprintf (stderr, ", offset = %7lu, size = %7lu, %s\n", (long) symbolic_header.cbOptOffset, num_write, "Optimizer symbols"); } ! sys_write = fwrite ((PTR) orig_opt_syms, 1, num_write, object_stream); *************** write_object __proto((void)) *** 4239,4245 **** pfatal_with_name (object_name); else if (sys_write != num_write) ! fatal ("Wrote %ld bytes to %s, system returned %ld", num_write, object_name, sys_write); --- 4220,4226 ---- pfatal_with_name (object_name); else if (sys_write != num_write) ! fatal ("wrote %ld bytes to %s, system returned %ld", num_write, object_name, sys_write); *************** write_object __proto((void)) *** 4248,4254 **** } if (symbolic_header.idnMax > 0) /* dense numbers */ ! write_varray (&dense_num, (off_t)symbolic_header.cbDnOffset, "Dense numbers"); if (symbolic_header.ipdMax > 0) /* procedure tables */ { --- 4229,4235 ---- } if (symbolic_header.idnMax > 0) /* dense numbers */ ! write_varray (&dense_num, (off_t) symbolic_header.cbDnOffset, "Dense numbers"); if (symbolic_header.ipdMax > 0) /* procedure tables */ { *************** write_object __proto((void)) *** 4305,4311 **** { offset = symbolic_header.cbFdOffset; if (file_offset != offset ! && fseek (object_stream, (long)offset, SEEK_SET) < 0) pfatal_with_name (object_name); file_offset = offset; --- 4286,4292 ---- { offset = symbolic_header.cbFdOffset; if (file_offset != offset ! && fseek (object_stream, (long) offset, SEEK_SET) < 0) pfatal_with_name (object_name); file_offset = offset; *************** write_object __proto((void)) *** 4316,4322 **** if (debug) { fputs ("\twrite\tvp = ", stderr); ! fprintf (stderr, HOST_PTR_PRINTF, (PTR_T *) &file_ptr->fdr); fprintf (stderr, ", offset = %7lu, size = %7lu, %s\n", file_offset, (unsigned long) sizeof (FDR), "File header"); --- 4297,4303 ---- if (debug) { fputs ("\twrite\tvp = ", stderr); ! fprintf (stderr, HOST_PTR_PRINTF, (PTR) &file_ptr->fdr); fprintf (stderr, ", offset = %7lu, size = %7lu, %s\n", file_offset, (unsigned long) sizeof (FDR), "File header"); *************** write_object __proto((void)) *** 4331,4337 **** pfatal_with_name (object_name); else if (sys_write != sizeof (FDR)) ! fatal ("Wrote %d bytes to %s, system returned %d", (int) sizeof (FDR), object_name, sys_write); --- 4312,4318 ---- pfatal_with_name (object_name); else if (sys_write != sizeof (FDR)) ! fatal ("wrote %d bytes to %s, system returned %d", (int) sizeof (FDR), object_name, sys_write); *************** write_object __proto((void)) *** 4352,4358 **** if (debug) { fputs ("\twrite\tvp = ", stderr); ! fprintf (stderr, HOST_PTR_PRINTF, (PTR_T *) &orig_rfds); fprintf (stderr, ", offset = %7lu, size = %7lu, %s\n", (long) symbolic_header.cbRfdOffset, num_write, "Relative file descriptors"); --- 4333,4339 ---- if (debug) { fputs ("\twrite\tvp = ", stderr); ! fprintf (stderr, HOST_PTR_PRINTF, (PTR) &orig_rfds); fprintf (stderr, ", offset = %7lu, size = %7lu, %s\n", (long) symbolic_header.cbRfdOffset, num_write, "Relative file descriptors"); *************** write_object __proto((void)) *** 4366,4373 **** if (sys_write <= 0) pfatal_with_name (object_name); ! else if (sys_write != (long)num_write) ! fatal ("Wrote %lu bytes to %s, system returned %ld", num_write, object_name, sys_write); --- 4347,4354 ---- if (sys_write <= 0) pfatal_with_name (object_name); ! else if (sys_write != (long) num_write) ! fatal ("wrote %lu bytes to %s, system returned %ld", num_write, object_name, sys_write); *************** write_object __proto((void)) *** 4376,4382 **** } if (symbolic_header.issExtMax > 0) /* external symbols */ ! write_varray (&ext_symbols, (off_t)symbolic_header.cbExtOffset, "External symbols"); if (fclose (object_stream) != 0) pfatal_with_name (object_name); --- 4357,4363 ---- } if (symbolic_header.issExtMax > 0) /* external symbols */ ! write_varray (&ext_symbols, (off_t) symbolic_header.cbExtOffset, "External symbols"); if (fclose (object_stream) != 0) pfatal_with_name (object_name); *************** read_seek (size, offset, str) *** 4422,4429 **** if (sys_read <= 0) pfatal_with_name (obj_in_name); ! if ((symint_t)sys_read != difference) ! fatal ("Wanted to read %lu bytes from %s, system returned %ld", (unsigned long) size, obj_in_name, sys_read); --- 4403,4410 ---- if (sys_read <= 0) pfatal_with_name (obj_in_name); ! if ((symint_t) sys_read != difference) ! fatal ("wanted to read %lu bytes from %s, system returned %ld", (unsigned long) size, obj_in_name, sys_read); *************** read_seek (size, offset, str) *** 4432,4443 **** pfatal_with_name (obj_in_name); } ! sys_read = fread ((PTR_T)ptr, 1, size, obj_in_stream); if (sys_read <= 0) pfatal_with_name (obj_in_name); if (sys_read != (long) size) ! fatal ("Wanted to read %lu bytes from %s, system returned %ld", (unsigned long) size, obj_in_name, sys_read); --- 4413,4424 ---- pfatal_with_name (obj_in_name); } ! sys_read = fread ((PTR) ptr, 1, size, obj_in_stream); if (sys_read <= 0) pfatal_with_name (obj_in_name); if (sys_read != (long) size) ! fatal ("wanted to read %lu bytes from %s, system returned %ld", (unsigned long) size, obj_in_name, sys_read); *************** read_seek (size, offset, str) *** 4456,4471 **** symbol table. */ STATIC void ! copy_object __proto((void)) { char buffer[ PAGE_SIZE ]; ! register int sys_read; ! register int remaining; ! register int num_write; ! register int sys_write; ! register int fd, es; ! register int delete_ifd = 0; ! register int *remap_file_number; struct stat stat_buf; if (debug) --- 4437,4452 ---- symbol table. */ STATIC void ! copy_object () { char buffer[ PAGE_SIZE ]; ! int sys_read; ! int remaining; ! int num_write; ! int sys_write; ! int fd, es; ! int delete_ifd = 0; ! int *remap_file_number; struct stat stat_buf; if (debug) *************** copy_object __proto((void)) *** 4475,4481 **** || fseek (obj_in_stream, 0L, SEEK_SET) != 0) pfatal_with_name (obj_in_name); ! sys_read = fread ((PTR_T) &orig_file_header, 1, sizeof (struct filehdr), obj_in_stream); --- 4456,4462 ---- || fseek (obj_in_stream, 0L, SEEK_SET) != 0) pfatal_with_name (obj_in_name); ! sys_read = fread ((PTR) &orig_file_header, 1, sizeof (struct filehdr), obj_in_stream); *************** copy_object __proto((void)) *** 4487,4508 **** return; /* create a .T file sans file header */ else if (sys_read < (int) sizeof (struct filehdr)) ! fatal ("Wanted to read %d bytes from %s, system returned %d", (int) sizeof (struct filehdr), obj_in_name, sys_read); if (orig_file_header.f_nsyms != sizeof (HDRR)) ! fatal ("%s symbolic header wrong size (%d bytes, should be %d)", ! input_name, orig_file_header.f_nsyms, (int) sizeof (HDRR)); /* Read in the current symbolic header. */ if (fseek (obj_in_stream, (long) orig_file_header.f_symptr, SEEK_SET) != 0) pfatal_with_name (input_name); ! sys_read = fread ((PTR_T) &orig_sym_hdr, 1, sizeof (orig_sym_hdr), obj_in_stream); --- 4468,4489 ---- return; /* create a .T file sans file header */ else if (sys_read < (int) sizeof (struct filehdr)) ! fatal ("wanted to read %d bytes from %s, system returned %d", (int) sizeof (struct filehdr), obj_in_name, sys_read); if (orig_file_header.f_nsyms != sizeof (HDRR)) ! fatal ("%s symbolic header wrong size (%ld bytes, should be %ld)", ! input_name, (long) orig_file_header.f_nsyms, (long) sizeof (HDRR)); /* Read in the current symbolic header. */ if (fseek (obj_in_stream, (long) orig_file_header.f_symptr, SEEK_SET) != 0) pfatal_with_name (input_name); ! sys_read = fread ((PTR) &orig_sym_hdr, 1, sizeof (orig_sym_hdr), obj_in_stream); *************** copy_object __proto((void)) *** 4511,4517 **** pfatal_with_name (object_name); else if (sys_read < (int) sizeof (struct filehdr)) ! fatal ("Wanted to read %d bytes from %s, system returned %d", (int) sizeof (struct filehdr), obj_in_name, sys_read); --- 4492,4498 ---- pfatal_with_name (object_name); else if (sys_read < (int) sizeof (struct filehdr)) ! fatal ("wanted to read %d bytes from %s, system returned %d", (int) sizeof (struct filehdr), obj_in_name, sys_read); *************** copy_object __proto((void)) *** 4527,4587 **** file_offset = orig_file_header.f_symptr + sizeof (struct filehdr); if (orig_sym_hdr.cbLine > 0) /* line numbers */ ! orig_linenum = (char *) read_seek ((Size_t)orig_sym_hdr.cbLine, orig_sym_hdr.cbLineOffset, "Line numbers"); if (orig_sym_hdr.ipdMax > 0) /* procedure tables */ ! orig_procs = (PDR *) read_seek ((Size_t)orig_sym_hdr.ipdMax * sizeof (PDR), orig_sym_hdr.cbPdOffset, "Procedure tables"); if (orig_sym_hdr.isymMax > 0) /* local symbols */ ! orig_local_syms = (SYMR *) read_seek ((Size_t)orig_sym_hdr.isymMax * sizeof (SYMR), orig_sym_hdr.cbSymOffset, "Local symbols"); if (orig_sym_hdr.iauxMax > 0) /* aux symbols */ ! orig_aux_syms = (AUXU *) read_seek ((Size_t)orig_sym_hdr.iauxMax * sizeof (AUXU), orig_sym_hdr.cbAuxOffset, "Aux. symbols"); if (orig_sym_hdr.issMax > 0) /* local strings */ ! orig_local_strs = (char *) read_seek ((Size_t)orig_sym_hdr.issMax, orig_sym_hdr.cbSsOffset, "Local strings"); if (orig_sym_hdr.issExtMax > 0) /* external strings */ ! orig_ext_strs = (char *) read_seek ((Size_t)orig_sym_hdr.issExtMax, orig_sym_hdr.cbSsExtOffset, "External strings"); if (orig_sym_hdr.ifdMax > 0) /* file tables */ ! orig_files = (FDR *) read_seek ((Size_t)orig_sym_hdr.ifdMax * sizeof (FDR), orig_sym_hdr.cbFdOffset, "File tables"); if (orig_sym_hdr.crfd > 0) /* relative file descriptors */ ! orig_rfds = (symint_t *) read_seek ((Size_t)orig_sym_hdr.crfd * sizeof (symint_t), orig_sym_hdr.cbRfdOffset, "Relative file descriptors"); if (orig_sym_hdr.issExtMax > 0) /* external symbols */ ! orig_ext_syms = (EXTR *) read_seek ((Size_t)orig_sym_hdr.iextMax * sizeof (EXTR), orig_sym_hdr.cbExtOffset, "External symbols"); if (orig_sym_hdr.idnMax > 0) /* dense numbers */ { ! orig_dense = (DNR *) read_seek ((Size_t)orig_sym_hdr.idnMax * sizeof (DNR), orig_sym_hdr.cbDnOffset, "Dense numbers"); ! add_bytes (&dense_num, (char *) orig_dense, (Size_t)orig_sym_hdr.idnMax); } if (orig_sym_hdr.ioptMax > 0) /* opt symbols */ ! orig_opt_syms = (OPTR *) read_seek ((Size_t)orig_sym_hdr.ioptMax * sizeof (OPTR), orig_sym_hdr.cbOptOffset, "Optimizer symbols"); --- 4508,4568 ---- file_offset = orig_file_header.f_symptr + sizeof (struct filehdr); if (orig_sym_hdr.cbLine > 0) /* line numbers */ ! orig_linenum = (char *) read_seek ((Size_t) orig_sym_hdr.cbLine, orig_sym_hdr.cbLineOffset, "Line numbers"); if (orig_sym_hdr.ipdMax > 0) /* procedure tables */ ! orig_procs = (PDR *) read_seek ((Size_t) orig_sym_hdr.ipdMax * sizeof (PDR), orig_sym_hdr.cbPdOffset, "Procedure tables"); if (orig_sym_hdr.isymMax > 0) /* local symbols */ ! orig_local_syms = (SYMR *) read_seek ((Size_t) orig_sym_hdr.isymMax * sizeof (SYMR), orig_sym_hdr.cbSymOffset, "Local symbols"); if (orig_sym_hdr.iauxMax > 0) /* aux symbols */ ! orig_aux_syms = (AUXU *) read_seek ((Size_t) orig_sym_hdr.iauxMax * sizeof (AUXU), orig_sym_hdr.cbAuxOffset, "Aux. symbols"); if (orig_sym_hdr.issMax > 0) /* local strings */ ! orig_local_strs = (char *) read_seek ((Size_t) orig_sym_hdr.issMax, orig_sym_hdr.cbSsOffset, "Local strings"); if (orig_sym_hdr.issExtMax > 0) /* external strings */ ! orig_ext_strs = (char *) read_seek ((Size_t) orig_sym_hdr.issExtMax, orig_sym_hdr.cbSsExtOffset, "External strings"); if (orig_sym_hdr.ifdMax > 0) /* file tables */ ! orig_files = (FDR *) read_seek ((Size_t) orig_sym_hdr.ifdMax * sizeof (FDR), orig_sym_hdr.cbFdOffset, "File tables"); if (orig_sym_hdr.crfd > 0) /* relative file descriptors */ ! orig_rfds = (symint_t *) read_seek ((Size_t) orig_sym_hdr.crfd * sizeof (symint_t), orig_sym_hdr.cbRfdOffset, "Relative file descriptors"); if (orig_sym_hdr.issExtMax > 0) /* external symbols */ ! orig_ext_syms = (EXTR *) read_seek ((Size_t) orig_sym_hdr.iextMax * sizeof (EXTR), orig_sym_hdr.cbExtOffset, "External symbols"); if (orig_sym_hdr.idnMax > 0) /* dense numbers */ { ! orig_dense = (DNR *) read_seek ((Size_t) orig_sym_hdr.idnMax * sizeof (DNR), orig_sym_hdr.cbDnOffset, "Dense numbers"); ! add_bytes (&dense_num, (char *) orig_dense, (Size_t) orig_sym_hdr.idnMax); } if (orig_sym_hdr.ioptMax > 0) /* opt symbols */ ! orig_opt_syms = (OPTR *) read_seek ((Size_t) orig_sym_hdr.ioptMax * sizeof (OPTR), orig_sym_hdr.cbOptOffset, "Optimizer symbols"); *************** copy_object __proto((void)) *** 4589,4597 **** /* Abort if the symbol table is not last. */ if (max_file_offset != stat_buf.st_size) ! fatal ("Symbol table is not last (symbol table ends at %ld, .o ends at %ld", max_file_offset, ! stat_buf.st_size); /* If the first original file descriptor is a dummy which the assembler --- 4570,4578 ---- /* Abort if the symbol table is not last. */ if (max_file_offset != stat_buf.st_size) ! fatal ("symbol table is not last (symbol table ends at %ld, .o ends at %ld", max_file_offset, ! (long) stat_buf.st_size); /* If the first original file descriptor is a dummy which the assembler *************** copy_object __proto((void)) *** 4601,4607 **** && orig_files->caux == 0) { char *filename = orig_local_strs + (orig_files->issBase + orig_files->rss); ! char *suffix = local_rindex (filename, '.'); if (suffix != (char *) 0 && strcmp (suffix, ".s") == 0) delete_ifd = 1; --- 4582,4588 ---- && orig_files->caux == 0) { char *filename = orig_local_strs + (orig_files->issBase + orig_files->rss); ! char *suffix = strrchr (filename, '.'); if (suffix != (char *) 0 && strcmp (suffix, ".s") == 0) delete_ifd = 1; *************** copy_object __proto((void)) *** 4616,4623 **** for (fd = delete_ifd; fd < orig_sym_hdr.ifdMax; fd++) { ! register FDR *fd_ptr = ORIG_FILES (fd); ! register char *filename = ORIG_LSTRS (fd_ptr->issBase + fd_ptr->rss); /* file support itself. */ add_file (filename, filename + strlen (filename)); --- 4597,4604 ---- for (fd = delete_ifd; fd < orig_sym_hdr.ifdMax; fd++) { ! FDR *fd_ptr = ORIG_FILES (fd); ! char *filename = ORIG_LSTRS (fd_ptr->issBase + fd_ptr->rss); /* file support itself. */ add_file (filename, filename + strlen (filename)); *************** copy_object __proto((void)) *** 4641,4648 **** for (es = 0; es < orig_sym_hdr.iextMax; es++) { ! register EXTR *eptr = orig_ext_syms + es; ! register unsigned ifd = eptr->ifd; (void) add_ext_symbol (eptr, ((long) ifd < orig_sym_hdr.ifdMax) ? remap_file_number[ ifd ] : ifd ); --- 4622,4629 ---- for (es = 0; es < orig_sym_hdr.iextMax; es++) { ! EXTR *eptr = orig_ext_syms + es; ! unsigned ifd = eptr->ifd; (void) add_ext_symbol (eptr, ((long) ifd < orig_sym_hdr.ifdMax) ? remap_file_number[ ifd ] : ifd ); *************** copy_object __proto((void)) *** 4654,4667 **** for (fd = delete_ifd; fd < orig_sym_hdr.ifdMax; fd++) { ! register FDR *fd_ptr = ORIG_FILES (fd); ! register char *filename = ORIG_LSTRS (fd_ptr->issBase + fd_ptr->rss); ! register SYMR *sym_start; ! register SYMR *sym; ! register SYMR *sym_end_p1; ! register PDR *proc_start; ! register PDR *proc; ! register PDR *proc_end_p1; /* file support itself. */ add_file (filename, filename + strlen (filename)); --- 4635,4648 ---- for (fd = delete_ifd; fd < orig_sym_hdr.ifdMax; fd++) { ! FDR *fd_ptr = ORIG_FILES (fd); ! char *filename = ORIG_LSTRS (fd_ptr->issBase + fd_ptr->rss); ! SYMR *sym_start; ! SYMR *sym; ! SYMR *sym_end_p1; ! PDR *proc_start; ! PDR *proc; ! PDR *proc_end_p1; /* file support itself. */ add_file (filename, filename + strlen (filename)); *************** copy_object __proto((void)) *** 4702,4713 **** case st_StaticProc: { auto symint_t hash_index; ! register char *str = ORIG_LSTRS (fd_ptr->issBase + sym->iss); ! register Size_t len = strlen (str); ! register shash_t *shash_ptr = hash_string (str, ! (Ptrdiff_t)len, ! &orig_str_hash[0], ! &hash_index); if (shash_ptr != (shash_t *) 0) error ("internal error, %s is already in original symbol table", str); --- 4683,4694 ---- case st_StaticProc: { auto symint_t hash_index; ! char *str = ORIG_LSTRS (fd_ptr->issBase + sym->iss); ! Size_t len = strlen (str); ! shash_t *shash_ptr = hash_string (str, ! (Ptrdiff_t) len, ! &orig_str_hash[0], ! &hash_index); if (shash_ptr != (shash_t *) 0) error ("internal error, %s is already in original symbol table", str); *************** copy_object __proto((void)) *** 4729,4743 **** case st_End: if ((sc_t) sym->sc == sc_Text) { ! register char *str = ORIG_LSTRS (fd_ptr->issBase + sym->iss); if (*str != '\0') { ! register Size_t len = strlen (str); ! register shash_t *shash_ptr = hash_string (str, ! (Ptrdiff_t)len, ! &orig_str_hash[0], ! (symint_t *) 0); if (shash_ptr != (shash_t *) 0) shash_ptr->end_ptr = sym; --- 4710,4724 ---- case st_End: if ((sc_t) sym->sc == sc_Text) { ! char *str = ORIG_LSTRS (fd_ptr->issBase + sym->iss); if (*str != '\0') { ! Size_t len = strlen (str); ! shash_t *shash_ptr = hash_string (str, ! (Ptrdiff_t) len, ! &orig_str_hash[0], ! (symint_t *) 0); if (shash_ptr != (shash_t *) 0) shash_ptr->end_ptr = sym; *************** copy_object __proto((void)) *** 4761,4773 **** proc_end_p1 = proc_start + fd_ptr->cpd; for (proc = proc_start; proc < proc_end_p1; proc++) { ! register SYMR *proc_sym = ORIG_LSYMS (fd_ptr->isymBase + proc->isym); ! register char *str = ORIG_LSTRS (fd_ptr->issBase + proc_sym->iss); ! register Size_t len = strlen (str); ! register shash_t *shash_ptr = hash_string (str, ! (Ptrdiff_t)len, ! &orig_str_hash[0], ! (symint_t *) 0); if (shash_ptr == (shash_t *) 0) error ("internal error, function %s is not in original symbol table", str); --- 4742,4754 ---- proc_end_p1 = proc_start + fd_ptr->cpd; for (proc = proc_start; proc < proc_end_p1; proc++) { ! SYMR *proc_sym = ORIG_LSYMS (fd_ptr->isymBase + proc->isym); ! char *str = ORIG_LSTRS (fd_ptr->issBase + proc_sym->iss); ! Size_t len = strlen (str); ! shash_t *shash_ptr = hash_string (str, ! (Ptrdiff_t) len, ! &orig_str_hash[0], ! (symint_t *) 0); if (shash_ptr == (shash_t *) 0) error ("internal error, function %s is not in original symbol table", str); *************** copy_object __proto((void)) *** 4800,4811 **** num_write = (remaining <= (int) sizeof (buffer)) ? remaining : (int) sizeof (buffer); ! sys_read = fread ((PTR_T) buffer, 1, num_write, obj_in_stream); if (sys_read <= 0) pfatal_with_name (obj_in_name); else if (sys_read != num_write) ! fatal ("Wanted to read %d bytes from %s, system returned %d", num_write, obj_in_name, sys_read); --- 4781,4792 ---- num_write = (remaining <= (int) sizeof (buffer)) ? remaining : (int) sizeof (buffer); ! sys_read = fread ((PTR) buffer, 1, num_write, obj_in_stream); if (sys_read <= 0) pfatal_with_name (obj_in_name); else if (sys_read != num_write) ! fatal ("wanted to read %d bytes from %s, system returned %d", num_write, obj_in_name, sys_read); *************** copy_object __proto((void)) *** 4815,4821 **** pfatal_with_name (object_name); else if (sys_write != num_write) ! fatal ("Wrote %d bytes to %s, system returned %d", num_write, object_name, sys_write); --- 4796,4802 ---- pfatal_with_name (object_name); else if (sys_write != num_write) ! fatal ("wrote %d bytes to %s, system returned %d", num_write, object_name, sys_write); *************** main (argc, argv) *** 4833,4839 **** char **argv; { int iflag = 0; ! char *p = local_rindex (argv[0], '/'); char *num_end; int option; int i; --- 4814,4820 ---- char **argv; { int iflag = 0; ! char *p = strrchr (argv[0], '/'); char *num_end; int option; int i; *************** main (argc, argv) *** 4846,4857 **** #if !defined(__SABER__) && !defined(lint) if (sizeof (efdr_t) > PAGE_USIZE) ! fatal ("Efdr_t has a sizeof %d bytes, when it should be less than %d", (int) sizeof (efdr_t), (int) PAGE_USIZE); if (sizeof (page_t) != PAGE_USIZE) ! fatal ("Page_t has a sizeof %d bytes, when it should be %d", (int) sizeof (page_t), (int) PAGE_USIZE); --- 4827,4838 ---- #if !defined(__SABER__) && !defined(lint) if (sizeof (efdr_t) > PAGE_USIZE) ! fatal ("efdr_t has a sizeof %d bytes, when it should be less than %d", (int) sizeof (efdr_t), (int) PAGE_USIZE); if (sizeof (page_t) != PAGE_USIZE) ! fatal ("page_t has a sizeof %d bytes, when it should be %d", (int) sizeof (page_t), (int) PAGE_USIZE); *************** main (argc, argv) *** 4882,4888 **** case 'd': debug = strtol (optarg, &num_end, 0); ! if ((unsigned)debug > 4 || num_end == optarg) had_errors++; break; --- 4863,4869 ---- case 'd': debug = strtol (optarg, &num_end, 0); ! if ((unsigned) debug > 4 || num_end == optarg) had_errors++; break; *************** main (argc, argv) *** 4926,4932 **** /* If there is an output name, but no input name use the same file for both, deleting the name between opening it for input and opening it for output. */ ! if (obj_in_name == (char *) 0 && object_name != (char *)0) { obj_in_name = object_name; delete_input = 1; --- 4907,4913 ---- /* If there is an output name, but no input name use the same file for both, deleting the name between opening it for input and opening it for output. */ ! if (obj_in_name == (char *) 0 && object_name != (char *) 0) { obj_in_name = object_name; delete_input = 1; *************** main (argc, argv) *** 4987,4993 **** fatal ("wrote %d bytes to %s, expected to write %d", len2, obj_in_name, len); } ! free_multiple_pages ((page_t *)buffer, 4); if (len < 0) pfatal_with_name (object_name); --- 4968,4974 ---- fatal ("wrote %d bytes to %s, expected to write %d", len2, obj_in_name, len); } ! free_multiple_pages ((page_t *) buffer, 4); if (len < 0) pfatal_with_name (object_name); *************** main (argc, argv) *** 5028,5034 **** if (debug) { fprintf (stderr, "\n\tAllocation summary:\n\n"); ! for (i = (int)alloc_type_none; i < (int)alloc_type_last; i++) if (alloc_counts[i].total_alloc) { fprintf (stderr, --- 5009,5015 ---- if (debug) { fprintf (stderr, "\n\tAllocation summary:\n\n"); ! for (i = (int) alloc_type_none; i < (int) alloc_type_last; i++) if (alloc_counts[i].total_alloc) { fprintf (stderr, *************** catch_signal (signum) *** 5051,5057 **** int signum; { (void) signal (signum, SIG_DFL); /* just in case... */ ! fatal ("%s", strsignal(signum)); } /* Print a fatal error message. NAME is the text. --- 5032,5038 ---- int signum; { (void) signal (signum, SIG_DFL); /* just in case... */ ! fatal ("%s", strsignal (signum)); } /* Print a fatal error message. NAME is the text. *************** STATIC page_t * *** 5110,5116 **** allocate_cluster (npages) Size_t npages; { ! register page_t *value = (page_t *) xcalloc (npages, PAGE_USIZE); if (debug > 3) fprintf (stderr, "\talloc\tnpages = %d, value = 0x%.8x\n", npages, value); --- 5091,5097 ---- allocate_cluster (npages) Size_t npages; { ! page_t *value = (page_t *) xcalloc (npages, PAGE_USIZE); if (debug > 3) fprintf (stderr, "\talloc\tnpages = %d, value = 0x%.8x\n", npages, value); *************** STATIC page_t * *** 5124,5130 **** allocate_cluster (npages) Size_t npages; { ! register page_t *ptr = (page_t *) sbrk (0); /* current sbreak */ unsigned long offset = ((unsigned long) ptr) & (PAGE_SIZE - 1); if (offset != 0) /* align to a page boundary */ --- 5105,5111 ---- allocate_cluster (npages) Size_t npages; { ! page_t *ptr = (page_t *) sbrk (0); /* current sbreak */ unsigned long offset = ((unsigned long) ptr) & (PAGE_SIZE - 1); if (offset != 0) /* align to a page boundary */ *************** allocate_cluster (npages) *** 5132,5148 **** if (sbrk (PAGE_USIZE - offset) == (char *)-1) pfatal_with_name ("allocate_cluster"); ! ptr = (page_t *) (((char *)ptr) + PAGE_SIZE - offset); } ! if (sbrk (npages * PAGE_USIZE) == (char *)-1) pfatal_with_name ("allocate_cluster"); if (debug > 3) { fprintf (stderr, "\talloc\tnpages = %lu, value = ", (unsigned long) npages); ! fprintf (stderr, HOST_PTR_PRINTF, ptr); fputs ("\n", stderr); } --- 5113,5129 ---- if (sbrk (PAGE_USIZE - offset) == (char *)-1) pfatal_with_name ("allocate_cluster"); ! ptr = (page_t *) (((char *) ptr) + PAGE_SIZE - offset); } ! if (sbrk (npages * PAGE_USIZE) == (char *) -1) pfatal_with_name ("allocate_cluster"); if (debug > 3) { fprintf (stderr, "\talloc\tnpages = %lu, value = ", (unsigned long) npages); ! fprintf (stderr, HOST_PTR_PRINTF, (PTR) ptr); fputs ("\n", stderr); } *************** free_multiple_pages (page_ptr, npages) *** 5222,5228 **** /* Allocate one page (which is initialized to 0). */ STATIC page_t * ! allocate_page __proto((void)) { #ifndef MALLOC_CHECK if (pages_left == 0) --- 5203,5209 ---- /* Allocate one page (which is initialized to 0). */ STATIC page_t * ! allocate_page () { #ifndef MALLOC_CHECK if (pages_left == 0) *************** allocate_page __proto((void)) *** 5244,5273 **** /* Allocate scoping information. */ STATIC scope_t * ! allocate_scope __proto((void)) { ! register scope_t *ptr; static scope_t initial_scope; #ifndef MALLOC_CHECK ! ptr = alloc_counts[ (int)alloc_type_scope ].free_list.f_scope; if (ptr != (scope_t *) 0) ! alloc_counts[ (int)alloc_type_scope ].free_list.f_scope = ptr->free; else { ! register int unallocated = alloc_counts[ (int)alloc_type_scope ].unallocated; ! register page_t *cur_page = alloc_counts[ (int)alloc_type_scope ].cur_page; if (unallocated == 0) { unallocated = PAGE_SIZE / sizeof (scope_t); ! alloc_counts[ (int)alloc_type_scope ].cur_page = cur_page = allocate_page (); ! alloc_counts[ (int)alloc_type_scope ].total_pages++; } ptr = &cur_page->scope[ --unallocated ]; ! alloc_counts[ (int)alloc_type_scope ].unallocated = unallocated; } #else --- 5225,5254 ---- /* Allocate scoping information. */ STATIC scope_t * ! allocate_scope () { ! scope_t *ptr; static scope_t initial_scope; #ifndef MALLOC_CHECK ! ptr = alloc_counts[ (int) alloc_type_scope ].free_list.f_scope; if (ptr != (scope_t *) 0) ! alloc_counts[ (int) alloc_type_scope ].free_list.f_scope = ptr->free; else { ! int unallocated = alloc_counts[ (int) alloc_type_scope ].unallocated; ! page_t *cur_page = alloc_counts[ (int) alloc_type_scope ].cur_page; if (unallocated == 0) { unallocated = PAGE_SIZE / sizeof (scope_t); ! alloc_counts[ (int) alloc_type_scope ].cur_page = cur_page = allocate_page (); ! alloc_counts[ (int) alloc_type_scope ].total_pages++; } ptr = &cur_page->scope[ --unallocated ]; ! alloc_counts[ (int) alloc_type_scope ].unallocated = unallocated; } #else *************** allocate_scope __proto((void)) *** 5275,5281 **** #endif ! alloc_counts[ (int)alloc_type_scope ].total_alloc++; *ptr = initial_scope; return ptr; } --- 5256,5262 ---- #endif ! alloc_counts[ (int) alloc_type_scope ].total_alloc++; *ptr = initial_scope; return ptr; } *************** STATIC void *** 5286,5299 **** free_scope (ptr) scope_t *ptr; { ! alloc_counts[ (int)alloc_type_scope ].total_free++; #ifndef MALLOC_CHECK ! ptr->free = alloc_counts[ (int)alloc_type_scope ].free_list.f_scope; ! alloc_counts[ (int)alloc_type_scope ].free_list.f_scope = ptr; #else ! free ((PTR_T) ptr); #endif } --- 5267,5280 ---- free_scope (ptr) scope_t *ptr; { ! alloc_counts[ (int) alloc_type_scope ].total_free++; #ifndef MALLOC_CHECK ! ptr->free = alloc_counts[ (int) alloc_type_scope ].free_list.f_scope; ! alloc_counts[ (int) alloc_type_scope ].free_list.f_scope = ptr; #else ! free ((PTR) ptr); #endif } *************** free_scope (ptr) *** 5302,5332 **** /* Allocate links for pages in a virtual array. */ STATIC vlinks_t * ! allocate_vlinks __proto((void)) { ! register vlinks_t *ptr; static vlinks_t initial_vlinks; #ifndef MALLOC_CHECK ! register int unallocated = alloc_counts[ (int)alloc_type_vlinks ].unallocated; ! register page_t *cur_page = alloc_counts[ (int)alloc_type_vlinks ].cur_page; if (unallocated == 0) { unallocated = PAGE_SIZE / sizeof (vlinks_t); ! alloc_counts[ (int)alloc_type_vlinks ].cur_page = cur_page = allocate_page (); ! alloc_counts[ (int)alloc_type_vlinks ].total_pages++; } ptr = &cur_page->vlinks[ --unallocated ]; ! alloc_counts[ (int)alloc_type_vlinks ].unallocated = unallocated; #else ptr = (vlinks_t *) xmalloc (sizeof (vlinks_t)); #endif ! alloc_counts[ (int)alloc_type_vlinks ].total_alloc++; *ptr = initial_vlinks; return ptr; } --- 5283,5313 ---- /* Allocate links for pages in a virtual array. */ STATIC vlinks_t * ! allocate_vlinks () { ! vlinks_t *ptr; static vlinks_t initial_vlinks; #ifndef MALLOC_CHECK ! int unallocated = alloc_counts[ (int) alloc_type_vlinks ].unallocated; ! page_t *cur_page = alloc_counts[ (int) alloc_type_vlinks ].cur_page; if (unallocated == 0) { unallocated = PAGE_SIZE / sizeof (vlinks_t); ! alloc_counts[ (int) alloc_type_vlinks ].cur_page = cur_page = allocate_page (); ! alloc_counts[ (int) alloc_type_vlinks ].total_pages++; } ptr = &cur_page->vlinks[ --unallocated ]; ! alloc_counts[ (int) alloc_type_vlinks ].unallocated = unallocated; #else ptr = (vlinks_t *) xmalloc (sizeof (vlinks_t)); #endif ! alloc_counts[ (int) alloc_type_vlinks ].total_alloc++; *ptr = initial_vlinks; return ptr; } *************** allocate_vlinks __proto((void)) *** 5335,5365 **** /* Allocate string hash buckets. */ STATIC shash_t * ! allocate_shash __proto((void)) { ! register shash_t *ptr; static shash_t initial_shash; #ifndef MALLOC_CHECK ! register int unallocated = alloc_counts[ (int)alloc_type_shash ].unallocated; ! register page_t *cur_page = alloc_counts[ (int)alloc_type_shash ].cur_page; if (unallocated == 0) { unallocated = PAGE_SIZE / sizeof (shash_t); ! alloc_counts[ (int)alloc_type_shash ].cur_page = cur_page = allocate_page (); ! alloc_counts[ (int)alloc_type_shash ].total_pages++; } ptr = &cur_page->shash[ --unallocated ]; ! alloc_counts[ (int)alloc_type_shash ].unallocated = unallocated; #else ptr = (shash_t *) xmalloc (sizeof (shash_t)); #endif ! alloc_counts[ (int)alloc_type_shash ].total_alloc++; *ptr = initial_shash; return ptr; } --- 5316,5346 ---- /* Allocate string hash buckets. */ STATIC shash_t * ! allocate_shash () { ! shash_t *ptr; static shash_t initial_shash; #ifndef MALLOC_CHECK ! int unallocated = alloc_counts[ (int) alloc_type_shash ].unallocated; ! page_t *cur_page = alloc_counts[ (int) alloc_type_shash ].cur_page; if (unallocated == 0) { unallocated = PAGE_SIZE / sizeof (shash_t); ! alloc_counts[ (int) alloc_type_shash ].cur_page = cur_page = allocate_page (); ! alloc_counts[ (int) alloc_type_shash ].total_pages++; } ptr = &cur_page->shash[ --unallocated ]; ! alloc_counts[ (int) alloc_type_shash ].unallocated = unallocated; #else ptr = (shash_t *) xmalloc (sizeof (shash_t)); #endif ! alloc_counts[ (int) alloc_type_shash ].total_alloc++; *ptr = initial_shash; return ptr; } *************** allocate_shash __proto((void)) *** 5368,5398 **** /* Allocate type hash buckets. */ STATIC thash_t * ! allocate_thash __proto((void)) { ! register thash_t *ptr; static thash_t initial_thash; #ifndef MALLOC_CHECK ! register int unallocated = alloc_counts[ (int)alloc_type_thash ].unallocated; ! register page_t *cur_page = alloc_counts[ (int)alloc_type_thash ].cur_page; if (unallocated == 0) { unallocated = PAGE_SIZE / sizeof (thash_t); ! alloc_counts[ (int)alloc_type_thash ].cur_page = cur_page = allocate_page (); ! alloc_counts[ (int)alloc_type_thash ].total_pages++; } ptr = &cur_page->thash[ --unallocated ]; ! alloc_counts[ (int)alloc_type_thash ].unallocated = unallocated; #else ptr = (thash_t *) xmalloc (sizeof (thash_t)); #endif ! alloc_counts[ (int)alloc_type_thash ].total_alloc++; *ptr = initial_thash; return ptr; } --- 5349,5379 ---- /* Allocate type hash buckets. */ STATIC thash_t * ! allocate_thash () { ! thash_t *ptr; static thash_t initial_thash; #ifndef MALLOC_CHECK ! int unallocated = alloc_counts[ (int) alloc_type_thash ].unallocated; ! page_t *cur_page = alloc_counts[ (int) alloc_type_thash ].cur_page; if (unallocated == 0) { unallocated = PAGE_SIZE / sizeof (thash_t); ! alloc_counts[ (int) alloc_type_thash ].cur_page = cur_page = allocate_page (); ! alloc_counts[ (int) alloc_type_thash ].total_pages++; } ptr = &cur_page->thash[ --unallocated ]; ! alloc_counts[ (int) alloc_type_thash ].unallocated = unallocated; #else ptr = (thash_t *) xmalloc (sizeof (thash_t)); #endif ! alloc_counts[ (int) alloc_type_thash ].total_alloc++; *ptr = initial_thash; return ptr; } *************** allocate_thash __proto((void)) *** 5401,5430 **** /* Allocate structure, union, or enum tag information. */ STATIC tag_t * ! allocate_tag __proto((void)) { ! register tag_t *ptr; static tag_t initial_tag; #ifndef MALLOC_CHECK ! ptr = alloc_counts[ (int)alloc_type_tag ].free_list.f_tag; if (ptr != (tag_t *) 0) ! alloc_counts[ (int)alloc_type_tag ].free_list.f_tag = ptr->free; else { ! register int unallocated = alloc_counts[ (int)alloc_type_tag ].unallocated; ! register page_t *cur_page = alloc_counts[ (int)alloc_type_tag ].cur_page; if (unallocated == 0) { unallocated = PAGE_SIZE / sizeof (tag_t); ! alloc_counts[ (int)alloc_type_tag ].cur_page = cur_page = allocate_page (); ! alloc_counts[ (int)alloc_type_tag ].total_pages++; } ptr = &cur_page->tag[ --unallocated ]; ! alloc_counts[ (int)alloc_type_tag ].unallocated = unallocated; } #else --- 5382,5411 ---- /* Allocate structure, union, or enum tag information. */ STATIC tag_t * ! allocate_tag () { ! tag_t *ptr; static tag_t initial_tag; #ifndef MALLOC_CHECK ! ptr = alloc_counts[ (int) alloc_type_tag ].free_list.f_tag; if (ptr != (tag_t *) 0) ! alloc_counts[ (int) alloc_type_tag ].free_list.f_tag = ptr->free; else { ! int unallocated = alloc_counts[ (int) alloc_type_tag ].unallocated; ! page_t *cur_page = alloc_counts[ (int) alloc_type_tag ].cur_page; if (unallocated == 0) { unallocated = PAGE_SIZE / sizeof (tag_t); ! alloc_counts[ (int) alloc_type_tag ].cur_page = cur_page = allocate_page (); ! alloc_counts[ (int) alloc_type_tag ].total_pages++; } ptr = &cur_page->tag[ --unallocated ]; ! alloc_counts[ (int) alloc_type_tag ].unallocated = unallocated; } #else *************** allocate_tag __proto((void)) *** 5432,5438 **** #endif ! alloc_counts[ (int)alloc_type_tag ].total_alloc++; *ptr = initial_tag; return ptr; } --- 5413,5419 ---- #endif ! alloc_counts[ (int) alloc_type_tag ].total_alloc++; *ptr = initial_tag; return ptr; } *************** STATIC void *** 5443,5456 **** free_tag (ptr) tag_t *ptr; { ! alloc_counts[ (int)alloc_type_tag ].total_free++; #ifndef MALLOC_CHECK ! ptr->free = alloc_counts[ (int)alloc_type_tag ].free_list.f_tag; ! alloc_counts[ (int)alloc_type_tag ].free_list.f_tag = ptr; #else ! free ((PTR_T) ptr); #endif } --- 5424,5437 ---- free_tag (ptr) tag_t *ptr; { ! alloc_counts[ (int) alloc_type_tag ].total_free++; #ifndef MALLOC_CHECK ! ptr->free = alloc_counts[ (int) alloc_type_tag ].free_list.f_tag; ! alloc_counts[ (int) alloc_type_tag ].free_list.f_tag = ptr; #else ! free ((PTR) ptr); #endif } *************** free_tag (ptr) *** 5459,5488 **** /* Allocate forward reference to a yet unknown tag. */ STATIC forward_t * ! allocate_forward __proto((void)) { ! register forward_t *ptr; static forward_t initial_forward; #ifndef MALLOC_CHECK ! ptr = alloc_counts[ (int)alloc_type_forward ].free_list.f_forward; if (ptr != (forward_t *) 0) ! alloc_counts[ (int)alloc_type_forward ].free_list.f_forward = ptr->free; else { ! register int unallocated = alloc_counts[ (int)alloc_type_forward ].unallocated; ! register page_t *cur_page = alloc_counts[ (int)alloc_type_forward ].cur_page; if (unallocated == 0) { unallocated = PAGE_SIZE / sizeof (forward_t); ! alloc_counts[ (int)alloc_type_forward ].cur_page = cur_page = allocate_page (); ! alloc_counts[ (int)alloc_type_forward ].total_pages++; } ptr = &cur_page->forward[ --unallocated ]; ! alloc_counts[ (int)alloc_type_forward ].unallocated = unallocated; } #else --- 5440,5469 ---- /* Allocate forward reference to a yet unknown tag. */ STATIC forward_t * ! allocate_forward () { ! forward_t *ptr; static forward_t initial_forward; #ifndef MALLOC_CHECK ! ptr = alloc_counts[ (int) alloc_type_forward ].free_list.f_forward; if (ptr != (forward_t *) 0) ! alloc_counts[ (int) alloc_type_forward ].free_list.f_forward = ptr->free; else { ! int unallocated = alloc_counts[ (int) alloc_type_forward ].unallocated; ! page_t *cur_page = alloc_counts[ (int) alloc_type_forward ].cur_page; if (unallocated == 0) { unallocated = PAGE_SIZE / sizeof (forward_t); ! alloc_counts[ (int) alloc_type_forward ].cur_page = cur_page = allocate_page (); ! alloc_counts[ (int) alloc_type_forward ].total_pages++; } ptr = &cur_page->forward[ --unallocated ]; ! alloc_counts[ (int) alloc_type_forward ].unallocated = unallocated; } #else *************** allocate_forward __proto((void)) *** 5490,5496 **** #endif ! alloc_counts[ (int)alloc_type_forward ].total_alloc++; *ptr = initial_forward; return ptr; } --- 5471,5477 ---- #endif ! alloc_counts[ (int) alloc_type_forward ].total_alloc++; *ptr = initial_forward; return ptr; } *************** STATIC void *** 5501,5514 **** free_forward (ptr) forward_t *ptr; { ! alloc_counts[ (int)alloc_type_forward ].total_free++; #ifndef MALLOC_CHECK ! ptr->free = alloc_counts[ (int)alloc_type_forward ].free_list.f_forward; ! alloc_counts[ (int)alloc_type_forward ].free_list.f_forward = ptr; #else ! free ((PTR_T) ptr); #endif } --- 5482,5495 ---- free_forward (ptr) forward_t *ptr; { ! alloc_counts[ (int) alloc_type_forward ].total_free++; #ifndef MALLOC_CHECK ! ptr->free = alloc_counts[ (int) alloc_type_forward ].free_list.f_forward; ! alloc_counts[ (int) alloc_type_forward ].free_list.f_forward = ptr; #else ! free ((PTR) ptr); #endif } *************** free_forward (ptr) *** 5517,5546 **** /* Allocate head of type hash list. */ STATIC thead_t * ! allocate_thead __proto((void)) { ! register thead_t *ptr; static thead_t initial_thead; #ifndef MALLOC_CHECK ! ptr = alloc_counts[ (int)alloc_type_thead ].free_list.f_thead; if (ptr != (thead_t *) 0) ! alloc_counts[ (int)alloc_type_thead ].free_list.f_thead = ptr->free; else { ! register int unallocated = alloc_counts[ (int)alloc_type_thead ].unallocated; ! register page_t *cur_page = alloc_counts[ (int)alloc_type_thead ].cur_page; if (unallocated == 0) { unallocated = PAGE_SIZE / sizeof (thead_t); ! alloc_counts[ (int)alloc_type_thead ].cur_page = cur_page = allocate_page (); ! alloc_counts[ (int)alloc_type_thead ].total_pages++; } ptr = &cur_page->thead[ --unallocated ]; ! alloc_counts[ (int)alloc_type_thead ].unallocated = unallocated; } #else --- 5498,5527 ---- /* Allocate head of type hash list. */ STATIC thead_t * ! allocate_thead () { ! thead_t *ptr; static thead_t initial_thead; #ifndef MALLOC_CHECK ! ptr = alloc_counts[ (int) alloc_type_thead ].free_list.f_thead; if (ptr != (thead_t *) 0) ! alloc_counts[ (int) alloc_type_thead ].free_list.f_thead = ptr->free; else { ! int unallocated = alloc_counts[ (int) alloc_type_thead ].unallocated; ! page_t *cur_page = alloc_counts[ (int) alloc_type_thead ].cur_page; if (unallocated == 0) { unallocated = PAGE_SIZE / sizeof (thead_t); ! alloc_counts[ (int) alloc_type_thead ].cur_page = cur_page = allocate_page (); ! alloc_counts[ (int) alloc_type_thead ].total_pages++; } ptr = &cur_page->thead[ --unallocated ]; ! alloc_counts[ (int) alloc_type_thead ].unallocated = unallocated; } #else *************** allocate_thead __proto((void)) *** 5548,5554 **** #endif ! alloc_counts[ (int)alloc_type_thead ].total_alloc++; *ptr = initial_thead; return ptr; } --- 5529,5535 ---- #endif ! alloc_counts[ (int) alloc_type_thead ].total_alloc++; *ptr = initial_thead; return ptr; } *************** STATIC void *** 5559,5572 **** free_thead (ptr) thead_t *ptr; { ! alloc_counts[ (int)alloc_type_thead ].total_free++; #ifndef MALLOC_CHECK ! ptr->free = (thead_t *) alloc_counts[ (int)alloc_type_thead ].free_list.f_thead; ! alloc_counts[ (int)alloc_type_thead ].free_list.f_thead = ptr; #else ! free ((PTR_T) ptr); #endif } --- 5540,5553 ---- free_thead (ptr) thead_t *ptr; { ! alloc_counts[ (int) alloc_type_thead ].total_free++; #ifndef MALLOC_CHECK ! ptr->free = (thead_t *) alloc_counts[ (int) alloc_type_thead ].free_list.f_thead; ! alloc_counts[ (int) alloc_type_thead ].free_list.f_thead = ptr; #else ! free ((PTR) ptr); #endif } *************** free_thead (ptr) *** 5580,5595 **** void fatal VPARAMS ((const char *format, ...)) { ! #ifndef ANSI_PROTOTYPES ! const char *format; ! #endif ! va_list ap; ! ! VA_START (ap, format); ! ! #ifndef ANSI_PROTOTYPES ! format = va_arg (ap, const char *); ! #endif if (line_number > 0) fprintf (stderr, "%s, %s:%ld ", progname, input_name, line_number); --- 5561,5568 ---- void fatal VPARAMS ((const char *format, ...)) { ! VA_OPEN (ap, format); ! VA_FIXEDARG (ap, const char *, format); if (line_number > 0) fprintf (stderr, "%s, %s:%ld ", progname, input_name, line_number); *************** fatal VPARAMS ((const char *format, ...) *** 5597,5603 **** fprintf (stderr, "%s:", progname); vfprintf (stderr, format, ap); ! va_end (ap); fprintf (stderr, "\n"); if (line_number > 0) fprintf (stderr, "line:\t%s\n", cur_line_start); --- 5570,5576 ---- fprintf (stderr, "%s:", progname); vfprintf (stderr, format, ap); ! VA_CLOSE (ap); fprintf (stderr, "\n"); if (line_number > 0) fprintf (stderr, "line:\t%s\n", cur_line_start); *************** fatal VPARAMS ((const char *format, ...) *** 5610,5625 **** void error VPARAMS ((const char *format, ...)) { ! #ifndef ANSI_PROTOTYPES ! char *format; ! #endif ! va_list ap; ! ! VA_START (ap, format); ! ! #ifndef ANSI_PROTOTYPES ! format = va_arg (ap, char *); ! #endif if (line_number > 0) fprintf (stderr, "%s, %s:%ld ", progname, input_name, line_number); --- 5583,5590 ---- void error VPARAMS ((const char *format, ...)) { ! VA_OPEN (ap, format); ! VA_FIXEDARG (ap, char *, format); if (line_number > 0) fprintf (stderr, "%s, %s:%ld ", progname, input_name, line_number); *************** error VPARAMS ((const char *format, ...) *** 5632,5638 **** fprintf (stderr, "line:\t%s\n", cur_line_start); had_errors++; ! va_end (ap); saber_stop (); } --- 5597,5603 ---- fprintf (stderr, "line:\t%s\n", cur_line_start); had_errors++; ! VA_CLOSE (ap); saber_stop (); } *************** error VPARAMS ((const char *format, ...) *** 5643,5649 **** void fancy_abort () { ! fatal ("Internal abort."); } --- 5608,5614 ---- void fancy_abort () { ! fatal ("internal abort"); } *************** botch (s) *** 5656,5695 **** { fatal ("%s", s); } - - - /* Define our own index/rindex, since the local and global symbol - structures as defined by MIPS has an 'index' field. */ - - STATIC char * - local_index (str, sentinel) - const char *str; - int sentinel; - { - int ch; - - for ( ; (ch = *str) != sentinel; str++) - { - if (ch == '\0') - return (char *) 0; - } - - return (char *)str; - } - - STATIC char * - local_rindex (str, sentinel) - const char *str; - int sentinel; - { - int ch; - const char *ret = (const char *) 0; - - for ( ; (ch = *str) != '\0'; str++) - { - if (ch == sentinel) - ret = str; - } - - return (char *)ret; - } --- 5621,5623 ---- diff -Nrc3pad gcc-3.0.4/gcc/mkconfig.sh gcc-3.1/gcc/mkconfig.sh *** gcc-3.0.4/gcc/mkconfig.sh Sat May 12 20:32:37 2001 --- gcc-3.1/gcc/mkconfig.sh Wed Feb 13 15:37:41 2002 *************** if [ -z "$1" ]; then *** 11,26 **** fi output=$1 ! rm -f $output.T ! ! # We used to exec > $output.T but apparently this has bugs. ! # Use a redirected subshell instead. ! ( # Define TARGET_CPU_DEFAULT if the system wants one. # This substitutes for lots of *.h files. if [ "$TARGET_CPU_DEFAULT" != "" ]; then ! echo "#define TARGET_CPU_DEFAULT ($TARGET_CPU_DEFAULT)" fi # The first entry in HEADERS may be auto-host.h or auto-build.h; --- 11,22 ---- fi output=$1 ! rm -f ${output}T # Define TARGET_CPU_DEFAULT if the system wants one. # This substitutes for lots of *.h files. if [ "$TARGET_CPU_DEFAULT" != "" ]; then ! echo "#define TARGET_CPU_DEFAULT ($TARGET_CPU_DEFAULT)" >> ${output}T fi # The first entry in HEADERS may be auto-host.h or auto-build.h; *************** fi *** 28,69 **** if [ -n "$HEADERS" ]; then set $HEADERS; first=$1 case $first in auto-* ) ! echo "#include \"$first\"" shift HEADERS=$* ;; esac fi if [ -n "$HEADERS" ]; then ! echo '#ifdef IN_GCC' for file in $HEADERS; do ! echo "# include \"$file\"" done ! echo '#endif' fi for def in $DEFINES; do ! echo "#ifndef $def" | sed 's/=.*//' ! echo "# define $def" | sed 's/=/ /' ! echo "#endif" done ! # Include insn-codes.h last, because it includes machmode.h, ! # and we want EXTRA_CC_MODES to be taken into account. ! echo "#ifndef GENERATOR_FILE" ! echo "#include \"insn-codes.h\"" ! echo "#include \"insn-flags.h\"" ! echo "#endif" ! ! ) > $output.T # Avoid changing the actual file if possible. ! if [ -f $output ] && cmp $output.T $output >/dev/null 2>&1; then echo $output is unchanged >&2 ! rm -f $output.T else ! mv -f $output.T $output fi # Touch a stamp file for Make's benefit. --- 24,99 ---- if [ -n "$HEADERS" ]; then set $HEADERS; first=$1 case $first in auto-* ) ! echo "#include \"$first\"" >> ${output}T shift HEADERS=$* ;; esac fi + # Provide three core typedefs used by everything, if we are compiling + # GCC. These used to be found in rtl.h and tree.h, but this is no + # longer practical. Providing these in config.h/tconfig.h/hconfig.h + # rather than system.h allows the typedefs to be used anywhere in GCC. + case $output in + *config.h | *hconfig.h | *tconfig.h) + cat >> ${output}T <> ${output}T for file in $HEADERS; do ! echo "# include \"$file\"" >> ${output}T done ! echo '#endif' >> ${output}T fi for def in $DEFINES; do ! echo "#ifndef $def" | sed 's/=.*//' >> ${output}T ! echo "# define $def" | sed 's/=/ /' >> ${output}T ! echo "#endif" >> ${output}T done ! # If this is tm_p.h, include tm-preds.h unconditionally. ! # If this is tconfig.h or hconfig.h, include no more files. ! # Otherwise, include insn-constants.h and insn-flags.h, ! # but only if GENERATOR_FILE is not defined. ! case $output in ! *tm_p.h) ! echo "#include \"tm-preds.h\"" >> ${output}T ! ;; ! *tconfig.h | *hconfig.h) ! ;; ! *) ! cat >> ${output}T </dev/null 2>&1; then echo $output is unchanged >&2 ! rm -f ${output}T else ! mv -f ${output}T $output fi # Touch a stamp file for Make's benefit. diff -Nrc3pad gcc-3.0.4/gcc/mkdeps.c gcc-3.1/gcc/mkdeps.c *** gcc-3.0.4/gcc/mkdeps.c Tue Mar 27 06:39:40 2001 --- gcc-3.1/gcc/mkdeps.c Fri Aug 3 15:42:25 2001 *************** deps_add_default_target (d, tgt) *** 188,198 **** deps_add_target (d, "-", 1); else { ! #ifndef OBJECT_SUFFIX ! # define OBJECT_SUFFIX ".o" #endif ! char *start = lbasename (tgt); ! char *o = (char *) alloca (strlen (start) + strlen (OBJECT_SUFFIX) + 1); char *suffix; strcpy (o, start); --- 188,198 ---- deps_add_target (d, "-", 1); else { ! #ifndef TARGET_OBJECT_SUFFIX ! # define TARGET_OBJECT_SUFFIX ".o" #endif ! const char *start = lbasename (tgt); ! char *o = (char *) alloca (strlen (start) + strlen (TARGET_OBJECT_SUFFIX) + 1); char *suffix; strcpy (o, start); *************** deps_add_default_target (d, tgt) *** 200,206 **** suffix = strrchr (o, '.'); if (!suffix) suffix = o + strlen (o); ! strcpy (suffix, OBJECT_SUFFIX); deps_add_target (d, o, 1); } --- 200,206 ---- suffix = strrchr (o, '.'); if (!suffix) suffix = o + strlen (o); ! strcpy (suffix, TARGET_OBJECT_SUFFIX); deps_add_target (d, o, 1); } diff -Nrc3pad gcc-3.0.4/gcc/mkdeps.h gcc-3.1/gcc/mkdeps.h *** gcc-3.0.4/gcc/mkdeps.h Fri Jan 5 07:50:23 2001 --- gcc-3.1/gcc/mkdeps.h Sat May 26 01:31:34 2001 *************** Foundation, 59 Temple Place - Suite 330, *** 20,27 **** You are forbidden to forbid anyone else to use, share and improve what you give them. Help stamp out software-hoarding! */ ! #ifndef __GCC_MKDEPS__ ! #define __GCC_MKDEPS__ /* This is the data structure used by all the functions in mkdeps.c. It's quite straightforward, but should be treated as opaque. */ --- 20,27 ---- You are forbidden to forbid anyone else to use, share and improve what you give them. Help stamp out software-hoarding! */ ! #ifndef GCC_MKDEPS_H ! #define GCC_MKDEPS_H /* This is the data structure used by all the functions in mkdeps.c. It's quite straightforward, but should be treated as opaque. */ *************** extern void deps_write PARAMS ((const s *** 59,62 **** automatic dependency schemes. */ extern void deps_phony_targets PARAMS ((const struct deps *, FILE *)); ! #endif --- 59,62 ---- automatic dependency schemes. */ extern void deps_phony_targets PARAMS ((const struct deps *, FILE *)); ! #endif /* ! GCC_MKDEPS_H */ diff -Nrc3pad gcc-3.0.4/gcc/mklibgcc.in gcc-3.1/gcc/mklibgcc.in *** gcc-3.0.4/gcc/mklibgcc.in Mon Nov 19 00:46:43 2001 --- gcc-3.1/gcc/mklibgcc.in Thu May 9 17:35:21 2002 *************** *** 1,26 **** #!/bin/sh # Construct makefile for libgcc. ! # Copyright (C) 2000 Free Software Foundation, Inc. # ! # This file is part of GNU CC. # Arguments, taken from the environment, since there are a lot # of them, and positional args becomes quite ugly. # # objext - # OLDCC - # LIBGCC1 - # LIB1FUNCS # LIB1ASMFUNCS ! # LIB1FUNCS_EXTRA ! # LIB2FUNCS # LIB2FUNCS_ST # LIB2ADD # LIB2ADDEH # LIB2ADDEHDEP - # LIB2ADD_ST # FPBIT # FPBIT_FUNCS # DPBIT # DPBIT_FUNCS # LIBGCC --- 1,24 ---- #!/bin/sh # Construct makefile for libgcc. ! # Copyright (C) 2000, 2002 Free Software Foundation, Inc. # ! # This file is part of GCC. # Arguments, taken from the environment, since there are a lot # of them, and positional args becomes quite ugly. # # objext # LIB1ASMFUNCS ! # LIB2FUNCS_1 ! # LIB2FUNCS_2 # LIB2FUNCS_ST # LIB2ADD + # LIB2ADD_ST # LIB2ADDEH # LIB2ADDEHDEP # FPBIT # FPBIT_FUNCS + # LIB2_DIVMOD_FUNCS # DPBIT # DPBIT_FUNCS # LIBGCC *************** *** 30,38 **** --- 28,38 ---- # SHLIB_LINK # SHLIB_MULTILIB # SHLIB_MKMAP + # SHLIB_MKMAP_OPTS # SHLIB_MAPFILES # SHLIB_NM_FLAGS # SHLIB_INSTALL + # SHLIB_SLIBDIR_SUFFIXES # Make needs VPATH to be literal. echo 'srcdir = @srcdir@' *************** echo *** 42,64 **** echo 'force:' echo - # Detect gcc as OLDCC. This indicates a target for which LIB1FUNCS - # is not needed. This is not quite the same as libgcc1.null, even - # on a target not using libgcc1-asm.a. - - if [ "@build_canonical@" = "@target@" ]; then - tmp="tmp-$$.c" - cat > $tmp < /dev/null 2>&1; then - LIB1FUNCS="" - fi - rm -f $tmp - fi - # Disable SHLIB_LINK if shared libgcc not enabled. if [ "@enable_shared@" = "no" ]; then SHLIB_LINK="" --- 42,47 ---- *************** fi *** 67,73 **** # Build lines. gcc_compile='$(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES)' - oldcc_compile='$(OLDCC) -DIN_LIBGCC1 $(CCLIBFLAGS) $(INCLUDES)' make_compile='$(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \ AR_FOR_TARGET="$(AR_FOR_TARGET)" \ AR_CREATE_FOR_TARGET="$(AR_CREATE_FOR_TARGET)" \ --- 50,55 ---- *************** make_compile='$(MAKE) GCC_FOR_TARGET="$( *** 78,90 **** HOST_PREFIX_1="$(HOST_PREFIX_1)" \ LANGUAGES="$(LANGUAGES)"' ! # Dependancies for libgcc1.c ! libgcc1_c_dep='stmp-dirs $(srcdir)/libgcc1.c $(CONFIG_H)' ! ! # Dependancies for libgcc2.c libgcc2_c_dep='stmp-dirs $(srcdir)/libgcc2.c $(CONFIG_H) $(MACHMODE_H) longlong.h gbl-ctors.h config.status stmp-int-hdrs tsystem.h'" $LIB2ADDEHDEP" ! # Dependancies for fp-bit.c fpbit_c_dep='stmp-dirs config.status tsystem.h' # --- 60,69 ---- HOST_PREFIX_1="$(HOST_PREFIX_1)" \ LANGUAGES="$(LANGUAGES)"' ! # Dependencies for libgcc2.c libgcc2_c_dep='stmp-dirs $(srcdir)/libgcc2.c $(CONFIG_H) $(MACHMODE_H) longlong.h gbl-ctors.h config.status stmp-int-hdrs tsystem.h'" $LIB2ADDEHDEP" ! # Dependencies for fp-bit.c fpbit_c_dep='stmp-dirs config.status tsystem.h' # *************** fpbit_c_dep='stmp-dirs config.status tsy *** 93,168 **** libgcc1_objs="" ! case X"$LIBGCC1" in ! Xlibgcc1.null | X) ! ;; ! ! Xlibgcc1.cross) ! echo "You must find a way to make libgcc1 components yourself" 1>&2 ! ;; ! ! Xlibgcc1-asm.a) ! for name in $LIB1ASMFUNCS; do ! for ml in $MULTILIBS; do ! dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'` ! flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; ! out="libgcc/${dir}/${name}${objext}" ! echo ${out}: stmp-dirs '$(srcdir)/config/$(LIB1ASMSRC)' ! echo " $gcc_compile" $flags -DL$name -xassembler-with-cpp \ -c '$(srcdir)/config/$(LIB1ASMSRC)' -o $out ! # Remove any objects from LIB2FUNCS that are defined as optimized ! # assembly code in LIB1ASMFUNCS. ! LIB2FUNCS=`echo $LIB2FUNCS | sed -e 's/^'$name' //' \ -e 's/ '$name' / /' \ ! -e 's/ '$name'$//'` ! done ! libgcc1_objs="$libgcc1_objs ${name}${objext}" ! done ! ;; ! ! Xlibgcc1.a) ! for name in $LIB1FUNCS; do ! out="libgcc/${name}${objext}" ! ! echo $out: $libgcc1_c_dep ! if [ -z "@NO_MINUS_C_MINUS_O@" ]; then ! echo " $oldcc_compile" -DL$name $flags -c '$(srcdir)/libgcc1.c' -o $out ! else ! echo " $oldcc_compile" -DL$name $flags -c '$(srcdir)/libgcc1.c' ! echo " mv libgcc1${objext} $out" ! fi ! ! libgcc1_objs="$libgcc1_objs ${name}${objext}" ! done ! ! for file in $LIB1FUNCS_EXTRA; do ! name=`echo $file | sed -e 's/[.][cS]$//' -e 's/[.]asm$//'` ! out="libgcc/${name}${objext}" ! ! echo $out: $file ! if [ ${name}.asm = $file ]; then ! echo " cp $file ${name}.s" ! file=${name}.s ! fi ! ! if [ -z "@NO_MINUS_C_MINUS_O@" ]; then ! echo " $oldcc_compile" -c $file -o $out ! else ! echo " $oldcc_compile" -c $file ! tmp=`echo $file | sed -e 's/[.][cs]$/'${objext}/ -e 's,.*/,,'` ! echo " mv $tmp $out" ! fi ! ! libgcc1_objs="$libgcc1_objs ${name}${objext}" ! done ! ;; ! *) ! echo "I'm confused about libgcc1." 1>&2 ! exit 1 ! ;; ! esac # # Build libgcc2 components. --- 72,101 ---- libgcc1_objs="" ! for name in $LIB1ASMFUNCS; do ! for ml in $MULTILIBS; do ! dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'` ! flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; ! out="libgcc/${dir}/${name}${objext}" ! echo ${out}: stmp-dirs '$(srcdir)/config/$(LIB1ASMSRC)' ! echo " $gcc_compile" $flags -DL$name -xassembler-with-cpp \ -c '$(srcdir)/config/$(LIB1ASMSRC)' -o $out ! # Remove any objects from LIB2FUNCS and LIB2_DIVMOD_FUNCS that are ! # defined as optimized assembly code in LIB1ASMFUNCS. ! LIB2FUNCS_1=`echo $LIB2FUNCS_1 | sed -e 's/^'$name' //' \ -e 's/ '$name' / /' \ ! -e 's/ '$name'$//'` ! LIB2FUNCS_2=`echo $LIB2FUNCS_2 | sed -e 's/^'$name' //' \ ! -e 's/ '$name' / /' \ ! -e 's/ '$name'$//'` ! LIB2_DIVMOD_FUNCS=`echo $LIB2_DIVMOD_FUNCS | sed -e 's/^'$name' //' \ ! -e 's/ '$name' / /' \ ! -e 's/ '$name'$//'` ! done ! libgcc1_objs="$libgcc1_objs ${name}${objext}" ! done # # Build libgcc2 components. *************** esac *** 170,177 **** libgcc2_objs="" libgcc2_st_objs="" ! for name in $LIB2FUNCS; do for ml in $MULTILIBS; do dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'` flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; --- 103,111 ---- libgcc2_objs="" libgcc2_st_objs="" + libgcc2_eh_objs="" ! for name in $LIB2FUNCS_1 $LIB2FUNCS_2; do for ml in $MULTILIBS; do dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'` flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; *************** for name in $LIB2FUNCS_ST; do *** 197,202 **** --- 131,149 ---- libgcc2_st_objs="$libgcc2_st_objs ${name}${objext}" done + for name in $LIB2_DIVMOD_FUNCS; do + for ml in $MULTILIBS; do + dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'` + flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; + out="libgcc/${dir}/${name}${objext}" + + echo $out: $libgcc2_c_dep + echo " $gcc_compile" '$(MAYBE_USE_COLLECT2)' $flags -DL$name \ + -c '$(srcdir)/libgcc2.c' -fexceptions -fnon-call-exceptions -o $out + done + libgcc2_objs="$libgcc2_objs ${name}${objext}" + done + if [ "$FPBIT" ]; then for name in $FPBIT_FUNCS; do for ml in $MULTILIBS; do *************** for file in $LIB2ADDEH; do *** 260,266 **** echo $out: stmp-dirs $file echo " $gcc_compile" $flags -fexceptions -c $file -o $out done ! libgcc2_objs="$libgcc2_objs ${oname}${objext}" done for file in $LIB2ADD_ST; do --- 207,217 ---- echo $out: stmp-dirs $file echo " $gcc_compile" $flags -fexceptions -c $file -o $out done ! if [ "$SHLIB_LINK" ]; then ! libgcc2_eh_objs="$libgcc2_eh_objs ${oname}${objext}" ! else ! libgcc2_objs="$libgcc2_objs ${oname}${objext}" ! fi done for file in $LIB2ADD_ST; do *************** for file in $LIB2ADD_ST; do *** 282,316 **** done # SHLIB_MKMAP # SHLIB_MAPFILES for ml in $MULTILIBS; do dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'` flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; libgcc_objs="" for o in $libgcc1_objs; do ! if [ "$LIBGCC1" = libgcc1-asm.a ]; then ! libgcc_objs="$libgcc_objs libgcc/${dir}/$o" ! else ! libgcc_objs="$libgcc_objs libgcc/$o" ! fi done for o in $libgcc2_objs; do libgcc_objs="$libgcc_objs libgcc/${dir}/$o" done ! shlib_deps="$libgcc_objs" libgcc_st_objs="" for o in $libgcc2_st_objs; do libgcc_st_objs="$libgcc_st_objs libgcc/${dir}/$o" done ! if [ "$SHLIB_LINK" -a "$SHLIB_MKMAP" -a -z "$mapfile" ]; then ! mapfile="libgcc.map" echo "" ! echo "${mapfile}: $SHLIB_MKMAP $SHLIB_MAPFILES $libgcc_objs" ! echo ' { $(NM_FOR_TARGET)'" $SHLIB_NM_FLAGS $libgcc_objs; echo %%; cat $SHLIB_MAPFILES; } | "'$(AWK)'" -f $SHLIB_MKMAP > "'tmp-$@' ! echo ' mv tmp-$@ $@' fi shlib_deps="$shlib_deps $mapfile" --- 233,273 ---- done # SHLIB_MKMAP + # SHLIB_MKMAP_OPTS # SHLIB_MAPFILES for ml in $MULTILIBS; do dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'` flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; libgcc_objs="" + libgcc_eh_objs="" for o in $libgcc1_objs; do ! libgcc_objs="$libgcc_objs libgcc/${dir}/$o" done for o in $libgcc2_objs; do libgcc_objs="$libgcc_objs libgcc/${dir}/$o" done ! for o in $libgcc2_eh_objs; do ! libgcc_eh_objs="$libgcc_eh_objs libgcc/${dir}/$o" ! done ! libgcc_sh_objs="$libgcc_objs $libgcc_eh_objs" ! shlib_deps="$libgcc_sh_objs" libgcc_st_objs="" for o in $libgcc2_st_objs; do libgcc_st_objs="$libgcc_st_objs libgcc/${dir}/$o" done ! if [ "$SHLIB_LINK" -a "$SHLIB_MKMAP" ]; then ! mapfile="libgcc/${dir}/libgcc.map" ! tmpmapfile="libgcc/${dir}/tmp-libgcc.map" echo "" ! echo "${mapfile}: $SHLIB_MKMAP $SHLIB_MAPFILES $libgcc_sh_objs" ! echo ' { $(NM_FOR_TARGET)'" $SHLIB_NM_FLAGS $libgcc_sh_objs; echo %%; \\" ! echo " cat $SHLIB_MAPFILES | sed -e "'"/^[ ]*#/d" -e '\''s/^%\(if\|else\|elif\|endif\|define\)/#\1/'\'" \\" ! echo " | $gcc_compile $flags -E -xassembler-with-cpp -; \\" ! echo ' } | $(AWK)'" -f $SHLIB_MKMAP $SHLIB_MKMAP_OPTS > ${tmpmapfile}" ! echo ' mv '"$tmpmapfile"' $@' fi shlib_deps="$shlib_deps $mapfile" *************** for ml in $MULTILIBS; do *** 320,348 **** shlib_deps="$shlib_deps $dir/$f" done echo "" ! echo "${dir}/libgcc.a: $libgcc_objs $libgcc_st_objs" echo " -rm -rf ${dir}/libgcc.a" ! echo ' $(AR_CREATE_FOR_TARGET)' ${dir}/libgcc.a $libgcc_objs $libgcc_st_objs echo ' if $(RANLIB_TEST_FOR_TARGET) ; then' \\ echo ' $(RANLIB_FOR_TARGET)' ${dir}/libgcc.a ';' \\ echo ' else true; fi;' if [ "$SHLIB_LINK" ]; then if [ -z "$SHLIB_MULTILIB" ]; then ! if [ "$dir" = "." ]; then ! shlib_base_name="libgcc_s"; else shlib_base_name=libgcc_s_`echo $dir | sed s,/,_,g` fi echo "" echo "${dir}/${shlib_base_name}${SHLIB_EXT}: $shlib_deps" echo " $SHLIB_LINK" \ | sed -e "s%@multilib_flags@%$flags%g" \ -e "s%@multilib_dir@%$dir%g" \ ! -e "s%@shlib_objs@%$libgcc_objs%g" \ -e "s%@shlib_base_name@%$shlib_base_name%g" \ ! -e "s%@shlib_map_file@%$mapfile%g" elif [ "$SHLIB_MULTILIB" = "$dir" ]; then shlib_base_name="libgcc_s"; echo "" --- 277,350 ---- shlib_deps="$shlib_deps $dir/$f" done + libgcc_a_objs="$libgcc_objs $libgcc_st_objs" + + if [ "@libgcc_visibility@" = yes -a "$SHLIB_LINK" ]; then + libgcc_a_objs= + echo "" + for o in $libgcc_objs $libgcc_st_objs; do + # .oS objects will have all non-local symbol definitions .hidden + oS=`echo ${o} | sed s~${objext}'$~.oS~g'` + echo "${oS}: stmp-dirs ${o}" + echo ' @$(NM_FOR_TARGET) '${SHLIB_NM_FLAGS} ${o}' | $(AWK) '\''NF == 3 { print "\t.hidden", $$3 }'\'' | $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) '${flags}' -r -nostdinc -nostdlib -o $@ '${o}' -xassembler -' + libgcc_a_objs="${libgcc_a_objs} ${oS}" + done + fi + echo "" ! echo "${dir}/libgcc.a: $libgcc_a_objs" echo " -rm -rf ${dir}/libgcc.a" ! echo ' $(AR_CREATE_FOR_TARGET)' ${dir}/libgcc.a $libgcc_a_objs echo ' if $(RANLIB_TEST_FOR_TARGET) ; then' \\ echo ' $(RANLIB_FOR_TARGET)' ${dir}/libgcc.a ';' \\ echo ' else true; fi;' if [ "$SHLIB_LINK" ]; then + + echo "" + echo "${dir}/libgcc_eh.a: $libgcc_eh_objs" + echo " -rm -rf ${dir}/libgcc_eh.a" + echo ' $(AR_CREATE_FOR_TARGET)' ${dir}/libgcc_eh.a $libgcc_eh_objs + echo ' if $(RANLIB_TEST_FOR_TARGET) ; then' \\ + echo ' $(RANLIB_FOR_TARGET)' ${dir}/libgcc_eh.a ';' \\ + echo ' else true; fi;' + if [ -z "$SHLIB_MULTILIB" ]; then ! if [ "$dir" = . ]; then ! shlib_base_name=libgcc_s else shlib_base_name=libgcc_s_`echo $dir | sed s,/,_,g` fi + shlib_so_name="$shlib_base_name" + shlib_dir= + if [ -n "$SHLIB_SLIBDIR_SUFFIXES" ]; then + if [ "$dir" != . ]; then + shlib_dir="$dir"/ + for suffix_pair in $SHLIB_SLIBDIR_SUFFIXES ; do + base_ml_dir=`echo ${suffix_pair} | sed -e 's/:.*$//' -e 's/=/$(EQ)/g'` + if [ "$dir" = "$base_ml_dir" ]; then + shlib_so_name=libgcc_s + break + else + canon_dir=`echo $dir | sed -n -e "s:$base_ml_dir/::p"` + if [ -n "$canon_dir" ]; then + shlib_so_name=libgcc_s_`echo $canon_dir | sed s,/,_,g` + break + fi + fi + done + fi + fi echo "" echo "${dir}/${shlib_base_name}${SHLIB_EXT}: $shlib_deps" echo " $SHLIB_LINK" \ | sed -e "s%@multilib_flags@%$flags%g" \ -e "s%@multilib_dir@%$dir%g" \ ! -e "s%@shlib_objs@%$libgcc_sh_objs%g" \ -e "s%@shlib_base_name@%$shlib_base_name%g" \ ! -e "s%@shlib_map_file@%$mapfile%g" \ ! -e "s%@shlib_so_name@%$shlib_so_name%g" \ ! -e "s%@shlib_dir@%$shlib_dir%g" elif [ "$SHLIB_MULTILIB" = "$dir" ]; then shlib_base_name="libgcc_s"; echo "" *************** for ml in $MULTILIBS; do *** 350,358 **** echo " $SHLIB_LINK" \ | sed -e "s%@multilib_flags@%$flags%g" \ -e "s%@multilib_dir@%$dir%g" \ ! -e "s%@shlib_objs@%$libgcc_objs%g" \ -e "s%@shlib_base_name@%$shlib_base_name%g" \ ! -e "s%@shlib_map_file@%$mapfile%g" fi fi done --- 352,362 ---- echo " $SHLIB_LINK" \ | sed -e "s%@multilib_flags@%$flags%g" \ -e "s%@multilib_dir@%$dir%g" \ ! -e "s%@shlib_objs@%$libgcc_sh_objs%g" \ -e "s%@shlib_base_name@%$shlib_base_name%g" \ ! -e "s%@shlib_map_file@%$mapfile%g" \ ! -e "s%@shlib_so_name@%$shlib_base_name%g" \ ! -e "s%@shlib_dir@%%g" fi fi done *************** for ml in $MULTILIBS; do *** 384,389 **** --- 388,394 ---- fi all="$all ${dir}/libgcc.a" if [ "$SHLIB_LINK" ]; then + all="$all ${dir}/libgcc_eh.a" if [ -z "$SHLIB_MULTILIB" ]; then if [ "$dir" = "." ]; then suff=""; *************** done *** 399,405 **** echo 'stmp-dirs: force' echo ' for d in '"$dirs"'; do \' ! echo ' if [ -d $$d ]; then true; else mkdir $$d; fi; \' echo ' done' echo ' if [ -f stmp-dirs ]; then true; else touch stmp-dirs; fi' --- 404,410 ---- echo 'stmp-dirs: force' echo ' for d in '"$dirs"'; do \' ! echo ' if [ -d $$d ]; then true; else '$mkinstalldirs' $$d; fi; \' echo ' done' echo ' if [ -f stmp-dirs ]; then true; else touch stmp-dirs; fi' *************** for ml in $MULTILIBS; do *** 443,460 **** echo ' $(RANLIB_FOR_TARGET)' ${ldir}/libgcc.a if [ "$SHLIB_LINK" ]; then if [ -z "$SHLIB_MULTILIB" ]; then ! if [ "$dir" = "." ]; then ! shlib_base_name="libgcc_s"; else shlib_base_name=libgcc_s_`echo $dir | sed s,/,_,g` fi echo " $SHLIB_INSTALL" \ ! | sed -e "s%@shlib_base_name@%$shlib_base_name%g" elif [ "$SHLIB_MULTILIB" = "$dir" ]; then shlib_base_name="libgcc_s"; echo " $SHLIB_INSTALL" \ ! | sed -e "s%@shlib_base_name@%$shlib_base_name%g" fi fi done --- 448,512 ---- echo ' $(RANLIB_FOR_TARGET)' ${ldir}/libgcc.a if [ "$SHLIB_LINK" ]; then + echo ' $(INSTALL_DATA)' ${dir}/libgcc_eh.a ${ldir}/ + echo ' $(RANLIB_FOR_TARGET)' ${ldir}/libgcc_eh.a + if [ -z "$SHLIB_MULTILIB" ]; then ! if [ "$dir" = . ]; then ! shlib_base_name=libgcc_s else shlib_base_name=libgcc_s_`echo $dir | sed s,/,_,g` fi + shlib_so_name="$shlib_base_name" + shlib_dir= + shlib_slibdir_qual= + if [ -n "$SHLIB_SLIBDIR_SUFFIXES" ]; then + shlib_slibdir_qual=none + if [ "$dir" != . ]; then + shlib_dir="$dir"/ + for suffix_pair in $SHLIB_SLIBDIR_SUFFIXES ; do + base_ml_dir=`echo ${suffix_pair} | sed -e 's/:.*$//' -e 's/=/$(EQ)/g'` + if [ "$dir" = "$base_ml_dir" ]; then + shlib_so_name=libgcc_s + shlib_slibdir_qual=`echo ${suffix_pair} | sed -e 's/^[^:]*://'` + break + else + canon_dir=`echo $dir | sed -n -e "s:$base_ml_dir/::p"` + if [ -n "$canon_dir" ]; then + shlib_so_name=libgcc_s_`echo $canon_dir | sed s,/,_,g` + shlib_slibdir_qual=`echo ${suffix_pair} | sed -e 's/^[^:]*://'` + break + fi + fi + done + fi + if [ "$shlib_slibdir_qual" = none ]; then + for suffix_pair in $SHLIB_SLIBDIR_SUFFIXES ; do + base_ml_dir=`echo ${suffix_pair} | sed -e 's/:.*$//' -e 's/=/$(EQ)/g'` + shlib_slibdir_qual=`echo ${suffix_pair} | sed -e 's/^[^:]*://'` + for ml2 in $MULTILIBS; do + dir2=`echo ${ml2} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'` + if [ "$base_ml_dir" = "$dir2" ]; then + shlib_slibdir_qual= + break + fi + done + if [ -n "$shlib_slibdir_qual" ]; then break; fi + done + fi + fi echo " $SHLIB_INSTALL" \ ! | sed -e "s%@shlib_base_name@%$shlib_base_name%g" \ ! -e "s%@shlib_so_name@%$shlib_so_name%g" \ ! -e "s%@shlib_dir@%$shlib_dir%g" \ ! -e "s%@shlib_slibdir_qual@%$shlib_slibdir_qual%g" elif [ "$SHLIB_MULTILIB" = "$dir" ]; then shlib_base_name="libgcc_s"; echo " $SHLIB_INSTALL" \ ! | sed -e "s%@shlib_base_name@%$shlib_base_name%g" \ ! -e "s%@shlib_so_name@%$shlib_base_name%g" \ ! -e "s%@shlib_dir@%%g" \ ! -e "s%@shlib_slibdir_qual@%%g" fi fi done diff -Nrc3pad gcc-3.0.4/gcc/mkmap-flat.awk gcc-3.1/gcc/mkmap-flat.awk *** gcc-3.0.4/gcc/mkmap-flat.awk Fri Oct 6 05:46:01 2000 --- gcc-3.1/gcc/mkmap-flat.awk Wed Aug 22 14:35:30 2001 *************** *** 1,22 **** # Generate a flat list of symbols to export. # Contributed by Richard Henderson # ! # 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. BEGIN { state = "nm"; --- 1,22 ---- # Generate a flat list of symbols to export. # Contributed by Richard Henderson # ! # This file is part of GCC. # ! # GCC is free software; you can redistribute it and/or modify it under ! # the terms of the GNU General Public License as published by the Free ! # Software Foundation; either version 2, or (at your option) any later ! # version. # ! # GCC is distributed in the hope that it will be useful, but WITHOUT ! # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ! # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public ! # License for more details. # # You should have received a copy of the GNU General Public License ! # along with GCC; see the file COPYING. If not, write to the Free ! # Software Foundation, 59 Temple Place - Suite 330, Boston MA ! # 02111-1307, USA. BEGIN { state = "nm"; diff -Nrc3pad gcc-3.0.4/gcc/mkmap-symver.awk gcc-3.1/gcc/mkmap-symver.awk *** gcc-3.0.4/gcc/mkmap-symver.awk Fri Oct 6 05:46:01 2000 --- gcc-3.1/gcc/mkmap-symver.awk Fri Mar 22 00:57:15 2002 *************** *** 1,22 **** # Generate an ELF symbol version map a-la Solaris and GNU ld. # Contributed by Richard Henderson # ! # 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. BEGIN { state = "nm"; --- 1,22 ---- # Generate an ELF symbol version map a-la Solaris and GNU ld. # Contributed by Richard Henderson # ! # This file is part of GCC. # ! # GCC is free software; you can redistribute it and/or modify it under ! # the terms of the GNU General Public License as published by the Free ! # Software Foundation; either version 2, or (at your option) any later ! # version. # ! # GCC is distributed in the hope that it will be useful, but WITHOUT ! # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ! # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public ! # License for more details. # # You should have received a copy of the GNU General Public License ! # along with GCC; see the file COPYING. If not, write to the Free ! # Software Foundation, 59 Temple Place - Suite 330, Boston MA ! # 02111-1307, USA. BEGIN { state = "nm"; *************** function output(lib) { *** 92,98 **** printf(" global:\n"); for (sym in ver) if ((ver[sym] == lib) && (sym in def)) ! printf("\t%s;\n", sym); if (inherit[lib]) printf("} %s;\n", inherit[lib]); --- 92,102 ---- printf(" global:\n"); for (sym in ver) if ((ver[sym] == lib) && (sym in def)) ! { ! printf("\t%s;\n", sym); ! if (dotsyms) ! printf("\t.%s;\n", sym); ! } if (inherit[lib]) printf("} %s;\n", inherit[lib]); diff -Nrc3pad gcc-3.0.4/gcc/optabs.c gcc-3.1/gcc/optabs.c *** gcc-3.0.4/gcc/optabs.c Tue Jul 3 12:39:47 2001 --- gcc-3.1/gcc/optabs.c Fri Apr 5 19:13:00 2002 *************** *** 2,23 **** Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" --- 2,23 ---- Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" *************** Boston, MA 02111-1307, USA. */ *** 25,31 **** #include "toplev.h" /* Include insn-config.h before expr.h so that HAVE_conditional_move ! is properly defined. */ #include "insn-config.h" #include "rtl.h" #include "tree.h" --- 25,31 ---- #include "toplev.h" /* Include insn-config.h before expr.h so that HAVE_conditional_move ! is properly defined. */ #include "insn-config.h" #include "rtl.h" #include "tree.h" *************** Boston, MA 02111-1307, USA. */ *** 34,39 **** --- 34,41 ---- #include "function.h" #include "except.h" #include "expr.h" + #include "optabs.h" + #include "libfuncs.h" #include "recog.h" #include "reload.h" #include "ggc.h" *************** static int expand_cmplxdiv_wide PARAMS ( *** 94,105 **** rtx, rtx, enum machine_mode, int, enum optab_methods, enum mode_class, optab)); static enum insn_code can_fix_p PARAMS ((enum machine_mode, enum machine_mode, int, int *)); ! static enum insn_code can_float_p PARAMS ((enum machine_mode, enum machine_mode, ! int)); static rtx ftruncify PARAMS ((rtx)); ! static optab init_optab PARAMS ((enum rtx_code)); static void init_libfuncs PARAMS ((optab, int, int, const char *, int)); static void init_integral_libfuncs PARAMS ((optab, const char *, int)); static void init_floating_libfuncs PARAMS ((optab, const char *, int)); --- 96,113 ---- rtx, rtx, enum machine_mode, int, enum optab_methods, enum mode_class, optab)); + static void prepare_cmp_insn PARAMS ((rtx *, rtx *, enum rtx_code *, rtx, + enum machine_mode *, int *, + enum can_compare_purpose)); static enum insn_code can_fix_p PARAMS ((enum machine_mode, enum machine_mode, int, int *)); ! static enum insn_code can_float_p PARAMS ((enum machine_mode, ! enum machine_mode, ! int)); static rtx ftruncify PARAMS ((rtx)); ! static optab new_optab PARAMS ((void)); ! static inline optab init_optab PARAMS ((enum rtx_code)); ! static inline optab init_optabv PARAMS ((enum rtx_code)); static void init_libfuncs PARAMS ((optab, int, int, const char *, int)); static void init_integral_libfuncs PARAMS ((optab, const char *, int)); static void init_floating_libfuncs PARAMS ((optab, const char *, int)); *************** widen_operand (op, mode, oldmode, unsign *** 178,189 **** { rtx result; ! /* If we must extend do so. If OP is either a constant or a SUBREG ! for a promoted object, also extend since it will be more efficient to ! do so. */ if (! no_extend ! || GET_MODE (op) == VOIDmode ! || (GET_CODE (op) == SUBREG && SUBREG_PROMOTED_VAR_P (op))) return convert_modes (mode, oldmode, op, unsignedp); /* If MODE is no wider than a single word, we return a paradoxical --- 186,201 ---- { rtx result; ! /* If we don't have to extend and this is a constant, return it. */ ! if (no_extend && GET_MODE (op) == VOIDmode) ! return op; ! ! /* If we must extend do so. If OP is a SUBREG for a promoted object, also ! extend since it will be more efficient to do so unless the signedness of ! a promoted object differs from our extension. */ if (! no_extend ! || (GET_CODE (op) == SUBREG && SUBREG_PROMOTED_VAR_P (op) ! && SUBREG_PROMOTED_UNSIGNED_P (op) == unsignedp)) return convert_modes (mode, oldmode, op, unsignedp); /* If MODE is no wider than a single word, we return a paradoxical *************** expand_cmplxdiv_wide (real0, real1, imag *** 348,354 **** rtx real_t, imag_t; rtx temp1, temp2, lab1, lab2; enum machine_mode mode; - int align; rtx res; optab this_add_optab = add_optab; optab this_sub_optab = sub_optab; --- 360,365 ---- *************** expand_cmplxdiv_wide (real0, real1, imag *** 388,397 **** return 0; mode = GET_MODE (temp1); - align = GET_MODE_ALIGNMENT (mode); lab1 = gen_label_rtx (); emit_cmp_and_jump_insns (temp1, temp2, LT, NULL_RTX, ! mode, unsignedp, align, lab1); /* |c| >= |d|; use ratio d/c to scale dividend and divisor. */ --- 399,407 ---- return 0; mode = GET_MODE (temp1); lab1 = gen_label_rtx (); emit_cmp_and_jump_insns (temp1, temp2, LT, NULL_RTX, ! mode, unsignedp, lab1); /* |c| >= |d|; use ratio d/c to scale dividend and divisor. */ *************** expand_cmplxdiv_wide (real0, real1, imag *** 597,602 **** --- 607,631 ---- return 1; } + /* Wrapper around expand_binop which takes an rtx code to specify + the operation to perform, not an optab pointer. All other + arguments are the same. */ + rtx + expand_simple_binop (mode, code, op0, op1, target, unsignedp, methods) + enum machine_mode mode; + enum rtx_code code; + rtx op0, op1; + rtx target; + int unsignedp; + enum optab_methods methods; + { + optab binop = code_to_optab [(int) code]; + if (binop == 0) + abort (); + + return expand_binop (mode, binop, op0, op1, target, unsignedp, methods); + } + /* Generate code to perform an operation specified by BINOPTAB on operands OP0 and OP1, with result having machine-mode MODE. *************** expand_binop (mode, binoptab, op0, op1, *** 622,628 **** ? OPTAB_WIDEN : methods); enum mode_class class; enum machine_mode wider_mode; ! register rtx temp; int commutative_op = 0; int shift_op = (binoptab->code == ASHIFT || binoptab->code == ASHIFTRT --- 651,657 ---- ? OPTAB_WIDEN : methods); enum mode_class class; enum machine_mode wider_mode; ! rtx temp; int commutative_op = 0; int shift_op = (binoptab->code == ASHIFT || binoptab->code == ASHIFTRT *************** expand_binop (mode, binoptab, op0, op1, *** 715,721 **** if (GET_MODE (op0) != mode0 && GET_MODE (op1) != mode1 && GET_MODE (op0) == mode1 && GET_MODE (op1) == mode0) { ! register rtx tmp; tmp = op0; op0 = op1; op1 = tmp; tmp = xop0; xop0 = xop1; xop1 = tmp; --- 744,750 ---- if (GET_MODE (op0) != mode0 && GET_MODE (op1) != mode1 && GET_MODE (op0) == mode1 && GET_MODE (op1) == mode0) { ! rtx tmp; tmp = op0; op0 = op1; op1 = tmp; tmp = xop0; xop0 = xop1; xop1 = tmp; *************** expand_binop (mode, binoptab, op0, op1, *** 723,739 **** } /* In case the insn wants input operands in modes different from ! the result, convert the operands. */ ! if (GET_MODE (op0) != VOIDmode ! && GET_MODE (op0) != mode0 && mode0 != VOIDmode) ! xop0 = convert_to_mode (mode0, xop0, unsignedp); ! if (GET_MODE (xop1) != VOIDmode ! && GET_MODE (xop1) != mode1 && mode1 != VOIDmode) ! xop1 = convert_to_mode (mode1, xop1, unsignedp); /* Now, if insn's predicates don't allow our operands, put them into pseudo regs. */ --- 752,786 ---- } /* In case the insn wants input operands in modes different from ! the result, convert the operands. It would seem that we ! don't need to convert CONST_INTs, but we do, so that they're ! a properly sign-extended for their modes; we choose the ! widest mode between mode and mode[01], so that, in a widening ! operation, we call convert_modes with different FROM and TO ! modes, which ensures the value is sign-extended. Shift ! operations are an exception, because the second operand needs ! not be extended to the mode of the result. */ ! if (GET_MODE (op0) != mode0 && mode0 != VOIDmode) ! xop0 = convert_modes (mode0, ! GET_MODE (op0) != VOIDmode ! ? GET_MODE (op0) ! : GET_MODE_SIZE (mode) > GET_MODE_SIZE (mode0) ! ? mode ! : mode0, ! xop0, unsignedp); ! if (GET_MODE (xop1) != mode1 && mode1 != VOIDmode) ! xop1 = convert_modes (mode1, ! GET_MODE (op1) != VOIDmode ! ? GET_MODE (op1) ! : (GET_MODE_SIZE (mode) > GET_MODE_SIZE (mode1) ! && ! shift_op) ! ? mode ! : mode1, ! xop1, unsignedp); /* Now, if insn's predicates don't allow our operands, put them into pseudo regs. */ *************** expand_binop (mode, binoptab, op0, op1, *** 812,818 **** /* For certain integer operations, we need not actually extend the narrow operands, as long as we will truncate ! the results to the same narrowness. */ if ((binoptab == ior_optab || binoptab == and_optab || binoptab == xor_optab --- 859,865 ---- /* For certain integer operations, we need not actually extend the narrow operands, as long as we will truncate ! the results to the same narrowness. */ if ((binoptab == ior_optab || binoptab == and_optab || binoptab == xor_optab *************** expand_binop (mode, binoptab, op0, op1, *** 852,858 **** && GET_MODE_SIZE (mode) > UNITS_PER_WORD && binoptab->handlers[(int) word_mode].insn_code != CODE_FOR_nothing) { ! unsigned int i; rtx insns; rtx equiv_value; --- 899,905 ---- && GET_MODE_SIZE (mode) > UNITS_PER_WORD && binoptab->handlers[(int) word_mode].insn_code != CODE_FOR_nothing) { ! int i; rtx insns; rtx equiv_value; *************** expand_binop (mode, binoptab, op0, op1, *** 1143,1150 **** && GET_MODE_SIZE (mode) >= 2 * UNITS_PER_WORD && binoptab->handlers[(int) word_mode].insn_code != CODE_FOR_nothing) { ! unsigned int i; ! rtx carry_tmp = gen_reg_rtx (word_mode); optab otheroptab = binoptab == add_optab ? sub_optab : add_optab; unsigned int nwords = GET_MODE_BITSIZE (mode) / BITS_PER_WORD; rtx carry_in = NULL_RTX, carry_out = NULL_RTX; --- 1190,1196 ---- && GET_MODE_SIZE (mode) >= 2 * UNITS_PER_WORD && binoptab->handlers[(int) word_mode].insn_code != CODE_FOR_nothing) { ! int i; optab otheroptab = binoptab == add_optab ? sub_optab : add_optab; unsigned int nwords = GET_MODE_BITSIZE (mode) / BITS_PER_WORD; rtx carry_in = NULL_RTX, carry_out = NULL_RTX; *************** expand_binop (mode, binoptab, op0, op1, *** 1200,1223 **** if (i > 0) { /* Add/subtract previous carry to main result. */ ! x = expand_binop (word_mode, ! normalizep == 1 ? binoptab : otheroptab, ! x, carry_in, ! target_piece, 1, next_methods); ! if (x == 0) ! break; ! else if (target_piece != x) ! emit_move_insn (target_piece, x); if (i + 1 < nwords) { - /* THIS CODE HAS NOT BEEN TESTED. */ /* Get out carry from adding/subtracting carry in. */ carry_tmp = emit_store_flag_force (carry_tmp, ! binoptab == add_optab ! ? LT : GT, ! x, carry_in, word_mode, 1, normalizep); /* Logical-ior the two poss. carry together. */ --- 1246,1267 ---- if (i > 0) { + rtx newx; + /* Add/subtract previous carry to main result. */ ! newx = expand_binop (word_mode, ! normalizep == 1 ? binoptab : otheroptab, ! x, carry_in, ! NULL_RTX, 1, next_methods); if (i + 1 < nwords) { /* Get out carry from adding/subtracting carry in. */ + rtx carry_tmp = gen_reg_rtx (word_mode); carry_tmp = emit_store_flag_force (carry_tmp, ! (binoptab == add_optab ! ? LT : GT), ! newx, x, word_mode, 1, normalizep); /* Logical-ior the two poss. carry together. */ *************** expand_binop (mode, binoptab, op0, op1, *** 1227,1232 **** --- 1271,1277 ---- if (carry_out == 0) break; } + emit_move_insn (target_piece, newx); } carry_in = carry_out; *************** sign_expand_binop (mode, uoptab, soptab, *** 1823,1829 **** int unsignedp; enum optab_methods methods; { ! register rtx temp; optab direct_optab = unsignedp ? uoptab : soptab; struct optab wide_soptab; --- 1868,1874 ---- int unsignedp; enum optab_methods methods; { ! rtx temp; optab direct_optab = unsignedp ? uoptab : soptab; struct optab wide_soptab; *************** expand_twoval_binop (binoptab, op0, op1, *** 1972,1979 **** if (binoptab->handlers[(int) wider_mode].insn_code != CODE_FOR_nothing) { ! register rtx t0 = gen_reg_rtx (wider_mode); ! register rtx t1 = gen_reg_rtx (wider_mode); rtx cop0 = convert_modes (wider_mode, mode, op0, unsignedp); rtx cop1 = convert_modes (wider_mode, mode, op1, unsignedp); --- 2017,2024 ---- if (binoptab->handlers[(int) wider_mode].insn_code != CODE_FOR_nothing) { ! rtx t0 = gen_reg_rtx (wider_mode); ! rtx t1 = gen_reg_rtx (wider_mode); rtx cop0 = convert_modes (wider_mode, mode, op0, unsignedp); rtx cop1 = convert_modes (wider_mode, mode, op1, unsignedp); *************** expand_twoval_binop (binoptab, op0, op1, *** 1994,1999 **** --- 2039,2062 ---- return 0; } + /* Wrapper around expand_unop which takes an rtx code to specify + the operation to perform, not an optab pointer. All other + arguments are the same. */ + rtx + expand_simple_unop (mode, code, op0, target, unsignedp) + enum machine_mode mode; + enum rtx_code code; + rtx op0; + rtx target; + int unsignedp; + { + optab unop = code_to_optab [(int) code]; + if (unop == 0) + abort (); + + return expand_unop (mode, unop, op0, target, unsignedp); + } + /* Generate code to perform an operation specified by UNOPTAB on operand OP0, with result having machine-mode MODE. *************** expand_unop (mode, unoptab, op0, target, *** 2015,2021 **** { enum mode_class class; enum machine_mode wider_mode; ! register rtx temp; rtx last = get_last_insn (); rtx pat; --- 2078,2084 ---- { enum mode_class class; enum machine_mode wider_mode; ! rtx temp; rtx last = get_last_insn (); rtx pat; *************** expand_unop (mode, unoptab, op0, target, *** 2117,2123 **** && GET_MODE_SIZE (mode) > UNITS_PER_WORD && unoptab->handlers[(int) word_mode].insn_code != CODE_FOR_nothing) { ! unsigned int i; rtx insns; if (target == 0 || target == op0) --- 2180,2186 ---- && GET_MODE_SIZE (mode) > UNITS_PER_WORD && unoptab->handlers[(int) word_mode].insn_code != CODE_FOR_nothing) { ! int i; rtx insns; if (target == 0 || target == op0) *************** expand_unop (mode, unoptab, op0, target, *** 2132,2137 **** --- 2195,2201 ---- rtx x = expand_unop (word_mode, unoptab, operand_subword_force (op0, i, mode), target_piece, unsignedp); + if (target_piece != x) emit_move_insn (target_piece, x); } *************** expand_abs (mode, op0, target, result_un *** 2317,2327 **** /* If this machine has expensive jumps, we can do integer absolute value of X as (((signed) x >> (W-1)) ^ x) - ((signed) x >> (W-1)), ! where W is the width of MODE. But don't do this if the machine has ! conditional arithmetic since the branches will be converted into ! a conditional negation insn. */ - #ifndef HAVE_conditional_arithmetic if (GET_MODE_CLASS (mode) == MODE_INT && BRANCH_COST >= 2) { rtx extended = expand_shift (RSHIFT_EXPR, mode, op0, --- 2381,2388 ---- /* If this machine has expensive jumps, we can do integer absolute value of X as (((signed) x >> (W-1)) ^ x) - ((signed) x >> (W-1)), ! where W is the width of MODE. */ if (GET_MODE_CLASS (mode) == MODE_INT && BRANCH_COST >= 2) { rtx extended = expand_shift (RSHIFT_EXPR, mode, op0, *************** expand_abs (mode, op0, target, result_un *** 2337,2343 **** if (temp != 0) return temp; } - #endif /* If that does not win, use conditional jump and negate. */ --- 2398,2403 ---- *************** expand_abs (mode, op0, target, result_un *** 2366,2372 **** NULL_RTX, op1); else do_compare_rtx_and_jump (target, CONST0_RTX (mode), GE, 0, mode, ! NULL_RTX, 0, NULL_RTX, op1); op0 = expand_unop (mode, result_unsignedp ? neg_optab : negv_optab, target, target, 0); --- 2426,2432 ---- NULL_RTX, op1); else do_compare_rtx_and_jump (target, CONST0_RTX (mode), GE, 0, mode, ! NULL_RTX, NULL_RTX, op1); op0 = expand_unop (mode, result_unsignedp ? neg_optab : negv_optab, target, target, 0); *************** expand_complex_abs (mode, op0, target, u *** 2395,2401 **** { enum mode_class class = GET_MODE_CLASS (mode); enum machine_mode wider_mode; ! register rtx temp; rtx entry_last = get_last_insn (); rtx last; rtx pat; --- 2455,2461 ---- { enum mode_class class = GET_MODE_CLASS (mode); enum machine_mode wider_mode; ! rtx temp; rtx entry_last = get_last_insn (); rtx last; rtx pat; *************** emit_unop_insn (icode, target, op0, code *** 2596,2602 **** rtx op0; enum rtx_code code; { ! register rtx temp; enum machine_mode mode0 = insn_data[icode].operand[1].mode; rtx pat; --- 2656,2662 ---- rtx op0; enum rtx_code code; { ! rtx temp; enum machine_mode mode0 = insn_data[icode].operand[1].mode; rtx pat; *************** emit_no_conflict_block (insns, target, o *** 2679,2689 **** these from the list. */ for (insn = insns; insn; insn = next) { ! rtx set = 0; int i; next = NEXT_INSN (insn); if (GET_CODE (PATTERN (insn)) == SET || GET_CODE (PATTERN (insn)) == USE || GET_CODE (PATTERN (insn)) == CLOBBER) set = PATTERN (insn); --- 2739,2756 ---- these from the list. */ for (insn = insns; insn; insn = next) { ! rtx set = 0, note; int i; next = NEXT_INSN (insn); + /* Some ports (cris) create an libcall regions at their own. We must + avoid any potential nesting of LIBCALLs. */ + if ((note = find_reg_note (insn, REG_LIBCALL, NULL)) != NULL) + remove_note (insn, note); + if ((note = find_reg_note (insn, REG_RETVAL, NULL)) != NULL) + remove_note (insn, note); + if (GET_CODE (PATTERN (insn)) == SET || GET_CODE (PATTERN (insn)) == USE || GET_CODE (PATTERN (insn)) == CLOBBER) set = PATTERN (insn); *************** emit_libcall_block (insns, target, resul *** 2806,2828 **** into a MEM later. Protect the libcall block from this change. */ if (! REG_P (target) || REG_USERVAR_P (target)) target = gen_reg_rtx (GET_MODE (target)); ! /* look for any CALL_INSNs in this sequence, and attach a REG_EH_REGION reg note to indicate that this call cannot throw or execute a nonlocal goto (unless there is already a REG_EH_REGION note, in which case we update it). */ ! ! for (insn = insns; insn; insn = NEXT_INSN (insn)) ! if (GET_CODE (insn) == CALL_INSN) ! { ! rtx note = find_reg_note (insn, REG_EH_REGION, NULL_RTX); ! ! if (note != 0) ! XEXP (note, 0) = GEN_INT (-1); ! else ! REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_EH_REGION, GEN_INT (-1), ! REG_NOTES (insn)); ! } /* First emit all insns that set pseudos. Remove them from the list as we go. Avoid insns that set pseudos which were referenced in previous --- 2873,2908 ---- into a MEM later. Protect the libcall block from this change. */ if (! REG_P (target) || REG_USERVAR_P (target)) target = gen_reg_rtx (GET_MODE (target)); ! ! /* If we're using non-call exceptions, a libcall corresponding to an ! operation that may trap may also trap. */ ! if (flag_non_call_exceptions && may_trap_p (equiv)) ! { ! for (insn = insns; insn; insn = NEXT_INSN (insn)) ! if (GET_CODE (insn) == CALL_INSN) ! { ! rtx note = find_reg_note (insn, REG_EH_REGION, NULL_RTX); ! ! if (note != 0 && INTVAL (XEXP (note, 0)) <= 0) ! remove_note (insn, note); ! } ! } ! else /* look for any CALL_INSNs in this sequence, and attach a REG_EH_REGION reg note to indicate that this call cannot throw or execute a nonlocal goto (unless there is already a REG_EH_REGION note, in which case we update it). */ ! for (insn = insns; insn; insn = NEXT_INSN (insn)) ! if (GET_CODE (insn) == CALL_INSN) ! { ! rtx note = find_reg_note (insn, REG_EH_REGION, NULL_RTX); ! ! if (note != 0) ! XEXP (note, 0) = GEN_INT (-1); ! else ! REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_EH_REGION, GEN_INT (-1), ! REG_NOTES (insn)); ! } /* First emit all insns that set pseudos. Remove them from the list as we go. Avoid insns that set pseudos which were referenced in previous *************** emit_libcall_block (insns, target, resul *** 2833,2838 **** --- 2913,2926 ---- for (insn = insns; insn; insn = next) { rtx set = single_set (insn); + rtx note; + + /* Some ports (cris) create an libcall regions at their own. We must + avoid any potential nesting of LIBCALLs. */ + if ((note = find_reg_note (insn, REG_LIBCALL, NULL)) != NULL) + remove_note (insn, note); + if ((note = find_reg_note (insn, REG_RETVAL, NULL)) != NULL) + remove_note (insn, note); next = NEXT_INSN (insn); *************** emit_libcall_block (insns, target, resul *** 2891,2899 **** first = NEXT_INSN (prev); /* Encapsulate the block so it gets manipulated as a unit. */ ! REG_NOTES (first) = gen_rtx_INSN_LIST (REG_LIBCALL, last, ! REG_NOTES (first)); ! REG_NOTES (last) = gen_rtx_INSN_LIST (REG_RETVAL, first, REG_NOTES (last)); } /* Generate code to store zero in X. */ --- 2979,2991 ---- first = NEXT_INSN (prev); /* Encapsulate the block so it gets manipulated as a unit. */ ! if (!flag_non_call_exceptions || !may_trap_p (equiv)) ! { ! REG_NOTES (first) = gen_rtx_INSN_LIST (REG_LIBCALL, last, ! REG_NOTES (first)); ! REG_NOTES (last) = gen_rtx_INSN_LIST (REG_RETVAL, first, ! REG_NOTES (last)); ! } } /* Generate code to store zero in X. */ *************** can_compare_p (code, mode, purpose) *** 2965,2972 **** *PUNSIGNEDP nonzero says that the operands are unsigned; this matters if they need to be widened. ! If they have mode BLKmode, then SIZE specifies the size of both operands, ! and ALIGN specifies the known shared alignment of the operands. This function performs all the setup necessary so that the caller only has to emit a single comparison insn. This setup can involve doing a BLKmode --- 3057,3063 ---- *PUNSIGNEDP nonzero says that the operands are unsigned; this matters if they need to be widened. ! If they have mode BLKmode, then SIZE specifies the size of both operands. This function performs all the setup necessary so that the caller only has to emit a single comparison insn. This setup can involve doing a BLKmode *************** can_compare_p (code, mode, purpose) *** 2975,2996 **** The values which are passed in through pointers can be modified; the caller should perform the comparison on the modified values. */ ! void ! prepare_cmp_insn (px, py, pcomparison, size, pmode, punsignedp, align, ! purpose) rtx *px, *py; enum rtx_code *pcomparison; rtx size; enum machine_mode *pmode; int *punsignedp; - int align ATTRIBUTE_UNUSED; enum can_compare_purpose purpose; { enum machine_mode mode = *pmode; rtx x = *px, y = *py; int unsignedp = *punsignedp; enum mode_class class; - rtx opalign ATTRIBUTE_UNUSED = GEN_INT (align / BITS_PER_UNIT);; class = GET_MODE_CLASS (mode); --- 3066,3084 ---- The values which are passed in through pointers can be modified; the caller should perform the comparison on the modified values. */ ! static void ! prepare_cmp_insn (px, py, pcomparison, size, pmode, punsignedp, purpose) rtx *px, *py; enum rtx_code *pcomparison; rtx size; enum machine_mode *pmode; int *punsignedp; enum can_compare_purpose purpose; { enum machine_mode mode = *pmode; rtx x = *px, y = *py; int unsignedp = *punsignedp; enum mode_class class; class = GET_MODE_CLASS (mode); *************** prepare_cmp_insn (px, py, pcomparison, s *** 3033,3038 **** --- 3121,3128 ---- { rtx result; enum machine_mode result_mode; + rtx opalign ATTRIBUTE_UNUSED + = GEN_INT (MIN (MEM_ALIGN (x), MEM_ALIGN (y)) / BITS_PER_UNIT); emit_queue (); x = protect_from_queue (x, 0); *************** prepare_cmp_insn (px, py, pcomparison, s *** 3123,3130 **** if (unsignedp && ucmp_optab->handlers[(int) mode].libfunc) libfunc = ucmp_optab->handlers[(int) mode].libfunc; ! emit_library_call (libfunc, 1, ! word_mode, 2, x, mode, y, mode); /* Immediately move the result of the libcall into a pseudo register so reload doesn't clobber the value if it needs --- 3213,3220 ---- if (unsignedp && ucmp_optab->handlers[(int) mode].libfunc) libfunc = ucmp_optab->handlers[(int) mode].libfunc; ! emit_library_call (libfunc, LCT_CONST_MAKE_BLOCK, word_mode, 2, x, mode, ! y, mode); /* Immediately move the result of the libcall into a pseudo register so reload doesn't clobber the value if it needs *************** prepare_cmp_insn (px, py, pcomparison, s *** 3150,3156 **** /* Before emitting an insn with code ICODE, make sure that X, which is going to be used for operand OPNUM of the insn, is converted from mode MODE to ! WIDER_MODE (UNSIGNEDP determines whether it is a unsigned conversion), and that it is accepted by the operand predicate. Return the new value. */ rtx --- 3240,3246 ---- /* Before emitting an insn with code ICODE, make sure that X, which is going to be used for operand OPNUM of the insn, is converted from mode MODE to ! WIDER_MODE (UNSIGNEDP determines whether it is an unsigned conversion), and that it is accepted by the operand predicate. Return the new value. */ rtx *************** emit_cmp_and_jump_insn_1 (x, y, mode, co *** 3252,3259 **** need to be widened by emit_cmp_insn. UNSIGNEDP is also used to select the proper branch condition code. ! If X and Y have mode BLKmode, then SIZE specifies the size of both X and Y, ! and ALIGN specifies the known shared alignment of X and Y. MODE is the mode of the inputs (in case they are const_int). --- 3342,3348 ---- need to be widened by emit_cmp_insn. UNSIGNEDP is also used to select the proper branch condition code. ! If X and Y have mode BLKmode, then SIZE specifies the size of both X and Y. MODE is the mode of the inputs (in case they are const_int). *************** emit_cmp_and_jump_insn_1 (x, y, mode, co *** 3262,3292 **** unsigned variant based on UNSIGNEDP to select a proper jump instruction. */ void ! emit_cmp_and_jump_insns (x, y, comparison, size, mode, unsignedp, align, label) rtx x, y; enum rtx_code comparison; rtx size; enum machine_mode mode; int unsignedp; - unsigned int align; rtx label; { ! rtx op0; ! rtx op1; ! ! if ((CONSTANT_P (x) && ! CONSTANT_P (y)) ! || (GET_CODE (x) == CONST_INT && GET_CODE (y) != CONST_INT)) { ! /* Swap operands and condition to ensure canonical RTL. */ ! op0 = y; ! op1 = x; comparison = swap_condition (comparison); } - else - { - op0 = x; - op1 = y; - } #ifdef HAVE_cc0 /* If OP0 is still a constant, then both X and Y must be constants. Force --- 3351,3377 ---- unsigned variant based on UNSIGNEDP to select a proper jump instruction. */ void ! emit_cmp_and_jump_insns (x, y, comparison, size, mode, unsignedp, label) rtx x, y; enum rtx_code comparison; rtx size; enum machine_mode mode; int unsignedp; rtx label; { ! rtx op0 = x, op1 = y; ! ! /* Swap operands and condition to ensure canonical RTL. */ ! if (swap_commutative_operands_p (x, y)) { ! /* If we're not emitting a branch, this means some caller ! is out of sync. */ ! if (! label) ! abort (); ! ! op0 = y, op1 = x; comparison = swap_condition (comparison); } #ifdef HAVE_cc0 /* If OP0 is still a constant, then both X and Y must be constants. Force *************** emit_cmp_and_jump_insns (x, y, compariso *** 3299,3305 **** emit_queue (); if (unsignedp) comparison = unsigned_condition (comparison); ! prepare_cmp_insn (&op0, &op1, &comparison, size, &mode, &unsignedp, align, ccp_jump); emit_cmp_and_jump_insn_1 (op0, op1, mode, comparison, unsignedp, label); } --- 3384,3391 ---- emit_queue (); if (unsignedp) comparison = unsigned_condition (comparison); ! ! prepare_cmp_insn (&op0, &op1, &comparison, size, &mode, &unsignedp, ccp_jump); emit_cmp_and_jump_insn_1 (op0, op1, mode, comparison, unsignedp, label); } *************** emit_cmp_and_jump_insns (x, y, compariso *** 3307,3321 **** /* Like emit_cmp_and_jump_insns, but generate only the comparison. */ void ! emit_cmp_insn (x, y, comparison, size, mode, unsignedp, align) rtx x, y; enum rtx_code comparison; rtx size; enum machine_mode mode; int unsignedp; - unsigned int align; { ! emit_cmp_and_jump_insns (x, y, comparison, size, mode, unsignedp, align, 0); } /* Emit a library call comparison between floating point X and Y. --- 3393,3406 ---- /* Like emit_cmp_and_jump_insns, but generate only the comparison. */ void ! emit_cmp_insn (x, y, comparison, size, mode, unsignedp) rtx x, y; enum rtx_code comparison; rtx size; enum machine_mode mode; int unsignedp; { ! emit_cmp_and_jump_insns (x, y, comparison, size, mode, unsignedp, 0); } /* Emit a library call comparison between floating point X and Y. *************** emit_conditional_move (target, code, op0 *** 3593,3604 **** { rtx tem, subtarget, comparison, insn; enum insn_code icode; /* If one operand is constant, make it the second one. Only do this if the other operand is not constant as well. */ ! if ((CONSTANT_P (op0) && ! CONSTANT_P (op1)) ! || (GET_CODE (op0) == CONST_INT && GET_CODE (op1) != CONST_INT)) { tem = op0; op0 = op1; --- 3678,3689 ---- { rtx tem, subtarget, comparison, insn; enum insn_code icode; + enum rtx_code reversed; /* If one operand is constant, make it the second one. Only do this if the other operand is not constant as well. */ ! if (swap_commutative_operands_p (op0, op1)) { tem = op0; op0 = op1; *************** emit_conditional_move (target, code, op0 *** 3617,3631 **** if (cmode == VOIDmode) cmode = GET_MODE (op0); ! if (((CONSTANT_P (op2) && ! CONSTANT_P (op3)) ! || (GET_CODE (op2) == CONST_INT && GET_CODE (op3) != CONST_INT)) ! && (GET_MODE_CLASS (GET_MODE (op1)) != MODE_FLOAT ! || TARGET_FLOAT_FORMAT != IEEE_FLOAT_FORMAT || flag_fast_math)) { tem = op2; op2 = op3; op3 = tem; ! code = reverse_condition (code); } if (mode == VOIDmode) --- 3702,3715 ---- if (cmode == VOIDmode) cmode = GET_MODE (op0); ! if (swap_commutative_operands_p (op2, op3) ! && ((reversed = reversed_comparison_code_parts (code, op0, op1, NULL)) ! != UNKNOWN)) { tem = op2; op2 = op3; op3 = tem; ! code = reversed; } if (mode == VOIDmode) *************** emit_conditional_move (target, code, op0 *** 3672,3678 **** and then the conditional move. */ comparison ! = compare_from_rtx (op0, op1, code, unsignedp, cmode, NULL_RTX, 0); /* ??? Watch for const0_rtx (nop) and const_true_rtx (unconditional)? */ /* We can get const0_rtx or const_true_rtx in some circumstances. Just --- 3756,3762 ---- and then the conditional move. */ comparison ! = compare_from_rtx (op0, op1, code, unsignedp, cmode, NULL_RTX); /* ??? Watch for const0_rtx (nop) and const_true_rtx (unconditional)? */ /* We can get const0_rtx or const_true_rtx in some circumstances. Just *************** can_conditionally_move_p (mode) *** 3715,3721 **** #endif /* HAVE_conditional_move */ ! /* These three functions generate an insn body and return it rather than emitting the insn. They do not protect from queued increments, --- 3799,3805 ---- #endif /* HAVE_conditional_move */ ! /* These functions generate an insn body and return it rather than emitting the insn. They do not protect from queued increments, *************** gen_add2_insn (x, y) *** 3741,3751 **** return (GEN_FCN (icode) (x, x, y)); } int ! have_add2_insn (mode) ! enum machine_mode mode; { ! return add_optab->handlers[(int) mode].insn_code != CODE_FOR_nothing; } /* Generate and return an insn body to subtract Y from X. */ --- 3825,3873 ---- return (GEN_FCN (icode) (x, x, y)); } + /* Generate and return an insn body to add r1 and c, + storing the result in r0. */ + rtx + gen_add3_insn (r0, r1, c) + rtx r0, r1, c; + { + int icode = (int) add_optab->handlers[(int) GET_MODE (r0)].insn_code; + + if (icode == CODE_FOR_nothing + || ! ((*insn_data[icode].operand[0].predicate) + (r0, insn_data[icode].operand[0].mode)) + || ! ((*insn_data[icode].operand[1].predicate) + (r1, insn_data[icode].operand[1].mode)) + || ! ((*insn_data[icode].operand[2].predicate) + (c, insn_data[icode].operand[2].mode))) + return NULL_RTX; + + return (GEN_FCN (icode) (r0, r1, c)); + } + int ! have_add2_insn (x, y) ! rtx x, y; { ! int icode; ! ! if (GET_MODE (x) == VOIDmode) ! abort (); ! ! icode = (int) add_optab->handlers[(int) GET_MODE (x)].insn_code; ! ! if (icode == CODE_FOR_nothing) ! return 0; ! ! if (! ((*insn_data[icode].operand[0].predicate) ! (x, insn_data[icode].operand[0].mode)) ! || ! ((*insn_data[icode].operand[1].predicate) ! (x, insn_data[icode].operand[1].mode)) ! || ! ((*insn_data[icode].operand[2].predicate) ! (y, insn_data[icode].operand[2].mode))) ! return 0; ! ! return 1; } /* Generate and return an insn body to subtract Y from X. */ *************** gen_sub2_insn (x, y) *** 3767,3777 **** return (GEN_FCN (icode) (x, x, y)); } int ! have_sub2_insn (mode) ! enum machine_mode mode; { ! return sub_optab->handlers[(int) mode].insn_code != CODE_FOR_nothing; } /* Generate the body of an instruction to copy Y into X. --- 3889,3937 ---- return (GEN_FCN (icode) (x, x, y)); } + /* Generate and return an insn body to subtract r1 and c, + storing the result in r0. */ + rtx + gen_sub3_insn (r0, r1, c) + rtx r0, r1, c; + { + int icode = (int) sub_optab->handlers[(int) GET_MODE (r0)].insn_code; + + if (icode == CODE_FOR_nothing + || ! ((*insn_data[icode].operand[0].predicate) + (r0, insn_data[icode].operand[0].mode)) + || ! ((*insn_data[icode].operand[1].predicate) + (r1, insn_data[icode].operand[1].mode)) + || ! ((*insn_data[icode].operand[2].predicate) + (c, insn_data[icode].operand[2].mode))) + return NULL_RTX; + + return (GEN_FCN (icode) (r0, r1, c)); + } + int ! have_sub2_insn (x, y) ! rtx x, y; { ! int icode; ! ! if (GET_MODE (x) == VOIDmode) ! abort (); ! ! icode = (int) sub_optab->handlers[(int) GET_MODE (x)].insn_code; ! ! if (icode == CODE_FOR_nothing) ! return 0; ! ! if (! ((*insn_data[icode].operand[0].predicate) ! (x, insn_data[icode].operand[0].mode)) ! || ! ((*insn_data[icode].operand[1].predicate) ! (x, insn_data[icode].operand[1].mode)) ! || ! ((*insn_data[icode].operand[2].predicate) ! (y, insn_data[icode].operand[2].mode))) ! return 0; ! ! return 1; } /* Generate the body of an instruction to copy Y into X. *************** rtx *** 3781,3787 **** gen_move_insn (x, y) rtx x, y; { ! register enum machine_mode mode = GET_MODE (x); enum insn_code insn_code; rtx seq; --- 3941,3947 ---- gen_move_insn (x, y) rtx x, y; { ! enum machine_mode mode = GET_MODE (x); enum insn_code insn_code; rtx seq; *************** gen_move_insn (x, y) *** 3823,3838 **** x = gen_lowpart_common (tmode, x1); if (x == 0 && GET_CODE (x1) == MEM) { ! x = gen_rtx_MEM (tmode, XEXP (x1, 0)); ! MEM_COPY_ATTRIBUTES (x, x1); copy_replacements (x1, x); } y = gen_lowpart_common (tmode, y1); if (y == 0 && GET_CODE (y1) == MEM) { ! y = gen_rtx_MEM (tmode, XEXP (y1, 0)); ! MEM_COPY_ATTRIBUTES (y, y1); copy_replacements (y1, y); } } --- 3983,3996 ---- x = gen_lowpart_common (tmode, x1); if (x == 0 && GET_CODE (x1) == MEM) { ! x = adjust_address_nv (x1, tmode, 0); copy_replacements (x1, x); } y = gen_lowpart_common (tmode, y1); if (y == 0 && GET_CODE (y1) == MEM) { ! y = adjust_address_nv (y1, tmode, 0); copy_replacements (y1, y); } } *************** can_extend_p (to_mode, from_mode, unsign *** 3862,3868 **** enum machine_mode to_mode, from_mode; int unsignedp; { ! return extendtab[(int) to_mode][(int) from_mode][unsignedp != 0]; } /* Generate the body of an insn to extend Y (with mode MFROM) --- 4020,4031 ---- enum machine_mode to_mode, from_mode; int unsignedp; { ! #ifdef HAVE_ptr_extend ! if (unsignedp < 0) ! return CODE_FOR_ptr_extend; ! else ! #endif ! return extendtab[(int) to_mode][(int) from_mode][unsignedp != 0]; } /* Generate the body of an insn to extend Y (with mode MFROM) *************** expand_float (to, from, unsignedp) *** 3925,3931 **** int unsignedp; { enum insn_code icode; ! register rtx target = to; enum machine_mode fmode, imode; /* Crash now, because we won't be able to decide which mode to use. */ --- 4088,4094 ---- int unsignedp; { enum insn_code icode; ! rtx target = to; enum machine_mode fmode, imode; /* Crash now, because we won't be able to decide which mode to use. */ *************** expand_float (to, from, unsignedp) *** 4024,4030 **** /* Test whether the sign bit is set. */ emit_cmp_and_jump_insns (from, const0_rtx, LT, NULL_RTX, imode, ! 0, 0, neglabel); /* The sign bit is not set. Convert as signed. */ expand_float (target, from, 0); --- 4187,4193 ---- /* Test whether the sign bit is set. */ emit_cmp_and_jump_insns (from, const0_rtx, LT, NULL_RTX, imode, ! 0, neglabel); /* The sign bit is not set. Convert as signed. */ expand_float (target, from, 0); *************** expand_float (to, from, unsignedp) *** 4072,4078 **** do_pending_stack_adjust (); emit_cmp_and_jump_insns (from, const0_rtx, GE, NULL_RTX, GET_MODE (from), ! 0, 0, label); /* On SCO 3.2.1, ldexp rejects values outside [0.5, 1). Rather than setting up a dconst_dot_5, let's hope SCO --- 4235,4241 ---- do_pending_stack_adjust (); emit_cmp_and_jump_insns (from, const0_rtx, GE, NULL_RTX, GET_MODE (from), ! 0, label); /* On SCO 3.2.1, ldexp rejects values outside [0.5, 1). Rather than setting up a dconst_dot_5, let's hope SCO *************** ftruncify (x) *** 4192,4202 **** void expand_fix (to, from, unsignedp) ! register rtx to, from; int unsignedp; { enum insn_code icode; ! register rtx target = to; enum machine_mode fmode, imode; int must_trunc = 0; rtx libfcn = 0; --- 4355,4365 ---- void expand_fix (to, from, unsignedp) ! rtx to, from; int unsignedp; { enum insn_code icode; ! rtx target = to; enum machine_mode fmode, imode; int must_trunc = 0; rtx libfcn = 0; *************** expand_fix (to, from, unsignedp) *** 4206,4215 **** this conversion. If the integer mode is wider than the mode of TO, we can do the conversion either signed or unsigned. */ ! for (imode = GET_MODE (to); imode != VOIDmode; ! imode = GET_MODE_WIDER_MODE (imode)) ! for (fmode = GET_MODE (from); fmode != VOIDmode; ! fmode = GET_MODE_WIDER_MODE (fmode)) { int doing_unsigned = unsignedp; --- 4369,4378 ---- this conversion. If the integer mode is wider than the mode of TO, we can do the conversion either signed or unsigned. */ ! for (fmode = GET_MODE (from); fmode != VOIDmode; ! fmode = GET_MODE_WIDER_MODE (fmode)) ! for (imode = GET_MODE (to); imode != VOIDmode; ! imode = GET_MODE_WIDER_MODE (imode)) { int doing_unsigned = unsignedp; *************** expand_fix (to, from, unsignedp) *** 4280,4286 **** /* See if we need to do the subtraction. */ do_pending_stack_adjust (); emit_cmp_and_jump_insns (from, limit, GE, NULL_RTX, GET_MODE (from), ! 0, 0, lab1); /* If not, do the signed "fix" and branch around fixup code. */ expand_fix (to, from, 0); --- 4443,4449 ---- /* See if we need to do the subtraction. */ do_pending_stack_adjust (); emit_cmp_and_jump_insns (from, limit, GE, NULL_RTX, GET_MODE (from), ! 0, lab1); /* If not, do the signed "fix" and branch around fixup code. */ expand_fix (to, from, 0); *************** expand_fix (to, from, unsignedp) *** 4295,4301 **** NULL_RTX, 0, OPTAB_LIB_WIDEN); expand_fix (to, target, 0); target = expand_binop (GET_MODE (to), xor_optab, to, ! GEN_INT ((HOST_WIDE_INT) 1 << (bitsize - 1)), to, 1, OPTAB_LIB_WIDEN); if (target != to) --- 4458,4466 ---- NULL_RTX, 0, OPTAB_LIB_WIDEN); expand_fix (to, target, 0); target = expand_binop (GET_MODE (to), xor_optab, to, ! GEN_INT (trunc_int_for_mode ! ((HOST_WIDE_INT) 1 << (bitsize - 1), ! GET_MODE (to))), to, 1, OPTAB_LIB_WIDEN); if (target != to) *************** expand_fix (to, from, unsignedp) *** 4409,4430 **** } } ! static optab ! init_optab (code) enum rtx_code code; { int i; optab op = (optab) xmalloc (sizeof (struct optab)); - op->code = code; for (i = 0; i < NUM_MACHINE_MODES; i++) { op->handlers[i].insn_code = CODE_FOR_nothing; op->handlers[i].libfunc = 0; } ! if (code != UNKNOWN) ! code_to_optab[(int) code] = op; return op; } --- 4574,4626 ---- } } ! /* Report whether we have an instruction to perform the operation ! specified by CODE on operands of mode MODE. */ ! int ! have_insn_for (code, mode) enum rtx_code code; + enum machine_mode mode; + { + return (code_to_optab[(int) code] != 0 + && (code_to_optab[(int) code]->handlers[(int) mode].insn_code + != CODE_FOR_nothing)); + } + + /* Create a blank optab. */ + static optab + new_optab () { int i; optab op = (optab) xmalloc (sizeof (struct optab)); for (i = 0; i < NUM_MACHINE_MODES; i++) { op->handlers[i].insn_code = CODE_FOR_nothing; op->handlers[i].libfunc = 0; } ! return op; ! } ! ! /* Same, but fill in its code as CODE, and write it into the ! code_to_optab table. */ ! static inline optab ! init_optab (code) ! enum rtx_code code; ! { ! optab op = new_optab (); ! op->code = code; ! code_to_optab[(int) code] = op; ! return op; ! } + /* Same, but fill in its code as CODE, and do _not_ write it into + the code_to_optab table. */ + static inline optab + init_optabv (code) + enum rtx_code code; + { + optab op = new_optab (); + op->code = code; return op; } *************** init_optab (code) *** 4447,4469 **** static void init_libfuncs (optable, first_mode, last_mode, opname, suffix) ! register optab optable; ! register int first_mode; ! register int last_mode; ! register const char *opname; ! register int suffix; { ! register int mode; ! register unsigned opname_len = strlen (opname); for (mode = first_mode; (int) mode <= (int) last_mode; mode = (enum machine_mode) ((int) mode + 1)) { ! register const char *mname = GET_MODE_NAME(mode); ! register unsigned mname_len = strlen (mname); ! register char *libfunc_name = alloca (2 + opname_len + mname_len + 1 + 1); ! register char *p; ! register const char *q; p = libfunc_name; *p++ = '_'; --- 4643,4665 ---- static void init_libfuncs (optable, first_mode, last_mode, opname, suffix) ! optab optable; ! int first_mode; ! int last_mode; ! const char *opname; ! int suffix; { ! int mode; ! unsigned opname_len = strlen (opname); for (mode = first_mode; (int) mode <= (int) last_mode; mode = (enum machine_mode) ((int) mode + 1)) { ! const char *mname = GET_MODE_NAME(mode); ! unsigned mname_len = strlen (mname); ! char *libfunc_name = alloca (2 + opname_len + mname_len + 1 + 1); ! char *p; ! const char *q; p = libfunc_name; *p++ = '_'; *************** init_libfuncs (optable, first_mode, last *** 4488,4496 **** static void init_integral_libfuncs (optable, opname, suffix) ! register optab optable; ! register const char *opname; ! register int suffix; { init_libfuncs (optable, SImode, TImode, opname, suffix); } --- 4684,4692 ---- static void init_integral_libfuncs (optable, opname, suffix) ! optab optable; ! const char *opname; ! int suffix; { init_libfuncs (optable, SImode, TImode, opname, suffix); } *************** init_integral_libfuncs (optable, opname, *** 4502,4521 **** static void init_floating_libfuncs (optable, opname, suffix) ! register optab optable; ! register const char *opname; ! register int suffix; { init_libfuncs (optable, SFmode, TFmode, opname, suffix); } rtx init_one_libfunc (name) ! register const char *name; { ! name = ggc_strdup (name); ! return gen_rtx_SYMBOL_REF (Pmode, name); } /* Mark ARG (which is really an OPTAB *) for GC. */ --- 4698,4725 ---- static void init_floating_libfuncs (optable, opname, suffix) ! optab optable; ! const char *opname; ! int suffix; { init_libfuncs (optable, SFmode, TFmode, opname, suffix); } rtx init_one_libfunc (name) ! const char *name; { ! /* Create a FUNCTION_DECL that can be passed to ENCODE_SECTION_INFO. */ ! /* ??? We don't have any type information except for this is ! a function. Pretend this is "int foo()". */ ! tree decl = build_decl (FUNCTION_DECL, get_identifier (name), ! build_function_type (integer_type_node, NULL_TREE)); ! DECL_ARTIFICIAL (decl) = 1; ! DECL_EXTERNAL (decl) = 1; ! TREE_PUBLIC (decl) = 1; ! /* Return the symbol_ref from the mem rtx. */ ! return XEXP (DECL_RTL (decl), 0); } /* Mark ARG (which is really an OPTAB *) for GC. */ *************** init_optabs () *** 4570,4592 **** #endif add_optab = init_optab (PLUS); ! addv_optab = init_optab (PLUS); sub_optab = init_optab (MINUS); ! subv_optab = init_optab (MINUS); smul_optab = init_optab (MULT); ! smulv_optab = init_optab (MULT); smul_highpart_optab = init_optab (UNKNOWN); umul_highpart_optab = init_optab (UNKNOWN); smul_widen_optab = init_optab (UNKNOWN); umul_widen_optab = init_optab (UNKNOWN); sdiv_optab = init_optab (DIV); ! sdivv_optab = init_optab (DIV); sdivmod_optab = init_optab (UNKNOWN); udiv_optab = init_optab (UDIV); udivmod_optab = init_optab (UNKNOWN); smod_optab = init_optab (MOD); umod_optab = init_optab (UMOD); - flodiv_optab = init_optab (DIV); ftrunc_optab = init_optab (UNKNOWN); and_optab = init_optab (AND); ior_optab = init_optab (IOR); --- 4774,4795 ---- #endif add_optab = init_optab (PLUS); ! addv_optab = init_optabv (PLUS); sub_optab = init_optab (MINUS); ! subv_optab = init_optabv (MINUS); smul_optab = init_optab (MULT); ! smulv_optab = init_optabv (MULT); smul_highpart_optab = init_optab (UNKNOWN); umul_highpart_optab = init_optab (UNKNOWN); smul_widen_optab = init_optab (UNKNOWN); umul_widen_optab = init_optab (UNKNOWN); sdiv_optab = init_optab (DIV); ! sdivv_optab = init_optabv (DIV); sdivmod_optab = init_optab (UNKNOWN); udiv_optab = init_optab (UDIV); udivmod_optab = init_optab (UNKNOWN); smod_optab = init_optab (MOD); umod_optab = init_optab (UMOD); ftrunc_optab = init_optab (UNKNOWN); and_optab = init_optab (AND); ior_optab = init_optab (IOR); *************** init_optabs () *** 4600,4614 **** smax_optab = init_optab (SMAX); umin_optab = init_optab (UMIN); umax_optab = init_optab (UMAX); ! mov_optab = init_optab (UNKNOWN); ! movstrict_optab = init_optab (UNKNOWN); ! cmp_optab = init_optab (UNKNOWN); ucmp_optab = init_optab (UNKNOWN); tst_optab = init_optab (UNKNOWN); neg_optab = init_optab (NEG); ! negv_optab = init_optab (NEG); abs_optab = init_optab (ABS); ! absv_optab = init_optab (ABS); one_cmpl_optab = init_optab (NOT); ffs_optab = init_optab (FFS); sqrt_optab = init_optab (SQRT); --- 4803,4821 ---- smax_optab = init_optab (SMAX); umin_optab = init_optab (UMIN); umax_optab = init_optab (UMAX); ! ! /* These three have codes assigned exclusively for the sake of ! have_insn_for. */ ! mov_optab = init_optab (SET); ! movstrict_optab = init_optab (STRICT_LOW_PART); ! cmp_optab = init_optab (COMPARE); ! ucmp_optab = init_optab (UNKNOWN); tst_optab = init_optab (UNKNOWN); neg_optab = init_optab (NEG); ! negv_optab = init_optabv (NEG); abs_optab = init_optab (ABS); ! absv_optab = init_optabv (ABS); one_cmpl_optab = init_optab (NOT); ffs_optab = init_optab (FFS); sqrt_optab = init_optab (SQRT); *************** init_optabs () *** 4618,4623 **** --- 4825,4831 ---- cbranch_optab = init_optab (UNKNOWN); cmov_optab = init_optab (UNKNOWN); cstore_optab = init_optab (UNKNOWN); + push_optab = init_optab (UNKNOWN); for (i = 0; i < NUM_MACHINE_MODES; i++) { *************** init_optabs () *** 4654,4666 **** init_integral_libfuncs (smulv_optab, "mulv", '3'); init_floating_libfuncs (smulv_optab, "mul", '3'); init_integral_libfuncs (sdiv_optab, "div", '3'); init_integral_libfuncs (sdivv_optab, "divv", '3'); init_integral_libfuncs (udiv_optab, "udiv", '3'); init_integral_libfuncs (sdivmod_optab, "divmod", '4'); init_integral_libfuncs (udivmod_optab, "udivmod", '4'); init_integral_libfuncs (smod_optab, "mod", '3'); init_integral_libfuncs (umod_optab, "umod", '3'); - init_floating_libfuncs (flodiv_optab, "div", '3'); init_floating_libfuncs (ftrunc_optab, "ftrunc", '2'); init_integral_libfuncs (and_optab, "and", '3'); init_integral_libfuncs (ior_optab, "ior", '3'); --- 4862,4874 ---- init_integral_libfuncs (smulv_optab, "mulv", '3'); init_floating_libfuncs (smulv_optab, "mul", '3'); init_integral_libfuncs (sdiv_optab, "div", '3'); + init_floating_libfuncs (sdiv_optab, "div", '3'); init_integral_libfuncs (sdivv_optab, "divv", '3'); init_integral_libfuncs (udiv_optab, "udiv", '3'); init_integral_libfuncs (sdivmod_optab, "divmod", '4'); init_integral_libfuncs (udivmod_optab, "udivmod", '4'); init_integral_libfuncs (smod_optab, "mod", '3'); init_integral_libfuncs (umod_optab, "umod", '3'); init_floating_libfuncs (ftrunc_optab, "ftrunc", '2'); init_integral_libfuncs (and_optab, "and", '3'); init_integral_libfuncs (ior_optab, "ior", '3'); *************** init_optabs () *** 4752,4757 **** --- 4960,4966 ---- truncxfdf2_libfunc = init_one_libfunc ("__truncxfdf2"); trunctfdf2_libfunc = init_one_libfunc ("__trunctfdf2"); + abort_libfunc = init_one_libfunc ("abort"); memcpy_libfunc = init_one_libfunc ("memcpy"); memmove_libfunc = init_one_libfunc ("memmove"); bcopy_libfunc = init_one_libfunc ("bcopy"); *************** init_optabs () *** 4862,4874 **** fixunstfdi_libfunc = init_one_libfunc ("__fixunstfdi"); fixunstfti_libfunc = init_one_libfunc ("__fixunstfti"); - /* For check-memory-usage. */ - chkr_check_addr_libfunc = init_one_libfunc ("chkr_check_addr"); - chkr_set_right_libfunc = init_one_libfunc ("chkr_set_right"); - chkr_copy_bitmap_libfunc = init_one_libfunc ("chkr_copy_bitmap"); - chkr_check_exec_libfunc = init_one_libfunc ("chkr_check_exec"); - chkr_check_str_libfunc = init_one_libfunc ("chkr_check_str"); - /* For function entry/exit instrumentation. */ profile_function_entry_libfunc = init_one_libfunc ("__cyg_profile_func_enter"); --- 5071,5076 ---- *************** init_optabs () *** 4889,4911 **** ggc_add_rtx_root (libfunc_table, LTI_MAX); } - #ifdef BROKEN_LDEXP - - /* SCO 3.2 apparently has a broken ldexp. */ - - double - ldexp(x,n) - double x; - int n; - { - if (n > 0) - while (n--) - x *= 2; - - return x; - } - #endif /* BROKEN_LDEXP */ - #ifdef HAVE_conditional_trap /* The insn generating function can not take an rtx_code argument. TRAP_RTX is used as an rtx argument. Its code is replaced with --- 5091,5096 ---- diff -Nrc3pad gcc-3.0.4/gcc/optabs.h gcc-3.1/gcc/optabs.h *** gcc-3.0.4/gcc/optabs.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/optabs.h Thu Nov 15 23:44:57 2001 *************** *** 0 **** --- 1,333 ---- + /* Definitions for code generation pass of GNU compiler. + Copyright (C) 2001 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GCC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + #ifndef GCC_OPTABS_H + #define GCC_OPTABS_H + + #include "insn-codes.h" + + /* Optabs are tables saying how to generate insn bodies + for various machine modes and numbers of operands. + Each optab applies to one operation. + For example, add_optab applies to addition. + + The insn_code slot is the enum insn_code that says how to + generate an insn for this operation on a particular machine mode. + It is CODE_FOR_nothing if there is no such insn on the target machine. + + The `lib_call' slot is the name of the library function that + can be used to perform the operation. + + A few optabs, such as move_optab and cmp_optab, are used + by special code. */ + + typedef struct optab + { + enum rtx_code code; + struct { + enum insn_code insn_code; + rtx libfunc; + } handlers [NUM_MACHINE_MODES]; + } * optab; + + /* Given an enum insn_code, access the function to construct + the body of that kind of insn. */ + #define GEN_FCN(CODE) (*insn_data[(int) (CODE)].genfun) + + /* Enumeration of valid indexes into optab_table. */ + enum optab_index + { + OTI_add, + OTI_addv, + OTI_sub, + OTI_subv, + + /* Signed and fp multiply */ + OTI_smul, + OTI_smulv, + /* Signed multiply, return high word */ + OTI_smul_highpart, + OTI_umul_highpart, + /* Signed multiply with result one machine mode wider than args */ + OTI_smul_widen, + OTI_umul_widen, + + /* Signed divide */ + OTI_sdiv, + OTI_sdivv, + /* Signed divide-and-remainder in one */ + OTI_sdivmod, + OTI_udiv, + OTI_udivmod, + /* Signed remainder */ + OTI_smod, + OTI_umod, + /* Convert float to integer in float fmt */ + OTI_ftrunc, + + /* Logical and */ + OTI_and, + /* Logical or */ + OTI_ior, + /* Logical xor */ + OTI_xor, + + /* Arithmetic shift left */ + OTI_ashl, + /* Logical shift right */ + OTI_lshr, + /* Arithmetic shift right */ + OTI_ashr, + /* Rotate left */ + OTI_rotl, + /* Rotate right */ + OTI_rotr, + /* Signed and floating-point minimum value */ + OTI_smin, + /* Signed and floating-point maximum value */ + OTI_smax, + /* Unsigned minimum value */ + OTI_umin, + /* Unsigned maximum value */ + OTI_umax, + + /* Move instruction. */ + OTI_mov, + /* Move, preserving high part of register. */ + OTI_movstrict, + + /* Unary operations */ + /* Negation */ + OTI_neg, + OTI_negv, + /* Abs value */ + OTI_abs, + OTI_absv, + /* Bitwise not */ + OTI_one_cmpl, + /* Find first bit set */ + OTI_ffs, + /* Square root */ + OTI_sqrt, + /* Sine */ + OTI_sin, + /* Cosine */ + OTI_cos, + + /* Compare insn; two operands. */ + OTI_cmp, + /* Used only for libcalls for unsigned comparisons. */ + OTI_ucmp, + /* tst insn; compare one operand against 0 */ + OTI_tst, + + /* String length */ + OTI_strlen, + + /* Combined compare & jump/store flags/move operations. */ + OTI_cbranch, + OTI_cmov, + OTI_cstore, + + /* Push instruction. */ + OTI_push, + + OTI_MAX + }; + + extern optab optab_table[OTI_MAX]; + + #define add_optab (optab_table[OTI_add]) + #define sub_optab (optab_table[OTI_sub]) + #define smul_optab (optab_table[OTI_smul]) + #define addv_optab (optab_table[OTI_addv]) + #define subv_optab (optab_table[OTI_subv]) + #define smul_highpart_optab (optab_table[OTI_smul_highpart]) + #define umul_highpart_optab (optab_table[OTI_umul_highpart]) + #define smul_widen_optab (optab_table[OTI_smul_widen]) + #define umul_widen_optab (optab_table[OTI_umul_widen]) + #define sdiv_optab (optab_table[OTI_sdiv]) + #define smulv_optab (optab_table[OTI_smulv]) + #define sdivv_optab (optab_table[OTI_sdivv]) + #define sdivmod_optab (optab_table[OTI_sdivmod]) + #define udiv_optab (optab_table[OTI_udiv]) + #define udivmod_optab (optab_table[OTI_udivmod]) + #define smod_optab (optab_table[OTI_smod]) + #define umod_optab (optab_table[OTI_umod]) + #define ftrunc_optab (optab_table[OTI_ftrunc]) + #define and_optab (optab_table[OTI_and]) + #define ior_optab (optab_table[OTI_ior]) + #define xor_optab (optab_table[OTI_xor]) + #define ashl_optab (optab_table[OTI_ashl]) + #define lshr_optab (optab_table[OTI_lshr]) + #define ashr_optab (optab_table[OTI_ashr]) + #define rotl_optab (optab_table[OTI_rotl]) + #define rotr_optab (optab_table[OTI_rotr]) + #define smin_optab (optab_table[OTI_smin]) + #define smax_optab (optab_table[OTI_smax]) + #define umin_optab (optab_table[OTI_umin]) + #define umax_optab (optab_table[OTI_umax]) + + #define mov_optab (optab_table[OTI_mov]) + #define movstrict_optab (optab_table[OTI_movstrict]) + + #define neg_optab (optab_table[OTI_neg]) + #define negv_optab (optab_table[OTI_negv]) + #define abs_optab (optab_table[OTI_abs]) + #define absv_optab (optab_table[OTI_absv]) + #define one_cmpl_optab (optab_table[OTI_one_cmpl]) + #define ffs_optab (optab_table[OTI_ffs]) + #define sqrt_optab (optab_table[OTI_sqrt]) + #define sin_optab (optab_table[OTI_sin]) + #define cos_optab (optab_table[OTI_cos]) + + #define cmp_optab (optab_table[OTI_cmp]) + #define ucmp_optab (optab_table[OTI_ucmp]) + #define tst_optab (optab_table[OTI_tst]) + + #define strlen_optab (optab_table[OTI_strlen]) + + #define cbranch_optab (optab_table[OTI_cbranch]) + #define cmov_optab (optab_table[OTI_cmov]) + #define cstore_optab (optab_table[OTI_cstore]) + #define push_optab (optab_table[OTI_push]) + + /* Tables of patterns for extending one integer mode to another. */ + extern enum insn_code extendtab[MAX_MACHINE_MODE][MAX_MACHINE_MODE][2]; + + /* Tables of patterns for converting between fixed and floating point. */ + extern enum insn_code fixtab[NUM_MACHINE_MODES][NUM_MACHINE_MODES][2]; + extern enum insn_code fixtrunctab[NUM_MACHINE_MODES][NUM_MACHINE_MODES][2]; + extern enum insn_code floattab[NUM_MACHINE_MODES][NUM_MACHINE_MODES][2]; + + /* These arrays record the insn_code of insns that may be needed to + perform input and output reloads of special objects. They provide a + place to pass a scratch register. */ + extern enum insn_code reload_in_optab[NUM_MACHINE_MODES]; + extern enum insn_code reload_out_optab[NUM_MACHINE_MODES]; + + /* Contains the optab used for each rtx code. */ + extern optab code_to_optab[NUM_RTX_CODE + 1]; + + + typedef rtx (*rtxfun) PARAMS ((rtx)); + + /* Indexed by the rtx-code for a conditional (eg. EQ, LT,...) + gives the gen_function to make a branch to test that condition. */ + + extern rtxfun bcc_gen_fctn[NUM_RTX_CODE]; + + /* Indexed by the rtx-code for a conditional (eg. EQ, LT,...) + gives the insn code to make a store-condition insn + to test that condition. */ + + extern enum insn_code setcc_gen_code[NUM_RTX_CODE]; + + #ifdef HAVE_conditional_move + /* Indexed by the machine mode, gives the insn code to make a conditional + move insn. */ + + extern enum insn_code movcc_gen_code[NUM_MACHINE_MODES]; + #endif + + /* This array records the insn_code of insns to perform block moves. */ + extern enum insn_code movstr_optab[NUM_MACHINE_MODES]; + + /* This array records the insn_code of insns to perform block clears. */ + extern enum insn_code clrstr_optab[NUM_MACHINE_MODES]; + + /* Define functions given in optabs.c. */ + + /* Expand a binary operation given optab and rtx operands. */ + extern rtx expand_binop PARAMS ((enum machine_mode, optab, rtx, rtx, rtx, + int, enum optab_methods)); + + /* Expand a binary operation with both signed and unsigned forms. */ + extern rtx sign_expand_binop PARAMS ((enum machine_mode, optab, optab, rtx, + rtx, rtx, int, enum optab_methods)); + + /* Generate code to perform an operation on two operands with two results. */ + extern int expand_twoval_binop PARAMS ((optab, rtx, rtx, rtx, rtx, int)); + + /* Expand a unary arithmetic operation given optab rtx operand. */ + extern rtx expand_unop PARAMS ((enum machine_mode, optab, rtx, rtx, int)); + + /* Expand the absolute value operation. */ + extern rtx expand_abs PARAMS ((enum machine_mode, rtx, rtx, int, int)); + + /* Expand the complex absolute value operation. */ + extern rtx expand_complex_abs PARAMS ((enum machine_mode, rtx, rtx, int)); + + /* Generate an instruction with a given INSN_CODE with an output and + an input. */ + extern void emit_unop_insn PARAMS ((int, rtx, rtx, enum rtx_code)); + + /* Emit code to perform a series of operations on a multi-word quantity, one + word at a time. */ + extern rtx emit_no_conflict_block PARAMS ((rtx, rtx, rtx, rtx, rtx)); + + /* Emit one rtl instruction to store zero in specified rtx. */ + extern void emit_clr_insn PARAMS ((rtx)); + + /* Emit one rtl insn to store 1 in specified rtx assuming it contains 0. */ + extern void emit_0_to_1_insn PARAMS ((rtx)); + + /* Emit one rtl insn to compare two rtx's. */ + extern void emit_cmp_insn PARAMS ((rtx, rtx, enum rtx_code, rtx, + enum machine_mode, int)); + + /* The various uses that a comparison can have; used by can_compare_p: + jumps, conditional moves, store flag operations. */ + enum can_compare_purpose + { + ccp_jump, + ccp_cmov, + ccp_store_flag + }; + + /* Nonzero if a compare of mode MODE can be done straightforwardly + (without splitting it into pieces). */ + extern int can_compare_p PARAMS ((enum rtx_code, enum machine_mode, + enum can_compare_purpose)); + + extern rtx prepare_operand PARAMS ((int, rtx, int, enum machine_mode, + enum machine_mode, int)); + + /* Return the INSN_CODE to use for an extend operation. */ + extern enum insn_code can_extend_p PARAMS ((enum machine_mode, + enum machine_mode, int)); + + /* Generate the body of an insn to extend Y (with mode MFROM) + into X (with mode MTO). Do zero-extension if UNSIGNEDP is nonzero. */ + extern rtx gen_extend_insn PARAMS ((rtx, rtx, enum machine_mode, + enum machine_mode, int)); + + /* Initialize the tables that control conversion between fixed and + floating values. */ + extern void init_fixtab PARAMS ((void)); + extern void init_floattab PARAMS ((void)); + + /* Generate code for a FLOAT_EXPR. */ + extern void expand_float PARAMS ((rtx, rtx, int)); + + /* Generate code for a FIX_EXPR. */ + extern void expand_fix PARAMS ((rtx, rtx, int)); + + #endif /* GCC_OPTABS_H */ diff -Nrc3pad gcc-3.0.4/gcc/output.h gcc-3.1/gcc/output.h *** gcc-3.0.4/gcc/output.h Sat May 12 20:59:51 2001 --- gcc-3.1/gcc/output.h Sun Apr 28 18:43:53 2002 *************** *** 1,24 **** /* Declarations for insn-output.c. These functions are defined in recog.c, final.c, and varasm.c. Copyright (C) 1987, 1991, 1994, 1997, 1998, ! 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* Initialize data in final at the beginning of a compilation. */ extern void init_final PARAMS ((const char *)); --- 1,27 ---- /* Declarations for insn-output.c. These functions are defined in recog.c, final.c, and varasm.c. Copyright (C) 1987, 1991, 1994, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ ! ! /* Compute branch alignments based on frequency information in the CFG. */ ! extern void compute_alignments PARAMS ((void)); /* Initialize data in final at the beginning of a compilation. */ extern void init_final PARAMS ((const char *)); *************** extern void app_enable PARAMS ((void)); *** 35,41 **** Called from varasm.c before most kinds of output. */ extern void app_disable PARAMS ((void)); ! /* Return the number of slots filled in the current delayed branch sequence (we don't count the insn needing the delay slot). Zero if not in a delayed branch sequence. */ extern int dbr_sequence_length PARAMS ((void)); --- 38,44 ---- Called from varasm.c before most kinds of output. */ extern void app_disable PARAMS ((void)); ! /* Return the number of slots filled in the current delayed branch sequence (we don't count the insn needing the delay slot). Zero if not in a delayed branch sequence. */ extern int dbr_sequence_length PARAMS ((void)); *************** extern void final_start_function PARAMS *** 62,68 **** /* Output assembler code for the end of a function. For clarity, args are same as those of `final_start_function' even though not all of them are needed. */ ! extern void final_end_function PARAMS ((rtx, FILE *, int)); /* Output assembler code for some insns: all or part of a function. */ extern void final PARAMS ((rtx, FILE *, int, int)); --- 65,71 ---- /* Output assembler code for the end of a function. For clarity, args are same as those of `final_start_function' even though not all of them are needed. */ ! extern void final_end_function PARAMS ((void)); /* Output assembler code for some insns: all or part of a function. */ extern void final PARAMS ((rtx, FILE *, int, int)); *************** extern rtx final_scan_insn PARAMS ((rtx, *** 74,84 **** /* Replace a SUBREG with a REG or a MEM, based on the thing it is a subreg of. */ ! extern rtx alter_subreg PARAMS ((rtx)); /* Report inconsistency between the assembler template and the operands. In an `asm', it's the user's fault; otherwise, the compiler's fault. */ ! extern void output_operand_lossage PARAMS ((const char *)); /* Output a string of assembler code, substituting insn operands. Defined in final.c. */ --- 77,87 ---- /* Replace a SUBREG with a REG or a MEM, based on the thing it is a subreg of. */ ! extern rtx alter_subreg PARAMS ((rtx *)); /* Report inconsistency between the assembler template and the operands. In an `asm', it's the user's fault; otherwise, the compiler's fault. */ ! extern void output_operand_lossage PARAMS ((const char *, ...)) ATTRIBUTE_PRINTF_1; /* Output a string of assembler code, substituting insn operands. Defined in final.c. */ *************** extern void split_double PARAMS ((rtx, r *** 116,121 **** --- 119,129 ---- /* Return nonzero if this function has no function calls. */ extern int leaf_function_p PARAMS ((void)); + /* Return 1 if branch is an forward branch. + Uses insn_shuid array, so it works only in the final pass. May be used by + output templates to add branch prediction hints, for example. */ + extern int final_forward_branch_p PARAMS ((rtx)); + /* Return 1 if this function uses only the registers that can be safely renumbered. */ extern int only_leaf_regs_used PARAMS ((void)); *************** extern void leaf_renumber_regs_insn PARA *** 127,141 **** /* Locate the proper template for the given insn-code. */ extern const char *get_insn_template PARAMS ((int, rtx)); /* Functions in flow.c */ extern void allocate_for_life_analysis PARAMS ((void)); ! extern int regno_uninitialized PARAMS ((int)); extern int regno_clobbered_at_setjmp PARAMS ((int)); - extern void dump_flow_info PARAMS ((FILE *)); extern void find_basic_blocks PARAMS ((rtx, int, FILE *)); ! extern void cleanup_cfg PARAMS ((void)); ! extern void free_basic_block_vars PARAMS ((int)); ! extern void set_block_num PARAMS ((rtx, int)); extern void check_function_return_warnings PARAMS ((void)); #endif --- 135,150 ---- /* Locate the proper template for the given insn-code. */ extern const char *get_insn_template PARAMS ((int, rtx)); + /* Add function NAME to the weak symbols list. VALUE is a weak alias + associated with NAME. */ + extern int add_weak PARAMS ((const char *, const char *)); + /* Functions in flow.c */ extern void allocate_for_life_analysis PARAMS ((void)); ! extern int regno_uninitialized PARAMS ((unsigned int)); extern int regno_clobbered_at_setjmp PARAMS ((int)); extern void find_basic_blocks PARAMS ((rtx, int, FILE *)); ! extern bool cleanup_cfg PARAMS ((int)); extern void check_function_return_warnings PARAMS ((void)); #endif *************** extern void force_data_section PARAMS ( *** 154,166 **** the text section. */ extern void readonly_data_section PARAMS ((void)); ! /* Determine if we're in the text section. */ extern int in_text_section PARAMS ((void)); - #ifdef EH_FRAME_SECTION_ASM_OP - extern void eh_frame_section PARAMS ((void)); - #endif - #ifdef CTORS_SECTION_ASM_OP extern void ctors_section PARAMS ((void)); #endif --- 163,171 ---- the text section. */ extern void readonly_data_section PARAMS ((void)); ! /* Determine if we're in the text section. */ extern int in_text_section PARAMS ((void)); #ifdef CTORS_SECTION_ASM_OP extern void ctors_section PARAMS ((void)); #endif *************** extern void init_section PARAMS ((void)) *** 185,194 **** --- 190,215 ---- extern void fini_section PARAMS ((void)); #endif + #ifdef EXPORTS_SECTION_ASM_OP + extern void exports_section PARAMS ((void)); + #endif + #ifdef TDESC_SECTION_ASM_OP extern void tdesc_section PARAMS ((void)); #endif + #ifdef DRECTVE_SECTION_ASM_OP + extern void drectve_section PARAMS ((void)); + #endif + + #ifdef SDATA_SECTION_ASM_OP + extern void sdata_section PARAMS ((void)); + #endif + + #ifdef RDATA_SECTION_ASM_OP + extern void rdata_section PARAMS ((void)); + #endif + #ifdef TREE_CODE /* Tell assembler to change to section NAME for DECL. If DECL is NULL, just switch to section NAME. *************** extern void named_section PARAMS ((tree *** 199,209 **** /* Tell assembler to switch to the section for function DECL. */ extern void function_section PARAMS ((tree)); ! /* Tell assembler to switch to the section for the exception table. */ ! extern void exception_section PARAMS ((void)); /* Declare DECL to be a weak symbol. */ extern void declare_weak PARAMS ((tree)); #endif /* TREE_CODE */ /* Emit any pending weak declarations. */ --- 220,238 ---- /* Tell assembler to switch to the section for function DECL. */ extern void function_section PARAMS ((tree)); ! /* Tell assembler to switch to the section for string merging. */ ! extern void mergeable_string_section PARAMS ((tree, unsigned HOST_WIDE_INT, ! unsigned int)); ! ! /* Tell assembler to switch to the section for constant merging. */ ! extern void mergeable_constant_section PARAMS ((enum machine_mode, ! unsigned HOST_WIDE_INT, ! unsigned int)); /* Declare DECL to be a weak symbol. */ extern void declare_weak PARAMS ((tree)); + /* Merge weak status. */ + extern void merge_weak PARAMS ((tree, tree)); #endif /* TREE_CODE */ /* Emit any pending weak declarations. */ *************** extern void assemble_variable PARAMS (( *** 259,279 **** extern void assemble_external PARAMS ((tree)); #endif /* TREE_CODE */ - /* Record an element in the table of global destructors. - How this is done depends on what sort of assembler and linker - are in use. - - NAME should be the name of a global function to be called - at exit time. This name is output using assemble_name. */ - extern void assemble_destructor PARAMS ((const char *)); - - /* Likewise for global constructors. */ - extern void assemble_constructor PARAMS ((const char *)); - - /* Likewise for entries we want to record for garbage collection. - Garbage collection is still under development. */ - extern void assemble_gc_entry PARAMS ((const char *)); - /* Assemble code to leave SIZE bytes of zeros. */ extern void assemble_zeros PARAMS ((int)); --- 288,293 ---- *************** extern void assemble_eh_label PARAMS (( *** 303,321 **** Many macros in the tm file are defined to call this function. */ extern void assemble_name PARAMS ((FILE *, const char *)); #ifdef RTX_CODE ! /* Assemble the integer constant X into an object of SIZE bytes. ! X must be either a CONST_INT or CONST_DOUBLE. ! Return 1 if we were able to output the constant, otherwise 0. If FORCE is ! non-zero, abort if we can't output the constant. */ ! extern int assemble_integer PARAMS ((rtx, int, int)); ! extern int assemble_eh_integer PARAMS ((rtx, int, int)); ! #ifdef EMUSHORT /* Assemble the floating-point constant D into an object of size MODE. */ extern void assemble_real PARAMS ((REAL_VALUE_TYPE, ! enum machine_mode)); #endif #endif --- 317,356 ---- Many macros in the tm file are defined to call this function. */ extern void assemble_name PARAMS ((FILE *, const char *)); + /* Return the assembler directive for creating a given kind of integer + object. SIZE is the number of bytes in the object and ALIGNED_P + indicates whether it is known to be aligned. Return NULL if the + assembly dialect has no such directive. + + The returned string should be printed at the start of a new line and + be followed immediately by the object's initial value. */ + extern const char *integer_asm_op PARAMS ((int, int)); + #ifdef RTX_CODE ! /* Use directive OP to assemble an integer object X. Print OP at the ! start of the line, followed immediately by the value of X. */ ! extern void assemble_integer_with_op PARAMS ((const char *, rtx)); ! /* The default implementation of the asm_out.integer target hook. */ ! extern bool default_assemble_integer PARAMS ((rtx, unsigned int, int)); ! /* Assemble the integer constant X into an object of SIZE bytes. ALIGN is ! the alignment of the integer in bits. Return 1 if we were able to output ! the constant, otherwise 0. If FORCE is non-zero, abort if we can't output ! the constant. */ ! extern bool assemble_integer PARAMS ((rtx, unsigned, unsigned, int)); ! ! /* An interface to assemble_integer for the common case in which a value is ! fully aligned and must be printed. VALUE is the value of the integer ! object and SIZE is the number of bytes it contains. */ ! #define assemble_aligned_integer(SIZE, VALUE) \ ! assemble_integer (VALUE, SIZE, (SIZE) * BITS_PER_UNIT, 1) ! ! #ifdef REAL_VALUE_TYPE /* Assemble the floating-point constant D into an object of size MODE. */ extern void assemble_real PARAMS ((REAL_VALUE_TYPE, ! enum machine_mode, ! unsigned)); #endif #endif *************** extern tree initializer_constant_valid_p *** 358,370 **** Assumes output_addressed_constants has been done on EXP already. Generate exactly SIZE bytes of assembler data, padding at the end ! with zeros if necessary. SIZE must always be specified. */ ! extern void output_constant PARAMS ((tree, int)); ! #endif ! /* When outputting assembler code, indicates which alternative ! of the constraints was actually satisfied. */ ! extern int which_alternative; #ifdef RTX_CODE /* When outputting delayed branch sequences, this rtx holds the --- 393,404 ---- Assumes output_addressed_constants has been done on EXP already. Generate exactly SIZE bytes of assembler data, padding at the end ! with zeros if necessary. SIZE must always be specified. ! ALIGN is the alignment in bits that may be assumed for the data. */ ! extern void output_constant PARAMS ((tree, HOST_WIDE_INT, ! unsigned int)); ! #endif #ifdef RTX_CODE /* When outputting delayed branch sequences, this rtx holds the *************** extern int which_alternative; *** 376,388 **** extern rtx final_sequence; #endif ! /* Nonzero means generate position-independent code. ! This is not fully implemented yet. */ ! ! extern int flag_pic; ! ! /* The line number of the beginning of the current function. ! sdbout.c needs this so that it can output relative linenumbers. */ #ifdef SDB_DEBUGGING_INFO /* Avoid undef sym in certain broken linkers. */ extern int sdb_begin_function_line; --- 410,417 ---- extern rtx final_sequence; #endif ! /* The line number of the beginning of the current function. Various ! md code needs this so that it can output relative linenumbers. */ #ifdef SDB_DEBUGGING_INFO /* Avoid undef sym in certain broken linkers. */ extern int sdb_begin_function_line; *************** extern const char *weak_global_object_na *** 403,409 **** /* Nonzero if function being compiled doesn't contain any calls (ignoring the prologue and epilogue). This is set prior to local register allocation and is valid for the remaining ! compiler passes. */ extern int current_function_is_leaf; --- 432,438 ---- /* Nonzero if function being compiled doesn't contain any calls (ignoring the prologue and epilogue). This is set prior to local register allocation and is valid for the remaining ! compiler passes. */ extern int current_function_is_leaf; *************** extern int current_function_nothrow; *** 414,420 **** /* Nonzero if function being compiled doesn't modify the stack pointer (ignoring the prologue and epilogue). This is only valid after ! life_analysis has run. */ extern int current_function_sp_is_unchanging; --- 443,449 ---- /* Nonzero if function being compiled doesn't modify the stack pointer (ignoring the prologue and epilogue). This is only valid after ! life_analysis has run. */ extern int current_function_sp_is_unchanging; *************** extern const char *user_label_prefix; *** 457,462 **** #define STRIP_NAME_ENCODING(VAR,SYMBOL_NAME) \ (VAR) = ((SYMBOL_NAME) + ((SYMBOL_NAME)[0] == '*')) #endif - /* Assign unique numbers to labels generated for profiling. */ ! extern int profile_label_no; --- 486,546 ---- #define STRIP_NAME_ENCODING(VAR,SYMBOL_NAME) \ (VAR) = ((SYMBOL_NAME) + ((SYMBOL_NAME)[0] == '*')) #endif ! /* Default target function prologue and epilogue assembler output. */ ! extern void default_function_pro_epilogue PARAMS ((FILE *, HOST_WIDE_INT)); ! ! /* Tell assembler to switch to the section for the exception table. */ ! extern void default_exception_section PARAMS ((void)); ! ! /* Tell assembler to switch to the section for the EH frames. */ ! extern void default_eh_frame_section PARAMS ((void)); ! ! /* Default target hook that outputs nothing to a stream. */ ! extern void no_asm_to_stream PARAMS ((FILE *)); ! ! /* Flags controling properties of a section. */ ! #define SECTION_ENTSIZE 0x000ff /* entity size in section */ ! #define SECTION_CODE 0x00100 /* contains code */ ! #define SECTION_WRITE 0x00200 /* data is writable */ ! #define SECTION_DEBUG 0x00400 /* contains debug data */ ! #define SECTION_LINKONCE 0x00800 /* is linkonce */ ! #define SECTION_SMALL 0x01000 /* contains "small data" */ ! #define SECTION_BSS 0x02000 /* contains zeros only */ ! #define SECTION_FORGET 0x04000 /* forget that we've entered the section */ ! #define SECTION_MERGE 0x08000 /* contains mergeable data */ ! #define SECTION_STRINGS 0x10000 /* contains zero terminated strings without ! embedded zeros */ ! #define SECTION_OVERRIDE 0x20000 /* allow override of default flags */ ! #define SECTION_MACH_DEP 0x40000 /* subsequent bits reserved for target */ ! ! extern unsigned int get_named_section_flags PARAMS ((const char *)); ! extern bool set_named_section_flags PARAMS ((const char *, unsigned int)); ! extern void named_section_flags PARAMS ((const char *, unsigned int)); ! extern bool named_section_first_declaration PARAMS((const char *)); ! ! union tree_node; ! extern unsigned int default_section_type_flags PARAMS ((union tree_node *, ! const char *, int)); ! ! extern void default_no_named_section PARAMS ((const char *, unsigned int)); ! extern void default_elf_asm_named_section PARAMS ((const char *, unsigned int)); ! extern void default_coff_asm_named_section PARAMS ((const char *, ! unsigned int)); ! extern void default_pe_asm_named_section PARAMS ((const char *, unsigned int)); ! ! extern void default_stabs_asm_out_destructor PARAMS ((struct rtx_def *, int)); ! extern void default_named_section_asm_out_destructor PARAMS ((struct rtx_def *, ! int)); ! extern void default_dtor_section_asm_out_destructor PARAMS ((struct rtx_def *, ! int)); ! extern void default_stabs_asm_out_constructor PARAMS ((struct rtx_def *, int)); ! extern void default_named_section_asm_out_constructor PARAMS ((struct rtx_def *, ! int)); ! extern void default_ctor_section_asm_out_constructor PARAMS ((struct rtx_def *, ! int)); ! ! /* Emit data for vtable gc for GNU binutils. */ ! extern void assemble_vtable_entry PARAMS ((struct rtx_def *, HOST_WIDE_INT)); ! extern void assemble_vtable_inherit PARAMS ((struct rtx_def *, ! struct rtx_def *)); diff -Nrc3pad gcc-3.0.4/gcc/params.c gcc-3.1/gcc/params.c *** gcc-3.0.4/gcc/params.c Thu Mar 1 16:56:20 2001 --- gcc-3.1/gcc/params.c Wed Aug 22 14:35:31 2001 *************** *** 2,23 **** Copyright (C) 2001 Free Software Foundation, Inc. Written by Mark Mitchell . ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ --- 2,23 ---- Copyright (C) 2001 Free Software Foundation, Inc. Written by Mark Mitchell . ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ diff -Nrc3pad gcc-3.0.4/gcc/params.def gcc-3.1/gcc/params.def *** gcc-3.0.4/gcc/params.def Thu Aug 2 07:49:50 2001 --- gcc-3.1/gcc/params.def Sun Oct 28 20:09:15 2001 *************** *** 2,23 **** Copyright (C) 2001 Free Software Foundation, Inc. Written by Mark Mitchell . ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ --- 2,23 ---- Copyright (C) 2001 Free Software Foundation, Inc. Written by Mark Mitchell . ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ *************** DEFPARAM(PARAM_MAX_DELAY_SLOT_LIVE_SEARC *** 68,90 **** "The maximum number of instructions to consider to find accurate live register information", 333) - /* The GCSE optimization will be disabled if it would require - significantly more memory than this value. */ - DEFPARAM(PARAM_MAX_GCSE_MEMORY, - "max-gcse-memory", - "The maximum amount of memory to be allocated by GCSE", - 50 * 1024 * 1024) - /* This parameter limits the number of branch elements that the ! scheduler will track anti-dependancies through without resetting the tracking mechanism. Large functions with few calls or barriers ! can generate lists containing many 1000's of dependancies. Generally the compiler either uses all available memory, or runs for far too long. */ DEFPARAM(PARAM_MAX_PENDING_LIST_LENGTH, "max-pending-list-length", "The maximum length of scheduling's pending operations list", 32) /* Local variables: mode:c --- 68,94 ---- "The maximum number of instructions to consider to find accurate live register information", 333) /* This parameter limits the number of branch elements that the ! scheduler will track anti-dependencies through without resetting the tracking mechanism. Large functions with few calls or barriers ! can generate lists containing many 1000's of dependencies. Generally the compiler either uses all available memory, or runs for far too long. */ DEFPARAM(PARAM_MAX_PENDING_LIST_LENGTH, "max-pending-list-length", "The maximum length of scheduling's pending operations list", 32) + /* The GCSE optimization will be disabled if it would require + significantly more memory than this value. */ + DEFPARAM(PARAM_MAX_GCSE_MEMORY, + "max-gcse-memory", + "The maximum amount of memory to be allocated by GCSE", + 50 * 1024 * 1024) + /* The number of repetitions of copy/const prop and PRE to run. */ + DEFPARAM(PARAM_MAX_GCSE_PASSES, + "max-gcse-passes", + "The maximum number of passes to make when doing GCSE", + 1) /* Local variables: mode:c diff -Nrc3pad gcc-3.0.4/gcc/params.h gcc-3.1/gcc/params.h *** gcc-3.0.4/gcc/params.h Thu Jul 26 13:55:02 2001 --- gcc-3.1/gcc/params.h Wed Jan 23 02:57:04 2002 *************** *** 2,23 **** Copyright (C) 2001 Free Software Foundation, Inc. Written by Mark Mitchell . ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ --- 2,23 ---- Copyright (C) 2001 Free Software Foundation, Inc. Written by Mark Mitchell . ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ *************** Boston, MA 02111-1307, USA. *** 32,39 **** Since their values can be set on the command-line, these parameters should not be used for non-dynamic memory allocation. */ ! #ifndef PARAMS_H ! #define PARAMS_H /* No parameter shall have this value. */ --- 32,39 ---- Since their values can be set on the command-line, these parameters should not be used for non-dynamic memory allocation. */ ! #ifndef GCC_PARAMS_H ! #define GCC_PARAMS_H /* No parameter shall have this value. */ *************** typedef struct param_info *** 45,55 **** { /* The name used with the `--param =' switch to set this value. */ ! const char *option; /* The associated value. */ int value; /* A short description of the option. */ ! const char *help; } param_info; /* An array containing the compiler parameters and their current --- 45,55 ---- { /* The name used with the `--param =' switch to set this value. */ ! const char *const option; /* The associated value. */ int value; /* A short description of the option. */ ! const char *const help; } param_info; /* An array containing the compiler parameters and their current *************** extern void set_param_value *** 72,79 **** typedef enum compiler_param { ! #define DEFPARAM(ENUM, OPTION, HELP, DEFAULT) \ ! ENUM, #include "params.def" #undef DEFPARAM LAST_PARAM --- 72,79 ---- typedef enum compiler_param { ! #define DEFPARAM(enumerator, option, msgid, default) \ ! enumerator, #include "params.def" #undef DEFPARAM LAST_PARAM *************** typedef enum compiler_param *** 90,99 **** PARAM_VALUE (PARAM_MAX_DELAY_SLOT_INSN_SEARCH) #define MAX_DELAY_SLOT_LIVE_SEARCH \ PARAM_VALUE (PARAM_MAX_DELAY_SLOT_LIVE_SEARCH) - #define MAX_GCSE_MEMORY \ - ((size_t) PARAM_VALUE (PARAM_MAX_GCSE_MEMORY)) #define MAX_PENDING_LIST_LENGTH \ PARAM_VALUE (PARAM_MAX_PENDING_LIST_LENGTH) ! ! ! #endif /* PARAMS_H */ --- 90,99 ---- PARAM_VALUE (PARAM_MAX_DELAY_SLOT_INSN_SEARCH) #define MAX_DELAY_SLOT_LIVE_SEARCH \ PARAM_VALUE (PARAM_MAX_DELAY_SLOT_LIVE_SEARCH) #define MAX_PENDING_LIST_LENGTH \ PARAM_VALUE (PARAM_MAX_PENDING_LIST_LENGTH) ! #define MAX_GCSE_MEMORY \ ! ((size_t) PARAM_VALUE (PARAM_MAX_GCSE_MEMORY)) ! #define MAX_GCSE_PASSES \ ! PARAM_VALUE (PARAM_MAX_GCSE_PASSES) ! #endif /* ! GCC_PARAMS_H */ diff -Nrc3pad gcc-3.0.4/gcc/patch-apollo-includes gcc-3.1/gcc/patch-apollo-includes *** gcc-3.0.4/gcc/patch-apollo-includes Wed Dec 16 20:57:30 1998 --- gcc-3.1/gcc/patch-apollo-includes Thu Jan 1 00:00:00 1970 *************** *** 1,69 **** - #!/bin/sh - # patch-apollo-includes -- fix some (but not all!) Apollo brain damage. - - FILES_TO_PATCH='sys/types.h setjmp.h' - - mkdir sys - - for i in $FILES_TO_PATCH; - do - cp /bsd4.3/usr/include/$i ./$i - done - - patch -b -apollo <<'EOP' - *** /bsd4.3/usr/include/sys/types.h Fri Apr 8 20:29:06 1988 - --- sys/types.h Wed Feb 26 21:17:57 1992 - *************** - *** 38,44 **** - --- 38,47 ---- - typedef char * caddr_t; - typedef u_long ino_t; - typedef long swblk_t; - + #ifndef _SIZE_T - + #define _SIZE_T - typedef long size_t; - + #endif - typedef long time_t; - typedef long dev_t; - typedef long off_t; - *** /bsd4.3/usr/include/setjmp.h Fri Feb 3 21:40:21 1989 - --- setjmp.h Sun Feb 23 19:06:55 1992 - *************** - *** 24,30 **** - --- 24,39 ---- - #endif - - - + #ifdef __GNUC__ - #ifdef _PROTOTYPES - + extern int sigsetjmp (sigjmp_buf env, int savemask); - + extern void siglongjmp (sigjmp_buf env, int val); - + #else - + extern int sigsetjmp(); - + extern void siglongjmp(); - + #endif /* _PROTOTYPES */ - + #else /* not __GNUC__ */ - + #ifdef _PROTOTYPES - extern int sigsetjmp( - sigjmp_buf env, - int savemask - *************** - *** 37,43 **** - extern int sigsetjmp() #options(abnormal); - extern void siglongjmp() #options(noreturn); - #endif /* _PROTOTYPES */ - ! - #undef _PROTOTYPES - - #ifdef __cplusplus - --- 46,52 ---- - extern int sigsetjmp() #options(abnormal); - extern void siglongjmp() #options(noreturn); - #endif /* _PROTOTYPES */ - ! #endif /* not __GNUC__ */ - #undef _PROTOTYPES - - #ifdef __cplusplus - EOP - - exit 0 --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/po/ChangeLog gcc-3.1/gcc/po/ChangeLog *** gcc-3.0.4/gcc/po/ChangeLog Wed Feb 20 18:42:43 2002 --- gcc-3.1/gcc/po/ChangeLog Wed May 15 02:23:33 2002 *************** *** 1,62 **** ! 2002-02-20 Release Manager ! * GCC 3.0.4 Released. ! 2002-02-20 Release Manager ! * GCC 3.0.4 Released. ! 2001-12-20 Release Manager ! * GCC 3.0.3 Released. ! 2001-11-05 Zack Weinberg ! * POTFILES.in: Add config/rs6000/freebsd.h and the s390 directory. ! 2001-11-03 David O'Brien ! * POTFILES.in: Add config/ia64/freebsd.h. ! 2001-10-23 Release Manager ! * GCC 3.0.2 Released. ! 2001-08-19 Release Manager ! * GCC 3.0.1 Released. ! 2001-08-19 Release Manager ! * GCC 3.0.1 Released. ! 20010617 Release Manager ! * GCC 3.0 Released. 2001-06-11 Zack Weinberg ! * Makefile.in.in: Take --defines switch off of xgettext ! command line. * POTFILES.in: Massive update, removing all dead files and adding approximately 300 files which had been left out. Clarify comments on what should and should not appear here. ! * gcc.pot, cat-id-tbl.c: Regenerate. 2001-05-23 Zack Weinberg ! * POTFILES.in: Remove frame-dwarf2.c, frame.c, and frame.h. 2001-05-16 Zack Weinberg ! * POTFILES.in: Remove assert.h. 2001-05-13 Mark Mitchell * Makefile.in.in (STAMP): New macro. Replace all uses of `touch' with $(STAMP). 2001-01-30 Gerald Pfeifer * Makefile.in.in (distclean): Also remove *.gmo during `make --- 1,174 ---- ! 2002-05-14 Release Manager ! * GCC 3.1 Released. ! 2002-05-14 Release Manager ! * GCC 3.1 Released. ! 2002-05-10 Philipp Thomas ! * es.po, tr.po, fr.po: Update to version ! for the 20020415 snapshot. ! 2002-04-24 Philipp Thomas ! * gcc.pot: Regenerate. ! 2002-04-15 Philipp Thomas ! * tr.po: Update to latest revision. ! 2002-03-14 Philipp Thomas ! * fr.po: Update to latest revision. ! 2002-02-18 Philipp Thomas ! * es.po, fr.po: Updated to newest version. ! * nl.po: New files. ! 2002-02-17 Philipp Thomas ! * gcc.pot: Regenerate. ! 2002-02-11 Zack Weinberg ! * gcc.pot: Regenerate. ! ! 2002-02-04 Zack Weinberg ! ! * gcc.pot: Regenerate. ! ! 2002-01-31 Philipp Thomas ! ! * el.po: New file. ! ! 2002-01-29 Philipp Thomas ! ! * es.po, fr.po, ja.po: Updated to current versions. ! ! 2002-01-23 Philipp Thomas ! ! * tr.po: New file. ! ! 2002-01-22 Zack Weinberg ! ! * gcc.pot: Regenerate - now includes Fortran error messages. ! ! * exgettext: Merge changes from diffutils. Scan .def files in ! addition to .c and .h. Add --language=c to xgettext command line. ! ! 2001-12-05 Martin v. Löwis ! ! * es.po: Update to 3.0 template. ! ! 2001-12-05 Martin v. Löwis ! ! * da.po, es.po, fr.po, ja.po: New files. ! ! 2001-11-08 Zack Weinberg ! ! * exgettext: Deposit new potfile in po subdir. ! ! 2001-10-31 Zack Weinberg ! ! * EXCLUDES: New file. ! * exgettext: New helper script; completely rewritten. ! * Makefile.in.in, POTFILES.in: Delete. ! ! 2001-10-12 Zack Weinberg ! ! * Makefile.in.in: Upgrade to gettext-0.10.40. ! * cat-id-tbl.c: Remove file. ! * stamp-cat-id: Remove file. ! ! 2001-10-08 Alexandre Oliva ! ! * POTFILES.in: Add newly-added files. ! ! 2001-09-30 Zack Weinberg ! ! * POTFILES.in: Add all missing files. ! ! 2001-09-23 Zack Weinberg ! ! * POTFILES.in: Remove cp/errfn.c. ! ! 2001-08-01 Nick Clifton ! ! * POTFILES.in: Remove chorus.h files from i386, rs6000 and sparc ! config directories. Add config/chorus.h instead. ! ! Mon Jul 9 13:27:15 2001 Jeffrey A Law (law@cygnus.com) ! ! * POTFILES.in: Add ssa-ccp.c ! ! Thu Jun 28 16:11:30 2001 Jeffrey A Law (law@cygnus.com) ! ! * POTFILES.in: Add df.c and df.h ! ! Tue Jun 19 08:03:43 2001 Jeffrey A Law (law@cygnus.com) ! ! * POTFILES.in: Replace dce.c with ssa-dce.c. ! ! 2001-06-15 Dennis Bjorklund ! ! * sv.po: Updated. Approximately 1100 of 3600 strings translated. 2001-06-11 Zack Weinberg ! * POTFILES.in: Comment out config/float-*. ! No need to regenerate gcc.pot. ! ! 2001-06-11 Zack Weinberg ! ! * gcc.pot: Regenerate, again. You go away for five minutes ! and someone tweaks the messages on you. ! * cat-id-tbl.c: Regenerate this too. ! ! 2001-06-11 Zack Weinberg ! ! * Makefile.in.in: Take --defines switch off of xgettext ! command line. * POTFILES.in: Massive update, removing all dead files and adding approximately 300 files which had been left out. Clarify comments on what should and should not appear here. ! * gcc.pot: Regenerate. 2001-05-23 Zack Weinberg ! * POTFILES.in: Remove config/rs6000/xm-darwin.h and ! config/pa/pa-gas.h. 2001-05-16 Zack Weinberg ! * POTFILES.in: Remove libgcc1-test.c and libgcc1.c. 2001-05-13 Mark Mitchell * Makefile.in.in (STAMP): New macro. Replace all uses of `touch' with $(STAMP). + 2001-05-11 Zack Weinberg + + * POTFILES.in: Remove assert.h. + + 2001-05-07 Zack Weinberg + + * POTFILES.in: Remove config/i386/sco.h, config/i386/sco4.h, + config/i386/sco4dbx.h, and config/i386/scodbx.h. + + 2001-04-04 Zack Weinberg + + * POTFILES.in: Remove config/romp/xm-romp.h. + + 2001-04-03 Zack Weinberg + + * POTFILES.in: Remove all the files deleted by the xm-host.h + purge, also frame.c, frame-dwarf2.c, and gansidecl.h. + 2001-01-30 Gerald Pfeifer * Makefile.in.in (distclean): Also remove *.gmo during `make *************** Thu Nov 30 01:28:08 2000 Jeffrey A Law *** 105,111 **** * POTFILES.in: Remove the files from the nuked dead ports. ! * ChangeLog: Correct David's entry. 2000-09-28 David O'Brien --- 217,223 ---- * POTFILES.in: Remove the files from the nuked dead ports. ! * ChangeLog: Correct David's entry. 2000-09-28 David O'Brien *************** Thu Nov 30 01:28:08 2000 Jeffrey A Law *** 116,122 **** 2000-09-26 Philipp Thomas * Makefile.in.in: Remove stamp-check-pot from list ! of default targets as checks are only possible in a complete source tree and all languages configured. 2000-09-13 Gerald Pfeifer --- 228,234 ---- 2000-09-26 Philipp Thomas * Makefile.in.in: Remove stamp-check-pot from list ! of default targets as checks are only possible in a complete source tree and all languages configured. 2000-09-13 Gerald Pfeifer diff -Nrc3pad gcc-3.0.4/gcc/po/EXCLUDES gcc-3.1/gcc/po/EXCLUDES *** gcc-3.0.4/gcc/po/EXCLUDES Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/po/EXCLUDES Wed Oct 31 17:40:07 2001 *************** *** 0 **** --- 1,64 ---- + # This file lists all the sources which should *not* be scanned for + # strings to translate. Only the first word on each line is used; the + # rest is ignored. Only files with an extension of .c or .h are + # examined to begin with. + + # These files are part of libgcc, or target headers provided by gcc. + config/rs6000/sol-c0.c + config/float-c4x.h + config/float-i128.h + config/float-i32.h + config/float-i386.h + config/float-i64.h + config/float-m68k.h + config/float-sh.h + config/float-sparc.h + config/float-vax.h + crtstuff.c + frame.h + gbl-ctors.h + libgcc1.c + libgcc1-test.c + libgcc2.c + libgcc2.h + limitx.h + limity.h + longlong.h + unwind-dw2-fde.c + unwind-dw2-fde.h + unwind-dw2.c + unwind-pe.h + unwind-sjlj.c + unwind.h + + # These programs are meant to be executed only by GCC maintainers or + # installers. Such files do not need to be translated, as these + # people typically need to be able to read English anyway. + enquire.c + fix-header.c + gen-protos.c + genattr.c + genattrtab.c + gencheck.c + gencodes.c + genconfig.c + genconstants.c + genemit.c + genextract.c + genflags.c + gengenrtl.c + genopinit.c + genoutput.c + genpeep.c + genpreds.c + genrecog.c + gensupport.c + gensupport.h + scan-decls.c + scan.c + scan.h + + # These files are not yet internationalized, because they contain + # many strings that require a lot of analysis, and are little-used. + mips-tdump.c + mips-tfile.c diff -Nrc3pad gcc-3.0.4/gcc/po/Makefile.in.in gcc-3.1/gcc/po/Makefile.in.in *** gcc-3.0.4/gcc/po/Makefile.in.in Wed Jun 13 00:45:34 2001 --- gcc-3.1/gcc/po/Makefile.in.in Thu Jan 1 00:00:00 1970 *************** *** 1,255 **** - # Makefile for program source directory in GNU NLS utilities package. - # Copyright (C) 1995, 1996, 1997 by Ulrich Drepper - # - # This file file be copied and used freely without restrictions. It can - # be used in projects which are not available under the GNU Public License - # but which still want to provide support for the GNU gettext functionality. - # Please note that the actual code is *not* freely available. - - PACKAGE = @PACKAGE@ - VERSION = @VERSION@ - - SHELL = /bin/sh - STAMP = echo timestamp > - @SET_MAKE@ - - srcdir = @srcdir@ - top_srcdir = @top_srcdir@ - VPATH = @srcdir@ - - prefix = @prefix@ - exec_prefix = @exec_prefix@ - datadir = $(prefix)/@DATADIRNAME@ - localedir = $(datadir)/locale - gnulocaledir = $(prefix)/share/locale - gettextsrcdir = $(prefix)/share/gettext/po - subdir = po - - INSTALL = @INSTALL@ - INSTALL_DATA = @INSTALL_DATA@ - MKINSTALLDIRS = $(top_srcdir)/@MKINSTALLDIRS@ - - CC = @CC@ - GENCAT = @GENCAT@ - GMSGFMT = PATH=../src:$$PATH @GMSGFMT@ - MSGFMT = @MSGFMT@ - XGETTEXT = PATH=../src:$$PATH @XGETTEXT@ - MSGMERGE = PATH=../src:$$PATH msgmerge - - DEFS = @DEFS@ - CFLAGS = @CFLAGS@ - CPPFLAGS = @CPPFLAGS@ - - INCLUDES = -I.. -I$(top_srcdir)/intl - - COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) - - SOURCES = cat-id-tbl.c - POFILES = @POFILES@ - GMOFILES = @GMOFILES@ - DISTFILES = ChangeLog Makefile.in.in POTFILES.in $(PACKAGE).pot \ - stamp-cat-id $(POFILES) $(GMOFILES) $(SOURCES) - - POTFILES = \ - - CATALOGS = @CATALOGS@ - CATOBJEXT = @CATOBJEXT@ - INSTOBJEXT = @INSTOBJEXT@ - - .SUFFIXES: - .SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat - - .c.o: - $(COMPILE) $< - - .po.pox: - $(MAKE) $(srcdir)/$(PACKAGE).pot - $(MSGMERGE) $< $(srcdir)/$(PACKAGE).pot -o $*.pox - - .po.mo: - $(MSGFMT) -o $@ $< - - .po.gmo: - file=`echo $* | sed 's,.*/,,'`.gmo \ - && rm -f $$file && $(GMSGFMT) -o $$file $< - - .po.cat: - sed -f ../intl/po2msg.sed < $< > $*.msg \ - && rm -f $@ && $(GENCAT) $@ $*.msg - - - all: all-@USE_NLS@ - - all-yes: $(CATALOGS) @MAINT@ $(srcdir)/cat-id-tbl.c - all-no: - - stamp-check-po: $(POTFILES) - $(STAMP) stamp-check-po - - check-po: stamp-check-po - - $(srcdir)/$(PACKAGE).pot: $(POTFILES) - $(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(top_srcdir) \ - --add-comments --keyword=_ --keyword=N_ \ - --files-from=$(srcdir)/POTFILES.in \ - && test ! -f $(PACKAGE).po \ - || ( rm -f $(srcdir)/$(PACKAGE).pot \ - && mv $(PACKAGE).po $(srcdir)/$(PACKAGE).pot ) - - $(srcdir)/cat-id-tbl.c: $(srcdir)/stamp-cat-id; @: - $(srcdir)/stamp-cat-id: $(srcdir)/$(PACKAGE).pot - rm -f cat-id-tbl.tmp - sed -f ../intl/po2tbl.sed $(srcdir)/$(PACKAGE).pot \ - | sed -e "s/@PACKAGE NAME@/$(PACKAGE)/" > cat-id-tbl.tmp - if cmp -s cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; then \ - rm cat-id-tbl.tmp; \ - else \ - echo cat-id-tbl.c changed; \ - rm -f $(srcdir)/cat-id-tbl.c; \ - mv cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; \ - fi - cd $(srcdir) && rm -f stamp-cat-id && echo timestamp > stamp-cat-id - - - install: install-exec install-data - install-exec: - install-data: install-data-@USE_NLS@ - install-data-no: all - install-data-yes: all - if test -r "$(MKINSTALLDIRS)"; then \ - $(MKINSTALLDIRS) $(datadir); \ - else \ - $(SHELL) $(top_srcdir)/mkinstalldirs $(datadir); \ - fi - @catalogs='$(CATALOGS)'; \ - for cat in $$catalogs; do \ - cat=`basename $$cat`; \ - case "$$cat" in \ - *.gmo) destdir=$(gnulocaledir);; \ - *) destdir=$(localedir);; \ - esac; \ - lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ - dir=$$destdir/$$lang/LC_MESSAGES; \ - if test -r "$(MKINSTALLDIRS)"; then \ - $(MKINSTALLDIRS) $$dir; \ - else \ - $(SHELL) $(top_srcdir)/mkinstalldirs $$dir; \ - fi; \ - if test -r $$cat; then \ - $(INSTALL_DATA) $$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \ - echo "installing $$cat as $$dir/$(PACKAGE)$(INSTOBJEXT)"; \ - else \ - $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \ - echo "installing $(srcdir)/$$cat as" \ - "$$dir/$(PACKAGE)$(INSTOBJEXT)"; \ - fi; \ - if test -r $$cat.m; then \ - $(INSTALL_DATA) $$cat.m $$dir/$(PACKAGE)$(INSTOBJEXT).m; \ - echo "installing $$cat.m as $$dir/$(PACKAGE)$(INSTOBJEXT).m"; \ - else \ - if test -r $(srcdir)/$$cat.m ; then \ - $(INSTALL_DATA) $(srcdir)/$$cat.m \ - $$dir/$(PACKAGE)$(INSTOBJEXT).m; \ - echo "installing $(srcdir)/$$cat as" \ - "$$dir/$(PACKAGE)$(INSTOBJEXT).m"; \ - else \ - true; \ - fi; \ - fi; \ - done - if test "$(PACKAGE)" = "gettext"; then \ - if test -r "$(MKINSTALLDIRS)"; then \ - $(MKINSTALLDIRS) $(gettextsrcdir); \ - else \ - $(SHELL) $(top_srcdir)/mkinstalldirs $(gettextsrcdir); \ - fi; \ - $(INSTALL_DATA) $(srcdir)/Makefile.in.in \ - $(gettextsrcdir)/Makefile.in.in; \ - else \ - : ; \ - fi - - # Define this as empty until I found a useful application. - installcheck: - - uninstall: - catalogs='$(CATALOGS)'; \ - for cat in $$catalogs; do \ - cat=`basename $$cat`; \ - lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ - rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \ - rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \ - rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \ - rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \ - done - rm -f $(gettextsrcdir)/po-Makefile.in.in - - check: all - - cat-id-tbl.o: $(srcdir)/cat-id-tbl.c $(top_srcdir)/intl/libgettext.h - $(COMPILE) $(srcdir)/cat-id-tbl.c - - dvi info tags TAGS ID: - - mostlyclean: - rm -f core core.* *.pox $(PACKAGE).po *.old.po cat-id-tbl.tmp - rm -fr *.o stamp-check-pot - - clean: mostlyclean - - distclean: clean - rm -f Makefile Makefile.in POTFILES *.mo *.gmo *.msg *.cat *.cat.m - - maintainer-clean: distclean - @echo "This command is intended for maintainers to use;" - @echo "it deletes files that may require special tools to rebuild." - rm -f $(GMOFILES) cat-id-tbl.c stamp-cat-id - - distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) - dist distdir: update-po $(DISTFILES) - dists="$(DISTFILES)"; \ - for file in $$dists; do \ - ln $(srcdir)/$$file $(distdir) 2> /dev/null \ - || cp -p $(srcdir)/$$file $(distdir); \ - done - - update-po: Makefile - $(MAKE) $(srcdir)/$(PACKAGE).pot - PATH=`pwd`/../src:$$PATH; \ - cd $(srcdir); \ - catalogs='$(CATALOGS)'; \ - for cat in $$catalogs; do \ - cat=`basename $$cat`; \ - lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ - mv $$lang.po $$lang.old.po; \ - echo "$$lang:"; \ - if $(MSGMERGE) $$lang.old.po $(PACKAGE).pot -o $$lang.po; then \ - rm -f $$lang.old.po; \ - else \ - echo "msgmerge for $$cat failed!"; \ - rm -f $$lang.po; \ - mv $$lang.old.po $$lang.po; \ - fi; \ - done - - POTFILES: POTFILES.in - ( if test 'x$(srcdir)' != 'x.'; then \ - posrcprefix='$(top_srcdir)/'; \ - else \ - posrcprefix="../"; \ - fi; \ - rm -f $@-t $@ \ - && (sed -e '/^#/d' -e '/^[ ]*$$/d' \ - -e "s@.*@ $$posrcprefix& \\\\@" < $(srcdir)/$@.in \ - | sed -e '$$s/\\$$//') > $@-t \ - && chmod a-w $@-t \ - && mv $@-t $@ ) - - Makefile: Makefile.in.in ../config.status POTFILES - cd .. \ - && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \ - $(SHELL) ./config.status - - # Tell versions [3.59,3.63) of GNU make not to export all variables. - # Otherwise a system limit (for SysV at least) may be exceeded. - .NOEXPORT: --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/po/POTFILES.in gcc-3.1/gcc/po/POTFILES.in *** gcc-3.0.4/gcc/po/POTFILES.in Mon Nov 5 20:13:10 2001 --- gcc-3.1/gcc/po/POTFILES.in Thu Jan 1 00:00:00 1970 *************** *** 1,1145 **** - # List of files that contain translatable strings. - # Copyright 1998 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 should list all .c and .h files in this distribution, except - # those which are directly generated from .y files; in that case, the - # .y file should be listed instead. Also, nothing in the intl, po, - # testsuite, and ginclude directories should be listed. - - # Files that are intentionally excluded should be commented out, not removed. - # To exclude a file, prepend a '#' to its name, and follow it by a space - # and a comment as to why it was excluded. - - # By convention, if any file included in this list defines a function - # with an argument whose name ends in `msgid', that function - # is expected to translate the argument before presenting it to the user. - # ../exgettext uses this convention to scan for strings that need translation. - # A function can have at most one msgid argument. - # Two functions with the same name in different programs - # must agree about which argument (if any) is a msgid. - - # NOTE: Entries must not have trailing spaces! - - # Here are some reasons why a file might be commented-out in the list below: - - # It is part of the GCC library. - - # It is meant to be executed only by GCC maintainers or installers. - # Such files do not need to be translated, - # as these people typically need to be able to read English anyway. - - # It is not yet internationalized, because it contains many strings - # that require a lot of analysis, and the file is little-used. - - acconfig.h - alias.c - basic-block.h - bb-reorder.c - bitmap.c - bitmap.h - builtins.c - c-aux-info.c - c-common.c - c-common.h - c-convert.c - c-decl.c - c-dump.c - c-dump.h - c-errors.c - c-format.c - c-lang.c - c-lex.c - c-lex.h - c-parse.y - c-pragma.c - c-pragma.h - c-semantics.c - c-tree.h - c-typeck.c - caller-save.c - calls.c - collect2.c - collect2.h - combine.c - conditions.h - config/1750a/1750a-protos.h - config/1750a/1750a.c - config/1750a/1750a.h - config/1750a/xm-1750a.h - config/a29k/a29k-protos.h - config/a29k/a29k.c - config/a29k/a29k.h - config/a29k/rtems.h - config/a29k/udi.h - config/a29k/unix.h - config/a29k/vx29k.h - config/a29k/xm-a29k.h - config/a29k/xm-unix.h - config/alpha/alpha-interix.h - config/alpha/alpha-protos.h - config/alpha/alpha.c - config/alpha/alpha.h - config/alpha/alpha32.h - config/alpha/elf.h - config/alpha/freebsd.h - config/alpha/linux-ecoff.h - config/alpha/linux-elf.h - config/alpha/linux.h - config/alpha/netbsd-elf.h - config/alpha/netbsd.h - config/alpha/openbsd.h - config/alpha/osf.h - config/alpha/osf12.h - config/alpha/osf2or3.h - config/alpha/osf5.h - config/alpha/va_list.h - config/alpha/vms.h - config/alpha/vxworks.h - config/alpha/win-nt.h - config/alpha/xm-alpha-interix.h - config/alpha/xm-alpha.h - config/alpha/xm-openbsd.h - config/alpha/xm-vms.h - config/alpha/xm-winnt.h - config/aoutos.h - config/arc/arc-protos.h - config/arc/arc.c - config/arc/arc.h - config/arc/initfini.c - config/arc/xm-arc.h - config/arm/aof.h - config/arm/aout.h - config/arm/arm-protos.h - config/arm/arm-wince-pe.h - config/arm/arm.c - config/arm/arm.h - config/arm/coff.h - config/arm/conix-elf.h - config/arm/ecos-elf.h - config/arm/elf.h - config/arm/linux-elf.h - config/arm/linux-gas.h - config/arm/netbsd.h - config/arm/pe.c - config/arm/pe.h - config/arm/riscix.h - config/arm/riscix1-1.h - config/arm/rix-gas.h - config/arm/rtems-elf.h - config/arm/semi.h - config/arm/semiaof.h - config/arm/strongarm-coff.h - config/arm/strongarm-elf.h - config/arm/strongarm-pe.h - config/arm/uclinux-elf.h - config/arm/unknown-elf-oabi.h - config/arm/unknown-elf.h - config/arm/vxarm.h - config/arm/xm-arm.h - config/arm/xm-linux.h - config/arm/xscale-coff.h - config/arm/xscale-elf.h - config/avr/avr-protos.h - config/avr/avr.c - config/avr/avr.h - config/avr/xm-avr.h - config/c4x/c4x-protos.h - config/c4x/c4x.c - config/c4x/c4x.h - config/c4x/rtems.h - config/c4x/xm-c4x.h - config/clipper/clipper-protos.h - config/clipper/clipper.c - config/clipper/clipper.h - config/clipper/clix.h - config/clipper/xm-clix.h - config/convex/convex-protos.h - config/convex/convex.c - config/convex/convex.h - config/convex/xm-convex.h - config/d30v/d30v-protos.h - config/d30v/d30v.c - config/d30v/d30v.h - config/d30v/xm-d30v.h - config/dbx.h - config/dbxcoff.h - config/dbxelf.h - config/divmod.c - config/dsp16xx/dsp16xx-protos.h - config/dsp16xx/dsp16xx.c - config/dsp16xx/dsp16xx.h - config/dsp16xx/xm-dsp16xx.h - config/elfos.h - config/elxsi/elxsi-protos.h - config/elxsi/elxsi.c - config/elxsi/elxsi.h - config/elxsi/xm-elxsi.h - #config/float-c4x.h is part of the GCC library - #config/float-i128.h is part of the GCC library - #config/float-i32.h is part of the GCC library - #config/float-i386.h is part of the GCC library - #config/float-i64.h is part of the GCC library - #config/float-m68k.h is part of the GCC library - #config/float-sh.h is part of the GCC library - #config/float-sparc.h is part of the GCC library - #config/float-vax.h is part of the GCC library - config/fp-bit.c - config/fp-bit.h - config/fr30/fr30-protos.h - config/fr30/fr30.c - config/fr30/fr30.h - config/fr30/xm-fr30.h - config/freebsd-nthr.h - config/freebsd.h - config/freebsd3.h - config/freebsd4.h - config/freebsd5.h - config/freebsd6.h - config/gnu.h - config/gofast.h - config/h8300/h8300-protos.h - config/h8300/h8300.c - config/h8300/h8300.h - config/h8300/rtems.h - config/h8300/xm-h8300.h - config/i370/i370-protos.h - config/i370/i370.c - config/i370/i370.h - config/i370/linux.h - config/i370/mvs.h - config/i370/oe.h - config/i370/xm-i370.h - config/i370/xm-linux.h - config/i370/xm-mvs.h - config/i370/xm-oe.h - config/i386/386bsd.h - config/i386/aix386.h - config/i386/aix386ng.h - config/i386/att.h - config/i386/beos-elf.h - config/i386/beos-pe.h - config/i386/bsd.h - config/i386/bsd386.h - config/i386/chorus.h - config/i386/crtdll.h - config/i386/cygwin.h - config/i386/dgux.c - config/i386/dgux.h - config/i386/djgpp-rtems.h - config/i386/djgpp.h - config/i386/freebsd-aout.h - config/i386/freebsd.h - config/i386/gas.h - config/i386/gmon-sol2.c - config/i386/gnu.h - config/i386/gstabs.h - config/i386/i386-aout.h - config/i386/i386-coff.h - config/i386/i386-interix.h - config/i386/i386-protos.h - config/i386/i386.c - config/i386/i386.h - config/i386/i386elf.h - config/i386/interix.c - config/i386/isc.h - config/i386/isccoff.h - config/i386/iscdbx.h - config/i386/linux-aout.h - config/i386/linux-oldld.h - config/i386/linux.h - config/i386/lynx-ng.h - config/i386/lynx.h - config/i386/mach.h - config/i386/mingw32.h - config/i386/moss.h - config/i386/netbsd.h - config/i386/netware.h - config/i386/next.h - config/i386/openbsd.h - config/i386/os2.h - config/i386/osf1elf.h - config/i386/osf1elfgdb.h - config/i386/osfelf.h - config/i386/osfrose.h - config/i386/perform.h - config/i386/ptx4-i.h - config/i386/rtems.h - config/i386/rtemself.h - config/i386/sco.h - config/i386/sco4.h - config/i386/sco4dbx.h - config/i386/sco5.h - config/i386/scodbx.h - config/i386/seq-gas.h - config/i386/seq-sysv3.h - config/i386/seq2-sysv3.h - config/i386/sequent.h - config/i386/sol2.h - config/i386/sol2gas.h - config/i386/sun.h - config/i386/sun386.h - config/i386/svr3dbx.h - config/i386/svr3gas.h - config/i386/sysv3.h - config/i386/sysv4.h - config/i386/sysv5.h - config/i386/udk.h - config/i386/unix.h - config/i386/uwin.h - config/i386/v3gas.h - config/i386/vsta.h - config/i386/vxi386.h - config/i386/win-nt.h - config/i386/win32.h - config/i386/winnt.c - config/i386/xm-aix.h - config/i386/xm-beos.h - config/i386/xm-bsd386.h - config/i386/xm-cygwin.h - config/i386/xm-dgux.h - config/i386/xm-djgpp.h - config/i386/xm-dos.h - config/i386/xm-freebsd.h - config/i386/xm-gnu.h - config/i386/xm-i386-interix.h - config/i386/xm-i386.h - config/i386/xm-isc.h - config/i386/xm-linux.h - config/i386/xm-lynx.h - config/i386/xm-mingw32.h - config/i386/xm-next.h - config/i386/xm-openbsd.h - config/i386/xm-os2.h - config/i386/xm-osf.h - config/i386/xm-osf1elf.h - config/i386/xm-sco.h - config/i386/xm-sco5.h - config/i386/xm-sun.h - config/i386/xm-sysv3.h - config/i386/xm-sysv4.h - config/i386/xm-vsta.h - config/i386/xm-winnt.h - config/i860/bsd-gas.h - config/i860/bsd.h - config/i860/fx2800.h - config/i860/i860-protos.h - config/i860/i860.c - config/i860/i860.h - config/i860/mach.h - config/i860/paragon.h - config/i860/sysv3.h - config/i860/sysv4.h - config/i860/xm-fx2800.h - config/i860/xm-i860.h - config/i960/i960-coff.h - config/i960/i960-protos.h - config/i960/i960.c - config/i960/i960.h - config/i960/rtems.h - config/i960/vx960-coff.h - config/i960/vx960.h - config/i960/xm-i960.h - config/ia64/elf.h - config/ia64/freebsd.h - config/ia64/fde-glibc.c - config/ia64/hpux.h - config/ia64/ia64-protos.h - config/ia64/ia64.c - config/ia64/ia64.h - config/ia64/ia64intrin.h - config/ia64/linux.h - config/ia64/sysv4.h - config/ia64/unwind-ia64.c - config/ia64/unwind-ia64.h - config/ia64/xm-ia64.h - config/interix.h - config/libgloss.h - config/linux-aout.h - config/linux.h - config/lynx-ng.h - config/lynx.h - config/m32r/initfini.c - config/m32r/m32r-protos.h - config/m32r/m32r.c - config/m32r/m32r.h - config/m32r/xm-m32r.h - config/m68hc11/m68hc11-protos.h - config/m68hc11/m68hc11.c - config/m68hc11/m68hc11.h - config/m68hc11/m68hc12.h - config/m68hc11/xm-m68hc11.h - config/m68k/3b1.h - config/m68k/3b1g.h - config/m68k/a-ux.h - config/m68k/altos3068.h - config/m68k/amix.h - config/m68k/apollo68.h - config/m68k/atari.h - config/m68k/aux-crt1.c - config/m68k/aux-exit.c - config/m68k/aux-mcount.c - config/m68k/auxas.h - config/m68k/auxgas.h - config/m68k/auxgld.h - config/m68k/auxld.h - config/m68k/ccur-GAS.h - config/m68k/coff.h - config/m68k/crds.h - config/m68k/ctix.h - config/m68k/dpx2.h - config/m68k/dpx2cdbx.h - config/m68k/dpx2g.h - config/m68k/fpgnulib.c - config/m68k/hp2bsd.h - config/m68k/hp310.h - config/m68k/hp310g.h - config/m68k/hp320.h - config/m68k/hp320g.h - config/m68k/hp3bsd.h - config/m68k/hp3bsd44.h - config/m68k/hpux7.h - config/m68k/isi-nfp.h - config/m68k/isi.h - config/m68k/linux-aout.h - config/m68k/linux.h - config/m68k/lynx-ng.h - config/m68k/lynx.h - config/m68k/m68020-elf.h - config/m68k/m68k-aout.h - config/m68k/m68k-coff.h - config/m68k/m68k-none.h - config/m68k/m68k-protos.h - config/m68k/m68k-psos.h - config/m68k/m68k.c - config/m68k/m68k.h - config/m68k/m68kelf.h - config/m68k/m68kemb.h - config/m68k/m68kv4.h - config/m68k/mot3300.h - config/m68k/netbsd.h - config/m68k/news.h - config/m68k/news3.h - config/m68k/news3gas.h - config/m68k/newsgas.h - config/m68k/next.h - config/m68k/next21.h - config/m68k/openbsd.h - config/m68k/pbb.h - config/m68k/plexus.h - config/m68k/rtems.h - config/m68k/rtemself.h - config/m68k/sgs.h - config/m68k/sun2.h - config/m68k/sun2o4.h - config/m68k/sun3.h - config/m68k/sun3mach.h - config/m68k/sun3n.h - config/m68k/sun3n3.h - config/m68k/sun3o3.h - config/m68k/tower-as.h - config/m68k/tower.h - config/m68k/vxm68k.h - config/m68k/xm-3b1.h - config/m68k/xm-altos3068.h - config/m68k/xm-amix.h - config/m68k/xm-atari.h - config/m68k/xm-aux.h - config/m68k/xm-crds.h - config/m68k/xm-hp320.h - config/m68k/xm-linux.h - config/m68k/xm-lynx.h - config/m68k/xm-m68k.h - config/m68k/xm-m68kv.h - config/m68k/xm-mot3300.h - config/m68k/xm-next.h - config/m68k/xm-openbsd.h - config/m68k/xm-plexus.h - config/m68k/xm-sun3.h - config/m68k/xm-tower.h - config/m88k/aout-dbx.h - config/m88k/dgux.h - config/m88k/dguxbcs.h - config/m88k/dolph.h - config/m88k/luna.h - config/m88k/m88k-aout.h - config/m88k/m88k-coff.h - config/m88k/m88k-protos.h - config/m88k/m88k.c - config/m88k/m88k.h - config/m88k/openbsd.h - config/m88k/sysv3.h - config/m88k/sysv4.h - config/m88k/tekXD88.h - config/m88k/xm-m88k.h - config/m88k/xm-openbsd.h - config/m88k/xm-sysv3.h - config/mcore/gfloat.h - config/mcore/mcore-elf.h - config/mcore/mcore-pe.h - config/mcore/mcore-protos.h - config/mcore/mcore.c - config/mcore/mcore.h - config/mcore/xm-mcore.h - config/mips/abi64.h - config/mips/bsd-4.h - config/mips/bsd-5.h - config/mips/cross64.h - config/mips/dec-bsd.h - config/mips/dec-osf1.h - config/mips/ecoff.h - config/mips/ecoffl.h - config/mips/elf.h - config/mips/elf64.h - config/mips/elfl.h - config/mips/elfl64.h - config/mips/elflorion.h - config/mips/elforion.h - config/mips/gnu.h - config/mips/iris3.h - config/mips/iris4.h - config/mips/iris4loser.h - config/mips/iris5.h - config/mips/iris5gas.h - config/mips/iris6.h - config/mips/iris6gld.h - config/mips/linux.h - config/mips/mips-5.h - config/mips/mips-protos.h - config/mips/mips.c - config/mips/mips.h - config/mips/netbsd.h - config/mips/news4.h - config/mips/news5.h - config/mips/nws3250v4.h - config/mips/openbsd-be.h - config/mips/openbsd.h - config/mips/osfrose.h - config/mips/r3900.h - config/mips/rtems.h - config/mips/rtems64.h - config/mips/sni-gas.h - config/mips/sni-svr4.h - config/mips/svr3-4.h - config/mips/svr3-5.h - config/mips/svr4-4.h - config/mips/svr4-5.h - config/mips/svr4-t.h - config/mips/ultrix.h - config/mips/vxworks.h - config/mips/xm-iris3.h - config/mips/xm-iris4.h - config/mips/xm-iris5.h - config/mips/xm-iris6.h - config/mips/xm-mips.h - config/mips/xm-nws3250v4.h - config/mips/xm-openbsd.h - config/mips/xm-sysv.h - config/mn10200/mn10200-protos.h - config/mn10200/mn10200.c - config/mn10200/mn10200.h - config/mn10200/xm-mn10200.h - config/mn10300/mn10300-protos.h - config/mn10300/mn10300.c - config/mn10300/mn10300.h - config/mn10300/xm-mn10300.h - config/netbsd.h - config/netware.h - config/nextstep.c - config/nextstep.h - config/nextstep21.h - config/ns32k/encore.h - config/ns32k/merlin.h - config/ns32k/netbsd.h - config/ns32k/ns32k-protos.h - config/ns32k/ns32k.c - config/ns32k/ns32k.h - config/ns32k/pc532-mach.h - config/ns32k/pc532-min.h - config/ns32k/pc532.h - config/ns32k/sequent.h - config/ns32k/tek6000.h - config/ns32k/tek6100.h - config/ns32k/tek6200.h - config/ns32k/xm-netbsd.h - config/ns32k/xm-ns32k.h - config/ns32k/xm-pc532-min.h - config/openbsd.h - config/pa/elf.h - config/pa/long_double.h - config/pa/pa-64.h - config/pa/pa-gas.h - config/pa/pa-hiux.h - config/pa/pa-hpux.h - config/pa/pa-hpux10.h - config/pa/pa-hpux11.h - config/pa/pa-hpux7.h - config/pa/pa-hpux9.h - config/pa/pa-linux.h - config/pa/pa-oldas.h - config/pa/pa-osf.h - config/pa/pa-pro-end.h - config/pa/pa-protos.h - config/pa/pa.c - config/pa/pa.h - config/pa/pa32-regs.h - config/pa/pa64-regs.h - config/pa/pa64-start.h - config/pa/quadlib.c - config/pa/rtems.h - config/pa/som.h - config/pa/xm-linux.h - config/pa/xm-pa.h - config/pa/xm-pa64hpux.h - config/pa/xm-pahpux.h - config/pa/xm-papro.h - config/pdp11/2bsd.h - config/pdp11/pdp11-protos.h - config/pdp11/pdp11.c - config/pdp11/pdp11.h - config/pdp11/xm-pdp11.h - config/pj/linux.h - config/pj/pj-protos.h - config/pj/pj.c - config/pj/pj.h - config/pj/pjl.h - config/pj/xm-pj.h - config/psos.h - config/ptx4.h - config/romp/romp-protos.h - config/romp/romp.c - config/romp/romp.h - config/romp/xm-romp.h - config/rs6000/aix.h - config/rs6000/aix31.h - config/rs6000/aix3newas.h - config/rs6000/aix41.h - config/rs6000/aix43.h - config/rs6000/aix51.h - config/rs6000/beos.h - config/rs6000/chorus.h - config/rs6000/eabi.h - config/rs6000/eabiaix.h - config/rs6000/eabisim.h - config/rs6000/linux.h - config/rs6000/lynx.h - config/rs6000/mach.h - config/rs6000/netbsd.h - config/rs6000/rs6000-protos.h - config/rs6000/rs6000.c - config/rs6000/rs6000.h - config/rs6000/rtems.h - #config/rs6000/sol-c0.c is part of the GCC library - config/rs6000/sol2.h - config/rs6000/sysv4.h - config/rs6000/sysv4le.h - config/rs6000/vxppc.h - config/rs6000/xm-beos.h - config/rs6000/xm-cygwin.h - config/rs6000/xm-darwin.h - config/rs6000/xm-lynx.h - config/rs6000/xm-mach.h - config/rs6000/xm-rs6000.h - config/rs6000/xm-sysv4.h - config/rtems.h - config/sh/elf.h - config/sh/linux.h - config/sh/rtems.h - config/sh/rtemself.h - config/sh/sh-protos.h - config/sh/sh.c - config/sh/sh.h - config/sh/xm-sh.h - config/s390/linux.h - config/s390/linux64.h - config/s390/s390-protos.h - config/s390/s390.c - config/s390/s390.h - config/s390/xm-s390.h - config/s390/xm-s390x.h - config/sparc/aout.h - config/sparc/bsd.h - config/sparc/chorus.h - config/sparc/elf.h - config/sparc/gmon-sol2.c - config/sparc/hal.h - config/sparc/linux-aout.h - config/sparc/linux.h - config/sparc/linux64.h - config/sparc/lite.h - config/sparc/litecoff.h - config/sparc/liteelf.h - config/sparc/lynx-ng.h - config/sparc/lynx.h - config/sparc/netbsd.h - config/sparc/openbsd.h - config/sparc/pbd.h - config/sparc/rtems.h - config/sparc/rtemself.h - config/sparc/sol2-64.h - config/sparc/sol2-sld-64.h - config/sparc/sol2-sld.h - config/sparc/sol2.h - config/sparc/sp64-aout.h - config/sparc/sp64-elf.h - config/sparc/sp86x-aout.h - config/sparc/sp86x-elf.h - config/sparc/sparc-protos.h - config/sparc/sparc.c - config/sparc/sparc.h - config/sparc/splet.h - config/sparc/sun4gas.h - config/sparc/sun4o3.h - config/sparc/sunos4.h - config/sparc/sysv4.h - config/sparc/vxsim.h - config/sparc/vxsparc.h - config/sparc/vxsparc64.h - config/sparc/xm-linux.h - config/sparc/xm-lynx.h - config/sparc/xm-openbsd.h - config/sparc/xm-pbd.h - config/sparc/xm-sol2.h - config/sparc/xm-sp64.h - config/sparc/xm-sparc.h - config/sparc/xm-sysv4-64.h - config/sparc/xm-sysv4.h - config/svr3.h - config/svr4.h - config/tm-dwarf2.h - config/udivmod.c - config/udivmodsi4.c - config/usegas.h - config/v850/rtems.h - config/v850/v850-c.c - config/v850/v850-protos.h - config/v850/v850.c - config/v850/v850.h - config/v850/xm-v850.h - config/vax/netbsd.h - config/vax/openbsd.h - config/vax/openbsd1.h - config/vax/ultrix.h - config/vax/vax-protos.h - config/vax/vax.c - config/vax/vax.h - config/vax/vaxv.h - config/vax/vms.h - config/vax/xm-vax.h - config/vax/xm-vaxv.h - config/vax/xm-vms.h - config/we32k/we32k-protos.h - config/we32k/we32k.c - config/we32k/we32k.h - config/we32k/xm-we32k.h - config/xm-alloca.h - config/xm-freebsd.h - config/xm-gnu.h - config/xm-interix.h - config/xm-linux.h - config/xm-lynx.h - config/xm-openbsd.h - config/xm-std32.h - config/xm-svr3.h - config/xm-svr4.h - conflict.c - convert.c - convert.h - cp/call.c - cp/cfns.h - cp/class.c - cp/cp-tree.h - cp/cvt.c - cp/decl.c - cp/decl.h - cp/decl2.c - cp/dump.c - cp/errfn.c - cp/error.c - cp/except.c - cp/expr.c - cp/friend.c - cp/g++spec.c - cp/init.c - cp/lang-options.h - cp/lang-specs.h - cp/lex.c - cp/lex.h - cp/mangle.c - cp/method.c - cp/optimize.c - cp/parse.y - cp/pt.c - cp/ptree.c - cp/repo.c - cp/rtti.c - cp/search.c - cp/semantics.c - cp/spew.c - cp/tree.c - cp/typeck.c - cp/typeck2.c - cp/xref.c - cppdefault.c - cppdefault.h - cpperror.c - cppexp.c - cppfiles.c - cpphash.c - cpphash.h - cppinit.c - cpplex.c - cpplib.c - cpplib.h - cppmacro.c - cppmain.c - cppspec.c - #crtstuff.c is part of the GCC library - cse.c - cselib.h - dbxout.c - dbxout.h - dbxstclass.h - dce.c - defaults.h - dependence.c - diagnostic.c - diagnostic.h - doloop.c - dominance.c - doprint.c - doschk.c - dwarf.h - dwarf2.h - dwarf2asm.c - dwarf2asm.h - dwarf2out.c - dwarf2out.h - dwarfout.c - dwarfout.h - emit-rtl.c - #enquire.c is used only by GCC maintainers and installers - errors.c - errors.h - except.c - except.h - explow.c - expmed.c - expr.c - expr.h - f/ansify.c - f/bad.c - f/bad.h - f/bit.c - f/bit.h - f/bld.c - f/bld.h - f/com.c - f/com.h - f/data.c - f/data.h - f/equiv.c - f/equiv.h - f/expr.c - f/expr.h - f/fini.c - f/g77spec.c - f/global.c - f/global.h - f/implic.c - f/implic.h - f/info.c - f/info.h - f/intdoc.c - f/intrin.c - f/intrin.h - f/lab.c - f/lab.h - f/lang-options.h - f/lang-specs.h - f/lex.c - f/lex.h - f/malloc.c - f/malloc.h - f/name.c - f/name.h - f/parse.c - f/proj.c - f/proj.h - f/src.c - f/src.h - f/st.c - f/st.h - f/sta.c - f/sta.h - f/stb.c - f/stb.h - f/stc.c - f/stc.h - f/std.c - f/std.h - f/ste.c - f/ste.h - f/storag.c - f/storag.h - f/stp.c - f/stp.h - f/str.c - f/str.h - f/sts.c - f/sts.h - f/stt.c - f/stt.h - f/stu.c - f/stu.h - f/stv.c - f/stv.h - f/stw.c - f/stw.h - f/symbol.c - f/symbol.h - f/target.c - f/target.h - f/top.c - f/top.h - f/type.c - f/type.h - f/version.c - f/version.h - f/where.c - f/where.h - final.c - #fix-header.c is used only by GCC maintainers and installers - flags.h - floatlib.c - flow.c - fold-const.c - fp-test.c - #frame.h is part of the GCC library - function.c - function.h - gansidecl.h - gcc.c - gcc.h - gccspec.c - gcov-io.h - gcov.c - gcse.c - #gbl-ctors.h is part of the GCC library - #gen-protos.c is used only by GCC maintainers and installers - #genattr.c is used only by GCC maintainers and installers - #genattrtab.c is used only by GCC maintainers and installers - #gencheck.c is used only by GCC maintainers and installers - #gencodes.c is used only by GCC maintainers and installers - #genconfig.c is used only by GCC maintainers and installers - #genemit.c is used only by GCC maintainers and installers - #genextract.c is used only by GCC maintainers and installers - #genflags.c is used only by GCC maintainers and installers - #gengenrtl.c is used only by GCC maintainers and installers - #genopinit.c is used only by GCC maintainers and installers - #genoutput.c is used only by GCC maintainers and installers - #genpeep.c is used only by GCC maintainers and installers - #genrecog.c is used only by GCC maintainers and installers - #gensupport.c is used only by GCC maintainers and installers - #gensupport.h is used only by GCC maintainers and installers - ggc-callbacks.c - ggc-common.c - ggc-none.c - ggc-page.c - ggc-simple.c - ggc.h - glimits.h - global.c - gmon.c - graph.c - graph.h - gstab.h - gsyms.h - gsyslimits.h - gthr-aix.h - gthr-dce.h - gthr-posix.h - gthr-rtems.h - gthr-single.h - gthr-solaris.h - gthr-vxworks.h - gthr-win32.h - gthr.h - haifa-sched.c - halfpic.c - halfpic.h - hard-reg-set.h - hash.c - hash.h - hwint.h - ifcvt.c - input.h - insn-addr.h - integrate.c - integrate.h - intl.c - intl.h - java/boehm.c - java/buffer.c - java/buffer.h - java/chartables.h - java/check-init.c - java/class.c - java/constants.c - java/convert.h - java/decl.c - java/except.c - java/expr.c - java/gjavah.c - java/java-except.h - java/java-opcodes.h - java/java-tree.h - java/javaop.h - java/jcf-depend.c - java/jcf-dump.c - java/jcf-io.c - java/jcf-parse.c - java/jcf-path.c - java/jcf-reader.c - java/jcf-write.c - java/jcf.h - java/jv-scan.c - java/jvgenmain.c - java/jvspec.c - java/keyword.h - java/lang-options.h - java/lang-specs.h - java/lang.c - java/lex.c - java/lex.h - java/mangle.c - java/mangle_name.c - java/parse-scan.y - java/parse.y - java/typeck.c - java/verify.c - java/xref.c - java/xref.h - java/zextract.c - java/zipfile.h - jump.c - lcm.c - #libgcc1.c is part of the GCC library - #libgcc1-test.c is part of the GCC library - #libgcc2.c is part of the GCC library - #libgcc2.h is part of the GCC library - #limitx.h is part of the GCC library - #limity.h is part of the GCC library - lists.c - local-alloc.c - #longlong.h is part of the GCC library - loop.c - loop.h - machmode.h - mbchar.c - mbchar.h - mkdeps.c - mkdeps.h - #mips-tdump.c is not yet internationalized - #mips-tfile.c is not yet internationalized - objc/lang-options.h - objc/lang-specs.h - objc/objc-act.c - objc/objc-act.h - objc/objc-parse.y - optabs.c - output.h - params.c - params.h - predict.c - prefix.c - prefix.h - print-rtl.c - print-tree.c - profile.c - protoize.c - real.c - real.h - recog.c - recog.h - reg-stack.c - regclass.c - regmove.c - regrename.c - regs.h - reload.c - reload.h - reload1.c - reorg.c - resource.c - resource.h - rtl.c - rtl.h - rtlanal.c - sbitmap.c - sbitmap.h - #scan-decls.c is used only by GCC maintainers and installers - #scan.c is used only by GCC maintainers and installers - #scan.h is used only by GCC maintainers and installers - sched-deps.c - sched-ebb.c - sched-int.h - sched-rgn.c - sched-vis.c - sdbout.c - sdbout.h - sibcall.c - simplify-rtx.c - ssa.c - ssa.h - stack.h - stmt.c - stor-layout.c - stringpool.c - sys-protos.h - sys-types.h - system.h - timevar.c - timevar.h - tlink.c - toplev.c - toplev.h - tradcif.y - tradcpp.c - tradcpp.h - tree.c - tree.h - tsystem.h - typeclass.h - unprotoize.c - unroll.c - #unwind-dw2-fde.c is part of the GCC library - #unwind-dw2-fde.h is part of the GCC library - #unwind-dw2.c is part of the GCC library - #unwind-pe.h is part of the GCC library - #unwind-sjlj.c is part of the GCC library - #unwind.h is part of the GCC library - varasm.c - varray.c - varray.h - version.c - version.h - xcoffout.c - xcoffout.h --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/po/cat-id-tbl.c gcc-3.1/gcc/po/cat-id-tbl.c *** gcc-3.0.4/gcc/po/cat-id-tbl.c Wed Jun 13 00:45:34 2001 --- gcc-3.1/gcc/po/cat-id-tbl.c Thu Jan 1 00:00:00 1970 *************** *** 1,3345 **** - /* Automatically generated by po2tbl.sed from @PACKAGE@.pot. */ - - #if HAVE_CONFIG_H - # include - #endif - - #include "libgettext.h" - - const struct _msg_ent _msg_tbl[] = { - {"", 1}, - {"offset outside bounds of constant string", 2}, - {"__builtin_saveregs not supported by this target", 3}, - {"argument of `__builtin_args_info' must be constant", 4}, - {"argument of `__builtin_args_info' out of range", 5}, - {"missing argument in `__builtin_args_info'", 6}, - {"`va_start' used in function with fixed args", 7}, - {"second parameter of `va_start' not last named argument", 8}, - {"`__builtin_next_arg' called without an argument", 9}, - {"too many arguments to function `va_start'", 10}, - {"first argument to `va_arg' not of type `va_list'", 11}, - {"`%s' is promoted to `%s' when passed through `...'", 12}, - {"(so you should pass `%s' not `%s' to `va_arg')", 13}, - {"invalid arg to `__builtin_frame_address'", 14}, - {"invalid arg to `__builtin_return_address'", 15}, - {"unsupported arg to `__builtin_frame_address'", 16}, - {"unsupported arg to `__builtin_return_address'", 17}, - {"second arg to `__builtin_expect' must be a constant", 18}, - {"__builtin_longjmp second argument must be 1", 19}, - {"__builtin_trap not supported by this target", 20}, - {"built-in function `%s' not currently supported", 21}, - {"\ - string length `%d' is greater than the length `%d' ISO C%d compilers are \ - required to support", 22}, - {"`%s' attribute directive ignored", 23}, - {"`%s' attribute does not apply to types", 24}, - {"wrong number of arguments specified for `%s' attribute", 25}, - {"`%s' attribute ignored", 26}, - {"unknown machine mode `%s'", 27}, - {"no data type for mode `%s'", 28}, - {"type with more precision than %s", 29}, - {"section attribute cannot be specified for local variables", 30}, - {"section of `%s' conflicts with previous declaration", 31}, - {"section attribute not allowed for `%s'", 32}, - {"section attributes are not supported for this target", 33}, - {"requested alignment is not a constant", 34}, - {"requested alignment is not a power of 2", 35}, - {"requested alignment is too large", 36}, - {"alignment may not be specified for `%s'", 37}, - {"`%s' defined both normally and as an alias", 38}, - {"alias arg not a string", 39}, - {"`%s' attribute applies only to functions", 40}, - {"can't set `%s' attribute after definition", 41}, - {"overflow in constant expression", 42}, - {"integer overflow in expression", 43}, - {"floating point overflow in expression", 44}, - {"large integer implicitly truncated to unsigned type", 45}, - {"negative integer implicitly converted to unsigned type", 46}, - {"overflow in implicit constant conversion", 47}, - {"operation on `%s' may be undefined", 48}, - {"expression statement has incomplete type", 49}, - {"case label does not reduce to an integer constant", 50}, - {"invalid truth-value expression", 51}, - {"invalid operands to binary %s", 52}, - {"comparison is always false due to limited range of data type", 53}, - {"comparison is always true due to limited range of data type", 54}, - {"comparison of unsigned expression >= 0 is always true", 55}, - {"comparison of unsigned expression < 0 is always false", 56}, - {"struct type value used where scalar is required", 57}, - {"union type value used where scalar is required", 58}, - {"array type value used where scalar is required", 59}, - {"suggest parentheses around assignment used as truth value", 60}, - {"invalid use of `restrict'", 61}, - {"too few arguments to function `%s'", 62}, - {"too many arguments to function `%s'", 63}, - {"pointers are not permitted as case values", 64}, - {"ISO C++ forbids range expressions in switch statements", 65}, - {"ISO C forbids range expressions in switch statements", 66}, - {"empty range specified", 67}, - {"duplicate (or overlapping) case value", 68}, - {"this is the first entry overlapping that value", 69}, - {"duplicate case value", 70}, - {"previously used here", 71}, - {"multiple default labels in one switch", 72}, - {"this is the first default label", 73}, - {"-Wformat-y2k ignored without -Wformat", 74}, - {"-Wformat-extra-args ignored without -Wformat", 75}, - {"-Wformat-nonliteral ignored without -Wformat", 76}, - {"-Wformat-security ignored without -Wformat", 77}, - {"-Wmissing-format-attribute ignored without -Wformat", 78}, - {"void value not ignored as it ought to be", 79}, - {"conversion to non-scalar type requested", 80}, - {"unknown C standard `%s'", 81}, - {"array `%s' assumed to have one element", 82}, - {"`struct %s' incomplete in scope ending here", 83}, - {"`union %s' incomplete in scope ending here", 84}, - {"`enum %s' incomplete in scope ending here", 85}, - {"label `%s' used but not defined", 86}, - {"label `%s' defined but not used", 87}, - {"shadowing built-in function `%s'", 88}, - {"shadowing library function `%s'", 89}, - {"library function `%s' declared as non-function", 90}, - {"built-in function `%s' declared as non-function", 91}, - {"`%s' redeclared as different kind of symbol", 92}, - {"previous declaration of `%s'", 93}, - {"conflicting types for built-in function `%s'", 94}, - {"conflicting types for `%s'", 95}, - {"\ - A parameter list with an ellipsis can't match an empty parameter name list \ - declaration.", 96}, - {"\ - An argument type that has a default promotion can't match an empty parameter \ - name list declaration.", 97}, - {"redefinition of `%s'", 98}, - {"redeclaration of `%s'", 99}, - {"conflicting declarations of `%s'", 100}, - {"`%s' previously defined here", 101}, - {"`%s' previously declared here", 102}, - {"prototype for `%s' follows", 103}, - {"non-prototype definition here", 104}, - {"prototype for `%s' follows and number of arguments doesn't match", 105}, - {"prototype for `%s' follows and argument %d doesn't match", 106}, - {"`%s' declared inline after being called", 107}, - {"`%s' declared inline after its definition", 108}, - {"static declaration for `%s' follows non-static", 109}, - {"non-static declaration for `%s' follows static", 110}, - {"const declaration for `%s' follows non-const", 111}, - {"type qualifiers for `%s' conflict with previous decl", 112}, - {"redundant redeclaration of `%s' in same scope", 113}, - {"nested extern declaration of `%s'", 114}, - {"`%s' used prior to declaration", 115}, - {"`%s' was declared implicitly `extern' and later `static'", 116}, - {"type mismatch with previous external decl", 117}, - {"previous external decl of `%s'", 118}, - {"type mismatch with previous implicit declaration", 119}, - {"previous implicit declaration of `%s'", 120}, - {"type of external `%s' is not global", 121}, - {"`%s' was previously implicitly declared to return `int'", 122}, - {"`%s' was declared `extern' and later `static'", 123}, - {"extern declaration of `%s' doesn't match global one", 124}, - {"`%s' locally external but globally static", 125}, - {"declaration of `%s' shadows a parameter", 126}, - {"declaration of `%s' shadows a symbol from the parameter list", 127}, - {"declaration of `%s' shadows previous local", 128}, - {"declaration of `%s' shadows global declaration", 129}, - {"function `%s' was previously declared within a block", 130}, - {"implicit declaration of function `%s'", 131}, - {"label %s referenced outside of any function", 132}, - {"duplicate label declaration `%s'", 133}, - {"this is a previous declaration", 134}, - {"unnamed struct/union that defines no instances", 135}, - {"useless keyword or type name in empty declaration", 136}, - {"two types specified in one empty declaration", 137}, - {"empty declaration", 138}, - {"`%s' is usually a function", 139}, - {"typedef `%s' is initialized", 140}, - {"function `%s' is initialized like a variable", 141}, - {"parameter `%s' is initialized", 142}, - {"variable-sized object may not be initialized", 143}, - {"variable `%s' has initializer but incomplete type", 144}, - {"elements of array `%s' have incomplete type", 145}, - {"declaration of `%s' has `extern' and is initialized", 146}, - {"initializer fails to determine size of `%s'", 147}, - {"array size missing in `%s'", 148}, - {"zero or negative size array `%s'", 149}, - {"storage size of `%s' isn't known", 150}, - {"storage size of `%s' isn't constant", 151}, - {"ignoring asm-specifier for non-static local variable `%s'", 152}, - {"ANSI C forbids parameter `%s' shadowing typedef", 153}, - {"`long long long' is too long for GCC", 154}, - {"ISO C89 does not support `long long'", 155}, - {"duplicate `%s'", 156}, - {"two or more data types in declaration of `%s'", 157}, - {"`%s' fails to be a typedef or built in type", 158}, - {"type defaults to `int' in declaration of `%s'", 159}, - {"both long and short specified for `%s'", 160}, - {"long or short specified with char for `%s'", 161}, - {"long or short specified with floating type for `%s'", 162}, - {"the only valid combination is `long double'", 163}, - {"both signed and unsigned specified for `%s'", 164}, - {"long, short, signed or unsigned invalid for `%s'", 165}, - {"long, short, signed or unsigned used invalidly for `%s'", 166}, - {"complex invalid for `%s'", 167}, - {"ISO C89 does not support complex types", 168}, - {"ISO C does not support plain `complex' meaning `double complex'", 169}, - {"ISO C does not support complex integer types", 170}, - {"duplicate `const'", 171}, - {"duplicate `restrict'", 172}, - {"duplicate `volatile'", 173}, - {"multiple storage classes in declaration of `%s'", 174}, - {"function definition declared `auto'", 175}, - {"function definition declared `register'", 176}, - {"function definition declared `typedef'", 177}, - {"storage class specified for structure field `%s'", 178}, - {"storage class specified for parameter `%s'", 179}, - {"storage class specified for typename", 180}, - {"`%s' initialized and declared `extern'", 181}, - {"`%s' has both `extern' and initializer", 182}, - {"nested function `%s' declared `extern'", 183}, - {"top-level declaration of `%s' specifies `auto'", 184}, - {"declaration of `%s' as array of voids", 185}, - {"declaration of `%s' as array of functions", 186}, - {"size of array `%s' has non-integer type", 187}, - {"ISO C forbids zero-size array `%s'", 188}, - {"size of array `%s' is negative", 189}, - {"ISO C89 forbids array `%s' whose size can't be evaluated", 190}, - {"ISO C89 forbids variable-size array `%s'", 191}, - {"size of array `%s' is too large", 192}, - {"ISO C89 does not support flexible array members", 193}, - {"array type has incomplete element type", 194}, - {"ANSI C forbids const or volatile function types", 195}, - {"`%s' declared as function returning a function", 196}, - {"`%s' declared as function returning an array", 197}, - {"ISO C forbids qualified void function return type", 198}, - {"type qualifiers ignored on function return type", 199}, - {"ISO C forbids qualified function types", 200}, - {"invalid type modifier within pointer declarator", 201}, - {"ISO C forbids const or volatile function types", 202}, - {"variable or field `%s' declared void", 203}, - {"field `%s' declared as a function", 204}, - {"field `%s' has incomplete type", 205}, - {"invalid storage class for function `%s'", 206}, - {"`noreturn' function returns non-void value", 207}, - {"cannot inline function `main'", 208}, - {"variable `%s' declared `inline'", 209}, - {"function declaration isn't a prototype", 210}, - {"parameter names (without types) in function declaration", 211}, - {"parameter `%s' has incomplete type", 212}, - {"parameter has incomplete type", 213}, - {"parameter `%s' points to incomplete type", 214}, - {"parameter points to incomplete type", 215}, - {"parameter `%s' has just a forward declaration", 216}, - {"`void' in parameter list must be the entire list", 217}, - {"`%s %s' declared inside parameter list", 218}, - {"anonymous struct declared inside parameter list", 219}, - {"anonymous union declared inside parameter list", 220}, - {"anonymous enum declared inside parameter list", 221}, - {"\ - its scope is only this definition or declaration, which is probably not what \ - you want.", 222}, - {"redefinition of `%s %s'", 223}, - {"%s defined inside parms", 224}, - {"union", 225}, - {"structure", 226}, - {"%s has no %s", 227}, - {"struct", 228}, - {"named members", 229}, - {"members", 230}, - {"nested redefinition of `%s'", 231}, - {"bit-field `%s' width not an integer constant", 232}, - {"bit-field `%s' has invalid type", 233}, - {"bit-field `%s' type invalid in ISO C", 234}, - {"negative width in bit-field `%s'", 235}, - {"width of `%s' exceeds its type", 236}, - {"zero width for bit-field `%s'", 237}, - {"`%s' is narrower than values of its type", 238}, - {"flexible array member in union", 239}, - {"flexible array member not at end of struct", 240}, - {"flexible array member in otherwise empty struct", 241}, - {"duplicate member `%s'", 242}, - {"union cannot be made transparent", 243}, - {"redeclaration of `enum %s'", 244}, - {"enum defined inside parms", 245}, - {"enumeration values exceed range of largest integer", 246}, - {"enumerator value for `%s' not integer constant", 247}, - {"overflow in enumeration values", 248}, - {"ISO C restricts enumerator values to range of `int'", 249}, - {"return type is an incomplete type", 250}, - {"return type defaults to `int'", 251}, - {"no previous prototype for `%s'", 252}, - {"`%s' was used with no prototype before its definition", 253}, - {"no previous declaration for `%s'", 254}, - {"`%s' was used with no declaration before its definition", 255}, - {"return type of `%s' is not `int'", 256}, - {"first argument of `%s' should be `int'", 257}, - {"second argument of `%s' should be `char **'", 258}, - {"third argument of `%s' should probably be `char **'", 259}, - {"`%s' takes only zero or two arguments", 260}, - {"`%s' is normally a non-static function", 261}, - {"parm types given both in parmlist and separately", 262}, - {"parameter name omitted", 263}, - {"parameter `%s' declared void", 264}, - {"parameter name missing from parameter list", 265}, - {"multiple parameters named `%s'", 266}, - {"type of `%s' defaults to `int'", 267}, - {"declaration for parameter `%s' but no such parameter", 268}, - {"number of arguments doesn't match prototype", 269}, - {"promoted argument `%s' doesn't match prototype", 270}, - {"argument `%s' doesn't match prototype", 271}, - {"type of parameter `%s' is not declared", 272}, - {"this function may return with or without a value", 273}, - {"size of return value of `%s' is %u bytes", 274}, - {"size of return value of `%s' is larger than %d bytes", 275}, - {"`for' loop initial declaration used outside C99 mode", 276}, - {"`%s %s' declared in `for' loop initial declaration", 277}, - {"declaration of non-variable `%s' in `for' loop initial declaration", 278}, - {"declaration of static variable `%s' in `for' loop initial declaration", 279}, - {"declaration of `extern' variable `%s' in `for' loop initial declaration", 280}, - {"could not open dump file `%s'", 281}, - {"ignoring `%s' at end of `-f%s'", 282}, - {"argument format specified for non-function `%s'", 283}, - {"unrecognized format specifier", 284}, - {"`%s' is an unrecognized format function type", 285}, - {"format string has invalid operand number", 286}, - {"format string arg follows the args to be formatted", 287}, - {"format string arg not a string type", 288}, - {"args to be formatted is not '...'", 289}, - {"strftime formats cannot format arguments", 290}, - {"function does not return string type", 291}, - {"` ' flag", 292}, - {"the ` ' printf flag", 293}, - {"`+' flag", 294}, - {"the `+' printf flag", 295}, - {"`#' flag", 296}, - {"the `#' printf flag", 297}, - {"`0' flag", 298}, - {"the `0' printf flag", 299}, - {"`-' flag", 300}, - {"the `-' printf flag", 301}, - {"`'' flag", 302}, - {"the `'' printf flag", 303}, - {"`I' flag", 304}, - {"the `I' printf flag", 305}, - {"field width", 306}, - {"field width in printf format", 307}, - {"precision", 308}, - {"precision in printf format", 309}, - {"length modifier", 310}, - {"length modifier in printf format", 311}, - {"assignment suppression", 312}, - {"`a' flag", 313}, - {"the `a' scanf flag", 314}, - {"field width in scanf format", 315}, - {"length modifier in scanf format", 316}, - {"the `'' scanf flag", 317}, - {"the `I' scanf flag", 318}, - {"`_' flag", 319}, - {"the `_' strftime flag", 320}, - {"the `-' strftime flag", 321}, - {"the `0' strftime flag", 322}, - {"`^' flag", 323}, - {"the `^' strftime flag", 324}, - {"the `#' strftime flag", 325}, - {"field width in strftime format", 326}, - {"`E' modifier", 327}, - {"the `E' strftime modifier", 328}, - {"`O' modifier", 329}, - {"the `O' strftime modifier", 330}, - {"the `O' modifier", 331}, - {"fill character", 332}, - {"fill character in strfmon format", 333}, - {"the `^' strfmon flag", 334}, - {"the `+' strfmon flag", 335}, - {"`(' flag", 336}, - {"the `(' strfmon flag", 337}, - {"`!' flag", 338}, - {"the `!' strfmon flag", 339}, - {"the `-' strfmon flag", 340}, - {"field width in strfmon format", 341}, - {"left precision", 342}, - {"left precision in strfmon format", 343}, - {"right precision", 344}, - {"right precision in strfmon format", 345}, - {"length modifier in strfmon format", 346}, - {"function might be possible candidate for `%s' format attribute", 347}, - {"missing $ operand number in format", 348}, - {"%s does not support %%n$ operand number formats", 349}, - {"operand number out of range in format", 350}, - {"format argument %d used more than once in %s format", 351}, - {"format argument %d unused before used argument %d in $-style format", 352}, - {"format not a string literal, format string not checked", 353}, - {"format not a string literal and no format arguments", 354}, - {"format not a string literal, argument types not checked", 355}, - {"too many arguments for format", 356}, - {"unused arguments in $-style format", 357}, - {"zero-length format string", 358}, - {"format is a wide character string", 359}, - {"unterminated format string", 360}, - {"null format string", 361}, - {"embedded `\\0' in format", 362}, - {"spurious trailing `%%' in format", 363}, - {"repeated %s in format", 364}, - {"missing fill character at end of strfmon format", 365}, - {"too few arguments for format", 366}, - {"zero width in %s format", 367}, - {"empty left precision in %s format", 368}, - {"field precision", 369}, - {"empty precision in %s format", 370}, - {"%s does not support the `%s' %s length modifier", 371}, - {"conversion lacks type at end of format", 372}, - {"unknown conversion type character `%c' in format", 373}, - {"unknown conversion type character 0x%x in format", 374}, - {"%s does not support the `%%%c' %s format", 375}, - {"%s used with `%%%c' %s format", 376}, - {"%s does not support %s", 377}, - {"%s does not support %s with the `%%%c' %s format", 378}, - {"%s ignored with %s and `%%%c' %s format", 379}, - {"%s ignored with %s in %s format", 380}, - {"use of %s and %s together with `%%%c' %s format", 381}, - {"use of %s and %s together in %s format", 382}, - {"`%%%c' yields only last 2 digits of year in some locales", 383}, - {"`%%%c' yields only last 2 digits of year", 384}, - {"no closing `]' for `%%[' format", 385}, - {"use of `%s' length modifier with `%c' type character", 386}, - {"%s does not support the `%%%s%c' %s format", 387}, - {"operand number specified with suppressed assignment", 388}, - {"operand number specified for format taking no argument", 389}, - {"writing through null pointer (arg %d)", 390}, - {"reading through null pointer (arg %d)", 391}, - {"writing into constant object (arg %d)", 392}, - {"extra type qualifiers in format argument (arg %d)", 393}, - {"format argument is not a pointer (arg %d)", 394}, - {"format argument is not a pointer to a pointer (arg %d)", 395}, - {"%s is not type %s (arg %d)", 396}, - {"%s format, %s arg (arg %d)", 397}, - {"badly nested C headers from preprocessor", 398}, - {"leaving more files than we entered", 399}, - {"ignoring #pragma %s %s", 400}, - {"ignoring #pragma %s", 401}, - {"incomplete universal-character-name", 402}, - {"non hex digit '%c' in universal-character-name", 403}, - {"universal-character-name on EBCDIC target", 404}, - {"universal-character-name used for '%c'", 405}, - {"invalid universal-character-name", 406}, - {"the meaning of `\\x' varies with -traditional", 407}, - {"\\x used with no following hex digits", 408}, - {"hex escape out of range", 409}, - {"the meaning of '\\a' varies with -traditional", 410}, - {"the meaning of '\\%c' varies with -traditional", 411}, - {"non-ISO-standard escape sequence, '\\%c'", 412}, - {"unknown escape sequence '\\%c'", 413}, - {"unknown escape sequence: '\\' followed by char 0x%x", 414}, - {"universal-character-name '\\U%08x' not valid in identifier", 415}, - {"universal-character-name '\\u%04x' not valid in identifier", 416}, - {"both 'f' and 'l' suffixes on floating constant", 417}, - {"floating point number exceeds range of '%s'", 418}, - {"stray '%c' in program", 419}, - {"stray '\\%o' in program", 420}, - {"floating constant may not be in radix 16", 421}, - {"traditional C rejects the 'f' suffix", 422}, - {"traditional C rejects the 'l' suffix", 423}, - {"ISO C forbids imaginary numeric constants", 424}, - {"floating point number exceeds range of 'double'", 425}, - {"two 'u' suffixes on integer constant", 426}, - {"traditional C rejects the 'u' suffix", 427}, - {"three 'l' suffixes on integer constant", 428}, - {"'lul' is not a valid integer suffix", 429}, - {"'Ll' and 'lL' are not valid integer suffixes", 430}, - {"ISO C89 forbids long long integer constants", 431}, - {"more than one 'i' or 'j' suffix on integer constant", 432}, - {"\ - integer constant is too large for this configuration of the compiler - \ - truncated to %d bits", 433}, - {"width of integer constant changes with -traditional", 434}, - {"integer constant is unsigned in ISO C, signed with -traditional", 435}, - {"width of integer constant may change on other systems with -traditional", 436}, - {"integer constant larger than the maximum value of %s", 437}, - {"decimal constant is so large that it is unsigned", 438}, - {"integer constant is larger than the maximum value for its type", 439}, - {"missing white space after number '%.*s'", 440}, - {"Ignoring invalid multibyte character", 441}, - {"escape sequence out of range for character", 442}, - {"empty character constant", 443}, - {"character constant too long", 444}, - {"multi-character character constant", 445}, - {"syntax error", 446}, - {"ISO C forbids an empty source file", 447}, - {"argument of `asm' is not a constant string", 448}, - {"ISO C forbids data definition with no type or storage class", 449}, - {"data definition has no type or storage class", 450}, - {"ISO C does not allow extra `;' outside of a function", 451}, - {"traditional C rejects the unary plus operator", 452}, - {"ISO C forbids `&&'", 453}, - {"`sizeof' applied to a bit-field", 454}, - {"ISO C forbids omitting the middle term of a ?: expression", 455}, - {"ISO C89 forbids compound literals", 456}, - {"ISO C forbids braced-groups within expressions", 457}, - {"traditional C rejects string concatenation", 458}, - {"ISO C does not permit use of `varargs.h'", 459}, - {"`%s' is not at beginning of declaration", 460}, - {"ISO C forbids empty initializer braces", 461}, - {"ISO C89 forbids specifying subobject to initialize", 462}, - {"obsolete use of designated initializer without `='", 463}, - {"obsolete use of designated initializer with `:'", 464}, - {"ISO C forbids specifying range of elements to initialize", 465}, - {"ISO C forbids nested functions", 466}, - {"`[*]' in parameter declaration only allowed in ISO C 99", 467}, - {"ISO C forbids forward references to `enum' types", 468}, - {"comma at end of enumerator list", 469}, - {"no semicolon at end of struct or union", 470}, - {"extra semicolon in struct or union specified", 471}, - {"ISO C doesn't support unnamed structs/unions", 472}, - {"ISO C forbids member declarations with no members", 473}, - {"deprecated use of label at end of compound statement", 474}, - {"ISO C89 forbids mixed declarations and code", 475}, - {"ISO C forbids label declarations", 476}, - {"braced-group within expression allowed only inside a function", 477}, - {"empty body in an else-statement", 478}, - {"ISO C forbids `goto *expr;'", 479}, - {"ISO C forbids forward parameter declarations", 480}, - {"ISO C requires a named argument before `...'", 481}, - {"`...' in old-style identifier list", 482}, - {"%s at end of input", 483}, - {"%s before %s'%c'", 484}, - {"%s before %s'\\x%x'", 485}, - {"%s before string constant", 486}, - {"%s before numeric constant", 487}, - {"%s before \"%s\"", 488}, - {"%s before '%s' token", 489}, - {"syntax error at '%s' token", 490}, - {"YYDEBUG not defined.", 491}, - {"\ - #pragma pack (pop) encountered without matching #pragma pack (push, )", 492}, - {"\ - #pragma pack(pop, %s) encountered without matching #pragma pack(push, %s, \ - )", 493}, - {"junk at end of '#pragma pack'", 494}, - {"junk at end of #pragma weak", 495}, - {"break statement not within loop or switch", 496}, - {"continue statement not within a loop", 497}, - {"destructor needed for `%#D'", 498}, - {"where case label appears here", 499}, - {"\ - (enclose actions of previous case statements requiring destructors in their \ - own scope.)", 500}, - {"%s qualifier ignored on asm", 501}, - {"`%s' has an incomplete type", 502}, - {"invalid use of void expression", 503}, - {"invalid use of array with unspecified bounds", 504}, - {"invalid use of undefined type `%s %s'", 505}, - {"invalid use of incomplete typedef `%s'", 506}, - {"function types not truly compatible in ISO C", 507}, - {"types are not quite compatible", 508}, - {"sizeof applied to a function type", 509}, - {"sizeof applied to a void type", 510}, - {"sizeof applied to an incomplete type", 511}, - {"arithmetic on pointer to an incomplete type", 512}, - {"__alignof__ applied to an incomplete type", 513}, - {"`__alignof' applied to a bit-field", 514}, - {"invalid use of non-lvalue array", 515}, - {"%s has no member named `%s'", 516}, - {"request for member `%s' in something not a structure or union", 517}, - {"dereferencing pointer to incomplete type", 518}, - {"dereferencing `void *' pointer", 519}, - {"invalid type argument of `%s'", 520}, - {"subscript missing in array reference", 521}, - {"array subscript has type `char'", 522}, - {"array subscript is not an integer", 523}, - {"ISO C forbids subscripting `register' array", 524}, - {"ISO C89 forbids subscripting non-lvalue array", 525}, - {"subscript has type `char'", 526}, - {"subscripted value is neither array nor pointer", 527}, - {"`%s' undeclared here (not in a function)", 528}, - {"`%s' undeclared (first use in this function)", 529}, - {"(Each undeclared identifier is reported only once", 530}, - {"for each function it appears in.)", 531}, - {"local declaration of `%s' hides instance variable", 532}, - {"called object is not a function", 533}, - {"too many arguments to function", 534}, - {"type of formal parameter %d is incomplete", 535}, - {"%s as integer rather than floating due to prototype", 536}, - {"%s as integer rather than complex due to prototype", 537}, - {"%s as complex rather than floating due to prototype", 538}, - {"%s as floating rather than integer due to prototype", 539}, - {"%s as complex rather than integer due to prototype", 540}, - {"%s as floating rather than complex due to prototype", 541}, - {"%s as `float' rather than `double' due to prototype", 542}, - {"%s with different width due to prototype", 543}, - {"%s as unsigned due to prototype", 544}, - {"%s as signed due to prototype", 545}, - {"too few arguments to function", 546}, - {"suggest parentheses around + or - inside shift", 547}, - {"suggest parentheses around && within ||", 548}, - {"suggest parentheses around arithmetic in operand of |", 549}, - {"suggest parentheses around comparison in operand of |", 550}, - {"suggest parentheses around arithmetic in operand of ^", 551}, - {"suggest parentheses around comparison in operand of ^", 552}, - {"suggest parentheses around + or - in operand of &", 553}, - {"suggest parentheses around comparison in operand of &", 554}, - {"comparisons like X<=Y<=Z do not have their mathematical meaning", 555}, - {"right shift count is negative", 556}, - {"right shift count >= width of type", 557}, - {"left shift count is negative", 558}, - {"left shift count >= width of type", 559}, - {"shift count is negative", 560}, - {"shift count >= width of type", 561}, - {"comparing floating point with == or != is unsafe", 562}, - {"ISO C forbids comparison of `void *' with function pointer", 563}, - {"comparison of distinct pointer types lacks a cast", 564}, - {"comparison between pointer and integer", 565}, - {"ISO C forbids ordered comparisons of pointers to functions", 566}, - {"comparison of complete and incomplete pointers", 567}, - {"ordered comparison of pointer with integer zero", 568}, - {"unordered comparison on non-floating point argument", 569}, - {"comparison between signed and unsigned", 570}, - {"comparison of promoted ~unsigned with constant", 571}, - {"comparison of promoted ~unsigned with unsigned", 572}, - {"pointer of type `void *' used in arithmetic", 573}, - {"pointer to a function used in arithmetic", 574}, - {"pointer of type `void *' used in subtraction", 575}, - {"pointer to a function used in subtraction", 576}, - {"wrong type argument to unary plus", 577}, - {"wrong type argument to unary minus", 578}, - {"ISO C does not support `~' for complex conjugation", 579}, - {"wrong type argument to bit-complement", 580}, - {"wrong type argument to abs", 581}, - {"wrong type argument to conjugation", 582}, - {"wrong type argument to unary exclamation mark", 583}, - {"ISO C does not support `++' and `--' on complex types", 584}, - {"wrong type argument to %s", 585}, - {"%s of pointer to unknown structure", 586}, - {"invalid lvalue in increment", 587}, - {"invalid lvalue in decrement", 588}, - {"increment", 589}, - {"decrement", 590}, - {"ISO C forbids the address of a cast expression", 591}, - {"invalid lvalue in unary `&'", 592}, - {"attempt to take address of bit-field structure member `%s'", 593}, - {"%s", 594}, - {"ISO C forbids use of conditional expressions as lvalues", 595}, - {"ISO C forbids use of compound expressions as lvalues", 596}, - {"ISO C forbids use of cast expressions as lvalues", 597}, - {"%s of read-only member `%s'", 598}, - {"%s of read-only variable `%s'", 599}, - {"%s of read-only location", 600}, - {"cannot take address of bitfield `%s'", 601}, - {"global register variable `%s' used in nested function", 602}, - {"register variable `%s' used in nested function", 603}, - {"address of global register variable `%s' requested", 604}, - {"cannot put object with volatile field into register", 605}, - {"address of register variable `%s' requested", 606}, - {"signed and unsigned type in conditional expression", 607}, - {"ISO C forbids conditional expr with only one void side", 608}, - {"ISO C forbids conditional expr between `void *' and function pointer", 609}, - {"pointer type mismatch in conditional expression", 610}, - {"pointer/integer type mismatch in conditional expression", 611}, - {"type mismatch in conditional expression", 612}, - {"left-hand operand of comma expression has no effect", 613}, - {"cast specifies array type", 614}, - {"cast specifies function type", 615}, - {"ISO C forbids casting nonscalar to the same type", 616}, - {"ISO C forbids casts to union type", 617}, - {"cast to union type from type not present in union", 618}, - {"cast discards qualifiers from pointer target type", 619}, - {"cast increases required alignment of target type", 620}, - {"cast from pointer to integer of different size", 621}, - {"cast does not match function type", 622}, - {"cast to pointer from integer of different size", 623}, - {"invalid lvalue in assignment", 624}, - {"assignment", 625}, - {"%s makes qualified function pointer from unqualified", 626}, - {"%s discards qualifiers from pointer target type", 627}, - {"ISO C prohibits argument conversion to union type", 628}, - {"ISO C forbids %s between function pointer and `void *'", 629}, - {"pointer targets in %s differ in signedness", 630}, - {"%s from incompatible pointer type", 631}, - {"%s makes pointer from integer without a cast", 632}, - {"%s makes integer from pointer without a cast", 633}, - {"incompatible type for argument %d of `%s'", 634}, - {"incompatible type for argument %d of indirect function call", 635}, - {"incompatible types in %s", 636}, - {"passing arg %d of `%s'", 637}, - {"passing arg %d of pointer to function", 638}, - {"initializer for static variable is not constant", 639}, - {"initializer for static variable uses complicated arithmetic", 640}, - {"aggregate initializer is not constant", 641}, - {"aggregate initializer uses complicated arithmetic", 642}, - {"traditional C rejects automatic aggregate initialization", 643}, - {"(near initialization for `%s')", 644}, - {"char-array initialized from wide string", 645}, - {"int-array initialized from non-wide string", 646}, - {"initializer-string for array of chars is too long", 647}, - {"array initialized from non-constant array expression", 648}, - {"initializer element is not constant", 649}, - {"initialization", 650}, - {"initializer element is not computable at load time", 651}, - {"invalid initializer", 652}, - {"extra brace group at end of initializer", 653}, - {"missing braces around initializer", 654}, - {"braces around scalar initializer", 655}, - {"initialization of flexible array member in a nested context", 656}, - {"initialization of a flexible array member", 657}, - {"deprecated initialization of zero-length array", 658}, - {"initialization of zero-length array before end of structure", 659}, - {"initialization of zero-length array inside a nested context", 660}, - {"missing initializer", 661}, - {"empty scalar initializer", 662}, - {"extra elements in scalar initializer", 663}, - {"initialization designators may not nest", 664}, - {"array index in non-array initializer", 665}, - {"field name not in record or union initializer", 666}, - {"nonconstant array index in initializer", 667}, - {"array index in initializer exceeds array bounds", 668}, - {"empty index range in initializer", 669}, - {"array index range in initializer exceeds array bounds", 670}, - {"unknown field `%s' specified in initializer", 671}, - {"initialized field with side-effects overwritten", 672}, - {"excess elements in char array initializer", 673}, - {"excess elements in struct initializer", 674}, - {"excess elements in union initializer", 675}, - {"traditional C rejects initialization of unions", 676}, - {"excess elements in array initializer", 677}, - {"excess elements in scalar initializer", 678}, - {"asm template is not a string constant", 679}, - {"invalid lvalue in asm statement", 680}, - {"modification by `asm'", 681}, - {"function declared `noreturn' has a `return' statement", 682}, - {"`return' with no value, in function returning non-void", 683}, - {"`return' with a value, in function returning void", 684}, - {"return", 685}, - {"function returns address of local variable", 686}, - {"switch quantity not an integer", 687}, - {"`long' switch expression not converted to `int' in ISO C", 688}, - {"case label not within a switch statement", 689}, - {"`default' label not within a switch statement", 690}, - {"inlining failed in call to `%s'", 691}, - {"called from here", 692}, - {"can't inline call to `%s'", 693}, - {"function call has aggregate value", 694}, - {"variable offset is passed paritially in stack and in reg", 695}, - {"variable size is passed partially in stack and in reg", 696}, - {"internal error", 697}, - {"no arguments", 698}, - {"fopen %s", 699}, - {"fclose %s", 700}, - {"collect2 version %s", 701}, - {"%d constructor(s) found\n", 702}, - {"%d destructor(s) found\n", 703}, - {"%d frame table(s) found\n", 704}, - {"%s terminated with signal %d [%s]%s", 705}, - {"%s returned %d exit status", 706}, - {"[cannot find %s]", 707}, - {"cannot find `%s'", 708}, - {"redirecting stdout: %s", 709}, - {"[Leaving %s]\n", 710}, - {"\ - \n\ - write_c_file - output name is %s, prefix is %s\n", 711}, - {"cannot find `nm'", 712}, - {"pipe", 713}, - {"fdopen", 714}, - {"dup2 %d 1", 715}, - {"close %d", 716}, - {"execvp %s", 717}, - {"init function found in object %s", 718}, - {"fini function found in object %s", 719}, - {"fclose", 720}, - {"unable to open file '%s'", 721}, - {"unable to stat file '%s'", 722}, - {"unable to mmap file '%s'", 723}, - {"not found\n", 724}, - {"dynamic dependency %s not found", 725}, - {"bad magic number in file '%s'", 726}, - {"dynamic dependencies.\n", 727}, - {"cannot find `ldd'", 728}, - {"execv %s", 729}, - {"\ - \n\ - ldd output with constructors/destructors.\n", 730}, - {"unable to open dynamic dependency '%s'", 731}, - {"%s: not a COFF file", 732}, - {"%s: cannot open as COFF file", 733}, - {"Library lib%s not found", 734}, - {"open %s", 735}, - {"incompatibilities between object file & expected values", 736}, - {"\ - \n\ - Processing symbol table #%d, offset = 0x%.8lx, kind = %s\n", 737}, - {"string section missing", 738}, - {"section pointer missing", 739}, - {"no symbol table found", 740}, - {"no cmd_strings found", 741}, - {"\ - \n\ - Updating header and load commands.\n\ - \n", 742}, - {"load command map, %d cmds, new size %ld.\n", 743}, - {"\ - writing load commands.\n\ - \n", 744}, - {"close %s", 745}, - {"could not convert 0x%l.8x into a region", 746}, - {"%s function, region %d, offset = %ld (0x%.8lx)\n", 747}, - {"bad magic number", 748}, - {"bad header version", 749}, - {"bad raw header version", 750}, - {"raw header buffer too small", 751}, - {"old raw header file", 752}, - {"unsupported version", 753}, - {"unknown {de,en}code_mach_o_hdr return value %d", 754}, - {"fstat %s", 755}, - {"lseek %s 0", 756}, - {"read %s", 757}, - {"read %ld bytes, expected %ld, from %s", 758}, - {"msync %s", 759}, - {"munmap %s", 760}, - {"write %s", 761}, - {"wrote %ld bytes, expected %ld, to %s", 762}, - {"\ - ;; Combiner statistics: %d attempts, %d substitutions (%d requiring new \ - space),\n\ - ;; %d successes.\n\ - \n", 763}, - {"\ - \n\ - ;; Combiner totals: %d attempts, %d substitutions (%d requiring new space),\n\ - ;; %d successes.\n", 764}, - {"Use VAX-C alignment", 765}, - {"invalid %%Q value", 766}, - {"invalid %%C value", 767}, - {"invalid %%N value", 768}, - {"invalid %%M value", 769}, - {"invalid %%m value", 770}, - {"invalid %%L value", 771}, - {"invalid %%O value", 772}, - {"invalid %%P value", 773}, - {"invalid %%V value", 774}, - {"Generate code assuming DW bit is set", 775}, - {"Generate code assuming DW bit is not set", 776}, - {"Generate code using byte writes", 777}, - {"Do not generate byte writes", 778}, - {"Use small memory model", 779}, - {"Use normal memory model", 780}, - {"Use large memory model", 781}, - {"Generate 29050 code", 782}, - {"Generate 29000 code", 783}, - {"Use kernel global registers", 784}, - {"Use user global registers", 785}, - {"Emit stack checking code", 786}, - {"Do not emit stack checking code", 787}, - {"Work around storem hardware bug", 788}, - {"Do not work around storem hardware bug", 789}, - {"Store locals in argument registers", 790}, - {"Do not store locals in arg registers", 791}, - {"Use software floating point", 792}, - {"Do not generate multm instructions", 793}, - {"bad value `%s' for -mtrap-precision switch", 794}, - {"bad value `%s' for -mfp-rounding-mode switch", 795}, - {"bad value `%s' for -mfp-trap-mode switch", 796}, - {"bad value `%s' for -mcpu switch", 797}, - {"fp software completion requires -mtrap-precision=i", 798}, - {"rounding mode not supported for VAX floats", 799}, - {"trap mode not supported for VAX floats", 800}, - {"L%d cache latency unknown for %s", 801}, - {"bad value `%s' for -mmemory-latency", 802}, - {"invalid %%r value", 803}, - {"invalid %%R value", 804}, - {"invalid %%h value", 805}, - {"invalid %%U value", 806}, - {"invalid %%s value", 807}, - {"invalid %%E value", 808}, - {"invalid %%xn code", 809}, - {"Use hardware fp", 810}, - {"Do not use hardware fp", 811}, - {"Use fp registers", 812}, - {"Do not use fp registers", 813}, - {"Do not assume GAS", 814}, - {"Assume GAS", 815}, - {"Request IEEE-conformant math library routines (OSF/1)", 816}, - {"Emit IEEE-conformant code, without inexact exceptions", 817}, - {"Emit IEEE-conformant code, with inexact exceptions", 818}, - {"Do not emit complex integer constants to read-only memory", 819}, - {"Use VAX fp", 820}, - {"Do not use VAX fp", 821}, - {"Emit code for the byte/word ISA extension", 822}, - {"Emit code for the motion video ISA extension", 823}, - {"Emit code for the fp move and sqrt ISA extension", 824}, - {"Emit code for the counting ISA extension", 825}, - {"Use features of and schedule given CPU", 826}, - {"Schedule given CPU", 827}, - {"Control the generated fp rounding mode", 828}, - {"Control the IEEE trap mode", 829}, - {"Control the precision given to fp exceptions", 830}, - {"Tune expected memory latency", 831}, - {"%s causes a section type conflict", 832}, - {"bad value (%s) for -mcpu switch", 833}, - {"invalid operand to %R code", 834}, - {"invalid operand to %H/%L code", 835}, - {"invalid operand to %U code", 836}, - {"invalid operand to %V code", 837}, - {"invalid operand output code", 838}, - {"switch -mcpu=%s conflicts with -march= switch", 839}, - {"bad value (%s) for %s switch", 840}, - {"target CPU does not support APCS-32", 841}, - {"target CPU does not support APCS-26", 842}, - {"target CPU does not support interworking", 843}, - {"target CPU does not support THUMB instructions.", 844}, - {"\ - enabling backtrace support is only meaningful when compiling for the Thumb.", 845}, - {"\ - enabling callee interworking support is only meaningful when compiling for \ - the Thumb.", 846}, - {"\ - enabling caller interworking support is only meaningful when compiling for \ - the Thumb.", 847}, - {"interworking forces APCS-32 to be used", 848}, - {"-mapcs-stack-check incompatible with -mno-apcs-frame", 849}, - {"-fpic and -mapcs-reent are incompatible", 850}, - {"APCS reentrant code not supported. Ignored", 851}, - {"-g with -mno-apcs-frame may not give sensible debugging", 852}, - {"Passing floating point arguments in fp regs not yet supported", 853}, - {"Invalid floating point emulation option: -mfpe-%s", 854}, - {"Structure size boundary can only be set to 8 or 32", 855}, - {"-mpic-register= is useless without -fpic", 856}, - {"Unable to use '%s' for PIC register", 857}, - {"Unable to find a temporary location for static chain register", 858}, - {"Unable to compute real location of stacked parameter", 859}, - {"no low registers available for popping high registers", 860}, - {"Interrupt Service Routines cannot be coded in Thumb mode.", 861}, - {"Generate APCS conformant stack frames", 862}, - {"Store function names in object code", 863}, - {"Use the 32-bit version of the APCS", 864}, - {"Use the 26-bit version of the APCS", 865}, - {"Pass FP arguments in FP registers", 866}, - {"Generate re-entrant, PIC code", 867}, - {"The MMU will trap on unaligned accesses", 868}, - {"Use library calls to perform FP operations", 869}, - {"Use hardware floating point instructions", 870}, - {"Assume target CPU is configured as big endian", 871}, - {"Assume target CPU is configured as little endian", 872}, - {"Assume big endian bytes, little endian words", 873}, - {"Support calls between Thumb and ARM instruction sets", 874}, - {"Generate a call to abort if a noreturn function returns", 875}, - {"Do not move instructions into a function's prologue", 876}, - {"Do not load the PIC register in function prologues", 877}, - {"Generate call insns as indirect calls, if necessary", 878}, - {"Compile for the Thumb not the ARM", 879}, - {"Thumb: Generate (non-leaf) stack frames even if not needed", 880}, - {"Thumb: Generate (leaf) stack frames even if not needed", 881}, - {"Thumb: Assume non-static functions may be called from ARM code", 882}, - {"Thumb: Assume function pointers may go to non-Thumb aware code", 883}, - {"Specify the name of the target CPU", 884}, - {"Specify the name of the target architecture", 885}, - {"Specify the version of the floating point emulator", 886}, - {"Specify the minimum bit alignment of structures", 887}, - {"Specify the register to be used for PIC addressing", 888}, - {"initialized variable `%s' is marked dllimport", 889}, - {"static variable `%s' is marked dllimport", 890}, - {"Ignore dllimport attribute for functions", 891}, - {"Do symbol renaming for BSD", 892}, - {"Do symbol renaming for X/OPEN", 893}, - {"Don't do symbol renaming", 894}, - {"MCU `%s' not supported", 895}, - {"large frame pointer change (%d) with -mtiny-stack", 896}, - {"Only initialized variables can be placed into program memory area.", 897}, - {"Assume int to be 8 bit integer", 898}, - {"Change the stack pointer without disabling interrupts", 899}, - {"Use subroutines for function prologue/epilogue", 900}, - {"Change only the low 8 bits of the stack pointer", 901}, - {"Do not generate tablejump insns", 902}, - {"Output instruction sizes to the asm file", 903}, - {"Specify the initial stack address", 904}, - {"Specify the MCU name", 905}, - {"Trampolines not supported\n", 906}, - {"Unknown CPU version %d, using 40.\n", 907}, - {"ISR %s requires %d words of local vars, max is 32767.", 908}, - {"junk at end of '#pragma %s'", 909}, - {"Small memory model", 910}, - {"Big memory model", 911}, - {"Use MPYI instruction for C3x", 912}, - {"Do not use MPYI instruction for C3x", 913}, - {"Use fast but approximate float to integer conversion", 914}, - {"Use slow but accurate float to integer conversion", 915}, - {"Enable use of RTPS instruction", 916}, - {"Disable use of RTPS instruction", 917}, - {"Enable use of RTPB instruction", 918}, - {"Disable use of RTPB instruction", 919}, - {"Generate code for C30 CPU", 920}, - {"Generate code for C31 CPU", 921}, - {"Generate code for C32 CPU", 922}, - {"Generate code for C33 CPU", 923}, - {"Generate code for C40 CPU", 924}, - {"Generate code for C44 CPU", 925}, - {"Emit code compatible with TI tools", 926}, - {"Emit code to use GAS extensions", 927}, - {"Save DP across ISR in small memory model", 928}, - {"Don't save DP across ISR in small memory model", 929}, - {"Pass arguments on the stack", 930}, - {"Pass arguments in registers", 931}, - {"Enable new features under development", 932}, - {"Disable new features under development", 933}, - {"Use the BK register as a general purpose register", 934}, - {"Do not allocate BK register", 935}, - {"Enable use of DB instruction", 936}, - {"Disable use of DB instruction", 937}, - {"Enable debugging", 938}, - {"Disable debugging", 939}, - {"Force constants into registers to improve hoisting", 940}, - {"Don't force constants into registers", 941}, - {"Force RTL generation to emit valid 3 operand insns", 942}, - {"Allow RTL generation to emit invalid 3 operand insns", 943}, - {"Allow unsigned interation counts for RPTB/DB", 944}, - {"Disallow unsigned iteration counts for RPTB/DB", 945}, - {"Preserve all 40 bits of FP reg across call", 946}, - {"Only preserve 32 bits of FP reg across call", 947}, - {"Enable parallel instructions", 948}, - {"Disable parallel instructions", 949}, - {"Enable MPY||ADD and MPY||SUB instructions", 950}, - {"Disable MPY||ADD and MPY||SUB instructions", 951}, - {"Assume that pointers may be aliased", 952}, - {"Assume that pointers not aliased", 953}, - {"Specify maximum number of iterations for RPTS", 954}, - {"Select CPU to generate code for", 955}, - {"Generate code for the C400", 956}, - {"Generate code for the C300", 957}, - {"Generate code for c1", 958}, - {"Generate code for c2", 959}, - {"Generate code for c32", 960}, - {"Generate code for c34", 961}, - {"Use standard calling sequence, with arg count word", 962}, - {"Place arg count in a nop instruction (faster than push)", 963}, - {"Don't push arg count, depend on symbol table", 964}, - {"Use data cache for volatile mem refs (default)", 965}, - {"Don't use data cache for volatile mem refs", 966}, - {"Bypass data cache for volatile mem refs", 967}, - {"Use 64-bit longs", 968}, - {"Use cc- and libc-compatible 32-bit longs", 969}, - {"Bad modes_tieable_p for register %s, mode1 %s, mode2 %s", 970}, - {"Enable use of conditional move instructions", 971}, - {"Disable use of conditional move instructions", 972}, - {"Debug argument support in compiler", 973}, - {"Debug stack support in compiler", 974}, - {"Debug memory address support in compiler", 975}, - {"Make adjacent short instructions parallel if possible.", 976}, - {"Do not make adjacent short instructions parallel.", 977}, - {"Link programs/data to be in external memory by default", 978}, - {"Link programs/data to be in onchip memory by default", 979}, - {"Change the branch costs within the compiler", 980}, - {"Change the threshold for conversion to conditional execution", 981}, - {"Stack size > 32k", 982}, - {"inline float constants not supported on this host", 983}, - {"Profiling not implemented yet.", 984}, - {"Trampolines not yet implemented", 985}, - {"Generate code the unix assembler can handle", 986}, - {"Generate code an embedded assembler can handle", 987}, - {"fr30_print_operand_address: unhandled address", 988}, - {"fr30_print_operand: unrecognised %p code", 989}, - {"fr30_print_operand: unrecognised %b code", 990}, - {"fr30_print_operand: unrecognised %B code", 991}, - {"fr30_print_operand: invalid operand to %A code", 992}, - {"fr30_print_operand: invalid %x code", 993}, - {"fr30_print_operand: invalid %F code", 994}, - {"fr30_print_operand: unknown code", 995}, - {"fr30_print_operand: unhandled MEM", 996}, - {"Assume small address space", 997}, - {"-ms2600 is used without -ms.", 998}, - {"Only initialized variables can be placed into the 8-bit area.", 999}, - {"Generate H8/S code", 1000}, - {"Do not generate H8/S code", 1001}, - {"Generate H8/S2600 code", 1002}, - {"Do not generate H8/S2600 code", 1003}, - {"Make integers 32 bits wide", 1004}, - {"Use registers for argument passing", 1005}, - {"Do not use registers for argument passing", 1006}, - {"Consider access to byte sized memory slow", 1007}, - {"Enable linker relaxing", 1008}, - {"Generate H8/300H code", 1009}, - {"Do not generate H8/300H code", 1010}, - {"Use H8/300 alignment rules", 1011}, - {"real name is too long - alias ignored", 1012}, - {"alias name is too long - alias ignored", 1013}, - {"junk at end of #pragma map", 1014}, - {"malformed #pragma map, ignored", 1015}, - {"Generate char instructions", 1016}, - {"Do not generate char instructions", 1017}, - {"Use the Cygwin interface", 1018}, - {"Use the Mingw32 interface", 1019}, - {"Create GUI application", 1020}, - {"Don't set Windows defines", 1021}, - {"Set Windows defines", 1022}, - {"Create console application", 1023}, - {"Generate code for a DLL", 1024}, - {"Ignore dllimport for functions", 1025}, - {"Use Mingw-specific thread support", 1026}, - {"-f%s ignored for target (all code is position independent)", 1027}, - {"Internal gcc abort from %s:%d", 1028}, - {"The local variable `insn' has the value:", 1029}, - {"Retain standard MXDB information", 1030}, - {"Retain legend information", 1031}, - {"Generate external legend information", 1032}, - {"Emit identifying info in .s file", 1033}, - {"Warn when a function arg is a structure", 1034}, - {"argument is a structure", 1035}, - {"-mbnu210 is ignored (option is obsolete).", 1036}, - {"bad value (%s) for -march= switch", 1037}, - {"bad value (%s) for -mcpu= switch", 1038}, - {"Register '%c' is unknown", 1039}, - {"Register '%c' already specified in allocation order", 1040}, - {"-mregparm=%d is not between 0 and %d", 1041}, - {"-malign-loops=%d is not between 0 and %d", 1042}, - {"-malign-jumps=%d is not between 0 and %d", 1043}, - {"-malign-functions=%d is not between 0 and %d", 1044}, - {"-mpreferred-stack-boundary=%d is not between 2 and 31", 1045}, - {"-mbranch-cost=%d is not between 0 and 5", 1046}, - {"floating constant misused", 1047}, - {"invalid UNSPEC as operand", 1048}, - {"invalid expression as operand", 1049}, - {"selector must be an immediate", 1050}, - {"mask must be an immediate", 1051}, - {"half-pic init called on systems that don't support it.", 1052}, - {"Same as -mcpu=i386", 1053}, - {"Same as -mcpu=i486", 1054}, - {"Same as -mcpu=pentium", 1055}, - {"Same as -mcpu=pentiumpro", 1056}, - {"Alternate calling convention", 1057}, - {"Use normal calling convention", 1058}, - {"Align some doubles on dword boundary", 1059}, - {"Align doubles on word boundary", 1060}, - {"Uninitialized locals in .bss", 1061}, - {"Uninitialized locals in .data", 1062}, - {"Use IEEE math for fp comparisons", 1063}, - {"Do not use IEEE math for fp comparisons", 1064}, - {"Return values of functions in FPU registers", 1065}, - {"Do not return values of functions in FPU registers", 1066}, - {"Do not generate sin, cos, sqrt for FPU", 1067}, - {"Generate sin, cos, sqrt for FPU", 1068}, - {"Omit the frame pointer in leaf functions", 1069}, - {"Enable stack probing", 1070}, - {"Emit Intel syntax assembler opcodes", 1071}, - {"Align destination of the string operations", 1072}, - {"Do not align destination of the string operations", 1073}, - {"Inline all known string operations", 1074}, - {"Do not inline all known string operations", 1075}, - {"Use push instructions to save outgoing arguments", 1076}, - {"Do not use push instructions to save outgoing arguments", 1077}, - {"sizeof(long double) is 16.", 1078}, - {"sizeof(long double) is 12.", 1079}, - {"Schedule code for given CPU", 1080}, - {"Generate code for given CPU", 1081}, - {"Control allocation order of integer registers", 1082}, - {"Number of registers used to pass integer arguments", 1083}, - {"Loop code aligned to this power of 2", 1084}, - {"Jump targets are aligned to this power of 2", 1085}, - {"Function starts are aligned to this power of 2", 1086}, - {"Attempt to keep stack aligned to this power of 2", 1087}, - {"Branches are this expensive (1-5, arbitrary units)", 1088}, - {"Profiling uses mcount", 1089}, - {"Emit half-PIC code", 1090}, - {"Emit ELF object code", 1091}, - {"Emit ROSE object code", 1092}, - {"Symbols have a leading underscore", 1093}, - {"Align to >word boundaries", 1094}, - {"Use mcount for profiling", 1095}, - {"Use mcount_ptr for profiling", 1096}, - {"Generate ELF output", 1097}, - {"Use Mingw32 interface", 1098}, - {"Use Cygwin interface", 1099}, - {"Use bare Windows interface", 1100}, - {"`%s' declared as both exported to and imported from a DLL.", 1101}, - {"Environment variable DJGPP not defined.", 1102}, - {"Environment variable DJGPP points to missing file '%s'.", 1103}, - {"Environment variable DJGPP points to corrupt file '%s'.", 1104}, - {"Generate code which uses the FPU", 1105}, - {"Do not generate code which uses the FPU", 1106}, - {"sorry, not implemented: #pragma align NAME=SIZE", 1107}, - {"malformed #pragma align - ignored", 1108}, - {"sorry, not implemented: #pragma noalign NAME", 1109}, - {"stack limit expression is not supported", 1110}, - {"Generate SA code", 1111}, - {"Generate SB code", 1112}, - {"Generate KA code", 1113}, - {"Generate KB code", 1114}, - {"Generate JA code", 1115}, - {"Generate JD code", 1116}, - {"Generate JF code", 1117}, - {"generate RP code", 1118}, - {"Generate MC code", 1119}, - {"Generate CA code", 1120}, - {"Generate CF code", 1121}, - {"Use alternate leaf function entries", 1122}, - {"Do not use alternate leaf function entries", 1123}, - {"Perform tail call optimization", 1124}, - {"Do not perform tail call optimization", 1125}, - {"Use complex addressing modes", 1126}, - {"Do not use complex addressing modes", 1127}, - {"Align code to 8 byte boundary", 1128}, - {"Do not align code to 8 byte boundary", 1129}, - {"Enable compatibility with iC960 v2.0", 1130}, - {"Enable compatibility with iC960 v3.0", 1131}, - {"Enable compatibility with ic960 assembler", 1132}, - {"Do not permit unaligned accesses", 1133}, - {"Permit unaligned accesses", 1134}, - {"Layout types like Intel's v1.3 gcc", 1135}, - {"Do not layout types like Intel's v1.3 gcc", 1136}, - {"Use 64 bit long doubles", 1137}, - {"Enable linker relaxation", 1138}, - {"Do not enable linker relaxation", 1139}, - {"conflicting architectures defined - using C series", 1140}, - {"conflicting architectures defined - using K series", 1141}, - {"iC2.0 and iC3.0 are incompatible - using iC3.0", 1142}, - {"The -mlong-double-64 option does not work yet.", 1143}, - {"ia64_print_operand: unknown code", 1144}, - {"value of -mfixed-range must have form REG1-REG2", 1145}, - {"unknown register name: %s", 1146}, - {"%s-%s is an empty range", 1147}, - {"cannot optimize division for both latency and throughput", 1148}, - {"Generate big endian code", 1149}, - {"Generate little endian code", 1150}, - {"Generate code for GNU as", 1151}, - {"Generate code for Intel as", 1152}, - {"Generate code for GNU ld", 1153}, - {"Generate code for Intel ld", 1154}, - {"Generate code without GP reg", 1155}, - {"Emit stop bits before and after volatile extended asms", 1156}, - {"Don't emit stop bits before and after volatile extended asms", 1157}, - {"Emit code for Itanium (TM) processor B step", 1158}, - {"Use in/loc/out register names", 1159}, - {"Disable use of sdata/scommon/sbss", 1160}, - {"Enable use of sdata/scommon/sbss", 1161}, - {"gp is constant (but save/restore gp on indirect calls)", 1162}, - {"Generate self-relocatable code", 1163}, - {"Generate inline division, optimize for latency", 1164}, - {"Generate inline division, optimize for throughput", 1165}, - {"Enable Dwarf 2 line debug info via GNU as", 1166}, - {"Disable Dwarf 2 line debug info via GNU as", 1167}, - {"Specify range of registers to make fixed.", 1168}, - {"-msystem-v and -p are incompatible", 1169}, - {"-msystem-v and -mthreads are incompatible", 1170}, - {"bad value (%s) for -mmodel switch", 1171}, - {"bad value (%s) for -msdata switch", 1172}, - {"const objects cannot go in .sdata/.sbss", 1173}, - {"invalid operand to %s code", 1174}, - {"invalid operand to %p code", 1175}, - {"invalid operand to %T/%B code", 1176}, - {"invalid operand to %N code", 1177}, - {"Display compile time statistics", 1178}, - {"Align all loops to 32 byte boundary", 1179}, - {"Only issue one instruction per cycle", 1180}, - {"Prefer branches over conditional execution", 1181}, - {"Code size: small, medium or large", 1182}, - {"Small data area: none, sdata, use", 1183}, - {"-f%s ignored for 68HC11/68HC12 (not supported)", 1184}, - {"Compile with 16-bit integer mode", 1185}, - {"Compile with 32-bit integer mode", 1186}, - {"Auto pre/post decrement increment allowed", 1187}, - {"Auto pre/post decrement increment not allowed", 1188}, - {"Compile for a 68HC11", 1189}, - {"Compile for a 68HC12", 1190}, - {"Specify the register allocation order", 1191}, - {"Indicate the number of soft registers available", 1192}, - {"-malign-loops=%d is not between 1 and %d", 1193}, - {"-malign-jumps=%d is not between 1 and %d", 1194}, - {"-malign-functions=%d is not between 1 and %d", 1195}, - {"-fPIC is not currently supported on the 68000 or 68010\n", 1196}, - {"Internal gcc monitor: short-branch(%x)", 1197}, - {"Internal gcc error: Can't express symbolic location", 1198}, - {"argument #%d is a structure", 1199}, - {"%R not followed by %B/C/D/E", 1200}, - {"invalid %x/X value", 1201}, - {"invalid %H value", 1202}, - {"invalid %h value", 1203}, - {"invalid %Q value", 1204}, - {"invalid %q value", 1205}, - {"invalid %o value", 1206}, - {"invalid %p value", 1207}, - {"invalid %s/S value", 1208}, - {"invalid %P operand", 1209}, - {"invalid %B value", 1210}, - {"invalid %C value", 1211}, - {"invalid %D value", 1212}, - {"invalid %E value", 1213}, - {"`%d' operand isn't a register", 1214}, - {"invalid %r value", 1215}, - {"operand is r0", 1216}, - {"operand is const_double", 1217}, - {"invalid code", 1218}, - {"-mtrap-large-shift and -mhandle-large-shift are incompatible", 1219}, - {"Invalid option `-mshort-data-%s'", 1220}, - {"-mshort-data-%s is too large ", 1221}, - {"-mshort-data-%s and PIC are incompatible", 1222}, - {"Invalid option `-mstack-increment=%s'", 1223}, - {"Inline constants if it can be done in 2 insns or less", 1224}, - {"inline constants if it only takes 1 instruction", 1225}, - {"Set maximum alignment to 4", 1226}, - {"Set maximum alignment to 8", 1227}, - {"Do not use the divide instruction", 1228}, - {"Do not arbitary sized immediates in bit operations", 1229}, - {"Always treat bitfield as int-sized", 1230}, - {"Force functions to be aligned to a 4 byte boundary", 1231}, - {"Force functions to be aligned to a 2 byte boundary", 1232}, - {"Emit call graph information", 1233}, - {"Prefer word accesses over byte accesses", 1234}, - {"Generate code for the M*Core M340", 1235}, - {"Maximum amount for a single stack increment operation", 1236}, - {"-mips%d not supported", 1237}, - {"bad value (%s) for -mips switch", 1238}, - {"bad value (%s) for -mabi= switch", 1239}, - {"-mabi=%s does not support -mips%d", 1240}, - {"The -mabi=32 support does not work yet.", 1241}, - {"This target does not support the -mabi switch.", 1242}, - {"-mcpu=%s does not support -mips%d", 1243}, - {"-mips%d does not support 64 bit fp registers", 1244}, - {"-mips%d does not support 64 bit gp registers", 1245}, - {"-G is incompatible with PIC code which is the default", 1246}, - {"-membedded-pic and -mabicalls are incompatible", 1247}, - {"-G and -membedded-pic are incompatible", 1248}, - {"Invalid option `entry%s'", 1249}, - {"-mentry is only meaningful with -mips-16", 1250}, - {"internal error: %%) found without a %%( in assembler pattern", 1251}, - {"internal error: %%] found without a %%[ in assembler pattern", 1252}, - {"internal error: %%> found without a %%< in assembler pattern", 1253}, - {"internal error: %%} found without a %%{ in assembler pattern", 1254}, - {"PRINT_OPERAND: Unknown punctuation '%c'", 1255}, - {"PRINT_OPERAND null pointer", 1256}, - {"invalid use of %%d, %%x, or %%X", 1257}, - {"PRINT_OPERAND_ADDRESS, null pointer", 1258}, - {"can't open %s", 1259}, - {"\ - MIPS ECOFF format does not allow changing filenames within functions with \ - #line", 1260}, - {"can't rewind %s", 1261}, - {"can't write to %s", 1262}, - {"can't read from %s", 1263}, - {"can't close %s", 1264}, - {"gp_offset (%ld) or end_offset (%ld) is less than zero.", 1265}, - {"fp_offset (%ld) or end_offset (%ld) is less than zero.", 1266}, - {"can not handle inconsistent calls to `%s'", 1267}, - {"No default crt0.o", 1268}, - {"Use 64-bit int type", 1269}, - {"Use 64-bit long type", 1270}, - {"Use 32-bit long type", 1271}, - {"Optimize lui/addiu address loads", 1272}, - {"Don't optimize lui/addiu address loads", 1273}, - {"Use MIPS as", 1274}, - {"Use GNU as", 1275}, - {"Use symbolic register names", 1276}, - {"Don't use symbolic register names", 1277}, - {"Use GP relative sdata/sbss sections", 1278}, - {"Don't use GP relative sdata/sbss sections", 1279}, - {"Output compiler statistics", 1280}, - {"Don't output compiler statistics", 1281}, - {"Don't optimize block moves", 1282}, - {"Optimize block moves", 1283}, - {"Use mips-tfile asm postpass", 1284}, - {"Don't use mips-tfile asm postpass", 1285}, - {"Use hardware floating point", 1286}, - {"Use 64-bit FP registers", 1287}, - {"Use 32-bit FP registers", 1288}, - {"Use 64-bit general registers", 1289}, - {"Use 32-bit general registers", 1290}, - {"Use Irix PIC", 1291}, - {"Don't use Irix PIC", 1292}, - {"Use OSF PIC", 1293}, - {"Don't use OSF PIC", 1294}, - {"Use indirect calls", 1295}, - {"Don't use indirect calls", 1296}, - {"Use embedded PIC", 1297}, - {"Don't use embedded PIC", 1298}, - {"Use ROM instead of RAM", 1299}, - {"Don't use ROM instead of RAM", 1300}, - {"Put uninitialized constants in ROM (needs -membedded-data)", 1301}, - {"Don't put uninitialized constants in ROM", 1302}, - {"Use big-endian byte order", 1303}, - {"Use little-endian byte order", 1304}, - {"Use single (32-bit) FP only", 1305}, - {"Don't use single (32-bit) FP only", 1306}, - {"Use multiply accumulate", 1307}, - {"Don't use multiply accumulate", 1308}, - {"Work around early 4300 hardware bug", 1309}, - {"Don't work around early 4300 hardware bug", 1310}, - {"Optimize for 4650", 1311}, - {"Optimize for 3900", 1312}, - {"Trap on integer divide by zero", 1313}, - {"Don't trap on integer divide by zero", 1314}, - {"Trap on integer divide overflow", 1315}, - {"Don't trap on integer divide overflow", 1316}, - {"Specify CPU for scheduling purposes", 1317}, - {"Specify MIPS ISA", 1318}, - {"Use mips16 entry/exit psuedo ops", 1319}, - {"Don't use MIPS16 instructions", 1320}, - {"mips16 function profiling", 1321}, - {"Work around hardware multiply bug", 1322}, - {"Do not work around hardware multiply bug", 1323}, - {"Target the AM33 processor", 1324}, - {"optimization turned on", 1325}, - {"optimization turned off", 1326}, - {"optimization level restored", 1327}, - {"Don't use hardware fp", 1328}, - {"Alternative calling convention", 1329}, - {"Pass some arguments in registers", 1330}, - {"Pass all arguments on stack", 1331}, - {"Optimize for 32532 cpu", 1332}, - {"Optimize for 32332 cpu", 1333}, - {"Optimize for 32032", 1334}, - {"Register sb is zero. Use for absolute addressing", 1335}, - {"Do not use register sb", 1336}, - {"Do not use bitfield instructions", 1337}, - {"Use bitfield instructions", 1338}, - {"Generate code for high memory", 1339}, - {"Generate code for low memory", 1340}, - {"32381 fpu", 1341}, - {"Use multiply-accumulate fp instructions", 1342}, - {"Do not use multiply-accumulate fp instructions", 1343}, - {"\"Small register classes\" kludge", 1344}, - {"No \"Small register classes\" kludge", 1345}, - {"\ - Unknown -mschedule= option (%s).\n\ - Valid options are 700, 7100, 7100LC, 7200, and 8000\n", 1346}, - {"\ - Unknown -march= option (%s).\n\ - Valid options are 1.0, 1.1, and 2.0\n", 1347}, - {"PIC code generation is not supported in the portable runtime model\n", 1348}, - {"PIC code generation is not compatible with fast indirect calls\n", 1349}, - {"PIC code generation is not compatible with profiling\n", 1350}, - {"-g is only supported when using GAS on this processor,", 1351}, - {"-g option disabled.", 1352}, - {"Do not use hardware floating point", 1353}, - {"Return floating point results in ac0", 1354}, - {"Return floating point results in memory", 1355}, - {"Generate code for an 11/40", 1356}, - {"Generate code for an 11/45", 1357}, - {"Generate code for an 11/10", 1358}, - {"Use 32 bit int", 1359}, - {"Use 16 bit int", 1360}, - {"Use 32 bit float", 1361}, - {"Use 64 bit float", 1362}, - {"Target has split I&D", 1363}, - {"Target does not have split I&D", 1364}, - {"Use UNIX assembler syntax", 1365}, - {"Use DEC assembler syntax", 1366}, - {"Generate little endian data", 1367}, - {"Generate big endian data", 1368}, - {"Turn on maintainer testing code", 1369}, - {"Enable Transmeta picoJava extensions", 1370}, - {"Disable Transmeta picoJava extensions", 1371}, - {"Disable reorganization pass", 1372}, - {"invalid %%B value", 1373}, - {"invalid %%S value", 1374}, - {"invalid %%b value", 1375}, - {"invalid %%H value", 1376}, - {"invalid %%z value", 1377}, - {"invalid %%Z value", 1378}, - {"invalid %%k value", 1379}, - {"invalid %%j value", 1380}, - {"can't have varargs with -mfp-arg-in-fp-regs", 1381}, - {"Always pass floating-point arguments in memory", 1382}, - {"Don't always pass floating-point arguments in memory", 1383}, - {"Support message passing with the Parallel Environment", 1384}, - {"Compile for 64-bit pointers", 1385}, - {"Compile for 32-bit pointers", 1386}, - {"-maix64 and POWER architecture are incompatible.", 1387}, - {"-maix64 requires PowerPC64 architecture remain enabled.", 1388}, - {"\ - -maix64 required: 64-bit computation with 32-bit addressing not yet \ - supported.", 1389}, - {"-mmultiple is not supported on little endian systems", 1390}, - {"-mstring is not supported on little endian systems", 1391}, - {"-f%s ignored for AIX (all code is position independent)", 1392}, - {"-ffunction-sections disabled on AIX when debugging", 1393}, - {"-fdata-sections not supported on AIX", 1394}, - {"Unknown -mdebug-%s switch", 1395}, - {"invalid %%f value", 1396}, - {"invalid %%F value", 1397}, - {"invalid %%G value", 1398}, - {"invalid %%j code", 1399}, - {"invalid %%J code", 1400}, - {"invalid %%K value", 1401}, - {"invalid %%p value", 1402}, - {"invalid %%q value", 1403}, - {"%%S computed all 1's mask", 1404}, - {"%%S computed all 0's mask", 1405}, - {"invalid %%T value", 1406}, - {"invalid %%u value", 1407}, - {"invalid %%v value", 1408}, - {"invalid %%W value", 1409}, - {"Use POWER instruction set", 1410}, - {"Use POWER2 instruction set", 1411}, - {"Do not use POWER2 instruction set", 1412}, - {"Do not use POWER instruction set", 1413}, - {"Use PowerPC instruction set", 1414}, - {"Do not use PowerPC instruction set", 1415}, - {"Use PowerPC General Purpose group optional instructions", 1416}, - {"Don't use PowerPC General Purpose group optional instructions", 1417}, - {"Use PowerPC Graphics group optional instructions", 1418}, - {"Don't use PowerPC Graphics group optional instructions", 1419}, - {"Use PowerPC-64 instruction set", 1420}, - {"Don't use PowerPC-64 instruction set", 1421}, - {"Use new mnemonics for PowerPC architecture", 1422}, - {"Use old mnemonics for PowerPC architecture", 1423}, - {"Put everything in the regular TOC", 1424}, - {"Place floating point constants in TOC", 1425}, - {"Don't place floating point constants in TOC", 1426}, - {"Place symbol+offset constants in TOC", 1427}, - {"Don't place symbol+offset constants in TOC", 1428}, - {"Place variable addresses in the regular TOC", 1429}, - {"Generate load/store multiple instructions", 1430}, - {"Do not generate load/store multiple instructions", 1431}, - {"Generate string instructions for block moves", 1432}, - {"Do not generate string instructions for block moves", 1433}, - {"Generate load/store with update instructions", 1434}, - {"Do not generate load/store with update instructions", 1435}, - {"Generate fused multiply/add instructions", 1436}, - {"Don't generate fused multiply/add instructions", 1437}, - {"Don't schedule the start and end of the procedure", 1438}, - {"Use features of and schedule code for given CPU", 1439}, - {"Enable debug output", 1440}, - {"RETURN_ADDRESS_OFFSET not supported", 1441}, - {"Select ABI calling convention.", 1442}, - {"Select method for sdata handling.", 1443}, - {"Align to the base type of the bitfield.", 1444}, - {"Don't align to the base type of the bitfield.", 1445}, - {"Don't assume that unaligned accesses are handled by the system", 1446}, - {"Assume that unaligned accesses are handled by the system", 1447}, - {"Produce code relocatable at runtime.", 1448}, - {"Don't produce code relocatable at runtime.", 1449}, - {"Produce little endian code.", 1450}, - {"Produce big endian code.", 1451}, - {"Use 128 bit long doubles", 1452}, - {"no description yet", 1453}, - {"Use EABI.", 1454}, - {"Don't use EABI.", 1455}, - {"Use alternate register names.", 1456}, - {"Don't use alternate register names.", 1457}, - {"Link with libsim.a, libc.a and sim-crt0.o.", 1458}, - {"Link with libads.a, libc.a and crt0.o.", 1459}, - {"Link with libyk.a, libc.a and crt0.o.", 1460}, - {"Link with libmvme.a, libc.a and crt0.o.", 1461}, - {"Set the PPC_EMB bit in the ELF flags header", 1462}, - {"Bad value for -mcall-%s", 1463}, - {"Bad value for -msdata=%s", 1464}, - {"-mrelocatable and -msdata=%s are incompatible.", 1465}, - {"-f%s and -msdata=%s are incompatible.", 1466}, - {"-msdata=%s and -mcall-%s are incompatible.", 1467}, - {"-mrelocatable and -mno-minimal-toc are incompatible.", 1468}, - {"-mrelocatable and -mcall-%s are incompatible.", 1469}, - {"-fPIC and -mcall-%s are incompatible.", 1470}, - {"-mcall-aixdesc must be big endian", 1471}, - {"Generate code for big endian", 1472}, - {"Generate code for little endian", 1473}, - {"Use little-endian byte order for data", 1474}, - {"%s is not supported by this configuration", 1475}, - {"-mlong-double-64 not allowed with -m64", 1476}, - {"bad value (%s) for -mcmodel= switch", 1477}, - {"-mcmodel= is not supported on 32 bit systems", 1478}, - {"profiling does not support code models other than medlow", 1479}, - {"Invalid %%Y operand", 1480}, - {"Invalid %%A operand", 1481}, - {"Invalid %%B operand", 1482}, - {"Invalid %%c operand", 1483}, - {"Invalid %%C operand", 1484}, - {"Invalid %%d operand", 1485}, - {"Invalid %%D operand", 1486}, - {"Invalid %%f operand", 1487}, - {"long long constant not a valid immediate operand", 1488}, - {"floating point constant not a valid immediate operand", 1489}, - {"%s and profiling conflict: disabling %s", 1490}, - {"Use FUNCTION_EPILOGUE", 1491}, - {"Do not use FUNCTION_EPILOGUE", 1492}, - {"Assume possible double misalignment", 1493}, - {"Assume all doubles are aligned", 1494}, - {"Pass -assert pure-text to linker", 1495}, - {"Do not pass -assert pure-text to linker", 1496}, - {"Use flat register window model", 1497}, - {"Do not use flat register window model", 1498}, - {"Use ABI reserved registers", 1499}, - {"Do not use ABI reserved registers", 1500}, - {"Use hardware quad fp instructions", 1501}, - {"Do not use hardware quad fp instructions", 1502}, - {"Compile for v8plus ABI", 1503}, - {"Do not compile for v8plus ABI", 1504}, - {"Utilize Visual Instruction Set", 1505}, - {"Do not utilize Visual Instruction Set", 1506}, - {"Optimize for Cypress processors", 1507}, - {"Optimize for SparcLite processors", 1508}, - {"Optimize for F930 processors", 1509}, - {"Optimize for F934 processors", 1510}, - {"Use V8 Sparc ISA", 1511}, - {"Optimize for SuperSparc processors", 1512}, - {"Pointers are 64-bit", 1513}, - {"Pointers are 32-bit", 1514}, - {"Use 32-bit ABI", 1515}, - {"Use 64-bit ABI", 1516}, - {"Use stack bias", 1517}, - {"Do not use stack bias", 1518}, - {"Use structs on stronger alignment for double-word copies", 1519}, - {"Do not use structs on stronger alignment for double-word copies", 1520}, - {"Optimize tail call instructions in assembler and linker", 1521}, - {"Do not optimize tail call instructions in assembler or linker", 1522}, - {"Use given Sparc code model", 1523}, - {"#pragma GHS endXXXX found without previous startXXX", 1524}, - {"#pragma GHS endXXX does not match previous startXXX", 1525}, - {"Cannot set interrupt attribute: no current function", 1526}, - {"Cannot set interrupt attribute: no such identifier", 1527}, - {"junk at end of #pragma ghs section", 1528}, - {"unrecognised section name \"%s\"", 1529}, - {"malformed #pragma ghs section", 1530}, - {"junk at end of #pragma ghs interrupt", 1531}, - {"junk at end of #pragma ghs starttda", 1532}, - {"junk at end of #pragma ghs startsda", 1533}, - {"junk at end of #pragma ghs startzda", 1534}, - {"junk at end of #pragma ghs endtda", 1535}, - {"junk at end of #pragma ghs endsda", 1536}, - {"junk at end of #pragma ghs endzda", 1537}, - {"%s=%s is not numeric.", 1538}, - {"%s=%s is too large.", 1539}, - {"a data area attribute cannot be specified for local variables", 1540}, - {"data area of '%s' conflicts with previous declaration", 1541}, - {"Bogus JR construction: %d\n", 1542}, - {"Bad amount of stack space removal: %d", 1543}, - {"Bogus JARL construction: %d\n", 1544}, - {"Support Green Hills ABI", 1545}, - {"Prohibit PC relative function calls", 1546}, - {"Reuse r30 on a per function basis", 1547}, - {"Use stubs for function prologues", 1548}, - {"Same as: -mep -mprolog-function", 1549}, - {"Enable backend debugging", 1550}, - {"Compile for the v850 processor", 1551}, - {"Use 4 byte entries in switch tables", 1552}, - {"Set the max size of data eligible for the TDA area", 1553}, - {"Set the max size of data eligible for the SDA area", 1554}, - {"Set the max size of data eligible for the ZDA area", 1555}, - {"cannot convert to a pointer type", 1556}, - {"pointer value used where a floating point value was expected", 1557}, - {"aggregate value used where a float was expected", 1558}, - {"conversion to incomplete type", 1559}, - {"can't convert between vector values of different size", 1560}, - {"aggregate value used where an integer was expected", 1561}, - {"pointer value used where a complex was expected", 1562}, - {"aggregate value used where a complex was expected", 1563}, - {"can't convert value to a vector", 1564}, - {"unable to call pointer to member function here", 1565}, - {"destructors take no parameters", 1566}, - {"ISO C++ forbids omitting the middle term of a ?: expression", 1567}, - {"conflicting access specifications for field `%s', ignored", 1568}, - {"trying to finish struct, but kicked out due to previous parse errors.", 1569}, - {"language string `\"%s\"' not recognized", 1570}, - {"not enough type information", 1571}, - {"invalid operation on uninstantiated type", 1572}, - {"\ - object size exceeds built-in limit for virtual function table implementation", 1573}, - {"\ - object size exceeds normal limit for virtual function table implementation, \ - recompile all source and use -fhuge-objects", 1574}, - {"declaration of `%s' shadows a member of `this'", 1575}, - {"label `%s' referenced outside of any function", 1576}, - {"jump to case label", 1577}, - {" enters try block", 1578}, - {" enters catch block", 1579}, - {" from here", 1580}, - {"the ABI requires vtable thunks", 1581}, - {"multiple types in one declaration", 1582}, - {"declaration does not declare anything", 1583}, - {"Missing type-name in typedef-declaration.", 1584}, - {"ISO C++ prohibits anonymous structs", 1585}, - {"assignment (not initialization) in declaration", 1586}, - {"invalid catch parameter", 1587}, - {"cannot declare `::main' to be a template", 1588}, - {"cannot declare `::main' to be inline", 1589}, - {"cannot declare `::main' to be static", 1590}, - {"`main' must return `int'", 1591}, - {"overflow in array dimension", 1592}, - {"destructors must be member functions", 1593}, - {"`bool' is now a keyword", 1594}, - {"ISO C++ does not support `long long'", 1595}, - {"short, signed or unsigned invalid for `%s'", 1596}, - {"long and short specified together for `%s'", 1597}, - {"signed and unsigned given together for `%s'", 1598}, - {"storage class specifiers invalid in parameter declarations", 1599}, - {"typedef declaration invalid in parameter declaration", 1600}, - {"virtual outside class declaration", 1601}, - {"storage class specified for %s `%s'", 1602}, - {"storage class specifiers invalid in friend function declarations", 1603}, - {"destructor cannot be static member function", 1604}, - {"constructor cannot be static member function", 1605}, - {"constructors cannot be declared virtual", 1606}, - {"return value type specifier for constructor ignored", 1607}, - {"can't initialize friend function `%s'", 1608}, - {"virtual functions cannot be friends", 1609}, - {"friend declaration not in class definition", 1610}, - {"cannot declare %s to references", 1611}, - {"invalid type: `void &'", 1612}, - {"discarding `const' applied to a reference", 1613}, - {"discarding `volatile' applied to a reference", 1614}, - {"only declarations of constructors can be `explicit'", 1615}, - {"non-member `%s' cannot be declared `mutable'", 1616}, - {"non-object member `%s' cannot be declared `mutable'", 1617}, - {"function `%s' cannot be declared `mutable'", 1618}, - {"static `%s' cannot be declared `mutable'", 1619}, - {"const `%s' cannot be declared `mutable'", 1620}, - {"typedef declaration includes an initializer", 1621}, - {"unnamed variable or field declared void", 1622}, - {"variable or field declared void", 1623}, - {"cannot use `::' in parameter declaration", 1624}, - {"`%s' is neither function nor member function; cannot be declared friend", 1625}, - {"member functions are implicitly friends of their class", 1626}, - {"storage class `auto' invalid for function `%s'", 1627}, - {"storage class `register' invalid for function `%s'", 1628}, - {"\ - storage class `static' invalid for function `%s' declared out of global scope", 1629}, - {"\ - storage class `inline' invalid for function `%s' declared out of global scope", 1630}, - {"virtual non-class function `%s'", 1631}, - {"cannot declare static function inside another function", 1632}, - {"\ - invalid integer constant in parameter list, did you forget to give parameter \ - name?", 1633}, - {"conversion to %s%s will never use a type conversion operator", 1634}, - {"return type for `main' changed to `int'", 1635}, - {"-f%s is no longer supported", 1636}, - {"\ - -fhandle-exceptions has been renamed to -fexceptions (and is now on by \ - default)", 1637}, - {"-fname-mangling-version is no longer supported", 1638}, - {"-Wno-strict-prototypes is not supported in C++", 1639}, - {"name missing for member function", 1640}, - {"`__alignof__' applied to a bit-field", 1641}, - {"parser may be lost: is there a '{' missing somewhere?", 1642}, - {"ambiguous conversion for array subscript", 1643}, - {"anachronistic use of array size in vector delete", 1644}, - {"\ - cannot delete a function. Only pointer-to-objects are valid arguments to \ - `delete'", 1645}, - {"initializer invalid for static member with constructor", 1646}, - {"(an out of class initialization is required)", 1647}, - {"field initializer is not constant", 1648}, - {"anonymous struct not inside named type", 1649}, - {"namespace-scope anonymous aggregates must be static", 1650}, - {"anonymous aggregate with no members", 1651}, - {"too many initialization functions required", 1652}, - {"use of old-style cast", 1653}, - {"`%s' not supported by %s", 1654}, - {"", 1655}, - {"(static %s for %s)", 1656}, - {"In %s `%s':", 1657}, - {"%s: In instantiation of `%s':\n", 1658}, - {"%s:%d: instantiated from `%s'\n", 1659}, - {"%s:%d: instantiated from here\n", 1660}, - {"call to Java `catch' or `throw' with `jthrowable' undefined", 1661}, - {"mixing C++ and Java catches in a single translation unit", 1662}, - {" in thrown expression", 1663}, - {"\ - (if this is not what you intended, make sure the function template has \ - already been declared and add <> after the function name here) -Wno-non-\ - template-friend disables this warning.", 1664}, - {"argument to `%s' missing\n", 1665}, - {"initializer list treated as compound expression", 1666}, - {" will be re-ordered to match declaration order", 1667}, - {" will be re-ordered to match inheritance order", 1668}, - {"base class initializer specified, but no base class to initialize", 1669}, - {"initializer for unnamed base class ambiguous", 1670}, - {"no base class to initialize", 1671}, - {"object missing in use of pointer-to-member construct", 1672}, - {"at this point in file", 1673}, - {"new of array type fails to specify size", 1674}, - {"size in array new must have integral type", 1675}, - {"zero size array reserves no space", 1676}, - {"new cannot be applied to a reference type", 1677}, - {"new cannot be applied to a function type", 1678}, - {"call to Java constructor, while `jclass' undefined", 1679}, - {"Can't find class$", 1680}, - {"invalid type `void' for new", 1681}, - {"call to Java constructor with `%s' undefined", 1682}, - {"initializer list being treated as compound expression", 1683}, - {"ISO C++ forbids aggregate initializer to new", 1684}, - {"initializer ends prematurely", 1685}, - {"cannot initialize multi-dimensional array with initializer", 1686}, - {"unknown array size in delete", 1687}, - {"type to vector delete is neither pointer or array type", 1688}, - {"Do not obey access control semantics", 1689}, - {"Change when template instances are emitted", 1690}, - {"Check the return value of new", 1691}, - {"Reduce size of object files", 1692}, - {"Make string literals `char[]' instead of `const char[]'", 1693}, - {"Dump the entire translation unit to a file", 1694}, - {"Do not inline member functions by default", 1695}, - {"Do not generate run time type descriptor information", 1696}, - {"Do not generate code to check exception specifications", 1697}, - {"Scope of for-init-statement vars extends outside", 1698}, - {"Do not recognise GNU defined keywords", 1699}, - {"Do not treat the namespace `std' as a normal namespace", 1700}, - {"Enable support for huge objects", 1701}, - {"Export functions even if they can be inlined", 1702}, - {"Only emit explicit template instatiations", 1703}, - {"Only emit explicit instatiations of inline templates", 1704}, - {"Don't pedwarn about uses of Microsoft extensions", 1705}, - {"Recognise and/bitand/bitor/compl/not/or/xor", 1706}, - {"Disable optional diagnostics", 1707}, - {"Downgrade conformance errors to warnings", 1708}, - {"Enable automatic template instantiation", 1709}, - {"Display statistics accumulated during compilation", 1710}, - {"Specify maximum template instantiation depth", 1711}, - {"Use __cxa_atexit to register destructors.", 1712}, - {"Discard unused virtual functions", 1713}, - {"Implement vtables using thunks", 1714}, - {"Emit common-like symbols as weak symbols", 1715}, - {"Emit cross referencing information", 1716}, - {"Warn about inconsistent return types", 1717}, - {"Warn about overloaded virtual function names", 1718}, - {"Don't warn when all ctors/dtors are private", 1719}, - {"Warn about non virtual destructors", 1720}, - {"Warn when a function is declared extern, then inline", 1721}, - {"Warn when the compiler reorders code", 1722}, - {"Warn when synthesis behaviour differs from Cfront", 1723}, - {"Don't warn when type converting pointers to member functions", 1724}, - {"Warn about violations of Effective C++ style rules", 1725}, - {"Warn when overload promotes from unsigned to signed", 1726}, - {"Warn if a C style cast is used in a program", 1727}, - {"\ - Don't warn when non-templatized friend functions are declared within a \ - template", 1728}, - {"Don't announce deprecation of compiler features", 1729}, - {"type name expected before `*'", 1730}, - {"cannot declare references to references", 1731}, - {"cannot declare pointers to references", 1732}, - {"type name expected before `&'", 1733}, - {"semicolon missing after %s declaration", 1734}, - {"junk at end of #pragma %s", 1735}, - {"invalid #pragma %s", 1736}, - {"#pragma implementation for %s appears after file is included", 1737}, - {"junk at end of #pragma GCC java_exceptions", 1738}, - {"\ - (Each undeclared identifier is reported only once for each function it \ - appears in.)", 1739}, - {"name lookup of `%s' changed", 1740}, - {"name lookup of `%s' changed for new ISO `for' scoping", 1741}, - {"real-valued template parameters when cross-compiling", 1742}, - {"methods cannot be converted to function pointers", 1743}, - {"ambiguous request for method pointer `%s'", 1744}, - {"invalid default template argument", 1745}, - {"no base or member initializers given following ':'", 1746}, - {"base initializers not allowed for non-member functions", 1747}, - {"only constructors take base initializers", 1748}, - {"anachronistic old style base class initializer", 1749}, - {"`>>' should be `> >' in template class name", 1750}, - {"ISO C++ forbids an empty condition for `%s'", 1751}, - {"ISO C++ forbids `&&'", 1752}, - {"ISO C++ forbids initialization of new expression with `='", 1753}, - {"ISO C++ forbids compound literals", 1754}, - {"ISO C++ forbids braced-groups within expressions", 1755}, - {"sigof type specifier", 1756}, - {"`sigof' applied to non-aggregate expression", 1757}, - {"`sigof' applied to non-aggregate type", 1758}, - {"storage class specifier `%s' not allowed after struct or class", 1759}, - {"type specifier `%s' not allowed after struct or class", 1760}, - {"type qualifier `%s' not allowed after struct or class", 1761}, - {"no body nor ';' separates two class, struct or union declarations", 1762}, - {"multiple access specifiers", 1763}, - {"multiple `virtual' specifiers", 1764}, - {"missing ';' before right brace", 1765}, - {"ISO C++ forbids array dimensions with parenthesized type in new", 1766}, - {"ISO C++ forbids label declarations", 1767}, - {"ISO C++ forbids computed gotos", 1768}, - {"label must be followed by statement", 1769}, - {"ISO C++ forbids compound statements inside for initializations", 1770}, - {"possibly missing ')'", 1771}, - {"type specifier omitted for parameter", 1772}, - {"creating array with size zero", 1773}, - {"use of `%s' in template", 1774}, - {"incomplete type unification", 1775}, - {"use of `%s' in template type unification", 1776}, - {"-frepo must be used with -c", 1777}, - {"mysterious repository information in %s", 1778}, - {"can't create repository information file `%s'", 1779}, - {"taking dynamic typeid of object with -fno-rtti", 1780}, - {"cannot use typeid with -fno-rtti", 1781}, - {"must #include before using typeid", 1782}, - {"adjusting pointers for covariant returns", 1783}, - {"recoverable compiler error, fixups for virtual function", 1784}, - {"ISO C++ does not permit named return values", 1785}, - {"can't redefine default return value for constructors", 1786}, - {" will be re-ordered to precede member initializations", 1787}, - {"`this' is unavailable for static member functions", 1788}, - {"invalid use of `this' in non-member function", 1789}, - {"invalid use of `this' at top level", 1790}, - {"template type parameters must use the keyword `class' or `typename'", 1791}, - {"identifier name `%s' conflicts with GNU C++ internal naming strategy", 1792}, - {"parse error", 1793}, - {"parse error at end of saved function text", 1794}, - {"parse error in method specification", 1795}, - {"function body for constructor missing", 1796}, - {"%s before `%s'", 1797}, - {"%s before `%c'", 1798}, - {"%s before `\\%o'", 1799}, - {"%s before `%s' token", 1800}, - {"non-lvalue in %s", 1801}, - {"\ - `java_interface' attribute can only be applied to Java class definitions", 1802}, - {"`com_interface' only supported with -fvtable-thunks", 1803}, - {"`com_interface' attribute can only be applied to class definitions", 1804}, - {"requested init_priority is not an integer constant", 1805}, - {"\ - can only use init_priority attribute on file-scope definitions of objects of \ - class type", 1806}, - {"requested init_priority is out of range", 1807}, - {"requested init_priority is reserved for internal use", 1808}, - {"init_priority attribute is not supported on this platform", 1809}, - {"\ - ISO C++ forbids %s between pointer of type `void *' and pointer-to-function", 1810}, - {"ISO C++ forbids applying `sizeof' to a function type", 1811}, - {"ISO C++ forbids applying `sizeof' to a member function", 1812}, - {"\ - ISO C++ forbids applying `sizeof' to type `void' which is an incomplete type", 1813}, - {"sizeof applied to a bit-field", 1814}, - {"ISO C++ forbids applying `sizeof' to an expression of function type", 1815}, - {"invalid reference to NULL ptr, use ptr-to-member instead", 1816}, - {"invalid use of `%s' on pointer to member", 1817}, - {"invalid type argument", 1818}, - {"ISO C++ forbids subscripting non-lvalue array", 1819}, - {"subscripting array declared `register'", 1820}, - {"pointer to member function called, but not in class scope", 1821}, - {"\ - invalid call to member function needing `this' in static member function \ - scope", 1822}, - {"ISO C++ forbids calling `::main' from within program", 1823}, - {"parameter type of called function is incomplete", 1824}, - {"%s rotate count is negative", 1825}, - {"%s rotate count >= width of type", 1826}, - {"ISO C++ forbids comparison between pointer and integer", 1827}, - {"comparison between signed and unsigned integer expressions", 1828}, - {"ISO C++ forbids using pointer of type `void *' in pointer arithmetic", 1829}, - {"ISO C++ forbids using a pointer-to-function in pointer arithmetic", 1830}, - {"\ - ISO C++ forbids using a pointer to member function in pointer arithmetic", 1831}, - {"ISO C++ forbids using pointer to a member in pointer arithmetic", 1832}, - {"ISO C++ forbids using pointer of type `void *' in subtraction", 1833}, - {"ISO C++ forbids using pointer to a function in subtraction", 1834}, - {"ISO C++ forbids using pointer to a method in subtraction", 1835}, - {"ISO C++ forbids using pointer to a member in subtraction", 1836}, - {"invalid use of a pointer to an incomplete type in pointer arithmetic", 1837}, - {"taking address of temporary", 1838}, - {"ISO C++ forbids %sing an enum", 1839}, - {"cast to non-reference type used as lvalue", 1840}, - {"ISO C++ forbids taking address of function `::main'", 1841}, - {"ISO C++ forbids taking the address of a cast to a non-lvalue expression", 1842}, - {"unary `&'", 1843}, - {"cannot take the address of `this', which is an rvalue expression", 1844}, - {"\ - ISO C++ forbids casting between pointer-to-function and pointer-to-object", 1845}, - {"ISO C++ forbids cast to non-reference type used as lvalue", 1846}, - {"ISO C++ forbids assignment of arrays", 1847}, - {"return value from function receives multiple initializations", 1848}, - {" in pointer to member function conversion", 1849}, - {" in pointer to member conversion", 1850}, - {"returning reference to temporary", 1851}, - {"reference to non-lvalue returned", 1852}, - {"returning a value from a destructor", 1853}, - {"cannot return from a handler of a function-try-block of a constructor", 1854}, - {"returning a value from a constructor", 1855}, - {"\ - return-statement with no value, in function declared with a non-void return \ - type", 1856}, - {"\ - return-statement with a value, in function declared with a void return type", 1857}, - {" because the following virtual functions are abstract:", 1858}, - {"Internal error #%d.", 1859}, - {"due to the presence of a constructor", 1860}, - {"comma expression used to initialize return value", 1861}, - {"cannot initialize arrays using this syntax", 1862}, - {"ANSI C++ forbids non-constant aggregate initializer expressions", 1863}, - {"initializing array with parameter list", 1864}, - {"initializer for scalar variable requires one element", 1865}, - {"aggregate has a partly bracketed initializer", 1866}, - {"non-trivial labeled initializers", 1867}, - {"non-empty initializer for array of empty elements", 1868}, - {"initializer list for object of class with virtual base classes", 1869}, - {"initializer list for object of class with base classes", 1870}, - {"initializer list for object using virtual functions", 1871}, - {"index value instead of field name in union initializer", 1872}, - {"excess elements in aggregate initializer", 1873}, - {"circular pointer delegation detected", 1874}, - {"result of `operator->()' yields non-pointer result", 1875}, - {"base operand of `->' is not a pointer", 1876}, - {"ISO C++ forbids defining types within %s", 1877}, - {"Can't create cross-reference file `%s'", 1878}, - {"In file included from %s:%u", 1879}, - {"\ - ,\n\ - from %s:%u", 1880}, - {"internal error: ", 1881}, - {"warning: ", 1882}, - {"%s: %s", 1883}, - {"traditional C rejects the `U' suffix", 1884}, - {"too many 'l' suffixes in integer constant", 1885}, - {"integer constant contains digits beyond the radix", 1886}, - {"integer constant out of range", 1887}, - {"integer constant is so large that it is unsigned", 1888}, - {"invalid suffix '%.*s' on integer constant", 1889}, - {"missing ')' after \"defined\"", 1890}, - {"operator \"defined\" requires an identifier", 1891}, - {"(\"%s\" is an alternative token for \"%s\" in C++)", 1892}, - {"\"defined\" operator appears during macro expansion", 1893}, - {"ISO C++ does not permit \"%s\" in #if", 1894}, - {"\"%s\" is not defined", 1895}, - {"octal escape sequence out of range", 1896}, - {"hex escape sequence out of range", 1897}, - {"integer overflow in preprocessor expression", 1898}, - {"impossible operator '%s'", 1899}, - {"comma operator in operand of #if", 1900}, - {"%s is too large", 1901}, - {"%s is shorter than expected", 1902}, - {"%s is a block device", 1903}, - {"No include path in which to find %s", 1904}, - {"Multiple include guards may be useful for:\n", 1905}, - {"absolute file name in remap_filename", 1906}, - {"ignoring nonexistent directory \"%s\"\n", 1907}, - {"%s: Not a directory", 1908}, - {"ignoring duplicate directory \"%s\"\n", 1909}, - {"-include and -imacros cannot be used with -fpreprocessed", 1910}, - {"#include \"...\" search starts here:\n", 1911}, - {"#include <...> search starts here:\n", 1912}, - {"End of search list.\n", 1913}, - {"I/O error on output", 1914}, - {"buffers still stacked in cpp_finish", 1915}, - {"Argument missing after %s", 1916}, - {"Assertion missing after %s", 1917}, - {"Directory name missing after %s", 1918}, - {"File name missing after %s", 1919}, - {"Macro name missing after %s", 1920}, - {"Path name missing after %s", 1921}, - {"Number missing after %s", 1922}, - {"Target missing after %s", 1923}, - {"Too many filenames. Type %s --help for usage info", 1924}, - {"Output filename specified twice", 1925}, - {"-I- specified twice", 1926}, - {"GNU CPP version %s (cpplib)", 1927}, - {"you must additionally specify either -M or -MM", 1928}, - {"Usage: %s [switches] input output\n", 1929}, - {"\ - Switches:\n\ - -include Include the contents of before other \ - files\n\ - -imacros Accept definition of macros in \n\ - -iprefix Specify as a prefix for next two options\n\ - -iwithprefix

    Add to the end of the system include path\n\ - -iwithprefixbefore Add to the end of the main include path\n\ - -isystem Add to the start of the system include \ - path\n", 1930}, - {"\ - -idirafter Add to the end of the system include path\n\ - -I Add to the end of the main include path\n\ - -I- Fine-grained include path control; see info \ - docs\n\ - -nostdinc Do not search system include directories\n\ - (dirs specified with -isystem will still be \ - used)\n\ - -nostdinc++ Do not search system include directories for C+\ - +\n\ - -o Put output into \n", 1931}, - {"\ - -pedantic Issue all warnings demanded by strict ISO C\n\ - -pedantic-errors Issue -pedantic warnings as errors instead\n\ - -trigraphs Support ISO C trigraphs\n\ - -lang-c Assume that the input sources are in C\n\ - -lang-c89 Assume that the input sources are in C89\n", 1932}, - {"\ - -lang-c++ Assume that the input sources are in C++\n\ - -lang-objc Assume that the input sources are in ObjectiveC\n\ - -lang-objc++ Assume that the input sources are in ObjectiveC+\ - +\n\ - -lang-asm Assume that the input sources are in assembler\n", 1933}, - {"\ - -std= Specify the conformance standard; one of:\n\ - gnu89, gnu99, c89, c99, iso9899:1990,\n\ - iso9899:199409, iso9899:1999\n\ - -+ Allow parsing of C++ style features\n\ - -w Inhibit warning messages\n\ - -Wtrigraphs Warn if trigraphs are encountered\n\ - -Wno-trigraphs Do not warn about trigraphs\n\ - -Wcomment{s} Warn if one comment starts inside another\n", 1934}, - {"\ - -Wno-comment{s} Do not warn about comments\n\ - -Wtraditional Warn about features not present in traditional \ - C\n\ - -Wno-traditional Do not warn about traditional C\n\ - -Wundef Warn if an undefined macro is used by #if\n\ - -Wno-undef Do not warn about testing undefined macros\n\ - -Wimport Warn about the use of the #import directive\n", 1935}, - {"\ - -Wno-import Do not warn about the use of #import\n\ - -Werror Treat all warnings as errors\n\ - -Wno-error Do not treat warnings as errors\n\ - -Wsystem-headers Do not suppress warnings from system headers\n\ - -Wno-system-headers Suppress warnings from system headers\n\ - -Wall Enable all preprocessor warnings\n", 1936}, - {"\ - -M Generate make dependencies\n\ - -MM As -M, but ignore system header files\n\ - -MF Write dependency output to the given file\n\ - -MG Treat missing header file as generated files\n", 1937}, - {"\ - -MP\t\t\t Generate phony targets for all headers\n\ - -MQ Add a MAKE-quoted target\n\ - -MT Add an unquoted target\n", 1938}, - {"\ - -D Define a with string '1' as its value\n\ - -D= Define a with as its value\n\ - -A () Assert the to \n\ - -A- () Disable the to \n\ - -U Undefine \n\ - -v Display the version number\n", 1939}, - {"\ - -H Print the name of header files as they are used\n\ - -C Do not discard comments\n\ - -dM Display a list of macro definitions active at \ - end\n\ - -dD Preserve macro definitions in output\n\ - -dN As -dD except that only the names are preserved\n\ - -dI Include #include directives in the output\n", 1940}, - {"\ - -fpreprocessed Treat the input file as already preprocessed\n\ - -ftabstop= Distance between tab stops for column reporting\n\ - -P Do not generate #line directives\n\ - -$ Do not allow '$' in identifiers\n\ - -remap Remap file names when including files.\n\ - --version Display version information\n\ - -h or --help Display this information\n", 1941}, - {"trigraph ??%c converted to %c", 1942}, - {"trigraph ??%c ignored", 1943}, - {"backslash and newline separated by space", 1944}, - {"backslash-newline at end of file", 1945}, - {"\"/*\" within comment", 1946}, - {"null character(s) ignored", 1947}, - {"%s in preprocessing directive", 1948}, - {"'$' character(s) in identifier", 1949}, - {"attempt to use poisoned \"%s\"", 1950}, - {"__VA_ARGS__ can only appear in the expansion of a C99 variadic macro", 1951}, - {"missing terminating %c character", 1952}, - {"possible start of unterminated string literal", 1953}, - {"multi-line string literals are deprecated", 1954}, - {"null character(s) preserved in literal", 1955}, - {"no newline at end of file", 1956}, - {"unterminated comment", 1957}, - {"C++ style comments are not allowed in ISO C89", 1958}, - {"(this will be reported only once per input file)", 1959}, - {"multi-line comment", 1960}, - {"directives may not be used inside a macro argument", 1961}, - {"Unspellable token %s", 1962}, - {"extra tokens at end of #%s directive", 1963}, - {"# followed by integer", 1964}, - {"suggest not using #elif in traditional C", 1965}, - {"traditional C ignores #%s with the # indented", 1966}, - {"suggest hiding #%s from traditional C with an indented #", 1967}, - {"#%s is a GCC extension", 1968}, - {"invalid preprocessing directive #%s", 1969}, - {"no macro name given in #%s directive", 1970}, - {"\"%s\" cannot be used as a macro name as it is an operator in C++", 1971}, - {"macro names must be identifiers", 1972}, - {"\"%s\" cannot be used as a macro name", 1973}, - {"undefining \"%s\"", 1974}, - {"missing terminating > character", 1975}, - {"#%s expects \"FILENAME\" or ", 1976}, - {"empty file name in #%s", 1977}, - {"#include nested too deeply", 1978}, - {"attempt to push file buffer with contexts stacked", 1979}, - {"#include_next in primary source file", 1980}, - {"#import is obsolete, use an #ifndef wrapper in the header file", 1981}, - {"invalid flag \"%s\" in line directive", 1982}, - {"\"%s\" after #line is not a positive integer", 1983}, - {"line number out of range", 1984}, - {"file \"%s\" left but not entered", 1985}, - {"expected to return to file \"%s\"", 1986}, - {"expected to return to line number %u", 1987}, - {"header flags for \"%s\" have changed", 1988}, - {"\"%s\" is not a valid filename", 1989}, - {"invalid #ident", 1990}, - {"unknown #pragma namespace %s", 1991}, - {"#pragma once is obsolete", 1992}, - {"#pragma once in main file", 1993}, - {"invalid #pragma GCC poison directive", 1994}, - {"poisoning existing macro \"%s\"", 1995}, - {"#pragma system_header ignored outside include file", 1996}, - {"cannot find source %s", 1997}, - {"current file is older than %s", 1998}, - {"_Pragma takes a parenthesized string literal", 1999}, - {"#else without #if", 2000}, - {"#else after #else", 2001}, - {"the conditional began here", 2002}, - {"#elif without #if", 2003}, - {"#elif after #else", 2004}, - {"#endif without #if", 2005}, - {"missing '(' after predicate", 2006}, - {"missing ')' to complete answer", 2007}, - {"predicate's answer is empty", 2008}, - {"assertion without predicate", 2009}, - {"predicate must be an identifier", 2010}, - {"\"%s\" re-asserted", 2011}, - {"", 2012}, - {"", 2013}, - {"", 2014}, - {"unterminated #%s", 2015}, - {"file \"%s\" entered but not left", 2016}, - {"invalid builtin macro \"%s\"", 2017}, - {"invalid string literal, ignoring final '\\'", 2018}, - {"pasting \"%s\" and \"%s\" does not give a valid preprocessing token", 2019}, - {"unterminated argument list invoking macro \"%s\"", 2020}, - {"ISO C99 requires rest arguments to be used", 2021}, - {"macro \"%s\" requires %u arguments, but only %u given", 2022}, - {"macro \"%s\" passed %u arguments, but takes just %u", 2023}, - {"function-like macro \"%s\" must be used with arguments in traditional C", 2024}, - {"duplicate macro parameter \"%s\"", 2025}, - {"\"%s\" may not appear in macro parameter list", 2026}, - {"macro parameters must be comma-separated", 2027}, - {"parameter name missing", 2028}, - {"anonymous variadic macros were introduced in C99", 2029}, - {"ISO C does not permit named variadic macros", 2030}, - {"missing ')' in macro parameter list", 2031}, - {"ISO C requires whitespace after the macro name", 2032}, - {"'#' is not followed by a macro parameter", 2033}, - {"'##' cannot appear at either end of a macro expansion", 2034}, - {"\"%s\" redefined", 2035}, - {"this is the location of the previous definition", 2036}, - {"macro argument \"%s\" would be stringified with -traditional.", 2037}, - {"invalid hash type %d in dump_definition", 2038}, - {"Invalid option %s", 2039}, - {"\"%s\" is not a valid option to the preprocessor", 2040}, - {"too many input files", 2041}, - {";; Processing block from %d to %d, %d sets.\n", 2042}, - {"%s:%d: warning: ", 2043}, - {"%s: warning: ", 2044}, - {"((anonymous))", 2045}, - {"%s: warnings being treated as errors\n", 2046}, - {"%s: %s: ", 2047}, - {"sorry, not implemented: ", 2048}, - {"%s ", 2049}, - {" %s", 2050}, - {"At top level:", 2051}, - {"In method `%s':", 2052}, - {"In function `%s':", 2053}, - {"compilation terminated.\n", 2054}, - {"%s:%d: confused by earlier errors, bailing out\n", 2055}, - {"\ - Please submit a full bug report,\n\ - with preprocessed source if appropriate.\n\ - See %s for instructions.\n", 2056}, - {"Unrecognizable insn:", 2057}, - {"Insn does not satisfy its constraints:", 2058}, - {"Internal compiler error: Error reporting routines re-entered.\n", 2059}, - {"Internal compiler error in %s, at %s:%d", 2060}, - {"In file included from %s:%d", 2061}, - {"\ - ,\n\ - from %s:%d", 2062}, - {":\n", 2063}, - {"DW_LOC_OP %s not implememnted\n", 2064}, - {"internal regno botch: regno = %d\n", 2065}, - {"can't get current directory", 2066}, - {"Can't access real part of complex value in hard register", 2067}, - {"can't access imaginary part of complex value in hard register", 2068}, - {"ICE: emit_insn used where emit_jump_insn needed:\n", 2069}, - {"abort in %s, at %s:%d", 2070}, - {"exception handling disabled, use -fexceptions to enable", 2071}, - {"argument of `__builtin_eh_return_regno' must be constant", 2072}, - {"__builtin_eh_return not supported on this target", 2073}, - {"stack limits not supported on this target", 2074}, - {"function using short complex types cannot be inline", 2075}, - {"unsupported wide integer operation", 2076}, - {"prior parameter's size depends on `%s'", 2077}, - {"returned value in block_exit_expr", 2078}, - {"no INTEGER type can hold a pointer on this configuration", 2079}, - {"configuration: REAL, INTEGER, and LOGICAL are %d bits wide,", 2080}, - {"and pointers are %d bits wide, but g77 doesn't yet work", 2081}, - {"properly unless they all are 32 bits wide.", 2082}, - {"Please keep this in mind before you report bugs. g77 should", 2083}, - {"support non-32-bit machines better as of version 0.6.", 2084}, - {"configuration: char * holds %d bits, but ftnlen only %d", 2085}, - {"\ - configuration: char * holds %d bits, but INTEGER only %d --\n\ - ASSIGN statement might fail", 2086}, - {"Directory name must immediately follow -I", 2087}, - {"overflowed output arg list for `%s'", 2088}, - {"--driver no longer supported", 2089}, - {"argument to `%s' missing", 2090}, - {"No input files; unwilling to write output files", 2091}, - {"Print g77-specific compiler version info, run internal tests", 2092}, - {"Program is written in typical FORTRAN 66 dialect", 2093}, - {"Program is written in typical Unix f77 dialect", 2094}, - {"Program does not use Unix-f77 dialectal features", 2095}, - {"Program is written in Fortran-90-ish dialect", 2096}, - {"\ - Treat local vars and COMMON blocks as if they were named in SAVE statements", 2097}, - {"Allow $ in symbol names", 2098}, - {"f2c-compatible code need not be generated", 2099}, - {"Unsupported; do not generate libf2c-calling code", 2100}, - {"Unsupported; affects code-generation of arrays", 2101}, - {"Program is written in Fortran-90-ish free form", 2102}, - {"Warn about use of (only a few for now) Fortran extensions", 2103}, - {"Program is written in VXT (Digital-like) FORTRAN", 2104}, - {"Disallow all ugly features", 2105}, - {"Hollerith and typeless constants not passed as arguments", 2106}, - {"Allow ordinary copying of ASSIGN'ed vars", 2107}, - {"Dummy array dimensioned to (1) is assumed-size", 2108}, - {"Trailing comma in procedure call denotes null argument", 2109}, - {"Allow REAL(Z) and AIMAG(Z) given DOUBLE COMPLEX Z", 2110}, - {"Initialization via DATA and PARAMETER is type-compatible", 2111}, - {"Allow INTEGER and LOGICAL interchangeability", 2112}, - {"Print internal debugging-related info", 2113}, - {"Initialize local vars and arrays to zero", 2114}, - {"Backslashes in character/hollerith constants not special (C-style)", 2115}, - {"Have front end emulate COMPLEX arithmetic to avoid bugs", 2116}, - {"Disable the appending of underscores to externals", 2117}, - {"Never append a second underscore to externals", 2118}, - {"Intrinsics spelled as e.g. SqRt", 2119}, - {"Intrinsics in uppercase", 2120}, - {"Intrinsics letters in arbitrary cases", 2121}, - {"Language keywords spelled as e.g. IOStat", 2122}, - {"Language keywords in uppercase", 2123}, - {"Language keyword letters in arbitrary cases", 2124}, - {"Internally convert most source to uppercase", 2125}, - {"Internally preserve source case", 2126}, - {"Symbol names spelled in mixed case", 2127}, - {"Symbol names in uppercase", 2128}, - {"Symbol names in lowercase", 2129}, - {"Program written in uppercase", 2130}, - {"Program written in lowercase", 2131}, - {"Program written in strict mixed-case", 2132}, - {"Compile as if program written in uppercase", 2133}, - {"Compile as if program written in lowercase", 2134}, - {"Preserve all spelling (case) used in program", 2135}, - {"Delete libU77 intrinsics with bad interfaces", 2136}, - {"Disable libU77 intrinsics with bad interfaces", 2137}, - {"Hide libU77 intrinsics with bad interfaces", 2138}, - {"Delete non-FORTRAN-77 intrinsics f2c supports", 2139}, - {"Disable non-FORTRAN-77 intrinsics f2c supports", 2140}, - {"Hide non-FORTRAN-77 intrinsics f2c supports", 2141}, - {"Delete non-FORTRAN-77 intrinsics F90 supports", 2142}, - {"Disable non-FORTRAN-77 intrinsics F90 supports", 2143}, - {"Hide non-FORTRAN-77 intrinsics F90 supports", 2144}, - {"Delete non-FORTRAN-77 intrinsics g77 supports", 2145}, - {"Disable non-FORTRAN 77 intrinsics F90 supports", 2146}, - {"Hide non-FORTRAN 77 intrinsics F90 supports", 2147}, - {"Delete MIL-STD 1753 intrinsics", 2148}, - {"Disable MIL-STD 1753 intrinsics", 2149}, - {"Hide MIL-STD 1753 intrinsics", 2150}, - {"Delete libU77 intrinsics", 2151}, - {"Disable libU77 intrinsics", 2152}, - {"Hide libU77 intrinsics", 2153}, - {"Delete non-FORTRAN-77 intrinsics VXT FORTRAN supports", 2154}, - {"Disable non-FORTRAN-77 intrinsics VXT FORTRAN supports", 2155}, - {"Hide non-FORTRAN-77 intrinsics VXT FORTRAN supports", 2156}, - {"Treat initial values of 0 like non-zero values", 2157}, - {"\ - Emit special debugging information for COMMON and EQUIVALENCE (disabled)", 2158}, - {"Take at least one trip through each iterative DO loop", 2159}, - {"Print names of program units as they are compiled", 2160}, - {"Disable fatal diagnostics about inter-procedural problems", 2161}, - {"Make prefix-radix non-decimal constants be typeless", 2162}, - {"Generate code to check subscript and substring bounds", 2163}, - {"Fortran-specific form of -fbounds-check", 2164}, - {"Disable warnings about inter-procedural problems", 2165}, - {"Warn about constructs with surprising meanings", 2166}, - {"Add a directory for INCLUDE searching", 2167}, - {"Set the maximum line length", 2168}, - {"the meaning of `\\a' varies with -traditional", 2169}, - {"non-ANSI-standard escape sequence, `\\%c'", 2170}, - {"non-ANSI escape sequence `\\%c'", 2171}, - {"unknown escape sequence `\\%c'", 2172}, - {"unknown escape sequence: `\\' followed by char code 0x%x", 2173}, - {"Badly formed directive -- no closing quote", 2174}, - {"#-lines for entering and leaving files don't match", 2175}, - {"Bad directive -- missing close-quote", 2176}, - {"ignoring pragma: %s", 2177}, - {"undefined or invalid # directive", 2178}, - {"invalid #line", 2179}, - {"Use `#line ...' instead of `# ...' in first line", 2180}, - {"invalid #-line", 2181}, - {"ASSIGNed FORMAT specifier is too small", 2182}, - {"ASSIGN to variable that is too small", 2183}, - {"ASSIGNed GOTO target variable is too small", 2184}, - {"%s no longer supported -- try -fvxt", 2185}, - {"%s no longer supported -- try -fno-vxt -ff90", 2186}, - {"%s disabled, use normal debugging flags", 2187}, - {"invalid `asm': %s", 2188}, - {"output_operand: %s", 2189}, - {"operand number missing after %-letter", 2190}, - {"operand number out of range", 2191}, - {"invalid %%-code", 2192}, - {"`%l' operand isn't a label", 2193}, - {"function might be possible candidate for attribute `noreturn'", 2194}, - {"`noreturn' function does return", 2195}, - {"control reaches end of non-void function", 2196}, - {"End insn %d for block %d not found in the insn stream.", 2197}, - {"Insn %d is in multiple basic blocks (%d and %d)", 2198}, - {"Head insn %d for block %d not found in the insn stream.", 2199}, - {"Basic block %i edge lists are corrupted", 2200}, - {"Basic block %d pred edge is corrupted", 2201}, - {"NOTE_INSN_BASIC_BLOCK is missing for block %d", 2202}, - {"NOTE_INSN_BASIC_BLOCK is missing for block %d\n", 2203}, - {"NOTE_INSN_BASIC_BLOCK %d in the middle of basic block %d", 2204}, - {"In basic block %d:", 2205}, - {"number of bb notes in insn chain (%d) != n_basic_blocks (%d)", 2206}, - {"comparison is always %d due to width of bitfield", 2207}, - {"comparison is always %d", 2208}, - {"`or' of unmatched not-equal tests is always 1", 2209}, - {"`and' of mutually exclusive equal-tests is always 0", 2210}, - {"`%s' might be used uninitialized in this function", 2211}, - {"variable `%s' might be clobbered by `longjmp' or `vfork'", 2212}, - {"argument `%s' might be clobbered by `longjmp' or `vfork'", 2213}, - {"function returns an aggregate", 2214}, - {"unused parameter `%s'", 2215}, - {"Ambiguous abbreviation %s", 2216}, - {"Incomplete `%s' option", 2217}, - {"Missing argument to `%s' option", 2218}, - {"Extraneous argument to `%s' option", 2219}, - {"Using builtin specs.\n", 2220}, - {"\ - Setting spec %s to '%s'\n\ - \n", 2221}, - {"Reading specs from %s\n", 2222}, - {"specs %%include syntax malformed after %ld characters", 2223}, - {"Could not find specs file %s\n", 2224}, - {"specs %%rename syntax malformed after %ld characters", 2225}, - {"specs %s spec was not found to be renamed", 2226}, - {"rename spec %s to %s\n", 2227}, - {"\ - spec is '%s'\n\ - \n", 2228}, - {"specs unknown %% command after %ld characters", 2229}, - {"specs file malformed after %ld characters", 2230}, - {"spec file has no spec for linking", 2231}, - {"-pipe not supported", 2232}, - {"\ - \n\ - Go ahead? (y or n) ", 2233}, - {"\ - Internal error: %s (program %s)\n\ - Please submit a full bug report.\n\ - See %s for instructions.", 2234}, - {"# %s %.2f %.2f\n", 2235}, - {"Usage: %s [options] file...\n", 2236}, - {"Options:\n", 2237}, - {" -pass-exit-codes Exit with highest error code from a phase\n", 2238}, - {" --help Display this information\n", 2239}, - {"\ - --target-help Display target specific command line options\n", 2240}, - {" (Use '-v --help' to display command line options of sub-processes)\n", 2241}, - {" -dumpspecs Display all of the built in spec strings\n", 2242}, - {" -dumpversion Display the version of the compiler\n", 2243}, - {" -dumpmachine Display the compiler's target processor\n", 2244}, - {"\ - -print-search-dirs Display the directories in the compiler's search \ - path\n", 2245}, - {"\ - -print-libgcc-file-name Display the name of the compiler's companion \ - library\n", 2246}, - {" -print-file-name= Display the full path to library \n", 2247}, - {"\ - -print-prog-name= Display the full path to compiler component \ - \n", 2248}, - {"\ - -print-multi-directory Display the root directory for versions of \ - libgcc\n", 2249}, - {"\ - -print-multi-lib Display the mapping between command line options \ - and\n\ - multiple library search directories\n", 2250}, - {"\ - -Wa, Pass comma-separated on to the \ - assembler\n", 2251}, - {"\ - -Wp, Pass comma-separated on to the \ - preprocessor\n", 2252}, - {"\ - -Wl, Pass comma-separated on to the linker\n", 2253}, - {" -Xlinker Pass on to the linker\n", 2254}, - {" -save-temps Do not delete intermediate files\n", 2255}, - {" -pipe Use pipes rather than intermediate files\n", 2256}, - {" -time Time the execution of each subprocess\n", 2257}, - {"\ - -specs= Override builtin specs with the contents of \ - \n", 2258}, - {"\ - -std= Assume that the input sources are for \n", 2259}, - {"\ - -B Add to the compiler's search paths\n", 2260}, - {" -b Run gcc for target , if installed\n", 2261}, - {"\ - -V Run gcc version number , if installed\n", 2262}, - {"\ - -v Display the programs invoked by the compiler\n", 2263}, - {"\ - -E Preprocess only; do not compile, assemble or \ - link\n", 2264}, - {" -S Compile only; do not assemble or link\n", 2265}, - {" -c Compile and assemble, but do not link\n", 2266}, - {" -o Place the output into \n", 2267}, - {"\ - -x Specify the language of the following input \ - files\n\ - Permissable languages include: c c++ assembler \ - none\n\ - 'none' means revert to the default behaviour of\n\ - guessing the language based on the file's \ - extension\n", 2268}, - {"\ - \n\ - Options starting with -g, -f, -m, -O, -W, or --param are automatically\n\ - passed on to the various sub-processes invoked by %s. In order to pass\n\ - other options on to these processes the -W options must be used.\n", 2269}, - {"argument to `-Xlinker' is missing", 2270}, - {"argument to `-specs' is missing", 2271}, - {"argument to `-specs=' is missing", 2272}, - {"argument to `-b' is missing", 2273}, - {"argument to `-B' is missing", 2274}, - {"argument to `-V' is missing", 2275}, - {"invalid version number format", 2276}, - {"cannot specify -o with -c or -S and multiple compilations", 2277}, - {"Warning: -pipe ignored because -save-temps specified", 2278}, - {"Warning: -pipe ignored because -time specified", 2279}, - {"argument to `-x' is missing", 2280}, - {"argument to `-%s' is missing", 2281}, - {"Warning: `-x %s' after last input file has no effect", 2282}, - {"Invalid specification! Bug in cc.", 2283}, - {"%s\n", 2284}, - {"Spec failure: '%%*' has not been initialised by pattern match", 2285}, - {"Warning: use of obsolete %%[ operator in specs", 2286}, - {"Processing spec %c%s%c, which is '%s'\n", 2287}, - {"Spec failure: Unrecognised spec option '%c'", 2288}, - {"unrecognized option `-%s'", 2289}, - {"install: %s%s\n", 2290}, - {"programs: %s\n", 2291}, - {"libraries: %s\n", 2292}, - {"\ - \n\ - For bug reporting instructions, please see:\n", 2293}, - {"Configured with: %s\n", 2294}, - {"Thread model: %s\n", 2295}, - {"gcc version %s\n", 2296}, - {"gcc driver version %s executing gcc version %s\n", 2297}, - {"No input files", 2298}, - {"%s: %s compiler not installed on this system", 2299}, - {"%s: linker input file unused because linking not done", 2300}, - {"language %s not recognized", 2301}, - {"Internal gcc abort.", 2302}, - {"Internal gcov abort.\n", 2303}, - {"gcov [-b] [-v] [-n] [-l] [-f] [-o OBJDIR] file\n", 2304}, - {"Could not open basic block file %s.\n", 2305}, - {"Could not open data file %s.\n", 2306}, - {"Assuming that all execution counts are zero.\n", 2307}, - {"Could not open program flow graph file %s.\n", 2308}, - {"No executable code associated with file %s.\n", 2309}, - {".da file contents exhausted too early\n", 2310}, - {".da file contents not exhausted\n", 2311}, - {"%6.2f%% of %d source lines executed in function %s\n", 2312}, - {"No executable source lines in function %s\n", 2313}, - {"%6.2f%% of %d branches executed in function %s\n", 2314}, - {"%6.2f%% of %d branches taken at least once in function %s\n", 2315}, - {"No branches in function %s\n", 2316}, - {"%6.2f%% of %d calls executed in function %s\n", 2317}, - {"No calls in function %s\n", 2318}, - {"didn't use all bb entries of graph, function %s\n", 2319}, - {"block_num = %ld, num_blocks = %d\n", 2320}, - {"ERROR: too many basic blocks in .bb file %s\n", 2321}, - {"%6.2f%% of %d source lines executed in file %s\n", 2322}, - {"No executable source lines in file %s\n", 2323}, - {"%6.2f%% of %d branches executed in file %s\n", 2324}, - {"%6.2f%% of %d branches taken at least once in file %s\n", 2325}, - {"No branches in file %s\n", 2326}, - {"%6.2f%% of %d calls executed in file %s\n", 2327}, - {"No calls in file %s\n", 2328}, - {"Could not open source file %s.\n", 2329}, - {"Could not open output file %s.\n", 2330}, - {"Creating %s.\n", 2331}, - {"call %d never executed\n", 2332}, - {"call %d returns = %d\n", 2333}, - {"call %d returns = %d%%\n", 2334}, - {"branch %d never executed\n", 2335}, - {"branch %d taken = %d\n", 2336}, - {"branch %d taken = %d%%\n", 2337}, - {"Unexpected EOF while reading source file %s.\n", 2338}, - {"GCSE disabled: %d > 1000 basic blocks and %d >= 20 edges/basic block", 2339}, - {"GCSE disabled: %d basic blocks and %d registers", 2340}, - {"fix_sched_param: unknown param: %s", 2341}, - {"function cannot be inline", 2342}, - {"varargs function cannot be inline", 2343}, - {"function using alloca cannot be inline", 2344}, - {"function using setjmp cannot be inline", 2345}, - {"function uses __builtin_eh_return", 2346}, - {"function with nested functions cannot be inline", 2347}, - {"function with label addresses used in initializers cannot inline", 2348}, - {"function too large to be inline", 2349}, - {"no prototype, and parameter address used; cannot be inline", 2350}, - {"inline functions not supported for this return value type", 2351}, - {"function with varying-size return value cannot be inline", 2352}, - {"function with varying-size parameter cannot be inline", 2353}, - {"function with transparent unit parameter cannot be inline", 2354}, - {"function with computed jump cannot inline", 2355}, - {"function with nonlocal goto cannot be inline", 2356}, - {"function with target specific attribute(s) cannot be inlined", 2357}, - {"internal error in check-init: tree code not implemented: %s", 2358}, - {"internal error - too many interface type", 2359}, - {"bad method signature", 2360}, - {"misplaced ConstantValue attribute (not in any field)", 2361}, - {"duplicate ConstanValue atribute for field '%s'", 2362}, - {"field '%s' not found in class", 2363}, - {"abstract method in non-abstract class", 2364}, - {"non-static method '%s' overrides static method", 2365}, - {"In %s: overlapped variable and exception ranges at %d", 2366}, - {"bad type in parameter debug info", 2367}, - {"bad PC range for debug info for local `%s'", 2368}, - {"stack underflow - dup* operation", 2369}, - {"\ - reference `%s' is ambiguous: appears in interface `%s' and interface `%s'", 2370}, - {"field `%s' not found", 2371}, - {"ret instruction not implemented", 2372}, - {"method '%s' not found in class", 2373}, - {"failed to find class '%s'", 2374}, - {"Class '%s' has no method named '%s' matching signature '%s'", 2375}, - {"invokestatic on non static method", 2376}, - {"invokestatic on abstract method", 2377}, - {"invoke[non-static] on static method", 2378}, - {"Missing field '%s' in '%s'", 2379}, - {"Mismatching signature for field '%s' in '%s'", 2380}, - {"assignment to final field `%s' not in field's class", 2381}, - {"assignment to final static field `%s' not in class initializer", 2382}, - {"assignment to final field `%s' not in constructor", 2383}, - {"Can't expand %s", 2384}, - {"invalid PC in line number table", 2385}, - {"Unreachable bytecode from %d to before %d.", 2386}, - {"Unreachable bytecode from %d to the end of the method.", 2387}, - {"unrecogized wide sub-instruction", 2388}, - {"\ - Source file for class `%s' is newer than its matching class file. Source \ - file used instead", 2389}, - {"bad string constant", 2390}, - {"bad value constant type %d, index %d", 2391}, - {"can't reopen %s", 2392}, - {"Cannot find file for class %s.", 2393}, - {"not a valid Java .class file", 2394}, - {"error while parsing constant pool", 2395}, - {"error in constant pool entry #%d\n", 2396}, - {"reading class %s for the second time from %s", 2397}, - {"error while parsing fields", 2398}, - {"error while parsing methods", 2399}, - {"error while parsing final attributes", 2400}, - {"\ - The `java.lang.Object' that was found in `%s' didn't have the special zero-\ - length `gnu.gcj.gcj-compiled' attribute. This generally means that your \ - classpath is incorrect set. Use `info gcj \"Input Options\"' to see the info \ - page describing how to set the classpath.", 2401}, - {"missing Code attribute", 2402}, - {"error closing %s", 2403}, - {"source file seen twice on command line and will be compiled only once.", 2404}, - {"no input file specified", 2405}, - {"can't close input file %s", 2406}, - {"Premature end of input file %s", 2407}, - {"bad zip/jar file %s", 2408}, - {"\ - internal error in generate_bytecode_insn - tree code not implemented: %s", 2409}, - {"can't create directory %s", 2410}, - {"can't to open %s", 2411}, - {"Only one of `--print-main', `--list-class', and `--complexity' allowed", 2412}, - {"Can't open output file `%s'", 2413}, - {"File not found `%s'", 2414}, - {"can't specify `-D' without `--main'\n", 2415}, - {"Warning: already-compiled .class files ignored with -C", 2416}, - {"cannot specify both -C and -o", 2417}, - {"cannot create temporary file", 2418}, - {"using both @FILE with multiple files not implemented", 2419}, - {"cannot specify `main' class when not linking", 2420}, - {"Disable automatic array bounds checking", 2421}, - {"Make is_compiled_class return 1", 2422}, - {"Dump class files to .class", 2423}, - {"input file is list of file names to compile", 2424}, - {"Generate code for Boehm GC", 2425}, - {"Don't put synchronization structure in each object", 2426}, - {"Assume native functions are implemented using JNI", 2427}, - {"Set class path and suppress system path", 2428}, - {"Set class path", 2429}, - {"Choose class whose main method should be used", 2430}, - {"Choose input encoding (default is UTF-8)", 2431}, - {"Add directory to class path", 2432}, - {"Directory where class files should be written", 2433}, - {"Use built-in instructions for division", 2434}, - {"Warn if modifiers are specified when not necessary", 2435}, - {"Warn if deprecated empty statements are found", 2436}, - {"Warn if .class files are out of date", 2437}, - {"Always check for non gcj generated classes archives", 2438}, - {"can't do dependency tracking with input from stdin", 2439}, - {"couldn't determine target name for dependency tracking", 2440}, - {"\ - unknown encoding: `%s'\n\ - This might mean that your locale's encoding is not supported\n\ - by your system's iconv(3) implementation. If you aren't trying\n\ - to use a particular encoding for your input file, try the\n\ - `--encoding=UTF-8' option.", 2441}, - {"Can't mangle %s", 2442}, - {"internal error - invalid Utf8 name", 2443}, - {"Missing name", 2444}, - {"';' expected", 2445}, - {"'*' expected", 2446}, - {"Class or interface declaration expected", 2447}, - {"Missing class name", 2448}, - {"'{' expected", 2449}, - {"Missing super class name", 2450}, - {"Missing interface name", 2451}, - {"Missing term", 2452}, - {"Missing variable initializer", 2453}, - {"Invalid declaration", 2454}, - {"Can't specify array dimension in a declaration", 2455}, - {"']' expected", 2456}, - {"Unbalanced ']'", 2457}, - {"Invalid method declaration, method name required", 2458}, - {"Identifier expected", 2459}, - {"Invalid method declaration, return type required", 2460}, - {"')' expected", 2461}, - {"Missing formal parameter term", 2462}, - {"Missing identifier", 2463}, - {"Missing class type term", 2464}, - {"Invalid interface type", 2465}, - {"':' expected", 2466}, - {"Invalid expression statement", 2467}, - {"'(' expected", 2468}, - {"Missing term or ')'", 2469}, - {"Missing or invalid constant expression", 2470}, - {"Missing term and ')' expected", 2471}, - {"Invalid control expression", 2472}, - {"Invalid update expression", 2473}, - {"Invalid init statement", 2474}, - {"Missing term or ')' expected", 2475}, - {"'class' or 'this' expected", 2476}, - {"'class' expected", 2477}, - {"')' or term expected", 2478}, - {"'[' expected", 2479}, - {"Field expected", 2480}, - {"Missing term and ']' expected", 2481}, - {"']' expected, invalid type expression", 2482}, - {"Invalid type expression", 2483}, - {"Invalid reference type", 2484}, - {"Constructor invocation must be first thing in a constructor", 2485}, - {"Only constructors can invoke constructors", 2486}, - {": `%s' JDK1.1(TM) feature", 2487}, - {"\ - %s.\n\ - %s", 2488}, - {"Can't use '$' as a separator for inner classes", 2489}, - {"malformed .zip archive in CLASSPATH: %s", 2490}, - {"\ - Can't find default package `%s'. Check the CLASSPATH environment variable \ - and the access to the archives.", 2491}, - {"missing static field `%s'", 2492}, - {"not a static field `%s'", 2493}, - {"No case for %s", 2494}, - {"unregistered operator %s", 2495}, - {"internal error - use of undefined type", 2496}, - {"junk at end of signature string", 2497}, - {"bad pc in exception_table", 2498}, - {"unknown opcode %d@pc=%d during verification", 2499}, - {"verification error at PC=%d", 2500}, - {"Dump decls to a .decl file", 2501}, - {"Generate code for GNU runtime environment", 2502}, - {"Generate code for NeXT runtime environment", 2503}, - {"Warn if a selector has multiple methods", 2504}, - {"Do not warn if inherited methods are unimplemented", 2505}, - {"Generate C header of platform specific features", 2506}, - {"Specify the name of the class for constant strings", 2507}, - {"no class name specified as argument to -fconstant-string-class", 2508}, - {"object does not conform to the `%s' protocol", 2509}, - {"class `%s' does not implement the `%s' protocol", 2510}, - {"`%s' cannot be statically allocated", 2511}, - {"Unexpected type for `id' (%s)", 2512}, - {"Undefined type `id', please import ", 2513}, - {"Cannot find protocol declaration for `%s'", 2514}, - {"Cannot find interface declaration for `%s'", 2515}, - {"Cannot find class `%s'", 2516}, - {"Class `%s' already exists", 2517}, - {"Cannot find interface declaration for `%s', superclass of `%s'", 2518}, - {"Circular inheritance in interface declaration for `%s'", 2519}, - {"inconsistent instance variable specification", 2520}, - {"multiple declarations for method `%s'", 2521}, - {"invalid receiver type `%s'", 2522}, - {"`%s' does not respond to `%s'", 2523}, - {"no super class declared in interface for `%s'", 2524}, - {"cannot find class (factory) method.", 2525}, - {"return type for `%s' defaults to id", 2526}, - {"method `%s' not implemented by protocol.", 2527}, - {"return type defaults to id", 2528}, - {"cannot find method.", 2529}, - {"instance variable `%s' accessed in class method", 2530}, - {"duplicate definition of class method `%s'.", 2531}, - {"duplicate declaration of class method `%s'.", 2532}, - {"duplicate definition of instance method `%s'.", 2533}, - {"duplicate declaration of instance method `%s'.", 2534}, - {"duplicate interface declaration for category `%s(%s)'", 2535}, - {"instance variable `%s' is declared private", 2536}, - {"instance variable `%s' is declared %s", 2537}, - {"static access to object of type `id'", 2538}, - {"incomplete implementation of class `%s'", 2539}, - {"incomplete implementation of category `%s'", 2540}, - {"method definition for `%c%s' not found", 2541}, - {"%s `%s' does not fully implement the `%s' protocol", 2542}, - {"reimplementation of class `%s'", 2543}, - {"conflicting super class name `%s'", 2544}, - {"duplicate interface declaration for class `%s'", 2545}, - {"duplicate declaration for protocol `%s'", 2546}, - {"[super ...] must appear in a method context", 2547}, - {"potential selector conflict for method `%s'", 2548}, - {"`@end' must appear in an implementation context", 2549}, - {"method definition not in class context", 2550}, - {"syntax error at '@' token", 2551}, - {"invalid parameter `%s'", 2552}, - {"Arc profiling: some edge counts were bad.", 2553}, - {"file %s not found, execution counts assumed to be zero.", 2554}, - {"%s: internal abort\n", 2555}, - {"%s: error writing file `%s': %s\n", 2556}, - {"%s: usage '%s [ -VqfnkN ] [ -i ] [ filename ... ]'\n", 2557}, - {"%s: usage '%s [ -VqfnkNlgC ] [ -B ] [ filename ... ]'\n", 2558}, - {"%s: warning: no read access for file `%s'\n", 2559}, - {"%s: warning: no write access for file `%s'\n", 2560}, - {"%s: warning: no write access for dir containing `%s'\n", 2561}, - {"%s: invalid file name: %s\n", 2562}, - {"%s: %s: can't get status: %s\n", 2563}, - {"\ - \n\ - %s: fatal error: aux info file corrupted at line %d\n", 2564}, - {"%s:%d: declaration of function `%s' takes different forms\n", 2565}, - {"%s: compiling `%s'\n", 2566}, - {"%s: wait: %s\n", 2567}, - {"%s: subprocess got fatal signal %d\n", 2568}, - {"%s: %s exited with status %d\n", 2569}, - {"%s: warning: missing SYSCALLS file `%s'\n", 2570}, - {"%s: can't read aux info file `%s': %s\n", 2571}, - {"%s: can't get status of aux info file `%s': %s\n", 2572}, - {"%s: can't open aux info file `%s' for reading: %s\n", 2573}, - {"%s: error reading aux info file `%s': %s\n", 2574}, - {"%s: error closing aux info file `%s': %s\n", 2575}, - {"%s: can't delete aux info file `%s': %s\n", 2576}, - {"%s: can't delete file `%s': %s\n", 2577}, - {"%s: warning: can't rename file `%s' to `%s': %s\n", 2578}, - {"%s: conflicting extern definitions of '%s'\n", 2579}, - {"%s: declarations of '%s' will not be converted\n", 2580}, - {"%s: conflict list for '%s' follows:\n", 2581}, - {"%s: warning: using formals list from %s(%d) for function `%s'\n", 2582}, - {"%s: %d: `%s' used but missing from SYSCALLS\n", 2583}, - {"%s: %d: warning: no extern definition for `%s'\n", 2584}, - {"%s: warning: no static definition for `%s' in file `%s'\n", 2585}, - {"%s: multiple static defs of `%s' in file `%s'\n", 2586}, - {"%s: %d: warning: source too confusing\n", 2587}, - {"%s: %d: warning: varargs function declaration not converted\n", 2588}, - {"%s: declaration of function `%s' not converted\n", 2589}, - {"%s: warning: too many parameter lists in declaration of `%s'\n", 2590}, - {"\ - \n\ - %s: warning: too few parameter lists in declaration of `%s'\n", 2591}, - {"%s: %d: warning: found `%s' but expected `%s'\n", 2592}, - {"%s: local declaration for function `%s' not inserted\n", 2593}, - {"\ - \n\ - %s: %d: warning: can't add declaration of `%s' into macro call\n", 2594}, - {"%s: global declarations for file `%s' not inserted\n", 2595}, - {"%s: definition of function `%s' not converted\n", 2596}, - {"%s: %d: warning: definition of %s not converted\n", 2597}, - {"%s: found definition of `%s' at %s(%d)\n", 2598}, - {"%s: %d: warning: `%s' excluded by preprocessing\n", 2599}, - {"%s: function definition not converted\n", 2600}, - {"%s: `%s' not converted\n", 2601}, - {"%s: would convert file `%s'\n", 2602}, - {"%s: converting file `%s'\n", 2603}, - {"%s: can't get status for file `%s': %s\n", 2604}, - {"%s: can't open file `%s' for reading: %s\n", 2605}, - {"\ - \n\ - %s: error reading input file `%s': %s\n", 2606}, - {"%s: can't create/open clean file `%s': %s\n", 2607}, - {"%s: warning: file `%s' already saved in `%s'\n", 2608}, - {"%s: can't link file `%s' to `%s': %s\n", 2609}, - {"%s: can't create/open output file `%s': %s\n", 2610}, - {"%s: can't change mode of file `%s': %s\n", 2611}, - {"%s: cannot get working directory: %s\n", 2612}, - {"%s: input file names must have .c suffixes: %s\n", 2613}, - {"conversion from NaN to int", 2614}, - {"conversion from NaN to unsigned int", 2615}, - {"floating point overflow", 2616}, - {"overflow on truncation to integer", 2617}, - {"overflow on truncation to unsigned integer", 2618}, - {"%s: argument domain error", 2619}, - {"%s: function singularity", 2620}, - {"%s: overflow range error", 2621}, - {"%s: underflow range error", 2622}, - {"%s: total loss of precision", 2623}, - {"%s: partial loss of precision", 2624}, - {"%s: NaN - producing operation", 2625}, - {"Output constraint %d must specify a single register", 2626}, - {"Output regs must be grouped at top of stack", 2627}, - {"Implicitly popped regs must be grouped at top of stack", 2628}, - {"Output operand %d must use `&' constraint", 2629}, - {"can't use '%s' as a %s register", 2630}, - {"global register variable follows a function definition", 2631}, - {"register used for two global register variables", 2632}, - {"call-clobbered register used for global register variable", 2633}, - {"cannot reload integer constant operand in `asm'", 2634}, - {"impossible register constraint in `asm'", 2635}, - {"`&' constraint used with no register class", 2636}, - {"inconsistent operand constraints in an `asm'", 2637}, - {"frame size too large for reliable stack checking", 2638}, - {"try reducing the number of local variables", 2639}, - {"Can't find a register in class `%s' while reloading `asm'.", 2640}, - {"Unable to find a register to spill in class `%s'.", 2641}, - {"`asm' operand requires impossible reload", 2642}, - {"`asm' operand constraint incompatible with operand size", 2643}, - {"output operand is constant in `asm'", 2644}, - {"RTL check: access of elt %d of `%s' with last elt %d in %s, at %s:%d", 2645}, - {"\ - RTL check: expected elt %d type '%c', have '%c' (rtx %s) in %s, at %s:%d", 2646}, - {"\ - RTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s) in %s, at %\ - s:%d", 2647}, - {"RTL check: expected code `%s', have `%s' in %s, at %s:%d", 2648}, - {"RTL check: expected code `%s' or `%s', have `%s' in %s, at %s:%d", 2649}, - {"RTL check: access of elt %d of vector with last elt %d in %s, at %s:%d", 2650}, - {"jump to `%s' invalidly jumps into binding contour", 2651}, - {"label `%s' used before containing binding contour", 2652}, - {"`asm' cannot be used in function where memory usage is checked", 2653}, - {"`asm' cannot be used with `-fcheck-memory-usage'", 2654}, - {"unknown register name `%s' in `asm'", 2655}, - {"too many alternatives in `asm'", 2656}, - {"operand constraints for `asm' differ in number of alternatives", 2657}, - {"output operand constraint lacks `='", 2658}, - {"output constraint `%c' for operand %d is not at the beginning", 2659}, - {"output operand constraint %d contains `+'", 2660}, - {"operand constraint contains '+' or '=' at illegal position.", 2661}, - {"`%%' constraint used with last operand", 2662}, - {"matching constraint not valid in output operand", 2663}, - {"invalid punctuation `%c' in constraint", 2664}, - {"output number %d not directly addressable", 2665}, - {"more than %d operands in `asm'", 2666}, - {"hard register `%s' listed as input operand to `asm'", 2667}, - {"input operand constraint contains `%c'", 2668}, - {"matching constraint references invalid operand number", 2669}, - {"asm operand %d probably doesn't match constraints", 2670}, - {"unused variable `%s'", 2671}, - {"enumeration value `%s' not handled in switch", 2672}, - {"case value `%ld' not in enumerated type", 2673}, - {"case value `%ld' not in enumerated type `%s'", 2674}, - {"type size can't be explicitly evaluated", 2675}, - {"variable-size type declared outside of any function", 2676}, - {"size of `%s' is %d bytes", 2677}, - {"size of `%s' is larger than %d bytes", 2678}, - {"packed attribute causes inefficient alignment for `%s'", 2679}, - {"packed attribute is unnecessary for `%s'", 2680}, - {"padding struct to align `%s'", 2681}, - {"padding struct size to alignment boundary", 2682}, - {"packed attribute causes inefficient alignment", 2683}, - {"packed attribute is unnecessary", 2684}, - {"\"%s\" and \"%s\" identical in first %d characters", 2685}, - {"\ - \n\ - Execution times (seconds)\n", 2686}, - {" TOTAL :", 2687}, - {"time in %s: %ld.%06ld (%ld%%)\n", 2688}, - {"collect: reading %s\n", 2689}, - {"collect: recompiling %s\n", 2690}, - {"collect: tweaking %s in %s\n", 2691}, - {"collect: relinking\n", 2692}, - {"ld returned %d exit status", 2693}, - {"Generate debugging info in default format", 2694}, - {"Generate debugging info in default extended format", 2695}, - {"Generate STABS format debug info", 2696}, - {"Generate extended STABS format debug info", 2697}, - {"Generate DWARF-1 format debug info", 2698}, - {"Generate extended DWARF-1 format debug info", 2699}, - {"Generate DWARF-2 debug info", 2700}, - {"Generate XCOFF format debug info", 2701}, - {"Generate extended XCOFF format debug info", 2702}, - {"Generate COFF format debug info", 2703}, - {"Do not store floats in registers", 2704}, - {"Consider all mem refs through pointers as volatile", 2705}, - {"Consider all mem refs to global data to be volatile", 2706}, - {"Consider all mem refs to static data to be volatile", 2707}, - {"Defer popping functions args from stack until later", 2708}, - {"When possible do not generate stack frames", 2709}, - {"Optimize sibling and tail recursive calls", 2710}, - {"When running CSE, follow jumps to their targets", 2711}, - {"When running CSE, follow conditional jumps", 2712}, - {"Perform a number of minor, expensive optimisations", 2713}, - {"Perform jump threading optimisations", 2714}, - {"Perform strength reduction optimisations", 2715}, - {"Perform loop unrolling when iteration count is known", 2716}, - {"Perform loop unrolling for all loops", 2717}, - {"Force all loop invariant computations out of loops", 2718}, - {"Strength reduce all loop general induction variables", 2719}, - {"Store strings in writable data section", 2720}, - {"Enable machine specific peephole optimisations", 2721}, - {"Copy memory operands into registers before using", 2722}, - {"Copy memory address constants into regs before using", 2723}, - {"Allow function addresses to be held in registers", 2724}, - {"Integrate simple functions into their callers", 2725}, - {"Generate code for funcs even if they are fully inlined", 2726}, - {"Pay attention to the 'inline' keyword", 2727}, - {"Emit static const variables even if they are not used", 2728}, - {"Check for syntax errors, then stop", 2729}, - {"Mark data as shared rather than private", 2730}, - {"Enable saving registers around function calls", 2731}, - {"Return 'short' aggregates in memory, not registers", 2732}, - {"Return 'short' aggregates in registers", 2733}, - {"Attempt to fill delay slots of branch instructions", 2734}, - {"Perform the global common subexpression elimination", 2735}, - {"Run CSE pass after loop optimisations", 2736}, - {"Run the loop optimiser twice", 2737}, - {"Delete useless null pointer checks", 2738}, - {"Pretend that host and target use the same FP format", 2739}, - {"Reschedule instructions before register allocation", 2740}, - {"Reschedule instructions after register allocation", 2741}, - {"Enable scheduling across basic blocks", 2742}, - {"Allow speculative motion of non-loads", 2743}, - {"Allow speculative motion of some loads", 2744}, - {"Allow speculative motion of more loads", 2745}, - {"Replace add,compare,branch with branch on count reg", 2746}, - {"Generate position independent code, if possible", 2747}, - {"Enable exception handling", 2748}, - {"Just generate unwind tables for exception handling", 2749}, - {"Support synchronous non-call exceptions", 2750}, - {"Insert arc based program profiling code", 2751}, - {"Create data files needed by gcov", 2752}, - {"Use profiling information for branch probabilities", 2753}, - {"Reorder basic blocks to improve code placement", 2754}, - {"Do the register renaming optimization pass", 2755}, - {"Improve FP speed by violating ANSI & IEEE rules", 2756}, - {"Do not put unitialised globals in the common section", 2757}, - {"Do not generate .size directives", 2758}, - {"place each function into its own section", 2759}, - {"place data items into their own section", 2760}, - {"Add extra commentry to assembler output", 2761}, - {"Output GNU ld formatted global initialisers", 2762}, - {"Enables a register move optimisation", 2763}, - {"Do the full regmove optimization pass", 2764}, - {"Pack structure members together without holes", 2765}, - {"Insert stack checking code into the program", 2766}, - {"Specify that arguments may alias each other & globals", 2767}, - {"Assume arguments may alias globals but not each other", 2768}, - {"Assume arguments do not alias each other or globals", 2769}, - {"Assume strict aliasing rules apply", 2770}, - {"Align the start of loops", 2771}, - {"Align labels which are only reached by jumping", 2772}, - {"Align all labels", 2773}, - {"Align the start of functions", 2774}, - {"Generate code to check every memory access", 2775}, - {"Add a prefix to all function names", 2776}, - {"\ - Suppress output of instruction numbers and line number notes in debugging \ - dumps", 2777}, - {"Instrument function entry/exit with profiling calls", 2778}, - {"Enable SSA optimizations", 2779}, - {"Enable dead code elimination", 2780}, - {"External symbols have a leading underscore", 2781}, - {"Process #ident directives", 2782}, - {"Enables an rtl peephole pass run before sched2", 2783}, - {"Enables guessing of branch probabilities", 2784}, - {"Set errno after built-in math functions", 2785}, - {"Convert floating point constant to single precision constant", 2786}, - {"Report time taken by each compiler pass at end of run", 2787}, - {"Report on permanent memory allocation at end of run", 2788}, - {"Trap for signed overflow in addition / subtraction / multiplication.", 2789}, - {"Compile just for ISO C89", 2790}, - {"Do not promote floats to double if using -traditional", 2791}, - {"Determine language standard", 2792}, - {"Make bitfields by unsigned by default", 2793}, - {"Make 'char' be signed by default", 2794}, - {"Make 'char' be unsigned by default", 2795}, - {"Attempt to support traditional K&R style C", 2796}, - {"Do not recognise the 'asm' keyword", 2797}, - {"Do not recognise any built in functions", 2798}, - {"Assume normal C execution environment", 2799}, - {"Assume that standard libraries & main might not exist", 2800}, - {"Allow different types as args of ? operator", 2801}, - {"Allow the use of $ inside identifiers", 2802}, - {"Use the same size for double as for float", 2803}, - {"Use the smallest fitting integer to hold enums", 2804}, - {"Override the underlying type for wchar_t to `unsigned short'", 2805}, - {"Enable most warning messages", 2806}, - {"Warn about casting functions to incompatible types", 2807}, - {"Warn about functions which might be candidates for format attributes", 2808}, - {"Warn about casts which discard qualifiers", 2809}, - {"Warn about subscripts whose type is 'char'", 2810}, - {"Warn if nested comments are detected", 2811}, - {"Warn about possibly confusing type conversions", 2812}, - {"Warn about printf/scanf/strftime/strfmon format anomalies", 2813}, - {"Don't warn about strftime formats yielding 2 digit years", 2814}, - {"Don't warn about too many arguments to format functions", 2815}, - {"Warn about non-string-literal format strings", 2816}, - {"Warn about possible security problems with format functions", 2817}, - {"Warn about implicit function declarations", 2818}, - {"Warn when a declaration does not specify a type", 2819}, - {"Warn about the use of the #import directive", 2820}, - {"Do not warn about using 'long long' when -pedantic", 2821}, - {"Warn about suspicious declarations of main", 2822}, - {"Warn about possibly missing braces around initialisers", 2823}, - {"Warn about global funcs without previous declarations", 2824}, - {"Warn about global funcs without prototypes", 2825}, - {"Warn about use of multicharacter literals", 2826}, - {"Warn about externs not at file scope level", 2827}, - {"Warn about possible missing parentheses", 2828}, - {"Warn about possible violations of sequence point rules", 2829}, - {"Warn about function pointer arithmetic", 2830}, - {"Warn about multiple declarations of the same object", 2831}, - {"Warn about signed/unsigned comparisons", 2832}, - {"Warn about testing equality of floating point numbers", 2833}, - {"Warn about unrecognized pragmas", 2834}, - {"Warn about non-prototyped function decls", 2835}, - {"Warn about constructs whose meaning change in ISO C", 2836}, - {"Warn when trigraphs are encountered", 2837}, - {"Mark strings as 'const char *'", 2838}, - {"Warn when a function is unused", 2839}, - {"Warn when a label is unused", 2840}, - {"Warn when a function parameter is unused", 2841}, - {"Warn when a variable is unused", 2842}, - {"Warn when an expression value is unused", 2843}, - {"Do not suppress warnings from system headers", 2844}, - {"Treat all warnings as errors", 2845}, - {"Warn when one local variable shadows another", 2846}, - {"Warn about enumerated switches missing a specific case", 2847}, - {"Warn about returning structures, unions or arrays", 2848}, - {"Warn about pointer casts which increase alignment", 2849}, - {"Warn about code that will never be executed", 2850}, - {"Warn about unitialized automatic variables", 2851}, - {"Warn when an inlined function cannot be inlined", 2852}, - {"Warn when the packed attribute has no effect on struct layout", 2853}, - {"Warn when padding is required to align struct members", 2854}, - {"Warn when an optimization pass is disabled", 2855}, - {"Warn about functions which might be candidates for attribute noreturn", 2856}, - {"Invalid option `%s'", 2857}, - {"Internal error: %s", 2858}, - {"`%s' used but never defined", 2859}, - {"`%s' declared `static' but never defined", 2860}, - {"`%s' defined but not used", 2861}, - {"can't open %s for writing", 2862}, - {"-ffunction-sections not supported for this target.", 2863}, - {"-fdata-sections not supported for this target.", 2864}, - {"-ffunction-sections disabled; it makes profiling impossible.", 2865}, - {"-ffunction-sections may affect debugging on some targets.", 2866}, - {"Errors detected in input file (your bison.simple is out of date)\n", 2867}, - {"error writing to %s", 2868}, - {"invalid register name `%s' for register variable", 2869}, - {"\ - -ffixed- Mark as being unavailable to the \ - compiler\n", 2870}, - {"\ - -fcall-used- Mark as being corrupted by function \ - calls\n", 2871}, - {"\ - -fcall-saved- Mark as being preserved across \ - functions\n", 2872}, - {"\ - -finline-limit= Limits the size of inlined functions to \n", 2873}, - {"\ - -fmessage-length= Limits diagnostics messages lengths to \ - characters per line. 0 suppresses line-wrapping\n", 2874}, - {"\ - -fdiagnostics-show-location=[once | every-line] Indicates how often source \ - location information should be emitted, as prefix, at the beginning of \ - diagnostics when line-wrapping\n", 2875}, - {" -O[number] Set optimisation level to [number]\n", 2876}, - {" -Os Optimise for space rather than speed\n", 2877}, - {"\ - -pedantic Issue warnings needed by strict compliance to ISO \ - C\n", 2878}, - {"\ - -pedantic-errors Like -pedantic except that errors are produced\n", 2879}, - {" -w Suppress warnings\n", 2880}, - {" -W Enable extra warnings\n", 2881}, - {" -Wunused Enable unused warnings\n", 2882}, - {"\ - -Wid-clash- Warn if 2 identifiers have the same first \ - chars\n", 2883}, - {"\ - -Wlarger-than- Warn if an object is larger than bytes\n", 2884}, - {" -p Enable function profiling\n", 2885}, - {" -a Enable block profiling \n", 2886}, - {" -ax Enable jump profiling \n", 2887}, - {" -o Place output into \n", 2888}, - {"\ - -G Put global and static data smaller than \n\ - bytes into a special section (on some targets)\n", 2889}, - {" -aux-info Emit declaration info into \n", 2890}, - {"\ - -quiet Do not display functions compiled or elapsed time\n", 2891}, - {" -version Display the compiler's version\n", 2892}, - {"\ - -d[letters] Enable dumps from specific passes of the compiler\n", 2893}, - {"\ - -dumpbase Base name to be used for dumps from specific \ - passes\n", 2894}, - {" -fsched-verbose= Set the verbosity level of the scheduler\n", 2895}, - {" --help Display this information\n", 2896}, - {"\ - \n\ - Language specific options:\n", 2897}, - {" %-23.23s [undocumented]\n", 2898}, - {"\ - \n\ - There are undocumented %s specific options as well.\n", 2899}, - {"\ - \n\ - Options for %s:\n", 2900}, - {"\ - \n\ - Target specific options:\n", 2901}, - {" -m%-23.23s [undocumented]\n", 2902}, - {"\ - \n\ - There are undocumented target specific options as well.\n", 2903}, - {" They exist, but they are not documented.\n", 2904}, - {"unrecognized gcc debugging option: %c", 2905}, - {"unrecognized register name `%s'", 2906}, - {"Unrecognized option `%s'", 2907}, - {"use -gdwarf -g%d for DWARF v1, level %d", 2908}, - {"use -gdwarf-2 for DWARF v2", 2909}, - {"ignoring option `%s' due to invalid debug level specification", 2910}, - {"`%s': unknown or unsupported -g option", 2911}, - {"`%s' ignored, conflicts with `-g%s'", 2912}, - {"-param option missing argument", 2913}, - {"invalid --param option: %s", 2914}, - {"invalid parameter value `%s'", 2915}, - {"`-a' option (basic block profile) not supported", 2916}, - {"`-ax' option (jump profiling) not supported", 2917}, - {"Ignoring command line option '%s'", 2918}, - {"(It is valid for %s but not the selected language)", 2919}, - {"-Wuninitialized is not supported without -O", 2920}, - {"`-ax' and `-a' are conflicting options. `-a' ignored.", 2921}, - {"instruction scheduling not supported on this target machine", 2922}, - {"this target machine does not have delayed branches", 2923}, - {"profiling does not work without a frame pointer", 2924}, - {"-f%sleading-underscore not supported on this target machine", 2925}, - {"Data size %ld.\n", 2926}, - {"\ - %s%s%s version %s (%s)\n\ - %s\tcompiled by GNU C version %s.\n\ - %s%s%s version %s (%s) compiled by CC.\n", 2927}, - {"options passed: ", 2928}, - {"options enabled: ", 2929}, - {"division by zero in #if", 2930}, - {"floating point numbers not allowed in #if expressions", 2931}, - {"Invalid number in #if expression", 2932}, - {"Invalid character constant in #if", 2933}, - {"double quoted strings not allowed in #if expressions", 2934}, - {"Invalid token in expression", 2935}, - {"octal character constant does not fit in a byte", 2936}, - {"hex character constant does not fit in a byte", 2937}, - {"empty #if expression", 2938}, - {"Junk after end of expression.", 2939}, - {"macro or #include recursion too deep", 2940}, - {"Usage: %s [switches] input output", 2941}, - {"-traditional is not supported in C++", 2942}, - {"-traditional and -ansi are mutually exclusive", 2943}, - {"Filename missing after -i option", 2944}, - {"Filename missing after -o option", 2945}, - {"Target missing after %s option", 2946}, - {"Filename missing after %s option", 2947}, - {"Macro name missing after -%c option", 2948}, - {"-pedantic and -traditional are mutually exclusive", 2949}, - {"-trigraphs and -traditional are mutually exclusive", 2950}, - {"Directory name missing after -I option", 2951}, - {"`/*' within comment", 2952}, - {"unterminated #%s conditional", 2953}, - {"not in any file?!", 2954}, - {"`defined' must be followed by ident or (ident)", 2955}, - {"cccp error: invalid special hash type", 2956}, - {"#include expects \"fname\" or ", 2957}, - {"No include path in which to find %.*s", 2958}, - {"invalid macro name", 2959}, - {"invalid macro name `%s'", 2960}, - {"\"defined\" cannot be used as a macro name", 2961}, - {"parameter name starts with a digit in #define", 2962}, - {"badly punctuated parameter list in #define", 2963}, - {"unterminated parameter list in #define", 2964}, - {"\"%.*s\" redefined", 2965}, - {"# operator should be followed by a macro argument name", 2966}, - {"invalid format #line command", 2967}, - {"undefining `defined'", 2968}, - {"undefining `%s'", 2969}, - {"extra text at end of directive", 2970}, - {"#error%.*s", 2971}, - {"#warning%.*s", 2972}, - {"#elif not within a conditional", 2973}, - {"#%s not within a conditional", 2974}, - {"#else or #elif after #else", 2975}, - {"#else not within a conditional", 2976}, - {"unbalanced #endif", 2977}, - {"unterminated string or character constant", 2978}, - {"arguments given to macro `%s'", 2979}, - {"no args to macro `%s'", 2980}, - {"only 1 arg to macro `%s'", 2981}, - {"only %d args to macro `%s'", 2982}, - {"too many (%d) args to macro `%s'", 2983}, - {"\ - Internal error in %s, at tradcpp.c:%d\n\ - Please submit a full bug report.\n\ - See %s for instructions.", 2984}, - {"arrays of functions are not meaningful", 2985}, - {"function return type cannot be function", 2986}, - {"invalid initializer for bit string", 2987}, - {"Tree check: expected %s, have %s in %s, at %s:%d", 2988}, - {"Tree check: expected class '%c', have '%c' (%s) in %s, at %s:%d", 2989}, - {"register name not specified for `%s'", 2990}, - {"invalid register name for `%s'", 2991}, - {"data type of `%s' isn't suitable for a register", 2992}, - {"register specified for `%s' isn't suitable for data type", 2993}, - {"global register variable has initial value", 2994}, - {"volatile register variables don't work as you might wish", 2995}, - {"register name given for non-register variable `%s'", 2996}, - {"size of variable `%s' is too large", 2997}, - {"\ - alignment of `%s' is greater than maximum object file alignment. Using %d.", 2998}, - {"requested alignment for %s is greater than implemented alignment of %d.", 2999}, - {"floating point trap outputting a constant", 3000}, - {"initializer for integer value is too complicated", 3001}, - {"initializer for floating value is not a floating constant", 3002}, - {"unknown set constructor type", 3003}, - {"invalid initial value for member `%s'", 3004}, - {"weak declaration of `%s' must be public", 3005}, - {"weak declaration of `%s' must precede definition", 3006}, - {"only weak aliases are supported in this configuration", 3007}, - {"alias definitions not supported in this configuration; ignored", 3008}, - {"Virtual array %s[%lu]: element %lu out of bounds", 3009}, - {"No sclass for %s stab (0x%x)\n", 3010}, - {"`-p' not supported; use `-pg' and gprof(1)", 3011}, - {"may not use both -EB and -EL", 3012}, - {"-mapcs-26 and -mapcs-32 may not be used together", 3013}, - {"-msoft-float and -mhard_float may not be used together", 3014}, - {"-mbig-endian and -mlittle-endian may not be used together", 3015}, - {"Incompatible interworking options", 3016}, - {"-mbsd and -pedantic incompatible", 3017}, - {"-mbsd and -mxopen incompatible", 3018}, - {"-mxopen and -pedantic incompatible", 3019}, - {"A -ifile option requires a -map option", 3020}, - {"mno-cygwin and mno-win32 are not compatible", 3021}, - {"shared and mdll are not compatible", 3022}, - {"-static not valid with -mcoff", 3023}, - {"-shared not valid with -mcoff", 3024}, - {"-symbolic not valid with -mcoff", 3025}, - {"-fpic is not valid with -mcoff", 3026}, - {"-fPIC is not valid with -mcoff", 3027}, - {"-fpic not valid with -mcoff", 3028}, - {"-fPIC not valid with -mcoff", 3029}, - {"bx]", 3030}, - {"bx", 3031}, - {"cx", 3032}, - {"-p option not supported: use -pg instead", 3033}, - {"choose either big or little endian, not both", 3034}, - {"choose either m340 or m210 not both", 3035}, - {"the m210 does not have little endian support", 3036}, - {"-pipe is not supported.", 3037}, - {"may not use both -mfp64 and -msingle-float", 3038}, - {"may not use both -mfp64 and -m4650", 3039}, - {"-mhard-float not supported.", 3040}, - {"-msingle-float and -msoft-float can not both be specified.", 3041}, - {"-p profiling is no longer supported. Use -pg instead.", 3042}, - {"profiling not supported with -mg\n", 3043}, - {"GNU C does not support -C without using -E", 3044}, - {"-pg and -fomit-frame-pointer are incompatible", 3045}, - {"-E required when input is from standard input", 3046}, - {"Compilation of header file requested", 3047}, - {"-fjni and -femit-class-files are incompatible", 3048}, - {"-fjni and -femit-class-file are incompatible", 3049}, - }; - - int _msg_tbl_length = 3049; --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/po/da.gmo gcc-3.1/gcc/po/da.gmo *** gcc-3.0.4/gcc/po/da.gmo Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/po/da.gmo Wed May 15 02:41:44 2002 *************** *** 0 **** --- 1,340 ---- + Þ•¯”ë ;¸N@¹N'úN5"O=XO^–OõO: + P%EP+kP0—P"ÈP+ëPQ*QAQPQ`Q$vQ2›QÎQàQòQRR>)R#hR#ŒR$°R<ÕRS+SES+_S/‹S6»S:òS(-T,VT/ƒT3³TçTUU5UNU3QU3…U3¹U3íU3!VUVsV“V¦VµV/ÏV!ÿV/!WQWmW‹W) WÊW,ÚW,X44X"iXŒX#§X(ËX,ôX0!Y0RY.ƒY/²Y&âY< ZFZ,MZzZ˜Z¶ZÊZ'âZ* + [+5[(a[Š['ª[/Ò[%\2(\)[\&…\%¬\Ò\ï\$]+(]T]/n]/ž].Î])ý])'^ Q^'r^&š^3Á^/õ^%_9_5T_.Š_¹_#Í_=ñ_@/` p`0~`-¯`(Ý`*a81a5ja+ a=Ìa> + bIb:fb¡b·b1ËbSýbQc0pc¡c-¿cíc%d%'d7Md…d¤d'Àdède!#eNEe,”e,Áe(îe(f(@f(if0’f9Ãf'ýf%g Dg!eg,‡g!´gÖg,òg,hLh&bh5‰h$¿h-äh4i.Gi*vi(¡iÊi:èi6#j<Zj"—j(ºj6ãj-kHk`ktk’k°k&Ðk ÷kbl,{l&¨lWÏl*'mRm$qm–m³mcÍm1nKn-fn0”n%Ånëno%o'Bojo‡o2¢o-Õo&p**p>Up)”p6¾p$õp-qHq$fq‹q©q+Éqõq r#r3r1Sr&…r)¬r2Ör' s1s7Hs,€s#­sÑs6æstA2t"tt—t.²t*át u(u7Hu€u+”u6Àu÷u + v&v"=v/`vv®vÂvØvìvww(w + „0I„z„3’„)Æ„$ð„+…%A…g…+‡…*³…0Þ…2†1B†/t†2¤†׆(î†)‡&A‡!h‡%Ї*°‡Û‡õ‡ˆ.ˆ!Jˆlˆˆˆ ¨ˆɈåˆ+‰$/‰4T‰!‰‰.«‰&Ú‰%Š + 'Š.2ŠaŠ:wŠ(²ŠÛŠîŠÿŠ‹4‹ Q‹!r‹#”‹¸‹ Ø‹ù‹!Œ!;Œ]Œ,}Œ(ªŒ*ÓŒAþŒ6@%w!&¿+æ=Ž PŽqދޡŽ)¹Ž#ãŽ52M€) WÊ-"+P%|¢ Âã(‘$,‘$Q‘%v‘'œ‘6Ä‘Rû‘N’_’q’*‚’3­’Eá’9'“$a“(†“ ¯“1Г(”+”E”1b”'””¼”$Ø”ý”•• #•D•9]•!—•'¹•,á•$–3–'Q–'y–)¡–%Ë– ñ–(û–+$—$P—u—0”—$Å— ê—%ô—˜+/˜.[˜*Š˜-µ˜ 㘙™+;™g™€™ —™¸™.Ñ™*š7+š$cš)ˆš%²š%Øš$þš#› ,›(6›'_›$‡›¬› ³›½›!Ä›æ›!œ 'œHœ5bœ)˜œœ!Ëœ2íœ# (D6m*¤Ï*Ø,ž%0ž'Vž&~ž$¥ž'Êžòž!Ÿ&4Ÿ&[Ÿ3‚Ÿ)¶Ÿ@àŸ/! ,Q <~ 9» 5õ 8+¡/d¡”¡/¤¡5Ô¡6 + ¢*A¢6l¢6£¢3Ú¢ £%/£7U£)£;·£ó£ ¤,(¤ U¤6_¤ –¤·¤2Ƥ#ù¤¥9:¥0t¥4¥¥/Ú¥; + ¦,F¦6s¦1ª¦&ܦ1§95§&o§%–§*¼§*ç§1¨0D¨u¨+“¨¿¨Ψ<ߨ<©<Y©<–©Ó©â© ñ©ÿ©ª!ª3ªEªWªiª{ªŒªžª°ªªÔªæªøª + ««.«@«R«d«v«ˆ«š«««½«Ï«á«ó«¬¬)¬;¬M¬_¬q¬‚¬“¬¤¬µ¬ƬÙ¬ê¬û¬ ­­.­?­R­e­N­έ æ­!ó­®'3®%[®®"•®R¸® ¯+¯H¯d¯€¯œ¯¸¯Ö¯ñ¯ °*°E°`°{°–°(´°#ݰ8±0:±'k±“±²±αä±/²2² I²(j²“²D­²,ò²&³F³%f³Œ³«³1ɳ+û³-'´#U´y´%”´)º´*ä´0µ*@µ3kµ0Ÿµ + е/Ûµ5 ¶A¶"^¶*¶&¬¶Ó¶!ò¶· (·I·_·~·"‡·ª·½·Û·%ö·/¸!L¸ n¸,x¸'¥¸5͸ ¹3$¹&X¹¹(›¹)Ĺ'î¹ º#ºA?ºº–º±º:˺-»4».J»1y»«»,¼»3é»&¼D¼ + `¼+k¼<—¼4Ô¼" ½,½(@½3i½½;¥½>á½ ¾ 8¾%F¾l¾ˆ¾š¾)«¾)Õ¾#ÿ¾#¿6¿R¿"q¿”¿²¿/п À) À#6À5ZÀÀ%§ÀÍÀ*ÒÀ9ýÀ/7Á<gÁ)¤Á-ÎÁüÁÂ8.Â!g‰Â%¥ÂËÂÓÂîÂÃÃ<Ã=RÃ%Ã'¶Ã ÞÃ2ÿÃ'2Ä2ZÄÄ3”Ä$ÈÄ#íÄÅ&)Å*PÅ+{Å'§ÅÏÅîÅÆ$,Æ!QÆsÆ5‚Æ4¸Æ)íÆ)Ç-AÇ)oÇ(™Ç.ÂÇ2ñÇ#$È*HÈ0sÈ$¤È>ÉÈ@É:IÉ„É/›É$ËÉ.ðÉ8ÊXÊ wÊ.„ʳÊ+ÎÊ/úÊ*Ë"HË)k˕˴Ë#ÓË÷Ë. Ì-;Ìi̇ÌEÌ-ãÌ,Í'>ÍfÍ„Í)¢Í5ÌÍ'Î5*Î$`Î6…μÎ+ØÎ4Ï9Ï&RÏyÏ’Ï «ÏµÏ.ÅÏôÏ Ð+)ÐUÐ#oГÐ.°Ð'ßÐ3Ñ;ÑYÑsÑ“Ñ"§ÑÊÑÛÑ)ðÑ'ÒBÒ!_Ò1Ò$³ÒØÒ3øÒ,,Ó#YÓ}Ó!Ó(¿Ó èÓòÓûÓ6ÔKÔeÔ%€Ô"¦Ô-ÉÔ"÷Ô!Õ$<Õ0aÕD’Ö/×ÖD×<L×Y‰×ã×;Ø-?Ø7mØ4¥Ø%ÚØ.Ù/ÙDÙVÙgÙwÙ'”Ù4¼ÙñÙÚÚ$Ú3ÚCCÚ%‡Ú%­Ú(ÓÚBüÚ?ÛZÛzÛ-šÛ2ÈÛ;ûÛ@7Ü%xÜ*žÜ0ÉÜ5úÜ0Ý$PÝ#uݙݴÝ7·Ý;ïÝ;+Þ:gÞ:¢Þ$ÝÞ&ß)ß DßPß4fß:›ß/Öß!à(àBà+UààKàKÜàA(á'já"’á µá/Öá.â65â8lâ2¥â3Øâ+ ãR8ã‹ã2’ã Åã,æãä'ä2?ä3rä/¦ä5Öä# å,0å>]å1œåCÎå1æ3Dæ+xæ"¤æÇæ!Üæ/þæ.ç4Gç0|ç5­ç9ãç9è*Wè*‚è+­è6Ùè/é@éWé;qé5­éãé+øé<$êBaê ¤ê6²ê1éê*ë.Fë<uëC²ë0öë>'ìDfì«ìAÉì í!í;4íIpí$ºí5ßíî.3îbî,zî,§îAÔî&ï&=ï.dï&“ï&ºï"áïTð+Yð+…ð'±ð'Ùð'ñ')ñ3Qñ<…ñ&Âñ)éñ+ò[?ò.›ò"Êòíò2 ó0@óqó)Žó4¸ó#íó4ô;Fô4‚ô1·ô/éôõ85õ9nõC¨õ-ìõ6öJQö4œöÑöêö(÷(+÷*T÷-÷#­÷_Ñ÷-1ø._øRŽø'áø* ù14ùfùùdšùÿùú':ú6bú+™úÅúáú#þú&"ûIûfû3û0µû)æû,ü<=ü*zü3¥ü&Ùü2ý$3ý#Xý|ý ›ý+¼ýèý þþ*þ,Jþ#wþ+›þ3Çþ3ûþ/ÿ<Kÿ+ˆÿF´ÿûÿBS9l0¦×3ó"'J hC‰Í+àB O_{&–0½ î&?Sg{£·Ë1ß%";^!y<›Ø-ö$+B1n) *Êõ#8O+k)—.Á*ð.GF0Ž#¿ã&%'!M,o)œ*Æñ6 F ._ Ž £ ¸ Ð ë " + + D- + 5r + ¨ + -¼ + 'ê + . #A 6e $œ =Á >ÿ '> (f  « "¿ 0â  * 7F %~ <¤ <á /,C0p,¡)Î"ø@:;{8·2ð#;C],Ý7 + +B.n&1Ä"ö!M;9‰Ã4ß9%N>t1³å;:A2|@¯NðI?G‰ Ñ%ò>/W.‡)¶0à0Om#‹¯!Í"ï0<O0ŒG½2#(V% ¥'¯×<î7+c~ ’³%Ð)ö* +K(w) (Ê*ó*(I5r1¨3ÚFAU-—!Å#ç+ 97,qž»ÕEñ-7e|•B°%ó, ]F 6¤ >Û &!&A!+h!"”!)·!$á!$",+"*X"Aƒ"\Å""#6#K#8_#>˜#X×#90$)j$(”$#½$8á$7%$R%(w%F %4ç%&17&&i&&§&"»&Þ&;÷&!3'&U'@|'-½'%ë''(+9((e("Ž( ±(H¿(?)*H).s)9¢)4Ü)1*9C*$}*,¢*-Ï*-ý*.++2Z++#§+4Ë+,, $,E,0Z,9‹,MÅ,%-,9-%f-&Œ-&³-$Ú-%ÿ-$%.?J.(Š.³.Í."ì.'/&7/&^/&…/¬/6Ç/#þ/"0 @0BN0/‘0)Á09ë0/%1*U1+€1<¬1+é1,2+B2(n20—2-È2%ö2.30K3?|32¼3Jï37:45r4:¨4>ã4C"5Ff54­5â5.ò5:!68\6)•69¿6Aù6;;7@w7*¸76ã7-8DH88¤8%¾8 ä84î8&#9 + J9>U9%”9 º96Û9-:>@:::Hº:0;O4;0„;%µ;CÛ;A<+a<&<(´<8Ý<@=/W=2‡=,º= ç= ó=A>AC>A…>AÇ> ?? (?6?F?X?j?|?Ž? ?²?Ã?Õ?ç?ù? @@/@A@S@e@w@‰@›@­@¿@Ñ@â@ô@AA*A´UóU@ VAJVŒV¦V!¶V+ØVWW),W*VW$W¦W¹WÑW+èW+X&@X5gX X3«X*ßXH + Y&SY8zY ³Y/ÔY@ZDEZEŠZ5ÐZ1[8[P[@k[+¬[Ø[&õ[\3\L\d\ €\¡\SÀ\%](:]c]4]:¶]2ñ]$^H+^0t^/¥^Õ^&ð^0_,H_2u_#¨_$Ì_ñ_'`;7`s`<‹`;È`Ba*Ga3ra0¦a'×a5ÿa95b"ob)’b,¼b#ébF cATc<–cÓc4écdQ;d;d#Éd ídBùd›n0Ún- o(9o.bo + ‘oœo ¶o3×o p(p'Fp%np*”p%¿p$åp& + qfaÙ)ì"ï¼j³ôÖã BÛ5¯ÝeDX§M'^aÊWs—ÀØ;<Án‚Äp:ûS–4_o0:£={-îy8;xº Sè¸å ·qò³ Æ.’00¤!KÆ{DŽd›¬YCQõ/œ‡Gð†bŽ_I=†½ë–&]h§Bá;òŠ^–à¯G;uR¥#p‹q¶lÿiõ™9®ßyÔg‰W®'ï§A œ¾z­ú—m£‡G‘éa]%Z´Ó›™©‹![£\÷™10ìü\Q¡‚…™Š×²õÈ¡-PUB|“þ‹…£Ð1¥‘×îÕç$e<s?žXŸà‘`)&ˆžÖýpú`•Ç‚3Òfq»ù*‘u«|H}$!K:ÓâsjIÅ— Ê•lNIAg˜¸ˆޏ"xäu µü_$÷š“ºwf FÜÇ Â@1E¤¨ËWZhƒýÿc äU€Ïe?ê,í©“¤&/u›€-&4]>öXUò)•AFéA€7JšEµ¼ ×qñ6G+K …ztñû2Èe[ábM#ß³Š7‰5¡atâêѯ«zá% ù¶ì¢Û­ŒiQN_Rê¹J†Lï¹ð X˜}]§øÒ@"ÊâÚ”ûZ«V`Î2ó?çÿrUl’‰ + ˆ,}T²ÜÈÞ¢,9îÎ{2ÍHËÀ7iÌ«¬c.¢<ñœª¯o gsW€ÂO cJmVT„L+‡}!~n¢¨°…Bt#.xÉÇ L5¶8Ë“YS‚ME`†/1V½OÀv¼š6fZ—S±Õh6ŰÁª·„N¿L9T{ó>3|(wø[k¥Ž˜èk¨<¦Œëê>ÞÅÒíjÆ®@ö5ô¥ÝÔrŸ¦þRɕє'|Pd*D©yn(3»¦NšI²„àz^®þÉC'*˜Óù¦Ìw±Úʬ°bx”=¤Þĉ‹w÷ÐŒ­^èH,r­P’„¿*[QC´j4 Ú¨ãK+mi~yOÎCݽæc–mðø% Œ+%žvÙ?P( + ‡·ç \Ö¡4Üž~2dokvgãlR¹ŸÐÔo@ÌÍ~ÏÕFÍë:d( ƒ#7.Jæ»t3óíˆ6\8åYœh-"µÑ¬r”ý bƒ>ôüØ$¾ßé + E/Ã=TªOú±¾ + )¿9ö ›ƒD´Fån©ºkpæ’ŸäVYÏÙØÁHÛ 8MvÄ + %s: %d: warning: can't add declaration of `%s' into macro call + + %s: error reading input file `%s': %s + + %s: fatal error: aux info file corrupted at line %d + + %s: warning: too few parameter lists in declaration of `%s' + + ;; Combiner totals: %d attempts, %d substitutions (%d requiring new space), + ;; %d successes. + + Go ahead? (y or n) + Processing symbol table #%d, offset = 0x%.8lx, kind = %s + + Updating header and load commands. + + + ldd output with constructors/destructors. + + write_c_file - output name is %s, prefix is %s + in pointer to member conversion in pointer to member function conversion enters try block in thrown expression"%s" redefined# %s %.2f %.2f + # followed by integer#%s expects "FILENAME" or #-lines for entering and leaving files don't match#elif after #else#elif without #if#else after #else#else without #if#endif without #if#import is obsolete, use an #ifndef wrapper in the header file#include "..." search starts here: + #include <...> search starts here: + #include_next in primary source file#pragma implementation for %s appears after file is included#pragma once is obsolete%%S computed all 0's mask%%S computed all 1's mask%6.2f%% of %d branches executed in file %s + %6.2f%% of %d branches executed in function %s + %6.2f%% of %d branches taken at least once in file %s + %6.2f%% of %d branches taken at least once in function %s + %6.2f%% of %d calls executed in file %s + %6.2f%% of %d calls executed in function %s + %6.2f%% of %d source lines executed in file %s + %6.2f%% of %d source lines executed in function %s + %R not followed by %B/C/D/E%d constructor(s) found + %d destructor(s) found + %d frame table(s) found + %s%s as `float' rather than `double' due to prototype%s as complex rather than floating due to prototype%s as floating rather than complex due to prototype%s as floating rather than integer due to prototype%s as integer rather than floating due to prototype%s as signed due to prototype%s as unsigned due to prototype%s at end of input%s before `%s'%s before string constant%s discards qualifiers from pointer target type%s from incompatible pointer type%s function, region %d, offset = %ld (0x%.8lx) + %s has no member named `%s'%s in preprocessing directive%s is a block device%s is not supported by this configuration%s is too large%s makes integer from pointer without a cast%s makes pointer from integer without a cast%s makes qualified function pointer from unqualified%s of pointer to unknown structure%s returned %d exit status%s terminated with signal %d [%s]%s%s with different width due to prototype%s: %d: `%s' used but missing from SYSCALLS + %s: %d: warning: `%s' excluded by preprocessing + %s: %d: warning: definition of %s not converted + %s: %d: warning: found `%s' but expected `%s' + %s: %d: warning: no extern definition for `%s' + %s: %d: warning: source too confusing + %s: %d: warning: varargs function declaration not converted + %s: %s%s: %s compiler not installed on this system%s: %s exited with status %d + %s: %s: can't get status: %s + %s: Not a directory%s: `%s' not converted + %s: can't change mode of file `%s': %s + %s: can't create/open clean file `%s': %s + %s: can't create/open output file `%s': %s + %s: can't delete aux info file `%s': %s + %s: can't delete file `%s': %s + %s: can't get status for file `%s': %s + %s: can't get status of aux info file `%s': %s + %s: can't link file `%s' to `%s': %s + %s: can't open aux info file `%s' for reading: %s + %s: can't open file `%s' for reading: %s + %s: can't read aux info file `%s': %s + %s: cannot get working directory: %s + %s: cannot open as COFF file%s: compiling `%s' + %s: conflict list for '%s' follows: + %s: conflicting extern definitions of '%s' + %s: converting file `%s' + %s: declaration of function `%s' not converted + %s: declarations of '%s' will not be converted + %s: definition of function `%s' not converted + %s: error closing aux info file `%s': %s + %s: error reading aux info file `%s': %s + %s: error writing file `%s': %s + %s: found definition of `%s' at %s(%d) + %s: function definition not converted + %s: global declarations for file `%s' not inserted + %s: input file names must have .c suffixes: %s + %s: internal abort + %s: invalid file name: %s + %s: local declaration for function `%s' not inserted + %s: multiple static defs of `%s' in file `%s' + %s: not a COFF file%s: subprocess got fatal signal %d + %s: usage '%s [ -VqfnkN ] [ -i ] [ filename ... ]' + %s: usage '%s [ -VqfnkNlgC ] [ -B ] [ filename ... ]' + %s: wait: %s + %s: warning: can't rename file `%s' to `%s': %s + %s: warning: file `%s' already saved in `%s' + %s: warning: missing SYSCALLS file `%s' + %s: warning: no read access for file `%s' + %s: warning: no static definition for `%s' in file `%s' + %s: warning: no write access for dir containing `%s' + %s: warning: no write access for file `%s' + %s: warning: too many parameter lists in declaration of `%s' + %s: warning: using formals list from %s(%d) for function `%s' + %s: would convert file `%s' + %s:%d: declaration of function `%s' takes different forms + %s=%s is not numeric.%s=%s is too large.(Each undeclared identifier is reported only once(Each undeclared identifier is reported only once for each function it appears in.)(near initialization for `%s')(this will be reported only once per input file), + from %s:%u-E required when input is from standard input-I- specified twice-f%s and -msdata=%s are incompatible.-fPIC and -mcall-%s are incompatible.-fPIC is not currently supported on the 68000 or 68010 + -fPIC is not valid with -mcoff-fPIC not valid with -mcoff-fpic and -mapcs-reent are incompatible-fpic is not valid with -mcoff-fpic not valid with -mcoff-mabi=%s does not support -mips%d-maix64 required: 64-bit computation with 32-bit addressing not yet supported.-malign-functions=%d is not between 0 and %d-malign-functions=%d is not between 1 and %d-malign-jumps=%d is not between 0 and %d-malign-jumps=%d is not between 1 and %d-malign-loops=%d is not between 0 and %d-malign-loops=%d is not between 1 and %d-mapcs-26 and -mapcs-32 may not be used together-mbig-endian and -mlittle-endian may not be used together-mbranch-cost=%d is not between 0 and 5-mbsd and -mxopen incompatible-mbsd and -pedantic incompatible-mcall-aixdesc must be big endian-mcmodel= is not supported on 32 bit systems-mcpu=%s does not support -mips%d-mhard-float not supported.-mips%d does not support 64 bit fp registers-mips%d does not support 64 bit gp registers-mips%d not supported-mlong-double-64 not allowed with -m64-mpreferred-stack-boundary=%d is not between 2 and 31-mregparm=%d is not between 0 and %d-mrelocatable and -mcall-%s are incompatible.-mrelocatable and -mno-minimal-toc are incompatible.-mrelocatable and -msdata=%s are incompatible.-msdata=%s and -mcall-%s are incompatible.-mshort-data-%s and PIC are incompatible-mshort-data-%s is too large -msingle-float and -msoft-float can not both be specified.-msoft-float and -mhard_float may not be used together-mtrap-large-shift and -mhandle-large-shift are incompatible-mxopen and -pedantic incompatible-p option not supported: use -pg instead-p profiling is no longer supported. Use -pg instead.-pg and -fomit-frame-pointer are incompatible-pipe is not supported.-pipe not supported-shared not valid with -mcoff-static not valid with -mcoff-symbolic not valid with -mcoff.da file contents exhausted too early + .da file contents not exhausted + ;; Combiner statistics: %d attempts, %d substitutions (%d requiring new space), + ;; %d successes. + + ;; Processing block from %d to %d, %d sets. + A -ifile option requires a -map optionA parameter list with an ellipsis can't match an empty parameter name list declaration.Align destination of the string operationsAlign doubles on word boundaryAlign some doubles on dword boundaryAlternate calling conventionAmbiguous abbreviation %sAn argument type that has a default promotion can't match an empty parameter name list declaration.Argument missing after %sAssertion missing after %sAssuming that all execution counts are zero. + Attempt to keep stack aligned to this power of 2Bad amount of stack space removal: %dBad value for -mcall-%sBad value for -msdata=%sBasic block %d pred edge is corruptedBasic block %i edge lists are corruptedBogus JARL construction: %d + Bogus JR construction: %d + Branches are this expensive (1-5, arbitrary units)C++ style comments are not allowed in ISO C89Can't create cross-reference file `%s'Cannot find interface declaration for `%s'Cannot find interface declaration for `%s', superclass of `%s'Cannot find protocol declaration for `%s'Circular inheritance in interface declaration for `%s'Compilation of header file requestedControl allocation order of integer registersCould not find specs file %s + Could not open basic block file %s. + Could not open data file %s. + Could not open output file %s. + Could not open program flow graph file %s. + Could not open source file %s. + Creating %s. + Data size %ld. + Directory name missing after %sDo not align destination of the string operationsDo not generate sin, cos, sqrt for FPUDo not inline all known string operationsDo not return values of functions in FPU registersDo not use IEEE math for fp comparisonsDo not use hardware fpDo not use push instructions to save outgoing argumentsERROR: too many basic blocks in .bb file %s + Emit Intel syntax assembler opcodesEnable stack probingEnd insn %d for block %d not found in the insn stream.End of search list. + Errors detected in input file (your bison.simple is out of date) + Extraneous argument to `%s' optionFile name missing after %sFunction starts are aligned to this power of 2GNU C does not support -C without using -EGenerate code for given CPUGenerate sin, cos, sqrt for FPUHead insn %d for block %d not found in the insn stream.I/O error on outputISO C++ forbids an empty condition for `%s'ISO C++ forbids comparison between pointer and integerIn basic block %d:In file included from %s:%uIncomplete `%s' optionInline all known string operationsInsn %d is in multiple basic blocks (%d and %d)Internal gcc abort from %s:%dInternal gcc abort.Internal gcov abort. + Invalid %%A operandInvalid %%B operandInvalid %%C operandInvalid %%D operandInvalid %%Y operandInvalid %%c operandInvalid %%d operandInvalid %%f operandInvalid floating point emulation option: -mfpe-%sInvalid option %sInvalid option `%s'Invalid option `-mshort-data-%s'Invalid option `entry%s'Invalid specification! Bug in cc.Jump targets are aligned to this power of 2Library lib%s not foundLoop code aligned to this power of 2Macro name missing after %sMissing argument to `%s' optionNOTE_INSN_BASIC_BLOCK %d in the middle of basic block %dNOTE_INSN_BASIC_BLOCK is missing for block %dNOTE_INSN_BASIC_BLOCK is missing for block %d + No branches in file %s + No branches in function %s + No calls in file %s + No calls in function %s + No executable code associated with file %s. + No executable source lines in file %s + No executable source lines in function %s + No include path in which to find %sNo input filesNumber missing after %sNumber of registers used to pass integer argumentsOmit the frame pointer in leaf functionsOutput filename specified twicePRINT_OPERAND null pointerPRINT_OPERAND: Unknown punctuation '%c'PRINT_OPERAND_ADDRESS, null pointerPath name missing after %sProcessing spec %c%s%c, which is '%s' + Profiling not implemented yet.RETURN_ADDRESS_OFFSET not supportedReading specs from %s + Register '%c' already specified in allocation orderRegister '%c' is unknownReturn values of functions in FPU registersSame as -mcpu=i386Same as -mcpu=i486Same as -mcpu=pentiumSame as -mcpu=pentiumproSchedule code for given CPUSetting spec %s to '%s' + + Spec failure: '%%*' has not been initialised by pattern matchSpec failure: Unrecognised spec option '%c'Stack size > 32kThe -mabi=32 support does not work yet.The local variable `insn' has the value:This target does not support the -mabi switch.Trampolines not yet implementedUnable to find a register to spill in class `%s'.Unable to use '%s' for PIC registerUndefined type `id', please import Unexpected EOF while reading source file %s. + Uninitialized locals in .bssUninitialized locals in .dataUnknown -mdebug-%s switchUnrecognized option `%s'Usage: %s [switches] input output + Use IEEE math for fp comparisonsUse hardware fpUse normal calling conventionUse push instructions to save outgoing argumentsUsing builtin specs. + Warning: `-x %s' after last input file has no effectWarning: use of obsolete %%[ operator in specs[Leaving %s] + [cannot find %s][super ...] must appear in a method context\x used with no following hex digits__alignof__ applied to an incomplete type`%%' constraint used with last operand`%d' operand isn't a register`%l' operand isn't a label`%s' declared as both exported to and imported from a DLL.`%s' declared as function returning a function`%s' declared as function returning an array`%s' fails to be a typedef or built in type`%s' has an incomplete type`%s' has both `extern' and initializer`%s' is neither function nor member function; cannot be declared friend`%s' redeclared as different kind of symbol`%s' undeclared (first use in this function)`%s' undeclared here (not in a function)`-p' not supported; use `-pg' and gprof(1)`...' in old-style identifier list`[*]' in parameter declaration only allowed in ISO C 99`__alignof' applied to a bit-field`__alignof__' applied to a bit-field`asm' cannot be used in function where memory usage is checked`asm' cannot be used with `-fcheck-memory-usage'`bool' is now a keyword`com_interface' only supported with -fvtable-thunks`enum %s' incomplete in scope ending here`long long long' is too long for GCC`sigof' applied to non-aggregate expression`sigof' applied to non-aggregate type`sizeof' applied to a bit-field`struct %s' incomplete in scope ending here`union %s' incomplete in scope ending here`void' in parameter list must be the entire listaddress of global register variable `%s' requestedaggregate value used where a complex was expectedaggregate value used where a float was expectedaggregate value used where an integer was expectedalias arg not a stringambiguous conversion for array subscriptambiguous request for method pointer `%s'anonymous struct not inside named typeargs to be formatted is not '...'argument `%s' doesn't match prototypeargument of `asm' is not a constant stringargument to `%s' missing + argument to `-%s' is missingargument to `-B' is missingargument to `-V' is missingargument to `-Xlinker' is missingargument to `-b' is missingargument to `-specs' is missingargument to `-specs=' is missingargument to `-x' is missingarguments given to macro `%s'arithmetic on pointer to an incomplete typearray index in non-array initializerarray initialized from non-constant array expressionarray subscript is not an integerarray type value used where scalar is requiredarrays of functions are not meaningfulasm template is not a string constantassignmentassignment (not initialization) in declarationat this point in fileattempt to take address of bit-field structure member `%s'backslash and newline separated by spacebad header versionbad magic numberbad magic number in file '%s'bad raw header versionbad value (%s) for %s switchbad value (%s) for -mabi= switchbad value (%s) for -march= switchbad value (%s) for -mcmodel= switchbad value (%s) for -mcpu switchbad value (%s) for -mcpu= switchbad value (%s) for -mips switchbad value (%s) for -mmodel switchbad value (%s) for -msdata switchbad value `%s' for -mcpu switchbad value `%s' for -mfp-rounding-mode switchbad value `%s' for -mfp-trap-mode switchbad value `%s' for -mtrap-precision switchbase class initializer specified, but no base class to initializebase initializers not allowed for non-member functionsbase operand of `->' is not a pointerblock_num = %ld, num_blocks = %d + both long and short specified for `%s'both signed and unsigned specified for `%s'braced-group within expression allowed only inside a functionbraces around scalar initializerbranch %d never executed + branch %d taken = %d + branch %d taken = %d%% + break statement not within loop or switchbuffers still stacked in cpp_finishcall %d never executed + call %d returns = %d + call %d returns = %d%% + call to Java constructor, while `jclass' undefinedcalled object is not a functioncan not handle inconsistent calls to `%s'can only use init_priority attribute on file-scope definitions of objects of class typecan't create repository information file `%s'can't have varargs with -mfp-arg-in-fp-regscan't initialize friend function `%s'can't use '%s' as a %s registercannot convert to a pointer typecannot declare %s to referencescannot declare `::main' to be a templatecannot declare `::main' to be inlinecannot declare `::main' to be staticcannot declare pointers to referencescannot declare references to referencescannot declare static function inside another functioncannot delete a function. Only pointer-to-objects are valid arguments to `delete'cannot find `%s'cannot find `ldd'cannot find `nm'cannot initialize arrays using this syntaxcannot put object with volatile field into registercannot return from a handler of a function-try-block of a constructorcannot specify -o with -c or -S and multiple compilationscannot take address of bitfield `%s'cannot use `::' in parameter declarationcannot use typeid with -fno-rtticase label does not reduce to an integer constantcase label not within a switch statementcast specifies array typecast specifies function typecast to union type from type not present in unionchar-array initialized from wide stringcharacter constant too longcircular pointer delegation detectedclose %dclose %scollect2 version %scomma operator in operand of #ifcomplex invalid for `%s'conflicting access specifications for field `%s', ignoredconflicting super class name `%s'const `%s' cannot be declared `mutable'constructor cannot be static member functioncontinue statement not within a loopconversion to incomplete typeconversion to non-scalar type requestedcould not convert 0x%l.8x into a regiondeclaration of `%s' as array of functionsdeclaration of `%s' as array of voidsdecrementdereferencing pointer to incomplete typedestructor cannot be static member functiondestructors must be member functionsdestructors take no parametersdidn't use all bb entries of graph, function %s + due to the presence of a constructordup2 %d 1duplicate (or overlapping) case valueduplicate case valueduplicate declaration of class method `%s'.duplicate declaration of instance method `%s'.duplicate definition of class method `%s'.duplicate definition of instance method `%s'.duplicate label declaration `%s'dynamic dependencies. + dynamic dependency %s not foundelements of array `%s' have incomplete typeempty character constantempty file name in #%sempty index range in initializerempty scalar initializerenumerator value for `%s' not integer constantescape sequence out of range for characterexception handling disabled, use -fexceptions to enableexcess elements in array initializerexcess elements in char array initializerexcess elements in scalar initializerexcess elements in struct initializerexcess elements in union initializerexecv %sexecvp %sexpression statement has incomplete typeextra brace group at end of initializerextra elements in scalar initializerfclosefclose %sfdopenfield `%s' declared as a functionfield `%s' has incomplete typefield initializer is not constantfini function found in object %sfloating constant misusedfloating point constant not a valid immediate operandfloating point trap outputting a constantfopen %sfor each function it appears in.)format string arg follows the args to be formattedformat string arg not a string typeformat string has invalid operand numberfp_offset (%ld) or end_offset (%ld) is less than zero.friend declaration not in class definitionfstat %sfunction `%s' cannot be declared `mutable'function `%s' is initialized like a variablefunction body for constructor missingfunction definition declared `register'function definition declared `typedef'function does not return string typefunction return type cannot be functionfunction too large to be inlinefunction uses __builtin_eh_returnfunction using alloca cannot be inlinefunction using setjmp cannot be inlinefunction using short complex types cannot be inlinefunction with computed jump cannot inlinefunction with label addresses used in initializers cannot inlinefunction with nested functions cannot be inlinefunction with nonlocal goto cannot be inlinefunction with target specific attribute(s) cannot be inlinedfunction with transparent unit parameter cannot be inlinefunction with varying-size parameter cannot be inlinefunction with varying-size return value cannot be inlinegcc driver version %s executing gcc version %s + gcc version %s + gcov [-b] [-v] [-n] [-l] [-f] [-o OBJDIR] file + global register variable `%s' used in nested functionglobal register variable follows a function definitionglobal register variable has initial valuegp_offset (%ld) or end_offset (%ld) is less than zero.half-pic init called on systems that don't support it.hard register `%s' listed as input operand to `asm'hex escape sequence out of rangeimplicit declaration of function `%s'incompatibilities between object file & expected valuesincompatible type for argument %d of `%s'incompatible type for argument %d of indirect function callincompatible types in %sincomplete type unificationinconsistent instance variable specificationincrementindex value instead of field name in union initializerinit function found in object %sinitializationinitializer element is not computable at load timeinitializer element is not constantinitializer ends prematurelyinitializer for floating value is not a floating constantinitializer for integer value is too complicatedinitializer for scalar variable requires one elementinitializer for static variable is not constantinitializer for static variable uses complicated arithmeticinitializer for unnamed base class ambiguousinitializer invalid for static member with constructorinitializer-string for array of chars is too longinitializing array with parameter listinline float constants not supported on this hostinline functions not supported for this return value typeinput operand constraint contains `%c'instance variable `%s' is declared %sinstance variable `%s' is declared privateint-array initialized from non-wide stringinteger constant contains digits beyond the radixinteger constant is so large that it is unsignedinteger constant out of rangeinteger overflow in preprocessor expressioninternal errorinternal error: internal error: %%) found without a %%( in assembler patterninternal error: %%> found without a %%< in assembler patterninternal error: %%] found without a %%[ in assembler patterninternal error: %%} found without a %%{ in assembler patterninvalid #-lineinvalid #identinvalid #lineinvalid %%-codeinvalid %%B valueinvalid %%C valueinvalid %%E valueinvalid %%F valueinvalid %%G valueinvalid %%H valueinvalid %%J codeinvalid %%K valueinvalid %%L valueinvalid %%M valueinvalid %%N valueinvalid %%O valueinvalid %%P valueinvalid %%Q valueinvalid %%R valueinvalid %%S valueinvalid %%U valueinvalid %%V valueinvalid %%Z valueinvalid %%b valueinvalid %%f valueinvalid %%h valueinvalid %%j codeinvalid %%j valueinvalid %%k valueinvalid %%m valueinvalid %%p valueinvalid %%q valueinvalid %%r valueinvalid %%s valueinvalid %%u valueinvalid %%v valueinvalid %%xn codeinvalid %%z valueinvalid %B valueinvalid %C valueinvalid %D valueinvalid %E valueinvalid %H valueinvalid %P operandinvalid %Q valueinvalid %h valueinvalid %o valueinvalid %p valueinvalid %q valueinvalid %r valueinvalid %s/S valueinvalid %x/X valueinvalid UNSPEC as operandinvalid call to member function needing `this' in static member function scopeinvalid catch parameterinvalid codeinvalid default template argumentinvalid expression as operandinvalid hash type %d in dump_definitioninvalid initial value for member `%s'invalid initializerinvalid initializer for bit stringinvalid integer constant in parameter list, did you forget to give parameter name?invalid lvalue in asm statementinvalid lvalue in assignmentinvalid lvalue in decrementinvalid lvalue in incrementinvalid lvalue in unary `&'invalid operand output codeinvalid operand to %H/%L codeinvalid operand to %N codeinvalid operand to %R codeinvalid operand to %T/%B codeinvalid operand to %U codeinvalid operand to %V codeinvalid operand to %p codeinvalid operand to %s codeinvalid operands to binary %sinvalid operation on uninstantiated typeinvalid preprocessing directive #%sinvalid reference to NULL ptr, use ptr-to-member insteadinvalid register name `%s' for register variableinvalid storage class for function `%s'invalid truth-value expressioninvalid type `void' for newinvalid type argumentinvalid type argument of `%s'invalid type modifier within pointer declaratorinvalid type: `void &'invalid universal-character-nameinvalid use of `%s' on pointer to memberinvalid use of `restrict'invalid use of a pointer to an incomplete type in pointer arithmeticinvalid use of array with unspecified boundsinvalid use of incomplete typedef `%s'invalid use of non-lvalue arrayinvalid use of undefined type `%s %s'invalid use of void expressioninvalid version number formatjump to `%s' invalidly jumps into binding contourlabel %s referenced outside of any functionlabel `%s' referenced outside of any functionlabel must be followed by statementlanguage %s not recognizedlanguage string `"%s"' not recognizedload command map, %d cmds, new size %ld. + long and short specified together for `%s'long long constant not a valid immediate operandlong or short specified with char for `%s'long or short specified with floating type for `%s'long, short, signed or unsigned invalid for `%s'lseek %s 0matching constraint not valid in output operandmatching constraint references invalid operand numbermay not use both -EB and -ELmay not use both -mfp64 and -m4650may not use both -mfp64 and -msingle-floatmethod definition not in class contextmissing ';' before right bracemissing braces around initializermissing initializermissing terminating %c charactermodification by `asm'more than %d operands in `asm'msync %smulti-character character constantmulti-line commentmultiple `virtual' specifiersmultiple access specifiersmultiple default labels in one switchmultiple storage classes in declaration of `%s'multiple types in one declarationmunmap %smust #include before using typeidmysterious repository information in %sname lookup of `%s' changed for new ISO `for' scopingname missing for member functionnamespace-scope anonymous aggregates must be staticnested function `%s' declared `extern'nested redefinition of `%s'new cannot be applied to a function typenew cannot be applied to a reference typenew of array type fails to specify sizeno argumentsno base class to initializeno body nor ';' separates two class, struct or union declarationsno cmd_strings foundno data type for mode `%s'no newline at end of fileno prototype, and parameter address used; cannot be inlineno super class declared in interface for `%s'no symbol table foundnon hex digit '%c' in universal-character-namenon-empty initializer for array of empty elementsnon-lvalue in %snon-member `%s' cannot be declared `mutable'non-object member `%s' cannot be declared `mutable'nonconstant array index in initializernot enough type informationnot found + number of arguments doesn't match prototypenumber of bb notes in insn chain (%d) != n_basic_blocks (%d)object missing in use of pointer-to-member constructoctal escape sequence out of rangeold raw header fileonly constructors take base initializersonly declarations of constructors can be `explicit'open %soperand constraint contains '+' or '=' at illegal position.operand constraints for `asm' differ in number of alternativesoperand is const_doubleoperand is r0operand number missing after %-letteroperand number out of rangeoptions enabled: options passed: output number %d not directly addressableoutput operand constraint %d contains `+'output operand constraint lacks `='output_operand: %soverflow in array dimensionoverflow in enumeration valuesparameter `%s' has incomplete typeparameter `%s' is initializedparameter has incomplete typeparameter type of called function is incompleteparse errorparse error at end of saved function textparse error in method specificationparser may be lost: is there a '{' missing somewhere?passing arg %d of `%s'passing arg %d of pointer to functionpipepointer targets in %s differ in signednesspointer to member function called, but not in class scopepointer value used where a complex was expectedpointer value used where a floating point value was expectedpointers are not permitted as case valuespossible start of unterminated string literalpossibly missing ')'previous declaration of `%s'profiling does not support code models other than medlowprofiling not supported with -mg + raw header buffer too smallread %ld bytes, expected %ld, from %sread %sredeclaration of `enum %s'redefinition of `%s %s'redirecting stdout: %sreimplementation of class `%s'rename spec %s to %s + request for member `%s' in something not a structure or unionrequested alignment is not a constantrequested alignment is not a power of 2requested alignment is too largerequested init_priority is not an integer constantrequested init_priority is out of rangeresult of `operator->()' yields non-pointer resultreturnreturn value type specifier for constructor ignoredreturning a value from a constructorreturning a value from a destructorsection pointer missingsemicolon missing after %s declarationshort, signed or unsigned invalid for `%s'signed and unsigned given together for `%s'size of array `%s' has non-integer typesize of array `%s' is negativesize of array `%s' is too largesizeof applied to a bit-fieldsizeof applied to an incomplete typespec file has no spec for linkingspec is '%s' + + specs %%include syntax malformed after %ld charactersspecs %%rename syntax malformed after %ld charactersspecs %s spec was not found to be renamedspecs file malformed after %ld charactersspecs unknown %% command after %ld charactersstack limits not supported on this targetstatic `%s' cannot be declared `mutable'storage class `auto' invalid for function `%s'storage class `register' invalid for function `%s'storage class specified for %s `%s'storage class specified for parameter `%s'storage class specified for structure field `%s'storage class specified for typenamestorage class specifier `%s' not allowed after struct or classstorage class specifiers invalid in friend function declarationsstorage class specifiers invalid in parameter declarationsstring section missingstruct type value used where scalar is requiredsubscript missing in array referencesubscripted value is neither array nor pointersuggest hiding #%s from traditional C with an indented #switch quantity not an integersyntax errortaking dynamic typeid of object with -fno-rttithe conditional began herethe only valid combination is `long double'this is the location of the previous definitiontoo few arguments to functiontoo few arguments to function `%s'too many 'l' suffixes in integer constanttoo many alternatives in `asm'too many arguments to functiontoo many arguments to function `%s'too many input filestop-level declaration of `%s' specifies `auto'traditional C ignores #%s with the # indentedtrigraph ??%c converted to %ctrigraph ??%c ignoredtrying to finish struct, but kicked out due to previous parse errors.two or more data types in declaration of `%s'two types specified in one empty declarationtype mismatch in conditional expressiontype name expected before `&'type name expected before `*'type of formal parameter %d is incompletetype qualifier `%s' not allowed after struct or classtype size can't be explicitly evaluatedtype specifier `%s' not allowed after struct or classtype specifier omitted for parametertype to vector delete is neither pointer or array typetypedef `%s' is initializedtypedef declaration includes an initializertypedef declaration invalid in parameter declarationunable to mmap file '%s'unable to open dynamic dependency '%s'unable to open file '%s'unable to stat file '%s'unary `&'undefining `%s'union type value used where scalar is requiredunknown C standard `%s'unknown array size in deleteunknown field `%s' specified in initializerunknown machine mode `%s'unknown register name `%s' in `asm'unknown set constructor typeunknown {de,en}code_mach_o_hdr return value %dunnamed variable or field declared voidunordered comparison on non-floating point argumentunrecognized format specifierunrecognized option `-%s'unrecognized register name `%s'unsupported versionunsupported wide integer operationunterminated #%sunterminated commentunterminated string or character constantuse -gdwarf -g%d for DWARF v1, level %duse -gdwarf-2 for DWARF v2varargs function cannot be inlinevariable `%s' has initializer but incomplete typevariable or field `%s' declared voidvariable or field declared voidvariable-size type declared outside of any functionvariable-sized object may not be initializedvirtual functions cannot be friendsvirtual non-class function `%s'virtual outside class declarationvoid value not ignored as it ought to bewarning: write %swriting load commands. + + wrong number of arguments specified for `%s' attributewrong type argument to %swrong type argument to abswrong type argument to bit-complementwrong type argument to conjugationwrong type argument to unary exclamation markwrong type argument to unary minuswrong type argument to unary pluswrote %ld bytes, expected %ld, to %sProject-Id-Version: gcc 2.96.20000615 + POT-Creation-Date: 2001-06-11 15:08-0700 + PO-Revision-Date: 2001-02-10 16:06+01:00 + Last-Translator: Ole Laursen + Language-Team: Danish + MIME-Version: 1.0 + Content-Type: text/plain; charset=ISO-8859-1 + Content-Transfer-Encoding: 8bit + + %s: %d: advarsel: kan ikke tilføje erklæringen af '%s' i makrokald + + %s: fejl ved læsning af inddatafilen '%s': %s + + %s: fatal fejl: hjælpeinformationsfilen er beskadiget ved linje %d + + %s: advarsel: for få parameterlister i erklæringen af '%s' + + ;; kombineringstotal: %d forsøg, %d udskiftninger (%d kræver ny plads), + ;; %d succeser. + + Fortsæt, ja (y) eller nej (n)? + Behandler symboltabel nr. %d, offset = 0x%.8lx, form = %s + + Opdaterer hoved- og indlæsningskommandoer. + + + ldd-uddata med konstruktions-/destruktionsfunktioner. + + write_c_file - uddatanavnet er %s, præfikset er %s + i henvisning til medlem-omdannelse i henvisning til medlemsfunktion-omdannelse går ind i try-blok i kastet udtryk"%s" omdefineret# %s %.2f %.2f + '#' efterfølges af et heltal#%s forventer "FILNAVN" eller #-linjer til at træde ind og ud af filer passer ikke#elif efter #else#elif uden #if#else efter #else#else uden #if#endif uden #if#import er forældet, brug en #ifndef-indpakning i inkluderingsfilen#include "..."-søgning begynder her: + #include <...>-søgning begynder her: + #include_next i den primære kildekodefil'#pragma implementation' til %s optræder efter filen er inkluderet'#pragma once' er forældet%%S beregnede alle 0'eres maske%%S beregnede alle 1'eres maske%6.2f%% af %d forgreninger udført i filen %s + %6.2f%% af %d forgreninger udført i funktionen %s + %6.2f%% af %d forgreninger valgt mindst én gang i filen %s + %6.2f%% af %d forgreninger valgt mindst én gang i funktionen %s + %6.2f%% af %d kald udført i filen %s + %6.2f%% af %d kald udført i funktionen %s + %6.2f%% af %d kildekodelinjer udført i filen %s + %6.2f%% af %d kildekodelinjer udført i funktionen %s + %R efterfølges ikke af %B/C/D/E%d konstrueringsfunktion(er) fundet + %d destrueringsfunktion(er) fundet + %d rammetabel(ler) fundet + %s%s som float i stedet for double på grund af prototypen%s som complex i stedet for kommatal på grund af prototypen%s som kommatal i stedet for complex på grund af prototypen%s som kommatal i stedet for heltal på grund af prototypen%s som heltal i stedet for kommatal på grund af prototypen%s som signed på grund af prototypen%s som unsigned på grund af prototypen%s ved slutning af inddata%s før '%s'%s før strengkonstant%s kasserer modifikationer på henvisningsmålets type%s fra en henvisningstype der ikke er forenelig med målets%s-funktion, region %d, offset = %ld (0x%.8lx) + %s har intet medlem ved navn '%s'%s i forbehandlerdirektiv%s er en blokenhed%s understøttes ikke af denne konfiguration%s er for stor%s opretter et heltal ud fra en henvisningsvariabel uden en typeomtvingning%s opretter en henvisningsvariabel ud fra et heltal uden en typeomtvingning%s opretter en funktionshenvisning med modifikationer fra én uden%s af henvisning til en ukendt struktur%s returnerede afslutningskoden %d%s afsluttet af signal %d [%s]%s%s med anderledes bredde på grund af prototypen%s: %d: '%s' benyttet, men mangler i SYSCALLS + %s: %d: advarsel: '%s' ekskluderet af forbehandlingen + %s: %d: advarsel: definitionen af '%s' er ikke omdannet + %s: %d: advarsel: fandt '%s', men forventede '%s' + %s: %d: advarsel: ingen ekstern definition af '%s' + %s: %d: advarsel: koden er for forvirrende + %s: %d: advarsel: funktionserklæring med variabel parameterliste er ikke omdannet + %s: %s%s: %s-oversætter ikke installeret på dette system%s: %s afsluttede med status %d + %s: %s: kan ikke finde ud filens status: %s + %s: ikke et katalog%s: '%s' ikke omdannet + %s: kan ikke ændre tilstanden af filen '%s': '%s' + %s: kan ikke oprette/åbne oprydningsfilen '%s': %s + %s: kan ikke oprette/åbne uddatafilen '%s': %s + %s: kan ikke slette hjælpeinformationsfilen '%s': %s + %s: kan ikke slette filen '%s': %s + %s: kan ikke finde status af filen '%s': %s + %s: kan ikke finde status af hjælpeinformationsfilen '%s': %s + %s: kan ikke kæde filen '%s' sammen med '%s': %s + %s: kan ikke åbne hjælpeinformationsfilen '%s' til at læse fra: %s + %s: kan ikke åbne filen '%s' til at læse fra: %s + %s: kan ikke læse hjælpeinformationsfilen '%s': %s + %s: kan ikke få fat i arbejdskataloget: %s + %s: kan ikke åbnes som en coff-fil%s: oversætter '%s' + %s: modstridene for '%s' følger: + %s: modstridende eksterne definitioner af '%s' + %s: omdanner filen '%s' + %s: erklæringen af funktionen '%s' er ikke omdannet + %s: erklæringer af '%s' vil ikke blive omdannet + %s: definitionen af funktionen '%s' er ikke omdannet + %s: fejl ved lukning af hjælpeinformationsfilen '%s': %s + %s: fejl ved læsning af hjælpeinformationsfilen '%s': %s + %s: fejl ved skrivning til filen '%s': %s + %s: fandt definitionen af '%s' ved %s(%d) + %s: funktionsdefinitionen er ikke omdannet + %s: globale erklæringer for filen '%s' er ikke indsat + %s: inddatafilnavn skal have '.c'-endelser: %s + %s: intern afbrydelse + %s: ugyldigt filnavn: %s + %s: den lokale erklæring af funktionen '%s' er ikke indsat + %s: flere statiske definitioner af '%s' i filen '%s' + %s: ikke en coff-fil%s: barneprocessen modtog fatalt signal %d + %s: brug '%s [ -VqfnkN ] [ -i ] [ filenavn ... ]' + %s: brug '%s [ -VqfnkNlgC ] [ -B ] [ filnavn ... ]' + %s: vent: %s + %s: advarsel: kan ikke omdøbe filen '%s' til '%s': %s + %s: advarsel: filen '%s' er allerede gemt i '%s' + %s: advarsel: manglende SYSCALLS-fil '%s' + %s: advarsel: ingen læseadgang til filen '%s' + %s: advarsel: ingen statisk definition af '%s' i filen '%s' + %s: advarsel: ingen skriveadgang til kataloget der indeholder '%s' + %s: advarsel: ingen skriveadgang til filen '%s' + %s: advarsel: for mange parameterlister i erklæringen af '%s' + %s: advarsel: bruger parameterlisten fra %s(%d) til funktionen '%s' + %s: ville omdanne filen '%s' + %s:%d: erklæringen af funktionen '%s' antager forskellige former + %s=%s er ikke et tal.%s=%s er for stor.(et kaldenavn der ikke er erklæret, rapporteres kun én gang(et kaldenavn der ikke er erklæret, rapporteres kun én gang per funktion)(i nærheden af klargøringen af '%s')(dette rapporteres kun en enkelt gang per inddatafil), + af %s:%u-E påkrævet når inddata kommer fra standardind-I- er angivet to gange-f%s og -msdata=%s er indbyrdes uforenelige.-fPIC og -mcall-%s er indbyrdes uforenelige.-fPIC understøttes ikke på nuværende tidspunkt på 68000 og 68010 + -fPIC er ikke gyldig sammen med -mcoff-fPIC er ikke gyldig sammen med -mcoff-fpic og -mapcs-reent er indbyrdes uforenelige-fpic er ikke gyldig sammen med -mcoff-fpic er ikke gyldig sammen med -mcoff-mabi=%s understøtter ikke -mips%d-maix64 påkrævet: 64 bit-beregninger med 32 bit-adressering understøttes endnu ikke.-malign-functions=%d er ikke mellem 0 og %d-malign-functions=%d er ikke mellem 1 og %d-malign-jumps=%d er ikke mellem 0 og %d-malign-jumps=%d er ikke mellem 1 og %d-malign-loops=%d er ikke mellem 0 og %d-malign-loops=%d er ikke mellem 1 og %d-mapcs-26 og -mapcs-32 kan ikke bruges på samme tid-mbig-endian og -mlittle-endian kan ikke bruges på samme tid-mbranch-cost=%d er ikke mellem 0 og 5-mbsd og -mxopen er indbyrdes uforenelige-mbsd og -pedantic er indbyrdes uforenelige-mcall-aixdesc skal være ordnet med de mest betydende byte først i hukommelsen (big endian)-mcmodel= understøttes ikke på 32 bit-systemer-mcpu=%s understøtter ikke -mips%d-mhard-float understøttes ikke.-mips%d understøtter ikke 64-bit kommatalsregistre-mips%d understøtter ikke 64-bit almene registre-mips%d er ikke understøttet-mlong-double-64 er ikke tilladt med -m64-mpreferred-stack-boundary=%d er ikke mellem 2 og 31-mregparm=%d er ikke mellem 0 og %d-mrelocatable og -mcall-%s er indbyrdes uforenelige.-mrelocatable og -mno-minimal-toc er indbyrdes uforenelige.-mrelocatable og -msdata=%s er indbyrdes uforenelige-msdata=%s og -mcall-%s er indbyrdes uforenelige.-mshort-data-%s og PIC er indbyrdes uforenelige-mshort-data-%s er for stor-msingle-float og -msoft-float er indbyrdes uforenelige.-msoft-float og -mhard_float kan ikke bruges på samme tid-mtrap-large-shift og -mhandle-large-shift er indbyrdes uforenelige-mxopen og -pedantic er indbyrdes uforenelige'-p'-tilvalget understøttes ikke; benyt '-pg' i stedetprofilgenerering med -p understøttes ikke længere; benyt -pg i stedet for.-pg og -fomit-frame-pointer er indbyrdes uforenelige-pipe understøttes ikke.-pipe understøttes ikke-shared er ikke gyldig sammen med -mcoff-static er ikke gyldig sammen med -mcoff-symbolic er ikke gyldig sammen med -mcoffindholdet af .da-filen er udtømt for tidligt + indholdet af .da-filen ikke udtømt + ;; kombineringsstatistik: %d forsøg, %d udskiftninger (%d kræver ny plads), + ;; %d vellykkede. + + ;; Behandler blok fra %d til %d, %d mængder. + Et '-ifile'-tilvalg påkræver et '-map'-tilvalgEn parameterliste med '...' passer ikke til en erklæring med en tom parameterlisteJustér strengoperationernes destinationJustér double-variabler til word-grænserneJustér nogle double-variabler til dword-grænserneAlternativ kaldekonventionFlertydig forkortelse %sEn parametertype med automatisk forfremmelse passer ikke til en erklæring med en tom parameterliste.En parameter mangler efter %sEt postulat mangler efter %sAntager at alle kørselstællere er nul. + Forsøg at holde stakken justeret til denne potens af 2Ugyldig størrelse af stakpladsfjernelse: %dUgyldig værdi til -mcall-%sUgyldig værdi til -msdata=%sForkant til basisblok %d er ødelagtKantlister til basisblok %i er ødelagtFalsk JARL-konstruktion: %d + Falsk JR-konstruktion: %d + Forgreninger koster dette (1-5, vilkårlige enheder)kommentarer i C++-stil er ikke tilladt i ISO C89Kan ikke oprette krydsreferencefilen '%s'Kan ikke finde interface-erklæringen af '%s'Kan ikke interface-erklæringen af '%s', superklasse til '%s'Kan ikke finde protokolerklæringen af '%s'Cirkulær nedarvning i interface-erklæringen af '%s'Oversættelse af inkluderingsfil udbedtKontrollér tildelingsordenen for heltalsregistreneKun ikke finde specifikationsfil %s + Kunne ikke åbne basisblokfilen %s. + Kunne ikke åbne datafilen %s. + Kunne ikke åbne uddatafilen %s. + Kunne ikke åbne programstrømsgraffilen %s. + Kunne ikke åbne kildefilen %s. + Opretter %s. + Datastørrelse %ld. + Et katalognavn mangler efter %sJustér ikke strengoperationernes destinationGenerér ikke sin, cos, sqrt til fpuIntegrér ikke alle kendte strengoperationerReturnér ikke værdier fra funktioner i fpu-registreBrug ikke IEEE-regning til kommatalssammenligningerBrug ikke hardware-kommatalBrug ikke push-instruktioner til at gemme udgående parametreFejl: for mange basisblokke i .bb-filen %s + Konstruer instruktionerne til maskinkodeoversætteren med Intel-syntaksAktivér stakprøvningSlutinstruktion %d for blok %d ikke fundet i instruktionsstrømmen.Slut på søgningslisten. + Fandt fejl i inddatafilen (din bison.simple er forældet) + Der er en parameter for meget til '%s'-tilvalgetEt filnavn mangler efter %sFunktionsbegyndelser justeres til denne potens af 2GNU C understøtter ikke -C uden -EGenerér kode til en given cpuGenerér sin, cos og sqrt til fpuHovedinstruktion %d for blok %d ikke fundet i instruktionsstrømmen.I/O-fejl på uddataISO C++ forbyder en tom betingelse til '%s'ISO C++ forbyder sammenligninger af henvisningsvariabler og heltalI basisblok %d:I filen inkluderet af %s:%uUfuldstændigt '%s'-tilvalgIntegrér alle kendte strengoperationerInstruktion %d er i flere basisblokke (%d og %d)Internt gcc-afbrydelse fra %s:%dIntern gcc-afbrydelse.Intern gcov afbrydelse. + Ugyldig %%A-operandUgyldig %%B-operandUgyldig %%C-operandUgyldig %%D-operandUgyldig %%Y-operandUgyldig %%c-operandUgyldig %%d-operandUgyldig %%f-operandUgyldigt tilvalg til kommatalsemulering: -mfpe-%sUgyldigt tilvalg %sUgyldigt tilvalg '%s'Ugyldigt tilvalg '-mshort-data-%s'Ugyldigt tilvalg 'entry%s'Ugyldig specifikation! Fejl i cc.Steder der skal springes til, justeres til denne potens af 2Biblioteket lib%s ikke fundetLøkkekode skal justeres til denne potens af 2Et makronavn mangler efter %sDer mangler en parameter til '%s'-tilvalgetNOTE_INSN_BASIC_BLOCK %d i midten af basisblok %dNOTE_INSN_BASIC_BLOCK mangler for blok %dNOTE_INSN_BASIC_BLOCK mangler for blok %d + Ingen forgreninger i filen %s + Ingen forgreninger i funktionen %s + Ingen kald i filen %s + Ingen kald i funktionen %s + Ingen kørbar kode associeret med filen %s. + Ingen kørbare kildekodelinjer i filen %s + Ingen kørbare kildekodelinjer i funktionen %s + Der er ingen inkluderingssti at finde %s iIngen inddatafilerEt tal mangler efter %sAntallet af registre der skal bruges til at overbringe heltalsparametreUdelad rammehenvisningen i de yderste funktionerUddatafilnavnet er angivet to gangePRINT_OPERAND nul-henvisningPRINT_OPERAND: Ukendt tegnsætning '%c'PRINT_OPERAND_ADDRESS, nul-henvisningNavnet på en sti mangler efter %sBehandler specifikation %c%s%c, som er '%s' + Profilgenerering understøttes ikke endnu.RETURN_ADDRESS_OFFSET er ikke understøttetLæser specifikationer fra %s + Registret '%c' er allerede angivet i tildelingsordenenRegistret '%c' er ukendtReturnér værdier fra funktioner i fpu-registreMagen til -mcpu=i386Magen til -mcpu=i486Magen til -mcpu=pentiumMagen til -mcpu=pentiumproPlanlæg koden til en given cpuSætter specifikation %s til '%s' + + Specifikationsfejl: '%%*' er ikke blevet klargjort af mønstersøgningSpecifikationsfejl: Ukendt specifikationstilvalg '%c'Stakstørrelse > 32kUnderstøttelsen af -mabi=32 virker ikke endnuDen lokale variabel 'insn' har værdien:Dette mål understøtter ikke '-mabi'-tilvalget.Trampoliner understøttes ikke endnuKan ikke finde et register at bortødsle i klassen '%s'Kan ikke bruge '%s' til PIC-registerTypen 'id' er ikke defineret, importér venligst Stødt på slutningen af kildefilen %s tidligere end forventet. + Lokale variabler uden startværdi i .bssLokale variabler uden startværdi i .dataUkendt '-mdebug-%s'-tilvalgUkendt tilvalg '%s'Brug: %s [tilvalg] inddata uddata + Brug IEEE-matematik til kommatalssammenligningerBrug hardware-kommatalBrug normal kaldekonventionBrug push-instruktioner til at gemme udgående parametreBenytter indbyggede specifikationer. + Advarsel: '-x %s' efter den sidste inddatafil udvirker intetAdvarsel: forældet '%%['-operator benyttet i specifikationer[Efterlader %s] + [kan ikke finde %s][super ...] skal optræde i en metodekontekst\x angivet uden efterfølgende hexadecimale cifre__alignof__ benyttet på en ufuldstændig type'%%'-begrænsning brugt med sidste operandoperanden '%d' er ikke et register'%l'-operand er ikke en etiket'%s' erklæret som både eksporteret til og importeret fra en dll.'%s' er erklæret som en funktion der returnerer en funktion'%s' er erklæret som en funktion der returnerer en tabel'%s' er hverken en typedef eller en indbygget type'%s' er af en ufuldstændig type'%s' er erklæret 'extern', men bliver tildelt en startværdi'%s' er hverken en almindelig funktion eller en medlemsfunktion; kan ikke erklæres som friend'%s' omerklæret som en anden form for symbol'%s' er ikke erklæret (først benyttet i denne funktion)'%s' ikke erklæret her (ikke i en funktion)'-p' understøttes ikke; brug '-pg' og gprof(1)'...' i gammeldags liste af kaldenavne'[*]' i parametererklæring kun tilladt i ISO C 99'__alignof' benyttet på et bitfelt'__alignof__' brugt på et bitfelt'asm' kan ikke benyttes i funktioner hvor hukommelsesforbruget bliver tjekket'asm' kan ikke benyttes sammen med '-fcheck-memory-usage''bool' er et reserveret ord'com_interface' understøttes kun med -fvtable-thunks'enum %s' er ufuldstændig ved virkefeltets afslutning her'long long long' er for langt for GCC'sigof' benyttet på et udtryk der ikke er af en sammensat type'sigof' benyttet på en type der ikke er sammensat'sizeof' benyttet på et bitfelt'struct %s' er ufuldstændig ved virkefeltets afslutning her'union %s' er ufuldstændig ved virkefeltets afslutning her'void' i en parameterliste skal udgøre hele listenforespørgsel efter adressen af den globale registervariabel '%s'en værdi af en sammensat type er angivet hvor der forventedes et komplekst talen værdi af en sammensat type er angivet hvor der forventedes et kommatalen værdi af en sammensat type er angivet hvor der forventedes et heltalaliasparameter er ikke en strengflertydig konvertering af tabelindeksflertydig forespørgsel efter medlemsfunktionshenvisningen '%s'anonym struct er ikke inden i en navngiven typeparametrene der skal formateres, er ikke '...'parameter '%s' passer ikke til prototypenparameteren til 'asm' er ikke en konstant strengen parameter til '%s' mangler + en parameter til '-%s' mangleren parameter til '-B' mangleren parameter til '-V' mangleren parameter til '-Xlinker' mangleren parameter til '-b' mangleren parameter til '-specs' mangleren parameter til '-specs=' mangleren parameter til '-x' manglerparametre givet til makro '%s'beregninger udført på en henvisning til en ufuldstændig typetabelindeks i en startværdi der ikke er en tabeltabel får tildelt en startværdi fra et tabeludtryk der ikke er konstanttabelindeks er ikke et heltalværdi af tabeltype angivet hvor skalar er påkræveten tabel af funktioner giver ikke meningasm-sætning er ikke en strengkonstanttildelingtildeling (ikke klargøring) i erklæringved dette sted i filenforsøg på at finde adressen af bitfeltstrukturmedlemmet '%s'omvendt skråstreg og linjeskift er adskilt af mellemrumugyldig version af hovedetugyldigt magisk talugyldigt magisk tal i filen '%s'ugyldig version af råhovedetugyldig værdi (%s) til '%s'-tilvalgetugyldig værdi (%s) til '-mabi='-tilvalgetUgyldig værdi (%s) til '-march='-tilvalgetugyldig værdi (%s) til '-mcmodel='tilvalgetugyldig værdi '%s' til '-mcpu'-tilvalgetUgyldig værdi (%s) til '-mcpu='-tilvalgetugyldig værdi (%s) til '-mips'-tilvalgetugyldig værdi (%s) til '-mmodel'-tilvalgetugyldig værdi (%s) til '-msdata'-tilvalgetugyldig værdi '%s' til '-mcpu'-tilvalgetugyldig værdi '%s' til '-mfp-rounding-mode'-tilvalgetugyldig værdi '%s' til '-mfp-trap-mode'-tilvalgetugyldig værdi '%s' til '-mtrap-precision'-tilvalgetstamklasse-klargøring angivet, men der er ingen stamklasse at klargørestamklasseklargøringer er ikke tilladt for ikke-medlemsfunktionerbasisoperanden til '->' er ikke en henvisningblock_num = %ld, num_blocks = %d + både long og short angivet for '%s'både signed og unsigned er angivet for '%s'sætningsblokke i udtryk er kun tilladt inde i en funktionkrøllede paranteser omkring skalarstartværdiforgrening %d aldrig udført + forgrening %d valgt = %d + forgrening %d valgt = %d%% + break-sætning befinder sig ikke i en løkke- eller switch-konstruktionmellemlagre er stadig stakket op i cpp_finishkald %d aldrig udført + kald %d returnerer = %d + kald %d returnerer = %d%% + kald af Java-konstruktionsfunktion mens 'jclass' ikke er defineretdet kaldte objekt er ikke en funktionkan ikke håndtere inkonsistente kald af '%s'kan kun bruge init_priority-egenskaben på filvirkefeltsdefinitioner af objekter af class-typekan ikke oprette opbevaringsstedinformationsfilen '%s'kan ikke have variable parameterlister med -mfp-arg-in-fp-regskan ikke klargøre vennefunktionen '%s'kan ikke bruge '%s' som et %s-registerkan ikke konverteres til en henvisningstypekan ikke erklære %s til referencerkan ikke erklære '::main' som et templatekan ikke erklære '::main' som inlinekan ikke erklære '::main' som statickan ikke erklære henvisninger til referencerkan ikke erklære referencer til referencerkan ikke erklære en funktion for static inden i en anden funktionkan ikke slette en funktion; kun henvisninger til objekter er gyldige parametre til 'delete'kan ikke finde '%s'kan ikke finde 'ldd'kan ikke finde 'nm'kan ikke tildele tabeller startværdier med denne syntakskan ikke anbringe et objekt med et volatile-felt i et registerkan ikke returnere fra en håndtering af en funktions-try-blok i en konstruktionsfunktionkan ikke angive -o med -c eller -S og flere oversættelserkan ikke finde adressen af bitfeltet '%s'kan ikke bruge '::' i parametererklæringkan ikke bruge typeid med -fno-rtticase-etiketten kan ikke reduceres til en heltalskonstantcase-etiket befinder sig ikke inden i en switch-sætningtypetildelingen angiver en tabeltypetypetildelingen angiver en funktionstypetypetildeling til en union-type fra en type der ikke findes i union'enchar-tabel får tildelt startværdi fra en bred strengtegnkonstanten er for langfundet en henvisningsefterfølgelse der går i ringfejl under lukning af fildeskriptor %dfejl ved lukning af %scollect2 version %skommeoperator i en operand til #ifcomplex ugyldig for '%s'modstridende tilgangsanvisninger til feltet '%s', ignoreretmodstridende superklassenavn '%s'const '%s' kan ikke erklæres 'mutable'konstruktionsfunktionen kan ikke være en statisk medlemsfunktioncontinue-sætning befinder sig ikke i en løkkekonvertering til en ufuldstændig typekonvertering til ikke-skalartype udbedtkunne ikke konvertere 0x%l.8x til en region'%s' erklæret som en tabel af funktioner'%s' erklæret som en tabel af voidformindskelseforsøg på at følge en henvisning til en variabel af en ufuldstændig typedestruktionsfunktionen kan ikke være en statisk medlemsfunktiondestruktionsfunktioner skal være medlemmerdestruktionsfunktioner kan ikke have parametrebrugte ikke alle grafens basisblokelementer, funktion %s + pga. af tilstedeværelsen af en konstruktionsfunktionfejl under kopiering af fildeskriptor (dup2 %d 1)case-værdi optræder mere end én gang (måske pga. overlap)case-værdi optræder mere end én gangmere end én erklæring af klassemetoden '%s'.mere end én erklæring af instansmetoden '%s'.mere end én definition af klassemetoden '%s'.mere end én definition af instansmetoden '%s'.etiketten '%s' er blevet erklæret mere end én gangdynamiske afhængigheder. + dynamisk afhængighed %s ikke fundetelementer i tabellen '%s' er af en ufuldstændig typetom tegnkonstanttomt filnavn i #%stomt indeksinterval i startværditom skalarstartværdienum-værdien for '%s' er ikke en heltalskonstantundvigesekvensen er uden for det gyldig interval for tegnhåndtering af undtagelser er slået fra, angiv -fexceptions for at slå dem tilfor mange elementer i tabelstartværdifor mange elementer i char-tabelstartværdienfor mange elemener i skalarstartværdifor mange elementer i struc-startværdifor mange elementer i union-startværdifejl under kørsel (vha. execv) af %sfejl under kørsel (vha. execvp) af %sudtrykket er af en ufuldstændig typeoverskydende krøllede paranteser ved slutningen af startværdienoverskydende elementer i skalarstarværdifejl under lukning af filfejl under lukning af filen %sfejl under åbning af fildeskriptorfeltet '%s' er erklæret som en funktionfeltet '%s' er af en ufuldstændig typefeltets startværdi er ikke en konstantafslutningsfunktion fundet i objekt %skommatalskonstant misbrugtkommatalskonstant er ikke en gyldig umiddelbar operandkommatalsfælde udsender en konstantfejl under åbning af filen %sper funktion)formatstrengsparameter efterfølger parametrene der skal formateresformatstrengsparameter er ikke af en strengtypeformatstrengen har et ugyldigt operandtalfp_offset (%ld) eller end_offset (%ld) er mindre end nul.friend-erklæringen er ikke i klassedefinitionenfejl ved egenskabsundersøgelse af filen %sfunktionen '%s' kan ikke erklæres 'mutable'funktionen '%s' bliver tildelt en startværdi som en variabelkroppen til konstruktionsfunktionen mangler'register' er påhæftet funktionsdefinitionen'typedef' er påhæftet funktionsdefinitionenfunktionen returnerer ikke en strengtypeen funktions returtype kan ikke være en funktionfunktionen er for stor til at blive indbyggetfunktionen bruger __builtin_eh_returnfunktion der bruger alloca, kan ikke indbyggesfunktioner der bruger setjmp, kan ikke indbyggesfunktioner der benytter short complex-typer, kan ikke indbyggesfunktioner med beregnede spring kan ikke indbyggesfunktioner hvor etiketadresser benyttes i klargøringer, kan ikke indbyggesfunktioner med indlejrede funktioner kan ikke indbyggesfunktioner med ikke-lokale goto'er kan ikke indbyggesfunktioner med målspecifikke egenskaber kan ikke indbyggesfunktioner med gennemsigtig union-parameter kan ikke indbyggesfunktioner med parametre af varierende størrelse kan ikke indbyggesfunktioner med returværdier af varierende størrelse kan ikke indbyggesgcc-styringsprogram version %s kører gcc version %s + gcc version %s + gcov [-b] [-v] [-n] [-l] [-f] [-o OBJKAT] fil + global registervariabel '%s' benyttet i indlejret funktionen global registervariabel følger en funktionsdefinitionglobal registervariabel har en startværdigp_offset (%ld) eller end_offset (%ld) er mindre end nul.half-pic klargøring kaldes på systemer der ikke understøtter det.hardware-register '%s' angivet som inddataoperand til 'asm'den hexadecimale undvigesekvens er uden for det gyldige intervalunderforstået erklæring af funktionen '%s'uforeneligheder mellem objektfil og forventede værdiertypen af den %d. parameter i '%s' passer ikketypen af den %d. parameter i det indirekte funktionskald passer ikkeuforenelige typer i %sufuldstændig typeforeninginkonsistent instansvariabelangivelseforøgelseindeksværdi i stedet for feltnavn i union-startværdiklargøringsfunktion fundet i objekt %sklargøringstartværdielement kan ikke beregnes ved indlæsningstidspunktetstartværdielement er ikke en konstantstartværdien slutter for tidligtstartværdien for kommatal er ikke en kommatalskonstantstartværdien for heltallet er for kompliceretstartværdien for en skalarvariabel kan kun bestå af ét elementstartværdien for den statiske variabel er ikke en konstantstartværdien for den statiske variabel benytter komplicerede beregningerklargøring af unavngiven stamklasse er flertydigtildeling af startværdi er ugyldig for statisk medlem med konstruktionsfunktionstartværdistrengen til char-tabellen er for langklargører tabel med en parameterlisteintegrerede kommatalskonstanter er ikke understøttede på denne værtintegrerede funktioner understøttes ikke for denne returværditypeinddataoperandbegrænsningen indeholder '%c'instansvariablen '%s' er erklæret '%s'instansvariablen '%s' er erklæret privatint-tabel får tildelt startværdi fra en ikke-bred strengheltalskonstanten indeholder cifre der er større end grundtalletheltalskonstanten er så stor at den er unsignedheltalskonstanten er uden for det gyldige intervalheltallet løber over i forbehandlerudtrykketintern fejlintern fejl: intern fejl: %%) fundet uden en %%) i maskinkodeoversættermønsterintern fejl: %%> fundet uden en %%< i maskinkodeoversættermønsterintern fejl: %%] fundet uden en %%[ i maskinkodeoversættermønsterintern fejl: %%} fundet uden en %%{ i maskinkodeoversættermønsterugyldig #-linjeugyldig #identugyldig #lineugyldig %%-kodeugyldig %%B-værdiugyldig %%C-værdiugyldig %%E-værdiugyldig %%F-værdiugyldig %%G-værdiugyldig %%H-værdiugyldig %%J-kodeugyldig %%K-værdiugyldig %%L-værdiugyldig %%M-værdiugyldig %%N-værdiugyldig %%O-værdiugyldig %%P-værdiugyldig %%Q-værdiugyldig %%R-værdiugyldig %%S-værdiugyldig %%U-værdiugyldig %%V-værdiugyldig %%Z-værdiugyldig %%b-værdiugyldig %%f-værdiugyldig %%h-værdiugyldig %%j-kodeugyldig %%j-værdiugyldig %%k-værdiugyldig %%m-værdiugyldig %%p-værdiugyldig %%q-værdiugyldig %%r-værdiugyldig %%s-værdiugyldig %%u-værdiugyldig %%v-værdiugyldig %%xn-kodeugyldig %%z-værdiugyldig '%B'-værdiugyldig '%C'-værdiugyldig '%D'-værdiugyldig '%E'-værdiugyldig '%H'-værdiugyldig '%P'-operandugyldig '%Q'-værdiugyldig '%h'-værdiugyldig '%o'-værdiugyldig '%p'-værdiugyldig '%q'-værdiugyldig '%r'-værdiugyldig '%s/S'-værdiugyldig '%x/X'-værdiugyldig UNSPEC som operandugyldigt kald af medlemsfunktion som har brug for 'this', i et statisk medlemsfunktionsvirkefeltugyldig catch-parameterugyldig kodeugyldig standardparameter i skabelonugyldigt udtryk som operandugyldig hashtype %d i dump_definitionugyldig startværdi for medlemmet '%s'ugyldig startværdiugyldig startværdi til bitstrengugyldig heltalskonstant i parameterlisten, måske mangler parameternavnet?ugyldig venstreværdi i asm-sætningugyldig venstreværdi i tildelingugyldig venstreværdi i formindskelseugyldig venstreværdi i forøgelseugyldig venstreværdi i unært '&'ugyldig operand-uddatakodeugyldig operand til '%H'/'%L'-kodenugyldig operand til '%N'-kodenugyldig operand til '%R'-kodenugyldig operand til '%T/%B'-kodenugyldig operand til '%U'-kodenugyldig operand til '%V'-kodenugyldig operand til '%p'-kodenugyldig operand til '%s'-kodenugyldige operander til binær %sugyldig operation på uudskiftet typeugyldigt forbehandlerdirektiv #%sugyldig reference til NULL-henvisning, benyt en henvisning til medlem i stedetugyldigt registernavn '%s' for registervariabelugyldig lagringsklasse for funktion '%s'ugyldigt sandhedsværdiudtrykugyldig type 'void' til newugyldig typeparameterugyldig typeparameter '%s'ugyldig typemodifikation i erklæring af henvisningugyldig type: 'void &'ugyldigt universelt tegnnavnugyldig brug af '%s' på henvisning til medlemugyldig brug af 'restrict'ugyldig brug af en henvisning til en ufuldstændig type i henvisningsberegningenugyldig brug af tabel med uangivne rammerugyldig brug af ufuldstændig typedef '%s'ugyldig brug af en tabel der ikke kan optræde som en venstreværdiugyldig brug af en type '%s %s' der ikke er defineretugyldig brug af void-udtrykugyldigt versionsnummerformatspring til '%s' rammer på ugyldig vis ind i bindingskonturder er blevet henvist til etiketten '%s' uden for en funktionder er blevet henvist til etiketten '%s' uden for en funktionetiketten skal efterfølges af en sætningsproget %s ikke genkendtsprogstrengen '"%s"' ikke genkendtindlæser kommandooversigt, %d kommandoer, ny størrelse %ld. + long og short er begge angivet for '%s'long long-konstant er ikke en gyldig umiddelbar operandlong eller short angivet samtidig med char for '%s'long eller short angivet samtidig med en kommatalstype for '%s'long, short, signed og unsigned er ugyldige for '%s'fejl ved søgning til begyndelsen i filen %sbegrænsningen er ikke gyldig for uddataoperandenbegrænsning refererer til et ugyldigt operandtalkan ikke bruge både -EB og -EL-mfp64 og -m4650 er indbyrdes uforenelige-mfp64 og -msingle-float er indbyrdes uforeneligemetodedefinitionen optræder ikke i en klassekontekstder mangler et semikolon før en højre krøllet paranteskrøllede paranteser mangler omkring startværdienmanglende startværdimanglende afsluttende '%c'-tegnændring i 'asm'mere end %d operander i 'asm'fejl ved synkronisering mellem hukommelse og disk af %stegnkonstanten fylder mere end én charflerlinjers kommentarmere end én 'virtual'-angivelsemere end én tilgangsangivelseflere default-etiketter i én switch-konstruktionflere lagringsklasser optræder i erklæringen af '%s'flere typer i én erklæringfejl ved fjernelse af %s fra hukommelsen'#include ' er nødvendig før typeid kan benyttesmystisk opbevaringsstedinformation i '%s'opslaget af '%s' er ændret på grund af ISO definitionen af 'for'-virkefeltetnavn mangler for medlemsfunktionanonyme variabler af sammensatte typer i navnerumsvirkefelt skal erklæres staticindlejret funktion '%s' er erklæret 'extern'indlejret omdefinering af '%s'new kan ikke bruges på en funktionstypenew kan ikke bruges på en referencetypenew virkende på en tabeltype mangler at angive størrelseningen parametreingen stamklasse at klargøreder er hverken en krop eller et semikolon mellem to class, struct eller union-erklæringeringen cmd_strings fundetingen datatype til tilstand '%s'ingen linjeskift ved slutningen af fileningen prototype, og parameteradressen benyttes; kan ikke indbyggesder er ikke erklæret en superklasse i interface-erklæringen af '%s'ingen symboltabel fundetder optræder '%c' der ikke er et hexadecimalt ciffer, i universelt tegnnavnen startværdi der ikke er tom, tildeles til en tabel med tomme elementerikke venstreværdi i %s'%s' som ikke er medlem, kan ikke erklæres 'mutable''%s' som ikke er objektmedlem, kan ikke erklæres 'mutable'tabelindekset i startværdien er ikke en konstantikke tilstrækkelig information om typenikke fundet + antallet af parametre passer ikke til prototypenantallet af basisbloknoter i instruktionskæden (%d) != n_basic_blocks (%d)der mangler et objekt i henvisning til medlem-konstruktionenden oktale undvigesekvens er uden for det gyldige intervalgammel råhovedfilkun konstruktionsfunktioner har stamklasseklargøringerkun erklæringer af konstruktionsfunktioner kan være 'explicit'fejl ved åbning af %soperandbegrænsning indeholder '+' eller '=' på et ulovligt sted.operandbegrænsninger til 'asm' har forskellige antal alternativeroperanden er const_doubleoperanden er r0operandtal mangler efter %-letteroperandtal er uden for det gyldige intervaltilvalg slået til: tilvalg overbragt: uddata nr. %d kan ikke adresseres direkteuddataoperandbegrænsning %d indeholder '+'uddataoperandbegrænsning mangler '='output_operand: %stabeldimension for storfor mange enum-værdierparameteren '%s' er af en ufuldstændig typeparameter '%s' bliver tildelt en startværdiparameteren er af en ufuldstændig typeparametertypen af den kaldte funktion er ufuldstændigtolkningsfejltolkningsfejl ved slutningen af gemt funktionsteksttolkningsfejl i medlemsfunktionsangivelsenfortolkeren kan være faret vild: mangler der en '{' et eller andet sted?videregiver den %d. parameter til '%s'videregiver den %d. parameter af henvisning til funktionfejl under oprettelse af ledningfortegnene i henvisningsmål i %s er forskelligehenvisning til medlem-funktion kaldt, men ikke i klassevirkefelten henvisningsværdi er angivet hvor der forventedes et komplekst talen henvisningsværdi er angivet hvor der forventedes en kommatalsværdihenvisningsvariabler er ikke tilladt som case-værdiermuligvis begyndelsen af uafsluttet strengkonstantmuligvis mangler en ')''%s' er tidligere erklæretprofilgenerering understøtter ikke andre kodemodeller end medlowprofilgenerering understøttes ikke med -mg + råhoved-mellemlager for småtlæste %ld byte, forventede %ld, fra %sfejl ved læsning af %somerklæring af 'enum %s'omdefinering af '%s %s'omdirigerer standard-ud: %somimplementering af klassen '%s'omdøb specifikation %s til %s + forespørgsel efter medlemmet '%s' i noget der hverken er en union eller en strukturangivet justering er ikke en konstantangivet justering er ikke en potens af 2angivet justering er for storden udbedte init_priority er ikke en heltalskonstantden udbedte init_priority er uden for det gyldige intervalresultatet af 'operator->()' er ikke en henvisningreturnangivelse af typen af returværdien til konstruktionsfunktionen ignoreresreturnerer en værdi fra en konstruktionsfunktionreturnerer en værdi fra en destruktionsfunktionsektionshenvisning manglersemikolon mangler efter %s erklæringenshort, signed eller unsigned er ugyldig for '%s'signed og unsigned er begge angivet for '%s'størrelsen af tabel '%s' er ikke af en heltalstypestørrelsen af tabel '%s' er negativstørrelsen af tabel '%s' er for storsizeof benyttet på et bitfeltsizeof benyttet på en ufuldstændig typespecifikationsfil har ingen specifikation til sammenkædningspecifikation er '%s' + + %%include-syntaks i specifikationer misdannet efter %ld tegn%%rename-syntaks i specifikationer misdannet efter %ld tegn%s-specifikation i specifikationer kunne ikke findes til omdøbelsespecifikationsfil misdannet efter %ld tegnukendt %%-kommando i specifikationer efter %ld tegnstakgrænser understøttes ikke på målarkitekturenstatic '%s' kan ikke erklæres 'mutable'lagringsklassen 'auto' er ugyldig for funktionen '%s'lagringsklassen 'register' er ugyldig for funktionen '%s'lagringsklasse angivet for %s '%s'lagringsklasse angivet for parameter '%s'lagringsklasse angivet for strukturfelt '%s'lagringsklasse angivet for typenavnlagringsklasseangivelsen '%s' er ikke tilladt efter struct eller classlagringsklasseanvisninger er ugyldige i vennefunktionserklæringerlagringsklasseanvisninger er ugyldige i parametererklæringerstrengsektion manglerværdi af struct-type angivet hvor skalar er påkrævetindeks mangler i tabelopslagværdien der er påført et indeks, er hverken en tabel eller en henvisningsvariabelforeslår at skjule #%s fra traditionel C vha. indrykket '#'switch-størrelsen er ikke et heltalsyntaksfejlforsøg på at finde den dynamiske typeid af et objekt med -fno-rttibetingelsen begyndte herden eneste gyldige kombination er 'long double'den foregående definition er herfor få parametre til funktionenfor få parametre til funktionen '%s'for mange 'l'-suffikser i heltalskonstantfor mange alternativer i 'asm'for mange parametre til funktionenfor mange parametre til funktionen '%s'for mange inddatafilererklæring af '%s' på øverste niveau angiver 'auto'traditionel C ignorerer #%s når '#' er indrykkettrigrafen ??%c konverteret til %ctrigrafen ??%c ignoreretforsøgte at afslutte struct, men blev stoppet af tidligere tolkningsfejl.mere end én datatype i erklæringen af '%s'to typer angivet i én tom erklæringtyperne i betingelsesudtrykket passer ikke sammender forventedes et typenavn før '&'der forventedes et typenavn før '*'typen af den formelle parameter %d er ufuldstændigtypemodifikationen '%s' er ikke tilladt efter struct eller classdet er ikke muligt eksplicit at finde typens størrelsetypeangivelsen '%s' er ikke tilladt efter struct eller classtypeangivelsen er ikke angivet for parameterenvariablen til tabel-delete er hverken af en henvisnings- eller en tabeltypetypedef '%s' bliver tildelt en værditypedef-erklæringen indeholder en startværditypedef-erklæringer er ugyldig i parametererklæringerkunne ikke indlæse filen '%s'kan ikke åbne den dynamiske afhængighed '%s'kunne ikke åbne filen '%s'kunne ikke få fat i oplysninger om filen '%s'unær '&'glemmer definitionen af '%s'værdi af union-type angivet hvor skalar er påkrævetukendt C-standard '%s'ukendt tabelstørrelse i deleteukendt felt '%s' angivet i startværdiukendt maskintilstand '%s'ukendt registernavn '%s' i 'asm'ukendt mængdekonstruktionstypeukendt {de,en}code_mach_o_hdr returneringsværdi %dunavngiven variabel eller felt erklæret voiduordnent sammenligning af ikke-kommatalsparameterukendt formatanvisningukendt tilvalg '-%s'ukendt registernavn '%s'versionen er ikke understøttetbred heltalsoperation understøttes ikkeuafsluttet #%suafsluttet kommentaruafsluttet streng- eller tegnkonstantbenyt - gdwarf -g%d til DWARF v1, niveau %dbenyt -gdwarf-2 til DWARF v2funktioner med variabel parameterliste kan ikke indbyggesvariablen '%s' bliver tildelt en startværdi, men er af en ufuldstændig typevariabel eller felt '%s' erklæret voidvariabel eller felt erklæret voiden type med en variabel størrelse er erklæret uden for en funktionet objekt af variabel størrelse må ikke tildeles en startværdien virtuel funktion kan ikke erklæres som friendvirtuel funktion '%s' tilhører ikke en klassevirtual angivet uden for klasseerklæringtom værdi er ikke ignoreret som den burde væreadvarsel: fejl ved skrivning til %sskriver indlæsningskommandoer. + + forkert antal parametre angivet til '%s'-egenskabenforkert parametertype til %sforkert parametertype til absforkert parametertype til bitkomplementforkert parametertype til konjugationforkert parametertype til unært udråbstegnforkert parametertype til unært minusforkert parametertype til unært plusskrev %ld byte, forventede %ld, til %s \ No newline at end of file diff -Nrc3pad gcc-3.0.4/gcc/po/da.po gcc-3.1/gcc/po/da.po *** gcc-3.0.4/gcc/po/da.po Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/po/da.po Wed Dec 5 00:09:13 2001 *************** *** 0 **** --- 1,14843 ---- + # Danish version of GCC strings. + # Copyright (C) 2001 Free Software Foundation, Inc. + # Ole Laursen , 2001. + # + msgid "" + msgstr "" + "Project-Id-Version: gcc 2.96.20000615\n" + "POT-Creation-Date: 2001-06-11 15:08-0700\n" + "PO-Revision-Date: 2001-02-10 16:06+01:00\n" + "Last-Translator: Ole Laursen \n" + "Language-Team: Danish \n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=ISO-8859-1\n" + "Content-Transfer-Encoding: 8bit\n" + + #: builtins.c:280 + #, fuzzy + msgid "offset outside bounds of constant string" + msgstr "parameteren til 'asm' er ikke en konstant streng" + + #. ??? We used to try and build up a call to the out of line function, + #. guessing about what registers needed saving etc. This became much + #. harder with __builtin_va_start, since we don't have a tree for a + #. call to __builtin_saveregs to fall back on. There was exactly one + #. port (i860) that used this code, and I'm unconvinced it could actually + #. handle the general case. So we no longer try to handle anything + #. weird and make the backend absorb the evil. + #: builtins.c:2634 + #, fuzzy + msgid "__builtin_saveregs not supported by this target" + msgstr "stakgrænser understøttes ikke på målarkitekturen" + + #: builtins.c:2677 + #, fuzzy + msgid "argument of `__builtin_args_info' must be constant" + msgstr "parameteren til 'asm' er ikke en konstant streng" + + #: builtins.c:2683 + msgid "argument of `__builtin_args_info' out of range" + msgstr "" + + #: builtins.c:2689 + msgid "missing argument in `__builtin_args_info'" + msgstr "" + + #: builtins.c:2720 + msgid "`va_start' used in function with fixed args" + msgstr "" + + #: builtins.c:2739 + msgid "second parameter of `va_start' not last named argument" + msgstr "" + + #. Evidently an out of date version of ; can't validate + #. va_start's second argument, but can still work as intended. + #: builtins.c:2744 + msgid "`__builtin_next_arg' called without an argument" + msgstr "" + + #: builtins.c:2846 + #, fuzzy + msgid "too many arguments to function `va_start'" + msgstr "for mange parametre til funktionen '%s'" + + #: builtins.c:2932 + #, fuzzy + msgid "first argument to `va_arg' not of type `va_list'" + msgstr "den anden parameter til 'operator delete' skal være af typen 'size_t'" + + #: builtins.c:2960 + #, c-format + msgid "`%s' is promoted to `%s' when passed through `...'" + msgstr "" + + #: builtins.c:2964 + #, c-format + msgid "(so you should pass `%s' not `%s' to `va_arg')" + msgstr "" + + #: builtins.c:3073 + msgid "invalid arg to `__builtin_frame_address'" + msgstr "" + + #: builtins.c:3075 + #, fuzzy + msgid "invalid arg to `__builtin_return_address'" + msgstr "Mere end ét kald til __builtin_eh_return" + + #: builtins.c:3088 + msgid "unsupported arg to `__builtin_frame_address'" + msgstr "" + + #: builtins.c:3090 + #, fuzzy + msgid "unsupported arg to `__builtin_return_address'" + msgstr "Mere end ét kald til __builtin_eh_return" + + #: builtins.c:3253 + msgid "second arg to `__builtin_expect' must be a constant" + msgstr "" + + #: builtins.c:3564 + msgid "__builtin_longjmp second argument must be 1" + msgstr "" + + #: builtins.c:3578 + #, fuzzy + msgid "__builtin_trap not supported by this target" + msgstr "stakgrænser understøttes ikke på målarkitekturen" + + #. just do library call, if unknown builtin + #: builtins.c:3630 c-common.c:4256 + #, fuzzy, c-format + msgid "built-in function `%s' not currently supported" + msgstr "%s: definitionen af funktionen '%s' er ikke omdannet\n" + + #: c-common.c:465 + #, c-format + msgid "string length `%d' is greater than the length `%d' ISO C%d compilers are required to support" + msgstr "" + + #: c-common.c:630 + #, c-format + msgid "`%s' attribute directive ignored" + msgstr "" + + #: c-common.c:638 + #, c-format + msgid "`%s' attribute does not apply to types" + msgstr "" + + #: c-common.c:645 + #, c-format + msgid "wrong number of arguments specified for `%s' attribute" + msgstr "forkert antal parametre angivet til '%s'-egenskaben" + + #: c-common.c:661 c-common.c:668 c-common.c:675 c-common.c:688 c-common.c:696 + #: c-common.c:711 c-common.c:724 c-common.c:732 c-common.c:748 c-common.c:760 + #: c-common.c:772 c-common.c:777 c-common.c:951 c-common.c:1103 + #, c-format + msgid "`%s' attribute ignored" + msgstr "" + + #: c-common.c:810 + #, c-format + msgid "unknown machine mode `%s'" + msgstr "ukendt maskintilstand '%s'" + + #: c-common.c:813 + #, c-format + msgid "no data type for mode `%s'" + msgstr "ingen datatype til tilstand '%s'" + + #: c-common.c:820 + #, c-format + msgid "type with more precision than %s" + msgstr "" + + #: c-common.c:839 + msgid "section attribute cannot be specified for local variables" + msgstr "" + + #: c-common.c:846 + #, c-format + msgid "section of `%s' conflicts with previous declaration" + msgstr "" + + #: c-common.c:852 + #, c-format + msgid "section attribute not allowed for `%s'" + msgstr "" + + #: c-common.c:855 + #, fuzzy + msgid "section attributes are not supported for this target" + msgstr "stakgrænser understøttes ikke på målarkitekturen" + + #: c-common.c:874 + msgid "requested alignment is not a constant" + msgstr "angivet justering er ikke en konstant" + + #: c-common.c:879 + msgid "requested alignment is not a power of 2" + msgstr "angivet justering er ikke en potens af 2" + + #: c-common.c:881 + msgid "requested alignment is too large" + msgstr "angivet justering er for stor" + + #: c-common.c:904 + #, fuzzy, c-format + msgid "alignment may not be specified for `%s'" + msgstr "både signed og unsigned er angivet for '%s'" + + #: c-common.c:929 + #, c-format + msgid "`%s' defined both normally and as an alias" + msgstr "" + + #: c-common.c:937 + msgid "alias arg not a string" + msgstr "aliasparameter er ikke en streng" + + #: c-common.c:958 c-common.c:975 c-common.c:992 + #, fuzzy, c-format + msgid "`%s' attribute applies only to functions" + msgstr "new kan ikke bruges på en funktionstype" + + #: c-common.c:964 c-common.c:981 c-common.c:998 + #, c-format + msgid "can't set `%s' attribute after definition" + msgstr "" + + #: c-common.c:1131 + #, fuzzy + msgid "overflow in constant expression" + msgstr "heltallet løber over i forbehandlerudtrykket" + + #: c-common.c:1152 + #, fuzzy + msgid "integer overflow in expression" + msgstr "heltallet løber over i forbehandlerudtrykket" + + #: c-common.c:1161 + #, fuzzy + msgid "floating point overflow in expression" + msgstr "kommatal er ikke tilladt i '#if'-udtryk" + + #. This detects cases like converting -129 or 256 to unsigned char. + #: c-common.c:1182 + msgid "large integer implicitly truncated to unsigned type" + msgstr "" + + #: c-common.c:1184 + msgid "negative integer implicitly converted to unsigned type" + msgstr "" + + #: c-common.c:1231 + msgid "overflow in implicit constant conversion" + msgstr "" + + #: c-common.c:1379 + #, fuzzy, c-format + msgid "operation on `%s' may be undefined" + msgstr "erklæring af '%s' som void" + + #: c-common.c:1664 + msgid "expression statement has incomplete type" + msgstr "udtrykket er af en ufuldstændig type" + + #: c-common.c:1697 + msgid "case label does not reduce to an integer constant" + msgstr "case-etiketten kan ikke reduceres til en heltalskonstant" + + #: c-common.c:1967 + msgid "invalid truth-value expression" + msgstr "ugyldigt sandhedsværdiudtryk" + + #: c-common.c:2018 + #, c-format + msgid "invalid operands to binary %s" + msgstr "ugyldige operander til binær %s" + + #: c-common.c:2253 c-common.c:2262 + msgid "comparison is always false due to limited range of data type" + msgstr "" + + #: c-common.c:2255 c-common.c:2264 + msgid "comparison is always true due to limited range of data type" + msgstr "" + + #: c-common.c:2330 + msgid "comparison of unsigned expression >= 0 is always true" + msgstr "" + + #: c-common.c:2339 + msgid "comparison of unsigned expression < 0 is always false" + msgstr "" + + #: c-common.c:2390 f/com.c:15291 + msgid "struct type value used where scalar is required" + msgstr "værdi af struct-type angivet hvor skalar er påkrævet" + + #: c-common.c:2394 f/com.c:15295 + msgid "union type value used where scalar is required" + msgstr "værdi af union-type angivet hvor skalar er påkrævet" + + #: c-common.c:2398 f/com.c:15299 + msgid "array type value used where scalar is required" + msgstr "værdi af tabeltype angivet hvor skalar er påkrævet" + + #: c-common.c:2513 f/com.c:15425 + msgid "suggest parentheses around assignment used as truth value" + msgstr "" + + #: c-common.c:2557 c-common.c:2589 + msgid "invalid use of `restrict'" + msgstr "ugyldig brug af 'restrict'" + + #: c-common.c:3724 c-typeck.c:1792 + #, c-format + msgid "too few arguments to function `%s'" + msgstr "for få parametre til funktionen '%s'" + + #: c-common.c:3730 c-typeck.c:1644 + #, c-format + msgid "too many arguments to function `%s'" + msgstr "for mange parametre til funktionen '%s'" + + #: c-common.c:3917 + msgid "pointers are not permitted as case values" + msgstr "henvisningsvariabler er ikke tilladt som case-værdier" + + #: c-common.c:3923 + msgid "ISO C++ forbids range expressions in switch statements" + msgstr "" + + #: c-common.c:3925 + msgid "ISO C forbids range expressions in switch statements" + msgstr "" + + #: c-common.c:3955 + msgid "empty range specified" + msgstr "" + + #: c-common.c:4006 + msgid "duplicate (or overlapping) case value" + msgstr "case-værdi optræder mere end én gang (måske pga. overlap)" + + #: c-common.c:4008 + #, fuzzy + msgid "this is the first entry overlapping that value" + msgstr "case-værdi optræder mere end én gang (måske pga. overlap)" + + #: c-common.c:4012 + msgid "duplicate case value" + msgstr "case-værdi optræder mere end én gang" + + #: c-common.c:4013 + msgid "previously used here" + msgstr "" + + #: c-common.c:4017 + msgid "multiple default labels in one switch" + msgstr "flere default-etiketter i én switch-konstruktion" + + #: c-common.c:4018 + msgid "this is the first default label" + msgstr "" + + #: c-common.c:4526 + msgid "-Wformat-y2k ignored without -Wformat" + msgstr "" + + #: c-common.c:4528 + msgid "-Wformat-extra-args ignored without -Wformat" + msgstr "" + + #: c-common.c:4530 + msgid "-Wformat-nonliteral ignored without -Wformat" + msgstr "" + + #: c-common.c:4532 + msgid "-Wformat-security ignored without -Wformat" + msgstr "" + + #: c-common.c:4534 + msgid "-Wmissing-format-attribute ignored without -Wformat" + msgstr "" + + #: c-convert.c:78 c-typeck.c:983 c-typeck.c:4098 cp/typeck.c:1754 + #: cp/typeck.c:6304 + msgid "void value not ignored as it ought to be" + msgstr "tom værdi er ikke ignoreret som den burde være" + + #: c-convert.c:110 java/typeck.c:150 + msgid "conversion to non-scalar type requested" + msgstr "konvertering til ikke-skalartype udbedt" + + #: c-decl.c:550 + #, c-format + msgid "unknown C standard `%s'" + msgstr "ukendt C-standard '%s'" + + #: c-decl.c:844 + #, c-format + msgid "array `%s' assumed to have one element" + msgstr "" + + #: c-decl.c:1020 + #, c-format + msgid "`struct %s' incomplete in scope ending here" + msgstr "'struct %s' er ufuldstændig ved virkefeltets afslutning her" + + #: c-decl.c:1023 + #, c-format + msgid "`union %s' incomplete in scope ending here" + msgstr "'union %s' er ufuldstændig ved virkefeltets afslutning her" + + #: c-decl.c:1026 + #, c-format + msgid "`enum %s' incomplete in scope ending here" + msgstr "'enum %s' er ufuldstændig ved virkefeltets afslutning her" + + #: c-decl.c:1140 c-decl.c:1305 java/decl.c:1337 + #, fuzzy, c-format + msgid "label `%s' used but not defined" + msgstr "'%.*s' er ikke defineret" + + #: c-decl.c:1146 c-decl.c:1312 java/decl.c:1343 + #, fuzzy, c-format + msgid "label `%s' defined but not used" + msgstr "der er blevet henvist til etiketten '%s' uden for en funktion" + + #: c-decl.c:1434 c-decl.c:1487 + #, fuzzy, c-format + msgid "shadowing built-in function `%s'" + msgstr "kan ikke klargøre vennefunktionen '%s'" + + #: c-decl.c:1436 + #, fuzzy, c-format + msgid "shadowing library function `%s'" + msgstr "ugyldig lagringsklasse for funktion '%s'" + + #: c-decl.c:1442 + #, fuzzy, c-format + msgid "library function `%s' declared as non-function" + msgstr "feltet '%s' er erklæret som en funktion" + + #: c-decl.c:1446 c-decl.c:1449 + #, fuzzy, c-format + msgid "built-in function `%s' declared as non-function" + msgstr "feltet '%s' er erklæret som en funktion" + + #: c-decl.c:1453 objc/objc-act.c:2480 objc/objc-act.c:6133 + #, c-format + msgid "`%s' redeclared as different kind of symbol" + msgstr "'%s' omerklæret som en anden form for symbol" + + #: c-decl.c:1454 c-decl.c:1632 c-decl.c:1779 objc/objc-act.c:2482 + #: objc/objc-act.c:6135 objc/objc-act.c:6193 + #, c-format + msgid "previous declaration of `%s'" + msgstr "'%s' er tidligere erklæret" + + #. If types don't match for a built-in, throw away the built-in. + #: c-decl.c:1536 + #, fuzzy, c-format + msgid "conflicting types for built-in function `%s'" + msgstr "kan ikke klargøre vennefunktionen '%s'" + + #: c-decl.c:1579 c-decl.c:1598 + #, fuzzy, c-format + msgid "conflicting types for `%s'" + msgstr "modstridende superklassenavn '%s'" + + #: c-decl.c:1621 + msgid "A parameter list with an ellipsis can't match an empty parameter name list declaration." + msgstr "En parameterliste med '...' passer ikke til en erklæring med en tom parameterliste" + + #: c-decl.c:1627 + msgid "An argument type that has a default promotion can't match an empty parameter name list declaration." + msgstr "En parametertype med automatisk forfremmelse passer ikke til en erklæring med en tom parameterliste." + + #: c-decl.c:1642 c-decl.c:1664 + #, fuzzy, c-format + msgid "redefinition of `%s'" + msgstr "omdefinering af '%s %s'" + + #: c-decl.c:1645 + #, fuzzy, c-format + msgid "redeclaration of `%s'" + msgstr "omerklæring af 'enum %s'" + + #: c-decl.c:1648 + #, fuzzy, c-format + msgid "conflicting declarations of `%s'" + msgstr "modstridende superklassenavn '%s'" + + #: c-decl.c:1657 c-decl.c:1669 + #, c-format + msgid "`%s' previously defined here" + msgstr "" + + #: c-decl.c:1658 c-decl.c:1670 + #, c-format + msgid "`%s' previously declared here" + msgstr "" + + #: c-decl.c:1691 + #, fuzzy, c-format + msgid "prototype for `%s' follows" + msgstr "%s: modstridene for '%s' følger:\n" + + #: c-decl.c:1692 c-decl.c:1700 c-decl.c:1716 + msgid "non-prototype definition here" + msgstr "" + + #: c-decl.c:1699 + #, fuzzy, c-format + msgid "prototype for `%s' follows and number of arguments doesn't match" + msgstr "antallet af parametre passer ikke til prototypen" + + #: c-decl.c:1714 + #, c-format + msgid "prototype for `%s' follows and argument %d doesn't match" + msgstr "" + + #: c-decl.c:1731 + #, fuzzy, c-format + msgid "`%s' declared inline after being called" + msgstr "'%s' er erklæret som en funktion der returnerer en tabel" + + #: c-decl.c:1736 + #, fuzzy, c-format + msgid "`%s' declared inline after its definition" + msgstr "'%s' er ikke erklæret (først benyttet i denne funktion)" + + #: c-decl.c:1743 + #, fuzzy, c-format + msgid "static declaration for `%s' follows non-static" + msgstr "erklæring af '%s' som void" + + #: c-decl.c:1751 + #, fuzzy, c-format + msgid "non-static declaration for `%s' follows static" + msgstr "Kan ikke finde interface-erklæringen af '%s'" + + #: c-decl.c:1758 + #, fuzzy, c-format + msgid "const declaration for `%s' follows non-const" + msgstr "%s: erklæringer af '%s' vil ikke blive omdannet\n" + + #: c-decl.c:1765 + #, c-format + msgid "type qualifiers for `%s' conflict with previous decl" + msgstr "" + + #: c-decl.c:1778 + #, fuzzy, c-format + msgid "redundant redeclaration of `%s' in same scope" + msgstr "erklæring af '%s' som void" + + #: c-decl.c:2069 + #, fuzzy, c-format + msgid "nested extern declaration of `%s'" + msgstr "indlejret omdefinering af '%s'" + + #: c-decl.c:2094 java/decl.c:989 + #, fuzzy, c-format + msgid "`%s' used prior to declaration" + msgstr "'%s' er underforstået erklæret som en funktion" + + #: c-decl.c:2115 c-decl.c:2330 + #, c-format + msgid "`%s' was declared implicitly `extern' and later `static'" + msgstr "" + + #: c-decl.c:2225 + msgid "type mismatch with previous external decl" + msgstr "" + + #: c-decl.c:2226 + #, fuzzy, c-format + msgid "previous external decl of `%s'" + msgstr "'%s' er tidligere erklæret" + + #: c-decl.c:2239 + msgid "type mismatch with previous implicit declaration" + msgstr "" + + #: c-decl.c:2241 + #, fuzzy, c-format + msgid "previous implicit declaration of `%s'" + msgstr "'%s' er tidligere erklæret" + + #: c-decl.c:2258 + #, fuzzy, c-format + msgid "type of external `%s' is not global" + msgstr "størrelsen af tabel '%s' er for stor" + + #: c-decl.c:2309 + #, fuzzy, c-format + msgid "`%s' was previously implicitly declared to return `int'" + msgstr "'%s' er underforstået erklæret som en funktion" + + #: c-decl.c:2334 + #, fuzzy, c-format + msgid "`%s' was declared `extern' and later `static'" + msgstr "'%s' er erklæret 'extern', men bliver tildelt en startværdi" + + #: c-decl.c:2357 + #, fuzzy, c-format + msgid "extern declaration of `%s' doesn't match global one" + msgstr "'%s' erklæret som en tabel af void" + + #: c-decl.c:2397 + #, c-format + msgid "`%s' locally external but globally static" + msgstr "" + + #: c-decl.c:2433 c-decl.c:2458 cp/decl.c:4225 java/decl.c:1036 + #, fuzzy, c-format + msgid "declaration of `%s' shadows a parameter" + msgstr "erklæring af '%s' som void" + + #: c-decl.c:2436 java/decl.c:1039 + #, fuzzy, c-format + msgid "declaration of `%s' shadows a symbol from the parameter list" + msgstr "'%s' erklæret som en tabel af void" + + #: c-decl.c:2460 cp/decl.c:4233 + #, fuzzy, c-format + msgid "declaration of `%s' shadows previous local" + msgstr "erklæring af '%s' som void" + + #. XXX shadow warnings in outer-more namespaces + #: c-decl.c:2463 cp/decl.c:4237 + #, fuzzy, c-format + msgid "declaration of `%s' shadows global declaration" + msgstr "'%s' erklæret som en tabel af funktioner" + + #: c-decl.c:2553 + #, fuzzy, c-format + msgid "function `%s' was previously declared within a block" + msgstr "funktionen '%s' kan ikke erklæres 'mutable'" + + #: c-decl.c:2570 c-decl.c:2572 + #, c-format + msgid "implicit declaration of function `%s'" + msgstr "underforstået erklæring af funktionen '%s'" + + #: c-decl.c:2659 + #, c-format + msgid "label %s referenced outside of any function" + msgstr "der er blevet henvist til etiketten '%s' uden for en funktion" + + #: c-decl.c:2716 + #, c-format + msgid "duplicate label declaration `%s'" + msgstr "etiketten '%s' er blevet erklæret mere end én gang" + + #: c-decl.c:2719 + #, fuzzy + msgid "this is a previous declaration" + msgstr "'%s' er tidligere erklæret" + + #: c-decl.c:3246 + msgid "unnamed struct/union that defines no instances" + msgstr "" + + #: c-decl.c:3265 + #, fuzzy + msgid "useless keyword or type name in empty declaration" + msgstr "to typer angivet i én tom erklæring" + + #: c-decl.c:3272 + msgid "two types specified in one empty declaration" + msgstr "to typer angivet i én tom erklæring" + + #: c-decl.c:3277 c-parse.y:303 c-parse.y:722 c-parse.y:724 c-parse.y:774 + #: cp/parse.y:724 cp/parse.y:1781 objc/objc-parse.y:332 objc/objc-parse.y:774 + #: objc/objc-parse.y:776 objc/objc-parse.y:826 objc/objc-parse.y:2574 + #, fuzzy + msgid "empty declaration" + msgstr "flere typer i én erklæring" + + #: c-decl.c:3334 + #, fuzzy, c-format + msgid "`%s' is usually a function" + msgstr "'%s' er underforstået erklæret som en funktion" + + #: c-decl.c:3348 + #, c-format + msgid "typedef `%s' is initialized" + msgstr "typedef '%s' bliver tildelt en værdi" + + #: c-decl.c:3355 + #, c-format + msgid "function `%s' is initialized like a variable" + msgstr "funktionen '%s' bliver tildelt en startværdi som en variabel" + + #. DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE. + #: c-decl.c:3362 + #, c-format + msgid "parameter `%s' is initialized" + msgstr "parameter '%s' bliver tildelt en startværdi" + + #: c-decl.c:3382 c-typeck.c:4829 + msgid "variable-sized object may not be initialized" + msgstr "et objekt af variabel størrelse må ikke tildeles en startværdi" + + #: c-decl.c:3388 + #, c-format + msgid "variable `%s' has initializer but incomplete type" + msgstr "variablen '%s' bliver tildelt en startværdi, men er af en ufuldstændig type" + + #: c-decl.c:3394 + #, c-format + msgid "elements of array `%s' have incomplete type" + msgstr "elementer i tabellen '%s' er af en ufuldstændig type" + + #: c-decl.c:3407 + #, fuzzy, c-format + msgid "declaration of `%s' has `extern' and is initialized" + msgstr "'%s' er erklæret 'extern', men bliver tildelt en startværdi" + + #: c-decl.c:3521 + #, c-format + msgid "initializer fails to determine size of `%s'" + msgstr "" + + #: c-decl.c:3526 + #, fuzzy, c-format + msgid "array size missing in `%s'" + msgstr "Et makronavn mangler efter %s" + + #: c-decl.c:3542 + #, c-format + msgid "zero or negative size array `%s'" + msgstr "" + + #: c-decl.c:3570 + #, c-format + msgid "storage size of `%s' isn't known" + msgstr "" + + #: c-decl.c:3580 + #, fuzzy, c-format + msgid "storage size of `%s' isn't constant" + msgstr "parameteren til 'asm' er ikke en konstant streng" + + #: c-decl.c:3631 + #, c-format + msgid "ignoring asm-specifier for non-static local variable `%s'" + msgstr "" + + #: c-decl.c:3706 + #, c-format + msgid "ANSI C forbids parameter `%s' shadowing typedef" + msgstr "" + + #: c-decl.c:3940 cp/decl.c:10013 + msgid "`long long long' is too long for GCC" + msgstr "'long long long' er for langt for GCC" + + #: c-decl.c:3945 + #, fuzzy + msgid "ISO C89 does not support `long long'" + msgstr "GNU C understøtter ikke -C uden -E" + + #: c-decl.c:3950 cp/decl.c:10018 + #, fuzzy, c-format + msgid "duplicate `%s'" + msgstr "etiketten '%s' optræder mere end én gang" + + #: c-decl.c:3956 cp/decl.c:10038 + #, c-format + msgid "two or more data types in declaration of `%s'" + msgstr "mere end én datatype i erklæringen af '%s'" + + #: c-decl.c:3971 cp/decl.c:10043 + #, c-format + msgid "`%s' fails to be a typedef or built in type" + msgstr "'%s' er hverken en typedef eller en indbygget type" + + #: c-decl.c:4009 + #, fuzzy, c-format + msgid "type defaults to `int' in declaration of `%s'" + msgstr "mere end én datatype i erklæringen af '%s'" + + #: c-decl.c:4038 + #, c-format + msgid "both long and short specified for `%s'" + msgstr "både long og short angivet for '%s'" + + #: c-decl.c:4042 cp/decl.c:10142 + #, c-format + msgid "long or short specified with char for `%s'" + msgstr "long eller short angivet samtidig med char for '%s'" + + #: c-decl.c:4049 cp/decl.c:10146 + #, c-format + msgid "long or short specified with floating type for `%s'" + msgstr "long eller short angivet samtidig med en kommatalstype for '%s'" + + #: c-decl.c:4052 + msgid "the only valid combination is `long double'" + msgstr "den eneste gyldige kombination er 'long double'" + + #: c-decl.c:4058 + #, c-format + msgid "both signed and unsigned specified for `%s'" + msgstr "både signed og unsigned er angivet for '%s'" + + #: c-decl.c:4060 cp/decl.c:10135 + #, c-format + msgid "long, short, signed or unsigned invalid for `%s'" + msgstr "long, short, signed og unsigned er ugyldige for '%s'" + + #: c-decl.c:4066 cp/decl.c:10155 + #, fuzzy, c-format + msgid "long, short, signed or unsigned used invalidly for `%s'" + msgstr "long, short, signed og unsigned er ugyldige for '%s'" + + #: c-decl.c:4085 cp/decl.c:10176 + #, c-format + msgid "complex invalid for `%s'" + msgstr "complex ugyldig for '%s'" + + #: c-decl.c:4130 + msgid "ISO C89 does not support complex types" + msgstr "" + + #: c-decl.c:4142 + msgid "ISO C does not support plain `complex' meaning `double complex'" + msgstr "" + + #: c-decl.c:4148 c-decl.c:4160 + #, fuzzy + msgid "ISO C does not support complex integer types" + msgstr "GNU C understøtter ikke -C uden -E" + + #: c-decl.c:4175 c-decl.c:4571 cp/decl.c:10775 + #, fuzzy + msgid "duplicate `const'" + msgstr "etiketten '%s' optræder mere end én gang" + + #: c-decl.c:4177 c-decl.c:4575 cp/decl.c:10779 + #, fuzzy + msgid "duplicate `restrict'" + msgstr "etiketten '%s' optræder mere end én gang" + + #: c-decl.c:4179 c-decl.c:4573 cp/decl.c:10777 + #, fuzzy + msgid "duplicate `volatile'" + msgstr "case-værdi optræder mere end én gang" + + #: c-decl.c:4201 cp/decl.c:10325 + #, c-format + msgid "multiple storage classes in declaration of `%s'" + msgstr "flere lagringsklasser optræder i erklæringen af '%s'" + + #: c-decl.c:4210 + #, fuzzy + msgid "function definition declared `auto'" + msgstr "'typedef' er påhæftet funktionsdefinitionen" + + #: c-decl.c:4212 + msgid "function definition declared `register'" + msgstr "'register' er påhæftet funktionsdefinitionen" + + #: c-decl.c:4214 + msgid "function definition declared `typedef'" + msgstr "'typedef' er påhæftet funktionsdefinitionen" + + #: c-decl.c:4227 + #, c-format + msgid "storage class specified for structure field `%s'" + msgstr "lagringsklasse angivet for strukturfelt '%s'" + + #: c-decl.c:4231 cp/decl.c:10372 + #, c-format + msgid "storage class specified for parameter `%s'" + msgstr "lagringsklasse angivet for parameter '%s'" + + #: c-decl.c:4234 cp/decl.c:10374 + msgid "storage class specified for typename" + msgstr "lagringsklasse angivet for typenavn" + + #: c-decl.c:4246 cp/decl.c:10388 + #, fuzzy, c-format + msgid "`%s' initialized and declared `extern'" + msgstr "indlejret funktion '%s' er erklæret 'extern'" + + #: c-decl.c:4248 cp/decl.c:10391 + #, c-format + msgid "`%s' has both `extern' and initializer" + msgstr "'%s' er erklæret 'extern', men bliver tildelt en startværdi" + + #: c-decl.c:4252 cp/decl.c:10395 + #, c-format + msgid "nested function `%s' declared `extern'" + msgstr "indlejret funktion '%s' er erklæret 'extern'" + + #: c-decl.c:4255 cp/decl.c:10399 + #, c-format + msgid "top-level declaration of `%s' specifies `auto'" + msgstr "erklæring af '%s' på øverste niveau angiver 'auto'" + + #: c-decl.c:4297 + #, c-format + msgid "declaration of `%s' as array of voids" + msgstr "'%s' erklæret som en tabel af void" + + #: c-decl.c:4303 + #, c-format + msgid "declaration of `%s' as array of functions" + msgstr "'%s' erklæret som en tabel af funktioner" + + #: c-decl.c:4325 + #, c-format + msgid "size of array `%s' has non-integer type" + msgstr "størrelsen af tabel '%s' er ikke af en heltalstype" + + #: c-decl.c:4330 + #, fuzzy, c-format + msgid "ISO C forbids zero-size array `%s'" + msgstr "ISO C forbyder tekst efter #%s" + + #: c-decl.c:4337 + #, c-format + msgid "size of array `%s' is negative" + msgstr "størrelsen af tabel '%s' er negativ" + + #: c-decl.c:4350 + #, c-format + msgid "ISO C89 forbids array `%s' whose size can't be evaluated" + msgstr "" + + #: c-decl.c:4353 + #, fuzzy, c-format + msgid "ISO C89 forbids variable-size array `%s'" + msgstr "ISO C forbyder tekst efter #%s" + + #: c-decl.c:4383 c-decl.c:4597 + #, c-format + msgid "size of array `%s' is too large" + msgstr "størrelsen af tabel '%s' er for stor" + + #: c-decl.c:4400 + #, fuzzy + msgid "ISO C89 does not support flexible array members" + msgstr "ISO C tillader ikke navngivne variabel parameterliste-makroer" + + #: c-decl.c:4410 + #, fuzzy + msgid "array type has incomplete element type" + msgstr "parameteren er af en ufuldstændig type" + + #: c-decl.c:4417 + msgid "ANSI C forbids const or volatile function types" + msgstr "" + + #: c-decl.c:4456 cp/decl.c:10535 + #, c-format + msgid "`%s' declared as function returning a function" + msgstr "'%s' er erklæret som en funktion der returnerer en funktion" + + #: c-decl.c:4461 cp/decl.c:10540 + #, c-format + msgid "`%s' declared as function returning an array" + msgstr "'%s' er erklæret som en funktion der returnerer en tabel" + + #: c-decl.c:4496 + #, fuzzy + msgid "ISO C forbids qualified void function return type" + msgstr "ISO C++ forbyder omtvingelse af typen til en tabeltype" + + #: c-decl.c:4500 + msgid "type qualifiers ignored on function return type" + msgstr "" + + #: c-decl.c:4529 c-decl.c:4612 c-decl.c:4696 c-decl.c:4787 + #, fuzzy + msgid "ISO C forbids qualified function types" + msgstr "ISO C++ forbyder omtvingelse af typen til en tabeltype" + + #: c-decl.c:4569 cp/decl.c:10771 + msgid "invalid type modifier within pointer declarator" + msgstr "ugyldig typemodifikation i erklæring af henvisning" + + #: c-decl.c:4646 + #, fuzzy + msgid "ISO C forbids const or volatile function types" + msgstr "ISO C++ forbyder omtvingelse af typen til en tabeltype" + + #: c-decl.c:4665 cp/decl.c:11247 + #, c-format + msgid "variable or field `%s' declared void" + msgstr "variabel eller felt '%s' erklæret void" + + #: c-decl.c:4734 + #, c-format + msgid "field `%s' declared as a function" + msgstr "feltet '%s' er erklæret som en funktion" + + #: c-decl.c:4740 + #, c-format + msgid "field `%s' has incomplete type" + msgstr "feltet '%s' er af en ufuldstændig type" + + #: c-decl.c:4772 c-decl.c:4774 c-decl.c:4781 + #, c-format + msgid "invalid storage class for function `%s'" + msgstr "ugyldig lagringsklasse for funktion '%s'" + + #: c-decl.c:4793 + msgid "`noreturn' function returns non-void value" + msgstr "" + + #: c-decl.c:4805 + #, fuzzy + msgid "cannot inline function `main'" + msgstr "kan ikke klargøre vennefunktionen '%s'" + + #: c-decl.c:4840 + #, fuzzy, c-format + msgid "variable `%s' declared `inline'" + msgstr "variabel eller felt '%s' erklæret void" + + #: c-decl.c:4911 c-decl.c:5898 + msgid "function declaration isn't a prototype" + msgstr "" + + #: c-decl.c:4917 + #, fuzzy + msgid "parameter names (without types) in function declaration" + msgstr "flere typer i én erklæring" + + #: c-decl.c:4949 c-decl.c:6286 c-decl.c:6585 + #, c-format + msgid "parameter `%s' has incomplete type" + msgstr "parameteren '%s' er af en ufuldstændig type" + + #: c-decl.c:4952 + msgid "parameter has incomplete type" + msgstr "parameteren er af en ufuldstændig type" + + #: c-decl.c:4973 + #, fuzzy, c-format + msgid "parameter `%s' points to incomplete type" + msgstr "parameteren '%s' er af en ufuldstændig type" + + #: c-decl.c:4976 + #, fuzzy + msgid "parameter points to incomplete type" + msgstr "parameteren er af en ufuldstændig type" + + #: c-decl.c:5041 + #, c-format + msgid "parameter `%s' has just a forward declaration" + msgstr "" + + #: c-decl.c:5082 + msgid "`void' in parameter list must be the entire list" + msgstr "'void' i en parameterliste skal udgøre hele listen" + + #: c-decl.c:5111 + #, c-format + msgid "`%s %s' declared inside parameter list" + msgstr "" + + #: c-decl.c:5120 + #, fuzzy + msgid "anonymous struct declared inside parameter list" + msgstr "anonym struct er ikke inden i en navngiven type" + + #: c-decl.c:5122 + #, fuzzy + msgid "anonymous union declared inside parameter list" + msgstr "anonym struct er ikke inden i en navngiven type" + + #: c-decl.c:5124 + #, fuzzy + msgid "anonymous enum declared inside parameter list" + msgstr "anonym struct er ikke inden i en navngiven type" + + #: c-decl.c:5128 + msgid "its scope is only this definition or declaration, which is probably not what you want." + msgstr "" + + #: c-decl.c:5198 + #, c-format + msgid "redefinition of `%s %s'" + msgstr "omdefinering af '%s %s'" + + #: c-decl.c:5266 c-decl.c:5269 + #, c-format + msgid "%s defined inside parms" + msgstr "" + + #: c-decl.c:5267 c-decl.c:5270 c-decl.c:5281 + msgid "union" + msgstr "" + + #: c-decl.c:5267 c-decl.c:5270 + msgid "structure" + msgstr "" + + #: c-decl.c:5280 + #, fuzzy, c-format + msgid "%s has no %s" + msgstr "%s har intet medlem ved navn '%s'" + + #: c-decl.c:5281 + msgid "struct" + msgstr "" + + #: c-decl.c:5282 + msgid "named members" + msgstr "" + + #: c-decl.c:5282 + msgid "members" + msgstr "" + + #: c-decl.c:5321 + #, c-format + msgid "nested redefinition of `%s'" + msgstr "indlejret omdefinering af '%s'" + + #: c-decl.c:5334 + #, fuzzy, c-format + msgid "bit-field `%s' width not an integer constant" + msgstr "tre 'l'er i heltalskonstant" + + #: c-decl.c:5345 + #, fuzzy, c-format + msgid "bit-field `%s' has invalid type" + msgstr "feltet '%s' er af en ufuldstændig type" + + #: c-decl.c:5357 + #, c-format + msgid "bit-field `%s' type invalid in ISO C" + msgstr "" + + #: c-decl.c:5369 + #, c-format + msgid "negative width in bit-field `%s'" + msgstr "" + + #: c-decl.c:5371 + #, c-format + msgid "width of `%s' exceeds its type" + msgstr "" + + #: c-decl.c:5373 + #, fuzzy, c-format + msgid "zero width for bit-field `%s'" + msgstr "sizeof benyttet på et bitfelt" + + #: c-decl.c:5387 + #, c-format + msgid "`%s' is narrower than values of its type" + msgstr "" + + #: c-decl.c:5432 + msgid "flexible array member in union" + msgstr "" + + #: c-decl.c:5434 + msgid "flexible array member not at end of struct" + msgstr "" + + #: c-decl.c:5436 + msgid "flexible array member in otherwise empty struct" + msgstr "" + + #: c-decl.c:5461 + #, fuzzy, c-format + msgid "duplicate member `%s'" + msgstr "etiketten '%s' optræder mere end én gang" + + #: c-decl.c:5505 + msgid "union cannot be made transparent" + msgstr "" + + #. This enum is a named one that has been declared already. + #: c-decl.c:5586 + #, c-format + msgid "redeclaration of `enum %s'" + msgstr "omerklæring af 'enum %s'" + + #: c-decl.c:5620 + msgid "enum defined inside parms" + msgstr "" + + #: c-decl.c:5653 + msgid "enumeration values exceed range of largest integer" + msgstr "" + + #: c-decl.c:5762 + #, c-format + msgid "enumerator value for `%s' not integer constant" + msgstr "enum-værdien for '%s' er ikke en heltalskonstant" + + #: c-decl.c:5775 + msgid "overflow in enumeration values" + msgstr "for mange enum-værdier" + + #: c-decl.c:5780 + msgid "ISO C restricts enumerator values to range of `int'" + msgstr "" + + #: c-decl.c:5852 + #, fuzzy + msgid "return type is an incomplete type" + msgstr "returneringstypen er en ufuldstændig type" + + #: c-decl.c:5860 + msgid "return type defaults to `int'" + msgstr "" + + #: c-decl.c:5907 + #, fuzzy, c-format + msgid "no previous prototype for `%s'" + msgstr "'%s' er tidligere erklæret" + + #: c-decl.c:5914 + #, c-format + msgid "`%s' was used with no prototype before its definition" + msgstr "" + + #: c-decl.c:5920 + #, fuzzy, c-format + msgid "no previous declaration for `%s'" + msgstr "'%s' er tidligere erklæret" + + #: c-decl.c:5927 + #, fuzzy, c-format + msgid "`%s' was used with no declaration before its definition" + msgstr "friend-erklæringen er ikke i klassedefinitionen" + + #: c-decl.c:5955 c-decl.c:6672 + #, fuzzy, c-format + msgid "return type of `%s' is not `int'" + msgstr "basisoperanden til '->' er ikke en henvisning" + + #: c-decl.c:5971 + #, fuzzy, c-format + msgid "first argument of `%s' should be `int'" + msgstr "Der mangler en parameter til '%s'-tilvalget" + + #: c-decl.c:5980 + #, c-format + msgid "second argument of `%s' should be `char **'" + msgstr "" + + #: c-decl.c:5989 + #, c-format + msgid "third argument of `%s' should probably be `char **'" + msgstr "" + + #: c-decl.c:5998 + #, c-format + msgid "`%s' takes only zero or two arguments" + msgstr "" + + #: c-decl.c:6001 + #, fuzzy, c-format + msgid "`%s' is normally a non-static function" + msgstr "'%s' er underforstået erklæret som en funktion" + + #: c-decl.c:6104 + msgid "parm types given both in parmlist and separately" + msgstr "" + + #: c-decl.c:6125 + #, fuzzy + msgid "parameter name omitted" + msgstr "parameteren er af en ufuldstændig type" + + #: c-decl.c:6129 c-decl.c:6231 c-decl.c:6542 + #, fuzzy, c-format + msgid "parameter `%s' declared void" + msgstr "variabel eller felt '%s' erklæret void" + + #: c-decl.c:6205 + #, fuzzy + msgid "parameter name missing from parameter list" + msgstr "Et katalognavn mangler efter %s" + + #: c-decl.c:6224 c-decl.c:6535 + #, fuzzy, c-format + msgid "multiple parameters named `%s'" + msgstr "ukendt registernavn '%s'" + + #: c-decl.c:6255 c-decl.c:6257 + #, c-format + msgid "type of `%s' defaults to `int'" + msgstr "" + + #: c-decl.c:6293 c-decl.c:6592 + #, c-format + msgid "declaration for parameter `%s' but no such parameter" + msgstr "" + + #: c-decl.c:6341 + msgid "number of arguments doesn't match prototype" + msgstr "antallet af parametre passer ikke til prototypen" + + #: c-decl.c:6371 + #, fuzzy, c-format + msgid "promoted argument `%s' doesn't match prototype" + msgstr "parameter '%s' passer ikke til prototypen" + + #: c-decl.c:6385 + #, c-format + msgid "argument `%s' doesn't match prototype" + msgstr "parameter '%s' passer ikke til prototypen" + + #: c-decl.c:6565 + #, fuzzy, c-format + msgid "type of parameter `%s' is not declared" + msgstr "parameter '%s' bliver tildelt en startværdi" + + #: c-decl.c:6793 + msgid "this function may return with or without a value" + msgstr "" + + #: c-decl.c:6813 + #, fuzzy, c-format + msgid "size of return value of `%s' is %u bytes" + msgstr "størrelsen af tabel '%s' er negativ" + + #: c-decl.c:6817 + #, fuzzy, c-format + msgid "size of return value of `%s' is larger than %d bytes" + msgstr "størrelsen af tabel '%s' er for stor" + + #. If we get here, declarations have been used in a for loop without + #. the C99 for loop scope. This doesn't make much sense, so don't + #. allow it. + #: c-decl.c:6872 + msgid "`for' loop initial declaration used outside C99 mode" + msgstr "" + + #: c-decl.c:6892 + #, fuzzy, c-format + msgid "`%s %s' declared in `for' loop initial declaration" + msgstr "'%s' ikke erklæret her (ikke i en funktion)" + + #: c-decl.c:6901 + #, c-format + msgid "declaration of non-variable `%s' in `for' loop initial declaration" + msgstr "" + + #: c-decl.c:6903 + #, fuzzy, c-format + msgid "declaration of static variable `%s' in `for' loop initial declaration" + msgstr "Instansvariablen '%s' er underforstået erklæret som en funktion" + + #: c-decl.c:6905 + #, c-format + msgid "declaration of `extern' variable `%s' in `for' loop initial declaration" + msgstr "" + + #: c-dump.c:826 + #, fuzzy, c-format + msgid "could not open dump file `%s'" + msgstr "Kunne ikke åbne uddatafilen %s.\n" + + #: c-dump.c:871 + #, fuzzy, c-format + msgid "ignoring `%s' at end of `-f%s'" + msgstr "ragelse i slutningen af #%s" + + #: c-format.c:106 c-format.c:219 + #, fuzzy, c-format + msgid "argument format specified for non-function `%s'" + msgstr "for få parametre til funktionen '%s'" + + #: c-format.c:112 + msgid "unrecognized format specifier" + msgstr "ukendt formatanvisning" + + #: c-format.c:123 + #, fuzzy, c-format + msgid "`%s' is an unrecognized format function type" + msgstr "ukendt formatanvisning" + + #: c-format.c:145 c-format.c:233 + msgid "format string has invalid operand number" + msgstr "formatstrengen har et ugyldigt operandtal" + + #: c-format.c:153 + msgid "format string arg follows the args to be formatted" + msgstr "formatstrengsparameter efterfølger parametrene der skal formateres" + + #: c-format.c:172 c-format.c:254 + msgid "format string arg not a string type" + msgstr "formatstrengsparameter er ikke af en strengtype" + + #: c-format.c:185 + msgid "args to be formatted is not '...'" + msgstr "parametrene der skal formateres, er ikke '...'" + + #: c-format.c:193 + msgid "strftime formats cannot format arguments" + msgstr "" + + #: c-format.c:263 + msgid "function does not return string type" + msgstr "funktionen returnerer ikke en strengtype" + + #: c-format.c:757 + msgid "` ' flag" + msgstr "" + + #: c-format.c:757 + msgid "the ` ' printf flag" + msgstr "" + + #: c-format.c:758 c-format.c:829 + msgid "`+' flag" + msgstr "" + + #: c-format.c:758 + msgid "the `+' printf flag" + msgstr "" + + #: c-format.c:759 c-format.c:805 + msgid "`#' flag" + msgstr "" + + #: c-format.c:759 + msgid "the `#' printf flag" + msgstr "" + + #: c-format.c:760 c-format.c:803 + msgid "`0' flag" + msgstr "" + + #: c-format.c:760 + msgid "the `0' printf flag" + msgstr "" + + #: c-format.c:761 c-format.c:802 c-format.c:832 + msgid "`-' flag" + msgstr "" + + #: c-format.c:761 + msgid "the `-' printf flag" + msgstr "" + + #: c-format.c:762 c-format.c:786 + msgid "`'' flag" + msgstr "" + + #: c-format.c:762 + msgid "the `'' printf flag" + msgstr "" + + #: c-format.c:763 c-format.c:787 + msgid "`I' flag" + msgstr "" + + #: c-format.c:763 + msgid "the `I' printf flag" + msgstr "" + + #: c-format.c:764 c-format.c:784 c-format.c:806 c-format.c:833 c-format.c:1846 + msgid "field width" + msgstr "" + + #: c-format.c:764 + msgid "field width in printf format" + msgstr "" + + #: c-format.c:765 + msgid "precision" + msgstr "" + + #: c-format.c:765 + msgid "precision in printf format" + msgstr "" + + #: c-format.c:766 c-format.c:785 c-format.c:836 + msgid "length modifier" + msgstr "" + + #: c-format.c:766 + msgid "length modifier in printf format" + msgstr "" + + #: c-format.c:782 + #, fuzzy + msgid "assignment suppression" + msgstr "tildeling" + + #: c-format.c:783 + msgid "`a' flag" + msgstr "" + + #: c-format.c:783 + msgid "the `a' scanf flag" + msgstr "" + + #: c-format.c:784 + msgid "field width in scanf format" + msgstr "" + + #: c-format.c:785 + msgid "length modifier in scanf format" + msgstr "" + + #: c-format.c:786 + msgid "the `'' scanf flag" + msgstr "" + + #: c-format.c:787 + msgid "the `I' scanf flag" + msgstr "" + + #: c-format.c:801 + msgid "`_' flag" + msgstr "" + + #: c-format.c:801 + msgid "the `_' strftime flag" + msgstr "" + + #: c-format.c:802 + msgid "the `-' strftime flag" + msgstr "" + + #: c-format.c:803 + msgid "the `0' strftime flag" + msgstr "" + + #: c-format.c:804 c-format.c:828 + msgid "`^' flag" + msgstr "" + + #: c-format.c:804 + msgid "the `^' strftime flag" + msgstr "" + + #: c-format.c:805 + msgid "the `#' strftime flag" + msgstr "" + + #: c-format.c:806 + msgid "field width in strftime format" + msgstr "" + + #: c-format.c:807 + #, fuzzy + msgid "`E' modifier" + msgstr "'$' i kaldenavn" + + #: c-format.c:807 + msgid "the `E' strftime modifier" + msgstr "" + + #: c-format.c:808 + #, fuzzy + msgid "`O' modifier" + msgstr "'$' i kaldenavn" + + #: c-format.c:808 + msgid "the `O' strftime modifier" + msgstr "" + + #: c-format.c:809 + msgid "the `O' modifier" + msgstr "" + + #: c-format.c:827 + #, fuzzy + msgid "fill character" + msgstr "%s ved nultegn" + + #: c-format.c:827 + #, fuzzy + msgid "fill character in strfmon format" + msgstr "nultegn i streng- eller tegnkonstant" + + #: c-format.c:828 + msgid "the `^' strfmon flag" + msgstr "" + + #: c-format.c:829 + msgid "the `+' strfmon flag" + msgstr "" + + #: c-format.c:830 + msgid "`(' flag" + msgstr "" + + #: c-format.c:830 + msgid "the `(' strfmon flag" + msgstr "" + + #: c-format.c:831 + msgid "`!' flag" + msgstr "" + + #: c-format.c:831 + msgid "the `!' strfmon flag" + msgstr "" + + #: c-format.c:832 + msgid "the `-' strfmon flag" + msgstr "" + + #: c-format.c:833 + msgid "field width in strfmon format" + msgstr "" + + #: c-format.c:834 + msgid "left precision" + msgstr "" + + #: c-format.c:834 + msgid "left precision in strfmon format" + msgstr "" + + #: c-format.c:835 + msgid "right precision" + msgstr "" + + #: c-format.c:835 + msgid "right precision in strfmon format" + msgstr "" + + #: c-format.c:836 + msgid "length modifier in strfmon format" + msgstr "" + + #: c-format.c:1135 + #, c-format + msgid "function might be possible candidate for `%s' format attribute" + msgstr "" + + #: c-format.c:1248 c-format.c:1269 c-format.c:2256 + #, fuzzy + msgid "missing $ operand number in format" + msgstr "ugyldigt versionsnummerformat" + + #: c-format.c:1279 + #, c-format + msgid "%s does not support %%n$ operand number formats" + msgstr "" + + #: c-format.c:1286 + #, fuzzy + msgid "operand number out of range in format" + msgstr "operandtal er uden for det gyldige interval" + + #: c-format.c:1307 + #, c-format + msgid "format argument %d used more than once in %s format" + msgstr "" + + #: c-format.c:1349 + #, c-format + msgid "format argument %d unused before used argument %d in $-style format" + msgstr "" + + #: c-format.c:1443 + #, fuzzy + msgid "format not a string literal, format string not checked" + msgstr "formatstrengsparameter er ikke af en strengtype" + + #: c-format.c:1457 + msgid "format not a string literal and no format arguments" + msgstr "" + + #: c-format.c:1459 + msgid "format not a string literal, argument types not checked" + msgstr "" + + #: c-format.c:1472 + #, fuzzy + msgid "too many arguments for format" + msgstr "for mange parametre til funktionen" + + #: c-format.c:1475 + msgid "unused arguments in $-style format" + msgstr "" + + #: c-format.c:1478 + msgid "zero-length format string" + msgstr "" + + #: c-format.c:1481 + #, fuzzy + msgid "format is a wide character string" + msgstr "forkert formateret tegnkonstant" + + #: c-format.c:1484 + #, fuzzy + msgid "unterminated format string" + msgstr "uafsluttet tegnkonstant" + + #. FIXME: this warning should go away once Marc Espie's + #. __attribute__((nonnull)) patch is in. Instead, checking for + #. nonnull attributes should probably change this function to act + #. specially if info == NULL and add a res->number_null entry for + #. that case, or maybe add a function pointer to be called at + #. the end instead of hardcoding check_format_info_main. + #: c-format.c:1572 + #, fuzzy + msgid "null format string" + msgstr "ugyldigt #line-format" + + #: c-format.c:1725 + msgid "embedded `\\0' in format" + msgstr "" + + #: c-format.c:1740 + #, c-format + msgid "spurious trailing `%%' in format" + msgstr "" + + #: c-format.c:1779 c-format.c:2016 + #, c-format + msgid "repeated %s in format" + msgstr "" + + #: c-format.c:1792 + msgid "missing fill character at end of strfmon format" + msgstr "" + + #: c-format.c:1812 c-format.c:1930 c-format.c:2210 c-format.c:2263 + #, fuzzy + msgid "too few arguments for format" + msgstr "for få parametre til funktionen" + + #: c-format.c:1872 + #, c-format + msgid "zero width in %s format" + msgstr "" + + #: c-format.c:1891 + #, c-format + msgid "empty left precision in %s format" + msgstr "" + + #: c-format.c:1945 + msgid "field precision" + msgstr "" + + #: c-format.c:1960 + #, c-format + msgid "empty precision in %s format" + msgstr "" + + #: c-format.c:2000 + #, c-format + msgid "%s does not support the `%s' %s length modifier" + msgstr "" + + #: c-format.c:2050 + msgid "conversion lacks type at end of format" + msgstr "" + + #: c-format.c:2061 + #, c-format + msgid "unknown conversion type character `%c' in format" + msgstr "" + + #: c-format.c:2064 + #, c-format + msgid "unknown conversion type character 0x%x in format" + msgstr "" + + #: c-format.c:2071 + #, fuzzy, c-format + msgid "%s does not support the `%%%c' %s format" + msgstr "%s understøttes ikke af denne konfiguration" + + #: c-format.c:2087 + #, c-format + msgid "%s used with `%%%c' %s format" + msgstr "" + + #: c-format.c:2096 + #, fuzzy, c-format + msgid "%s does not support %s" + msgstr "-mabi=%s understøtter ikke -mips%d" + + #: c-format.c:2105 + #, fuzzy, c-format + msgid "%s does not support %s with the `%%%c' %s format" + msgstr "GNU C understøtter ikke -C uden -E" + + #: c-format.c:2138 + #, c-format + msgid "%s ignored with %s and `%%%c' %s format" + msgstr "" + + #: c-format.c:2142 + #, c-format + msgid "%s ignored with %s in %s format" + msgstr "" + + #: c-format.c:2148 + #, c-format + msgid "use of %s and %s together with `%%%c' %s format" + msgstr "" + + #: c-format.c:2152 + #, c-format + msgid "use of %s and %s together in %s format" + msgstr "" + + #: c-format.c:2171 + #, c-format + msgid "`%%%c' yields only last 2 digits of year in some locales" + msgstr "" + + #: c-format.c:2174 + #, c-format + msgid "`%%%c' yields only last 2 digits of year" + msgstr "" + + #. The end of the format string was reached. + #: c-format.c:2190 + #, c-format + msgid "no closing `]' for `%%[' format" + msgstr "" + + #: c-format.c:2203 + #, c-format + msgid "use of `%s' length modifier with `%c' type character" + msgstr "" + + #: c-format.c:2224 + #, fuzzy, c-format + msgid "%s does not support the `%%%s%c' %s format" + msgstr "%s understøttes ikke af denne konfiguration" + + #: c-format.c:2239 + msgid "operand number specified with suppressed assignment" + msgstr "" + + #: c-format.c:2241 + msgid "operand number specified for format taking no argument" + msgstr "" + + #: c-format.c:2360 + #, c-format + msgid "writing through null pointer (arg %d)" + msgstr "" + + #: c-format.c:2369 + #, c-format + msgid "reading through null pointer (arg %d)" + msgstr "" + + #: c-format.c:2389 + #, c-format + msgid "writing into constant object (arg %d)" + msgstr "" + + #: c-format.c:2399 + #, c-format + msgid "extra type qualifiers in format argument (arg %d)" + msgstr "" + + #: c-format.c:2406 + #, fuzzy, c-format + msgid "format argument is not a pointer (arg %d)" + msgstr "angivet justering er ikke en potens af 2" + + #: c-format.c:2408 + #, c-format + msgid "format argument is not a pointer to a pointer (arg %d)" + msgstr "" + + #: c-format.c:2502 + #, c-format + msgid "%s is not type %s (arg %d)" + msgstr "" + + #: c-format.c:2505 + #, c-format + msgid "%s format, %s arg (arg %d)" + msgstr "" + + #: c-lex.c:279 + msgid "badly nested C headers from preprocessor" + msgstr "" + + #: c-lex.c:297 + msgid "leaving more files than we entered" + msgstr "" + + #: c-lex.c:329 + #, c-format + msgid "ignoring #pragma %s %s" + msgstr "" + + #: c-lex.c:331 + #, fuzzy, c-format + msgid "ignoring #pragma %s" + msgstr "ugyldig #pragma-enhed" + + #: c-lex.c:381 + #, fuzzy + msgid "incomplete universal-character-name" + msgstr "ugyldigt universelt tegnnavn" + + #: c-lex.c:388 + #, c-format + msgid "non hex digit '%c' in universal-character-name" + msgstr "der optræder '%c' der ikke er et hexadecimalt ciffer, i universelt tegnnavn" + + #: c-lex.c:403 + #, fuzzy + msgid "universal-character-name on EBCDIC target" + msgstr "ugyldigt universelt tegnnavn" + + #: c-lex.c:416 + #, fuzzy, c-format + msgid "universal-character-name used for '%c'" + msgstr "ugyldigt universelt tegnnavn" + + #: c-lex.c:419 + msgid "invalid universal-character-name" + msgstr "ugyldigt universelt tegnnavn" + + #: c-lex.c:453 f/lex.c:601 + msgid "the meaning of `\\x' varies with -traditional" + msgstr "" + + #: c-lex.c:489 cppexp.c:579 f/lex.c:636 + msgid "\\x used with no following hex digits" + msgstr "\\x angivet uden efterfølgende hexadecimale cifre" + + #: c-lex.c:502 f/lex.c:646 + #, fuzzy + msgid "hex escape out of range" + msgstr "den hexadecimale undvigesekvens er uden for det gyldige interval" + + #: c-lex.c:540 + msgid "the meaning of '\\a' varies with -traditional" + msgstr "" + + #: c-lex.c:550 + #, c-format + msgid "the meaning of '\\%c' varies with -traditional" + msgstr "" + + #: c-lex.c:556 cppexp.c:527 + #, fuzzy, c-format + msgid "non-ISO-standard escape sequence, '\\%c'" + msgstr "undvigesekvensen '\\%c' følger ikke ISO-standarden" + + #: c-lex.c:563 c-lex.c:569 + #, fuzzy, c-format + msgid "unknown escape sequence '\\%c'" + msgstr "undvigesekvensen '\\%c' følger ikke ISO-standarden" + + #: c-lex.c:571 + #, c-format + msgid "unknown escape sequence: '\\' followed by char 0x%x" + msgstr "" + + #: c-lex.c:601 + #, fuzzy, c-format + msgid "universal-character-name '\\U%08x' not valid in identifier" + msgstr "universelt tegn '\\U%08x' er ikke tilladt i kaldenavne" + + #: c-lex.c:847 + #, fuzzy, c-format + msgid "universal-character-name '\\u%04x' not valid in identifier" + msgstr "universelt tegn '\\u%04x' er ikke tilladt i kaldenavne" + + #: c-lex.c:937 + #, fuzzy + msgid "both 'f' and 'l' suffixes on floating constant" + msgstr "både 'f' og 'l' i kommatalskonstant" + + #: c-lex.c:964 + #, fuzzy, c-format + msgid "floating point number exceeds range of '%s'" + msgstr "kommatal er ikke tilladt i '#if'-udtryk" + + #: c-lex.c:994 + #, fuzzy, c-format + msgid "stray '%c' in program" + msgstr "vildfaren '\\' i program" + + #: c-lex.c:996 + #, fuzzy, c-format + msgid "stray '\\%o' in program" + msgstr "vildfaren '\\' i program" + + #: c-lex.c:1193 + #, fuzzy + msgid "floating constant may not be in radix 16" + msgstr "kommatalskonstant uden for det mulige interval" + + #: c-lex.c:1230 + msgid "traditional C rejects the 'f' suffix" + msgstr "" + + #: c-lex.c:1239 + msgid "traditional C rejects the 'l' suffix" + msgstr "" + + #: c-lex.c:1249 c-lex.c:1342 + msgid "ISO C forbids imaginary numeric constants" + msgstr "" + + #: c-lex.c:1283 + msgid "floating point number exceeds range of 'double'" + msgstr "" + + #: c-lex.c:1312 + #, fuzzy + msgid "two 'u' suffixes on integer constant" + msgstr "for mange 'u'-suffikser i heltalskonstant" + + #: c-lex.c:1314 + msgid "traditional C rejects the 'u' suffix" + msgstr "" + + #: c-lex.c:1325 + #, fuzzy + msgid "three 'l' suffixes on integer constant" + msgstr "for mange 'l'-suffikser i heltalskonstant" + + #: c-lex.c:1327 + msgid "'lul' is not a valid integer suffix" + msgstr "" + + #: c-lex.c:1329 + msgid "'Ll' and 'lL' are not valid integer suffixes" + msgstr "" + + #: c-lex.c:1332 + #, fuzzy + msgid "ISO C89 forbids long long integer constants" + msgstr "tre 'l'er i heltalskonstant" + + #: c-lex.c:1340 + #, fuzzy + msgid "more than one 'i' or 'j' suffix on integer constant" + msgstr "mere end ét 'i' eller 'j' i talkonstant" + + #: c-lex.c:1355 + #, c-format + msgid "integer constant is too large for this configuration of the compiler - truncated to %d bits" + msgstr "" + + #: c-lex.c:1445 + #, fuzzy + msgid "width of integer constant changes with -traditional" + msgstr "heltalskonstanten indeholder cifre der er større end grundtallet" + + #: c-lex.c:1447 + #, fuzzy + msgid "integer constant is unsigned in ISO C, signed with -traditional" + msgstr "heltalskonstanten indeholder cifre der er større end grundtallet" + + #: c-lex.c:1449 + msgid "width of integer constant may change on other systems with -traditional" + msgstr "" + + #: c-lex.c:1459 + #, fuzzy, c-format + msgid "integer constant larger than the maximum value of %s" + msgstr "heltalskonstanten er så stor at den er unsigned" + + #: c-lex.c:1468 + #, fuzzy + msgid "decimal constant is so large that it is unsigned" + msgstr "heltalskonstanten er så stor at den er unsigned" + + #: c-lex.c:1497 + #, fuzzy + msgid "integer constant is larger than the maximum value for its type" + msgstr "heltalskonstanten er så stor at den er unsigned" + + #: c-lex.c:1501 + #, fuzzy, c-format + msgid "missing white space after number '%.*s'" + msgstr "manglende mellemrum efter tallet '%s'" + + #: c-lex.c:1537 c-lex.c:1641 + msgid "Ignoring invalid multibyte character" + msgstr "" + + #: c-lex.c:1555 c-lex.c:1660 cppexp.c:275 + msgid "escape sequence out of range for character" + msgstr "undvigesekvensen er uden for det gyldig interval for tegn" + + #: c-lex.c:1679 + msgid "empty character constant" + msgstr "tom tegnkonstant" + + #: c-lex.c:1683 + msgid "character constant too long" + msgstr "tegnkonstanten er for lang" + + #: c-lex.c:1686 cppexp.c:293 + msgid "multi-character character constant" + msgstr "tegnkonstanten fylder mere end én char" + + #. Like YYERROR but do call yyerror. + #: c-parse.y:61 cp/parse.y:55 objc/objc-parse.y:62 + msgid "syntax error" + msgstr "syntaksfejl" + + #: c-parse.y:247 objc/objc-parse.y:275 + #, fuzzy + msgid "ISO C forbids an empty source file" + msgstr "ISO C++ forbyder en tom betingelse til '%s'" + + #: c-parse.y:279 c-parse.y:1824 objc/objc-parse.y:308 objc/objc-parse.y:1888 + msgid "argument of `asm' is not a constant string" + msgstr "parameteren til 'asm' er ikke en konstant streng" + + #: c-parse.y:287 objc/objc-parse.y:316 + #, fuzzy + msgid "ISO C forbids data definition with no type or storage class" + msgstr "ISO C forbyder definition af data uden angivelse af type eller lagringsklasse" + + #: c-parse.y:289 objc/objc-parse.y:318 + #, fuzzy + msgid "data definition has no type or storage class" + msgstr "ISO C forbyder definition af data uden angivelse af type eller lagringsklasse" + + #: c-parse.y:310 objc/objc-parse.y:339 + msgid "ISO C does not allow extra `;' outside of a function" + msgstr "" + + #: c-parse.y:382 cppexp.c:900 + msgid "traditional C rejects the unary plus operator" + msgstr "" + + #: c-parse.y:426 objc/objc-parse.y:455 + #, fuzzy + msgid "ISO C forbids `&&'" + msgstr "ISO C forbyder tekst efter #%s" + + #: c-parse.y:455 objc/objc-parse.y:484 + msgid "`sizeof' applied to a bit-field" + msgstr "'sizeof' benyttet på et bitfelt" + + #: c-parse.y:543 objc/objc-parse.y:572 + msgid "ISO C forbids omitting the middle term of a ?: expression" + msgstr "" + + #: c-parse.y:591 objc/objc-parse.y:620 + #, fuzzy + msgid "ISO C89 forbids compound literals" + msgstr "ISO C forbyder tekst efter #%s" + + #: c-parse.y:621 objc/objc-parse.y:650 + msgid "ISO C forbids braced-groups within expressions" + msgstr "" + + #: c-parse.y:674 + msgid "traditional C rejects string concatenation" + msgstr "" + + #: c-parse.y:689 objc/objc-parse.y:741 + #, fuzzy + msgid "ISO C does not permit use of `varargs.h'" + msgstr "ISO C tillader ikke navngivne variabel parameterliste-makroer" + + #: c-parse.y:797 c-parse.y:818 c-parse.y:850 cp/parse.y:1861 cp/parse.y:1868 + #: cp/parse.y:1907 objc/objc-parse.y:849 objc/objc-parse.y:870 + #: objc/objc-parse.y:902 + #, fuzzy, c-format + msgid "`%s' is not at beginning of declaration" + msgstr "'%s' er ikke en løkkevariabel" + + #: c-parse.y:1014 objc/objc-parse.y:1075 + #, fuzzy + msgid "ISO C forbids empty initializer braces" + msgstr "ISO C forbyder tekst efter #%s" + + #: c-parse.y:1028 objc/objc-parse.y:1089 + msgid "ISO C89 forbids specifying subobject to initialize" + msgstr "" + + #: c-parse.y:1031 objc/objc-parse.y:1092 + msgid "obsolete use of designated initializer without `='" + msgstr "" + + #: c-parse.y:1035 objc/objc-parse.y:1096 + msgid "obsolete use of designated initializer with `:'" + msgstr "" + + #: c-parse.y:1064 + msgid "ISO C forbids specifying range of elements to initialize" + msgstr "" + + #: c-parse.y:1072 c-parse.y:1102 objc/objc-parse.y:1127 objc/objc-parse.y:1157 + #, fuzzy + msgid "ISO C forbids nested functions" + msgstr "ISO C forbyder tekst efter #%s" + + #: c-parse.y:1177 c-parse.y:1211 + msgid "`[*]' in parameter declaration only allowed in ISO C 99" + msgstr "'[*]' i parametererklæring kun tilladt i ISO C 99" + + #: c-parse.y:1286 objc/objc-parse.y:1332 + msgid "ISO C forbids forward references to `enum' types" + msgstr "" + + #: c-parse.y:1298 cp/parse.y:2326 objc/objc-parse.y:1344 + msgid "comma at end of enumerator list" + msgstr "" + + #: c-parse.y:1306 objc/objc-parse.y:1352 + msgid "no semicolon at end of struct or union" + msgstr "" + + #: c-parse.y:1315 objc/objc-parse.y:1361 objc/objc-parse.y:2359 + msgid "extra semicolon in struct or union specified" + msgstr "" + + #: c-parse.y:1339 objc/objc-parse.y:1399 + #, fuzzy + msgid "ISO C doesn't support unnamed structs/unions" + msgstr "ISO C tillader ikke navngivne variabel parameterliste-makroer" + + #: c-parse.y:1353 objc/objc-parse.y:1413 + msgid "ISO C forbids member declarations with no members" + msgstr "" + + #: c-parse.y:1472 objc/objc-parse.y:1532 + msgid "deprecated use of label at end of compound statement" + msgstr "" + + #: c-parse.y:1489 objc/objc-parse.y:1549 + msgid "ISO C89 forbids mixed declarations and code" + msgstr "" + + #: c-parse.y:1563 objc/objc-parse.y:1627 + #, fuzzy + msgid "ISO C forbids label declarations" + msgstr "ISO C forbyder tekst efter #%s" + + #: c-parse.y:1612 cp/parse.y:1562 objc/objc-parse.y:1676 + msgid "braced-group within expression allowed only inside a function" + msgstr "sætningsblokke i udtryk er kun tilladt inde i en funktion" + + #: c-parse.y:1727 objc/objc-parse.y:1791 + msgid "empty body in an else-statement" + msgstr "" + + #: c-parse.y:1856 objc/objc-parse.y:1920 + #, fuzzy + msgid "ISO C forbids `goto *expr;'" + msgstr "ISO C forbyder tekst efter #%s" + + #: c-parse.y:1948 objc/objc-parse.y:2012 + #, fuzzy + msgid "ISO C forbids forward parameter declarations" + msgstr "lagringsklasseanvisninger er ugyldige i parametererklæringer" + + #. Gcc used to allow this as an extension. However, it does + #. not work for all targets, and thus has been disabled. + #. Also, since func (...) and func () are indistinguishable, + #. it caused problems with the code in expand_builtin which + #. tries to verify that BUILT_IN_NEXT_ARG is being used + #. correctly. + #: c-parse.y:1971 objc/objc-parse.y:2035 + #, fuzzy + msgid "ISO C requires a named argument before `...'" + msgstr "ISO C påkræver en navngiven parameter før '...'" + + #: c-parse.y:2051 objc/objc-parse.y:2115 + msgid "`...' in old-style identifier list" + msgstr "'...' i gammeldags liste af kaldenavne" + + #: c-parse.y:2377 cp/spew.c:1480 objc/objc-parse.y:3109 + #, c-format + msgid "%s at end of input" + msgstr "%s ved slutning af inddata" + + #: c-parse.y:2383 cp/spew.c:1486 objc/objc-parse.y:3115 + #, fuzzy, c-format + msgid "%s before %s'%c'" + msgstr "%s før '%s'" + + #: c-parse.y:2385 cp/spew.c:1488 objc/objc-parse.y:3117 + #, fuzzy, c-format + msgid "%s before %s'\\x%x'" + msgstr "%s før '%s'" + + #: c-parse.y:2389 cp/spew.c:1492 objc/objc-parse.y:3121 + #, c-format + msgid "%s before string constant" + msgstr "%s før strengkonstant" + + #: c-parse.y:2393 cp/spew.c:1496 objc/objc-parse.y:3125 + #, fuzzy, c-format + msgid "%s before numeric constant" + msgstr "%s før strengkonstant" + + #: c-parse.y:2395 objc/objc-parse.y:3127 + #, fuzzy, c-format + msgid "%s before \"%s\"" + msgstr "%s før '%s'" + + #: c-parse.y:2397 objc/objc-parse.y:3129 + #, fuzzy, c-format + msgid "%s before '%s' token" + msgstr "%s før '%s'" + + #: c-parse.y:2543 objc/objc-parse.y:3292 + #, fuzzy, c-format + msgid "syntax error at '%s' token" + msgstr "syntaksfejl" + + #: c-parse.y:2573 cp/lex.c:928 objc/objc-parse.y:3322 + msgid "YYDEBUG not defined." + msgstr "" + + #: c-pragma.c:108 + msgid "#pragma pack (pop) encountered without matching #pragma pack (push, )" + msgstr "" + + #: c-pragma.c:126 + #, c-format + msgid "#pragma pack(pop, %s) encountered without matching #pragma pack(push, %s, )" + msgstr "" + + #: c-pragma.c:249 + #, fuzzy + msgid "junk at end of '#pragma pack'" + msgstr "ragelse i slutningen af #%s" + + #: c-pragma.c:298 + #, fuzzy + msgid "junk at end of #pragma weak" + msgstr "ragelse i slutningen af #%s" + + #: c-semantics.c:607 + msgid "break statement not within loop or switch" + msgstr "break-sætning befinder sig ikke i en løkke- eller switch-konstruktion" + + #: c-semantics.c:625 + msgid "continue statement not within a loop" + msgstr "continue-sætning befinder sig ikke i en løkke" + + #: c-semantics.c:720 + msgid "destructor needed for `%#D'" + msgstr "" + + #: c-semantics.c:721 + msgid "where case label appears here" + msgstr "" + + #: c-semantics.c:724 + msgid "(enclose actions of previous case statements requiring destructors in their own scope.)" + msgstr "" + + #: c-semantics.c:757 c-typeck.c:6800 + #, c-format + msgid "%s qualifier ignored on asm" + msgstr "" + + #: c-typeck.c:122 + #, c-format + msgid "`%s' has an incomplete type" + msgstr "'%s' er af en ufuldstændig type" + + #: c-typeck.c:144 cp/call.c:2553 + msgid "invalid use of void expression" + msgstr "ugyldig brug af void-udtryk" + + #: c-typeck.c:153 + msgid "invalid use of array with unspecified bounds" + msgstr "ugyldig brug af tabel med uangivne rammer" + + #: c-typeck.c:161 + #, c-format + msgid "invalid use of undefined type `%s %s'" + msgstr "ugyldig brug af en type '%s %s' der ikke er defineret" + + #. If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. + #: c-typeck.c:165 + #, c-format + msgid "invalid use of incomplete typedef `%s'" + msgstr "ugyldig brug af ufuldstændig typedef '%s'" + + #: c-typeck.c:396 c-typeck.c:410 + msgid "function types not truly compatible in ISO C" + msgstr "" + + #: c-typeck.c:561 + msgid "types are not quite compatible" + msgstr "" + + #: c-typeck.c:714 + #, fuzzy + msgid "sizeof applied to a function type" + msgstr "sizeof benyttet på en ufuldstændig type" + + #: c-typeck.c:720 + #, fuzzy + msgid "sizeof applied to a void type" + msgstr "sizeof benyttet på en ufuldstændig type" + + #: c-typeck.c:727 + msgid "sizeof applied to an incomplete type" + msgstr "sizeof benyttet på en ufuldstændig type" + + #: c-typeck.c:780 c-typeck.c:2793 + msgid "arithmetic on pointer to an incomplete type" + msgstr "beregninger udført på en henvisning til en ufuldstændig type" + + #: c-typeck.c:808 + msgid "__alignof__ applied to an incomplete type" + msgstr "__alignof__ benyttet på en ufuldstændig type" + + #: c-typeck.c:834 + msgid "`__alignof' applied to a bit-field" + msgstr "'__alignof' benyttet på et bitfelt" + + #: c-typeck.c:1025 cp/typeck.c:1792 + msgid "invalid use of non-lvalue array" + msgstr "ugyldig brug af en tabel der ikke kan optræde som en venstreværdi" + + #: c-typeck.c:1200 + #, c-format + msgid "%s has no member named `%s'" + msgstr "%s har intet medlem ved navn '%s'" + + #: c-typeck.c:1231 + #, c-format + msgid "request for member `%s' in something not a structure or union" + msgstr "forespørgsel efter medlemmet '%s' i noget der hverken er en union eller en struktur" + + #: c-typeck.c:1264 + msgid "dereferencing pointer to incomplete type" + msgstr "forsøg på at følge en henvisning til en variabel af en ufuldstændig type" + + #: c-typeck.c:1268 + #, fuzzy + msgid "dereferencing `void *' pointer" + msgstr "forsøg på at følge en henvisning til en variabel af en ufuldstændig type" + + #: c-typeck.c:1285 cp/typeck.c:2402 + #, c-format + msgid "invalid type argument of `%s'" + msgstr "ugyldig typeparameter '%s'" + + #: c-typeck.c:1304 cp/typeck.c:2428 + msgid "subscript missing in array reference" + msgstr "indeks mangler i tabelopslag" + + #: c-typeck.c:1325 cp/typeck.c:2470 + #, fuzzy + msgid "array subscript has type `char'" + msgstr "tabelindeks er ikke et heltal" + + #: c-typeck.c:1333 c-typeck.c:1422 cp/typeck.c:2477 cp/typeck.c:2556 + msgid "array subscript is not an integer" + msgstr "tabelindeks er ikke et heltal" + + #: c-typeck.c:1366 + #, fuzzy + msgid "ISO C forbids subscripting `register' array" + msgstr "ISO C++ forbyder omtvingelse af typen til en tabeltype" + + #: c-typeck.c:1368 + #, fuzzy + msgid "ISO C89 forbids subscripting non-lvalue array" + msgstr "ISO C++ forbyder omtvingelse af typen til en tabeltype" + + #: c-typeck.c:1401 + msgid "subscript has type `char'" + msgstr "" + + #: c-typeck.c:1417 cp/typeck.c:2551 + msgid "subscripted value is neither array nor pointer" + msgstr "værdien der er påført et indeks, er hverken en tabel eller en henvisningsvariabel" + + #: c-typeck.c:1468 + #, c-format + msgid "`%s' undeclared here (not in a function)" + msgstr "'%s' ikke erklæret her (ikke i en funktion)" + + #: c-typeck.c:1475 + #, c-format + msgid "`%s' undeclared (first use in this function)" + msgstr "'%s' er ikke erklæret (først benyttet i denne funktion)" + + #: c-typeck.c:1480 + msgid "(Each undeclared identifier is reported only once" + msgstr "(et kaldenavn der ikke er erklæret, rapporteres kun én gang" + + #: c-typeck.c:1481 + msgid "for each function it appears in.)" + msgstr "per funktion)" + + #: c-typeck.c:1498 + #, fuzzy, c-format + msgid "local declaration of `%s' hides instance variable" + msgstr "%s: den lokale erklæring af funktionen '%s' er ikke indsat\n" + + #: c-typeck.c:1563 + msgid "called object is not a function" + msgstr "det kaldte objekt er ikke en funktion" + + #: c-typeck.c:1647 cp/typeck.c:3189 + msgid "too many arguments to function" + msgstr "for mange parametre til funktionen" + + #: c-typeck.c:1670 + #, c-format + msgid "type of formal parameter %d is incomplete" + msgstr "typen af den formelle parameter %d er ufuldstændig" + + #: c-typeck.c:1683 + #, c-format + msgid "%s as integer rather than floating due to prototype" + msgstr "%s som heltal i stedet for kommatal på grund af prototypen" + + #: c-typeck.c:1686 + #, fuzzy, c-format + msgid "%s as integer rather than complex due to prototype" + msgstr "%s som kommatal i stedet for complex på grund af prototypen" + + #: c-typeck.c:1689 + #, c-format + msgid "%s as complex rather than floating due to prototype" + msgstr "%s som complex i stedet for kommatal på grund af prototypen" + + #: c-typeck.c:1692 + #, c-format + msgid "%s as floating rather than integer due to prototype" + msgstr "%s som kommatal i stedet for heltal på grund af prototypen" + + #: c-typeck.c:1695 + #, fuzzy, c-format + msgid "%s as complex rather than integer due to prototype" + msgstr "%s som complex i stedet for kommatal på grund af prototypen" + + #: c-typeck.c:1698 + #, c-format + msgid "%s as floating rather than complex due to prototype" + msgstr "%s som kommatal i stedet for complex på grund af prototypen" + + #: c-typeck.c:1708 + #, c-format + msgid "%s as `float' rather than `double' due to prototype" + msgstr "%s som float i stedet for double på grund af prototypen" + + #: c-typeck.c:1725 + #, c-format + msgid "%s with different width due to prototype" + msgstr "%s med anderledes bredde på grund af prototypen" + + #: c-typeck.c:1759 + #, c-format + msgid "%s as unsigned due to prototype" + msgstr "%s som unsigned på grund af prototypen" + + #: c-typeck.c:1761 + #, c-format + msgid "%s as signed due to prototype" + msgstr "%s som signed på grund af prototypen" + + #: c-typeck.c:1795 cp/typeck.c:3290 + msgid "too few arguments to function" + msgstr "for få parametre til funktionen" + + #: c-typeck.c:1836 + msgid "suggest parentheses around + or - inside shift" + msgstr "" + + #: c-typeck.c:1843 + msgid "suggest parentheses around && within ||" + msgstr "" + + #: c-typeck.c:1852 + msgid "suggest parentheses around arithmetic in operand of |" + msgstr "" + + #: c-typeck.c:1855 + msgid "suggest parentheses around comparison in operand of |" + msgstr "" + + #: c-typeck.c:1864 + msgid "suggest parentheses around arithmetic in operand of ^" + msgstr "" + + #: c-typeck.c:1867 + msgid "suggest parentheses around comparison in operand of ^" + msgstr "" + + #: c-typeck.c:1874 + msgid "suggest parentheses around + or - in operand of &" + msgstr "" + + #: c-typeck.c:1877 + msgid "suggest parentheses around comparison in operand of &" + msgstr "" + + #: c-typeck.c:1884 + msgid "comparisons like X<=Y<=Z do not have their mathematical meaning" + msgstr "" + + #: c-typeck.c:2138 cp/typeck.c:3569 + msgid "right shift count is negative" + msgstr "" + + #: c-typeck.c:2145 cp/typeck.c:3575 + msgid "right shift count >= width of type" + msgstr "" + + #: c-typeck.c:2170 cp/typeck.c:3594 + msgid "left shift count is negative" + msgstr "" + + #: c-typeck.c:2173 cp/typeck.c:3596 + msgid "left shift count >= width of type" + msgstr "" + + #: c-typeck.c:2198 + #, fuzzy + msgid "shift count is negative" + msgstr "størrelsen af tabel '%s' er negativ" + + #: c-typeck.c:2200 + msgid "shift count >= width of type" + msgstr "" + + #: c-typeck.c:2221 cp/typeck.c:3631 + msgid "comparing floating point with == or != is unsafe" + msgstr "" + + #: c-typeck.c:2245 c-typeck.c:2251 + #, fuzzy + msgid "ISO C forbids comparison of `void *' with function pointer" + msgstr "ISO C++ forbyder sammenligninger af henvisningsvariabler og heltal" + + #: c-typeck.c:2254 c-typeck.c:2296 c-typeck.c:2324 + msgid "comparison of distinct pointer types lacks a cast" + msgstr "" + + #: c-typeck.c:2269 c-typeck.c:2275 c-typeck.c:2345 c-typeck.c:2351 + #, fuzzy + msgid "comparison between pointer and integer" + msgstr "ISO C++ forbyder sammenligninger af henvisningsvariabler og heltal" + + #: c-typeck.c:2291 c-typeck.c:2319 + #, fuzzy + msgid "ISO C forbids ordered comparisons of pointers to functions" + msgstr "ISO C++ forbyder sammenligninger af henvisningsvariabler og heltal" + + #: c-typeck.c:2316 + #, fuzzy + msgid "comparison of complete and incomplete pointers" + msgstr "__alignof__ benyttet på en ufuldstændig type" + + #: c-typeck.c:2332 c-typeck.c:2339 + #, fuzzy + msgid "ordered comparison of pointer with integer zero" + msgstr "ISO C++ forbyder sammenligninger af henvisningsvariabler og heltal" + + #: c-typeck.c:2365 cp/typeck.c:3764 + msgid "unordered comparison on non-floating point argument" + msgstr "uordnent sammenligning af ikke-kommatalsparameter" + + #: c-typeck.c:2579 + #, fuzzy + msgid "comparison between signed and unsigned" + msgstr "ISO C++ forbyder sammenligninger af henvisningsvariabler og heltal" + + #: c-typeck.c:2625 cp/typeck.c:4010 + msgid "comparison of promoted ~unsigned with constant" + msgstr "" + + #: c-typeck.c:2633 cp/typeck.c:4018 + msgid "comparison of promoted ~unsigned with unsigned" + msgstr "" + + #: c-typeck.c:2695 + msgid "pointer of type `void *' used in arithmetic" + msgstr "" + + #: c-typeck.c:2701 + msgid "pointer to a function used in arithmetic" + msgstr "" + + #: c-typeck.c:2779 + msgid "pointer of type `void *' used in subtraction" + msgstr "" + + #: c-typeck.c:2781 + #, fuzzy + msgid "pointer to a function used in subtraction" + msgstr " i henvisning til medlemsfunktion-omdannelse" + + #: c-typeck.c:2839 + msgid "wrong type argument to unary plus" + msgstr "forkert parametertype til unært plus" + + #: c-typeck.c:2850 + msgid "wrong type argument to unary minus" + msgstr "forkert parametertype til unært minus" + + #: c-typeck.c:2862 + msgid "ISO C does not support `~' for complex conjugation" + msgstr "" + + #: c-typeck.c:2868 + msgid "wrong type argument to bit-complement" + msgstr "forkert parametertype til bitkomplement" + + #: c-typeck.c:2879 + msgid "wrong type argument to abs" + msgstr "forkert parametertype til abs" + + #: c-typeck.c:2891 + msgid "wrong type argument to conjugation" + msgstr "forkert parametertype til konjugation" + + #: c-typeck.c:2905 + msgid "wrong type argument to unary exclamation mark" + msgstr "forkert parametertype til unært udråbstegn" + + #: c-typeck.c:2948 + msgid "ISO C does not support `++' and `--' on complex types" + msgstr "" + + #: c-typeck.c:2962 c-typeck.c:2988 + #, c-format + msgid "wrong type argument to %s" + msgstr "forkert parametertype til %s" + + #: c-typeck.c:2982 + #, c-format + msgid "%s of pointer to unknown structure" + msgstr "%s af henvisning til en ukendt struktur" + + #: c-typeck.c:3052 + msgid "invalid lvalue in increment" + msgstr "ugyldig venstreværdi i forøgelse" + + #: c-typeck.c:3053 + msgid "invalid lvalue in decrement" + msgstr "ugyldig venstreværdi i formindskelse" + + #: c-typeck.c:3061 cp/typeck.c:4587 + msgid "increment" + msgstr "forøgelse" + + #: c-typeck.c:3061 cp/typeck.c:4587 + msgid "decrement" + msgstr "formindskelse" + + #: c-typeck.c:3117 + #, fuzzy + msgid "ISO C forbids the address of a cast expression" + msgstr "ISO C forbyder tekst efter #%s" + + #: c-typeck.c:3131 + msgid "invalid lvalue in unary `&'" + msgstr "ugyldig venstreværdi i unært '&'" + + #: c-typeck.c:3163 + #, c-format + msgid "attempt to take address of bit-field structure member `%s'" + msgstr "forsøg på at finde adressen af bitfeltstrukturmedlemmet '%s'" + + #: c-typeck.c:3271 c-typeck.c:4618 c-typeck.c:4634 c-typeck.c:4650 + #: cp/typeck.c:4780 diagnostic.c:1475 gcc.c:4207 java/verify.c:1416 + #: java/verify.c:1417 java/verify.c:1432 + #, c-format + msgid "%s" + msgstr "%s" + + #: c-typeck.c:3328 + msgid "ISO C forbids use of conditional expressions as lvalues" + msgstr "" + + #: c-typeck.c:3331 + msgid "ISO C forbids use of compound expressions as lvalues" + msgstr "" + + #: c-typeck.c:3334 + msgid "ISO C forbids use of cast expressions as lvalues" + msgstr "" + + #: c-typeck.c:3351 + #, fuzzy, c-format + msgid "%s of read-only member `%s'" + msgstr "%s har intet medlem ved navn '%s'" + + #: c-typeck.c:3355 + #, c-format + msgid "%s of read-only variable `%s'" + msgstr "" + + #: c-typeck.c:3358 + #, c-format + msgid "%s of read-only location" + msgstr "" + + #: c-typeck.c:3376 + #, c-format + msgid "cannot take address of bitfield `%s'" + msgstr "kan ikke finde adressen af bitfeltet '%s'" + + #: c-typeck.c:3403 + #, c-format + msgid "global register variable `%s' used in nested function" + msgstr "global registervariabel '%s' benyttet i indlejret funktion" + + #: c-typeck.c:3407 + #, fuzzy, c-format + msgid "register variable `%s' used in nested function" + msgstr "global registervariabel '%s' benyttet i indlejret funktion" + + #: c-typeck.c:3414 + #, c-format + msgid "address of global register variable `%s' requested" + msgstr "forespørgsel efter adressen af den globale registervariabel '%s'" + + #: c-typeck.c:3426 + msgid "cannot put object with volatile field into register" + msgstr "kan ikke anbringe et objekt med et volatile-felt i et register" + + #: c-typeck.c:3430 + #, fuzzy, c-format + msgid "address of register variable `%s' requested" + msgstr "forespørgsel efter adressen af den globale registervariabel '%s'" + + #: c-typeck.c:3538 + #, fuzzy + msgid "signed and unsigned type in conditional expression" + msgstr "typerne i betingelsesudtrykket passer ikke sammen" + + #: c-typeck.c:3545 + msgid "ISO C forbids conditional expr with only one void side" + msgstr "" + + #: c-typeck.c:3561 c-typeck.c:3568 + #, fuzzy + msgid "ISO C forbids conditional expr between `void *' and function pointer" + msgstr "ISO C++ forbyder sammenligninger af henvisningsvariabler og heltal" + + #: c-typeck.c:3574 + #, fuzzy + msgid "pointer type mismatch in conditional expression" + msgstr "typerne i betingelsesudtrykket passer ikke sammen" + + #: c-typeck.c:3581 c-typeck.c:3591 + #, fuzzy + msgid "pointer/integer type mismatch in conditional expression" + msgstr "typerne i betingelsesudtrykket passer ikke sammen" + + #: c-typeck.c:3605 + msgid "type mismatch in conditional expression" + msgstr "typerne i betingelsesudtrykket passer ikke sammen" + + #: c-typeck.c:3678 cp/typeck.c:5012 + msgid "left-hand operand of comma expression has no effect" + msgstr "" + + #: c-typeck.c:3717 + msgid "cast specifies array type" + msgstr "typetildelingen angiver en tabeltype" + + #: c-typeck.c:3723 + msgid "cast specifies function type" + msgstr "typetildelingen angiver en funktionstype" + + #: c-typeck.c:3733 + #, fuzzy + msgid "ISO C forbids casting nonscalar to the same type" + msgstr "ISO C++ forbyder omtvingelse af typen til en tabeltype" + + #: c-typeck.c:3754 + #, fuzzy + msgid "ISO C forbids casts to union type" + msgstr "ISO C++ forbyder omtvingelse af typen til en tabeltype" + + #: c-typeck.c:3770 + msgid "cast to union type from type not present in union" + msgstr "typetildeling til en union-type fra en type der ikke findes i union'en" + + #. There are qualifiers present in IN_OTYPE that are not + #. present in IN_TYPE. + #: c-typeck.c:3815 + #, fuzzy + msgid "cast discards qualifiers from pointer target type" + msgstr "%s kasserer modifikationer på henvisningsmålets type" + + #: c-typeck.c:3830 + msgid "cast increases required alignment of target type" + msgstr "" + + #: c-typeck.c:3836 cp/typeck.c:5420 + msgid "cast from pointer to integer of different size" + msgstr "" + + #: c-typeck.c:3841 + #, fuzzy + msgid "cast does not match function type" + msgstr "typetildelingen angiver en funktionstype" + + #: c-typeck.c:3848 cp/typeck.c:5427 + #, fuzzy + msgid "cast to pointer from integer of different size" + msgstr "%s opretter en henvisningsvariabel ud fra et heltal uden en typeomtvingning" + + #. Now we have handled acceptable kinds of LHS that are not truly lvalues. + #. Reject anything strange now. + #: c-typeck.c:3990 + msgid "invalid lvalue in assignment" + msgstr "ugyldig venstreværdi i tildeling" + + #. Convert new value to destination type. + #: c-typeck.c:3999 c-typeck.c:4024 c-typeck.c:4041 cp/typeck.c:5542 + #: cp/typeck.c:5699 + msgid "assignment" + msgstr "tildeling" + + #: c-typeck.c:4208 c-typeck.c:4275 + #, c-format + msgid "%s makes qualified function pointer from unqualified" + msgstr "%s opretter en funktionshenvisning med modifikationer fra én uden" + + #: c-typeck.c:4212 c-typeck.c:4255 + #, c-format + msgid "%s discards qualifiers from pointer target type" + msgstr "%s kasserer modifikationer på henvisningsmålets type" + + #: c-typeck.c:4218 + msgid "ISO C prohibits argument conversion to union type" + msgstr "" + + #: c-typeck.c:4247 + #, fuzzy, c-format + msgid "ISO C forbids %s between function pointer and `void *'" + msgstr "ISO forbyder %s mellem funktionshenvisning og 'void *'" + + #: c-typeck.c:4264 + #, c-format + msgid "pointer targets in %s differ in signedness" + msgstr "fortegnene i henvisningsmål i %s er forskellige" + + #: c-typeck.c:4280 + #, c-format + msgid "%s from incompatible pointer type" + msgstr "%s fra en henvisningstype der ikke er forenelig med målets" + + #: c-typeck.c:4296 + #, c-format + msgid "%s makes pointer from integer without a cast" + msgstr "%s opretter en henvisningsvariabel ud fra et heltal uden en typeomtvingning" + + #: c-typeck.c:4304 + #, c-format + msgid "%s makes integer from pointer without a cast" + msgstr "%s opretter et heltal ud fra en henvisningsvariabel uden en typeomtvingning" + + #: c-typeck.c:4318 c-typeck.c:4321 + #, c-format + msgid "incompatible type for argument %d of `%s'" + msgstr "typen af den %d. parameter i '%s' passer ikke" + + #: c-typeck.c:4325 + #, c-format + msgid "incompatible type for argument %d of indirect function call" + msgstr "typen af den %d. parameter i det indirekte funktionskald passer ikke" + + #: c-typeck.c:4329 + #, c-format + msgid "incompatible types in %s" + msgstr "uforenelige typer i %s" + + #. Function name is known; supply it. + #: c-typeck.c:4360 + #, c-format + msgid "passing arg %d of `%s'" + msgstr "videregiver den %d. parameter til '%s'" + + #. Function name unknown (call through ptr); just give arg number. + #: c-typeck.c:4370 + #, c-format + msgid "passing arg %d of pointer to function" + msgstr "videregiver den %d. parameter af henvisning til funktion" + + #: c-typeck.c:4437 + msgid "initializer for static variable is not constant" + msgstr "startværdien for den statiske variabel er ikke en konstant" + + #: c-typeck.c:4443 + msgid "initializer for static variable uses complicated arithmetic" + msgstr "startværdien for den statiske variabel benytter komplicerede beregninger" + + #: c-typeck.c:4451 + #, fuzzy + msgid "aggregate initializer is not constant" + msgstr "feltets startværdi er ikke en konstant" + + #: c-typeck.c:4453 + #, fuzzy + msgid "aggregate initializer uses complicated arithmetic" + msgstr "startværdien for den statiske variabel benytter komplicerede beregninger" + + #: c-typeck.c:4460 + msgid "traditional C rejects automatic aggregate initialization" + msgstr "" + + #: c-typeck.c:4621 c-typeck.c:4637 c-typeck.c:4653 + #, c-format + msgid "(near initialization for `%s')" + msgstr "(i nærheden af klargøringen af '%s')" + + #: c-typeck.c:4705 cp/typeck2.c:518 + msgid "char-array initialized from wide string" + msgstr "char-tabel får tildelt startværdi fra en bred streng" + + #: c-typeck.c:4712 cp/typeck2.c:525 + msgid "int-array initialized from non-wide string" + msgstr "int-tabel får tildelt startværdi fra en ikke-bred streng" + + #: c-typeck.c:4729 cp/typeck2.c:541 + msgid "initializer-string for array of chars is too long" + msgstr "startværdistrengen til char-tabellen er for lang" + + #: c-typeck.c:4756 + msgid "array initialized from non-constant array expression" + msgstr "tabel får tildelt en startværdi fra et tabeludtryk der ikke er konstant" + + #: c-typeck.c:4773 c-typeck.c:4775 c-typeck.c:4791 c-typeck.c:4812 + #: c-typeck.c:6207 + msgid "initializer element is not constant" + msgstr "startværdielement er ikke en konstant" + + #: c-typeck.c:4807 + msgid "initialization" + msgstr "klargøring" + + #: c-typeck.c:4818 c-typeck.c:6212 + msgid "initializer element is not computable at load time" + msgstr "startværdielement kan ikke beregnes ved indlæsningstidspunktet" + + #: c-typeck.c:4855 c-typeck.c:4871 cp/typeck2.c:618 + msgid "invalid initializer" + msgstr "ugyldig startværdi" + + #: c-typeck.c:5339 + msgid "extra brace group at end of initializer" + msgstr "overskydende krøllede paranteser ved slutningen af startværdien" + + #: c-typeck.c:5359 + msgid "missing braces around initializer" + msgstr "krøllede paranteser mangler omkring startværdien" + + #: c-typeck.c:5403 + msgid "braces around scalar initializer" + msgstr "krøllede paranteser omkring skalarstartværdi" + + #: c-typeck.c:5455 + msgid "initialization of flexible array member in a nested context" + msgstr "" + + #: c-typeck.c:5457 + msgid "initialization of a flexible array member" + msgstr "" + + #: c-typeck.c:5467 + msgid "deprecated initialization of zero-length array" + msgstr "" + + #: c-typeck.c:5472 + msgid "initialization of zero-length array before end of structure" + msgstr "" + + #: c-typeck.c:5477 + msgid "initialization of zero-length array inside a nested context" + msgstr "" + + #: c-typeck.c:5496 + msgid "missing initializer" + msgstr "manglende startværdi" + + #: c-typeck.c:5521 + msgid "empty scalar initializer" + msgstr "tom skalarstartværdi" + + #: c-typeck.c:5526 + msgid "extra elements in scalar initializer" + msgstr "overskydende elementer i skalarstarværdi" + + #: c-typeck.c:5610 + msgid "initialization designators may not nest" + msgstr "" + + #: c-typeck.c:5631 c-typeck.c:5701 + msgid "array index in non-array initializer" + msgstr "tabelindeks i en startværdi der ikke er en tabel" + + #: c-typeck.c:5636 c-typeck.c:5753 + #, fuzzy + msgid "field name not in record or union initializer" + msgstr "for mange elementer i union-startværdi" + + #: c-typeck.c:5697 c-typeck.c:5699 + msgid "nonconstant array index in initializer" + msgstr "tabelindekset i startværdien er ikke en konstant" + + #: c-typeck.c:5704 + #, fuzzy + msgid "array index in initializer exceeds array bounds" + msgstr "tabelindeks i en startværdi der ikke er en tabel" + + #: c-typeck.c:5715 + msgid "empty index range in initializer" + msgstr "tomt indeksinterval i startværdi" + + #: c-typeck.c:5724 + #, fuzzy + msgid "array index range in initializer exceeds array bounds" + msgstr "tomt indeksinterval i startværdi" + + #: c-typeck.c:5765 + #, c-format + msgid "unknown field `%s' specified in initializer" + msgstr "ukendt felt '%s' angivet i startværdi" + + #: c-typeck.c:5802 c-typeck.c:5823 c-typeck.c:6277 + msgid "initialized field with side-effects overwritten" + msgstr "" + + #: c-typeck.c:6490 + msgid "excess elements in char array initializer" + msgstr "for mange elementer i char-tabelstartværdien" + + #: c-typeck.c:6497 c-typeck.c:6536 + msgid "excess elements in struct initializer" + msgstr "for mange elementer i struc-startværdi" + + #: c-typeck.c:6603 + msgid "excess elements in union initializer" + msgstr "for mange elementer i union-startværdi" + + #: c-typeck.c:6620 + msgid "traditional C rejects initialization of unions" + msgstr "" + + #: c-typeck.c:6683 + msgid "excess elements in array initializer" + msgstr "for mange elementer i tabelstartværdi" + + #: c-typeck.c:6709 + msgid "excess elements in scalar initializer" + msgstr "for mange elemener i skalarstartværdi" + + #: c-typeck.c:6793 + msgid "asm template is not a string constant" + msgstr "asm-sætning er ikke en strengkonstant" + + #: c-typeck.c:6825 + msgid "invalid lvalue in asm statement" + msgstr "ugyldig venstreværdi i asm-sætning" + + #: c-typeck.c:6898 + msgid "modification by `asm'" + msgstr "ændring i 'asm'" + + #: c-typeck.c:6917 cp/typeck.c:6589 + #, fuzzy + msgid "function declared `noreturn' has a `return' statement" + msgstr "funktionen returnerer ikke en strengtype" + + #: c-typeck.c:6924 + msgid "`return' with no value, in function returning non-void" + msgstr "" + + #: c-typeck.c:6930 + msgid "`return' with a value, in function returning void" + msgstr "" + + #: c-typeck.c:6934 + msgid "return" + msgstr "return" + + #: c-typeck.c:6985 + msgid "function returns address of local variable" + msgstr "" + + #: c-typeck.c:7043 cp/semantics.c:533 + msgid "switch quantity not an integer" + msgstr "switch-størrelsen er ikke et heltal" + + #: c-typeck.c:7054 + msgid "`long' switch expression not converted to `int' in ISO C" + msgstr "" + + #: c-typeck.c:7097 cp/decl.c:5228 + msgid "case label not within a switch statement" + msgstr "case-etiket befinder sig ikke inden i en switch-sætning" + + #: c-typeck.c:7099 cp/decl.c:5233 + #, fuzzy + msgid "`default' label not within a switch statement" + msgstr "default-etiket befinder sig ikke inden i en switch-sætning" + + #: calls.c:1877 + #, fuzzy, c-format + msgid "inlining failed in call to `%s'" + msgstr "kan ikke håndtere inkonsistente kald af '%s'" + + #: calls.c:1878 calls.c:2191 + msgid "called from here" + msgstr "" + + #: calls.c:2190 + #, fuzzy, c-format + msgid "can't inline call to `%s'" + msgstr "kan ikke håndtere inkonsistente kald af '%s'" + + #: calls.c:2228 + msgid "function call has aggregate value" + msgstr "" + + #: calls.c:4604 + msgid "variable offset is passed paritially in stack and in reg" + msgstr "" + + #: calls.c:4606 + msgid "variable size is passed partially in stack and in reg" + msgstr "" + + #: collect2.c:454 + msgid "internal error" + msgstr "intern fejl" + + #: collect2.c:935 + msgid "no arguments" + msgstr "ingen parametre" + + #: collect2.c:1290 collect2.c:1438 collect2.c:1482 + #, c-format + msgid "fopen %s" + msgstr "fejl under åbning af filen %s" + + #: collect2.c:1293 collect2.c:1443 collect2.c:1485 + #, c-format + msgid "fclose %s" + msgstr "fejl under lukning af filen %s" + + #: collect2.c:1302 + #, c-format + msgid "collect2 version %s" + msgstr "collect2 version %s" + + #: collect2.c:1392 + #, c-format + msgid "%d constructor(s) found\n" + msgstr "%d konstrueringsfunktion(er) fundet\n" + + #: collect2.c:1393 + #, c-format + msgid "%d destructor(s) found\n" + msgstr "%d destrueringsfunktion(er) fundet\n" + + #: collect2.c:1394 + #, c-format + msgid "%d frame table(s) found\n" + msgstr "%d rammetabel(ler) fundet\n" + + #: collect2.c:1546 + #, c-format + msgid "%s terminated with signal %d [%s]%s" + msgstr "%s afsluttet af signal %d [%s]%s" + + #: collect2.c:1565 + #, c-format + msgid "%s returned %d exit status" + msgstr "%s returnerede afslutningskoden %d" + + #: collect2.c:1593 + #, c-format + msgid "[cannot find %s]" + msgstr "[kan ikke finde %s]" + + #: collect2.c:1608 + #, c-format + msgid "cannot find `%s'" + msgstr "kan ikke finde '%s'" + + #: collect2.c:1619 collect2.c:1622 + #, c-format + msgid "redirecting stdout: %s" + msgstr "omdirigerer standard-ud: %s" + + #: collect2.c:1665 + #, c-format + msgid "[Leaving %s]\n" + msgstr "[Efterlader %s]\n" + + #: collect2.c:1906 + #, c-format + msgid "\nwrite_c_file - output name is %s, prefix is %s\n" + msgstr "\nwrite_c_file - uddatanavnet er %s, præfikset er %s\n" + + #: collect2.c:2124 + msgid "cannot find `nm'" + msgstr "kan ikke finde 'nm'" + + #: collect2.c:2134 collect2.c:2576 + msgid "pipe" + msgstr "fejl under oprettelse af ledning" + + #: collect2.c:2138 collect2.c:2580 + msgid "fdopen" + msgstr "fejl under åbning af fildeskriptor" + + #: collect2.c:2164 collect2.c:2606 + #, c-format + msgid "dup2 %d 1" + msgstr "fejl under kopiering af fildeskriptor (dup2 %d 1)" + + #: collect2.c:2167 collect2.c:2170 collect2.c:2183 collect2.c:2609 + #: collect2.c:2612 collect2.c:2625 + #, c-format + msgid "close %d" + msgstr "fejl under lukning af fildeskriptor %d" + + #: collect2.c:2173 + #, c-format + msgid "execvp %s" + msgstr "fejl under kørsel (vha. execvp) af %s" + + #: collect2.c:2227 + #, c-format + msgid "init function found in object %s" + msgstr "klargøringsfunktion fundet i objekt %s" + + #: collect2.c:2235 + #, c-format + msgid "fini function found in object %s" + msgstr "afslutningsfunktion fundet i objekt %s" + + #: collect2.c:2258 collect2.c:2664 + msgid "fclose" + msgstr "fejl under lukning af fil" + + #: collect2.c:2303 + #, c-format + msgid "unable to open file '%s'" + msgstr "kunne ikke åbne filen '%s'" + + #: collect2.c:2305 + #, c-format + msgid "unable to stat file '%s'" + msgstr "kunne ikke få fat i oplysninger om filen '%s'" + + #: collect2.c:2311 + #, c-format + msgid "unable to mmap file '%s'" + msgstr "kunne ikke indlæse filen '%s'" + + #: collect2.c:2464 + msgid "not found\n" + msgstr "ikke fundet\n" + + #: collect2.c:2466 collect2.c:2643 + #, c-format + msgid "dynamic dependency %s not found" + msgstr "dynamisk afhængighed %s ikke fundet" + + #: collect2.c:2486 + #, c-format + msgid "bad magic number in file '%s'" + msgstr "ugyldigt magisk tal i filen '%s'" + + #: collect2.c:2508 + msgid "dynamic dependencies.\n" + msgstr "dynamiske afhængigheder.\n" + + #: collect2.c:2567 + msgid "cannot find `ldd'" + msgstr "kan ikke finde 'ldd'" + + #: collect2.c:2615 + #, c-format + msgid "execv %s" + msgstr "fejl under kørsel (vha. execv) af %s" + + #: collect2.c:2628 + msgid "\nldd output with constructors/destructors.\n" + msgstr "\nldd-uddata med konstruktions-/destruktionsfunktioner.\n" + + #: collect2.c:2655 + #, c-format + msgid "unable to open dynamic dependency '%s'" + msgstr "kan ikke åbne den dynamiske afhængighed '%s'" + + #: collect2.c:2769 + #, c-format + msgid "%s: not a COFF file" + msgstr "%s: ikke en coff-fil" + + #: collect2.c:2888 + #, c-format + msgid "%s: cannot open as COFF file" + msgstr "%s: kan ikke åbnes som en coff-fil" + + #: collect2.c:2944 + #, c-format + msgid "Library lib%s not found" + msgstr "Biblioteket lib%s ikke fundet" + + #: collect2.c:3073 + #, c-format + msgid "open %s" + msgstr "fejl ved åbning af %s" + + #: collect2.c:3096 + msgid "incompatibilities between object file & expected values" + msgstr "uforeneligheder mellem objektfil og forventede værdier" + + #: collect2.c:3169 + #, c-format + msgid "\nProcessing symbol table #%d, offset = 0x%.8lx, kind = %s\n" + msgstr "\nBehandler symboltabel nr. %d, offset = 0x%.8lx, form = %s\n" + + #: collect2.c:3178 + msgid "string section missing" + msgstr "strengsektion mangler" + + #: collect2.c:3181 + msgid "section pointer missing" + msgstr "sektionshenvisning mangler" + + #: collect2.c:3229 + msgid "no symbol table found" + msgstr "ingen symboltabel fundet" + + #: collect2.c:3242 + msgid "no cmd_strings found" + msgstr "ingen cmd_strings fundet" + + #: collect2.c:3254 + msgid "\nUpdating header and load commands.\n\n" + msgstr "\nOpdaterer hoved- og indlæsningskommandoer.\n\n" + + #: collect2.c:3261 + #, c-format + msgid "load command map, %d cmds, new size %ld.\n" + msgstr "indlæser kommandooversigt, %d kommandoer, ny størrelse %ld.\n" + + #: collect2.c:3292 + msgid "writing load commands.\n\n" + msgstr "skriver indlæsningskommandoer.\n\n" + + #: collect2.c:3312 + #, c-format + msgid "close %s" + msgstr "fejl ved lukning af %s" + + #: collect2.c:3386 + msgid "could not convert 0x%l.8x into a region" + msgstr "kunne ikke konvertere 0x%l.8x til en region" + + #: collect2.c:3390 + #, c-format + msgid "%s function, region %d, offset = %ld (0x%.8lx)\n" + msgstr "%s-funktion, region %d, offset = %ld (0x%.8lx)\n" + + #: collect2.c:3517 + msgid "bad magic number" + msgstr "ugyldigt magisk tal" + + #: collect2.c:3518 + msgid "bad header version" + msgstr "ugyldig version af hovedet" + + #: collect2.c:3519 + msgid "bad raw header version" + msgstr "ugyldig version af råhovedet" + + #: collect2.c:3520 + msgid "raw header buffer too small" + msgstr "råhoved-mellemlager for småt" + + #: collect2.c:3521 + msgid "old raw header file" + msgstr "gammel råhovedfil" + + #: collect2.c:3522 + msgid "unsupported version" + msgstr "versionen er ikke understøttet" + + #: collect2.c:3524 + #, c-format + msgid "unknown {de,en}code_mach_o_hdr return value %d" + msgstr "ukendt {de,en}code_mach_o_hdr returneringsværdi %d" + + #: collect2.c:3544 + #, c-format + msgid "fstat %s" + msgstr "fejl ved egenskabsundersøgelse af filen %s" + + #: collect2.c:3581 collect2.c:3629 + #, c-format + msgid "lseek %s 0" + msgstr "fejl ved søgning til begyndelsen i filen %s" + + #: collect2.c:3585 + #, c-format + msgid "read %s" + msgstr "fejl ved læsning af %s" + + #: collect2.c:3588 + #, c-format + msgid "read %ld bytes, expected %ld, from %s" + msgstr "læste %ld byte, forventede %ld, fra %s" + + #: collect2.c:3609 + #, c-format + msgid "msync %s" + msgstr "fejl ved synkronisering mellem hukommelse og disk af %s" + + #: collect2.c:3616 + #, c-format + msgid "munmap %s" + msgstr "fejl ved fjernelse af %s fra hukommelsen" + + #: collect2.c:3633 + #, c-format + msgid "write %s" + msgstr "fejl ved skrivning til %s" + + #: collect2.c:3636 + #, c-format + msgid "wrote %ld bytes, expected %ld, to %s" + msgstr "skrev %ld byte, forventede %ld, til %s" + + #: combine.c:12818 + #, c-format + msgid "" + ";; Combiner statistics: %d attempts, %d substitutions (%d requiring new space),\n" + ";; %d successes.\n" + "\n" + msgstr "" + ";; kombineringsstatistik: %d forsøg, %d udskiftninger (%d kræver ny plads),\n" + ";; %d vellykkede.\n" + "\n" + + #: combine.c:12828 + #, c-format + msgid "" + "\n" + ";; Combiner totals: %d attempts, %d substitutions (%d requiring new space),\n" + ";; %d successes.\n" + msgstr "" + "\n" + ";; kombineringstotal: %d forsøg, %d udskiftninger (%d kræver ny plads),\n" + ";; %d succeser.\n" + + #. Run-time compilation parameters selecting different hardware subsets. + #: config/1750a/1750a.h:39 + msgid "Use VAX-C alignment" + msgstr "" + + #: config/a29k/a29k.c:1006 + #, c-format + msgid "invalid %%Q value" + msgstr "ugyldig %%Q-værdi" + + #: config/a29k/a29k.c:1012 config/alpha/alpha.c:4055 + #, c-format + msgid "invalid %%C value" + msgstr "ugyldig %%C-værdi" + + #: config/a29k/a29k.c:1018 config/alpha/alpha.c:3919 + #: config/rs6000/rs6000.c:4015 + #, c-format + msgid "invalid %%N value" + msgstr "ugyldig %%N-værdi" + + #: config/a29k/a29k.c:1024 config/alpha/alpha.c:3990 + #: config/rs6000/rs6000.c:3977 + #, c-format + msgid "invalid %%M value" + msgstr "ugyldig %%M-værdi" + + #: config/a29k/a29k.c:1030 config/alpha/alpha.c:3982 + #: config/rs6000/rs6000.c:3942 + #, c-format + msgid "invalid %%m value" + msgstr "ugyldig %%m-værdi" + + #: config/a29k/a29k.c:1130 config/alpha/alpha.c:3943 config/romp/romp.c:682 + #, c-format + msgid "invalid %%L value" + msgstr "ugyldig %%L-værdi" + + #: config/a29k/a29k.c:1135 config/rs6000/rs6000.c:4023 + #, c-format + msgid "invalid %%O value" + msgstr "ugyldig %%O-værdi" + + #: config/a29k/a29k.c:1141 config/alpha/alpha.c:3927 + #: config/rs6000/rs6000.c:4042 + #, c-format + msgid "invalid %%P value" + msgstr "ugyldig %%P-værdi" + + #: config/a29k/a29k.c:1151 + #, c-format + msgid "invalid %%V value" + msgstr "ugyldig %%V-værdi" + + #: config/a29k/a29k.h:101 + msgid "Generate code assuming DW bit is set" + msgstr "" + + #: config/a29k/a29k.h:102 + msgid "Generate code assuming DW bit is not set" + msgstr "" + + #: config/a29k/a29k.h:103 + msgid "Generate code using byte writes" + msgstr "" + + #: config/a29k/a29k.h:104 + msgid "Do not generate byte writes" + msgstr "" + + #: config/a29k/a29k.h:105 + msgid "Use small memory model" + msgstr "" + + #: config/a29k/a29k.h:106 + msgid "Use normal memory model" + msgstr "" + + #: config/a29k/a29k.h:107 + msgid "Use large memory model" + msgstr "" + + #: config/a29k/a29k.h:108 + msgid "Generate 29050 code" + msgstr "" + + #: config/a29k/a29k.h:109 + msgid "Generate 29000 code" + msgstr "" + + #: config/a29k/a29k.h:110 + msgid "Use kernel global registers" + msgstr "" + + #: config/a29k/a29k.h:111 + msgid "Use user global registers" + msgstr "" + + #: config/a29k/a29k.h:112 + msgid "Emit stack checking code" + msgstr "" + + #: config/a29k/a29k.h:113 + msgid "Do not emit stack checking code" + msgstr "" + + #: config/a29k/a29k.h:114 + #, fuzzy + msgid "Work around storem hardware bug" + msgstr "Brug ikke hardware-kommatal" + + #: config/a29k/a29k.h:115 + #, fuzzy + msgid "Do not work around storem hardware bug" + msgstr "Brug ikke hardware-kommatal" + + #: config/a29k/a29k.h:116 + #, fuzzy + msgid "Store locals in argument registers" + msgstr "Kontrollér tildelingsordenen for heltalsregistrene" + + #: config/a29k/a29k.h:117 + #, fuzzy + msgid "Do not store locals in arg registers" + msgstr "Returnér ikke værdier fra funktioner i fpu-registre" + + #: config/a29k/a29k.h:118 config/i960/i960.h:284 config/mips/mips.h:375 + msgid "Use software floating point" + msgstr "" + + #: config/a29k/a29k.h:119 + #, fuzzy + msgid "Do not generate multm instructions" + msgstr "Generér ikke sin, cos, sqrt til fpu" + + #: config/alpha/alpha.c:201 + #, c-format + msgid "bad value `%s' for -mtrap-precision switch" + msgstr "ugyldig værdi '%s' til '-mtrap-precision'-tilvalget" + + #: config/alpha/alpha.c:215 + #, c-format + msgid "bad value `%s' for -mfp-rounding-mode switch" + msgstr "ugyldig værdi '%s' til '-mfp-rounding-mode'-tilvalget" + + #: config/alpha/alpha.c:230 + #, c-format + msgid "bad value `%s' for -mfp-trap-mode switch" + msgstr "ugyldig værdi '%s' til '-mfp-trap-mode'-tilvalget" + + #: config/alpha/alpha.c:249 config/alpha/alpha.c:261 + #, c-format + msgid "bad value `%s' for -mcpu switch" + msgstr "ugyldig værdi '%s' til '-mcpu'-tilvalget" + + #: config/alpha/alpha.c:269 + #, fuzzy + msgid "fp software completion requires -mtrap-precision=i" + msgstr "Et '-ifile'-tilvalg påkræver et '-map'-tilvalg" + + #: config/alpha/alpha.c:285 + msgid "rounding mode not supported for VAX floats" + msgstr "" + + #: config/alpha/alpha.c:290 + #, fuzzy + msgid "trap mode not supported for VAX floats" + msgstr "stakgrænser understøttes ikke på målarkitekturen" + + #: config/alpha/alpha.c:319 + #, c-format + msgid "L%d cache latency unknown for %s" + msgstr "" + + #: config/alpha/alpha.c:334 + #, fuzzy, c-format + msgid "bad value `%s' for -mmemory-latency" + msgstr "ugyldig værdi (%s) til '-mmodel'-tilvalget" + + #: config/alpha/alpha.c:3901 config/ia64/ia64.c:3368 + #, c-format + msgid "invalid %%r value" + msgstr "ugyldig %%r-værdi" + + #: config/alpha/alpha.c:3912 config/rs6000/rs6000.c:4088 + #, c-format + msgid "invalid %%R value" + msgstr "ugyldig %%R-værdi" + + #: config/alpha/alpha.c:3935 config/romp/romp.c:724 config/romp/romp.c:731 + #, c-format + msgid "invalid %%h value" + msgstr "ugyldig %%h-værdi" + + #: config/alpha/alpha.c:4025 + #, c-format + msgid "invalid %%U value" + msgstr "ugyldig %%U-værdi" + + #: config/alpha/alpha.c:4033 config/alpha/alpha.c:4044 config/romp/romp.c:690 + #: config/rs6000/rs6000.c:4096 + #, c-format + msgid "invalid %%s value" + msgstr "ugyldig %%s-værdi" + + #: config/alpha/alpha.c:4092 config/rs6000/rs6000.c:3806 + #, c-format + msgid "invalid %%E value" + msgstr "ugyldig %%E-værdi" + + #: config/alpha/alpha.c:4113 config/romp/romp.c:965 + #: config/rs6000/rs6000.c:4388 + #, c-format + msgid "invalid %%xn code" + msgstr "ugyldig %%xn-kode" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/alpha/alpha.h:200 config/i386/i386.h:233 config/i386/i386.h:235 + #: config/i386/i386.h:237 config/ns32k/ns32k.h:103 config/rs6000/rs6000.h:301 + #: config/sparc/sparc.h:577 config/sparc/sparc.h:582 + msgid "Use hardware fp" + msgstr "Brug hardware-kommatal" + + #: config/alpha/alpha.h:201 config/i386/i386.h:234 config/i386/i386.h:236 + #: config/rs6000/rs6000.h:303 config/sparc/sparc.h:579 + #: config/sparc/sparc.h:584 + msgid "Do not use hardware fp" + msgstr "Brug ikke hardware-kommatal" + + #: config/alpha/alpha.h:202 + msgid "Use fp registers" + msgstr "" + + #: config/alpha/alpha.h:204 + msgid "Do not use fp registers" + msgstr "" + + #: config/alpha/alpha.h:205 + msgid "Do not assume GAS" + msgstr "" + + #: config/alpha/alpha.h:206 + msgid "Assume GAS" + msgstr "" + + #: config/alpha/alpha.h:208 + msgid "Request IEEE-conformant math library routines (OSF/1)" + msgstr "" + + #: config/alpha/alpha.h:210 + msgid "Emit IEEE-conformant code, without inexact exceptions" + msgstr "" + + #: config/alpha/alpha.h:212 + msgid "Emit IEEE-conformant code, with inexact exceptions" + msgstr "" + + #: config/alpha/alpha.h:214 + #, fuzzy + msgid "Do not emit complex integer constants to read-only memory" + msgstr "kompleks heltalskonstant er for stor til 'complex int'" + + #: config/alpha/alpha.h:215 + msgid "Use VAX fp" + msgstr "" + + #: config/alpha/alpha.h:216 + #, fuzzy + msgid "Do not use VAX fp" + msgstr "Brug ikke hardware-kommatal" + + #: config/alpha/alpha.h:217 + msgid "Emit code for the byte/word ISA extension" + msgstr "" + + #: config/alpha/alpha.h:220 + msgid "Emit code for the motion video ISA extension" + msgstr "" + + #: config/alpha/alpha.h:223 + msgid "Emit code for the fp move and sqrt ISA extension" + msgstr "" + + #: config/alpha/alpha.h:225 + msgid "Emit code for the counting ISA extension" + msgstr "" + + #. This macro is similar to `TARGET_SWITCHES' but defines names of + #. command options that have values. Its definition is an initializer + #. with a subgrouping for each command option. + #. + #. Each subgrouping contains a string constant, that defines the fixed + #. part of the option name, and the address of a variable. The + #. variable, type `char *', is set to the variable part of the given + #. option if the fixed part matches. The actual option name is made + #. by appending `-m' to the specified name. + #. + #. Here is an example which defines `-mshort-data-NUMBER'. If the + #. given option is `-mshort-data-512', the variable `m88k_short_data' + #. will be set to the string `"512"'. + #. + #. extern char *m88k_short_data; + #. #define TARGET_OPTIONS { { "short-data-", &m88k_short_data } } + #. For -mcpu= + #. For -mtune= + #. For -mfp-rounding-mode=[n|m|c|d] + #. For -mfp-trap-mode=[n|u|su|sui] + #. For -mtrap-precision=[p|f|i] + #. For -mmemory-latency= + #: config/alpha/alpha.h:262 + msgid "Use features of and schedule given CPU" + msgstr "" + + #: config/alpha/alpha.h:264 + #, fuzzy + msgid "Schedule given CPU" + msgstr "Planlæg koden til en given cpu" + + #: config/alpha/alpha.h:266 + msgid "Control the generated fp rounding mode" + msgstr "" + + #: config/alpha/alpha.h:268 + msgid "Control the IEEE trap mode" + msgstr "" + + #: config/alpha/alpha.h:270 + msgid "Control the precision given to fp exceptions" + msgstr "" + + #: config/alpha/alpha.h:272 + msgid "Tune expected memory latency" + msgstr "" + + #. The names we put in the hashtable will always be the unique versions gived to us by the stringtable, so we can just use their addresses as the keys. + #. See if we already have an entry for this section. + #: config/alpha/elf.h:354 config/elfos.h:461 config/i386/sco5.h:492 + #: config/pa/pa-64.h:320 config/rs6000/sysv4.h:963 + #, c-format + msgid "%s causes a section type conflict" + msgstr "" + + #: config/arc/arc.c:108 + #, c-format + msgid "bad value (%s) for -mcpu switch" + msgstr "ugyldig værdi '%s' til '-mcpu'-tilvalget" + + #: config/arc/arc.c:1666 config/m32r/m32r.c:2217 + msgid "invalid operand to %R code" + msgstr "ugyldig operand til '%R'-koden" + + #: config/arc/arc.c:1698 config/m32r/m32r.c:2240 + msgid "invalid operand to %H/%L code" + msgstr "ugyldig operand til '%H'/'%L'-koden" + + #: config/arc/arc.c:1722 config/m32r/m32r.c:2317 + msgid "invalid operand to %U code" + msgstr "ugyldig operand til '%U'-koden" + + #: config/arc/arc.c:1733 + msgid "invalid operand to %V code" + msgstr "ugyldig operand til '%V'-koden" + + #. Unknown flag. + #: config/arc/arc.c:1740 config/m32r/m32r.c:2356 config/sparc/sparc.c:5888 + msgid "invalid operand output code" + msgstr "ugyldig operand-uddatakode" + + #: config/arm/arm.c:372 + #, c-format + msgid "switch -mcpu=%s conflicts with -march= switch" + msgstr "" + + #: config/arm/arm.c:382 config/rs6000/rs6000.c:311 config/sparc/sparc.c:317 + #, c-format + msgid "bad value (%s) for %s switch" + msgstr "ugyldig værdi (%s) til '%s'-tilvalget" + + #: config/arm/arm.c:518 + #, fuzzy + msgid "target CPU does not support APCS-32" + msgstr "Dette mål understøtter ikke '-mabi'-tilvalget." + + #: config/arm/arm.c:523 + #, fuzzy + msgid "target CPU does not support APCS-26" + msgstr "Dette mål understøtter ikke '-mabi'-tilvalget." + + #: config/arm/arm.c:529 + #, fuzzy + msgid "target CPU does not support interworking" + msgstr "Dette mål understøtter ikke '-mabi'-tilvalget." + + #: config/arm/arm.c:535 + #, fuzzy + msgid "target CPU does not support THUMB instructions." + msgstr "Dette mål understøtter ikke '-mabi'-tilvalget." + + #: config/arm/arm.c:549 + msgid "enabling backtrace support is only meaningful when compiling for the Thumb." + msgstr "" + + #: config/arm/arm.c:552 + msgid "enabling callee interworking support is only meaningful when compiling for the Thumb." + msgstr "" + + #: config/arm/arm.c:555 + msgid "enabling caller interworking support is only meaningful when compiling for the Thumb." + msgstr "" + + #: config/arm/arm.c:561 + msgid "interworking forces APCS-32 to be used" + msgstr "" + + #: config/arm/arm.c:567 + msgid "-mapcs-stack-check incompatible with -mno-apcs-frame" + msgstr "" + + #: config/arm/arm.c:575 + msgid "-fpic and -mapcs-reent are incompatible" + msgstr "-fpic og -mapcs-reent er indbyrdes uforenelige" + + #: config/arm/arm.c:578 + msgid "APCS reentrant code not supported. Ignored" + msgstr "" + + #: config/arm/arm.c:586 + msgid "-g with -mno-apcs-frame may not give sensible debugging" + msgstr "" + + #: config/arm/arm.c:594 + msgid "Passing floating point arguments in fp regs not yet supported" + msgstr "" + + #: config/arm/arm.c:623 + #, c-format + msgid "Invalid floating point emulation option: -mfpe-%s" + msgstr "Ugyldigt tilvalg til kommatalsemulering: -mfpe-%s" + + #: config/arm/arm.c:647 + msgid "Structure size boundary can only be set to 8 or 32" + msgstr "" + + #: config/arm/arm.c:655 + msgid "-mpic-register= is useless without -fpic" + msgstr "" + + #: config/arm/arm.c:664 + #, c-format + msgid "Unable to use '%s' for PIC register" + msgstr "Kan ikke bruge '%s' til PIC-register" + + #. FIXME - the way to handle this situation is to allow + #. the pretend args to be dumped onto the stack, then + #. reuse r3 to save IP. This would involve moving the + #. copying of SP into IP until after the pretend args + #. have been dumped, but this is not too hard. + #. [See e.g. gcc.c-torture/execute/nest-stdar-1.c.] + #: config/arm/arm.c:7844 + msgid "Unable to find a temporary location for static chain register" + msgstr "" + + #: config/arm/arm.c:8806 + msgid "Unable to compute real location of stacked parameter" + msgstr "" + + #: config/arm/arm.c:9500 + #, fuzzy + msgid "no low registers available for popping high registers" + msgstr "Ingen lave registre er tilgængelige til at modtage værdier fra høje registre" + + #: config/arm/arm.c:9712 + msgid "Interrupt Service Routines cannot be coded in Thumb mode." + msgstr "" + + #: config/arm/arm.h:421 + msgid "Generate APCS conformant stack frames" + msgstr "" + + #: config/arm/arm.h:424 + #, fuzzy + msgid "Store function names in object code" + msgstr "klargøringsfunktion fundet i objekt %s" + + #: config/arm/arm.h:428 + msgid "Use the 32-bit version of the APCS" + msgstr "" + + #: config/arm/arm.h:430 + msgid "Use the 26-bit version of the APCS" + msgstr "" + + #: config/arm/arm.h:434 + #, fuzzy + msgid "Pass FP arguments in FP registers" + msgstr "Returnér værdier fra funktioner i fpu-registre" + + #: config/arm/arm.h:437 + msgid "Generate re-entrant, PIC code" + msgstr "" + + #: config/arm/arm.h:440 + msgid "The MMU will trap on unaligned accesses" + msgstr "" + + #: config/arm/arm.h:447 + msgid "Use library calls to perform FP operations" + msgstr "" + + #: config/arm/arm.h:449 config/i960/i960.h:282 + msgid "Use hardware floating point instructions" + msgstr "" + + #: config/arm/arm.h:451 + msgid "Assume target CPU is configured as big endian" + msgstr "" + + #: config/arm/arm.h:453 + msgid "Assume target CPU is configured as little endian" + msgstr "" + + #: config/arm/arm.h:455 + msgid "Assume big endian bytes, little endian words" + msgstr "" + + #: config/arm/arm.h:457 + msgid "Support calls between Thumb and ARM instruction sets" + msgstr "" + + #: config/arm/arm.h:460 + msgid "Generate a call to abort if a noreturn function returns" + msgstr "" + + #: config/arm/arm.h:463 + #, fuzzy + msgid "Do not move instructions into a function's prologue" + msgstr "Brug ikke push-instruktioner til at gemme udgående parametre" + + #: config/arm/arm.h:466 + msgid "Do not load the PIC register in function prologues" + msgstr "" + + #: config/arm/arm.h:469 + msgid "Generate call insns as indirect calls, if necessary" + msgstr "" + + #: config/arm/arm.h:472 + msgid "Compile for the Thumb not the ARM" + msgstr "" + + #: config/arm/arm.h:476 + msgid "Thumb: Generate (non-leaf) stack frames even if not needed" + msgstr "" + + #: config/arm/arm.h:479 + msgid "Thumb: Generate (leaf) stack frames even if not needed" + msgstr "" + + #: config/arm/arm.h:482 + msgid "Thumb: Assume non-static functions may be called from ARM code" + msgstr "" + + #: config/arm/arm.h:486 + msgid "Thumb: Assume function pointers may go to non-Thumb aware code" + msgstr "" + + #: config/arm/arm.h:496 + msgid "Specify the name of the target CPU" + msgstr "" + + #: config/arm/arm.h:498 + msgid "Specify the name of the target architecture" + msgstr "" + + #: config/arm/arm.h:502 + msgid "Specify the version of the floating point emulator" + msgstr "" + + #: config/arm/arm.h:504 + msgid "Specify the minimum bit alignment of structures" + msgstr "" + + #: config/arm/arm.h:506 + #, fuzzy + msgid "Specify the register to be used for PIC addressing" + msgstr "Ugyldigt register i ybase-adressering" + + #: config/arm/pe.c:255 config/i386/winnt.c:339 config/mcore/mcore.c:3400 + #, fuzzy, c-format + msgid "initialized variable `%s' is marked dllimport" + msgstr "instansvariablen '%s' er erklæret privat" + + #: config/arm/pe.c:264 config/i386/winnt.c:348 + #, fuzzy, c-format + msgid "static variable `%s' is marked dllimport" + msgstr "instansvariablen '%s' er erklæret privat" + + #: config/arm/pe.h:62 + msgid "Ignore dllimport attribute for functions" + msgstr "" + + #. None of these is actually used in cc1. If we don't define them in target + #. switches cc1 complains about them. For the sake of argument lets allocate + #. bit 31 of target flags for such options. + #: config/arm/riscix.h:84 + msgid "Do symbol renaming for BSD" + msgstr "" + + #: config/arm/riscix.h:85 + msgid "Do symbol renaming for X/OPEN" + msgstr "" + + #: config/arm/riscix.h:86 + msgid "Don't do symbol renaming" + msgstr "" + + #: config/avr/avr.c:190 + #, fuzzy, c-format + msgid "MCU `%s' not supported" + msgstr "-pipe understøttes ikke." + + #: config/avr/avr.c:430 + #, c-format + msgid "large frame pointer change (%d) with -mtiny-stack" + msgstr "" + + #: config/avr/avr.c:4704 + msgid "Only initialized variables can be placed into program memory area." + msgstr "" + + #. `TARGET_...' + #. This series of macros is to allow compiler command arguments to + #. enable or disable the use of optional features of the target + #. machine. For example, one machine description serves both the + #. 68000 and the 68020; a command argument tells the compiler whether + #. it should use 68020-only instructions or not. This command + #. argument works by means of a macro `TARGET_68020' that tests a bit + #. in `target_flags'. + #. + #. Define a macro `TARGET_FEATURENAME' for each such option. Its + #. definition should test a bit in `target_flags'; for example: + #. + #. #define TARGET_68020 (target_flags & 1) + #. + #. One place where these macros are used is in the + #. condition-expressions of instruction patterns. Note how + #. `TARGET_68020' appears frequently in the 68000 machine description + #. file, `m68k.md'. Another place they are used is in the + #. definitions of the other macros in the `MACHINE.h' file. + #: config/avr/avr.h:99 + msgid "Assume int to be 8 bit integer" + msgstr "" + + #: config/avr/avr.h:101 + msgid "Change the stack pointer without disabling interrupts" + msgstr "" + + #: config/avr/avr.h:103 + msgid "Use subroutines for function prologue/epilogue" + msgstr "" + + #: config/avr/avr.h:105 + msgid "Change only the low 8 bits of the stack pointer" + msgstr "" + + #: config/avr/avr.h:107 + msgid "Do not generate tablejump insns" + msgstr "" + + #: config/avr/avr.h:110 + msgid "Output instruction sizes to the asm file" + msgstr "" + + #: config/avr/avr.h:144 + msgid "Specify the initial stack address" + msgstr "" + + #: config/avr/avr.h:145 + msgid "Specify the MCU name" + msgstr "" + + #: config/avr/avr.h:2899 + #, fuzzy + msgid "Trampolines not supported\n" + msgstr "-pipe understøttes ikke" + + #: config/c4x/c4x.c:268 + #, c-format + msgid "Unknown CPU version %d, using 40.\n" + msgstr "" + + #: config/c4x/c4x.c:859 + #, c-format + msgid "ISR %s requires %d words of local vars, max is 32767." + msgstr "" + + #: config/c4x/c4x.c:4525 + #, fuzzy, c-format + msgid "junk at end of '#pragma %s'" + msgstr "ragelse i slutningen af #%s" + + #. Name of the c4x assembler. + #. Name of the c4x linker. + #. Define assembler options. + #. Define linker options. + #. Define C preprocessor options. + #. Specify the end file to link with. + #. Target compilation option flags. + #. Small memory model. + #. Use 24-bit MPYI for C3x. + #. Fast fixing of floats. + #. Allow use of RPTS. + #. Emit C3x code. + #. Be compatible with TI assembler. + #. Be paranoid about DP reg. in ISRs. + #. Pass arguments on stack. + #. Enable features under development. + #. Enable repeat block. + #. Use BK as general register. + #. Use decrement and branch for C3x. + #. Enable debugging of GCC. + #. Force constants into registers. + #. Allow unsigned loop counters. + #. Force op0 and op1 to be same. + #. Save all 40 bits for floats. + #. Allow parallel insns. + #. Allow MPY||ADD, MPY||SUB insns. + #. Assume mem refs possibly aliased. + #. Emit C30 code. + #. Emit C31 code. + #. Emit C32 code. + #. Emit C33 code. + #. Emit C40 code. + #. Emit C44 code. + #. Run-time compilation parameters selecting different hardware subsets. + #. + #. Macro to define tables used to set the flags. + #. This is a list in braces of triplets in braces, + #. each pair being { "NAME", VALUE, "DESCRIPTION" } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/c4x/c4x.h:141 + msgid "Small memory model" + msgstr "" + + #: config/c4x/c4x.h:143 + msgid "Big memory model" + msgstr "" + + #: config/c4x/c4x.h:145 + msgid "Use MPYI instruction for C3x" + msgstr "" + + #: config/c4x/c4x.h:147 + msgid "Do not use MPYI instruction for C3x" + msgstr "" + + #: config/c4x/c4x.h:149 + #, fuzzy + msgid "Use fast but approximate float to integer conversion" + msgstr " i henvisning til medlem-omdannelse" + + #: config/c4x/c4x.h:151 + msgid "Use slow but accurate float to integer conversion" + msgstr "" + + #: config/c4x/c4x.h:153 + #, fuzzy + msgid "Enable use of RTPS instruction" + msgstr "Se %s for instruktioner." + + #: config/c4x/c4x.h:155 + #, fuzzy + msgid "Disable use of RTPS instruction" + msgstr "Se %s for instruktioner." + + #: config/c4x/c4x.h:157 + #, fuzzy + msgid "Enable use of RTPB instruction" + msgstr "Se %s for instruktioner." + + #: config/c4x/c4x.h:159 + #, fuzzy + msgid "Disable use of RTPB instruction" + msgstr "Se %s for instruktioner." + + #: config/c4x/c4x.h:161 + #, fuzzy + msgid "Generate code for C30 CPU" + msgstr "Generér kode til en given cpu" + + #: config/c4x/c4x.h:163 + #, fuzzy + msgid "Generate code for C31 CPU" + msgstr "Generér kode til en given cpu" + + #: config/c4x/c4x.h:165 + #, fuzzy + msgid "Generate code for C32 CPU" + msgstr "Generér kode til en given cpu" + + #: config/c4x/c4x.h:167 + #, fuzzy + msgid "Generate code for C33 CPU" + msgstr "Generér kode til en given cpu" + + #: config/c4x/c4x.h:169 + #, fuzzy + msgid "Generate code for C40 CPU" + msgstr "Generér kode til en given cpu" + + #: config/c4x/c4x.h:171 + #, fuzzy + msgid "Generate code for C44 CPU" + msgstr "Generér kode til en given cpu" + + #: config/c4x/c4x.h:173 + msgid "Emit code compatible with TI tools" + msgstr "" + + #: config/c4x/c4x.h:175 + msgid "Emit code to use GAS extensions" + msgstr "" + + #: config/c4x/c4x.h:177 config/c4x/c4x.h:181 + msgid "Save DP across ISR in small memory model" + msgstr "" + + #: config/c4x/c4x.h:179 config/c4x/c4x.h:183 + msgid "Don't save DP across ISR in small memory model" + msgstr "" + + #: config/c4x/c4x.h:185 + msgid "Pass arguments on the stack" + msgstr "" + + #: config/c4x/c4x.h:187 + msgid "Pass arguments in registers" + msgstr "" + + #: config/c4x/c4x.h:189 + msgid "Enable new features under development" + msgstr "" + + #: config/c4x/c4x.h:191 + msgid "Disable new features under development" + msgstr "" + + #: config/c4x/c4x.h:193 + msgid "Use the BK register as a general purpose register" + msgstr "" + + #: config/c4x/c4x.h:195 + #, fuzzy + msgid "Do not allocate BK register" + msgstr "Kontrollér tildelingsordenen for heltalsregistrene" + + #: config/c4x/c4x.h:197 + #, fuzzy + msgid "Enable use of DB instruction" + msgstr "Se %s for instruktioner." + + #: config/c4x/c4x.h:199 + #, fuzzy + msgid "Disable use of DB instruction" + msgstr "Se %s for instruktioner." + + #: config/c4x/c4x.h:201 + #, fuzzy + msgid "Enable debugging" + msgstr "Aktivér stakprøvning" + + #: config/c4x/c4x.h:203 + msgid "Disable debugging" + msgstr "" + + #: config/c4x/c4x.h:205 + msgid "Force constants into registers to improve hoisting" + msgstr "" + + #: config/c4x/c4x.h:207 + #, fuzzy + msgid "Don't force constants into registers" + msgstr "talkonstant uden cifre" + + #: config/c4x/c4x.h:209 + msgid "Force RTL generation to emit valid 3 operand insns" + msgstr "" + + #: config/c4x/c4x.h:211 + msgid "Allow RTL generation to emit invalid 3 operand insns" + msgstr "" + + #: config/c4x/c4x.h:213 + msgid "Allow unsigned interation counts for RPTB/DB" + msgstr "" + + #: config/c4x/c4x.h:215 + msgid "Disallow unsigned iteration counts for RPTB/DB" + msgstr "" + + #: config/c4x/c4x.h:217 + msgid "Preserve all 40 bits of FP reg across call" + msgstr "" + + #: config/c4x/c4x.h:219 + msgid "Only preserve 32 bits of FP reg across call" + msgstr "" + + #: config/c4x/c4x.h:221 + #, fuzzy + msgid "Enable parallel instructions" + msgstr "Se %s for instruktioner." + + #: config/c4x/c4x.h:223 + #, fuzzy + msgid "Disable parallel instructions" + msgstr "Se %s for instruktioner." + + #: config/c4x/c4x.h:225 + msgid "Enable MPY||ADD and MPY||SUB instructions" + msgstr "" + + #: config/c4x/c4x.h:227 + msgid "Disable MPY||ADD and MPY||SUB instructions" + msgstr "" + + #: config/c4x/c4x.h:229 + msgid "Assume that pointers may be aliased" + msgstr "" + + #: config/c4x/c4x.h:231 + msgid "Assume that pointers not aliased" + msgstr "" + + #: config/c4x/c4x.h:321 + msgid "Specify maximum number of iterations for RPTS" + msgstr "" + + #: config/c4x/c4x.h:323 + msgid "Select CPU to generate code for" + msgstr "" + + #. Macros used in the machine description to test the flags. + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/clipper/clipper.h:40 + #, fuzzy + msgid "Generate code for the C400" + msgstr "Generér kode til en given cpu" + + #: config/clipper/clipper.h:41 + #, fuzzy + msgid "Generate code for the C300" + msgstr "Generér kode til en given cpu" + + #: config/convex/convex.h:52 + #, fuzzy + msgid "Generate code for c1" + msgstr "Generér kode til en given cpu" + + #: config/convex/convex.h:53 + #, fuzzy + msgid "Generate code for c2" + msgstr "Generér kode til en given cpu" + + #: config/convex/convex.h:54 + #, fuzzy + msgid "Generate code for c32" + msgstr "Generér kode til en given cpu" + + #: config/convex/convex.h:55 config/convex/convex.h:56 + #, fuzzy + msgid "Generate code for c34" + msgstr "Generér kode til en given cpu" + + #: config/convex/convex.h:58 + msgid "Use standard calling sequence, with arg count word" + msgstr "" + + #: config/convex/convex.h:60 + msgid "Place arg count in a nop instruction (faster than push)" + msgstr "" + + #: config/convex/convex.h:62 + msgid "Don't push arg count, depend on symbol table" + msgstr "" + + #: config/convex/convex.h:64 + msgid "Use data cache for volatile mem refs (default)" + msgstr "" + + #: config/convex/convex.h:66 + msgid "Don't use data cache for volatile mem refs" + msgstr "" + + #: config/convex/convex.h:68 + msgid "Bypass data cache for volatile mem refs" + msgstr "" + + #: config/convex/convex.h:69 + msgid "Use 64-bit longs" + msgstr "" + + #: config/convex/convex.h:70 + msgid "Use cc- and libc-compatible 32-bit longs" + msgstr "" + + #: config/d30v/d30v.c:186 + #, c-format + msgid "Bad modes_tieable_p for register %s, mode1 %s, mode2 %s" + msgstr "" + + #. This macro defines names of command options to set and clear bits in + #. `target_flags'. Its definition is an initializer with a subgrouping for + #. each command option. + #. + #. Each subgrouping contains a string constant, that defines the option name, a + #. number, which contains the bits to set in `target_flags', and a second + #. string which is the description displayed by `--help'. If the number is + #. negative then the bits specified by the number are cleared instead of being + #. set. If the description string is present but empty, then no help + #. information will be displayed for that option, but it will not count as an + #. undocumented option. The actual option name is made by appending `-m' to + #. the specified name. + #. + #. One of the subgroupings should have a null string. The number in this + #. grouping is the default value for target_flags. Any target options act + #. starting with that value. + #. + #. Here is an example which defines -m68000 and -m68020 with opposite meanings, + #. and picks the latter as the default: + #. + #. #define TARGET_SWITCHES { { "68020", TARGET_MASK_68020, "" }, { "68000", -TARGET_MASK_68020, "Compile for the 68000" }, { "", TARGET_MASK_68020, "" }} + #: config/d30v/d30v.h:447 + msgid "Enable use of conditional move instructions" + msgstr "" + + #: config/d30v/d30v.h:450 + msgid "Disable use of conditional move instructions" + msgstr "" + + #: config/d30v/d30v.h:453 + msgid "Debug argument support in compiler" + msgstr "" + + #: config/d30v/d30v.h:456 + msgid "Debug stack support in compiler" + msgstr "" + + #: config/d30v/d30v.h:459 + msgid "Debug memory address support in compiler" + msgstr "" + + #: config/d30v/d30v.h:462 + msgid "Make adjacent short instructions parallel if possible." + msgstr "" + + #: config/d30v/d30v.h:465 + msgid "Do not make adjacent short instructions parallel." + msgstr "" + + #: config/d30v/d30v.h:468 config/d30v/d30v.h:471 + msgid "Link programs/data to be in external memory by default" + msgstr "" + + #: config/d30v/d30v.h:474 + msgid "Link programs/data to be in onchip memory by default" + msgstr "" + + #. This macro is similar to `TARGET_SWITCHES' but defines names of command + #. options that have values. Its definition is an initializer with a + #. subgrouping for each command option. + #. + #. Each subgrouping contains a string constant, that defines the fixed part of + #. the option name, the address of a variable, and a description string. The + #. variable, type `char *', is set to the variable part of the given option if + #. the fixed part matches. The actual option name is made by appending `-m' to + #. the specified name. + #. + #. Here is an example which defines `-mshort-data-'. If the given + #. option is `-mshort-data-512', the variable `m88k_short_data' will be set to + #. the string "512". + #. + #. extern char *m88k_short_data; + #. #define TARGET_OPTIONS { { "short-data-", &m88k_short_data, "Specify the size of the short data section" } } + #: config/d30v/d30v.h:501 + msgid "Change the branch costs within the compiler" + msgstr "" + + #: config/d30v/d30v.h:504 + msgid "Change the threshold for conversion to conditional execution" + msgstr "" + + #: config/dsp16xx/dsp16xx.c:1225 config/dsp16xx/dsp16xx.c:1250 + msgid "Stack size > 32k" + msgstr "Stakstørrelse > 32k" + + #: config/dsp16xx/dsp16xx.c:1759 config/dsp16xx/dsp16xx.c:1999 + msgid "inline float constants not supported on this host" + msgstr "integrerede kommatalskonstanter er ikke understøttede på denne vært" + + #. Output assembler code to FILE to increment profiler label # LABELNO + #. for profiling a function entry. + #: config/dsp16xx/dsp16xx.h:1188 config/dsp16xx/dsp16xx.h:1193 + #: config/dsp16xx/dsp16xx.h:1198 config/dsp16xx/dsp16xx.h:1840 + #: config/dsp16xx/dsp16xx.h:1845 + msgid "Profiling not implemented yet." + msgstr "Profilgenerering understøttes ikke endnu." + + #. Emit RTL insns to initialize the variable parts of a trampoline. + #. FNADDR is an RTX for the address of the function's pure code. + #. CXT is an RTX for the static chain value for the function. + #: config/dsp16xx/dsp16xx.h:1209 config/dsp16xx/dsp16xx.h:1221 + msgid "Trampolines not yet implemented" + msgstr "Trampoliner understøttes ikke endnu" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/elxsi/elxsi.h:51 + msgid "Generate code the unix assembler can handle" + msgstr "" + + #: config/elxsi/elxsi.h:52 + msgid "Generate code an embedded assembler can handle" + msgstr "" + + #: config/fr30/fr30.c:445 + msgid "fr30_print_operand_address: unhandled address" + msgstr "" + + #: config/fr30/fr30.c:472 + #, c-format + msgid "fr30_print_operand: unrecognised %p code" + msgstr "" + + #: config/fr30/fr30.c:492 + msgid "fr30_print_operand: unrecognised %b code" + msgstr "" + + #: config/fr30/fr30.c:513 + msgid "fr30_print_operand: unrecognised %B code" + msgstr "" + + #: config/fr30/fr30.c:521 + #, fuzzy + msgid "fr30_print_operand: invalid operand to %A code" + msgstr "ugyldig operand til '%N'-koden" + + #: config/fr30/fr30.c:538 + #, c-format + msgid "fr30_print_operand: invalid %x code" + msgstr "" + + #: config/fr30/fr30.c:545 + msgid "fr30_print_operand: invalid %F code" + msgstr "" + + #: config/fr30/fr30.c:561 + msgid "fr30_print_operand: unknown code" + msgstr "" + + #: config/fr30/fr30.c:590 config/fr30/fr30.c:599 config/fr30/fr30.c:610 + #: config/fr30/fr30.c:623 + msgid "fr30_print_operand: unhandled MEM" + msgstr "" + + #: config/fr30/fr30.h:85 + msgid "Assume small address space" + msgstr "" + + #: config/h8300/h8300.c:116 + #, fuzzy + msgid "-ms2600 is used without -ms." + msgstr "makroen '%s' kaldt uden parametre" + + #: config/h8300/h8300.c:3047 config/h8300/h8300.c:3059 + msgid "Only initialized variables can be placed into the 8-bit area." + msgstr "" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/h8300/h8300.h:108 + msgid "Generate H8/S code" + msgstr "" + + #: config/h8300/h8300.h:109 + #, fuzzy + msgid "Do not generate H8/S code" + msgstr "Generér ikke sin, cos, sqrt til fpu" + + #: config/h8300/h8300.h:110 + msgid "Generate H8/S2600 code" + msgstr "" + + #: config/h8300/h8300.h:111 + msgid "Do not generate H8/S2600 code" + msgstr "" + + #: config/h8300/h8300.h:112 + msgid "Make integers 32 bits wide" + msgstr "" + + #: config/h8300/h8300.h:115 + msgid "Use registers for argument passing" + msgstr "" + + #: config/h8300/h8300.h:117 + msgid "Do not use registers for argument passing" + msgstr "" + + #: config/h8300/h8300.h:119 + msgid "Consider access to byte sized memory slow" + msgstr "" + + #: config/h8300/h8300.h:120 + #, fuzzy + msgid "Enable linker relaxing" + msgstr "Aktivér stakprøvning" + + #: config/h8300/h8300.h:122 + msgid "Generate H8/300H code" + msgstr "" + + #: config/h8300/h8300.h:123 + msgid "Do not generate H8/300H code" + msgstr "" + + #: config/h8300/h8300.h:124 + msgid "Use H8/300 alignment rules" + msgstr "" + + #: config/i370/i370.c:869 + msgid "real name is too long - alias ignored" + msgstr "" + + #: config/i370/i370.c:874 + msgid "alias name is too long - alias ignored" + msgstr "" + + #: config/i370/i370.c:1039 + #, fuzzy + msgid "junk at end of #pragma map" + msgstr "ragelse i slutningen af #%s" + + #: config/i370/i370.c:1045 + #, fuzzy + msgid "malformed #pragma map, ignored" + msgstr "forkert udformet #pragma-direktiv" + + #. Macro to define tables used to set the flags. This is a list in braces + #. of pairs in braces, each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/i370/i370.h:63 + #, fuzzy + msgid "Generate char instructions" + msgstr "Se %s for instruktioner." + + #: config/i370/i370.h:64 + #, fuzzy + msgid "Do not generate char instructions" + msgstr "Generér ikke sin, cos, sqrt til fpu" + + #: config/i386/cygwin.h:49 + msgid "Use the Cygwin interface" + msgstr "" + + #: config/i386/cygwin.h:51 + msgid "Use the Mingw32 interface" + msgstr "" + + #: config/i386/cygwin.h:52 + msgid "Create GUI application" + msgstr "" + + #: config/i386/cygwin.h:53 + msgid "Don't set Windows defines" + msgstr "" + + #: config/i386/cygwin.h:54 + msgid "Set Windows defines" + msgstr "" + + #: config/i386/cygwin.h:56 + msgid "Create console application" + msgstr "" + + #: config/i386/cygwin.h:57 config/i386/win32.h:59 + #, fuzzy + msgid "Generate code for a DLL" + msgstr "Generér kode til en given cpu" + + #: config/i386/cygwin.h:59 config/i386/win32.h:61 + msgid "Ignore dllimport for functions" + msgstr "" + + #: config/i386/cygwin.h:61 + msgid "Use Mingw-specific thread support" + msgstr "" + + #: config/i386/cygwin.h:313 + #, c-format + msgid "-f%s ignored for target (all code is position independent)" + msgstr "" + + #: config/i386/dgux.c:185 + #, c-format + msgid "Internal gcc abort from %s:%d" + msgstr "Internt gcc-afbrydelse fra %s:%d" + + #: config/i386/dgux.c:189 + msgid "The local variable `insn' has the value:" + msgstr "Den lokale variabel 'insn' har værdien:" + + #: config/i386/dgux.h:62 + msgid "Retain standard MXDB information" + msgstr "" + + #: config/i386/dgux.h:64 + #, fuzzy + msgid "Retain legend information" + msgstr "ikke tilstrækkelig information om typen" + + #: config/i386/dgux.h:67 + #, fuzzy + msgid "Generate external legend information" + msgstr "ikke tilstrækkelig information om typen" + + #: config/i386/dgux.h:69 + msgid "Emit identifying info in .s file" + msgstr "" + + #: config/i386/dgux.h:71 + msgid "Warn when a function arg is a structure" + msgstr "" + + #: config/i386/dgux.h:249 + msgid "argument is a structure" + msgstr "" + + #: config/i386/djgpp.h:286 + msgid "-mbnu210 is ignored (option is obsolete)." + msgstr "" + + #: config/i386/i386.c:558 + #, c-format + msgid "bad value (%s) for -march= switch" + msgstr "Ugyldig værdi (%s) til '-march='-tilvalget" + + #: config/i386/i386.c:570 config/mips/mips.c:4935 + #, c-format + msgid "bad value (%s) for -mcpu= switch" + msgstr "Ugyldig værdi (%s) til '-mcpu='-tilvalget" + + #: config/i386/i386.c:601 + #, c-format + msgid "Register '%c' is unknown" + msgstr "Registret '%c' er ukendt" + + #: config/i386/i386.c:607 + #, c-format + msgid "Register '%c' already specified in allocation order" + msgstr "Registret '%c' er allerede angivet i tildelingsordenen" + + #: config/i386/i386.c:620 + #, c-format + msgid "-mregparm=%d is not between 0 and %d" + msgstr "-mregparm=%d er ikke mellem 0 og %d" + + #: config/i386/i386.c:631 + #, c-format + msgid "-malign-loops=%d is not between 0 and %d" + msgstr "-malign-loops=%d er ikke mellem 0 og %d" + + #: config/i386/i386.c:642 + #, c-format + msgid "-malign-jumps=%d is not between 0 and %d" + msgstr "-malign-jumps=%d er ikke mellem 0 og %d" + + #: config/i386/i386.c:653 + #, c-format + msgid "-malign-functions=%d is not between 0 and %d" + msgstr "-malign-functions=%d er ikke mellem 0 og %d" + + #: config/i386/i386.c:666 + #, c-format + msgid "-mpreferred-stack-boundary=%d is not between 2 and 31" + msgstr "-mpreferred-stack-boundary=%d er ikke mellem 2 og 31" + + #: config/i386/i386.c:677 + #, c-format + msgid "-mbranch-cost=%d is not between 0 and 5" + msgstr "-mbranch-cost=%d er ikke mellem 0 og 5" + + #. We can't handle floating point constants; + #. PRINT_OPERAND must handle them. + #: config/i386/i386.c:3124 config/pdp11/pdp11.c:1477 final.c:3676 + msgid "floating constant misused" + msgstr "kommatalskonstant misbrugt" + + #: config/i386/i386.c:3169 + msgid "invalid UNSPEC as operand" + msgstr "ugyldig UNSPEC som operand" + + #: config/i386/i386.c:3175 config/pdp11/pdp11.c:1524 final.c:3731 + msgid "invalid expression as operand" + msgstr "ugyldigt udtryk som operand" + + #. @@@ better error message + #: config/i386/i386.c:8457 config/i386/i386.c:8490 config/i386/i386.c:8627 + msgid "selector must be an immediate" + msgstr "" + + #. @@@ better error message + #: config/i386/i386.c:8658 config/i386/i386.c:8686 + msgid "mask must be an immediate" + msgstr "" + + #: config/i386/i386.h:45 config/mips/mips.h:176 + msgid "half-pic init called on systems that don't support it." + msgstr "half-pic klargøring kaldes på systemer der ikke understøtter det." + + #: config/i386/i386.h:238 + msgid "Same as -mcpu=i386" + msgstr "Magen til -mcpu=i386" + + #: config/i386/i386.h:239 + msgid "Same as -mcpu=i486" + msgstr "Magen til -mcpu=i486" + + #: config/i386/i386.h:240 + msgid "Same as -mcpu=pentium" + msgstr "Magen til -mcpu=pentium" + + #: config/i386/i386.h:241 + msgid "Same as -mcpu=pentiumpro" + msgstr "Magen til -mcpu=pentiumpro" + + #: config/i386/i386.h:243 + msgid "Alternate calling convention" + msgstr "Alternativ kaldekonvention" + + #: config/i386/i386.h:245 config/ns32k/ns32k.h:106 + msgid "Use normal calling convention" + msgstr "Brug normal kaldekonvention" + + #: config/i386/i386.h:247 + msgid "Align some doubles on dword boundary" + msgstr "Justér nogle double-variabler til dword-grænserne" + + #: config/i386/i386.h:249 + msgid "Align doubles on word boundary" + msgstr "Justér double-variabler til word-grænserne" + + #: config/i386/i386.h:251 + msgid "Uninitialized locals in .bss" + msgstr "Lokale variabler uden startværdi i .bss" + + #: config/i386/i386.h:253 + msgid "Uninitialized locals in .data" + msgstr "Lokale variabler uden startværdi i .data" + + #: config/i386/i386.h:255 + msgid "Use IEEE math for fp comparisons" + msgstr "Brug IEEE-matematik til kommatalssammenligninger" + + #: config/i386/i386.h:257 + msgid "Do not use IEEE math for fp comparisons" + msgstr "Brug ikke IEEE-regning til kommatalssammenligninger" + + #: config/i386/i386.h:259 + msgid "Return values of functions in FPU registers" + msgstr "Returnér værdier fra funktioner i fpu-registre" + + #: config/i386/i386.h:261 + msgid "Do not return values of functions in FPU registers" + msgstr "Returnér ikke værdier fra funktioner i fpu-registre" + + #: config/i386/i386.h:263 + msgid "Do not generate sin, cos, sqrt for FPU" + msgstr "Generér ikke sin, cos, sqrt til fpu" + + #: config/i386/i386.h:265 + msgid "Generate sin, cos, sqrt for FPU" + msgstr "Generér sin, cos og sqrt til fpu" + + #: config/i386/i386.h:267 + msgid "Omit the frame pointer in leaf functions" + msgstr "Udelad rammehenvisningen i de yderste funktioner" + + #. undocumented + #. undocumented + #. undocumented + #. undocumented + #: config/i386/i386.h:274 + msgid "Enable stack probing" + msgstr "Aktivér stakprøvning" + + #. undocumented + #. undocumented + #: config/i386/i386.h:279 + msgid "Emit Intel syntax assembler opcodes" + msgstr "Konstruer instruktionerne til maskinkodeoversætteren med Intel-syntaks" + + #: config/i386/i386.h:282 + msgid "Align destination of the string operations" + msgstr "Justér strengoperationernes destination" + + #: config/i386/i386.h:284 + msgid "Do not align destination of the string operations" + msgstr "Justér ikke strengoperationernes destination" + + #: config/i386/i386.h:286 + msgid "Inline all known string operations" + msgstr "Integrér alle kendte strengoperationer" + + #: config/i386/i386.h:288 + msgid "Do not inline all known string operations" + msgstr "Integrér ikke alle kendte strengoperationer" + + #: config/i386/i386.h:290 config/i386/i386.h:294 + msgid "Use push instructions to save outgoing arguments" + msgstr "Brug push-instruktioner til at gemme udgående parametre" + + #: config/i386/i386.h:292 config/i386/i386.h:296 + msgid "Do not use push instructions to save outgoing arguments" + msgstr "Brug ikke push-instruktioner til at gemme udgående parametre" + + #: config/i386/i386.h:298 + msgid "sizeof(long double) is 16." + msgstr "" + + #: config/i386/i386.h:300 + msgid "sizeof(long double) is 12." + msgstr "" + + #. This macro is similar to `TARGET_SWITCHES' but defines names of + #. command options that have values. Its definition is an + #. initializer with a subgrouping for each command option. + #. + #. Each subgrouping contains a string constant, that defines the + #. fixed part of the option name, and the address of a variable. The + #. variable, type `char *', is set to the variable part of the given + #. option if the fixed part matches. The actual option name is made + #. by appending `-m' to the specified name. + #: config/i386/i386.h:333 config/rs6000/rs6000.h:402 config/sparc/sparc.h:710 + msgid "Schedule code for given CPU" + msgstr "Planlæg koden til en given cpu" + + #: config/i386/i386.h:335 + msgid "Generate code for given CPU" + msgstr "Generér kode til en given cpu" + + #: config/i386/i386.h:337 + msgid "Control allocation order of integer registers" + msgstr "Kontrollér tildelingsordenen for heltalsregistrene" + + #: config/i386/i386.h:339 + msgid "Number of registers used to pass integer arguments" + msgstr "Antallet af registre der skal bruges til at overbringe heltalsparametre" + + #: config/i386/i386.h:341 + msgid "Loop code aligned to this power of 2" + msgstr "Løkkekode skal justeres til denne potens af 2" + + #: config/i386/i386.h:343 + msgid "Jump targets are aligned to this power of 2" + msgstr "Steder der skal springes til, justeres til denne potens af 2" + + #: config/i386/i386.h:345 + msgid "Function starts are aligned to this power of 2" + msgstr "Funktionsbegyndelser justeres til denne potens af 2" + + #: config/i386/i386.h:348 + msgid "Attempt to keep stack aligned to this power of 2" + msgstr "Forsøg at holde stakken justeret til denne potens af 2" + + #: config/i386/i386.h:350 + msgid "Branches are this expensive (1-5, arbitrary units)" + msgstr "Forgreninger koster dette (1-5, vilkårlige enheder)" + + #: config/i386/osf1elf.h:111 + msgid "Profiling uses mcount" + msgstr "" + + #: config/i386/osfrose.h:63 + msgid "Emit half-PIC code" + msgstr "" + + #. intentionally undoc + #. intentionally undoc + #: config/i386/osfrose.h:70 + msgid "Emit ELF object code" + msgstr "" + + #: config/i386/osfrose.h:72 + msgid "Emit ROSE object code" + msgstr "" + + #: config/i386/osfrose.h:74 + msgid "Symbols have a leading underscore" + msgstr "" + + #: config/i386/osfrose.h:77 + #, fuzzy + msgid "Align to >word boundaries" + msgstr "Justér double-variabler til word-grænserne" + + #: config/i386/osfrose.h:80 + msgid "Use mcount for profiling" + msgstr "" + + #: config/i386/osfrose.h:82 + msgid "Use mcount_ptr for profiling" + msgstr "" + + #: config/i386/sco5.h:887 + msgid "Generate ELF output" + msgstr "" + + #: config/i386/win32.h:53 + msgid "Use Mingw32 interface" + msgstr "" + + #: config/i386/win32.h:55 + msgid "Use Cygwin interface" + msgstr "" + + #: config/i386/win32.h:57 + msgid "Use bare Windows interface" + msgstr "" + + #: config/i386/winnt.c:311 + #, c-format + msgid "`%s' declared as both exported to and imported from a DLL." + msgstr "'%s' erklæret som både eksporteret til og importeret fra en dll." + + #. If the environment variable DJDIR is not defined, then DJGPP is not installed correctly and GCC will quickly become confused with the default prefix settings. Report the problem now so the user doesn't receive deceptive "file not found" error messages later. + #. DJDIR is automatically defined by the DJGPP environment config file pointed to by the environment variable DJGPP. Examine DJGPP to try and figure out what's wrong. + #: config/i386/xm-djgpp.h:75 + msgid "Environment variable DJGPP not defined." + msgstr "" + + #: config/i386/xm-djgpp.h:77 + #, c-format + msgid "Environment variable DJGPP points to missing file '%s'." + msgstr "" + + #: config/i386/xm-djgpp.h:80 + #, c-format + msgid "Environment variable DJGPP points to corrupt file '%s'." + msgstr "" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/i860/i860.h:56 config/i860/paragon.h:28 + #, fuzzy + msgid "Generate code which uses the FPU" + msgstr "Generér kode til en given cpu" + + #: config/i860/i860.h:57 config/i860/i860.h:58 config/i860/paragon.h:29 + #: config/i860/paragon.h:30 config/i860/paragon.h:31 + #, fuzzy + msgid "Do not generate code which uses the FPU" + msgstr "Generér ikke sin, cos, sqrt til fpu" + + #: config/i960/i960.c:122 + msgid "sorry, not implemented: #pragma align NAME=SIZE" + msgstr "" + + #: config/i960/i960.c:127 + #, fuzzy + msgid "malformed #pragma align - ignored" + msgstr "forkert udformet #pragma-direktiv" + + #: config/i960/i960.c:165 + msgid "sorry, not implemented: #pragma noalign NAME" + msgstr "" + + #: config/i960/i960.c:1513 config/m68k/m68k.c:407 config/rs6000/rs6000.c:5520 + #, fuzzy + msgid "stack limit expression is not supported" + msgstr "stakgrænser understøttes ikke på målarkitekturen" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #. ??? Not all ten of these architecture variations actually exist, but I + #. am not sure which are real and which aren't. + #: config/i960/i960.h:241 + #, fuzzy + msgid "Generate SA code" + msgstr "Generér kode til en given cpu" + + #: config/i960/i960.h:244 + #, fuzzy + msgid "Generate SB code" + msgstr "Generér kode til en given cpu" + + #. {"sc", (TARGET_FLAG_NUMERICS|TARGET_FLAG_PROTECTED| TARGET_FLAG_MC|TARGET_FLAG_COMPLEX_ADDR), N_("Generate SC code")}, + #: config/i960/i960.h:249 + #, fuzzy + msgid "Generate KA code" + msgstr "Generér kode til en given cpu" + + #: config/i960/i960.h:252 + #, fuzzy + msgid "Generate KB code" + msgstr "Generér kode til en given cpu" + + #. {"kc", (TARGET_FLAG_NUMERICS|TARGET_FLAG_PROTECTED| TARGET_FLAG_MC|TARGET_FLAG_COMPLEX_ADDR), N_("Generate KC code")}, + #: config/i960/i960.h:257 + #, fuzzy + msgid "Generate JA code" + msgstr "Generér kode til en given cpu" + + #: config/i960/i960.h:259 + #, fuzzy + msgid "Generate JD code" + msgstr "Generér kode til en given cpu" + + #: config/i960/i960.h:262 + #, fuzzy + msgid "Generate JF code" + msgstr "Generér kode til en given cpu" + + #: config/i960/i960.h:264 + msgid "generate RP code" + msgstr "" + + #: config/i960/i960.h:267 + #, fuzzy + msgid "Generate MC code" + msgstr "Generér kode til en given cpu" + + #: config/i960/i960.h:270 + #, fuzzy + msgid "Generate CA code" + msgstr "Generér kode til en given cpu" + + #. {"cb", (TARGET_FLAG_NUMERICS|TARGET_FLAG_C_SERIES| TARGET_FLAG_BRANCH_PREDICT|TARGET_FLAG_CODE_ALIGN), N_("Generate CB code")}, {"cc", (TARGET_FLAG_NUMERICS|TARGET_FLAG_PROTECTED| TARGET_FLAG_C_SERIES|TARGET_FLAG_BRANCH_PREDICT| TARGET_FLAG_CODE_ALIGN), N_("Generate CC code")}, + #: config/i960/i960.h:280 + #, fuzzy + msgid "Generate CF code" + msgstr "Generér kode til en given cpu" + + #: config/i960/i960.h:286 + msgid "Use alternate leaf function entries" + msgstr "" + + #: config/i960/i960.h:288 + #, fuzzy + msgid "Do not use alternate leaf function entries" + msgstr "Returnér ikke værdier fra funktioner i fpu-registre" + + #: config/i960/i960.h:290 + msgid "Perform tail call optimization" + msgstr "" + + #: config/i960/i960.h:292 + msgid "Do not perform tail call optimization" + msgstr "" + + #: config/i960/i960.h:294 + #, fuzzy + msgid "Use complex addressing modes" + msgstr "Ugyldig adresseringstilstand" + + #: config/i960/i960.h:296 + #, fuzzy + msgid "Do not use complex addressing modes" + msgstr "Ugyldig adresseringstilstand" + + #: config/i960/i960.h:298 + #, fuzzy + msgid "Align code to 8 byte boundary" + msgstr "Justér double-variabler til word-grænserne" + + #: config/i960/i960.h:300 + msgid "Do not align code to 8 byte boundary" + msgstr "" + + #. {"clean-linkage", (TARGET_FLAG_CLEAN_LINKAGE), N_("Force use of prototypes")}, {"no-clean-linkage", -(TARGET_FLAG_CLEAN_LINKAGE), N_("Do not force use of prototypes")}, + #: config/i960/i960.h:306 config/i960/i960.h:308 + msgid "Enable compatibility with iC960 v2.0" + msgstr "" + + #: config/i960/i960.h:310 + msgid "Enable compatibility with iC960 v3.0" + msgstr "" + + #: config/i960/i960.h:312 config/i960/i960.h:314 + msgid "Enable compatibility with ic960 assembler" + msgstr "" + + #: config/i960/i960.h:316 + msgid "Do not permit unaligned accesses" + msgstr "" + + #: config/i960/i960.h:318 + msgid "Permit unaligned accesses" + msgstr "" + + #: config/i960/i960.h:320 + msgid "Layout types like Intel's v1.3 gcc" + msgstr "" + + #: config/i960/i960.h:322 + msgid "Do not layout types like Intel's v1.3 gcc" + msgstr "" + + #: config/i960/i960.h:324 config/rs6000/sysv4.h:128 config/sparc/linux.h:83 + #: config/sparc/linux64.h:139 + msgid "Use 64 bit long doubles" + msgstr "" + + #: config/i960/i960.h:326 + msgid "Enable linker relaxation" + msgstr "" + + #: config/i960/i960.h:328 + msgid "Do not enable linker relaxation" + msgstr "" + + #. Override conflicting target switch options. + #. Doesn't actually detect if more than one -mARCH option is given, but + #. does handle the case of two blatantly conflicting -mARCH options. + #: config/i960/i960.h:343 config/i960/i960.h:353 + msgid "conflicting architectures defined - using C series" + msgstr "" + + #: config/i960/i960.h:348 + msgid "conflicting architectures defined - using K series" + msgstr "" + + #: config/i960/i960.h:363 + msgid "iC2.0 and iC3.0 are incompatible - using iC3.0" + msgstr "" + + #. ??? See the LONG_DOUBLE_TYPE_SIZE definition below. + #: config/i960/i960.h:374 + #, fuzzy + msgid "The -mlong-double-64 option does not work yet." + msgstr "Understøttelsen af -mabi=32 virker ikke endnu" + + #: config/ia64/ia64.c:3413 + msgid "ia64_print_operand: unknown code" + msgstr "" + + #: config/ia64/ia64.c:3651 + msgid "value of -mfixed-range must have form REG1-REG2" + msgstr "" + + #: config/ia64/ia64.c:3663 config/ia64/ia64.c:3670 regclass.c:714 + #, fuzzy, c-format + msgid "unknown register name: %s" + msgstr "ukendt registernavn '%s' i 'asm'" + + #: config/ia64/ia64.c:3678 + #, fuzzy, c-format + msgid "%s-%s is an empty range" + msgstr "%s=%s er for stor." + + #: config/ia64/ia64.c:3743 + msgid "cannot optimize division for both latency and throughput" + msgstr "" + + #. This macro defines names of command options to set and clear bits in + #. `target_flags'. Its definition is an initializer with a subgrouping for + #. each command option. + #: config/ia64/ia64.h:110 + msgid "Generate big endian code" + msgstr "" + + #: config/ia64/ia64.h:112 config/mcore/mcore.h:164 + msgid "Generate little endian code" + msgstr "" + + #: config/ia64/ia64.h:114 + #, fuzzy + msgid "Generate code for GNU as" + msgstr "Generér kode til en given cpu" + + #: config/ia64/ia64.h:116 + #, fuzzy + msgid "Generate code for Intel as" + msgstr "Generér kode til en given cpu" + + #: config/ia64/ia64.h:118 + #, fuzzy + msgid "Generate code for GNU ld" + msgstr "Generér kode til en given cpu" + + #: config/ia64/ia64.h:120 + #, fuzzy + msgid "Generate code for Intel ld" + msgstr "Generér kode til en given cpu" + + #: config/ia64/ia64.h:122 + #, fuzzy + msgid "Generate code without GP reg" + msgstr "Generér kode til en given cpu" + + #: config/ia64/ia64.h:124 + msgid "Emit stop bits before and after volatile extended asms" + msgstr "" + + #: config/ia64/ia64.h:126 + msgid "Don't emit stop bits before and after volatile extended asms" + msgstr "" + + #: config/ia64/ia64.h:128 + msgid "Emit code for Itanium (TM) processor B step" + msgstr "" + + #: config/ia64/ia64.h:130 + #, fuzzy + msgid "Use in/loc/out register names" + msgstr "ukendt registernavn '%s'" + + #: config/ia64/ia64.h:132 + msgid "Disable use of sdata/scommon/sbss" + msgstr "" + + #: config/ia64/ia64.h:134 + msgid "Enable use of sdata/scommon/sbss" + msgstr "" + + #: config/ia64/ia64.h:136 + msgid "gp is constant (but save/restore gp on indirect calls)" + msgstr "" + + #: config/ia64/ia64.h:138 + msgid "Generate self-relocatable code" + msgstr "" + + #: config/ia64/ia64.h:140 + msgid "Generate inline division, optimize for latency" + msgstr "" + + #: config/ia64/ia64.h:142 + msgid "Generate inline division, optimize for throughput" + msgstr "" + + #: config/ia64/ia64.h:144 + msgid "Enable Dwarf 2 line debug info via GNU as" + msgstr "" + + #: config/ia64/ia64.h:146 + msgid "Disable Dwarf 2 line debug info via GNU as" + msgstr "" + + #: config/ia64/ia64.h:169 + msgid "Specify range of registers to make fixed." + msgstr "" + + #: config/lynx-ng.h:97 config/lynx.h:120 config/rs6000/lynx.h:88 + #, fuzzy + msgid "-msystem-v and -p are incompatible" + msgstr "-mbsd og -mxopen er indbyrdes uforenelige" + + #: config/lynx-ng.h:99 config/lynx.h:122 config/rs6000/lynx.h:90 + #, fuzzy + msgid "-msystem-v and -mthreads are incompatible" + msgstr "-f%s og -msdata=%s er indbyrdes uforenelige." + + #: config/m32r/m32r.c:83 + #, c-format + msgid "bad value (%s) for -mmodel switch" + msgstr "ugyldig værdi (%s) til '-mmodel'-tilvalget" + + #: config/m32r/m32r.c:92 + #, c-format + msgid "bad value (%s) for -msdata switch" + msgstr "ugyldig værdi (%s) til '-msdata'-tilvalget" + + #: config/m32r/m32r.c:380 + msgid "const objects cannot go in .sdata/.sbss" + msgstr "" + + #: config/m32r/m32r.c:2187 + #, c-format + msgid "invalid operand to %s code" + msgstr "ugyldig operand til '%s'-koden" + + #: config/m32r/m32r.c:2194 + #, c-format + msgid "invalid operand to %p code" + msgstr "ugyldig operand til '%p'-koden" + + #: config/m32r/m32r.c:2302 + msgid "invalid operand to %T/%B code" + msgstr "ugyldig operand til '%T/%B'-koden" + + #: config/m32r/m32r.c:2325 + msgid "invalid operand to %N code" + msgstr "ugyldig operand til '%N'-koden" + + #. { "relax", TARGET_RELAX_MASK, "" }, { "no-relax", -TARGET_RELAX_MASK, "" }, + #: config/m32r/m32r.h:186 + msgid "Display compile time statistics" + msgstr "" + + #: config/m32r/m32r.h:188 + #, fuzzy + msgid "Align all loops to 32 byte boundary" + msgstr "Justér double-variabler til word-grænserne" + + #: config/m32r/m32r.h:191 + msgid "Only issue one instruction per cycle" + msgstr "" + + #: config/m32r/m32r.h:194 + #, fuzzy + msgid "Prefer branches over conditional execution" + msgstr "typerne i betingelsesudtrykket passer ikke sammen" + + #: config/m32r/m32r.h:210 + msgid "Code size: small, medium or large" + msgstr "" + + #: config/m32r/m32r.h:212 + msgid "Small data area: none, sdata, use" + msgstr "" + + #: config/m68hc11/m68hc11.c:227 + #, c-format + msgid "-f%s ignored for 68HC11/68HC12 (not supported)" + msgstr "" + + #. Macro to define tables used to set the flags. This is a list in braces of + #. pairs in braces, each pair being { "NAME", VALUE } where VALUE is the bits + #. to set or minus the bits to clear. An empty string NAME is used to + #. identify the default VALUE. + #: config/m68hc11/m68hc11.h:179 + msgid "Compile with 16-bit integer mode" + msgstr "" + + #: config/m68hc11/m68hc11.h:181 + msgid "Compile with 32-bit integer mode" + msgstr "" + + #: config/m68hc11/m68hc11.h:183 + msgid "Auto pre/post decrement increment allowed" + msgstr "" + + #: config/m68hc11/m68hc11.h:185 + msgid "Auto pre/post decrement increment not allowed" + msgstr "" + + #: config/m68hc11/m68hc11.h:187 config/m68hc11/m68hc11.h:191 + msgid "Compile for a 68HC11" + msgstr "" + + #: config/m68hc11/m68hc11.h:189 config/m68hc11/m68hc11.h:193 + msgid "Compile for a 68HC12" + msgstr "" + + #. This macro is similar to `TARGET_SWITCHES' but defines names of + #. command options that have values. Its definition is an + #. initializer with a subgrouping for each command option. + #. + #. Each subgrouping contains a string constant, that defines the + #. fixed part of the option name, and the address of a variable. The + #. variable, type `char *', is set to the variable part of the given + #. option if the fixed part matches. The actual option name is made + #. by appending `-m' to the specified name. + #: config/m68hc11/m68hc11.h:207 + msgid "Specify the register allocation order" + msgstr "" + + #: config/m68hc11/m68hc11.h:209 + #, fuzzy + msgid "Indicate the number of soft registers available" + msgstr "ugyldigt registernavn '%s' for registervariabel" + + #: config/m68k/m68k.c:102 + #, c-format + msgid "-malign-loops=%d is not between 1 and %d" + msgstr "-malign-loops=%d er ikke mellem 1 og %d" + + #: config/m68k/m68k.c:113 + #, c-format + msgid "-malign-jumps=%d is not between 1 and %d" + msgstr "-malign-jumps=%d er ikke mellem 1 og %d" + + #: config/m68k/m68k.c:124 + #, c-format + msgid "-malign-functions=%d is not between 1 and %d" + msgstr "-malign-functions=%d er ikke mellem 1 og %d" + + #. Sometimes certain combinations of command options do not make + #. sense on a particular target machine. You can define a macro + #. `OVERRIDE_OPTIONS' to take account of this. This macro, if + #. defined, is executed once just after all the command options have + #. been parsed. + #. + #. Don't use this macro to turn on various extra optimizations for + #. `-O'. That is what `OPTIMIZATION_OPTIONS' is for. + #: config/m68k/m68k.h:238 config/m68k/m68kelf.h:265 config/m68k/m68kv4.h:295 + msgid "-fPIC is not currently supported on the 68000 or 68010\n" + msgstr "-fPIC understøttes ikke på nuværende tidspunkt på 68000 og 68010\n" + + #: config/m88k/m88k.c:860 + #, c-format + msgid "Internal gcc monitor: short-branch(%x)" + msgstr "" + + #: config/m88k/m88k.c:2266 + msgid "Internal gcc error: Can't express symbolic location" + msgstr "" + + #: config/m88k/m88k.c:2547 + #, c-format + msgid "argument #%d is a structure" + msgstr "" + + #: config/m88k/m88k.c:2862 + msgid "%R not followed by %B/C/D/E" + msgstr "%R efterfølges ikke af %B/C/D/E" + + #: config/m88k/m88k.c:2930 + #, c-format + msgid "invalid %x/X value" + msgstr "ugyldig '%x/X'-værdi" + + #: config/m88k/m88k.c:2935 + msgid "invalid %H value" + msgstr "ugyldig '%H'-værdi" + + #: config/m88k/m88k.c:2941 + msgid "invalid %h value" + msgstr "ugyldig '%h'-værdi" + + #: config/m88k/m88k.c:2947 + msgid "invalid %Q value" + msgstr "ugyldig '%Q'-værdi" + + #: config/m88k/m88k.c:2953 + msgid "invalid %q value" + msgstr "ugyldig '%q'-værdi" + + #: config/m88k/m88k.c:2959 + #, c-format + msgid "invalid %o value" + msgstr "ugyldig '%o'-værdi" + + #: config/m88k/m88k.c:2966 + #, c-format + msgid "invalid %p value" + msgstr "ugyldig '%p'-værdi" + + #: config/m88k/m88k.c:2979 config/m88k/m88k.c:2984 + #, c-format + msgid "invalid %s/S value" + msgstr "ugyldig '%s/S'-værdi" + + #: config/m88k/m88k.c:2995 + msgid "invalid %P operand" + msgstr "ugyldig '%P'-operand" + + #: config/m88k/m88k.c:3026 + msgid "invalid %B value" + msgstr "ugyldig '%B'-værdi" + + #: config/m88k/m88k.c:3043 + msgid "invalid %C value" + msgstr "ugyldig '%C'-værdi" + + #: config/m88k/m88k.c:3056 + msgid "invalid %D value" + msgstr "ugyldig '%D'-værdi" + + #: config/m88k/m88k.c:3064 + #, c-format + msgid "invalid %E value" + msgstr "ugyldig '%E'-værdi" + + #: config/m88k/m88k.c:3069 + #, c-format + msgid "`%d' operand isn't a register" + msgstr "operanden '%d' er ikke et register" + + #: config/m88k/m88k.c:3080 + msgid "invalid %r value" + msgstr "ugyldig '%r'-værdi" + + #: config/m88k/m88k.c:3087 + msgid "operand is r0" + msgstr "operanden er r0" + + #: config/m88k/m88k.c:3101 + msgid "operand is const_double" + msgstr "operanden er const_double" + + #: config/m88k/m88k.c:3120 + msgid "invalid code" + msgstr "ugyldig kode" + + #. Do any checking or such that is needed after processing the -m switches. + #: config/m88k/m88k.h:277 + msgid "-mtrap-large-shift and -mhandle-large-shift are incompatible" + msgstr "-mtrap-large-shift og -mhandle-large-shift er indbyrdes uforenelige" + + #: config/m88k/m88k.h:299 + #, c-format + msgid "Invalid option `-mshort-data-%s'" + msgstr "Ugyldigt tilvalg '-mshort-data-%s'" + + #: config/m88k/m88k.h:304 + #, c-format + msgid "-mshort-data-%s is too large " + msgstr "-mshort-data-%s er for stor" + + #: config/m88k/m88k.h:306 + #, c-format + msgid "-mshort-data-%s and PIC are incompatible" + msgstr "-mshort-data-%s og PIC er indbyrdes uforenelige" + + #: config/mcore/mcore.c:3118 + #, fuzzy, c-format + msgid "Invalid option `-mstack-increment=%s'" + msgstr "Ugyldigt tilvalg '-mshort-data-%s'" + + #: config/mcore/mcore.h:131 + msgid "Inline constants if it can be done in 2 insns or less" + msgstr "" + + #: config/mcore/mcore.h:133 + msgid "inline constants if it only takes 1 instruction" + msgstr "" + + #: config/mcore/mcore.h:135 + msgid "Set maximum alignment to 4" + msgstr "" + + #: config/mcore/mcore.h:137 + msgid "Set maximum alignment to 8" + msgstr "" + + #: config/mcore/mcore.h:141 + msgid "Do not use the divide instruction" + msgstr "" + + #: config/mcore/mcore.h:145 + #, fuzzy + msgid "Do not arbitary sized immediates in bit operations" + msgstr "Justér ikke strengoperationernes destination" + + #: config/mcore/mcore.h:147 + msgid "Always treat bitfield as int-sized" + msgstr "" + + #: config/mcore/mcore.h:151 + msgid "Force functions to be aligned to a 4 byte boundary" + msgstr "" + + #: config/mcore/mcore.h:153 + msgid "Force functions to be aligned to a 2 byte boundary" + msgstr "" + + #: config/mcore/mcore.h:155 + msgid "Emit call graph information" + msgstr "" + + #: config/mcore/mcore.h:159 + msgid "Prefer word accesses over byte accesses" + msgstr "" + + #: config/mcore/mcore.h:170 + #, fuzzy + msgid "Generate code for the M*Core M340" + msgstr "Generér kode til en given cpu" + + #: config/mcore/mcore.h:183 + msgid "Maximum amount for a single stack increment operation" + msgstr "" + + #: config/mips/mips.c:4737 + #, c-format + msgid "-mips%d not supported" + msgstr "-mips%d er ikke understøttet" + + #: config/mips/mips.c:4744 + #, c-format + msgid "bad value (%s) for -mips switch" + msgstr "ugyldig værdi (%s) til '-mips'-tilvalget" + + #: config/mips/mips.c:4763 + #, c-format + msgid "bad value (%s) for -mabi= switch" + msgstr "ugyldig værdi (%s) til '-mabi='-tilvalget" + + #: config/mips/mips.c:4793 + #, c-format + msgid "-mabi=%s does not support -mips%d" + msgstr "-mabi=%s understøtter ikke -mips%d" + + #: config/mips/mips.c:4810 + msgid "The -mabi=32 support does not work yet." + msgstr "Understøttelsen af -mabi=32 virker ikke endnu" + + #: config/mips/mips.c:4814 + msgid "This target does not support the -mabi switch." + msgstr "Dette mål understøtter ikke '-mabi'-tilvalget." + + #: config/mips/mips.c:4948 + #, c-format + msgid "-mcpu=%s does not support -mips%d" + msgstr "-mcpu=%s understøtter ikke -mips%d" + + #: config/mips/mips.c:4955 + #, c-format + msgid "-mips%d does not support 64 bit fp registers" + msgstr "-mips%d understøtter ikke 64-bit kommatalsregistre" + + #: config/mips/mips.c:4961 + #, c-format + msgid "-mips%d does not support 64 bit gp registers" + msgstr "-mips%d understøtter ikke 64-bit almene registre" + + #: config/mips/mips.c:4982 + msgid "-G is incompatible with PIC code which is the default" + msgstr "" + + #: config/mips/mips.c:4998 + #, fuzzy + msgid "-membedded-pic and -mabicalls are incompatible" + msgstr "-mrelocatable og -mcall-%s er indbyrdes uforenelige." + + #: config/mips/mips.c:5001 + #, fuzzy + msgid "-G and -membedded-pic are incompatible" + msgstr "-pg og -fomit-frame-pointer er indbyrdes uforenelige" + + #: config/mips/mips.c:5052 + #, c-format + msgid "Invalid option `entry%s'" + msgstr "Ugyldigt tilvalg 'entry%s'" + + #: config/mips/mips.c:5055 + msgid "-mentry is only meaningful with -mips-16" + msgstr "" + + #: config/mips/mips.c:5388 + #, c-format + msgid "internal error: %%) found without a %%( in assembler pattern" + msgstr "intern fejl: %%) fundet uden en %%) i maskinkodeoversættermønster" + + #: config/mips/mips.c:5402 + #, c-format + msgid "internal error: %%] found without a %%[ in assembler pattern" + msgstr "intern fejl: %%] fundet uden en %%[ i maskinkodeoversættermønster" + + #: config/mips/mips.c:5415 + #, c-format + msgid "internal error: %%> found without a %%< in assembler pattern" + msgstr "intern fejl: %%> fundet uden en %%< i maskinkodeoversættermønster" + + #: config/mips/mips.c:5428 + #, c-format + msgid "internal error: %%} found without a %%{ in assembler pattern" + msgstr "intern fejl: %%} fundet uden en %%{ i maskinkodeoversættermønster" + + #: config/mips/mips.c:5442 + #, c-format + msgid "PRINT_OPERAND: Unknown punctuation '%c'" + msgstr "PRINT_OPERAND: Ukendt tegnsætning '%c'" + + #: config/mips/mips.c:5451 + msgid "PRINT_OPERAND null pointer" + msgstr "PRINT_OPERAND nul-henvisning" + + #: config/mips/mips.c:5579 + #, fuzzy, c-format + msgid "invalid use of %%d, %%x, or %%X" + msgstr "ugyldig brug af void-udtryk" + + #: config/mips/mips.c:5622 + msgid "PRINT_OPERAND_ADDRESS, null pointer" + msgstr "PRINT_OPERAND_ADDRESS, nul-henvisning" + + #: config/mips/mips.c:5826 f/com.c:14611 graph.c:421 java/jcf-parse.c:929 + #: java/jcf-parse.c:1065 java/lex.c:1726 objc/objc-act.c:733 profile.c:906 + #: profile.c:914 toplev.c:1875 toplev.c:2234 + #, fuzzy, c-format + msgid "can't open %s" + msgstr "fejl ved åbning af %s" + + #: config/mips/mips.c:5877 + msgid "MIPS ECOFF format does not allow changing filenames within functions with #line" + msgstr "" + + #: config/mips/mips.c:6076 + #, fuzzy, c-format + msgid "can't rewind %s" + msgstr "[kan ikke finde %s]" + + #: config/mips/mips.c:6080 + #, fuzzy, c-format + msgid "can't write to %s" + msgstr "fejl ved skrivning til %s" + + #: config/mips/mips.c:6083 + #, fuzzy, c-format + msgid "can't read from %s" + msgstr "Læser specifikationer fra %s\n" + + #: config/mips/mips.c:6086 java/jcf-parse.c:605 java/jcf-write.c:3341 + #, fuzzy, c-format + msgid "can't close %s" + msgstr "fejl ved lukning af %s" + + #: config/mips/mips.c:6455 + #, c-format + msgid "gp_offset (%ld) or end_offset (%ld) is less than zero." + msgstr "gp_offset (%ld) eller end_offset (%ld) er mindre end nul." + + #: config/mips/mips.c:6673 + #, c-format + msgid "fp_offset (%ld) or end_offset (%ld) is less than zero." + msgstr "fp_offset (%ld) eller end_offset (%ld) er mindre end nul." + + #: config/mips/mips.c:8744 + #, c-format + msgid "can not handle inconsistent calls to `%s'" + msgstr "kan ikke håndtere inkonsistente kald af '%s'" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/mips/mips.h:335 config/mn10300/mn10300.h:64 + msgid "No default crt0.o" + msgstr "" + + #: config/mips/mips.h:337 + msgid "Use 64-bit int type" + msgstr "" + + #: config/mips/mips.h:339 + msgid "Use 64-bit long type" + msgstr "" + + #: config/mips/mips.h:341 + msgid "Use 32-bit long type" + msgstr "" + + #: config/mips/mips.h:343 + msgid "Optimize lui/addiu address loads" + msgstr "" + + #: config/mips/mips.h:345 + msgid "Don't optimize lui/addiu address loads" + msgstr "" + + #: config/mips/mips.h:347 + msgid "Use MIPS as" + msgstr "" + + #: config/mips/mips.h:349 + msgid "Use GNU as" + msgstr "" + + #: config/mips/mips.h:351 + #, fuzzy + msgid "Use symbolic register names" + msgstr "ukendt registernavn '%s'" + + #: config/mips/mips.h:353 + msgid "Don't use symbolic register names" + msgstr "" + + #: config/mips/mips.h:355 config/mips/mips.h:357 + msgid "Use GP relative sdata/sbss sections" + msgstr "" + + #: config/mips/mips.h:359 config/mips/mips.h:361 + msgid "Don't use GP relative sdata/sbss sections" + msgstr "" + + #: config/mips/mips.h:363 + msgid "Output compiler statistics" + msgstr "" + + #: config/mips/mips.h:365 + msgid "Don't output compiler statistics" + msgstr "" + + #: config/mips/mips.h:367 + msgid "Don't optimize block moves" + msgstr "" + + #: config/mips/mips.h:369 + msgid "Optimize block moves" + msgstr "" + + #: config/mips/mips.h:371 + msgid "Use mips-tfile asm postpass" + msgstr "" + + #: config/mips/mips.h:373 + msgid "Don't use mips-tfile asm postpass" + msgstr "" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of triplets in braces, + #. each triplet being { "NAME", VALUE, DOC } + #. where VALUE is the bits to set or minus the bits to clear and DOC + #. is the documentation for --help (NULL if intentionally undocumented). + #. An empty string NAME is used to identify the default VALUE. + #: config/mips/mips.h:377 config/pdp11/pdp11.h:55 + #, fuzzy + msgid "Use hardware floating point" + msgstr "Brug hardware-kommatal" + + #: config/mips/mips.h:379 + msgid "Use 64-bit FP registers" + msgstr "" + + #: config/mips/mips.h:381 + msgid "Use 32-bit FP registers" + msgstr "" + + #: config/mips/mips.h:383 + msgid "Use 64-bit general registers" + msgstr "" + + #: config/mips/mips.h:385 + msgid "Use 32-bit general registers" + msgstr "" + + #: config/mips/mips.h:387 + msgid "Use Irix PIC" + msgstr "" + + #: config/mips/mips.h:389 + msgid "Don't use Irix PIC" + msgstr "" + + #: config/mips/mips.h:391 + msgid "Use OSF PIC" + msgstr "" + + #: config/mips/mips.h:393 + msgid "Don't use OSF PIC" + msgstr "" + + #: config/mips/mips.h:395 + msgid "Use indirect calls" + msgstr "" + + #: config/mips/mips.h:397 + msgid "Don't use indirect calls" + msgstr "" + + #: config/mips/mips.h:399 + msgid "Use embedded PIC" + msgstr "" + + #: config/mips/mips.h:401 + msgid "Don't use embedded PIC" + msgstr "" + + #: config/mips/mips.h:403 + msgid "Use ROM instead of RAM" + msgstr "" + + #: config/mips/mips.h:405 + msgid "Don't use ROM instead of RAM" + msgstr "" + + #: config/mips/mips.h:407 + msgid "Put uninitialized constants in ROM (needs -membedded-data)" + msgstr "" + + #: config/mips/mips.h:409 + msgid "Don't put uninitialized constants in ROM" + msgstr "" + + #: config/mips/mips.h:411 + msgid "Use big-endian byte order" + msgstr "" + + #: config/mips/mips.h:413 + msgid "Use little-endian byte order" + msgstr "" + + #: config/mips/mips.h:415 + msgid "Use single (32-bit) FP only" + msgstr "" + + #: config/mips/mips.h:417 + msgid "Don't use single (32-bit) FP only" + msgstr "" + + #: config/mips/mips.h:419 + msgid "Use multiply accumulate" + msgstr "" + + #: config/mips/mips.h:421 + msgid "Don't use multiply accumulate" + msgstr "" + + #: config/mips/mips.h:423 + msgid "Work around early 4300 hardware bug" + msgstr "" + + #: config/mips/mips.h:425 + msgid "Don't work around early 4300 hardware bug" + msgstr "" + + #: config/mips/mips.h:427 + msgid "Optimize for 4650" + msgstr "" + + #: config/mips/mips.h:429 + msgid "Optimize for 3900" + msgstr "" + + #: config/mips/mips.h:431 + msgid "Trap on integer divide by zero" + msgstr "" + + #: config/mips/mips.h:433 + msgid "Don't trap on integer divide by zero" + msgstr "" + + #: config/mips/mips.h:435 + msgid "Trap on integer divide overflow" + msgstr "" + + #: config/mips/mips.h:437 + msgid "Don't trap on integer divide overflow" + msgstr "" + + #. This macro is similar to `TARGET_SWITCHES' but defines names of + #. command options that have values. Its definition is an + #. initializer with a subgrouping for each command option. + #. + #. Each subgrouping contains a string constant, that defines the + #. fixed part of the option name, and the address of a variable. + #. The variable, type `char *', is set to the variable part of the + #. given option if the fixed part matches. The actual option name + #. is made by appending `-m' to the specified name. + #. + #. Here is an example which defines `-mshort-data-NUMBER'. If the + #. given option is `-mshort-data-512', the variable `m88k_short_data' + #. will be set to the string `"512"'. + #. + #. extern char *m88k_short_data; + #. #define TARGET_OPTIONS { { "short-data-", &m88k_short_data } } + #: config/mips/mips.h:562 + msgid "Specify CPU for scheduling purposes" + msgstr "" + + #: config/mips/mips.h:564 + msgid "Specify MIPS ISA" + msgstr "" + + #: config/mips/mips.h:566 + msgid "Use mips16 entry/exit psuedo ops" + msgstr "" + + #: config/mips/mips.h:568 + #, fuzzy + msgid "Don't use MIPS16 instructions" + msgstr "Se %s for instruktioner." + + #. Output assembler code to FILE to increment profiler label # LABELNO + #. for profiling a function entry. + #: config/mips/mips.h:2592 + msgid "mips16 function profiling" + msgstr "" + + #: config/mn10300/mn10300.h:59 + msgid "Work around hardware multiply bug" + msgstr "" + + #: config/mn10300/mn10300.h:60 + #, fuzzy + msgid "Do not work around hardware multiply bug" + msgstr "Brug ikke hardware-kommatal" + + #: config/mn10300/mn10300.h:61 + msgid "Target the AM33 processor" + msgstr "" + + #: config/nextstep.c:65 + msgid "optimization turned on" + msgstr "" + + #: config/nextstep.c:71 + msgid "optimization turned off" + msgstr "" + + #: config/nextstep.c:80 + #, fuzzy + msgid "optimization level restored" + msgstr "Oversættelse af inkluderingsfil udbedt" + + #: config/ns32k/ns32k.h:104 + #, fuzzy + msgid "Don't use hardware fp" + msgstr "Brug ikke hardware-kommatal" + + #: config/ns32k/ns32k.h:105 + #, fuzzy + msgid "Alternative calling convention" + msgstr "Alternativ kaldekonvention" + + #: config/ns32k/ns32k.h:107 + msgid "Pass some arguments in registers" + msgstr "" + + #: config/ns32k/ns32k.h:108 + msgid "Pass all arguments on stack" + msgstr "" + + #: config/ns32k/ns32k.h:109 + msgid "Optimize for 32532 cpu" + msgstr "" + + #: config/ns32k/ns32k.h:110 + msgid "Optimize for 32332 cpu" + msgstr "" + + #: config/ns32k/ns32k.h:112 + msgid "Optimize for 32032" + msgstr "" + + #: config/ns32k/ns32k.h:114 + msgid "Register sb is zero. Use for absolute addressing" + msgstr "" + + #: config/ns32k/ns32k.h:115 + #, fuzzy + msgid "Do not use register sb" + msgstr "Brug ikke hardware-kommatal" + + #: config/ns32k/ns32k.h:116 + #, fuzzy + msgid "Do not use bitfield instructions" + msgstr "Se %s for instruktioner." + + #: config/ns32k/ns32k.h:117 + #, fuzzy + msgid "Use bitfield instructions" + msgstr "Se %s for instruktioner." + + #: config/ns32k/ns32k.h:118 + #, fuzzy + msgid "Generate code for high memory" + msgstr "Generér kode til en given cpu" + + #: config/ns32k/ns32k.h:119 + #, fuzzy + msgid "Generate code for low memory" + msgstr "Generér kode til en given cpu" + + #: config/ns32k/ns32k.h:120 + msgid "32381 fpu" + msgstr "" + + #: config/ns32k/ns32k.h:121 + msgid "Use multiply-accumulate fp instructions" + msgstr "" + + #: config/ns32k/ns32k.h:123 + msgid "Do not use multiply-accumulate fp instructions" + msgstr "" + + #: config/ns32k/ns32k.h:124 + #, fuzzy + msgid "\"Small register classes\" kludge" + msgstr "Ugyldigt registerklassebogstav %c" + + #: config/ns32k/ns32k.h:125 + #, fuzzy + msgid "No \"Small register classes\" kludge" + msgstr "Ugyldigt registerklassebogstav %c" + + #: config/pa/pa.c:135 + #, c-format + msgid "" + "Unknown -mschedule= option (%s).\n" + "Valid options are 700, 7100, 7100LC, 7200, and 8000\n" + msgstr "" + + #: config/pa/pa.c:160 + #, c-format + msgid "" + "Unknown -march= option (%s).\n" + "Valid options are 1.0, 1.1, and 2.0\n" + msgstr "" + + #: config/pa/pa.c:165 + msgid "PIC code generation is not supported in the portable runtime model\n" + msgstr "" + + #: config/pa/pa.c:170 + msgid "PIC code generation is not compatible with fast indirect calls\n" + msgstr "" + + #: config/pa/pa.c:175 + msgid "PIC code generation is not compatible with profiling\n" + msgstr "" + + #: config/pa/pa.c:180 + msgid "-g is only supported when using GAS on this processor," + msgstr "" + + #: config/pa/pa.c:181 + #, fuzzy + msgid "-g option disabled." + msgstr "tilvalg slået til: " + + #: config/pdp11/pdp11.h:56 + #, fuzzy + msgid "Do not use hardware floating point" + msgstr "Brug ikke hardware-kommatal" + + #. return float result in ac0 + #: config/pdp11/pdp11.h:58 + msgid "Return floating point results in ac0" + msgstr "" + + #: config/pdp11/pdp11.h:59 + #, fuzzy + msgid "Return floating point results in memory" + msgstr "Ugyldigt tilvalg til kommatalsemulering: -mfpe-%s" + + #. is 11/40 + #: config/pdp11/pdp11.h:61 + #, fuzzy + msgid "Generate code for an 11/40" + msgstr "Generér kode til en given cpu" + + #. is 11/45 + #: config/pdp11/pdp11.h:64 + #, fuzzy + msgid "Generate code for an 11/45" + msgstr "Generér kode til en given cpu" + + #. is 11/10 + #: config/pdp11/pdp11.h:67 + #, fuzzy + msgid "Generate code for an 11/10" + msgstr "Generér kode til en given cpu" + + #. use movstrhi for bcopy + #. use 32 bit for int + #: config/pdp11/pdp11.h:72 config/pdp11/pdp11.h:73 + msgid "Use 32 bit int" + msgstr "" + + #: config/pdp11/pdp11.h:74 config/pdp11/pdp11.h:75 + msgid "Use 16 bit int" + msgstr "" + + #. use 32 bit for float + #: config/pdp11/pdp11.h:77 config/pdp11/pdp11.h:78 + msgid "Use 32 bit float" + msgstr "" + + #: config/pdp11/pdp11.h:79 config/pdp11/pdp11.h:80 + msgid "Use 64 bit float" + msgstr "" + + #. allow abshi pattern? - can trigger "optimizations" which make code SLOW! + #. is branching expensive - on a PDP, it's actually really cheap + #. this is just to play around and check what code gcc generates + #. split instruction and data memory? + #: config/pdp11/pdp11.h:89 + msgid "Target has split I&D" + msgstr "" + + #: config/pdp11/pdp11.h:90 + msgid "Target does not have split I&D" + msgstr "" + + #. UNIX assembler syntax? + #: config/pdp11/pdp11.h:92 + msgid "Use UNIX assembler syntax" + msgstr "" + + #: config/pdp11/pdp11.h:93 + msgid "Use DEC assembler syntax" + msgstr "" + + #: config/pj/pj.h:73 + msgid "Generate little endian data" + msgstr "" + + #: config/pj/pj.h:75 + msgid "Generate big endian data" + msgstr "" + + #: config/pj/pj.h:77 + msgid "Turn on maintainer testing code" + msgstr "" + + #: config/pj/pj.h:79 + msgid "Enable Transmeta picoJava extensions" + msgstr "" + + #: config/pj/pj.h:81 + msgid "Disable Transmeta picoJava extensions" + msgstr "" + + #: config/pj/pj.h:83 + msgid "Disable reorganization pass" + msgstr "" + + #: config/romp/romp.c:674 + #, c-format + msgid "invalid %%B value" + msgstr "ugyldig %%B-værdi" + + #: config/romp/romp.c:701 config/rs6000/rs6000.c:4106 + #, c-format + msgid "invalid %%S value" + msgstr "ugyldig %%S-værdi" + + #: config/romp/romp.c:710 config/romp/romp.c:717 + #, c-format + msgid "invalid %%b value" + msgstr "ugyldig %%b-værdi" + + #: config/romp/romp.c:738 config/romp/romp.c:745 + #, c-format + msgid "invalid %%H value" + msgstr "ugyldig %%H-værdi" + + #: config/romp/romp.c:757 config/romp/romp.c:768 + #, c-format + msgid "invalid %%z value" + msgstr "ugyldig %%z-værdi" + + #: config/romp/romp.c:776 config/romp/romp.c:784 + #, c-format + msgid "invalid %%Z value" + msgstr "ugyldig %%Z-værdi" + + #: config/romp/romp.c:791 config/romp/romp.c:800 config/romp/romp.c:807 + #: config/rs6000/rs6000.c:3888 + #, c-format + msgid "invalid %%k value" + msgstr "ugyldig %%k-værdi" + + #: config/romp/romp.c:892 config/romp/romp.c:935 + #, c-format + msgid "invalid %%j value" + msgstr "ugyldig %%j-værdi" + + #. Perform any needed actions needed for a function that is receiving a + #. variable number of arguments. + #. + #. CUM is as above. + #. + #. MODE and TYPE are the mode and type of the current parameter. + #. + #. PRETEND_SIZE is a variable that should be set to the amount of stack + #. that must be pushed by the prolog to pretend that our caller pushed + #. it. + #. + #. Normally, this macro will push all remaining incoming registers on the + #. stack and set PRETEND_SIZE to the length of the registers pushed. + #: config/romp/romp.h:661 + msgid "can't have varargs with -mfp-arg-in-fp-regs" + msgstr "kan ikke have variable parameterlister med -mfp-arg-in-fp-regs" + + #: config/rs6000/aix.h:303 config/rs6000/beos.h:30 + msgid "Always pass floating-point arguments in memory" + msgstr "" + + #: config/rs6000/aix.h:305 config/rs6000/beos.h:32 + msgid "Don't always pass floating-point arguments in memory" + msgstr "" + + #: config/rs6000/aix41.h:28 config/rs6000/aix43.h:32 config/rs6000/aix51.h:32 + msgid "Support message passing with the Parallel Environment" + msgstr "" + + #: config/rs6000/aix43.h:28 config/rs6000/aix51.h:28 + msgid "Compile for 64-bit pointers" + msgstr "" + + #: config/rs6000/aix43.h:30 config/rs6000/aix51.h:30 + msgid "Compile for 32-bit pointers" + msgstr "" + + #: config/rs6000/aix43.h:49 config/rs6000/aix51.h:49 + #, fuzzy + msgid "-maix64 and POWER architecture are incompatible." + msgstr "-fpic og -mapcs-reent er indbyrdes uforenelige" + + #: config/rs6000/aix43.h:54 config/rs6000/aix51.h:54 + msgid "-maix64 requires PowerPC64 architecture remain enabled." + msgstr "" + + #: config/rs6000/aix43.h:58 config/rs6000/aix51.h:58 + msgid "-maix64 required: 64-bit computation with 32-bit addressing not yet supported." + msgstr "-maix64 påkrævet: 64 bit-beregninger med 32 bit-adressering understøttes endnu ikke." + + #: config/rs6000/rs6000.c:341 + #, fuzzy + msgid "-mmultiple is not supported on little endian systems" + msgstr "-mcmodel= understøttes ikke på 32 bit-systemer" + + #: config/rs6000/rs6000.c:348 + #, fuzzy + msgid "-mstring is not supported on little endian systems" + msgstr "-mcmodel= understøttes ikke på 32 bit-systemer" + + #: config/rs6000/rs6000.c:354 + #, c-format + msgid "-f%s ignored for AIX (all code is position independent)" + msgstr "" + + #: config/rs6000/rs6000.c:362 + msgid "-ffunction-sections disabled on AIX when debugging" + msgstr "" + + #: config/rs6000/rs6000.c:368 + #, fuzzy + msgid "-fdata-sections not supported on AIX" + msgstr "-pipe understøttes ikke." + + #: config/rs6000/rs6000.c:382 + #, c-format + msgid "Unknown -mdebug-%s switch" + msgstr "Ukendt '-mdebug-%s'-tilvalg" + + #: config/rs6000/rs6000.c:3815 + #, c-format + msgid "invalid %%f value" + msgstr "ugyldig %%f-værdi" + + #: config/rs6000/rs6000.c:3824 + #, c-format + msgid "invalid %%F value" + msgstr "ugyldig %%F-værdi" + + #: config/rs6000/rs6000.c:3833 + #, c-format + msgid "invalid %%G value" + msgstr "ugyldig %%G-værdi" + + #: config/rs6000/rs6000.c:3868 + #, c-format + msgid "invalid %%j code" + msgstr "ugyldig %%j-kode" + + #: config/rs6000/rs6000.c:3878 + #, c-format + msgid "invalid %%J code" + msgstr "ugyldig %%J-kode" + + #: config/rs6000/rs6000.c:3908 + #, c-format + msgid "invalid %%K value" + msgstr "ugyldig %%K-værdi" + + #: config/rs6000/rs6000.c:4032 + #, c-format + msgid "invalid %%p value" + msgstr "ugyldig %%p-værdi" + + #: config/rs6000/rs6000.c:4069 + #, c-format + msgid "invalid %%q value" + msgstr "ugyldig %%q-værdi" + + #: config/rs6000/rs6000.c:4132 + #, c-format + msgid "%%S computed all 1's mask" + msgstr "%%S beregnede alle 1'eres maske" + + #: config/rs6000/rs6000.c:4159 + #, c-format + msgid "%%S computed all 0's mask" + msgstr "%%S beregnede alle 0'eres maske" + + #: config/rs6000/rs6000.c:4169 + #, fuzzy, c-format + msgid "invalid %%T value" + msgstr "ugyldig %%v-værdi" + + #: config/rs6000/rs6000.c:4179 + #, c-format + msgid "invalid %%u value" + msgstr "ugyldig %%u-værdi" + + #: config/rs6000/rs6000.c:4188 + #, c-format + msgid "invalid %%v value" + msgstr "ugyldig %%v-værdi" + + #: config/rs6000/rs6000.c:4261 + #, fuzzy, c-format + msgid "invalid %%W value" + msgstr "ugyldig %%v-værdi" + + #. Run-time compilation parameters selecting different hardware subsets. + #. + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/rs6000/rs6000.h:253 + #, fuzzy + msgid "Use POWER instruction set" + msgstr "Se %s for instruktioner." + + #: config/rs6000/rs6000.h:256 + #, fuzzy + msgid "Use POWER2 instruction set" + msgstr "Se %s for instruktioner." + + #: config/rs6000/rs6000.h:258 + #, fuzzy + msgid "Do not use POWER2 instruction set" + msgstr "Brug ikke push-instruktioner til at gemme udgående parametre" + + #: config/rs6000/rs6000.h:261 + #, fuzzy + msgid "Do not use POWER instruction set" + msgstr "Brug ikke push-instruktioner til at gemme udgående parametre" + + #: config/rs6000/rs6000.h:263 + #, fuzzy + msgid "Use PowerPC instruction set" + msgstr "Se %s for instruktioner." + + #: config/rs6000/rs6000.h:266 + #, fuzzy + msgid "Do not use PowerPC instruction set" + msgstr "Se %s for instruktioner." + + #: config/rs6000/rs6000.h:268 + msgid "Use PowerPC General Purpose group optional instructions" + msgstr "" + + #: config/rs6000/rs6000.h:270 + msgid "Don't use PowerPC General Purpose group optional instructions" + msgstr "" + + #: config/rs6000/rs6000.h:272 + msgid "Use PowerPC Graphics group optional instructions" + msgstr "" + + #: config/rs6000/rs6000.h:274 + msgid "Don't use PowerPC Graphics group optional instructions" + msgstr "" + + #: config/rs6000/rs6000.h:276 + #, fuzzy + msgid "Use PowerPC-64 instruction set" + msgstr "Se %s for instruktioner." + + #: config/rs6000/rs6000.h:278 + #, fuzzy + msgid "Don't use PowerPC-64 instruction set" + msgstr "Se %s for instruktioner." + + #: config/rs6000/rs6000.h:280 + msgid "Use new mnemonics for PowerPC architecture" + msgstr "" + + #: config/rs6000/rs6000.h:282 + msgid "Use old mnemonics for PowerPC architecture" + msgstr "" + + #: config/rs6000/rs6000.h:285 + msgid "Put everything in the regular TOC" + msgstr "" + + #: config/rs6000/rs6000.h:287 + #, fuzzy + msgid "Place floating point constants in TOC" + msgstr "forkert udformet kommatalskonstant" + + #: config/rs6000/rs6000.h:289 + msgid "Don't place floating point constants in TOC" + msgstr "" + + #: config/rs6000/rs6000.h:291 + msgid "Place symbol+offset constants in TOC" + msgstr "" + + #: config/rs6000/rs6000.h:293 + msgid "Don't place symbol+offset constants in TOC" + msgstr "" + + #: config/rs6000/rs6000.h:299 + msgid "Place variable addresses in the regular TOC" + msgstr "" + + #: config/rs6000/rs6000.h:305 + msgid "Generate load/store multiple instructions" + msgstr "" + + #: config/rs6000/rs6000.h:307 + msgid "Do not generate load/store multiple instructions" + msgstr "" + + #: config/rs6000/rs6000.h:311 + msgid "Generate string instructions for block moves" + msgstr "" + + #: config/rs6000/rs6000.h:313 + #, fuzzy + msgid "Do not generate string instructions for block moves" + msgstr "Generér ikke sin, cos, sqrt til fpu" + + #: config/rs6000/rs6000.h:317 + msgid "Generate load/store with update instructions" + msgstr "" + + #: config/rs6000/rs6000.h:319 + msgid "Do not generate load/store with update instructions" + msgstr "" + + #: config/rs6000/rs6000.h:321 + msgid "Generate fused multiply/add instructions" + msgstr "" + + #: config/rs6000/rs6000.h:323 + msgid "Don't generate fused multiply/add instructions" + msgstr "" + + #: config/rs6000/rs6000.h:327 + msgid "Don't schedule the start and end of the procedure" + msgstr "" + + #. This macro is similar to `TARGET_SWITCHES' but defines names of + #. command options that have values. Its definition is an + #. initializer with a subgrouping for each command option. + #. + #. Each subgrouping contains a string constant, that defines the + #. fixed part of the option name, and the address of a variable. + #. The variable, type `char *', is set to the variable part of the + #. given option if the fixed part matches. The actual option name + #. is made by appending `-m' to the specified name. + #. + #. Here is an example which defines `-mshort-data-NUMBER'. If the + #. given option is `-mshort-data-512', the variable `m88k_short_data' + #. will be set to the string `"512"'. + #. + #. extern char *m88k_short_data; + #. #define TARGET_OPTIONS { { "short-data-", &m88k_short_data } } + #: config/rs6000/rs6000.h:400 config/sparc/sparc.h:708 + #, fuzzy + msgid "Use features of and schedule code for given CPU" + msgstr "Planlæg koden til en given cpu" + + #: config/rs6000/rs6000.h:403 + msgid "Enable debug output" + msgstr "" + + #. Definitions for __builtin_return_address and __builtin_frame_address. + #. __builtin_return_address (0) should give link register (65), enable + #. this. + #. This should be uncommented, so that the link register is used, but + #. currently this would result in unmatched insns and spilling fixed + #. registers so we'll leave it for another day. When these problems are + #. taken care of one additional fetch will be necessary in RETURN_ADDR_RTX. + #. (mrs) + #. #define RETURN_ADDR_IN_PREVIOUS_FRAME + #. Number of bytes into the frame return addresses can be found. See + #. rs6000_stack_info in rs6000.c for more information on how the different + #. abi's store the return address. + #: config/rs6000/rs6000.h:1654 + msgid "RETURN_ADDRESS_OFFSET not supported" + msgstr "RETURN_ADDRESS_OFFSET er ikke understøttet" + + #: config/rs6000/sysv4.h:88 + #, fuzzy + msgid "Select ABI calling convention." + msgstr "Alternativ kaldekonvention" + + #: config/rs6000/sysv4.h:89 + msgid "Select method for sdata handling." + msgstr "" + + #: config/rs6000/sysv4.h:104 + msgid "Align to the base type of the bitfield." + msgstr "" + + #: config/rs6000/sysv4.h:106 + msgid "Don't align to the base type of the bitfield." + msgstr "" + + #: config/rs6000/sysv4.h:108 + msgid "Don't assume that unaligned accesses are handled by the system" + msgstr "" + + #: config/rs6000/sysv4.h:110 + msgid "Assume that unaligned accesses are handled by the system" + msgstr "" + + #: config/rs6000/sysv4.h:112 config/rs6000/sysv4.h:116 + msgid "Produce code relocatable at runtime." + msgstr "" + + #: config/rs6000/sysv4.h:114 config/rs6000/sysv4.h:118 + msgid "Don't produce code relocatable at runtime." + msgstr "" + + #: config/rs6000/sysv4.h:120 config/rs6000/sysv4.h:122 + msgid "Produce little endian code." + msgstr "" + + #: config/rs6000/sysv4.h:124 config/rs6000/sysv4.h:126 + msgid "Produce big endian code." + msgstr "" + + #: config/rs6000/sysv4.h:130 config/sparc/linux.h:84 + #: config/sparc/linux64.h:140 + msgid "Use 128 bit long doubles" + msgstr "" + + #: config/rs6000/sysv4.h:131 config/rs6000/sysv4.h:132 + #: config/rs6000/sysv4.h:133 config/rs6000/sysv4.h:134 + #: config/rs6000/sysv4.h:135 config/rs6000/sysv4.h:136 + #: config/rs6000/sysv4.h:143 config/rs6000/sysv4.h:144 + #: config/rs6000/sysv4.h:155 config/rs6000/sysv4.h:156 + #: config/rs6000/sysv4.h:157 config/rs6000/sysv4.h:159 + msgid "no description yet" + msgstr "" + + #: config/rs6000/sysv4.h:137 + msgid "Use EABI." + msgstr "" + + #: config/rs6000/sysv4.h:138 + msgid "Don't use EABI." + msgstr "" + + #: config/rs6000/sysv4.h:140 + #, fuzzy + msgid "Use alternate register names." + msgstr "ukendt registernavn '%s'" + + #: config/rs6000/sysv4.h:142 + msgid "Don't use alternate register names." + msgstr "" + + #: config/rs6000/sysv4.h:146 + msgid "Link with libsim.a, libc.a and sim-crt0.o." + msgstr "" + + #: config/rs6000/sysv4.h:148 + msgid "Link with libads.a, libc.a and crt0.o." + msgstr "" + + #: config/rs6000/sysv4.h:150 + msgid "Link with libyk.a, libc.a and crt0.o." + msgstr "" + + #: config/rs6000/sysv4.h:152 + msgid "Link with libmvme.a, libc.a and crt0.o." + msgstr "" + + #: config/rs6000/sysv4.h:154 + msgid "Set the PPC_EMB bit in the ELF flags header" + msgstr "" + + #. Sometimes certain combinations of command options do not make sense + #. on a particular target machine. You can define a macro + #. `OVERRIDE_OPTIONS' to take account of this. This macro, if + #. defined, is executed once just after all the command options have + #. been parsed. + #. + #. The macro SUBTARGET_OVERRIDE_OPTIONS is provided for subtargets, to + #. get control. + #: config/rs6000/sysv4.h:205 + #, c-format + msgid "Bad value for -mcall-%s" + msgstr "Ugyldig værdi til -mcall-%s" + + #: config/rs6000/sysv4.h:221 + #, c-format + msgid "Bad value for -msdata=%s" + msgstr "Ugyldig værdi til -msdata=%s" + + #: config/rs6000/sysv4.h:238 + #, c-format + msgid "-mrelocatable and -msdata=%s are incompatible." + msgstr "-mrelocatable og -msdata=%s er indbyrdes uforenelige" + + #: config/rs6000/sysv4.h:246 + #, c-format + msgid "-f%s and -msdata=%s are incompatible." + msgstr "-f%s og -msdata=%s er indbyrdes uforenelige." + + #: config/rs6000/sysv4.h:255 + #, c-format + msgid "-msdata=%s and -mcall-%s are incompatible." + msgstr "-msdata=%s og -mcall-%s er indbyrdes uforenelige." + + #: config/rs6000/sysv4.h:262 + msgid "-mrelocatable and -mno-minimal-toc are incompatible." + msgstr "-mrelocatable og -mno-minimal-toc er indbyrdes uforenelige." + + #: config/rs6000/sysv4.h:268 + #, c-format + msgid "-mrelocatable and -mcall-%s are incompatible." + msgstr "-mrelocatable og -mcall-%s er indbyrdes uforenelige." + + #: config/rs6000/sysv4.h:275 + #, c-format + msgid "-fPIC and -mcall-%s are incompatible." + msgstr "-fPIC og -mcall-%s er indbyrdes uforenelige." + + #: config/rs6000/sysv4.h:282 + msgid "-mcall-aixdesc must be big endian" + msgstr "-mcall-aixdesc skal være ordnet med de mest betydende byte først i hukommelsen (big endian)" + + #: config/sparc/sp64-elf.h:84 config/sparc/splet.h:29 + #, fuzzy + msgid "Generate code for big endian" + msgstr "Generér kode til en given cpu" + + #: config/sparc/sp64-elf.h:85 config/sparc/splet.h:30 + #, fuzzy + msgid "Generate code for little endian" + msgstr "Generér kode til en given cpu" + + #: config/sparc/sp86x-aout.h:53 config/sparc/sp86x-elf.h:66 + msgid "Use little-endian byte order for data" + msgstr "" + + #: config/sparc/sparc.c:253 + #, c-format + msgid "%s is not supported by this configuration" + msgstr "%s understøttes ikke af denne konfiguration" + + #: config/sparc/sparc.c:260 + msgid "-mlong-double-64 not allowed with -m64" + msgstr "-mlong-double-64 er ikke tilladt med -m64" + + #: config/sparc/sparc.c:280 + #, c-format + msgid "bad value (%s) for -mcmodel= switch" + msgstr "ugyldig værdi (%s) til '-mcmodel='tilvalget" + + #: config/sparc/sparc.c:285 + msgid "-mcmodel= is not supported on 32 bit systems" + msgstr "-mcmodel= understøttes ikke på 32 bit-systemer" + + #: config/sparc/sparc.c:366 + msgid "profiling does not support code models other than medlow" + msgstr "profilgenerering understøtter ikke andre kodemodeller end medlow" + + #: config/sparc/sparc.c:5712 config/sparc/sparc.c:5718 + #, c-format + msgid "Invalid %%Y operand" + msgstr "Ugyldig %%Y-operand" + + #: config/sparc/sparc.c:5788 + #, c-format + msgid "Invalid %%A operand" + msgstr "Ugyldig %%A-operand" + + #: config/sparc/sparc.c:5798 + #, c-format + msgid "Invalid %%B operand" + msgstr "Ugyldig %%B-operand" + + #: config/sparc/sparc.c:5837 + #, c-format + msgid "Invalid %%c operand" + msgstr "Ugyldig %%c-operand" + + #: config/sparc/sparc.c:5838 + #, c-format + msgid "Invalid %%C operand" + msgstr "Ugyldig %%C-operand" + + #: config/sparc/sparc.c:5859 + #, c-format + msgid "Invalid %%d operand" + msgstr "Ugyldig %%d-operand" + + #: config/sparc/sparc.c:5860 + #, c-format + msgid "Invalid %%D operand" + msgstr "Ugyldig %%D-operand" + + #: config/sparc/sparc.c:5878 + #, c-format + msgid "Invalid %%f operand" + msgstr "Ugyldig %%f-operand" + + #: config/sparc/sparc.c:5928 + msgid "long long constant not a valid immediate operand" + msgstr "long long-konstant er ikke en gyldig umiddelbar operand" + + #: config/sparc/sparc.c:5931 + msgid "floating point constant not a valid immediate operand" + msgstr "kommatalskonstant er ikke en gyldig umiddelbar operand" + + #. To make profiling work with -f{pic,PIC}, we need to emit the profiling + #. code into the rtl. Also, if we are profiling, we cannot eliminate + #. the frame pointer (because the return address will get smashed). + #: config/sparc/sparc.h:403 + #, c-format + msgid "%s and profiling conflict: disabling %s" + msgstr "" + + #: config/sparc/sparc.h:587 + msgid "Use FUNCTION_EPILOGUE" + msgstr "" + + #: config/sparc/sparc.h:589 + msgid "Do not use FUNCTION_EPILOGUE" + msgstr "" + + #: config/sparc/sparc.h:591 + msgid "Assume possible double misalignment" + msgstr "" + + #: config/sparc/sparc.h:593 + msgid "Assume all doubles are aligned" + msgstr "" + + #: config/sparc/sparc.h:595 + msgid "Pass -assert pure-text to linker" + msgstr "" + + #: config/sparc/sparc.h:597 + msgid "Do not pass -assert pure-text to linker" + msgstr "" + + #: config/sparc/sparc.h:599 + msgid "Use flat register window model" + msgstr "" + + #: config/sparc/sparc.h:601 + msgid "Do not use flat register window model" + msgstr "" + + #: config/sparc/sparc.h:603 + msgid "Use ABI reserved registers" + msgstr "" + + #: config/sparc/sparc.h:605 + msgid "Do not use ABI reserved registers" + msgstr "" + + #: config/sparc/sparc.h:607 + #, fuzzy + msgid "Use hardware quad fp instructions" + msgstr "Se %s for instruktioner." + + #: config/sparc/sparc.h:609 + #, fuzzy + msgid "Do not use hardware quad fp instructions" + msgstr "Brug ikke hardware-kommatal" + + #: config/sparc/sparc.h:611 + msgid "Compile for v8plus ABI" + msgstr "" + + #: config/sparc/sparc.h:613 + msgid "Do not compile for v8plus ABI" + msgstr "" + + #: config/sparc/sparc.h:615 + msgid "Utilize Visual Instruction Set" + msgstr "" + + #: config/sparc/sparc.h:617 + #, fuzzy + msgid "Do not utilize Visual Instruction Set" + msgstr "Integrér ikke alle kendte strengoperationer" + + #. ??? These are deprecated, coerced to -mcpu=. Delete in 2.9. + #: config/sparc/sparc.h:620 + msgid "Optimize for Cypress processors" + msgstr "" + + #: config/sparc/sparc.h:622 + msgid "Optimize for SparcLite processors" + msgstr "" + + #: config/sparc/sparc.h:624 + msgid "Optimize for F930 processors" + msgstr "" + + #: config/sparc/sparc.h:626 + msgid "Optimize for F934 processors" + msgstr "" + + #: config/sparc/sparc.h:628 + msgid "Use V8 Sparc ISA" + msgstr "" + + #: config/sparc/sparc.h:630 + msgid "Optimize for SuperSparc processors" + msgstr "" + + #. End of deprecated options. + #: config/sparc/sparc.h:633 + msgid "Pointers are 64-bit" + msgstr "" + + #: config/sparc/sparc.h:635 + msgid "Pointers are 32-bit" + msgstr "" + + #: config/sparc/sparc.h:637 + msgid "Use 32-bit ABI" + msgstr "" + + #: config/sparc/sparc.h:639 + msgid "Use 64-bit ABI" + msgstr "" + + #: config/sparc/sparc.h:641 + msgid "Use stack bias" + msgstr "" + + #: config/sparc/sparc.h:643 + #, fuzzy + msgid "Do not use stack bias" + msgstr "Brug ikke hardware-kommatal" + + #: config/sparc/sparc.h:645 + msgid "Use structs on stronger alignment for double-word copies" + msgstr "" + + #: config/sparc/sparc.h:647 + msgid "Do not use structs on stronger alignment for double-word copies" + msgstr "" + + #: config/sparc/sparc.h:649 + msgid "Optimize tail call instructions in assembler and linker" + msgstr "" + + #: config/sparc/sparc.h:651 + msgid "Do not optimize tail call instructions in assembler or linker" + msgstr "" + + #: config/sparc/sparc.h:712 + msgid "Use given Sparc code model" + msgstr "" + + #: config/v850/v850-c.c:68 + msgid "#pragma GHS endXXXX found without previous startXXX" + msgstr "" + + #: config/v850/v850-c.c:70 + msgid "#pragma GHS endXXX does not match previous startXXX" + msgstr "" + + #: config/v850/v850-c.c:95 + msgid "Cannot set interrupt attribute: no current function" + msgstr "" + + #: config/v850/v850-c.c:103 + msgid "Cannot set interrupt attribute: no such identifier" + msgstr "" + + #: config/v850/v850-c.c:149 + #, fuzzy + msgid "junk at end of #pragma ghs section" + msgstr "ragelse i slutningen af #%s" + + #: config/v850/v850-c.c:166 + #, fuzzy, c-format + msgid "unrecognised section name \"%s\"" + msgstr "ukendt registernavn '%s'" + + #: config/v850/v850-c.c:181 + #, fuzzy + msgid "malformed #pragma ghs section" + msgstr "forkert udformet #pragma-direktiv" + + #: config/v850/v850-c.c:201 + #, fuzzy + msgid "junk at end of #pragma ghs interrupt" + msgstr "ragelse i slutningen af #%s" + + #: config/v850/v850-c.c:213 + #, fuzzy + msgid "junk at end of #pragma ghs starttda" + msgstr "ragelse i slutningen af #%s" + + #: config/v850/v850-c.c:225 + #, fuzzy + msgid "junk at end of #pragma ghs startsda" + msgstr "ragelse i slutningen af #%s" + + #: config/v850/v850-c.c:237 + #, fuzzy + msgid "junk at end of #pragma ghs startzda" + msgstr "ragelse i slutningen af #%s" + + #: config/v850/v850-c.c:249 + #, fuzzy + msgid "junk at end of #pragma ghs endtda" + msgstr "ragelse i slutningen af #%s" + + #: config/v850/v850-c.c:261 + #, fuzzy + msgid "junk at end of #pragma ghs endsda" + msgstr "ragelse i slutningen af #%s" + + #: config/v850/v850-c.c:273 + #, fuzzy + msgid "junk at end of #pragma ghs endzda" + msgstr "ragelse i slutningen af #%s" + + #: config/v850/v850.c:107 + #, c-format + msgid "%s=%s is not numeric." + msgstr "%s=%s er ikke et tal." + + #: config/v850/v850.c:114 + #, c-format + msgid "%s=%s is too large." + msgstr "%s=%s er for stor." + + #: config/v850/v850.c:2039 + msgid "a data area attribute cannot be specified for local variables" + msgstr "" + + #: config/v850/v850.c:2047 + #, c-format + msgid "data area of '%s' conflicts with previous declaration" + msgstr "" + + #: config/v850/v850.c:2249 + #, c-format + msgid "Bogus JR construction: %d\n" + msgstr "Falsk JR-konstruktion: %d\n" + + #: config/v850/v850.c:2270 config/v850/v850.c:2472 + #, c-format + msgid "Bad amount of stack space removal: %d" + msgstr "Ugyldig størrelse af stakpladsfjernelse: %d" + + #: config/v850/v850.c:2448 + #, c-format + msgid "Bogus JARL construction: %d\n" + msgstr "Falsk JARL-konstruktion: %d\n" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/v850/v850.h:121 + msgid "Support Green Hills ABI" + msgstr "" + + #: config/v850/v850.h:124 + msgid "Prohibit PC relative function calls" + msgstr "" + + #: config/v850/v850.h:127 + msgid "Reuse r30 on a per function basis" + msgstr "" + + #: config/v850/v850.h:130 + msgid "Use stubs for function prologues" + msgstr "" + + #: config/v850/v850.h:133 + msgid "Same as: -mep -mprolog-function" + msgstr "" + + #: config/v850/v850.h:134 + #, fuzzy + msgid "Enable backend debugging" + msgstr "Aktivér stakprøvning" + + #: config/v850/v850.h:136 + msgid "Compile for the v850 processor" + msgstr "" + + #: config/v850/v850.h:139 + msgid "Use 4 byte entries in switch tables" + msgstr "" + + #. This macro is similar to `TARGET_SWITCHES' but defines names of + #. command options that have values. Its definition is an + #. initializer with a subgrouping for each command option. + #. + #. Each subgrouping contains a string constant, that defines the + #. fixed part of the option name, and the address of a variable. The + #. variable, type `char *', is set to the variable part of the given + #. option if the fixed part matches. The actual option name is made + #. by appending `-m' to the specified name. + #. + #. Here is an example which defines `-mshort-data-NUMBER'. If the + #. given option is `-mshort-data-512', the variable `m88k_short_data' + #. will be set to the string `"512"'. + #. + #. extern char *m88k_short_data; + #. #define TARGET_OPTIONS { { "short-data-", &m88k_short_data } } + #: config/v850/v850.h:183 + msgid "Set the max size of data eligible for the TDA area" + msgstr "" + + #: config/v850/v850.h:186 + msgid "Set the max size of data eligible for the SDA area" + msgstr "" + + #: config/v850/v850.h:189 + msgid "Set the max size of data eligible for the ZDA area" + msgstr "" + + #: convert.c:67 + msgid "cannot convert to a pointer type" + msgstr "kan ikke konverteres til en henvisningstype" + + #: convert.c:100 + msgid "pointer value used where a floating point value was expected" + msgstr "en henvisningsværdi er angivet hvor der forventedes en kommatalsværdi" + + #: convert.c:104 + msgid "aggregate value used where a float was expected" + msgstr "en værdi af en sammensat type er angivet hvor der forventedes et kommatal" + + #: convert.c:130 + msgid "conversion to incomplete type" + msgstr "konvertering til en ufuldstændig type" + + #: convert.c:390 convert.c:470 + msgid "can't convert between vector values of different size" + msgstr "" + + #: convert.c:396 + msgid "aggregate value used where an integer was expected" + msgstr "en værdi af en sammensat type er angivet hvor der forventedes et heltal" + + #: convert.c:448 f/com.c:1132 + msgid "pointer value used where a complex was expected" + msgstr "en henvisningsværdi er angivet hvor der forventedes et komplekst tal" + + #: convert.c:452 f/com.c:1134 + msgid "aggregate value used where a complex was expected" + msgstr "en værdi af en sammensat type er angivet hvor der forventedes et komplekst tal" + + #: convert.c:476 + #, fuzzy + msgid "can't convert value to a vector" + msgstr "kan ikke konverteres til en henvisningstype" + + #: cp/call.c:379 + #, fuzzy + msgid "unable to call pointer to member function here" + msgstr " i henvisning til medlemsfunktion-omdannelse" + + #: cp/call.c:509 + msgid "destructors take no parameters" + msgstr "destruktionsfunktioner kan ikke have parametre" + + #: cp/call.c:2867 + msgid "ISO C++ forbids omitting the middle term of a ?: expression" + msgstr "" + + #: cp/class.c:1438 + #, c-format + msgid "conflicting access specifications for field `%s', ignored" + msgstr "modstridende tilgangsanvisninger til feltet '%s', ignoreret" + + #: cp/class.c:5533 + msgid "trying to finish struct, but kicked out due to previous parse errors." + msgstr "forsøgte at afslutte struct, men blev stoppet af tidligere tolkningsfejl." + + #: cp/class.c:5988 + #, c-format + msgid "language string `\"%s\"' not recognized" + msgstr "sprogstrengen '\"%s\"' ikke genkendt" + + #: cp/class.c:6303 cp/class.c:6471 cp/class.c:6478 + msgid "not enough type information" + msgstr "ikke tilstrækkelig information om typen" + + #: cp/class.c:6455 + msgid "invalid operation on uninstantiated type" + msgstr "ugyldig operation på uudskiftet type" + + #: cp/class.c:8256 + msgid "object size exceeds built-in limit for virtual function table implementation" + msgstr "" + + #: cp/class.c:8258 + msgid "object size exceeds normal limit for virtual function table implementation, recompile all source and use -fhuge-objects" + msgstr "" + + #: cp/decl.c:4230 + #, fuzzy, c-format + msgid "declaration of `%s' shadows a member of `this'" + msgstr "'%s' erklæret som en tabel af void" + + #: cp/decl.c:4871 + #, c-format + msgid "label `%s' referenced outside of any function" + msgstr "der er blevet henvist til etiketten '%s' uden for en funktion" + + #: cp/decl.c:4976 cp/decl.c:5000 + msgid "jump to case label" + msgstr "" + + #: cp/decl.c:5007 cp/decl.c:5111 + msgid " enters try block" + msgstr " går ind i try-blok" + + #: cp/decl.c:5009 cp/decl.c:5113 + #, fuzzy + msgid " enters catch block" + msgstr " går ind i try-blok" + + #: cp/decl.c:5092 + msgid " from here" + msgstr "" + + #: cp/decl.c:6355 + #, fuzzy + msgid "the ABI requires vtable thunks" + msgstr "den nye binære grænseflade kræver virtuel tabel-afdelinger" + + #: cp/decl.c:6996 + msgid "multiple types in one declaration" + msgstr "flere typer i én erklæring" + + #: cp/decl.c:6999 + #, fuzzy + msgid "declaration does not declare anything" + msgstr "friend-erklæringen er ikke i klassedefinitionen" + + #: cp/decl.c:7023 + msgid "Missing type-name in typedef-declaration." + msgstr "" + + #: cp/decl.c:7030 + msgid "ISO C++ prohibits anonymous structs" + msgstr "" + + #: cp/decl.c:8018 + msgid "assignment (not initialization) in declaration" + msgstr "tildeling (ikke klargøring) i erklæring" + + #: cp/decl.c:8580 + msgid "invalid catch parameter" + msgstr "ugyldig catch-parameter" + + #: cp/decl.c:8807 + msgid "cannot declare `::main' to be a template" + msgstr "kan ikke erklære '::main' som et template" + + #: cp/decl.c:8809 + msgid "cannot declare `::main' to be inline" + msgstr "kan ikke erklære '::main' som inline" + + #: cp/decl.c:8811 + msgid "cannot declare `::main' to be static" + msgstr "kan ikke erklære '::main' som static" + + #: cp/decl.c:8814 + #, fuzzy + msgid "`main' must return `int'" + msgstr "'operator new' skal returnere typen 'void *'" + + #: cp/decl.c:9365 + msgid "overflow in array dimension" + msgstr "tabeldimension for stor" + + #: cp/decl.c:9651 + msgid "destructors must be member functions" + msgstr "destruktionsfunktioner skal være medlemmer" + + #: cp/decl.c:9980 + msgid "`bool' is now a keyword" + msgstr "'bool' er et reserveret ord" + + #: cp/decl.c:10011 + #, fuzzy + msgid "ISO C++ does not support `long long'" + msgstr "GNU C++ understøtter ikke -C uden -E" + + #: cp/decl.c:10133 + #, c-format + msgid "short, signed or unsigned invalid for `%s'" + msgstr "short, signed eller unsigned er ugyldig for '%s'" + + #: cp/decl.c:10138 + #, c-format + msgid "long and short specified together for `%s'" + msgstr "long og short er begge angivet for '%s'" + + #: cp/decl.c:10149 + #, c-format + msgid "signed and unsigned given together for `%s'" + msgstr "signed og unsigned er begge angivet for '%s'" + + #: cp/decl.c:10296 + msgid "storage class specifiers invalid in parameter declarations" + msgstr "lagringsklasseanvisninger er ugyldige i parametererklæringer" + + #: cp/decl.c:10300 + msgid "typedef declaration invalid in parameter declaration" + msgstr "typedef-erklæringer er ugyldig i parametererklæringer" + + #: cp/decl.c:10311 + msgid "virtual outside class declaration" + msgstr "virtual angivet uden for klasseerklæring" + + #: cp/decl.c:10365 + #, c-format + msgid "storage class specified for %s `%s'" + msgstr "lagringsklasse angivet for %s '%s'" + + #: cp/decl.c:10403 + msgid "storage class specifiers invalid in friend function declarations" + msgstr "lagringsklasseanvisninger er ugyldige i vennefunktionserklæringer" + + #: cp/decl.c:10585 + msgid "destructor cannot be static member function" + msgstr "destruktionsfunktionen kan ikke være en statisk medlemsfunktion" + + #: cp/decl.c:10609 + msgid "constructor cannot be static member function" + msgstr "konstruktionsfunktionen kan ikke være en statisk medlemsfunktion" + + #: cp/decl.c:10612 + #, fuzzy + msgid "constructors cannot be declared virtual" + msgstr "const '%s' kan ikke erklæres 'mutable'" + + #: cp/decl.c:10627 + msgid "return value type specifier for constructor ignored" + msgstr "angivelse af typen af returværdien til konstruktionsfunktionen ignoreres" + + #: cp/decl.c:10646 + #, c-format + msgid "can't initialize friend function `%s'" + msgstr "kan ikke klargøre vennefunktionen '%s'" + + #. Cannot be both friend and virtual. + #: cp/decl.c:10650 + msgid "virtual functions cannot be friends" + msgstr "en virtuel funktion kan ikke erklæres som friend" + + #: cp/decl.c:10655 + msgid "friend declaration not in class definition" + msgstr "friend-erklæringen er ikke i klassedefinitionen" + + #: cp/decl.c:10711 + #, c-format + msgid "cannot declare %s to references" + msgstr "kan ikke erklære %s til referencer" + + #: cp/decl.c:10737 + msgid "invalid type: `void &'" + msgstr "ugyldig type: 'void &'" + + #: cp/decl.c:10788 + #, fuzzy + msgid "discarding `const' applied to a reference" + msgstr "new kan ikke bruges på en referencetype" + + #: cp/decl.c:10790 + #, fuzzy + msgid "discarding `volatile' applied to a reference" + msgstr "new kan ikke bruges på en referencetype" + + #. [dcl.fct.spec] The explicit specifier shall only be used in + #. declarations of constructors within a class definition. + #: cp/decl.c:10997 + msgid "only declarations of constructors can be `explicit'" + msgstr "kun erklæringer af konstruktionsfunktioner kan være 'explicit'" + + #: cp/decl.c:11005 + #, c-format + msgid "non-member `%s' cannot be declared `mutable'" + msgstr "'%s' som ikke er medlem, kan ikke erklæres 'mutable'" + + #: cp/decl.c:11010 + #, c-format + msgid "non-object member `%s' cannot be declared `mutable'" + msgstr "'%s' som ikke er objektmedlem, kan ikke erklæres 'mutable'" + + #: cp/decl.c:11016 + #, c-format + msgid "function `%s' cannot be declared `mutable'" + msgstr "funktionen '%s' kan ikke erklæres 'mutable'" + + #: cp/decl.c:11021 + #, c-format + msgid "static `%s' cannot be declared `mutable'" + msgstr "static '%s' kan ikke erklæres 'mutable'" + + #: cp/decl.c:11026 + #, c-format + msgid "const `%s' cannot be declared `mutable'" + msgstr "const '%s' kan ikke erklæres 'mutable'" + + #: cp/decl.c:11131 + msgid "typedef declaration includes an initializer" + msgstr "typedef-erklæringen indeholder en startværdi" + + #: cp/decl.c:11241 + msgid "unnamed variable or field declared void" + msgstr "unavngiven variabel eller felt erklæret void" + + #: cp/decl.c:11250 + msgid "variable or field declared void" + msgstr "variabel eller felt erklæret void" + + #: cp/decl.c:11260 + msgid "cannot use `::' in parameter declaration" + msgstr "kan ikke bruge '::' i parametererklæring" + + #: cp/decl.c:11445 + #, c-format + msgid "`%s' is neither function nor member function; cannot be declared friend" + msgstr "'%s' er hverken en almindelig funktion eller en medlemsfunktion; kan ikke erklæres som friend" + + #: cp/decl.c:11456 + msgid "member functions are implicitly friends of their class" + msgstr "" + + #: cp/decl.c:11570 + #, c-format + msgid "storage class `auto' invalid for function `%s'" + msgstr "lagringsklassen 'auto' er ugyldig for funktionen '%s'" + + #: cp/decl.c:11572 + #, c-format + msgid "storage class `register' invalid for function `%s'" + msgstr "lagringsklassen 'register' er ugyldig for funktionen '%s'" + + #: cp/decl.c:11583 + #, fuzzy, c-format + msgid "storage class `static' invalid for function `%s' declared out of global scope" + msgstr "lagringsklassen 'auto' er ugyldig for funktionen '%s'" + + #: cp/decl.c:11585 + #, fuzzy, c-format + msgid "storage class `inline' invalid for function `%s' declared out of global scope" + msgstr "lagringsklassen 'register' er ugyldig for funktionen '%s'" + + #: cp/decl.c:11592 + #, c-format + msgid "virtual non-class function `%s'" + msgstr "virtuel funktion '%s' tilhører ikke en klasse" + + #. FIXME need arm citation + #: cp/decl.c:11627 + msgid "cannot declare static function inside another function" + msgstr "kan ikke erklære en funktion for static inden i en anden funktion" + + #: cp/decl.c:11904 + msgid "invalid integer constant in parameter list, did you forget to give parameter name?" + msgstr "ugyldig heltalskonstant i parameterlisten, måske mangler parameternavnet?" + + #: cp/decl.c:12281 + #, c-format + msgid "conversion to %s%s will never use a type conversion operator" + msgstr "" + + #: cp/decl.c:13365 + msgid "return type for `main' changed to `int'" + msgstr "" + + #: cp/decl2.c:569 + #, fuzzy, c-format + msgid "-f%s is no longer supported" + msgstr "-pipe understøttes ikke." + + #: cp/decl2.c:575 + msgid "-fhandle-exceptions has been renamed to -fexceptions (and is now on by default)" + msgstr "" + + #: cp/decl2.c:601 + msgid "-fname-mangling-version is no longer supported" + msgstr "" + + #: cp/decl2.c:664 + #, fuzzy + msgid "-Wno-strict-prototypes is not supported in C++" + msgstr "-pipe understøttes ikke." + + #: cp/decl2.c:1000 + msgid "name missing for member function" + msgstr "navn mangler for medlemsfunktion" + + #: cp/decl2.c:1061 + msgid "`__alignof__' applied to a bit-field" + msgstr "'__alignof__' brugt på et bitfelt" + + #. Something has gone very wrong. Assume we are mistakenly reducing + #. an expression instead of a declaration. + #: cp/decl2.c:1103 + msgid "parser may be lost: is there a '{' missing somewhere?" + msgstr "fortolkeren kan være faret vild: mangler der en '{' et eller andet sted?" + + #: cp/decl2.c:1134 cp/decl2.c:1148 + msgid "ambiguous conversion for array subscript" + msgstr "flertydig konvertering af tabelindeks" + + #: cp/decl2.c:1198 + #, fuzzy + msgid "anachronistic use of array size in vector delete" + msgstr "ukendt tabelstørrelse i delete" + + #: cp/decl2.c:1208 + msgid "cannot delete a function. Only pointer-to-objects are valid arguments to `delete'" + msgstr "kan ikke slette en funktion; kun henvisninger til objekter er gyldige parametre til 'delete'" + + #: cp/decl2.c:1505 + msgid "initializer invalid for static member with constructor" + msgstr "tildeling af startværdi er ugyldig for statisk medlem med konstruktionsfunktion" + + #: cp/decl2.c:1508 + msgid "(an out of class initialization is required)" + msgstr "" + + #: cp/decl2.c:1681 + msgid "field initializer is not constant" + msgstr "feltets startværdi er ikke en konstant" + + #: cp/decl2.c:2020 + msgid "anonymous struct not inside named type" + msgstr "anonym struct er ikke inden i en navngiven type" + + #: cp/decl2.c:2119 + msgid "namespace-scope anonymous aggregates must be static" + msgstr "anonyme variabler af sammensatte typer i navnerumsvirkefelt skal erklæres static" + + #: cp/decl2.c:2129 + #, fuzzy + msgid "anonymous aggregate with no members" + msgstr "en anonym union kan ikke have funktionsmedlemmer" + + #. Overflow occurred. That means there are at least 4 billion + #. initialization functions. + #: cp/decl2.c:2997 + #, fuzzy + msgid "too many initialization functions required" + msgstr "for mange parametre til funktionen" + + #: cp/decl2.c:3807 + msgid "use of old-style cast" + msgstr "" + + #: cp/error.c:46 + #, fuzzy, c-format + msgid "`%s' not supported by %s" + msgstr "-mips%d er ikke understøttet" + + #: cp/error.c:630 + #, c-format + msgid "" + msgstr "" + + #: cp/error.c:891 + #, c-format + msgid "(static %s for %s)" + msgstr "" + + #: cp/error.c:2528 + #, c-format + msgid "In %s `%s':" + msgstr "" + + #: cp/error.c:2583 + #, fuzzy, c-format + msgid "%s: In instantiation of `%s':\n" + msgstr "%s: fandt definitionen af '%s' ved %s(%d)\n" + + #: cp/error.c:2607 + #, c-format + msgid "%s:%d: instantiated from `%s'\n" + msgstr "" + + #: cp/error.c:2612 + #, c-format + msgid "%s:%d: instantiated from here\n" + msgstr "" + + #: cp/except.c:258 + #, fuzzy + msgid "call to Java `catch' or `throw' with `jthrowable' undefined" + msgstr "kald til Java 'catch' eller 'throw' mens 'jthrowable' ikke er defineret" + + #: cp/except.c:329 + #, fuzzy + msgid "mixing C++ and Java catches in a single translation unit" + msgstr "blander C++ og Java 'catch' i én oversættelsesenhed" + + #: cp/except.c:685 + msgid " in thrown expression" + msgstr " i kastet udtryk" + + #: cp/friend.c:423 + msgid "(if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) -Wno-non-template-friend disables this warning." + msgstr "" + + #: cp/g++spec.c:197 java/jvspec.c:357 + #, c-format + msgid "argument to `%s' missing\n" + msgstr "en parameter til '%s' mangler\n" + + #: cp/init.c:313 + msgid "initializer list treated as compound expression" + msgstr "" + + #: cp/init.c:428 + msgid " will be re-ordered to match declaration order" + msgstr "" + + #: cp/init.c:662 + msgid " will be re-ordered to match inheritance order" + msgstr "" + + #: cp/init.c:1105 + msgid "base class initializer specified, but no base class to initialize" + msgstr "stamklasse-klargøring angivet, men der er ingen stamklasse at klargøre" + + #: cp/init.c:1111 + msgid "initializer for unnamed base class ambiguous" + msgstr "klargøring af unavngiven stamklasse er flertydig" + + #: cp/init.c:1136 + msgid "no base class to initialize" + msgstr "ingen stamklasse at klargøre" + + #: cp/init.c:1860 + msgid "object missing in use of pointer-to-member construct" + msgstr "der mangler et objekt i henvisning til medlem-konstruktionen" + + #: cp/init.c:1902 cp/typeck.c:3186 cp/typeck.c:3287 + msgid "at this point in file" + msgstr "ved dette sted i filen" + + #: cp/init.c:2076 + msgid "new of array type fails to specify size" + msgstr "new virkende på en tabeltype mangler at angive størrelsen" + + #: cp/init.c:2087 + #, fuzzy + msgid "size in array new must have integral type" + msgstr "størrelsen af tabel '%s' er ikke af en heltalstype" + + #: cp/init.c:2093 + msgid "zero size array reserves no space" + msgstr "" + + #: cp/init.c:2158 + msgid "new cannot be applied to a reference type" + msgstr "new kan ikke bruges på en referencetype" + + #: cp/init.c:2164 + msgid "new cannot be applied to a function type" + msgstr "new kan ikke bruges på en funktionstype" + + #: cp/init.c:2211 + msgid "call to Java constructor, while `jclass' undefined" + msgstr "kald af Java-konstruktionsfunktion mens 'jclass' ikke er defineret" + + #: cp/init.c:2227 + #, fuzzy + msgid "Can't find class$" + msgstr "[kan ikke finde %s]" + + #: cp/init.c:2340 + msgid "invalid type `void' for new" + msgstr "ugyldig type 'void' til new" + + #: cp/init.c:2394 + #, fuzzy, c-format + msgid "call to Java constructor with `%s' undefined" + msgstr "kald af Java-konstruktionsfunktion mens '%s' ikke er defineret" + + #: cp/init.c:2522 cp/typeck2.c:381 cp/typeck2.c:1207 + msgid "initializer list being treated as compound expression" + msgstr "" + + #: cp/init.c:2528 + #, fuzzy + msgid "ISO C++ forbids aggregate initializer to new" + msgstr "ISO C++ forbyder sammenligninger af henvisningsvariabler og heltal" + + #: cp/init.c:2967 + msgid "initializer ends prematurely" + msgstr "startværdien slutter for tidligt" + + #: cp/init.c:3037 + #, fuzzy + msgid "cannot initialize multi-dimensional array with initializer" + msgstr "kan ikke tildele tabeller startværdier med denne syntaks" + + #: cp/init.c:3215 + msgid "unknown array size in delete" + msgstr "ukendt tabelstørrelse i delete" + + #: cp/init.c:3440 + msgid "type to vector delete is neither pointer or array type" + msgstr "variablen til tabel-delete er hverken af en henvisnings- eller en tabeltype" + + #: cp/lang-options.h:29 + msgid "Do not obey access control semantics" + msgstr "" + + #: cp/lang-options.h:31 + msgid "Change when template instances are emitted" + msgstr "" + + #: cp/lang-options.h:36 + msgid "Check the return value of new" + msgstr "" + + #: cp/lang-options.h:39 + msgid "Reduce size of object files" + msgstr "" + + #: cp/lang-options.h:43 + msgid "Make string literals `char[]' instead of `const char[]'" + msgstr "" + + #: cp/lang-options.h:46 + msgid "Dump the entire translation unit to a file" + msgstr "" + + #: cp/lang-options.h:48 + msgid "Do not inline member functions by default" + msgstr "" + + #: cp/lang-options.h:51 + #, fuzzy + msgid "Do not generate run time type descriptor information" + msgstr "ikke tilstrækkelig information om typen" + + #: cp/lang-options.h:56 + #, fuzzy + msgid "Do not generate code to check exception specifications" + msgstr "Justér ikke strengoperationernes destination" + + #: cp/lang-options.h:61 + msgid "Scope of for-init-statement vars extends outside" + msgstr "" + + #: cp/lang-options.h:64 + msgid "Do not recognise GNU defined keywords" + msgstr "" + + #: cp/lang-options.h:69 + msgid "Do not treat the namespace `std' as a normal namespace" + msgstr "" + + #: cp/lang-options.h:71 + msgid "Enable support for huge objects" + msgstr "" + + #: cp/lang-options.h:75 + #, fuzzy + msgid "Export functions even if they can be inlined" + msgstr "funktioner der bruger setjmp, kan ikke indbygges" + + #: cp/lang-options.h:78 + msgid "Only emit explicit template instatiations" + msgstr "" + + #: cp/lang-options.h:81 + msgid "Only emit explicit instatiations of inline templates" + msgstr "" + + #: cp/lang-options.h:87 + msgid "Don't pedwarn about uses of Microsoft extensions" + msgstr "" + + #: cp/lang-options.h:90 + msgid "Recognise and/bitand/bitor/compl/not/or/xor" + msgstr "" + + #: cp/lang-options.h:94 + msgid "Disable optional diagnostics" + msgstr "" + + #: cp/lang-options.h:96 + msgid "Downgrade conformance errors to warnings" + msgstr "" + + #: cp/lang-options.h:99 + msgid "Enable automatic template instantiation" + msgstr "" + + #: cp/lang-options.h:104 + msgid "Display statistics accumulated during compilation" + msgstr "" + + #: cp/lang-options.h:107 + msgid "Specify maximum template instantiation depth" + msgstr "" + + #: cp/lang-options.h:109 + msgid "Use __cxa_atexit to register destructors." + msgstr "" + + #: cp/lang-options.h:112 + msgid "Discard unused virtual functions" + msgstr "" + + #: cp/lang-options.h:115 + msgid "Implement vtables using thunks" + msgstr "" + + #: cp/lang-options.h:118 + msgid "Emit common-like symbols as weak symbols" + msgstr "" + + #: cp/lang-options.h:121 + msgid "Emit cross referencing information" + msgstr "" + + #: cp/lang-options.h:125 + msgid "Warn about inconsistent return types" + msgstr "" + + #: cp/lang-options.h:128 + msgid "Warn about overloaded virtual function names" + msgstr "" + + #: cp/lang-options.h:132 + msgid "Don't warn when all ctors/dtors are private" + msgstr "" + + #: cp/lang-options.h:134 + msgid "Warn about non virtual destructors" + msgstr "" + + #: cp/lang-options.h:137 + #, fuzzy + msgid "Warn when a function is declared extern, then inline" + msgstr "indlejret funktion '%s' er erklæret 'extern'" + + #: cp/lang-options.h:140 + msgid "Warn when the compiler reorders code" + msgstr "" + + #: cp/lang-options.h:143 + msgid "Warn when synthesis behaviour differs from Cfront" + msgstr "" + + #: cp/lang-options.h:147 + #, fuzzy + msgid "Don't warn when type converting pointers to member functions" + msgstr " i henvisning til medlemsfunktion-omdannelse" + + #: cp/lang-options.h:149 + msgid "Warn about violations of Effective C++ style rules" + msgstr "" + + #: cp/lang-options.h:152 + msgid "Warn when overload promotes from unsigned to signed" + msgstr "" + + #: cp/lang-options.h:155 + msgid "Warn if a C style cast is used in a program" + msgstr "" + + #: cp/lang-options.h:159 + msgid "Don't warn when non-templatized friend functions are declared within a template" + msgstr "" + + #: cp/lang-options.h:162 + msgid "Don't announce deprecation of compiler features" + msgstr "" + + #: cp/lex.c:148 + msgid "type name expected before `*'" + msgstr "der forventedes et typenavn før '*'" + + #: cp/lex.c:170 + msgid "cannot declare references to references" + msgstr "kan ikke erklære referencer til referencer" + + #: cp/lex.c:175 + msgid "cannot declare pointers to references" + msgstr "kan ikke erklære henvisninger til referencer" + + #: cp/lex.c:179 + msgid "type name expected before `&'" + msgstr "der forventedes et typenavn før '&'" + + #: cp/lex.c:1018 + #, c-format + msgid "semicolon missing after %s declaration" + msgstr "semikolon mangler efter %s erklæringen" + + #: cp/lex.c:1069 + #, fuzzy, c-format + msgid "junk at end of #pragma %s" + msgstr "ragelse i slutningen af #%s" + + #: cp/lex.c:1076 + #, fuzzy, c-format + msgid "invalid #pragma %s" + msgstr "ugyldig #pragma-enhed" + + #: cp/lex.c:1166 + #, c-format + msgid "#pragma implementation for %s appears after file is included" + msgstr "'#pragma implementation' til %s optræder efter filen er inkluderet" + + #: cp/lex.c:1191 + msgid "junk at end of #pragma GCC java_exceptions" + msgstr "" + + #: cp/lex.c:1292 + msgid "(Each undeclared identifier is reported only once for each function it appears in.)" + msgstr "(et kaldenavn der ikke er erklæret, rapporteres kun én gang per funktion)" + + #: cp/lex.c:1315 + #, fuzzy, c-format + msgid "name lookup of `%s' changed" + msgstr "opslaget af '%s' er ændret på grund af ISO definitionen af 'for'-virkefeltet" + + #: cp/lex.c:1329 cp/lex.c:1336 + #, c-format + msgid "name lookup of `%s' changed for new ISO `for' scoping" + msgstr "opslaget af '%s' er ændret på grund af ISO definitionen af 'for'-virkefeltet" + + #: cp/mangle.c:1877 + msgid "real-valued template parameters when cross-compiling" + msgstr "" + + #: cp/method.c:173 + #, fuzzy + msgid "methods cannot be converted to function pointers" + msgstr "new kan ikke bruges på en funktionstype" + + #: cp/method.c:178 + #, c-format + msgid "ambiguous request for method pointer `%s'" + msgstr "flertydig forespørgsel efter medlemsfunktionshenvisningen '%s'" + + #: cp/parse.y:670 + msgid "invalid default template argument" + msgstr "ugyldig standardparameter i skabelon" + + #: cp/parse.y:879 + #, fuzzy + msgid "no base or member initializers given following ':'" + msgstr "ingen stamklasseklargøringer er angivet efter ':'" + + #: cp/parse.y:892 + msgid "base initializers not allowed for non-member functions" + msgstr "stamklasseklargøringer er ikke tilladt for ikke-medlemsfunktioner" + + #: cp/parse.y:894 + msgid "only constructors take base initializers" + msgstr "kun konstruktionsfunktioner har stamklasseklargøringer" + + #: cp/parse.y:927 cp/parse.y:933 + #, fuzzy + msgid "anachronistic old style base class initializer" + msgstr "ingen stamklasse at klargøre" + + #. Handle `Class>' without space in the `>>' + #: cp/parse.y:1055 + msgid "`>>' should be `> >' in template class name" + msgstr "" + + #: cp/parse.y:1112 cp/parse.y:1121 + #, c-format + msgid "ISO C++ forbids an empty condition for `%s'" + msgstr "ISO C++ forbyder en tom betingelse til '%s'" + + #: cp/parse.y:1216 + msgid "ISO C++ forbids `&&'" + msgstr "" + + #: cp/parse.y:1300 + msgid "ISO C++ forbids initialization of new expression with `='" + msgstr "" + + #: cp/parse.y:1331 + #, fuzzy + msgid "ISO C++ forbids compound literals" + msgstr "ISO C++ forbyder en tom betingelse til '%s'" + + #: cp/parse.y:1566 + msgid "ISO C++ forbids braced-groups within expressions" + msgstr "" + + #: cp/parse.y:1972 cp/parse.y:1987 + msgid "sigof type specifier" + msgstr "" + + #: cp/parse.y:1977 + msgid "`sigof' applied to non-aggregate expression" + msgstr "'sigof' benyttet på et udtryk der ikke er af en sammensat type" + + #: cp/parse.y:1992 + msgid "`sigof' applied to non-aggregate type" + msgstr "'sigof' benyttet på en type der ikke er sammensat" + + #: cp/parse.y:2332 + #, c-format + msgid "storage class specifier `%s' not allowed after struct or class" + msgstr "lagringsklasseangivelsen '%s' er ikke tilladt efter struct eller class" + + #: cp/parse.y:2334 + #, c-format + msgid "type specifier `%s' not allowed after struct or class" + msgstr "typeangivelsen '%s' er ikke tilladt efter struct eller class" + + #: cp/parse.y:2336 + #, c-format + msgid "type qualifier `%s' not allowed after struct or class" + msgstr "typemodifikationen '%s' er ikke tilladt efter struct eller class" + + #: cp/parse.y:2338 + msgid "no body nor ';' separates two class, struct or union declarations" + msgstr "der er hverken en krop eller et semikolon mellem to class, struct eller union-erklæringer" + + #: cp/parse.y:2503 + msgid "multiple access specifiers" + msgstr "mere end én tilgangsangivelse" + + #: cp/parse.y:2521 + msgid "multiple `virtual' specifiers" + msgstr "mere end én 'virtual'-angivelse" + + #: cp/parse.y:2556 + msgid "missing ';' before right brace" + msgstr "der mangler et semikolon før en højre krøllet parantes" + + #: cp/parse.y:2779 + msgid "ISO C++ forbids array dimensions with parenthesized type in new" + msgstr "" + + #: cp/parse.y:3288 + #, fuzzy + msgid "ISO C++ forbids label declarations" + msgstr "ISO C++ forbyder en tom betingelse til '%s'" + + #: cp/parse.y:3450 + #, fuzzy + msgid "ISO C++ forbids computed gotos" + msgstr "ISO C++ forbyder en tom betingelse til '%s'" + + #: cp/parse.y:3458 + msgid "label must be followed by statement" + msgstr "etiketten skal efterfølges af en sætning" + + #: cp/parse.y:3557 + #, fuzzy + msgid "ISO C++ forbids compound statements inside for initializations" + msgstr "ISO C++ forbyder sammenligninger af henvisningsvariabler og heltal" + + #. This helps us recover from really nasty + #. parse errors, for example, a missing right + #. parenthesis. + #: cp/parse.y:3640 cp/parse.y:3650 + msgid "possibly missing ')'" + msgstr "muligvis mangler en ')'" + + #: cp/parse.y:3747 cp/parse.y:3752 + msgid "type specifier omitted for parameter" + msgstr "typeangivelsen er ikke angivet for parameteren" + + #: cp/pt.c:6316 + msgid "creating array with size zero" + msgstr "" + + #: cp/pt.c:6830 + #, fuzzy, c-format + msgid "use of `%s' in template" + msgstr "størrelsen af tabel '%s' er negativ" + + #: cp/pt.c:8036 + msgid "incomplete type unification" + msgstr "ufuldstændig typeforening" + + #: cp/pt.c:8966 + #, fuzzy, c-format + msgid "use of `%s' in template type unification" + msgstr "ufuldstændig typeforening" + + #: cp/repo.c:272 + msgid "-frepo must be used with -c" + msgstr "" + + #: cp/repo.c:366 + #, c-format + msgid "mysterious repository information in %s" + msgstr "mystisk opbevaringsstedinformation i '%s'" + + #: cp/repo.c:381 + #, c-format + msgid "can't create repository information file `%s'" + msgstr "kan ikke oprette opbevaringsstedinformationsfilen '%s'" + + #: cp/rtti.c:224 + msgid "taking dynamic typeid of object with -fno-rtti" + msgstr "forsøg på at finde den dynamiske typeid af et objekt med -fno-rtti" + + #: cp/rtti.c:260 + msgid "cannot use typeid with -fno-rtti" + msgstr "kan ikke bruge typeid med -fno-rtti" + + #: cp/rtti.c:266 cp/rtti.c:415 + msgid "must #include before using typeid" + msgstr "'#include ' er nødvendig før typeid kan benyttes" + + #: cp/search.c:1961 + msgid "adjusting pointers for covariant returns" + msgstr "" + + #. This shouldn't happen, I don't want errors! + #: cp/search.c:2469 + msgid "recoverable compiler error, fixups for virtual function" + msgstr "" + + #: cp/semantics.c:1026 + #, fuzzy + msgid "ISO C++ does not permit named return values" + msgstr "ISO C tillader ikke navngivne variabel parameterliste-makroer" + + #: cp/semantics.c:1043 + #, fuzzy + msgid "can't redefine default return value for constructors" + msgstr "returnerer en værdi fra en konstruktionsfunktion" + + #: cp/semantics.c:1112 + msgid " will be re-ordered to precede member initializations" + msgstr "" + + #: cp/semantics.c:1385 + #, fuzzy + msgid "`this' is unavailable for static member functions" + msgstr "destruktionsfunktionen kan ikke være en statisk medlemsfunktion" + + #: cp/semantics.c:1391 + #, fuzzy + msgid "invalid use of `this' in non-member function" + msgstr "ugyldig brug af '%s' på henvisning til medlem" + + #: cp/semantics.c:1393 + #, fuzzy + msgid "invalid use of `this' at top level" + msgstr "ugyldig brug af '%s' på henvisning til medlem" + + #: cp/semantics.c:1678 + #, fuzzy + msgid "template type parameters must use the keyword `class' or `typename'" + msgstr " en skabelonstypeparameter skal begynde med 'class' eller 'typename'" + + #: cp/spew.c:249 + #, c-format + msgid "identifier name `%s' conflicts with GNU C++ internal naming strategy" + msgstr "" + + #: cp/spew.c:357 + msgid "parse error" + msgstr "tolkningsfejl" + + #: cp/spew.c:1023 cp/spew.c:1295 + msgid "parse error at end of saved function text" + msgstr "tolkningsfejl ved slutningen af gemt funktionstekst" + + #: cp/spew.c:1065 + msgid "parse error in method specification" + msgstr "tolkningsfejl i medlemsfunktionsangivelsen" + + #: cp/spew.c:1107 + msgid "function body for constructor missing" + msgstr "kroppen til konstruktionsfunktionen mangler" + + #: cp/spew.c:1500 + #, c-format + msgid "%s before `%s'" + msgstr "%s før '%s'" + + #: cp/spew.c:1502 + #, fuzzy, c-format + msgid "%s before `%c'" + msgstr "%s før '%s'" + + #: cp/spew.c:1504 + #, fuzzy, c-format + msgid "%s before `\\%o'" + msgstr "%s før '%s'" + + #: cp/spew.c:1507 + #, fuzzy, c-format + msgid "%s before `%s' token" + msgstr "%s før '%s'" + + #: cp/tree.c:216 + #, c-format + msgid "non-lvalue in %s" + msgstr "ikke venstreværdi i %s" + + #: cp/tree.c:2232 + msgid "`java_interface' attribute can only be applied to Java class definitions" + msgstr "" + + #: cp/tree.c:2242 + msgid "`com_interface' only supported with -fvtable-thunks" + msgstr "'com_interface' understøttes kun med -fvtable-thunks" + + #: cp/tree.c:2251 + msgid "`com_interface' attribute can only be applied to class definitions" + msgstr "" + + #: cp/tree.c:2267 + msgid "requested init_priority is not an integer constant" + msgstr "den udbedte init_priority er ikke en heltalskonstant" + + #: cp/tree.c:2287 + msgid "can only use init_priority attribute on file-scope definitions of objects of class type" + msgstr "kan kun bruge init_priority-egenskaben på filvirkefeltsdefinitioner af objekter af class-type" + + #: cp/tree.c:2293 + msgid "requested init_priority is out of range" + msgstr "den udbedte init_priority er uden for det gyldige interval" + + #: cp/tree.c:2302 + #, fuzzy + msgid "requested init_priority is reserved for internal use" + msgstr "den udbedte init_priority er uden for det gyldige interval" + + #: cp/tree.c:2312 + #, fuzzy + msgid "init_priority attribute is not supported on this platform" + msgstr "integrerede kommatalskonstanter er ikke understøttede på denne vært" + + #: cp/typeck.c:483 + #, fuzzy, c-format + msgid "ISO C++ forbids %s between pointer of type `void *' and pointer-to-function" + msgstr "ISO C++ forbyder sammenligninger af henvisningsvariabler og heltal" + + #: cp/typeck.c:1558 + #, fuzzy + msgid "ISO C++ forbids applying `sizeof' to a function type" + msgstr "ISO C++ forbyder omtvingelse af typen til en tabeltype" + + #: cp/typeck.c:1564 + #, fuzzy + msgid "ISO C++ forbids applying `sizeof' to a member function" + msgstr "ISO C++ forbyder omtvingelse af typen til en tabeltype" + + #: cp/typeck.c:1570 + msgid "ISO C++ forbids applying `sizeof' to type `void' which is an incomplete type" + msgstr "" + + #: cp/typeck.c:1619 + msgid "sizeof applied to a bit-field" + msgstr "sizeof benyttet på et bitfelt" + + #: cp/typeck.c:1622 + #, fuzzy + msgid "ISO C++ forbids applying `sizeof' to an expression of function type" + msgstr "ISO C++ forbyder omtvingelse af typen til en tabeltype" + + #: cp/typeck.c:2235 + msgid "invalid reference to NULL ptr, use ptr-to-member instead" + msgstr "ugyldig reference til NULL-henvisning, benyt en henvisning til medlem i stedet" + + #: cp/typeck.c:2398 + #, c-format + msgid "invalid use of `%s' on pointer to member" + msgstr "ugyldig brug af '%s' på henvisning til medlem" + + #: cp/typeck.c:2404 + msgid "invalid type argument" + msgstr "ugyldig typeparameter" + + #: cp/typeck.c:2507 + #, fuzzy + msgid "ISO C++ forbids subscripting non-lvalue array" + msgstr "ISO C++ forbyder omtvingelse af typen til en tabeltype" + + #: cp/typeck.c:2518 + #, fuzzy + msgid "subscripting array declared `register'" + msgstr "'register' er påhæftet funktionsdefinitionen" + + #: cp/typeck.c:2693 cp/typeck.c:2833 + msgid "pointer to member function called, but not in class scope" + msgstr "henvisning til medlem-funktion kaldt, men ikke i klassevirkefelt" + + #: cp/typeck.c:2831 + msgid "invalid call to member function needing `this' in static member function scope" + msgstr "ugyldigt kald af medlemsfunktion som har brug for 'this', i et statisk medlemsfunktionsvirkefelt" + + #: cp/typeck.c:3021 + #, fuzzy + msgid "ISO C++ forbids calling `::main' from within program" + msgstr "ISO C++ forbyder omtvingelse af typen til en tabeltype" + + #: cp/typeck.c:3225 + msgid "parameter type of called function is incomplete" + msgstr "parametertypen af den kaldte funktion er ufuldstændig" + + #: cp/typeck.c:3615 + #, c-format + msgid "%s rotate count is negative" + msgstr "" + + #: cp/typeck.c:3618 + #, c-format + msgid "%s rotate count >= width of type" + msgstr "" + + #: cp/typeck.c:3649 cp/typeck.c:3654 cp/typeck.c:3745 cp/typeck.c:3750 + msgid "ISO C++ forbids comparison between pointer and integer" + msgstr "ISO C++ forbyder sammenligninger af henvisningsvariabler og heltal" + + #: cp/typeck.c:3966 + #, fuzzy + msgid "comparison between signed and unsigned integer expressions" + msgstr "ISO C++ forbyder sammenligninger af henvisningsvariabler og heltal" + + #: cp/typeck.c:4105 + #, fuzzy + msgid "ISO C++ forbids using pointer of type `void *' in pointer arithmetic" + msgstr "ugyldig brug af en henvisning til en ufuldstændig type i henvisningsberegningen" + + #: cp/typeck.c:4111 + #, fuzzy + msgid "ISO C++ forbids using a pointer-to-function in pointer arithmetic" + msgstr "ugyldig brug af en henvisning til en ufuldstændig type i henvisningsberegningen" + + #: cp/typeck.c:4117 + #, fuzzy + msgid "ISO C++ forbids using a pointer to member function in pointer arithmetic" + msgstr " i henvisning til medlemsfunktion-omdannelse" + + #: cp/typeck.c:4123 + #, fuzzy + msgid "ISO C++ forbids using pointer to a member in pointer arithmetic" + msgstr "ugyldig brug af en henvisning til en ufuldstændig type i henvisningsberegningen" + + #: cp/typeck.c:4194 + msgid "ISO C++ forbids using pointer of type `void *' in subtraction" + msgstr "" + + #: cp/typeck.c:4196 + #, fuzzy + msgid "ISO C++ forbids using pointer to a function in subtraction" + msgstr " i henvisning til medlemsfunktion-omdannelse" + + #: cp/typeck.c:4198 + #, fuzzy + msgid "ISO C++ forbids using pointer to a method in subtraction" + msgstr "ISO C++ forbyder omtvingelse af typen til en tabeltype" + + #: cp/typeck.c:4200 + #, fuzzy + msgid "ISO C++ forbids using pointer to a member in subtraction" + msgstr " i henvisning til medlem-omdannelse" + + #: cp/typeck.c:4212 + msgid "invalid use of a pointer to an incomplete type in pointer arithmetic" + msgstr "ugyldig brug af en henvisning til en ufuldstændig type i henvisningsberegningen" + + #: cp/typeck.c:4317 + msgid "taking address of temporary" + msgstr "" + + #: cp/typeck.c:4517 + #, fuzzy, c-format + msgid "ISO C++ forbids %sing an enum" + msgstr "ISO C++ forbyder omtvingelse af typen til en tabeltype" + + #: cp/typeck.c:4561 + msgid "cast to non-reference type used as lvalue" + msgstr "" + + #. ARM $3.4 + #: cp/typeck.c:4628 + #, fuzzy + msgid "ISO C++ forbids taking address of function `::main'" + msgstr "ISO C++ forbyder en tom betingelse til '%s'" + + #: cp/typeck.c:4721 + #, fuzzy + msgid "ISO C++ forbids taking the address of a cast to a non-lvalue expression" + msgstr "kan ikke finde adressen af 'this' som er et højreværdiudtryk" + + #: cp/typeck.c:4737 + msgid "unary `&'" + msgstr "unær '&'" + + #: cp/typeck.c:4929 + #, fuzzy + msgid "cannot take the address of `this', which is an rvalue expression" + msgstr "kan ikke finde adressen af 'this' som er et højreværdiudtryk" + + #: cp/typeck.c:5232 + #, fuzzy + msgid "ISO C++ forbids casting between pointer-to-function and pointer-to-object" + msgstr "ISO C++ forbyder sammenligninger af henvisningsvariabler og heltal" + + #: cp/typeck.c:5682 + #, fuzzy + msgid "ISO C++ forbids cast to non-reference type used as lvalue" + msgstr "ISO C++ forbyder omtvingelse af typen til en tabeltype" + + #: cp/typeck.c:5788 + #, fuzzy + msgid "ISO C++ forbids assignment of arrays" + msgstr "ISO C++ forbyder omtvingelse af typen til en tabeltype" + + #: cp/typeck.c:5803 + msgid "return value from function receives multiple initializations" + msgstr "" + + #: cp/typeck.c:5946 + msgid " in pointer to member function conversion" + msgstr " i henvisning til medlemsfunktion-omdannelse" + + #: cp/typeck.c:5954 + msgid " in pointer to member conversion" + msgstr " i henvisning til medlem-omdannelse" + + #: cp/typeck.c:6542 + msgid "returning reference to temporary" + msgstr "" + + #: cp/typeck.c:6549 + msgid "reference to non-lvalue returned" + msgstr "" + + #: cp/typeck.c:6595 + msgid "returning a value from a destructor" + msgstr "returnerer en værdi fra en destruktionsfunktion" + + #. If a return statement appears in a handler of the + #. function-try-block of a constructor, the program is ill-formed. + #: cp/typeck.c:6603 + msgid "cannot return from a handler of a function-try-block of a constructor" + msgstr "kan ikke returnere fra en håndtering af en funktions-try-blok i en konstruktionsfunktion" + + #. You can't return a value from a constructor. + #: cp/typeck.c:6606 + msgid "returning a value from a constructor" + msgstr "returnerer en værdi fra en konstruktionsfunktion" + + #: cp/typeck.c:6623 + msgid "return-statement with no value, in function declared with a non-void return type" + msgstr "" + + #: cp/typeck.c:6639 + msgid "return-statement with a value, in function declared with a void return type" + msgstr "" + + #: cp/typeck2.c:171 + #, fuzzy + msgid " because the following virtual functions are abstract:" + msgstr " eftersom de følgende virtuelle funktioner er abstrakte:" + + #: cp/typeck2.c:268 + #, fuzzy, c-format + msgid "Internal error #%d." + msgstr "intern fejl: " + + #: cp/typeck2.c:339 + msgid "due to the presence of a constructor" + msgstr "pga. af tilstedeværelsen af en konstruktionsfunktion" + + #: cp/typeck2.c:363 + msgid "comma expression used to initialize return value" + msgstr "" + + #: cp/typeck2.c:372 + msgid "cannot initialize arrays using this syntax" + msgstr "kan ikke tildele tabeller startværdier med denne syntaks" + + #: cp/typeck2.c:428 + msgid "ANSI C++ forbids non-constant aggregate initializer expressions" + msgstr "" + + #: cp/typeck2.c:503 + msgid "initializing array with parameter list" + msgstr "klargører tabel med en parameterliste" + + #: cp/typeck2.c:559 + msgid "initializer for scalar variable requires one element" + msgstr "startværdien for en skalarvariabel kan kun bestå af ét element" + + #: cp/typeck2.c:657 + #, fuzzy + msgid "aggregate has a partly bracketed initializer" + msgstr "krøllede paranteser uden noget imellem i startværdi" + + #: cp/typeck2.c:687 cp/typeck2.c:788 + #, fuzzy + msgid "non-trivial labeled initializers" + msgstr "ugyldig startværdi" + + #: cp/typeck2.c:704 + msgid "non-empty initializer for array of empty elements" + msgstr "en startværdi der ikke er tom, tildeles til en tabel med tomme elementer" + + #: cp/typeck2.c:754 + msgid "initializer list for object of class with virtual base classes" + msgstr "" + + #: cp/typeck2.c:760 + msgid "initializer list for object of class with base classes" + msgstr "" + + #: cp/typeck2.c:766 + #, fuzzy + msgid "initializer list for object using virtual functions" + msgstr "startværdien for kommatal er ikke en kommatalskonstant" + + #: cp/typeck2.c:883 + msgid "index value instead of field name in union initializer" + msgstr "indeksværdi i stedet for feltnavn i union-startværdi" + + #: cp/typeck2.c:939 + #, fuzzy + msgid "excess elements in aggregate initializer" + msgstr "for mange elementer i tabelstartværdi" + + #: cp/typeck2.c:1037 + msgid "circular pointer delegation detected" + msgstr "fundet en henvisningsefterfølgelse der går i ring" + + #: cp/typeck2.c:1064 + msgid "result of `operator->()' yields non-pointer result" + msgstr "resultatet af 'operator->()' er ikke en henvisning" + + #: cp/typeck2.c:1066 + msgid "base operand of `->' is not a pointer" + msgstr "basisoperanden til '->' er ikke en henvisning" + + #: cp/typeck2.c:1258 + #, fuzzy, c-format + msgid "ISO C++ forbids defining types within %s" + msgstr "ISO C++ forbyder en tom betingelse til '%s'" + + #: cp/xref.c:833 + #, c-format + msgid "Can't create cross-reference file `%s'" + msgstr "Kan ikke oprette krydsreferencefilen '%s'" + + #. The current line in each outer source file is now the + #. same as the line of the #include. + #: cpperror.c:55 + #, c-format + msgid "In file included from %s:%u" + msgstr "I filen inkluderet af %s:%u" + + #. Translators note: this message is used in conjunction + #. with "In file included from %s:%ld" and some other + #. tricks. We want something like this: + #. + #. | In file included from sys/select.h:123, + #. | from sys/types.h:234, + #. | from userfile.c:31: + #. | bits/select.h:45: + #. + #. with all the "from"s lined up. + #. The trailing comma is at the beginning of this message, + #. and the trailing colon is not translated. + #: cpperror.c:71 + #, c-format + msgid "" + ",\n" + " from %s:%u" + msgstr "" + ",\n" + " af %s:%u" + + #: cpperror.c:188 + msgid "internal error: " + msgstr "intern fejl: " + + #: cpperror.c:195 + msgid "warning: " + msgstr "advarsel: " + + #: cpperror.c:309 cpperror.c:480 cppfiles.c:661 gcc.c:6076 tradcpp.c:4722 + #, c-format + msgid "%s: %s" + msgstr "%s: %s" + + #: cppexp.c:209 + msgid "traditional C rejects the `U' suffix" + msgstr "" + + #: cppexp.c:212 + msgid "too many 'l' suffixes in integer constant" + msgstr "for mange 'l'-suffikser i heltalskonstant" + + #: cppexp.c:216 + msgid "integer constant contains digits beyond the radix" + msgstr "heltalskonstanten indeholder cifre der er større end grundtallet" + + #: cppexp.c:219 + msgid "integer constant out of range" + msgstr "heltalskonstanten er uden for det gyldige interval" + + #: cppexp.c:225 + msgid "integer constant is so large that it is unsigned" + msgstr "heltalskonstanten er så stor at den er unsigned" + + #: cppexp.c:234 + #, fuzzy, c-format + msgid "invalid suffix '%.*s' on integer constant" + msgstr "for mange 'l'-suffikser i heltalskonstant" + + #: cppexp.c:343 + msgid "missing ')' after \"defined\"" + msgstr "" + + #: cppexp.c:350 + #, fuzzy + msgid "operator \"defined\" requires an identifier" + msgstr "symbolet efter #undef er ikke et kaldenavn" + + #: cppexp.c:358 + #, c-format + msgid "(\"%s\" is an alternative token for \"%s\" in C++)" + msgstr "" + + #: cppexp.c:427 + msgid "\"defined\" operator appears during macro expansion" + msgstr "" + + #: cppexp.c:443 + #, fuzzy, c-format + msgid "ISO C++ does not permit \"%s\" in #if" + msgstr "ISO C tillader ikke navngivne variabel parameterliste-makroer" + + #: cppexp.c:458 + #, fuzzy, c-format + msgid "\"%s\" is not defined" + msgstr "'%.*s' er ikke defineret" + + #: cppexp.c:550 + msgid "octal escape sequence out of range" + msgstr "den oktale undvigesekvens er uden for det gyldige interval" + + #: cppexp.c:583 + msgid "hex escape sequence out of range" + msgstr "den hexadecimale undvigesekvens er uden for det gyldige interval" + + #: cppexp.c:598 + msgid "integer overflow in preprocessor expression" + msgstr "heltallet løber over i forbehandlerudtrykket" + + #: cppexp.c:868 + #, c-format + msgid "impossible operator '%s'" + msgstr "" + + #: cppexp.c:978 + msgid "comma operator in operand of #if" + msgstr "kommeoperator i en operand til #if" + + #: cppfiles.c:383 + #, c-format + msgid "%s is too large" + msgstr "%s er for stor" + + #: cppfiles.c:412 + #, fuzzy, c-format + msgid "%s is shorter than expected" + msgstr "%s er kortere end forventet\n" + + #: cppfiles.c:421 + #, c-format + msgid "%s is a block device" + msgstr "%s er en blokenhed" + + #: cppfiles.c:541 + #, c-format + msgid "No include path in which to find %s" + msgstr "Der er ingen inkluderingssti at finde %s i" + + #: cppfiles.c:609 + msgid "Multiple include guards may be useful for:\n" + msgstr "" + + #: cppfiles.c:999 + msgid "absolute file name in remap_filename" + msgstr "" + + #: cppinit.c:223 + #, fuzzy, c-format + msgid "ignoring nonexistent directory \"%s\"\n" + msgstr "ignorerer det ikkeeksisterende katalog '%s'\n" + + #: cppinit.c:229 + #, c-format + msgid "%s: Not a directory" + msgstr "%s: ikke et katalog" + + #: cppinit.c:275 + #, fuzzy, c-format + msgid "ignoring duplicate directory \"%s\"\n" + msgstr "ignorerer mere end én angivelse af kataloget '%s'\n" + + #: cppinit.c:889 + msgid "-include and -imacros cannot be used with -fpreprocessed" + msgstr "" + + #: cppinit.c:925 + msgid "#include \"...\" search starts here:\n" + msgstr "#include \"...\"-søgning begynder her:\n" + + #: cppinit.c:929 + msgid "#include <...> search starts here:\n" + msgstr "#include <...>-søgning begynder her:\n" + + #: cppinit.c:932 + msgid "End of search list.\n" + msgstr "Slut på søgningslisten.\n" + + #: cppinit.c:1004 tradcpp.c:963 tradcpp.c:973 tradcpp.c:1064 + msgid "I/O error on output" + msgstr "I/O-fejl på uddata" + + #: cppinit.c:1018 + msgid "buffers still stacked in cpp_finish" + msgstr "mellemlagre er stadig stakket op i cpp_finish" + + #. Irix6 "cc -n32" and OSF4 cc have problems with char foo[] = ("string"); + #. I.e. a const string initializer with parens around it. That is + #. what N_("string") resolves to, so we make no_* be macros instead. + #: cppinit.c:1050 + #, c-format + msgid "Argument missing after %s" + msgstr "En parameter mangler efter %s" + + #: cppinit.c:1051 + #, c-format + msgid "Assertion missing after %s" + msgstr "Et postulat mangler efter %s" + + #: cppinit.c:1052 + #, c-format + msgid "Directory name missing after %s" + msgstr "Et katalognavn mangler efter %s" + + #: cppinit.c:1053 + #, c-format + msgid "File name missing after %s" + msgstr "Et filnavn mangler efter %s" + + #: cppinit.c:1054 + #, c-format + msgid "Macro name missing after %s" + msgstr "Et makronavn mangler efter %s" + + #: cppinit.c:1055 + #, c-format + msgid "Path name missing after %s" + msgstr "Navnet på en sti mangler efter %s" + + #: cppinit.c:1056 + #, c-format + msgid "Number missing after %s" + msgstr "Et tal mangler efter %s" + + #: cppinit.c:1057 + #, fuzzy, c-format + msgid "Target missing after %s" + msgstr "En parameter mangler efter %s" + + #: cppinit.c:1242 + #, fuzzy, c-format + msgid "Too many filenames. Type %s --help for usage info" + msgstr "For mange parametre. Brugsvejledning fås ved '%s --help'" + + #: cppinit.c:1426 tradcpp.c:598 + msgid "Output filename specified twice" + msgstr "Uddatafilnavnet er angivet to gange" + + #: cppinit.c:1546 + msgid "-I- specified twice" + msgstr "-I- er angivet to gange" + + #: cppinit.c:1694 + #, fuzzy, c-format + msgid "GNU CPP version %s (cpplib)" + msgstr "GNU CPP version %s (cpplib)\n" + + #: cppinit.c:1735 tradcpp.c:787 + #, fuzzy + msgid "you must additionally specify either -M or -MM" + msgstr "-MG skal angives sammen med en af -M eller -MM" + + #: cppinit.c:1795 + #, c-format + msgid "Usage: %s [switches] input output\n" + msgstr "Brug: %s [tilvalg] inddata uddata\n" + + #. To keep the lines from getting too long for some compilers, limit + #. to about 500 characters (6 lines) per chunk. + #: cppinit.c:1798 + msgid "" + "Switches:\n" + " -include Include the contents of before other files\n" + " -imacros Accept definition of macros in \n" + " -iprefix Specify as a prefix for next two options\n" + " -iwithprefix Add to the end of the system include path\n" + " -iwithprefixbefore Add to the end of the main include path\n" + " -isystem Add to the start of the system include path\n" + msgstr "" + + #: cppinit.c:1807 + msgid "" + " -idirafter Add to the end of the system include path\n" + " -I Add to the end of the main include path\n" + " -I- Fine-grained include path control; see info docs\n" + " -nostdinc Do not search system include directories\n" + " (dirs specified with -isystem will still be used)\n" + " -nostdinc++ Do not search system include directories for C++\n" + " -o Put output into \n" + msgstr "" + + #: cppinit.c:1816 + msgid "" + " -pedantic Issue all warnings demanded by strict ISO C\n" + " -pedantic-errors Issue -pedantic warnings as errors instead\n" + " -trigraphs Support ISO C trigraphs\n" + " -lang-c Assume that the input sources are in C\n" + " -lang-c89 Assume that the input sources are in C89\n" + msgstr "" + + #: cppinit.c:1823 + msgid "" + " -lang-c++ Assume that the input sources are in C++\n" + " -lang-objc Assume that the input sources are in ObjectiveC\n" + " -lang-objc++ Assume that the input sources are in ObjectiveC++\n" + " -lang-asm Assume that the input sources are in assembler\n" + msgstr "" + + #: cppinit.c:1829 + msgid "" + " -std= Specify the conformance standard; one of:\n" + " gnu89, gnu99, c89, c99, iso9899:1990,\n" + " iso9899:199409, iso9899:1999\n" + " -+ Allow parsing of C++ style features\n" + " -w Inhibit warning messages\n" + " -Wtrigraphs Warn if trigraphs are encountered\n" + " -Wno-trigraphs Do not warn about trigraphs\n" + " -Wcomment{s} Warn if one comment starts inside another\n" + msgstr "" + + #: cppinit.c:1839 + msgid "" + " -Wno-comment{s} Do not warn about comments\n" + " -Wtraditional Warn about features not present in traditional C\n" + " -Wno-traditional Do not warn about traditional C\n" + " -Wundef Warn if an undefined macro is used by #if\n" + " -Wno-undef Do not warn about testing undefined macros\n" + " -Wimport Warn about the use of the #import directive\n" + msgstr "" + + #: cppinit.c:1847 + msgid "" + " -Wno-import Do not warn about the use of #import\n" + " -Werror Treat all warnings as errors\n" + " -Wno-error Do not treat warnings as errors\n" + " -Wsystem-headers Do not suppress warnings from system headers\n" + " -Wno-system-headers Suppress warnings from system headers\n" + " -Wall Enable all preprocessor warnings\n" + msgstr "" + + #: cppinit.c:1855 + msgid "" + " -M Generate make dependencies\n" + " -MM As -M, but ignore system header files\n" + " -MF Write dependency output to the given file\n" + " -MG Treat missing header file as generated files\n" + msgstr "" + + #: cppinit.c:1861 + msgid "" + " -MP\t\t\t Generate phony targets for all headers\n" + " -MQ Add a MAKE-quoted target\n" + " -MT Add an unquoted target\n" + msgstr "" + + #: cppinit.c:1866 + msgid "" + " -D Define a with string '1' as its value\n" + " -D= Define a with as its value\n" + " -A () Assert the to \n" + " -A- () Disable the to \n" + " -U Undefine \n" + " -v Display the version number\n" + msgstr "" + + #: cppinit.c:1874 + msgid "" + " -H Print the name of header files as they are used\n" + " -C Do not discard comments\n" + " -dM Display a list of macro definitions active at end\n" + " -dD Preserve macro definitions in output\n" + " -dN As -dD except that only the names are preserved\n" + " -dI Include #include directives in the output\n" + msgstr "" + + #: cppinit.c:1882 + msgid "" + " -fpreprocessed Treat the input file as already preprocessed\n" + " -ftabstop= Distance between tab stops for column reporting\n" + " -P Do not generate #line directives\n" + " -$ Do not allow '$' in identifiers\n" + " -remap Remap file names when including files.\n" + " --version Display version information\n" + " -h or --help Display this information\n" + msgstr "" + + #: cpplex.c:159 + #, c-format + msgid "trigraph ??%c converted to %c" + msgstr "trigrafen ??%c konverteret til %c" + + #: cpplex.c:167 + #, c-format + msgid "trigraph ??%c ignored" + msgstr "trigrafen ??%c ignoreret" + + #: cpplex.c:251 + msgid "backslash and newline separated by space" + msgstr "omvendt skråstreg og linjeskift er adskilt af mellemrum" + + #: cpplex.c:255 + #, fuzzy + msgid "backslash-newline at end of file" + msgstr "ingen linjeskift ved slutningen af filen" + + #: cpplex.c:330 + #, fuzzy + msgid "\"/*\" within comment" + msgstr "'/*' i en kommentar" + + #: cpplex.c:416 + #, fuzzy + msgid "null character(s) ignored" + msgstr "indlejrede nultegn ignoreret" + + #: cpplex.c:423 + #, c-format + msgid "%s in preprocessing directive" + msgstr "%s i forbehandlerdirektiv" + + #: cpplex.c:507 + #, fuzzy + msgid "'$' character(s) in identifier" + msgstr "'$'-tegn optræder i kaldenavn" + + #: cpplex.c:521 + #, fuzzy, c-format + msgid "attempt to use poisoned \"%s\"" + msgstr "forsøg på at bruge forgiftet '%s'" + + #: cpplex.c:527 + msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro" + msgstr "" + + #: cpplex.c:597 + #, c-format + msgid "missing terminating %c character" + msgstr "manglende afsluttende '%c'-tegn" + + #: cpplex.c:604 + msgid "possible start of unterminated string literal" + msgstr "muligvis begyndelsen af uafsluttet strengkonstant" + + #: cpplex.c:697 + #, fuzzy + msgid "multi-line string literals are deprecated" + msgstr "flerlinjers strengkonstant" + + #: cpplex.c:708 + #, fuzzy + msgid "null character(s) preserved in literal" + msgstr "nultegn bevaret" + + #: cpplex.c:881 + msgid "no newline at end of file" + msgstr "ingen linjeskift ved slutningen af filen" + + #: cpplex.c:1002 tradcpp.c:1447 + msgid "unterminated comment" + msgstr "uafsluttet kommentar" + + #: cpplex.c:1016 + msgid "C++ style comments are not allowed in ISO C89" + msgstr "kommentarer i C++-stil er ikke tilladt i ISO C89" + + #: cpplex.c:1018 + msgid "(this will be reported only once per input file)" + msgstr "(dette rapporteres kun en enkelt gang per inddatafil)" + + #: cpplex.c:1026 + msgid "multi-line comment" + msgstr "flerlinjers kommentar" + + #: cpplex.c:1188 + #, fuzzy + msgid "directives may not be used inside a macro argument" + msgstr "#%s må ikke optræde i en makroparameter" + + #: cpplex.c:1343 + #, fuzzy, c-format + msgid "Unspellable token %s" + msgstr "Symbol kan ikke staves" + + #: cpplib.c:214 + #, c-format + msgid "extra tokens at end of #%s directive" + msgstr "" + + #: cpplib.c:303 + msgid "# followed by integer" + msgstr "'#' efterfølges af et heltal" + + #: cpplib.c:352 + msgid "suggest not using #elif in traditional C" + msgstr "" + + #: cpplib.c:355 + #, c-format + msgid "traditional C ignores #%s with the # indented" + msgstr "traditionel C ignorerer #%s når '#' er indrykket" + + #: cpplib.c:359 + #, c-format + msgid "suggest hiding #%s from traditional C with an indented #" + msgstr "foreslår at skjule #%s fra traditionel C vha. indrykket '#'" + + #: cpplib.c:369 + #, c-format + msgid "#%s is a GCC extension" + msgstr "" + + #: cpplib.c:393 + #, c-format + msgid "invalid preprocessing directive #%s" + msgstr "ugyldigt forbehandlerdirektiv #%s" + + #: cpplib.c:454 + #, c-format + msgid "no macro name given in #%s directive" + msgstr "" + + #: cpplib.c:458 + #, c-format + msgid "\"%s\" cannot be used as a macro name as it is an operator in C++" + msgstr "" + + #: cpplib.c:461 + #, fuzzy + msgid "macro names must be identifiers" + msgstr "Et makronavn mangler efter %s" + + #: cpplib.c:470 + #, fuzzy, c-format + msgid "\"%s\" cannot be used as a macro name" + msgstr "#%s må ikke optræde i en makroparameter" + + #: cpplib.c:508 + #, fuzzy, c-format + msgid "undefining \"%s\"" + msgstr "glemmer definitionen af '%s'" + + #: cpplib.c:552 + #, fuzzy + msgid "missing terminating > character" + msgstr "manglende afsluttende '%c'-tegn" + + #: cpplib.c:590 + #, c-format + msgid "#%s expects \"FILENAME\" or " + msgstr "#%s forventer \"FILNAVN\" eller " + + #: cpplib.c:599 + #, c-format + msgid "empty file name in #%s" + msgstr "tomt filnavn i #%s" + + #: cpplib.c:627 + #, fuzzy + msgid "#include nested too deeply" + msgstr "makro eller '#include'-rekursion er for dyb" + + #: cpplib.c:629 + msgid "attempt to push file buffer with contexts stacked" + msgstr "" + + #: cpplib.c:636 + msgid "#include_next in primary source file" + msgstr "#include_next i den primære kildekodefil" + + #: cpplib.c:660 + msgid "#import is obsolete, use an #ifndef wrapper in the header file" + msgstr "#import er forældet, brug en #ifndef-indpakning i inkluderingsfilen" + + #: cpplib.c:696 + #, fuzzy, c-format + msgid "invalid flag \"%s\" in line directive" + msgstr "ugyldigt '#pragma poison'-direktiv" + + #: cpplib.c:748 + #, fuzzy, c-format + msgid "\"%s\" after #line is not a positive integer" + msgstr "symbolet efter #line er ikke et heltal" + + #: cpplib.c:754 + #, fuzzy + msgid "line number out of range" + msgstr "linjenummer er uden for det gyldige interval i #line" + + #: cpplib.c:798 + #, c-format + msgid "file \"%s\" left but not entered" + msgstr "" + + #: cpplib.c:806 + #, fuzzy, c-format + msgid "expected to return to file \"%s\"" + msgstr "Stødt på slutningen af kildefilen %s tidligere end forventet.\n" + + #: cpplib.c:809 + #, c-format + msgid "expected to return to line number %u" + msgstr "" + + #: cpplib.c:812 + #, c-format + msgid "header flags for \"%s\" have changed" + msgstr "" + + #: cpplib.c:823 + #, fuzzy, c-format + msgid "\"%s\" is not a valid filename" + msgstr "%s: ugyldigt filnavn: %s\n" + + #: cpplib.c:920 f/lex.c:1240 + msgid "invalid #ident" + msgstr "ugyldig #ident" + + #: cpplib.c:971 + #, fuzzy, c-format + msgid "unknown #pragma namespace %s" + msgstr "ukendt maskintilstand '%s'" + + #: cpplib.c:1083 + msgid "#pragma once is obsolete" + msgstr "'#pragma once' er forældet" + + #: cpplib.c:1086 + #, fuzzy + msgid "#pragma once in main file" + msgstr "'#pragma once' uden for inkluderingsfil" + + #: cpplib.c:1110 + #, fuzzy + msgid "invalid #pragma GCC poison directive" + msgstr "ugyldigt '#pragma poison'-direktiv" + + #: cpplib.c:1119 + #, fuzzy, c-format + msgid "poisoning existing macro \"%s\"" + msgstr "forgifter eksisterende makro '%s'" + + #: cpplib.c:1144 + #, fuzzy + msgid "#pragma system_header ignored outside include file" + msgstr "'#pragma systemheader' uden for inkluderingsfil" + + #: cpplib.c:1166 + #, fuzzy, c-format + msgid "cannot find source %s" + msgstr "[kan ikke finde %s]" + + #: cpplib.c:1170 + #, c-format + msgid "current file is older than %s" + msgstr "" + + #: cpplib.c:1233 + msgid "_Pragma takes a parenthesized string literal" + msgstr "" + + #: cpplib.c:1326 + msgid "#else without #if" + msgstr "#else uden #if" + + #: cpplib.c:1331 tradcpp.c:3850 + msgid "#else after #else" + msgstr "#else efter #else" + + #: cpplib.c:1333 cpplib.c:1367 + msgid "the conditional began here" + msgstr "betingelsen begyndte her" + + #: cpplib.c:1360 + msgid "#elif without #if" + msgstr "#elif uden #if" + + #: cpplib.c:1365 tradcpp.c:3545 + msgid "#elif after #else" + msgstr "#elif efter #else" + + #: cpplib.c:1397 + msgid "#endif without #if" + msgstr "#endif uden #if" + + #: cpplib.c:1482 tradcpp.c:3242 + #, fuzzy + msgid "missing '(' after predicate" + msgstr "der mangler et semikolon før en højre krøllet parantes" + + #: cpplib.c:1503 tradcpp.c:3256 + msgid "missing ')' to complete answer" + msgstr "" + + #: cpplib.c:1511 tradcpp.c:3262 + msgid "predicate's answer is empty" + msgstr "" + + #: cpplib.c:1542 tradcpp.c:3310 + msgid "assertion without predicate" + msgstr "" + + #: cpplib.c:1544 tradcpp.c:3312 + #, fuzzy + msgid "predicate must be an identifier" + msgstr "#define skal efterfølges af et kaldenavn" + + #: cpplib.c:1625 tradcpp.c:3409 + #, fuzzy, c-format + msgid "\"%s\" re-asserted" + msgstr "\"%s\" omdefineret" + + #: cpplib.c:1821 + msgid "" + msgstr "" + + #: cpplib.c:1823 + #, fuzzy + msgid "" + msgstr ": " + + #: cpplib.c:1846 + msgid "" + msgstr "" + + #: cpplib.c:1879 + #, c-format + msgid "unterminated #%s" + msgstr "uafsluttet #%s" + + #: cpplib.c:1907 + #, c-format + msgid "file \"%s\" entered but not left" + msgstr "" + + #: cppmacro.c:213 + #, fuzzy, c-format + msgid "invalid builtin macro \"%s\"" + msgstr "forgifter eksisterende makro '%s'" + + #: cppmacro.c:333 + msgid "invalid string literal, ignoring final '\\'" + msgstr "" + + #: cppmacro.c:367 + #, c-format + msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token" + msgstr "" + + #: cppmacro.c:539 + #, c-format + msgid "unterminated argument list invoking macro \"%s\"" + msgstr "" + + #: cppmacro.c:556 + #, fuzzy + msgid "ISO C99 requires rest arguments to be used" + msgstr "ISO C påkræver en navngiven parameter før '...'" + + #: cppmacro.c:561 + #, c-format + msgid "macro \"%s\" requires %u arguments, but only %u given" + msgstr "" + + #: cppmacro.c:572 + #, c-format + msgid "macro \"%s\" passed %u arguments, but takes just %u" + msgstr "" + + #: cppmacro.c:612 + #, fuzzy, c-format + msgid "function-like macro \"%s\" must be used with arguments in traditional C" + msgstr "funktionsmakroen %s skal bruges med parametre i traditionel C" + + #: cppmacro.c:1236 + #, fuzzy, c-format + msgid "duplicate macro parameter \"%s\"" + msgstr "makroparameternavnet \"%s\" optræder mere end én gang" + + #: cppmacro.c:1271 + #, fuzzy, c-format + msgid "\"%s\" may not appear in macro parameter list" + msgstr "manglende højreparantes i makroparameterlisten" + + #: cppmacro.c:1278 + msgid "macro parameters must be comma-separated" + msgstr "" + + #: cppmacro.c:1295 + #, fuzzy + msgid "parameter name missing" + msgstr "Et katalognavn mangler efter %s" + + #: cppmacro.c:1309 + msgid "anonymous variadic macros were introduced in C99" + msgstr "" + + #: cppmacro.c:1312 + #, fuzzy + msgid "ISO C does not permit named variadic macros" + msgstr "ISO C tillader ikke navngivne variabel parameterliste-makroer" + + #: cppmacro.c:1321 + #, fuzzy + msgid "missing ')' in macro parameter list" + msgstr "manglende højreparantes i makroparameterlisten" + + #: cppmacro.c:1400 + #, fuzzy + msgid "ISO C requires whitespace after the macro name" + msgstr "C-standarden påkræver mellemrum efter #define %s" + + #: cppmacro.c:1423 + #, fuzzy + msgid "'#' is not followed by a macro parameter" + msgstr "'#' efterfølges ikke af et makroparameternavn" + + #: cppmacro.c:1443 + msgid "'##' cannot appear at either end of a macro expansion" + msgstr "" + + #: cppmacro.c:1478 + #, c-format + msgid "\"%s\" redefined" + msgstr "\"%s\" omdefineret" + + #: cppmacro.c:1484 + msgid "this is the location of the previous definition" + msgstr "den foregående definition er her" + + #: cppmacro.c:1542 + #, fuzzy, c-format + msgid "macro argument \"%s\" would be stringified with -traditional." + msgstr "makroparameteren \"%s\" ville blive gjort til en streng i traditionel C" + + #: cppmacro.c:1566 + #, c-format + msgid "invalid hash type %d in dump_definition" + msgstr "ugyldig hashtype %d i dump_definition" + + #: cppmain.c:128 + #, c-format + msgid "Invalid option %s" + msgstr "Ugyldigt tilvalg %s" + + #: cppspec.c:128 + #, fuzzy, c-format + msgid "\"%s\" is not a valid option to the preprocessor" + msgstr "'%s' er ikke et tilladt tilvalg til forbehandleren" + + #: cppspec.c:152 + msgid "too many input files" + msgstr "for mange inddatafiler" + + #: cse.c:7140 + #, c-format + msgid ";; Processing block from %d to %d, %d sets.\n" + msgstr ";; Behandler blok fra %d til %d, %d mængder.\n" + + #: diagnostic.c:844 + #, fuzzy, c-format + msgid "%s:%d: warning: " + msgstr "advarsel: " + + #: diagnostic.c:851 + #, fuzzy, c-format + msgid "%s: warning: " + msgstr "advarsel: " + + #: diagnostic.c:937 + msgid "((anonymous))" + msgstr "" + + #: diagnostic.c:1064 + #, fuzzy, c-format + msgid "%s: warnings being treated as errors\n" + msgstr "%s: advarsel: ingen læseadgang til filen '%s'\n" + + #: diagnostic.c:1116 + #, fuzzy, c-format + msgid "%s: %s: " + msgstr "%s: %s" + + #: diagnostic.c:1224 + #, fuzzy + msgid "sorry, not implemented: " + msgstr "Profilgenerering understøttes ikke endnu." + + #: diagnostic.c:1243 + #, fuzzy, c-format + msgid "%s " + msgstr "%s" + + #: diagnostic.c:1245 + #, fuzzy, c-format + msgid " %s" + msgstr "%s" + + #: diagnostic.c:1268 + msgid "At top level:" + msgstr "" + + #: diagnostic.c:1273 + #, c-format + msgid "In method `%s':" + msgstr "" + + #: diagnostic.c:1277 + #, fuzzy, c-format + msgid "In function `%s':" + msgstr "Ugyldigt tilvalg '%s'" + + #: diagnostic.c:1412 + msgid "compilation terminated.\n" + msgstr "" + + #: diagnostic.c:1447 + #, fuzzy, c-format + msgid "%s:%d: confused by earlier errors, bailing out\n" + msgstr "forvirret af tidligere fejl, opgiver ævred" + + #: diagnostic.c:1461 diagnostic.c:1700 + #, c-format + msgid "" + "Please submit a full bug report,\n" + "with preprocessed source if appropriate.\n" + "See %s for instructions.\n" + msgstr "" + + #: diagnostic.c:1493 + #, fuzzy + msgid "Unrecognizable insn:" + msgstr "Ukendt tilvalg '%s'" + + #: diagnostic.c:1495 + msgid "Insn does not satisfy its constraints:" + msgstr "" + + #: diagnostic.c:1698 + #, fuzzy + msgid "Internal compiler error: Error reporting routines re-entered.\n" + msgstr "Intern oversætterfejl: program %s modtog et fatalt signal %d" + + #: diagnostic.c:1760 + #, fuzzy, c-format + msgid "Internal compiler error in %s, at %s:%d" + msgstr "Intern oversætterfejl %d." + + #: diagnostic.c:1805 + #, fuzzy, c-format + msgid "In file included from %s:%d" + msgstr "I filen inkluderet af %s:%u" + + #: diagnostic.c:1808 + #, fuzzy, c-format + msgid "" + ",\n" + " from %s:%d" + msgstr "" + ",\n" + " af %s:%u" + + #: diagnostic.c:1809 + msgid ":\n" + msgstr "" + + #: dwarf2out.c:2977 + #, c-format + msgid "DW_LOC_OP %s not implememnted\n" + msgstr "" + + #: dwarf2out.c:7071 dwarfout.c:2128 + #, fuzzy, c-format + msgid "internal regno botch: regno = %d\n" + msgstr "Internt gcc-afbrydelse fra %s:%d" + + #: dwarfout.c:6262 + #, fuzzy + msgid "can't get current directory" + msgstr "%s: kan ikke få fat i arbejdskataloget: %s\n" + + #: emit-rtl.c:1006 + #, fuzzy + msgid "Can't access real part of complex value in hard register" + msgstr "Kan ikke tilgå den reelle del af komplekst tal i et hardware-register på målarkitekturen" + + #: emit-rtl.c:1030 + #, fuzzy + msgid "can't access imaginary part of complex value in hard register" + msgstr "Kan ikke tilgå den imaginære del af komplekst tal i et hardware-register på målarkitekturen" + + #: emit-rtl.c:2560 + msgid "ICE: emit_insn used where emit_jump_insn needed:\n" + msgstr "" + + #: errors.c:168 + #, c-format + msgid "abort in %s, at %s:%d" + msgstr "" + + #: except.c:357 + msgid "exception handling disabled, use -fexceptions to enable" + msgstr "håndtering af undtagelser er slået fra, angiv -fexceptions for at slå dem til" + + #: except.c:2931 + msgid "argument of `__builtin_eh_return_regno' must be constant" + msgstr "" + + #: except.c:3029 except.c:3053 + #, fuzzy + msgid "__builtin_eh_return not supported on this target" + msgstr "stakgrænser understøttes ikke på målarkitekturen" + + #: explow.c:1458 + msgid "stack limits not supported on this target" + msgstr "stakgrænser understøttes ikke på målarkitekturen" + + #: expr.c:2842 + msgid "function using short complex types cannot be inline" + msgstr "funktioner der benytter short complex-typer, kan ikke indbygges" + + #: expr.c:5860 expr.c:5869 expr.c:5878 expr.c:5883 expr.c:6041 expr.c:6056 + msgid "unsupported wide integer operation" + msgstr "bred heltalsoperation understøttes ikke" + + #: expr.c:6103 + #, c-format + msgid "prior parameter's size depends on `%s'" + msgstr "" + + #: expr.c:6504 + msgid "returned value in block_exit_expr" + msgstr "" + + #: f/com.c:11860 + msgid "no INTEGER type can hold a pointer on this configuration" + msgstr "" + + #: f/com.c:12087 + #, c-format + msgid "configuration: REAL, INTEGER, and LOGICAL are %d bits wide," + msgstr "" + + #: f/com.c:12089 + #, c-format + msgid "and pointers are %d bits wide, but g77 doesn't yet work" + msgstr "" + + #: f/com.c:12091 + msgid "properly unless they all are 32 bits wide." + msgstr "" + + #: f/com.c:12092 + msgid "Please keep this in mind before you report bugs. g77 should" + msgstr "" + + #: f/com.c:12093 + msgid "support non-32-bit machines better as of version 0.6." + msgstr "" + + #. I/O will probably crash. + #: f/com.c:12101 + #, c-format + msgid "configuration: char * holds %d bits, but ftnlen only %d" + msgstr "" + + #. ASSIGN 10 TO I will crash. + #: f/com.c:12110 + #, c-format + msgid "" + "configuration: char * holds %d bits, but INTEGER only %d --\n" + " ASSIGN statement might fail" + msgstr "" + + #: f/com.c:16088 + #, fuzzy + msgid "Directory name must immediately follow -I" + msgstr "Et katalognavn mangler efter %s" + + #: f/g77spec.c:250 + #, c-format + msgid "overflowed output arg list for `%s'" + msgstr "" + + #: f/g77spec.c:436 + #, fuzzy + msgid "--driver no longer supported" + msgstr "-pipe understøttes ikke" + + #: f/g77spec.c:450 + #, fuzzy, c-format + msgid "argument to `%s' missing" + msgstr "en parameter til '%s' mangler\n" + + #: f/g77spec.c:454 + msgid "No input files; unwilling to write output files" + msgstr "" + + #: f/lang-options.h:33 + msgid "Print g77-specific compiler version info, run internal tests" + msgstr "" + + #: f/lang-options.h:38 + msgid "Program is written in typical FORTRAN 66 dialect" + msgstr "" + + #: f/lang-options.h:41 + msgid "Program is written in typical Unix f77 dialect" + msgstr "" + + #: f/lang-options.h:43 + msgid "Program does not use Unix-f77 dialectal features" + msgstr "" + + #: f/lang-options.h:45 + msgid "Program is written in Fortran-90-ish dialect" + msgstr "" + + #: f/lang-options.h:49 + msgid "Treat local vars and COMMON blocks as if they were named in SAVE statements" + msgstr "" + + #: f/lang-options.h:51 + msgid "Allow $ in symbol names" + msgstr "" + + #: f/lang-options.h:55 + msgid "f2c-compatible code need not be generated" + msgstr "" + + #: f/lang-options.h:58 + msgid "Unsupported; do not generate libf2c-calling code" + msgstr "" + + #: f/lang-options.h:60 + msgid "Unsupported; affects code-generation of arrays" + msgstr "" + + #: f/lang-options.h:63 + msgid "Program is written in Fortran-90-ish free form" + msgstr "" + + #: f/lang-options.h:68 + msgid "Warn about use of (only a few for now) Fortran extensions" + msgstr "" + + #: f/lang-options.h:71 + msgid "Program is written in VXT (Digital-like) FORTRAN" + msgstr "" + + #: f/lang-options.h:74 + msgid "Disallow all ugly features" + msgstr "" + + #: f/lang-options.h:77 + msgid "Hollerith and typeless constants not passed as arguments" + msgstr "" + + #: f/lang-options.h:79 + msgid "Allow ordinary copying of ASSIGN'ed vars" + msgstr "" + + #: f/lang-options.h:82 + msgid "Dummy array dimensioned to (1) is assumed-size" + msgstr "" + + #: f/lang-options.h:85 + msgid "Trailing comma in procedure call denotes null argument" + msgstr "" + + #: f/lang-options.h:88 + msgid "Allow REAL(Z) and AIMAG(Z) given DOUBLE COMPLEX Z" + msgstr "" + + #: f/lang-options.h:92 + msgid "Initialization via DATA and PARAMETER is type-compatible" + msgstr "" + + #: f/lang-options.h:94 + msgid "Allow INTEGER and LOGICAL interchangeability" + msgstr "" + + #: f/lang-options.h:97 + msgid "Print internal debugging-related info" + msgstr "" + + #: f/lang-options.h:100 + #, fuzzy + msgid "Initialize local vars and arrays to zero" + msgstr "Lokale variabler uden startværdi i .data" + + #: f/lang-options.h:104 + msgid "Backslashes in character/hollerith constants not special (C-style)" + msgstr "" + + #: f/lang-options.h:106 + msgid "Have front end emulate COMPLEX arithmetic to avoid bugs" + msgstr "" + + #: f/lang-options.h:110 + msgid "Disable the appending of underscores to externals" + msgstr "" + + #: f/lang-options.h:113 + msgid "Never append a second underscore to externals" + msgstr "" + + #: f/lang-options.h:115 + msgid "Intrinsics spelled as e.g. SqRt" + msgstr "" + + #: f/lang-options.h:117 + msgid "Intrinsics in uppercase" + msgstr "" + + #: f/lang-options.h:120 + msgid "Intrinsics letters in arbitrary cases" + msgstr "" + + #: f/lang-options.h:122 + msgid "Language keywords spelled as e.g. IOStat" + msgstr "" + + #: f/lang-options.h:124 + msgid "Language keywords in uppercase" + msgstr "" + + #: f/lang-options.h:127 + msgid "Language keyword letters in arbitrary cases" + msgstr "" + + #: f/lang-options.h:129 + msgid "Internally convert most source to uppercase" + msgstr "" + + #: f/lang-options.h:132 + msgid "Internally preserve source case" + msgstr "" + + #: f/lang-options.h:134 + msgid "Symbol names spelled in mixed case" + msgstr "" + + #: f/lang-options.h:136 + msgid "Symbol names in uppercase" + msgstr "" + + #: f/lang-options.h:138 + msgid "Symbol names in lowercase" + msgstr "" + + #: f/lang-options.h:141 + msgid "Program written in uppercase" + msgstr "" + + #: f/lang-options.h:143 + msgid "Program written in lowercase" + msgstr "" + + #: f/lang-options.h:145 + msgid "Program written in strict mixed-case" + msgstr "" + + #: f/lang-options.h:147 + msgid "Compile as if program written in uppercase" + msgstr "" + + #: f/lang-options.h:149 + msgid "Compile as if program written in lowercase" + msgstr "" + + #: f/lang-options.h:151 + msgid "Preserve all spelling (case) used in program" + msgstr "" + + #: f/lang-options.h:153 + msgid "Delete libU77 intrinsics with bad interfaces" + msgstr "" + + #: f/lang-options.h:155 + msgid "Disable libU77 intrinsics with bad interfaces" + msgstr "" + + #: f/lang-options.h:158 + msgid "Hide libU77 intrinsics with bad interfaces" + msgstr "" + + #: f/lang-options.h:160 + msgid "Delete non-FORTRAN-77 intrinsics f2c supports" + msgstr "" + + #: f/lang-options.h:162 + msgid "Disable non-FORTRAN-77 intrinsics f2c supports" + msgstr "" + + #: f/lang-options.h:165 + msgid "Hide non-FORTRAN-77 intrinsics f2c supports" + msgstr "" + + #: f/lang-options.h:167 + msgid "Delete non-FORTRAN-77 intrinsics F90 supports" + msgstr "" + + #: f/lang-options.h:169 + msgid "Disable non-FORTRAN-77 intrinsics F90 supports" + msgstr "" + + #: f/lang-options.h:172 + msgid "Hide non-FORTRAN-77 intrinsics F90 supports" + msgstr "" + + #: f/lang-options.h:174 + msgid "Delete non-FORTRAN-77 intrinsics g77 supports" + msgstr "" + + #: f/lang-options.h:176 + msgid "Disable non-FORTRAN 77 intrinsics F90 supports" + msgstr "" + + #: f/lang-options.h:179 + msgid "Hide non-FORTRAN 77 intrinsics F90 supports" + msgstr "" + + #: f/lang-options.h:181 + msgid "Delete MIL-STD 1753 intrinsics" + msgstr "" + + #: f/lang-options.h:183 + msgid "Disable MIL-STD 1753 intrinsics" + msgstr "" + + #: f/lang-options.h:186 + msgid "Hide MIL-STD 1753 intrinsics" + msgstr "" + + #: f/lang-options.h:188 + msgid "Delete libU77 intrinsics" + msgstr "" + + #: f/lang-options.h:190 + msgid "Disable libU77 intrinsics" + msgstr "" + + #: f/lang-options.h:193 + msgid "Hide libU77 intrinsics" + msgstr "" + + #: f/lang-options.h:195 + msgid "Delete non-FORTRAN-77 intrinsics VXT FORTRAN supports" + msgstr "" + + #: f/lang-options.h:197 + msgid "Disable non-FORTRAN-77 intrinsics VXT FORTRAN supports" + msgstr "" + + #: f/lang-options.h:200 + msgid "Hide non-FORTRAN-77 intrinsics VXT FORTRAN supports" + msgstr "" + + #: f/lang-options.h:202 + msgid "Treat initial values of 0 like non-zero values" + msgstr "" + + #: f/lang-options.h:205 + msgid "Emit special debugging information for COMMON and EQUIVALENCE (disabled)" + msgstr "" + + #: f/lang-options.h:208 + msgid "Take at least one trip through each iterative DO loop" + msgstr "" + + #: f/lang-options.h:212 + msgid "Print names of program units as they are compiled" + msgstr "" + + #: f/lang-options.h:215 + msgid "Disable fatal diagnostics about inter-procedural problems" + msgstr "" + + #: f/lang-options.h:217 + msgid "Make prefix-radix non-decimal constants be typeless" + msgstr "" + + #: f/lang-options.h:220 + msgid "Generate code to check subscript and substring bounds" + msgstr "" + + #: f/lang-options.h:223 + msgid "Fortran-specific form of -fbounds-check" + msgstr "" + + #: f/lang-options.h:227 + msgid "Disable warnings about inter-procedural problems" + msgstr "" + + #: f/lang-options.h:231 + msgid "Warn about constructs with surprising meanings" + msgstr "" + + #: f/lang-options.h:236 + msgid "Add a directory for INCLUDE searching" + msgstr "" + + #: f/lang-options.h:238 + msgid "Set the maximum line length" + msgstr "" + + #: f/lex.c:692 + msgid "the meaning of `\\a' varies with -traditional" + msgstr "" + + #: f/lex.c:708 + #, fuzzy, c-format + msgid "non-ANSI-standard escape sequence, `\\%c'" + msgstr "undvigesekvensen '\\%c' følger ikke ISO-standarden" + + #: f/lex.c:721 + #, fuzzy, c-format + msgid "non-ANSI escape sequence `\\%c'" + msgstr "undvigesekvensen '\\%c' følger ikke ISO-standarden" + + #: f/lex.c:725 + #, fuzzy, c-format + msgid "unknown escape sequence `\\%c'" + msgstr "undvigesekvensen '\\%c' følger ikke ISO-standarden" + + #: f/lex.c:727 + #, c-format + msgid "unknown escape sequence: `\\' followed by char code 0x%x" + msgstr "" + + #: f/lex.c:806 + msgid "Badly formed directive -- no closing quote" + msgstr "" + + #: f/lex.c:870 + msgid "#-lines for entering and leaving files don't match" + msgstr "#-linjer til at træde ind og ud af filer passer ikke" + + #: f/lex.c:1039 + msgid "Bad directive -- missing close-quote" + msgstr "" + + #: f/lex.c:1156 + #, c-format + msgid "ignoring pragma: %s" + msgstr "" + + #: f/lex.c:1257 + #, fuzzy + msgid "undefined or invalid # directive" + msgstr "# direktivet '%s' er ugyldigt eller ikke defineret" + + #: f/lex.c:1313 + msgid "invalid #line" + msgstr "ugyldig #line" + + #: f/lex.c:1369 f/lex.c:1413 + msgid "Use `#line ...' instead of `# ...' in first line" + msgstr "" + + #: f/lex.c:1423 + msgid "invalid #-line" + msgstr "ugyldig #-linje" + + #: f/ste.c:1436 f/ste.c:1791 + msgid "ASSIGNed FORMAT specifier is too small" + msgstr "" + + #: f/ste.c:3259 + msgid "ASSIGN to variable that is too small" + msgstr "" + + #: f/ste.c:3297 + msgid "ASSIGNed GOTO target variable is too small" + msgstr "" + + #: f/top.c:240 + #, c-format + msgid "%s no longer supported -- try -fvxt" + msgstr "" + + #: f/top.c:242 + #, c-format + msgid "%s no longer supported -- try -fno-vxt -ff90" + msgstr "" + + #: f/top.c:310 f/top.c:312 + #, c-format + msgid "%s disabled, use normal debugging flags" + msgstr "" + + #: final.c:3349 + #, fuzzy, c-format + msgid "invalid `asm': %s" + msgstr "%s: ugyldigt filnavn: %s\n" + + #: final.c:3352 + #, c-format + msgid "output_operand: %s" + msgstr "output_operand: %s" + + #: final.c:3492 + #, c-format + msgid "operand number missing after %-letter" + msgstr "operandtal mangler efter %-letter" + + #: final.c:3494 final.c:3529 + msgid "operand number out of range" + msgstr "operandtal er uden for det gyldige interval" + + #: final.c:3543 + #, c-format + msgid "invalid %%-code" + msgstr "ugyldig %%-kode" + + #: final.c:3570 + msgid "`%l' operand isn't a label" + msgstr "'%l'-operand er ikke en etiket" + + #: flow.c:541 + msgid "function might be possible candidate for attribute `noreturn'" + msgstr "" + + #: flow.c:546 + msgid "`noreturn' function does return" + msgstr "" + + #: flow.c:567 + msgid "control reaches end of non-void function" + msgstr "" + + #: flow.c:6646 + #, c-format + msgid "End insn %d for block %d not found in the insn stream." + msgstr "Slutinstruktion %d for blok %d ikke fundet i instruktionsstrømmen." + + #: flow.c:6660 + #, c-format + msgid "Insn %d is in multiple basic blocks (%d and %d)" + msgstr "Instruktion %d er i flere basisblokke (%d og %d)" + + #: flow.c:6671 + #, c-format + msgid "Head insn %d for block %d not found in the insn stream." + msgstr "Hovedinstruktion %d for blok %d ikke fundet i instruktionsstrømmen." + + #: flow.c:6708 flow.c:6735 + #, c-format + msgid "Basic block %i edge lists are corrupted" + msgstr "Kantlister til basisblok %i er ødelagt" + + #: flow.c:6720 + #, c-format + msgid "Basic block %d pred edge is corrupted" + msgstr "Forkant til basisblok %d er ødelagt" + + #: flow.c:6750 + #, c-format + msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d" + msgstr "NOTE_INSN_BASIC_BLOCK mangler for blok %d" + + #: flow.c:6758 + #, c-format + msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d\n" + msgstr "NOTE_INSN_BASIC_BLOCK mangler for blok %d\n" + + #: flow.c:6774 + #, c-format + msgid "NOTE_INSN_BASIC_BLOCK %d in the middle of basic block %d" + msgstr "NOTE_INSN_BASIC_BLOCK %d i midten af basisblok %d" + + #: flow.c:6786 + #, c-format + msgid "In basic block %d:" + msgstr "I basisblok %d:" + + #: flow.c:6848 + #, c-format + msgid "number of bb notes in insn chain (%d) != n_basic_blocks (%d)" + msgstr "antallet af basisbloknoter i instruktionskæden (%d) != n_basic_blocks (%d)" + + #: fold-const.c:3013 fold-const.c:3026 + #, c-format + msgid "comparison is always %d due to width of bitfield" + msgstr "" + + #: fold-const.c:4069 fold-const.c:4086 + #, c-format + msgid "comparison is always %d" + msgstr "" + + #: fold-const.c:4217 + msgid "`or' of unmatched not-equal tests is always 1" + msgstr "" + + #: fold-const.c:4222 + msgid "`and' of mutually exclusive equal-tests is always 0" + msgstr "" + + #: function.c:5390 + #, fuzzy, c-format + msgid "`%s' might be used uninitialized in this function" + msgstr "'%s' er ikke erklæret (først benyttet i denne funktion)" + + #: function.c:5397 + #, c-format + msgid "variable `%s' might be clobbered by `longjmp' or `vfork'" + msgstr "" + + #: function.c:5416 + #, c-format + msgid "argument `%s' might be clobbered by `longjmp' or `vfork'" + msgstr "" + + #: function.c:6216 + #, fuzzy + msgid "function returns an aggregate" + msgstr "en funktions returtype kan ikke være en funktion" + + #: function.c:6745 + #, c-format + msgid "unused parameter `%s'" + msgstr "" + + #: gcc.c:954 + #, c-format + msgid "Ambiguous abbreviation %s" + msgstr "Flertydig forkortelse %s" + + #: gcc.c:981 + #, c-format + msgid "Incomplete `%s' option" + msgstr "Ufuldstændigt '%s'-tilvalg" + + #: gcc.c:992 + #, c-format + msgid "Missing argument to `%s' option" + msgstr "Der mangler en parameter til '%s'-tilvalget" + + #: gcc.c:1005 + #, c-format + msgid "Extraneous argument to `%s' option" + msgstr "Der er en parameter for meget til '%s'-tilvalget" + + #: gcc.c:1308 + msgid "Using builtin specs.\n" + msgstr "Benytter indbyggede specifikationer.\n" + + #: gcc.c:1474 + #, c-format + msgid "Setting spec %s to '%s'\n\n" + msgstr "Sætter specifikation %s til '%s'\n\n" + + #: gcc.c:1572 + #, c-format + msgid "Reading specs from %s\n" + msgstr "Læser specifikationer fra %s\n" + + #: gcc.c:1670 gcc.c:1689 + #, c-format + msgid "specs %%include syntax malformed after %ld characters" + msgstr "%%include-syntaks i specifikationer misdannet efter %ld tegn" + + #: gcc.c:1697 + #, c-format + msgid "Could not find specs file %s\n" + msgstr "Kun ikke finde specifikationsfil %s\n" + + #: gcc.c:1713 gcc.c:1721 gcc.c:1730 gcc.c:1739 + #, c-format + msgid "specs %%rename syntax malformed after %ld characters" + msgstr "%%rename-syntaks i specifikationer misdannet efter %ld tegn" + + #: gcc.c:1748 + #, c-format + msgid "specs %s spec was not found to be renamed" + msgstr "%s-specifikation i specifikationer kunne ikke findes til omdøbelse" + + #: gcc.c:1755 + #, c-format + msgid "rename spec %s to %s\n" + msgstr "omdøb specifikation %s til %s\n" + + #: gcc.c:1757 + #, c-format + msgid "spec is '%s'\n\n" + msgstr "specifikation er '%s'\n\n" + + #: gcc.c:1770 + #, c-format + msgid "specs unknown %% command after %ld characters" + msgstr "ukendt %%-kommando i specifikationer efter %ld tegn" + + #: gcc.c:1781 gcc.c:1794 + #, c-format + msgid "specs file malformed after %ld characters" + msgstr "specifikationsfil misdannet efter %ld tegn" + + #: gcc.c:1848 + msgid "spec file has no spec for linking" + msgstr "specifikationsfil har ingen specifikation til sammenkædning" + + #: gcc.c:2609 + msgid "-pipe not supported" + msgstr "-pipe understøttes ikke" + + #: gcc.c:2645 + msgid "\nGo ahead? (y or n) " + msgstr "\nFortsæt, ja (y) eller nej (n)?" + + #: gcc.c:2744 + #, fuzzy, c-format + msgid "" + "Internal error: %s (program %s)\n" + "Please submit a full bug report.\n" + "See %s for instructions." + msgstr "" + "Intern oversætterfejl i '%s', ved %s:%d\n" + "Send venligst en komplet fejlrapport.\n" + "Se %s for instruktioner." + + #: gcc.c:2762 + #, c-format + msgid "# %s %.2f %.2f\n" + msgstr "# %s %.2f %.2f\n" + + #: gcc.c:2890 + #, c-format + msgid "Usage: %s [options] file...\n" + msgstr "" + + #: gcc.c:2891 + msgid "Options:\n" + msgstr "" + + #: gcc.c:2893 + msgid " -pass-exit-codes Exit with highest error code from a phase\n" + msgstr "" + + #: gcc.c:2894 + msgid " --help Display this information\n" + msgstr "" + + #: gcc.c:2895 + msgid " --target-help Display target specific command line options\n" + msgstr "" + + #: gcc.c:2897 + msgid " (Use '-v --help' to display command line options of sub-processes)\n" + msgstr "" + + #: gcc.c:2898 + msgid " -dumpspecs Display all of the built in spec strings\n" + msgstr "" + + #: gcc.c:2899 + msgid " -dumpversion Display the version of the compiler\n" + msgstr "" + + #: gcc.c:2900 + msgid " -dumpmachine Display the compiler's target processor\n" + msgstr "" + + #: gcc.c:2901 + msgid " -print-search-dirs Display the directories in the compiler's search path\n" + msgstr "" + + #: gcc.c:2902 + msgid " -print-libgcc-file-name Display the name of the compiler's companion library\n" + msgstr "" + + #: gcc.c:2903 + msgid " -print-file-name= Display the full path to library \n" + msgstr "" + + #: gcc.c:2904 + msgid " -print-prog-name= Display the full path to compiler component \n" + msgstr "" + + #: gcc.c:2905 + msgid " -print-multi-directory Display the root directory for versions of libgcc\n" + msgstr "" + + #: gcc.c:2906 + msgid "" + " -print-multi-lib Display the mapping between command line options and\n" + " multiple library search directories\n" + msgstr "" + + #: gcc.c:2909 + msgid " -Wa, Pass comma-separated on to the assembler\n" + msgstr "" + + #: gcc.c:2910 + msgid " -Wp, Pass comma-separated on to the preprocessor\n" + msgstr "" + + #: gcc.c:2911 + msgid " -Wl, Pass comma-separated on to the linker\n" + msgstr "" + + #: gcc.c:2912 + msgid " -Xlinker Pass on to the linker\n" + msgstr "" + + #: gcc.c:2913 + msgid " -save-temps Do not delete intermediate files\n" + msgstr "" + + #: gcc.c:2914 + msgid " -pipe Use pipes rather than intermediate files\n" + msgstr "" + + #: gcc.c:2915 + msgid " -time Time the execution of each subprocess\n" + msgstr "" + + #: gcc.c:2916 + msgid " -specs= Override builtin specs with the contents of \n" + msgstr "" + + #: gcc.c:2917 + msgid " -std= Assume that the input sources are for \n" + msgstr "" + + #: gcc.c:2918 + msgid " -B Add to the compiler's search paths\n" + msgstr "" + + #: gcc.c:2919 + msgid " -b Run gcc for target , if installed\n" + msgstr "" + + #: gcc.c:2920 + msgid " -V Run gcc version number , if installed\n" + msgstr "" + + #: gcc.c:2921 + msgid " -v Display the programs invoked by the compiler\n" + msgstr "" + + #: gcc.c:2922 + msgid " -E Preprocess only; do not compile, assemble or link\n" + msgstr "" + + #: gcc.c:2923 + msgid " -S Compile only; do not assemble or link\n" + msgstr "" + + #: gcc.c:2924 + msgid " -c Compile and assemble, but do not link\n" + msgstr "" + + #: gcc.c:2925 + msgid " -o Place the output into \n" + msgstr "" + + #: gcc.c:2926 + msgid "" + " -x Specify the language of the following input files\n" + " Permissable languages include: c c++ assembler none\n" + " 'none' means revert to the default behaviour of\n" + " guessing the language based on the file's extension\n" + msgstr "" + + #: gcc.c:2933 + #, c-format + msgid "" + "\n" + "Options starting with -g, -f, -m, -O, -W, or --param are automatically\n" + " passed on to the various sub-processes invoked by %s. In order to pass\n" + " other options on to these processes the -W options must be used.\n" + msgstr "" + + #: gcc.c:3300 + msgid "argument to `-Xlinker' is missing" + msgstr "en parameter til '-Xlinker' mangler" + + #: gcc.c:3317 + msgid "argument to `-specs' is missing" + msgstr "en parameter til '-specs' mangler" + + #: gcc.c:3332 + msgid "argument to `-specs=' is missing" + msgstr "en parameter til '-specs=' mangler" + + #: gcc.c:3354 + msgid "argument to `-b' is missing" + msgstr "en parameter til '-b' mangler" + + #: gcc.c:3367 + msgid "argument to `-B' is missing" + msgstr "en parameter til '-B' mangler" + + #: gcc.c:3420 + msgid "argument to `-V' is missing" + msgstr "en parameter til '-V' mangler" + + #: gcc.c:3441 gcc.c:3448 gcc.c:3455 + msgid "invalid version number format" + msgstr "ugyldigt versionsnummerformat" + + #: gcc.c:3566 + msgid "cannot specify -o with -c or -S and multiple compilations" + msgstr "kan ikke angive -o med -c eller -S og flere oversættelser" + + #: gcc.c:3762 + #, fuzzy + msgid "Warning: -pipe ignored because -save-temps specified" + msgstr "Advarsel: -pipe ignoreret eftersom -save-temps er angivet" + + #: gcc.c:3766 + #, fuzzy + msgid "Warning: -pipe ignored because -time specified" + msgstr "Advarsel: -pipe ignoreret eftersom -time er angivet" + + #: gcc.c:3776 + msgid "argument to `-x' is missing" + msgstr "en parameter til '-x' mangler" + + #: gcc.c:3804 + #, c-format + msgid "argument to `-%s' is missing" + msgstr "en parameter til '-%s' mangler" + + #: gcc.c:3867 + #, c-format + msgid "Warning: `-x %s' after last input file has no effect" + msgstr "Advarsel: '-x %s' efter den sidste inddatafil udvirker intet" + + #: gcc.c:4072 + msgid "Invalid specification! Bug in cc." + msgstr "Ugyldig specifikation! Fejl i cc." + + #: gcc.c:4221 + #, fuzzy, c-format + msgid "%s\n" + msgstr "%s" + + #. Catch the case where a spec string contains something like + #. '%{foo:%*}'. ie there is no * in the pattern on the left + #. hand side of the :. + #: gcc.c:4738 + #, c-format + msgid "Spec failure: '%%*' has not been initialised by pattern match" + msgstr "Specifikationsfejl: '%%*' er ikke blevet klargjort af mønstersøgning" + + #: gcc.c:4747 + #, c-format + msgid "Warning: use of obsolete %%[ operator in specs" + msgstr "Advarsel: forældet '%%['-operator benyttet i specifikationer" + + #: gcc.c:4765 + #, c-format + msgid "Processing spec %c%s%c, which is '%s'\n" + msgstr "Behandler specifikation %c%s%c, som er '%s'\n" + + #: gcc.c:4890 + #, c-format + msgid "Spec failure: Unrecognised spec option '%c'" + msgstr "Specifikationsfejl: Ukendt specifikationstilvalg '%c'" + + #: gcc.c:5744 + #, c-format + msgid "unrecognized option `-%s'" + msgstr "ukendt tilvalg '-%s'" + + #: gcc.c:5750 + #, c-format + msgid "install: %s%s\n" + msgstr "" + + #: gcc.c:5751 + #, c-format + msgid "programs: %s\n" + msgstr "" + + #: gcc.c:5752 + #, c-format + msgid "libraries: %s\n" + msgstr "" + + #: gcc.c:5800 + msgid "\nFor bug reporting instructions, please see:\n" + msgstr "" + + #: gcc.c:5816 + #, c-format + msgid "Configured with: %s\n" + msgstr "" + + #: gcc.c:5830 + #, c-format + msgid "Thread model: %s\n" + msgstr "" + + #: gcc.c:5841 + #, c-format + msgid "gcc version %s\n" + msgstr "gcc version %s\n" + + #: gcc.c:5843 + #, c-format + msgid "gcc driver version %s executing gcc version %s\n" + msgstr "gcc-styringsprogram version %s kører gcc version %s\n" + + #: gcc.c:5851 + msgid "No input files" + msgstr "Ingen inddatafiler" + + #: gcc.c:5888 + #, c-format + msgid "%s: %s compiler not installed on this system" + msgstr "%s: %s-oversætter ikke installeret på dette system" + + #: gcc.c:5958 + #, fuzzy, c-format + msgid "%s: linker input file unused because linking not done" + msgstr "%s: sammenkæderinddatafil ikke benyttet eftersom sammenkædning ikke blev foretaget" + + #: gcc.c:6001 + #, c-format + msgid "language %s not recognized" + msgstr "sproget %s ikke genkendt" + + #: gcc.c:6104 + msgid "Internal gcc abort." + msgstr "Intern gcc-afbrydelse." + + #: gcov.c:299 + msgid "Internal gcov abort.\n" + msgstr "Intern gcov afbrydelse.\n" + + #: gcov.c:308 + msgid "gcov [-b] [-v] [-n] [-l] [-f] [-o OBJDIR] file\n" + msgstr "gcov [-b] [-v] [-n] [-l] [-f] [-o OBJKAT] fil\n" + + #: gcov.c:428 + #, c-format + msgid "Could not open basic block file %s.\n" + msgstr "Kunne ikke åbne basisblokfilen %s.\n" + + #: gcov.c:437 + #, c-format + msgid "Could not open data file %s.\n" + msgstr "Kunne ikke åbne datafilen %s.\n" + + #: gcov.c:438 + msgid "Assuming that all execution counts are zero.\n" + msgstr "Antager at alle kørselstællere er nul.\n" + + #: gcov.c:444 + #, c-format + msgid "Could not open program flow graph file %s.\n" + msgstr "Kunne ikke åbne programstrømsgraffilen %s.\n" + + #: gcov.c:455 + #, c-format + msgid "No executable code associated with file %s.\n" + msgstr "Ingen kørbar kode associeret med filen %s.\n" + + #: gcov.c:754 profile.c:977 + msgid ".da file contents exhausted too early\n" + msgstr "indholdet af .da-filen er udtømt for tidligt\n" + + #: gcov.c:757 profile.c:980 + msgid ".da file contents not exhausted\n" + msgstr "indholdet af .da-filen ikke udtømt\n" + + #: gcov.c:938 + #, c-format + msgid "%6.2f%% of %d source lines executed in function %s\n" + msgstr "%6.2f%% af %d kildekodelinjer udført i funktionen %s\n" + + #: gcov.c:942 + #, c-format + msgid "No executable source lines in function %s\n" + msgstr "Ingen kørbare kildekodelinjer i funktionen %s\n" + + #: gcov.c:949 + #, c-format + msgid "%6.2f%% of %d branches executed in function %s\n" + msgstr "%6.2f%% af %d forgreninger udført i funktionen %s\n" + + #: gcov.c:953 + #, c-format + msgid "%6.2f%% of %d branches taken at least once in function %s\n" + msgstr "%6.2f%% af %d forgreninger valgt mindst én gang i funktionen %s\n" + + #: gcov.c:958 + #, c-format + msgid "No branches in function %s\n" + msgstr "Ingen forgreninger i funktionen %s\n" + + #: gcov.c:960 + #, c-format + msgid "%6.2f%% of %d calls executed in function %s\n" + msgstr "%6.2f%% af %d kald udført i funktionen %s\n" + + #: gcov.c:964 + #, c-format + msgid "No calls in function %s\n" + msgstr "Ingen kald i funktionen %s\n" + + #: gcov.c:1096 + #, c-format + msgid "didn't use all bb entries of graph, function %s\n" + msgstr "brugte ikke alle grafens basisblokelementer, funktion %s\n" + + #: gcov.c:1098 + #, c-format + msgid "block_num = %ld, num_blocks = %d\n" + msgstr "block_num = %ld, num_blocks = %d\n" + + #: gcov.c:1136 + #, c-format + msgid "ERROR: too many basic blocks in .bb file %s\n" + msgstr "Fejl: for mange basisblokke i .bb-filen %s\n" + + #: gcov.c:1213 + #, c-format + msgid "%6.2f%% of %d source lines executed in file %s\n" + msgstr "%6.2f%% af %d kildekodelinjer udført i filen %s\n" + + #: gcov.c:1217 + #, c-format + msgid "No executable source lines in file %s\n" + msgstr "Ingen kørbare kildekodelinjer i filen %s\n" + + #: gcov.c:1224 + #, c-format + msgid "%6.2f%% of %d branches executed in file %s\n" + msgstr "%6.2f%% af %d forgreninger udført i filen %s\n" + + #: gcov.c:1228 + #, c-format + msgid "%6.2f%% of %d branches taken at least once in file %s\n" + msgstr "%6.2f%% af %d forgreninger valgt mindst én gang i filen %s\n" + + #: gcov.c:1233 + #, c-format + msgid "No branches in file %s\n" + msgstr "Ingen forgreninger i filen %s\n" + + #: gcov.c:1235 + #, c-format + msgid "%6.2f%% of %d calls executed in file %s\n" + msgstr "%6.2f%% af %d kald udført i filen %s\n" + + #: gcov.c:1239 + #, c-format + msgid "No calls in file %s\n" + msgstr "Ingen kald i filen %s\n" + + #: gcov.c:1251 + #, c-format + msgid "Could not open source file %s.\n" + msgstr "Kunne ikke åbne kildefilen %s.\n" + + #: gcov.c:1301 + #, c-format + msgid "Could not open output file %s.\n" + msgstr "Kunne ikke åbne uddatafilen %s.\n" + + #: gcov.c:1309 + #, c-format + msgid "Creating %s.\n" + msgstr "Opretter %s.\n" + + #: gcov.c:1353 + #, c-format + msgid "call %d never executed\n" + msgstr "kald %d aldrig udført\n" + + #: gcov.c:1358 + #, c-format + msgid "call %d returns = %d\n" + msgstr "kald %d returnerer = %d\n" + + #: gcov.c:1362 + #, c-format + msgid "call %d returns = %d%%\n" + msgstr "kald %d returnerer = %d%%\n" + + #: gcov.c:1370 + #, c-format + msgid "branch %d never executed\n" + msgstr "forgrening %d aldrig udført\n" + + #: gcov.c:1376 + #, c-format + msgid "branch %d taken = %d\n" + msgstr "forgrening %d valgt = %d\n" + + #: gcov.c:1380 + #, c-format + msgid "branch %d taken = %d%%\n" + msgstr "forgrening %d valgt = %d%%\n" + + #: gcov.c:1394 + #, c-format + msgid "Unexpected EOF while reading source file %s.\n" + msgstr "Stødt på slutningen af kildefilen %s tidligere end forventet.\n" + + #: gcse.c:691 + #, c-format + msgid "GCSE disabled: %d > 1000 basic blocks and %d >= 20 edges/basic block" + msgstr "" + + #: gcse.c:703 + #, c-format + msgid "GCSE disabled: %d basic blocks and %d registers" + msgstr "" + + #: haifa-sched.c:193 + #, c-format + msgid "fix_sched_param: unknown param: %s" + msgstr "" + + #: integrate.c:142 + #, fuzzy + msgid "function cannot be inline" + msgstr "funktioner med variabel parameterliste kan ikke indbygges" + + #: integrate.c:147 + msgid "varargs function cannot be inline" + msgstr "funktioner med variabel parameterliste kan ikke indbygges" + + #: integrate.c:150 + msgid "function using alloca cannot be inline" + msgstr "funktion der bruger alloca, kan ikke indbygges" + + #: integrate.c:153 + msgid "function using setjmp cannot be inline" + msgstr "funktioner der bruger setjmp, kan ikke indbygges" + + #: integrate.c:156 + msgid "function uses __builtin_eh_return" + msgstr "funktionen bruger __builtin_eh_return" + + #: integrate.c:159 + msgid "function with nested functions cannot be inline" + msgstr "funktioner med indlejrede funktioner kan ikke indbygges" + + #: integrate.c:163 + msgid "function with label addresses used in initializers cannot inline" + msgstr "funktioner hvor etiketadresser benyttes i klargøringer, kan ikke indbygges" + + #: integrate.c:170 integrate.c:214 + msgid "function too large to be inline" + msgstr "funktionen er for stor til at blive indbygget" + + #: integrate.c:180 + msgid "no prototype, and parameter address used; cannot be inline" + msgstr "ingen prototype, og parameteradressen benyttes; kan ikke indbygges" + + #: integrate.c:187 integrate.c:232 + msgid "inline functions not supported for this return value type" + msgstr "integrerede funktioner understøttes ikke for denne returværditype" + + #: integrate.c:192 + msgid "function with varying-size return value cannot be inline" + msgstr "funktioner med returværdier af varierende størrelse kan ikke indbygges" + + #: integrate.c:199 + msgid "function with varying-size parameter cannot be inline" + msgstr "funktioner med parametre af varierende størrelse kan ikke indbygges" + + #: integrate.c:202 + msgid "function with transparent unit parameter cannot be inline" + msgstr "funktioner med gennemsigtig union-parameter kan ikke indbygges" + + #: integrate.c:221 + msgid "function with computed jump cannot inline" + msgstr "funktioner med beregnede spring kan ikke indbygges" + + #: integrate.c:225 + msgid "function with nonlocal goto cannot be inline" + msgstr "funktioner med ikke-lokale goto'er kan ikke indbygges" + + #: integrate.c:240 + msgid "function with target specific attribute(s) cannot be inlined" + msgstr "funktioner med målspecifikke egenskaber kan ikke indbygges" + + #: java/check-init.c:731 + #, c-format + msgid "internal error in check-init: tree code not implemented: %s" + msgstr "" + + #: java/class.c:543 java/class.c:568 + msgid "internal error - too many interface type" + msgstr "" + + #: java/class.c:702 + msgid "bad method signature" + msgstr "" + + #: java/class.c:747 + msgid "misplaced ConstantValue attribute (not in any field)" + msgstr "" + + #: java/class.c:749 + #, c-format + msgid "duplicate ConstanValue atribute for field '%s'" + msgstr "" + + #: java/class.c:995 + #, c-format + msgid "field '%s' not found in class" + msgstr "" + + #: java/class.c:1203 + msgid "abstract method in non-abstract class" + msgstr "" + + #: java/class.c:1820 + #, c-format + msgid "non-static method '%s' overrides static method" + msgstr "" + + #: java/decl.c:1475 + #, c-format + msgid "In %s: overlapped variable and exception ranges at %d" + msgstr "" + + #: java/decl.c:1563 + msgid "bad type in parameter debug info" + msgstr "" + + #: java/decl.c:1573 + #, c-format + msgid "bad PC range for debug info for local `%s'" + msgstr "" + + #: java/expr.c:553 + msgid "stack underflow - dup* operation" + msgstr "" + + #: java/expr.c:1444 + #, c-format + msgid "reference `%s' is ambiguous: appears in interface `%s' and interface `%s'" + msgstr "" + + #: java/expr.c:1473 + #, fuzzy, c-format + msgid "field `%s' not found" + msgstr "Biblioteket lib%s ikke fundet" + + #: java/expr.c:1624 + #, fuzzy + msgid "ret instruction not implemented" + msgstr "Profilgenerering understøttes ikke endnu." + + #: java/expr.c:1750 + #, c-format + msgid "method '%s' not found in class" + msgstr "" + + #: java/expr.c:1885 + #, fuzzy, c-format + msgid "failed to find class '%s'" + msgstr "omimplementering af klassen '%s'" + + #: java/expr.c:1897 + #, c-format + msgid "Class '%s' has no method named '%s' matching signature '%s'" + msgstr "" + + #: java/expr.c:1907 + msgid "invokestatic on non static method" + msgstr "" + + #: java/expr.c:1912 + msgid "invokestatic on abstract method" + msgstr "" + + #: java/expr.c:1920 + msgid "invoke[non-static] on static method" + msgstr "" + + #: java/expr.c:2208 + #, c-format + msgid "Missing field '%s' in '%s'" + msgstr "" + + #: java/expr.c:2214 + #, c-format + msgid "Mismatching signature for field '%s' in '%s'" + msgstr "" + + #: java/expr.c:2253 + #, c-format + msgid "assignment to final field `%s' not in field's class" + msgstr "" + + #: java/expr.c:2258 + #, c-format + msgid "assignment to final static field `%s' not in class initializer" + msgstr "" + + #: java/expr.c:2265 + #, fuzzy, c-format + msgid "assignment to final field `%s' not in constructor" + msgstr "enum-værdien for '%s' er ikke en heltalskonstant" + + #: java/expr.c:2519 + #, c-format + msgid "Can't expand %s" + msgstr "" + + #: java/expr.c:2695 + #, fuzzy + msgid "invalid PC in line number table" + msgstr "ugyldigt versionsnummerformat" + + #. We've just reached the end of a region of dead code. + #: java/expr.c:2740 + #, c-format + msgid "Unreachable bytecode from %d to before %d." + msgstr "" + + #. We've just reached the end of a region of dead code. + #: java/expr.c:2777 + #, c-format + msgid "Unreachable bytecode from %d to the end of the method." + msgstr "" + + #. duplicate code from LOAD macro + #: java/expr.c:3096 + msgid "unrecogized wide sub-instruction" + msgstr "" + + #: java/jcf-io.c:416 + #, c-format + msgid "Source file for class `%s' is newer than its matching class file. Source file used instead" + msgstr "" + + #: java/jcf-parse.c:375 + #, fuzzy + msgid "bad string constant" + msgstr "%s før strengkonstant" + + #: java/jcf-parse.c:431 + #, c-format + msgid "bad value constant type %d, index %d" + msgstr "" + + #: java/jcf-parse.c:601 + #, fuzzy, c-format + msgid "can't reopen %s" + msgstr "fejl ved åbning af %s" + + #: java/jcf-parse.c:663 + #, fuzzy, c-format + msgid "Cannot find file for class %s." + msgstr "Kan ikke finde interface-erklæringen af '%s'" + + #: java/jcf-parse.c:675 + msgid "not a valid Java .class file" + msgstr "" + + #: java/jcf-parse.c:678 + #, fuzzy + msgid "error while parsing constant pool" + msgstr "%s før strengkonstant" + + #: java/jcf-parse.c:681 + #, c-format + msgid "error in constant pool entry #%d\n" + msgstr "" + + #. FIXME - where was first time + #: java/jcf-parse.c:693 + #, c-format + msgid "reading class %s for the second time from %s" + msgstr "" + + #: java/jcf-parse.c:711 + msgid "error while parsing fields" + msgstr "" + + #: java/jcf-parse.c:714 + msgid "error while parsing methods" + msgstr "" + + #: java/jcf-parse.c:717 + msgid "error while parsing final attributes" + msgstr "" + + #: java/jcf-parse.c:731 + #, c-format + msgid "The `java.lang.Object' that was found in `%s' didn't have the special zero-length `gnu.gcj.gcj-compiled' attribute. This generally means that your classpath is incorrect set. Use `info gcj \"Input Options\"' to see the info page describing how to set the classpath." + msgstr "" + + #: java/jcf-parse.c:804 + msgid "missing Code attribute" + msgstr "" + + #: java/jcf-parse.c:948 toplev.c:2511 + #, c-format + msgid "error closing %s" + msgstr "" + + #: java/jcf-parse.c:1029 + msgid "source file seen twice on command line and will be compiled only once." + msgstr "" + + #: java/jcf-parse.c:1045 + #, fuzzy + msgid "no input file specified" + msgstr "Ingen inddatafiler" + + #: java/jcf-parse.c:1061 + #, fuzzy, c-format + msgid "can't close input file %s" + msgstr "Ingen kald i filen %s\n" + + #: java/jcf-parse.c:1075 + #, fuzzy, c-format + msgid "Premature end of input file %s" + msgstr "%s ved slutning af inddata" + + #: java/jcf-parse.c:1098 + #, c-format + msgid "bad zip/jar file %s" + msgstr "" + + #: java/jcf-write.c:2597 + #, c-format + msgid "internal error in generate_bytecode_insn - tree code not implemented: %s" + msgstr "" + + #: java/jcf-write.c:3307 + #, fuzzy, c-format + msgid "can't create directory %s" + msgstr "%s: kan ikke få fat i arbejdskataloget: %s\n" + + #: java/jcf-write.c:3334 + #, fuzzy, c-format + msgid "can't to open %s" + msgstr "fejl ved åbning af %s" + + #: java/jv-scan.c:183 + msgid "Only one of `--print-main', `--list-class', and `--complexity' allowed" + msgstr "" + + #: java/jv-scan.c:186 + #, fuzzy, c-format + msgid "Can't open output file `%s'" + msgstr "Kunne ikke åbne uddatafilen %s.\n" + + #: java/jv-scan.c:222 + #, fuzzy, c-format + msgid "File not found `%s'" + msgstr "kan ikke finde '%s'" + + #: java/jvspec.c:360 + msgid "can't specify `-D' without `--main'\n" + msgstr "" + + #: java/jvspec.c:368 + msgid "Warning: already-compiled .class files ignored with -C" + msgstr "" + + #: java/jvspec.c:375 + #, fuzzy + msgid "cannot specify both -C and -o" + msgstr "kan ikke bruge både -EB og -EL" + + #: java/jvspec.c:387 + #, fuzzy + msgid "cannot create temporary file" + msgstr "kan ikke oprette opbevaringsstedinformationsfilen '%s'" + + #: java/jvspec.c:415 + msgid "using both @FILE with multiple files not implemented" + msgstr "" + + #: java/jvspec.c:456 + #, fuzzy + msgid "cannot specify `main' class when not linking" + msgstr "kan ikke erklære '::main' som inline" + + #: java/lang-options.h:32 + msgid "Disable automatic array bounds checking" + msgstr "" + + #: java/lang-options.h:34 + msgid "Make is_compiled_class return 1" + msgstr "" + + #: java/lang-options.h:38 + msgid "Dump class files to .class" + msgstr "" + + #: java/lang-options.h:40 + msgid "input file is list of file names to compile" + msgstr "" + + #: java/lang-options.h:42 + #, fuzzy + msgid "Generate code for Boehm GC" + msgstr "Generér kode til en given cpu" + + #: java/lang-options.h:44 + msgid "Don't put synchronization structure in each object" + msgstr "" + + #: java/lang-options.h:46 + msgid "Assume native functions are implemented using JNI" + msgstr "" + + #: java/lang-options.h:48 + msgid "Set class path and suppress system path" + msgstr "" + + #: java/lang-options.h:50 + msgid "Set class path" + msgstr "" + + #: java/lang-options.h:52 + msgid "Choose class whose main method should be used" + msgstr "" + + #: java/lang-options.h:54 + msgid "Choose input encoding (default is UTF-8)" + msgstr "" + + #: java/lang-options.h:56 + msgid "Add directory to class path" + msgstr "" + + #: java/lang-options.h:58 + msgid "Directory where class files should be written" + msgstr "" + + #: java/lang-options.h:61 + msgid "Use built-in instructions for division" + msgstr "" + + #: java/lang-options.h:63 + msgid "Warn if modifiers are specified when not necessary" + msgstr "" + + #: java/lang-options.h:65 + msgid "Warn if deprecated empty statements are found" + msgstr "" + + #: java/lang-options.h:67 + msgid "Warn if .class files are out of date" + msgstr "" + + #: java/lang-options.h:69 + msgid "Always check for non gcj generated classes archives" + msgstr "" + + #: java/lang.c:387 + msgid "can't do dependency tracking with input from stdin" + msgstr "" + + #: java/lang.c:403 + msgid "couldn't determine target name for dependency tracking" + msgstr "" + + #: java/lex.c:297 + #, c-format + msgid "" + "unknown encoding: `%s'\n" + "This might mean that your locale's encoding is not supported\n" + "by your system's iconv(3) implementation. If you aren't trying\n" + "to use a particular encoding for your input file, try the\n" + "`--encoding=UTF-8' option." + msgstr "" + + #: java/mangle.c:85 + #, c-format + msgid "Can't mangle %s" + msgstr "" + + #: java/mangle_name.c:151 java/mangle_name.c:228 + #, fuzzy + msgid "internal error - invalid Utf8 name" + msgstr "intern fejl: " + + #: java/parse.y:737 java/parse.y:775 + #, fuzzy + msgid "Missing name" + msgstr "manglende startværdi" + + #: java/parse.y:739 java/parse.y:777 java/parse.y:796 java/parse.y:977 + #: java/parse.y:1324 java/parse.y:1527 java/parse.y:1529 java/parse.y:1758 + #: java/parse.y:1784 java/parse.y:1795 java/parse.y:1806 java/parse.y:1818 + msgid "';' expected" + msgstr "" + + #: java/parse.y:794 + msgid "'*' expected" + msgstr "" + + #: java/parse.y:808 + #, fuzzy + msgid "Class or interface declaration expected" + msgstr "fundet en henvisningsefterfølgelse der går i ring" + + #: java/parse.y:843 java/parse.y:845 + msgid "Missing class name" + msgstr "" + + #: java/parse.y:848 java/parse.y:852 java/parse.y:860 java/parse.y:1022 + #: java/parse.y:1270 java/parse.y:1272 java/parse.y:1593 java/parse.y:1829 + #: java/parse.y:1861 java/parse.y:1913 + msgid "'{' expected" + msgstr "" + + #: java/parse.y:862 + #, fuzzy + msgid "Missing super class name" + msgstr "modstridende superklassenavn '%s'" + + #: java/parse.y:872 java/parse.y:888 + msgid "Missing interface name" + msgstr "" + + #. That's for () + #: java/parse.y:956 java/parse.y:1289 java/parse.y:1348 java/parse.y:1551 + #: java/parse.y:1773 java/parse.y:1782 java/parse.y:1793 java/parse.y:1804 + #: java/parse.y:1816 java/parse.y:1833 java/parse.y:1835 java/parse.y:1906 + #: java/parse.y:2077 java/parse.y:2138 java/parse.y:2292 java/parse.y:2294 + #: java/parse.y:2301 java/parse.y:2308 java/parse.y:2319 java/parse.y:2321 + #: java/parse.y:2358 java/parse.y:2360 java/parse.y:2362 java/parse.y:2383 + #: java/parse.y:2385 java/parse.y:2387 java/parse.y:2403 java/parse.y:2405 + #: java/parse.y:2426 java/parse.y:2428 java/parse.y:2430 java/parse.y:2458 + #: java/parse.y:2460 java/parse.y:2462 java/parse.y:2464 java/parse.y:2482 + #: java/parse.y:2484 java/parse.y:2495 java/parse.y:2506 java/parse.y:2517 + #: java/parse.y:2528 java/parse.y:2539 java/parse.y:2552 java/parse.y:2556 + #: java/parse.y:2558 java/parse.y:2571 + #, fuzzy + msgid "Missing term" + msgstr "manglende startværdi" + + #: java/parse.y:971 + #, fuzzy + msgid "Missing variable initializer" + msgstr "manglende startværdi" + + #: java/parse.y:988 + #, fuzzy + msgid "Invalid declaration" + msgstr "Ugyldig %%d-operand" + + #: java/parse.y:994 + #, fuzzy + msgid "Can't specify array dimension in a declaration" + msgstr "to typer angivet i én tom erklæring" + + #: java/parse.y:996 java/parse.y:1072 java/parse.y:2113 java/parse.y:2135 + #: java/parse.y:2139 java/parse.y:2174 java/parse.y:2251 java/parse.y:2261 + msgid "']' expected" + msgstr "" + + #: java/parse.y:1000 + msgid "Unbalanced ']'" + msgstr "" + + #: java/parse.y:1036 + msgid "Invalid method declaration, method name required" + msgstr "" + + #: java/parse.y:1042 java/parse.y:1044 java/parse.y:1997 + msgid "Identifier expected" + msgstr "" + + #: java/parse.y:1047 + msgid "Invalid method declaration, return type required" + msgstr "" + + #: java/parse.y:1070 java/parse.y:1507 java/parse.y:1514 java/parse.y:1523 + #: java/parse.y:1525 java/parse.y:1553 java/parse.y:1661 java/parse.y:1942 + #: java/parse.y:1995 + msgid "')' expected" + msgstr "" + + #: java/parse.y:1086 + msgid "Missing formal parameter term" + msgstr "" + + #: java/parse.y:1101 java/parse.y:1106 + #, fuzzy + msgid "Missing identifier" + msgstr "manglende startværdi" + + #: java/parse.y:1126 java/parse.y:1135 + msgid "Missing class type term" + msgstr "" + + #: java/parse.y:1287 + #, fuzzy + msgid "Invalid interface type" + msgstr "ugyldig '#pragma interface'" + + #: java/parse.y:1471 java/parse.y:1640 java/parse.y:1642 + msgid "':' expected" + msgstr "" + + #: java/parse.y:1493 java/parse.y:1498 java/parse.y:1503 + #, fuzzy + msgid "Invalid expression statement" + msgstr "ugyldigt udtryk som operand" + + #: java/parse.y:1521 java/parse.y:1549 java/parse.y:1589 java/parse.y:1657 + #: java/parse.y:1725 java/parse.y:1831 java/parse.y:1899 java/parse.y:1989 + #: java/parse.y:1991 java/parse.y:1999 java/parse.y:2234 java/parse.y:2236 + msgid "'(' expected" + msgstr "" + + #: java/parse.y:1591 + msgid "Missing term or ')'" + msgstr "" + + #: java/parse.y:1638 + #, fuzzy + msgid "Missing or invalid constant expression" + msgstr "tabel får tildelt en startværdi fra et tabeludtryk der ikke er konstant" + + #: java/parse.y:1659 + #, fuzzy + msgid "Missing term and ')' expected" + msgstr "%s er kortere end forventet\n" + + #: java/parse.y:1698 + #, fuzzy + msgid "Invalid control expression" + msgstr "ugyldigt sandhedsværdiudtryk" + + #: java/parse.y:1700 java/parse.y:1702 + #, fuzzy + msgid "Invalid update expression" + msgstr "ugyldigt sandhedsværdiudtryk" + + #: java/parse.y:1727 + #, fuzzy + msgid "Invalid init statement" + msgstr "ugyldig venstreværdi i asm-sætning" + + #: java/parse.y:1902 + msgid "Missing term or ')' expected" + msgstr "" + + #: java/parse.y:1944 + #, fuzzy + msgid "'class' or 'this' expected" + msgstr "%s er kortere end forventet\n" + + #: java/parse.y:1946 java/parse.y:1948 + msgid "'class' expected" + msgstr "" + + #: java/parse.y:1993 + #, fuzzy + msgid "')' or term expected" + msgstr "%s er kortere end forventet\n" + + #: java/parse.y:2111 + msgid "'[' expected" + msgstr "" + + #: java/parse.y:2189 + msgid "Field expected" + msgstr "" + + #: java/parse.y:2246 java/parse.y:2256 + #, fuzzy + msgid "Missing term and ']' expected" + msgstr "%s er kortere end forventet\n" + + #: java/parse.y:2351 + #, fuzzy + msgid "']' expected, invalid type expression" + msgstr "ugyldigt sandhedsværdiudtryk" + + #: java/parse.y:2354 + #, fuzzy + msgid "Invalid type expression" + msgstr "ugyldigt sandhedsværdiudtryk" + + #: java/parse.y:2466 + #, fuzzy + msgid "Invalid reference type" + msgstr "new kan ikke bruges på en referencetype" + + #: java/parse.y:2944 + msgid "Constructor invocation must be first thing in a constructor" + msgstr "" + + #: java/parse.y:2946 + #, fuzzy + msgid "Only constructors can invoke constructors" + msgstr "kun konstruktionsfunktioner har stamklasseklargøringer" + + #: java/parse.y:2955 + #, c-format + msgid ": `%s' JDK1.1(TM) feature" + msgstr "" + + #: java/parse.y:3015 java/parse.y:3017 + #, fuzzy, c-format + msgid "" + "%s.\n" + "%s" + msgstr "%s: %s" + + #: java/parse.y:3480 + msgid "Can't use '$' as a separator for inner classes" + msgstr "" + + #: java/parse.y:6577 + #, c-format + msgid "malformed .zip archive in CLASSPATH: %s" + msgstr "" + + #: java/parse.y:6648 + #, c-format + msgid "Can't find default package `%s'. Check the CLASSPATH environment variable and the access to the archives." + msgstr "" + + #: java/parse.y:11787 + #, fuzzy, c-format + msgid "missing static field `%s'" + msgstr "manglende mellemrum efter tallet '%s'" + + #: java/parse.y:11792 + #, fuzzy, c-format + msgid "not a static field `%s'" + msgstr "kunne ikke få fat i oplysninger om filen '%s'" + + #: java/parse.y:11845 + #, fuzzy, c-format + msgid "No case for %s" + msgstr "Ingen kald i filen %s\n" + + #: java/parse.y:13030 + #, fuzzy, c-format + msgid "unregistered operator %s" + msgstr "ukendt tilvalg '-%s'" + + #: java/typeck.c:178 + #, fuzzy + msgid "internal error - use of undefined type" + msgstr "ugyldig brug af en type '%s %s' der ikke er defineret" + + #: java/typeck.c:557 + #, fuzzy + msgid "junk at end of signature string" + msgstr "ragelse i slutningen af #%s" + + #: java/verify.c:464 + msgid "bad pc in exception_table" + msgstr "" + + #: java/verify.c:1344 + #, c-format + msgid "unknown opcode %d@pc=%d during verification" + msgstr "" + + #: java/verify.c:1414 java/verify.c:1427 java/verify.c:1431 + #, c-format + msgid "verification error at PC=%d" + msgstr "" + + #: objc/lang-options.h:27 + msgid "Dump decls to a .decl file" + msgstr "" + + #: objc/lang-options.h:29 + #, fuzzy + msgid "Generate code for GNU runtime environment" + msgstr "Generér kode til en given cpu" + + #: objc/lang-options.h:32 + #, fuzzy + msgid "Generate code for NeXT runtime environment" + msgstr "Generér kode til en given cpu" + + #: objc/lang-options.h:35 + msgid "Warn if a selector has multiple methods" + msgstr "" + + #: objc/lang-options.h:39 + msgid "Do not warn if inherited methods are unimplemented" + msgstr "" + + #: objc/lang-options.h:41 + msgid "Generate C header of platform specific features" + msgstr "" + + #: objc/lang-options.h:43 + #, fuzzy + msgid "Specify the name of the class for constant strings" + msgstr "parameteren til 'asm' er ikke en konstant streng" + + #: objc/objc-act.c:811 + msgid "no class name specified as argument to -fconstant-string-class" + msgstr "" + + #: objc/objc-act.c:972 + #, c-format + msgid "object does not conform to the `%s' protocol" + msgstr "" + + #: objc/objc-act.c:1010 + #, c-format + msgid "class `%s' does not implement the `%s' protocol" + msgstr "" + + #: objc/objc-act.c:1091 + #, c-format + msgid "`%s' cannot be statically allocated" + msgstr "" + + #: objc/objc-act.c:1147 + #, c-format + msgid "Unexpected type for `id' (%s)" + msgstr "" + + #: objc/objc-act.c:1152 + msgid "Undefined type `id', please import " + msgstr "Typen 'id' er ikke defineret, importér venligst " + + #: objc/objc-act.c:1200 objc/objc-act.c:5359 + #, c-format + msgid "Cannot find protocol declaration for `%s'" + msgstr "Kan ikke finde protokolerklæringen af '%s'" + + #: objc/objc-act.c:1422 objc/objc-act.c:5879 objc/objc-act.c:6177 + #: objc/objc-act.c:6226 objc/objc-act.c:6262 objc/objc-parse.y:1371 + #, c-format + msgid "Cannot find interface declaration for `%s'" + msgstr "Kan ikke finde interface-erklæringen af '%s'" + + #: objc/objc-act.c:2460 + #, fuzzy, c-format + msgid "Cannot find class `%s'" + msgstr "kan ikke finde '%s'" + + #: objc/objc-act.c:2462 + #, fuzzy, c-format + msgid "Class `%s' already exists" + msgstr "feltet '%s' er allerede blevet klargjort" + + #. fatal did not work with 2 args...should fix + #: objc/objc-act.c:2586 + #, c-format + msgid "Cannot find interface declaration for `%s', superclass of `%s'" + msgstr "Kan ikke interface-erklæringen af '%s', superklasse til '%s'" + + #: objc/objc-act.c:2593 + #, c-format + msgid "Circular inheritance in interface declaration for `%s'" + msgstr "Cirkulær nedarvning i interface-erklæringen af '%s'" + + #: objc/objc-act.c:3643 objc/objc-act.c:3660 + msgid "inconsistent instance variable specification" + msgstr "inkonsistent instansvariabelangivelse" + + #: objc/objc-act.c:4854 + #, fuzzy, c-format + msgid "multiple declarations for method `%s'" + msgstr "mere end én erklæring af klassemetoden '%s'." + + #: objc/objc-act.c:4968 + #, fuzzy, c-format + msgid "invalid receiver type `%s'" + msgstr "ugyldig brug af en type '%s %s' der ikke er defineret" + + #: objc/objc-act.c:5036 objc/objc-act.c:5062 objc/objc-act.c:5110 + #, c-format + msgid "`%s' does not respond to `%s'" + msgstr "" + + #: objc/objc-act.c:5042 objc/objc-act.c:7283 + #, c-format + msgid "no super class declared in interface for `%s'" + msgstr "der er ikke erklæret en superklasse i interface-erklæringen af '%s'" + + #: objc/objc-act.c:5140 + msgid "cannot find class (factory) method." + msgstr "" + + #: objc/objc-act.c:5141 objc/objc-act.c:5185 + #, c-format + msgid "return type for `%s' defaults to id" + msgstr "" + + #: objc/objc-act.c:5158 + #, fuzzy, c-format + msgid "method `%s' not implemented by protocol." + msgstr "Profilgenerering understøttes ikke endnu." + + #: objc/objc-act.c:5167 + msgid "return type defaults to id" + msgstr "" + + #: objc/objc-act.c:5184 + #, fuzzy + msgid "cannot find method." + msgstr "kan ikke finde 'nm'" + + #. Historically, a class method that produced objects (factory + #. method) would assign `self' to the instance that it + #. allocated. This would effectively turn the class method into + #. an instance method. Following this assignment, the instance + #. variables could be accessed. That practice, while safe, + #. violates the simple rule that a class method should not refer + #. to an instance variable. It's better to catch the cases + #. where this is done unknowingly than to support the above + #. paradigm. + #: objc/objc-act.c:5428 + #, fuzzy, c-format + msgid "instance variable `%s' accessed in class method" + msgstr "instansvariablen '%s' er erklæret '%s'" + + #: objc/objc-act.c:5680 + #, c-format + msgid "duplicate definition of class method `%s'." + msgstr "mere end én definition af klassemetoden '%s'." + + #: objc/objc-act.c:5686 + #, c-format + msgid "duplicate declaration of class method `%s'." + msgstr "mere end én erklæring af klassemetoden '%s'." + + #: objc/objc-act.c:5722 + #, c-format + msgid "duplicate definition of instance method `%s'." + msgstr "mere end én definition af instansmetoden '%s'." + + #: objc/objc-act.c:5728 + #, c-format + msgid "duplicate declaration of instance method `%s'." + msgstr "mere end én erklæring af instansmetoden '%s'." + + #: objc/objc-act.c:5768 + #, fuzzy, c-format + msgid "duplicate interface declaration for category `%s(%s)'" + msgstr "Kan ikke finde interface-erklæringen af '%s'" + + #: objc/objc-act.c:5854 + #, c-format + msgid "instance variable `%s' is declared private" + msgstr "instansvariablen '%s' er erklæret privat" + + #: objc/objc-act.c:5901 + #, c-format + msgid "instance variable `%s' is declared %s" + msgstr "instansvariablen '%s' er erklæret '%s'" + + #: objc/objc-act.c:5911 + msgid "static access to object of type `id'" + msgstr "" + + #: objc/objc-act.c:5945 objc/objc-act.c:6039 + #, fuzzy, c-format + msgid "incomplete implementation of class `%s'" + msgstr "omimplementering af klassen '%s'" + + #: objc/objc-act.c:5949 objc/objc-act.c:6044 + #, fuzzy, c-format + msgid "incomplete implementation of category `%s'" + msgstr "omimplementering af klassen '%s'" + + #: objc/objc-act.c:5954 objc/objc-act.c:6049 + #, fuzzy, c-format + msgid "method definition for `%c%s' not found" + msgstr "metodedefinitionen optræder ikke i en klassekontekst" + + #: objc/objc-act.c:6090 + #, c-format + msgid "%s `%s' does not fully implement the `%s' protocol" + msgstr "" + + #: objc/objc-act.c:6149 + #, c-format + msgid "reimplementation of class `%s'" + msgstr "omimplementering af klassen '%s'" + + #: objc/objc-act.c:6191 + #, c-format + msgid "conflicting super class name `%s'" + msgstr "modstridende superklassenavn '%s'" + + #: objc/objc-act.c:6206 + #, fuzzy, c-format + msgid "duplicate interface declaration for class `%s'" + msgstr "mere end én erklæring af klassemetoden '%s'." + + #: objc/objc-act.c:6449 + #, fuzzy, c-format + msgid "duplicate declaration for protocol `%s'" + msgstr "mere end én erklæring af klassemetoden '%s'." + + #: objc/objc-act.c:7324 + msgid "[super ...] must appear in a method context" + msgstr "[super ...] skal optræde i en metodekontekst" + + #: objc/objc-act.c:8287 objc/objc-act.c:8303 + #, c-format + msgid "potential selector conflict for method `%s'" + msgstr "" + + #: objc/objc-parse.y:2159 + #, fuzzy + msgid "`@end' must appear in an implementation context" + msgstr "[super ...] skal optræde i en metodekontekst" + + #: objc/objc-parse.y:2425 objc/objc-parse.y:2450 + msgid "method definition not in class context" + msgstr "metodedefinitionen optræder ikke i en klassekontekst" + + #: objc/objc-parse.y:3278 + #, fuzzy + msgid "syntax error at '@' token" + msgstr "syntaksfejl" + + #. If we didn't find this parameter, issue an error message. + #: params.c:80 + #, fuzzy, c-format + msgid "invalid parameter `%s'" + msgstr "ugyldig catch-parameter" + + #: profile.c:490 + msgid "Arc profiling: some edge counts were bad." + msgstr "" + + #: profile.c:931 + #, fuzzy, c-format + msgid "file %s not found, execution counts assumed to be zero." + msgstr "Antager at alle kørselstællere er nul.\n" + + #: protoize.c:601 + #, c-format + msgid "%s: internal abort\n" + msgstr "%s: intern afbrydelse\n" + + #: protoize.c:692 + #, c-format + msgid "%s: error writing file `%s': %s\n" + msgstr "%s: fejl ved skrivning til filen '%s': %s\n" + + #: protoize.c:737 + #, c-format + msgid "%s: usage '%s [ -VqfnkN ] [ -i ] [ filename ... ]'\n" + msgstr "%s: brug '%s [ -VqfnkN ] [ -i ] [ filenavn ... ]'\n" + + #: protoize.c:740 + #, c-format + msgid "%s: usage '%s [ -VqfnkNlgC ] [ -B ] [ filename ... ]'\n" + msgstr "%s: brug '%s [ -VqfnkNlgC ] [ -B ] [ filnavn ... ]'\n" + + #: protoize.c:847 + #, c-format + msgid "%s: warning: no read access for file `%s'\n" + msgstr "%s: advarsel: ingen læseadgang til filen '%s'\n" + + #: protoize.c:855 + #, c-format + msgid "%s: warning: no write access for file `%s'\n" + msgstr "%s: advarsel: ingen skriveadgang til filen '%s'\n" + + #: protoize.c:863 + #, c-format + msgid "%s: warning: no write access for dir containing `%s'\n" + msgstr "%s: advarsel: ingen skriveadgang til kataloget der indeholder '%s'\n" + + #. Catch cases like /.. where we try to backup to a + #. point above the absolute root of the logical file + #. system. + #: protoize.c:1281 + #, c-format + msgid "%s: invalid file name: %s\n" + msgstr "%s: ugyldigt filnavn: %s\n" + + #: protoize.c:1433 + #, c-format + msgid "%s: %s: can't get status: %s\n" + msgstr "%s: %s: kan ikke finde ud filens status: %s\n" + + #: protoize.c:1454 + #, c-format + msgid "\n%s: fatal error: aux info file corrupted at line %d\n" + msgstr "\n%s: fatal fejl: hjælpeinformationsfilen er beskadiget ved linje %d\n" + + #: protoize.c:1790 + #, c-format + msgid "%s:%d: declaration of function `%s' takes different forms\n" + msgstr "%s:%d: erklæringen af funktionen '%s' antager forskellige former\n" + + #: protoize.c:2048 + #, c-format + msgid "%s: compiling `%s'\n" + msgstr "%s: oversætter '%s'\n" + + #: protoize.c:2071 + #, c-format + msgid "%s: wait: %s\n" + msgstr "%s: vent: %s\n" + + #: protoize.c:2076 + #, c-format + msgid "%s: subprocess got fatal signal %d\n" + msgstr "%s: barneprocessen modtog fatalt signal %d\n" + + #: protoize.c:2084 + #, c-format + msgid "%s: %s exited with status %d\n" + msgstr "%s: %s afsluttede med status %d\n" + + #: protoize.c:2136 + #, c-format + msgid "%s: warning: missing SYSCALLS file `%s'\n" + msgstr "%s: advarsel: manglende SYSCALLS-fil '%s'\n" + + #: protoize.c:2145 protoize.c:2174 + #, c-format + msgid "%s: can't read aux info file `%s': %s\n" + msgstr "%s: kan ikke læse hjælpeinformationsfilen '%s': %s\n" + + #: protoize.c:2190 protoize.c:2218 + #, c-format + msgid "%s: can't get status of aux info file `%s': %s\n" + msgstr "%s: kan ikke finde status af hjælpeinformationsfilen '%s': %s\n" + + #: protoize.c:2246 + #, c-format + msgid "%s: can't open aux info file `%s' for reading: %s\n" + msgstr "%s: kan ikke åbne hjælpeinformationsfilen '%s' til at læse fra: %s\n" + + #: protoize.c:2264 + #, c-format + msgid "%s: error reading aux info file `%s': %s\n" + msgstr "%s: fejl ved læsning af hjælpeinformationsfilen '%s': %s\n" + + #: protoize.c:2277 + #, c-format + msgid "%s: error closing aux info file `%s': %s\n" + msgstr "%s: fejl ved lukning af hjælpeinformationsfilen '%s': %s\n" + + #: protoize.c:2293 + #, c-format + msgid "%s: can't delete aux info file `%s': %s\n" + msgstr "%s: kan ikke slette hjælpeinformationsfilen '%s': %s\n" + + #: protoize.c:2375 protoize.c:4377 + #, c-format + msgid "%s: can't delete file `%s': %s\n" + msgstr "%s: kan ikke slette filen '%s': %s\n" + + #: protoize.c:2454 + #, c-format + msgid "%s: warning: can't rename file `%s' to `%s': %s\n" + msgstr "%s: advarsel: kan ikke omdøbe filen '%s' til '%s': %s\n" + + #: protoize.c:2579 + #, c-format + msgid "%s: conflicting extern definitions of '%s'\n" + msgstr "%s: modstridende eksterne definitioner af '%s'\n" + + #: protoize.c:2583 + #, c-format + msgid "%s: declarations of '%s' will not be converted\n" + msgstr "%s: erklæringer af '%s' vil ikke blive omdannet\n" + + #: protoize.c:2585 + #, c-format + msgid "%s: conflict list for '%s' follows:\n" + msgstr "%s: modstridene for '%s' følger:\n" + + #: protoize.c:2618 + #, c-format + msgid "%s: warning: using formals list from %s(%d) for function `%s'\n" + msgstr "%s: advarsel: bruger parameterlisten fra %s(%d) til funktionen '%s'\n" + + #: protoize.c:2658 + #, c-format + msgid "%s: %d: `%s' used but missing from SYSCALLS\n" + msgstr "%s: %d: '%s' benyttet, men mangler i SYSCALLS\n" + + #: protoize.c:2664 + #, c-format + msgid "%s: %d: warning: no extern definition for `%s'\n" + msgstr "%s: %d: advarsel: ingen ekstern definition af '%s'\n" + + #: protoize.c:2695 + #, c-format + msgid "%s: warning: no static definition for `%s' in file `%s'\n" + msgstr "%s: advarsel: ingen statisk definition af '%s' i filen '%s'\n" + + #: protoize.c:2701 + #, c-format + msgid "%s: multiple static defs of `%s' in file `%s'\n" + msgstr "%s: flere statiske definitioner af '%s' i filen '%s'\n" + + #: protoize.c:2874 protoize.c:2877 + #, c-format + msgid "%s: %d: warning: source too confusing\n" + msgstr "%s: %d: advarsel: koden er for forvirrende\n" + + #: protoize.c:3083 + #, c-format + msgid "%s: %d: warning: varargs function declaration not converted\n" + msgstr "%s: %d: advarsel: funktionserklæring med variabel parameterliste er ikke omdannet\n" + + #: protoize.c:3098 + #, c-format + msgid "%s: declaration of function `%s' not converted\n" + msgstr "%s: erklæringen af funktionen '%s' er ikke omdannet\n" + + #: protoize.c:3221 + #, c-format + msgid "%s: warning: too many parameter lists in declaration of `%s'\n" + msgstr "%s: advarsel: for mange parameterlister i erklæringen af '%s'\n" + + #: protoize.c:3242 + #, c-format + msgid "\n%s: warning: too few parameter lists in declaration of `%s'\n" + msgstr "\n%s: advarsel: for få parameterlister i erklæringen af '%s'\n" + + #: protoize.c:3340 + #, c-format + msgid "%s: %d: warning: found `%s' but expected `%s'\n" + msgstr "%s: %d: advarsel: fandt '%s', men forventede '%s'\n" + + #: protoize.c:3518 + #, c-format + msgid "%s: local declaration for function `%s' not inserted\n" + msgstr "%s: den lokale erklæring af funktionen '%s' er ikke indsat\n" + + #: protoize.c:3545 + #, c-format + msgid "\n%s: %d: warning: can't add declaration of `%s' into macro call\n" + msgstr "\n%s: %d: advarsel: kan ikke tilføje erklæringen af '%s' i makrokald\n" + + #: protoize.c:3619 + #, c-format + msgid "%s: global declarations for file `%s' not inserted\n" + msgstr "%s: globale erklæringer for filen '%s' er ikke indsat\n" + + #: protoize.c:3710 protoize.c:3740 + #, c-format + msgid "%s: definition of function `%s' not converted\n" + msgstr "%s: definitionen af funktionen '%s' er ikke omdannet\n" + + #: protoize.c:3729 + #, c-format + msgid "%s: %d: warning: definition of %s not converted\n" + msgstr "%s: %d: advarsel: definitionen af '%s' er ikke omdannet\n" + + #: protoize.c:4059 + #, c-format + msgid "%s: found definition of `%s' at %s(%d)\n" + msgstr "%s: fandt definitionen af '%s' ved %s(%d)\n" + + #. If we make it here, then we did not know about this + #. function definition. + #: protoize.c:4075 + #, c-format + msgid "%s: %d: warning: `%s' excluded by preprocessing\n" + msgstr "%s: %d: advarsel: '%s' ekskluderet af forbehandlingen\n" + + #: protoize.c:4078 + #, c-format + msgid "%s: function definition not converted\n" + msgstr "%s: funktionsdefinitionen er ikke omdannet\n" + + #: protoize.c:4137 + #, c-format + msgid "%s: `%s' not converted\n" + msgstr "%s: '%s' ikke omdannet\n" + + #: protoize.c:4145 + #, c-format + msgid "%s: would convert file `%s'\n" + msgstr "%s: ville omdanne filen '%s'\n" + + #: protoize.c:4148 + #, c-format + msgid "%s: converting file `%s'\n" + msgstr "%s: omdanner filen '%s'\n" + + #: protoize.c:4158 + #, c-format + msgid "%s: can't get status for file `%s': %s\n" + msgstr "%s: kan ikke finde status af filen '%s': %s\n" + + #: protoize.c:4200 + #, c-format + msgid "%s: can't open file `%s' for reading: %s\n" + msgstr "%s: kan ikke åbne filen '%s' til at læse fra: %s\n" + + #: protoize.c:4215 + #, c-format + msgid "\n%s: error reading input file `%s': %s\n" + msgstr "\n%s: fejl ved læsning af inddatafilen '%s': %s\n" + + #: protoize.c:4249 + #, c-format + msgid "%s: can't create/open clean file `%s': %s\n" + msgstr "%s: kan ikke oprette/åbne oprydningsfilen '%s': %s\n" + + #: protoize.c:4354 + #, c-format + msgid "%s: warning: file `%s' already saved in `%s'\n" + msgstr "%s: advarsel: filen '%s' er allerede gemt i '%s'\n" + + #: protoize.c:4362 + #, c-format + msgid "%s: can't link file `%s' to `%s': %s\n" + msgstr "%s: kan ikke kæde filen '%s' sammen med '%s': %s\n" + + #: protoize.c:4392 + #, c-format + msgid "%s: can't create/open output file `%s': %s\n" + msgstr "%s: kan ikke oprette/åbne uddatafilen '%s': %s\n" + + #: protoize.c:4425 + #, c-format + msgid "%s: can't change mode of file `%s': %s\n" + msgstr "%s: kan ikke ændre tilstanden af filen '%s': '%s'\n" + + #: protoize.c:4611 + #, c-format + msgid "%s: cannot get working directory: %s\n" + msgstr "%s: kan ikke få fat i arbejdskataloget: %s\n" + + #: protoize.c:4709 + #, c-format + msgid "%s: input file names must have .c suffixes: %s\n" + msgstr "%s: inddatafilnavn skal have '.c'-endelser: %s\n" + + #: real.c:802 real.c:979 + #, fuzzy + msgid "conversion from NaN to int" + msgstr "konvertering til en ufuldstændig type" + + #: real.c:825 + msgid "conversion from NaN to unsigned int" + msgstr "" + + #: real.c:2700 + msgid "floating point overflow" + msgstr "" + + #: real.c:4340 real.c:6619 real.c:6700 + #, fuzzy + msgid "overflow on truncation to integer" + msgstr "for mange enum-værdier" + + #: real.c:4412 + msgid "overflow on truncation to unsigned integer" + msgstr "" + + #: real.c:5760 + #, c-format + msgid "%s: argument domain error" + msgstr "" + + #: real.c:5761 + #, c-format + msgid "%s: function singularity" + msgstr "" + + #: real.c:5762 + #, c-format + msgid "%s: overflow range error" + msgstr "" + + #: real.c:5763 + #, c-format + msgid "%s: underflow range error" + msgstr "" + + #: real.c:5764 + #, c-format + msgid "%s: total loss of precision" + msgstr "" + + #: real.c:5765 + #, c-format + msgid "%s: partial loss of precision" + msgstr "" + + #: real.c:5766 + #, c-format + msgid "%s: NaN - producing operation" + msgstr "" + + #: reg-stack.c:655 + #, c-format + msgid "Output constraint %d must specify a single register" + msgstr "" + + #: reg-stack.c:675 + msgid "Output regs must be grouped at top of stack" + msgstr "" + + #: reg-stack.c:712 + msgid "Implicitly popped regs must be grouped at top of stack" + msgstr "" + + #: reg-stack.c:731 + #, fuzzy, c-format + msgid "Output operand %d must use `&' constraint" + msgstr "uddataoperandbegrænsning mangler '='" + + #: regclass.c:703 + #, c-format + msgid "can't use '%s' as a %s register" + msgstr "kan ikke bruge '%s' som et %s-register" + + #: regclass.c:725 + msgid "global register variable follows a function definition" + msgstr "en global registervariabel følger en funktionsdefinition" + + #: regclass.c:729 + #, fuzzy + msgid "register used for two global register variables" + msgstr "ugyldigt registernavn '%s' for registervariabel" + + #: regclass.c:734 + #, fuzzy + msgid "call-clobbered register used for global register variable" + msgstr "ugyldigt registernavn '%s' for registervariabel" + + #: reload.c:1198 + #, fuzzy + msgid "cannot reload integer constant operand in `asm'" + msgstr "mere end %d operander i 'asm'" + + #: reload.c:1220 + #, fuzzy + msgid "impossible register constraint in `asm'" + msgstr "muligvis den rigtige begyndelse af uafsluttet konstant" + + #: reload.c:3330 + #, fuzzy + msgid "`&' constraint used with no register class" + msgstr "'%%'-begrænsning brugt med sidste operand" + + #: reload.c:3487 reload.c:3701 + #, fuzzy + msgid "inconsistent operand constraints in an `asm'" + msgstr "inddataoperandbegrænsningen indeholder '%c'" + + #: reload1.c:1235 + msgid "frame size too large for reliable stack checking" + msgstr "" + + #: reload1.c:1238 + msgid "try reducing the number of local variables" + msgstr "" + + #: reload1.c:1893 + #, fuzzy, c-format + msgid "Can't find a register in class `%s' while reloading `asm'." + msgstr "Kan ikke finde et register at bortødsle i klassen '%s'" + + #: reload1.c:1897 + #, c-format + msgid "Unable to find a register to spill in class `%s'." + msgstr "Kan ikke finde et register at bortødsle i klassen '%s'" + + #: reload1.c:3922 + msgid "`asm' operand requires impossible reload" + msgstr "" + + #: reload1.c:5033 + #, fuzzy + msgid "`asm' operand constraint incompatible with operand size" + msgstr "'%%'-begrænsning brugt med sidste operand" + + #: reload1.c:6620 + #, fuzzy + msgid "output operand is constant in `asm'" + msgstr "uddataoperandbegrænsning mangler '='" + + #: rtl.c:1289 + #, fuzzy, c-format + msgid "RTL check: access of elt %d of `%s' with last elt %d in %s, at %s:%d" + msgstr "RTL-tjek: tilgang til udtrykstræ %d fra '%s' hvis sidste udtrykstræ er %d" + + #: rtl.c:1304 + #, fuzzy, c-format + msgid "RTL check: expected elt %d type '%c', have '%c' (rtx %s) in %s, at %s:%d" + msgstr "RTL-tjek: forventede udtrykstræ %d type '%c', har '%c' (registeroverførselsudtryk %s)" + + #: rtl.c:1320 + #, fuzzy, c-format + msgid "RTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s) in %s, at %s:%d" + msgstr "RTL-tjek: forventede udtrykstræ %d type '%c' eller '%c', har '%c' (registeroverførselsudtryk %s)" + + #: rtl.c:1333 + #, fuzzy, c-format + msgid "RTL check: expected code `%s', have `%s' in %s, at %s:%d" + msgstr "RTL-tjek: forventede koden '%s', har '%s'" + + #: rtl.c:1347 + #, fuzzy, c-format + msgid "RTL check: expected code `%s' or `%s', have `%s' in %s, at %s:%d" + msgstr "RTL-tjek: forventede koden '%s' eller '%s', har '%s'" + + #: rtl.c:1362 + #, fuzzy, c-format + msgid "RTL check: access of elt %d of vector with last elt %d in %s, at %s:%d" + msgstr "RTL-tjek: tilgang til udtrykstræ %d af vektor hvis sidste udtrykstræ er %d" + + #: stmt.c:917 + #, c-format + msgid "jump to `%s' invalidly jumps into binding contour" + msgstr "spring til '%s' rammer på ugyldig vis ind i bindingskontur" + + #: stmt.c:1153 stmt.c:3641 + #, c-format + msgid "label `%s' used before containing binding contour" + msgstr "" + + #: stmt.c:1283 stmt.c:1357 + msgid "`asm' cannot be used in function where memory usage is checked" + msgstr "'asm' kan ikke benyttes i funktioner hvor hukommelsesforbruget bliver tjekket" + + #: stmt.c:1343 + msgid "`asm' cannot be used with `-fcheck-memory-usage'" + msgstr "'asm' kan ikke benyttes sammen med '-fcheck-memory-usage'" + + #: stmt.c:1372 + #, c-format + msgid "unknown register name `%s' in `asm'" + msgstr "ukendt registernavn '%s' i 'asm'" + + #: stmt.c:1387 + msgid "too many alternatives in `asm'" + msgstr "for mange alternativer i 'asm'" + + #: stmt.c:1398 + msgid "operand constraints for `asm' differ in number of alternatives" + msgstr "operandbegrænsninger til 'asm' har forskellige antal alternativer" + + #: stmt.c:1446 + msgid "output operand constraint lacks `='" + msgstr "uddataoperandbegrænsning mangler '='" + + #: stmt.c:1465 + #, c-format + msgid "output constraint `%c' for operand %d is not at the beginning" + msgstr "" + + #: stmt.c:1472 + #, c-format + msgid "output operand constraint %d contains `+'" + msgstr "uddataoperandbegrænsning %d indeholder '+'" + + #: stmt.c:1481 + msgid "operand constraint contains '+' or '=' at illegal position." + msgstr "operandbegrænsning indeholder '+' eller '=' på et ulovligt sted." + + #: stmt.c:1487 stmt.c:1664 + #, c-format + msgid "`%%' constraint used with last operand" + msgstr "'%%'-begrænsning brugt med sidste operand" + + #: stmt.c:1501 + msgid "matching constraint not valid in output operand" + msgstr "begrænsningen er ikke gyldig for uddataoperanden" + + #: stmt.c:1527 stmt.c:1724 + #, c-format + msgid "invalid punctuation `%c' in constraint" + msgstr "" + + #: stmt.c:1571 + #, c-format + msgid "output number %d not directly addressable" + msgstr "uddata nr. %d kan ikke adresseres direkte" + + #: stmt.c:1599 + #, c-format + msgid "more than %d operands in `asm'" + msgstr "mere end %d operander i 'asm'" + + #: stmt.c:1637 + #, c-format + msgid "hard register `%s' listed as input operand to `asm'" + msgstr "hardware-register '%s' angivet som inddataoperand til 'asm'" + + #: stmt.c:1654 + #, c-format + msgid "input operand constraint contains `%c'" + msgstr "inddataoperandbegrænsningen indeholder '%c'" + + #: stmt.c:1691 + msgid "matching constraint references invalid operand number" + msgstr "begrænsning refererer til et ugyldigt operandtal" + + #. ??? Leave this only until we have experience with what + #. happens in combine and elsewhere when constraints are + #. not satisfied. + #: stmt.c:1758 stmt.c:1786 + #, c-format + msgid "asm operand %d probably doesn't match constraints" + msgstr "" + + #: stmt.c:3578 + #, c-format + msgid "unused variable `%s'" + msgstr "" + + #: stmt.c:5026 + #, fuzzy, c-format + msgid "enumeration value `%s' not handled in switch" + msgstr "enum-værdien for '%s' er ikke en heltalskonstant" + + #: stmt.c:5052 stmt.c:5072 + #, c-format + msgid "case value `%ld' not in enumerated type" + msgstr "" + + #: stmt.c:5055 stmt.c:5075 + #, c-format + msgid "case value `%ld' not in enumerated type `%s'" + msgstr "" + + #: stor-layout.c:140 + msgid "type size can't be explicitly evaluated" + msgstr "det er ikke muligt eksplicit at finde typens størrelse" + + #: stor-layout.c:142 + msgid "variable-size type declared outside of any function" + msgstr "en type med en variabel størrelse er erklæret uden for en funktion" + + #: stor-layout.c:415 + #, fuzzy, c-format + msgid "size of `%s' is %d bytes" + msgstr "størrelsen af tabel '%s' er negativ" + + #: stor-layout.c:417 + #, fuzzy, c-format + msgid "size of `%s' is larger than %d bytes" + msgstr "størrelsen af tabel '%s' er for stor" + + #: stor-layout.c:771 stor-layout.c:1023 + #, c-format + msgid "packed attribute causes inefficient alignment for `%s'" + msgstr "" + + #: stor-layout.c:773 stor-layout.c:1025 + #, c-format + msgid "packed attribute is unnecessary for `%s'" + msgstr "" + + #: stor-layout.c:788 + #, c-format + msgid "padding struct to align `%s'" + msgstr "" + + #: stor-layout.c:987 + msgid "padding struct size to alignment boundary" + msgstr "" + + #: stor-layout.c:1030 + msgid "packed attribute causes inefficient alignment" + msgstr "" + + #: stor-layout.c:1032 + msgid "packed attribute is unnecessary" + msgstr "" + + #: stringpool.c:307 + #, c-format + msgid "\"%s\" and \"%s\" identical in first %d characters" + msgstr "" + + #: timevar.c:428 + msgid "\nExecution times (seconds)\n" + msgstr "" + + #. Print total time. + #: timevar.c:476 + #, fuzzy + msgid " TOTAL :" + msgstr "" + ",\n" + " af %s:%u" + + #: timevar.c:515 + #, c-format + msgid "time in %s: %ld.%06ld (%ld%%)\n" + msgstr "" + + #: tlink.c:428 + #, fuzzy, c-format + msgid "collect: reading %s\n" + msgstr "collect2 version %s" + + #: tlink.c:529 + #, fuzzy, c-format + msgid "collect: recompiling %s\n" + msgstr "%s: oversætter '%s'\n" + + #: tlink.c:694 + #, fuzzy, c-format + msgid "collect: tweaking %s in %s\n" + msgstr "collect2 version %s" + + #: tlink.c:741 + msgid "collect: relinking\n" + msgstr "" + + #: tlink.c:750 + #, fuzzy, c-format + msgid "ld returned %d exit status" + msgstr "%s returnerede afslutningskoden %d" + + #: toplev.c:913 + msgid "Generate debugging info in default format" + msgstr "" + + #: toplev.c:914 + msgid "Generate debugging info in default extended format" + msgstr "" + + #: toplev.c:916 + msgid "Generate STABS format debug info" + msgstr "" + + #: toplev.c:917 + msgid "Generate extended STABS format debug info" + msgstr "" + + #: toplev.c:920 + msgid "Generate DWARF-1 format debug info" + msgstr "" + + #: toplev.c:922 + msgid "Generate extended DWARF-1 format debug info" + msgstr "" + + #: toplev.c:925 + msgid "Generate DWARF-2 debug info" + msgstr "" + + #: toplev.c:928 + msgid "Generate XCOFF format debug info" + msgstr "" + + #: toplev.c:929 + msgid "Generate extended XCOFF format debug info" + msgstr "" + + #: toplev.c:932 + msgid "Generate COFF format debug info" + msgstr "" + + #: toplev.c:976 + #, fuzzy + msgid "Do not store floats in registers" + msgstr "Returnér ikke værdier fra funktioner i fpu-registre" + + #: toplev.c:978 + msgid "Consider all mem refs through pointers as volatile" + msgstr "" + + #: toplev.c:980 + msgid "Consider all mem refs to global data to be volatile" + msgstr "" + + #: toplev.c:982 + msgid "Consider all mem refs to static data to be volatile" + msgstr "" + + #: toplev.c:984 + msgid "Defer popping functions args from stack until later" + msgstr "" + + #: toplev.c:986 + msgid "When possible do not generate stack frames" + msgstr "" + + #: toplev.c:988 + msgid "Optimize sibling and tail recursive calls" + msgstr "" + + #: toplev.c:990 + msgid "When running CSE, follow jumps to their targets" + msgstr "" + + #: toplev.c:992 + msgid "When running CSE, follow conditional jumps" + msgstr "" + + #: toplev.c:994 + msgid "Perform a number of minor, expensive optimisations" + msgstr "" + + #: toplev.c:996 + msgid "Perform jump threading optimisations" + msgstr "" + + #: toplev.c:998 + msgid "Perform strength reduction optimisations" + msgstr "" + + #: toplev.c:1000 + msgid "Perform loop unrolling when iteration count is known" + msgstr "" + + #: toplev.c:1002 + msgid "Perform loop unrolling for all loops" + msgstr "" + + #: toplev.c:1004 + msgid "Force all loop invariant computations out of loops" + msgstr "" + + #: toplev.c:1006 + msgid "Strength reduce all loop general induction variables" + msgstr "" + + #: toplev.c:1008 + msgid "Store strings in writable data section" + msgstr "" + + #: toplev.c:1010 + msgid "Enable machine specific peephole optimisations" + msgstr "" + + #: toplev.c:1012 + msgid "Copy memory operands into registers before using" + msgstr "" + + #: toplev.c:1014 + msgid "Copy memory address constants into regs before using" + msgstr "" + + #: toplev.c:1016 + msgid "Allow function addresses to be held in registers" + msgstr "" + + #: toplev.c:1018 + msgid "Integrate simple functions into their callers" + msgstr "" + + #: toplev.c:1020 + msgid "Generate code for funcs even if they are fully inlined" + msgstr "" + + #: toplev.c:1022 + msgid "Pay attention to the 'inline' keyword" + msgstr "" + + #: toplev.c:1024 + msgid "Emit static const variables even if they are not used" + msgstr "" + + #: toplev.c:1026 + msgid "Check for syntax errors, then stop" + msgstr "" + + #: toplev.c:1028 + msgid "Mark data as shared rather than private" + msgstr "" + + #: toplev.c:1030 + msgid "Enable saving registers around function calls" + msgstr "" + + #: toplev.c:1032 + msgid "Return 'short' aggregates in memory, not registers" + msgstr "" + + #: toplev.c:1034 + #, fuzzy + msgid "Return 'short' aggregates in registers" + msgstr "Returnér værdier fra funktioner i fpu-registre" + + #: toplev.c:1036 + msgid "Attempt to fill delay slots of branch instructions" + msgstr "" + + #: toplev.c:1038 + msgid "Perform the global common subexpression elimination" + msgstr "" + + #: toplev.c:1040 + msgid "Run CSE pass after loop optimisations" + msgstr "" + + #: toplev.c:1042 + msgid "Run the loop optimiser twice" + msgstr "" + + #: toplev.c:1044 + msgid "Delete useless null pointer checks" + msgstr "" + + #: toplev.c:1046 + msgid "Pretend that host and target use the same FP format" + msgstr "" + + #: toplev.c:1048 + msgid "Reschedule instructions before register allocation" + msgstr "" + + #: toplev.c:1050 + msgid "Reschedule instructions after register allocation" + msgstr "" + + #: toplev.c:1052 + msgid "Enable scheduling across basic blocks" + msgstr "" + + #: toplev.c:1054 + msgid "Allow speculative motion of non-loads" + msgstr "" + + #: toplev.c:1056 + msgid "Allow speculative motion of some loads" + msgstr "" + + #: toplev.c:1058 + msgid "Allow speculative motion of more loads" + msgstr "" + + #: toplev.c:1060 + msgid "Replace add,compare,branch with branch on count reg" + msgstr "" + + #: toplev.c:1062 + msgid "Generate position independent code, if possible" + msgstr "" + + #: toplev.c:1065 + msgid "Enable exception handling" + msgstr "" + + #: toplev.c:1067 + msgid "Just generate unwind tables for exception handling" + msgstr "" + + #: toplev.c:1069 + msgid "Support synchronous non-call exceptions" + msgstr "" + + #: toplev.c:1071 + msgid "Insert arc based program profiling code" + msgstr "" + + #: toplev.c:1073 + msgid "Create data files needed by gcov" + msgstr "" + + #: toplev.c:1075 + msgid "Use profiling information for branch probabilities" + msgstr "" + + #: toplev.c:1077 + msgid "Reorder basic blocks to improve code placement" + msgstr "" + + #: toplev.c:1079 + msgid "Do the register renaming optimization pass" + msgstr "" + + #: toplev.c:1081 + msgid "Improve FP speed by violating ANSI & IEEE rules" + msgstr "" + + #: toplev.c:1083 + msgid "Do not put unitialised globals in the common section" + msgstr "" + + #: toplev.c:1085 + #, fuzzy + msgid "Do not generate .size directives" + msgstr "Generér ikke sin, cos, sqrt til fpu" + + #: toplev.c:1087 + #, fuzzy + msgid "place each function into its own section" + msgstr "per funktion)" + + #: toplev.c:1089 + msgid "place data items into their own section" + msgstr "" + + #: toplev.c:1091 + msgid "Add extra commentry to assembler output" + msgstr "" + + #: toplev.c:1093 + msgid "Output GNU ld formatted global initialisers" + msgstr "" + + #: toplev.c:1095 + msgid "Enables a register move optimisation" + msgstr "" + + #: toplev.c:1097 + msgid "Do the full regmove optimization pass" + msgstr "" + + #: toplev.c:1099 + msgid "Pack structure members together without holes" + msgstr "" + + #: toplev.c:1101 + msgid "Insert stack checking code into the program" + msgstr "" + + #: toplev.c:1103 + msgid "Specify that arguments may alias each other & globals" + msgstr "" + + #: toplev.c:1105 + msgid "Assume arguments may alias globals but not each other" + msgstr "" + + #: toplev.c:1107 + msgid "Assume arguments do not alias each other or globals" + msgstr "" + + #: toplev.c:1109 + msgid "Assume strict aliasing rules apply" + msgstr "" + + #: toplev.c:1111 + msgid "Align the start of loops" + msgstr "" + + #: toplev.c:1113 + msgid "Align labels which are only reached by jumping" + msgstr "" + + #: toplev.c:1115 + msgid "Align all labels" + msgstr "" + + #: toplev.c:1117 + #, fuzzy + msgid "Align the start of functions" + msgstr "underforstået erklæring af funktionen '%s'" + + #: toplev.c:1119 + msgid "Generate code to check every memory access" + msgstr "" + + #: toplev.c:1121 + msgid "Add a prefix to all function names" + msgstr "" + + #: toplev.c:1123 + msgid "Suppress output of instruction numbers and line number notes in debugging dumps" + msgstr "" + + #: toplev.c:1125 + msgid "Instrument function entry/exit with profiling calls" + msgstr "" + + #: toplev.c:1127 + msgid "Enable SSA optimizations" + msgstr "" + + #: toplev.c:1129 + msgid "Enable dead code elimination" + msgstr "" + + #: toplev.c:1131 + msgid "External symbols have a leading underscore" + msgstr "" + + #: toplev.c:1133 + #, fuzzy + msgid "Process #ident directives" + msgstr "%s i forbehandlerdirektiv" + + #: toplev.c:1135 + msgid "Enables an rtl peephole pass run before sched2" + msgstr "" + + #: toplev.c:1137 + msgid "Enables guessing of branch probabilities" + msgstr "" + + #: toplev.c:1139 + msgid "Set errno after built-in math functions" + msgstr "" + + #: toplev.c:1141 + #, fuzzy + msgid "Convert floating point constant to single precision constant" + msgstr "kommatalsfælde udsender en konstant" + + #: toplev.c:1143 + msgid "Report time taken by each compiler pass at end of run" + msgstr "" + + #: toplev.c:1145 + msgid "Report on permanent memory allocation at end of run" + msgstr "" + + #: toplev.c:1147 + msgid "Trap for signed overflow in addition / subtraction / multiplication." + msgstr "" + + #: toplev.c:1164 + msgid "Compile just for ISO C89" + msgstr "" + + #: toplev.c:1166 + msgid "Do not promote floats to double if using -traditional" + msgstr "" + + #: toplev.c:1168 + msgid "Determine language standard" + msgstr "" + + #: toplev.c:1172 + msgid "Make bitfields by unsigned by default" + msgstr "" + + #: toplev.c:1176 + msgid "Make 'char' be signed by default" + msgstr "" + + #: toplev.c:1178 + msgid "Make 'char' be unsigned by default" + msgstr "" + + #: toplev.c:1184 + msgid "Attempt to support traditional K&R style C" + msgstr "" + + #: toplev.c:1190 + msgid "Do not recognise the 'asm' keyword" + msgstr "" + + #: toplev.c:1193 + msgid "Do not recognise any built in functions" + msgstr "" + + #: toplev.c:1195 + msgid "Assume normal C execution environment" + msgstr "" + + #: toplev.c:1198 + msgid "Assume that standard libraries & main might not exist" + msgstr "" + + #: toplev.c:1201 + msgid "Allow different types as args of ? operator" + msgstr "" + + #: toplev.c:1204 + msgid "Allow the use of $ inside identifiers" + msgstr "" + + #: toplev.c:1209 + msgid "Use the same size for double as for float" + msgstr "" + + #: toplev.c:1212 + msgid "Use the smallest fitting integer to hold enums" + msgstr "" + + #: toplev.c:1215 + msgid "Override the underlying type for wchar_t to `unsigned short'" + msgstr "" + + #: toplev.c:1219 + msgid "Enable most warning messages" + msgstr "" + + #: toplev.c:1221 + msgid "Warn about casting functions to incompatible types" + msgstr "" + + #: toplev.c:1225 + msgid "Warn about functions which might be candidates for format attributes" + msgstr "" + + #: toplev.c:1228 + msgid "Warn about casts which discard qualifiers" + msgstr "" + + #: toplev.c:1231 + msgid "Warn about subscripts whose type is 'char'" + msgstr "" + + #: toplev.c:1234 toplev.c:1237 + msgid "Warn if nested comments are detected" + msgstr "" + + #: toplev.c:1240 + msgid "Warn about possibly confusing type conversions" + msgstr "" + + #: toplev.c:1243 + msgid "Warn about printf/scanf/strftime/strfmon format anomalies" + msgstr "" + + #: toplev.c:1247 + msgid "Don't warn about strftime formats yielding 2 digit years" + msgstr "" + + #: toplev.c:1250 + #, fuzzy + msgid "Don't warn about too many arguments to format functions" + msgstr "for mange parametre til funktionen" + + #: toplev.c:1252 + msgid "Warn about non-string-literal format strings" + msgstr "" + + #: toplev.c:1255 + msgid "Warn about possible security problems with format functions" + msgstr "" + + #: toplev.c:1258 + msgid "Warn about implicit function declarations" + msgstr "" + + #: toplev.c:1262 + msgid "Warn when a declaration does not specify a type" + msgstr "" + + #: toplev.c:1267 + msgid "Warn about the use of the #import directive" + msgstr "" + + #: toplev.c:1271 + msgid "Do not warn about using 'long long' when -pedantic" + msgstr "" + + #: toplev.c:1273 + #, fuzzy + msgid "Warn about suspicious declarations of main" + msgstr "'%s' er tidligere erklæret" + + #: toplev.c:1276 + #, fuzzy + msgid "Warn about possibly missing braces around initialisers" + msgstr "krøllede paranteser mangler omkring startværdien" + + #: toplev.c:1279 + msgid "Warn about global funcs without previous declarations" + msgstr "" + + #: toplev.c:1282 + msgid "Warn about global funcs without prototypes" + msgstr "" + + #: toplev.c:1285 + msgid "Warn about use of multicharacter literals" + msgstr "" + + #: toplev.c:1288 + msgid "Warn about externs not at file scope level" + msgstr "" + + #: toplev.c:1291 + msgid "Warn about possible missing parentheses" + msgstr "" + + #: toplev.c:1294 + msgid "Warn about possible violations of sequence point rules" + msgstr "" + + #: toplev.c:1297 + msgid "Warn about function pointer arithmetic" + msgstr "" + + #: toplev.c:1300 + msgid "Warn about multiple declarations of the same object" + msgstr "" + + #: toplev.c:1303 + msgid "Warn about signed/unsigned comparisons" + msgstr "" + + #: toplev.c:1306 + msgid "Warn about testing equality of floating point numbers" + msgstr "" + + #: toplev.c:1309 + msgid "Warn about unrecognized pragmas" + msgstr "" + + #: toplev.c:1312 + msgid "Warn about non-prototyped function decls" + msgstr "" + + #: toplev.c:1315 + msgid "Warn about constructs whose meaning change in ISO C" + msgstr "" + + #: toplev.c:1318 + msgid "Warn when trigraphs are encountered" + msgstr "" + + #: toplev.c:1323 + msgid "Mark strings as 'const char *'" + msgstr "" + + #: toplev.c:1471 + msgid "Warn when a function is unused" + msgstr "" + + #: toplev.c:1473 + msgid "Warn when a label is unused" + msgstr "" + + #: toplev.c:1475 + msgid "Warn when a function parameter is unused" + msgstr "" + + #: toplev.c:1477 + msgid "Warn when a variable is unused" + msgstr "" + + #: toplev.c:1479 + msgid "Warn when an expression value is unused" + msgstr "" + + #: toplev.c:1481 + msgid "Do not suppress warnings from system headers" + msgstr "" + + #: toplev.c:1483 + msgid "Treat all warnings as errors" + msgstr "" + + #: toplev.c:1485 + #, fuzzy + msgid "Warn when one local variable shadows another" + msgstr "Den lokale variabel 'insn' har værdien:" + + #: toplev.c:1487 + msgid "Warn about enumerated switches missing a specific case" + msgstr "" + + #: toplev.c:1489 + msgid "Warn about returning structures, unions or arrays" + msgstr "" + + #: toplev.c:1491 + msgid "Warn about pointer casts which increase alignment" + msgstr "" + + #: toplev.c:1493 + msgid "Warn about code that will never be executed" + msgstr "" + + #: toplev.c:1495 + msgid "Warn about unitialized automatic variables" + msgstr "" + + #: toplev.c:1497 + #, fuzzy + msgid "Warn when an inlined function cannot be inlined" + msgstr "funktioner med variabel parameterliste kan ikke indbygges" + + #: toplev.c:1499 + msgid "Warn when the packed attribute has no effect on struct layout" + msgstr "" + + #: toplev.c:1501 + msgid "Warn when padding is required to align struct members" + msgstr "" + + #: toplev.c:1503 + msgid "Warn when an optimization pass is disabled" + msgstr "" + + #: toplev.c:1505 + msgid "Warn about functions which might be candidates for attribute noreturn" + msgstr "" + + #: toplev.c:1539 toplev.c:5061 tradcpp.c:776 + #, c-format + msgid "Invalid option `%s'" + msgstr "Ugyldigt tilvalg '%s'" + + #: toplev.c:1741 + #, fuzzy, c-format + msgid "Internal error: %s" + msgstr "intern fejl: " + + #: toplev.c:2056 + #, fuzzy, c-format + msgid "`%s' used but never defined" + msgstr "'%.*s' er ikke defineret" + + #: toplev.c:2059 + #, c-format + msgid "`%s' declared `static' but never defined" + msgstr "" + + #: toplev.c:2081 + #, c-format + msgid "`%s' defined but not used" + msgstr "" + + #: toplev.c:2259 + #, fuzzy, c-format + msgid "can't open %s for writing" + msgstr "%s: kan ikke åbne filen '%s' til at læse fra: %s\n" + + #: toplev.c:2312 + #, fuzzy + msgid "-ffunction-sections not supported for this target." + msgstr "integrerede funktioner understøttes ikke for denne returværditype" + + #: toplev.c:2317 + #, fuzzy + msgid "-fdata-sections not supported for this target." + msgstr "stakgrænser understøttes ikke på målarkitekturen" + + #: toplev.c:2325 + msgid "-ffunction-sections disabled; it makes profiling impossible." + msgstr "" + + #: toplev.c:2331 + msgid "-ffunction-sections may affect debugging on some targets." + msgstr "" + + #: toplev.c:2372 + msgid "Errors detected in input file (your bison.simple is out of date)\n" + msgstr "Fandt fejl i inddatafilen (din bison.simple er forældet)\n" + + #: toplev.c:2509 + #, fuzzy, c-format + msgid "error writing to %s" + msgstr "%s: fejl ved skrivning til filen '%s': %s\n" + + #: toplev.c:2614 + #, c-format + msgid "invalid register name `%s' for register variable" + msgstr "ugyldigt registernavn '%s' for registervariabel" + + #: toplev.c:3863 + msgid " -ffixed- Mark as being unavailable to the compiler\n" + msgstr "" + + #: toplev.c:3864 + msgid " -fcall-used- Mark as being corrupted by function calls\n" + msgstr "" + + #: toplev.c:3865 + msgid " -fcall-saved- Mark as being preserved across functions\n" + msgstr "" + + #: toplev.c:3866 + msgid " -finline-limit= Limits the size of inlined functions to \n" + msgstr "" + + #: toplev.c:3867 + msgid " -fmessage-length= Limits diagnostics messages lengths to characters per line. 0 suppresses line-wrapping\n" + msgstr "" + + #: toplev.c:3868 + msgid " -fdiagnostics-show-location=[once | every-line] Indicates how often source location information should be emitted, as prefix, at the beginning of diagnostics when line-wrapping\n" + msgstr "" + + #: toplev.c:3879 + msgid " -O[number] Set optimisation level to [number]\n" + msgstr "" + + #: toplev.c:3880 + msgid " -Os Optimise for space rather than speed\n" + msgstr "" + + #: toplev.c:3892 + msgid " -pedantic Issue warnings needed by strict compliance to ISO C\n" + msgstr "" + + #: toplev.c:3893 + msgid " -pedantic-errors Like -pedantic except that errors are produced\n" + msgstr "" + + #: toplev.c:3894 + msgid " -w Suppress warnings\n" + msgstr "" + + #: toplev.c:3895 + msgid " -W Enable extra warnings\n" + msgstr "" + + #: toplev.c:3906 + msgid " -Wunused Enable unused warnings\n" + msgstr "" + + #: toplev.c:3907 + msgid " -Wid-clash- Warn if 2 identifiers have the same first chars\n" + msgstr "" + + #: toplev.c:3908 + msgid " -Wlarger-than- Warn if an object is larger than bytes\n" + msgstr "" + + #: toplev.c:3909 + msgid " -p Enable function profiling\n" + msgstr "" + + #: toplev.c:3911 + msgid " -a Enable block profiling \n" + msgstr "" + + #: toplev.c:3914 + msgid " -ax Enable jump profiling \n" + msgstr "" + + #: toplev.c:3916 + msgid " -o Place output into \n" + msgstr "" + + #: toplev.c:3917 + msgid "" + " -G Put global and static data smaller than \n" + " bytes into a special section (on some targets)\n" + msgstr "" + + #: toplev.c:3928 + msgid " -aux-info Emit declaration info into \n" + msgstr "" + + #: toplev.c:3929 + msgid " -quiet Do not display functions compiled or elapsed time\n" + msgstr "" + + #: toplev.c:3930 + msgid " -version Display the compiler's version\n" + msgstr "" + + #: toplev.c:3931 + msgid " -d[letters] Enable dumps from specific passes of the compiler\n" + msgstr "" + + #: toplev.c:3932 + msgid " -dumpbase Base name to be used for dumps from specific passes\n" + msgstr "" + + #: toplev.c:3934 + msgid " -fsched-verbose= Set the verbosity level of the scheduler\n" + msgstr "" + + #: toplev.c:3936 + msgid " --help Display this information\n" + msgstr "" + + #: toplev.c:3951 + msgid "\nLanguage specific options:\n" + msgstr "" + + #: toplev.c:3963 + #, c-format + msgid " %-23.23s [undocumented]\n" + msgstr "" + + #: toplev.c:3971 toplev.c:3985 + #, c-format + msgid "\nThere are undocumented %s specific options as well.\n" + msgstr "" + + #: toplev.c:3975 + #, c-format + msgid "\n Options for %s:\n" + msgstr "" + + #: toplev.c:4006 + msgid "\nTarget specific options:\n" + msgstr "" + + #: toplev.c:4020 toplev.c:4039 + #, c-format + msgid " -m%-23.23s [undocumented]\n" + msgstr "" + + #: toplev.c:4048 + msgid "\nThere are undocumented target specific options as well.\n" + msgstr "" + + #: toplev.c:4050 + msgid " They exist, but they are not documented.\n" + msgstr "" + + #: toplev.c:4106 + #, fuzzy, c-format + msgid "unrecognized gcc debugging option: %c" + msgstr "ukendt tilvalg '-%s'" + + #: toplev.c:4172 + #, c-format + msgid "unrecognized register name `%s'" + msgstr "ukendt registernavn '%s'" + + #: toplev.c:4196 toplev.c:4880 + #, c-format + msgid "Unrecognized option `%s'" + msgstr "Ukendt tilvalg '%s'" + + #: toplev.c:4322 + #, c-format + msgid "use -gdwarf -g%d for DWARF v1, level %d" + msgstr "benyt - gdwarf -g%d til DWARF v1, niveau %d" + + #: toplev.c:4325 + msgid "use -gdwarf-2 for DWARF v2" + msgstr "benyt -gdwarf-2 til DWARF v2" + + #: toplev.c:4330 + #, c-format + msgid "ignoring option `%s' due to invalid debug level specification" + msgstr "" + + #: toplev.c:4353 toplev.c:4878 + #, c-format + msgid "`%s': unknown or unsupported -g option" + msgstr "" + + #: toplev.c:4360 + #, c-format + msgid "`%s' ignored, conflicts with `-g%s'" + msgstr "" + + #: toplev.c:4439 + msgid "-param option missing argument" + msgstr "" + + #: toplev.c:4448 + #, fuzzy, c-format + msgid "invalid --param option: %s" + msgstr "Ugyldigt tilvalg %s" + + #: toplev.c:4460 + #, fuzzy, c-format + msgid "invalid parameter value `%s'" + msgstr "ugyldig typeparameter '%s'" + + #: toplev.c:4551 + msgid "`-a' option (basic block profile) not supported" + msgstr "" + + #: toplev.c:4559 + #, fuzzy + msgid "`-ax' option (jump profiling) not supported" + msgstr "-pipe understøttes ikke." + + #: toplev.c:4870 + #, fuzzy, c-format + msgid "Ignoring command line option '%s'" + msgstr "Ukendt tilvalg '%s'" + + #: toplev.c:4873 + #, c-format + msgid "(It is valid for %s but not the selected language)" + msgstr "" + + #: toplev.c:4911 + #, fuzzy + msgid "-Wuninitialized is not supported without -O" + msgstr "profilgenerering understøttes ikke med -mg\n" + + #: toplev.c:4938 + msgid "`-ax' and `-a' are conflicting options. `-a' ignored." + msgstr "" + + #: toplev.c:4959 + #, fuzzy + msgid "instruction scheduling not supported on this target machine" + msgstr "stakgrænser understøttes ikke på målarkitekturen" + + #: toplev.c:4963 + msgid "this target machine does not have delayed branches" + msgstr "" + + #: toplev.c:4972 + #, fuzzy + msgid "profiling does not work without a frame pointer" + msgstr "profilgenerering understøtter ikke andre kodemodeller end medlow" + + #: toplev.c:4987 + #, fuzzy, c-format + msgid "-f%sleading-underscore not supported on this target machine" + msgstr "stakgrænser understøttes ikke på målarkitekturen" + + #: toplev.c:5007 + #, c-format + msgid "Data size %ld.\n" + msgstr "Datastørrelse %ld.\n" + + #: toplev.c:5078 + #, fuzzy, c-format + msgid "" + "%s%s%s version %s (%s)\n" + "%s\tcompiled by GNU C version %s.\n" + "%s%s%s version %s (%s) compiled by CC.\n" + msgstr "" + "%s%s%s version %s (%s) oversat af GNU C version %s.\n" + "%s%s%s version %s (%s) oversat af CC.\n" + + #: toplev.c:5134 + msgid "options passed: " + msgstr "tilvalg overbragt: " + + #: toplev.c:5163 + msgid "options enabled: " + msgstr "tilvalg slået til: " + + #: tradcif.y:110 tradcif.y:121 + msgid "division by zero in #if" + msgstr "" + + #. It's a float since it contains a point. + #: tradcif.y:230 + #, fuzzy + msgid "floating point numbers not allowed in #if expressions" + msgstr "kommatal er ikke tilladt i '#if'-udtryk" + + #: tradcif.y:276 + #, fuzzy + msgid "Invalid number in #if expression" + msgstr "ugyldigt tal i '#if'-udtryk" + + #: tradcif.y:361 + #, fuzzy + msgid "Invalid character constant in #if" + msgstr "forkert udformet tegnkonstant" + + #: tradcif.y:398 + #, fuzzy + msgid "double quoted strings not allowed in #if expressions" + msgstr "'%.*s' er ikke tilladt i '#if'-udtryk" + + #: tradcif.y:411 + #, fuzzy + msgid "Invalid token in expression" + msgstr "ugyldigt tal i '#if'-udtryk" + + #: tradcif.y:502 + #, fuzzy + msgid "octal character constant does not fit in a byte" + msgstr "tegnkonstanten er for lang" + + #: tradcif.y:527 + #, fuzzy + msgid "hex character constant does not fit in a byte" + msgstr "tegnkonstanten er for lang" + + #: tradcif.y:558 + #, fuzzy + msgid "empty #if expression" + msgstr " i kastet udtryk" + + #: tradcif.y:572 + #, fuzzy + msgid "Junk after end of expression." + msgstr "ragelse i slutningen af #%s" + + #: tradcpp.c:137 + #, fuzzy + msgid "macro or #include recursion too deep" + msgstr "makro eller '#include'-rekursion er for dyb" + + #: tradcpp.c:550 + #, fuzzy, c-format + msgid "Usage: %s [switches] input output" + msgstr "Brug: %s [tilvalg] inddata uddata\n" + + #: tradcpp.c:566 + #, fuzzy + msgid "-traditional is not supported in C++" + msgstr "-pipe understøttes ikke." + + #: tradcpp.c:568 + #, fuzzy + msgid "-traditional and -ansi are mutually exclusive" + msgstr "-lang-chill og -trigraphs er indbyrdes uforenelige" + + #: tradcpp.c:582 + #, fuzzy + msgid "Filename missing after -i option" + msgstr "Et filnavn mangler efter %s" + + #: tradcpp.c:600 + #, fuzzy + msgid "Filename missing after -o option" + msgstr "Et filnavn mangler efter %s" + + #: tradcpp.c:659 + #, fuzzy, c-format + msgid "Target missing after %s option" + msgstr "En parameter mangler efter %s" + + #: tradcpp.c:673 + #, fuzzy, c-format + msgid "Filename missing after %s option" + msgstr "Et filnavn mangler efter %s" + + #: tradcpp.c:698 + #, fuzzy, c-format + msgid "Macro name missing after -%c option" + msgstr "Et makronavn mangler efter %s" + + #: tradcpp.c:718 + #, fuzzy + msgid "-pedantic and -traditional are mutually exclusive" + msgstr "-lang-chill og -trigraphs er indbyrdes uforenelige" + + #: tradcpp.c:723 + #, fuzzy + msgid "-trigraphs and -traditional are mutually exclusive" + msgstr "-lang-chill og -trigraphs er indbyrdes uforenelige" + + #: tradcpp.c:749 + #, fuzzy + msgid "Directory name missing after -I option" + msgstr "Et katalognavn mangler efter %s" + + #: tradcpp.c:1425 tradcpp.c:3916 + #, fuzzy + msgid "`/*' within comment" + msgstr "'/*' i en kommentar" + + #: tradcpp.c:1800 + #, fuzzy, c-format + msgid "unterminated #%s conditional" + msgstr "uafsluttet #%s" + + #: tradcpp.c:2159 + #, fuzzy + msgid "not in any file?!" + msgstr "ingen linjeskift ved slutningen af filen" + + #: tradcpp.c:2265 + #, fuzzy + msgid "`defined' must be followed by ident or (ident)" + msgstr "#define skal efterfølges af et kaldenavn" + + #: tradcpp.c:2269 + #, fuzzy + msgid "cccp error: invalid special hash type" + msgstr "ugyldig speciel hash-type" + + #: tradcpp.c:2367 tradcpp.c:2437 + msgid "#include expects \"fname\" or " + msgstr "" + + #: tradcpp.c:2522 + #, fuzzy, c-format + msgid "No include path in which to find %.*s" + msgstr "Der er ingen inkluderingssti at finde %s i" + + #: tradcpp.c:2700 + #, fuzzy + msgid "invalid macro name" + msgstr "ugyldig kode" + + #: tradcpp.c:2708 + #, fuzzy, c-format + msgid "invalid macro name `%s'" + msgstr "Ugyldigt tilvalg '%s'" + + #: tradcpp.c:2713 + #, fuzzy + msgid "\"defined\" cannot be used as a macro name" + msgstr "\"defined\" er ikke et tilladt makronavn" + + #: tradcpp.c:2740 + msgid "parameter name starts with a digit in #define" + msgstr "" + + #: tradcpp.c:2750 + msgid "badly punctuated parameter list in #define" + msgstr "" + + #: tradcpp.c:2758 + #, fuzzy + msgid "unterminated parameter list in #define" + msgstr "uafsluttet tegnkonstant" + + #: tradcpp.c:2806 + #, fuzzy, c-format + msgid "\"%.*s\" redefined" + msgstr "\"%s\" omdefineret" + + #: tradcpp.c:3063 + #, fuzzy + msgid "# operator should be followed by a macro argument name" + msgstr "'#' efterfølges ikke af et makroparameternavn" + + #: tradcpp.c:3110 tradcpp.c:3136 tradcpp.c:3150 tradcpp.c:3157 tradcpp.c:3182 + #, fuzzy + msgid "invalid format #line command" + msgstr "ugyldigt #line-format" + + #: tradcpp.c:3208 + #, fuzzy + msgid "undefining `defined'" + msgstr "glemmer definitionen af '%s'" + + #: tradcpp.c:3212 + #, c-format + msgid "undefining `%s'" + msgstr "glemmer definitionen af '%s'" + + #: tradcpp.c:3268 + #, fuzzy + msgid "extra text at end of directive" + msgstr "overskydende krøllede paranteser ved slutningen af startværdien" + + #: tradcpp.c:3375 + #, fuzzy, c-format + msgid "#error%.*s" + msgstr "#error %.*s" + + #: tradcpp.c:3385 + #, fuzzy, c-format + msgid "#warning%.*s" + msgstr "#warning %.*s" + + #: tradcpp.c:3541 + msgid "#elif not within a conditional" + msgstr "" + + #: tradcpp.c:3798 + #, c-format + msgid "#%s not within a conditional" + msgstr "" + + #: tradcpp.c:3806 + #, fuzzy + msgid "#else or #elif after #else" + msgstr "#elif efter #else" + + #: tradcpp.c:3846 + msgid "#else not within a conditional" + msgstr "" + + #: tradcpp.c:3877 + msgid "unbalanced #endif" + msgstr "" + + #: tradcpp.c:3971 + msgid "unterminated string or character constant" + msgstr "uafsluttet streng- eller tegnkonstant" + + #: tradcpp.c:4129 + #, c-format + msgid "arguments given to macro `%s'" + msgstr "parametre givet til makro '%s'" + + #: tradcpp.c:4135 + #, fuzzy, c-format + msgid "no args to macro `%s'" + msgstr "parametre givet til makro '%s'" + + #: tradcpp.c:4137 + #, fuzzy, c-format + msgid "only 1 arg to macro `%s'" + msgstr "parametre givet til makro '%s'" + + #: tradcpp.c:4139 + #, fuzzy, c-format + msgid "only %d args to macro `%s'" + msgstr "parametre givet til makro '%s'" + + #: tradcpp.c:4141 + #, fuzzy, c-format + msgid "too many (%d) args to macro `%s'" + msgstr "for mange parametre til funktionen '%s'" + + #: tradcpp.c:4767 + #, fuzzy, c-format + msgid "" + "Internal error in %s, at tradcpp.c:%d\n" + "Please submit a full bug report.\n" + "See %s for instructions." + msgstr "" + "Intern oversætterfejl i '%s', ved %s:%d\n" + "Send venligst en komplet fejlrapport.\n" + "Se %s for instruktioner." + + #: tree.c:3879 + msgid "arrays of functions are not meaningful" + msgstr "en tabel af funktioner giver ikke mening" + + #: tree.c:3936 + msgid "function return type cannot be function" + msgstr "en funktions returtype kan ikke være en funktion" + + #: tree.c:4673 + msgid "invalid initializer for bit string" + msgstr "ugyldig startværdi til bitstreng" + + #: tree.c:4732 + #, fuzzy, c-format + msgid "Tree check: expected %s, have %s in %s, at %s:%d" + msgstr "Træ-tjek: forventede %s, har %s" + + #: tree.c:4749 + #, fuzzy, c-format + msgid "Tree check: expected class '%c', have '%c' (%s) in %s, at %s:%d" + msgstr "Træ-tjek: forventede klasse '%c', har '%c' (%s)" + + #: varasm.c:639 + #, fuzzy, c-format + msgid "register name not specified for `%s'" + msgstr "lagringsklasse angivet for %s '%s'" + + #: varasm.c:641 + #, fuzzy, c-format + msgid "invalid register name for `%s'" + msgstr "ukendt registernavn '%s'" + + #: varasm.c:644 + #, c-format + msgid "data type of `%s' isn't suitable for a register" + msgstr "" + + #: varasm.c:647 + #, c-format + msgid "register specified for `%s' isn't suitable for data type" + msgstr "" + + #: varasm.c:656 + msgid "global register variable has initial value" + msgstr "global registervariabel har en startværdi" + + #: varasm.c:659 + msgid "volatile register variables don't work as you might wish" + msgstr "" + + #: varasm.c:695 + #, fuzzy, c-format + msgid "register name given for non-register variable `%s'" + msgstr "ugyldigt registernavn '%s' for registervariabel" + + #: varasm.c:1333 + #, fuzzy, c-format + msgid "size of variable `%s' is too large" + msgstr "størrelsen af tabel '%s' er for stor" + + #: varasm.c:1373 + #, c-format + msgid "alignment of `%s' is greater than maximum object file alignment. Using %d." + msgstr "" + + #: varasm.c:1420 + #, fuzzy, c-format + msgid "requested alignment for %s is greater than implemented alignment of %d." + msgstr "angivet justering er ikke en potens af 2" + + #: varasm.c:1899 + msgid "floating point trap outputting a constant" + msgstr "kommatalsfælde udsender en konstant" + + #: varasm.c:4304 + msgid "initializer for integer value is too complicated" + msgstr "startværdien for heltallet er for kompliceret" + + #: varasm.c:4310 + msgid "initializer for floating value is not a floating constant" + msgstr "startværdien for kommatal er ikke en kommatalskonstant" + + #: varasm.c:4367 + msgid "unknown set constructor type" + msgstr "ukendt mængdekonstruktionstype" + + #: varasm.c:4572 + #, c-format + msgid "invalid initial value for member `%s'" + msgstr "ugyldig startværdi for medlemmet '%s'" + + #: varasm.c:4754 + #, fuzzy, c-format + msgid "weak declaration of `%s' must be public" + msgstr "erklæring af '%s' som void" + + #: varasm.c:4756 + #, fuzzy, c-format + msgid "weak declaration of `%s' must precede definition" + msgstr "'%s' erklæret som en tabel af funktioner" + + #: varasm.c:4852 + #, fuzzy + msgid "only weak aliases are supported in this configuration" + msgstr "%s understøttes ikke af denne konfiguration" + + #: varasm.c:4857 + #, fuzzy + msgid "alias definitions not supported in this configuration; ignored" + msgstr "%s understøttes ikke af denne konfiguration" + + #: varray.c:87 + #, c-format + msgid "Virtual array %s[%lu]: element %lu out of bounds" + msgstr "" + + #. Print an error message for unrecognized stab codes. + #: xcoffout.c:176 + #, c-format + msgid "No sclass for %s stab (0x%x)\n" + msgstr "" + + #: config/alpha/freebsd.h:35 config/i386/freebsd-aout.h:236 + msgid "`-p' not supported; use `-pg' and gprof(1)" + msgstr "'-p' understøttes ikke; brug '-pg' og gprof(1)" + + #: config/arc/arc.h:61 config/mips/mips.h:918 + msgid "may not use both -EB and -EL" + msgstr "kan ikke bruge både -EB og -EL" + + #: config/arm/arm.h:216 + msgid "-mapcs-26 and -mapcs-32 may not be used together" + msgstr "-mapcs-26 og -mapcs-32 kan ikke bruges på samme tid" + + #: config/arm/arm.h:228 + msgid "-msoft-float and -mhard_float may not be used together" + msgstr "-msoft-float og -mhard_float kan ikke bruges på samme tid" + + #: config/arm/arm.h:239 + msgid "-mbig-endian and -mlittle-endian may not be used together" + msgstr "-mbig-endian og -mlittle-endian kan ikke bruges på samme tid" + + #: config/arm/arm.h:257 + #, fuzzy + msgid "Incompatible interworking options" + msgstr "uforenelige typer i %s" + + #: config/arm/riscix.h:73 config/arm/riscix.h:135 + msgid "-mbsd and -pedantic incompatible" + msgstr "-mbsd og -pedantic er indbyrdes uforenelige" + + #: config/arm/riscix.h:74 config/arm/riscix.h:136 + msgid "-mbsd and -mxopen incompatible" + msgstr "-mbsd og -mxopen er indbyrdes uforenelige" + + #: config/arm/riscix.h:75 config/arm/riscix.h:137 + msgid "-mxopen and -pedantic incompatible" + msgstr "-mxopen og -pedantic er indbyrdes uforenelige" + + #: config/dsp16xx/dsp16xx.h:101 config/dsp16xx/dsp16xx.h:110 + msgid "A -ifile option requires a -map option" + msgstr "Et '-ifile'-tilvalg påkræver et '-map'-tilvalg" + + #: config/i386/cygwin.h:103 + #, fuzzy + msgid "mno-cygwin and mno-win32 are not compatible" + msgstr "-fpic og -mapcs-reent er indbyrdes uforenelige" + + #: config/i386/cygwin.h:158 config/i386/mingw32.h:63 + #, fuzzy + msgid "shared and mdll are not compatible" + msgstr "-msdata=%s og -mcall-%s er indbyrdes uforenelige." + + #: config/i386/sco5.h:777 config/i386/sco5.h:852 + msgid "-static not valid with -mcoff" + msgstr "-static er ikke gyldig sammen med -mcoff" + + #: config/i386/sco5.h:778 config/i386/sco5.h:853 + msgid "-shared not valid with -mcoff" + msgstr "-shared er ikke gyldig sammen med -mcoff" + + #: config/i386/sco5.h:779 config/i386/sco5.h:854 + msgid "-symbolic not valid with -mcoff" + msgstr "-symbolic er ikke gyldig sammen med -mcoff" + + #: config/i386/sco5.h:817 + msgid "-fpic is not valid with -mcoff" + msgstr "-fpic er ikke gyldig sammen med -mcoff" + + #: config/i386/sco5.h:818 + msgid "-fPIC is not valid with -mcoff" + msgstr "-fPIC er ikke gyldig sammen med -mcoff" + + #: config/i386/sco5.h:855 + msgid "-fpic not valid with -mcoff" + msgstr "-fpic er ikke gyldig sammen med -mcoff" + + #: config/i386/sco5.h:856 + msgid "-fPIC not valid with -mcoff" + msgstr "-fPIC er ikke gyldig sammen med -mcoff" + + #: config/i386/unix.h:122 + msgid "bx]" + msgstr "" + + #: config/i386/unix.h:124 + msgid "bx" + msgstr "" + + #: config/i386/unix.h:125 + msgid "cx" + msgstr "" + + #: config/i860/fx2800.h:305 + msgid "-p option not supported: use -pg instead" + msgstr "'-p'-tilvalget understøttes ikke; benyt '-pg' i stedet" + + #: config/mcore/mcore.h:65 + msgid "choose either big or little endian, not both" + msgstr "" + + #: config/mcore/mcore.h:68 + msgid "choose either m340 or m210 not both" + msgstr "" + + #: config/mcore/mcore.h:69 + msgid "the m210 does not have little endian support" + msgstr "" + + #: config/mips/mips.h:774 + msgid "-pipe is not supported." + msgstr "-pipe understøttes ikke." + + #: config/mips/mips.h:913 + msgid "may not use both -mfp64 and -msingle-float" + msgstr "-mfp64 og -msingle-float er indbyrdes uforenelige" + + #: config/mips/mips.h:914 + msgid "may not use both -mfp64 and -m4650" + msgstr "-mfp64 og -m4650 er indbyrdes uforenelige" + + #: config/mips/r3900.h:28 config/mips/r3900.h:42 + msgid "-mhard-float not supported." + msgstr "-mhard-float understøttes ikke." + + #: config/mips/r3900.h:30 config/mips/r3900.h:44 + msgid "-msingle-float and -msoft-float can not both be specified." + msgstr "-msingle-float og -msoft-float er indbyrdes uforenelige." + + #: config/nextstep.h:163 config/nextstep.h:166 + msgid "-p profiling is no longer supported. Use -pg instead." + msgstr "profilgenerering med -p understøttes ikke længere; benyt -pg i stedet for." + + #: config/vax/vax.h:41 config/vax/vax.h:42 + msgid "profiling not supported with -mg\n" + msgstr "profilgenerering understøttes ikke med -mg\n" + + #: f/lang-specs.h:35 gcc.c:593 + msgid "GNU C does not support -C without using -E" + msgstr "GNU C understøtter ikke -C uden -E" + + #: gcc.c:614 java/jvspec.c:68 + msgid "-pg and -fomit-frame-pointer are incompatible" + msgstr "-pg og -fomit-frame-pointer er indbyrdes uforenelige" + + #: gcc.c:762 + msgid "-E required when input is from standard input" + msgstr "-E påkrævet når inddata kommer fra standardind" + + #: gcc.c:766 + msgid "Compilation of header file requested" + msgstr "Oversættelse af inkluderingsfil udbedt" + + #: java/lang-specs.h:33 + #, fuzzy + msgid "-fjni and -femit-class-files are incompatible" + msgstr "-fpic og -mapcs-reent er indbyrdes uforenelige" + + #: java/lang-specs.h:34 + #, fuzzy + msgid "-fjni and -femit-class-file are incompatible" + msgstr "-fpic og -mapcs-reent er indbyrdes uforenelige" + + #~ msgid "iterator `%s' has derived type" + #~ msgstr "løkkevariablen '%s' er af en nedarvet type" + + #~ msgid "iterator `%s' has noninteger type" + #~ msgstr "løkkevariablen '%s' er ikke af en heltalstype" + + #~ msgid "%s before character constant" + #~ msgstr "%s før tegnkonstant" + + #~ msgid "%s before character 0%o" + #~ msgstr "%s før tegn 0%o" + + #~ msgid "more than one `f' in numeric constant" + #~ msgstr "mere end ét 'f' i talkonstant" + + #~ msgid "more than one `l' in numeric constant" + #~ msgstr "mere end ét 'l' i talkonstant" + + #~ msgid "invalid identifier `%s'" + #~ msgstr "ugyldigt kaldenavn '%s'" + + #~ msgid "parse error at `..'" + #~ msgstr "tolkningsfejl ved '..'" + + #~ msgid "nondigits in number and not hexadecimal" + #~ msgstr "tegn der ikke er cifre, optræder i tal" + + #~ msgid "numeric constant contains digits beyond the radix" + #~ msgstr "talkonstant indeholder cifre der ligger ud over grundtallet" + + #~ msgid "floating constant exponent has no digits" + #~ msgstr "der er ingen cifre i kommatallets eksponent" + + #~ msgid "hexadecimal floating constant has no exponent" + #~ msgstr "hexadecimal kommatalskonstant har ingen eksponent" + + #~ msgid "two `u's in integer constant" + #~ msgstr "to 'u'er i heltalskonstant" + + #~ msgid "Unterminated string constant" + #~ msgstr "Uafsluttet strengkonstant" + + #~ msgid "syntax error: cannot back up" + #~ msgstr "syntaksfejl: kan ikke gå tilbage" + + #~ msgid "parser stack overflow" + #~ msgstr "overløb i tolkerens stak" + + #~ msgid "invalid `for (ITERATOR)' syntax" + #~ msgstr "ugyldigt 'for (LØKKEVARIABEL)'-syntaks" + + #~ msgid "`for (%s)' inside expansion of same iterator" + #~ msgstr "'for (%s)' inden i udfoldning af samme løkkevariabel" + + #~ msgid "case label within scope of cleanup or variable array" + #~ msgstr "case-etiket i oprydningsområde eller i en variabel tabel" + + #~ msgid "parse error; also virtual memory exceeded" + #~ msgstr "tolkningsfejl; desuden løbet tør for virtuel hukommelse" + + #~ msgid "duplicate array index in initializer" + #~ msgstr "tabelindeks i startværdi optræder mere end én gang" + + #~ msgid "duplicate initializer" + #~ msgstr "startværdi optræder mere end én gang" + + #~ msgid "thumb_load_double_from_address: destination is not a register" + #~ msgstr "thumb_load_double_from_adress: destination er ikke et register" + + #~ msgid "thumb_load_double_from_address: source is not a computed memory address" + #~ msgstr "thumb_load_double_from_adress: kilden er ikke en beregnet hukommelsesadresse" + + #~ msgid "thumb_load_double_from_address: base is not a register" + #~ msgstr "thumb_load_double_from_adress: basis er ikke et register" + + #~ msgid "thumb_load_double_from_address: Unhandled address calculation" + #~ msgstr "thumb_load_double_from_adress: adresseberegningen er ikke håndteret" + + #~ msgid "ACCUM_HIGH_REGS class in limit_reload_class" + #~ msgstr "ACCUM_HIGH_REGS-klasse i limit_reload_class" + + #~ msgid "YH_OR_ACCUM_HIGH_REGS found in limit_reload_class" + #~ msgstr "YH_OR_ACCUM_HIGH_REGS fundet i limit_reload_class" + + #~ msgid "YL found in limit_reload_class" + #~ msgstr "YL fundet i limit_reload_class" + + #~ msgid "Bad register extension code" + #~ msgstr "Ugyldig registerudvidelseskode" + + #~ msgid "Invalid offset in ybase addressing" + #~ msgstr "Ugyldigt offset i ybase-adressering" + + #~ msgid "Invalid shift operator in emit_1600_core_shift" + #~ msgstr "Ugyldig forskydningsoperator i emit_1600_core_shift" + + #~ msgid "Invalid mode for gen_tst_reg" + #~ msgstr "Ugyldig tilstand for gen_tst_reg" + + #~ msgid "Invalid mode for integer comparison in gen_compare_reg" + #~ msgstr "Ugyldig tilstand for heltalssammenligning i gen_compare_reg" + + #~ msgid "Invalid register for compare" + #~ msgstr "Ugyldigt register til sammenligningen" + + #~ msgid "PRINT_OPERAND: letter %c was found & insn was not CONST_INT" + #~ msgstr "PRINT_OPERAND: bogstavet %c blev fundet og instruktionen var ikke CONST_INT" + + #~ msgid "-mptr%d not allowed on -m%d" + #~ msgstr "-mptr%d er ikke tilladt på -m%d" + + #~ msgid "parse errors have confused me too much" + #~ msgstr "tolkningsfejl er blevet for forvirrende" + + #~ msgid "virtual memory exhausted" + #~ msgstr "løbet tør for virtuel hukommelse" + + #~ msgid "destructor for alien class `%s' cannot be a member" + #~ msgstr "destruktionsfunktionen for den fremmede klasse '%s' kan ikke være et medlem" + + #~ msgid "constructor for alien class `%s' cannot be a member" + #~ msgstr "konstruktionsfunktionen for den fremmede klasse '%s' kan ikke være et medlem" + + #~ msgid "trying to make class `%s' a friend of global scope" + #~ msgstr "forsøg på at gøre klassen '%s' til ven af det globale virkningsfelt" + + #~ msgid "parameter invalidly declared method type" + #~ msgstr "parameteren er på ugyldig vis erklæret som af en medlemsfunktionstype" + + #~ msgid "parameter invalidly declared offset type" + #~ msgstr "parameteren er på ugyldig vis erklæret som af en offset-type" + + #~ msgid "`void' in parameter list must be entire list" + #~ msgstr "'void' i en parameterliste skal udgøre hele listen" + + #~ msgid "no file specified with -fdump-translation-unit" + #~ msgstr "ingen filer angivet med -fdump-translation-unit" + + #~ msgid "(you really want to initialize it separately)" + #~ msgstr "(klargør den separat)" + + #~ msgid "`operator new' takes type `size_t' parameter" + #~ msgstr "'operator new' skal have en parameter af typen 'size_t'" + + #~ msgid "`operator new' takes type `size_t' as first parameter" + #~ msgstr "den første parameter til 'operator new' skal være af typen 'size_t'" + + #~ msgid "`operator delete' must return type `void'" + #~ msgstr "'operator delete' skal returnere 'void'" + + #~ msgid "`operator delete' takes type `void *' as first parameter" + #~ msgstr "den første parameter til 'operator delete' skal være af typen 'void *'" + + #~ msgid "too many arguments in declaration of `operator delete'" + #~ msgstr "for mange parametre i erklæringen af 'operator delete'" + + #~ msgid "`...' invalid in specification of `operator delete'" + #~ msgstr "'...' er ugyldigt i angivelsen af 'operator delete'" + + #~ msgid "`default' label within scope of cleanup or variable array" + #~ msgstr "'default'-etiket i oprydningsområde eller i en variabel tabel" + + #~ msgid "bad array initializer" + #~ msgstr "ugyldig tildeling af startværdi i tabel" + + #~ msgid "end of file encountered inside string constant" + #~ msgstr "nåede slutningen af filen inden i en strengkonstant" + + #~ msgid "end of file encountered inside character constant" + #~ msgstr "nåede slutningen af filen inden i en tegnkonstant" + + #~ msgid "invalid #pragma vtable" + #~ msgstr "ugyldig #pragma virtuel tabel" + + #~ msgid "invalid `#pragma implementation'" + #~ msgstr "ugyldig '#pragma implementation'" + + #~ msgid "universal-character-name designates `%c', part of the basic source character set" + #~ msgstr "universelt tegnnavn står for '%c', som er en del af det basale kildekodetegnsæt" + + #~ msgid "%s at end of saved text" + #~ msgstr "%s ved slutningen af den gemte tekst" + + #~ msgid "complex integer constant is too wide for `__complex int'" + #~ msgstr "kompleks heltalskonstant er for bred til '__complex int'" + + #~ msgid "request for member `%s' is ambiguous in multiple inheritance lattice" + #~ msgstr "forespørgsel efter medlemmet '%s' er flertydigt i et net af multipel nedarvning" + + #~ msgid "Internal compiler error." + #~ msgstr "Intern oversætterfejl." + + #~ msgid "Please submit a full bug report." + #~ msgstr "Send venligst en komplet fejlrapport." + + #~ msgid "duplicate label `%s' in switch statement" + #~ msgstr "mere end én '%s'-etiket i switch-sætningen" + + #~ msgid "duplicate label (%d) in switch statement" + #~ msgstr "mere end én etiket (%d) i switch-sætningen" + + #~ msgid "range values `%s' and `%s' reversed" + #~ msgstr "intervalværdierne '%s' og '%s' vender omvendt" + + #~ msgid "range values reversed" + #~ msgstr "intervalværdierne vender omvendt" + + #~ msgid "bad is_error(%d) in v_message" + #~ msgstr "ugyldig is_error(%d) i v_message" + + #~ msgid "'defined' without an identifier" + #~ msgstr "'defined' optræder uden et kaldenavn" + + #~ msgid "string constants are not allowed in #if expressions" + #~ msgstr "strengkonstanter er ikke tilladt i '#if'-udtryk" + + #~ msgid "included file `%s' exists but is not readable" + #~ msgstr "den inkluderede fil '%s' eksisterer, men kan ikke læses" + + #~ msgid "%s is a directory" + #~ msgstr "%s er et katalog" + + #~ msgid "macro argument \"%s\" is stringified" + #~ msgstr "makroparameteren \"%s\" er blevet gjort til en streng" + + #~ msgid "`##' at start of macro definition" + #~ msgstr "'##' i begyndelsen af makrodefinitionen" + + #~ msgid "`##' at end of macro definition" + #~ msgstr "'##' ved slutningen af makrodefinitionen" + + #~ msgid "empty object-like macro went through full #define" + #~ msgstr "en tom objektlignende makro gik gennem komplet #define" + + #~ msgid "first token = %d not %d in collect_formal_parameters" + #~ msgstr "første symbol = %d er ikke %d i collect_formal_parameters" + + #~ msgid "impossible token in macro argument list" + #~ msgstr "umuligt symbol i makroparameterlisten" + + #~ msgid "illegal token in macro argument list" + #~ msgstr "ulovligt symbol i makroparameterlisten" + + #~ msgid "another parameter follows \"...\"" + #~ msgstr "der optræder en parameter mere efter \"...\"" + + #~ msgid "collect_params: argc=%d argslen=0" + #~ msgstr "collect_params: argc=%d argslen=0" + + #~ msgid "C99 does not permit use of __VA_ARGS__ as a macro argument name" + #~ msgstr "C99 tillader ikke brug af __VA_ARGS__ som makroparameternavn" + + #~ msgid "C89 does not permit varargs macros" + #~ msgstr "C89 tillader ikke variabel parameterliste-makroer" + + #~ msgid "collect_params: impossible token type %d" + #~ msgstr "collect_params: umulig symboltype %d" + + #~ msgid "attempt to use poisoned `%s'." + #~ msgstr "forsøg på at bruge forgiftet '%s'" + + #~ msgid "macroexpand: unexpected token %d (wanted LPAREN)" + #~ msgstr "macroexpand: forventede ikke symbol %d (skulle have været LPAREN)" + + #~ msgid "unterminated macro call" + #~ msgstr "uafsluttet makrokald" + + #~ msgid "macro `%s' used with just one arg" + #~ msgstr "makroen '%s' kaldt med kun én parameter" + + #~ msgid "macro `%s' used with only %d args" + #~ msgstr "makroen '%s' kaldt med kun %d parametre" + + #~ msgid "macro `%s' used with too many (%d) args" + #~ msgstr "makroen '%s' kaldt med for mange (%d) parametre" + + #~ msgid "" + #~ "Switches:\n" + #~ " -include Include the contents of before other files\n" + #~ " -imacros Accept definition of macros in \n" + #~ " -iprefix Specify as a prefix for next two options\n" + #~ " -iwithprefix Add to the end of the system include path\n" + #~ " -iwithprefixbefore Add to the end of the main include path\n" + #~ " -isystem Add to the start of the system include path\n" + #~ " -idirafter Add to the end of the system include path\n" + #~ " -I Add to the end of the main include path\n" + #~ " -I- Fine-grained include path control; see info docs\n" + #~ " -nostdinc Do not search system include directories\n" + #~ " (dirs specified with -isystem will still be used)\n" + #~ " -nostdinc++ Do not search system include directories for C++\n" + #~ " -o Put output into \n" + #~ " -pedantic Issue all warnings demanded by strict ANSI C\n" + #~ " -pedantic-errors Issue -pedantic warnings as errors instead\n" + #~ " -traditional Follow K&R pre-processor behaviour\n" + #~ " -trigraphs Support ANSI C trigraphs\n" + #~ " -lang-c Assume that the input sources are in C\n" + #~ " -lang-c89 Assume that the input sources are in C89\n" + #~ " -lang-c++ Assume that the input sources are in C++\n" + #~ " -lang-objc Assume that the input sources are in ObjectiveC\n" + #~ " -lang-objc++ Assume that the input sources are in ObjectiveC++\n" + #~ " -lang-asm Assume that the input sources are in assembler\n" + #~ " -lang-fortran\t\t Assume that the input sources are in Fortran\n" + #~ " -lang-chill Assume that the input sources are in Chill\n" + #~ " -std= Specify the conformance standard; one of:\n" + #~ " gnu89, gnu99, c89, c99, iso9899:1990,\n" + #~ " iso9899:199409, iso9899:1999\n" + #~ " -+ Allow parsing of C++ style features\n" + #~ " -w Inhibit warning messages\n" + #~ " -Wtrigraphs Warn if trigraphs are encountered\n" + #~ " -Wno-trigraphs Do not warn about trigraphs\n" + #~ " -Wcomment{s} Warn if one comment starts inside another\n" + #~ " -Wno-comment{s} Do not warn about comments\n" + #~ " -Wtraditional Warn if a macro argument is/would be turned into\n" + #~ " a string if -traditional is specified\n" + #~ " -Wno-traditional Do not warn about stringification\n" + #~ " -Wundef Warn if an undefined macro is used by #if\n" + #~ " -Wno-undef Do not warn about testing undefined macros\n" + #~ " -Wimport Warn about the use of the #import directive\n" + #~ " -Wno-import Do not warn about the use of #import\n" + #~ " -Werror Treat all warnings as errors\n" + #~ " -Wno-error Do not treat warnings as errors\n" + #~ " -Wall Enable all preprocessor warnings\n" + #~ " -M Generate make dependencies\n" + #~ " -MM As -M, but ignore system header files\n" + #~ " -MD As -M, but put output in a .d file\n" + #~ " -MMD As -MD, but ignore system header files\n" + #~ " -MG Treat missing header file as generated files\n" + #~ " -g3 Include #define and #undef directives in the output\n" + #~ " -D Define a with string '1' as its value\n" + #~ " -D= Define a with as its value\n" + #~ " -A () Assert the to \n" + #~ " -A- () Disable the to \n" + #~ " -U Undefine \n" + #~ " -v Display the version number\n" + #~ " -H Print the name of header files as they are used\n" + #~ " -C Do not discard comments\n" + #~ " -dM Display a list of macro definitions active at end\n" + #~ " -dD Preserve macro definitions in output\n" + #~ " -dN As -dD except that only the names are preserved\n" + #~ " -dI Include #include directives in the output\n" + #~ " -ftabstop= Distance between tab stops for column reporting\n" + #~ " -P Do not generate #line directives\n" + #~ " -$ Do not allow '$' in identifiers\n" + #~ " -remap Remap file names when including files.\n" + #~ " --version Display version information\n" + #~ " -h or --help Display this information\n" + #~ msgstr "" + #~ "Tilvalg:\n" + #~ " -include Inkludér indholdet af før andre filer\n" + #~ " -imacros Læs makrodefinitionerne i \n" + #~ " -iprefix Angiv som et præfiks til de næste to tilvalg\n" + #~ " -iwithprefix Føj til slutningen af systeminkluderingsstien\n" + #~ " -withprefixbefore Føj til slutningen af den alm. inkluderingssti\n" + #~ " -isystem Føj til begyndelsen af systeminkluderingsstien\n" + #~ " -idirafter Føj til slutningen af systeminkluderingsstien\n" + #~ " -I Føj til slutningen af den alm. inkluderingssti\n" + #~ " -I- Nøje kontrolleret inkluderingssti; se info-hjælpen\n" + #~ " -nostdinc Søg ikke i systeminkluderingskataloger\n" + #~ " (kataloger angivet med -isystem søges dog stadig)\n" + #~ " -nostdinc++ Søg ikke i systeminkluderingskataloger til C++\n" + #~ " -o Send uddata til \n" + #~ " -pedantic Fremkom med alle advarsler påkrævet for nøje ISO C\n" + #~ " -pedantic-errors Behandl '-pedantic'-advarsler som fejl\n" + #~ " -traditional Iagttag opførsel som en K&R-forbehandler\n" + #~ " -trigraphs Understøt ANSI C trigrafer\n" + #~ " -lang-c Antag at inddata er C\n" + #~ " -lang-c89 Antag at inddata er C89\n" + #~ " -lang-c++ Antag at inddata er C++\n" + #~ " -lang-cobjc Antag at inddata er Objective C\n" + #~ " -lang-cobjc++ Antag at inddata er Objective C++\n" + #~ " -lang-asm Antag at inddata er maskinkode\n" + #~ " -lang-fortran Antag at inddata er Fortran\n" + #~ " -lang-chill Antag at inddata er Chill\n" + #~ " -std= Angiv at koden retter sig efter en af standarderne:\n" + #~ " gnu89, gnu99, c89, c99, iso9899:1990,\n" + #~ " iso9899:199409, iso9899:1999\n" + #~ " -+ Tillad fortolkning af faciliteter i C++-stil\n" + #~ " -w Blokér advarselsmeddelelser\n" + #~ " -Wtrigraphs Advar hvis der optræder trigrafer\n" + #~ " -Wno-trigraphs Advar ikke om trigrafer\n" + #~ " -Wcomment{s} Advar hvis en kommentar begynder inden i en anden\n" + #~ " -Wno-comment{s} Advar ikke om kommentarer\n" + #~ " -Wtraditional Advar hvis en makroparameter vil blive gjort til en\n" + #~ " streng med -traditional\n" + #~ " -Wno-traditional Advar ikke om omdannelse til streng\n" + #~ " -Wundef Advar hvis en ikkedefineret makro bruges med #if\n" + #~ " -Wno-undef Advar ikke om test på makroer der ikke er definerede\n" + #~ " -Wimport Advar om brug af #import\n" + #~ " -Wno-import Advar ikke om brug af #import\n" + #~ " -Werror Behandl alle advarsler som fejl\n" + #~ " -Wno-error Behandl ikke alle advarsler som fejl\n" + #~ " -Wall Slå alle forbehandleradvarsler til\n" + #~ " -M Generér afhængigheder til make\n" + #~ " -MM Som -M, men ignorér systeminkluderingsfiler\n" + #~ " -MD Som -M, men anbring uddata i en '.d'-fil\n" + #~ " -MMD Som -MD, men ignorér systeminkluderingsfiler\n" + #~ " -MG Behandl manglende inkl.-filer som genererede filer\n" + #~ " -g3 Inkludér #define- og #undef-direktiver i uddata\n" + #~ " -D Definér makroen med strengen '1' som værdi\n" + #~ " -D= Definér makroen med værdien \n" + #~ " -A () Angiv at er svar på \n" + #~ " -A- () Angiv at ikke er svar på \n" + #~ " -U Glem definitionen af \n" + #~ " -v Skriv versionsnummeret\n" + #~ " -H Skriv navnene på inkluderingsfilerne når de bruges\n" + #~ " -C Fjern ikke kommentarer\n" + #~ " -dM Vis til sidst de aktive makrodefinitioner\n" + #~ " -dD Bevar makrodefinitioner i uddata\n" + #~ " -dN Som -dD bortset fra at kun navnene bevares\n" + #~ " -dI Inkludér #include-anvisninger i uddata\n" + #~ " -ftabstop= Afstand mellem tabulatorstop i kolonnerapportering\n" + #~ " -P Generér ikke #line-angivelser\n" + #~ " -$ Tillad ikke '$' i kaldenavne\n" + #~ " -remap Omdan filnavne ved filinkludering\n" + #~ " --version Udskriv versionsinformation\n" + #~ " -h eller --help Vis denne vejledning\n" + + #~ msgid "mark active in cpp_pop_buffer" + #~ msgstr "markér aktiv i cpp_pop_buffer" + + #~ msgid "length < 0 in cpp_expand_to_buffer" + #~ msgstr "længden < 0 i cpp_expand_to_buffer" + + #~ msgid "backslash-newline within line comment" + #~ msgstr "omvendt skråstreg efterfulgt af linjeskift fundet i en enkeltlinjeskommentar" + + #~ msgid "C++ style comments are not allowed in traditional C" + #~ msgstr "kommentarer i C++-stil er ikke tilladt i traditionel C" + + #~ msgid "embedded null character ignored" + #~ msgstr "indlejret nultegn ignoreret" + + #~ msgid "string constant runs past end of line" + #~ msgstr "strengkonstanten går ud over slutningen af linjen" + + #~ msgid "\\r escape inside string constant" + #~ msgstr "\\r-undvigetegn i strengkonstant" + + #~ msgid "null characters in string or character constant" + #~ msgstr "nultegn i streng- eller tegnkonstant" + + #~ msgid "missing '>' in `#include '" + #~ msgstr "manglende '>' i '#include '" + + #~ msgid "unrecognized escape \\r%c" + #~ msgstr "ukendt undvigetegn \\r%c" + + #~ msgid "vertical tab in preprocessing directive" + #~ msgstr "lodret tabulator i forbehandlerdirektiv" + + #~ msgid "form feed in preprocessing directive" + #~ msgstr "sideskift i forbehandlerdirektiv" + + #~ msgid "null character preserved" + #~ msgstr "nultegn bevaret" + + #~ msgid "comment start split across lines" + #~ msgstr "kommentarbegyndelsen delt over to linjer" + + #~ msgid "comment start '/*' split across lines" + #~ msgstr "kommentarbegyndelsen '/*' delt over to linjer" + + #~ msgid "comment end '*/' split across lines" + #~ msgstr "kommentarslutningen '*/' delt over to linjer" + + #~ msgid "handle_directive called on macro buffer" + #~ msgstr "handle_directive kaldt med et makromellemlager" + + #~ msgid "ignoring #%s because of its indented #" + #~ msgstr "ignorerer #%s på grund af den indrykkede '#'" + + #~ msgid "ISO C does not allow #%s" + #~ msgstr "ISO C tillader ikke #%s" + + #~ msgid "redefining poisoned `%.*s'" + #~ msgstr "omdefinerer forgiftet '%.*s'" + + #~ msgid "garbage at end of #line" + #~ msgstr "ragelse i slutningen af #line" + + #~ msgid "second token after #line is not a string" + #~ msgstr "det andet symbol efter #line er ikke en streng" + + #~ msgid "junk on line after #undef" + #~ msgstr "ragelse på linjen efter #undef" + + #~ msgid "cannot undefine poisoned \"%s\"" + #~ msgstr "kan ikke glemme definitionen af forgiftet \"%s\"" + + #~ msgid "malformed #pragma implementation" + #~ msgstr "forkert udformet '#pragma implementation'" + + #~ msgid "#%s with no argument" + #~ msgstr "#%s uden parametre" + + #~ msgid "#%s with invalid argument" + #~ msgstr "#%s med ugyldigt parameter" + + #~ msgid "Cannot duplicate non-existant exception region." + #~ msgstr "Kan ikke mangfoldiggøre en ikkeeksisterende undtagelsesregion." + + #~ msgid "Never issued previous false_label" + #~ msgstr "Sørgede ikke for tidligere false_label" + + #~ msgid "Basic blocks not numbered consecutively" + #~ msgstr "Basisblokkene er ikke nummeret i rækkefølge" + + #~ msgid "file path prefix `%s%s' never used" + #~ msgstr "stipræfikset '%s%s' blev aldrig brugt" + + #~ msgid "file path prefix `%s' never used" + #~ msgstr "stipræfikset '%s' blev aldrig brugt" + + #~ msgid "%s: option `%s' is ambiguous\n" + #~ msgstr "%s: tilvalget '%s' er flertydigt\n" + + #~ msgid "%s: option `--%s' doesn't allow an argument\n" + #~ msgstr "%s: tilvalget '--%s' tillader ikke en parameter\n" + + #~ msgid "%s: option `%c%s' doesn't allow an argument\n" + #~ msgstr "%s: tilvalget '%c%s' tillader ikke en parameter\n" + + #~ msgid "%s: option `%s' requires an argument\n" + #~ msgstr "%s: tilvalget '%s' skal have en parameter\n" + + #~ msgid "%s: unrecognized option `--%s'\n" + #~ msgstr "%s: ukendt tilvalg '--%s'\n" + + #~ msgid "%s: unrecognized option `%c%s'\n" + #~ msgstr "%s: ukendt tilvalg '%c%s'\n" + + #~ msgid "%s: illegal option -- %c\n" + #~ msgstr "%s: ugyldigt tilvalg -- %c\n" + + #~ msgid "%s: invalid option -- %c\n" + #~ msgstr "%s: ugyldigt tilvalg -- %c\n" + + #~ msgid "%s: option requires an argument -- %c\n" + #~ msgstr "%s: tilvalget skal have en parameter -- %c\n" + + #~ msgid "%s: option `-W %s' is ambiguous\n" + #~ msgstr "%s: tilvalget '-W %s' er flertydigt\n" + + #~ msgid "%s: option `-W %s' doesn't allow an argument\n" + #~ msgstr "%s: tilvalget '-W %s' tillader ikke en parameter\n" + + #~ msgid "function with complex parameters cannot be inline" + #~ msgstr "funktioner med complex-parametre kan ikke indbygges" + + #~ msgid "Objective-C text in C source file" + #~ msgstr "Objective C-tekst i C-kildekodefil" + + #~ msgid "statically allocated objects not supported" + #~ msgstr "statisk allokerede objekter understøttes ikke" + + #~ msgid "output pipe has been closed" + #~ msgstr "uddataledningen er blevet lukket" + + #~ msgid "Unknown stab %s: : 0x%x\n" + #~ msgstr "Ukendt stab %s: : 0x%x\n" diff -Nrc3pad gcc-3.0.4/gcc/po/el.gmo gcc-3.1/gcc/po/el.gmo *** gcc-3.0.4/gcc/po/el.gmo Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/po/el.gmo Wed May 15 02:41:44 2002 *************** *** 0 **** --- 1,27 ---- + Þ•1¤C,89 MZasŒž°´ÇØçö  . ; H U b o | ‰ – ¤²6Ä(û&$%Kqƒ— ²)¾%è, E!R"t—$·Ü0ñ" <3Fz Ž › ¢ ¸ Ñ æ û ÿ  + + + < + M + _ + h + | + “ + ¢ + ± + À + Ï + Þ + í + ü +  + 8? .x (§ 'Ð ø  "$ G /[ (‹ .´ ,ã  % &F m $ ² <Ò - + (!) '* " 0 %,/&$-+.1# %#D `%D' `%s' but %d required TOTAL :#elif after #else#else after #else%s %s at end of input%s before %s'%c'%s before `%c'%s before `%s'%s before `\%o'%s: %s: %s: warning: %s:%d: warning: '(' expected')' expected'*' expected':' expected';' expected'[' expected']' expected'{' expected((anonymous))Creating %s. + In function `%s':`return' with no value, in function returning non-voidcontrol reaches end of non-void functionimplicit declaration of function `%#D'implicit declaration of function `%s'invalid option %sinvalid option `%s'ld returned %d exit statusparse errorparse error; also virtual memory exceededprevious implicit declaration of `%s'return type defaults to `int'sorry, not implemented: syntax errortoo few arguments in call to `%s'too many arguments in call to `%s'too many arguments to proceduretoo many arguments to procedure `%s'too many input filestype mismatch with previous implicit declarationunrecognized option `-%s'warning: Project-Id-Version: gcc 3.1-b20011219 + POT-Creation-Date: 2002-01-22 19:38-0800 + PO-Revision-Date: 2001-12-20 17:19+0000 + Last-Translator: Simos Xenitellis + Language-Team: Greek + MIME-Version: 1.0 + Content-Type: text/plain; charset=iso-8859-7 + Content-Transfer-Encoding: 8bit + %#D `%D' `%s' áëëÜ %d áðáéôïýíôáé ÓÕÍÏËÉÊÁ :#elif ìåôÜ áðü #else#else ìåôÜ áðü #else%s %s óôï ôÝëïò ôçò åéóüäïõ%s ðñéí áðü %s'%c'%s ðñéí áðü `%c'%s ðñéí áðü `%s'%s ðñéí áðü `\%o'%s: %s: %s: ðñïåéäïðïßçóç: %s:%d: ðñïåéäïðïßçóç: áíáìåíüôáí '('áíáìåíüôáí '('áíáìåíüôáí '*'áíáìåíüôáí ':'áíáìåíüôáí ';'áíáìåíüôáí '['áíáìåíüôáí ']'áíáìåíüôáí '{'((áíþíõìï))Äçìéïõñãßá ôïõ %s. + Óôç óõíÜñôçóç `%s':`return' ÷ùñßò ôéìÞ, óå óõíÜñôçóç ðïõ åðéóôñÝöåé ìç-êåíüï Ýëåã÷ïò öèÜíåé óôï ôÝëïò ìç-êåíÞò óõíÜñôçóçòáõôïíüçôç äéáêýñçîç ôçò óõíÜñôçóçò `%#D'áõôïíüçôç äéáêýñçîç ôçò óõíÜñôçóçò `%s'ìç Ýãêõñç åðéëïãÞ %sìç Ýãêõñç åðéëïãÞ `%s'ç ld åðÝóôñåøå êáôÜóôáóç åîüäïõ %dóöÜëìá åðåîåñãáóßáòóöÜëìá åðåîåñãáóßáò· åðßóçò ç ìíÞìç åîáíôëÞèçêåðñïçãïýìåíç áõôïíüçôç äéáêýñçîç ôïõ `%s'ï åðéóôñåöüìåíïò ôýðïò ðñïêáèïñßæåôáé óå `int'óõããíþìç, ç ëåéôïõñãßá äåí Ý÷åé õëïðïéçèåß: óöÜëìá óýíôáîçòðïëý ëßãá ïñßóìáôá óôç êëÞóç ôçò `%s'ðÜñá ðïëëÜ ïñßóìáôá óôç êëÞóç ôçò `%s'ðÜñá ðïëëÜ ïñßóìáôá óôç ñïõôßíáðÜñá ðïëëÜ ïñßóìáôá óôç ñïõôßíá `%s'õðåñâïëéêÜ ðïëëÜ áñ÷åßá åéóüäïõóöÜëìá ôáéñéÜóìáôïò ôýðïõ ìå ðñïçãïýìåíç áõôïíüçôç äéáêýñçîçìç áíáãíùñßóçìç åðéëïãÞ `-%s'ðñïåéäïðïßçóç: \ No newline at end of file diff -Nrc3pad gcc-3.0.4/gcc/po/el.po gcc-3.1/gcc/po/el.po *** gcc-3.0.4/gcc/po/el.po Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/po/el.po Thu Jan 31 12:15:25 2002 *************** *** 0 **** --- 1,23657 ---- + # Greek translation of gcc. + # Copyright (C) 2001 Free Software Foundation, Inc. + # Simos Xenitellis , 2001. + # + msgid "" + msgstr "" + "Project-Id-Version: gcc 3.1-b20011219\n" + "POT-Creation-Date: 2002-01-22 19:38-0800\n" + "PO-Revision-Date: 2001-12-20 17:19+0000\n" + "Last-Translator: Simos Xenitellis \n" + "Language-Team: Greek \n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=iso-8859-7\n" + "Content-Transfer-Encoding: 8bit\n" + + #: attribs.c:310 + #, c-format + msgid "`%s' attribute directive ignored" + msgstr "" + + #: attribs.c:318 + #, fuzzy, c-format + msgid "wrong number of arguments specified for `%s' attribute" + msgstr "ëÜèïò áñéèìüò ïñéóìÜôùí" + + #: attribs.c:335 + #, c-format + msgid "`%s' attribute does not apply to types" + msgstr "" + + #: attribs.c:372 + #, c-format + msgid "`%s' attribute only applies to function types" + msgstr "" + + #: attribs.c:462 attribs.c:484 attribs.c:506 attribs.c:537 attribs.c:559 + #: attribs.c:582 attribs.c:612 attribs.c:650 attribs.c:697 attribs.c:727 + #: attribs.c:757 attribs.c:780 attribs.c:1026 attribs.c:1082 attribs.c:1138 + #: attribs.c:1199 attribs.c:1225 attribs.c:1427 config/arm/arm.c:2012 + #: config/arm/arm.c:2039 config/avr/avr.c:4683 config/h8300/h8300.c:3045 + #: config/h8300/h8300.c:3070 config/i386/i386.c:1261 config/i386/winnt.c:74 + #, c-format + msgid "`%s' attribute ignored" + msgstr "" + + #: attribs.c:813 + #, fuzzy, c-format + msgid "unknown machine mode `%s'" + msgstr "Üãíùóôï óåô `%s'" + + #: attribs.c:816 + #, fuzzy, c-format + msgid "no data type for mode `%s'" + msgstr "äåí ïñßóôçêå âáñýôçôá ãéá ôï óýìâïëï `%s'" + + #: attribs.c:849 + msgid "section attribute cannot be specified for local variables" + msgstr "" + + #: attribs.c:860 + #, c-format + msgid "section of `%s' conflicts with previous declaration" + msgstr "" + + #: attribs.c:869 + #, c-format + msgid "section attribute not allowed for `%s'" + msgstr "" + + #: attribs.c:876 + #, fuzzy + msgid "section attributes are not supported for this target" + msgstr "óõìâïëéêïß óýíäåóìïé äåí õðïóôçñßæïíôáé óôï óýóôçìá áõôü" + + #: attribs.c:918 + msgid "requested alignment is not a constant" + msgstr "" + + #: attribs.c:923 + msgid "requested alignment is not a power of 2" + msgstr "" + + #: attribs.c:928 + #, fuzzy + msgid "requested alignment is too large" + msgstr "ÊáêÞ áßôçóç ðáñáìÝôñùí" + + #: attribs.c:955 + #, fuzzy, c-format + msgid "alignment may not be specified for `%s'" + msgstr "ìüíï Ýíá üñéóìá ìðïñåß íá äçëùèåß" + + #: attribs.c:1000 + #, c-format + msgid "`%s' defined both normally and as an alias" + msgstr "" + + #: attribs.c:1010 + msgid "alias arg not a string" + msgstr "" + + #: attribs.c:1049 attribs.c:1105 + #, c-format + msgid "`%s' attribute applies only to functions" + msgstr "" + + #: attribs.c:1056 attribs.c:1112 + #, fuzzy, c-format + msgid "can't set `%s' attribute after definition" + msgstr "áõôüò åßíáé ï ðñþôïò ïñéóìüò" + + #: attribs.c:1196 + #, fuzzy, c-format + msgid "`%s' attribute ignored for `%s'" + msgstr "ôï `%s' åßíáé ðñüãïíïò ôïõ `%s'" + + #: attribs.c:1253 + #, fuzzy, c-format + msgid "invalid vector type for attribute `%s'" + msgstr "ìç Ýãêõñï åßäïò áëöáñéèìçôéêïý `%s'" + + #: attribs.c:1276 attribs.c:1281 + msgid "no vector mode with the size and type specified could be found" + msgstr "" + + #: builtins.c:282 + msgid "offset outside bounds of constant string" + msgstr "" + + #: builtins.c:759 + msgid "second arg to `__builtin_prefetch' must be a constant" + msgstr "" + + #: builtins.c:766 + msgid "invalid second arg to __builtin_prefetch; using zero" + msgstr "" + + #: builtins.c:773 + msgid "third arg to `__builtin_prefetch' must be a constant" + msgstr "" + + #: builtins.c:780 + msgid "invalid third arg to __builtin_prefetch; using zero" + msgstr "" + + #. ??? We used to try and build up a call to the out of line function, + #. guessing about what registers needed saving etc. This became much + #. harder with __builtin_va_start, since we don't have a tree for a + #. call to __builtin_saveregs to fall back on. There was exactly one + #. port (i860) that used this code, and I'm unconvinced it could actually + #. handle the general case. So we no longer try to handle anything + #. weird and make the backend absorb the evil. + #: builtins.c:2759 + #, fuzzy + msgid "__builtin_saveregs not supported by this target" + msgstr "óõìâïëéêïß óýíäåóìïé äåí õðïóôçñßæïíôáé óôï óýóôçìá áõôü" + + #: builtins.c:2801 + msgid "argument of `__builtin_args_info' must be constant" + msgstr "" + + #: builtins.c:2807 + msgid "argument of `__builtin_args_info' out of range" + msgstr "" + + #: builtins.c:2813 + #, fuzzy + msgid "missing argument in `__builtin_args_info'" + msgstr "Ëåßðåé ðáñÜìåôñïò ãéá `%s'" + + #: builtins.c:2845 + msgid "`va_start' used in function with fixed args" + msgstr "" + + #: builtins.c:2864 + msgid "second parameter of `va_start' not last named argument" + msgstr "" + + #. Evidently an out of date version of ; can't validate + #. va_start's second argument, but can still work as intended. + #: builtins.c:2869 + msgid "`__builtin_next_arg' called without an argument" + msgstr "" + + #: builtins.c:2973 + #, fuzzy + msgid "too many arguments to function `va_start'" + msgstr "ðÜñá ðïëëÜ ïñßóìáôá" + + #: builtins.c:3057 + msgid "first argument to `va_arg' not of type `va_list'" + msgstr "" + + #: builtins.c:3085 + #, c-format + msgid "`%s' is promoted to `%s' when passed through `...'" + msgstr "" + + #: builtins.c:3089 + #, c-format + msgid "(so you should pass `%s' not `%s' to `va_arg')" + msgstr "" + + #: builtins.c:3213 + msgid "invalid arg to `__builtin_frame_address'" + msgstr "" + + #: builtins.c:3215 + msgid "invalid arg to `__builtin_return_address'" + msgstr "" + + #: builtins.c:3229 + msgid "unsupported arg to `__builtin_frame_address'" + msgstr "" + + #: builtins.c:3231 + msgid "unsupported arg to `__builtin_return_address'" + msgstr "" + + #: builtins.c:3399 + msgid "second arg to `__builtin_expect' must be a constant" + msgstr "" + + #: builtins.c:3868 + msgid "__builtin_longjmp second argument must be 1" + msgstr "" + + #: builtins.c:3882 + #, fuzzy + msgid "__builtin_trap not supported by this target" + msgstr "óõìâïëéêïß óýíäåóìïé äåí õðïóôçñßæïíôáé óôï óýóôçìá áõôü" + + #. just do library call, if unknown builtin + #: builtins.c:3947 c-common.c:3685 + #, c-format + msgid "built-in function `%s' not currently supported" + msgstr "" + + #: c-common.c:550 + #, c-format + msgid "`%s' is not defined outside of function scope" + msgstr "" + + #: c-common.c:590 + msgid "concatenation of string literals with __FUNCTION__ is deprecated. This feature will be removed in future" + msgstr "" + + #: c-common.c:659 + #, c-format + msgid "string length `%d' is greater than the length `%d' ISO C%d compilers are required to support" + msgstr "" + + #: c-common.c:707 ch/decl.c:4100 + msgid "overflow in constant expression" + msgstr "" + + #: c-common.c:728 + msgid "integer overflow in expression" + msgstr "" + + #: c-common.c:737 + #, fuzzy + msgid "floating point overflow in expression" + msgstr "Åîáßñåóç êéíçôÞò õðïäéáóôïëÞò" + + #. This detects cases like converting -129 or 256 to unsigned char. + #: c-common.c:758 + msgid "large integer implicitly truncated to unsigned type" + msgstr "" + + #: c-common.c:760 + msgid "negative integer implicitly converted to unsigned type" + msgstr "" + + #: c-common.c:807 + msgid "overflow in implicit constant conversion" + msgstr "" + + #: c-common.c:955 + #, c-format + msgid "operation on `%s' may be undefined" + msgstr "" + + #: c-common.c:1246 + msgid "expression statement has incomplete type" + msgstr "" + + #: c-common.c:1279 ch/actions.c:1027 + msgid "case label does not reduce to an integer constant" + msgstr "" + + #: c-common.c:1577 + #, fuzzy + msgid "invalid truth-value expression" + msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç" + + #: c-common.c:1628 + #, fuzzy, c-format + msgid "invalid operands to binary %s" + msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'" + + #: c-common.c:1863 c-common.c:1872 + msgid "comparison is always false due to limited range of data type" + msgstr "" + + #: c-common.c:1865 c-common.c:1874 + msgid "comparison is always true due to limited range of data type" + msgstr "" + + #: c-common.c:1940 + msgid "comparison of unsigned expression >= 0 is always true" + msgstr "" + + #: c-common.c:1949 + msgid "comparison of unsigned expression < 0 is always false" + msgstr "" + + #: c-common.c:2000 f/com.c:14814 + msgid "struct type value used where scalar is required" + msgstr "" + + #: c-common.c:2004 f/com.c:14818 + msgid "union type value used where scalar is required" + msgstr "" + + #: c-common.c:2008 f/com.c:14822 + msgid "array type value used where scalar is required" + msgstr "" + + #: c-common.c:2123 f/com.c:14948 + msgid "suggest parentheses around assignment used as truth value" + msgstr "" + + #: c-common.c:2167 c-common.c:2199 + #, fuzzy + msgid "invalid use of `restrict'" + msgstr "ìç Ýãêõñïò áñéèìüò áðü ãñáììÝò" + + #: c-common.c:2315 + msgid "__alignof__ applied to an incomplete type" + msgstr "" + + #: c-common.c:2341 + msgid "`__alignof' applied to a bit-field" + msgstr "" + + #: c-common.c:2783 + #, fuzzy, c-format + msgid "cannot disable built-in function `%s'" + msgstr "áäõíáìßá åêôÝëåóçò ioctl óôï `%s'" + + #: c-common.c:3064 c-typeck.c:1774 + #, fuzzy, c-format + msgid "too few arguments to function `%s'" + msgstr "Ðñïåéäïðïßçóç: Ðïëý ëßãá ïñßóìáôá óôï åóùäïìçìÝíï `%s'" + + #: c-common.c:3070 c-typeck.c:1627 + #, fuzzy, c-format + msgid "too many arguments to function `%s'" + msgstr "ðÜñá ðïëëÜ ïñßóìáôá" + + #: c-common.c:3258 + msgid "pointers are not permitted as case values" + msgstr "" + + #: c-common.c:3264 + msgid "ISO C++ forbids range expressions in switch statements" + msgstr "" + + #: c-common.c:3266 + msgid "ISO C forbids range expressions in switch statements" + msgstr "" + + #: c-common.c:3296 + #, fuzzy + msgid "empty range specified" + msgstr "ìç ïñéóìÝíï" + + #: c-common.c:3347 + msgid "duplicate (or overlapping) case value" + msgstr "" + + #: c-common.c:3349 + #, fuzzy + msgid "this is the first entry overlapping that value" + msgstr "áõôüò åßíáé ï ðñþôïò ïñéóìüò" + + #: c-common.c:3353 ch/actions.c:1125 + #, fuzzy + msgid "duplicate case value" + msgstr "äéðëüò áñéèìüò ìçíýìáôïò" + + #: c-common.c:3354 + msgid "previously used here" + msgstr "" + + #: c-common.c:3358 + msgid "multiple default labels in one switch" + msgstr "" + + #: c-common.c:3359 + #, fuzzy + msgid "this is the first default label" + msgstr "áõôüò åßíáé ï ðñþôïò ïñéóìüò" + + #: c-common.c:3387 + msgid "ISO C++ forbids taking the address of a label" + msgstr "" + + #: c-common.c:3389 + msgid "ISO C forbids taking the address of a label" + msgstr "" + + #: c-common.c:4023 + msgid "-Wformat-y2k ignored without -Wformat" + msgstr "" + + #: c-common.c:4025 + msgid "-Wformat-extra-args ignored without -Wformat" + msgstr "" + + #: c-common.c:4027 + msgid "-Wformat-nonliteral ignored without -Wformat" + msgstr "" + + #: c-common.c:4029 + msgid "-Wformat-security ignored without -Wformat" + msgstr "" + + #: c-common.c:4031 + msgid "-Wmissing-format-attribute ignored without -Wformat" + msgstr "" + + #: c-common.c:4122 + #, c-format + msgid "declaration of `%s' shadows %s" + msgstr "" + + #: c-convert.c:78 c-typeck.c:1031 c-typeck.c:4139 ch/convert.c:1164 + #: cp/typeck.c:1728 cp/typeck.c:6288 + msgid "void value not ignored as it ought to be" + msgstr "" + + #: c-convert.c:110 java/typeck.c:150 + msgid "conversion to non-scalar type requested" + msgstr "" + + #: c-decl.c:470 + msgid "-traditional is deprecated and may be removed" + msgstr "" + + #: c-decl.c:560 + #, fuzzy, c-format + msgid "unknown C standard `%s'" + msgstr "Üãíùóôï óåô `%s'" + + #: c-decl.c:842 + #, c-format + msgid "array `%s' assumed to have one element" + msgstr "" + + #: c-decl.c:1018 + #, c-format + msgid "`struct %s' incomplete in scope ending here" + msgstr "" + + #: c-decl.c:1021 + #, c-format + msgid "`union %s' incomplete in scope ending here" + msgstr "" + + #: c-decl.c:1024 + #, c-format + msgid "`enum %s' incomplete in scope ending here" + msgstr "" + + #: c-decl.c:1138 c-decl.c:1279 ch/decl.c:2920 java/decl.c:1373 + #, c-format + msgid "label `%s' used but not defined" + msgstr "" + + #: c-decl.c:1144 c-decl.c:1286 ch/decl.c:2926 java/decl.c:1379 + #, c-format + msgid "label `%s' defined but not used" + msgstr "" + + #: c-decl.c:1403 cp/decl.c:3138 + #, c-format + msgid "function `%s' redeclared as inline" + msgstr "" + + #: c-decl.c:1405 cp/decl.c:3140 + #, c-format + msgid "previous declaration of function `%s' with attribute noinline" + msgstr "" + + #: c-decl.c:1412 cp/decl.c:3147 + #, c-format + msgid "function `%s' redeclared with attribute noinline" + msgstr "" + + #: c-decl.c:1414 cp/decl.c:3149 + #, c-format + msgid "previous declaration of function `%s' was inline" + msgstr "" + + #: c-decl.c:1443 c-decl.c:1496 + #, c-format + msgid "shadowing built-in function `%s'" + msgstr "" + + #: c-decl.c:1445 + #, c-format + msgid "shadowing library function `%s'" + msgstr "" + + #: c-decl.c:1451 + #, c-format + msgid "library function `%s' declared as non-function" + msgstr "" + + #: c-decl.c:1455 c-decl.c:1458 + #, c-format + msgid "built-in function `%s' declared as non-function" + msgstr "" + + #: c-decl.c:1462 objc/objc-act.c:2334 objc/objc-act.c:6036 + #, c-format + msgid "`%s' redeclared as different kind of symbol" + msgstr "" + + #: c-decl.c:1463 c-decl.c:1645 c-decl.c:1794 objc/objc-act.c:2336 + #: objc/objc-act.c:6038 objc/objc-act.c:6093 + #, c-format + msgid "previous declaration of `%s'" + msgstr "" + + #. If types don't match for a built-in, throw away the built-in. + #: c-decl.c:1549 + #, c-format + msgid "conflicting types for built-in function `%s'" + msgstr "" + + #: c-decl.c:1592 c-decl.c:1611 + #, fuzzy, c-format + msgid "conflicting types for `%s'" + msgstr "ìç Ýãêõñï åßäïò áëöáñéèìçôéêïý `%s'" + + #: c-decl.c:1634 + msgid "a parameter list with an ellipsis can't match an empty parameter name list declaration" + msgstr "" + + #: c-decl.c:1640 + msgid "an argument type that has a default promotion can't match an empty parameter name list declaration" + msgstr "" + + #: c-decl.c:1655 c-decl.c:1677 + #, fuzzy, c-format + msgid "redefinition of `%s'" + msgstr "êáíÝíáò ïñéóìüò ôïõ `UNDEFINED'" + + #: c-decl.c:1658 + #, fuzzy, c-format + msgid "redeclaration of `%s'" + msgstr "äçìéïõñãßá áñ÷åßïõ `%s'\n" + + #: c-decl.c:1661 + #, c-format + msgid "conflicting declarations of `%s'" + msgstr "" + + #: c-decl.c:1670 c-decl.c:1682 + #, fuzzy, c-format + msgid "`%s' previously defined here" + msgstr "Äåí õðÜñ÷åé ðñïçãïýìåíç êáíïíéêÞ Ýêöñáóç" + + #: c-decl.c:1671 c-decl.c:1683 + #, fuzzy, c-format + msgid "`%s' previously declared here" + msgstr "Äåí õðÜñ÷åé ðñïçãïýìåíç êáíïíéêÞ Ýêöñáóç" + + #: c-decl.c:1704 + #, c-format + msgid "prototype for `%s' follows" + msgstr "" + + #: c-decl.c:1705 c-decl.c:1713 c-decl.c:1729 + msgid "non-prototype definition here" + msgstr "" + + #: c-decl.c:1712 + #, c-format + msgid "prototype for `%s' follows and number of arguments doesn't match" + msgstr "" + + #: c-decl.c:1727 + #, c-format + msgid "prototype for `%s' follows and argument %d doesn't match" + msgstr "" + + #: c-decl.c:1745 + #, c-format + msgid "`%s' declared inline after being called" + msgstr "" + + #: c-decl.c:1751 + #, fuzzy, c-format + msgid "`%s' declared inline after its definition" + msgstr "%s: äéðëüò ïñéóìüò Ýêäïóçò êáôçãïñßáò" + + #: c-decl.c:1758 + #, c-format + msgid "static declaration for `%s' follows non-static" + msgstr "" + + #: c-decl.c:1766 + #, c-format + msgid "non-static declaration for `%s' follows static" + msgstr "" + + #: c-decl.c:1773 + #, c-format + msgid "const declaration for `%s' follows non-const" + msgstr "" + + #: c-decl.c:1780 + #, c-format + msgid "type qualifiers for `%s' conflict with previous decl" + msgstr "" + + #: c-decl.c:1793 + #, c-format + msgid "redundant redeclaration of `%s' in same scope" + msgstr "" + + #: c-decl.c:2097 java/decl.c:1072 + #, c-format + msgid "declaration of `%s' shadows a parameter" + msgstr "" + + #: c-decl.c:2100 java/decl.c:1075 + #, c-format + msgid "declaration of `%s' shadows a symbol from the parameter list" + msgstr "" + + #: c-decl.c:2121 cp/decl.c:4220 + #, fuzzy + msgid "a parameter" + msgstr "êáêü üñéóìá" + + #: c-decl.c:2123 cp/decl.c:4237 + msgid "a previous local" + msgstr "" + + #. XXX shadow warnings in outer-more namespaces + #: c-decl.c:2127 cp/decl.c:4241 + msgid "a global declaration" + msgstr "" + + #: c-decl.c:2171 + #, c-format + msgid "nested extern declaration of `%s'" + msgstr "" + + #: c-decl.c:2191 java/decl.c:1025 + #, c-format + msgid "`%s' used prior to declaration" + msgstr "" + + #: c-decl.c:2206 c-decl.c:2421 + #, c-format + msgid "`%s' was declared implicitly `extern' and later `static'" + msgstr "" + + #: c-decl.c:2316 cp/decl.c:4079 + msgid "type mismatch with previous external decl" + msgstr "" + + #: c-decl.c:2317 + #, c-format + msgid "previous external decl of `%s'" + msgstr "" + + #: c-decl.c:2330 + msgid "type mismatch with previous implicit declaration" + msgstr "óöÜëìá ôáéñéÜóìáôïò ôýðïõ ìå ðñïçãïýìåíç áõôïíüçôç äéáêýñçîç" + + #: c-decl.c:2332 + #, c-format + msgid "previous implicit declaration of `%s'" + msgstr "ðñïçãïýìåíç áõôïíüçôç äéáêýñçîç ôïõ `%s'" + + #: c-decl.c:2349 + #, c-format + msgid "type of external `%s' is not global" + msgstr "" + + #: c-decl.c:2400 + #, c-format + msgid "`%s' was previously implicitly declared to return `int'" + msgstr "" + + #: c-decl.c:2425 + #, c-format + msgid "`%s' was declared `extern' and later `static'" + msgstr "" + + #: c-decl.c:2449 + #, c-format + msgid "extern declaration of `%s' doesn't match global one" + msgstr "" + + #: c-decl.c:2491 + #, c-format + msgid "`%s' locally external but globally static" + msgstr "" + + #: c-decl.c:2613 + #, c-format + msgid "function `%s' was previously declared within a block" + msgstr "" + + #: c-decl.c:2633 c-decl.c:2635 + #, c-format + msgid "implicit declaration of function `%s'" + msgstr "áõôïíüçôç äéáêýñçîç ôçò óõíÜñôçóçò `%s'" + + #: c-decl.c:2723 + #, c-format + msgid "label %s referenced outside of any function" + msgstr "" + + #: c-decl.c:2780 + #, fuzzy, c-format + msgid "duplicate label declaration `%s'" + msgstr "äéðëü üíïìá ÷áñáêôÞñá `%s'" + + #: c-decl.c:2783 + #, fuzzy + msgid "this is a previous declaration" + msgstr "áõôüò åßíáé ï ðñþôïò ïñéóìüò" + + #: c-decl.c:3291 + msgid "unnamed struct/union that defines no instances" + msgstr "" + + #: c-decl.c:3310 + msgid "useless keyword or type name in empty declaration" + msgstr "" + + #: c-decl.c:3317 + msgid "two types specified in one empty declaration" + msgstr "" + + #: c-decl.c:3322 c-parse.y:725 c-parse.y:727 objc-parse.y:761 objc-parse.y:763 + #: objc-parse.y:2987 parse.y:728 parse.y:1808 + #, fuzzy + msgid "empty declaration" + msgstr "êåíü áëöáñéèìçôéêü" + + #: c-decl.c:3352 + msgid "ISO C89 does not support `static' or type qualifiers in parameter array declarators" + msgstr "" + + #: c-decl.c:3354 + msgid "ISO C89 does not support `[*]' array declarators" + msgstr "" + + #: c-decl.c:3357 + msgid "GCC does not yet properly implement `[*]' array declarators" + msgstr "" + + #: c-decl.c:3376 + msgid "static or type qualifiers in abstract declarator" + msgstr "" + + #: c-decl.c:3450 + #, c-format + msgid "`%s' is usually a function" + msgstr "" + + #: c-decl.c:3464 + #, c-format + msgid "typedef `%s' is initialized" + msgstr "" + + #: c-decl.c:3471 + #, c-format + msgid "function `%s' is initialized like a variable" + msgstr "" + + #. DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE. + #: c-decl.c:3478 + #, c-format + msgid "parameter `%s' is initialized" + msgstr "" + + #: c-decl.c:3498 c-typeck.c:4907 + msgid "variable-sized object may not be initialized" + msgstr "" + + #: c-decl.c:3504 + #, c-format + msgid "variable `%s' has initializer but incomplete type" + msgstr "" + + #: c-decl.c:3510 + #, c-format + msgid "elements of array `%s' have incomplete type" + msgstr "" + + #: c-decl.c:3523 + #, c-format + msgid "declaration of `%s' has `extern' and is initialized" + msgstr "" + + #: c-decl.c:3558 c-decl.c:6198 cp/decl.c:7264 cp/decl.c:13533 + #, c-format + msgid "inline function `%s' given attribute noinline" + msgstr "" + + #: c-decl.c:3639 + #, c-format + msgid "initializer fails to determine size of `%s'" + msgstr "" + + #: c-decl.c:3644 + #, fuzzy, c-format + msgid "array size missing in `%s'" + msgstr "óöÜëìá êáôÜ ôï êëåßóéìï ôçò åéóüäïõ `%s'" + + #: c-decl.c:3660 + #, c-format + msgid "zero or negative size array `%s'" + msgstr "" + + #: c-decl.c:3688 ch/decl.c:4133 + #, fuzzy, c-format + msgid "storage size of `%s' isn't known" + msgstr "Ôï üíïìá `%s' åßíáé Üãíùóôï\n" + + #: c-decl.c:3698 + #, c-format + msgid "storage size of `%s' isn't constant" + msgstr "" + + #: c-decl.c:3757 + #, c-format + msgid "ignoring asm-specifier for non-static local variable `%s'" + msgstr "" + + #: c-decl.c:3832 + #, c-format + msgid "ISO C forbids parameter `%s' shadowing typedef" + msgstr "" + + #: c-decl.c:4136 cp/decl.c:10069 + msgid "`long long long' is too long for GCC" + msgstr "" + + #: c-decl.c:4141 + msgid "ISO C89 does not support `long long'" + msgstr "" + + #: c-decl.c:4146 cp/decl.c:10074 + #, fuzzy, c-format + msgid "duplicate `%s'" + msgstr "äéðëü êëåéäß" + + #: c-decl.c:4152 cp/decl.c:10098 + #, c-format + msgid "two or more data types in declaration of `%s'" + msgstr "" + + #: c-decl.c:4167 cp/decl.c:10103 + #, c-format + msgid "`%s' fails to be a typedef or built in type" + msgstr "" + + #: c-decl.c:4206 + #, c-format + msgid "type defaults to `int' in declaration of `%s'" + msgstr "" + + #: c-decl.c:4235 + #, c-format + msgid "both long and short specified for `%s'" + msgstr "" + + #: c-decl.c:4239 cp/decl.c:10217 + #, c-format + msgid "long or short specified with char for `%s'" + msgstr "" + + #: c-decl.c:4246 cp/decl.c:10221 + #, c-format + msgid "long or short specified with floating type for `%s'" + msgstr "" + + #: c-decl.c:4249 + msgid "the only valid combination is `long double'" + msgstr "" + + #: c-decl.c:4255 + #, fuzzy, c-format + msgid "both signed and unsigned specified for `%s'" + msgstr "ìç Ýãêõñïò äçëùôÞò ðåäßïõ: `%s'" + + #: c-decl.c:4257 cp/decl.c:10210 + #, c-format + msgid "long, short, signed or unsigned invalid for `%s'" + msgstr "" + + #: c-decl.c:4263 cp/decl.c:10230 + #, c-format + msgid "long, short, signed or unsigned used invalidly for `%s'" + msgstr "" + + #: c-decl.c:4282 cp/decl.c:10251 + #, fuzzy, c-format + msgid "complex invalid for `%s'" + msgstr "Ìç Ýãêõñç ðñïôåñáéüôçôá `%s'" + + #: c-decl.c:4327 + msgid "ISO C89 does not support complex types" + msgstr "" + + #: c-decl.c:4339 + msgid "ISO C does not support plain `complex' meaning `double complex'" + msgstr "" + + #: c-decl.c:4345 c-decl.c:4357 + msgid "ISO C does not support complex integer types" + msgstr "" + + #: c-decl.c:4372 c-decl.c:4811 cp/decl.c:10853 + #, fuzzy + msgid "duplicate `const'" + msgstr "äéðëü êëåéäß" + + #: c-decl.c:4374 c-decl.c:4815 cp/decl.c:10857 + #, fuzzy + msgid "duplicate `restrict'" + msgstr "äéðëü êëåéäß" + + #: c-decl.c:4376 c-decl.c:4813 cp/decl.c:10855 + #, fuzzy + msgid "duplicate `volatile'" + msgstr "äéðëü êëåéäß" + + #: c-decl.c:4398 cp/decl.c:10402 + #, c-format + msgid "multiple storage classes in declaration of `%s'" + msgstr "" + + #: c-decl.c:4407 + msgid "function definition declared `auto'" + msgstr "" + + #: c-decl.c:4409 + msgid "function definition declared `register'" + msgstr "" + + #: c-decl.c:4411 + msgid "function definition declared `typedef'" + msgstr "" + + #: c-decl.c:4424 + #, c-format + msgid "storage class specified for structure field `%s'" + msgstr "" + + #: c-decl.c:4428 cp/decl.c:10449 + #, c-format + msgid "storage class specified for parameter `%s'" + msgstr "" + + #: c-decl.c:4431 cp/decl.c:10451 + msgid "storage class specified for typename" + msgstr "" + + #: c-decl.c:4443 cp/decl.c:10465 + #, c-format + msgid "`%s' initialized and declared `extern'" + msgstr "" + + #: c-decl.c:4445 cp/decl.c:10468 + #, c-format + msgid "`%s' has both `extern' and initializer" + msgstr "" + + #: c-decl.c:4449 cp/decl.c:10472 + #, c-format + msgid "nested function `%s' declared `extern'" + msgstr "" + + #: c-decl.c:4452 cp/decl.c:10476 + #, c-format + msgid "top-level declaration of `%s' specifies `auto'" + msgstr "" + + #. Only the innermost declarator (making a parameter be of + #. array type which is converted to pointer type) + #. may have static or type qualifiers. + #: c-decl.c:4487 c-decl.c:4676 + msgid "static or type qualifiers in non-parameter array declarator" + msgstr "" + + #: c-decl.c:4531 + #, c-format + msgid "declaration of `%s' as array of voids" + msgstr "" + + #: c-decl.c:4537 + #, c-format + msgid "declaration of `%s' as array of functions" + msgstr "" + + #: c-decl.c:4558 + #, c-format + msgid "size of array `%s' has non-integer type" + msgstr "" + + #: c-decl.c:4563 + #, c-format + msgid "ISO C forbids zero-size array `%s'" + msgstr "" + + #: c-decl.c:4570 + #, c-format + msgid "size of array `%s' is negative" + msgstr "" + + #: c-decl.c:4583 + #, c-format + msgid "ISO C89 forbids array `%s' whose size can't be evaluated" + msgstr "" + + #: c-decl.c:4586 + #, c-format + msgid "ISO C89 forbids variable-size array `%s'" + msgstr "" + + #: c-decl.c:4616 c-decl.c:4837 cp/decl.c:11074 + #, fuzzy, c-format + msgid "size of array `%s' is too large" + msgstr "Ï êáôÜëïãïò `%s' äåí åßíáé ðñïóéôüò." + + #: c-decl.c:4633 + msgid "ISO C89 does not support flexible array members" + msgstr "" + + #: c-decl.c:4643 + msgid "array type has incomplete element type" + msgstr "" + + #: c-decl.c:4650 c-decl.c:4887 + msgid "ISO C forbids const or volatile function types" + msgstr "" + + #: c-decl.c:4696 cp/decl.c:10613 + #, c-format + msgid "`%s' declared as function returning a function" + msgstr "" + + #: c-decl.c:4701 cp/decl.c:10618 + #, c-format + msgid "`%s' declared as function returning an array" + msgstr "" + + #: c-decl.c:4736 + msgid "ISO C forbids qualified void function return type" + msgstr "" + + #: c-decl.c:4740 + msgid "type qualifiers ignored on function return type" + msgstr "" + + #: c-decl.c:4769 c-decl.c:4852 c-decl.c:4976 c-decl.c:5070 + msgid "ISO C forbids qualified function types" + msgstr "" + + #: c-decl.c:4809 cp/decl.c:10849 + msgid "invalid type modifier within pointer declarator" + msgstr "" + + #: c-decl.c:4907 cp/decl.c:11357 + #, c-format + msgid "variable or field `%s' declared void" + msgstr "" + + #: c-decl.c:4940 + msgid "attributes in parameter array declarator ignored" + msgstr "" + + #: c-decl.c:4965 + msgid "invalid type modifier within array declarator" + msgstr "" + + #: c-decl.c:5014 + #, c-format + msgid "field `%s' declared as a function" + msgstr "" + + #: c-decl.c:5020 + #, c-format + msgid "field `%s' has incomplete type" + msgstr "" + + #: c-decl.c:5052 c-decl.c:5054 c-decl.c:5061 + #, fuzzy, c-format + msgid "invalid storage class for function `%s'" + msgstr "ìç Ýãêõñç ôÜîç ÷áñáêôÞñùí `%s'" + + #: c-decl.c:5076 + msgid "`noreturn' function returns non-void value" + msgstr "" + + #: c-decl.c:5088 + #, fuzzy + msgid "cannot inline function `main'" + msgstr "äåí åßíáé äõíáôü íá äçìéïõñãçèåß ôï áñ÷åßï fifo `%s'" + + #: c-decl.c:5141 + #, c-format + msgid "variable `%s' declared `inline'" + msgstr "" + + #: c-decl.c:5214 c-decl.c:6250 + msgid "function declaration isn't a prototype" + msgstr "" + + #: c-decl.c:5220 + msgid "parameter names (without types) in function declaration" + msgstr "" + + #: c-decl.c:5252 c-decl.c:6641 + #, c-format + msgid "parameter `%s' has incomplete type" + msgstr "" + + #: c-decl.c:5255 + #, fuzzy + msgid "parameter has incomplete type" + msgstr "ìç ðëÞñçò åããñáöÞ" + + #: c-decl.c:5276 + #, c-format + msgid "parameter `%s' points to incomplete type" + msgstr "" + + #: c-decl.c:5279 + msgid "parameter points to incomplete type" + msgstr "" + + #: c-decl.c:5344 + #, c-format + msgid "parameter `%s' has just a forward declaration" + msgstr "" + + #: c-decl.c:5385 + msgid "`void' in parameter list must be the entire list" + msgstr "" + + #: c-decl.c:5416 + #, c-format + msgid "`struct %s' declared inside parameter list" + msgstr "" + + #: c-decl.c:5419 + #, c-format + msgid "`union %s' declared inside parameter list" + msgstr "" + + #: c-decl.c:5422 + #, c-format + msgid "`enum %s' declared inside parameter list" + msgstr "" + + #: c-decl.c:5429 + msgid "anonymous struct declared inside parameter list" + msgstr "" + + #: c-decl.c:5431 + msgid "anonymous union declared inside parameter list" + msgstr "" + + #: c-decl.c:5433 + msgid "anonymous enum declared inside parameter list" + msgstr "" + + #: c-decl.c:5437 + msgid "its scope is only this definition or declaration, which is probably not what you want" + msgstr "" + + #: c-decl.c:5516 + #, fuzzy, c-format + msgid "redefinition of `union %s'" + msgstr "Ïé ïñéóìïß ðçãÞ âñßóêïíôáé óôï ÁÑ×ÅÉÏ" + + #: c-decl.c:5519 + #, c-format + msgid "redefinition of `struct %s'" + msgstr "" + + #: c-decl.c:5558 + msgid "unnamed fields of type other than struct or union are not allowed" + msgstr "" + + #: c-decl.c:5599 c-decl.c:5602 + #, fuzzy, c-format + msgid "%s defined inside parms" + msgstr "óõíå÷ßæåôáé óôï ôìÞìá" + + #: c-decl.c:5600 c-decl.c:5603 c-decl.c:5614 + msgid "union" + msgstr "" + + #: c-decl.c:5600 c-decl.c:5603 + msgid "structure" + msgstr "" + + # src/request.c:37 + #: c-decl.c:5613 + #, fuzzy, c-format + msgid "%s has no %s" + msgstr "%s óå %s" + + #: c-decl.c:5614 + msgid "struct" + msgstr "" + + #: c-decl.c:5615 + msgid "named members" + msgstr "" + + #: c-decl.c:5615 + msgid "members" + msgstr "" + + #: c-decl.c:5654 + #, fuzzy, c-format + msgid "nested redefinition of `%s'" + msgstr "áäõíáìßá áíïßãìáôïò áñ÷åßïõ ïñéóìïý locale `%s'" + + #: c-decl.c:5667 + #, c-format + msgid "bit-field `%s' width not an integer constant" + msgstr "" + + #: c-decl.c:5678 + #, c-format + msgid "bit-field `%s' has invalid type" + msgstr "" + + #: c-decl.c:5690 + #, c-format + msgid "bit-field `%s' type invalid in ISO C" + msgstr "" + + #: c-decl.c:5702 + #, fuzzy, c-format + msgid "negative width in bit-field `%s'" + msgstr "Áñíçôéêü ðëÜôïò óôçí áðïôßìçóç" + + #: c-decl.c:5704 + #, c-format + msgid "width of `%s' exceeds its type" + msgstr "" + + #: c-decl.c:5706 + #, c-format + msgid "zero width for bit-field `%s'" + msgstr "" + + #: c-decl.c:5720 + #, fuzzy, c-format + msgid "`%s' is narrower than values of its type" + msgstr "%s' äåí åßíáé éó÷ýùí èåôéêüò áêÝñáéïò." + + #: c-decl.c:5765 + msgid "flexible array member in union" + msgstr "" + + #: c-decl.c:5767 + msgid "flexible array member not at end of struct" + msgstr "" + + #: c-decl.c:5769 + msgid "flexible array member in otherwise empty struct" + msgstr "" + + #: c-decl.c:5794 ch/typeck.c:3060 + #, fuzzy, c-format + msgid "duplicate member `%s'" + msgstr "äéðëü üíïìá ÷áñáêôÞñá `%s'" + + #: c-decl.c:5838 + msgid "union cannot be made transparent" + msgstr "" + + #. This enum is a named one that has been declared already. + #: c-decl.c:5932 + #, c-format + msgid "redeclaration of `enum %s'" + msgstr "" + + #: c-decl.c:5966 + #, fuzzy + msgid "enum defined inside parms" + msgstr "Ìç ïñéóìÝíï üíïìá %s" + + #: c-decl.c:5999 + msgid "enumeration values exceed range of largest integer" + msgstr "" + + #: c-decl.c:6108 ch/decl.c:4437 + #, c-format + msgid "enumerator value for `%s' not integer constant" + msgstr "" + + #: c-decl.c:6121 ch/decl.c:4449 + msgid "overflow in enumeration values" + msgstr "" + + #: c-decl.c:6126 + msgid "ISO C restricts enumerator values to range of `int'" + msgstr "" + + #: c-decl.c:6204 + msgid "return type is an incomplete type" + msgstr "" + + #: c-decl.c:6212 + msgid "return type defaults to `int'" + msgstr "ï åðéóôñåöüìåíïò ôýðïò ðñïêáèïñßæåôáé óå `int'" + + #: c-decl.c:6259 + #, c-format + msgid "no previous prototype for `%s'" + msgstr "" + + #: c-decl.c:6266 + #, c-format + msgid "`%s' was used with no prototype before its definition" + msgstr "" + + #: c-decl.c:6272 + #, c-format + msgid "no previous declaration for `%s'" + msgstr "" + + #: c-decl.c:6279 + #, fuzzy, c-format + msgid "`%s' was used with no declaration before its definition" + msgstr "áõôÞ åßíáé ç èÝóç ôïõ ðñþôïõ ïñéóìïý" + + #: c-decl.c:6303 c-decl.c:6884 + #, c-format + msgid "return type of `%s' is not `int'" + msgstr "" + + #: c-decl.c:6319 + #, c-format + msgid "first argument of `%s' should be `int'" + msgstr "" + + #: c-decl.c:6328 + #, c-format + msgid "second argument of `%s' should be `char **'" + msgstr "" + + #: c-decl.c:6337 + #, c-format + msgid "third argument of `%s' should probably be `char **'" + msgstr "" + + #: c-decl.c:6346 + #, c-format + msgid "`%s' takes only zero or two arguments" + msgstr "" + + #: c-decl.c:6349 + #, c-format + msgid "`%s' is normally a non-static function" + msgstr "" + + #: c-decl.c:6459 + msgid "parm types given both in parmlist and separately" + msgstr "" + + #: c-decl.c:6480 + msgid "parameter name omitted" + msgstr "" + + #: c-decl.c:6484 c-decl.c:6586 + #, fuzzy, c-format + msgid "parameter `%s' declared void" + msgstr "ï ÷Üñôçò ÷áñáêôÞñùí `%s' ïñßóôçêå Þäç" + + #: c-decl.c:6560 + msgid "parameter name missing from parameter list" + msgstr "" + + #: c-decl.c:6579 + #, fuzzy, c-format + msgid "multiple parameters named `%s'" + msgstr "äéðëü üíïìá ÷áñáêôÞñá `%s'" + + #: c-decl.c:6610 c-decl.c:6612 + #, c-format + msgid "type of `%s' defaults to `int'" + msgstr "" + + #: c-decl.c:6648 + #, c-format + msgid "declaration for parameter `%s' but no such parameter" + msgstr "" + + #: c-decl.c:6696 + msgid "number of arguments doesn't match prototype" + msgstr "" + + #: c-decl.c:6726 + #, c-format + msgid "promoted argument `%s' doesn't match prototype" + msgstr "" + + #: c-decl.c:6740 + #, c-format + msgid "argument `%s' doesn't match prototype" + msgstr "" + + #: c-decl.c:7054 + msgid "this function may return with or without a value" + msgstr "" + + #: c-decl.c:7074 + #, c-format + msgid "size of return value of `%s' is %u bytes" + msgstr "" + + #: c-decl.c:7078 + #, fuzzy, c-format + msgid "size of return value of `%s' is larger than %d bytes" + msgstr "%s: ïé ôéìÝò ôïõ ðåäßïõ `%s' äåí ðñÝðåé íá åßíáé ìåãáëýôåñåò áðü %d" + + #. If we get here, declarations have been used in a for loop without + #. the C99 for loop scope. This doesn't make much sense, so don't + #. allow it. + #: c-decl.c:7133 + msgid "`for' loop initial declaration used outside C99 mode" + msgstr "" + + #: c-decl.c:7157 + #, c-format + msgid "`struct %s' declared in `for' loop initial declaration" + msgstr "" + + #: c-decl.c:7160 + #, c-format + msgid "`union %s' declared in `for' loop initial declaration" + msgstr "" + + #: c-decl.c:7163 + #, c-format + msgid "`enum %s' declared in `for' loop initial declaration" + msgstr "" + + #: c-decl.c:7171 + #, c-format + msgid "declaration of non-variable `%s' in `for' loop initial declaration" + msgstr "" + + #: c-decl.c:7173 + #, c-format + msgid "declaration of static variable `%s' in `for' loop initial declaration" + msgstr "" + + #: c-decl.c:7175 + #, c-format + msgid "declaration of `extern' variable `%s' in `for' loop initial declaration" + msgstr "" + + #: c-format.c:128 c-format.c:210 + msgid "format string arg not a string type" + msgstr "" + + #: c-format.c:143 + msgid "args to be formatted is not '...'" + msgstr "" + + #: c-format.c:152 + msgid "strftime formats cannot format arguments" + msgstr "" + + #: c-format.c:187 c-format.c:289 + msgid "format string has invalid operand number" + msgstr "" + + #: c-format.c:221 + msgid "function does not return string type" + msgstr "" + + #: c-format.c:252 + #, fuzzy + msgid "unrecognized format specifier" + msgstr "Üãíùóôï ðñüèåìá: %s" + + #: c-format.c:265 + #, c-format + msgid "`%s' is an unrecognized format function type" + msgstr "" + + #: c-format.c:299 + msgid "format string arg follows the args to be formatted" + msgstr "" + + #: c-format.c:620 + msgid "` ' flag" + msgstr "" + + #: c-format.c:620 + msgid "the ` ' printf flag" + msgstr "" + + #: c-format.c:621 c-format.c:692 + msgid "`+' flag" + msgstr "" + + #: c-format.c:621 + msgid "the `+' printf flag" + msgstr "" + + #: c-format.c:622 c-format.c:668 + msgid "`#' flag" + msgstr "" + + #: c-format.c:622 + msgid "the `#' printf flag" + msgstr "" + + #: c-format.c:623 c-format.c:666 + msgid "`0' flag" + msgstr "" + + #: c-format.c:623 + msgid "the `0' printf flag" + msgstr "" + + #: c-format.c:624 c-format.c:665 c-format.c:695 + msgid "`-' flag" + msgstr "" + + #: c-format.c:624 + msgid "the `-' printf flag" + msgstr "" + + #: c-format.c:625 c-format.c:649 + msgid "`'' flag" + msgstr "" + + #: c-format.c:625 + msgid "the `'' printf flag" + msgstr "" + + #: c-format.c:626 c-format.c:650 + msgid "`I' flag" + msgstr "" + + #: c-format.c:626 + msgid "the `I' printf flag" + msgstr "" + + #: c-format.c:627 c-format.c:647 c-format.c:669 c-format.c:696 c-format.c:1791 + msgid "field width" + msgstr "" + + #: c-format.c:627 + msgid "field width in printf format" + msgstr "" + + #: c-format.c:628 + msgid "precision" + msgstr "" + + #: c-format.c:628 + msgid "precision in printf format" + msgstr "" + + #: c-format.c:629 c-format.c:648 c-format.c:699 + msgid "length modifier" + msgstr "" + + #: c-format.c:629 + msgid "length modifier in printf format" + msgstr "" + + #: c-format.c:645 + msgid "assignment suppression" + msgstr "" + + #: c-format.c:645 + msgid "the assignment suppression scanf feature" + msgstr "" + + #: c-format.c:646 + msgid "`a' flag" + msgstr "" + + #: c-format.c:646 + msgid "the `a' scanf flag" + msgstr "" + + #: c-format.c:647 + msgid "field width in scanf format" + msgstr "" + + #: c-format.c:648 + msgid "length modifier in scanf format" + msgstr "" + + #: c-format.c:649 + msgid "the `'' scanf flag" + msgstr "" + + #: c-format.c:650 + msgid "the `I' scanf flag" + msgstr "" + + #: c-format.c:664 + msgid "`_' flag" + msgstr "" + + #: c-format.c:664 + msgid "the `_' strftime flag" + msgstr "" + + #: c-format.c:665 + msgid "the `-' strftime flag" + msgstr "" + + #: c-format.c:666 + msgid "the `0' strftime flag" + msgstr "" + + #: c-format.c:667 c-format.c:691 + msgid "`^' flag" + msgstr "" + + #: c-format.c:667 + msgid "the `^' strftime flag" + msgstr "" + + #: c-format.c:668 + msgid "the `#' strftime flag" + msgstr "" + + #: c-format.c:669 + msgid "field width in strftime format" + msgstr "" + + #: c-format.c:670 + msgid "`E' modifier" + msgstr "" + + #: c-format.c:670 + msgid "the `E' strftime modifier" + msgstr "" + + #: c-format.c:671 + msgid "`O' modifier" + msgstr "" + + #: c-format.c:671 + msgid "the `O' strftime modifier" + msgstr "" + + #: c-format.c:672 + msgid "the `O' modifier" + msgstr "" + + #: c-format.c:690 + #, fuzzy + msgid "fill character" + msgstr "Ìç Ýãêõñïò ÷áñáêôÞñáò ðáñáâïëÞò" + + #: c-format.c:690 + #, fuzzy + msgid "fill character in strfmon format" + msgstr "ìç Ýãêõñïò ÷áñáêôÞñáò óôï áñ÷åßï: " + + #: c-format.c:691 + msgid "the `^' strfmon flag" + msgstr "" + + #: c-format.c:692 + msgid "the `+' strfmon flag" + msgstr "" + + #: c-format.c:693 + msgid "`(' flag" + msgstr "" + + #: c-format.c:693 + msgid "the `(' strfmon flag" + msgstr "" + + #: c-format.c:694 + msgid "`!' flag" + msgstr "" + + #: c-format.c:694 + msgid "the `!' strfmon flag" + msgstr "" + + #: c-format.c:695 + msgid "the `-' strfmon flag" + msgstr "" + + #: c-format.c:696 + msgid "field width in strfmon format" + msgstr "" + + #: c-format.c:697 + msgid "left precision" + msgstr "" + + #: c-format.c:697 + msgid "left precision in strfmon format" + msgstr "" + + #: c-format.c:698 + #, fuzzy + msgid "right precision" + msgstr "ÅìöÜíéóç Ýêäïóçò ðñïãñÜììáôïò" + + #: c-format.c:698 + msgid "right precision in strfmon format" + msgstr "" + + #: c-format.c:699 + msgid "length modifier in strfmon format" + msgstr "" + + #: c-format.c:998 + #, c-format + msgid "function might be possible candidate for `%s' format attribute" + msgstr "" + + #: c-format.c:1122 c-format.c:1143 c-format.c:2201 + #, fuzzy + msgid "missing $ operand number in format" + msgstr "Ëåßðåé ï äåêáåîáäéêüò áñéèìüò óôïí ÷áñáêôÞñá äéáöõãÞò." + + #: c-format.c:1153 + #, c-format + msgid "%s does not support %%n$ operand number formats" + msgstr "" + + #: c-format.c:1160 + #, fuzzy + msgid "operand number out of range in format" + msgstr "Ï áñéèìüò óýíäåóìïõ åßíáé Ýîù áðü ôï üñéï" + + #: c-format.c:1183 + #, c-format + msgid "format argument %d used more than once in %s format" + msgstr "" + + #: c-format.c:1233 + #, c-format + msgid "format argument %d unused before used argument %d in $-style format" + msgstr "" + + #: c-format.c:1330 + msgid "format not a string literal, format string not checked" + msgstr "" + + #: c-format.c:1344 + msgid "format not a string literal and no format arguments" + msgstr "" + + #: c-format.c:1346 + msgid "format not a string literal, argument types not checked" + msgstr "" + + #: c-format.c:1359 + #, fuzzy + msgid "too many arguments for format" + msgstr "ðÜñá ðïëëÜ ïñßóìáôá" + + #: c-format.c:1362 + msgid "unused arguments in $-style format" + msgstr "" + + #: c-format.c:1365 + msgid "zero-length format string" + msgstr "" + + #: c-format.c:1368 + #, fuzzy + msgid "format is a wide character string" + msgstr "ëßóôá ìå üëá ôá ãíùóôÜ óýíïëá ÷áñáêôÞñùí" + + #: c-format.c:1371 + #, fuzzy + msgid "unterminated format string" + msgstr "ìç ôåñìáôéæüìåío áëöáñéèìçôéêü" + + #. FIXME: this warning should go away once Marc Espie's + #. __attribute__((nonnull)) patch is in. Instead, checking for + #. nonnull attributes should probably change this function to act + #. specially if info == NULL and add a res->number_null entry for + #. that case, or maybe add a function pointer to be called at + #. the end instead of hardcoding check_format_info_main. + #: c-format.c:1478 + #, fuzzy + msgid "null format string" + msgstr "Ç áëõóßäá ìïñöÞò äåí åßíáé Ýãêõñç: `%s'" + + #: c-format.c:1670 + msgid "embedded `\\0' in format" + msgstr "" + + #: c-format.c:1685 + #, c-format + msgid "spurious trailing `%%' in format" + msgstr "" + + #: c-format.c:1724 c-format.c:1961 + #, fuzzy, c-format + msgid "repeated %s in format" + msgstr "repeated leap second moment" + + #: c-format.c:1737 + msgid "missing fill character at end of strfmon format" + msgstr "" + + #: c-format.c:1757 c-format.c:1875 c-format.c:2155 c-format.c:2208 + #, fuzzy + msgid "too few arguments for format" + msgstr "ðïëý ëßãá ïñßóìáôá" + + #: c-format.c:1817 + #, fuzzy, c-format + msgid "zero width in %s format" + msgstr "óöÜëìá åããñáöÞò %s" + + #: c-format.c:1836 + #, c-format + msgid "empty left precision in %s format" + msgstr "" + + #: c-format.c:1890 + msgid "field precision" + msgstr "" + + #: c-format.c:1905 + #, c-format + msgid "empty precision in %s format" + msgstr "" + + #: c-format.c:1945 + #, c-format + msgid "%s does not support the `%s' %s length modifier" + msgstr "" + + #: c-format.c:1995 + msgid "conversion lacks type at end of format" + msgstr "" + + #: c-format.c:2006 + #, fuzzy, c-format + msgid "unknown conversion type character `%c' in format" + msgstr "Üãíùóôïò ÷áñáêôÞñáò `%s'" + + #: c-format.c:2009 + #, c-format + msgid "unknown conversion type character 0x%x in format" + msgstr "" + + #: c-format.c:2016 + #, c-format + msgid "%s does not support the `%%%c' %s format" + msgstr "" + + #: c-format.c:2032 + #, c-format + msgid "%s used with `%%%c' %s format" + msgstr "" + + #: c-format.c:2041 + #, fuzzy, c-format + msgid "%s does not support %s" + msgstr "áñ÷åßá fifo äåí õðïóôçñßæïíôáé" + + #: c-format.c:2050 + #, c-format + msgid "%s does not support %s with the `%%%c' %s format" + msgstr "" + + #: c-format.c:2083 + #, c-format + msgid "%s ignored with %s and `%%%c' %s format" + msgstr "" + + #: c-format.c:2087 + #, c-format + msgid "%s ignored with %s in %s format" + msgstr "" + + #: c-format.c:2093 + #, c-format + msgid "use of %s and %s together with `%%%c' %s format" + msgstr "" + + #: c-format.c:2097 + #, c-format + msgid "use of %s and %s together in %s format" + msgstr "" + + #: c-format.c:2116 + #, c-format + msgid "`%%%c' yields only last 2 digits of year in some locales" + msgstr "" + + #: c-format.c:2119 + #, c-format + msgid "`%%%c' yields only last 2 digits of year" + msgstr "" + + #. The end of the format string was reached. + #: c-format.c:2135 + #, c-format + msgid "no closing `]' for `%%[' format" + msgstr "" + + #: c-format.c:2148 + #, c-format + msgid "use of `%s' length modifier with `%c' type character" + msgstr "" + + #: c-format.c:2169 + #, c-format + msgid "%s does not support the `%%%s%c' %s format" + msgstr "" + + #: c-format.c:2184 + msgid "operand number specified with suppressed assignment" + msgstr "" + + #: c-format.c:2186 + msgid "operand number specified for format taking no argument" + msgstr "" + + #: c-format.c:2305 + #, c-format + msgid "writing through null pointer (arg %d)" + msgstr "" + + #: c-format.c:2314 + #, c-format + msgid "reading through null pointer (arg %d)" + msgstr "" + + #: c-format.c:2334 + #, c-format + msgid "writing into constant object (arg %d)" + msgstr "" + + #: c-format.c:2344 + #, c-format + msgid "extra type qualifiers in format argument (arg %d)" + msgstr "" + + #: c-format.c:2351 + #, c-format + msgid "format argument is not a pointer (arg %d)" + msgstr "" + + #: c-format.c:2353 + #, c-format + msgid "format argument is not a pointer to a pointer (arg %d)" + msgstr "" + + #: c-format.c:2424 + msgid "pointer" + msgstr "" + + #: c-format.c:2426 + #, fuzzy + msgid "different type" + msgstr "åßäïò ìïñöÞò" + + #: c-format.c:2447 + #, c-format + msgid "%s is not type %s (arg %d)" + msgstr "" + + #: c-format.c:2450 + #, c-format + msgid "%s format, %s arg (arg %d)" + msgstr "" + + #: c-lex.c:292 + msgid "badly nested C headers from preprocessor" + msgstr "" + + #: c-lex.c:342 + #, c-format + msgid "ignoring #pragma %s %s" + msgstr "" + + #: c-lex.c:344 + #, fuzzy, c-format + msgid "ignoring #pragma %s" + msgstr "áãíïïýíôáé üëá ôá ïñßóìáôá" + + #: c-lex.c:394 + #, c-format + msgid "universal-character-name '\\U%08x' not valid in identifier" + msgstr "" + + #: c-lex.c:640 + #, c-format + msgid "universal-character-name '\\u%04x' not valid in identifier" + msgstr "" + + #: c-lex.c:730 + msgid "both 'f' and 'l' suffixes on floating constant" + msgstr "" + + #: c-lex.c:757 + #, c-format + msgid "floating point number exceeds range of '%s'" + msgstr "" + + #: c-lex.c:787 + #, c-format + msgid "stray '%c' in program" + msgstr "" + + #: c-lex.c:789 + #, c-format + msgid "stray '\\%o' in program" + msgstr "" + + #: c-lex.c:887 + msgid "too many decimal points in floating constant" + msgstr "" + + #: c-lex.c:889 + msgid "decimal point in exponent - impossible!" + msgstr "" + + #. Possible future extension: silently ignore _ in numbers, + #. permitting cosmetic grouping - e.g. 0x8000_0000 == 0x80000000 + #. but somewhat easier to read. Ada has this? + #: c-lex.c:900 + msgid "underscore in number" + msgstr "" + + #: c-lex.c:962 + msgid "numeric constant with no digits" + msgstr "" + + #: c-lex.c:965 + msgid "numeric constant contains digits beyond the radix" + msgstr "" + + #: c-lex.c:976 + msgid "floating constant may not be in radix 16" + msgstr "" + + #: c-lex.c:979 + msgid "hexadecimal floating constant has no exponent" + msgstr "" + + #: c-lex.c:991 + msgid "floating constant exponent has no digits" + msgstr "" + + #: c-lex.c:1011 + msgid "more than one 'f' suffix on floating constant" + msgstr "" + + #: c-lex.c:1014 + msgid "traditional C rejects the 'f' suffix" + msgstr "" + + #: c-lex.c:1021 + msgid "more than one 'l' suffix on floating constant" + msgstr "" + + #: c-lex.c:1024 + msgid "traditional C rejects the 'l' suffix" + msgstr "" + + #: c-lex.c:1032 + msgid "more than one 'i' or 'j' suffix on floating constant" + msgstr "" + + #: c-lex.c:1034 c-lex.c:1128 + msgid "ISO C forbids imaginary numeric constants" + msgstr "" + + #: c-lex.c:1039 + #, fuzzy + msgid "invalid suffix on floating constant" + msgstr "Ç ðáñÜìåôñïò êéíçôÞò õðïäéáóôïëÞò äåí åßíáé Ýãêõñç: %s" + + #. We got an exception from parse_float() + #: c-lex.c:1056 + #, fuzzy + msgid "floating constant out of range" + msgstr "ó÷åôéêÞ èÝóç áñ÷åßïõ åßíáé åêôüò ïñßùí" + + #: c-lex.c:1068 + msgid "floating point number exceeds range of 'double'" + msgstr "" + + #: c-lex.c:1097 + msgid "two 'u' suffixes on integer constant" + msgstr "" + + #: c-lex.c:1100 + msgid "traditional C rejects the 'u' suffix" + msgstr "" + + #: c-lex.c:1111 + msgid "three 'l' suffixes on integer constant" + msgstr "" + + #: c-lex.c:1113 + #, fuzzy + msgid "'lul' is not a valid integer suffix" + msgstr "%s' äåí åßíáé éó÷ýùí èåôéêüò áêÝñáéïò." + + #: c-lex.c:1115 + msgid "'Ll' and 'lL' are not valid integer suffixes" + msgstr "" + + #: c-lex.c:1118 + msgid "ISO C89 forbids long long integer constants" + msgstr "" + + #: c-lex.c:1126 + msgid "more than one 'i' or 'j' suffix on integer constant" + msgstr "" + + #: c-lex.c:1133 + #, fuzzy + msgid "invalid suffix on integer constant" + msgstr "Ìç Ýãêõñç áêÝñáéá ðáñÜìåôñïò `%s'" + + #: c-lex.c:1141 + #, c-format + msgid "integer constant is too large for this configuration of the compiler - truncated to %d bits" + msgstr "" + + #: c-lex.c:1231 + msgid "width of integer constant changes with -traditional" + msgstr "" + + #: c-lex.c:1233 + msgid "integer constant is unsigned in ISO C, signed with -traditional" + msgstr "" + + #: c-lex.c:1235 + msgid "width of integer constant may change on other systems with -traditional" + msgstr "" + + #: c-lex.c:1245 + #, c-format + msgid "integer constant larger than the maximum value of %s" + msgstr "" + + #: c-lex.c:1248 + msgid "an unsigned long long int" + msgstr "" + + #: c-lex.c:1249 + msgid "a long long int" + msgstr "" + + #: c-lex.c:1250 + msgid "an unsigned long int" + msgstr "" + + #: c-lex.c:1254 + #, fuzzy + msgid "decimal constant is so large that it is unsigned" + msgstr "%s: ôï %s åßíáé ôüóï ìåãÜëï ðïõ äå ìðïñåß íá áíáðáñáóôáèåß" + + #: c-lex.c:1263 + msgid "complex integer constant is too wide for 'complex int'" + msgstr "" + + #: c-lex.c:1283 + #, fuzzy + msgid "integer constant is larger than the maximum value for its type" + msgstr "" + "ï äçëùìÝíïò áñéèìüò bytes `%s' åßíáé ìåãáëýôåñïò áðü ôï ìÝãéóôï\n" + "ðïõ ìðïñåß íá áíáðáñáóôáèåß áðü ôï ôýðï äåäïìÝíùí `long'" + + #: c-lex.c:1287 + #, c-format + msgid "missing white space after number '%.*s'" + msgstr "" + + #: c-lex.c:1323 cpplex.c:1866 + #, fuzzy + msgid "ignoring invalid multibyte character" + msgstr "Ìç Ýãêõñï Þ áóõìðëÞñùôï multibyte Þ ðëáôýò ÷áñáêôÞñáò" + + #. Like YYERROR but do call yyerror. + #: c-parse.y:56 objc-parse.y:57 parse.y:51 + msgid "syntax error" + msgstr "óöÜëìá óýíôáîçò" + + #: /usr/share/bison/bison.simple:107 /usr/share/bison/bison.simple:110 + #: /usr/share/bison/bison.simple:172 + #, fuzzy + msgid "syntax error: cannot back up" + msgstr "ï äéá÷ùñéóôÞò äå ìðïñåß íá åßíáé êåíüò" + + #: /usr/share/bison/bison.simple:358 /usr/share/bison/bison.simple:410 + #: /usr/share/bison/bison.simple:946 + #, fuzzy + msgid "parser stack overflow" + msgstr "Õðåñ÷åßëéóç ðßíáêá áñ÷åßïõ" + + #: c-parse.y:288 objc-parse.y:310 + msgid "ISO C forbids an empty source file" + msgstr "" + + #: c-parse.y:321 c-typeck.c:6909 ch/parse.c:2113 objc-parse.y:343 + msgid "argument of `asm' is not a constant string" + msgstr "" + + #: c-parse.y:329 objc-parse.y:351 + msgid "ISO C forbids data definition with no type or storage class" + msgstr "" + + #: c-parse.y:331 objc-parse.y:353 + msgid "data definition has no type or storage class" + msgstr "" + + #: c-parse.y:344 objc-parse.y:366 + msgid "ISO C does not allow extra `;' outside of a function" + msgstr "" + + #: c-parse.y:404 cppexp.c:691 + msgid "traditional C rejects the unary plus operator" + msgstr "" + + #: c-parse.y:466 objc-parse.y:488 + msgid "`sizeof' applied to a bit-field" + msgstr "" + + #: c-parse.y:546 objc-parse.y:568 + msgid "ISO C forbids omitting the middle term of a ?: expression" + msgstr "" + + #: c-parse.y:593 objc-parse.y:615 + msgid "ISO C89 forbids compound literals" + msgstr "" + + #: c-parse.y:607 objc-parse.y:629 + msgid "ISO C forbids braced-groups within expressions" + msgstr "" + + #: c-parse.y:638 objc-parse.y:660 + msgid "first argument to __builtin_choose_expr not a constant" + msgstr "" + + #: c-parse.y:681 + msgid "traditional C rejects string concatenation" + msgstr "" + + #: c-parse.y:696 objc-parse.y:732 + msgid "ISO C does not permit use of `varargs.h'" + msgstr "" + + #: c-parse.y:957 c-parse.y:963 c-parse.y:969 c-parse.y:975 c-parse.y:996 + #: c-parse.y:1002 c-parse.y:1008 c-parse.y:1014 c-parse.y:1047 c-parse.y:1053 + #: c-parse.y:1059 c-parse.y:1065 c-parse.y:1110 c-parse.y:1116 c-parse.y:1122 + #: c-parse.y:1128 objc-parse.y:993 objc-parse.y:999 objc-parse.y:1005 + #: objc-parse.y:1011 objc-parse.y:1032 objc-parse.y:1038 objc-parse.y:1044 + #: objc-parse.y:1050 objc-parse.y:1083 objc-parse.y:1089 objc-parse.y:1095 + #: objc-parse.y:1101 objc-parse.y:1146 objc-parse.y:1152 objc-parse.y:1158 + #: objc-parse.y:1164 parse.y:1888 parse.y:1895 parse.y:1934 + #, fuzzy, c-format + msgid "`%s' is not at beginning of declaration" + msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï" + + #: c-parse.y:1410 objc-parse.y:1455 + msgid "ISO C forbids empty initializer braces" + msgstr "" + + #: c-parse.y:1424 objc-parse.y:1469 + msgid "ISO C89 forbids specifying subobject to initialize" + msgstr "" + + #: c-parse.y:1427 objc-parse.y:1472 + msgid "obsolete use of designated initializer without `='" + msgstr "" + + #: c-parse.y:1431 objc-parse.y:1476 + msgid "obsolete use of designated initializer with `:'" + msgstr "" + + #: c-parse.y:1460 + msgid "ISO C forbids specifying range of elements to initialize" + msgstr "" + + #: c-parse.y:1468 c-parse.y:1498 objc-parse.y:1507 objc-parse.y:1537 + msgid "ISO C forbids nested functions" + msgstr "" + + #: c-parse.y:1672 objc-parse.y:1713 + msgid "ISO C forbids forward references to `enum' types" + msgstr "" + + #: c-parse.y:1684 objc-parse.y:1725 parse.y:2346 + #, fuzzy + msgid "comma at end of enumerator list" + msgstr "óêïõðßäéá óôï ôÝëïò ôïõ áñéèìïý" + + #: c-parse.y:1692 objc-parse.y:1733 + msgid "no semicolon at end of struct or union" + msgstr "" + + #: c-parse.y:1701 objc-parse.y:1742 objc-parse.y:2809 + msgid "extra semicolon in struct or union specified" + msgstr "" + + #: c-parse.y:1714 objc-parse.y:1769 + msgid "ISO C doesn't support unnamed structs/unions" + msgstr "" + + #: c-parse.y:1723 objc-parse.y:1778 + msgid "ISO C forbids member declarations with no members" + msgstr "" + + #: c-parse.y:1872 c-parse.y:1876 c-parse.y:1880 objc-parse.y:1927 + #: objc-parse.y:1931 objc-parse.y:1935 + msgid "storage class specifier in array declarator" + msgstr "" + + #: c-parse.y:1895 objc-parse.y:1950 + msgid "deprecated use of label at end of compound statement" + msgstr "" + + #: c-parse.y:1912 objc-parse.y:1967 + msgid "ISO C89 forbids mixed declarations and code" + msgstr "" + + #: c-parse.y:1986 objc-parse.y:2045 + msgid "ISO C forbids label declarations" + msgstr "" + + #: c-parse.y:2035 objc-parse.y:2094 parse.y:1588 + msgid "braced-group within expression allowed only inside a function" + msgstr "" + + #: c-parse.y:2160 objc-parse.y:2219 + msgid "empty body in an else-statement" + msgstr "" + + #: c-parse.y:2280 objc-parse.y:2339 + msgid "ISO C forbids `goto *expr;'" + msgstr "" + + #: c-parse.y:2378 objc-parse.y:2437 + msgid "ISO C forbids forward parameter declarations" + msgstr "" + + #. Gcc used to allow this as an extension. However, it does + #. not work for all targets, and thus has been disabled. + #. Also, since func (...) and func () are indistinguishable, + #. it caused problems with the code in expand_builtin which + #. tries to verify that BUILT_IN_NEXT_ARG is being used + #. correctly. + #: c-parse.y:2404 objc-parse.y:2463 + msgid "ISO C requires a named argument before `...'" + msgstr "" + + #: c-parse.y:2498 objc-parse.y:2557 + msgid "`...' in old-style identifier list" + msgstr "" + + #: /usr/share/bison/bison.simple:639 /usr/share/bison/bison.simple:699 + msgid "parse error; also virtual memory exceeded" + msgstr "óöÜëìá åðåîåñãáóßáò· åðßóçò ç ìíÞìç åîáíôëÞèçêå" + + #: /usr/share/bison/bison.simple:643 /usr/share/bison/bison.simple:703 + #: /usr/share/bison/bison.simple:821 cp/spew.c:349 + msgid "parse error" + msgstr "óöÜëìá åðåîåñãáóßáò" + + #: c-parse.y:2814 cp/spew.c:1477 objc-parse.y:3501 + #, c-format + msgid "%s at end of input" + msgstr "%s óôï ôÝëïò ôçò åéóüäïõ" + + #: c-parse.y:2820 cp/spew.c:1483 objc-parse.y:3507 + #, c-format + msgid "%s before %s'%c'" + msgstr "%s ðñéí áðü %s'%c'" + + #: c-parse.y:2822 cp/spew.c:1485 objc-parse.y:3509 + #, c-format + msgid "%s before %s'\\x%x'" + msgstr "" + + #: c-parse.y:2826 cp/spew.c:1489 objc-parse.y:3513 + #, fuzzy, c-format + msgid "%s before string constant" + msgstr "ìç ôåñìáôéæìÝíï áëöáñéèìçôéêü óôáèåñÜò" + + #: c-parse.y:2828 cp/spew.c:1491 objc-parse.y:3515 + #, c-format + msgid "%s before numeric constant" + msgstr "" + + # src/request.c:37 + #: c-parse.y:2830 objc-parse.y:3517 + #, fuzzy, c-format + msgid "%s before \"%s\"" + msgstr "%s óå %s" + + #: c-parse.y:2832 objc-parse.y:3519 + #, c-format + msgid "%s before '%s' token" + msgstr "" + + #: c-parse.y:2968 objc-parse.y:3698 + #, fuzzy, c-format + msgid "syntax error at '%s' token" + msgstr "óõíôáêôéêü óöÜëìá óôï ïñéóìü ôïõ %s: %s" + + #: c-parse.y:2998 ch/parse.c:4329 cp/lex.c:910 objc-parse.y:3728 + msgid "YYDEBUG not defined" + msgstr "" + + #: c-pragma.c:109 + msgid "#pragma pack (pop) encountered without matching #pragma pack (push, )" + msgstr "" + + #: c-pragma.c:127 + #, c-format + msgid "#pragma pack(pop, %s) encountered without matching #pragma pack(push, %s, )" + msgstr "" + + #: c-pragma.c:162 + #, fuzzy + msgid "#pragma pack(push[, id], ) is not supported on this target" + msgstr "ðñïåéäïðïßçóç: ôï --pid=PID äåí õðïóôçñßæåôáé óå áõôü ôï óýóôçìá" + + #: c-pragma.c:164 + #, fuzzy + msgid "#pragma pack(pop[, id], ) is not supported on this target" + msgstr "ðñïåéäïðïßçóç: ôï --pid=PID äåí õðïóôçñßæåôáé óå áõôü ôï óýóôçìá" + + #: c-pragma.c:184 + msgid "missing '(' after '#pragma pack' - ignored" + msgstr "" + + #: c-pragma.c:197 c-pragma.c:247 + #, fuzzy + msgid "malformed '#pragma pack' - ignored" + msgstr "êáêïäéáìïñöùìÝíç ãñáììÞ áãíïÞèçêå" + + #: c-pragma.c:202 + msgid "malformed '#pragma pack(push[, id], )' - ignored" + msgstr "" + + #: c-pragma.c:204 + msgid "malformed '#pragma pack(pop[, id])' - ignored" + msgstr "" + + #: c-pragma.c:213 + #, c-format + msgid "unknown action '%s' for '#pragma pack' - ignored" + msgstr "" + + #: c-pragma.c:250 + msgid "junk at end of '#pragma pack'" + msgstr "" + + #: c-pragma.c:264 + #, c-format + msgid "alignment must be a small power of two, not %d" + msgstr "" + + #: c-pragma.c:290 c-pragma.c:295 + #, fuzzy + msgid "malformed #pragma weak, ignored" + msgstr "êáêïäéáìïñöùìÝíç ãñáììÞ áãíïÞèçêå" + + #: c-pragma.c:299 + msgid "junk at end of #pragma weak" + msgstr "" + + #: c-semantics.c:563 + msgid "break statement not within loop or switch" + msgstr "" + + #: c-semantics.c:581 + msgid "continue statement not within a loop" + msgstr "" + + #: c-semantics.c:676 + msgid "destructor needed for `%#D'" + msgstr "" + + #: c-semantics.c:677 + msgid "where case label appears here" + msgstr "" + + #: c-semantics.c:680 + msgid "(enclose actions of previous case statements requiring destructors in their own scope.)" + msgstr "" + + #: c-semantics.c:723 c-typeck.c:6937 cp/semantics.c:881 + #, c-format + msgid "%s qualifier ignored on asm" + msgstr "" + + #: c-typeck.c:124 + #, c-format + msgid "`%s' has an incomplete type" + msgstr "" + + #: c-typeck.c:146 cp/call.c:2590 + #, fuzzy + msgid "invalid use of void expression" + msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç" + + #: c-typeck.c:155 cp/typeck2.c:227 + msgid "invalid use of array with unspecified bounds" + msgstr "" + + #: c-typeck.c:163 + #, fuzzy, c-format + msgid "invalid use of undefined type `%s %s'" + msgstr "ìç Ýãêõñïò áñéèìüò áðü êåíÝò ãñáììÝò: `%s'" + + #. If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. + #: c-typeck.c:167 + #, fuzzy, c-format + msgid "invalid use of incomplete typedef `%s'" + msgstr "ìç Ýãêõñïò äåýôåñïò ôåëåóôÞò óå êáôÜóôáóç óõìâáôüôçôáò `%s'" + + #: c-typeck.c:398 c-typeck.c:412 + msgid "function types not truly compatible in ISO C" + msgstr "" + + #: c-typeck.c:572 + msgid "types are not quite compatible" + msgstr "" + + #: c-typeck.c:725 + msgid "sizeof applied to a function type" + msgstr "" + + #: c-typeck.c:731 + msgid "sizeof applied to a void type" + msgstr "" + + #: c-typeck.c:738 + msgid "sizeof applied to an incomplete type" + msgstr "" + + #: c-typeck.c:791 c-typeck.c:2809 + msgid "arithmetic on pointer to an incomplete type" + msgstr "" + + #: c-typeck.c:1179 + #, c-format + msgid "%s has no member named `%s'" + msgstr "" + + #: c-typeck.c:1212 + #, c-format + msgid "request for member `%s' in something not a structure or union" + msgstr "" + + #: c-typeck.c:1244 ch/expr.c:810 + msgid "dereferencing pointer to incomplete type" + msgstr "" + + #: c-typeck.c:1248 ch/expr.c:814 + msgid "dereferencing `void *' pointer" + msgstr "" + + #: c-typeck.c:1265 cp/typeck.c:2380 + #, fuzzy, c-format + msgid "invalid type argument of `%s'" + msgstr "Ç ðáñÜìåôñïò `%s' äåí åßíáé Ýãêõñç." + + #: c-typeck.c:1284 cp/typeck.c:2406 + msgid "subscript missing in array reference" + msgstr "" + + #: c-typeck.c:1305 cp/typeck.c:2448 + msgid "array subscript has type `char'" + msgstr "" + + #: c-typeck.c:1313 c-typeck.c:1402 cp/typeck.c:2455 cp/typeck.c:2534 + msgid "array subscript is not an integer" + msgstr "" + + #: c-typeck.c:1346 + msgid "ISO C forbids subscripting `register' array" + msgstr "" + + #: c-typeck.c:1348 + msgid "ISO C89 forbids subscripting non-lvalue array" + msgstr "" + + #: c-typeck.c:1381 + msgid "subscript has type `char'" + msgstr "" + + #: c-typeck.c:1397 cp/typeck.c:2529 + msgid "subscripted value is neither array nor pointer" + msgstr "" + + #: c-typeck.c:1451 + #, c-format + msgid "`%s' undeclared here (not in a function)" + msgstr "" + + #: c-typeck.c:1458 + #, c-format + msgid "`%s' undeclared (first use in this function)" + msgstr "" + + #: c-typeck.c:1463 + msgid "(Each undeclared identifier is reported only once" + msgstr "" + + #: c-typeck.c:1464 + msgid "for each function it appears in.)" + msgstr "" + + #: c-typeck.c:1481 + #, c-format + msgid "local declaration of `%s' hides instance variable" + msgstr "" + + #: c-typeck.c:1546 + #, fuzzy + msgid "called object is not a function" + msgstr "Ôï åðþíõìï áíôéêåßìåíï äåí åßíáé áíáæçôÞóéìï" + + #: c-typeck.c:1630 cp/typeck.c:3171 + #, fuzzy + msgid "too many arguments to function" + msgstr "ðÜñá ðïëëÜ ïñßóìáôá" + + #: c-typeck.c:1651 + #, c-format + msgid "type of formal parameter %d is incomplete" + msgstr "" + + #: c-typeck.c:1664 + #, c-format + msgid "%s as integer rather than floating due to prototype" + msgstr "" + + #: c-typeck.c:1667 + #, c-format + msgid "%s as integer rather than complex due to prototype" + msgstr "" + + #: c-typeck.c:1670 + #, c-format + msgid "%s as complex rather than floating due to prototype" + msgstr "" + + #: c-typeck.c:1673 + #, c-format + msgid "%s as floating rather than integer due to prototype" + msgstr "" + + #: c-typeck.c:1676 + #, c-format + msgid "%s as complex rather than integer due to prototype" + msgstr "" + + #: c-typeck.c:1679 + #, c-format + msgid "%s as floating rather than complex due to prototype" + msgstr "" + + #: c-typeck.c:1689 + #, c-format + msgid "%s as `float' rather than `double' due to prototype" + msgstr "" + + #: c-typeck.c:1707 + #, c-format + msgid "%s with different width due to prototype" + msgstr "" + + #: c-typeck.c:1741 + #, c-format + msgid "%s as unsigned due to prototype" + msgstr "" + + #: c-typeck.c:1743 + #, c-format + msgid "%s as signed due to prototype" + msgstr "" + + #: c-typeck.c:1777 cp/typeck.c:3279 + #, fuzzy + msgid "too few arguments to function" + msgstr "ðïëý ëßãá ïñßóìáôá" + + #: c-typeck.c:1819 + msgid "suggest parentheses around + or - inside shift" + msgstr "" + + #: c-typeck.c:1826 + msgid "suggest parentheses around && within ||" + msgstr "" + + #: c-typeck.c:1835 + msgid "suggest parentheses around arithmetic in operand of |" + msgstr "" + + #: c-typeck.c:1838 + msgid "suggest parentheses around comparison in operand of |" + msgstr "" + + #: c-typeck.c:1847 + msgid "suggest parentheses around arithmetic in operand of ^" + msgstr "" + + #: c-typeck.c:1850 + msgid "suggest parentheses around comparison in operand of ^" + msgstr "" + + #: c-typeck.c:1857 + msgid "suggest parentheses around + or - in operand of &" + msgstr "" + + #: c-typeck.c:1860 + msgid "suggest parentheses around comparison in operand of &" + msgstr "" + + #: c-typeck.c:1867 + msgid "comparisons like X<=Y<=Z do not have their mathematical meaning" + msgstr "" + + #: c-typeck.c:2027 c-typeck.c:2083 ch/expr.c:3951 + msgid "division by zero" + msgstr "" + + #: c-typeck.c:2128 cp/typeck.c:3565 + msgid "right shift count is negative" + msgstr "" + + #: c-typeck.c:2135 cp/typeck.c:3571 + msgid "right shift count >= width of type" + msgstr "" + + #: c-typeck.c:2160 cp/typeck.c:3590 + msgid "left shift count is negative" + msgstr "" + + #: c-typeck.c:2163 cp/typeck.c:3592 + msgid "left shift count >= width of type" + msgstr "" + + #: c-typeck.c:2188 + msgid "shift count is negative" + msgstr "" + + #: c-typeck.c:2190 + msgid "shift count >= width of type" + msgstr "" + + #: c-typeck.c:2211 cp/typeck.c:3627 + msgid "comparing floating point with == or != is unsafe" + msgstr "" + + #: c-typeck.c:2235 c-typeck.c:2241 + msgid "ISO C forbids comparison of `void *' with function pointer" + msgstr "" + + #: c-typeck.c:2244 c-typeck.c:2286 c-typeck.c:2314 + msgid "comparison of distinct pointer types lacks a cast" + msgstr "" + + #: c-typeck.c:2259 c-typeck.c:2265 c-typeck.c:2335 c-typeck.c:2341 + msgid "comparison between pointer and integer" + msgstr "" + + #: c-typeck.c:2281 c-typeck.c:2309 + msgid "ISO C forbids ordered comparisons of pointers to functions" + msgstr "" + + #: c-typeck.c:2306 + msgid "comparison of complete and incomplete pointers" + msgstr "" + + #: c-typeck.c:2322 c-typeck.c:2329 + msgid "ordered comparison of pointer with integer zero" + msgstr "" + + #: c-typeck.c:2355 cp/typeck.c:3760 + #, fuzzy + msgid "unordered comparison on non-floating point argument" + msgstr "Ç ðáñÜìåôñïò êéíçôÞò õðïäéáóôïëÞò äåí åßíáé Ýãêõñç: %s" + + #: c-typeck.c:2559 + msgid "comparison between signed and unsigned" + msgstr "" + + #: c-typeck.c:2605 cp/typeck.c:4006 + msgid "comparison of promoted ~unsigned with constant" + msgstr "" + + #: c-typeck.c:2613 cp/typeck.c:4014 + msgid "comparison of promoted ~unsigned with unsigned" + msgstr "" + + #: c-typeck.c:2675 + msgid "pointer of type `void *' used in arithmetic" + msgstr "" + + #: c-typeck.c:2681 + msgid "pointer to a function used in arithmetic" + msgstr "" + + #: c-typeck.c:2761 + msgid "pointer of type `void *' used in subtraction" + msgstr "" + + #: c-typeck.c:2763 + msgid "pointer to a function used in subtraction" + msgstr "" + + #: c-typeck.c:2860 + msgid "wrong type argument to unary plus" + msgstr "" + + #: c-typeck.c:2871 + msgid "wrong type argument to unary minus" + msgstr "" + + #: c-typeck.c:2883 + msgid "ISO C does not support `~' for complex conjugation" + msgstr "" + + #: c-typeck.c:2889 + msgid "wrong type argument to bit-complement" + msgstr "" + + #: c-typeck.c:2900 + #, fuzzy + msgid "wrong type argument to abs" + msgstr "ëÜèïò áñéèìüò ïñéóìÜôùí" + + #: c-typeck.c:2912 + msgid "wrong type argument to conjugation" + msgstr "" + + #: c-typeck.c:2926 + msgid "wrong type argument to unary exclamation mark" + msgstr "" + + #: c-typeck.c:2969 + msgid "ISO C does not support `++' and `--' on complex types" + msgstr "" + + #: c-typeck.c:2984 c-typeck.c:3016 + msgid "wrong type argument to increment" + msgstr "" + + #: c-typeck.c:2986 c-typeck.c:3018 + msgid "wrong type argument to decrement" + msgstr "" + + #: c-typeck.c:3007 + msgid "increment of pointer to unknown structure" + msgstr "" + + #: c-typeck.c:3009 + msgid "decrement of pointer to unknown structure" + msgstr "" + + #: c-typeck.c:3082 + #, fuzzy + msgid "invalid lvalue in increment" + msgstr "Ç ðáñÜìåôñïò êéíçôÞò õðïäéáóôïëÞò äåí åßíáé Ýãêõñç: %s" + + #: c-typeck.c:3083 + #, fuzzy + msgid "invalid lvalue in decrement" + msgstr "Ç ðáñÜìåôñïò êéíçôÞò õðïäéáóôïëÞò äåí åßíáé Ýãêõñç: %s" + + #: c-typeck.c:3091 cp/typeck.c:4594 + msgid "increment" + msgstr "" + + #: c-typeck.c:3091 cp/typeck.c:4594 + msgid "decrement" + msgstr "" + + #: c-typeck.c:3146 + msgid "ISO C forbids the address of a cast expression" + msgstr "" + + #: c-typeck.c:3156 + #, fuzzy + msgid "invalid lvalue in unary `&'" + msgstr "ìç Ýãêõñïò ÷ñüíïò áíáðÞäçò" + + #: c-typeck.c:3188 + #, c-format + msgid "attempt to take address of bit-field structure member `%s'" + msgstr "" + + #. condition met at compile time + #: c-typeck.c:3297 c-typeck.c:4686 c-typeck.c:4702 c-typeck.c:4718 + #: ch/expr.c:1782 ch/parse.c:361 ch/typeck.c:160 cp/typeck.c:4787 gcc.c:4467 + #: java/expr.c:387 java/verify.c:1464 java/verify.c:1465 java/verify.c:1480 + #: rtl-error.c:121 tradcif.y:533 tradcpp.c:4123 + #, c-format + msgid "%s" + msgstr "" + + #: c-typeck.c:3358 + msgid "ISO C forbids use of conditional expressions as lvalues" + msgstr "" + + #: c-typeck.c:3361 + msgid "ISO C forbids use of compound expressions as lvalues" + msgstr "" + + #: c-typeck.c:3364 + msgid "ISO C forbids use of cast expressions as lvalues" + msgstr "" + + #: c-typeck.c:3381 + #, c-format + msgid "%s of read-only member `%s'" + msgstr "" + + #: c-typeck.c:3385 + #, fuzzy, c-format + msgid "%s of read-only variable `%s'" + msgstr "Ìç áíáãíùñßóéìç ìåôáâëçôÞ `%s'" + + #: c-typeck.c:3388 + #, c-format + msgid "%s of read-only location" + msgstr "" + + #: c-typeck.c:3406 + #, fuzzy, c-format + msgid "cannot take address of bit-field `%s'" + msgstr "äåí åßíáé äõíáôü íá äçìéïõñãçèåß ôï áñ÷åßï fifo `%s'" + + #: c-typeck.c:3434 ch/typeck.c:3676 ch/xtypeck.c:62 + #, c-format + msgid "global register variable `%s' used in nested function" + msgstr "" + + #: c-typeck.c:3438 ch/typeck.c:3680 ch/xtypeck.c:66 + #, c-format + msgid "register variable `%s' used in nested function" + msgstr "" + + #: c-typeck.c:3445 ch/typeck.c:3687 ch/xtypeck.c:73 + #, c-format + msgid "address of global register variable `%s' requested" + msgstr "" + + #: c-typeck.c:3457 ch/typeck.c:3699 ch/xtypeck.c:85 + msgid "cannot put object with volatile field into register" + msgstr "" + + #: c-typeck.c:3461 ch/typeck.c:3703 ch/xtypeck.c:89 + #, c-format + msgid "address of register variable `%s' requested" + msgstr "" + + #: c-typeck.c:3569 + msgid "signed and unsigned type in conditional expression" + msgstr "" + + #: c-typeck.c:3576 + msgid "ISO C forbids conditional expr with only one void side" + msgstr "" + + #: c-typeck.c:3592 c-typeck.c:3599 + msgid "ISO C forbids conditional expr between `void *' and function pointer" + msgstr "" + + #: c-typeck.c:3605 + msgid "pointer type mismatch in conditional expression" + msgstr "" + + #: c-typeck.c:3612 c-typeck.c:3622 + msgid "pointer/integer type mismatch in conditional expression" + msgstr "" + + #: c-typeck.c:3636 + msgid "type mismatch in conditional expression" + msgstr "" + + #: c-typeck.c:3707 cp/typeck.c:5044 + msgid "left-hand operand of comma expression has no effect" + msgstr "" + + #: c-typeck.c:3746 + msgid "cast specifies array type" + msgstr "" + + #: c-typeck.c:3752 + msgid "cast specifies function type" + msgstr "" + + #: c-typeck.c:3762 + msgid "ISO C forbids casting nonscalar to the same type" + msgstr "" + + #: c-typeck.c:3781 + msgid "ISO C forbids casts to union type" + msgstr "" + + #: c-typeck.c:3797 + msgid "cast to union type from type not present in union" + msgstr "" + + #. There are qualifiers present in IN_OTYPE that are not + #. present in IN_TYPE. + #: c-typeck.c:3840 + msgid "cast discards qualifiers from pointer target type" + msgstr "" + + #: c-typeck.c:3855 + msgid "cast increases required alignment of target type" + msgstr "" + + #: c-typeck.c:3861 cp/typeck.c:5458 + msgid "cast from pointer to integer of different size" + msgstr "" + + #: c-typeck.c:3866 + msgid "cast does not match function type" + msgstr "" + + #: c-typeck.c:3873 cp/typeck.c:5465 + msgid "cast to pointer from integer of different size" + msgstr "" + + #. Now we have handled acceptable kinds of LHS that are not truly lvalues. + #. Reject anything strange now. + #: c-typeck.c:4031 + #, fuzzy + msgid "invalid lvalue in assignment" + msgstr "Ç ðáñÜìåôñïò êéíçôÞò õðïäéáóôïëÞò äåí åßíáé Ýãêõñç: %s" + + #. Convert new value to destination type. + #: c-typeck.c:4040 c-typeck.c:4065 c-typeck.c:4082 ch/typeck.c:2334 + #: cp/typeck.c:5575 cp/typeck.c:5726 + #, fuzzy + msgid "assignment" + msgstr "ðñïóðÝñáóìá ïñßóìáôïò" + + #: c-typeck.c:4249 c-typeck.c:4316 + #, c-format + msgid "%s makes qualified function pointer from unqualified" + msgstr "" + + #: c-typeck.c:4253 c-typeck.c:4296 + #, c-format + msgid "%s discards qualifiers from pointer target type" + msgstr "" + + #: c-typeck.c:4259 + msgid "ISO C prohibits argument conversion to union type" + msgstr "" + + #: c-typeck.c:4288 + #, c-format + msgid "ISO C forbids %s between function pointer and `void *'" + msgstr "" + + #: c-typeck.c:4305 + #, c-format + msgid "pointer targets in %s differ in signedness" + msgstr "" + + #: c-typeck.c:4321 + #, c-format + msgid "%s from incompatible pointer type" + msgstr "" + + #: c-typeck.c:4337 + #, c-format + msgid "%s makes pointer from integer without a cast" + msgstr "" + + #: c-typeck.c:4345 + #, c-format + msgid "%s makes integer from pointer without a cast" + msgstr "" + + #: c-typeck.c:4359 c-typeck.c:4362 + #, fuzzy, c-format + msgid "incompatible type for argument %d of `%s'" + msgstr "Ìç Ýãêõñç áêÝñáéá ðáñÜìåôñïò `%s'" + + #: c-typeck.c:4366 + #, c-format + msgid "incompatible type for argument %d of indirect function call" + msgstr "" + + #: c-typeck.c:4370 + #, fuzzy, c-format + msgid "incompatible types in %s" + msgstr "ìç Ýãêõñï åßäïò áëöáñéèìçôéêïý `%s'" + + #. Function name is known; supply it. + #: c-typeck.c:4401 + #, fuzzy, c-format + msgid "passing arg %d of `%s'" + msgstr "Ëåßðåé ðáñÜìåôñïò ãéá `%s'" + + #. Function name unknown (call through ptr); just give arg number. + #: c-typeck.c:4411 + #, c-format + msgid "passing arg %d of pointer to function" + msgstr "" + + #: c-typeck.c:4478 + msgid "initializer for static variable is not constant" + msgstr "" + + #: c-typeck.c:4484 + msgid "initializer for static variable uses complicated arithmetic" + msgstr "" + + #: c-typeck.c:4492 + msgid "aggregate initializer is not constant" + msgstr "" + + #: c-typeck.c:4494 + msgid "aggregate initializer uses complicated arithmetic" + msgstr "" + + #: c-typeck.c:4501 + msgid "traditional C rejects automatic aggregate initialization" + msgstr "" + + # src/request.c:263 + #: c-typeck.c:4689 c-typeck.c:4705 c-typeck.c:4721 + #, fuzzy, c-format + msgid "(near initialization for `%s')" + msgstr "Ôï âÞìá áñ÷éêïðïßçóçò áðÝôõ÷å" + + #: c-typeck.c:4773 cp/typeck2.c:531 + msgid "char-array initialized from wide string" + msgstr "" + + #: c-typeck.c:4780 cp/typeck2.c:538 + msgid "int-array initialized from non-wide string" + msgstr "" + + #: c-typeck.c:4798 cp/typeck2.c:554 + msgid "initializer-string for array of chars is too long" + msgstr "" + + #: c-typeck.c:4834 + msgid "array initialized from non-constant array expression" + msgstr "" + + #: c-typeck.c:4851 c-typeck.c:4853 c-typeck.c:4869 c-typeck.c:4890 + #: c-typeck.c:6311 + #, fuzzy + msgid "initializer element is not constant" + msgstr "ìç ôåñìáôéæìÝíï áëöáñéèìçôéêü óôáèåñÜò" + + # src/request.c:263 + #: c-typeck.c:4885 + #, fuzzy + msgid "initialization" + msgstr "Ôï âÞìá áñ÷éêïðïßçóçò áðÝôõ÷å" + + #: c-typeck.c:4896 c-typeck.c:6316 + msgid "initializer element is not computable at load time" + msgstr "" + + #: c-typeck.c:4933 c-typeck.c:4949 cp/typeck2.c:631 + #, fuzzy + msgid "invalid initializer" + msgstr "ìç Ýãêõñï ìÝãåèïò ïñéæüíôéïõ óôçëïèÝôç: %s" + + #: c-typeck.c:5434 + #, fuzzy + msgid "extra brace group at end of initializer" + msgstr "áêïëïõèïýí óêïõðßäéá óôï ôÝëïò ôçò ãñáììÞò" + + #: c-typeck.c:5454 + msgid "missing braces around initializer" + msgstr "" + + #: c-typeck.c:5506 + msgid "braces around scalar initializer" + msgstr "" + + #: c-typeck.c:5554 + msgid "initialization of flexible array member in a nested context" + msgstr "" + + #: c-typeck.c:5556 + msgid "initialization of a flexible array member" + msgstr "" + + #: c-typeck.c:5587 + #, fuzzy + msgid "missing initializer" + msgstr "Ý÷åé ðáñáëçöèåß ôï áñ÷åßï ðñïïñéóìïý" + + #: c-typeck.c:5612 + msgid "empty scalar initializer" + msgstr "" + + #: c-typeck.c:5617 + msgid "extra elements in scalar initializer" + msgstr "" + + #: c-typeck.c:5703 + msgid "initialization designators may not nest" + msgstr "" + + #: c-typeck.c:5724 c-typeck.c:5795 + msgid "array index in non-array initializer" + msgstr "" + + #: c-typeck.c:5729 c-typeck.c:5847 + msgid "field name not in record or union initializer" + msgstr "" + + #: c-typeck.c:5791 c-typeck.c:5793 + msgid "nonconstant array index in initializer" + msgstr "" + + #: c-typeck.c:5798 + msgid "array index in initializer exceeds array bounds" + msgstr "" + + #: c-typeck.c:5809 + msgid "empty index range in initializer" + msgstr "" + + #: c-typeck.c:5818 + msgid "array index range in initializer exceeds array bounds" + msgstr "" + + #: c-typeck.c:5859 + #, c-format + msgid "unknown field `%s' specified in initializer" + msgstr "" + + #: c-typeck.c:5896 c-typeck.c:5917 c-typeck.c:6379 + msgid "initialized field with side-effects overwritten" + msgstr "" + + #: c-typeck.c:6589 + msgid "excess elements in char array initializer" + msgstr "" + + #: c-typeck.c:6596 c-typeck.c:6642 + msgid "excess elements in struct initializer" + msgstr "" + + #: c-typeck.c:6709 + msgid "excess elements in union initializer" + msgstr "" + + #: c-typeck.c:6730 + msgid "traditional C rejects initialization of unions" + msgstr "" + + #: c-typeck.c:6793 + msgid "excess elements in array initializer" + msgstr "" + + #: c-typeck.c:6819 + msgid "excess elements in scalar initializer" + msgstr "" + + #: c-typeck.c:6930 ch/parse.c:2026 + #, fuzzy + msgid "asm template is not a string constant" + msgstr "ìç ôåñìáôéæìÝíï áëöáñéèìçôéêü óôáèåñÜò" + + #: c-typeck.c:6962 + msgid "invalid lvalue in asm statement" + msgstr "" + + #: c-typeck.c:7033 + #, fuzzy + msgid "modification by `asm'" + msgstr "Ç ôñïðïðïßçóç áðÝôõ÷å" + + #: c-typeck.c:7052 cp/typeck.c:6576 + msgid "function declared `noreturn' has a `return' statement" + msgstr "" + + #: c-typeck.c:7059 + msgid "`return' with no value, in function returning non-void" + msgstr "`return' ÷ùñßò ôéìÞ, óå óõíÜñôçóç ðïõ åðéóôñÝöåé ìç-êåíü" + + #: c-typeck.c:7065 + msgid "`return' with a value, in function returning void" + msgstr "" + + #: c-typeck.c:7069 + msgid "return" + msgstr "" + + #: c-typeck.c:7120 + msgid "function returns address of local variable" + msgstr "" + + #: c-typeck.c:7177 cp/semantics.c:525 + msgid "switch quantity not an integer" + msgstr "" + + #: c-typeck.c:7187 + msgid "`long' switch expression not converted to `int' in ISO C" + msgstr "" + + #: c-typeck.c:7222 cp/decl.c:5230 + msgid "case label not within a switch statement" + msgstr "" + + #: c-typeck.c:7224 cp/decl.c:5235 + msgid "`default' label not within a switch statement" + msgstr "" + + #: calls.c:1901 + #, c-format + msgid "inlining failed in call to `%s'" + msgstr "" + + #: calls.c:1902 calls.c:2208 + msgid "called from here" + msgstr "" + + #: calls.c:2207 + #, fuzzy, c-format + msgid "can't inline call to `%s'" + msgstr "áäõíáìßá åêôÝëåóçò ioctl óôï `%s'" + + #: calls.c:2237 + msgid "function call has aggregate value" + msgstr "" + + #: calls.c:4539 + msgid "variable offset is passed partially in stack and in reg" + msgstr "" + + #: calls.c:4541 + msgid "variable size is passed partially in stack and in reg" + msgstr "" + + #: cfgrtl.c:1578 + #, c-format + msgid "end insn %d for block %d not found in the insn stream" + msgstr "" + + #: cfgrtl.c:1592 + #, c-format + msgid "insn %d is in multiple basic blocks (%d and %d)" + msgstr "" + + #: cfgrtl.c:1604 + #, c-format + msgid "head insn %d for block %d not found in the insn stream" + msgstr "" + + #: cfgrtl.c:1623 + #, c-format + msgid "verify_flow_info: Duplicate edge %i->%i" + msgstr "" + + #: cfgrtl.c:1642 + #, c-format + msgid "verify_flow_info: Incorrect blocks for fallthru %i->%i" + msgstr "" + + #: cfgrtl.c:1657 + #, c-format + msgid "verify_flow_info: Incorrect fallthru %i->%i" + msgstr "" + + #: cfgrtl.c:1659 + msgid "wrong insn in the fallthru edge" + msgstr "" + + #: cfgrtl.c:1666 + #, c-format + msgid "verify_flow_info: Basic block %d succ edge is corrupted" + msgstr "" + + #: cfgrtl.c:1690 + #, c-format + msgid "missing barrier after block %i" + msgstr "" + + #: cfgrtl.c:1700 + #, c-format + msgid "basic block %d pred edge is corrupted" + msgstr "" + + #: cfgrtl.c:1717 + #, c-format + msgid "insn %d inside basic block %d but block_for_insn is NULL" + msgstr "" + + #: cfgrtl.c:1721 + #, c-format + msgid "insn %d inside basic block %d but block_for_insn is %i" + msgstr "" + + #: cfgrtl.c:1735 cfgrtl.c:1745 + #, c-format + msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d" + msgstr "" + + #: cfgrtl.c:1758 + #, c-format + msgid "NOTE_INSN_BASIC_BLOCK %d in middle of basic block %d" + msgstr "" + + #: cfgrtl.c:1770 + #, c-format + msgid "in basic block %d:" + msgstr "" + + #: cfgrtl.c:1771 + msgid "flow control insn inside a basic block" + msgstr "" + + #: cfgrtl.c:1790 + #, c-format + msgid "basic block %i edge lists are corrupted" + msgstr "" + + #: cfgrtl.c:1804 + msgid "basic blocks not numbered consecutively" + msgstr "" + + #: cfgrtl.c:1829 + msgid "insn outside basic block" + msgstr "" + + #: cfgrtl.c:1837 + msgid "return not followed by barrier" + msgstr "" + + #: cfgrtl.c:1842 + #, c-format + msgid "number of bb notes in insn chain (%d) != n_basic_blocks (%d)" + msgstr "" + + #: cfgrtl.c:1846 + msgid "verify_flow_info failed" + msgstr "" + + #: collect2.c:439 + #, fuzzy + msgid "internal error" + msgstr "Åóùôåñéêü óöÜëìá NIS" + + #: collect2.c:940 + #, fuzzy + msgid "no arguments" + msgstr "ðïëý ëßãá ïñßóìáôá" + + # src/getopt1.c:132 + # src/getopt1.c:132 + #: collect2.c:1269 collect2.c:1417 collect2.c:1450 + #, fuzzy, c-format + msgid "fopen %s" + msgstr "åðéëïãÞ %s" + + #: collect2.c:1272 collect2.c:1422 collect2.c:1453 + #, c-format + msgid "fclose %s" + msgstr "" + + #: collect2.c:1281 + #, c-format + msgid "collect2 version %s" + msgstr "" + + #: collect2.c:1371 + #, c-format + msgid "%d constructor(s) found\n" + msgstr "" + + #: collect2.c:1372 + #, c-format + msgid "%d destructor(s) found\n" + msgstr "" + + #: collect2.c:1373 + #, c-format + msgid "%d frame table(s) found\n" + msgstr "" + + #: collect2.c:1514 + #, fuzzy, c-format + msgid "%s terminated with signal %d [%s]%s" + msgstr "%s: Ï ðñïåðåîåñãáóôÞò C áðÝôõ÷å ìå óÞìá %d\n" + + #: collect2.c:1533 + #, c-format + msgid "%s returned %d exit status" + msgstr "" + + #: collect2.c:1561 + #, fuzzy, c-format + msgid "[cannot find %s]" + msgstr "Äåí åßíáé äõíáôüí íá åêôåëåóôåß ôï %s" + + #: collect2.c:1576 + #, fuzzy, c-format + msgid "cannot find `%s'" + msgstr "áäõíáìßá áíïßãìáôïò ôïõ `%s'" + + #: collect2.c:1587 collect2.c:1590 + #, c-format + msgid "redirecting stdout: %s" + msgstr "" + + #: collect2.c:1633 + #, fuzzy, c-format + msgid "[Leaving %s]\n" + msgstr "äéáãñáöÞ êáôáëüãïõ %s\n" + + #: collect2.c:1876 + #, c-format + msgid "\nwrite_c_file - output name is %s, prefix is %s\n" + msgstr "" + + #: collect2.c:2089 + #, fuzzy + msgid "cannot find `nm'" + msgstr "áäõíáìßá áíïßãìáôïò ôïõ `%s'" + + #: collect2.c:2099 collect2.c:2541 + msgid "pipe" + msgstr "" + + #: collect2.c:2103 collect2.c:2545 + msgid "fdopen" + msgstr "" + + #: collect2.c:2129 collect2.c:2571 + #, c-format + msgid "dup2 %d 1" + msgstr "" + + #: collect2.c:2132 collect2.c:2135 collect2.c:2148 collect2.c:2574 + #: collect2.c:2577 collect2.c:2590 + #, fuzzy, c-format + msgid "close %d" + msgstr "ôï %s åßíáé êëåéóôü" + + #: collect2.c:2138 + #, c-format + msgid "execvp %s" + msgstr "" + + #: collect2.c:2192 + #, c-format + msgid "init function found in object %s" + msgstr "" + + #: collect2.c:2200 + #, c-format + msgid "fini function found in object %s" + msgstr "" + + #: collect2.c:2223 collect2.c:2629 + #, fuzzy + msgid "fclose" + msgstr "áñ÷åßï" + + #: collect2.c:2268 + #, fuzzy, c-format + msgid "unable to open file '%s'" + msgstr "Äåí ìðüñåóá íá áíïßîù ôï áñ÷åßï %s" + + #: collect2.c:2270 + #, fuzzy, c-format + msgid "unable to stat file '%s'" + msgstr "áäõíáìßá ðñïóðÝëáóçò(stat()) áñ÷åßïõ `%s': %s" + + #: collect2.c:2276 + #, fuzzy, c-format + msgid "unable to mmap file '%s'" + msgstr "Áäõíáìßá ìåôáöïñÜò óôç ìíÞìç (mmap) ôïõ áñ÷åßïõ %s.\n" + + #: collect2.c:2429 + #, fuzzy + msgid "not found\n" + msgstr "Äå âñÝèçêå" + + #: collect2.c:2431 collect2.c:2608 + #, c-format + msgid "dynamic dependency %s not found" + msgstr "" + + #: collect2.c:2451 + #, fuzzy, c-format + msgid "bad magic number in file '%s'" + msgstr "ìç Ýãêõñïò áñéèìüò áñ÷åßïõ óôç äÞëùóç ðåäßïõ: `%s'" + + #: collect2.c:2473 + msgid "dynamic dependencies.\n" + msgstr "" + + #: collect2.c:2532 + #, fuzzy + msgid "cannot find `ldd'" + msgstr "áäõíáìßá áíïßãìáôïò ôïõ `%s'" + + #: collect2.c:2580 + #, c-format + msgid "execv %s" + msgstr "" + + #: collect2.c:2593 + msgid "\nldd output with constructors/destructors.\n" + msgstr "" + + #: collect2.c:2620 + #, c-format + msgid "unable to open dynamic dependency '%s'" + msgstr "" + + #: collect2.c:2734 + #, fuzzy, c-format + msgid "%s: not a COFF file" + msgstr "%s: Äåí åßíáé êáíïíéêü áñ÷åßï" + + #: collect2.c:2853 + #, fuzzy, c-format + msgid "%s: cannot open as COFF file" + msgstr "áäõíáìßá áíïßãìáôïò áñ÷åßïõ åîüäïõ" + + #: collect2.c:2909 + #, fuzzy, c-format + msgid "library lib%s not found" + msgstr "Ðéèáíüí äå âñÝèçêå" + + # src/getopt1.c:132 + # src/getopt1.c:132 + #: collect2.c:3038 + #, fuzzy, c-format + msgid "open %s" + msgstr "åðéëïãÞ %s" + + #: collect2.c:3061 + msgid "incompatibilities between object file & expected values" + msgstr "" + + #: collect2.c:3134 + #, c-format + msgid "\nProcessing symbol table #%d, offset = 0x%.8lx, kind = %s\n" + msgstr "" + + #: collect2.c:3143 + msgid "string section missing" + msgstr "" + + #: collect2.c:3146 + #, fuzzy + msgid "section pointer missing" + msgstr "ïñéóìüò äéêáéùìÜôùí óôï %s" + + #: collect2.c:3194 + #, fuzzy + msgid "no symbol table found" + msgstr "äåí äþèçêå óõìâïëéêü üíïìá" + + #: collect2.c:3207 + #, fuzzy + msgid "no cmd_strings found" + msgstr "Äåí âñÝèçêå ìÝóï" + + #: collect2.c:3219 + msgid "\nUpdating header and load commands.\n\n" + msgstr "" + + #: collect2.c:3226 + #, c-format + msgid "load command map, %d cmds, new size %ld.\n" + msgstr "" + + #: collect2.c:3257 + #, fuzzy + msgid "writing load commands.\n\n" + msgstr "¸÷åé ðáñáëçöèåß åíôïëÞ" + + #: collect2.c:3277 + #, fuzzy, c-format + msgid "close %s" + msgstr "Êëåßóéìï ôïõ `%s'" + + #: collect2.c:3351 + msgid "could not convert 0x%l.8x into a region" + msgstr "" + + #: collect2.c:3355 + #, c-format + msgid "%s function, region %d, offset = %ld (0x%.8lx)\n" + msgstr "" + + #: collect2.c:3482 + #, fuzzy + msgid "bad magic number" + msgstr "ÅóöáëìÝíïò áñéèìüò áñ÷åßïõ" + + #: collect2.c:3483 + msgid "bad header version" + msgstr "" + + #: collect2.c:3484 + msgid "bad raw header version" + msgstr "" + + #: collect2.c:3485 + msgid "raw header buffer too small" + msgstr "" + + #: collect2.c:3486 + #, fuzzy + msgid "old raw header file" + msgstr "Äåí åßíáé åðþíõìï áñ÷åßï" + + #: collect2.c:3487 + #, fuzzy + msgid "unsupported version" + msgstr "ÅìöÜíéóç Ýêäïóçò ðñïãñÜììáôïò" + + #: collect2.c:3489 + #, c-format + msgid "unknown {de,en}code_mach_o_hdr return value %d" + msgstr "" + + # src/request.c:37 + #: collect2.c:3509 + #, fuzzy, c-format + msgid "fstat %s" + msgstr "%s óå %s" + + #: collect2.c:3546 collect2.c:3594 + #, c-format + msgid "lseek %s 0" + msgstr "" + + #: collect2.c:3550 + #, fuzzy, c-format + msgid "read %s" + msgstr "óöÜëìá áíÜãíùóçò %s" + + #: collect2.c:3553 + #, c-format + msgid "read %ld bytes, expected %ld, from %s" + msgstr "" + + #: collect2.c:3574 + #, c-format + msgid "msync %s" + msgstr "" + + #: collect2.c:3581 + #, c-format + msgid "munmap %s" + msgstr "" + + #: collect2.c:3598 + #, fuzzy, c-format + msgid "write %s" + msgstr "óöÜëìá åããñáöÞò" + + #: collect2.c:3601 + #, c-format + msgid "wrote %ld bytes, expected %ld, to %s" + msgstr "" + + #: combine.c:12639 + #, c-format + msgid "" + ";; Combiner statistics: %d attempts, %d substitutions (%d requiring new space),\n" + ";; %d successes.\n" + "\n" + msgstr "" + + #: combine.c:12649 + #, c-format + msgid "" + "\n" + ";; Combiner totals: %d attempts, %d substitutions (%d requiring new space),\n" + ";; %d successes.\n" + msgstr "" + + #: convert.c:67 + #, fuzzy + msgid "cannot convert to a pointer type" + msgstr "Äåí åßíáé äõíáôüí íá âñåèåß ï ôýðïò ôïõ åðåîåñãáóôÞ." + + #: convert.c:100 + msgid "pointer value used where a floating point value was expected" + msgstr "" + + #: convert.c:104 + msgid "aggregate value used where a float was expected" + msgstr "" + + #: convert.c:130 + #, fuzzy + msgid "conversion to incomplete type" + msgstr "ìç ðëÞñçò åããñáöÞ" + + #: convert.c:390 convert.c:470 + msgid "can't convert between vector values of different size" + msgstr "" + + #: convert.c:396 + msgid "aggregate value used where an integer was expected" + msgstr "" + + #: convert.c:448 f/com.c:1073 + msgid "pointer value used where a complex was expected" + msgstr "" + + #: convert.c:452 f/com.c:1075 + msgid "aggregate value used where a complex was expected" + msgstr "" + + #: convert.c:476 + msgid "can't convert value to a vector" + msgstr "" + + #: cpperror.c:125 + #, fuzzy + msgid "internal error: " + msgstr "Åóùôåñéêü óöÜëìá NIS" + + #: cpperror.c:132 tradcpp.c:4679 + msgid "warning: " + msgstr "ðñïåéäïðïßçóç: " + + # src/request.c:37 + #: cpperror.c:209 cpperror.c:299 cppfiles.c:691 gcc.c:6318 tradcpp.c:4717 + #, fuzzy, c-format + msgid "%s: %s" + msgstr "%s óå %s" + + #: cppexp.c:154 + msgid "floating point numbers are not valid in #if" + msgstr "" + + #: cppexp.c:176 + msgid "traditional C rejects the `U' suffix" + msgstr "" + + #: cppexp.c:179 + msgid "too many 'l' suffixes in integer constant" + msgstr "" + + #: cppexp.c:183 + msgid "integer constant contains digits beyond the radix" + msgstr "" + + #: cppexp.c:186 + #, fuzzy + msgid "integer constant out of range" + msgstr "ó÷åôéêÞ èÝóç áñ÷åßïõ åßíáé åêôüò ïñßùí" + + #: cppexp.c:192 + #, fuzzy + msgid "integer constant is so large that it is unsigned" + msgstr "%s: ôï %s åßíáé ôüóï ìåãÜëï ðïõ äå ìðïñåß íá áíáðáñáóôáèåß" + + #: cppexp.c:201 + #, c-format + msgid "invalid suffix '%.*s' on integer constant" + msgstr "" + + #: cppexp.c:234 + #, fuzzy + msgid "missing ')' after \"defined\"" + msgstr "Ý÷åé ðáñáëçöèåß ç ëßóôá ìå ôá ðåäßá" + + #: cppexp.c:240 + msgid "operator \"defined\" requires an identifier" + msgstr "" + + #: cppexp.c:248 + #, c-format + msgid "(\"%s\" is an alternative token for \"%s\" in C++)" + msgstr "" + + #: cppexp.c:259 + msgid "this use of \"defined\" may not be portable" + msgstr "" + + #: cppexp.c:305 + msgid "string constants are not valid in #if" + msgstr "" + + #: cppexp.c:309 + #, fuzzy, c-format + msgid "invalid character '%c' in #if" + msgstr "ìç Ýãêõñïò ÷áñáêôÞñáò `%c' óôï ôýðï áëöáñéèìçôéêïý `%s'" + + #: cppexp.c:311 + #, fuzzy, c-format + msgid "invalid character '\\%03o' in #if" + msgstr "ìç Ýãêõñïò ÷áñáêôÞñáò `%c' óôï ôýðï áëöáñéèìçôéêïý `%s'" + + #: cppexp.c:328 + #, c-format + msgid "ISO C++ does not permit \"%s\" in #if" + msgstr "" + + #: cppexp.c:339 + #, fuzzy, c-format + msgid "\"%s\" is not defined" + msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï" + + #: cppexp.c:365 + #, fuzzy, c-format + msgid "\"%s\" is not valid in #if expressions" + msgstr "%s: ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç: %s" + + #: cppexp.c:380 + msgid "integer overflow in preprocessor expression" + msgstr "" + + #: cppexp.c:610 + #, fuzzy + msgid "missing binary operator" + msgstr "Áãíùóôïò äõáäéêüò ÷åéñéóôÞò." + + #: cppexp.c:645 + msgid "void expression between '(' and ')'" + msgstr "" + + #: cppexp.c:647 + #, c-format + msgid "operator '%s' has no right operand" + msgstr "" + + #: cppexp.c:659 + #, c-format + msgid "impossible operator '%s'" + msgstr "" + + #: cppexp.c:735 tradcif.y:111 tradcif.y:122 + #, fuzzy + msgid "division by zero in #if" + msgstr "Äéáßñåóç ìå ìçäÝí óôçí áðïôßìçóç: %s" + + #: cppexp.c:769 + msgid "comma operator in operand of #if" + msgstr "" + + #: cppexp.c:774 + #, fuzzy + msgid "syntax error '?' without following ':'" + msgstr "óõíôáêôéêü óöÜëìá óôïí ðñüëïãï: %s" + + #: cppexp.c:777 + msgid "syntax error ':' without preceding '?'" + msgstr "" + + #: cppexp.c:785 + #, fuzzy + msgid "missing ')' in expression" + msgstr "Ý÷åé ðáñáëçöèåß ç ëßóôá ìå ôéò èÝóåéò" + + #: cppexp.c:792 + #, fuzzy + msgid "missing '(' in expression" + msgstr "Ý÷åé ðáñáëçöèåß ç ëßóôá ìå ôéò èÝóåéò" + + #: cppexp.c:818 + #, fuzzy, c-format + msgid "missing binary operator before '%s'" + msgstr "%s: Áíáìåíüôáí äõáäéêüò ÷åéñéóôÞò.\n" + + #: cppexp.c:824 + #, c-format + msgid "operator '%s' has no left operand" + msgstr "" + + #: cppexp.c:862 + msgid "unbalanced stack in #if" + msgstr "" + + #: cppexp.c:865 + msgid "#if with no expression" + msgstr "" + + # src/shred.c:1134 + #: cppfiles.c:395 + #, fuzzy, c-format + msgid "%s is too large" + msgstr "%s: ôï áñ÷åßï åßíáé ðïëý ìåãÜëï" + + #: cppfiles.c:426 + #, fuzzy, c-format + msgid "%s is shorter than expected" + msgstr "%s: Áíáìåíüôáí äõáäéêüò ÷åéñéóôÞò.\n" + + #: cppfiles.c:440 + #, fuzzy, c-format + msgid "%s is a block device" + msgstr "Äåí Ýìåéíå êáèüëïõ ÷þñïò óôç óõóêåõÞ" + + #: cppfiles.c:566 + #, c-format + msgid "no include path in which to find %s" + msgstr "" + + #: cppfiles.c:639 + msgid "Multiple include guards may be useful for:\n" + msgstr "" + + #: cppfiles.c:1029 + msgid "absolute file name in remap_filename" + msgstr "" + + #: cppinit.c:230 + #, fuzzy, c-format + msgid "ignoring nonexistent directory \"%s\"\n" + msgstr "äéáãñáöÞ ìç-êáôáëüãïõ `%s'\n" + + #: cppinit.c:237 + #, fuzzy, c-format + msgid "%s: Not a directory" + msgstr "Äåí åßíáé êáôÜëïãïò" + + #: cppinit.c:284 + #, fuzzy, c-format + msgid "ignoring duplicate directory \"%s\"\n" + msgstr "áäõíáìßá áëëáãÞò óôï êáôÜëïãï \"%s\"" + + #: cppinit.c:312 + #, fuzzy, c-format + msgid "changing search order for system directory \"%s\"" + msgstr "áäõíáìßá áëëáãÞò óôï êáôÜëïãï \"%s\"" + + #: cppinit.c:316 + #, c-format + msgid " as it is the same as non-system directory \"%s\"" + msgstr "" + + #: cppinit.c:320 + msgid " as it has already been specified as a non-system directory" + msgstr "" + + #: cppinit.c:927 + msgid "#include \"...\" search starts here:\n" + msgstr "" + + #: cppinit.c:931 + msgid "#include <...> search starts here:\n" + msgstr "" + + #: cppinit.c:934 + #, fuzzy + msgid "End of search list.\n" + msgstr "ÔÝëïò ôìÞìáôïò" + + #: cppinit.c:1001 + msgid "" + msgstr "" + + #: cppinit.c:1003 + msgid "" + msgstr "" + + #: cppinit.c:1099 tradcpp.c:968 tradcpp.c:978 tradcpp.c:1069 + #, fuzzy + msgid "I/O error on output" + msgstr "ÓöÜëìá åéóüäïõ/åîüäïõ" + + #. Irix6 "cc -n32" and OSF4 cc have problems with char foo[] = ("string"); + #. I.e. a const string initializer with parens around it. That is + #. what N_("string") resolves to, so we make no_* be macros instead. + #: cppinit.c:1147 + #, fuzzy, c-format + msgid "argument missing after %s" + msgstr "Ý÷ïõí ðáñáëçöèåß ïñßóìáôá" + + #: cppinit.c:1148 + #, fuzzy, c-format + msgid "assertion missing after %s" + msgstr "ïñéóìüò äéêáéùìÜôùí óôï %s" + + #: cppinit.c:1149 + #, c-format + msgid "directory name missing after %s" + msgstr "" + + #: cppinit.c:1150 + #, fuzzy, c-format + msgid "file name missing after %s" + msgstr "Ý÷ïõí ðáñáëçöèåß ïñßóìáôá" + + #: cppinit.c:1151 + #, c-format + msgid "macro name missing after %s" + msgstr "" + + #: cppinit.c:1152 + #, c-format + msgid "path name missing after %s" + msgstr "" + + #: cppinit.c:1153 + #, fuzzy, c-format + msgid "number missing after %s" + msgstr "ïñéóìüò äéêáéùìÜôùí óôï %s" + + #: cppinit.c:1154 + #, fuzzy, c-format + msgid "target missing after %s" + msgstr "Áñ÷Þ áñ÷åßïõ %s\n" + + #: cppinit.c:1338 + #, c-format + msgid "too many filenames. Type %s --help for usage info" + msgstr "" + + #: cppinit.c:1522 tradcpp.c:603 + msgid "output filename specified twice" + msgstr "" + + #: cppinit.c:1634 + #, fuzzy + msgid "-I- specified twice" + msgstr "ìç ïñéóìÝíï" + + #: cppinit.c:1773 + #, c-format + msgid "GNU CPP version %s (cpplib)" + msgstr "" + + #: cppinit.c:1814 tradcpp.c:792 + msgid "you must additionally specify either -M or -MM" + msgstr "" + + #: cppinit.c:1877 + #, c-format + msgid "Usage: %s [switches] input output\n" + msgstr "" + + #. To keep the lines from getting too long for some compilers, limit + #. to about 500 characters (6 lines) per chunk. + #: cppinit.c:1880 + msgid "" + "Switches:\n" + " -include Include the contents of before other files\n" + " -imacros Accept definition of macros in \n" + " -iprefix Specify as a prefix for next two options\n" + " -iwithprefix Add to the end of the system include path\n" + " -iwithprefixbefore Add to the end of the main include path\n" + " -isystem Add to the start of the system include path\n" + msgstr "" + + #: cppinit.c:1889 + msgid "" + " -idirafter Add to the end of the system include path\n" + " -I Add to the end of the main include path\n" + " -I- Fine-grained include path control; see info docs\n" + " -nostdinc Do not search system include directories\n" + " (dirs specified with -isystem will still be used)\n" + " -nostdinc++ Do not search system include directories for C++\n" + " -o Put output into \n" + msgstr "" + + #: cppinit.c:1898 + msgid "" + " -pedantic Issue all warnings demanded by strict ISO C\n" + " -pedantic-errors Issue -pedantic warnings as errors instead\n" + " -trigraphs Support ISO C trigraphs\n" + " -lang-c Assume that the input sources are in C\n" + " -lang-c89 Assume that the input sources are in C89\n" + msgstr "" + + #: cppinit.c:1905 + msgid "" + " -lang-c++ Assume that the input sources are in C++\n" + " -lang-objc Assume that the input sources are in ObjectiveC\n" + " -lang-objc++ Assume that the input sources are in ObjectiveC++\n" + " -lang-asm Assume that the input sources are in assembler\n" + msgstr "" + + #: cppinit.c:1911 + msgid "" + " -std= Specify the conformance standard; one of:\n" + " gnu89, gnu99, c89, c99, iso9899:1990,\n" + " iso9899:199409, iso9899:1999\n" + " -+ Allow parsing of C++ style features\n" + " -w Inhibit warning messages\n" + " -Wtrigraphs Warn if trigraphs are encountered\n" + " -Wno-trigraphs Do not warn about trigraphs\n" + " -Wcomment{s} Warn if one comment starts inside another\n" + msgstr "" + + #: cppinit.c:1921 + msgid "" + " -Wno-comment{s} Do not warn about comments\n" + " -Wtraditional Warn about features not present in traditional C\n" + " -Wno-traditional Do not warn about traditional C\n" + " -Wundef Warn if an undefined macro is used by #if\n" + " -Wno-undef Do not warn about testing undefined macros\n" + " -Wimport Warn about the use of the #import directive\n" + msgstr "" + + #: cppinit.c:1929 + msgid "" + " -Wno-import Do not warn about the use of #import\n" + " -Werror Treat all warnings as errors\n" + " -Wno-error Do not treat warnings as errors\n" + " -Wsystem-headers Do not suppress warnings from system headers\n" + " -Wno-system-headers Suppress warnings from system headers\n" + " -Wall Enable all preprocessor warnings\n" + msgstr "" + + #: cppinit.c:1937 + msgid "" + " -M Generate make dependencies\n" + " -MM As -M, but ignore system header files\n" + " -MF Write dependency output to the given file\n" + " -MG Treat missing header file as generated files\n" + msgstr "" + + #: cppinit.c:1943 + msgid "" + " -MP\t\t\t Generate phony targets for all headers\n" + " -MQ Add a MAKE-quoted target\n" + " -MT Add an unquoted target\n" + msgstr "" + + #: cppinit.c:1948 + msgid "" + " -D Define a with string '1' as its value\n" + " -D= Define a with as its value\n" + " -A () Assert the to \n" + " -A- () Disable the to \n" + " -U Undefine \n" + " -v Display the version number\n" + msgstr "" + + #: cppinit.c:1956 + msgid "" + " -H Print the name of header files as they are used\n" + " -C Do not discard comments\n" + " -dM Display a list of macro definitions active at end\n" + " -dD Preserve macro definitions in output\n" + " -dN As -dD except that only the names are preserved\n" + " -dI Include #include directives in the output\n" + msgstr "" + + #: cppinit.c:1964 + msgid "" + " -fpreprocessed Treat the input file as already preprocessed\n" + " -ftabstop= Distance between tab stops for column reporting\n" + " -P Do not generate #line directives\n" + " -$ Do not allow '$' in identifiers\n" + " -remap Remap file names when including files.\n" + " --version Display version information\n" + " -h or --help Display this information\n" + msgstr "" + + #: cpplex.c:154 + #, c-format + msgid "trigraph ??%c converted to %c" + msgstr "" + + #: cpplex.c:162 + #, c-format + msgid "trigraph ??%c ignored" + msgstr "" + + #: cpplex.c:218 + msgid "backslash and newline separated by space" + msgstr "" + + #: cpplex.c:224 + #, fuzzy + msgid "backslash-newline at end of file" + msgstr "ìç Ýãêõñç äéáöõãÞ ìå ðéóùêÜèåôï óôï ôÝëïò ôïõ áëöáñéèìçôéêïý" + + #: cpplex.c:290 + msgid "\"/*\" within comment" + msgstr "" + + #: cpplex.c:373 + #, fuzzy + msgid "null character(s) ignored" + msgstr "ìç Ýãêõñïò ÷áñáêôÞñáò óôï áñ÷åßï: " + + #: cpplex.c:380 + #, c-format + msgid "%s in preprocessing directive" + msgstr "" + + #: cpplex.c:447 + #, c-format + msgid "attempt to use poisoned \"%s\"" + msgstr "" + + #: cpplex.c:455 + msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro" + msgstr "" + + #: cpplex.c:508 + msgid "'$' character(s) in identifier" + msgstr "" + + #: cpplex.c:589 + #, fuzzy, c-format + msgid "missing terminating %c character" + msgstr "Ý÷åé ðáñáëçöèåß ôï áñ÷åßï ðñïïñéóìïý" + + #: cpplex.c:594 + #, fuzzy + msgid "possible start of unterminated string literal" + msgstr "ìç ôåñìáôéæìÝíï áëöáñéèìçôéêü óôáèåñÜò" + + #: cpplex.c:689 + msgid "multi-line string literals are deprecated" + msgstr "" + + #: cpplex.c:712 + msgid "null character(s) preserved in literal" + msgstr "" + + #: cpplex.c:914 + #, fuzzy + msgid "no newline at end of file" + msgstr "%s: ðñüùñï ôÝëïò áñ÷åßïõ" + + #: cpplex.c:1034 tradcpp.c:1456 + #, fuzzy + msgid "unterminated comment" + msgstr "Ìç ôåñìáôéóìÝíç åíôïëÞ `s'" + + #: cpplex.c:1045 + msgid "C++ style comments are not allowed in ISO C89" + msgstr "" + + #: cpplex.c:1047 + msgid "(this will be reported only once per input file)" + msgstr "" + + #: cpplex.c:1052 + msgid "multi-line comment" + msgstr "" + + #: cpplex.c:1367 + #, fuzzy, c-format + msgid "unknown string token %s\n" + msgstr "¶ãíùóôÞ åðéëïãÞ ãéá ôï `s'" + + #: cpplex.c:1379 + #, fuzzy, c-format + msgid "unspellable token %s" + msgstr "%s: áäýíáôï ôï Üíïéãìá ôïõ %s: %m\n" + + #: cpplex.c:1635 + #, c-format + msgid "the meaning of '\\%c' varies with -traditional" + msgstr "" + + #: cpplex.c:1641 + msgid "incomplete universal-character-name" + msgstr "" + + #: cpplex.c:1655 + #, c-format + msgid "non-hex digit '%c' in universal-character-name" + msgstr "" + + #: cpplex.c:1663 + msgid "universal-character-name on EBCDIC target" + msgstr "" + + #: cpplex.c:1677 + #, fuzzy + msgid "universal-character-name out of range" + msgstr "U+%04X: åêôüò ïñßùí ÷áñáêôÞñáò" + + #: cpplex.c:1722 + msgid "the meaning of '\\a' varies with -traditional" + msgstr "" + + #: cpplex.c:1729 + #, c-format + msgid "non-ISO-standard escape sequence, '\\%c'" + msgstr "" + + #: cpplex.c:1739 + msgid "the meaning of '\\x' varies with -traditional" + msgstr "" + + #: cpplex.c:1758 f/lex.c:610 + msgid "\\x used with no following hex digits" + msgstr "" + + #: cpplex.c:1762 + #, fuzzy + msgid "hex escape sequence out of range" + msgstr "ìç Ýãêõñç äéáäéêáóßá äéáöõãÞò óôï ôÝëïò ôïõ áëöáñéèìéôéêïý" + + #: cpplex.c:1786 + #, fuzzy + msgid "octal escape sequence out of range" + msgstr "ìç Ýãêõñç äéáäéêáóßá äéáöõãÞò óôï ôÝëïò ôïõ áëöáñéèìéôéêïý" + + # src/main.c:663 + #: cpplex.c:1801 + #, fuzzy, c-format + msgid "unknown escape sequence '\\%c'" + msgstr "¶ãíùóôç óõìâïëïóåéñÜ `%s'" + + # src/main.c:663 + #: cpplex.c:1803 + #, fuzzy, c-format + msgid "unknown escape sequence: '\\%03o'" + msgstr "¶ãíùóôç óõìâïëïóåéñÜ `%s'" + + #: cpplex.c:1807 + msgid "escape sequence out of range for character" + msgstr "" + + #: cpplex.c:1897 + #, fuzzy + msgid "empty character constant" + msgstr "êåíü áëöáñéèìçôéêü" + + #: cpplex.c:1901 + #, fuzzy + msgid "character constant too long" + msgstr "ìç Ýãêõñïò óôáèåñüò ÷áñáêôÞñáò óôï áëöáñéèìéôéêü" + + #: cpplex.c:1904 + #, fuzzy + msgid "multi-character character constant" + msgstr "äéðëü üíïìá ÷áñáêôÞñá `%s'" + + #: cpplib.c:221 + #, c-format + msgid "extra tokens at end of #%s directive" + msgstr "" + + #: cpplib.c:275 + msgid "style of line directive is a GCC extension" + msgstr "" + + #: cpplib.c:283 + #, c-format + msgid "#%s is a GCC extension" + msgstr "" + + #: cpplib.c:294 + msgid "suggest not using #elif in traditional C" + msgstr "" + + #: cpplib.c:297 + #, c-format + msgid "traditional C ignores #%s with the # indented" + msgstr "" + + #: cpplib.c:301 + #, c-format + msgid "suggest hiding #%s from traditional C with an indented #" + msgstr "" + + #: cpplib.c:383 + #, c-format + msgid "invalid preprocessing directive #%s" + msgstr "" + + #: cpplib.c:438 + #, c-format + msgid "no macro name given in #%s directive" + msgstr "" + + #: cpplib.c:442 + #, c-format + msgid "\"%s\" cannot be used as a macro name as it is an operator in C++" + msgstr "" + + #: cpplib.c:445 + #, fuzzy + msgid "macro names must be identifiers" + msgstr "äéðëüò ðñïóäéïñéóôÞò ìçíýìáôïò" + + #: cpplib.c:456 + #, c-format + msgid "\"%s\" cannot be used as a macro name" + msgstr "" + + #: cpplib.c:494 + #, fuzzy, c-format + msgid "undefining \"%s\"" + msgstr "Ìç ïñéóìÝíï üíïìá %s" + + #: cpplib.c:540 + #, fuzzy + msgid "missing terminating > character" + msgstr "Ý÷åé ðáñáëçöèåß ôï áñ÷åßï ðñïïñéóìïý" + + #: cpplib.c:575 + #, c-format + msgid "#%s expects \"FILENAME\" or " + msgstr "" + + #: cpplib.c:586 + #, fuzzy, c-format + msgid "empty file name in #%s" + msgstr "Ìç ïñéóìÝíï üíïìá %s" + + #: cpplib.c:605 + msgid "#include_next in primary source file" + msgstr "" + + #: cpplib.c:612 + msgid "#import is obsolete, use an #ifndef wrapper in the header file" + msgstr "" + + #: cpplib.c:620 + msgid "#include nested too deeply" + msgstr "" + + #: cpplib.c:677 + #, c-format + msgid "invalid flag \"%s\" in line directive" + msgstr "" + + #: cpplib.c:732 + #, fuzzy, c-format + msgid "\"%s\" after #line is not a positive integer" + msgstr "%s' äåí åßíáé éó÷ýùí èåôéêüò áêÝñáéïò." + + #: cpplib.c:739 + #, fuzzy + msgid "line number out of range" + msgstr "%s: áñéèìüò ãñáììÞò Ýîù áðü ôá üñéá" + + #: cpplib.c:777 + #, fuzzy, c-format + msgid "\"%s\" is not a valid filename" + msgstr "%s' äåí åßíáé éó÷ýùí èåôéêüò áêÝñáéïò." + + #: cpplib.c:846 + #, fuzzy + msgid "invalid #ident directive" + msgstr "%%%c: êáôåõèõíôÞñéïò ãñáììÞ ìç Ýãêõñç." + + #: cpplib.c:934 + #, c-format + msgid "registering \"%s\" as both a pragma and a pragma namespace" + msgstr "" + + #: cpplib.c:937 + #, c-format + msgid "#pragma %s %s is already registered" + msgstr "" + + #: cpplib.c:939 + #, fuzzy, c-format + msgid "#pragma %s is already registered" + msgstr "ï ÷Üñôçò ÷áñáêôÞñùí `%s' ïñßóôçêå Þäç" + + #: cpplib.c:1014 + msgid "#pragma once is obsolete" + msgstr "" + + #: cpplib.c:1017 + msgid "#pragma once in main file" + msgstr "" + + #: cpplib.c:1041 + msgid "invalid #pragma GCC poison directive" + msgstr "" + + #: cpplib.c:1050 + #, c-format + msgid "poisoning existing macro \"%s\"" + msgstr "" + + #: cpplib.c:1070 + msgid "#pragma system_header ignored outside include file" + msgstr "" + + #: cpplib.c:1095 + #, fuzzy, c-format + msgid "cannot find source %s" + msgstr "áäõíáìßá áíïßãìáôïò õðïäï÷Þò: %s" + + #: cpplib.c:1099 + #, c-format + msgid "current file is older than %s" + msgstr "" + + #: cpplib.c:1174 + msgid "_Pragma takes a parenthesized string literal" + msgstr "" + + #: cpplib.c:1273 + msgid "#else without #if" + msgstr "" + + #: cpplib.c:1278 tradcpp.c:3860 + msgid "#else after #else" + msgstr "#else ìåôÜ áðü #else" + + #: cpplib.c:1280 cpplib.c:1314 + msgid "the conditional began here" + msgstr "" + + #: cpplib.c:1307 + msgid "#elif without #if" + msgstr "" + + #: cpplib.c:1312 tradcpp.c:3555 + msgid "#elif after #else" + msgstr "#elif ìåôÜ áðü #else" + + #: cpplib.c:1343 + msgid "#endif without #if" + msgstr "" + + #: cpplib.c:1426 tradcpp.c:3252 + msgid "missing '(' after predicate" + msgstr "" + + #: cpplib.c:1441 tradcpp.c:3266 + msgid "missing ')' to complete answer" + msgstr "" + + #: cpplib.c:1461 tradcpp.c:3272 + msgid "predicate's answer is empty" + msgstr "" + + #: cpplib.c:1491 tradcpp.c:3320 + #, fuzzy + msgid "assertion without predicate" + msgstr "Ç ëåéôïõñãßá äåí åðéôñÝðåôáé" + + #: cpplib.c:1493 tradcpp.c:3322 + #, fuzzy + msgid "predicate must be an identifier" + msgstr "äéðëüò ðñïóäéïñéóôÞò ìçíýìáôïò" + + #: cpplib.c:1575 tradcpp.c:3419 + #, c-format + msgid "\"%s\" re-asserted" + msgstr "" + + #: cpplib.c:1805 + #, fuzzy, c-format + msgid "unterminated #%s" + msgstr "ìç ôåñìáôéæüìåío áëöáñéèìçôéêü" + + #: cppmacro.c:148 + #, fuzzy, c-format + msgid "invalid built-in macro \"%s\"" + msgstr "ìç Ýãêõñï ìÞêïò ãñáììÞò: %s" + + #: cppmacro.c:348 + #, fuzzy + msgid "invalid string literal, ignoring final '\\'" + msgstr "ìç Ýãêõñïò áñ÷éêüò áñéèìüò ãñáììÞò: `%s'" + + #: cppmacro.c:440 + #, c-format + msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token" + msgstr "" + + #: cppmacro.c:566 + msgid "directives may not be used inside a macro argument" + msgstr "" + + #: cppmacro.c:578 + #, c-format + msgid "unterminated argument list invoking macro \"%s\"" + msgstr "" + + #: cppmacro.c:595 + #, fuzzy + msgid "ISO C99 requires rest arguments to be used" + msgstr "ÊáêÞ áßôçóç ðáñáìÝôñùí" + + #: cppmacro.c:600 + #, c-format + msgid "macro \"%s\" requires %u arguments, but only %u given" + msgstr "" + + #: cppmacro.c:611 + #, c-format + msgid "macro \"%s\" passed %u arguments, but takes just %u" + msgstr "" + + #: cppmacro.c:694 + #, c-format + msgid "function-like macro \"%s\" must be used with arguments in traditional C" + msgstr "" + + #: cppmacro.c:1190 + #, fuzzy, c-format + msgid "duplicate macro parameter \"%s\"" + msgstr "äéðëü üíïìá ÷áñáêôÞñá `%s'" + + #: cppmacro.c:1218 + #, c-format + msgid "\"%s\" may not appear in macro parameter list" + msgstr "" + + #: cppmacro.c:1225 + msgid "macro parameters must be comma-separated" + msgstr "" + + #: cppmacro.c:1242 + msgid "parameter name missing" + msgstr "" + + #: cppmacro.c:1256 + msgid "anonymous variadic macros were introduced in C99" + msgstr "" + + #: cppmacro.c:1259 + msgid "ISO C does not permit named variadic macros" + msgstr "" + + #: cppmacro.c:1268 + msgid "missing ')' in macro parameter list" + msgstr "" + + #: cppmacro.c:1346 + msgid "ISO C requires whitespace after the macro name" + msgstr "" + + #: cppmacro.c:1376 + msgid "'#' is not followed by a macro parameter" + msgstr "" + + #: cppmacro.c:1396 + msgid "'##' cannot appear at either end of a macro expansion" + msgstr "" + + #: cppmacro.c:1432 + #, fuzzy, c-format + msgid "\"%s\" redefined" + msgstr "áüñéóôï" + + #: cppmacro.c:1436 + #, fuzzy + msgid "this is the location of the previous definition" + msgstr "áõôÞ åßíáé ç èÝóç ôïõ ðñþôïõ ïñéóìïý" + + #: cppmacro.c:1500 + #, c-format + msgid "macro argument \"%s\" would be stringified with -traditional" + msgstr "" + + #: cppmacro.c:1524 + #, c-format + msgid "invalid hash type %d in cpp_macro_definition" + msgstr "" + + #: cppmain.c:121 + #, c-format + msgid "invalid option %s" + msgstr "ìç Ýãêõñç åðéëïãÞ %s" + + #: cppspec.c:131 + #, fuzzy, c-format + msgid "\"%s\" is not a valid option to the preprocessor" + msgstr "%s' äåí åßíáé éó÷ýùí èåôéêüò áêÝñáéïò." + + #: cppspec.c:155 + msgid "too many input files" + msgstr "õðåñâïëéêÜ ðïëëÜ áñ÷åßá åéóüäïõ" + + #: cse.c:7092 + #, c-format + msgid ";; Processing block from %d to %d, %d sets.\n" + msgstr "" + + #: diagnostic.c:784 + #, c-format + msgid "%s:%d: warning: " + msgstr "%s:%d: ðñïåéäïðïßçóç: " + + #: diagnostic.c:791 + #, c-format + msgid "%s: warning: " + msgstr "%s: ðñïåéäïðïßçóç: " + + #: diagnostic.c:871 + msgid "((anonymous))" + msgstr "((áíþíõìï))" + + #: diagnostic.c:941 + #, c-format + msgid "%s: warnings being treated as errors\n" + msgstr "" + + # src/request.c:37 + #: diagnostic.c:978 + #, c-format + msgid "%s: %s: " + msgstr "%s: %s: " + + #: diagnostic.c:1057 + msgid "sorry, not implemented: " + msgstr "óõããíþìç, ç ëåéôïõñãßá äåí Ý÷åé õëïðïéçèåß: " + + #: diagnostic.c:1076 + #, c-format + msgid "%s " + msgstr "%s " + + #: diagnostic.c:1078 + #, c-format + msgid " %s" + msgstr "" + + #: diagnostic.c:1102 + msgid "At top level:" + msgstr "" + + #: diagnostic.c:1107 + #, c-format + msgid "In member function `%s':" + msgstr "" + + #: diagnostic.c:1111 + #, c-format + msgid "In function `%s':" + msgstr "Óôç óõíÜñôçóç `%s':" + + #: diagnostic.c:1195 + #, fuzzy + msgid "compilation terminated.\n" + msgstr "Ç ëåéôïõñãßá äåí åðéôñÝðåôáé" + + #: diagnostic.c:1226 + #, c-format + msgid "%s:%d: confused by earlier errors, bailing out\n" + msgstr "" + + #: diagnostic.c:1240 diagnostic.c:1390 + #, c-format + msgid "" + "Please submit a full bug report,\n" + "with preprocessed source if appropriate.\n" + "See %s for instructions.\n" + msgstr "" + + #: diagnostic.c:1388 + msgid "Internal compiler error: Error reporting routines re-entered.\n" + msgstr "" + + #: diagnostic.c:1450 + #, fuzzy, c-format + msgid "Internal compiler error in %s, at %s:%d" + msgstr "åóùôåñéêü óöÜëìá óôï %s, ãñáììÞ %u" + + #: diagnostic.c:1495 + #, c-format + msgid "In file included from %s:%d" + msgstr "" + + #: diagnostic.c:1498 + #, c-format + msgid "" + ",\n" + " from %s:%d" + msgstr "" + + #: diagnostic.c:1499 + msgid ":\n" + msgstr "" + + #: diagnostic.c:1532 diagnostic.c:1549 + #, c-format + msgid "`%s' is deprecated (declared at %s:%d)" + msgstr "" + + #: diagnostic.c:1552 + #, fuzzy, c-format + msgid "`%s' is deprecated" + msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï" + + #: diagnostic.c:1555 + #, c-format + msgid "type is deprecated (declared at %s:%d)" + msgstr "" + + #: diagnostic.c:1558 + msgid "type is deprecated" + msgstr "" + + #: dwarf2out.c:3034 + #, fuzzy, c-format + msgid "DW_LOC_OP %s not implemented\n" + msgstr "Ç ëåéôïõñãßá äåí Ý÷åé õëïðïéçèåß" + + #: dwarfout.c:2089 + #, c-format + msgid "internal regno botch: regno = %d\n" + msgstr "" + + #: dwarfout.c:6291 + #, fuzzy + msgid "can't get current directory" + msgstr "Äåí åßíáé äõíáôüí íá ëçöèåß ï ôñÝ÷ùí êáôÜëïãïò." + + #: emit-rtl.c:1091 + msgid "can't access real part of complex value in hard register" + msgstr "" + + #: emit-rtl.c:1113 + msgid "can't access imaginary part of complex value in hard register" + msgstr "" + + #: emit-rtl.c:3140 + msgid "ICE: emit_insn used where emit_jump_insn needed:\n" + msgstr "" + + #: errors.c:136 + #, c-format + msgid "abort in %s, at %s:%d" + msgstr "" + + #: except.c:360 + msgid "exception handling disabled, use -fexceptions to enable" + msgstr "" + + #: except.c:3062 + msgid "argument of `__builtin_eh_return_regno' must be constant" + msgstr "" + + #: except.c:3173 except.c:3195 + #, fuzzy + msgid "__builtin_eh_return not supported on this target" + msgstr "óõìâïëéêïß óýíäåóìïé äåí õðïóôçñßæïíôáé óôï óýóôçìá áõôü" + + #: explow.c:1357 + #, fuzzy + msgid "stack limits not supported on this target" + msgstr "óõìâïëéêïß óýíäåóìïé äåí õðïóôçñßæïíôáé óôï óýóôçìá áõôü" + + #: expr.c:2926 + msgid "function using short complex types cannot be inline" + msgstr "" + + #: expr.c:5766 expr.c:5775 expr.c:5784 expr.c:5789 expr.c:6075 expr.c:6091 + msgid "unsupported wide integer operation" + msgstr "" + + #: expr.c:6140 + #, c-format + msgid "prior parameter's size depends on `%s'" + msgstr "" + + #: expr.c:6474 + msgid "returned value in block_exit_expr" + msgstr "" + + #: final.c:1209 + msgid "negative insn length" + msgstr "" + + #: final.c:2627 + #, fuzzy + msgid "could not split insn" + msgstr "áäõíáìßá åýñåóçò âñü÷ïõ" + + #: final.c:2971 + #, fuzzy, c-format + msgid "invalid `asm': %s" + msgstr "ìç Ýãêõñï ìÝãåèïò ïñéæüíôéïõ óôçëïèÝôç: %s" + + #: final.c:2973 + #, c-format + msgid "output_operand: %s" + msgstr "" + + #: final.c:3146 + msgid "nested assembly dialect alternatives" + msgstr "" + + #: final.c:3163 final.c:3175 + #, fuzzy + msgid "unterminated assembly dialect alternative" + msgstr "ìç ôåñìáôéæüìåíï óõìâïëéêü üíïìá" + + #: final.c:3219 + #, c-format + msgid "operand number missing after %-letter" + msgstr "" + + #: final.c:3222 final.c:3261 + #, fuzzy + msgid "operand number out of range" + msgstr "Ï áñéèìüò óýíäåóìïõ åßíáé Ýîù áðü ôï üñéï" + + #: final.c:3280 + #, fuzzy, c-format + msgid "invalid %%-code" + msgstr "ìç Ýãêõñï äéêáßùìá" + + #: final.c:3311 + msgid "`%l' operand isn't a label" + msgstr "" + + #. We can't handle floating point constants; + #. PRINT_OPERAND must handle them. + #: config/i386/i386.c:5280 config/pdp11/pdp11.c:1570 final.c:3418 + #: vmsdbgout.c:478 + msgid "floating constant misused" + msgstr "" + + #: config/i386/i386.c:5334 config/pdp11/pdp11.c:1617 final.c:3473 + #: vmsdbgout.c:535 + #, fuzzy + msgid "invalid expression as operand" + msgstr "%s: ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç: %s" + + #: flow.c:360 + msgid "function might be possible candidate for attribute `noreturn'" + msgstr "" + + #: flow.c:365 + msgid "`noreturn' function does return" + msgstr "" + + #: flow.c:384 + msgid "control reaches end of non-void function" + msgstr "ï Ýëåã÷ïò öèÜíåé óôï ôÝëïò ìç-êåíÞò óõíÜñôçóçò" + + #: flow.c:1569 + msgid "Attempt to delete prologue/epilogue insn:" + msgstr "" + + #: fold-const.c:3114 fold-const.c:3127 + #, c-format + msgid "comparison is always %d due to width of bit-field" + msgstr "" + + #: fold-const.c:4169 fold-const.c:4186 + #, c-format + msgid "comparison is always %d" + msgstr "" + + #: fold-const.c:4317 + msgid "`or' of unmatched not-equal tests is always 1" + msgstr "" + + #: fold-const.c:4322 + msgid "`and' of mutually exclusive equal-tests is always 0" + msgstr "" + + #: function.c:5378 + #, c-format + msgid "`%s' might be used uninitialized in this function" + msgstr "" + + #: function.c:5385 + #, c-format + msgid "variable `%s' might be clobbered by `longjmp' or `vfork'" + msgstr "" + + #: function.c:5404 + #, c-format + msgid "argument `%s' might be clobbered by `longjmp' or `vfork'" + msgstr "" + + #: function.c:6270 + msgid "function returns an aggregate" + msgstr "" + + #: function.c:6789 + #, fuzzy, c-format + msgid "unused parameter `%s'" + msgstr "Üãíùóôïò ÷áñáêôÞñáò `%s'" + + # src/main.c:785 + #: gcc.c:1100 + #, fuzzy, c-format + msgid "ambiguous abbreviation %s" + msgstr "ÁóáöÞò ìïñöÞ `%s'" + + #: gcc.c:1127 + #, c-format + msgid "incomplete `%s' option" + msgstr "" + + #: gcc.c:1138 + #, fuzzy, c-format + msgid "missing argument to `%s' option" + msgstr "Ëåßðåé ðáñÜìåôñïò ãéá `%s'" + + #: gcc.c:1151 + #, fuzzy, c-format + msgid "extraneous argument to `%s' option" + msgstr "Ëåßðåé ðáñÜìåôñïò ãéá `%s'" + + #: gcc.c:1465 + msgid "Using built-in specs.\n" + msgstr "" + + #: gcc.c:1639 + #, fuzzy, c-format + msgid "Setting spec %s to '%s'\n\n" + msgstr "äçìéïõñãßá %s %s óôï %s" + + #: gcc.c:1737 + #, c-format + msgid "Reading specs from %s\n" + msgstr "" + + #: gcc.c:1835 gcc.c:1854 + #, c-format + msgid "specs %%include syntax malformed after %ld characters" + msgstr "" + + #: gcc.c:1862 + #, fuzzy, c-format + msgid "could not find specs file %s\n" + msgstr "Äåí ìðüñåóá íá áíïßîù ôï áñ÷åßï %s" + + #: gcc.c:1878 gcc.c:1886 gcc.c:1895 gcc.c:1904 + #, c-format + msgid "specs %%rename syntax malformed after %ld characters" + msgstr "" + + #: gcc.c:1913 + #, c-format + msgid "specs %s spec was not found to be renamed" + msgstr "" + + #: gcc.c:1920 + #, fuzzy, c-format + msgid "rename spec %s to %s\n" + msgstr "äçìéïõñãßá %s %s óôï %s" + + #: gcc.c:1922 + #, c-format + msgid "spec is '%s'\n\n" + msgstr "" + + #: gcc.c:1935 + #, fuzzy, c-format + msgid "specs unknown %% command after %ld characters" + msgstr "ëßóôá ìå üëá ôá ãíùóôÜ óýíïëá ÷áñáêôÞñùí" + + #: gcc.c:1946 gcc.c:1959 + #, c-format + msgid "specs file malformed after %ld characters" + msgstr "" + + #: gcc.c:2013 + msgid "spec file has no spec for linking" + msgstr "" + + #: gcc.c:2725 + #, fuzzy + msgid "-pipe not supported" + msgstr "Ôï ai_socktype äåí õðïóôçñßæåôáé" + + #: gcc.c:2779 + msgid "\nGo ahead? (y or n) " + msgstr "" + + #: gcc.c:2878 + #, c-format + msgid "" + "Internal error: %s (program %s)\n" + "Please submit a full bug report.\n" + "See %s for instructions." + msgstr "" + + #: gcc.c:2896 + #, c-format + msgid "# %s %.2f %.2f\n" + msgstr "" + + #: gcc.c:3029 + #, fuzzy, c-format + msgid "Usage: %s [options] file...\n" + msgstr "÷ñÞóç: %s áñ÷åßï_åéóüäïõ\n" + + #: gcc.c:3030 + #, fuzzy + msgid "Options:\n" + msgstr " (åðéëïãÝò:" + + #: gcc.c:3032 + msgid " -pass-exit-codes Exit with highest error code from a phase\n" + msgstr "" + + #: gcc.c:3033 + msgid " --help Display this information\n" + msgstr "" + + #: gcc.c:3034 + msgid " --target-help Display target specific command line options\n" + msgstr "" + + #: gcc.c:3036 + msgid " (Use '-v --help' to display command line options of sub-processes)\n" + msgstr "" + + #: gcc.c:3037 + msgid " -dumpspecs Display all of the built in spec strings\n" + msgstr "" + + #: gcc.c:3038 + msgid " -dumpversion Display the version of the compiler\n" + msgstr "" + + #: gcc.c:3039 + msgid " -dumpmachine Display the compiler's target processor\n" + msgstr "" + + #: gcc.c:3040 + msgid " -print-search-dirs Display the directories in the compiler's search path\n" + msgstr "" + + #: gcc.c:3041 + msgid " -print-libgcc-file-name Display the name of the compiler's companion library\n" + msgstr "" + + #: gcc.c:3042 + msgid " -print-file-name= Display the full path to library \n" + msgstr "" + + #: gcc.c:3043 + msgid " -print-prog-name= Display the full path to compiler component \n" + msgstr "" + + #: gcc.c:3044 + msgid " -print-multi-directory Display the root directory for versions of libgcc\n" + msgstr "" + + #: gcc.c:3045 + msgid "" + " -print-multi-lib Display the mapping between command line options and\n" + " multiple library search directories\n" + msgstr "" + + #: gcc.c:3048 + msgid " -Wa, Pass comma-separated on to the assembler\n" + msgstr "" + + #: gcc.c:3049 + msgid " -Wp, Pass comma-separated on to the preprocessor\n" + msgstr "" + + #: gcc.c:3050 + msgid " -Wl, Pass comma-separated on to the linker\n" + msgstr "" + + #: gcc.c:3051 + msgid " -Xlinker Pass on to the linker\n" + msgstr "" + + #: gcc.c:3052 + msgid " -save-temps Do not delete intermediate files\n" + msgstr "" + + #: gcc.c:3053 + msgid " -pipe Use pipes rather than intermediate files\n" + msgstr "" + + #: gcc.c:3054 + msgid " -time Time the execution of each subprocess\n" + msgstr "" + + #: gcc.c:3055 + msgid " -specs= Override built-in specs with the contents of \n" + msgstr "" + + #: gcc.c:3056 + msgid " -std= Assume that the input sources are for \n" + msgstr "" + + #: gcc.c:3057 + msgid " -B Add to the compiler's search paths\n" + msgstr "" + + #: gcc.c:3058 + msgid " -b Run gcc for target , if installed\n" + msgstr "" + + #: gcc.c:3059 + msgid " -V Run gcc version number , if installed\n" + msgstr "" + + #: gcc.c:3060 + msgid " -v Display the programs invoked by the compiler\n" + msgstr "" + + #: gcc.c:3061 + msgid " -### Like -v but options quoted and commands not executed\n" + msgstr "" + + #: gcc.c:3062 + msgid " -E Preprocess only; do not compile, assemble or link\n" + msgstr "" + + #: gcc.c:3063 + msgid " -S Compile only; do not assemble or link\n" + msgstr "" + + #: gcc.c:3064 + msgid " -c Compile and assemble, but do not link\n" + msgstr "" + + #: gcc.c:3065 + msgid " -o Place the output into \n" + msgstr "" + + #: gcc.c:3066 + msgid "" + " -x Specify the language of the following input files\n" + " Permissable languages include: c c++ assembler none\n" + " 'none' means revert to the default behavior of\n" + " guessing the language based on the file's extension\n" + msgstr "" + + #: gcc.c:3073 + #, c-format + msgid "" + "\n" + "Options starting with -g, -f, -m, -O, -W, or --param are automatically\n" + " passed on to the various sub-processes invoked by %s. In order to pass\n" + " other options on to these processes the -W options must be used.\n" + msgstr "" + + #. translate_options () has turned --version into -fversion. + #: gcc.c:3353 + #, c-format + msgid "%s (GCC) %s\n" + msgstr "" + + #: gcc.c:3354 + #, fuzzy + msgid "Copyright (C) 2002 Free Software Foundation, Inc.\n" + msgstr "ÐíåõìáôéêÜ Äéêáéþìáôá (C) 2000 Free Software Foundation, Inc." + + # src/main.c:850 + #: gcc.c:3356 gcov.c:320 + #, fuzzy + msgid "" + "This is free software; see the source for copying conditions. There is NO\n" + "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" + "\n" + msgstr "" + "Áõôü åßíáé åëåýèåñï ëïãéóìéêü· äåßôå ôïí ðçãáßï êþäéêá ãéá ôïõò êáíïíéóìïýò\n" + "áíôéãñáöÞò. Äåí õðÜñ÷åé ÊÁÌÉÁ åããýçóç· ïýôå áêüìá ãéá ËÅÉÔÏÕÑÃÉÊÏÔÇÔÁ Þ \n" + "ÊÁÔÁËËÇËÏÔÇÔÁ ÃÉÁ ÅÍÁ ÓÕÃÊÅÊÑÉÌÅÍÏ ÓÊÏÐÏ.\n" + + #: gcc.c:3455 + #, fuzzy + msgid "argument to `-Xlinker' is missing" + msgstr "Ý÷ïõí ðáñáëçöèåß ïñßóìáôá" + + #: gcc.c:3463 + #, fuzzy + msgid "argument to `-l' is missing" + msgstr "Ý÷ïõí ðáñáëçöèåß ïñßóìáôá" + + #: gcc.c:3480 + #, fuzzy + msgid "argument to `-specs' is missing" + msgstr "Ý÷ïõí ðáñáëçöèåß ïñßóìáôá" + + #: gcc.c:3495 + #, fuzzy + msgid "argument to `-specs=' is missing" + msgstr "Ý÷ïõí ðáñáëçöèåß ïñßóìáôá" + + #: gcc.c:3526 + #, fuzzy + msgid "argument to `-b' is missing" + msgstr "Ý÷ïõí ðáñáëçöèåß ïñßóìáôá" + + #: gcc.c:3541 + #, fuzzy + msgid "argument to `-B' is missing" + msgstr "Ý÷ïõí ðáñáëçöèåß ïñßóìáôá" + + #: gcc.c:3611 + #, fuzzy + msgid "argument to `-V' is missing" + msgstr "Ý÷ïõí ðáñáëçöèåß ïñßóìáôá" + + #: gcc.c:3632 gcc.c:3639 gcc.c:3646 + #, fuzzy + msgid "invalid version number format" + msgstr "ìç Ýãêõñç äéáìüñöùóç óõíôüìåõóçò" + + #: gcc.c:3757 + msgid "cannot specify -o with -c or -S and multiple compilations" + msgstr "" + + #: gcc.c:3928 + msgid "warning: -pipe ignored because -save-temps specified" + msgstr "" + + #: gcc.c:3932 + msgid "warning: -pipe ignored because -time specified" + msgstr "" + + #: gcc.c:3944 + #, fuzzy + msgid "argument to `-x' is missing" + msgstr "Ý÷ïõí ðáñáëçöèåß ïñßóìáôá" + + #: gcc.c:3972 + #, fuzzy, c-format + msgid "argument to `-%s' is missing" + msgstr "Ý÷ïõí ðáñáëçöèåß ïñßóìáôá" + + #: gcc.c:4033 + #, c-format + msgid "warning: `-x %s' after last input file has no effect" + msgstr "" + + #: gcc.c:4332 + #, fuzzy + msgid "invalid specification! Bug in cc" + msgstr "Ìç Ýãêõñç ñýèìéóç èýñáò (port)" + + #: gcc.c:4481 + #, c-format + msgid "%s\n" + msgstr "" + + #. Catch the case where a spec string contains something like + #. '%{foo:%*}'. ie there is no * in the pattern on the left + #. hand side of the :. + #: gcc.c:5040 + #, c-format + msgid "spec failure: '%%*' has not been initialized by pattern match" + msgstr "" + + #: gcc.c:5049 + #, c-format + msgid "warning: use of obsolete %%[ operator in specs" + msgstr "" + + #: gcc.c:5067 + #, c-format + msgid "Processing spec %c%s%c, which is '%s'\n" + msgstr "" + + #: gcc.c:5192 + #, fuzzy, c-format + msgid "spec failure: unrecognized spec option '%c'" + msgstr "%s: ìç áíáãíùñßóéìç åðéëïãÞ `-%c'\n" + + #: gcc.c:5302 + msgid "mismatched braces in specs" + msgstr "" + + #: gcc.c:5980 + #, c-format + msgid "unrecognized option `-%s'" + msgstr "ìç áíáãíùñßóçìç åðéëïãÞ `-%s'" + + #: gcc.c:5986 + #, fuzzy, c-format + msgid "install: %s%s\n" + msgstr "Ôïðïèåóßá: %s%s\n" + + #: gcc.c:5987 + #, c-format + msgid "programs: %s\n" + msgstr "" + + #: gcc.c:5988 + #, fuzzy, c-format + msgid "libraries: %s\n" + msgstr "áêáôÜëëçëç êáíïíéêÞ Ýêöñáóç: %s\n" + + #: gcc.c:6036 + msgid "\nFor bug reporting instructions, please see:\n" + msgstr "" + + #: gcc.c:6052 + #, c-format + msgid "Configured with: %s\n" + msgstr "" + + #: gcc.c:6066 + #, c-format + msgid "Thread model: %s\n" + msgstr "" + + #: gcc.c:6077 + #, c-format + msgid "gcc version %s\n" + msgstr "" + + #: gcc.c:6079 + #, c-format + msgid "gcc driver version %s executing gcc version %s\n" + msgstr "" + + #: gcc.c:6087 + #, fuzzy + msgid "no input files" + msgstr "Äåí õðÜñ÷ïõí áñ÷åßá åéóüäïõ" + + #: gcc.c:6125 + #, fuzzy, c-format + msgid "%s: %s compiler not installed on this system" + msgstr "óõìâïëéêïß óýíäåóìïé äåí õðïóôçñßæïíôáé óôï óýóôçìá áõôü" + + #: gcc.c:6200 + #, c-format + msgid "%s: linker input file unused because linking not done" + msgstr "" + + #: gcc.c:6243 + #, c-format + msgid "language %s not recognized" + msgstr "" + + #: gcc.c:6346 + #, fuzzy + msgid "internal gcc abort" + msgstr "Åóùôåñéêü óöÜëìá NIS" + + # src/main.c:178 + #: gcov.c:282 + #, fuzzy + msgid "Internal gcov abort.\n" + msgstr "Åóùôåñéêü óöÜëìá (recoding)" + + #: gcov.c:295 + #, fuzzy + msgid "Usage: gcov [OPTION]... SOURCEFILE\n\n" + msgstr "×ñÞóç: %s [ÅÐÉËÏÃÇ]... [ÁÑ×ÅÉÏ]\n" + + #: gcov.c:296 + #, fuzzy + msgid "Print code coverage information.\n\n" + msgstr "åìöÜíéóç ðëçñïöïñéþí ðñïüäïõ" + + #: gcov.c:297 + msgid " -h, --help Print this help, then exit\n" + msgstr "" + + #: gcov.c:298 + msgid " -v, --version Print version number, then exit\n" + msgstr "" + + #: gcov.c:299 + msgid " -b, --branch-probabilities Include branch probabilities in output\n" + msgstr "" + + #: gcov.c:300 + msgid "" + " -c, --branch-counts Given counts of branches taken\n" + " rather than percentages\n" + msgstr "" + + #: gcov.c:302 + msgid " -n, --no-output Do not create an output file\n" + msgstr "" + + #: gcov.c:303 + msgid "" + " -l, --long-file-names Use long output file names for included\n" + " source files\n" + msgstr "" + + #: gcov.c:305 + msgid " -f, --function-summaries Output summaries for each function\n" + msgstr "" + + #: gcov.c:306 + msgid " -o, --object-directory OBJDIR Search for object files in OBJDIR\n" + msgstr "" + + #: gcov.c:307 + #, c-format + msgid "" + "\n" + "For bug reporting instructions, please see:\n" + "%s.\n" + msgstr "" + + #: gcov.c:317 + #, c-format + msgid "gcov (GCC) %s\n" + msgstr "" + + #: gcov.c:318 + #, fuzzy + msgid "Copyright (C) 2001 Free Software Foundation, Inc.\n" + msgstr "ÐíåõìáôéêÜ Äéêáéþìáôá (C) 2000 Free Software Foundation, Inc." + + #: gcov.c:462 + #, fuzzy, c-format + msgid "Could not open basic block file %s.\n" + msgstr "Äåí ìðüñåóá íá áíïßîù ôï áñ÷åßï %s" + + #: gcov.c:471 + #, fuzzy, c-format + msgid "Could not open data file %s.\n" + msgstr "Äåí ìðüñåóá íá áíïßîù ôï áñ÷åßï %s" + + #: gcov.c:472 + msgid "Assuming that all execution counts are zero.\n" + msgstr "" + + #: gcov.c:478 + #, fuzzy, c-format + msgid "Could not open program flow graph file %s.\n" + msgstr "Áäýíáôç ç äçìéïõñãßá áñ÷åßïõ êáôáãñáöþí \"%s\"" + + #: gcov.c:489 + #, fuzzy, c-format + msgid "No executable code associated with file %s.\n" + msgstr "ÊáìéÜ äéåýèõíóç äåí óõíäÝåôáé ìå ôï üíïìá" + + #: gcov.c:789 + msgid ".da file contents exhausted too early\n" + msgstr "" + + #: gcov.c:792 + msgid ".da file contents not exhausted\n" + msgstr "" + + #: gcov.c:973 + #, c-format + msgid "%6.2f%% of %d source lines executed in function %s\n" + msgstr "" + + #: gcov.c:977 + #, c-format + msgid "No executable source lines in function %s\n" + msgstr "" + + #: gcov.c:984 + #, c-format + msgid "%6.2f%% of %d branches executed in function %s\n" + msgstr "" + + #: gcov.c:988 + #, c-format + msgid "%6.2f%% of %d branches taken at least once in function %s\n" + msgstr "" + + #: gcov.c:993 + #, fuzzy, c-format + msgid "No branches in function %s\n" + msgstr "Äåí âñÝèçêáí ôáéñéÜóìáôá óôç ìïñöÞ `%s'.\n" + + #: gcov.c:995 + #, c-format + msgid "%6.2f%% of %d calls executed in function %s\n" + msgstr "" + + #: gcov.c:999 + #, fuzzy, c-format + msgid "No calls in function %s\n" + msgstr "Äåí âñÝèçêáí URL óôï %s.\n" + + #: gcov.c:1126 + #, fuzzy, c-format + msgid "didn't use all bb entries of graph, function %s\n" + msgstr "äéáãñáöÞ üëùí ôùí åããñáöþí ôïõ êáôáëüãïõ %s\n" + + #: gcov.c:1128 + #, c-format + msgid "block_num = %ld, num_blocks = %d\n" + msgstr "" + + #: gcov.c:1166 + #, c-format + msgid "ERROR: too many basic blocks in .bb file %s\n" + msgstr "" + + #: gcov.c:1243 + #, c-format + msgid "%6.2f%% of %d source lines executed in file %s\n" + msgstr "" + + #: gcov.c:1247 + #, c-format + msgid "No executable source lines in file %s\n" + msgstr "" + + #: gcov.c:1254 + #, c-format + msgid "%6.2f%% of %d branches executed in file %s\n" + msgstr "" + + #: gcov.c:1258 + #, c-format + msgid "%6.2f%% of %d branches taken at least once in file %s\n" + msgstr "" + + #: gcov.c:1263 + #, fuzzy, c-format + msgid "No branches in file %s\n" + msgstr "Äåí õðÜñ÷åé áñ÷åßï `%s'.\n\n" + + #: gcov.c:1265 + #, c-format + msgid "%6.2f%% of %d calls executed in file %s\n" + msgstr "" + + #: gcov.c:1269 + #, fuzzy, c-format + msgid "No calls in file %s\n" + msgstr "äçìéïõñãßá áñ÷åßïõ `%s'\n" + + #: gcov.c:1281 + #, fuzzy, c-format + msgid "Could not open source file %s.\n" + msgstr "Äåí ìðüñåóá íá áíïßîù ôï áñ÷åßï %s" + + #: gcov.c:1331 + #, fuzzy, c-format + msgid "Could not open output file %s.\n" + msgstr "áäõíáìßá áíïßãìáôïò áñ÷åßïõ åîüäïõ `%s'" + + #: gcov.c:1339 + #, c-format + msgid "Creating %s.\n" + msgstr "Äçìéïõñãßá ôïõ %s.\n" + + #: gcov.c:1387 + #, c-format + msgid "call %d never executed\n" + msgstr "" + + #: gcov.c:1396 + #, c-format + msgid "call %d returns = %s\n" + msgstr "" + + #: gcov.c:1406 + #, c-format + msgid "call %d returns = %s%%\n" + msgstr "" + + #: gcov.c:1413 + #, c-format + msgid "branch %d never executed\n" + msgstr "" + + #: gcov.c:1423 + #, c-format + msgid "branch %d taken = %s\n" + msgstr "" + + #: gcov.c:1433 + #, c-format + msgid "branch %d taken = %s%%\n" + msgstr "" + + #: gcov.c:1444 + #, c-format + msgid "Unexpected EOF while reading source file %s.\n" + msgstr "" + + #: gcse.c:757 + #, c-format + msgid "GCSE disabled: %d > 1000 basic blocks and %d >= 20 edges/basic block" + msgstr "" + + #: gcse.c:769 + #, c-format + msgid "GCSE disabled: %d basic blocks and %d registers" + msgstr "" + + #: ch/grant.c:2652 ch/lex.c:212 ch/lex.c:2189 f/com.c:14249 graph.c:421 + #: java/jcf-parse.c:981 java/jcf-parse.c:1133 java/lex.c:1782 + #: objc/objc-act.c:529 profile.c:950 profile.c:958 toplev.c:1845 toplev.c:4954 + #, fuzzy, c-format + msgid "can't open %s" + msgstr "áäõíáìßá áíïßãìáôïò ôïõ `%s'" + + #: haifa-sched.c:190 + #, c-format + msgid "fix_sched_param: unknown param: %s" + msgstr "" + + #: integrate.c:185 + #, fuzzy + msgid "function cannot be inline" + msgstr "Ç ëåéôïõñãßá äåí Ý÷åé õëïðïéçèåß" + + #: integrate.c:190 + msgid "varargs function cannot be inline" + msgstr "" + + #: integrate.c:193 + msgid "function using alloca cannot be inline" + msgstr "" + + #: integrate.c:196 + msgid "function using setjmp cannot be inline" + msgstr "" + + #: integrate.c:199 + msgid "function uses __builtin_eh_return" + msgstr "" + + #: integrate.c:202 + msgid "function with nested functions cannot be inline" + msgstr "" + + #: integrate.c:206 + msgid "function with label addresses used in initializers cannot inline" + msgstr "" + + #: integrate.c:213 integrate.c:257 + msgid "function too large to be inline" + msgstr "" + + #: integrate.c:223 + msgid "no prototype, and parameter address used; cannot be inline" + msgstr "" + + #: integrate.c:230 integrate.c:275 + msgid "inline functions not supported for this return value type" + msgstr "" + + #: integrate.c:235 + msgid "function with varying-size return value cannot be inline" + msgstr "" + + #: integrate.c:242 + msgid "function with varying-size parameter cannot be inline" + msgstr "" + + #: integrate.c:245 + msgid "function with transparent unit parameter cannot be inline" + msgstr "" + + #: integrate.c:264 + msgid "function with computed jump cannot inline" + msgstr "" + + #: integrate.c:268 + msgid "function with nonlocal goto cannot be inline" + msgstr "" + + #: integrate.c:282 + msgid "function with target specific attribute(s) cannot be inlined" + msgstr "" + + #: line-map.c:198 + #, c-format + msgid "In file included from %s:%u" + msgstr "" + + #. Translators note: this message is used in conjunction + #. with "In file included from %s:%ld" and some other + #. tricks. We want something like this: + #. + #. | In file included from sys/select.h:123, + #. | from sys/types.h:234, + #. | from userfile.c:31: + #. | bits/select.h:45: + #. + #. with all the "from"s lined up. + #. The trailing comma is at the beginning of this message, + #. and the trailing colon is not translated. + #: line-map.c:216 + #, c-format + msgid "" + ",\n" + " from %s:%u" + msgstr "" + + #. If we didn't find this parameter, issue an error message. + #: params.c:80 + #, fuzzy, c-format + msgid "invalid parameter `%s'" + msgstr "Ç ðáñÜìåôñïò `%s' äåí åßíáé Ýãêõñç." + + #: profile.c:429 + #, c-format + msgid "corrupted profile info: prob for %d-%d thought to be %d" + msgstr "" + + #: profile.c:975 + #, c-format + msgid "file %s not found, execution counts assumed to be zero" + msgstr "" + + #: profile.c:1022 + msgid ".da file contents exhausted too early" + msgstr "" + + #: profile.c:1025 + msgid ".da file contents not exhausted" + msgstr "" + + #: protoize.c:593 + #, fuzzy, c-format + msgid "%s: internal abort\n" + msgstr "Åóùôåñéêü óöÜëìá ôïõ áíáëõôÞ äéåõèýíóåùí" + + #: protoize.c:684 + #, fuzzy, c-format + msgid "%s: error writing file `%s': %s\n" + msgstr "%s: ÓöÜëìá êáôÜ ôçí åããñáöÞ ôïõ %s\n" + + #: protoize.c:729 + #, fuzzy, c-format + msgid "%s: usage '%s [ -VqfnkN ] [ -i ] [ filename ... ]'\n" + msgstr "%s: ç ÷ñÞóç åßíáé %s [ -v ] [ -c äéáêïðÞ ] ïíïìáóßá æþíçò ...\n" + + #: protoize.c:732 + #, fuzzy, c-format + msgid "%s: usage '%s [ -VqfnkNlgC ] [ -B ] [ filename ... ]'\n" + msgstr "%s: ç ÷ñÞóç åßíáé %s [ -v ] [ -c äéáêïðÞ ] ïíïìáóßá æþíçò ...\n" + + #: protoize.c:839 + #, fuzzy, c-format + msgid "%s: warning: no read access for file `%s'\n" + msgstr "%s: Ðñïåéäïðïßçóç: ç uname áðÝôõ÷å: %s\n" + + #: protoize.c:847 + #, fuzzy, c-format + msgid "%s: warning: no write access for file `%s'\n" + msgstr "%s: Ðñïåéäïðïßçóç: ç uname áðÝôõ÷å: %s\n" + + #: protoize.c:855 + #, c-format + msgid "%s: warning: no write access for dir containing `%s'\n" + msgstr "" + + #. Catch cases like /.. where we try to backup to a + #. point above the absolute root of the logical file + #. system. + #: protoize.c:1273 + #, fuzzy, c-format + msgid "%s: invalid file name: %s\n" + msgstr "%s: ìç Ýãêõñï åßäïò áñ÷åßïõ" + + #: protoize.c:1425 + #, fuzzy, c-format + msgid "%s: %s: can't get status: %s\n" + msgstr "%s: áäõíáìßá ðñüóâáóçò óôï %s: %s\n" + + #: protoize.c:1446 + #, c-format + msgid "\n%s: fatal error: aux info file corrupted at line %d\n" + msgstr "" + + #: protoize.c:1782 + #, c-format + msgid "%s:%d: declaration of function `%s' takes different forms\n" + msgstr "" + + #: protoize.c:2040 + #, fuzzy, c-format + msgid "%s: compiling `%s'\n" + msgstr "%s: ÓöÜëìá êáôÜ ôçí åããñáöÞ ôïõ %s\n" + + # src/request.c:37 + #: protoize.c:2063 + #, fuzzy, c-format + msgid "%s: wait: %s\n" + msgstr "%s óå %s" + + #: protoize.c:2068 + #, fuzzy, c-format + msgid "%s: subprocess got fatal signal %d\n" + msgstr "%s: Ï ðñïåðåîåñãáóôÞò C áðÝôõ÷å ìå óÞìá %d\n" + + #: protoize.c:2076 + #, fuzzy, c-format + msgid "%s: %s exited with status %d\n" + msgstr "%s: Ï ðñïåðåîåñãáóôÞò C áðÝôõ÷å ìå óÞìá %d\n" + + #: protoize.c:2128 + #, fuzzy, c-format + msgid "%s: warning: missing SYSCALLS file `%s'\n" + msgstr "%s: Ðñïåéäïðïßçóç: ç uname áðÝôõ÷å: %s\n" + + #: protoize.c:2137 protoize.c:2166 + #, fuzzy, c-format + msgid "%s: can't read aux info file `%s': %s\n" + msgstr "%s: áäõíáìßá óôçí áíÜãíùóç %s: %s\n" + + #: protoize.c:2182 protoize.c:2210 + #, fuzzy, c-format + msgid "%s: can't get status of aux info file `%s': %s\n" + msgstr "áäõíáìßá ðñïóðÝëáóçò(stat()) áñ÷åßïõ `%s': %s" + + #: protoize.c:2238 + #, fuzzy, c-format + msgid "%s: can't open aux info file `%s' for reading: %s\n" + msgstr "áäõíáìßá áíïßãìáôïò áñ÷åßïõ åîüäï `%s' ãéá ôçí êáôçãïñßá `%s'" + + # src/shred.c:1103 + #: protoize.c:2256 + #, fuzzy, c-format + msgid "%s: error reading aux info file `%s': %s\n" + msgstr "%s: óöÜëìá åããñáöÞò óôç èÝóç %s" + + #: protoize.c:2269 + #, fuzzy, c-format + msgid "%s: error closing aux info file `%s': %s\n" + msgstr "%s: ÓöÜëìá êáôÜ ôï êëåßóéìï ôïõ %s: %s\n" + + #: protoize.c:2285 + #, fuzzy, c-format + msgid "%s: can't delete aux info file `%s': %s\n" + msgstr "%s: Äå ìðïñåß íá äéáãñáöåß ôï %s: %s\n" + + #: protoize.c:2367 protoize.c:4369 + #, fuzzy, c-format + msgid "%s: can't delete file `%s': %s\n" + msgstr "%s: Äåí åßíáé äõíáôüí íá äçìéïõñãçèåß %s: %s\n" + + #: protoize.c:2446 + #, fuzzy, c-format + msgid "%s: warning: can't rename file `%s' to `%s': %s\n" + msgstr "%s: Ðñïåéäïðïßçóç: ç uname áðÝôõ÷å: %s\n" + + #: protoize.c:2571 + #, c-format + msgid "%s: conflicting extern definitions of '%s'\n" + msgstr "" + + #: protoize.c:2575 + #, c-format + msgid "%s: declarations of '%s' will not be converted\n" + msgstr "" + + #: protoize.c:2577 + #, c-format + msgid "%s: conflict list for '%s' follows:\n" + msgstr "" + + #: protoize.c:2610 + #, c-format + msgid "%s: warning: using formals list from %s(%d) for function `%s'\n" + msgstr "" + + #: protoize.c:2650 + #, c-format + msgid "%s: %d: `%s' used but missing from SYSCALLS\n" + msgstr "" + + #: protoize.c:2656 + #, fuzzy, c-format + msgid "%s: %d: warning: no extern definition for `%s'\n" + msgstr "%s: ðñïåéäïðïßçóç: äå âñÝèçêå áñ÷Þ êåöáëßäáò" + + #: protoize.c:2687 + #, c-format + msgid "%s: warning: no static definition for `%s' in file `%s'\n" + msgstr "" + + #: protoize.c:2693 + #, c-format + msgid "%s: multiple static defs of `%s' in file `%s'\n" + msgstr "" + + #: protoize.c:2866 protoize.c:2869 + #, c-format + msgid "%s: %d: warning: source too confusing\n" + msgstr "" + + #: protoize.c:3075 + #, c-format + msgid "%s: %d: warning: varargs function declaration not converted\n" + msgstr "" + + #: protoize.c:3090 + #, c-format + msgid "%s: declaration of function `%s' not converted\n" + msgstr "" + + #: protoize.c:3213 + #, c-format + msgid "%s: warning: too many parameter lists in declaration of `%s'\n" + msgstr "" + + #: protoize.c:3234 + #, fuzzy, c-format + msgid "\n%s: warning: too few parameter lists in declaration of `%s'\n" + msgstr "Ðñïåéäïðïßçóç: Ðïëý ëßãá ïñßóìáôá óôï åóùäïìçìÝíï `%s'" + + #: protoize.c:3332 + #, c-format + msgid "%s: %d: warning: found `%s' but expected `%s'\n" + msgstr "" + + #: protoize.c:3510 + #, c-format + msgid "%s: local declaration for function `%s' not inserted\n" + msgstr "" + + #: protoize.c:3537 + #, c-format + msgid "\n%s: %d: warning: can't add declaration of `%s' into macro call\n" + msgstr "" + + #: protoize.c:3611 + #, c-format + msgid "%s: global declarations for file `%s' not inserted\n" + msgstr "" + + #: protoize.c:3702 protoize.c:3732 + #, c-format + msgid "%s: definition of function `%s' not converted\n" + msgstr "" + + #: protoize.c:3721 + #, c-format + msgid "%s: %d: warning: definition of %s not converted\n" + msgstr "" + + #: protoize.c:4051 + #, c-format + msgid "%s: found definition of `%s' at %s(%d)\n" + msgstr "" + + #. If we make it here, then we did not know about this + #. function definition. + #: protoize.c:4067 + #, c-format + msgid "%s: %d: warning: `%s' excluded by preprocessing\n" + msgstr "" + + #: protoize.c:4070 + #, c-format + msgid "%s: function definition not converted\n" + msgstr "" + + #: protoize.c:4129 + #, fuzzy, c-format + msgid "%s: `%s' not converted\n" + msgstr "%s: `%s': äåí âñÝèçêå ôáßñéáóìá" + + #: protoize.c:4137 + #, fuzzy, c-format + msgid "%s: would convert file `%s'\n" + msgstr "%s: ç Ýîïäïò èá åðéêáëýøåé ôï %s\n" + + #: protoize.c:4140 + #, fuzzy, c-format + msgid "%s: converting file `%s'\n" + msgstr "äçìéïõñãßá áñ÷åßïõ `%s'\n" + + #: protoize.c:4150 + #, fuzzy, c-format + msgid "%s: can't get status for file `%s': %s\n" + msgstr "áäõíáìßá ðñïóðÝëáóçò(stat()) áñ÷åßïõ `%s': %s" + + #: protoize.c:4192 + #, fuzzy, c-format + msgid "%s: can't open file `%s' for reading: %s\n" + msgstr "%s: Äåí åßíáé äõíáôüí íá áíïé÷ôåß ôï %s: %s\n" + + #: protoize.c:4207 + #, fuzzy, c-format + msgid "\n%s: error reading input file `%s': %s\n" + msgstr "%s: ÓöÜëìá êáôÜ ôçí áíÜãíùóç ôïõ %s\n" + + #: protoize.c:4241 + #, fuzzy, c-format + msgid "%s: can't create/open clean file `%s': %s\n" + msgstr "%s: Äåí åßíáé äõíáôüí íá äçìéïõñãçèåß %s: %s\n" + + #: protoize.c:4346 + #, c-format + msgid "%s: warning: file `%s' already saved in `%s'\n" + msgstr "" + + #: protoize.c:4354 + #, fuzzy, c-format + msgid "%s: can't link file `%s' to `%s': %s\n" + msgstr "%s: Äåí åßíáé äõíáôüí íá óõíäåèåß ôï %s ìå ôï %s: %s\n" + + #: protoize.c:4384 + #, fuzzy, c-format + msgid "%s: can't create/open output file `%s': %s\n" + msgstr "áäõíáìßá áíïßãìáôïò áñ÷åßïõ åîüäïõ `%s'" + + #: protoize.c:4417 + #, fuzzy, c-format + msgid "%s: can't change mode of file `%s': %s\n" + msgstr "%s: Äåí åßíáé äõíáôüí íá áöáéñåèåß ôï %s: %s\n" + + #: protoize.c:4592 + #, fuzzy, c-format + msgid "%s: cannot get working directory: %s\n" + msgstr "%s: äåí åßíáé äõíáôü íá ãñáöôåß ðÜíù óå êáôÜëïãï" + + #: protoize.c:4690 + #, fuzzy, c-format + msgid "%s: input file names must have .c suffixes: %s\n" + msgstr "%s: ôï áñ÷åßï åéóüäïõ åßíáé ôï áñ÷åßï åîüäïõ" + + #: real.c:824 real.c:1001 + #, fuzzy + msgid "conversion from NaN to int" + msgstr "ç ìåôáôñïðÞ áðü `%s' óå `%s' äåí õðïóôçñßæåôå" + + #: real.c:847 + #, fuzzy + msgid "conversion from NaN to unsigned int" + msgstr "ç ìåôáôñïðÞ áðü `%s' óå `%s' äåí õðïóôçñßæåôå" + + #: real.c:2730 + #, fuzzy + msgid "floating point overflow" + msgstr "Åîáßñåóç êéíçôÞò õðïäéáóôïëÞò" + + #: real.c:4395 real.c:6675 real.c:6756 + msgid "overflow on truncation to integer" + msgstr "" + + #: real.c:4467 + msgid "overflow on truncation to unsigned integer" + msgstr "" + + #: real.c:5812 + #, fuzzy, c-format + msgid "%s: argument domain error" + msgstr "%s: óöÜëìá áíÜãíùóçò" + + #: real.c:5813 + #, c-format + msgid "%s: function singularity" + msgstr "" + + #: real.c:5814 + #, fuzzy, c-format + msgid "%s: overflow range error" + msgstr "%s: óöÜëìá åããñáöÞò" + + #: real.c:5815 + #, fuzzy, c-format + msgid "%s: underflow range error" + msgstr "%s: óöÜëìá åããñáöÞò" + + #: real.c:5816 + #, c-format + msgid "%s: total loss of precision" + msgstr "" + + #: real.c:5817 + #, c-format + msgid "%s: partial loss of precision" + msgstr "" + + #: real.c:5818 + #, c-format + msgid "%s: NaN - producing operation" + msgstr "" + + #: reg-stack.c:677 + #, c-format + msgid "output constraint %d must specify a single register" + msgstr "" + + #: reg-stack.c:687 + #, c-format + msgid "output constraint %d cannot be specified together with \"%s\" clobber" + msgstr "" + + #: reg-stack.c:710 + msgid "output regs must be grouped at top of stack" + msgstr "" + + #: reg-stack.c:747 + msgid "implicitly popped regs must be grouped at top of stack" + msgstr "" + + #: reg-stack.c:766 + #, c-format + msgid "output operand %d must use `&' constraint" + msgstr "" + + #: regclass.c:778 + #, c-format + msgid "can't use '%s' as a %s register" + msgstr "" + + #: config/ia64/ia64.c:3856 config/ia64/ia64.c:3863 regclass.c:793 + #, fuzzy, c-format + msgid "unknown register name: %s" + msgstr "Üãíùóôïò ÷áñáêôÞñáò `%s'" + + #: regclass.c:804 + msgid "global register variable follows a function definition" + msgstr "" + + #: regclass.c:808 + msgid "register used for two global register variables" + msgstr "" + + #: regclass.c:813 + msgid "call-clobbered register used for global register variable" + msgstr "" + + #: regrename.c:1821 + #, c-format + msgid "validate_value_data: [%u] Bad next_regno for empty chain (%u)" + msgstr "" + + #: regrename.c:1833 + #, c-format + msgid "validate_value_data: Loop in regno chain (%u)" + msgstr "" + + #: regrename.c:1836 + #, c-format + msgid "validate_value_data: [%u] Bad oldest_regno (%u)" + msgstr "" + + #: regrename.c:1848 + #, c-format + msgid "validate_value_data: [%u] Non-empty reg in chain (%s %u %i)" + msgstr "" + + #: reload.c:1207 + msgid "cannot reload integer constant operand in `asm'" + msgstr "" + + #: reload.c:1229 + msgid "impossible register constraint in `asm'" + msgstr "" + + #: reload.c:3387 + msgid "`&' constraint used with no register class" + msgstr "" + + #: reload.c:3555 + #, fuzzy + msgid "unable to generate reloads for:" + msgstr "Áäýíáôç ç äçìéïõñãßá äéåñãáóßáò óôïí åîõðçñåôçôÞ" + + #: reload.c:3556 reload.c:3770 + msgid "inconsistent operand constraints in an `asm'" + msgstr "" + + #: reload1.c:1242 + msgid "frame size too large for reliable stack checking" + msgstr "" + + #: reload1.c:1245 + msgid "try reducing the number of local variables" + msgstr "" + + #: reload1.c:1892 + #, c-format + msgid "can't find a register in class `%s' while reloading `asm'" + msgstr "" + + #: reload1.c:1896 + #, c-format + msgid "unable to find a register to spill in class `%s'" + msgstr "" + + #: reload1.c:1898 + #, fuzzy + msgid "this is the insn:" + msgstr "áõôüò åßíáé ï ðñþôïò ïñéóìüò" + + #: reload1.c:3917 + msgid "`asm' operand requires impossible reload" + msgstr "" + + #. It's the compiler's fault. + #: reload1.c:5033 + #, fuzzy + msgid "could not find a spill register" + msgstr "áäõíáìßá åýñåóçò âñü÷ïõ" + + #: reload1.c:5038 + msgid "`asm' operand constraint incompatible with operand size" + msgstr "" + + #. It's the compiler's fault. + #: reload1.c:6629 + msgid "VOIDmode on an output" + msgstr "" + + #: reload1.c:6630 + msgid "output operand is constant in `asm'" + msgstr "" + + #: rtl-error.c:139 + #, fuzzy + msgid "unrecognizable insn:" + msgstr "Ìç áíáãíùñßóéìç ìåôáâëçôÞ `%s'" + + #: rtl-error.c:141 + msgid "insn does not satisfy its constraints:" + msgstr "" + + #: rtl.c:707 + #, c-format + msgid "RTL check: access of elt %d of `%s' with last elt %d in %s, at %s:%d" + msgstr "" + + #: rtl.c:722 + #, c-format + msgid "RTL check: expected elt %d type '%c', have '%c' (rtx %s) in %s, at %s:%d" + msgstr "" + + #: rtl.c:738 + #, c-format + msgid "RTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s) in %s, at %s:%d" + msgstr "" + + #: rtl.c:751 + #, c-format + msgid "RTL check: expected code `%s', have `%s' in %s, at %s:%d" + msgstr "" + + #: rtl.c:765 + #, c-format + msgid "RTL check: expected code `%s' or `%s', have `%s' in %s, at %s:%d" + msgstr "" + + #: rtl.c:780 + #, c-format + msgid "RTL check: access of elt %d of vector with last elt %d in %s, at %s:%d" + msgstr "" + + #: stmt.c:927 + #, c-format + msgid "jump to `%s' invalidly jumps into binding contour" + msgstr "" + + #: stmt.c:1163 stmt.c:3895 + #, c-format + msgid "label `%s' used before containing binding contour" + msgstr "" + + #: stmt.c:1343 + msgid "output operand constraint lacks `='" + msgstr "" + + #: stmt.c:1358 + #, c-format + msgid "output constraint `%c' for operand %d is not at the beginning" + msgstr "" + + #: stmt.c:1380 + msgid "operand constraint contains incorrectly positioned '+' or '='" + msgstr "" + + #: stmt.c:1386 stmt.c:1486 + #, c-format + msgid "`%%' constraint used with last operand" + msgstr "" + + #: stmt.c:1405 + msgid "matching constraint not valid in output operand" + msgstr "" + + #: stmt.c:1477 + #, c-format + msgid "input operand constraint contains `%c'" + msgstr "" + + #: stmt.c:1517 + msgid "matching constraint references invalid operand number" + msgstr "" + + #: stmt.c:1549 + #, fuzzy, c-format + msgid "invalid punctuation `%c' in constraint" + msgstr "ìç Ýãêõñç ìÝôñçóç åðáíÜëçøçò `%s' óôç êáôáóêåõÞ [c*n]" + + #: stmt.c:1645 + #, fuzzy, c-format + msgid "unknown register name `%s' in `asm'" + msgstr "Üãíùóôïò ÷áñáêôÞñáò óôï ðåäßï `%s' ôçò êáôçãïñßáò `%s'" + + #: stmt.c:1689 + #, c-format + msgid "more than %d operands in `asm'" + msgstr "" + + #: stmt.c:1748 + #, c-format + msgid "output number %d not directly addressable" + msgstr "" + + #. ??? Leave this only until we have experience with what + #. happens in combine and elsewhere when constraints are + #. not satisfied. + #: stmt.c:1817 stmt.c:1846 + #, c-format + msgid "asm operand %d probably doesn't match constraints" + msgstr "" + + #: stmt.c:1992 + #, fuzzy + msgid "too many alternatives in `asm'" + msgstr "Õðåñâïëéêá ðïëëÜ áíïéêôÜ áñ÷åßá óôï óýóôçìá" + + #: stmt.c:2004 + msgid "operand constraints for `asm' differ in number of alternatives" + msgstr "" + + #: stmt.c:2057 + #, fuzzy, c-format + msgid "duplicate asm operand name '%s'" + msgstr "äéðëü üíïìá ÷áñáêôÞñá `%s'" + + #: stmt.c:2144 + msgid "missing close brace for named operand" + msgstr "" + + #: stmt.c:2164 + #, fuzzy, c-format + msgid "undefined named operand '%s'" + msgstr "Ìç ïñéóìÝíï üíïìá %s" + + #: stmt.c:3832 + #, fuzzy, c-format + msgid "unused variable `%s'" + msgstr "Ìç áíáãíùñßóéìç ìåôáâëçôÞ `%s'" + + #: stmt.c:5284 + #, c-format + msgid "enumeration value `%s' not handled in switch" + msgstr "" + + #: stmt.c:5310 stmt.c:5330 + #, c-format + msgid "case value `%ld' not in enumerated type" + msgstr "" + + #: stmt.c:5313 stmt.c:5333 + #, c-format + msgid "case value `%ld' not in enumerated type `%s'" + msgstr "" + + #: stor-layout.c:172 + msgid "type size can't be explicitly evaluated" + msgstr "" + + #: stor-layout.c:174 + msgid "variable-size type declared outside of any function" + msgstr "" + + #: stor-layout.c:455 + #, c-format + msgid "size of `%s' is %d bytes" + msgstr "" + + #: stor-layout.c:457 + #, fuzzy, c-format + msgid "size of `%s' is larger than %d bytes" + msgstr "%s: ïé ôéìÝò ôïõ ðåäßïõ `%s' äåí ðñÝðåé íá åßíáé ìåãáëýôåñåò áðü %d" + + #: stor-layout.c:836 stor-layout.c:1089 + #, c-format + msgid "packed attribute causes inefficient alignment for `%s'" + msgstr "" + + #: stor-layout.c:838 stor-layout.c:1091 + #, c-format + msgid "packed attribute is unnecessary for `%s'" + msgstr "" + + #: stor-layout.c:853 + #, c-format + msgid "padding struct to align `%s'" + msgstr "" + + #: stor-layout.c:1053 + msgid "padding struct size to alignment boundary" + msgstr "" + + #: stor-layout.c:1096 + msgid "packed attribute causes inefficient alignment" + msgstr "" + + #: stor-layout.c:1098 + msgid "packed attribute is unnecessary" + msgstr "" + + #: timevar.c:448 + msgid "\nExecution times (seconds)\n" + msgstr "" + + #. Print total time. + #: timevar.c:498 + msgid " TOTAL :" + msgstr " ÓÕÍÏËÉÊÁ :" + + #: timevar.c:534 + #, c-format + msgid "time in %s: %ld.%06ld (%ld%%)\n" + msgstr "" + + #: tlink.c:428 + #, fuzzy, c-format + msgid "collect: reading %s\n" + msgstr "óöÜëìá áíÜãíùóçò %s" + + #: tlink.c:532 + #, c-format + msgid "collect: recompiling %s\n" + msgstr "" + + #: tlink.c:698 + #, c-format + msgid "collect: tweaking %s in %s\n" + msgstr "" + + #: tlink.c:745 + msgid "collect: relinking\n" + msgstr "" + + #: tlink.c:754 + #, c-format + msgid "ld returned %d exit status" + msgstr "ç ld åðÝóôñåøå êáôÜóôáóç åîüäïõ %d" + + #: toplev.c:913 + msgid "Generate debugging info in default format" + msgstr "" + + #: toplev.c:914 + msgid "Generate debugging info in default extended format" + msgstr "" + + #: toplev.c:916 + msgid "Generate STABS format debug info" + msgstr "" + + #: toplev.c:917 + msgid "Generate extended STABS format debug info" + msgstr "" + + #: toplev.c:920 + msgid "Generate DWARF-1 format debug info" + msgstr "" + + #: toplev.c:922 + msgid "Generate extended DWARF-1 format debug info" + msgstr "" + + #: toplev.c:925 + msgid "Generate DWARF-2 debug info" + msgstr "" + + #: toplev.c:928 + msgid "Generate XCOFF format debug info" + msgstr "" + + #: toplev.c:929 + msgid "Generate extended XCOFF format debug info" + msgstr "" + + #: toplev.c:932 + msgid "Generate COFF format debug info" + msgstr "" + + #: toplev.c:976 + msgid "Perform DWARF2 duplicate elimination" + msgstr "" + + #: toplev.c:978 + msgid "Do not store floats in registers" + msgstr "" + + #: toplev.c:980 + msgid "Consider all mem refs through pointers as volatile" + msgstr "" + + #: toplev.c:982 + msgid "Consider all mem refs to global data to be volatile" + msgstr "" + + #: toplev.c:984 + msgid "Consider all mem refs to static data to be volatile" + msgstr "" + + #: toplev.c:986 + msgid "Defer popping functions args from stack until later" + msgstr "" + + #: toplev.c:988 + msgid "When possible do not generate stack frames" + msgstr "" + + #: toplev.c:990 + msgid "Optimize sibling and tail recursive calls" + msgstr "" + + #: toplev.c:992 + msgid "When running CSE, follow jumps to their targets" + msgstr "" + + #: toplev.c:994 + msgid "When running CSE, follow conditional jumps" + msgstr "" + + #: toplev.c:996 + msgid "Perform a number of minor, expensive optimizations" + msgstr "" + + #: toplev.c:998 + msgid "Perform jump threading optimizations" + msgstr "" + + #: toplev.c:1000 + msgid "Perform strength reduction optimizations" + msgstr "" + + #: toplev.c:1002 + msgid "Perform loop unrolling when iteration count is known" + msgstr "" + + #: toplev.c:1004 + msgid "Perform loop unrolling for all loops" + msgstr "" + + #: toplev.c:1006 + msgid "Generate prefetch instructions, if available, for arrays in loops" + msgstr "" + + #: toplev.c:1008 + msgid "Force all loop invariant computations out of loops" + msgstr "" + + #: toplev.c:1010 + msgid "Strength reduce all loop general induction variables" + msgstr "" + + #: toplev.c:1012 + msgid "Store strings in writable data section" + msgstr "" + + #: toplev.c:1014 + msgid "Enable machine specific peephole optimizations" + msgstr "" + + #: toplev.c:1016 + msgid "Copy memory operands into registers before using" + msgstr "" + + #: toplev.c:1018 + msgid "Copy memory address constants into regs before using" + msgstr "" + + #: toplev.c:1020 + msgid "Allow function addresses to be held in registers" + msgstr "" + + #: toplev.c:1022 + msgid "Integrate simple functions into their callers" + msgstr "" + + #: toplev.c:1024 + msgid "Generate code for funcs even if they are fully inlined" + msgstr "" + + #: toplev.c:1026 + msgid "Pay attention to the 'inline' keyword" + msgstr "" + + #: toplev.c:1028 + msgid "Emit static const variables even if they are not used" + msgstr "" + + #: toplev.c:1030 + msgid "Check for syntax errors, then stop" + msgstr "" + + #: toplev.c:1032 + msgid "Mark data as shared rather than private" + msgstr "" + + #: toplev.c:1034 + msgid "Enable saving registers around function calls" + msgstr "" + + #: toplev.c:1036 + msgid "Return 'short' aggregates in memory, not registers" + msgstr "" + + #: toplev.c:1038 + msgid "Return 'short' aggregates in registers" + msgstr "" + + #: toplev.c:1040 + msgid "Attempt to fill delay slots of branch instructions" + msgstr "" + + #: toplev.c:1042 + msgid "Perform the global common subexpression elimination" + msgstr "" + + #: toplev.c:1044 + msgid "Perform enhanced load motion during global subexpression elimination" + msgstr "" + + #: toplev.c:1046 + msgid "Perform store motion after global subexpression elimination" + msgstr "" + + #: toplev.c:1048 + msgid "Run CSE pass after loop optimizations" + msgstr "" + + #: toplev.c:1050 + msgid "Run the loop optimizer twice" + msgstr "" + + #: toplev.c:1052 + msgid "Delete useless null pointer checks" + msgstr "" + + #: toplev.c:1054 + msgid "Pretend that host and target use the same FP format" + msgstr "" + + #: toplev.c:1056 + msgid "Reschedule instructions before register allocation" + msgstr "" + + #: toplev.c:1058 + msgid "Reschedule instructions after register allocation" + msgstr "" + + #: toplev.c:1060 + msgid "Enable scheduling across basic blocks" + msgstr "" + + #: toplev.c:1062 + msgid "Allow speculative motion of non-loads" + msgstr "" + + #: toplev.c:1064 + msgid "Allow speculative motion of some loads" + msgstr "" + + #: toplev.c:1066 + msgid "Allow speculative motion of more loads" + msgstr "" + + #: toplev.c:1068 + msgid "Replace add,compare,branch with branch on count reg" + msgstr "" + + #: toplev.c:1070 + msgid "Generate position independent code, if possible" + msgstr "" + + #: toplev.c:1073 + msgid "Enable exception handling" + msgstr "" + + #: toplev.c:1075 + msgid "Just generate unwind tables for exception handling" + msgstr "" + + #: toplev.c:1077 + msgid "Generate unwind tables exact at each instruction boundary" + msgstr "" + + #: toplev.c:1079 + msgid "Support synchronous non-call exceptions" + msgstr "" + + #: toplev.c:1081 + msgid "Insert arc based program profiling code" + msgstr "" + + #: toplev.c:1083 + msgid "Create data files needed by gcov" + msgstr "" + + #: toplev.c:1085 + msgid "Use profiling information for branch probabilities" + msgstr "" + + #: toplev.c:1087 + msgid "Reorder basic blocks to improve code placement" + msgstr "" + + #: toplev.c:1089 + msgid "Do the register renaming optimization pass" + msgstr "" + + #: toplev.c:1091 + msgid "Do the register copy-propagation optimization pass" + msgstr "" + + #: toplev.c:1093 + msgid "Do not put uninitialized globals in the common section" + msgstr "" + + #: toplev.c:1095 + msgid "Do not generate .size directives" + msgstr "" + + #: toplev.c:1097 + msgid "place each function into its own section" + msgstr "" + + #: toplev.c:1099 + msgid "place data items into their own section" + msgstr "" + + #: toplev.c:1101 + msgid "Add extra commentry to assembler output" + msgstr "" + + #: toplev.c:1103 + msgid "Output GNU ld formatted global initializers" + msgstr "" + + #: toplev.c:1105 + msgid "Enables a register move optimization" + msgstr "" + + #: toplev.c:1107 + msgid "Do the full regmove optimization pass" + msgstr "" + + #: toplev.c:1109 + msgid "Pack structure members together without holes" + msgstr "" + + #: toplev.c:1111 + msgid "Insert stack checking code into the program" + msgstr "" + + #: toplev.c:1113 + msgid "Specify that arguments may alias each other & globals" + msgstr "" + + #: toplev.c:1115 + msgid "Assume arguments may alias globals but not each other" + msgstr "" + + #: toplev.c:1117 + msgid "Assume arguments do not alias each other or globals" + msgstr "" + + #: toplev.c:1119 + msgid "Assume strict aliasing rules apply" + msgstr "" + + #: toplev.c:1121 + msgid "Align the start of loops" + msgstr "" + + #: toplev.c:1123 + msgid "Align labels which are only reached by jumping" + msgstr "" + + #: toplev.c:1125 + msgid "Align all labels" + msgstr "" + + #: toplev.c:1127 + msgid "Align the start of functions" + msgstr "" + + #: toplev.c:1129 + msgid "Attempt to merge identical constants accross compilation units" + msgstr "" + + #: toplev.c:1131 + msgid "Attempt to merge identical constants and constant variables" + msgstr "" + + #: toplev.c:1133 + msgid "Suppress output of instruction numbers and line number notes in debugging dumps" + msgstr "" + + #: toplev.c:1135 + msgid "Instrument function entry/exit with profiling calls" + msgstr "" + + #: toplev.c:1137 + msgid "Enable SSA optimizations" + msgstr "" + + #: toplev.c:1139 + msgid "Enable SSA conditional constant propagation" + msgstr "" + + #: toplev.c:1141 + msgid "Enable aggressive SSA dead code elimination" + msgstr "" + + #: toplev.c:1143 + msgid "External symbols have a leading underscore" + msgstr "" + + #: toplev.c:1145 + msgid "Process #ident directives" + msgstr "" + + #: toplev.c:1147 + msgid "Enables an rtl peephole pass run before sched2" + msgstr "" + + #: toplev.c:1149 + msgid "Enables guessing of branch probabilities" + msgstr "" + + #: toplev.c:1151 + msgid "Set errno after built-in math functions" + msgstr "" + + #: toplev.c:1153 + #, fuzzy + msgid "Floating-point operations can trap" + msgstr "Åîáßñåóç êéíçôÞò õðïäéáóôïëÞò" + + #: toplev.c:1155 + msgid "Allow math optimizations that may violate IEEE or ANSI standards" + msgstr "" + + #: toplev.c:1157 + msgid "Compile pointers as triples: value, base & end" + msgstr "" + + #: toplev.c:1159 + msgid "Generate code to check bounds before dereferencing pointers and arrays" + msgstr "" + + #: toplev.c:1161 + msgid "Convert floating point constant to single precision constant" + msgstr "" + + #: toplev.c:1163 + msgid "Report time taken by each compiler pass at end of run" + msgstr "" + + #: toplev.c:1165 + msgid "Report on permanent memory allocation at end of run" + msgstr "" + + #: toplev.c:1167 + msgid "Trap for signed overflow in addition / subtraction / multiplication" + msgstr "" + + #: toplev.c:1184 + msgid "Compile just for ISO C89" + msgstr "" + + #: toplev.c:1186 + msgid "Do not promote floats to double if using -traditional" + msgstr "" + + #: toplev.c:1188 + msgid "Determine language standard" + msgstr "" + + #: toplev.c:1192 + msgid "Make bit-fields by unsigned by default" + msgstr "" + + #: toplev.c:1196 + msgid "Make 'char' be signed by default" + msgstr "" + + #: toplev.c:1198 + msgid "Make 'char' be unsigned by default" + msgstr "" + + #: toplev.c:1204 + msgid "Attempt to support traditional K&R style C" + msgstr "" + + #: toplev.c:1210 + msgid "Do not recognize the 'asm' keyword" + msgstr "" + + #: toplev.c:1213 + msgid "Do not recognize any built in functions" + msgstr "" + + #: toplev.c:1215 + msgid "Assume normal C execution environment" + msgstr "" + + #: toplev.c:1218 + msgid "Assume that standard libraries & main might not exist" + msgstr "" + + #: toplev.c:1221 + msgid "Allow different types as args of ? operator" + msgstr "" + + #: toplev.c:1224 + msgid "Allow the use of $ inside identifiers" + msgstr "" + + #: toplev.c:1229 + msgid "Use the same size for double as for float" + msgstr "" + + #: toplev.c:1232 + msgid "Use the smallest fitting integer to hold enums" + msgstr "" + + #: toplev.c:1235 + msgid "Override the underlying type for wchar_t to `unsigned short'" + msgstr "" + + #: toplev.c:1239 + msgid "Enable most warning messages" + msgstr "" + + #: toplev.c:1241 + msgid "Warn about casting functions to incompatible types" + msgstr "" + + #: toplev.c:1245 + msgid "Warn about functions which might be candidates for format attributes" + msgstr "" + + #: toplev.c:1248 + msgid "Warn about casts which discard qualifiers" + msgstr "" + + #: toplev.c:1251 + msgid "Warn about subscripts whose type is 'char'" + msgstr "" + + #: toplev.c:1254 toplev.c:1257 + msgid "Warn if nested comments are detected" + msgstr "" + + #: toplev.c:1260 + msgid "Warn about possibly confusing type conversions" + msgstr "" + + #: toplev.c:1263 + msgid "Warn about printf/scanf/strftime/strfmon format anomalies" + msgstr "" + + #: toplev.c:1267 + msgid "Don't warn about strftime formats yielding 2 digit years" + msgstr "" + + #: toplev.c:1270 + msgid "Don't warn about too many arguments to format functions" + msgstr "" + + #: toplev.c:1272 + msgid "Warn about non-string-literal format strings" + msgstr "" + + #: toplev.c:1275 + msgid "Warn about possible security problems with format functions" + msgstr "" + + #: toplev.c:1278 + msgid "Warn about implicit function declarations" + msgstr "" + + #: toplev.c:1282 + msgid "Warn when a declaration does not specify a type" + msgstr "" + + #: toplev.c:1287 + msgid "Warn about the use of the #import directive" + msgstr "" + + #: toplev.c:1291 + msgid "Do not warn about using 'long long' when -pedantic" + msgstr "" + + #: toplev.c:1293 + msgid "Warn about suspicious declarations of main" + msgstr "" + + #: toplev.c:1296 + msgid "Warn about possibly missing braces around initializers" + msgstr "" + + #: toplev.c:1299 + msgid "Warn about global funcs without previous declarations" + msgstr "" + + #: toplev.c:1302 + msgid "Warn about global funcs without prototypes" + msgstr "" + + #: toplev.c:1305 + msgid "Warn about use of multicharacter literals" + msgstr "" + + #: toplev.c:1308 + msgid "Warn about externs not at file scope level" + msgstr "" + + #: toplev.c:1311 + msgid "Warn about possible missing parentheses" + msgstr "" + + #: toplev.c:1314 + msgid "Warn about possible violations of sequence point rules" + msgstr "" + + #: toplev.c:1317 + msgid "Warn about function pointer arithmetic" + msgstr "" + + #: toplev.c:1320 + msgid "Warn about multiple declarations of the same object" + msgstr "" + + #: toplev.c:1323 + msgid "Warn about signed/unsigned comparisons" + msgstr "" + + #: toplev.c:1326 + msgid "Warn about testing equality of floating point numbers" + msgstr "" + + #: toplev.c:1329 + msgid "Warn about unrecognized pragmas" + msgstr "" + + #: toplev.c:1332 + msgid "Warn about non-prototyped function decls" + msgstr "" + + #: toplev.c:1335 + msgid "Warn about constructs whose meaning change in ISO C" + msgstr "" + + #: toplev.c:1338 + msgid "Warn when trigraphs are encountered" + msgstr "" + + #: toplev.c:1343 + msgid "Mark strings as 'const char *'" + msgstr "" + + #: toplev.c:1473 + msgid "Warn when a function is unused" + msgstr "" + + #: toplev.c:1475 + msgid "Warn when a label is unused" + msgstr "" + + #: toplev.c:1477 + msgid "Warn when a function parameter is unused" + msgstr "" + + #: toplev.c:1479 + msgid "Warn when a variable is unused" + msgstr "" + + #: toplev.c:1481 + msgid "Warn when an expression value is unused" + msgstr "" + + #: toplev.c:1483 + #, fuzzy + msgid "Do not suppress warnings from system headers" + msgstr "Áðïóéþðçóç ðñïçäïðïéÞóåùí êáé ìçíõìÜôùí ðëçñïöüñçóçò" + + #: toplev.c:1485 + msgid "Treat all warnings as errors" + msgstr "" + + #: toplev.c:1487 + msgid "Warn when one local variable shadows another" + msgstr "" + + #: toplev.c:1489 + msgid "Warn about enumerated switches missing a specific case" + msgstr "" + + #: toplev.c:1491 + msgid "Warn about returning structures, unions or arrays" + msgstr "" + + #: toplev.c:1493 + msgid "Warn about pointer casts which increase alignment" + msgstr "" + + #: toplev.c:1495 + msgid "Warn about code that will never be executed" + msgstr "" + + #: toplev.c:1497 + msgid "Warn about uninitialized automatic variables" + msgstr "" + + #: toplev.c:1499 + msgid "Warn when an inlined function cannot be inlined" + msgstr "" + + #: toplev.c:1501 + msgid "Warn when the packed attribute has no effect on struct layout" + msgstr "" + + #: toplev.c:1503 + msgid "Warn when padding is required to align struct members" + msgstr "" + + #: toplev.c:1505 + msgid "Warn when an optimization pass is disabled" + msgstr "" + + #: toplev.c:1507 + msgid "Warn about uses of __attribute__((deprecated)) declarations" + msgstr "" + + #: toplev.c:1509 + msgid "Warn about functions which might be candidates for attribute noreturn" + msgstr "" + + #: toplev.c:1580 toplev.c:4363 tradcpp.c:781 + #, c-format + msgid "invalid option `%s'" + msgstr "ìç Ýãêõñç åðéëïãÞ `%s'" + + #: toplev.c:1726 + #, fuzzy, c-format + msgid "internal error: %s" + msgstr "óöÜëìá óôçí áíÜãíùóç åéóüäïõ: %s" + + #: toplev.c:2026 + #, c-format + msgid "`%s' used but never defined" + msgstr "" + + #: toplev.c:2029 + #, c-format + msgid "`%s' declared `static' but never defined" + msgstr "" + + #: toplev.c:2051 + #, c-format + msgid "`%s' defined but not used" + msgstr "" + + #: toplev.c:2282 + #, c-format + msgid "invalid register name `%s' for register variable" + msgstr "" + + #: toplev.c:3574 + msgid " -ffixed- Mark as being unavailable to the compiler\n" + msgstr "" + + #: toplev.c:3575 + msgid " -fcall-used- Mark as being corrupted by function calls\n" + msgstr "" + + #: toplev.c:3576 + msgid " -fcall-saved- Mark as being preserved across functions\n" + msgstr "" + + #: toplev.c:3577 + msgid " -finline-limit= Limits the size of inlined functions to \n" + msgstr "" + + #: toplev.c:3578 + msgid " -fmessage-length= Limits diagnostics messages lengths to characters per line. 0 suppresses line-wrapping\n" + msgstr "" + + #: toplev.c:3579 + msgid " -fdiagnostics-show-location=[once | every-line] Indicates how often source location information should be emitted, as prefix, at the beginning of diagnostics when line-wrapping\n" + msgstr "" + + #: toplev.c:3590 + msgid " -O[number] Set optimization level to [number]\n" + msgstr "" + + #: toplev.c:3591 + msgid " -Os Optimize for space rather than speed\n" + msgstr "" + + #: toplev.c:3603 + msgid " -pedantic Issue warnings needed by strict compliance to ISO C\n" + msgstr "" + + #: toplev.c:3604 + msgid " -pedantic-errors Like -pedantic except that errors are produced\n" + msgstr "" + + #: toplev.c:3605 + msgid " -w Suppress warnings\n" + msgstr "" + + #: toplev.c:3606 + msgid " -W Enable extra warnings\n" + msgstr "" + + #: toplev.c:3617 + msgid " -Wunused Enable unused warnings\n" + msgstr "" + + #: toplev.c:3618 + msgid " -Wlarger-than- Warn if an object is larger than bytes\n" + msgstr "" + + #: toplev.c:3619 + msgid " -p Enable function profiling\n" + msgstr "" + + #: toplev.c:3621 + msgid " -a Enable block profiling \n" + msgstr "" + + #: toplev.c:3624 + msgid " -ax Enable jump profiling \n" + msgstr "" + + #: toplev.c:3626 + msgid " -o Place output into \n" + msgstr "" + + #: toplev.c:3627 + msgid "" + " -G Put global and static data smaller than \n" + " bytes into a special section (on some targets)\n" + msgstr "" + + #: toplev.c:3638 + msgid " -aux-info Emit declaration info into \n" + msgstr "" + + #: toplev.c:3639 + msgid " -quiet Do not display functions compiled or elapsed time\n" + msgstr "" + + #: toplev.c:3640 + msgid " -version Display the compiler's version\n" + msgstr "" + + #: toplev.c:3641 + msgid " -d[letters] Enable dumps from specific passes of the compiler\n" + msgstr "" + + #: toplev.c:3642 + msgid " -dumpbase Base name to be used for dumps from specific passes\n" + msgstr "" + + #: toplev.c:3644 + msgid " -fsched-verbose= Set the verbosity level of the scheduler\n" + msgstr "" + + #: toplev.c:3646 + msgid " --help Display this information\n" + msgstr "" + + #: toplev.c:3661 + msgid "\nLanguage specific options:\n" + msgstr "" + + #: toplev.c:3673 + #, c-format + msgid " %-23.23s [undocumented]\n" + msgstr "" + + #: toplev.c:3681 toplev.c:3695 + #, c-format + msgid "\nThere are undocumented %s specific options as well.\n" + msgstr "" + + #: toplev.c:3685 + #, c-format + msgid "\n Options for %s:\n" + msgstr "" + + #: toplev.c:3722 + #, fuzzy + msgid "\nTarget specific options:\n" + msgstr "äÞëùóç ðëÜôïõò" + + #: toplev.c:3736 toplev.c:3755 + #, c-format + msgid " -m%-23.23s [undocumented]\n" + msgstr "" + + #: toplev.c:3764 + msgid "\nThere are undocumented target specific options as well.\n" + msgstr "" + + #: toplev.c:3766 + msgid " They exist, but they are not documented.\n" + msgstr "" + + #: toplev.c:3819 + #, fuzzy, c-format + msgid "unrecognized gcc debugging option: %c" + msgstr "ìç áíáãíùñßóçìç åðéëïãÞ `-%c'" + + # src/request.c:806 src/request.c:912 + #: toplev.c:3889 + #, fuzzy, c-format + msgid "unrecognized register name `%s'" + msgstr "Ìç áíáãíùñßóçìï üíïìá åðéöÜíåéáò `%s'" + + #: toplev.c:3914 toplev.c:4792 + #, fuzzy, c-format + msgid "unrecognized option `%s'" + msgstr "ìç áíáãíùñßóçìç åðéëïãÞ `-%c'" + + #: toplev.c:3958 + msgid "-Wid-clash-LEN is no longer supported" + msgstr "" + + #: toplev.c:4035 + #, c-format + msgid "use -gdwarf -g%d for DWARF v1, level %d" + msgstr "" + + #: toplev.c:4038 + msgid "use -gdwarf-2 for DWARF v2" + msgstr "" + + #: toplev.c:4043 + #, c-format + msgid "ignoring option `%s' due to invalid debug level specification" + msgstr "" + + #: toplev.c:4066 toplev.c:4790 + #, fuzzy, c-format + msgid "`%s': unknown or unsupported -g option" + msgstr "%s: Üãíùóôï/ìç õðïóôçñéæüìåíï åßäïò áñ÷åßïõ.\n" + + #: toplev.c:4073 + #, c-format + msgid "`%s' ignored, conflicts with `-g%s'" + msgstr "" + + #: toplev.c:4152 + #, fuzzy + msgid "-param option missing argument" + msgstr "ðáñÜëçøç ïñßóìáôïò áñ÷åßïõ" + + #: toplev.c:4161 + #, fuzzy, c-format + msgid "invalid --param option: %s" + msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'" + + #: toplev.c:4173 + #, fuzzy, c-format + msgid "invalid parameter value `%s'" + msgstr "Ìç Ýãêõñï äéÜóôçìá ÷ñüíïõ `%s'" + + #: toplev.c:4380 + #, c-format + msgid "" + "%s%s%s version %s (%s)\n" + "%s\tcompiled by GNU C version %s.\n" + "%s%s%s version %s (%s) compiled by CC.\n" + msgstr "" + + # src/getopt1.c:132 + # src/getopt1.c:132 + #: toplev.c:4436 + #, fuzzy + msgid "options passed: " + msgstr "åðéëïãÞ %s" + + # src/getopt1.c:155 + # src/getopt1.c:155 + #: toplev.c:4465 + #, fuzzy + msgid "options enabled: " + msgstr "åðéëïãÞ á\n" + + #: toplev.c:4524 + #, fuzzy, c-format + msgid "can't open %s for writing" + msgstr "%s: ÓöÜëìá åããñáöÞò " + + #: toplev.c:4782 + #, fuzzy, c-format + msgid "ignoring command line option '%s'" + msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'" + + #: toplev.c:4785 + #, c-format + msgid "(it is valid for %s but not the selected language)" + msgstr "" + + #: toplev.c:4814 + msgid "-Wuninitialized is not supported without -O" + msgstr "" + + #: toplev.c:4870 + #, fuzzy + msgid "instruction scheduling not supported on this target machine" + msgstr "óõìâïëéêïß óýíäåóìïé äåí õðïóôçñßæïíôáé óôï óýóôçìá áõôü" + + #: toplev.c:4874 + msgid "this target machine does not have delayed branches" + msgstr "" + + #: toplev.c:4883 + msgid "profiling does not work without a frame pointer" + msgstr "" + + #: toplev.c:4898 + #, fuzzy, c-format + msgid "-f%sleading-underscore not supported on this target machine" + msgstr "óõìâïëéêïß óýíäåóìïé äåí õðïóôçñßæïíôáé óôï óýóôçìá áõôü" + + #: toplev.c:4961 + #, fuzzy + msgid "-ffunction-sections not supported for this target" + msgstr "ôï --no-dereference (-h) äåí õðïóôçñßæåôáé óå áõôü ôï óýóôçìá" + + #: toplev.c:4966 + #, fuzzy + msgid "-fdata-sections not supported for this target" + msgstr "óõìâïëéêïß óýíäåóìïé äåí õðïóôçñßæïíôáé óôï óýóôçìá áõôü" + + #: toplev.c:4973 + msgid "-ffunction-sections disabled; it makes profiling impossible" + msgstr "" + + #: toplev.c:4980 + #, fuzzy + msgid "-fprefetch-loop-arrays not supported for this target" + msgstr "ôï --no-dereference (-h) äåí õðïóôçñßæåôáé óå áõôü ôï óýóôçìá" + + #: toplev.c:4986 + msgid "-fprefetch-loop-arrays not supported for this target (try -march switches)" + msgstr "" + + #: toplev.c:4993 + msgid "-ffunction-sections may affect debugging on some targets" + msgstr "" + + #: toplev.c:5114 + #, fuzzy, c-format + msgid "error writing to %s" + msgstr "óöÜëìá åããñáöÞò %s" + + #: java/jcf-parse.c:1000 toplev.c:5116 + #, fuzzy, c-format + msgid "error closing %s" + msgstr "óöÜëìá áíÜãíùóçò %s" + + #. It's a float since it contains a point. + #: tradcif.y:231 + msgid "floating point numbers not allowed in #if expressions" + msgstr "" + + #: tradcif.y:277 + #, fuzzy + msgid "invalid number in #if expression" + msgstr "ìç Ýãêõñïò áñéèìüò áðü ãñáììÝò" + + #: tradcif.y:358 + #, fuzzy + msgid "invalid character constant in #if" + msgstr "ìç Ýãêõñïò óôáèåñüò ÷áñáêôÞñáò óôï áëöáñéèìéôéêü" + + #: tradcif.y:395 + msgid "double quoted strings not allowed in #if expressions" + msgstr "" + + #: tradcif.y:408 + #, fuzzy + msgid "invalid token in expression" + msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç" + + #: tradcif.y:499 + #, fuzzy + msgid "octal character constant does not fit in a byte" + msgstr "ìç Ýãêõñïò óôáèåñüò ÷áñáêôÞñáò óôï áëöáñéèìéôéêü" + + #: tradcif.y:520 + #, fuzzy + msgid "hex character constant does not fit in a byte" + msgstr "ìç Ýãêõñïò óôáèåñüò ÷áñáêôÞñáò óôï áëöáñéèìéôéêü" + + #: tradcif.y:551 + msgid "empty #if expression" + msgstr "" + + #: tradcif.y:565 + #, fuzzy + msgid "Junk after end of expression." + msgstr "Ðñüùñï ôÝëïò ôçò êáíïíéêÞò Ýêöñáóçò" + + #: tradcpp.c:138 + msgid "macro or #include recursion too deep" + msgstr "" + + #: tradcpp.c:555 + #, c-format + msgid "usage: %s [switches] input output" + msgstr "" + + #: tradcpp.c:571 + #, fuzzy + msgid "-traditional is not supported in C++" + msgstr "Ç ëåéôïõñãßá äåí õðïóôçñßæåôáé" + + #: tradcpp.c:573 + #, fuzzy + msgid "-traditional and -ansi are mutually exclusive" + msgstr "ïé åðéëïãÝò --string êáé --check åßíáé áìïéâáßùò áðïêëåéüìåíåò" + + #: tradcpp.c:587 + msgid "filename missing after -i option" + msgstr "" + + #: tradcpp.c:605 + msgid "filename missing after -o option" + msgstr "" + + #: tradcpp.c:664 + #, c-format + msgid "target missing after %s option" + msgstr "" + + #: tradcpp.c:678 + #, c-format + msgid "filename missing after %s option" + msgstr "" + + #: tradcpp.c:703 + #, c-format + msgid "macro name missing after -%c option" + msgstr "" + + #: tradcpp.c:723 + #, fuzzy + msgid "-pedantic and -traditional are mutually exclusive" + msgstr "\"Æþíç %s\" ãñáììÞ êáé åðéëïãÞ -l åßíáé áìïéâáßùò áðïêëåéüìåíá" + + #: tradcpp.c:728 + #, fuzzy + msgid "-trigraphs and -traditional are mutually exclusive" + msgstr "ïé åðéëïãÝò --string êáé --check åßíáé áìïéâáßùò áðïêëåéüìåíåò" + + #: tradcpp.c:754 + msgid "directory name missing after -I option" + msgstr "" + + #: tradcpp.c:1434 tradcpp.c:3926 + msgid "`/*' within comment" + msgstr "" + + #: tradcpp.c:1810 + #, fuzzy, c-format + msgid "unterminated #%s conditional" + msgstr "ìç ôåñìáôéæüìåío áëöáñéèìçôéêü" + + #: tradcpp.c:2169 + #, fuzzy + msgid "not in any file?!" + msgstr "Äåí åßíáé åðþíõìï áñ÷åßï" + + #: tradcpp.c:2275 + msgid "`defined' must be followed by ident or (ident)" + msgstr "" + + #: tradcpp.c:2279 + msgid "cccp error: invalid special hash type" + msgstr "" + + #: tradcpp.c:2377 tradcpp.c:2447 + msgid "#include expects \"fname\" or " + msgstr "" + + #: tradcpp.c:2532 + #, c-format + msgid "no include path in which to find %.*s" + msgstr "" + + #: tradcpp.c:2710 + #, fuzzy + msgid "invalid macro name" + msgstr "ìç Ýãêõñï üíïìá ìÞíá" + + #: tradcpp.c:2718 + #, fuzzy, c-format + msgid "invalid macro name `%s'" + msgstr "Ç ðáñÜìåôñïò `%s' äåí åßíáé Ýãêõñç." + + #: tradcpp.c:2723 + msgid "\"defined\" cannot be used as a macro name" + msgstr "" + + #: tradcpp.c:2750 + msgid "parameter name starts with a digit in #define" + msgstr "" + + #: tradcpp.c:2760 + msgid "badly punctuated parameter list in #define" + msgstr "" + + #: tradcpp.c:2768 + #, fuzzy + msgid "unterminated parameter list in #define" + msgstr "ìç ôåñìáôéæüìåíï üíïìá âÜñïõò" + + #: tradcpp.c:2816 + #, c-format + msgid "\"%.*s\" redefined" + msgstr "" + + #: tradcpp.c:3073 + msgid "# operator should be followed by a macro argument name" + msgstr "" + + #: tradcpp.c:3120 tradcpp.c:3146 tradcpp.c:3160 tradcpp.c:3167 tradcpp.c:3192 + #, fuzzy + msgid "invalid format #line command" + msgstr "Ç áëõóßäá ìïñöÞò äåí åßíáé Ýãêõñç: `%s'" + + #: tradcpp.c:3218 + #, fuzzy + msgid "undefining `defined'" + msgstr "áüñéóôï" + + #: tradcpp.c:3222 + #, fuzzy, c-format + msgid "undefining `%s'" + msgstr "¶íïéãìá ôïõ `%s'" + + #: tradcpp.c:3278 + msgid "extra text at end of directive" + msgstr "" + + #: tradcpp.c:3385 + #, c-format + msgid "#error%.*s" + msgstr "" + + #: tradcpp.c:3395 + #, fuzzy, c-format + msgid "#warning%.*s" + msgstr "ðñïåéäïðïßçóç: " + + #: tradcpp.c:3551 + msgid "#elif not within a conditional" + msgstr "" + + #: tradcpp.c:3808 + #, c-format + msgid "#%s not within a conditional" + msgstr "" + + #: tradcpp.c:3816 + msgid "#else or #elif after #else" + msgstr "" + + #: tradcpp.c:3856 + msgid "#else not within a conditional" + msgstr "" + + # src/dfa.c:652 src/dfa.c:655 src/dfa.c:682 src/dfa.c:686 src/dfa.c:687 + # src/dfa.c:690 src/dfa.c:703 src/dfa.c:704 + # src/dfa.c:660 src/dfa.c:663 src/dfa.c:690 src/dfa.c:694 src/dfa.c:695 + # src/dfa.c:698 src/dfa.c:711 src/dfa.c:712 + #: tradcpp.c:3887 + #, fuzzy + msgid "unbalanced #endif" + msgstr "Ìç éóóïñïðçìÝíï [" + + #: tradcpp.c:3981 + #, fuzzy + msgid "unterminated string or character constant" + msgstr "ìç ôåñìáôéæìÝíï áëöáñéèìçôéêü óôáèåñÜò" + + #: tradcpp.c:4139 + #, fuzzy, c-format + msgid "arguments given to macro `%s'" + msgstr "Ëåßðåé ðáñÜìåôñïò ãéá `%s'" + + #: tradcpp.c:4145 + #, fuzzy, c-format + msgid "no args to macro `%s'" + msgstr "Üãíùóôïò ÷áñáêôÞñáò `%s'" + + #: tradcpp.c:4147 + #, c-format + msgid "only 1 arg to macro `%s'" + msgstr "" + + #: tradcpp.c:4149 + #, c-format + msgid "only %d args to macro `%s'" + msgstr "" + + #: tradcpp.c:4151 + #, c-format + msgid "too many (%d) args to macro `%s'" + msgstr "" + + #: tradcpp.c:4748 + #, c-format + msgid "" + "internal error in %s, at tradcpp.c:%d\n" + "Please submit a full bug report.\n" + "See %s for instructions." + msgstr "" + + #: tree-dump.c:841 + #, fuzzy, c-format + msgid "could not open dump file `%s'" + msgstr "áäõíáìßá áíïßãìáôïò áñ÷åßïõ åîüäïõ `%s'" + + #: tree-dump.c:917 + #, fuzzy, c-format + msgid "ignoring unknown option `%.*s' in `-f%s'" + msgstr "¶ãíùóôç åðéëïãÞ: %s %s %s" + + #: tree.c:3841 + msgid "arrays of functions are not meaningful" + msgstr "" + + #: tree.c:3898 + msgid "function return type cannot be function" + msgstr "" + + #: tree.c:4645 + #, fuzzy + msgid "invalid initializer for bit string" + msgstr "Ç áëõóßäá ìïñöÞò äåí åßíáé Ýãêõñç: `%s'" + + #: tree.c:4704 + #, c-format + msgid "tree check: expected %s, have %s in %s, at %s:%d" + msgstr "" + + #: tree.c:4721 + #, c-format + msgid "tree check: expected class '%c', have '%c' (%s) in %s, at %s:%d" + msgstr "" + + #: config/i386/winnt.c:522 varasm.c:451 + #, c-format + msgid "%s causes a section type conflict" + msgstr "" + + #: varasm.c:877 + #, fuzzy, c-format + msgid "register name not specified for `%s'" + msgstr "ÅããñáöÞ ïíïìÜôùí ôùí åðéëåãìÝíùí ëÝîåùí-êëåéäéþí" + + #: varasm.c:879 + #, fuzzy, c-format + msgid "invalid register name for `%s'" + msgstr "ìç Ýãêõñïò áñéèìüò ðåäßïõ: `%s'" + + #: varasm.c:882 + #, c-format + msgid "data type of `%s' isn't suitable for a register" + msgstr "" + + #: varasm.c:885 + #, c-format + msgid "register specified for `%s' isn't suitable for data type" + msgstr "" + + #: varasm.c:894 + msgid "global register variable has initial value" + msgstr "" + + #: varasm.c:897 + msgid "volatile register variables don't work as you might wish" + msgstr "" + + #: varasm.c:930 + #, c-format + msgid "register name given for non-register variable `%s'" + msgstr "" + + # src/shred.c:1134 + #: varasm.c:1537 + #, fuzzy, c-format + msgid "size of variable `%s' is too large" + msgstr "%s: ôï áñ÷åßï åßíáé ðïëý ìåãÜëï" + + #: varasm.c:1577 + #, c-format + msgid "alignment of `%s' is greater than maximum object file alignment. Using %d" + msgstr "" + + #: varasm.c:1628 + #, c-format + msgid "requested alignment for %s is greater than implemented alignment of %d" + msgstr "" + + #: varasm.c:4449 + msgid "initializer for integer value is too complicated" + msgstr "" + + #: varasm.c:4454 + msgid "initializer for floating value is not a floating constant" + msgstr "" + + #: varasm.c:4503 + #, fuzzy + msgid "unknown set constructor type" + msgstr "Äåí åßíáé äõíáôüí íá âñåèåß ï ôýðïò ôïõ åðåîåñãáóôÞ." + + #: varasm.c:4717 + #, fuzzy, c-format + msgid "invalid initial value for member `%s'" + msgstr "ìç Ýãêõñïò áñéèìüò ðåäßïõ: `%s'" + + #: varasm.c:4909 + #, c-format + msgid "weak declaration of `%s' must be public" + msgstr "" + + #: varasm.c:4911 + #, c-format + msgid "weak declaration of `%s' must precede definition" + msgstr "" + + #: varasm.c:4915 + #, fuzzy, c-format + msgid "weak declaration of `%s' not supported" + msgstr "Ç ëåéôïõñãßá äåí õðïóôçñßæåôáé" + + #: varasm.c:5011 + msgid "only weak aliases are supported in this configuration" + msgstr "" + + #: varasm.c:5016 + msgid "alias definitions not supported in this configuration; ignored" + msgstr "" + + #: varray.c:88 + #, c-format + msgid "virtual array %s[%lu]: element %lu out of bounds in %s, at %s:%d" + msgstr "" + + #. Print an error message for unrecognized stab codes. + #: xcoffout.c:174 + #, c-format + msgid "no sclass for %s stab (0x%x)\n" + msgstr "" + + #: params.def:46 + msgid "The maximum number of instructions in a function that is eligible for inlining" + msgstr "" + + #: params.def:57 + msgid "The maximum number of instructions to consider to fill a delay slot" + msgstr "" + + #: params.def:68 + msgid "The maximum number of instructions to consider to find accurate live register information" + msgstr "" + + #: params.def:78 + msgid "The maximum length of scheduling's pending operations list" + msgstr "" + + #: params.def:85 + msgid "The maximum amount of memory to be allocated by GCSE" + msgstr "" + + #: params.def:90 + msgid "The maximum number of passes to make when doing GCSE" + msgstr "" + + #: config/darwin-c.c:76 + #, fuzzy + msgid "too many #pragma options align=reset" + msgstr "ÕðåñâïëéêÝò ðáñÜìåôñïé ðïõ äåí åßíáé åðéëïãÝò." + + #: config/darwin-c.c:98 config/darwin-c.c:101 config/darwin-c.c:103 + #: config/darwin-c.c:105 + #, fuzzy + msgid "malformed '#pragma options', ignoring" + msgstr "êáêïäéáìïñöùìÝíç ãñáììÞ áãíïÞèçêå" + + #: config/darwin-c.c:108 + msgid "junk at end of '#pragma options'" + msgstr "" + + #: config/darwin-c.c:118 + msgid "malformed '#pragma options align={mac68k|power|reset}', ignoring" + msgstr "" + + #: config/darwin-c.c:131 + msgid "missing '(' after '#pragma unused', ignoring" + msgstr "" + + #: config/darwin-c.c:149 + msgid "missing ')' after '#pragma unused', ignoring" + msgstr "" + + #: config/darwin-c.c:152 + msgid "junk at end of '#pragma unused'" + msgstr "" + + #: config/nextstep.c:68 + msgid "optimization turned on" + msgstr "" + + #: config/nextstep.c:74 + msgid "optimization turned off" + msgstr "" + + #: config/nextstep.c:83 + msgid "optimization level restored" + msgstr "" + + #: config/lynx-ng.h:97 config/lynx.h:120 config/rs6000/lynx.h:85 + msgid "-msystem-v and -p are incompatible" + msgstr "" + + #: config/lynx-ng.h:99 config/lynx.h:122 config/rs6000/lynx.h:87 + msgid "-msystem-v and -mthreads are incompatible" + msgstr "" + + #. Run-time compilation parameters selecting different hardware subsets. + #: config/1750a/1750a.h:39 + msgid "Use VAX-C alignment" + msgstr "" + + #: config/a29k/a29k.c:1028 + #, fuzzy, c-format + msgid "invalid %%Q value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/a29k/a29k.c:1034 config/alpha/alpha.c:5355 + #, fuzzy, c-format + msgid "invalid %%C value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/a29k/a29k.c:1040 config/alpha/alpha.c:5200 + #: config/rs6000/rs6000.c:6110 + #, fuzzy, c-format + msgid "invalid %%N value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/a29k/a29k.c:1046 config/alpha/alpha.c:5271 + #: config/rs6000/rs6000.c:6072 + #, fuzzy, c-format + msgid "invalid %%M value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/a29k/a29k.c:1052 config/alpha/alpha.c:5263 + #: config/rs6000/rs6000.c:6037 + #, fuzzy, c-format + msgid "invalid %%m value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/a29k/a29k.c:1154 config/alpha/alpha.c:5224 config/romp/romp.c:690 + #, fuzzy, c-format + msgid "invalid %%L value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/a29k/a29k.c:1159 config/rs6000/rs6000.c:6118 + #, fuzzy, c-format + msgid "invalid %%O value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/a29k/a29k.c:1165 config/alpha/alpha.c:5208 + #: config/rs6000/rs6000.c:6138 + #, fuzzy, c-format + msgid "invalid %%P value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/a29k/a29k.c:1175 + #, fuzzy, c-format + msgid "invalid %%V value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/a29k/a29k.h:101 + msgid "Generate code assuming DW bit is set" + msgstr "" + + #: config/a29k/a29k.h:102 + msgid "Generate code assuming DW bit is not set" + msgstr "" + + #: config/a29k/a29k.h:103 + msgid "Generate code using byte writes" + msgstr "" + + #: config/a29k/a29k.h:104 + msgid "Do not generate byte writes" + msgstr "" + + #: config/a29k/a29k.h:105 + msgid "Use small memory model" + msgstr "" + + #: config/a29k/a29k.h:106 + msgid "Use normal memory model" + msgstr "" + + #: config/a29k/a29k.h:107 + msgid "Use large memory model" + msgstr "" + + #: config/a29k/a29k.h:108 + msgid "Generate 29050 code" + msgstr "" + + #: config/a29k/a29k.h:109 + msgid "Generate 29000 code" + msgstr "" + + #: config/a29k/a29k.h:110 + msgid "Use kernel global registers" + msgstr "" + + #: config/a29k/a29k.h:111 + msgid "Use user global registers" + msgstr "" + + #: config/a29k/a29k.h:112 + msgid "Emit stack checking code" + msgstr "" + + #: config/a29k/a29k.h:113 + msgid "Do not emit stack checking code" + msgstr "" + + #: config/a29k/a29k.h:114 + msgid "Work around storem hardware bug" + msgstr "" + + #: config/a29k/a29k.h:115 + msgid "Do not work around storem hardware bug" + msgstr "" + + #: config/a29k/a29k.h:116 + msgid "Store locals in argument registers" + msgstr "" + + #: config/a29k/a29k.h:117 + msgid "Do not store locals in arg registers" + msgstr "" + + #: config/a29k/a29k.h:118 config/i960/i960.h:289 config/mips/mips.h:408 + msgid "Use software floating point" + msgstr "" + + #: config/a29k/a29k.h:119 + msgid "Do not generate multm instructions" + msgstr "" + + #: config/alpha/alpha.c:273 + #, fuzzy, c-format + msgid "-f%s ignored for Unicos/Mk (not supported)" + msgstr "áñ÷åßá fifo äåí õðïóôçñßæïíôáé" + + #: config/alpha/alpha.c:297 + #, fuzzy + msgid "-mieee not supported on Unicos/Mk" + msgstr "Ôï servname äåí õðïóôçñßæåôáé áðü ôï ai_socktype" + + #: config/alpha/alpha.c:308 + msgid "-mieee-with-inexact not supported on Unicos/Mk" + msgstr "" + + #: config/alpha/alpha.c:325 + #, c-format + msgid "bad value `%s' for -mtrap-precision switch" + msgstr "" + + #: config/alpha/alpha.c:339 + #, c-format + msgid "bad value `%s' for -mfp-rounding-mode switch" + msgstr "" + + #: config/alpha/alpha.c:354 + #, c-format + msgid "bad value `%s' for -mfp-trap-mode switch" + msgstr "" + + #: config/alpha/alpha.c:373 config/alpha/alpha.c:385 + #, c-format + msgid "bad value `%s' for -mcpu switch" + msgstr "" + + #: config/alpha/alpha.c:392 + #, fuzzy + msgid "trap mode not supported on Unicos/Mk" + msgstr "Ôï servname äåí õðïóôçñßæåôáé áðü ôï ai_socktype" + + #: config/alpha/alpha.c:399 + msgid "fp software completion requires -mtrap-precision=i" + msgstr "" + + #: config/alpha/alpha.c:415 + #, fuzzy + msgid "rounding mode not supported for VAX floats" + msgstr "Ôï servname äåí õðïóôçñßæåôáé áðü ôï ai_socktype" + + #: config/alpha/alpha.c:420 + #, fuzzy + msgid "trap mode not supported for VAX floats" + msgstr "Ôï servname äåí õðïóôçñßæåôáé áðü ôï ai_socktype" + + #: config/alpha/alpha.c:449 + #, c-format + msgid "L%d cache latency unknown for %s" + msgstr "" + + #: config/alpha/alpha.c:464 + #, c-format + msgid "bad value `%s' for -mmemory-latency" + msgstr "" + + #: config/alpha/alpha.c:5164 config/romp/romp.c:746 config/romp/romp.c:753 + #, fuzzy, c-format + msgid "invalid %%H value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/alpha/alpha.c:5174 + #, fuzzy, c-format + msgid "invalid %%J value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/alpha/alpha.c:5184 config/ia64/ia64.c:3525 + #, fuzzy, c-format + msgid "invalid %%r value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/alpha/alpha.c:5194 config/rs6000/rs6000.c:6184 + #, fuzzy, c-format + msgid "invalid %%R value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/alpha/alpha.c:5216 config/romp/romp.c:732 config/romp/romp.c:739 + #, fuzzy, c-format + msgid "invalid %%h value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/alpha/alpha.c:5306 + #, fuzzy, c-format + msgid "invalid %%U value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/alpha/alpha.c:5318 config/alpha/alpha.c:5332 config/romp/romp.c:698 + #: config/rs6000/rs6000.c:6192 + #, fuzzy, c-format + msgid "invalid %%s value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/alpha/alpha.c:5392 config/rs6000/rs6000.c:5899 + #, fuzzy, c-format + msgid "invalid %%E value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/alpha/alpha.c:5413 config/romp/romp.c:973 + #: config/rs6000/rs6000.c:6500 + #, fuzzy, c-format + msgid "invalid %%xn code" + msgstr "ìç Ýãêõñï äéêáßùìá" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/alpha/alpha.h:220 config/i386/i386.h:285 config/i386/i386.h:287 + #: config/i386/i386.h:289 config/ns32k/ns32k.h:103 config/rs6000/rs6000.h:329 + #: config/s390/s390.h:51 config/sparc/sparc.h:552 config/sparc/sparc.h:557 + msgid "Use hardware fp" + msgstr "" + + #: config/alpha/alpha.h:221 config/i386/i386.h:286 config/i386/i386.h:288 + #: config/rs6000/rs6000.h:331 config/sparc/sparc.h:554 + #: config/sparc/sparc.h:559 + msgid "Do not use hardware fp" + msgstr "" + + #: config/alpha/alpha.h:222 + msgid "Use fp registers" + msgstr "" + + #: config/alpha/alpha.h:224 + msgid "Do not use fp registers" + msgstr "" + + #: config/alpha/alpha.h:225 + msgid "Do not assume GAS" + msgstr "" + + #: config/alpha/alpha.h:226 + msgid "Assume GAS" + msgstr "" + + #: config/alpha/alpha.h:228 + msgid "Request IEEE-conformant math library routines (OSF/1)" + msgstr "" + + #: config/alpha/alpha.h:230 + msgid "Emit IEEE-conformant code, without inexact exceptions" + msgstr "" + + #: config/alpha/alpha.h:232 + msgid "Emit IEEE-conformant code, with inexact exceptions" + msgstr "" + + #: config/alpha/alpha.h:234 + msgid "Do not emit complex integer constants to read-only memory" + msgstr "" + + #: config/alpha/alpha.h:235 + msgid "Use VAX fp" + msgstr "" + + #: config/alpha/alpha.h:236 + msgid "Do not use VAX fp" + msgstr "" + + #: config/alpha/alpha.h:237 + msgid "Emit code for the byte/word ISA extension" + msgstr "" + + #: config/alpha/alpha.h:240 + msgid "Emit code for the motion video ISA extension" + msgstr "" + + #: config/alpha/alpha.h:243 + msgid "Emit code for the fp move and sqrt ISA extension" + msgstr "" + + #: config/alpha/alpha.h:245 + msgid "Emit code for the counting ISA extension" + msgstr "" + + #: config/alpha/alpha.h:248 + msgid "Emit code using explicit relocation directives" + msgstr "" + + #: config/alpha/alpha.h:251 + msgid "Emit 16-bit relocations to the small data areas" + msgstr "" + + #: config/alpha/alpha.h:253 + msgid "Emit 32-bit relocations to the small data areas" + msgstr "" + + #. For -mcpu= + #. For -mtune= + #. For -mfp-rounding-mode=[n|m|c|d] + #. For -mfp-trap-mode=[n|u|su|sui] + #. For -mtrap-precision=[p|f|i] + #. For -mmemory-latency= + #: config/alpha/alpha.h:281 + msgid "Use features of and schedule given CPU" + msgstr "" + + #: config/alpha/alpha.h:283 + msgid "Schedule given CPU" + msgstr "" + + #: config/alpha/alpha.h:285 + msgid "Control the generated fp rounding mode" + msgstr "" + + #: config/alpha/alpha.h:287 + msgid "Control the IEEE trap mode" + msgstr "" + + #: config/alpha/alpha.h:289 + msgid "Control the precision given to fp exceptions" + msgstr "" + + #: config/alpha/alpha.h:291 + msgid "Tune expected memory latency" + msgstr "" + + #: config/arc/arc.c:132 + #, c-format + msgid "bad value (%s) for -mcpu switch" + msgstr "" + + #: config/arc/arc.c:359 + #, fuzzy, c-format + msgid "argument of `%s' attribute is not a string constant" + msgstr "Ç ðáñÜìåôñïò óôï `%s' ðñÝðåé íá åßíáé Ýíáò áðëüò ÷áñáêôÞñáò" + + #: config/arc/arc.c:366 + #, c-format + msgid "argument of `%s' attribute is not \"ilink1\" or \"ilink2\"" + msgstr "" + + #: config/arc/arc.c:1709 config/m32r/m32r.c:2278 + #, fuzzy + msgid "invalid operand to %R code" + msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'" + + #: config/arc/arc.c:1741 config/m32r/m32r.c:2301 + msgid "invalid operand to %H/%L code" + msgstr "" + + #: config/arc/arc.c:1765 config/m32r/m32r.c:2378 + #, fuzzy + msgid "invalid operand to %U code" + msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'" + + #: config/arc/arc.c:1776 + #, fuzzy + msgid "invalid operand to %V code" + msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'" + + #. Unknown flag. + #: config/arc/arc.c:1783 config/m32r/m32r.c:2417 config/sparc/sparc.c:6010 + #, fuzzy + msgid "invalid operand output code" + msgstr "Ìç Ýãêõñïò êþäéêáò áßôçóçò" + + #: config/arm/arm.c:439 + #, c-format + msgid "switch -mcpu=%s conflicts with -march= switch" + msgstr "" + + #: config/arm/arm.c:449 config/rs6000/rs6000.c:441 config/sparc/sparc.c:383 + #, c-format + msgid "bad value (%s) for %s switch" + msgstr "" + + #: config/arm/arm.c:585 + msgid "target CPU does not support APCS-32" + msgstr "" + + #: config/arm/arm.c:590 + msgid "target CPU does not support APCS-26" + msgstr "" + + #: config/arm/arm.c:596 + msgid "target CPU does not support interworking" + msgstr "" + + #: config/arm/arm.c:602 + msgid "target CPU does not support THUMB instructions" + msgstr "" + + #: config/arm/arm.c:616 + msgid "enabling backtrace support is only meaningful when compiling for the Thumb" + msgstr "" + + #: config/arm/arm.c:619 + msgid "enabling callee interworking support is only meaningful when compiling for the Thumb" + msgstr "" + + #: config/arm/arm.c:622 + msgid "enabling caller interworking support is only meaningful when compiling for the Thumb" + msgstr "" + + #: config/arm/arm.c:628 + msgid "interworking forces APCS-32 to be used" + msgstr "" + + #: config/arm/arm.c:634 + msgid "-mapcs-stack-check incompatible with -mno-apcs-frame" + msgstr "" + + #: config/arm/arm.c:642 + msgid "-fpic and -mapcs-reent are incompatible" + msgstr "" + + #: config/arm/arm.c:645 + msgid "APCS reentrant code not supported. Ignored" + msgstr "" + + #: config/arm/arm.c:653 + msgid "-g with -mno-apcs-frame may not give sensible debugging" + msgstr "" + + #: config/arm/arm.c:661 + msgid "passing floating point arguments in fp regs not yet supported" + msgstr "" + + #: config/arm/arm.c:690 + #, fuzzy, c-format + msgid "invalid floating point emulation option: -mfpe-%s" + msgstr "Ç ðáñÜìåôñïò êéíçôÞò õðïäéáóôïëÞò äåí åßíáé Ýãêõñç: %s" + + #: config/arm/arm.c:714 + msgid "structure size boundary can only be set to 8 or 32" + msgstr "" + + #: config/arm/arm.c:722 + msgid "-mpic-register= is useless without -fpic" + msgstr "" + + #: config/arm/arm.c:731 + #, c-format + msgid "unable to use '%s' for PIC register" + msgstr "" + + #: config/arm/arm.c:1975 config/arm/arm.c:1998 config/avr/avr.c:4703 + #: config/c4x/c4x.c:4650 config/h8300/h8300.c:3019 config/i386/i386.c:1254 + #: config/i386/i386.c:1283 config/m68hc11/m68hc11.c:1160 + #: config/mcore/mcore.c:3505 config/ns32k/ns32k.c:1044 + #: config/rs6000/rs6000.c:10412 config/sh/sh.c:4703 config/sh/sh.c:4723 + #: config/sh/sh.c:4762 config/stormy16/stormy16.c:1999 config/v850/v850.c:2044 + #, c-format + msgid "`%s' attribute only applies to functions" + msgstr "" + + #: config/arm/arm.c:9265 + msgid "unable to compute real location of stacked parameter" + msgstr "" + + #: config/arm/arm.c:9945 + msgid "no low registers available for popping high registers" + msgstr "" + + #: config/arm/arm.c:10137 + msgid "interrupt Service Routines cannot be coded in Thumb mode" + msgstr "" + + #: config/arm/pe.c:168 config/i386/winnt.c:290 config/mcore/mcore.c:3365 + #, c-format + msgid "initialized variable `%s' is marked dllimport" + msgstr "" + + #: config/arm/pe.c:177 config/i386/winnt.c:299 + #, c-format + msgid "static variable `%s' is marked dllimport" + msgstr "" + + #: config/arm/arm.h:424 + msgid "Generate APCS conformant stack frames" + msgstr "" + + #: config/arm/arm.h:427 + msgid "Store function names in object code" + msgstr "" + + #: config/arm/arm.h:431 + msgid "Use the 32-bit version of the APCS" + msgstr "" + + #: config/arm/arm.h:433 + msgid "Use the 26-bit version of the APCS" + msgstr "" + + #: config/arm/arm.h:437 + msgid "Pass FP arguments in FP registers" + msgstr "" + + #: config/arm/arm.h:440 + msgid "Generate re-entrant, PIC code" + msgstr "" + + #: config/arm/arm.h:443 + msgid "The MMU will trap on unaligned accesses" + msgstr "" + + #: config/arm/arm.h:450 + msgid "Use library calls to perform FP operations" + msgstr "" + + #: config/arm/arm.h:452 config/i960/i960.h:287 + msgid "Use hardware floating point instructions" + msgstr "" + + #: config/arm/arm.h:454 + msgid "Assume target CPU is configured as big endian" + msgstr "" + + #: config/arm/arm.h:456 + msgid "Assume target CPU is configured as little endian" + msgstr "" + + #: config/arm/arm.h:458 + msgid "Assume big endian bytes, little endian words" + msgstr "" + + #: config/arm/arm.h:460 + msgid "Support calls between Thumb and ARM instruction sets" + msgstr "" + + #: config/arm/arm.h:463 + msgid "Generate a call to abort if a noreturn function returns" + msgstr "" + + #: config/arm/arm.h:466 + msgid "Do not move instructions into a function's prologue" + msgstr "" + + #: config/arm/arm.h:469 + msgid "Do not load the PIC register in function prologues" + msgstr "" + + #: config/arm/arm.h:472 + msgid "Generate call insns as indirect calls, if necessary" + msgstr "" + + #: config/arm/arm.h:475 + msgid "Compile for the Thumb not the ARM" + msgstr "" + + #: config/arm/arm.h:479 + msgid "Thumb: Generate (non-leaf) stack frames even if not needed" + msgstr "" + + #: config/arm/arm.h:482 + msgid "Thumb: Generate (leaf) stack frames even if not needed" + msgstr "" + + #: config/arm/arm.h:485 + msgid "Thumb: Assume non-static functions may be called from ARM code" + msgstr "" + + #: config/arm/arm.h:489 + msgid "Thumb: Assume function pointers may go to non-Thumb aware code" + msgstr "" + + #: config/arm/arm.h:499 + msgid "Specify the name of the target CPU" + msgstr "" + + #: config/arm/arm.h:501 + msgid "Specify the name of the target architecture" + msgstr "" + + #: config/arm/arm.h:505 + msgid "Specify the version of the floating point emulator" + msgstr "" + + #: config/arm/arm.h:507 + msgid "Specify the minimum bit alignment of structures" + msgstr "" + + #: config/arm/arm.h:509 + msgid "Specify the register to be used for PIC addressing" + msgstr "" + + #: config/arm/pe.h:65 + msgid "Ignore dllimport attribute for functions" + msgstr "" + + #. None of these is actually used in cc1. If we don't define them in target + #. switches cc1 complains about them. For the sake of argument lets allocate + #. bit 31 of target flags for such options. + #: config/arm/riscix.h:84 + msgid "Do symbol renaming for BSD" + msgstr "" + + #: config/arm/riscix.h:85 + msgid "Do symbol renaming for X/OPEN" + msgstr "" + + #: config/arm/riscix.h:86 + #, fuzzy + msgid "Don't do symbol renaming" + msgstr "äåí äþèçêå óõìâïëéêü üíïìá" + + #: config/avr/avr.c:221 + #, fuzzy, c-format + msgid "MCU `%s' not supported" + msgstr "áñ÷åßá fifo äåí õðïóôçñßæïíôáé" + + #: config/avr/avr.c:461 + #, c-format + msgid "large frame pointer change (%d) with -mtiny-stack" + msgstr "" + + #: config/avr/avr.c:1056 + msgid "bad address, not (reg+disp):" + msgstr "" + + #: config/avr/avr.c:1064 + msgid "internal compiler error. Bad address:" + msgstr "" + + #: config/avr/avr.c:1077 + msgid "internal compiler error. Unknown mode:" + msgstr "" + + #: config/avr/avr.c:1785 config/avr/avr.c:2497 + #, fuzzy + msgid "invalid insn:" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/avr/avr.c:1822 config/avr/avr.c:1908 config/avr/avr.c:1957 + #: config/avr/avr.c:1966 config/avr/avr.c:2064 config/avr/avr.c:2236 + #: config/avr/avr.c:2534 config/avr/avr.c:2645 + #, fuzzy + msgid "incorrect insn:" + msgstr "ëÜèïò óõíèçìáôéêü" + + #: config/avr/avr.c:1985 config/avr/avr.c:2149 config/avr/avr.c:2307 + #: config/avr/avr.c:2689 + #, fuzzy + msgid "unknown move insn:" + msgstr "Üãíùóôï óåô `%s'" + + #: config/avr/avr.c:2925 + msgid "bad shift insn:" + msgstr "" + + #: config/avr/avr.c:3041 config/avr/avr.c:3471 config/avr/avr.c:3851 + msgid "internal compiler error. Incorrect shift:" + msgstr "" + + #: config/avr/avr.c:4676 + msgid "only initialized variables can be placed into program memory area" + msgstr "" + + #: config/avr/avr.h:63 + msgid "Assume int to be 8 bit integer" + msgstr "" + + #: config/avr/avr.h:65 + msgid "Change the stack pointer without disabling interrupts" + msgstr "" + + #: config/avr/avr.h:67 + msgid "Use subroutines for function prologue/epilogue" + msgstr "" + + #: config/avr/avr.h:69 + msgid "Change only the low 8 bits of the stack pointer" + msgstr "" + + #: config/avr/avr.h:71 + msgid "Do not generate tablejump insns" + msgstr "" + + #: config/avr/avr.h:74 + msgid "Output instruction sizes to the asm file" + msgstr "" + + #: config/avr/avr.h:87 + msgid "Specify the initial stack address" + msgstr "" + + #: config/avr/avr.h:88 + #, fuzzy + msgid "Specify the MCU name" + msgstr "Ïñéóìüò ïíüìáôïò ðñïãñÜììáôïò" + + #. `GIV_SORT_CRITERION(GIV1, GIV2)' + #. In some cases, the strength reduction optimization pass can + #. produce better code if this is defined. This macro controls the + #. order that induction variables are combined. This macro is + #. particularly useful if the target has limited addressing modes. + #. For instance, the SH target has only positive offsets in + #. addresses. Thus sorting to put the smallest address first allows + #. the most combinations to be found. + #: config/avr/avr.h:2566 + #, fuzzy + msgid "trampolines not supported" + msgstr "Ç ëåéôïõñãßá äåí õðïóôçñßæåôáé" + + #: config/c4x/c4x-c.c:70 + #, c-format + msgid "missing '(' after '#pragma %s' - ignored" + msgstr "" + + #: config/c4x/c4x-c.c:73 + #, c-format + msgid "missing function name in '#pragma %s' - ignored" + msgstr "" + + #: config/c4x/c4x-c.c:78 + #, fuzzy, c-format + msgid "malformed '#pragma %s' - ignored" + msgstr "êáêïäéáìïñöùìÝíç ãñáììÞ áãíïÞèçêå" + + #: config/c4x/c4x-c.c:80 + #, c-format + msgid "missing section name in '#pragma %s' - ignored" + msgstr "" + + #: config/c4x/c4x-c.c:85 + #, c-format + msgid "missing ')' for '#pragma %s' - ignored" + msgstr "" + + #: config/c4x/c4x-c.c:88 + #, c-format + msgid "junk at end of '#pragma %s'" + msgstr "" + + #: config/c4x/c4x.c:299 + #, c-format + msgid "unknown CPU version %d, using 40.\n" + msgstr "" + + #: config/c4x/c4x.c:883 + #, c-format + msgid "ISR %s requires %d words of local vars, max is 32767" + msgstr "" + + #: config/c4x/c4x.c:1635 + msgid "using CONST_DOUBLE for address" + msgstr "" + + #: config/c4x/c4x.c:1775 + msgid "c4x_address_cost: Invalid addressing mode" + msgstr "" + + #: config/c4x/c4x.c:1917 + #, c-format + msgid "c4x_print_operand: %%L inconsistency" + msgstr "" + + #: config/c4x/c4x.c:1923 + #, c-format + msgid "c4x_print_operand: %%N inconsistency" + msgstr "" + + #: config/c4x/c4x.c:1964 + #, c-format + msgid "c4x_print_operand: %%O inconsistency" + msgstr "" + + #: config/c4x/c4x.c:2060 + msgid "c4x_print_operand: Bad operand case" + msgstr "" + + #: config/c4x/c4x.c:2103 + msgid "c4x_print_operand_address: Bad post_modify" + msgstr "" + + #: config/c4x/c4x.c:2125 + msgid "c4x_print_operand_address: Bad pre_modify" + msgstr "" + + #: config/c4x/c4x.c:2173 config/c4x/c4x.c:2185 config/c4x/c4x.c:2200 + msgid "c4x_print_operand_address: Bad operand case" + msgstr "" + + #: config/c4x/c4x.c:2456 + msgid "c4x_rptb_insert: Cannot find start label" + msgstr "" + + #: config/c4x/c4x.c:3443 config/c4x/c4x.c:3463 + #, fuzzy + msgid "mode not QImode" + msgstr "íåá_êáôÜóôáóç: êáôÜóôáóç ëåéôïõñãßáò\n" + + #: config/c4x/c4x.c:3520 + #, fuzzy + msgid "invalid indirect memory address" + msgstr "ìç Ýãêõñïò ÷ñüíïò ëÞîçò" + + #: config/c4x/c4x.c:3609 + msgid "invalid indirect (S) memory address" + msgstr "" + + #: config/c4x/c4x.c:3950 + msgid "c4x_valid_operands: Internal error" + msgstr "" + + #: config/c4x/c4x.c:4430 + msgid "c4x_operand_subword: invalid mode" + msgstr "" + + #: config/c4x/c4x.c:4433 + msgid "c4x_operand_subword: invalid operand" + msgstr "" + + #. We could handle these with some difficulty. + #. e.g., *p-- => *(p-=2); *(p+1). + #: config/c4x/c4x.c:4459 + msgid "c4x_operand_subword: invalid autoincrement" + msgstr "" + + #: config/c4x/c4x.c:4465 + msgid "c4x_operand_subword: invalid address" + msgstr "" + + #: config/c4x/c4x.c:4476 + msgid "c4x_operand_subword: address not offsettable" + msgstr "" + + #: config/c4x/c4x.c:4676 + msgid "c4x_rptb_rpts_p: Repeat block top label moved\n" + msgstr "" + + #. Name of the c4x assembler. + #. Name of the c4x linker. + #. Define assembler options. + #. Define linker options. + #. Define C preprocessor options. + #. Specify the end file to link with. + #. Target compilation option flags. + #. Small memory model. + #. Use 24-bit MPYI for C3x. + #. Fast fixing of floats. + #. Allow use of RPTS. + #. Emit C3x code. + #. Be compatible with TI assembler. + #. Be paranoid about DP reg. in ISRs. + #. Pass arguments on stack. + #. Enable features under development. + #. Enable repeat block. + #. Use BK as general register. + #. Use decrement and branch for C3x. + #. Enable debugging of GCC. + #. Force constants into registers. + #. Allow unsigned loop counters. + #. Force op0 and op1 to be same. + #. Save all 40 bits for floats. + #. Allow parallel insns. + #. Allow MPY||ADD, MPY||SUB insns. + #. Assume mem refs possibly aliased. + #. Emit C30 code. + #. Emit C31 code. + #. Emit C32 code. + #. Emit C33 code. + #. Emit C40 code. + #. Emit C44 code. + #. Run-time compilation parameters selecting different hardware subsets. + #. + #. Macro to define tables used to set the flags. + #. This is a list in braces of triplets in braces, + #. each pair being { "NAME", VALUE, "DESCRIPTION" } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/c4x/c4x.h:141 + msgid "Small memory model" + msgstr "" + + #: config/c4x/c4x.h:143 + msgid "Big memory model" + msgstr "" + + #: config/c4x/c4x.h:145 + msgid "Use MPYI instruction for C3x" + msgstr "" + + #: config/c4x/c4x.h:147 + msgid "Do not use MPYI instruction for C3x" + msgstr "" + + #: config/c4x/c4x.h:149 + msgid "Use fast but approximate float to integer conversion" + msgstr "" + + #: config/c4x/c4x.h:151 + msgid "Use slow but accurate float to integer conversion" + msgstr "" + + #: config/c4x/c4x.h:153 + msgid "Enable use of RTPS instruction" + msgstr "" + + #: config/c4x/c4x.h:155 + msgid "Disable use of RTPS instruction" + msgstr "" + + #: config/c4x/c4x.h:157 + msgid "Enable use of RTPB instruction" + msgstr "" + + #: config/c4x/c4x.h:159 + msgid "Disable use of RTPB instruction" + msgstr "" + + #: config/c4x/c4x.h:161 + msgid "Generate code for C30 CPU" + msgstr "" + + #: config/c4x/c4x.h:163 + msgid "Generate code for C31 CPU" + msgstr "" + + #: config/c4x/c4x.h:165 + msgid "Generate code for C32 CPU" + msgstr "" + + #: config/c4x/c4x.h:167 + msgid "Generate code for C33 CPU" + msgstr "" + + #: config/c4x/c4x.h:169 + msgid "Generate code for C40 CPU" + msgstr "" + + #: config/c4x/c4x.h:171 + msgid "Generate code for C44 CPU" + msgstr "" + + #: config/c4x/c4x.h:173 + msgid "Emit code compatible with TI tools" + msgstr "" + + #: config/c4x/c4x.h:175 + msgid "Emit code to use GAS extensions" + msgstr "" + + #: config/c4x/c4x.h:177 config/c4x/c4x.h:181 + msgid "Save DP across ISR in small memory model" + msgstr "" + + #: config/c4x/c4x.h:179 config/c4x/c4x.h:183 + msgid "Don't save DP across ISR in small memory model" + msgstr "" + + #: config/c4x/c4x.h:185 + msgid "Pass arguments on the stack" + msgstr "" + + #: config/c4x/c4x.h:187 + msgid "Pass arguments in registers" + msgstr "" + + #: config/c4x/c4x.h:189 + msgid "Enable new features under development" + msgstr "" + + #: config/c4x/c4x.h:191 + msgid "Disable new features under development" + msgstr "" + + #: config/c4x/c4x.h:193 + msgid "Use the BK register as a general purpose register" + msgstr "" + + #: config/c4x/c4x.h:195 + #, fuzzy + msgid "Do not allocate BK register" + msgstr "Äåí åßíáé äõíáôü íá äåóìåõôåß ìíÞìç" + + #: config/c4x/c4x.h:197 + msgid "Enable use of DB instruction" + msgstr "" + + #: config/c4x/c4x.h:199 + msgid "Disable use of DB instruction" + msgstr "" + + #: config/c4x/c4x.h:201 + msgid "Enable debugging" + msgstr "" + + #: config/c4x/c4x.h:203 + msgid "Disable debugging" + msgstr "" + + #: config/c4x/c4x.h:205 + msgid "Force constants into registers to improve hoisting" + msgstr "" + + #: config/c4x/c4x.h:207 + msgid "Don't force constants into registers" + msgstr "" + + #: config/c4x/c4x.h:209 + msgid "Force RTL generation to emit valid 3 operand insns" + msgstr "" + + #: config/c4x/c4x.h:211 + msgid "Allow RTL generation to emit invalid 3 operand insns" + msgstr "" + + #: config/c4x/c4x.h:213 + msgid "Allow unsigned interation counts for RPTB/DB" + msgstr "" + + #: config/c4x/c4x.h:215 + msgid "Disallow unsigned iteration counts for RPTB/DB" + msgstr "" + + #: config/c4x/c4x.h:217 + msgid "Preserve all 40 bits of FP reg across call" + msgstr "" + + #: config/c4x/c4x.h:219 + msgid "Only preserve 32 bits of FP reg across call" + msgstr "" + + #: config/c4x/c4x.h:221 + #, fuzzy + msgid "Enable parallel instructions" + msgstr "ÁêáôÜëëçëç åíôïëÞ" + + #: config/c4x/c4x.h:223 + #, fuzzy + msgid "Disable parallel instructions" + msgstr "ÁêáôÜëëçëç åíôïëÞ" + + #: config/c4x/c4x.h:225 + msgid "Enable MPY||ADD and MPY||SUB instructions" + msgstr "" + + #: config/c4x/c4x.h:227 + msgid "Disable MPY||ADD and MPY||SUB instructions" + msgstr "" + + #: config/c4x/c4x.h:229 + msgid "Assume that pointers may be aliased" + msgstr "" + + #: config/c4x/c4x.h:231 + msgid "Assume that pointers not aliased" + msgstr "" + + #: config/c4x/c4x.h:304 + msgid "Specify maximum number of iterations for RPTS" + msgstr "" + + #: config/c4x/c4x.h:306 + msgid "Select CPU to generate code for" + msgstr "" + + #. Macros used in the machine description to test the flags. + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/clipper/clipper.h:40 + msgid "Generate code for the C400" + msgstr "" + + #: config/clipper/clipper.h:41 + msgid "Generate code for the C300" + msgstr "" + + #: config/convex/convex.h:53 + msgid "Generate code for c1" + msgstr "" + + #: config/convex/convex.h:54 + msgid "Generate code for c2" + msgstr "" + + #: config/convex/convex.h:55 + msgid "Generate code for c32" + msgstr "" + + #: config/convex/convex.h:56 config/convex/convex.h:57 + msgid "Generate code for c34" + msgstr "" + + #: config/convex/convex.h:59 + msgid "Use standard calling sequence, with arg count word" + msgstr "" + + #: config/convex/convex.h:61 + msgid "Place arg count in a nop instruction (faster than push)" + msgstr "" + + #: config/convex/convex.h:63 + msgid "Don't push arg count, depend on symbol table" + msgstr "" + + #: config/convex/convex.h:65 + msgid "Use data cache for volatile mem refs (default)" + msgstr "" + + #: config/convex/convex.h:67 + msgid "Don't use data cache for volatile mem refs" + msgstr "" + + #: config/convex/convex.h:69 + msgid "Bypass data cache for volatile mem refs" + msgstr "" + + #: config/convex/convex.h:70 + msgid "Use 64-bit longs" + msgstr "" + + #: config/convex/convex.h:71 + msgid "Use cc- and libc-compatible 32-bit longs" + msgstr "" + + #: config/cris/cris.c:878 + #, c-format + msgid "stackframe too big: %d bytes" + msgstr "" + + #: config/cris/cris.c:1193 + msgid "allocated but unused delay list in epilogue" + msgstr "" + + #: config/cris/cris.c:1203 + msgid "unexpected function type needing stack adjustment for __builtin_eh_return" + msgstr "" + + #: config/cris/cris.c:1497 + #, fuzzy, c-format + msgid "internal error: bad register: %d" + msgstr "åóùôåñéêü óöÜëìá óôï %s, ãñáììÞ %u" + + #: config/cris/cris.c:1966 + msgid "internal error: sideeffect-insn affecting main effect" + msgstr "" + + #. If we get here, the caller got its initial tests wrong. + #: config/cris/cris.c:2253 + msgid "internal error: cris_side_effect_mode_ok with bad operands" + msgstr "" + + #: config/cris/cris.c:2335 config/cris/cris.c:2393 + #, fuzzy + msgid "unrecognized supposed constant" + msgstr "Üãíùóôï ðñüèåìá: %s" + + #: config/cris/cris.c:2434 + msgid "unrecognized supposed constant in cris_global_pic_symbol" + msgstr "" + + #: config/cris/cris.c:2453 + #, c-format + msgid "-max-stackframe=%d is not usable, not between 0 and %d" + msgstr "" + + #: config/cris/cris.c:2481 + #, c-format + msgid "unknown CRIS version specification in -march= or -mcpu= : %s" + msgstr "" + + #: config/cris/cris.c:2517 + #, fuzzy, c-format + msgid "unknown CRIS cpu version specification in -mtune= : %s" + msgstr "ðÜñá ðïëëÝò äçëþóåéò ìåôáôñïðÞò óôçí êáôÜëçîç" + + #: config/cris/cris.c:2535 + msgid "-fPIC not supported in this configuration" + msgstr "" + + #: config/cris/cris.c:2551 + msgid "that particular -g option is invalid with -maout and -melinux" + msgstr "" + + #: config/cris/cris.c:2742 config/cris/cris.c:2787 + msgid "unexpected side-effects in address" + msgstr "" + + #: config/cris/cris.c:2888 + msgid "PIC register isn't set up" + msgstr "" + + #: config/cris/cris.c:2901 + #, fuzzy + msgid "unexpected address expression" + msgstr "Ìç Ýãêõñç ðñïðïñåõüìåíç êáíïíéêÞ Ýêöñáóç" + + #. Labels are never marked as global symbols. + #: config/cris/cris.c:2915 + msgid "unexpected PIC symbol" + msgstr "" + + #: config/cris/cris.c:2919 + msgid "emitting PIC operand, but PIC register isn't set up" + msgstr "" + + #: config/cris/cris.c:2928 + msgid "unexpected NOTE as addr_const:" + msgstr "" + + #: config/cris/aout.h:106 + msgid "Compile for the MMU-less Etrax 100-based elinux system" + msgstr "" + + #: config/cris/aout.h:113 + msgid "For elinux, request a specified stack-size for this program" + msgstr "" + + #. No "no-etrax" as it does not really imply any model. On the other hand, "etrax" implies the common (and large) subset matching all models. + #: config/cris/cris.h:333 + msgid "Compile for ETRAX 4 (CRIS v3)" + msgstr "" + + #: config/cris/cris.h:338 + msgid "Compile for ETRAX 100 (CRIS v8)" + msgstr "" + + #: config/cris/cris.h:342 + msgid "Emit verbose debug information in assembly code" + msgstr "" + + #: config/cris/cris.h:345 + msgid "Do not use condition codes from normal instructions" + msgstr "" + + #: config/cris/cris.h:349 + msgid "Do not emit addressing modes with side-effect assignment" + msgstr "" + + #: config/cris/cris.h:352 + msgid "Do not tune stack alignment" + msgstr "" + + #: config/cris/cris.h:355 + msgid "Do not tune writable data alignment" + msgstr "" + + #: config/cris/cris.h:358 + msgid "Do not tune code and read-only data alignment" + msgstr "" + + #: config/cris/cris.h:367 + msgid "Align code and data to 32 bits" + msgstr "" + + #: config/cris/cris.h:380 + msgid "Don't align items in code or data" + msgstr "" + + #: config/cris/cris.h:383 + msgid "Do not emit function prologue or epilogue" + msgstr "" + + #. We have to handle this m-option here since we can't wash it off in both CC1_SPEC and CC1PLUS_SPEC. + #: config/cris/cris.h:387 + msgid "Use the most feature-enabling options allowed by other options" + msgstr "" + + #. We must call it "override-" since calling it "no-" will cause gcc.c to forget it, if there's a "later" -mbest-lib-options. Kludgy, but needed for some multilibbed files. + #: config/cris/cris.h:393 + msgid "Override -mbest-lib-options" + msgstr "" + + #: config/cris/cris.h:425 + msgid "Generate code for the specified chip or CPU version" + msgstr "" + + #: config/cris/cris.h:427 + msgid "Tune alignment for the specified chip or CPU version" + msgstr "" + + #: config/cris/cris.h:429 + msgid "Warn when a stackframe is larger than the specified size" + msgstr "" + + #. Node: Profiling + #: config/cris/cris.h:1025 + msgid "no FUNCTION_PROFILER for CRIS" + msgstr "" + + #: config/cris/linux.h:74 + msgid "Together with -fpic and -fPIC, do not use GOTPLT references" + msgstr "" + + #: config/d30v/d30v.c:209 + #, c-format + msgid "bad modes_tieable_p for register %s, mode1 %s, mode2 %s" + msgstr "" + + #: config/d30v/d30v.c:2676 + msgid "bad insn to d30v_print_operand_address:" + msgstr "" + + #: config/d30v/d30v.c:2693 config/d30v/d30v.c:2754 config/d30v/d30v.c:2775 + #: config/d30v/d30v.c:2793 + msgid "bad insn to d30v_print_operand_memory_reference:" + msgstr "" + + #: config/d30v/d30v.c:2861 + msgid "bad insn to d30v_print_operand, 'f' modifier:" + msgstr "" + + #: config/d30v/d30v.c:2870 + msgid "bad insn to d30v_print_operand, 'A' modifier:" + msgstr "" + + #: config/d30v/d30v.c:2877 + msgid "bad insn to d30v_print_operand, 'M' modifier:" + msgstr "" + + #: config/d30v/d30v.c:2931 + msgid "bad insn to print_operand, 'F' or 'T' modifier:" + msgstr "" + + #: config/d30v/d30v.c:2942 + msgid "bad insn to print_operand, 'B' modifier:" + msgstr "" + + #: config/d30v/d30v.c:2949 + msgid "bad insn to print_operand, 'E' modifier:" + msgstr "" + + #: config/d30v/d30v.c:2967 + msgid "bad insn to print_operand, 'R' modifier:" + msgstr "" + + #: config/d30v/d30v.c:2976 config/d30v/d30v.c:2984 + msgid "bad insn to print_operand, 's' modifier:" + msgstr "" + + #: config/d30v/d30v.c:3013 + msgid "bad insn in d30v_print_operand, 0 case" + msgstr "" + + #: config/d30v/d30v.c:3368 + msgid "d30v_emit_comparison" + msgstr "" + + #: config/d30v/d30v.c:3412 + msgid "bad call to d30v_move_2words" + msgstr "" + + #: config/d30v/d30v.h:108 + msgid "Enable use of conditional move instructions" + msgstr "" + + #: config/d30v/d30v.h:111 + msgid "Disable use of conditional move instructions" + msgstr "" + + #: config/d30v/d30v.h:114 + #, fuzzy + msgid "Debug argument support in compiler" + msgstr "%s: ç õðïóôÞñéîç åêóöáëìÜôùóçò äåí Ý÷åé óõìðåñéëçöèåß óôç ìåôáãëþôôéóç.\n" + + #: config/d30v/d30v.h:117 + #, fuzzy + msgid "Debug stack support in compiler" + msgstr "%s: ç õðïóôÞñéîç åêóöáëìÜôùóçò äåí Ý÷åé óõìðåñéëçöèåß óôç ìåôáãëþôôéóç.\n" + + #: config/d30v/d30v.h:120 + msgid "Debug memory address support in compiler" + msgstr "" + + #: config/d30v/d30v.h:123 + msgid "Make adjacent short instructions parallel if possible" + msgstr "" + + #: config/d30v/d30v.h:126 + msgid "Do not make adjacent short instructions parallel" + msgstr "" + + #: config/d30v/d30v.h:129 config/d30v/d30v.h:132 + msgid "Link programs/data to be in external memory by default" + msgstr "" + + #: config/d30v/d30v.h:135 + msgid "Link programs/data to be in onchip memory by default" + msgstr "" + + #: config/d30v/d30v.h:143 + msgid "Change the branch costs within the compiler" + msgstr "" + + #: config/d30v/d30v.h:146 + msgid "Change the threshold for conversion to conditional execution" + msgstr "" + + #: config/dsp16xx/dsp16xx.c:1446 config/dsp16xx/dsp16xx.c:1469 + msgid "stack size > 32k" + msgstr "" + + #: config/dsp16xx/dsp16xx.c:1678 + #, fuzzy + msgid "invalid addressing mode" + msgstr "ÁêáôÜëëçëç ÷ñÞóç ôïõ äéáìïñöùôÞ äéåýèõíóçò" + + #: config/dsp16xx/dsp16xx.c:1857 + #, fuzzy + msgid "bad register extension code" + msgstr "Äåí åßíáé äõíáôÞ ç êáôá÷þñçóç ôçò õðçñåóßáò" + + #: config/dsp16xx/dsp16xx.c:1958 + #, fuzzy + msgid "invalid offset in ybase addressing" + msgstr "ìç Ýãêõñïò ÷ñüíïò Ýíáñîçò" + + #: config/dsp16xx/dsp16xx.c:1961 + #, fuzzy + msgid "invalid register in ybase addressing" + msgstr "ìç Ýãêõñïò ÷ñüíïò Ýíáñîçò" + + #: config/dsp16xx/dsp16xx.c:1990 + #, fuzzy + msgid "inline float constants not supported on this host" + msgstr "óõìâïëéêïß óýíäåóìïé äåí õðïóôçñßæïíôáé óôï óýóôçìá áõôü" + + #: config/dsp16xx/dsp16xx.c:2140 + msgid "invalid shift operator in emit_1600_core_shift" + msgstr "" + + #: config/dsp16xx/dsp16xx.c:2469 + #, fuzzy + msgid "invalid mode for gen_tst_reg" + msgstr "ìç Ýãêõñç êáôÜóôáóç ãéá ôçí dlopen()" + + #: config/dsp16xx/dsp16xx.c:2541 + msgid "invalid mode for integer comparison in gen_compare_reg" + msgstr "" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/dsp16xx/dsp16xx.h:215 + msgid "Pass parameters in registers (default)" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:217 + msgid "Don't pass parameters in registers" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:219 + #, fuzzy + msgid "Generate code for near calls" + msgstr "×ñÞóç îå÷ùñéóôÞò ëáíèÜíïõóáò ìíÞìçò ãéá êÜèå ÷ñÞóôç" + + #: config/dsp16xx/dsp16xx.h:221 + msgid "Don't generate code for near calls" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:223 + #, fuzzy + msgid "Generate code for near jumps" + msgstr "×ñÞóç îå÷ùñéóôÞò ëáíèÜíïõóáò ìíÞìçò ãéá êÜèå ÷ñÞóôç" + + #: config/dsp16xx/dsp16xx.h:225 + msgid "Don't generate code for near jumps" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:227 + msgid "Generate code for a bit-manipulation unit" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:229 + msgid "Don't generate code for a bit-manipulation unit" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:231 + msgid "Generate code for memory map1" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:233 + msgid "Generate code for memory map2" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:235 + msgid "Generate code for memory map3" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:237 + msgid "Generate code for memory map4" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:239 + msgid "Ouput extra code for initialized data" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:241 + msgid "Don't let reg. allocator use ybase registers" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:243 + msgid "Output extra debug info in Luxworks environment" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:245 + msgid "Save temp. files in Luxworks environment" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:257 + msgid "Specify alternate name for text section" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:259 + msgid "Specify alternate name for data section" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:261 + msgid "Specify alternate name for bss section" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:263 + msgid "Specify alternate name for constant section" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:265 + msgid "Specify alternate name for dsp16xx chip" + msgstr "" + + #. Output assembler code to FILE to increment profiler label # LABELNO + #. for profiling a function entry. + #: config/dsp16xx/dsp16xx.h:1219 config/dsp16xx/dsp16xx.h:1224 + #: config/dsp16xx/dsp16xx.h:1229 config/dsp16xx/dsp16xx.h:1809 + #: config/dsp16xx/dsp16xx.h:1814 + #, fuzzy + msgid "profiling not implemented yet" + msgstr "Ç ëåéôïõñãßá äåí Ý÷åé õëïðïéçèåß" + + #. Emit RTL insns to initialize the variable parts of a trampoline. + #. FNADDR is an RTX for the address of the function's pure code. + #. CXT is an RTX for the static chain value for the function. + #: config/dsp16xx/dsp16xx.h:1240 config/dsp16xx/dsp16xx.h:1252 + #, fuzzy + msgid "trampolines not yet implemented" + msgstr "Ç ëåéôïõñãßá äåí Ý÷åé õëïðïéçèåß" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/elxsi/elxsi.h:51 + msgid "Generate code the unix assembler can handle" + msgstr "" + + #: config/elxsi/elxsi.h:52 + msgid "Generate code an embedded assembler can handle" + msgstr "" + + #: config/fr30/fr30.c:456 + msgid "fr30_print_operand_address: unhandled address" + msgstr "" + + #: config/fr30/fr30.c:483 + #, c-format + msgid "fr30_print_operand: unrecognized %p code" + msgstr "" + + #: config/fr30/fr30.c:503 + msgid "fr30_print_operand: unrecognized %b code" + msgstr "" + + #: config/fr30/fr30.c:524 + msgid "fr30_print_operand: unrecognized %B code" + msgstr "" + + #: config/fr30/fr30.c:532 + msgid "fr30_print_operand: invalid operand to %A code" + msgstr "" + + #: config/fr30/fr30.c:549 + #, c-format + msgid "fr30_print_operand: invalid %x code" + msgstr "" + + #: config/fr30/fr30.c:556 + msgid "fr30_print_operand: invalid %F code" + msgstr "" + + #: config/fr30/fr30.c:572 + msgid "fr30_print_operand: unknown code" + msgstr "" + + #: config/fr30/fr30.c:601 config/fr30/fr30.c:610 config/fr30/fr30.c:621 + #: config/fr30/fr30.c:634 + msgid "fr30_print_operand: unhandled MEM" + msgstr "" + + #: config/fr30/fr30.h:57 + msgid "Assume small address space" + msgstr "" + + #: config/h8300/h8300.c:141 + msgid "-ms2600 is used without -ms" + msgstr "" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/h8300/h8300.h:117 + msgid "Generate H8/S code" + msgstr "" + + #: config/h8300/h8300.h:118 + msgid "Do not generate H8/S code" + msgstr "" + + #: config/h8300/h8300.h:119 + msgid "Generate H8/S2600 code" + msgstr "" + + #: config/h8300/h8300.h:120 + msgid "Do not generate H8/S2600 code" + msgstr "" + + #: config/h8300/h8300.h:121 + msgid "Make integers 32 bits wide" + msgstr "" + + #: config/h8300/h8300.h:124 + #, fuzzy + msgid "Use registers for argument passing" + msgstr "Ý÷ïõí ðáñáëçöèåß ïñßóìáôá" + + #: config/h8300/h8300.h:126 + msgid "Do not use registers for argument passing" + msgstr "" + + #: config/h8300/h8300.h:128 + msgid "Consider access to byte sized memory slow" + msgstr "" + + #: config/h8300/h8300.h:129 + msgid "Enable linker relaxing" + msgstr "" + + #: config/h8300/h8300.h:131 + msgid "Generate H8/300H code" + msgstr "" + + #: config/h8300/h8300.h:132 + msgid "Do not generate H8/300H code" + msgstr "" + + #: config/h8300/h8300.h:133 + msgid "Use H8/300 alignment rules" + msgstr "" + + #: config/i370/i370-c.c:54 + msgid "junk at end of #pragma map" + msgstr "" + + #: config/i370/i370-c.c:60 + #, fuzzy + msgid "malformed #pragma map, ignored" + msgstr "êáêïäéáìïñöùìÝíç ãñáììÞ áãíïÞèçêå" + + #: config/i370/i370.c:897 + msgid "real name is too long - alias ignored" + msgstr "" + + #: config/i370/i370.c:902 + msgid "alias name is too long - alias ignored" + msgstr "" + + #: config/i370/i370.c:1173 + msgid "internal error--no jump follows compare:" + msgstr "" + + #. Macro to define tables used to set the flags. This is a list in braces + #. of pairs in braces, each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/i370/i370.h:63 + #, fuzzy + msgid "Generate char instructions" + msgstr "ÁêáôÜëëçëç åíôïëÞ" + + #: config/i370/i370.h:64 + msgid "Do not generate char instructions" + msgstr "" + + #: config/i386/i386.c:924 + #, c-format + msgid "code model %s not supported in PIC mode" + msgstr "" + + #: config/i386/i386.c:934 config/sparc/sparc.c:346 + #, c-format + msgid "bad value (%s) for -mcmodel= switch" + msgstr "" + + #: config/i386/i386.c:949 + #, c-format + msgid "bad value (%s) for -masm= switch" + msgstr "" + + #: config/i386/i386.c:952 + #, c-format + msgid "code model `%s' not supported in the %s bit mode" + msgstr "" + + #: config/i386/i386.c:955 + #, fuzzy + msgid "code model `large' not supported yet" + msgstr "åéäéêÜ áñ÷åßá ìðëïê äåí õðïóôçñßæïíôáé" + + #: config/i386/i386.c:957 + #, fuzzy, c-format + msgid "%i-bit mode not compiled in" + msgstr "%s: ç õðïóôÞñéîç åêóöáëìÜôùóçò äåí Ý÷åé óõìðåñéëçöèåß óôç ìåôáãëþôôéóç.\n" + + #: config/i386/i386.c:987 config/mips/mips.c:4972 + #, c-format + msgid "bad value (%s) for -march= switch" + msgstr "" + + #: config/i386/i386.c:998 config/mips/mips.c:4928 + #, c-format + msgid "bad value (%s) for -mcpu= switch" + msgstr "" + + #: config/i386/i386.c:1017 + #, c-format + msgid "-mregparm=%d is not between 0 and %d" + msgstr "" + + #: config/i386/i386.c:1030 + msgid "-malign-loops is obsolete, use -falign-loops" + msgstr "" + + #: config/i386/i386.c:1035 config/i386/i386.c:1048 config/i386/i386.c:1061 + #, c-format + msgid "-malign-loops=%d is not between 0 and %d" + msgstr "" + + #: config/i386/i386.c:1043 + msgid "-malign-jumps is obsolete, use -falign-jumps" + msgstr "" + + #: config/i386/i386.c:1056 + msgid "-malign-functions is obsolete, use -falign-functions" + msgstr "" + + #: config/i386/i386.c:1094 + #, c-format + msgid "-mpreferred-stack-boundary=%d is not between %d and 12" + msgstr "" + + #: config/i386/i386.c:1106 + #, c-format + msgid "-mbranch-cost=%d is not between 0 and 5" + msgstr "" + + #: config/i386/i386.c:1123 + msgid "-malign-double makes no sense in the 64bit mode" + msgstr "" + + #: config/i386/i386.c:1125 + msgid "-mrtd calling convention not supported in the 64bit mode" + msgstr "" + + #: config/i386/i386.c:1141 config/i386/i386.c:1152 + msgid "SSE instruction set disabled, using 387 arithmetics" + msgstr "" + + #: config/i386/i386.c:1157 + msgid "387 instruction set disabled, using SSE arithmetics" + msgstr "" + + #: config/i386/i386.c:1164 + #, c-format + msgid "bad value (%s) for -mfpmath= switch" + msgstr "" + + #: config/i386/i386.c:1294 + #, c-format + msgid "`%s' attribute requires an integer constant argument" + msgstr "" + + #: config/i386/i386.c:1300 + #, fuzzy, c-format + msgid "argument to `%s' attribute larger than %d" + msgstr "%s: ïé ôéìÝò ôïõ ðåäßïõ `%s' äåí ðñÝðåé íá åßíáé ìåãáëýôåñåò áðü %d" + + #: config/i386/i386.c:5328 + #, fuzzy + msgid "invalid UNSPEC as operand" + msgstr "ìç Ýãêõñç ìåôáôüðéóç UTC" + + #: config/i386/i386.c:5529 + msgid "extended registers have no high halves" + msgstr "" + + #: config/i386/i386.c:5544 + msgid "unsupported operand size for extended register" + msgstr "" + + #: config/i386/i386.c:5791 + msgid "operand is neither a constant nor a condition code, invalid operand code 'c'" + msgstr "" + + # src/grep.c:1133 + #: config/i386/i386.c:9774 + #, fuzzy + msgid "unknown insn mode" + msgstr "Üãíùóôç ìÝèïäïò êáôáëüãùí" + + #. @@@ better error message + #: config/i386/i386.c:11617 config/i386/i386.c:11650 + #, fuzzy + msgid "selector must be an immediate" + msgstr "ç ôéìÞ ãéá ôï %s ðñÝðåé íá åßíáé áêÝñáéïò" + + #. @@@ better error message + #: config/i386/i386.c:11808 config/i386/i386.c:11836 + #, fuzzy + msgid "mask must be an immediate" + msgstr "ç ôéìÞ ãéá ôï %s ðñÝðåé íá åßíáé áêÝñáéïò" + + #: config/i386/winnt.c:94 + #, c-format + msgid "`%s' attribute only applies to variables" + msgstr "" + + #: config/i386/winnt.c:262 + #, c-format + msgid "`%s' declared as both exported to and imported from a DLL" + msgstr "" + + #: config/i386/cygwin.h:51 + msgid "Use the Cygwin interface" + msgstr "" + + #: config/i386/cygwin.h:53 + msgid "Use the Mingw32 interface" + msgstr "" + + #: config/i386/cygwin.h:54 + msgid "Create GUI application" + msgstr "" + + #: config/i386/cygwin.h:55 + msgid "Don't set Windows defines" + msgstr "" + + #: config/i386/cygwin.h:56 + msgid "Set Windows defines" + msgstr "" + + #: config/i386/cygwin.h:58 + msgid "Create console application" + msgstr "" + + #: config/i386/cygwin.h:59 config/i386/win32.h:59 + msgid "Generate code for a DLL" + msgstr "" + + #: config/i386/cygwin.h:61 config/i386/win32.h:61 + msgid "Ignore dllimport for functions" + msgstr "" + + #: config/i386/cygwin.h:63 + msgid "Use Mingw-specific thread support" + msgstr "" + + #: config/i386/cygwin.h:257 + #, c-format + msgid "-f%s ignored for target (all code is position independent)" + msgstr "" + + #: config/i386/dgux.h:60 + msgid "Retain standard MXDB information" + msgstr "" + + #: config/i386/dgux.h:62 + #, fuzzy + msgid "Retain legend information" + msgstr "åìöÜíéóç ðëçñïöïñéþí ðñïüäïõ" + + #: config/i386/dgux.h:65 + msgid "Generate external legend information" + msgstr "" + + #: config/i386/dgux.h:67 + msgid "Emit identifying info in .s file" + msgstr "" + + #: config/i386/dgux.h:69 + msgid "Warn when a function arg is a structure" + msgstr "" + + # lib/argmatch.c:188 + #: config/i386/dgux.h:252 + #, fuzzy + msgid "argument is a structure" + msgstr "¸ãêõñá ïñßóìáôá åßíáé:" + + #: config/i386/djgpp.h:201 + msgid "-mbnu210 is ignored (option is obsolete)" + msgstr "" + + #: config/i386/i386.h:45 config/mips/mips.h:186 + msgid "half-pic init called on systems that don't support it" + msgstr "" + + #. Deprecated. + #: config/i386/i386.h:297 + #, fuzzy + msgid "Alternate calling convention" + msgstr "ìç ôåñìáôéæìÝíï áëöáñéèìçôéêü óôáèåñÜò" + + #: config/i386/i386.h:299 config/m68k/m68k.h:180 config/ns32k/ns32k.h:106 + msgid "Use normal calling convention" + msgstr "" + + #: config/i386/i386.h:301 + msgid "Align some doubles on dword boundary" + msgstr "" + + #: config/i386/i386.h:303 + msgid "Align doubles on word boundary" + msgstr "" + + #: config/i386/i386.h:305 + msgid "Uninitialized locals in .bss" + msgstr "" + + #: config/i386/i386.h:307 + msgid "Uninitialized locals in .data" + msgstr "" + + #: config/i386/i386.h:309 config/m68k/linux-aout.h:45 config/m68k/linux.h:50 + msgid "Use IEEE math for fp comparisons" + msgstr "" + + #: config/i386/i386.h:311 + msgid "Do not use IEEE math for fp comparisons" + msgstr "" + + #: config/i386/i386.h:313 + msgid "Return values of functions in FPU registers" + msgstr "" + + #: config/i386/i386.h:315 + msgid "Do not return values of functions in FPU registers" + msgstr "" + + #: config/i386/i386.h:317 + msgid "Do not generate sin, cos, sqrt for FPU" + msgstr "" + + #: config/i386/i386.h:319 + msgid "Generate sin, cos, sqrt for FPU" + msgstr "" + + #: config/i386/i386.h:321 + msgid "Omit the frame pointer in leaf functions" + msgstr "" + + #: config/i386/i386.h:324 + msgid "Enable stack probing" + msgstr "" + + #. undocumented + #. undocumented + #: config/i386/i386.h:329 + msgid "Align destination of the string operations" + msgstr "" + + #: config/i386/i386.h:331 + msgid "Do not align destination of the string operations" + msgstr "" + + #: config/i386/i386.h:333 + msgid "Inline all known string operations" + msgstr "" + + #: config/i386/i386.h:335 + msgid "Do not inline all known string operations" + msgstr "" + + #: config/i386/i386.h:337 config/i386/i386.h:342 + msgid "Use push instructions to save outgoing arguments" + msgstr "" + + #: config/i386/i386.h:339 config/i386/i386.h:344 + msgid "Do not use push instructions to save outgoing arguments" + msgstr "" + + #: config/i386/i386.h:346 + msgid "Support MMX built-in functions" + msgstr "" + + #: config/i386/i386.h:348 + msgid "Do not support MMX built-in functions" + msgstr "" + + #: config/i386/i386.h:351 + msgid "Support 3DNow! built-in functions" + msgstr "" + + #: config/i386/i386.h:354 + msgid "Do not support 3DNow! built-in functions" + msgstr "" + + #: config/i386/i386.h:356 + msgid "Support MMX and SSE built-in functions and code generation" + msgstr "" + + #: config/i386/i386.h:359 + msgid "Do not support MMX and SSE built-in functions and code generation" + msgstr "" + + #: config/i386/i386.h:361 + msgid "Support MMX, SSE and SSE2 built-in functions and code generation" + msgstr "" + + #: config/i386/i386.h:364 + msgid "Do not support MMX, SSE and SSE2 built-in functions and code generation" + msgstr "" + + #: config/i386/i386.h:366 + msgid "sizeof(long double) is 16" + msgstr "" + + #: config/i386/i386.h:368 + msgid "sizeof(long double) is 12" + msgstr "" + + #: config/i386/i386.h:370 + msgid "Generate 64bit x86-64 code" + msgstr "" + + #: config/i386/i386.h:372 + msgid "Generate 32bit i386 code" + msgstr "" + + #: config/i386/i386.h:374 + msgid "Use red-zone in the x86-64 code" + msgstr "" + + #: config/i386/i386.h:376 + msgid "Do not use red-zone in the x86-64 code" + msgstr "" + + #. This macro is similar to `TARGET_SWITCHES' but defines names of + #. command options that have values. Its definition is an + #. initializer with a subgrouping for each command option. + #. + #. Each subgrouping contains a string constant, that defines the + #. fixed part of the option name, and the address of a variable. The + #. variable, type `char *', is set to the variable part of the given + #. option if the fixed part matches. The actual option name is made + #. by appending `-m' to the specified name. + #: config/i386/i386.h:422 config/rs6000/rs6000.h:428 config/sparc/sparc.h:668 + msgid "Schedule code for given CPU" + msgstr "" + + #: config/i386/i386.h:424 + msgid "Generate floating point mathematics using given instruction set" + msgstr "" + + #: config/i386/i386.h:426 + msgid "Generate code for given CPU" + msgstr "" + + #: config/i386/i386.h:428 + msgid "Number of registers used to pass integer arguments" + msgstr "" + + #. TARGET_DEFAULT is defined in sun*.h and isi.h, etc. + #. This macro is similar to `TARGET_SWITCHES' but defines names of + #. command options that have values. Its definition is an + #. initializer with a subgrouping for each command option. + #. + #. Each subgrouping contains a string constant, that defines the + #. fixed part of the option name, and the address of a variable. The + #. variable, type `char *', is set to the variable part of the given + #. option if the fixed part matches. The actual option name is made + #. by appending `-m' to the specified name. + #: config/i386/i386.h:430 config/m68k/m68k.h:263 + msgid "Loop code aligned to this power of 2" + msgstr "" + + #: config/i386/i386.h:432 config/m68k/m68k.h:265 + msgid "Jump targets are aligned to this power of 2" + msgstr "" + + #: config/i386/i386.h:434 config/m68k/m68k.h:267 + msgid "Function starts are aligned to this power of 2" + msgstr "" + + #: config/i386/i386.h:437 + msgid "Attempt to keep stack aligned to this power of 2" + msgstr "" + + #: config/i386/i386.h:439 + msgid "Branches are this expensive (1-5, arbitrary units)" + msgstr "" + + #: config/i386/i386.h:441 + msgid "Use given x86-64 code model" + msgstr "" + + #: config/i386/i386.h:447 + msgid "Use given assembler dialect" + msgstr "" + + #: config/i386/osf1elf.h:112 + msgid "Profiling uses mcount" + msgstr "" + + #: config/i386/osfrose.h:60 + msgid "Emit half-PIC code" + msgstr "" + + #. intentionally undoc + #. intentionally undoc + #: config/i386/osfrose.h:67 + msgid "Emit ELF object code" + msgstr "" + + #: config/i386/osfrose.h:69 + msgid "Emit ROSE object code" + msgstr "" + + #: config/i386/osfrose.h:71 + msgid "Symbols have a leading underscore" + msgstr "" + + #: config/i386/osfrose.h:74 + msgid "Align to >word boundaries" + msgstr "" + + #: config/i386/osfrose.h:77 + #, fuzzy + msgid "Use mcount for profiling" + msgstr "áäýíáôç ç öüñôùóç äåäïìÝíùí ðñïößë" + + #: config/i386/osfrose.h:79 + msgid "Use mcount_ptr for profiling" + msgstr "" + + #: config/i386/sco5.h:771 + msgid "Generate ELF output" + msgstr "" + + #: config/i386/win32.h:53 + msgid "Use Mingw32 interface" + msgstr "" + + #: config/i386/win32.h:55 + msgid "Use Cygwin interface" + msgstr "" + + #: config/i386/win32.h:57 + msgid "Use bare Windows interface" + msgstr "" + + #. If the environment variable DJDIR is not defined, then DJGPP is not installed correctly and GCC will quickly become confused with the default prefix settings. Report the problem now so the user doesn't receive deceptive "file not found" error messages later. + #. DJDIR is automatically defined by the DJGPP environment config file pointed to by the environment variable DJGPP. Examine DJGPP to try and figure out what's wrong. + #: config/i386/xm-djgpp.h:71 + msgid "environment variable DJGPP not defined" + msgstr "" + + #: config/i386/xm-djgpp.h:73 + #, c-format + msgid "environment variable DJGPP points to missing file '%s'" + msgstr "" + + #: config/i386/xm-djgpp.h:76 + #, c-format + msgid "environment variable DJGPP points to corrupt file '%s'" + msgstr "" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/i860/i860.h:56 config/i860/paragon.h:28 + msgid "Generate code which uses the FPU" + msgstr "" + + #: config/i860/i860.h:57 config/i860/i860.h:58 config/i860/paragon.h:29 + #: config/i860/paragon.h:30 config/i860/paragon.h:31 + msgid "Do not generate code which uses the FPU" + msgstr "" + + #: config/i960/i960-c.c:67 + msgid "sorry, not implemented: #pragma align NAME=SIZE" + msgstr "" + + #: config/i960/i960-c.c:72 + #, fuzzy + msgid "malformed #pragma align - ignored" + msgstr "êáêïäéáìïñöùìÝíç ãñáììÞ áãíïÞèçêå" + + #: config/i960/i960-c.c:110 + msgid "sorry, not implemented: #pragma noalign NAME" + msgstr "" + + #: config/i960/i960.c:1405 config/m68k/m68k.c:665 config/rs6000/rs6000.c:8094 + #, fuzzy + msgid "stack limit expression is not supported" + msgstr "åéäéêÜ áñ÷åßá ìðëïê äåí õðïóôçñßæïíôáé" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #. ??? Not all ten of these architecture variations actually exist, but I + #. am not sure which are real and which aren't. + #: config/i960/i960.h:246 + msgid "Generate SA code" + msgstr "" + + #: config/i960/i960.h:249 + msgid "Generate SB code" + msgstr "" + + #. {"sc", (TARGET_FLAG_NUMERICS|TARGET_FLAG_PROTECTED| TARGET_FLAG_MC|TARGET_FLAG_COMPLEX_ADDR), N_("Generate SC code")}, + #: config/i960/i960.h:254 + msgid "Generate KA code" + msgstr "" + + #: config/i960/i960.h:257 + msgid "Generate KB code" + msgstr "" + + #. {"kc", (TARGET_FLAG_NUMERICS|TARGET_FLAG_PROTECTED| TARGET_FLAG_MC|TARGET_FLAG_COMPLEX_ADDR), N_("Generate KC code")}, + #: config/i960/i960.h:262 + msgid "Generate JA code" + msgstr "" + + #: config/i960/i960.h:264 + msgid "Generate JD code" + msgstr "" + + #: config/i960/i960.h:267 + msgid "Generate JF code" + msgstr "" + + #: config/i960/i960.h:269 + msgid "generate RP code" + msgstr "" + + #: config/i960/i960.h:272 + msgid "Generate MC code" + msgstr "" + + #: config/i960/i960.h:275 + msgid "Generate CA code" + msgstr "" + + #. {"cb", (TARGET_FLAG_NUMERICS|TARGET_FLAG_C_SERIES| TARGET_FLAG_BRANCH_PREDICT|TARGET_FLAG_CODE_ALIGN), N_("Generate CB code")}, {"cc", (TARGET_FLAG_NUMERICS|TARGET_FLAG_PROTECTED| TARGET_FLAG_C_SERIES|TARGET_FLAG_BRANCH_PREDICT| TARGET_FLAG_CODE_ALIGN), N_("Generate CC code")}, + #: config/i960/i960.h:285 + msgid "Generate CF code" + msgstr "" + + #: config/i960/i960.h:291 + msgid "Use alternate leaf function entries" + msgstr "" + + #: config/i960/i960.h:293 + msgid "Do not use alternate leaf function entries" + msgstr "" + + #: config/i960/i960.h:295 + msgid "Perform tail call optimization" + msgstr "" + + #: config/i960/i960.h:297 + msgid "Do not perform tail call optimization" + msgstr "" + + #: config/i960/i960.h:299 + msgid "Use complex addressing modes" + msgstr "" + + #: config/i960/i960.h:301 + #, fuzzy + msgid "Do not use complex addressing modes" + msgstr "ÁêáôÜëëçëç ÷ñÞóç ôïõ äéáìïñöùôÞ äéåýèõíóçò" + + #: config/i960/i960.h:303 + msgid "Align code to 8 byte boundary" + msgstr "" + + #: config/i960/i960.h:305 + msgid "Do not align code to 8 byte boundary" + msgstr "" + + #. {"clean-linkage", (TARGET_FLAG_CLEAN_LINKAGE), N_("Force use of prototypes")}, {"no-clean-linkage", -(TARGET_FLAG_CLEAN_LINKAGE), N_("Do not force use of prototypes")}, + #: config/i960/i960.h:311 config/i960/i960.h:313 + msgid "Enable compatibility with iC960 v2.0" + msgstr "" + + #: config/i960/i960.h:315 + msgid "Enable compatibility with iC960 v3.0" + msgstr "" + + #: config/i960/i960.h:317 config/i960/i960.h:319 + msgid "Enable compatibility with ic960 assembler" + msgstr "" + + #: config/i960/i960.h:321 + msgid "Do not permit unaligned accesses" + msgstr "" + + #: config/i960/i960.h:323 + msgid "Permit unaligned accesses" + msgstr "" + + #: config/i960/i960.h:325 + msgid "Layout types like Intel's v1.3 gcc" + msgstr "" + + #: config/i960/i960.h:327 + msgid "Do not layout types like Intel's v1.3 gcc" + msgstr "" + + #: config/i960/i960.h:329 config/sparc/freebsd.h:80 config/sparc/linux.h:85 + #: config/sparc/linux64.h:138 + msgid "Use 64 bit long doubles" + msgstr "" + + #: config/i960/i960.h:331 + msgid "Enable linker relaxation" + msgstr "" + + #: config/i960/i960.h:333 + msgid "Do not enable linker relaxation" + msgstr "" + + #. Override conflicting target switch options. + #. Doesn't actually detect if more than one -mARCH option is given, but + #. does handle the case of two blatantly conflicting -mARCH options. + #: config/i960/i960.h:348 config/i960/i960.h:358 + msgid "conflicting architectures defined - using C series" + msgstr "" + + #: config/i960/i960.h:353 + msgid "conflicting architectures defined - using K series" + msgstr "" + + #: config/i960/i960.h:368 + msgid "iC2.0 and iC3.0 are incompatible - using iC3.0" + msgstr "" + + #. ??? See the LONG_DOUBLE_TYPE_SIZE definition below. + #: config/i960/i960.h:379 + msgid "the -mlong-double-64 option does not work yet" + msgstr "" + + #: config/ia64/ia64.c:3570 + msgid "ia64_print_operand: unknown code" + msgstr "" + + #: config/ia64/ia64.c:3844 + msgid "value of -mfixed-range must have form REG1-REG2" + msgstr "" + + #: config/ia64/ia64.c:3871 + #, c-format + msgid "%s-%s is an empty range" + msgstr "" + + #: config/ia64/ia64.c:3936 + msgid "cannot optimize division for both latency and throughput" + msgstr "" + + #. This macro defines names of command options to set and clear bits in + #. `target_flags'. Its definition is an initializer with a subgrouping for + #. each command option. + #: config/ia64/ia64.h:112 + msgid "Generate big endian code" + msgstr "" + + #: config/ia64/ia64.h:114 config/mcore/mcore.h:159 + msgid "Generate little endian code" + msgstr "" + + #: config/ia64/ia64.h:116 + msgid "Generate code for GNU as" + msgstr "" + + #: config/ia64/ia64.h:118 + msgid "Generate code for Intel as" + msgstr "" + + #: config/ia64/ia64.h:120 + msgid "Generate code for GNU ld" + msgstr "" + + #: config/ia64/ia64.h:122 + msgid "Generate code for Intel ld" + msgstr "" + + #: config/ia64/ia64.h:124 + msgid "Generate code without GP reg" + msgstr "" + + #: config/ia64/ia64.h:126 + msgid "Emit stop bits before and after volatile extended asms" + msgstr "" + + #: config/ia64/ia64.h:128 + msgid "Don't emit stop bits before and after volatile extended asms" + msgstr "" + + #: config/ia64/ia64.h:130 + msgid "Emit code for Itanium (TM) processor B step" + msgstr "" + + #: config/ia64/ia64.h:132 + msgid "Use in/loc/out register names" + msgstr "" + + #: config/ia64/ia64.h:134 + msgid "Disable use of sdata/scommon/sbss" + msgstr "" + + #: config/ia64/ia64.h:136 + msgid "Enable use of sdata/scommon/sbss" + msgstr "" + + #: config/ia64/ia64.h:138 + msgid "gp is constant (but save/restore gp on indirect calls)" + msgstr "" + + #: config/ia64/ia64.h:140 + msgid "Generate self-relocatable code" + msgstr "" + + #: config/ia64/ia64.h:142 + msgid "Generate inline division, optimize for latency" + msgstr "" + + #: config/ia64/ia64.h:144 + msgid "Generate inline division, optimize for throughput" + msgstr "" + + #: config/ia64/ia64.h:146 + msgid "Enable Dwarf 2 line debug info via GNU as" + msgstr "" + + #: config/ia64/ia64.h:148 + msgid "Disable Dwarf 2 line debug info via GNU as" + msgstr "" + + #: config/ia64/ia64.h:176 + msgid "Specify range of registers to make fixed" + msgstr "" + + #: config/m32r/m32r.c:130 + #, c-format + msgid "bad value (%s) for -mmodel switch" + msgstr "" + + #: config/m32r/m32r.c:139 + #, c-format + msgid "bad value (%s) for -msdata switch" + msgstr "" + + #: config/m32r/m32r.c:310 + #, fuzzy, c-format + msgid "invalid argument of `%s' attribute" + msgstr "Ç ðáñÜìåôñïò `%s' äåí åßíáé Ýãêõñç." + + #: config/m32r/m32r.c:408 + msgid "const objects cannot go in .sdata/.sbss" + msgstr "" + + #: config/m32r/m32r.c:2248 + #, fuzzy, c-format + msgid "invalid operand to %s code" + msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'" + + #: config/m32r/m32r.c:2255 + #, fuzzy, c-format + msgid "invalid operand to %p code" + msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'" + + #: config/m32r/m32r.c:2311 + msgid "bad insn for 'A'" + msgstr "" + + #: config/m32r/m32r.c:2363 + msgid "invalid operand to %T/%B code" + msgstr "" + + #: config/m32r/m32r.c:2386 + #, fuzzy + msgid "invalid operand to %N code" + msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'" + + #: config/m32r/m32r.c:2431 + msgid "pre-increment address is not a register" + msgstr "" + + #: config/m32r/m32r.c:2438 + msgid "pre-decrement address is not a register" + msgstr "" + + #: config/m32r/m32r.c:2445 + msgid "post-increment address is not a register" + msgstr "" + + #: config/m32r/m32r.c:2523 config/m32r/m32r.c:2539 + #: config/rs6000/rs6000.c:10712 + #, fuzzy + msgid "bad address" + msgstr "ÅóöáëìÝíç äéåýèõíóç" + + #: config/m32r/m32r.c:2544 + #, fuzzy + msgid "lo_sum not of register" + msgstr "RPC: Ôï ðñüãñáììá äåí Ý÷åé êáôá÷ùñçèåß" + + #. { "relax", TARGET_RELAX_MASK, "" }, { "no-relax", -TARGET_RELAX_MASK, "" }, + #: config/m32r/m32r.h:241 + msgid "Display compile time statistics" + msgstr "" + + #: config/m32r/m32r.h:243 + msgid "Align all loops to 32 byte boundary" + msgstr "" + + #: config/m32r/m32r.h:246 + msgid "Only issue one instruction per cycle" + msgstr "" + + #: config/m32r/m32r.h:249 + msgid "Prefer branches over conditional execution" + msgstr "" + + #: config/m32r/m32r.h:265 + msgid "Code size: small, medium or large" + msgstr "" + + #: config/m32r/m32r.h:267 + msgid "Small data area: none, sdata, use" + msgstr "" + + #: config/m68hc11/m68hc11.c:236 + #, c-format + msgid "-f%s ignored for 68HC11/68HC12 (not supported)" + msgstr "" + + #. !!!! SCz wrong here. + #: config/m68hc11/m68hc11.c:3032 config/m68hc11/m68hc11.c:3406 + msgid "move insn not handled" + msgstr "" + + #: config/m68hc11/m68hc11.c:3252 config/m68hc11/m68hc11.c:3336 + #: config/m68hc11/m68hc11.c:3609 + msgid "invalid register in the move instruction" + msgstr "" + + #: config/m68hc11/m68hc11.c:3286 + #, fuzzy + msgid "invalid operand in the instruction" + msgstr "ìç Ýãêõñç ìÝôñçóç åðáíÜëçøçò `%s' óôç êáôáóêåõÞ [c*n]" + + #: config/m68hc11/m68hc11.c:3583 + #, fuzzy + msgid "invalid register in the instruction" + msgstr "ìç Ýãêõñïò ÷áñáêôÞñáò `%c' óôï ôýðï áëöáñéèìçôéêïý `%s'" + + #: config/m68hc11/m68hc11.c:3616 + msgid "operand 1 must be a hard register" + msgstr "" + + #: config/m68hc11/m68hc11.c:3633 + #, fuzzy + msgid "invalid rotate insn" + msgstr "Ìç Ýãêõñç çìåñïìçíßá `%s'." + + #: config/m68hc11/m68hc11.c:4053 + msgid "registers IX, IY and Z used in the same INSN" + msgstr "" + + #: config/m68hc11/m68hc11.c:4373 config/m68hc11/m68hc11.c:4678 + #, fuzzy + msgid "cannot do z-register replacement" + msgstr "Äåí åßíáé äõíáôÞ ç êáôá÷þñçóç ôçò õðçñåóßáò" + + #: config/m68hc11/m68hc11.c:4727 + msgid "invalid Z register replacement for insn" + msgstr "" + + #. Macro to define tables used to set the flags. This is a list in braces of + #. pairs in braces, each pair being { "NAME", VALUE } where VALUE is the bits + #. to set or minus the bits to clear. An empty string NAME is used to + #. identify the default VALUE. + #: config/m68hc11/m68hc11.h:152 + msgid "Compile with 16-bit integer mode" + msgstr "" + + #: config/m68hc11/m68hc11.h:154 + msgid "Compile with 32-bit integer mode" + msgstr "" + + #: config/m68hc11/m68hc11.h:156 + msgid "Auto pre/post decrement increment allowed" + msgstr "" + + #: config/m68hc11/m68hc11.h:158 + msgid "Auto pre/post decrement increment not allowed" + msgstr "" + + #: config/m68hc11/m68hc11.h:160 config/m68hc11/m68hc11.h:164 + msgid "Compile for a 68HC11" + msgstr "" + + #: config/m68hc11/m68hc11.h:162 config/m68hc11/m68hc11.h:166 + msgid "Compile for a 68HC12" + msgstr "" + + #. This macro is similar to `TARGET_SWITCHES' but defines names of + #. command options that have values. Its definition is an + #. initializer with a subgrouping for each command option. + #. + #. Each subgrouping contains a string constant, that defines the + #. fixed part of the option name, and the address of a variable. The + #. variable, type `char *', is set to the variable part of the given + #. option if the fixed part matches. The actual option name is made + #. by appending `-m' to the specified name. + #: config/m68hc11/m68hc11.h:180 + #, fuzzy + msgid "Specify the register allocation order" + msgstr "Áðïôõ÷ßá äÝóìåõóçò ðüñùí óõóôÞìáôïò" + + #: config/m68hc11/m68hc11.h:182 + msgid "Indicate the number of soft registers available" + msgstr "" + + #: config/m68k/m68k.c:150 + #, c-format + msgid "-malign-loops=%d is not between 1 and %d" + msgstr "" + + #: config/m68k/m68k.c:161 + #, c-format + msgid "-malign-jumps=%d is not between 1 and %d" + msgstr "" + + #: config/m68k/m68k.c:172 + #, c-format + msgid "-malign-functions=%d is not between 1 and %d" + msgstr "" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/m68k/m68k.h:162 config/m68k/m68k.h:164 + msgid "Generate code for a 68020" + msgstr "" + + #: config/m68k/m68k.h:169 config/m68k/m68k.h:172 + msgid "Generate code for a 68000" + msgstr "" + + #: config/m68k/m68k.h:174 + msgid "Use the bit-field instructions" + msgstr "" + + #: config/m68k/m68k.h:176 + msgid "Do not use the bit-field instructions" + msgstr "" + + #: config/m68k/m68k.h:178 + msgid "Use different calling convention using 'rtd'" + msgstr "" + + #: config/m68k/m68k.h:182 + msgid "Consider type `int' to be 16 bits wide" + msgstr "" + + #: config/m68k/m68k.h:184 + msgid "Consider type `int' to be 32 bits wide" + msgstr "" + + #: config/m68k/m68k.h:186 + msgid "Generate code for a Sun FPA" + msgstr "" + + #: config/m68k/m68k.h:189 + msgid "Do not generate code for a Sun FPA" + msgstr "" + + #: config/m68k/m68k.h:191 config/m68k/m68k.h:193 + msgid "Generate code for a Sun Sky board" + msgstr "" + + #: config/m68k/m68k.h:195 + msgid "Do not use Sky linkage convention" + msgstr "" + + #: config/m68k/m68k.h:197 + msgid "Generate code for a 68881" + msgstr "" + + #: config/m68k/m68k.h:200 + msgid "Generate code with library calls for floating point" + msgstr "" + + #: config/m68k/m68k.h:202 + msgid "Generate code for a 68040, without any new instructions" + msgstr "" + + #: config/m68k/m68k.h:205 + msgid "Generate code for a 68060, without any new instructions" + msgstr "" + + #: config/m68k/m68k.h:209 + msgid "Generate code for a 68030" + msgstr "" + + #: config/m68k/m68k.h:212 + msgid "Generate code for a 68040" + msgstr "" + + #: config/m68k/m68k.h:216 + msgid "Generate code for a 68060" + msgstr "" + + #: config/m68k/m68k.h:221 + msgid "Generate code for a 520X" + msgstr "" + + #: config/m68k/m68k.h:224 + msgid "Generate code for a 68851" + msgstr "" + + #: config/m68k/m68k.h:226 + msgid "Do no generate code for a 68851" + msgstr "" + + #: config/m68k/m68k.h:229 + msgid "Generate code for a 68302" + msgstr "" + + #: config/m68k/m68k.h:232 + msgid "Generate code for a 68332" + msgstr "" + + #: config/m68k/m68k.h:236 + msgid "Generate code for a cpu32" + msgstr "" + + #: config/m68k/m68k.h:239 + msgid "Align variables on a 32-bit boundary" + msgstr "" + + #: config/m68k/m68k.h:241 + msgid "Align variables on a 16-bit boundary" + msgstr "" + + #: config/m68k/m68k.h:243 + msgid "Generate pc-relative code" + msgstr "" + + #: config/m68k/m68k.h:245 + msgid "Do not use unaligned memory references" + msgstr "" + + #: config/m68k/m68k.h:247 + #, fuzzy + msgid "Use unaligned memory references" + msgstr "Ìç Ýãêõñç ðéóù-ðáñáðïìðÞ" + + #. Sometimes certain combinations of command options do not make + #. sense on a particular target machine. You can define a macro + #. `OVERRIDE_OPTIONS' to take account of this. This macro, if + #. defined, is executed once just after all the command options have + #. been parsed. + #. + #. Don't use this macro to turn on various extra optimizations for + #. `-O'. That is what `OPTIMIZATION_OPTIONS' is for. + #: config/m68k/m68k.h:284 config/m68k/m68kelf.h:267 config/m68k/m68kv4.h:299 + msgid "-fPIC is not currently supported on the 68000 or 68010\n" + msgstr "" + + #: config/m88k/m88k.c:900 + #, c-format + msgid "internal gcc monitor: short-branch(%x)" + msgstr "" + + #: config/m88k/m88k.c:2300 + msgid "internal gcc error: Can't express symbolic location" + msgstr "" + + #: config/m88k/m88k.c:2582 + #, c-format + msgid "argument #%d is a structure" + msgstr "" + + #: config/m88k/m88k.c:2882 + msgid "%R not followed by %B/C/D/E" + msgstr "" + + #: config/m88k/m88k.c:2950 + #, fuzzy, c-format + msgid "invalid %x/X value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/m88k/m88k.c:2955 + #, fuzzy + msgid "invalid %H value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/m88k/m88k.c:2961 + #, fuzzy + msgid "invalid %h value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/m88k/m88k.c:2967 + #, fuzzy + msgid "invalid %Q value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/m88k/m88k.c:2973 + #, fuzzy + msgid "invalid %q value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/m88k/m88k.c:2979 + #, fuzzy, c-format + msgid "invalid %o value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/m88k/m88k.c:2986 + #, fuzzy, c-format + msgid "invalid %p value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/m88k/m88k.c:2999 config/m88k/m88k.c:3004 + #, fuzzy, c-format + msgid "invalid %s/S value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/m88k/m88k.c:3015 + #, fuzzy + msgid "invalid %P operand" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/m88k/m88k.c:3046 + #, fuzzy + msgid "invalid %B value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/m88k/m88k.c:3063 + #, fuzzy + msgid "invalid %C value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/m88k/m88k.c:3076 + #, fuzzy + msgid "invalid %D value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/m88k/m88k.c:3084 + #, fuzzy, c-format + msgid "invalid %E value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/m88k/m88k.c:3089 + #, c-format + msgid "`%d' operand isn't a register" + msgstr "" + + #: config/m88k/m88k.c:3100 + #, fuzzy + msgid "invalid %r value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/m88k/m88k.c:3107 + msgid "operand is r0" + msgstr "" + + #: config/m88k/m88k.c:3121 + msgid "operand is const_double" + msgstr "" + + #: config/m88k/m88k.c:3140 + #, fuzzy + msgid "invalid code" + msgstr "ìç Ýãêõñï äéêáßùìá" + + #. Do any checking or such that is needed after processing the -m switches. + #: config/m88k/m88k.h:277 + msgid "-mtrap-large-shift and -mhandle-large-shift are incompatible" + msgstr "" + + #: config/m88k/m88k.h:299 + #, fuzzy, c-format + msgid "invalid option `-mshort-data-%s'" + msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'" + + #: config/m88k/m88k.h:304 + #, c-format + msgid "-mshort-data-%s is too large " + msgstr "" + + #: config/m88k/m88k.h:306 + #, c-format + msgid "-mshort-data-%s and PIC are incompatible" + msgstr "" + + #: config/mcore/mcore.c:3083 + #, fuzzy, c-format + msgid "invalid option `-mstack-increment=%s'" + msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'" + + #: config/mcore/mcore.h:126 + msgid "Inline constants if it can be done in 2 insns or less" + msgstr "" + + #: config/mcore/mcore.h:128 + msgid "Inline constants if it only takes 1 instruction" + msgstr "" + + #: config/mcore/mcore.h:130 + msgid "Set maximum alignment to 4" + msgstr "" + + #: config/mcore/mcore.h:132 + msgid "Set maximum alignment to 8" + msgstr "" + + #: config/mcore/mcore.h:136 + msgid "Do not use the divide instruction" + msgstr "" + + #: config/mcore/mcore.h:140 + msgid "Do not arbitary sized immediates in bit operations" + msgstr "" + + #: config/mcore/mcore.h:142 + msgid "Always treat bit-field as int-sized" + msgstr "" + + #: config/mcore/mcore.h:146 + msgid "Force functions to be aligned to a 4 byte boundary" + msgstr "" + + #: config/mcore/mcore.h:148 + msgid "Force functions to be aligned to a 2 byte boundary" + msgstr "" + + #: config/mcore/mcore.h:150 + #, fuzzy + msgid "Emit call graph information" + msgstr "åìöÜíéóç ðëçñïöïñéþí ðñïüäïõ" + + #: config/mcore/mcore.h:154 + msgid "Prefer word accesses over byte accesses" + msgstr "" + + #: config/mcore/mcore.h:165 + msgid "Generate code for the M*Core M340" + msgstr "" + + #: config/mcore/mcore.h:178 + msgid "Maximum amount for a single stack increment operation" + msgstr "" + + #: config/mips/mips.c:4824 + #, fuzzy, c-format + msgid "-mips%d not supported" + msgstr "Ôï ai_family äåí õðïóôçñßæåôáé" + + #: config/mips/mips.c:4831 + #, c-format + msgid "bad value (%s) for -mips switch" + msgstr "" + + #: config/mips/mips.c:4852 + #, c-format + msgid "bad value (%s) for -mabi= switch" + msgstr "" + + #: config/mips/mips.c:4890 + #, fuzzy, c-format + msgid "-mabi=%s does not support -mips%d" + msgstr "Ôï ai_socktype äåí õðïóôçñßæåôáé" + + #: config/mips/mips.c:4907 + msgid "this target does not support the -mabi switch" + msgstr "" + + #: config/mips/mips.c:5017 + #, c-format + msgid "bad value (%s) for -mtune= switch" + msgstr "" + + #: config/mips/mips.c:5033 + #, c-format + msgid "-march=%s does not support -mips%d" + msgstr "" + + #: config/mips/mips.c:5040 + #, c-format + msgid "-mips%d does not support 64 bit fp registers" + msgstr "" + + #: config/mips/mips.c:5046 + #, c-format + msgid "-mips%d does not support 64 bit gp registers" + msgstr "" + + #: config/mips/mips.c:5067 + msgid "-G is incompatible with PIC code which is the default" + msgstr "" + + #: config/mips/mips.c:5083 + msgid "-membedded-pic and -mabicalls are incompatible" + msgstr "" + + #: config/mips/mips.c:5086 + msgid "-G and -membedded-pic are incompatible" + msgstr "" + + #: config/mips/mips.c:5137 + #, fuzzy, c-format + msgid "invalid option `entry%s'" + msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'" + + #: config/mips/mips.c:5140 + msgid "-mentry is only meaningful with -mips-16" + msgstr "" + + #: config/mips/mips.c:5480 + #, c-format + msgid "internal error: %%) found without a %%( in assembler pattern" + msgstr "" + + #: config/mips/mips.c:5494 + #, c-format + msgid "internal error: %%] found without a %%[ in assembler pattern" + msgstr "" + + #: config/mips/mips.c:5507 + #, c-format + msgid "internal error: %%> found without a %%< in assembler pattern" + msgstr "" + + #: config/mips/mips.c:5520 + #, c-format + msgid "internal error: %%} found without a %%{ in assembler pattern" + msgstr "" + + #: config/mips/mips.c:5534 + #, c-format + msgid "PRINT_OPERAND: unknown punctuation '%c'" + msgstr "" + + #: config/mips/mips.c:5543 + msgid "PRINT_OPERAND null pointer" + msgstr "" + + #: config/mips/mips.c:5676 + #, c-format + msgid "invalid use of %%d, %%x, or %%X" + msgstr "" + + #: config/mips/mips.c:5719 + msgid "PRINT_OPERAND_ADDRESS, null pointer" + msgstr "" + + #: config/mips/mips.c:5943 + msgid "MIPS ECOFF format does not allow changing filenames within functions with #line" + msgstr "" + + #: config/mips/mips.c:6257 + #, fuzzy + msgid "can't rewind temp file" + msgstr "áäõíáìßá áíïßãìáôïò áñ÷åßïõ åîüäïõ" + + #: config/mips/mips.c:6261 + #, fuzzy + msgid "can't write to output file" + msgstr "áäõíáìßá åããñáöÞò áñ÷åßùí åîüäïõ óôï `%s'" + + #: config/mips/mips.c:6264 + #, fuzzy + msgid "can't read from temp file" + msgstr "áäõíáìßá áíïßãìáôïò áñ÷åßïõ åîüäïõ" + + #: config/mips/mips.c:6267 + #, fuzzy + msgid "can't close temp file" + msgstr "áäõíáìßá áíïßãìáôïò áñ÷åßïõ åîüäïõ" + + #: config/mips/mips.c:6700 + #, c-format + msgid "gp_offset (%ld) or end_offset (%ld) is less than zero" + msgstr "" + + #: config/mips/mips.c:6862 + #, c-format + msgid "fp_offset (%ld) or end_offset (%ld) is less than zero" + msgstr "" + + #: config/mips/mips.c:8893 + #, fuzzy, c-format + msgid "can not handle inconsistent calls to `%s'" + msgstr "áäõíáìßá åêôÝëåóçò ioctl óôï `%s'" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/mips/mips.h:368 config/mn10300/mn10300.h:64 + msgid "No default crt0.o" + msgstr "" + + #: config/mips/mips.h:370 + msgid "Use 64-bit int type" + msgstr "" + + #: config/mips/mips.h:372 + msgid "Use 64-bit long type" + msgstr "" + + #: config/mips/mips.h:374 + msgid "Use 32-bit long type" + msgstr "" + + #: config/mips/mips.h:376 + msgid "Optimize lui/addiu address loads" + msgstr "" + + #: config/mips/mips.h:378 + msgid "Don't optimize lui/addiu address loads" + msgstr "" + + #: config/mips/mips.h:380 + msgid "Use MIPS as" + msgstr "" + + #: config/mips/mips.h:382 + msgid "Use GNU as" + msgstr "" + + #: config/mips/mips.h:384 + #, fuzzy + msgid "Use symbolic register names" + msgstr "äåí äþèçêå óõìâïëéêü üíïìá" + + #: config/mips/mips.h:386 + msgid "Don't use symbolic register names" + msgstr "" + + #: config/mips/mips.h:388 config/mips/mips.h:390 + msgid "Use GP relative sdata/sbss sections" + msgstr "" + + #: config/mips/mips.h:392 config/mips/mips.h:394 + msgid "Don't use GP relative sdata/sbss sections" + msgstr "" + + #: config/mips/mips.h:396 + msgid "Output compiler statistics" + msgstr "" + + #: config/mips/mips.h:398 + msgid "Don't output compiler statistics" + msgstr "" + + #: config/mips/mips.h:400 + msgid "Don't optimize block moves" + msgstr "" + + #: config/mips/mips.h:402 + msgid "Optimize block moves" + msgstr "" + + #: config/mips/mips.h:404 + msgid "Use mips-tfile asm postpass" + msgstr "" + + #: config/mips/mips.h:406 + msgid "Don't use mips-tfile asm postpass" + msgstr "" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of triplets in braces, + #. each triplet being { "NAME", VALUE, DOC } + #. where VALUE is the bits to set or minus the bits to clear and DOC + #. is the documentation for --help (NULL if intentionally undocumented). + #. An empty string NAME is used to identify the default VALUE. + #: config/mips/mips.h:410 config/pdp11/pdp11.h:55 + msgid "Use hardware floating point" + msgstr "" + + #: config/mips/mips.h:412 + msgid "Use 64-bit FP registers" + msgstr "" + + #: config/mips/mips.h:414 + msgid "Use 32-bit FP registers" + msgstr "" + + #: config/mips/mips.h:416 + msgid "Use 64-bit general registers" + msgstr "" + + #: config/mips/mips.h:418 + msgid "Use 32-bit general registers" + msgstr "" + + #: config/mips/mips.h:420 + msgid "Use Irix PIC" + msgstr "" + + #: config/mips/mips.h:422 + msgid "Don't use Irix PIC" + msgstr "" + + #: config/mips/mips.h:424 + msgid "Use OSF PIC" + msgstr "" + + #: config/mips/mips.h:426 + msgid "Don't use OSF PIC" + msgstr "" + + #: config/mips/mips.h:428 + msgid "Use indirect calls" + msgstr "" + + #: config/mips/mips.h:430 + msgid "Don't use indirect calls" + msgstr "" + + #: config/mips/mips.h:432 + msgid "Use embedded PIC" + msgstr "" + + #: config/mips/mips.h:434 + msgid "Don't use embedded PIC" + msgstr "" + + #: config/mips/mips.h:436 + msgid "Use ROM instead of RAM" + msgstr "" + + #: config/mips/mips.h:438 + msgid "Don't use ROM instead of RAM" + msgstr "" + + #: config/mips/mips.h:440 + msgid "Put uninitialized constants in ROM (needs -membedded-data)" + msgstr "" + + #: config/mips/mips.h:442 + msgid "Don't put uninitialized constants in ROM" + msgstr "" + + #: config/mips/mips.h:444 + msgid "Use big-endian byte order" + msgstr "" + + #: config/mips/mips.h:446 + msgid "Use little-endian byte order" + msgstr "" + + #: config/mips/mips.h:448 + msgid "Use single (32-bit) FP only" + msgstr "" + + #: config/mips/mips.h:450 + msgid "Don't use single (32-bit) FP only" + msgstr "" + + #: config/mips/mips.h:452 + msgid "Use multiply accumulate" + msgstr "" + + #: config/mips/mips.h:454 + msgid "Don't use multiply accumulate" + msgstr "" + + #: config/mips/mips.h:456 config/rs6000/rs6000.h:351 + msgid "Don't generate fused multiply/add instructions" + msgstr "" + + #: config/mips/mips.h:458 config/rs6000/rs6000.h:349 + msgid "Generate fused multiply/add instructions" + msgstr "" + + #: config/mips/mips.h:460 + msgid "Work around early 4300 hardware bug" + msgstr "" + + #: config/mips/mips.h:462 + msgid "Don't work around early 4300 hardware bug" + msgstr "" + + #: config/mips/mips.h:464 + msgid "Optimize for 3900" + msgstr "" + + #: config/mips/mips.h:466 + msgid "Optimize for 4650" + msgstr "" + + #: config/mips/mips.h:468 + msgid "Trap on integer divide by zero" + msgstr "" + + #: config/mips/mips.h:470 + msgid "Don't trap on integer divide by zero" + msgstr "" + + #: config/mips/mips.h:472 + msgid "Trap on integer divide overflow" + msgstr "" + + #: config/mips/mips.h:474 + msgid "Don't trap on integer divide overflow" + msgstr "" + + #: config/mips/mips.h:590 config/mips/mips.h:592 + msgid "Specify CPU for scheduling purposes" + msgstr "" + + #: config/mips/mips.h:594 + msgid "Specify CPU for code generation purposes" + msgstr "" + + #: config/mips/mips.h:596 + msgid "Specify a Standard MIPS ISA" + msgstr "" + + #: config/mips/mips.h:598 + msgid "Use mips16 entry/exit psuedo ops" + msgstr "" + + #: config/mips/mips.h:600 + msgid "Don't use MIPS16 instructions" + msgstr "" + + #: config/mips/mips.h:604 + msgid "Don't call any cache flush functions" + msgstr "" + + #: config/mips/mips.h:606 + msgid "Specify cache flush function" + msgstr "" + + #. Output assembler code to FILE to increment profiler label # LABELNO + #. for profiling a function entry. + #: config/mips/mips.h:2869 + msgid "mips16 function profiling" + msgstr "" + + #: config/mmix/mmix.c:138 + #, fuzzy, c-format + msgid "-f%s not supported: ignored" + msgstr "áñ÷åßá fifo äåí õðïóôçñßæïíôáé" + + #: config/mmix/mmix.c:564 + #, c-format + msgid "too large function value type, needs %d registers, have only %d registers for this" + msgstr "" + + #: config/mmix/mmix.c:651 + msgid "stack frame too big" + msgstr "" + + #: config/mmix/mmix.c:679 + #, fuzzy, c-format + msgid "stack frame not a multiple of 8 bytes: %d" + msgstr "ï ßäéïò êáíüíáò óå ðïëëáðëÜ áñ÷åßá" + + #: config/mmix/mmix.c:1022 + #, c-format + msgid "stack frame not a multiple of octabyte: %d" + msgstr "" + + #: config/mmix/mmix.c:1190 + msgid "function_profiler support for MMIX" + msgstr "" + + #: config/mmix/mmix.c:1227 + msgid "neither varargs or stdarg in mmix_setup_incoming_varargs" + msgstr "" + + #: config/mmix/mmix.c:1233 + msgid "MMIX Internal: Last named vararg would not fit in a register" + msgstr "" + + #. FIXME: Remove when I know this trigs. + #: config/mmix/mmix.c:1556 + msgid "oops, not debugged; fixing up value:" + msgstr "" + + #: config/mmix/mmix.c:2100 config/mmix/mmix.c:2234 + msgid "MMIX Internal: Expected a CONST_INT, not this" + msgstr "" + + #: config/mmix/mmix.c:2108 config/mmix/mmix.c:2132 config/mmix/mmix.c:2251 + #, c-format + msgid "MMIX Internal: Bad register: %d" + msgstr "" + + #: config/mmix/mmix.c:2179 + msgid "MMIX Internal: Bad value for 'm', not a CONST_INT" + msgstr "" + + #: config/mmix/mmix.c:2202 + msgid "MMIX Internal: Expected a register, not this" + msgstr "" + + #: config/mmix/mmix.c:2212 + msgid "MMIX Internal: Expected a constant, not this" + msgstr "" + + #. Presumably there's a missing case above if we get here. + #: config/mmix/mmix.c:2244 + #, c-format + msgid "MMIX Internal: Missing `%c' case in mmix_print_operand" + msgstr "" + + #. We need the original here. + #: config/mmix/mmix.c:2295 + msgid "MMIX Internal: Cannot decode this operand" + msgstr "" + + #: config/mmix/mmix.c:2354 + msgid "MMIX Internal: This is not a recognized address" + msgstr "" + + #: config/mmix/mmix.c:2823 config/mmix/mmix.c:2892 + #, c-format + msgid "MMIX Internal: %s is not a shiftable int" + msgstr "" + + #: config/mmix/mmix.c:3011 + msgid "MMIX Internal: Trying to output invalidly reversed condition:" + msgstr "" + + #: config/mmix/mmix.c:3018 + msgid "MMIX Internal: What's the CC of this?" + msgstr "" + + #: config/mmix/mmix.c:3022 + msgid "MMIX Internal: What is the CC of this?" + msgstr "" + + #: config/mmix/mmix.c:3093 + msgid "MMIX Internal: This is not a constant:" + msgstr "" + + #. For these target macros, there is no generic documentation here. You + #. should read `Using and Porting GCC' for that. Only comments specific + #. to the MMIX target are here. + #. + #. There are however references to the specific texinfo node (comments + #. with "Node:"), so there should be little or nothing amiss. Probably + #. the opposite, since we don't have to care about old littering and + #. soon outdated generic comments. + #. Node: Driver + #. When both ABI:s work, this is how we tell them apart in code. The + #. GNU abi is implied the default. Also implied in TARGET_DEFAULT. + #. User symbols are in the same name-space as built-in symbols, but we + #. don't need the built-in symbols, so remove those and instead apply + #. stricter operand checking. Don't warn when expanding insns. + #. Pass on -mset-program-start=N and -mset-data-start=M to the linker. + #. Provide default program start 0x100 unless -mno-set-program-start. + #. Link to ELF if requested. + #. Put unused option values here. + #: config/mmix/mmix.h:135 + msgid "Set start-address of the program" + msgstr "" + + #: config/mmix/mmix.h:137 + msgid "Set start-address of data" + msgstr "" + + #. FIXME: Provide a way to *load* the epsilon register. + #: config/mmix/mmix.h:175 + msgid "For intrinsics library: pass all parameters in registers" + msgstr "" + + #: config/mmix/mmix.h:178 + msgid "Use register stack for parameters and return value" + msgstr "" + + #: config/mmix/mmix.h:180 + msgid "Use call-clobbered registers for parameters and return value" + msgstr "" + + #: config/mmix/mmix.h:182 + msgid "Use epsilon-respecting floating point compare instructions" + msgstr "" + + #: config/mmix/mmix.h:185 + msgid "Use zero-extending memory loads, not sign-extending ones" + msgstr "" + + #: config/mmix/mmix.h:188 + msgid "Generate divide results with reminder having the same sign as the divisor (not the dividend)" + msgstr "" + + #: config/mmix/mmix.h:192 + msgid "Prepend global symbols with \":\" (for use with PREFIX)" + msgstr "" + + #: config/mmix/mmix.h:194 + msgid "Do not provide a default start-address 0x100 of the program" + msgstr "" + + #: config/mmix/mmix.h:196 + msgid "Link to emit program in ELF format (rather than mmo)" + msgstr "" + + #: config/mmix/mmix.h:198 + msgid "Use P-mnemonics for branches statically predicted as taken" + msgstr "" + + #: config/mmix/mmix.h:200 + msgid "Don't use P-mnemonics for branches" + msgstr "" + + #: config/mn10300/mn10300.h:59 + msgid "Work around hardware multiply bug" + msgstr "" + + #: config/mn10300/mn10300.h:60 + msgid "Do not work around hardware multiply bug" + msgstr "" + + #: config/mn10300/mn10300.h:61 + msgid "Target the AM33 processor" + msgstr "" + + #: config/mn10300/mn10300.h:65 + msgid "Enable linker relaxations" + msgstr "" + + #: config/ns32k/ns32k.h:104 config/s390/s390.h:52 + msgid "Don't use hardware fp" + msgstr "" + + #: config/ns32k/ns32k.h:105 + msgid "Alternative calling convention" + msgstr "" + + #: config/ns32k/ns32k.h:107 + msgid "Pass some arguments in registers" + msgstr "" + + #: config/ns32k/ns32k.h:108 + msgid "Pass all arguments on stack" + msgstr "" + + #: config/ns32k/ns32k.h:109 + msgid "Optimize for 32532 cpu" + msgstr "" + + #: config/ns32k/ns32k.h:110 + msgid "Optimize for 32332 cpu" + msgstr "" + + #: config/ns32k/ns32k.h:112 + msgid "Optimize for 32032" + msgstr "" + + #: config/ns32k/ns32k.h:114 + msgid "Register sb is zero. Use for absolute addressing" + msgstr "" + + #: config/ns32k/ns32k.h:115 + #, fuzzy + msgid "Do not use register sb" + msgstr "Äåí åßíáé äõíáôÞ ç êáôá÷þñçóç ôçò õðçñåóßáò" + + #: config/ns32k/ns32k.h:116 + msgid "Do not use bit-field instructions" + msgstr "" + + #: config/ns32k/ns32k.h:117 + #, fuzzy + msgid "Use bit-field instructions" + msgstr "ÁêáôÜëëçëç åíôïëÞ" + + #: config/ns32k/ns32k.h:118 + msgid "Generate code for high memory" + msgstr "" + + #: config/ns32k/ns32k.h:119 + msgid "Generate code for low memory" + msgstr "" + + #: config/ns32k/ns32k.h:120 + msgid "32381 fpu" + msgstr "" + + #: config/ns32k/ns32k.h:121 + msgid "Use multiply-accumulate fp instructions" + msgstr "" + + #: config/ns32k/ns32k.h:123 + msgid "Do not use multiply-accumulate fp instructions" + msgstr "" + + #: config/ns32k/ns32k.h:124 + msgid "\"Small register classes\" kludge" + msgstr "" + + #: config/ns32k/ns32k.h:125 + msgid "No \"Small register classes\" kludge" + msgstr "" + + #: config/pa/pa.c:188 + #, c-format + msgid "" + "unknown -mschedule= option (%s).\n" + "Valid options are 700, 7100, 7100LC, 7200, and 8000\n" + msgstr "" + + #: config/pa/pa.c:213 + #, c-format + msgid "" + "unknown -march= option (%s).\n" + "Valid options are 1.0, 1.1, and 2.0\n" + msgstr "" + + #: config/pa/pa.c:218 + msgid "PIC code generation is not supported in the portable runtime model\n" + msgstr "" + + #: config/pa/pa.c:223 + msgid "PIC code generation is not compatible with fast indirect calls\n" + msgstr "" + + #: config/pa/pa.c:228 + msgid "-g is only supported when using GAS on this processor," + msgstr "" + + #: config/pa/pa.c:229 + #, fuzzy + msgid "-g option disabled" + msgstr "Ç ëåéôïõñãßá NIS+ áðÝôõ÷å" + + #: config/pdp11/pdp11.h:56 + msgid "Do not use hardware floating point" + msgstr "" + + #. return float result in ac0 + #: config/pdp11/pdp11.h:58 + #, fuzzy + msgid "Return floating point results in ac0" + msgstr "Åîáßñåóç êéíçôÞò õðïäéáóôïëÞò" + + #: config/pdp11/pdp11.h:59 + msgid "Return floating point results in memory" + msgstr "" + + #. is 11/40 + #: config/pdp11/pdp11.h:61 + msgid "Generate code for an 11/40" + msgstr "" + + #. is 11/45 + #: config/pdp11/pdp11.h:64 + msgid "Generate code for an 11/45" + msgstr "" + + #. is 11/10 + #: config/pdp11/pdp11.h:67 + msgid "Generate code for an 11/10" + msgstr "" + + #. use movstrhi for bcopy + #. use 32 bit for int + #: config/pdp11/pdp11.h:72 config/pdp11/pdp11.h:73 + msgid "Use 32 bit int" + msgstr "" + + #: config/pdp11/pdp11.h:74 config/pdp11/pdp11.h:75 + msgid "Use 16 bit int" + msgstr "" + + #. use 32 bit for float + #: config/pdp11/pdp11.h:77 config/pdp11/pdp11.h:78 + msgid "Use 32 bit float" + msgstr "" + + #: config/pdp11/pdp11.h:79 config/pdp11/pdp11.h:80 + msgid "Use 64 bit float" + msgstr "" + + #. allow abshi pattern? - can trigger "optimizations" which make code SLOW! + #. is branching expensive - on a PDP, it's actually really cheap + #. this is just to play around and check what code gcc generates + #. split instruction and data memory? + #: config/pdp11/pdp11.h:89 + msgid "Target has split I&D" + msgstr "" + + #: config/pdp11/pdp11.h:90 + #, fuzzy + msgid "Target does not have split I&D" + msgstr "-nt äåí äÝ÷åôáé -l\n" + + #. UNIX assembler syntax? + #: config/pdp11/pdp11.h:92 + msgid "Use UNIX assembler syntax" + msgstr "" + + #: config/pdp11/pdp11.h:93 + msgid "Use DEC assembler syntax" + msgstr "" + + #: config/pj/pj.h:73 + msgid "Generate little endian data" + msgstr "" + + #: config/pj/pj.h:75 + msgid "Generate big endian data" + msgstr "" + + #: config/pj/pj.h:77 + msgid "Turn on maintainer testing code" + msgstr "" + + #: config/pj/pj.h:79 + msgid "Enable Transmeta picoJava extensions" + msgstr "" + + #: config/pj/pj.h:81 + msgid "Disable Transmeta picoJava extensions" + msgstr "" + + #: config/pj/pj.h:83 + msgid "Disable reorganization pass" + msgstr "" + + #: config/romp/romp.c:682 + #, fuzzy, c-format + msgid "invalid %%B value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/romp/romp.c:709 config/rs6000/rs6000.c:6202 + #, fuzzy, c-format + msgid "invalid %%S value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/romp/romp.c:718 config/romp/romp.c:725 + #, fuzzy, c-format + msgid "invalid %%b value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/romp/romp.c:765 config/romp/romp.c:776 + #, fuzzy, c-format + msgid "invalid %%z value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/romp/romp.c:784 config/romp/romp.c:792 + #, fuzzy, c-format + msgid "invalid %%Z value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/romp/romp.c:799 config/romp/romp.c:808 config/romp/romp.c:815 + #: config/rs6000/rs6000.c:5981 + #, fuzzy, c-format + msgid "invalid %%k value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/romp/romp.c:900 config/romp/romp.c:943 + #, fuzzy, c-format + msgid "invalid %%j value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #. Perform any needed actions needed for a function that is receiving a + #. variable number of arguments. + #. + #. CUM is as above. + #. + #. MODE and TYPE are the mode and type of the current parameter. + #. + #. PRETEND_SIZE is a variable that should be set to the amount of stack + #. that must be pushed by the prolog to pretend that our caller pushed + #. it. + #. + #. Normally, this macro will push all remaining incoming registers on the + #. stack and set PRETEND_SIZE to the length of the registers pushed. + #: config/romp/romp.h:661 + msgid "can't have varargs with -mfp-arg-in-fp-regs" + msgstr "" + + #: config/rs6000/rs6000.c:472 + #, fuzzy + msgid "-mmultiple is not supported on little endian systems" + msgstr "óõìâïëéêïß óýíäåóìïé äåí õðïóôçñßæïíôáé óôï óýóôçìá áõôü" + + #: config/rs6000/rs6000.c:479 + #, fuzzy + msgid "-mstring is not supported on little endian systems" + msgstr "ðñïåéäïðïßçóç: ôï --pid=PID äåí õðïóôçñßæåôáé óå áõôü ôï óýóôçìá" + + #: config/rs6000/rs6000.c:485 + #, c-format + msgid "-f%s ignored (all code is position independent)" + msgstr "" + + #: config/rs6000/rs6000.c:494 + msgid "-ffunction-sections disabled on AIX when debugging" + msgstr "" + + #: config/rs6000/rs6000.c:500 + #, fuzzy + msgid "-fdata-sections not supported on AIX" + msgstr "Ç ëåéôïõñãßá äåí õðïóôçñßæåôáé" + + #: config/rs6000/rs6000.c:515 + #, c-format + msgid "unknown -mdebug-%s switch" + msgstr "" + + #: config/rs6000/rs6000.c:525 + #, c-format + msgid "Unknown switch -mlong-double-%s" + msgstr "" + + #: config/rs6000/rs6000.c:590 + #, fuzzy, c-format + msgid "unknown ABI specified: '%s'" + msgstr "Üãíùóôï óåô `%s'" + + #: config/rs6000/rs6000.c:3810 + #, fuzzy, c-format + msgid "argument 3 of `%s' must be a 2-bit literal" + msgstr "Ç ðáñÜìåôñïò óôï `%s' ðñÝðåé íá åßíáé Ýíáò áðëüò ÷áñáêôÞñáò" + + #: config/rs6000/rs6000.c:5908 + #, fuzzy, c-format + msgid "invalid %%f value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/rs6000/rs6000.c:5917 + #, fuzzy, c-format + msgid "invalid %%F value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/rs6000/rs6000.c:5926 + #, fuzzy, c-format + msgid "invalid %%G value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/rs6000/rs6000.c:5961 + #, fuzzy, c-format + msgid "invalid %%j code" + msgstr "ìç Ýãêõñï äéêáßùìá" + + #: config/rs6000/rs6000.c:5971 + #, fuzzy, c-format + msgid "invalid %%J code" + msgstr "ìç Ýãêõñï äéêáßùìá" + + #: config/rs6000/rs6000.c:6001 + #, fuzzy, c-format + msgid "invalid %%K value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/rs6000/rs6000.c:6128 + #, fuzzy, c-format + msgid "invalid %%p value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/rs6000/rs6000.c:6165 + #, fuzzy, c-format + msgid "invalid %%q value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/rs6000/rs6000.c:6228 + #, c-format + msgid "%%S computed all 1's mask" + msgstr "" + + #: config/rs6000/rs6000.c:6255 + #, c-format + msgid "%%S computed all 0's mask" + msgstr "" + + #: config/rs6000/rs6000.c:6265 + #, fuzzy, c-format + msgid "invalid %%T value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/rs6000/rs6000.c:6275 + #, fuzzy, c-format + msgid "invalid %%u value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/rs6000/rs6000.c:6284 + #, fuzzy, c-format + msgid "invalid %%v value" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/rs6000/aix.h:134 config/rs6000/beos.h:32 + #, fuzzy + msgid "Always pass floating-point arguments in memory" + msgstr "Ç ðáñÜìåôñïò êéíçôÞò õðïäéáóôïëÞò äåí åßíáé Ýãêõñç: %s" + + #: config/rs6000/aix.h:136 config/rs6000/beos.h:34 + #, fuzzy + msgid "Don't always pass floating-point arguments in memory" + msgstr "Ç ðáñÜìåôñïò êéíçôÞò õðïäéáóôïëÞò äåí åßíáé Ýãêõñç: %s" + + #: config/rs6000/aix41.h:28 config/rs6000/aix43.h:32 config/rs6000/aix51.h:32 + msgid "Support message passing with the Parallel Environment" + msgstr "" + + #: config/rs6000/aix43.h:28 config/rs6000/aix51.h:28 + msgid "Compile for 64-bit pointers" + msgstr "" + + #: config/rs6000/aix43.h:30 config/rs6000/aix51.h:30 + msgid "Compile for 32-bit pointers" + msgstr "" + + #: config/rs6000/aix43.h:49 config/rs6000/aix51.h:49 + msgid "-maix64 and POWER architecture are incompatible" + msgstr "" + + #: config/rs6000/aix43.h:54 config/rs6000/aix51.h:54 + msgid "-maix64 requires PowerPC64 architecture remain enabled" + msgstr "" + + #: config/rs6000/aix43.h:58 config/rs6000/aix51.h:58 + msgid "-maix64 required: 64-bit computation with 32-bit addressing not yet supported" + msgstr "" + + #. Run-time compilation parameters selecting different hardware subsets. + #. + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/rs6000/rs6000.h:277 + msgid "Use POWER instruction set" + msgstr "" + + #: config/rs6000/rs6000.h:280 + msgid "Use POWER2 instruction set" + msgstr "" + + #: config/rs6000/rs6000.h:282 + msgid "Do not use POWER2 instruction set" + msgstr "" + + #: config/rs6000/rs6000.h:285 + msgid "Do not use POWER instruction set" + msgstr "" + + #: config/rs6000/rs6000.h:287 + msgid "Use PowerPC instruction set" + msgstr "" + + #: config/rs6000/rs6000.h:290 + msgid "Do not use PowerPC instruction set" + msgstr "" + + #: config/rs6000/rs6000.h:292 + msgid "Use PowerPC General Purpose group optional instructions" + msgstr "" + + #: config/rs6000/rs6000.h:294 + msgid "Don't use PowerPC General Purpose group optional instructions" + msgstr "" + + #: config/rs6000/rs6000.h:296 + msgid "Use PowerPC Graphics group optional instructions" + msgstr "" + + #: config/rs6000/rs6000.h:298 + msgid "Don't use PowerPC Graphics group optional instructions" + msgstr "" + + #: config/rs6000/rs6000.h:300 + msgid "Use PowerPC-64 instruction set" + msgstr "" + + #: config/rs6000/rs6000.h:302 + msgid "Don't use PowerPC-64 instruction set" + msgstr "" + + #: config/rs6000/rs6000.h:304 + #, fuzzy + msgid "Use AltiVec instructions" + msgstr "ÁêáôÜëëçëç åíôïëÞ" + + #: config/rs6000/rs6000.h:306 + msgid "Don't use AltiVec instructions" + msgstr "" + + #: config/rs6000/rs6000.h:308 + msgid "Use new mnemonics for PowerPC architecture" + msgstr "" + + #: config/rs6000/rs6000.h:310 + msgid "Use old mnemonics for PowerPC architecture" + msgstr "" + + #: config/rs6000/rs6000.h:313 + msgid "Put everything in the regular TOC" + msgstr "" + + #: config/rs6000/rs6000.h:315 + msgid "Place floating point constants in TOC" + msgstr "" + + #: config/rs6000/rs6000.h:317 + msgid "Don't place floating point constants in TOC" + msgstr "" + + #: config/rs6000/rs6000.h:319 + msgid "Place symbol+offset constants in TOC" + msgstr "" + + #: config/rs6000/rs6000.h:321 + msgid "Don't place symbol+offset constants in TOC" + msgstr "" + + #: config/rs6000/rs6000.h:327 + msgid "Place variable addresses in the regular TOC" + msgstr "" + + #: config/rs6000/rs6000.h:333 + msgid "Generate load/store multiple instructions" + msgstr "" + + #: config/rs6000/rs6000.h:335 + msgid "Do not generate load/store multiple instructions" + msgstr "" + + #: config/rs6000/rs6000.h:339 + msgid "Generate string instructions for block moves" + msgstr "" + + #: config/rs6000/rs6000.h:341 + msgid "Do not generate string instructions for block moves" + msgstr "" + + #: config/rs6000/rs6000.h:345 + msgid "Generate load/store with update instructions" + msgstr "" + + #: config/rs6000/rs6000.h:347 + msgid "Do not generate load/store with update instructions" + msgstr "" + + #: config/rs6000/rs6000.h:355 + msgid "Don't schedule the start and end of the procedure" + msgstr "" + + #: config/rs6000/rs6000.h:361 + msgid "Return all structures in memory (AIX default)" + msgstr "" + + #: config/rs6000/rs6000.h:363 + msgid "Return small structures in registers (SVR4 default)" + msgstr "" + + #: config/rs6000/rs6000.h:426 config/sparc/sparc.h:666 + msgid "Use features of and schedule code for given CPU" + msgstr "" + + #: config/rs6000/rs6000.h:429 + msgid "Enable debug output" + msgstr "" + + #: config/rs6000/rs6000.h:430 + msgid "Specify ABI to use" + msgstr "" + + #: config/rs6000/rs6000.h:432 + msgid "Specify size of long double (64 or 128 bits)" + msgstr "" + + #. Definitions for __builtin_return_address and __builtin_frame_address. + #. __builtin_return_address (0) should give link register (65), enable + #. this. + #. This should be uncommented, so that the link register is used, but + #. currently this would result in unmatched insns and spilling fixed + #. registers so we'll leave it for another day. When these problems are + #. taken care of one additional fetch will be necessary in RETURN_ADDR_RTX. + #. (mrs) + #. #define RETURN_ADDR_IN_PREVIOUS_FRAME + #. Number of bytes into the frame return addresses can be found. See + #. rs6000_stack_info in rs6000.c for more information on how the different + #. abi's store the return address. + #: config/rs6000/rs6000.h:1776 + msgid "RETURN_ADDRESS_OFFSET not supported" + msgstr "" + + #: config/rs6000/sysv4.h:88 + msgid "Select ABI calling convention" + msgstr "" + + #: config/rs6000/sysv4.h:89 + msgid "Select method for sdata handling" + msgstr "" + + #: config/rs6000/sysv4.h:104 + msgid "Align to the base type of the bit-field" + msgstr "" + + #: config/rs6000/sysv4.h:106 + msgid "Don't align to the base type of the bit-field" + msgstr "" + + #: config/rs6000/sysv4.h:108 + msgid "Don't assume that unaligned accesses are handled by the system" + msgstr "" + + #: config/rs6000/sysv4.h:110 + msgid "Assume that unaligned accesses are handled by the system" + msgstr "" + + #: config/rs6000/sysv4.h:112 config/rs6000/sysv4.h:116 + msgid "Produce code relocatable at runtime" + msgstr "" + + #: config/rs6000/sysv4.h:114 config/rs6000/sysv4.h:118 + msgid "Don't produce code relocatable at runtime" + msgstr "" + + #: config/rs6000/sysv4.h:120 config/rs6000/sysv4.h:122 + msgid "Produce little endian code" + msgstr "" + + #: config/rs6000/sysv4.h:124 config/rs6000/sysv4.h:126 + msgid "Produce big endian code" + msgstr "" + + #: config/rs6000/sysv4.h:127 config/rs6000/sysv4.h:128 + #: config/rs6000/sysv4.h:129 config/rs6000/sysv4.h:130 + #: config/rs6000/sysv4.h:131 config/rs6000/sysv4.h:132 + #: config/rs6000/sysv4.h:142 config/rs6000/sysv4.h:143 + #: config/rs6000/sysv4.h:154 config/rs6000/sysv4.h:155 + #: config/rs6000/sysv4.h:157 + #, fuzzy + msgid "no description yet" + msgstr "(÷ùñßò ðåñéãñáöÞ)" + + #: config/rs6000/sysv4.h:133 + msgid "Use EABI" + msgstr "" + + #: config/rs6000/sysv4.h:134 + msgid "Don't use EABI" + msgstr "" + + #: config/rs6000/sysv4.h:137 + msgid "Do not allow bit-fields to cross word boundaries" + msgstr "" + + #: config/rs6000/sysv4.h:139 + #, fuzzy + msgid "Use alternate register names" + msgstr "ìç ôåñìáôéæüìåíï üíïìá âÜñïõò" + + #: config/rs6000/sysv4.h:141 + msgid "Don't use alternate register names" + msgstr "" + + #: config/rs6000/sysv4.h:145 + msgid "Link with libsim.a, libc.a and sim-crt0.o" + msgstr "" + + #: config/rs6000/sysv4.h:147 + msgid "Link with libads.a, libc.a and crt0.o" + msgstr "" + + #: config/rs6000/sysv4.h:149 + msgid "Link with libyk.a, libc.a and crt0.o" + msgstr "" + + #: config/rs6000/sysv4.h:151 + msgid "Link with libmvme.a, libc.a and crt0.o" + msgstr "" + + #: config/rs6000/sysv4.h:153 + msgid "Set the PPC_EMB bit in the ELF flags header" + msgstr "" + + #. Sometimes certain combinations of command options do not make sense + #. on a particular target machine. You can define a macro + #. `OVERRIDE_OPTIONS' to take account of this. This macro, if + #. defined, is executed once just after all the command options have + #. been parsed. + #. + #. The macro SUBTARGET_OVERRIDE_OPTIONS is provided for subtargets, to + #. get control. + #: config/rs6000/sysv4.h:212 + #, fuzzy, c-format + msgid "bad value for -mcall-%s" + msgstr "ÁêáôÜëëçëç ôéìÞ óôï ai_flags" + + #: config/rs6000/sysv4.h:228 + #, fuzzy, c-format + msgid "bad value for -msdata=%s" + msgstr "ÁêáôÜëëçëç ôéìÞ óôï ai_flags" + + #: config/rs6000/sysv4.h:245 + #, c-format + msgid "-mrelocatable and -msdata=%s are incompatible" + msgstr "" + + #: config/rs6000/sysv4.h:253 + #, c-format + msgid "-f%s and -msdata=%s are incompatible" + msgstr "" + + #: config/rs6000/sysv4.h:261 + #, c-format + msgid "-msdata=%s and -mcall-%s are incompatible" + msgstr "" + + #: config/rs6000/sysv4.h:268 + msgid "-mrelocatable and -mno-minimal-toc are incompatible" + msgstr "" + + #: config/rs6000/sysv4.h:274 + #, c-format + msgid "-mrelocatable and -mcall-%s are incompatible" + msgstr "" + + #: config/rs6000/sysv4.h:281 + #, c-format + msgid "-fPIC and -mcall-%s are incompatible" + msgstr "" + + #: config/rs6000/sysv4.h:288 + #, fuzzy + msgid "-mcall-aixdesc must be big endian" + msgstr "ôá ìåãÝèç ôïõ óôçëïãíþìïíá ðñÝðåé íá åßíáé êáôÜ áýîïõóá óåéñÜ" + + #: config/s390/s390.c:1762 + msgid "invalid UNSPEC as operand (1)" + msgstr "" + + #: config/s390/s390.c:1792 + msgid "invalid UNSPEC as operand (2)" + msgstr "" + + #: config/s390/s390.c:1798 + msgid "UNKNOWN in s390_output_symbolic_const !?" + msgstr "" + + #: config/s390/s390.c:1814 + #, fuzzy + msgid "Cannot decompose address." + msgstr "Äåí åßíáé äõíáôÞ ç åê÷þñçóç ôçò æçôçèÞóáò äéåýèõíóçò" + + #: config/s390/s390.c:1962 + msgid "UNKNOWN in print_operand !?" + msgstr "" + + #: config/s390/s390.c:2507 + msgid "no code label found" + msgstr "" + + #: config/s390/s390.c:2653 + msgid "Total size of local variables exceeds architecture limit." + msgstr "" + + #: config/s390/s390.h:53 + msgid "Set backchain" + msgstr "" + + #: config/s390/s390.h:54 + msgid "Don't set backchain (faster, but debug harder" + msgstr "" + + #: config/s390/s390.h:55 + msgid "Use bras for execucable < 64k" + msgstr "" + + #: config/s390/s390.h:56 + msgid "Don't use bras" + msgstr "" + + #: config/s390/s390.h:57 + msgid "Additional debug prints" + msgstr "" + + #: config/s390/s390.h:58 + msgid "Don't print additional debug prints" + msgstr "" + + #: config/s390/s390.h:59 + msgid "64 bit mode" + msgstr "" + + #: config/s390/s390.h:60 + msgid "31 bit mode" + msgstr "" + + #: config/s390/s390.h:61 + #, fuzzy + msgid "mvcle use" + msgstr "Ç óõóêåõÞ åßíáé áðáó÷ïëçìÝíç" + + #: config/s390/s390.h:62 + msgid "mvc&ex" + msgstr "" + + #. The sp_switch attribute only has meaning for interrupt functions. + #: config/sh/sh.c:4730 config/sh/sh.c:4769 + #, c-format + msgid "`%s' attribute only applies to interrupt functions" + msgstr "" + + #. The argument must be a constant string. + #: config/sh/sh.c:4737 + #, fuzzy, c-format + msgid "`%s' attribute argument not a string constant" + msgstr "ìç ôåñìáôéæìÝíï áëöáñéèìçôéêü óôáèåñÜò" + + #. The argument must be a constant integer. + #: config/sh/sh.c:4776 + #, c-format + msgid "`%s' attribute argument not an integer constant" + msgstr "" + + #: config/sparc/sparc.c:319 + #, fuzzy, c-format + msgid "%s is not supported by this configuration" + msgstr "Ç ïéêïãÝíåéá äéåõèýíóåùí äåí õðïóôçñßæåôáé áðü ôçí ïéêïãÝíåéá ðñùôïêüëëïõ" + + #: config/sparc/sparc.c:326 + msgid "-mlong-double-64 not allowed with -m64" + msgstr "" + + #: config/sparc/sparc.c:351 + #, fuzzy + msgid "-mcmodel= is not supported on 32 bit systems" + msgstr "óõìâïëéêïß óýíäåóìïé äåí õðïóôçñßæïíôáé óôï óýóôçìá áõôü" + + #: config/sparc/sparc.c:439 + msgid "profiling does not support code models other than medlow" + msgstr "" + + #: config/sparc/sparc.c:5834 config/sparc/sparc.c:5840 + #, fuzzy, c-format + msgid "invalid %%Y operand" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/sparc/sparc.c:5910 + #, fuzzy, c-format + msgid "invalid %%A operand" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/sparc/sparc.c:5920 + #, fuzzy, c-format + msgid "invalid %%B operand" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/sparc/sparc.c:5959 + #, fuzzy, c-format + msgid "invalid %%c operand" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/sparc/sparc.c:5960 + #, fuzzy, c-format + msgid "invalid %%C operand" + msgstr "ìç Ýãêõñç ìåôáôüðéóç UTC" + + #: config/sparc/sparc.c:5981 + #, fuzzy, c-format + msgid "invalid %%d operand" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/sparc/sparc.c:5982 + #, fuzzy, c-format + msgid "invalid %%D operand" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/sparc/sparc.c:6000 + #, fuzzy, c-format + msgid "invalid %%f operand" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: config/sparc/sparc.c:6050 + msgid "long long constant not a valid immediate operand" + msgstr "" + + #: config/sparc/sparc.c:6053 + msgid "floating point constant not a valid immediate operand" + msgstr "" + + #: config/sparc/freebsd.h:81 config/sparc/linux.h:86 + #: config/sparc/linux64.h:139 + msgid "Use 128 bit long doubles" + msgstr "" + + #: config/sparc/sp64-elf.h:82 config/sparc/splet.h:29 + msgid "Generate code for big endian" + msgstr "" + + #: config/sparc/sp64-elf.h:83 config/sparc/splet.h:30 + msgid "Generate code for little endian" + msgstr "" + + #: config/sparc/sp86x-aout.h:51 config/sparc/sp86x-elf.h:67 + msgid "Use little-endian byte order for data" + msgstr "" + + #. To make profiling work with -f{pic,PIC}, we need to emit the profiling + #. code into the rtl. Also, if we are profiling, we cannot eliminate + #. the frame pointer (because the return address will get smashed). + #: config/sparc/sparc.h:388 + #, c-format + msgid "%s and profiling conflict: disabling %s" + msgstr "" + + #: config/sparc/sparc.h:562 + msgid "Use function_epilogue()" + msgstr "" + + #: config/sparc/sparc.h:564 + msgid "Do not use function_epilogue()" + msgstr "" + + #: config/sparc/sparc.h:566 + msgid "Assume possible double misalignment" + msgstr "" + + #: config/sparc/sparc.h:568 + msgid "Assume all doubles are aligned" + msgstr "" + + #: config/sparc/sparc.h:570 + msgid "Pass -assert pure-text to linker" + msgstr "" + + #: config/sparc/sparc.h:572 + msgid "Do not pass -assert pure-text to linker" + msgstr "" + + #: config/sparc/sparc.h:574 + msgid "Use flat register window model" + msgstr "" + + #: config/sparc/sparc.h:576 + msgid "Do not use flat register window model" + msgstr "" + + #: config/sparc/sparc.h:578 + msgid "Use ABI reserved registers" + msgstr "" + + #: config/sparc/sparc.h:580 + msgid "Do not use ABI reserved registers" + msgstr "" + + #: config/sparc/sparc.h:582 + msgid "Use hardware quad fp instructions" + msgstr "" + + #: config/sparc/sparc.h:584 + msgid "Do not use hardware quad fp instructions" + msgstr "" + + #: config/sparc/sparc.h:586 + msgid "Compile for v8plus ABI" + msgstr "" + + #: config/sparc/sparc.h:588 + msgid "Do not compile for v8plus ABI" + msgstr "" + + #: config/sparc/sparc.h:590 + #, fuzzy + msgid "Utilize Visual Instruction Set" + msgstr "ÐáñÜíïìç ÅíôïëÞ" + + #: config/sparc/sparc.h:592 + msgid "Do not utilize Visual Instruction Set" + msgstr "" + + #. ??? These are deprecated, coerced to -mcpu=. Delete in 2.9. + #: config/sparc/sparc.h:595 + msgid "Optimize for Cypress processors" + msgstr "" + + #: config/sparc/sparc.h:597 + msgid "Optimize for SparcLite processors" + msgstr "" + + #: config/sparc/sparc.h:599 + msgid "Optimize for F930 processors" + msgstr "" + + #: config/sparc/sparc.h:601 + msgid "Optimize for F934 processors" + msgstr "" + + #: config/sparc/sparc.h:603 + msgid "Use V8 Sparc ISA" + msgstr "" + + #: config/sparc/sparc.h:605 + msgid "Optimize for SuperSparc processors" + msgstr "" + + #. End of deprecated options. + #: config/sparc/sparc.h:608 + msgid "Pointers are 64-bit" + msgstr "" + + #: config/sparc/sparc.h:610 + msgid "Pointers are 32-bit" + msgstr "" + + #: config/sparc/sparc.h:612 + msgid "Use 32-bit ABI" + msgstr "" + + #: config/sparc/sparc.h:614 + msgid "Use 64-bit ABI" + msgstr "" + + #: config/sparc/sparc.h:616 + msgid "Use stack bias" + msgstr "" + + #: config/sparc/sparc.h:618 + msgid "Do not use stack bias" + msgstr "" + + #: config/sparc/sparc.h:620 + msgid "Use structs on stronger alignment for double-word copies" + msgstr "" + + #: config/sparc/sparc.h:622 + msgid "Do not use structs on stronger alignment for double-word copies" + msgstr "" + + #: config/sparc/sparc.h:624 + msgid "Optimize tail call instructions in assembler and linker" + msgstr "" + + #: config/sparc/sparc.h:626 + msgid "Do not optimize tail call instructions in assembler or linker" + msgstr "" + + #: config/sparc/sparc.h:670 + msgid "Use given Sparc code model" + msgstr "" + + #: config/stormy16/stormy16.c:1168 + msgid "cannot use va_start in interrupt function" + msgstr "" + + #: config/stormy16/stormy16.c:1525 + msgid "`B' operand is not constant" + msgstr "" + + #: config/stormy16/stormy16.c:1531 + msgid "`B' operand has multiple bits set" + msgstr "" + + #: config/stormy16/stormy16.c:1558 + msgid "`o' operand is not constant" + msgstr "" + + #: config/stormy16/stormy16.c:1573 + msgid "xstormy16_print_operand: unknown code" + msgstr "" + + #: config/stormy16/stormy16.c:1623 + #, c-format + msgid "switch statement of size %lu entries too large" + msgstr "" + + #: config/v850/v850-c.c:68 + msgid "#pragma GHS endXXXX found without previous startXXX" + msgstr "" + + #: config/v850/v850-c.c:70 + msgid "#pragma GHS endXXX does not match previous startXXX" + msgstr "" + + #: config/v850/v850-c.c:95 + msgid "cannot set interrupt attribute: no current function" + msgstr "" + + #: config/v850/v850-c.c:103 + msgid "cannot set interrupt attribute: no such identifier" + msgstr "" + + #: config/v850/v850-c.c:149 + msgid "junk at end of #pragma ghs section" + msgstr "" + + # src/request.c:806 src/request.c:912 + #: config/v850/v850-c.c:166 + #, fuzzy, c-format + msgid "unrecognized section name \"%s\"" + msgstr "Ìç áíáãíùñßóçìï üíïìá åðéöÜíåéáò `%s'" + + # src/dfa.c:569 src/dfa.c:583 src/dfa.c:587 + # src/dfa.c:577 src/dfa.c:591 src/dfa.c:595 + #: config/v850/v850-c.c:181 + #, fuzzy + msgid "malformed #pragma ghs section" + msgstr "êáêïó÷çìáôéóìÝíïò ìåôñçôÞò åðáíÜëçøçò" + + #: config/v850/v850-c.c:201 + msgid "junk at end of #pragma ghs interrupt" + msgstr "" + + #: config/v850/v850-c.c:213 + msgid "junk at end of #pragma ghs starttda" + msgstr "" + + #: config/v850/v850-c.c:225 + msgid "junk at end of #pragma ghs startsda" + msgstr "" + + #: config/v850/v850-c.c:237 + msgid "junk at end of #pragma ghs startzda" + msgstr "" + + #: config/v850/v850-c.c:249 + msgid "junk at end of #pragma ghs endtda" + msgstr "" + + #: config/v850/v850-c.c:261 + msgid "junk at end of #pragma ghs endsda" + msgstr "" + + #: config/v850/v850-c.c:273 + msgid "junk at end of #pragma ghs endzda" + msgstr "" + + #: config/v850/v850.c:122 + #, c-format + msgid "%s=%s is not numeric" + msgstr "" + + # src/shred.c:1134 + #: config/v850/v850.c:129 + #, fuzzy, c-format + msgid "%s=%s is too large" + msgstr "%s: ôï áñ÷åßï åßíáé ðïëý ìåãÜëï" + + #: config/v850/v850.c:285 + msgid "const_double_split got a bad insn:" + msgstr "" + + #: config/v850/v850.c:777 + #, fuzzy + msgid "output_move_single:" + msgstr "áñ÷åßï åîüäïõ" + + #: config/v850/v850.c:2081 + msgid "a data area attribute cannot be specified for local variables" + msgstr "" + + #: config/v850/v850.c:2092 + #, c-format + msgid "data area of '%s' conflicts with previous declaration" + msgstr "" + + #: config/v850/v850.c:2295 + #, c-format + msgid "bogus JR construction: %d\n" + msgstr "" + + #: config/v850/v850.c:2316 config/v850/v850.c:2518 + #, c-format + msgid "bad amount of stack space removal: %d" + msgstr "" + + #: config/v850/v850.c:2494 + #, c-format + msgid "bogus JARL construction: %d\n" + msgstr "" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/v850/v850.h:120 + msgid "Support Green Hills ABI" + msgstr "" + + #: config/v850/v850.h:123 + msgid "Prohibit PC relative function calls" + msgstr "" + + #: config/v850/v850.h:126 + msgid "Reuse r30 on a per function basis" + msgstr "" + + #: config/v850/v850.h:129 + msgid "Use stubs for function prologues" + msgstr "" + + #: config/v850/v850.h:132 + msgid "Same as: -mep -mprolog-function" + msgstr "" + + #: config/v850/v850.h:133 + msgid "Enable backend debugging" + msgstr "" + + #: config/v850/v850.h:135 + msgid "Compile for the v850 processor" + msgstr "" + + #: config/v850/v850.h:138 + msgid "Use 4 byte entries in switch tables" + msgstr "" + + #: config/v850/v850.h:164 + msgid "Set the max size of data eligible for the TDA area" + msgstr "" + + #: config/v850/v850.h:167 + msgid "Set the max size of data eligible for the SDA area" + msgstr "" + + #: config/v850/v850.h:170 + msgid "Set the max size of data eligible for the ZDA area" + msgstr "" + + #: ada/misc.c:219 + msgid "`-gnat' misspelled as `-gant'" + msgstr "" + + #: ch/actions.c:118 + #, c-format + msgid "%d errors, %d sorries, do granting" + msgstr "" + + #: ch/actions.c:135 + msgid "GNU compiler does not support statically allocated objects" + msgstr "" + + #: ch/actions.c:138 objc/objc-act.c:882 + #, c-format + msgid "`%s' cannot be statically allocated" + msgstr "" + + #: ch/actions.c:300 + #, c-format + msgid "causing unhandled exception `%s' (this is flaged only once)" + msgstr "" + + #: ch/actions.c:438 + msgid "range failure (not inside function)" + msgstr "" + + #: ch/actions.c:440 + msgid "possible range failure (not inside function)" + msgstr "" + + #: ch/actions.c:445 + msgid "expression will always cause RANGEFAIL" + msgstr "" + + #: ch/actions.c:492 + msgid "right hand side of assignment is a mode" + msgstr "" + + #: ch/actions.c:498 + #, c-format + msgid "incompatible modes in %s" + msgstr "" + + #: ch/actions.c:523 + #, fuzzy, c-format + msgid "bad string length in %s" + msgstr "åëÜ÷éóôï ìÝãåèïò áëöáñéèìçôéêïý" + + #: ch/actions.c:631 ch/actions.c:644 + #, fuzzy, c-format + msgid "mode mismatch in %s expression" + msgstr "ÓöÜëìá óôï ôáßñéáóìá óôçí êáíïíéêÞ Ýêöñáóç `%s'" + + #: ch/actions.c:638 + #, c-format + msgid "%s expression must be referable" + msgstr "" + + #: ch/actions.c:667 + #, c-format + msgid "%s not allowed outside a PROC" + msgstr "" + + #: ch/actions.c:673 + #, c-format + msgid "%s action in PROC with no declared RESULTS" + msgstr "" + + #: ch/actions.c:704 + msgid "RETURN not allowed outside PROC" + msgstr "" + + #: ch/actions.c:717 + msgid "RETURN with a value, in PROC returning void" + msgstr "" + + #: ch/actions.c:726 + msgid "RETURN with no value and no RESULT action in procedure" + msgstr "" + + # src/main.c:697 src/main.c:751 + #: ch/actions.c:749 + #, fuzzy, c-format + msgid "no label named `%s'" + msgstr "¶ãíùóôç ãëþóóá `%s'" + + #: ch/actions.c:751 + #, c-format + msgid "cannot GOTO label `%s' outside current function" + msgstr "" + + #: ch/actions.c:773 + #, c-format + msgid "no EXITable label named `%s'" + msgstr "" + + #: ch/actions.c:775 + #, c-format + msgid "cannot EXIT label `%s' outside current function" + msgstr "" + + #: ch/actions.c:1018 + msgid "case selector not compatible with label" + msgstr "" + + #: ch/actions.c:1044 + msgid "ELSE label not within a CASE statement" + msgstr "" + + #: ch/actions.c:1048 + msgid "multiple default labels found in a CASE statement" + msgstr "" + + #: ch/actions.c:1049 + #, fuzzy + msgid "this is the first ELSE label" + msgstr "áõôüò åßíáé ï ðñþôïò ïñéóìüò" + + #: ch/actions.c:1070 + msgid "label found outside of CASE statement" + msgstr "" + + #: ch/actions.c:1073 + #, fuzzy + msgid "duplicate CASE value" + msgstr "äéðëü êëåéäß" + + #: ch/actions.c:1074 ch/actions.c:1127 + #, fuzzy + msgid "this is the first entry for that value" + msgstr "áõôüò åßíáé ï ðñþôïò ïñéóìüò" + + #: ch/actions.c:1077 ch/actions.c:1130 + #, fuzzy + msgid "CASE value out of range" + msgstr "Ï áñéèìüò ôùí êáíáëéþí åßíáé Ýîù áðü ôá üñéá" + + #: ch/actions.c:1079 ch/actions.c:1132 + #, fuzzy + msgid "empty range" + msgstr "êåíü áëöáñéèìçôéêü" + + #: ch/actions.c:1081 ch/actions.c:1134 + msgid "label within scope of cleanup or variable array" + msgstr "" + + #: ch/actions.c:1105 ch/actions.c:1302 + msgid "mode in label is not discrete" + msgstr "" + + #: ch/actions.c:1122 + msgid "label not within a CASE statement" + msgstr "" + + #: ch/actions.c:1282 + msgid "lower bound of range must be a discrete literal expression" + msgstr "" + + #: ch/actions.c:1287 + msgid "upper bound of range must be a discrete literal expression" + msgstr "" + + #: ch/actions.c:1311 + msgid "CASE label is not valid" + msgstr "" + + #: ch/actions.c:1357 + msgid "number of CASE selectors does not match the number of CASE label lists" + msgstr "" + + #: ch/actions.c:1442 + #, c-format + msgid "incomplete CASE - %s not handled" + msgstr "" + + #: ch/actions.c:1461 + msgid "CASE selector with variable range" + msgstr "" + + #: ch/actions.c:1465 + msgid "too many cases to do CASE completeness testing" + msgstr "" + + #: ch/actions.c:1550 + msgid "type of tuple cannot be implicit in multiple assignent" + msgstr "" + + #: ch/actions.c:1552 + msgid "conditional expression cannot be used in multiple assignent" + msgstr "" + + #: ch/actions.c:1554 + #, fuzzy + msgid "internal error - unknown type in multiple assignment" + msgstr "åóùôåñéêü óöÜëìá - êëÞèçêå ç addtype ìå êáêü ttisgmt" + + #: ch/actions.c:1558 + msgid "no operator allowed in multiple assignment," + msgstr "" + + #: ch/actions.c:1568 + msgid "location modes in multiple assignment are not equivalent" + msgstr "" + + #: ch/actions.c:1606 + msgid "you may not assign a value to a BUFFER or EVENT location" + msgstr "" + + #: ch/actions.c:1614 + msgid "can't assign value to READonly location" + msgstr "" + + #: ch/actions.c:1619 + msgid "cannot assign to location with non-value property" + msgstr "" + + #: ch/actions.c:1639 + msgid "lefthand side of assignment is not a location" + msgstr "" + + #: ch/actions.c:1715 ch/actions.c:1785 + msgid "bitstring slice" + msgstr "" + + #: ch/actions.c:1810 + msgid "LENGTH on left-hand-side is non-portable" + msgstr "" + + #: ch/actions.c:1814 + msgid "can only set LENGTH of array location" + msgstr "" + + #: ch/convert.c:63 + msgid "internal error: trying to make loc-identity with non-location" + msgstr "" + + #: ch/convert.c:117 + #, fuzzy + msgid "cannot convert to a boolean mode" + msgstr "áäýíáôç ç ìåôáôñïðÞ ôïõ U+%04X óôï ôïðéêü óýíïëï ÷áñáêôÞñùí" + + #: ch/convert.c:152 + #, fuzzy + msgid "cannot convert to a char mode" + msgstr "áäýíáôç ç ìåôáôñïðÞ ôïõ U+%04X óôï ôïðéêü óýíïëï ÷áñáêôÞñùí" + + #: ch/convert.c:248 + #, fuzzy + msgid "powerset tuple element out of range" + msgstr "%s: áñéèìüò ãñáììÞò Ýîù áðü ôá üñéá" + + #: ch/convert.c:284 ch/convert.c:312 + #, c-format + msgid "incompatible member of powerset tuple (at position #%d)" + msgstr "" + + #: ch/convert.c:394 + #, c-format + msgid "no initializer value for fixed field `%s'" + msgstr "" + + #: ch/convert.c:436 + #, c-format + msgid "non-constant value for tag field `%s'" + msgstr "" + + #: ch/convert.c:488 + #, c-format + msgid "field `%s' in wrong variant" + msgstr "" + + #: ch/convert.c:495 + #, fuzzy, c-format + msgid "missing variant fields (at least `%s')" + msgstr "Ëåßðåé ðáñÜìåôñïò ãéá `%s'" + + #: ch/convert.c:518 + #, fuzzy, c-format + msgid "bad initializer for field `%s'" + msgstr "ìç Ýãêõñï byte Þ ëßóôá ðåäßùí" + + #: ch/convert.c:525 + #, c-format + msgid "no initializer value for variant field `%s'" + msgstr "" + + #: ch/convert.c:531 + msgid "no selected variant" + msgstr "" + + #: ch/convert.c:546 ch/convert.c:912 + msgid "mixture of labelled and unlabelled tuple elements" + msgstr "" + + #: ch/convert.c:557 + msgid "probably not a structure tuple" + msgstr "" + + #: ch/convert.c:559 + #, c-format + msgid "excess initializer for field `%s'" + msgstr "" + + #: ch/convert.c:566 + msgid "excess unnamed initializers" + msgstr "" + + #: ch/convert.c:693 + msgid "non-constant start index for tuple" + msgstr "" + + #: ch/convert.c:736 + #, fuzzy + msgid "invalid array tuple label" + msgstr "Ìç Ýãêõñïò ÷áñáêôÞñáò ïíüìáôïò êëÜóçò" + + #: ch/convert.c:750 + msgid "non-constant array tuple index range" + msgstr "" + + #: ch/convert.c:759 + #, c-format + msgid "incompatible array tuple element %s" + msgstr "" + + #: ch/convert.c:775 + msgid "multiple (*) or (ELSE) array tuple labels" + msgstr "" + + #: ch/convert.c:784 + msgid "empty range in array tuple" + msgstr "" + + #: ch/convert.c:801 + #, c-format + msgid "array tuple has duplicate index %s" + msgstr "" + + #: ch/convert.c:809 + #, fuzzy + msgid "array tuple index out of range" + msgstr "%s: áñéèìüò ãñáììÞò Ýîù áðü ôá üñéá" + + #: ch/convert.c:811 + #, fuzzy + msgid "too many array tuple values" + msgstr "ðÜñá ðïëëÜ ïñßóìáôá" + + #: ch/convert.c:883 + msgid "dynamic array tuple without (*) or (ELSE)" + msgstr "" + + #: ch/convert.c:885 + #, fuzzy, c-format + msgid "missing array tuple element %s" + msgstr "Ëåßðåé ðáñÜìåôñïò ãéá `%s'" + + #: ch/convert.c:892 + #, fuzzy, c-format + msgid "missing array tuple elements %s : %s" + msgstr "Ëåßðåé ðáñÜìåôñïò ãéá `%s'" + + #: ch/convert.c:1086 + msgid "initializer is not an array or string mode" + msgstr "" + + #: ch/convert.c:1096 + msgid "destination is too small" + msgstr "" + + #: ch/convert.c:1152 + msgid "internal error: unknown type of expression" + msgstr "" + + #: ch/decl.c:1033 + #, fuzzy, c-format + msgid "`%s' must not be declared readonly" + msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï" + + #: ch/decl.c:1037 + msgid "declaration of readonly variable without initialization" + msgstr "" + + # src/request.c:263 + #: ch/decl.c:1059 + #, fuzzy, c-format + msgid "no initialization allowed for `%s'" + msgstr "Ôï âÞìá áñ÷éêïðïßçóçò áðÝôõ÷å" + + #: ch/decl.c:1067 + #, c-format + msgid "value for loc-identity `%s' is not a location" + msgstr "" + + #: ch/decl.c:1074 + #, fuzzy, c-format + msgid "location for `%s' not read-compatible" + msgstr "Ï êáôÜëïãïò `%s' äåí åßíáé ðñïóéôüò." + + #: ch/decl.c:1101 + #, c-format + msgid "nonconstant initializer for `%s'" + msgstr "" + + #: ch/decl.c:1132 + msgid "do_decl: internal error: don't know what to initialize" + msgstr "" + + #: ch/decl.c:1189 + msgid "RECURSIVE PROCs" + msgstr "" + + #: ch/decl.c:1445 + #, c-format + msgid "`%s' must not be READonly" + msgstr "" + + #: ch/decl.c:1471 + msgid "POS may not be specified for a list of field declarations" + msgstr "" + + #: ch/decl.c:1525 + msgid "(ELSE) case label as well as ELSE variant" + msgstr "" + + #: ch/decl.c:1610 ch/decl.c:1613 + msgid "inconsistent modes between labels and tag field" + msgstr "" + + #: ch/decl.c:1618 + #, fuzzy + msgid "too few tag labels" + msgstr "ðïëý ëßãá ïñßóìáôá" + + #: ch/decl.c:1620 + #, fuzzy + msgid "too many tag labels" + msgstr "ðÜñá ðïëëÜ ïñßóìáôá" + + #: ch/decl.c:1658 + msgid "case label lower limit is not a discrete constant expression" + msgstr "" + + #: ch/decl.c:1660 + msgid "case label upper limit is not a discrete constant expression" + msgstr "" + + #: ch/decl.c:1670 + msgid "case label must be a discrete constant expression" + msgstr "" + + #: ch/decl.c:1697 + msgid "variant label declared here..." + msgstr "" + + #: ch/decl.c:1699 + #, fuzzy + msgid "...is duplicated here" + msgstr "äéðëü êëåéäß" + + #: ch/decl.c:1729 + #, c-format + msgid "no field (yet) for tag %s" + msgstr "" + + #: ch/decl.c:1824 + msgid "non-value mode may only returned by LOC" + msgstr "" + + #: ch/decl.c:1847 + #, fuzzy, c-format + msgid "mode of `%s' is not a mode" + msgstr "Ôï `%s' äåí åßíáé êáôÜëïãïò." + + #: ch/decl.c:1853 + #, c-format + msgid "`%s' may only be passed by LOC" + msgstr "" + + #: ch/decl.c:2281 + #, c-format + msgid "nothing named `%s' to grant" + msgstr "" + + #: ch/decl.c:2321 + #, fuzzy, c-format + msgid "duplicate grant for `%s'" + msgstr "äéðëü üíïìá ÷áñáêôÞñá `%s'" + + #: ch/decl.c:2322 + #, fuzzy, c-format + msgid "previous grant for `%s'" + msgstr "äéáôÞñçóç ùñþí óôï %s" + + #: ch/decl.c:2409 + #, fuzzy, c-format + msgid "duplicate definition `%s'" + msgstr "äéðëüò ïñéóìüò óõíüëïõ" + + #: ch/decl.c:2410 + #, fuzzy, c-format + msgid "previous definition of `%s'" + msgstr "êáíÝíáò ïñéóìüò ôïõ `UNDEFINED'" + + # src/main.c:785 + #: ch/decl.c:3248 ch/decl.c:3258 + #, fuzzy, c-format + msgid "ambiguous choice for seize `%s' -" + msgstr "ÁóáöÞò ìïñöÞ `%s'" + + #: ch/decl.c:3249 ch/decl.c:3259 + #, c-format + msgid " - can seize this `%s' -" + msgstr "" + + #: ch/decl.c:3250 ch/decl.c:3261 + #, c-format + msgid " - or this granted decl `%s'" + msgstr "" + + #: ch/decl.c:4430 + #, fuzzy, c-format + msgid "enumerator value for `%s' is less than 0" + msgstr "%s: ïé ôéìÝò ôïõ ðåäßïõ `%s' äåí ðñÝðåé íá åßíáé ìåãáëýôåñåò áðü %d" + + #: ch/decl.c:4512 + #, c-format + msgid "enumerators `%s' and `%s' have equal values" + msgstr "" + + #: ch/decl.c:4618 + msgid "undefined value in SET mode is obsolete and deprecated" + msgstr "" + + #: ch/decl.c:4794 + msgid "BASE variable never declared" + msgstr "" + + #: ch/decl.c:4796 + msgid "cannot BASE a variable on a PROC/PROCESS name" + msgstr "" + + #: ch/decl.c:4848 + #, fuzzy + msgid "INTERNAL ERROR: handle_one_level is broken" + msgstr "ÅÓÙÔÅÑÉÊÏ ÓÖÁËÌÁ: ËÜèïò åßäïò áíôéêåéìÝíïõ óôï expand_token ()" + + #: ch/expr.c:126 + #, c-format + msgid "tuple without specified mode not allowed in %s" + msgstr "" + + #: ch/expr.c:128 + #, fuzzy, c-format + msgid "conditional expression not allowed in %s" + msgstr "ËÜèïò Ýêöñáóç óôçí áðïôßìçóç (ëÜèïò åßóïäïò): %s" + + #: ch/expr.c:130 + #, fuzzy, c-format + msgid "internal error: unknown expression mode in %s" + msgstr "åóùôåñéêü óöÜëìá óôï %s, ãñáììÞ %u" + + #: ch/expr.c:147 + msgid "CASE selector is not a discrete expression" + msgstr "" + + #: ch/expr.c:215 + msgid "The number of CASE selectors does not match the number of CASE label lists" + msgstr "" + + #: ch/expr.c:594 + msgid "powerset is not addressable" + msgstr "" + + #: ch/expr.c:639 + #, fuzzy + msgid "array is not addressable" + msgstr "Ï êáôÜëïãïò `%s' äåí åßíáé ðñïóéôüò." + + #: ch/expr.c:687 + #, c-format + msgid "too few arguments in call to `%s'" + msgstr "ðïëý ëßãá ïñßóìáôá óôç êëÞóç ôçò `%s'" + + #: ch/expr.c:689 + #, c-format + msgid "too many arguments in call to `%s'" + msgstr "ðÜñá ðïëëÜ ïñßóìáôá óôç êëÞóç ôçò `%s'" + + #: ch/expr.c:758 + #, fuzzy + msgid "cannot dereference, not a pointer" + msgstr "Äåí ìðïñåß íá êáèïñéóôåß ôï üíïìá ôïõ óõóôÞìáôïò" + + #: ch/expr.c:768 + #, c-format + msgid "missing '.' operator or undefined mode name `%s'" + msgstr "" + + #: ch/expr.c:771 + msgid "you have forgotten the '.' operator which must" + msgstr "" + + #: ch/expr.c:772 + #, c-format + msgid " precede a STRUCT field reference, or `%s' is an undefined mode" + msgstr "" + + #: ch/expr.c:786 + msgid "can't dereference PTR value using unary `->'" + msgstr "" + + #: ch/expr.c:831 + #, fuzzy + msgid "invalid type argument of `->'" + msgstr "Ç ðáñÜìåôñïò `%s' äåí åßíáé Ýãêõñç." + + #: ch/expr.c:856 ch/expr.c:969 + msgid "operand of '.' is not a STRUCT" + msgstr "" + + #: ch/expr.c:909 + #, fuzzy, c-format + msgid "no field named `%s'" + msgstr "Ìç ïñéóìÝíï üíïìá %s" + + #: ch/expr.c:1217 + msgid "ABS argument must be discrete or real mode" + msgstr "" + + #: ch/expr.c:1250 + #, fuzzy, c-format + msgid "argument %d to ABSTIME must be of integer type" + msgstr "Ç ðáñÜìåôñïò óôï <%s> ðñÝðåé íá åßíáé Ýíáò áðëüò ÷áñáêôÞñáò" + + #: ch/expr.c:1288 ch/expr.c:1329 + msgid "parameter 1 must be referable" + msgstr "" + + #: ch/expr.c:1294 ch/expr.c:1335 ch/expr.c:1372 + msgid "mode mismatch in parameter 1" + msgstr "" + + #: ch/expr.c:1301 ch/expr.c:1342 + #, fuzzy + msgid "parameter 2 must be a positive integer" + msgstr "ç ôéìÞ ãéá ôï %s ðñÝðåé íá åßíáé áêÝñáéïò" + + #: ch/expr.c:1436 + msgid "CARD argument must be powerset mode" + msgstr "" + + #: ch/expr.c:1487 + msgid "expression for DESCR-built-in must be referable" + msgstr "" + + #: ch/expr.c:1535 + #, fuzzy, c-format + msgid "argument to `%s' must be of integer type" + msgstr "Ç ðáñÜìåôñïò óôï `%s' ðñÝðåé íá åßíáé Ýíáò áðëüò ÷áñáêôÞñáò" + + #: ch/expr.c:1568 + #, fuzzy, c-format + msgid "argument 1 to `%s' must be of floating point mode" + msgstr "Ç ðáñÜìåôñïò óôï `%s' ðñÝðåé íá åßíáé Ýíáò áðëüò ÷áñáêôÞñáò" + + #: ch/expr.c:1602 + #, fuzzy, c-format + msgid "first argument to `%s' must be a mode" + msgstr "Ç ðáñÜìåôñïò óôï `%s' ðñÝðåé íá åßíáé Ýíáò áðëüò ÷áñáêôÞñáò" + + #: ch/expr.c:1609 + #, c-format + msgid "READonly modes for %s must have a value" + msgstr "" + + #: ch/expr.c:1692 + msgid "argument to TERMINATE must be a reference primitive value" + msgstr "" + + #: ch/expr.c:1741 + msgid "argument 1 to INTTIME must be of mode TIME" + msgstr "" + + #: ch/expr.c:1888 + msgid "LENGTH argument must be string, buffer, event mode, text location or mode" + msgstr "" + + #: ch/expr.c:1917 + msgid "UPPER argument must have a mode, or be a mode" + msgstr "" + + #: ch/expr.c:1919 + msgid "LOWER argument must have a mode, or be a mode" + msgstr "" + + #: ch/expr.c:1953 + msgid "UPPER argument must be string, array, mode or integer" + msgstr "" + + #: ch/expr.c:1955 + msgid "LOWER argument must be string, array, mode or integer" + msgstr "" + + #: ch/expr.c:1991 + #, c-format + msgid "%s argument must be POWERSET mode" + msgstr "" + + #: ch/expr.c:2017 + #, c-format + msgid "%s called for empty POWERSET" + msgstr "" + + #: ch/expr.c:2098 + msgid "argument to NUM is not discrete" + msgstr "" + + #: ch/expr.c:2110 + msgid "no integer mode which matches expression's mode" + msgstr "" + + #: ch/expr.c:2119 + msgid "NUM's parameter is below its mode range" + msgstr "" + + #: ch/expr.c:2122 + msgid "NUM's parameter is above its mode range" + msgstr "" + + #: ch/expr.c:2161 + msgid "cannot take SUCC or PRED of a numbered SET" + msgstr "" + + #: ch/expr.c:2169 + msgid "SUCC or PRED must not be done on a PTR" + msgstr "" + + #: ch/expr.c:2172 + msgid "SUCC or PRED for a reference type is not standard" + msgstr "" + + #: ch/expr.c:2182 + msgid "SUCC or PRED argument must be a discrete mode" + msgstr "" + + #: ch/expr.c:2203 + #, c-format + msgid "taking the %s of a value already at its %s value" + msgstr "" + + #: ch/expr.c:2254 + msgid "size applied to a function mode" + msgstr "" + + #: ch/expr.c:2260 + msgid "sizeof applied to a void mode" + msgstr "" + + #: ch/expr.c:2265 + msgid "sizeof applied to an incomplete mode" + msgstr "" + + #: ch/expr.c:2360 + msgid "cannot call a PROCESS, you START a PROCESS" + msgstr "" + + #: ch/expr.c:2422 + #, fuzzy, c-format + msgid "invalid %s" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: ch/expr.c:2437 + #, c-format + msgid "%s parameter %d must be a location" + msgstr "" + + #: ch/expr.c:2445 + #, c-format + msgid "%s parameter %d is READ-only" + msgstr "" + + #: ch/expr.c:2488 + #, c-format + msgid "LOC actual parameter %d is a non-referable location" + msgstr "" + + #: ch/expr.c:2494 + #, c-format + msgid "mode mismatch in parameter %d" + msgstr "" + + #: ch/expr.c:2518 + #, c-format + msgid "too many arguments to procedure `%s'" + msgstr "ðÜñá ðïëëÜ ïñßóìáôá óôç ñïõôßíá `%s'" + + #: ch/expr.c:2521 + msgid "too many arguments to procedure" + msgstr "ðÜñá ðïëëÜ ïñßóìáôá óôç ñïõôßíá" + + #: ch/expr.c:2527 + #, fuzzy, c-format + msgid "too few arguments to procedure `%s'" + msgstr "Ðñïåéäïðïßçóç: Ðïëý ëßãá ïñßóìáôá óôï åóùäïìçìÝíï `%s'" + + #: ch/expr.c:2530 + #, fuzzy + msgid "too few arguments to procedure" + msgstr "ðïëý ëßãá ïñßóìáôá" + + #: ch/expr.c:2596 + #, fuzzy + msgid "syntax error (integer used as function)" + msgstr "óõíôáêôéêü óöÜëìá óôïí êáèïñéóìü óåéñÜò" + + #: ch/expr.c:2616 + #, fuzzy + msgid "syntax error - missing operator, comma, or '('?" + msgstr "óõíôáêôéêü óöÜëìá óôïí ïñéóìü ôïõ ðßíáêá ñåðåñôïñßïõ: %s" + + #: ch/expr.c:2977 + #, c-format + msgid "unimplemented built-in function `%s'" + msgstr "" + + #: ch/expr.c:2981 + #, fuzzy, c-format + msgid "internal error - bad built-in function `%s'" + msgstr "åóùôåñéêü óöÜëìá óôï %s, ãñáììÞ %u" + + #: ch/expr.c:2995 + msgid "empty expression in string index" + msgstr "" + + #: ch/expr.c:3000 + msgid "only one expression allowed in string index" + msgstr "" + + #: ch/expr.c:3017 + msgid "invalid: primval ( untyped_exprlist )" + msgstr "" + + #: ch/expr.c:3081 ch/expr.c:3095 + msgid "operand is variable-size bitstring/power-set" + msgstr "" + + #: ch/expr.c:3245 + #, c-format + msgid "tree code `%s' unhandled in build_compare_set_expr" + msgstr "" + + #: ch/expr.c:3410 + msgid "incompatible modes in concat expression" + msgstr "" + + #: ch/expr.c:3459 + #, fuzzy + msgid "invalid operation on array of chars" + msgstr "Ìç Ýãêõñïò ÷áñáêôÞñáò ðáñáâïëÞò" + + #: ch/expr.c:3504 + msgid "comparison of variant structures is unsafe" + msgstr "" + + #: ch/expr.c:3511 + msgid "compare with variant records" + msgstr "" + + #: ch/expr.c:3688 ch/expr.c:3924 + #, fuzzy, c-format + msgid "incompatible operands to %s" + msgstr "RPC: Ìç óõìâáôÝò åêäüóåéò ôïõ RPC" + + #: ch/expr.c:3740 + msgid "relational operator not allowed for this mode" + msgstr "" + + #: ch/expr.c:3794 + #, c-format + msgid "cannot use %s operator on PROC mode variable" + msgstr "" + + #: ch/expr.c:3800 + #, fuzzy, c-format + msgid "invalid left operand of %s" + msgstr "ìç Ýãêõñï åßäïò áëöáñéèìçôéêïý `%s'" + + #: ch/expr.c:3805 ch/expr.c:4357 + #, fuzzy, c-format + msgid "invalid right operand of %s" + msgstr "ìç Ýãêõñï åßäïò áëöáñéèìçôéêïý `%s'" + + #: ch/expr.c:3819 + msgid "repetition expression must be constant" + msgstr "" + + #: ch/expr.c:3829 + msgid "left argument to MOD/REM operator must be integral" + msgstr "" + + #: ch/expr.c:3834 + msgid "right argument to MOD/REM operator must be integral" + msgstr "" + + #: ch/expr.c:3891 + msgid "right operand of IN is not a powerset" + msgstr "" + + #: ch/expr.c:3896 + msgid "left operand of IN incompatible with right operand" + msgstr "" + + #: ch/expr.c:3987 + msgid "-> operator not allow in constant expression" + msgstr "" + + #: ch/expr.c:4000 + msgid "taking the address of a string literal is non-standard" + msgstr "" + + #: ch/expr.c:4002 + msgid "taking the address of a function is non-standard" + msgstr "" + + #: ch/expr.c:4005 + #, fuzzy + msgid "ADDR requires a LOCATION argument" + msgstr "ç åðéëïãÞ `-k' áðáéôåß Ýíá üñéóìá" + + #: ch/expr.c:4035 + #, fuzzy + msgid "-> expression is not addressable" + msgstr "ËÜèïò Ýêöñáóç óôçí áðïôßìçóç: %s" + + #: ch/expr.c:4062 + msgid "ADDR parameter must be a LOCATION" + msgstr "" + + #: ch/expr.c:4071 + msgid "possible internal error in build_chill_arrow_expr" + msgstr "" + + #: ch/expr.c:4076 + #, fuzzy, c-format + msgid "%s is not addressable" + msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï" + + #: ch/expr.c:4175 + msgid "repetition count is not an integer constant" + msgstr "" + + #: ch/expr.c:4183 + msgid "repetition count < 0" + msgstr "" + + #: ch/expr.c:4188 + msgid "repetition value not constant" + msgstr "" + + #: ch/expr.c:4200 + msgid "bitstring repetition of non-constant boolean" + msgstr "" + + #: ch/expr.c:4223 + msgid "string repetition operand is non-constant bitstring" + msgstr "" + + #: ch/expr.c:4283 + msgid "non-char, non-bit string repetition" + msgstr "" + + #: ch/expr.c:4311 + #, fuzzy, c-format + msgid "invalid operand of %s" + msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'" + + #: ch/expr.c:4322 + #, c-format + msgid "right operand of %s is not array of boolean" + msgstr "" + + #: ch/expr.c:4335 + #, c-format + msgid "%s operator applied to boolean variable" + msgstr "" + + #: ch/expr.c:4406 + msgid "non-boolean mode in conditional expression" + msgstr "" + + #: ch/grant.c:1978 + msgid "decode_constant: invalid component_ref" + msgstr "" + + #: ch/grant.c:1986 + msgid "decode_constant: mode and value mismatch" + msgstr "" + + #: ch/grant.c:1989 + msgid "decode_constant: cannot decode this mode" + msgstr "" + + #: ch/grant.c:2214 + msgid "decode_constant_selective: mode and value mismatch" + msgstr "" + + #: ch/grant.c:2217 + msgid "decode_constant_selective: cannot decode this mode" + msgstr "" + + #: ch/grant.c:2677 + #, fuzzy, c-format + msgid "can't write to %s" + msgstr "áäõíáìßá åããñáöÞò áðïôåëÝóìáôïò: %s" + + #: ch/grant.c:2764 + #, fuzzy + msgid "FORBID is not yet implemented" + msgstr "Ç ëåéôïõñãßá äåí Ý÷åé õëïðïéçèåß" + + #. this nerver should happen + #: ch/grant.c:2825 + #, c-format + msgid "function \"really_grant_this\" called for `%s'" + msgstr "" + + #: ch/inout.c:1645 + msgid "non-integral text length" + msgstr "" + + #: ch/inout.c:1650 + msgid "non-constant text length" + msgstr "" + + #: ch/inout.c:1655 + #, fuzzy + msgid "text length must be greater than 0" + msgstr "%s: ï áñéèìüò ãñáììÞò ðñÝðåé íá åßíáé ìåãáëýôåñïò áðü ôï ìçäÝí" + + #: ch/inout.c:1755 + #, c-format + msgid "argument %d of %s must be of mode ASSOCIATION" + msgstr "" + + #: ch/inout.c:1760 ch/inout.c:2146 ch/inout.c:2516 ch/inout.c:2751 + #, fuzzy, c-format + msgid "argument %d of %s must be a location" + msgstr "Ç ðáñÜìåôñïò óôï <%s> ðñÝðåé íá åßíáé Ýíáò áðëüò ÷áñáêôÞñáò" + + #: ch/inout.c:1795 + #, fuzzy + msgid "argument 2 of ASSOCIATE must not be an empty string" + msgstr "%s: ç ôéìÞ ãéá ôï ðåäßï `%s' äåí ðñÝðåé íá åßíáé Ýíá êåíü áëöáñéèìçôéêü" + + #: ch/inout.c:1811 + #, fuzzy + msgid "argument 2 to ASSOCIATE must be a string" + msgstr "Ç ðáñÜìåôñïò óôï <%s> ðñÝðåé íá åßíáé Ýíáò áðëüò ÷áñáêôÞñáò" + + #: ch/inout.c:1850 + #, fuzzy + msgid "argument 3 to ASSOCIATE must be a string" + msgstr "Ç ðáñÜìåôñïò óôï <%s> ðñÝðåé íá åßíáé Ýíáò áðëüò ÷áñáêôÞñáò" + + #: ch/inout.c:2031 + #, fuzzy + msgid "too many arguments in call to MODIFY" + msgstr "ðÜñá ðïëëÜ ïñßóìáôá" + + #: ch/inout.c:2044 + #, fuzzy + msgid "argument 2 of MODIFY must not be an empty string" + msgstr "%s: ç ôéìÞ ãéá ôï ðåäßï `%s' äåí ðñÝðåé íá åßíáé Ýíá êåíü áëöáñéèìçôéêü" + + #: ch/inout.c:2060 + #, fuzzy + msgid "argument 2 to MODIFY must be a string" + msgstr "Ç ðáñÜìåôñïò óôï <%s> ðñÝðåé íá åßíáé Ýíáò áðëüò ÷áñáêôÞñáò" + + #: ch/inout.c:2094 + #, fuzzy + msgid "argument 3 to MODIFY must be a string" + msgstr "Ç ðáñÜìåôñïò óôï <%s> ðñÝðåé íá åßíáé Ýíáò áðëüò ÷áñáêôÞñáò" + + #: ch/inout.c:2141 + #, c-format + msgid "argument %d of %s must be an ACCESS or TEXT mode" + msgstr "" + + #: ch/inout.c:2355 + msgid "argument 4 of CONNECT must be of mode WHERE" + msgstr "" + + #: ch/inout.c:2371 + msgid "index expression for ACCESS without index" + msgstr "" + + #: ch/inout.c:2376 ch/inout.c:2554 ch/inout.c:2636 ch/inout.c:4356 + #: ch/inout.c:4504 + #, fuzzy + msgid "incompatible index mode" + msgstr "ìç Ýãêõñï äéêáßùìá" + + #: ch/inout.c:2476 + msgid "argument 3 to CONNECT must be of mode USAGE" + msgstr "" + + #: ch/inout.c:2511 + #, fuzzy, c-format + msgid "argument %d of %s must be of mode ACCESS" + msgstr "Ç ðáñÜìåôñïò óôï <%s> ðñÝðåé íá åßíáé Ýíáò áðëüò ÷áñáêôÞñáò" + + #: ch/inout.c:2545 + #, fuzzy + msgid "too few arguments in call to `readrecord'" + msgstr "ðïëý ëßãá bytes óôçí êùäéêïðïßçóç ÷áñáêôÞñá" + + #: ch/inout.c:2569 ch/inout.c:2648 + #, fuzzy + msgid "incompatible record mode" + msgstr "ìçäåíéóìÝíç åããñáöÞ êáé ãñÜøéìï ðÜíù óå áõôÞ (truncated)" + + #: ch/inout.c:2574 + msgid "store location must not be READonly" + msgstr "" + + #: ch/inout.c:2616 + #, fuzzy + msgid "too few arguments in call to `writerecord'" + msgstr "ðïëý ëßãá bytes óôçí êùäéêïðïßçóç ÷áñáêôÞñá" + + #: ch/inout.c:2643 + msgid "transfer to ACCESS without record mode" + msgstr "" + + #: ch/inout.c:2746 + #, fuzzy, c-format + msgid "argument %d of %s must be of mode TEXT" + msgstr "Ç ðáñÜìåôñïò óôï <%s> ðñÝðåé íá åßíáé Ýíáò áðëüò ÷áñáêôÞñáò" + + #: ch/inout.c:2803 + msgid "TEXT doesn't have a location" + msgstr "" + + #: ch/inout.c:2905 + msgid "incompatible index mode for SETETEXTACCESS" + msgstr "" + + #: ch/inout.c:2915 + msgid "incompatible record mode for SETTEXTACCESS" + msgstr "" + + #: ch/inout.c:2945 + msgid "parameter 2 must be a location" + msgstr "" + + #: ch/inout.c:2955 + msgid "incompatible modes in parameter 2" + msgstr "" + + #: ch/inout.c:3062 + msgid "conditional expression not allowed in this context" + msgstr "" + + #: ch/inout.c:3064 + #, c-format + msgid "untyped expression as argument %d" + msgstr "" + + #: ch/inout.c:3141 ch/inout.c:3187 + #, c-format + msgid "cannot process %d bits integer for READTEXT argument %d" + msgstr "" + + #: ch/inout.c:3262 + #, c-format + msgid "cannot process %d bits integer WRITETEXT argument %d" + msgstr "" + + #: ch/inout.c:3283 ch/inout.c:3338 ch/inout.c:3417 ch/inout.c:3483 + #: ch/inout.c:3534 ch/inout.c:3619 ch/inout.c:3654 + #, c-format + msgid "argument %d is READonly" + msgstr "" + + #: ch/inout.c:3290 ch/inout.c:3345 ch/inout.c:3424 ch/inout.c:3491 + #: ch/inout.c:3542 ch/inout.c:3627 ch/inout.c:3659 + #, fuzzy, c-format + msgid "argument %d must be referable" + msgstr "Ç ðáñÜìåôñïò óôï <%s> ðñÝðåé íá åßíáé Ýíáò áðëüò ÷áñáêôÞñáò" + + #: ch/inout.c:3578 + #, c-format + msgid "cannot process argument %d of WRITETEXT, unknown size" + msgstr "" + + #. datatype is not yet implemented, issue a warning + #: ch/inout.c:3725 + #, c-format + msgid "cannot process mode of argument %d for %sTEXT" + msgstr "" + + #: ch/inout.c:3868 + #, fuzzy + msgid "too few arguments for this format string" + msgstr "Ý÷ïõí ðáñáëçöèåß ïñßóìáôá" + + #: ch/inout.c:3893 ch/inout.c:3902 + #, c-format + msgid "type of argument %d invalid for conversion code at offset %d" + msgstr "" + + #: ch/inout.c:4012 + msgid "unmatched open paren" + msgstr "" + + #: ch/inout.c:4026 ch/inout.c:4221 + #, c-format + msgid "bad format specification character (offset %d)" + msgstr "" + + #: ch/inout.c:4039 + #, c-format + msgid "repetition factor overflow (offset %d)" + msgstr "" + + #: ch/inout.c:4057 ch/inout.c:4064 ch/inout.c:4071 + #, c-format + msgid "duplicate qualifier (offset %d)" + msgstr "" + + #: ch/inout.c:4093 + #, c-format + msgid "clause width overflow (offset %d)" + msgstr "" + + #: ch/inout.c:4106 + #, c-format + msgid "no fraction (offset %d)" + msgstr "" + + #: ch/inout.c:4124 + #, c-format + msgid "no fraction width (offset %d)" + msgstr "" + + #: ch/inout.c:4131 + #, c-format + msgid "fraction width overflow (offset %d)" + msgstr "" + + #: ch/inout.c:4142 + #, c-format + msgid "no exponent (offset %d)" + msgstr "" + + #: ch/inout.c:4160 + #, c-format + msgid "no exponent width (offset %d)" + msgstr "" + + #: ch/inout.c:4167 + #, c-format + msgid "exponent width overflow (offset %d)" + msgstr "" + + #: ch/inout.c:4208 + #, fuzzy + msgid "internal error in check_format_string" + msgstr "åóùôåñéêü óöÜëìá óôï %s, ãñáììÞ %u" + + # src/recode.c:171 + #: ch/inout.c:4224 + #, fuzzy, c-format + msgid "no padding character (offset %d)" + msgstr "ÊáíÝíáò ÷áñáêôÞñáò äåí ìåôáôñÝðåôáé óå %3d" + + #. too may arguments for format string + #: ch/inout.c:4256 + #, fuzzy + msgid "too many arguments for this format string" + msgstr "ðÜñá ðïëëÜ ïñßóìáôá óå áõôü ôï áëöáñéèìçôéêü ìïñöÞò" + + #: ch/inout.c:4354 ch/inout.c:4502 + #, fuzzy + msgid "missing index expression" + msgstr "ðáñÜëçøç ïñßóìáôïò áñ÷åßïõ" + + #: ch/inout.c:4361 + msgid "too few arguments in call to `writetext'" + msgstr "" + + #: ch/inout.c:4374 + msgid "argument 1 for WRITETEXT must be a TEXT or CHARS(n) VARYING location" + msgstr "" + + #: ch/inout.c:4397 + msgid "`format string' for WRITETEXT must be a CHARACTER string" + msgstr "" + + #: ch/inout.c:4509 + #, fuzzy + msgid "too few arguments in call to `readtext'" + msgstr "ðïëý ëßãá ïñßóìáôá" + + #: ch/inout.c:4522 + msgid "argument 1 for READTEXT must be a TEXT location or CHARS(n) [ VARYING ] expression" + msgstr "" + + #: ch/inout.c:4543 + msgid "`format string' for READTEXT must be a CHARACTER string" + msgstr "" + + #: ch/lang.c:105 + #, fuzzy + msgid "non-constant expression" + msgstr "Áäõíáìßá ðñïóðÝëáóçò ôïõ áñ÷åßïõ ôçò áëëáãÞò" + + #: ch/lang.c:191 + msgid "ignoring case upon input and" + msgstr "" + + #: ch/lang.c:192 + msgid "making special words uppercase wouldn't work" + msgstr "" + + #: ch/lang.c:203 + msgid "making special words uppercase and" + msgstr "" + + #: ch/lang.c:204 + msgid " ignoring case upon input wouldn't work" + msgstr "" + + #: ch/lang.c:277 java/typeck.c:178 + #, fuzzy + msgid "internal error - use of undefined type" + msgstr "åóùôåñéêü óöÜëìá óôï %s, ãñáììÞ %u" + + #: ch/lex.c:502 + #, fuzzy + msgid "invalid C'xx' " + msgstr "ìç Ýãêõñç ìåôáôüðéóç UTC" + + #: ch/lex.c:607 java/jcf-parse.c:611 java/jcf-write.c:3376 + #, fuzzy, c-format + msgid "can't close %s" + msgstr "äåí åßíáé äõíáôü íá áëëá÷ôïýí ôá äéêáéþìáôá ôïõ `%s'" + + #: ch/lex.c:711 + msgid "malformed exponent part of floating-point literal" + msgstr "" + + #: ch/lex.c:728 + msgid "real number exceeds range of REAL" + msgstr "" + + #: ch/lex.c:747 ch/lex.c:774 + msgid "end-of-file in '<>' directive" + msgstr "" + + #: ch/lex.c:780 + #, fuzzy + msgid "unrecognized compiler directive" + msgstr "ìç áíáãíùñßóçìç åðéëïãÞ `-%c'" + + #: ch/lex.c:788 ch/lex.c:834 + #, fuzzy, c-format + msgid "unrecognized compiler directive `%s'" + msgstr "ìç áíáãíùñßóçìç åðéëïãÞ `-%c'" + + #: ch/lex.c:995 + #, fuzzy + msgid "unterminated control sequence" + msgstr "ìç ôåñìáôéæüìåío áëöáñéèìçôéêü" + + #: ch/lex.c:1010 ch/lex.c:1046 + msgid "invalid integer literal in control sequence" + msgstr "" + + #: ch/lex.c:1021 ch/lex.c:1029 + msgid "control sequence overflow" + msgstr "" + + #: ch/lex.c:1023 ch/lex.c:1031 + #, fuzzy + msgid "invalid control sequence" + msgstr "ìç Ýãêõñï üíïìá ìÞíá" + + #: ch/lex.c:1111 + msgid "invalid base in read control sequence" + msgstr "" + + #: ch/lex.c:1118 + msgid "invalid digit in control sequence" + msgstr "" + + #: ch/lex.c:1145 + #, fuzzy + msgid "unterminated string literal" + msgstr "ìç ôåñìáôéæüìåío áëöáñéèìçôéêü" + + #: ch/lex.c:1248 ch/lex.c:1334 + #, fuzzy, c-format + msgid "invalid number format `%s'" + msgstr "ìç Ýãêõñïò áñéèìüò áðü óôÞëåò: `%s'" + + #: ch/lex.c:1266 + msgid "integer literal too big" + msgstr "" + + #: ch/lex.c:1395 + #, fuzzy, c-format + msgid "can't find %s" + msgstr "Äåí åßíáé äõíáôüí íá åêôåëåóôåß ôï %s" + + #: ch/lex.c:1421 + msgid "USE_SEIZE_FILE directive must be followed by string" + msgstr "" + + #: ch/lex.c:1693 f/lex.c:1190 + #, fuzzy + msgid "invalid #ident" + msgstr "ìç Ýãêõñï äéêáßùìá" + + #: ch/lex.c:1711 f/lex.c:1207 + #, fuzzy + msgid "undefined or invalid # directive" + msgstr "%%%c: êáôåõèõíôÞñéïò ãñáììÞ ìç Ýãêõñç." + + #: ch/lex.c:1765 ch/lex.c:1774 f/lex.c:1263 + #, fuzzy + msgid "invalid #line" + msgstr "ìç Ýãêõñïò áñéèìüò" + + #: ch/lex.c:1843 f/lex.c:836 + msgid "#-lines for entering and leaving files don't match" + msgstr "" + + #: ch/lex.c:1868 f/lex.c:1373 + #, fuzzy + msgid "invalid #-line" + msgstr "ìç Ýãêõñïò áñéèìüò" + + #: ch/lex.c:1998 + msgid "missing `=' in compiler directive" + msgstr "" + + #: ch/lex.c:2040 ch/lex.c:2050 ch/lex.c:2091 + msgid "invalid value follows `=' in compiler directive" + msgstr "" + + #: ch/lex.c:2061 + #, fuzzy, c-format + msgid "invalid `%c' character in name" + msgstr "Ìç Ýãêõñïò ÷áñáêôÞñáò ïíüìáôïò êëÜóçò" + + #: ch/lex.c:2074 + #, c-format + msgid "`%s' not integer constant synonym " + msgstr "" + + #: ch/lex.c:2097 + msgid "value out of range in compiler directive" + msgstr "" + + #: ch/lex.c:2214 java/jcf-parse.c:607 + #, fuzzy, c-format + msgid "can't reopen %s" + msgstr "áäõíáìßá áíïßãìáôïò ôïõ `%s'" + + #: ch/lex.c:2225 + msgid "no modules seen" + msgstr "" + + #: ch/loop.c:480 + msgid "modeless tuple not allowed in this context" + msgstr "" + + #: ch/loop.c:482 + msgid "IN expression does not have a mode" + msgstr "" + + #: ch/loop.c:489 + msgid "location enumeration for BOOLS" + msgstr "" + + #: ch/loop.c:517 + msgid "location enumeration for bit-packed arrays" + msgstr "" + + #: ch/loop.c:526 ch/nloop.c:481 + msgid "loop's IN expression is not a composite object" + msgstr "" + + #: ch/loop.c:541 ch/nloop.c:498 + msgid "start expr must have discrete mode" + msgstr "" + + #: ch/loop.c:547 ch/nloop.c:504 + msgid "DO FOR start expression is a numbered SET" + msgstr "" + + #: ch/loop.c:555 ch/nloop.c:510 + msgid "TO expression is a numbered SET" + msgstr "" + + #: ch/loop.c:560 ch/nloop.c:525 + msgid "TO expr must have discrete mode" + msgstr "" + + #: ch/loop.c:565 ch/nloop.c:531 + msgid "start expr and TO expr must be compatible" + msgstr "" + + #: ch/loop.c:574 ch/nloop.c:546 + msgid "BY expr must have discrete mode" + msgstr "" + + #: ch/loop.c:579 ch/nloop.c:552 + msgid "start expr and BY expr must be compatible" + msgstr "" + + #: ch/loop.c:595 ch/nloop.c:765 + #, fuzzy + msgid "loop identifier undeclared" + msgstr "áíáìåíüôáí óôáèåñÜ Þ ðñïóäéïñéóôÞò" + + #: ch/loop.c:606 + msgid "loop variable incompatible with start expression" + msgstr "" + + #: ch/loop.c:633 ch/nloop.c:564 + msgid "body of DO FOR will never execute" + msgstr "" + + #: ch/loop.c:648 ch/nloop.c:585 + #, fuzzy + msgid "BY expression is negative or zero" + msgstr "ËÜèïò Ýêöñáóç óôçí áðïôßìçóç: %s" + + #: ch/loop.c:847 ch/nloop.c:817 + msgid "can't iterate through array of BOOL" + msgstr "" + + #: ch/nloop.c:867 + msgid "Can't iterate through array of BOOL" + msgstr "" + + #: ch/parse.c:159 + #, c-format + msgid "there was no start label to match the end label '%s'" + msgstr "" + + #: ch/parse.c:162 + #, fuzzy, c-format + msgid "start label '%s' does not match end label '%s'" + msgstr "ôï áñ÷åßï äåäïìÝíùí ðñïößë `%s' äåí ôáéñéÜæåé ìå ôï äéáìïéñáæüìåíï áíôéêåßìåíï `%s'" + + #: ch/parse.c:192 + #, fuzzy, c-format + msgid "`%s' not declared" + msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï" + + #: ch/parse.c:226 + msgid "no RETURN or RESULT in procedure" + msgstr "" + + #: ch/parse.c:245 + msgid "PREFIXED clause with no prelix in unlabeled module" + msgstr "" + + #: ch/parse.c:336 + #, c-format + msgid "internal parser error - expected token %d" + msgstr "" + + #: ch/parse.c:529 + #, c-format + msgid "'%s!' is not followed by an identifier" + msgstr "" + + #: ch/parse.c:545 + #, fuzzy + msgid "expected a name here" + msgstr "%s: áíáìåíüôáí áñéèìçôéêÞ ôéìÞ." + + #: ch/parse.c:560 + #, fuzzy + msgid "expected a name string here" + msgstr "%s: áíáìåíüôáí áñéèìçôéêÞ ôéìÞ." + + #: ch/parse.c:591 + #, c-format + msgid "`%s' undeclared" + msgstr "" + + #: ch/parse.c:669 + msgid "action not allowed in SPEC MODULE" + msgstr "" + + #: ch/parse.c:691 + #, fuzzy + msgid "missing defining occurrence" + msgstr "Ý÷åé ðáñáëçöèåß ôï áñ÷åßï ðñïïñéóìïý" + + #: ch/parse.c:702 + msgid "bad defining occurrence following ','" + msgstr "" + + #: ch/parse.c:802 + #, fuzzy + msgid "missing '(' in exception list" + msgstr "Ý÷åé ðáñáëçöèåß ôï áñ÷åßï ðñïïñéóìïý" + + #: ch/parse.c:827 + msgid "ON exception names must be unique" + msgstr "" + + #: ch/parse.c:837 + #, fuzzy + msgid "syntax error in exception list" + msgstr "óõíôáêôéêü óöÜëìá óôï ïñéóìü ôïõ %s: %s" + + #: ch/parse.c:873 + #, fuzzy + msgid "empty ON-condition" + msgstr "Åðåßãïõóá êáôÜóôáóç åéóüäïõ/åîüäïõ" + + #: ch/parse.c:938 + msgid "INIT not allowed at loc-identity declaration" + msgstr "" + + #: ch/parse.c:948 + msgid "'=' used where ':=' is required" + msgstr "" + + #: ch/parse.c:956 + msgid "initialization is not allowed in spec module" + msgstr "" + + #: ch/parse.c:964 + msgid "loc-identity declaration without initialization" + msgstr "" + + #: ch/parse.c:1008 + msgid "bad syntax following FORBID" + msgstr "" + + #: ch/parse.c:1023 + msgid "expected a postfix name here" + msgstr "" + + #: ch/parse.c:1068 + #, fuzzy + msgid "expected another rename clause" + msgstr "%s: áíáìåíüôáí áñéèìçôéêÞ ôéìÞ." + + #: ch/parse.c:1128 + #, fuzzy + msgid "syntax error in parameter name list" + msgstr "óõíôáêôéêü óöÜëìá óôïí ïñéóìü êëÜóçò ÷áñáêôÞñùí" + + #: ch/parse.c:1221 + msgid "NONREF specific without LOC in result attribute" + msgstr "" + + #: ch/parse.c:1223 + msgid "DYNAMIC specific without LOC in result attribute" + msgstr "" + + #: ch/parse.c:1245 + msgid "exception names must be unique" + msgstr "" + + #: ch/parse.c:1441 + msgid "must specify a PROCESS name" + msgstr "" + + #: ch/parse.c:1448 + msgid "SIGNAL must be in global reach" + msgstr "" + + #: ch/parse.c:1479 + #, fuzzy + msgid "syntax error while parsing signal definition statement" + msgstr "óõíôáêôéêü óöÜëìá óôï ïñéóìü ôïõ %s: %s" + + #: ch/parse.c:1593 + msgid "case range list" + msgstr "" + + #: ch/parse.c:1660 + msgid "misplaced colon in case label" + msgstr "" + + #: ch/parse.c:1707 + msgid "unrecognized case label list after ','" + msgstr "" + + #: ch/parse.c:1971 ch/parse.c:1997 + msgid "bad ASM operand" + msgstr "" + + #: ch/parse.c:2067 + msgid "readonly location modified by 'asm'" + msgstr "" + + #: ch/parse.c:2198 + msgid "expected 'TO' in step enumeration" + msgstr "" + + #: ch/parse.c:2213 + msgid "expected 'IN' in FOR control here" + msgstr "" + + #: ch/parse.c:2314 + msgid "missing DELAY CASE alternative" + msgstr "" + + #. This is probably not possible + #: ch/parse.c:2348 + msgid "non-referable location in DO WITH" + msgstr "" + + #: ch/parse.c:2360 + msgid "WITH element must be of STRUCT mode" + msgstr "" + + #: ch/parse.c:2467 + msgid "missing ')' in signal/buffer receive alternative" + msgstr "" + + #: ch/parse.c:2481 + msgid "misplaced 'IN' in signal/buffer receive alternative" + msgstr "" + + #: ch/parse.c:2529 + msgid "missing RECEIVE alternative" + msgstr "" + + #: ch/parse.c:2655 + msgid "PROCESS copy number must be integer" + msgstr "" + + #: ch/parse.c:2882 + msgid "missing parenthesis for procedure call" + msgstr "" + + #: ch/parse.c:2884 + #, fuzzy + msgid "expression is not an action" + msgstr "ËÜèïò Ýêöñáóç óôçí áðïôßìçóç: %s" + + #: ch/parse.c:2918 + #, fuzzy + msgid "syntax error in action" + msgstr "óõíôáêôéêü óöÜëìá óôïí êáèïñéóìü óåéñÜò" + + #: ch/parse.c:2945 + msgid "no handler is permitted on this action" + msgstr "" + + #: ch/parse.c:2966 + msgid "definition follows action" + msgstr "" + + #: ch/parse.c:3042 + #, fuzzy + msgid "bad tuple field name list" + msgstr "ìç Ýãêõñï byte Þ ëßóôá ðåäßùí" + + #: ch/parse.c:3088 + #, fuzzy + msgid "invalid syntax for label in tuple" + msgstr "ìç Ýãêõñï byte Þ ëßóôá ðåäßùí" + + #: ch/parse.c:3133 + msgid "bad syntax in tuple" + msgstr "" + + #: ch/parse.c:3160 + msgid "non-mode name before tuple" + msgstr "" + + #: ch/parse.c:3205 + msgid "invalid expression/location syntax" + msgstr "" + + #: ch/parse.c:3262 + msgid "RECEIVE expression" + msgstr "" + + #: ch/parse.c:3457 + msgid "there should not be a ';' here" + msgstr "" + + #: ch/parse.c:3496 + msgid "missing ELSE/ELSIF in IF expression" + msgstr "" + + #: ch/parse.c:3547 + msgid "conditional expression not allowed inside parentheses" + msgstr "" + + #: ch/parse.c:3551 + msgid "mode-less tuple not allowed inside parentheses" + msgstr "" + + #. Z.200 doesn't allow mixed numbered and unnumbered set elements, + #. but we can do it. Print a warning + #: ch/parse.c:3664 + msgid "mixed numbered and unnumbered set elements is not standard" + msgstr "" + + #: ch/parse.c:3667 + msgid "SET mode must define at least one named value" + msgstr "" + + #: ch/parse.c:3766 + msgid "POS not allowed for ARRAY" + msgstr "" + + #: ch/parse.c:3776 + msgid "STEP not allowed in field definition" + msgstr "" + + #: ch/parse.c:3792 + #, fuzzy + msgid "missing field name" + msgstr "ðáñÜëçøç ïñßóìáôïò áñ÷åßïõ" + + #: ch/parse.c:3801 + msgid "bad field name following ','" + msgstr "" + + #: ch/parse.c:3861 + msgid "expected ':' in structure variant alternative" + msgstr "" + + #: ch/parse.c:3912 + #, fuzzy + msgid "missing field" + msgstr "Ý÷åé ðáñáëçöèåß ç ëßóôá ìå ôá ðåäßá" + + #: ch/parse.c:4060 + #, fuzzy + msgid "VARYING bit-strings not implemented" + msgstr "Ç ëåéôïõñãßá äåí Ý÷åé õëïðïéçèåß" + + #: ch/parse.c:4121 + msgid "strings must be composed of chars" + msgstr "" + + #: ch/parse.c:4171 + msgid "BUFFER modes may not be readonly" + msgstr "" + + #: ch/parse.c:4178 + msgid "EVENT modes may not be readonly" + msgstr "" + + #: ch/parse.c:4198 + #, fuzzy + msgid "SIGNAL is not a valid mode" + msgstr "ìç Ýãêõñï äéêáßùìá" + + #: ch/parse.c:4235 + #, fuzzy + msgid "syntax error - missing mode" + msgstr "óõíôáêôéêü óöÜëìá óôïí ïñéóìïý locale ìçíýìáôïò" + + #: ch/parse.c:4282 + msgid "syntax error - expected a module or end of file" + msgstr "" + + #: ch/satisfy.c:58 + #, c-format + msgid " `%s', which depends on ..." + msgstr "" + + #: ch/satisfy.c:90 + #, c-format + msgid "cycle: `%s' depends on ..." + msgstr "" + + #: ch/satisfy.c:92 + #, c-format + msgid " `%s'" + msgstr " `%s'" + + #: ch/satisfy.c:151 + msgid "SYN of this mode not allowed" + msgstr "" + + #: ch/satisfy.c:156 + msgid "mode of SYN incompatible with value" + msgstr "" + + #: ch/satisfy.c:167 + msgid "SYN value outside range of its mode" + msgstr "" + + #: ch/satisfy.c:176 + msgid "INIT string too large for mode" + msgstr "" + + #: ch/satisfy.c:195 + #, fuzzy, c-format + msgid "value of %s is not a valid constant" + msgstr "%s' äåí åßíáé éó÷ýùí èåôéêüò áêÝñáéïò." + + #: ch/satisfy.c:226 + msgid "mode with non-value property in signal definition" + msgstr "" + + #: ch/satisfy.c:403 + #, fuzzy, c-format + msgid "undeclared identifier `%s'" + msgstr "ìç Ýãêõñïò äçëùôÞò ðåäßïõ: `%s'" + + #: ch/satisfy.c:456 + msgid "RETURNS spec with invalid mode" + msgstr "" + + #: ch/satisfy.c:520 + msgid "operand to REF is not a mode" + msgstr "" + + #: ch/satisfy.c:554 + msgid "field with non-value mode in variant structure not allowed" + msgstr "" + + #: ch/satisfy.c:593 + msgid "buffer element mode must not have non-value property" + msgstr "" + + #: ch/satisfy.c:602 + msgid "recordmode must not have the non-value property" + msgstr "" + + #: ch/tasking.c:170 ch/tasking.c:218 + #, c-format + msgid "tasking code %ld out of range for `%s'" + msgstr "" + + #: ch/tasking.c:284 + #, c-format + msgid "invalid attribute for argument `%s' (only IN or LOC allowed)" + msgstr "" + + #: ch/tasking.c:325 + msgid "PROCESS may only be declared at module level" + msgstr "" + + #: ch/tasking.c:549 + #, c-format + msgid "process name %s never declared" + msgstr "" + + #: ch/tasking.c:554 + msgid "you may only START a process, not a proc" + msgstr "" + + #: ch/tasking.c:590 + msgid "SET expression not a location" + msgstr "" + + #: ch/tasking.c:595 + msgid "SET location must be INSTANCE mode" + msgstr "" + + #: ch/tasking.c:632 + #, fuzzy, c-format + msgid "too many arguments to process `%s'" + msgstr "ðÜñá ðïëëÜ ïñßóìáôá" + + #: ch/tasking.c:635 + #, fuzzy + msgid "too many arguments to process" + msgstr "ðÜñá ðïëëÜ ïñßóìáôá" + + #: ch/tasking.c:640 + #, fuzzy, c-format + msgid "too few arguments to process `%s'" + msgstr "ðïëý ëßãá ïñßóìáôá" + + #: ch/tasking.c:643 + #, fuzzy + msgid "too few arguments to process" + msgstr "ðïëý ëßãá ïñßóìáôá" + + #: ch/tasking.c:983 + msgid "COPY_NUMBER argument must be INSTANCE expression" + msgstr "" + + #: ch/tasking.c:1007 + msgid "GEN_CODE argument must be a process or signal name" + msgstr "" + + #: ch/tasking.c:1029 + #, fuzzy + msgid "GEN_INST parameter 2 must be an integer mode" + msgstr "ç ôéìÞ ãéá ôï %s ðñÝðåé íá åßíáé áêÝñáéïò" + + #: ch/tasking.c:1050 + msgid "GEN_INST parameter 1 must be a PROCESS or an integer expression" + msgstr "" + + #: ch/tasking.c:1076 + #, fuzzy, c-format + msgid "%s is not a declared process" + msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï" + + #: ch/tasking.c:1097 + msgid "PROC_TYPE argument must be INSTANCE expression" + msgstr "" + + #: ch/tasking.c:1139 + msgid "QUEUE_LENGTH argument must be a BUFFER/EVENT location" + msgstr "" + + #: ch/tasking.c:1289 + #, c-format + msgid "SEND requires a SIGNAL; %s is not a SIGNAL name" + msgstr "" + + #: ch/tasking.c:1314 + #, c-format + msgid "too many values for SIGNAL `%s'" + msgstr "" + + #: ch/tasking.c:1320 + #, c-format + msgid "too few values for SIGNAL `%s'" + msgstr "" + + #: ch/tasking.c:1398 + msgid "signal sent without priority" + msgstr "" + + #: ch/tasking.c:1399 ch/tasking.c:2927 + #, fuzzy + msgid " and no default priority was set." + msgstr "Äåí åßíáé äõíáôüí íá âñåèåß ç ðñïôåñáéüôçôá." + + #: ch/tasking.c:1400 ch/tasking.c:2777 ch/tasking.c:2928 + msgid " PRIORITY defaulted to 0" + msgstr "" + + #: ch/tasking.c:1415 + msgid "SEND without a destination instance" + msgstr "" + + #: ch/tasking.c:1416 + #, fuzzy + msgid " and no destination process specified" + msgstr "Áðáéôåßôáé äéåýèõíóç ðñïïñéóìïý" + + #: ch/tasking.c:1417 + msgid " for the signal" + msgstr "" + + #. as our system doesn't allow that and Z.200 specifies it, + #. we issue a warning + #: ch/tasking.c:1436 + #, c-format + msgid "SEND to ANY copy of process `%s'" + msgstr "" + + #: ch/tasking.c:1441 + msgid "SEND TO must be an INSTANCE mode" + msgstr "" + + #: ch/tasking.c:1455 + msgid "SEND WITH must have a mode" + msgstr "" + + #: ch/tasking.c:1724 + msgid "internal error: RECEIVE CASE stack invalid" + msgstr "" + + #: ch/tasking.c:1764 ch/tasking.c:2492 + msgid "SET requires INSTANCE location" + msgstr "" + + #: ch/tasking.c:1843 + msgid "SIGNAL in RECEIVE CASE alternative follows" + msgstr "" + + #: ch/tasking.c:1844 + #, c-format + msgid " a BUFFER name on line %d" + msgstr "" + + #: ch/tasking.c:1852 + #, c-format + msgid "SIGNAL `%s' has no data fields" + msgstr "" + + #: ch/tasking.c:1857 + #, c-format + msgid "SIGNAL `%s' requires data fields" + msgstr "" + + #: ch/tasking.c:1921 + #, c-format + msgid "too few data fields provided for `%s'" + msgstr "" + + #: ch/tasking.c:1924 + #, c-format + msgid "too many data fields provided for `%s'" + msgstr "" + + #: ch/tasking.c:1947 + msgid "BUFFER in RECEIVE CASE alternative follows" + msgstr "" + + #: ch/tasking.c:1948 + #, c-format + msgid " a SIGNAL name on line %d" + msgstr "" + + #: ch/tasking.c:1956 + msgid "BUFFER in RECEIVE CASE alternative must be a location" + msgstr "" + + #: ch/tasking.c:1962 + msgid "buffer receive alternative requires only 1 defining occurrence" + msgstr "" + + #: ch/tasking.c:2043 + msgid "incompatible modes in receive buffer alternative" + msgstr "" + + #: ch/tasking.c:2049 + msgid "defining occurrence in receive buffer alternative must be a location" + msgstr "" + + #: ch/tasking.c:2086 + msgid "buffer receive alternative without `IN location'" + msgstr "" + + #: ch/tasking.c:2092 + msgid "RECEIVE CASE alternative must specify a SIGNAL name or BUFFER location" + msgstr "" + + #: ch/tasking.c:2331 + msgid "RECEIVE CASE without alternatives" + msgstr "" + + #: ch/tasking.c:2369 + msgid "CONTINUE requires an event location" + msgstr "" + + #: ch/tasking.c:2503 ch/tasking.c:2939 + msgid "PRIORITY must be of integer type" + msgstr "" + + #: ch/tasking.c:2581 + msgid "delay alternative must be an EVENT location" + msgstr "" + + #: ch/tasking.c:2636 + msgid "DELAY CASE without alternatives" + msgstr "" + + #: ch/tasking.c:2756 + msgid "DELAY action requires an event location" + msgstr "" + + #: ch/tasking.c:2767 + msgid "PRIORITY in DELAY action must be of integer type" + msgstr "" + + #: ch/tasking.c:2776 + msgid "DELAY action without priority." + msgstr "" + + #: ch/tasking.c:2867 + msgid "send buffer action requires a BUFFER location" + msgstr "" + + #: ch/tasking.c:2884 + msgid "there must be only 1 value for send buffer action" + msgstr "" + + #: ch/tasking.c:2905 + msgid "convert failed for send buffer action" + msgstr "" + + #: ch/tasking.c:2911 + msgid "incompatible modes in send buffer action" + msgstr "" + + #: ch/tasking.c:2926 + msgid "buffer sent without priority" + msgstr "" + + #: ch/tasking.c:2945 + msgid "WITH not allowed for send buffer action" + msgstr "" + + #: ch/tasking.c:2950 + msgid "TO not allowed for send buffer action" + msgstr "" + + #: ch/tasking.c:3093 + #, c-format + msgid "SEND requires a BUFFER; `%s' is not a BUFFER name" + msgstr "" + + #: ch/tasking.c:3234 + msgid "non-integral max queue size for EVENT/BUFFER mode" + msgstr "" + + #: ch/tasking.c:3239 + msgid "non-constant max queue size for EVENT/BUFFER mode" + msgstr "" + + #: ch/tasking.c:3246 + msgid "max queue_size for EVENT/BUFFER is not positive" + msgstr "" + + #: ch/timing.c:224 + msgid "absolute time value must be of mode TIME" + msgstr "" + + #: ch/timing.c:281 ch/timing.c:364 + msgid "duration primitive value must be of mode DURATION" + msgstr "" + + #: ch/tree.c:58 + msgid "string length > UPPER (UINT)" + msgstr "" + + #: ch/tree.c:112 + msgid "can only build a powerset from a discrete mode" + msgstr "" + + #: ch/tree.c:124 + msgid "non-constant bitstring size invalid" + msgstr "" + + #: ch/tree.c:126 + msgid "non-constant powerset size invalid" + msgstr "" + + #: ch/typeck.c:83 + msgid "array or string index is a mode (instead of a value)" + msgstr "" + + #: ch/typeck.c:114 + msgid "index is not an integer expression" + msgstr "" + + #: ch/typeck.c:122 + msgid "index not compatible with index mode" + msgstr "" + + #. should never happen + #: ch/typeck.c:132 + msgid "index is not discrete" + msgstr "" + + #: ch/typeck.c:196 + msgid "possible internal error - slice argument is neither referable nor constant" + msgstr "" + + #: ch/typeck.c:285 + msgid "bit array slice with non-constant length" + msgstr "" + + #: ch/typeck.c:325 + msgid "bitstring slice with non-constant length" + msgstr "" + + #: ch/typeck.c:338 + msgid "slice operation on non-array, non-bitstring value not supported" + msgstr "" + + #: ch/typeck.c:390 ch/typeck.c:441 + msgid "can only take slice of array or string" + msgstr "" + + #: ch/typeck.c:455 + msgid "slice length is not an integer" + msgstr "" + + #: ch/typeck.c:488 + #, fuzzy + msgid "slice length out-of-range" + msgstr "ó÷åôéêÞ èÝóç áñ÷åßïõ åßíáé åêôüò ïñßùí" + + #: ch/typeck.c:543 + #, fuzzy + msgid "too many index expressions" + msgstr "õðåñâïëéêÜ ðïëëÜ äåõôåñüëåðôá áíáðÞäçóçò" + + #: ch/typeck.c:595 + msgid "array index is not discrete" + msgstr "" + + #: ch/typeck.c:675 + msgid "invalid compound index for bitstring mode" + msgstr "" + + #: ch/typeck.c:1079 + msgid "conversions from variable_size value" + msgstr "" + + #: ch/typeck.c:1084 + msgid "conversions to variable_size mode" + msgstr "" + + #: ch/typeck.c:1098 + #, fuzzy + msgid "cannot convert to float" + msgstr "áäýíáôç ç ìåôáôñïðÞ ôïõ U+%04X óôï ôïðéêü óýíïëï ÷áñáêôÞñùí" + + #: ch/typeck.c:1103 + #, fuzzy + msgid "cannot convert float to this mode" + msgstr "yp_update: áäõíáìßá ìåôáôñïðÞò ïíüìáôïò óõóôÞìáôïò óå üíïìá äéêôýïõ\n" + + #: ch/typeck.c:1130 + msgid "OVERFLOW in expression conversion" + msgstr "" + + #: ch/typeck.c:1159 + msgid "overflow (not inside function)" + msgstr "" + + #: ch/typeck.c:1161 + msgid "possible overflow (not inside function)" + msgstr "" + + #: ch/typeck.c:1166 + msgid "expression will always cause OVERFLOW" + msgstr "" + + #: ch/typeck.c:1199 + msgid "not implemented: constant conversion from that kind of expression" + msgstr "" + + #: ch/typeck.c:1205 + msgid "not implemented: constant conversion to that kind of mode" + msgstr "" + + #: ch/typeck.c:1216 + msgid "non-standard, non-portable value conversion" + msgstr "" + + #: ch/typeck.c:1222 + msgid "location conversion between differently-sized modes" + msgstr "" + + #: ch/typeck.c:1224 + msgid "unsupported value conversion" + msgstr "" + + #: ch/typeck.c:1272 + msgid "operand to bin must be a non-negative integer literal" + msgstr "" + + #: ch/typeck.c:1288 + #, c-format + msgid "size %d of BIN too big - no such integer mode" + msgstr "" + + #: ch/typeck.c:1302 + msgid "BIN in pass 2" + msgstr "" + + #: ch/typeck.c:1335 + msgid "mode of tuple is neither ARRAY, STRUCT, nor POWERSET" + msgstr "" + + #: ch/typeck.c:2108 + #, fuzzy + msgid "internal error in chill_root_resulting_mode" + msgstr "åóùôåñéêü óöÜëìá óôï %s, ãñáììÞ %u" + + #: ch/typeck.c:2367 + msgid "string lengths not equal" + msgstr "" + + #: ch/typeck.c:2382 + msgid "can't do ARRAY assignment - too large" + msgstr "" + + #: ch/typeck.c:2400 + msgid "rhs of array assignment is not addressable" + msgstr "" + + #: ch/typeck.c:2577 + msgid "non-constant expression for BIN" + msgstr "" + + #: ch/typeck.c:2582 + msgid "expression for BIN must not be negative" + msgstr "" + + #: ch/typeck.c:2587 + #, fuzzy + msgid "cannot process BIN (>32)" + msgstr "Äåí åßíáé äõíáôüí íá âñåèåß ï ôýðïò ôïõ åðåîåñãáóôÞ." + + #: ch/typeck.c:2603 + msgid "bounds of range are not compatible" + msgstr "" + + #: ch/typeck.c:2612 + #, fuzzy + msgid "negative string length" + msgstr "åëÜ÷éóôï ìÝãåèïò áëöáñéèìçôéêïý" + + #: ch/typeck.c:2649 + msgid "range's lower bound and parent mode don't match" + msgstr "" + + #: ch/typeck.c:2654 + msgid "range's upper bound and parent mode don't match" + msgstr "" + + #: ch/typeck.c:2663 + msgid "making range from non-mode" + msgstr "" + + #: ch/typeck.c:2669 + #, fuzzy + msgid "floating point ranges" + msgstr "Ç ðáñÜìåôñïò êéíçôÞò õðïäéáóôïëÞò äåí åßíáé Ýãêõñç: %s" + + #: ch/typeck.c:2677 + msgid "range mode has non-constant limits" + msgstr "" + + #: ch/typeck.c:2686 + msgid "range's high bound < mode's low bound" + msgstr "" + + #: ch/typeck.c:2691 + msgid "range's high bound > mode's high bound" + msgstr "" + + #: ch/typeck.c:2696 + msgid "range mode high bound < range mode low bound" + msgstr "" + + #: ch/typeck.c:2701 + msgid "range's low bound < mode's low bound" + msgstr "" + + #: ch/typeck.c:2706 + msgid "range's low bound > mode's high bound" + msgstr "" + + #: ch/typeck.c:2814 + msgid "stepsize in STEP must be an integer constant" + msgstr "" + + #: ch/typeck.c:2818 + msgid "stepsize in STEP must be > 0" + msgstr "" + + #: ch/typeck.c:2824 + msgid "stepsize in STEP must be the natural width of the array element mode" + msgstr "" + + #: ch/typeck.c:2830 ch/typeck.c:3131 + #, fuzzy + msgid "starting word in POS must be an integer constant" + msgstr "ç ôéìÞ ãéá ôï %s ðñÝðåé íá åßíáé áêÝñáéïò" + + #: ch/typeck.c:2834 ch/typeck.c:3138 + msgid "starting word in POS must be >= 0" + msgstr "" + + #: ch/typeck.c:2836 + msgid "starting word in POS within STEP must be 0" + msgstr "" + + #: ch/typeck.c:2848 ch/typeck.c:3155 + msgid "starting bit in POS must be an integer constant" + msgstr "" + + #: ch/typeck.c:2854 + msgid "starting bit in POS within STEP must be 0" + msgstr "" + + #: ch/typeck.c:2858 ch/typeck.c:3163 + msgid "starting bit in POS must be >= 0" + msgstr "" + + #: ch/typeck.c:2866 ch/typeck.c:3171 + msgid "starting bit in POS must be < the width of a word" + msgstr "" + + #: ch/typeck.c:2880 ch/typeck.c:3185 + #, fuzzy + msgid "length in POS must be an integer constant" + msgstr "ç ôéìÞ ãéá ôï %s ðñÝðåé íá åßíáé áêÝñáéïò" + + #: ch/typeck.c:2887 ch/typeck.c:3192 + msgid "length in POS must be > 0" + msgstr "" + + #: ch/typeck.c:2894 ch/typeck.c:3205 + #, fuzzy + msgid "end bit in POS must be an integer constant" + msgstr "ç ôéìÞ ãéá ôï %s ðñÝðåé íá åßíáé áêÝñáéïò" + + #: ch/typeck.c:2903 ch/typeck.c:3214 + msgid "end bit in POS must be >= the start bit" + msgstr "" + + #: ch/typeck.c:2909 ch/typeck.c:3219 + msgid "end bit in POS must be < the width of a word" + msgstr "" + + #: ch/typeck.c:2921 + msgid "the length specified on POS within STEP must be the natural length of the array element type" + msgstr "" + + #: ch/typeck.c:2926 + msgid "step size in STEP must be >= the length in POS" + msgstr "" + + #: ch/typeck.c:2952 + msgid "array index must be a range, not a single integer" + msgstr "" + + #: ch/typeck.c:2958 + msgid "array index is not a discrete mode" + msgstr "" + + #: ch/typeck.c:3229 + msgid "the length specified on POS must be the natural length of the field type" + msgstr "" + + #: ch/typeck.c:3238 + msgid "STRUCT fields must be layed out in monotonically increasing order" + msgstr "" + + #: ch/typeck.c:3301 + msgid "if one field has a POS layout, then all fields must have a POS layout" + msgstr "" + + #: ch/typeck.c:3444 + msgid "parameterized structures not implemented" + msgstr "" + + #: ch/typeck.c:3449 + #, fuzzy + msgid "invalid parameterized type" + msgstr "%s: ìç Ýãêõñï åßäïò áñ÷åßïõ" + + #: cp/call.c:270 cp/init.c:1637 + msgid "qualified type `%T' does not match destructor name `~%T'" + msgstr "" + + #: cp/call.c:279 + msgid "type of `%E' does not match destructor type `%T' (type was `%T')" + msgstr "" + + #: cp/call.c:288 + msgid "`%D' is a namespace" + msgstr "" + + #: cp/call.c:296 + msgid "base object `%E' of scoped method call is of non-aggregate type `%T'" + msgstr "" + + #: cp/call.c:394 + msgid "unable to call pointer to member function here" + msgstr "" + + #: cp/call.c:527 + msgid "destructors take no parameters" + msgstr "" + + #: cp/call.c:534 + msgid "destructor name `~%T' does not match type `%T' of expression" + msgstr "" + + #: cp/call.c:2343 + msgid "%s %D(%T, %T, %T) " + msgstr "" + + #: cp/call.c:2348 + msgid "%s %D(%T, %T) " + msgstr "" + + #: cp/call.c:2352 + msgid "%s %D(%T) " + msgstr "" + + #: cp/call.c:2356 + msgid "%s %T " + msgstr "" + + #: cp/call.c:2358 + msgid "%s %+#D%s" + msgstr "" + + #: cp/call.c:2515 + msgid "no viable candidates" + msgstr "" + + #: cp/call.c:2529 + #, fuzzy + msgid "conversion from `%T' to `%T' is ambiguous" + msgstr "ç ìåôáôñïðÞ áðü `%s' óå `%s' äåí õðïóôçñßæåôå" + + #: cp/call.c:2646 + msgid "no matching function for call to `%D(%A)'" + msgstr "" + + #: cp/call.c:2657 cp/call.c:4642 + msgid "call of overloaded `%D(%A)' is ambiguous" + msgstr "" + + #. It's no good looking for an overloaded operator() on a + #. pointer-to-member-function. + #: cp/call.c:2684 + #, c-format + msgid "pointer-to-member function %E cannot be called without an object; consider using .* or ->*" + msgstr "" + + #: cp/call.c:2753 + msgid "no match for call to `(%T) (%A)'" + msgstr "" + + # src/getopt.c:813 + # src/getopt.c:813 + #: cp/call.c:2763 + #, fuzzy + msgid "call of `(%T) (%A)' is ambiguous" + msgstr "%s: ç åðéëïãÞ `-W %s' åßíáé äéöïñïýìåíç\n" + + #: cp/call.c:2798 + msgid "%s for `%T ? %T : %T' operator" + msgstr "" + + #: cp/call.c:2803 + msgid "%s for `%T %s' operator" + msgstr "" + + #: cp/call.c:2806 + msgid "%s for `%T [%T]' operator" + msgstr "" + + #: cp/call.c:2811 + msgid "%s for `%T %s %T' operator" + msgstr "" + + #: cp/call.c:2814 + msgid "%s for `%s %T' operator" + msgstr "" + + #: cp/call.c:2906 + msgid "ISO C++ forbids omitting the middle term of a ?: expression" + msgstr "" + + #: cp/call.c:2965 + #, c-format + msgid "`%E' has type `void' and is not a throw-expression" + msgstr "" + + #: cp/call.c:2998 cp/call.c:3198 + msgid "operands to ?: have different types" + msgstr "" + + #: cp/call.c:3151 + msgid "enumeral mismatch in conditional expression: `%T' vs `%T'" + msgstr "" + + #: cp/call.c:3158 + msgid "enumeral and non-enumeral type in conditional expression" + msgstr "" + + #: cp/call.c:3239 + msgid "`%D' must be declared before use" + msgstr "" + + #: cp/call.c:3402 + msgid "no `%D(int)' declared for postfix `%s', trying prefix operator instead" + msgstr "" + + #: cp/call.c:3449 + msgid "using synthesized `%#D' for copy assignment" + msgstr "" + + #: cp/call.c:3451 + msgid " where cfront would use `%#D'" + msgstr "" + + #: cp/call.c:3478 + msgid "comparison between `%#T' and `%#T'" + msgstr "" + + #: cp/call.c:3711 + msgid "no suitable `operator delete' for `%T'" + msgstr "" + + #: cp/call.c:3730 + msgid "`%+#D' is private" + msgstr "" + + #: cp/call.c:3732 + msgid "`%+#D' is protected" + msgstr "" + + #: cp/call.c:3734 + #, fuzzy + msgid "`%+#D' is inaccessible" + msgstr "ôï `%s' åßíáé ìç-ðñïóðåëÜóéìï" + + #: cp/call.c:3735 + msgid "within this context" + msgstr "" + + #: cp/call.c:3777 + #, fuzzy + msgid "invalid conversion from `%T' to `%T'" + msgstr "ç ìåôáôñïðÞ áðü `%s' óå `%s' äåí õðïóôçñßæåôå" + + #: cp/call.c:3779 cp/call.c:3918 cp/call.c:3920 + #, fuzzy + msgid " initializing argument %P of `%D'" + msgstr "Ìç Ýãêõñç áêÝñáéá ðáñÜìåôñïò `%s'" + + #: cp/call.c:3842 cp/call.c:3846 + msgid " initializing argument %P of `%D' from result of `%D'" + msgstr "" + + #: cp/call.c:3852 cp/call.c:3855 + msgid " initializing temporary from result of `%D'" + msgstr "" + + #. Undefined behaviour [expr.call] 5.2.2/7. + #: cp/call.c:3989 + msgid "cannot pass objects of non-POD type `%#T' through `...'" + msgstr "" + + #. Undefined behaviour [expr.call] 5.2.2/7. + #: cp/call.c:4014 + msgid "cannot receive objects of non-POD type `%#T' through `...'" + msgstr "" + + #: cp/call.c:4156 + msgid "passing `%T' as `this' argument of `%#D' discards qualifiers" + msgstr "" + + #: cp/call.c:4404 + msgid "could not find class$ field in java interface type `%T'" + msgstr "" + + #: cp/call.c:4505 cp/typeck.c:2071 + msgid "request for member `%D' in `%E', which is of non-aggregate type `%T'" + msgstr "" + + #: cp/call.c:4631 + msgid "no matching function for call to `%T::%D(%A)%#V'" + msgstr "" + + #: cp/call.c:4655 + msgid "abstract virtual `%#D' called from constructor" + msgstr "" + + #: cp/call.c:4656 + msgid "abstract virtual `%#D' called from destructor" + msgstr "" + + #: cp/call.c:4661 + msgid "cannot call member function `%D' without object" + msgstr "" + + #: cp/call.c:5274 + msgid "passing `%T' chooses `%T' over `%T'" + msgstr "" + + #: cp/call.c:5276 cp/decl2.c:4496 + #, fuzzy + msgid " in call to `%D'" + msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'" + + #: cp/call.c:5325 cp/call.c:5450 + msgid "choosing `%D' over `%D'" + msgstr "" + + #: cp/call.c:5326 + #, fuzzy + msgid " for conversion from `%T' to `%T'" + msgstr "ç ìåôáôñïðÞ áðü `%s' óå `%s' äåí õðïóôçñßæåôå" + + #: cp/call.c:5328 + msgid " because conversion sequence for the argument is better" + msgstr "" + + #: cp/call.c:5452 + msgid " because worst conversion for the former is better than worst conversion for the latter" + msgstr "" + + #: cp/call.c:5568 cp/call.c:5589 + #, fuzzy + msgid "could not convert `%E' to `%T'" + msgstr "äåí åßíáé äõíáôü íá äçìéïõñãçèåß ôï %s `%s' óôï `%s'" + + #: cp/class.c:286 + msgid "cannot convert from base `%T' to derived type `%T' via virtual base `%T'" + msgstr "" + + #: cp/class.c:1012 + msgid "`%#D' and `%#D' cannot be overloaded" + msgstr "" + + #. There has already been a declaration of this method + #. or member template. + #: cp/class.c:1023 + msgid "`%D' has already been declared in `%T'" + msgstr "" + + #: cp/class.c:1104 + #, fuzzy + msgid "duplicate enum value `%D'" + msgstr "äéðëü üíïìá ÷áñáêôÞñá `%s'" + + #: cp/class.c:1107 + msgid "duplicate field `%D' (as enum and non-enum)" + msgstr "" + + #: cp/class.c:1114 + #, fuzzy + msgid "duplicate nested type `%D'" + msgstr "äéðëü üíïìá ÷áñáêôÞñá `%s'" + + #: cp/class.c:1125 + msgid "duplicate field `%D' (as type and non-type)" + msgstr "" + + #: cp/class.c:1129 + #, fuzzy + msgid "duplicate member `%D'" + msgstr "äéðëüò áñéèìüò ìçíýìáôïò" + + #: cp/class.c:1172 + msgid "conflicting access specifications for method `%D', ignored" + msgstr "" + + #: cp/class.c:1174 + #, c-format + msgid "conflicting access specifications for field `%s', ignored" + msgstr "" + + #: cp/class.c:1217 + msgid "`%D' names constructor" + msgstr "" + + #: cp/class.c:1223 + #, fuzzy + msgid "`%D' invalid in `%T'" + msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'" + + #: cp/class.c:1231 + msgid "no members matching `%D' in `%#T'" + msgstr "" + + #: cp/class.c:1263 cp/class.c:1271 + #, fuzzy + msgid "`%D' invalid in `%#T'" + msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'" + + #: cp/class.c:1264 + msgid " because of local method `%#D' with same name" + msgstr "" + + #: cp/class.c:1272 + msgid " because of local member `%#D' with same name" + msgstr "" + + #: cp/class.c:1344 + msgid "base class `%#T' has a non-virtual destructor" + msgstr "" + + #: cp/class.c:1364 + msgid "base `%T' with only non-default constructor in class without a constructor" + msgstr "" + + #: cp/class.c:1950 + msgid "all member functions in class `%T' are private" + msgstr "" + + #: cp/class.c:1964 + msgid "`%#T' only defines a private destructor and has no friends" + msgstr "" + + #: cp/class.c:2007 + msgid "`%#T' only defines private constructors and has no friends" + msgstr "" + + #: cp/class.c:2128 cp/class.c:5045 + #, fuzzy + msgid "redefinition of `%#T'" + msgstr "êáíÝíáò ïñéóìüò ôïõ `UNDEFINED'" + + #: cp/class.c:2129 + #, fuzzy + msgid "previous definition of `%#T'" + msgstr "êáíÝíáò ïñéóìüò ôïõ `UNDEFINED'" + + #: cp/class.c:2459 + msgid "no unique final overrider for `%D' in `%T'" + msgstr "" + + #. Here we know it is a hider, and no overrider exists. + #: cp/class.c:2841 + msgid "`%D' was hidden" + msgstr "" + + #: cp/class.c:2842 + msgid " by `%D'" + msgstr "" + + #: cp/class.c:2884 + msgid "ISO C++ forbids member `%D' with same name as enclosing class" + msgstr "" + + #: cp/class.c:2889 cp/decl2.c:1898 + msgid "`%#D' invalid; an anonymous union can only have non-static data members" + msgstr "" + + #: cp/class.c:2895 cp/decl2.c:1904 + msgid "private member `%#D' in anonymous union" + msgstr "" + + #: cp/class.c:2898 cp/decl2.c:1906 + msgid "protected member `%#D' in anonymous union" + msgstr "" + + #: cp/class.c:3050 + msgid "bit-field `%#D' with non-integral type" + msgstr "" + + #: cp/class.c:3070 + msgid "bit-field `%D' width not an integer constant" + msgstr "" + + #: cp/class.c:3076 + #, fuzzy + msgid "negative width in bit-field `%D'" + msgstr "Áñíçôéêü ðëÜôïò óôçí áðïôßìçóç" + + #: cp/class.c:3081 + msgid "zero width for bit-field `%D'" + msgstr "" + + #: cp/class.c:3087 + msgid "width of `%D' exceeds its type" + msgstr "" + + #: cp/class.c:3096 + msgid "`%D' is too small to hold all values of `%#T'" + msgstr "" + + #: cp/class.c:3179 + msgid "member `%#D' with constructor not allowed in union" + msgstr "" + + #: cp/class.c:3182 + msgid "member `%#D' with destructor not allowed in union" + msgstr "" + + #: cp/class.c:3185 + msgid "member `%#D' with copy assignment operator not allowed in union" + msgstr "" + + #: cp/class.c:3212 + msgid "multiple fields in union `%T' initialized" + msgstr "" + + #: cp/class.c:3333 + msgid "field `%D' in local class cannot be static" + msgstr "" + + #: cp/class.c:3339 + msgid "field `%D' invalidly declared function type" + msgstr "" + + #: cp/class.c:3346 + msgid "field `%D' invalidly declared method type" + msgstr "" + + #: cp/class.c:3352 + msgid "field `%D' invalidly declared offset type" + msgstr "" + + #. Unions cannot have static members. + #: cp/class.c:3370 + msgid "field `%D' declared static in union" + msgstr "" + + #: cp/class.c:3396 + msgid "non-static reference `%#D' in class without a constructor" + msgstr "" + + #: cp/class.c:3427 + msgid "non-static const member `%#D' in class without a constructor" + msgstr "" + + #: cp/class.c:3442 + #, fuzzy + msgid "field `%#D' with same name as class" + msgstr "ÕðÜñ÷åé áíôéêåßìåíï ìå ôï ßäéï üíïìá" + + #: cp/class.c:3460 + msgid "`%#T' has pointer data members" + msgstr "" + + #: cp/class.c:3464 + msgid " but does not override `%T(const %T&)'" + msgstr "" + + #: cp/class.c:3466 + msgid " or `operator=(const %T&)'" + msgstr "" + + #: cp/class.c:3469 + msgid " but does not override `operator=(const %T&)'" + msgstr "" + + #: cp/class.c:3937 + msgid "initializer specified for non-virtual method `%D'" + msgstr "" + + #: cp/class.c:4721 + msgid "virtual base `%T' inaccessible in `%T' due to ambiguity" + msgstr "" + + #: cp/class.c:4791 + msgid "direct base `%T' inaccessible in `%T' due to ambiguity" + msgstr "" + + #: cp/class.c:5208 + msgid "`%#T' has virtual functions but non-virtual destructor" + msgstr "" + + #: cp/class.c:5292 + msgid "trying to finish struct, but kicked out due to previous parse errors" + msgstr "" + + #: cp/class.c:5749 + #, c-format + msgid "language string `\"%s\"' not recognized" + msgstr "" + + #: cp/class.c:5845 + msgid "cannot resolve overloaded function `%D' based on conversion to type `%T'" + msgstr "" + + #: cp/class.c:5966 + msgid "no matches converting function `%D' to type `%#T'" + msgstr "" + + #: cp/class.c:5989 + msgid "converting overloaded function `%D' to type `%#T' is ambiguous" + msgstr "" + + #: cp/class.c:6015 + msgid "assuming pointer to member `%D'" + msgstr "" + + #: cp/class.c:6018 + #, c-format + msgid "(a pointer to member can only be formed with `&%E')" + msgstr "" + + #: cp/class.c:6062 cp/class.c:6230 cp/class.c:6237 + #, fuzzy + msgid "not enough type information" + msgstr "åìöÜíéóç ðëçñïöïñéþí ðñïüäïõ" + + #: cp/class.c:6071 + msgid "argument of type `%T' does not match `%T'" + msgstr "" + + #: cp/class.c:6214 + msgid "invalid operation on uninstantiated type" + msgstr "" + + #. [basic.scope.class] + #. + #. A name N used in a class S shall refer to the same declaration + #. in its context and when re-evaluated in the completed scope of + #. S. + #: cp/class.c:6465 cp/decl.c:1030 cp/decl.c:3178 cp/pt.c:1839 + #, fuzzy + msgid "declaration of `%#D'" + msgstr "äçìéïõñãßá áñ÷åßïõ `%s'\n" + + #: cp/class.c:6466 + msgid "changes meaning of `%D' from `%+#D'" + msgstr "" + + #: cp/cvt.c:88 + msgid "can't convert from incomplete type `%T' to `%T'" + msgstr "" + + #: cp/cvt.c:97 + #, fuzzy + msgid "conversion of `%E' from `%T' to `%T' is ambiguous" + msgstr "ç ìåôáôñïðÞ áðü `%s' óå `%s' äåí õðïóôçñßæåôå" + + #: cp/cvt.c:126 + #, fuzzy + msgid "converting from `%T' to `%T'" + msgstr "ç ìåôáôñïðÞ áðü `%s' óå `%s' äåí õðïóôçñßæåôå" + + #: cp/cvt.c:198 cp/cvt.c:202 + msgid "pointer to member cast from `%T' to `%T' is via virtual base" + msgstr "" + + #: cp/cvt.c:220 cp/cvt.c:233 cp/cvt.c:272 + #, fuzzy + msgid "cannot convert `%E' from type `%T' to type `%T'" + msgstr "äåí åßíáé äõíáôü íá äçìéïõñãçèåß ôï %s `%s' óôï `%s'" + + #: cp/cvt.c:525 + #, fuzzy + msgid "conversion from `%T' to `%T' discards qualifiers" + msgstr "ç ìåôáôñïðÞ áðü `%s' óå `%s' äåí õðïóôçñßæåôå" + + #: cp/cvt.c:543 + msgid "casting `%T' to `%T' does not dereference pointer" + msgstr "" + + #: cp/cvt.c:572 + #, fuzzy + msgid "cannot convert type `%T' to type `%T'" + msgstr "äåí åßíáé äõíáôü íá äçìéïõñãçèåß ôï %s `%s' óôï `%s'" + + #: cp/cvt.c:689 + #, fuzzy + msgid "conversion from `%#T' to `%#T'" + msgstr "ç ìåôáôñïðÞ áðü `%s' óå `%s' äåí õðïóôçñßæåôå" + + #: cp/cvt.c:701 + msgid "`%#T' used where a `%T' was expected" + msgstr "" + + #: cp/cvt.c:718 + msgid "the address of `%D', will always be `true'" + msgstr "" + + #: cp/cvt.c:738 + msgid "`%#T' used where a floating point value was expected" + msgstr "" + + #: cp/cvt.c:793 + #, fuzzy + msgid "conversion from `%T' to non-scalar type `%T' requested" + msgstr "ç ìåôáôñïðÞ áðü `%s' óå `%s' äåí õðïóôçñßæåôå" + + #: cp/cvt.c:878 + msgid "object of incomplete type `%T' will not be accessed in %s" + msgstr "" + + #: cp/cvt.c:881 + msgid "object of type `%T' will not be accessed in %s" + msgstr "" + + #: cp/cvt.c:897 + msgid "object `%E' of incomplete type `%T' will not be accessed in %s" + msgstr "" + + #. [over.over] enumerates the places where we can take the address + #. of an overloaded function, and this is not one of them. + #: cp/cvt.c:917 + #, c-format + msgid "%s cannot resolve address of overloaded function" + msgstr "" + + #. Only warn when there is no &. + #: cp/cvt.c:922 + #, c-format + msgid "%s is a reference, not call, to function `%E'" + msgstr "" + + #: cp/cvt.c:1060 + msgid "converting NULL to non-pointer type" + msgstr "" + + #: cp/cvt.c:1136 + msgid "ambiguous default type conversion from `%T'" + msgstr "" + + #: cp/cvt.c:1138 + msgid " candidate conversions include `%D' and `%D'" + msgstr "" + + #: cp/decl.c:1031 cp/decl.c:3278 + msgid "conflicts with previous declaration `%#D'" + msgstr "" + + #: cp/decl.c:1220 + msgid "label `%D' used but not defined" + msgstr "" + + #: cp/decl.c:1225 + msgid "label `%D' defined but not used" + msgstr "" + + #: cp/decl.c:2305 + msgid "namespace alias `%D' not allowed here, assuming `%D'" + msgstr "" + + #: cp/decl.c:3088 cp/decl.c:3476 + msgid "previous declaration of `%D'" + msgstr "" + + #: cp/decl.c:3165 cp/decl.c:3200 + msgid "shadowing %s function `%#D'" + msgstr "" + + #: cp/decl.c:3174 + msgid "library function `%#D' redeclared as non-function `%#D'" + msgstr "" + + #: cp/decl.c:3179 + msgid "conflicts with built-in declaration `%#D'" + msgstr "" + + #: cp/decl.c:3195 cp/decl.c:3288 cp/decl.c:3304 + msgid "new declaration `%#D'" + msgstr "" + + #: cp/decl.c:3196 + msgid "ambiguates built-in declaration `%#D'" + msgstr "" + + #: cp/decl.c:3252 + msgid "`%#D' redeclared as different kind of symbol" + msgstr "" + + #: cp/decl.c:3255 + msgid "previous declaration of `%#D'" + msgstr "" + + #: cp/decl.c:3277 + msgid "declaration of template `%#D'" + msgstr "" + + #: cp/decl.c:3289 cp/decl.c:3305 + msgid "ambiguates old declaration `%#D'" + msgstr "" + + #: cp/decl.c:3297 + msgid "declaration of C function `%#D' conflicts with" + msgstr "" + + #: cp/decl.c:3299 + msgid "previous declaration `%#D' here" + msgstr "" + + #: cp/decl.c:3315 + msgid "conflicting types for `%#D'" + msgstr "" + + #: cp/decl.c:3316 + msgid "previous declaration as `%#D'" + msgstr "" + + #: cp/decl.c:3359 + msgid "`%#D' previously defined here" + msgstr "" + + #: cp/decl.c:3360 + #, fuzzy + msgid "`%#D' previously declared here" + msgstr "Äåí õðÜñ÷åé ðñïçãïýìåíç êáíïíéêÞ Ýêöñáóç" + + #. Prototype decl follows defn w/o prototype. + #: cp/decl.c:3368 + msgid "prototype for `%#D'" + msgstr "" + + #: cp/decl.c:3369 + msgid "follows non-prototype definition here" + msgstr "" + + #: cp/decl.c:3381 + msgid "previous declaration of `%#D' with %L linkage" + msgstr "" + + #: cp/decl.c:3383 + msgid "conflicts with new declaration with %L linkage" + msgstr "" + + #: cp/decl.c:3408 cp/decl.c:3416 + msgid "default argument given for parameter %d of `%#D'" + msgstr "" + + #: cp/decl.c:3410 cp/decl.c:3418 + #, fuzzy + msgid "after previous specification in `%#D'" + msgstr "%s: Ìç Ýãêõñç ñýèìéóç `%s'.\n" + + #: cp/decl.c:3427 + msgid "`%#D' was used before it was declared inline" + msgstr "" + + #: cp/decl.c:3429 + msgid "previous non-inline declaration here" + msgstr "" + + #: cp/decl.c:3475 + msgid "redundant redeclaration of `%D' in same scope" + msgstr "" + + #: cp/decl.c:3558 + msgid "declaration of `%F' throws different exceptions" + msgstr "" + + #: cp/decl.c:3560 + msgid "than previous declaration `%F'" + msgstr "" + + #. From [temp.expl.spec]: + #. + #. If a template, a member template or the member of a class + #. template is explicitly specialized then that + #. specialization shall be declared before the first use of + #. that specialization that would cause an implicit + #. instantiation to take place, in every translation unit in + #. which such a use occurs. + #: cp/decl.c:3685 + msgid "explicit specialization of %D after first use" + msgstr "" + + #: cp/decl.c:3930 + msgid "`%#D' used prior to declaration" + msgstr "" + + #: cp/decl.c:3961 + msgid "redeclaration of `wchar_t' as `%T'" + msgstr "" + + #. A redeclaration of main, but not a duplicate of the + #. previous one. + #. + #. [basic.start.main] + #. + #. This function shall not be overloaded. + #: cp/decl.c:3989 + #, fuzzy + msgid "invalid redeclaration of `%D'" + msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'" + + #: cp/decl.c:3990 + msgid "as `%D'" + msgstr "" + + #: cp/decl.c:4080 + msgid "previous external decl of `%#D'" + msgstr "" + + #: cp/decl.c:4121 + msgid "`%D' was previously implicitly declared to return `int'" + msgstr "" + + #: cp/decl.c:4181 + msgid "extern declaration of `%#D' doesn't match" + msgstr "" + + #: cp/decl.c:4182 + msgid "global declaration `%#D'" + msgstr "" + + #: cp/decl.c:4213 + msgid "declaration of `%#D' shadows a parameter" + msgstr "" + + #: cp/decl.c:4233 + #, c-format + msgid "declaration of `%s' shadows a member of `this'" + msgstr "" + + #: cp/decl.c:4598 + #, fuzzy + msgid "`%#D' hides constructor for `%#T'" + msgstr "ôï `%s' åßíáé ðñüãïíïò ôïõ `%s'" + + #: cp/decl.c:4613 + msgid "`%#D' conflicts with previous using declaration `%#D'" + msgstr "" + + #: cp/decl.c:4625 + msgid "previous non-function declaration `%#D'" + msgstr "" + + #: cp/decl.c:4626 + msgid "conflicts with function declaration `%#D'" + msgstr "" + + #: cp/decl.c:4716 + msgid "implicit declaration of function `%#D'" + msgstr "áõôïíüçôç äéáêýñçîç ôçò óõíÜñôçóçò `%#D'" + + #: cp/decl.c:4874 + #, c-format + msgid "label `%s' referenced outside of any function" + msgstr "" + + #: cp/decl.c:4977 cp/decl.c:5001 cp/decl.c:5094 + msgid "jump to label `%D'" + msgstr "" + + #: cp/decl.c:4979 cp/decl.c:5003 + msgid "jump to case label" + msgstr "" + + #: cp/decl.c:4987 + msgid " crosses initialization of `%#D'" + msgstr "" + + #: cp/decl.c:4990 cp/decl.c:5110 + msgid " enters scope of non-POD `%#D'" + msgstr "" + + #: cp/decl.c:5010 cp/decl.c:5114 + msgid " enters try block" + msgstr "" + + #. Can't skip init of __exception_info. + #: cp/decl.c:5012 cp/decl.c:5106 cp/decl.c:5116 + msgid " enters catch block" + msgstr "" + + #: cp/decl.c:5095 + msgid " from here" + msgstr "" + + #: cp/decl.c:5108 + msgid " skips initialization of `%#D'" + msgstr "" + + #: cp/decl.c:5143 + msgid "label named wchar_t" + msgstr "" + + #: cp/decl.c:5147 + #, fuzzy + msgid "duplicate label `%D'" + msgstr "äéðëü êëåéäß" + + #: cp/decl.c:5232 + #, c-format + msgid "case label `%E' not within a switch statement" + msgstr "" + + #. Definition isn't the kind we were looking for. + #: cp/decl.c:5365 cp/decl.c:5385 + msgid "`%#D' redeclared as %C" + msgstr "" + + #. This happens for A::B where B is a template, and there are no + #. template arguments. + #: cp/decl.c:5474 cp/typeck.c:2033 + #, fuzzy + msgid "invalid use of `%D'" + msgstr "Ìç Ýãêõñç çìåñïìçíßá `%s'." + + #: cp/decl.c:5515 + #, fuzzy + msgid "`%D::%D' is not a template" + msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï" + + #: cp/decl.c:5527 + msgid "`%D' undeclared in namespace `%D'" + msgstr "" + + #: cp/decl.c:5661 + msgid "`%D' used without template parameters" + msgstr "" + + #: cp/decl.c:5672 cp/decl.c:5688 cp/decl.c:5759 + msgid "no class template named `%#T' in `%#T'" + msgstr "" + + #: cp/decl.c:5706 cp/decl.c:5721 + msgid "no type named `%#T' in `%#T'" + msgstr "" + + #: cp/decl.c:5938 + msgid "lookup of `%D' finds `%#D'" + msgstr "" + + #: cp/decl.c:5940 + msgid " instead of `%D' from dependent base class" + msgstr "" + + #: cp/decl.c:5942 + msgid " (use `typename %T::%D' if that's what you meant)" + msgstr "" + + #: cp/decl.c:6115 + msgid "lookup of `%D' in the scope of `%#T' (`%#D') does not match lookup in the current scope (`%#D')" + msgstr "" + + #: cp/decl.c:6938 + msgid "an anonymous union cannot have function members" + msgstr "" + + #: cp/decl.c:6955 + msgid "member %#D' with constructor not allowed in anonymous aggregate" + msgstr "" + + #: cp/decl.c:6958 + msgid "member %#D' with destructor not allowed in anonymous aggregate" + msgstr "" + + #: cp/decl.c:6961 + msgid "member %#D' with copy assignment operator not allowed in anonymous aggregate" + msgstr "" + + #: cp/decl.c:6999 + msgid "redeclaration of C++ built-in type `%T'" + msgstr "" + + #: cp/decl.c:7034 + msgid "multiple types in one declaration" + msgstr "" + + #: cp/decl.c:7037 + msgid "declaration does not declare anything" + msgstr "" + + #: cp/decl.c:7061 + msgid "missing type-name in typedef-declaration" + msgstr "" + + #: cp/decl.c:7068 + msgid "ISO C++ prohibits anonymous structs" + msgstr "" + + #: cp/decl.c:7075 + msgid "`%D' can only be specified for functions" + msgstr "" + + #: cp/decl.c:7077 + msgid "`%D' can only be specified inside a class" + msgstr "" + + #: cp/decl.c:7079 + msgid "`%D' can only be specified for constructors" + msgstr "" + + #: cp/decl.c:7082 + msgid "`%D' can only be specified for objects and functions" + msgstr "" + + #: cp/decl.c:7226 + msgid "typedef `%D' is initialized" + msgstr "" + + #: cp/decl.c:7232 + msgid "function `%#D' is initialized like a variable" + msgstr "" + + #: cp/decl.c:7244 + msgid "declaration of `%#D' has `extern' and is initialized" + msgstr "" + + #: cp/decl.c:7274 + #, fuzzy + msgid "`%#D' is not a static member of `%#T'" + msgstr "ôï `%s' åßíáé ðñüãïíïò ôïõ `%s'" + + #: cp/decl.c:7279 + msgid "ISO C++ does not permit `%T::%D' to be defined as `%T::%D'" + msgstr "" + + # src/request.c:263 + #: cp/decl.c:7290 + #, fuzzy + msgid "duplicate initialization of %D" + msgstr "Ôï âÞìá áñ÷éêïðïßçóçò áðÝôõ÷å" + + #: cp/decl.c:7319 + msgid "declaration of `%#D' outside of class is not definition" + msgstr "" + + #: cp/decl.c:7367 + msgid "variable `%#D' has initializer but incomplete type" + msgstr "" + + #: cp/decl.c:7375 cp/decl.c:7726 + msgid "elements of array `%#D' have incomplete type" + msgstr "" + + #: cp/decl.c:7391 + msgid "aggregate `%#D' has incomplete type and cannot be initialized" + msgstr "" + + #: cp/decl.c:7430 + msgid "`%D' declared as reference but not initialized" + msgstr "" + + #: cp/decl.c:7439 + msgid "ISO C++ forbids use of initializer list to initialize reference `%D'" + msgstr "" + + #: cp/decl.c:7472 + #, fuzzy + msgid "cannot initialize `%T' from `%T'" + msgstr "äåí åßíáé äõíáôü íá ìåôáíïìáóôåß ôï `.' Þ ôï `..'" + + #: cp/decl.c:7533 + msgid "initializer fails to determine size of `%D'" + msgstr "" + + #: cp/decl.c:7538 + #, fuzzy + msgid "array size missing in `%D'" + msgstr "óöÜëìá êáôÜ ôï êëåßóéìï ôçò åéóüäïõ `%s'" + + #: cp/decl.c:7550 + msgid "zero-size array `%D'" + msgstr "" + + #. An automatic variable with an incomplete type: that is an error. + #. Don't talk about array types here, since we took care of that + #. message in grokdeclarator. + #: cp/decl.c:7583 + msgid "storage size of `%D' isn't known" + msgstr "" + + #: cp/decl.c:7605 + msgid "storage size of `%D' isn't constant" + msgstr "" + + #: cp/decl.c:7656 + msgid "sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)" + msgstr "" + + #: cp/decl.c:7657 + msgid " you can work around this by removing the initializer" + msgstr "" + + #: cp/decl.c:7685 + #, fuzzy + msgid "uninitialized const `%D'" + msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'" + + #: cp/decl.c:7720 + msgid "variable-sized object `%D' may not be initialized" + msgstr "" + + #: cp/decl.c:7731 cp/typeck2.c:201 + msgid "`%D' has incomplete type" + msgstr "" + + #: cp/decl.c:7763 + msgid "`%D' must be initialized by constructor, not by `{...}'" + msgstr "" + + #: cp/decl.c:7793 + msgid "structure `%D' with uninitialized const members" + msgstr "" + + #: cp/decl.c:7795 + msgid "structure `%D' with uninitialized reference members" + msgstr "" + + #: cp/decl.c:8060 + msgid "assignment (not initialization) in declaration" + msgstr "" + + #: cp/decl.c:8070 + msgid "cannot initialize `%D' to namespace `%D'" + msgstr "" + + #: cp/decl.c:8127 + msgid "shadowing previous type declaration of `%#D'" + msgstr "" + + #: cp/decl.c:8526 + msgid "multiple initializations given for `%D'" + msgstr "" + + #: cp/decl.c:8626 + #, fuzzy + msgid "invalid catch parameter" + msgstr "Ìç Ýãêõñïò ÷áñáêôÞñáò ðáñáâïëÞò" + + #: cp/decl.c:8744 + msgid "destructor for alien class `%T' cannot be a member" + msgstr "" + + #: cp/decl.c:8747 + msgid "constructor for alien class `%T' cannot be a member" + msgstr "" + + #: cp/decl.c:8766 + msgid "`%D' declared as a `virtual' %s" + msgstr "" + + #: cp/decl.c:8768 + msgid "`%D' declared as an `inline' %s" + msgstr "" + + #: cp/decl.c:8770 + msgid "`const' and `volatile' function specifiers on `%D' invalid in %s declaration" + msgstr "" + + #: cp/decl.c:8773 + msgid "`%D' declared as a friend" + msgstr "" + + #: cp/decl.c:8779 + msgid "`%D' declared with an exception specification" + msgstr "" + + #: cp/decl.c:8854 + msgid "cannot declare `::main' to be a template" + msgstr "" + + #: cp/decl.c:8856 + msgid "cannot declare `::main' to be inline" + msgstr "" + + #: cp/decl.c:8858 + msgid "cannot declare `::main' to be static" + msgstr "" + + #: cp/decl.c:8861 + msgid "`main' must return `int'" + msgstr "" + + #: cp/decl.c:8889 + msgid "non-local function `%#D' uses anonymous type" + msgstr "" + + #: cp/decl.c:8892 + msgid "`%#D' does not refer to the unqualified type, so it is not used for linkage" + msgstr "" + + #: cp/decl.c:8898 + msgid "non-local function `%#D' uses local type `%T'" + msgstr "" + + #: cp/decl.c:8921 + msgid "%smember function `%D' cannot have `%T' method qualifier" + msgstr "" + + #: cp/decl.c:8945 + msgid "defining explicit specialization `%D' in friend declaration" + msgstr "" + + #. Something like `template friend void f()'. + #: cp/decl.c:8955 + msgid "invalid use of template-id `%D' in declaration of primary template" + msgstr "" + + #: cp/decl.c:8983 + msgid "default arguments are not allowed in declaration of friend template specialization `%D'" + msgstr "" + + #: cp/decl.c:8990 + msgid "`inline' is not allowed in declaration of friend template specialization `%D'" + msgstr "" + + #: cp/decl.c:9052 + msgid "definition of implicitly-declared `%D'" + msgstr "" + + #: cp/decl.c:9064 cp/decl2.c:1384 + msgid "no `%#D' member function declared in class `%T'" + msgstr "" + + #: cp/decl.c:9183 + msgid "non-local variable `%#D' uses local type `%T'" + msgstr "" + + #: cp/decl.c:9273 + msgid "invalid in-class initialization of static data member of non-integral type `%T'" + msgstr "" + + #: cp/decl.c:9282 + msgid "ISO C++ forbids in-class initialization of non-const static member `%D'" + msgstr "" + + #: cp/decl.c:9285 + msgid "ISO C++ forbids initialization of member constant `%D' of non-integral type `%T'" + msgstr "" + + #: cp/decl.c:9335 + msgid "size of array `%D' has non-integer type" + msgstr "" + + #: cp/decl.c:9337 + msgid "size of array has non-integer type" + msgstr "" + + #: cp/decl.c:9357 + msgid "size of array `%D' is negative" + msgstr "" + + #: cp/decl.c:9359 + msgid "size of array is negative" + msgstr "" + + #: cp/decl.c:9368 + msgid "ISO C++ forbids zero-size array `%D'" + msgstr "" + + #: cp/decl.c:9370 + msgid "ISO C++ forbids zero-size array" + msgstr "" + + #: cp/decl.c:9377 + msgid "size of array `%D' is not an integral constant-expression" + msgstr "" + + #: cp/decl.c:9380 + msgid "size of array is not an integral constant-expression" + msgstr "" + + #: cp/decl.c:9398 + msgid "ISO C++ forbids variable-size array `%D'" + msgstr "" + + #: cp/decl.c:9401 + msgid "ISO C++ forbids variable-size array" + msgstr "" + + #: cp/decl.c:9412 + msgid "overflow in array dimension" + msgstr "" + + #: cp/decl.c:9471 + msgid "declaration of `%D' as %s" + msgstr "" + + #: cp/decl.c:9473 + #, fuzzy, c-format + msgid "creating %s" + msgstr "äçìéïõñãßá áñ÷åßïõ `%s'\n" + + #: cp/decl.c:9485 + msgid "declaration of `%D' as multidimensional array must have bounds for all dimensions except the first" + msgstr "" + + #: cp/decl.c:9488 + msgid "multidimensional array must have bounds for all dimensions except the first" + msgstr "" + + #: cp/decl.c:9517 + msgid "return type specification for constructor invalid" + msgstr "" + + #: cp/decl.c:9524 + msgid "return type specification for destructor invalid" + msgstr "" + + #: cp/decl.c:9530 + msgid "operator `%T' declared to return `%T'" + msgstr "" + + #: cp/decl.c:9532 + msgid "return type specified for `operator %T'" + msgstr "" + + #: cp/decl.c:9702 + msgid "destructors must be member functions" + msgstr "" + + #: cp/decl.c:9721 + msgid "destructor `%T' must match class name `%T'" + msgstr "" + + #: cp/decl.c:9771 + #, fuzzy + msgid "invalid declarator" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: cp/decl.c:9824 + msgid "declarator-id missing; using reserved word `%D'" + msgstr "" + + #: cp/decl.c:9868 + #, fuzzy + msgid "`%T::%D' is not a valid declarator" + msgstr "Ôï `%s' äåí åßíáé êáôÜëïãïò." + + #: cp/decl.c:9870 + msgid " perhaps you want `typename %T::%D' to make it a type" + msgstr "" + + #: cp/decl.c:9882 + msgid "type `%T' is not derived from type `%T'" + msgstr "" + + #. Parse error puts this typespec where + #. a declarator should go. + #: cp/decl.c:9928 + msgid "`%T' specified as declarator-id" + msgstr "" + + #: cp/decl.c:9930 + msgid " perhaps you want `%T' for a constructor" + msgstr "" + + #: cp/decl.c:9944 + #, fuzzy + msgid "`%D' as declarator" + msgstr "ôï `%s' åßíáé êáôÜëïãïò" + + #: cp/decl.c:9959 + msgid "declaration of `%D' as non-function" + msgstr "" + + #: cp/decl.c:10036 + #, fuzzy + msgid "`bool' is now a keyword" + msgstr "Ôï `%s' äåí åßíáé êáôÜëïãïò." + + #: cp/decl.c:10038 + msgid "extraneous `%T' ignored" + msgstr "" + + #: cp/decl.c:10054 cp/decl.c:10088 + #, fuzzy + msgid "multiple declarations `%T' and `%T'" + msgstr "ðïëëáðëüò áñéèìüò åðéëïãþí ôçí åíôïëÞ `s'" + + #: cp/decl.c:10067 + msgid "ISO C++ does not support `long long'" + msgstr "" + + #: cp/decl.c:10159 cp/decl.c:10162 + #, c-format + msgid "ISO C++ forbids declaration of `%s' with no type" + msgstr "" + + #. The implicit typename extension is deprecated and will be + #. removed. Warn about its use now. + #: cp/decl.c:10172 + msgid "`%T' is implicitly a typename" + msgstr "" + + #: cp/decl.c:10208 + #, c-format + msgid "short, signed or unsigned invalid for `%s'" + msgstr "" + + #: cp/decl.c:10213 + #, c-format + msgid "long and short specified together for `%s'" + msgstr "" + + #: cp/decl.c:10224 + #, c-format + msgid "signed and unsigned given together for `%s'" + msgstr "" + + #: cp/decl.c:10329 + msgid "qualifiers are not allowed on declaration of `operator %T'" + msgstr "" + + #: cp/decl.c:10357 + msgid "member `%D' cannot be declared both virtual and static" + msgstr "" + + #: cp/decl.c:10371 + msgid "storage class specifiers invalid in parameter declarations" + msgstr "" + + #: cp/decl.c:10375 + msgid "typedef declaration invalid in parameter declaration" + msgstr "" + + #: cp/decl.c:10388 + msgid "virtual outside class declaration" + msgstr "" + + #: cp/decl.c:10442 + #, c-format + msgid "storage class specified for %s `%s'" + msgstr "" + + #: cp/decl.c:10480 + msgid "storage class specifiers invalid in friend function declarations" + msgstr "" + + #: cp/decl.c:10584 + msgid "size of member `%D' is not constant" + msgstr "" + + #: cp/decl.c:10663 + msgid "destructor cannot be static member function" + msgstr "" + + #: cp/decl.c:10666 + #, c-format + msgid "destructors may not be `%s'" + msgstr "" + + #: cp/decl.c:10687 + msgid "constructor cannot be static member function" + msgstr "" + + #: cp/decl.c:10690 + msgid "constructors cannot be declared virtual" + msgstr "" + + #: cp/decl.c:10695 + #, c-format + msgid "constructors may not be `%s'" + msgstr "" + + #: cp/decl.c:10705 + msgid "return value type specifier for constructor ignored" + msgstr "" + + #: cp/decl.c:10724 + #, fuzzy, c-format + msgid "can't initialize friend function `%s'" + msgstr "Äåí Þôáí äõíáôÞ ç åýñåóç åôéêÝôôáò ãéá ìåôáãùãÞ óôï `%s'" + + #. Cannot be both friend and virtual. + #: cp/decl.c:10728 + msgid "virtual functions cannot be friends" + msgstr "" + + #: cp/decl.c:10733 + #, fuzzy + msgid "friend declaration not in class definition" + msgstr "óõíôáêôéêü óöÜëìá óôïí ïñéóìü êëÜóçò ÷áñáêôÞñùí" + + #: cp/decl.c:10735 + #, c-format + msgid "can't define friend function `%s' in a local class definition" + msgstr "" + + #: cp/decl.c:10759 + msgid "destructors may not have parameters" + msgstr "" + + #: cp/decl.c:10789 + #, fuzzy, c-format + msgid "cannot declare %s to references" + msgstr "áäõíáìßá áëëáãÞò óôï êáôÜëïãï %s" + + #: cp/decl.c:10800 + msgid "cannot declare pointer to `%#T' member" + msgstr "" + + #: cp/decl.c:10815 + #, fuzzy + msgid "invalid type: `void &'" + msgstr "Ìç Ýãêõñç çìåñïìçíßá `%s'" + + #: cp/decl.c:10866 + msgid "discarding `const' applied to a reference" + msgstr "" + + #: cp/decl.c:10868 + msgid "discarding `volatile' applied to a reference" + msgstr "" + + #: cp/decl.c:10979 + msgid "extra qualification `%T::' on member `%s' ignored" + msgstr "" + + #: cp/decl.c:10989 + msgid "cannot declare member function `%T::%s' within `%T'" + msgstr "" + + #: cp/decl.c:11004 + #, fuzzy + msgid "cannot declare member `%T::%s' within `%T'" + msgstr "äåí åßíáé äõíáôü íá äçìéïõñãçèåß ôï %s `%s' óôï `%s'" + + #. [dcl.fct.spec] The explicit specifier shall only be used in + #. declarations of constructors within a class definition. + #: cp/decl.c:11084 + msgid "only declarations of constructors can be `explicit'" + msgstr "" + + #: cp/decl.c:11092 + #, c-format + msgid "non-member `%s' cannot be declared `mutable'" + msgstr "" + + #: cp/decl.c:11097 + #, c-format + msgid "non-object member `%s' cannot be declared `mutable'" + msgstr "" + + #: cp/decl.c:11103 + #, c-format + msgid "function `%s' cannot be declared `mutable'" + msgstr "" + + #: cp/decl.c:11108 + #, c-format + msgid "static `%s' cannot be declared `mutable'" + msgstr "" + + #: cp/decl.c:11113 + #, c-format + msgid "const `%s' cannot be declared `mutable'" + msgstr "" + + #: cp/decl.c:11126 + msgid "template-id `%D' used as a declarator" + msgstr "" + + #: cp/decl.c:11147 + msgid "ISO C++ forbids nested type `%D' with same name as enclosing class" + msgstr "" + + #: cp/decl.c:11194 + msgid "typedef name may not be class-qualified" + msgstr "" + + #: cp/decl.c:11202 + msgid "invalid type qualifier for non-member function type" + msgstr "" + + #: cp/decl.c:11218 + msgid "typedef declaration includes an initializer" + msgstr "" + + #: cp/decl.c:11271 + msgid "type qualifiers specified for friend class declaration" + msgstr "" + + #: cp/decl.c:11276 + msgid "`inline' specified for friend class declaration" + msgstr "" + + #: cp/decl.c:11286 + #, fuzzy + msgid "template parameters cannot be friends" + msgstr "ï äéá÷ùñéóôÞò äå ìðïñåß íá åßíáé êåíüò" + + #: cp/decl.c:11288 + msgid "friend declaration requires class-key, i.e. `friend class %T::%T'" + msgstr "" + + #: cp/decl.c:11293 + msgid "friend declaration requires class-key, i.e. `friend %#T'" + msgstr "" + + #: cp/decl.c:11309 + msgid "trying to make class `%T' a friend of global scope" + msgstr "" + + #: cp/decl.c:11320 + msgid "invalid qualifiers on non-member function type" + msgstr "" + + #: cp/decl.c:11339 + msgid "abstract declarator `%T' used as declaration" + msgstr "" + + #: cp/decl.c:11351 + msgid "unnamed variable or field declared void" + msgstr "" + + #: cp/decl.c:11360 + msgid "variable or field declared void" + msgstr "" + + #: cp/decl.c:11370 + msgid "cannot use `::' in parameter declaration" + msgstr "" + + #. Something like struct S { int N::j; }; + #: cp/decl.c:11416 + #, fuzzy + msgid "invalid use of `::'" + msgstr "ìç Ýãêõñïò ÷ñÞóôçò" + + #: cp/decl.c:11428 + msgid "function `%D' cannot be declared friend" + msgstr "" + + #: cp/decl.c:11440 + msgid "can't make `%D' into a method -- not in a class" + msgstr "" + + #: cp/decl.c:11449 + msgid "function `%D' declared virtual inside a union" + msgstr "" + + #: cp/decl.c:11461 + msgid "`%D' cannot be declared virtual, since it is always static" + msgstr "" + + #: cp/decl.c:11534 + msgid "field `%D' has incomplete type" + msgstr "" + + #: cp/decl.c:11536 + msgid "name `%T' has incomplete type" + msgstr "" + + #: cp/decl.c:11545 + msgid " in instantiation of template `%T'" + msgstr "" + + #: cp/decl.c:11555 + #, c-format + msgid "`%s' is neither function nor member function; cannot be declared friend" + msgstr "" + + #: cp/decl.c:11572 + msgid "member functions are implicitly friends of their class" + msgstr "" + + #. An attempt is being made to initialize a non-static + #. member. But, from [class.mem]: + #. + #. 4 A member-declarator can contain a + #. constant-initializer only if it declares a static + #. member (_class.static_) of integral or enumeration + #. type, see _class.static.data_. + #. + #. This used to be relatively common practice, but + #. the rest of the compiler does not correctly + #. handle the initialization unless the member is + #. static so we make it static below. + #: cp/decl.c:11614 + msgid "ISO C++ forbids initialization of member `%D'" + msgstr "" + + #: cp/decl.c:11616 + msgid "making `%D' static" + msgstr "" + + #: cp/decl.c:11640 + msgid "ISO C++ forbids static data member `%D' with same name as enclosing class" + msgstr "" + + #: cp/decl.c:11681 + #, c-format + msgid "storage class `auto' invalid for function `%s'" + msgstr "" + + #: cp/decl.c:11683 + #, c-format + msgid "storage class `register' invalid for function `%s'" + msgstr "" + + #: cp/decl.c:11694 + #, c-format + msgid "storage class `static' invalid for function `%s' declared out of global scope" + msgstr "" + + #: cp/decl.c:11696 + #, c-format + msgid "storage class `inline' invalid for function `%s' declared out of global scope" + msgstr "" + + #: cp/decl.c:11703 + #, c-format + msgid "virtual non-class function `%s'" + msgstr "" + + #: cp/decl.c:11732 + msgid "cannot declare member function `%D' to have static linkage" + msgstr "" + + #. FIXME need arm citation + #: cp/decl.c:11738 + msgid "cannot declare static function inside another function" + msgstr "" + + #: cp/decl.c:11766 + msgid "`static' may not be used when defining (as opposed to declaring) a static data member" + msgstr "" + + #: cp/decl.c:11772 + msgid "static member `%D' declared `register'" + msgstr "" + + #: cp/decl.c:11777 + msgid "cannot explicitly declare member `%#D' to have extern linkage" + msgstr "" + + #: cp/decl.c:11949 + msgid "default argument for `%#D' has type `%T'" + msgstr "" + + #: cp/decl.c:11952 + msgid "default argument for parameter of type `%T' has type `%T'" + msgstr "" + + #: cp/decl.c:11969 + msgid "default argument `%E' uses local variable `%D'" + msgstr "" + + #: cp/decl.c:12013 + #, fuzzy, c-format + msgid "invalid string constant `%E'" + msgstr "ìç ôåñìáôéæìÝíï áëöáñéèìçôéêü óôáèåñÜò" + + #: cp/decl.c:12015 + msgid "invalid integer constant in parameter list, did you forget to give parameter name?" + msgstr "" + + #: cp/decl.c:12049 + msgid "parameter `%D' invalidly declared method type" + msgstr "" + + #: cp/decl.c:12055 + msgid "parameter `%D' invalidly declared offset type" + msgstr "" + + #: cp/decl.c:12079 + msgid "parameter `%D' includes %s to array of unknown bound `%T'" + msgstr "" + + #. [class.copy] + #. + #. A declaration of a constructor for a class X is ill-formed if + #. its first parameter is of type (optionally cv-qualified) X + #. and either there are no other parameters or else all other + #. parameters have default arguments. + #. + #. We *don't* complain about member template instantiations that + #. have this form, though; they can occur as we try to decide + #. what constructor to use during overload resolution. Since + #. overload resolution will never prefer such a constructor to + #. the non-template copy constructor (which is either explicitly + #. or implicitly defined), there's no need to worry about their + #. existence. Theoretically, they should never even be + #. instantiated, but that's hard to forestall. + #: cp/decl.c:12246 + msgid "invalid constructor; you probably meant `%T (const %T&)'" + msgstr "" + + #: cp/decl.c:12397 + msgid "`%D' must be a nonstatic member function" + msgstr "" + + #: cp/decl.c:12403 + msgid "`%D' must be either a non-static member function or a non-member function" + msgstr "" + + #: cp/decl.c:12420 + msgid "`%D' must have an argument of class or enumerated type" + msgstr "" + + #: cp/decl.c:12452 + #, c-format + msgid "conversion to %s%s will never use a type conversion operator" + msgstr "" + + #. 13.4.0.3 + #: cp/decl.c:12459 + msgid "ISO C++ prohibits overloading operator ?:" + msgstr "" + + #: cp/decl.c:12509 + msgid "postfix `%D' must take `int' as its argument" + msgstr "" + + #: cp/decl.c:12513 + msgid "postfix `%D' must take `int' as its second argument" + msgstr "" + + #: cp/decl.c:12520 + msgid "`%D' must take either zero or one argument" + msgstr "" + + #: cp/decl.c:12522 + msgid "`%D' must take either one or two arguments" + msgstr "" + + #: cp/decl.c:12543 + msgid "prefix `%D' should return `%T'" + msgstr "" + + #: cp/decl.c:12549 + msgid "postfix `%D' should return `%T'" + msgstr "" + + #: cp/decl.c:12558 + msgid "`%D' must take `void'" + msgstr "" + + #: cp/decl.c:12560 cp/decl.c:12568 + msgid "`%D' must take exactly one argument" + msgstr "" + + #: cp/decl.c:12570 + msgid "`%D' must take exactly two arguments" + msgstr "" + + #: cp/decl.c:12578 + msgid "user-defined `%D' always evaluates both arguments" + msgstr "" + + #: cp/decl.c:12590 + msgid "`%D' should return by value" + msgstr "" + + #: cp/decl.c:12602 cp/decl.c:12605 + msgid "`%D' cannot have default arguments" + msgstr "" + + #: cp/decl.c:12698 + msgid "`%s %T' declares a new type at namespace scope" + msgstr "" + + #: cp/decl.c:12701 + msgid " names from dependent base classes are not visible to unqualified name lookup - to refer to the inherited type, say `%s %T::%T'" + msgstr "" + + #: cp/decl.c:12737 + msgid "using typedef-name `%D' after `%s'" + msgstr "" + + #: cp/decl.c:12740 + msgid "using template type parameter `%T' after `%s'" + msgstr "" + + #: cp/decl.c:12822 + msgid "use of enum `%#D' without previous declaration" + msgstr "" + + #: cp/decl.c:12932 + msgid "derived union `%T' invalid" + msgstr "" + + #: cp/decl.c:12976 + msgid "base type `%T' fails to be a struct or class type" + msgstr "" + + #: cp/decl.c:12988 + msgid "base class `%T' has incomplete type" + msgstr "" + + #: cp/decl.c:12996 + msgid "recursive type `%T' undefined" + msgstr "" + + #: cp/decl.c:12998 + #, fuzzy + msgid "duplicate base type `%T' invalid" + msgstr "äéðëüò ïñéóìüò óõíüëïõ" + + #: cp/decl.c:13109 + #, fuzzy + msgid "multiple definition of `%#T'" + msgstr "áäõíáìßá áíïßãìáôïò áñ÷åßïõ ïñéóìïý locale `%s'" + + #: cp/decl.c:13110 + msgid "previous definition here" + msgstr "" + + #: cp/decl.c:13285 + msgid "enumerator value for `%D' not integer constant" + msgstr "" + + #: cp/decl.c:13305 + msgid "overflow in enumeration values at `%D'" + msgstr "" + + #: cp/decl.c:13394 + msgid "return type `%#T' is incomplete" + msgstr "" + + #: cp/decl.c:13503 + msgid "semicolon missing after declaration of `%#T'" + msgstr "" + + #: cp/decl.c:13524 + msgid "return type for `main' changed to `int'" + msgstr "" + + #: cp/decl.c:13555 + msgid "`%D' implicitly declared before its definition" + msgstr "" + + #: cp/decl.c:13577 cp/typeck.c:6653 + msgid "`operator=' should return a reference to `*this'" + msgstr "" + + #: cp/decl.c:13858 + msgid "parameter `%D' declared void" + msgstr "" + + #: cp/decl.c:14302 + msgid "`%D' is already defined in class `%T'" + msgstr "" + + #: cp/decl.c:14453 + msgid "parser lost in parsing declaration of `%D'" + msgstr "" + + #: cp/decl.c:14538 + msgid "static member function `%#D' declared with type qualifiers" + msgstr "" + + #: cp/decl2.c:529 + #, fuzzy, c-format + msgid "-f%s is no longer supported" + msgstr "áñ÷åßá fifo äåí õðïóôçñßæïíôáé" + + #: cp/decl2.c:535 + msgid "-fhandle-exceptions has been renamed to -fexceptions (and is now on by default)" + msgstr "" + + #: cp/decl2.c:561 + msgid "-fname-mangling-version is no longer supported" + msgstr "" + + #: cp/decl2.c:624 + msgid "-Wno-strict-prototypes is not supported in C++" + msgstr "" + + #: cp/decl2.c:761 + #, c-format + msgid "duplicate type qualifiers in %s declaration" + msgstr "" + + #: cp/decl2.c:800 + msgid "template `%#D' instantiated in file without #pragma interface" + msgstr "" + + #: cp/decl2.c:806 + msgid "template `%#D' defined in file without #pragma interface" + msgstr "" + + #: cp/decl2.c:963 + msgid "name missing for member function" + msgstr "" + + #. Something has gone very wrong. Assume we are mistakenly reducing + #. an expression instead of a declaration. + #: cp/decl2.c:1030 + msgid "parser may be lost: is there a '{' missing somewhere?" + msgstr "" + + #: cp/decl2.c:1061 cp/decl2.c:1075 + msgid "ambiguous conversion for array subscript" + msgstr "" + + #: cp/decl2.c:1069 + msgid "invalid types `%T[%T]' for array subscript" + msgstr "" + + #: cp/decl2.c:1117 + msgid "type `%#T' argument given to `delete', expected pointer" + msgstr "" + + #: cp/decl2.c:1125 + msgid "anachronistic use of array size in vector delete" + msgstr "" + + #: cp/decl2.c:1135 + msgid "cannot delete a function. Only pointer-to-objects are valid arguments to `delete'" + msgstr "" + + #: cp/decl2.c:1142 + msgid "deleting `%T' is undefined" + msgstr "" + + #: cp/decl2.c:1150 + msgid "deleting array `%#D'" + msgstr "" + + #. 14.5.2.2 [temp.mem] + #. + #. A local class shall not have member templates. + #: cp/decl2.c:1197 + msgid "invalid declaration of member template `%#D' in local class" + msgstr "" + + #: cp/decl2.c:1206 + msgid "invalid use of `virtual' in template declaration of `%#D'" + msgstr "" + + #: cp/decl2.c:1216 cp/pt.c:2559 + msgid "template declaration of `%#D'" + msgstr "" + + #: cp/decl2.c:1266 + msgid "Java method '%D' has non-Java return type `%T'" + msgstr "" + + #: cp/decl2.c:1275 + msgid "Java method '%D' has non-Java parameter type `%T'" + msgstr "" + + #: cp/decl2.c:1371 + #, fuzzy + msgid "prototype for `%#D' does not match any in class `%T'" + msgstr "ôï áñ÷åßï äåäïìÝíùí ðñïößë `%s' äåí ôáéñéÜæåé ìå ôï äéáìïéñáæüìåíï áíôéêåßìåíï `%s'" + + #: cp/decl2.c:1373 + msgid "candidate%s: %+#D" + msgstr "" + + #: cp/decl2.c:1376 + msgid " %#D" + msgstr " %#D" + + #: cp/decl2.c:1432 + msgid "initializer invalid for static member with constructor" + msgstr "" + + #: cp/decl2.c:1435 + msgid "(an out of class initialization is required)" + msgstr "" + + #: cp/decl2.c:1494 + msgid "invalid data member initialization" + msgstr "" + + #: cp/decl2.c:1497 + msgid "(use `=' to initialize static data members)" + msgstr "" + + #: cp/decl2.c:1537 + msgid "member `%D' conflicts with virtual function table field name" + msgstr "" + + #: cp/decl2.c:1557 + msgid "`%D' is already defined in `%T'" + msgstr "" + + #: cp/decl2.c:1608 + msgid "field initializer is not constant" + msgstr "" + + #: cp/decl2.c:1631 + msgid "`asm' specifiers are not permitted on non-static data members" + msgstr "" + + #: cp/decl2.c:1683 + msgid "cannot declare `%D' to be a bit-field type" + msgstr "" + + #: cp/decl2.c:1693 + msgid "cannot declare bit-field `%D' with function type" + msgstr "" + + #: cp/decl2.c:1700 + msgid "`%D' is already defined in the class %T" + msgstr "" + + #: cp/decl2.c:1709 + msgid "static member `%D' cannot be a bit-field" + msgstr "" + + #: cp/decl2.c:1778 + msgid "initializer specified for non-member function `%D'" + msgstr "" + + #: cp/decl2.c:1782 + #, fuzzy + msgid "invalid initializer for virtual method `%D'" + msgstr "Ìç Ýãêõñç áêÝñáéá ðáñÜìåôñïò `%s'" + + #: cp/decl2.c:1886 + msgid "anonymous struct not inside named type" + msgstr "" + + #: cp/decl2.c:1982 + msgid "namespace-scope anonymous aggregates must be static" + msgstr "" + + #: cp/decl2.c:1992 + msgid "anonymous aggregate with no members" + msgstr "" + + #: cp/decl2.c:2059 + msgid "`operator new' must return type `%T'" + msgstr "" + + #: cp/decl2.c:2067 + msgid "`operator new' takes type `size_t' (`%T') as first parameter" + msgstr "" + + #: cp/decl2.c:2094 + msgid "`operator delete' must return type `%T'" + msgstr "" + + #: cp/decl2.c:2102 + msgid "`operator delete' takes type `%T' as first parameter" + msgstr "" + + #. Overflow occurred. That means there are at least 4 billion + #. initialization functions. + #: cp/decl2.c:2839 + msgid "too many initialization functions required" + msgstr "" + + #: cp/decl2.c:3650 + #, fuzzy + msgid "use of old-style cast" + msgstr "ðáëáéïý åßäïõò èÝóç" + + # src/getopt.c:628 + # src/getopt.c:628 + #: cp/decl2.c:4208 + #, fuzzy + msgid "use of `%D' is ambiguous" + msgstr "%s: ç åðéëïãÞ `%s' åßíáé áóáöÞò\n" + + #: cp/decl2.c:4209 + msgid " first declared as `%#D' here" + msgstr "" + + #: cp/decl2.c:4212 + msgid " also declared as `%#D' here" + msgstr "" + + #: cp/decl2.c:4227 + msgid "`%D' denotes an ambiguous type" + msgstr "" + + #: cp/decl2.c:4228 + msgid " first type here" + msgstr "" + + #: cp/decl2.c:4229 + msgid " other type here" + msgstr "" + + #: cp/decl2.c:4326 + msgid "declaration of `%D' not in a namespace surrounding `%D'" + msgstr "" + + #: cp/decl2.c:4360 + msgid "`%D' should have been declared inside `%D'" + msgstr "" + + #: cp/decl2.c:4494 + #, fuzzy + msgid "`%D' is not a function," + msgstr "Ôï `%s' äåí åßíáé êáôÜëïãïò." + + #: cp/decl2.c:4495 + msgid " conflict with `%D'" + msgstr "" + + #. The parser did not find it, so it's not there. + #: cp/decl2.c:4809 + #, fuzzy + msgid "unknown namespace `%D'" + msgstr "Üãíùóôï óåô `%s'" + + #: cp/decl2.c:4843 cp/decl2.c:5104 + #, fuzzy + msgid "`%T' is not a namespace" + msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï" + + #: cp/decl2.c:4845 + #, fuzzy + msgid "`%D' is not a namespace" + msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï" + + #: cp/decl2.c:4854 + msgid "a using-declaration cannot specify a template-id. Try `using %D'" + msgstr "" + + #: cp/decl2.c:4868 + msgid "namespace `%D' not allowed in using-declaration" + msgstr "" + + #: cp/decl2.c:4897 + #, fuzzy + msgid "`%D' not declared" + msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï" + + #: cp/decl2.c:4939 + msgid "`%D' is already declared in this scope" + msgstr "" + + #: cp/decl2.c:4966 + msgid "using declaration `%D' introduced ambiguous type `%T'" + msgstr "" + + #: cp/decl2.c:5057 + msgid "using-declaration for non-member at class scope" + msgstr "" + + #: cp/decl2.c:5063 + msgid "using-declaration for destructor" + msgstr "" + + #: cp/decl2.c:5069 + msgid "a using-declaration cannot specify a template-id. Try `using %T::%D'" + msgstr "" + + #: cp/decl2.c:5098 + msgid "namespace `%T' undeclared" + msgstr "" + + #: cp/decl2.c:5127 + msgid "default argument missing for parameter %P of `%+#D'" + msgstr "" + + #: cp/decl2.c:5217 + msgid "extra qualification `%T::' on member `%D' ignored" + msgstr "" + + #: cp/decl2.c:5221 + #, fuzzy + msgid "`%T' does not have a class or union named `%D'" + msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï" + + #: cp/decl2.c:5234 + #, fuzzy + msgid "`%T' is not a class or union type" + msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï" + + #: cp/error.c:35 + #, fuzzy, c-format + msgid "`%s' not supported by %s" + msgstr "Äåí õðïóôçñßæåôáé" + + #: cp/error.c:571 + #, c-format + msgid "" + msgstr "" + + #: cp/error.c:808 + #, c-format + msgid "(static %s for %s)" + msgstr "" + + #: cp/error.c:2432 + #, c-format + msgid "In %s `%s':" + msgstr "" + + #: cp/error.c:2487 + #, fuzzy, c-format + msgid "%s: In instantiation of `%s':\n" + msgstr "%s: Ìç Ýãêõñç ñýèìéóç `%s'.\n" + + #: cp/error.c:2511 + #, c-format + msgid "%s:%d: instantiated from `%s'\n" + msgstr "" + + #: cp/error.c:2516 + #, c-format + msgid "%s:%d: instantiated from here\n" + msgstr "" + + #. damn ICE suppression + #: cp/error.c:2669 + #, c-format + msgid "unexpected letter `%c' in locate_error\n" + msgstr "" + + #. Can't throw a reference. + #: cp/except.c:245 + msgid "type `%T' is disallowed in Java `throw' or `catch'" + msgstr "" + + #: cp/except.c:256 + msgid "call to Java `catch' or `throw' with `jthrowable' undefined" + msgstr "" + + #. Thrown object must be a Throwable. + #: cp/except.c:263 + msgid "type `%T' is not derived from `java::lang::Throwable'" + msgstr "" + + #: cp/except.c:327 + msgid "mixing C++ and Java catches in a single translation unit" + msgstr "" + + #: cp/except.c:558 + msgid "throwing NULL, which has integral, not pointer type" + msgstr "" + + #: cp/except.c:663 + msgid " in thrown expression" + msgstr "" + + #: cp/except.c:775 + msgid "expression '%E' of abstract class type '%T' cannot be used in throw-expression" + msgstr "" + + #: cp/except.c:863 + msgid "exception of type `%T' will be caught" + msgstr "" + + #: cp/except.c:866 + msgid " by earlier handler for `%T'" + msgstr "" + + #: cp/except.c:887 + msgid "`...' handler must be the last handler for its try block" + msgstr "" + + #: cp/friend.c:155 + msgid "`%D' is already a friend of class `%T'" + msgstr "" + + #: cp/friend.c:157 + msgid "previous friend declaration of `%D'" + msgstr "" + + #: cp/friend.c:197 + msgid "invalid type `%T' declared `friend'" + msgstr "" + + #. [temp.friend] + #. + #. Friend declarations shall not declare partial + #. specializations. + #: cp/friend.c:209 + msgid "partial specialization `%T' declared `friend'" + msgstr "" + + #: cp/friend.c:221 + msgid "class `%T' is implicitly friends with itself" + msgstr "" + + #. template friend typename S::X; + #: cp/friend.c:239 + msgid "typename type `%#T' declared `friend'" + msgstr "" + + #. template friend class T; + #: cp/friend.c:245 + msgid "template parameter type `%T' declared `friend'" + msgstr "" + + #. template friend class A; where A is not a template + #: cp/friend.c:251 + #, fuzzy + msgid "`%#T' is not a template" + msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï" + + #: cp/friend.c:268 + #, fuzzy + msgid "`%T' is already a friend of `%T'" + msgstr "ôï `%s' åßíáé ðñüãïíïò ôïõ `%s'" + + #: cp/friend.c:364 + msgid "member `%D' declared as friend before type `%T' defined" + msgstr "" + + #: cp/friend.c:419 + msgid "friend declaration `%#D' declares a non-template function" + msgstr "" + + #: cp/friend.c:422 + msgid "(if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) -Wno-non-template-friend disables this warning" + msgstr "" + + #: cp/g++spec.c:198 java/jvspec.c:381 + #, fuzzy, c-format + msgid "argument to `%s' missing\n" + msgstr "Ý÷ïõí ðáñáëçöèåß ïñßóìáôá" + + #: cp/init.c:285 + msgid "default-initialization of `%#D', which has reference type" + msgstr "" + + #: cp/init.c:290 + msgid "uninitialized reference member `%D'" + msgstr "" + + #: cp/init.c:298 + msgid "initializer list treated as compound expression" + msgstr "" + + #: cp/init.c:410 + msgid "member initializers for `%#D'" + msgstr "" + + #: cp/init.c:412 + msgid " and `%#D'" + msgstr "" + + #: cp/init.c:413 + msgid " will be re-ordered to match declaration order" + msgstr "" + + #: cp/init.c:428 + msgid "multiple initializations given for member `%D'" + msgstr "" + + #: cp/init.c:500 + msgid "initializations for multiple members of `%T'" + msgstr "" + + #: cp/init.c:617 + msgid "base initializers for `%#T'" + msgstr "" + + #: cp/init.c:618 + msgid " and `%#T'" + msgstr "" + + #: cp/init.c:619 + msgid " will be re-ordered to match inheritance order" + msgstr "" + + #: cp/init.c:631 + #, fuzzy + msgid "base class `%T' already initialized" + msgstr "ç êëÜóç ÷áñáêôÞñùí `%s' ïñßóôçêå Þäç" + + #: cp/init.c:702 + msgid "base class `%#T' should be explicitly initialized in the copy constructor" + msgstr "" + + #: cp/init.c:745 + msgid "`%D' should be initialized in the member initialization list" + msgstr "" + + #: cp/init.c:987 + msgid "class `%T' does not have any field named `%D'" + msgstr "" + + #: cp/init.c:993 + msgid "field `%#D' is static; the only point of initialization is its definition" + msgstr "" + + #: cp/init.c:1032 + msgid "unnamed initializer for `%T', which has no base classes" + msgstr "" + + #: cp/init.c:1039 + msgid "unnamed initializer for `%T', which uses multiple inheritance" + msgstr "" + + #: cp/init.c:1068 + msgid "type `%D' is not a direct or virtual base of `%T'" + msgstr "" + + #: cp/init.c:1071 + #, fuzzy + msgid "type `%D' is not a direct base of `%T'" + msgstr "Ôï `%s' äåí åßíáé êáôÜëïãïò." + + #. Handle bad initializers like: + #. class COMPLEX { + #. public: + #. double re, im; + #. COMPLEX(double r = 0.0, double i = 0.0) {re = r; im = i;}; + #. ~COMPLEX() {}; + #. }; + #. + #. int main(int argc, char **argv) { + #. COMPLEX zees(1.0, 0.0)[10]; + #. } + #. + #: cp/init.c:1165 + msgid "bad array initializer" + msgstr "" + + #: cp/init.c:1357 + #, fuzzy + msgid "`%T' is not an aggregate type" + msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï" + + #: cp/init.c:1380 + msgid "`%T' fails to be an aggregate typedef" + msgstr "" + + #: cp/init.c:1389 + msgid "type `%T' is of non-aggregate type" + msgstr "" + + #: cp/init.c:1491 + msgid "cannot call destructor `%T::~%T' without object" + msgstr "" + + #: cp/init.c:1533 + #, fuzzy + msgid "invalid use of non-static field `%D'" + msgstr "ìç Ýãêõñïò áñéèìüò áðü óôÞëåò: `%s'" + + #. We can get here when processing a bad default + #. argument, like: + #. struct S { int a; void f(int i = a); } + #: cp/init.c:1542 cp/method.c:194 + #, fuzzy + msgid "invalid use of member `%D'" + msgstr "ìç Ýãêõñïò áñéèìüò ðåäßïõ: `%s'" + + #: cp/init.c:1552 + msgid "no method `%T::%D'" + msgstr "" + + #: cp/init.c:1645 + msgid "incomplete type `%T' does not have member `%D'" + msgstr "" + + #: cp/init.c:1714 + #, fuzzy + msgid "`%D' is not a member of type `%T'" + msgstr "äåí åßóôå ìÝëïò ôçò ïìÜäáò `%s'" + + #: cp/init.c:1733 + #, fuzzy + msgid "illegal pointer to bit-field `%D'" + msgstr "áêáôÜëëçëïò ôýðïò äéêôýïõ :`%s'\n" + + #: cp/init.c:1772 + msgid "object missing in use of pointer-to-member construct" + msgstr "" + + #: cp/init.c:1812 + msgid "member `%D' is non-static but referenced as a static member" + msgstr "" + + #: cp/init.c:1814 cp/typeck.c:3168 cp/typeck.c:3276 + msgid "at this point in file" + msgstr "" + + #: cp/init.c:1872 cp/typeck.c:2963 + #, c-format + msgid "object missing in `%E'" + msgstr "" + + #: cp/init.c:2004 + msgid "new of array type fails to specify size" + msgstr "" + + #: cp/init.c:2015 + msgid "size in array new must have integral type" + msgstr "" + + #: cp/init.c:2021 + msgid "zero size array reserves no space" + msgstr "" + + #: cp/init.c:2086 + msgid "new cannot be applied to a reference type" + msgstr "" + + #: cp/init.c:2092 + msgid "new cannot be applied to a function type" + msgstr "" + + #: cp/init.c:2139 + msgid "call to Java constructor, while `jclass' undefined" + msgstr "" + + #: cp/init.c:2155 + msgid "can't find class$" + msgstr "" + + #: cp/init.c:2268 + #, fuzzy + msgid "invalid type `void' for new" + msgstr "ìç Ýãêõñç êáôÜóôáóç ãéá ôçí dlopen()" + + #: cp/init.c:2320 + #, c-format + msgid "call to Java constructor with `%s' undefined" + msgstr "" + + #: cp/init.c:2429 + msgid "ISO C++ forbids initialization in array new" + msgstr "" + + #: cp/init.c:2447 cp/typeck2.c:383 cp/typeck2.c:1227 + msgid "initializer list being treated as compound expression" + msgstr "" + + #: cp/init.c:2453 + msgid "ISO C++ forbids aggregate initializer to new" + msgstr "" + + #: cp/init.c:2528 + msgid "uninitialized const in `new' of `%#T'" + msgstr "" + + #: cp/init.c:2892 + msgid "initializer ends prematurely" + msgstr "" + + #: cp/init.c:2962 + msgid "cannot initialize multi-dimensional array with initializer" + msgstr "" + + #: cp/init.c:3137 + msgid "unknown array size in delete" + msgstr "" + + #: cp/init.c:3402 + msgid "type to vector delete is neither pointer or array type" + msgstr "" + + #: cp/lex.c:144 + #, fuzzy + msgid "type name expected before `*'" + msgstr "ÅããñáöÞ ïíïìÜôùí ôùí åðéëåãìÝíùí êáôçãïñéþí" + + #: cp/lex.c:166 + msgid "cannot declare references to references" + msgstr "" + + #: cp/lex.c:171 + msgid "cannot declare pointers to references" + msgstr "" + + #: cp/lex.c:175 + #, fuzzy + msgid "type name expected before `&'" + msgstr "ÅããñáöÞ ïíïìÜôùí ôùí åðéëåãìÝíùí êáôçãïñéþí" + + #: cp/lex.c:1000 + #, c-format + msgid "semicolon missing after %s declaration" + msgstr "" + + #: cp/lex.c:1003 + msgid "semicolon missing after declaration of `%T'" + msgstr "" + + #: cp/lex.c:1051 + #, c-format + msgid "junk at end of #pragma %s" + msgstr "" + + #: cp/lex.c:1058 + #, fuzzy, c-format + msgid "invalid #pragma %s" + msgstr "Ç ðáñÜìåôñïò `%s' äåí åßíáé Ýãêõñç." + + #: cp/lex.c:1067 + msgid "#pragma vtable no longer supported" + msgstr "" + + #: cp/lex.c:1144 + #, c-format + msgid "#pragma implementation for %s appears after file is included" + msgstr "" + + #: cp/lex.c:1169 + msgid "junk at end of #pragma GCC java_exceptions" + msgstr "" + + #: cp/lex.c:1254 + #, fuzzy + msgid "`%D' not defined" + msgstr "áüñéóôï" + + #: cp/lex.c:1259 + msgid "`%D' was not declared in this scope" + msgstr "" + + #: cp/lex.c:1269 + msgid "`%D' undeclared (first use this function)" + msgstr "" + + #: cp/lex.c:1273 + msgid "(Each undeclared identifier is reported only once for each function it appears in.)" + msgstr "" + + #: cp/lex.c:1296 + #, fuzzy, c-format + msgid "name lookup of `%s' changed" + msgstr "ç ïìÜäá ôïõ %s Üëëáîå óå %s\n" + + #: cp/lex.c:1298 + msgid " matches this `%D' under ISO standard rules" + msgstr "" + + #: cp/lex.c:1300 + msgid " matches this `%D' under old rules" + msgstr "" + + #: cp/lex.c:1310 cp/lex.c:1317 + #, c-format + msgid "name lookup of `%s' changed for new ISO `for' scoping" + msgstr "" + + #: cp/lex.c:1312 + msgid " cannot use obsolete binding at `%D' because it has a destructor" + msgstr "" + + #: cp/lex.c:1319 + msgid " using obsolete binding at `%D'" + msgstr "" + + #: cp/lex.c:1384 + msgid "`::%D' undeclared (first use here)" + msgstr "" + + #: cp/mangle.c:1892 + msgid "real-valued template parameters when cross-compiling" + msgstr "" + + #: cp/method.c:166 + msgid "methods cannot be converted to function pointers" + msgstr "" + + # src/main.c:659 + #: cp/method.c:171 + #, fuzzy, c-format + msgid "ambiguous request for method pointer `%s'" + msgstr "ÁóáöÞò óõìâïëïóåéñÜ `%s'" + + #: cp/method.c:188 + msgid "invalid use of member `%D' in static member function" + msgstr "" + + #: cp/method.c:236 + msgid "use of namespace `%D' as expression" + msgstr "" + + #: cp/method.c:241 + msgid "use of class template `%T' as expression" + msgstr "" + + #: cp/method.c:254 + #, c-format + msgid "use of %s from containing function" + msgstr "" + + #: cp/method.c:257 + msgid " `%#D' declared here" + msgstr "" + + #: cp/method.c:275 + msgid "request for member `%D' is ambiguous in multiple inheritance lattice" + msgstr "" + + #: cp/method.c:328 + msgid "implementation-reserved name `%D' used" + msgstr "" + + #: cp/method.c:453 + msgid "generic thunk code fails for method `%#D' which uses `...'" + msgstr "" + + #: cp/method.c:683 + msgid "non-static const member `%#D', can't use default assignment operator" + msgstr "" + + #: cp/method.c:688 + msgid "non-static reference member `%#D', can't use default assignment operator" + msgstr "" + + #: parse.y:498 + msgid "keyword `export' not implemented, and will be ignored" + msgstr "" + + #: parse.y:602 + msgid "use of linkage spec `%D' is different from previous spec `%D'" + msgstr "" + + # src/grep.c:785 src/grep.c:792 + # src/grep.c:1060 src/grep.c:1067 src/grep.c:1076 + #: parse.y:674 + #, fuzzy + msgid "invalid default template argument" + msgstr "ìç Ýãêõñï üñéóìá ìÞêïõò ðåñéå÷ïìÝíïõ" + + #: parse.y:905 + msgid "only constructors take base initializers" + msgstr "" + + #: parse.y:907 + msgid "no base or member initializers given following ':'" + msgstr "" + + #: parse.y:949 parse.y:955 + msgid "anachronistic old style base class initializer" + msgstr "" + + #. Handle `Class>' without space in the `>>' + #: parse.y:1077 + msgid "`>>' should be `> >' in template class name" + msgstr "" + + #: parse.y:1115 + msgid "use of template qualifier outside template" + msgstr "" + + #: parse.y:1144 parse.y:1153 + #, c-format + msgid "ISO C++ forbids an empty condition for `%s'" + msgstr "" + + #: parse.y:1176 + msgid "definition of class `%T' in condition" + msgstr "" + + #: parse.y:1178 + msgid "definition of enum `%T' in condition" + msgstr "" + + #: parse.y:1189 + msgid "definition of array `%#D' in condition" + msgstr "" + + #: parse.y:1298 + msgid "old style placement syntax, use () instead" + msgstr "" + + #: parse.y:1309 + #, fuzzy + msgid "`%T' is not a valid expression" + msgstr "%s' äåí åßíáé éó÷ýùí èåôéêüò áêÝñáéïò." + + #: parse.y:1320 + msgid "ISO C++ forbids initialization of new expression with `='" + msgstr "" + + #: parse.y:1351 + msgid "ISO C++ forbids compound literals" + msgstr "" + + #: parse.y:1592 + msgid "ISO C++ forbids braced-groups within expressions" + msgstr "" + + # src/dfa.c:962 + # src/dfa.c:970 + #: parse.y:1999 parse.y:2014 + #, fuzzy + msgid "sigof type specifier" + msgstr "Äåí ïñßóôçêå óõíôáêôéêü" + + #: parse.y:2004 + msgid "`sigof' applied to non-aggregate expression" + msgstr "" + + #: parse.y:2019 + msgid "`sigof' applied to non-aggregate type" + msgstr "" + + #: parse.y:2283 + msgid "using `typename' outside of template" + msgstr "" + + #: parse.y:2352 + #, c-format + msgid "storage class specifier `%s' not allowed after struct or class" + msgstr "" + + #: parse.y:2354 + #, c-format + msgid "type specifier `%s' not allowed after struct or class" + msgstr "" + + #: parse.y:2356 + #, c-format + msgid "type qualifier `%s' not allowed after struct or class" + msgstr "" + + #: parse.y:2358 + msgid "no body nor ';' separates two class, struct or union declarations" + msgstr "" + + #: parse.y:2490 + msgid "no bases given following `:'" + msgstr "" + + #: parse.y:2521 parse.y:2536 + msgid "`%D' access" + msgstr "" + + #: parse.y:2526 + msgid "multiple access specifiers" + msgstr "" + + #: parse.y:2544 + msgid "multiple `virtual' specifiers" + msgstr "" + + #: parse.y:2581 + msgid "missing ';' before right brace" + msgstr "" + + #: parse.y:2801 + msgid "ISO C++ forbids array dimensions with parenthesized type in new" + msgstr "" + + #: parse.y:3082 parse.y:3102 parse.y:3111 parse.y:3140 + #, fuzzy + msgid "`%T' is not a class or namespace" + msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï" + + #: parse.y:3307 + msgid "ISO C++ forbids label declarations" + msgstr "" + + #: parse.y:3462 + msgid "ISO C++ forbids computed gotos" + msgstr "" + + #: parse.y:3470 + msgid "label must be followed by statement" + msgstr "" + + #: parse.y:3566 + msgid "ISO C++ forbids compound statements inside for initializations" + msgstr "" + + #. This helps us recover from really nasty + #. parse errors, for example, a missing right + #. parenthesis. + #: parse.y:3651 parse.y:3661 + msgid "possibly missing ')'" + msgstr "" + + #: parse.y:3758 + msgid "type specifier omitted for parameter" + msgstr "" + + #: parse.y:3767 + #, c-format + msgid "`%E' is not a type, use `typename %E' to make it one" + msgstr "" + + #: parse.y:3769 + #, fuzzy + msgid "no type `%D' in `%T'" + msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'" + + #: parse.y:3772 + #, c-format + msgid "type specifier omitted for parameter `%E'" + msgstr "" + + #: parse.y:3780 + msgid "'%D' is used as a type, but is not defined as a type." + msgstr "" + + #: /usr/share/bison/bison.simple:817 + #, fuzzy + msgid "parse error; also virtual memory exhausted" + msgstr "óöÜëìá åðåîåñãáóßáò· åðßóçò ç ìíÞìç åîáíôëÞèçêå" + + #: cp/pt.c:208 + msgid "data member `%D' cannot be a member template" + msgstr "" + + #: cp/pt.c:220 + #, fuzzy + msgid "invalid member template declaration `%D'" + msgstr "ìç Ýãêõñïò áñéèìüò áðü êåíÝò ãñáììÝò: `%s'" + + #: cp/pt.c:615 + msgid "explicit specialization in non-namespace scope `%D'" + msgstr "" + + #: cp/pt.c:627 + msgid "enclosing class templates are not explicitly specialized" + msgstr "" + + #: cp/pt.c:702 + msgid "specializing `%#T' in different namespace" + msgstr "" + + #: cp/pt.c:703 + #, fuzzy + msgid " from definition of `%#D'" + msgstr "êáíÝíáò ïñéóìüò ôïõ `UNDEFINED'" + + #: cp/pt.c:711 + msgid "specialization of `%T' after instantiation" + msgstr "" + + #: cp/pt.c:714 + msgid "explicit specialization of non-template `%T'" + msgstr "" + + #: cp/pt.c:846 + msgid "specialization of %D after instantiation" + msgstr "" + + #: cp/pt.c:949 + msgid "%s %+#D" + msgstr "" + + #: cp/pt.c:1000 + msgid "`%D' is not a function template" + msgstr "" + + #: cp/pt.c:1123 + msgid "template-id `%D' for `%+D' does not match any template declaration" + msgstr "" + + #: cp/pt.c:1131 + msgid "ambiguous template specialization `%D' for `%+D'" + msgstr "" + + #. This case handles bogus declarations like template <> + #. template void f(); + #: cp/pt.c:1358 cp/pt.c:1432 + msgid "template-id `%D' in declaration of primary template" + msgstr "" + + #: cp/pt.c:1371 + msgid "template parameter list used in explicit instantiation" + msgstr "" + + #: cp/pt.c:1377 + msgid "definition provided for explicit instantiation" + msgstr "" + + #: cp/pt.c:1383 + msgid "too many template parameter lists in declaration of `%D'" + msgstr "" + + #: cp/pt.c:1399 + msgid "too few template parameter lists in declaration of `%D'" + msgstr "" + + #: cp/pt.c:1416 + msgid "explicit specialization not preceded by `template <>'" + msgstr "" + + #: cp/pt.c:1429 + msgid "partial specialization `%D' of function template" + msgstr "" + + #: cp/pt.c:1461 + msgid "default argument specified in explicit specialization" + msgstr "" + + #: cp/pt.c:1465 + msgid "template specialization with C linkage" + msgstr "" + + #. From [temp.expl.spec]: + #. + #. If such an explicit specialization for the member + #. of a class template names an implicitly-declared + #. special member function (clause _special_), the + #. program is ill-formed. + #. + #. Similar language is found in [temp.explicit]. + #: cp/pt.c:1553 + msgid "specialization of implicitly-declared special member function" + msgstr "" + + #: cp/pt.c:1596 + msgid "no member function `%D' declared in `%T'" + msgstr "" + + #. There are two many template parameter lists. + #: cp/pt.c:1744 + msgid "too many template parameter lists in declaration of `%T'" + msgstr "" + + #: cp/pt.c:1840 + msgid " shadows template parm `%#D'" + msgstr "" + + #: cp/pt.c:2244 + msgid "template parameters not used in partial specialization:" + msgstr "" + + #: cp/pt.c:2248 + msgid " `%D'" + msgstr " `%D'" + + #: cp/pt.c:2260 + msgid "partial specialization `%T' does not specialize any template arguments" + msgstr "" + + #: cp/pt.c:2285 + #, c-format + msgid "template argument `%E' involves template parameter(s)" + msgstr "" + + #: cp/pt.c:2328 + msgid "type `%T' of template argument `%E' depends on template parameter(s)" + msgstr "" + + #: cp/pt.c:2416 + #, fuzzy + msgid "no default argument for `%D'" + msgstr "Ç ðáñÜìåôñïò `%s' äåí åßíáé Ýãêõñç." + + #: cp/pt.c:2549 + msgid "template with C linkage" + msgstr "" + + #: cp/pt.c:2552 + #, fuzzy + msgid "template class without a name" + msgstr "ìç ôåñìáôéæüìåíï üíïìá âÜñïõò" + + #: cp/pt.c:2627 + msgid "`%D' does not declare a template type" + msgstr "" + + #: cp/pt.c:2633 + #, fuzzy + msgid "template definition of non-template `%#D'" + msgstr "áäõíáìßá áíïßãìáôïò áñ÷åßïõ ïñéóìïý locale `%s'" + + #: cp/pt.c:2674 + msgid "expected %d levels of template parms for `%#D', got %d" + msgstr "" + + #: cp/pt.c:2686 + msgid "got %d template parameters for `%#D'" + msgstr "" + + #: cp/pt.c:2689 + msgid "got %d template parameters for `%#T'" + msgstr "" + + #: cp/pt.c:2691 + #, c-format + msgid " but %d required" + msgstr " áëëÜ %d áðáéôïýíôáé" + + #: cp/pt.c:2759 + #, fuzzy + msgid "`%T' is not a template type" + msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï" + + #: cp/pt.c:2775 + msgid "previous declaration `%D'" + msgstr "" + + #: cp/pt.c:2776 + #, c-format + msgid "used %d template parameter%s instead of %d" + msgstr "" + + #: cp/pt.c:2792 + #, fuzzy + msgid "template parameter `%#D'" + msgstr "äéðëü üíïìá ÷áñáêôÞñá `%s'" + + #: cp/pt.c:2793 + msgid "redeclared here as `%#D'" + msgstr "" + + #. We have in [temp.param]: + #. + #. A template-parameter may not be given default arguments + #. by two different declarations in the same scope. + #: cp/pt.c:2803 + msgid "redefinition of default argument for `%#D'" + msgstr "" + + #: cp/pt.c:2804 + msgid " original definition appeared here" + msgstr "" + + #: cp/pt.c:2897 + #, fuzzy, c-format + msgid "`%E' is not a valid template argument" + msgstr "%s' äåí åßíáé éó÷ýùí èåôéêüò áêÝñáéïò." + + #: cp/pt.c:2901 + msgid "it must be the address of a function with external linkage" + msgstr "" + + #: cp/pt.c:2903 + msgid "it must be the address of an object with external linkage" + msgstr "" + + #: cp/pt.c:2907 + msgid "it must be a pointer-to-member of the form `&X::Y'" + msgstr "" + + #: cp/pt.c:2918 + #, c-format + msgid "string literal %E is not a valid template argument because it is the address of an object with static linkage" + msgstr "" + + #: cp/pt.c:2930 + #, c-format + msgid "address of non-extern `%E' cannot be used as template argument" + msgstr "" + + #: cp/pt.c:2941 + #, c-format + msgid "non-constant `%E' cannot be used as template argument" + msgstr "" + + #: cp/pt.c:2948 + #, c-format + msgid "object `%E' cannot be used as template argument" + msgstr "" + + #: cp/pt.c:3328 + #, c-format + msgid "to refer to a type member of a template parameter, use `typename %E'" + msgstr "" + + #: cp/pt.c:3341 cp/pt.c:3357 cp/pt.c:3396 + msgid "type/value mismatch at argument %d in template parameter list for `%D'" + msgstr "" + + #: cp/pt.c:3344 + msgid " expected a constant of type `%T', got `%T'" + msgstr "" + + #: cp/pt.c:3348 + #, fuzzy, c-format + msgid " expected a type, got `%E'" + msgstr "%s: áíáìåíüôáí áêÝñáéïò ìåôÜ ôï `%c'" + + #: cp/pt.c:3360 + #, fuzzy + msgid " expected a type, got `%T'" + msgstr "%s: áíáìåíüôáí áêÝñáéïò ìåôÜ ôï `%c'" + + #: cp/pt.c:3362 + msgid " expected a class template, got `%T'" + msgstr "" + + #: cp/pt.c:3398 + msgid " expected a template of type `%D', got `%D'" + msgstr "" + + #: cp/pt.c:3420 + msgid "template-argument `%T' uses anonymous type" + msgstr "" + + #: cp/pt.c:3423 + msgid "template-argument `%T' uses local type `%T'" + msgstr "" + + #: cp/pt.c:3458 + msgid "could not convert template argument `%E' to `%T'" + msgstr "" + + #: cp/pt.c:3502 + #, fuzzy, c-format + msgid "wrong number of template arguments (%d, should be %d)" + msgstr "ëÜèïò áñéèìüò ïñéóìÜôùí" + + #: cp/pt.c:3506 + msgid "provided for `%D'" + msgstr "" + + #: cp/pt.c:3553 + #, fuzzy, c-format + msgid "template argument %d is invalid" + msgstr "Ý÷ïõí ðáñáëçöèåß ïñßóìáôá" + + #: cp/pt.c:3785 + msgid "non-template used as template" + msgstr "" + + #: cp/pt.c:3903 + #, fuzzy + msgid "`%T' is not a template" + msgstr "ôï `%s' äåí åßíáé êáíïíéêü áñ÷åßï" + + #: cp/pt.c:3916 + msgid "non-template type `%T' used as a template" + msgstr "" + + #: cp/pt.c:3918 + msgid "for template declaration `%D'" + msgstr "" + + #: cp/pt.c:4481 + msgid "template instantiation depth exceeds maximum of %d (use -ftemplate-depth-NN to increase the maximum) instantiating `%D'" + msgstr "" + + #: cp/pt.c:4916 + msgid "ambiguous class template instantiation for `%#T'" + msgstr "" + + #: cp/pt.c:4923 + msgid "%s %+#T" + msgstr "" + + #: cp/pt.c:5942 cp/pt.c:6056 + msgid "instantiation of `%D' as type `%T'" + msgstr "" + + #: cp/pt.c:6098 + #, fuzzy + msgid "invalid parameter type `%T'" + msgstr "Ìç Ýãêõñç ðñïôåñáéüôçôá `%s'" + + #: cp/pt.c:6100 + msgid "in declaration `%D'" + msgstr "" + + #: cp/pt.c:6175 + msgid "creating pointer to member function of non-class type `%T'" + msgstr "" + + #: cp/pt.c:6338 + msgid "creating array with size zero" + msgstr "" + + #: cp/pt.c:6352 + #, c-format + msgid "creating array with size zero (`%E')" + msgstr "" + + #: cp/pt.c:6590 + msgid "forming reference to void" + msgstr "" + + #: cp/pt.c:6592 + msgid "forming %s to reference type `%T'" + msgstr "" + + #: cp/pt.c:6630 + msgid "creating pointer to member of non-class type `%T'" + msgstr "" + + #: cp/pt.c:6637 + #, fuzzy + msgid "creating pointer to member reference type `%T'" + msgstr "äåí åßóôå ìÝëïò ôçò ïìÜäáò `%s'" + + #: cp/pt.c:6715 + #, fuzzy + msgid "creating array of `%T'" + msgstr "äçìéïõñãßá áñ÷åßïõ `%s'\n" + + #: cp/pt.c:6761 + msgid "`%T' is not a class, struct, or union type" + msgstr "" + + #: cp/pt.c:6873 + #, c-format + msgid "use of `%s' in template" + msgstr "" + + #: cp/pt.c:7630 + msgid "type `%T' composed from a local class is not a valid template-argument" + msgstr "" + + #: cp/pt.c:7631 + msgid " trying to instantiate `%D'" + msgstr "" + + #: cp/pt.c:8061 + #, fuzzy + msgid "incomplete type unification" + msgstr "Ìåôáãëùôôéóìüò ðñïäéáãñáöþí ôïðéêþí ñõèìßóåùí" + + #: cp/pt.c:9016 + #, c-format + msgid "use of `%s' in template type unification" + msgstr "" + + #: cp/pt.c:9438 cp/pt.c:9506 + msgid "explicit instantiation of non-template `%#D'" + msgstr "" + + #: cp/pt.c:9454 cp/pt.c:9501 + #, fuzzy + msgid "no matching template for `%D' found" + msgstr "Ï Ýëåã÷ïò ìïíïðáôéïý ãéá ôï `%s' âñÞêå `%s'" + + #: cp/pt.c:9460 + msgid "explicit instantiation of `%#D'" + msgstr "" + + #. [temp.spec] + #. + #. No program shall both explicitly instantiate and explicitly + #. specialize a template. + #: cp/pt.c:9477 + msgid "explicit instantiation of `%#D' after" + msgstr "" + + #: cp/pt.c:9478 cp/pt.c:9615 + msgid "explicit specialization here" + msgstr "" + + #: cp/pt.c:9493 + #, fuzzy + msgid "duplicate explicit instantiation of `%#D'" + msgstr "äéðëüò ïñéóìüò óõíüëïõ" + + #: cp/pt.c:9518 + msgid "ISO C++ forbids the use of `extern' on explicit instantiations" + msgstr "" + + #: cp/pt.c:9522 cp/pt.c:9600 + msgid "storage class `%D' applied to template instantiation" + msgstr "" + + #: cp/pt.c:9567 + msgid "explicit instantiation of non-template type `%T'" + msgstr "" + + #: cp/pt.c:9581 + msgid "explicit instantiation of `%#T' before definition of template" + msgstr "" + + #: cp/pt.c:9589 + #, c-format + msgid "ISO C++ forbids the use of `%s' on explicit instantiations" + msgstr "" + + #: cp/pt.c:9614 + msgid "explicit instantiation of `%#T' after" + msgstr "" + + #: cp/pt.c:9632 + #, fuzzy + msgid "duplicate explicit instantiation of `%#T'" + msgstr "äéðëüò ïñéóìüò óõíüëïõ" + + #: cp/pt.c:9973 + msgid "explicit instantiation of `%D' but no definition available" + msgstr "" + + #: cp/pt.c:10345 + #, fuzzy + msgid "`%#T' is not a valid type for a template constant parameter" + msgstr "%s' äåí åßíáé éó÷ýùí èåôéêüò áêÝñáéïò." + + #: cp/repo.c:272 + msgid "-frepo must be used with -c" + msgstr "" + + #: cp/repo.c:366 + #, c-format + msgid "mysterious repository information in %s" + msgstr "" + + #: cp/repo.c:381 + #, fuzzy, c-format + msgid "can't create repository information file `%s'" + msgstr "áäõíáìßá áíïßãìáôïò áñ÷åßïõ ïñéóìïý locale `%s'" + + #: cp/rtti.c:200 + #, fuzzy + msgid "cannot use typeid with -fno-rtti" + msgstr "Äåí åßíáé äõíáôü íá ÷ñçóéìïðïéçèåß ç åðéëïãÞ -a ÷ùñßò ôï -n" + + #: cp/rtti.c:206 + msgid "must #include before using typeid" + msgstr "" + + #: cp/rtti.c:280 + msgid "cannot create type information for type `%T' because its size is variable" + msgstr "" + + #: cp/rtti.c:525 cp/rtti.c:539 + msgid "dynamic_cast of `%#D' to `%#T' can never succeed" + msgstr "" + + #: cp/rtti.c:614 + msgid "cannot dynamic_cast `%E' (of type `%#T') to type `%#T' (%s)" + msgstr "" + + #: cp/search.c:340 + #, fuzzy + msgid "`%T' is an inaccessible base of `%T'" + msgstr "ôï `%s' åßíáé ðñüãïíïò ôïõ `%s'" + + #: cp/search.c:350 + #, fuzzy + msgid "`%T' is an ambiguous base of `%T'" + msgstr "ôï `%s' åßíáé ðñüãïíïò ôïõ `%s'" + + #: cp/search.c:1826 + msgid "adjusting pointers for covariant returns" + msgstr "" + + #: cp/search.c:1830 cp/search.c:1837 + #, fuzzy + msgid "invalid covariant return type for `%#D'" + msgstr "ìç Ýãêõñïò ÷áñáêôÞñáò `%c' óôï ôýðï áëöáñéèìçôéêïý `%s'" + + #: cp/search.c:1831 + msgid " overriding `%#D' (must be pointer or reference to class)" + msgstr "" + + #: cp/search.c:1838 + msgid " overriding `%#D' (must use pointer or reference)" + msgstr "" + + #: cp/search.c:1843 + msgid "conflicting return type specified for `%#D'" + msgstr "" + + #: cp/search.c:1844 + #, fuzzy + msgid " overriding `%#D'" + msgstr "áíôéãñÜöåôáé áðü ðÜíù" + + #: cp/search.c:1853 + msgid "looser throw specifier for `%#F'" + msgstr "" + + #: cp/search.c:1854 + #, fuzzy + msgid " overriding `%#F'" + msgstr "áíôéãñÜöåôáé áðü ðÜíù" + + #. A static member function cannot match an inherited + #. virtual member function. + #: cp/search.c:1944 + #, fuzzy + msgid "`%#D' cannot be declared" + msgstr "Äåí ìðïñåß íá ôåèåß ç çìåñïìçíßá." + + #: cp/search.c:1945 + msgid " since `%#D' declared in base class" + msgstr "" + + #: cp/search.c:2130 + msgid "`%#D' needs a final overrider" + msgstr "" + + #: cp/semantics.c:903 + #, c-format + msgid "type of asm operand `%E' could not be determined" + msgstr "" + + #: cp/semantics.c:1045 + msgid "ISO C++ does not permit named return values" + msgstr "" + + #: cp/semantics.c:1054 + msgid "return identifier `%D' already in place" + msgstr "" + + #: cp/semantics.c:1062 + msgid "can't redefine default return value for constructors" + msgstr "" + + #: cp/semantics.c:1129 + msgid "base initializer for `%T'" + msgstr "" + + #: cp/semantics.c:1131 + msgid " will be re-ordered to precede member initializations" + msgstr "" + + #: cp/semantics.c:1319 + msgid "`this' is unavailable for static member functions" + msgstr "" + + #: cp/semantics.c:1325 + msgid "invalid use of `this' in non-member function" + msgstr "" + + #: cp/semantics.c:1327 + msgid "invalid use of `this' at top level" + msgstr "" + + #: cp/semantics.c:1365 + msgid "calling type `%T' like a method" + msgstr "" + + #: cp/semantics.c:1401 + msgid "destructor specifier `%T::~%T()' must have matching names" + msgstr "" + + #: cp/semantics.c:1407 + #, fuzzy + msgid "`%E' is not of type `%T'" + msgstr "ôï `%s' åßíáé ðñüãïíïò ôïõ `%s'" + + #: cp/semantics.c:1619 + msgid "template type parameters must use the keyword `class' or `typename'" + msgstr "" + + #: cp/semantics.c:1678 + msgid "definition of `%#T' inside template parameter list" + msgstr "" + + #: cp/semantics.c:1694 + #, fuzzy + msgid "invalid definition of qualified type `%T'" + msgstr "ìç Ýãêõñïò áñéèìüò áñ÷åßïõ óôç äÞëùóç ðåäßïõ: `%s'" + + #: cp/semantics.c:2046 + msgid "base class `%T' has cv qualifiers" + msgstr "" + + #: cp/semantics.c:2079 + msgid "multiple declarators in template declaration" + msgstr "" + + #: cp/spew.c:245 + #, c-format + msgid "identifier name `%s' conflicts with GNU C++ internal naming strategy" + msgstr "" + + #: cp/spew.c:1020 cp/spew.c:1292 + msgid "parse error at end of saved function text" + msgstr "" + + #: cp/spew.c:1062 + #, fuzzy + msgid "parse error in method specification" + msgstr "óõíôáêôéêü óöÜëìá óôïí êáèïñéóìü óåéñÜò" + + #: cp/spew.c:1104 + msgid "function body for constructor missing" + msgstr "" + + #: cp/spew.c:1371 + msgid "circular dependency in default args of `%#D'" + msgstr "" + + #: cp/spew.c:1435 + #, fuzzy + msgid "invalid type `%T' for default argument to `%T'" + msgstr "Ìç Ýãêõñç áêÝñáéá ðáñÜìåôñïò `%s'" + + #: cp/spew.c:1495 + #, c-format + msgid "%s before `%s'" + msgstr "%s ðñéí áðü `%s'" + + #: cp/spew.c:1497 + #, c-format + msgid "%s before `%c'" + msgstr "%s ðñéí áðü `%c'" + + #: cp/spew.c:1499 + #, c-format + msgid "%s before `\\%o'" + msgstr "%s ðñéí áðü `\\%o'" + + #: cp/spew.c:1502 + #, fuzzy, c-format + msgid "%s before `%s' token" + msgstr "%s (ãéá êáíïíéêÞ Ýêöñáóç `%s')" + + #: cp/tree.c:224 + #, c-format + msgid "non-lvalue in %s" + msgstr "" + + #: cp/tree.c:536 + msgid "`%T' cannot be `restrict'-qualified" + msgstr "" + + #: cp/tree.c:547 + msgid "`%T' cannot be `const'-, `volatile'-, or `restrict'-qualified" + msgstr "" + + #: cp/tree.c:1888 + #, c-format + msgid "`%s' attribute can only be applied to Java class definitions" + msgstr "" + + #: cp/tree.c:1918 + #, c-format + msgid "`%s' attribute can only be applied to class definitions" + msgstr "" + + #: cp/tree.c:1924 + #, c-format + msgid "`%s' is obsolete; g++ vtables are now COM-compatible by default" + msgstr "" + + #: cp/tree.c:1949 + msgid "requested init_priority is not an integer constant" + msgstr "" + + #: cp/tree.c:1970 + #, c-format + msgid "can only use `%s' attribute on file-scope definitions of objects of class type" + msgstr "" + + #: cp/tree.c:1978 + msgid "requested init_priority is out of range" + msgstr "" + + #: cp/tree.c:1988 + msgid "requested init_priority is reserved for internal use" + msgstr "" + + #: cp/tree.c:1998 + #, fuzzy, c-format + msgid "`%s' attribute is not supported on this platform" + msgstr "ðñïåéäïðïßçóç: ôï --pid=PID äåí õðïóôçñßæåôáé óå áõôü ôï óýóôçìá" + + #: cp/typeck.c:480 + #, c-format + msgid "ISO C++ forbids %s between pointer of type `void *' and pointer-to-function" + msgstr "" + + #: cp/typeck.c:501 + msgid "%s between distinct pointer types `%T' and `%T' lacks a cast" + msgstr "" + + #: cp/typeck.c:1485 + msgid "ISO C++ prohibits conversion from `%#T' to `(...)'" + msgstr "" + + #: cp/typeck.c:1555 + msgid "ISO C++ forbids applying `sizeof' to a function type" + msgstr "" + + #: cp/typeck.c:1561 + msgid "ISO C++ forbids applying `sizeof' to a member function" + msgstr "" + + #: cp/typeck.c:1567 + msgid "ISO C++ forbids applying `sizeof' to type `void' which is an incomplete type" + msgstr "" + + #: cp/typeck.c:1581 + msgid "`sizeof' applied to non-static member" + msgstr "" + + #: cp/typeck.c:1586 + msgid "`sizeof' applied to incomplete type `%T'" + msgstr "" + + #: cp/typeck.c:1616 + msgid "sizeof applied to a bit-field" + msgstr "" + + #: cp/typeck.c:1619 + msgid "ISO C++ forbids applying `sizeof' to an expression of function type" + msgstr "" + + #: cp/typeck.c:1766 + #, fuzzy + msgid "invalid use of non-lvalue array" + msgstr "ìç Ýãêõñç þñá ôçò ìÝñáò" + + #: cp/typeck.c:1872 + msgid "deprecated conversion from string constant to `%T'" + msgstr "" + + #: cp/typeck.c:1890 + msgid "request for member `%T::%D' in expression of non-aggregate type `%T'" + msgstr "" + + #: cp/typeck.c:2083 + msgid "destructor specifier `%T::~%T' must have matching names" + msgstr "" + + #: cp/typeck.c:2089 + #, fuzzy + msgid "type `%T' has no destructor" + msgstr "Ôï `%s' äåí åßíáé êáôÜëïãïò." + + #: cp/typeck.c:2106 cp/typeck.c:2188 + #, fuzzy + msgid "invalid use of type decl `%#D' as expression" + msgstr "Ìç Ýãêõñç ðñïðïñåõüìåíç êáíïíéêÞ Ýêöñáóç" + + #: cp/typeck.c:2111 + #, fuzzy + msgid "invalid use of template `%#D' as expression" + msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç" + + #: cp/typeck.c:2179 + msgid "`%#T' has no member named `%D'" + msgstr "" + + #: cp/typeck.c:2223 + msgid "invalid reference to NULL ptr, use ptr-to-member instead" + msgstr "" + + #. A pointer to incomplete type (other than cv void) can be + #. dereferenced [expr.unary.op]/1 + #: cp/typeck.c:2349 + #, fuzzy + msgid "`%T' is not a pointer-to-object type" + msgstr "Ôï `%s' äåí åßíáé êáôÜëïãïò." + + #: cp/typeck.c:2376 + #, c-format + msgid "invalid use of `%s' on pointer to member" + msgstr "" + + #: cp/typeck.c:2382 + #, fuzzy + msgid "invalid type argument" + msgstr "Ìç Ýãêõñç ðáñÜìåôñïò" + + #: cp/typeck.c:2485 + msgid "ISO C++ forbids subscripting non-lvalue array" + msgstr "" + + #: cp/typeck.c:2496 + msgid "subscripting array declared `register'" + msgstr "" + + #: cp/typeck.c:2671 cp/typeck.c:2821 + msgid "pointer to member function called, but not in class scope" + msgstr "" + + #: cp/typeck.c:2695 + msgid "object missing in call to method `%D'" + msgstr "" + + #: cp/typeck.c:2739 + msgid "function `%D' declared overloaded, but no definitions appear with which to resolve it?!?" + msgstr "" + + #: cp/typeck.c:2819 + msgid "invalid call to member function needing `this' in static member function scope" + msgstr "" + + #: cp/typeck.c:3003 + msgid "ISO C++ forbids calling `::main' from within program" + msgstr "" + + #: cp/typeck.c:3028 + #, c-format + msgid "must use .* or ->* to call pointer-to-member function in `%E (...)'" + msgstr "" + + #: cp/typeck.c:3041 + #, c-format + msgid "`%E' cannot be used as a function" + msgstr "" + + #: cp/typeck.c:3166 + #, fuzzy + msgid "too many arguments to %s `%+#D'" + msgstr "ðÜñá ðïëëÜ ïñßóìáôá" + + #: cp/typeck.c:3207 + msgid "parameter type of called function is incomplete" + msgstr "" + + #: cp/typeck.c:3274 + #, fuzzy + msgid "too few arguments to %s `%+#D'" + msgstr "ðïëý ëßãá ïñßóìáôá" + + #: cp/typeck.c:3402 cp/typeck.c:3412 + msgid "assuming cast to type `%T' from overloaded function" + msgstr "" + + #: cp/typeck.c:3472 + #, c-format + msgid "division by zero in `%E / 0'" + msgstr "" + + #: cp/typeck.c:3474 + #, c-format + msgid "division by zero in `%E / 0.'" + msgstr "" + + #: cp/typeck.c:3529 + #, fuzzy, c-format + msgid "division by zero in `%E %% 0'" + msgstr "Äéáßñåóç ìå ìçäÝí óôçí áðïôßìçóç: %s" + + #: cp/typeck.c:3531 + #, fuzzy, c-format + msgid "division by zero in `%E %% 0.'" + msgstr "Äéáßñåóç ìå ìçäÝí óôçí áðïôßìçóç: %s" + + #: cp/typeck.c:3611 + #, c-format + msgid "%s rotate count is negative" + msgstr "" + + #: cp/typeck.c:3614 + #, c-format + msgid "%s rotate count >= width of type" + msgstr "" + + #: cp/typeck.c:3645 cp/typeck.c:3650 cp/typeck.c:3741 cp/typeck.c:3746 + msgid "ISO C++ forbids comparison between pointer and integer" + msgstr "" + + #: cp/typeck.c:3926 + msgid "comparison between types `%#T' and `%#T'" + msgstr "" + + #: cp/typeck.c:3962 + msgid "comparison between signed and unsigned integer expressions" + msgstr "" + + #: cp/typeck.c:4027 + msgid "invalid operands of types `%T' and `%T' to binary `%O'" + msgstr "" + + #. Some sort of arithmetic operation involving NULL was + #. performed. Note that pointer-difference and pointer-addition + #. have already been handled above, and so we don't end up here in + #. that case. + #: cp/typeck.c:4049 + msgid "NULL used in arithmetic" + msgstr "" + + #: cp/typeck.c:4101 + msgid "ISO C++ forbids using pointer of type `void *' in pointer arithmetic" + msgstr "" + + #: cp/typeck.c:4107 + msgid "ISO C++ forbids using a pointer-to-function in pointer arithmetic" + msgstr "" + + #: cp/typeck.c:4113 + msgid "ISO C++ forbids using a pointer to member function in pointer arithmetic" + msgstr "" + + #: cp/typeck.c:4119 + msgid "ISO C++ forbids using pointer to a member in pointer arithmetic" + msgstr "" + + #: cp/typeck.c:4190 + msgid "ISO C++ forbids using pointer of type `void *' in subtraction" + msgstr "" + + #: cp/typeck.c:4192 + msgid "ISO C++ forbids using pointer to a function in subtraction" + msgstr "" + + #: cp/typeck.c:4194 + msgid "ISO C++ forbids using pointer to a method in subtraction" + msgstr "" + + #: cp/typeck.c:4196 + msgid "ISO C++ forbids using pointer to a member in subtraction" + msgstr "" + + #: cp/typeck.c:4208 + msgid "invalid use of a pointer to an incomplete type in pointer arithmetic" + msgstr "" + + #: cp/typeck.c:4245 + msgid "attempt to take address of bit-field structure member `%D'" + msgstr "" + + #: cp/typeck.c:4322 + msgid "taking address of temporary" + msgstr "" + + #: cp/typeck.c:4524 + #, c-format + msgid "ISO C++ forbids %sing an enum" + msgstr "" + + #: cp/typeck.c:4536 + msgid "cannot %s a pointer to incomplete type `%T'" + msgstr "" + + #: cp/typeck.c:4543 + msgid "ISO C++ forbids %sing a pointer of type `%T'" + msgstr "" + + #: cp/typeck.c:4568 + msgid "cast to non-reference type used as lvalue" + msgstr "" + + #: cp/typeck.c:4602 + #, fuzzy + msgid "invalid use of `--' on bool variable `%D'" + msgstr "ìç Ýãêõñïò áñéèìüò áðü êåíÝò ãñáììÝò: `%s'" + + #. ARM $3.4 + #: cp/typeck.c:4635 + msgid "ISO C++ forbids taking address of function `::main'" + msgstr "" + + #. An expression like &memfn. + #: cp/typeck.c:4702 + msgid "ISO C++ forbids taking the address of an unqualified non-static member function to form a pointer to member function. Say `&%T::%D'" + msgstr "" + + #: cp/typeck.c:4704 + msgid "ISO C++ forbids taking the address of a bound member function to form a pointer to member function. Say `&%T::%D'" + msgstr "" + + #: cp/typeck.c:4728 + msgid "ISO C++ forbids taking the address of a cast to a non-lvalue expression" + msgstr "" + + #: cp/typeck.c:4744 + msgid "unary `&'" + msgstr "" + + #: cp/typeck.c:4864 + msgid "taking address of destructor" + msgstr "" + + #: cp/typeck.c:4877 + msgid "taking address of bound pointer-to-member expression" + msgstr "" + + #: cp/typeck.c:4893 + #, fuzzy + msgid "cannot create pointer to reference member `%D'" + msgstr "äåí åßíáé äõíáôüí íá ãßíåé `stat' ôï locale áñ÷åßï `%s'" + + #: cp/typeck.c:4961 + msgid "cannot take the address of `this', which is an rvalue expression" + msgstr "" + + #: cp/typeck.c:4977 + msgid "address requested for `%D', which is declared `register'" + msgstr "" + + #: cp/typeck.c:5181 + msgid "static_cast from type `%T' to type `%T' casts away constness" + msgstr "" + + #: cp/typeck.c:5189 + #, fuzzy + msgid "invalid static_cast from type `%T' to type `%T'" + msgstr "ìç Ýãêõñïò ÷áñáêôÞñáò `%c' óôï ôýðï áëöáñéèìçôéêïý `%s'" + + #: cp/typeck.c:5228 + msgid "invalid reinterpret_cast of an rvalue expression of type `%T' to type `%T'" + msgstr "" + + #: cp/typeck.c:5248 + msgid "reinterpret_cast from `%T' to `%T' loses precision" + msgstr "" + + #: cp/typeck.c:5261 + msgid "reinterpret_cast from `%T' to `%T' casts away const (or volatile)" + msgstr "" + + #: cp/typeck.c:5270 + msgid "ISO C++ forbids casting between pointer-to-function and pointer-to-object" + msgstr "" + + #: cp/typeck.c:5276 + msgid "invalid reinterpret_cast from type `%T' to type `%T'" + msgstr "" + + #: cp/typeck.c:5303 + msgid "invalid use of const_cast with type `%T', which is not a pointer, reference, nor a pointer-to-data-member type" + msgstr "" + + #: cp/typeck.c:5306 + msgid "invalid use of const_cast with type `%T', which is a pointer or reference to a function type" + msgstr "" + + #: cp/typeck.c:5329 + msgid "invalid const_cast of an rvalue of type `%T' to type `%T'" + msgstr "" + + #: cp/typeck.c:5345 + #, fuzzy + msgid "invalid const_cast from type `%T' to type `%T'" + msgstr "ìç Ýãêõñïò ÷áñáêôÞñáò `%c' óôï ôýðï áëöáñéèìçôéêïý `%s'" + + #: cp/typeck.c:5387 cp/typeck.c:5392 + msgid "ISO C++ forbids casting to an array type `%T'" + msgstr "" + + #: cp/typeck.c:5400 + #, fuzzy + msgid "invalid cast to function type `%T'" + msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'" + + #: cp/typeck.c:5452 + msgid "cast from `%T' to `%T' discards qualifiers from pointer target type" + msgstr "" + + #: cp/typeck.c:5498 + msgid "cast from `%T' to `%T' increases required alignment of target type" + msgstr "" + + #: cp/typeck.c:5667 + msgid " in evaluation of `%Q(%#T, %#T)'" + msgstr "" + + #: cp/typeck.c:5709 + msgid "ISO C++ forbids cast to non-reference type used as lvalue" + msgstr "" + + #: cp/typeck.c:5782 + msgid "incompatible types in assignment of `%T' to `%T'" + msgstr "" + + #: cp/typeck.c:5789 + msgid "ISO C++ forbids assignment of arrays" + msgstr "" + + #: cp/typeck.c:5932 + msgid " in pointer to member function conversion" + msgstr "" + + #: cp/typeck.c:5940 + msgid " in pointer to member conversion" + msgstr "" + + #. This is a reinterpret cast, we choose to do nothing. + #: cp/typeck.c:5951 cp/typeck.c:5970 + msgid "pointer to member cast via virtual base `%T' of `%T'" + msgstr "" + + #: cp/typeck.c:5974 + msgid "pointer to member conversion via virtual base `%T' of `%T'" + msgstr "" + + #: cp/typeck.c:6044 + msgid "invalid conversion to type `%T' from type `%T'" + msgstr "" + + #: cp/typeck.c:6209 + msgid "passing NULL used for non-pointer %s %P of `%D'" + msgstr "" + + #: cp/typeck.c:6212 + msgid "%s to non-pointer type `%T' from NULL" + msgstr "" + + #: cp/typeck.c:6220 + msgid "passing `%T' for %s %P of `%D'" + msgstr "" + + #: cp/typeck.c:6223 + msgid "%s to `%T' from `%T'" + msgstr "" + + #: cp/typeck.c:6233 + msgid "passing negative value `%E' for %s %P of `%D'" + msgstr "" + + #: cp/typeck.c:6236 + msgid "%s of negative value `%E' to `%T'" + msgstr "" + + #: cp/typeck.c:6323 + msgid "cannot convert `%T' to `%T' for argument `%P' to `%D'" + msgstr "" + + #: cp/typeck.c:6326 + #, fuzzy + msgid "cannot convert `%T' to `%T' in %s" + msgstr "äåí åßíáé äõíáôü íá äçìéïõñãçèåß ôï %s `%s' óôï `%s'" + + #: cp/typeck.c:6413 cp/typeck.c:6415 + #, fuzzy + msgid "in passing argument %P of `%+D'" + msgstr "Ëåßðåé ðáñÜìåôñïò ãéá `%s'" + + #: cp/typeck.c:6529 + #, fuzzy + msgid "returning reference to temporary" + msgstr "xdr_reference: ç ìíÞìç åîáíôëÞèçêå\n" + + #: cp/typeck.c:6536 + msgid "reference to non-lvalue returned" + msgstr "" + + #: cp/typeck.c:6548 + msgid "reference to local variable `%D' returned" + msgstr "" + + #: cp/typeck.c:6551 + msgid "address of local variable `%D' returned" + msgstr "" + + #: cp/typeck.c:6582 + msgid "returning a value from a destructor" + msgstr "" + + #. If a return statement appears in a handler of the + #. function-try-block of a constructor, the program is ill-formed. + #: cp/typeck.c:6590 + msgid "cannot return from a handler of a function-try-block of a constructor" + msgstr "" + + #. You can't return a value from a constructor. + #: cp/typeck.c:6593 + msgid "returning a value from a constructor" + msgstr "" + + #: cp/typeck.c:6610 + msgid "return-statement with no value, in function declared with a non-void return type" + msgstr "" + + #: cp/typeck.c:6626 + msgid "return-statement with a value, in function declared with a void return type" + msgstr "" + + #: cp/typeck.c:6647 + msgid "`operator new' must not return NULL unless it is declared `throw()' (or -fcheck-new is in effect)" + msgstr "" + + #: cp/typeck2.c:54 + msgid "type `%T' is not a base type for type `%T'" + msgstr "" + + #: cp/typeck2.c:151 + #, fuzzy + msgid "cannot declare variable `%D' to be of type `%T'" + msgstr "äåí åßíáé äõíáôü íá äçìéïõñãçèåß ôï %s `%s' óôï `%s'" + + #: cp/typeck2.c:154 + #, fuzzy + msgid "cannot declare parameter `%D' to be of type `%T'" + msgstr "äåí åßíáé äõíáôü íá äçìéïõñãçèåß ôï %s `%s' óôï `%s'" + + #: cp/typeck2.c:157 + #, fuzzy + msgid "cannot declare field `%D' to be of type `%T'" + msgstr "Üãíùóôïò ÷áñáêôÞñáò óôï ðåäßï `%s' ôçò êáôçãïñßáò `%s'" + + #: cp/typeck2.c:161 + msgid "invalid return type for member function `%#D'" + msgstr "" + + #: cp/typeck2.c:163 + #, fuzzy + msgid "invalid return type for function `%#D'" + msgstr "ìç Ýãêõñï åßäïò áëöáñéèìçôéêïý `%s'" + + #: cp/typeck2.c:166 + #, fuzzy + msgid "cannot allocate an object of type `%T'" + msgstr "áäõíáìßá áíÜãíùóçò êáôáëüãïõ locale `%s'" + + #: cp/typeck2.c:173 + msgid " because the following virtual functions are abstract:" + msgstr "" + + #: cp/typeck2.c:175 + msgid "\t%#D" + msgstr "" + + #: cp/typeck2.c:178 + msgid " since type `%T' has abstract virtual functions" + msgstr "" + + #: cp/typeck2.c:213 + #, fuzzy + msgid "invalid use of undefined type `%#T'" + msgstr "ìç Ýãêõñïò áñéèìüò áðü êåíÝò ãñáììÝò: `%s'" + + #: cp/typeck2.c:214 + msgid "forward declaration of `%#T'" + msgstr "" + + #: cp/typeck2.c:218 + #, fuzzy + msgid "invalid use of `%T'" + msgstr "Ìç Ýãêõñç çìåñïìçíßá `%s'." + + #: cp/typeck2.c:232 + msgid "invalid use of member (did you forget the `&' ?)" + msgstr "" + + #: cp/typeck2.c:236 + msgid "invalid use of template type parameter" + msgstr "" + + #: cp/typeck2.c:243 + msgid "address of overloaded function with no contextual type information" + msgstr "" + + #: cp/typeck2.c:245 + msgid "overloaded function with no contextual type information" + msgstr "" + + #: cp/typeck2.c:247 + msgid "insufficient contextual information to determine type" + msgstr "" + + #: cp/typeck2.c:270 + #, fuzzy, c-format + msgid "internal error #%d" + msgstr "Åóùôåñéêü óöÜëìá NIS" + + #: cp/typeck2.c:325 + msgid "constructor syntax used, but no constructor declared for type `%T'" + msgstr "" + + #: cp/typeck2.c:335 + msgid "initializer list construction invalid for derived class object `%D'" + msgstr "" + + #: cp/typeck2.c:337 + msgid "initializer list construction invalid for polymorphic class object `%D'" + msgstr "" + + #: cp/typeck2.c:340 cp/typeck2.c:346 cp/typeck2.c:352 + msgid "initializer list construction invalid for `%D'" + msgstr "" + + #: cp/typeck2.c:341 + msgid "due to the presence of a constructor" + msgstr "" + + #: cp/typeck2.c:347 cp/typeck2.c:353 + msgid "due to non-public access of member `%D'" + msgstr "" + + #: cp/typeck2.c:365 + msgid "comma expression used to initialize return value" + msgstr "" + + #: cp/typeck2.c:374 + msgid "cannot initialize arrays using this syntax" + msgstr "" + + #: cp/typeck2.c:436 + msgid "ISO C++ forbids non-constant aggregate initializer expressions" + msgstr "" + + #: cp/typeck2.c:516 + msgid "initializing array with parameter list" + msgstr "" + + #: cp/typeck2.c:572 + msgid "initializer for scalar variable requires one element" + msgstr "" + + #: cp/typeck2.c:579 + msgid "braces around scalar initializer for `%T'" + msgstr "" + + #: cp/typeck2.c:582 + msgid "ignoring extra initializers for `%T'" + msgstr "" + + #: cp/typeck2.c:594 + msgid "variable-sized object of type `%T' may not be initialized" + msgstr "" + + #: cp/typeck2.c:604 + msgid "subobject of type `%T' must be initialized by constructor, not by `%E'" + msgstr "" + + #: cp/typeck2.c:670 + msgid "aggregate has a partly bracketed initializer" + msgstr "" + + #: cp/typeck2.c:700 cp/typeck2.c:801 + msgid "non-trivial labeled initializers" + msgstr "" + + #: cp/typeck2.c:717 + msgid "non-empty initializer for array of empty elements" + msgstr "" + + #: cp/typeck2.c:767 + msgid "initializer list for object of class with virtual base classes" + msgstr "" + + #: cp/typeck2.c:773 + msgid "initializer list for object of class with base classes" + msgstr "" + + #: cp/typeck2.c:779 + msgid "initializer list for object using virtual functions" + msgstr "" + + #: cp/typeck2.c:842 cp/typeck2.c:859 + msgid "missing initializer for member `%D'" + msgstr "" + + #: cp/typeck2.c:847 + msgid "uninitialized const member `%D'" + msgstr "" + + #: cp/typeck2.c:850 + msgid "member `%D' with uninitialized const fields" + msgstr "" + + #: cp/typeck2.c:853 + msgid "member `%D' is uninitialized reference" + msgstr "" + + #: cp/typeck2.c:896 + msgid "index value instead of field name in union initializer" + msgstr "" + + #: cp/typeck2.c:908 + msgid "no field `%D' in union being initialized" + msgstr "" + + #: cp/typeck2.c:916 + msgid "union `%T' with no named members cannot be initialized" + msgstr "" + + #: cp/typeck2.c:952 + msgid "excess elements in aggregate initializer" + msgstr "" + + #: cp/typeck2.c:1057 + msgid "circular pointer delegation detected" + msgstr "" + + #: cp/typeck2.c:1070 + msgid "base operand of `->' has non-pointer type `%T'" + msgstr "" + + #: cp/typeck2.c:1084 + msgid "result of `operator->()' yields non-pointer result" + msgstr "" + + #: cp/typeck2.c:1086 + msgid "base operand of `->' is not a pointer" + msgstr "" + + #: cp/typeck2.c:1152 + msgid "`%E' cannot be used as a member pointer, since it is of type `%T'" + msgstr "" + + #: cp/typeck2.c:1159 + msgid "cannot apply member pointer `%E' to `%E', which is of non-aggregate type `%T'" + msgstr "" + + #: cp/typeck2.c:1168 + msgid "member type `%T::' incompatible with object type `%T'" + msgstr "" + + #: cp/typeck2.c:1205 + msgid "`%T' fails to be a typedef or built-in type" + msgstr "" + + #: cp/typeck2.c:1278 + #, c-format + msgid "ISO C++ forbids defining types within %s" + msgstr "" + + #: cp/xref.c:826 + #, fuzzy, c-format + msgid "can't create cross-reference file `%s'" + msgstr "äåí åßíáé äõíáôüí íá ãßíåé `stat' ôï locale áñ÷åßï `%s'" + + #. XXX Not i18n clean. + #: cp/cp-tree.h:3847 + #, c-format + msgid "%s is deprecated, please see the documentation for details" + msgstr "" + + #: cp/lang-options.h:29 + msgid "Do not obey access control semantics" + msgstr "" + + #: cp/lang-options.h:31 + msgid "Change when template instances are emitted" + msgstr "" + + #: cp/lang-options.h:36 + msgid "Check the return value of new" + msgstr "" + + #: cp/lang-options.h:39 + msgid "Reduce size of object files" + msgstr "" + + #: cp/lang-options.h:43 + msgid "Make string literals `char[]' instead of `const char[]'" + msgstr "" + + #: cp/lang-options.h:46 + msgid "Dump the entire translation unit to a file" + msgstr "" + + #: cp/lang-options.h:48 + msgid "Do not inline member functions by default" + msgstr "" + + #: cp/lang-options.h:51 + msgid "Do not generate run time type descriptor information" + msgstr "" + + #: cp/lang-options.h:56 + msgid "Do not generate code to check exception specifications" + msgstr "" + + #: cp/lang-options.h:61 + msgid "Scope of for-init-statement vars extends outside" + msgstr "" + + #: cp/lang-options.h:64 + msgid "Do not recognize GNU defined keywords" + msgstr "" + + #: cp/lang-options.h:68 + msgid "Enable support for huge objects" + msgstr "" + + #: cp/lang-options.h:72 + msgid "Export functions even if they can be inlined" + msgstr "" + + #: cp/lang-options.h:75 + msgid "Only emit explicit template instatiations" + msgstr "" + + #: cp/lang-options.h:78 + msgid "Only emit explicit instatiations of inline templates" + msgstr "" + + #: cp/lang-options.h:84 + msgid "Don't pedwarn about uses of Microsoft extensions" + msgstr "" + + #: cp/lang-options.h:87 + msgid "Recognize and/bitand/bitor/compl/not/or/xor" + msgstr "" + + #: cp/lang-options.h:91 + msgid "Disable optional diagnostics" + msgstr "" + + #: cp/lang-options.h:93 + msgid "Downgrade conformance errors to warnings" + msgstr "" + + #: cp/lang-options.h:96 + msgid "Enable automatic template instantiation" + msgstr "" + + #: cp/lang-options.h:101 + msgid "Display statistics accumulated during compilation" + msgstr "" + + #: cp/lang-options.h:104 + msgid "Specify maximum template instantiation depth" + msgstr "" + + #: cp/lang-options.h:106 + msgid "Use __cxa_atexit to register destructors" + msgstr "" + + #: cp/lang-options.h:109 + msgid "Discard unused virtual functions" + msgstr "" + + #: cp/lang-options.h:112 + msgid "Implement vtables using thunks" + msgstr "" + + #: cp/lang-options.h:115 + msgid "Emit common-like symbols as weak symbols" + msgstr "" + + #: cp/lang-options.h:118 + #, fuzzy + msgid "Emit cross referencing information" + msgstr "åìöÜíéóç ðëçñïöïñéþí ðñïüäïõ" + + #: cp/lang-options.h:122 + msgid "Warn about inconsistent return types" + msgstr "" + + #: cp/lang-options.h:125 + msgid "Warn about overloaded virtual function names" + msgstr "" + + #: cp/lang-options.h:129 + msgid "Don't warn when all ctors/dtors are private" + msgstr "" + + #: cp/lang-options.h:131 + msgid "Warn about non virtual destructors" + msgstr "" + + #: cp/lang-options.h:134 + msgid "Warn when a function is declared extern, then inline" + msgstr "" + + #: cp/lang-options.h:137 + msgid "Warn when the compiler reorders code" + msgstr "" + + #: cp/lang-options.h:140 + msgid "Warn when synthesis behavior differs from Cfront" + msgstr "" + + #: cp/lang-options.h:144 + msgid "Don't warn when type converting pointers to member functions" + msgstr "" + + #: cp/lang-options.h:146 + msgid "Warn about violations of Effective C++ style rules" + msgstr "" + + #: cp/lang-options.h:149 + msgid "Warn when overload promotes from unsigned to signed" + msgstr "" + + #: cp/lang-options.h:152 + msgid "Warn if a C style cast is used in a program" + msgstr "" + + #: cp/lang-options.h:156 + msgid "Don't warn when non-templatized friend functions are declared within a template" + msgstr "" + + #: cp/lang-options.h:159 + msgid "Don't announce deprecation of compiler features" + msgstr "" + + #: f/bad.c:386 + msgid "note:" + msgstr "" + + #: f/bad.c:390 + #, fuzzy + msgid "warning:" + msgstr "ðñïåéäïðïßçóç: " + + #: f/bad.c:394 + msgid "fatal:" + msgstr "" + + #: f/bad.c:436 + msgid "(continued):" + msgstr "" + + #: f/bad.c:486 f/bad.c:504 + #, c-format + msgid "[REPORT BUG!!] %" + msgstr "" + + #: f/bad.c:493 f/bad.c:525 + msgid "[REPORT BUG!!]" + msgstr "" + + #: f/com.c:3116 + msgid "ASSIGN'ed label cannot fit into `%A' at %0 -- using wider sibling" + msgstr "" + + #: f/com.c:11596 + msgid "no INTEGER type can hold a pointer on this configuration" + msgstr "" + + #: f/com.c:11821 + #, c-format + msgid "configuration: REAL, INTEGER, and LOGICAL are %d bits wide," + msgstr "" + + #: f/com.c:11823 + #, c-format + msgid "and pointers are %d bits wide, but g77 doesn't yet work" + msgstr "" + + #: f/com.c:11825 + msgid "properly unless they all are 32 bits wide" + msgstr "" + + #: f/com.c:11826 + msgid "Please keep this in mind before you report bugs. g77 should" + msgstr "" + + #: f/com.c:11827 + msgid "support non-32-bit machines better as of version 0.6" + msgstr "" + + #. I/O will probably crash. + #: f/com.c:11835 + #, c-format + msgid "configuration: char * holds %d bits, but ftnlen only %d" + msgstr "" + + #. ASSIGN 10 TO I will crash. + #: f/com.c:11844 + #, c-format + msgid "" + "configuration: char * holds %d bits, but INTEGER only %d --\n" + " ASSIGN statement might fail" + msgstr "" + + #: f/com.c:13678 + #, fuzzy + msgid "In statement function" + msgstr "ðÜñá ðïëëÜ ïñßóìáôá" + + #: f/com.c:13688 + msgid "Outside of any program unit:\n" + msgstr "" + + #: f/com.c:15376 + msgid "%A from %B at %0%C" + msgstr "" + + #: f/com.c:15553 + msgid "directory name must immediately follow -I" + msgstr "" + + #: f/com.c:15695 + msgid "At %0, INCLUDE file %A exists, but is not readable" + msgstr "" + + #: f/com.c:15729 + msgid "At %0, INCLUDE nesting too deep" + msgstr "" + + #: f/expr.c:9611 + msgid "Two arithmetic operators in a row at %0 and %1 -- use parentheses" + msgstr "" + + #: f/expr.c:9660 + msgid "Operator at %0 has lower precedence than that at %1 -- use parentheses" + msgstr "" + + #: f/expr.c:10520 + msgid "Use .EQV./.NEQV. instead of .EQ./.NE. at %0 for LOGICAL operands at %1 and %2" + msgstr "" + + #: f/expr.c:10890 + msgid "Unsupported operand for ** at %1 -- converting to default INTEGER" + msgstr "" + + #: f/g77spec.c:256 + #, c-format + msgid "overflowed output arg list for `%s'" + msgstr "" + + #: f/g77spec.c:395 + msgid "--driver no longer supported" + msgstr "" + + #: f/g77spec.c:408 + #, fuzzy, c-format + msgid "argument to `%s' missing" + msgstr "Ý÷ïõí ðáñáëçöèåß ïñßóìáôá" + + #: f/g77spec.c:412 + #, fuzzy + msgid "no input files; unwilling to write output files" + msgstr "%s: ôï áñ÷åßï åéóüäïõ åßíáé ôï áñ÷åßï åîüäïõ" + + #: f/implic.c:202 + #, fuzzy + msgid "Implicit declaration of `%A' at %0" + msgstr "ðñïçãïýìåíç áõôïíüçôç äéáêýñçîç ôïõ `%s'" + + #: f/lex.c:272 + msgid "The meaning of `\\x' (at %0) varies with -traditional" + msgstr "" + + #: f/lex.c:322 + msgid "The meaning of `\\a' (at %0) varies with -traditional" + msgstr "" + + # src/main.c:663 + #: f/lex.c:351 + #, fuzzy + msgid "Non-ISO-C-standard escape sequence `\\%A' at %0" + msgstr "¶ãíùóôç óõìâïëïóåéñÜ `%s'" + + # src/main.c:663 + #: f/lex.c:369 + #, fuzzy + msgid "Unknown escape sequence `\\%A' at %0" + msgstr "¶ãíùóôç óõìâïëïóåéñÜ `%s'" + + #: f/lex.c:377 + #, fuzzy, c-format + msgid "Unterminated escape sequence `\\' at %0" + msgstr "ìç ôåñìáôéæüìåío áëöáñéèìçôéêü" + + #: f/lex.c:387 + msgid "Unknown escape sequence `\\' followed by char code 0x%A at %0" + msgstr "" + + #: f/lex.c:414 + msgid "\\x used at %0 with no following hex digits" + msgstr "" + + #: f/lex.c:427 + #, fuzzy, c-format + msgid "Hex escape at %0 out of range" + msgstr "ó÷åôéêÞ èÝóç áñ÷åßïõ åßíáé åêôüò ïñßùí" + + #: f/lex.c:460 + #, fuzzy, c-format + msgid "Escape sequence at %0 out of range for character" + msgstr "ìç Ýãêõñç äéáäéêáóßá äéáöõãÞò óôï ôÝëïò ôïõ áëöáñéèìéôéêïý" + + #: f/lex.c:583 + msgid "the meaning of `\\x' varies with -traditional" + msgstr "" + + #: f/lex.c:620 + #, fuzzy + msgid "hex escape out of range" + msgstr "ó÷åôéêÞ èÝóç áñ÷åßïõ åßíáé åêôüò ïñßùí" + + #: f/lex.c:666 + msgid "the meaning of `\\a' varies with -traditional" + msgstr "" + + #: f/lex.c:682 + #, c-format + msgid "non-ANSI-standard escape sequence, `\\%c'" + msgstr "" + + # src/main.c:663 + #: f/lex.c:695 + #, fuzzy, c-format + msgid "non-ISO escape sequence `\\%c'" + msgstr "¶ãíùóôç óõìâïëïóåéñÜ `%s'" + + # src/main.c:663 + #: f/lex.c:699 + #, fuzzy, c-format + msgid "unknown escape sequence `\\%c'" + msgstr "¶ãíùóôç óõìâïëïóåéñÜ `%s'" + + #: f/lex.c:701 + #, c-format + msgid "unknown escape sequence: `\\' followed by char code 0x%x" + msgstr "" + + #: f/lex.c:778 + msgid "badly formed directive -- no closing quote" + msgstr "" + + #: f/lex.c:998 + msgid "bad directive -- missing close-quote" + msgstr "" + + #: f/lex.c:1112 + #, fuzzy, c-format + msgid "ignoring pragma: %s" + msgstr "áãíïïýíôáé üëá ôá ïñßóìáôá" + + #: f/lex.c:1319 f/lex.c:1363 + msgid "use `#line ...' instead of `# ...' in first line" + msgstr "" + + #: f/lex.c:1465 + #, fuzzy, c-format + msgid "Null character at %0 -- line ignored" + msgstr "ìç Ýãêõñïò ÷áñáêôÞñáò óôï áñ÷åßï: " + + #: f/stb.c:12077 + #, c-format + msgid "INCLUDE at %0 not the only statement on the source line" + msgstr "" + + #: f/ste.c:1404 f/ste.c:1755 + msgid "ASSIGNed FORMAT specifier is too small" + msgstr "" + + #. ~~~Someday handle CHARACTER*1, CHARACTER*N + #: f/ste.c:2635 + msgid "SELECT CASE on CHARACTER type (at %0) not supported -- sorry" + msgstr "" + + #: f/ste.c:2964 + msgid "ASSIGN to variable that is too small" + msgstr "" + + #: f/ste.c:2992 + msgid "ASSIGNed GOTO target variable is too small" + msgstr "" + + #: f/stu.c:304 + msgid "Local adjustable symbol `%A' at %0" + msgstr "" + + #: f/top.c:238 + #, c-format + msgid "%s no longer supported -- try -fvxt" + msgstr "" + + #: f/top.c:240 + #, c-format + msgid "%s no longer supported -- try -fno-vxt -ff90" + msgstr "" + + #: f/top.c:308 f/top.c:310 + #, c-format + msgid "%s disabled, use normal debugging flags" + msgstr "" + + #: f/lang-options.h:33 + msgid "Print g77-specific compiler version info, run internal tests" + msgstr "" + + #: f/lang-options.h:37 + msgid "Program is written in typical FORTRAN 66 dialect" + msgstr "" + + #: f/lang-options.h:40 + msgid "Program is written in typical Unix f77 dialect" + msgstr "" + + #: f/lang-options.h:42 + msgid "Program does not use Unix-f77 dialectal features" + msgstr "" + + #: f/lang-options.h:44 + msgid "Program is written in Fortran-90-ish dialect" + msgstr "" + + #: f/lang-options.h:48 + msgid "Treat local vars and COMMON blocks as if they were named in SAVE statements" + msgstr "" + + #: f/lang-options.h:50 + msgid "Allow $ in symbol names" + msgstr "" + + #: f/lang-options.h:54 + msgid "f2c-compatible code need not be generated" + msgstr "" + + #: f/lang-options.h:57 + msgid "Unsupported; do not generate libf2c-calling code" + msgstr "" + + #: f/lang-options.h:59 + msgid "Unsupported; affects code-generation of arrays" + msgstr "" + + #: f/lang-options.h:62 + msgid "Program is written in Fortran-90-ish free form" + msgstr "" + + #: f/lang-options.h:67 + msgid "Warn about use of (only a few for now) Fortran extensions" + msgstr "" + + #: f/lang-options.h:70 + msgid "Program is written in VXT (Digital-like) FORTRAN" + msgstr "" + + #: f/lang-options.h:73 + msgid "Disallow all ugly features" + msgstr "" + + #: f/lang-options.h:76 + msgid "Hollerith and typeless constants not passed as arguments" + msgstr "" + + #: f/lang-options.h:78 + msgid "Allow ordinary copying of ASSIGN'ed vars" + msgstr "" + + #: f/lang-options.h:81 + msgid "Dummy array dimensioned to (1) is assumed-size" + msgstr "" + + #: f/lang-options.h:84 + msgid "Trailing comma in procedure call denotes null argument" + msgstr "" + + #: f/lang-options.h:87 + msgid "Allow REAL(Z) and AIMAG(Z) given DOUBLE COMPLEX Z" + msgstr "" + + #: f/lang-options.h:91 + msgid "Initialization via DATA and PARAMETER is type-compatible" + msgstr "" + + #: f/lang-options.h:93 + msgid "Allow INTEGER and LOGICAL interchangeability" + msgstr "" + + #: f/lang-options.h:96 + msgid "Print internal debugging-related info" + msgstr "" + + #: f/lang-options.h:99 + msgid "Initialize local vars and arrays to zero" + msgstr "" + + #: f/lang-options.h:103 + msgid "Backslashes in character/hollerith constants not special (C-style)" + msgstr "" + + #: f/lang-options.h:105 + msgid "Have front end emulate COMPLEX arithmetic to avoid bugs" + msgstr "" + + #: f/lang-options.h:109 + msgid "Disable the appending of underscores to externals" + msgstr "" + + #: f/lang-options.h:112 + msgid "Never append a second underscore to externals" + msgstr "" + + #: f/lang-options.h:114 + msgid "Intrinsics spelled as e.g. SqRt" + msgstr "" + + #: f/lang-options.h:116 + msgid "Intrinsics in uppercase" + msgstr "" + + #: f/lang-options.h:119 + msgid "Intrinsics letters in arbitrary cases" + msgstr "" + + #: f/lang-options.h:121 + msgid "Language keywords spelled as e.g. IOStat" + msgstr "" + + #: f/lang-options.h:123 + msgid "Language keywords in uppercase" + msgstr "" + + #: f/lang-options.h:126 + msgid "Language keyword letters in arbitrary cases" + msgstr "" + + #: f/lang-options.h:128 + msgid "Internally convert most source to uppercase" + msgstr "" + + #: f/lang-options.h:131 + msgid "Internally preserve source case" + msgstr "" + + #: f/lang-options.h:133 + msgid "Symbol names spelled in mixed case" + msgstr "" + + #: f/lang-options.h:135 + msgid "Symbol names in uppercase" + msgstr "" + + #: f/lang-options.h:137 + msgid "Symbol names in lowercase" + msgstr "" + + #: f/lang-options.h:140 + msgid "Program written in uppercase" + msgstr "" + + #: f/lang-options.h:142 + msgid "Program written in lowercase" + msgstr "" + + #: f/lang-options.h:144 + msgid "Program written in strict mixed-case" + msgstr "" + + #: f/lang-options.h:146 + msgid "Compile as if program written in uppercase" + msgstr "" + + #: f/lang-options.h:148 + msgid "Compile as if program written in lowercase" + msgstr "" + + #: f/lang-options.h:150 + msgid "Preserve all spelling (case) used in program" + msgstr "" + + #: f/lang-options.h:152 + msgid "Delete libU77 intrinsics with bad interfaces" + msgstr "" + + #: f/lang-options.h:154 + msgid "Disable libU77 intrinsics with bad interfaces" + msgstr "" + + #: f/lang-options.h:157 + msgid "Hide libU77 intrinsics with bad interfaces" + msgstr "" + + #: f/lang-options.h:159 + msgid "Delete non-FORTRAN-77 intrinsics f2c supports" + msgstr "" + + #: f/lang-options.h:161 + msgid "Disable non-FORTRAN-77 intrinsics f2c supports" + msgstr "" + + #: f/lang-options.h:164 + msgid "Hide non-FORTRAN-77 intrinsics f2c supports" + msgstr "" + + #: f/lang-options.h:166 + msgid "Delete non-FORTRAN-77 intrinsics F90 supports" + msgstr "" + + #: f/lang-options.h:168 + msgid "Disable non-FORTRAN-77 intrinsics F90 supports" + msgstr "" + + #: f/lang-options.h:171 + msgid "Hide non-FORTRAN-77 intrinsics F90 supports" + msgstr "" + + #: f/lang-options.h:173 + msgid "Delete non-FORTRAN-77 intrinsics g77 supports" + msgstr "" + + #: f/lang-options.h:175 + msgid "Disable non-FORTRAN 77 intrinsics F90 supports" + msgstr "" + + #: f/lang-options.h:178 + msgid "Hide non-FORTRAN 77 intrinsics F90 supports" + msgstr "" + + #: f/lang-options.h:180 + msgid "Delete MIL-STD 1753 intrinsics" + msgstr "" + + #: f/lang-options.h:182 + msgid "Disable MIL-STD 1753 intrinsics" + msgstr "" + + #: f/lang-options.h:185 + msgid "Hide MIL-STD 1753 intrinsics" + msgstr "" + + #: f/lang-options.h:187 + msgid "Delete libU77 intrinsics" + msgstr "" + + #: f/lang-options.h:189 + msgid "Disable libU77 intrinsics" + msgstr "" + + #: f/lang-options.h:192 + msgid "Hide libU77 intrinsics" + msgstr "" + + #: f/lang-options.h:194 + msgid "Delete non-FORTRAN-77 intrinsics VXT FORTRAN supports" + msgstr "" + + #: f/lang-options.h:196 + msgid "Disable non-FORTRAN-77 intrinsics VXT FORTRAN supports" + msgstr "" + + #: f/lang-options.h:199 + msgid "Hide non-FORTRAN-77 intrinsics VXT FORTRAN supports" + msgstr "" + + #: f/lang-options.h:201 + msgid "Treat initial values of 0 like non-zero values" + msgstr "" + + #: f/lang-options.h:204 + msgid "Emit special debugging information for COMMON and EQUIVALENCE (disabled)" + msgstr "" + + #: f/lang-options.h:207 + msgid "Take at least one trip through each iterative DO loop" + msgstr "" + + #: f/lang-options.h:211 + msgid "Print names of program units as they are compiled" + msgstr "" + + #: f/lang-options.h:214 + msgid "Disable fatal diagnostics about inter-procedural problems" + msgstr "" + + #: f/lang-options.h:216 + msgid "Make prefix-radix non-decimal constants be typeless" + msgstr "" + + #: f/lang-options.h:219 + msgid "Generate code to check subscript and substring bounds" + msgstr "" + + #: f/lang-options.h:222 + msgid "Fortran-specific form of -fbounds-check" + msgstr "" + + #: f/lang-options.h:226 + msgid "Disable warnings about inter-procedural problems" + msgstr "" + + #: f/lang-options.h:230 + msgid "Warn about constructs with surprising meanings" + msgstr "" + + #: f/lang-options.h:235 + msgid "Add a directory for INCLUDE searching" + msgstr "" + + #: f/lang-options.h:237 + #, fuzzy + msgid "Set the maximum line length" + msgstr "åëÜ÷éóôï ìÝãåèïò áëöáñéèìçôéêïý" + + #: f/bad.def:38 + #, fuzzy, c-format + msgid "Missing first operand for binary operator at %0" + msgstr "Áãíùóôïò äõáäéêüò ÷åéñéóôÞò." + + #: f/bad.def:40 + #, fuzzy, c-format + msgid "Zero-length character constant at %0" + msgstr "êåíü áëöáñéèìçôéêü" + + #: f/bad.def:42 + #, fuzzy, c-format + msgid "Invalid token at %0 in expression or subexpression at %1" + msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç" + + #: f/bad.def:44 + msgid "Missing operand for operator at %1 at end of expression at %0" + msgstr "" + + #: f/bad.def:46 + msgid "Label %A already defined at %1 when redefined at %0" + msgstr "" + + #: f/bad.def:48 + msgid "Unrecognized character at %0 [info -f g77 M LEX]" + msgstr "" + + #: f/bad.def:50 + msgid "Label definition %A at %0 on empty statement (as of %1)" + msgstr "" + + #: f/bad.def:52 + msgid "Extra label definition %A at %0 -- perhaps previous label definition %B at %1 should have CONTINUE statement?" + msgstr "" + + #: f/bad.def:53 + msgid "Extra label definition %A at %0 following label definition %B at %1" + msgstr "" + + #: f/bad.def:55 + msgid "Invalid first character at %0 [info -f g77 M LEX]" + msgstr "" + + #: f/bad.def:57 + msgid "Line too long as of %0 [info -f g77 M LEX]" + msgstr "" + + #: f/bad.def:59 + #, c-format + msgid "Non-numeric character at %0 in label field [info -f g77 M LEX]" + msgstr "" + + #: f/bad.def:61 + #, c-format + msgid "Label number at %0 not in range 1-99999" + msgstr "" + + #: f/bad.def:63 + msgid "At %0, '!' and '/*' are not valid comment delimiters" + msgstr "" + + #: f/bad.def:65 + #, c-format + msgid "Continuation indicator at %0 must appear in column 6 [info -f g77 M LEX]" + msgstr "" + + #: f/bad.def:67 + msgid "Label at %0 invalid with continuation line indicator at %1 [info -f g77 M LEX]" + msgstr "" + + #: f/bad.def:69 + #, c-format + msgid "Continuation indicator at %0 invalid on first non-comment line of file or following END or INCLUDE [info -f g77 M LEX]" + msgstr "" + + #: f/bad.def:70 + #, c-format + msgid "Continuation indicator at %0 invalid here [info -f g77 M LEX]" + msgstr "" + + #: f/bad.def:72 + #, fuzzy + msgid "Character constant at %0 has no closing apostrophe at %1" + msgstr "ìç Ýãêõñïò óôáèåñüò ÷áñáêôÞñáò óôï áëöáñéèìéôéêü" + + #: f/bad.def:74 + msgid "Hollerith constant at %0 specified %A more characters than are present as of %1" + msgstr "" + + #: f/bad.def:76 + #, c-format + msgid "Missing close parenthese at %0 needed to match open parenthese at %1" + msgstr "" + + #: f/bad.def:78 + #, fuzzy + msgid "Integer at %0 too large" + msgstr "ó÷åôéêÞ èÝóç áñ÷åßïõ åßíáé åêôüò ïñßùí" + + #: f/bad.def:80 + msgid "Integer at %0 too large except as negative number (preceded by unary minus sign)" + msgstr "" + + #: f/bad.def:81 + msgid "Non-negative integer at %0 too large" + msgstr "" + + #: f/bad.def:83 + msgid "Integer at %0 too large; even though preceded by unary minus sign at %1, subsequent operator at %2 has precedence over unary minus -- enclose unary minus sign and integer in parentheses to force precedence" + msgstr "" + + #: f/bad.def:84 + msgid "Integer at %0 too large (%2 has precedence over %1)" + msgstr "" + + #: f/bad.def:86 + msgid "Integer at %0 too large; even though preceded by minus sign at %1, because minus sign is a binary, not unary, operator -- insert plus sign before minus sign to change it to a unary minus sign" + msgstr "" + + #: f/bad.def:87 + msgid "Integer at %0 too large (needs unary, not binary, minus at %1)" + msgstr "" + + #: f/bad.def:89 + msgid "Integer at %0 too large; even though preceded by minus sign at %1, subsequent operator at %2 has precedence over minus, and that minus sign should be a unary minus rather than a binary minus -- insert plus sign before minus sign to change it to a unary minus sign, and enclose unary minus sign and integer in parentheses to force precedence" + msgstr "" + + #: f/bad.def:90 + msgid "Integer at %0 too large (%2 has precedence over %1, which needs to be unary, not binary, minus)" + msgstr "" + + #: f/bad.def:92 + #, c-format + msgid "Period at %0 not followed by digits for floating-point number or by `NOT.', `TRUE.', or `FALSE.'" + msgstr "" + + #: f/bad.def:94 + msgid "Missing close-period between `.%A' at %0 and %1" + msgstr "" + + #: f/bad.def:96 + msgid "Invalid exponent at %0 for real constant at %1; nondigit `%A' in exponent field" + msgstr "" + + #: f/bad.def:98 + msgid "Missing value at %1 for real-number exponent at %0" + msgstr "" + + #: f/bad.def:100 + msgid "Expected binary operator between expressions at %0 and at %1" + msgstr "" + + #: f/bad.def:102 + msgid "Period at %0 not followed by valid keyword forming a valid binary operator; `.%A.' is not a valid binary operator" + msgstr "" + + #: f/bad.def:103 + msgid "`.%A.' at %0 not a binary operator" + msgstr "" + + #: f/bad.def:105 + #, c-format + msgid "Double-quote at %0 not followed by a string of valid octal digits at %1" + msgstr "" + + #: f/bad.def:106 f/bad.def:115 f/bad.def:124 + #, fuzzy, c-format + msgid "Invalid octal constant at %0" + msgstr "ìç ôåñìáôéæìÝíï áëöáñéèìçôéêü óôáèåñÜò" + + #: f/bad.def:108 f/bad.def:120 + #, c-format + msgid "Invalid binary digit(s) found in string of digits at %0" + msgstr "" + + #: f/bad.def:109 f/bad.def:121 + #, fuzzy, c-format + msgid "Invalid binary constant at %0" + msgstr "ìç ôåñìáôéæìÝíï áëöáñéèìçôéêü óôáèåñÜò" + + #: f/bad.def:111 f/bad.def:126 + #, c-format + msgid "Invalid hexadecimal digit(s) found in string of digits at %0" + msgstr "" + + #: f/bad.def:112 f/bad.def:127 + #, fuzzy, c-format + msgid "Invalid hexadecimal constant at %0" + msgstr "ìç Ýãêõñïò óôáèåñüò ÷áñáêôÞñáò óôï áëöáñéèìéôéêü" + + #: f/bad.def:114 f/bad.def:123 + #, c-format + msgid "Invalid octal digit(s) found in string of digits at %0" + msgstr "" + + #: f/bad.def:117 + msgid "Invalid radix specifier `%A' at %0 for typeless constant at %1" + msgstr "" + + #: f/bad.def:118 + #, fuzzy, c-format + msgid "Invalid typeless constant at %1" + msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç" + + #: f/bad.def:129 + msgid "%A part of complex constant at %0 must be a real or integer constant -- otherwise use CMPLX() or COMPLEX() in place of ()" + msgstr "" + + #: f/bad.def:130 + msgid "%A part of complex constant at %0 not a real or integer constant" + msgstr "" + + #: f/bad.def:132 + msgid "Invalid keyword `%%%A' at %0 in this context" + msgstr "" + + #: f/bad.def:133 + msgid "Invalid keyword `%%%A' at %0" + msgstr "" + + #: f/bad.def:135 + msgid "Null expression between %0 and %1 invalid in this context" + msgstr "" + + #: f/bad.def:136 + #, fuzzy + msgid "Invalid null expression between %0 and %1" + msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç" + + #: f/bad.def:138 + msgid "Concatenation operator at %0 must operate on two subexpressions of character type, but neither subexpression at %1 or %2 is of character type" + msgstr "" + + #: f/bad.def:139 + msgid "Invalid operands at %1 and %2 for concatenation operator at %0" + msgstr "" + + #: f/bad.def:141 + msgid "Concatenation operator at %0 must operate on two subexpressions of character type, but the subexpression at %1 is not of character type" + msgstr "" + + #: f/bad.def:142 + msgid "Invalid operand at %1 for concatenation operator at %0" + msgstr "" + + #: f/bad.def:144 + msgid "Concatenation operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning character scalars, or a combination of both -- but the subexpression at %1 is %A" + msgstr "" + + #: f/bad.def:145 + msgid "Invalid operand (is %A) at %1 for concatenation operator at %0" + msgstr "" + + #: f/bad.def:147 + msgid "Arithmetic operator at %0 must operate on two subexpressions of arithmetic type, but neither subexpression at %1 or %2 is of arithmetic type" + msgstr "" + + #: f/bad.def:148 + msgid "Invalid operands at %1 and %2 for arithmetic operator at %0" + msgstr "" + + #: f/bad.def:150 + msgid "Arithmetic operator at %0 must operate on two subexpressions of arithmetic type, but the subexpression at %1 is not of arithmetic type" + msgstr "" + + #: f/bad.def:151 + msgid "Invalid operand at %1 for arithmetic operator at %0" + msgstr "" + + #: f/bad.def:153 + msgid "Arithmetic operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning arithmetic scalars, or a combination of both -- but the subexpression at %1 is %A" + msgstr "" + + #: f/bad.def:154 + msgid "Invalid operand (is %A) at %1 for arithmetic operator at %0" + msgstr "" + + #: f/bad.def:156 + msgid "Character constant at %0 has no closing quote at %1 [info -f g77 M LEX]" + msgstr "" + + #: f/bad.def:157 + #, fuzzy + msgid "Unterminated character constant at %0 [info -f g77 M LEX]" + msgstr "ìç Ýãêõñïò óôáèåñüò ÷áñáêôÞñáò óôï áëöáñéèìéôéêü" + + #: f/bad.def:159 + #, c-format + msgid "Continuation line at %0 must have initial `&' since it continues a character context [info -f g77 M LEX]" + msgstr "" + + #: f/bad.def:160 f/bad.def:163 + msgid "Missing initial `&' on continuation line at %0 [info -f g77 M LEX]" + msgstr "" + + #: f/bad.def:162 + #, c-format + msgid "Continuation line at %0 must have initial `&' since it continues a split lexical token [info -f g77 M LEX]" + msgstr "" + + #: f/bad.def:165 + #, c-format + msgid "Continuation line at %0 invalid because it consists only of a single `&' as the only nonblank character" + msgstr "" + + #: f/bad.def:166 + #, fuzzy, c-format + msgid "Invalid continuation line at %0" + msgstr "ìç Ýãêõñç ìÝôñçóç åðáíÜëçøçò `%s' óôç êáôáóêåõÞ [c*n]" + + #: f/bad.def:168 + msgid "Statement at %0 begins with invalid token [info -f g77 M LEX]" + msgstr "" + + #: f/bad.def:169 + msgid "Invalid statement at %0 [info -f g77 M LEX]" + msgstr "" + + #: f/bad.def:171 + #, c-format + msgid "Semicolon at %0 is an invalid token" + msgstr "" + + #: f/bad.def:173 + msgid "Unrecognized statement name at %0 and invalid form for assignment or statement-function definition at %1" + msgstr "" + + #: f/bad.def:174 + #, fuzzy, c-format + msgid "Invalid statement at %0" + msgstr "Ìç Ýãêõñç ðáñÜìåôñïò" + + #: f/bad.def:176 + #, fuzzy + msgid "Invalid form for %A statement at %0" + msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç" + + #: f/bad.def:177 + #, fuzzy + msgid "Invalid %A statement at %0" + msgstr "Ìç Ýãêõñç ðáñÜìåôñïò" + + #: f/bad.def:179 + #, c-format + msgid "Invalid use of hollerith constant in statement at %0 -- enclose the constant in parentheses (for example, change BACKSPACE 2HAB to BACKSPACE (2HAB))" + msgstr "" + + #: f/bad.def:180 + #, c-format + msgid "Enclose hollerith constant in statement at %0 in parentheses" + msgstr "" + + #: f/bad.def:182 + #, c-format + msgid "Extraneous comma in FORMAT statement at %0" + msgstr "" + + #: f/bad.def:184 + #, c-format + msgid "Missing comma in FORMAT statement at %0" + msgstr "" + + #: f/bad.def:186 + #, c-format + msgid "Spurious sign in FORMAT statement at %0" + msgstr "" + + #: f/bad.def:188 + #, c-format + msgid "Spurious number in FORMAT statement at %0" + msgstr "" + + #: f/bad.def:190 + #, c-format + msgid "Spurious text trailing number in FORMAT statement at %0" + msgstr "" + + #: f/bad.def:192 + #, c-format + msgid "nP control edit descriptor not followed by comma but followed by edit descriptor at %0 other than D, E, EN, F, or G" + msgstr "" + + #: f/bad.def:193 + #, c-format + msgid "Invalid edit descriptor at %0 following nP control edit descriptor" + msgstr "" + + #: f/bad.def:195 + #, fuzzy, c-format + msgid "Unrecognized FORMAT specifier at %0" + msgstr "Üãíùóôï ðñüèåìá: %s" + + #: f/bad.def:197 + #, c-format + msgid "Invalid I specifier in FORMAT statement at %0 -- correct form: [r]Iw.[m]" + msgstr "" + + #: f/bad.def:198 + #, fuzzy, c-format + msgid "Invalid I specifier in FORMAT statement at %0" + msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç" + + #: f/bad.def:200 + #, c-format + msgid "Invalid B specifier in FORMAT statement at %0 -- correct form: [r]Bw.[m]" + msgstr "" + + #: f/bad.def:201 + #, fuzzy, c-format + msgid "Invalid B specifier in FORMAT statement at %0" + msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç" + + #: f/bad.def:203 + #, c-format + msgid "Invalid O specifier in FORMAT statement at %0 -- correct form: [r]Ow.[m]" + msgstr "" + + #: f/bad.def:204 + #, fuzzy, c-format + msgid "Invalid O specifier in FORMAT statement at %0" + msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç" + + #: f/bad.def:206 + #, c-format + msgid "Invalid Z specifier in FORMAT statement at %0 -- correct form: [r]Zw.[m]" + msgstr "" + + #: f/bad.def:207 + #, fuzzy, c-format + msgid "Invalid Z specifier in FORMAT statement at %0" + msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç" + + #: f/bad.def:209 + #, c-format + msgid "Invalid F specifier in FORMAT statement at %0 -- correct form: [r]Fw.d" + msgstr "" + + #: f/bad.def:210 + #, fuzzy, c-format + msgid "Invalid F specifier in FORMAT statement at %0" + msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç" + + #: f/bad.def:212 + #, c-format + msgid "Invalid E specifier in FORMAT statement at %0 -- correct form: [r]Ew.d[Ee]" + msgstr "" + + #: f/bad.def:213 + #, fuzzy, c-format + msgid "Invalid E specifier in FORMAT statement at %0" + msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç" + + #: f/bad.def:215 + #, c-format + msgid "Invalid EN specifier in FORMAT statement at %0 -- correct form: [r]ENw.d[Ee]" + msgstr "" + + #: f/bad.def:216 + #, c-format + msgid "Invalid EN specifier in FORMAT statement at %0" + msgstr "" + + #: f/bad.def:218 + #, c-format + msgid "Invalid G specifier in FORMAT statement at %0 -- correct form: [r]Gw.d[Ee]" + msgstr "" + + #: f/bad.def:219 + #, fuzzy, c-format + msgid "Invalid G specifier in FORMAT statement at %0" + msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç" + + #: f/bad.def:221 + #, c-format + msgid "Invalid L specifier in FORMAT statement at %0 -- correct form: [r]Lw" + msgstr "" + + #: f/bad.def:222 + #, fuzzy, c-format + msgid "Invalid L specifier in FORMAT statement at %0" + msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç" + + #: f/bad.def:224 + #, c-format + msgid "Invalid A specifier in FORMAT statement at %0 -- correct form: [r]A[w]" + msgstr "" + + #: f/bad.def:225 + #, fuzzy, c-format + msgid "Invalid A specifier in FORMAT statement at %0" + msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç" + + #: f/bad.def:227 + #, c-format + msgid "Invalid D specifier in FORMAT statement at %0 -- correct form: [r]Dw.d" + msgstr "" + + #: f/bad.def:228 + #, fuzzy, c-format + msgid "Invalid D specifier in FORMAT statement at %0" + msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç" + + #: f/bad.def:230 + #, c-format + msgid "Invalid Q specifier in FORMAT statement at %0 -- correct form: Q" + msgstr "" + + #: f/bad.def:231 + #, fuzzy, c-format + msgid "Invalid Q specifier in FORMAT statement at %0" + msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç" + + #: f/bad.def:233 + #, c-format + msgid "Invalid $ specifier in FORMAT statement at %0 -- correct form: $" + msgstr "" + + #: f/bad.def:234 + #, fuzzy, c-format + msgid "Invalid $ specifier in FORMAT statement at %0" + msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç" + + #: f/bad.def:236 + #, c-format + msgid "Invalid P specifier in FORMAT statement at %0 -- correct form: kP" + msgstr "" + + #: f/bad.def:237 + #, fuzzy, c-format + msgid "Invalid P specifier in FORMAT statement at %0" + msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç" + + #: f/bad.def:239 + #, c-format + msgid "Invalid T specifier in FORMAT statement at %0 -- correct form: Tn" + msgstr "" + + #: f/bad.def:240 + #, fuzzy, c-format + msgid "Invalid T specifier in FORMAT statement at %0" + msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç" + + #: f/bad.def:242 + #, c-format + msgid "Invalid TL specifier in FORMAT statement at %0 -- correct form: TLn" + msgstr "" + + #: f/bad.def:243 + #, c-format + msgid "Invalid TL specifier in FORMAT statement at %0" + msgstr "" + + #: f/bad.def:245 + #, c-format + msgid "Invalid TR specifier in FORMAT statement at %0 -- correct form: TRn" + msgstr "" + + #: f/bad.def:246 + #, c-format + msgid "Invalid TR specifier in FORMAT statement at %0" + msgstr "" + + #: f/bad.def:248 + #, c-format + msgid "Invalid X specifier in FORMAT statement at %0 -- correct form: nX" + msgstr "" + + #: f/bad.def:249 + #, fuzzy, c-format + msgid "Invalid X specifier in FORMAT statement at %0" + msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç" + + #: f/bad.def:251 + #, c-format + msgid "Invalid S specifier in FORMAT statement at %0 -- correct form: S" + msgstr "" + + #: f/bad.def:252 + #, fuzzy, c-format + msgid "Invalid S specifier in FORMAT statement at %0" + msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç" + + #: f/bad.def:254 + #, c-format + msgid "Invalid SP specifier in FORMAT statement at %0 -- correct form: SP" + msgstr "" + + #: f/bad.def:255 + #, c-format + msgid "Invalid SP specifier in FORMAT statement at %0" + msgstr "" + + #: f/bad.def:257 + #, c-format + msgid "Invalid SS specifier in FORMAT statement at %0 -- correct form: SS" + msgstr "" + + #: f/bad.def:258 + #, c-format + msgid "Invalid SS specifier in FORMAT statement at %0" + msgstr "" + + #: f/bad.def:260 + #, c-format + msgid "Invalid BN specifier in FORMAT statement at %0 -- correct form: BN" + msgstr "" + + #: f/bad.def:261 + #, c-format + msgid "Invalid BN specifier in FORMAT statement at %0" + msgstr "" + + #: f/bad.def:263 + #, c-format + msgid "Invalid BZ specifier in FORMAT statement at %0 -- correct form: BZ" + msgstr "" + + #: f/bad.def:264 + #, c-format + msgid "Invalid BZ specifier in FORMAT statement at %0" + msgstr "" + + #: f/bad.def:266 + #, c-format + msgid "Invalid : specifier in FORMAT statement at %0 -- correct form: :" + msgstr "" + + #: f/bad.def:267 + #, fuzzy, c-format + msgid "Invalid : specifier in FORMAT statement at %0" + msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç" + + #: f/bad.def:269 + #, c-format + msgid "Invalid H specifier in FORMAT statement at %0 -- correct form: nHcharacters !where n is an unsigned decimal constant, and characters !contains exactly n characters (including spaces)" + msgstr "" + + #: f/bad.def:270 + #, fuzzy, c-format + msgid "Invalid H specifier in FORMAT statement at %0" + msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç" + + #: f/bad.def:272 + #, c-format + msgid "Missing close-parenthese(s) in FORMAT statement at %0" + msgstr "" + + #: f/bad.def:274 + #, c-format + msgid "Missing number following period in FORMAT statement at %0" + msgstr "" + + #: f/bad.def:276 + #, c-format + msgid "Missing number following `E' in FORMAT statement at %0" + msgstr "" + + #: f/bad.def:278 + #, c-format + msgid "Invalid token with FORMAT run-time expression at %0 -- use the traditional operators .LT., .LE., .GT., .GE., .EQ., and .NE. in place of the newer tokens <, <=, >, >=, ==, and !=, because > ends an expression within a FORMAT statement" + msgstr "" + + #: f/bad.def:279 + #, fuzzy, c-format + msgid "Invalid token with FORMAT run-time expression at %0" + msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç" + + #: f/bad.def:281 + #, c-format + msgid "Spurious trailing comma preceding terminator at %0" + msgstr "" + + #: f/bad.def:283 + msgid "At %0, specify OPERATOR instead of ASSIGNMENT for INTERFACE statement not specifying the assignment operator (=)" + msgstr "" + + #: f/bad.def:285 + msgid "At %0, specify ASSIGNMENT instead of OPERATOR for INTERFACE statement specifying the assignment operator (=)" + msgstr "" + + #: f/bad.def:287 + #, c-format + msgid "Defined operator at %0 contains a nonletter -- must contain only letters A-Z (or a-z)" + msgstr "" + + #: f/bad.def:288 + #, fuzzy, c-format + msgid "Nonletter in defined operator at %0" + msgstr "ðïôÝ äåí äçëþèçêå ôï ðñüãñáììá %d\n" + + #: f/bad.def:290 + #, c-format + msgid "Invalid type-declaration attribute at %0 -- must be one of: DIMENSION(array-spec), EXTERNAL, INTRINSIC, PARAMETER, or SAVE" + msgstr "" + + #: f/bad.def:291 + #, fuzzy, c-format + msgid "Invalid type-declaration attribute at %0" + msgstr "Ìç Ýãêõñç áíôáëëáãÞ" + + #: f/bad.def:293 + #, c-format + msgid "Cannot specify =initialization-expr at %0 unless `::' appears before list of objects" + msgstr "" + + #: f/bad.def:295 + msgid "Reference to label at %1 inconsistent with its definition at %0" + msgstr "" + + #: f/bad.def:297 + msgid "Reference to label at %1 inconsistent with earlier reference at %0" + msgstr "" + + #: f/bad.def:299 + msgid "DO-statement reference to label at %1 follows its definition at %0" + msgstr "" + + #: f/bad.def:301 + msgid "Reference to label at %1 is outside block containing definition at %0" + msgstr "" + + #: f/bad.def:303 + msgid "DO-statement references to label at %0 and %2 separated by unterminated block starting at %1" + msgstr "" + + #: f/bad.def:305 + msgid "DO-statement reference to label at %0 and label definition at %2 separated by unterminated block starting at %1" + msgstr "" + + #: f/bad.def:307 + #, c-format + msgid "Label definition at %0 invalid on this kind of statement" + msgstr "" + + #: f/bad.def:309 + #, c-format + msgid "Statement at %0 invalid in this context" + msgstr "" + + #: f/bad.def:311 + #, c-format + msgid "Statement at %0 invalid in context established by statement at %1" + msgstr "" + + #: f/bad.def:313 + #, c-format + msgid "Statement at %0 must specify construct name specified at %1" + msgstr "" + + #: f/bad.def:315 + #, c-format + msgid "Construct name at %0 superfluous, no construct name specified at %1" + msgstr "" + + #: f/bad.def:317 + #, c-format + msgid "Construct name at %0 not the same as construct name at %1" + msgstr "" + + #: f/bad.def:319 + #, c-format + msgid "Construct name at %0 does not match construct name for any containing DO constructs" + msgstr "" + + #: f/bad.def:321 + #, c-format + msgid "Label definition missing at %0 for DO construct specifying label at %1" + msgstr "" + + #: f/bad.def:323 + #, c-format + msgid "Statement at %0 follows ELSE block for IF construct at %1" + msgstr "" + + #: f/bad.def:325 + #, c-format + msgid "No label definition for FORMAT statement at %0" + msgstr "" + + #: f/bad.def:327 + msgid "Second occurrence of ELSE WHERE at %0 within WHERE at %1" + msgstr "" + + #: f/bad.def:329 + msgid "END statement at %0 missing `%A' keyword required for internal or module procedure(s) bounded by %1" + msgstr "" + + #: f/bad.def:331 + msgid "MODULE PROCEDURE statement at %0 disallowed because INTERFACE at %1 specifies no generic name, operator, or assignment" + msgstr "" + + #: f/bad.def:333 + #, c-format + msgid "BLOCK DATA name at %0 superfluous, no name specified at %1" + msgstr "" + + #: f/bad.def:335 + #, c-format + msgid "Program name at %0 superfluous, no PROGRAM statement specified at %1" + msgstr "" + + #: f/bad.def:337 + #, c-format + msgid "Program unit name at %0 not the same as name at %1" + msgstr "" + + #: f/bad.def:339 + #, c-format + msgid "Type name at %0 not the same as name at %1" + msgstr "" + + #: f/bad.def:341 + #, c-format + msgid "End of source file before end of block started at %0" + msgstr "" + + #: f/bad.def:343 + #, c-format + msgid "Undefined label, first referenced at %0" + msgstr "" + + #: f/bad.def:345 + msgid "SAVE statement or attribute at %1 cannot be specified along with SAVE statement or attribute at %0" + msgstr "" + + #: f/bad.def:347 + msgid "PUBLIC or PRIVATE statement at %1 cannot be specified along with PUBLIC or PRIVATE statement at %0" + msgstr "" + + #: f/bad.def:349 + #, c-format + msgid "RETURN statement at %0 invalid within a main program unit" + msgstr "" + + #: f/bad.def:351 + #, c-format + msgid "Alternate return specifier at %0 invalid within a main program unit" + msgstr "" + + #: f/bad.def:353 + #, c-format + msgid "Alternate return specifier at %0 invalid within a function" + msgstr "" + + #: f/bad.def:355 + #, c-format + msgid "Access specifier or PRIVATE statement at %0 invalid for derived-type definition within other than the specification part of a module" + msgstr "" + + #: f/bad.def:357 + msgid "Access specifier at %0 must immediately follow derived-type statement at %1 with no intervening statements" + msgstr "" + + #: f/bad.def:359 + #, c-format + msgid "No components specified as of %0 for derived-type definition beginning at %1" + msgstr "" + + #: f/bad.def:361 + #, c-format + msgid "No components specified as of %0 for structure definition beginning at %1" + msgstr "" + + #: f/bad.def:363 + #, c-format + msgid "Missing structure name for outer structure definition at %0" + msgstr "" + + #: f/bad.def:365 + #, c-format + msgid "Field names at %0 for outer structure definition -- specify them in a subsequent RECORD statement instead" + msgstr "" + + #: f/bad.def:367 + msgid "Missing field name(s) for structure definition at %0 within structure definition at %1" + msgstr "" + + #: f/bad.def:369 + #, c-format + msgid "No components specified as of %0 for map beginning at %1" + msgstr "" + + #: f/bad.def:371 + msgid "Zero or one maps specified as of %0 for union beginning at %1 -- at least two are required" + msgstr "" + + #: f/bad.def:373 + msgid "Missing %A specifier in statement at %0" + msgstr "" + + #: f/bad.def:375 + #, c-format + msgid "Items in I/O list starting at %0 invalid for namelist-directed I/O" + msgstr "" + + #: f/bad.def:377 + msgid "Conflicting I/O control specifications at %0 and %1" + msgstr "" + + #: f/bad.def:379 + #, c-format + msgid "No UNIT= specifier in I/O control list at %0" + msgstr "" + + #: f/bad.def:381 + msgid "Specification at %0 requires ADVANCE=`NO' specification in same I/O control list" + msgstr "" + + #: f/bad.def:383 + msgid "Specification at %0 requires explicit FMT= specification in same I/O control list" + msgstr "" + + #: f/bad.def:385 + msgid "Unrecognized value for character constant at %0 -- expecting %A" + msgstr "" + + #: f/bad.def:386 + #, fuzzy, c-format + msgid "Unrecognized value for character constant at %0" + msgstr "ìç ôåñìáôéæìÝíï áëöáñéèìçôéêü óôáèåñÜò" + + #: f/bad.def:388 + msgid "Second occurrence of CASE DEFAULT at %0 within SELECT CASE at %1" + msgstr "" + + #: f/bad.def:390 + msgid "Duplicate or overlapping case values/ranges at %0 and %1" + msgstr "" + + #: f/bad.def:392 + msgid "Type and/or kind-type parameter disagreement between CASE value or value within range at %0 and SELECT CASE at %1" + msgstr "" + + #: f/bad.def:394 + #, c-format + msgid "Range specification at %0 invalid for CASE statement within logical-type SELECT CASE statement" + msgstr "" + + #: f/bad.def:396 + #, c-format + msgid "Range specification at %0 invalid -- at least one expression must be specified, or use CASE DEFAULT" + msgstr "" + + #: f/bad.def:397 + #, fuzzy, c-format + msgid "Range specification at %0 invalid" + msgstr "Ìç Ýãêõñç ñýèìéóç èýñáò (port)" + + #: f/bad.def:399 + #, c-format + msgid "Range specification at %0 useless; first expression greater than second expression in range, so range can never be matched by any selection expression" + msgstr "" + + #: f/bad.def:400 + #, c-format + msgid "Useless range at %0" + msgstr "" + + #: f/bad.def:402 + #, c-format + msgid "Fortran 90 feature at %0 unsupported" + msgstr "" + + #: f/bad.def:404 + msgid "Invalid kind at %0 for type at %1 -- unsupported or not permitted" + msgstr "" + + #: f/bad.def:405 + #, fuzzy, c-format + msgid "Invalid kind at %0 for type at %1" + msgstr "Ìç Ýãêõñïò åîáêñéâùôÞò(verifier) åîõðçñåôïýìåíïõ" + + #: f/bad.def:407 + msgid "Cannot establish implicit type for initial letter `%A' at %0 -- already explicitly established or used to set implicit type of some name, or backwards order of letters in letter range" + msgstr "" + + #: f/bad.def:408 + msgid "Cannot establish implicit type for initial letter `%A' at %0" + msgstr "" + + #: f/bad.def:410 + msgid "Invalid declaration of or reference to symbol `%A' at %0 [initially seen at %1]" + msgstr "" + + #: f/bad.def:412 + msgid "Label definition %A (at %0) invalid -- must be in columns 1-5" + msgstr "" + + #: f/bad.def:413 + #, fuzzy + msgid "Invalid label definition %A (at %0)" + msgstr "ìç Ýãêõñïò áñéèìüò áñ÷åßïõ óôç äÞëùóç ðåäßïõ: `%s'" + + #: f/bad.def:415 + #, c-format + msgid "Null element at %0 for array reference at %1" + msgstr "" + + #: f/bad.def:417 + msgid "Too few elements (%A missing) as of %0 for array reference at %1" + msgstr "" + + #: f/bad.def:419 + #, c-format + msgid "Too many elements as of %0 for array reference at %1" + msgstr "" + + #: f/bad.def:421 + #, c-format + msgid "Missing colon as of %0 in substring reference for %1" + msgstr "" + + #: f/bad.def:423 + #, c-format + msgid "Invalid use at %0 of substring operator on %1" + msgstr "" + + #: f/bad.def:425 + #, c-format + msgid "Substring begin/end point at %0 out of defined range" + msgstr "" + + #: f/bad.def:427 + #, c-format + msgid "Array element value at %0 out of defined range" + msgstr "" + + #: f/bad.def:429 + msgid "Expression at %0 has incorrect data type or rank for its context" + msgstr "" + + #: f/bad.def:431 + msgid "Division by 0 (zero) at %0 (IEEE not yet supported)" + msgstr "" + + #: f/bad.def:433 + msgid "%A step count known to be 0 (zero) at %0" + msgstr "" + + #: f/bad.def:435 + msgid "%A end value plus step count known to overflow at %0" + msgstr "" + + #: f/bad.def:437 + msgid "%A begin, end, and step-count values known to result in implementation-dependent behavior due to overflow(s) in intermediate calculations at %0" + msgstr "" + + #: f/bad.def:439 + msgid "%A begin, end, and step-count values known to result in no iterations at %0" + msgstr "" + + #: f/bad.def:441 + msgid "Type disagreement between expressions at %0 and %1" + msgstr "" + + #: f/bad.def:443 + #, c-format + msgid "Run-time expression at %0 in FORMAT statement that does not follow the first executable statement in the program unit -- move the statement" + msgstr "" + + #: f/bad.def:444 + msgid "FORMAT at %0 with run-time expression must follow first executable statement" + msgstr "" + + #: f/bad.def:446 + msgid "Unexpected token at %0 in implied-DO construct at %1 -- form of implied-DO is `(item-list,do-var=start,end[,incr])'" + msgstr "" + + #: f/bad.def:447 + #, c-format + msgid "Unexpected token at %0 in implied-DO construct at %1" + msgstr "" + + #: f/bad.def:449 + msgid "No specification for implied-DO iterator `%A' at %0" + msgstr "" + + #: f/bad.def:451 + #, c-format + msgid "Gratuitous parentheses surround implied-DO construct at %0" + msgstr "" + + #: f/bad.def:453 + #, fuzzy, c-format + msgid "Zero-size specification invalid at %0" + msgstr "%s: Ìç Ýãêõñç ñýèìéóç `%s'.\n" + + #: f/bad.def:455 + #, c-format + msgid "Zero-size array at %0" + msgstr "" + + #: f/bad.def:457 + #, c-format + msgid "Target machine does not support complex entity of kind specified at %0" + msgstr "" + + #: f/bad.def:459 + #, c-format + msgid "Target machine does not support DOUBLE COMPLEX, specified at %0" + msgstr "" + + #: f/bad.def:461 + #, c-format + msgid "Attempt to raise constant zero to a power at %0" + msgstr "" + + #: f/bad.def:463 + msgid "Boolean/logical operator at %0 must operate on two subexpressions of logical type, but neither subexpression at %1 or %2 is of logical type" + msgstr "" + + #: f/bad.def:464 + msgid "Invalid operands at %1 and %2 for boolean operator at %0" + msgstr "" + + #: f/bad.def:466 + msgid "Boolean/logical operator at %0 must operate on two subexpressions of logical type, but the subexpression at %1 is not of logical type" + msgstr "" + + #: f/bad.def:467 + #, fuzzy + msgid "Invalid operand at %1 for boolean operator at %0" + msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'" + + #: f/bad.def:469 + msgid "Boolean/logical operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning logical scalars, or a combination of both -- but the subexpression at %1 is %A" + msgstr "" + + #: f/bad.def:470 + msgid "Invalid operand (is %A) at %1 for boolean operator at %0" + msgstr "" + + #: f/bad.def:472 + msgid ".NOT. operator at %0 must operate on subexpression of logical type, but the subexpression at %1 is not of logical type" + msgstr "" + + #: f/bad.def:473 + #, fuzzy + msgid "Invalid operand at %1 for .NOT. operator at %0" + msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'" + + #: f/bad.def:475 + msgid ".NOT. operator at %0 must operate on scalar subexpressions -- but the subexpression at %1 is %A" + msgstr "" + + #: f/bad.def:476 + msgid "Invalid operand (is %A) at %1 for .NOT. operator at %0" + msgstr "" + + #: f/bad.def:478 + msgid "Equality operator at %0 must operate on two subexpressions of arithmetic or character type, but neither subexpression at %1 or %2 is of arithmetic or character type" + msgstr "" + + #: f/bad.def:479 + msgid "Invalid operands at %1 and %2 for equality operator at %0" + msgstr "" + + #: f/bad.def:481 + msgid "Equality operator at %0 must operate on two subexpressions of arithmetic or character type, but the subexpression at %1 is not of arithmetic or character type" + msgstr "" + + #: f/bad.def:482 + msgid "Invalid operand at %1 for equality operator at %0" + msgstr "" + + #: f/bad.def:484 + msgid "Equality operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning arithmetic or character scalars, or a combination of both -- but the subexpression at %1 is %A" + msgstr "" + + #: f/bad.def:485 + msgid "Invalid operand (is %A) at %1 for equality operator at %0" + msgstr "" + + #: f/bad.def:487 + msgid "Relational operator at %0 must operate on two subexpressions of integer, real, or character type, but neither subexpression at %1 or %2 is of integer, real, or character type" + msgstr "" + + #: f/bad.def:488 + msgid "Invalid operands at %1 and %2 for relational operator at %0" + msgstr "" + + #: f/bad.def:490 + msgid "Relational operator at %0 must operate on two subexpressions of integer, real, or character type, but the subexpression at %1 is not of integer, real, or character type" + msgstr "" + + #: f/bad.def:491 + #, fuzzy + msgid "Invalid operand at %1 for relational operator at %0" + msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'" + + #: f/bad.def:493 + msgid "Relational operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning integer, real, or character scalars, or a combination of both -- but the subexpression at %1 is %A" + msgstr "" + + #: f/bad.def:494 + msgid "Invalid operand (is %A) at %1 for relational operator at %0" + msgstr "" + + #: f/bad.def:496 + msgid "Reference to intrinsic `%A' at %0 invalid -- one or more arguments have incorrect type" + msgstr "" + + #: f/bad.def:497 + #, fuzzy + msgid "Invalid reference to intrinsic `%A' at %0" + msgstr "Ìç Ýãêõñç ðéóù-ðáñáðïìðÞ" + + #: f/bad.def:499 + #, fuzzy + msgid "Too few arguments passed to intrinsic `%A' at %0" + msgstr "Ðñïåéäïðïßçóç: Ðïëý ëßãá ïñßóìáôá óôï åóùäïìçìÝíï `%s'" + + #: f/bad.def:500 + #, fuzzy + msgid "Too few arguments for intrinsic `%A' at %0" + msgstr "Ðñïåéäïðïßçóç: Ðïëý ëßãá ïñßóìáôá óôï åóùäïìçìÝíï `%s'" + + #: f/bad.def:502 + #, fuzzy + msgid "Too many arguments passed to intrinsic `%A' at %0" + msgstr "ðÜñá ðïëëÜ ïñßóìáôá" + + #: f/bad.def:503 + #, fuzzy + msgid "Too many arguments for intrinsic `%A' at %0" + msgstr "ðÜñá ðïëëÜ ïñßóìáôá" + + #: f/bad.def:505 + msgid "Reference to disabled intrinsic `%A' at %0" + msgstr "" + + #: f/bad.def:506 + msgid "Disabled intrinsic `%A' at %0" + msgstr "" + + #: f/bad.def:508 + msgid "Reference to intrinsic subroutine `%A' as if it were a function at %0" + msgstr "" + + #: f/bad.def:509 + msgid "Function reference to intrinsic subroutine `%A' at %0" + msgstr "" + + #: f/bad.def:511 + msgid "Reference to intrinsic function `%A' as if it were a subroutine at %0" + msgstr "" + + #: f/bad.def:512 + msgid "Subroutine reference to intrinsic function `%A' at %0" + msgstr "" + + #: f/bad.def:514 + msgid "Reference to unimplemented intrinsic `%A' at %0 -- use EXTERNAL to reference user-written procedure with this name" + msgstr "" + + #: f/bad.def:515 + msgid "Unimplemented intrinsic `%A' at %0" + msgstr "" + + #: f/bad.def:517 + msgid "Reference to unimplemented intrinsic `%A' at %0 (assumed EXTERNAL)" + msgstr "" + + #: f/bad.def:518 + msgid "Unimplemented intrinsic `%A' at %0 (assumed EXTERNAL)" + msgstr "" + + #: f/bad.def:520 + msgid "Reference to generic intrinsic `%A' at %0 could be to form %B or %C" + msgstr "" + + #: f/bad.def:522 + msgid "Ambiguous use of intrinsic `%A' at %0 [info -f g77 M CMPAMBIG]" + msgstr "" + + #: f/bad.def:524 + msgid "Intrinsic `%A' referenced %Bly at %0, %Cly at %1 [info -f g77 M EXPIMP]" + msgstr "" + + #: f/bad.def:526 + msgid "Same name `%A' used for %B at %0 and %C at %1 [info -f g77 M INTGLOB]" + msgstr "" + + #: f/bad.def:528 + msgid "Explicit type declaration for intrinsic `%A' disagrees with invocation at %0" + msgstr "" + + #: f/bad.def:530 + #, fuzzy + msgid "Unable to open INCLUDE file `%A' at %0" + msgstr "Äåí ìðüñåóá íá áíïßîù ôï áñ÷åßï %s" + + #: f/bad.def:532 + msgid "Attempt to modify variable `%A' at %0 while it serves as DO-loop iterator at %1" + msgstr "" + + #: f/bad.def:533 f/bad.def:536 + msgid "Modification of DO-loop iterator `%A' at %0" + msgstr "" + + #: f/bad.def:535 + msgid "Attempt to modify variable `%A' via item #%B in list at %0 while it serves as implied-DO iterator at %1" + msgstr "" + + #: f/bad.def:538 + #, c-format + msgid "Array has too many dimensions, as of dimension specifier at %0" + msgstr "" + + #: f/bad.def:539 + #, fuzzy, c-format + msgid "Too many dimensions at %0" + msgstr "ðÜñá ðïëëÜ ïñßóìáôá óôç êëÞóç ôçò `%s'" + + #: f/bad.def:541 + #, c-format + msgid "Null argument at %0 for statement function reference at %1" + msgstr "" + + #: f/bad.def:543 + #, c-format + msgid "Null argument at %0 for procedure invocation at %1" + msgstr "" + + #: f/bad.def:545 + msgid "%A too few arguments (starting with dummy argument `%B') as of %0 for statement function reference at %1" + msgstr "" + + #: f/bad.def:547 + msgid "%A too many arguments as of %0 for statement function reference at %1" + msgstr "" + + #: f/bad.def:549 + msgid "Array supplied at %1 for dummy argument `%A' in statement function reference at %0" + msgstr "" + + #: f/bad.def:551 + #, c-format + msgid "Unsupported FORMAT specifier at %0" + msgstr "" + + #: f/bad.def:553 + #, c-format + msgid "Variable-expression FORMAT specifier at %0 -- unsupported" + msgstr "" + + #: f/bad.def:555 + msgid "Unsupported OPEN control item at %0 -- ACTION=, ASSOCIATEVARIABLE=, BLOCKSIZE=, BUFFERCOUNT=, CARRIAGECONTROL=, DEFAULTFILE=, DELIM=, DISPOSE=, EXTENDSIZE=, INITIALSIZE=, KEY=, MAXREC=, NOSPANBLOCKS, ORGANIZATION=, PAD=, POSITION=, READONLY=, RECORDTYPE=, SHARED=, and USEROPEN= are not supported" + msgstr "" + + #: f/bad.def:556 + #, c-format + msgid "Unsupported OPEN control item at %0" + msgstr "" + + #: f/bad.def:558 + msgid "Unsupported INQUIRE control item at %0 -- ACTION=, CARRIAGECONTROL=, DEFAULTFILE=, DELIM=, KEYED=, ORGANIZATION=, PAD=, POSITION=, READ=, READWRITE=, RECORDTYPE=, and WRITE= are not supported" + msgstr "" + + #: f/bad.def:559 + #, c-format + msgid "Unsupported INQUIRE control item at %0" + msgstr "" + + #: f/bad.def:561 + msgid "Unsupported READ control item at %0 -- ADVANCE=, EOR=, KEYEQ=, KEYGE=, KEYGT=, KEYID=, NULLS=, and SIZE= are not supported" + msgstr "" + + #: f/bad.def:562 + #, c-format + msgid "Unsupported READ control item at %0" + msgstr "" + + #: f/bad.def:564 + msgid "Unsupported WRITE control item at %0 -- ADVANCE= and EOR= are not supported" + msgstr "" + + #: f/bad.def:565 + #, c-format + msgid "Unsupported WRITE control item at %0" + msgstr "" + + #: f/bad.def:567 + #, c-format + msgid "Unsupported VXT statement at %0" + msgstr "" + + #: f/bad.def:569 + msgid "Attempt to specify second initial value for `%A' at %0" + msgstr "" + + #: f/bad.def:571 + msgid "Too few initial values in list of initializers for `%A' at %0" + msgstr "" + + #: f/bad.def:573 + #, c-format + msgid "Too many initial values in list of initializers starting at %0" + msgstr "" + + #: f/bad.def:575 + msgid "Array or substring specification for `%A' out of range in statement at %0" + msgstr "" + + #: f/bad.def:577 + msgid "Array subscript #%B out of range for initialization of `%A' in statement at %0" + msgstr "" + + #: f/bad.def:579 + msgid "Implied do-loop step count of 0 (zero) for iteration variable `%A' in statement at %0" + msgstr "" + + #: f/bad.def:581 + msgid "Implied do-loop iteration count of 0 (zero) for iteration variable `%A' in statement at %0" + msgstr "" + + #: f/bad.def:583 + #, c-format + msgid "Not an integer constant expression in implied do-loop in statement at %0" + msgstr "" + + #: f/bad.def:585 + msgid "Attempt to specify second initial value for element of `%A' at %0" + msgstr "" + + #: f/bad.def:587 + msgid "Attempt to EQUIVALENCE common areas `%A' and `%B' at %0" + msgstr "" + + #: f/bad.def:589 + msgid "Can't place `%A' as directed by EQUIVALENCE due to alignment restrictions" + msgstr "" + + #: f/bad.def:591 + msgid "Mismatched EQUIVALENCE requirements for placement of `%A' at both %C and %D bytes offset from `%B'" + msgstr "" + + #: f/bad.def:593 + msgid "Array or substring specification for `%A' out of range in EQUIVALENCE statement" + msgstr "" + + #: f/bad.def:595 + msgid "Substring of non-CHARACTER entity `%A' in EQUIVALENCE statement" + msgstr "" + + #: f/bad.def:597 + msgid "Array reference to scalar variable `%A' in EQUIVALENCE statement" + msgstr "" + + #: f/bad.def:599 + msgid "Array subscript #%B out of range for EQUIVALENCE of `%A'" + msgstr "" + + #: f/bad.def:601 + msgid "Padding of %A %D required before `%B' in common block `%C' at %0 -- consider reordering members, largest-type-size first" + msgstr "" + + #: f/bad.def:602 + msgid "Padding of %A %D required before `%B' in common block `%C' at %0" + msgstr "" + + #: f/bad.def:604 + msgid "Attempt to extend COMMON area beyond its starting point via EQUIVALENCE of `%A'" + msgstr "" + + #: f/bad.def:606 + msgid "Too few elements in reference to array `%A' in EQUIVALENCE statement" + msgstr "" + + #: f/bad.def:608 + msgid "Too many elements in reference to array `%A' in EQUIVALENCE statement" + msgstr "" + + #: f/bad.def:610 + msgid "Mixed CHARACTER and non-CHARACTER types via COMMON/EQUIVALENCE -- for example, `%A' and `%B'" + msgstr "" + + #: f/bad.def:612 + #, c-format + msgid "Invalid length specification at %0 for IMPLICIT statement -- must be integer constant expression" + msgstr "" + + #: f/bad.def:613 + #, fuzzy, c-format + msgid "Invalid length specification at %0" + msgstr "Ìç Ýãêõñç ñýèìéóç èýñáò (port)" + + #: f/bad.def:615 + msgid "Type of ENTRY point at %0 to function conflicts with type(s) of previous entrypoint(s) -- must all be identical-length CHARACTER or none be CHARACTER type" + msgstr "" + + #: f/bad.def:616 + msgid "Type of ENTRY point at %0 to function conflicts with type(s) of previous entrypoint(s)" + msgstr "" + + #: f/bad.def:618 + msgid "Return value `%A' for FUNCTION at %0 not referenced in subprogram" + msgstr "" + + #: f/bad.def:620 + msgid "Common block `%A' initialized at %0 already initialized at %1 -- only one program unit may specify initial values for a particular common block" + msgstr "" + + #: f/bad.def:621 + msgid "Common block `%A' initialized at %0 already initialized at %1" + msgstr "" + + #: f/bad.def:623 + msgid "Initial padding for common block `%A' is %B %C at %0 -- consider reordering members, largest-type-size first" + msgstr "" + + #: f/bad.def:624 + msgid "Initial padding for common block `%A' is %B %C at %0" + msgstr "" + + #: f/bad.def:626 + msgid "Initial padding for common block `%A' is %B %D at %0 but %C %E at %1 -- consider reordering members, largest-type-size first" + msgstr "" + + #: f/bad.def:627 + msgid "Initial padding for common block `%A' is %B %D at %0 but %C %E at %1" + msgstr "" + + #: f/bad.def:629 + msgid "Common block `%A' is SAVEd, explicitly or implicitly, at %0 but not SAVEd at %1" + msgstr "" + + #: f/bad.def:631 + msgid "Common block `%A' is %B %D in length at %0 but %C %E at %1" + msgstr "" + + #: f/bad.def:633 + msgid "Common block `%A' is initialized to %B %D long at %0 but enlarged to %C %E at %1 -- use consistent definitions or reorder program units in source file" + msgstr "" + + #: f/bad.def:634 + msgid "Common block `%A' is initialized to %B %D long at %0 but enlarged to %C %E at %1" + msgstr "" + + #: f/bad.def:636 + #, c-format + msgid "Blank common initialized at %0" + msgstr "" + + #: f/bad.def:638 + msgid "Intrinsic `%A' is passed as actual argument at %0 but not explicitly declared INTRINSIC" + msgstr "" + + #: f/bad.def:640 + msgid "External procedure `%A' is passed as actual argument at %0 but not explicitly declared EXTERNAL" + msgstr "" + + #: f/bad.def:642 + msgid "Character `%A' (for example) is upper-case in symbol name at %0" + msgstr "" + + #: f/bad.def:644 + msgid "Character `%A' (for example) is lower-case in symbol name at %0" + msgstr "" + + #: f/bad.def:646 + msgid "Character `%A' not followed at some point by lower-case character in symbol name at %0" + msgstr "" + + #: f/bad.def:648 + msgid "Initial character `%A' is lower-case in symbol name at %0" + msgstr "" + + #: f/bad.def:650 + msgid "DO-variable `%A' is type REAL or DOUBLE PRECISION at %0 -- unexpected behavior likely" + msgstr "" + + #: f/bad.def:651 + msgid "DO-variable `%A' is type REAL or DOUBLE PRECISION at %0" + msgstr "" + + #: f/bad.def:653 + msgid "NAMELIST not adequately supported by run-time library for source files with case preserved" + msgstr "" + + #: f/bad.def:655 + #, c-format + msgid "Nested %% construct (%%VAL, %%REF, or %%DESCR) at %0" + msgstr "" + + #: f/bad.def:657 + msgid "Invalid actual argument at %0 -- replace hollerith constants with %%REF('string') and typeless constants with INTEGER constant equivalents, or use -fugly-args or -fugly" + msgstr "" + + #: f/bad.def:658 + #, fuzzy, c-format + msgid "Invalid actual argument at %0" + msgstr "Ç ðáñÜìåôñïò `%s' äåí åßíáé Ýãêõñç." + + #: f/bad.def:660 + msgid "Quadruple-precision floating-point unsupported -- treating constant at %0 as double-precision" + msgstr "" + + #: f/bad.def:661 + msgid "Quadruple-precision floating-point unsupported" + msgstr "" + + #: f/bad.def:663 + msgid "Initialization of large (%B-unit) aggregate area `%A' at %0 currently very slow and takes lots of memory during g77 compile -- to be improved in 0.6" + msgstr "" + + #: f/bad.def:664 + msgid "This could take a while (initializing `%A' at %0)..." + msgstr "" + + #: f/bad.def:666 + #, c-format + msgid "Statement at %0 invalid in BLOCK DATA program unit at %1" + msgstr "" + + #: f/bad.def:668 + #, fuzzy, c-format + msgid "Truncating characters on right side of character constant at %0" + msgstr "äéðëü üíïìá ÷áñáêôÞñá `%s'" + + #: f/bad.def:670 + #, c-format + msgid "Truncating characters on right side of hollerith constant at %0" + msgstr "" + + #: f/bad.def:672 + #, c-format + msgid "Truncating non-zero data on left side of numeric constant at %0" + msgstr "" + + #: f/bad.def:674 + #, c-format + msgid "Truncating non-zero data on left side of typeless constant at %0" + msgstr "" + + #: f/bad.def:676 + #, fuzzy + msgid "Typeless constant at %0 too large" + msgstr "ó÷åôéêÞ èÝóç áñ÷åßïõ åßíáé åêôüò ïñßùí" + + #: f/bad.def:678 + #, c-format + msgid "First-column ampersand continuation at %0" + msgstr "" + + #: f/bad.def:680 f/bad.def:682 + msgid "Global name `%A' defined at %0 already defined at %1 [info -f g77 M GLOBALS]" + msgstr "" + + #: f/bad.def:684 f/bad.def:686 + msgid "Global name `%A' is %B at %0 but is %C at %1 [info -f g77 M GLOBALS]" + msgstr "" + + #: f/bad.def:688 f/bad.def:690 + msgid "Global name `%A' at %0 has different type at %1 [info -f g77 M GLOBALS]" + msgstr "" + + #: f/bad.def:692 + msgid "Too %B arguments passed to `%A' at %0 versus definition at %1 [info -f g77 M GLOBALS]" + msgstr "" + + #: f/bad.def:694 + msgid "Too %B arguments for `%A' at %0 versus invocation at %1 [info -f g77 M GLOBALS]" + msgstr "" + + #: f/bad.def:696 f/bad.def:698 + msgid "Argument #%B of `%A' is %C at %0 but is %D at %1 [info -f g77 M GLOBALS]" + msgstr "" + + #: f/bad.def:700 + #, fuzzy + msgid "Array `%A' at %0 is too large to handle" + msgstr "Ï êáôÜëïãïò `%s' äåí åßíáé ðñïóéôüò." + + #: f/bad.def:702 + msgid "Statement function `%A' defined at %0 is not used" + msgstr "" + + #: f/bad.def:704 + msgid "Intrinsic `%A', invoked at %0, known to be non-Y2K-compliant [info -f g77 M Y2KBAD]" + msgstr "" + + #: f/bad.def:706 + #, fuzzy + msgid "Internal compiler error -- cannot perform operation" + msgstr "åóùôåñéêü óöÜëìá óôï %s, ãñáììÞ %u" + + # src/grep.c:1133 + #. Kind messages are used in diagnostic location reports of the + #. form ": In function `foo': ". + #: f/info-k.def:32 + #, fuzzy + msgid "In unknown kind" + msgstr "Üãíùóôç ìÝèïäïò êáôáëüãùí" + + #: f/info-k.def:33 + msgid "In entity" + msgstr "" + + #: f/info-k.def:34 + #, fuzzy + msgid "In function" + msgstr "Óôç óõíÜñôçóç `%s':" + + #: f/info-k.def:35 + msgid "In subroutine" + msgstr "" + + #: f/info-k.def:36 + msgid "In program" + msgstr "" + + #: f/info-k.def:37 + msgid "In block-data unit" + msgstr "" + + #: f/info-k.def:38 + msgid "In common block" + msgstr "" + + #: f/info-k.def:39 + msgid "In construct" + msgstr "" + + #: f/info-k.def:40 + msgid "In namelist" + msgstr "" + + #: f/info-k.def:41 + msgid "In anything" + msgstr "" + + #: java/check-init.c:915 + #, c-format + msgid "internal error in check-init: tree code not implemented: %s" + msgstr "" + + #: java/check-init.c:988 + #, c-format + msgid "final field '%s' may not have been initialized" + msgstr "" + + #: java/class.c:567 java/class.c:592 + #, fuzzy + msgid "internal error - too many interface type" + msgstr "åóùôåñéêü óöÜëìá óôï %s, ãñáììÞ %u" + + #: java/class.c:742 + msgid "bad method signature" + msgstr "" + + #: java/class.c:787 + msgid "misplaced ConstantValue attribute (not in any field)" + msgstr "" + + #: java/class.c:789 + #, c-format + msgid "duplicate ConstantValue attribute for field '%s'" + msgstr "" + + #: java/class.c:800 + #, c-format + msgid "ConstantValue attribute of field '%s' has wrong type" + msgstr "" + + #: java/class.c:1149 + #, c-format + msgid "field '%s' not found in class" + msgstr "" + + #: java/class.c:1407 + msgid "abstract method in non-abstract class" + msgstr "" + + #: java/class.c:2092 + #, c-format + msgid "non-static method '%s' overrides static method" + msgstr "" + + #: java/decl.c:1511 + #, c-format + msgid "In %s: overlapped variable and exception ranges at %d" + msgstr "" + + #: java/decl.c:1599 + msgid "bad type in parameter debug info" + msgstr "" + + #: java/decl.c:1609 + #, c-format + msgid "bad PC range for debug info for local `%s'" + msgstr "" + + #: java/expr.c:550 + msgid "stack underflow - dup* operation" + msgstr "" + + #: java/expr.c:1504 + #, c-format + msgid "reference `%s' is ambiguous: appears in interface `%s' and interface `%s'" + msgstr "" + + #: java/expr.c:1533 + #, fuzzy, c-format + msgid "field `%s' not found" + msgstr "ôï áñ÷åßï ÷Üñôç ÷áñáêôÞñùí `%s' äåí âñÝèçêå" + + #: java/expr.c:1684 + #, fuzzy + msgid "ret instruction not implemented" + msgstr "Ç ëåéôïõñãßá äåí Ý÷åé õëïðïéçèåß" + + #: java/expr.c:1821 + #, c-format + msgid "method '%s' not found in class" + msgstr "" + + #: java/expr.c:2025 + #, c-format + msgid "failed to find class '%s'" + msgstr "" + + #: java/expr.c:2037 + #, c-format + msgid "class '%s' has no method named '%s' matching signature '%s'" + msgstr "" + + #: java/expr.c:2047 + msgid "invokestatic on non static method" + msgstr "" + + #: java/expr.c:2052 + msgid "invokestatic on abstract method" + msgstr "" + + #: java/expr.c:2060 + msgid "invoke[non-static] on static method" + msgstr "" + + #: java/expr.c:2337 + #, c-format + msgid "missing field '%s' in '%s'" + msgstr "" + + #: java/expr.c:2343 + #, c-format + msgid "mismatching signature for field '%s' in '%s'" + msgstr "" + + #: java/expr.c:2366 + #, c-format + msgid "assignment to final field `%s' not in field's class" + msgstr "" + + #: java/expr.c:2371 + #, c-format + msgid "assignment to final static field `%s' not in class initializer" + msgstr "" + + #: java/expr.c:2378 + #, c-format + msgid "assignment to final field `%s' not in constructor" + msgstr "" + + #: java/expr.c:2616 + #, fuzzy, c-format + msgid "can't expand %s" + msgstr "%s: áäõíáìßá óôçí áíÜãíùóç %s: %s\n" + + #: java/expr.c:2792 + #, fuzzy + msgid "invalid PC in line number table" + msgstr "ìç Ýãêõñïò áñ÷éêüò áñéèìüò ãñáììÞò: `%s'" + + #. We've just reached the end of a region of dead code. + #: java/expr.c:2837 + #, c-format + msgid "unreachable bytecode from %d to before %d" + msgstr "" + + #. We've just reached the end of a region of dead code. + #: java/expr.c:2874 + #, c-format + msgid "unreachable bytecode from %d to the end of the method" + msgstr "" + + #. duplicate code from LOAD macro + #: java/expr.c:3193 + msgid "unrecogized wide sub-instruction" + msgstr "" + + #: java/jcf-io.c:410 + #, c-format + msgid "source file for class `%s' is newer than its matching class file. Source file `%s' used instead" + msgstr "" + + #: java/jcf-parse.c:379 + #, fuzzy + msgid "bad string constant" + msgstr "ìç ôåñìáôéæìÝíï áëöáñéèìçôéêü óôáèåñÜò" + + #: java/jcf-parse.c:435 + #, c-format + msgid "bad value constant type %d, index %d" + msgstr "" + + #: java/jcf-parse.c:693 + #, fuzzy, c-format + msgid "cannot find file for class %s" + msgstr "äå âñÝèçêå ï ðñïåðåîåñãáóôÞò C: %s \n" + + #: java/jcf-parse.c:705 + #, fuzzy + msgid "not a valid Java .class file" + msgstr "Ìç Ýãêõñïò ÷áñáêôÞñáò ïíüìáôïò êëÜóçò" + + #: java/jcf-parse.c:708 + #, fuzzy + msgid "error while parsing constant pool" + msgstr "óöÜëìá êáôÜ ôï êëåßóéìï ôïõ áñ÷åßïõ åîüäïõ" + + #: java/jcf-parse.c:711 + #, c-format + msgid "error in constant pool entry #%d\n" + msgstr "" + + #. FIXME - where was first time + #: java/jcf-parse.c:723 + #, c-format + msgid "reading class %s for the second time from %s" + msgstr "" + + #: java/jcf-parse.c:741 + #, fuzzy + msgid "error while parsing fields" + msgstr "óöÜëìá êáôÜ ôï êëåßóéìï ôïõ áñ÷åßïõ åîüäïõ" + + #: java/jcf-parse.c:744 + #, fuzzy + msgid "error while parsing methods" + msgstr "óöÜëìá êáôÜ ôçí áíÜãíùóç ôçò åéóüäïõ" + + #: java/jcf-parse.c:747 + #, fuzzy + msgid "error while parsing final attributes" + msgstr "óöÜëìá êáôÜ ôï êëåßóéìï ôçò åéóüäïõ `%s'" + + #: java/jcf-parse.c:761 + #, c-format + msgid "the `java.lang.Object' that was found in `%s' didn't have the special zero-length `gnu.gcj.gcj-compiled' attribute. This generally means that your classpath is incorrectly set. Use `info gcj \"Input Options\"' to see the info page describing how to set the classpath" + msgstr "" + + #: java/jcf-parse.c:846 + #, fuzzy + msgid "missing Code attribute" + msgstr "ÅëëéðÞò Þ êáêïó÷çìáôéóìÝíç éäéüôçôá" + + #: java/jcf-parse.c:1081 + msgid "source file seen twice on command line and will be compiled only once" + msgstr "" + + #: java/jcf-parse.c:1097 + #, fuzzy + msgid "no input file specified" + msgstr "Äåí õðÜñ÷ïõí áñ÷åßá åéóüäïõ" + + #: java/jcf-parse.c:1129 + #, fuzzy, c-format + msgid "can't close input file %s" + msgstr "áäõíáìßá áíïßãìáôïò áñ÷åßïõ åéóüäïõ `%s'" + + #: java/jcf-parse.c:1166 + #, c-format + msgid "bad zip/jar file %s" + msgstr "" + + #: java/jcf-write.c:2626 + #, c-format + msgid "internal error in generate_bytecode_insn - tree code not implemented: %s" + msgstr "" + + #: java/jcf-write.c:2933 + #, fuzzy + msgid "field initializer type mismatch" + msgstr "Êáêïóõíôáßñéáóìá ôýðùí êáôá÷þñçóçò/ðßíáêá" + + #: java/jcf-write.c:3342 + #, fuzzy, c-format + msgid "can't create directory %s" + msgstr "%s: Äåí åßíáé äõíáôüí íá äçìéïõñãçèåß ï êáôÜëïãïò %s: %s\n" + + #: java/jcf-write.c:3369 + #, fuzzy, c-format + msgid "can't to open %s" + msgstr "áäõíáìßá áíïßãìáôïò ôïõ `%s'" + + #: java/jv-scan.c:183 + msgid "only one of `--print-main', `--list-class', and `--complexity' allowed" + msgstr "" + + #: java/jv-scan.c:186 + #, fuzzy, c-format + msgid "can't open output file `%s'" + msgstr "áäõíáìßá áíïßãìáôïò áñ÷åßïõ åîüäïõ `%s'" + + #: java/jv-scan.c:222 + #, fuzzy, c-format + msgid "file not found `%s'" + msgstr "Ìç Ýãêõñç åðéëïãÞ `%s'" + + #: java/jvspec.c:384 + msgid "can't specify `-D' without `--main'\n" + msgstr "" + + #: java/jvspec.c:390 + #, fuzzy + msgid "-R requires -o" + msgstr "ÅóöáëìÝíïò êþäéêáò áßôçóçò" + + #: java/jvspec.c:397 + msgid "warning: already-compiled .class files ignored with -C" + msgstr "" + + #: java/jvspec.c:404 + #, fuzzy + msgid "cannot specify both -C and -o" + msgstr "äåí åßíáé äõíáôü íá ðáñáëçöèåß ï ÷ñÞóôçò êáé ç ïìÜäá" + + #: java/jvspec.c:416 + #, fuzzy + msgid "cannot create temporary file" + msgstr "ÓÖÁËÌÁ: Áäõíáìßá äçìéïõñãßáò ðñïóùñéíïý áñ÷åßïõ ãéá áëëáãÞ" + + #: java/jvspec.c:444 + msgid "using both @FILE with multiple files not implemented" + msgstr "" + + #: java/jvspec.c:501 + #, fuzzy + msgid "cannot specify `main' class when not linking" + msgstr "Äåí åßíáé äõíáôü íá äçëùèåß áñéèìüò óôçëþí óôçí ðáñÜëëçëç åêôýðùóç." + + #: java/lang.c:433 + msgid "can't do dependency tracking with input from stdin" + msgstr "" + + #: java/lang.c:449 + msgid "couldn't determine target name for dependency tracking" + msgstr "" + + #: java/lex.c:303 + #, c-format + msgid "" + "unknown encoding: `%s'\n" + "This might mean that your locale's encoding is not supported\n" + "by your system's iconv(3) implementation. If you aren't trying\n" + "to use a particular encoding for your input file, try the\n" + "`--encoding=UTF-8' option" + msgstr "" + + #: java/mangle.c:85 + #, fuzzy, c-format + msgid "can't mangle %s" + msgstr "Äåí åßíáé äõíáôüí íá åêôåëåóôåß ôï %s" + + #: java/mangle_name.c:145 java/mangle_name.c:217 + #, fuzzy + msgid "internal error - invalid Utf8 name" + msgstr "åóùôåñéêü óöÜëìá óôï %s, ãñáììÞ %u" + + #: ../../../gcc/vanilla/gcc/java/parse.y:748 + #: ../../../gcc/vanilla/gcc/java/parse.y:786 + #, fuzzy + msgid "Missing name" + msgstr "¸÷åé ðáñáëçöèåß åíôïëÞ" + + #: ../../../gcc/vanilla/gcc/java/parse.y:750 + #: ../../../gcc/vanilla/gcc/java/parse.y:788 + #: ../../../gcc/vanilla/gcc/java/parse.y:813 + #: ../../../gcc/vanilla/gcc/java/parse.y:997 + #: ../../../gcc/vanilla/gcc/java/parse.y:1344 + #: ../../../gcc/vanilla/gcc/java/parse.y:1555 + #: ../../../gcc/vanilla/gcc/java/parse.y:1557 + #: ../../../gcc/vanilla/gcc/java/parse.y:1786 + #: ../../../gcc/vanilla/gcc/java/parse.y:1812 + #: ../../../gcc/vanilla/gcc/java/parse.y:1823 + #: ../../../gcc/vanilla/gcc/java/parse.y:1834 + #: ../../../gcc/vanilla/gcc/java/parse.y:1846 + msgid "';' expected" + msgstr "áíáìåíüôáí ';'" + + #: ../../../gcc/vanilla/gcc/java/parse.y:811 + msgid "'*' expected" + msgstr "áíáìåíüôáí '*'" + + #: ../../../gcc/vanilla/gcc/java/parse.y:825 + msgid "Class or interface declaration expected" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:860 + #: ../../../gcc/vanilla/gcc/java/parse.y:862 + #, fuzzy + msgid "Missing class name" + msgstr "¸÷åé ðáñáëçöèåß åíôïëÞ" + + #: ../../../gcc/vanilla/gcc/java/parse.y:865 + #: ../../../gcc/vanilla/gcc/java/parse.y:869 + #: ../../../gcc/vanilla/gcc/java/parse.y:877 + #: ../../../gcc/vanilla/gcc/java/parse.y:1042 + #: ../../../gcc/vanilla/gcc/java/parse.y:1290 + #: ../../../gcc/vanilla/gcc/java/parse.y:1292 + #: ../../../gcc/vanilla/gcc/java/parse.y:1621 + #: ../../../gcc/vanilla/gcc/java/parse.y:1857 + #: ../../../gcc/vanilla/gcc/java/parse.y:1889 + #: ../../../gcc/vanilla/gcc/java/parse.y:1941 + msgid "'{' expected" + msgstr "áíáìåíüôáí '{'" + + #: ../../../gcc/vanilla/gcc/java/parse.y:879 + msgid "Missing super class name" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:889 + #: ../../../gcc/vanilla/gcc/java/parse.y:905 + #, fuzzy + msgid "Missing interface name" + msgstr "ðáñÜëçøç ïñßóìáôïò áñ÷åßïõ" + + #: ../../../gcc/vanilla/gcc/java/parse.y:976 + #: ../../../gcc/vanilla/gcc/java/parse.y:1309 + #: ../../../gcc/vanilla/gcc/java/parse.y:1370 + #: ../../../gcc/vanilla/gcc/java/parse.y:1579 + #: ../../../gcc/vanilla/gcc/java/parse.y:1801 + #: ../../../gcc/vanilla/gcc/java/parse.y:1810 + #: ../../../gcc/vanilla/gcc/java/parse.y:1821 + #: ../../../gcc/vanilla/gcc/java/parse.y:1832 + #: ../../../gcc/vanilla/gcc/java/parse.y:1844 + #: ../../../gcc/vanilla/gcc/java/parse.y:1861 + #: ../../../gcc/vanilla/gcc/java/parse.y:1863 + #: ../../../gcc/vanilla/gcc/java/parse.y:1934 + #: ../../../gcc/vanilla/gcc/java/parse.y:2105 + #: ../../../gcc/vanilla/gcc/java/parse.y:2167 + #: ../../../gcc/vanilla/gcc/java/parse.y:2319 + #: ../../../gcc/vanilla/gcc/java/parse.y:2331 + #: ../../../gcc/vanilla/gcc/java/parse.y:2338 + #: ../../../gcc/vanilla/gcc/java/parse.y:2345 + #: ../../../gcc/vanilla/gcc/java/parse.y:2356 + #: ../../../gcc/vanilla/gcc/java/parse.y:2358 + #: ../../../gcc/vanilla/gcc/java/parse.y:2396 + #: ../../../gcc/vanilla/gcc/java/parse.y:2398 + #: ../../../gcc/vanilla/gcc/java/parse.y:2400 + #: ../../../gcc/vanilla/gcc/java/parse.y:2421 + #: ../../../gcc/vanilla/gcc/java/parse.y:2423 + #: ../../../gcc/vanilla/gcc/java/parse.y:2425 + #: ../../../gcc/vanilla/gcc/java/parse.y:2441 + #: ../../../gcc/vanilla/gcc/java/parse.y:2443 + #: ../../../gcc/vanilla/gcc/java/parse.y:2464 + #: ../../../gcc/vanilla/gcc/java/parse.y:2466 + #: ../../../gcc/vanilla/gcc/java/parse.y:2468 + #: ../../../gcc/vanilla/gcc/java/parse.y:2496 + #: ../../../gcc/vanilla/gcc/java/parse.y:2498 + #: ../../../gcc/vanilla/gcc/java/parse.y:2500 + #: ../../../gcc/vanilla/gcc/java/parse.y:2502 + #: ../../../gcc/vanilla/gcc/java/parse.y:2520 + #: ../../../gcc/vanilla/gcc/java/parse.y:2522 + #: ../../../gcc/vanilla/gcc/java/parse.y:2533 + #: ../../../gcc/vanilla/gcc/java/parse.y:2544 + #: ../../../gcc/vanilla/gcc/java/parse.y:2555 + #: ../../../gcc/vanilla/gcc/java/parse.y:2566 + #: ../../../gcc/vanilla/gcc/java/parse.y:2577 + #: ../../../gcc/vanilla/gcc/java/parse.y:2590 + #: ../../../gcc/vanilla/gcc/java/parse.y:2594 + #: ../../../gcc/vanilla/gcc/java/parse.y:2596 + #: ../../../gcc/vanilla/gcc/java/parse.y:2609 + #, fuzzy + msgid "Missing term" + msgstr "¸÷åé ðáñáëçöèåß åíôïëÞ" + + #: ../../../gcc/vanilla/gcc/java/parse.y:991 + msgid "Missing variable initializer" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1008 + #, fuzzy + msgid "Invalid declaration" + msgstr "Ìç Ýãêõñç áíôáëëáãÞ" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1014 + msgid "Can't specify array dimension in a declaration" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1016 + #: ../../../gcc/vanilla/gcc/java/parse.y:1092 + #: ../../../gcc/vanilla/gcc/java/parse.y:2142 + #: ../../../gcc/vanilla/gcc/java/parse.y:2164 + #: ../../../gcc/vanilla/gcc/java/parse.y:2168 + #: ../../../gcc/vanilla/gcc/java/parse.y:2203 + #: ../../../gcc/vanilla/gcc/java/parse.y:2280 + #: ../../../gcc/vanilla/gcc/java/parse.y:2290 + msgid "']' expected" + msgstr "áíáìåíüôáí ']'" + + # src/dfa.c:652 src/dfa.c:655 src/dfa.c:682 src/dfa.c:686 src/dfa.c:687 + # src/dfa.c:690 src/dfa.c:703 src/dfa.c:704 + # src/dfa.c:660 src/dfa.c:663 src/dfa.c:690 src/dfa.c:694 src/dfa.c:695 + # src/dfa.c:698 src/dfa.c:711 src/dfa.c:712 + #: ../../../gcc/vanilla/gcc/java/parse.y:1020 + #, fuzzy + msgid "Unbalanced ']'" + msgstr "Ìç éóóïñïðçìÝíï [" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1056 + msgid "Invalid method declaration, method name required" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1062 + #: ../../../gcc/vanilla/gcc/java/parse.y:1064 + #: ../../../gcc/vanilla/gcc/java/parse.y:2025 + #, fuzzy + msgid "Identifier expected" + msgstr "ÐñïóäéïñéóôÞò áöáéñÝèçêå" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1067 + msgid "Invalid method declaration, return type required" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1090 + #: ../../../gcc/vanilla/gcc/java/parse.y:1535 + #: ../../../gcc/vanilla/gcc/java/parse.y:1542 + #: ../../../gcc/vanilla/gcc/java/parse.y:1551 + #: ../../../gcc/vanilla/gcc/java/parse.y:1553 + #: ../../../gcc/vanilla/gcc/java/parse.y:1581 + #: ../../../gcc/vanilla/gcc/java/parse.y:1689 + #: ../../../gcc/vanilla/gcc/java/parse.y:1970 + #: ../../../gcc/vanilla/gcc/java/parse.y:2023 + msgid "')' expected" + msgstr "áíáìåíüôáí '('" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1106 + #, fuzzy + msgid "Missing formal parameter term" + msgstr "ÅëëéðÞò Þ êáêïó÷çìáôéóìÝíç éäéüôçôá" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1121 + #: ../../../gcc/vanilla/gcc/java/parse.y:1126 + #, fuzzy + msgid "Missing identifier" + msgstr "Ý÷åé ðáñáëçöèåß ôï áñ÷åßï ðñïïñéóìïý" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1146 + #: ../../../gcc/vanilla/gcc/java/parse.y:1155 + msgid "Missing class type term" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1307 + #, fuzzy + msgid "Invalid interface type" + msgstr "Ìç Ýãêõñïò åîáêñéâùôÞò(verifier) åîõðçñåôïýìåíïõ" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1499 + #: ../../../gcc/vanilla/gcc/java/parse.y:1668 + #: ../../../gcc/vanilla/gcc/java/parse.y:1670 + msgid "':' expected" + msgstr "áíáìåíüôáí ':'" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1521 + #: ../../../gcc/vanilla/gcc/java/parse.y:1526 + #: ../../../gcc/vanilla/gcc/java/parse.y:1531 + #, fuzzy + msgid "Invalid expression statement" + msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1549 + #: ../../../gcc/vanilla/gcc/java/parse.y:1577 + #: ../../../gcc/vanilla/gcc/java/parse.y:1617 + #: ../../../gcc/vanilla/gcc/java/parse.y:1685 + #: ../../../gcc/vanilla/gcc/java/parse.y:1753 + #: ../../../gcc/vanilla/gcc/java/parse.y:1859 + #: ../../../gcc/vanilla/gcc/java/parse.y:1927 + #: ../../../gcc/vanilla/gcc/java/parse.y:2017 + #: ../../../gcc/vanilla/gcc/java/parse.y:2019 + #: ../../../gcc/vanilla/gcc/java/parse.y:2027 + #: ../../../gcc/vanilla/gcc/java/parse.y:2263 + #: ../../../gcc/vanilla/gcc/java/parse.y:2265 + msgid "'(' expected" + msgstr "áíáìåíüôáí '('" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1619 + #, fuzzy + msgid "Missing term or ')'" + msgstr "Ëåßðåé ðáñÜìåôñïò ãéá `%s'" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1666 + #, fuzzy + msgid "Missing or invalid constant expression" + msgstr "%s: ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç: %s" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1687 + msgid "Missing term and ')' expected" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1726 + #, fuzzy + msgid "Invalid control expression" + msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1728 + #: ../../../gcc/vanilla/gcc/java/parse.y:1730 + #, fuzzy + msgid "Invalid update expression" + msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1755 + #, fuzzy + msgid "Invalid init statement" + msgstr "Ìç Ýãêõñç ðáñÜìåôñïò" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1930 + msgid "Missing term or ')' expected" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1972 + msgid "'class' or 'this' expected" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1974 + #: ../../../gcc/vanilla/gcc/java/parse.y:1976 + #, fuzzy + msgid "'class' expected" + msgstr "áíáìåíüôáí ')'\n" + + #: ../../../gcc/vanilla/gcc/java/parse.y:2021 + #, fuzzy + msgid "')' or term expected" + msgstr "áíáìåíüôáí ')'\n" + + #: ../../../gcc/vanilla/gcc/java/parse.y:2140 + msgid "'[' expected" + msgstr "áíáìåíüôáí '['" + + #: ../../../gcc/vanilla/gcc/java/parse.y:2218 + #, fuzzy + msgid "Field expected" + msgstr "Ç èõãáôñéêÞ äéåñãáóßá ôåñìáôßóôçêå" + + #: ../../../gcc/vanilla/gcc/java/parse.y:2275 + #: ../../../gcc/vanilla/gcc/java/parse.y:2285 + msgid "Missing term and ']' expected" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:2389 + #, fuzzy + msgid "']' expected, invalid type expression" + msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç" + + #: ../../../gcc/vanilla/gcc/java/parse.y:2392 + #, fuzzy + msgid "Invalid type expression" + msgstr "Ìç Ýãêõñç êáíïíéêÞ Ýêöñáóç" + + #: ../../../gcc/vanilla/gcc/java/parse.y:2504 + #, fuzzy + msgid "Invalid reference type" + msgstr "Ìç Ýãêõñç ðéóù-ðáñáðïìðÞ" + + #: ../../../gcc/vanilla/gcc/java/parse.y:2982 + msgid "Constructor invocation must be first thing in a constructor" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:2984 + msgid "Only constructors can invoke constructors" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:2993 + #, c-format + msgid ": `%s' JDK1.1(TM) feature" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:3053 + #: ../../../gcc/vanilla/gcc/java/parse.y:3055 + #, c-format + msgid "" + "%s.\n" + "%s" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:6789 + #, c-format + msgid "malformed .zip archive in CLASSPATH: %s" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:6860 + #, c-format + msgid "Can't find default package `%s'. Check the CLASSPATH environment variable and the access to the archives" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:12191 + #, fuzzy, c-format + msgid "missing static field `%s'" + msgstr "Ý÷åé ðáñáëçöèåß ç ëßóôá ìå ôá ðåäßá" + + #: ../../../gcc/vanilla/gcc/java/parse.y:12196 + #, fuzzy, c-format + msgid "not a static field `%s'" + msgstr "áäõíáìßá ðñïóðÝëáóçò(stat()) áñ÷åßïõ `%s': %s" + + #: ../../../gcc/vanilla/gcc/java/parse.y:12239 + #, fuzzy, c-format + msgid "No case for %s" + msgstr "ÓöÜëìá åðåîåñãáóßáò: %s" + + #: ../../../gcc/vanilla/gcc/java/parse.y:13140 + #, fuzzy, c-format + msgid "unregistered operator %s" + msgstr "ðïôÝ äåí äçëþèçêå ôï ðñüãñáììá %d\n" + + #: java/typeck.c:566 + #, fuzzy + msgid "junk at end of signature string" + msgstr "ìç ôåñìáôéæüìåío áëöáñéèìçôéêü" + + #: java/verify.c:480 + #, fuzzy + msgid "bad pc in exception_table" + msgstr "Åîáßñåóç êéíçôÞò õðïäéáóôïëÞò" + + #: java/verify.c:1392 + #, c-format + msgid "unknown opcode %d@pc=%d during verification" + msgstr "" + + #: java/verify.c:1462 java/verify.c:1475 java/verify.c:1479 + #, c-format + msgid "verification error at PC=%d" + msgstr "" + + #: java/lang-options.h:32 + msgid "Disable automatic array bounds checking" + msgstr "" + + #: java/lang-options.h:34 + msgid "Assume native functions are implemented using JNI" + msgstr "" + + #: java/lang-options.h:36 + msgid "Set class path and suppress system path" + msgstr "" + + #: java/lang-options.h:38 + msgid "Set class path" + msgstr "" + + #: java/lang-options.h:40 + msgid "Choose class whose main method should be used" + msgstr "" + + #: java/lang-options.h:42 + msgid "Choose input encoding (default comes from locale)" + msgstr "" + + #: java/lang-options.h:44 + msgid "Add directory to class path" + msgstr "" + + #: java/lang-options.h:46 + msgid "Directory where class files should be written" + msgstr "" + + #: java/lang-options.h:48 + #, fuzzy + msgid "Warn if modifiers are specified when not necessary" + msgstr "äå ìðïñïýí íá äçëþíïíôáé áñ÷åßá üôáí ãßíåôáé ÷ñÞóç ôïõ --string" + + #: java/lang-options.h:50 + msgid "Warn if deprecated empty statements are found" + msgstr "" + + #: java/lang-options.h:52 + msgid "Warn if .class files are out of date" + msgstr "" + + #: java/lang-options.h:54 + msgid "Always check for non gcj generated classes archives" + msgstr "" + + #: java/lang-options.h:56 + msgid "Never optimize static class initialization code" + msgstr "" + + #: objc/objc-act.c:606 + msgid "no class name specified as argument to -fconstant-string-class" + msgstr "" + + #: objc/objc-act.c:757 + #, c-format + msgid "object does not conform to the `%s' protocol" + msgstr "" + + #: objc/objc-act.c:801 + #, c-format + msgid "class `%s' does not implement the `%s' protocol" + msgstr "" + + #: objc/objc-act.c:939 + #, c-format + msgid "unexpected type for `id' (%s)" + msgstr "" + + #: objc/objc-act.c:944 + msgid "undefined type `id', please import " + msgstr "" + + #: objc/objc-act.c:996 + #, c-format + msgid "protocol `%s' has circular dependency" + msgstr "" + + #: objc/objc-act.c:1018 objc/objc-act.c:5229 + #, fuzzy, c-format + msgid "cannot find protocol declaration for `%s'" + msgstr "áäõíáìßá åéóáãùãÞò óôïé÷åßï ðáñáâïëÞò `%.*s'" + + #: objc-parse.y:1752 objc/objc-act.c:1279 objc/objc-act.c:5747 + #: objc/objc-act.c:6077 objc/objc-act.c:6126 objc/objc-act.c:6162 + #, fuzzy, c-format + msgid "cannot find interface declaration for `%s'" + msgstr "áäõíáìßá áíÜãíùóçò êåöáëßäáò áðü ôï `%s'" + + #: objc/objc-act.c:1304 + #, fuzzy, c-format + msgid "cannot find reference tag for class `%s'" + msgstr "äå âñÝèçêå ï ðñïåðåîåñãáóôÞò C: %s \n" + + #: objc/objc-act.c:2314 + #, fuzzy, c-format + msgid "cannot find class `%s'" + msgstr "áäõíáìßá åêôÝëåóçò ioctl óôï `%s'" + + #: objc/objc-act.c:2316 + #, fuzzy, c-format + msgid "class `%s' already exists" + msgstr "(ôï áñ÷åßï Þäç õðÜñ÷åé)" + + #. fatal did not work with 2 args...should fix + #: objc/objc-act.c:2440 + #, c-format + msgid "cannot find interface declaration for `%s', superclass of `%s'" + msgstr "" + + #: objc/objc-act.c:2447 + #, c-format + msgid "circular inheritance in interface declaration for `%s'" + msgstr "" + + #: objc/objc-act.c:3500 objc/objc-act.c:3517 + #, fuzzy + msgid "inconsistent instance variable specification" + msgstr "Ìåôáãëùôôéóìüò ðñïäéáãñáöþí ôïðéêþí ñõèìßóåùí" + + #: objc/objc-act.c:4710 + #, fuzzy, c-format + msgid "multiple declarations for method `%s'" + msgstr "ðïëëáðëüò áñéèìüò åðéëïãþí ôçí åíôïëÞ `s'" + + #: objc/objc-act.c:4876 + #, fuzzy, c-format + msgid "invalid receiver type `%s'" + msgstr "Ìç Ýãêõñç ðñïôåñáéüôçôá `%s'" + + #: objc/objc-act.c:4907 objc/objc-act.c:4933 objc/objc-act.c:4981 + #, fuzzy, c-format + msgid "`%s' does not respond to `%s'" + msgstr "ôï `%s' åßíáé ðñüãïíïò ôïõ `%s'" + + # src/outer.c:102 + #: objc/objc-act.c:4913 objc/objc-act.c:7197 + #, fuzzy, c-format + msgid "no super class declared in interface for `%s'" + msgstr "Ï áíôéôïðïèåôçôÞò åðéöÜíåéáò Ý÷åé ôåèåß ðåñéóóüôåñï áðü ìéá öïñÜ ãéá ôï `%s'" + + #: objc/objc-act.c:5011 + msgid "cannot find class (factory) method" + msgstr "" + + #: objc/objc-act.c:5012 objc/objc-act.c:5056 + #, c-format + msgid "return type for `%s' defaults to id" + msgstr "" + + #: objc/objc-act.c:5029 + #, fuzzy, c-format + msgid "method `%s' not implemented by protocol" + msgstr "Ç ëåéôïõñãßá äåí õðïóôçñßæåôáé áðü ôï ðñùôüêïëëï" + + #: objc/objc-act.c:5038 + msgid "return type defaults to id" + msgstr "" + + # src/install.c:562 + #: objc/objc-act.c:5055 + #, fuzzy + msgid "cannot find method" + msgstr "áäõíáìßá äéêñÜíùóçò" + + #. Historically, a class method that produced objects (factory + #. method) would assign `self' to the instance that it + #. allocated. This would effectively turn the class method into + #. an instance method. Following this assignment, the instance + #. variables could be accessed. That practice, while safe, + #. violates the simple rule that a class method should not refer + #. to an instance variable. It's better to catch the cases + #. where this is done unknowingly than to support the above + #. paradigm. + #: objc/objc-act.c:5298 + #, c-format + msgid "instance variable `%s' accessed in class method" + msgstr "" + + #: objc/objc-act.c:5548 + #, fuzzy, c-format + msgid "duplicate definition of class method `%s'" + msgstr "áäõíáìßá áíïßãìáôïò áñ÷åßïõ ïñéóìïý locale `%s'" + + #: objc/objc-act.c:5554 + #, fuzzy, c-format + msgid "duplicate declaration of class method `%s'" + msgstr "äéðëü üíïìá ÷áñáêôÞñá `%s'" + + #: objc/objc-act.c:5590 + #, fuzzy, c-format + msgid "duplicate definition of instance method `%s'" + msgstr "áäõíáìßá áíïßãìáôïò áñ÷åßïõ ïñéóìïý locale `%s'" + + #: objc/objc-act.c:5596 + #, fuzzy, c-format + msgid "duplicate declaration of instance method `%s'" + msgstr "äéðëü üíïìá ÷áñáêôÞñá `%s'" + + #: objc/objc-act.c:5636 + #, c-format + msgid "duplicate interface declaration for category `%s(%s)'" + msgstr "" + + #: objc/objc-act.c:5722 + #, c-format + msgid "instance variable `%s' is declared private" + msgstr "" + + #: objc/objc-act.c:5769 + #, c-format + msgid "instance variable `%s' is declared %s" + msgstr "" + + #: objc/objc-act.c:5779 + msgid "static access to object of type `id'" + msgstr "" + + #: objc/objc-act.c:5816 objc/objc-act.c:5909 + #, c-format + msgid "incomplete implementation of class `%s'" + msgstr "" + + #: objc/objc-act.c:5820 objc/objc-act.c:5914 + #, fuzzy, c-format + msgid "incomplete implementation of category `%s'" + msgstr "áðïôõ÷ßá êáôÜ ôçí åããñáöÞ äåäïìÝíùí ãéá ôçí êáôçãïñßá `%s'" + + #: objc/objc-act.c:5825 objc/objc-act.c:5919 + #, c-format + msgid "method definition for `%c%s' not found" + msgstr "" + + #: objc/objc-act.c:5963 + #, c-format + msgid "%s `%s' does not fully implement the `%s' protocol" + msgstr "" + + #: objc/objc-act.c:6021 objc/objc-act.c:8118 + msgid "`@end' missing in implementation context" + msgstr "" + + #: objc/objc-act.c:6049 + #, c-format + msgid "reimplementation of class `%s'" + msgstr "" + + # src/request.c:806 src/request.c:912 + #: objc/objc-act.c:6091 + #, fuzzy, c-format + msgid "conflicting super class name `%s'" + msgstr "Ìç áíáãíùñßóçìï üíïìá åðéöÜíåéáò `%s'" + + #: objc/objc-act.c:6106 + #, fuzzy, c-format + msgid "duplicate interface declaration for class `%s'" + msgstr "äéðëü üíïìá ÷áñáêôÞñá `%s'" + + #: objc/objc-act.c:6388 + #, fuzzy, c-format + msgid "duplicate declaration for protocol `%s'" + msgstr "äéðëü üíïìá ÷áñáêôÞñá `%s'" + + #: objc/objc-act.c:7238 + msgid "[super ...] must appear in a method context" + msgstr "" + + #: objc/objc-act.c:8220 objc/objc-act.c:8236 + #, c-format + msgid "potential selector conflict for method `%s'" + msgstr "" + + #: objc-parse.y:2602 + msgid "`@end' must appear in an implementation context" + msgstr "" + + #: objc-parse.y:2876 + msgid "method definition not in class context" + msgstr "" + + #: objc/lang-options.h:27 + msgid "Dump decls to a .decl file" + msgstr "" + + #: objc/lang-options.h:29 + msgid "Generate code for GNU runtime environment" + msgstr "" + + #: objc/lang-options.h:32 + msgid "Generate code for NeXT runtime environment" + msgstr "" + + #: objc/lang-options.h:35 + msgid "Warn if a selector has multiple methods" + msgstr "" + + #: objc/lang-options.h:39 + msgid "Do not warn if inherited methods are unimplemented" + msgstr "" + + #: objc/lang-options.h:41 + msgid "Generate C header of platform specific features" + msgstr "" + + #: objc/lang-options.h:43 + msgid "Specify the name of the class for constant strings" + msgstr "" + + #: config/mmix/mmix.h:112 + #, fuzzy + msgid "options -mabi=mmixware and -mabi=gnu are mutually exclusive" + msgstr "\"Æþíç %s\" ãñáììÞ êáé åðéëïãÞ -l åßíáé áìïéâáßùò áðïêëåéüìåíá" + + #: f/lang-specs.h:35 gcc.c:677 + msgid "GNU C does not support -C without using -E" + msgstr "" + + #: java/lang-specs.h:33 + msgid "-fjni and -femit-class-files are incompatible" + msgstr "" + + #: java/lang-specs.h:34 + msgid "-fjni and -femit-class-file are incompatible" + msgstr "" + + #: java/lang-specs.h:35 java/lang-specs.h:36 + msgid "-femit-class-file should used along with -fsyntax-only" + msgstr "" + + #: config/mcore/mcore.h:60 + msgid "choose either big or little endian, not both" + msgstr "" + + #: config/mcore/mcore.h:63 + msgid "choose either m340 or m210 not both" + msgstr "" + + #: config/mcore/mcore.h:64 + msgid "the m210 does not have little endian support" + msgstr "" + + #: config/alpha/freebsd.h:36 config/i386/freebsd-aout.h:227 + #: config/ia64/freebsd.h:24 config/sparc/freebsd.h:31 + msgid "`-p' not supported; use `-pg' and gprof(1)" + msgstr "" + + #: ada/lang-specs.h:39 gcc.c:698 java/jvspec.c:74 + msgid "-pg and -fomit-frame-pointer are incompatible" + msgstr "" + + #: ada/lang-specs.h:42 + msgid "-c or -S required for Ada" + msgstr "" + + #: config/arm/arm.h:213 + #, fuzzy + msgid "-mapcs-26 and -mapcs-32 may not be used together" + msgstr "" + "Ïé åðéëïãÝò ãéá íá åêôõðùèåß êáé íá ïñéóôåß ç þñá äåí ìðïñïýí íá\n" + "÷ñçóéìïðïéçèïýí ðáñÜëëçëá." + + #: config/arm/arm.h:225 + #, fuzzy + msgid "-msoft-float and -mhard_float may not be used together" + msgstr "" + "Ïé åðéëïãÝò ãéá íá åêôõðùèåß êáé íá ïñéóôåß ç þñá äåí ìðïñïýí íá\n" + "÷ñçóéìïðïéçèïýí ðáñÜëëçëá." + + #: config/arm/arm.h:236 + #, fuzzy + msgid "-mbig-endian and -mlittle-endian may not be used together" + msgstr "" + "Ïé åðéëïãÝò ãéá íá åêôõðùèåß êáé íá ïñéóôåß ç þñá äåí ìðïñïýí íá\n" + "÷ñçóéìïðïéçèïýí ðáñÜëëçëá." + + #: config/arm/arm.h:254 + msgid "incompatible interworking options" + msgstr "" + + #: config/arm/riscix.h:73 config/arm/riscix.h:133 + msgid "-mbsd and -pedantic incompatible" + msgstr "" + + #: config/arm/riscix.h:74 config/arm/riscix.h:134 + msgid "-mbsd and -mxopen incompatible" + msgstr "" + + #: config/arm/riscix.h:75 config/arm/riscix.h:135 + msgid "-mxopen and -pedantic incompatible" + msgstr "" + + #: config/nextstep.h:161 config/nextstep.h:164 + msgid "-p profiling is no longer supported. Use -pg instead" + msgstr "" + + #: gcc.c:846 + msgid "-E required when input is from standard input" + msgstr "" + + #: gcc.c:850 + msgid "compilation of header file requested" + msgstr "" + + #: config/i386/cygwin.h:169 config/i386/mingw32.h:69 + msgid "shared and mdll are not compatible" + msgstr "" + + #: config/i386/sco5.h:662 config/i386/sco5.h:737 + msgid "-static not valid with -mcoff" + msgstr "" + + #: config/i386/sco5.h:663 config/i386/sco5.h:738 + msgid "-shared not valid with -mcoff" + msgstr "" + + #: config/i386/sco5.h:664 config/i386/sco5.h:739 + msgid "-symbolic not valid with -mcoff" + msgstr "" + + #: config/i386/sco5.h:702 + msgid "-fpic is not valid with -mcoff" + msgstr "" + + #: config/i386/sco5.h:703 + msgid "-fPIC is not valid with -mcoff" + msgstr "" + + #: config/i386/sco5.h:740 + msgid "-fpic not valid with -mcoff" + msgstr "" + + #: config/i386/sco5.h:741 + msgid "-fPIC not valid with -mcoff" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:103 config/dsp16xx/dsp16xx.h:112 + msgid "a -ifile option requires a -map option" + msgstr "" + + #: config/arc/arc.h:59 config/mips/mips.h:1007 + msgid "may not use both -EB and -EL" + msgstr "" + + #: config/i860/fx2800.h:290 + #, fuzzy + msgid "-p option not supported: use -pg instead" + msgstr "ôï -C äåí óõíßóôáôáé ðéá, ÷ñçóéìïðïéÞóôå -Z" + + #: config/mips/mips.h:837 + #, fuzzy + msgid "-pipe is not supported" + msgstr "áñ÷åßá fifo äåí õðïóôçñßæïíôáé" + + #: config/mips/mips.h:1003 + msgid "may not use both -mfp64 and -msingle-float" + msgstr "" + + #: config/mips/mips.h:1004 + msgid "may not use both -mfp64 and -m4650" + msgstr "" + + #: config/mips/mips.h:1006 + msgid "may not use both -mgp32 and -mfp64" + msgstr "" + + #: config/mips/r3900.h:36 config/mips/r3900.h:42 + #, fuzzy + msgid "-mhard-float not supported" + msgstr "Ôï ðñùôüêïëëï äåí õðïóôçñßæåôáé" + + #: config/mips/r3900.h:38 config/mips/r3900.h:44 + msgid "-msingle-float and -msoft-float can not both be specified" + msgstr "" + + #: config/i386/cygwin.h:114 + msgid "mno-cygwin and mno-win32 are not compatible" + msgstr "" + + #: config/vax/vax.h:42 config/vax/vax.h:43 + #, fuzzy + msgid "profiling not supported with -mg\n" + msgstr "Ç ëåéôïõñãßá äåí õðïóôçñßæåôáé" + + #~ #, fuzzy + #~ msgid "invalid use of %D" + #~ msgstr "ìç Ýãêõñïò ÷ñÞóôçò" diff -Nrc3pad gcc-3.0.4/gcc/po/es.gmo gcc-3.1/gcc/po/es.gmo *** gcc-3.0.4/gcc/po/es.gmo Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/po/es.gmo Wed May 15 02:41:45 2002 *************** *** 0 **** --- 1,1158 ---- + Þ•r¬‹]<°t±t¶t@Ét' + u52u=hu^¦uv-!v1Ovv–vÛ³v:wÊw5åw9x%Ux+{x0§xØx ìxùx"y+;y7gyŸyEºy2zP3z4„z3¹zHízJ6{q{Mó|”A}¡Ö}Žx›=£?áA!‚Jc‚0®‚Nß‚K.ƒJzƒ•Ń~[…QÚ†1,‡7^‡2–‡<ɇ1ˆF8ˆIˆAɈ} ‰L‰‰NÖ‰C%ŠDiŠ?®ŠEîŠN4‹Oƒ‹³Ó‹O‡ŒK׌}#½¡D_=¤÷â{Ú‘*V’“?ž“8Þ“4”DL”4‘”EÆ”K •NX–I§–Dñ–B6—Py—MÊ—˜N¨˜Q÷˜LI™<–™OÓ™L#šòpšAcœH¥œBîœ91,k5˜+ΞúžŸ .Ÿ :Ÿ<FŸ0ƒŸ8´Ÿ.íŸ. 7K Xƒ Ü 'î .¡ E¡-O¡A}¡¿¡!Ô¡ö¡ ¢+¢%>¢,d¢,‘¢¾¢Ú¢ö¢£"'£J£ e£q£!ƒ£#¥£É£"à£6¤,:¤+g¤,“¤#À¤€ä¤e¥#¥¥¥·¥:Ê¥2¦8¦)K¦$u¦0š¦˦ë¦ §)§/H§/x§6¨§ß§ã§ü§¨&*¨*Q¨#|¨? ¨à¨.ý¨,©$@©+e©‘©¢©±©Å©(婪6ª$Uªzª‘ª2®ªáªóª«$«6«U«p«‚« + •« «>·«#ö«#¬#>¬b¬$}¬#¢¬ Ƭ3ç¬3­<O­Œ­¦­H¿­N®<W®=”®3Ò®2¯"9¯ \¯i¯‡¯¡¯+»¯/ç¯6°:N°(‰°,²°/ß°3±C±KÓ±4²T²(g²h²Eù²?³X³q³г¦³©³­³±³ ¹³ó˳à³ù³´ )´26´3i´3´2Ñ´3µ38µ2lµ3ŸµÓµñµ¶$¶3¶D¶W¶l¶{¶жŸ¶¯¶ʶ<ä¶0!·!R·t·'Œ·/´·/ä·¸0+¸(\¸*…¸/°¸à¸û¸¹2¹L¹d¹!¹/¡¹ ѹÞ¹'ú¹"ºBº`º-uº:£º)Þº»#»?»,O»,|»4©»,Þ»# ¼!/¼Q¼j¼†¼¤¼À¼ Û¼ü¼#½<½%Q½w½(•½_¾½¾6¾,=¾0j¾0›¾.̾/û¾&+¿<R¿¿,–¿ÿá¿ê¿À'ÀEÀYÀqÀ'‹À*³À+ÞÀ( + Á3Á'SÁ/{Á%«Á2ÑÁ)Â&.Â%UÂ{˜Â$¬Â+ÑÂýÂ/Ã/GÃ.wÃ)¦Ã)Ðà úÃ'Ä&CÄjÄ3ƒÄ/·ÄçÄûÄ5Å5LÅ.‚űÅÅÅÞÅ#üÅ Æ<Æ=VÆ@”Æ ÕÆ ãÆ0ñÆ-"Ç(PÇ*yÇ8¤Ç5ÝÇ+È=?È>}È%¼ÈâÈ ÿÈ É/AÉ:qɬɽÉÒÉ8åÉ5Ê(TÊ}Ê5œÊ ÒÊ ßÊìÊ Ë Ë Ë,(Ë UË bË%o˕˦Ë#ÁË åË.òË !Ì1/ÌSaÌ3µÌ,éÌ ÍW#Í´{Í20ÎcÎ.‚αÎ0ÄÎ+õÎ!Ï?Ï]Ï-zÏ&¨Ï5ÏÏÐÐ,(Ð,UÐ*‚Ð%­Ð%ÓÐ3ùÐ.-Ñ+\шÑ$¢Ñ/ÇÑ.÷Ñ*&Ò:QҌҨÒ;ÄÒ7Ó$8Ó7]Ó•Ó´Ó-ÐÓ$þÓ6#Ô2ZÔ;Ô8ÉÔ1ÕO4Õ,„Õ-±Õ.ßÕ'Ö6ÖUÖ0qÖ4¢ÖJ×Ö"×6>×u×7ˆ×!À×/â×MØ6`Ø/—Ø4ÇØ,üØ,)Ù(VÙ,Ù(¬Ù(ÕÙ0þÙ4/Ú6dÚ9›Ú(ÕÚ'þÚ&Û EÛ!fÛ,ˆÛ.µÛ(äÛ Ü!(Ü.JÜ,yÜ,¦ÜÓÜ&éÜ4Ý(EÝ6nÝ$¥Ý,ÊÝ3÷Ý-+Þ8YÞ’Þ)®Þ(ØÞß9ß6Yß2ß)Ãß"íß<à"Mà(pà5™àÏà1îà- áNáeáyá—áµá-Õá-â$1â2Vâ%‰â&¯âÖâ öâ ã #ã3-ã aãmãpãbŠã,íãä + )ä4ä+Cä$oäA”ä&Öä*ýäj(å„“å%æ>æ'Zæ‚æšæ#«æÏæîæ* ç7ç.Vç$…çªçÇçàç'úç$"è$Gèlè,„è1±è4ãè+é0Dé@ué(¶é&ßé%ê&,ê%Sê,yê¦ê:ÃêCþêBë3aë.•ë#Äë>èëH'ì'pì.˜ìOÇìIí@aí8¢íNÛíR*î + }îˆî3§î5Ûî,ï>ï1]ï%ï#µïÙï"ôï-ð0Eð#vð šð5»ð8ñð-*ñ4Xñ2ñÀñlàñpMò ¾ò7Ìò)óO.ó2~ó0±ó>âó;!ô/]ô6ôAÄô*õ)1õ-[õ=‰õ:ÇõBöEöVö2uö'¨ö-ÐöhþöIg÷.±÷à÷Tú÷/Oø+ø5«ø<áø*ù?Iù?‰ùVÉù8 ú"Yú|ú-šú1Èú'úú!"û:DûOû*Ïû*úû%üAü]ü}ü›ü°ü6Åü!üüý=ýTý.mý œý ½ýÞý3óý)'þ2Qþ3„þ3¸þ&ìþ&ÿ4:ÿSoÿ9ÃÿCýÿ;AH}Æ&á,<54r0§2Ø2 $>c+¡Íí  @oNB¾\^"|(ŸÈ3è;,T-5¯-å-"Ad-€*®Ù*ù%$:J'…­9¿@ù:-T&‚.©.Ø6 .> m Š ¨ 1Ä ö  + 4 + ,T + ! + 0£ + Ô + .ï +   ? 1_ 3‘ Å $å 1 + < 0X 2‰ ¼ )Î ø 8 9O )‰ ³ Ó  ó 1Ki!…"§6Ê'0)3Z"Ž4±&æ3 A)a)‹)µ2ß03C$w=œ'Ú% (5I;6»%ò'"@2cB– Ù$ú(AH%ŠG°,ø-%S#o!“'µ#Ý !""D!g‰3›*Ï!ú#3@4t%©Ï"ç + (!.J7y&±Ø)ï?/"o$’"·"Ú ý!-@)n)˜%Â!è& + %12W2Š(½&æ (%F2l*Ÿ!Ê-ì4/O>$¾ã<ü$9/^"Ž"±.Ô,0&K r"“0¶+ç* #> )b ,Œ (¹ .â 1!C!-]!$‹!%°!Ö!õ!)"."A"_""q"=”"6Ò"$ #.#"K#n#*}#¨#¿#Õ#!î#$!.$!P$8r$7«$+ã$O%<_%)œ%(Æ%.ï%&*9&8d&c&,'/.'/^'Ž'2£'5Ö' ("(">(+a()((·(0à(,)>).^)()"¶)Ù) ì)H *V*5o*6¥*/Ü*) +)6++`+Œ+$¥++Ê+'ö+,$7,$\,),«,¿,Ð,?ê,*-C-]-.t-£-%À-æ--.%1.W.l.Œ.©.È.+ç. /$4/.Y/(ˆ/±/4Æ/0û/<,0Li0,¶0@ã0_$1*„1*¯1Ú1ié1)S2"}2; 28Ü2232H32{32®32á3$4'94.a4;4DÌ4/5*A5l5ˆ5œ5°5É5%ä5/ + 6:6K6\6"|6Ÿ6»6Ï6å6ø67 717B7S7d7u7†7 —7¸7 ×77ø708I83b8–8.±8(à8$ 9.9H9b9|9–9°9Ê9ã9)ü9&:A:*\:‡: :º:Ô:î:7;@;7Z;’;¬;Æ;à;ú;<!.<)P<z<”<¯<Ê<å<==,=B=6X==«=É=é=>$>B>`>~>›>¸>Ó>!î>3?+D?Fp?5·?í? @3.@b@2@)²@\Ü@+9A)eA)A$¹A?ÞA(B.GB1vB¨BÄB)àB, + C7C/QCACÃCáCD, D9MDG‡DLÏDDE:aE7œEÔEòEF*&F+QF+}F3©F+ÝF8 GOBG’G1¦G7ØG4H+EH(qH5šH2ÐH,I?0I,pI6IÔI"ðI.J0BJ!sJ:•JDÐJ6K.LK;{K&·K,ÞK0 L)ÀTÿT0U(OUGxU+ÀU-ìUPV9kV"¥V=ÈVBW>IW;ˆW6ÄWIûW-EX3sXr§XGY-bY„Y:Z>PZDZ=ÔZ:[8M[8†[#¿[(ã[ \$,\#Q\2u\)¨\0Ò\$]S(]&|]/£]8Ó]! ^+.^+Z^2†^-¹^(ç^*_4;_p_(„_­_Ì_"ë_Z`Ui` ¿`5Ë` a a a 0a =aGaca a‹aa ¶a + ÂaÍa ãaña/b91b8kb(¤b"Íb5ðb/&c'Vc+~c3ªcÞc-öc3$d'Xd>€dY¿de+/e[e7{eW³eG fSSf§f%¿fåfg gO4gO„gÔg1ñg#h:h0Qh0‚h³h8Êhii-5iBci1¦i.Øi+j3j2Qj „j3¥jNÙj7(k8`kF™k'àk+l4l(Sl"|l*Ÿl6Êl4m46m%km&‘m)¸m$âm"n$*nOnOfn(¶nßn1ÿn)1o-[o,‰o,¶o<ão6 p&Wp/~p=®p&ìp%qv9q °q"Ñq5ôq&*rQr3lr7 r'Ørs5sbUs'¸sàsósD t5Pt/†t4¶t'ëtVu/jušu¸uËu âu6ïu9&v=`v&žv;Åvw w'wEwcwww2”wÇw\äw+AxZmx4Èx-ýx+y4Cy-xy/¦y"Öy,ùy&z>zZzozˆzL—z8äzI{g{,y{&¦{*Í{.ø{3'|.[|>Š|HÉ|2}:E}$€},¥}2Ò}(~).~4X~)~$·~+Ü~FOdwŽ¥·Éé€!#€"E€ h€)‰€7³€ ë€%õ€+G/b(’»Ù<õ?2‚Cr‚¶‚Ђ'ë‚#ƒb7ƒ-šƒ ȃ!éƒ „'„C„&_„ †„%§„$Í„2ò„D%…$j…$…4´…;é…(%†N†3m†`¡†‡7‡%T‡$z‡+Ÿ‡0ˇcü‡`ˆtˆ*ˆˆ'³ˆ5Ûˆ*‰,<‰3i‰"‰<À‰%ý‰1#ŠUŠ&oŠ–Š#®ŠÒŠ*튋0.‹,_‹.Œ‹0»‹0ì‹.ŒDLŒ2‘ŒÄŒ$áŒ##!G/i:™9Ô#ŽD2ŽFwŽ@¾Ž8ÿŽP8H‰^Ò1+HtCBÔ?‘EW‘0‘.Α3ý‘1’3E’5y’5¯’1å’2“J“ d“2…“&¸“-ß“$ ”'2”3Z”AŽ”+Д!ü”%•D•ba•<Ä•3–5–EU–(›–(Ä–í– —0—@M—8Ž—Ç—å— ˜#&˜;J˜†˜ š˜¨˜4·˜'옙/™J™ d™+…™2±™2ä™2šJšfš!€š¢šPµšQ›X›(k›#”›¸›&Ô›+û›''œ'Oœ'wœŸœ-¼œ,êœ(,@5m£!¸/Ú2 + ž"=ž+`ž%Œž2²ž2åž)Ÿ'BŸ7jŸ2¢Ÿ9ÕŸ8 AH 'Š ;² 1î # ¡"D¡&g¡4Ž¡4á?ø¡!8¢Z¢:r¢­¢@Ì¢4 £5B£'x£O £Ê𣻥ե"ï¥!¦54¦j¦‰¦?ž¦FÞ¦%§B?§'‚§4ª§:ß§N¨Ci¨Y­¨4©4<©4q©˜¦©?ª>Qª>ª6Ϫ:«;A«O}«UÍ«@#¬Dd¬=©¬4ç¬E­>b­9¡­6Û­C®V®u®•®.²®Ká®?-¯?m¯?­¯@í¯4.°c°€°A °qâ°2T±*‡±!²±Ô±(ð±&²@²'O²-w²¥²²#à²<³A³#a³0…³"¶³Ù³Aù³.;´0j´&›´´$ß´MµRµkµzµ‹µšµ©µÁµÞµ#óµ¶(¶@¶O¶g¶„¶˜¶­¶¾¶Ù¶ò¶· · + )·#4·X· s· ”· ¡·­·!Ê·ì· ¸:¸I¸c¸7~¸0¶¸ç¸¹"¹9¹S¹ + d¹o¹(ƒ¹,¬¹#Ù¹ý¹º5ºOºjº<ˆº(źîº. »,:»,g»”»:¥»4à»/¼&E¼l¼‹¼œ¼·¼Ó¼ï¼( ½4½!D½f½3„½¸½˽ç½*þ½)¾%F¾l¾…¾¢¾ ¾¾ß¾'÷¾*¿J¿h¿*€¿*«¿2Ö¿0 À:À2ZÀ"À°À1ÌÀþÀÁ1Á2@Á8sÁ ¬Á.ÍÁüÁ"Â";Â1^©ÂÃÂßÂýÂÃ5ÃOÃ&jÃ"‘Ã"´Ã×Ã>öÃ)5Ä._ÄŽÄ®Ä8ÈÄÅÅ7Å9MÅ2‡Å)ºÅ+äÅ3Æ.DÆ6sÆ*ªÆ&ÕÆEüÆDBÇ5‡Ç*½Ç)èÇ$È37È"kÈ(ŽÈ,·È,äÈ1É'CÉ;kÉ6§É.ÞÉ6 Ê9DÊ1~Ê&°Ê*×Ê*Ë5-Ë+cË,˼Ë9ÜË)Ì;@Ì2|Ì$¯Ì+ÔÌ'Í-(Í2VÍ$‰Í/®Í'ÞÍ4Î;Î(Z΃Î8ŸÎØÎ'÷Î/Ï*OÏ,zÏ3§Ï5ÛÏ0Ð$BÐ=gÐ#¥Ð*ÉÐ*ôÐ/Ñ#OÑ!sѕѵÑZÉÑ$$ÒIÒ%_Ò …Ò“Ò¢Ò³Ò+ÄÒ*ðÒ$Ó,@ÓDmÓ)²Ó0ÜÓ+ Ô29Ô/lԜԥԮÔ$·ÔÜÔ5õÔK+Õ!wÕG™Õ%áÕÖ%ÖDÖbÖ,yÖ¦Ö,ÆÖóÖ×61×h×;€×:¼×:÷×$2Ø4WØ(ŒØ8µØ&îØÙ4ÙPÙgÙyÙ Ù™Ù+¬Ù(ØÙ4Ú)6Ú:`Ú"›Ú¾ÚÞÚøÚ.Û-GÛuÛ%”Û&ºÛáÛ.úÛ)Ü?ÜTÜ&hÜ&ܶÜ%ÖÜ'üÜ$ÝDÝ!\Ý~Ý-–Ý(ÄÝ íÝIÞ7XÞ6ÞÇÞ*ÝÞ*ß#3ß$Wß|ߓߥß<¶ß*óßà):à!dà%†à¬à#¼à7ààá!3áAUá2—á4Êá%ÿá%â.>â+mâ%™â ¿â!àâ$ã'ã Eã!fã*ˆã³ã$Ëãðãä#äBä`ä"€ä)£ä.Íä(üä-%å/Så<ƒå7Àå øå&æ@æWæ0wæ-¨æ(Öæ2ÿæ(2ç4[ç#ç(´ç9Ýç.è,Fè'sè)›è*Åèðè + é+(éTé&pé#—é&»é,âéê&"ê(IêGrê&ºêáê'ë-(ë?Vë2–ëÉë)äë1ì@ì+Yì…ì%£ì,Éì(öìí;í-Zí8ˆí7Áí7ùí51î&gî*Žî¹îÂîËîÔîÝî*ûî8&ï"_ï‚ï–ï"Ÿï+Âï(îï/ð!Gðið …ð’ð ›ð¨ð±ð"ºð/Ýð ñ3ñ7Jñ(‚ñ=«ñéñLò-Nò.|ò4«ò(àò) ó43óMhó/¶ó$æó8 ôDô]ô*}ô¨ô'Äô4ìôa!õ$ƒõ<¨õ0åõ-ö1Dö6vö+­ö%Ùöÿö(÷%H÷Un÷6Ä÷*û÷+&ø1Rø5„ø)ºø*äø+ù0;ù=lùªù¿ù ÏùVÛù2úFCúAŠúÌú$âú,û%4û2Zû'û>µûBôû+7ücü8ü(ºü%ãü9 ý,Cý%pý1–ý1Èý/úý2*þ]þ>tþ&³þ'Úþ.ÿI1ÿ.{ÿ+ªÿ%Öÿ üÿ07(h+‘0½/îb–.°0ß7#H-l/š&Ê.ñ0 !Qs9<É*%18W¨6Â3ù2-.`8*È)ó)G`z—³!Ïñ ) Ij†+¤&Ð/÷$'5L4‚·Òí! &/ .V &… ¬ -´ 1â % + : + U +  + q + .| + « + 1 + 3ô + >( 3g › » :Ñ : G 0d (•  ¾ *ß  +  %3 Y o $Œ ± Ä &Õ -ü -*-X'†0®(ß(/1(a(гÄâ7÷/I `m‰™­ ¶× ô! 7#X| œ#½á!!#!Eg,‡(´#Ý*$,Qi‚*–(Á*êJ-`IŽ#Ø!ü#B\Dx.½%ì1%D'j'’&º,á$.,S!€¢¿8Ú.&B+i=• Ó)ô8N)f/.À)ï,$F*k!–$¸$Ý$$'#L+p*œ)Ç(ñ."Il„š ²(Ó;ü,82e9˜Òã)#NM=œ8Ú"<5R/ˆ¸Ø-ò= 2^ ‘ 9¡ Û í + !%5![!/u!¥! µ!Ã!Ý!ù!4"H"X")o"$™"¾"Þ"ù"+ #&7#M^#/¬#/Ü#/ $5<$!r$H”$ Ý$%þ$.$%S%Ip%º%*Ú%(&$.&$S&0x&,©&*Ö&:'3<'0p'&¡'%È''î'6(/M(R}(%Ð( ö(;)=S)‘)¢)´)"Å)è)ÿ)**>H*‡*)š*(Ä*í*(+ ,+*M+:x+³+8Ñ+7 + ,3B,:v,/±,Há,E*-3p-2¤-9×-,.>.%\.@‚.(Ã. ì.) /-7/1e/(—/'À/,è/)01?0!q0C“0B×0.10I1z1”1)±1.Û11 + 21<2%n2#”2/¸2'è23,,3#Y3}3,•36Â3$ù3;4-Z4,ˆ4µ4/Ï4ÿ45'5095$j55£5¸5Ñ5å560!6 R60s6"¤6&Ç6&î6:7(P7y71‘7<Ã7;8.<81k8.8.Ì85û8519?g9$§9Ì96å9:i5:;Ÿ:XÛ:74;9l;:¦;2á;2< G<+h<!”<¶<Ò<,í<)=)D=.n=)='Ç=,ï='>"D>,g>3”>BÈ>' ?3?$P?(u?ž?#¹?Ý?0ü?)-@6W@&Ž@1µ@<ç@$A'BA#jAŽA>«A7êA'"BJB0iBšB7ºBòBC.C6CC zC†CC$»C:àC1D.MDI|DÆDäD5ùD,/E2\E,E/¼E0ìE'F%EF4kF. FÏF4äF7G(QGzGb”G#÷G7H/SH)ƒH%­H3ÓHI.&I'UI<}IGºIBJEEJ‹J/©J)ÙJ.K(2K9[K0•K3ÆK5úKW0L9ˆL;ÂL2þL&1M%XM$~M&£M.ÊMùMN2)N4\N‘N(°NÙN*ôN+O2KO<~O»O7×O9PIP#eP$‰P®P0ÍPþP6 Q2DQwQ&—Q)¾QèQùQR/RNRkR4‰R'¾R$æR S%S0;SlS{SS¢S·S ×SøS' T*5T-`T)ŽT,¸TåT)ÿT))U+SU+U«U5ÊU.V/V DVeV„VšV°V+ËV÷VW0.W,_W+ŒW¸W3ÐWXX9XRXdX {X!œX¾XÛXñXJ + YTUYTªY8ÿY58ZnZ8ˆZ9ÁZ,ûZ2([.[[.Š[&¹[6à[6\N\!_\!\£\$¾\ã\ÿ\*]7>]%v](œ]$Å])ê]%^%:^$`^%…^«^ ´^6¾^õ^%_%;_=a_:Ÿ_,Ú_0`8`3U`5‰`-¿`,í`Na(ia&’a)¹a3ãa'b$?b1db1–b,Èbõb$c19ckc"ƒc)¦cÐcêcñc øcd dI'd#qd#•d¹d*Ød+e)/e)Ye!ƒe¥eÄe!Ùeûe-fIf Yfef‚fžf¼f6Ûfg-g Ag bg ƒg¤g ³g.Ôg h&$h6Kh0‚h"³h/Öhi*%i(Pi(yi¢i¼i5Ûi+j/=j+mj5™jÏj%çj& k%4kZk!ck…kC£k3çk)l6El!|l3žl7Òl6 + m2Am#tm(˜m!Ámãmým2n5Mn$ƒn$¨n/Ín!ýn o)@o)jo)”o-¾o0ìo9p*Wp8‚pA»pýp-q'4qX\q-µq*ãq,r";r0^r4r%Är!êr s&&s5Ms#ƒs'§s&Ïs$ös>t=Zt'˜t*Àtët u,)u!Vu&xu&Ÿu3Æu)úu@$v/ev,•v<Âv9ÿv59w8owE¨w"îw/xAxQx`x:qx¬x5Åx6ûx*2y$]y$‚y6§y5Þy5z6Jz-z¯z Çz-èz.{ E{Df{«{¿{ Ö{9÷{!1|"S|$v|$›|$À|=å|#}(7}!`}&‚}&©}%Ð}6ö}-~'F~n~~•~7µ~!í~);9u0Ž¿*Ö'€.)€X€#t€,˜€,Å€ò€)6, c„'“)»;å,!‚/N‚-~‚2¬‚#ß‚ƒ+ ƒ+Lƒ9xƒ0²ƒ4ãƒ/„;H„6„„5»„.ñ„C …Gd…6¬…>ã…3"†/V†2††1¹†1ë†&‡1D‡-v‡9¤‡Þ‡&þ‡6%ˆ8\ˆ/•ˆ&ň숉/‰%D‰*j‰"•‰;¸‰5ô‰**Š1UŠ>‡Š0ÆŠ[÷Š?S‹4“‹È‹æ‹+Œ&1Œ*XŒ'ƒŒ«Œ"ºŒ(ÝŒ&_-;HÉ(Ž;Ž<LŽ<‰Ž<ÆŽ<@ S:t5¯å3ø&,!S8u&®Õäó ‘‘$-‘R‘b‘v‘Š‘œ‘°‘‘Ö‘è‘ú‘ ’’0’A’S’e’w’‰’›’­’Á’Ó’å’÷’ ““-“?“S“e“w“‹“Ÿ“³“Å“דè“ú“ ””0”B”T”f”x”Œ”ž”°”Ĕ֔蔕#•=•[•'y•¡•±•Á•(Ù•)–",–O–Nk–"º–Ý–õ– —!4— V—.c—9’—8Ì—$˜.*˜'Y˜"˜;¤˜à˜!ó˜)™?™#]™1™³™,ЙOý™#Mšqš%‘š·š"Ëš+îš ›R(›{›››¸›Ô›ç› ÿ›( œ5œ6Rœ ‰œ"ªœGÍœ / P q ’ ³ Ô õ ž 7ž Xž yž"šž½žÝžùžŸ5ŸQŸqŸŸ©ŸÅŸ6០(6 _ q  … %¦ Ì å ü ¡#5¡&Y¡.€¡¯¡Ê¡#è¡( ¢$5¢0Z¢‹¢4ª¢Jߢ&*£-Q££4“£.È£!÷£/¤'I¤q¤*ޤ)¹¤#ã¤"¥3*¥^¥z¥#™¥.½¥ì¥¦¦-<¦/j¦3š¦Φ*妧0§D§(X§)§«§¿§"Ù§,ü§9)¨Dc¨,¨¨\Õ¨n2©$¡©&Æ©0í©ª49ªnª$Žª+³ª&ߪB«,I«#v«%š«À«&ß«¬#$¬H¬!h¬2Ь:½¬9ø¬U2­1ˆ­º­Í­à­*ú­$%®!J®!l®!Ž®$°®"Õ®#ø®#¯#@¯d¯'¯§¯ï ߯°°>°5^°+”°À°à°±- ±1N±€±# ±ıر%ó±1²3K²²š² ©²!ʲì²3 ³=³ M³n³!޳°³7¿³.÷³&´>´W´)n´9˜´1Ò´*µ0/µ*`µ3‹µ0¿µ7ðµ(¶_C¶ £¶ + Ķ1϶3·:5·p·#Œ·°·$з(õ·¸!1¸(S¸|¸š¸+¹¸å¸ ¹@&¹%g¹"¹-°¹3Þ¹'º:º/Tº5„ººº"׺*úº"%»?H»Lˆ»>Õ»2¼?G¼1‡¼6¹¼<ð¼7-½;e½&¡½+Ƚ6ô½+¾5I¾¾‡¾'¦¾&ξ&õ¾¿6¿,Q¿4~¿"³¿(Ö¿*ÿ¿,*ÀWÀsÀÀ,©À&ÖÀýÀ#Á;ÁZÁyÁ)ÁºÁÚÁùÁ#Â!5Â%WÂ}Â/˜Â/ÈÂøÂ# Ã.0Ã_à yÚÃ(ºÃ'ãÃ8 Ä+DÄpĀĖÄ-µÄ4ãÄ3Å-LÅzÅÅ"™Å¼Å)ÏÅKùÅEÆcÆ#~Æ%¢Æ,ÈÆ%õÆÇ)8Ç'bÇ.ŠÇ¹Ç/ØÇ!È *È,4È*aÈCŒÈÐÈ ×È'áÈ É'É5CÉ yÉ šÉ/¨ÉØÉ4òÉ3'Ê[Ê6pÊ §Ê ÈÊ8éÊ$"Ë!GË&iËË(¬Ë)ÕËÿË'Ì=Ì8[Ì/”ÌFÄÌ Í !Í2.ÍaÍA~Í>ÀÍ&ÿÍ&ÎFÎ[ÎvΓÎ(¦Î%ÏÎ#õÎÏ1Ï/@Ï5pÏ$¦Ï ËÏ1ìÏ)Ð0HÐ#yÐ(Ð!ÆÐèÐûÐ Ñ6Ñ:UÑÑ2§ÑÚÑ&øÑ&Ò-FÒtÒŠÒŸÒ*¼Ò>çÒ&Ó(;ÓdÓ'‚Ó5ªÓ1àÓ.Ô,AÔ-nÔ-œÔÊÔ,ÛÔ3Õ<Õ<ZÕD—Õ.ÜÕ4 Ö.@Ö9oÖH©Ö)òÖ× :×&[×‚×š×·× + Ó×Þ×ð×ö×&Ø7ØJØ+bØ<ŽØ1ËØýØ/Ù>MÙ,ŒÙ¹Ù%ÐÙ4öÙ9+Ú.eÚ/”Ú2ÄÚ/÷Ú"'Û(JÛsÛ*‡Û²ÛÍÛ(æÛ3ÜACÜF…Ü5ÌÜ$Ý'Ý!/Ý=QÝ>ÝÎÝLæÝ 3Þ&AÞhÞ%„Þ6ªÞ3áÞ#ß"9ß)\ß!†ß"¨ß%Ëßñß à%à;<àxàŠà/›àCËà3á=Cáá)¡á)Ëá#õá#â+=âiâ}â™â¹â&Øâ(ÿâ!(ã*Jã#uã7™ã-Ñã6ÿã6ä(Vä)ä©äÆä9ãä-å-Kåyå"–å-¹åçå(æ.æLæ*cæŽæ-¥æ7Óæ# ç//ç0_ç ç)œç#Æç)êç*è5?èuè0‹è-¼èFêè/1é<aé#žéÂéáé%øé=ê-\ê?ŠêÊêåê'êê(ë;ë+Cë,oë*œë(Çë)ðë&ì<Aì4~ì:³ì9îì-(í/Ví/†í<¶íZóí7Nî)†î°î-Îîüî(ï,:ï3gï›ï+»ï'çï'ð 7ðAð\ð|ð˜ð·ð×ðñðñ--ñ[ñxñ0•ñ=Æñòò:òZò#yò%ò'Ãò$ëòó&%ó'Ló/tó¤ó!Âó äó.òó)!ô)Kô%uô›ô4¯ôäô8ÿô@8õyõ8‹õ:Äõÿõ%öAö,Iö%vö%œö4Âö÷ö'÷=÷S÷"n÷‘÷ª÷À÷Õ÷ñ÷* ø7ø-Nø-|øIªø)ôø ù2?ù$rù8—ù/Ðù.ú8/ú,hú•úA´ú2öú)û?ûDUûDšûDßû=$üFbü%©ü'Ïü ÷ü2ý'Ký4sý2¨ýÛýûý'þ*þIþiþ‡þ#¢þ'Æþ!îþ ÿ11ÿ0cÿ'”ÿ3¼ÿKðÿP<!$¯#Ô ø!)"Kn*Œ3·5ë+!6M9„&¾4å3Nf&„,«+Ø A,a"ޱÎ*æ+2=p)…¯$È'í94'n–µ"Õø4#G(k4”"Éì! + ,$Jo‰£/¼,ìe ` Eà =& + +d + ! + ² + (Á + *ê + = )S 5} 4³ )è ) -<  j )‹ *µ à 'ô ) F  W x (• $¾ .ã (&;:b0;Î( + <34p.¥MÔ2"MU#£*Ç0ò$#>H+‡@³:ô#/ S#t ˜¹Ï(æ%\5m’/ N/X3ˆ2¼*ïFa${. &Ï8ö(/'X1€.²5á59M5‡5½5ó-)W.v ¥&²&Ù48mŠ#¦#Ê.î(F^8}=¶ô5Jh)†w°(6A.x%§7Í&C,p*ˆ+³Bß3"%V|=›-Ù0DZn–ª¿Óèþ ( B V i z ” © ¿ Õ  + è *ó!("G",b"-",½",ê",#,D#+q#4#3Ò#0$7$V$.v$¥$/·$-ç$2%)H%&r%3™%Í%Dì%1&N&m&"‹&7®&Ræ&$9')^' ˆ'©'È'æ'(#%()I(,s(1 (*Ò(ý(8)8K).„)-³)8á).**I*$t*$™*$¾*$ã*-+6+P+&p+$—+0¼+?í+-,K,*a,DŒ,2Ñ,$--)-,W-7„-&¼-1ã-F.\.2x.*«.5Ö.' /"4/DW/-œ/Ê/&Ý/'0),00V0‡0¥0@Ã010#1#T1)x15¢14Ø1/ 26=2't25œ2$Ò2)÷26!3FX3Ÿ3»3+×344'84%`4†4.¥44Ô40 5:5Z5&s5š5³5#Ì5 ð5ú5 6$6 A60b6“6£6³6È6Ý6ü67'07IX7)¢7'Ì7!ô78")8L8j8%ƒ8©8#É8í86ó8 *9.K99z99´9)î9%:A>:€:Uš:ð: ;"$;6G;<~;0»;ì;0 <0:<çk<S=q= =7°=+è=>&>@>S>+j>#–>º>Ô>ñ>. + ?A9?7{?=³?.ñ?' @3H@)|@5¦@ Ü@ý@A'A%EAkA„AžA¾AÝA8üA5BNB,cB-B.¾BíB"C$C5C.RC)C«CÀC&ÛC)D",DODeD!zD'œDÄD0áD&E/9E"iEŒE¥E(½E4æE(F.DF=sF#±FÕF*ëF*G1AG1sG¥G$ÄG4éG5H+TH-€H"®H ÑH/òH-"I=PI/ŽI;¾I/úI!*J2LJJ1ŸJ8ÑJ7 + K$BKgK5‡K3½K1ñK,#L9PLŠL¨LÄL7ÜL'M6P&oP–P´PÓP3òPG&QnQ‚Q%‹Q±Q%ÊQðQ6R5GR}R%˜R"¾R áR S-#S"QS!tS$–S%»S.áS T!1TSTqTT§TÁT7ÖTVVQ(V2zVJ­VEøVh>W!§W9ÉW=XAX$WXÕ|XDRY$—Y7¼Y>ôY23Z/fZ<–ZÓZ çZ&ôZ+[3G[@{[¼[UÙ[1/\ba\4Ä\3ù\Y-]Y‡]šá]O|_ªÌ_Ñw`áIbÆ+dIòdGßlŠmU©mWÿmIWnP¡n=ònE0oOvoUÆoÓpTðpJEqŒqýrItGet^­tŠ wD—wÜx?ûx<;y;xyC´yEøyM>zkŒz]ø{IV|I |Jê|Y5}S}¨ã}bŒ~Yï~WI=¡bßUB€˜€M·‚MƒKSƒ<Ÿƒ*܃M„'U…}…#”… ¸… Â…HÌ…A†>W†3–†2ʆ9ý†^7‡–‡%­‡,Ó‡ + ˆ2 ˆL>ˆ‹ˆ3¦ˆÚˆ+ôˆ ‰4:‰8o‰8¨‰%á‰%Š#-ŠQŠ#dŠˆŠ ¤Š±Š$ÈŠ*튋#.‹CR‹6–‹/Í‹9ý‹17ŒŸiŒ %%K\Dq8¶ï)Ž*.Ž:YŽ3”ŽÈŽ'æŽ =/7m+¥ÑÕ*î*+.V-…J³&þ2%‘X‘(n‘4—‘ܑ̑ì‘- ’27’j’@z’.»’ê’$“E+“q“&ˆ“ ¯“½“&Ô“û“ ”(” + 7”B”JT”+Ÿ”+Ë”!÷”*•2D• w•˜•9¶•9ð•O*–'z–¢–M¾–U —>b—?¡—<á—:˜"Y˜ |˜‰˜$©˜$Θ9ó˜9-™Ig™I±™3û™3/šBcšB¦š©éša“›Eõ›;œ2Oœ‰‚œV #c#‡&« Òóöúþ žžž,žDž`ž sž5€ž8¶ž>ïž7.Ÿ>fŸ<¥Ÿ7âŸ< "W $z Ÿ ¹ Ê Ý ò  ¡¡/¡J¡"\¡#¡H£¡<ì¡()¢&R¢<y¢<¶¢>ó¢2£4N£-ƒ£/±£;ᣤ<¤"X¤{¤™¤'µ¤$ݤ/¥2¥#C¥*g¥$’¥#·¥Û¥7û¥C3¦)w¦#¡¦Ŧä¦7û¦73§@k§0¬§'ݧ¨"%¨#H¨&l¨“¨"²¨,Õ¨$©#'©K©.`©"©,²©dß©Dª\ª+cª9ª3ɪ6ýª24«/g«D—«Ü«6㫬8¬*A¬!l¬#ެ²¬ʬ"ä¬5­7=­:u­C°­+ô­7 ®OX®3¨®OÜ®7,¯Ad¯5¦¯*ܯ°3°-P°!~°6 °0×°5±@>±>±*¾±0é±0²K²Ej²A°²ò²#³J*³<u³=²³ð³% + ´ 0´,Q´~´0´MδZµwµ ˆµ<”µ:ѵ* ¶97¶Aq¶M³¶;·E=·Aƒ·)Å·(ï· ¸ 9¸/Z¸@Џ˸Ú¸ï¸C ¹=M¹+‹¹$·¹=ܹº*º:ºTºdºtº*„º¯º¿º+Ϻûº»#,»P»2`» “»=Ÿ»`Ý»<>¼){¼ ¥¼a³¼¼½9Ò½7 ¾.D¾s¾A†¾,Ⱦõ¾¿-¿7J¿%‚¿;¨¿ä¿À*À*:À(eÀ#ŽÀ"²À)ÕÀ.ÿÀ'.ÁVÁ#sÁ<—Á/ÔÁ+ÂM0Â~—Â:·Â5òÂ#(Ã7LÄâÃ5ÀÃ'öÃ6Ä:UÄEÄEÖÄ9ÅRVÅ+©Å,ÕÅ+Æ&.ÆUÆsÆ/‘Æ<ÁÆ_þÆ^Ç;{Ç·Ç9ÍÇ&È1.È\`ÈB½È0É41É)fÉ,É%½É,ãÉ%Ê%6Ê.\Ê6‹Ê9ÂÊ7üÊ*4Ë$_Ë!„Ë#¦Ë"ÊË0íË-Ì+LÌxÌ$–Ì1»Ì5íÌ4#ÍXÍ'qÍ5™Í#ÏÍ3óÍ!'Î+IÎ2uÎ,¨ÎEÕÎÏ(2Ï'[Ï$ƒÏF¨Ï4ïÏ3$Ð(XÐ!Ð;£Ð%ßÐ2ÑF8Ñ(Ñ2¨Ñ,ÛÑÒÒ6ÒVÒ!vÒ.˜Ò,ÇÒ$ôÒ3Ó6MÓ7„Ó(¼Ó)åÓÔ ÔK(ÔtÔƒÔ*†Ôm±Ô4Õ TÕ aÕkÕ2|Õ.¯ÕOÞÕ:.Ö<iÖ…¦Ö¤,×1Ñ×)Ø4-Ø%b؈Ø.¤Ø ÓØ%ôØ-Ù"HÙ8kÙ+¤Ù"ÐÙóÙÚ%+Ú,QÚ,~Ú%«Ú.ÑÚ7ÛC8Û8|ÛHµÛPþÛ2OÜ1‚Ü4´Ü5éÜ2Ý3RÝ!†ÝQ¨ÝfúÝ!aÞ;ƒÞ8¿Þ5øÞ>.ßMmß7»ßDóß[8à]”àMòà?@áa€átâá + Wâ,bâHâKØâ,$ã"Qã:tã(¯ã&Øã(ÿã3(ä:\ä=—ä3Õä* å>4å?så7³å<ëå7(æ4`æ}•æ€ç”çC«ç,ïçaèM~è;ÌèMé<Vé8“é?ÌéN ê/[ê1‹ê4½êcòêLVëV£ëúëì?/ì<oì:¬ìvçìX^íE·í%ýíj#î3Žî8ÂîAûî<=ï7zïO²ïOðkRðE¾ð0ñ%5ñ3[ñ@ñ/Ðñ(ò@)òcjò<Îò< ó#Hó#ló!ó²óÒóêó;ô%>ô dô…ô¤ô8¿ô%øô%õDõ:Yõ6”õPËõ?ö=\ö5šö5Ðö>÷tE÷Rº÷a øKoøT»ø!ù,2ù3_ùF“ùMÚù=(ú2fú2™ú/Ìú'üú+$ûAPû2’û:Åûü, ü Mü˜ZüPóüzDý"¿ý6âýBþ0\þMþ#Ûþÿþ5ÿ>SÿF’ÿ>Ùÿ>2W#Š4®Qã'50]0ŽR¿8KFdS«!ÿ9!/[B‹BÎJB\&Ÿ"Æ$é4&C(j(“9¼'ö7(V5$µ-Ú:7C{(›0Äõ=6M „>’!Ñ@ó@4 (u 'ž &Æ í  + # + : + U + r + $ + >µ +  ô + - 8C | D› "à = "A @d 3¥ /Ù 4 /> 4n /£ YÓ .-2\ 2°Aã1%2W$Š#¯1ÓFL6k-¢GÐ*MC5‘>Ç#2*$]-‚!°*Ò+ý,)*V3,Ä&ñ+<DB.Äó!*,A5n@¤(å)%O@o!°#Ò!ö!: Z0{/¬,Ü* 4-R1€=²9ð.*#Y}"@À?8A-z(¨;Ñ5 BC.†µHË)9>$x"7À<ø'53]3‘(Å>î1-7_0—8ÈJ0L5}6³)êL &a 0ˆ ¹  × /ä !(!E!(X!G!>É!/"!8"&Z" "=Ž"Ì"à"÷""#'6#'^#&†#I­#C÷#3;$[o$BË$)%38%7l%¤%4Ä%7ù%~1&7°&9è&9"'\'<u'<²'ï'' (01(4b(-—(-Å(8ó(:,).g)9–)-Ð)(þ)'*5>*Qt*$Æ*/ë*E+Ca+N¥+-ô+:",],-|,4ª,1ß,+-(=-(f-2-Â-â- ø-P.#j.#Ž.%².?Ø.(/,A/n/;Ž/0Ê/û/'0#B0%f0%Œ06²0$é031;B17~1¶1<Ô182CJ2\Ž2+ë2L3nd31Ó3,424‰G44Ñ405H75J€5?Ë5M 6GY69¡69Û6+7-A7?o7D¯7Lô73A8$u8š8¶8Ë8à8ý8+9DH99Ÿ95±97ç97:W:j::•:­:¿:Ñ:ã:õ:;;+;5=;3s;5§;>Ý;<6<DO<”<7¯<7ç<4=T=s=’=±=Ð=ï=>,>:J>…> >;À>ü>?5?R?o?;Œ?È?;å?!@>@[@x@•@!±@'Ó@6û@2AOAlA‰A¦AÅAßAùABB/BrB ’B!³B ÕB öB C 8C YC!zCœC¼CØC"ôC<D7TDSŒDBàD'#EKE<iE¦EEÅE; FhGFA°F?òF?2G&rGM™G4çG1H/NH~H›H*·H5âHI76IRnIÁIßIþI:JEYJNŸJWîJJFKH‘K>ÚK4L%NLtL7’L@ÊL@ MHLM@•M?ÖMQNhN8‚N@»N/üN*,O&WO:~O:¹O-ôOM"P5pP7¦PÞP%úP4 Q:UQ)QDºQQÿQ=QR3RGÃR, S58S=nS2¬S+ßS7 T$CT>hT:§T>âT.!UBPUA“U@ÕU3V0JV0{V@¬V=íV@+W+lW6˜W5ÏW=X<CX€X:ŸX2ÚX# YO1Y/Y±Y.ÏY-þY>,Z?kZL«ZMøZIF[)[:º[=õ[G3\R{\6Î\:]$@]Ge] ­]/Î]3þ]U2^.ˆ^.·^Wæ^9>_)x_V¢_Uù_KO`@›`CÜ`f a7‡a9¿aùaQ{b2Íb’c@“c@ÔcRdIhdF²dEùdD?e,„e1±e)ãe- f ;f0\f-f:»f#öfmg-ˆg:¶g@ñg(2h,[h4ˆh9½h6÷h1.i9`iGšiâi0ÿi 0j!Qj#sjq—jl k vk8‚k »kÈkèk ûk ll6l Vldlxl”l«lºlÚlêl1mJ3mB~m1Ám=óm91n-kn?™n4ÙnHoWo1uoB§o)êoDpnYpÈp7ápDqI^qi¨qPrXcr¼r;Ör&s9sWsYlsfÆs!-t2Ot‚t¡t?»tAût=u<Yu–u#±u3Õuo vEyvF¿v9w)@w;jw)¦w<ÐwX xHfxG¯x^÷x7VyBŽy*Ñy9üy,6z1czD•zEÚz@ {%a{&‡{)®{$Ø{"ý{3 |T|an|)Ð|"ú|8}3V}/Š}0º}.ë}>~6Y~'~1¸~Lê~%7%]‚ƒ'€).€AX€,š€#Ç€Më€H92‚&µ=Üv‚1‘‚Â!ß‚_ƒ>aƒ0 ƒ=у,„<„?¼„$ü„!…(8…a…Dq…G¶…Gþ…'F†Rn†+Á†í†þ†‡<‡P‡;o‡«‡cLJ6+ˆ‰bˆ9ìˆ-&‰T‰7q‰1©‰<Û‰-ŠAFŠ'ˆŠ'°Š!ØŠ!úŠ‹^0‹D‹aÔ‹6Œ1TŒ;†Œ;ÂŒ>þŒB=7€F¸Yÿ?YŽJ™Ž%äŽ7 + 8B6{8²Bë9.'h5OÆ$‘;‘P‘l‘ˆ‘œ‘'°‘$Ø‘$ý‘)"’&L’1s’9¥’Vß’ + 6“)A“7k“0£“?Ô“/”'D”l”<†”QÔ_•%u•›•*¸•%ã•m –=w–+µ–+á–% —%3— Y—3z—%®—*Ô—,ÿ—7,˜]d˜+˜<î˜N+™Wz™.Ò™/š:1šjlšךLõš.B›4q›2¦›7Ù›zœŒœ§œ1œ)ôœB4aG–HÞ-'žYUž<¯žGìž4Ÿ5OŸ…Ÿ5 ŸÖŸ7ôŸ , @M /Ž @¾ 6ÿ 96¡7p¡X¨¡H¢J¢Di¢®¢/Í¢ý¢@£H\£R¥£&ø£K¤Mk¤O¹¤G ¥[Q¥U­¥s¦w¦+—¦(æJì¦S7§J‹§XÖ§=/¨Bm¨B°¨ó¨F©OY©F©©Eð©C6ª!zª%œª:ª+ýª>)«0h«4™«DΫY¬.m¬œ¬<º¬+÷¬k#­C­KÓ­!®QA®2“®7Æ®)þ®(¯VH¯GŸ¯<ç¯($°0M°-~°-¬°CÚ°&± E±f±Iƒ±>ͱ# ²#0²1T²1†²A¸²?ú²?:³?z³&º³*á³% ´2´cJ´f®´µ:3µ5nµ#¤µ5ȵ?þµ:>¶6y¶:°¶+ë¶5·@M·5Ž·4Ä·Mù·G¸+a¸:¸9ȸ%¹0(¹/Y¹;‰¹4Ź-ú¹,(º@Uº2–ºGɺD»TV»1«»UÝ»A3¼0u¼3¦¼7Ú¼H½J[½N¦½*õ½ ¾D@¾'…¾J­¾Cø¾9<¿1v¿f¨¿6À F gÂBˆÂ,ËÂ;øÂ!4ÃVÃLuÃYÂÃÄE7Ä(}Ä5¦ÄKÜÄP(ÅUyÅgÏÅ87Æ5pÆ5¦Æ¥ÜÆ‚ÇX—ÇNðÇ<?È?|È7¼ÈTôÈ\IÉI¦ÉSðÉFDÊ?‹ÊTËÊJ ËMkËE¹ËHÿË#HÌ-lÌ$šÌ>¿Ì`þÌI_ÍG©ÍQñÍQCÎ@•Î'ÖÎ*þÎC)ÏrmÏ3àÏ:Ð)OÐyÐ(•Ð/¾ÐîÐ/Ñ@0Ñ%qÑ&—Ñ+¾ÑQêÑ(<Ò(eÒ0ŽÒ)¿Ò!éÒH Ó;TÓ1Ó*ÂÓ)íÓ1ÔRIԜԹÔÌÔáÔôÔÕ"#ÕFÕ/_ÕÕ¤ÕÀÕÓÕ"ïÕÖ*ÖCÖ!XÖzÖ•Ö ­Ö ÎÖØÖ,îÖ ×*<×g×x××)®×Ø×ñ×JØ'LØ(tØDØ;âØ)Ù,HÙuÙ!”Ù¶Ù ËÙ×Ù-íÙ0Ú)LÚ#vÚ šÚ »Ú#ÜÚ"ÛO#Û.sÛ(¢ÛHËÛ4Ü7IÜÜG’Ü@ÚÜFÝ<bÝ+ŸÝËÝ'ÝÝ%Þ(+ÞTÞ1sÞ¥Þ)¹Þ#ãÞ;ßCß"\ßß?œß#Üß2à#3à'Wàà$Ÿà$Äà2éà7á!TáváC”á9ØáQâ=dâ%¢âFÈâ&ã$6ã;[ã—ã´ãÓãHíã=6ä'tä2œä#Ïäóäå93åmå…åžå ½åÞåýåæ9æ-Wæ,…æ)²æ'ÜæGç/Lç<|ç&¹ç#àçGè"Lè.oèžèBµè8øè51é*gé<’é=ÏéC êEQê6—êKÎêIë9dë.žë2Íë/ì50ì&fì3ì<Áì7þìC6í*zíE¥íDëí;0î?lîB¬î<ïî*,ï+Wï.ƒï>²ï+ñï.ð#LðCpð0´ð>åð7$ñ3\ñ>ñ-Ïñ7ýñ?5ò*uò4 ò=Õò<ó#Pó3tó$¨óHÍó$ô1;ô4mô2¢ô/Õô9õJ?õ=Šõ+ÈõOôõ!Dö,fö@“öBÔö&÷+>÷ j÷‹÷g¡÷, ø6ø,Rø øø¢ø¹ø5Ôø8 + ù2Cù1vùN¨ù1÷ù7)ú5aú9—ú6Ñú + û + û + û&)ûPû<mûMªû&øûQü&qü!˜ü!ºü!Üüþü3ý$Lý0qý&¢ý(Éý>òý1þCKþ?þ@Ïþ)ÿ;:ÿ3vÿFªÿ1ñÿ##$Gl‚” ª¶3Ë/ÿ9/4i;ž*Ú'-&K2r2¥Ø$ô!%;4a–­Ã%à&-'K$s#˜¼"Ô÷A3Y%F³9ú64k$‚$§0Ì1ý/J]Ks)¿é,/3'c‹$¡>Æ &" GI 2‘ :Ä +ÿ + + ,C + .p + "Ÿ +  +  ß + $ (% ,N !{ ( Æ %æ  % B b '~ %¦ 2Ì @ÿ -@ 9n 9¨ Dâ >''f"ޱ$Ì4ñ6&-]=‹-É=÷%5-[I‰7Ó6 *B.m)œÆå=ý%;@a)¢'Ì3ô((</eG•,Ý$ + +/4[N5ß 460kœ2º&í$>92x!«#Í.ñ: >[2š0Í)þ3( + \ + g + r + }#ˆ+¬BØ7S + p%{9¡4Û91J#|  + °» + Ë + Ö(á0 +  + ;CFLŠ0×J!SVu>Ì. =:5x1®@à[!:},¸>å$?7^#–,º9çd! )† A° 2ò @%!4f!9›!,Õ!&"$)"1N",€"b­"?#7P#3ˆ#7¼#>ô#63$2j$5$;Ó$K%[%r% ƒ%v%&W&So&Ã&,Ú&<'0D'?u'2µ'Vè'G?(5‡(2½(Dð(55),k)@˜)3Ù)) */7*6g*3ž*4Ò*&+L.+:{+1¶+9è+U",:x,4³,)è,)-<-3S-(‡-1°-4â-1.‡I.Ñ.æ.4/C5/Dy/¾/8Ü/:09P09Š03Ä01ø0"*1AM1D16Ô1. 2A:2|2 ›28¼29õ28/39h3<¢30ß3.47?4w4”4²4Ð4í4" + 5-5J5 g5!ˆ5ª5 Ç54è5-6GK65“6TÉ6T7$s7"˜7+»7)ç708<B8/8 ¯8<¹8Bö8+99 e9†9 + Ÿ9Aª9ì9;:FC:SŠ:BÞ:%!;G;Qc;Qµ;<D'<Bl<F¯<Eö<<= N=6o=¦="Â=1å=>5>*K>6v>6­>6ä>-?6I?1€?1²?7ä?1@1N@€@(–@¿@@×@A%6A\A'mA•A²AÎA:ÝA)B-BB.pB-ŸB0ÍB,þB-+C0YC,ŠC.·C.æC.D,DD9qD5«D(áD7 + E.BEqEŽE¬E+ÇE,óE8 FWYF2±FPäF$5G)ZG0„GµGÎGUêG?@H+€H5¬H+âH8I7GI&I<¦I,ãI1J<BJ!J¡JÀJ@ÝJUK4tK9©KPãK*4L4_L$”L¹LÖL8õL4.M1cM3•M-ÉM'÷M,N"LN&oN%–N%¼N%âN(O01O.bO-‘O<¿OIüO!FPhPˆP¥P$ÄP/éP@Q/ZQ=ŠQGÈQR##R$GR3lR` RRSLTS¡S+·S&ãSE + TBPT*“T"¾T?áTN!UQpUÂULÚU'V(DV1mV+ŸV+ËV;÷V3WKW#fW+ŠW*¶WOáW1X)HX@rX*³X)ÞX)Y2Y5DY*zY\¥Y8Z:;Z:vZB±Z'ôZ\[)y[0£[:Ô[%\W5\%\:³\+î\)])D]An]7°]7è]H ^?i^;©^3å^/_/I_>y_:¸_ió_.]`$Œ`F±`Rø`Kafa|a8—a#Ða1ôa:&bNab°b;Ðb= c"Jc9mc$§cFÌcUd*idH”dGÝd7%eI]e:§eYâeTOl:Žl:Él>m3Cm0wmB¨mHëm%4n*Zn"…n¨n;Ãn9ÿn/9oLio0¶o3çop-3pap jp6tp>«p3êpq2qGqaqwq)”q<¾q ûq8rUr$ur#šr7¾r)ör sA=sJsNÊs2tHLt7•t2Ít=uB>uBu3ÄuøuBvSvynvBèvb+w9ŽwDÈwE x>Sx>’x"Ñx9ôx0.y_y}y/šy0Êy6ûy:2z0mz+žz=Êz.{+7{>c{D¢{Vç{2>|$q|9–|9Ð| + }!"}D}7`}'˜}<À}1ý}2/~Bb~$¥~(Ê~/ó~#F?O†+Ö!€;$€,`€E€8Ó€, 9NR + ¡¬!Æ(èD‚=V‚:”‚UÏ‚'%ƒMƒ@bƒ>£ƒ=âƒ: „8[„2”„+Ç„ó„F…9Z…”…=¬…>ê….)†X†xv†*ï†I‡4d‡3™‡/͇<ý‡%:ˆ7`ˆ-˜ˆEƈR ‰P_‰P°‰#Š@%Š0fŠ8—Š1ЊK‹8N‹=‡‹FÅ‹l ŒGyŒEÁŒD.L,{)¨.Ò5Ž7ŽVŽ6oŽA¦Ž#èŽ0 =@Z=›CÙK$iIŽKØ#$‘+H‘,t‘%¡‘9Ç‘’9’@J’+‹’5·’8í’&“8“Q“p““®“<Í“, + ”'7” _”#i”3”Á”Дâ”÷”% •!2•T•,l•1™•5Ë•0–42–g–*–*¬–*×–*—/-—<]—4š—Ï—)ç—!˜3˜J˜a˜5}˜³˜*̘5÷˜C-™Bq™´™EÒ™š$,šQšmšš'žš*Æš ñš›/›bK›j®›iœGƒœCËœ&86Ao6±Aè;*ž;fž+¢ž=Ξ= ŸJŸ6]Ÿ5”Ÿ'ÊŸ2òŸ(% N 2e @˜ (Ù )¡2,¡@_¡, ¡2Í¡1¢.2¢a¢ j¢Ot¢ Ä¢+å¢+£G=£E…£4Ë£;¤<¤H[¤8¤¤6ݤ5¥]J¥<¨¥4å¥+¦8F¦7¦)·¦9á¦9§8U§$ާ,³§Eà§&¨%:¨0`¨‘¨®¨µ¨ ¼¨ƨ)ͨG÷¨,?©2l©+Ÿ©3Ë©@ÿ©?@ªG€ª(Ȫ+ñª«!;«+]«=‰«Ç«Û«"ì«!¬#1¬$U¬Jz¬(Ŭ%î¬3­3H­3|­°­,Ä­0ñ­+"®*N®@y®:º®*õ®B ¯&c¯9Н>į8°$<°)a°@‹°2̰6ÿ°26±:i±¤±/ı0ô±2%²X²%a²%‡²\­²A + ³9L³H†³*ϳDú³K?´F‹´QÒ´C$µ;hµ)¤µε#ìµG¶2X¶'‹¶'³¶8Û¶#·&8·0_·0·0Á·1ò·N$¸Cs¸8·¸Dð¸L5¹‚¹6‹¹-¹hð¹5Yº0º5Àº*öº4!»=V»1”»,Æ»ó»/¼>B¼2¼6´¼5ë¼-!½JO½Aš½5ܽ6¾I¾.i¾;˜¾"Ô¾-÷¾-%¿?S¿2“¿PÆ¿5À0MÀG~ÀCÆÀ? + ÁIJÁE”Á(ÚÁ5Â9ÂIÂXÂHj³Â@ÓÂAÃ2VÃ3‰Ã3½ÃDñÃ26Ä:iÄD¤Ä7éÄ.!Å.PÅ<Å.¼Å&ëÅeÆxÆÆ+«ÆFׯ,Ç'KÇ)sÇ,Ç)ÊÇVôÇKÈ9cÈ%È6ÃÈ)úÈ($ÉZMɨÉ8ÀÉùÉÊ$(ÊBMÊ)Ê.ºÊHéÊ2Ë2LËË.–Ë*ÅË0ðË!Ì#@Ì5dÌ5šÌÐÌ0áÌFÍ+YÍ…Í2¥Í+ØÍBÎ,GÎ2tÎ5§ÎDÝÎ,"Ï#OÏ1sÏ1¥ÏP×Ï9(Ð8bÐG›ÐMãÐ61Ñ=hÑ:¦ÑYáÑ\;Ò@˜ÒHÙÒ?"Ó<bÓ6ŸÓ5ÖÓN ÔD[Ô9 Ô7ÚÔHÕ([Õ2„ÕB·ÕDúÕ3?Ö$sÖ˜ÖµÖCÅÖ- ×27×$j×G×;××HØ9\ØB–Ø1ÙØ^ ÙDjÙ;¯ÙëÙ% Ú41Ú1fÚ9˜Ú0ÒÚ Û$Û,6Û&cÛqŠÛ@üÛV=Ü>”ÜÓÜFãÜF*ÝFqÝF¸ÝÿÝ#Þ>5Þ;tÞ°ÞAÆÞ(ß%1ßPWß*¨ßÓßïß à%à@à,Tàà”àªàÀàÓàéàüàá%á8áKá^áqá…á˜á«á¾áÑáäá÷á â â3âFâYâlââ’â¨â»âÎâäâúâã#ã6ãJã]ãpãƒã–ã©ã¼ãÏãâã÷ã + ää2äGäZä+yä¥ä!Ãä!åä-å5åFå!Yå1{å2­å$àåæ]!æ+æ«æÉæ çæ%ç.ç.>ç;mç:©ç"äç8è1@è$rèD—èÜè.ðè,é Lé3mé7¡é"Ùé0üé_-ê+ê'¹ê+áê ë&$ë.Këzëd‰ë#îë!ì4ìSìlìŠì1›ìÍì;ìì#(í7Lía„í æí)î)1î)[î)…î)¯î)Ùî)ï)-ï)Wï)ï)«ï#Õï)ùï*#ð'Nð$vð$›ð(Àð$éð$ñ$3ñ$Xñ>}ñ'¼ñ)äñò!ò!6ò&Xòò™ò·ò ×ò*øò*#ó8Nó‡ó£ó#Âó(æó1ôAAô%ƒô4©ôMÞô1,õ9^õ˜õG­õ;õõ&1ö/Xö5ˆö!¾ö1àö*÷'=÷'e÷F÷!Ô÷%ö÷,ø8Iø‚ø ø"»ø>ÞøCù?aù¡ù.¹ùèùúú+2ú1^úú¥ú,Àú/íúAûM_û4­ûcâûpFü-·ü(åü*ý9ý:Wý"’ý%µý5Ûý,þP>þ?þ&Ïþ(öþ!ÿ*Aÿ%lÿ)’ÿ#¼ÿ%àÿ37:5r_¨>G`y/—(Ç&ð&&>)e)(¹(â( 4+SŸ$¿!ä#%*?P9-Ê-ø-&>T?“-Ó/1K)i9“6Í"'&;;b6žCÕ)1([*„¯JÀ: #F j ‰ 6¢ :Ù < + +Q + 9} + -· + 6å + 2 8O %ˆ i® ,  + E ;P BŒ KÏ & 1B .t 0£ 5Ô  + $!*Fq -±!ß"B$'g%5µ6ë(" K@lP­+þ1*9\1–DÈX Cf:ªNå94LnZ»DH[-¤)Ò=ü:AY›*¤5Ï3:9*t)Ÿ/É=ù*7/b1’3Äø33R)†°;Í% #/S+j%–'¼ä'þ0&.W†9¢8Ü')8QŠ¥"Â2å4BM+¼Ñè6@<6}6´ë. :<Ya–#ø##@+d61Çù+ 2B 5u #« <Ï " ! /!39!7m!R¥!ø! ÿ!+ ",8"$e"FŠ"'Ñ"ù"A #$N#Ns#GÂ# + $8$$(]$(†$7¯$-ç$#%+9%e%1‚%1´%æ%,þ%"+&EN&;”&YÐ&$*'O':^'"™'C¼'O(4P(.…(´(&Ñ()ø(")96)5p)3¦)'Ú)*B*K`*0¬*1Ý*?+9O+I‰+3Ó+-,/5,e,4,#´,$Ø,Iý,G-Hg-%°-/Ö-7.6>.$u.š.%¶.1Ü.G/V/2p/(£/2Ì/Hÿ/6H0604¶0;ë08'1`13t1:¨1#ã1D2\L2?©27é2:!3A\3dž3:4&>4)e4.4¾4&Ù4%5&575U5[5.z5©5À55Þ5C6;X6”6>³6;ò6..7]7,u7A¢76ä7+8+G8,s81 8(Ò8@û8%<9;b9%ž9#Ä92è9B:P^:F¯:=ö:'4;\;'e;D;OÒ;"<Z><™<,«<Ø<.÷<G&=9n=+¨=.Ô=/>,3>*`>.‹> º>Û>ù>A?[?p?4ƒ?G¸?=@F>@7…@7½@5õ@2+A+^AKŠAÖA+êA(B(?B0hB6™B#ÐB0ôB2%C7XC3C=ÄC"D,%DARD'”D!¼DFÞD>%EFdE!«E/ÍE6ýE%4F-ZF"ˆF«F7ÉF!G=#GAaG(£G9ÌGNHUHAmH7¯H6çH4I@SI+”I7ÀI3øIL,J5yJI¯J"ùJKL(DLmL3rL)¦L ÐL5ÚL6M-GM2uM7¨M1àMSNJfNJ±NIüN:FOGO:ÉOHPeMPO³P3Q#7Q0[QŒQ1¡Q3ÓQ;R#CR5gR0R0ÎR ÿR S&%S'LS"tS —S¸SÓSñS, T:TUT3pT>¤TãTúT#U"9U!\U$~U-£U!ÑUóU. V&:V;aV/V/ÍVýV8 W>EW(„W0­WÞWDöW%;XDaXE¦XìXFþX?EY?…Y)ÅYïY,÷Y4$Z6YZUZæZ*[1[G[$b[‡[£[¹[Î[ê[1\!7\1Y\1‹\P½\3]7B]Az]-¼]Fê]?1^9q^F«^3ò^!&_>H_0‡_#¸_Ü_Jø_IC`I`>×`Na,ea0’a,Ãa6ða/'b;WbG“b,Ûbc7c$Gc9lc*¦c'Ñc1ùc0+d3\d)dHºdGe6KeK‚e_Îed.f&“f&ºf%áf%g-g$?g9dg4žg7ÓgA hCMh/‘hEÁhKi.Si8‚i=»iùi!j/;j5kj4¡j,Öj%k+)k4Uk!Šk,¬k'Ùk+l,-l3ZlŽl8ªl ãl'm3,m'`mBˆm3Ëm'ÿm/'n.Wn"†n=©n*çn8oDKo1o"Âo$åo& + p,1p^pxp’p<±p7îpo&q~–qUrCkr:¯rEêr0s1Ls3~sG²s6úsA1t@st=´t3òt6&u ]u1~u2°uãu5v68vov*‡v+²v,Þv& w?2w4rw2§wFÚw7!xMYx5§x>ÝxIy<fyf£y@ + zfKz0²z@ãzM${@r{X³{I |]V|W´|3 }0@}3q}0¥}Ö}ó}?~.Q~t€~sõ~i…<Œ + É3Ô6€F?€7†€K¾€ + -)?W5—:Í)‚32‚=f‚E¤‚Eê‚E0ƒLvƒIÃI „IW„?¡„%á„C…K…+\…+ˆ…$´…&Ù…A†#B†!f†-ˆ†-¶†=ä†5"‡X‡)x‡A¢‡Cä‡((ˆLQˆžˆ#¼ˆ4àˆŽ‰¤‰JÁ‰: Š4GŠE|Š)ŠPìŠ=‹2T‹5‡‹S½‹?Œ1QŒƒŒ=¢Œ0àŒ)BZtŒ£¼Ô펎8ŽPŽjމޡޏŽËŽêŽ73N)‚<¬é+‘.0‘-_‘-‘-»‘-é‘,’BD’1‡’.¹’è’'“1/“a“,r“8Ÿ“8Ø“0”'B”8j” £”WÄ”$•#A•$e•)Š•E´•qú•'l–*”–-¿– í–%—$4—%Y—*—0ª—<Û—S˜?l˜¬˜F˘F™;Y™+•™;Á™5ý™13š#eš#‰š#­š#Ñš,õš!"›&D›Ek›0±›>â›P!œrœœ.«œWÚœ?2&r2™3ÌFž+Gž5sžS©ž ýž;Ÿ1ZŸ6ŒŸ)ß&íŸY >n ­ +Ä ;ð 8,¡:e¡' ¡'È¡Nð¡$?¢4d¢&™¢7À¢Cø¢O<£KŒ£IØ£7"¤EZ¤/ ¤1Ф;¥]>¥ œ¥ ½¥@Þ¥<¦H\¦3¥¦'Ù¦:§<<§;y§#µ§&Ù§.¨!/¨#Q¨'u¨ + ¨¨¨½¨"ר"ú¨5©S©r©#‘©µ© Ì©í©!ª'&ªQNª* ª&˪"òª«/)«Y«x«#«³«'Ò«ú«8¬$9¬;^¬Bš¬Bݬ. ­'O­Jw­"­^å­"D®#g®*‹®A¶®Cø®6<¯&s¯Aš¯Aܯ°&0±&W±(~±K§±7ó±+²$A²f²#ƒ²3§²,Û²"³(+³"T³9w³G±³?ù³=9´7w´*¯´6Ú´0µ8Bµ'{µ£µ¸µ*Ôµ-ÿµ-¶H¶)c¶(¶ ¶¶:×¶·,·4G·6|·9³·í·'¸)¸:¸9W¸0‘¸¸!Ú¸+ü¸+(¹1T¹†¹¹1³¹(幺7,º&dº-‹º'¹ºáºûº5»AM»4»)Ä»Zî»2I¼&|¼6£¼4Ú¼D½?T½(”½'½½<å½<"¾1_¾:‘¾<̾% ¿>/¿2n¿F¡¿3è¿CÀ8`À&™ÀQÀÀ,ÁP?Á@ÁMÑÁ$ÂDÂFdÂ<«Â>èÂ9'ÃFaÃ(¨ÃÑÃðÃ=Ä(EÄ=nÄ,¬ÄMÙÄ9'Å*aÅ#ŒÅ%°ÅÖÅ*õÅC ÆdÆkÆ7sÆ1«ÆDÝÆG"Ç6jÇ,¡Ç:ÎÇ- È#7È![È!}È9ŸÈRÙÈ,É@É1IÉ#{É8ŸÉ%ØÉFþÉ>EÊ"„Ê2§Ê-ÚÊ,Ë,5Ë=bË3 Ë3ÔË*Ì+3Ì(_Ì%ˆÌ+®Ì'ÚÌ'Í*Í"HÍkͤ å">±ÐKú? \lj ¥ + ¤Þ #¦ + ߤ¨çtôím$>4N + Ï ¢ ñ! 8c Ï » tg~ + gÉ Ï@ÄDÝÔ è + Z åß bv F ¸Àx; †ý45g7 ãQÆy0  Y×HÈ |Ÿ + – 'R + ¸ É ² + i„ª/I¿ © î ¯o ô]"ã OlØ ¤´¡ ":ä ì ­ÇÌ <GÓB  + ü‚ ´ò¢È 0§ +   ±  " A  : + H + \ –uÀ ýTÌòó ¹_—Ãð‘ÖÒûg ¿ Pê Þ\$ð + ¬ÏŸ} + gT¸ ´ ð /ü ð§Ù‡cŽ «¹2 ¦V ” E ö ³<.  ¯ + À'ªº + ß:¡+ ÂP •Ó3 ÔïSƒ–›Ö 4m«  Phû VÚ;‚™ ’!®è^_9mU” Ð] ÀS + à8ù uJ¨wAA: rvÌÖÃ/ݳR + > + N° £ d Å ²= ‘€ "mÍÛ{` + HÑ + ãg~º ×ÒÍ”’–:>à’ uü # Ç + ͦ … + ú 1ø + / ÒÄ¥ã | + { Ä + [ OÆG'i ¬ Ë + w @¿ )å + pO½  2Ð`'›¼òæ¯ —… ó& èqXJ n×… ‡ãy ` t­L SÏI Ç[Õ$ + ü+ä 0 %gÃb ¥Î=_ÊLå óW + &YT¼ ¢ñ ¾VÂ'Y ¢ + |_’"]B ³ø v;gúÒÏá;\´õ + ù× &Éö˜îÜÖ © ( + . + q$ f : x \ + m = Ðzééq ÝïCM âþô ò %.š<X + ôý$ + =Î .ZVo– Çöžn ¼)Ù`¹ ? + Ò + ÐX ý + 8 €J ÷ ° + × + 1*Ô­¶ W O_ jS˜E@à ÔCà + /ˆ3 ™HG + <?€¸ Yá¾ ] h*a^Ò Âœ¨' Ù)3^ëòUP  — + Ïôt + ‚Ú±È&O• ¡ À÷ û ŸWÐ + •h8  =g‡ ëb  UtÅHK{iw õ V‚Nõ†a ´0×:ŸZU`Mþ‹ # + µ Ë çÁ L ›Ô + ã¾ ‰6 ÿǸ& + R Žç“ > 6Mà + ñºÆ7½ + pxy ª@ + =  + €*² ‘Ó › 웿º6Üšü¦ôŸ×™ + E» Ë + Æè´ N*~d B¡åÑ]U ¡ƒ ¬ + -„ + 5 ¡9 ‡ Á ­¬ Nmê 7 + % §ƒà  + ñåè¿á÷ªSoû¹q;iû5! + Ál´+Y K ,@õn3 Ô ’ Ö ‚%튙h`‰ + aѳ²` Vq …É + œ õ  ƒ ï|Ì o ASÆVõF \ û ]ó­¬ .O áy~Ûl+°0‹ ® »¥ Z?%­ Ù D€Pm  + GøÝ ¹ãyn}”¸3 +  ²e + +Þþ$ ¸Þ …° À‰=¢å Oä¶ÇI,ÄjF ¬U d³»÷ Û Õú + È ±IذÞdå ãå ¦–Ç  + " ú N¢& 7½Q§Ó (ù#f ½ Àw·ÉÌE´ / + 4. xuÎ2ñ + ^œÓLÙˆ + óã ž/boÊ 2Žš`Ñ · mG + t H- + ·QF¥]íúƒÆ g Ôk‡ÈcFÃ1åà ¢{¨DÿŒ H Ðq • á + ÈE ´ + ¹ ÏŠT } õ7 fÆ Íí{6ÆÙò + £ÏÞ  S sV #XÕƒ Þ  + Ê Á‰s TâEšF7 0 + øG ×ïN¯¸r‘Ù r z Cç} M >1”3sùè oz$Î + ” y öî + RøúÒ Ìs ÿj + - šËq ÀQiÐ D¹Á + u=£Ú +  k , §¸›Å«" 8Ÿ©¹r ª ©©†°ÎÏ ºu o3 ^=Ð ß o:’Ô: Í ñëà + º,‚óÿa†S  Ém©®ÞpäÅeòVë Nb + …ªêK x„…\)'œ@œÚ ˆ jÑIB„ˆ6;ͲFk¸0Z' «é  t “™1¯x  ˜ —’ ¨ÈJÏ + î ÷¿ËûµìõÞpÊ¢2 „Ķ ­l· îÒ Í ùR !\Z + ¤M¸pò $ß”mtâÜ Áeu%›¥p ˆ êCe x.û >v- ³’ + )D X Tl ߨ ŠPt – DD x ‡ + DrÂw7‹ öZ WC ¬@1â _ > ç !? ~ ã)ùpóX˶ „- ˜ + ìÔ0n§¼ ýMdý * ½ùCEâa_H”ê (o • 9[ÞÛ + a + pbjp + <4K ¶¦ \ + ʯ®[vh [ + E ¥ + w< ”Þ + ¦òÄÝÿ — *ãØ/ iJþ cPa§»Y‰Þ÷ô ¬Ÿ<ª + òŒ -ÿ + bö€&iÝ¥ X ª5k6v« + É˜Ž ˆMo + ]‡f±9Ü- È 3à§?£Ï¢ þ üì + {±ä‡*‰÷ ¹ÔJÿk£ dv ü Ù €þ ; + Û_2h ±½\¥Ž + š@ú< + é  _ + °ç ² è5R_øèæ¡ ûÙìØâ&-˜}Úñ°Òb¿Î + ÿ ‡ÿô¢” ‘ ­Fké _š TS 2>nÿÓpBÑѼ M vŠIXÖ :_ ^20?!ô­ + ÛÃAÔ€ 6 Ç Ó + ^ + ý&WÕ|F t ©½vC Š igð vµ/ K? ‚õ} aKŒg ÚïD š ”9  Í + •8î Þ + ä À 8 ïÕ|@Â÷ + ¹ï + n‹Ì߃ù± Î  œ5yì mXà ‹7í + ®)ž ê  Ç'Y´ì + < cáìÎWÝs!‚· Ë‹ò© î„ê– êáé + Q"00 ± [/3'ë¬ó Å Cz#ÓÁ â3. l(· ³ °[¡Ò Zö¥w.Œ6 + 7ê â( H ج&‰˜ ± ¯ p Ò žIÖ 5rš "ë[ôQ  *z p ‰ ç éQ ÕÚ9Ë   Ž' Jô ‹ ;<– +  kP Ø¥ Ý + ž’œ(‘ KN ¿.Ç ” Ú 'žzL‘óµ© + Àúè EzMû}ßç‰ Rþó Á y‹Õ ÕxÜ AÁ Ûî½þÐ Oí u‚a \/¢Jê> š + < †úç9 + $i …  ø -¹ +X ºµè Þ-àýà ² sþlÆ + Ÿ 9Rs0 ë N3Ç~ …%¬ XwË + + üÖZ ¥o˜›ƒL ¨ qß >¸ + ײc¡® i0Ý ª + jkš•ã ­Â@(‹A /— ÿå±í{úeWòrëä à D1 ½¾* W>HŸ× • + HX~÷={ÜJöà ½RùY›˜l(ù . _âUþ  &ÚÎ b5 + ç#ÛIp” +  û —µ U  »Î«… %» Z~Üi{?ùñ@R |ÖAÁz "Á²' + øñ : â  ”ú­ ¾Ì ¯ ÖQûT ¢)eó ™ É “M ) Ä‹¹ -k SÏåmý\9;™ 1 †œ Šl + * § 2V À $ ×sŠ –ò ‹<ã› v + þº + Bâ + ¿“ +  ¨ 6ÄP `¶O + ³ëS¿“™sE + 5ìÝõ| }•aE!^  ʵÂ5 `eó + XJ E*NÈ£ ß`¸îyo  + SR  + >  ßY + ëñ¼ + €eÞA± + }nöÍ Eº W Ä + ) ¶ßÝ + àIfЖ-b ¶O +Å÷P + žû¤w«+ ŠQDÉ + Æ §  ®³(OOÿ + Ÿ [ ýh“" ) IÃê ]Ç ¿ + #bü¡ yGöØ F ­ “ “ æd + ¶ÐÀŽ«] ,æ–†,ìf¯ nš]O –äÑ k [Æ—‹OQ 6 Z 1 ø’ý v Õ + ` D B’êŒ_— ØFQ i A + h :WÅÚ˜|  + /! ñ — aZ®»8 , Ÿ¾¢ L® Î.—ü‡e%†~ ˜ ÒÄ Ö/k‡» + Ù™Ì xÏü WB­äÚèî2hŽz + ¹ £| Û c *ÑÙ† ® + Õ# + ͆ã`Ì JdB×e žƒ + )r f + ¨W{ ‘$ ¨zÛ s R¿ÊC  ÖbM´A ÜÊŸ Õ; YÛ2 ‘3æ¨ÃW ¹|KÜá ¦C + wïí³ + ú ]Ñxˆ›Žf©¸LgqK } ¤?ìeÑú ¯û + ÇxÃÛR [ö ¹ + ÅZ ¾• ç® ° 2 Ö + ¡è{*°“D J + ì #ŠW ‚ºów=OH2 mÒf÷ í !?á + 媠 xU(ë^ IʈH nvï 9¹È¾$~ ¾ GT†v "nJ™b”œj £¬Ì¼ØsR- »ç ’ðî F*+u + ô^"d sMŽ µ¥Ä&Cÿ  a]ð + ª P£ + ?¾Èq + 2 + Š3 \ Ì7g¡qyŒ eÁå + ¸ ²¦UŸõä!Ø + -ZI ç! Q„ ¤µü† p¯³  &) ØM U + ö pž¶§¦0O #‰ ½Ñ.’ Ù + K>" + ˜ jk¾ R Ä ^&, æ + 8Ÿ¬.ïGÔE| ×™Tpø m • tþh~1 +  u{zô 5Ûã»9 ¾QG @ æ% + ÚðÒ ) + Ñ  ² —… “U ¤ë £÷5+ n ^ Íð ÓˇE H b I + # ] ½}ÛeÝ  ^W ð Ášˆ4 €Å}Š + waRNï šr‹&$+||Iì1^ -T + ½• ž*  •1 åó„ ÆŒäL2p N~ Q˜ ñO!C h, qfÇ  + ^Ñ Ü† M¨wŽ@ Q + r cKþBG‘‚ Òqìµ + h¡i= œ¦1Éd¶° ö Dö ˾ ¸ s + ­:3Éi¨‹ üfeÆg °« »éðÙè X‡Kç ጠ+ âÀ + ? ùu“~N ™ Uþ + ; e Š ð¯^º  + á TÁm <¤ + * + ¦ •Åä + åÐ õcÎ > +%“ c Yž —{ )¾ + € ì ë6¶ Q·û~B ,Œ F WZ 4ZÏ ( ÐY 'âƒó õj ú¿ ñÓ-{. j¦ ! ÜÌú vˆ†Ò¥éôK5; (Ú ù ž æ ƒŽ øÃ.}hð –òk‰µžcÜ + x +  a + ñ ¯± Økó™L¼& 8 yèö + ˆ 9y7Uß + y + õ µ4Ê c’ E«Š + œ ¦DÅ $ æî(à>–â æ8 ^8Á¥À× ÜÝ7µ Ô¢ × ç + «>Pé¦\Ó 8 + Õ§ írõT ê@ âï ¼Ì»Lí±Éñ5 “ 6 + í ŠÆ MŒ ±C´4"@7f7žÎ) VM + J + A ¨Ó& e + ª„Ø 9 + —$Ù ËG æÝj M ›í¶œ¢ …é¾l„'´× ó Ó ý= + È¡ƒíþäá yöL„ „Ê $„¯ » ß qt$ [ !   : µÍ ¬r &: u·J4G{f w + ðú ÉA- ¢'‘ + } + [CZŒ l|èrSaÁ3ï Ôã®à N…í LÞÊ7 ¯Û #8Å}§Öç#w A­ e + iD³, + £[É%› 1²OÐ 9 §Ö a k + ªˆ‹5§v „ €Øº·ð3"w ?¼ ,j+ý] + ' Pe4. N y =ç½ r + Ý;±ˆS“ ‚(4 ÐÑñ7‚T g + s6} ¡+Û›µH† … m + ·Ú† *Ký i + ­!Í ˆ, ™Ö¤» ‡  Dqt+Ó Y ]÷V % Âë Vº?‰ BŸt£f¶ + x aŽ I + kL+ + b…1ŒÕ Ž:„< ¦Õ òBŒ[ 4Ü` · + ƒk ½ _¿@ ÿz N‚ 3ë¿Fo €  Cq|/ ª ï6 F £ ‰ŒuŽ fÆæÊr I ˆÒCŸ I ÅÉb~%*È<ïêß TB³ Ýo5¤ VÚy`‡j©;;   hT? rtù + V + ÿ ²á˜ˆ + Bl Ü S?‘ % o: éGžÏ› Ú l Õ ‚ @ààÖd° ‘G Ä5Æ j « oàGGÍ €´’„o‰µíhÿa Î` ,VK<G p;œæ § ì – Œ¬­ + Ê:®³ ,fÔ [ü2ŠÃœ + »0i %>( sÕ–‰« dâ Íßñ Z¤ ¥ Y% Û d è© §ø•À þàd + QS Ì +  Å÷ 6XMP + ÂV_‘ x —› + c + û—”9¿#\ S½µ  z < + l ä(?n œghijŠ · 0·¨ šÈ6ÇË Kò ÷ù•¤ FdÎË ïº°n + æ Ùøu#(  + zýÀ, JWm‘·R0ql{ + ä.$ö + 4 + úõ z,¥ ×Q‘rƒü 4JjáªÐ¾û¼é¼6 ™Ëcôîs ³!U˜_2Uô¸ 0©ÊÊ + •bd ŒŸ E³ðh ¾Ä ¼ + %'L7“# â9)”Ü  † + ·ü + á- + L8z š n Î@¡ ¤ ¦ ¬u þRÔ ¯ÓkH/=H º… € + n¯Ä›·ËC(= æ ýã + ¼ [ ÿÍW‰ + 1P é Ëêl w´ u »/‰Š©«£=P4 K + øL + è + ˆ ¶ ÌAB + íÍ£Båßc j `ƒ + <Ýê + € L ït^ A6©îCcdPä™—2r ÈJîYðõP¨ + ®d`¶·®÷ÏÀ éÉ ˜ô + n{ « áb ë E£1² °šAB ¼³ äë + Ñf5 ø Å\é ]Ç´ƒŒg + T[ø + Ä!]È /’)m á7Î ¤ Ùà ª€ØYÜÆØ ‘ü ²\ž +  + ¿n¤lœÄcÅ Y¶ V¬ é÷sœ T‹¢¼ž ¡ + «ÓÉ ~± Óî ©ý îf Á_ 984 UÊ + øF + tù~ª}ÑX ;8oºÚ‹ + êæh + ½D + ®£  + Y + Å + q + N | « ÞXSz c XŽÇò\®3˜ ¼H;© ‚ + ‡ “Ž“‡ æIù ° ²4 vAx¨9u Ô" F ÕU8 =Ì…Ù¹Ø ’, ™ È + # ´ƒ 1 %#D + Options for %s: + + %s: %d: warning: can't add declaration of `%s' into macro call + + %s: error reading input file `%s': %s + + %s: fatal error: aux info file corrupted at line %d + + %s: warning: too few parameter lists in declaration of `%s' + + ;; Combiner totals: %d attempts, %d substitutions (%d requiring new space), + ;; %d successes. + + Execution times (seconds) + + For bug reporting instructions, please see: + + For bug reporting instructions, please see: + %s. + + Go ahead? (y or n) + Language specific options: + + Options starting with -g, -f, -m, -O, -W, or --param are automatically + passed on to the various sub-processes invoked by %s. In order to pass + other options on to these processes the -W options must be used. + + Processing symbol table #%d, offset = 0x%.8lx, kind = %s + + Target specific options: + + There are undocumented %s specific options as well. + + There are undocumented target specific options as well. + + Updating header and load commands. + + + ldd output with constructors/destructors. + + write_c_file - output name is %s, prefix is %s + %#D `%D' by earlier handler for `%T' in pointer to member conversion in pointer to member function conversion will be re-ordered to precede member initializations %-23.23s [undocumented] + (Use '-v --help' to display command line options of sub-processes) + (use `typename %T::%D' if that's what you meant) -### Like -v but options quoted and commands not executed + --help Display this information + --help Display this information + --target-help Display target specific command line options + -B Add to the compiler's search paths + -D Define a with string '1' as its value + -D= Define a with as its value + -A= Assert the to + -A-= Disable the to + -U Undefine + -v Display the version number + -E Preprocess only; do not compile, assemble or link + -G Put global and static data smaller than + bytes into a special section (on some targets) + -H Print the name of header files as they are used + -C Do not discard comments + -dM Display a list of macro definitions active at end + -dD Preserve macro definitions in output + -dN As -dD except that only the names are preserved + -dI Include #include directives in the output + -M Generate make dependencies + -MM As -M, but ignore system header files + -MD Generate make dependencies and compile + -MMD As -MD, but ignore system header files + -MF Write dependency output to the given file + -MG Treat missing header file as generated files + -MP Generate phony targets for all headers + -MQ Add a MAKE-quoted target + -MT Add an unquoted target + -O[number] Set optimization level to [number] + -Os Optimize for space rather than speed + -S Compile only; do not assemble or link + -V Run gcc version number , if installed + -W Enable extra warnings + -Wa, Pass comma-separated on to the assembler + -Wl, Pass comma-separated on to the linker + -Wlarger-than- Warn if an object is larger than bytes + -Wno-comment{s} Do not warn about comments + -Wtraditional Warn about features not present in traditional C + -Wno-traditional Do not warn about traditional C + -Wundef Warn if an undefined macro is used by #if + -Wno-undef Do not warn about testing undefined macros + -Wimport Warn about the use of the #import directive + -Wno-import Do not warn about the use of #import + -Werror Treat all warnings as errors + -Wno-error Do not treat warnings as errors + -Wsystem-headers Do not suppress warnings from system headers + -Wno-system-headers Suppress warnings from system headers + -Wall Enable all preprocessor warnings + -Wp, Pass comma-separated on to the preprocessor + -Wunused Enable unused warnings + -Xlinker Pass on to the linker + -a Enable block profiling + -aux-info Emit declaration info into + -ax Enable jump profiling + -b Run gcc for target , if installed + -b, --branch-probabilities Include branch probabilities in output + -c Compile and assemble, but do not link + -c, --branch-counts Given counts of branches taken + rather than percentages + -d[letters] Enable dumps from specific passes of the compiler + -dumpbase Base name to be used for dumps from specific passes + -dumpmachine Display the compiler's target processor + -dumpspecs Display all of the built in spec strings + -dumpversion Display the version of the compiler + -f, --function-summaries Output summaries for each function + -fcall-saved- Mark as being preserved across functions + -fcall-used- Mark as being corrupted by function calls + -fdiagnostics-show-location=[once | every-line] Indicates how often source location information should be emitted, as prefix, at the beginning of diagnostics when line-wrapping + -ffixed- Mark as being unavailable to the compiler + -finline-limit= Limits the size of inlined functions to + -fmessage-length= Limits diagnostics messages lengths to characters per line. 0 suppresses line-wrapping + -fpreprocessed Treat the input file as already preprocessed + -ftabstop= Distance between tab stops for column reporting + -P Do not generate #line directives + -$ Do not allow '$' in identifiers + -remap Remap file names when including files + --version Display version information + -h or --help Display this information + -fsched-verbose= Set the verbosity level of the scheduler + -h, --help Print this help, then exit + -idirafter Add to the end of the system include path + -I Add to the end of the main include path + -I- Fine-grained include path control; see info docs + -nostdinc Do not search system include directories + (dirs specified with -isystem will still be used) + -nostdinc++ Do not search system include directories for C++ + -o Put output into + -l, --long-file-names Use long output file names for included + source files + -lang-c++ Assume that the input sources are in C++ + -lang-objc Assume that the input sources are in ObjectiveC + -lang-objc++ Assume that the input sources are in ObjectiveC++ + -lang-asm Assume that the input sources are in assembler + -m%-23.23s [undocumented] + -n, --no-output Do not create an output file + -o Place the output into + -o Place output into + -o, --object-directory OBJDIR Search for object files in OBJDIR + -p Enable function profiling + -pass-exit-codes Exit with highest error code from a phase + -pedantic Issue all warnings demanded by strict ISO C + -pedantic-errors Issue -pedantic warnings as errors instead + -trigraphs Support ISO C trigraphs + -lang-c Assume that the input sources are in C + -lang-c89 Assume that the input sources are in C89 + -pedantic Issue warnings needed by strict compliance to ISO C + -pedantic-errors Like -pedantic except that errors are produced + -pipe Use pipes rather than intermediate files + -print-file-name= Display the full path to library + -print-libgcc-file-name Display the name of the compiler's companion library + -print-multi-directory Display the root directory for versions of libgcc + -print-multi-lib Display the mapping between command line options and + multiple library search directories + -print-prog-name= Display the full path to compiler component + -print-search-dirs Display the directories in the compiler's search path + -quiet Do not display functions compiled or elapsed time + -save-temps Do not delete intermediate files + -specs= Override built-in specs with the contents of + -std= Assume that the input sources are for + -std= Specify the conformance standard; one of: + gnu89, gnu99, c89, c99, iso9899:1990, + iso9899:199409, iso9899:1999 + -+ Allow parsing of C++ style features + -w Inhibit warning messages + -Wtrigraphs Warn if trigraphs are encountered + -Wno-trigraphs Do not warn about trigraphs + -Wcomment{s} Warn if one comment starts inside another + -time Time the execution of each subprocess + -v Display the programs invoked by the compiler + -v, --version Print version number, then exit + -version Display the compiler's version + -w Suppress warnings + -x Specify the language of the following input files + Permissable languages include: c c++ assembler none + 'none' means revert to the default behavior of + guessing the language based on the file's extension + They exist, but they are not documented. + `%#D' declared here also declared as `%#D' here and `%#D' and `%#T' as it has already been specified as a non-system directory as it is the same as non-system directory "%s" because conversion sequence for the argument is better because of local member `%#D' with same name because of local method `%#D' with same name because the following virtual functions are abstract: because worst conversion for the former is better than worst conversion for the latter but %d required but does not override `%T(const %T&)' but does not override `operator=(const %T&)' by `%D' candidate conversions include `%D' and `%D' cannot use obsolete binding at `%D' because it has a destructor conflict with `%D' crosses initialization of `%#D' enters catch block enters scope of non-POD `%#D' enters try block expected a class template, got `%T' expected a constant of type `%T', got `%T' expected a template of type `%D', got `%D' expected a type, got `%E' expected a type, got `%T' first declared as `%#D' here first type here for conversion from `%T' to `%T' from definition of `%#D' from here in call to `%D' in evaluation of `%Q(%#T, %#T)' in instantiation of template `%T' in thrown expression initializing argument %P of `%D' initializing argument %P of `%D' from result of `%D' initializing temporary from result of `%D' instead of `%D' from dependent base class matches this `%D' under ISO standard rules matches this `%D' under old rules names from dependent base classes are not visible to unqualified name lookup - to refer to the inherited type, say `%s %T::%T' or `operator=(const %T&)' original definition appeared here other type here overriding `%#D' overriding `%#D' (must be pointer or reference to class) overriding `%#D' (must use pointer or reference) overriding `%#F' perhaps you want `%T' for a constructor since `%#D' declared in base class since type `%T' has abstract virtual functions skips initialization of `%#D' trying to instantiate `%D' using obsolete binding at `%D' where cfront would use `%#D' will be re-ordered to match declaration order will be re-ordered to match inheritance order you can work around this by removing the initializer %s TOTAL : shadows template parm `%#D'"%.*s" redefined"%s" after # is not a positive integer"%s" after #line is not a positive integer"%s" cannot be used as a macro name"%s" cannot be used as a macro name as it is an operator in C++"%s" is not a valid filename"%s" is not a valid option to the preprocessor"%s" is not defined"%s" is not valid in #if expressions"%s" may not appear in macro parameter list"%s" re-asserted"%s" redefined"/*" within comment"Small register classes" kludge"defined" cannot be used as a macro name# %s %.2f %.2f + # operator should be followed by a macro argument name#%s expects "FILENAME" or #%s is a GCC extension#%s not within a conditional#-lines for entering and leaving files don't match#elif after #else#elif not within a conditional#elif without #if#else after #else#else not within a conditional#else or #elif after #else#else without #if#endif without #if#error%.*s#if with no expression#import is obsolete, use an #ifndef wrapper in the header file#include "..." search starts here: + #include <...> search starts here: + #include expects "fname" or #include nested too deeply#include_next in primary source file#pragma %s %s is already registered#pragma %s is already registered#pragma GHS endXXX does not match previous startXXX#pragma GHS endXXXX found without previous startXXX#pragma implementation for %s appears after file is included#pragma once in main file#pragma once is obsolete#pragma pack (pop) encountered without matching #pragma pack (push, )#pragma pack(pop, %s) encountered without matching #pragma pack(push, %s, )#pragma pack(pop[, id], ) is not supported on this target#pragma pack(push[, id], ) is not supported on this target#pragma redefine_extname conflicts with declaration#pragma system_header ignored outside include file#pragma vtable no longer supported#warning%.*s%%R not followed by %%B/C/D/E%%S computed all 0's mask%%S computed all 1's mask%6.2f%% of %d branches executed in file %s + %6.2f%% of %d branches executed in function %s + %6.2f%% of %d branches taken at least once in file %s + %6.2f%% of %d branches taken at least once in function %s + %6.2f%% of %d calls executed in file %s + %6.2f%% of %d calls executed in function %s + %6.2f%% of %d source lines executed in file %s + %6.2f%% of %d source lines executed in function %s + %A begin, end, and step-count values known to result in implementation-dependent behavior due to overflow(s) in intermediate calculations at %0%A begin, end, and step-count values known to result in no iterations at %0%A end value plus step count known to overflow at %0%A from %B at %0%C%A step count known to be 0 (zero) at %0%A too few arguments (starting with dummy argument `%B') as of %0 for statement function reference at %1%A too many arguments as of %0 for statement function reference at %1%d constructor(s) found + %d destructor(s) found + %d frame table(s) found + %i-bit mode not compiled in%s%s + %s %s %+#D%s %+#D%s%s %+#T%s %D(%T) %s %D(%T, %T) %s %D(%T, %T, %T) %s %T %s (GCC) %s + %s `%s' does not fully implement the `%s' protocol%s as `float' rather than `double' due to prototype%s as complex rather than floating due to prototype%s as complex rather than integer due to prototype%s as floating rather than complex due to prototype%s as floating rather than integer due to prototype%s as integer rather than complex due to prototype%s as integer rather than floating due to prototype%s as signed due to prototype%s as unsigned due to prototype%s at end of input%s before "%s"%s before %s'%c'%s before %s'\x%x'%s before '%s' token%s before `%c'%s before `%s'%s before `%s' token%s before `\%o'%s before numeric constant%s before string constant%s between distinct pointer types `%T' and `%T' lacks a cast%s cannot resolve address of overloaded function%s causes a section type conflict%s defined inside parms%s disabled, use normal debugging flags%s discards qualifiers from pointer target type%s does not support %%n$ operand number formats%s does not support %s%s does not support %s with the `%%%c' %s format%s does not support the `%%%c' %s format%s does not support the `%%%s%c' %s format%s does not support the `%s' %s length modifier%s for `%T %s %T' operator%s for `%T %s' operator%s for `%T ? %T : %T' operator%s for `%T [%T]' operator%s for `%s %T' operator%s format, %s arg (arg %d)%s from incompatible pointer type%s function, region %d, offset = %ld (0x%.8lx) + %s has no %s%s has no member named `%s'%s ignored with %s and `%%%c' %s format%s ignored with %s in %s format%s in preprocessing directive%s is a block device%s is a reference, not call, to function `%E'%s is deprecated, please see the documentation for details%s is not supported by this configuration%s is not type %s (arg %d)%s is shorter than expected%s is too large%s makes integer from pointer without a cast%s makes pointer from integer without a cast%s makes qualified function pointer from unqualified%s no longer supported -- try -fno-vxt -ff90%s no longer supported -- try -fvxt%s of negative value `%E' to `%T'%s of read-only location%s of read-only member `%s'%s of read-only variable `%s'%s qualifier ignored on asm%s returned %d exit status%s rotate count >= width of type%s rotate count is negative%s terminated with signal %d [%s]%s%s to `%T' from `%T'%s to non-pointer type `%T' from NULL%s used with `%%%c' %s format%s with different width due to prototype%s%s%s version %s (%s) + %s compiled by GNU C version %s. + %s%s%s version %s (%s) compiled by CC. + %s-%s is an empty range%s. + %s%s: %d: `%s' used but missing from SYSCALLS + %s: %d: warning: `%s' excluded by preprocessing + %s: %d: warning: definition of %s not converted + %s: %d: warning: found `%s' but expected `%s' + %s: %d: warning: no extern definition for `%s' + %s: %d: warning: source too confusing + %s: %d: warning: varargs function declaration not converted + %s: %s%s: %s compiler not installed on this system%s: %s exited with status %d + %s: %s: %s: %s: can't get status: %s + %s: In instantiation of `%s': + %s: NaN - producing operation%s: Not a directory%s: `%s' not converted + %s: argument domain error%s: can't change mode of file `%s': %s + %s: can't create/open clean file `%s': %s + %s: can't create/open output file `%s': %s + %s: can't delete aux info file `%s': %s + %s: can't delete file `%s': %s + %s: can't get status for file `%s': %s + %s: can't get status of aux info file `%s': %s + %s: can't link file `%s' to `%s': %s + %s: can't open aux info file `%s' for reading: %s + %s: can't open file `%s' for reading: %s + %s: can't read aux info file `%s': %s + %s: cannot get working directory: %s + %s: cannot open as COFF file%s: compiling `%s' + %s: conflict list for '%s' follows: + %s: conflicting extern definitions of '%s' + %s: converting file `%s' + %s: declaration of function `%s' not converted + %s: declarations of '%s' will not be converted + %s: definition of function `%s' not converted + %s: error closing aux info file `%s': %s + %s: error reading aux info file `%s': %s + %s: error writing file `%s': %s + %s: found definition of `%s' at %s(%d) + %s: function definition not converted + %s: function singularity%s: global declarations for file `%s' not inserted + %s: input file names must have .c suffixes: %s + %s: internal abort + %s: invalid file name: %s + %s: linker input file unused because linking not done%s: local declaration for function `%s' not inserted + %s: multiple static defs of `%s' in file `%s' + %s: not a COFF file%s: overflow range error%s: partial loss of precision%s: subprocess got fatal signal %d + %s: total loss of precision%s: underflow range error%s: usage '%s [ -VqfnkN ] [ -i ] [ filename ... ]' + %s: usage '%s [ -VqfnkNlgC ] [ -B ] [ filename ... ]' + %s: wait: %s + %s: warning: %s: warning: can't rename file `%s' to `%s': %s + %s: warning: file `%s' already saved in `%s' + %s: warning: missing SYSCALLS file `%s' + %s: warning: no read access for file `%s' + %s: warning: no static definition for `%s' in file `%s' + %s: warning: no write access for dir containing `%s' + %s: warning: no write access for file `%s' + %s: warning: too many parameter lists in declaration of `%s' + %s: warning: using formals list from %s(%d) for function `%s' + %s: warnings being treated as errors + %s: would convert file `%s' + %s:%d: instantiated from `%s' + %s:%d: instantiated from here + %s:%d: confused by earlier errors, bailing out + %s:%d: declaration of function `%s' takes different forms + %s:%d: warning: %s=%s is not numeric%s=%s is too large%smember function `%D' cannot have `%T' method qualifier'##' cannot appear at either end of a macro expansion'#' is not followed by a macro parameter'$' character(s) in identifier'%D' is used as a type, but is not defined as a type.'(' expected')' expected')' or term expected'*' expected':' expected';' expected'Ll' and 'lL' are not valid integer suffixes'[' expected']' expected']' expected, invalid type expression'class' expected'class' or 'this' expected'lul' is not a valid integer suffix'{' expected("%s" is an alternative token for "%s" in C++)((anonymous))(Each undeclared identifier is reported only once(Each undeclared identifier is reported only once for each function it appears in.)(a pointer to member can only be formed with `&%E')(an out of class initialization is required)(continued):(enclose actions of previous case statements requiring destructors in their own scope.)(if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) -Wno-non-template-friend disables this warning(it is valid for %s but not the selected language)(near initialization for `%s')(so you should pass `%s' not `%s' to `va_arg')(static %s for %s)(this will be reported only once per input file)(use `=' to initialize static data members), + from %s:%d, + from %s:%u--driver no longer supported-E required when input is from standard input-G and -membedded-pic are incompatible-G is incompatible with PIC code which is the default-I- specified twice-R requires -o-Wformat-extra-args ignored without -Wformat-Wformat-nonliteral ignored without -Wformat-Wformat-security ignored without -Wformat-Wformat-y2k ignored without -Wformat-Wid-clash-LEN is no longer supported-Wmissing-format-attribute ignored without -Wformat-Wno-strict-prototypes is not supported in C++-Wuninitialized is not supported without -O-c or -S required for Ada-f%s and -msdata=%s are incompatible-f%s ignored (all code is position independent)-f%s ignored for 68HC11/68HC12 (not supported)-f%s ignored for Unicos/Mk (not supported)-f%s ignored for target (all code is position independent)-f%s is no longer supported-f%s not supported: ignored-f%sleading-underscore not supported on this target machine-fPIC and -fpic are not supported in this configuration-fPIC and -mcall-%s are incompatible-fPIC is not currently supported on the 68000 or 68010 + -fPIC is not valid with -mcoff-fPIC not valid with -mcoff-fdata-sections not supported for this target-fdata-sections not supported on AIX-femit-class-file should used along with -fsyntax-only-ffunction-sections disabled on AIX when debugging-ffunction-sections disabled; it makes profiling impossible-ffunction-sections may affect debugging on some targets-ffunction-sections not supported for this target-fhandle-exceptions has been renamed to -fexceptions (and is now on by default)-fjni and -femit-class-file are incompatible-fjni and -femit-class-files are incompatible-fname-mangling-version is no longer supported-fpic and -mapcs-reent are incompatible-fpic is not valid with -mcoff-fpic not valid with -mcoff-fprefetch-loop-arrays is not supported with -Os-fprefetch-loop-arrays not supported for this target-fprefetch-loop-arrays not supported for this target (try -march switches)-frepo must be used with -c-g is only supported when using GAS on this processor,-g option disabled-g with -mno-apcs-frame may not give sensible debugging-mabi=%s does not support -mips%d-maix64 and POWER architecture are incompatible-maix64 required: 64-bit computation with 32-bit addressing not yet supported-maix64 requires PowerPC64 architecture remain enabled-malign-double makes no sense in the 64bit mode-malign-functions is obsolete, use -falign-functions-malign-functions=%d is not between 1 and %d-malign-jumps is obsolete, use -falign-jumps-malign-jumps=%d is not between 1 and %d-malign-loops is obsolete, use -falign-loops-malign-loops=%d is not between 0 and %d-malign-loops=%d is not between 1 and %d-mapcs-26 and -mapcs-32 may not be used together-mapcs-stack-check incompatible with -mno-apcs-frame-max-stackframe=%d is not usable, not between 0 and %d-mbig-endian and -mlittle-endian may not be used together-mbnu210 is ignored (option is obsolete)-mbranch-cost=%d is not between 0 and 5-mbsd and -mxopen incompatible-mbsd and -pedantic incompatible-mcall-aixdesc must be big endian-mcmodel= is not supported on 32 bit systems-membedded-pic and -mabicalls are incompatible-mentry is only meaningful with -mips-16-mhard-float not supported-mieee not supported on Unicos/Mk-mieee-with-inexact not supported on Unicos/Mk-mips%d does not support 64 bit fp registers-mips%d does not support 64 bit gp registers-mips%d not supported-mlong-double-64 not allowed with -m64-mmultiple is not supported on little endian systems-mpic-register= is useless without -fpic-mpreferred-stack-boundary=%d is not between %d and 12-mregparm=%d is not between 0 and %d-mrelocatable and -mcall-%s are incompatible-mrelocatable and -mno-minimal-toc are incompatible-mrelocatable and -msdata=%s are incompatible-mrtd calling convention not supported in the 64bit mode-ms2600 is used without -ms-msdata=%s and -mcall-%s are incompatible-mshort-data-%s and PIC are incompatible-mshort-data-%s is too large -msingle-float and -msoft-float can not both be specified-msoft-float and -mhard_float may not be used together-mstring is not supported on little endian systems-msystem-v and -mthreads are incompatible-msystem-v and -p are incompatible-mtrap-large-shift and -mhandle-large-shift are incompatible-mxopen and -pedantic incompatible-p option not supported: use -pg instead-p profiling is no longer supported. Use -pg instead-param option missing argument-pedantic and -traditional are mutually exclusive-pg and -fomit-frame-pointer are incompatible-pipe is not supported-pipe not supported-shared not valid with -mcoff-static not valid with -mcoff-symbolic not valid with -mcoff-traditional and -ansi are mutually exclusive-traditional is deprecated and may be removed-traditional is not supported in C++-trigraphs and -traditional are mutually exclusive.da file contents exhausted too early.da file contents exhausted too early + .da file contents not exhausted.da file contents not exhausted + 31 bit mode32381 fpu387 instruction set disabled, using SSE arithmetics64 bit mode: + : `%s' JDK1.1(TM) feature;; Combiner statistics: %d attempts, %d substitutions (%d requiring new space), + ;; %d successes. + + ;; Processing block from %d to %d, %d sets. + APCS reentrant code not supported. IgnoredASSIGN to variable that is too smallASSIGN'ed label cannot fit into `%A' at %0 -- using wider siblingASSIGNed FORMAT specifier is too smallASSIGNed GOTO target variable is too smallAccess specifier at %0 must immediately follow derived-type statement at %1 with no intervening statementsAccess specifier or PRIVATE statement at %0 invalid for derived-type definition within other than the specification part of a moduleAdd a directory for INCLUDE searchingAdd directory to class pathAdd extra commentry to assembler outputAdditional debug printsAlign all labelsAlign all loops to 32 byte boundaryAlign code and data to 32 bitsAlign code to 8 byte boundaryAlign destination of the string operationsAlign doubles on word boundaryAlign labels which are only reached by jumpingAlign some doubles on dword boundaryAlign the start of functionsAlign the start of loopsAlign to >word boundariesAlign to the base type of the bit-fieldAlign variables on a 16-bit boundaryAlign variables on a 32-bit boundaryAllow $ in symbol namesAllow INTEGER and LOGICAL interchangeabilityAllow REAL(Z) and AIMAG(Z) given DOUBLE COMPLEX ZAllow RTL generation to emit invalid 3 operand insnsAllow different types as args of ? operatorAllow function addresses to be held in registersAllow math optimizations that may violate IEEE or ANSI standardsAllow ordinary copying of ASSIGN'ed varsAllow speculative motion of more loadsAllow speculative motion of non-loadsAllow speculative motion of some loadsAllow the use of $ inside identifiersAllow unsigned interation counts for RPTB/DBAlternate calling conventionAlternate return specifier at %0 invalid within a functionAlternate return specifier at %0 invalid within a main program unitAlternative calling conventionAlways check for non gcj generated classes archivesAlways pass floating-point arguments in memoryAlways treat bit-field as int-sizedAmbiguous use of intrinsic `%A' at %0 [info -f g77 M CMPAMBIG]Argument #%B of `%A' is %C at %0 but is %D at %1 [info -f g77 M GLOBALS]Array `%A' at %0 is too large to handleArray element value at %0 out of defined rangeArray or substring specification for `%A' out of range in EQUIVALENCE statementArray or substring specification for `%A' out of range in statement at %0Array reference to scalar variable `%A' in EQUIVALENCE statementArray subscript #%B out of range for EQUIVALENCE of `%A'Array subscript #%B out of range for initialization of `%A' in statement at %0Array supplied at %1 for dummy argument `%A' in statement function reference at %0Assume GASAssume all doubles are alignedAssume arguments do not alias each other or globalsAssume arguments may alias globals but not each otherAssume big endian bytes, little endian wordsAssume int to be 8 bit integerAssume native functions are implemented using JNIAssume normal C execution environmentAssume possible double misalignmentAssume small address spaceAssume strict aliasing rules applyAssume target CPU is configured as big endianAssume target CPU is configured as little endianAssume that pointers may be aliasedAssume that pointers not aliasedAssume that standard libraries & main might not existAssume that unaligned accesses are handled by the systemAssuming that all execution counts are zero. + At %0, '!' and '/*' are not valid comment delimitersAt %0, INCLUDE file %A exists, but is not readableAt %0, INCLUDE nesting too deepAt %0, specify ASSIGNMENT instead of OPERATOR for INTERFACE statement specifying the assignment operator (=)At %0, specify OPERATOR instead of ASSIGNMENT for INTERFACE statement not specifying the assignment operator (=)At top level:Attempt to EQUIVALENCE common areas `%A' and `%B' at %0Attempt to delete prologue/epilogue insn:Attempt to extend COMMON area beyond its starting point via EQUIVALENCE of `%A'Attempt to fill delay slots of branch instructionsAttempt to keep stack aligned to this power of 2Attempt to merge identical constants accross compilation unitsAttempt to merge identical constants and constant variablesAttempt to raise constant zero to a power at %0Attempt to specify second initial value for `%A' at %0Attempt to specify second initial value for element of `%A' at %0Attempt to support traditional K&R style CAuto pre/post decrement increment allowedAuto pre/post decrement increment not allowedAutomatically align branch targets to reduce branch penaltiesBLOCK DATA name at %0 superfluous, no name specified at %1Backslashes in character/hollerith constants not special (C-style)Big memory modelBlank common initialized at %0Branches are this expensive (1-5, arbitrary units)Bypass data cache for volatile mem refsC++ style comments are not allowed in ISO C89Can't find default package `%s'. Check the CLASSPATH environment variable and the access to the archivesCan't place `%A' as directed by EQUIVALENCE due to alignment restrictionsCan't specify array dimension in a declarationCannot decompose address.Cannot specify =initialization-expr at %0 unless `::' appears before list of objectsChange only the low 8 bits of the stack pointerChange the branch costs within the compilerChange the stack pointer without disabling interruptsChange the threshold for conversion to conditional executionChange when template instances are emittedCharacter `%A' (for example) is lower-case in symbol name at %0Character `%A' (for example) is upper-case in symbol name at %0Character `%A' not followed at some point by lower-case character in symbol name at %0Character constant at %0 has no closing apostrophe at %1Check for syntax errors, then stopCheck the return value of newChoose class whose main method should be usedChoose input encoding (default comes from locale)Class or interface declaration expectedCode size: small, medium or largeCommon block `%A' is %B %D in length at %0 but %C %E at %1Common block `%A' is SAVEd, explicitly or implicitly, at %0 but not SAVEd at %1Compile as if program written in lowercaseCompile as if program written in uppercaseCompile for 32-bit pointersCompile for 64-bit pointersCompile for ETRAX 100 (CRIS v8)Compile for ETRAX 4 (CRIS v3)Compile for a 68HC11Compile for a 68HC12Compile for the MMU-less Etrax 100-based elinux systemCompile for the Thumb not the ARMCompile for the v850 processorCompile for v8plus ABICompile just for ISO C89Compile pointers as triples: value, base & endCompile with 16-bit integer modeCompile with 32-bit integer modeConfigured with: %s + Conflicting I/O control specifications at %0 and %1Consider access to byte sized memory slowConsider all mem refs through pointers as volatileConsider all mem refs to global data to be volatileConsider all mem refs to static data to be volatileConsider type `int' to be 16 bits wideConsider type `int' to be 32 bits wideConstantValue attribute of field '%s' has wrong typeConstruct name at %0 does not match construct name for any containing DO constructsConstruct name at %0 not the same as construct name at %1Construct name at %0 superfluous, no construct name specified at %1Constructor invocation must be first thing in a constructorContinuation indicator at %0 must appear in column 6 [info -f g77 M LEX]Control the IEEE trap modeControl the generated fp rounding modeControl the precision given to fp exceptionsConvert floating point constant to single precision constantCopy memory address constants into regs before usingCopy memory operands into registers before usingCopyright (C) 2001 Free Software Foundation, Inc. + Copyright (C) 2002 Free Software Foundation, Inc. + Could not open basic block file %s. + Could not open data file %s. + Could not open output file %s. + Could not open program flow graph file %s. + Could not open source file %s. + Create GUI applicationCreate console applicationCreate data files needed by gcovCreating %s. + DO-statement reference to label at %0 and label definition at %2 separated by unterminated block starting at %1DO-statement reference to label at %1 follows its definition at %0DO-statement references to label at %0 and %2 separated by unterminated block starting at %1DW_LOC_OP %s not implemented + Debug argument support in compilerDebug memory address support in compilerDebug stack support in compilerDefer popping functions args from stack until laterDelete MIL-STD 1753 intrinsicsDelete libU77 intrinsicsDelete libU77 intrinsics with bad interfacesDelete non-FORTRAN-77 intrinsics F90 supportsDelete non-FORTRAN-77 intrinsics VXT FORTRAN supportsDelete non-FORTRAN-77 intrinsics f2c supportsDelete non-FORTRAN-77 intrinsics g77 supportsDelete useless null pointer checksDetermine language standardDirectory where class files should be writtenDisable Dwarf 2 line debug info via GNU asDisable MIL-STD 1753 intrinsicsDisable MPY||ADD and MPY||SUB instructionsDisable Transmeta picoJava extensionsDisable assignability checks for stores into object arraysDisable automatic array bounds checkingDisable debuggingDisable fatal diagnostics about inter-procedural problemsDisable fused multiply/add and multiply/subtract FP instructionsDisable libU77 intrinsicsDisable libU77 intrinsics with bad interfacesDisable new features under developmentDisable non-FORTRAN 77 intrinsics F90 supportsDisable non-FORTRAN-77 intrinsics F90 supportsDisable non-FORTRAN-77 intrinsics VXT FORTRAN supportsDisable non-FORTRAN-77 intrinsics f2c supportsDisable optional diagnosticsDisable parallel instructionsDisable reorganization passDisable the appending of underscores to externalsDisable use of DB instructionDisable use of RTPB instructionDisable use of RTPS instructionDisable use of conditional move instructionsDisable use of sdata/scommon/sbssDisable warnings about inter-procedural problemsDisallow all ugly featuresDisallow unsigned iteration counts for RPTB/DBDiscard unused virtual functionsDisplay compile time statisticsDisplay statistics accumulated during compilationDivision by 0 (zero) at %0 (IEEE not yet supported)Do no generate code for a 68851Do not align code to 8 byte boundaryDo not align destination of the string operationsDo not allocate BK registerDo not allow bit-fields to cross word boundariesDo not arbitary sized immediates in bit operationsDo not assume GASDo not automatically align branch targetsDo not compile for v8plus ABIDo not emit addressing modes with side-effect assignmentDo not emit complex integer constants to read-only memoryDo not emit function prologue or epilogueDo not emit stack checking codeDo not enable linker relaxationDo not generate .size directivesDo not generate H8/300H codeDo not generate H8/S codeDo not generate H8/S2600 codeDo not generate byte writesDo not generate char instructionsDo not generate code for a Sun FPADo not generate code to check exception specificationsDo not generate code which uses the FPUDo not generate load/store multiple instructionsDo not generate load/store with update instructionsDo not generate multm instructionsDo not generate run time type descriptor informationDo not generate sin, cos, sqrt for FPUDo not generate string instructions for block movesDo not generate tablejump insnsDo not inline all known string operationsDo not inline member functions by defaultDo not layout types like Intel's v1.3 gccDo not load the PIC register in function prologuesDo not make adjacent short instructions parallelDo not move instructions into a function's prologueDo not obey access control semanticsDo not optimize tail call instructions in assembler or linkerDo not pass -assert pure-text to linkerDo not perform tail call optimizationDo not permit unaligned accessesDo not promote floats to double if using -traditionalDo not provide a default start-address 0x100 of the programDo not put uninitialized globals in the common sectionDo not recognize GNU defined keywordsDo not recognize any built in functionsDo not recognize the 'asm' keywordDo not return values of functions in FPU registersDo not serialize volatile memory references with MEMW instructionsDo not store floats in registersDo not store locals in arg registersDo not support 3DNow! built-in functionsDo not support MMX and SSE built-in functions and code generationDo not support MMX built-in functionsDo not support MMX, SSE and SSE2 built-in functions and code generationDo not suppress warnings from system headersDo not tune code and read-only data alignmentDo not tune stack alignmentDo not tune writable data alignmentDo not use ABI reserved registersDo not use IEEE math for fp comparisonsDo not use MPYI instruction for C3xDo not use POWER instruction setDo not use POWER2 instruction setDo not use PowerPC instruction setDo not use Sky linkage conventionDo not use VAX fpDo not use addresses that allocate global registersDo not use alternate leaf function entriesDo not use bit-field instructionsDo not use complex addressing modesDo not use condition codes from normal instructionsDo not use direct addressing mode for soft registersDo not use flat register window modelDo not use fp registersDo not use hardware floating pointDo not use hardware fpDo not use hardware quad fp instructionsDo not use multiply-accumulate fp instructionsDo not use push instructions to save outgoing argumentsDo not use red-zone in the x86-64 codeDo not use register sbDo not use registers for argument passingDo not use stack biasDo not use structs on stronger alignment for double-word copiesDo not use the Xtensa MAC16 optionDo not use the Xtensa MIN/MAX optionDo not use the Xtensa MUL16 optionDo not use the Xtensa MUL32 optionDo not use the Xtensa NSA optionDo not use the Xtensa SEXT optionDo not use the Xtensa boolean register optionDo not use the Xtensa code density optionDo not use the Xtensa floating-point unitDo not use the bit-field instructionsDo not use the divide instructionDo not use unaligned memory referencesDo not utilize Visual Instruction SetDo not warn about using 'long long' when -pedanticDo not warn if inherited methods are unimplementedDo not work around hardware multiply bugDo not work around storem hardware bugDo symbol renaming for BSDDo symbol renaming for X/OPENDo the full regmove optimization passDo the register copy-propagation optimization passDo the register renaming optimization passDon't align items in code or dataDon't align to the base type of the bit-fieldDon't always pass floating-point arguments in memoryDon't announce deprecation of compiler featuresDon't assume that unaligned accesses are handled by the systemDon't call any cache flush functionsDon't do symbol renamingDon't emit stop bits before and after volatile extended asmsDon't force constants into registersDon't generate code for a bit-manipulation unitDon't generate code for near callsDon't generate code for near jumpsDon't generate fused multiply/add instructionsDon't let reg. allocator use ybase registersDon't optimize block movesDon't optimize lui/addiu address loadsDon't output compiler statisticsDon't pass parameters in registersDon't pedwarn about uses of Microsoft extensionsDon't place floating point constants in TOCDon't place symbol+offset constants in TOCDon't print additional debug printsDon't produce code relocatable at runtimeDon't push arg count, depend on symbol tableDon't put uninitialized constants in ROMDon't save DP across ISR in small memory modelDon't schedule the start and end of the procedureDon't set Windows definesDon't set backchain (faster, but debug harderDon't trap on integer divide by zeroDon't trap on integer divide overflowDon't use AltiVec instructionsDon't use EABIDon't use GP relative sdata/sbss sectionsDon't use Irix PICDon't use MIPS16 instructionsDon't use OSF PICDon't use P-mnemonics for branchesDon't use PowerPC General Purpose group optional instructionsDon't use PowerPC Graphics group optional instructionsDon't use PowerPC-64 instruction setDon't use ROM instead of RAMDon't use alternate register namesDon't use brasDon't use data cache for volatile mem refsDon't use embedded PICDon't use hardware fpDon't use indirect callsDon't use mips-tfile asm postpassDon't use multiply accumulateDon't use single (32-bit) FP onlyDon't use symbolic register namesDon't warn about strftime formats yielding 2 digit yearsDon't warn about too many arguments to format functionsDon't warn when all ctors/dtors are privateDon't warn when non-templatized friend functions are declared within a templateDon't warn when type converting pointers to member functionsDon't work around early 4300 hardware bugDowngrade conformance errors to warningsDummy array dimensioned to (1) is assumed-sizeDump decls to a .decl fileDump the entire translation unit to a fileDuplicate or overlapping case values/ranges at %0 and %1END statement at %0 missing `%A' keyword required for internal or module procedure(s) bounded by %1ERROR: too many basic blocks in .bb file %s + Emit 16-bit relocations to the small data areasEmit 32-bit relocations to the small data areasEmit ELF object codeEmit IEEE-conformant code, with inexact exceptionsEmit IEEE-conformant code, without inexact exceptionsEmit ROSE object codeEmit call graph informationEmit code compatible with TI toolsEmit code for Itanium (TM) processor B stepEmit code for the byte/word ISA extensionEmit code for the counting ISA extensionEmit code for the fp move and sqrt ISA extensionEmit code for the motion video ISA extensionEmit code to use GAS extensionsEmit code using explicit relocation directivesEmit common-like symbols as weak symbolsEmit cross referencing informationEmit half-PIC codeEmit identifying info in .s fileEmit special debugging information for COMMON and EQUIVALENCE (disabled)Emit stack checking codeEmit static const variables even if they are not usedEmit stop bits before and after volatile extended asmsEmit verbose debug information in assembly codeEnable Dwarf 2 line debug info via GNU asEnable MPY||ADD and MPY||SUB instructionsEnable SSA conditional constant propagationEnable SSA optimizationsEnable Transmeta picoJava extensionsEnable aggressive SSA dead code eliminationEnable automatic template instantiationEnable backend debuggingEnable compatibility with iC960 v2.0Enable compatibility with iC960 v3.0Enable compatibility with ic960 assemblerEnable debug outputEnable debuggingEnable exception handlingEnable fused multiply/add and multiply/subtract FP instructionsEnable linker relaxationEnable linker relaxationsEnable linker relaxingEnable machine specific peephole optimizationsEnable most warning messagesEnable new features under developmentEnable parallel instructionsEnable saving registers around function callsEnable scheduling across basic blocksEnable stack probingEnable support for huge objectsEnable use of DB instructionEnable use of RTPB instructionEnable use of RTPS instructionEnable use of conditional move instructionsEnable use of sdata/scommon/sbssEnables a register move optimizationEnables an rtl peephole pass run before sched2Enables guessing of branch probabilitiesEnd of search list. + End of source file before end of block started at %0Escape sequence at %0 out of range for characterExpected binary operator between expressions at %0 and at %1Explicit type declaration for intrinsic `%A' disagrees with invocation at %0Export functions even if they can be inlinedExpression at %0 has incorrect data type or rank for its contextExternal procedure `%A' is passed as actual argument at %0 but not explicitly declared EXTERNALExternal symbols have a leading underscoreExtraneous comma in FORMAT statement at %0Field expectedField names at %0 for outer structure definition -- specify them in a subsequent RECORD statement insteadFirst-column ampersand continuation at %0Floating-point operations can trapFor elinux, request a specified stack-size for this programFor intrinsics library: pass all parameters in registersForce RTL generation to emit valid 3 operand insnsForce all loop invariant computations out of loopsForce constants into registers to improve hoistingForce functions to be aligned to a 2 byte boundaryForce functions to be aligned to a 4 byte boundaryFortran 90 feature at %0 unsupportedFortran-specific form of -fbounds-checkFunction starts are aligned to this power of 2GCC does not yet properly implement `[*]' array declaratorsGCSE disabled: %d > 1000 basic blocks and %d >= 20 edges/basic blockGCSE disabled: %d basic blocks and %d registersGNU C does not support -C without using -EGNU CPP version %s (cpplib)Generate 29000 codeGenerate 29050 codeGenerate 32bit i386 codeGenerate 64bit x86-64 codeGenerate APCS conformant stack framesGenerate C header of platform specific featuresGenerate CA codeGenerate CF codeGenerate COFF format debug infoGenerate DWARF-1 format debug infoGenerate DWARF-2 debug infoGenerate ELF outputGenerate H8/300H codeGenerate H8/S codeGenerate H8/S2600 codeGenerate JA codeGenerate JD codeGenerate JF codeGenerate KA codeGenerate KB codeGenerate MC codeGenerate SA codeGenerate SB codeGenerate STABS format debug infoGenerate VMS format debug infoGenerate XCOFF format debug infoGenerate a call to abort if a noreturn function returnsGenerate big endian codeGenerate big endian dataGenerate call insns as indirect calls, if necessaryGenerate char instructionsGenerate code an embedded assembler can handleGenerate code assuming DW bit is not setGenerate code assuming DW bit is setGenerate code for C30 CPUGenerate code for C31 CPUGenerate code for C32 CPUGenerate code for C33 CPUGenerate code for C40 CPUGenerate code for C44 CPUGenerate code for GNU asGenerate code for GNU ldGenerate code for GNU runtime environmentGenerate code for Intel asGenerate code for Intel ldGenerate code for NeXT runtime environmentGenerate code for a 520XGenerate code for a 68000Generate code for a 68020Generate code for a 68030Generate code for a 68040Generate code for a 68040, without any new instructionsGenerate code for a 68060Generate code for a 68060, without any new instructionsGenerate code for a 68302Generate code for a 68332Generate code for a 68851Generate code for a 68881Generate code for a DLLGenerate code for a Sun FPAGenerate code for a Sun Sky boardGenerate code for a bit-manipulation unitGenerate code for a cpu32Generate code for an 11/10Generate code for an 11/40Generate code for an 11/45Generate code for big endianGenerate code for c1Generate code for c2Generate code for c32Generate code for c34Generate code for funcs even if they are fully inlinedGenerate code for given CPUGenerate code for high memoryGenerate code for little endianGenerate code for low memoryGenerate code for memory map1Generate code for memory map2Generate code for memory map3Generate code for memory map4Generate code for near callsGenerate code for near jumpsGenerate code for the C300Generate code for the C400Generate code for the M*Core M340Generate code for the specified chip or CPU versionGenerate code the unix assembler can handleGenerate code to check bounds before dereferencing pointers and arraysGenerate code to check subscript and substring boundsGenerate code using byte writesGenerate code which uses the FPUGenerate code with library calls for floating pointGenerate code without GP regGenerate debugging info in default extended formatGenerate debugging info in default formatGenerate divide results with reminder having the same sign as the divisor (not the dividend)Generate extended DWARF-1 format debug infoGenerate extended STABS format debug infoGenerate extended XCOFF format debug infoGenerate external legend informationGenerate floating point mathematics using given instruction setGenerate fused multiply/add instructionsGenerate inline division, optimize for latencyGenerate inline division, optimize for throughputGenerate little endian codeGenerate little endian dataGenerate load/store multiple instructionsGenerate load/store with update instructionsGenerate pc-relative codeGenerate position independent code, if possibleGenerate prefetch instructions, if available, for arrays in loopsGenerate re-entrant, PIC codeGenerate self-relocatable codeGenerate sin, cos, sqrt for FPUGenerate string instructions for block movesGenerate unwind tables exact at each instruction boundaryGlobal name `%A' at %0 has different type at %1 [info -f g77 M GLOBALS]Global name `%A' defined at %0 already defined at %1 [info -f g77 M GLOBALS]Global name `%A' is %B at %0 but is %C at %1 [info -f g77 M GLOBALS]Gratuitous parentheses surround implied-DO construct at %0Have front end emulate COMPLEX arithmetic to avoid bugsHex escape at %0 out of rangeHide MIL-STD 1753 intrinsicsHide libU77 intrinsicsHide libU77 intrinsics with bad interfacesHide non-FORTRAN 77 intrinsics F90 supportsHide non-FORTRAN-77 intrinsics F90 supportsHide non-FORTRAN-77 intrinsics VXT FORTRAN supportsHide non-FORTRAN-77 intrinsics f2c supportsHollerith and typeless constants not passed as argumentsHollerith constant at %0 specified %A more characters than are present as of %1I/O error on outputICE: emit_insn used where emit_jump_insn needed: + INCLUDE at %0 not the only statement on the source lineISO C does not allow extra `;' outside of a functionISO C does not permit named variadic macrosISO C does not permit use of `varargs.h'ISO C does not support `++' and `--' on complex typesISO C does not support `~' for complex conjugationISO C does not support complex integer typesISO C does not support plain `complex' meaning `double complex'ISO C doesn't support unnamed structs/unionsISO C forbids %s between function pointer and `void *'ISO C forbids `goto *expr;'ISO C forbids an empty source fileISO C forbids braced-groups within expressionsISO C forbids casting nonscalar to the same typeISO C forbids casts to union typeISO C forbids comparison of `void *' with function pointerISO C forbids conditional expr between `void *' and function pointerISO C forbids conditional expr with only one void sideISO C forbids const or volatile function typesISO C forbids data definition with no type or storage classISO C forbids empty initializer bracesISO C forbids forward parameter declarationsISO C forbids forward references to `enum' typesISO C forbids imaginary numeric constantsISO C forbids label declarationsISO C forbids member declarations with no membersISO C forbids nested functionsISO C forbids omitting the middle term of a ?: expressionISO C forbids ordered comparisons of pointers to functionsISO C forbids parameter `%s' shadowing typedefISO C forbids qualified function typesISO C forbids qualified void function return typeISO C forbids range expressions in switch statementsISO C forbids specifying range of elements to initializeISO C forbids subscripting `register' arrayISO C forbids taking the address of a labelISO C forbids the address of a cast expressionISO C forbids use of cast expressions as lvaluesISO C forbids use of compound expressions as lvaluesISO C forbids use of conditional expressions as lvaluesISO C forbids zero-size array `%s'ISO C prohibits argument conversion to union typeISO C requires a named argument before `...'ISO C requires whitespace after the macro nameISO C restricts enumerator values to range of `int'ISO C++ does not permit "%s" in #ifISO C++ does not permit `%T::%D' to be defined as `%T::%D'ISO C++ does not permit named return valuesISO C++ does not support `long long'ISO C++ forbids %s between pointer of type `void *' and pointer-to-functionISO C++ forbids %sing a pointer of type `%T'ISO C++ forbids %sing an enumISO C++ forbids aggregate initializer to newISO C++ forbids an empty condition for `%s'ISO C++ forbids applying `sizeof' to a function typeISO C++ forbids applying `sizeof' to a member functionISO C++ forbids applying `sizeof' to an expression of function typeISO C++ forbids applying `sizeof' to type `void' which is an incomplete typeISO C++ forbids array dimensions with parenthesized type in newISO C++ forbids assignment of arraysISO C++ forbids braced-groups within expressionsISO C++ forbids calling `::main' from within programISO C++ forbids cast to non-reference type used as lvalueISO C++ forbids casting between pointer-to-function and pointer-to-objectISO C++ forbids casting to an array type `%T'ISO C++ forbids comparison between pointer and integerISO C++ forbids compound literalsISO C++ forbids compound statements inside for initializationsISO C++ forbids computed gotosISO C++ forbids declaration of `%s' with no typeISO C++ forbids defining types within %sISO C++ forbids in-class initialization of non-const static member `%D'ISO C++ forbids initialization in array newISO C++ forbids initialization of member `%D'ISO C++ forbids initialization of member constant `%D' of non-integral type `%T'ISO C++ forbids initialization of new expression with `='ISO C++ forbids label declarationsISO C++ forbids member `%D' with same name as enclosing classISO C++ forbids nested type `%D' with same name as enclosing classISO C++ forbids non-constant aggregate initializer expressionsISO C++ forbids omitting the middle term of a ?: expressionISO C++ forbids range expressions in switch statementsISO C++ forbids static data member `%D' with same name as enclosing classISO C++ forbids subscripting non-lvalue arrayISO C++ forbids taking address of function `::main'ISO C++ forbids taking the address of a bound member function to form a pointer to member function. Say `&%T::%D'ISO C++ forbids taking the address of a cast to a non-lvalue expressionISO C++ forbids taking the address of a labelISO C++ forbids taking the address of an unqualified non-static member function to form a pointer to member function. Say `&%T::%D'ISO C++ forbids the use of `%s' on explicit instantiationsISO C++ forbids the use of `extern' on explicit instantiationsISO C++ forbids use of initializer list to initialize reference `%D'ISO C++ forbids using pointer of type `void *' in subtractionISO C++ forbids using pointer to a function in subtractionISO C++ forbids using pointer to a member in subtractionISO C++ forbids using pointer to a method in subtractionISO C++ forbids variable-size arrayISO C++ forbids variable-size array `%D'ISO C++ forbids zero-size arrayISO C++ forbids zero-size array `%D'ISO C++ prohibits anonymous structsISO C++ prohibits conversion from `%#T' to `(...)'ISO C++ prohibits overloading operator ?:ISO C89 does not support `[*]' array declaratorsISO C89 does not support `long long'ISO C89 does not support `static' or type qualifiers in parameter array declaratorsISO C89 does not support complex typesISO C89 does not support flexible array membersISO C89 forbids array `%s' whose size can't be evaluatedISO C89 forbids compound literalsISO C89 forbids long long integer constantsISO C89 forbids mixed declarations and codeISO C89 forbids specifying subobject to initializeISO C89 forbids subscripting non-lvalue arrayISO C89 forbids variable-size array `%s'ISO C99 requires rest arguments to be usedISR %s requires %d words of local vars, max is 32767Identifier expectedIgnore dllimport attribute for functionsIgnore dllimport for functionsImplement vtables using thunksImplicit declaration of `%A' at %0Implied do-loop iteration count of 0 (zero) for iteration variable `%A' in statement at %0Implied do-loop step count of 0 (zero) for iteration variable `%A' in statement at %0In %s `%s':In %s: overlapped variable and exception ranges at %dIn anythingIn block-data unitIn common blockIn constructIn entityIn file included from %s:%dIn file included from %s:%uIn functionIn function `%s':In member function `%s':In namelistIn programIn statement functionIn subroutineIn unknown kindIndicate the number of soft registers availableInitial character `%A' is lower-case in symbol name at %0Initialization via DATA and PARAMETER is type-compatibleInitialize local vars and arrays to zeroInline all known string operationsInline constants if it can be done in 2 insns or lessInline constants if it only takes 1 instructionInsert arc based program profiling codeInsert stack checking code into the programInstrument function entry/exit with profiling callsInteger at %0 too largeIntegrate simple functions into their callersInternal compiler error -- cannot perform operationInternal compiler error in %s, at %s:%dInternal compiler error: Error reporting routines re-entered. + Internal error: %s (program %s) + Please submit a full bug report. + See %s for instructions.Internal gcov abort. + Internally convert most source to uppercaseInternally preserve source caseIntersperse literal pools with code in the text sectionIntrinsic `%A' is passed as actual argument at %0 but not explicitly declared INTRINSICIntrinsic `%A' referenced %Bly at %0, %Cly at %1 [info -f g77 M EXPIMP]Intrinsic `%A', invoked at %0, known to be non-Y2K-compliant [info -f g77 M Y2KBAD]Intrinsics in uppercaseIntrinsics letters in arbitrary casesIntrinsics spelled as e.g. SqRtInvalid control expressionInvalid declarationInvalid declaration of or reference to symbol `%A' at %0 [initially seen at %1]Invalid exponent at %0 for real constant at %1; nondigit `%A' in exponent fieldInvalid expression statementInvalid first character at %0 [info -f g77 M LEX]Invalid init statementInvalid interface typeInvalid method declaration, method name requiredInvalid method declaration, return type requiredInvalid reference typeInvalid token at %0 in expression or subexpression at %1Invalid type expressionInvalid update expressionInvalid use at %0 of substring operator on %1Items in I/O list starting at %0 invalid for namelist-directed I/OJava method '%D' has non-Java parameter type `%T'Java method '%D' has non-Java return type `%T'Jump targets are aligned to this power of 2Junk after end of expression.Just generate unwind tables for exception handlingL%d cache latency unknown for %sLabel %A already defined at %1 when redefined at %0Label at %0 invalid with continuation line indicator at %1 [info -f g77 M LEX]Label definition %A at %0 on empty statement (as of %1)Label definition at %0 invalid on this kind of statementLabel definition missing at %0 for DO construct specifying label at %1Label number at %0 not in range 1-99999Language keyword letters in arbitrary casesLanguage keywords in uppercaseLanguage keywords spelled as e.g. IOStatLayout types like Intel's v1.3 gccLine too long as of %0 [info -f g77 M LEX]Link programs/data to be in external memory by defaultLink programs/data to be in onchip memory by defaultLink to emit program in ELF format (rather than mmo)Link with libads.a, libc.a and crt0.oLink with libmvme.a, libc.a and crt0.oLink with libsim.a, libc.a and sim-crt0.oLink with libyk.a, libc.a and crt0.oLocal adjustable symbol `%A' at %0Loop code aligned to this power of 2MCU `%s' not supportedMIPS ECOFF format does not allow changing filenames within functions with #lineMMIX Internal: %s is not a shiftable intMMIX Internal: Bad register: %dMMIX Internal: Bad value for 'm', not a CONST_INTMMIX Internal: Cannot decode this operandMMIX Internal: Expected a CONST_INT, not thisMMIX Internal: Expected a constant, not thisMMIX Internal: Expected a register, not thisMMIX Internal: Last named vararg would not fit in a registerMMIX Internal: Missing `%c' case in mmix_print_operandMMIX Internal: This is not a constant:MMIX Internal: This is not a recognized addressMMIX Internal: Trying to output invalidly reversed condition:MMIX Internal: What is the CC of this?MMIX Internal: What's the CC of this?MODULE PROCEDURE statement at %0 disallowed because INTERFACE at %1 specifies no generic name, operator, or assignmentMake 'char' be signed by defaultMake 'char' be unsigned by defaultMake adjacent short instructions parallel if possibleMake bit-fields by unsigned by defaultMake integers 32 bits wideMake prefix-radix non-decimal constants be typelessMake string literals `char[]' instead of `const char[]'Mark data as shared rather than privateMark strings as 'const char *'Maximum amount for a single stack increment operationMismatched EQUIVALENCE requirements for placement of `%A' at both %C and %D bytes offset from `%B'Missing %A specifier in statement at %0Missing class nameMissing class type termMissing close parenthese at %0 needed to match open parenthese at %1Missing close-parenthese(s) in FORMAT statement at %0Missing close-period between `.%A' at %0 and %1Missing colon as of %0 in substring reference for %1Missing comma in FORMAT statement at %0Missing field name(s) for structure definition at %0 within structure definition at %1Missing first operand for binary operator at %0Missing formal parameter termMissing identifierMissing interface nameMissing nameMissing number following `E' in FORMAT statement at %0Missing number following period in FORMAT statement at %0Missing operand for operator at %1 at end of expression at %0Missing or invalid constant expressionMissing structure name for outer structure definition at %0Missing super class nameMissing termMissing term and ')' expectedMissing term and ']' expectedMissing term or ')'Missing term or ')' expectedMissing value at %1 for real-number exponent at %0Missing variable initializerMixed CHARACTER and non-CHARACTER types via COMMON/EQUIVALENCE -- for example, `%A' and `%B'Multiple include guards may be useful for: + NAMELIST not adequately supported by run-time library for source files with case preservedNOTE_INSN_BASIC_BLOCK %d in middle of basic block %dNOTE_INSN_BASIC_BLOCK is missing for block %dNULL used in arithmeticNested %% construct (%%VAL, %%REF, or %%DESCR) at %0Never append a second underscore to externalsNever optimize static class initialization codeNo "Small register classes" kludgeNo UNIT= specifier in I/O control list at %0No branches in file %s + No branches in function %s + No calls in file %s + No calls in function %s + No case for %sNo components specified as of %0 for derived-type definition beginning at %1No components specified as of %0 for map beginning at %1No components specified as of %0 for structure definition beginning at %1No default crt0.oNo executable code associated with file %s. + No executable source lines in file %s + No executable source lines in function %s + No label definition for FORMAT statement at %0No specification for implied-DO iterator `%A' at %0Non-ISO-C-standard escape sequence `\%A' at %0Non-numeric character at %0 in label field [info -f g77 M LEX]Not an integer constant expression in implied do-loop in statement at %0Null argument at %0 for procedure invocation at %1Null argument at %0 for statement function reference at %1Null character at %0 -- line ignoredNull element at %0 for array reference at %1Number of registers used to pass integer argumentsOmit the frame pointer in leaf functionsOnly constructors can invoke constructorsOnly emit explicit instatiations of inline templatesOnly emit explicit template instatiationsOnly issue one instruction per cycleOnly preserve 32 bits of FP reg across callOperator at %0 has lower precedence than that at %1 -- use parenthesesOptimize block movesOptimize for 32032Optimize for 32332 cpuOptimize for 32532 cpuOptimize for 3900Optimize for 4650Optimize for Cypress processorsOptimize for F930 processorsOptimize for F934 processorsOptimize for SparcLite processorsOptimize for SuperSparc processorsOptimize lui/addiu address loadsOptimize sibling and tail recursive callsOptimize tail call instructions in assembler and linkerOptions: + Ouput extra code for initialized dataOutput GNU ld formatted global initializersOutput compiler statisticsOutput extra debug info in Luxworks environmentOutput instruction sizes to the asm fileOutside of any program unit: + Override -mbest-lib-optionsOverride the underlying type for wchar_t to `unsigned short'PIC code generation is not compatible with fast indirect calls + PIC code generation is not supported in the portable runtime model + PIC register isn't set upPRINT_OPERAND null pointerPRINT_OPERAND: unknown punctuation '%c'PRINT_OPERAND_ADDRESS, null pointerPUBLIC or PRIVATE statement at %1 cannot be specified along with PUBLIC or PRIVATE statement at %0Pack structure members together without holesPass -assert pure-text to linkerPass FP arguments in FP registersPass all arguments on stackPass arguments in registersPass arguments on the stackPass parameters in registers (default)Pass some arguments in registersPay attention to the 'inline' keywordPerform DWARF2 duplicate eliminationPerform a number of minor, expensive optimizationsPerform enhanced load motion during global subexpression eliminationPerform jump threading optimizationsPerform loop unrolling for all loopsPerform loop unrolling when iteration count is knownPerform store motion after global subexpression eliminationPerform strength reduction optimizationsPerform tail call optimizationPerform the global common subexpression eliminationPeriod at %0 not followed by digits for floating-point number or by `NOT.', `TRUE.', or `FALSE.'Permit unaligned accessesPlace arg count in a nop instruction (faster than push)Place floating point constants in TOCPlace symbol+offset constants in TOCPlace variable addresses in the regular TOCPlease keep this in mind before you report bugs.Please submit a full bug report, + with preprocessed source if appropriate. + See %s for instructions. + Pointers are 32-bitPointers are 64-bitPrefer branches over conditional executionPrefer word accesses over byte accessesPrepend global symbols with ":" (for use with PREFIX)Preserve all 40 bits of FP reg across callPreserve all spelling (case) used in programPretend that host and target use the same FP formatPrint code coverage information. + + Print g77-specific compiler version info, run internal testsPrint internal debugging-related infoPrint names of program units as they are compiledProcess #ident directivesProcessing spec %c%s%c, which is '%s' + Produce big endian codeProduce code relocatable at runtimeProduce little endian codeProfiling is not supported on this target.Profiling uses mcountProgram does not use Unix-f77 dialectal featuresProgram is written in Fortran-90-ish dialectProgram is written in Fortran-90-ish free formProgram is written in VXT (Digital-like) FORTRANProgram is written in typical FORTRAN 66 dialectProgram is written in typical Unix f77 dialectProgram name at %0 superfluous, no PROGRAM statement specified at %1Program unit name at %0 not the same as name at %1Program written in lowercaseProgram written in strict mixed-caseProgram written in uppercaseProhibit PC relative function callsPut everything in the regular TOCPut literal pools in a separate literal sectionPut uninitialized constants in ROM (needs -membedded-data)RETURN statement at %0 invalid within a main program unitRETURN_ADDRESS_OFFSET not supportedRTL check: access of elt %d of `%s' with last elt %d in %s, at %s:%dRTL check: access of elt %d of vector with last elt %d in %s, at %s:%dRTL check: expected code `%s' or `%s', have `%s' in %s, at %s:%dRTL check: expected code `%s', have `%s' in %s, at %s:%dRTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s) in %s, at %s:%dRTL check: expected elt %d type '%c', have '%c' (rtx %s) in %s, at %s:%dRange specification at %0 invalid for CASE statement within logical-type SELECT CASE statementReading specs from %s + Recognize and/bitand/bitor/compl/not/or/xorReduce size of object filesReference to generic intrinsic `%A' at %0 could be to form %B or %CReference to label at %1 inconsistent with earlier reference at %0Reference to label at %1 inconsistent with its definition at %0Reference to label at %1 is outside block containing definition at %0Register sb is zero. Use for absolute addressingReorder basic blocks to improve code placementReplace add,compare,branch with branch on count regReplace system pathReport on permanent memory allocation at end of runReport time taken by each compiler pass at end of runRequest IEEE-conformant math library routines (OSF/1)Reschedule instructions after register allocationReschedule instructions before register allocationRetain legend informationRetain standard MXDB informationReturn 'short' aggregates in memory, not registersReturn 'short' aggregates in registersReturn all structures in memory (AIX default)Return floating point results in ac0Return floating point results in memoryReturn small structures in registers (SVR4 default)Return value `%A' for FUNCTION at %0 not referenced in subprogramReturn values of functions in FPU registersReuse r30 on a per function basisRun CSE pass after loop optimizationsRun the loop optimizer twiceSAVE statement or attribute at %1 cannot be specified along with SAVE statement or attribute at %0SELECT CASE on CHARACTER type (at %0) not supported -- sorrySSE instruction set disabled, using 387 arithmeticsSame as: -mep -mprolog-functionSame name `%A' used for %B at %0 and %C at %1 [info -f g77 M INTGLOB]Save DP across ISR in small memory modelSave temp. files in Luxworks environmentSchedule code for given CPUSchedule given CPUScope of for-init-statement vars extends outsideSecond occurrence of CASE DEFAULT at %0 within SELECT CASE at %1Second occurrence of ELSE WHERE at %0 within WHERE at %1Select ABI calling conventionSelect CPU to generate code forSelect method for sdata handlingSemicolon at %0 is an invalid tokenSerialize volatile memory references with MEMW instructionsSet Windows definesSet backchainSet class pathSet class path (deprecated: use --classpath instead)Set errno after built-in math functionsSet maximum alignment to 4Set maximum alignment to 8Set start-address of dataSet start-address of the programSet the PPC_EMB bit in the ELF flags headerSet the max size of data eligible for the SDA areaSet the max size of data eligible for the TDA areaSet the max size of data eligible for the ZDA areaSet the maximum line lengthSetting spec %s to '%s' + + Small data area: none, sdata, useSmall memory modelSpecification at %0 requires ADVANCE=`NO' specification in same I/O control listSpecification at %0 requires explicit FMT= specification in same I/O control listSpecify ABI to useSpecify CPU for code generation purposesSpecify CPU for scheduling purposesSpecify a Standard MIPS ISASpecify alternate name for bss sectionSpecify alternate name for constant sectionSpecify alternate name for data sectionSpecify alternate name for dsp16xx chipSpecify alternate name for text sectionSpecify cache flush functionSpecify maximum number of iterations for RPTSSpecify maximum template instantiation depthSpecify range of registers to make fixedSpecify size of long double (64 or 128 bits)Specify that arguments may alias each other & globalsSpecify the MCU nameSpecify the initial stack addressSpecify the minimum bit alignment of structuresSpecify the name of the class for constant stringsSpecify the name of the target CPUSpecify the name of the target architectureSpecify the register allocation orderSpecify the register to be used for PIC addressingSpecify the version of the floating point emulatorSpurious number in FORMAT statement at %0Spurious sign in FORMAT statement at %0Spurious text trailing number in FORMAT statement at %0Spurious trailing comma preceding terminator at %0Statement at %0 follows ELSE block for IF construct at %1Statement at %0 invalid in BLOCK DATA program unit at %1Statement at %0 invalid in context established by statement at %1Statement at %0 invalid in this contextStatement at %0 must specify construct name specified at %1Statement function `%A' defined at %0 is not usedStore function names in object codeStore locals in argument registersStore strings in writable data sectionStrength reduce all loop general induction variablesSubstring begin/end point at %0 out of defined rangeSubstring of non-CHARACTER entity `%A' in EQUIVALENCE statementSupport 3DNow! built-in functionsSupport Green Hills ABISupport MMX and SSE built-in functions and code generationSupport MMX built-in functionsSupport MMX, SSE and SSE2 built-in functions and code generationSupport calls between Thumb and ARM instruction setsSupport message passing with the Parallel EnvironmentSupport synchronous non-call exceptionsSuppress output of instruction numbers and line number notes in debugging dumpsSwitches: + -include Include the contents of before other files + -imacros Accept definition of macros in + -iprefix Specify as a prefix for next two options + -iwithprefix Add to the end of the system include path + -iwithprefixbefore Add to the end of the main include path + -isystem Add to the start of the system include path + Symbol names in lowercaseSymbol names in uppercaseSymbol names spelled in mixed caseSymbols have a leading underscoreTake at least one trip through each iterative DO loopTarget does not have split I&DTarget has split I&DTarget machine does not support DOUBLE COMPLEX, specified at %0Target machine does not support complex entity of kind specified at %0Target the AM33 processorThe -march option is incompatible to -mipsN and therefore ignored.The MMU will trap on unaligned accessesThe maximum amount of memory to be allocated by GCSEThe maximum length of scheduling's pending operations listThe maximum number of instructions in a function that is eligible for inliningThe maximum number of instructions to consider to fill a delay slotThe maximum number of instructions to consider to find accurate live register informationThe maximum number of passes to make when doing GCSEThe meaning of `\a' (at %0) varies with -traditionalThe meaning of `\x' (at %0) varies with -traditionalThis is free software; see the source for copying conditions. There is NO + warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + Thread model: %s + Thumb: Assume function pointers may go to non-Thumb aware codeThumb: Assume non-static functions may be called from ARM codeThumb: Generate (leaf) stack frames even if not neededThumb: Generate (non-leaf) stack frames even if not neededTogether with -fpic and -fPIC, do not use GOTPLT referencesToo %B arguments for `%A' at %0 versus invocation at %1 [info -f g77 M GLOBALS]Too %B arguments passed to `%A' at %0 versus definition at %1 [info -f g77 M GLOBALS]Too few elements (%A missing) as of %0 for array reference at %1Too few elements in reference to array `%A' in EQUIVALENCE statementToo few initial values in list of initializers for `%A' at %0Too many elements as of %0 for array reference at %1Too many elements in reference to array `%A' in EQUIVALENCE statementToo many initial values in list of initializers starting at %0Total size of local variables exceeds architecture limit.Trailing comma in procedure call denotes null argumentTrap for signed overflow in addition / subtraction / multiplicationTrap on integer divide by zeroTrap on integer divide overflowTreat all warnings as errorsTreat initial values of 0 like non-zero valuesTreat local vars and COMMON blocks as if they were named in SAVE statementsTruncating characters on right side of character constant at %0Truncating characters on right side of hollerith constant at %0Truncating non-zero data on left side of numeric constant at %0Truncating non-zero data on left side of typeless constant at %0Tune alignment for the specified chip or CPU versionTune expected memory latencyTurn on maintainer testing codeTwo arithmetic operators in a row at %0 and %1 -- use parenthesesType and/or kind-type parameter disagreement between CASE value or value within range at %0 and SELECT CASE at %1Type disagreement between expressions at %0 and %1Type name at %0 not the same as name at %1Typeless constant at %0 too largeUNKNOWN in print_operand !?UNKNOWN in s390_output_symbolic_const !?Unable to open INCLUDE file `%A' at %0Unbalanced ']'Undefined label, first referenced at %0Unexpected EOF while reading source file %s. + Uninitialized locals in .bssUninitialized locals in .dataUnknown escape sequence `\%A' at %0Unknown escape sequence `\' followed by char code 0x%A at %0Unknown switch -mlong-double-%sUnrecognized FORMAT specifier at %0Unrecognized character at %0 [info -f g77 M LEX]Unsupported FORMAT specifier at %0Unsupported VXT statement at %0Unsupported operand for ** at %1 -- converting to default INTEGERUnsupported; affects code-generation of arraysUnsupported; do not generate libf2c-calling codeUnterminated escape sequence `\' at %0Usage: %s [options] file... + Usage: gcov [OPTION]... SOURCEFILE + + Use .EQV./.NEQV. instead of .EQ./.NE. at %0 for LOGICAL operands at %1 and %2Use 128 bit long doublesUse 16 bit intUse 32 bit floatUse 32 bit intUse 32-bit ABIUse 32-bit FP registersUse 32-bit general registersUse 32-bit long typeUse 4 byte entries in switch tablesUse 64 bit floatUse 64 bit long doublesUse 64-bit ABIUse 64-bit FP registersUse 64-bit general registersUse 64-bit int typeUse 64-bit long typeUse 64-bit longsUse ABI reserved registersUse AltiVec instructionsUse Cygwin interfaceUse DEC assembler syntaxUse EABIUse GNU asUse GP relative sdata/sbss sectionsUse H8/300 alignment rulesUse IEEE math for fp comparisonsUse Irix PICUse MIPS asUse MPYI instruction for C3xUse Mingw-specific thread supportUse Mingw32 interfaceUse OSF PICUse P-mnemonics for branches statically predicted as takenUse POWER instruction setUse POWER2 instruction setUse PowerPC General Purpose group optional instructionsUse PowerPC Graphics group optional instructionsUse PowerPC instruction setUse PowerPC-64 instruction setUse ROM instead of RAMUse UNIX assembler syntaxUse V8 Sparc ISAUse VAX fpUse VAX-C alignmentUse __cxa_atexit to register destructorsUse addresses that allocate global registersUse alternate leaf function entriesUse alternate register namesUse bare Windows interfaceUse big-endian byte orderUse bit-field instructionsUse bras for execucable < 64kUse call-clobbered registers for parameters and return valueUse cc- and libc-compatible 32-bit longsUse complex addressing modesUse data cache for volatile mem refs (default)Use different calling convention using 'rtd'Use direct CALLn instructions for fast callsUse embedded PICUse epsilon-respecting floating point compare instructionsUse fast but approximate float to integer conversionUse features of and schedule code for given CPUUse features of and schedule given CPUUse flat register window modelUse fp registersUse given Sparc code modelUse given assembler dialectUse given x86-64 code modelUse hardware floating pointUse hardware floating point instructionsUse hardware fpUse hardware quad fp instructionsUse in/loc/out register namesUse indirect CALLXn instructions for large programsUse indirect callsUse kernel global registersUse large memory modelUse library calls to perform FP operationsUse little-endian byte orderUse little-endian byte order for dataUse mcount for profilingUse mcount_ptr for profilingUse mips-tfile asm postpassUse mips16 entry/exit psuedo opsUse multiply accumulateUse multiply-accumulate fp instructionsUse new mnemonics for PowerPC architectureUse normal calling conventionUse normal memory modelUse offset tables for virtual method callsUse old mnemonics for PowerPC architectureUse profiling information for branch probabilitiesUse push instructions to save outgoing argumentsUse red-zone in the x86-64 codeUse register stack for parameters and return valueUse registers for argument passingUse single (32-bit) FP onlyUse slow but accurate float to integer conversionUse small memory modelUse software floating pointUse stack biasUse standard calling sequence, with arg count wordUse structs on stronger alignment for double-word copiesUse stubs for function prologuesUse subroutines for function prologue/epilogueUse symbolic register namesUse the 26-bit version of the APCSUse the 32-bit version of the APCSUse the BK register as a general purpose registerUse the Cygwin interfaceUse the Mingw32 interfaceUse the Xtensa MAC16 optionUse the Xtensa MIN/MAX optionUse the Xtensa MUL16 optionUse the Xtensa MUL32 optionUse the Xtensa NSA optionUse the Xtensa SEXT optionUse the Xtensa boolean register optionUse the Xtensa code density optionUse the Xtensa floating-point unitUse the bit-field instructionsUse the most feature-enabling options allowed by other optionsUse the same size for double as for floatUse the smallest fitting integer to hold enumsUse unaligned memory referencesUse user global registersUse zero-extending memory loads, not sign-extending onesUsing built-in specs. + Utilize Visual Instruction SetVOIDmode on an outputVariable-expression FORMAT specifier at %0 -- unsupportedWarn about casting functions to incompatible typesWarn about casts which discard qualifiersWarn about code that will never be executedWarn about constructs whose meaning change in ISO CWarn about constructs with surprising meaningsWarn about enumerated switches missing a specific caseWarn about externs not at file scope levelWarn about function pointer arithmeticWarn about functions which might be candidates for attribute noreturnWarn about functions which might be candidates for format attributesWarn about global funcs without previous declarationsWarn about global funcs without prototypesWarn about implicit function declarationsWarn about inconsistent return typesWarn about multiple declarations of the same objectWarn about non virtual destructorsWarn about non-prototyped function declsWarn about non-string-literal format stringsWarn about overloaded virtual function namesWarn about pointer casts which increase alignmentWarn about possible missing parenthesesWarn about possible security problems with format functionsWarn about possible violations of sequence point rulesWarn about possibly confusing type conversionsWarn about possibly missing braces around initializersWarn about printf/scanf/strftime/strfmon format anomaliesWarn about returning structures, unions or arraysWarn about signed/unsigned comparisonsWarn about subscripts whose type is 'char'Warn about suspicious declarations of mainWarn about testing equality of floating point numbersWarn about the use of the #import directiveWarn about uninitialized automatic variablesWarn about unrecognized pragmasWarn about use of (only a few for now) Fortran extensionsWarn about use of multicharacter literalsWarn about uses of __attribute__((deprecated)) declarationsWarn about violations of Effective C++ style rulesWarn if .class files are out of dateWarn if a C style cast is used in a programWarn if a selector has multiple methodsWarn if deprecated empty statements are foundWarn if modifiers are specified when not necessaryWarn if nested comments are detectedWarn when a declaration does not specify a typeWarn when a function arg is a structureWarn when a function is declared extern, then inlineWarn when a function is unusedWarn when a function parameter is unusedWarn when a label is unusedWarn when a stackframe is larger than the specified sizeWarn when a variable is unusedWarn when an expression value is unusedWarn when an inlined function cannot be inlinedWarn when an optimization pass is disabledWarn when one local variable shadows anotherWarn when overload promotes from unsigned to signedWarn when padding is required to align struct membersWarn when synthesis behavior differs from CfrontWarn when the compiler reorders codeWarn when the packed attribute has no effect on struct layoutWarn when trigraphs are encounteredWhen possible do not generate stack framesWhen running CSE, follow conditional jumpsWhen running CSE, follow jumps to their targetsWork around early 4300 hardware bugWork around hardware multiply bugWork around storem hardware bugYYDEBUG not definedZero or one maps specified as of %0 for union beginning at %1 -- at least two are requiredZero-length character constant at %0Zero-size array at %0Zero-size specification invalid at %0[Leaving %s] + [REPORT BUG!!][REPORT BUG!!] %[cannot find %s][super ...] must appear in a method context\x used at %0 with no following hex digits\x used with no following hex digits_Pragma takes a parenthesized string literal__VA_ARGS__ can only appear in the expansion of a C99 variadic macro__alignof__ applied to an incomplete type__builtin_eh_return not supported on this target__builtin_longjmp second argument must be 1__builtin_saveregs not supported by this subtarget__builtin_saveregs not supported by this target` ' flag`!' flag`#' flag`%#D' and `%#D' cannot be overloaded`%#D' cannot be declared`%#D' conflicts with previous using declaration `%#D'`%#D' does not refer to the unqualified type, so it is not used for linkage`%#D' hides constructor for `%#T'`%#D' invalid; an anonymous union can only have non-static data members`%#D' is not a static member of `%#T'`%#D' needs a final overrider`%#D' previously declared here`%#D' previously defined here`%#D' redeclared as %C`%#D' redeclared as different kind of symbol`%#D' used prior to declaration`%#D' was used before it was declared inline`%#T' has no member named `%D'`%#T' has pointer data members`%#T' has virtual functions but non-virtual destructor`%#T' is not a template`%#T' is not a valid type for a template constant parameter`%#T' only defines a private destructor and has no friends`%#T' only defines private constructors and has no friends`%#T' used where a `%T' was expected`%#T' used where a floating point value was expected`%%%c' yields only last 2 digits of year`%%%c' yields only last 2 digits of year in some locales`%%' constraint used with last operand`%%d' operand isn't a register`%%l' operand isn't a label`%+#D' is inaccessible`%+#D' is private`%+#D' is protected`%D' access`%D' as declarator`%D' can only be specified for constructors`%D' can only be specified for functions`%D' can only be specified for objects and functions`%D' can only be specified inside a class`%D' cannot be declared virtual, since it is always static`%D' cannot have default arguments`%D' declared as a `virtual' %s`%D' declared as a friend`%D' declared as an `inline' %s`%D' declared as reference but not initialized`%D' declared with an exception specification`%D' denotes an ambiguous type`%D' does not declare a template type`%D' has already been declared in `%T'`%D' has incomplete type`%D' implicitly declared before its definition`%D' invalid in `%#T'`%D' invalid in `%T'`%D' is a namespace`%D' is already a friend of class `%T'`%D' is already declared in this scope`%D' is already defined in `%T'`%D' is already defined in class `%T'`%D' is already defined in the class %T`%D' is not a function template`%D' is not a function,`%D' is not a member of type `%T'`%D' is not a namespace`%D' is too small to hold all values of `%#T'`%D' must be a nonstatic member function`%D' must be declared before use`%D' must be either a non-static member function or a non-member function`%D' must be initialized by constructor, not by `{...}'`%D' must have an argument of class or enumerated type`%D' must take `void'`%D' must take either one or two arguments`%D' must take either zero or one argument`%D' must take exactly one argument`%D' must take exactly two arguments`%D' names constructor`%D' not declared`%D' not defined`%D' should be initialized in the member initialization list`%D' should have been declared inside `%D'`%D' should return by value`%D' undeclared (first use this function)`%D' undeclared in namespace `%D'`%D' used without template parameters`%D' was hidden`%D' was not declared in this scope`%D' was previously implicitly declared to return `int'`%D::%D' is not a template`%E' cannot be used as a function`%E' cannot be used as a member pointer, since it is of type `%T'`%E' has type `void' and is not a throw-expression`%E' is not a type, use `typename %E' to make it one`%E' is not a valid template argument`%E' is not of type `%T'`%T' does not have a class or union named `%D'`%T' fails to be a typedef or built-in type`%T' fails to be an aggregate typedef`%T' is already a friend of `%T'`%T' is an ambiguous base of `%T'`%T' is an inaccessible base of `%T'`%T' is implicitly a typename`%T' is not a class or namespace`%T' is not a class or union type`%T' is not a class, struct, or union type`%T' is not a namespace`%T' is not a pointer-to-object type`%T' is not a template`%T' is not a template type`%T' is not a valid expression`%T' is not an aggregate type`%T' specified as declarator-id`%T::%D' is not a valid declarator`%V' qualifiers cannot be applied to `%T'`%s %T' declares a new type at namespace scope`%s' attribute applies only to functions`%s' attribute argument not a string constant`%s' attribute argument not an integer constant`%s' attribute can only be applied to Java class definitions`%s' attribute can only be applied to class definitions`%s' attribute directive ignored`%s' attribute does not apply to types`%s' attribute ignored`%s' attribute ignored for `%s'`%s' attribute is not supported on this platform`%s' attribute only applies to function types`%s' attribute only applies to functions`%s' attribute only applies to interrupt functions`%s' attribute only applies to variables`%s' attribute requires an integer constant argument`%s' cannot be statically allocated`%s' declared `static' but never defined`%s' declared as both exported to and imported from a DLL`%s' declared as function returning a function`%s' declared as function returning an array`%s' declared inline after being called`%s' declared inline after its definition`%s' defined both normally and as an alias`%s' defined but not used`%s' does not respond to `%s'`%s' fails to be a typedef or built in type`%s' has an incomplete type`%s' has both `extern' and initializer`%s' ignored, conflicts with `-g%s'`%s' initialized and declared `extern'`%s' is an unrecognized format function type`%s' is deprecated`%s' is deprecated (declared at %s:%d)`%s' is narrower than values of its type`%s' is neither function nor member function; cannot be declared friend`%s' is normally a non-static function`%s' is not a valid class name`%s' is not at beginning of declaration`%s' is not defined outside of function scope`%s' is obsolete; g++ vtables are now COM-compatible by default`%s' is promoted to `%s' when passed through `...'`%s' is usually a function`%s' locally external but globally static`%s' might be used uninitialized in this function`%s' not supported by %s`%s' redeclared as different kind of symbol`%s' tag used in naming `%#T'`%s' takes only zero or two arguments`%s' undeclared (first use in this function)`%s' undeclared here (not in a function)`%s' used but never defined`%s' used prior to declaration`%s' was declared `extern' and later `static'`%s' was declared implicitly `extern' and later `static'`%s' was previously implicitly declared to return `int'`%s' was used with no declaration before its definition`%s' was used with no prototype before its definition`%s': unknown or unsupported -g option`&' constraint used with no register class`'' flag`(' flag`+' flag`-' flag`-gnat' misspelled as `-gant'`-p' not supported; use `-pg' and gprof(1)`...' handler must be the last handler for its try block`...' in old-style identifier list`/*' within comment`0' flag`::%D' undeclared (first use here)`>>' should be `> >' in template class name`@end' missing in implementation context`@end' must appear in an implementation context`B' operand has multiple bits set`B' operand is not constant`E' modifier`I' flag`O' modifier`^' flag`_' flag`__alignof' applied to a bit-field`__builtin_next_arg' called without an argument`a' flag`and' of mutually exclusive equal-tests is always 0`asm' operand constraint incompatible with operand size`asm' operand requires impossible reload`asm' specifiers are not permitted on non-static data members`bool' is now a keyword`const' and `volatile' function specifiers on `%D' invalid in %s declaration`default' label not within a switch statement`defined' must be followed by ident or (ident)`enum %s' declared in `for' loop initial declaration`enum %s' declared inside parameter list`enum %s' incomplete in scope ending here`for' loop initial declaration used outside C99 mode`inline' is not allowed in declaration of friend template specialization `%D'`inline' specified for friend class declaration`long long long' is too long for GCC`long' switch expression not converted to `int' in ISO C`main' must return `int'`noreturn' function does return`noreturn' function returns non-void value`o' operand is not constant`operator delete' must return type `%T'`operator delete' takes type `%T' as first parameter`operator new' must not return NULL unless it is declared `throw()' (or -fcheck-new is in effect)`operator new' must return type `%T'`operator new' takes type `size_t' (`%T') as first parameter`operator=' should return a reference to `*this'`or' of unmatched not-equal tests is always 1`return' with a value, in function returning void`return' with no value, in function returning non-void`sigof' applied to non-aggregate expression`sigof' applied to non-aggregate type`sizeof' applied to a bit-field`sizeof' applied to incomplete type `%T'`sizeof' applied to non-static member`static' may not be used when defining (as opposed to declaring) a static data member`struct %s' declared in `for' loop initial declaration`struct %s' declared inside parameter list`struct %s' incomplete in scope ending here`this' is unavailable for static member functions`union %s' declared in `for' loop initial declaration`union %s' declared inside parameter list`union %s' incomplete in scope ending here`va_start' used in function with fixed args`void' in parameter list must be the entire lista data area attribute cannot be specified for local variablesa global declarationa long long inta parametera parameter list with an ellipsis can't match an empty parameter name list declarationa previous locala using-declaration cannot specify a template-id. Try `using %T::%D'a using-declaration cannot specify a template-id. Try `using %D'abort in %s, at %s:%dabsolute file name in remap_filenameabstract declarator `%T' used as declarationabstract method in non-abstract classaddress of global register variable `%s' requestedaddress of local variable `%D' returnedaddress of non-extern `%E' cannot be used as template argumentaddress of overloaded function with no contextual type informationaddress of register variable `%s' requestedaddress offset not a constantaddress requested for `%D', which is declared `register'adjusting pointers for covariant returnsafter previous specification in `%#D'aggregate `%#D' has incomplete type and cannot be definedaggregate has a partly bracketed initializeraggregate initializer is not constantaggregate initializer uses complicated arithmeticaggregate value used where a complex was expectedaggregate value used where a float was expectedaggregate value used where an integer was expectedalias arg not a stringalias definitions not supported in this configuration; ignoredalias name is too long - alias ignoredalignment may not be specified for `%s'alignment must be a small power of two, not %dalignment of `%s' is greater than maximum object file alignment. Using %dall member functions in class `%T' are privateallocated but unused delay list in epilogueambiguates built-in declaration `%#D'ambiguates old declaration `%#D'ambiguous abbreviation %sambiguous class template instantiation for `%#T'ambiguous conversion for array subscriptambiguous default type conversion from `%T'ambiguous template specialization `%D' for `%+D'an anonymous union cannot have function membersan argument type that has a default promotion can't match an empty parameter name list declarationan unsigned long intan unsigned long long intanachronistic old style base class initializeranachronistic use of array size in vector deleteand pointers are %d bits wide, but g77 doesn't yet workanonymous aggregate with no membersanonymous enum declared inside parameter listanonymous struct declared inside parameter listanonymous struct not inside named typeanonymous union declared inside parameter listanonymous variadic macros were introduced in C99args to be formatted is not '...'argument #%d is a structureargument 1 of __builtin_altivec_predicate is out of rangeargument 1 of __builtin_altivec_predicate must be a constantargument 3 of `%s' must be a 2-bit literalargument `%s' doesn't match prototypeargument `%s' might be clobbered by `longjmp' or `vfork'argument is a structureargument missing after %sargument of `%s' attribute is not "ilink1" or "ilink2"argument of `%s' attribute is not a string constantargument of `__builtin_args_info' must be constantargument of `__builtin_args_info' out of rangeargument of `__builtin_eh_return_regno' must be constantargument of `asm' is not a constant stringargument of type `%T' does not match `%T'argument to `%s' attribute larger than %dargument to `%s' missingargument to `%s' missing + argument to `-%s' is missingargument to `-B' is missingargument to `-V' is missingargument to `-Xlinker' is missingargument to `-b' is missingargument to `-l' is missingargument to `-specs' is missingargument to `-specs=' is missingargument to `-x' is missingarguments given to macro `%s'arithmetic on pointer to an incomplete typearray `%s' assumed to have one elementarray index in initializer exceeds array boundsarray index in non-array initializerarray index range in initializer exceeds array boundsarray initialized from non-constant array expressionarray size missing in `%D'array size missing in `%s'array subscript has type `char'array subscript is not an integerarray type has incomplete element typearray type value used where scalar is requiredarrays of functions are not meaningfulas `%D'asm declaration conficts with previous renameasm operand %d probably doesn't match constraintsasm template is not a string constantassertion missing after %sassertion without predicateassignmentassignment (not initialization) in declarationassignment suppressionassignment to final field `%s' not in constructorassignment to final field `%s' not in field's classassignment to final static field `%s' not in class initializerassuming cast to type `%T' from overloaded functionassuming pointer to member `%D'at this point in fileattempt to take address of bit-field structure member `%D'attempt to take address of bit-field structure member `%s'attempt to use poisoned "%s"attributes in parameter array declarator ignoredbackslash and newline separated by spacebackslash-newline at end of filebad PC range for debug info for local `%s'bad addressbad address, not (reg+disp):bad amount of stack space removal: %dbad array initializerbad call to d30v_move_2wordsbad directive -- missing close-quotebad header versionbad insn for 'A'bad insn in d30v_print_operand, 0 casebad insn to d30v_print_operand, 'A' modifier:bad insn to d30v_print_operand, 'M' modifier:bad insn to d30v_print_operand, 'f' modifier:bad insn to d30v_print_operand_address:bad insn to d30v_print_operand_memory_reference:bad insn to print_operand, 'B' modifier:bad insn to print_operand, 'E' modifier:bad insn to print_operand, 'F' or 'T' modifier:bad insn to print_operand, 'R' modifier:bad insn to print_operand, 's' modifier:bad magic numberbad magic number in file '%s'bad method signaturebad modes_tieable_p for register %s, mode1 %s, mode2 %sbad pc in exception_tablebad raw header versionbad registerbad register extension codebad shift insn:bad string constantbad testbad type in parameter debug infobad value (%s) for %s switchbad value (%s) for -mabi= switchbad value (%s) for -march= switchbad value (%s) for -masm= switchbad value (%s) for -mcmodel= switchbad value (%s) for -mcpu switchbad value (%s) for -mcpu= switchbad value (%s) for -mfpmath= switchbad value (%s) for -mips switchbad value (%s) for -mmodel switchbad value (%s) for -msdata switchbad value (%s) for -mtune= switchbad value `%s' for -mcpu switchbad value `%s' for -mfp-rounding-mode switchbad value `%s' for -mfp-trap-mode switchbad value `%s' for -mmemory-latencybad value `%s' for -mtrap-precision switchbad value constant type %d, index %dbad value for -mcall-%sbad value for -msdata=%sbad zip/jar file %sbadly formed directive -- no closing quotebadly nested C headers from preprocessorbadly punctuated parameter list in #definebase `%T' with only non-default constructor in class without a constructorbase class `%#T' has a non-virtual destructorbase class `%#T' should be explicitly initialized in the copy constructorbase class `%T' already initializedbase class `%T' has cv qualifiersbase class `%T' has incomplete typebase initializer for `%T'base initializers for `%#T'base object `%E' of scoped method call is of non-aggregate type `%T'base operand of `->' has non-pointer type `%T'base operand of `->' is not a pointerbase type `%T' fails to be a struct or class typebasic block %d pred edge is corruptedbasic block %i edge lists are corruptedbasic blocks not numbered consecutivelybit-field `%#D' with non-integral typebit-field `%D' width not an integer constantbit-field `%s' has invalid typebit-field `%s' type invalid in ISO Cbit-field `%s' width not an integer constantblock_num = %ld, num_blocks = %d + bogus JARL construction: %d + bogus JR construction: %d + boolean registers required for the floating-point optionboth 'f' and 'l' suffixes on floating constantboth long and short specified for `%s'both signed and unsigned specified for `%s'braced-group within expression allowed only inside a functionbraces around scalar initializerbraces around scalar initializer for `%T'branch %d never executed + branch %d taken = %s + branch %d taken = %s%% + break statement not within loop or switchbuilt-in function `%s' declared as non-functionbuilt-in function `%s' not currently supportedc4x_address_cost: Invalid addressing modec4x_operand_subword: address not offsettablec4x_operand_subword: invalid addressc4x_operand_subword: invalid autoincrementc4x_operand_subword: invalid modec4x_operand_subword: invalid operandc4x_print_operand: %%L inconsistencyc4x_print_operand: %%N inconsistencyc4x_print_operand: %%O inconsistencyc4x_print_operand: Bad operand casec4x_print_operand_address: Bad operand casec4x_print_operand_address: Bad post_modifyc4x_print_operand_address: Bad pre_modifyc4x_rptb_insert: Cannot find start labelc4x_rptb_rpts_p: Repeat block top label moved + c4x_valid_operands: Internal errorcall %d never executed + call %d returns = %s + call %d returns = %s%% + call of `(%T) (%A)' is ambiguouscall of overloaded `%D(%A)' is ambiguouscall to Java `catch' or `throw' with `jthrowable' undefinedcall to Java constructor with `%s' undefinedcall to Java constructor, while `jclass' undefinedcall-clobbered register used for global register variablecalled from herecalled object is not a functioncalling type `%T' like a methodcan not handle inconsistent calls to `%s'can only use `%s' attribute on file-scope definitions of objects of class typecan't access imaginary part of complex value in hard registercan't access real part of complex value in hard registercan't close %scan't close input file %scan't close temp filecan't convert between vector values of different sizecan't convert from incomplete type `%T' to `%T'can't convert value to a vectorcan't create directory %scan't create repository information file `%s'can't define friend function `%s' in a local class definitioncan't do dependency tracking with input from stdincan't expand %scan't find a register in class `%s' while reloading `asm'can't find class$can't get current directorycan't have varargs with -mfp-arg-in-fp-regscan't initialize friend function `%s'can't inline call to `%s'can't make `%D' into a method -- not in a classcan't mangle %scan't open %scan't open %s for writingcan't open output file `%s'can't read from temp filecan't redefine default return value for constructorscan't reopen %scan't rewind temp filecan't set `%s' attribute after definitioncan't specify `-D' without `--main' + can't use '%s' as a %s registercan't write to output filecandidate%s: %+#Dcannot %s a pointer to incomplete type `%T'cannot allocate an object of type `%T'cannot apply member pointer `%E' to `%E', which is of non-aggregate type `%T'cannot call destructor `%T::~%T' without objectcannot call member function `%D' without objectcannot convert `%E' from type `%T' to type `%T'cannot convert `%T' to `%T' for argument `%P' to `%D'cannot convert `%T' to `%T' in %scannot convert from base `%T' to derived type `%T' via virtual base `%T'cannot convert to a pointer typecannot convert type `%T' to type `%T'cannot create pointer to reference member `%D'cannot create temporary filecannot create type information for type `%T' because its size is variablecannot declare %s to referencescannot declare `%D' to be a bit-field typecannot declare `::main' to be a templatecannot declare `::main' to be inlinecannot declare `::main' to be staticcannot declare bit-field `%D' with function typecannot declare field `%D' to be of type `%T'cannot declare member `%T::%s' within `%T'cannot declare member function `%D' to have static linkagecannot declare member function `%T::%s' within `%T'cannot declare parameter `%D' to be of type `%T'cannot declare pointer to `%#T' membercannot declare pointers to referencescannot declare references to referencescannot declare static function inside another functioncannot declare variable `%D' to be of type `%T'cannot delete a function. Only pointer-to-objects are valid arguments to `delete'cannot disable built-in function `%s'cannot do z-register replacementcannot dynamic_cast `%E' (of type `%#T') to type `%#T' (%s)cannot explicitly declare member `%#D' to have extern linkagecannot find `%s'cannot find `ldd'cannot find `nm'cannot find class (factory) methodcannot find class `%s'cannot find file for class %scannot find interface declaration for `%s'cannot find interface declaration for `%s', superclass of `%s'cannot find methodcannot find protocol declaration for `%s'cannot find reference tag for class `%s'cannot find source %scannot initialize `%D' to namespace `%D'cannot initialize `%T' from `%T'cannot initialize arrays using this syntaxcannot initialize multi-dimensional array with initializercannot inline function `main'cannot optimize division for both latency and throughputcannot pass objects of non-POD type `%#T' through `...'cannot put object with volatile field into registercannot receive objects of non-POD type `%#T' through `...'cannot reload integer constant operand in `asm'cannot resolve overloaded function `%D' based on conversion to type `%T'cannot return from a handler of a function-try-block of a constructorcannot set interrupt attribute: no current functioncannot set interrupt attribute: no such identifiercannot specify -o with -c or -S and multiple compilationscannot specify `main' class when not linkingcannot specify both -C and -ocannot take address of bit-field `%s'cannot take the address of `this', which is an rvalue expressioncannot use `::' in parameter declarationcannot use typeid with -fno-rtticannot use va_start in interrupt functioncase label `%E' not within a switch statementcase label does not reduce to an integer constantcase label not within a switch statementcase value `%ld' not in enumerated typecase value `%ld' not in enumerated type `%s'cast adds new qualifiers to function typecast discards qualifiers from pointer target typecast does not match function typecast from `%T' to `%T' discards qualifiers from pointer target typecast from `%T' to `%T' increases required alignment of target typecast from pointer to integer of different sizecast increases required alignment of target typecast specifies array typecast specifies function typecast to non-reference type used as lvaluecast to pointer from integer of different sizecast to union type from type not present in unioncasting `%T' to `%T' does not dereference pointercccp error: invalid special hash typechanges meaning of `%D' from `%+#D'changing search order for system directory "%s"char-array initialized from wide stringcharacter constant too longchoose either big or little endian, not bothchoose either m340 or m210 not bothchoosing `%D' over `%D'circular dependency in default args of `%#D'circular inheritance in interface declaration for `%s'circular pointer delegation detectedclass '%s' has no method named '%s' matching signature '%s'class `%T' does not have any field named `%D'class `%T' is implicitly friends with itselfclass `%s' already existsclass `%s' does not implement the `%s' protocolclose %dclose %scode model %s not supported in PIC modecode model `%s' not supported in the %s bit modecode model `large' not supported yetcollect2 version %scollect: reading %s + collect: recompiling %s + collect: relinking + collect: tweaking %s in %s + comma at end of enumerator listcomma expression used to initialize return valuecomma operator in operand of #ifcomparing floating point with == or != is unsafecomparison between `%#T' and `%#T'comparison between pointer and integercomparison between signed and unsignedcomparison between signed and unsigned integer expressionscomparison between types `%#T' and `%#T'comparison is always %dcomparison is always %d due to width of bit-fieldcomparison is always false due to limited range of data typecomparison is always true due to limited range of data typecomparison of complete and incomplete pointerscomparison of distinct pointer types lacks a castcomparison of promoted ~unsigned with constantcomparison of promoted ~unsigned with unsignedcomparison of unsigned expression < 0 is always falsecomparison of unsigned expression >= 0 is always truecomparisons like X<=Y<=Z do not have their mathematical meaningcompilation of header file requestedcompilation terminated. + complex integer constant is too wide for 'complex int'complex invalid for `%s'concatenation of string literals with __FUNCTION__ is deprecated. This feature will be removed in futureconfiguration: REAL, INTEGER, and LOGICAL are %d bits wide,configuration: char * holds %d bits, but INTEGER only %d -- + ASSIGN statement might failconfiguration: char * holds %d bits, but ftnlen only %dconflicting access specifications for field `%s', ignoredconflicting access specifications for method `%D', ignoredconflicting architectures defined - using C seriesconflicting architectures defined - using K seriesconflicting declarations of `%s'conflicting return type specified for `%#D'conflicting super class name `%s'conflicting types for `%#D'conflicting types for `%s'conflicting types for built-in function `%s'conflicts with built-in declaration `%#D'conflicts with function declaration `%#D'conflicts with new declaration with %L linkageconflicts with previous declaration `%#D'const `%s' cannot be declared `mutable'const declaration for `%s' follows non-constconst objects cannot go in .sdata/.sbssconst_double_split got a bad insn:constructor cannot be static member functionconstructor for alien class `%T' cannot be a memberconstructor syntax used, but no constructor declared for type `%T'constructors cannot be declared virtualconstructors may not be `%s'continue statement not within a loopcontrol reaches end of non-void functionconversion from NaN to intconversion from NaN to unsigned intconversion from `%#T' to `%#T'conversion from `%T' to `%T' discards qualifiersconversion from `%T' to `%T' is ambiguousconversion from `%T' to non-scalar type `%T' requestedconversion lacks type at end of formatconversion of `%E' from `%T' to `%T' is ambiguousconversion to %s%s will never use a type conversion operatorconversion to incomplete typeconversion to non-scalar type requestedconverting NULL to non-pointer typeconverting from `%T' to `%T'converting overloaded function `%D' to type `%#T' is ambiguouscorrupted profile info: prob for %d-%d thought to be %dcould not convert 0x%l.8x into a regioncould not convert `%E' to `%T'could not convert template argument `%E' to `%T'could not find a spill registercould not find class$ field in java interface type `%T'could not find specs file %s + could not open dump file `%s'could not split insncouldn't determine target name for dependency trackingcreating %screating array of `%T'creating array with size zerocreating array with size zero (`%E')creating pointer to member function of non-class type `%T'creating pointer to member of non-class type `%T'creating pointer to member reference type `%T'crossjump disabled: %d > 1000 basic blocks and %d >= 20 edges/basic blockcurrent file is older than %sd30v_emit_comparisondata area of '%s' conflicts with previous declarationdata definition has no type or storage classdata initializer on host with different endiannessdata member `%D' cannot be a member templatedata type of `%s' isn't suitable for a registerdecimal constant is so large that it is unsigneddecimal point in exponent - impossible!declaration does not declare anythingdeclaration for parameter `%s' but no such parameterdeclaration of C function `%#D' conflicts withdeclaration of `%#D'declaration of `%#D' has `extern' and is initializeddeclaration of `%#D' outside of class is not definitiondeclaration of `%#D' shadows a parameterdeclaration of `%D' as %sdeclaration of `%D' as multidimensional array must have bounds for all dimensions except the firstdeclaration of `%D' as non-functiondeclaration of `%D' not in a namespace surrounding `%D'declaration of `%F' throws different exceptionsdeclaration of `%s' as array of functionsdeclaration of `%s' as array of voidsdeclaration of `%s' has `extern' and is initializeddeclaration of `%s' shadows %sdeclaration of `%s' shadows a member of `this'declaration of `%s' shadows a parameterdeclaration of `%s' shadows a symbol from the parameter listdeclaration of `extern' variable `%s' in `for' loop initial declarationdeclaration of non-variable `%s' in `for' loop initial declarationdeclaration of static variable `%s' in `for' loop initial declarationdeclaration of template `%#D'declarator-id missing; using reserved word `%D'decrement of pointer to unknown structuredefault argument `%E' uses local variable `%D'default argument for `%#D' has type `%T'default argument for parameter of type `%T' has type `%T'default argument given for parameter %d of `%#D'default argument missing for parameter %P of `%+#D'default argument specified in explicit specializationdefault arguments are not allowed in declaration of friend template specialization `%D'default-initialization of `%#D', which has reference typedefining explicit specialization `%D' in friend declarationdefinition of `%#T' inside template parameter listdefinition of array `%#D' in conditiondefinition of class `%T' in conditiondefinition of enum `%T' in conditiondefinition of implicitly-declared `%D'definition provided for explicit instantiationdeleting `%T' is undefineddeleting array `%#D'deprecated conversion from string constant to `%T'deprecated use of label at end of compound statementdereferencing `void *' pointerdereferencing pointer to incomplete typederived union `%T' invaliddestructor `%T' must match class name `%T'destructor cannot be static member functiondestructor for alien class `%T' cannot be a memberdestructor name `~%T' does not match type `%T' of expressiondestructor needed for `%#D'destructor specifier `%T::~%T' must have matching namesdestructor specifier `%T::~%T()' must have matching namesdestructors may not be `%s'destructors may not have parametersdestructors must be member functionsdestructors take no parametersdidn't use all bb entries of graph, function %s + different typedirect base `%T' inaccessible in `%T' due to ambiguitydirectives may not be used inside a macro argumentdirectory name missing after %sdirectory name missing after -I optiondirectory name must immediately follow -Idivision by zerodivision by zero in #ifdivision by zero in `%E %% 0'division by zero in `%E %% 0.'division by zero in `%E / 0'division by zero in `%E / 0.'double quoted strings not allowed in #if expressionsdue to non-public access of member `%D'due to the presence of a constructordup2 %d 1duplicate (or overlapping) case valueduplicate ConstantValue attribute for field '%s'duplicate `%s'duplicate `const'duplicate `restrict'duplicate `volatile'duplicate asm operand name '%s'duplicate base type `%T' invalidduplicate case valueduplicate declaration for protocol `%s'duplicate declaration of class method `%s'duplicate declaration of instance method `%s'duplicate definition of class method `%s'duplicate definition of instance method `%s'duplicate enum value `%D'duplicate explicit instantiation of `%#D'duplicate explicit instantiation of `%#T'duplicate field `%D' (as enum and non-enum)duplicate field `%D' (as type and non-type)duplicate initialization of %Dduplicate interface declaration for category `%s(%s)'duplicate interface declaration for class `%s'duplicate label `%D'duplicate label declaration `%s'duplicate macro parameter "%s"duplicate member `%D'duplicate member `%s'duplicate nested type `%D'duplicate type qualifiers in %s declarationdynamic dependencies. + dynamic dependency %s not founddynamic_cast of `%#D' to `%#T' can never succeedelements of array `%#D' have incomplete typeelements of array `%s' have incomplete typeembedded `\0' in formatemitting PIC operand, but PIC register isn't set upempty #if expressionempty body in an else-statementempty character constantempty declarationempty file name in #%sempty index range in initializerempty left precision in %s formatempty precision in %s formatempty range specifiedempty scalar initializerenabling backtrace support is only meaningful when compiling for the Thumbenabling callee interworking support is only meaningful when compiling for the Thumbenabling caller interworking support is only meaningful when compiling for the Thumbenclosing class templates are not explicitly specializedend insn %d for block %d not found in the insn streamenum defined inside parmsenumeral and non-enumeral type in conditional expressionenumeral mismatch in conditional expression: `%T' vs `%T'enumeration value `%s' not handled in switchenumeration values exceed range of largest integerenumerator value for `%D' not integer constantenumerator value for `%s' not integer constantenvironment variable DJGPP not definedenvironment variable DJGPP points to corrupt file '%s'environment variable DJGPP points to missing file '%s'error closing %serror in constant pool entry #%d + error while parsing constant poolerror while parsing fieldserror while parsing final attributeserror while parsing methodserror writing to %sescape sequence out of range for characterexception handling disabled, use -fexceptions to enableexception of type `%T' will be caughtexcess elements in aggregate initializerexcess elements in array initializerexcess elements in char array initializerexcess elements in scalar initializerexcess elements in struct initializerexcess elements in union initializerexcess elements in vector initializerexecv %sexecvp %sexpected %d levels of template parms for `%#D', got %dexplicit instantiation of `%#D'explicit instantiation of `%#D' afterexplicit instantiation of `%#T' afterexplicit instantiation of `%#T' before definition of templateexplicit instantiation of `%D' but no definition availableexplicit instantiation of non-template `%#D'explicit instantiation of non-template type `%T'explicit specialization hereexplicit specialization in non-namespace scope `%D'explicit specialization not preceded by `template <>'explicit specialization of %D after first useexplicit specialization of non-template `%T'expression '%E' of abstract class type '%T' cannot be used in throw-expressionexpression statement has incomplete typeextended registers have no high halvesextern declaration of `%#D' doesn't matchextern declaration of `%s' doesn't match global oneextra brace group at end of initializerextra elements in scalar initializerextra qualification `%T::' on member `%D' ignoredextra qualification `%T::' on member `%s' ignoredextra semicolon in struct or union specifiedextra text at end of directiveextra tokens at end of #%s directiveextra type qualifiers in format argument (arg %d)extraneous `%T' ignoredextraneous argument to `%s' optionf2c-compatible code need not be generatedfailed to find class '%s'fatal:fclosefclose %sfdopenfield '%s' not found in classfield `%#D' is static; the only point of initialization is its definitionfield `%#D' with same name as classfield `%D' declared static in unionfield `%D' has incomplete typefield `%D' in local class cannot be staticfield `%D' invalidly declared function typefield `%D' invalidly declared method typefield `%D' invalidly declared offset typefield `%s' declared as a functionfield `%s' has incomplete typefield `%s' not foundfield initializer is not constantfield initializer type mismatchfield name not in record or union initializerfield precisionfield widthfield width in printf formatfield width in scanf formatfield width in strfmon formatfield width in strftime formatfile %s not found, execution counts assumed to be zerofile name missing after %sfile not found `%s'filename missing after %s optionfilename missing after -i optionfilename missing after -o optionfill characterfill character in strfmon formatfinal field '%s' may not have been initializedfini function found in object %sfirst argument of `%s' should be `int'first argument to __builtin_choose_expr not a constantfirst argument to `va_arg' not of type `va_list'fix_sched_param: unknown param: %sflexible array member in otherwise empty structflexible array member in unionflexible array member not at end of structfloating constant exponent has no digitsfloating constant may not be in radix 16floating constant misusedfloating constant out of rangefloating point constant not a valid immediate operandfloating point number exceeds range of '%s'floating point number exceeds range of 'double'floating point numbers are not valid in #iffloating point numbers not allowed in #if expressionsfloating point overflowfloating point overflow in expressionflow control insn inside a basic blockfollows non-prototype definition herefopen %sfor each function it appears in.)for template declaration `%D'format argument %d unused before used argument %d in $-style formatformat argument %d used more than once in %s formatformat argument is not a pointer (arg %d)format argument is not a pointer to a pointer (arg %d)format is a wide character stringformat not a string literal and no format argumentsformat not a string literal, argument types not checkedformat not a string literal, format string not checkedformat string arg follows the args to be formattedformat string arg not a string typeformat string has invalid operand numberforming %s to reference type `%T'forming reference to voidforward declaration of `%#T'fp software completion requires -mtrap-precision=ifp_offset (%ld) or end_offset (%ld) is less than zerofr30_print_operand: invalid %%F codefr30_print_operand: invalid %%x codefr30_print_operand: invalid operand to %%A codefr30_print_operand: unhandled MEMfr30_print_operand: unknown codefr30_print_operand: unrecognized %%B codefr30_print_operand: unrecognized %%b codefr30_print_operand: unrecognized %%p codefr30_print_operand_address: unhandled addressframe size too large for reliable stack checkingfriend declaration `%#D' declares a non-template functionfriend declaration not in class definitionfriend declaration requires class-key, i.e. `friend %#T'friend declaration requires class-key, i.e. `friend class %T::%T'fstat %sfunction `%#D' is initialized like a variablefunction `%D' cannot be declared friendfunction `%D' declared overloaded, but no definitions appear with which to resolve it?!?function `%D' declared virtual inside a unionfunction `%s' cannot be declared `mutable'function `%s' is initialized like a variablefunction `%s' redeclared as inlinefunction `%s' redeclared with attribute noinlinefunction `%s' was previously declared within a blockfunction body for constructor missingfunction call has aggregate valuefunction cannot be inlinefunction declaration isn't a prototypefunction declared `noreturn' has a `return' statementfunction definition declared `auto'function definition declared `register'function definition declared `typedef'function does not return string typefunction might be possible candidate for `%s' format attributefunction might be possible candidate for attribute `noreturn'function return type cannot be functionfunction returns address of local variablefunction returns an aggregatefunction too large to be inlinefunction types not truly compatible in ISO Cfunction uses __builtin_eh_returnfunction using alloca cannot be inlinefunction using setjmp cannot be inlinefunction using short complex types cannot be inlinefunction with computed jump cannot inlinefunction with label addresses used in initializers cannot inlinefunction with nested functions cannot be inlinefunction with nonlocal goto cannot be inlinefunction with target specific attribute(s) cannot be inlinedfunction with transparent unit parameter cannot be inlinefunction with varying-size parameter cannot be inlinefunction with varying-size return value cannot be inlinefunction-like macro "%s" must be used with arguments in traditional Cfunction_profiler support for MMIXgcc driver version %s executing gcc version %s + gcc version %s + gcov (GCC) %s + generate RP codegeneric thunk code fails for method `%#D' which uses `...'global declaration `%#D'global register variable `%s' used in nested functionglobal register variable follows a function definitionglobal register variable has initial valuegot %d template parameters for `%#D'got %d template parameters for `%#T'gp is constant (but save/restore gp on indirect calls)gp_offset (%ld) or end_offset (%ld) is less than zerohalf-pic init called on systems that don't support ithead insn %d for block %d not found in the insn streamhex character constant does not fit in a bytehex escape out of rangehex escape sequence out of rangehexadecimal floating constant has no exponentiC2.0 and iC3.0 are incompatible - using iC3.0ia64_print_operand: unknown codeidentifier name `%s' conflicts with GNU C++ internal naming strategyignoring #pragma %signoring #pragma %s %signoring `%V' qualifiers on `%T'ignoring asm-specifier for non-static local variable `%s'ignoring command line option '%s'ignoring duplicate directory "%s" + ignoring extra initializers for `%T'ignoring invalid multibyte characterignoring nonexistent directory "%s" + ignoring option `%s' due to invalid debug level specificationignoring pragma: %signoring unknown option `%.*s' in `-f%s'illegal pointer to bit-field `%D'implementation-reserved name `%D' usedimplicit declaration of function `%#D'implicit declaration of function `%s'implicitly popped regs must be grouped at top of stackimpossible operator '%s'impossible register constraint in `asm'in basic block %d:in declaration `%D'in passing argument %P of `%+D'incompatibilities between object file & expected valuesincompatible interworking optionsincompatible type for argument %d of `%s'incompatible type for argument %d of indirect function callincompatible types in %sincompatible types in assignment of `%T' to `%T'incomplete `%s' optionincomplete implementation of category `%s'incomplete implementation of class `%s'incomplete type `%T' does not have member `%D'incomplete type unificationincomplete universal-character-nameinconsistent instance variable specificationinconsistent operand constraints in an `asm'incorrect insn:increment of pointer to unknown structureindex value instead of field name in union initializerinit function found in object %sinitializationinitialization designators may not nestinitialization of a flexible array memberinitialization of flexible array member in a nested contextinitializations for multiple members of `%T'initialized field with side-effects overwritteninitialized variable `%s' is marked dllimportinitializer element is not computable at load timeinitializer element is not constantinitializer ends prematurelyinitializer fails to determine size of `%D'initializer fails to determine size of `%s'initializer for floating value is not a floating constantinitializer for integer value is too complicatedinitializer for scalar variable requires one elementinitializer for static variable is not constantinitializer for static variable uses complicated arithmeticinitializer invalid for static member with constructorinitializer list being treated as compound expressioninitializer list construction invalid for `%D'initializer list construction invalid for derived class object `%D'initializer list construction invalid for polymorphic class object `%D'initializer list for object of class with base classesinitializer list for object of class with virtual base classesinitializer list for object using virtual functionsinitializer list treated as compound expressioninitializer specified for non-member function `%D'initializer specified for non-virtual method `%D'initializer-string for array of chars is too longinitializing array with parameter listinline float constants not supported on this hostinline function `%s' given attribute noinlineinline functions not supported for this return value typeinlining failed in call to `%s'input operand constraint contains `%c'insn %d inside basic block %d but block_for_insn is %iinsn %d inside basic block %d but block_for_insn is NULLinsn %d is in multiple basic blocks (%d and %d)insn does not satisfy its constraints:insn outside basic blockinstall: %s%s + instance variable `%s' accessed in class methodinstance variable `%s' is declared %sinstance variable `%s' is declared privateinstantiation of `%D' as type `%T'instruction scheduling not supported on this target machineinsufficient contextual information to determine typeint-array initialized from non-wide stringinteger constant contains digits beyond the radixinteger constant is larger than the maximum value for its typeinteger constant is so large that it is unsignedinteger constant is too large for this configuration of the compiler - truncated to %d bitsinteger constant is unsigned in ISO C, signed with -traditionalinteger constant larger than the maximum value of %sinteger constant out of rangeinteger overflow in expressioninteger overflow in preprocessor expressioninternal compiler error. Bad address:internal compiler error. Incorrect shift:internal compiler error. Unknown mode:internal errorinternal error - invalid Utf8 nameinternal error - too many interface typeinternal error - use of undefined typeinternal error in %s, at tradcpp.c:%d + Please submit a full bug report. + See %s for instructions.internal error in check-init: tree code not implemented: %sinternal error in generate_bytecode_insn - tree code not implemented: %sinternal error--no jump follows compare:internal error: internal error: %%) found without a %%( in assembler patterninternal error: %%> found without a %%< in assembler patterninternal error: %%] found without a %%[ in assembler patterninternal error: %%} found without a %%{ in assembler patterninternal error: %sinternal error: bad register: %dinternal error: cris_side_effect_mode_ok with bad operandsinternal error: sideeffect-insn affecting main effectinternal gcc abortinternal gcc error: Can't express symbolic locationinternal gcc monitor: short-branch(%x)internal regno botch: regno = %d + interrupt Service Routines cannot be coded in Thumb modeinterworking forces APCS-32 to be usedinvalid #-lineinvalid #identinvalid #ident directiveinvalid #lineinvalid #pragma %sinvalid #pragma GCC poison directiveinvalid %%-codeinvalid %%A operandinvalid %%B operandinvalid %%B valueinvalid %%C operandinvalid %%C valueinvalid %%D operandinvalid %%D valueinvalid %%E valueinvalid %%F valueinvalid %%G valueinvalid %%H valueinvalid %%J codeinvalid %%J valueinvalid %%K valueinvalid %%L valueinvalid %%M valueinvalid %%N valueinvalid %%O valueinvalid %%P operandinvalid %%P valueinvalid %%Q valueinvalid %%R valueinvalid %%S valueinvalid %%T valueinvalid %%U valueinvalid %%V valueinvalid %%Y operandinvalid %%Z valueinvalid %%b valueinvalid %%c operandinvalid %%d operandinvalid %%f operandinvalid %%f valueinvalid %%h valueinvalid %%j codeinvalid %%j valueinvalid %%k valueinvalid %%m valueinvalid %%o valueinvalid %%p valueinvalid %%q valueinvalid %%r valueinvalid %%s valueinvalid %%s/S valueinvalid %%u valueinvalid %%v valueinvalid %%x/X valueinvalid %%xn codeinvalid %%z valueinvalid --param option: %sinvalid PC in line number tableinvalid UNSPEC as operandinvalid UNSPEC as operand (1)invalid UNSPEC as operand (2)invalid Z register replacement for insninvalid `asm': invalid addressinvalid addressing modeinvalid arg to `__builtin_frame_address'invalid arg to `__builtin_return_address'invalid argument of `%s' attributeinvalid built-in macro "%s"invalid call to member function needing `this' in static member function scopeinvalid cast to function type `%T'invalid catch parameterinvalid character '%c' in #ifinvalid character '\%03o' in #ifinvalid character constant in #ifinvalid codeinvalid const_cast from type `%T' to type `%T'invalid const_cast of an rvalue of type `%T' to type `%T'invalid constructor; you probably meant `%T (const %T&)'invalid conversion from `%T' to `%T'invalid conversion to type `%T' from type `%T'invalid covariant return type for `%#D'invalid data member initializationinvalid declaration of member template `%#D' in local classinvalid declaratorinvalid default template argumentinvalid definition of qualified type `%T'invalid expression as operandinvalid flag "%s" in line directiveinvalid floating point emulation option: -mfpe-%sinvalid format #line commandinvalid hash type %d in cpp_macro_definitioninvalid in-class initialization of static data member of non-integral type `%T'invalid indirect (S) memory addressinvalid indirect memory addressinvalid initial value for member `%s'invalid initializerinvalid initializer for bit stringinvalid initializer for virtual method `%D'invalid insn:invalid integer constant in parameter list, did you forget to give parameter name?invalid lvalue in asm statementinvalid lvalue in assignmentinvalid lvalue in unary `&'invalid macro nameinvalid macro name `%s'invalid maskinvalid member template declaration `%D'invalid mode for gen_tst_reginvalid mode for integer comparison in gen_compare_reginvalid number in #if expressioninvalid offset in ybase addressinginvalid offsetof from non-POD type `%#T'; use pointer to member insteadinvalid operand code `%c'invalid operand for 'A' modifierinvalid operand for 'D' modifierinvalid operand for 'H' modifierinvalid operand for 'P' modifierinvalid operand for 'T' modifierinvalid operand for 'b' modifierinvalid operand for 'e' modifierinvalid operand for 'm' modifierinvalid operand for 'p' modifierinvalid operand for 'v' modifierinvalid operand for 'z' modifierinvalid operand in the instructioninvalid operand modifier letterinvalid operand output codeinvalid operand to %%H/%%L codeinvalid operand to %%N codeinvalid operand to %%R codeinvalid operand to %%T/%%B codeinvalid operand to %%U codeinvalid operand to %%V codeinvalid operand to %%p codeinvalid operand to %%s codeinvalid operands of types `%T' and `%T' to binary `%O'invalid operands to binary %sinvalid operation on uninstantiated typeinvalid option %sinvalid option `%s'invalid option `-mshort-data-%s'invalid option `-mstack-increment=%s'invalid option `entry%s'invalid parameter `%s'invalid parameter type `%T'invalid parameter value `%s'invalid preprocessing directive #%sinvalid punctuation `%c' in constraintinvalid qualifiers on non-member function typeinvalid receiver type `%s'invalid redeclaration of `%D'invalid register in the instructioninvalid register in the move instructioninvalid register in ybase addressinginvalid register name `%s' for register variableinvalid register name for `%s'invalid reinterpret_cast from type `%T' to type `%T'invalid reinterpret_cast of an rvalue expression of type `%T' to type `%T'invalid return type for function `%#D'invalid return type for member function `%#D'invalid rotate insninvalid second arg to __builtin_prefetch; using zeroinvalid shift operator in emit_1600_core_shiftinvalid specification! Bug in ccinvalid static_cast from type `%T' to type `%T'invalid storage class for function `%s'invalid string constant `%E'invalid string literal, ignoring final '\'invalid suffix '%.*s' on integer constantinvalid suffix on floating constantinvalid suffix on integer constantinvalid third arg to __builtin_prefetch; using zeroinvalid token in expressioninvalid truth-value expressioninvalid type `%T' declared `friend'invalid type `%T' for default argument to `%T'invalid type `void' for newinvalid type argumentinvalid type argument of `%s'invalid type modifier within array declaratorinvalid type modifier within pointer declaratorinvalid type qualifier for non-member function typeinvalid type: `void &'invalid types `%T[%T]' for array subscriptinvalid use of %%d, %%x, or %%Xinvalid use of `%D'invalid use of `%T'invalid use of `%s' on pointer to memberinvalid use of `--' on bool variable `%D'invalid use of `::'invalid use of `restrict'invalid use of `this' at top levelinvalid use of `this' in non-member functioninvalid use of `virtual' in template declaration of `%#D'invalid use of a pointer to an incomplete type in pointer arithmeticinvalid use of array with unspecified boundsinvalid use of const_cast with type `%T', which is a pointer or reference to a function typeinvalid use of const_cast with type `%T', which is not a pointer, reference, nor a pointer-to-data-member typeinvalid use of flexible array memberinvalid use of incomplete typedef `%s'invalid use of member (did you forget the `&' ?)invalid use of member `%D'invalid use of member `%D' in static member functioninvalid use of non-lvalue arrayinvalid use of non-static field `%D'invalid use of template `%#D' as expressioninvalid use of template type parameterinvalid use of template-id `%D' in declaration of primary templateinvalid use of type decl `%#D' as expressioninvalid use of undefined type `%#T'invalid use of undefined type `%s %s'invalid use of void expressioninvalid vector type for attribute `%s'invalid version number formatinvoke[non-static] on static methodinvokestatic on abstract methodinvokestatic on non static methodit must be a pointer-to-member of the form `&X::Y'it must be the address of a function with external linkageit must be the address of an object with external linkageits scope is only this definition or declaration, which is probably not what you wantjump to `%s' invalidly jumps into binding contourjump to case labeljump to label `%D'junk at end of #pragma %sjunk at end of #pragma GCC java_exceptionsjunk at end of #pragma extern_prefixjunk at end of #pragma ghs endsdajunk at end of #pragma ghs endtdajunk at end of #pragma ghs endzdajunk at end of #pragma ghs interruptjunk at end of #pragma ghs sectionjunk at end of #pragma ghs startsdajunk at end of #pragma ghs starttdajunk at end of #pragma ghs startzdajunk at end of #pragma mapjunk at end of #pragma redefine_extnamejunk at end of #pragma weakjunk at end of '#pragma %s'junk at end of '#pragma options'junk at end of '#pragma pack'junk at end of '#pragma unused'junk at end of signature stringkeyword `export' not implemented, and will be ignoredlabel %s referenced outside of any functionlabel `%D' defined but not usedlabel `%D' used but not definedlabel `%s' defined but not usedlabel `%s' referenced outside of any functionlabel `%s' used before containing binding contourlabel `%s' used but not definedlabel must be followed by statementlabel named wchar_tlanguage %s not recognizedlanguage string `"%s"' not recognizedlarge frame pointer change (%d) with -mtiny-stacklarge integer implicitly truncated to unsigned typeld returned %d exit statusleft precisionleft precision in strfmon formatleft shift count >= width of typeleft shift count is negativeleft-hand operand of comma expression has no effectlength modifierlength modifier in printf formatlength modifier in scanf formatlength modifier in strfmon formatlibraries: %s + library function `%#D' redeclared as non-function `%#D'library function `%s' declared as non-functionlibrary lib%s not foundline number out of rangelo_sum not of registerload command map, %d cmds, new size %ld. + local class `%#T' shall not have static data member `%#D'local declaration of `%s' hides instance variablelong and short specified together for `%s'long long constant not a valid immediate operandlong or short specified with char for `%s'long or short specified with floating type for `%s'long, short, signed or unsigned invalid for `%s'long, short, signed or unsigned used invalidly for `%s'lookup of `%D' finds `%#D'lookup of `%D' in the scope of `%#T' (`%#D') does not match lookup in the current scope (`%#D')looser throw specifier for `%#F'lseek %s 0macro "%s" passed %u arguments, but takes just %umacro "%s" requires %u arguments, but only %u givenmacro argument "%s" would be stringified with -traditionalmacro name missing after %smacro name missing after -%c optionmacro names must be identifiersmacro or #include recursion too deepmacro parameters must be comma-separatedmaking `%D' staticmalformed #pragma align - ignoredmalformed #pragma extern_prefix, ignoredmalformed #pragma ghs sectionmalformed #pragma map, ignoredmalformed #pragma redefine_extname, ignoredmalformed #pragma weak, ignoredmalformed '#pragma %s' - ignoredmalformed '#pragma options align={mac68k|power|reset}', ignoringmalformed '#pragma options', ignoringmalformed '#pragma pack' - ignoredmalformed '#pragma pack(pop[, id])' - ignoredmalformed '#pragma pack(push[, id], )' - ignoredmalformed .zip archive in CLASSPATH: %smask must be an immediatematching constraint not valid in output operandmatching constraint references invalid operand numbermay not use both -EB and -ELmay not use both -mfp64 and -m4650may not use both -mfp64 and -msingle-floatmay not use both -mgp32 and -mfp64member %#D' with constructor not allowed in anonymous aggregatemember %#D' with copy assignment operator not allowed in anonymous aggregatemember %#D' with destructor not allowed in anonymous aggregatemember `%#D' with constructor not allowed in unionmember `%#D' with copy assignment operator not allowed in unionmember `%#D' with destructor not allowed in unionmember `%D' cannot be declared both virtual and staticmember `%D' conflicts with virtual function table field namemember `%D' declared as friend before type `%T' definedmember `%D' is non-static but referenced as a static membermember `%D' is uninitialized referencemember `%D' with uninitialized const fieldsmember functions are implicitly friends of their classmember initializers for `%#D'member type `%T::' incompatible with object type `%T'membersmethod '%s' not found in classmethod `%s' not implemented by protocolmethod definition for `%c%s' not foundmethod definition not in class contextmips16 function profilingmismatched braces in specsmismatching signature for field '%s' in '%s'misplaced ConstantValue attribute (not in any field)missing $ operand number in formatmissing '(' after '#pragma %s' - ignoredmissing '(' after '#pragma pack' - ignoredmissing '(' after '#pragma unused', ignoringmissing '(' after predicatemissing '(' in expressionmissing ')' after "defined"missing ')' after '#pragma unused', ignoringmissing ')' for '#pragma %s' - ignoredmissing ')' in expressionmissing ')' in macro parameter listmissing ')' to complete answermissing ';' before right bracemissing Code attributemissing argument in `__builtin_args_info'missing argument to `%s' optionmissing barrier after block %imissing binary operatormissing binary operator before '%s'missing braces around initializermissing close brace for named operandmissing field '%s' in '%s'missing fill character at end of strfmon formatmissing function name in '#pragma %s' - ignoredmissing initializermissing initializer for member `%D'missing section name in '#pragma %s' - ignoredmissing static field `%s'missing terminating %c charactermissing terminating > charactermissing type-name in typedef-declarationmissing white space after number '%.*s'mixing C++ and Java catches in a single translation unitmno-cygwin and mno-win32 are not compatiblemode not QImodemodification by `asm'more than %d operands in `asm'more than one 'f' suffix on floating constantmore than one 'i' or 'j' suffix on floating constantmore than one 'i' or 'j' suffix on integer constantmore than one 'l' suffix on floating constantmove insn not handledmsync %smulti-character character constantmulti-line commentmulti-line string literals are deprecatedmultidimensional array must have bounds for all dimensions except the firstmultiple `virtual' specifiersmultiple access specifiersmultiple declarations `%T' and `%T'multiple declarations for method `%s'multiple declarators in template declarationmultiple default labels in one switchmultiple definition of `%#T'multiple fields in union `%T' initializedmultiple initializations given for `%D'multiple initializations given for member `%D'multiple parameters named `%s'multiple storage classes in declaration of `%s'multiple types in one declarationmunmap %smust #include before using typeidmust have at least one catch per try blockmust use .* or ->* to call pointer-to-member function in `%E (...)'mvc&exmvcle usemysterious repository information in %sname `%T' has incomplete typename lookup of `%s' changedname lookup of `%s' changed for new ISO `for' scopingname missing for member functionnamed membersnamespace `%D' not allowed in using-declarationnamespace `%T' undeclarednamespace alias `%D' not allowed here, assuming `%D'namespace-scope anonymous aggregates must be staticnegative insn lengthnegative integer implicitly converted to unsigned typenegative width in bit-field `%D'negative width in bit-field `%s'neither varargs or stdarg in mmix_setup_incoming_varargsnested assembly dialect alternativesnested extern declaration of `%s'nested function `%s' declared `extern'nested redefinition of `%s'new cannot be applied to a function typenew cannot be applied to a reference typenew declaration `%#D'new of array type fails to specify sizeno FUNCTION_PROFILER for CRISno INTEGER type can hold a pointer on this configurationno `%#D' member function declared in class `%T'no `%D(int)' declared for postfix `%s', trying prefix operator insteadno args to macro `%s'no argumentsno base or member initializers given following ':'no bases given following `:'no body nor ';' separates two class, struct or union declarationsno class name specified as argument to -fconstant-string-classno class template named `%#T' in `%#T'no closing `]' for `%%[' formatno cmd_strings foundno data type for mode `%s'no default argument for `%D'no description yetno field `%D' in union being initializedno include path in which to find %.*sno include path in which to find %sno input file specifiedno input filesno input files; unwilling to write output filesno low registers available for popping high registersno macro name given in #%s directiveno match for call to `(%T) (%A)'no matches converting function `%D' to type `%#T'no matching function for call to `%D(%A)'no matching function for call to `%T::%D(%A)%#V'no matching template for `%D' foundno member function `%D' declared in `%T'no members matching `%D' in `%#T'no method `%T::%D'no newline at end of fileno previous declaration for `%s'no previous prototype for `%s'no prototype, and parameter address used; cannot be inlineno register in addressno return statement in function returning non-voidno sclass for %s stab (0x%x) + no semicolon at end of struct or unionno suitable `operator delete' for `%T'no super class declared in interface for `%s'no symbol table foundno type `%D' in `%T'no type named `%#T' in `%#T'no unique final overrider for `%D' in `%T'no vector mode with the size and type specified could be foundno viable candidatesnon-ANSI-standard escape sequence, `\%c'non-ISO escape sequence `\%c'non-ISO-standard escape sequence, '\%c'non-constant `%E' cannot be used as template argumentnon-empty initializer for array of empty elementsnon-hex digit '%c' in universal-character-namenon-local function `%#D' uses anonymous typenon-local function `%#D' uses local type `%T'non-local variable `%#D' uses local type `%T'non-lvalue in %snon-member `%s' cannot be declared `mutable'non-object member `%s' cannot be declared `mutable'non-prototype definition herenon-static const member `%#D' in class without a constructornon-static const member `%#D', can't use default assignment operatornon-static declaration for `%s' follows staticnon-static initialization of a flexible array membernon-static method '%s' overrides static methodnon-static reference `%#D' in class without a constructornon-static reference member `%#D', can't use default assignment operatornon-template type `%T' used as a templatenon-template used as templatenon-trivial labeled initializersnonconstant array index in initializernot a static field `%s'not a valid Java .class filenot enough type informationnot found + not in any file?!note:null character(s) ignorednull character(s) preserved in literalnull format stringnumber missing after %snumber of arguments doesn't match prototypenumber of bb notes in insn chain (%d) != n_basic_blocks (%d)numeric constant contains digits beyond the radixnumeric constant with no digitsobject `%E' cannot be used as template argumentobject `%E' of incomplete type `%T' will not be accessed in %sobject does not conform to the `%s' protocolobject missing in `%E'object missing in call to method `%D'object missing in use of pointer-to-member constructobject of incomplete type `%T' will not be accessed in %sobject of type `%T' will not be accessed in %sobsolete use of designated initializer with `:'obsolete use of designated initializer without `='octal character constant does not fit in a byteoctal escape sequence out of rangeoffset outside bounds of constant stringold raw header fileold style placement syntax, use () insteadonly %d args to macro `%s'only 1 arg to macro `%s'only constructors take base initializersonly declarations of constructors can be `explicit'only initialized variables can be placed into program memory areaonly one of `--print-main', `--list-class', and `--complexity' allowedonly weak aliases are supported in this configurationoops, not debugged; fixing up value:open %soperand 1 must be a hard registeroperand constraint contains incorrectly positioned '+' or '='operand constraints for `asm' differ in number of alternativesoperand is const_doubleoperand is neither a constant nor a condition code, invalid operand code 'c'operand is r0operand number missing after %%-letteroperand number out of rangeoperand number out of range in formatoperand number specified for format taking no argumentoperand number specified with suppressed assignmentoperands to ?: have different typesoperation on `%s' may be undefinedoperator "defined" requires an identifieroperator '%s' has no left operandoperator '%s' has no right operandoperator `%T' declared to return `%T'optimization level restoredoptimization turned offoptimization turned onoptions -mabi=mmixware and -mabi=gnu are mutually exclusiveoptions enabled: options passed: ordered comparison of pointer with integer zerooutput constraint %d cannot be specified together with "%s" clobberoutput constraint %d must specify a single registeroutput constraint `%c' for operand %d is not at the beginningoutput filename specified twiceoutput number %d not directly addressableoutput operand %d must use `&' constraintoutput operand constraint lacks `='output operand is constant in `asm'output regs must be grouped at top of stackoutput_move_single:overflow in array dimensionoverflow in constant expressionoverflow in enumeration valuesoverflow in enumeration values at `%D'overflow in implicit constant conversionoverflow on truncation to integeroverflow on truncation to unsigned integeroverflowed output arg list for `%s'overloaded function with no contextual type informationpacked attribute causes inefficient alignmentpacked attribute causes inefficient alignment for `%s'packed attribute is unnecessarypacked attribute is unnecessary for `%s'padding struct size to alignment boundarypadding struct to align `%s'parameter `%D' declared voidparameter `%D' includes %s to array of unknown bound `%T'parameter `%D' invalidly declared method typeparameter `%D' invalidly declared offset typeparameter `%s' declared voidparameter `%s' has incomplete typeparameter `%s' has just a forward declarationparameter `%s' is initializedparameter `%s' points to incomplete typeparameter has incomplete typeparameter name missingparameter name missing from parameter listparameter name omittedparameter name starts with a digit in #defineparameter names (without types) in function declarationparameter points to incomplete typeparameter type of called function is incompleteparm types given both in parmlist and separatelyparse errorparse error at end of saved function textparse error in method specificationparse error; also virtual memory exceededparse error; also virtual memory exhaustedparser may be lost: is there a '{' missing somewhere?parser stack overflowpartial specialization `%D' of function templatepartial specialization `%T' declared `friend'partial specialization `%T' does not specialize any template argumentspassing NULL used for non-pointer %s %P of `%D'passing `%T' as `this' argument of `%#D' discards qualifierspassing `%T' chooses `%T' over `%T'passing `%T' for %s %P of `%D'passing arg %d of `%s'passing arg %d of pointer to functionpassing floating point arguments in fp regs not yet supportedpassing negative value `%E' for %s %P of `%D'pasting "%s" and "%s" does not give a valid preprocessing tokenpath name missing after %spipeplace data items into their own sectionplace each function into its own sectionpointerpointer of type `void *' used in arithmeticpointer of type `void *' used in subtractionpointer targets in %s differ in signednesspointer to a function used in arithmeticpointer to a function used in subtractionpointer to a member used in arithmeticpointer to member cast from `%T' to `%T' is via virtual basepointer to member cast via virtual base `%T' of `%T'pointer to member conversion via virtual base `%T' of `%T'pointer to member function called, but not in class scopepointer to member function used in arithmeticpointer type mismatch in conditional expressionpointer value used where a complex was expectedpointer value used where a floating point value was expectedpointer-to-member function %E cannot be called without an object; consider using .* or ->*pointer/integer type mismatch in conditional expressionpointers are not permitted as case valuespoisoning existing macro "%s"possible start of unterminated string literalpossibly missing ')'post-increment address is not a registerpostfix `%D' must take `int' as its argumentpostfix `%D' must take `int' as its second argumentpostfix `%D' should return `%T'potential selector conflict for method `%s'pre-decrement address is not a registerpre-increment address is not a registerprecisionprecision in printf formatpredicate must be an identifierpredicate's answer is emptyprefix `%D' should return `%T'previous declaration `%#D' hereprevious declaration `%D'previous declaration as `%#D'previous declaration of `%#D'previous declaration of `%#D' with %L linkageprevious declaration of `%D'previous declaration of `%s'previous declaration of function `%s' was inlineprevious declaration of function `%s' with attribute noinlineprevious definition hereprevious definition of `%#T'previous external decl of `%#D'previous external decl of `%s'previous friend declaration of `%D'previous implicit declaration of `%s'previous non-function declaration `%#D'previous non-inline declaration herepreviously used hereprior parameter's size depends on `%s'private member `%#D' in anonymous unionprofiling does not work without a frame pointerprofiling not implemented yetprofiling not supported with -mg + programs: %s + promoted argument `%s' doesn't match prototypeproperly unless they all are 32 bits wideprotected member `%#D' in anonymous unionprotocol `%s' has circular dependencyprototype for `%#D'prototype for `%#D' does not match any in class `%T'prototype for `%s' followsprototype for `%s' follows and argument %d doesn't matchprototype for `%s' follows and number of arguments doesn't matchprovided for `%D'qualified type `%T' does not match destructor name `~%T'qualifiers are not allowed on declaration of `operator %T'raw header buffer too smallread %ld bytes, expected %ld, from %sread %sreading class %s for the second time from %sreading through null pointer (arg %d)real name is too long - alias ignoredreal-valued template parameters when cross-compilingrecursive type `%T' undefinedredeclaration of C++ built-in type `%T'redeclaration of `%s'redeclaration of `enum %s'redeclaration of `wchar_t' as `%T'redeclared here as `%#D'redefinition of `%#T'redefinition of `%s'redefinition of `struct %s'redefinition of `union %s'redefinition of default argument for `%#D'redirecting stdout: %sredundant redeclaration of `%D' in same scoperedundant redeclaration of `%s' in same scopereference `%s' is ambiguous: appears in interface `%s' and interface `%s'reference to local variable `%D' returnedreference to non-lvalue returnedregister name given for non-register variable `%s'register name not specified for `%s'register specified for `%s' isn't suitable for data typeregister used for two global register variablesregister variable `%s' used in nested functionregistering "%s" as both a pragma and a pragma namespaceregisters IX, IY and Z used in the same INSNreimplementation of class `%s'reinterpret_cast from `%T' to `%T' casts away const (or volatile)reinterpret_cast from `%T' to `%T' loses precisionrename spec %s to %s + repeated %s in formatrequest for member `%D' in `%E', which is of non-aggregate type `%T'request for member `%D' is ambiguous in multiple inheritance latticerequest for member `%T::%D' in expression of non-aggregate type `%T'request for member `%s' in something not a structure or unionrequested alignment for %s is greater than implemented alignment of %drequested alignment is not a constantrequested alignment is not a power of 2requested alignment is too largerequested init_priority is not an integer constantrequested init_priority is out of rangerequested init_priority is reserved for internal useresult of `operator->()' yields non-pointer resultret instruction not implementedreturnreturn identifier `%D' already in placereturn not followed by barrierreturn type `%#T' is incompletereturn type defaults to `int'return type defaults to idreturn type for `%s' defaults to idreturn type for `main' changed to `int'return type is an incomplete typereturn type of `%s' is not `int'return type specification for constructor invalidreturn type specification for destructor invalidreturn type specified for `operator %T'return value type specifier for constructor ignoredreturn-statement with a value, in function declared with a void return typereturn-statement with no value, in function declared with a non-void return typereturned value in block_exit_exprreturning a value from a constructorreturning a value from a destructorreturning reference to temporaryright precisionright precision in strfmon formatright shift count >= width of typeright shift count is negativerounding mode not supported for VAX floatssecond arg to `__builtin_expect' must be a constantsecond arg to `__builtin_prefetch' must be a constantsecond argument of `%s' should be `char **'second parameter of `va_start' not last named argumentsection attribute cannot be specified for local variablessection attribute not allowed for `%s'section attributes are not supported for this targetsection of `%s' conflicts with previous declarationsection pointer missingselector must be an immediatesemicolon missing after %s declarationsemicolon missing after declaration of `%#T'semicolon missing after declaration of `%T'shadowing %s function `%#D'shadowing built-in function `%s'shadowing library function `%s'shadowing previous type declaration of `%#D'shared and mdll are not compatibleshift count >= width of typeshift count is negativeshort, signed or unsigned invalid for `%s'signed and unsigned given together for `%s'signed and unsigned type in conditional expressionsigof type specifiersize in array new must have integral typesize of `%s' is %d bytessize of `%s' is larger than %d bytessize of array `%D' has non-integer typesize of array `%D' is negativesize of array `%D' is not an integral constant-expressionsize of array `%s' has non-integer typesize of array `%s' is negativesize of array `%s' is too largesize of array has non-integer typesize of array is negativesize of array is not an integral constant-expressionsize of member `%D' is not constantsize of return value of `%s' is %u bytessize of return value of `%s' is larger than %d bytessize of variable `%s' is too largesizeof applied to a bit-fieldsizeof applied to a function typesizeof applied to a void typesizeof applied to an incomplete typesizeof(long double) is 12sizeof(long double) is 16sorry, not implemented: sorry, not implemented: #pragma align NAME=SIZEsorry, not implemented: #pragma noalign NAMEsorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)source file for class `%s' is newer than its matching class file. Source file `%s' used insteadsource file seen twice on command line and will be compiled only oncespec failure: '%%*' has not been initialized by pattern matchspec failure: unrecognized spec option '%c'spec file has no spec for linkingspec is '%s' + + specialization of %D after instantiationspecialization of `%T' after instantiationspecialization of implicitly-declared special member functionspecializing `%#T' in different namespacespecs %%include syntax malformed after %ld charactersspecs %%rename syntax malformed after %ld charactersspecs %s spec was not found to be renamedspecs file malformed after %ld charactersspecs unknown %% command after %ld charactersspurious trailing `%%' in formatstack frame not a multiple of 8 bytes: %dstack frame not a multiple of octabyte: %dstack frame too bigstack limit expression is not supportedstack limits not supported on this targetstack size > 32kstack underflow - dup* operationstackframe too big: %d bytesstatic `%s' cannot be declared `mutable'static access to object of type `id'static declaration for `%s' follows non-staticstatic member `%D' cannot be a bit-fieldstatic member `%D' declared `register'static member function `%#D' declared with type qualifiersstatic or type qualifiers in abstract declaratorstatic or type qualifiers in non-parameter array declaratorstatic variable `%s' is marked dllimportstatic_cast from type `%T' to type `%T' casts away constnessstorage class `%D' applied to template instantiationstorage class `auto' invalid for function `%s'storage class `inline' invalid for function `%s' declared out of global scopestorage class `register' invalid for function `%s'storage class `static' invalid for function `%s' declared out of global scopestorage class specified for %s `%s'storage class specified for parameter `%s'storage class specified for structure field `%s'storage class specified for typenamestorage class specifier `%s' not allowed after struct or classstorage class specifier in array declaratorstorage class specifiers invalid in friend function declarationsstorage class specifiers invalid in parameter declarationsstorage size of `%D' isn't constantstorage size of `%D' isn't knownstorage size of `%s' isn't constantstorage size of `%s' isn't knownstray '%c' in programstray '\%o' in programstrftime formats cannot format argumentsstring constants are not valid in #ifstring length `%d' is greater than the length `%d' ISO C%d compilers are required to supportstring literal %E is not a valid template argument because it is the address of an object with static linkagestring section missingstructstruct type value used where scalar is requiredstructurestructure `%D' with uninitialized const membersstructure `%D' with uninitialized reference membersstructure size boundary can only be set to 8 or 32style of line directive is a GCC extensionsubobject of type `%T' must be initialized by constructor, not by `%E'subscript has type `char'subscript missing in array referencesubscripted value is neither array nor pointersubscripting array declared `register'suggest hiding #%s from traditional C with an indented #suggest not using #elif in traditional Csuggest parentheses around && within ||suggest parentheses around + or - in operand of &suggest parentheses around + or - inside shiftsuggest parentheses around arithmetic in operand of ^suggest parentheses around arithmetic in operand of |suggest parentheses around assignment used as truth valuesuggest parentheses around comparison in operand of &suggest parentheses around comparison in operand of ^suggest parentheses around comparison in operand of |switch -mcpu=%s conflicts with -march= switchswitch quantity not an integerswitch statement of size %lu entries too largesyntax errorsyntax error ':' without preceding '?'syntax error '?' without following ':'syntax error at '%s' tokensyntax error: cannot back uptaking address of bound pointer-to-member expressiontaking address of destructortaking address of temporarytarget CPU does not support APCS-26target CPU does not support APCS-32target CPU does not support THUMB instructionstarget CPU does not support interworkingtarget missing after %starget missing after %s optiontemplate `%#D' defined in file without #pragma interfacetemplate `%#D' instantiated in file without #pragma interfacetemplate argument %d is invalidtemplate argument `%E' involves template parameter(s)template class without a nametemplate declaration of `%#D'template definition of non-template `%#D'template instantiation depth exceeds maximum of %d (use -ftemplate-depth-NN to increase the maximum) instantiating `%D'template parameter `%#D'template parameter list used in explicit instantiationtemplate parameter type `%T' declared `friend'template parameters cannot be friendstemplate parameters not used in partial specialization:template specialization with C linkagetemplate type parameters must use the keyword `class' or `typename'template with C linkagetemplate-argument `%T' uses anonymous typetemplate-argument `%T' uses local type `%T'template-id `%D' for `%+D' does not match any template declarationtemplate-id `%D' in declaration of primary templatetemplate-id `%D' used as a declaratorthan previous declaration `%F'that particular -g option is invalid with -maout and -melinuxthe -mlong-double-64 option does not work yetthe ` ' printf flagthe `!' strfmon flagthe `#' printf flagthe `#' strftime flagthe `'' printf flagthe `'' scanf flagthe `(' strfmon flagthe `+' printf flagthe `+' strfmon flagthe `-' printf flagthe `-' strfmon flagthe `-' strftime flagthe `0' printf flagthe `0' strftime flagthe `E' strftime modifierthe `I' printf flagthe `I' scanf flagthe `O' modifierthe `O' strftime modifierthe `^' strfmon flagthe `^' strftime flagthe `_' strftime flagthe `a' scanf flagthe `java.lang.Object' that was found in `%s' didn't have the special zero-length `gnu.gcj.gcj-compiled' attribute. This generally means that your classpath is incorrectly set. Use `info gcj "Input Options"' to see the info page describing how to set the classpaththe address of `%D', will always be `true'the assignment suppression scanf featurethe conditional began herethe m210 does not have little endian supportthe meaning of '\%c' varies with -traditionalthe meaning of '\a' varies with -traditionalthe meaning of '\x' varies with -traditionalthe meaning of `\a' varies with -traditionalthe meaning of `\x' varies with -traditionalthe only valid combination is `long double'third arg to `__builtin_prefetch' must be a constantthird argument of `%s' should probably be `char **'this function may return with or without a valuethis is a previous declarationthis is the first default labelthis is the first entry overlapping that valuethis is the insn:this is the location of the previous definitionthis target does not support the -mabi switchthis target machine does not have delayed branchesthis use of "defined" may not be portablethree 'l' suffixes on integer constantthrowing NULL, which has integral, not pointer typetime in %s: %ld.%06ld (%ld%%) + to refer to a type member of a template parameter, use `typename %E'too few arguments for formattoo few arguments to %s `%+#D'too few arguments to functiontoo few arguments to function `%s'too few template parameter lists in declaration of `%D'too large function value type, needs %d registers, have only %d registers for thistoo many #pragma options align=resettoo many 'l' suffixes in integer constanttoo many (%d) args to macro `%s'too many alternatives in `asm'too many arguments for formattoo many arguments to %s `%+#D'too many arguments to functiontoo many arguments to function `%s'too many arguments to function `va_start'too many decimal points in floating constanttoo many filenames. Type %s --help for usage infotoo many initialization functions requiredtoo many input filestoo many template parameter lists in declaration of `%D'too many template parameter lists in declaration of `%T'top-level declaration of `%s' specifies `auto'traditional C ignores #%s with the # indentedtraditional C rejects automatic aggregate initializationtraditional C rejects initialization of unionstraditional C rejects string concatenationtraditional C rejects the 'f' suffixtraditional C rejects the 'l' suffixtraditional C rejects the 'u' suffixtraditional C rejects the `U' suffixtraditional C rejects the unary plus operatortrampolines not supportedtrampolines not yet implementedtrap mode not supported for VAX floatstrap mode not supported on Unicos/Mktree check: expected %s, have %s in %s, at %s:%dtree check: expected class '%c', have '%c' (%s) in %s, at %s:%dtrigraph ??%c converted to %ctrigraph ??%c ignoredtry reducing the number of local variablestrying to finish struct, but kicked out due to previous parse errorstrying to make class `%T' a friend of global scopetwo 'u' suffixes on integer constanttwo or more data types in declaration of `%s'two types specified in one empty declarationtype `%#T' argument given to `delete', expected pointertype `%D' is not a direct base of `%T'type `%D' is not a direct or virtual base of `%T'type `%T' composed from a local class is not a valid template-argumenttype `%T' has no destructortype `%T' is disallowed in Java `throw' or `catch'type `%T' is not a base type for type `%T'type `%T' is not derived from `java::lang::Throwable'type `%T' is not derived from type `%T'type `%T' is of non-aggregate typetype `%T' of template argument `%E' depends on template parameter(s)type defaults to `int' in declaration of `%s'type is deprecatedtype is deprecated (declared at %s:%d)type mismatch in conditional expressiontype mismatch with previous external decltype mismatch with previous implicit declarationtype name expected before `&'type name expected before `*'type of `%E' does not match destructor type `%T' (type was `%T')type of `%s' defaults to `int'type of asm operand `%E' could not be determinedtype of external `%s' is not globaltype of formal parameter %d is incompletetype qualifier `%s' not allowed after struct or classtype qualifiers for `%s' conflict with previous decltype qualifiers ignored on function return typetype qualifiers specified for friend class declarationtype size can't be explicitly evaluatedtype specifier `%s' not allowed after struct or classtype specifier omitted for parametertype specifier omitted for parameter `%E'type to vector delete is neither pointer or array typetype/value mismatch at argument %d in template parameter list for `%D'typedef `%D' is initializedtypedef `%s' is initializedtypedef declaration includes an initializertypedef declaration invalid in parameter declarationtypedef name may not be class-qualifiedtypename type `%#T' declared `friend'types are not quite compatibleunable to call pointer to member function hereunable to compute real location of stacked parameterunable to find a register to spill in class `%s'unable to generate reloads for:unable to mmap file '%s'unable to open dynamic dependency '%s'unable to open file '%s'unable to stat file '%s'unable to use '%s' for PIC registerunary `&'unbalanced #endifunbalanced stack in #ifundefined named operand '%s'undefined or invalid # directiveundefined type `id', please import undefining "%s"undefining `%s'undefining `defined'underscore in numberunexpected NOTE as addr_const:unexpected PIC symbolunexpected address expressionunexpected base-type in cris_print_baseunexpected function type needing stack adjustment for __builtin_eh_returnunexpected index-type in cris_print_indexunexpected letter `%c' in locate_error + unexpected multiplicative operandunexpected operandunexpected side-effects in addressunexpected type for `id' (%s)uninitialized const `%D'uninitialized const in `new' of `%#T'uninitialized const member `%D'uninitialized reference member `%D'unionunion `%T' with no named members cannot be initializedunion cannot be made transparentunion type value used where scalar is requireduniversal-character-name '\U%08x' not valid in identifieruniversal-character-name '\u%04x' not valid in identifieruniversal-character-name on EBCDIC targetuniversal-character-name out of rangeunknown -march= option (%s). + Valid options are 1.0, 1.1, and 2.0 + unknown -mdebug-%s switchunknown -mschedule= option (%s). + Valid options are 700, 7100, 7100LC, 7200, and 8000 + unknown ABI specified: '%s'unknown C standard `%s'unknown CPU version %d, using 40. + unknown CRIS cpu version specification in -mtune= : %sunknown CRIS version specification in -march= or -mcpu= : %sunknown action '%s' for '#pragma pack' - ignoredunknown array size in deleteunknown conversion type character 0x%x in formatunknown conversion type character `%c' in formatunknown encoding: `%s' + This might mean that your locale's encoding is not supported + by your system's iconv(3) implementation. If you aren't trying + to use a particular encoding for your input file, try the + `--encoding=UTF-8' optionunknown escape sequence '\%c'unknown escape sequence `\%c'unknown escape sequence: '\%03o'unknown escape sequence: `\' followed by char code 0x%xunknown field `%s' specified in initializerunknown insn modeunknown machine mode `%s'unknown move insn:unknown namespace `%D'unknown opcode %d@pc=%d during verificationunknown register name `%s' in `asm'unknown register name: %sunknown set constructor typeunknown string token %s + unknown {de,en}code_mach_o_hdr return value %dunnamed fields of type other than struct or union are not allowedunnamed initializer for `%T', which has no base classesunnamed initializer for `%T', which uses multiple inheritanceunnamed struct/union that defines no instancesunnamed variable or field declared voidunordered comparison on non-floating point argumentunreachable bytecode from %d to before %dunreachable bytecode from %d to the end of the methodunrecogized wide sub-instructionunrecognizable insn:unrecognized addressunrecognized format specifierunrecognized gcc debugging option: %cunrecognized option `%s'unrecognized option `-%s'unrecognized register name `%s'unrecognized section name "%s"unrecognized supposed constantunrecognized supposed constant in cris_global_pic_symbolunregistered operator %sunspellable token %sunsupported arg to `__builtin_frame_address'unsupported arg to `__builtin_return_address'unsupported operand size for extended registerunsupported versionunsupported wide integer operationunterminated #%sunterminated #%s conditionalunterminated argument list invoking macro "%s"unterminated assembly dialect alternativeunterminated commentunterminated format stringunterminated parameter list in #defineunterminated string or character constantunused arguments in $-style formatunused parameter `%s'unused variable `%s'usage: %s [switches] input outputuse -gdwarf -g%d for DWARF v1, level %duse -gdwarf-2 for DWARF v2use `#line ...' instead of `# ...' in first lineuse of %s and %s together in %s formatuse of %s and %s together with `%%%c' %s formatuse of %s from containing functionuse of `%D' is ambiguoususe of `%s' in templateuse of `%s' in template type unificationuse of `%s' length modifier with `%c' type characteruse of class template `%T' as expressionuse of enum `%#D' without previous declarationuse of linkage spec `%D' is different from previous spec `%D'use of namespace `%D' as expressionuse of old-style castuse of template qualifier outside templateused %d template parameter%s instead of %duseless keyword or type name in empty declarationuser-defined `%D' always evaluates both argumentsusing CONST_DOUBLE for addressusing `typename' outside of templateusing both @FILE with multiple files not implementedusing declaration `%D' introduced ambiguous type `%T'using synthesized `%#D' for copy assignmentusing template type parameter `%T' after `%s'using typedef-name `%D' after `%s'using-declaration for destructorusing-declaration for non-member at class scopevalidate_value_data: Loop in regno chain (%u)validate_value_data: [%u] Bad next_regno for empty chain (%u)validate_value_data: [%u] Bad oldest_regno (%u)validate_value_data: [%u] Non-empty reg in chain (%s %u %i)value of -mfixed-range must have form REG1-REG2varargs function cannot be inlinevariable `%#D' has initializer but incomplete typevariable `%s' declared `inline'variable `%s' has initializer but incomplete typevariable `%s' might be clobbered by `longjmp' or `vfork'variable offset is passed partially in stack and in regvariable or field `%s' declared voidvariable or field declared voidvariable size is passed partially in stack and in regvariable-size type declared outside of any functionvariable-sized object `%D' may not be initializedvariable-sized object may not be initializedvariable-sized object of type `%T' may not be initializedvector overflow in expressionverification error at PC=%dverify_flow_info failedverify_flow_info: Basic block %d succ edge is corruptedverify_flow_info: Duplicate edge %i->%iverify_flow_info: Incorrect blocks for fallthru %i->%iverify_flow_info: Incorrect fallthru %i->%ivirtual array %s[%lu]: element %lu out of bounds in %s, at %s:%dvirtual base `%T' inaccessible in `%T' due to ambiguityvirtual functions cannot be friendsvirtual non-class function `%s'virtual outside class declarationvoid expression between '(' and ')'void value not ignored as it ought to bevolatile register variables don't work as you might wishwarning:warning: warning: -pipe ignored because -save-temps specifiedwarning: -pipe ignored because -time specifiedwarning: `-x %s' after last input file has no effectwarning: already-compiled .class files ignored with -Cwarning: use of obsolete %%[ operator in specsweak declaration of `%s' must be publicweak declaration of `%s' must precede definitionweak declaration of `%s' not supportedwhere case label appears herewidth of `%D' exceeds its typewidth of `%s' exceeds its typewidth of integer constant changes with -traditionalwidth of integer constant may change on other systems with -traditionalwithin this contextwrite %swriting into constant object (arg %d)writing load commands. + + writing through null pointer (arg %d)wrong insn in the fallthru edgewrong number of arguments specified for `%s' attributewrong number of template arguments (%d, should be %d)wrong type argument to abswrong type argument to bit-complementwrong type argument to conjugationwrong type argument to decrementwrong type argument to incrementwrong type argument to unary exclamation markwrong type argument to unary minuswrong type argument to unary pluswrote %ld bytes, expected %ld, to %sxstormy16_print_operand: unknown codeyou must additionally specify either -M or -MMzero or negative size array `%s'zero size array reserves no spacezero width for bit-field `%D'zero width for bit-field `%s'zero width in %s formatzero-length format stringzero-size array `%D'Project-Id-Version: gcc 3.1-b20020415 + POT-Creation-Date: 2002-04-23 12:53+0200 + PO-Revision-Date: 2002-04-23 16:15-0600 + Last-Translator: Cristian Othón Martínez Vera + Language-Team: Spanish + MIME-Version: 1.0 + Content-Type: text/plain; charset=ISO-8859-1 + Content-Transfer-Encoding: 8bit + %#D + Opciones para %s: + + %s: %d: aviso: no se puede agregar la declaración de `%s' en la llamada a macro + + %s: error al leer el fichero de entrada `%s': %s + + %s: error fatal: fichero de información auxiliar corrupto en la línea %d + + %s: aviso: muy pocas listas de parámetros en la declaración de `%s' + + ;; Totales del combinador: %d intentos, %d sustituciones (%d requirieron espacio nuevo), + ;; %d éxitos. + + Tiempos de ejecución (segundos) + + Para instrucciones de reporte de `bugs', por favor vea: + + Para instrucciones de reporte de `bugs', por favor vea: + %s. + + ¿Continuar? (s ó n) + Opciones específicas del lenguaje: + + Las opciones que empiezan con -g, -f, -m, -O, -W, ó --param se pasan + automáticamente a los varios subprocesos invocados por %s. Para pasar + otras opciones a estos procesos se deben usar las opciones -W. + + Procesando la tabla de símbolos #%d, desfase = 0x%.8lx, tipo = %s + + Opciones específicas del objetivo: + + Además hay opciones específicas de %s sin documentar. + + Además hay opciones específicas del objetivo sin documentar. + + Actualizando las órdenes de encabezado y carga. + + + salida de ldd con constructores/destructores. + + write_c_file - el nombre de salida es %s, el prefijo es %s + %#D `%D' por un manejador anterior para `%T' en la conversión del apuntador a miembro en la conversión del apuntador a función miembro será reordenado para preceder la iniciaciones de los miembros %-23.23s [sin documentar] + (Use '-v --help' para mostrar las opciones de línea de comando de los subprocesos) + (use `typename %T::%D' si eso es lo que quería) -### Como -v pero no se ejecutan las opciones entre comillas y los comandos + --help Muestra esta información + --help Muestra esta información + --target-help Muestra opciones de línea de comando específicas del objetivo + -B Agrega el a las rutas de búsqueda del compilador + -D Define una con la cadena '1' como su valor + -D= Define una con como su valor + -A= Define la uesta para la + -A-= Desactiva la uesta a la + -U Borra la definición de + -v Muestra el número de la versión + -E Solamente preprocesa; no compila, ensambla o enlaza + -G Colocar los datos globales y estáticos más pequeños que + bytes en una sección especial (en algunos objetivos) + -H Muestra el nombre de los ficheros de encabezado cada vez que se usan + -C No descarta los comentarios + -dM Muestra una lista de definiciones de macro activas al final + -dD Preserva las definiciones de macro en la salida + -dN Como -dD excepto que sólo se preservan los nombres + -dI Incluye directivas #include en la salida + -M Genera dependencias para make + -MM Como -M, pero ignora los ficheros de encabezado del sistema + -MD Genera dependencias para make y compila + -MMD Como -MD, pero ignora los ficheros de encabezado del sistema + -MF Escribe la salida de la dependencia en el fichero dado + -MG Trata los ficheros de encabezado faltantes como ficheros generados + -MP Generar objetivos falsos para todos los encabezados + -MQ Agregar un objetivo entrecomillado para MAKE + -MT Agregar un objetivo sin comillas + -O[número] Establecer el nivel de optimización a [número] + -Os Optimizar para espacio en lugar de velocidad + -S Solamente compila; no ensambla o enlaza + -V Ejecuta el gcc con número de versión , si fue instalado + -W Activar avisos extra + -Wa, Pasa separadas por coma al ensamblador + -Wl, Pasa separadas por coma al enlazador + -Wlarger-than- Avisar si un objeto es más grande que bytes + -Wno-comment{s} No avisar si se encuentran comentarios + -Wtraditional Avisar sobre características no presentes en C tradicional + -Wno-traditional No avisar sobre C tradicional + -Wundef Avisar si una macro sin definir es usada por #if + -Wno-undef No avisar sobre pruebas con macros sin definir + -Wimport Avisar sobre el uso de la directiva #import + -Wno-import No avisar sobre el uso de #import + -Werror Tratar todos los avisos como errores + -Wno-error No tratar los avisos como errores + -Wsystem-headers No suprimir los avisos de los encabezados del sistema + -Wno-system-headers Suprimir avisos de los encabezados del sistema + -Wall Activar todas los avisos del preprocesador + -Wp, Pasa separadas por coma al preprocesador + -Wunused Activar avisos sin usar + -Xlinker Pasa el al enlazador + -a Activar el análisis de perfil de bloques + -aux-info Emitir la información de declaraciones en el + -ax Activar el análisis de perfil de saltos + -b Ejecuta gcc para el objetivo , si fue instalado + -b, --branch-probabilities Incluye las probabilidades de ramificación en la salida + -c Compila y ensambla, pero no enlaza + -c, --branch-counts Se muestran el número de ramificaciones + en lugar de los porcentajes + -d[letras] Activa los volcados desde pasos específicos del compilador + -dumpbase Nombre base a usar para los volcados desde pasos específicos + -dumpmachine Muestra el procesador objetivo del compilador + -dumpspecs Muestra todas las cadenas internas de especificación + -dumpversion Muestra la versión del compilador + -f, --function-summaries Mostrar sumarios para cada función + -fcall-saved- Marcar el como preservado entre funciones + -fcall-used- Marca el como corrupto para llamadas de función + -fdiagnostics-show-location=[once | every-line] Indica que tan seguido se debe emitir la información de ubicación del código, como prefijo, al inicio de los diagnósticos cuando está activado el corte de línea + -ffixed- Marca el como no disponible para el compilador + -finline-limit= Limita el tamaño de funciones inline a + -fmessage-length= Limita la longitud de los mensajes de diagnóstico a caracteres por línea. 0 suprime el corte de línea + -fpreprocessed Trata el fichero de salida como si ya fuera preprocesado + -ftabstop= Distancia entre los topes de tabulador para el reporte en columnas + -P No generar directivas #line + -$ No permitir '$' en los identificadores + -remap Remapear los nombres de fichero cuando se incluyan ficheros + --version Muestra la información de la versión + -h ó --help Muestra esta información + -fsched-verbose= Establece el nivel detalle del calendarizador + -h, --help Muestra esta información, y finaliza + -idirafter Agregar el ectorio al final de la ruta de inclusión del sistema + -I Agregar el ectorio al final de la ruta de inclusión principal + -I- Control granula de la ruta de inclusión; vea los documentos info + -nostdinc No buscar en los directorios de inclusión del sistema + (aún se usarán los directorios especificados con -isystem) + -nostdinc++ No buscar en los directorios de inclusión del sistema para C++ + -o Poner la salida en el + -l, --long-file-names Usar nombres largos de ficheros para los + ficheros fuentes incluidos + -lang-c++ Asumir que las fuentes de entrada están en C++ + -lang-objc Asumir que las fuentes de entrada están en ObjectiveC + -lang-objc++ Asumir que las fuentes de entrada están en ObjectiveC++ + -lang-asm Asumir que las fuentes de entrada están en ensamblador + -m%-23.23s [sin documentar] + -n, --no-output No crea un fichero de salida + -o Coloca la salida en el + -o Ubicar la salida en el + -o, --object-directory OBJDIR Buscar ficheros objeto en OBJDIR + -p Activar el análisis de perfil de funciones + -pass-exit-codes Salir con el código de error más alto de una fase + -pedantic Habilita todos los avisos demandados por ISO C estricto + -pedantic-errors Habilita los avisos -pedantic como errores + -trigraphs Soporte para trigrafos de ISO C + -lang-c Asumir que las fuentes de entrada están en C + -lang-c89 Asumir que las fuentes de entrada están en C89 + -pedantic Activar los avisos necesarios para cumplir estrictamente con ISO C + -pedantic-errors Como -pedantic excepto que se producen errores + -pipe Usa tuberías en lugar de ficheros intermedios + -print-file-name= Muestra la ruta completa a la biblioteca + -print-libgcc-file-name Muestra el nombre de la biblioteca que acompaña al compilador + -print-multi-directory Muestra el directorio raíz para las versiones de libgcc + -print-multi-lib Muestra el mapeo entre las opciones de línea de comando + y los múltiples directorios de la búsqueda de bibliotecas + -print-prog-name= Muestra la ruta completa del programa componente del compilador + -print-search-dirs Muestra los directorios en la ruta de búsqueda del compilador + -quiet No mostrar las funciones compiladas o el tiempo transcurrido + -save-temps No borra los ficheros intermedios + -specs= Sobrepone las especificaciones internas con el contenido del + -std= Asume que los ficheros de entrada son para el + -std= Especificar la concordancia estándard; una de: + gnu89, gnu99, c89, c99, iso9899:1990, + iso9899:199409, iso9899:1999 + -+ Permite el análisis de las características de estilo C++ + -w Inhibir los mensajes de aviso + -Wtrigraphs Avisar si se encuentran trigrafos + -Wno-trigraphs No avisar si se encuentran trigrafos + -Wcomment{s} Avisar si un comentario inicia dentro de otro + -time Obtiene el tiempo de ejecución de cada subproceso + -v Muestra los programas invocados por el compilador + -v, --version Muestra el número de versión, y finaliza + -version Muestra la versión del compilador + -w Suprimir avisos + -x Especifica el lenguaje de los siguientes ficheros de entrada + Los lenguajes permitidos incluyen: c c++ assembler none + 'none' significa revertir a la conducta habitual de + adivinar el lenguaje basado en la extensión del fichero + Existen, pero no están documentadas. + `%#D' declarado aquí también declarado como `%#D' aquí y `%#D' y `%#T' porque ya ha sido especificado cmo un directorio que no es del sistema porque es el mismo que el directorio que no es del sistema "%s" porque la secuencia de conversión para el argumento es mejor debido al miembro local `%#D' con el mismo nombre debido al método local `%#D' con el mismo nombre porque las siguientes funciones virtual son abstractas: porque la peor conversión para el anterior es mejor que la peor conversión para el posterior pero se requieren %d pero no se impone a `%T(const %T&)' pero no se impone a `operator=(const %T&)' por `%D' las conversiones candidatas incluyen `%D' y `%D' no se puede usar la asignación obsoleta en `%D' porque tiene un destructor tiene conflicto con `%D' cruza la asignación de valores iniciales de `%#D' entra captura de bloque entra en el ámbito de `%#D' que no es POD entra intento de bloque se esperaba una plantilla de clase, se obtuvo `%T' se esperaba una constante de tipo `%T', se obtuvo `%T' se esperaba una plantilla de tipo `%D', se obtuvo `%D' se esperaba un tipo, se obtuvo `%E' se esperaba un tipo, se obtuvo `%T' primero declarado como `%#D' aquí primer tipo aquí para la conversión de `%T' a `%T' de la definición de `%#D' desde aquí en la llamada a `%D' en la evaluación de `%Q(%#T, %#T)' en la instanciación de la plantilla `%T' en expresión thrown argumento de iniciación %P de `%D' argumento de iniciación %P de `%D' a partir del resultado de `%D' iniciando el temporal a partir del resultado de `%D' en lugar de `%D' de la clase base dependiente coincide con este `%D' bajo las reglas de ISO estándard coincide con este `%D' bajo las reglas antiguas los nombres de las clases bases dependientes no son visibles para la búsqueda de nombres sin calificar - para referirse al tipo heredado, utilice `%s %T::%T' o a `operator=(cont %T&)' la definición original aparece aquí otro tipo aquí sustituyendo `%#D' sustituyendo a `%#D' (debe ser apuntador o referencia a una clase) sustituyendo a `%#D' (debe ser apuntador o referencia) sustituyendo `%#F' tal vez quiere `%T' para un constructor ya que se declaró `%#D' en la clase base ya que el tipo `%T' tiene funciones virtuales abstractas salta la asignación de valores iniciales de `%#D' tratando de instanciar `%D' usando la asignación obsoleta en `%D' donde cfront podría usar `%#D' se reordenará para coincidir con el orden de la declaración se reordenará para coincidir con el orden de herencia puede evitar esto eliminando el iniciador %s TOTAL : obscurece el parámetro de plantilla `%#D'"%.*s" redefinido"%s" después de # no es un entero positivo"%s" después de #line no es un entero positivono se puede usar "%s" como un nombre de macrono se puede usar "%s" como un nombre de macro porque es un operador en C++"%s" no es un nombre de fichero válido"%s" no es una opción válida para el preprocesador"%s" no está definido"%s" no es válido en las expresiones #if"%s" podría faltar en la lista de parámetro de macro"%s" reafirmado"%s" redefinido"/*" dentro de un comentarioCon truco sucio "Clases de registro pequeñas""defined" no se puede usar como un nombre de macro# %s %.2f %.2f + el operador # debe continuar con un nombre de argumento de macro#%s espera "NOMBRE_ARCHIVO" ó #%s es una extensión de GCC#%s no está dentro de un condicionalel número de #-lines para entrar y salir de los ficheros no coinciden#elif después de #else#elif no está dentro de un condicional#elif sin #if#else después de #else#else no está dentro de un condicional#else o #elif después de #else#else sin #if#endif sin #if#error%.*s#if sin expresión#import es obsoleto, use una envoltura #ifndef en el fichero de encabezadola búsqueda de #include "..." inicia aquí: + la búsqueda de #include <...> inicia aquí: + #include espera "fname" ó #include anidado con demasiada profundidad#include_next en fichero primario de código fuente#pragma %s %s ya está registrado#pragma %s ya está registradoel #pragma GHS endXXXX no coincide con el startXXX previose encontró un #pragma GHS endXXXX sin un startXXX previoimplementación de #pragma para %s aparece después de que el fichero es incluído#pragma una vez en el fichero principal#pragma una vez es obsoletose encontró un #pragma pack (pop) sin un #pragma pack (push, ) coincidentese encontró un #pragma pack (pop, %s) sin un #pragma pack (push, %s, ) coincidente#pragma pack(pop[, id], ) no tiene soporte en este objetivo#pragma pack(push[, id], ) no tiene soporte en este objetivo#pragma redefine_extname tiene conflictos con la declaración#pragma system_header ignorado fuera del fichero a incluir#pragma vtable ya no tiene soporte#warning%.*s%%R no es seguido por %%B/C/D/E%%S calculó una máscara con sólo 0's%%S calculó una máscara con sólo 1's%6.2f%% de %d ramificaciones ejecutadas en el fichero %s + %6.2f%% de %d ramificaciones ejecutadas en la función %s + %6.2f%% de %d ramificaciones visitadas al menos una vez en el fichero %s + %6.2f%% de %d ramificaciones visitadas al menos una vez en la función %s + %6.2f%% de %d llamadas ejecutadas en el fichero %s + %6.2f%% de %d llamadas ejecutadas en la función %s + %6.2f%% de %d líneas de código fuente ejecutadas en el fichero %s + %6.2f%% de %d líneas de código fuente ejecutadas en la función %s + Se sabe que los valores de inicio, fin y cuenta de paso %A resultan en conducta dependiente de la implementación debido a desbordamiento(s) en cálculos intermedios en %0Se sabe que los valores de inicio, fin y cuenta de paso %A resultan en falta de iteraciones en %0Se sabe que el valor final %A mas la cuenta de paso se desborda en %0%A desde %B en %0%CSe sabe que la cuenta de paso %A es 0 (cero) en %0%A con muy pocos argumentos (comenzando con el argumento de imitación `%B') para %0 para la referencia de la declaración de función en %1%A demasiados argumentos para %0 para la referencia de la declaración de función en %1se encuentra(n) %d constructor(es) + se encuentra(n) %d destructor(es) + se encuentra(n) %d marcos de tabla(s) + no está compilado el modo bit-%i%s%s + %s %s %+#D%s %+#D%s%s %+#T%s %D(%T) %s %D(%T, %T) %s %D(%T, %T, %T) %s %T %s (GCC) %s + %s `%s' no implementa completamente el protocolo `%s'%s como `float' en lugar de `double' debido al prototipo%s como complejo en lugar de coma flotante debido al prototipo%s como complejo en lugar de entero debido al prototipo%s como coma flotante en lugar de complejo debido al prototipo%s como coma flotante en lugar de entero debido al prototipo%s como entero en lugar de complejo debido al prototipo%s como entero en lugar de coma flotante debido al prototipo%s como signed debido al prototipo%s como unsigned debido al prototipo%s al final de la entrada%s antes de "%s"%s antes de %s'%c'%s antes de %s'\x%x'%s antes del elemento '%s'%s antes de `%c'%s antes de `%s'%s antes del elemento `%s'%s antes de `\%o'%s antes de una constante numérica%s antes de una constante de cadena%s de diferentes tipos de apuntador `%T' y `%T' carece de una conversión%s no puede resolver la dirección de la función sobrecargada%s causa un conflicto de tipo de secciónse definió %s dentro de los parámetros%s desactivado, use los interruptores normales de depuración%s descarta calificadores del tipo del destino del apuntador%s no tiene soporte para el operando de formato de número %%n$%s no tiene soporte para %s%s no tiene soporte para %s con el formato `%%%c' %s%s no tiene soporte para el formato `%%%c' %s%s no tiene soporte para el formato `%%%s%c' %s%s no tiene soporte para el modificador de longitud %s `%s'%s para el operador `%T %s %T'%s para el operador `%T %s'%s para el operador `%T ? %T : %T'%s para el operador `%T [%T]'%s para el operador `%s %T'formato %s, argumento %s (argumento %d)%s de tipo de apuntador incompatiblefunción %s, región %d, desfase = %ld (0x%.8lx) + %s no tiene `%s'%s no tiene un miembro llamado `%s'se ignora %s con %s y el formato `%%%c' %sse ignora %s con %s en el formato %s%s en directiva de preprocesamiento%s es un dispositivo de bloques%s es una referencia, no una llamada, a la función `%E'%s está deprecado, por favor vea la documentación para más detalles%s no tiene soporte en esta configuración%s no es del tipo %s (argumento %d)%s es más corto de lo esperado%s es demasiado grande%s crea un entero desde un apuntador sin una conversión%s crea un apuntador desde un entero sin una conversión%s hace que la función calificada apunte desde una no calificada%s ya no tiene soporte -- intente -fno-vxt -ff90%s ya no tiene soporte -- intente -fvxt%s de valor negatio `%E' a `%T'%s de la ubicación de sólo lectura%s del miembro de sólo lectura `%s'%s de la variable de sólo lectura `%s'calificador %s ignorado en asm%s devolvió el estado de salida %dla cuenta de rotación %s >= anchura del tipola cuenta de rotación %s es negativa%s terminado con la señal %d [%s]%s%s a `%T' desde `%T'%s al tipo `%T' que no es apuntador desde NULLse usó %s con el formato `%%%c' %s%s con anchura diferente debido al prototipo%s%s%s versión %s (%s) + %s compilado por GNU C versión %s. + %s%s%s versión %s (%s) compilado por CC. + %s-%s es un rango vacío%s. + %s%s: %d: se usa `%s' pero falta en SYSCALLS + %s: %d: aviso: `%s' fue excluído por el preprocesamiento + %s: %d: aviso: no se convirtió la definición de %s + %s: %d: aviso: se encontró `%s' pero se esperaba `%s' + %s: %d: aviso: no hay definición extern para `%s' + %s: %d: aviso: código fuente demasiado confuso + %s: %d: aviso: no se convirtió la declaración de la función varargs + %s: %s%s: el compilador %s no está instalado en este sistema%s: %s terminó con estado %d + %s: %s: %s: %s: no se puede obtener el estado: %s + %s: En la instanciación de `%s': + %s: NaN - produciendo una operación%s: No es un directorio%s: no se convirtió `%s' + %s: error de dominio del argumento%s: no se puede cambiar el modo del fichero `%s': %s + %s: no se puede crear/abrir el fichero limpio `%s': %s + %s: no se puede crear/abrir el fichero de salida `%s': %s + %s: no se puede borrar el fichero de información auxiliar `%s': %s + %s: no se puede borrar el fichero `%s': %s + %s: no se puede obtener el estado del fichero `%s': %s + %s: no se puede obtener el estado del fichero de información auxiliar `%s': %s + %s: no se puede enlazar el fichero `%s' a `%s': %s + %s: no se puede abrir el fichero de información auxiliar `%s' para lectura: %s + %s: no se puede abrir el fichero `%s' para lectura: %s + %s: no se puede leer el fichero de información auxiliar `%s': %s + %s: no se puede obtener el directorio de trabajo: %s + %s: no se puede abrir como un fichero COFF%s: compilando `%s' + %s: listas de conflictos para '%s' a continuación: + %s: definiciones extern de '%s' en conflicto + %s: convirtiendo el fichero `%s' + %s: no se convirtió la declaración de la función `%s' + %s: las declaraciones de '%s' no se convertirán + %s: no se convirtió la definición de la función `%s' + %s: error al cerrar el fichero de información auxiliar `%s': %s + %s: error al leer el fichero de información auxiliar `%s': %s + %s: error al escribir al fichero `%s': %s + %s: se encontró la definición de `%s' en %s(%d) + %s: no se convirtió la definición de la función + %s: singularidad de la función%s: no se insertaron las declaraciones globales para el fichero `%s' + %s: los nombres de fichero de entrada deben tener sufijos .c: %s + %s: aborto interno + %s: nombre de fichero inválido: %s + %s: no se usó el fichero de entrada del enlazador porque no se hizo enlace%s: no se insertó la declaración local para la función `%s' + %s: definiciones static múltiples de `%s' en el fichero `%s' + %s: no es un fichero COFF%s: desbordamiento del error de rango%s: pérdida parcial de precisión%s: el subproceso recibió la señal fatal %d + %s: pérdida total de precisión%s: desbordamiento por debajo del error de rango%s: modo de empleo '%s [ -VqfnkN ] [ -i ] [ nombre_fichero ... ]' + %s: modo de empleo '%s [ -VqufnkNlgC ] [ -B ] [ nombre_fichero ... ]' + %s: esperar: %s + %s: aviso: %s: aviso: no se puede renombrar el fichero `%s' a `%s': %s + %s: aviso: el fichero `%s' ya había sido guardado en `%s' + %s: aviso: falta el fichero SYSCALLS `%s' + %s: aviso: no hay acceso de lectura para el fichero `%s' + %s: aviso: no hay definición static para `%s' en el fichero `%s' + %s: aviso: no hay acceso de escritura para el directorio que contiene a `%s' + %s: aviso: no hay acceso de escritura para el fichero `%s' + %s: aviso: demasiadas listas de parámetros en la declaración de `%s' + %s: aviso: usando listas formales de %s(%d) para la función `%s' + %s: los avisos son tratados como errores + %s: se podría convertir el fichero `%s' + %s:%d: instanciado desde `%s' + %s:%d: instanciado desde aquí + %s:%d: confusión por errores previos, saliendo + %s:%d: la declaración de la función `%s' toma formas diferentes + %s:%d: aviso: %s=%s no es numérico%s=%s es demasiado grande%sfunción miembro `%D' no puede tener el calificador de método `%T''##' no puede aparece en o al final de una expansión de macro'#' no es seguido por un parámetro de macrocaracter(es) '$' en un identificadorse usa '%D' como un tipo, pero no está definido como un tipo.Se esperaba '('Se esperaba ')'Se esperaba ')' o términose esperaba '*'Se esperaba ':'se esperaba ';''Ll' y 'lL' no son sufijos enteros válidosSe esperaba '['Se esperaba ']'Se esperaba ']', expresión de tipo inválidaSe esperaba 'class'Se esperaba 'class' o 'this''lul' no es un sufijo entero válidoSe esperaba '{'("%s" es un elemento alternativo para "%s" en C++)((anónimo))(Cada identificador no declarado solamente se reporta una vez(Cada identificador sin declarar es reportado sólo una vez para cada función en el que aparece.)(un apuntador a miembro solamente se puede formar con `&%E')(se requiere un inicio fuera de la clase)(continuado):(las acciones adjuntas de declaraciones case previas requieren destructores en su propio ámbito.)(si esta no es su intención, asegúrese que la plantilla de la función ya ha sido declarada y agregue <> aquí después del nombre de la función) -Wno-non-template-friend desactiva este aviso(es válida para %s pero no para el lenguaje seleccionado)(cerca de la asignación de valores iniciales para `%s')(así que debe pasar `%s' y no `%s' a `va_arg')(% static para %s)(esto se reportará solamente una vez por cada fichero de entrada)(use `=' para iniciar datos miembros static), + de %s:%d, + de %s:%u--driver ya no tiene soportese requiere -E cuando la entrada es de entrada estándar-G y -membedded-pic son incompatibles-G es incompatible con el código PIC el cual es por omisiónse especificó -I- dos veces-R requiere -ose ignora -Wformat-extra-args sin -Wformatse ignora -Wformat-nonliteral sin -Wformatse ignora -Wformat-security sin -Wformatse ignora -Wformat-y2k sin -Wformat-Wid-clash-LEN ya no tiene soportese ignora -Wformat-attribute sin -Wformat-Wno-strict-prototypes no tiene soporte en C++-Wuninitialized no tiene soporte sin -Ose requiere -c o -S para Ada-f%s y -msdata=%s son incompatiblesse ignora -f%s (todo el código es independiente de posición)se ignora -f%s para 68HC11/68HC12 (sin soporte)se ignora -f%s para Unicos/Mk (sin soporte)se ignora -f%s para el objetivo (todo el código es independiente de posición)-f%s ya no tiene soporte-f%s no tiene soporte: ignoradono se da soporte a -f%sleading-underscore en este objetivo-fPIC y -fpic no tienen soporte en esta configuración-fPIC y -mcall-%s son incompatibles-fPIC actualmente no tiene soporte en el 68000 o 68010 + -fPIC no es válido con -mcoff-fPIC no es válido con -mcoffno se da soporte a -fdata-sections para este objetivo-fdata-sections no tiene soporte en AIX-femit-class-file se debe usar junto con -fsyntax-onlyse desactiva -ffunction-sections en AIX mientras se depura-ffunction-sections desactivado; hace imposible el análisis de perfil-ffunction-sections podría afectar la depuración en algunos objetivosno se da soporte a -ffunction-sections para este objetivose renombró -fhandle-exceptions a -fexceptions (y ahora está activado por omisión)-fjni y -femit-class-file son incompatibles-fjni y -femit-class-files son incompatibles-fname-mangling-version ya no tiene soporte-fpic y -mapcs-reent son incompatibles-fpic no es válido con -mcoff-fpic no es válido con -mcoff-fprefetch-loop-arrays no tiene soporte con -Osno se da soporte a -fprefetch-loop-arrays para este objetivono se da soporte a -fprefetch-loop-arrays para este objetivo (intente los interruptores -march)-frepo debe ser usado con -c-g sólo tiene soporte cuando se usa GAS en este procesador,opción -g desactivada-g con -mno-apcs-frame no permite una depuración sensible-mabi=%s no tiene soporte para -mips%d-maix64 y la arquitectura POWER son incompatiblesse requiere -maix64: cálculo de 64 bits con direccionamiento de 32 bits no tiene soporte aún-maix64 requiere que la arquitectura PowerPC64 permanezca activada-malign-double no tiene sentido en el modo 64bit-malign-functions es obsoleto, use -falign-functions-malign-functions=%d no está entre 1 y %d-malign-jumps es obsoleto, use -falign-jumps-malign-jumps=%d no está entre 1 y %d-malign-loops es obsoleto, use -falign-loops-malign-loops=%d no está entre 0 y %d-malign-loops=%d no está entre 1 y %dno se pueden usar juntos -mapcs-26 y -mapcs-32-mapcs-stack-check es incompatible con -mno-apcs-frameno se puede usar -max-stackframe=%d, no está entre 0 y %dno se pueden usar juntos -mbig-endian y -mlittle-endianse ignora -mbnu210 (la opción es obsoleta)-mbranch-cost=%d no está entre 0 y 5-mbsd y -mxopen son incompatibles-mbsd y -pedantic son incompatibles-mcall-aixdesc debe ser big endian-mcmodel= no tiene soporte en sistemas de 32 bit-membedded-pic y -mabicalls son incompatibles-mentry sólo tiene significado con -mips-16-mhard-float no tiene soporte-mieee no tiene soporte en Unicos/Mk-mieee-with-inexact no tiene soporte en Unicos/Mk-mips%d not tiene soporte para registros fp de 64 bit-mips%d no tiene soporte para registros gp de 64 bit-mips%d no tiene soporteno se permite -mlong-double-64 con -m64-mmultiple no tiene soporte en sistemas little endian-mpic-register= es inútil sin -fpic-mpreferred-stack-boundary=%d no está entre %d y 12-mregparm=%d no está entre 0 y %d-mrelocatable y -mcall-%s son incompatibles-mrelocatable y -mno-minimal-toc son incompatibles-mrelocatable y -msdata=%s son incompatiblesla convención de llamadas -mrtd no tiene soporte en el modo de 64 bitse usó -ms2600 sin -ms-msdata=%s y -mcall-%s son incompatibles-mshort-data-%s y PIC son incompatibles-mshort-data-%s es demasiado grande -msingle-float y -msoft-float no se pueden especificar al mismo tiempono se pueden usar juntos -msoft-float y -mhard_float-mstring no tiene soporte en sistemas little endian-msystem-v y -mthreads son incompatibles-msystem-v y -p son incompatibles-mtrap-large-shift y -mhandle-large-shift son incompatibles-mxopen y -pedantic son incompatiblesla opción -p no tiene soporte: en su lugar use -pgla creación de perfil con -p ya no tiene soporte. Use en su lugar -pgfalta el argumento para la opción -param-pedantic y -traditional son mutuamente exclusivos-pg y -fomit-frame-pointer son incompatibles-pipe no tiene soporte-pipe no tiene soporte-shared no es válido con -mcoff-static no es válido con -mcoff-symbolic no es válido con -mcoff-traditional y -ansi son mutuamente exclusivos-traditional está deprecado y será eliminado-traditional no tiene soporte en C++-trigraphs y -traditional son mutuamente exclusivosel contenido del fichero .da se agotó demasiado prontoel contenido del fichero .da se agotó demasiado pronto + el contenido del fichero .da no se agotóel contenido del fichero .da no se agotó + modo de 31 bitfpu 32381el conjunto de instrucciones 387 está desactivado, usando la aritmética SSEmodo de 64 bit: + : `%s' es una característica de JDK1.1(MR);; Estadísticas del combinador: %d intentos, %d sustituciones (%d requirieron espacio nuevo), + ;; %d éxitos. + + ;; Procesando el bloque de %d a %d, %d establecido. + <%s anónimo>no se soporta el código reentrante APCS. IgnoradoASSIGN a una variable que es demasiado pequeñala etiqueta ASSIGNada no cabe en `%A' en %0 -- utilizando una similar más anchoel especificador de FORMATo ASSIGNado es demasiado pequeñola variable ASSIGNada del objetivo GOTO es demasiado pequeñaEl especificador de acceso en %0 debe seguir inmediatamente a la declaración de tipo derivado en %1 sin declaraciones que intervenganEl especificador de acceso o la declaración PRIVATE en %0 es inválido para la definición de tipo derivado dentro de otro que la parte de especificación de un móduloAgregar un directorio para la búsqueda de INCLUDEAgregar el directorio a la ruta de clasesAgregar comentarios extra a la salida de ensambladorImpresiones adicionales de depuraciónAlinear todas las etiquetasAlinear todos los ciclose al límite de 32 byteAlinear código y datos a 32 bitsAlinear el código a límites de 8 byteAlinear destino de las operaciones de cadenasAlinear doubles en límites de wordAlinear las etiquetas que solamente se alcanzan saltandoAlinear algunos doubles en límites de dwordAlinear el inicio de las funcionesAlinear el inicio de los ciclosAlinear a límites >wordAlinear al tipo base del campo de bitAlinear las variables en un límite de 16-bitAlinear las variables en un límite de 32-bitPermitir $ en los nombres de símbolosPermite el intercambio entre INTEGER y LOGICALPermite que REAL(Z) y AIMAG(Z) reciban DOUBLE COMPLEX ZPermitir que la generación de RTL emita 3 operandos insns inválidosPermitir tipos diferentes como argumentos del operador ?Permitir que las direcciones de las funciones se conservern en registrosPermitir optimizaciones matemáticas que pueden violar los estándares IEEE ó ANSIPermite la copia ordinaria de variables ASSIGNadasPermitir el movimiento especulativo de más cargasPermitir el movimiento especulativo de ninguna cargaPermitir el movimiento especulativo de algunas cargasPermitir el uso de $ dentro de los identificadoresPermitir cuentas de iteración unsigned para RPTB/DBConvención de llamada alternativaEl especificador de devolución alternante en %0 es inválido dentro de una funciónEl especificador de devolución alternante en %0 es inválido dentro de una unidad de programa principalConvención de llamada alternativaRevisar siempre por archivos de clases no generados por gcjPasar siempre los argumentos de coma flotante en memoriaTratar siempre a los campos de bit como de tamaño intUso ambiguo del intrínseco `%A' en %0 [info -f g77 M CMPAMBIG]El argumento #%B de `%A' es %C en %0 pero es %D en %1 [info -f g77 M GLOBALS]La matriz `%A' en %0 es demasiado grande para manejarseValor del elementro de la matriz en %0 está fuera del rango definidoEspecificación de matriz o subcadena para `%A' fuera de rango en la declaración EQUIVALENCELa especificación de matriz o subcadena para `%A' está fuera de rango en la declaración en %0Matriz de referencia a la variable escalar `%A' en la declaración EQUIVALENCESubíndice de matriz #%B fuera de rango para EQUIVALENCE de `%A'El subíndice de matriz #%B está fuera de rango para la iniciación de `%A' en la declaración en %0Se proporcionó una matriz en %1 como argumento de imitación `%A' en la referencia de la declaración de función en %0Asumir GASAsumir que todos los doubles están alineadosAsumir que los argumentos no pueden ser alias de globales o de cada otroAsumir que los argumentos pueden ser alias de globales pero no de cada otroAsumir bytes big endian, words little endianAsumir que int sea entero de 8 bitAsumir que las funciones nativas se implementan usando JNIAsumir el ambiente normal de ejecución CAsumir desalineación de double posibleAsumiendo espacio de direcciones pequeñoAsumir que se aplican las reglas estrictas de aliasAsumir que el CPU destino está configurado como big endianAsumir que el CPU destino está configurado como little endianAsumir que se pueden hacer alias de los apuntadoresAsumir que se hay alias de los apuntadoresAsumir que podrían no existir las bibliotecas estándard y mainAsumir que los accesos sin alinear son manejados por el sistemaAsumiendo que todas las cuentas de ejecución son cero. + En %0, '!' y '/*' no son delimitadores de comentario válidosEn %0, el fichero INCLUDE %A existe, pero no es legibleEn %0, la anidación de INCLUDE es demasiado profundaEn %0, especifique ASSIGNMENT en lugar de OPERATOR para la declaración INTERFACE que especifica el operador de asignación (=)En %0, especifique OPERATOR en lugar de ASSIGNMENT para la declaración INTERFACE que no especifica el operador de asignación (=)En el nivel principal:Se intentó hacer EQUIVALENCE en las áreas comunes `%A' y `%B' en %0Se intentó borrar el insn de prólogo/epílogoSe intentó extender el área COMMON más allá de su punto de inicio a través de EQUIVALENCE de `%A'Intentar rellenar las ranuras de retraso de las instrucciones de ramificaciónSe trata de mantenter la pila alineada a esta potencia de 2Intentar mezclar constantes idénticas a través de las unidades de compilaciónIntentar mezclar constantes idénticas y variables constantesSe intenta elevar la constante cero a una potencia en %0Se intentó especificar un segundo valor inicial para `%A' en %0Se intentó especificar un segundo valor inicial para un elemento de `%A' en %0Intentar dar soporte a C estilo K&R tradicionalSe permite el auto pre/post decremento incrementoNo se permite el auto pre/post decremento incrementoAlinear automáticamente los objetivos de las ramificaciones para reducir las faltas de ramificaciónEl nombre de BLOCK DATA en %0 es superfluo, no se especificó un nombre en %1Las barras invertidas en constantes de caracter/hollerith no son especiales (estilo C)Modelo de memoria bigComún en blanco iniciado en %0Las ramificaciones son así de caras (1-5, unidades arbitrarias)Saltar el caché de datos para referencias a memoria volatilelos comentarios de estilo C++ no son permitidos en ISO C89No se puede encontrar el paquete por omisión `%s'. Revise la variable de ambiente CLASSPATH y el acceso a los archivosNo se puede colocar `%A' como lo indica EQUIVALENCE debido a restricciones de alineaciónNo se puede especificar la dimensión de una matriz en una declaraciónNo se puede descomponer la dirección.No se puede especificar =expr-iniciación en %0 a menos que `::' aparezca antes que la lista de los objetosCambiar sólo los 8 bits bajos del apuntador de pilaCambiar los costos de ramificación dentro del compiladorCambiar el apuntador de la pila sin desactivar las interrupcionesCambiar el umbral para la conversión a ejecución condicionalCambiar cuando se emitan las instancias de la plantillaEl carácter `%A' (por ejemplo) está en minúsculas en el nombre de símbolo en %0El carácter `%A' (por ejemplo) está en mayúsculas en el nombre de símbolo en %0El carácter `%A' no está seguido en algún punto por un carácter en minúsculas en el nombre de símbolo en %0La constante de carácter en %0 no tiene el apóstrofe que cierra en %1Buscar errores de sintaxis, y entonces detenerseRevisar el valor de devolución de newEscoger la clase cuyo método main debería ser usadoEscoger la codificación de entrada (por omisión viene del local)se esperaba una declaración de clase o interfazTamaño del código: small, medium o largeEl bloque común `%A' es %B %D en longitud en %0 pero %C %E en %1El bloque común `%A' está SAVE(guardado), explícita o implícitamente, en %0 pero no está SAVE en %1Compilar como si el programa estuviera escrito en minúsculasCompilar como si el programa estuviera escrito en mayúsculasCompilar para apuntadores de 32-bitCompilar para apuntadores de 64-bitCompilar para ETRAX 100 (CRIS v8)Compilar para ETRAX 4 (CRIS v3)Compilar para un 68HC11Compilar para un 68HC12Compilar para el sistema elinux Etrax basado en 100 sin MMUCompilar para el Thumb on para el ARMCompilar para el procesador v850Compilar para el ABI de v8plusCompilar sólo para ISO C89Compilar los apuntadores como triples: valor, base y finCompilar con el modo entero de 16-bitCompilar con el modo entero de 32-bitConfigurado con: %s + Especificaciones de control de E/S en conflicto en %0 y %1Considerar lento el acceso a la memoria de tamaño byteConsiderar todas las referencias a memoria a través de apuntadores como volatileConsiderar todas las referencias a datos globales como volatileConsiderar todas las referencias a datos static como volatileConsiderar que el tipo `int' es de 16 bits de anchuraConsiderar que el tipo `int' es de 32 bits de anchurael atributo ConstantValue del campo '%s' tiene un tipo erróneoEl nombre de construcción en %0 no coincide con el nombre de construcción para cualquier construcción DO contenedoraEl nombre de construcción en %0 no es el mismo que el nombre de construcción en %1El nombre de la construcción en %0 es superfluo, no se especificó un nombre de construcción en %1La invocación del constructor debe ser el primer elemento en un constructorEl indicador de continuación en %0 debe aparecer en la columna 6 [info -f g77 M LEX]Controlar el modo de captura IEEEControlar el modo de redondeo generado de fpControlar la precisión dada a las excepciones de fpConvertir constantes de coma flotante a constantes de precisión simpleCopiar las constantes de direcciones de memoria en registros antes de usarlosCopiar los operandos de memoria en registros antes de usarlosCopyright (C) 2001 Free Software Foundation, Inc. + Copyright (C) 2002 Free Software Foundation, Inc. + No se puede abrir fichero de bloque básico %s. + No se puede abrir fichero de datos %s. + No se puede abrir el fichero de salida %s. + No se puede abrir el fichero del grafo de flujo del programa %s. + No se puede abrir el fichero de código fuente %s. + Crear una aplicación con interfaz gráfica de usuario (GUI)Crear una aplicación de consolaCrear ficheros de datos necesarios para gcovCreando %s. + La referencia de la declaración DO a la etiqueta en %0 y la definición de la etiqueta en %2 están separadas por un bloque sin terminar que empieza en %1La referencia de la declaración DO a la etiqueta en %1 sigue su definición en %0Las referencias de la declaración DO a la etiqueta en %0 y %2 están separadas por un bloque sin terminar que empieza en %1DW_LOC_OP %s no está implementado + Soporte para depuración de argumentos en el compiladorSoporte para depuración de direcciones de memoria en el compiladorSoporte para depuración de pila en el compiladorPostergar la extracción de argumentos de funciones de la pila hasta más tardeBorrar los intrínsecos MIL-STD 1753Borrar los intrínsecos libU77Borrar los intrínsecos libU77 con interfaces erróneasBorrar los intrínsecos de FORTRAN que no es 77 que F90 soportaBorrar los intrínsecos de FORTRAN que no es 77 que VXT FORTRAN soportaBorrar los intrínsecos de FORTRAN que no es 77 que f2c soportaBorrar los intrínsecos de FORTRAN que no es 77 que g77 soportaBorrar las revisiones de apuntadores nulos sin usoDeterminar el estándard de lenguajeDirectorio donde se escribirán los ficheros de claseDesactivar la información de la línea de depuración Dwarf 2 a través de as de GNUDesactivar los intrínsecos MIL-STD 1753Desactivar las instrucciones MPY||ADD y MPY||SUBDesactivar las extensiones picoJava de TransmetaDesactivar revisiones de asignabilidad para almacenamientos en matrices de objetosDesactivar la revisión automática de límites de matricesDesactivar la depuraciónDesactivar los diagnósticos fatales sobre problemas interproceduralesDesactivar las instrucciones FP multiply/add y multiply/substract de corto circuitoDesactivar los intrínsecos libU77Desactivar los intrínsecos libU77 con interfaces erróneasDesactivar nuevas características en desarrolloDesactivar los intrínsecos de FORTRAN que no es 77 que g77 soportaDesactivar los intrínsecos de FORTRAN que no es 77 que F90 soportaDesactivar los intrínsecos de FORTRAN que no es 77 que VXT FORTRAN soportaDesactivar los intrínsecos de FORTRAN que no es 77 que f2c soportaDesactivar los diagnósticos opcionalesDesactivar las funciones paralelasDesactivar el paso de reorganizaciónDesactiva la agregación de subrayados a los externosDesactivar el uso de la instrucción DBDesactivar el uso de la instrucción RTPBDesactivar el uso de la instrucción RTPSDesactivar el uso de las instrucciones condicionales moveDesactivar el uso de sdata/scommon/sbssDesactivar los avisos sobre problemas interproceduralesDesactiva todas las características feasNo ermitir cuentas de iteración unsigned para RPTB/DBDescartar funciones virtual sin usarMostrar estadísticas de tiempo de compilaciónMostrar las estadísticas acumuladas durante la compilaciónDivisión por 0 (cero) en %0 (IEEE aún no tiene soporte)No generar código para un 68851No alinear el código a límites de 8 byteNo alinear destino de las operaciones de cadenasNo asignar el registro BKNo permitir que los campos de bits crucen los límites de wordNo mediar en tamaños arbitrarios en operaciones de bitNo asumir GASNo alinear automáticamente los objetivos de las ramificacionesNo compilar para el ABI de v8plusNo emitir modos de direccionamiento con asignaciones colateralesNo emitir constantes enteras complejas a memoria de sólo lecturaNo emitir prólogo o epílogo de funcionesNo emitir código de revisión de la pilaDesactivar la relajación del enlazadorNo generar directivas .sizeNo generar código H8/300HNo generar código H8/SNo generar código H8/S2600No generar escritura de byteNo generar instrucciones charNo generar código para un FPA de SunNo generar código para revisar excepciones de especificacionesNo generar código que use el FPUNo generar múltiples instrucciones load/storeNo generar load/store con instrucciones de actualizaciónNo generar instrucciones multmNo generar información del tipo de descriptor en tiempo de ejecuciónNo generar sin, cos, sqrt para FPUNo generar instrucciones de cadena para movimiento de bloquesNo generar insns de salto de tablaNo convertir a inline todas las operaciones de cadenas conocidasNo hacer inline por omisión a las funciones miembroNo presentar tipos como en el gcc v1.3 de IntelNo cargar el registro PIC en los prólogos de funciónNo hacer paralelas las instrucciones adyacentesNo mover las instrucciones al prólogo de una funciónNo obedecer las semánticas de control de accesoNo optimizar las instrucciones de la llamada del extremo en el ensamblador y el enlazadorNo pasar el texto puro de -assert al enlazadorNo realizar optimización de la llamada del extremoNo permitir accessos sin alinearNo promover floats a double si se usa -traditionalNo proveer una dirección de inicio por omisión 0x100 del programaNo poner globales sin iniciar en la sección comúnNo reconocer las palabras claves definidas por GNUNo reconocer ninguna función internaNo reconocer la palabra clave 'asm'No devolver valores de funciones en registros FPUNo serializar las referencias a memoria volátil con instrucciones MEMWNo guardar floats en registrosNo almacenar los locales en los registros de argumentoNo dar soporte para funciones internas 3DNow!No dar soporte para funciones internas y generación de código MMX y SSENo dar soporte para funciones internas MMXNo dar soporte para funciones internas y generación de código MMX, SSE y SSE2No suprimir los avisos de los encabezados del sistemaNo ajustar la alineación del código y de datos de sólo lecturaNo ajustar la alineación de la pilaNo ajustar la alineación de los datos modificablesNo usar los registros ABI reservadosNo usar matemática IEEE para comparaciones fpNo usar instrucción MPYI para C3xNo usar el conjunto de instrucciones POWERNo usar el conjunto de instrucciones POWER2No usar el conjunto de instrucciones PowerPCNo generar código para una tarjeta Sun SkyNo usar fp VAXNo usar direcciones que reserven registros globalesNo usar entradas de función hojas alternadasNo usar instrucciones de campos de bitNo usar modos de direccionamiento complejosNo usar códigos de condición para las instrucciones normalesNo usar modo de direccionamiento directo para los registros suavesNo usar el modelo plano de ventana de registroNo usar registros fpNo usar coma flotante de hardwareNo usar fp de hardwareNo usar instrucciones de fp quad de hardwareNo usar instrucciones de fp para multiplicar-acumularNo usar instrucciones push para guardar los argumentos de salidaNo usar la zona roja en el código x86-64No usar el registro sbNo usar registros para paso de parámetrosNo usar la tendencia de la pilaNo usar structs en alineación más fuerte para copias double-wordNo usar la opción MAC16 de XtensaNo usar la opción MIN/MAX de XtensaNo usar la opción MUL16 de XtensaNo usar la opción MUL32 de XtensaNo usar la opción NSA de XtensaNo usar la opción SEXT de XtensaNo usar la opción de registro booleano de XtensaNo usar la opción de densidad del código XtensaNo usar la unidad de coma flotante de XtensaNo usar las instrucciones de campos de bitNo usar la instrucción divideNo permitir referencias a memoria sin alinearNo utilizar el Conjunto de Instrucciones VisualesNo avisar sobre el uso de 'long long' cuando se use -pedanticNo avisar si los métodos heredados no están implementadosNo evitar el bug de multiplicación de hardwareNo evitar el bug de hardware storemRenombrar los símbolos para BSDRenombrar los símbolos para X/OPENHace el paso completo de optimización de movimiento de registrosHacer el paso de optimización de copia-propagación de registrosHacer el paso de optimización de renombrado de registrosNo alinear elementos en el código o los datosNo alinear al tipo base del campo de bitNo pasar siempre los argumentos de coma flotante en memoriaNo anunciar características deprecadas del compiladorNo asumir que los accesos sin alinear son manejados por el sistemaNo llamar ninguna función de limpieza de cachéNo renombrar símbolosNo emitir bits de parada antes y después de asms extendidos con volatileNo forzar las constantes en los registrosNo generar código para una unidad de manipulación de bitsNo generar código para llamadas nearNo generar código para saltos nearNo generar instrucciones multiply/add de corto circuitoNo permitir que el alojador de registros use registros ybaseNo optimizar los movimientos de bloquesNo ptimizar las cargas de las direcciones lui/addiuNo mostrar la salida de estadísticas del compiladorNo pasar los parámetros en los registrosNo avisar pedantemente sobre los usos de extensiones MicrosoftNo colocar las constantes de coma flotante en TOCNo colocar las constantes símbolo+desplazamiento en TOCNo mostrar impresiones adicionales de depuraciónNo producir código reubicable en el momento de ejecuciónNo hacer push de la cuenta de argumentos, depender de la tabla de símbolosNo poner las constantes sin valor inicial en ROMNo guardar DP entre ISR en el modelo de memoria smallNo calendarizar el inicio y el final del procedimientoNo establecer las definiciones de WindowsNo establecer la cadena hacia atrás (más rápido, pero más difícil de depurarNo atrapar la división entera por ceroNo atrapar desbordamientos en la división enteraNo usar instrucciones AltiVecNo usar EABINo utilizar secciones sdata/sbss relativas a GPNo usar PIC de IrixNo usar instrucciones MIPS16No usar PIC de OSFNo usar Mnemónicos-P para ramificacionesNo usar el grupo opcional de instrucciones PowerPC de Propósito GeneralNo usar el grupo opcional de instrucciones PowerPC de GráficasNo usar el conjunto de instrucciones PowerPC-64No usar la ROM en lugar de la RAMNo usar nombres de registro alternadosNo usar brasNo usar el caché de datos para referencias a memoria volatileNo usar PIC imbuídoNo usar fp de hardwareNo usar llamadas indirectasNo usar el postpase asm mips-tfileNo usar el acumulador de multiplicaciónNo usar únicamente una sola FP (32-bit)No usar nombres simbólicos de registroNo avisar sobre formatos de strftime que producen dos dígitos para el añoNo avisar sobre demasiados argumentos para las funciones de formatoNo avisar cuando todos los ctors/dtors son privadosNo avisar cuando las funciones friend sin plantillas son declaradas dentro de una plantillaNo avisar cuando el tipo convierte apuntadores a funciones miembroNo evitar el bug del primer hardware 4300Degradar los errores de concordancia a advertenciasLa matriz falsa dimensionada a (1) es de tamaño asumidoVolcar decls a un fichero .declVolcar la unidad de traducción completa a un ficheroValores/rangos case duplicados o traslapados en %0 y %1A la declaración END en %0 le falta la palabra clave `%A' requerida para procedimiento(s) interno(s) o módulo(s) unidos por %1ERROR: demasiados bloques básicos en el fichero .bb %s + Emitir reubicaciones de 16-bit a las áreas de datos smallEmitir reubicaciones de 32-bit a las áreas de datos smallEmitir código objeto ELFEmitir código que cumpla con IEEE, con excepciones inexactasEmitir código que cumpla con IEEE, sin excepciones inexactasEmitir código objeto ROSEEmitir información de grafo de llamadasEmitir código compatible con las herramientas TIEmitir código para el procesador Itanium (TM) paso BEmitir código para la extensión ISA byte/wordEmitir código para la extensión ISA de conteoEmitir código para la extensión ISA de move y sqrt de fpEmitir código para la extensión ISA de video en movimientoEmitir código para usar las extensiones de GASEmitir código usando directivas explícitas de reubicaciónEmitir símbolos comunes como símbolos débilesEmitir información de referencia cruzadaEmitir código semi-PICEmitir información de identificación en el fichero .sEmitir información especial de depuración para COMMON y EQUIVALENCE (desactivado)Emitir código de revisión de la pilaEmitir variables static const aún si no se usanEmitir bits de parada antes y después de asms extendidos con volatileEmitir información de depuración detallada en el código ensambladorActivar la información de la línea de depuración Dwarf 2 a través de as de GNUActivar las instrucciones MPY||ADD y MPY||SUBActivar la propagación de las constantes condicionales SSAActivar las optimizaciones SSAActivar las extensiones picoJava de TransmetaActivar la eliminación agresiva de código muerto SSAActivar la instanciación automática de plantillasHabilitar la depuración del extremo traseroActivar la compatibilidad con iC960 v2.0Activar la compatibilidad con iC960 v3.0Activar la compatibilidad con el ensamblador ic960Activar la salida de depuraciónActivar la depuraciónActivar el manejo de excepcionesActivar las instrucciones FP multiply/add y multiply/substract de corto circuitoActivar la relajación del enlazadorActivar la relajación del enlazadorActivar el relajamiento del enlazadorActivar las optimizaciones de mirilla específicas de la máquinaActivar casi todos los mensajes de avisoActivar nuevas características en desarrolloActivar las funciones paralelasPermitir guardar registros alrededor de llamadas de funciónActivar la calendarización entre bloques básicosHabilitar la prueba de la pilaActivar el soporte para objetos enormesActivar el uso de la instrucción DBActivar el uso de la instrucción RTPBActivar el uso de la instrucción RTPSActivar el uso de las instrucciones condicionales moveActivar el uso de sdata/scommon/sbssPermite una optimización de movimiento de registrosActiva una ejecución de paso de mirilla rtl antes de sched2Activar la predicción de probabilidades de ramificaciónFin de la lista de búsqueda. + Fin del fichero fuente antes de que empezara el bloque en %0Secuencia de escape en %0 fuera de rango por el carácterSe esperaba un operador binario entre las expresiones en %0 y en %1La declaración de tipo explícita para el intrínsico `%A' no coincide con la invocación en %0Exportar funciones aún si pueden ser inlineLa expresión en %0 tiene el tipo de dato o rango incorrecto para su contextoSe pasa el procedimiento externo como un argumento actual en %0 pero no está declarado explícitamente EXTERNALLos símbolos externos tienen un subrayado inicialComa sobrante en la declaración FORMAT en %0Se esperaba un campoNombres de campos en %0 para la definici{on de la estructura exterior -- especifíquelos en su lugar en una declaración RECORD subsecuenteContinuación con signo & en la primera columna en %0Las operaciones de coma flotante pueden capturarPara elinux, solicitar un tamaño de pila especificado para este programaPara la biblioteca de intrínsecos: pasar todos los parámetros en registrosForzar que la generación de RTL emita 3 operandos insns válidosForzar que todas las computaciones invariantes del ciclo sean fuera del cicloForzar las constantes dentro de registros para mejorar el levantamientoForzar que las funciones se alineen a un límite de 2 byteForzar que las funciones se alineen a un límite de 4 byteCaracterística Fortran 90 en %0 sin soporteForma específica de Fortran de -fbounds-checkLos inicios de las funciones son alineados a esta potencia de 2GCC aún no implementa adecuadamente los declaradores de matriz `[*]'GCSE desactivado: %d > 1000 bloques básicos y %d >= 20 bloques borde/básicosGCSE desactivado: %d bloques básicos y %d registrosGNU C no da soporte a -C sin usar -EGNU CPP versión %s (cpplib)Generar código 29000Generar código 29050Generar código i386 de 32bitGenerar código x86-64 de 64bitGenerar marcos de pila que cumplan con APCSGenerar encabezado C de características específicas de la plataformaGenerar código CAGenerar código CFGenerar información de depuración en el formato XCOFFGenerar información de depuración en el formato DWARF-1Generar información de depuración en el formato DWARF-2Generar salida ELFGenerar código H8/300HGenerar código H8/SGenerar código H8/S2600Generar código JAGenerar código JDGenerar código JFGenerar código KAGenerar código KBGenerar código MCGenerar código SAGenerar código SBGenerar información de depuración en el formato STABSGenerar información de depuración en el formato VMSGenerar información de depuración en el formato XCOFFGenerar una llamada a abortar si una funcion noreturn devuelveGenerar código big endianGenerar datos big endianGenerar las llamadas insns como llamadas indirectas, si es necesarioGenerar instrucciones charGenerar código que un ensamblador imbuído pueda manejarGenerar código asumiendo que el bit DW no está activadoGenerar código asumiendo que el bit DW está activadoGenerar código para el CPU C30Generar código para el CPU C31Generar código para el CPU C32Generar código para el CPU C33Generar código para el CPU C40Generar código para el CPU C44Generar código para as de GNUGenerar código para ld de GNUGenerar código para el ambiente de tiempo de ejecución GNUGenerar código as de IntelGenerar código para ld de IntelGenerar código para el ambiente de tiempo de ejecución NeXTGenerar código para un 520XGenerar código para un 68000Generar código para un 68020Generar código para un 68030Generar código para un 68040Generar código para un 68040, sin ninguna instrucción nuevaGenerar código para un 68060Generar código para un 68060, sin ninguna instrucción nuevaGenerar código para un 68302Generar código para un 68332Generar código para un 68851Generar código para un 68881Generar código para una DLLGenerar código para un FPA de SunGenerar código para una tarjeta Sun SkyGenerar código para una unidad de manipulación de bitsGenerar código para un cpu32Generar código para un 11/10Generar código para un 11/40Generar código para un 11/45Generar código para big endianGenerar código para el c1Generar código para el c2Generar código para el c32Generar código para el c34Generar códio para las funciones aún si están completamente inlineGenerar código para el CPU dadoGenerar código para memoria altaGenerar código para little endianGenerar código para memoria bajaGenerar código para memoria map1Generar código para memoria map2Generar código para memoria map3Generar código para memoria map4Generar código para llamadas nearGenerar código para saltos nearGenerar código para el C300Generar código para el C400Generar código para el M*Core M340Generar código para el chip especificado o la versión de CPUGenerar código que el ensamblador de unix pueda manejarGenerar código para revisar los límites antes de deferencias apuntadores y matricesGenerar código para revisar los límites de subíndices y subcadenasGenerar código usando escritura de byteGenerar código que use el FPUGenerar código con llamadas a bibliotecas para coma flotanteGenerar código sin registro GPGenerar información de depuración en el formato extendido por omisiónGenerar información de depuración en el formato por omisiónGenerar resultados de división con residuo que tenga el mismo signo que el divisor (no el del dividendo)Generar información de depuración en el formato DWARF-1 extendidoGenerar información de depuración en el formato STABS extendidoGenerar información de depuración en el formato XCOFF extendidoGeneral información de leyenda externaGenerar matemáticas de coma flotante usando el conjunto de instrucciones dadoGenerar instrucciones multiply/add de corto circuitoGenerar división inline, optimizada para latenciaGenerar división inline, optimizada para salidaGenerar código little endianGenerar datos little endianGenerar múltiples instrucciones load/storeGenerar load/store con instrucciones de actualizaciónGenerar código relativo al pcGenerar código independiente de posición, si es posibleGenerar instrucciones de precargado, si están disponibles, para matrices en ciclosGenerar código PIC reentranteGenerar código auto-reubicableGenerar sin, cos, sqrt para FPUGenerar instrucciones de cadena para movimiento de bloquesGenerar tablas de desenredo exactamente en cada límite de instrucciónEl nombre global `%A' en %0 tiene tipo diferente en %1 [info -f g77 M GLOBALS]El nombre global `%A' definido en %0 ya se había definido en %1 [info -f g77 M GLOBALS]El nombre global `%A' es %B en %0 pero es %C en %1 [info -f g77 M GLOBALS]Paréntesis gratuitos alrededor de la construcción con DO implícito en %0Hace que el frente emule aritmética COMPLEX para evitar `bugs'Secuencia de escape hexadecimal en %0 fuera de rangoEsconder los intrínsecos MIL-STD 1753Borrar los intrínsecos libU77Esconder los intrínsecos libU77 con interfaces erróneasEsconder los intrínsecos de FORTRAN que no es 77 que g77 soportaEsconder los intrínsecos de FORTRAN que no es 77 que F90 soportaEsconder los intrínsecos de FORTRAN que no es 77 que VXT FORTRAN soportaEsconder los intrínsecos de FORTRAN que no es 77 que f2c soportaNo se pasan las constantes hollerith y sin tipo como argumentosLa constante hollerith en %0 especifica %A más caracteres que los presentes en %1error de E/S en la salidaICE: se usa emit_insn donde se necesita emit_jump_insn: + INCLUDE en %0 no es la primera declaración en la línea de códigoISO C no permite ';' extra fuera de una funciónISO C no permite macros variadic nombradosISO C no permite el uso de `varargs.h'ISO C no tiene soporte para `++' y `--' en tipos complejosISO C no tiene soporte de `~' para conjugaciones complejasISO C no da soporte a tipos enteros complejosISO C no tiene soporte para `complex' simples que significan `double complex'ISO C no tiene soporte para structs/unions sin nombreISO C prohibe %s entre apuntadores a función y `void *'ISO C prohibe `goto *expr;'ISO C prohibe un fichero fuente vacíoISO C prohibe grupos de llaves dentro de expresionesISO C prohibe la conversión de un no escalar al mismo tipoISO C prohibe la conversión al tipo unionISO C prohibe la comparación de `void *' con un apuntador de funciónISO C prohibe expresiones condicionales entre `void *' y apuntadores de funcionesISO C prohibe una expresión condicional con sólo un lado voidISO C prohibe los tipos de función const o volatileISO C prohibe la definición de datos sin tipo o clase de almacenamientoISO C prohibe las llaves de iniciador vacíasISO C prohibe declaraciones adelantadas de parámetrosISO C prohibe las declaraciones posteriores para tipos `enum'ISO C prohibe las constantes numéricas imaginariasISO C prohibe las declaraciones etiquetadasISO C prohibe declaraciones de miembros con no miembrosISO C prohibe las funciones anidadasISO C prohibe la omisión del término medio de una expresión ?:ISO C prohibe la comparación entre apuntadores a funcionesISO C prohibe el obscurecimiento del parámetro `%s' de typedefISO C prohibe los tipos de función calificadosISO C prohibe el tipo calificado de devolución de una función voidISO C prohibe un rango de expresiones en las declaraciones switchISO C prohibe la especificación de rangos de elementos a iniciarISO C prohibe el subíndice de una matriz `register'ISO C prohibe tomar la dirección de una etiquetaISO C prohibe la dirección de una expresión castISO C prohibe el uso de expresiones de conversión como l-valoresISO C prohibe el uso de expresiones compuestas como l-valoresISO C prohibe el uso de expresiones condicionales como l-valoresISO C prohibe la matriz `%s' de tamaño ceroISO C prohibe la conversión de argumentos a tipo unionISO C requiere un argumento con nombre antes de `...'ISO C requiere espacios en blanco después del nombre de macroISO C restringe los valores de enumeración al rango de `int'ISO C++ no permite "%s" en #ifISO C++ no permite que `%T::%D' sea definido como `%T::%D'ISO C++ no permite valores nombrados de devoluciónISO C++ no da soporte a `long long'ISO C++ prohibe %s entre apuntadores de tipo `void *' y apuntadores a funcionesISO C++ prohibe el %s un apuntador de tipo `%T'ISO C++ prohibe %sing un enumISO C++ prohibe un iniciador agregado para newISO C++ prohibe una condición vacía para `%s'ISO C++ prohibe la aplicación de `sizeof' a un tipo de funciónISO C++ prohibe la aplicación de `sizeof' a una función miembroISO C++ prohibe la aplicación de `sizeof' a una expresión de tipo de funciónISO C++ prohibe aplicar `sizeof' al tipo `void' el cual es un tipo incompletoISO C++ prohibe las dimensiones de matriz con tipos con paréntesis en newISO C++ prohibe la asignación de matricesISO C++ prohibe grupos de llaves dentro de las expresionesISO C++ prohibe la llamada `::main' dentro del mismo programaISO C++ prohibe la conversión a un tipo no referente usado como l-valorISO C++ prohibe la conversión entre entre apuntador a función y apuntador a objetoISO C++ prohibe la conversión a un tipo de matriz `%T'ISO C++ prohibe la comparación entre apuntadores y enterosISO C++ prohibe literales compuestosISO C++ prohibe las declaraciones compuestas internas para iniciacionesISO C++ prohibe gotos calculadosISO C++ prohibe la declaración de `%s' sin tipoISO C++ prohibe la definición de tipos dentro de %sISO C++ prohibe la iniciación en la clase del miembro static `%D' que no es constanteISO C++ prohibe la iniciación en la matriz newISO C++ prohibe la iniciación del miembro `%D'ISO C++ prohibe la iniciación del miembro constante `%D' del tipo `%T' que no es enteroISO C++ prohibe la iniciación de la expresión new con `='ISO C++ prohibe declaraciones etiquetadasISO C++ prohibe que el miembro `%D' tenga el mismo nombre que la clase que lo contieneISO C++ prohibe el tipo anidado `%D' con el mismo nombre que la clase que lo contieneISO C++ prohibe las expresiones agregadas iniciadoras que no son constantesISO C++ prohibe la omisión del término medio de una expresión ?:ISO C++ prohibe un rango de expresiones en las declaraciones switchISO C++ prohibe que el miembro de datos static `%D' tenga el mismo nombre que la clase que lo contieneISO C++ prohibe el subíndice de una matriz de l-valoresISO C++ prohibe tomar la dirección de la función `::main'ISO C++ prohibe tomar la dirección de una función miembro limitada para formar un apuntador a la función miembro. Como `&%T::%D'ISO C++ prohibe tomar la dirección de una conversión a una expresión no l-valuadaISO C++ prohibe tomar la dirección de una etiquetaISO C++ prohibe tomar la dirección de una función miembro no estática sin calificar para formar un apuntador a la función miembro. Como `&%T::%D'ISO C++ prohibe el uso de `%s' en las instanciaciones explícitasISO C++ prohibe el uso de `extern' en instanciaciones explícitasISO C++ prohibe el uso de una lista de iniciadores para iniciar la referencia `%D'ISO C++ prohibe el uso de un apuntador de tipo `void *' en la sustracciónISO C++ prohibe el uso de un apuntador a una función en la sustracciónISO C++ prohibe el uso de un apuntador a un miembro en la sustracciónISO C++ prohibe el uso de un apuntador a un método en la sustracciónISO C++ prohibe la matriz de tamaño variableISO C++ prohibe la matriz `%D' de tamaño variableISO C++ prohibe una matriz de tamaño ceroISO C++ prohibe la matriz `%D' de tamaño ceroISO C++ prohibe structs anónimosISO C++ prohibe la conversión de `%#T' a `(...)'ISO C++ prohibe la sobrecarga del operador ?:ISO C89 no tiene soporte para declaradores de matriz `[*]'ISO C89 no da soporte a `long long'ISO C89 no tiene soporte para `static' o calificadores de tipo en las declaraciones de parámetros de matricesISO C89 no tiene soporte para tipos complejosISO C89 no tiene soporte para miembros de matriz flexiblesISO C89 prohibe la matriz `%s' cuyo tamaño no puede ser evaluadoISO C89 prohibe las literales compuestasISO C89 prohibe constantes enteras long longISO C89 prohibe las declaraciones mezcladas y códigoISO C89 prohibe la especificación de subobjetos a iniciarISO C89 prohibe el subíndice de una matriz no-lvaluadaISO C89 prohibe la matriz `%s' de tamaño variableISO C99 requiere que el resto de los argumentos sea usadoel ISR %s requiere de %d words de variables locales, el máximo es 32767Se esperaba un identificadorIgnorar el atributo dllimport para las funcionesIgnorar dllimport para funcionesImplementar vtables usando thunksDeclaración implícita de `%A' en %0Cuenta de iteración del ciclo do implícito de 0 (cero) para la variable de iteración `%A' en la declaración en %0Cuenta de paso del ciclo do implícito de 0 (cero) para la variable de iteración `%A' en la declaración en %0En %s `%s':En %s: variable sobreescrita y rangos de excepción en %dEn cualquierEn la unidad de bloque de datosEn el bloque comúnEn constructEn la entidadEn el fichero incluído de %s:%dEn el fichero incluído de %s:%uEn la funciónEn la función `%s':En la función miembro `%s':En la lista de nombresEn el programaEn la declaración de la funciónEn la subrutinaEn el tipo desconocidoIndicar el número de registros suaves disponiblesEl carácter inicial `%A' está en minúsculas en el nombre del símbolo en %0La iniciación a través de DATA y PARAMETER es de tipos compatiblesIniciando las variables locales y matrices a ceroConvertir a inline todas las operaciones de cadenas conocidasConstantes inline si pueden ser hechas en 2 insns o menosConstantes inline si sólo toman 1 instrucciónInsertar código de análisis de perfil basado en el programa arcInserta código de revisión de la pila en el programaInstrumentar funciones entrada/salida con llamadas de análisis de perfilEntero en %0 demasiado grandeIntegrar las funciones simples en sus invocadoresError interno del compilador -- no se puede realizar la operaciónError interno del compilador %s, en %s:%dError interno del compilador: Error al reportar rutinas reentradas. + Error interno: `%s' (programa %s) + Por favor envíe un reporte completo de error. + Vea %s para más instrucciones.Aborto interno de gcov. + Convertir internamente casi todo el código a mayúsculasPreservar internamente las mayúsculas y minúsculas del código fuenteEntremezclar los conjuntos de literales con código en la sección de textoSe pasa el intrínseco `%A' como un argumento actual en %0 pero no está declarado explícitamente INTRINSICIntrínseco `%A' referenciado %Bmente en %0, %Cmente en %1 [info -f g77 M EXPIMP]Se sabe que el intrínseco `%A', invocado en %0, no cumple con Y2K [info -f g77 M Y2KBAD]Intrínsecos en mayúsculasLetras de intrínsecos con mayúsculas/minúsculas indistintasIntrínsecos deletreados como p.e. SqRtExpresión de control inválidaDeclaración inválidaDeclaración inválida de o referencia al símbolo `%A' en %0 [observado inicialmente en %1]Exponente inválido en %0 para la constante real en %1; `%A' que no es dígito en el campo del exponenteDeclaración de expresión inválidaPrimer carácter inválido en %0 [info -f g77 M LEX]Declaración de inicio inválidaTipo de interfaz inválidoDeclaración de método inválida, se requiere un nombre de métodoDeclaración de método inválida, se requiere un tipo de devoluciónTipo de referencia inválidoElemento inválido en %0 en la expresión o subexpresión en %1Expresión de tipo inválidaExpresión de actualización inválidaUso inválido en %0 del operador de subcadenas en %1Los elementos en la lista de E/S que comienza en %0 son inválidos para la E/S dirigida por una lista de nombresel método Java `%D' tiene un tipo de parámetro `%T' que no es de Javael método Java `%D' tiene un tipo de devolución `%T' que no es de JavaLos objetivos de salto son alineados a esta potencia de 2Basura después del final de la expresión.Sólo generar tablas de desenredo para manejo de excepcioneslatencia de caché L%d desconocida para %sLa etiqueta %A ya se definió en %1 cuando se redefinió en %0Etiqueta en %0 inválida con indicador de continuación de línea en %1 [info -f g77 M LEX]La definición de la etiqueta %A en %0 en una declaración vacía (para %1)La definición de etiqueta en %0 es inválida en este tipo de declaraciónFalta la definición de etiqueta en %0 para la construcción DO que especifica la etiqueta en %1El número de etiqueta en %0 no está en el rango 1-99999Palabras claves del lenguaje con mayúsculas/minúsculas indistintasPalabras claves del lenguaje en mayúsculasPalabras claves del lenguaje deletreadas como p.e. IOStatPresentar tipos como en el gcc v1.3 de IntelLínea demasiado larga para %0 [info -f g77 M LEX]Enlazar programas/datos para estar en la memoria externa por omisiónEnlazar programas/datos para estar en la memoria del chip por omisiónEnlazar para emitir el programa en formato ELF (en lugar de mmo)Enlazar con libads.a, libc.a y crt0.oEnlazar con libmvme.a, libc.a y crt0.oEnlazar con libsim.a, libc.a y sim-crt0.oEnlazar con libyk.a, libc.a y crt0.oSímbolo local ajustable `%A' en %0El código de ciclo es alineado a esta potencia de 2MCU `%s' no tiene soporteel formato ECOFF de MIPS no permite el cambio de nombres de fichero dentro de funciones con #lineMMIX Interno: %s no es un int desplazableMMIX Interno: Registro erróneo: %dMMIX Interno: Valor erróneo para 'm', no es un CONST_INTMMIX Interno: No se puede decodificar este operandoMMIX Interno: Se esperaba un CONST_INT, no estoMMIX Interno: Se esperaba una constante, no estoMMIX Interno: Se esperaba un registro, no estoMMIX Interno: El último vararg nombrado no cabe en un registroMMIX Interno: Falta un case `%c' en mmix_print_operandMMIX Interno: Esto no es una constante:MMIX Interno: Esta no es una dirección reconocidaMMIX Interno: Tratando de mostrar una condición invertida de forma inválida:MMIX Interno: ¿Cuál es el CC de esto?MMIX Interno: ¿Cuál es el CC de esto?No se permite la declaración MODULE PROCEDURE en %0 porque INTERFACE en %1 no especifica un nombre genérico, operador o asignaciónHacer que 'char' sea signed por omisiónHacer que 'char' sea unsigned por omisiónHacer paralelas las instrucciones adyacentes cortas si es posibleHacer por omisión unsigned los campos de bitHacer enteros de 32 bits de anchuraHacer que no tengan tipo las constantes con prefijo-radical que no es decimalHacer que las cadenas literales sean `char[]' en lugar de `const char[]'Marcar datos como compartidos en lugar de privadosMarcar las cadenas como 'const char *'Cantidad máxima para una sola operación de incremento de pilaNo coinciden los requerimientos de EQUIVALENCE para la ubicación de `%A' en el desplazamiento de %C y %D bytes de `%B'Falta el especificador %A en la declaración en %0Falta el nombre de la claseFalta el término de tipo de claseFalta el paréntesis que cierra en %0 necesario para coincidir con los paréntesis abiertos en %1Falta(n) paréntesis que cierran en la declaración FORMAT en %0Falta el punto que cierra entre `.%A' en %0 y %1Faltan dos puntos en %0 en la referencia de subcadena para %1Coma faltante en la declaración FORMAT en %0Falta(n) el(los) nombre(s) de campo(s) para la definición de la estructura en %0 dentro de la definición de la estructura en %1Falta el primer operando binario para el operador binario en %0Falta el término de parámetro formalFalta el identificadorNo se encuentra el nombre de la interfazFalta el nombreFalta un número a continuación de `E' en la declaración FORMAT en %0Falta un número a continuación del punto en la declaración FORMAT en %0Falta un operando para el operador en %1 al final de la expresión en %0Expresión constante faltante o inválidaFalta el nombre de la estructura para la definición de la estructura externa en %0No se encuentra el nombre de la super claseFalta el términoFaltan término y ')' esperadosFaltan término y ']' esperadosFalta término o ')'Faltan término o ')' esperadosFalta un valor en %1 para el exponente de número real en %0Falta la variable de inicioTipos CHARACTER y no CHARACTER mezclados a través de COMMON/EQUIVALENCE -- por ejemplo, `%A' y `%B'Guardias múltiples de include pueden ser útiles para: + NAMELIST no tiene un soporte adecuado por la biblioteca de tiempo de ejecución para ficheros fuente con mayúsculas/minúsculas conservadosNOTE_INSN_BASIC_BLOCK %d en el medio del bloque básico %dNOTE_INSN_BASIC_BLOCK falta para el bloque %dse usó NULL en la aritméticaConstrucción %% anidada (%%VAL, %%REF, o %%DESCR) en %0Nunca agregar un segundo subrayado a los externosNunca optimizar el código de iniciación de las clases staticSin truco sucio "Clases de registro pequeñas"No hay un especificador UNIT= en la lista de control de E/S en %0No hay ramificaciones en el fichero %s + No hay ramificaciones en la función %s + No hay llamadas en el fichero %s + No hay llamadas en la función %s + No hay case para %sNo se especificaron componentes para %0 para la definición de tipo derivado que comienza en %1No se especificaron componente en %0 para el mapa que comienza en %1No se especificaron componentes para %0 para la la definición de la estructura que comienza en %1No está el crt0.o por omisiónNo hay código ejecutable asociado al fichero %s. + No hay líneas de código fuente ejecutable en el fichero %s + No hay líneas de código fuente ejecutable en la función %s + No hay definición de etiqueta para la declaración FORMAT en %0No hay especificación para el iterador del DO implícito `%A' en %0Secuencia de escape que no es estándard ISO `\%A' en %0Carácter no numérico en %0 en el campo de etiqueta [info -f g77 M LEX]Una expresión constante que no es entero en el ciclo do implícito en la declaración en %0Argumento nulo en %0 para la invocación del procedimiento en %1Argumento nulo en %0 para la referencia de la declaración de función en %1Carácter nulo en %0 -- línea ignoradaElemento nullo en %0 para la referencia de matriz en %1Número de registros usados para pasar argumentos enterosOmitir el marco de referencia para las funciones hojasSolamente los constructores pueden invocar constructoresEmitir solamente instanciaciones explícitas para plantillas inlineEmitir solamente instanciaciones explícitas de plantillasSólo ejecutar una instrucción por cicloSólo preservar 32 bits del registro FP entre llamadasEl operador en %0 tiene una preferencia menor que aquél en %1 -- use paréntesisOptimizar los movimientos de bloquesOptimizar para 32032Optimizar para el cpu 32332Optimizar para el cpu 32532Optimizar para 3900Optimizar para 4650Optimizar para los procesadores CypressOptimizar para los procesadores F930Optimizar para los procesadores F934Optimizar para los procesadores SparcLiteOptimizar para procesadores SuperSparcOptimizar las cargas de las direcciones lui/addiuOptimizar las llamadas recursivas hermanadas y de extremoOptimizar las instrucciones de la llamada del extremo en el ensamblador y el enlazadorOpciones: + Generar código extra para datos iniciadosObtener iniciadores globales con formato para ld de GNUMostrar la salida de estadísticas del compiladorGenerar información extra de depuración en el ambiente LuxworksTamaños de instrucción de salida al fichero asmFuera de cualquier unidad de programa: + Anular -mbest-lib-optionsHacer de lado el tipo debajo de wchar_t por `unsigned short'La generación de código PIC no es compatible con las llamadas rápidas indirectas + La generación de código PIC no tiene soporte en el modelo transportable de tiempo de ejecución + el registro PIC aún no está preparadoPRINT_OPERAND apuntador nuloPRINT_OPERAND: puntuación desconocida '%c'PRINT_OPERAND_ADDRESS, apuntador nuloLa declaración PUBLIC o PRIVATE en %1 no se puede especificar junto con la declaración PUBLIC o PRIVATE en %0Empaqueta juntos a los miembros de la estructura sin agujerosPasar el texto puro de -assert al enlazadorPasar los argumentos FP en los registros FPPasar todos los argumentos en la pilaPasar los argumentos en los registrosPasar los argumenotos en la pilaPasar los parámetros en los registros (por omisión)Pasar algunos argumentos en registrosPoner atención a la palabra clave 'inline'Realizar la eliminación de DWARF2 duplicadosRealizar un número de optimizaciones menores y costosasRealizar el movimiento de la carga mejorada durante la eliminación de subexpresiones globalesRealizar optimizaciones de hilado de saltosRealizar el desenrollamiento del ciclo para todos los ciclosRealizar el desenrollamiento del ciclo cuando se conoce la cuenta de iteraciónRealizar el movimiento de guardado después de la eliminación de subexpresiones globalesRealizar optimizaciones de reducción de fuerzaRealizar optimización de la llamada del extremoRealizar la eliminación de subexpresiones comunes globalesEl punto en %0 no está seguido de dígitos para un número de coma flotante o por `NOT.', `TRUE.' o `FALSE.'Permitir accessos sin alinearColocar la cuenta de argumentos en una instrucción nop (más rápido que push)Colocar las constantes de coma flotante en TOCColocar las constantes símbolo+desplazamiento en TOCColocar las direcciones variables en el TOC normalPor favor tenga esto presente antes de reportar `bugs'.Por favor envíe un reporte completo de `bugs', + con el código preprocesado si es apropiado. + Vea %s para más instrucciones. + Los apuntadores son 32-bitLos apuntadores son 64-bitPreferir las ramas sobre la ejecución condicionalPreferir accesos word sobre accessos bytePreceder a los símbolos globales con ":" (para usarse con PREFIJO)Preservar los 40 bits del registro FP entre llamadasPreservar todo el deletreo (mayúsculas/minúsculas) usado en el programaPretender que el anfitrión y el objetivo utilizan el mismo formato de FPMostrar información de cobertura de código. + + Imprime información de la versión específica del compilador g77, ejecuta pruebas internasMuestra la información interna relacionada con la depuraciónMostrar los nombres de las unidades de programa mientras son compiladasProcesar directivas #identProcesando la especificación %c%s%c, el cual es '%s' + Producir código big endianProducir código reubicable en el momento de ejecuciónProducir código little endianNo se da soporte a análisis de perfil en este objetivo.El análisis de perfil usa mcountEl programa no utiliza las características del dialecto Unix-f77El programa en un dialecto cercano a Fortran-90El programa está escrito en una forma libre cercana a Fortran-90El programa está escrito en VXT (como Digital) FORTRANEl programa está escrito en el dialecto típico FORTRAN 66El programa está escrito en el dialecto típico Unix f77El nombre de programa en %0 es superfluo, no se especificó una declaración PROGRAM en %1El nombre de unidad de programa en %0 no es el mismo que el nombre en %1Programa escrito en minúsculasPrograma escrito estrictamente con mayúsculas y minúsculas mezcladasPrograma escrito en mayúsculasProhibir la llamada a funciones relativas al PCColocar todo en el TOC normalPoner los conjuntos de literales en una sección literal separadaPoner las constantes sin valor inicial en ROM (necesita -membedded-data)La declaración RETURN en %0 es inválida dentro de una unidad de programa principalRETURN_ADDRESS_OFFSET no tiene soporteRevisión RTL: acceso de elt %d de `%s' con el último elt %d en %s, en %s:%dRevisión RTL: acceso de elt %d de vector con el último elt %d en %s, en %s:%dRevisión RTL: se esperaba el código `%s' ó ``%s', se tiene `%s' en %s, en %s:%dRevisión RTL: se esperaba el código `%s', se tiene `%s' en %s, en %s:%dRevisión RTL: se esperaba el tipo elt %d '%c' ó '%c', se tiene '%c' (rtx %s) en %s, en%s:%dRevisión RTL: se esperaba el tipo elt %d '%c', se tiene '%c' (rtx %s) en %s, en %s:%dEspecificación de rango en %0 inválida para la declaración CASE dentro de la declaración SELECT CASE de tipo lógicoLeyendo especificaciones de %s + Reconocer and/bitand/bitor/compl/not/or/xorReducir el tamaño de los ficheros objetoReferencia al intrínseco genérico `%A' en %0 puede ser para formar %B o %CLa referencia a la etiqueta en %1 es inconsistente con la referencia anterior en %0La referencia a la etiqueta en %1 es inconsistente con su definición en %0La referencia a la etiqueta en %1 está fuera del bloque que contiene la definición en %0El registro sb es cero. Se usa para direccionamiento absolutoReordenar los bloques básicos para mejorar la ubicación del códigoReemplazar add,compare,branch con branch en la cuenta de registrosReemplazar la ruta del sistemaReportar el alojamiento en memoria permanente al final de la ejecuciónReportar el tiempo tomado por cada paso del compilador al final de la ejecuciónRequerir rutinas de biblioteca matemática que cumplan con IEEE (OSF/1)Recalendarizar las instrucciones después del alojamiento de registrosRecalendarizar las instrucciones antes del alojamiento de registrosRetener información de la leyendaRetener la información MXDB estándardDevolver los agregados 'short' en memoria, no en registrosDevolver los agregados 'short' en registrosRegresar todas las estructuras en memoria (por omisión en AIX)Devolución de resultados de coma flotante en ac0Devolución de resultados de coma flotante en memoriaRegresar las estructuras pequeñas en registros (por omisión en SVR4)El valor de devolución `%A' para la FUNCTION en %0 no está referenciado en el subprogramaDevolver valores de funciones en registros FPUReusar r30 basado por funciónEjecutar un paso CSE después de las optimizaciones de ciclosEjecutar el optimizador de ciclos dos vecesLa declaración o atributo SAVE en %1 no se puede espeficicar junto con la declaración o atributo SAVE en %0SELECT CASE en el tipo CHARACTER (en %0) no tiene soporte -- perdónel conjunto de instrucciones SSE está desactivado, usando la aritmética 387Igual que: -mep -mprolog-functionSe usa el mismo nombre `%A' para %B en %0 y para %C en %1 [info -f g77 M INTGLOB]Guardar DP entre ISR en el modelo de memoria smallGuardar los ficheros temporales en el ambiente LuxworksCódigo de calendarizador para el CPU dadoCalendarizador para el CPU dadoEl ámbito de las variables de la declaración de inicio de for se extiende hacia afueraSegunda ocurrencia de CASE DEFAULT en %0 dentro de un SELECT CASE en %1Segunda ocurrencia de ELSE WHERE en %0 dentro de WHERE en %1Seleccionar la convención de llamada ABISeleccionar el CPU para el cual se genera códigoSeleccionar el método para el manejo de sdataEl punto y coma en %0 es un elemento inválidoSerializar las referencias a memoria volátil con instrucciones MEMWEstablecer las definiciones de WindowsEstablecer la cadena hacia atrásEstablecer la ruta de clasesEstablecer la ruta de clases (deprecado: utilice en su lugar --classpath)Establecer errno después de las funciones matemáticas internasEstablecer la alineación máxima a 4Establecer la alineación máxima a 8Estableciendo la dirección de inicio de los datosEstableciendo la dirección de inicio del programaEstablecer el bit PPC_EMB en los interruptores del encabezado ELFEstablecer el tamaño máximo de datos elegibles para el área SDAEstablecer el tamaño máximo de datos elegibles para el área TDAEstablecer el tamaño máximo de datos elegibles para el área ZDAEstablecer la longitud máxima de líneaCambiando la especificación de %s a '%s' + + Área de datos small: none, sdata, useModelo de memoria smallLa especificación en %0 requiere la especificación ADVANCE=`NO' en la misma lista de control de E/SLa especificación en %0 requiere la especificación FMT= explícita en la misma lista de control de E/S Especificar el ABI a utilizarEspecificar el CPU para propósitos de generación de códigoEspecificar el CPU para propósitos de calendarizaciónEspecificar el ISA de MIPS StandardEspecificar un nombre alternativo para la sección bssEspecificar un nombre alternativo para la sección de constantesEspecificar un nombre alternativo para la sección de datosEspecificar un nombre alternativo para el chip dsp16xxEspecificar un nombre alternativo para la sección de textoEspecificar la función de limpieza de cachéEspecificar el número máximo de iteraciones para RPTSEspecificar la profundidad máxima de instanciación de plantillasEspecifica el rango de registros a convertir en fijosEspecificar el tamaño de long double (64 ó 128 bits)Especifica que los argumentos pueden ser alias de cada otro y de los globalesEspecificar el nombre MCUEspecificar la dirección inicial de la pilaEspecificar la alineación mínima de bit de las estructurasEspecificar el nombre de la clase para cadenas constantesEspecificar el nombre del CPU destinoEspecificar el nombre de la arquitectura destinoEspecificar el orden de asignación de registrosEspecificar el registro a usar para el direccionamiento PICEspecificar la versión del emulador de coma flotanteNúmero espurio en la declaración FORMAT en %0Signo espurio en la declaración FORMAT en %0Texto espurio adicional al número en la declaración FORMAT en %0Coma final espuria precediendo al terminador en %0La declaración en %0 sigue al bloque ELSE para la construcción IF en %1Declaración en %0 inválida en la unidad de programa BLOCK DATA en %1La declaración en %0 es inválida en el contexto establecido por la declaración en %1La declaración en %0 es inválida en este contextoLa declaración en %0 debe especificar el nombre de la construcción especificada en %1La función de declaración `%A' está definida en %0 pero no se usaAlmacenar nombres de función en el código objetoAlmacenar los locales en los registros de argumentoGuardar las cadenas en la sección de datos modificablesReducir la fuerza de todas las variables generales de inducción de cicloEl punto de inicio/fin de la subcadena en %0 está fuera del rango definidoSubcadena de la entidad `%A' que no es CHARACTER en la declaración EQUIVALENCEDar soporte para funciones internas 3DNow!Soporte para el ABI Green HillsDar soporte para funciones internas y generación de código MMX y SSEDar soporte para funciones internas MMXDar soporte para funciones internas y generación de código MMX, SSE y SSE2Soporte a llamadas entre los conjuntos de instrucciones Thumb y ARMSoporte para el paso de mensajes con el Ambiente ParaleloSoporte para excepciones síncronas no de llamadasSuprimir la salida de notas de números de instrucción y números de linea en los volcados de depuraciónInterruptores: + -include Incluye el contenido del antes de otros ficheros + -imacros Aceptar definiciones de macros en el + -iprefix Especificar la como un prefijo para las siguientes dos opciones + -iwithprefix Agregar el ectorio al final de la ruta de inclusión del sistema + -iwithprefixbefore Agregar el ectorio al final de la ruta de inclusión principal + -isystem Agregar el ectorio al inicio de la ruta de inclusión del sistema + Nombres de símbolo en minúsculasNombres de símbolo en mayúsculasNombres de símbolo deletreados con mayúsculas/minúsculas mezcladasLos símbolos son precedidos por un subrayadoTomar al menos un viaje a través de cada ciclo DO iterativoEl objetivo no tiene I&D divididoEl objetivo tiene I&D divididoLa máquina objetivo no tiene soporte para DOUBLE COMPLEX, especificado en %0La máquina objetivo no tiene soporte para la entidad compleja del tipo especificado en %0Apuntar al procesador AM33La opción -march es incompatible con -mipsN y por lo tanto se ignora.La MMU atrapará los accesos no alineadosLa cantidad máxima de memoria a ser asignada por GCSELa longitud máxima de la lista de operaciones pendientes del calendarizadorEl número máximo de instrucciones en una función para ser elegible para inliningEl número máximo de instrucciones para considerar el llenado de una ranura de retrasoEl número máximo de instruccions para considerar la búsqueda de información de registros en vivo exactaEl número máximo de pasos a realizar cuando se hace GCSEel significado de `\a' (en %0) varía con -traditionalel significado de `\x' (en %0) varía con -traditionalEsto es software libre; vea el código para las condiciones de copia. NO hay + garantía; ni siquiera para MERCANTIBILIDAD o IDONEIDAD PARA UN PROPÓSITO EN + PARTICULAR + + Modelo de hilos: %s + Thumb: Asumir que los apuntadores de función pueden ir a código no informado sobre ThumbThumb: Asumir que las funciones no static pueden ser llamadas desde código ARMThumb: Generar marcos de pila (hojas) aún si no es necesarioThumb: Generar marcos de pila (no-hojas) aún si no es necesarioJunto con -fpic y -fPIC, no utilizar referencias GOTPLTMuy %B argumentos para `%A' en %0 contra la invocación en %1 [info -f g77 M GLOBALS]Se pasaron muy %B argumentos a `%A' en %0 contra la definición en %1 [info -f g77 M GLOBALS]Muy pocos elementos (falta %A) para %0 para la referencia de matriz en %1Muy pocos elementos en la referencia a la matriz `%A' en la declaración EQUIVALENCEMuy pocos valores iniciales en la lista de iniciadores para `%A' en %0Demasiados elementos para %0 para la referencia de matriz en %1Demasiados elementos en la referencia a la matriz `%A' en la declaración EQUIVALENCEDemasiados valores iniciales en la lista de iniciadores que comienza en %0El tamaño total de las variables locales excede el límite de la arquitectura.Coma al final de la llamada al procedimiento denota un argumento nuloAtrapar desbordamientos signed en adición / sustracción / multiplicaciónAtrapar la división entera por ceroAtrapar desbordamientos en la división enteraTratar todos los avisos como erroresTratar los valores iniciales de 0 como valores que no son ceroTratar las variables locales y los bloques COMMON como si fueran nombrados en declaraciones SAVETruncando caracteres en el lado derecho de la constante de carácter en %0Truncando caracteres en el lado derecho de la constante hollerith en %0Truncando datos que no son cero del lado izquierdo de la constante numérica en %0Truncando datos que no son cero del lado izquierdo de la constante sin tipo en %0Ajustar alineación para el chip especificado o la versión de CPUAjustar la latencia esperada de memoriaActivar el código de prueba del mantenedorDos operadores aritméticos en una fila en %0 y %1 -- use paréntesisDesacuerdo de tipo y/o parámetro de tipo entre el valor CASE o el valor dentro del rango en %0 y SELECT CASE en %1Desacuerdo de tipo entre las expresiones en %0 y %1El nombre de tipo en %0 no es el mismo que el nombre en %1Constante sin tipo en %0 demasiado grandeUNKNOWN en print_operand !?UNKNOWN en s390_output_symbolic_const !?No se puede abrir el fichero INCLUDE `%A' en %0']' desbalanceadoEtiqueta indefinida, primero referenciada en %0EOF inesperado mientras se leía el fichero de código fuente %s. + Locales sin valores iniciales en .bssLocales sin valores iniciales en .dataSecuencia de escape desconocida `\%A' en %0Secuencia de escape desconocida: `\' seguida por el código de caracter 0x%A en %0Interruptor -mlong-double-%s desconocidoEspecificador FORMAT no reconocido en %0Carácter no reconocido en %0 [info -f g77 M LEX]Especificador de FORMAT sin soporte en %0Declaración VXT sin soporte en %0Operando sin soporte para ** en %1 -- se convirtió a INTEGER por omisiónSin soporte; afecta la generación de código de las matricesSin soporte; no genera código de llamada a libf2cSecuencia de escape sin terminar `\' en %0Modo de empleo: %s [opciones] fichero... + Modo de empleo: gcov [OPCIÓN]... FICHERO-FUENTE + + Use .EQV./.NEQV. en lugar de .EQ./.NE. en %0 para los operandos LOGICAL en %1 y %2Usar long doubles de 128 bitUsar int de 16 bitUsar float de 32 bitUsar int de 32 bitUsar ABI de 32-bitUsar registros FP de 32-bitUsar registros generales de 32-bitUsar tipo long de 32-bitUsar entradas de 4 byte en las tablas de switchUsar float de 64 bitUsar long doubles de 64 bitUsar ABI de 64-bitUsar registros FP de 64-bitUsar registros generales de 64-bitUsar tipo int de 64-bitUsar tipo long de 64-bitUsar longs de 64-bitUsar los registros ABI reservadosUsar instrucciones AltiVecUsar la interfaz CygwinUsar sintaxis de ensamblador DECUsar EABIUtilizar el as de GNUUtilizar secciones sdata/sbss relativas a GPUsar reglas de alineación H8/300Usar matemática IEEE para comparaciones fpUsar PIC de IrixUtilizar el as de MIPSUsar instrucción MPYI para C3xUsar soporte de hilos específico de MingwUsar la interfaz Mingw32Usar PIC de OSFUsar Mnemónicos-P para ramificaciones predichas estáticamente como tomadasUsar el conjunto de instrucciones POWERUsar el conjunto de instrucciones POWER2Usar el grupo opcional de instrucciones PowerPC de Propósito GeneralUsar el grupo opcional de instrucciones PowerPC de GráficasUsar el conjunto de instrucciones PowerPCUsar el conjunto de instrucciones PowerPC-64Usar la ROM en lugar de la RAMUsar sintaxis de ensamblador UNIXUsar el ISA V8 SparcUsar fp VAXUsar alineación VAX-CUsar __cxa_atexit para registrar destructoresUsar direcciones que reserven registros globalesUsar entradas de función hojas alternadasUsar nombres de registro alternadosUsar la interfaz desnuda WindowsUsar el orden de byte big-endianUsar instrucciones de campos de bitUsar bras para el ejecutable < 64kUsar registros de llamada alterada para los parámetros y el valor de devoluciónUsar longs de 32-bit compatibles con cc y libcUsar modos de direccionamiento complejosUsar el caché de datos para referencias a memoria volatile (por omisión)Usar la convención de llamada diferente usando 'rtd'Usar instrucciones CALLn directas para llamadas rápidasUsar PIC imbuídoUsar instrucciones de comparación de coma flotante que respeten epsilonUsar conversión de coma flotante a entero rápida pero aproximadaUsar características del código de calendarizador and para el CPU dadoUsar las características de y el calendarizador del CPU dadoUsar el modelo plano de ventana de registroUsar registros fpUsar el modelo de código del Sparc dadoUsar el dialecto del ensamblador dadoUsar el modelo de código del x86-64 dadoUsar coma flotante de hardwareUsar instrucciones de hardware para coma flotanteUsar fp de hardwareUsar instrucciones de fp quad de hardwareUsar nombres de registro in/loc/outUsar instrucciones CALLXn indirectas para programas grandesUsar llamadas indirectasUsar registros globales del núcleoUsar modelo de memoria largeUsar llamadas a bibliotecas para realizar las operaciones de FPUsar el orden de byte little-endianUsar el orden de byte little-endian para los datosUsar mcount para análisis de perfilUsar mcount_ptr para análisis de perfilUsar el postpase asm mips-tfileUsar pseudo ops mips16 de entry/exitUsar el acumulador de multiplicaciónUsar instrucciones de fp para multiplicar-acumularUsar los mnemónicos nuevos para la arquitectura PowerPCUsar convención de llamada normalUsar modelo de memoria normalUtilizar tablas de desplazamiento para llamadas a métodos virtualesUsar los mnemónicos antiguos para la arquitectura PowerPCUsar la información de análisis de perfil para las probabilidades de ramificaciónUsar instrucciones push para guardar los argumentos de salidaUsar la zona roja en el código x86-64Usar la pila de registros para los parámetros y el valor de devoluciónUsar registros para paso de parámetrosUsar únicamente una sola FP (32-bit)Usar conversión de coma flotante a entero lenta pero exactaUsar modelo de memoria smallUsar coma flotante de softwareUsar tendencia de la pilaUsar secuencia de llamada estándard, con palabra de cuenta de argumentosUsar structs en alineación más fuerte para copias double-wordUsar cabos para los prólogos de funciónUsar subrutinas para el prólogo/epílogo de funciónUsar nombres simbólicos de registroUsar la versión 26-bit del APCSUsar la versión 32-bit del APCSUsar el registro BK como un registro de propósito generalUsar la interfaz CygwinUsar la interfaz Mingw32Usar la opción MAC16 de XtensaUsar la opción MIN/MAX de XtensaUsar la opción MUL16 de XtensaUsar la opción MUL32 de XtensaUsar la opción NSA de XtensaUsar la opción SEXT de XtensaUsar la opción de registro booleano de XtensaUsar la opción de densidad del código XtensaUsar la unidad de coma flotante de XtensaUsar las instrucciones de campos de bitUsar la mayor cantidad de características permitidas por otras opcionesUsar el mismo tamaño para double que para floatUsar el entero adecuado más pequeño para contener enumeradosUsar referencias a memoria sin alinearUsar registros globales del usuarioUsar cargas de memoria de extensión cero, no las de extensión con signoUsando especificaciones internas. + Utilizar el Conjunto de Instrucciones VisualesmodoVOID en una salidaEspecificador de FORMAT de expresión variable en %0 -- sin soporteAvisar por funciones de conversión a tipos incompatiblesAvisar sobre conversiones que descartan calificadoresAvisar sobre código que nunca se ejecutaráAvisar sobre construcciones cuyo significado cambia en ISO CAvisar acerca de constructores con significados sorprendentesAvisar sobre switches enumerados que carezcan de un case específicoAvisar sobre externs que no están en el nivel del alcance del ficheroAvisar sobre la aritmética de apuntadores de funcionesAvisar sobre funciones que podrían ser candidatas para el atributo noreturnAvisar por funciones que podrían ser candidatas para atributos de formatoAvisar sobre funciones globales sin declaraciones previasAvisar sobre funciones globales sin prototiposAvisar sobre la declaración implícita de funcionesAvisar sobre tipos inconsistentes de devoluciónAvisar sobre declaraciones múltiples del mismo objetoAvisar sobre destructores no virtualesAvisar sobre declaraciones de función sin prototipoAvisar sobre cadenas de formato que no son cadenas literalesAvisar sobre nombres de funciones virtual sobrecargadasAvisar sobre conversión de apuntadores que incremente la alineaciónAvisar sobre posibles paréntesis faltantesAvisar sobre posibles problemas de seguridad con funciones de formatoAvisar sobre posibles violaciones a las reglas de secuencia de puntoAvisar sobre la posibilidad de conversión de tipos confusasAvisar sobre posibles llaves faltantes alrededor de iniciadoresAvisar sobre anomalías de formato de printf/scanf/strftime/strfmonAvisar sobre la devolución de estructuras, unions o matricesAvisar sobre comparaciones signed/unsignedAvisar sobre subíndices cuyo tipo es 'char'Avisar sobre declaraciones sospechosas de mainAvisar sobre la equidad de pruebas de números de coma flotanteAvisar sobre el uso de la directiva #importAvisar sobre variables automáticas sin iniciarAvisar sobre pragmas no reconocidosAvisar sobre el uso de (sólo algunas por ahora) extensiones FortranAvisar sobre el uso de literales multicaracteresAvisar sobre usos de declaraciones __attribute__((deprecated))Avisar violaciones de reglas de estilo de Effective C++Avisar si los ficheros .class están desactualizadosAvisar cuando se use una conversión de estilo C en un programaAvisar si un selector tiene métodos múltiplesAvisar si se encuentran declaraciones vacías deprecadasAvisar si se especifican modificadores cuando no son necesariosAvisar si se detectan comentarios anidadosAvisar cuando una declaración no especifique un tipoAdvertir cuando el argumento de una función es una estructuraAvisar cuando una función es declarada extern y luego inlineAvisar cuando no se use una funciónAvisar cuando no se use un parámetro de una funciónAvisar cuando no se use una etiquetaAvisar cuando un marco de pila sea más grande que el tamaño especificadoAvisar cuando no se use una variableAvisar cuando no se use un valor de una expresiónAvisar cuando una función inline no puede ser inlineAvisar cuando se desactivó un paso de optimizaciónAvisar cuando una variable local obscurece otraAvisar cuando la sobrecarga promueva de unsigned a signedAvisar cuando se requiere relleno para alinear a los miembros de un structAvisar cuando el comportamiento de síntesis difiera de CfrontAvisar cuando el compilador reordene códigoAvisar cuando el atributo packed no tiene efecto en la disposición de un structAvisar si se encuentran trigrafosCuando sea posible no generar marcos de pilaCuando se esté ejecutando CSE, seguir a los saltos condicionalesCuando se esté ejecutando CSE, seguir a los saltos a sus objetivosEvitar el bug del primer hardware 4300Evitar el bug de multiplicación de hardwareEvitar el bug de hardware storemno se definió YYDEBUGSe especificaron cero o un mapa en %0 para la unión que comienza en %1 -- se requieren por lo menos dosConstante de carácter de longitud cero en %0Matriz de tamaño cero en %0Especificación de tamaño cero inválida en %0[Dejando %s] + [¡¡REPORTAR BICHO!!][¡¡REPORTAR BICHO!!] %[no se puede encontrar %s][super ...] debe aparecer en el contexto de un métodose usó \x en %0 sin dígitos hexadecimales a continuaciónse usó \x sin dígitos hexadecimales a continuación_Pragma lleva una cadena literal entre paréntesis__VA_ARGS__ solamente puede aparecer en la expansión de una macro variadic C99__alignof__ aplicado a un tipo de dato incompletono se da soporte a __builtin_eh_return en este objetivoel segundo argumento de __builtin_longjump debe ser 1no se da soporte a __builtin_saveregs en este subobjetivono se da soporte a __builtin_saveregs en este objetivoopción ` 'opción `!'opción `#'no se pueden sobrecargar `%#D' y `%#D'`%#D' no puede ser declarado`%#D' causa conflicto con la declaración previa en uso `%#D'`%#D' no se refiere al tipo sin calificar, así que no se usa para el enlazado`%#D' esconde el destructor para `%#T'`%#D' inválido; un union anónimo sólo puede tener miembros con datos no estáticos`%#D' no es un miembro static de `%#T'`%#D' necesita un impositor finalse declaró `%#D' previamente aquíse definió `%#D' previamente aquí`%#D' redeclarado como %C`%#D' redeclarado como un tipo diferente de símbolose usa `%#D' previo a la declaraciónse usó `%#D' antes de que fuera declarado inline`%#T' no tiene un miembro llamado `%D'`%#T' tiene miembros apuntadores a datos`%#T' tiene funciones virtuales pero destructores no virtuales`%#T' no es una plantilla`%#T' no es un tipo válido para un parámetro constante de plantilla`%#T' solamente define un destructor privado y no tiene friends`%#T' solamente define constructores privados y no tiene friendsse usó un `%#T' donde se esperaba un `%T'se usó un `%#T' donde se esperaba un valor de coma flotante`%%%c' sólo produce los dos últimos dígitos del año`%%%c' sólo produce los dos últimos dígitos del año en algunos lugaresse usó la restricción `%%' con el último operandoel operando `%%d' no es un registroel operando `%%l' no es una etiqueta`%+#D' es inaccesible`%+#D' es privado`%+#D' está protegidoacceso `%D'`%D' como declarador`%D' sólo puede ser especificado para constructores`%D' sólo puede ser especificado para funciones`%D' sólo puede ser especificado para objetos y funciones`%D' sólo puede ser especificado dentro de una clase`%D' no se puede declarar virtual, ya que siempre es static`%D' no puede tener argumentos por omisión`%D' fue declarado como un %s `virtual'`%D' declarado como un friend`%D' fue declarado como un %s `inline'`%D' declarado como referencia pero no es iniciado`%D' declarado con una excepción de especificación`%D' denota un tipo ambiguo`%D' no declara un tipo de plantilla`%D' ya ha sido declarado en `%T'`%D' tiene un tipo de dato incompleto`%D' declarado implícitamente antes de su definición`%D' inválido en `%#T'`%D' inválido en `%T'`%D' es un nombre de espacio`%D' ya es un friend de la clase `%T'`%D' ya se ha declarado en este ámbito`%D' ya está definido en `%T'`%D' ya se ha definido en la clase `%T'`%D' ya está definido en la clase %T`%D' no es una plantilla de función`%D' no es una función,`%D' no es un miembro de tipo `%T'`%D' no es un nombre de espacio`%D' es demasiado pequeño para guardar todos los valores de `%#T'`%D' debe ser una función miembro que no sea staticse debe declarar `%D' antes de su uso`%D' debe ser una función miembro no estático o una función no miembro`%D' debe ser iniciado por un constructor, no por `{...}'`%D' debe tener un argumento de tipo clase o enumerado`%D' debe tomar `void'`%D' debe tomar uno o dos argumentos`%D' debe tomar cero o un argumentos`%D' debe tomar cero o un argumentos exactamente`%s' debe tomar cero o dos argumentos exactamente`%D' nombra al constructorno se declaró `%D'`%D' no está definido`%D' debe ser iniciado explícitamente en la lista de iniciación de miembros`%D' debería ser declarado dentro de `%D'`%D' debe regresar por valor`%D' sin declarar (primero use esta función)`%D' no declarado en el espacio de nombres `%D'se usa `%D' sin parámetros de plantilla`%D' estaba escondido`%D' no fue declarado en este ámbito`%D' fue declarado previa e implícitamente para devolver `int'`%D::%D' no es una plantillano se puede usar `%E' como una funciónno se puede usar `%E' como un apuntador miembro, porque es de tipo `%T'`%E' tiene tipo `void' y no es una expresión throw`%E' no es un tipo, use `typename %E' para hacerlo un tipo`%E' no es un argumento de plantilla válido`%E' no es de tipo `%T'`%T' no tiene una clase o union llamado `%D'`%T' falla al ser un typedef o un tipo interno`%T' falla en ser un tipo agregado`%T' ya es un friend de `%T'`%T' es una base ambigua de `%T'`%T' es una base inaccesible de `%T'`%T' implícitamente es un nombre de tipo`%T' no es una claso o un espacio de nombres`%T' no es una clase o tipo union`%T' no es de tipo clase, struct o union`%T' no es un nombre de espacio`%T' no es de tipo apuntador-a-objeto`%T' no es una plantilla`%T' no es un tipo plantilla`%T' no es una expresión válida`%T' no es un tipo agregado`%T' especificado como id de declarador`%T::%D' no es una declaración válidalos calificadores `%V' no se pueden aplicar a `%T'`%s %T' declara un tipo nuevo en el ámbito del nombre de espacioel atributo `%s' aplica solamente a funcionesel argumento del atributo `%s' no es una cadena constanteel argumento del atributo `%s' no es una constante enterael atributo `%s' sólo se puede aplicar a definiciones de clases Javael atributo `%s' solo se puede aplicar a definiciones de clasese ignora la directiva de atributo `%s'el atributo `%s' no aplica a tiposse ignora el atributo `%s'se ignora el atributo `%s' para `%s'el atributo `%s' no tiene soporte en esta plataformael atributo `%s' aplica solamente a tipos de funcionesel atributo `%s' aplica solamente a funcionesel atributo `%s' aplica solamente a funciones de interrupciónel atributo `%s' solamente aplica a variablesel atributo `%s' requiere una constante entera como argumento`%s' no se puede ubicar estáticamente`%s' declarado `static' pero nunca se definió`%s' es declarado como exportado a e importado de una DLL al mismo tiempo`%s' que es declarado como función devuelve una función`%s' que es declarado como función devuelve una matriz`%s' declarado inline antes de ser llamado`%s' declarado inline después de su definición`%s' definido normalmente y como un aliasse definió `%s' pero no se usó`%s' no responde a `%s'`%s' falla al ser un typedef o un tipo interno del compilador`%s' tiene un tipo de dato incompleto`%s' tiene `extern' y asignador de valor inicial al mismo tiempo`%s' ignorado, tiene conflicto con `-g%s'`%s' iniciado y declarado como `extern'`%s' es un formato de tipo de función no reconocido`%s' está deprecado`%s' está deprecado (declarado en %s:%d)`%s' es más estrecho que los valores de su tipo`%s' no es ni función ni función miembro; no puede ser declarado friend`%s' generalmente es una función no estática`%s' no es un nombre de clase válido`%s' no está en el inicio de la declaración`%s' no está definido fuera del ámbito de la función`%s' es obsoleto; las vtables de g++ ahora son compatibles con COM por omisión`%s' se promueve a `%s' cuando pasa a través de `...'`%s' generalmente es una función`%s' es externa localmente pero estática globalmente`%s' se debería usar sin iniciar en esta función`%s' no tiene soporte para %s`%s' redeclarado como un tipo diferente de símbolose usó la marca `%s' al nombrar a`%#T'`%s' sólo toma cero o dos argumentos`%s' no ha sido declarado aquí (primero úselo en esta función)`%s' no ha sido declarado aquí (no en una función)se usa `%s' pero nunca se definióse usa `%s' previo a la declaración`%s' fue declarado `extern' y después `static'`%s' se declaró implícitamente `extern' y después `static'`%s' fue declarado previa e implícitamente para devolver `int'se usó `%s' sin declaración antes de su definiciónse usó `%s' sin prototipo antes de su definición`%s': opción -g desconocida o sin soportese usó la restricción `&' sin una clase de registroopción `''opción `('opción `+'opción `-'`-gnat' mal deletreado como `-gant'`-p' no tiene soporte; use `-pg' y gprof(1)el manejador `...' debe ser el último manejador para su bloque try`...' en una lista de identificadores de estilo antiguo`/*' dentro de un comentarioopción `0'`::%D' sin declarar (primer uso aquí)`>>' debe ser `> >' en el nombre de clase de la plantillafalta un `@end' en el contexto de una implementación`@end' debe aparecer en el contexto de una implementaciónel operando `B' tiene establecidos múltiples bitsel operando `B' no es una constantemodificador `E'opción `I'modificador `O'opción `^'opción `_'`__alignof' applicado a un campo de bitsse llamó a `__builtin_next_arg' sin un argumentoopción `a'un `and' de pruebas equivalentes mutuamente exclusivas siempre es 0la restricción del operando `asm' es incompatible con el tamaño del operandoel operando `asm' requiere una recarga imposibleno se permiten los especificadores `asm' en miembros de datos no estáticos`bool' ahora es una palabra claveespecificadores de función `const' y `volatile' en `%D' inválidos en la declaración %sla etiqueta `default' no está dentro de una declaración switch`defined' debe ser seguido por ident o (ident)`enum %s' declarado en la declaración inicial del ciclo `for'se declaró `enum %s' dentro de la lista de parámetrosel `enum %s' incompleto en el ámbito termina aquíse usó la declaración inicial del ciclo `for' fuera del modo C99no se permiten `inline' en la declaración de la especialización friend de la plantilla `%D'se especificó `inline' para la declaración de clase friend`long long long' es demasiado largo para GCCno se convierte la expresión de switch `long' a `int' en ISO C`main' debe devolver `int'la función `noreturn' devuelvela función `no return' devuelve un valor que no es voidel operando `o' no es una constante`operator delete' debe devolver el tipo `%T'`operator delete' toma el tipo `%T' como primer argumento`operator new' no debe regresar NULL a menos que se declare `throw()' (o -fcheck-new esté en efecto)`operator new' debe devolver el tipo `%T'`operator new' toma el tipo `size_t' (`%T') como primer argumento`operator=' debe devolver una referencia a `*this'un `or' de pruebas no equivalentes sin coincidencia siempre es 1`return' con valor, en una función que devuelve void`return' sin valores, en una función que no devuelve void`sigof' aplicado a una expresión no agregada`sigof' aplicado a un tipo no agregado`sizeof' aplicado a un campo de bitssizeof aplicado a un tipo de dato incompleto `%T'`sizeof' aplicado a miembro que no es static`static' puede no ser utilizado cuando se define (opuesto a la declaración) un dato miembro static`struct %s' declarado en la declaración inicial del ciclo `for'se declaró `struct %s' dentro de la lista de parámetrosel `struct %s' incompleto en el ámbito termina aquí`this' no está disponible para funciones miembro static`union %s' declarado en la declaración inicial del ciclo `for'se declaró `union %s' dentro de la lista de parámetrosel `union %s' incompleto en el ámbito termina aquíse usó `va_start' en una función con argumentos fijos`void' en la lista de parámetros debe ser la lista completano se puede especificar un atributo de área de datos para variables localesuna declaración globalun long long intun parámetrouna lista de parámetros con una elipsis no puede coincidir con una declaración de nombre de lista de parámetros vacía.un local previouna declaración de uso no puede especificar un id de plantilla. Intente `using %T::%D'una declaración de uso no puede especificar un id de plantilla. Intente `using %D'aborto en %s, en %s:%dnombre de fichero absoluto en remap_filenameel declarador abstracto `%T' se utilizó como una declaraciónmétodo abstracto en la clase que no es abstractase solicitó la dirección de la variable de registro global `%s'se devolvió la dirección de la variable local `%D'no se puede usar la dirección de `%E' que no es externo como un argumento de plantilladirección de la función sobrecargada sin información contextual de tipose solicitó la dirección de la variable register `%s'el desplazamiento de dirección no es una constantese solicitó la dirección de `%D', el cual se declaró como `register'ajustando los apuntadores de devoluciones covariantesdespués de la especificación previa en `%#D'el agregado `%#D' tiene un tipo incompleto y no se puede definirel agregado tiene un iniciador con llaves parcialesel iniciador agregado no es una constanteel iniciador agregado usa aritmética complicadase usó un valor agregado donde se esperaba un complejose usó un valor agregado donde se esperaba un floatse usó un valor agregado donde se esperaba un enteroel argumento de alias no es una cadenalas definiciones de alias no tienen soporte en esta configuración; ignoradasel nombre de alias es demasiado largo - se ignora el aliasla alineación no puede ser especificada para `%s'la alineación debe ser una potencia pequeña de dos, no %dla alineación de `%s' es mayor que la alineación máxima del fichero objeto. Se usa %dtodos las funciones miembros en la clase `%T' son privadaslista de retardo asignada pero sin uso en el epílogohace ambigua la declaración interna `%#D'hace ambigua la declaración antigua `%#D'abreviación ambigua %sinstanciación de plantilla clase ambigua para `%#T'conversión ambigua para índice de matrizconversión de tipo por omisión ambigua desde `%T'especialización de plantilla ambigua `%D' para `%+D'un union anónimo no puede tener funciones miembroun tipo de argumento que tiene una promoción por omisión no puede coincidir con una declaración de nombre de lista de parámetros vacía.un unsigned long intun unsigned long long intiniciador de clase base de estilo antiguo anacrónicouso anacrónico del tamaño de la matriz desconocida en vector deletey los apuntadores son de %d bits de anchura, pero g77 aún no trabajaagregado anónimo sin miembrosenum anónimo declarado dentro de una lista de parámetrosstruct anónimo declarado dentro de una lista de parámetrosstruct anónimo no se encuentra dentro de un tipo nombradounion anónimo declarado dentro de una lista de parámetroslos macros variadic anónimos se introdujeron en C99los argumentos que recibirán formato no son '...'el argumento #%d es una estructurael argumento 1 de __builtin_altivec_predicate está fuera de rangoel argumento 1 de __builtin_altivec_predicate debe ser una constanteel argumento 3 para `%s' debe ser una literal de 2-bitel argumento `%s' no coincide con el prototipoel argumento `%s' podría ser sobreescrito por `longjmp' o `vfork'el argumento es una estructurafalta un argumento después de %sel argumento del atributo `%s' no es "ilink1" o "ilink2"el argumento del atributo `%s' no es una cadena constanteel argumento de `__builtin_args_info' debe ser constanteel argumento de `__builtin_args_info' está fuera de rangoel argumento de `builtin_eh_return_regno' debe ser constanteel argumento de `asm' no es una cadena constanteel argumento de tipo `%T' no coincide con `%T'el argumento para el atributo `%s' es más grande que %dfalta el argumento para `%s'falta el argumento para `%s' + falta el argumento para `-%s'falta el argumento para `-B'falta el argumento para `-V'falta el argumento para `-Xlinker'falta el argumento para `-b'falta el argumento para `-l'falta el argumento para `-specs'falta el argumento para `-specs='falta el argumento para `-x'argumentos dados a la macro `%s'aritmética en apuntador a un tipo de dato incompletose asume que la matriz `%s' tiene un elementoel índice de matriz en el valor inicial excede los límites de la matrizíndice de matriz en valor inicial que no es de matrizel rango de índices de la matriz en el valor inicial excede los límites de la matrizmatriz con valores iniciales asignados de una expresión matrizal que no es constantefalta el tamaño de la matriz en `%D'falta el tamaño de la matriz en %sel subíndice de la matriz tiene tipo `char'el subíndice de la matriz no es un enteroel tipo matriz tiene tipo de elemento incompletose usa un valor de tipo matriz cuando se requiere un escalarlas matrices de funciones no tienen significadocomo `%D'la declaración asm causa conflictos con el renombrado previoel operando asm %d probablemente no coincide con las restriccionesla plantilla asm no es una cadena constantefalta una aserción después de %safirmación sin predicadoasignaciónasignación (no asignación de valores iniciales) en la declaraciónsupresión de la asignaciónla asignación al campo final `%s' no está en el constructorla asignación para el campo final `%s' no está en el campo de la clasela asignación para el campo final estático `%s' no está en el iniciador de la claseasumiendo la conversión al tipo `%T' desde la función sobrecargadaasumiendo el apuntador a miembro `%D'en este punto en el ficherose intentó tomar la dirección del miembro de la estructura de campos de bits `%D'se intentó tomar la dirección del miembro de la estructura de campos de bits `%s'intento de usar "%s" envenenadose ignoran los atributos en los declaradores de parámetros de matrizcaracteres de barra invertida y fin de línea separados por espaciono hay caractér de barra invertida o fin de línea al final del ficherorango de PC erróneo para la información de depuración para `%s' localdirección erróneadirección errónea, no (reg+disp)cantidad errónea de eliminación de espacio de pila: %diniciador de matriz erróneollamada errónea a d30v_move_2wordsdirectiva errónea -- falta una comilla que cierreversión de encabezado erróneainsn erróneo para 'A'insn erróneo en d30v_print_operand, caso 0insn erróneo para d30v_print_operand, modificador 'A':insn erróneo para d30v_print_operand, modificador 'M':insn erróneo para d30v_print_operand, modificador 'f':insn errónea para d30v_print_operand_address:insn erróneo para d30v_print_operand_memory_reference:insn erróneo para print_operand, modificador 'B':insn erróneo para print_operand, modificador 'E':insn erróneo para print_operand, modificador 'F' o 'T':insn erróneo para print_operand, modificador 'R':insn erróneo para print_operand, modificador 's':número mágico erróneonúmero mágico erróneo en el fichero '%s'firma de método erróneamodes_tieable_p erróneos para el registro %s, modo1 %s, modo2 %spc erróneo en exception_tableversión de encabezado textual errónearegistro erróneocódigo de extensión de registro erróneodesplazamiento insn erróneo:constante de cadena erróneaprueba erróneatipo erróneo en la información de parámetros de depuraciónvalor erróneo (%s) para el interruptor %svalor erróneo (%s) para el interruptor -mabi=valor erróneo (%s) para el interruptor -march=valor erróneo (%s) para el interruptor -masm=valor erróneo (%s) para el interruptor -mcmodel=valor erróneo (%s) para el interruptor -mcpuvalor erróneo (%s) para el interruptor -mcpu=valor erróneo (%s) para el interruptor -mfpmath=valor erróneo (%s) para el interruptor -mipsvalor erróneo (%s) para el interruptor -mmodelvalor erróneo (%s) para el interruptor -msdatavalor erróneo (%s) para el interruptor -mtune=valor erróneo `%s' para el interruptor -mcpuvalor erróneo `%s' para el interruptor -mfp-rounding-modevalor erróneo `%s' para el interruptor -mfp-trap-modevalor erróneo `%s' para -mmemory-latencyvalor erróneo `%s' para el interruptor -mtrap-precisionvalor erróneo del tipo constante %d, índice %dvalor erróneo para -mcall-%svalor erróneo para -msdata=%sfichero zip/jar %s erróneodirectiva mal formada -- comilla sin cerrarencabezados C mal anidados del preprocesadorlista de parámetros con puntuación errónea en un #definebase `%T' con sólo un constructor que no es por omisión en una clase sin un constructorla clase base `%#T' tiene un destructor no virtualla clase base `%#T' debe ser iniciada explícitamente en la copia del constructorla clase base `%T' ya se ha iniciadola clase base `%T' tiene calificadores cvla clase base `%T' tiene tipo de dato incompletoiniciador base para `%T'iniciadores base para `%#T'el objeto base `%E' de la llamada de método del ambiente es del tipo no agregado `%T'el operando base de `->' tiene el tipo `%T' que no es apuntadorel operando base de `->' no es un apuntadorel tipo base `%T' falla en ser un tipo struct o claseel bloque básico %d pred edge está corruptolas listas de borde del bloque básico %i están corruptaslos bloques básicos no están numerados consecutivamentecampo de bits `%#D' con tipo no enterola anchura del campo de bits `%D' no es una constante enterael campo de bits `%s' tiene un tipo inválidoel tipo de campo de bit `%s' es inválido en ISO Cla anchura del campo de bits `%s' no es una constante enterablock_num = %ld, num_blocks = %d + construcción JARL ambigua: %d + construcción JR ambigua: %d + se requieren registros booleanos para la opción de coma flotantese encuentran los sufijos `f' y `l' al mismo tiempo en una constante de coma flotantese especifica long y short al mismo tiempo para `%s'se especifica signed y unsigned al mismo tiempo para `%s'un grupo de llaves dentro de una expresión sólo se permite dentro de una funciónllaves alrededor del valor inicial escalarllaves alrededor del valor inicial escalar para `%T'la ramificacion %d nunca se ejecuta + ramificación %d tomada = %s + ramificación %d tomada = %s%% + la declaración break no está dentro de un ciclo o switchla función interna `%s' no es declarada como funciónno se soporta actualmente la función interna `%s'c4x_address_cost: Modo inválido de direccionamientoc4x_operand_subword: dirección no desplazablec4x_operand_subword: dirección inválidac4x_operand_subword: autoincremento inválidoc4x_operand_subword: modo inválidoc4x_operand_subword: operando inválidoc4x_print_operand: inconsistencia %%Lc4x_print_operand: inconsistencia %%Nc4x_print_operand: inconsistencia %%Oc4x_print_operand: Operando case erróneoc4x_print_operand_address: Operando case erróneoc4x_print_operand_address: post_modify erróneoc4x_print_operand_address: pre_modify erróneoc4x_rptb_insert: No se puede encontrar la etiqueta de inicioc4x_rptb_rpts_p: Se movió la etiqueta princiapl del bloque de repetición + c4x_valid_operands: Error internola llamada %d nunca se ejecuta + la llamada %d devuelve = %s + la llamada %d devuelve = %s%% + la llamada de `(%T) (%A)' es ambiguala llamada del `%D(%A)' sobrecargado es ambiguallamada a `catch' ó `throw' de Java con `jthrowable' sin definirllamado a constructor Java con `%s' sin definirllamado a constructor Java, mientras `jclass' está indefinidoregistro de llamada alterada usado para una variable de registro globalllamado desde aquíel objeto llamado no es una funciónllamando al tipo `%T' como un métodono se pueden manejar llamadas inconsistentes a `%s'solo se puede usar el atributo `%s' en definiciones de rango de fichero de objetos de tipo classNo se puede accesar a la parte imaginaria de un valor complejo en un registro fijono se puede accesar a la parte real de un valor complejo en un registro fijono se puede cerrar %sno se puede cerrar el fichero de entrada %sno se puede cerrar el fichero temporalno se puede convertir entre valores vectoriales de tamaños diferentesno se puede convertir desde el tipo de dato incompleto `%T' a `%T'no se puede convertir el valor a un vectorno se puede crear el directorio %sno se puede crear el fichero de información de repositorio `%s'la no se puede definir la función friend `%s' en una definición de clase localno se puede hacer la revisión de dependencias con entrada desde entrada estándardno se puede expandir %sno se puede encontrar un registro en la clase `%s' mientras se recarga `asm'no se puede encontrar class$no se puede obtener el directorio actualno se puede tener varargs con -mfp-arg-in-fp-regsno se pueden iniciar la función friend `%s'no se pueden hacer la llamada inline a `%s'no se puede hacer `%D' en un método -- no está en una claseno se puede deshacer %sno se puede abrir abrir %sno se puede abrir %s para escriturano se puede abrir el fichero de salida `%s'no se puede leer desde el fichero temporalno se puede redefinir el valor por omisión de devoluciòn para los constructoresno se puede reabrir %sno se puede rebobinar el fichero temporalno se puede establecer el atributo `%s' después de la definiciónno se puede especificar `-D' sin `--main' + no se puede usar '%s' como un registro %sno se puede escribir al fichero de salidacandidato%s: %+#Dno se puede %s un apuntador a un tipo incompleto `%T'no se puede asignar un objeto de tipo `%T'no se puede aplicar el apuntador a miembro `%E' a `%E', el cual es del tipo no agregado `%T'no se puede llamar al destructor `%T::~%T' sin un objetono se puede llamar a la función miembro `%D' sin un objetono se puede convertir `%E' desde el tipo `%T' al tipo `%T'no se puede convertir `%T' a `%T' para el argumento `%P' para `%D'no se puede convertir `%T' a `%T' en %sno se puede convertir de la base `%T' al tipo derivado `%T' a través de la base virtual `%T'no se puede convertir a un tipo apuntadorno se puede convertir del tipo `%T' al tipo `%T'no se pueden crear un apuntador al miembro referencia `%D'no se puede crear el fichero temporalno se puede crear la información de tipo para el tipo `%T' porque su tamaño es variableno se puede declarar %s a referenciasno se puede declarar `%D' que sea un tipo de campo de bitsno se puede declarar `::main' como templateno se puede declarar `::main' como inlineno se puede declarar `::main' como staticno se puede declarar el campo de bits `%D' con un tipo de funciónno se puede declarar que el campo `%D' sea de tipo `%T'no se puede declarar el miembro `%T::%s' dentro de `%T'no se puede declarar que la función miembro `%D' tenga enlazado estáticono se puede declarar la función miembro `%T::%s' dentro de `%T'no se puede declarar que el parámetro `%D' sea de tipo `%T'no se pueden declarar un apuntador al miembro `%#T'no se pueden declarar apuntadores a referenciasno se pueden declarar referencias a referenciasno se puede declarar una función static dentro de otra funciónno se puede declarar que la variable `%D' sea de tipo `%T'no se puede borrar una función. Solamente los apuntadores a objetos son argumentos válidos para `delete'no se puede desactivar la función interna `%s'no se puede reemplazar el registro-zno se puede hacer dynamic_cast `%E' (de tipo `%#T') al tipo `%#T' (%s)no se puede declarar explícitamente que el miembro `%#D' tenga un enlazado externono se puede encontrar `%s'no se encuentra `ldd'no se puede encontrar `nm'no se puede encontrar el método de la clase (de fábrica)no se puede encontrar la clase `%s'no se puede encontrar el fichero para la clase %sno se puede encontrar la declaración de interfaz para `%s'no se puede encontrar la declaración de interfaz para `%s', superclase de `%s'no se puede encontrar el métodono se puede encontrar la declaración de protocolo para `%s'no se puede encontrar la marca de referencia para la clase %sno se puede encontrar la fuente %sno se pueden iniciar `%D' para el espacio de nombres `%D'no se pueden iniciar `%T' desde `%T'no se pueden asignar valores iniciales a matrices usando esta sintaxisno se pueden asignar valores iniciales a matrices multidimensionales con el iniciadorno se puede hacer inline la función `main'no se puede optimizar la división para latencia y salida al mismo tiempono se puede pasar objetos de tipo `%#T' que no es POD a través de `...'no se puede poner objeto con campo volatile en registerno se puede recibir objetos de tipo `%#T' que no es POD a través de `...'no se puede recargar operandos constantes enteros en `asm'no se puede resolver la función sobrecargada `%D' basándose en la conversión al tipo `%T'no se puede regresar de un manejador de una función-intenta-bloque de un constructorno se puede establecer el atributo de interrupción: no hay función actualno se puede establecer el atributo de interrupción: no hay tal identificadorno se puede especificar -o con -c ó -S y con múltiples compilacionesno se puede especificar la clase `main' cuando no se está enlazandono se pueden especificar -C y -o al mismo tiempono se puede tomar la dirección del campo de bits `%s'no se puede tomar la dirección de `this' que es una expresión rvalueno se puede usar `::' en la declaración de parámetrosno se puede usar typeid sin -fno-rttino se puede usar va_start en una función de interrupciónla etiqueta case `%E' no se encuentra dentro de una declaración switchla etiqueta de `case' no se reduce a una constante enterala etiqueta case no se encuentra dentro de una declaración switchel valor de case `%ld' no es un tipo enumeradoel valor de case `%ld' no es un tipo enumerado `%s'la conversión agrega calificadores nuevos al tipo funciónla conversión descarta los calificadores del tipo del destino del apuntadorla conversión no coincide con el tipo de la funciónla conversión de `%T' a `%T' descarta los calificadores del tipo del destino del apuntadorla conversión de `%T' a `%T' incrementa la alineación requerida del tipo del destinoconversión de apuntador a entero de tamaño diferentela conversión incrementa la alineación requerida del tipo del destinola conversión especifica el tipo matrizla conversión especifica el tipo funciónse usa la conversión a un tipo no referenciado como un l-valorconversión a apuntador desde un entero de tamaño diferenteconversión a tipo union desde un tipo no presente en unionla conversión de `%T' a `%T' no dereferencía a los apuntadoreserror de cccp: tipo de dispersión especial inválidocambia el significado de `%D' a partir de `%+#D'cambiando el orden de búsqueda para el directorio del sistema "%s"matriz de caracteres con valores iniciales asignados de una cadena anchaconstante de carácter demasiado largaescoja entre big o little endian, no ambosescoja entre m340 o m210, no ambosescogiendo `%D' sobre `%D'dependencia circular en los argumentos por omisión de `%#D'herencia circular en la declaración de interfaz para `%s'se detectó una delegación de apuntador circularla clase '%s' no tiene un método llamado '%s' que coincida con la firma '%s'la clase `%T' no tiene ningún campo llamado `%D'la clase `%T' es implícitamente friend con sí mismaya existe la clase `%s'la clase `%s' no implementa el protocolo `%s'close %dcerrar %sel modelo de código %s no tiene soporte en el modo PICel modelo de código `%s' no tiene soporte en el modo de bit %saún no hay soporte para el modelo de código `large'collect2 versión %scollect: leyendo %s + collect: recompilando %s + collect: reenlazando + collect: alterando %s en %s + coma al final de la lista de enumeradoresexpresión coma utilizada para iniciar el valor de devoluciónoperador coma en operando de #ifno es segura la comparacion de coma flotante con == o !=comparación entre `%#T' y `%#T'comparación entre apuntador y enterocomparación entre signed y unsignedcomparación entre expresiones enteras signed y unsignedcomparación entre los tipos `%#T' y `%#T'la comparación siempre es %dla comparación siempre es %d debido a la anchura del campo de bitla comparación siempre es falsa debido al rango limitado del tipo de datosla comparación siempre es verdadera debido al rango limitado del tipo de datoscomparación de apuntadores completos e incompletosla comparación de diferentes tipos de apuntador carece de una conversióncomparación de un ~unsigned promovido con una constantecomparación de un ~unsigned promovido con unsignedla comparación de una expresión unsigned < 0 siempre es falsala comparación de una expresión unsigned >= 0 siempre es verdaderalas comparaciones como X<=Y<=Z no tienen su significado matemáticose solicitó la compilación de fichero de encabezadocompilación terminada. + la constante entera compleja es demasiado ancha para `complex int'complex inválido para `%s'la concatenación de literales de cadena con __FUNCTION__ está deprecado. Esta característica será eliminada en el futuroconfiguration: REAL, INTEGER, y LOGICAL son de %d bits de anchura,configuration: char * guarda %d bits, pero INTEGER sólo %d -- + la declaración ASSIGN podría fallarconfiguration: char * guarda %d bits, pero ftnlen sólo %despecificaciones de acceso en conflicto para el campo `%s', ignoradoespecificaciones de acceso en conflicto para el método `%D', ignoradose definieron arquitecturas en conflicto - usando las series Cse definieron arquitecturas en conflicto - usando las series Kdeclaraciones de `%s' en conflictotipos de devolución en conflicto especificados para `%#D'el nombre de la super clase `%s' causa conflictotipos en conflicto para `%#D'tipos en conflicto para `%s'tipos en conflicto para la función interna `%s'causa conflicto con la declaración interna `%#D'causa conflicto con la declaración de la función `%#D'tiene conflictos con la declaración nueva con el enlace %Lcausa conflictos con la declaración previa `%#D'const `%s' no puede ser declarado `mutable'la declaración const para '%s' a continuación de una no constlos objetos const no pueden ir en .sdata/.sbssconst_double_split recibió un insn erróneo:el constructor no puede ser una función miembro de tipo staticel constructor para la clase extranjera `%T' no puede ser un miembrose usó la sintaxis de constructor, pero no se declaró un constructor para el tipo `%T'los constructores no pueden ser declarados virtuallos constructores no pueden ser `%s'la declaración continue no está dentro dentro de un cicloel control alcanza el final de una función que no es voidconversión de NaN a intconversión de NaNa a unsigned intconversión de `%#T' a `%#T'la conversión de `%T' a `%T' descarta los calificadoresla conversión de `%T' a `%T' es ambiguase solicitó la conversión desde `%T' al tipo no escalar `%T'la conversión carece de tipo al final del formatola conversión de `%E' desde `%T' a `%T' es ambiguala conversión a %s%s nunca usará un operador de conversión de tipoconversión a tipo de dato incompletose solicitó conversión a tipo no escalarconvirtiendo NULL a un tipo que no es apuntadorconvirtiendo de `%T' a `%T'la conversión de la función sobrecargada `%D' al tipo `%#T' es ambiguainformación de análisis de perfil corrupta: la prueba para %d-%d debería ser %dno se puede convertir 0x%l.8x en una regiónno se puede convertir `%E' a `%T'no se puede convertir el argumento de plantilla `%E' a `%T'no se puede encontrar un registro de vaciadono se pudo encontrar un campo class$ en el tipo de interfaz java `%T'no se puede encontrar el fichero de especificaciones %s + no se puede abrir el fichero de volcado `%s'no se puede dividir insnno se puede determinar el nombre del objetivo para la revisión de dependenciascreando %screando la matriz de `%T'creando la matriz con tamaño cerocreando la matriz con tamaño cero (`%E')creando un apuntador a función miembro del tipo `%T' que no es clasecreando un apuntador al miembro del tipo `%T' que no es clasecreando un apuntador al miembro de referencia de tipo `%T'salto cruzado desactivado: %d > 1000 bloques básicos y %d >= 20 bloques borde/básicosel fichero actual es más antiguo que %sd30v_emit_comparisonel área de datos de '%s' en conflicto con una declaración previala definición de datos no tiene tipo o clase de almacenamientoiniciador de datos en el anfitrión con `endianness' diferentelos datos miembros `%D' no puede ser una plantilla miembroel tipo de datos de `%s' no es adecuado para un registrola constante decimal es tan grande que es unsignedpunto decimal en el exponente - ¡Imposible!la declaración no declara nada}existe la declaración para el parámetro `%s' pero no hay tal parámetrola declaración de la función C `%#D' tiene conflictos conla declaración de `%#D'la declaración de `%#D' tiene `extern' y tiene valor inicialla declaración de `%#D' fuera de la clase no es una definiciónla declaración de `%#D' obscurece un parámetroredeclaración de `%D' como %sla declaración de `%D' como una matriz multidimensional debe tener límites para todas las dimensiones excepto la primerala declaración de `%D' como una no funciónla declaración de `%D' no está en un espacio de nombres alrededor de `%D'la declaración de `%F' arroja excepciones diferentesla declaración de `%s' como una matriz de funcionesla declaración de `%s' como una matriz de voidsla declaración de `%s' tiene `extern' y tiene valor inicialla declaración de `%s' obscurece a %sla declaración de `%s' obscurece a un miembro de `this'la declaración de `%s' obscurece un parámetrola declaración de `%s' obscurece un símbolo de la lista de parámetrosdeclaración de la variable `extern' `%s' en la declaración inicial del ciclo `for'declaración de `%s' que no es variable en la declaración inicial del ciclo `for'declaración de la variable static `%s' en la declaración inicial del ciclo `for'redeclaración de la plantilla `%#D'falta el id del declarador; utilizando la palabra reservada `%D'decremento de apuntador a estructura desconocidael argumento por omisión `%E' usa la variable local `%D'el argumento por omisión de `%#D' tiene tipo `%T'el argumento por omisión para el parámetro del tipo `%T' tiene el tipo `%T'argumento por omisión dado para el parámetro %d de `%#D'falta el argumento por omisión para el parámetro %P de `%+#D'se especificó un argumento por omisión en la especialización explícitano se permiten los argumento por omisión en la declaración de la especialización friend de la plantilla `%D'la iniciación por omisión de `%#D', el cual tiene el tipo de referenciadefiniendo la especialización explícita `%D' en la declaración friendla definición de `%#T' dentro de la lista de parámetros de plantilladefinición de la matriz `%#D' en una condicióndefinición de la clase `%T' en una condicióndefinición del enum `%T' en una condiciónla definición de `%D' declarado implícitamentese provee una definición para instanciación explícitael borrar `%T' está indefinidoborrando la matriz `%#D'conversión deprecada de una constante de cadena a `%T'uso deprecado de la etiqueta al final de la declaración compuestadeferenciando el apuntador `void *'apuntador deferenciado a tipo de dato incompletounion derivada `%T' inválidael destructor `%T' debe coincidir con el nombre de la clase `%T'el destructor no puede ser una función miembro de tipo staticel destructor para la clase extranjera `%T' no puede ser un miembroel nombre del destructor `~%T' no coincide con el tipo `%T' de la expresiónse necesita un destructor para `%#D'el especificador del destructor `%T::~%T' debe tener nombres coincidentesel especificador del destructor `%T::~%T()' debe tener nombres coincidenteslos destructores no pueden ser `%s'los destructores no pueden tener parámetroslos destructores deben ser funciones miembrolos destructores no tienen parámetrosno se usaron todas las entradas bb del grafo, función %s + tipo diferentebase directa `%T' inaccesible en `%T' debido a ambigüedadno se pueden usar las directivas dentro de un argumento de macrofalta el nombre de directorio después de %sfalta el nombre de directorio después de la opción -Iel nombre del directorio debe seguir inmediatamente a -Idivisión por cerodivisión por cero en #ifdivisión por cero en `%E %% 0'división por cero en `%E %% 0.'división por cero en `%E / 0'división por cero en `%E / 0.'no se permite cadenas con comillas dobles en expresiones #ifdebido al acceso no público del miembro `%D'debido a la presencia de un constructordup2 %d 1valor case duplicado (o traslapado)atributo ConstantValue duplicado para el campo '%s'`%s' duplicado`const' duplicado`restrict' duplicado`volatile' duplicadonombre `%s' de operando asm duplicadotipo base duplicado `%T' inválidovalor de case duplicadodeclaración duplicada para el protocolo `%s'declaración duplicada del método de la clase `%s'declaración duplicada del método de la instancia `%s'definición duplicada del método de la clase `%s'definición duplicada del método de la instancia `%s'valor enum duplicado `%D'instanciación explícita duplicada de `%#D'instanciación explícita duplicada de `%#T'campo duplicado `%D' (como enum y no enum)campo duplicado `%D' (como tipo y no tipo)asignación de valores iniciales duplicada de %Ddeclaración de interfaz duplicada para la categoría `%s(%s)'declaración de interfaz duplicada para la clase `%s'etiqueta duplicada `%D'declaración de la etiqueta `%s' duplicadaparámetro de macro "%s" duplicadomiembro duplicado `%D'miembro duplicado `%s'tipo anidado duplicado `%D'calificadores de tipo duplicados en la declaración %sdependencias dinámicas. + no se encuentra la dependencia dinámica %sdynamic_cast de `%#D' a `%#T' nunca podrá tener éxitoalgunos elementos de la matriz `%#D' tienen tipo de dato incompletoalgunos elementos de la matriz `%s' tienen tipo de dato incompleto`\0' incrustado en el formatoemitiendo un operando PIC, pero el registro PIC aún no está preparadoexpresión #if vacíacuerpo vacío en una declaración elseconstante de carácter vacíadeclaración vacíanombre de fichero vacío en #%srango de índices vacío en valor inicialprecisión izquierda vacía en el formato %sprecisión vacía en el formato %sse especificó un rango vacíovalor inicial escalar vacíohabilitar el soporte de rastreo hacia atrás sólo tiene significado cuando se compila para el Thumbhabilitar el soporte de trabajo interno de llamadas sólo tiene significado cuando se compila para el Thumbhabilitar el soporte de trabajo interno de llamado sólo tiene significado cuando se compila para el Thumblas plantillas de clase contenidas no son especializadas explícitamenteel insn final %d para el bloque %d no se encuentra en el flujo insnenum definido dentro de los parámetrostipos enumeral y no enumeral en la expresión condicionalno coincide el enumeral en la expresión condicional: `%T' vs `%T'el valor de enumeración `%s' no se maneja en un switchlos valores de enumeración exceden el rango del entero más grandeel valor de enumerador para `%D' no es una constante enterael valor de enumerador para `%s' no es una constante enterano se definió la variable de ambiente DJGPPla variable de ambiente DJGPP apunta al fichero corrupto '%s'la variable de ambiente DJGPP apunta al fichero faltante '%s'error al cerrar %serror en la entrada de #%d del conjunto de constantes + error mientras se analizaba el conjunto de constanteserror mientras se analizaban los camposerror mientras se analizaban los atributos finaleserror mientras se analizaban los métodoserror al escribir a %ssecuencia de escape fuera de rango por el caráctermanejo de excepciones desactivado, use -fexceptions para activarla excepción del tipo `%T' será atrapadaexceso de elementos en iniciador agregadoexceso de elementos en valores iniciales de matrizexceso de elementos en valores iniciales de matriz de caracteresexceso de elementos en valor inicial escalarexceso de elementos en valores iniciales de structexceso de elementos en valores iniciales de unionexceso de elementos en valor inicial vectorialexecv %sexecvp %sse esperaban %d niveles de parámetros de plantilla para `%#D', se obtuvieron %dinstanciación explícita de `%#D'instanciación explícita de `%#D' después deinstanciación explícita de `%#T' después deinstanciación explícita de `%#T' antes de la definición de la plantillainstanciación explícita de `%D' pero no hay una definición disponibleinstanciación explícita de `%#D' que no es plantillainstanciación explícita del tipo `%T' del tipo no plantillaespecialización explícita aquíespecialización explícita en el ámbito `%D' que no es espacio de nombresespecialización explícita no precedida por `template <>'especialización explícita de %D después del primer usoespecialización explícita de `%T' que no es plantillano se puede usar la expresión '%E' del tipo de clase abstracta '%T' en las expresiones thrownla declaración de la expresión tiene tipo de dato incompletolos registros extendidos no tiene mitades superioresla declaración externa de `%#D' no coincidela declaración externa de `%s' no coincide con la globalgrupo extra de llaves al final de los valores inicialeselementos extras en valor inicial escalarse ignora la calificación extra `%T::' en el miembro `%D'se ignora la calificación extra `%T::' en el miembro `%s'se especificó un punto y coma extra en un struct o uniontexto extra al final de la directivaelementos extra al final de la directiva #%scalificadores de tipo extra en el argumento de formato (argumento %d)`%T' extra ignoradoargumento extraño para la opción `%s'No se necesita generar código compatible con f2cno se encontró la clase '%s'fatal:fclosefclose %sfdopenno se encuentra el campo '%s' en la claseel campo `%#D' es static; el único punto de iniciación es su definicióncampo `%#D' con el mismo nombre que la claseel campo `%s' es declarado como static en la uniónel campo `%D' tiene tipo de dato incompletoel campo `%D' en la clase local no puede ser staticel campo `%D' es declarado inválidamente como un tipo de funciónel campo `%D' es declarado inválidamente como un tipo de métodoel campo `%D' es declarado inválidamente como un tipo de desplazamientoel campo `%s' declarado como una funciónel campo `%s' tiene tipo de dato incompletono se encuentra el campo `%s'iniciador del campo no es constatno coincide el tipo del iniciador del campoel nombre del campo no está en el iniciador de record o unionprecisión del campoanchura de campoanchura de campo en formato printfanchura de campo en formato scanfanchura de campo en formato strfmonanchura de campo en formato strftimeno se encuentra el fichero %s, se asume que la cuenta de ejecución es cerofalta el nombre de fichero después de %sno se puede encontrar el fichero `%s'falta el nombre del fichero después de la opción %sfalta el nombre del fichero después de la opción -ifalta el nombre del fichero después de la opción -ocarácter de rellenocarácter de relleno en el formato de strfmonel campo final '%s' puede no haber sido iniciadose encontró la función fini en el objeto %sel primer argumento de `%s' debe ser `int'el primer argumento de __builtin_choose_expr no es una constanteel primer argumento para `va_arg' no es del tipo `va_list'fix_sched_param: parámetro desconocido: %sel miembro de matriz flexible sería de otra manera un struct vacíomiembro de matriz flexible en el unionel miembro de matriz flexible no está al final del structel exponente de la constante de coma flotante no tiene dígitosla constante de coma flotante no puede ser de radical 16constante de coma flotante mal usadaconstante de coma flotante fuera de rangola constante de coma flotante no es un operando inmediato válidoel número de coma flotante excede el rango de '%s'el número de coma flotante excede el rango de 'double'los números de coma flotante no son válidos en #ifno se permiten números de coma flotante en expresiones #ifdesbordamiento de coma flotantedesbordamiento de coma flotante en la expresióncontrol de flujo insn dentro de un bloque básicoa continuación la definición del no prototipo aquífopen %spara cada funcion en la que aparece.)para la declaración de plantilla `%D'no se usa el argumento de formato %d antes de usar el argumento %d en el formato de estilo-$se usa más de una vez el argumento de formato %d en el formato %sel argumento de formato no es un apuntador (argumento %d)el argumento de formato no es un apuntador a un apuntador (argumento %d)el formato es una cadena de carácter anchael formato no es una cadena literal y no tiene argumentos de formatoel formato no es una cadena literal, no se revisaron los tipos de argumentoel formato no es una cadena literal, no se revisó la cadena de formatoel argumento de la cadena de formato sigue a los argumentos que recibirán formatoel argumento de la cadena de formato no es del tipo cadena de textola cadena de formato tiene un número de operadores inválidoformando %s para referenciar al tipo `%T'formando la referencia a voiddeclaración hacia adelante de `%#T'el completado por software de fp requiere una opción -mtrap-precision=ifp_offset (%ld) o end_offset (%ld) es menor a cerofr30_print_operand: código %%F inválidofr30_print_operand: código %%x inválidofr30_print_operand: operando inválido para el código %%Afr30_print_operand: MEM sin manejarfr30_print_operand: código desconocidofr30_print_operand: no se reconoce el código %%Bfr30_print_operand: no se reconoce el código %%bfr30_print_operand: no se reconoce el código %%pfr30_print_operand_address: dirección sin manejarel tamaño del marco es demasiado grande para una revisión confiable de la pilala declaración friend `%#D' declara una función que no es plantillala declaración friend no está en una definición de clasela declaración friend requiere una llave de clase, p.e. `friend %#T'la declaración friend requere una llave de clase, p.e. `friend class %T::%T'fstat %sla función `%#D' tiene valor inicial como una variablela función `%D' no puede ser declarada friend¿!¿se declaró la función `%D' sobrecargada, pero no aparece ninguna definición con la cual resolverlo?!?la función `%s' se declaró virtual dentro de un unionla función `%s' no puede ser declarada `mutable'la función `%s' tiene valor inicial como una variablela función `%s' es redeclarada como inlinela función `%s' redeclarada con el atributo noinlinela función `%s' fue declarada previamente dentro de un bloquefalta el cuerpo de la función para el constructorla llamada a la función tiene valor agregadola función no puede ser inlinela declaración de la función no es un prototipola función declarada `noreturn' tiene una declaración `return'la definición de la función lo declaró como `auto'la definición de la función lo declaró como `register'la definición de la función lo declaró como `typedef'la función no devuelve valores de tipo cadenala función puede ser un candidato posible para el atributo de formato `%s'la función sería un posible candidato para el atributo `noreturn'el tipo de devolución de función no puede ser funciónla función devuelve la dirección de una variable localla función devuelve un agregadola función es demasiado grande para ser inlinelos tipos de función no son totalmente compatibles en ISO Cla función usa __builtin_eh_returnla función que usa alloca no puede ser inlinela función que usa setjmp no puede ser inlinelas funciones que usan tipos short complex no pueden ser inlinela función con salto calculado no puede ser inlinela función con direcciones de etiquetas usada en iniciadores no puede ser inlinela función con funciones anidadas no puede ser inlinela función con goto no local no puede ser inlinela función con atributo(s) específicos del objetivo no puede ser inlinela función con parámetro de unidad transparente no puede ser inlinela función con parámetro de tamaño variable no puede ser inlinela función con valor de devolución de tamaño variable no puede ser inlinela función de macro "%s" se debe usar con argumentos en C tradicionalsoporte para function_profiler para MMIXcontrolador gcc versión %s ejecutando gcc version %s + gcc versión %s + gcov (GCC) %s + generar código RPel código de thunk genérico falló para el método `%#D' que utiliza `...'con la declaración global `%#D'se usó la variable de registro global `%s' en funciones anidadasla variable de registro global sigue a una definiciónd de funciónla variable de registro global tiene valor inicialse obtuvieron %d parámetros de plantilla para `%#D'se obtuvieron %d parámetros de plantilla para `%#T'gp es constante (pero hay save/restore de gp en llamadas indirectas)gp_offset (%ld) o end_offset (%ld) es menor a cerose llamó a half-pic init en sistemas que no le dan soportela cabeza insn %d para el bloque %d no se encuentra en el flujo insnla constante de carácter hexadecimal no cabe en un bytesecuencia de escape hexadecimal fuera de rangosecuencia de escape hexadecimal fuera de rangola constante de coma flotante hexadecimal no tiene exponenteiC2.0 e iC3.0 son incompatibles - usando iC3.0ia64_print_operand: código desconocidoel nombre de identificador `%s' causa conflictos con la estrategia interna de nombrado del C++ de GNUignorando el #pragma %signorando el #pragma %s %sse ignoran los calificadores `%V' para `%T'se ignora el especificador asm para la variable local no estática `%s'ignorando la opción de línea de comando '%s'ignorando el directorio duplicado "%s" + ignorando los iniciadores extra para `%T'ignorando los carácteres multibyte inválidosignorando el directorio inexistente "%s" + ignorando la opción `%s' debido a la especificación de un nivel de depuración inválidoignorando el pragma: %signorando la opción desconocida `%.*s' al final de `-f%s'apuntador ilegal al campo de bit `%D'se usó el nombre `%D' reservado para la implementacióndeclaración implícita de la función `%#D'declaración implícita de la función `%s'los registros extraídos implícitamente deben ser agrupados en la parte superior de la pilaoperador '%s' imposiblees imposible inicio la restricción de registros en `asm'en el bloque básico %d:en la declaración `%D'en el paso del argumento %P de `%+D'incompatibilidades entre el fichero objeto y los valores esperadosopciones de trabajo interno incompatiblestipo incompatible para el argumento %d de `%s'tipo incompatible para el argumento %d de la llamada indirecta a funcióntipos incompatibles en %stipos incompatible en la asignación de `%T' a `%T'opción `%s' incompletaimplementación incompleta de la categoría `%s'implementación incompleta de la clase `%s'el tipo incompleto `%T' no tiene al miembro `%D'unificación de tipo incompletouniversal-character-name incompletoespecificación de instancia de variable inconsistenterestricciones de operandos inconsistentes en un `asm'insn incorrecto:incremento de apuntador a estructura desconocidavalor de índice en lugar del nombre del campo en el iniciador de unionse encontró la función init en el objeto %sasignación de valores inicialesno se pueden anidar los designadores de iniciacióniniciación de un miembro de matriz flexibleiniciación de un miembro de matriz flexible en un contexto anidadoiniciaciones para múltiples miembros de `%T'campo iniciado con efectos laterales sobreescritosla variable iniciada `%s' está marcada como dllimportel elemento de valor inicial no es calculable al momento de la cargael elemento de valor inicial no es constanteel iniciador termina prematuramenteel iniciador no pudo determinar el tamaño de `%D'el iniciador no pudo determinar el tamaño de `%s'el iniciador para un valor de coma flotante no es una constante de coma flotanteel iniciador para un valor entero es demasiado complicadoiniciador para una variable escalar requiere un elementoel valor inicial asignado para la variable estática no es una constanteel valor inicial asignado para la variable estática usa aritmética complicadainiciador inválido para miembro static con constructorse trata la lista de iniciadores como una expresión compuestaconstrucción de la lista de iniciadores inválida para `%D'construcción de la lista de iniciadores inválida para el objeto de la clase derivada `%D'construcción de la lista de iniciadores inválida para el objeto de la clase polimórfica `%D'lista de iniciadores para un objeto de una clase con clases baselista de iniciadores para un objeto de una clase con clases base virtuallista de iniciadores para un objeto que usa funciones virtualesla lista de iniciadores tratada como una expresión compuestainiciador especificado para la función no-miembro `%D'iniciador especificado para el método no virtual `%D'la cadena de valores iniciales para la matriz de caracteres es demasiado largaasignando valores iniciales a una matriz con una lista de parámetrosno se da soporte a constantes inline float en este `host'se le dió a la función inline `%s' un atributo noinlineno se da soport a funciones inline para este tipo de valor de devoluciònel `inlining' falló en la llamada a `%s'la restrcción de operando de entrada contiene `%c'insn %d está dentro del bloque básico %d pero block_for_insn es %iinsn %d está dentro del bloque básico %d pero block_for_insn es NULLinsn %d está en múltiples bloques básicos (%d y %d)insn no satisface sus restricciones:insn fuera del bloque básicoinstalar: %s%s + la variable de instancia `%s' es accessada en el método de la clasela variable de instancia `%s' es declarada %sla variable de instancia `%s' es declarada privadainstanciación de `%D' como tipo `%T'no se da soporte a la calendarización de instrucciones en este objetivoinformación contextual insuficiente para determinar el tipomatriz de enteros con valores iniciales asignados de una cadena no anchala constante entera contiene dígitos más allá del radicalla constante entera es más grande que el valor máximo para su tipola constante entera es tan grande que es unsignedla constante entera es muy grande para esta configuración del compilador - truncando a %d bitsla constante entera es unsigned en ISO C, es signed con -traditionalla constante entera es más grande que el valor máximo de %sconstante entera fuera de rangodesbordamiento entero en la expresióndesbordamiento entero en expresión del preprocesadorerror interno del compilador. Dirección errónea:error interno del compilador. Desplazamiento incorrecto:error interno del compilador. Modo desconocido:error internoerror interno - nombre Utf8 inválidoerror interno - demasiados tipos de interfazerror interno - uso de tipo indefinidoerror interno en %s, en tradcpp.c:%d + Por favor envíe un reporte completo de error. + Vea %s para más instrucciones.error interno en check-init: árbol de código no implementado: %serror interno en generate_bytecode_insn - no se ha implementado el árbol de código: %serror interno--no hay saltos a continuación de la comparación:error interno: error interno: se encontró %%) sin un %%( en el patrón del ensambladorerror interno: se encontró %%> sin un %%< en el patrón del ensambladorerror interno: se encontró %%] sin un %%[ en el patrón del ensambladorerror interno: se encontró %%} sin un %%{ en el patrón del ensambladorerror interno: %serror interno: registro erróneo: %derror interno: cris_side_effect_mode_ok con operandos erróneoserror interno: insn colateral afectando al efecto principalaborto interno de gccerror interno de gcc: No se puede expresar la ubicación simbólicamonitor interno de gcc: short-branch(%x)regno interno fastidiado: regno = %d + no se pueden codificar las Rutinas de Servicios de Interrupción en el modo Thumbel trabajo interno forza el uso de APCS-32instrucción #-line inválidainstrucción #ident inválidadirectiva #ident inválidainstrucción #line inválida#pragma %s inválidadirectiva #pragma de GCC envenenada inválida%%-código inválidooperando %%A inválidooperando %%B inválidovalor %%B inválidooperando %%C inválidovalor %%C inválidooperando %%D inválidovalor %%D inválidovalor %%E inválidovalor %%F inválidovalor %%G inválidovalor %%H inválidocódigo %%J inválidovalor %%J inválidovalor %%K inválidovalor %%L inválidovalor %%M inválidovalor %%N inválidovalor %%O inválidooperando %%P inválidovalor %%P inválidovalor %%Q inválidovalor %%R inválidovalor %%S inválidovalor %%T inválidovalor %%U inválidovalor %%V inválidooperando %%Y inválidovalor %%Z inválidovalor %%b inválidooperando %%c inválidooperando %%d inválidooperando %%f inválidovalor %%f inválidovalor %%h inválidocódigo %%j inválidovalor %%j inválidovalor %%k inválidovalor %%m inválidovalor %%o inválidovalor %%p inválidovalor %%q inválidovalor %%r inválidovalor %%s inválidovalor %%s/S inválidovalor %%u inválidovalor %%v inválidovalor %%x/X inválidocódigo %%xn inválidovalor %%z inválidoopción de --param inválida: %sPC inválido en la tabla de números de líneaUNSPEC inválido como operandoUNSPEC inválido como operando (1)UNSPEC inválido como operando (2)reemplazo de registro Z inválido para el insn`asm' inválido: dirección inválidamodo de direccionamiento inválidoargumento inválido para `__builtin_frame_address'argumento inválido para `__builtin_return_address'argumento inválido del atributo `%s'macro interna "%s" inválidallamada inválida a función miembro requiere `this' en el alcance de la función miembro staticconversión inválida al tipo de función `%T'parámetro de captura inválidoCarácter inválido '%c' en #ifCarácter inválido '\%03o' en #ifconstante de carácter inválida en #ifcódigo inválidoconst_cast inválido del tipo `%T' al tipo `%T'const_cast inválido de un valor-r de tipo `%T' al tipo `%T'constructor inválido; tal vez quiso decir `%T (const %T&)'conversión inválida de `%T' a `%T'conversión inválida del tipo `%T' a partir del tipo `%T'tipo de devolución covariante inválido para `%#D'iniciación del dato miembro inválidadeclaración inválida de la plantilla miembro `%#D' en la clase localdeclarador inválidoargumento de la plantilla por omisión inválidodefinición inválida del tipo calificado `%T'expresión inválida como operandoindicador "%s" inválido en la línea de la directivaopción de emulación de coma flotante inválida: -mfpe-%sformato inválido de la orden #linetipo de hash %d inválido en cpp_macro_definitioniniciación en la clase inválida para el miembro de datos static de tipo `%T' que no es integraldirección (S) indirecta de memoria inválidadirección indirecta de memoria inválidavalor inicial inválido para el miembro `%s'valor inicial inválidoiniciador inválido para cadena de bitsiniciador inválido para el método virtual `%D'insn inválido:constante entera inválida en la lista de parámetros, ¿olvidó proporcionar nombre(s) de parámetro(s)?l-valor inválido en declaración asml-valor inválido en la asignaciónl-valor inválido en `&' unarionombre de macro inválidonombre de macro `%s' inválidomáscara inválidadeclaración de la plantilla miembro `%D' inválidamodo inválido para gen_tst_regmodo inválido para la comparación entera en gen_compare_regnúmero inválido en la expresión #ifdesplazamiento inválido en el direccionamiento de ybasedesplazamiento inválido desde un tipo `%#T' que no es POD; use en su lugar un apuntador a miembrocódigo de operando `%c' inválidooperando inválido para el modificador 'A'operando inválido para el modificador 'D'operando inválido para el modificador 'H'operando inválido para el modificador 'P'operando inválido para el modificador 'T'operando inválido para el modificador 'b'operando inválido para el modificador 'e'operando inválido para el modificador 'm'operador inválido para el modificador 'p'operando inválido para el modificador 'v'operando inválido para el modificador 'z'operando inválido en la instrucciónmodificador de letra de operando inválidooperando inválido para el código de salidaoperando inválido para el código %%H%%Loperando inválido para el código %%Noperando inválido para el código %%Roperador inválido para el código %%T/%%Boperando inválido para el código %%Uoperando inválido para el código %%Voperador inválido para el código %%poperando inválido para el código %%soperadores inválidos de tipos `%T' y `%T' para el binario `%O'operadores inválidos para el binario %soperación inválida en tipo no instanciadoopción %s inválidaopción `%s' inválidaopción inválida `-mshort-data-%s'opción inválida `-mstack-increment=%s'opción inválida `entry%s'el parámetro `%s' es inválidotipo de parámetro `%T' inválidovalor de parámetro `%s' inválidodirectiva de preprocesamiento #%s inválidapuntuación inválida `%c' en la restriccióncalificadores inválidos en el tipo de función no miembrotipo receptor `%s' inválidoredeclaración inválida de `%D'registro inválido en la instrucciónregistro inválido en la instrucción moveregistro inválido en el direccionamiento de ybaseel nombre de registro `%s' no es válido para variable de registronombre de registro inválido para `%s'reinterpret_cast inválido del tipo `%T' al tipo `%T'reinterpret_cast inválido de una expresión valor-r del tipo `%T' al tipo `%T'tipo de devolución inválido para la función `%#D'tipo de devolución inválido para la función miembro `%#D'rotate insn inválidoel segundo argumento para __builtin_prefetch es inválido; se usará cerooperador de desplazamiento inválido en emit_1600_core_shift¡Especificación inválida! `Bug' en ccstatic_cast inválido del tipo `%T' al tipo `%T'clase de almacenamiento inválida para la función `%s'constante de cadena inválida `%E'cadena literal inválida, se ignora el '\' finalessufijo '%.*s' inválido en constante enterasufijo inválido en una constante enterasufijo inválido en una constante enterael tercer argumento para __builtin_prefetch es inválido; se usará ceroelemento inválido en la expresiónexpresión de valor verdadero inválidael tipo inválido `%T' fue declarado `friend'tipo `%T' inválido para el argumento por omisión de `%T'tipo `void' inválido para newargumento de tipo inválidoargumento de tipo inválido de `%s'modificador de tipo inválido dentro de un declarador de matrizmodificador de tipo inválido dentro de la declaración del apuntadorcalificador de tipo inválido para el tipo de función no miembrotipo inválido: `void &'tipos inválidos `%T[%T]' para índice de matrizuso inválido de %%d, %%x, o %%Xuso inválido de `%D'uso inválido de `%T'uso inválido de `%s' en apuntador a miembrouso inválido de `--' en la variable booleana `%D'uso inválido de `::'uso inválido de `restrict'uso inválido de `this' en el nivel principaluso inválido de `this' en la función no miembrouso inválido de `virtual' en la declaración de plantilla de `%#D'uso inválido de un apuntador a un tipo incompleto en aitmética de apuntadoresuso inválido de matrices con límites sin especificaruso inválido de const_cast con tipo `%T', el cual es un apuntador o referencia a un tipo de funciónuso inválido de const_cast con tipo `%T', que no es apuntador, referencia, ni un tipo apuntador-a-datos-miembrosuso inválido de un miembro de matriz flexibleuso inválido del typedef incompleto `%s'uso inválido del miembro (¿olvidó el `&'?)uso inválido del miembro `%D'uso inválido del miembro `%D' en la función miembro staticuso inválido de matriz no-lvaluadauso inválido del campo no static `%D'uso inválido de la plantilla `%#D' como una expresiónuso inválido del parámetro de tipo plantillauso inválido del id de plantilla `%D' en la declaración de la plantilla primariauso inválido de la declaración de tipo `%#D' como una expresiónuso inválido del tipo indefinido `%#T'uso inválido del tipo indefinido `%s %s'uso inválido de la expresión voidtipo vector inválido para el atributo `%s'formato de número de versión inválidoinvoke[no-estático] en un método estáticoinvokestatic en un método abstractoinvokestatic en un método no estáticodebe ser un apuntador-a-miembro de la forma `&X::Y'debe ser la dirección de una función con enlace externodebe ser la dirección de un objeto con enlace externosu ámbito es solamente esta definición o declaración, lo cual probablemente no sea lo que deseael salto a `%s' salta de forma inválida a un contorno de uniónsalto a la etiqueta casesalto a la etiqueta `%D'basura al final de #pragma %sbasura al final del #pragma GCC java_exceptionsbasura al final de #pragma extern_prefixbasura al final del #pragma ghs endsdabasura al final del #pragma ghs endtdabasura al final del #pragma ghs endzdabasura al final del #pragma ghs interruptbasura al final de la sección #pragma ghsbasura al final del #pragma ghs startsdabasura al final del #pragma ghs starttdabasura al final del #pragma ghs startzdabasura al final de #pragma mapbasura al final de #pragma redefine_extnamebasura al final de #pragma weakbasura al final de '#pragma %s'basura al final de '#pragma options'basura al final de '#pragma pack'basura al final de '#pragma unused'basura al final de la cadena de firmala palabra clave `export' no está implementada, y será ignoradala etiqueta %s es referenciada fuera de cualquier funciónla etiqueta `%D' está definida pero no se usase usa la etiqueta `%D' pero no está definidala etiqueta `%s' está definida pero no se usala etiqueta `%s' se ha referenciado fuera de cualquier funciónse usó antes la etiqueta `%s' que contenía un contorno de uniónse usa la etiqueta `%s' pero no está definidala etiqueta debe ser seguida de una declaraciónetiqueta nombrada wchar_tno se reconoce el lenguaje %scadena de lenguaje `"%s"' no se reconocencambio de apuntador grande de marco (%d) con -mtiny-stackentero grande truncado implícitamente al tipo unsignedld devolvió el estado de salida %dprecisión izquierdaprecisión izquierda en formato strfmoncuenta de desplazamiento a la izquierda >= anchura del tipola cuenta de desplazamiento a la izquierda es negativael operador del lado izquierdo de la expresión coma no tiene efectomodificador de longitudmodificador de longitud en formato printfmodificador de longitud en formato scanfmodificador de longitud en formato strfmonbibliotecas: %s + la función de biblioteca `%#D' es redeclarada como `%#D' que no es funciónla función de biblioteca `%s' no es declarada como funciónno se encuentra la biblioteca lib%snúmero de línea fuera de rangolo_sum no de un registrocargar mapa de órdenes, %d órdenes, nuevo tamaño %ld. + la clase local `%#T' no debe tener el miembro static `%#D'la declaración local de `%s' oculta la variable de instancialong y short especificados juntos para `%s'la constante long long no es un operando inmediato válidose especifica long ó short con char para `%s'se especifica long ó short con tipo floating para `%s'long, short, signed ó unsigned inválidos para `%s'uso inválido de long, short, signed ó unsigned para `%s'la búsqueda de `%D' encuentra a `%#D'la búsqueda de `%D' en el ámbito de `%#T' (`%#D') no coincide con la búsqueda en el ámbito actual (`%#D')especificador thrown más flexible para `%#F'lseek %s 0la macro "%s" recibió %u argumentos, pero solamente tomó %ula macro "%s" requiere %u argumentos, pero solo se proporcionan %uel argumento de macro "%s" debería ser convertido a cadena con -traditionalfalta el nombre de macro después de %sfalta el nombre de macro después de la opción -%clos nombres de macro deben ser identificadoresrecursión de macro o #include demasiado profundalos parámetros de macro deben ser separados por comashaciendo a `%D' static#pragma align mal formado - ignorado#pragma extern_prefix malformado, ignoradosección #pragma ghs malformada#pragma map malformado, ignorado#pragma redefine_extname malformado, ignorado#pragma weak malformado, ignorado'#pragma %s' malformado - ignorado'#pragma options align={mac68k|power|reset}' malformado, ignorando'#pragma options' malformado, ignorando'#pragma pack' mal formado - ignorado'#pragma pack(pop[, id], )' mal formado - ignorado'#pragma pack(push[, id], )' mal formado - ignoradoarchivo .zip malformado en CLASSPATH: %sla máscara debe ser un inmediatola restricción coincidente no es válida en el operando de salidala restricción de coincidencia hace referencia a un número de operando no válidono se pueden usar -EB y -EL al mismo tiempono se pueden usar -mfp64 y -m4650 al mismo tiempono se pueden usar -mfp64 y -msingle-float al mismo tiempono se pueden usar -mgp32 y -mfp64 al mismo tiempono se permite el miembro %#D' con constructor en un agregado anónimono se permite el miembro %#D' con operador de asignación de copia en un agregado anónimono se permite el miembro %#D' con destructor en un agregado anónimono se permite el miembro `%#D' con constructor en la unionno se permite el miembro `%#D' con operador de asignación de copia en la unionno se permite el miembro `%#D' con destructor en la unionel miembro `%D' no puede ser declarado como virtual y static al mismo tiempoel miembro `%D' tiene conflictos con el nombre de campo de la tabla de funciones virtualesel miembro `%D' es declarado friend antes que se defina el tipo `%T'el miembro `%D' no es static pero es referenciado como un miembro staticel miembro `%D' es una referencia sin iniciarmiembro `%D' con campos const sin iniciarlas funciones miembros son implícitamente friends de su claseiniciadores miembro para `%#D'el tipo de miembro `%T::' es incompatible con el tipo objeto `%T'miembrosno se encuentra el método '%s' en la claseel método `%s' no se ha implementado por el protocolono se encuentra la definición de método para `%c%s'la definición de método no está en el contexto de la claseanálisis de perfil de las funciones mips16llaves sin coincidencia en especificaciónno coincide la firma para el campo '%s' en '%s'atributo ConstantValue mal colocado (no está en ningún campo)falta el operando numérico $ en el formatofalta un '(' después de '#pragma %s' - ignoradofalta un '(' después de '#pragma pack' - ignoradofalta un '(' después de '#pragma unused', ignorandofalta '(' antes del predicadofalta un '(' en la expresiónfalta `)' después de "defined"falta un '(' después de '#pragma unused', ignorandofalta un ')' para '#pragma %s' - ignoradofalta un ')' en la expresiónfalta paréntesis derecho en la lista de parámetros de macrofalta ')' para completar la respuestafalta ';' antes de la llave derechafalta el atributo Codefalta un argumento en `__builtin_args_info'faltan argumentos para la opción `%s'falta una barrera después del bloque %ifalta un operador binariofalta un operador binario antes de `%s'faltan llaves alrededor de los valores inicialesfalta la llave final para el operando nombradofalta el campo '%s' en '%s'falta el carácter de relleno al final del formato strfmonfalta el nombre de la función en '#pragma %s' - ignoradofalta valor inicialfalta el iniciador para el miembro `%D'falta el nombre de la sección en '#pragma %s' - ignoradofalta el campo static `%s'falta carácter terminando %cfalta el carácter de terminación >falta el nombre del tipo en la declaración typedeffalta un espacio en blanco después del número `%.*s'mezclando `catch'es de C++ y Java en una sola unidad de traducción-mno-cygwin y -mno-win32 no son compatiblesel modo no es QImodemodificación por `asm'más de %d operandos en `asm'más de un sufijo `f' en una constante de coma flotantemás de un sufijo `i' o una `j' en una constante de coma flotantemás de un sufijo `i' o una `j' en una constante enteramás de un sufijo `l' en una constante de coma flotanteno se maneja move insnmsync %sconstante de carácter con múltiples caracterescomentario en múltiples líneaslas literales de cadena en múltiples líneas están deprecadasuna matriz multidimensional debe tener límites para todas las dimensiones excepto para la primeraespecificadores `virtual' múltiplesespecificadores de acceso múltiplesdeclaraciones múltiples `%T' y `%T'declaraciones múltiples para el método `%s'múltiples declaradores en una declaración de plantillamúltiples etiquetas por omisión en un solo switchdefinición múltiple de `%#T'múltiples campos iniciados en la unión `%T'se asignaron múltiples valores iniciales para `%D'se dieron iniciaciones múltiples para el miembro `%D'múltiples parámetros nombrados `%s'múltiples clases de almacenamiento en la declaración de `%s'tipos múltiples en una declaraciónmunmap %sdebe hacer #include antes de usar typeidse debe tener por lo menos un catch por cada bloque tryse debe usar .* o ->* en la llamada a la función apuntador-a-miembro en `%E (...)'mvc&exuso de mvcleinformación de repositorio misteriosa en %sel nombre `%T' tiene tipo de dato incompletola búsqueda de nombre de `%s' cambióla búsqueda de nombre de `%s' cambió por el nuevo alcance ISO de `for'falta el nombre para la función miembromiembros nombradosno se permite el espacio de nombres `%D' en la declaración de usoespacio de nombres `%T' sin declararno se permite aquí el alias del espacio de nombres `%D', asumiendo que es `%D'los agregados anónimos de alcance de nombre de espacio deben ser staticlongitud de insn negativaentero negativo truncado implícitamente al tipo unsignedanchura negativa en el campo de bit `%D'anchura negativa en el campo de bit `%s'no hay varargs ni stdarg en mmix_setup_incoming_varargsalternativas de dialecto ensamblador anidadasdeclaración externa anidada de `%s'la función anidada `%s' se declaró `extern'redefinición anidada de `%s'new no puede ser aplicado a un tipo de referencianew no puede ser aplicado a un tipo de referenciadeclaración nueva `%#D'new de matriz falla al especificar el tamañono hay FUNCTION_PROFILER para CRISningún tipo INTEGER puede guardar una apuntador en esta configuraciónno hay una función miembro `%#D' declarada en la clase `%T'no se declaró `%D(int)' para el `%s' postfijo, intentando en su lugar el operador prefijono hay argumentos para la macro `%s'sin argumentosno hay iniciadores de base o miembros dados después de ':'no hay bases dado el siguiente `:'no hay cuerpo ni ';' separa dos declaraciones class, struct ó unionno se especificó un nombre de clase como argumento para -fconstant-string-classno hay una plantilla de clase llamada `%#T' en `%#T'no hay un `]' que cierre para el formato `%%['no se encuentran cmd_stringsno hay tipo de datos para el modo `%s'no hay un argumento por omisión para `%D'sin descripción aúnno existe el campo `%D' en la union que se está iniciandono hay ruta de inclusión en la cual se encuentre %.*sno hay ruta de inclusión en la cual se encuentre %sno se especificaron ficheros de entradano hay ficheros de entradano hay ficheros de entrada; incapaz de escribir ficheros de salidano hay registros inferiores disponibles para almacenar registros superioresno se dio un nombre de macro en la directiva #%sno hay coincidencia para la llamada a `(%T) (%A)'no hay coincidencias al convertir la función `%D' al tipo `%#T'no hay una función coincidente para la llamada a `%D(%A)'no se encuentra una función coincidente para la llamada a `%T::%D(%A)%#V'no se encuentra una plantilla coincidente para `%D'la función no miembro `%D' se declaró en `%T'no hay miembros que coincidan con `%D' en `%#T'no hay un método `%T::%D'no hay caractér de fin de línea al final del ficherono hay declaración previa para `%s'no hay un prototipo previo para `%s'no hay prototipo, y se usan direcciones de parámetro; no puede ser inlineno hay registro en la direcciónno hay una declaración de devolución en una función que no devuelve voidno hay sclass para el stab %s (0x%x) + no hay punto y coma al final del struct o unionno hay un operador `operator delete' adecuado para `%T'no se declaró una super clase en la interfaz para `%s'no se encuentra la tabla de símbolosno hay un tipo `%D' en `%T'no hay un tipo llamado `%#T' en `%#T'no hay un impositor único final para `%D' en `%T'no se puede encontrar un modo vector con el tamaño y tipo especificadosno hay candidatos viablessecuencia de escape que no es estándar ANSI, `\%c'secuencia de escape que no es ISO, `\%c'secuencia de escape que no es estándard ISO, '\%c'`%E' que no es constante no se puede usar como un argumento de plantillainiciador no-vacío para una matriz de elementos vacíosdígito no hexadecimal '%c' en universal-character-namela función `%#D' que no es local usa un tipo anónimola función `%#D' que no es local utiliza el tipo local `%T'la variable `%#D' que no es local usa el tipo local `%T'no es valor-l en %sel no-miembro `%s' no puede ser declarado `mutable'el miembro no-objeto `%s' no puede ser declarado `mutable'la definición del no prototipo aquímiembro const `%#D' que no es static en una clase sin un constructorel miembro const `%#D' que no es static, no puede usar el operador de asignación por omisiónla declaración no static para `%s' a continuación de una staticiniciación no estática de un miembro de matriz flexibleel método '%s' que no es estático anula al método estáticoreferencia `%#D' que no es static en una clase sin un constructorel miembro de referencia `%#D' que no es static, no puede usar el operador de asignación por omisiónse usa el tipo `%T' que no es plantilla como una plantillase usa una no plantilla como plantillainiciadores etiquetados como no trivialesíndice de matriz no constante en valor inicial'%s' no es un campo staticno es un fichero .class de Java válidono hay suficiente información de tipono se encuentra + ¡¿No está en ningún fichero?!nota:caracter(es) nulo(s) ignoradoscaracter(es) nulo(s) preservados en la literalformato de cadena nulofalta el número después de %sel número de argumentos no coinciden con el prototipoel número de notas bb en la cadena insn (%d) != n_basic_blocks (%d)la constante numérica contiene dígitos más allá del radicalconstante numérica sin dígitosel objeto `%E' no se puede usar como un argumento de plantillael objeto `%E' de tipo incompleto `%T' no se accesará en %sel objeto no es conforme con el protocolo `%s'falta un objeto en `%E'falta un objeto en la llamada al método `%D'falta objeto en el uso de una consctrucción que apunta a miembrosel objeto de tipo incompleto `%T' no se accesará en %sel objeto de tipo `%T' no se accesará en %suso obsoleto del iniciador asignado con `:'uso obsoleto del iniciador designado sin `='la constante de carácter octal no cabe en un bytesecuencia de escape octal fuera de rangoel desplazamiento fuera de los límites de la constante de cadenafichero de encabezado textual antiguosintaxis de ubicación de estilo antiguo, use en su lugar ()sólo %d argumentos para la macro `%s'sólo 1 argumento para la macro `%s'solamente los constructores toman iniciadores basesolamente las declaraciones de constructores pueden ser `explicit'sólo las variables iniciadas se pueden ubicar en el área de memoria del programasólo se permite uno de `--print-main', `--list-class' y `--complexity'sólo los aliases débiles tienen soporte en esta configuraciónups, no depurado; componiendo el valor:abrir %sel operando 1 debe ser un registro fijola restriccion de operando contiene '+' ó '=' en una posición ilegallas restricciones de operandos para `asm' difieren en el número de alternativasel operando es const_doubleel operando no es una constante ni un código de condición, código de operando 'c' inválidoel operando es r0falta un número operando después de %%-letranúmero operando fuera de rangooperando numérico fuera de rango en el formatoel número de operandos especificados para el formato no toma argumentosnúmero de operandos especificado con asignación suprimidalos operandos de ?: tienen tipos diferentesla operación sobre `%s' puede estar indefinidael operador "defined" requiere un identificadorel operador `%s' no tiene operando izquierdoel operador '%s' no tiene operando derechoel operador `%T' se declaró para devolver `%T'nivel de optimización restauradonivel de optimización apagadonivel de optimización encendidolas opciones -mabi=mmixware y -mabi=gnu son mutuamente exclusivasopciones activadas: opciones pasadas: comparación ordenada de apuntador con el entero cerola restricción de salida %d no puede ser usada junto con el ataque "%s"la restricción de salida %d debe especificar un solo registrola restricción de salida `%c' para el operando %d no está al principiose especificó dos veces el nombre del fichero de salidael número de salida %d no es directamente direccionableel operando de salida %d debe usar la restricción `&'la restricción de operando de salida carece de `='el operando de salida es constante en `asm'los registros de salida deben ser agrupados en la parte superior de la pilaoutput_move_single:desbordamiento en la dimensión de la matrizdesbordamiento en la expresión constantedesbordamiento en valores de enumeracióndesbordamiento en valores de enumeración en `%D'desbordamiento en la conversión implícita de constantedesbordamiento en truncado a enterodesbordamiento en el truncado a unsigned integerlista de argumentos de salida desbordada para `%s'función sobrecargada sin información contextual de tipoel atributo packed causa uan alineación ineficienteel atributo packed causa una alineación ineficiente para `%s'no es necesario el atributo packedno es necesario el atributo packed para `%s'tamaño de la estructura de relleno para los límites de alineaciónestructura de relleno para alinear `%s'el parámetro `%D' se declaró voidel parámetro `%D' incluye %s para la matriz `%T' de límite desconocidoel parámetro `%D' se declaró inválidamente como tipo de métodoel parámetro `%D' se declaró inválidamente como tipo de desplazamientoel parámetro `%s' se declaró voidel parámetro `%s' tiene tipo de dato incompletoel parámetro `%s' sólo tiene una declaración posteriorel parámetro `%s' tiene valor inicialel parámetro `%s' apunta a un tipo incompletoel parámetro tiene tipo incompletofalta el nombre del parámetrofalta el nombre del parámetro de la lista de parámetrosse omitió el nombre del parámetroel nombre de un parámetro empieza con un dígito en un #definenombres de parámetros (sin tipos) en la declaración de la funciónel parámetro apunta a un tipo incompletoel tipo del parámetro de la función llamada es incompletose dieron los tipos de los parámetros en la lista de parámetros y por separadoerror de decodificaciónerror de decodificación al final del texto de la función guardadaerror de decodificación en la especificación del métodoerror de decodificación; también se excedió la memoriaerror de decodificación; también se agotó la memoriael decodificador se ha perdido: ¿falta algún '{' en algún lugar?desbordamiento de la pila del decodificadorespecialización parcial `%D' de la plantilla de funciónla especialización parcial `%T' se declaró `friend'la especialización parcial `%T' no especializa ningún argumento de plantillapasando NULL usado para el no apuntador %s %P de `%D'pasar `%T' como el argumento `this' de `%#D' descarta a los calificadorespasar `%T' escoge `%T'n sobre `%T'pasando `%T' para %s %P de `%D'pasando el argumento %d de `%s'pasando el argumento %d del apuntador a la funciónaún no se soporta pasar argumentos de coma flotante en registros fppasando el valor negativo `%E' para %s %P de `%D'pegar "%s" y "%s" no da un elemento válido de preprocesamientofalta el nombre de la ruta después de %spipecolocar los elementos de datos en su propia seccióncolocar cada función en su propia secciónapuntadorse usó un apuntador de tipo `void *' en la aritméticase usó un apuntador de tipo `void *' en la sustracciónel apuntador que apunta a %s difiere en signose usó un apuntador a una función en la aritméticase utilizó un apuntador a una función en la sustracciónse usó un apuntador a un miembro en la aritméticaapuntador a la conversión de miembro de `%T' a `%T' es a través de una base virtualapuntador a la conversión miembro a través de la base virtual `%T' de `%T'apuntador a la conversión miembro a través de la base virtual `%T' de `%T'se llamó a apuntador a función miembro, pero no en el alcance de la clasese usó un apuntador a una función miembro en la aritméticalos tipos de datos apuntadores no coinciden en la expresión condicionalse usó un valor de apuntador donde se esperaba un complejose usó un valor de apuntador donde se esperaba un valor de coma flotantela función apuntador-a-miembro %E no se puede llamar dentro de un objeto; considere utilizar .* o ->*los tipos de datos apuntadores/enteros no coinciden en la expresión condicionallos apuntadores no son permitidos como valores caseenvenenando la macro existente "%s"posible inicio de la cadena literal sin terminarposible ')' faltantela dirección de post-incremento no es un registroel postfijo `%D' debe tomar `int' como su argumentoel postfijo `%D' debe tomar `int' como su segundo argumentoel postfijo `%D' debe regresar `%T'conflicto potencial de selectores para el método `%s'la dirección de pre-decremento no es un registrola dirección de pre-incremento no es un registroprecisiónprecisión en formato printfel predicado debe ser un identificadorel predicado de la respuesta está vacíoel prefijo `%D' debe regresar `%T'declaración previa de `%#D' aquídeclaración previa de `%D'declaración previa como `%#D'declaración previa de `%#D'declaración previa de `%#D' con el enlace %Ldeclaración previa de `%D'declaración previa de `%s'la declaración previa de la función `%s' era inlinedeclaración previa de la función `%s' con el atributo noinlinedefinición previa aquídefinición previa de `%#T'declaración externa previa de `%#D'declaración externa previa de `%s'declaración friend previa de `%D'declaración implícita previa de `%s'la declaración previa `%#D' que no es funcióndeclaración previa no inline aquíse usó previamente aquíel tamaño del parámetro previo depende de `%s'miembro privado `%#D' en union anónimael análisis de perfil no funciona sin un apuntador de marcoaún no se ha implementado el análisis de perfilla creación de perfil no tiene soporte con -mg + programas: %s + el argumento promovido `%s' no coincide con el prototipode forma adecuada a menos que todos sean de 32 bits de anchuramiembro protegido `%#D' en union anónimael protocolo `%s' tiene una dependencia circularel prototipo para '%#D'el prototipo para `%#D' no coincide con ningún otro en la clase `%T'el prototipo para '%s' a continuaciónel prototipo para `%s' a continuación y el argumento %d no coincidenel prototipo para `%s' continúa y el número de argumentos no coincideprovisto por `%D'el tipo calificado `%T' no coincide con el nombre del destructor `~%T'no se permiten calificadores en la declaración de `operator %T'almacenamiento temporal de encabezado textual demasiado pequeño%ld bytes leídos, se esperaban %ld, de %sread %sleyendo la clase %s por segunda vez desde %sleyendo a través de un apuntador nulo (argumento %d)el nombre real es demasiado largo - se ignora el aliasparámetros de una plantilla con valores reales cuando se hizo una compilación cruzadatipo recursivo `%T' sin definirredeclaración del tipo interno de C++ `%T'redeclaración de `%s'redeclaración de `enum %s'redeclaración de `wchar_t' como `%T'redeclarado aquí como `%#D'redefinición de `%#T'redefinición de `%s'redefinición de `struct %s'redefinición de `union %s'redefinición del argumento por omisión para `%#D'redirigiendo salida estándard: %sdeclaración redundante de `%D' en el mismo ámbitodeclaración redundante de `%s' en el mismo ámbitola referencia `%s' es ambigua: aparece en la interfaz `%s' y en la interfaz `%s'se devolvió una referencia a la variable local `%D'se devolvió una referencia a un valor que no es l-valornombre de registro dado para una variable `%s' que no es registrono se especifica nombre de registro para `%s'el registro especificado por `%s' no es adecuado para el tipo de datosnombre de registro usado por dos variables de registro globalesse usó la variable de registro `%s' en funciones anidadasregistrando "%s" como un pragma y como un espacio de nombres de pragmase usaron los registros IX, IY y Z en el mismo INSNreimplementación de la clase `%s'reinterpret_cast de `%T' a `%T' proscribe a const (o volatile)reinterpret_cast de `%T' a `%T' pierde precisiónrenombrando especificación %s a %s + se repitió %s en el formatosolicitud por el miembro `%D' en `%E' el cual es del tipo no agregado `%T'la petición por el miembro `%D' es ambigua en la red de herencia múltiplepetición por el miembro `%T::%D' en la expresión de tipo no agregado `%T'petición del miembro `%s' en algo que no es estructura ó uniónla alineación solicitada para %s es mayor que la alineación implementada de %dla alineación solicitada no es una constantela alineación solicitada no es una potencia de 2la alineación solicitada es demasiado grandela init_priority solicitada no es una constante enterala init_priority solicitada está fuera de rangola init_priority solicitada está reservada para uso internoel resultado de `operator->()' produce un resultado que no es apuntadorno se ha implementado aún la instrucción retreturnel identificador de devolución `%D' ya está en su lugarreturn no es seguido por una barrerael tipo de devolución `%#T' es un tipo de dato incompletoel tipo de devolución por omisión es `int'el tipo de devolución por omisión es idel tipo de devolución para `%s' por omisión es idel tipo de devolución para `main' cambió a `int'el tipo de devolución es un tipo de dato incompletoel tipo de devolución de `%s' no es `int'la especificación del tipo de devolución para el constructor es inválidola especificación del tipo de devolución para el destructor es inválidose especificó un tipo de devolución para `operator %T'el especificador de tipo del valor devuelto para el constructor es ignoradodeclaración de devolución con un valor, en una función declarada con un tipo de devolución voidsentencia de devolución sin valor, en una función declarada con un tipo de devolución que no es voidse regresó un valor en block_exit_exprdevolviendo un valor de un constructordevolviendo un valor de un destructordevolviendo la referencia al temporalprecisión derechaprecisión derecha en formato strfmoncuenta de desplazamiento a la derecha >= anchura del tipola cuenta de desplazamiento a la derecha es negativael modo de redondeo no tiene soporte para floats de VAXel segundo argumento de `__builtin_expect' debe ser una constanteel segundo argumento de `__builtin_prefetch' debe ser una constanteel segundo argumento de `%s' debe ser `char **'el segundo parámetro de `va_start' no es el último argumento nombradoel atributo de sección no puede ser especificado para las variables localesno se permite un atributo de sección para `%s'no se da soporte a atributos de sección en este objetivola sección de `%s' causa conflictos con la declaración previafalta la sección de apuntadoresel selector debe ser un inmediatofalta punto y coma después de la declaración %sfalta punto y coma después de la declaración de `%#T'falta punto y coma después de la declaración de `%T'obscureciendo la función de biblioteca `%#D'obscureciendo la función interna `%s'obscureciendo la función de biblioteca `%s'obscureciendo la declaración de tipo previa de `%#D'shared y mdll no son compatibles.cuenta de desplazamiento >= anchura del tipola cuenta de desplazamiento es negativashort, signed ó unsigned inválido para `%s'se dieron juntos signed y unsigned para `%s'tipos signed y unsigned en la expresión condicionalespecificador de tipo sigofel tamaño de la matriz nueva debe tener un tipo integralel tamaño de `%s' es de %d bytesel tamaño de `%s' es mayor que %d bytesel tamaño de la matriz `%D' tiene un tipo no enteroel tamaño de la matriz `%D' es negativoel tamaño de la matriz `%D' no es una expresion constante integralel tamaño de la matriz `%s' tiene un tipo no enteroel tamaño de la matriz `%s' es negativoel tamaño de la matriz `%s' es demasiado grandeel tamaño de la matriz tiene un tipo no enteroel tamaño de la matriz es negativoel tamaño de la matriz no es una expresion constante integralel tamaño del miembro `%D' no es constanteel tamaño del valor de devolución de `%s' es de %u bytesel tamaño del valor de devolución de `%s' es más grande que %d bytesel tamaño de la variable `%s' es demasiado grandesizeof aplicado a un campo de bitssizeof aplicado a un tipo de funciónsizeof aplicado a un tipo de dato voidsizeof aplicado a un tipo de dato incompletosizeof(long double) es 12sizeof(long double) es 16lo sentimos, sin implementar: disculpe, no se ha implementado: #pragma align NOMBRE=TAMAÑOdisculpe, no se ha implementado: #pragma noalign NOMBREperdón: la semántica de los datos static de la función inline `%#D' es errónea (terminará con múltiples copias)el fichero fuente para la clase `%s' es más nuevo que su fichero de clase coincidente. Se usa entonces el fichero fuente `%s'el fichero fuente se vio dos veces en la línea de comando y se compilará solo una vezfalla en spec: '%%*' no ha sido iniciado por coincidencia de patrónfalla en spec: opción de especificación '%c' no reconocidael fichero de especificaciones no tiene especificaciones para enlazarla especificacion es '%s' + + especialización de %D después de la instanciaciónespecialización de `%T' después de la instanciaciónespecialización de la función miembro especial declarada implícitamenteespecializando `%#T' en diferentes espacios de nombresspecs sintaxis mal formada de %%include después de %ld caracteresspecs sintaxis mal formada de %%rename después de %ld caracteresspecs la especificación %s no se encontró para ser renombradaspecs fichero mal formado después de %ld caracteresspecs comando %% desconocido después de %ld caracteres`%%' final espurio en el formatoel marco de pila no es un múltiplo de 8 bytes: %del marco de pila no es un múltiplo de octabyte: %dmarco de pila demasiado grandeno se da soporte a la expresión del límite de la pilano se da soporte a límites de la pila en este objetivotamaño de la pila > 32kdesbordamiento de la pila - operación dup*marco de la pila demasiado grande: %d bytesstatic `%s' no puede ser declarado `mutable'acceso estático al objeto de tipo `id'la declaración static para `%s' a continuación de una no staticel miembro static `%D' no puede ser un campo de bitsse declaró el miembro static `%D' como `register'la función miembro static `%#D' es declarada con calificadores de tipostatic o calificador de tipo en un declarador abstractostatic o calificadores de tipo en un declarador de matriz que no es parámetrola variable estática `%s' está marcada como dllimportstatic_cast del tipo `%T' al tipo `%T' proscribe la constanciaclase de almacenamiento `%D' aplicada a la instanciación de una plantillaclase de almacenamiento `auto' inválida para la función `%s'la clase de almacenamiento `inline' es inválida para la función `%s' declarada fuera del ámbito globalclase de almacenamiento `register' inválida para la función `%s'la clase de almacenamiento `static' es inválida para la función `%s' declarada fuera del ámbito globalclase de almacenamiento especificada por %s `%s'se especificó una clase de almacenamiento para el parámetro `%s'se especificó una clase de almacenamiento para el campo de la estructura `%s'se especificó una clase de almacenamiento para el nombre de tipono se permite el especificador de clase de almacenamiento `%s' después de struct ó classespecificadores de clase de almacenamiento en el declarador de una matrizespecificadores de clase de almacenamiento inválidos en las declaraciones de funciones friendespecificadores de clase de almacenamiento inválidos en las declaraciones de parámetrosel tamaño de almacenamiento de `%D' no es constanteno se conoce el tamaño de almacenamiento de `%D'el tamaño de almacenamiento de `%s' no es constanteno se conoce el tamaño de almacenamiento de `%s''%c' parásito en el programa'\%o' parásito en el programalos formatos de strftime no pueden dar formato a los argumentoslas constantes de cadena no son válidas en #ifla longitud de la cadena `%d' es mayor que la longitud `%d' que se requiere que los compiladores ISO C%d den soportela cadena literal %E no es un argumento válido de plantilla porque es la dirección de un objeto con enlace estáticofalta la sección de cadenasstructse usa un valor de tipo struct cuando se requiere un escalarestructuraestructura `%D' con miembros constantes sin iniciarestructura `%D' con miembros de referencia sin iniciarel límite del tamaño de la estructura sólo puede establecerse a 8 o 32la directiva de estilo de línea es una extensión de GCCel subobjeto de tipo `%T' debe ser iniciado por un constructor, no por `%E'el subíndice es de tipo `char'falta subíndice en la referencia de la matrizel valor indicado por el subíndice no es ni matriz ni apuntadorse declaró el subíndice de la matriz como `register'se sugiere ocultar #%s de C tradicional con un # indentadose sugiere no usar #elif en C tradicionalse sugieren paréntesis alrededor de && junto con ||se sugieren paréntesis alrededor de + o - para operandos de &se sugieren paréntesis alrededor de + o - dentro de un desplazamientose sugieren paréntesis alrededor de la aritmética para operandos de ^se sugieren paréntesis alrededor de la aritmética para operandos de |se sugieren paréntesis alrededor de la asignación usada como valor verdaderose sugieren paréntesis alrededor de las comparaciones para operandos de &se sugieren paréntesis alrededor de las comparaciones para operandos de ^se sugieren paréntesis alrededor de las comparaciones para operandos de |el interruptor -mcpu=%s genera conflictos con el switch -march=la cantidad de switch no es un enterola declaración switch de tamaño de %lu entradas es demasiado grandeerror sintácticoerror sintáctico ':' sin una '?' precedenteerror sintáctico '?' sin ':' a continuaciónerror sintáctico en el elemento '%s'error sintáctico: no se puede regresartomando la dirección de la expresión limitada apuntador-a-miembrotomando la dirección del destructortomando la dirección del temporalel CPU objetivo no tiene soporte para APCS-26el CPU objetivo no tiene soporte para APCS-32el CPU objetivo no tiene soporte para las instrucciones THUMBel CPU objetivo no tiene soporte para trabajo internofalta el objetivo después de %sfalta el objetivo después de la opción %sse definió la plantilla `%#D' en el fichero sin #pragma interfacese instanció la plantilla `%#D' en el fichero sin #pragma interfaceel argumento de plantilla %d es inválidoel argumento de plantilla `%E' involucra a el(los) parámetro(s) de plantillaclase de plantilla sin nombreredeclaración en plantilla de `%#D'definición de plantilla de `%#D' que no es plantillala profundidad de instanciación de la plantilla excede el máximo de %d (use -ftemplate-depth-NN para incrementar el máximo) al instanciar `%D'parámetro de plantilla `%#D'se usó una lista de parámetros de plantilla en una instanciación explícitael tipo de parámetro de plantilla `%T' se declaró `friend'los parámetros de la plantilla no pueden ser friendsno se usan los parámetros de plantilla en la especialización parcial:especialización de plantilla con enlace Clos parámetros de tipo plantilla debe usar la palabra clave `class' o `typename'plantilla con enlace Cel argumento de plantilla `%T' usa un tipo anónimoel argumento de plantilla `%T' usa el tipo local `%T'el id de plantilla `%D' para `%+D' no coincide con ninguna declaración de plantillaid de plantilla `%D' en la declaración de la plantilla primariael id de plantilla `%D' se usa como un declaradorque la declaración previa `%F'esa opción -g en particular es inválida con -maout y -melinuxel soporte para -mlong-double-64 aún no funcionala opción de printf ` 'la opción de strfmon `!'la opción de printf `#'la opción de strftime `#'la opción de printf `''la opción de scanf `''la opción de strfmon `('la opción de printf `+'la opción de strfmon `+'la opción de printf `-'la opción de strfmon `-'la opción de strftime `-'la opción de printf `0'la opción de strftime `0'el modificador de strftime `E'la opción de printf `I'la opción de scanf `I'el modificador `O'el modificador de strftime `O'la opción de strfmon `^'la opción de strftime `^'la opción de strftime `_'la opción de scanf `a'el `java.lang.Object' que se encontró en `%s' no tiene el atributo especial de longitud cero `gnu.gcj.gcj-compiled'. Esto significa generalmente que su ruta de clases está establecida incorrectamente. Use `info gcj "Input Options"' para ver la página de info que describe cómo establecer la ruta de clasesla dirección de `%D', siempre será `true'la supresión de la asignación es una característica de scanfel condicional empezó aquíel m210 no tiene soporte para little endianel significado de `\%c' varía con -traditionalel significado de `\a' varía con -traditionalel significado de '\x' varía con -traditionalel significado de `\a' varía con -traditionalel significado de `\x' varía con -traditionalla única combinación válida es `long double'el tercer argumento de `__builtin_prefetch' debe ser una constanteel tercer argumento de `%s' debería ser `char **'esta función puede devolver con o sin un valoresta es una declaración previaesta es la primera etiqueta por omisiónesta es la primera entrada que traslapa ese valoreste es el insn:esta es la ubicación de la definición previaeste objetivo no tiene soporte para el interruptor -mabiesta máquina objetivo no tiene ramificaciones retardadaseste uso de "defined" puede no ser transportabletres sufijos 'l' en la constante enteraarrojando NULL, que tiene un tipo integral, no apuntadortiempo en %s: %ld.%06ld (%ld%%) + para hacer referencia a un tipo miembro de un parámetro de plantilla, use `typename %E'muy pocos argumentos para el formatomuy pocos argumentos para %s `%+#D'muy pocos argumentos para la funciónmuy pocos argumentos para la función `%s'muy pocas listas de parámetros de plantilla en la declaración de `%D'el valor del tipo de la función es demasiado grande, necesita %d registros, sólo se tienen %d registros para estodemasiadas opciones #pragma align=resetdemasiados sufijos 'l' en constante enterademasiados argumentos (%d) para la macro `%s'demasiadas alternativas en `asm'demasiados argumentos para el formatodemasiados argumentos para %s `%+#D'demasiados argumentos para la funcióndemasiados argumentos para la función `%s'demasiados argumentos para la función `va_start'demasiados puntos decimales en la constante de coma flotantedemasiados nombres de ficheros. Teclee %s --help para información de modo de empleose requieren demasiados argumentos para el inicio de la funcióndemasiados ficheros de entradademasiadas listas de parámetros de plantilla en la declaración de `%D'demasiadas listas de parámetros de plantilla en la declaración de `%T'la declaración del nivel superior de `%s' especifica `auto'C tradicional ignora #%s con el # indentadoC tradicional rechaza la iniciación automática de agregadosC tradicional rechaza los valores iniciales de unionsC tradicional rechaza la concatenación de cadenasC tradicional rechaza el sufijo 'f'C tradicional rechaza el sufijo 'l'C tradicional rechaza el sufijo 'u'C tradicional rechaza el sufijo `U'C tradicional rechaza el operador unario maslos trampolines no tienen soporteaún no se han implementado trampolinesel modo de captura no tiene soporte para valores de coma flotante VAXel modo de captura no tiene soporte en Unicos/Mkrevisión de árbol: se esperaba %s, se tiene %s en %s, en %s:%drevisión de árbol: es esperaba la clase '%c', se tiene '%c' (%s) en %s, en %s:%dtrigrafo ??%c convertido a %cse ignora el trigrafo ??%cintente reducir el número de variables localesse trató de terminar struct, pero fue sacado debido a errores previos de decodificacióntratando hacer que la clase `%T' sea un friend de ámbito globaldos sufijos 'u' en la constante enterados o más tipos de datos en la declaración de `%s'se especificaron dos tipos en una declaración vacíase dió un argumento de tipo `%#T' a `delete', se esperaba un apuntadorel tipo `%D' no es una base directa de `%T'el tipo `%D' no es una base directa o virtual de `%T'el tipo `%T' compuesto desde una clase local no es un argumento de plantilla válidoel tipo `%T' no tiene destructorel tipo `%T' no está permitido en `throw' o `catch' de Javael tipo `%T' no es un tipo base para el tipo `%T'el tipo `%T' no es derivado de `java::lang::Throwable'el tipo `%T' no es derivado del tipo `%T'el tipo `%T' es de un tipo no agregadoel tipo `%T' del argumento de plantilla `%E' depende de el(los) parámetro(s) de plantillael tipo de dato por omisión es `int' en la declaración de `%s'el tipo está deprecadoel tipo está deprecado (declarado en %s:%d)los tipos de datos no coinciden en la expresión condicionalno coinciden los tipos con la declaración externa previano coinciden los tipos con la declaración implícita previase esperaba nombre de tipo antes de `&'se esperaba nombre de tipo antes de `*'el tipo de `%E' no coincide con el tipo del destructor `%T' (el tipo era `%T')el tipo de `%s' es `int' por omisiónno se puede determinar el tipo del operando asm `%E'el tamaño de `%s' externo no es globalel tipo de dato del parámetro formal %d está incompletono se permite el calificador de tipo `%s' después de struct ó classlos calificadores de tipo para `%s' generan conflicto con la declaración previase ignoran los calificadores de tipo en el tipo de devolución de la funciónse especificaron calificadores de tipo en una declaración de clase friendel tamaño del tipo no puede ser evaluado explícitamenteno se permite el especificador de tipo `%s' después de struct ó classespecificador de tipo omitido para el parámetrose omitió el especificador para el parámetro `%E'el tipo de vector delete no es del tipo apuntador ni matrizno coincide el tipo/valor en el argumento %d en la lista de parámetros de plantilla para `%D'typedef `%D' tiene valor inicialtypedef `%s' tiene valor inicialla declaración typedef incluye una asignación inicial de valoresdeclaración typedef inválida en la declaración de parámetrosel nombre de la definición de tipo puede no ser calificada para la claseel tipo de nombre de tipo `%#T' se declaró `friend'los tipos no son totalmente compatiblesno se puede llamar un apuntador a una función miembro aquíno se puede calcular la ubicación real del parámetro apiladono se puede encontrar un registro para vaciar la clase `%s'no se pueden generar recargas para:no se puede hacer mmap al fichero '%s'no se puede abrir la dependencia dinámica '%s'no se puede abrir el fichero '%s'no se puede evaluar el fichero '%s'no se puede usar '%s' para registro PIC`&' unario#endif desbalanceadopila desbalanceada en #ifoperador '%s' nombrado sin definirdirectiva # no definida o inválidatipo `id' indefinido, por favor importe borrando la definición de "%s"borrando la definición de `%s'borrando la definición de `defined'subrayado en el númeroNOTE inesperado como addr_const:símbolo PIC inesperadoexpresión de dirección inesperadatipo-base inesperado en cris_print_baseel tipo de función inesperado necesita un ajuste de pila para __builtin_eh_returntipo-índice inesperado en cris_print_indexletra `%c' inesperada en locate_error + operando multiplicativo inesperadooperando inesperadoefectos colaterales inesperados en la direccióntipo inesperado para `id' (%s)const `%D' sin iniciarconst sin iniciar en `new' de `%#T'miembro const `%D' sin iniciarreferencia del miembro `%D' sin iniciaruniónno se puede iniciar la union `%T' sin miembros nombradosunion no se puede hacer transparentese usa un valor de tipo union cuando se requiere un escalaruniversal-character-name `\U%08x' no es válido en el identificadoruniversal-character-name `\u%04x' no es válido en el identificadoruniversal-character-name en el objetivo EBCDICuniversal-character-name fuera de rangoopción -march= desconocida (%s). + Las opciones válidas son 1.0, 1.1, y 2.0 + interruptor -mdebug-%s desconocidoopción -mschedule= desconocida (%s). + Las opciones válidas son 700, 7100, 7100LC, 7200, y 8000 + ABI especificada desconocida: '%s'no se conoce el estándard de C `%s'versión desconocida de CPU %d, usando 40. + especificación de versión de cpu CRIS desconocida en -mtune= : %sespecificación de versión CRIS desconocida en -march= o -mcpu= : %sacción desconocida '%s' para '#pragma pack' - ignoradotamaño de matriz desconocida en deletese desconoce el carácter de tipo de conversión 0x%x en el formatose desconoce el carácter de tipo de conversión `%c' en el formatocodificación desconocida: `%s' + Esto puede significar que la codificación de su localización + no tiene soporte en la implementación iconv(3) de su sistema. + Si no está intentando usar una codificación particular para su + fichero de entrada, utilice la opción `--encoding=UTF-8'secuencia de escape desconocida, '\%c'secuencia de escape desconocida, `\%c'secuencia de escape desconocida: '\%03o'secuencia de escape desconocida: `\' seguida por el código de caracter 0x%xcampo `%s' desconocido especificado en el valor inicialmodo insn desconocidose desconoce el modo de máquina `%s'movimiento insn desconocido:espacio de nombres `%D' desconocidoopcode desconocido %d@pc=%d durante la verificaciónnombre de registro `%s' desconocido en `asm'nombre de registro desconocido: %sconjunto de tipo constructor desconocidocadena de elemento %s desconocida + valor de devolución {de,en}code_mach_o_hdr %d desconocidono se permiten campos sin nombre de otro tipo que no sea struct o unioniniciador sin nombre para `%T', el cual no tiene una clase baseiniciador sin nombre para `%T', el cual usa herencia múltiplestruct/union sin nombre que no define ninguna instanciavariable sin nombre o campo declarado voidcomparación sin orden en argumento de coma no flotantebytecode inalcanzable desde %d hasta antes de %dbytecode inalcanzable desde %d hasta el final del métodono se reconoce la sub-instrucción anchainsn no reconocible:no se reconoce la direcciónno se reconoce el especificador de formatoopción de depuración de gcc no reconocida: %copción `-%s' no reconocidaopción `-%s' no reconocidano se reconoce el nombre de registro `%s'no se reconoce el nombre de sección "%s"supuesta constante no reconocidasupuesta constante no reconocida en cris_global_pic_symboloperador %s sin registrarelemento %s impronunciableargumento sin soporte para `__builtin_frame_address'argumento no soportado para `__builtin_return_address'tamaño de operando sin soporte para el registro extendidoversión sin soporteoperación de enteros anchos sin soporte#%s sin terminarcondicional #%s sin terminarlista de argumentos sin terminar al invocar la macro "%s"alternativa de dialecto ensamblador sin terminarcomentario sin terminarconstante de formato sin terminarlista de parámetros en #define sin terminarcadena sin terminar o constante de carácterno se usaron argumentos en el formato de estilo-$parámetro `%s' sin usovariable `%s' sin usomodo de empleo: %s [interruptores] entrada salidause -gdwarf -g%d para DWARF v1, nivel %duse -dwarf-2 para DWARF v2use `#line ...' en lugar de `# ...' en la primera líneauso de %s y %s juntos en el formato %suso de %s y %s junto con el formato `%%%c' %suso de %s desde una función contenedorael uso de `%D' es ambiguouso de `%s' en la plantillauso de `%s' en la unificación de tipo de la plantillauso del modificador de longitud `%s' con el carácter de tipo `%c'uso de la plantilla de clase `%T' como una expresiónuso del enum `%#D' sin declaración previael uso de la especificación de enlazado `%D' es diferente de la especificación previa `%D'uso del espacio de nombres `%D' como una expresiónuso de la conversión de estilo antiguouso del calificador de plantilla fuera de la plantillase usaron %d parámetro%s de plantilla en lugar de %dpalabras claves inútiles o nombres de tipos en una declaración vacíael `%D' definido por el usuario siempre evalúa ambos argumentosusando CONST_DOUBLE para las direccionesusando `typename' fuera de la plantillano está implementado usar ambos @FILE con ficheros múltiplesel uso de la declaración `%D' introdujo el tipo ambiguo `%T'usando `%#D' sintetizado para asignación de copiausando el parámetro de tipo plantilla `%T' después de `%s' usando el nombre de definición de tipo `%D' después de `%s'declaración de uso para el destructordeclaración de uso para un no miembro en el ámbito de la clasevalidate_value_data: Ciclo en la cadena regno (%u)validate_value_data: [%u] next_regno erróneo para la cadena vacía (%u)validate_value_data: [%u] oldest_regno erróneo (%u)validate_value_data: [%u] Registro no vacío en la cadena (%s %u %i)el valor de -mfixed-range debe ser de la forma REG1-REG2la función varargs no puede ser inlinela variable `%#D' tiene asignación de valor inicial, pero tipo de dato incompletola variable `%s' fue declarada como `inline'la variable `%s' tiene asignación de valor inicial, pero tipo de dato incompletola variable `%s' podría ser sobreescrita por `longjmp' o `vfork'se pasa parcialmente el desplazamiento de la variable a la pila y al registrovariable o campo `%s' declarado voidvariable o campo declarado voidse pasa parcialemente el tamaño de la variable a la pila y al registrotipo de tamaño variable declarado fuera de cualquier funciónel objeto de tamaño variable `%D' no puede tener valor inicialun objeto de tamaño variable no puede tener valor inicialun objeto de tamaño variable de tipo `%T' no puede tener valor inicialdesbordamiento vectorial en la expresiónerror de verificación en PC=%dfalló verify_flow_infoverify_flow_info: El bloque básico %d succ edge está corruptoverify_flow_info: Borde duplicado %i->%iverify_flow_info: Bloques incorrectos para el respaldo %i->%iverify_flow_info: Respaldo incorrecto %i->%imatriz virtual %s[%lu]: el elemento %lu está fuera del límite en %s, en %s:%dbase virtual `%T' inaccesible en `%T' debido a ambigüedadlas funciones virtual no pueden ser friendla función virtual `%s' no es clasedeclaración de virtual fuera de classexpresión void entre '(' y ')'valor void no ignorado como debería de serlas variables de registro volatile no funcionan como usted quisieraaviso:aviso: aviso: se ignora -pipe porque se especificó -save-tempsaviso: se ignora -pipe porque se especificó -timeaviso: `-x %s' después del último fichero de entrada no tiene efectoaviso: se ignoraron los ficheros .class que ya fueron compilados con -Caviso: uso del operador obsoleto %%[ en especificaciónla declaración débil de `%s' debe ser publicla declaración débil de `%s' debe preceder a la definiciónla declaración débil de `%s' no tiene soportedonde la etiqueta case aparece aquíla anchura de `%D' excede su tipola anchura de `%s' excede su tipola anchura de la constante entera cambia con -traditionalla anchura de la constante entera puede cambiar en otros sistemas con -traditionaldesde este contextowrite %sescribiendo en un objeto constante (argumento %d)escribiendo las órdenes de carga. + + escribiendo a través de un apuntador nulo (argumento %d)insn erróneo en el borde del respaldose especificó el número equivocado de argumentos para el atributo `%s'número erróneo de argumentos de plantilla (%d, debería ser %d)argumento de tipo erróneo para absargumento de tipo erróneo para complemento de bitsargumento de tipo erróneo para la conjugaciónargumento de tipo erróneo para el decrementoargumento de tipo erróneo para el incrementoargumento de tipo erróneo para el signo de exclamación unarioargumento de tipo erróneo para el decremento unarioargumento de tipo erróneo para el incremento unario%ld bytes escritos, se esperaban %ld, a %sxstormy16_print_operand: código desconocidodebe especificar adicionalmente -M o -MMmatriz `%s' de tamaño cero o negativola matriz de tamaño cero no reserva espacioanchura cero para el campo de bits `%D'anchura cero para el campo de bits `%s'anchura cero en el formato %scadena de formato de longitud ceromatriz `%D' de tamaño cero \ No newline at end of file diff -Nrc3pad gcc-3.0.4/gcc/po/es.po gcc-3.1/gcc/po/es.po *** gcc-3.0.4/gcc/po/es.po Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/po/es.po Fri May 10 14:51:16 2002 *************** *** 0 **** --- 1,22785 ---- + # Mensajes en español para gcc-3.1-b20020415 + # Copyright (C) 2001, 2002 Free Software Foundation, Inc. + # Cristian Othón Martínez Vera , 2001, 2002. + # + msgid "" + msgstr "" + "Project-Id-Version: gcc 3.1-b20020415\n" + "POT-Creation-Date: 2002-04-23 12:53+0200\n" + "PO-Revision-Date: 2002-04-23 16:15-0600\n" + "Last-Translator: Cristian Othón Martínez Vera \n" + "Language-Team: Spanish \n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=ISO-8859-1\n" + "Content-Transfer-Encoding: 8bit\n" + + #: attribs.c:314 + #, c-format + msgid "`%s' attribute directive ignored" + msgstr "se ignora la directiva de atributo `%s'" + + #: attribs.c:322 + #, c-format + msgid "wrong number of arguments specified for `%s' attribute" + msgstr "se especificó el número equivocado de argumentos para el atributo `%s'" + + #: attribs.c:339 + #, c-format + msgid "`%s' attribute does not apply to types" + msgstr "el atributo `%s' no aplica a tipos" + + #: attribs.c:376 + #, c-format + msgid "`%s' attribute only applies to function types" + msgstr "el atributo `%s' aplica solamente a tipos de funciones" + + #: attribs.c:468 attribs.c:490 attribs.c:512 attribs.c:543 attribs.c:565 attribs.c:590 attribs.c:613 attribs.c:643 attribs.c:681 attribs.c:728 attribs.c:758 attribs.c:788 attribs.c:811 attribs.c:1057 attribs.c:1113 attribs.c:1169 attribs.c:1230 attribs.c:1256 attribs.c:1458 config/arm/arm.c:2007 config/arm/arm.c:2034 config/avr/avr.c:4683 config/h8300/h8300.c:3071 config/h8300/h8300.c:3096 config/i386/i386.c:1267 config/i386/winnt.c:74 + #, c-format + msgid "`%s' attribute ignored" + msgstr "se ignora el atributo `%s'" + + #: attribs.c:844 + #, c-format + msgid "unknown machine mode `%s'" + msgstr "se desconoce el modo de máquina `%s'" + + #: attribs.c:847 + #, c-format + msgid "no data type for mode `%s'" + msgstr "no hay tipo de datos para el modo `%s'" + + #: attribs.c:880 + msgid "section attribute cannot be specified for local variables" + msgstr "el atributo de sección no puede ser especificado para las variables locales" + + #: attribs.c:891 + #, c-format + msgid "section of `%s' conflicts with previous declaration" + msgstr "la sección de `%s' causa conflictos con la declaración previa" + + #: attribs.c:900 + #, c-format + msgid "section attribute not allowed for `%s'" + msgstr "no se permite un atributo de sección para `%s'" + + #: attribs.c:907 + msgid "section attributes are not supported for this target" + msgstr "no se da soporte a atributos de sección en este objetivo" + + #: attribs.c:949 + msgid "requested alignment is not a constant" + msgstr "la alineación solicitada no es una constante" + + #: attribs.c:954 + msgid "requested alignment is not a power of 2" + msgstr "la alineación solicitada no es una potencia de 2" + + #: attribs.c:959 + msgid "requested alignment is too large" + msgstr "la alineación solicitada es demasiado grande" + + #: attribs.c:986 + #, c-format + msgid "alignment may not be specified for `%s'" + msgstr "la alineación no puede ser especificada para `%s'" + + #: attribs.c:1031 + #, c-format + msgid "`%s' defined both normally and as an alias" + msgstr "`%s' definido normalmente y como un alias" + + #: attribs.c:1041 + msgid "alias arg not a string" + msgstr "el argumento de alias no es una cadena" + + #: attribs.c:1080 attribs.c:1136 + #, c-format + msgid "`%s' attribute applies only to functions" + msgstr "el atributo `%s' aplica solamente a funciones" + + #: attribs.c:1087 attribs.c:1143 + #, c-format + msgid "can't set `%s' attribute after definition" + msgstr "no se puede establecer el atributo `%s' después de la definición" + + #: attribs.c:1227 + #, c-format + msgid "`%s' attribute ignored for `%s'" + msgstr "se ignora el atributo `%s' para `%s'" + + #: attribs.c:1284 + #, c-format + msgid "invalid vector type for attribute `%s'" + msgstr "tipo vector inválido para el atributo `%s'" + + #: attribs.c:1307 attribs.c:1312 + msgid "no vector mode with the size and type specified could be found" + msgstr "no se puede encontrar un modo vector con el tamaño y tipo especificados" + + #: builtins.c:282 + msgid "offset outside bounds of constant string" + msgstr "el desplazamiento fuera de los límites de la constante de cadena" + + #: builtins.c:759 + msgid "second arg to `__builtin_prefetch' must be a constant" + msgstr "el segundo argumento de `__builtin_prefetch' debe ser una constante" + + #: builtins.c:766 + msgid "invalid second arg to __builtin_prefetch; using zero" + msgstr "el segundo argumento para __builtin_prefetch es inválido; se usará cero" + + #: builtins.c:773 + msgid "third arg to `__builtin_prefetch' must be a constant" + msgstr "el tercer argumento de `__builtin_prefetch' debe ser una constante" + + #: builtins.c:780 + msgid "invalid third arg to __builtin_prefetch; using zero" + msgstr "el tercer argumento para __builtin_prefetch es inválido; se usará cero" + + #. ??? We used to try and build up a call to the out of line function, + #. guessing about what registers needed saving etc. This became much + #. harder with __builtin_va_start, since we don't have a tree for a + #. call to __builtin_saveregs to fall back on. There was exactly one + #. port (i860) that used this code, and I'm unconvinced it could actually + #. handle the general case. So we no longer try to handle anything + #. weird and make the backend absorb the evil. + #: builtins.c:2760 + msgid "__builtin_saveregs not supported by this target" + msgstr "no se da soporte a __builtin_saveregs en este objetivo" + + #: builtins.c:2802 + msgid "argument of `__builtin_args_info' must be constant" + msgstr "el argumento de `__builtin_args_info' debe ser constante" + + #: builtins.c:2808 + msgid "argument of `__builtin_args_info' out of range" + msgstr "el argumento de `__builtin_args_info' está fuera de rango" + + #: builtins.c:2814 + msgid "missing argument in `__builtin_args_info'" + msgstr "falta un argumento en `__builtin_args_info'" + + #: builtins.c:2846 + msgid "`va_start' used in function with fixed args" + msgstr "se usó `va_start' en una función con argumentos fijos" + + #: builtins.c:2865 + msgid "second parameter of `va_start' not last named argument" + msgstr "el segundo parámetro de `va_start' no es el último argumento nombrado" + + #. Evidently an out of date version of ; can't validate + #. va_start's second argument, but can still work as intended. + #: builtins.c:2870 + msgid "`__builtin_next_arg' called without an argument" + msgstr "se llamó a `__builtin_next_arg' sin un argumento" + + #: builtins.c:2974 + msgid "too many arguments to function `va_start'" + msgstr "demasiados argumentos para la función `va_start'" + + #: builtins.c:3075 + msgid "first argument to `va_arg' not of type `va_list'" + msgstr "el primer argumento para `va_arg' no es del tipo `va_list'" + + #. Unfortunately, this is merely undefined, rather than a constraint + #. violation, so we cannot make this an error. If this call is never + #. executed, the program is still strictly conforming. + #: builtins.c:3106 + #, c-format + msgid "`%s' is promoted to `%s' when passed through `...'" + msgstr "`%s' se promueve a `%s' cuando pasa a través de `...'" + + #: builtins.c:3111 + #, c-format + msgid "(so you should pass `%s' not `%s' to `va_arg')" + msgstr "(así que debe pasar `%s' y no `%s' a `va_arg')" + + #: builtins.c:3242 + msgid "invalid arg to `__builtin_frame_address'" + msgstr "argumento inválido para `__builtin_frame_address'" + + #: builtins.c:3244 + msgid "invalid arg to `__builtin_return_address'" + msgstr "argumento inválido para `__builtin_return_address'" + + #: builtins.c:3258 + msgid "unsupported arg to `__builtin_frame_address'" + msgstr "argumento sin soporte para `__builtin_frame_address'" + + #: builtins.c:3260 + msgid "unsupported arg to `__builtin_return_address'" + msgstr "argumento no soportado para `__builtin_return_address'" + + #: builtins.c:3428 + msgid "second arg to `__builtin_expect' must be a constant" + msgstr "el segundo argumento de `__builtin_expect' debe ser una constante" + + #: builtins.c:3909 + msgid "__builtin_longjmp second argument must be 1" + msgstr "el segundo argumento de __builtin_longjump debe ser 1" + + #. just do library call, if unknown builtin + #: builtins.c:3982 c-common.c:3811 + #, c-format + msgid "built-in function `%s' not currently supported" + msgstr "no se soporta actualmente la función interna `%s'" + + #: c-common.c:550 + #, c-format + msgid "`%s' is not defined outside of function scope" + msgstr "`%s' no está definido fuera del ámbito de la función" + + #: c-common.c:590 + msgid "concatenation of string literals with __FUNCTION__ is deprecated. This feature will be removed in future" + msgstr "la concatenación de literales de cadena con __FUNCTION__ está deprecado. Esta característica será eliminada en el futuro" + + #: c-common.c:659 + #, c-format + msgid "string length `%d' is greater than the length `%d' ISO C%d compilers are required to support" + msgstr "la longitud de la cadena `%d' es mayor que la longitud `%d' que se requiere que los compiladores ISO C%d den soporte" + + #: c-common.c:708 + msgid "overflow in constant expression" + msgstr "desbordamiento en la expresión constante" + + #: c-common.c:729 + msgid "integer overflow in expression" + msgstr "desbordamiento entero en la expresión" + + #: c-common.c:738 + msgid "floating point overflow in expression" + msgstr "desbordamiento de coma flotante en la expresión" + + #: c-common.c:744 + msgid "vector overflow in expression" + msgstr "desbordamiento vectorial en la expresión" + + #. This detects cases like converting -129 or 256 to unsigned char. + #: c-common.c:765 + msgid "large integer implicitly truncated to unsigned type" + msgstr "entero grande truncado implícitamente al tipo unsigned" + + #: c-common.c:767 + msgid "negative integer implicitly converted to unsigned type" + msgstr "entero negativo truncado implícitamente al tipo unsigned" + + #: c-common.c:814 + msgid "overflow in implicit constant conversion" + msgstr "desbordamiento en la conversión implícita de constante" + + #: c-common.c:962 + #, c-format + msgid "operation on `%s' may be undefined" + msgstr "la operación sobre `%s' puede estar indefinida" + + #: c-common.c:1253 + msgid "expression statement has incomplete type" + msgstr "la declaración de la expresión tiene tipo de dato incompleto" + + #: c-common.c:1286 + msgid "case label does not reduce to an integer constant" + msgstr "la etiqueta de `case' no se reduce a una constante entera" + + #: c-common.c:1586 + msgid "invalid truth-value expression" + msgstr "expresión de valor verdadero inválida" + + #: c-common.c:1637 + #, c-format + msgid "invalid operands to binary %s" + msgstr "operadores inválidos para el binario %s" + + #: c-common.c:1872 c-common.c:1881 + msgid "comparison is always false due to limited range of data type" + msgstr "la comparación siempre es falsa debido al rango limitado del tipo de datos" + + #: c-common.c:1874 c-common.c:1883 + msgid "comparison is always true due to limited range of data type" + msgstr "la comparación siempre es verdadera debido al rango limitado del tipo de datos" + + #: c-common.c:1949 + msgid "comparison of unsigned expression >= 0 is always true" + msgstr "la comparación de una expresión unsigned >= 0 siempre es verdadera" + + #: c-common.c:1958 + msgid "comparison of unsigned expression < 0 is always false" + msgstr "la comparación de una expresión unsigned < 0 siempre es falsa" + + #: c-common.c:2005 + msgid "pointer of type `void *' used in arithmetic" + msgstr "se usó un apuntador de tipo `void *' en la aritmética" + + #: c-common.c:2011 + msgid "pointer to a function used in arithmetic" + msgstr "se usó un apuntador a una función en la aritmética" + + #: c-common.c:2017 + msgid "pointer to member function used in arithmetic" + msgstr "se usó un apuntador a una función miembro en la aritmética" + + #: c-common.c:2023 + msgid "pointer to a member used in arithmetic" + msgstr "se usó un apuntador a un miembro en la aritmética" + + #: c-common.c:2110 f/com.c:14823 + msgid "struct type value used where scalar is required" + msgstr "se usa un valor de tipo struct cuando se requiere un escalar" + + #: c-common.c:2114 f/com.c:14827 + msgid "union type value used where scalar is required" + msgstr "se usa un valor de tipo union cuando se requiere un escalar" + + #: c-common.c:2118 f/com.c:14831 + msgid "array type value used where scalar is required" + msgstr "se usa un valor de tipo matriz cuando se requiere un escalar" + + #: c-common.c:2233 f/com.c:14957 + msgid "suggest parentheses around assignment used as truth value" + msgstr "se sugieren paréntesis alrededor de la asignación usada como valor verdadero" + + #: c-common.c:2277 c-common.c:2309 + msgid "invalid use of `restrict'" + msgstr "uso inválido de `restrict'" + + #: c-common.c:2425 + msgid "__alignof__ applied to an incomplete type" + msgstr "__alignof__ aplicado a un tipo de dato incompleto" + + #: c-common.c:2451 + msgid "`__alignof' applied to a bit-field" + msgstr "`__alignof' applicado a un campo de bits" + + #: c-common.c:2893 + #, c-format + msgid "cannot disable built-in function `%s'" + msgstr "no se puede desactivar la función interna `%s'" + + #: c-common.c:3174 c-typeck.c:1781 + #, c-format + msgid "too few arguments to function `%s'" + msgstr "muy pocos argumentos para la función `%s'" + + #: c-common.c:3180 c-typeck.c:1634 + #, c-format + msgid "too many arguments to function `%s'" + msgstr "demasiados argumentos para la función `%s'" + + #: c-common.c:3369 + msgid "pointers are not permitted as case values" + msgstr "los apuntadores no son permitidos como valores case" + + #: c-common.c:3375 + msgid "ISO C++ forbids range expressions in switch statements" + msgstr "ISO C++ prohibe un rango de expresiones en las declaraciones switch" + + #: c-common.c:3377 + msgid "ISO C forbids range expressions in switch statements" + msgstr "ISO C prohibe un rango de expresiones en las declaraciones switch" + + #: c-common.c:3407 + msgid "empty range specified" + msgstr "se especificó un rango vacío" + + #: c-common.c:3458 + msgid "duplicate (or overlapping) case value" + msgstr "valor case duplicado (o traslapado)" + + #: c-common.c:3460 + msgid "this is the first entry overlapping that value" + msgstr "esta es la primera entrada que traslapa ese valor" + + #: c-common.c:3464 + msgid "duplicate case value" + msgstr "valor de case duplicado" + + #: c-common.c:3465 + msgid "previously used here" + msgstr "se usó previamente aquí" + + #: c-common.c:3469 + msgid "multiple default labels in one switch" + msgstr "múltiples etiquetas por omisión en un solo switch" + + #: c-common.c:3470 + msgid "this is the first default label" + msgstr "esta es la primera etiqueta por omisión" + + #: c-common.c:3498 + msgid "ISO C++ forbids taking the address of a label" + msgstr "ISO C++ prohibe tomar la dirección de una etiqueta" + + #: c-common.c:3500 + msgid "ISO C forbids taking the address of a label" + msgstr "ISO C prohibe tomar la dirección de una etiqueta" + + #: c-common.c:4148 + msgid "-Wformat-y2k ignored without -Wformat" + msgstr "se ignora -Wformat-y2k sin -Wformat" + + #: c-common.c:4150 + msgid "-Wformat-extra-args ignored without -Wformat" + msgstr "se ignora -Wformat-extra-args sin -Wformat" + + #: c-common.c:4152 + msgid "-Wformat-nonliteral ignored without -Wformat" + msgstr "se ignora -Wformat-nonliteral sin -Wformat" + + #: c-common.c:4154 + msgid "-Wformat-security ignored without -Wformat" + msgstr "se ignora -Wformat-security sin -Wformat" + + #: c-common.c:4156 + msgid "-Wmissing-format-attribute ignored without -Wformat" + msgstr "se ignora -Wformat-attribute sin -Wformat" + + #: c-common.c:4247 + #, c-format + msgid "declaration of `%s' shadows %s" + msgstr "la declaración de `%s' obscurece a %s" + + #: c-convert.c:78 c-typeck.c:1035 c-typeck.c:4047 cp/typeck.c:1673 cp/typeck.c:6165 + msgid "void value not ignored as it ought to be" + msgstr "valor void no ignorado como debería de ser" + + #: c-convert.c:110 java/typeck.c:150 + msgid "conversion to non-scalar type requested" + msgstr "se solicitó conversión a tipo no escalar" + + #: c-decl.c:476 + msgid "-traditional is deprecated and may be removed" + msgstr "-traditional está deprecado y será eliminado" + + #: c-decl.c:566 + #, c-format + msgid "unknown C standard `%s'" + msgstr "no se conoce el estándard de C `%s'" + + #: c-decl.c:848 + #, c-format + msgid "array `%s' assumed to have one element" + msgstr "se asume que la matriz `%s' tiene un elemento" + + #: c-decl.c:1024 + #, c-format + msgid "`struct %s' incomplete in scope ending here" + msgstr "el `struct %s' incompleto en el ámbito termina aquí" + + #: c-decl.c:1027 + #, c-format + msgid "`union %s' incomplete in scope ending here" + msgstr "el `union %s' incompleto en el ámbito termina aquí" + + #: c-decl.c:1030 + #, c-format + msgid "`enum %s' incomplete in scope ending here" + msgstr "el `enum %s' incompleto en el ámbito termina aquí" + + #: c-decl.c:1144 c-decl.c:1285 java/decl.c:1377 + #, c-format + msgid "label `%s' used but not defined" + msgstr "se usa la etiqueta `%s' pero no está definida" + + #: c-decl.c:1150 c-decl.c:1292 java/decl.c:1383 + #, c-format + msgid "label `%s' defined but not used" + msgstr "la etiqueta `%s' está definida pero no se usa" + + #: c-decl.c:1409 cp/decl.c:3128 + #, c-format + msgid "function `%s' redeclared as inline" + msgstr "la función `%s' es redeclarada como inline" + + #: c-decl.c:1411 cp/decl.c:3130 + #, c-format + msgid "previous declaration of function `%s' with attribute noinline" + msgstr "declaración previa de la función `%s' con el atributo noinline" + + #: c-decl.c:1418 cp/decl.c:3137 + #, c-format + msgid "function `%s' redeclared with attribute noinline" + msgstr "la función `%s' redeclarada con el atributo noinline" + + #: c-decl.c:1420 cp/decl.c:3139 + #, c-format + msgid "previous declaration of function `%s' was inline" + msgstr "la declaración previa de la función `%s' era inline" + + #: c-decl.c:1449 c-decl.c:1502 + #, c-format + msgid "shadowing built-in function `%s'" + msgstr "obscureciendo la función interna `%s'" + + #: c-decl.c:1451 + #, c-format + msgid "shadowing library function `%s'" + msgstr "obscureciendo la función de biblioteca `%s'" + + #: c-decl.c:1457 + #, c-format + msgid "library function `%s' declared as non-function" + msgstr "la función de biblioteca `%s' no es declarada como función" + + #: c-decl.c:1461 c-decl.c:1464 + #, c-format + msgid "built-in function `%s' declared as non-function" + msgstr "la función interna `%s' no es declarada como función" + + #: c-decl.c:1468 objc/objc-act.c:2334 objc/objc-act.c:6036 + #, c-format + msgid "`%s' redeclared as different kind of symbol" + msgstr "`%s' redeclarado como un tipo diferente de símbolo" + + #: c-decl.c:1469 c-decl.c:1667 c-decl.c:1817 objc/objc-act.c:2336 objc/objc-act.c:6038 objc/objc-act.c:6093 + #, c-format + msgid "previous declaration of `%s'" + msgstr "declaración previa de `%s'" + + #. If types don't match for a built-in, throw away the built-in. + #: c-decl.c:1571 + #, c-format + msgid "conflicting types for built-in function `%s'" + msgstr "tipos en conflicto para la función interna `%s'" + + #: c-decl.c:1614 c-decl.c:1633 + #, c-format + msgid "conflicting types for `%s'" + msgstr "tipos en conflicto para `%s'" + + #: c-decl.c:1656 + msgid "a parameter list with an ellipsis can't match an empty parameter name list declaration" + msgstr "una lista de parámetros con una elipsis no puede coincidir con una declaración de nombre de lista de parámetros vacía." + + #: c-decl.c:1662 + msgid "an argument type that has a default promotion can't match an empty parameter name list declaration" + msgstr "un tipo de argumento que tiene una promoción por omisión no puede coincidir con una declaración de nombre de lista de parámetros vacía." + + #: c-decl.c:1677 c-decl.c:1700 + #, c-format + msgid "redefinition of `%s'" + msgstr "redefinición de `%s'" + + #: c-decl.c:1680 + #, c-format + msgid "redeclaration of `%s'" + msgstr "redeclaración de `%s'" + + #: c-decl.c:1683 + #, c-format + msgid "conflicting declarations of `%s'" + msgstr "declaraciones de `%s' en conflicto" + + #: c-decl.c:1727 + #, c-format + msgid "prototype for `%s' follows" + msgstr "el prototipo para '%s' a continuación" + + #: c-decl.c:1728 c-decl.c:1736 c-decl.c:1752 + msgid "non-prototype definition here" + msgstr "la definición del no prototipo aquí" + + #: c-decl.c:1735 + #, c-format + msgid "prototype for `%s' follows and number of arguments doesn't match" + msgstr "el prototipo para `%s' continúa y el número de argumentos no coincide" + + #: c-decl.c:1750 + #, c-format + msgid "prototype for `%s' follows and argument %d doesn't match" + msgstr "el prototipo para `%s' a continuación y el argumento %d no coinciden" + + #: c-decl.c:1768 + #, c-format + msgid "`%s' declared inline after being called" + msgstr "`%s' declarado inline antes de ser llamado" + + #: c-decl.c:1774 + #, c-format + msgid "`%s' declared inline after its definition" + msgstr "`%s' declarado inline después de su definición" + + #: c-decl.c:1781 + #, c-format + msgid "static declaration for `%s' follows non-static" + msgstr "la declaración static para `%s' a continuación de una no static" + + #: c-decl.c:1789 + #, c-format + msgid "non-static declaration for `%s' follows static" + msgstr "la declaración no static para `%s' a continuación de una static" + + #: c-decl.c:1796 + #, c-format + msgid "const declaration for `%s' follows non-const" + msgstr "la declaración const para '%s' a continuación de una no const" + + #: c-decl.c:1803 + #, c-format + msgid "type qualifiers for `%s' conflict with previous decl" + msgstr "los calificadores de tipo para `%s' generan conflicto con la declaración previa" + + #: c-decl.c:1816 + #, c-format + msgid "redundant redeclaration of `%s' in same scope" + msgstr "declaración redundante de `%s' en el mismo ámbito" + + #: c-decl.c:2120 java/decl.c:1076 + #, c-format + msgid "declaration of `%s' shadows a parameter" + msgstr "la declaración de `%s' obscurece un parámetro" + + #: c-decl.c:2123 java/decl.c:1079 + #, c-format + msgid "declaration of `%s' shadows a symbol from the parameter list" + msgstr "la declaración de `%s' obscurece un símbolo de la lista de parámetros" + + #: c-decl.c:2144 cp/decl.c:4236 + msgid "a parameter" + msgstr "un parámetro" + + #: c-decl.c:2146 cp/decl.c:4253 + msgid "a previous local" + msgstr "un local previo" + + #. XXX shadow warnings in outer-more namespaces + #: c-decl.c:2150 cp/decl.c:4257 + msgid "a global declaration" + msgstr "una declaración global" + + #: c-decl.c:2194 + #, c-format + msgid "nested extern declaration of `%s'" + msgstr "declaración externa anidada de `%s'" + + #: c-decl.c:2216 java/decl.c:1029 + #, c-format + msgid "`%s' used prior to declaration" + msgstr "se usa `%s' previo a la declaración" + + #: c-decl.c:2231 c-decl.c:2446 + #, c-format + msgid "`%s' was declared implicitly `extern' and later `static'" + msgstr "`%s' se declaró implícitamente `extern' y después `static'" + + #: c-decl.c:2341 cp/decl.c:4095 + msgid "type mismatch with previous external decl" + msgstr "no coinciden los tipos con la declaración externa previa" + + #: c-decl.c:2342 + #, c-format + msgid "previous external decl of `%s'" + msgstr "declaración externa previa de `%s'" + + #: c-decl.c:2355 + msgid "type mismatch with previous implicit declaration" + msgstr "no coinciden los tipos con la declaración implícita previa" + + #: c-decl.c:2357 + #, c-format + msgid "previous implicit declaration of `%s'" + msgstr "declaración implícita previa de `%s'" + + #: c-decl.c:2374 + #, c-format + msgid "type of external `%s' is not global" + msgstr "el tamaño de `%s' externo no es global" + + #: c-decl.c:2425 + #, c-format + msgid "`%s' was previously implicitly declared to return `int'" + msgstr "`%s' fue declarado previa e implícitamente para devolver `int'" + + #: c-decl.c:2450 + #, c-format + msgid "`%s' was declared `extern' and later `static'" + msgstr "`%s' fue declarado `extern' y después `static'" + + #: c-decl.c:2474 + #, c-format + msgid "extern declaration of `%s' doesn't match global one" + msgstr "la declaración externa de `%s' no coincide con la global" + + #: c-decl.c:2516 + #, c-format + msgid "`%s' locally external but globally static" + msgstr "`%s' es externa localmente pero estática globalmente" + + #: c-decl.c:2638 + #, c-format + msgid "function `%s' was previously declared within a block" + msgstr "la función `%s' fue declarada previamente dentro de un bloque" + + #: c-decl.c:2658 c-decl.c:2660 + #, c-format + msgid "implicit declaration of function `%s'" + msgstr "declaración implícita de la función `%s'" + + #: c-decl.c:2748 + #, c-format + msgid "label %s referenced outside of any function" + msgstr "la etiqueta %s es referenciada fuera de cualquier función" + + #: c-decl.c:2805 + #, c-format + msgid "duplicate label declaration `%s'" + msgstr "declaración de la etiqueta `%s' duplicada" + + #: c-decl.c:2808 + msgid "this is a previous declaration" + msgstr "esta es una declaración previa" + + #: c-decl.c:3320 + msgid "unnamed struct/union that defines no instances" + msgstr "struct/union sin nombre que no define ninguna instancia" + + #: c-decl.c:3339 + msgid "useless keyword or type name in empty declaration" + msgstr "palabras claves inútiles o nombres de tipos en una declaración vacía" + + #: c-decl.c:3346 + msgid "two types specified in one empty declaration" + msgstr "se especificaron dos tipos en una declaración vacía" + + #: c-decl.c:3351 c-parse.y:725 c-parse.y:727 parse.y:742 parse.y:1827 objc-parse.y:761 objc-parse.y:763 objc-parse.y:2997 + msgid "empty declaration" + msgstr "declaración vacía" + + #: c-decl.c:3381 + msgid "ISO C89 does not support `static' or type qualifiers in parameter array declarators" + msgstr "ISO C89 no tiene soporte para `static' o calificadores de tipo en las declaraciones de parámetros de matrices" + + #: c-decl.c:3383 + msgid "ISO C89 does not support `[*]' array declarators" + msgstr "ISO C89 no tiene soporte para declaradores de matriz `[*]'" + + #: c-decl.c:3386 + msgid "GCC does not yet properly implement `[*]' array declarators" + msgstr "GCC aún no implementa adecuadamente los declaradores de matriz `[*]'" + + #: c-decl.c:3405 + msgid "static or type qualifiers in abstract declarator" + msgstr "static o calificador de tipo en un declarador abstracto" + + #: c-decl.c:3479 + #, c-format + msgid "`%s' is usually a function" + msgstr "`%s' generalmente es una función" + + #: c-decl.c:3493 + #, c-format + msgid "typedef `%s' is initialized" + msgstr "typedef `%s' tiene valor inicial" + + #: c-decl.c:3500 + #, c-format + msgid "function `%s' is initialized like a variable" + msgstr "la función `%s' tiene valor inicial como una variable" + + #. DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE. + #: c-decl.c:3507 + #, c-format + msgid "parameter `%s' is initialized" + msgstr "el parámetro `%s' tiene valor inicial" + + #: c-decl.c:3527 c-typeck.c:4841 + msgid "variable-sized object may not be initialized" + msgstr "un objeto de tamaño variable no puede tener valor inicial" + + #: c-decl.c:3533 + #, c-format + msgid "variable `%s' has initializer but incomplete type" + msgstr "la variable `%s' tiene asignación de valor inicial, pero tipo de dato incompleto" + + #: c-decl.c:3539 + #, c-format + msgid "elements of array `%s' have incomplete type" + msgstr "algunos elementos de la matriz `%s' tienen tipo de dato incompleto" + + #: c-decl.c:3552 + #, c-format + msgid "declaration of `%s' has `extern' and is initialized" + msgstr "la declaración de `%s' tiene `extern' y tiene valor inicial" + + #: c-decl.c:3591 c-decl.c:6246 cp/decl.c:7368 cp/decl.c:13623 + #, c-format + msgid "inline function `%s' given attribute noinline" + msgstr "se le dió a la función inline `%s' un atributo noinline" + + #: c-decl.c:3674 + #, c-format + msgid "initializer fails to determine size of `%s'" + msgstr "el iniciador no pudo determinar el tamaño de `%s'" + + #: c-decl.c:3679 + #, c-format + msgid "array size missing in `%s'" + msgstr "falta el tamaño de la matriz en %s" + + #: c-decl.c:3695 + #, c-format + msgid "zero or negative size array `%s'" + msgstr "matriz `%s' de tamaño cero o negativo" + + #: c-decl.c:3723 + #, c-format + msgid "storage size of `%s' isn't known" + msgstr "no se conoce el tamaño de almacenamiento de `%s'" + + #: c-decl.c:3733 + #, c-format + msgid "storage size of `%s' isn't constant" + msgstr "el tamaño de almacenamiento de `%s' no es constante" + + #: c-decl.c:3792 + #, c-format + msgid "ignoring asm-specifier for non-static local variable `%s'" + msgstr "se ignora el especificador asm para la variable local no estática `%s'" + + #: c-decl.c:3867 + #, c-format + msgid "ISO C forbids parameter `%s' shadowing typedef" + msgstr "ISO C prohibe el obscurecimiento del parámetro `%s' de typedef" + + #: c-decl.c:4171 cp/decl.c:10171 + msgid "`long long long' is too long for GCC" + msgstr "`long long long' es demasiado largo para GCC" + + #: c-decl.c:4176 + msgid "ISO C89 does not support `long long'" + msgstr "ISO C89 no da soporte a `long long'" + + #: c-decl.c:4181 cp/decl.c:10176 + #, c-format + msgid "duplicate `%s'" + msgstr "`%s' duplicado" + + #: c-decl.c:4187 cp/decl.c:10200 + #, c-format + msgid "two or more data types in declaration of `%s'" + msgstr "dos o más tipos de datos en la declaración de `%s'" + + #: c-decl.c:4207 cp/decl.c:10205 + #, c-format + msgid "`%s' fails to be a typedef or built in type" + msgstr "`%s' falla al ser un typedef o un tipo interno del compilador" + + #: c-decl.c:4246 + #, c-format + msgid "type defaults to `int' in declaration of `%s'" + msgstr "el tipo de dato por omisión es `int' en la declaración de `%s'" + + #: c-decl.c:4275 + #, c-format + msgid "both long and short specified for `%s'" + msgstr "se especifica long y short al mismo tiempo para `%s'" + + #: c-decl.c:4279 cp/decl.c:10320 + #, c-format + msgid "long or short specified with char for `%s'" + msgstr "se especifica long ó short con char para `%s'" + + #: c-decl.c:4286 cp/decl.c:10324 + #, c-format + msgid "long or short specified with floating type for `%s'" + msgstr "se especifica long ó short con tipo floating para `%s'" + + #: c-decl.c:4289 + msgid "the only valid combination is `long double'" + msgstr "la única combinación válida es `long double'" + + #: c-decl.c:4295 + #, c-format + msgid "both signed and unsigned specified for `%s'" + msgstr "se especifica signed y unsigned al mismo tiempo para `%s'" + + #: c-decl.c:4297 cp/decl.c:10313 + #, c-format + msgid "long, short, signed or unsigned invalid for `%s'" + msgstr "long, short, signed ó unsigned inválidos para `%s'" + + #: c-decl.c:4303 cp/decl.c:10333 + #, c-format + msgid "long, short, signed or unsigned used invalidly for `%s'" + msgstr "uso inválido de long, short, signed ó unsigned para `%s'" + + #: c-decl.c:4322 cp/decl.c:10354 + #, c-format + msgid "complex invalid for `%s'" + msgstr "complex inválido para `%s'" + + #: c-decl.c:4367 + msgid "ISO C89 does not support complex types" + msgstr "ISO C89 no tiene soporte para tipos complejos" + + #: c-decl.c:4379 + msgid "ISO C does not support plain `complex' meaning `double complex'" + msgstr "ISO C no tiene soporte para `complex' simples que significan `double complex'" + + #: c-decl.c:4385 c-decl.c:4397 + msgid "ISO C does not support complex integer types" + msgstr "ISO C no da soporte a tipos enteros complejos" + + #: c-decl.c:4412 c-decl.c:4851 cp/decl.c:10969 + msgid "duplicate `const'" + msgstr "`const' duplicado" + + #: c-decl.c:4414 c-decl.c:4855 cp/decl.c:10973 + msgid "duplicate `restrict'" + msgstr "`restrict' duplicado" + + #: c-decl.c:4416 c-decl.c:4853 cp/decl.c:10971 + msgid "duplicate `volatile'" + msgstr "`volatile' duplicado" + + #: c-decl.c:4438 cp/decl.c:10509 + #, c-format + msgid "multiple storage classes in declaration of `%s'" + msgstr "múltiples clases de almacenamiento en la declaración de `%s'" + + #: c-decl.c:4447 + msgid "function definition declared `auto'" + msgstr "la definición de la función lo declaró como `auto'" + + #: c-decl.c:4449 + msgid "function definition declared `register'" + msgstr "la definición de la función lo declaró como `register'" + + #: c-decl.c:4451 + msgid "function definition declared `typedef'" + msgstr "la definición de la función lo declaró como `typedef'" + + #: c-decl.c:4464 + #, c-format + msgid "storage class specified for structure field `%s'" + msgstr "se especificó una clase de almacenamiento para el campo de la estructura `%s'" + + #: c-decl.c:4468 cp/decl.c:10556 + #, c-format + msgid "storage class specified for parameter `%s'" + msgstr "se especificó una clase de almacenamiento para el parámetro `%s'" + + #: c-decl.c:4471 cp/decl.c:10558 + msgid "storage class specified for typename" + msgstr "se especificó una clase de almacenamiento para el nombre de tipo" + + #: c-decl.c:4483 cp/decl.c:10572 + #, c-format + msgid "`%s' initialized and declared `extern'" + msgstr "`%s' iniciado y declarado como `extern'" + + #: c-decl.c:4485 cp/decl.c:10575 + #, c-format + msgid "`%s' has both `extern' and initializer" + msgstr "`%s' tiene `extern' y asignador de valor inicial al mismo tiempo" + + #: c-decl.c:4489 cp/decl.c:10579 + #, c-format + msgid "nested function `%s' declared `extern'" + msgstr "la función anidada `%s' se declaró `extern'" + + #: c-decl.c:4492 cp/decl.c:10583 + #, c-format + msgid "top-level declaration of `%s' specifies `auto'" + msgstr "la declaración del nivel superior de `%s' especifica `auto'" + + #. Only the innermost declarator (making a parameter be of + #. array type which is converted to pointer type) + #. may have static or type qualifiers. + #: c-decl.c:4527 c-decl.c:4716 + msgid "static or type qualifiers in non-parameter array declarator" + msgstr "static o calificadores de tipo en un declarador de matriz que no es parámetro" + + #: c-decl.c:4571 + #, c-format + msgid "declaration of `%s' as array of voids" + msgstr "la declaración de `%s' como una matriz de voids" + + #: c-decl.c:4577 + #, c-format + msgid "declaration of `%s' as array of functions" + msgstr "la declaración de `%s' como una matriz de funciones" + + #: c-decl.c:4598 + #, c-format + msgid "size of array `%s' has non-integer type" + msgstr "el tamaño de la matriz `%s' tiene un tipo no entero" + + #: c-decl.c:4603 + #, c-format + msgid "ISO C forbids zero-size array `%s'" + msgstr "ISO C prohibe la matriz `%s' de tamaño cero" + + #: c-decl.c:4610 + #, c-format + msgid "size of array `%s' is negative" + msgstr "el tamaño de la matriz `%s' es negativo" + + #: c-decl.c:4623 + #, c-format + msgid "ISO C89 forbids array `%s' whose size can't be evaluated" + msgstr "ISO C89 prohibe la matriz `%s' cuyo tamaño no puede ser evaluado" + + #: c-decl.c:4626 + #, c-format + msgid "ISO C89 forbids variable-size array `%s'" + msgstr "ISO C89 prohibe la matriz `%s' de tamaño variable" + + #: c-decl.c:4656 c-decl.c:4877 cp/decl.c:11179 + #, c-format + msgid "size of array `%s' is too large" + msgstr "el tamaño de la matriz `%s' es demasiado grande" + + #: c-decl.c:4673 + msgid "ISO C89 does not support flexible array members" + msgstr "ISO C89 no tiene soporte para miembros de matriz flexibles" + + #: c-decl.c:4683 + msgid "array type has incomplete element type" + msgstr "el tipo matriz tiene tipo de elemento incompleto" + + #: c-decl.c:4690 c-decl.c:4927 + msgid "ISO C forbids const or volatile function types" + msgstr "ISO C prohibe los tipos de función const o volatile" + + #: c-decl.c:4736 cp/decl.c:10720 + #, c-format + msgid "`%s' declared as function returning a function" + msgstr "`%s' que es declarado como función devuelve una función" + + #: c-decl.c:4741 cp/decl.c:10725 + #, c-format + msgid "`%s' declared as function returning an array" + msgstr "`%s' que es declarado como función devuelve una matriz" + + #: c-decl.c:4776 + msgid "ISO C forbids qualified void function return type" + msgstr "ISO C prohibe el tipo calificado de devolución de una función void" + + #: c-decl.c:4780 + msgid "type qualifiers ignored on function return type" + msgstr "se ignoran los calificadores de tipo en el tipo de devolución de la función" + + #: c-decl.c:4809 c-decl.c:4892 c-decl.c:5016 c-decl.c:5110 + msgid "ISO C forbids qualified function types" + msgstr "ISO C prohibe los tipos de función calificados" + + #: c-decl.c:4849 cp/decl.c:10965 + msgid "invalid type modifier within pointer declarator" + msgstr "modificador de tipo inválido dentro de la declaración del apuntador" + + #: c-decl.c:4947 cp/decl.c:11457 + #, c-format + msgid "variable or field `%s' declared void" + msgstr "variable o campo `%s' declarado void" + + #: c-decl.c:4980 + msgid "attributes in parameter array declarator ignored" + msgstr "se ignoran los atributos en los declaradores de parámetros de matriz" + + #: c-decl.c:5005 + msgid "invalid type modifier within array declarator" + msgstr "modificador de tipo inválido dentro de un declarador de matriz" + + #: c-decl.c:5054 + #, c-format + msgid "field `%s' declared as a function" + msgstr "el campo `%s' declarado como una función" + + #: c-decl.c:5060 + #, c-format + msgid "field `%s' has incomplete type" + msgstr "el campo `%s' tiene tipo de dato incompleto" + + #: c-decl.c:5092 c-decl.c:5094 c-decl.c:5101 + #, c-format + msgid "invalid storage class for function `%s'" + msgstr "clase de almacenamiento inválida para la función `%s'" + + #: c-decl.c:5116 + msgid "`noreturn' function returns non-void value" + msgstr "la función `no return' devuelve un valor que no es void" + + #: c-decl.c:5131 + msgid "cannot inline function `main'" + msgstr "no se puede hacer inline la función `main'" + + #: c-decl.c:5184 + #, c-format + msgid "variable `%s' declared `inline'" + msgstr "la variable `%s' fue declarada como `inline'" + + #: c-decl.c:5257 c-decl.c:6298 + msgid "function declaration isn't a prototype" + msgstr "la declaración de la función no es un prototipo" + + #: c-decl.c:5263 + msgid "parameter names (without types) in function declaration" + msgstr "nombres de parámetros (sin tipos) en la declaración de la función" + + #: c-decl.c:5295 c-decl.c:6689 + #, c-format + msgid "parameter `%s' has incomplete type" + msgstr "el parámetro `%s' tiene tipo de dato incompleto" + + #: c-decl.c:5298 + msgid "parameter has incomplete type" + msgstr "el parámetro tiene tipo incompleto" + + #: c-decl.c:5319 + #, c-format + msgid "parameter `%s' points to incomplete type" + msgstr "el parámetro `%s' apunta a un tipo incompleto" + + #: c-decl.c:5322 + msgid "parameter points to incomplete type" + msgstr "el parámetro apunta a un tipo incompleto" + + #: c-decl.c:5387 + #, c-format + msgid "parameter `%s' has just a forward declaration" + msgstr "el parámetro `%s' sólo tiene una declaración posterior" + + #: c-decl.c:5428 + msgid "`void' in parameter list must be the entire list" + msgstr "`void' en la lista de parámetros debe ser la lista completa" + + #: c-decl.c:5459 + #, c-format + msgid "`struct %s' declared inside parameter list" + msgstr "se declaró `struct %s' dentro de la lista de parámetros" + + #: c-decl.c:5462 + #, c-format + msgid "`union %s' declared inside parameter list" + msgstr "se declaró `union %s' dentro de la lista de parámetros" + + #: c-decl.c:5465 + #, c-format + msgid "`enum %s' declared inside parameter list" + msgstr "se declaró `enum %s' dentro de la lista de parámetros" + + #: c-decl.c:5472 + msgid "anonymous struct declared inside parameter list" + msgstr "struct anónimo declarado dentro de una lista de parámetros" + + #: c-decl.c:5474 + msgid "anonymous union declared inside parameter list" + msgstr "union anónimo declarado dentro de una lista de parámetros" + + #: c-decl.c:5476 + msgid "anonymous enum declared inside parameter list" + msgstr "enum anónimo declarado dentro de una lista de parámetros" + + #: c-decl.c:5480 + msgid "its scope is only this definition or declaration, which is probably not what you want" + msgstr "su ámbito es solamente esta definición o declaración, lo cual probablemente no sea lo que desea" + + #: c-decl.c:5559 + #, c-format + msgid "redefinition of `union %s'" + msgstr "redefinición de `union %s'" + + #: c-decl.c:5562 + #, c-format + msgid "redefinition of `struct %s'" + msgstr "redefinición de `struct %s'" + + #: c-decl.c:5601 + msgid "unnamed fields of type other than struct or union are not allowed" + msgstr "no se permiten campos sin nombre de otro tipo que no sea struct o union" + + #: c-decl.c:5642 c-decl.c:5645 + #, c-format + msgid "%s defined inside parms" + msgstr "se definió %s dentro de los parámetros" + + #: c-decl.c:5643 c-decl.c:5646 c-decl.c:5657 + msgid "union" + msgstr "unión" + + #: c-decl.c:5643 c-decl.c:5646 + msgid "structure" + msgstr "estructura" + + #: c-decl.c:5656 + #, c-format + msgid "%s has no %s" + msgstr "%s no tiene `%s'" + + #: c-decl.c:5657 + msgid "struct" + msgstr "struct" + + #: c-decl.c:5658 + msgid "named members" + msgstr "miembros nombrados" + + #: c-decl.c:5658 + msgid "members" + msgstr "miembros" + + #: c-decl.c:5697 + #, c-format + msgid "nested redefinition of `%s'" + msgstr "redefinición anidada de `%s'" + + #: c-decl.c:5710 + #, c-format + msgid "bit-field `%s' width not an integer constant" + msgstr "la anchura del campo de bits `%s' no es una constante entera" + + #: c-decl.c:5721 + #, c-format + msgid "bit-field `%s' has invalid type" + msgstr "el campo de bits `%s' tiene un tipo inválido" + + #: c-decl.c:5733 + #, c-format + msgid "bit-field `%s' type invalid in ISO C" + msgstr "el tipo de campo de bit `%s' es inválido en ISO C" + + #: c-decl.c:5744 + #, c-format + msgid "negative width in bit-field `%s'" + msgstr "anchura negativa en el campo de bit `%s'" + + #: c-decl.c:5746 + #, c-format + msgid "width of `%s' exceeds its type" + msgstr "la anchura de `%s' excede su tipo" + + #: c-decl.c:5748 + #, c-format + msgid "zero width for bit-field `%s'" + msgstr "anchura cero para el campo de bits `%s'" + + #: c-decl.c:5762 + #, c-format + msgid "`%s' is narrower than values of its type" + msgstr "`%s' es más estrecho que los valores de su tipo" + + #: c-decl.c:5808 + msgid "flexible array member in union" + msgstr "miembro de matriz flexible en el union" + + #: c-decl.c:5810 + msgid "flexible array member not at end of struct" + msgstr "el miembro de matriz flexible no está al final del struct" + + #: c-decl.c:5812 + msgid "flexible array member in otherwise empty struct" + msgstr "el miembro de matriz flexible sería de otra manera un struct vacío" + + #: c-decl.c:5837 + #, c-format + msgid "duplicate member `%s'" + msgstr "miembro duplicado `%s'" + + #: c-decl.c:5881 + msgid "union cannot be made transparent" + msgstr "union no se puede hacer transparente" + + #. This enum is a named one that has been declared already. + #: c-decl.c:5975 + #, c-format + msgid "redeclaration of `enum %s'" + msgstr "redeclaración de `enum %s'" + + #: c-decl.c:6009 + msgid "enum defined inside parms" + msgstr "enum definido dentro de los parámetros" + + #: c-decl.c:6042 + msgid "enumeration values exceed range of largest integer" + msgstr "los valores de enumeración exceden el rango del entero más grande" + + #: c-decl.c:6151 + #, c-format + msgid "enumerator value for `%s' not integer constant" + msgstr "el valor de enumerador para `%s' no es una constante entera" + + #: c-decl.c:6164 + msgid "overflow in enumeration values" + msgstr "desbordamiento en valores de enumeración" + + #: c-decl.c:6169 + msgid "ISO C restricts enumerator values to range of `int'" + msgstr "ISO C restringe los valores de enumeración al rango de `int'" + + #: c-decl.c:6252 + msgid "return type is an incomplete type" + msgstr "el tipo de devolución es un tipo de dato incompleto" + + #: c-decl.c:6260 + msgid "return type defaults to `int'" + msgstr "el tipo de devolución por omisión es `int'" + + #: c-decl.c:6307 + #, c-format + msgid "no previous prototype for `%s'" + msgstr "no hay un prototipo previo para `%s'" + + #: c-decl.c:6314 + #, c-format + msgid "`%s' was used with no prototype before its definition" + msgstr "se usó `%s' sin prototipo antes de su definición" + + #: c-decl.c:6320 + #, c-format + msgid "no previous declaration for `%s'" + msgstr "no hay declaración previa para `%s'" + + #: c-decl.c:6327 + #, c-format + msgid "`%s' was used with no declaration before its definition" + msgstr "se usó `%s' sin declaración antes de su definición" + + #: c-decl.c:6351 c-decl.c:6936 + #, c-format + msgid "return type of `%s' is not `int'" + msgstr "el tipo de devolución de `%s' no es `int'" + + #: c-decl.c:6367 + #, c-format + msgid "first argument of `%s' should be `int'" + msgstr "el primer argumento de `%s' debe ser `int'" + + #: c-decl.c:6376 + #, c-format + msgid "second argument of `%s' should be `char **'" + msgstr "el segundo argumento de `%s' debe ser `char **'" + + #: c-decl.c:6385 + #, c-format + msgid "third argument of `%s' should probably be `char **'" + msgstr "el tercer argumento de `%s' debería ser `char **'" + + #: c-decl.c:6394 + #, c-format + msgid "`%s' takes only zero or two arguments" + msgstr "`%s' sólo toma cero o dos argumentos" + + #: c-decl.c:6397 + #, c-format + msgid "`%s' is normally a non-static function" + msgstr "`%s' generalmente es una función no estática" + + #: c-decl.c:6507 + msgid "parm types given both in parmlist and separately" + msgstr "se dieron los tipos de los parámetros en la lista de parámetros y por separado" + + #: c-decl.c:6528 + msgid "parameter name omitted" + msgstr "se omitió el nombre del parámetro" + + #: c-decl.c:6532 c-decl.c:6634 + #, c-format + msgid "parameter `%s' declared void" + msgstr "el parámetro `%s' se declaró void" + + #: c-decl.c:6608 + msgid "parameter name missing from parameter list" + msgstr "falta el nombre del parámetro de la lista de parámetros" + + #: c-decl.c:6627 + #, c-format + msgid "multiple parameters named `%s'" + msgstr "múltiples parámetros nombrados `%s'" + + #: c-decl.c:6658 c-decl.c:6660 + #, c-format + msgid "type of `%s' defaults to `int'" + msgstr "el tipo de `%s' es `int' por omisión" + + #: c-decl.c:6696 + #, c-format + msgid "declaration for parameter `%s' but no such parameter" + msgstr "existe la declaración para el parámetro `%s' pero no hay tal parámetro" + + #: c-decl.c:6744 + msgid "number of arguments doesn't match prototype" + msgstr "el número de argumentos no coinciden con el prototipo" + + #: c-decl.c:6774 + #, c-format + msgid "promoted argument `%s' doesn't match prototype" + msgstr "el argumento promovido `%s' no coincide con el prototipo" + + #: c-decl.c:6788 + #, c-format + msgid "argument `%s' doesn't match prototype" + msgstr "el argumento `%s' no coincide con el prototipo" + + #: c-decl.c:6968 cp/decl.c:14327 + msgid "no return statement in function returning non-void" + msgstr "no hay una declaración de devolución en una función que no devuelve void" + + #: c-decl.c:7124 + msgid "this function may return with or without a value" + msgstr "esta función puede devolver con o sin un valor" + + #: c-decl.c:7144 + #, c-format + msgid "size of return value of `%s' is %u bytes" + msgstr "el tamaño del valor de devolución de `%s' es de %u bytes" + + #: c-decl.c:7148 + #, c-format + msgid "size of return value of `%s' is larger than %d bytes" + msgstr "el tamaño del valor de devolución de `%s' es más grande que %d bytes" + + #. If we get here, declarations have been used in a for loop without + #. the C99 for loop scope. This doesn't make much sense, so don't + #. allow it. + #: c-decl.c:7203 + msgid "`for' loop initial declaration used outside C99 mode" + msgstr "se usó la declaración inicial del ciclo `for' fuera del modo C99" + + #: c-decl.c:7227 + #, c-format + msgid "`struct %s' declared in `for' loop initial declaration" + msgstr "`struct %s' declarado en la declaración inicial del ciclo `for'" + + #: c-decl.c:7230 + #, c-format + msgid "`union %s' declared in `for' loop initial declaration" + msgstr "`union %s' declarado en la declaración inicial del ciclo `for'" + + #: c-decl.c:7233 + #, c-format + msgid "`enum %s' declared in `for' loop initial declaration" + msgstr "`enum %s' declarado en la declaración inicial del ciclo `for'" + + #: c-decl.c:7241 + #, c-format + msgid "declaration of non-variable `%s' in `for' loop initial declaration" + msgstr "declaración de `%s' que no es variable en la declaración inicial del ciclo `for'" + + #: c-decl.c:7243 + #, c-format + msgid "declaration of static variable `%s' in `for' loop initial declaration" + msgstr "declaración de la variable static `%s' en la declaración inicial del ciclo `for'" + + #: c-decl.c:7245 + #, c-format + msgid "declaration of `extern' variable `%s' in `for' loop initial declaration" + msgstr "declaración de la variable `extern' `%s' en la declaración inicial del ciclo `for'" + + #: c-format.c:128 c-format.c:210 + msgid "format string arg not a string type" + msgstr "el argumento de la cadena de formato no es del tipo cadena de texto" + + #: c-format.c:143 + msgid "args to be formatted is not '...'" + msgstr "los argumentos que recibirán formato no son '...'" + + #: c-format.c:152 + msgid "strftime formats cannot format arguments" + msgstr "los formatos de strftime no pueden dar formato a los argumentos" + + #: c-format.c:187 c-format.c:289 + msgid "format string has invalid operand number" + msgstr "la cadena de formato tiene un número de operadores inválido" + + #: c-format.c:221 + msgid "function does not return string type" + msgstr "la función no devuelve valores de tipo cadena" + + #: c-format.c:252 + msgid "unrecognized format specifier" + msgstr "no se reconoce el especificador de formato" + + #: c-format.c:265 + #, c-format + msgid "`%s' is an unrecognized format function type" + msgstr "`%s' es un formato de tipo de función no reconocido" + + #: c-format.c:299 + msgid "format string arg follows the args to be formatted" + msgstr "el argumento de la cadena de formato sigue a los argumentos que recibirán formato" + + #: c-format.c:620 + msgid "` ' flag" + msgstr "opción ` '" + + #: c-format.c:620 + msgid "the ` ' printf flag" + msgstr "la opción de printf ` '" + + #: c-format.c:621 c-format.c:692 + msgid "`+' flag" + msgstr "opción `+'" + + #: c-format.c:621 + msgid "the `+' printf flag" + msgstr "la opción de printf `+'" + + #: c-format.c:622 c-format.c:668 + msgid "`#' flag" + msgstr "opción `#'" + + #: c-format.c:622 + msgid "the `#' printf flag" + msgstr "la opción de printf `#'" + + #: c-format.c:623 c-format.c:666 + msgid "`0' flag" + msgstr "opción `0'" + + #: c-format.c:623 + msgid "the `0' printf flag" + msgstr "la opción de printf `0'" + + #: c-format.c:624 c-format.c:665 c-format.c:695 + msgid "`-' flag" + msgstr "opción `-'" + + #: c-format.c:624 + msgid "the `-' printf flag" + msgstr "la opción de printf `-'" + + #: c-format.c:625 c-format.c:649 + msgid "`'' flag" + msgstr "opción `''" + + #: c-format.c:625 + msgid "the `'' printf flag" + msgstr "la opción de printf `''" + + #: c-format.c:626 c-format.c:650 + msgid "`I' flag" + msgstr "opción `I'" + + #: c-format.c:626 + msgid "the `I' printf flag" + msgstr "la opción de printf `I'" + + #: c-format.c:627 c-format.c:647 c-format.c:669 c-format.c:696 c-format.c:1790 + msgid "field width" + msgstr "anchura de campo" + + #: c-format.c:627 + msgid "field width in printf format" + msgstr "anchura de campo en formato printf" + + #: c-format.c:628 + msgid "precision" + msgstr "precisión" + + #: c-format.c:628 + msgid "precision in printf format" + msgstr "precisión en formato printf" + + #: c-format.c:629 c-format.c:648 c-format.c:699 + msgid "length modifier" + msgstr "modificador de longitud" + + #: c-format.c:629 + msgid "length modifier in printf format" + msgstr "modificador de longitud en formato printf" + + #: c-format.c:645 + msgid "assignment suppression" + msgstr "supresión de la asignación" + + #: c-format.c:645 + msgid "the assignment suppression scanf feature" + msgstr "la supresión de la asignación es una característica de scanf" + + #: c-format.c:646 + msgid "`a' flag" + msgstr "opción `a'" + + #: c-format.c:646 + msgid "the `a' scanf flag" + msgstr "la opción de scanf `a'" + + #: c-format.c:647 + msgid "field width in scanf format" + msgstr "anchura de campo en formato scanf" + + #: c-format.c:648 + msgid "length modifier in scanf format" + msgstr "modificador de longitud en formato scanf" + + #: c-format.c:649 + msgid "the `'' scanf flag" + msgstr "la opción de scanf `''" + + #: c-format.c:650 + msgid "the `I' scanf flag" + msgstr "la opción de scanf `I'" + + #: c-format.c:664 + msgid "`_' flag" + msgstr "opción `_'" + + #: c-format.c:664 + msgid "the `_' strftime flag" + msgstr "la opción de strftime `_'" + + #: c-format.c:665 + msgid "the `-' strftime flag" + msgstr "la opción de strftime `-'" + + #: c-format.c:666 + msgid "the `0' strftime flag" + msgstr "la opción de strftime `0'" + + #: c-format.c:667 c-format.c:691 + msgid "`^' flag" + msgstr "opción `^'" + + #: c-format.c:667 + msgid "the `^' strftime flag" + msgstr "la opción de strftime `^'" + + #: c-format.c:668 + msgid "the `#' strftime flag" + msgstr "la opción de strftime `#'" + + #: c-format.c:669 + msgid "field width in strftime format" + msgstr "anchura de campo en formato strftime" + + #: c-format.c:670 + msgid "`E' modifier" + msgstr "modificador `E'" + + #: c-format.c:670 + msgid "the `E' strftime modifier" + msgstr "el modificador de strftime `E'" + + #: c-format.c:671 + msgid "`O' modifier" + msgstr "modificador `O'" + + #: c-format.c:671 + msgid "the `O' strftime modifier" + msgstr "el modificador de strftime `O'" + + #: c-format.c:672 + msgid "the `O' modifier" + msgstr "el modificador `O'" + + #: c-format.c:690 + msgid "fill character" + msgstr "carácter de relleno" + + #: c-format.c:690 + msgid "fill character in strfmon format" + msgstr "carácter de relleno en el formato de strfmon" + + #: c-format.c:691 + msgid "the `^' strfmon flag" + msgstr "la opción de strfmon `^'" + + #: c-format.c:692 + msgid "the `+' strfmon flag" + msgstr "la opción de strfmon `+'" + + #: c-format.c:693 + msgid "`(' flag" + msgstr "opción `('" + + #: c-format.c:693 + msgid "the `(' strfmon flag" + msgstr "la opción de strfmon `('" + + #: c-format.c:694 + msgid "`!' flag" + msgstr "opción `!'" + + #: c-format.c:694 + msgid "the `!' strfmon flag" + msgstr "la opción de strfmon `!'" + + #: c-format.c:695 + msgid "the `-' strfmon flag" + msgstr "la opción de strfmon `-'" + + #: c-format.c:696 + msgid "field width in strfmon format" + msgstr "anchura de campo en formato strfmon" + + #: c-format.c:697 + msgid "left precision" + msgstr "precisión izquierda" + + #: c-format.c:697 + msgid "left precision in strfmon format" + msgstr "precisión izquierda en formato strfmon" + + #: c-format.c:698 + msgid "right precision" + msgstr "precisión derecha" + + #: c-format.c:698 + msgid "right precision in strfmon format" + msgstr "precisión derecha en formato strfmon" + + #: c-format.c:699 + msgid "length modifier in strfmon format" + msgstr "modificador de longitud en formato strfmon" + + #: c-format.c:998 + #, c-format + msgid "function might be possible candidate for `%s' format attribute" + msgstr "la función puede ser un candidato posible para el atributo de formato `%s'" + + #: c-format.c:1122 c-format.c:1143 c-format.c:2200 + msgid "missing $ operand number in format" + msgstr "falta el operando numérico $ en el formato" + + #: c-format.c:1153 + #, c-format + msgid "%s does not support %%n$ operand number formats" + msgstr "%s no tiene soporte para el operando de formato de número %%n$" + + #: c-format.c:1160 + msgid "operand number out of range in format" + msgstr "operando numérico fuera de rango en el formato" + + #: c-format.c:1183 + #, c-format + msgid "format argument %d used more than once in %s format" + msgstr "se usa más de una vez el argumento de formato %d en el formato %s" + + #: c-format.c:1233 + #, c-format + msgid "format argument %d unused before used argument %d in $-style format" + msgstr "no se usa el argumento de formato %d antes de usar el argumento %d en el formato de estilo-$" + + #: c-format.c:1330 + msgid "format not a string literal, format string not checked" + msgstr "el formato no es una cadena literal, no se revisó la cadena de formato" + + #: c-format.c:1344 + msgid "format not a string literal and no format arguments" + msgstr "el formato no es una cadena literal y no tiene argumentos de formato" + + #: c-format.c:1346 + msgid "format not a string literal, argument types not checked" + msgstr "el formato no es una cadena literal, no se revisaron los tipos de argumento" + + #: c-format.c:1359 + msgid "too many arguments for format" + msgstr "demasiados argumentos para el formato" + + #: c-format.c:1362 + msgid "unused arguments in $-style format" + msgstr "no se usaron argumentos en el formato de estilo-$" + + #: c-format.c:1365 + msgid "zero-length format string" + msgstr "cadena de formato de longitud cero" + + #: c-format.c:1368 + msgid "format is a wide character string" + msgstr "el formato es una cadena de carácter ancha" + + #: c-format.c:1371 + msgid "unterminated format string" + msgstr "constante de formato sin terminar" + + #. FIXME: this warning should go away once Marc Espie's + #. __attribute__((nonnull)) patch is in. Instead, checking for + #. nonnull attributes should probably change this function to act + #. specially if info == NULL and add a res->number_null entry for + #. that case, or maybe add a function pointer to be called at + #. the end instead of hardcoding check_format_info_main. + #: c-format.c:1478 + msgid "null format string" + msgstr "formato de cadena nulo" + + #: c-format.c:1669 + msgid "embedded `\\0' in format" + msgstr "`\\0' incrustado en el formato" + + #: c-format.c:1684 + #, c-format + msgid "spurious trailing `%%' in format" + msgstr "`%%' final espurio en el formato" + + #: c-format.c:1723 c-format.c:1960 + #, c-format + msgid "repeated %s in format" + msgstr "se repitió %s en el formato" + + #: c-format.c:1736 + msgid "missing fill character at end of strfmon format" + msgstr "falta el carácter de relleno al final del formato strfmon" + + #: c-format.c:1756 c-format.c:1874 c-format.c:2154 c-format.c:2207 + msgid "too few arguments for format" + msgstr "muy pocos argumentos para el formato" + + #: c-format.c:1816 + #, c-format + msgid "zero width in %s format" + msgstr "anchura cero en el formato %s" + + #: c-format.c:1835 + #, c-format + msgid "empty left precision in %s format" + msgstr "precisión izquierda vacía en el formato %s" + + #: c-format.c:1889 + msgid "field precision" + msgstr "precisión del campo" + + #: c-format.c:1904 + #, c-format + msgid "empty precision in %s format" + msgstr "precisión vacía en el formato %s" + + #: c-format.c:1944 + #, c-format + msgid "%s does not support the `%s' %s length modifier" + msgstr "%s no tiene soporte para el modificador de longitud %s `%s'" + + #: c-format.c:1994 + msgid "conversion lacks type at end of format" + msgstr "la conversión carece de tipo al final del formato" + + #: c-format.c:2005 + #, c-format + msgid "unknown conversion type character `%c' in format" + msgstr "se desconoce el carácter de tipo de conversión `%c' en el formato" + + #: c-format.c:2008 + #, c-format + msgid "unknown conversion type character 0x%x in format" + msgstr "se desconoce el carácter de tipo de conversión 0x%x en el formato" + + #: c-format.c:2015 + #, c-format + msgid "%s does not support the `%%%c' %s format" + msgstr "%s no tiene soporte para el formato `%%%c' %s" + + #: c-format.c:2031 + #, c-format + msgid "%s used with `%%%c' %s format" + msgstr "se usó %s con el formato `%%%c' %s" + + #: c-format.c:2040 + #, c-format + msgid "%s does not support %s" + msgstr "%s no tiene soporte para %s" + + #: c-format.c:2049 + #, c-format + msgid "%s does not support %s with the `%%%c' %s format" + msgstr "%s no tiene soporte para %s con el formato `%%%c' %s" + + #: c-format.c:2082 + #, c-format + msgid "%s ignored with %s and `%%%c' %s format" + msgstr "se ignora %s con %s y el formato `%%%c' %s" + + #: c-format.c:2086 + #, c-format + msgid "%s ignored with %s in %s format" + msgstr "se ignora %s con %s en el formato %s" + + #: c-format.c:2092 + #, c-format + msgid "use of %s and %s together with `%%%c' %s format" + msgstr "uso de %s y %s junto con el formato `%%%c' %s" + + #: c-format.c:2096 + #, c-format + msgid "use of %s and %s together in %s format" + msgstr "uso de %s y %s juntos en el formato %s" + + #: c-format.c:2115 + #, c-format + msgid "`%%%c' yields only last 2 digits of year in some locales" + msgstr "`%%%c' sólo produce los dos últimos dígitos del año en algunos lugares" + + #: c-format.c:2118 + #, c-format + msgid "`%%%c' yields only last 2 digits of year" + msgstr "`%%%c' sólo produce los dos últimos dígitos del año" + + #. The end of the format string was reached. + #: c-format.c:2134 + #, c-format + msgid "no closing `]' for `%%[' format" + msgstr "no hay un `]' que cierre para el formato `%%['" + + #: c-format.c:2147 + #, c-format + msgid "use of `%s' length modifier with `%c' type character" + msgstr "uso del modificador de longitud `%s' con el carácter de tipo `%c'" + + #: c-format.c:2168 + #, c-format + msgid "%s does not support the `%%%s%c' %s format" + msgstr "%s no tiene soporte para el formato `%%%s%c' %s" + + #: c-format.c:2183 + msgid "operand number specified with suppressed assignment" + msgstr "número de operandos especificado con asignación suprimida" + + #: c-format.c:2185 + msgid "operand number specified for format taking no argument" + msgstr "el número de operandos especificados para el formato no toma argumentos" + + #: c-format.c:2304 + #, c-format + msgid "writing through null pointer (arg %d)" + msgstr "escribiendo a través de un apuntador nulo (argumento %d)" + + #: c-format.c:2313 + #, c-format + msgid "reading through null pointer (arg %d)" + msgstr "leyendo a través de un apuntador nulo (argumento %d)" + + #: c-format.c:2333 + #, c-format + msgid "writing into constant object (arg %d)" + msgstr "escribiendo en un objeto constante (argumento %d)" + + #: c-format.c:2343 + #, c-format + msgid "extra type qualifiers in format argument (arg %d)" + msgstr "calificadores de tipo extra en el argumento de formato (argumento %d)" + + #: c-format.c:2350 + #, c-format + msgid "format argument is not a pointer (arg %d)" + msgstr "el argumento de formato no es un apuntador (argumento %d)" + + #: c-format.c:2352 + #, c-format + msgid "format argument is not a pointer to a pointer (arg %d)" + msgstr "el argumento de formato no es un apuntador a un apuntador (argumento %d)" + + #: c-format.c:2423 + msgid "pointer" + msgstr "apuntador" + + #: c-format.c:2425 + msgid "different type" + msgstr "tipo diferente" + + #: c-format.c:2446 + #, c-format + msgid "%s is not type %s (arg %d)" + msgstr "%s no es del tipo %s (argumento %d)" + + #: c-format.c:2449 + #, c-format + msgid "%s format, %s arg (arg %d)" + msgstr "formato %s, argumento %s (argumento %d)" + + #: c-lex.c:298 + msgid "badly nested C headers from preprocessor" + msgstr "encabezados C mal anidados del preprocesador" + + #: c-lex.c:348 + #, c-format + msgid "ignoring #pragma %s %s" + msgstr "ignorando el #pragma %s %s" + + #: c-lex.c:350 + #, c-format + msgid "ignoring #pragma %s" + msgstr "ignorando el #pragma %s" + + #: c-lex.c:400 + #, c-format + msgid "universal-character-name '\\U%08x' not valid in identifier" + msgstr "universal-character-name `\\U%08x' no es válido en el identificador" + + #: c-lex.c:646 + #, c-format + msgid "universal-character-name '\\u%04x' not valid in identifier" + msgstr "universal-character-name `\\u%04x' no es válido en el identificador" + + #: c-lex.c:736 + msgid "both 'f' and 'l' suffixes on floating constant" + msgstr "se encuentran los sufijos `f' y `l' al mismo tiempo en una constante de coma flotante" + + #: c-lex.c:763 + #, c-format + msgid "floating point number exceeds range of '%s'" + msgstr "el número de coma flotante excede el rango de '%s'" + + #: c-lex.c:793 + #, c-format + msgid "stray '%c' in program" + msgstr "'%c' parásito en el programa" + + #: c-lex.c:795 + #, c-format + msgid "stray '\\%o' in program" + msgstr "'\\%o' parásito en el programa" + + #: c-lex.c:893 + msgid "too many decimal points in floating constant" + msgstr "demasiados puntos decimales en la constante de coma flotante" + + #: c-lex.c:895 + msgid "decimal point in exponent - impossible!" + msgstr "punto decimal en el exponente - ¡Imposible!" + + #. Possible future extension: silently ignore _ in numbers, + #. permitting cosmetic grouping - e.g. 0x8000_0000 == 0x80000000 + #. but somewhat easier to read. Ada has this? + #: c-lex.c:906 + msgid "underscore in number" + msgstr "subrayado en el número" + + #: c-lex.c:968 + msgid "numeric constant with no digits" + msgstr "constante numérica sin dígitos" + + #: c-lex.c:971 + msgid "numeric constant contains digits beyond the radix" + msgstr "la constante numérica contiene dígitos más allá del radical" + + #: c-lex.c:982 + msgid "floating constant may not be in radix 16" + msgstr "la constante de coma flotante no puede ser de radical 16" + + #: c-lex.c:985 + msgid "hexadecimal floating constant has no exponent" + msgstr "la constante de coma flotante hexadecimal no tiene exponente" + + #: c-lex.c:997 + msgid "floating constant exponent has no digits" + msgstr "el exponente de la constante de coma flotante no tiene dígitos" + + #: c-lex.c:1017 + msgid "more than one 'f' suffix on floating constant" + msgstr "más de un sufijo `f' en una constante de coma flotante" + + #: c-lex.c:1020 + msgid "traditional C rejects the 'f' suffix" + msgstr "C tradicional rechaza el sufijo 'f'" + + #: c-lex.c:1027 + msgid "more than one 'l' suffix on floating constant" + msgstr "más de un sufijo `l' en una constante de coma flotante" + + #: c-lex.c:1030 + msgid "traditional C rejects the 'l' suffix" + msgstr "C tradicional rechaza el sufijo 'l'" + + #: c-lex.c:1038 + msgid "more than one 'i' or 'j' suffix on floating constant" + msgstr "más de un sufijo `i' o una `j' en una constante de coma flotante" + + #: c-lex.c:1040 c-lex.c:1134 + msgid "ISO C forbids imaginary numeric constants" + msgstr "ISO C prohibe las constantes numéricas imaginarias" + + #: c-lex.c:1045 + msgid "invalid suffix on floating constant" + msgstr "sufijo inválido en una constante entera" + + #. We got an exception from parse_float() + #: c-lex.c:1062 + msgid "floating constant out of range" + msgstr "constante de coma flotante fuera de rango" + + #: c-lex.c:1074 + msgid "floating point number exceeds range of 'double'" + msgstr "el número de coma flotante excede el rango de 'double'" + + #: c-lex.c:1103 + msgid "two 'u' suffixes on integer constant" + msgstr "dos sufijos 'u' en la constante entera" + + #: c-lex.c:1106 + msgid "traditional C rejects the 'u' suffix" + msgstr "C tradicional rechaza el sufijo 'u'" + + #: c-lex.c:1117 + msgid "three 'l' suffixes on integer constant" + msgstr "tres sufijos 'l' en la constante entera" + + #: c-lex.c:1119 + msgid "'lul' is not a valid integer suffix" + msgstr "'lul' no es un sufijo entero válido" + + #: c-lex.c:1121 + msgid "'Ll' and 'lL' are not valid integer suffixes" + msgstr "'Ll' y 'lL' no son sufijos enteros válidos" + + #: c-lex.c:1124 + msgid "ISO C89 forbids long long integer constants" + msgstr "ISO C89 prohibe constantes enteras long long" + + #: c-lex.c:1132 + msgid "more than one 'i' or 'j' suffix on integer constant" + msgstr "más de un sufijo `i' o una `j' en una constante entera" + + #: c-lex.c:1139 + msgid "invalid suffix on integer constant" + msgstr "sufijo inválido en una constante entera" + + #: c-lex.c:1147 + #, c-format + msgid "integer constant is too large for this configuration of the compiler - truncated to %d bits" + msgstr "la constante entera es muy grande para esta configuración del compilador - truncando a %d bits" + + #: c-lex.c:1237 + msgid "width of integer constant changes with -traditional" + msgstr "la anchura de la constante entera cambia con -traditional" + + #: c-lex.c:1239 + msgid "integer constant is unsigned in ISO C, signed with -traditional" + msgstr "la constante entera es unsigned en ISO C, es signed con -traditional" + + #: c-lex.c:1241 + msgid "width of integer constant may change on other systems with -traditional" + msgstr "la anchura de la constante entera puede cambiar en otros sistemas con -traditional" + + #: c-lex.c:1251 + #, c-format + msgid "integer constant larger than the maximum value of %s" + msgstr "la constante entera es más grande que el valor máximo de %s" + + #: c-lex.c:1254 + msgid "an unsigned long long int" + msgstr "un unsigned long long int" + + #: c-lex.c:1255 + msgid "a long long int" + msgstr "un long long int" + + #: c-lex.c:1256 + msgid "an unsigned long int" + msgstr "un unsigned long int" + + #: c-lex.c:1260 + msgid "decimal constant is so large that it is unsigned" + msgstr "la constante decimal es tan grande que es unsigned" + + #: c-lex.c:1269 + msgid "complex integer constant is too wide for 'complex int'" + msgstr "la constante entera compleja es demasiado ancha para `complex int'" + + #: c-lex.c:1289 + msgid "integer constant is larger than the maximum value for its type" + msgstr "la constante entera es más grande que el valor máximo para su tipo" + + #: c-lex.c:1293 + #, c-format + msgid "missing white space after number '%.*s'" + msgstr "falta un espacio en blanco después del número `%.*s'" + + #: c-lex.c:1329 cpplex.c:1873 + msgid "ignoring invalid multibyte character" + msgstr "ignorando los carácteres multibyte inválidos" + + #. Like YYERROR but do call yyerror. + #: c-parse.y:56 parse.y:51 objc-parse.y:57 + msgid "syntax error" + msgstr "error sintáctico" + + #: /usr/share/bison/bison.simple:176 /usr/share/bison.simple:112 + msgid "syntax error: cannot back up" + msgstr "error sintáctico: no se puede regresar" + + #: c-parse.y:288 objc-parse.y:310 + msgid "ISO C forbids an empty source file" + msgstr "ISO C prohibe un fichero fuente vacío" + + #: c-parse.y:321 c-typeck.c:6895 objc-parse.y:343 + msgid "argument of `asm' is not a constant string" + msgstr "el argumento de `asm' no es una cadena constante" + + #: c-parse.y:329 objc-parse.y:351 + msgid "ISO C forbids data definition with no type or storage class" + msgstr "ISO C prohibe la definición de datos sin tipo o clase de almacenamiento" + + #: c-parse.y:331 objc-parse.y:353 + msgid "data definition has no type or storage class" + msgstr "la definición de datos no tiene tipo o clase de almacenamiento" + + #: c-parse.y:344 objc-parse.y:366 + msgid "ISO C does not allow extra `;' outside of a function" + msgstr "ISO C no permite ';' extra fuera de una función" + + #: c-parse.y:404 cppexp.c:693 + msgid "traditional C rejects the unary plus operator" + msgstr "C tradicional rechaza el operador unario mas" + + #: c-parse.y:466 objc-parse.y:488 + msgid "`sizeof' applied to a bit-field" + msgstr "`sizeof' aplicado a un campo de bits" + + #: c-parse.y:546 objc-parse.y:568 + msgid "ISO C forbids omitting the middle term of a ?: expression" + msgstr "ISO C prohibe la omisión del término medio de una expresión ?:" + + #: c-parse.y:593 objc-parse.y:615 + msgid "ISO C89 forbids compound literals" + msgstr "ISO C89 prohibe las literales compuestas" + + #: c-parse.y:607 objc-parse.y:629 + msgid "ISO C forbids braced-groups within expressions" + msgstr "ISO C prohibe grupos de llaves dentro de expresiones" + + #: c-parse.y:638 objc-parse.y:660 + msgid "first argument to __builtin_choose_expr not a constant" + msgstr "el primer argumento de __builtin_choose_expr no es una constante" + + #: c-parse.y:681 + msgid "traditional C rejects string concatenation" + msgstr "C tradicional rechaza la concatenación de cadenas" + + #: c-parse.y:696 objc-parse.y:732 + msgid "ISO C does not permit use of `varargs.h'" + msgstr "ISO C no permite el uso de `varargs.h'" + + #: c-parse.y:957 c-parse.y:963 c-parse.y:969 c-parse.y:975 c-parse.y:996 c-parse.y:1002 c-parse.y:1008 c-parse.y:1014 c-parse.y:1047 c-parse.y:1053 c-parse.y:1059 c-parse.y:1065 c-parse.y:1110 c-parse.y:1116 c-parse.y:1122 c-parse.y:1128 parse.y:1907 parse.y:1914 parse.y:1949 objc-parse.y:993 objc-parse.y:999 objc-parse.y:1005 objc-parse.y:1011 objc-parse.y:1032 objc-parse.y:1038 objc-parse.y:1044 objc-parse.y:1050 objc-parse.y:1083 objc-parse.y:1089 objc-parse.y:1095 objc-parse.y:1101 objc-parse.y:1146 objc-parse.y:1152 objc-parse.y:1158 objc-parse.y:1164 + #, c-format + msgid "`%s' is not at beginning of declaration" + msgstr "`%s' no está en el inicio de la declaración" + + #: c-parse.y:1410 objc-parse.y:1455 + msgid "ISO C forbids empty initializer braces" + msgstr "ISO C prohibe las llaves de iniciador vacías" + + #: c-parse.y:1424 objc-parse.y:1469 + msgid "ISO C89 forbids specifying subobject to initialize" + msgstr "ISO C89 prohibe la especificación de subobjetos a iniciar" + + #: c-parse.y:1427 objc-parse.y:1472 + msgid "obsolete use of designated initializer without `='" + msgstr "uso obsoleto del iniciador designado sin `='" + + #: c-parse.y:1431 objc-parse.y:1476 + msgid "obsolete use of designated initializer with `:'" + msgstr "uso obsoleto del iniciador asignado con `:'" + + #: c-parse.y:1460 + msgid "ISO C forbids specifying range of elements to initialize" + msgstr "ISO C prohibe la especificación de rangos de elementos a iniciar" + + #: c-parse.y:1468 c-parse.y:1498 objc-parse.y:1507 objc-parse.y:1537 + msgid "ISO C forbids nested functions" + msgstr "ISO C prohibe las funciones anidadas" + + #: c-parse.y:1672 objc-parse.y:1713 + msgid "ISO C forbids forward references to `enum' types" + msgstr "ISO C prohibe las declaraciones posteriores para tipos `enum'" + + #: c-parse.y:1684 parse.y:2364 objc-parse.y:1725 + msgid "comma at end of enumerator list" + msgstr "coma al final de la lista de enumeradores" + + #: c-parse.y:1692 objc-parse.y:1733 + msgid "no semicolon at end of struct or union" + msgstr "no hay punto y coma al final del struct o union" + + #: c-parse.y:1701 objc-parse.y:1742 objc-parse.y:2819 + msgid "extra semicolon in struct or union specified" + msgstr "se especificó un punto y coma extra en un struct o union" + + #: c-parse.y:1714 objc-parse.y:1769 + msgid "ISO C doesn't support unnamed structs/unions" + msgstr "ISO C no tiene soporte para structs/unions sin nombre" + + #: c-parse.y:1723 objc-parse.y:1778 + msgid "ISO C forbids member declarations with no members" + msgstr "ISO C prohibe declaraciones de miembros con no miembros" + + #: c-parse.y:1872 c-parse.y:1876 c-parse.y:1880 objc-parse.y:1927 objc-parse.y:1931 objc-parse.y:1935 + msgid "storage class specifier in array declarator" + msgstr "especificadores de clase de almacenamiento en el declarador de una matriz" + + #: c-parse.y:1895 objc-parse.y:1950 + msgid "deprecated use of label at end of compound statement" + msgstr "uso deprecado de la etiqueta al final de la declaración compuesta" + + #: c-parse.y:1912 objc-parse.y:1967 + msgid "ISO C89 forbids mixed declarations and code" + msgstr "ISO C89 prohibe las declaraciones mezcladas y código" + + #: c-parse.y:1986 objc-parse.y:2045 + msgid "ISO C forbids label declarations" + msgstr "ISO C prohibe las declaraciones etiquetadas" + + #: c-parse.y:2035 parse.y:1607 objc-parse.y:2094 + msgid "braced-group within expression allowed only inside a function" + msgstr "un grupo de llaves dentro de una expresión sólo se permite dentro de una función" + + #: c-parse.y:2161 objc-parse.y:2220 + msgid "empty body in an else-statement" + msgstr "cuerpo vacío en una declaración else" + + #: c-parse.y:2281 objc-parse.y:2340 + msgid "ISO C forbids `goto *expr;'" + msgstr "ISO C prohibe `goto *expr;'" + + #: c-parse.y:2379 objc-parse.y:2438 + msgid "ISO C forbids forward parameter declarations" + msgstr "ISO C prohibe declaraciones adelantadas de parámetros" + + #. Gcc used to allow this as an extension. However, it does + #. not work for all targets, and thus has been disabled. + #. Also, since func (...) and func () are indistinguishable, + #. it caused problems with the code in expand_builtin which + #. tries to verify that BUILT_IN_NEXT_ARG is being used + #. correctly. + #: c-parse.y:2405 objc-parse.y:2464 + msgid "ISO C requires a named argument before `...'" + msgstr "ISO C requiere un argumento con nombre antes de `...'" + + #: c-parse.y:2500 objc-parse.y:2559 + msgid "`...' in old-style identifier list" + msgstr "`...' en una lista de identificadores de estilo antiguo" + + #: /usr/share/bison/bison.simple:821 + msgid "parse error; also virtual memory exhausted" + msgstr "error de decodificación; también se agotó la memoria" + + #: /usr/share/bison/bison.simple:825 cp/spew.c:343 /usr/share/bison.simple:654 + msgid "parse error" + msgstr "error de decodificación" + + #: /usr/share/bison/bison.simple:950 /usr/share/bison.simple:367 + msgid "parser stack overflow" + msgstr "desbordamiento de la pila del decodificador" + + #: c-parse.y:2824 cp/spew.c:1477 objc-parse.y:3511 + #, c-format + msgid "%s at end of input" + msgstr "%s al final de la entrada" + + #: c-parse.y:2830 cp/spew.c:1483 objc-parse.y:3517 + #, c-format + msgid "%s before %s'%c'" + msgstr "%s antes de %s'%c'" + + #: c-parse.y:2832 cp/spew.c:1485 objc-parse.y:3519 + #, c-format + msgid "%s before %s'\\x%x'" + msgstr "%s antes de %s'\\x%x'" + + #: c-parse.y:2836 cp/spew.c:1489 objc-parse.y:3523 + #, c-format + msgid "%s before string constant" + msgstr "%s antes de una constante de cadena" + + #: c-parse.y:2838 cp/spew.c:1491 objc-parse.y:3525 + #, c-format + msgid "%s before numeric constant" + msgstr "%s antes de una constante numérica" + + #: c-parse.y:2840 objc-parse.y:3527 + #, c-format + msgid "%s before \"%s\"" + msgstr "%s antes de \"%s\"" + + #: c-parse.y:2842 objc-parse.y:3529 + #, c-format + msgid "%s before '%s' token" + msgstr "%s antes del elemento '%s'" + + #: c-parse.y:2978 objc-parse.y:3708 + #, c-format + msgid "syntax error at '%s' token" + msgstr "error sintáctico en el elemento '%s'" + + #: c-parse.y:3008 cp/lex.c:906 objc-parse.y:3738 + msgid "YYDEBUG not defined" + msgstr "no se definió YYDEBUG" + + #: c-pragma.c:109 + msgid "#pragma pack (pop) encountered without matching #pragma pack (push, )" + msgstr "se encontró un #pragma pack (pop) sin un #pragma pack (push, ) coincidente" + + #: c-pragma.c:127 + #, c-format + msgid "#pragma pack(pop, %s) encountered without matching #pragma pack(push, %s, )" + msgstr "se encontró un #pragma pack (pop, %s) sin un #pragma pack (push, %s, ) coincidente" + + #: c-pragma.c:162 + msgid "#pragma pack(push[, id], ) is not supported on this target" + msgstr "#pragma pack(push[, id], ) no tiene soporte en este objetivo" + + #: c-pragma.c:164 + msgid "#pragma pack(pop[, id], ) is not supported on this target" + msgstr "#pragma pack(pop[, id], ) no tiene soporte en este objetivo" + + #: c-pragma.c:184 + msgid "missing '(' after '#pragma pack' - ignored" + msgstr "falta un '(' después de '#pragma pack' - ignorado" + + #: c-pragma.c:197 c-pragma.c:247 + msgid "malformed '#pragma pack' - ignored" + msgstr "'#pragma pack' mal formado - ignorado" + + #: c-pragma.c:202 + msgid "malformed '#pragma pack(push[, id], )' - ignored" + msgstr "'#pragma pack(push[, id], )' mal formado - ignorado" + + #: c-pragma.c:204 + msgid "malformed '#pragma pack(pop[, id])' - ignored" + msgstr "'#pragma pack(pop[, id], )' mal formado - ignorado" + + #: c-pragma.c:213 + #, c-format + msgid "unknown action '%s' for '#pragma pack' - ignored" + msgstr "acción desconocida '%s' para '#pragma pack' - ignorado" + + #: c-pragma.c:250 + msgid "junk at end of '#pragma pack'" + msgstr "basura al final de '#pragma pack'" + + #: c-pragma.c:264 + #, c-format + msgid "alignment must be a small power of two, not %d" + msgstr "la alineación debe ser una potencia pequeña de dos, no %d" + + #: c-pragma.c:329 c-pragma.c:334 + msgid "malformed #pragma weak, ignored" + msgstr "#pragma weak malformado, ignorado" + + #: c-pragma.c:338 + msgid "junk at end of #pragma weak" + msgstr "basura al final de #pragma weak" + + #: c-pragma.c:369 c-pragma.c:374 + msgid "malformed #pragma redefine_extname, ignored" + msgstr "#pragma redefine_extname malformado, ignorado" + + #: c-pragma.c:379 + msgid "junk at end of #pragma redefine_extname" + msgstr "basura al final de #pragma redefine_extname" + + #: c-pragma.c:386 c-pragma.c:461 + msgid "#pragma redefine_extname conflicts with declaration" + msgstr "#pragma redefine_extname tiene conflictos con la declaración" + + #: c-pragma.c:410 + msgid "malformed #pragma extern_prefix, ignored" + msgstr "#pragma extern_prefix malformado, ignorado" + + #: c-pragma.c:415 + msgid "junk at end of #pragma extern_prefix" + msgstr "basura al final de #pragma extern_prefix" + + #: c-pragma.c:447 + msgid "asm declaration conficts with previous rename" + msgstr "la declaración asm causa conflictos con el renombrado previo" + + #: c-semantics.c:563 + msgid "break statement not within loop or switch" + msgstr "la declaración break no está dentro de un ciclo o switch" + + #: c-semantics.c:581 + msgid "continue statement not within a loop" + msgstr "la declaración continue no está dentro dentro de un ciclo" + + #: c-semantics.c:676 + msgid "destructor needed for `%#D'" + msgstr "se necesita un destructor para `%#D'" + + #: c-semantics.c:677 + msgid "where case label appears here" + msgstr "donde la etiqueta case aparece aquí" + + #: c-semantics.c:680 + msgid "(enclose actions of previous case statements requiring destructors in their own scope.)" + msgstr "(las acciones adjuntas de declaraciones case previas requieren destructores en su propio ámbito.)" + + #: c-semantics.c:723 c-typeck.c:6923 cp/semantics.c:889 + #, c-format + msgid "%s qualifier ignored on asm" + msgstr "calificador %s ignorado en asm" + + #: c-typeck.c:123 + #, c-format + msgid "`%s' has an incomplete type" + msgstr "`%s' tiene un tipo de dato incompleto" + + #: c-typeck.c:145 cp/call.c:2621 + msgid "invalid use of void expression" + msgstr "uso inválido de la expresión void" + + #: c-typeck.c:153 + msgid "invalid use of flexible array member" + msgstr "uso inválido de un miembro de matriz flexible" + + #: c-typeck.c:159 cp/typeck2.c:227 + msgid "invalid use of array with unspecified bounds" + msgstr "uso inválido de matrices con límites sin especificar" + + #: c-typeck.c:167 + #, c-format + msgid "invalid use of undefined type `%s %s'" + msgstr "uso inválido del tipo indefinido `%s %s'" + + #. If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. + #: c-typeck.c:171 + #, c-format + msgid "invalid use of incomplete typedef `%s'" + msgstr "uso inválido del typedef incompleto `%s'" + + #: c-typeck.c:402 c-typeck.c:416 + msgid "function types not truly compatible in ISO C" + msgstr "los tipos de función no son totalmente compatibles en ISO C" + + #: c-typeck.c:576 + msgid "types are not quite compatible" + msgstr "los tipos no son totalmente compatibles" + + #: c-typeck.c:729 + msgid "sizeof applied to a function type" + msgstr "sizeof aplicado a un tipo de función" + + #: c-typeck.c:735 + msgid "sizeof applied to a void type" + msgstr "sizeof aplicado a un tipo de dato void" + + #: c-typeck.c:742 + msgid "sizeof applied to an incomplete type" + msgstr "sizeof aplicado a un tipo de dato incompleto" + + #: c-typeck.c:795 c-typeck.c:2704 + msgid "arithmetic on pointer to an incomplete type" + msgstr "aritmética en apuntador a un tipo de dato incompleto" + + #: c-typeck.c:1183 + #, c-format + msgid "%s has no member named `%s'" + msgstr "%s no tiene un miembro llamado `%s'" + + #: c-typeck.c:1216 + #, c-format + msgid "request for member `%s' in something not a structure or union" + msgstr "petición del miembro `%s' en algo que no es estructura ó unión" + + #: c-typeck.c:1248 + msgid "dereferencing pointer to incomplete type" + msgstr "apuntador deferenciado a tipo de dato incompleto" + + #: c-typeck.c:1252 + msgid "dereferencing `void *' pointer" + msgstr "deferenciando el apuntador `void *'" + + #: c-typeck.c:1269 cp/typeck.c:2347 + #, c-format + msgid "invalid type argument of `%s'" + msgstr "argumento de tipo inválido de `%s'" + + #: c-typeck.c:1288 cp/typeck.c:2373 + msgid "subscript missing in array reference" + msgstr "falta subíndice en la referencia de la matriz" + + #: c-typeck.c:1309 cp/typeck.c:2415 + msgid "array subscript has type `char'" + msgstr "el subíndice de la matriz tiene tipo `char'" + + #: c-typeck.c:1317 c-typeck.c:1406 cp/typeck.c:2422 cp/typeck.c:2501 + msgid "array subscript is not an integer" + msgstr "el subíndice de la matriz no es un entero" + + #: c-typeck.c:1350 + msgid "ISO C forbids subscripting `register' array" + msgstr "ISO C prohibe el subíndice de una matriz `register'" + + #: c-typeck.c:1352 + msgid "ISO C89 forbids subscripting non-lvalue array" + msgstr "ISO C89 prohibe el subíndice de una matriz no-lvaluada" + + #: c-typeck.c:1385 + msgid "subscript has type `char'" + msgstr "el subíndice es de tipo `char'" + + #: c-typeck.c:1401 cp/typeck.c:2496 + msgid "subscripted value is neither array nor pointer" + msgstr "el valor indicado por el subíndice no es ni matriz ni apuntador" + + #: c-typeck.c:1455 + #, c-format + msgid "`%s' undeclared here (not in a function)" + msgstr "`%s' no ha sido declarado aquí (no en una función)" + + #: c-typeck.c:1462 + #, c-format + msgid "`%s' undeclared (first use in this function)" + msgstr "`%s' no ha sido declarado aquí (primero úselo en esta función)" + + #: c-typeck.c:1467 + msgid "(Each undeclared identifier is reported only once" + msgstr "(Cada identificador no declarado solamente se reporta una vez" + + #: c-typeck.c:1468 + msgid "for each function it appears in.)" + msgstr "para cada funcion en la que aparece.)" + + #: c-typeck.c:1485 + #, c-format + msgid "local declaration of `%s' hides instance variable" + msgstr "la declaración local de `%s' oculta la variable de instancia" + + #: c-typeck.c:1550 + msgid "called object is not a function" + msgstr "el objeto llamado no es una función" + + #: c-typeck.c:1637 cp/typeck.c:3133 + msgid "too many arguments to function" + msgstr "demasiados argumentos para la función" + + #: c-typeck.c:1658 + #, c-format + msgid "type of formal parameter %d is incomplete" + msgstr "el tipo de dato del parámetro formal %d está incompleto" + + #: c-typeck.c:1671 + #, c-format + msgid "%s as integer rather than floating due to prototype" + msgstr "%s como entero en lugar de coma flotante debido al prototipo" + + #: c-typeck.c:1674 + #, c-format + msgid "%s as integer rather than complex due to prototype" + msgstr "%s como entero en lugar de complejo debido al prototipo" + + #: c-typeck.c:1677 + #, c-format + msgid "%s as complex rather than floating due to prototype" + msgstr "%s como complejo en lugar de coma flotante debido al prototipo" + + #: c-typeck.c:1680 + #, c-format + msgid "%s as floating rather than integer due to prototype" + msgstr "%s como coma flotante en lugar de entero debido al prototipo" + + #: c-typeck.c:1683 + #, c-format + msgid "%s as complex rather than integer due to prototype" + msgstr "%s como complejo en lugar de entero debido al prototipo" + + #: c-typeck.c:1686 + #, c-format + msgid "%s as floating rather than complex due to prototype" + msgstr "%s como coma flotante en lugar de complejo debido al prototipo" + + #: c-typeck.c:1696 + #, c-format + msgid "%s as `float' rather than `double' due to prototype" + msgstr "%s como `float' en lugar de `double' debido al prototipo" + + #: c-typeck.c:1714 + #, c-format + msgid "%s with different width due to prototype" + msgstr "%s con anchura diferente debido al prototipo" + + #: c-typeck.c:1748 + #, c-format + msgid "%s as unsigned due to prototype" + msgstr "%s como unsigned debido al prototipo" + + #: c-typeck.c:1750 + #, c-format + msgid "%s as signed due to prototype" + msgstr "%s como signed debido al prototipo" + + #: c-typeck.c:1784 cp/typeck.c:3241 + msgid "too few arguments to function" + msgstr "muy pocos argumentos para la función" + + #: c-typeck.c:1826 + msgid "suggest parentheses around + or - inside shift" + msgstr "se sugieren paréntesis alrededor de + o - dentro de un desplazamiento" + + #: c-typeck.c:1833 + msgid "suggest parentheses around && within ||" + msgstr "se sugieren paréntesis alrededor de && junto con ||" + + #: c-typeck.c:1842 + msgid "suggest parentheses around arithmetic in operand of |" + msgstr "se sugieren paréntesis alrededor de la aritmética para operandos de |" + + #: c-typeck.c:1845 + msgid "suggest parentheses around comparison in operand of |" + msgstr "se sugieren paréntesis alrededor de las comparaciones para operandos de |" + + #: c-typeck.c:1854 + msgid "suggest parentheses around arithmetic in operand of ^" + msgstr "se sugieren paréntesis alrededor de la aritmética para operandos de ^" + + #: c-typeck.c:1857 + msgid "suggest parentheses around comparison in operand of ^" + msgstr "se sugieren paréntesis alrededor de las comparaciones para operandos de ^" + + #: c-typeck.c:1864 + msgid "suggest parentheses around + or - in operand of &" + msgstr "se sugieren paréntesis alrededor de + o - para operandos de &" + + #: c-typeck.c:1867 + msgid "suggest parentheses around comparison in operand of &" + msgstr "se sugieren paréntesis alrededor de las comparaciones para operandos de &" + + #: c-typeck.c:1874 + msgid "comparisons like X<=Y<=Z do not have their mathematical meaning" + msgstr "las comparaciones como X<=Y<=Z no tienen su significado matemático" + + #: c-typeck.c:2034 c-typeck.c:2067 + msgid "division by zero" + msgstr "división por cero" + + #: c-typeck.c:2112 cp/typeck.c:3502 + msgid "right shift count is negative" + msgstr "la cuenta de desplazamiento a la derecha es negativa" + + #: c-typeck.c:2119 cp/typeck.c:3508 + msgid "right shift count >= width of type" + msgstr "cuenta de desplazamiento a la derecha >= anchura del tipo" + + #: c-typeck.c:2144 cp/typeck.c:3527 + msgid "left shift count is negative" + msgstr "la cuenta de desplazamiento a la izquierda es negativa" + + #: c-typeck.c:2147 cp/typeck.c:3529 + msgid "left shift count >= width of type" + msgstr "cuenta de desplazamiento a la izquierda >= anchura del tipo" + + #: c-typeck.c:2172 + msgid "shift count is negative" + msgstr "la cuenta de desplazamiento es negativa" + + #: c-typeck.c:2174 + msgid "shift count >= width of type" + msgstr "cuenta de desplazamiento >= anchura del tipo" + + #: c-typeck.c:2195 cp/typeck.c:3564 + msgid "comparing floating point with == or != is unsafe" + msgstr "no es segura la comparacion de coma flotante con == o !=" + + #: c-typeck.c:2219 c-typeck.c:2225 + msgid "ISO C forbids comparison of `void *' with function pointer" + msgstr "ISO C prohibe la comparación de `void *' con un apuntador de función" + + #: c-typeck.c:2228 c-typeck.c:2270 c-typeck.c:2298 + msgid "comparison of distinct pointer types lacks a cast" + msgstr "la comparación de diferentes tipos de apuntador carece de una conversión" + + #: c-typeck.c:2243 c-typeck.c:2249 c-typeck.c:2319 c-typeck.c:2325 + msgid "comparison between pointer and integer" + msgstr "comparación entre apuntador y entero" + + #: c-typeck.c:2265 c-typeck.c:2293 + msgid "ISO C forbids ordered comparisons of pointers to functions" + msgstr "ISO C prohibe la comparación entre apuntadores a funciones" + + #: c-typeck.c:2290 + msgid "comparison of complete and incomplete pointers" + msgstr "comparación de apuntadores completos e incompletos" + + #: c-typeck.c:2306 c-typeck.c:2313 + msgid "ordered comparison of pointer with integer zero" + msgstr "comparación ordenada de apuntador con el entero cero" + + #: c-typeck.c:2339 cp/typeck.c:3697 + msgid "unordered comparison on non-floating point argument" + msgstr "comparación sin orden en argumento de coma no flotante" + + #: c-typeck.c:2543 + msgid "comparison between signed and unsigned" + msgstr "comparación entre signed y unsigned" + + #: c-typeck.c:2589 cp/typeck.c:3943 + msgid "comparison of promoted ~unsigned with constant" + msgstr "comparación de un ~unsigned promovido con una constante" + + #: c-typeck.c:2597 cp/typeck.c:3951 + msgid "comparison of promoted ~unsigned with unsigned" + msgstr "comparación de un ~unsigned promovido con unsigned" + + #: c-typeck.c:2656 + msgid "pointer of type `void *' used in subtraction" + msgstr "se usó un apuntador de tipo `void *' en la sustracción" + + #: c-typeck.c:2658 + msgid "pointer to a function used in subtraction" + msgstr "se utilizó un apuntador a una función en la sustracción" + + #: c-typeck.c:2755 + msgid "wrong type argument to unary plus" + msgstr "argumento de tipo erróneo para el incremento unario" + + #: c-typeck.c:2766 + msgid "wrong type argument to unary minus" + msgstr "argumento de tipo erróneo para el decremento unario" + + #: c-typeck.c:2778 + msgid "ISO C does not support `~' for complex conjugation" + msgstr "ISO C no tiene soporte de `~' para conjugaciones complejas" + + #: c-typeck.c:2784 + msgid "wrong type argument to bit-complement" + msgstr "argumento de tipo erróneo para complemento de bits" + + #: c-typeck.c:2795 + msgid "wrong type argument to abs" + msgstr "argumento de tipo erróneo para abs" + + #: c-typeck.c:2807 + msgid "wrong type argument to conjugation" + msgstr "argumento de tipo erróneo para la conjugación" + + #: c-typeck.c:2821 + msgid "wrong type argument to unary exclamation mark" + msgstr "argumento de tipo erróneo para el signo de exclamación unario" + + #: c-typeck.c:2864 + msgid "ISO C does not support `++' and `--' on complex types" + msgstr "ISO C no tiene soporte para `++' y `--' en tipos complejos" + + #: c-typeck.c:2879 c-typeck.c:2911 + msgid "wrong type argument to increment" + msgstr "argumento de tipo erróneo para el incremento" + + #: c-typeck.c:2881 c-typeck.c:2913 + msgid "wrong type argument to decrement" + msgstr "argumento de tipo erróneo para el decremento" + + #: c-typeck.c:2902 + msgid "increment of pointer to unknown structure" + msgstr "incremento de apuntador a estructura desconocida" + + #: c-typeck.c:2904 + msgid "decrement of pointer to unknown structure" + msgstr "decremento de apuntador a estructura desconocida" + + #: c-typeck.c:3041 + msgid "ISO C forbids the address of a cast expression" + msgstr "ISO C prohibe la dirección de una expresión cast" + + #: c-typeck.c:3051 + msgid "invalid lvalue in unary `&'" + msgstr "l-valor inválido en `&' unario" + + #: c-typeck.c:3083 + #, c-format + msgid "attempt to take address of bit-field structure member `%s'" + msgstr "se intentó tomar la dirección del miembro de la estructura de campos de bits `%s'" + + #: c-typeck.c:3192 c-typeck.c:4618 c-typeck.c:4634 c-typeck.c:4650 final.c:2981 final.c:2983 gcc.c:4462 rtl-error.c:121 tradcif.y:532 tradcpp.c:4134 config/cris/cris.c:515 cp/typeck.c:4650 java/expr.c:386 java/verify.c:1464 java/verify.c:1465 java/verify.c:1480 + #, c-format + msgid "%s" + msgstr "%s" + + #: c-typeck.c:3253 + msgid "ISO C forbids use of conditional expressions as lvalues" + msgstr "ISO C prohibe el uso de expresiones condicionales como l-valores" + + #: c-typeck.c:3256 + msgid "ISO C forbids use of compound expressions as lvalues" + msgstr "ISO C prohibe el uso de expresiones compuestas como l-valores" + + #: c-typeck.c:3259 + msgid "ISO C forbids use of cast expressions as lvalues" + msgstr "ISO C prohibe el uso de expresiones de conversión como l-valores" + + #: c-typeck.c:3276 + #, c-format + msgid "%s of read-only member `%s'" + msgstr "%s del miembro de sólo lectura `%s'" + + #: c-typeck.c:3280 + #, c-format + msgid "%s of read-only variable `%s'" + msgstr "%s de la variable de sólo lectura `%s'" + + #: c-typeck.c:3283 + #, c-format + msgid "%s of read-only location" + msgstr "%s de la ubicación de sólo lectura" + + #: c-typeck.c:3301 + #, c-format + msgid "cannot take address of bit-field `%s'" + msgstr "no se puede tomar la dirección del campo de bits `%s'" + + #: c-typeck.c:3329 + #, c-format + msgid "global register variable `%s' used in nested function" + msgstr "se usó la variable de registro global `%s' en funciones anidadas" + + #: c-typeck.c:3333 + #, c-format + msgid "register variable `%s' used in nested function" + msgstr "se usó la variable de registro `%s' en funciones anidadas" + + #: c-typeck.c:3340 + #, c-format + msgid "address of global register variable `%s' requested" + msgstr "se solicitó la dirección de la variable de registro global `%s'" + + #: c-typeck.c:3352 + msgid "cannot put object with volatile field into register" + msgstr "no se puede poner objeto con campo volatile en register" + + #: c-typeck.c:3356 + #, c-format + msgid "address of register variable `%s' requested" + msgstr "se solicitó la dirección de la variable register `%s'" + + #: c-typeck.c:3464 + msgid "signed and unsigned type in conditional expression" + msgstr "tipos signed y unsigned en la expresión condicional" + + #: c-typeck.c:3471 + msgid "ISO C forbids conditional expr with only one void side" + msgstr "ISO C prohibe una expresión condicional con sólo un lado void" + + #: c-typeck.c:3487 c-typeck.c:3494 + msgid "ISO C forbids conditional expr between `void *' and function pointer" + msgstr "ISO C prohibe expresiones condicionales entre `void *' y apuntadores de funciones" + + #: c-typeck.c:3500 + msgid "pointer type mismatch in conditional expression" + msgstr "los tipos de datos apuntadores no coinciden en la expresión condicional" + + #: c-typeck.c:3507 c-typeck.c:3517 + msgid "pointer/integer type mismatch in conditional expression" + msgstr "los tipos de datos apuntadores/enteros no coinciden en la expresión condicional" + + #: c-typeck.c:3531 + msgid "type mismatch in conditional expression" + msgstr "los tipos de datos no coinciden en la expresión condicional" + + #: c-typeck.c:3602 cp/typeck.c:4907 + msgid "left-hand operand of comma expression has no effect" + msgstr "el operador del lado izquierdo de la expresión coma no tiene efecto" + + #: c-typeck.c:3641 + msgid "cast specifies array type" + msgstr "la conversión especifica el tipo matriz" + + #: c-typeck.c:3647 + msgid "cast specifies function type" + msgstr "la conversión especifica el tipo función" + + #: c-typeck.c:3657 + msgid "ISO C forbids casting nonscalar to the same type" + msgstr "ISO C prohibe la conversión de un no escalar al mismo tipo" + + #: c-typeck.c:3676 + msgid "ISO C forbids casts to union type" + msgstr "ISO C prohibe la conversión al tipo union" + + #: c-typeck.c:3692 + msgid "cast to union type from type not present in union" + msgstr "conversión a tipo union desde un tipo no presente en union" + + #: c-typeck.c:3743 + msgid "cast adds new qualifiers to function type" + msgstr "la conversión agrega calificadores nuevos al tipo función" + + #. There are qualifiers present in IN_OTYPE that are not + #. present in IN_TYPE. + #: c-typeck.c:3748 + msgid "cast discards qualifiers from pointer target type" + msgstr "la conversión descarta los calificadores del tipo del destino del apuntador" + + #: c-typeck.c:3763 + msgid "cast increases required alignment of target type" + msgstr "la conversión incrementa la alineación requerida del tipo del destino" + + #: c-typeck.c:3769 cp/typeck.c:5337 + msgid "cast from pointer to integer of different size" + msgstr "conversión de apuntador a entero de tamaño diferente" + + #: c-typeck.c:3774 + msgid "cast does not match function type" + msgstr "la conversión no coincide con el tipo de la función" + + #: c-typeck.c:3781 cp/typeck.c:5344 + msgid "cast to pointer from integer of different size" + msgstr "conversión a apuntador desde un entero de tamaño diferente" + + #. Now we have handled acceptable kinds of LHS that are not truly lvalues. + #. Reject anything strange now. + #: c-typeck.c:3939 + msgid "invalid lvalue in assignment" + msgstr "l-valor inválido en la asignación" + + #. Convert new value to destination type. + #: c-typeck.c:3948 c-typeck.c:3973 c-typeck.c:3990 cp/typeck.c:5454 cp/typeck.c:5605 + msgid "assignment" + msgstr "asignación" + + #: c-typeck.c:4157 c-typeck.c:4224 + #, c-format + msgid "%s makes qualified function pointer from unqualified" + msgstr "%s hace que la función calificada apunte desde una no calificada" + + #: c-typeck.c:4161 c-typeck.c:4204 + #, c-format + msgid "%s discards qualifiers from pointer target type" + msgstr "%s descarta calificadores del tipo del destino del apuntador" + + #: c-typeck.c:4167 + msgid "ISO C prohibits argument conversion to union type" + msgstr "ISO C prohibe la conversión de argumentos a tipo union" + + #: c-typeck.c:4196 + #, c-format + msgid "ISO C forbids %s between function pointer and `void *'" + msgstr "ISO C prohibe %s entre apuntadores a función y `void *'" + + #: c-typeck.c:4213 + #, c-format + msgid "pointer targets in %s differ in signedness" + msgstr "el apuntador que apunta a %s difiere en signo" + + #: c-typeck.c:4229 + #, c-format + msgid "%s from incompatible pointer type" + msgstr "%s de tipo de apuntador incompatible" + + #: c-typeck.c:4245 + #, c-format + msgid "%s makes pointer from integer without a cast" + msgstr "%s crea un apuntador desde un entero sin una conversión" + + #: c-typeck.c:4253 + #, c-format + msgid "%s makes integer from pointer without a cast" + msgstr "%s crea un entero desde un apuntador sin una conversión" + + #: c-typeck.c:4267 c-typeck.c:4270 + #, c-format + msgid "incompatible type for argument %d of `%s'" + msgstr "tipo incompatible para el argumento %d de `%s'" + + #: c-typeck.c:4274 + #, c-format + msgid "incompatible type for argument %d of indirect function call" + msgstr "tipo incompatible para el argumento %d de la llamada indirecta a función" + + #: c-typeck.c:4278 + #, c-format + msgid "incompatible types in %s" + msgstr "tipos incompatibles en %s" + + #. Function name is known; supply it. + #: c-typeck.c:4333 + #, c-format + msgid "passing arg %d of `%s'" + msgstr "pasando el argumento %d de `%s'" + + #. Function name unknown (call through ptr); just give arg number. + #: c-typeck.c:4343 + #, c-format + msgid "passing arg %d of pointer to function" + msgstr "pasando el argumento %d del apuntador a la función" + + #: c-typeck.c:4410 + msgid "initializer for static variable is not constant" + msgstr "el valor inicial asignado para la variable estática no es una constante" + + #: c-typeck.c:4416 + msgid "initializer for static variable uses complicated arithmetic" + msgstr "el valor inicial asignado para la variable estática usa aritmética complicada" + + #: c-typeck.c:4424 + msgid "aggregate initializer is not constant" + msgstr "el iniciador agregado no es una constante" + + #: c-typeck.c:4426 + msgid "aggregate initializer uses complicated arithmetic" + msgstr "el iniciador agregado usa aritmética complicada" + + #: c-typeck.c:4433 + msgid "traditional C rejects automatic aggregate initialization" + msgstr "C tradicional rechaza la iniciación automática de agregados" + + #: c-typeck.c:4621 c-typeck.c:4637 c-typeck.c:4653 + #, c-format + msgid "(near initialization for `%s')" + msgstr "(cerca de la asignación de valores iniciales para `%s')" + + #: c-typeck.c:4705 cp/typeck2.c:513 + msgid "char-array initialized from wide string" + msgstr "matriz de caracteres con valores iniciales asignados de una cadena ancha" + + # no ancha -> angosta? cfuga + #: c-typeck.c:4712 cp/typeck2.c:520 + msgid "int-array initialized from non-wide string" + msgstr "matriz de enteros con valores iniciales asignados de una cadena no ancha" + + #: c-typeck.c:4730 cp/typeck2.c:536 + msgid "initializer-string for array of chars is too long" + msgstr "la cadena de valores iniciales para la matriz de caracteres es demasiado larga" + + #: c-typeck.c:4768 + msgid "array initialized from non-constant array expression" + msgstr "matriz con valores iniciales asignados de una expresión matrizal que no es constante" + + #: c-typeck.c:4785 c-typeck.c:4787 c-typeck.c:4803 c-typeck.c:4824 c-typeck.c:6262 + msgid "initializer element is not constant" + msgstr "el elemento de valor inicial no es constante" + + #: c-typeck.c:4819 + msgid "initialization" + msgstr "asignación de valores iniciales" + + #: c-typeck.c:4830 c-typeck.c:6267 + msgid "initializer element is not computable at load time" + msgstr "el elemento de valor inicial no es calculable al momento de la carga" + + #: c-typeck.c:4867 c-typeck.c:4883 cp/typeck2.c:613 + msgid "invalid initializer" + msgstr "valor inicial inválido" + + #: c-typeck.c:5376 + msgid "extra brace group at end of initializer" + msgstr "grupo extra de llaves al final de los valores iniciales" + + #: c-typeck.c:5396 + msgid "missing braces around initializer" + msgstr "faltan llaves alrededor de los valores iniciales" + + #: c-typeck.c:5456 + msgid "braces around scalar initializer" + msgstr "llaves alrededor del valor inicial escalar" + + #: c-typeck.c:5504 + msgid "initialization of flexible array member in a nested context" + msgstr "iniciación de un miembro de matriz flexible en un contexto anidado" + + #: c-typeck.c:5506 + msgid "initialization of a flexible array member" + msgstr "iniciación de un miembro de matriz flexible" + + #: c-typeck.c:5537 + msgid "missing initializer" + msgstr "falta valor inicial" + + #: c-typeck.c:5563 + msgid "empty scalar initializer" + msgstr "valor inicial escalar vacío" + + #: c-typeck.c:5568 + msgid "extra elements in scalar initializer" + msgstr "elementos extras en valor inicial escalar" + + #: c-typeck.c:5654 + msgid "initialization designators may not nest" + msgstr "no se pueden anidar los designadores de iniciación" + + #: c-typeck.c:5675 c-typeck.c:5746 + msgid "array index in non-array initializer" + msgstr "índice de matriz en valor inicial que no es de matriz" + + #: c-typeck.c:5680 c-typeck.c:5798 + msgid "field name not in record or union initializer" + msgstr "el nombre del campo no está en el iniciador de record o union" + + #: c-typeck.c:5742 c-typeck.c:5744 + msgid "nonconstant array index in initializer" + msgstr "índice de matriz no constante en valor inicial" + + #: c-typeck.c:5749 + msgid "array index in initializer exceeds array bounds" + msgstr "el índice de matriz en el valor inicial excede los límites de la matriz" + + #: c-typeck.c:5760 + msgid "empty index range in initializer" + msgstr "rango de índices vacío en valor inicial" + + #: c-typeck.c:5769 + msgid "array index range in initializer exceeds array bounds" + msgstr "el rango de índices de la matriz en el valor inicial excede los límites de la matriz" + + #: c-typeck.c:5810 + #, c-format + msgid "unknown field `%s' specified in initializer" + msgstr "campo `%s' desconocido especificado en el valor inicial" + + #: c-typeck.c:5847 c-typeck.c:5868 c-typeck.c:6330 + msgid "initialized field with side-effects overwritten" + msgstr "campo iniciado con efectos laterales sobreescritos" + + #: c-typeck.c:6540 + msgid "excess elements in char array initializer" + msgstr "exceso de elementos en valores iniciales de matriz de caracteres" + + #: c-typeck.c:6547 c-typeck.c:6593 + msgid "excess elements in struct initializer" + msgstr "exceso de elementos en valores iniciales de struct" + + #: c-typeck.c:6608 + msgid "non-static initialization of a flexible array member" + msgstr "iniciación no estática de un miembro de matriz flexible" + + #: c-typeck.c:6670 + msgid "excess elements in union initializer" + msgstr "exceso de elementos en valores iniciales de union" + + #: c-typeck.c:6691 + msgid "traditional C rejects initialization of unions" + msgstr "C tradicional rechaza los valores iniciales de unions" + + #: c-typeck.c:6754 + msgid "excess elements in array initializer" + msgstr "exceso de elementos en valores iniciales de matriz" + + #: c-typeck.c:6783 + msgid "excess elements in vector initializer" + msgstr "exceso de elementos en valor inicial vectorial" + + #: c-typeck.c:6805 + msgid "excess elements in scalar initializer" + msgstr "exceso de elementos en valor inicial escalar" + + #: c-typeck.c:6916 + msgid "asm template is not a string constant" + msgstr "la plantilla asm no es una cadena constante" + + #: c-typeck.c:6948 + msgid "invalid lvalue in asm statement" + msgstr "l-valor inválido en declaración asm" + + #: c-typeck.c:7019 + msgid "modification by `asm'" + msgstr "modificación por `asm'" + + #: c-typeck.c:7038 cp/typeck.c:6453 + msgid "function declared `noreturn' has a `return' statement" + msgstr "la función declarada `noreturn' tiene una declaración `return'" + + #: c-typeck.c:7045 + msgid "`return' with no value, in function returning non-void" + msgstr "`return' sin valores, en una función que no devuelve void" + + #: c-typeck.c:7051 + msgid "`return' with a value, in function returning void" + msgstr "`return' con valor, en una función que devuelve void" + + #: c-typeck.c:7055 + msgid "return" + msgstr "return" + + #: c-typeck.c:7107 + msgid "function returns address of local variable" + msgstr "la función devuelve la dirección de una variable local" + + #: c-typeck.c:7163 cp/semantics.c:529 + msgid "switch quantity not an integer" + msgstr "la cantidad de switch no es un entero" + + #: c-typeck.c:7173 + msgid "`long' switch expression not converted to `int' in ISO C" + msgstr "no se convierte la expresión de switch `long' a `int' en ISO C" + + #: c-typeck.c:7208 cp/decl.c:5232 + msgid "case label not within a switch statement" + msgstr "la etiqueta case no se encuentra dentro de una declaración switch" + + #: c-typeck.c:7210 cp/decl.c:5237 + msgid "`default' label not within a switch statement" + msgstr "la etiqueta `default' no está dentro de una declaración switch" + + # ¿Cómo traducir inlining de forma correcta? cfuga + #: calls.c:1902 + #, c-format + msgid "inlining failed in call to `%s'" + msgstr "el `inlining' falló en la llamada a `%s'" + + #: calls.c:1903 calls.c:2209 + msgid "called from here" + msgstr "llamado desde aquí" + + #: calls.c:2208 + #, c-format + msgid "can't inline call to `%s'" + msgstr "no se pueden hacer la llamada inline a `%s'" + + #: calls.c:2238 + msgid "function call has aggregate value" + msgstr "la llamada a la función tiene valor agregado" + + #: calls.c:4545 + msgid "variable offset is passed partially in stack and in reg" + msgstr "se pasa parcialmente el desplazamiento de la variable a la pila y al registro" + + #: calls.c:4547 + msgid "variable size is passed partially in stack and in reg" + msgstr "se pasa parcialemente el tamaño de la variable a la pila y al registro" + + #: cfgrtl.c:1624 + #, c-format + msgid "end insn %d for block %d not found in the insn stream" + msgstr "el insn final %d para el bloque %d no se encuentra en el flujo insn" + + #: cfgrtl.c:1638 + #, c-format + msgid "insn %d is in multiple basic blocks (%d and %d)" + msgstr "insn %d está en múltiples bloques básicos (%d y %d)" + + #: cfgrtl.c:1650 + #, c-format + msgid "head insn %d for block %d not found in the insn stream" + msgstr "la cabeza insn %d para el bloque %d no se encuentra en el flujo insn" + + #: cfgrtl.c:1669 + #, c-format + msgid "verify_flow_info: Duplicate edge %i->%i" + msgstr "verify_flow_info: Borde duplicado %i->%i" + + #: cfgrtl.c:1688 + #, c-format + msgid "verify_flow_info: Incorrect blocks for fallthru %i->%i" + msgstr "verify_flow_info: Bloques incorrectos para el respaldo %i->%i" + + #: cfgrtl.c:1703 + #, c-format + msgid "verify_flow_info: Incorrect fallthru %i->%i" + msgstr "verify_flow_info: Respaldo incorrecto %i->%i" + + #: cfgrtl.c:1705 + msgid "wrong insn in the fallthru edge" + msgstr "insn erróneo en el borde del respaldo" + + #: cfgrtl.c:1712 + #, c-format + msgid "verify_flow_info: Basic block %d succ edge is corrupted" + msgstr "verify_flow_info: El bloque básico %d succ edge está corrupto" + + #: cfgrtl.c:1736 + #, c-format + msgid "missing barrier after block %i" + msgstr "falta una barrera después del bloque %i" + + #: cfgrtl.c:1746 + #, c-format + msgid "basic block %d pred edge is corrupted" + msgstr "el bloque básico %d pred edge está corrupto" + + #: cfgrtl.c:1763 + #, c-format + msgid "insn %d inside basic block %d but block_for_insn is NULL" + msgstr "insn %d está dentro del bloque básico %d pero block_for_insn es NULL" + + #: cfgrtl.c:1767 + #, c-format + msgid "insn %d inside basic block %d but block_for_insn is %i" + msgstr "insn %d está dentro del bloque básico %d pero block_for_insn es %i" + + #: cfgrtl.c:1781 cfgrtl.c:1791 + #, c-format + msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d" + msgstr "NOTE_INSN_BASIC_BLOCK falta para el bloque %d" + + #: cfgrtl.c:1804 + #, c-format + msgid "NOTE_INSN_BASIC_BLOCK %d in middle of basic block %d" + msgstr "NOTE_INSN_BASIC_BLOCK %d en el medio del bloque básico %d" + + #: cfgrtl.c:1816 + #, c-format + msgid "in basic block %d:" + msgstr "en el bloque básico %d:" + + #: cfgrtl.c:1817 + msgid "flow control insn inside a basic block" + msgstr "control de flujo insn dentro de un bloque básico" + + #: cfgrtl.c:1836 + #, c-format + msgid "basic block %i edge lists are corrupted" + msgstr "las listas de borde del bloque básico %i están corruptas" + + #: cfgrtl.c:1850 + msgid "basic blocks not numbered consecutively" + msgstr "los bloques básicos no están numerados consecutivamente" + + #: cfgrtl.c:1875 + msgid "insn outside basic block" + msgstr "insn fuera del bloque básico" + + #: cfgrtl.c:1883 + msgid "return not followed by barrier" + msgstr "return no es seguido por una barrera" + + #: cfgrtl.c:1888 + #, c-format + msgid "number of bb notes in insn chain (%d) != n_basic_blocks (%d)" + msgstr "el número de notas bb en la cadena insn (%d) != n_basic_blocks (%d)" + + #: cfgrtl.c:1892 + msgid "verify_flow_info failed" + msgstr "falló verify_flow_info" + + #: collect2.c:439 + msgid "internal error" + msgstr "error interno" + + #: collect2.c:940 + msgid "no arguments" + msgstr "sin argumentos" + + #: collect2.c:1269 collect2.c:1417 collect2.c:1450 + #, c-format + msgid "fopen %s" + msgstr "fopen %s" + + #: collect2.c:1272 collect2.c:1422 collect2.c:1453 + #, c-format + msgid "fclose %s" + msgstr "fclose %s" + + #: collect2.c:1281 + #, c-format + msgid "collect2 version %s" + msgstr "collect2 versión %s" + + #: collect2.c:1371 + #, c-format + msgid "%d constructor(s) found\n" + msgstr "se encuentra(n) %d constructor(es)\n" + + #: collect2.c:1372 + #, c-format + msgid "%d destructor(s) found\n" + msgstr "se encuentra(n) %d destructor(es)\n" + + #: collect2.c:1373 + #, c-format + msgid "%d frame table(s) found\n" + msgstr "se encuentra(n) %d marcos de tabla(s)\n" + + #: collect2.c:1514 + #, c-format + msgid "%s terminated with signal %d [%s]%s" + msgstr "%s terminado con la señal %d [%s]%s" + + #: collect2.c:1533 + #, c-format + msgid "%s returned %d exit status" + msgstr "%s devolvió el estado de salida %d" + + #: collect2.c:1561 + #, c-format + msgid "[cannot find %s]" + msgstr "[no se puede encontrar %s]" + + #: collect2.c:1576 + #, c-format + msgid "cannot find `%s'" + msgstr "no se puede encontrar `%s'" + + #: collect2.c:1587 collect2.c:1590 + #, c-format + msgid "redirecting stdout: %s" + msgstr "redirigiendo salida estándard: %s" + + #: collect2.c:1633 + #, c-format + msgid "[Leaving %s]\n" + msgstr "[Dejando %s]\n" + + #: collect2.c:1876 + #, c-format + msgid "" + "\n" + "write_c_file - output name is %s, prefix is %s\n" + msgstr "" + "\n" + "write_c_file - el nombre de salida es %s, el prefijo es %s\n" + + #: collect2.c:2089 + msgid "cannot find `nm'" + msgstr "no se puede encontrar `nm'" + + #: collect2.c:2099 collect2.c:2541 + msgid "pipe" + msgstr "pipe" + + #: collect2.c:2103 collect2.c:2545 + msgid "fdopen" + msgstr "fdopen" + + #: collect2.c:2129 collect2.c:2571 + #, c-format + msgid "dup2 %d 1" + msgstr "dup2 %d 1" + + #: collect2.c:2132 collect2.c:2135 collect2.c:2148 collect2.c:2574 collect2.c:2577 collect2.c:2590 + #, c-format + msgid "close %d" + msgstr "close %d" + + #: collect2.c:2138 + #, c-format + msgid "execvp %s" + msgstr "execvp %s" + + #: collect2.c:2192 + #, c-format + msgid "init function found in object %s" + msgstr "se encontró la función init en el objeto %s" + + #: collect2.c:2200 + #, c-format + msgid "fini function found in object %s" + msgstr "se encontró la función fini en el objeto %s" + + #: collect2.c:2223 collect2.c:2629 + msgid "fclose" + msgstr "fclose" + + #: collect2.c:2268 + #, c-format + msgid "unable to open file '%s'" + msgstr "no se puede abrir el fichero '%s'" + + #: collect2.c:2270 + #, c-format + msgid "unable to stat file '%s'" + msgstr "no se puede evaluar el fichero '%s'" + + #: collect2.c:2276 + #, c-format + msgid "unable to mmap file '%s'" + msgstr "no se puede hacer mmap al fichero '%s'" + + #: collect2.c:2429 + msgid "not found\n" + msgstr "no se encuentra\n" + + #: collect2.c:2431 collect2.c:2608 + #, c-format + msgid "dynamic dependency %s not found" + msgstr "no se encuentra la dependencia dinámica %s" + + #: collect2.c:2451 + #, c-format + msgid "bad magic number in file '%s'" + msgstr "número mágico erróneo en el fichero '%s'" + + #: collect2.c:2473 + msgid "dynamic dependencies.\n" + msgstr "dependencias dinámicas.\n" + + #: collect2.c:2532 + msgid "cannot find `ldd'" + msgstr "no se encuentra `ldd'" + + #: collect2.c:2580 + #, c-format + msgid "execv %s" + msgstr "execv %s" + + #: collect2.c:2593 + msgid "" + "\n" + "ldd output with constructors/destructors.\n" + msgstr "" + "\n" + "salida de ldd con constructores/destructores.\n" + + #: collect2.c:2620 + #, c-format + msgid "unable to open dynamic dependency '%s'" + msgstr "no se puede abrir la dependencia dinámica '%s'" + + #: collect2.c:2734 + #, c-format + msgid "%s: not a COFF file" + msgstr "%s: no es un fichero COFF" + + #: collect2.c:2853 + #, c-format + msgid "%s: cannot open as COFF file" + msgstr "%s: no se puede abrir como un fichero COFF" + + #: collect2.c:2909 + #, c-format + msgid "library lib%s not found" + msgstr "no se encuentra la biblioteca lib%s" + + #: collect2.c:3038 + #, c-format + msgid "open %s" + msgstr "abrir %s" + + #: collect2.c:3061 + msgid "incompatibilities between object file & expected values" + msgstr "incompatibilidades entre el fichero objeto y los valores esperados" + + #: collect2.c:3134 + #, c-format + msgid "" + "\n" + "Processing symbol table #%d, offset = 0x%.8lx, kind = %s\n" + msgstr "" + "\n" + "Procesando la tabla de símbolos #%d, desfase = 0x%.8lx, tipo = %s\n" + + #: collect2.c:3143 + msgid "string section missing" + msgstr "falta la sección de cadenas" + + #: collect2.c:3146 + msgid "section pointer missing" + msgstr "falta la sección de apuntadores" + + #: collect2.c:3194 + msgid "no symbol table found" + msgstr "no se encuentra la tabla de símbolos" + + #: collect2.c:3207 + msgid "no cmd_strings found" + msgstr "no se encuentran cmd_strings" + + #: collect2.c:3219 + msgid "" + "\n" + "Updating header and load commands.\n" + "\n" + msgstr "" + "\n" + "Actualizando las órdenes de encabezado y carga.\n" + "\n" + + #: collect2.c:3226 + #, c-format + msgid "load command map, %d cmds, new size %ld.\n" + msgstr "cargar mapa de órdenes, %d órdenes, nuevo tamaño %ld.\n" + + #: collect2.c:3257 + msgid "" + "writing load commands.\n" + "\n" + msgstr "" + "escribiendo las órdenes de carga.\n" + "\n" + + #: collect2.c:3277 + #, c-format + msgid "close %s" + msgstr "cerrar %s" + + #: collect2.c:3351 + msgid "could not convert 0x%l.8x into a region" + msgstr "no se puede convertir 0x%l.8x en una región" + + #: collect2.c:3355 + #, c-format + msgid "%s function, region %d, offset = %ld (0x%.8lx)\n" + msgstr "función %s, región %d, desfase = %ld (0x%.8lx)\n" + + #: collect2.c:3482 + msgid "bad magic number" + msgstr "número mágico erróneo" + + #: collect2.c:3483 + msgid "bad header version" + msgstr "versión de encabezado errónea" + + #: collect2.c:3484 + msgid "bad raw header version" + msgstr "versión de encabezado textual errónea" + + #: collect2.c:3485 + msgid "raw header buffer too small" + msgstr "almacenamiento temporal de encabezado textual demasiado pequeño" + + #: collect2.c:3486 + msgid "old raw header file" + msgstr "fichero de encabezado textual antiguo" + + #: collect2.c:3487 + msgid "unsupported version" + msgstr "versión sin soporte" + + #: collect2.c:3489 + #, c-format + msgid "unknown {de,en}code_mach_o_hdr return value %d" + msgstr "valor de devolución {de,en}code_mach_o_hdr %d desconocido" + + #: collect2.c:3509 + #, c-format + msgid "fstat %s" + msgstr "fstat %s" + + #: collect2.c:3546 collect2.c:3594 + #, c-format + msgid "lseek %s 0" + msgstr "lseek %s 0" + + #: collect2.c:3550 + #, c-format + msgid "read %s" + msgstr "read %s" + + #: collect2.c:3553 + #, c-format + msgid "read %ld bytes, expected %ld, from %s" + msgstr "%ld bytes leídos, se esperaban %ld, de %s" + + #: collect2.c:3574 + #, c-format + msgid "msync %s" + msgstr "msync %s" + + #: collect2.c:3581 + #, c-format + msgid "munmap %s" + msgstr "munmap %s" + + #: collect2.c:3598 + #, c-format + msgid "write %s" + msgstr "write %s" + + #: collect2.c:3601 + #, c-format + msgid "wrote %ld bytes, expected %ld, to %s" + msgstr "%ld bytes escritos, se esperaban %ld, a %s" + + #: combine.c:12769 + #, c-format + msgid "" + ";; Combiner statistics: %d attempts, %d substitutions (%d requiring new space),\n" + ";; %d successes.\n" + "\n" + msgstr "" + ";; Estadísticas del combinador: %d intentos, %d sustituciones (%d requirieron espacio nuevo),\n" + ";; %d éxitos.\n" + "\n" + + #: combine.c:12779 + #, c-format + msgid "" + "\n" + ";; Combiner totals: %d attempts, %d substitutions (%d requiring new space),\n" + ";; %d successes.\n" + msgstr "" + "\n" + ";; Totales del combinador: %d intentos, %d sustituciones (%d requirieron espacio nuevo),\n" + ";; %d éxitos.\n" + + #: convert.c:67 + msgid "cannot convert to a pointer type" + msgstr "no se puede convertir a un tipo apuntador" + + #: convert.c:100 + msgid "pointer value used where a floating point value was expected" + msgstr "se usó un valor de apuntador donde se esperaba un valor de coma flotante" + + #: convert.c:104 + msgid "aggregate value used where a float was expected" + msgstr "se usó un valor agregado donde se esperaba un float" + + #: convert.c:130 + msgid "conversion to incomplete type" + msgstr "conversión a tipo de dato incompleto" + + #: convert.c:390 convert.c:470 + msgid "can't convert between vector values of different size" + msgstr "no se puede convertir entre valores vectoriales de tamaños diferentes" + + #: convert.c:396 + msgid "aggregate value used where an integer was expected" + msgstr "se usó un valor agregado donde se esperaba un entero" + + #: convert.c:448 f/com.c:1073 + msgid "pointer value used where a complex was expected" + msgstr "se usó un valor de apuntador donde se esperaba un complejo" + + #: convert.c:452 f/com.c:1075 + msgid "aggregate value used where a complex was expected" + msgstr "se usó un valor agregado donde se esperaba un complejo" + + #: convert.c:476 + msgid "can't convert value to a vector" + msgstr "no se puede convertir el valor a un vector" + + #: cpperror.c:125 + msgid "internal error: " + msgstr "error interno: " + + #: cpperror.c:132 tradcpp.c:4690 + msgid "warning: " + msgstr "aviso: " + + #: cpperror.c:209 cpperror.c:299 cppfiles.c:691 gcc.c:6307 tradcpp.c:4728 + #, c-format + msgid "%s: %s" + msgstr "%s: %s" + + #: cppexp.c:154 + msgid "floating point numbers are not valid in #if" + msgstr "los números de coma flotante no son válidos en #if" + + #: cppexp.c:176 + msgid "traditional C rejects the `U' suffix" + msgstr "C tradicional rechaza el sufijo `U'" + + #: cppexp.c:179 + msgid "too many 'l' suffixes in integer constant" + msgstr "demasiados sufijos 'l' en constante entera" + + #: cppexp.c:183 + msgid "integer constant contains digits beyond the radix" + msgstr "la constante entera contiene dígitos más allá del radical" + + #: cppexp.c:186 + msgid "integer constant out of range" + msgstr "constante entera fuera de rango" + + #: cppexp.c:192 + msgid "integer constant is so large that it is unsigned" + msgstr "la constante entera es tan grande que es unsigned" + + #: cppexp.c:201 + #, c-format + msgid "invalid suffix '%.*s' on integer constant" + msgstr "sufijo '%.*s' inválido en constante entera" + + #: cppexp.c:234 + msgid "missing ')' after \"defined\"" + msgstr "falta `)' después de \"defined\"" + + #: cppexp.c:240 + msgid "operator \"defined\" requires an identifier" + msgstr "el operador \"defined\" requiere un identificador" + + #: cppexp.c:248 + #, c-format + msgid "(\"%s\" is an alternative token for \"%s\" in C++)" + msgstr "(\"%s\" es un elemento alternativo para \"%s\" en C++)" + + #: cppexp.c:259 + msgid "this use of \"defined\" may not be portable" + msgstr "este uso de \"defined\" puede no ser transportable" + + #: cppexp.c:307 + msgid "string constants are not valid in #if" + msgstr "las constantes de cadena no son válidas en #if" + + #: cppexp.c:311 + #, c-format + msgid "invalid character '%c' in #if" + msgstr "Carácter inválido '%c' en #if" + + #: cppexp.c:313 + #, c-format + msgid "invalid character '\\%03o' in #if" + msgstr "Carácter inválido '\\%03o' en #if" + + #: cppexp.c:330 + #, c-format + msgid "ISO C++ does not permit \"%s\" in #if" + msgstr "ISO C++ no permite \"%s\" en #if" + + #: cppexp.c:341 + #, c-format + msgid "\"%s\" is not defined" + msgstr "\"%s\" no está definido" + + #: cppexp.c:367 + #, c-format + msgid "\"%s\" is not valid in #if expressions" + msgstr "\"%s\" no es válido en las expresiones #if" + + #: cppexp.c:382 + msgid "integer overflow in preprocessor expression" + msgstr "desbordamiento entero en expresión del preprocesador" + + #: cppexp.c:612 + msgid "missing binary operator" + msgstr "falta un operador binario" + + #: cppexp.c:647 + msgid "void expression between '(' and ')'" + msgstr "expresión void entre '(' y ')'" + + #: cppexp.c:649 + #, c-format + msgid "operator '%s' has no right operand" + msgstr "el operador '%s' no tiene operando derecho" + + #: cppexp.c:661 + #, c-format + msgid "impossible operator '%s'" + msgstr "operador '%s' imposible" + + #: cppexp.c:737 tradcif.y:111 tradcif.y:122 + msgid "division by zero in #if" + msgstr "división por cero en #if" + + #: cppexp.c:771 + msgid "comma operator in operand of #if" + msgstr "operador coma en operando de #if" + + #: cppexp.c:776 + msgid "syntax error '?' without following ':'" + msgstr "error sintáctico '?' sin ':' a continuación" + + #: cppexp.c:779 + msgid "syntax error ':' without preceding '?'" + msgstr "error sintáctico ':' sin una '?' precedente" + + #: cppexp.c:787 + msgid "missing ')' in expression" + msgstr "falta un ')' en la expresión" + + #: cppexp.c:794 + msgid "missing '(' in expression" + msgstr "falta un '(' en la expresión" + + #: cppexp.c:820 + #, c-format + msgid "missing binary operator before '%s'" + msgstr "falta un operador binario antes de `%s'" + + #: cppexp.c:826 + #, c-format + msgid "operator '%s' has no left operand" + msgstr "el operador `%s' no tiene operando izquierdo" + + #: cppexp.c:864 + msgid "unbalanced stack in #if" + msgstr "pila desbalanceada en #if" + + #: cppexp.c:867 + msgid "#if with no expression" + msgstr "#if sin expresión" + + #: cppfiles.c:395 + #, c-format + msgid "%s is too large" + msgstr "%s es demasiado grande" + + #: cppfiles.c:426 + #, c-format + msgid "%s is shorter than expected" + msgstr "%s es más corto de lo esperado" + + #: cppfiles.c:440 + #, c-format + msgid "%s is a block device" + msgstr "%s es un dispositivo de bloques" + + #: cppfiles.c:566 + #, c-format + msgid "no include path in which to find %s" + msgstr "no hay ruta de inclusión en la cual se encuentre %s" + + #: cppfiles.c:639 + msgid "Multiple include guards may be useful for:\n" + msgstr "Guardias múltiples de include pueden ser útiles para:\n" + + #: cppfiles.c:1029 + msgid "absolute file name in remap_filename" + msgstr "nombre de fichero absoluto en remap_filename" + + #: cppinit.c:230 + #, c-format + msgid "ignoring nonexistent directory \"%s\"\n" + msgstr "ignorando el directorio inexistente \"%s\"\n" + + #: cppinit.c:237 + #, c-format + msgid "%s: Not a directory" + msgstr "%s: No es un directorio" + + #: cppinit.c:284 + #, c-format + msgid "ignoring duplicate directory \"%s\"\n" + msgstr "ignorando el directorio duplicado \"%s\"\n" + + #: cppinit.c:312 + #, c-format + msgid "changing search order for system directory \"%s\"" + msgstr "cambiando el orden de búsqueda para el directorio del sistema \"%s\"" + + #: cppinit.c:316 + #, c-format + msgid " as it is the same as non-system directory \"%s\"" + msgstr " porque es el mismo que el directorio que no es del sistema \"%s\"" + + #: cppinit.c:320 + msgid " as it has already been specified as a non-system directory" + msgstr " porque ya ha sido especificado cmo un directorio que no es del sistema" + + #: cppinit.c:936 + msgid "#include \"...\" search starts here:\n" + msgstr "la búsqueda de #include \"...\" inicia aquí:\n" + + #: cppinit.c:940 + msgid "#include <...> search starts here:\n" + msgstr "la búsqueda de #include <...> inicia aquí:\n" + + #: cppinit.c:943 + msgid "End of search list.\n" + msgstr "Fin de la lista de búsqueda.\n" + + #: cppinit.c:1010 + msgid "" + msgstr "" + + #: cppinit.c:1012 + msgid "" + msgstr "" + + #: cppinit.c:1108 tradcpp.c:979 tradcpp.c:989 tradcpp.c:1080 + msgid "I/O error on output" + msgstr "error de E/S en la salida" + + #. Irix6 "cc -n32" and OSF4 cc have problems with char foo[] = ("string"); + #. I.e. a const string initializer with parens around it. That is + #. what N_("string") resolves to, so we make no_* be macros instead. + #: cppinit.c:1156 + #, c-format + msgid "argument missing after %s" + msgstr "falta un argumento después de %s" + + #: cppinit.c:1157 + #, c-format + msgid "assertion missing after %s" + msgstr "falta una aserción después de %s" + + #: cppinit.c:1158 + #, c-format + msgid "directory name missing after %s" + msgstr "falta el nombre de directorio después de %s" + + #: cppinit.c:1159 + #, c-format + msgid "file name missing after %s" + msgstr "falta el nombre de fichero después de %s" + + #: cppinit.c:1160 + #, c-format + msgid "macro name missing after %s" + msgstr "falta el nombre de macro después de %s" + + #: cppinit.c:1161 + #, c-format + msgid "path name missing after %s" + msgstr "falta el nombre de la ruta después de %s" + + #: cppinit.c:1162 + #, c-format + msgid "number missing after %s" + msgstr "falta el número después de %s" + + #: cppinit.c:1163 + #, c-format + msgid "target missing after %s" + msgstr "falta el objetivo después de %s" + + #: cppinit.c:1351 + #, c-format + msgid "too many filenames. Type %s --help for usage info" + msgstr "demasiados nombres de ficheros. Teclee %s --help para información de modo de empleo" + + #: cppinit.c:1541 tradcpp.c:610 + msgid "output filename specified twice" + msgstr "se especificó dos veces el nombre del fichero de salida" + + #: cppinit.c:1653 + msgid "-I- specified twice" + msgstr "se especificó -I- dos veces" + + #: cppinit.c:1794 + #, c-format + msgid "GNU CPP version %s (cpplib)" + msgstr "GNU CPP versión %s (cpplib)" + + #: cppinit.c:1835 tradcpp.c:803 + msgid "you must additionally specify either -M or -MM" + msgstr "debe especificar adicionalmente -M o -MM" + + #. To keep the lines from getting too long for some compilers, limit + #. to about 500 characters (6 lines) per chunk. + #: cppinit.c:1896 + msgid "" + "Switches:\n" + " -include Include the contents of before other files\n" + " -imacros Accept definition of macros in \n" + " -iprefix Specify as a prefix for next two options\n" + " -iwithprefix Add to the end of the system include path\n" + " -iwithprefixbefore Add to the end of the main include path\n" + " -isystem Add to the start of the system include path\n" + msgstr "" + "Interruptores:\n" + " -include Incluye el contenido del antes de otros ficheros\n" + " -imacros Aceptar definiciones de macros en el \n" + " -iprefix Especificar la como un prefijo para las siguientes dos opciones\n" + " -iwithprefix Agregar el ectorio al final de la ruta de inclusión del sistema\n" + " -iwithprefixbefore Agregar el ectorio al final de la ruta de inclusión principal\n" + " -isystem Agregar el ectorio al inicio de la ruta de inclusión del sistema\n" + + #: cppinit.c:1905 + msgid "" + " -idirafter Add to the end of the system include path\n" + " -I Add to the end of the main include path\n" + " -I- Fine-grained include path control; see info docs\n" + " -nostdinc Do not search system include directories\n" + " (dirs specified with -isystem will still be used)\n" + " -nostdinc++ Do not search system include directories for C++\n" + " -o Put output into \n" + msgstr "" + " -idirafter Agregar el ectorio al final de la ruta de inclusión del sistema\n" + " -I Agregar el ectorio al final de la ruta de inclusión principal\n" + " -I- Control granula de la ruta de inclusión; vea los documentos info\n" + " -nostdinc No buscar en los directorios de inclusión del sistema\n" + " (aún se usarán los directorios especificados con -isystem)\n" + " -nostdinc++ No buscar en los directorios de inclusión del sistema para C++\n" + " -o Poner la salida en el \n" + + #: cppinit.c:1914 + msgid "" + " -pedantic Issue all warnings demanded by strict ISO C\n" + " -pedantic-errors Issue -pedantic warnings as errors instead\n" + " -trigraphs Support ISO C trigraphs\n" + " -lang-c Assume that the input sources are in C\n" + " -lang-c89 Assume that the input sources are in C89\n" + msgstr "" + " -pedantic Habilita todos los avisos demandados por ISO C estricto\n" + " -pedantic-errors Habilita los avisos -pedantic como errores\n" + " -trigraphs Soporte para trigrafos de ISO C\n" + " -lang-c Asumir que las fuentes de entrada están en C\n" + " -lang-c89 Asumir que las fuentes de entrada están en C89\n" + + #: cppinit.c:1921 + msgid "" + " -lang-c++ Assume that the input sources are in C++\n" + " -lang-objc Assume that the input sources are in ObjectiveC\n" + " -lang-objc++ Assume that the input sources are in ObjectiveC++\n" + " -lang-asm Assume that the input sources are in assembler\n" + msgstr "" + " -lang-c++ Asumir que las fuentes de entrada están en C++\n" + " -lang-objc Asumir que las fuentes de entrada están en ObjectiveC\n" + " -lang-objc++ Asumir que las fuentes de entrada están en ObjectiveC++\n" + " -lang-asm Asumir que las fuentes de entrada están en ensamblador\n" + + #: cppinit.c:1927 + msgid "" + " -std= Specify the conformance standard; one of:\n" + " gnu89, gnu99, c89, c99, iso9899:1990,\n" + " iso9899:199409, iso9899:1999\n" + " -+ Allow parsing of C++ style features\n" + " -w Inhibit warning messages\n" + " -Wtrigraphs Warn if trigraphs are encountered\n" + " -Wno-trigraphs Do not warn about trigraphs\n" + " -Wcomment{s} Warn if one comment starts inside another\n" + msgstr "" + " -std= Especificar la concordancia estándard; una de:\n" + " gnu89, gnu99, c89, c99, iso9899:1990,\n" + " iso9899:199409, iso9899:1999\n" + " -+ Permite el análisis de las características de estilo C++\n" + " -w Inhibir los mensajes de aviso\n" + " -Wtrigraphs Avisar si se encuentran trigrafos\n" + " -Wno-trigraphs No avisar si se encuentran trigrafos\n" + " -Wcomment{s} Avisar si un comentario inicia dentro de otro\n" + + #: cppinit.c:1937 + msgid "" + " -Wno-comment{s} Do not warn about comments\n" + " -Wtraditional Warn about features not present in traditional C\n" + " -Wno-traditional Do not warn about traditional C\n" + " -Wundef Warn if an undefined macro is used by #if\n" + " -Wno-undef Do not warn about testing undefined macros\n" + " -Wimport Warn about the use of the #import directive\n" + msgstr "" + " -Wno-comment{s} No avisar si se encuentran comentarios\n" + " -Wtraditional Avisar sobre características no presentes en C tradicional\n" + " -Wno-traditional No avisar sobre C tradicional\n" + " -Wundef Avisar si una macro sin definir es usada por #if\n" + " -Wno-undef No avisar sobre pruebas con macros sin definir\n" + " -Wimport Avisar sobre el uso de la directiva #import\n" + + #: cppinit.c:1945 + msgid "" + " -Wno-import Do not warn about the use of #import\n" + " -Werror Treat all warnings as errors\n" + " -Wno-error Do not treat warnings as errors\n" + " -Wsystem-headers Do not suppress warnings from system headers\n" + " -Wno-system-headers Suppress warnings from system headers\n" + " -Wall Enable all preprocessor warnings\n" + msgstr "" + " -Wno-import No avisar sobre el uso de #import\n" + " -Werror Tratar todos los avisos como errores\n" + " -Wno-error No tratar los avisos como errores\n" + " -Wsystem-headers No suprimir los avisos de los encabezados del sistema\n" + " -Wno-system-headers Suprimir avisos de los encabezados del sistema\n" + " -Wall Activar todas los avisos del preprocesador\n" + + #: cppinit.c:1953 + msgid "" + " -M Generate make dependencies\n" + " -MM As -M, but ignore system header files\n" + " -MD Generate make dependencies and compile\n" + " -MMD As -MD, but ignore system header files\n" + " -MF Write dependency output to the given file\n" + " -MG Treat missing header file as generated files\n" + msgstr "" + " -M Genera dependencias para make\n" + " -MM Como -M, pero ignora los ficheros de encabezado del sistema\n" + " -MD Genera dependencias para make y compila\n" + " -MMD Como -MD, pero ignora los ficheros de encabezado del sistema\n" + " -MF Escribe la salida de la dependencia en el fichero dado\n" + " -MG Trata los ficheros de encabezado faltantes como ficheros generados\n" + + # ¿Estoy usando la traducción correcta de 'quoted'? cfuga + #: cppinit.c:1961 + msgid "" + " -MP\t\t\t Generate phony targets for all headers\n" + " -MQ Add a MAKE-quoted target\n" + " -MT Add an unquoted target\n" + msgstr "" + " -MP\t\t\t Generar objetivos falsos para todos los encabezados\n" + " -MQ Agregar un objetivo entrecomillado para MAKE\n" + " -MT Agregar un objetivo sin comillas\n" + + #: cppinit.c:1966 + msgid "" + " -D Define a with string '1' as its value\n" + " -D= Define a with as its value\n" + " -A= Assert the to \n" + " -A-= Disable the to \n" + " -U Undefine \n" + " -v Display the version number\n" + msgstr "" + " -D Define una con la cadena '1' como su valor\n" + " -D= Define una con como su valor\n" + " -A= Define la uesta para la \n" + " -A-= Desactiva la uesta a la \n" + " -U Borra la definición de \n" + " -v Muestra el número de la versión\n" + + #: cppinit.c:1974 + msgid "" + " -H Print the name of header files as they are used\n" + " -C Do not discard comments\n" + " -dM Display a list of macro definitions active at end\n" + " -dD Preserve macro definitions in output\n" + " -dN As -dD except that only the names are preserved\n" + " -dI Include #include directives in the output\n" + msgstr "" + " -H Muestra el nombre de los ficheros de encabezado cada vez que se usan\n" + " -C No descarta los comentarios\n" + " -dM Muestra una lista de definiciones de macro activas al final\n" + " -dD Preserva las definiciones de macro en la salida\n" + " -dN Como -dD excepto que sólo se preservan los nombres\n" + " -dI Incluye directivas #include en la salida\n" + + #: cppinit.c:1982 + msgid "" + " -fpreprocessed Treat the input file as already preprocessed\n" + " -ftabstop= Distance between tab stops for column reporting\n" + " -P Do not generate #line directives\n" + " -$ Do not allow '$' in identifiers\n" + " -remap Remap file names when including files\n" + " --version Display version information\n" + " -h or --help Display this information\n" + msgstr "" + " -fpreprocessed Trata el fichero de salida como si ya fuera preprocesado\n" + " -ftabstop= Distancia entre los topes de tabulador para el reporte en columnas\n" + " -P No generar directivas #line\n" + " -$ No permitir '$' en los identificadores\n" + " -remap Remapear los nombres de fichero cuando se incluyan ficheros\n" + " --version Muestra la información de la versión\n" + " -h ó --help Muestra esta información\n" + + #: cpplex.c:154 + #, c-format + msgid "trigraph ??%c converted to %c" + msgstr "trigrafo ??%c convertido a %c" + + #: cpplex.c:162 + #, c-format + msgid "trigraph ??%c ignored" + msgstr "se ignora el trigrafo ??%c" + + #: cpplex.c:218 + msgid "backslash and newline separated by space" + msgstr "caracteres de barra invertida y fin de línea separados por espacio" + + #: cpplex.c:224 + msgid "backslash-newline at end of file" + msgstr "no hay caractér de barra invertida o fin de línea al final del fichero" + + #: cpplex.c:290 + msgid "\"/*\" within comment" + msgstr "\"/*\" dentro de un comentario" + + #: cpplex.c:373 + msgid "null character(s) ignored" + msgstr "caracter(es) nulo(s) ignorados" + + #: cpplex.c:380 + #, c-format + msgid "%s in preprocessing directive" + msgstr "%s en directiva de preprocesamiento" + + #: cpplex.c:447 + #, c-format + msgid "attempt to use poisoned \"%s\"" + msgstr "intento de usar \"%s\" envenenado" + + #: cpplex.c:455 + msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro" + msgstr "__VA_ARGS__ solamente puede aparecer en la expansión de una macro variadic C99" + + #: cpplex.c:508 + msgid "'$' character(s) in identifier" + msgstr "caracter(es) '$' en un identificador" + + #: cpplex.c:589 + #, c-format + msgid "missing terminating %c character" + msgstr "falta carácter terminando %c" + + #: cpplex.c:594 + msgid "possible start of unterminated string literal" + msgstr "posible inicio de la cadena literal sin terminar" + + #: cpplex.c:689 + msgid "multi-line string literals are deprecated" + msgstr "las literales de cadena en múltiples líneas están deprecadas" + + #: cpplex.c:712 + msgid "null character(s) preserved in literal" + msgstr "caracter(es) nulo(s) preservados en la literal" + + #: cpplex.c:914 + msgid "no newline at end of file" + msgstr "no hay caractér de fin de línea al final del fichero" + + #: cpplex.c:1034 tradcpp.c:1467 + msgid "unterminated comment" + msgstr "comentario sin terminar" + + #: cpplex.c:1045 + msgid "C++ style comments are not allowed in ISO C89" + msgstr "los comentarios de estilo C++ no son permitidos en ISO C89" + + #: cpplex.c:1047 + msgid "(this will be reported only once per input file)" + msgstr "(esto se reportará solamente una vez por cada fichero de entrada)" + + #: cpplex.c:1052 + msgid "multi-line comment" + msgstr "comentario en múltiples líneas" + + #: cpplex.c:1367 + #, c-format + msgid "unknown string token %s\n" + msgstr "cadena de elemento %s desconocida\n" + + #: cpplex.c:1379 + #, c-format + msgid "unspellable token %s" + msgstr "elemento %s impronunciable" + + #: cpplex.c:1635 + #, c-format + msgid "the meaning of '\\%c' varies with -traditional" + msgstr "el significado de `\\%c' varía con -traditional" + + #: cpplex.c:1641 + msgid "incomplete universal-character-name" + msgstr "universal-character-name incompleto" + + #: cpplex.c:1655 + #, c-format + msgid "non-hex digit '%c' in universal-character-name" + msgstr "dígito no hexadecimal '%c' en universal-character-name" + + #: cpplex.c:1663 + msgid "universal-character-name on EBCDIC target" + msgstr "universal-character-name en el objetivo EBCDIC" + + #: cpplex.c:1677 + msgid "universal-character-name out of range" + msgstr "universal-character-name fuera de rango" + + #: cpplex.c:1722 + msgid "the meaning of '\\a' varies with -traditional" + msgstr "el significado de `\\a' varía con -traditional" + + #: cpplex.c:1729 + #, c-format + msgid "non-ISO-standard escape sequence, '\\%c'" + msgstr "secuencia de escape que no es estándard ISO, '\\%c'" + + #: cpplex.c:1739 + msgid "the meaning of '\\x' varies with -traditional" + msgstr "el significado de '\\x' varía con -traditional" + + #: cpplex.c:1758 f/lex.c:620 + msgid "\\x used with no following hex digits" + msgstr "se usó \\x sin dígitos hexadecimales a continuación" + + #: cpplex.c:1762 + msgid "hex escape sequence out of range" + msgstr "secuencia de escape hexadecimal fuera de rango" + + #: cpplex.c:1786 + msgid "octal escape sequence out of range" + msgstr "secuencia de escape octal fuera de rango" + + #: cpplex.c:1801 + #, c-format + msgid "unknown escape sequence '\\%c'" + msgstr "secuencia de escape desconocida, '\\%c'" + + #: cpplex.c:1803 + #, c-format + msgid "unknown escape sequence: '\\%03o'" + msgstr "secuencia de escape desconocida: '\\%03o'" + + #: cpplex.c:1807 + msgid "escape sequence out of range for character" + msgstr "secuencia de escape fuera de rango por el carácter" + + #: cpplex.c:1904 + msgid "empty character constant" + msgstr "constante de carácter vacía" + + #: cpplex.c:1908 + msgid "character constant too long" + msgstr "constante de carácter demasiado larga" + + #: cpplex.c:1911 + msgid "multi-character character constant" + msgstr "constante de carácter con múltiples caracteres" + + #: cpplib.c:228 + #, c-format + msgid "extra tokens at end of #%s directive" + msgstr "elementos extra al final de la directiva #%s" + + #: cpplib.c:281 + #, c-format + msgid "#%s is a GCC extension" + msgstr "#%s es una extensión de GCC" + + #: cpplib.c:292 + msgid "suggest not using #elif in traditional C" + msgstr "se sugiere no usar #elif en C tradicional" + + #: cpplib.c:295 + #, c-format + msgid "traditional C ignores #%s with the # indented" + msgstr "C tradicional ignora #%s con el # indentado" + + #: cpplib.c:299 + #, c-format + msgid "suggest hiding #%s from traditional C with an indented #" + msgstr "se sugiere ocultar #%s de C tradicional con un # indentado" + + #: cpplib.c:333 + msgid "style of line directive is a GCC extension" + msgstr "la directiva de estilo de línea es una extensión de GCC" + + #: cpplib.c:382 + #, c-format + msgid "invalid preprocessing directive #%s" + msgstr "directiva de preprocesamiento #%s inválida" + + #: cpplib.c:437 + #, c-format + msgid "no macro name given in #%s directive" + msgstr "no se dio un nombre de macro en la directiva #%s" + + #: cpplib.c:441 + #, c-format + msgid "\"%s\" cannot be used as a macro name as it is an operator in C++" + msgstr "no se puede usar \"%s\" como un nombre de macro porque es un operador en C++" + + #: cpplib.c:444 + msgid "macro names must be identifiers" + msgstr "los nombres de macro deben ser identificadores" + + #: cpplib.c:455 + #, c-format + msgid "\"%s\" cannot be used as a macro name" + msgstr "no se puede usar \"%s\" como un nombre de macro" + + #: cpplib.c:493 + #, c-format + msgid "undefining \"%s\"" + msgstr "borrando la definición de \"%s\"" + + #: cpplib.c:536 + msgid "missing terminating > character" + msgstr "falta el carácter de terminación >" + + #: cpplib.c:574 + #, c-format + msgid "#%s expects \"FILENAME\" or " + msgstr "#%s espera \"NOMBRE_ARCHIVO\" ó " + + #: cpplib.c:585 + #, c-format + msgid "empty file name in #%s" + msgstr "nombre de fichero vacío en #%s" + + #: cpplib.c:604 + msgid "#include_next in primary source file" + msgstr "#include_next en fichero primario de código fuente" + + #: cpplib.c:611 + msgid "#import is obsolete, use an #ifndef wrapper in the header file" + msgstr "#import es obsoleto, use una envoltura #ifndef en el fichero de encabezado" + + #: cpplib.c:619 + msgid "#include nested too deeply" + msgstr "#include anidado con demasiada profundidad" + + #: cpplib.c:677 + #, c-format + msgid "invalid flag \"%s\" in line directive" + msgstr "indicador \"%s\" inválido en la línea de la directiva" + + #: cpplib.c:759 + #, c-format + msgid "\"%s\" after #line is not a positive integer" + msgstr "\"%s\" después de #line no es un entero positivo" + + #: cpplib.c:765 + msgid "line number out of range" + msgstr "número de línea fuera de rango" + + #: cpplib.c:776 cpplib.c:847 + #, c-format + msgid "\"%s\" is not a valid filename" + msgstr "\"%s\" no es un nombre de fichero válido" + + #: cpplib.c:811 + #, c-format + msgid "\"%s\" after # is not a positive integer" + msgstr "\"%s\" después de # no es un entero positivo" + + #: cpplib.c:916 + msgid "invalid #ident directive" + msgstr "directiva #ident inválida" + + #: cpplib.c:1004 + #, c-format + msgid "registering \"%s\" as both a pragma and a pragma namespace" + msgstr "registrando \"%s\" como un pragma y como un espacio de nombres de pragma" + + #: cpplib.c:1007 + #, c-format + msgid "#pragma %s %s is already registered" + msgstr "#pragma %s %s ya está registrado" + + #: cpplib.c:1009 + #, c-format + msgid "#pragma %s is already registered" + msgstr "#pragma %s ya está registrado" + + #: cpplib.c:1084 + msgid "#pragma once is obsolete" + msgstr "#pragma una vez es obsoleto" + + #: cpplib.c:1087 + msgid "#pragma once in main file" + msgstr "#pragma una vez en el fichero principal" + + #: cpplib.c:1111 + msgid "invalid #pragma GCC poison directive" + msgstr "directiva #pragma de GCC envenenada inválida" + + #: cpplib.c:1120 + #, c-format + msgid "poisoning existing macro \"%s\"" + msgstr "envenenando la macro existente \"%s\"" + + #: cpplib.c:1140 + msgid "#pragma system_header ignored outside include file" + msgstr "#pragma system_header ignorado fuera del fichero a incluir" + + #: cpplib.c:1165 + #, c-format + msgid "cannot find source %s" + msgstr "no se puede encontrar la fuente %s" + + #: cpplib.c:1169 + #, c-format + msgid "current file is older than %s" + msgstr "el fichero actual es más antiguo que %s" + + #: cpplib.c:1244 + msgid "_Pragma takes a parenthesized string literal" + msgstr "_Pragma lleva una cadena literal entre paréntesis" + + #: cpplib.c:1343 + msgid "#else without #if" + msgstr "#else sin #if" + + #: cpplib.c:1348 tradcpp.c:3871 + msgid "#else after #else" + msgstr "#else después de #else" + + #: cpplib.c:1350 cpplib.c:1384 + msgid "the conditional began here" + msgstr "el condicional empezó aquí" + + #: cpplib.c:1377 + msgid "#elif without #if" + msgstr "#elif sin #if" + + #: cpplib.c:1382 tradcpp.c:3566 + msgid "#elif after #else" + msgstr "#elif después de #else" + + #: cpplib.c:1413 + msgid "#endif without #if" + msgstr "#endif sin #if" + + #: cpplib.c:1496 tradcpp.c:3263 + msgid "missing '(' after predicate" + msgstr "falta '(' antes del predicado" + + #: cpplib.c:1511 tradcpp.c:3277 + msgid "missing ')' to complete answer" + msgstr "falta ')' para completar la respuesta" + + #: cpplib.c:1531 tradcpp.c:3283 + msgid "predicate's answer is empty" + msgstr "el predicado de la respuesta está vacío" + + #: cpplib.c:1561 tradcpp.c:3331 + msgid "assertion without predicate" + msgstr "afirmación sin predicado" + + #: cpplib.c:1563 tradcpp.c:3333 + msgid "predicate must be an identifier" + msgstr "el predicado debe ser un identificador" + + #: cpplib.c:1645 tradcpp.c:3430 + #, c-format + msgid "\"%s\" re-asserted" + msgstr "\"%s\" reafirmado" + + #: cpplib.c:1875 + #, c-format + msgid "unterminated #%s" + msgstr "#%s sin terminar" + + #: cppmacro.c:145 + #, c-format + msgid "invalid built-in macro \"%s\"" + msgstr "macro interna \"%s\" inválida" + + #: cppmacro.c:346 + msgid "invalid string literal, ignoring final '\\'" + msgstr "cadena literal inválida, se ignora el '\\' finales" + + #: cppmacro.c:438 + #, c-format + msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token" + msgstr "pegar \"%s\" y \"%s\" no da un elemento válido de preprocesamiento" + + #: cppmacro.c:564 + msgid "directives may not be used inside a macro argument" + msgstr "no se pueden usar las directivas dentro de un argumento de macro" + + #: cppmacro.c:576 + #, c-format + msgid "unterminated argument list invoking macro \"%s\"" + msgstr "lista de argumentos sin terminar al invocar la macro \"%s\"" + + #: cppmacro.c:593 + msgid "ISO C99 requires rest arguments to be used" + msgstr "ISO C99 requiere que el resto de los argumentos sea usado" + + #: cppmacro.c:598 + #, c-format + msgid "macro \"%s\" requires %u arguments, but only %u given" + msgstr "la macro \"%s\" requiere %u argumentos, pero solo se proporcionan %u" + + #: cppmacro.c:609 + #, c-format + msgid "macro \"%s\" passed %u arguments, but takes just %u" + msgstr "la macro \"%s\" recibió %u argumentos, pero solamente tomó %u" + + #: cppmacro.c:692 + #, c-format + msgid "function-like macro \"%s\" must be used with arguments in traditional C" + msgstr "la función de macro \"%s\" se debe usar con argumentos en C tradicional" + + #: cppmacro.c:1188 + #, c-format + msgid "duplicate macro parameter \"%s\"" + msgstr "parámetro de macro \"%s\" duplicado" + + #: cppmacro.c:1216 + #, c-format + msgid "\"%s\" may not appear in macro parameter list" + msgstr "\"%s\" podría faltar en la lista de parámetro de macro" + + #: cppmacro.c:1223 + msgid "macro parameters must be comma-separated" + msgstr "los parámetros de macro deben ser separados por comas" + + #: cppmacro.c:1240 + msgid "parameter name missing" + msgstr "falta el nombre del parámetro" + + #: cppmacro.c:1254 + msgid "anonymous variadic macros were introduced in C99" + msgstr "los macros variadic anónimos se introdujeron en C99" + + #: cppmacro.c:1257 + msgid "ISO C does not permit named variadic macros" + msgstr "ISO C no permite macros variadic nombrados" + + #: cppmacro.c:1266 + msgid "missing ')' in macro parameter list" + msgstr "falta paréntesis derecho en la lista de parámetros de macro" + + #: cppmacro.c:1344 + msgid "ISO C requires whitespace after the macro name" + msgstr "ISO C requiere espacios en blanco después del nombre de macro" + + #: cppmacro.c:1374 + msgid "'#' is not followed by a macro parameter" + msgstr "'#' no es seguido por un parámetro de macro" + + #: cppmacro.c:1394 + msgid "'##' cannot appear at either end of a macro expansion" + msgstr "'##' no puede aparece en o al final de una expansión de macro" + + #: cppmacro.c:1430 + #, c-format + msgid "\"%s\" redefined" + msgstr "\"%s\" redefinido" + + #: cppmacro.c:1434 + msgid "this is the location of the previous definition" + msgstr "esta es la ubicación de la definición previa" + + #: cppmacro.c:1498 + #, c-format + msgid "macro argument \"%s\" would be stringified with -traditional" + msgstr "el argumento de macro \"%s\" debería ser convertido a cadena con -traditional" + + #: cppmacro.c:1522 + #, c-format + msgid "invalid hash type %d in cpp_macro_definition" + msgstr "tipo de hash %d inválido en cpp_macro_definition" + + #: cppmain.c:121 + #, c-format + msgid "invalid option %s" + msgstr "opción %s inválida" + + #: cppspec.c:131 + #, c-format + msgid "\"%s\" is not a valid option to the preprocessor" + msgstr "\"%s\" no es una opción válida para el preprocesador" + + #: cppspec.c:155 + msgid "too many input files" + msgstr "demasiados ficheros de entrada" + + #: cse.c:7112 + #, c-format + msgid ";; Processing block from %d to %d, %d sets.\n" + msgstr ";; Procesando el bloque de %d a %d, %d establecido.\n" + + #: diagnostic.c:784 + #, c-format + msgid "%s:%d: warning: " + msgstr "%s:%d: aviso: " + + #: diagnostic.c:791 + #, c-format + msgid "%s: warning: " + msgstr "%s: aviso: " + + #: diagnostic.c:871 + msgid "((anonymous))" + msgstr "((anónimo))" + + #: diagnostic.c:941 + #, c-format + msgid "%s: warnings being treated as errors\n" + msgstr "%s: los avisos son tratados como errores\n" + + #: diagnostic.c:978 + #, c-format + msgid "%s: %s: " + msgstr "%s: %s: " + + #: diagnostic.c:1057 + msgid "sorry, not implemented: " + msgstr "lo sentimos, sin implementar: " + + #: diagnostic.c:1076 + #, c-format + msgid "%s " + msgstr "%s " + + #: diagnostic.c:1078 + #, c-format + msgid " %s" + msgstr " %s" + + #: diagnostic.c:1102 + msgid "At top level:" + msgstr "En el nivel principal:" + + #: diagnostic.c:1107 + #, c-format + msgid "In member function `%s':" + msgstr "En la función miembro `%s':" + + #: diagnostic.c:1111 + #, c-format + msgid "In function `%s':" + msgstr "En la función `%s':" + + #: diagnostic.c:1195 + msgid "compilation terminated.\n" + msgstr "compilación terminada.\n" + + #: diagnostic.c:1227 + #, c-format + msgid "%s:%d: confused by earlier errors, bailing out\n" + msgstr "%s:%d: confusión por errores previos, saliendo\n" + + #: diagnostic.c:1242 diagnostic.c:1392 + #, c-format + msgid "" + "Please submit a full bug report,\n" + "with preprocessed source if appropriate.\n" + "See %s for instructions.\n" + msgstr "" + "Por favor envíe un reporte completo de `bugs',\n" + "con el código preprocesado si es apropiado.\n" + "Vea %s para más instrucciones.\n" + + #: diagnostic.c:1390 + msgid "Internal compiler error: Error reporting routines re-entered.\n" + msgstr "Error interno del compilador: Error al reportar rutinas reentradas.\n" + + #: diagnostic.c:1452 + #, c-format + msgid "Internal compiler error in %s, at %s:%d" + msgstr "Error interno del compilador %s, en %s:%d" + + #: diagnostic.c:1497 + #, c-format + msgid "In file included from %s:%d" + msgstr "En el fichero incluído de %s:%d" + + #: diagnostic.c:1500 + #, c-format + msgid "" + ",\n" + " from %s:%d" + msgstr "" + ",\n" + " de %s:%d" + + #: diagnostic.c:1501 + msgid ":\n" + msgstr ":\n" + + #: diagnostic.c:1534 diagnostic.c:1551 + #, c-format + msgid "`%s' is deprecated (declared at %s:%d)" + msgstr "`%s' está deprecado (declarado en %s:%d)" + + #: diagnostic.c:1554 + #, c-format + msgid "`%s' is deprecated" + msgstr "`%s' está deprecado" + + #: diagnostic.c:1557 + #, c-format + msgid "type is deprecated (declared at %s:%d)" + msgstr "el tipo está deprecado (declarado en %s:%d)" + + #: diagnostic.c:1560 + msgid "type is deprecated" + msgstr "el tipo está deprecado" + + #: dwarf2out.c:3056 + #, c-format + msgid "DW_LOC_OP %s not implemented\n" + msgstr "DW_LOC_OP %s no está implementado\n" + + #: dwarfout.c:2089 + #, c-format + msgid "internal regno botch: regno = %d\n" + msgstr "regno interno fastidiado: regno = %d\n" + + #: dwarfout.c:6291 + msgid "can't get current directory" + msgstr "no se puede obtener el directorio actual" + + #: emit-rtl.c:1098 + msgid "can't access real part of complex value in hard register" + msgstr "no se puede accesar a la parte real de un valor complejo en un registro fijo" + + #: emit-rtl.c:1120 + msgid "can't access imaginary part of complex value in hard register" + msgstr "No se puede accesar a la parte imaginaria de un valor complejo en un registro fijo" + + #: emit-rtl.c:3271 + msgid "ICE: emit_insn used where emit_jump_insn needed:\n" + msgstr "ICE: se usa emit_insn donde se necesita emit_jump_insn:\n" + + #: errors.c:136 + #, c-format + msgid "abort in %s, at %s:%d" + msgstr "aborto en %s, en %s:%d" + + #: except.c:382 + msgid "exception handling disabled, use -fexceptions to enable" + msgstr "manejo de excepciones desactivado, use -fexceptions para activar" + + #: except.c:3235 + msgid "argument of `__builtin_eh_return_regno' must be constant" + msgstr "el argumento de `builtin_eh_return_regno' debe ser constante" + + #: except.c:3346 except.c:3368 + msgid "__builtin_eh_return not supported on this target" + msgstr "no se da soporte a __builtin_eh_return en este objetivo" + + #: explow.c:1369 + msgid "stack limits not supported on this target" + msgstr "no se da soporte a límites de la pila en este objetivo" + + #: expr.c:2948 + msgid "function using short complex types cannot be inline" + msgstr "las funciones que usan tipos short complex no pueden ser inline" + + #: expr.c:5810 expr.c:5819 expr.c:5828 expr.c:5833 expr.c:6120 expr.c:6136 + msgid "unsupported wide integer operation" + msgstr "operación de enteros anchos sin soporte" + + #: expr.c:6185 + #, c-format + msgid "prior parameter's size depends on `%s'" + msgstr "el tamaño del parámetro previo depende de `%s'" + + #: expr.c:6531 + msgid "returned value in block_exit_expr" + msgstr "se regresó un valor en block_exit_expr" + + #: final.c:1209 + msgid "negative insn length" + msgstr "longitud de insn negativa" + + #: final.c:2628 + msgid "could not split insn" + msgstr "no se puede dividir insn" + + #: final.c:2976 + msgid "invalid `asm': " + msgstr "`asm' inválido: " + + #: final.c:3160 + msgid "nested assembly dialect alternatives" + msgstr "alternativas de dialecto ensamblador anidadas" + + #: final.c:3177 final.c:3189 + msgid "unterminated assembly dialect alternative" + msgstr "alternativa de dialecto ensamblador sin terminar" + + #: final.c:3233 + #, c-format + msgid "operand number missing after %%-letter" + msgstr "falta un número operando después de %%-letra" + + #: final.c:3236 final.c:3275 + msgid "operand number out of range" + msgstr "número operando fuera de rango" + + #: final.c:3294 + #, c-format + msgid "invalid %%-code" + msgstr "%%-código inválido" + + #: final.c:3325 + #, c-format + msgid "`%%l' operand isn't a label" + msgstr "el operando `%%l' no es una etiqueta" + + #. We can't handle floating point constants; + #. PRINT_OPERAND must handle them. + #: final.c:3432 vmsdbgout.c:478 config/i386/i386.c:5315 config/pdp11/pdp11.c:1570 + msgid "floating constant misused" + msgstr "constante de coma flotante mal usada" + + #: final.c:3488 vmsdbgout.c:535 config/i386/i386.c:5369 config/pdp11/pdp11.c:1617 + msgid "invalid expression as operand" + msgstr "expresión inválida como operando" + + #: flow.c:354 + msgid "function might be possible candidate for attribute `noreturn'" + msgstr "la función sería un posible candidato para el atributo `noreturn'" + + #: flow.c:359 + msgid "`noreturn' function does return" + msgstr "la función `noreturn' devuelve" + + #: flow.c:378 + msgid "control reaches end of non-void function" + msgstr "el control alcanza el final de una función que no es void" + + #: flow.c:1600 + msgid "Attempt to delete prologue/epilogue insn:" + msgstr "Se intentó borrar el insn de prólogo/epílogo" + + #: fold-const.c:3135 fold-const.c:3148 + #, c-format + msgid "comparison is always %d due to width of bit-field" + msgstr "la comparación siempre es %d debido a la anchura del campo de bit" + + #: fold-const.c:4190 fold-const.c:4207 + #, c-format + msgid "comparison is always %d" + msgstr "la comparación siempre es %d" + + #: fold-const.c:4338 + msgid "`or' of unmatched not-equal tests is always 1" + msgstr "un `or' de pruebas no equivalentes sin coincidencia siempre es 1" + + #: fold-const.c:4343 + msgid "`and' of mutually exclusive equal-tests is always 0" + msgstr "un `and' de pruebas equivalentes mutuamente exclusivas siempre es 0" + + #: function.c:906 varasm.c:1530 + #, c-format + msgid "size of variable `%s' is too large" + msgstr "el tamaño de la variable `%s' es demasiado grande" + + #: function.c:5445 + #, c-format + msgid "`%s' might be used uninitialized in this function" + msgstr "`%s' se debería usar sin iniciar en esta función" + + #: function.c:5452 + #, c-format + msgid "variable `%s' might be clobbered by `longjmp' or `vfork'" + msgstr "la variable `%s' podría ser sobreescrita por `longjmp' o `vfork'" + + #: function.c:5471 + #, c-format + msgid "argument `%s' might be clobbered by `longjmp' or `vfork'" + msgstr "el argumento `%s' podría ser sobreescrito por `longjmp' o `vfork'" + + #: function.c:6337 + msgid "function returns an aggregate" + msgstr "la función devuelve un agregado" + + #: function.c:6856 + #, c-format + msgid "unused parameter `%s'" + msgstr "parámetro `%s' sin uso" + + #: gcc.c:1102 + #, c-format + msgid "ambiguous abbreviation %s" + msgstr "abreviación ambigua %s" + + #: gcc.c:1129 + #, c-format + msgid "incomplete `%s' option" + msgstr "opción `%s' incompleta" + + #: gcc.c:1140 + #, c-format + msgid "missing argument to `%s' option" + msgstr "faltan argumentos para la opción `%s'" + + #: gcc.c:1153 + #, c-format + msgid "extraneous argument to `%s' option" + msgstr "argumento extraño para la opción `%s'" + + #: gcc.c:1460 + msgid "Using built-in specs.\n" + msgstr "Usando especificaciones internas.\n" + + #: gcc.c:1634 + #, c-format + msgid "" + "Setting spec %s to '%s'\n" + "\n" + msgstr "" + "Cambiando la especificación de %s a '%s'\n" + "\n" + + #: gcc.c:1732 + #, c-format + msgid "Reading specs from %s\n" + msgstr "Leyendo especificaciones de %s\n" + + #: gcc.c:1830 gcc.c:1849 + #, c-format + msgid "specs %%include syntax malformed after %ld characters" + msgstr "specs sintaxis mal formada de %%include después de %ld caracteres" + + #: gcc.c:1857 + #, c-format + msgid "could not find specs file %s\n" + msgstr "no se puede encontrar el fichero de especificaciones %s\n" + + #: gcc.c:1873 gcc.c:1881 gcc.c:1890 gcc.c:1899 + #, c-format + msgid "specs %%rename syntax malformed after %ld characters" + msgstr "specs sintaxis mal formada de %%rename después de %ld caracteres" + + #: gcc.c:1908 + #, c-format + msgid "specs %s spec was not found to be renamed" + msgstr "specs la especificación %s no se encontró para ser renombrada" + + #: gcc.c:1915 + #, c-format + msgid "rename spec %s to %s\n" + msgstr "renombrando especificación %s a %s\n" + + #: gcc.c:1917 + #, c-format + msgid "" + "spec is '%s'\n" + "\n" + msgstr "" + "la especificacion es '%s'\n" + "\n" + + #: gcc.c:1930 + #, c-format + msgid "specs unknown %% command after %ld characters" + msgstr "specs comando %% desconocido después de %ld caracteres" + + #: gcc.c:1941 gcc.c:1954 + #, c-format + msgid "specs file malformed after %ld characters" + msgstr "specs fichero mal formado después de %ld caracteres" + + #: gcc.c:2008 + msgid "spec file has no spec for linking" + msgstr "el fichero de especificaciones no tiene especificaciones para enlazar" + + #: gcc.c:2720 + msgid "-pipe not supported" + msgstr "-pipe no tiene soporte" + + #: gcc.c:2774 + msgid "" + "\n" + "Go ahead? (y or n) " + msgstr "" + "\n" + "¿Continuar? (s ó n) " + + #: gcc.c:2873 + #, c-format + msgid "" + "Internal error: %s (program %s)\n" + "Please submit a full bug report.\n" + "See %s for instructions." + msgstr "" + "Error interno: `%s' (programa %s)\n" + "Por favor envíe un reporte completo de error.\n" + "Vea %s para más instrucciones." + + #: gcc.c:2891 + #, c-format + msgid "# %s %.2f %.2f\n" + msgstr "# %s %.2f %.2f\n" + + #: gcc.c:3024 + #, c-format + msgid "Usage: %s [options] file...\n" + msgstr "Modo de empleo: %s [opciones] fichero...\n" + + #: gcc.c:3025 + msgid "Options:\n" + msgstr "Opciones:\n" + + #: gcc.c:3027 + msgid " -pass-exit-codes Exit with highest error code from a phase\n" + msgstr " -pass-exit-codes Salir con el código de error más alto de una fase\n" + + #: gcc.c:3028 + msgid " --help Display this information\n" + msgstr " --help Muestra esta información\n" + + #: gcc.c:3029 + msgid " --target-help Display target specific command line options\n" + msgstr " --target-help Muestra opciones de línea de comando específicas del objetivo\n" + + #: gcc.c:3031 + msgid " (Use '-v --help' to display command line options of sub-processes)\n" + msgstr " (Use '-v --help' para mostrar las opciones de línea de comando de los subprocesos)\n" + + #: gcc.c:3032 + msgid " -dumpspecs Display all of the built in spec strings\n" + msgstr " -dumpspecs Muestra todas las cadenas internas de especificación\n" + + #: gcc.c:3033 + msgid " -dumpversion Display the version of the compiler\n" + msgstr " -dumpversion Muestra la versión del compilador\n" + + #: gcc.c:3034 + msgid " -dumpmachine Display the compiler's target processor\n" + msgstr " -dumpmachine Muestra el procesador objetivo del compilador\n" + + #: gcc.c:3035 + msgid " -print-search-dirs Display the directories in the compiler's search path\n" + msgstr " -print-search-dirs Muestra los directorios en la ruta de búsqueda del compilador\n" + + #: gcc.c:3036 + msgid " -print-libgcc-file-name Display the name of the compiler's companion library\n" + msgstr " -print-libgcc-file-name Muestra el nombre de la biblioteca que acompaña al compilador\n" + + #: gcc.c:3037 + msgid " -print-file-name= Display the full path to library \n" + msgstr " -print-file-name= Muestra la ruta completa a la biblioteca \n" + + #: gcc.c:3038 + msgid " -print-prog-name= Display the full path to compiler component \n" + msgstr " -print-prog-name= Muestra la ruta completa del programa componente del compilador \n" + + #: gcc.c:3039 + msgid " -print-multi-directory Display the root directory for versions of libgcc\n" + msgstr " -print-multi-directory Muestra el directorio raíz para las versiones de libgcc\n" + + #: gcc.c:3040 + msgid "" + " -print-multi-lib Display the mapping between command line options and\n" + " multiple library search directories\n" + msgstr "" + " -print-multi-lib Muestra el mapeo entre las opciones de línea de comando\n" + " y los múltiples directorios de la búsqueda de bibliotecas\n" + + #: gcc.c:3043 + msgid " -Wa, Pass comma-separated on to the assembler\n" + msgstr " -Wa, Pasa separadas por coma al ensamblador\n" + + #: gcc.c:3044 + msgid " -Wp, Pass comma-separated on to the preprocessor\n" + msgstr " -Wp, Pasa separadas por coma al preprocesador\n" + + #: gcc.c:3045 + msgid " -Wl, Pass comma-separated on to the linker\n" + msgstr " -Wl, Pasa separadas por coma al enlazador\n" + + #: gcc.c:3046 + msgid " -Xlinker Pass on to the linker\n" + msgstr " -Xlinker Pasa el al enlazador\n" + + #: gcc.c:3047 + msgid " -save-temps Do not delete intermediate files\n" + msgstr " -save-temps No borra los ficheros intermedios\n" + + #: gcc.c:3048 + msgid " -pipe Use pipes rather than intermediate files\n" + msgstr " -pipe Usa tuberías en lugar de ficheros intermedios\n" + + #: gcc.c:3049 + msgid " -time Time the execution of each subprocess\n" + msgstr " -time Obtiene el tiempo de ejecución de cada subproceso\n" + + #: gcc.c:3050 + msgid " -specs= Override built-in specs with the contents of \n" + msgstr " -specs= Sobrepone las especificaciones internas con el contenido del \n" + + #: gcc.c:3051 + msgid " -std= Assume that the input sources are for \n" + msgstr " -std= Asume que los ficheros de entrada son para el \n" + + #: gcc.c:3052 + msgid " -B Add to the compiler's search paths\n" + msgstr " -B Agrega el a las rutas de búsqueda del compilador\n" + + #: gcc.c:3053 + msgid " -b Run gcc for target , if installed\n" + msgstr " -b Ejecuta gcc para el objetivo , si fue instalado\n" + + #: gcc.c:3054 + msgid " -V Run gcc version number , if installed\n" + msgstr " -V Ejecuta el gcc con número de versión , si fue instalado\n" + + #: gcc.c:3055 + msgid " -v Display the programs invoked by the compiler\n" + msgstr " -v Muestra los programas invocados por el compilador\n" + + #: gcc.c:3056 + msgid " -### Like -v but options quoted and commands not executed\n" + msgstr " -### Como -v pero no se ejecutan las opciones entre comillas y los comandos\n" + + #: gcc.c:3057 + msgid " -E Preprocess only; do not compile, assemble or link\n" + msgstr " -E Solamente preprocesa; no compila, ensambla o enlaza\n" + + #: gcc.c:3058 + msgid " -S Compile only; do not assemble or link\n" + msgstr " -S Solamente compila; no ensambla o enlaza\n" + + #: gcc.c:3059 + msgid " -c Compile and assemble, but do not link\n" + msgstr " -c Compila y ensambla, pero no enlaza\n" + + #: gcc.c:3060 + msgid " -o Place the output into \n" + msgstr " -o Coloca la salida en el \n" + + #: gcc.c:3061 + msgid "" + " -x Specify the language of the following input files\n" + " Permissable languages include: c c++ assembler none\n" + " 'none' means revert to the default behavior of\n" + " guessing the language based on the file's extension\n" + msgstr "" + " -x Especifica el lenguaje de los siguientes ficheros de entrada\n" + " Los lenguajes permitidos incluyen: c c++ assembler none\n" + " 'none' significa revertir a la conducta habitual de\n" + " adivinar el lenguaje basado en la extensión del fichero\n" + + #: gcc.c:3068 + #, c-format + msgid "" + "\n" + "Options starting with -g, -f, -m, -O, -W, or --param are automatically\n" + " passed on to the various sub-processes invoked by %s. In order to pass\n" + " other options on to these processes the -W options must be used.\n" + msgstr "" + "\n" + "Las opciones que empiezan con -g, -f, -m, -O, -W, ó --param se pasan\n" + " automáticamente a los varios subprocesos invocados por %s. Para pasar\n" + " otras opciones a estos procesos se deben usar las opciones -W.\n" + + #. translate_options () has turned --version into -fversion. + #: gcc.c:3348 + #, c-format + msgid "%s (GCC) %s\n" + msgstr "%s (GCC) %s\n" + + #: gcc.c:3349 + msgid "Copyright (C) 2002 Free Software Foundation, Inc.\n" + msgstr "Copyright (C) 2002 Free Software Foundation, Inc.\n" + + #: gcc.c:3351 gcov.c:320 + msgid "" + "This is free software; see the source for copying conditions. There is NO\n" + "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" + "\n" + msgstr "" + "Esto es software libre; vea el código para las condiciones de copia. NO hay\n" + "garantía; ni siquiera para MERCANTIBILIDAD o IDONEIDAD PARA UN PROPÓSITO EN\n" + "PARTICULAR\n" + "\n" + + #: gcc.c:3450 + msgid "argument to `-Xlinker' is missing" + msgstr "falta el argumento para `-Xlinker'" + + #: gcc.c:3458 + msgid "argument to `-l' is missing" + msgstr "falta el argumento para `-l'" + + #: gcc.c:3475 + msgid "argument to `-specs' is missing" + msgstr "falta el argumento para `-specs'" + + #: gcc.c:3490 + msgid "argument to `-specs=' is missing" + msgstr "falta el argumento para `-specs='" + + #: gcc.c:3521 + msgid "argument to `-b' is missing" + msgstr "falta el argumento para `-b'" + + #: gcc.c:3536 + msgid "argument to `-B' is missing" + msgstr "falta el argumento para `-B'" + + #: gcc.c:3606 + msgid "argument to `-V' is missing" + msgstr "falta el argumento para `-V'" + + #: gcc.c:3627 gcc.c:3634 gcc.c:3641 + msgid "invalid version number format" + msgstr "formato de número de versión inválido" + + #: gcc.c:3752 + msgid "cannot specify -o with -c or -S and multiple compilations" + msgstr "no se puede especificar -o con -c ó -S y con múltiples compilaciones" + + #: gcc.c:3923 + msgid "warning: -pipe ignored because -save-temps specified" + msgstr "aviso: se ignora -pipe porque se especificó -save-temps" + + #: gcc.c:3927 + msgid "warning: -pipe ignored because -time specified" + msgstr "aviso: se ignora -pipe porque se especificó -time" + + #: gcc.c:3939 + msgid "argument to `-x' is missing" + msgstr "falta el argumento para `-x'" + + #: gcc.c:3967 + #, c-format + msgid "argument to `-%s' is missing" + msgstr "falta el argumento para `-%s'" + + #: gcc.c:4028 + #, c-format + msgid "warning: `-x %s' after last input file has no effect" + msgstr "aviso: `-x %s' después del último fichero de entrada no tiene efecto" + + #: gcc.c:4327 + msgid "invalid specification! Bug in cc" + msgstr "¡Especificación inválida! `Bug' en cc" + + #: gcc.c:4476 + #, c-format + msgid "%s\n" + msgstr "%s\n" + + #. Catch the case where a spec string contains something like + #. '%{foo:%*}'. ie there is no * in the pattern on the left + #. hand side of the :. + #: gcc.c:5029 + #, c-format + msgid "spec failure: '%%*' has not been initialized by pattern match" + msgstr "falla en spec: '%%*' no ha sido iniciado por coincidencia de patrón" + + #: gcc.c:5038 + #, c-format + msgid "warning: use of obsolete %%[ operator in specs" + msgstr "aviso: uso del operador obsoleto %%[ en especificación" + + #: gcc.c:5056 + #, c-format + msgid "Processing spec %c%s%c, which is '%s'\n" + msgstr "Procesando la especificación %c%s%c, el cual es '%s'\n" + + #: gcc.c:5181 + #, c-format + msgid "spec failure: unrecognized spec option '%c'" + msgstr "falla en spec: opción de especificación '%c' no reconocida" + + #: gcc.c:5291 + msgid "mismatched braces in specs" + msgstr "llaves sin coincidencia en especificación" + + #: gcc.c:5969 + #, c-format + msgid "unrecognized option `-%s'" + msgstr "opción `-%s' no reconocida" + + #: gcc.c:5975 + #, c-format + msgid "install: %s%s\n" + msgstr "instalar: %s%s\n" + + #: gcc.c:5976 + #, c-format + msgid "programs: %s\n" + msgstr "programas: %s\n" + + #: gcc.c:5977 + #, c-format + msgid "libraries: %s\n" + msgstr "bibliotecas: %s\n" + + #: gcc.c:6025 + msgid "" + "\n" + "For bug reporting instructions, please see:\n" + msgstr "" + "\n" + "Para instrucciones de reporte de `bugs', por favor vea:\n" + + #: gcc.c:6041 + #, c-format + msgid "Configured with: %s\n" + msgstr "Configurado con: %s\n" + + #: gcc.c:6055 + #, c-format + msgid "Thread model: %s\n" + msgstr "Modelo de hilos: %s\n" + + #: gcc.c:6066 + #, c-format + msgid "gcc version %s\n" + msgstr "gcc versión %s\n" + + #: gcc.c:6068 + #, c-format + msgid "gcc driver version %s executing gcc version %s\n" + msgstr "controlador gcc versión %s ejecutando gcc version %s\n" + + #: gcc.c:6076 + msgid "no input files" + msgstr "no hay ficheros de entrada" + + #: gcc.c:6114 + #, c-format + msgid "%s: %s compiler not installed on this system" + msgstr "%s: el compilador %s no está instalado en este sistema" + + #: gcc.c:6189 + #, c-format + msgid "%s: linker input file unused because linking not done" + msgstr "%s: no se usó el fichero de entrada del enlazador porque no se hizo enlace" + + #: gcc.c:6232 + #, c-format + msgid "language %s not recognized" + msgstr "no se reconoce el lenguaje %s" + + #: gcc.c:6335 + msgid "internal gcc abort" + msgstr "aborto interno de gcc" + + #: gcov.c:282 + msgid "Internal gcov abort.\n" + msgstr "Aborto interno de gcov.\n" + + #: gcov.c:295 + msgid "" + "Usage: gcov [OPTION]... SOURCEFILE\n" + "\n" + msgstr "" + "Modo de empleo: gcov [OPCIÓN]... FICHERO-FUENTE\n" + "\n" + + #: gcov.c:296 + msgid "" + "Print code coverage information.\n" + "\n" + msgstr "" + "Mostrar información de cobertura de código.\n" + "\n" + + #: gcov.c:297 + msgid " -h, --help Print this help, then exit\n" + msgstr " -h, --help Muestra esta información, y finaliza\n" + + #: gcov.c:298 + msgid " -v, --version Print version number, then exit\n" + msgstr " -v, --version Muestra el número de versión, y finaliza\n" + + #: gcov.c:299 + msgid " -b, --branch-probabilities Include branch probabilities in output\n" + msgstr " -b, --branch-probabilities Incluye las probabilidades de ramificación en la salida\n" + + #: gcov.c:300 + msgid "" + " -c, --branch-counts Given counts of branches taken\n" + " rather than percentages\n" + msgstr "" + " -c, --branch-counts Se muestran el número de ramificaciones\n" + " en lugar de los porcentajes\n" + + #: gcov.c:302 + msgid " -n, --no-output Do not create an output file\n" + msgstr " -n, --no-output No crea un fichero de salida\n" + + #: gcov.c:303 + msgid "" + " -l, --long-file-names Use long output file names for included\n" + " source files\n" + msgstr "" + " -l, --long-file-names Usar nombres largos de ficheros para los\n" + " ficheros fuentes incluidos\n" + + #: gcov.c:305 + msgid " -f, --function-summaries Output summaries for each function\n" + msgstr " -f, --function-summaries Mostrar sumarios para cada función\n" + + #: gcov.c:306 + msgid " -o, --object-directory OBJDIR Search for object files in OBJDIR\n" + msgstr " -o, --object-directory OBJDIR Buscar ficheros objeto en OBJDIR\n" + + #: gcov.c:307 + #, c-format + msgid "" + "\n" + "For bug reporting instructions, please see:\n" + "%s.\n" + msgstr "" + "\n" + "Para instrucciones de reporte de `bugs', por favor vea:\n" + "%s.\n" + + #: gcov.c:317 + #, c-format + msgid "gcov (GCC) %s\n" + msgstr "gcov (GCC) %s\n" + + #: gcov.c:318 + msgid "Copyright (C) 2001 Free Software Foundation, Inc.\n" + msgstr "Copyright (C) 2001 Free Software Foundation, Inc.\n" + + #: gcov.c:462 + #, c-format + msgid "Could not open basic block file %s.\n" + msgstr "No se puede abrir fichero de bloque básico %s.\n" + + #: gcov.c:471 + #, c-format + msgid "Could not open data file %s.\n" + msgstr "No se puede abrir fichero de datos %s.\n" + + #: gcov.c:472 + msgid "Assuming that all execution counts are zero.\n" + msgstr "Asumiendo que todas las cuentas de ejecución son cero.\n" + + #: gcov.c:478 + #, c-format + msgid "Could not open program flow graph file %s.\n" + msgstr "No se puede abrir el fichero del grafo de flujo del programa %s.\n" + + #: gcov.c:489 + #, c-format + msgid "No executable code associated with file %s.\n" + msgstr "No hay código ejecutable asociado al fichero %s.\n" + + #: gcov.c:789 + msgid ".da file contents exhausted too early\n" + msgstr "el contenido del fichero .da se agotó demasiado pronto\n" + + #: gcov.c:792 + msgid ".da file contents not exhausted\n" + msgstr "el contenido del fichero .da no se agotó\n" + + #: gcov.c:973 + #, c-format + msgid "%6.2f%% of %d source lines executed in function %s\n" + msgstr "%6.2f%% de %d líneas de código fuente ejecutadas en la función %s\n" + + #: gcov.c:977 + #, c-format + msgid "No executable source lines in function %s\n" + msgstr "No hay líneas de código fuente ejecutable en la función %s\n" + + #: gcov.c:984 + #, c-format + msgid "%6.2f%% of %d branches executed in function %s\n" + msgstr "%6.2f%% de %d ramificaciones ejecutadas en la función %s\n" + + #: gcov.c:988 + #, c-format + msgid "%6.2f%% of %d branches taken at least once in function %s\n" + msgstr "%6.2f%% de %d ramificaciones visitadas al menos una vez en la función %s\n" + + #: gcov.c:993 + #, c-format + msgid "No branches in function %s\n" + msgstr "No hay ramificaciones en la función %s\n" + + #: gcov.c:995 + #, c-format + msgid "%6.2f%% of %d calls executed in function %s\n" + msgstr "%6.2f%% de %d llamadas ejecutadas en la función %s\n" + + #: gcov.c:999 + #, c-format + msgid "No calls in function %s\n" + msgstr "No hay llamadas en la función %s\n" + + #: gcov.c:1126 + #, c-format + msgid "didn't use all bb entries of graph, function %s\n" + msgstr "no se usaron todas las entradas bb del grafo, función %s\n" + + #: gcov.c:1128 + #, c-format + msgid "block_num = %ld, num_blocks = %d\n" + msgstr "block_num = %ld, num_blocks = %d\n" + + #: gcov.c:1166 + #, c-format + msgid "ERROR: too many basic blocks in .bb file %s\n" + msgstr "ERROR: demasiados bloques básicos en el fichero .bb %s\n" + + #: gcov.c:1243 + #, c-format + msgid "%6.2f%% of %d source lines executed in file %s\n" + msgstr "%6.2f%% de %d líneas de código fuente ejecutadas en el fichero %s\n" + + #: gcov.c:1247 + #, c-format + msgid "No executable source lines in file %s\n" + msgstr "No hay líneas de código fuente ejecutable en el fichero %s\n" + + #: gcov.c:1254 + #, c-format + msgid "%6.2f%% of %d branches executed in file %s\n" + msgstr "%6.2f%% de %d ramificaciones ejecutadas en el fichero %s\n" + + #: gcov.c:1258 + #, c-format + msgid "%6.2f%% of %d branches taken at least once in file %s\n" + msgstr "%6.2f%% de %d ramificaciones visitadas al menos una vez en el fichero %s\n" + + #: gcov.c:1263 + #, c-format + msgid "No branches in file %s\n" + msgstr "No hay ramificaciones en el fichero %s\n" + + #: gcov.c:1265 + #, c-format + msgid "%6.2f%% of %d calls executed in file %s\n" + msgstr "%6.2f%% de %d llamadas ejecutadas en el fichero %s\n" + + #: gcov.c:1269 + #, c-format + msgid "No calls in file %s\n" + msgstr "No hay llamadas en el fichero %s\n" + + #: gcov.c:1281 + #, c-format + msgid "Could not open source file %s.\n" + msgstr "No se puede abrir el fichero de código fuente %s.\n" + + #: gcov.c:1331 + #, c-format + msgid "Could not open output file %s.\n" + msgstr "No se puede abrir el fichero de salida %s.\n" + + #: gcov.c:1339 + #, c-format + msgid "Creating %s.\n" + msgstr "Creando %s.\n" + + #: gcov.c:1387 + #, c-format + msgid "call %d never executed\n" + msgstr "la llamada %d nunca se ejecuta\n" + + #: gcov.c:1396 + #, c-format + msgid "call %d returns = %s\n" + msgstr "la llamada %d devuelve = %s\n" + + #: gcov.c:1406 + #, c-format + msgid "call %d returns = %s%%\n" + msgstr "la llamada %d devuelve = %s%%\n" + + #: gcov.c:1413 + #, c-format + msgid "branch %d never executed\n" + msgstr "la ramificacion %d nunca se ejecuta\n" + + #: gcov.c:1423 + #, c-format + msgid "branch %d taken = %s\n" + msgstr "ramificación %d tomada = %s\n" + + #: gcov.c:1433 + #, c-format + msgid "branch %d taken = %s%%\n" + msgstr "ramificación %d tomada = %s%%\n" + + #: gcov.c:1444 + #, c-format + msgid "Unexpected EOF while reading source file %s.\n" + msgstr "EOF inesperado mientras se leía el fichero de código fuente %s.\n" + + #: gcse.c:758 + #, c-format + msgid "GCSE disabled: %d > 1000 basic blocks and %d >= 20 edges/basic block" + msgstr "GCSE desactivado: %d > 1000 bloques básicos y %d >= 20 bloques borde/básicos" + + #: gcse.c:770 + #, c-format + msgid "GCSE disabled: %d basic blocks and %d registers" + msgstr "GCSE desactivado: %d bloques básicos y %d registros" + + #: graph.c:421 profile.c:950 profile.c:958 toplev.c:1835 toplev.c:4978 f/com.c:14258 java/jcf-parse.c:950 java/jcf-parse.c:1099 java/lex.c:1790 objc/objc-act.c:529 + #, c-format + msgid "can't open %s" + msgstr "no se puede abrir abrir %s" + + #: haifa-sched.c:190 + #, c-format + msgid "fix_sched_param: unknown param: %s" + msgstr "fix_sched_param: parámetro desconocido: %s" + + #: integrate.c:185 + msgid "function cannot be inline" + msgstr "la función no puede ser inline" + + #: integrate.c:190 + msgid "varargs function cannot be inline" + msgstr "la función varargs no puede ser inline" + + #: integrate.c:193 + msgid "function using alloca cannot be inline" + msgstr "la función que usa alloca no puede ser inline" + + #: integrate.c:196 + msgid "function using setjmp cannot be inline" + msgstr "la función que usa setjmp no puede ser inline" + + #: integrate.c:199 + msgid "function uses __builtin_eh_return" + msgstr "la función usa __builtin_eh_return" + + #: integrate.c:202 + msgid "function with nested functions cannot be inline" + msgstr "la función con funciones anidadas no puede ser inline" + + #: integrate.c:206 + msgid "function with label addresses used in initializers cannot inline" + msgstr "la función con direcciones de etiquetas usada en iniciadores no puede ser inline" + + #: integrate.c:213 integrate.c:257 + msgid "function too large to be inline" + msgstr "la función es demasiado grande para ser inline" + + #: integrate.c:223 + msgid "no prototype, and parameter address used; cannot be inline" + msgstr "no hay prototipo, y se usan direcciones de parámetro; no puede ser inline" + + #: integrate.c:230 integrate.c:275 + msgid "inline functions not supported for this return value type" + msgstr "no se da soport a funciones inline para este tipo de valor de devoluciòn" + + #: integrate.c:235 + msgid "function with varying-size return value cannot be inline" + msgstr "la función con valor de devolución de tamaño variable no puede ser inline" + + #: integrate.c:242 + msgid "function with varying-size parameter cannot be inline" + msgstr "la función con parámetro de tamaño variable no puede ser inline" + + #: integrate.c:245 + msgid "function with transparent unit parameter cannot be inline" + msgstr "la función con parámetro de unidad transparente no puede ser inline" + + #: integrate.c:264 + msgid "function with computed jump cannot inline" + msgstr "la función con salto calculado no puede ser inline" + + #: integrate.c:268 + msgid "function with nonlocal goto cannot be inline" + msgstr "la función con goto no local no puede ser inline" + + #: integrate.c:282 + msgid "function with target specific attribute(s) cannot be inlined" + msgstr "la función con atributo(s) específicos del objetivo no puede ser inline" + + #: line-map.c:198 + #, c-format + msgid "In file included from %s:%u" + msgstr "En el fichero incluído de %s:%u" + + #. Translators note: this message is used in conjunction + #. with "In file included from %s:%ld" and some other + #. tricks. We want something like this: + #. + #. | In file included from sys/select.h:123, + #. | from sys/types.h:234, + #. | from userfile.c:31: + #. | bits/select.h:45: + #. + #. with all the "from"s lined up. + #. The trailing comma is at the beginning of this message, + #. and the trailing colon is not translated. + #: line-map.c:216 + #, c-format + msgid "" + ",\n" + " from %s:%u" + msgstr "" + ",\n" + " de %s:%u" + + #. If we didn't find this parameter, issue an error message. + #: params.c:80 + #, c-format + msgid "invalid parameter `%s'" + msgstr "el parámetro `%s' es inválido" + + #: profile.c:429 + #, c-format + msgid "corrupted profile info: prob for %d-%d thought to be %d" + msgstr "información de análisis de perfil corrupta: la prueba para %d-%d debería ser %d" + + #: profile.c:975 + #, c-format + msgid "file %s not found, execution counts assumed to be zero" + msgstr "no se encuentra el fichero %s, se asume que la cuenta de ejecución es cero" + + #: profile.c:1022 + msgid ".da file contents exhausted too early" + msgstr "el contenido del fichero .da se agotó demasiado pronto" + + #: profile.c:1025 + msgid ".da file contents not exhausted" + msgstr "el contenido del fichero .da no se agotó" + + #: protoize.c:599 + #, c-format + msgid "%s: internal abort\n" + msgstr "%s: aborto interno\n" + + #: protoize.c:690 + #, c-format + msgid "%s: error writing file `%s': %s\n" + msgstr "%s: error al escribir al fichero `%s': %s\n" + + #: protoize.c:735 + #, c-format + msgid "%s: usage '%s [ -VqfnkN ] [ -i ] [ filename ... ]'\n" + msgstr "%s: modo de empleo '%s [ -VqfnkN ] [ -i ] [ nombre_fichero ... ]'\n" + + #: protoize.c:738 + #, c-format + msgid "%s: usage '%s [ -VqfnkNlgC ] [ -B ] [ filename ... ]'\n" + msgstr "%s: modo de empleo '%s [ -VqufnkNlgC ] [ -B ] [ nombre_fichero ... ]'\n" + + #: protoize.c:845 + #, c-format + msgid "%s: warning: no read access for file `%s'\n" + msgstr "%s: aviso: no hay acceso de lectura para el fichero `%s'\n" + + #: protoize.c:853 + #, c-format + msgid "%s: warning: no write access for file `%s'\n" + msgstr "%s: aviso: no hay acceso de escritura para el fichero `%s'\n" + + #: protoize.c:861 + #, c-format + msgid "%s: warning: no write access for dir containing `%s'\n" + msgstr "%s: aviso: no hay acceso de escritura para el directorio que contiene a `%s'\n" + + #. Catch cases like /.. where we try to backup to a + #. point above the absolute root of the logical file + #. system. + #: protoize.c:1279 + #, c-format + msgid "%s: invalid file name: %s\n" + msgstr "%s: nombre de fichero inválido: %s\n" + + #: protoize.c:1431 + #, c-format + msgid "%s: %s: can't get status: %s\n" + msgstr "%s: %s: no se puede obtener el estado: %s\n" + + #: protoize.c:1452 + #, c-format + msgid "" + "\n" + "%s: fatal error: aux info file corrupted at line %d\n" + msgstr "" + "\n" + "%s: error fatal: fichero de información auxiliar corrupto en la línea %d\n" + + #: protoize.c:1788 + #, c-format + msgid "%s:%d: declaration of function `%s' takes different forms\n" + msgstr "%s:%d: la declaración de la función `%s' toma formas diferentes\n" + + #: protoize.c:2046 + #, c-format + msgid "%s: compiling `%s'\n" + msgstr "%s: compilando `%s'\n" + + #: protoize.c:2069 + #, c-format + msgid "%s: wait: %s\n" + msgstr "%s: esperar: %s\n" + + #: protoize.c:2074 + #, c-format + msgid "%s: subprocess got fatal signal %d\n" + msgstr "%s: el subproceso recibió la señal fatal %d\n" + + #: protoize.c:2082 + #, c-format + msgid "%s: %s exited with status %d\n" + msgstr "%s: %s terminó con estado %d\n" + + #: protoize.c:2134 + #, c-format + msgid "%s: warning: missing SYSCALLS file `%s'\n" + msgstr "%s: aviso: falta el fichero SYSCALLS `%s'\n" + + #: protoize.c:2143 protoize.c:2172 + #, c-format + msgid "%s: can't read aux info file `%s': %s\n" + msgstr "%s: no se puede leer el fichero de información auxiliar `%s': %s\n" + + #: protoize.c:2188 protoize.c:2216 + #, c-format + msgid "%s: can't get status of aux info file `%s': %s\n" + msgstr "%s: no se puede obtener el estado del fichero de información auxiliar `%s': %s\n" + + #: protoize.c:2244 + #, c-format + msgid "%s: can't open aux info file `%s' for reading: %s\n" + msgstr "%s: no se puede abrir el fichero de información auxiliar `%s' para lectura: %s\n" + + #: protoize.c:2262 + #, c-format + msgid "%s: error reading aux info file `%s': %s\n" + msgstr "%s: error al leer el fichero de información auxiliar `%s': %s\n" + + #: protoize.c:2275 + #, c-format + msgid "%s: error closing aux info file `%s': %s\n" + msgstr "%s: error al cerrar el fichero de información auxiliar `%s': %s\n" + + #: protoize.c:2291 + #, c-format + msgid "%s: can't delete aux info file `%s': %s\n" + msgstr "%s: no se puede borrar el fichero de información auxiliar `%s': %s\n" + + #: protoize.c:2373 protoize.c:4375 + #, c-format + msgid "%s: can't delete file `%s': %s\n" + msgstr "%s: no se puede borrar el fichero `%s': %s\n" + + #: protoize.c:2452 + #, c-format + msgid "%s: warning: can't rename file `%s' to `%s': %s\n" + msgstr "%s: aviso: no se puede renombrar el fichero `%s' a `%s': %s\n" + + #: protoize.c:2577 + #, c-format + msgid "%s: conflicting extern definitions of '%s'\n" + msgstr "%s: definiciones extern de '%s' en conflicto\n" + + #: protoize.c:2581 + #, c-format + msgid "%s: declarations of '%s' will not be converted\n" + msgstr "%s: las declaraciones de '%s' no se convertirán\n" + + #: protoize.c:2583 + #, c-format + msgid "%s: conflict list for '%s' follows:\n" + msgstr "%s: listas de conflictos para '%s' a continuación:\n" + + #: protoize.c:2616 + #, c-format + msgid "%s: warning: using formals list from %s(%d) for function `%s'\n" + msgstr "%s: aviso: usando listas formales de %s(%d) para la función `%s'\n" + + #: protoize.c:2656 + #, c-format + msgid "%s: %d: `%s' used but missing from SYSCALLS\n" + msgstr "%s: %d: se usa `%s' pero falta en SYSCALLS\n" + + #: protoize.c:2662 + #, c-format + msgid "%s: %d: warning: no extern definition for `%s'\n" + msgstr "%s: %d: aviso: no hay definición extern para `%s'\n" + + #: protoize.c:2693 + #, c-format + msgid "%s: warning: no static definition for `%s' in file `%s'\n" + msgstr "%s: aviso: no hay definición static para `%s' en el fichero `%s'\n" + + #: protoize.c:2699 + #, c-format + msgid "%s: multiple static defs of `%s' in file `%s'\n" + msgstr "%s: definiciones static múltiples de `%s' en el fichero `%s'\n" + + #: protoize.c:2872 protoize.c:2875 + #, c-format + msgid "%s: %d: warning: source too confusing\n" + msgstr "%s: %d: aviso: código fuente demasiado confuso\n" + + #: protoize.c:3081 + #, c-format + msgid "%s: %d: warning: varargs function declaration not converted\n" + msgstr "%s: %d: aviso: no se convirtió la declaración de la función varargs\n" + + #: protoize.c:3096 + #, c-format + msgid "%s: declaration of function `%s' not converted\n" + msgstr "%s: no se convirtió la declaración de la función `%s'\n" + + #: protoize.c:3219 + #, c-format + msgid "%s: warning: too many parameter lists in declaration of `%s'\n" + msgstr "%s: aviso: demasiadas listas de parámetros en la declaración de `%s'\n" + + #: protoize.c:3240 + #, c-format + msgid "" + "\n" + "%s: warning: too few parameter lists in declaration of `%s'\n" + msgstr "" + "\n" + "%s: aviso: muy pocas listas de parámetros en la declaración de `%s'\n" + + #: protoize.c:3338 + #, c-format + msgid "%s: %d: warning: found `%s' but expected `%s'\n" + msgstr "%s: %d: aviso: se encontró `%s' pero se esperaba `%s'\n" + + #: protoize.c:3516 + #, c-format + msgid "%s: local declaration for function `%s' not inserted\n" + msgstr "%s: no se insertó la declaración local para la función `%s'\n" + + #: protoize.c:3543 + #, c-format + msgid "" + "\n" + "%s: %d: warning: can't add declaration of `%s' into macro call\n" + msgstr "" + "\n" + "%s: %d: aviso: no se puede agregar la declaración de `%s' en la llamada a macro\n" + + #: protoize.c:3617 + #, c-format + msgid "%s: global declarations for file `%s' not inserted\n" + msgstr "%s: no se insertaron las declaraciones globales para el fichero `%s'\n" + + #: protoize.c:3708 protoize.c:3738 + #, c-format + msgid "%s: definition of function `%s' not converted\n" + msgstr "%s: no se convirtió la definición de la función `%s'\n" + + #: protoize.c:3727 + #, c-format + msgid "%s: %d: warning: definition of %s not converted\n" + msgstr "%s: %d: aviso: no se convirtió la definición de %s\n" + + #: protoize.c:4057 + #, c-format + msgid "%s: found definition of `%s' at %s(%d)\n" + msgstr "%s: se encontró la definición de `%s' en %s(%d)\n" + + #. If we make it here, then we did not know about this + #. function definition. + #: protoize.c:4073 + #, c-format + msgid "%s: %d: warning: `%s' excluded by preprocessing\n" + msgstr "%s: %d: aviso: `%s' fue excluído por el preprocesamiento\n" + + #: protoize.c:4076 + #, c-format + msgid "%s: function definition not converted\n" + msgstr "%s: no se convirtió la definición de la función\n" + + #: protoize.c:4135 + #, c-format + msgid "%s: `%s' not converted\n" + msgstr "%s: no se convirtió `%s'\n" + + #: protoize.c:4143 + #, c-format + msgid "%s: would convert file `%s'\n" + msgstr "%s: se podría convertir el fichero `%s'\n" + + #: protoize.c:4146 + #, c-format + msgid "%s: converting file `%s'\n" + msgstr "%s: convirtiendo el fichero `%s'\n" + + #: protoize.c:4156 + #, c-format + msgid "%s: can't get status for file `%s': %s\n" + msgstr "%s: no se puede obtener el estado del fichero `%s': %s\n" + + #: protoize.c:4198 + #, c-format + msgid "%s: can't open file `%s' for reading: %s\n" + msgstr "%s: no se puede abrir el fichero `%s' para lectura: %s\n" + + #: protoize.c:4213 + #, c-format + msgid "" + "\n" + "%s: error reading input file `%s': %s\n" + msgstr "" + "\n" + "%s: error al leer el fichero de entrada `%s': %s\n" + + #: protoize.c:4247 + #, c-format + msgid "%s: can't create/open clean file `%s': %s\n" + msgstr "%s: no se puede crear/abrir el fichero limpio `%s': %s\n" + + #: protoize.c:4352 + #, c-format + msgid "%s: warning: file `%s' already saved in `%s'\n" + msgstr "%s: aviso: el fichero `%s' ya había sido guardado en `%s'\n" + + #: protoize.c:4360 + #, c-format + msgid "%s: can't link file `%s' to `%s': %s\n" + msgstr "%s: no se puede enlazar el fichero `%s' a `%s': %s\n" + + #: protoize.c:4390 + #, c-format + msgid "%s: can't create/open output file `%s': %s\n" + msgstr "%s: no se puede crear/abrir el fichero de salida `%s': %s\n" + + #: protoize.c:4423 + #, c-format + msgid "%s: can't change mode of file `%s': %s\n" + msgstr "%s: no se puede cambiar el modo del fichero `%s': %s\n" + + #: protoize.c:4598 + #, c-format + msgid "%s: cannot get working directory: %s\n" + msgstr "%s: no se puede obtener el directorio de trabajo: %s\n" + + #: protoize.c:4696 + #, c-format + msgid "%s: input file names must have .c suffixes: %s\n" + msgstr "%s: los nombres de fichero de entrada deben tener sufijos .c: %s\n" + + #: real.c:824 real.c:1001 + msgid "conversion from NaN to int" + msgstr "conversión de NaN a int" + + #: real.c:847 + msgid "conversion from NaN to unsigned int" + msgstr "conversión de NaNa a unsigned int" + + #: real.c:2730 + msgid "floating point overflow" + msgstr "desbordamiento de coma flotante" + + #: real.c:4395 real.c:6675 real.c:6756 + msgid "overflow on truncation to integer" + msgstr "desbordamiento en truncado a entero" + + #: real.c:4467 + msgid "overflow on truncation to unsigned integer" + msgstr "desbordamiento en el truncado a unsigned integer" + + #: real.c:5812 + #, c-format + msgid "%s: argument domain error" + msgstr "%s: error de dominio del argumento" + + #: real.c:5813 + #, c-format + msgid "%s: function singularity" + msgstr "%s: singularidad de la función" + + #: real.c:5814 + #, c-format + msgid "%s: overflow range error" + msgstr "%s: desbordamiento del error de rango" + + #: real.c:5815 + #, c-format + msgid "%s: underflow range error" + msgstr "%s: desbordamiento por debajo del error de rango" + + #: real.c:5816 + #, c-format + msgid "%s: total loss of precision" + msgstr "%s: pérdida total de precisión" + + #: real.c:5817 + #, c-format + msgid "%s: partial loss of precision" + msgstr "%s: pérdida parcial de precisión" + + #: real.c:5818 + #, c-format + msgid "%s: NaN - producing operation" + msgstr "%s: NaN - produciendo una operación" + + #: reg-stack.c:677 + #, c-format + msgid "output constraint %d must specify a single register" + msgstr "la restricción de salida %d debe especificar un solo registro" + + # ¿Cómo traducir 'clobber'? cfuga + #: reg-stack.c:687 + #, c-format + msgid "output constraint %d cannot be specified together with \"%s\" clobber" + msgstr "la restricción de salida %d no puede ser usada junto con el ataque \"%s\"" + + #: reg-stack.c:710 + msgid "output regs must be grouped at top of stack" + msgstr "los registros de salida deben ser agrupados en la parte superior de la pila" + + #: reg-stack.c:747 + msgid "implicitly popped regs must be grouped at top of stack" + msgstr "los registros extraídos implícitamente deben ser agrupados en la parte superior de la pila" + + #: reg-stack.c:766 + #, c-format + msgid "output operand %d must use `&' constraint" + msgstr "el operando de salida %d debe usar la restricción `&'" + + #: regclass.c:778 + #, c-format + msgid "can't use '%s' as a %s register" + msgstr "no se puede usar '%s' como un registro %s" + + #: regclass.c:793 config/ia64/ia64.c:3840 config/ia64/ia64.c:3847 + #, c-format + msgid "unknown register name: %s" + msgstr "nombre de registro desconocido: %s" + + #: regclass.c:804 + msgid "global register variable follows a function definition" + msgstr "la variable de registro global sigue a una definiciónd de función" + + #: regclass.c:808 + msgid "register used for two global register variables" + msgstr "nombre de registro usado por dos variables de registro globales" + + #: regclass.c:813 + msgid "call-clobbered register used for global register variable" + msgstr "registro de llamada alterada usado para una variable de registro global" + + #: regrename.c:1845 + #, c-format + msgid "validate_value_data: [%u] Bad next_regno for empty chain (%u)" + msgstr "validate_value_data: [%u] next_regno erróneo para la cadena vacía (%u)" + + #: regrename.c:1857 + #, c-format + msgid "validate_value_data: Loop in regno chain (%u)" + msgstr "validate_value_data: Ciclo en la cadena regno (%u)" + + #: regrename.c:1860 + #, c-format + msgid "validate_value_data: [%u] Bad oldest_regno (%u)" + msgstr "validate_value_data: [%u] oldest_regno erróneo (%u)" + + #: regrename.c:1872 + #, c-format + msgid "validate_value_data: [%u] Non-empty reg in chain (%s %u %i)" + msgstr "validate_value_data: [%u] Registro no vacío en la cadena (%s %u %i)" + + #: reload.c:1208 + msgid "cannot reload integer constant operand in `asm'" + msgstr "no se puede recargar operandos constantes enteros en `asm'" + + #: reload.c:1230 + msgid "impossible register constraint in `asm'" + msgstr "es imposible inicio la restricción de registros en `asm'" + + #: reload.c:3389 + msgid "`&' constraint used with no register class" + msgstr "se usó la restricción `&' sin una clase de registro" + + #: reload.c:3557 + msgid "unable to generate reloads for:" + msgstr "no se pueden generar recargas para:" + + #: reload.c:3558 reload.c:3772 + msgid "inconsistent operand constraints in an `asm'" + msgstr "restricciones de operandos inconsistentes en un `asm'" + + #: reload1.c:1247 + msgid "frame size too large for reliable stack checking" + msgstr "el tamaño del marco es demasiado grande para una revisión confiable de la pila" + + #: reload1.c:1250 + msgid "try reducing the number of local variables" + msgstr "intente reducir el número de variables locales" + + #: reload1.c:1902 + #, c-format + msgid "can't find a register in class `%s' while reloading `asm'" + msgstr "no se puede encontrar un registro en la clase `%s' mientras se recarga `asm'" + + #: reload1.c:1906 + #, c-format + msgid "unable to find a register to spill in class `%s'" + msgstr "no se puede encontrar un registro para vaciar la clase `%s'" + + #: reload1.c:1908 + msgid "this is the insn:" + msgstr "este es el insn:" + + #: reload1.c:3924 + msgid "`asm' operand requires impossible reload" + msgstr "el operando `asm' requiere una recarga imposible" + + #. It's the compiler's fault. + #: reload1.c:5040 + msgid "could not find a spill register" + msgstr "no se puede encontrar un registro de vaciado" + + #: reload1.c:5045 + msgid "`asm' operand constraint incompatible with operand size" + msgstr "la restricción del operando `asm' es incompatible con el tamaño del operando" + + #. It's the compiler's fault. + #: reload1.c:6639 + msgid "VOIDmode on an output" + msgstr "modoVOID en una salida" + + #: reload1.c:6640 + msgid "output operand is constant in `asm'" + msgstr "el operando de salida es constante en `asm'" + + #: rtl-error.c:139 + msgid "unrecognizable insn:" + msgstr "insn no reconocible:" + + #: rtl-error.c:141 + msgid "insn does not satisfy its constraints:" + msgstr "insn no satisface sus restricciones:" + + #: rtl.c:627 + #, c-format + msgid "RTL check: access of elt %d of `%s' with last elt %d in %s, at %s:%d" + msgstr "Revisión RTL: acceso de elt %d de `%s' con el último elt %d en %s, en %s:%d" + + #: rtl.c:642 + #, c-format + msgid "RTL check: expected elt %d type '%c', have '%c' (rtx %s) in %s, at %s:%d" + msgstr "Revisión RTL: se esperaba el tipo elt %d '%c', se tiene '%c' (rtx %s) en %s, en %s:%d" + + #: rtl.c:658 + #, c-format + msgid "RTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s) in %s, at %s:%d" + msgstr "Revisión RTL: se esperaba el tipo elt %d '%c' ó '%c', se tiene '%c' (rtx %s) en %s, en%s:%d" + + #: rtl.c:671 + #, c-format + msgid "RTL check: expected code `%s', have `%s' in %s, at %s:%d" + msgstr "Revisión RTL: se esperaba el código `%s', se tiene `%s' en %s, en %s:%d" + + #: rtl.c:685 + #, c-format + msgid "RTL check: expected code `%s' or `%s', have `%s' in %s, at %s:%d" + msgstr "Revisión RTL: se esperaba el código `%s' ó ``%s', se tiene `%s' en %s, en %s:%d" + + #: rtl.c:700 + #, c-format + msgid "RTL check: access of elt %d of vector with last elt %d in %s, at %s:%d" + msgstr "Revisión RTL: acceso de elt %d de vector con el último elt %d en %s, en %s:%d" + + #: stmt.c:927 + #, c-format + msgid "jump to `%s' invalidly jumps into binding contour" + msgstr "el salto a `%s' salta de forma inválida a un contorno de unión" + + #: stmt.c:1163 stmt.c:3755 + #, c-format + msgid "label `%s' used before containing binding contour" + msgstr "se usó antes la etiqueta `%s' que contenía un contorno de unión" + + #: stmt.c:1343 + msgid "output operand constraint lacks `='" + msgstr "la restricción de operando de salida carece de `='" + + #: stmt.c:1358 + #, c-format + msgid "output constraint `%c' for operand %d is not at the beginning" + msgstr "la restricción de salida `%c' para el operando %d no está al principio" + + #: stmt.c:1380 + msgid "operand constraint contains incorrectly positioned '+' or '='" + msgstr "la restriccion de operando contiene '+' ó '=' en una posición ilegal" + + #: stmt.c:1386 stmt.c:1486 + #, c-format + msgid "`%%' constraint used with last operand" + msgstr "se usó la restricción `%%' con el último operando" + + #: stmt.c:1405 + msgid "matching constraint not valid in output operand" + msgstr "la restricción coincidente no es válida en el operando de salida" + + #: stmt.c:1477 + #, c-format + msgid "input operand constraint contains `%c'" + msgstr "la restrcción de operando de entrada contiene `%c'" + + #: stmt.c:1517 + msgid "matching constraint references invalid operand number" + msgstr "la restricción de coincidencia hace referencia a un número de operando no válido" + + #: stmt.c:1549 + #, c-format + msgid "invalid punctuation `%c' in constraint" + msgstr "puntuación inválida `%c' en la restricción" + + #: stmt.c:1645 + #, c-format + msgid "unknown register name `%s' in `asm'" + msgstr "nombre de registro `%s' desconocido en `asm'" + + #: stmt.c:1689 + #, c-format + msgid "more than %d operands in `asm'" + msgstr "más de %d operandos en `asm'" + + #: stmt.c:1748 + #, c-format + msgid "output number %d not directly addressable" + msgstr "el número de salida %d no es directamente direccionable" + + #. ??? Leave this only until we have experience with what + #. happens in combine and elsewhere when constraints are + #. not satisfied. + #: stmt.c:1817 stmt.c:1846 + #, c-format + msgid "asm operand %d probably doesn't match constraints" + msgstr "el operando asm %d probablemente no coincide con las restricciones" + + #: stmt.c:1992 + msgid "too many alternatives in `asm'" + msgstr "demasiadas alternativas en `asm'" + + #: stmt.c:2004 + msgid "operand constraints for `asm' differ in number of alternatives" + msgstr "las restricciones de operandos para `asm' difieren en el número de alternativas" + + #: stmt.c:2057 + #, c-format + msgid "duplicate asm operand name '%s'" + msgstr "nombre `%s' de operando asm duplicado" + + #: stmt.c:2144 + msgid "missing close brace for named operand" + msgstr "falta la llave final para el operando nombrado" + + #: stmt.c:2172 + #, c-format + msgid "undefined named operand '%s'" + msgstr "operador '%s' nombrado sin definir" + + #: stmt.c:3692 + #, c-format + msgid "unused variable `%s'" + msgstr "variable `%s' sin uso" + + #: stmt.c:5167 + #, c-format + msgid "enumeration value `%s' not handled in switch" + msgstr "el valor de enumeración `%s' no se maneja en un switch" + + #: stmt.c:5193 stmt.c:5213 + #, c-format + msgid "case value `%ld' not in enumerated type" + msgstr "el valor de case `%ld' no es un tipo enumerado" + + #: stmt.c:5196 stmt.c:5216 + #, c-format + msgid "case value `%ld' not in enumerated type `%s'" + msgstr "el valor de case `%ld' no es un tipo enumerado `%s'" + + #: stor-layout.c:173 + msgid "type size can't be explicitly evaluated" + msgstr "el tamaño del tipo no puede ser evaluado explícitamente" + + #: stor-layout.c:175 + msgid "variable-size type declared outside of any function" + msgstr "tipo de tamaño variable declarado fuera de cualquier función" + + #: stor-layout.c:456 + #, c-format + msgid "size of `%s' is %d bytes" + msgstr "el tamaño de `%s' es de %d bytes" + + #: stor-layout.c:458 + #, c-format + msgid "size of `%s' is larger than %d bytes" + msgstr "el tamaño de `%s' es mayor que %d bytes" + + #: stor-layout.c:856 stor-layout.c:1157 + #, c-format + msgid "packed attribute causes inefficient alignment for `%s'" + msgstr "el atributo packed causa una alineación ineficiente para `%s'" + + #: stor-layout.c:858 stor-layout.c:1159 + #, c-format + msgid "packed attribute is unnecessary for `%s'" + msgstr "no es necesario el atributo packed para `%s'" + + #: stor-layout.c:873 + #, c-format + msgid "padding struct to align `%s'" + msgstr "estructura de relleno para alinear `%s'" + + #: stor-layout.c:1121 + msgid "padding struct size to alignment boundary" + msgstr "tamaño de la estructura de relleno para los límites de alineación" + + #: stor-layout.c:1164 + msgid "packed attribute causes inefficient alignment" + msgstr "el atributo packed causa uan alineación ineficiente" + + #: stor-layout.c:1166 + msgid "packed attribute is unnecessary" + msgstr "no es necesario el atributo packed" + + #: timevar.c:448 + msgid "" + "\n" + "Execution times (seconds)\n" + msgstr "" + "\n" + "Tiempos de ejecución (segundos)\n" + + #. Print total time. + #: timevar.c:498 + msgid " TOTAL :" + msgstr " TOTAL :" + + #: timevar.c:534 + #, c-format + msgid "time in %s: %ld.%06ld (%ld%%)\n" + msgstr "tiempo en %s: %ld.%06ld (%ld%%)\n" + + #: tlink.c:428 + #, c-format + msgid "collect: reading %s\n" + msgstr "collect: leyendo %s\n" + + #: tlink.c:532 + #, c-format + msgid "collect: recompiling %s\n" + msgstr "collect: recompilando %s\n" + + #: tlink.c:698 + #, c-format + msgid "collect: tweaking %s in %s\n" + msgstr "collect: alterando %s en %s\n" + + #: tlink.c:745 + msgid "collect: relinking\n" + msgstr "collect: reenlazando\n" + + #: tlink.c:754 + #, c-format + msgid "ld returned %d exit status" + msgstr "ld devolvió el estado de salida %d" + + #: toplev.c:895 + msgid "Generate debugging info in default format" + msgstr "Generar información de depuración en el formato por omisión" + + #: toplev.c:896 + msgid "Generate debugging info in default extended format" + msgstr "Generar información de depuración en el formato extendido por omisión" + + #: toplev.c:898 + msgid "Generate STABS format debug info" + msgstr "Generar información de depuración en el formato STABS" + + #: toplev.c:899 + msgid "Generate extended STABS format debug info" + msgstr "Generar información de depuración en el formato STABS extendido" + + #: toplev.c:902 + msgid "Generate DWARF-1 format debug info" + msgstr "Generar información de depuración en el formato DWARF-1" + + #: toplev.c:904 + msgid "Generate extended DWARF-1 format debug info" + msgstr "Generar información de depuración en el formato DWARF-1 extendido" + + #: toplev.c:907 + msgid "Generate DWARF-2 debug info" + msgstr "Generar información de depuración en el formato DWARF-2" + + #: toplev.c:910 + msgid "Generate XCOFF format debug info" + msgstr "Generar información de depuración en el formato XCOFF" + + #: toplev.c:911 + msgid "Generate extended XCOFF format debug info" + msgstr "Generar información de depuración en el formato XCOFF extendido" + + #: toplev.c:914 + msgid "Generate COFF format debug info" + msgstr "Generar información de depuración en el formato XCOFF" + + #: toplev.c:917 + msgid "Generate VMS format debug info" + msgstr "Generar información de depuración en el formato VMS" + + #: toplev.c:961 + msgid "Perform DWARF2 duplicate elimination" + msgstr "Realizar la eliminación de DWARF2 duplicados" + + #: toplev.c:963 + msgid "Do not store floats in registers" + msgstr "No guardar floats en registros" + + #: toplev.c:965 + msgid "Consider all mem refs through pointers as volatile" + msgstr "Considerar todas las referencias a memoria a través de apuntadores como volatile" + + #: toplev.c:967 + msgid "Consider all mem refs to global data to be volatile" + msgstr "Considerar todas las referencias a datos globales como volatile" + + #: toplev.c:969 + msgid "Consider all mem refs to static data to be volatile" + msgstr "Considerar todas las referencias a datos static como volatile" + + #: toplev.c:971 + msgid "Defer popping functions args from stack until later" + msgstr "Postergar la extracción de argumentos de funciones de la pila hasta más tarde" + + #: toplev.c:973 + msgid "When possible do not generate stack frames" + msgstr "Cuando sea posible no generar marcos de pila" + + #: toplev.c:975 + msgid "Optimize sibling and tail recursive calls" + msgstr "Optimizar las llamadas recursivas hermanadas y de extremo" + + #: toplev.c:977 + msgid "When running CSE, follow jumps to their targets" + msgstr "Cuando se esté ejecutando CSE, seguir a los saltos a sus objetivos" + + #: toplev.c:979 + msgid "When running CSE, follow conditional jumps" + msgstr "Cuando se esté ejecutando CSE, seguir a los saltos condicionales" + + #: toplev.c:981 + msgid "Perform a number of minor, expensive optimizations" + msgstr "Realizar un número de optimizaciones menores y costosas" + + #: toplev.c:983 + msgid "Perform jump threading optimizations" + msgstr "Realizar optimizaciones de hilado de saltos" + + #: toplev.c:985 + msgid "Perform strength reduction optimizations" + msgstr "Realizar optimizaciones de reducción de fuerza" + + #: toplev.c:987 + msgid "Perform loop unrolling when iteration count is known" + msgstr "Realizar el desenrollamiento del ciclo cuando se conoce la cuenta de iteración" + + #: toplev.c:989 + msgid "Perform loop unrolling for all loops" + msgstr "Realizar el desenrollamiento del ciclo para todos los ciclos" + + #: toplev.c:991 + msgid "Generate prefetch instructions, if available, for arrays in loops" + msgstr "Generar instrucciones de precargado, si están disponibles, para matrices en ciclos" + + #: toplev.c:993 + msgid "Force all loop invariant computations out of loops" + msgstr "Forzar que todas las computaciones invariantes del ciclo sean fuera del ciclo" + + #: toplev.c:995 + msgid "Strength reduce all loop general induction variables" + msgstr "Reducir la fuerza de todas las variables generales de inducción de ciclo" + + #: toplev.c:997 + msgid "Store strings in writable data section" + msgstr "Guardar las cadenas en la sección de datos modificables" + + #: toplev.c:999 + msgid "Enable machine specific peephole optimizations" + msgstr "Activar las optimizaciones de mirilla específicas de la máquina" + + #: toplev.c:1001 + msgid "Copy memory operands into registers before using" + msgstr "Copiar los operandos de memoria en registros antes de usarlos" + + #: toplev.c:1003 + msgid "Copy memory address constants into regs before using" + msgstr "Copiar las constantes de direcciones de memoria en registros antes de usarlos" + + #: toplev.c:1005 + msgid "Allow function addresses to be held in registers" + msgstr "Permitir que las direcciones de las funciones se conservern en registros" + + #: toplev.c:1007 + msgid "Integrate simple functions into their callers" + msgstr "Integrar las funciones simples en sus invocadores" + + #: toplev.c:1009 + msgid "Generate code for funcs even if they are fully inlined" + msgstr "Generar códio para las funciones aún si están completamente inline" + + #: toplev.c:1011 + msgid "Pay attention to the 'inline' keyword" + msgstr "Poner atención a la palabra clave 'inline'" + + #: toplev.c:1013 + msgid "Emit static const variables even if they are not used" + msgstr "Emitir variables static const aún si no se usan" + + #: toplev.c:1015 + msgid "Check for syntax errors, then stop" + msgstr "Buscar errores de sintaxis, y entonces detenerse" + + #: toplev.c:1017 + msgid "Mark data as shared rather than private" + msgstr "Marcar datos como compartidos en lugar de privados" + + #: toplev.c:1019 + msgid "Enable saving registers around function calls" + msgstr "Permitir guardar registros alrededor de llamadas de función" + + #: toplev.c:1021 + msgid "Return 'short' aggregates in memory, not registers" + msgstr "Devolver los agregados 'short' en memoria, no en registros" + + #: toplev.c:1023 + msgid "Return 'short' aggregates in registers" + msgstr "Devolver los agregados 'short' en registros" + + #: toplev.c:1025 + msgid "Attempt to fill delay slots of branch instructions" + msgstr "Intentar rellenar las ranuras de retraso de las instrucciones de ramificación" + + #: toplev.c:1027 + msgid "Perform the global common subexpression elimination" + msgstr "Realizar la eliminación de subexpresiones comunes globales" + + #: toplev.c:1029 + msgid "Perform enhanced load motion during global subexpression elimination" + msgstr "Realizar el movimiento de la carga mejorada durante la eliminación de subexpresiones globales" + + #: toplev.c:1031 + msgid "Perform store motion after global subexpression elimination" + msgstr "Realizar el movimiento de guardado después de la eliminación de subexpresiones globales" + + #: toplev.c:1033 + msgid "Run CSE pass after loop optimizations" + msgstr "Ejecutar un paso CSE después de las optimizaciones de ciclos" + + #: toplev.c:1035 + msgid "Run the loop optimizer twice" + msgstr "Ejecutar el optimizador de ciclos dos veces" + + #: toplev.c:1037 + msgid "Delete useless null pointer checks" + msgstr "Borrar las revisiones de apuntadores nulos sin uso" + + #: toplev.c:1039 + msgid "Pretend that host and target use the same FP format" + msgstr "Pretender que el anfitrión y el objetivo utilizan el mismo formato de FP" + + #: toplev.c:1041 + msgid "Reschedule instructions before register allocation" + msgstr "Recalendarizar las instrucciones antes del alojamiento de registros" + + #: toplev.c:1043 + msgid "Reschedule instructions after register allocation" + msgstr "Recalendarizar las instrucciones después del alojamiento de registros" + + #: toplev.c:1045 + msgid "Enable scheduling across basic blocks" + msgstr "Activar la calendarización entre bloques básicos" + + #: toplev.c:1047 + msgid "Allow speculative motion of non-loads" + msgstr "Permitir el movimiento especulativo de ninguna carga" + + #: toplev.c:1049 + msgid "Allow speculative motion of some loads" + msgstr "Permitir el movimiento especulativo de algunas cargas" + + #: toplev.c:1051 + msgid "Allow speculative motion of more loads" + msgstr "Permitir el movimiento especulativo de más cargas" + + #: toplev.c:1053 + msgid "Replace add,compare,branch with branch on count reg" + msgstr "Reemplazar add,compare,branch con branch en la cuenta de registros" + + #: toplev.c:1055 + msgid "Generate position independent code, if possible" + msgstr "Generar código independiente de posición, si es posible" + + #: toplev.c:1058 + msgid "Enable exception handling" + msgstr "Activar el manejo de excepciones" + + #: toplev.c:1060 + msgid "Just generate unwind tables for exception handling" + msgstr "Sólo generar tablas de desenredo para manejo de excepciones" + + #: toplev.c:1062 + msgid "Generate unwind tables exact at each instruction boundary" + msgstr "Generar tablas de desenredo exactamente en cada límite de instrucción" + + #: toplev.c:1064 + msgid "Support synchronous non-call exceptions" + msgstr "Soporte para excepciones síncronas no de llamadas" + + #: toplev.c:1066 + msgid "Insert arc based program profiling code" + msgstr "Insertar código de análisis de perfil basado en el programa arc" + + #: toplev.c:1068 + msgid "Create data files needed by gcov" + msgstr "Crear ficheros de datos necesarios para gcov" + + #: toplev.c:1070 + msgid "Use profiling information for branch probabilities" + msgstr "Usar la información de análisis de perfil para las probabilidades de ramificación" + + #: toplev.c:1072 + msgid "Reorder basic blocks to improve code placement" + msgstr "Reordenar los bloques básicos para mejorar la ubicación del código" + + #: toplev.c:1074 + msgid "Do the register renaming optimization pass" + msgstr "Hacer el paso de optimización de renombrado de registros" + + #: toplev.c:1076 + msgid "Do the register copy-propagation optimization pass" + msgstr "Hacer el paso de optimización de copia-propagación de registros" + + #: toplev.c:1078 + msgid "Do not put uninitialized globals in the common section" + msgstr "No poner globales sin iniciar en la sección común" + + #: toplev.c:1080 + msgid "Do not generate .size directives" + msgstr "No generar directivas .size" + + #: toplev.c:1082 + msgid "place each function into its own section" + msgstr "colocar cada función en su propia sección" + + #: toplev.c:1084 + msgid "place data items into their own section" + msgstr "colocar los elementos de datos en su propia sección" + + #: toplev.c:1086 + msgid "Add extra commentry to assembler output" + msgstr "Agregar comentarios extra a la salida de ensamblador" + + #: toplev.c:1088 + msgid "Output GNU ld formatted global initializers" + msgstr "Obtener iniciadores globales con formato para ld de GNU" + + #: toplev.c:1090 + msgid "Enables a register move optimization" + msgstr "Permite una optimización de movimiento de registros" + + #: toplev.c:1092 + msgid "Do the full regmove optimization pass" + msgstr "Hace el paso completo de optimización de movimiento de registros" + + #: toplev.c:1094 + msgid "Pack structure members together without holes" + msgstr "Empaqueta juntos a los miembros de la estructura sin agujeros" + + #: toplev.c:1096 + msgid "Insert stack checking code into the program" + msgstr "Inserta código de revisión de la pila en el programa" + + #: toplev.c:1098 + msgid "Specify that arguments may alias each other & globals" + msgstr "Especifica que los argumentos pueden ser alias de cada otro y de los globales" + + #: toplev.c:1100 + msgid "Assume arguments may alias globals but not each other" + msgstr "Asumir que los argumentos pueden ser alias de globales pero no de cada otro" + + #: toplev.c:1102 + msgid "Assume arguments do not alias each other or globals" + msgstr "Asumir que los argumentos no pueden ser alias de globales o de cada otro" + + #: toplev.c:1104 + msgid "Assume strict aliasing rules apply" + msgstr "Asumir que se aplican las reglas estrictas de alias" + + #: toplev.c:1106 + msgid "Align the start of loops" + msgstr "Alinear el inicio de los ciclos" + + #: toplev.c:1108 + msgid "Align labels which are only reached by jumping" + msgstr "Alinear las etiquetas que solamente se alcanzan saltando" + + #: toplev.c:1110 + msgid "Align all labels" + msgstr "Alinear todas las etiquetas" + + #: toplev.c:1112 + msgid "Align the start of functions" + msgstr "Alinear el inicio de las funciones" + + #: toplev.c:1114 + msgid "Attempt to merge identical constants accross compilation units" + msgstr "Intentar mezclar constantes idénticas a través de las unidades de compilación" + + #: toplev.c:1116 + msgid "Attempt to merge identical constants and constant variables" + msgstr "Intentar mezclar constantes idénticas y variables constantes" + + #: toplev.c:1118 + msgid "Suppress output of instruction numbers and line number notes in debugging dumps" + msgstr "Suprimir la salida de notas de números de instrucción y números de linea en los volcados de depuración" + + #: toplev.c:1120 + msgid "Instrument function entry/exit with profiling calls" + msgstr "Instrumentar funciones entrada/salida con llamadas de análisis de perfil" + + #: toplev.c:1122 + msgid "Enable SSA optimizations" + msgstr "Activar las optimizaciones SSA" + + #: toplev.c:1124 + msgid "Enable SSA conditional constant propagation" + msgstr "Activar la propagación de las constantes condicionales SSA" + + #: toplev.c:1126 + msgid "Enable aggressive SSA dead code elimination" + msgstr "Activar la eliminación agresiva de código muerto SSA" + + #: toplev.c:1128 + msgid "External symbols have a leading underscore" + msgstr "Los símbolos externos tienen un subrayado inicial" + + #: toplev.c:1130 + msgid "Process #ident directives" + msgstr "Procesar directivas #ident" + + #: toplev.c:1132 + msgid "Enables an rtl peephole pass run before sched2" + msgstr "Activa una ejecución de paso de mirilla rtl antes de sched2" + + #: toplev.c:1134 + msgid "Enables guessing of branch probabilities" + msgstr "Activar la predicción de probabilidades de ramificación" + + #: toplev.c:1136 + msgid "Set errno after built-in math functions" + msgstr "Establecer errno después de las funciones matemáticas internas" + + #: toplev.c:1138 + msgid "Floating-point operations can trap" + msgstr "Las operaciones de coma flotante pueden capturar" + + #: toplev.c:1140 + msgid "Allow math optimizations that may violate IEEE or ANSI standards" + msgstr "Permitir optimizaciones matemáticas que pueden violar los estándares IEEE ó ANSI" + + #: toplev.c:1142 + msgid "Compile pointers as triples: value, base & end" + msgstr "Compilar los apuntadores como triples: valor, base y fin" + + #: toplev.c:1144 + msgid "Generate code to check bounds before dereferencing pointers and arrays" + msgstr "Generar código para revisar los límites antes de deferencias apuntadores y matrices" + + #: toplev.c:1146 + msgid "Convert floating point constant to single precision constant" + msgstr "Convertir constantes de coma flotante a constantes de precisión simple" + + #: toplev.c:1148 + msgid "Report time taken by each compiler pass at end of run" + msgstr "Reportar el tiempo tomado por cada paso del compilador al final de la ejecución" + + #: toplev.c:1150 + msgid "Report on permanent memory allocation at end of run" + msgstr "Reportar el alojamiento en memoria permanente al final de la ejecución" + + #: toplev.c:1152 + msgid "Trap for signed overflow in addition / subtraction / multiplication" + msgstr "Atrapar desbordamientos signed en adición / sustracción / multiplicación" + + #: toplev.c:1169 + msgid "Compile just for ISO C89" + msgstr "Compilar sólo para ISO C89" + + #: toplev.c:1171 + msgid "Do not promote floats to double if using -traditional" + msgstr "No promover floats a double si se usa -traditional" + + #: toplev.c:1173 + msgid "Determine language standard" + msgstr "Determinar el estándard de lenguaje" + + #: toplev.c:1177 + msgid "Make bit-fields by unsigned by default" + msgstr "Hacer por omisión unsigned los campos de bit" + + #: toplev.c:1181 + msgid "Make 'char' be signed by default" + msgstr "Hacer que 'char' sea signed por omisión" + + #: toplev.c:1183 + msgid "Make 'char' be unsigned by default" + msgstr "Hacer que 'char' sea unsigned por omisión" + + #: toplev.c:1189 + msgid "Attempt to support traditional K&R style C" + msgstr "Intentar dar soporte a C estilo K&R tradicional" + + #: toplev.c:1195 + msgid "Do not recognize the 'asm' keyword" + msgstr "No reconocer la palabra clave 'asm'" + + #: toplev.c:1198 + msgid "Do not recognize any built in functions" + msgstr "No reconocer ninguna función interna" + + #: toplev.c:1200 + msgid "Assume normal C execution environment" + msgstr "Asumir el ambiente normal de ejecución C" + + #: toplev.c:1203 + msgid "Assume that standard libraries & main might not exist" + msgstr "Asumir que podrían no existir las bibliotecas estándard y main" + + #: toplev.c:1206 + msgid "Allow different types as args of ? operator" + msgstr "Permitir tipos diferentes como argumentos del operador ?" + + #: toplev.c:1209 + msgid "Allow the use of $ inside identifiers" + msgstr "Permitir el uso de $ dentro de los identificadores" + + #: toplev.c:1214 + msgid "Use the same size for double as for float" + msgstr "Usar el mismo tamaño para double que para float" + + #: toplev.c:1217 + msgid "Use the smallest fitting integer to hold enums" + msgstr "Usar el entero adecuado más pequeño para contener enumerados" + + #: toplev.c:1220 + msgid "Override the underlying type for wchar_t to `unsigned short'" + msgstr "Hacer de lado el tipo debajo de wchar_t por `unsigned short'" + + #: toplev.c:1224 + msgid "Enable most warning messages" + msgstr "Activar casi todos los mensajes de aviso" + + #: toplev.c:1226 + msgid "Warn about casting functions to incompatible types" + msgstr "Avisar por funciones de conversión a tipos incompatibles" + + #: toplev.c:1230 + msgid "Warn about functions which might be candidates for format attributes" + msgstr "Avisar por funciones que podrían ser candidatas para atributos de formato" + + #: toplev.c:1233 + msgid "Warn about casts which discard qualifiers" + msgstr "Avisar sobre conversiones que descartan calificadores" + + #: toplev.c:1236 + msgid "Warn about subscripts whose type is 'char'" + msgstr "Avisar sobre subíndices cuyo tipo es 'char'" + + #: toplev.c:1239 toplev.c:1242 + msgid "Warn if nested comments are detected" + msgstr "Avisar si se detectan comentarios anidados" + + #: toplev.c:1245 + msgid "Warn about possibly confusing type conversions" + msgstr "Avisar sobre la posibilidad de conversión de tipos confusas" + + #: toplev.c:1248 + msgid "Warn about printf/scanf/strftime/strfmon format anomalies" + msgstr "Avisar sobre anomalías de formato de printf/scanf/strftime/strfmon" + + #: toplev.c:1252 + msgid "Don't warn about strftime formats yielding 2 digit years" + msgstr "No avisar sobre formatos de strftime que producen dos dígitos para el año" + + #: toplev.c:1255 + msgid "Don't warn about too many arguments to format functions" + msgstr "No avisar sobre demasiados argumentos para las funciones de formato" + + #: toplev.c:1257 + msgid "Warn about non-string-literal format strings" + msgstr "Avisar sobre cadenas de formato que no son cadenas literales" + + #: toplev.c:1260 + msgid "Warn about possible security problems with format functions" + msgstr "Avisar sobre posibles problemas de seguridad con funciones de formato" + + #: toplev.c:1263 + msgid "Warn about implicit function declarations" + msgstr "Avisar sobre la declaración implícita de funciones" + + #: toplev.c:1267 + msgid "Warn when a declaration does not specify a type" + msgstr "Avisar cuando una declaración no especifique un tipo" + + #: toplev.c:1272 + msgid "Warn about the use of the #import directive" + msgstr "Avisar sobre el uso de la directiva #import" + + #: toplev.c:1276 + msgid "Do not warn about using 'long long' when -pedantic" + msgstr "No avisar sobre el uso de 'long long' cuando se use -pedantic" + + #: toplev.c:1278 + msgid "Warn about suspicious declarations of main" + msgstr "Avisar sobre declaraciones sospechosas de main" + + #: toplev.c:1281 + msgid "Warn about possibly missing braces around initializers" + msgstr "Avisar sobre posibles llaves faltantes alrededor de iniciadores" + + #: toplev.c:1284 + msgid "Warn about global funcs without previous declarations" + msgstr "Avisar sobre funciones globales sin declaraciones previas" + + #: toplev.c:1287 + msgid "Warn about global funcs without prototypes" + msgstr "Avisar sobre funciones globales sin prototipos" + + #: toplev.c:1290 + msgid "Warn about use of multicharacter literals" + msgstr "Avisar sobre el uso de literales multicaracteres" + + #: toplev.c:1293 + msgid "Warn about externs not at file scope level" + msgstr "Avisar sobre externs que no están en el nivel del alcance del fichero" + + #: toplev.c:1296 + msgid "Warn about possible missing parentheses" + msgstr "Avisar sobre posibles paréntesis faltantes" + + #: toplev.c:1299 + msgid "Warn about possible violations of sequence point rules" + msgstr "Avisar sobre posibles violaciones a las reglas de secuencia de punto" + + #: toplev.c:1302 + msgid "Warn about function pointer arithmetic" + msgstr "Avisar sobre la aritmética de apuntadores de funciones" + + #: toplev.c:1305 + msgid "Warn about multiple declarations of the same object" + msgstr "Avisar sobre declaraciones múltiples del mismo objeto" + + #: toplev.c:1308 + msgid "Warn about signed/unsigned comparisons" + msgstr "Avisar sobre comparaciones signed/unsigned" + + #: toplev.c:1311 + msgid "Warn about testing equality of floating point numbers" + msgstr "Avisar sobre la equidad de pruebas de números de coma flotante" + + #: toplev.c:1314 + msgid "Warn about unrecognized pragmas" + msgstr "Avisar sobre pragmas no reconocidos" + + #: toplev.c:1317 + msgid "Warn about non-prototyped function decls" + msgstr "Avisar sobre declaraciones de función sin prototipo" + + #: toplev.c:1320 + msgid "Warn about constructs whose meaning change in ISO C" + msgstr "Avisar sobre construcciones cuyo significado cambia en ISO C" + + #: toplev.c:1323 + msgid "Warn when trigraphs are encountered" + msgstr "Avisar si se encuentran trigrafos" + + #: toplev.c:1328 + msgid "Mark strings as 'const char *'" + msgstr "Marcar las cadenas como 'const char *'" + + #: toplev.c:1458 + msgid "Warn when a function is unused" + msgstr "Avisar cuando no se use una función" + + #: toplev.c:1460 + msgid "Warn when a label is unused" + msgstr "Avisar cuando no se use una etiqueta" + + #: toplev.c:1462 + msgid "Warn when a function parameter is unused" + msgstr "Avisar cuando no se use un parámetro de una función" + + #: toplev.c:1464 + msgid "Warn when a variable is unused" + msgstr "Avisar cuando no se use una variable" + + #: toplev.c:1466 + msgid "Warn when an expression value is unused" + msgstr "Avisar cuando no se use un valor de una expresión" + + #: toplev.c:1468 + msgid "Do not suppress warnings from system headers" + msgstr "No suprimir los avisos de los encabezados del sistema" + + #: toplev.c:1470 + msgid "Treat all warnings as errors" + msgstr "Tratar todos los avisos como errores" + + #: toplev.c:1472 + msgid "Warn when one local variable shadows another" + msgstr "Avisar cuando una variable local obscurece otra" + + #: toplev.c:1474 + msgid "Warn about enumerated switches missing a specific case" + msgstr "Avisar sobre switches enumerados que carezcan de un case específico" + + #: toplev.c:1476 + msgid "Warn about returning structures, unions or arrays" + msgstr "Avisar sobre la devolución de estructuras, unions o matrices" + + #: toplev.c:1478 + msgid "Warn about pointer casts which increase alignment" + msgstr "Avisar sobre conversión de apuntadores que incremente la alineación" + + #: toplev.c:1480 + msgid "Warn about code that will never be executed" + msgstr "Avisar sobre código que nunca se ejecutará" + + #: toplev.c:1482 + msgid "Warn about uninitialized automatic variables" + msgstr "Avisar sobre variables automáticas sin iniciar" + + #: toplev.c:1484 + msgid "Warn when an inlined function cannot be inlined" + msgstr "Avisar cuando una función inline no puede ser inline" + + #: toplev.c:1486 + msgid "Warn when the packed attribute has no effect on struct layout" + msgstr "Avisar cuando el atributo packed no tiene efecto en la disposición de un struct" + + #: toplev.c:1488 + msgid "Warn when padding is required to align struct members" + msgstr "Avisar cuando se requiere relleno para alinear a los miembros de un struct" + + #: toplev.c:1490 + msgid "Warn when an optimization pass is disabled" + msgstr "Avisar cuando se desactivó un paso de optimización" + + #: toplev.c:1492 + msgid "Warn about uses of __attribute__((deprecated)) declarations" + msgstr "Avisar sobre usos de declaraciones __attribute__((deprecated))" + + #: toplev.c:1494 + msgid "Warn about functions which might be candidates for attribute noreturn" + msgstr "Avisar sobre funciones que podrían ser candidatas para el atributo noreturn" + + #: toplev.c:1565 toplev.c:4379 tradcpp.c:792 + #, c-format + msgid "invalid option `%s'" + msgstr "opción `%s' inválida" + + #: toplev.c:1711 + #, c-format + msgid "internal error: %s" + msgstr "error interno: %s" + + #: toplev.c:2024 + #, c-format + msgid "`%s' used but never defined" + msgstr "se usa `%s' pero nunca se definió" + + #: toplev.c:2027 + #, c-format + msgid "`%s' declared `static' but never defined" + msgstr "`%s' declarado `static' pero nunca se definió" + + #: toplev.c:2049 + #, c-format + msgid "`%s' defined but not used" + msgstr "se definió `%s' pero no se usó" + + #: toplev.c:2280 + #, c-format + msgid "invalid register name `%s' for register variable" + msgstr "el nombre de registro `%s' no es válido para variable de registro" + + #: toplev.c:3279 + #, c-format + msgid "crossjump disabled: %d > 1000 basic blocks and %d >= 20 edges/basic block" + msgstr "salto cruzado desactivado: %d > 1000 bloques básicos y %d >= 20 bloques borde/básicos" + + #: toplev.c:3590 + msgid " -ffixed- Mark as being unavailable to the compiler\n" + msgstr " -ffixed- Marca el como no disponible para el compilador\n" + + #: toplev.c:3591 + msgid " -fcall-used- Mark as being corrupted by function calls\n" + msgstr " -fcall-used- Marca el como corrupto para llamadas de función\n" + + #: toplev.c:3592 + msgid " -fcall-saved- Mark as being preserved across functions\n" + msgstr " -fcall-saved- Marcar el como preservado entre funciones\n" + + #: toplev.c:3593 + msgid " -finline-limit= Limits the size of inlined functions to \n" + msgstr " -finline-limit= Limita el tamaño de funciones inline a \n" + + #: toplev.c:3594 + msgid " -fmessage-length= Limits diagnostics messages lengths to characters per line. 0 suppresses line-wrapping\n" + msgstr " -fmessage-length= Limita la longitud de los mensajes de diagnóstico a caracteres por línea. 0 suprime el corte de línea\n" + + #: toplev.c:3595 + msgid " -fdiagnostics-show-location=[once | every-line] Indicates how often source location information should be emitted, as prefix, at the beginning of diagnostics when line-wrapping\n" + msgstr " -fdiagnostics-show-location=[once | every-line] Indica que tan seguido se debe emitir la información de ubicación del código, como prefijo, al inicio de los diagnósticos cuando está activado el corte de línea\n" + + #: toplev.c:3606 + msgid " -O[number] Set optimization level to [number]\n" + msgstr " -O[número] Establecer el nivel de optimización a [número]\n" + + #: toplev.c:3607 + msgid " -Os Optimize for space rather than speed\n" + msgstr " -Os Optimizar para espacio en lugar de velocidad\n" + + #: toplev.c:3619 + msgid " -pedantic Issue warnings needed by strict compliance to ISO C\n" + msgstr " -pedantic Activar los avisos necesarios para cumplir estrictamente con ISO C\n" + + #: toplev.c:3620 + msgid " -pedantic-errors Like -pedantic except that errors are produced\n" + msgstr " -pedantic-errors Como -pedantic excepto que se producen errores\n" + + #: toplev.c:3621 + msgid " -w Suppress warnings\n" + msgstr " -w Suprimir avisos\n" + + #: toplev.c:3622 + msgid " -W Enable extra warnings\n" + msgstr " -W Activar avisos extra\n" + + #: toplev.c:3633 + msgid " -Wunused Enable unused warnings\n" + msgstr " -Wunused Activar avisos sin usar\n" + + #: toplev.c:3634 + msgid " -Wlarger-than- Warn if an object is larger than bytes\n" + msgstr " -Wlarger-than- Avisar si un objeto es más grande que bytes\n" + + #: toplev.c:3635 + msgid " -p Enable function profiling\n" + msgstr " -p Activar el análisis de perfil de funciones\n" + + #: toplev.c:3637 + msgid " -a Enable block profiling \n" + msgstr " -a Activar el análisis de perfil de bloques\n" + + #: toplev.c:3640 + msgid " -ax Enable jump profiling \n" + msgstr " -ax Activar el análisis de perfil de saltos\n" + + #: toplev.c:3642 + msgid " -o Place output into \n" + msgstr " -o Ubicar la salida en el \n" + + #: toplev.c:3643 + msgid "" + " -G Put global and static data smaller than \n" + " bytes into a special section (on some targets)\n" + msgstr "" + " -G Colocar los datos globales y estáticos más pequeños que \n" + " bytes en una sección especial (en algunos objetivos)\n" + + #: toplev.c:3654 + msgid " -aux-info Emit declaration info into \n" + msgstr " -aux-info Emitir la información de declaraciones en el \n" + + #: toplev.c:3655 + msgid " -quiet Do not display functions compiled or elapsed time\n" + msgstr " -quiet No mostrar las funciones compiladas o el tiempo transcurrido\n" + + #: toplev.c:3656 + msgid " -version Display the compiler's version\n" + msgstr " -version Muestra la versión del compilador\n" + + #: toplev.c:3657 + msgid " -d[letters] Enable dumps from specific passes of the compiler\n" + msgstr " -d[letras] Activa los volcados desde pasos específicos del compilador\n" + + #: toplev.c:3658 + msgid " -dumpbase Base name to be used for dumps from specific passes\n" + msgstr " -dumpbase Nombre base a usar para los volcados desde pasos específicos\n" + + #: toplev.c:3660 + msgid " -fsched-verbose= Set the verbosity level of the scheduler\n" + msgstr " -fsched-verbose= Establece el nivel detalle del calendarizador\n" + + #: toplev.c:3662 + msgid " --help Display this information\n" + msgstr " --help Muestra esta información\n" + + #: toplev.c:3677 + msgid "" + "\n" + "Language specific options:\n" + msgstr "" + "\n" + "Opciones específicas del lenguaje:\n" + + #: toplev.c:3689 + #, c-format + msgid " %-23.23s [undocumented]\n" + msgstr " %-23.23s [sin documentar]\n" + + #: toplev.c:3697 toplev.c:3711 + #, c-format + msgid "" + "\n" + "There are undocumented %s specific options as well.\n" + msgstr "" + "\n" + "Además hay opciones específicas de %s sin documentar.\n" + + #: toplev.c:3701 + #, c-format + msgid "" + "\n" + " Options for %s:\n" + msgstr "" + "\n" + " Opciones para %s:\n" + + #: toplev.c:3738 + msgid "" + "\n" + "Target specific options:\n" + msgstr "" + "\n" + "Opciones específicas del objetivo:\n" + + #: toplev.c:3752 toplev.c:3771 + #, c-format + msgid " -m%-23.23s [undocumented]\n" + msgstr " -m%-23.23s [sin documentar]\n" + + #: toplev.c:3780 + msgid "" + "\n" + "There are undocumented target specific options as well.\n" + msgstr "" + "\n" + "Además hay opciones específicas del objetivo sin documentar.\n" + + #: toplev.c:3782 + msgid " They exist, but they are not documented.\n" + msgstr " Existen, pero no están documentadas.\n" + + #: toplev.c:3835 + #, c-format + msgid "unrecognized gcc debugging option: %c" + msgstr "opción de depuración de gcc no reconocida: %c" + + #: toplev.c:3905 + #, c-format + msgid "unrecognized register name `%s'" + msgstr "no se reconoce el nombre de registro `%s'" + + #: toplev.c:3930 toplev.c:4808 + #, c-format + msgid "unrecognized option `%s'" + msgstr "opción `-%s' no reconocida" + + #: toplev.c:3974 + msgid "-Wid-clash-LEN is no longer supported" + msgstr "-Wid-clash-LEN ya no tiene soporte" + + #: toplev.c:4051 + #, c-format + msgid "use -gdwarf -g%d for DWARF v1, level %d" + msgstr "use -gdwarf -g%d para DWARF v1, nivel %d" + + #: toplev.c:4054 + msgid "use -gdwarf-2 for DWARF v2" + msgstr "use -dwarf-2 para DWARF v2" + + #: toplev.c:4059 + #, c-format + msgid "ignoring option `%s' due to invalid debug level specification" + msgstr "ignorando la opción `%s' debido a la especificación de un nivel de depuración inválido" + + #: toplev.c:4082 toplev.c:4806 + #, c-format + msgid "`%s': unknown or unsupported -g option" + msgstr "`%s': opción -g desconocida o sin soporte" + + #: toplev.c:4089 + #, c-format + msgid "`%s' ignored, conflicts with `-g%s'" + msgstr "`%s' ignorado, tiene conflicto con `-g%s'" + + #: toplev.c:4168 + msgid "-param option missing argument" + msgstr "falta el argumento para la opción -param" + + #: toplev.c:4177 + #, c-format + msgid "invalid --param option: %s" + msgstr "opción de --param inválida: %s" + + #: toplev.c:4189 + #, c-format + msgid "invalid parameter value `%s'" + msgstr "valor de parámetro `%s' inválido" + + #: toplev.c:4396 + #, c-format + msgid "" + "%s%s%s version %s (%s)\n" + "%s\tcompiled by GNU C version %s.\n" + "%s%s%s version %s (%s) compiled by CC.\n" + msgstr "" + "%s%s%s versión %s (%s)\n" + "%s\t compilado por GNU C versión %s.\n" + "%s%s%s versión %s (%s) compilado por CC.\n" + + #: toplev.c:4452 + msgid "options passed: " + msgstr "opciones pasadas: " + + #: toplev.c:4481 + msgid "options enabled: " + msgstr "opciones activadas: " + + #: toplev.c:4540 java/jcf-write.c:3373 + #, c-format + msgid "can't open %s for writing" + msgstr "no se puede abrir %s para escritura" + + #: toplev.c:4798 + #, c-format + msgid "ignoring command line option '%s'" + msgstr "ignorando la opción de línea de comando '%s'" + + #: toplev.c:4801 + #, c-format + msgid "(it is valid for %s but not the selected language)" + msgstr "(es válida para %s pero no para el lenguaje seleccionado)" + + #: toplev.c:4835 + msgid "-Wuninitialized is not supported without -O" + msgstr "-Wuninitialized no tiene soporte sin -O" + + #: toplev.c:4894 + msgid "instruction scheduling not supported on this target machine" + msgstr "no se da soporte a la calendarización de instrucciones en este objetivo" + + #: toplev.c:4898 + msgid "this target machine does not have delayed branches" + msgstr "esta máquina objetivo no tiene ramificaciones retardadas" + + #: toplev.c:4907 + msgid "profiling does not work without a frame pointer" + msgstr "el análisis de perfil no funciona sin un apuntador de marco" + + #: toplev.c:4922 + #, c-format + msgid "-f%sleading-underscore not supported on this target machine" + msgstr "no se da soporte a -f%sleading-underscore en este objetivo" + + #: toplev.c:4985 + msgid "-ffunction-sections not supported for this target" + msgstr "no se da soporte a -ffunction-sections para este objetivo" + + #: toplev.c:4990 + msgid "-fdata-sections not supported for this target" + msgstr "no se da soporte a -fdata-sections para este objetivo" + + #: toplev.c:4997 + msgid "-ffunction-sections disabled; it makes profiling impossible" + msgstr "-ffunction-sections desactivado; hace imposible el análisis de perfil" + + #: toplev.c:5004 + msgid "-fprefetch-loop-arrays not supported for this target" + msgstr "no se da soporte a -fprefetch-loop-arrays para este objetivo" + + #: toplev.c:5010 + msgid "-fprefetch-loop-arrays not supported for this target (try -march switches)" + msgstr "no se da soporte a -fprefetch-loop-arrays para este objetivo (intente los interruptores -march)" + + #: toplev.c:5019 + msgid "-fprefetch-loop-arrays is not supported with -Os" + msgstr "-fprefetch-loop-arrays no tiene soporte con -Os" + + #: toplev.c:5025 + msgid "-ffunction-sections may affect debugging on some targets" + msgstr "-ffunction-sections podría afectar la depuración en algunos objetivos" + + #: toplev.c:5146 + #, c-format + msgid "error writing to %s" + msgstr "error al escribir a %s" + + #: toplev.c:5148 java/jcf-parse.c:969 java/jcf-write.c:3380 + #, c-format + msgid "error closing %s" + msgstr "error al cerrar %s" + + #. It's a float since it contains a point. + #: tradcif.y:231 + msgid "floating point numbers not allowed in #if expressions" + msgstr "no se permiten números de coma flotante en expresiones #if" + + #: tradcif.y:277 + msgid "invalid number in #if expression" + msgstr "número inválido en la expresión #if" + + #: tradcif.y:357 + msgid "invalid character constant in #if" + msgstr "constante de carácter inválida en #if" + + #: tradcif.y:394 + msgid "double quoted strings not allowed in #if expressions" + msgstr "no se permite cadenas con comillas dobles en expresiones #if" + + #: tradcif.y:407 + msgid "invalid token in expression" + msgstr "elemento inválido en la expresión" + + #: tradcif.y:498 + msgid "octal character constant does not fit in a byte" + msgstr "la constante de carácter octal no cabe en un byte" + + #: tradcif.y:519 + msgid "hex character constant does not fit in a byte" + msgstr "la constante de carácter hexadecimal no cabe en un byte" + + #: tradcif.y:550 + msgid "empty #if expression" + msgstr "expresión #if vacía" + + #: tradcif.y:564 + msgid "Junk after end of expression." + msgstr "Basura después del final de la expresión." + + #: tradcpp.c:145 + msgid "macro or #include recursion too deep" + msgstr "recursión de macro o #include demasiado profunda" + + #: tradcpp.c:562 + #, c-format + msgid "usage: %s [switches] input output" + msgstr "modo de empleo: %s [interruptores] entrada salida" + + #: tradcpp.c:578 + msgid "-traditional is not supported in C++" + msgstr "-traditional no tiene soporte en C++" + + #: tradcpp.c:580 + msgid "-traditional and -ansi are mutually exclusive" + msgstr "-traditional y -ansi son mutuamente exclusivos" + + #: tradcpp.c:594 + msgid "filename missing after -i option" + msgstr "falta el nombre del fichero después de la opción -i" + + #: tradcpp.c:612 + msgid "filename missing after -o option" + msgstr "falta el nombre del fichero después de la opción -o" + + #: tradcpp.c:675 + #, c-format + msgid "target missing after %s option" + msgstr "falta el objetivo después de la opción %s" + + #: tradcpp.c:689 + #, c-format + msgid "filename missing after %s option" + msgstr "falta el nombre del fichero después de la opción %s" + + #: tradcpp.c:714 + #, c-format + msgid "macro name missing after -%c option" + msgstr "falta el nombre de macro después de la opción -%c" + + #: tradcpp.c:734 + msgid "-pedantic and -traditional are mutually exclusive" + msgstr "-pedantic y -traditional son mutuamente exclusivos" + + #: tradcpp.c:739 + msgid "-trigraphs and -traditional are mutually exclusive" + msgstr "-trigraphs y -traditional son mutuamente exclusivos" + + #: tradcpp.c:765 + msgid "directory name missing after -I option" + msgstr "falta el nombre de directorio después de la opción -I" + + #: tradcpp.c:1445 tradcpp.c:3937 + msgid "`/*' within comment" + msgstr "`/*' dentro de un comentario" + + #: tradcpp.c:1821 + #, c-format + msgid "unterminated #%s conditional" + msgstr "condicional #%s sin terminar" + + #: tradcpp.c:2180 + msgid "not in any file?!" + msgstr "¡¿No está en ningún fichero?!" + + #: tradcpp.c:2286 + msgid "`defined' must be followed by ident or (ident)" + msgstr "`defined' debe ser seguido por ident o (ident)" + + #: tradcpp.c:2290 + msgid "cccp error: invalid special hash type" + msgstr "error de cccp: tipo de dispersión especial inválido" + + #: tradcpp.c:2388 tradcpp.c:2458 + msgid "#include expects \"fname\" or " + msgstr "#include espera \"fname\" ó " + + #: tradcpp.c:2543 + #, c-format + msgid "no include path in which to find %.*s" + msgstr "no hay ruta de inclusión en la cual se encuentre %.*s" + + #: tradcpp.c:2721 + msgid "invalid macro name" + msgstr "nombre de macro inválido" + + #: tradcpp.c:2729 + #, c-format + msgid "invalid macro name `%s'" + msgstr "nombre de macro `%s' inválido" + + #: tradcpp.c:2734 + msgid "\"defined\" cannot be used as a macro name" + msgstr "\"defined\" no se puede usar como un nombre de macro" + + #: tradcpp.c:2761 + msgid "parameter name starts with a digit in #define" + msgstr "el nombre de un parámetro empieza con un dígito en un #define" + + #: tradcpp.c:2771 + msgid "badly punctuated parameter list in #define" + msgstr "lista de parámetros con puntuación errónea en un #define" + + #: tradcpp.c:2779 + msgid "unterminated parameter list in #define" + msgstr "lista de parámetros en #define sin terminar" + + #: tradcpp.c:2827 + #, c-format + msgid "\"%.*s\" redefined" + msgstr "\"%.*s\" redefinido" + + #: tradcpp.c:3084 + msgid "# operator should be followed by a macro argument name" + msgstr "el operador # debe continuar con un nombre de argumento de macro" + + #: tradcpp.c:3131 tradcpp.c:3157 tradcpp.c:3171 tradcpp.c:3178 tradcpp.c:3203 + msgid "invalid format #line command" + msgstr "formato inválido de la orden #line" + + #: tradcpp.c:3229 + msgid "undefining `defined'" + msgstr "borrando la definición de `defined'" + + #: tradcpp.c:3233 + #, c-format + msgid "undefining `%s'" + msgstr "borrando la definición de `%s'" + + #: tradcpp.c:3289 + msgid "extra text at end of directive" + msgstr "texto extra al final de la directiva" + + #: tradcpp.c:3396 + #, c-format + msgid "#error%.*s" + msgstr "#error%.*s" + + #: tradcpp.c:3406 + #, c-format + msgid "#warning%.*s" + msgstr "#warning%.*s" + + #: tradcpp.c:3562 + msgid "#elif not within a conditional" + msgstr "#elif no está dentro de un condicional" + + #: tradcpp.c:3819 + #, c-format + msgid "#%s not within a conditional" + msgstr "#%s no está dentro de un condicional" + + #: tradcpp.c:3827 + msgid "#else or #elif after #else" + msgstr "#else o #elif después de #else" + + #: tradcpp.c:3867 + msgid "#else not within a conditional" + msgstr "#else no está dentro de un condicional" + + #: tradcpp.c:3898 + msgid "unbalanced #endif" + msgstr "#endif desbalanceado" + + #: tradcpp.c:3992 + msgid "unterminated string or character constant" + msgstr "cadena sin terminar o constante de carácter" + + #: tradcpp.c:4150 + #, c-format + msgid "arguments given to macro `%s'" + msgstr "argumentos dados a la macro `%s'" + + #: tradcpp.c:4156 + #, c-format + msgid "no args to macro `%s'" + msgstr "no hay argumentos para la macro `%s'" + + #: tradcpp.c:4158 + #, c-format + msgid "only 1 arg to macro `%s'" + msgstr "sólo 1 argumento para la macro `%s'" + + #: tradcpp.c:4160 + #, c-format + msgid "only %d args to macro `%s'" + msgstr "sólo %d argumentos para la macro `%s'" + + #: tradcpp.c:4162 + #, c-format + msgid "too many (%d) args to macro `%s'" + msgstr "demasiados argumentos (%d) para la macro `%s'" + + #: tradcpp.c:4759 + #, c-format + msgid "" + "internal error in %s, at tradcpp.c:%d\n" + "Please submit a full bug report.\n" + "See %s for instructions." + msgstr "" + "error interno en %s, en tradcpp.c:%d\n" + "Por favor envíe un reporte completo de error.\n" + "Vea %s para más instrucciones." + + #: tree-dump.c:848 + #, c-format + msgid "could not open dump file `%s'" + msgstr "no se puede abrir el fichero de volcado `%s'" + + #: tree-dump.c:924 + #, c-format + msgid "ignoring unknown option `%.*s' in `-f%s'" + msgstr "ignorando la opción desconocida `%.*s' al final de `-f%s'" + + #: tree.c:3888 + msgid "arrays of functions are not meaningful" + msgstr "las matrices de funciones no tienen significado" + + #: tree.c:3945 + msgid "function return type cannot be function" + msgstr "el tipo de devolución de función no puede ser función" + + #: tree.c:4699 + msgid "invalid initializer for bit string" + msgstr "iniciador inválido para cadena de bits" + + #: tree.c:4758 + #, c-format + msgid "tree check: expected %s, have %s in %s, at %s:%d" + msgstr "revisión de árbol: se esperaba %s, se tiene %s en %s, en %s:%d" + + #: tree.c:4775 + #, c-format + msgid "tree check: expected class '%c', have '%c' (%s) in %s, at %s:%d" + msgstr "revisión de árbol: es esperaba la clase '%c', se tiene '%c' (%s) en %s, en %s:%d" + + #: varasm.c:454 config/i386/winnt.c:522 + #, c-format + msgid "%s causes a section type conflict" + msgstr "%s causa un conflicto de tipo de sección" + + #: varasm.c:879 + #, c-format + msgid "register name not specified for `%s'" + msgstr "no se especifica nombre de registro para `%s'" + + #: varasm.c:881 + #, c-format + msgid "invalid register name for `%s'" + msgstr "nombre de registro inválido para `%s'" + + #: varasm.c:884 + #, c-format + msgid "data type of `%s' isn't suitable for a register" + msgstr "el tipo de datos de `%s' no es adecuado para un registro" + + #: varasm.c:887 + #, c-format + msgid "register specified for `%s' isn't suitable for data type" + msgstr "el registro especificado por `%s' no es adecuado para el tipo de datos" + + #: varasm.c:896 + msgid "global register variable has initial value" + msgstr "la variable de registro global tiene valor inicial" + + #: varasm.c:899 + msgid "volatile register variables don't work as you might wish" + msgstr "las variables de registro volatile no funcionan como usted quisiera" + + #: varasm.c:932 + #, c-format + msgid "register name given for non-register variable `%s'" + msgstr "nombre de registro dado para una variable `%s' que no es registro" + + #: varasm.c:1570 + #, c-format + msgid "alignment of `%s' is greater than maximum object file alignment. Using %d" + msgstr "la alineación de `%s' es mayor que la alineación máxima del fichero objeto. Se usa %d" + + #: varasm.c:1621 + #, c-format + msgid "requested alignment for %s is greater than implemented alignment of %d" + msgstr "la alineación solicitada para %s es mayor que la alineación implementada de %d" + + #: varasm.c:4570 + msgid "initializer for integer value is too complicated" + msgstr "el iniciador para un valor entero es demasiado complicado" + + #: varasm.c:4575 + msgid "initializer for floating value is not a floating constant" + msgstr "el iniciador para un valor de coma flotante no es una constante de coma flotante" + + #: varasm.c:4625 + msgid "unknown set constructor type" + msgstr "conjunto de tipo constructor desconocido" + + #: varasm.c:4839 + #, c-format + msgid "invalid initial value for member `%s'" + msgstr "valor inicial inválido para el miembro `%s'" + + #: varasm.c:5000 + #, c-format + msgid "weak declaration of `%s' must be public" + msgstr "la declaración débil de `%s' debe ser public" + + #: varasm.c:5002 + #, c-format + msgid "weak declaration of `%s' must precede definition" + msgstr "la declaración débil de `%s' debe preceder a la definición" + + #: varasm.c:5009 + #, c-format + msgid "weak declaration of `%s' not supported" + msgstr "la declaración débil de `%s' no tiene soporte" + + #: varasm.c:5036 varasm.c:5107 + msgid "only weak aliases are supported in this configuration" + msgstr "sólo los aliases débiles tienen soporte en esta configuración" + + #: varasm.c:5116 + msgid "alias definitions not supported in this configuration; ignored" + msgstr "las definiciones de alias no tienen soporte en esta configuración; ignoradas" + + #: varray.c:88 + #, c-format + msgid "virtual array %s[%lu]: element %lu out of bounds in %s, at %s:%d" + msgstr "matriz virtual %s[%lu]: el elemento %lu está fuera del límite en %s, en %s:%d" + + #. Print an error message for unrecognized stab codes. + #: xcoffout.c:174 + #, c-format + msgid "no sclass for %s stab (0x%x)\n" + msgstr "no hay sclass para el stab %s (0x%x)\n" + + #: params.def:46 + msgid "The maximum number of instructions in a function that is eligible for inlining" + msgstr "El número máximo de instrucciones en una función para ser elegible para inlining" + + #: params.def:57 + msgid "The maximum number of instructions to consider to fill a delay slot" + msgstr "El número máximo de instrucciones para considerar el llenado de una ranura de retraso" + + #: params.def:68 + msgid "The maximum number of instructions to consider to find accurate live register information" + msgstr "El número máximo de instruccions para considerar la búsqueda de información de registros en vivo exacta" + + #: params.def:78 + msgid "The maximum length of scheduling's pending operations list" + msgstr "La longitud máxima de la lista de operaciones pendientes del calendarizador" + + #: params.def:85 + msgid "The maximum amount of memory to be allocated by GCSE" + msgstr "La cantidad máxima de memoria a ser asignada por GCSE" + + #: params.def:90 + msgid "The maximum number of passes to make when doing GCSE" + msgstr "El número máximo de pasos a realizar cuando se hace GCSE" + + #: config/darwin-c.c:76 + msgid "too many #pragma options align=reset" + msgstr "demasiadas opciones #pragma align=reset" + + #: config/darwin-c.c:98 config/darwin-c.c:101 config/darwin-c.c:103 config/darwin-c.c:105 + msgid "malformed '#pragma options', ignoring" + msgstr "'#pragma options' malformado, ignorando" + + #: config/darwin-c.c:108 + msgid "junk at end of '#pragma options'" + msgstr "basura al final de '#pragma options'" + + #: config/darwin-c.c:118 + msgid "malformed '#pragma options align={mac68k|power|reset}', ignoring" + msgstr "'#pragma options align={mac68k|power|reset}' malformado, ignorando" + + #: config/darwin-c.c:131 + msgid "missing '(' after '#pragma unused', ignoring" + msgstr "falta un '(' después de '#pragma unused', ignorando" + + #: config/darwin-c.c:149 + msgid "missing ')' after '#pragma unused', ignoring" + msgstr "falta un '(' después de '#pragma unused', ignorando" + + #: config/darwin-c.c:152 + msgid "junk at end of '#pragma unused'" + msgstr "basura al final de '#pragma unused'" + + #: config/nextstep.c:68 + msgid "optimization turned on" + msgstr "nivel de optimización encendido" + + #: config/nextstep.c:74 + msgid "optimization turned off" + msgstr "nivel de optimización apagado" + + #: config/nextstep.c:83 + msgid "optimization level restored" + msgstr "nivel de optimización restaurado" + + #: config/lynx-ng.h:97 config/lynx.h:120 config/rs6000/lynx.h:85 + msgid "-msystem-v and -p are incompatible" + msgstr "-msystem-v y -p son incompatibles" + + #: config/lynx-ng.h:99 config/lynx.h:122 config/rs6000/lynx.h:87 + msgid "-msystem-v and -mthreads are incompatible" + msgstr "-msystem-v y -mthreads son incompatibles" + + #. Run-time compilation parameters selecting different hardware subsets. + #: config/1750a/1750a.h:39 + msgid "Use VAX-C alignment" + msgstr "Usar alineación VAX-C" + + #: config/a29k/a29k.c:1028 config/m88k/m88k.c:2967 + #, c-format + msgid "invalid %%Q value" + msgstr "valor %%Q inválido" + + #: config/a29k/a29k.c:1034 config/alpha/alpha.c:5402 config/m88k/m88k.c:3063 + #, c-format + msgid "invalid %%C value" + msgstr "valor %%C inválido" + + #: config/a29k/a29k.c:1040 config/alpha/alpha.c:5247 config/rs6000/rs6000.c:6454 + #, c-format + msgid "invalid %%N value" + msgstr "valor %%N inválido" + + #: config/a29k/a29k.c:1046 config/alpha/alpha.c:5318 config/rs6000/rs6000.c:6416 + #, c-format + msgid "invalid %%M value" + msgstr "valor %%M inválido" + + #: config/a29k/a29k.c:1052 config/alpha/alpha.c:5310 config/rs6000/rs6000.c:6381 + #, c-format + msgid "invalid %%m value" + msgstr "valor %%m inválido" + + #: config/a29k/a29k.c:1154 config/alpha/alpha.c:5271 config/romp/romp.c:690 + #, c-format + msgid "invalid %%L value" + msgstr "valor %%L inválido" + + #: config/a29k/a29k.c:1159 config/rs6000/rs6000.c:6462 + #, c-format + msgid "invalid %%O value" + msgstr "valor %%O inválido" + + #: config/a29k/a29k.c:1165 config/alpha/alpha.c:5255 config/rs6000/rs6000.c:6482 + #, c-format + msgid "invalid %%P value" + msgstr "valor %%P inválido" + + #: config/a29k/a29k.c:1175 + #, c-format + msgid "invalid %%V value" + msgstr "valor %%V inválido" + + #: config/a29k/a29k.h:101 + msgid "Generate code assuming DW bit is set" + msgstr "Generar código asumiendo que el bit DW está activado" + + #: config/a29k/a29k.h:102 + msgid "Generate code assuming DW bit is not set" + msgstr "Generar código asumiendo que el bit DW no está activado" + + #: config/a29k/a29k.h:103 + msgid "Generate code using byte writes" + msgstr "Generar código usando escritura de byte" + + #: config/a29k/a29k.h:104 + msgid "Do not generate byte writes" + msgstr "No generar escritura de byte" + + #: config/a29k/a29k.h:105 + msgid "Use small memory model" + msgstr "Usar modelo de memoria small" + + #: config/a29k/a29k.h:106 + msgid "Use normal memory model" + msgstr "Usar modelo de memoria normal" + + #: config/a29k/a29k.h:107 + msgid "Use large memory model" + msgstr "Usar modelo de memoria large" + + #: config/a29k/a29k.h:108 + msgid "Generate 29050 code" + msgstr "Generar código 29050" + + #: config/a29k/a29k.h:109 + msgid "Generate 29000 code" + msgstr "Generar código 29000" + + #: config/a29k/a29k.h:110 + msgid "Use kernel global registers" + msgstr "Usar registros globales del núcleo" + + #: config/a29k/a29k.h:111 + msgid "Use user global registers" + msgstr "Usar registros globales del usuario" + + #: config/a29k/a29k.h:112 + msgid "Emit stack checking code" + msgstr "Emitir código de revisión de la pila" + + #: config/a29k/a29k.h:113 + msgid "Do not emit stack checking code" + msgstr "No emitir código de revisión de la pila" + + #: config/a29k/a29k.h:114 + msgid "Work around storem hardware bug" + msgstr "Evitar el bug de hardware storem" + + #: config/a29k/a29k.h:115 + msgid "Do not work around storem hardware bug" + msgstr "No evitar el bug de hardware storem" + + #: config/a29k/a29k.h:116 + msgid "Store locals in argument registers" + msgstr "Almacenar los locales en los registros de argumento" + + #: config/a29k/a29k.h:117 + msgid "Do not store locals in arg registers" + msgstr "No almacenar los locales en los registros de argumento" + + #: config/a29k/a29k.h:118 config/i960/i960.h:283 config/mips/mips.h:408 + msgid "Use software floating point" + msgstr "Usar coma flotante de software" + + #: config/a29k/a29k.h:119 + msgid "Do not generate multm instructions" + msgstr "No generar instrucciones multm" + + #: config/alpha/alpha.c:271 + #, c-format + msgid "-f%s ignored for Unicos/Mk (not supported)" + msgstr "se ignora -f%s para Unicos/Mk (sin soporte)" + + #: config/alpha/alpha.c:295 + msgid "-mieee not supported on Unicos/Mk" + msgstr "-mieee no tiene soporte en Unicos/Mk" + + #: config/alpha/alpha.c:306 + msgid "-mieee-with-inexact not supported on Unicos/Mk" + msgstr "-mieee-with-inexact no tiene soporte en Unicos/Mk" + + #: config/alpha/alpha.c:323 + #, c-format + msgid "bad value `%s' for -mtrap-precision switch" + msgstr "valor erróneo `%s' para el interruptor -mtrap-precision" + + #: config/alpha/alpha.c:337 + #, c-format + msgid "bad value `%s' for -mfp-rounding-mode switch" + msgstr "valor erróneo `%s' para el interruptor -mfp-rounding-mode" + + #: config/alpha/alpha.c:352 + #, c-format + msgid "bad value `%s' for -mfp-trap-mode switch" + msgstr "valor erróneo `%s' para el interruptor -mfp-trap-mode" + + #: config/alpha/alpha.c:371 config/alpha/alpha.c:383 + #, c-format + msgid "bad value `%s' for -mcpu switch" + msgstr "valor erróneo `%s' para el interruptor -mcpu" + + #: config/alpha/alpha.c:390 + msgid "trap mode not supported on Unicos/Mk" + msgstr "el modo de captura no tiene soporte en Unicos/Mk" + + #: config/alpha/alpha.c:397 + msgid "fp software completion requires -mtrap-precision=i" + msgstr "el completado por software de fp requiere una opción -mtrap-precision=i" + + #: config/alpha/alpha.c:413 + msgid "rounding mode not supported for VAX floats" + msgstr "el modo de redondeo no tiene soporte para floats de VAX" + + #: config/alpha/alpha.c:418 + msgid "trap mode not supported for VAX floats" + msgstr "el modo de captura no tiene soporte para valores de coma flotante VAX" + + #: config/alpha/alpha.c:447 + #, c-format + msgid "L%d cache latency unknown for %s" + msgstr "latencia de caché L%d desconocida para %s" + + #: config/alpha/alpha.c:462 + #, c-format + msgid "bad value `%s' for -mmemory-latency" + msgstr "valor erróneo `%s' para -mmemory-latency" + + #: config/alpha/alpha.c:5211 config/m88k/m88k.c:2955 config/romp/romp.c:746 config/romp/romp.c:753 + #, c-format + msgid "invalid %%H value" + msgstr "valor %%H inválido" + + #: config/alpha/alpha.c:5221 + #, c-format + msgid "invalid %%J value" + msgstr "valor %%J inválido" + + #: config/alpha/alpha.c:5231 config/ia64/ia64.c:3509 config/m88k/m88k.c:3100 + #, c-format + msgid "invalid %%r value" + msgstr "valor %%r inválido" + + #: config/alpha/alpha.c:5241 config/rs6000/rs6000.c:6528 + #, c-format + msgid "invalid %%R value" + msgstr "valor %%R inválido" + + #: config/alpha/alpha.c:5263 config/m88k/m88k.c:2961 config/romp/romp.c:732 config/romp/romp.c:739 + #, c-format + msgid "invalid %%h value" + msgstr "valor %%h inválido" + + #: config/alpha/alpha.c:5353 + #, c-format + msgid "invalid %%U value" + msgstr "valor %%U inválido" + + #: config/alpha/alpha.c:5365 config/alpha/alpha.c:5379 config/romp/romp.c:698 config/rs6000/rs6000.c:6536 + #, c-format + msgid "invalid %%s value" + msgstr "valor %%s inválido" + + #: config/alpha/alpha.c:5439 config/m88k/m88k.c:3084 config/rs6000/rs6000.c:6243 + #, c-format + msgid "invalid %%E value" + msgstr "valor %%E inválido" + + #: config/alpha/alpha.c:5460 config/romp/romp.c:973 config/rs6000/rs6000.c:6844 + #, c-format + msgid "invalid %%xn code" + msgstr "código %%xn inválido" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/alpha/alpha.h:214 config/i386/i386.h:291 config/i386/i386.h:293 config/i386/i386.h:295 config/ns32k/ns32k.h:103 config/rs6000/rs6000.h:329 config/s390/s390.h:56 config/sparc/sparc.h:529 config/sparc/sparc.h:534 + msgid "Use hardware fp" + msgstr "Usar fp de hardware" + + #: config/alpha/alpha.h:215 config/i386/i386.h:292 config/i386/i386.h:294 config/rs6000/rs6000.h:331 config/sparc/sparc.h:531 config/sparc/sparc.h:536 + msgid "Do not use hardware fp" + msgstr "No usar fp de hardware" + + #: config/alpha/alpha.h:216 + msgid "Use fp registers" + msgstr "Usar registros fp" + + #: config/alpha/alpha.h:218 + msgid "Do not use fp registers" + msgstr "No usar registros fp" + + #: config/alpha/alpha.h:219 + msgid "Do not assume GAS" + msgstr "No asumir GAS" + + #: config/alpha/alpha.h:220 + msgid "Assume GAS" + msgstr "Asumir GAS" + + #: config/alpha/alpha.h:222 + msgid "Request IEEE-conformant math library routines (OSF/1)" + msgstr "Requerir rutinas de biblioteca matemática que cumplan con IEEE (OSF/1)" + + #: config/alpha/alpha.h:224 + msgid "Emit IEEE-conformant code, without inexact exceptions" + msgstr "Emitir código que cumpla con IEEE, sin excepciones inexactas" + + #: config/alpha/alpha.h:226 + msgid "Emit IEEE-conformant code, with inexact exceptions" + msgstr "Emitir código que cumpla con IEEE, con excepciones inexactas" + + #: config/alpha/alpha.h:228 + msgid "Do not emit complex integer constants to read-only memory" + msgstr "No emitir constantes enteras complejas a memoria de sólo lectura" + + #: config/alpha/alpha.h:229 + msgid "Use VAX fp" + msgstr "Usar fp VAX" + + #: config/alpha/alpha.h:230 + msgid "Do not use VAX fp" + msgstr "No usar fp VAX" + + #: config/alpha/alpha.h:231 + msgid "Emit code for the byte/word ISA extension" + msgstr "Emitir código para la extensión ISA byte/word" + + #: config/alpha/alpha.h:234 + msgid "Emit code for the motion video ISA extension" + msgstr "Emitir código para la extensión ISA de video en movimiento" + + #: config/alpha/alpha.h:237 + msgid "Emit code for the fp move and sqrt ISA extension" + msgstr "Emitir código para la extensión ISA de move y sqrt de fp" + + #: config/alpha/alpha.h:239 + msgid "Emit code for the counting ISA extension" + msgstr "Emitir código para la extensión ISA de conteo" + + #: config/alpha/alpha.h:242 + msgid "Emit code using explicit relocation directives" + msgstr "Emitir código usando directivas explícitas de reubicación" + + #: config/alpha/alpha.h:245 + msgid "Emit 16-bit relocations to the small data areas" + msgstr "Emitir reubicaciones de 16-bit a las áreas de datos small" + + #: config/alpha/alpha.h:247 + msgid "Emit 32-bit relocations to the small data areas" + msgstr "Emitir reubicaciones de 32-bit a las áreas de datos small" + + #. For -mcpu= + #. For -mtune= + #. For -mfp-rounding-mode=[n|m|c|d] + #. For -mfp-trap-mode=[n|u|su|sui] + #. For -mtrap-precision=[p|f|i] + #. For -mmemory-latency= + #: config/alpha/alpha.h:275 + msgid "Use features of and schedule given CPU" + msgstr "Usar las características de y el calendarizador del CPU dado" + + #: config/alpha/alpha.h:277 + msgid "Schedule given CPU" + msgstr "Calendarizador para el CPU dado" + + #: config/alpha/alpha.h:279 + msgid "Control the generated fp rounding mode" + msgstr "Controlar el modo de redondeo generado de fp" + + #: config/alpha/alpha.h:281 + msgid "Control the IEEE trap mode" + msgstr "Controlar el modo de captura IEEE" + + #: config/alpha/alpha.h:283 + msgid "Control the precision given to fp exceptions" + msgstr "Controlar la precisión dada a las excepciones de fp" + + #: config/alpha/alpha.h:285 + msgid "Tune expected memory latency" + msgstr "Ajustar la latencia esperada de memoria" + + #: config/arc/arc.c:132 + #, c-format + msgid "bad value (%s) for -mcpu switch" + msgstr "valor erróneo (%s) para el interruptor -mcpu" + + #: config/arc/arc.c:359 + #, c-format + msgid "argument of `%s' attribute is not a string constant" + msgstr "el argumento del atributo `%s' no es una cadena constante" + + #: config/arc/arc.c:366 + #, c-format + msgid "argument of `%s' attribute is not \"ilink1\" or \"ilink2\"" + msgstr "el argumento del atributo `%s' no es \"ilink1\" o \"ilink2\"" + + #: config/arc/arc.c:1709 config/m32r/m32r.c:2278 + #, c-format + msgid "invalid operand to %%R code" + msgstr "operando inválido para el código %%R" + + #: config/arc/arc.c:1741 config/m32r/m32r.c:2301 + #, c-format + msgid "invalid operand to %%H/%%L code" + msgstr "operando inválido para el código %%H%%L" + + #: config/arc/arc.c:1765 config/m32r/m32r.c:2378 + #, c-format + msgid "invalid operand to %%U code" + msgstr "operando inválido para el código %%U" + + #: config/arc/arc.c:1776 + #, c-format + msgid "invalid operand to %%V code" + msgstr "operando inválido para el código %%V" + + #. Unknown flag. + #: config/arc/arc.c:1783 config/m32r/m32r.c:2417 config/sparc/sparc.c:6145 + msgid "invalid operand output code" + msgstr "operando inválido para el código de salida" + + #: config/arm/arm.c:436 + #, c-format + msgid "switch -mcpu=%s conflicts with -march= switch" + msgstr "el interruptor -mcpu=%s genera conflictos con el switch -march=" + + #: config/arm/arm.c:446 config/rs6000/rs6000.c:444 config/sparc/sparc.c:381 + #, c-format + msgid "bad value (%s) for %s switch" + msgstr "valor erróneo (%s) para el interruptor %s" + + #: config/arm/arm.c:582 + msgid "target CPU does not support APCS-32" + msgstr "el CPU objetivo no tiene soporte para APCS-32" + + #: config/arm/arm.c:587 + msgid "target CPU does not support APCS-26" + msgstr "el CPU objetivo no tiene soporte para APCS-26" + + #: config/arm/arm.c:593 + msgid "target CPU does not support interworking" + msgstr "el CPU objetivo no tiene soporte para trabajo interno" + + #: config/arm/arm.c:599 + msgid "target CPU does not support THUMB instructions" + msgstr "el CPU objetivo no tiene soporte para las instrucciones THUMB" + + #: config/arm/arm.c:613 + msgid "enabling backtrace support is only meaningful when compiling for the Thumb" + msgstr "habilitar el soporte de rastreo hacia atrás sólo tiene significado cuando se compila para el Thumb" + + # ¿callee? cfuga + #: config/arm/arm.c:616 + msgid "enabling callee interworking support is only meaningful when compiling for the Thumb" + msgstr "habilitar el soporte de trabajo interno de llamadas sólo tiene significado cuando se compila para el Thumb" + + #: config/arm/arm.c:619 + msgid "enabling caller interworking support is only meaningful when compiling for the Thumb" + msgstr "habilitar el soporte de trabajo interno de llamado sólo tiene significado cuando se compila para el Thumb" + + #: config/arm/arm.c:625 + msgid "interworking forces APCS-32 to be used" + msgstr "el trabajo interno forza el uso de APCS-32" + + #: config/arm/arm.c:631 + msgid "-mapcs-stack-check incompatible with -mno-apcs-frame" + msgstr "-mapcs-stack-check es incompatible con -mno-apcs-frame" + + #: config/arm/arm.c:639 + msgid "-fpic and -mapcs-reent are incompatible" + msgstr "-fpic y -mapcs-reent son incompatibles" + + #: config/arm/arm.c:642 + msgid "APCS reentrant code not supported. Ignored" + msgstr "no se soporta el código reentrante APCS. Ignorado" + + #: config/arm/arm.c:650 + msgid "-g with -mno-apcs-frame may not give sensible debugging" + msgstr "-g con -mno-apcs-frame no permite una depuración sensible" + + #: config/arm/arm.c:658 + msgid "passing floating point arguments in fp regs not yet supported" + msgstr "aún no se soporta pasar argumentos de coma flotante en registros fp" + + #: config/arm/arm.c:687 + #, c-format + msgid "invalid floating point emulation option: -mfpe-%s" + msgstr "opción de emulación de coma flotante inválida: -mfpe-%s" + + #: config/arm/arm.c:711 + msgid "structure size boundary can only be set to 8 or 32" + msgstr "el límite del tamaño de la estructura sólo puede establecerse a 8 o 32" + + #: config/arm/arm.c:719 + msgid "-mpic-register= is useless without -fpic" + msgstr "-mpic-register= es inútil sin -fpic" + + #: config/arm/arm.c:726 + #, c-format + msgid "unable to use '%s' for PIC register" + msgstr "no se puede usar '%s' para registro PIC" + + #: config/arm/arm.c:1970 config/arm/arm.c:1993 config/avr/avr.c:4703 config/c4x/c4x.c:4650 config/h8300/h8300.c:3045 config/i386/i386.c:1260 config/i386/i386.c:1289 config/m68hc11/m68hc11.c:1220 config/mcore/mcore.c:3505 config/ns32k/ns32k.c:1044 config/rs6000/rs6000.c:10760 config/sh/sh.c:5583 config/sh/sh.c:5603 config/sh/sh.c:5642 config/stormy16/stormy16.c:2010 config/v850/v850.c:2047 + #, c-format + msgid "`%s' attribute only applies to functions" + msgstr "el atributo `%s' aplica solamente a funciones" + + #: config/arm/arm.c:9288 + msgid "unable to compute real location of stacked parameter" + msgstr "no se puede calcular la ubicación real del parámetro apilado" + + #: config/arm/arm.c:9968 + msgid "no low registers available for popping high registers" + msgstr "no hay registros inferiores disponibles para almacenar registros superiores" + + #: config/arm/arm.c:10160 + msgid "interrupt Service Routines cannot be coded in Thumb mode" + msgstr "no se pueden codificar las Rutinas de Servicios de Interrupción en el modo Thumb" + + #: config/arm/pe.c:168 config/i386/winnt.c:290 config/mcore/mcore.c:3365 + #, c-format + msgid "initialized variable `%s' is marked dllimport" + msgstr "la variable iniciada `%s' está marcada como dllimport" + + #: config/arm/pe.c:177 config/i386/winnt.c:299 + #, c-format + msgid "static variable `%s' is marked dllimport" + msgstr "la variable estática `%s' está marcada como dllimport" + + #: config/arm/arm.h:422 + msgid "Generate APCS conformant stack frames" + msgstr "Generar marcos de pila que cumplan con APCS" + + #: config/arm/arm.h:425 + msgid "Store function names in object code" + msgstr "Almacenar nombres de función en el código objeto" + + #: config/arm/arm.h:429 + msgid "Use the 32-bit version of the APCS" + msgstr "Usar la versión 32-bit del APCS" + + #: config/arm/arm.h:431 + msgid "Use the 26-bit version of the APCS" + msgstr "Usar la versión 26-bit del APCS" + + #: config/arm/arm.h:435 + msgid "Pass FP arguments in FP registers" + msgstr "Pasar los argumentos FP en los registros FP" + + #: config/arm/arm.h:438 + msgid "Generate re-entrant, PIC code" + msgstr "Generar código PIC reentrante" + + #: config/arm/arm.h:441 + msgid "The MMU will trap on unaligned accesses" + msgstr "La MMU atrapará los accesos no alineados" + + #: config/arm/arm.h:448 + msgid "Use library calls to perform FP operations" + msgstr "Usar llamadas a bibliotecas para realizar las operaciones de FP" + + #: config/arm/arm.h:450 config/i960/i960.h:281 + msgid "Use hardware floating point instructions" + msgstr "Usar instrucciones de hardware para coma flotante" + + #: config/arm/arm.h:452 + msgid "Assume target CPU is configured as big endian" + msgstr "Asumir que el CPU destino está configurado como big endian" + + #: config/arm/arm.h:454 + msgid "Assume target CPU is configured as little endian" + msgstr "Asumir que el CPU destino está configurado como little endian" + + #: config/arm/arm.h:456 + msgid "Assume big endian bytes, little endian words" + msgstr "Asumir bytes big endian, words little endian" + + #: config/arm/arm.h:458 + msgid "Support calls between Thumb and ARM instruction sets" + msgstr "Soporte a llamadas entre los conjuntos de instrucciones Thumb y ARM" + + #: config/arm/arm.h:461 + msgid "Generate a call to abort if a noreturn function returns" + msgstr "Generar una llamada a abortar si una funcion noreturn devuelve" + + #: config/arm/arm.h:464 + msgid "Do not move instructions into a function's prologue" + msgstr "No mover las instrucciones al prólogo de una función" + + #: config/arm/arm.h:467 + msgid "Do not load the PIC register in function prologues" + msgstr "No cargar el registro PIC en los prólogos de función" + + #: config/arm/arm.h:470 + msgid "Generate call insns as indirect calls, if necessary" + msgstr "Generar las llamadas insns como llamadas indirectas, si es necesario" + + #: config/arm/arm.h:473 + msgid "Compile for the Thumb not the ARM" + msgstr "Compilar para el Thumb on para el ARM" + + #: config/arm/arm.h:477 + msgid "Thumb: Generate (non-leaf) stack frames even if not needed" + msgstr "Thumb: Generar marcos de pila (no-hojas) aún si no es necesario" + + #: config/arm/arm.h:480 + msgid "Thumb: Generate (leaf) stack frames even if not needed" + msgstr "Thumb: Generar marcos de pila (hojas) aún si no es necesario" + + #: config/arm/arm.h:483 + msgid "Thumb: Assume non-static functions may be called from ARM code" + msgstr "Thumb: Asumir que las funciones no static pueden ser llamadas desde código ARM" + + #: config/arm/arm.h:487 + msgid "Thumb: Assume function pointers may go to non-Thumb aware code" + msgstr "Thumb: Asumir que los apuntadores de función pueden ir a código no informado sobre Thumb" + + #: config/arm/arm.h:497 + msgid "Specify the name of the target CPU" + msgstr "Especificar el nombre del CPU destino" + + #: config/arm/arm.h:499 + msgid "Specify the name of the target architecture" + msgstr "Especificar el nombre de la arquitectura destino" + + #: config/arm/arm.h:503 + msgid "Specify the version of the floating point emulator" + msgstr "Especificar la versión del emulador de coma flotante" + + #: config/arm/arm.h:505 + msgid "Specify the minimum bit alignment of structures" + msgstr "Especificar la alineación mínima de bit de las estructuras" + + #: config/arm/arm.h:507 + msgid "Specify the register to be used for PIC addressing" + msgstr "Especificar el registro a usar para el direccionamiento PIC" + + #: config/arm/pe.h:65 + msgid "Ignore dllimport attribute for functions" + msgstr "Ignorar el atributo dllimport para las funciones" + + #. None of these is actually used in cc1. If we don't define them in target + #. switches cc1 complains about them. For the sake of argument lets allocate + #. bit 31 of target flags for such options. + #: config/arm/riscix.h:84 + msgid "Do symbol renaming for BSD" + msgstr "Renombrar los símbolos para BSD" + + #: config/arm/riscix.h:85 + msgid "Do symbol renaming for X/OPEN" + msgstr "Renombrar los símbolos para X/OPEN" + + #: config/arm/riscix.h:86 + msgid "Don't do symbol renaming" + msgstr "No renombrar símbolos" + + #: config/avr/avr.c:221 + #, c-format + msgid "MCU `%s' not supported" + msgstr "MCU `%s' no tiene soporte" + + #: config/avr/avr.c:461 + #, c-format + msgid "large frame pointer change (%d) with -mtiny-stack" + msgstr "cambio de apuntador grande de marco (%d) con -mtiny-stack" + + #: config/avr/avr.c:1056 + msgid "bad address, not (reg+disp):" + msgstr "dirección errónea, no (reg+disp)" + + #: config/avr/avr.c:1064 + msgid "internal compiler error. Bad address:" + msgstr "error interno del compilador. Dirección errónea:" + + #: config/avr/avr.c:1077 + msgid "internal compiler error. Unknown mode:" + msgstr "error interno del compilador. Modo desconocido:" + + #: config/avr/avr.c:1785 config/avr/avr.c:2497 + msgid "invalid insn:" + msgstr "insn inválido:" + + #: config/avr/avr.c:1822 config/avr/avr.c:1908 config/avr/avr.c:1957 config/avr/avr.c:1966 config/avr/avr.c:2064 config/avr/avr.c:2236 config/avr/avr.c:2534 config/avr/avr.c:2645 + msgid "incorrect insn:" + msgstr "insn incorrecto:" + + #: config/avr/avr.c:1985 config/avr/avr.c:2149 config/avr/avr.c:2307 config/avr/avr.c:2689 + msgid "unknown move insn:" + msgstr "movimiento insn desconocido:" + + #: config/avr/avr.c:2925 + msgid "bad shift insn:" + msgstr "desplazamiento insn erróneo:" + + #: config/avr/avr.c:3041 config/avr/avr.c:3471 config/avr/avr.c:3851 + msgid "internal compiler error. Incorrect shift:" + msgstr "error interno del compilador. Desplazamiento incorrecto:" + + #: config/avr/avr.c:4676 + msgid "only initialized variables can be placed into program memory area" + msgstr "sólo las variables iniciadas se pueden ubicar en el área de memoria del programa" + + #: config/avr/avr.h:63 + msgid "Assume int to be 8 bit integer" + msgstr "Asumir que int sea entero de 8 bit" + + #: config/avr/avr.h:65 + msgid "Change the stack pointer without disabling interrupts" + msgstr "Cambiar el apuntador de la pila sin desactivar las interrupciones" + + #: config/avr/avr.h:67 + msgid "Use subroutines for function prologue/epilogue" + msgstr "Usar subrutinas para el prólogo/epílogo de función" + + #: config/avr/avr.h:69 + msgid "Change only the low 8 bits of the stack pointer" + msgstr "Cambiar sólo los 8 bits bajos del apuntador de pila" + + #: config/avr/avr.h:71 + msgid "Do not generate tablejump insns" + msgstr "No generar insns de salto de tabla" + + #: config/avr/avr.h:74 + msgid "Output instruction sizes to the asm file" + msgstr "Tamaños de instrucción de salida al fichero asm" + + #: config/avr/avr.h:87 + msgid "Specify the initial stack address" + msgstr "Especificar la dirección inicial de la pila" + + #: config/avr/avr.h:88 + msgid "Specify the MCU name" + msgstr "Especificar el nombre MCU" + + #. `GIV_SORT_CRITERION(GIV1, GIV2)' + #. In some cases, the strength reduction optimization pass can + #. produce better code if this is defined. This macro controls the + #. order that induction variables are combined. This macro is + #. particularly useful if the target has limited addressing modes. + #. For instance, the SH target has only positive offsets in + #. addresses. Thus sorting to put the smallest address first allows + #. the most combinations to be found. + #: config/avr/avr.h:2566 + msgid "trampolines not supported" + msgstr "los trampolines no tienen soporte" + + #: config/c4x/c4x-c.c:70 + #, c-format + msgid "missing '(' after '#pragma %s' - ignored" + msgstr "falta un '(' después de '#pragma %s' - ignorado" + + #: config/c4x/c4x-c.c:73 + #, c-format + msgid "missing function name in '#pragma %s' - ignored" + msgstr "falta el nombre de la función en '#pragma %s' - ignorado" + + #: config/c4x/c4x-c.c:78 + #, c-format + msgid "malformed '#pragma %s' - ignored" + msgstr "'#pragma %s' malformado - ignorado" + + #: config/c4x/c4x-c.c:80 + #, c-format + msgid "missing section name in '#pragma %s' - ignored" + msgstr "falta el nombre de la sección en '#pragma %s' - ignorado" + + #: config/c4x/c4x-c.c:85 + #, c-format + msgid "missing ')' for '#pragma %s' - ignored" + msgstr "falta un ')' para '#pragma %s' - ignorado" + + #: config/c4x/c4x-c.c:88 + #, c-format + msgid "junk at end of '#pragma %s'" + msgstr "basura al final de '#pragma %s'" + + #: config/c4x/c4x.c:299 + #, c-format + msgid "unknown CPU version %d, using 40.\n" + msgstr "versión desconocida de CPU %d, usando 40.\n" + + #: config/c4x/c4x.c:883 + #, c-format + msgid "ISR %s requires %d words of local vars, max is 32767" + msgstr "el ISR %s requiere de %d words de variables locales, el máximo es 32767" + + #: config/c4x/c4x.c:1635 + msgid "using CONST_DOUBLE for address" + msgstr "usando CONST_DOUBLE para las direcciones" + + #: config/c4x/c4x.c:1775 + msgid "c4x_address_cost: Invalid addressing mode" + msgstr "c4x_address_cost: Modo inválido de direccionamiento" + + #: config/c4x/c4x.c:1917 + #, c-format + msgid "c4x_print_operand: %%L inconsistency" + msgstr "c4x_print_operand: inconsistencia %%L" + + #: config/c4x/c4x.c:1923 + #, c-format + msgid "c4x_print_operand: %%N inconsistency" + msgstr "c4x_print_operand: inconsistencia %%N" + + #: config/c4x/c4x.c:1964 + #, c-format + msgid "c4x_print_operand: %%O inconsistency" + msgstr "c4x_print_operand: inconsistencia %%O" + + #: config/c4x/c4x.c:2060 + msgid "c4x_print_operand: Bad operand case" + msgstr "c4x_print_operand: Operando case erróneo" + + # FIXME: Revisar si post_modify es una instrucción en el código de + # gcc. cfuga + #: config/c4x/c4x.c:2103 + msgid "c4x_print_operand_address: Bad post_modify" + msgstr "c4x_print_operand_address: post_modify erróneo" + + # FIXME: Revisar si pre_modify es una instrucción en el código de + # gcc. cfuga + #: config/c4x/c4x.c:2125 + msgid "c4x_print_operand_address: Bad pre_modify" + msgstr "c4x_print_operand_address: pre_modify erróneo" + + #: config/c4x/c4x.c:2173 config/c4x/c4x.c:2185 config/c4x/c4x.c:2200 + msgid "c4x_print_operand_address: Bad operand case" + msgstr "c4x_print_operand_address: Operando case erróneo" + + #: config/c4x/c4x.c:2456 + msgid "c4x_rptb_insert: Cannot find start label" + msgstr "c4x_rptb_insert: No se puede encontrar la etiqueta de inicio" + + #: config/c4x/c4x.c:3443 config/c4x/c4x.c:3463 + msgid "mode not QImode" + msgstr "el modo no es QImode" + + #: config/c4x/c4x.c:3520 + msgid "invalid indirect memory address" + msgstr "dirección indirecta de memoria inválida" + + #: config/c4x/c4x.c:3609 + msgid "invalid indirect (S) memory address" + msgstr "dirección (S) indirecta de memoria inválida" + + #: config/c4x/c4x.c:3950 + msgid "c4x_valid_operands: Internal error" + msgstr "c4x_valid_operands: Error interno" + + #: config/c4x/c4x.c:4430 + msgid "c4x_operand_subword: invalid mode" + msgstr "c4x_operand_subword: modo inválido" + + #: config/c4x/c4x.c:4433 + msgid "c4x_operand_subword: invalid operand" + msgstr "c4x_operand_subword: operando inválido" + + #. We could handle these with some difficulty. + #. e.g., *p-- => *(p-=2); *(p+1). + #: config/c4x/c4x.c:4459 + msgid "c4x_operand_subword: invalid autoincrement" + msgstr "c4x_operand_subword: autoincremento inválido" + + #: config/c4x/c4x.c:4465 + msgid "c4x_operand_subword: invalid address" + msgstr "c4x_operand_subword: dirección inválida" + + #: config/c4x/c4x.c:4476 + msgid "c4x_operand_subword: address not offsettable" + msgstr "c4x_operand_subword: dirección no desplazable" + + #: config/c4x/c4x.c:4676 + msgid "c4x_rptb_rpts_p: Repeat block top label moved\n" + msgstr "c4x_rptb_rpts_p: Se movió la etiqueta princiapl del bloque de repetición\n" + + #. Name of the c4x assembler. + #. Name of the c4x linker. + #. Define assembler options. + #. Define linker options. + #. Define C preprocessor options. + #. Specify the end file to link with. + #. Target compilation option flags. + #. Small memory model. + #. Use 24-bit MPYI for C3x. + #. Fast fixing of floats. + #. Allow use of RPTS. + #. Emit C3x code. + #. Be compatible with TI assembler. + #. Be paranoid about DP reg. in ISRs. + #. Pass arguments on stack. + #. Enable features under development. + #. Enable repeat block. + #. Use BK as general register. + #. Use decrement and branch for C3x. + #. Enable debugging of GCC. + #. Force constants into registers. + #. Allow unsigned loop counters. + #. Force op0 and op1 to be same. + #. Save all 40 bits for floats. + #. Allow parallel insns. + #. Allow MPY||ADD, MPY||SUB insns. + #. Assume mem refs possibly aliased. + #. Emit C30 code. + #. Emit C31 code. + #. Emit C32 code. + #. Emit C33 code. + #. Emit C40 code. + #. Emit C44 code. + #. Run-time compilation parameters selecting different hardware subsets. + #. + #. Macro to define tables used to set the flags. + #. This is a list in braces of triplets in braces, + #. each pair being { "NAME", VALUE, "DESCRIPTION" } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/c4x/c4x.h:141 + msgid "Small memory model" + msgstr "Modelo de memoria small" + + #: config/c4x/c4x.h:143 + msgid "Big memory model" + msgstr "Modelo de memoria big" + + #: config/c4x/c4x.h:145 + msgid "Use MPYI instruction for C3x" + msgstr "Usar instrucción MPYI para C3x" + + #: config/c4x/c4x.h:147 + msgid "Do not use MPYI instruction for C3x" + msgstr "No usar instrucción MPYI para C3x" + + #: config/c4x/c4x.h:149 + msgid "Use fast but approximate float to integer conversion" + msgstr "Usar conversión de coma flotante a entero rápida pero aproximada" + + #: config/c4x/c4x.h:151 + msgid "Use slow but accurate float to integer conversion" + msgstr "Usar conversión de coma flotante a entero lenta pero exacta" + + #: config/c4x/c4x.h:153 + msgid "Enable use of RTPS instruction" + msgstr "Activar el uso de la instrucción RTPS" + + #: config/c4x/c4x.h:155 + msgid "Disable use of RTPS instruction" + msgstr "Desactivar el uso de la instrucción RTPS" + + #: config/c4x/c4x.h:157 + msgid "Enable use of RTPB instruction" + msgstr "Activar el uso de la instrucción RTPB" + + #: config/c4x/c4x.h:159 + msgid "Disable use of RTPB instruction" + msgstr "Desactivar el uso de la instrucción RTPB" + + #: config/c4x/c4x.h:161 + msgid "Generate code for C30 CPU" + msgstr "Generar código para el CPU C30" + + #: config/c4x/c4x.h:163 + msgid "Generate code for C31 CPU" + msgstr "Generar código para el CPU C31" + + #: config/c4x/c4x.h:165 + msgid "Generate code for C32 CPU" + msgstr "Generar código para el CPU C32" + + #: config/c4x/c4x.h:167 + msgid "Generate code for C33 CPU" + msgstr "Generar código para el CPU C33" + + #: config/c4x/c4x.h:169 + msgid "Generate code for C40 CPU" + msgstr "Generar código para el CPU C40" + + #: config/c4x/c4x.h:171 + msgid "Generate code for C44 CPU" + msgstr "Generar código para el CPU C44" + + #: config/c4x/c4x.h:173 + msgid "Emit code compatible with TI tools" + msgstr "Emitir código compatible con las herramientas TI" + + #: config/c4x/c4x.h:175 + msgid "Emit code to use GAS extensions" + msgstr "Emitir código para usar las extensiones de GAS" + + #: config/c4x/c4x.h:177 config/c4x/c4x.h:181 + msgid "Save DP across ISR in small memory model" + msgstr "Guardar DP entre ISR en el modelo de memoria small" + + #: config/c4x/c4x.h:179 config/c4x/c4x.h:183 + msgid "Don't save DP across ISR in small memory model" + msgstr "No guardar DP entre ISR en el modelo de memoria small" + + #: config/c4x/c4x.h:185 + msgid "Pass arguments on the stack" + msgstr "Pasar los argumenotos en la pila" + + #: config/c4x/c4x.h:187 + msgid "Pass arguments in registers" + msgstr "Pasar los argumentos en los registros" + + #: config/c4x/c4x.h:189 + msgid "Enable new features under development" + msgstr "Activar nuevas características en desarrollo" + + #: config/c4x/c4x.h:191 + msgid "Disable new features under development" + msgstr "Desactivar nuevas características en desarrollo" + + #: config/c4x/c4x.h:193 + msgid "Use the BK register as a general purpose register" + msgstr "Usar el registro BK como un registro de propósito general" + + #: config/c4x/c4x.h:195 + msgid "Do not allocate BK register" + msgstr "No asignar el registro BK" + + #: config/c4x/c4x.h:197 + msgid "Enable use of DB instruction" + msgstr "Activar el uso de la instrucción DB" + + #: config/c4x/c4x.h:199 + msgid "Disable use of DB instruction" + msgstr "Desactivar el uso de la instrucción DB" + + #: config/c4x/c4x.h:201 + msgid "Enable debugging" + msgstr "Activar la depuración" + + #: config/c4x/c4x.h:203 + msgid "Disable debugging" + msgstr "Desactivar la depuración" + + #: config/c4x/c4x.h:205 + msgid "Force constants into registers to improve hoisting" + msgstr "Forzar las constantes dentro de registros para mejorar el levantamiento" + + #: config/c4x/c4x.h:207 + msgid "Don't force constants into registers" + msgstr "No forzar las constantes en los registros" + + #: config/c4x/c4x.h:209 + msgid "Force RTL generation to emit valid 3 operand insns" + msgstr "Forzar que la generación de RTL emita 3 operandos insns válidos" + + #: config/c4x/c4x.h:211 + msgid "Allow RTL generation to emit invalid 3 operand insns" + msgstr "Permitir que la generación de RTL emita 3 operandos insns inválidos" + + # Error de dedo de desarrolladores originales en interation. Avisar. cfuga + #: config/c4x/c4x.h:213 + msgid "Allow unsigned interation counts for RPTB/DB" + msgstr "Permitir cuentas de iteración unsigned para RPTB/DB" + + #: config/c4x/c4x.h:215 + msgid "Disallow unsigned iteration counts for RPTB/DB" + msgstr "No ermitir cuentas de iteración unsigned para RPTB/DB" + + #: config/c4x/c4x.h:217 + msgid "Preserve all 40 bits of FP reg across call" + msgstr "Preservar los 40 bits del registro FP entre llamadas" + + #: config/c4x/c4x.h:219 + msgid "Only preserve 32 bits of FP reg across call" + msgstr "Sólo preservar 32 bits del registro FP entre llamadas" + + #: config/c4x/c4x.h:221 + msgid "Enable parallel instructions" + msgstr "Activar las funciones paralelas" + + #: config/c4x/c4x.h:223 + msgid "Disable parallel instructions" + msgstr "Desactivar las funciones paralelas" + + #: config/c4x/c4x.h:225 + msgid "Enable MPY||ADD and MPY||SUB instructions" + msgstr "Activar las instrucciones MPY||ADD y MPY||SUB" + + #: config/c4x/c4x.h:227 + msgid "Disable MPY||ADD and MPY||SUB instructions" + msgstr "Desactivar las instrucciones MPY||ADD y MPY||SUB" + + #: config/c4x/c4x.h:229 + msgid "Assume that pointers may be aliased" + msgstr "Asumir que se pueden hacer alias de los apuntadores" + + #: config/c4x/c4x.h:231 + msgid "Assume that pointers not aliased" + msgstr "Asumir que se hay alias de los apuntadores" + + #: config/c4x/c4x.h:304 + msgid "Specify maximum number of iterations for RPTS" + msgstr "Especificar el número máximo de iteraciones para RPTS" + + #: config/c4x/c4x.h:306 + msgid "Select CPU to generate code for" + msgstr "Seleccionar el CPU para el cual se genera código" + + #. Macros used in the machine description to test the flags. + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/clipper/clipper.h:40 + msgid "Generate code for the C400" + msgstr "Generar código para el C400" + + #: config/clipper/clipper.h:41 + msgid "Generate code for the C300" + msgstr "Generar código para el C300" + + #: config/convex/convex.h:53 + msgid "Generate code for c1" + msgstr "Generar código para el c1" + + #: config/convex/convex.h:54 + msgid "Generate code for c2" + msgstr "Generar código para el c2" + + #: config/convex/convex.h:55 + msgid "Generate code for c32" + msgstr "Generar código para el c32" + + #: config/convex/convex.h:56 config/convex/convex.h:57 + msgid "Generate code for c34" + msgstr "Generar código para el c34" + + #: config/convex/convex.h:59 + msgid "Use standard calling sequence, with arg count word" + msgstr "Usar secuencia de llamada estándard, con palabra de cuenta de argumentos" + + #: config/convex/convex.h:61 + msgid "Place arg count in a nop instruction (faster than push)" + msgstr "Colocar la cuenta de argumentos en una instrucción nop (más rápido que push)" + + #: config/convex/convex.h:63 + msgid "Don't push arg count, depend on symbol table" + msgstr "No hacer push de la cuenta de argumentos, depender de la tabla de símbolos" + + #: config/convex/convex.h:65 + msgid "Use data cache for volatile mem refs (default)" + msgstr "Usar el caché de datos para referencias a memoria volatile (por omisión)" + + #: config/convex/convex.h:67 + msgid "Don't use data cache for volatile mem refs" + msgstr "No usar el caché de datos para referencias a memoria volatile" + + #: config/convex/convex.h:69 + msgid "Bypass data cache for volatile mem refs" + msgstr "Saltar el caché de datos para referencias a memoria volatile" + + #: config/convex/convex.h:70 + msgid "Use 64-bit longs" + msgstr "Usar longs de 64-bit" + + #: config/convex/convex.h:71 + msgid "Use cc- and libc-compatible 32-bit longs" + msgstr "Usar longs de 32-bit compatibles con cc y libc" + + #: config/cris/cris.c:569 + msgid "unexpected index-type in cris_print_index" + msgstr "tipo-índice inesperado en cris_print_index" + + #: config/cris/cris.c:585 + msgid "unexpected base-type in cris_print_base" + msgstr "tipo-base inesperado en cris_print_base" + + #: config/cris/cris.c:878 + #, c-format + msgid "stackframe too big: %d bytes" + msgstr "marco de la pila demasiado grande: %d bytes" + + #: config/cris/cris.c:1193 + msgid "allocated but unused delay list in epilogue" + msgstr "lista de retardo asignada pero sin uso en el epílogo" + + #: config/cris/cris.c:1203 + msgid "unexpected function type needing stack adjustment for __builtin_eh_return" + msgstr "el tipo de función inesperado necesita un ajuste de pila para __builtin_eh_return" + + #: config/cris/cris.c:1282 + msgid "invalid operand for 'b' modifier" + msgstr "operando inválido para el modificador 'b'" + + #: config/cris/cris.c:1294 + msgid "invalid operand for 'v' modifier" + msgstr "operando inválido para el modificador 'v'" + + #: config/cris/cris.c:1304 + msgid "invalid operand for 'P' modifier" + msgstr "operando inválido para el modificador 'P'" + + #: config/cris/cris.c:1311 + msgid "invalid operand for 'p' modifier" + msgstr "operador inválido para el modificador 'p'" + + #: config/cris/cris.c:1350 + msgid "invalid operand for 'z' modifier" + msgstr "operando inválido para el modificador 'z'" + + #: config/cris/cris.c:1381 config/cris/cris.c:1411 + msgid "invalid operand for 'H' modifier" + msgstr "operando inválido para el modificador 'H'" + + #: config/cris/cris.c:1387 + msgid "bad register" + msgstr "registro erróneo" + + #: config/cris/cris.c:1425 + msgid "invalid operand for 'e' modifier" + msgstr "operando inválido para el modificador 'e'" + + #: config/cris/cris.c:1442 + msgid "invalid operand for 'm' modifier" + msgstr "operando inválido para el modificador 'm'" + + #: config/cris/cris.c:1467 + msgid "invalid operand for 'A' modifier" + msgstr "operando inválido para el modificador 'A'" + + #: config/cris/cris.c:1475 + msgid "invalid operand for 'D' modifier" + msgstr "operando inválido para el modificador 'D'" + + #: config/cris/cris.c:1489 + msgid "invalid operand for 'T' modifier" + msgstr "operando inválido para el modificador 'T'" + + #: config/cris/cris.c:1498 + msgid "invalid operand modifier letter" + msgstr "modificador de letra de operando inválido" + + #: config/cris/cris.c:1506 + #, c-format + msgid "internal error: bad register: %d" + msgstr "error interno: registro erróneo: %d" + + #: config/cris/cris.c:1554 + msgid "unexpected multiplicative operand" + msgstr "operando multiplicativo inesperado" + + #: config/cris/cris.c:1574 + msgid "unexpected operand" + msgstr "operando inesperado" + + #: config/cris/cris.c:1609 config/cris/cris.c:1619 + msgid "unrecognized address" + msgstr "no se reconoce la dirección" + + #: config/cris/cris.c:1975 + msgid "internal error: sideeffect-insn affecting main effect" + msgstr "error interno: insn colateral afectando al efecto principal" + + #. If we get here, the caller got its initial tests wrong. + #: config/cris/cris.c:2262 + msgid "internal error: cris_side_effect_mode_ok with bad operands" + msgstr "error interno: cris_side_effect_mode_ok con operandos erróneos" + + #: config/cris/cris.c:2344 config/cris/cris.c:2402 + msgid "unrecognized supposed constant" + msgstr "supuesta constante no reconocida" + + #: config/cris/cris.c:2443 + msgid "unrecognized supposed constant in cris_global_pic_symbol" + msgstr "supuesta constante no reconocida en cris_global_pic_symbol" + + #: config/cris/cris.c:2462 + #, c-format + msgid "-max-stackframe=%d is not usable, not between 0 and %d" + msgstr "no se puede usar -max-stackframe=%d, no está entre 0 y %d" + + #: config/cris/cris.c:2490 + #, c-format + msgid "unknown CRIS version specification in -march= or -mcpu= : %s" + msgstr "especificación de versión CRIS desconocida en -march= o -mcpu= : %s" + + #: config/cris/cris.c:2526 + #, c-format + msgid "unknown CRIS cpu version specification in -mtune= : %s" + msgstr "especificación de versión de cpu CRIS desconocida en -mtune= : %s" + + #: config/cris/cris.c:2544 + msgid "-fPIC and -fpic are not supported in this configuration" + msgstr "-fPIC y -fpic no tienen soporte en esta configuración" + + #: config/cris/cris.c:2560 + msgid "that particular -g option is invalid with -maout and -melinux" + msgstr "esa opción -g en particular es inválida con -maout y -melinux" + + #: config/cris/cris.c:2790 config/cris/cris.c:2835 + msgid "unexpected side-effects in address" + msgstr "efectos colaterales inesperados en la dirección" + + #. Labels are never marked as global symbols. + #: config/cris/cris.c:2932 config/cris/cris.c:2963 + msgid "unexpected PIC symbol" + msgstr "símbolo PIC inesperado" + + #: config/cris/cris.c:2936 + msgid "PIC register isn't set up" + msgstr "el registro PIC aún no está preparado" + + #: config/cris/cris.c:2949 config/cris/cris.c:3032 + msgid "unexpected address expression" + msgstr "expresión de dirección inesperada" + + #: config/cris/cris.c:2967 + msgid "emitting PIC operand, but PIC register isn't set up" + msgstr "emitiendo un operando PIC, pero el registro PIC aún no está preparado" + + #: config/cris/cris.c:2976 + msgid "unexpected NOTE as addr_const:" + msgstr "NOTE inesperado como addr_const:" + + #: config/cris/aout.h:106 + msgid "Compile for the MMU-less Etrax 100-based elinux system" + msgstr "Compilar para el sistema elinux Etrax basado en 100 sin MMU" + + #: config/cris/aout.h:113 + msgid "For elinux, request a specified stack-size for this program" + msgstr "Para elinux, solicitar un tamaño de pila especificado para este programa" + + #. No "no-etrax" as it does not really imply any model. On the other hand, "etrax" implies the common (and large) subset matching all models. + #: config/cris/cris.h:336 + msgid "Compile for ETRAX 4 (CRIS v3)" + msgstr "Compilar para ETRAX 4 (CRIS v3)" + + #: config/cris/cris.h:341 + msgid "Compile for ETRAX 100 (CRIS v8)" + msgstr "Compilar para ETRAX 100 (CRIS v8)" + + #: config/cris/cris.h:345 + msgid "Emit verbose debug information in assembly code" + msgstr "Emitir información de depuración detallada en el código ensamblador" + + #: config/cris/cris.h:348 + msgid "Do not use condition codes from normal instructions" + msgstr "No usar códigos de condición para las instrucciones normales" + + #: config/cris/cris.h:352 + msgid "Do not emit addressing modes with side-effect assignment" + msgstr "No emitir modos de direccionamiento con asignaciones colaterales" + + #: config/cris/cris.h:355 + msgid "Do not tune stack alignment" + msgstr "No ajustar la alineación de la pila" + + #: config/cris/cris.h:358 + msgid "Do not tune writable data alignment" + msgstr "No ajustar la alineación de los datos modificables" + + #: config/cris/cris.h:361 + msgid "Do not tune code and read-only data alignment" + msgstr "No ajustar la alineación del código y de datos de sólo lectura" + + #: config/cris/cris.h:370 + msgid "Align code and data to 32 bits" + msgstr "Alinear código y datos a 32 bits" + + #: config/cris/cris.h:383 + msgid "Don't align items in code or data" + msgstr "No alinear elementos en el código o los datos" + + #: config/cris/cris.h:386 + msgid "Do not emit function prologue or epilogue" + msgstr "No emitir prólogo o epílogo de funciones" + + #. We have to handle this m-option here since we can't wash it off in both CC1_SPEC and CC1PLUS_SPEC. + #: config/cris/cris.h:390 + msgid "Use the most feature-enabling options allowed by other options" + msgstr "Usar la mayor cantidad de características permitidas por otras opciones" + + #. We must call it "override-" since calling it "no-" will cause gcc.c to forget it, if there's a "later" -mbest-lib-options. Kludgy, but needed for some multilibbed files. + #: config/cris/cris.h:396 + msgid "Override -mbest-lib-options" + msgstr "Anular -mbest-lib-options" + + #: config/cris/cris.h:428 + msgid "Generate code for the specified chip or CPU version" + msgstr "Generar código para el chip especificado o la versión de CPU" + + #: config/cris/cris.h:430 + msgid "Tune alignment for the specified chip or CPU version" + msgstr "Ajustar alineación para el chip especificado o la versión de CPU" + + #: config/cris/cris.h:432 + msgid "Warn when a stackframe is larger than the specified size" + msgstr "Avisar cuando un marco de pila sea más grande que el tamaño especificado" + + #. Node: Profiling + #: config/cris/cris.h:1029 + msgid "no FUNCTION_PROFILER for CRIS" + msgstr "no hay FUNCTION_PROFILER para CRIS" + + #: config/cris/linux.h:74 + msgid "Together with -fpic and -fPIC, do not use GOTPLT references" + msgstr "Junto con -fpic y -fPIC, no utilizar referencias GOTPLT" + + #: config/d30v/d30v.c:209 + #, c-format + msgid "bad modes_tieable_p for register %s, mode1 %s, mode2 %s" + msgstr "modes_tieable_p erróneos para el registro %s, modo1 %s, modo2 %s" + + #: config/d30v/d30v.c:2676 + msgid "bad insn to d30v_print_operand_address:" + msgstr "insn errónea para d30v_print_operand_address:" + + #: config/d30v/d30v.c:2693 config/d30v/d30v.c:2754 config/d30v/d30v.c:2775 config/d30v/d30v.c:2793 + msgid "bad insn to d30v_print_operand_memory_reference:" + msgstr "insn erróneo para d30v_print_operand_memory_reference:" + + #: config/d30v/d30v.c:2861 + msgid "bad insn to d30v_print_operand, 'f' modifier:" + msgstr "insn erróneo para d30v_print_operand, modificador 'f':" + + #: config/d30v/d30v.c:2870 + msgid "bad insn to d30v_print_operand, 'A' modifier:" + msgstr "insn erróneo para d30v_print_operand, modificador 'A':" + + #: config/d30v/d30v.c:2877 + msgid "bad insn to d30v_print_operand, 'M' modifier:" + msgstr "insn erróneo para d30v_print_operand, modificador 'M':" + + #: config/d30v/d30v.c:2931 + msgid "bad insn to print_operand, 'F' or 'T' modifier:" + msgstr "insn erróneo para print_operand, modificador 'F' o 'T':" + + #: config/d30v/d30v.c:2942 + msgid "bad insn to print_operand, 'B' modifier:" + msgstr "insn erróneo para print_operand, modificador 'B':" + + #: config/d30v/d30v.c:2949 + msgid "bad insn to print_operand, 'E' modifier:" + msgstr "insn erróneo para print_operand, modificador 'E':" + + #: config/d30v/d30v.c:2967 + msgid "bad insn to print_operand, 'R' modifier:" + msgstr "insn erróneo para print_operand, modificador 'R':" + + #: config/d30v/d30v.c:2976 config/d30v/d30v.c:2984 + msgid "bad insn to print_operand, 's' modifier:" + msgstr "insn erróneo para print_operand, modificador 's':" + + #: config/d30v/d30v.c:3013 + msgid "bad insn in d30v_print_operand, 0 case" + msgstr "insn erróneo en d30v_print_operand, caso 0" + + #: config/d30v/d30v.c:3368 + msgid "d30v_emit_comparison" + msgstr "d30v_emit_comparison" + + #: config/d30v/d30v.c:3412 + msgid "bad call to d30v_move_2words" + msgstr "llamada errónea a d30v_move_2words" + + #: config/d30v/d30v.h:108 + msgid "Enable use of conditional move instructions" + msgstr "Activar el uso de las instrucciones condicionales move" + + #: config/d30v/d30v.h:111 + msgid "Disable use of conditional move instructions" + msgstr "Desactivar el uso de las instrucciones condicionales move" + + #: config/d30v/d30v.h:114 + msgid "Debug argument support in compiler" + msgstr "Soporte para depuración de argumentos en el compilador" + + #: config/d30v/d30v.h:117 + msgid "Debug stack support in compiler" + msgstr "Soporte para depuración de pila en el compilador" + + #: config/d30v/d30v.h:120 + msgid "Debug memory address support in compiler" + msgstr "Soporte para depuración de direcciones de memoria en el compilador" + + #: config/d30v/d30v.h:123 + msgid "Make adjacent short instructions parallel if possible" + msgstr "Hacer paralelas las instrucciones adyacentes cortas si es posible" + + #: config/d30v/d30v.h:126 + msgid "Do not make adjacent short instructions parallel" + msgstr "No hacer paralelas las instrucciones adyacentes" + + #: config/d30v/d30v.h:129 config/d30v/d30v.h:132 + msgid "Link programs/data to be in external memory by default" + msgstr "Enlazar programas/datos para estar en la memoria externa por omisión" + + #: config/d30v/d30v.h:135 + msgid "Link programs/data to be in onchip memory by default" + msgstr "Enlazar programas/datos para estar en la memoria del chip por omisión" + + #: config/d30v/d30v.h:143 + msgid "Change the branch costs within the compiler" + msgstr "Cambiar los costos de ramificación dentro del compilador" + + #: config/d30v/d30v.h:146 + msgid "Change the threshold for conversion to conditional execution" + msgstr "Cambiar el umbral para la conversión a ejecución condicional" + + #: config/dsp16xx/dsp16xx.c:1446 config/dsp16xx/dsp16xx.c:1469 + msgid "stack size > 32k" + msgstr "tamaño de la pila > 32k" + + #: config/dsp16xx/dsp16xx.c:1678 + msgid "invalid addressing mode" + msgstr "modo de direccionamiento inválido" + + #: config/dsp16xx/dsp16xx.c:1857 + msgid "bad register extension code" + msgstr "código de extensión de registro erróneo" + + #: config/dsp16xx/dsp16xx.c:1958 + msgid "invalid offset in ybase addressing" + msgstr "desplazamiento inválido en el direccionamiento de ybase" + + #: config/dsp16xx/dsp16xx.c:1961 + msgid "invalid register in ybase addressing" + msgstr "registro inválido en el direccionamiento de ybase" + + #: config/dsp16xx/dsp16xx.c:1990 + msgid "inline float constants not supported on this host" + msgstr "no se da soporte a constantes inline float en este `host'" + + #: config/dsp16xx/dsp16xx.c:2140 + msgid "invalid shift operator in emit_1600_core_shift" + msgstr "operador de desplazamiento inválido en emit_1600_core_shift" + + #: config/dsp16xx/dsp16xx.c:2469 + msgid "invalid mode for gen_tst_reg" + msgstr "modo inválido para gen_tst_reg" + + #: config/dsp16xx/dsp16xx.c:2541 + msgid "invalid mode for integer comparison in gen_compare_reg" + msgstr "modo inválido para la comparación entera en gen_compare_reg" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/dsp16xx/dsp16xx.h:215 + msgid "Pass parameters in registers (default)" + msgstr "Pasar los parámetros en los registros (por omisión)" + + #: config/dsp16xx/dsp16xx.h:217 + msgid "Don't pass parameters in registers" + msgstr "No pasar los parámetros en los registros" + + #: config/dsp16xx/dsp16xx.h:219 + msgid "Generate code for near calls" + msgstr "Generar código para llamadas near" + + #: config/dsp16xx/dsp16xx.h:221 + msgid "Don't generate code for near calls" + msgstr "No generar código para llamadas near" + + #: config/dsp16xx/dsp16xx.h:223 + msgid "Generate code for near jumps" + msgstr "Generar código para saltos near" + + #: config/dsp16xx/dsp16xx.h:225 + msgid "Don't generate code for near jumps" + msgstr "No generar código para saltos near" + + #: config/dsp16xx/dsp16xx.h:227 + msgid "Generate code for a bit-manipulation unit" + msgstr "Generar código para una unidad de manipulación de bits" + + #: config/dsp16xx/dsp16xx.h:229 + msgid "Don't generate code for a bit-manipulation unit" + msgstr "No generar código para una unidad de manipulación de bits" + + #: config/dsp16xx/dsp16xx.h:231 + msgid "Generate code for memory map1" + msgstr "Generar código para memoria map1" + + #: config/dsp16xx/dsp16xx.h:233 + msgid "Generate code for memory map2" + msgstr "Generar código para memoria map2" + + #: config/dsp16xx/dsp16xx.h:235 + msgid "Generate code for memory map3" + msgstr "Generar código para memoria map3" + + #: config/dsp16xx/dsp16xx.h:237 + msgid "Generate code for memory map4" + msgstr "Generar código para memoria map4" + + #: config/dsp16xx/dsp16xx.h:239 + msgid "Ouput extra code for initialized data" + msgstr "Generar código extra para datos iniciados" + + #: config/dsp16xx/dsp16xx.h:241 + msgid "Don't let reg. allocator use ybase registers" + msgstr "No permitir que el alojador de registros use registros ybase" + + #: config/dsp16xx/dsp16xx.h:243 + msgid "Output extra debug info in Luxworks environment" + msgstr "Generar información extra de depuración en el ambiente Luxworks" + + #: config/dsp16xx/dsp16xx.h:245 + msgid "Save temp. files in Luxworks environment" + msgstr "Guardar los ficheros temporales en el ambiente Luxworks" + + #: config/dsp16xx/dsp16xx.h:257 + msgid "Specify alternate name for text section" + msgstr "Especificar un nombre alternativo para la sección de texto" + + #: config/dsp16xx/dsp16xx.h:259 + msgid "Specify alternate name for data section" + msgstr "Especificar un nombre alternativo para la sección de datos" + + #: config/dsp16xx/dsp16xx.h:261 + msgid "Specify alternate name for bss section" + msgstr "Especificar un nombre alternativo para la sección bss" + + #: config/dsp16xx/dsp16xx.h:263 + msgid "Specify alternate name for constant section" + msgstr "Especificar un nombre alternativo para la sección de constantes" + + #: config/dsp16xx/dsp16xx.h:265 + msgid "Specify alternate name for dsp16xx chip" + msgstr "Especificar un nombre alternativo para el chip dsp16xx" + + #. Output assembler code to FILE to increment profiler label # LABELNO + #. for profiling a function entry. + #: config/dsp16xx/dsp16xx.h:1219 config/dsp16xx/dsp16xx.h:1224 config/dsp16xx/dsp16xx.h:1229 config/dsp16xx/dsp16xx.h:1809 config/dsp16xx/dsp16xx.h:1814 + msgid "profiling not implemented yet" + msgstr "aún no se ha implementado el análisis de perfil" + + #. Emit RTL insns to initialize the variable parts of a trampoline. + #. FNADDR is an RTX for the address of the function's pure code. + #. CXT is an RTX for the static chain value for the function. + #: config/dsp16xx/dsp16xx.h:1240 config/dsp16xx/dsp16xx.h:1252 + msgid "trampolines not yet implemented" + msgstr "aún no se han implementado trampolines" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/elxsi/elxsi.h:51 + msgid "Generate code the unix assembler can handle" + msgstr "Generar código que el ensamblador de unix pueda manejar" + + #: config/elxsi/elxsi.h:52 + msgid "Generate code an embedded assembler can handle" + msgstr "Generar código que un ensamblador imbuído pueda manejar" + + #: config/fr30/fr30.c:456 + msgid "fr30_print_operand_address: unhandled address" + msgstr "fr30_print_operand_address: dirección sin manejar" + + #: config/fr30/fr30.c:483 + #, c-format + msgid "fr30_print_operand: unrecognized %%p code" + msgstr "fr30_print_operand: no se reconoce el código %%p" + + #: config/fr30/fr30.c:503 + #, c-format + msgid "fr30_print_operand: unrecognized %%b code" + msgstr "fr30_print_operand: no se reconoce el código %%b" + + #: config/fr30/fr30.c:524 + #, c-format + msgid "fr30_print_operand: unrecognized %%B code" + msgstr "fr30_print_operand: no se reconoce el código %%B" + + #: config/fr30/fr30.c:532 + #, c-format + msgid "fr30_print_operand: invalid operand to %%A code" + msgstr "fr30_print_operand: operando inválido para el código %%A" + + #: config/fr30/fr30.c:549 + #, c-format + msgid "fr30_print_operand: invalid %%x code" + msgstr "fr30_print_operand: código %%x inválido" + + #: config/fr30/fr30.c:556 + #, c-format + msgid "fr30_print_operand: invalid %%F code" + msgstr "fr30_print_operand: código %%F inválido" + + #: config/fr30/fr30.c:572 + msgid "fr30_print_operand: unknown code" + msgstr "fr30_print_operand: código desconocido" + + #: config/fr30/fr30.c:601 config/fr30/fr30.c:610 config/fr30/fr30.c:621 config/fr30/fr30.c:634 + msgid "fr30_print_operand: unhandled MEM" + msgstr "fr30_print_operand: MEM sin manejar" + + #: config/fr30/fr30.h:57 + msgid "Assume small address space" + msgstr "Asumiendo espacio de direcciones pequeño" + + #: config/h8300/h8300.c:142 + msgid "-ms2600 is used without -ms" + msgstr "se usó -ms2600 sin -ms" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/h8300/h8300.h:117 + msgid "Generate H8/S code" + msgstr "Generar código H8/S" + + #: config/h8300/h8300.h:118 + msgid "Do not generate H8/S code" + msgstr "No generar código H8/S" + + #: config/h8300/h8300.h:119 + msgid "Generate H8/S2600 code" + msgstr "Generar código H8/S2600" + + #: config/h8300/h8300.h:120 + msgid "Do not generate H8/S2600 code" + msgstr "No generar código H8/S2600" + + #: config/h8300/h8300.h:121 + msgid "Make integers 32 bits wide" + msgstr "Hacer enteros de 32 bits de anchura" + + #: config/h8300/h8300.h:124 + msgid "Use registers for argument passing" + msgstr "Usar registros para paso de parámetros" + + #: config/h8300/h8300.h:126 + msgid "Do not use registers for argument passing" + msgstr "No usar registros para paso de parámetros" + + #: config/h8300/h8300.h:128 + msgid "Consider access to byte sized memory slow" + msgstr "Considerar lento el acceso a la memoria de tamaño byte" + + #: config/h8300/h8300.h:129 + msgid "Enable linker relaxing" + msgstr "Activar el relajamiento del enlazador" + + #: config/h8300/h8300.h:131 + msgid "Generate H8/300H code" + msgstr "Generar código H8/300H" + + #: config/h8300/h8300.h:132 + msgid "Do not generate H8/300H code" + msgstr "No generar código H8/300H" + + #: config/h8300/h8300.h:133 + msgid "Use H8/300 alignment rules" + msgstr "Usar reglas de alineación H8/300" + + #: config/i370/i370-c.c:54 + msgid "junk at end of #pragma map" + msgstr "basura al final de #pragma map" + + #: config/i370/i370-c.c:60 + msgid "malformed #pragma map, ignored" + msgstr "#pragma map malformado, ignorado" + + #: config/i370/i370.c:897 + msgid "real name is too long - alias ignored" + msgstr "el nombre real es demasiado largo - se ignora el alias" + + #: config/i370/i370.c:902 + msgid "alias name is too long - alias ignored" + msgstr "el nombre de alias es demasiado largo - se ignora el alias" + + #: config/i370/i370.c:1173 + msgid "internal error--no jump follows compare:" + msgstr "error interno--no hay saltos a continuación de la comparación:" + + #. Macro to define tables used to set the flags. This is a list in braces + #. of pairs in braces, each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/i370/i370.h:63 + msgid "Generate char instructions" + msgstr "Generar instrucciones char" + + #: config/i370/i370.h:64 + msgid "Do not generate char instructions" + msgstr "No generar instrucciones char" + + #: config/i386/i386.c:925 + #, c-format + msgid "code model %s not supported in PIC mode" + msgstr "el modelo de código %s no tiene soporte en el modo PIC" + + #: config/i386/i386.c:935 config/sparc/sparc.c:344 + #, c-format + msgid "bad value (%s) for -mcmodel= switch" + msgstr "valor erróneo (%s) para el interruptor -mcmodel=" + + #: config/i386/i386.c:950 + #, c-format + msgid "bad value (%s) for -masm= switch" + msgstr "valor erróneo (%s) para el interruptor -masm=" + + #: config/i386/i386.c:953 + #, c-format + msgid "code model `%s' not supported in the %s bit mode" + msgstr "el modelo de código `%s' no tiene soporte en el modo de bit %s" + + #: config/i386/i386.c:956 + msgid "code model `large' not supported yet" + msgstr "aún no hay soporte para el modelo de código `large'" + + #: config/i386/i386.c:958 + #, c-format + msgid "%i-bit mode not compiled in" + msgstr "no está compilado el modo bit-%i" + + #: config/i386/i386.c:988 config/mips/mips.c:4989 + #, c-format + msgid "bad value (%s) for -march= switch" + msgstr "valor erróneo (%s) para el interruptor -march=" + + #: config/i386/i386.c:999 config/mips/mips.c:4945 + #, c-format + msgid "bad value (%s) for -mcpu= switch" + msgstr "valor erróneo (%s) para el interruptor -mcpu=" + + #: config/i386/i386.c:1018 + #, c-format + msgid "-mregparm=%d is not between 0 and %d" + msgstr "-mregparm=%d no está entre 0 y %d" + + #: config/i386/i386.c:1031 + msgid "-malign-loops is obsolete, use -falign-loops" + msgstr "-malign-loops es obsoleto, use -falign-loops" + + #: config/i386/i386.c:1036 config/i386/i386.c:1049 config/i386/i386.c:1062 + #, c-format + msgid "-malign-loops=%d is not between 0 and %d" + msgstr "-malign-loops=%d no está entre 0 y %d" + + #: config/i386/i386.c:1044 + msgid "-malign-jumps is obsolete, use -falign-jumps" + msgstr "-malign-jumps es obsoleto, use -falign-jumps" + + #: config/i386/i386.c:1057 + msgid "-malign-functions is obsolete, use -falign-functions" + msgstr "-malign-functions es obsoleto, use -falign-functions" + + #: config/i386/i386.c:1095 + #, c-format + msgid "-mpreferred-stack-boundary=%d is not between %d and 12" + msgstr "-mpreferred-stack-boundary=%d no está entre %d y 12" + + #: config/i386/i386.c:1107 + #, c-format + msgid "-mbranch-cost=%d is not between 0 and 5" + msgstr "-mbranch-cost=%d no está entre 0 y 5" + + #: config/i386/i386.c:1129 + msgid "-malign-double makes no sense in the 64bit mode" + msgstr "-malign-double no tiene sentido en el modo 64bit" + + #: config/i386/i386.c:1131 + msgid "-mrtd calling convention not supported in the 64bit mode" + msgstr "la convención de llamadas -mrtd no tiene soporte en el modo de 64 bit" + + #: config/i386/i386.c:1147 config/i386/i386.c:1158 + msgid "SSE instruction set disabled, using 387 arithmetics" + msgstr "el conjunto de instrucciones SSE está desactivado, usando la aritmética 387" + + #: config/i386/i386.c:1163 + msgid "387 instruction set disabled, using SSE arithmetics" + msgstr "el conjunto de instrucciones 387 está desactivado, usando la aritmética SSE" + + #: config/i386/i386.c:1170 + #, c-format + msgid "bad value (%s) for -mfpmath= switch" + msgstr "valor erróneo (%s) para el interruptor -mfpmath=" + + #: config/i386/i386.c:1300 + #, c-format + msgid "`%s' attribute requires an integer constant argument" + msgstr "el atributo `%s' requiere una constante entera como argumento" + + #: config/i386/i386.c:1306 + #, c-format + msgid "argument to `%s' attribute larger than %d" + msgstr "el argumento para el atributo `%s' es más grande que %d" + + #: config/i386/i386.c:5363 + msgid "invalid UNSPEC as operand" + msgstr "UNSPEC inválido como operando" + + #: config/i386/i386.c:5596 + msgid "extended registers have no high halves" + msgstr "los registros extendidos no tiene mitades superiores" + + #: config/i386/i386.c:5611 + msgid "unsupported operand size for extended register" + msgstr "tamaño de operando sin soporte para el registro extendido" + + #: config/i386/i386.c:5884 + msgid "operand is neither a constant nor a condition code, invalid operand code 'c'" + msgstr "el operando no es una constante ni un código de condición, código de operando 'c' inválido" + + #: config/i386/i386.c:5930 + #, c-format + msgid "invalid operand code `%c'" + msgstr "código de operando `%c' inválido" + + #: config/i386/i386.c:9867 + msgid "unknown insn mode" + msgstr "modo insn desconocido" + + #. @@@ better error message + #: config/i386/i386.c:11730 config/i386/i386.c:11763 + msgid "selector must be an immediate" + msgstr "el selector debe ser un inmediato" + + #. @@@ better error message + #: config/i386/i386.c:11921 config/i386/i386.c:11949 + msgid "mask must be an immediate" + msgstr "la máscara debe ser un inmediato" + + #: config/i386/winnt.c:94 + #, c-format + msgid "`%s' attribute only applies to variables" + msgstr "el atributo `%s' solamente aplica a variables" + + #: config/i386/winnt.c:262 + #, c-format + msgid "`%s' declared as both exported to and imported from a DLL" + msgstr "`%s' es declarado como exportado a e importado de una DLL al mismo tiempo" + + #: config/i386/cygwin.h:51 + msgid "Use the Cygwin interface" + msgstr "Usar la interfaz Cygwin" + + #: config/i386/cygwin.h:53 + msgid "Use the Mingw32 interface" + msgstr "Usar la interfaz Mingw32" + + #: config/i386/cygwin.h:54 + msgid "Create GUI application" + msgstr "Crear una aplicación con interfaz gráfica de usuario (GUI)" + + #: config/i386/cygwin.h:55 + msgid "Don't set Windows defines" + msgstr "No establecer las definiciones de Windows" + + #: config/i386/cygwin.h:56 + msgid "Set Windows defines" + msgstr "Establecer las definiciones de Windows" + + #: config/i386/cygwin.h:58 + msgid "Create console application" + msgstr "Crear una aplicación de consola" + + #: config/i386/cygwin.h:59 config/i386/win32.h:59 + msgid "Generate code for a DLL" + msgstr "Generar código para una DLL" + + #: config/i386/cygwin.h:61 config/i386/win32.h:61 + msgid "Ignore dllimport for functions" + msgstr "Ignorar dllimport para funciones" + + #: config/i386/cygwin.h:63 + msgid "Use Mingw-specific thread support" + msgstr "Usar soporte de hilos específico de Mingw" + + #: config/i386/cygwin.h:257 + #, c-format + msgid "-f%s ignored for target (all code is position independent)" + msgstr "se ignora -f%s para el objetivo (todo el código es independiente de posición)" + + #: config/i386/dgux.h:60 + msgid "Retain standard MXDB information" + msgstr "Retener la información MXDB estándard" + + #: config/i386/dgux.h:62 + msgid "Retain legend information" + msgstr "Retener información de la leyenda" + + #: config/i386/dgux.h:65 + msgid "Generate external legend information" + msgstr "General información de leyenda externa" + + #: config/i386/dgux.h:67 + msgid "Emit identifying info in .s file" + msgstr "Emitir información de identificación en el fichero .s" + + #: config/i386/dgux.h:69 + msgid "Warn when a function arg is a structure" + msgstr "Advertir cuando el argumento de una función es una estructura" + + #: config/i386/dgux.h:252 + msgid "argument is a structure" + msgstr "el argumento es una estructura" + + #: config/i386/djgpp.h:201 + msgid "-mbnu210 is ignored (option is obsolete)" + msgstr "se ignora -mbnu210 (la opción es obsoleta)" + + #: config/i386/i386.h:45 config/mips/mips.h:186 + msgid "half-pic init called on systems that don't support it" + msgstr "se llamó a half-pic init en sistemas que no le dan soporte" + + #. Deprecated. + #. Deprecated. + #. Deprecated. + #. Deprecated. + #. Deprecated. + #. Deprecated. + #: config/i386/i386.h:303 + msgid "Alternate calling convention" + msgstr "Convención de llamada alternativa" + + #: config/i386/i386.h:305 config/m68k/m68k.h:180 config/ns32k/ns32k.h:106 + msgid "Use normal calling convention" + msgstr "Usar convención de llamada normal" + + #: config/i386/i386.h:307 + msgid "Align some doubles on dword boundary" + msgstr "Alinear algunos doubles en límites de dword" + + #: config/i386/i386.h:309 + msgid "Align doubles on word boundary" + msgstr "Alinear doubles en límites de word" + + #: config/i386/i386.h:311 + msgid "Uninitialized locals in .bss" + msgstr "Locales sin valores iniciales en .bss" + + #: config/i386/i386.h:313 + msgid "Uninitialized locals in .data" + msgstr "Locales sin valores iniciales en .data" + + #: config/i386/i386.h:315 config/m68k/linux-aout.h:45 config/m68k/linux.h:50 + msgid "Use IEEE math for fp comparisons" + msgstr "Usar matemática IEEE para comparaciones fp" + + #: config/i386/i386.h:317 + msgid "Do not use IEEE math for fp comparisons" + msgstr "No usar matemática IEEE para comparaciones fp" + + #: config/i386/i386.h:319 + msgid "Return values of functions in FPU registers" + msgstr "Devolver valores de funciones en registros FPU" + + #: config/i386/i386.h:321 + msgid "Do not return values of functions in FPU registers" + msgstr "No devolver valores de funciones en registros FPU" + + #: config/i386/i386.h:323 + msgid "Do not generate sin, cos, sqrt for FPU" + msgstr "No generar sin, cos, sqrt para FPU" + + #: config/i386/i386.h:325 + msgid "Generate sin, cos, sqrt for FPU" + msgstr "Generar sin, cos, sqrt para FPU" + + #: config/i386/i386.h:327 + msgid "Omit the frame pointer in leaf functions" + msgstr "Omitir el marco de referencia para las funciones hojas" + + #: config/i386/i386.h:330 + msgid "Enable stack probing" + msgstr "Habilitar la prueba de la pila" + + #. undocumented + #. undocumented + #: config/i386/i386.h:335 + msgid "Align destination of the string operations" + msgstr "Alinear destino de las operaciones de cadenas" + + #: config/i386/i386.h:337 + msgid "Do not align destination of the string operations" + msgstr "No alinear destino de las operaciones de cadenas" + + #: config/i386/i386.h:339 + msgid "Inline all known string operations" + msgstr "Convertir a inline todas las operaciones de cadenas conocidas" + + #: config/i386/i386.h:341 + msgid "Do not inline all known string operations" + msgstr "No convertir a inline todas las operaciones de cadenas conocidas" + + #: config/i386/i386.h:343 config/i386/i386.h:348 + msgid "Use push instructions to save outgoing arguments" + msgstr "Usar instrucciones push para guardar los argumentos de salida" + + #: config/i386/i386.h:345 config/i386/i386.h:350 + msgid "Do not use push instructions to save outgoing arguments" + msgstr "No usar instrucciones push para guardar los argumentos de salida" + + #: config/i386/i386.h:352 + msgid "Support MMX built-in functions" + msgstr "Dar soporte para funciones internas MMX" + + #: config/i386/i386.h:354 + msgid "Do not support MMX built-in functions" + msgstr "No dar soporte para funciones internas MMX" + + #: config/i386/i386.h:357 + msgid "Support 3DNow! built-in functions" + msgstr "Dar soporte para funciones internas 3DNow!" + + #: config/i386/i386.h:360 + msgid "Do not support 3DNow! built-in functions" + msgstr "No dar soporte para funciones internas 3DNow!" + + #: config/i386/i386.h:362 + msgid "Support MMX and SSE built-in functions and code generation" + msgstr "Dar soporte para funciones internas y generación de código MMX y SSE" + + #: config/i386/i386.h:365 + msgid "Do not support MMX and SSE built-in functions and code generation" + msgstr "No dar soporte para funciones internas y generación de código MMX y SSE" + + #: config/i386/i386.h:367 + msgid "Support MMX, SSE and SSE2 built-in functions and code generation" + msgstr "Dar soporte para funciones internas y generación de código MMX, SSE y SSE2" + + #: config/i386/i386.h:370 + msgid "Do not support MMX, SSE and SSE2 built-in functions and code generation" + msgstr "No dar soporte para funciones internas y generación de código MMX, SSE y SSE2" + + #: config/i386/i386.h:372 + msgid "sizeof(long double) is 16" + msgstr "sizeof(long double) es 16" + + #: config/i386/i386.h:374 + msgid "sizeof(long double) is 12" + msgstr "sizeof(long double) es 12" + + #: config/i386/i386.h:376 + msgid "Generate 64bit x86-64 code" + msgstr "Generar código x86-64 de 64bit" + + #: config/i386/i386.h:378 + msgid "Generate 32bit i386 code" + msgstr "Generar código i386 de 32bit" + + #: config/i386/i386.h:380 + msgid "Use red-zone in the x86-64 code" + msgstr "Usar la zona roja en el código x86-64" + + #: config/i386/i386.h:382 + msgid "Do not use red-zone in the x86-64 code" + msgstr "No usar la zona roja en el código x86-64" + + #. This macro is similar to `TARGET_SWITCHES' but defines names of + #. command options that have values. Its definition is an + #. initializer with a subgrouping for each command option. + #. + #. Each subgrouping contains a string constant, that defines the + #. fixed part of the option name, and the address of a variable. The + #. variable, type `char *', is set to the variable part of the given + #. option if the fixed part matches. The actual option name is made + #. by appending `-m' to the specified name. + #: config/i386/i386.h:428 config/rs6000/rs6000.h:428 config/sparc/sparc.h:641 + msgid "Schedule code for given CPU" + msgstr "Código de calendarizador para el CPU dado" + + #: config/i386/i386.h:430 + msgid "Generate floating point mathematics using given instruction set" + msgstr "Generar matemáticas de coma flotante usando el conjunto de instrucciones dado" + + #: config/i386/i386.h:432 + msgid "Generate code for given CPU" + msgstr "Generar código para el CPU dado" + + #: config/i386/i386.h:434 + msgid "Number of registers used to pass integer arguments" + msgstr "Número de registros usados para pasar argumentos enteros" + + #. TARGET_DEFAULT is defined in sun*.h and isi.h, etc. + #. This macro is similar to `TARGET_SWITCHES' but defines names of + #. command options that have values. Its definition is an + #. initializer with a subgrouping for each command option. + #. + #. Each subgrouping contains a string constant, that defines the + #. fixed part of the option name, and the address of a variable. The + #. variable, type `char *', is set to the variable part of the given + #. option if the fixed part matches. The actual option name is made + #. by appending `-m' to the specified name. + #: config/i386/i386.h:436 config/m68k/m68k.h:263 + msgid "Loop code aligned to this power of 2" + msgstr "El código de ciclo es alineado a esta potencia de 2" + + #: config/i386/i386.h:438 config/m68k/m68k.h:265 + msgid "Jump targets are aligned to this power of 2" + msgstr "Los objetivos de salto son alineados a esta potencia de 2" + + #: config/i386/i386.h:440 config/m68k/m68k.h:267 + msgid "Function starts are aligned to this power of 2" + msgstr "Los inicios de las funciones son alineados a esta potencia de 2" + + #: config/i386/i386.h:443 + msgid "Attempt to keep stack aligned to this power of 2" + msgstr "Se trata de mantenter la pila alineada a esta potencia de 2" + + #: config/i386/i386.h:445 + msgid "Branches are this expensive (1-5, arbitrary units)" + msgstr "Las ramificaciones son así de caras (1-5, unidades arbitrarias)" + + #: config/i386/i386.h:447 + msgid "Use given x86-64 code model" + msgstr "Usar el modelo de código del x86-64 dado" + + #. Undocumented. + #. Undocumented. + #: config/i386/i386.h:453 + msgid "Use given assembler dialect" + msgstr "Usar el dialecto del ensamblador dado" + + #: config/i386/osf1elf.h:112 + msgid "Profiling uses mcount" + msgstr "El análisis de perfil usa mcount" + + #: config/i386/osfrose.h:60 + msgid "Emit half-PIC code" + msgstr "Emitir código semi-PIC" + + #. intentionally undoc + #. intentionally undoc + #: config/i386/osfrose.h:67 + msgid "Emit ELF object code" + msgstr "Emitir código objeto ELF" + + #: config/i386/osfrose.h:69 + msgid "Emit ROSE object code" + msgstr "Emitir código objeto ROSE" + + #: config/i386/osfrose.h:71 + msgid "Symbols have a leading underscore" + msgstr "Los símbolos son precedidos por un subrayado" + + #: config/i386/osfrose.h:74 + msgid "Align to >word boundaries" + msgstr "Alinear a límites >word" + + #: config/i386/osfrose.h:77 + msgid "Use mcount for profiling" + msgstr "Usar mcount para análisis de perfil" + + #: config/i386/osfrose.h:79 + msgid "Use mcount_ptr for profiling" + msgstr "Usar mcount_ptr para análisis de perfil" + + #: config/i386/sco5.h:771 + msgid "Generate ELF output" + msgstr "Generar salida ELF" + + #: config/i386/win32.h:53 + msgid "Use Mingw32 interface" + msgstr "Usar la interfaz Mingw32" + + #: config/i386/win32.h:55 + msgid "Use Cygwin interface" + msgstr "Usar la interfaz Cygwin" + + #: config/i386/win32.h:57 + msgid "Use bare Windows interface" + msgstr "Usar la interfaz desnuda Windows" + + #. If the environment variable DJDIR is not defined, then DJGPP is not installed correctly and GCC will quickly become confused with the default prefix settings. Report the problem now so the user doesn't receive deceptive "file not found" error messages later. + #. DJDIR is automatically defined by the DJGPP environment config file pointed to by the environment variable DJGPP. Examine DJGPP to try and figure out what's wrong. + #: config/i386/xm-djgpp.h:71 + msgid "environment variable DJGPP not defined" + msgstr "no se definió la variable de ambiente DJGPP" + + #: config/i386/xm-djgpp.h:73 + #, c-format + msgid "environment variable DJGPP points to missing file '%s'" + msgstr "la variable de ambiente DJGPP apunta al fichero faltante '%s'" + + #: config/i386/xm-djgpp.h:76 + #, c-format + msgid "environment variable DJGPP points to corrupt file '%s'" + msgstr "la variable de ambiente DJGPP apunta al fichero corrupto '%s'" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/i860/i860.h:56 config/i860/paragon.h:28 + msgid "Generate code which uses the FPU" + msgstr "Generar código que use el FPU" + + #: config/i860/i860.h:57 config/i860/i860.h:58 config/i860/paragon.h:29 config/i860/paragon.h:30 config/i860/paragon.h:31 + msgid "Do not generate code which uses the FPU" + msgstr "No generar código que use el FPU" + + #: config/i960/i960-c.c:67 + msgid "sorry, not implemented: #pragma align NAME=SIZE" + msgstr "disculpe, no se ha implementado: #pragma align NOMBRE=TAMAÑO" + + #: config/i960/i960-c.c:72 + msgid "malformed #pragma align - ignored" + msgstr "#pragma align mal formado - ignorado" + + #: config/i960/i960-c.c:110 + msgid "sorry, not implemented: #pragma noalign NAME" + msgstr "disculpe, no se ha implementado: #pragma noalign NOMBRE" + + #: config/i960/i960.c:1405 config/m68k/m68k.c:665 config/rs6000/rs6000.c:8437 + msgid "stack limit expression is not supported" + msgstr "no se da soporte a la expresión del límite de la pila" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #. ??? Not all ten of these architecture variations actually exist, but I + #. am not sure which are real and which aren't. + #: config/i960/i960.h:240 + msgid "Generate SA code" + msgstr "Generar código SA" + + #: config/i960/i960.h:243 + msgid "Generate SB code" + msgstr "Generar código SB" + + #. {"sc", (TARGET_FLAG_NUMERICS|TARGET_FLAG_PROTECTED| TARGET_FLAG_MC|TARGET_FLAG_COMPLEX_ADDR), N_("Generate SC code")}, + #: config/i960/i960.h:248 + msgid "Generate KA code" + msgstr "Generar código KA" + + #: config/i960/i960.h:251 + msgid "Generate KB code" + msgstr "Generar código KB" + + #. {"kc", (TARGET_FLAG_NUMERICS|TARGET_FLAG_PROTECTED| TARGET_FLAG_MC|TARGET_FLAG_COMPLEX_ADDR), N_("Generate KC code")}, + #: config/i960/i960.h:256 + msgid "Generate JA code" + msgstr "Generar código JA" + + #: config/i960/i960.h:258 + msgid "Generate JD code" + msgstr "Generar código JD" + + #: config/i960/i960.h:261 + msgid "Generate JF code" + msgstr "Generar código JF" + + #: config/i960/i960.h:263 + msgid "generate RP code" + msgstr "generar código RP" + + #: config/i960/i960.h:266 + msgid "Generate MC code" + msgstr "Generar código MC" + + #: config/i960/i960.h:269 + msgid "Generate CA code" + msgstr "Generar código CA" + + #. {"cb", (TARGET_FLAG_NUMERICS|TARGET_FLAG_C_SERIES| TARGET_FLAG_BRANCH_PREDICT|TARGET_FLAG_CODE_ALIGN), N_("Generate CB code")}, {"cc", (TARGET_FLAG_NUMERICS|TARGET_FLAG_PROTECTED| TARGET_FLAG_C_SERIES|TARGET_FLAG_BRANCH_PREDICT| TARGET_FLAG_CODE_ALIGN), N_("Generate CC code")}, + #: config/i960/i960.h:279 + msgid "Generate CF code" + msgstr "Generar código CF" + + #: config/i960/i960.h:285 + msgid "Use alternate leaf function entries" + msgstr "Usar entradas de función hojas alternadas" + + #: config/i960/i960.h:287 + msgid "Do not use alternate leaf function entries" + msgstr "No usar entradas de función hojas alternadas" + + # ¿O mejor "llamada de la cola"? cfuga + #: config/i960/i960.h:289 + msgid "Perform tail call optimization" + msgstr "Realizar optimización de la llamada del extremo" + + #: config/i960/i960.h:291 + msgid "Do not perform tail call optimization" + msgstr "No realizar optimización de la llamada del extremo" + + #: config/i960/i960.h:293 + msgid "Use complex addressing modes" + msgstr "Usar modos de direccionamiento complejos" + + #: config/i960/i960.h:295 + msgid "Do not use complex addressing modes" + msgstr "No usar modos de direccionamiento complejos" + + #: config/i960/i960.h:297 + msgid "Align code to 8 byte boundary" + msgstr "Alinear el código a límites de 8 byte" + + #: config/i960/i960.h:299 + msgid "Do not align code to 8 byte boundary" + msgstr "No alinear el código a límites de 8 byte" + + #. {"clean-linkage", (TARGET_FLAG_CLEAN_LINKAGE), N_("Force use of prototypes")}, {"no-clean-linkage", -(TARGET_FLAG_CLEAN_LINKAGE), N_("Do not force use of prototypes")}, + #: config/i960/i960.h:305 config/i960/i960.h:307 + msgid "Enable compatibility with iC960 v2.0" + msgstr "Activar la compatibilidad con iC960 v2.0" + + #: config/i960/i960.h:309 + msgid "Enable compatibility with iC960 v3.0" + msgstr "Activar la compatibilidad con iC960 v3.0" + + #: config/i960/i960.h:311 config/i960/i960.h:313 + msgid "Enable compatibility with ic960 assembler" + msgstr "Activar la compatibilidad con el ensamblador ic960" + + #: config/i960/i960.h:315 + msgid "Do not permit unaligned accesses" + msgstr "No permitir accessos sin alinear" + + #: config/i960/i960.h:317 + msgid "Permit unaligned accesses" + msgstr "Permitir accessos sin alinear" + + #: config/i960/i960.h:319 + msgid "Layout types like Intel's v1.3 gcc" + msgstr "Presentar tipos como en el gcc v1.3 de Intel" + + #: config/i960/i960.h:321 + msgid "Do not layout types like Intel's v1.3 gcc" + msgstr "No presentar tipos como en el gcc v1.3 de Intel" + + #: config/i960/i960.h:323 config/sparc/freebsd.h:80 config/sparc/linux.h:86 config/sparc/linux64.h:143 config/sparc/netbsd-elf.h:238 + msgid "Use 64 bit long doubles" + msgstr "Usar long doubles de 64 bit" + + #: config/i960/i960.h:325 + msgid "Enable linker relaxation" + msgstr "Activar la relajación del enlazador" + + #: config/i960/i960.h:327 + msgid "Do not enable linker relaxation" + msgstr "Desactivar la relajación del enlazador" + + #. Override conflicting target switch options. + #. Doesn't actually detect if more than one -mARCH option is given, but + #. does handle the case of two blatantly conflicting -mARCH options. + #: config/i960/i960.h:342 config/i960/i960.h:352 + msgid "conflicting architectures defined - using C series" + msgstr "se definieron arquitecturas en conflicto - usando las series C" + + #: config/i960/i960.h:347 + msgid "conflicting architectures defined - using K series" + msgstr "se definieron arquitecturas en conflicto - usando las series K" + + #: config/i960/i960.h:362 + msgid "iC2.0 and iC3.0 are incompatible - using iC3.0" + msgstr "iC2.0 e iC3.0 son incompatibles - usando iC3.0" + + #. ??? See the LONG_DOUBLE_TYPE_SIZE definition below. + #: config/i960/i960.h:373 + msgid "the -mlong-double-64 option does not work yet" + msgstr "el soporte para -mlong-double-64 aún no funciona" + + #: config/ia64/ia64.c:3554 + msgid "ia64_print_operand: unknown code" + msgstr "ia64_print_operand: código desconocido" + + #: config/ia64/ia64.c:3828 + msgid "value of -mfixed-range must have form REG1-REG2" + msgstr "el valor de -mfixed-range debe ser de la forma REG1-REG2" + + #: config/ia64/ia64.c:3855 + #, c-format + msgid "%s-%s is an empty range" + msgstr "%s-%s es un rango vacío" + + #: config/ia64/ia64.c:3920 + msgid "cannot optimize division for both latency and throughput" + msgstr "no se puede optimizar la división para latencia y salida al mismo tiempo" + + #. This macro defines names of command options to set and clear bits in + #. `target_flags'. Its definition is an initializer with a subgrouping for + #. each command option. + #: config/ia64/ia64.h:119 + msgid "Generate big endian code" + msgstr "Generar código big endian" + + #: config/ia64/ia64.h:121 config/mcore/mcore.h:159 + msgid "Generate little endian code" + msgstr "Generar código little endian" + + #: config/ia64/ia64.h:123 + msgid "Generate code for GNU as" + msgstr "Generar código para as de GNU" + + #: config/ia64/ia64.h:125 + msgid "Generate code for Intel as" + msgstr "Generar código as de Intel" + + #: config/ia64/ia64.h:127 + msgid "Generate code for GNU ld" + msgstr "Generar código para ld de GNU" + + #: config/ia64/ia64.h:129 + msgid "Generate code for Intel ld" + msgstr "Generar código para ld de Intel" + + #: config/ia64/ia64.h:131 + msgid "Generate code without GP reg" + msgstr "Generar código sin registro GP" + + #: config/ia64/ia64.h:133 + msgid "Emit stop bits before and after volatile extended asms" + msgstr "Emitir bits de parada antes y después de asms extendidos con volatile" + + #: config/ia64/ia64.h:135 + msgid "Don't emit stop bits before and after volatile extended asms" + msgstr "No emitir bits de parada antes y después de asms extendidos con volatile" + + #: config/ia64/ia64.h:137 + msgid "Emit code for Itanium (TM) processor B step" + msgstr "Emitir código para el procesador Itanium (TM) paso B" + + #: config/ia64/ia64.h:139 + msgid "Use in/loc/out register names" + msgstr "Usar nombres de registro in/loc/out" + + #: config/ia64/ia64.h:141 + msgid "Disable use of sdata/scommon/sbss" + msgstr "Desactivar el uso de sdata/scommon/sbss" + + #: config/ia64/ia64.h:143 + msgid "Enable use of sdata/scommon/sbss" + msgstr "Activar el uso de sdata/scommon/sbss" + + #: config/ia64/ia64.h:145 + msgid "gp is constant (but save/restore gp on indirect calls)" + msgstr "gp es constante (pero hay save/restore de gp en llamadas indirectas)" + + #: config/ia64/ia64.h:147 + msgid "Generate self-relocatable code" + msgstr "Generar código auto-reubicable" + + #: config/ia64/ia64.h:149 + msgid "Generate inline division, optimize for latency" + msgstr "Generar división inline, optimizada para latencia" + + #: config/ia64/ia64.h:151 + msgid "Generate inline division, optimize for throughput" + msgstr "Generar división inline, optimizada para salida" + + #: config/ia64/ia64.h:153 + msgid "Enable Dwarf 2 line debug info via GNU as" + msgstr "Activar la información de la línea de depuración Dwarf 2 a través de as de GNU" + + #: config/ia64/ia64.h:155 + msgid "Disable Dwarf 2 line debug info via GNU as" + msgstr "Desactivar la información de la línea de depuración Dwarf 2 a través de as de GNU" + + #: config/ia64/ia64.h:183 + msgid "Specify range of registers to make fixed" + msgstr "Especifica el rango de registros a convertir en fijos" + + #: config/m32r/m32r.c:130 + #, c-format + msgid "bad value (%s) for -mmodel switch" + msgstr "valor erróneo (%s) para el interruptor -mmodel" + + #: config/m32r/m32r.c:139 + #, c-format + msgid "bad value (%s) for -msdata switch" + msgstr "valor erróneo (%s) para el interruptor -msdata" + + #: config/m32r/m32r.c:310 + #, c-format + msgid "invalid argument of `%s' attribute" + msgstr "argumento inválido del atributo `%s'" + + #: config/m32r/m32r.c:408 + msgid "const objects cannot go in .sdata/.sbss" + msgstr "los objetos const no pueden ir en .sdata/.sbss" + + #: config/m32r/m32r.c:2248 + #, c-format + msgid "invalid operand to %%s code" + msgstr "operando inválido para el código %%s" + + #: config/m32r/m32r.c:2255 + #, c-format + msgid "invalid operand to %%p code" + msgstr "operador inválido para el código %%p" + + #: config/m32r/m32r.c:2311 + msgid "bad insn for 'A'" + msgstr "insn erróneo para 'A'" + + #: config/m32r/m32r.c:2363 + #, c-format + msgid "invalid operand to %%T/%%B code" + msgstr "operador inválido para el código %%T/%%B" + + #: config/m32r/m32r.c:2386 + #, c-format + msgid "invalid operand to %%N code" + msgstr "operando inválido para el código %%N" + + #: config/m32r/m32r.c:2431 + msgid "pre-increment address is not a register" + msgstr "la dirección de pre-incremento no es un registro" + + #: config/m32r/m32r.c:2438 + msgid "pre-decrement address is not a register" + msgstr "la dirección de pre-decremento no es un registro" + + #: config/m32r/m32r.c:2445 + msgid "post-increment address is not a register" + msgstr "la dirección de post-incremento no es un registro" + + #: config/m32r/m32r.c:2523 config/m32r/m32r.c:2539 config/rs6000/rs6000.c:11065 + msgid "bad address" + msgstr "dirección errónea" + + #: config/m32r/m32r.c:2544 + msgid "lo_sum not of register" + msgstr "lo_sum no de un registro" + + #. { "relax", TARGET_RELAX_MASK, "" }, { "no-relax", -TARGET_RELAX_MASK, "" }, + #: config/m32r/m32r.h:241 + msgid "Display compile time statistics" + msgstr "Mostrar estadísticas de tiempo de compilación" + + #: config/m32r/m32r.h:243 + msgid "Align all loops to 32 byte boundary" + msgstr "Alinear todos los ciclose al límite de 32 byte" + + #: config/m32r/m32r.h:246 + msgid "Only issue one instruction per cycle" + msgstr "Sólo ejecutar una instrucción por ciclo" + + #: config/m32r/m32r.h:249 + msgid "Prefer branches over conditional execution" + msgstr "Preferir las ramas sobre la ejecución condicional" + + #: config/m32r/m32r.h:265 + msgid "Code size: small, medium or large" + msgstr "Tamaño del código: small, medium o large" + + #: config/m32r/m32r.h:267 + msgid "Small data area: none, sdata, use" + msgstr "Área de datos small: none, sdata, use" + + #: config/m68hc11/m68hc11.c:236 + #, c-format + msgid "-f%s ignored for 68HC11/68HC12 (not supported)" + msgstr "se ignora -f%s para 68HC11/68HC12 (sin soporte)" + + #. !!!! SCz wrong here. + #: config/m68hc11/m68hc11.c:3170 config/m68hc11/m68hc11.c:3544 + msgid "move insn not handled" + msgstr "no se maneja move insn" + + #: config/m68hc11/m68hc11.c:3390 config/m68hc11/m68hc11.c:3474 config/m68hc11/m68hc11.c:3747 + msgid "invalid register in the move instruction" + msgstr "registro inválido en la instrucción move" + + #: config/m68hc11/m68hc11.c:3424 + msgid "invalid operand in the instruction" + msgstr "operando inválido en la instrucción" + + #: config/m68hc11/m68hc11.c:3721 + msgid "invalid register in the instruction" + msgstr "registro inválido en la instrucción" + + #: config/m68hc11/m68hc11.c:3754 + msgid "operand 1 must be a hard register" + msgstr "el operando 1 debe ser un registro fijo" + + # FIXME: ¿O 'rotación de insn inválida'? Revisar en el código. cfuga + #: config/m68hc11/m68hc11.c:3771 + msgid "invalid rotate insn" + msgstr "rotate insn inválido" + + #: config/m68hc11/m68hc11.c:4196 + msgid "registers IX, IY and Z used in the same INSN" + msgstr "se usaron los registros IX, IY y Z en el mismo INSN" + + #: config/m68hc11/m68hc11.c:4521 config/m68hc11/m68hc11.c:4823 + msgid "cannot do z-register replacement" + msgstr "no se puede reemplazar el registro-z" + + #: config/m68hc11/m68hc11.c:4886 + msgid "invalid Z register replacement for insn" + msgstr "reemplazo de registro Z inválido para el insn" + + #. Macro to define tables used to set the flags. This is a list in braces of + #. pairs in braces, each pair being { "NAME", VALUE } where VALUE is the bits + #. to set or minus the bits to clear. An empty string NAME is used to + #. identify the default VALUE. + #: config/m68hc11/m68hc11.h:155 + msgid "Compile with 16-bit integer mode" + msgstr "Compilar con el modo entero de 16-bit" + + #: config/m68hc11/m68hc11.h:157 + msgid "Compile with 32-bit integer mode" + msgstr "Compilar con el modo entero de 32-bit" + + #: config/m68hc11/m68hc11.h:159 + msgid "Auto pre/post decrement increment allowed" + msgstr "Se permite el auto pre/post decremento incremento" + + #: config/m68hc11/m68hc11.h:161 + msgid "Auto pre/post decrement increment not allowed" + msgstr "No se permite el auto pre/post decremento incremento" + + # Ya sé que "soft" se refiere a un tipo de dato no fijo, pero no se me + # ocurre en este momento una mejor traducción. cfuga + #: config/m68hc11/m68hc11.h:163 + msgid "Do not use direct addressing mode for soft registers" + msgstr "No usar modo de direccionamiento directo para los registros suaves" + + #: config/m68hc11/m68hc11.h:165 config/m68hc11/m68hc11.h:169 + msgid "Compile for a 68HC11" + msgstr "Compilar para un 68HC11" + + #: config/m68hc11/m68hc11.h:167 config/m68hc11/m68hc11.h:171 + msgid "Compile for a 68HC12" + msgstr "Compilar para un 68HC12" + + #. This macro is similar to `TARGET_SWITCHES' but defines names of + #. command options that have values. Its definition is an + #. initializer with a subgrouping for each command option. + #. + #. Each subgrouping contains a string constant, that defines the + #. fixed part of the option name, and the address of a variable. The + #. variable, type `char *', is set to the variable part of the given + #. option if the fixed part matches. The actual option name is made + #. by appending `-m' to the specified name. + #: config/m68hc11/m68hc11.h:185 + msgid "Specify the register allocation order" + msgstr "Especificar el orden de asignación de registros" + + #: config/m68hc11/m68hc11.h:187 + msgid "Indicate the number of soft registers available" + msgstr "Indicar el número de registros suaves disponibles" + + #: config/m68k/m68k.c:150 + #, c-format + msgid "-malign-loops=%d is not between 1 and %d" + msgstr "-malign-loops=%d no está entre 1 y %d" + + #: config/m68k/m68k.c:161 + #, c-format + msgid "-malign-jumps=%d is not between 1 and %d" + msgstr "-malign-jumps=%d no está entre 1 y %d" + + #: config/m68k/m68k.c:172 + #, c-format + msgid "-malign-functions=%d is not between 1 and %d" + msgstr "-malign-functions=%d no está entre 1 y %d" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/m68k/m68k.h:162 config/m68k/m68k.h:164 + msgid "Generate code for a 68020" + msgstr "Generar código para un 68020" + + #: config/m68k/m68k.h:169 config/m68k/m68k.h:172 + msgid "Generate code for a 68000" + msgstr "Generar código para un 68000" + + #: config/m68k/m68k.h:174 + msgid "Use the bit-field instructions" + msgstr "Usar las instrucciones de campos de bit" + + #: config/m68k/m68k.h:176 + msgid "Do not use the bit-field instructions" + msgstr "No usar las instrucciones de campos de bit" + + #: config/m68k/m68k.h:178 + msgid "Use different calling convention using 'rtd'" + msgstr "Usar la convención de llamada diferente usando 'rtd'" + + #: config/m68k/m68k.h:182 + msgid "Consider type `int' to be 16 bits wide" + msgstr "Considerar que el tipo `int' es de 16 bits de anchura" + + #: config/m68k/m68k.h:184 + msgid "Consider type `int' to be 32 bits wide" + msgstr "Considerar que el tipo `int' es de 32 bits de anchura" + + #: config/m68k/m68k.h:186 + msgid "Generate code for a Sun FPA" + msgstr "Generar código para un FPA de Sun" + + #: config/m68k/m68k.h:189 + msgid "Do not generate code for a Sun FPA" + msgstr "No generar código para un FPA de Sun" + + #: config/m68k/m68k.h:191 config/m68k/m68k.h:193 + msgid "Generate code for a Sun Sky board" + msgstr "Generar código para una tarjeta Sun Sky" + + #: config/m68k/m68k.h:195 + msgid "Do not use Sky linkage convention" + msgstr "No generar código para una tarjeta Sun Sky" + + #: config/m68k/m68k.h:197 + msgid "Generate code for a 68881" + msgstr "Generar código para un 68881" + + #: config/m68k/m68k.h:200 + msgid "Generate code with library calls for floating point" + msgstr "Generar código con llamadas a bibliotecas para coma flotante" + + #: config/m68k/m68k.h:202 + msgid "Generate code for a 68040, without any new instructions" + msgstr "Generar código para un 68040, sin ninguna instrucción nueva" + + #: config/m68k/m68k.h:205 + msgid "Generate code for a 68060, without any new instructions" + msgstr "Generar código para un 68060, sin ninguna instrucción nueva" + + #: config/m68k/m68k.h:209 + msgid "Generate code for a 68030" + msgstr "Generar código para un 68030" + + #: config/m68k/m68k.h:212 + msgid "Generate code for a 68040" + msgstr "Generar código para un 68040" + + #: config/m68k/m68k.h:216 + msgid "Generate code for a 68060" + msgstr "Generar código para un 68060" + + #: config/m68k/m68k.h:221 + msgid "Generate code for a 520X" + msgstr "Generar código para un 520X" + + #: config/m68k/m68k.h:224 + msgid "Generate code for a 68851" + msgstr "Generar código para un 68851" + + #: config/m68k/m68k.h:226 + msgid "Do no generate code for a 68851" + msgstr "No generar código para un 68851" + + #: config/m68k/m68k.h:229 + msgid "Generate code for a 68302" + msgstr "Generar código para un 68302" + + #: config/m68k/m68k.h:232 + msgid "Generate code for a 68332" + msgstr "Generar código para un 68332" + + #: config/m68k/m68k.h:236 + msgid "Generate code for a cpu32" + msgstr "Generar código para un cpu32" + + #: config/m68k/m68k.h:239 + msgid "Align variables on a 32-bit boundary" + msgstr "Alinear las variables en un límite de 32-bit" + + #: config/m68k/m68k.h:241 + msgid "Align variables on a 16-bit boundary" + msgstr "Alinear las variables en un límite de 16-bit" + + # pc = program counter. cfuga + #: config/m68k/m68k.h:243 + msgid "Generate pc-relative code" + msgstr "Generar código relativo al pc" + + #: config/m68k/m68k.h:245 + msgid "Do not use unaligned memory references" + msgstr "No permitir referencias a memoria sin alinear" + + #: config/m68k/m68k.h:247 + msgid "Use unaligned memory references" + msgstr "Usar referencias a memoria sin alinear" + + #. Sometimes certain combinations of command options do not make + #. sense on a particular target machine. You can define a macro + #. `OVERRIDE_OPTIONS' to take account of this. This macro, if + #. defined, is executed once just after all the command options have + #. been parsed. + #. + #. Don't use this macro to turn on various extra optimizations for + #. `-O'. That is what `OPTIMIZATION_OPTIONS' is for. + #: config/m68k/m68k.h:284 config/m68k/m68kelf.h:267 config/m68k/m68kv4.h:299 + msgid "-fPIC is not currently supported on the 68000 or 68010\n" + msgstr "-fPIC actualmente no tiene soporte en el 68000 o 68010\n" + + #: config/m88k/m88k.c:900 + #, c-format + msgid "internal gcc monitor: short-branch(%x)" + msgstr "monitor interno de gcc: short-branch(%x)" + + #: config/m88k/m88k.c:2300 + msgid "internal gcc error: Can't express symbolic location" + msgstr "error interno de gcc: No se puede expresar la ubicación simbólica" + + #: config/m88k/m88k.c:2582 + #, c-format + msgid "argument #%d is a structure" + msgstr "el argumento #%d es una estructura" + + #: config/m88k/m88k.c:2882 + #, c-format + msgid "%%R not followed by %%B/C/D/E" + msgstr "%%R no es seguido por %%B/C/D/E" + + #: config/m88k/m88k.c:2950 + #, c-format + msgid "invalid %%x/X value" + msgstr "valor %%x/X inválido" + + #: config/m88k/m88k.c:2973 config/rs6000/rs6000.c:6509 + #, c-format + msgid "invalid %%q value" + msgstr "valor %%q inválido" + + #: config/m88k/m88k.c:2979 + #, c-format + msgid "invalid %%o value" + msgstr "valor %%o inválido" + + #: config/m88k/m88k.c:2986 config/rs6000/rs6000.c:6472 + #, c-format + msgid "invalid %%p value" + msgstr "valor %%p inválido" + + #: config/m88k/m88k.c:2999 config/m88k/m88k.c:3004 + #, c-format + msgid "invalid %%s/S value" + msgstr "valor %%s/S inválido" + + #: config/m88k/m88k.c:3015 + #, c-format + msgid "invalid %%P operand" + msgstr "operando %%P inválido" + + #: config/m88k/m88k.c:3046 config/romp/romp.c:682 + #, c-format + msgid "invalid %%B value" + msgstr "valor %%B inválido" + + #: config/m88k/m88k.c:3076 + #, c-format + msgid "invalid %%D value" + msgstr "valor %%D inválido" + + #: config/m88k/m88k.c:3089 + #, c-format + msgid "`%%d' operand isn't a register" + msgstr "el operando `%%d' no es un registro" + + #: config/m88k/m88k.c:3107 + msgid "operand is r0" + msgstr "el operando es r0" + + #: config/m88k/m88k.c:3121 + msgid "operand is const_double" + msgstr "el operando es const_double" + + #: config/m88k/m88k.c:3140 + msgid "invalid code" + msgstr "código inválido" + + #. Do any checking or such that is needed after processing the -m switches. + #: config/m88k/m88k.h:277 + msgid "-mtrap-large-shift and -mhandle-large-shift are incompatible" + msgstr "-mtrap-large-shift y -mhandle-large-shift son incompatibles" + + #: config/m88k/m88k.h:299 + #, c-format + msgid "invalid option `-mshort-data-%s'" + msgstr "opción inválida `-mshort-data-%s'" + + #: config/m88k/m88k.h:304 + #, c-format + msgid "-mshort-data-%s is too large " + msgstr "-mshort-data-%s es demasiado grande " + + #: config/m88k/m88k.h:306 + #, c-format + msgid "-mshort-data-%s and PIC are incompatible" + msgstr "-mshort-data-%s y PIC son incompatibles" + + #: config/mcore/mcore.c:3083 + #, c-format + msgid "invalid option `-mstack-increment=%s'" + msgstr "opción inválida `-mstack-increment=%s'" + + #: config/mcore/mcore.h:126 + msgid "Inline constants if it can be done in 2 insns or less" + msgstr "Constantes inline si pueden ser hechas en 2 insns o menos" + + #: config/mcore/mcore.h:128 + msgid "Inline constants if it only takes 1 instruction" + msgstr "Constantes inline si sólo toman 1 instrucción" + + #: config/mcore/mcore.h:130 + msgid "Set maximum alignment to 4" + msgstr "Establecer la alineación máxima a 4" + + #: config/mcore/mcore.h:132 + msgid "Set maximum alignment to 8" + msgstr "Establecer la alineación máxima a 8" + + #: config/mcore/mcore.h:136 + msgid "Do not use the divide instruction" + msgstr "No usar la instrucción divide" + + # Error de dedo. Avisar a los desarrolladores. cfuga + #: config/mcore/mcore.h:140 + msgid "Do not arbitary sized immediates in bit operations" + msgstr "No mediar en tamaños arbitrarios en operaciones de bit" + + #: config/mcore/mcore.h:142 + msgid "Always treat bit-field as int-sized" + msgstr "Tratar siempre a los campos de bit como de tamaño int" + + #: config/mcore/mcore.h:146 + msgid "Force functions to be aligned to a 4 byte boundary" + msgstr "Forzar que las funciones se alineen a un límite de 4 byte" + + #: config/mcore/mcore.h:148 + msgid "Force functions to be aligned to a 2 byte boundary" + msgstr "Forzar que las funciones se alineen a un límite de 2 byte" + + #: config/mcore/mcore.h:150 + msgid "Emit call graph information" + msgstr "Emitir información de grafo de llamadas" + + #: config/mcore/mcore.h:154 + msgid "Prefer word accesses over byte accesses" + msgstr "Preferir accesos word sobre accessos byte" + + #: config/mcore/mcore.h:165 + msgid "Generate code for the M*Core M340" + msgstr "Generar código para el M*Core M340" + + #: config/mcore/mcore.h:178 + msgid "Maximum amount for a single stack increment operation" + msgstr "Cantidad máxima para una sola operación de incremento de pila" + + #: config/mips/mips.c:4815 + msgid "The -march option is incompatible to -mipsN and therefore ignored." + msgstr "La opción -march es incompatible con -mipsN y por lo tanto se ignora." + + #: config/mips/mips.c:4841 + #, c-format + msgid "-mips%d not supported" + msgstr "-mips%d no tiene soporte" + + #: config/mips/mips.c:4848 + #, c-format + msgid "bad value (%s) for -mips switch" + msgstr "valor erróneo (%s) para el interruptor -mips" + + #: config/mips/mips.c:4869 + #, c-format + msgid "bad value (%s) for -mabi= switch" + msgstr "valor erróneo (%s) para el interruptor -mabi=" + + #: config/mips/mips.c:4907 + #, c-format + msgid "-mabi=%s does not support -mips%d" + msgstr "-mabi=%s no tiene soporte para -mips%d" + + #: config/mips/mips.c:4924 + msgid "this target does not support the -mabi switch" + msgstr "este objetivo no tiene soporte para el interruptor -mabi" + + #: config/mips/mips.c:5034 + #, c-format + msgid "bad value (%s) for -mtune= switch" + msgstr "valor erróneo (%s) para el interruptor -mtune=" + + #: config/mips/mips.c:5044 + #, c-format + msgid "-mips%d does not support 64 bit fp registers" + msgstr "-mips%d not tiene soporte para registros fp de 64 bit" + + #: config/mips/mips.c:5050 + #, c-format + msgid "-mips%d does not support 64 bit gp registers" + msgstr "-mips%d no tiene soporte para registros gp de 64 bit" + + #: config/mips/mips.c:5071 + msgid "-G is incompatible with PIC code which is the default" + msgstr "-G es incompatible con el código PIC el cual es por omisión" + + #: config/mips/mips.c:5087 + msgid "-membedded-pic and -mabicalls are incompatible" + msgstr "-membedded-pic y -mabicalls son incompatibles" + + #: config/mips/mips.c:5090 + msgid "-G and -membedded-pic are incompatible" + msgstr "-G y -membedded-pic son incompatibles" + + #: config/mips/mips.c:5141 + #, c-format + msgid "invalid option `entry%s'" + msgstr "opción inválida `entry%s'" + + #: config/mips/mips.c:5144 + msgid "-mentry is only meaningful with -mips-16" + msgstr "-mentry sólo tiene significado con -mips-16" + + #: config/mips/mips.c:5484 + #, c-format + msgid "internal error: %%) found without a %%( in assembler pattern" + msgstr "error interno: se encontró %%) sin un %%( en el patrón del ensamblador" + + #: config/mips/mips.c:5498 + #, c-format + msgid "internal error: %%] found without a %%[ in assembler pattern" + msgstr "error interno: se encontró %%] sin un %%[ en el patrón del ensamblador" + + #: config/mips/mips.c:5511 + #, c-format + msgid "internal error: %%> found without a %%< in assembler pattern" + msgstr "error interno: se encontró %%> sin un %%< en el patrón del ensamblador" + + #: config/mips/mips.c:5524 + #, c-format + msgid "internal error: %%} found without a %%{ in assembler pattern" + msgstr "error interno: se encontró %%} sin un %%{ en el patrón del ensamblador" + + #: config/mips/mips.c:5538 + #, c-format + msgid "PRINT_OPERAND: unknown punctuation '%c'" + msgstr "PRINT_OPERAND: puntuación desconocida '%c'" + + #: config/mips/mips.c:5547 config/xtensa/xtensa.c:1913 + msgid "PRINT_OPERAND null pointer" + msgstr "PRINT_OPERAND apuntador nulo" + + #: config/mips/mips.c:5680 + #, c-format + msgid "invalid use of %%d, %%x, or %%X" + msgstr "uso inválido de %%d, %%x, o %%X" + + #: config/mips/mips.c:5723 config/xtensa/xtensa.c:2012 + msgid "PRINT_OPERAND_ADDRESS, null pointer" + msgstr "PRINT_OPERAND_ADDRESS, apuntador nulo" + + #: config/mips/mips.c:5947 + msgid "MIPS ECOFF format does not allow changing filenames within functions with #line" + msgstr "el formato ECOFF de MIPS no permite el cambio de nombres de fichero dentro de funciones con #line" + + #: config/mips/mips.c:6261 + msgid "can't rewind temp file" + msgstr "no se puede rebobinar el fichero temporal" + + #: config/mips/mips.c:6265 + msgid "can't write to output file" + msgstr "no se puede escribir al fichero de salida" + + #: config/mips/mips.c:6268 + msgid "can't read from temp file" + msgstr "no se puede leer desde el fichero temporal" + + #: config/mips/mips.c:6271 + msgid "can't close temp file" + msgstr "no se puede cerrar el fichero temporal" + + #: config/mips/mips.c:6704 + #, c-format + msgid "gp_offset (%ld) or end_offset (%ld) is less than zero" + msgstr "gp_offset (%ld) o end_offset (%ld) es menor a cero" + + #: config/mips/mips.c:6866 + #, c-format + msgid "fp_offset (%ld) or end_offset (%ld) is less than zero" + msgstr "fp_offset (%ld) o end_offset (%ld) es menor a cero" + + #: config/mips/mips.c:8927 + #, c-format + msgid "can not handle inconsistent calls to `%s'" + msgstr "no se pueden manejar llamadas inconsistentes a `%s'" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/mips/mips.h:368 config/mn10300/mn10300.h:64 + msgid "No default crt0.o" + msgstr "No está el crt0.o por omisión" + + #: config/mips/mips.h:370 + msgid "Use 64-bit int type" + msgstr "Usar tipo int de 64-bit" + + #: config/mips/mips.h:372 + msgid "Use 64-bit long type" + msgstr "Usar tipo long de 64-bit" + + #: config/mips/mips.h:374 + msgid "Use 32-bit long type" + msgstr "Usar tipo long de 32-bit" + + #: config/mips/mips.h:376 + msgid "Optimize lui/addiu address loads" + msgstr "Optimizar las cargas de las direcciones lui/addiu" + + #: config/mips/mips.h:378 + msgid "Don't optimize lui/addiu address loads" + msgstr "No ptimizar las cargas de las direcciones lui/addiu" + + #: config/mips/mips.h:380 + msgid "Use MIPS as" + msgstr "Utilizar el as de MIPS" + + #: config/mips/mips.h:382 + msgid "Use GNU as" + msgstr "Utilizar el as de GNU" + + #: config/mips/mips.h:384 + msgid "Use symbolic register names" + msgstr "Usar nombres simbólicos de registro" + + #: config/mips/mips.h:386 + msgid "Don't use symbolic register names" + msgstr "No usar nombres simbólicos de registro" + + #: config/mips/mips.h:388 config/mips/mips.h:390 + msgid "Use GP relative sdata/sbss sections" + msgstr "Utilizar secciones sdata/sbss relativas a GP" + + #: config/mips/mips.h:392 config/mips/mips.h:394 + msgid "Don't use GP relative sdata/sbss sections" + msgstr "No utilizar secciones sdata/sbss relativas a GP" + + #: config/mips/mips.h:396 + msgid "Output compiler statistics" + msgstr "Mostrar la salida de estadísticas del compilador" + + #: config/mips/mips.h:398 + msgid "Don't output compiler statistics" + msgstr "No mostrar la salida de estadísticas del compilador" + + #: config/mips/mips.h:400 + msgid "Don't optimize block moves" + msgstr "No optimizar los movimientos de bloques" + + #: config/mips/mips.h:402 + msgid "Optimize block moves" + msgstr "Optimizar los movimientos de bloques" + + #: config/mips/mips.h:404 + msgid "Use mips-tfile asm postpass" + msgstr "Usar el postpase asm mips-tfile" + + #: config/mips/mips.h:406 + msgid "Don't use mips-tfile asm postpass" + msgstr "No usar el postpase asm mips-tfile" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of triplets in braces, + #. each triplet being { "NAME", VALUE, DOC } + #. where VALUE is the bits to set or minus the bits to clear and DOC + #. is the documentation for --help (NULL if intentionally undocumented). + #. An empty string NAME is used to identify the default VALUE. + #: config/mips/mips.h:410 config/pdp11/pdp11.h:55 + msgid "Use hardware floating point" + msgstr "Usar coma flotante de hardware" + + #: config/mips/mips.h:412 + msgid "Use 64-bit FP registers" + msgstr "Usar registros FP de 64-bit" + + #: config/mips/mips.h:414 + msgid "Use 32-bit FP registers" + msgstr "Usar registros FP de 32-bit" + + #: config/mips/mips.h:416 + msgid "Use 64-bit general registers" + msgstr "Usar registros generales de 64-bit" + + #: config/mips/mips.h:418 + msgid "Use 32-bit general registers" + msgstr "Usar registros generales de 32-bit" + + #: config/mips/mips.h:420 + msgid "Use Irix PIC" + msgstr "Usar PIC de Irix" + + #: config/mips/mips.h:422 + msgid "Don't use Irix PIC" + msgstr "No usar PIC de Irix" + + #: config/mips/mips.h:424 + msgid "Use OSF PIC" + msgstr "Usar PIC de OSF" + + #: config/mips/mips.h:426 + msgid "Don't use OSF PIC" + msgstr "No usar PIC de OSF" + + #: config/mips/mips.h:428 + msgid "Use indirect calls" + msgstr "Usar llamadas indirectas" + + #: config/mips/mips.h:430 + msgid "Don't use indirect calls" + msgstr "No usar llamadas indirectas" + + #: config/mips/mips.h:432 + msgid "Use embedded PIC" + msgstr "Usar PIC imbuído" + + #: config/mips/mips.h:434 + msgid "Don't use embedded PIC" + msgstr "No usar PIC imbuído" + + #: config/mips/mips.h:436 + msgid "Use ROM instead of RAM" + msgstr "Usar la ROM en lugar de la RAM" + + #: config/mips/mips.h:438 + msgid "Don't use ROM instead of RAM" + msgstr "No usar la ROM en lugar de la RAM" + + #: config/mips/mips.h:440 + msgid "Put uninitialized constants in ROM (needs -membedded-data)" + msgstr "Poner las constantes sin valor inicial en ROM (necesita -membedded-data)" + + #: config/mips/mips.h:442 + msgid "Don't put uninitialized constants in ROM" + msgstr "No poner las constantes sin valor inicial en ROM" + + #. Macro to define tables used to set the flags. + #: config/mips/mips.h:444 config/xtensa/xtensa.h:110 + msgid "Use big-endian byte order" + msgstr "Usar el orden de byte big-endian" + + #: config/mips/mips.h:446 config/xtensa/xtensa.h:112 + msgid "Use little-endian byte order" + msgstr "Usar el orden de byte little-endian" + + #: config/mips/mips.h:448 + msgid "Use single (32-bit) FP only" + msgstr "Usar únicamente una sola FP (32-bit)" + + #: config/mips/mips.h:450 + msgid "Don't use single (32-bit) FP only" + msgstr "No usar únicamente una sola FP (32-bit)" + + #: config/mips/mips.h:452 + msgid "Use multiply accumulate" + msgstr "Usar el acumulador de multiplicación" + + #: config/mips/mips.h:454 + msgid "Don't use multiply accumulate" + msgstr "No usar el acumulador de multiplicación" + + #: config/mips/mips.h:456 config/rs6000/rs6000.h:351 + msgid "Don't generate fused multiply/add instructions" + msgstr "No generar instrucciones multiply/add de corto circuito" + + #: config/mips/mips.h:458 config/rs6000/rs6000.h:349 + msgid "Generate fused multiply/add instructions" + msgstr "Generar instrucciones multiply/add de corto circuito" + + #: config/mips/mips.h:460 + msgid "Work around early 4300 hardware bug" + msgstr "Evitar el bug del primer hardware 4300" + + #: config/mips/mips.h:462 + msgid "Don't work around early 4300 hardware bug" + msgstr "No evitar el bug del primer hardware 4300" + + #: config/mips/mips.h:464 + msgid "Optimize for 3900" + msgstr "Optimizar para 3900" + + #: config/mips/mips.h:466 + msgid "Optimize for 4650" + msgstr "Optimizar para 4650" + + #: config/mips/mips.h:468 + msgid "Trap on integer divide by zero" + msgstr "Atrapar la división entera por cero" + + #: config/mips/mips.h:470 + msgid "Don't trap on integer divide by zero" + msgstr "No atrapar la división entera por cero" + + #: config/mips/mips.h:472 + msgid "Trap on integer divide overflow" + msgstr "Atrapar desbordamientos en la división entera" + + #: config/mips/mips.h:474 + msgid "Don't trap on integer divide overflow" + msgstr "No atrapar desbordamientos en la división entera" + + #: config/mips/mips.h:590 config/mips/mips.h:592 + msgid "Specify CPU for scheduling purposes" + msgstr "Especificar el CPU para propósitos de calendarización" + + #: config/mips/mips.h:594 + msgid "Specify CPU for code generation purposes" + msgstr "Especificar el CPU para propósitos de generación de código" + + #: config/mips/mips.h:596 + msgid "Specify a Standard MIPS ISA" + msgstr "Especificar el ISA de MIPS Standard" + + # Error de dedo de los desarrolladores originales. Avisar. cfuga + #: config/mips/mips.h:598 + msgid "Use mips16 entry/exit psuedo ops" + msgstr "Usar pseudo ops mips16 de entry/exit" + + #: config/mips/mips.h:600 + msgid "Don't use MIPS16 instructions" + msgstr "No usar instrucciones MIPS16" + + #: config/mips/mips.h:604 + msgid "Don't call any cache flush functions" + msgstr "No llamar ninguna función de limpieza de caché" + + #: config/mips/mips.h:606 + msgid "Specify cache flush function" + msgstr "Especificar la función de limpieza de caché" + + #. Output assembler code to FILE to increment profiler label # LABELNO + #. for profiling a function entry. + #: config/mips/mips.h:2873 + msgid "mips16 function profiling" + msgstr "análisis de perfil de las funciones mips16" + + #: config/mmix/mmix.c:138 + #, c-format + msgid "-f%s not supported: ignored" + msgstr "-f%s no tiene soporte: ignorado" + + #: config/mmix/mmix.c:596 + #, c-format + msgid "too large function value type, needs %d registers, have only %d registers for this" + msgstr "el valor del tipo de la función es demasiado grande, necesita %d registros, sólo se tienen %d registros para esto" + + #: config/mmix/mmix.c:677 + msgid "stack frame too big" + msgstr "marco de pila demasiado grande" + + #: config/mmix/mmix.c:705 + #, c-format + msgid "stack frame not a multiple of 8 bytes: %d" + msgstr "el marco de pila no es un múltiplo de 8 bytes: %d" + + #: config/mmix/mmix.c:1044 + #, c-format + msgid "stack frame not a multiple of octabyte: %d" + msgstr "el marco de pila no es un múltiplo de octabyte: %d" + + #: config/mmix/mmix.c:1203 + msgid "function_profiler support for MMIX" + msgstr "soporte para function_profiler para MMIX" + + #: config/mmix/mmix.c:1240 + msgid "neither varargs or stdarg in mmix_setup_incoming_varargs" + msgstr "no hay varargs ni stdarg en mmix_setup_incoming_varargs" + + #: config/mmix/mmix.c:1246 + msgid "MMIX Internal: Last named vararg would not fit in a register" + msgstr "MMIX Interno: El último vararg nombrado no cabe en un registro" + + #. FIXME: Remove when I know this trigs. + #: config/mmix/mmix.c:1608 + msgid "oops, not debugged; fixing up value:" + msgstr "ups, no depurado; componiendo el valor:" + + #: config/mmix/mmix.c:2184 config/mmix/mmix.c:2318 + msgid "MMIX Internal: Expected a CONST_INT, not this" + msgstr "MMIX Interno: Se esperaba un CONST_INT, no esto" + + #: config/mmix/mmix.c:2192 config/mmix/mmix.c:2216 config/mmix/mmix.c:2335 + #, c-format + msgid "MMIX Internal: Bad register: %d" + msgstr "MMIX Interno: Registro erróneo: %d" + + #: config/mmix/mmix.c:2263 + msgid "MMIX Internal: Bad value for 'm', not a CONST_INT" + msgstr "MMIX Interno: Valor erróneo para 'm', no es un CONST_INT" + + #: config/mmix/mmix.c:2286 + msgid "MMIX Internal: Expected a register, not this" + msgstr "MMIX Interno: Se esperaba un registro, no esto" + + #: config/mmix/mmix.c:2296 + msgid "MMIX Internal: Expected a constant, not this" + msgstr "MMIX Interno: Se esperaba una constante, no esto" + + #. Presumably there's a missing case above if we get here. + #: config/mmix/mmix.c:2328 + #, c-format + msgid "MMIX Internal: Missing `%c' case in mmix_print_operand" + msgstr "MMIX Interno: Falta un case `%c' en mmix_print_operand" + + #. We need the original here. + #: config/mmix/mmix.c:2379 + msgid "MMIX Internal: Cannot decode this operand" + msgstr "MMIX Interno: No se puede decodificar este operando" + + #: config/mmix/mmix.c:2444 + msgid "MMIX Internal: This is not a recognized address" + msgstr "MMIX Interno: Esta no es una dirección reconocida" + + #: config/mmix/mmix.c:2940 config/mmix/mmix.c:3009 + #, c-format + msgid "MMIX Internal: %s is not a shiftable int" + msgstr "MMIX Interno: %s no es un int desplazable" + + #: config/mmix/mmix.c:3128 + msgid "MMIX Internal: Trying to output invalidly reversed condition:" + msgstr "MMIX Interno: Tratando de mostrar una condición invertida de forma inválida:" + + #: config/mmix/mmix.c:3135 + msgid "MMIX Internal: What's the CC of this?" + msgstr "MMIX Interno: ¿Cuál es el CC de esto?" + + #: config/mmix/mmix.c:3139 + msgid "MMIX Internal: What is the CC of this?" + msgstr "MMIX Interno: ¿Cuál es el CC de esto?" + + #: config/mmix/mmix.c:3210 + msgid "MMIX Internal: This is not a constant:" + msgstr "MMIX Interno: Esto no es una constante:" + + #. For these target macros, there is no generic documentation here. You + #. should read `Using and Porting GCC' for that. Only comments specific + #. to the MMIX target are here. + #. + #. There are however references to the specific texinfo node (comments + #. with "Node:"), so there should be little or nothing amiss. Probably + #. the opposite, since we don't have to care about old littering and + #. soon outdated generic comments. + #. Node: Driver + #. When both ABI:s work, this is how we tell them apart in code. The + #. GNU abi is implied the default. Also implied in TARGET_DEFAULT. + #. User symbols are in the same name-space as built-in symbols, but we + #. don't need the built-in symbols, so remove those and instead apply + #. stricter operand checking. Don't warn when expanding insns. + #. Pass on -mset-program-start=N and -mset-data-start=M to the linker. + #. Provide default program start 0x100 unless -mno-set-program-start. + #. Don't do this if linking relocatably, with -r. For a final link, + #. produce mmo, unless ELF is requested or when linking relocatably. + #. Put unused option values here. + #: config/mmix/mmix.h:137 + msgid "Set start-address of the program" + msgstr "Estableciendo la dirección de inicio del programa" + + #: config/mmix/mmix.h:139 + msgid "Set start-address of data" + msgstr "Estableciendo la dirección de inicio de los datos" + + #. FIXME: Provide a way to *load* the epsilon register. + #: config/mmix/mmix.h:188 + msgid "For intrinsics library: pass all parameters in registers" + msgstr "Para la biblioteca de intrínsecos: pasar todos los parámetros en registros" + + #: config/mmix/mmix.h:191 + msgid "Use register stack for parameters and return value" + msgstr "Usar la pila de registros para los parámetros y el valor de devolución" + + #: config/mmix/mmix.h:193 + msgid "Use call-clobbered registers for parameters and return value" + msgstr "Usar registros de llamada alterada para los parámetros y el valor de devolución" + + #: config/mmix/mmix.h:195 + msgid "Use epsilon-respecting floating point compare instructions" + msgstr "Usar instrucciones de comparación de coma flotante que respeten epsilon" + + #: config/mmix/mmix.h:198 + msgid "Use zero-extending memory loads, not sign-extending ones" + msgstr "Usar cargas de memoria de extensión cero, no las de extensión con signo" + + #: config/mmix/mmix.h:201 + msgid "Generate divide results with reminder having the same sign as the divisor (not the dividend)" + msgstr "Generar resultados de división con residuo que tenga el mismo signo que el divisor (no el del dividendo)" + + #: config/mmix/mmix.h:205 + msgid "Prepend global symbols with \":\" (for use with PREFIX)" + msgstr "Preceder a los símbolos globales con \":\" (para usarse con PREFIJO)" + + #: config/mmix/mmix.h:207 + msgid "Do not provide a default start-address 0x100 of the program" + msgstr "No proveer una dirección de inicio por omisión 0x100 del programa" + + #: config/mmix/mmix.h:209 + msgid "Link to emit program in ELF format (rather than mmo)" + msgstr "Enlazar para emitir el programa en formato ELF (en lugar de mmo)" + + #: config/mmix/mmix.h:211 + msgid "Use P-mnemonics for branches statically predicted as taken" + msgstr "Usar Mnemónicos-P para ramificaciones predichas estáticamente como tomadas" + + #: config/mmix/mmix.h:213 + msgid "Don't use P-mnemonics for branches" + msgstr "No usar Mnemónicos-P para ramificaciones" + + #: config/mmix/mmix.h:215 + msgid "Use addresses that allocate global registers" + msgstr "Usar direcciones que reserven registros globales" + + #: config/mmix/mmix.h:217 + msgid "Do not use addresses that allocate global registers" + msgstr "No usar direcciones que reserven registros globales" + + #: config/mn10300/mn10300.h:59 + msgid "Work around hardware multiply bug" + msgstr "Evitar el bug de multiplicación de hardware" + + #: config/mn10300/mn10300.h:60 + msgid "Do not work around hardware multiply bug" + msgstr "No evitar el bug de multiplicación de hardware" + + #: config/mn10300/mn10300.h:61 + msgid "Target the AM33 processor" + msgstr "Apuntar al procesador AM33" + + #: config/mn10300/mn10300.h:65 + msgid "Enable linker relaxations" + msgstr "Activar la relajación del enlazador" + + #: config/ns32k/ns32k.h:104 config/s390/s390.h:57 + msgid "Don't use hardware fp" + msgstr "No usar fp de hardware" + + #: config/ns32k/ns32k.h:105 + msgid "Alternative calling convention" + msgstr "Convención de llamada alternativa" + + #: config/ns32k/ns32k.h:107 + msgid "Pass some arguments in registers" + msgstr "Pasar algunos argumentos en registros" + + #: config/ns32k/ns32k.h:108 + msgid "Pass all arguments on stack" + msgstr "Pasar todos los argumentos en la pila" + + #: config/ns32k/ns32k.h:109 + msgid "Optimize for 32532 cpu" + msgstr "Optimizar para el cpu 32532" + + #: config/ns32k/ns32k.h:110 + msgid "Optimize for 32332 cpu" + msgstr "Optimizar para el cpu 32332" + + #: config/ns32k/ns32k.h:112 + msgid "Optimize for 32032" + msgstr "Optimizar para 32032" + + #: config/ns32k/ns32k.h:114 + msgid "Register sb is zero. Use for absolute addressing" + msgstr "El registro sb es cero. Se usa para direccionamiento absoluto" + + #: config/ns32k/ns32k.h:115 + msgid "Do not use register sb" + msgstr "No usar el registro sb" + + #: config/ns32k/ns32k.h:116 + msgid "Do not use bit-field instructions" + msgstr "No usar instrucciones de campos de bit" + + #: config/ns32k/ns32k.h:117 + msgid "Use bit-field instructions" + msgstr "Usar instrucciones de campos de bit" + + #: config/ns32k/ns32k.h:118 + msgid "Generate code for high memory" + msgstr "Generar código para memoria alta" + + #: config/ns32k/ns32k.h:119 + msgid "Generate code for low memory" + msgstr "Generar código para memoria baja" + + #: config/ns32k/ns32k.h:120 + msgid "32381 fpu" + msgstr "fpu 32381" + + #: config/ns32k/ns32k.h:121 + msgid "Use multiply-accumulate fp instructions" + msgstr "Usar instrucciones de fp para multiplicar-acumular" + + #: config/ns32k/ns32k.h:123 + msgid "Do not use multiply-accumulate fp instructions" + msgstr "No usar instrucciones de fp para multiplicar-acumular" + + #: config/ns32k/ns32k.h:124 + msgid "\"Small register classes\" kludge" + msgstr "Con truco sucio \"Clases de registro pequeñas\"" + + #: config/ns32k/ns32k.h:125 + msgid "No \"Small register classes\" kludge" + msgstr "Sin truco sucio \"Clases de registro pequeñas\"" + + #: config/pa/pa.c:200 + #, c-format + msgid "" + "unknown -mschedule= option (%s).\n" + "Valid options are 700, 7100, 7100LC, 7200, and 8000\n" + msgstr "" + "opción -mschedule= desconocida (%s).\n" + "Las opciones válidas son 700, 7100, 7100LC, 7200, y 8000\n" + + #: config/pa/pa.c:225 + #, c-format + msgid "" + "unknown -march= option (%s).\n" + "Valid options are 1.0, 1.1, and 2.0\n" + msgstr "" + "opción -march= desconocida (%s).\n" + "Las opciones válidas son 1.0, 1.1, y 2.0\n" + + #: config/pa/pa.c:230 + msgid "PIC code generation is not supported in the portable runtime model\n" + msgstr "La generación de código PIC no tiene soporte en el modelo transportable de tiempo de ejecución\n" + + #: config/pa/pa.c:235 + msgid "PIC code generation is not compatible with fast indirect calls\n" + msgstr "La generación de código PIC no es compatible con las llamadas rápidas indirectas\n" + + #: config/pa/pa.c:240 + msgid "-g is only supported when using GAS on this processor," + msgstr "-g sólo tiene soporte cuando se usa GAS en este procesador," + + #: config/pa/pa.c:241 + msgid "-g option disabled" + msgstr "opción -g desactivada" + + #: config/pdp11/pdp11.h:56 + msgid "Do not use hardware floating point" + msgstr "No usar coma flotante de hardware" + + #. return float result in ac0 + #: config/pdp11/pdp11.h:58 + msgid "Return floating point results in ac0" + msgstr "Devolución de resultados de coma flotante en ac0" + + #: config/pdp11/pdp11.h:59 + msgid "Return floating point results in memory" + msgstr "Devolución de resultados de coma flotante en memoria" + + #. is 11/40 + #: config/pdp11/pdp11.h:61 + msgid "Generate code for an 11/40" + msgstr "Generar código para un 11/40" + + #. is 11/45 + #: config/pdp11/pdp11.h:64 + msgid "Generate code for an 11/45" + msgstr "Generar código para un 11/45" + + #. is 11/10 + #: config/pdp11/pdp11.h:67 + msgid "Generate code for an 11/10" + msgstr "Generar código para un 11/10" + + #. use movstrhi for bcopy + #. use 32 bit for int + #: config/pdp11/pdp11.h:72 config/pdp11/pdp11.h:73 + msgid "Use 32 bit int" + msgstr "Usar int de 32 bit" + + #: config/pdp11/pdp11.h:74 config/pdp11/pdp11.h:75 + msgid "Use 16 bit int" + msgstr "Usar int de 16 bit" + + #. use 32 bit for float + #: config/pdp11/pdp11.h:77 config/pdp11/pdp11.h:78 + msgid "Use 32 bit float" + msgstr "Usar float de 32 bit" + + #: config/pdp11/pdp11.h:79 config/pdp11/pdp11.h:80 + msgid "Use 64 bit float" + msgstr "Usar float de 64 bit" + + #. allow abshi pattern? - can trigger "optimizations" which make code SLOW! + #. is branching expensive - on a PDP, it's actually really cheap + #. this is just to play around and check what code gcc generates + #. split instruction and data memory? + #: config/pdp11/pdp11.h:89 + msgid "Target has split I&D" + msgstr "El objetivo tiene I&D dividido" + + #: config/pdp11/pdp11.h:90 + msgid "Target does not have split I&D" + msgstr "El objetivo no tiene I&D dividido" + + #. UNIX assembler syntax? + #: config/pdp11/pdp11.h:92 + msgid "Use UNIX assembler syntax" + msgstr "Usar sintaxis de ensamblador UNIX" + + #: config/pdp11/pdp11.h:93 + msgid "Use DEC assembler syntax" + msgstr "Usar sintaxis de ensamblador DEC" + + #: config/pj/pj.h:73 + msgid "Generate little endian data" + msgstr "Generar datos little endian" + + #: config/pj/pj.h:75 + msgid "Generate big endian data" + msgstr "Generar datos big endian" + + #: config/pj/pj.h:77 + msgid "Turn on maintainer testing code" + msgstr "Activar el código de prueba del mantenedor" + + #: config/pj/pj.h:79 + msgid "Enable Transmeta picoJava extensions" + msgstr "Activar las extensiones picoJava de Transmeta" + + #: config/pj/pj.h:81 + msgid "Disable Transmeta picoJava extensions" + msgstr "Desactivar las extensiones picoJava de Transmeta" + + #: config/pj/pj.h:83 + msgid "Disable reorganization pass" + msgstr "Desactivar el paso de reorganización" + + #: config/romp/romp.c:709 config/rs6000/rs6000.c:6546 + #, c-format + msgid "invalid %%S value" + msgstr "valor %%S inválido" + + #: config/romp/romp.c:718 config/romp/romp.c:725 + #, c-format + msgid "invalid %%b value" + msgstr "valor %%b inválido" + + #: config/romp/romp.c:765 config/romp/romp.c:776 + #, c-format + msgid "invalid %%z value" + msgstr "valor %%z inválido" + + #: config/romp/romp.c:784 config/romp/romp.c:792 + #, c-format + msgid "invalid %%Z value" + msgstr "valor %%Z inválido" + + #: config/romp/romp.c:799 config/romp/romp.c:808 config/romp/romp.c:815 config/rs6000/rs6000.c:6325 + #, c-format + msgid "invalid %%k value" + msgstr "valor %%k inválido" + + #: config/romp/romp.c:900 config/romp/romp.c:943 + #, c-format + msgid "invalid %%j value" + msgstr "valor %%j inválido" + + #. Perform any needed actions needed for a function that is receiving a + #. variable number of arguments. + #. + #. CUM is as above. + #. + #. MODE and TYPE are the mode and type of the current parameter. + #. + #. PRETEND_SIZE is a variable that should be set to the amount of stack + #. that must be pushed by the prolog to pretend that our caller pushed + #. it. + #. + #. Normally, this macro will push all remaining incoming registers on the + #. stack and set PRETEND_SIZE to the length of the registers pushed. + #: config/romp/romp.h:661 + msgid "can't have varargs with -mfp-arg-in-fp-regs" + msgstr "no se puede tener varargs con -mfp-arg-in-fp-regs" + + # FIXME: ¿Traducción correcta al español de little endian? cfuga + #: config/rs6000/rs6000.c:475 + msgid "-mmultiple is not supported on little endian systems" + msgstr "-mmultiple no tiene soporte en sistemas little endian" + + #: config/rs6000/rs6000.c:482 + msgid "-mstring is not supported on little endian systems" + msgstr "-mstring no tiene soporte en sistemas little endian" + + #: config/rs6000/rs6000.c:488 config/xtensa/xtensa.c:1846 + #, c-format + msgid "-f%s ignored (all code is position independent)" + msgstr "se ignora -f%s (todo el código es independiente de posición)" + + #: config/rs6000/rs6000.c:497 + msgid "-ffunction-sections disabled on AIX when debugging" + msgstr "se desactiva -ffunction-sections en AIX mientras se depura" + + #: config/rs6000/rs6000.c:503 + msgid "-fdata-sections not supported on AIX" + msgstr "-fdata-sections no tiene soporte en AIX" + + #: config/rs6000/rs6000.c:518 + #, c-format + msgid "unknown -mdebug-%s switch" + msgstr "interruptor -mdebug-%s desconocido" + + #: config/rs6000/rs6000.c:528 + #, c-format + msgid "Unknown switch -mlong-double-%s" + msgstr "Interruptor -mlong-double-%s desconocido" + + #: config/rs6000/rs6000.c:595 + #, c-format + msgid "unknown ABI specified: '%s'" + msgstr "ABI especificada desconocida: '%s'" + + #: config/rs6000/rs6000.c:3631 + msgid "argument 1 of __builtin_altivec_predicate must be a constant" + msgstr "el argumento 1 de __builtin_altivec_predicate debe ser una constante" + + #: config/rs6000/rs6000.c:3685 + msgid "argument 1 of __builtin_altivec_predicate is out of range" + msgstr "el argumento 1 de __builtin_altivec_predicate está fuera de rango" + + #: config/rs6000/rs6000.c:4041 + #, c-format + msgid "argument 3 of `%s' must be a 2-bit literal" + msgstr "el argumento 3 para `%s' debe ser una literal de 2-bit" + + #: config/rs6000/rs6000.c:6252 + #, c-format + msgid "invalid %%f value" + msgstr "valor %%f inválido" + + #: config/rs6000/rs6000.c:6261 + #, c-format + msgid "invalid %%F value" + msgstr "valor %%F inválido" + + #: config/rs6000/rs6000.c:6270 + #, c-format + msgid "invalid %%G value" + msgstr "valor %%G inválido" + + #: config/rs6000/rs6000.c:6305 + #, c-format + msgid "invalid %%j code" + msgstr "código %%j inválido" + + #: config/rs6000/rs6000.c:6315 + #, c-format + msgid "invalid %%J code" + msgstr "código %%J inválido" + + #: config/rs6000/rs6000.c:6345 + #, c-format + msgid "invalid %%K value" + msgstr "valor %%K inválido" + + #: config/rs6000/rs6000.c:6572 + #, c-format + msgid "%%S computed all 1's mask" + msgstr "%%S calculó una máscara con sólo 1's" + + #: config/rs6000/rs6000.c:6599 + #, c-format + msgid "%%S computed all 0's mask" + msgstr "%%S calculó una máscara con sólo 0's" + + #: config/rs6000/rs6000.c:6609 + #, c-format + msgid "invalid %%T value" + msgstr "valor %%T inválido" + + #: config/rs6000/rs6000.c:6619 + #, c-format + msgid "invalid %%u value" + msgstr "valor %%u inválido" + + #: config/rs6000/rs6000.c:6628 + #, c-format + msgid "invalid %%v value" + msgstr "valor %%v inválido" + + #: config/rs6000/aix.h:137 config/rs6000/beos.h:32 + msgid "Always pass floating-point arguments in memory" + msgstr "Pasar siempre los argumentos de coma flotante en memoria" + + #: config/rs6000/aix.h:139 config/rs6000/beos.h:34 + msgid "Don't always pass floating-point arguments in memory" + msgstr "No pasar siempre los argumentos de coma flotante en memoria" + + #: config/rs6000/aix41.h:28 config/rs6000/aix43.h:32 config/rs6000/aix51.h:32 + msgid "Support message passing with the Parallel Environment" + msgstr "Soporte para el paso de mensajes con el Ambiente Paralelo" + + #: config/rs6000/aix43.h:28 config/rs6000/aix51.h:28 + msgid "Compile for 64-bit pointers" + msgstr "Compilar para apuntadores de 64-bit" + + #: config/rs6000/aix43.h:30 config/rs6000/aix51.h:30 + msgid "Compile for 32-bit pointers" + msgstr "Compilar para apuntadores de 32-bit" + + #: config/rs6000/aix43.h:49 config/rs6000/aix51.h:49 + msgid "-maix64 and POWER architecture are incompatible" + msgstr "-maix64 y la arquitectura POWER son incompatibles" + + #: config/rs6000/aix43.h:54 config/rs6000/aix51.h:54 + msgid "-maix64 requires PowerPC64 architecture remain enabled" + msgstr "-maix64 requiere que la arquitectura PowerPC64 permanezca activada" + + #: config/rs6000/aix43.h:58 config/rs6000/aix51.h:58 + msgid "-maix64 required: 64-bit computation with 32-bit addressing not yet supported" + msgstr "se requiere -maix64: cálculo de 64 bits con direccionamiento de 32 bits no tiene soporte aún" + + #. Run-time compilation parameters selecting different hardware subsets. + #. + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/rs6000/rs6000.h:277 + msgid "Use POWER instruction set" + msgstr "Usar el conjunto de instrucciones POWER" + + #: config/rs6000/rs6000.h:280 + msgid "Use POWER2 instruction set" + msgstr "Usar el conjunto de instrucciones POWER2" + + #: config/rs6000/rs6000.h:282 + msgid "Do not use POWER2 instruction set" + msgstr "No usar el conjunto de instrucciones POWER2" + + #: config/rs6000/rs6000.h:285 + msgid "Do not use POWER instruction set" + msgstr "No usar el conjunto de instrucciones POWER" + + #: config/rs6000/rs6000.h:287 + msgid "Use PowerPC instruction set" + msgstr "Usar el conjunto de instrucciones PowerPC" + + #: config/rs6000/rs6000.h:290 + msgid "Do not use PowerPC instruction set" + msgstr "No usar el conjunto de instrucciones PowerPC" + + #: config/rs6000/rs6000.h:292 + msgid "Use PowerPC General Purpose group optional instructions" + msgstr "Usar el grupo opcional de instrucciones PowerPC de Propósito General" + + #: config/rs6000/rs6000.h:294 + msgid "Don't use PowerPC General Purpose group optional instructions" + msgstr "No usar el grupo opcional de instrucciones PowerPC de Propósito General" + + #: config/rs6000/rs6000.h:296 + msgid "Use PowerPC Graphics group optional instructions" + msgstr "Usar el grupo opcional de instrucciones PowerPC de Gráficas" + + #: config/rs6000/rs6000.h:298 + msgid "Don't use PowerPC Graphics group optional instructions" + msgstr "No usar el grupo opcional de instrucciones PowerPC de Gráficas" + + #: config/rs6000/rs6000.h:300 + msgid "Use PowerPC-64 instruction set" + msgstr "Usar el conjunto de instrucciones PowerPC-64" + + #: config/rs6000/rs6000.h:302 + msgid "Don't use PowerPC-64 instruction set" + msgstr "No usar el conjunto de instrucciones PowerPC-64" + + #: config/rs6000/rs6000.h:304 + msgid "Use AltiVec instructions" + msgstr "Usar instrucciones AltiVec" + + #: config/rs6000/rs6000.h:306 + msgid "Don't use AltiVec instructions" + msgstr "No usar instrucciones AltiVec" + + #: config/rs6000/rs6000.h:308 + msgid "Use new mnemonics for PowerPC architecture" + msgstr "Usar los mnemónicos nuevos para la arquitectura PowerPC" + + #: config/rs6000/rs6000.h:310 + msgid "Use old mnemonics for PowerPC architecture" + msgstr "Usar los mnemónicos antiguos para la arquitectura PowerPC" + + #: config/rs6000/rs6000.h:313 + msgid "Put everything in the regular TOC" + msgstr "Colocar todo en el TOC normal" + + #: config/rs6000/rs6000.h:315 + msgid "Place floating point constants in TOC" + msgstr "Colocar las constantes de coma flotante en TOC" + + #: config/rs6000/rs6000.h:317 + msgid "Don't place floating point constants in TOC" + msgstr "No colocar las constantes de coma flotante en TOC" + + #: config/rs6000/rs6000.h:319 + msgid "Place symbol+offset constants in TOC" + msgstr "Colocar las constantes símbolo+desplazamiento en TOC" + + #: config/rs6000/rs6000.h:321 + msgid "Don't place symbol+offset constants in TOC" + msgstr "No colocar las constantes símbolo+desplazamiento en TOC" + + #: config/rs6000/rs6000.h:327 + msgid "Place variable addresses in the regular TOC" + msgstr "Colocar las direcciones variables en el TOC normal" + + #: config/rs6000/rs6000.h:333 + msgid "Generate load/store multiple instructions" + msgstr "Generar múltiples instrucciones load/store" + + #: config/rs6000/rs6000.h:335 + msgid "Do not generate load/store multiple instructions" + msgstr "No generar múltiples instrucciones load/store" + + #: config/rs6000/rs6000.h:339 + msgid "Generate string instructions for block moves" + msgstr "Generar instrucciones de cadena para movimiento de bloques" + + #: config/rs6000/rs6000.h:341 + msgid "Do not generate string instructions for block moves" + msgstr "No generar instrucciones de cadena para movimiento de bloques" + + #: config/rs6000/rs6000.h:345 + msgid "Generate load/store with update instructions" + msgstr "Generar load/store con instrucciones de actualización" + + #: config/rs6000/rs6000.h:347 + msgid "Do not generate load/store with update instructions" + msgstr "No generar load/store con instrucciones de actualización" + + #: config/rs6000/rs6000.h:355 + msgid "Don't schedule the start and end of the procedure" + msgstr "No calendarizar el inicio y el final del procedimiento" + + #: config/rs6000/rs6000.h:361 + msgid "Return all structures in memory (AIX default)" + msgstr "Regresar todas las estructuras en memoria (por omisión en AIX)" + + #: config/rs6000/rs6000.h:363 + msgid "Return small structures in registers (SVR4 default)" + msgstr "Regresar las estructuras pequeñas en registros (por omisión en SVR4)" + + #: config/rs6000/rs6000.h:426 config/sparc/sparc.h:639 + msgid "Use features of and schedule code for given CPU" + msgstr "Usar características del código de calendarizador and para el CPU dado" + + #: config/rs6000/rs6000.h:429 + msgid "Enable debug output" + msgstr "Activar la salida de depuración" + + #: config/rs6000/rs6000.h:430 + msgid "Specify ABI to use" + msgstr "Especificar el ABI a utilizar" + + #: config/rs6000/rs6000.h:432 + msgid "Specify size of long double (64 or 128 bits)" + msgstr "Especificar el tamaño de long double (64 ó 128 bits)" + + #. Definitions for __builtin_return_address and __builtin_frame_address. + #. __builtin_return_address (0) should give link register (65), enable + #. this. + #. This should be uncommented, so that the link register is used, but + #. currently this would result in unmatched insns and spilling fixed + #. registers so we'll leave it for another day. When these problems are + #. taken care of one additional fetch will be necessary in RETURN_ADDR_RTX. + #. (mrs) + #. #define RETURN_ADDR_IN_PREVIOUS_FRAME + #. Number of bytes into the frame return addresses can be found. See + #. rs6000_stack_info in rs6000.c for more information on how the different + #. abi's store the return address. + #: config/rs6000/rs6000.h:1792 + msgid "RETURN_ADDRESS_OFFSET not supported" + msgstr "RETURN_ADDRESS_OFFSET no tiene soporte" + + #: config/rs6000/sysv4.h:88 + msgid "Select ABI calling convention" + msgstr "Seleccionar la convención de llamada ABI" + + #: config/rs6000/sysv4.h:89 + msgid "Select method for sdata handling" + msgstr "Seleccionar el método para el manejo de sdata" + + #: config/rs6000/sysv4.h:104 + msgid "Align to the base type of the bit-field" + msgstr "Alinear al tipo base del campo de bit" + + #: config/rs6000/sysv4.h:106 + msgid "Don't align to the base type of the bit-field" + msgstr "No alinear al tipo base del campo de bit" + + #: config/rs6000/sysv4.h:108 + msgid "Don't assume that unaligned accesses are handled by the system" + msgstr "No asumir que los accesos sin alinear son manejados por el sistema" + + #: config/rs6000/sysv4.h:110 + msgid "Assume that unaligned accesses are handled by the system" + msgstr "Asumir que los accesos sin alinear son manejados por el sistema" + + #: config/rs6000/sysv4.h:112 config/rs6000/sysv4.h:116 + msgid "Produce code relocatable at runtime" + msgstr "Producir código reubicable en el momento de ejecución" + + #: config/rs6000/sysv4.h:114 config/rs6000/sysv4.h:118 + msgid "Don't produce code relocatable at runtime" + msgstr "No producir código reubicable en el momento de ejecución" + + #: config/rs6000/sysv4.h:120 config/rs6000/sysv4.h:122 + msgid "Produce little endian code" + msgstr "Producir código little endian" + + #: config/rs6000/sysv4.h:124 config/rs6000/sysv4.h:126 + msgid "Produce big endian code" + msgstr "Producir código big endian" + + #: config/rs6000/sysv4.h:127 config/rs6000/sysv4.h:128 config/rs6000/sysv4.h:129 config/rs6000/sysv4.h:130 config/rs6000/sysv4.h:131 config/rs6000/sysv4.h:132 config/rs6000/sysv4.h:142 config/rs6000/sysv4.h:143 config/rs6000/sysv4.h:154 config/rs6000/sysv4.h:155 config/rs6000/sysv4.h:157 + msgid "no description yet" + msgstr "sin descripción aún" + + #: config/rs6000/sysv4.h:133 + msgid "Use EABI" + msgstr "Usar EABI" + + #: config/rs6000/sysv4.h:134 + msgid "Don't use EABI" + msgstr "No usar EABI" + + #: config/rs6000/sysv4.h:137 + msgid "Do not allow bit-fields to cross word boundaries" + msgstr "No permitir que los campos de bits crucen los límites de word" + + #: config/rs6000/sysv4.h:139 + msgid "Use alternate register names" + msgstr "Usar nombres de registro alternados" + + #: config/rs6000/sysv4.h:141 + msgid "Don't use alternate register names" + msgstr "No usar nombres de registro alternados" + + #: config/rs6000/sysv4.h:145 + msgid "Link with libsim.a, libc.a and sim-crt0.o" + msgstr "Enlazar con libsim.a, libc.a y sim-crt0.o" + + #: config/rs6000/sysv4.h:147 + msgid "Link with libads.a, libc.a and crt0.o" + msgstr "Enlazar con libads.a, libc.a y crt0.o" + + #: config/rs6000/sysv4.h:149 + msgid "Link with libyk.a, libc.a and crt0.o" + msgstr "Enlazar con libyk.a, libc.a y crt0.o" + + #: config/rs6000/sysv4.h:151 + msgid "Link with libmvme.a, libc.a and crt0.o" + msgstr "Enlazar con libmvme.a, libc.a y crt0.o" + + #: config/rs6000/sysv4.h:153 + msgid "Set the PPC_EMB bit in the ELF flags header" + msgstr "Establecer el bit PPC_EMB en los interruptores del encabezado ELF" + + #. Sometimes certain combinations of command options do not make sense + #. on a particular target machine. You can define a macro + #. `OVERRIDE_OPTIONS' to take account of this. This macro, if + #. defined, is executed once just after all the command options have + #. been parsed. + #. + #. The macro SUBTARGET_OVERRIDE_OPTIONS is provided for subtargets, to + #. get control. + #: config/rs6000/sysv4.h:214 + #, c-format + msgid "bad value for -mcall-%s" + msgstr "valor erróneo para -mcall-%s" + + #: config/rs6000/sysv4.h:230 + #, c-format + msgid "bad value for -msdata=%s" + msgstr "valor erróneo para -msdata=%s" + + #: config/rs6000/sysv4.h:247 + #, c-format + msgid "-mrelocatable and -msdata=%s are incompatible" + msgstr "-mrelocatable y -msdata=%s son incompatibles" + + #: config/rs6000/sysv4.h:255 + #, c-format + msgid "-f%s and -msdata=%s are incompatible" + msgstr "-f%s y -msdata=%s son incompatibles" + + #: config/rs6000/sysv4.h:263 + #, c-format + msgid "-msdata=%s and -mcall-%s are incompatible" + msgstr "-msdata=%s y -mcall-%s son incompatibles" + + #: config/rs6000/sysv4.h:270 + msgid "-mrelocatable and -mno-minimal-toc are incompatible" + msgstr "-mrelocatable y -mno-minimal-toc son incompatibles" + + #: config/rs6000/sysv4.h:276 + #, c-format + msgid "-mrelocatable and -mcall-%s are incompatible" + msgstr "-mrelocatable y -mcall-%s son incompatibles" + + #: config/rs6000/sysv4.h:283 + #, c-format + msgid "-fPIC and -mcall-%s are incompatible" + msgstr "-fPIC y -mcall-%s son incompatibles" + + #: config/rs6000/sysv4.h:290 + msgid "-mcall-aixdesc must be big endian" + msgstr "-mcall-aixdesc debe ser big endian" + + #: config/s390/s390.c:1910 + msgid "invalid UNSPEC as operand (1)" + msgstr "UNSPEC inválido como operando (1)" + + #: config/s390/s390.c:1940 + msgid "invalid UNSPEC as operand (2)" + msgstr "UNSPEC inválido como operando (2)" + + #: config/s390/s390.c:1946 + msgid "UNKNOWN in s390_output_symbolic_const !?" + msgstr "UNKNOWN en s390_output_symbolic_const !?" + + #: config/s390/s390.c:1962 + msgid "Cannot decompose address." + msgstr "No se puede descomponer la dirección." + + #: config/s390/s390.c:2110 + msgid "UNKNOWN in print_operand !?" + msgstr "UNKNOWN en print_operand !?" + + #: config/s390/s390.c:2703 + msgid "Total size of local variables exceeds architecture limit." + msgstr "El tamaño total de las variables locales excede el límite de la arquitectura." + + #: config/s390/s390.h:58 + msgid "Set backchain" + msgstr "Establecer la cadena hacia atrás" + + #: config/s390/s390.h:59 + msgid "Don't set backchain (faster, but debug harder" + msgstr "No establecer la cadena hacia atrás (más rápido, pero más difícil de depurar" + + # Error de dedo del autor original. Avisar. cfuga + #: config/s390/s390.h:60 + msgid "Use bras for execucable < 64k" + msgstr "Usar bras para el ejecutable < 64k" + + #: config/s390/s390.h:61 + msgid "Don't use bras" + msgstr "No usar bras" + + #: config/s390/s390.h:62 + msgid "Additional debug prints" + msgstr "Impresiones adicionales de depuración" + + #: config/s390/s390.h:63 + msgid "Don't print additional debug prints" + msgstr "No mostrar impresiones adicionales de depuración" + + #: config/s390/s390.h:64 + msgid "64 bit mode" + msgstr "modo de 64 bit" + + #: config/s390/s390.h:65 + msgid "31 bit mode" + msgstr "modo de 31 bit" + + #: config/s390/s390.h:66 + msgid "mvcle use" + msgstr "uso de mvcle" + + #: config/s390/s390.h:67 + msgid "mvc&ex" + msgstr "mvc&ex" + + #: config/sh/sh.c:5060 + msgid "__builtin_saveregs not supported by this subtarget" + msgstr "no se da soporte a __builtin_saveregs en este subobjetivo" + + #. The sp_switch attribute only has meaning for interrupt functions. + #: config/sh/sh.c:5610 config/sh/sh.c:5649 + #, c-format + msgid "`%s' attribute only applies to interrupt functions" + msgstr "el atributo `%s' aplica solamente a funciones de interrupción" + + #. The argument must be a constant string. + #: config/sh/sh.c:5617 + #, c-format + msgid "`%s' attribute argument not a string constant" + msgstr "el argumento del atributo `%s' no es una cadena constante" + + #. The argument must be a constant integer. + #: config/sh/sh.c:5656 + #, c-format + msgid "`%s' attribute argument not an integer constant" + msgstr "el argumento del atributo `%s' no es una constante entera" + + #. There are no delay slots on SHmedia. + #. Relaxation isn't yet supported for SHmedia + #: config/sh/sh.h:367 + msgid "Profiling is not supported on this target." + msgstr "No se da soporte a análisis de perfil en este objetivo." + + #: config/sparc/sparc.c:317 + #, c-format + msgid "%s is not supported by this configuration" + msgstr "%s no tiene soporte en esta configuración" + + #: config/sparc/sparc.c:324 + msgid "-mlong-double-64 not allowed with -m64" + msgstr "no se permite -mlong-double-64 con -m64" + + #: config/sparc/sparc.c:349 + msgid "-mcmodel= is not supported on 32 bit systems" + msgstr "-mcmodel= no tiene soporte en sistemas de 32 bit" + + #: config/sparc/sparc.c:5971 config/sparc/sparc.c:5977 + #, c-format + msgid "invalid %%Y operand" + msgstr "operando %%Y inválido" + + #: config/sparc/sparc.c:6047 + #, c-format + msgid "invalid %%A operand" + msgstr "operando %%A inválido" + + #: config/sparc/sparc.c:6057 + #, c-format + msgid "invalid %%B operand" + msgstr "operando %%B inválido" + + #: config/sparc/sparc.c:6096 + #, c-format + msgid "invalid %%c operand" + msgstr "operando %%c inválido" + + #: config/sparc/sparc.c:6097 + #, c-format + msgid "invalid %%C operand" + msgstr "operando %%C inválido" + + #: config/sparc/sparc.c:6118 + #, c-format + msgid "invalid %%d operand" + msgstr "operando %%d inválido" + + #: config/sparc/sparc.c:6119 + #, c-format + msgid "invalid %%D operand" + msgstr "operando %%D inválido" + + #: config/sparc/sparc.c:6135 + #, c-format + msgid "invalid %%f operand" + msgstr "operando %%f inválido" + + #: config/sparc/sparc.c:6185 + msgid "long long constant not a valid immediate operand" + msgstr "la constante long long no es un operando inmediato válido" + + #: config/sparc/sparc.c:6188 + msgid "floating point constant not a valid immediate operand" + msgstr "la constante de coma flotante no es un operando inmediato válido" + + #: config/sparc/freebsd.h:81 config/sparc/linux.h:87 config/sparc/linux64.h:144 config/sparc/netbsd-elf.h:239 + msgid "Use 128 bit long doubles" + msgstr "Usar long doubles de 128 bit" + + #: config/sparc/sp64-elf.h:84 config/sparc/splet.h:29 + msgid "Generate code for big endian" + msgstr "Generar código para big endian" + + #: config/sparc/sp64-elf.h:85 config/sparc/splet.h:30 + msgid "Generate code for little endian" + msgstr "Generar código para little endian" + + #: config/sparc/sp86x-aout.h:51 config/sparc/sp86x-elf.h:67 + msgid "Use little-endian byte order for data" + msgstr "Usar el orden de byte little-endian para los datos" + + #: config/sparc/sparc.h:539 + msgid "Assume possible double misalignment" + msgstr "Asumir desalineación de double posible" + + #: config/sparc/sparc.h:541 + msgid "Assume all doubles are aligned" + msgstr "Asumir que todos los doubles están alineados" + + #: config/sparc/sparc.h:543 + msgid "Pass -assert pure-text to linker" + msgstr "Pasar el texto puro de -assert al enlazador" + + #: config/sparc/sparc.h:545 + msgid "Do not pass -assert pure-text to linker" + msgstr "No pasar el texto puro de -assert al enlazador" + + #: config/sparc/sparc.h:547 + msgid "Use flat register window model" + msgstr "Usar el modelo plano de ventana de registro" + + #: config/sparc/sparc.h:549 + msgid "Do not use flat register window model" + msgstr "No usar el modelo plano de ventana de registro" + + #: config/sparc/sparc.h:551 + msgid "Use ABI reserved registers" + msgstr "Usar los registros ABI reservados" + + #: config/sparc/sparc.h:553 + msgid "Do not use ABI reserved registers" + msgstr "No usar los registros ABI reservados" + + #: config/sparc/sparc.h:555 + msgid "Use hardware quad fp instructions" + msgstr "Usar instrucciones de fp quad de hardware" + + #: config/sparc/sparc.h:557 + msgid "Do not use hardware quad fp instructions" + msgstr "No usar instrucciones de fp quad de hardware" + + #: config/sparc/sparc.h:559 + msgid "Compile for v8plus ABI" + msgstr "Compilar para el ABI de v8plus" + + #: config/sparc/sparc.h:561 + msgid "Do not compile for v8plus ABI" + msgstr "No compilar para el ABI de v8plus" + + #: config/sparc/sparc.h:563 + msgid "Utilize Visual Instruction Set" + msgstr "Utilizar el Conjunto de Instrucciones Visuales" + + #: config/sparc/sparc.h:565 + msgid "Do not utilize Visual Instruction Set" + msgstr "No utilizar el Conjunto de Instrucciones Visuales" + + #. ??? These are deprecated, coerced to -mcpu=. Delete in 2.9. + #: config/sparc/sparc.h:568 + msgid "Optimize for Cypress processors" + msgstr "Optimizar para los procesadores Cypress" + + #: config/sparc/sparc.h:570 + msgid "Optimize for SparcLite processors" + msgstr "Optimizar para los procesadores SparcLite" + + #: config/sparc/sparc.h:572 + msgid "Optimize for F930 processors" + msgstr "Optimizar para los procesadores F930" + + #: config/sparc/sparc.h:574 + msgid "Optimize for F934 processors" + msgstr "Optimizar para los procesadores F934" + + #: config/sparc/sparc.h:576 + msgid "Use V8 Sparc ISA" + msgstr "Usar el ISA V8 Sparc" + + #: config/sparc/sparc.h:578 + msgid "Optimize for SuperSparc processors" + msgstr "Optimizar para procesadores SuperSparc" + + #. End of deprecated options. + #: config/sparc/sparc.h:581 + msgid "Pointers are 64-bit" + msgstr "Los apuntadores son 64-bit" + + #: config/sparc/sparc.h:583 + msgid "Pointers are 32-bit" + msgstr "Los apuntadores son 32-bit" + + #: config/sparc/sparc.h:585 + msgid "Use 32-bit ABI" + msgstr "Usar ABI de 32-bit" + + #: config/sparc/sparc.h:587 + msgid "Use 64-bit ABI" + msgstr "Usar ABI de 64-bit" + + #: config/sparc/sparc.h:589 + msgid "Use stack bias" + msgstr "Usar tendencia de la pila" + + #: config/sparc/sparc.h:591 + msgid "Do not use stack bias" + msgstr "No usar la tendencia de la pila" + + #: config/sparc/sparc.h:593 + msgid "Use structs on stronger alignment for double-word copies" + msgstr "Usar structs en alineación más fuerte para copias double-word" + + #: config/sparc/sparc.h:595 + msgid "Do not use structs on stronger alignment for double-word copies" + msgstr "No usar structs en alineación más fuerte para copias double-word" + + #: config/sparc/sparc.h:597 + msgid "Optimize tail call instructions in assembler and linker" + msgstr "Optimizar las instrucciones de la llamada del extremo en el ensamblador y el enlazador" + + #: config/sparc/sparc.h:599 + msgid "Do not optimize tail call instructions in assembler or linker" + msgstr "No optimizar las instrucciones de la llamada del extremo en el ensamblador y el enlazador" + + #: config/sparc/sparc.h:643 + msgid "Use given Sparc code model" + msgstr "Usar el modelo de código del Sparc dado" + + #: config/stormy16/stormy16.c:1179 + msgid "cannot use va_start in interrupt function" + msgstr "no se puede usar va_start en una función de interrupción" + + #: config/stormy16/stormy16.c:1536 + msgid "`B' operand is not constant" + msgstr "el operando `B' no es una constante" + + #: config/stormy16/stormy16.c:1542 + msgid "`B' operand has multiple bits set" + msgstr "el operando `B' tiene establecidos múltiples bits" + + #: config/stormy16/stormy16.c:1569 + msgid "`o' operand is not constant" + msgstr "el operando `o' no es una constante" + + #: config/stormy16/stormy16.c:1584 + msgid "xstormy16_print_operand: unknown code" + msgstr "xstormy16_print_operand: código desconocido" + + #: config/stormy16/stormy16.c:1634 + #, c-format + msgid "switch statement of size %lu entries too large" + msgstr "la declaración switch de tamaño de %lu entradas es demasiado grande" + + #: config/v850/v850-c.c:68 + msgid "#pragma GHS endXXXX found without previous startXXX" + msgstr "se encontró un #pragma GHS endXXXX sin un startXXX previo" + + #: config/v850/v850-c.c:70 + msgid "#pragma GHS endXXX does not match previous startXXX" + msgstr "el #pragma GHS endXXXX no coincide con el startXXX previo" + + #: config/v850/v850-c.c:95 + msgid "cannot set interrupt attribute: no current function" + msgstr "no se puede establecer el atributo de interrupción: no hay función actual" + + #: config/v850/v850-c.c:103 + msgid "cannot set interrupt attribute: no such identifier" + msgstr "no se puede establecer el atributo de interrupción: no hay tal identificador" + + #: config/v850/v850-c.c:149 + msgid "junk at end of #pragma ghs section" + msgstr "basura al final de la sección #pragma ghs" + + #: config/v850/v850-c.c:166 + #, c-format + msgid "unrecognized section name \"%s\"" + msgstr "no se reconoce el nombre de sección \"%s\"" + + #: config/v850/v850-c.c:181 + msgid "malformed #pragma ghs section" + msgstr "sección #pragma ghs malformada" + + #: config/v850/v850-c.c:201 + msgid "junk at end of #pragma ghs interrupt" + msgstr "basura al final del #pragma ghs interrupt" + + #: config/v850/v850-c.c:213 + msgid "junk at end of #pragma ghs starttda" + msgstr "basura al final del #pragma ghs starttda" + + #: config/v850/v850-c.c:225 + msgid "junk at end of #pragma ghs startsda" + msgstr "basura al final del #pragma ghs startsda" + + #: config/v850/v850-c.c:237 + msgid "junk at end of #pragma ghs startzda" + msgstr "basura al final del #pragma ghs startzda" + + #: config/v850/v850-c.c:249 + msgid "junk at end of #pragma ghs endtda" + msgstr "basura al final del #pragma ghs endtda" + + #: config/v850/v850-c.c:261 + msgid "junk at end of #pragma ghs endsda" + msgstr "basura al final del #pragma ghs endsda" + + #: config/v850/v850-c.c:273 + msgid "junk at end of #pragma ghs endzda" + msgstr "basura al final del #pragma ghs endzda" + + #: config/v850/v850.c:122 + #, c-format + msgid "%s=%s is not numeric" + msgstr "%s=%s no es numérico" + + #: config/v850/v850.c:129 + #, c-format + msgid "%s=%s is too large" + msgstr "%s=%s es demasiado grande" + + #: config/v850/v850.c:285 + msgid "const_double_split got a bad insn:" + msgstr "const_double_split recibió un insn erróneo:" + + #: config/v850/v850.c:777 + msgid "output_move_single:" + msgstr "output_move_single:" + + #: config/v850/v850.c:2084 + msgid "a data area attribute cannot be specified for local variables" + msgstr "no se puede especificar un atributo de área de datos para variables locales" + + #: config/v850/v850.c:2095 + #, c-format + msgid "data area of '%s' conflicts with previous declaration" + msgstr "el área de datos de '%s' en conflicto con una declaración previa" + + #: config/v850/v850.c:2298 + #, c-format + msgid "bogus JR construction: %d\n" + msgstr "construcción JR ambigua: %d\n" + + #: config/v850/v850.c:2319 config/v850/v850.c:2521 + #, c-format + msgid "bad amount of stack space removal: %d" + msgstr "cantidad errónea de eliminación de espacio de pila: %d" + + #: config/v850/v850.c:2497 + #, c-format + msgid "bogus JARL construction: %d\n" + msgstr "construcción JARL ambigua: %d\n" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/v850/v850.h:120 + msgid "Support Green Hills ABI" + msgstr "Soporte para el ABI Green Hills" + + #: config/v850/v850.h:123 + msgid "Prohibit PC relative function calls" + msgstr "Prohibir la llamada a funciones relativas al PC" + + #: config/v850/v850.h:126 + msgid "Reuse r30 on a per function basis" + msgstr "Reusar r30 basado por función" + + #: config/v850/v850.h:129 + msgid "Use stubs for function prologues" + msgstr "Usar cabos para los prólogos de función" + + #: config/v850/v850.h:132 + msgid "Same as: -mep -mprolog-function" + msgstr "Igual que: -mep -mprolog-function" + + # No me gusta mucho esta traducción. cfuga + #: config/v850/v850.h:133 + msgid "Enable backend debugging" + msgstr "Habilitar la depuración del extremo trasero" + + #: config/v850/v850.h:135 + msgid "Compile for the v850 processor" + msgstr "Compilar para el procesador v850" + + #: config/v850/v850.h:138 + msgid "Use 4 byte entries in switch tables" + msgstr "Usar entradas de 4 byte en las tablas de switch" + + #: config/v850/v850.h:164 + msgid "Set the max size of data eligible for the TDA area" + msgstr "Establecer el tamaño máximo de datos elegibles para el área TDA" + + #: config/v850/v850.h:167 + msgid "Set the max size of data eligible for the SDA area" + msgstr "Establecer el tamaño máximo de datos elegibles para el área SDA" + + #: config/v850/v850.h:170 + msgid "Set the max size of data eligible for the ZDA area" + msgstr "Establecer el tamaño máximo de datos elegibles para el área ZDA" + + #: config/xtensa/xtensa.c:1048 config/xtensa/xtensa.c:1082 config/xtensa/xtensa.c:1091 + msgid "bad test" + msgstr "prueba errónea" + + #: config/xtensa/xtensa.c:1790 + msgid "boolean registers required for the floating-point option" + msgstr "se requieren registros booleanos para la opción de coma flotante" + + #: config/xtensa/xtensa.c:1965 + msgid "invalid mask" + msgstr "máscara inválida" + + #: config/xtensa/xtensa.c:2017 + msgid "invalid address" + msgstr "dirección inválida" + + #: config/xtensa/xtensa.c:2042 + msgid "no register in address" + msgstr "no hay registro en la dirección" + + #: config/xtensa/xtensa.c:2050 + msgid "address offset not a constant" + msgstr "el desplazamiento de dirección no es una constante" + + #: config/xtensa/xtensa.h:114 + msgid "Use the Xtensa code density option" + msgstr "Usar la opción de densidad del código Xtensa" + + #: config/xtensa/xtensa.h:116 + msgid "Do not use the Xtensa code density option" + msgstr "No usar la opción de densidad del código Xtensa" + + #: config/xtensa/xtensa.h:118 + msgid "Use the Xtensa MAC16 option" + msgstr "Usar la opción MAC16 de Xtensa" + + #: config/xtensa/xtensa.h:120 + msgid "Do not use the Xtensa MAC16 option" + msgstr "No usar la opción MAC16 de Xtensa" + + #: config/xtensa/xtensa.h:122 + msgid "Use the Xtensa MUL16 option" + msgstr "Usar la opción MUL16 de Xtensa" + + #: config/xtensa/xtensa.h:124 + msgid "Do not use the Xtensa MUL16 option" + msgstr "No usar la opción MUL16 de Xtensa" + + #: config/xtensa/xtensa.h:126 + msgid "Use the Xtensa MUL32 option" + msgstr "Usar la opción MUL32 de Xtensa" + + #: config/xtensa/xtensa.h:128 + msgid "Do not use the Xtensa MUL32 option" + msgstr "No usar la opción MUL32 de Xtensa" + + #. undocumented + #. undocumented + #: config/xtensa/xtensa.h:134 + msgid "Use the Xtensa NSA option" + msgstr "Usar la opción NSA de Xtensa" + + #: config/xtensa/xtensa.h:136 + msgid "Do not use the Xtensa NSA option" + msgstr "No usar la opción NSA de Xtensa" + + #: config/xtensa/xtensa.h:138 + msgid "Use the Xtensa MIN/MAX option" + msgstr "Usar la opción MIN/MAX de Xtensa" + + #: config/xtensa/xtensa.h:140 + msgid "Do not use the Xtensa MIN/MAX option" + msgstr "No usar la opción MIN/MAX de Xtensa" + + #: config/xtensa/xtensa.h:142 + msgid "Use the Xtensa SEXT option" + msgstr "Usar la opción SEXT de Xtensa" + + #: config/xtensa/xtensa.h:144 + msgid "Do not use the Xtensa SEXT option" + msgstr "No usar la opción SEXT de Xtensa" + + #: config/xtensa/xtensa.h:146 + msgid "Use the Xtensa boolean register option" + msgstr "Usar la opción de registro booleano de Xtensa" + + #: config/xtensa/xtensa.h:148 + msgid "Do not use the Xtensa boolean register option" + msgstr "No usar la opción de registro booleano de Xtensa" + + #: config/xtensa/xtensa.h:150 + msgid "Use the Xtensa floating-point unit" + msgstr "Usar la unidad de coma flotante de Xtensa" + + #: config/xtensa/xtensa.h:152 + msgid "Do not use the Xtensa floating-point unit" + msgstr "No usar la unidad de coma flotante de Xtensa" + + #. undocumented + #. undocumented + #. undocumented + #. undocumented + #. undocumented + #. undocumented + #. undocumented + #. undocumented + #: config/xtensa/xtensa.h:170 + msgid "Disable fused multiply/add and multiply/subtract FP instructions" + msgstr "Desactivar las instrucciones FP multiply/add y multiply/substract de corto circuito" + + #: config/xtensa/xtensa.h:172 + msgid "Enable fused multiply/add and multiply/subtract FP instructions" + msgstr "Activar las instrucciones FP multiply/add y multiply/substract de corto circuito" + + #: config/xtensa/xtensa.h:174 + msgid "Serialize volatile memory references with MEMW instructions" + msgstr "Serializar las referencias a memoria volátil con instrucciones MEMW" + + #: config/xtensa/xtensa.h:176 + msgid "Do not serialize volatile memory references with MEMW instructions" + msgstr "No serializar las referencias a memoria volátil con instrucciones MEMW" + + #: config/xtensa/xtensa.h:178 + msgid "Intersperse literal pools with code in the text section" + msgstr "Entremezclar los conjuntos de literales con código en la sección de texto" + + #: config/xtensa/xtensa.h:180 + msgid "Put literal pools in a separate literal section" + msgstr "Poner los conjuntos de literales en una sección literal separada" + + #: config/xtensa/xtensa.h:182 + msgid "Automatically align branch targets to reduce branch penalties" + msgstr "Alinear automáticamente los objetivos de las ramificaciones para reducir las faltas de ramificación" + + #: config/xtensa/xtensa.h:184 + msgid "Do not automatically align branch targets" + msgstr "No alinear automáticamente los objetivos de las ramificaciones" + + #: config/xtensa/xtensa.h:186 + msgid "Use indirect CALLXn instructions for large programs" + msgstr "Usar instrucciones CALLXn indirectas para programas grandes" + + #: config/xtensa/xtensa.h:188 + msgid "Use direct CALLn instructions for fast calls" + msgstr "Usar instrucciones CALLn directas para llamadas rápidas" + + #: ada/misc.c:219 + msgid "`-gnat' misspelled as `-gant'" + msgstr "`-gnat' mal deletreado como `-gant'" + + #: cp/call.c:270 cp/init.c:1635 + msgid "qualified type `%T' does not match destructor name `~%T'" + msgstr "el tipo calificado `%T' no coincide con el nombre del destructor `~%T'" + + #: cp/call.c:279 + msgid "type of `%E' does not match destructor type `%T' (type was `%T')" + msgstr "el tipo de `%E' no coincide con el tipo del destructor `%T' (el tipo era `%T')" + + #: cp/call.c:288 + msgid "`%D' is a namespace" + msgstr "`%D' es un nombre de espacio" + + #: cp/call.c:296 + msgid "base object `%E' of scoped method call is of non-aggregate type `%T'" + msgstr "el objeto base `%E' de la llamada de método del ambiente es del tipo no agregado `%T'" + + #: cp/call.c:394 + msgid "unable to call pointer to member function here" + msgstr "no se puede llamar un apuntador a una función miembro aquí" + + #: cp/call.c:530 + msgid "destructors take no parameters" + msgstr "los destructores no tienen parámetros" + + #: cp/call.c:537 + msgid "destructor name `~%T' does not match type `%T' of expression" + msgstr "el nombre del destructor `~%T' no coincide con el tipo `%T' de la expresión" + + #: cp/call.c:2374 + msgid "%s %D(%T, %T, %T) " + msgstr "%s %D(%T, %T, %T) " + + #: cp/call.c:2379 + msgid "%s %D(%T, %T) " + msgstr "%s %D(%T, %T) " + + #: cp/call.c:2383 + msgid "%s %D(%T) " + msgstr "%s %D(%T) " + + #: cp/call.c:2387 + msgid "%s %T " + msgstr "%s %T " + + #: cp/call.c:2389 + msgid "%s %+#D%s" + msgstr "%s %+#D%s" + + #: cp/call.c:2546 + msgid "no viable candidates" + msgstr "no hay candidatos viables" + + #: cp/call.c:2560 + msgid "conversion from `%T' to `%T' is ambiguous" + msgstr "la conversión de `%T' a `%T' es ambigua" + + #: cp/call.c:2677 + msgid "no matching function for call to `%D(%A)'" + msgstr "no hay una función coincidente para la llamada a `%D(%A)'" + + #: cp/call.c:2688 cp/call.c:4681 + msgid "call of overloaded `%D(%A)' is ambiguous" + msgstr "la llamada del `%D(%A)' sobrecargado es ambigua" + + #. It's no good looking for an overloaded operator() on a + #. pointer-to-member-function. + #: cp/call.c:2715 + #, c-format + msgid "pointer-to-member function %E cannot be called without an object; consider using .* or ->*" + msgstr "la función apuntador-a-miembro %E no se puede llamar dentro de un objeto; considere utilizar .* o ->*" + + #: cp/call.c:2784 + msgid "no match for call to `(%T) (%A)'" + msgstr "no hay coincidencia para la llamada a `(%T) (%A)'" + + #: cp/call.c:2794 + msgid "call of `(%T) (%A)' is ambiguous" + msgstr "la llamada de `(%T) (%A)' es ambigua" + + #: cp/call.c:2829 + msgid "%s for `%T ? %T : %T' operator" + msgstr "%s para el operador `%T ? %T : %T'" + + #: cp/call.c:2834 + msgid "%s for `%T %s' operator" + msgstr "%s para el operador `%T %s'" + + #: cp/call.c:2837 + msgid "%s for `%T [%T]' operator" + msgstr "%s para el operador `%T [%T]'" + + #: cp/call.c:2842 + msgid "%s for `%T %s %T' operator" + msgstr "%s para el operador `%T %s %T'" + + #: cp/call.c:2845 + msgid "%s for `%s %T' operator" + msgstr "%s para el operador `%s %T'" + + #: cp/call.c:2937 + msgid "ISO C++ forbids omitting the middle term of a ?: expression" + msgstr "ISO C++ prohibe la omisión del término medio de una expresión ?:" + + #: cp/call.c:2996 + #, c-format + msgid "`%E' has type `void' and is not a throw-expression" + msgstr "`%E' tiene tipo `void' y no es una expresión throw" + + #: cp/call.c:3029 cp/call.c:3229 + msgid "operands to ?: have different types" + msgstr "los operandos de ?: tienen tipos diferentes" + + #: cp/call.c:3182 + msgid "enumeral mismatch in conditional expression: `%T' vs `%T'" + msgstr "no coincide el enumeral en la expresión condicional: `%T' vs `%T'" + + #: cp/call.c:3189 + msgid "enumeral and non-enumeral type in conditional expression" + msgstr "tipos enumeral y no enumeral en la expresión condicional" + + #: cp/call.c:3270 + msgid "`%D' must be declared before use" + msgstr "se debe declarar `%D' antes de su uso" + + #: cp/call.c:3433 + msgid "no `%D(int)' declared for postfix `%s', trying prefix operator instead" + msgstr "no se declaró `%D(int)' para el `%s' postfijo, intentando en su lugar el operador prefijo" + + #: cp/call.c:3480 + msgid "using synthesized `%#D' for copy assignment" + msgstr "usando `%#D' sintetizado para asignación de copia" + + #: cp/call.c:3482 + msgid " where cfront would use `%#D'" + msgstr " donde cfront podría usar `%#D'" + + #: cp/call.c:3509 + msgid "comparison between `%#T' and `%#T'" + msgstr "comparación entre `%#T' y `%#T'" + + #: cp/call.c:3748 + msgid "no suitable `operator delete' for `%T'" + msgstr "no hay un operador `operator delete' adecuado para `%T'" + + #: cp/call.c:3767 + msgid "`%+#D' is private" + msgstr "`%+#D' es privado" + + #: cp/call.c:3769 + msgid "`%+#D' is protected" + msgstr "`%+#D' está protegido" + + #: cp/call.c:3771 + msgid "`%+#D' is inaccessible" + msgstr "`%+#D' es inaccesible" + + #: cp/call.c:3772 + msgid "within this context" + msgstr "desde este contexto" + + #: cp/call.c:3814 + msgid "invalid conversion from `%T' to `%T'" + msgstr "conversión inválida de `%T' a `%T'" + + #: cp/call.c:3816 cp/call.c:3955 cp/call.c:3957 + msgid " initializing argument %P of `%D'" + msgstr " argumento de iniciación %P de `%D'" + + #: cp/call.c:3879 cp/call.c:3883 + msgid " initializing argument %P of `%D' from result of `%D'" + msgstr " argumento de iniciación %P de `%D' a partir del resultado de `%D'" + + #: cp/call.c:3889 cp/call.c:3892 + msgid " initializing temporary from result of `%D'" + msgstr " iniciando el temporal a partir del resultado de `%D'" + + #. Undefined behaviour [expr.call] 5.2.2/7. + #: cp/call.c:4026 + msgid "cannot pass objects of non-POD type `%#T' through `...'" + msgstr "no se puede pasar objetos de tipo `%#T' que no es POD a través de `...'" + + #. Undefined behaviour [expr.call] 5.2.2/7. + #: cp/call.c:4051 + msgid "cannot receive objects of non-POD type `%#T' through `...'" + msgstr "no se puede recibir objetos de tipo `%#T' que no es POD a través de `...'" + + #: cp/call.c:4193 + msgid "passing `%T' as `this' argument of `%#D' discards qualifiers" + msgstr "pasar `%T' como el argumento `this' de `%#D' descarta a los calificadores" + + #: cp/call.c:4443 + msgid "could not find class$ field in java interface type `%T'" + msgstr "no se pudo encontrar un campo class$ en el tipo de interfaz java `%T'" + + #: cp/call.c:4544 cp/typeck.c:2018 + msgid "request for member `%D' in `%E', which is of non-aggregate type `%T'" + msgstr "solicitud por el miembro `%D' en `%E' el cual es del tipo no agregado `%T'" + + #: cp/call.c:4670 + msgid "no matching function for call to `%T::%D(%A)%#V'" + msgstr "no se encuentra una función coincidente para la llamada a `%T::%D(%A)%#V'" + + #: cp/call.c:4700 + msgid "cannot call member function `%D' without object" + msgstr "no se puede llamar a la función miembro `%D' sin un objeto" + + #: cp/call.c:5313 + msgid "passing `%T' chooses `%T' over `%T'" + msgstr "pasar `%T' escoge `%T'n sobre `%T'" + + #: cp/call.c:5315 cp/decl2.c:4508 + msgid " in call to `%D'" + msgstr " en la llamada a `%D'" + + #: cp/call.c:5364 cp/call.c:5489 + msgid "choosing `%D' over `%D'" + msgstr "escogiendo `%D' sobre `%D'" + + #: cp/call.c:5365 + msgid " for conversion from `%T' to `%T'" + msgstr " para la conversión de `%T' a `%T'" + + #: cp/call.c:5367 + msgid " because conversion sequence for the argument is better" + msgstr " porque la secuencia de conversión para el argumento es mejor" + + #: cp/call.c:5491 + msgid " because worst conversion for the former is better than worst conversion for the latter" + msgstr " porque la peor conversión para el anterior es mejor que la peor conversión para el posterior" + + #: cp/call.c:5607 cp/call.c:5628 + msgid "could not convert `%E' to `%T'" + msgstr "no se puede convertir `%E' a `%T'" + + #: cp/class.c:287 + msgid "cannot convert from base `%T' to derived type `%T' via virtual base `%T'" + msgstr "no se puede convertir de la base `%T' al tipo derivado `%T' a través de la base virtual `%T'" + + #: cp/class.c:1020 + msgid "`%#D' and `%#D' cannot be overloaded" + msgstr "no se pueden sobrecargar `%#D' y `%#D'" + + #. There has already been a declaration of this method + #. or member template. + #: cp/class.c:1031 + msgid "`%D' has already been declared in `%T'" + msgstr "`%D' ya ha sido declarado en `%T'" + + #: cp/class.c:1112 + msgid "duplicate enum value `%D'" + msgstr "valor enum duplicado `%D'" + + #: cp/class.c:1115 + msgid "duplicate field `%D' (as enum and non-enum)" + msgstr "campo duplicado `%D' (como enum y no enum)" + + #: cp/class.c:1122 + msgid "duplicate nested type `%D'" + msgstr "tipo anidado duplicado `%D'" + + #: cp/class.c:1133 + msgid "duplicate field `%D' (as type and non-type)" + msgstr "campo duplicado `%D' (como tipo y no tipo)" + + #: cp/class.c:1137 + msgid "duplicate member `%D'" + msgstr "miembro duplicado `%D'" + + #: cp/class.c:1180 + msgid "conflicting access specifications for method `%D', ignored" + msgstr "especificaciones de acceso en conflicto para el método `%D', ignorado" + + #: cp/class.c:1182 + #, c-format + msgid "conflicting access specifications for field `%s', ignored" + msgstr "especificaciones de acceso en conflicto para el campo `%s', ignorado" + + #: cp/class.c:1225 + msgid "`%D' names constructor" + msgstr "`%D' nombra al constructor" + + #: cp/class.c:1231 + msgid "`%D' invalid in `%T'" + msgstr "`%D' inválido en `%T'" + + #: cp/class.c:1239 + msgid "no members matching `%D' in `%#T'" + msgstr "no hay miembros que coincidan con `%D' en `%#T'" + + #: cp/class.c:1271 cp/class.c:1279 + msgid "`%D' invalid in `%#T'" + msgstr "`%D' inválido en `%#T'" + + #: cp/class.c:1272 + msgid " because of local method `%#D' with same name" + msgstr " debido al método local `%#D' con el mismo nombre" + + #: cp/class.c:1280 + msgid " because of local member `%#D' with same name" + msgstr " debido al miembro local `%#D' con el mismo nombre" + + #: cp/class.c:1352 + msgid "base class `%#T' has a non-virtual destructor" + msgstr "la clase base `%#T' tiene un destructor no virtual" + + #: cp/class.c:1372 + msgid "base `%T' with only non-default constructor in class without a constructor" + msgstr "base `%T' con sólo un constructor que no es por omisión en una clase sin un constructor" + + #: cp/class.c:1959 + msgid "all member functions in class `%T' are private" + msgstr "todos las funciones miembros en la clase `%T' son privadas" + + #: cp/class.c:1973 + msgid "`%#T' only defines a private destructor and has no friends" + msgstr "`%#T' solamente define un destructor privado y no tiene friends" + + #: cp/class.c:2016 + msgid "`%#T' only defines private constructors and has no friends" + msgstr "`%#T' solamente define constructores privados y no tiene friends" + + #: cp/class.c:2137 cp/class.c:5064 + msgid "redefinition of `%#T'" + msgstr "redefinición de `%#T'" + + #: cp/class.c:2138 + msgid "previous definition of `%#T'" + msgstr "definición previa de `%#T'" + + # Ojo, no es impostor, sino impositor, el que impone. cfuga + #: cp/class.c:2468 + msgid "no unique final overrider for `%D' in `%T'" + msgstr "no hay un impositor único final para `%D' en `%T'" + + #. Here we know it is a hider, and no overrider exists. + #: cp/class.c:2850 + msgid "`%D' was hidden" + msgstr "`%D' estaba escondido" + + #: cp/class.c:2851 + msgid " by `%D'" + msgstr " por `%D'" + + #: cp/class.c:2893 + msgid "ISO C++ forbids member `%D' with same name as enclosing class" + msgstr "ISO C++ prohibe que el miembro `%D' tenga el mismo nombre que la clase que lo contiene" + + #: cp/class.c:2898 cp/decl2.c:1883 + msgid "`%#D' invalid; an anonymous union can only have non-static data members" + msgstr "`%#D' inválido; un union anónimo sólo puede tener miembros con datos no estáticos" + + #: cp/class.c:2904 cp/decl2.c:1889 + msgid "private member `%#D' in anonymous union" + msgstr "miembro privado `%#D' en union anónima" + + #: cp/class.c:2907 cp/decl2.c:1891 + msgid "protected member `%#D' in anonymous union" + msgstr "miembro protegido `%#D' en union anónima" + + #: cp/class.c:3059 + msgid "bit-field `%#D' with non-integral type" + msgstr "campo de bits `%#D' con tipo no entero" + + #: cp/class.c:3079 + msgid "bit-field `%D' width not an integer constant" + msgstr "la anchura del campo de bits `%D' no es una constante entera" + + #: cp/class.c:3085 + msgid "negative width in bit-field `%D'" + msgstr "anchura negativa en el campo de bit `%D'" + + #: cp/class.c:3090 + msgid "zero width for bit-field `%D'" + msgstr "anchura cero para el campo de bits `%D'" + + #: cp/class.c:3096 + msgid "width of `%D' exceeds its type" + msgstr "la anchura de `%D' excede su tipo" + + #: cp/class.c:3105 + msgid "`%D' is too small to hold all values of `%#T'" + msgstr "`%D' es demasiado pequeño para guardar todos los valores de `%#T'" + + #: cp/class.c:3189 + msgid "member `%#D' with constructor not allowed in union" + msgstr "no se permite el miembro `%#D' con constructor en la union" + + #: cp/class.c:3192 + msgid "member `%#D' with destructor not allowed in union" + msgstr "no se permite el miembro `%#D' con destructor en la union" + + #: cp/class.c:3195 + msgid "member `%#D' with copy assignment operator not allowed in union" + msgstr "no se permite el miembro `%#D' con operador de asignación de copia en la union" + + #: cp/class.c:3222 + msgid "multiple fields in union `%T' initialized" + msgstr "múltiples campos iniciados en la unión `%T'" + + #: cp/class.c:3341 + msgid "field `%D' in local class cannot be static" + msgstr "el campo `%D' en la clase local no puede ser static" + + #: cp/class.c:3347 + msgid "field `%D' invalidly declared function type" + msgstr "el campo `%D' es declarado inválidamente como un tipo de función" + + #: cp/class.c:3354 + msgid "field `%D' invalidly declared method type" + msgstr "el campo `%D' es declarado inválidamente como un tipo de método" + + #: cp/class.c:3360 + msgid "field `%D' invalidly declared offset type" + msgstr "el campo `%D' es declarado inválidamente como un tipo de desplazamiento" + + #. Unions cannot have static members. + #: cp/class.c:3378 + msgid "field `%D' declared static in union" + msgstr "el campo `%s' es declarado como static en la unión" + + #: cp/class.c:3404 + msgid "non-static reference `%#D' in class without a constructor" + msgstr "referencia `%#D' que no es static en una clase sin un constructor" + + #: cp/class.c:3435 + msgid "non-static const member `%#D' in class without a constructor" + msgstr "miembro const `%#D' que no es static en una clase sin un constructor" + + #: cp/class.c:3450 + msgid "field `%#D' with same name as class" + msgstr "campo `%#D' con el mismo nombre que la clase" + + #: cp/class.c:3468 + msgid "`%#T' has pointer data members" + msgstr "`%#T' tiene miembros apuntadores a datos" + + #: cp/class.c:3472 + msgid " but does not override `%T(const %T&)'" + msgstr " pero no se impone a `%T(const %T&)'" + + #: cp/class.c:3474 + msgid " or `operator=(const %T&)'" + msgstr " o a `operator=(cont %T&)'" + + #: cp/class.c:3477 + msgid " but does not override `operator=(const %T&)'" + msgstr " pero no se impone a `operator=(const %T&)'" + + #: cp/class.c:3943 + msgid "initializer specified for non-virtual method `%D'" + msgstr "iniciador especificado para el método no virtual `%D'" + + #: cp/class.c:4728 + msgid "virtual base `%T' inaccessible in `%T' due to ambiguity" + msgstr "base virtual `%T' inaccesible en `%T' debido a ambigüedad" + + #: cp/class.c:4798 + msgid "direct base `%T' inaccessible in `%T' due to ambiguity" + msgstr "base directa `%T' inaccesible en `%T' debido a ambigüedad" + + #: cp/class.c:5225 + msgid "`%#T' has virtual functions but non-virtual destructor" + msgstr "`%#T' tiene funciones virtuales pero destructores no virtuales" + + #: cp/class.c:5309 + msgid "trying to finish struct, but kicked out due to previous parse errors" + msgstr "se trató de terminar struct, pero fue sacado debido a errores previos de decodificación" + + #: cp/class.c:5766 + #, c-format + msgid "language string `\"%s\"' not recognized" + msgstr "cadena de lenguaje `\"%s\"' no se reconocen" + + #: cp/class.c:5862 + msgid "cannot resolve overloaded function `%D' based on conversion to type `%T'" + msgstr "no se puede resolver la función sobrecargada `%D' basándose en la conversión al tipo `%T'" + + #: cp/class.c:5983 + msgid "no matches converting function `%D' to type `%#T'" + msgstr "no hay coincidencias al convertir la función `%D' al tipo `%#T'" + + #: cp/class.c:6006 + msgid "converting overloaded function `%D' to type `%#T' is ambiguous" + msgstr "la conversión de la función sobrecargada `%D' al tipo `%#T' es ambigua" + + #: cp/class.c:6032 + msgid "assuming pointer to member `%D'" + msgstr "asumiendo el apuntador a miembro `%D'" + + #: cp/class.c:6035 + #, c-format + msgid "(a pointer to member can only be formed with `&%E')" + msgstr "(un apuntador a miembro solamente se puede formar con `&%E')" + + #: cp/class.c:6079 cp/class.c:6247 cp/class.c:6254 + msgid "not enough type information" + msgstr "no hay suficiente información de tipo" + + #: cp/class.c:6088 + msgid "argument of type `%T' does not match `%T'" + msgstr "el argumento de tipo `%T' no coincide con `%T'" + + #: cp/class.c:6231 + msgid "invalid operation on uninstantiated type" + msgstr "operación inválida en tipo no instanciado" + + #. [basic.scope.class] + #. + #. A name N used in a class S shall refer to the same declaration + #. in its context and when re-evaluated in the completed scope of + #. S. + #: cp/class.c:6483 cp/decl.c:1032 cp/decl.c:3172 cp/pt.c:1842 + msgid "declaration of `%#D'" + msgstr "la declaración de `%#D'" + + #: cp/class.c:6484 + msgid "changes meaning of `%D' from `%+#D'" + msgstr "cambia el significado de `%D' a partir de `%+#D'" + + #: cp/cvt.c:88 + msgid "can't convert from incomplete type `%T' to `%T'" + msgstr "no se puede convertir desde el tipo de dato incompleto `%T' a `%T'" + + #: cp/cvt.c:97 + msgid "conversion of `%E' from `%T' to `%T' is ambiguous" + msgstr "la conversión de `%E' desde `%T' a `%T' es ambigua" + + #: cp/cvt.c:126 + msgid "converting from `%T' to `%T'" + msgstr "convirtiendo de `%T' a `%T'" + + #: cp/cvt.c:198 cp/cvt.c:202 + msgid "pointer to member cast from `%T' to `%T' is via virtual base" + msgstr "apuntador a la conversión de miembro de `%T' a `%T' es a través de una base virtual" + + #: cp/cvt.c:220 cp/cvt.c:233 cp/cvt.c:272 + msgid "cannot convert `%E' from type `%T' to type `%T'" + msgstr "no se puede convertir `%E' desde el tipo `%T' al tipo `%T'" + + #: cp/cvt.c:525 + msgid "conversion from `%T' to `%T' discards qualifiers" + msgstr "la conversión de `%T' a `%T' descarta los calificadores" + + #: cp/cvt.c:543 + msgid "casting `%T' to `%T' does not dereference pointer" + msgstr "la conversión de `%T' a `%T' no dereferencía a los apuntadores" + + #: cp/cvt.c:572 + msgid "cannot convert type `%T' to type `%T'" + msgstr "no se puede convertir del tipo `%T' al tipo `%T'" + + #: cp/cvt.c:689 + msgid "conversion from `%#T' to `%#T'" + msgstr "conversión de `%#T' a `%#T'" + + #: cp/cvt.c:701 + msgid "`%#T' used where a `%T' was expected" + msgstr "se usó un `%#T' donde se esperaba un `%T'" + + #: cp/cvt.c:718 + msgid "the address of `%D', will always be `true'" + msgstr "la dirección de `%D', siempre será `true'" + + #: cp/cvt.c:738 + msgid "`%#T' used where a floating point value was expected" + msgstr "se usó un `%#T' donde se esperaba un valor de coma flotante" + + #: cp/cvt.c:793 + msgid "conversion from `%T' to non-scalar type `%T' requested" + msgstr "se solicitó la conversión desde `%T' al tipo no escalar `%T'" + + #: cp/cvt.c:879 + msgid "object of incomplete type `%T' will not be accessed in %s" + msgstr "el objeto de tipo incompleto `%T' no se accesará en %s" + + #: cp/cvt.c:882 + msgid "object of type `%T' will not be accessed in %s" + msgstr "el objeto de tipo `%T' no se accesará en %s" + + #: cp/cvt.c:898 + msgid "object `%E' of incomplete type `%T' will not be accessed in %s" + msgstr "el objeto `%E' de tipo incompleto `%T' no se accesará en %s" + + #. [over.over] enumerates the places where we can take the address + #. of an overloaded function, and this is not one of them. + #: cp/cvt.c:918 + #, c-format + msgid "%s cannot resolve address of overloaded function" + msgstr "%s no puede resolver la dirección de la función sobrecargada" + + #. Only warn when there is no &. + #: cp/cvt.c:923 + #, c-format + msgid "%s is a reference, not call, to function `%E'" + msgstr "%s es una referencia, no una llamada, a la función `%E'" + + #: cp/cvt.c:1061 + msgid "converting NULL to non-pointer type" + msgstr "convirtiendo NULL a un tipo que no es apuntador" + + #: cp/cvt.c:1137 + msgid "ambiguous default type conversion from `%T'" + msgstr "conversión de tipo por omisión ambigua desde `%T'" + + #: cp/cvt.c:1139 + msgid " candidate conversions include `%D' and `%D'" + msgstr " las conversiones candidatas incluyen `%D' y `%D'" + + #: cp/decl.c:1033 cp/decl.c:3275 + msgid "conflicts with previous declaration `%#D'" + msgstr "causa conflictos con la declaración previa `%#D'" + + #: cp/decl.c:1222 + msgid "label `%D' used but not defined" + msgstr "se usa la etiqueta `%D' pero no está definida" + + #: cp/decl.c:1227 + msgid "label `%D' defined but not used" + msgstr "la etiqueta `%D' está definida pero no se usa" + + #: cp/decl.c:2294 + msgid "namespace alias `%D' not allowed here, assuming `%D'" + msgstr "no se permite aquí el alias del espacio de nombres `%D', asumiendo que es `%D'" + + #: cp/decl.c:3078 cp/decl.c:3483 + msgid "previous declaration of `%D'" + msgstr "declaración previa de `%D'" + + #: cp/decl.c:3159 cp/decl.c:3197 + msgid "shadowing %s function `%#D'" + msgstr "obscureciendo la función de biblioteca `%#D'" + + #: cp/decl.c:3168 + msgid "library function `%#D' redeclared as non-function `%#D'" + msgstr "la función de biblioteca `%#D' es redeclarada como `%#D' que no es función" + + #: cp/decl.c:3173 + msgid "conflicts with built-in declaration `%#D'" + msgstr "causa conflicto con la declaración interna `%#D'" + + #: cp/decl.c:3192 cp/decl.c:3285 cp/decl.c:3301 + msgid "new declaration `%#D'" + msgstr "declaración nueva `%#D'" + + #: cp/decl.c:3193 + msgid "ambiguates built-in declaration `%#D'" + msgstr "hace ambigua la declaración interna `%#D'" + + #: cp/decl.c:3249 + msgid "`%#D' redeclared as different kind of symbol" + msgstr "`%#D' redeclarado como un tipo diferente de símbolo" + + #: cp/decl.c:3252 + msgid "previous declaration of `%#D'" + msgstr "declaración previa de `%#D'" + + #: cp/decl.c:3274 + msgid "declaration of template `%#D'" + msgstr "redeclaración de la plantilla `%#D'" + + #: cp/decl.c:3286 cp/decl.c:3302 + msgid "ambiguates old declaration `%#D'" + msgstr "hace ambigua la declaración antigua `%#D'" + + #: cp/decl.c:3294 + msgid "declaration of C function `%#D' conflicts with" + msgstr "la declaración de la función C `%#D' tiene conflictos con" + + #: cp/decl.c:3296 + msgid "previous declaration `%#D' here" + msgstr "declaración previa de `%#D' aquí" + + #: cp/decl.c:3312 + msgid "conflicting types for `%#D'" + msgstr "tipos en conflicto para `%#D'" + + #: cp/decl.c:3313 + msgid "previous declaration as `%#D'" + msgstr "declaración previa como `%#D'" + + #: cp/decl.c:3356 + msgid "`%#D' previously defined here" + msgstr "se definió `%#D' previamente aquí" + + #: cp/decl.c:3357 + msgid "`%#D' previously declared here" + msgstr "se declaró `%#D' previamente aquí" + + #. Prototype decl follows defn w/o prototype. + #: cp/decl.c:3366 + msgid "prototype for `%#D'" + msgstr "el prototipo para '%#D'" + + #: cp/decl.c:3367 + msgid "follows non-prototype definition here" + msgstr "a continuación la definición del no prototipo aquí" + + #: cp/decl.c:3379 + msgid "previous declaration of `%#D' with %L linkage" + msgstr "declaración previa de `%#D' con el enlace %L" + + #: cp/decl.c:3381 + msgid "conflicts with new declaration with %L linkage" + msgstr "tiene conflictos con la declaración nueva con el enlace %L" + + #: cp/decl.c:3404 cp/decl.c:3411 + msgid "default argument given for parameter %d of `%#D'" + msgstr "argumento por omisión dado para el parámetro %d de `%#D'" + + #: cp/decl.c:3406 cp/decl.c:3413 + msgid "after previous specification in `%#D'" + msgstr "después de la especificación previa en `%#D'" + + #: cp/decl.c:3422 + msgid "`%#D' was used before it was declared inline" + msgstr "se usó `%#D' antes de que fuera declarado inline" + + #: cp/decl.c:3424 + msgid "previous non-inline declaration here" + msgstr "declaración previa no inline aquí" + + #: cp/decl.c:3482 + msgid "redundant redeclaration of `%D' in same scope" + msgstr "declaración redundante de `%D' en el mismo ámbito" + + #: cp/decl.c:3566 + #, c-format + msgid "declaration of `%F' throws different exceptions" + msgstr "la declaración de `%F' arroja excepciones diferentes" + + #: cp/decl.c:3568 + #, c-format + msgid "than previous declaration `%F'" + msgstr "que la declaración previa `%F'" + + #. From [temp.expl.spec]: + #. + #. If a template, a member template or the member of a class + #. template is explicitly specialized then that + #. specialization shall be declared before the first use of + #. that specialization that would cause an implicit + #. instantiation to take place, in every translation unit in + #. which such a use occurs. + #: cp/decl.c:3701 + msgid "explicit specialization of %D after first use" + msgstr "especialización explícita de %D después del primer uso" + + #: cp/decl.c:3946 + msgid "`%#D' used prior to declaration" + msgstr "se usa `%#D' previo a la declaración" + + #: cp/decl.c:3977 + msgid "redeclaration of `wchar_t' as `%T'" + msgstr "redeclaración de `wchar_t' como `%T'" + + #. A redeclaration of main, but not a duplicate of the + #. previous one. + #. + #. [basic.start.main] + #. + #. This function shall not be overloaded. + #: cp/decl.c:4005 + msgid "invalid redeclaration of `%D'" + msgstr "redeclaración inválida de `%D'" + + #: cp/decl.c:4006 + msgid "as `%D'" + msgstr "como `%D'" + + #: cp/decl.c:4096 + msgid "previous external decl of `%#D'" + msgstr "declaración externa previa de `%#D'" + + #: cp/decl.c:4137 + msgid "`%D' was previously implicitly declared to return `int'" + msgstr "`%D' fue declarado previa e implícitamente para devolver `int'" + + #: cp/decl.c:4197 + msgid "extern declaration of `%#D' doesn't match" + msgstr "la declaración externa de `%#D' no coincide" + + #: cp/decl.c:4198 + msgid "global declaration `%#D'" + msgstr "con la declaración global `%#D'" + + #: cp/decl.c:4229 + msgid "declaration of `%#D' shadows a parameter" + msgstr "la declaración de `%#D' obscurece un parámetro" + + #: cp/decl.c:4249 + #, c-format + msgid "declaration of `%s' shadows a member of `this'" + msgstr "la declaración de `%s' obscurece a un miembro de `this'" + + #: cp/decl.c:4600 + msgid "`%#D' hides constructor for `%#T'" + msgstr "`%#D' esconde el destructor para `%#T'" + + #: cp/decl.c:4615 + msgid "`%#D' conflicts with previous using declaration `%#D'" + msgstr "`%#D' causa conflicto con la declaración previa en uso `%#D'" + + #: cp/decl.c:4627 + msgid "previous non-function declaration `%#D'" + msgstr "la declaración previa `%#D' que no es función" + + #: cp/decl.c:4628 + msgid "conflicts with function declaration `%#D'" + msgstr "causa conflicto con la declaración de la función `%#D'" + + #: cp/decl.c:4718 + msgid "implicit declaration of function `%#D'" + msgstr "declaración implícita de la función `%#D'" + + #: cp/decl.c:4876 + #, c-format + msgid "label `%s' referenced outside of any function" + msgstr "la etiqueta `%s' se ha referenciado fuera de cualquier función" + + #: cp/decl.c:4979 cp/decl.c:5003 cp/decl.c:5096 + msgid "jump to label `%D'" + msgstr "salto a la etiqueta `%D'" + + #: cp/decl.c:4981 cp/decl.c:5005 + msgid "jump to case label" + msgstr "salto a la etiqueta case" + + #: cp/decl.c:4989 + msgid " crosses initialization of `%#D'" + msgstr " cruza la asignación de valores iniciales de `%#D'" + + #: cp/decl.c:4992 cp/decl.c:5112 + msgid " enters scope of non-POD `%#D'" + msgstr " entra en el ámbito de `%#D' que no es POD" + + #: cp/decl.c:5012 cp/decl.c:5116 + msgid " enters try block" + msgstr " entra intento de bloque" + + #. Can't skip init of __exception_info. + #: cp/decl.c:5014 cp/decl.c:5108 cp/decl.c:5118 + msgid " enters catch block" + msgstr " entra captura de bloque" + + #: cp/decl.c:5097 + msgid " from here" + msgstr " desde aquí" + + #: cp/decl.c:5110 + msgid " skips initialization of `%#D'" + msgstr " salta la asignación de valores iniciales de `%#D'" + + #: cp/decl.c:5145 + msgid "label named wchar_t" + msgstr "etiqueta nombrada wchar_t" + + #: cp/decl.c:5149 + msgid "duplicate label `%D'" + msgstr "etiqueta duplicada `%D'" + + #: cp/decl.c:5234 + #, c-format + msgid "case label `%E' not within a switch statement" + msgstr "la etiqueta case `%E' no se encuentra dentro de una declaración switch" + + #. Definition isn't the kind we were looking for. + #: cp/decl.c:5411 cp/decl.c:5430 + msgid "`%#D' redeclared as %C" + msgstr "`%#D' redeclarado como %C" + + #. This happens for A::B where B is a template, and there are no + #. template arguments. + #: cp/decl.c:5518 cp/typeck.c:1980 + msgid "invalid use of `%D'" + msgstr "uso inválido de `%D'" + + #: cp/decl.c:5559 + msgid "`%D::%D' is not a template" + msgstr "`%D::%D' no es una plantilla" + + #: cp/decl.c:5576 + msgid "`%D' undeclared in namespace `%D'" + msgstr "`%D' no declarado en el espacio de nombres `%D'" + + #: cp/decl.c:5713 + msgid "`%D' used without template parameters" + msgstr "se usa `%D' sin parámetros de plantilla" + + #: cp/decl.c:5724 cp/decl.c:5740 cp/decl.c:5828 + msgid "no class template named `%#T' in `%#T'" + msgstr "no hay una plantilla de clase llamada `%#T' en `%#T'" + + #: cp/decl.c:5758 cp/decl.c:5788 + msgid "no type named `%#T' in `%#T'" + msgstr "no hay un tipo llamado `%#T' en `%#T'" + + #: cp/decl.c:6011 + msgid "lookup of `%D' finds `%#D'" + msgstr "la búsqueda de `%D' encuentra a `%#D'" + + #: cp/decl.c:6013 + msgid " instead of `%D' from dependent base class" + msgstr " en lugar de `%D' de la clase base dependiente" + + #: cp/decl.c:6015 + msgid " (use `typename %T::%D' if that's what you meant)" + msgstr " (use `typename %T::%D' si eso es lo que quería)" + + #: cp/decl.c:6188 + msgid "lookup of `%D' in the scope of `%#T' (`%#D') does not match lookup in the current scope (`%#D')" + msgstr "la búsqueda de `%D' en el ámbito de `%#T' (`%#D') no coincide con la búsqueda en el ámbito actual (`%#D')" + + #: cp/decl.c:7033 + msgid "an anonymous union cannot have function members" + msgstr "un union anónimo no puede tener funciones miembro" + + #: cp/decl.c:7050 + msgid "member %#D' with constructor not allowed in anonymous aggregate" + msgstr "no se permite el miembro %#D' con constructor en un agregado anónimo" + + #: cp/decl.c:7053 + msgid "member %#D' with destructor not allowed in anonymous aggregate" + msgstr "no se permite el miembro %#D' con destructor en un agregado anónimo" + + #: cp/decl.c:7056 + msgid "member %#D' with copy assignment operator not allowed in anonymous aggregate" + msgstr "no se permite el miembro %#D' con operador de asignación de copia en un agregado anónimo" + + #: cp/decl.c:7094 + msgid "redeclaration of C++ built-in type `%T'" + msgstr "redeclaración del tipo interno de C++ `%T'" + + #: cp/decl.c:7129 + msgid "multiple types in one declaration" + msgstr "tipos múltiples en una declaración" + + #: cp/decl.c:7132 + msgid "declaration does not declare anything" + msgstr "la declaración no declara nada}" + + #: cp/decl.c:7156 + msgid "missing type-name in typedef-declaration" + msgstr "falta el nombre del tipo en la declaración typedef" + + #: cp/decl.c:7163 + msgid "ISO C++ prohibits anonymous structs" + msgstr "ISO C++ prohibe structs anónimos" + + #: cp/decl.c:7170 + msgid "`%D' can only be specified for functions" + msgstr "`%D' sólo puede ser especificado para funciones" + + #: cp/decl.c:7172 + msgid "`%D' can only be specified inside a class" + msgstr "`%D' sólo puede ser especificado dentro de una clase" + + #: cp/decl.c:7174 + msgid "`%D' can only be specified for constructors" + msgstr "`%D' sólo puede ser especificado para constructores" + + #: cp/decl.c:7177 + msgid "`%D' can only be specified for objects and functions" + msgstr "`%D' sólo puede ser especificado para objetos y funciones" + + #: cp/decl.c:7326 + msgid "typedef `%D' is initialized" + msgstr "typedef `%D' tiene valor inicial" + + #: cp/decl.c:7332 + msgid "function `%#D' is initialized like a variable" + msgstr "la función `%#D' tiene valor inicial como una variable" + + #: cp/decl.c:7344 + msgid "declaration of `%#D' has `extern' and is initialized" + msgstr "la declaración de `%#D' tiene `extern' y tiene valor inicial" + + #: cp/decl.c:7378 + msgid "`%#D' is not a static member of `%#T'" + msgstr "`%#D' no es un miembro static de `%#T'" + + #: cp/decl.c:7383 + msgid "ISO C++ does not permit `%T::%D' to be defined as `%T::%D'" + msgstr "ISO C++ no permite que `%T::%D' sea definido como `%T::%D'" + + #: cp/decl.c:7394 + msgid "duplicate initialization of %D" + msgstr "asignación de valores iniciales duplicada de %D" + + #: cp/decl.c:7423 + msgid "declaration of `%#D' outside of class is not definition" + msgstr "la declaración de `%#D' fuera de la clase no es una definición" + + #: cp/decl.c:7471 + msgid "variable `%#D' has initializer but incomplete type" + msgstr "la variable `%#D' tiene asignación de valor inicial, pero tipo de dato incompleto" + + #: cp/decl.c:7479 cp/decl.c:7830 + msgid "elements of array `%#D' have incomplete type" + msgstr "algunos elementos de la matriz `%#D' tienen tipo de dato incompleto" + + #: cp/decl.c:7495 + msgid "aggregate `%#D' has incomplete type and cannot be defined" + msgstr "el agregado `%#D' tiene un tipo incompleto y no se puede definir" + + #: cp/decl.c:7534 + msgid "`%D' declared as reference but not initialized" + msgstr "`%D' declarado como referencia pero no es iniciado" + + #: cp/decl.c:7543 + msgid "ISO C++ forbids use of initializer list to initialize reference `%D'" + msgstr "ISO C++ prohibe el uso de una lista de iniciadores para iniciar la referencia `%D'" + + #: cp/decl.c:7576 + msgid "cannot initialize `%T' from `%T'" + msgstr "no se pueden iniciar `%T' desde `%T'" + + #: cp/decl.c:7637 + msgid "initializer fails to determine size of `%D'" + msgstr "el iniciador no pudo determinar el tamaño de `%D'" + + #: cp/decl.c:7642 + msgid "array size missing in `%D'" + msgstr "falta el tamaño de la matriz en `%D'" + + #: cp/decl.c:7654 + msgid "zero-size array `%D'" + msgstr "matriz `%D' de tamaño cero" + + #. An automatic variable with an incomplete type: that is an error. + #. Don't talk about array types here, since we took care of that + #. message in grokdeclarator. + #: cp/decl.c:7687 + msgid "storage size of `%D' isn't known" + msgstr "no se conoce el tamaño de almacenamiento de `%D'" + + #: cp/decl.c:7709 + msgid "storage size of `%D' isn't constant" + msgstr "el tamaño de almacenamiento de `%D' no es constante" + + #: cp/decl.c:7760 + msgid "sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)" + msgstr "perdón: la semántica de los datos static de la función inline `%#D' es errónea (terminará con múltiples copias)" + + #: cp/decl.c:7761 + msgid " you can work around this by removing the initializer" + msgstr " puede evitar esto eliminando el iniciador" + + #: cp/decl.c:7789 + msgid "uninitialized const `%D'" + msgstr "const `%D' sin iniciar" + + #: cp/decl.c:7824 + msgid "variable-sized object `%D' may not be initialized" + msgstr "el objeto de tamaño variable `%D' no puede tener valor inicial" + + #: cp/decl.c:7835 cp/typeck2.c:201 + msgid "`%D' has incomplete type" + msgstr "`%D' tiene un tipo de dato incompleto" + + #: cp/decl.c:7867 + msgid "`%D' must be initialized by constructor, not by `{...}'" + msgstr "`%D' debe ser iniciado por un constructor, no por `{...}'" + + #: cp/decl.c:7897 + msgid "structure `%D' with uninitialized const members" + msgstr "estructura `%D' con miembros constantes sin iniciar" + + #: cp/decl.c:7899 + msgid "structure `%D' with uninitialized reference members" + msgstr "estructura `%D' con miembros de referencia sin iniciar" + + #: cp/decl.c:8166 + msgid "assignment (not initialization) in declaration" + msgstr "asignación (no asignación de valores iniciales) en la declaración" + + #: cp/decl.c:8178 + msgid "cannot initialize `%D' to namespace `%D'" + msgstr "no se pueden iniciar `%D' para el espacio de nombres `%D'" + + #: cp/decl.c:8235 + msgid "shadowing previous type declaration of `%#D'" + msgstr "obscureciendo la declaración de tipo previa de `%#D'" + + #: cp/decl.c:8631 + msgid "multiple initializations given for `%D'" + msgstr "se asignaron múltiples valores iniciales para `%D'" + + #: cp/decl.c:8731 + msgid "invalid catch parameter" + msgstr "parámetro de captura inválido" + + #: cp/decl.c:8849 + msgid "destructor for alien class `%T' cannot be a member" + msgstr "el destructor para la clase extranjera `%T' no puede ser un miembro" + + #: cp/decl.c:8852 + msgid "constructor for alien class `%T' cannot be a member" + msgstr "el constructor para la clase extranjera `%T' no puede ser un miembro" + + #: cp/decl.c:8871 + msgid "`%D' declared as a `virtual' %s" + msgstr "`%D' fue declarado como un %s `virtual'" + + #: cp/decl.c:8873 + msgid "`%D' declared as an `inline' %s" + msgstr "`%D' fue declarado como un %s `inline'" + + #: cp/decl.c:8875 + msgid "`const' and `volatile' function specifiers on `%D' invalid in %s declaration" + msgstr "especificadores de función `const' y `volatile' en `%D' inválidos en la declaración %s" + + #: cp/decl.c:8878 + msgid "`%D' declared as a friend" + msgstr "`%D' declarado como un friend" + + #: cp/decl.c:8884 + msgid "`%D' declared with an exception specification" + msgstr "`%D' declarado con una excepción de especificación" + + #: cp/decl.c:8959 + msgid "cannot declare `::main' to be a template" + msgstr "no se puede declarar `::main' como template" + + #: cp/decl.c:8961 + msgid "cannot declare `::main' to be inline" + msgstr "no se puede declarar `::main' como inline" + + #: cp/decl.c:8963 + msgid "cannot declare `::main' to be static" + msgstr "no se puede declarar `::main' como static" + + #: cp/decl.c:8966 + msgid "`main' must return `int'" + msgstr "`main' debe devolver `int'" + + #: cp/decl.c:8994 + msgid "non-local function `%#D' uses anonymous type" + msgstr "la función `%#D' que no es local usa un tipo anónimo" + + #: cp/decl.c:8997 + msgid "`%#D' does not refer to the unqualified type, so it is not used for linkage" + msgstr "`%#D' no se refiere al tipo sin calificar, así que no se usa para el enlazado" + + #: cp/decl.c:9003 + msgid "non-local function `%#D' uses local type `%T'" + msgstr "la función `%#D' que no es local utiliza el tipo local `%T'" + + #: cp/decl.c:9026 + msgid "%smember function `%D' cannot have `%T' method qualifier" + msgstr "%sfunción miembro `%D' no puede tener el calificador de método `%T'" + + #: cp/decl.c:9050 + msgid "defining explicit specialization `%D' in friend declaration" + msgstr "definiendo la especialización explícita `%D' en la declaración friend" + + #. Something like `template friend void f()'. + #: cp/decl.c:9060 + msgid "invalid use of template-id `%D' in declaration of primary template" + msgstr "uso inválido del id de plantilla `%D' en la declaración de la plantilla primaria" + + #: cp/decl.c:9088 + msgid "default arguments are not allowed in declaration of friend template specialization `%D'" + msgstr "no se permiten los argumento por omisión en la declaración de la especialización friend de la plantilla `%D'" + + #: cp/decl.c:9095 + msgid "`inline' is not allowed in declaration of friend template specialization `%D'" + msgstr "no se permiten `inline' en la declaración de la especialización friend de la plantilla `%D'" + + #: cp/decl.c:9157 + msgid "definition of implicitly-declared `%D'" + msgstr "la definición de `%D' declarado implícitamente" + + #: cp/decl.c:9169 cp/decl2.c:1367 + msgid "no `%#D' member function declared in class `%T'" + msgstr "no hay una función miembro `%#D' declarada en la clase `%T'" + + #: cp/decl.c:9288 + msgid "non-local variable `%#D' uses local type `%T'" + msgstr "la variable `%#D' que no es local usa el tipo local `%T'" + + #: cp/decl.c:9378 + msgid "invalid in-class initialization of static data member of non-integral type `%T'" + msgstr "iniciación en la clase inválida para el miembro de datos static de tipo `%T' que no es integral" + + #: cp/decl.c:9387 + msgid "ISO C++ forbids in-class initialization of non-const static member `%D'" + msgstr "ISO C++ prohibe la iniciación en la clase del miembro static `%D' que no es constante" + + #: cp/decl.c:9390 + msgid "ISO C++ forbids initialization of member constant `%D' of non-integral type `%T'" + msgstr "ISO C++ prohibe la iniciación del miembro constante `%D' del tipo `%T' que no es entero" + + #: cp/decl.c:9440 + msgid "size of array `%D' has non-integer type" + msgstr "el tamaño de la matriz `%D' tiene un tipo no entero" + + #: cp/decl.c:9442 + msgid "size of array has non-integer type" + msgstr "el tamaño de la matriz tiene un tipo no entero" + + #: cp/decl.c:9462 + msgid "size of array `%D' is negative" + msgstr "el tamaño de la matriz `%D' es negativo" + + #: cp/decl.c:9464 + msgid "size of array is negative" + msgstr "el tamaño de la matriz es negativo" + + #: cp/decl.c:9473 + msgid "ISO C++ forbids zero-size array `%D'" + msgstr "ISO C++ prohibe la matriz `%D' de tamaño cero" + + #: cp/decl.c:9475 + msgid "ISO C++ forbids zero-size array" + msgstr "ISO C++ prohibe una matriz de tamaño cero" + + #: cp/decl.c:9482 + msgid "size of array `%D' is not an integral constant-expression" + msgstr "el tamaño de la matriz `%D' no es una expresion constante integral" + + #: cp/decl.c:9485 + msgid "size of array is not an integral constant-expression" + msgstr "el tamaño de la matriz no es una expresion constante integral" + + #: cp/decl.c:9503 + msgid "ISO C++ forbids variable-size array `%D'" + msgstr "ISO C++ prohibe la matriz `%D' de tamaño variable" + + #: cp/decl.c:9506 + msgid "ISO C++ forbids variable-size array" + msgstr "ISO C++ prohibe la matriz de tamaño variable" + + #: cp/decl.c:9517 + msgid "overflow in array dimension" + msgstr "desbordamiento en la dimensión de la matriz" + + #: cp/decl.c:9576 + msgid "declaration of `%D' as %s" + msgstr "redeclaración de `%D' como %s" + + #: cp/decl.c:9578 + #, c-format + msgid "creating %s" + msgstr "creando %s" + + #: cp/decl.c:9590 + msgid "declaration of `%D' as multidimensional array must have bounds for all dimensions except the first" + msgstr "la declaración de `%D' como una matriz multidimensional debe tener límites para todas las dimensiones excepto la primera" + + #: cp/decl.c:9593 + msgid "multidimensional array must have bounds for all dimensions except the first" + msgstr "una matriz multidimensional debe tener límites para todas las dimensiones excepto para la primera" + + #: cp/decl.c:9622 + msgid "return type specification for constructor invalid" + msgstr "la especificación del tipo de devolución para el constructor es inválido" + + #: cp/decl.c:9629 + msgid "return type specification for destructor invalid" + msgstr "la especificación del tipo de devolución para el destructor es inválido" + + #: cp/decl.c:9635 + msgid "operator `%T' declared to return `%T'" + msgstr "el operador `%T' se declaró para devolver `%T'" + + #: cp/decl.c:9637 + msgid "return type specified for `operator %T'" + msgstr "se especificó un tipo de devolución para `operator %T'" + + #: cp/decl.c:9805 + msgid "destructors must be member functions" + msgstr "los destructores deben ser funciones miembro" + + #: cp/decl.c:9824 + msgid "destructor `%T' must match class name `%T'" + msgstr "el destructor `%T' debe coincidir con el nombre de la clase `%T'" + + #: cp/decl.c:9874 + msgid "invalid declarator" + msgstr "declarador inválido" + + #: cp/decl.c:9927 + msgid "declarator-id missing; using reserved word `%D'" + msgstr "falta el id del declarador; utilizando la palabra reservada `%D'" + + #: cp/decl.c:9984 + msgid "type `%T' is not derived from type `%T'" + msgstr "el tipo `%T' no es derivado del tipo `%T'" + + #. Parse error puts this typespec where + #. a declarator should go. + #: cp/decl.c:10030 + msgid "`%T' specified as declarator-id" + msgstr "`%T' especificado como id de declarador" + + #: cp/decl.c:10032 + msgid " perhaps you want `%T' for a constructor" + msgstr " tal vez quiere `%T' para un constructor" + + #: cp/decl.c:10046 + msgid "`%D' as declarator" + msgstr "`%D' como declarador" + + #: cp/decl.c:10061 + msgid "declaration of `%D' as non-function" + msgstr "la declaración de `%D' como una no función" + + #: cp/decl.c:10138 + msgid "`bool' is now a keyword" + msgstr "`bool' ahora es una palabra clave" + + #: cp/decl.c:10140 + msgid "extraneous `%T' ignored" + msgstr "`%T' extra ignorado" + + #: cp/decl.c:10156 cp/decl.c:10189 + msgid "multiple declarations `%T' and `%T'" + msgstr "declaraciones múltiples `%T' y `%T'" + + #: cp/decl.c:10169 + msgid "ISO C++ does not support `long long'" + msgstr "ISO C++ no da soporte a `long long'" + + #: cp/decl.c:10262 cp/decl.c:10265 + #, c-format + msgid "ISO C++ forbids declaration of `%s' with no type" + msgstr "ISO C++ prohibe la declaración de `%s' sin tipo" + + #. The implicit typename extension is deprecated and will be + #. removed. Warn about its use now. + #: cp/decl.c:10275 + msgid "`%T' is implicitly a typename" + msgstr "`%T' implícitamente es un nombre de tipo" + + #: cp/decl.c:10311 + #, c-format + msgid "short, signed or unsigned invalid for `%s'" + msgstr "short, signed ó unsigned inválido para `%s'" + + #: cp/decl.c:10316 + #, c-format + msgid "long and short specified together for `%s'" + msgstr "long y short especificados juntos para `%s'" + + #: cp/decl.c:10327 + #, c-format + msgid "signed and unsigned given together for `%s'" + msgstr "se dieron juntos signed y unsigned para `%s'" + + #: cp/decl.c:10436 + msgid "qualifiers are not allowed on declaration of `operator %T'" + msgstr "no se permiten calificadores en la declaración de `operator %T'" + + #: cp/decl.c:10458 + msgid "member `%D' cannot be declared both virtual and static" + msgstr "el miembro `%D' no puede ser declarado como virtual y static al mismo tiempo" + + #: cp/decl.c:10467 + msgid "`%T::%D' is not a valid declarator" + msgstr "`%T::%D' no es una declaración válida" + + #: cp/decl.c:10478 + msgid "storage class specifiers invalid in parameter declarations" + msgstr "especificadores de clase de almacenamiento inválidos en las declaraciones de parámetros" + + #: cp/decl.c:10482 + msgid "typedef declaration invalid in parameter declaration" + msgstr "declaración typedef inválida en la declaración de parámetros" + + #: cp/decl.c:10495 + msgid "virtual outside class declaration" + msgstr "declaración de virtual fuera de class" + + #: cp/decl.c:10549 + #, c-format + msgid "storage class specified for %s `%s'" + msgstr "clase de almacenamiento especificada por %s `%s'" + + #: cp/decl.c:10587 + msgid "storage class specifiers invalid in friend function declarations" + msgstr "especificadores de clase de almacenamiento inválidos en las declaraciones de funciones friend" + + #: cp/decl.c:10691 + msgid "size of member `%D' is not constant" + msgstr "el tamaño del miembro `%D' no es constante" + + #: cp/decl.c:10770 + msgid "destructor cannot be static member function" + msgstr "el destructor no puede ser una función miembro de tipo static" + + #: cp/decl.c:10773 + #, c-format + msgid "destructors may not be `%s'" + msgstr "los destructores no pueden ser `%s'" + + #: cp/decl.c:10794 + msgid "constructor cannot be static member function" + msgstr "el constructor no puede ser una función miembro de tipo static" + + #: cp/decl.c:10797 + msgid "constructors cannot be declared virtual" + msgstr "los constructores no pueden ser declarados virtual" + + #: cp/decl.c:10802 + #, c-format + msgid "constructors may not be `%s'" + msgstr "los constructores no pueden ser `%s'" + + #: cp/decl.c:10812 + msgid "return value type specifier for constructor ignored" + msgstr "el especificador de tipo del valor devuelto para el constructor es ignorado" + + #: cp/decl.c:10831 + #, c-format + msgid "can't initialize friend function `%s'" + msgstr "no se pueden iniciar la función friend `%s'" + + #. Cannot be both friend and virtual. + #: cp/decl.c:10835 + msgid "virtual functions cannot be friends" + msgstr "las funciones virtual no pueden ser friend" + + #: cp/decl.c:10840 + msgid "friend declaration not in class definition" + msgstr "la declaración friend no está en una definición de clase" + + #: cp/decl.c:10842 + #, c-format + msgid "can't define friend function `%s' in a local class definition" + msgstr "la no se puede definir la función friend `%s' en una definición de clase local" + + #: cp/decl.c:10866 + msgid "destructors may not have parameters" + msgstr "los destructores no pueden tener parámetros" + + #: cp/decl.c:10896 + #, c-format + msgid "cannot declare %s to references" + msgstr "no se puede declarar %s a referencias" + + #: cp/decl.c:10907 + msgid "cannot declare pointer to `%#T' member" + msgstr "no se pueden declarar un apuntador al miembro `%#T'" + + #: cp/decl.c:10922 + msgid "invalid type: `void &'" + msgstr "tipo inválido: `void &'" + + #: cp/decl.c:11084 + msgid "extra qualification `%T::' on member `%s' ignored" + msgstr "se ignora la calificación extra `%T::' en el miembro `%s'" + + #: cp/decl.c:11094 + msgid "cannot declare member function `%T::%s' within `%T'" + msgstr "no se puede declarar la función miembro `%T::%s' dentro de `%T'" + + #: cp/decl.c:11109 + msgid "cannot declare member `%T::%s' within `%T'" + msgstr "no se puede declarar el miembro `%T::%s' dentro de `%T'" + + #. [dcl.fct.spec] The explicit specifier shall only be used in + #. declarations of constructors within a class definition. + #: cp/decl.c:11189 + msgid "only declarations of constructors can be `explicit'" + msgstr "solamente las declaraciones de constructores pueden ser `explicit'" + + #: cp/decl.c:11197 + #, c-format + msgid "non-member `%s' cannot be declared `mutable'" + msgstr "el no-miembro `%s' no puede ser declarado `mutable'" + + #: cp/decl.c:11202 + #, c-format + msgid "non-object member `%s' cannot be declared `mutable'" + msgstr "el miembro no-objeto `%s' no puede ser declarado `mutable'" + + #: cp/decl.c:11208 + #, c-format + msgid "function `%s' cannot be declared `mutable'" + msgstr "la función `%s' no puede ser declarada `mutable'" + + #: cp/decl.c:11213 + #, c-format + msgid "static `%s' cannot be declared `mutable'" + msgstr "static `%s' no puede ser declarado `mutable'" + + #: cp/decl.c:11218 + #, c-format + msgid "const `%s' cannot be declared `mutable'" + msgstr "const `%s' no puede ser declarado `mutable'" + + #: cp/decl.c:11231 + msgid "template-id `%D' used as a declarator" + msgstr "el id de plantilla `%D' se usa como un declarador" + + #: cp/decl.c:11252 + msgid "ISO C++ forbids nested type `%D' with same name as enclosing class" + msgstr "ISO C++ prohibe el tipo anidado `%D' con el mismo nombre que la clase que lo contiene" + + #: cp/decl.c:11299 + msgid "typedef name may not be class-qualified" + msgstr "el nombre de la definición de tipo puede no ser calificada para la clase" + + #: cp/decl.c:11307 + msgid "invalid type qualifier for non-member function type" + msgstr "calificador de tipo inválido para el tipo de función no miembro" + + #: cp/decl.c:11323 + msgid "typedef declaration includes an initializer" + msgstr "la declaración typedef incluye una asignación inicial de valores" + + #: cp/decl.c:11373 + msgid "type qualifiers specified for friend class declaration" + msgstr "se especificaron calificadores de tipo en una declaración de clase friend" + + #: cp/decl.c:11378 + msgid "`inline' specified for friend class declaration" + msgstr "se especificó `inline' para la declaración de clase friend" + + #: cp/decl.c:11388 + msgid "template parameters cannot be friends" + msgstr "los parámetros de la plantilla no pueden ser friends" + + #: cp/decl.c:11390 + msgid "friend declaration requires class-key, i.e. `friend class %T::%T'" + msgstr "la declaración friend requere una llave de clase, p.e. `friend class %T::%T'" + + #: cp/decl.c:11395 + msgid "friend declaration requires class-key, i.e. `friend %#T'" + msgstr "la declaración friend requiere una llave de clase, p.e. `friend %#T'" + + #: cp/decl.c:11409 + msgid "trying to make class `%T' a friend of global scope" + msgstr "tratando hacer que la clase `%T' sea un friend de ámbito global" + + #: cp/decl.c:11420 + msgid "invalid qualifiers on non-member function type" + msgstr "calificadores inválidos en el tipo de función no miembro" + + #: cp/decl.c:11439 + msgid "abstract declarator `%T' used as declaration" + msgstr "el declarador abstracto `%T' se utilizó como una declaración" + + #: cp/decl.c:11451 + msgid "unnamed variable or field declared void" + msgstr "variable sin nombre o campo declarado void" + + #: cp/decl.c:11460 + msgid "variable or field declared void" + msgstr "variable o campo declarado void" + + #: cp/decl.c:11470 + msgid "cannot use `::' in parameter declaration" + msgstr "no se puede usar `::' en la declaración de parámetros" + + #. Something like struct S { int N::j; }; + #: cp/decl.c:11516 + msgid "invalid use of `::'" + msgstr "uso inválido de `::'" + + #: cp/decl.c:11528 + msgid "function `%D' cannot be declared friend" + msgstr "la función `%D' no puede ser declarada friend" + + #: cp/decl.c:11540 + msgid "can't make `%D' into a method -- not in a class" + msgstr "no se puede hacer `%D' en un método -- no está en una clase" + + #: cp/decl.c:11549 + msgid "function `%D' declared virtual inside a union" + msgstr "la función `%s' se declaró virtual dentro de un union" + + #: cp/decl.c:11561 + msgid "`%D' cannot be declared virtual, since it is always static" + msgstr "`%D' no se puede declarar virtual, ya que siempre es static" + + #: cp/decl.c:11634 + msgid "field `%D' has incomplete type" + msgstr "el campo `%D' tiene tipo de dato incompleto" + + #: cp/decl.c:11636 + msgid "name `%T' has incomplete type" + msgstr "el nombre `%T' tiene tipo de dato incompleto" + + #: cp/decl.c:11645 + msgid " in instantiation of template `%T'" + msgstr " en la instanciación de la plantilla `%T'" + + #: cp/decl.c:11655 + #, c-format + msgid "`%s' is neither function nor member function; cannot be declared friend" + msgstr "`%s' no es ni función ni función miembro; no puede ser declarado friend" + + #: cp/decl.c:11666 + msgid "member functions are implicitly friends of their class" + msgstr "las funciones miembros son implícitamente friends de su clase" + + #. An attempt is being made to initialize a non-static + #. member. But, from [class.mem]: + #. + #. 4 A member-declarator can contain a + #. constant-initializer only if it declares a static + #. member (_class.static_) of integral or enumeration + #. type, see _class.static.data_. + #. + #. This used to be relatively common practice, but + #. the rest of the compiler does not correctly + #. handle the initialization unless the member is + #. static so we make it static below. + #: cp/decl.c:11713 + msgid "ISO C++ forbids initialization of member `%D'" + msgstr "ISO C++ prohibe la iniciación del miembro `%D'" + + #: cp/decl.c:11715 + msgid "making `%D' static" + msgstr "haciendo a `%D' static" + + #: cp/decl.c:11739 + msgid "ISO C++ forbids static data member `%D' with same name as enclosing class" + msgstr "ISO C++ prohibe que el miembro de datos static `%D' tenga el mismo nombre que la clase que lo contiene" + + #: cp/decl.c:11780 + #, c-format + msgid "storage class `auto' invalid for function `%s'" + msgstr "clase de almacenamiento `auto' inválida para la función `%s'" + + #: cp/decl.c:11782 + #, c-format + msgid "storage class `register' invalid for function `%s'" + msgstr "clase de almacenamiento `register' inválida para la función `%s'" + + #: cp/decl.c:11793 + #, c-format + msgid "storage class `static' invalid for function `%s' declared out of global scope" + msgstr "la clase de almacenamiento `static' es inválida para la función `%s' declarada fuera del ámbito global" + + #: cp/decl.c:11795 + #, c-format + msgid "storage class `inline' invalid for function `%s' declared out of global scope" + msgstr "la clase de almacenamiento `inline' es inválida para la función `%s' declarada fuera del ámbito global" + + #: cp/decl.c:11802 + #, c-format + msgid "virtual non-class function `%s'" + msgstr "la función virtual `%s' no es clase" + + #: cp/decl.c:11831 + msgid "cannot declare member function `%D' to have static linkage" + msgstr "no se puede declarar que la función miembro `%D' tenga enlazado estático" + + #. FIXME need arm citation + #: cp/decl.c:11837 + msgid "cannot declare static function inside another function" + msgstr "no se puede declarar una función static dentro de otra función" + + #: cp/decl.c:11865 + msgid "`static' may not be used when defining (as opposed to declaring) a static data member" + msgstr "`static' puede no ser utilizado cuando se define (opuesto a la declaración) un dato miembro static" + + #: cp/decl.c:11871 + msgid "static member `%D' declared `register'" + msgstr "se declaró el miembro static `%D' como `register'" + + #: cp/decl.c:11876 + msgid "cannot explicitly declare member `%#D' to have extern linkage" + msgstr "no se puede declarar explícitamente que el miembro `%#D' tenga un enlazado externo" + + #: cp/decl.c:12048 + msgid "default argument for `%#D' has type `%T'" + msgstr "el argumento por omisión de `%#D' tiene tipo `%T'" + + #: cp/decl.c:12051 + msgid "default argument for parameter of type `%T' has type `%T'" + msgstr "el argumento por omisión para el parámetro del tipo `%T' tiene el tipo `%T'" + + #: cp/decl.c:12068 + msgid "default argument `%E' uses local variable `%D'" + msgstr "el argumento por omisión `%E' usa la variable local `%D'" + + #: cp/decl.c:12113 + #, c-format + msgid "invalid string constant `%E'" + msgstr "constante de cadena inválida `%E'" + + #: cp/decl.c:12115 + msgid "invalid integer constant in parameter list, did you forget to give parameter name?" + msgstr "constante entera inválida en la lista de parámetros, ¿olvidó proporcionar nombre(s) de parámetro(s)?" + + #: cp/decl.c:12153 + msgid "parameter `%D' invalidly declared method type" + msgstr "el parámetro `%D' se declaró inválidamente como tipo de método" + + #: cp/decl.c:12159 + msgid "parameter `%D' invalidly declared offset type" + msgstr "el parámetro `%D' se declaró inválidamente como tipo de desplazamiento" + + #: cp/decl.c:12183 + msgid "parameter `%D' includes %s to array of unknown bound `%T'" + msgstr "el parámetro `%D' incluye %s para la matriz `%T' de límite desconocido" + + #. [class.copy] + #. + #. A declaration of a constructor for a class X is ill-formed if + #. its first parameter is of type (optionally cv-qualified) X + #. and either there are no other parameters or else all other + #. parameters have default arguments. + #. + #. We *don't* complain about member template instantiations that + #. have this form, though; they can occur as we try to decide + #. what constructor to use during overload resolution. Since + #. overload resolution will never prefer such a constructor to + #. the non-template copy constructor (which is either explicitly + #. or implicitly defined), there's no need to worry about their + #. existence. Theoretically, they should never even be + #. instantiated, but that's hard to forestall. + #: cp/decl.c:12350 + msgid "invalid constructor; you probably meant `%T (const %T&)'" + msgstr "constructor inválido; tal vez quiso decir `%T (const %T&)'" + + #: cp/decl.c:12501 + msgid "`%D' must be a nonstatic member function" + msgstr "`%D' debe ser una función miembro que no sea static" + + #: cp/decl.c:12507 + msgid "`%D' must be either a non-static member function or a non-member function" + msgstr "`%D' debe ser una función miembro no estático o una función no miembro" + + #: cp/decl.c:12524 + msgid "`%D' must have an argument of class or enumerated type" + msgstr "`%D' debe tener un argumento de tipo clase o enumerado" + + #: cp/decl.c:12556 + #, c-format + msgid "conversion to %s%s will never use a type conversion operator" + msgstr "la conversión a %s%s nunca usará un operador de conversión de tipo" + + #. 13.4.0.3 + #: cp/decl.c:12563 + msgid "ISO C++ prohibits overloading operator ?:" + msgstr "ISO C++ prohibe la sobrecarga del operador ?:" + + #: cp/decl.c:12613 + msgid "postfix `%D' must take `int' as its argument" + msgstr "el postfijo `%D' debe tomar `int' como su argumento" + + #: cp/decl.c:12617 + msgid "postfix `%D' must take `int' as its second argument" + msgstr "el postfijo `%D' debe tomar `int' como su segundo argumento" + + #: cp/decl.c:12624 + msgid "`%D' must take either zero or one argument" + msgstr "`%D' debe tomar cero o un argumentos" + + #: cp/decl.c:12626 + msgid "`%D' must take either one or two arguments" + msgstr "`%D' debe tomar uno o dos argumentos" + + #: cp/decl.c:12647 + msgid "prefix `%D' should return `%T'" + msgstr "el prefijo `%D' debe regresar `%T'" + + #: cp/decl.c:12653 + msgid "postfix `%D' should return `%T'" + msgstr "el postfijo `%D' debe regresar `%T'" + + #: cp/decl.c:12662 + msgid "`%D' must take `void'" + msgstr "`%D' debe tomar `void'" + + #: cp/decl.c:12664 cp/decl.c:12672 + msgid "`%D' must take exactly one argument" + msgstr "`%D' debe tomar cero o un argumentos exactamente" + + #: cp/decl.c:12674 + msgid "`%D' must take exactly two arguments" + msgstr "`%s' debe tomar cero o dos argumentos exactamente" + + #: cp/decl.c:12682 + msgid "user-defined `%D' always evaluates both arguments" + msgstr "el `%D' definido por el usuario siempre evalúa ambos argumentos" + + #: cp/decl.c:12694 + msgid "`%D' should return by value" + msgstr "`%D' debe regresar por valor" + + #: cp/decl.c:12706 cp/decl.c:12709 + msgid "`%D' cannot have default arguments" + msgstr "`%D' no puede tener argumentos por omisión" + + #: cp/decl.c:12800 + msgid "`%s %T' declares a new type at namespace scope" + msgstr "`%s %T' declara un tipo nuevo en el ámbito del nombre de espacio" + + #: cp/decl.c:12803 + msgid " names from dependent base classes are not visible to unqualified name lookup - to refer to the inherited type, say `%s %T::%T'" + msgstr " los nombres de las clases bases dependientes no son visibles para la búsqueda de nombres sin calificar - para referirse al tipo heredado, utilice `%s %T::%T'" + + #: cp/decl.c:12841 + msgid "using typedef-name `%D' after `%s'" + msgstr " usando el nombre de definición de tipo `%D' después de `%s'" + + #: cp/decl.c:12846 + msgid "using template type parameter `%T' after `%s'" + msgstr "usando el parámetro de tipo plantilla `%T' después de `%s'" + + #: cp/decl.c:12926 + msgid "use of enum `%#D' without previous declaration" + msgstr "uso del enum `%#D' sin declaración previa" + + #: cp/decl.c:13024 + msgid "derived union `%T' invalid" + msgstr "union derivada `%T' inválida" + + #: cp/decl.c:13068 + msgid "base type `%T' fails to be a struct or class type" + msgstr "el tipo base `%T' falla en ser un tipo struct o clase" + + #: cp/decl.c:13078 + msgid "base class `%T' has incomplete type" + msgstr "la clase base `%T' tiene tipo de dato incompleto" + + #: cp/decl.c:13086 + msgid "recursive type `%T' undefined" + msgstr "tipo recursivo `%T' sin definir" + + #: cp/decl.c:13088 + msgid "duplicate base type `%T' invalid" + msgstr "tipo base duplicado `%T' inválido" + + #: cp/decl.c:13199 + msgid "multiple definition of `%#T'" + msgstr "definición múltiple de `%#T'" + + #: cp/decl.c:13200 + msgid "previous definition here" + msgstr "definición previa aquí" + + #: cp/decl.c:13371 + msgid "enumerator value for `%D' not integer constant" + msgstr "el valor de enumerador para `%D' no es una constante entera" + + #: cp/decl.c:13391 + msgid "overflow in enumeration values at `%D'" + msgstr "desbordamiento en valores de enumeración en `%D'" + + #: cp/decl.c:13477 + msgid "return type `%#T' is incomplete" + msgstr "el tipo de devolución `%#T' es un tipo de dato incompleto" + + #: cp/decl.c:13593 + msgid "semicolon missing after declaration of `%#T'" + msgstr "falta punto y coma después de la declaración de `%#T'" + + #: cp/decl.c:13614 + msgid "return type for `main' changed to `int'" + msgstr "el tipo de devolución para `main' cambió a `int'" + + #: cp/decl.c:13645 + msgid "`%D' implicitly declared before its definition" + msgstr "`%D' declarado implícitamente antes de su definición" + + #: cp/decl.c:13667 cp/typeck.c:6530 + msgid "`operator=' should return a reference to `*this'" + msgstr "`operator=' debe devolver una referencia a `*this'" + + #: cp/decl.c:13931 + msgid "parameter `%D' declared void" + msgstr "el parámetro `%D' se declaró void" + + #: cp/decl.c:14408 + msgid "`%D' is already defined in class `%T'" + msgstr "`%D' ya se ha definido en la clase `%T'" + + #: cp/decl.c:14625 + msgid "static member function `%#D' declared with type qualifiers" + msgstr "la función miembro static `%#D' es declarada con calificadores de tipo" + + #: cp/decl2.c:529 + #, c-format + msgid "-f%s is no longer supported" + msgstr "-f%s ya no tiene soporte" + + #: cp/decl2.c:535 + msgid "-fhandle-exceptions has been renamed to -fexceptions (and is now on by default)" + msgstr "se renombró -fhandle-exceptions a -fexceptions (y ahora está activado por omisión)" + + #: cp/decl2.c:561 + msgid "-fname-mangling-version is no longer supported" + msgstr "-fname-mangling-version ya no tiene soporte" + + #: cp/decl2.c:624 + msgid "-Wno-strict-prototypes is not supported in C++" + msgstr "-Wno-strict-prototypes no tiene soporte en C++" + + #: cp/decl2.c:761 + #, c-format + msgid "duplicate type qualifiers in %s declaration" + msgstr "calificadores de tipo duplicados en la declaración %s" + + #: cp/decl2.c:800 + msgid "template `%#D' instantiated in file without #pragma interface" + msgstr "se instanció la plantilla `%#D' en el fichero sin #pragma interface" + + #: cp/decl2.c:806 + msgid "template `%#D' defined in file without #pragma interface" + msgstr "se definió la plantilla `%#D' en el fichero sin #pragma interface" + + #: cp/decl2.c:963 + msgid "name missing for member function" + msgstr "falta el nombre para la función miembro" + + #. Something has gone very wrong. Assume we are mistakenly reducing + #. an expression instead of a declaration. + #: cp/decl2.c:1026 + msgid "parser may be lost: is there a '{' missing somewhere?" + msgstr "el decodificador se ha perdido: ¿falta algún '{' en algún lugar?" + + #: cp/decl2.c:1057 cp/decl2.c:1071 + msgid "ambiguous conversion for array subscript" + msgstr "conversión ambigua para índice de matriz" + + #: cp/decl2.c:1065 + msgid "invalid types `%T[%T]' for array subscript" + msgstr "tipos inválidos `%T[%T]' para índice de matriz" + + #: cp/decl2.c:1113 + msgid "type `%#T' argument given to `delete', expected pointer" + msgstr "se dió un argumento de tipo `%#T' a `delete', se esperaba un apuntador" + + #: cp/decl2.c:1121 + msgid "anachronistic use of array size in vector delete" + msgstr "uso anacrónico del tamaño de la matriz desconocida en vector delete" + + #: cp/decl2.c:1131 + msgid "cannot delete a function. Only pointer-to-objects are valid arguments to `delete'" + msgstr "no se puede borrar una función. Solamente los apuntadores a objetos son argumentos válidos para `delete'" + + #: cp/decl2.c:1138 + msgid "deleting `%T' is undefined" + msgstr "el borrar `%T' está indefinido" + + #: cp/decl2.c:1146 + msgid "deleting array `%#D'" + msgstr "borrando la matriz `%#D'" + + #. 14.5.2.2 [temp.mem] + #. + #. A local class shall not have member templates. + #: cp/decl2.c:1180 + msgid "invalid declaration of member template `%#D' in local class" + msgstr "declaración inválida de la plantilla miembro `%#D' en la clase local" + + #: cp/decl2.c:1189 + msgid "invalid use of `virtual' in template declaration of `%#D'" + msgstr "uso inválido de `virtual' en la declaración de plantilla de `%#D'" + + #: cp/decl2.c:1199 cp/pt.c:2562 + msgid "template declaration of `%#D'" + msgstr "redeclaración en plantilla de `%#D'" + + #: cp/decl2.c:1249 + msgid "Java method '%D' has non-Java return type `%T'" + msgstr "el método Java `%D' tiene un tipo de devolución `%T' que no es de Java" + + #: cp/decl2.c:1258 + msgid "Java method '%D' has non-Java parameter type `%T'" + msgstr "el método Java `%D' tiene un tipo de parámetro `%T' que no es de Java" + + #: cp/decl2.c:1354 + msgid "prototype for `%#D' does not match any in class `%T'" + msgstr "el prototipo para `%#D' no coincide con ningún otro en la clase `%T'" + + #: cp/decl2.c:1356 + msgid "candidate%s: %+#D" + msgstr "candidato%s: %+#D" + + #: cp/decl2.c:1359 + msgid " %#D" + msgstr " %#D" + + #: cp/decl2.c:1411 + msgid "local class `%#T' shall not have static data member `%#D'" + msgstr "la clase local `%#T' no debe tener el miembro static `%#D'" + + #: cp/decl2.c:1419 + msgid "initializer invalid for static member with constructor" + msgstr "iniciador inválido para miembro static con constructor" + + #: cp/decl2.c:1422 + msgid "(an out of class initialization is required)" + msgstr "(se requiere un inicio fuera de la clase)" + + #: cp/decl2.c:1481 + msgid "invalid data member initialization" + msgstr "iniciación del dato miembro inválida" + + #: cp/decl2.c:1484 + msgid "(use `=' to initialize static data members)" + msgstr "(use `=' para iniciar datos miembros static)" + + #: cp/decl2.c:1524 + msgid "member `%D' conflicts with virtual function table field name" + msgstr "el miembro `%D' tiene conflictos con el nombre de campo de la tabla de funciones virtuales" + + #: cp/decl2.c:1544 + msgid "`%D' is already defined in `%T'" + msgstr "`%D' ya está definido en `%T'" + + #: cp/decl2.c:1595 + msgid "field initializer is not constant" + msgstr "iniciador del campo no es constat" + + #: cp/decl2.c:1618 + msgid "`asm' specifiers are not permitted on non-static data members" + msgstr "no se permiten los especificadores `asm' en miembros de datos no estáticos" + + #: cp/decl2.c:1670 + msgid "cannot declare `%D' to be a bit-field type" + msgstr "no se puede declarar `%D' que sea un tipo de campo de bits" + + #: cp/decl2.c:1680 + msgid "cannot declare bit-field `%D' with function type" + msgstr "no se puede declarar el campo de bits `%D' con un tipo de función" + + #: cp/decl2.c:1687 + msgid "`%D' is already defined in the class %T" + msgstr "`%D' ya está definido en la clase %T" + + #: cp/decl2.c:1694 + msgid "static member `%D' cannot be a bit-field" + msgstr "el miembro static `%D' no puede ser un campo de bits" + + #: cp/decl2.c:1763 + msgid "initializer specified for non-member function `%D'" + msgstr "iniciador especificado para la función no-miembro `%D'" + + #: cp/decl2.c:1767 + msgid "invalid initializer for virtual method `%D'" + msgstr "iniciador inválido para el método virtual `%D'" + + #: cp/decl2.c:1871 + msgid "anonymous struct not inside named type" + msgstr "struct anónimo no se encuentra dentro de un tipo nombrado" + + #: cp/decl2.c:1967 + msgid "namespace-scope anonymous aggregates must be static" + msgstr "los agregados anónimos de alcance de nombre de espacio deben ser static" + + #: cp/decl2.c:1977 + msgid "anonymous aggregate with no members" + msgstr "agregado anónimo sin miembros" + + #: cp/decl2.c:2044 + msgid "`operator new' must return type `%T'" + msgstr "`operator new' debe devolver el tipo `%T'" + + #: cp/decl2.c:2052 + msgid "`operator new' takes type `size_t' (`%T') as first parameter" + msgstr "`operator new' toma el tipo `size_t' (`%T') como primer argumento" + + #: cp/decl2.c:2079 + msgid "`operator delete' must return type `%T'" + msgstr "`operator delete' debe devolver el tipo `%T'" + + #: cp/decl2.c:2087 + msgid "`operator delete' takes type `%T' as first parameter" + msgstr "`operator delete' toma el tipo `%T' como primer argumento" + + #. Overflow occurred. That means there are at least 4 billion + #. initialization functions. + #: cp/decl2.c:2828 + msgid "too many initialization functions required" + msgstr "se requieren demasiados argumentos para el inicio de la función" + + #: cp/decl2.c:3639 + msgid "use of old-style cast" + msgstr "uso de la conversión de estilo antiguo" + + #: cp/decl2.c:4220 + msgid "use of `%D' is ambiguous" + msgstr "el uso de `%D' es ambiguo" + + #: cp/decl2.c:4221 + msgid " first declared as `%#D' here" + msgstr " primero declarado como `%#D' aquí" + + #: cp/decl2.c:4224 + msgid " also declared as `%#D' here" + msgstr " también declarado como `%#D' aquí" + + #: cp/decl2.c:4239 + msgid "`%D' denotes an ambiguous type" + msgstr "`%D' denota un tipo ambiguo" + + #: cp/decl2.c:4240 + msgid " first type here" + msgstr " primer tipo aquí" + + #: cp/decl2.c:4241 + msgid " other type here" + msgstr " otro tipo aquí" + + #: cp/decl2.c:4338 + msgid "declaration of `%D' not in a namespace surrounding `%D'" + msgstr "la declaración de `%D' no está en un espacio de nombres alrededor de `%D'" + + #: cp/decl2.c:4372 + msgid "`%D' should have been declared inside `%D'" + msgstr "`%D' debería ser declarado dentro de `%D'" + + #: cp/decl2.c:4506 + msgid "`%D' is not a function," + msgstr "`%D' no es una función," + + #: cp/decl2.c:4507 + msgid " conflict with `%D'" + msgstr " tiene conflicto con `%D'" + + #. The parser did not find it, so it's not there. + #: cp/decl2.c:4821 + msgid "unknown namespace `%D'" + msgstr "espacio de nombres `%D' desconocido" + + #: cp/decl2.c:4855 cp/decl2.c:5125 + msgid "`%T' is not a namespace" + msgstr "`%T' no es un nombre de espacio" + + #: cp/decl2.c:4857 + msgid "`%D' is not a namespace" + msgstr "`%D' no es un nombre de espacio" + + #: cp/decl2.c:4866 + msgid "a using-declaration cannot specify a template-id. Try `using %D'" + msgstr "una declaración de uso no puede especificar un id de plantilla. Intente `using %D'" + + #: cp/decl2.c:4880 + msgid "namespace `%D' not allowed in using-declaration" + msgstr "no se permite el espacio de nombres `%D' en la declaración de uso" + + #: cp/decl2.c:4909 + msgid "`%D' not declared" + msgstr "no se declaró `%D'" + + #: cp/decl2.c:4960 + msgid "`%D' is already declared in this scope" + msgstr "`%D' ya se ha declarado en este ámbito" + + #: cp/decl2.c:4987 + msgid "using declaration `%D' introduced ambiguous type `%T'" + msgstr "el uso de la declaración `%D' introdujo el tipo ambiguo `%T'" + + #: cp/decl2.c:5078 + msgid "using-declaration for non-member at class scope" + msgstr "declaración de uso para un no miembro en el ámbito de la clase" + + #: cp/decl2.c:5084 + msgid "using-declaration for destructor" + msgstr "declaración de uso para el destructor" + + #: cp/decl2.c:5090 + msgid "a using-declaration cannot specify a template-id. Try `using %T::%D'" + msgstr "una declaración de uso no puede especificar un id de plantilla. Intente `using %T::%D'" + + #: cp/decl2.c:5119 + msgid "namespace `%T' undeclared" + msgstr "espacio de nombres `%T' sin declarar" + + #: cp/decl2.c:5148 + msgid "default argument missing for parameter %P of `%+#D'" + msgstr "falta el argumento por omisión para el parámetro %P de `%+#D'" + + #: cp/decl2.c:5238 + msgid "extra qualification `%T::' on member `%D' ignored" + msgstr "se ignora la calificación extra `%T::' en el miembro `%D'" + + #: cp/decl2.c:5242 + msgid "`%T' does not have a class or union named `%D'" + msgstr "`%T' no tiene una clase o union llamado `%D'" + + #: cp/decl2.c:5255 + msgid "`%T' is not a class or union type" + msgstr "`%T' no es una clase o tipo union" + + #: cp/error.c:35 + #, c-format + msgid "`%s' not supported by %s" + msgstr "`%s' no tiene soporte para %s" + + #: cp/error.c:577 + #, c-format + msgid "" + msgstr "<%s anónimo>" + + #: cp/error.c:814 + #, c-format + msgid "(static %s for %s)" + msgstr "(% static para %s)" + + #: cp/error.c:2438 + #, c-format + msgid "In %s `%s':" + msgstr "En %s `%s':" + + #: cp/error.c:2493 + #, c-format + msgid "%s: In instantiation of `%s':\n" + msgstr "%s: En la instanciación de `%s':\n" + + #: cp/error.c:2517 + #, c-format + msgid "%s:%d: instantiated from `%s'\n" + msgstr "%s:%d: instanciado desde `%s'\n" + + #: cp/error.c:2522 + #, c-format + msgid "%s:%d: instantiated from here\n" + msgstr "%s:%d: instanciado desde aquí\n" + + #. damn ICE suppression + #: cp/error.c:2675 + #, c-format + msgid "unexpected letter `%c' in locate_error\n" + msgstr "letra `%c' inesperada en locate_error\n" + + #. Can't throw a reference. + #: cp/except.c:245 + msgid "type `%T' is disallowed in Java `throw' or `catch'" + msgstr "el tipo `%T' no está permitido en `throw' o `catch' de Java" + + #: cp/except.c:256 + msgid "call to Java `catch' or `throw' with `jthrowable' undefined" + msgstr "llamada a `catch' ó `throw' de Java con `jthrowable' sin definir" + + #. Thrown object must be a Throwable. + #: cp/except.c:263 + msgid "type `%T' is not derived from `java::lang::Throwable'" + msgstr "el tipo `%T' no es derivado de `java::lang::Throwable'" + + #: cp/except.c:327 + msgid "mixing C++ and Java catches in a single translation unit" + msgstr "mezclando `catch'es de C++ y Java en una sola unidad de traducción" + + #: cp/except.c:558 + msgid "throwing NULL, which has integral, not pointer type" + msgstr "arrojando NULL, que tiene un tipo integral, no apuntador" + + #: cp/except.c:663 + msgid " in thrown expression" + msgstr " en expresión thrown" + + #: cp/except.c:775 + msgid "expression '%E' of abstract class type '%T' cannot be used in throw-expression" + msgstr "no se puede usar la expresión '%E' del tipo de clase abstracta '%T' en las expresiones thrown" + + #: cp/except.c:863 + msgid "exception of type `%T' will be caught" + msgstr "la excepción del tipo `%T' será atrapada" + + #: cp/except.c:866 + msgid " by earlier handler for `%T'" + msgstr " por un manejador anterior para `%T'" + + #: cp/except.c:887 + msgid "`...' handler must be the last handler for its try block" + msgstr "el manejador `...' debe ser el último manejador para su bloque try" + + #: cp/friend.c:155 + msgid "`%D' is already a friend of class `%T'" + msgstr "`%D' ya es un friend de la clase `%T'" + + #: cp/friend.c:157 + msgid "previous friend declaration of `%D'" + msgstr "declaración friend previa de `%D'" + + #: cp/friend.c:197 + msgid "invalid type `%T' declared `friend'" + msgstr "el tipo inválido `%T' fue declarado `friend'" + + #. [temp.friend] + #. + #. Friend declarations shall not declare partial + #. specializations. + #: cp/friend.c:209 + msgid "partial specialization `%T' declared `friend'" + msgstr "la especialización parcial `%T' se declaró `friend'" + + #: cp/friend.c:221 + msgid "class `%T' is implicitly friends with itself" + msgstr "la clase `%T' es implícitamente friend con sí misma" + + #. template friend typename S::X; + #: cp/friend.c:239 + msgid "typename type `%#T' declared `friend'" + msgstr "el tipo de nombre de tipo `%#T' se declaró `friend'" + + #. template friend class T; + #: cp/friend.c:245 + msgid "template parameter type `%T' declared `friend'" + msgstr "el tipo de parámetro de plantilla `%T' se declaró `friend'" + + #. template friend class A; where A is not a template + #: cp/friend.c:251 + msgid "`%#T' is not a template" + msgstr "`%#T' no es una plantilla" + + #: cp/friend.c:266 + msgid "`%T' is already a friend of `%T'" + msgstr "`%T' ya es un friend de `%T'" + + #: cp/friend.c:362 + msgid "member `%D' declared as friend before type `%T' defined" + msgstr "el miembro `%D' es declarado friend antes que se defina el tipo `%T'" + + #: cp/friend.c:417 + msgid "friend declaration `%#D' declares a non-template function" + msgstr "la declaración friend `%#D' declara una función que no es plantilla" + + #: cp/friend.c:420 + msgid "(if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) -Wno-non-template-friend disables this warning" + msgstr "(si esta no es su intención, asegúrese que la plantilla de la función ya ha sido declarada y agregue <> aquí después del nombre de la función) -Wno-non-template-friend desactiva este aviso" + + #: cp/g++spec.c:198 java/jvspec.c:424 + #, c-format + msgid "argument to `%s' missing\n" + msgstr "falta el argumento para `%s'\n" + + #: cp/init.c:285 + msgid "default-initialization of `%#D', which has reference type" + msgstr "la iniciación por omisión de `%#D', el cual tiene el tipo de referencia" + + #: cp/init.c:290 + msgid "uninitialized reference member `%D'" + msgstr "referencia del miembro `%D' sin iniciar" + + #: cp/init.c:298 + msgid "initializer list treated as compound expression" + msgstr "la lista de iniciadores tratada como una expresión compuesta" + + #: cp/init.c:410 + msgid "member initializers for `%#D'" + msgstr "iniciadores miembro para `%#D'" + + #: cp/init.c:412 + msgid " and `%#D'" + msgstr " y `%#D'" + + #: cp/init.c:413 + msgid " will be re-ordered to match declaration order" + msgstr " se reordenará para coincidir con el orden de la declaración" + + #: cp/init.c:428 + msgid "multiple initializations given for member `%D'" + msgstr "se dieron iniciaciones múltiples para el miembro `%D'" + + #: cp/init.c:500 + msgid "initializations for multiple members of `%T'" + msgstr "iniciaciones para múltiples miembros de `%T'" + + #: cp/init.c:617 + msgid "base initializers for `%#T'" + msgstr "iniciadores base para `%#T'" + + #: cp/init.c:618 + msgid " and `%#T'" + msgstr " y `%#T'" + + #: cp/init.c:619 + msgid " will be re-ordered to match inheritance order" + msgstr " se reordenará para coincidir con el orden de herencia" + + #: cp/init.c:631 + msgid "base class `%T' already initialized" + msgstr "la clase base `%T' ya se ha iniciado" + + #: cp/init.c:702 + msgid "base class `%#T' should be explicitly initialized in the copy constructor" + msgstr "la clase base `%#T' debe ser iniciada explícitamente en la copia del constructor" + + #: cp/init.c:745 + msgid "`%D' should be initialized in the member initialization list" + msgstr "`%D' debe ser iniciado explícitamente en la lista de iniciación de miembros" + + #: cp/init.c:987 + msgid "class `%T' does not have any field named `%D'" + msgstr "la clase `%T' no tiene ningún campo llamado `%D'" + + #: cp/init.c:993 + msgid "field `%#D' is static; the only point of initialization is its definition" + msgstr "el campo `%#D' es static; el único punto de iniciación es su definición" + + #: cp/init.c:1032 + msgid "unnamed initializer for `%T', which has no base classes" + msgstr "iniciador sin nombre para `%T', el cual no tiene una clase base" + + #: cp/init.c:1039 + msgid "unnamed initializer for `%T', which uses multiple inheritance" + msgstr "iniciador sin nombre para `%T', el cual usa herencia múltiple" + + #: cp/init.c:1068 + msgid "type `%D' is not a direct or virtual base of `%T'" + msgstr "el tipo `%D' no es una base directa o virtual de `%T'" + + #: cp/init.c:1071 + msgid "type `%D' is not a direct base of `%T'" + msgstr "el tipo `%D' no es una base directa de `%T'" + + #. Handle bad initializers like: + #. class COMPLEX { + #. public: + #. double re, im; + #. COMPLEX(double r = 0.0, double i = 0.0) {re = r; im = i;}; + #. ~COMPLEX() {}; + #. }; + #. + #. int main(int argc, char **argv) { + #. COMPLEX zees(1.0, 0.0)[10]; + #. } + #. + #: cp/init.c:1165 + msgid "bad array initializer" + msgstr "iniciador de matriz erróneo" + + #: cp/init.c:1357 + msgid "`%T' is not an aggregate type" + msgstr "`%T' no es un tipo agregado" + + #: cp/init.c:1380 + msgid "`%T' fails to be an aggregate typedef" + msgstr "`%T' falla en ser un tipo agregado" + + #: cp/init.c:1389 + msgid "type `%T' is of non-aggregate type" + msgstr "el tipo `%T' es de un tipo no agregado" + + #: cp/init.c:1491 + msgid "cannot call destructor `%T::~%T' without object" + msgstr "no se puede llamar al destructor `%T::~%T' sin un objeto" + + #: cp/init.c:1531 + msgid "invalid use of non-static field `%D'" + msgstr "uso inválido del campo no static `%D'" + + #. We can get here when processing a bad default + #. argument, like: + #. struct S { int a; void f(int i = a); } + #: cp/init.c:1540 cp/method.c:163 + msgid "invalid use of member `%D'" + msgstr "uso inválido del miembro `%D'" + + #: cp/init.c:1550 + msgid "no method `%T::%D'" + msgstr "no hay un método `%T::%D'" + + #: cp/init.c:1643 + msgid "incomplete type `%T' does not have member `%D'" + msgstr "el tipo incompleto `%T' no tiene al miembro `%D'" + + #: cp/init.c:1712 + msgid "`%D' is not a member of type `%T'" + msgstr "`%D' no es un miembro de tipo `%T'" + + #: cp/init.c:1731 + msgid "illegal pointer to bit-field `%D'" + msgstr "apuntador ilegal al campo de bit `%D'" + + #: cp/init.c:1770 + msgid "object missing in use of pointer-to-member construct" + msgstr "falta objeto en el uso de una consctrucción que apunta a miembros" + + #: cp/init.c:1810 + msgid "member `%D' is non-static but referenced as a static member" + msgstr "el miembro `%D' no es static pero es referenciado como un miembro static" + + #: cp/init.c:1812 cp/typeck.c:3130 cp/typeck.c:3238 + msgid "at this point in file" + msgstr "en este punto en el fichero" + + #: cp/init.c:1853 cp/typeck.c:2929 + #, c-format + msgid "object missing in `%E'" + msgstr "falta un objeto en `%E'" + + #: cp/init.c:1984 + msgid "new of array type fails to specify size" + msgstr "new de matriz falla al especificar el tamaño" + + #: cp/init.c:1995 + msgid "size in array new must have integral type" + msgstr "el tamaño de la matriz nueva debe tener un tipo integral" + + #: cp/init.c:2001 + msgid "zero size array reserves no space" + msgstr "la matriz de tamaño cero no reserva espacio" + + #: cp/init.c:2066 + msgid "new cannot be applied to a reference type" + msgstr "new no puede ser aplicado a un tipo de referencia" + + #: cp/init.c:2072 + msgid "new cannot be applied to a function type" + msgstr "new no puede ser aplicado a un tipo de referencia" + + #: cp/init.c:2119 + msgid "call to Java constructor, while `jclass' undefined" + msgstr "llamado a constructor Java, mientras `jclass' está indefinido" + + #: cp/init.c:2135 + msgid "can't find class$" + msgstr "no se puede encontrar class$" + + #: cp/init.c:2249 + msgid "invalid type `void' for new" + msgstr "tipo `void' inválido para new" + + #: cp/init.c:2301 + #, c-format + msgid "call to Java constructor with `%s' undefined" + msgstr "llamado a constructor Java con `%s' sin definir" + + #: cp/init.c:2408 + msgid "ISO C++ forbids initialization in array new" + msgstr "ISO C++ prohibe la iniciación en la matriz new" + + #: cp/init.c:2426 cp/typeck2.c:359 cp/typeck2.c:1217 + msgid "initializer list being treated as compound expression" + msgstr "se trata la lista de iniciadores como una expresión compuesta" + + #: cp/init.c:2432 + msgid "ISO C++ forbids aggregate initializer to new" + msgstr "ISO C++ prohibe un iniciador agregado para new" + + #: cp/init.c:2516 + msgid "uninitialized const in `new' of `%#T'" + msgstr "const sin iniciar en `new' de `%#T'" + + #: cp/init.c:2880 + msgid "initializer ends prematurely" + msgstr "el iniciador termina prematuramente" + + #: cp/init.c:2950 + msgid "cannot initialize multi-dimensional array with initializer" + msgstr "no se pueden asignar valores iniciales a matrices multidimensionales con el iniciador" + + #: cp/init.c:3125 + msgid "unknown array size in delete" + msgstr "tamaño de matriz desconocida en delete" + + #: cp/init.c:3398 + msgid "type to vector delete is neither pointer or array type" + msgstr "el tipo de vector delete no es del tipo apuntador ni matriz" + + #: cp/lex.c:144 + msgid "type name expected before `*'" + msgstr "se esperaba nombre de tipo antes de `*'" + + #: cp/lex.c:166 + msgid "cannot declare references to references" + msgstr "no se pueden declarar referencias a referencias" + + #: cp/lex.c:171 + msgid "cannot declare pointers to references" + msgstr "no se pueden declarar apuntadores a referencias" + + #: cp/lex.c:175 + msgid "type name expected before `&'" + msgstr "se esperaba nombre de tipo antes de `&'" + + #: cp/lex.c:993 + #, c-format + msgid "semicolon missing after %s declaration" + msgstr "falta punto y coma después de la declaración %s" + + #: cp/lex.c:996 + msgid "semicolon missing after declaration of `%T'" + msgstr "falta punto y coma después de la declaración de `%T'" + + #: cp/lex.c:1044 + #, c-format + msgid "junk at end of #pragma %s" + msgstr "basura al final de #pragma %s" + + #: cp/lex.c:1051 + #, c-format + msgid "invalid #pragma %s" + msgstr "#pragma %s inválida" + + #: cp/lex.c:1060 + msgid "#pragma vtable no longer supported" + msgstr "#pragma vtable ya no tiene soporte" + + #: cp/lex.c:1137 + #, c-format + msgid "#pragma implementation for %s appears after file is included" + msgstr "implementación de #pragma para %s aparece después de que el fichero es incluído" + + #: cp/lex.c:1162 + msgid "junk at end of #pragma GCC java_exceptions" + msgstr "basura al final del #pragma GCC java_exceptions" + + #: cp/lex.c:1247 + msgid "`%D' not defined" + msgstr "`%D' no está definido" + + #: cp/lex.c:1252 + msgid "`%D' was not declared in this scope" + msgstr "`%D' no fue declarado en este ámbito" + + #: cp/lex.c:1262 + msgid "`%D' undeclared (first use this function)" + msgstr "`%D' sin declarar (primero use esta función)" + + #: cp/lex.c:1266 + msgid "(Each undeclared identifier is reported only once for each function it appears in.)" + msgstr "(Cada identificador sin declarar es reportado sólo una vez para cada función en el que aparece.)" + + #: cp/lex.c:1289 + #, c-format + msgid "name lookup of `%s' changed" + msgstr "la búsqueda de nombre de `%s' cambió" + + #: cp/lex.c:1291 + msgid " matches this `%D' under ISO standard rules" + msgstr " coincide con este `%D' bajo las reglas de ISO estándard" + + #: cp/lex.c:1293 + msgid " matches this `%D' under old rules" + msgstr " coincide con este `%D' bajo las reglas antiguas" + + #: cp/lex.c:1303 cp/lex.c:1310 + #, c-format + msgid "name lookup of `%s' changed for new ISO `for' scoping" + msgstr "la búsqueda de nombre de `%s' cambió por el nuevo alcance ISO de `for'" + + #: cp/lex.c:1305 + msgid " cannot use obsolete binding at `%D' because it has a destructor" + msgstr " no se puede usar la asignación obsoleta en `%D' porque tiene un destructor" + + #: cp/lex.c:1312 + msgid " using obsolete binding at `%D'" + msgstr " usando la asignación obsoleta en `%D'" + + #: cp/lex.c:1378 + msgid "`::%D' undeclared (first use here)" + msgstr "`::%D' sin declarar (primer uso aquí)" + + #: cp/mangle.c:1912 + msgid "real-valued template parameters when cross-compiling" + msgstr "parámetros de una plantilla con valores reales cuando se hizo una compilación cruzada" + + #: cp/method.c:157 + msgid "invalid use of member `%D' in static member function" + msgstr "uso inválido del miembro `%D' en la función miembro static" + + #: cp/method.c:205 + msgid "use of namespace `%D' as expression" + msgstr "uso del espacio de nombres `%D' como una expresión" + + #: cp/method.c:210 + msgid "use of class template `%T' as expression" + msgstr "uso de la plantilla de clase `%T' como una expresión" + + #: cp/method.c:223 + #, c-format + msgid "use of %s from containing function" + msgstr "uso de %s desde una función contenedora" + + #: cp/method.c:226 + msgid " `%#D' declared here" + msgstr " `%#D' declarado aquí" + + #: cp/method.c:244 + msgid "request for member `%D' is ambiguous in multiple inheritance lattice" + msgstr "la petición por el miembro `%D' es ambigua en la red de herencia múltiple" + + #: cp/method.c:297 + msgid "implementation-reserved name `%D' used" + msgstr "se usó el nombre `%D' reservado para la implementación" + + #: cp/method.c:428 + msgid "generic thunk code fails for method `%#D' which uses `...'" + msgstr "el código de thunk genérico falló para el método `%#D' que utiliza `...'" + + #: cp/method.c:653 + msgid "non-static const member `%#D', can't use default assignment operator" + msgstr "el miembro const `%#D' que no es static, no puede usar el operador de asignación por omisión" + + #: cp/method.c:658 + msgid "non-static reference member `%#D', can't use default assignment operator" + msgstr "el miembro de referencia `%#D' que no es static, no puede usar el operador de asignación por omisión" + + #: parse.y:218 + msgid "`%s' tag used in naming `%#T'" + msgstr "se usó la marca `%s' al nombrar a`%#T'" + + #: parse.y:510 + msgid "keyword `export' not implemented, and will be ignored" + msgstr "la palabra clave `export' no está implementada, y será ignorada" + + #: parse.y:615 + msgid "use of linkage spec `%D' is different from previous spec `%D'" + msgstr "el uso de la especificación de enlazado `%D' es diferente de la especificación previa `%D'" + + #: parse.y:688 + msgid "invalid default template argument" + msgstr "argumento de la plantilla por omisión inválido" + + #: parse.y:919 + msgid "only constructors take base initializers" + msgstr "solamente los constructores toman iniciadores base" + + #: parse.y:921 + msgid "no base or member initializers given following ':'" + msgstr "no hay iniciadores de base o miembros dados después de ':'" + + #: parse.y:963 parse.y:969 + msgid "anachronistic old style base class initializer" + msgstr "iniciador de clase base de estilo antiguo anacrónico" + + #. Handle `Class>' without space in the `>>' + #: parse.y:1095 + msgid "`>>' should be `> >' in template class name" + msgstr "`>>' debe ser `> >' en el nombre de clase de la plantilla" + + #: parse.y:1133 + msgid "use of template qualifier outside template" + msgstr "uso del calificador de plantilla fuera de la plantilla" + + #: parse.y:1162 parse.y:1171 + #, c-format + msgid "ISO C++ forbids an empty condition for `%s'" + msgstr "ISO C++ prohibe una condición vacía para `%s'" + + #: parse.y:1194 + msgid "definition of class `%T' in condition" + msgstr "definición de la clase `%T' en una condición" + + #: parse.y:1196 + msgid "definition of enum `%T' in condition" + msgstr "definición del enum `%T' en una condición" + + #: parse.y:1207 + msgid "definition of array `%#D' in condition" + msgstr "definición de la matriz `%#D' en una condición" + + #: parse.y:1316 + msgid "old style placement syntax, use () instead" + msgstr "sintaxis de ubicación de estilo antiguo, use en su lugar ()" + + #: parse.y:1327 + msgid "`%T' is not a valid expression" + msgstr "`%T' no es una expresión válida" + + #: parse.y:1338 + msgid "ISO C++ forbids initialization of new expression with `='" + msgstr "ISO C++ prohibe la iniciación de la expresión new con `='" + + #: parse.y:1369 + msgid "ISO C++ forbids compound literals" + msgstr "ISO C++ prohibe literales compuestos" + + #: parse.y:1611 + msgid "ISO C++ forbids braced-groups within expressions" + msgstr "ISO C++ prohibe grupos de llaves dentro de las expresiones" + + #: parse.y:2013 parse.y:2028 + msgid "sigof type specifier" + msgstr "especificador de tipo sigof" + + #: parse.y:2018 + msgid "`sigof' applied to non-aggregate expression" + msgstr "`sigof' aplicado a una expresión no agregada" + + #: parse.y:2033 + msgid "`sigof' applied to non-aggregate type" + msgstr "`sigof' aplicado a un tipo no agregado" + + #: parse.y:2299 + msgid "using `typename' outside of template" + msgstr "usando `typename' fuera de la plantilla" + + #: parse.y:2370 + #, c-format + msgid "storage class specifier `%s' not allowed after struct or class" + msgstr "no se permite el especificador de clase de almacenamiento `%s' después de struct ó class" + + #: parse.y:2372 + #, c-format + msgid "type specifier `%s' not allowed after struct or class" + msgstr "no se permite el especificador de tipo `%s' después de struct ó class" + + #: parse.y:2374 + #, c-format + msgid "type qualifier `%s' not allowed after struct or class" + msgstr "no se permite el calificador de tipo `%s' después de struct ó class" + + #: parse.y:2376 + msgid "no body nor ';' separates two class, struct or union declarations" + msgstr "no hay cuerpo ni ';' separa dos declaraciones class, struct ó union" + + #: parse.y:2508 + msgid "no bases given following `:'" + msgstr "no hay bases dado el siguiente `:'" + + #: parse.y:2539 parse.y:2554 + msgid "`%D' access" + msgstr "acceso `%D'" + + #: parse.y:2544 + msgid "multiple access specifiers" + msgstr "especificadores de acceso múltiples" + + #: parse.y:2562 + msgid "multiple `virtual' specifiers" + msgstr "especificadores `virtual' múltiples" + + #: parse.y:2599 + msgid "missing ';' before right brace" + msgstr "falta ';' antes de la llave derecha" + + #: parse.y:2820 + msgid "ISO C++ forbids array dimensions with parenthesized type in new" + msgstr "ISO C++ prohibe las dimensiones de matriz con tipos con paréntesis en new" + + #: parse.y:3107 parse.y:3127 parse.y:3136 parse.y:3165 + msgid "`%T' is not a class or namespace" + msgstr "`%T' no es una claso o un espacio de nombres" + + #: parse.y:3332 + msgid "ISO C++ forbids label declarations" + msgstr "ISO C++ prohibe declaraciones etiquetadas" + + #: parse.y:3492 + msgid "ISO C++ forbids computed gotos" + msgstr "ISO C++ prohibe gotos calculados" + + #: parse.y:3500 + msgid "label must be followed by statement" + msgstr "la etiqueta debe ser seguida de una declaración" + + #: parse.y:3545 + msgid "must have at least one catch per try block" + msgstr "se debe tener por lo menos un catch por cada bloque try" + + #: parse.y:3605 + msgid "ISO C++ forbids compound statements inside for initializations" + msgstr "ISO C++ prohibe las declaraciones compuestas internas para iniciaciones" + + #. This helps us recover from really nasty + #. parse errors, for example, a missing right + #. parenthesis. + #: parse.y:3690 parse.y:3700 + msgid "possibly missing ')'" + msgstr "posible ')' faltante" + + #: parse.y:3793 + msgid "type specifier omitted for parameter" + msgstr "especificador de tipo omitido para el parámetro" + + #: parse.y:3802 + #, c-format + msgid "`%E' is not a type, use `typename %E' to make it one" + msgstr "`%E' no es un tipo, use `typename %E' para hacerlo un tipo" + + #: parse.y:3804 + msgid "no type `%D' in `%T'" + msgstr "no hay un tipo `%D' en `%T'" + + #: parse.y:3807 + #, c-format + msgid "type specifier omitted for parameter `%E'" + msgstr "se omitió el especificador para el parámetro `%E'" + + #: parse.y:3815 + msgid "'%D' is used as a type, but is not defined as a type." + msgstr "se usa '%D' como un tipo, pero no está definido como un tipo." + + #: cp/pt.c:211 + msgid "data member `%D' cannot be a member template" + msgstr "los datos miembros `%D' no puede ser una plantilla miembro" + + #: cp/pt.c:223 + msgid "invalid member template declaration `%D'" + msgstr "declaración de la plantilla miembro `%D' inválida" + + #: cp/pt.c:618 + msgid "explicit specialization in non-namespace scope `%D'" + msgstr "especialización explícita en el ámbito `%D' que no es espacio de nombres" + + #: cp/pt.c:630 + msgid "enclosing class templates are not explicitly specialized" + msgstr "las plantillas de clase contenidas no son especializadas explícitamente" + + #: cp/pt.c:705 + msgid "specializing `%#T' in different namespace" + msgstr "especializando `%#T' en diferentes espacios de nombres" + + #: cp/pt.c:706 + msgid " from definition of `%#D'" + msgstr " de la definición de `%#D'" + + #: cp/pt.c:714 + msgid "specialization of `%T' after instantiation" + msgstr "especialización de `%T' después de la instanciación" + + #: cp/pt.c:717 + msgid "explicit specialization of non-template `%T'" + msgstr "especialización explícita de `%T' que no es plantilla" + + #: cp/pt.c:849 + msgid "specialization of %D after instantiation" + msgstr "especialización de %D después de la instanciación" + + #: cp/pt.c:952 + msgid "%s %+#D" + msgstr "%s %+#D" + + #: cp/pt.c:1003 + msgid "`%D' is not a function template" + msgstr "`%D' no es una plantilla de función" + + #: cp/pt.c:1126 + msgid "template-id `%D' for `%+D' does not match any template declaration" + msgstr "el id de plantilla `%D' para `%+D' no coincide con ninguna declaración de plantilla" + + #: cp/pt.c:1134 + msgid "ambiguous template specialization `%D' for `%+D'" + msgstr "especialización de plantilla ambigua `%D' para `%+D'" + + #. This case handles bogus declarations like template <> + #. template void f(); + #: cp/pt.c:1361 cp/pt.c:1435 + msgid "template-id `%D' in declaration of primary template" + msgstr "id de plantilla `%D' en la declaración de la plantilla primaria" + + #: cp/pt.c:1374 + msgid "template parameter list used in explicit instantiation" + msgstr "se usó una lista de parámetros de plantilla en una instanciación explícita" + + #: cp/pt.c:1380 + msgid "definition provided for explicit instantiation" + msgstr "se provee una definición para instanciación explícita" + + #: cp/pt.c:1386 + msgid "too many template parameter lists in declaration of `%D'" + msgstr "demasiadas listas de parámetros de plantilla en la declaración de `%D'" + + #: cp/pt.c:1402 + msgid "too few template parameter lists in declaration of `%D'" + msgstr "muy pocas listas de parámetros de plantilla en la declaración de `%D'" + + #: cp/pt.c:1419 + msgid "explicit specialization not preceded by `template <>'" + msgstr "especialización explícita no precedida por `template <>'" + + #: cp/pt.c:1432 + msgid "partial specialization `%D' of function template" + msgstr "especialización parcial `%D' de la plantilla de función" + + #: cp/pt.c:1464 + msgid "default argument specified in explicit specialization" + msgstr "se especificó un argumento por omisión en la especialización explícita" + + #: cp/pt.c:1468 + msgid "template specialization with C linkage" + msgstr "especialización de plantilla con enlace C" + + #. From [temp.expl.spec]: + #. + #. If such an explicit specialization for the member + #. of a class template names an implicitly-declared + #. special member function (clause _special_), the + #. program is ill-formed. + #. + #. Similar language is found in [temp.explicit]. + #: cp/pt.c:1556 + msgid "specialization of implicitly-declared special member function" + msgstr "especialización de la función miembro especial declarada implícitamente" + + #: cp/pt.c:1599 + msgid "no member function `%D' declared in `%T'" + msgstr "la función no miembro `%D' se declaró en `%T'" + + #. There are two many template parameter lists. + #: cp/pt.c:1747 + msgid "too many template parameter lists in declaration of `%T'" + msgstr "demasiadas listas de parámetros de plantilla en la declaración de `%T'" + + #: cp/pt.c:1843 + msgid " shadows template parm `%#D'" + msgstr " obscurece el parámetro de plantilla `%#D'" + + #: cp/pt.c:2247 + msgid "template parameters not used in partial specialization:" + msgstr "no se usan los parámetros de plantilla en la especialización parcial:" + + #: cp/pt.c:2251 + msgid " `%D'" + msgstr " `%D'" + + #: cp/pt.c:2263 + msgid "partial specialization `%T' does not specialize any template arguments" + msgstr "la especialización parcial `%T' no especializa ningún argumento de plantilla" + + #: cp/pt.c:2288 + #, c-format + msgid "template argument `%E' involves template parameter(s)" + msgstr "el argumento de plantilla `%E' involucra a el(los) parámetro(s) de plantilla" + + #: cp/pt.c:2331 + msgid "type `%T' of template argument `%E' depends on template parameter(s)" + msgstr "el tipo `%T' del argumento de plantilla `%E' depende de el(los) parámetro(s) de plantilla" + + #: cp/pt.c:2419 + msgid "no default argument for `%D'" + msgstr "no hay un argumento por omisión para `%D'" + + #: cp/pt.c:2552 + msgid "template with C linkage" + msgstr "plantilla con enlace C" + + #: cp/pt.c:2555 + msgid "template class without a name" + msgstr "clase de plantilla sin nombre" + + #: cp/pt.c:2632 + msgid "`%D' does not declare a template type" + msgstr "`%D' no declara un tipo de plantilla" + + #: cp/pt.c:2638 + msgid "template definition of non-template `%#D'" + msgstr "definición de plantilla de `%#D' que no es plantilla" + + #: cp/pt.c:2679 + msgid "expected %d levels of template parms for `%#D', got %d" + msgstr "se esperaban %d niveles de parámetros de plantilla para `%#D', se obtuvieron %d" + + #: cp/pt.c:2691 + msgid "got %d template parameters for `%#D'" + msgstr "se obtuvieron %d parámetros de plantilla para `%#D'" + + #: cp/pt.c:2694 + msgid "got %d template parameters for `%#T'" + msgstr "se obtuvieron %d parámetros de plantilla para `%#T'" + + #: cp/pt.c:2696 + #, c-format + msgid " but %d required" + msgstr " pero se requieren %d" + + #: cp/pt.c:2764 + msgid "`%T' is not a template type" + msgstr "`%T' no es un tipo plantilla" + + #: cp/pt.c:2780 + msgid "previous declaration `%D'" + msgstr "declaración previa de `%D'" + + #: cp/pt.c:2781 + #, c-format + msgid "used %d template parameter%s instead of %d" + msgstr "se usaron %d parámetro%s de plantilla en lugar de %d" + + #: cp/pt.c:2797 + msgid "template parameter `%#D'" + msgstr "parámetro de plantilla `%#D'" + + #: cp/pt.c:2798 + msgid "redeclared here as `%#D'" + msgstr "redeclarado aquí como `%#D'" + + #. We have in [temp.param]: + #. + #. A template-parameter may not be given default arguments + #. by two different declarations in the same scope. + #: cp/pt.c:2808 + msgid "redefinition of default argument for `%#D'" + msgstr "redefinición del argumento por omisión para `%#D'" + + #: cp/pt.c:2809 + msgid " original definition appeared here" + msgstr " la definición original aparece aquí" + + #: cp/pt.c:2902 + #, c-format + msgid "`%E' is not a valid template argument" + msgstr "`%E' no es un argumento de plantilla válido" + + #: cp/pt.c:2906 + msgid "it must be the address of a function with external linkage" + msgstr "debe ser la dirección de una función con enlace externo" + + #: cp/pt.c:2908 + msgid "it must be the address of an object with external linkage" + msgstr "debe ser la dirección de un objeto con enlace externo" + + #: cp/pt.c:2912 + msgid "it must be a pointer-to-member of the form `&X::Y'" + msgstr "debe ser un apuntador-a-miembro de la forma `&X::Y'" + + #: cp/pt.c:2923 + #, c-format + msgid "string literal %E is not a valid template argument because it is the address of an object with static linkage" + msgstr "la cadena literal %E no es un argumento válido de plantilla porque es la dirección de un objeto con enlace estático" + + #: cp/pt.c:2935 + #, c-format + msgid "address of non-extern `%E' cannot be used as template argument" + msgstr "no se puede usar la dirección de `%E' que no es externo como un argumento de plantilla" + + #: cp/pt.c:2946 + #, c-format + msgid "non-constant `%E' cannot be used as template argument" + msgstr "`%E' que no es constante no se puede usar como un argumento de plantilla" + + #: cp/pt.c:2953 + #, c-format + msgid "object `%E' cannot be used as template argument" + msgstr "el objeto `%E' no se puede usar como un argumento de plantilla" + + #: cp/pt.c:3333 + #, c-format + msgid "to refer to a type member of a template parameter, use `typename %E'" + msgstr "para hacer referencia a un tipo miembro de un parámetro de plantilla, use `typename %E'" + + #: cp/pt.c:3346 cp/pt.c:3362 cp/pt.c:3401 + msgid "type/value mismatch at argument %d in template parameter list for `%D'" + msgstr "no coincide el tipo/valor en el argumento %d en la lista de parámetros de plantilla para `%D'" + + #: cp/pt.c:3349 + msgid " expected a constant of type `%T', got `%T'" + msgstr " se esperaba una constante de tipo `%T', se obtuvo `%T'" + + #: cp/pt.c:3353 + #, c-format + msgid " expected a type, got `%E'" + msgstr " se esperaba un tipo, se obtuvo `%E'" + + #: cp/pt.c:3365 + msgid " expected a type, got `%T'" + msgstr " se esperaba un tipo, se obtuvo `%T'" + + #: cp/pt.c:3367 + msgid " expected a class template, got `%T'" + msgstr " se esperaba una plantilla de clase, se obtuvo `%T'" + + #: cp/pt.c:3403 + msgid " expected a template of type `%D', got `%D'" + msgstr " se esperaba una plantilla de tipo `%D', se obtuvo `%D'" + + #: cp/pt.c:3425 + msgid "template-argument `%T' uses anonymous type" + msgstr "el argumento de plantilla `%T' usa un tipo anónimo" + + #: cp/pt.c:3428 + msgid "template-argument `%T' uses local type `%T'" + msgstr "el argumento de plantilla `%T' usa el tipo local `%T'" + + #: cp/pt.c:3463 + msgid "could not convert template argument `%E' to `%T'" + msgstr "no se puede convertir el argumento de plantilla `%E' a `%T'" + + #: cp/pt.c:3507 + #, c-format + msgid "wrong number of template arguments (%d, should be %d)" + msgstr "número erróneo de argumentos de plantilla (%d, debería ser %d)" + + #: cp/pt.c:3511 + msgid "provided for `%D'" + msgstr "provisto por `%D'" + + #: cp/pt.c:3558 + #, c-format + msgid "template argument %d is invalid" + msgstr "el argumento de plantilla %d es inválido" + + #: cp/pt.c:3790 + msgid "non-template used as template" + msgstr "se usa una no plantilla como plantilla" + + #: cp/pt.c:3908 + msgid "`%T' is not a template" + msgstr "`%T' no es una plantilla" + + #: cp/pt.c:3921 + msgid "non-template type `%T' used as a template" + msgstr "se usa el tipo `%T' que no es plantilla como una plantilla" + + #: cp/pt.c:3923 + msgid "for template declaration `%D'" + msgstr "para la declaración de plantilla `%D'" + + #: cp/pt.c:4486 + msgid "template instantiation depth exceeds maximum of %d (use -ftemplate-depth-NN to increase the maximum) instantiating `%D'" + msgstr "la profundidad de instanciación de la plantilla excede el máximo de %d (use -ftemplate-depth-NN para incrementar el máximo) al instanciar `%D'" + + #: cp/pt.c:4921 + msgid "ambiguous class template instantiation for `%#T'" + msgstr "instanciación de plantilla clase ambigua para `%#T'" + + #: cp/pt.c:4928 + msgid "%s %+#T" + msgstr "%s %+#T" + + #: cp/pt.c:5949 cp/pt.c:6054 + msgid "instantiation of `%D' as type `%T'" + msgstr "instanciación de `%D' como tipo `%T'" + + #: cp/pt.c:6096 + msgid "invalid parameter type `%T'" + msgstr "tipo de parámetro `%T' inválido" + + #: cp/pt.c:6098 + msgid "in declaration `%D'" + msgstr "en la declaración `%D'" + + #: cp/pt.c:6173 + msgid "creating pointer to member function of non-class type `%T'" + msgstr "creando un apuntador a función miembro del tipo `%T' que no es clase" + + #: cp/pt.c:6336 + msgid "creating array with size zero" + msgstr "creando la matriz con tamaño cero" + + #: cp/pt.c:6350 + #, c-format + msgid "creating array with size zero (`%E')" + msgstr "creando la matriz con tamaño cero (`%E')" + + #: cp/pt.c:6589 + msgid "forming reference to void" + msgstr "formando la referencia a void" + + #: cp/pt.c:6591 + msgid "forming %s to reference type `%T'" + msgstr "formando %s para referenciar al tipo `%T'" + + #: cp/pt.c:6629 + msgid "creating pointer to member of non-class type `%T'" + msgstr "creando un apuntador al miembro del tipo `%T' que no es clase" + + #: cp/pt.c:6635 + msgid "creating pointer to member reference type `%T'" + msgstr "creando un apuntador al miembro de referencia de tipo `%T'" + + #: cp/pt.c:6713 + msgid "creating array of `%T'" + msgstr "creando la matriz de `%T'" + + #: cp/pt.c:6756 + msgid "`%T' is not a class, struct, or union type" + msgstr "`%T' no es de tipo clase, struct o union" + + #: cp/pt.c:6866 + #, c-format + msgid "use of `%s' in template" + msgstr "uso de `%s' en la plantilla" + + #: cp/pt.c:7629 + msgid "type `%T' composed from a local class is not a valid template-argument" + msgstr "el tipo `%T' compuesto desde una clase local no es un argumento de plantilla válido" + + #: cp/pt.c:7630 + msgid " trying to instantiate `%D'" + msgstr " tratando de instanciar `%D'" + + #: cp/pt.c:8060 + msgid "incomplete type unification" + msgstr "unificación de tipo incompleto" + + #: cp/pt.c:9027 + #, c-format + msgid "use of `%s' in template type unification" + msgstr "uso de `%s' en la unificación de tipo de la plantilla" + + #: cp/pt.c:9447 cp/pt.c:9515 + msgid "explicit instantiation of non-template `%#D'" + msgstr "instanciación explícita de `%#D' que no es plantilla" + + #: cp/pt.c:9463 cp/pt.c:9510 + msgid "no matching template for `%D' found" + msgstr "no se encuentra una plantilla coincidente para `%D'" + + #: cp/pt.c:9469 + msgid "explicit instantiation of `%#D'" + msgstr "instanciación explícita de `%#D'" + + #. [temp.spec] + #. + #. No program shall both explicitly instantiate and explicitly + #. specialize a template. + #: cp/pt.c:9486 + msgid "explicit instantiation of `%#D' after" + msgstr "instanciación explícita de `%#D' después de" + + #: cp/pt.c:9487 cp/pt.c:9624 + msgid "explicit specialization here" + msgstr "especialización explícita aquí" + + #: cp/pt.c:9502 + msgid "duplicate explicit instantiation of `%#D'" + msgstr "instanciación explícita duplicada de `%#D'" + + #: cp/pt.c:9527 + msgid "ISO C++ forbids the use of `extern' on explicit instantiations" + msgstr "ISO C++ prohibe el uso de `extern' en instanciaciones explícitas" + + #: cp/pt.c:9531 cp/pt.c:9609 + msgid "storage class `%D' applied to template instantiation" + msgstr "clase de almacenamiento `%D' aplicada a la instanciación de una plantilla" + + #: cp/pt.c:9576 + msgid "explicit instantiation of non-template type `%T'" + msgstr "instanciación explícita del tipo `%T' del tipo no plantilla" + + #: cp/pt.c:9590 + msgid "explicit instantiation of `%#T' before definition of template" + msgstr "instanciación explícita de `%#T' antes de la definición de la plantilla" + + #: cp/pt.c:9598 + #, c-format + msgid "ISO C++ forbids the use of `%s' on explicit instantiations" + msgstr "ISO C++ prohibe el uso de `%s' en las instanciaciones explícitas" + + #: cp/pt.c:9623 + msgid "explicit instantiation of `%#T' after" + msgstr "instanciación explícita de `%#T' después de" + + #: cp/pt.c:9641 + msgid "duplicate explicit instantiation of `%#T'" + msgstr "instanciación explícita duplicada de `%#T'" + + #: cp/pt.c:10003 + msgid "explicit instantiation of `%D' but no definition available" + msgstr "instanciación explícita de `%D' pero no hay una definición disponible" + + #: cp/pt.c:10375 + msgid "`%#T' is not a valid type for a template constant parameter" + msgstr "`%#T' no es un tipo válido para un parámetro constante de plantilla" + + #: cp/repo.c:272 + msgid "-frepo must be used with -c" + msgstr "-frepo debe ser usado con -c" + + #: cp/repo.c:366 + #, c-format + msgid "mysterious repository information in %s" + msgstr "información de repositorio misteriosa en %s" + + #: cp/repo.c:381 + #, c-format + msgid "can't create repository information file `%s'" + msgstr "no se puede crear el fichero de información de repositorio `%s'" + + #: cp/rtti.c:200 + msgid "cannot use typeid with -fno-rtti" + msgstr "no se puede usar typeid sin -fno-rtti" + + #: cp/rtti.c:206 + msgid "must #include before using typeid" + msgstr "debe hacer #include antes de usar typeid" + + #: cp/rtti.c:280 + msgid "cannot create type information for type `%T' because its size is variable" + msgstr "no se puede crear la información de tipo para el tipo `%T' porque su tamaño es variable" + + #: cp/rtti.c:525 cp/rtti.c:539 + msgid "dynamic_cast of `%#D' to `%#T' can never succeed" + msgstr "dynamic_cast de `%#D' a `%#T' nunca podrá tener éxito" + + #: cp/rtti.c:614 + msgid "cannot dynamic_cast `%E' (of type `%#T') to type `%#T' (%s)" + msgstr "no se puede hacer dynamic_cast `%E' (de tipo `%#T') al tipo `%#T' (%s)" + + #: cp/search.c:340 + msgid "`%T' is an inaccessible base of `%T'" + msgstr "`%T' es una base inaccesible de `%T'" + + #: cp/search.c:350 + msgid "`%T' is an ambiguous base of `%T'" + msgstr "`%T' es una base ambigua de `%T'" + + #: cp/search.c:1820 + msgid "adjusting pointers for covariant returns" + msgstr "ajustando los apuntadores de devoluciones covariantes" + + #: cp/search.c:1824 cp/search.c:1831 + msgid "invalid covariant return type for `%#D'" + msgstr "tipo de devolución covariante inválido para `%#D'" + + #: cp/search.c:1825 + msgid " overriding `%#D' (must be pointer or reference to class)" + msgstr " sustituyendo a `%#D' (debe ser apuntador o referencia a una clase)" + + #: cp/search.c:1832 + msgid " overriding `%#D' (must use pointer or reference)" + msgstr " sustituyendo a `%#D' (debe ser apuntador o referencia)" + + #: cp/search.c:1837 + msgid "conflicting return type specified for `%#D'" + msgstr "tipos de devolución en conflicto especificados para `%#D'" + + #: cp/search.c:1838 + msgid " overriding `%#D'" + msgstr " sustituyendo `%#D'" + + #: cp/search.c:1847 + #, c-format + msgid "looser throw specifier for `%#F'" + msgstr "especificador thrown más flexible para `%#F'" + + #: cp/search.c:1848 + #, c-format + msgid " overriding `%#F'" + msgstr " sustituyendo `%#F'" + + #. A static member function cannot match an inherited + #. virtual member function. + #: cp/search.c:1938 + msgid "`%#D' cannot be declared" + msgstr "`%#D' no puede ser declarado" + + #: cp/search.c:1939 + msgid " since `%#D' declared in base class" + msgstr " ya que se declaró `%#D' en la clase base" + + #: cp/search.c:2080 + msgid "`%#D' needs a final overrider" + msgstr "`%#D' necesita un impositor final" + + #: cp/semantics.c:911 + #, c-format + msgid "type of asm operand `%E' could not be determined" + msgstr "no se puede determinar el tipo del operando asm `%E'" + + #: cp/semantics.c:1053 + msgid "ISO C++ does not permit named return values" + msgstr "ISO C++ no permite valores nombrados de devolución" + + #: cp/semantics.c:1062 + msgid "return identifier `%D' already in place" + msgstr "el identificador de devolución `%D' ya está en su lugar" + + #: cp/semantics.c:1070 + msgid "can't redefine default return value for constructors" + msgstr "no se puede redefinir el valor por omisión de devoluciòn para los constructores" + + #: cp/semantics.c:1137 + msgid "base initializer for `%T'" + msgstr "iniciador base para `%T'" + + #: cp/semantics.c:1139 + msgid " will be re-ordered to precede member initializations" + msgstr " será reordenado para preceder la iniciaciones de los miembros" + + #: cp/semantics.c:1327 + msgid "`this' is unavailable for static member functions" + msgstr "`this' no está disponible para funciones miembro static" + + #: cp/semantics.c:1333 + msgid "invalid use of `this' in non-member function" + msgstr "uso inválido de `this' en la función no miembro" + + #: cp/semantics.c:1335 + msgid "invalid use of `this' at top level" + msgstr "uso inválido de `this' en el nivel principal" + + #: cp/semantics.c:1373 + msgid "calling type `%T' like a method" + msgstr "llamando al tipo `%T' como un método" + + #: cp/semantics.c:1409 + msgid "destructor specifier `%T::~%T()' must have matching names" + msgstr "el especificador del destructor `%T::~%T()' debe tener nombres coincidentes" + + #: cp/semantics.c:1415 + msgid "`%E' is not of type `%T'" + msgstr "`%E' no es de tipo `%T'" + + #: cp/semantics.c:1608 + msgid "template type parameters must use the keyword `class' or `typename'" + msgstr "los parámetros de tipo plantilla debe usar la palabra clave `class' o `typename'" + + #: cp/semantics.c:1670 + msgid "definition of `%#T' inside template parameter list" + msgstr "la definición de `%#T' dentro de la lista de parámetros de plantilla" + + #: cp/semantics.c:1686 + msgid "invalid definition of qualified type `%T'" + msgstr "definición inválida del tipo calificado `%T'" + + #: cp/semantics.c:2039 + msgid "base class `%T' has cv qualifiers" + msgstr "la clase base `%T' tiene calificadores cv" + + #: cp/semantics.c:2072 + msgid "multiple declarators in template declaration" + msgstr "múltiples declaradores en una declaración de plantilla" + + #: cp/spew.c:239 + #, c-format + msgid "identifier name `%s' conflicts with GNU C++ internal naming strategy" + msgstr "el nombre de identificador `%s' causa conflictos con la estrategia interna de nombrado del C++ de GNU" + + #: cp/spew.c:1017 cp/spew.c:1292 + msgid "parse error at end of saved function text" + msgstr "error de decodificación al final del texto de la función guardada" + + #: cp/spew.c:1062 + msgid "parse error in method specification" + msgstr "error de decodificación en la especificación del método" + + #: cp/spew.c:1104 + msgid "function body for constructor missing" + msgstr "falta el cuerpo de la función para el constructor" + + #: cp/spew.c:1371 + msgid "circular dependency in default args of `%#D'" + msgstr "dependencia circular en los argumentos por omisión de `%#D'" + + #: cp/spew.c:1435 + msgid "invalid type `%T' for default argument to `%T'" + msgstr "tipo `%T' inválido para el argumento por omisión de `%T'" + + #: cp/spew.c:1495 + #, c-format + msgid "%s before `%s'" + msgstr "%s antes de `%s'" + + #: cp/spew.c:1497 + #, c-format + msgid "%s before `%c'" + msgstr "%s antes de `%c'" + + #: cp/spew.c:1499 + #, c-format + msgid "%s before `\\%o'" + msgstr "%s antes de `\\%o'" + + #: cp/spew.c:1502 + #, c-format + msgid "%s before `%s' token" + msgstr "%s antes del elemento `%s'" + + #: cp/tree.c:224 + #, c-format + msgid "non-lvalue in %s" + msgstr "no es valor-l en %s" + + #: cp/tree.c:578 + msgid "`%V' qualifiers cannot be applied to `%T'" + msgstr "los calificadores `%V' no se pueden aplicar a `%T'" + + #: cp/tree.c:581 + msgid "ignoring `%V' qualifiers on `%T'" + msgstr "se ignoran los calificadores `%V' para `%T'" + + #: cp/tree.c:1920 + #, c-format + msgid "`%s' attribute can only be applied to Java class definitions" + msgstr "el atributo `%s' sólo se puede aplicar a definiciones de clases Java" + + #: cp/tree.c:1950 + #, c-format + msgid "`%s' attribute can only be applied to class definitions" + msgstr "el atributo `%s' solo se puede aplicar a definiciones de clase" + + #: cp/tree.c:1956 + #, c-format + msgid "`%s' is obsolete; g++ vtables are now COM-compatible by default" + msgstr "`%s' es obsoleto; las vtables de g++ ahora son compatibles con COM por omisión" + + #: cp/tree.c:1981 + msgid "requested init_priority is not an integer constant" + msgstr "la init_priority solicitada no es una constante entera" + + #: cp/tree.c:2002 + #, c-format + msgid "can only use `%s' attribute on file-scope definitions of objects of class type" + msgstr "solo se puede usar el atributo `%s' en definiciones de rango de fichero de objetos de tipo class" + + #: cp/tree.c:2010 + msgid "requested init_priority is out of range" + msgstr "la init_priority solicitada está fuera de rango" + + #: cp/tree.c:2020 + msgid "requested init_priority is reserved for internal use" + msgstr "la init_priority solicitada está reservada para uso interno" + + #: cp/tree.c:2030 + #, c-format + msgid "`%s' attribute is not supported on this platform" + msgstr "el atributo `%s' no tiene soporte en esta plataforma" + + #: cp/typeck.c:518 + #, c-format + msgid "ISO C++ forbids %s between pointer of type `void *' and pointer-to-function" + msgstr "ISO C++ prohibe %s entre apuntadores de tipo `void *' y apuntadores a funciones" + + #: cp/typeck.c:539 + msgid "%s between distinct pointer types `%T' and `%T' lacks a cast" + msgstr "%s de diferentes tipos de apuntador `%T' y `%T' carece de una conversión" + + #: cp/typeck.c:1430 + msgid "ISO C++ prohibits conversion from `%#T' to `(...)'" + msgstr "ISO C++ prohibe la conversión de `%#T' a `(...)'" + + #: cp/typeck.c:1500 + msgid "ISO C++ forbids applying `sizeof' to a function type" + msgstr "ISO C++ prohibe la aplicación de `sizeof' a un tipo de función" + + #: cp/typeck.c:1506 + msgid "ISO C++ forbids applying `sizeof' to a member function" + msgstr "ISO C++ prohibe la aplicación de `sizeof' a una función miembro" + + #: cp/typeck.c:1512 + msgid "ISO C++ forbids applying `sizeof' to type `void' which is an incomplete type" + msgstr "ISO C++ prohibe aplicar `sizeof' al tipo `void' el cual es un tipo incompleto" + + #: cp/typeck.c:1526 + msgid "`sizeof' applied to non-static member" + msgstr "`sizeof' aplicado a miembro que no es static" + + #: cp/typeck.c:1531 + msgid "`sizeof' applied to incomplete type `%T'" + msgstr "sizeof aplicado a un tipo de dato incompleto `%T'" + + #: cp/typeck.c:1561 + msgid "sizeof applied to a bit-field" + msgstr "sizeof aplicado a un campo de bits" + + #: cp/typeck.c:1564 + msgid "ISO C++ forbids applying `sizeof' to an expression of function type" + msgstr "ISO C++ prohibe la aplicación de `sizeof' a una expresión de tipo de función" + + #: cp/typeck.c:1711 + msgid "invalid use of non-lvalue array" + msgstr "uso inválido de matriz no-lvaluada" + + #: cp/typeck.c:1817 + msgid "deprecated conversion from string constant to `%T'" + msgstr "conversión deprecada de una constante de cadena a `%T'" + + #: cp/typeck.c:1835 + msgid "request for member `%T::%D' in expression of non-aggregate type `%T'" + msgstr "petición por el miembro `%T::%D' en la expresión de tipo no agregado `%T'" + + #: cp/typeck.c:2030 + msgid "destructor specifier `%T::~%T' must have matching names" + msgstr "el especificador del destructor `%T::~%T' debe tener nombres coincidentes" + + #: cp/typeck.c:2036 + msgid "type `%T' has no destructor" + msgstr "el tipo `%T' no tiene destructor" + + #: cp/typeck.c:2053 cp/typeck.c:2135 + msgid "invalid use of type decl `%#D' as expression" + msgstr "uso inválido de la declaración de tipo `%#D' como una expresión" + + #: cp/typeck.c:2058 + msgid "invalid use of template `%#D' as expression" + msgstr "uso inválido de la plantilla `%#D' como una expresión" + + #: cp/typeck.c:2126 + msgid "`%#T' has no member named `%D'" + msgstr "`%#T' no tiene un miembro llamado `%D'" + + #: cp/typeck.c:2176 cp/typeck.c:2205 + msgid "invalid offsetof from non-POD type `%#T'; use pointer to member instead" + msgstr "desplazamiento inválido desde un tipo `%#T' que no es POD; use en su lugar un apuntador a miembro" + + #. A pointer to incomplete type (other than cv void) can be + #. dereferenced [expr.unary.op]/1 + #: cp/typeck.c:2316 + msgid "`%T' is not a pointer-to-object type" + msgstr "`%T' no es de tipo apuntador-a-objeto" + + #: cp/typeck.c:2343 + #, c-format + msgid "invalid use of `%s' on pointer to member" + msgstr "uso inválido de `%s' en apuntador a miembro" + + #: cp/typeck.c:2349 + msgid "invalid type argument" + msgstr "argumento de tipo inválido" + + #: cp/typeck.c:2452 + msgid "ISO C++ forbids subscripting non-lvalue array" + msgstr "ISO C++ prohibe el subíndice de una matriz de l-valores" + + #: cp/typeck.c:2463 + msgid "subscripting array declared `register'" + msgstr "se declaró el subíndice de la matriz como `register'" + + #: cp/typeck.c:2638 cp/typeck.c:2788 + msgid "pointer to member function called, but not in class scope" + msgstr "se llamó a apuntador a función miembro, pero no en el alcance de la clase" + + #: cp/typeck.c:2662 + msgid "object missing in call to method `%D'" + msgstr "falta un objeto en la llamada al método `%D'" + + #: cp/typeck.c:2706 + msgid "function `%D' declared overloaded, but no definitions appear with which to resolve it?!?" + msgstr "¿!¿se declaró la función `%D' sobrecargada, pero no aparece ninguna definición con la cual resolverlo?!?" + + #: cp/typeck.c:2786 + msgid "invalid call to member function needing `this' in static member function scope" + msgstr "llamada inválida a función miembro requiere `this' en el alcance de la función miembro static" + + #: cp/typeck.c:2965 + msgid "ISO C++ forbids calling `::main' from within program" + msgstr "ISO C++ prohibe la llamada `::main' dentro del mismo programa" + + #: cp/typeck.c:2990 + #, c-format + msgid "must use .* or ->* to call pointer-to-member function in `%E (...)'" + msgstr "se debe usar .* o ->* en la llamada a la función apuntador-a-miembro en `%E (...)'" + + #: cp/typeck.c:3003 + #, c-format + msgid "`%E' cannot be used as a function" + msgstr "no se puede usar `%E' como una función" + + #: cp/typeck.c:3128 + msgid "too many arguments to %s `%+#D'" + msgstr "demasiados argumentos para %s `%+#D'" + + #: cp/typeck.c:3169 + msgid "parameter type of called function is incomplete" + msgstr "el tipo del parámetro de la función llamada es incompleto" + + #: cp/typeck.c:3236 + msgid "too few arguments to %s `%+#D'" + msgstr "muy pocos argumentos para %s `%+#D'" + + #: cp/typeck.c:3364 cp/typeck.c:3374 + msgid "assuming cast to type `%T' from overloaded function" + msgstr "asumiendo la conversión al tipo `%T' desde la función sobrecargada" + + #: cp/typeck.c:3434 + #, c-format + msgid "division by zero in `%E / 0'" + msgstr "división por cero en `%E / 0'" + + #: cp/typeck.c:3436 + #, c-format + msgid "division by zero in `%E / 0.'" + msgstr "división por cero en `%E / 0.'" + + #: cp/typeck.c:3466 + #, c-format + msgid "division by zero in `%E %% 0'" + msgstr "división por cero en `%E %% 0'" + + #: cp/typeck.c:3468 + #, c-format + msgid "division by zero in `%E %% 0.'" + msgstr "división por cero en `%E %% 0.'" + + #: cp/typeck.c:3548 + #, c-format + msgid "%s rotate count is negative" + msgstr "la cuenta de rotación %s es negativa" + + #: cp/typeck.c:3551 + #, c-format + msgid "%s rotate count >= width of type" + msgstr "la cuenta de rotación %s >= anchura del tipo" + + #: cp/typeck.c:3582 cp/typeck.c:3587 cp/typeck.c:3678 cp/typeck.c:3683 + msgid "ISO C++ forbids comparison between pointer and integer" + msgstr "ISO C++ prohibe la comparación entre apuntadores y enteros" + + #: cp/typeck.c:3863 + msgid "comparison between types `%#T' and `%#T'" + msgstr "comparación entre los tipos `%#T' y `%#T'" + + #: cp/typeck.c:3899 + msgid "comparison between signed and unsigned integer expressions" + msgstr "comparación entre expresiones enteras signed y unsigned" + + #: cp/typeck.c:3964 + msgid "invalid operands of types `%T' and `%T' to binary `%O'" + msgstr "operadores inválidos de tipos `%T' y `%T' para el binario `%O'" + + #. Some sort of arithmetic operation involving NULL was + #. performed. Note that pointer-difference and pointer-addition + #. have already been handled above, and so we don't end up here in + #. that case. + #: cp/typeck.c:3986 + msgid "NULL used in arithmetic" + msgstr "se usó NULL en la aritmética" + + #: cp/typeck.c:4053 + msgid "ISO C++ forbids using pointer of type `void *' in subtraction" + msgstr "ISO C++ prohibe el uso de un apuntador de tipo `void *' en la sustracción" + + #: cp/typeck.c:4055 + msgid "ISO C++ forbids using pointer to a function in subtraction" + msgstr "ISO C++ prohibe el uso de un apuntador a una función en la sustracción" + + #: cp/typeck.c:4057 + msgid "ISO C++ forbids using pointer to a method in subtraction" + msgstr "ISO C++ prohibe el uso de un apuntador a un método en la sustracción" + + #: cp/typeck.c:4059 + msgid "ISO C++ forbids using pointer to a member in subtraction" + msgstr "ISO C++ prohibe el uso de un apuntador a un miembro en la sustracción" + + #: cp/typeck.c:4071 + msgid "invalid use of a pointer to an incomplete type in pointer arithmetic" + msgstr "uso inválido de un apuntador a un tipo incompleto en aitmética de apuntadores" + + #: cp/typeck.c:4108 + msgid "attempt to take address of bit-field structure member `%D'" + msgstr "se intentó tomar la dirección del miembro de la estructura de campos de bits `%D'" + + #: cp/typeck.c:4185 + msgid "taking address of temporary" + msgstr "tomando la dirección del temporal" + + #: cp/typeck.c:4387 + #, c-format + msgid "ISO C++ forbids %sing an enum" + msgstr "ISO C++ prohibe %sing un enum" + + #: cp/typeck.c:4399 + msgid "cannot %s a pointer to incomplete type `%T'" + msgstr "no se puede %s un apuntador a un tipo incompleto `%T'" + + #: cp/typeck.c:4406 + msgid "ISO C++ forbids %sing a pointer of type `%T'" + msgstr "ISO C++ prohibe el %s un apuntador de tipo `%T'" + + #: cp/typeck.c:4431 + msgid "cast to non-reference type used as lvalue" + msgstr "se usa la conversión a un tipo no referenciado como un l-valor" + + #: cp/typeck.c:4465 + msgid "invalid use of `--' on bool variable `%D'" + msgstr "uso inválido de `--' en la variable booleana `%D'" + + #. ARM $3.4 + #: cp/typeck.c:4498 + msgid "ISO C++ forbids taking address of function `::main'" + msgstr "ISO C++ prohibe tomar la dirección de la función `::main'" + + #. An expression like &memfn. + #: cp/typeck.c:4565 + msgid "ISO C++ forbids taking the address of an unqualified non-static member function to form a pointer to member function. Say `&%T::%D'" + msgstr "ISO C++ prohibe tomar la dirección de una función miembro no estática sin calificar para formar un apuntador a la función miembro. Como `&%T::%D'" + + #: cp/typeck.c:4567 + msgid "ISO C++ forbids taking the address of a bound member function to form a pointer to member function. Say `&%T::%D'" + msgstr "ISO C++ prohibe tomar la dirección de una función miembro limitada para formar un apuntador a la función miembro. Como `&%T::%D'" + + #: cp/typeck.c:4591 + msgid "ISO C++ forbids taking the address of a cast to a non-lvalue expression" + msgstr "ISO C++ prohibe tomar la dirección de una conversión a una expresión no l-valuada" + + #: cp/typeck.c:4607 + msgid "unary `&'" + msgstr "`&' unario" + + #: cp/typeck.c:4727 + msgid "taking address of destructor" + msgstr "tomando la dirección del destructor" + + # FIXME + # ¿bound se utiliza aquí como 'limitada' o 'sujeta'? Revisar el código. cfuga + #: cp/typeck.c:4740 + msgid "taking address of bound pointer-to-member expression" + msgstr "tomando la dirección de la expresión limitada apuntador-a-miembro" + + #: cp/typeck.c:4756 + msgid "cannot create pointer to reference member `%D'" + msgstr "no se pueden crear un apuntador al miembro referencia `%D'" + + #: cp/typeck.c:4824 + msgid "cannot take the address of `this', which is an rvalue expression" + msgstr "no se puede tomar la dirección de `this' que es una expresión rvalue" + + #: cp/typeck.c:4840 + msgid "address requested for `%D', which is declared `register'" + msgstr "se solicitó la dirección de `%D', el cual se declaró como `register'" + + #: cp/typeck.c:5060 + msgid "static_cast from type `%T' to type `%T' casts away constness" + msgstr "static_cast del tipo `%T' al tipo `%T' proscribe la constancia" + + #: cp/typeck.c:5068 + msgid "invalid static_cast from type `%T' to type `%T'" + msgstr "static_cast inválido del tipo `%T' al tipo `%T'" + + #: cp/typeck.c:5107 + msgid "invalid reinterpret_cast of an rvalue expression of type `%T' to type `%T'" + msgstr "reinterpret_cast inválido de una expresión valor-r del tipo `%T' al tipo `%T'" + + #: cp/typeck.c:5127 + msgid "reinterpret_cast from `%T' to `%T' loses precision" + msgstr "reinterpret_cast de `%T' a `%T' pierde precisión" + + #: cp/typeck.c:5140 + msgid "reinterpret_cast from `%T' to `%T' casts away const (or volatile)" + msgstr "reinterpret_cast de `%T' a `%T' proscribe a const (o volatile)" + + #: cp/typeck.c:5149 + msgid "ISO C++ forbids casting between pointer-to-function and pointer-to-object" + msgstr "ISO C++ prohibe la conversión entre entre apuntador a función y apuntador a objeto" + + #: cp/typeck.c:5155 + msgid "invalid reinterpret_cast from type `%T' to type `%T'" + msgstr "reinterpret_cast inválido del tipo `%T' al tipo `%T'" + + #: cp/typeck.c:5182 + msgid "invalid use of const_cast with type `%T', which is not a pointer, reference, nor a pointer-to-data-member type" + msgstr "uso inválido de const_cast con tipo `%T', que no es apuntador, referencia, ni un tipo apuntador-a-datos-miembros" + + #: cp/typeck.c:5185 + msgid "invalid use of const_cast with type `%T', which is a pointer or reference to a function type" + msgstr "uso inválido de const_cast con tipo `%T', el cual es un apuntador o referencia a un tipo de función" + + #: cp/typeck.c:5208 + msgid "invalid const_cast of an rvalue of type `%T' to type `%T'" + msgstr "const_cast inválido de un valor-r de tipo `%T' al tipo `%T'" + + #: cp/typeck.c:5224 + msgid "invalid const_cast from type `%T' to type `%T'" + msgstr "const_cast inválido del tipo `%T' al tipo `%T'" + + #: cp/typeck.c:5266 cp/typeck.c:5271 + msgid "ISO C++ forbids casting to an array type `%T'" + msgstr "ISO C++ prohibe la conversión a un tipo de matriz `%T'" + + #: cp/typeck.c:5279 + msgid "invalid cast to function type `%T'" + msgstr "conversión inválida al tipo de función `%T'" + + #: cp/typeck.c:5331 + msgid "cast from `%T' to `%T' discards qualifiers from pointer target type" + msgstr "la conversión de `%T' a `%T' descarta los calificadores del tipo del destino del apuntador" + + #: cp/typeck.c:5377 + msgid "cast from `%T' to `%T' increases required alignment of target type" + msgstr "la conversión de `%T' a `%T' incrementa la alineación requerida del tipo del destino" + + #: cp/typeck.c:5546 + msgid " in evaluation of `%Q(%#T, %#T)'" + msgstr " en la evaluación de `%Q(%#T, %#T)'" + + #: cp/typeck.c:5588 + msgid "ISO C++ forbids cast to non-reference type used as lvalue" + msgstr "ISO C++ prohibe la conversión a un tipo no referente usado como l-valor" + + #: cp/typeck.c:5659 + msgid "incompatible types in assignment of `%T' to `%T'" + msgstr "tipos incompatible en la asignación de `%T' a `%T'" + + #: cp/typeck.c:5666 + msgid "ISO C++ forbids assignment of arrays" + msgstr "ISO C++ prohibe la asignación de matrices" + + #: cp/typeck.c:5809 + msgid " in pointer to member function conversion" + msgstr " en la conversión del apuntador a función miembro" + + #: cp/typeck.c:5817 + msgid " in pointer to member conversion" + msgstr " en la conversión del apuntador a miembro" + + #. This is a reinterpret cast, we choose to do nothing. + #: cp/typeck.c:5828 cp/typeck.c:5847 + msgid "pointer to member cast via virtual base `%T' of `%T'" + msgstr "apuntador a la conversión miembro a través de la base virtual `%T' de `%T'" + + #: cp/typeck.c:5851 + msgid "pointer to member conversion via virtual base `%T' of `%T'" + msgstr "apuntador a la conversión miembro a través de la base virtual `%T' de `%T'" + + #: cp/typeck.c:5921 + msgid "invalid conversion to type `%T' from type `%T'" + msgstr "conversión inválida del tipo `%T' a partir del tipo `%T'" + + #: cp/typeck.c:6086 + msgid "passing NULL used for non-pointer %s %P of `%D'" + msgstr "pasando NULL usado para el no apuntador %s %P de `%D'" + + #: cp/typeck.c:6089 + msgid "%s to non-pointer type `%T' from NULL" + msgstr "%s al tipo `%T' que no es apuntador desde NULL" + + #: cp/typeck.c:6097 + msgid "passing `%T' for %s %P of `%D'" + msgstr "pasando `%T' para %s %P de `%D'" + + #: cp/typeck.c:6100 + msgid "%s to `%T' from `%T'" + msgstr "%s a `%T' desde `%T'" + + #: cp/typeck.c:6110 + msgid "passing negative value `%E' for %s %P of `%D'" + msgstr "pasando el valor negativo `%E' para %s %P de `%D'" + + #: cp/typeck.c:6113 + msgid "%s of negative value `%E' to `%T'" + msgstr "%s de valor negatio `%E' a `%T'" + + #: cp/typeck.c:6200 + msgid "cannot convert `%T' to `%T' for argument `%P' to `%D'" + msgstr "no se puede convertir `%T' a `%T' para el argumento `%P' para `%D'" + + #: cp/typeck.c:6203 + msgid "cannot convert `%T' to `%T' in %s" + msgstr "no se puede convertir `%T' a `%T' en %s" + + #: cp/typeck.c:6290 cp/typeck.c:6292 + msgid "in passing argument %P of `%+D'" + msgstr "en el paso del argumento %P de `%+D'" + + #: cp/typeck.c:6406 + msgid "returning reference to temporary" + msgstr "devolviendo la referencia al temporal" + + #: cp/typeck.c:6413 + msgid "reference to non-lvalue returned" + msgstr "se devolvió una referencia a un valor que no es l-valor" + + #: cp/typeck.c:6425 + msgid "reference to local variable `%D' returned" + msgstr "se devolvió una referencia a la variable local `%D'" + + #: cp/typeck.c:6428 + msgid "address of local variable `%D' returned" + msgstr "se devolvió la dirección de la variable local `%D'" + + #: cp/typeck.c:6459 + msgid "returning a value from a destructor" + msgstr "devolviendo un valor de un destructor" + + #. If a return statement appears in a handler of the + #. function-try-block of a constructor, the program is ill-formed. + #: cp/typeck.c:6467 + msgid "cannot return from a handler of a function-try-block of a constructor" + msgstr "no se puede regresar de un manejador de una función-intenta-bloque de un constructor" + + #. You can't return a value from a constructor. + #: cp/typeck.c:6470 + msgid "returning a value from a constructor" + msgstr "devolviendo un valor de un constructor" + + #: cp/typeck.c:6487 + msgid "return-statement with no value, in function declared with a non-void return type" + msgstr "sentencia de devolución sin valor, en una función declarada con un tipo de devolución que no es void" + + #: cp/typeck.c:6503 + msgid "return-statement with a value, in function declared with a void return type" + msgstr "declaración de devolución con un valor, en una función declarada con un tipo de devolución void" + + #: cp/typeck.c:6524 + msgid "`operator new' must not return NULL unless it is declared `throw()' (or -fcheck-new is in effect)" + msgstr "`operator new' no debe regresar NULL a menos que se declare `throw()' (o -fcheck-new esté en efecto)" + + #: cp/typeck2.c:54 + msgid "type `%T' is not a base type for type `%T'" + msgstr "el tipo `%T' no es un tipo base para el tipo `%T'" + + #: cp/typeck2.c:151 + msgid "cannot declare variable `%D' to be of type `%T'" + msgstr "no se puede declarar que la variable `%D' sea de tipo `%T'" + + #: cp/typeck2.c:154 + msgid "cannot declare parameter `%D' to be of type `%T'" + msgstr "no se puede declarar que el parámetro `%D' sea de tipo `%T'" + + #: cp/typeck2.c:157 + msgid "cannot declare field `%D' to be of type `%T'" + msgstr "no se puede declarar que el campo `%D' sea de tipo `%T'" + + #: cp/typeck2.c:161 + msgid "invalid return type for member function `%#D'" + msgstr "tipo de devolución inválido para la función miembro `%#D'" + + #: cp/typeck2.c:163 + msgid "invalid return type for function `%#D'" + msgstr "tipo de devolución inválido para la función `%#D'" + + #: cp/typeck2.c:166 + msgid "cannot allocate an object of type `%T'" + msgstr "no se puede asignar un objeto de tipo `%T'" + + #: cp/typeck2.c:173 + msgid " because the following virtual functions are abstract:" + msgstr " porque las siguientes funciones virtual son abstractas:" + + #: cp/typeck2.c:175 + msgid "\t%#D" + msgstr "\t%#D" + + #: cp/typeck2.c:178 + msgid " since type `%T' has abstract virtual functions" + msgstr " ya que el tipo `%T' tiene funciones virtuales abstractas" + + #: cp/typeck2.c:213 + msgid "invalid use of undefined type `%#T'" + msgstr "uso inválido del tipo indefinido `%#T'" + + #: cp/typeck2.c:214 + msgid "forward declaration of `%#T'" + msgstr "declaración hacia adelante de `%#T'" + + #: cp/typeck2.c:218 + msgid "invalid use of `%T'" + msgstr "uso inválido de `%T'" + + #: cp/typeck2.c:232 + msgid "invalid use of member (did you forget the `&' ?)" + msgstr "uso inválido del miembro (¿olvidó el `&'?)" + + #: cp/typeck2.c:236 + msgid "invalid use of template type parameter" + msgstr "uso inválido del parámetro de tipo plantilla" + + #: cp/typeck2.c:243 + msgid "address of overloaded function with no contextual type information" + msgstr "dirección de la función sobrecargada sin información contextual de tipo" + + #: cp/typeck2.c:245 + msgid "overloaded function with no contextual type information" + msgstr "función sobrecargada sin información contextual de tipo" + + #: cp/typeck2.c:247 + msgid "insufficient contextual information to determine type" + msgstr "información contextual insuficiente para determinar el tipo" + + #: cp/typeck2.c:301 + msgid "constructor syntax used, but no constructor declared for type `%T'" + msgstr "se usó la sintaxis de constructor, pero no se declaró un constructor para el tipo `%T'" + + #: cp/typeck2.c:311 + msgid "initializer list construction invalid for derived class object `%D'" + msgstr "construcción de la lista de iniciadores inválida para el objeto de la clase derivada `%D'" + + #: cp/typeck2.c:313 + msgid "initializer list construction invalid for polymorphic class object `%D'" + msgstr "construcción de la lista de iniciadores inválida para el objeto de la clase polimórfica `%D'" + + #: cp/typeck2.c:316 cp/typeck2.c:322 cp/typeck2.c:328 + msgid "initializer list construction invalid for `%D'" + msgstr "construcción de la lista de iniciadores inválida para `%D'" + + #: cp/typeck2.c:317 + msgid "due to the presence of a constructor" + msgstr "debido a la presencia de un constructor" + + #: cp/typeck2.c:323 cp/typeck2.c:329 + msgid "due to non-public access of member `%D'" + msgstr "debido al acceso no público del miembro `%D'" + + #: cp/typeck2.c:341 + msgid "comma expression used to initialize return value" + msgstr "expresión coma utilizada para iniciar el valor de devolución" + + #: cp/typeck2.c:350 + msgid "cannot initialize arrays using this syntax" + msgstr "no se pueden asignar valores iniciales a matrices usando esta sintaxis" + + #: cp/typeck2.c:412 + msgid "ISO C++ forbids non-constant aggregate initializer expressions" + msgstr "ISO C++ prohibe las expresiones agregadas iniciadoras que no son constantes" + + #: cp/typeck2.c:498 + msgid "initializing array with parameter list" + msgstr "asignando valores iniciales a una matriz con una lista de parámetros" + + #: cp/typeck2.c:554 + msgid "initializer for scalar variable requires one element" + msgstr "iniciador para una variable escalar requiere un elemento" + + #: cp/typeck2.c:561 + msgid "braces around scalar initializer for `%T'" + msgstr "llaves alrededor del valor inicial escalar para `%T'" + + #: cp/typeck2.c:564 + msgid "ignoring extra initializers for `%T'" + msgstr "ignorando los iniciadores extra para `%T'" + + #: cp/typeck2.c:576 + msgid "variable-sized object of type `%T' may not be initialized" + msgstr "un objeto de tamaño variable de tipo `%T' no puede tener valor inicial" + + #: cp/typeck2.c:586 + msgid "subobject of type `%T' must be initialized by constructor, not by `%E'" + msgstr "el subobjeto de tipo `%T' debe ser iniciado por un constructor, no por `%E'" + + #: cp/typeck2.c:652 + msgid "aggregate has a partly bracketed initializer" + msgstr "el agregado tiene un iniciador con llaves parciales" + + #: cp/typeck2.c:690 cp/typeck2.c:791 + msgid "non-trivial labeled initializers" + msgstr "iniciadores etiquetados como no triviales" + + #: cp/typeck2.c:707 + msgid "non-empty initializer for array of empty elements" + msgstr "iniciador no-vacío para una matriz de elementos vacíos" + + #: cp/typeck2.c:757 + msgid "initializer list for object of class with virtual base classes" + msgstr "lista de iniciadores para un objeto de una clase con clases base virtual" + + #: cp/typeck2.c:763 + msgid "initializer list for object of class with base classes" + msgstr "lista de iniciadores para un objeto de una clase con clases base" + + #: cp/typeck2.c:769 + msgid "initializer list for object using virtual functions" + msgstr "lista de iniciadores para un objeto que usa funciones virtuales" + + #: cp/typeck2.c:832 cp/typeck2.c:849 + msgid "missing initializer for member `%D'" + msgstr "falta el iniciador para el miembro `%D'" + + #: cp/typeck2.c:837 + msgid "uninitialized const member `%D'" + msgstr "miembro const `%D' sin iniciar" + + #: cp/typeck2.c:840 + msgid "member `%D' with uninitialized const fields" + msgstr "miembro `%D' con campos const sin iniciar" + + #: cp/typeck2.c:843 + msgid "member `%D' is uninitialized reference" + msgstr "el miembro `%D' es una referencia sin iniciar" + + #: cp/typeck2.c:886 + msgid "index value instead of field name in union initializer" + msgstr "valor de índice en lugar del nombre del campo en el iniciador de union" + + #: cp/typeck2.c:898 + msgid "no field `%D' in union being initialized" + msgstr "no existe el campo `%D' en la union que se está iniciando" + + #: cp/typeck2.c:906 + msgid "union `%T' with no named members cannot be initialized" + msgstr "no se puede iniciar la union `%T' sin miembros nombrados" + + #: cp/typeck2.c:942 + msgid "excess elements in aggregate initializer" + msgstr "exceso de elementos en iniciador agregado" + + #: cp/typeck2.c:1047 + msgid "circular pointer delegation detected" + msgstr "se detectó una delegación de apuntador circular" + + #: cp/typeck2.c:1060 + msgid "base operand of `->' has non-pointer type `%T'" + msgstr "el operando base de `->' tiene el tipo `%T' que no es apuntador" + + #: cp/typeck2.c:1074 + msgid "result of `operator->()' yields non-pointer result" + msgstr "el resultado de `operator->()' produce un resultado que no es apuntador" + + #: cp/typeck2.c:1076 + msgid "base operand of `->' is not a pointer" + msgstr "el operando base de `->' no es un apuntador" + + #: cp/typeck2.c:1142 + msgid "`%E' cannot be used as a member pointer, since it is of type `%T'" + msgstr "no se puede usar `%E' como un apuntador miembro, porque es de tipo `%T'" + + #: cp/typeck2.c:1149 + msgid "cannot apply member pointer `%E' to `%E', which is of non-aggregate type `%T'" + msgstr "no se puede aplicar el apuntador a miembro `%E' a `%E', el cual es del tipo no agregado `%T'" + + #: cp/typeck2.c:1158 + msgid "member type `%T::' incompatible with object type `%T'" + msgstr "el tipo de miembro `%T::' es incompatible con el tipo objeto `%T'" + + #: cp/typeck2.c:1195 + msgid "`%T' fails to be a typedef or built-in type" + msgstr "`%T' falla al ser un typedef o un tipo interno" + + #: cp/typeck2.c:1268 + #, c-format + msgid "ISO C++ forbids defining types within %s" + msgstr "ISO C++ prohibe la definición de tipos dentro de %s" + + #. XXX Not i18n clean. + #: cp/cp-tree.h:3854 + #, c-format + msgid "%s is deprecated, please see the documentation for details" + msgstr "%s está deprecado, por favor vea la documentación para más detalles" + + #: cp/lang-options.h:29 + msgid "Do not obey access control semantics" + msgstr "No obedecer las semánticas de control de acceso" + + #: cp/lang-options.h:31 + msgid "Change when template instances are emitted" + msgstr "Cambiar cuando se emitan las instancias de la plantilla" + + #: cp/lang-options.h:36 + msgid "Check the return value of new" + msgstr "Revisar el valor de devolución de new" + + #: cp/lang-options.h:39 + msgid "Reduce size of object files" + msgstr "Reducir el tamaño de los ficheros objeto" + + #: cp/lang-options.h:43 + msgid "Make string literals `char[]' instead of `const char[]'" + msgstr "Hacer que las cadenas literales sean `char[]' en lugar de `const char[]'" + + #: cp/lang-options.h:46 + msgid "Dump the entire translation unit to a file" + msgstr "Volcar la unidad de traducción completa a un fichero" + + #: cp/lang-options.h:48 + msgid "Do not inline member functions by default" + msgstr "No hacer inline por omisión a las funciones miembro" + + #: cp/lang-options.h:51 + msgid "Do not generate run time type descriptor information" + msgstr "No generar información del tipo de descriptor en tiempo de ejecución" + + #: cp/lang-options.h:56 + msgid "Do not generate code to check exception specifications" + msgstr "No generar código para revisar excepciones de especificaciones" + + #: cp/lang-options.h:61 + msgid "Scope of for-init-statement vars extends outside" + msgstr "El ámbito de las variables de la declaración de inicio de for se extiende hacia afuera" + + #: cp/lang-options.h:64 + msgid "Do not recognize GNU defined keywords" + msgstr "No reconocer las palabras claves definidas por GNU" + + #: cp/lang-options.h:68 + msgid "Enable support for huge objects" + msgstr "Activar el soporte para objetos enormes" + + #: cp/lang-options.h:72 + msgid "Export functions even if they can be inlined" + msgstr "Exportar funciones aún si pueden ser inline" + + #: cp/lang-options.h:75 + msgid "Only emit explicit template instatiations" + msgstr "Emitir solamente instanciaciones explícitas de plantillas" + + #: cp/lang-options.h:78 + msgid "Only emit explicit instatiations of inline templates" + msgstr "Emitir solamente instanciaciones explícitas para plantillas inline" + + #: cp/lang-options.h:84 + msgid "Don't pedwarn about uses of Microsoft extensions" + msgstr "No avisar pedantemente sobre los usos de extensiones Microsoft" + + #: cp/lang-options.h:87 + msgid "Recognize and/bitand/bitor/compl/not/or/xor" + msgstr "Reconocer and/bitand/bitor/compl/not/or/xor" + + #: cp/lang-options.h:91 + msgid "Disable optional diagnostics" + msgstr "Desactivar los diagnósticos opcionales" + + #: cp/lang-options.h:93 + msgid "Downgrade conformance errors to warnings" + msgstr "Degradar los errores de concordancia a advertencias" + + #: cp/lang-options.h:96 + msgid "Enable automatic template instantiation" + msgstr "Activar la instanciación automática de plantillas" + + #: cp/lang-options.h:101 + msgid "Display statistics accumulated during compilation" + msgstr "Mostrar las estadísticas acumuladas durante la compilación" + + #: cp/lang-options.h:104 + msgid "Specify maximum template instantiation depth" + msgstr "Especificar la profundidad máxima de instanciación de plantillas" + + #: cp/lang-options.h:106 + msgid "Use __cxa_atexit to register destructors" + msgstr "Usar __cxa_atexit para registrar destructores" + + #: cp/lang-options.h:109 + msgid "Discard unused virtual functions" + msgstr "Descartar funciones virtual sin usar" + + #: cp/lang-options.h:112 + msgid "Implement vtables using thunks" + msgstr "Implementar vtables usando thunks" + + #: cp/lang-options.h:115 + msgid "Emit common-like symbols as weak symbols" + msgstr "Emitir símbolos comunes como símbolos débiles" + + #: cp/lang-options.h:118 + msgid "Emit cross referencing information" + msgstr "Emitir información de referencia cruzada" + + #: cp/lang-options.h:122 + msgid "Warn about inconsistent return types" + msgstr "Avisar sobre tipos inconsistentes de devolución" + + #: cp/lang-options.h:125 + msgid "Warn about overloaded virtual function names" + msgstr "Avisar sobre nombres de funciones virtual sobrecargadas" + + #: cp/lang-options.h:129 + msgid "Don't warn when all ctors/dtors are private" + msgstr "No avisar cuando todos los ctors/dtors son privados" + + #: cp/lang-options.h:131 + msgid "Warn about non virtual destructors" + msgstr "Avisar sobre destructores no virtuales" + + #: cp/lang-options.h:134 + msgid "Warn when a function is declared extern, then inline" + msgstr "Avisar cuando una función es declarada extern y luego inline" + + #: cp/lang-options.h:137 + msgid "Warn when the compiler reorders code" + msgstr "Avisar cuando el compilador reordene código" + + #: cp/lang-options.h:140 + msgid "Warn when synthesis behavior differs from Cfront" + msgstr "Avisar cuando el comportamiento de síntesis difiera de Cfront" + + #: cp/lang-options.h:144 + msgid "Don't warn when type converting pointers to member functions" + msgstr "No avisar cuando el tipo convierte apuntadores a funciones miembro" + + #: cp/lang-options.h:146 + msgid "Warn about violations of Effective C++ style rules" + msgstr "Avisar violaciones de reglas de estilo de Effective C++" + + #: cp/lang-options.h:149 + msgid "Warn when overload promotes from unsigned to signed" + msgstr "Avisar cuando la sobrecarga promueva de unsigned a signed" + + #: cp/lang-options.h:152 + msgid "Warn if a C style cast is used in a program" + msgstr "Avisar cuando se use una conversión de estilo C en un programa" + + #: cp/lang-options.h:156 + msgid "Don't warn when non-templatized friend functions are declared within a template" + msgstr "No avisar cuando las funciones friend sin plantillas son declaradas dentro de una plantilla" + + #: cp/lang-options.h:159 + msgid "Don't announce deprecation of compiler features" + msgstr "No anunciar características deprecadas del compilador" + + #: f/bad.c:386 + msgid "note:" + msgstr "nota:" + + #: f/bad.c:390 + msgid "warning:" + msgstr "aviso:" + + #: f/bad.c:394 + msgid "fatal:" + msgstr "fatal:" + + #: f/bad.c:436 + msgid "(continued):" + msgstr "(continuado):" + + #: f/bad.c:486 f/bad.c:504 + msgid "[REPORT BUG!!] %" + msgstr "[¡¡REPORTAR BICHO!!] %" + + #: f/bad.c:493 f/bad.c:525 + msgid "[REPORT BUG!!]" + msgstr "[¡¡REPORTAR BICHO!!]" + + #: f/com.c:3122 + #, no-c-format + msgid "ASSIGN'ed label cannot fit into `%A' at %0 -- using wider sibling" + msgstr "la etiqueta ASSIGNada no cabe en `%A' en %0 -- utilizando una similar más ancho" + + #: f/com.c:11606 + msgid "no INTEGER type can hold a pointer on this configuration" + msgstr "ningún tipo INTEGER puede guardar una apuntador en esta configuración" + + #: f/com.c:11831 + #, c-format + msgid "configuration: REAL, INTEGER, and LOGICAL are %d bits wide," + msgstr "configuration: REAL, INTEGER, y LOGICAL son de %d bits de anchura," + + #: f/com.c:11833 + #, c-format + msgid "and pointers are %d bits wide, but g77 doesn't yet work" + msgstr "y los apuntadores son de %d bits de anchura, pero g77 aún no trabaja" + + #: f/com.c:11835 + msgid "properly unless they all are 32 bits wide" + msgstr "de forma adecuada a menos que todos sean de 32 bits de anchura" + + #: f/com.c:11836 + msgid "Please keep this in mind before you report bugs." + msgstr "Por favor tenga esto presente antes de reportar `bugs'." + + #. I/O will probably crash. + #: f/com.c:11844 + #, c-format + msgid "configuration: char * holds %d bits, but ftnlen only %d" + msgstr "configuration: char * guarda %d bits, pero ftnlen sólo %d" + + #. ASSIGN 10 TO I will crash. + #: f/com.c:11853 + #, c-format + msgid "" + "configuration: char * holds %d bits, but INTEGER only %d --\n" + " ASSIGN statement might fail" + msgstr "" + "configuration: char * guarda %d bits, pero INTEGER sólo %d --\n" + " la declaración ASSIGN podría fallar" + + #: f/com.c:13687 + msgid "In statement function" + msgstr "En la declaración de la función" + + #: f/com.c:13697 + msgid "Outside of any program unit:\n" + msgstr "Fuera de cualquier unidad de programa:\n" + + #: f/com.c:15386 + #, no-c-format + msgid "%A from %B at %0%C" + msgstr "%A desde %B en %0%C" + + #: f/com.c:15563 + msgid "directory name must immediately follow -I" + msgstr "el nombre del directorio debe seguir inmediatamente a -I" + + #: f/com.c:15706 + #, no-c-format + msgid "At %0, INCLUDE file %A exists, but is not readable" + msgstr "En %0, el fichero INCLUDE %A existe, pero no es legible" + + #: f/com.c:15741 + #, no-c-format + msgid "At %0, INCLUDE nesting too deep" + msgstr "En %0, la anidación de INCLUDE es demasiado profunda" + + #: f/expr.c:9613 + #, no-c-format + msgid "Two arithmetic operators in a row at %0 and %1 -- use parentheses" + msgstr "Dos operadores aritméticos en una fila en %0 y %1 -- use paréntesis" + + #: f/expr.c:9663 + #, no-c-format + msgid "Operator at %0 has lower precedence than that at %1 -- use parentheses" + msgstr "El operador en %0 tiene una preferencia menor que aquél en %1 -- use paréntesis" + + #: f/expr.c:10524 + #, no-c-format + msgid "Use .EQV./.NEQV. instead of .EQ./.NE. at %0 for LOGICAL operands at %1 and %2" + msgstr "Use .EQV./.NEQV. en lugar de .EQ./.NE. en %0 para los operandos LOGICAL en %1 y %2" + + #: f/expr.c:10895 + #, no-c-format + msgid "Unsupported operand for ** at %1 -- converting to default INTEGER" + msgstr "Operando sin soporte para ** en %1 -- se convirtió a INTEGER por omisión" + + #: f/g77spec.c:256 + #, c-format + msgid "overflowed output arg list for `%s'" + msgstr "lista de argumentos de salida desbordada para `%s'" + + #: f/g77spec.c:395 + msgid "--driver no longer supported" + msgstr "--driver ya no tiene soporte" + + #: f/g77spec.c:408 + #, c-format + msgid "argument to `%s' missing" + msgstr "falta el argumento para `%s'" + + #: f/g77spec.c:412 + msgid "no input files; unwilling to write output files" + msgstr "no hay ficheros de entrada; incapaz de escribir ficheros de salida" + + #: f/implic.c:203 + #, no-c-format + msgid "Implicit declaration of `%A' at %0" + msgstr "Declaración implícita de `%A' en %0" + + #: f/lex.c:274 + #, no-c-format + msgid "The meaning of `\\x' (at %0) varies with -traditional" + msgstr "el significado de `\\x' (en %0) varía con -traditional" + + #: f/lex.c:325 + #, no-c-format + msgid "The meaning of `\\a' (at %0) varies with -traditional" + msgstr "el significado de `\\a' (en %0) varía con -traditional" + + #: f/lex.c:355 + #, no-c-format + msgid "Non-ISO-C-standard escape sequence `\\%A' at %0" + msgstr "Secuencia de escape que no es estándard ISO `\\%A' en %0" + + #: f/lex.c:374 + #, no-c-format + msgid "Unknown escape sequence `\\%A' at %0" + msgstr "Secuencia de escape desconocida `\\%A' en %0" + + #: f/lex.c:383 + #, no-c-format + msgid "Unterminated escape sequence `\\' at %0" + msgstr "Secuencia de escape sin terminar `\\' en %0" + + #: f/lex.c:394 + #, no-c-format + msgid "Unknown escape sequence `\\' followed by char code 0x%A at %0" + msgstr "Secuencia de escape desconocida: `\\' seguida por el código de caracter 0x%A en %0" + + #: f/lex.c:422 + #, no-c-format + msgid "\\x used at %0 with no following hex digits" + msgstr "se usó \\x en %0 sin dígitos hexadecimales a continuación" + + #: f/lex.c:436 + #, no-c-format + msgid "Hex escape at %0 out of range" + msgstr "Secuencia de escape hexadecimal en %0 fuera de rango" + + #: f/lex.c:470 + #, no-c-format + msgid "Escape sequence at %0 out of range for character" + msgstr "Secuencia de escape en %0 fuera de rango por el carácter" + + #: f/lex.c:593 + msgid "the meaning of `\\x' varies with -traditional" + msgstr "el significado de `\\x' varía con -traditional" + + #: f/lex.c:630 + msgid "hex escape out of range" + msgstr "secuencia de escape hexadecimal fuera de rango" + + #: f/lex.c:676 + msgid "the meaning of `\\a' varies with -traditional" + msgstr "el significado de `\\a' varía con -traditional" + + #: f/lex.c:692 + #, c-format + msgid "non-ANSI-standard escape sequence, `\\%c'" + msgstr "secuencia de escape que no es estándar ANSI, `\\%c'" + + #: f/lex.c:705 + #, c-format + msgid "non-ISO escape sequence `\\%c'" + msgstr "secuencia de escape que no es ISO, `\\%c'" + + #: f/lex.c:709 + #, c-format + msgid "unknown escape sequence `\\%c'" + msgstr "secuencia de escape desconocida, `\\%c'" + + #: f/lex.c:711 + #, c-format + msgid "unknown escape sequence: `\\' followed by char code 0x%x" + msgstr "secuencia de escape desconocida: `\\' seguida por el código de caracter 0x%x" + + #: f/lex.c:788 + msgid "badly formed directive -- no closing quote" + msgstr "directiva mal formada -- comilla sin cerrar" + + #: f/lex.c:846 + msgid "#-lines for entering and leaving files don't match" + msgstr "el número de #-lines para entrar y salir de los ficheros no coinciden" + + #: f/lex.c:1008 + msgid "bad directive -- missing close-quote" + msgstr "directiva errónea -- falta una comilla que cierre" + + #: f/lex.c:1122 + #, c-format + msgid "ignoring pragma: %s" + msgstr "ignorando el pragma: %s" + + #: f/lex.c:1200 + msgid "invalid #ident" + msgstr "instrucción #ident inválida" + + #: f/lex.c:1217 + msgid "undefined or invalid # directive" + msgstr "directiva # no definida o inválida" + + #: f/lex.c:1273 + msgid "invalid #line" + msgstr "instrucción #line inválida" + + #: f/lex.c:1329 f/lex.c:1373 + msgid "use `#line ...' instead of `# ...' in first line" + msgstr "use `#line ...' en lugar de `# ...' en la primera línea" + + #: f/lex.c:1383 + msgid "invalid #-line" + msgstr "instrucción #-line inválida" + + #: f/lex.c:1476 + #, no-c-format + msgid "Null character at %0 -- line ignored" + msgstr "Carácter nulo en %0 -- línea ignorada" + + #: f/stb.c:12078 + #, no-c-format + msgid "INCLUDE at %0 not the only statement on the source line" + msgstr "INCLUDE en %0 no es la primera declaración en la línea de código" + + #: f/ste.c:1404 f/ste.c:1755 + msgid "ASSIGNed FORMAT specifier is too small" + msgstr "el especificador de FORMATo ASSIGNado es demasiado pequeño" + + #. ~~~Someday handle CHARACTER*1, CHARACTER*N + #: f/ste.c:2636 + #, no-c-format + msgid "SELECT CASE on CHARACTER type (at %0) not supported -- sorry" + msgstr "SELECT CASE en el tipo CHARACTER (en %0) no tiene soporte -- perdón" + + #: f/ste.c:2965 + msgid "ASSIGN to variable that is too small" + msgstr "ASSIGN a una variable que es demasiado pequeña" + + #: f/ste.c:2993 + msgid "ASSIGNed GOTO target variable is too small" + msgstr "la variable ASSIGNada del objetivo GOTO es demasiado pequeña" + + #: f/stu.c:305 + #, no-c-format + msgid "Local adjustable symbol `%A' at %0" + msgstr "Símbolo local ajustable `%A' en %0" + + #: f/target.c:2560 + msgid "data initializer on host with different endianness" + msgstr "iniciador de datos en el anfitrión con `endianness' diferente" + + #: f/top.c:238 + #, c-format + msgid "%s no longer supported -- try -fvxt" + msgstr "%s ya no tiene soporte -- intente -fvxt" + + #: f/top.c:240 + #, c-format + msgid "%s no longer supported -- try -fno-vxt -ff90" + msgstr "%s ya no tiene soporte -- intente -fno-vxt -ff90" + + #: f/top.c:308 f/top.c:310 + #, c-format + msgid "%s disabled, use normal debugging flags" + msgstr "%s desactivado, use los interruptores normales de depuración" + + #: f/lang-options.h:33 + msgid "Print g77-specific compiler version info, run internal tests" + msgstr "Imprime información de la versión específica del compilador g77, ejecuta pruebas internas" + + #: f/lang-options.h:37 + msgid "Program is written in typical FORTRAN 66 dialect" + msgstr "El programa está escrito en el dialecto típico FORTRAN 66" + + #: f/lang-options.h:40 + msgid "Program is written in typical Unix f77 dialect" + msgstr "El programa está escrito en el dialecto típico Unix f77" + + #: f/lang-options.h:42 + msgid "Program does not use Unix-f77 dialectal features" + msgstr "El programa no utiliza las características del dialecto Unix-f77" + + #: f/lang-options.h:44 + msgid "Program is written in Fortran-90-ish dialect" + msgstr "El programa en un dialecto cercano a Fortran-90" + + #: f/lang-options.h:48 + msgid "Treat local vars and COMMON blocks as if they were named in SAVE statements" + msgstr "Tratar las variables locales y los bloques COMMON como si fueran nombrados en declaraciones SAVE" + + #: f/lang-options.h:50 + msgid "Allow $ in symbol names" + msgstr "Permitir $ en los nombres de símbolos" + + #: f/lang-options.h:54 + msgid "f2c-compatible code need not be generated" + msgstr "No se necesita generar código compatible con f2c" + + #: f/lang-options.h:57 + msgid "Unsupported; do not generate libf2c-calling code" + msgstr "Sin soporte; no genera código de llamada a libf2c" + + #: f/lang-options.h:59 + msgid "Unsupported; affects code-generation of arrays" + msgstr "Sin soporte; afecta la generación de código de las matrices" + + #: f/lang-options.h:62 + msgid "Program is written in Fortran-90-ish free form" + msgstr "El programa está escrito en una forma libre cercana a Fortran-90" + + #: f/lang-options.h:67 + msgid "Warn about use of (only a few for now) Fortran extensions" + msgstr "Avisar sobre el uso de (sólo algunas por ahora) extensiones Fortran" + + #: f/lang-options.h:70 + msgid "Program is written in VXT (Digital-like) FORTRAN" + msgstr "El programa está escrito en VXT (como Digital) FORTRAN" + + #: f/lang-options.h:73 + msgid "Disallow all ugly features" + msgstr "Desactiva todas las características feas" + + #: f/lang-options.h:76 + msgid "Hollerith and typeless constants not passed as arguments" + msgstr "No se pasan las constantes hollerith y sin tipo como argumentos" + + #: f/lang-options.h:78 + msgid "Allow ordinary copying of ASSIGN'ed vars" + msgstr "Permite la copia ordinaria de variables ASSIGNadas" + + #: f/lang-options.h:81 + msgid "Dummy array dimensioned to (1) is assumed-size" + msgstr "La matriz falsa dimensionada a (1) es de tamaño asumido" + + #: f/lang-options.h:84 + msgid "Trailing comma in procedure call denotes null argument" + msgstr "Coma al final de la llamada al procedimiento denota un argumento nulo" + + #: f/lang-options.h:87 + msgid "Allow REAL(Z) and AIMAG(Z) given DOUBLE COMPLEX Z" + msgstr "Permite que REAL(Z) y AIMAG(Z) reciban DOUBLE COMPLEX Z" + + #: f/lang-options.h:91 + msgid "Initialization via DATA and PARAMETER is type-compatible" + msgstr "La iniciación a través de DATA y PARAMETER es de tipos compatibles" + + #: f/lang-options.h:93 + msgid "Allow INTEGER and LOGICAL interchangeability" + msgstr "Permite el intercambio entre INTEGER y LOGICAL" + + #: f/lang-options.h:96 + msgid "Print internal debugging-related info" + msgstr "Muestra la información interna relacionada con la depuración" + + #: f/lang-options.h:99 + msgid "Initialize local vars and arrays to zero" + msgstr "Iniciando las variables locales y matrices a cero" + + #: f/lang-options.h:103 + msgid "Backslashes in character/hollerith constants not special (C-style)" + msgstr "Las barras invertidas en constantes de caracter/hollerith no son especiales (estilo C)" + + #: f/lang-options.h:105 + msgid "Have front end emulate COMPLEX arithmetic to avoid bugs" + msgstr "Hace que el frente emule aritmética COMPLEX para evitar `bugs'" + + #: f/lang-options.h:109 + msgid "Disable the appending of underscores to externals" + msgstr "Desactiva la agregación de subrayados a los externos" + + #: f/lang-options.h:112 + msgid "Never append a second underscore to externals" + msgstr "Nunca agregar un segundo subrayado a los externos" + + #: f/lang-options.h:114 + msgid "Intrinsics spelled as e.g. SqRt" + msgstr "Intrínsecos deletreados como p.e. SqRt" + + #: f/lang-options.h:116 + msgid "Intrinsics in uppercase" + msgstr "Intrínsecos en mayúsculas" + + #: f/lang-options.h:119 + msgid "Intrinsics letters in arbitrary cases" + msgstr "Letras de intrínsecos con mayúsculas/minúsculas indistintas" + + #: f/lang-options.h:121 + msgid "Language keywords spelled as e.g. IOStat" + msgstr "Palabras claves del lenguaje deletreadas como p.e. IOStat" + + #: f/lang-options.h:123 + msgid "Language keywords in uppercase" + msgstr "Palabras claves del lenguaje en mayúsculas" + + #: f/lang-options.h:126 + msgid "Language keyword letters in arbitrary cases" + msgstr "Palabras claves del lenguaje con mayúsculas/minúsculas indistintas" + + #: f/lang-options.h:128 + msgid "Internally convert most source to uppercase" + msgstr "Convertir internamente casi todo el código a mayúsculas" + + #: f/lang-options.h:131 + msgid "Internally preserve source case" + msgstr "Preservar internamente las mayúsculas y minúsculas del código fuente" + + #: f/lang-options.h:133 + msgid "Symbol names spelled in mixed case" + msgstr "Nombres de símbolo deletreados con mayúsculas/minúsculas mezcladas" + + #: f/lang-options.h:135 + msgid "Symbol names in uppercase" + msgstr "Nombres de símbolo en mayúsculas" + + #: f/lang-options.h:137 + msgid "Symbol names in lowercase" + msgstr "Nombres de símbolo en minúsculas" + + #: f/lang-options.h:140 + msgid "Program written in uppercase" + msgstr "Programa escrito en mayúsculas" + + #: f/lang-options.h:142 + msgid "Program written in lowercase" + msgstr "Programa escrito en minúsculas" + + #: f/lang-options.h:144 + msgid "Program written in strict mixed-case" + msgstr "Programa escrito estrictamente con mayúsculas y minúsculas mezcladas" + + #: f/lang-options.h:146 + msgid "Compile as if program written in uppercase" + msgstr "Compilar como si el programa estuviera escrito en mayúsculas" + + #: f/lang-options.h:148 + msgid "Compile as if program written in lowercase" + msgstr "Compilar como si el programa estuviera escrito en minúsculas" + + #: f/lang-options.h:150 + msgid "Preserve all spelling (case) used in program" + msgstr "Preservar todo el deletreo (mayúsculas/minúsculas) usado en el programa" + + #: f/lang-options.h:152 + msgid "Delete libU77 intrinsics with bad interfaces" + msgstr "Borrar los intrínsecos libU77 con interfaces erróneas" + + #: f/lang-options.h:154 + msgid "Disable libU77 intrinsics with bad interfaces" + msgstr "Desactivar los intrínsecos libU77 con interfaces erróneas" + + #: f/lang-options.h:157 + msgid "Hide libU77 intrinsics with bad interfaces" + msgstr "Esconder los intrínsecos libU77 con interfaces erróneas" + + #: f/lang-options.h:159 + msgid "Delete non-FORTRAN-77 intrinsics f2c supports" + msgstr "Borrar los intrínsecos de FORTRAN que no es 77 que f2c soporta" + + #: f/lang-options.h:161 + msgid "Disable non-FORTRAN-77 intrinsics f2c supports" + msgstr "Desactivar los intrínsecos de FORTRAN que no es 77 que f2c soporta" + + #: f/lang-options.h:164 + msgid "Hide non-FORTRAN-77 intrinsics f2c supports" + msgstr "Esconder los intrínsecos de FORTRAN que no es 77 que f2c soporta" + + #: f/lang-options.h:166 + msgid "Delete non-FORTRAN-77 intrinsics F90 supports" + msgstr "Borrar los intrínsecos de FORTRAN que no es 77 que F90 soporta" + + #: f/lang-options.h:168 + msgid "Disable non-FORTRAN-77 intrinsics F90 supports" + msgstr "Desactivar los intrínsecos de FORTRAN que no es 77 que F90 soporta" + + #: f/lang-options.h:171 + msgid "Hide non-FORTRAN-77 intrinsics F90 supports" + msgstr "Esconder los intrínsecos de FORTRAN que no es 77 que F90 soporta" + + #: f/lang-options.h:173 + msgid "Delete non-FORTRAN-77 intrinsics g77 supports" + msgstr "Borrar los intrínsecos de FORTRAN que no es 77 que g77 soporta" + + #: f/lang-options.h:175 + msgid "Disable non-FORTRAN 77 intrinsics F90 supports" + msgstr "Desactivar los intrínsecos de FORTRAN que no es 77 que g77 soporta" + + #: f/lang-options.h:178 + msgid "Hide non-FORTRAN 77 intrinsics F90 supports" + msgstr "Esconder los intrínsecos de FORTRAN que no es 77 que g77 soporta" + + #: f/lang-options.h:180 + msgid "Delete MIL-STD 1753 intrinsics" + msgstr "Borrar los intrínsecos MIL-STD 1753" + + #: f/lang-options.h:182 + msgid "Disable MIL-STD 1753 intrinsics" + msgstr "Desactivar los intrínsecos MIL-STD 1753" + + #: f/lang-options.h:185 + msgid "Hide MIL-STD 1753 intrinsics" + msgstr "Esconder los intrínsecos MIL-STD 1753" + + #: f/lang-options.h:187 + msgid "Delete libU77 intrinsics" + msgstr "Borrar los intrínsecos libU77" + + #: f/lang-options.h:189 + msgid "Disable libU77 intrinsics" + msgstr "Desactivar los intrínsecos libU77" + + #: f/lang-options.h:192 + msgid "Hide libU77 intrinsics" + msgstr "Borrar los intrínsecos libU77" + + #: f/lang-options.h:194 + msgid "Delete non-FORTRAN-77 intrinsics VXT FORTRAN supports" + msgstr "Borrar los intrínsecos de FORTRAN que no es 77 que VXT FORTRAN soporta" + + #: f/lang-options.h:196 + msgid "Disable non-FORTRAN-77 intrinsics VXT FORTRAN supports" + msgstr "Desactivar los intrínsecos de FORTRAN que no es 77 que VXT FORTRAN soporta" + + #: f/lang-options.h:199 + msgid "Hide non-FORTRAN-77 intrinsics VXT FORTRAN supports" + msgstr "Esconder los intrínsecos de FORTRAN que no es 77 que VXT FORTRAN soporta" + + #: f/lang-options.h:201 + msgid "Treat initial values of 0 like non-zero values" + msgstr "Tratar los valores iniciales de 0 como valores que no son cero" + + #: f/lang-options.h:204 + msgid "Emit special debugging information for COMMON and EQUIVALENCE (disabled)" + msgstr "Emitir información especial de depuración para COMMON y EQUIVALENCE (desactivado)" + + #: f/lang-options.h:207 + msgid "Take at least one trip through each iterative DO loop" + msgstr "Tomar al menos un viaje a través de cada ciclo DO iterativo" + + #: f/lang-options.h:211 + msgid "Print names of program units as they are compiled" + msgstr "Mostrar los nombres de las unidades de programa mientras son compiladas" + + #: f/lang-options.h:214 + msgid "Disable fatal diagnostics about inter-procedural problems" + msgstr "Desactivar los diagnósticos fatales sobre problemas interprocedurales" + + #: f/lang-options.h:216 + msgid "Make prefix-radix non-decimal constants be typeless" + msgstr "Hacer que no tengan tipo las constantes con prefijo-radical que no es decimal" + + #: f/lang-options.h:219 + msgid "Generate code to check subscript and substring bounds" + msgstr "Generar código para revisar los límites de subíndices y subcadenas" + + #: f/lang-options.h:222 + msgid "Fortran-specific form of -fbounds-check" + msgstr "Forma específica de Fortran de -fbounds-check" + + #: f/lang-options.h:226 + msgid "Disable warnings about inter-procedural problems" + msgstr "Desactivar los avisos sobre problemas interprocedurales" + + #: f/lang-options.h:230 + msgid "Warn about constructs with surprising meanings" + msgstr "Avisar acerca de constructores con significados sorprendentes" + + #: f/lang-options.h:235 + msgid "Add a directory for INCLUDE searching" + msgstr "Agregar un directorio para la búsqueda de INCLUDE" + + #: f/lang-options.h:237 + msgid "Set the maximum line length" + msgstr "Establecer la longitud máxima de línea" + + #: f/bad.def:39 + #, no-c-format + msgid "Missing first operand for binary operator at %0" + msgstr "Falta el primer operando binario para el operador binario en %0" + + #: f/bad.def:42 + #, no-c-format + msgid "Zero-length character constant at %0" + msgstr "Constante de carácter de longitud cero en %0" + + #: f/bad.def:45 + #, no-c-format + msgid "Invalid token at %0 in expression or subexpression at %1" + msgstr "Elemento inválido en %0 en la expresión o subexpresión en %1" + + #: f/bad.def:48 + #, no-c-format + msgid "Missing operand for operator at %1 at end of expression at %0" + msgstr "Falta un operando para el operador en %1 al final de la expresión en %0" + + #: f/bad.def:51 + #, no-c-format + msgid "Label %A already defined at %1 when redefined at %0" + msgstr "La etiqueta %A ya se definió en %1 cuando se redefinió en %0" + + #: f/bad.def:54 + #, no-c-format + msgid "Unrecognized character at %0 [info -f g77 M LEX]" + msgstr "Carácter no reconocido en %0 [info -f g77 M LEX]" + + #: f/bad.def:57 + #, no-c-format + msgid "Label definition %A at %0 on empty statement (as of %1)" + msgstr "La definición de la etiqueta %A en %0 en una declaración vacía (para %1)" + + #: f/bad.def:65 + #, no-c-format + msgid "Invalid first character at %0 [info -f g77 M LEX]" + msgstr "Primer carácter inválido en %0 [info -f g77 M LEX]" + + #: f/bad.def:68 + #, no-c-format + msgid "Line too long as of %0 [info -f g77 M LEX]" + msgstr "Línea demasiado larga para %0 [info -f g77 M LEX]" + + #: f/bad.def:71 + #, no-c-format + msgid "Non-numeric character at %0 in label field [info -f g77 M LEX]" + msgstr "Carácter no numérico en %0 en el campo de etiqueta [info -f g77 M LEX]" + + #: f/bad.def:74 + #, no-c-format + msgid "Label number at %0 not in range 1-99999" + msgstr "El número de etiqueta en %0 no está en el rango 1-99999" + + #: f/bad.def:77 + #, no-c-format + msgid "At %0, '!' and '/*' are not valid comment delimiters" + msgstr "En %0, '!' y '/*' no son delimitadores de comentario válidos" + + #: f/bad.def:80 + #, no-c-format + msgid "Continuation indicator at %0 must appear in column 6 [info -f g77 M LEX]" + msgstr "El indicador de continuación en %0 debe aparecer en la columna 6 [info -f g77 M LEX]" + + #: f/bad.def:83 + #, no-c-format + msgid "Label at %0 invalid with continuation line indicator at %1 [info -f g77 M LEX]" + msgstr "Etiqueta en %0 inválida con indicador de continuación de línea en %1 [info -f g77 M LEX]" + + #: f/bad.def:91 + #, no-c-format + msgid "Character constant at %0 has no closing apostrophe at %1" + msgstr "La constante de carácter en %0 no tiene el apóstrofe que cierra en %1" + + #: f/bad.def:94 + #, no-c-format + msgid "Hollerith constant at %0 specified %A more characters than are present as of %1" + msgstr "La constante hollerith en %0 especifica %A más caracteres que los presentes en %1" + + #: f/bad.def:97 + #, no-c-format + msgid "Missing close parenthese at %0 needed to match open parenthese at %1" + msgstr "Falta el paréntesis que cierra en %0 necesario para coincidir con los paréntesis abiertos en %1" + + #: f/bad.def:100 + #, no-c-format + msgid "Integer at %0 too large" + msgstr "Entero en %0 demasiado grande" + + #: f/bad.def:123 + #, no-c-format + msgid "Period at %0 not followed by digits for floating-point number or by `NOT.', `TRUE.', or `FALSE.'" + msgstr "El punto en %0 no está seguido de dígitos para un número de coma flotante o por `NOT.', `TRUE.' o `FALSE.'" + + #: f/bad.def:126 + #, no-c-format + msgid "Missing close-period between `.%A' at %0 and %1" + msgstr "Falta el punto que cierra entre `.%A' en %0 y %1" + + #: f/bad.def:129 + #, no-c-format + msgid "Invalid exponent at %0 for real constant at %1; nondigit `%A' in exponent field" + msgstr "Exponente inválido en %0 para la constante real en %1; `%A' que no es dígito en el campo del exponente" + + #: f/bad.def:132 + #, no-c-format + msgid "Missing value at %1 for real-number exponent at %0" + msgstr "Falta un valor en %1 para el exponente de número real en %0" + + #: f/bad.def:135 + #, no-c-format + msgid "Expected binary operator between expressions at %0 and at %1" + msgstr "Se esperaba un operador binario entre las expresiones en %0 y en %1" + + #: f/bad.def:253 + #, no-c-format + msgid "Semicolon at %0 is an invalid token" + msgstr "El punto y coma en %0 es un elemento inválido" + + #: f/bad.def:271 + #, no-c-format + msgid "Extraneous comma in FORMAT statement at %0" + msgstr "Coma sobrante en la declaración FORMAT en %0" + + #: f/bad.def:274 + #, no-c-format + msgid "Missing comma in FORMAT statement at %0" + msgstr "Coma faltante en la declaración FORMAT en %0" + + #: f/bad.def:277 + #, no-c-format + msgid "Spurious sign in FORMAT statement at %0" + msgstr "Signo espurio en la declaración FORMAT en %0" + + #: f/bad.def:280 + #, no-c-format + msgid "Spurious number in FORMAT statement at %0" + msgstr "Número espurio en la declaración FORMAT en %0" + + #: f/bad.def:283 + #, no-c-format + msgid "Spurious text trailing number in FORMAT statement at %0" + msgstr "Texto espurio adicional al número en la declaración FORMAT en %0" + + #: f/bad.def:291 + #, no-c-format + msgid "Unrecognized FORMAT specifier at %0" + msgstr "Especificador FORMAT no reconocido en %0" + + #: f/bad.def:419 + #, no-c-format + msgid "Missing close-parenthese(s) in FORMAT statement at %0" + msgstr "Falta(n) paréntesis que cierran en la declaración FORMAT en %0" + + #: f/bad.def:422 + #, no-c-format + msgid "Missing number following period in FORMAT statement at %0" + msgstr "Falta un número a continuación del punto en la declaración FORMAT en %0" + + #: f/bad.def:425 + #, no-c-format + msgid "Missing number following `E' in FORMAT statement at %0" + msgstr "Falta un número a continuación de `E' en la declaración FORMAT en %0" + + #: f/bad.def:433 + #, no-c-format + msgid "Spurious trailing comma preceding terminator at %0" + msgstr "Coma final espuria precediendo al terminador en %0" + + #: f/bad.def:436 + #, no-c-format + msgid "At %0, specify OPERATOR instead of ASSIGNMENT for INTERFACE statement not specifying the assignment operator (=)" + msgstr "En %0, especifique OPERATOR en lugar de ASSIGNMENT para la declaración INTERFACE que no especifica el operador de asignación (=)" + + #: f/bad.def:439 + #, no-c-format + msgid "At %0, specify ASSIGNMENT instead of OPERATOR for INTERFACE statement specifying the assignment operator (=)" + msgstr "En %0, especifique ASSIGNMENT en lugar de OPERATOR para la declaración INTERFACE que especifica el operador de asignación (=)" + + #: f/bad.def:452 + #, no-c-format + msgid "Cannot specify =initialization-expr at %0 unless `::' appears before list of objects" + msgstr "No se puede especificar =expr-iniciación en %0 a menos que `::' aparezca antes que la lista de los objetos" + + #: f/bad.def:455 + #, no-c-format + msgid "Reference to label at %1 inconsistent with its definition at %0" + msgstr "La referencia a la etiqueta en %1 es inconsistente con su definición en %0" + + #: f/bad.def:458 + #, no-c-format + msgid "Reference to label at %1 inconsistent with earlier reference at %0" + msgstr "La referencia a la etiqueta en %1 es inconsistente con la referencia anterior en %0" + + #: f/bad.def:461 + #, no-c-format + msgid "DO-statement reference to label at %1 follows its definition at %0" + msgstr "La referencia de la declaración DO a la etiqueta en %1 sigue su definición en %0" + + #: f/bad.def:464 + #, no-c-format + msgid "Reference to label at %1 is outside block containing definition at %0" + msgstr "La referencia a la etiqueta en %1 está fuera del bloque que contiene la definición en %0" + + #: f/bad.def:467 + #, no-c-format + msgid "DO-statement references to label at %0 and %2 separated by unterminated block starting at %1" + msgstr "Las referencias de la declaración DO a la etiqueta en %0 y %2 están separadas por un bloque sin terminar que empieza en %1" + + #: f/bad.def:470 + #, no-c-format + msgid "DO-statement reference to label at %0 and label definition at %2 separated by unterminated block starting at %1" + msgstr "La referencia de la declaración DO a la etiqueta en %0 y la definición de la etiqueta en %2 están separadas por un bloque sin terminar que empieza en %1" + + #: f/bad.def:473 + #, no-c-format + msgid "Label definition at %0 invalid on this kind of statement" + msgstr "La definición de etiqueta en %0 es inválida en este tipo de declaración" + + #: f/bad.def:476 + #, no-c-format + msgid "Statement at %0 invalid in this context" + msgstr "La declaración en %0 es inválida en este contexto" + + #: f/bad.def:479 + #, no-c-format + msgid "Statement at %0 invalid in context established by statement at %1" + msgstr "La declaración en %0 es inválida en el contexto establecido por la declaración en %1" + + #: f/bad.def:482 + #, no-c-format + msgid "Statement at %0 must specify construct name specified at %1" + msgstr "La declaración en %0 debe especificar el nombre de la construcción especificada en %1" + + #: f/bad.def:485 + #, no-c-format + msgid "Construct name at %0 superfluous, no construct name specified at %1" + msgstr "El nombre de la construcción en %0 es superfluo, no se especificó un nombre de construcción en %1" + + #: f/bad.def:488 + #, no-c-format + msgid "Construct name at %0 not the same as construct name at %1" + msgstr "El nombre de construcción en %0 no es el mismo que el nombre de construcción en %1" + + #: f/bad.def:491 + #, no-c-format + msgid "Construct name at %0 does not match construct name for any containing DO constructs" + msgstr "El nombre de construcción en %0 no coincide con el nombre de construcción para cualquier construcción DO contenedora" + + #: f/bad.def:494 + #, no-c-format + msgid "Label definition missing at %0 for DO construct specifying label at %1" + msgstr "Falta la definición de etiqueta en %0 para la construcción DO que especifica la etiqueta en %1" + + #: f/bad.def:497 + #, no-c-format + msgid "Statement at %0 follows ELSE block for IF construct at %1" + msgstr "La declaración en %0 sigue al bloque ELSE para la construcción IF en %1" + + #: f/bad.def:500 + #, no-c-format + msgid "No label definition for FORMAT statement at %0" + msgstr "No hay definición de etiqueta para la declaración FORMAT en %0" + + #: f/bad.def:503 + #, no-c-format + msgid "Second occurrence of ELSE WHERE at %0 within WHERE at %1" + msgstr "Segunda ocurrencia de ELSE WHERE en %0 dentro de WHERE en %1" + + #: f/bad.def:506 + #, no-c-format + msgid "END statement at %0 missing `%A' keyword required for internal or module procedure(s) bounded by %1" + msgstr "A la declaración END en %0 le falta la palabra clave `%A' requerida para procedimiento(s) interno(s) o módulo(s) unidos por %1" + + #: f/bad.def:509 + #, no-c-format + msgid "MODULE PROCEDURE statement at %0 disallowed because INTERFACE at %1 specifies no generic name, operator, or assignment" + msgstr "No se permite la declaración MODULE PROCEDURE en %0 porque INTERFACE en %1 no especifica un nombre genérico, operador o asignación" + + #: f/bad.def:512 + #, no-c-format + msgid "BLOCK DATA name at %0 superfluous, no name specified at %1" + msgstr "El nombre de BLOCK DATA en %0 es superfluo, no se especificó un nombre en %1" + + #: f/bad.def:515 + #, no-c-format + msgid "Program name at %0 superfluous, no PROGRAM statement specified at %1" + msgstr "El nombre de programa en %0 es superfluo, no se especificó una declaración PROGRAM en %1" + + #: f/bad.def:518 + #, no-c-format + msgid "Program unit name at %0 not the same as name at %1" + msgstr "El nombre de unidad de programa en %0 no es el mismo que el nombre en %1" + + #: f/bad.def:521 + #, no-c-format + msgid "Type name at %0 not the same as name at %1" + msgstr "El nombre de tipo en %0 no es el mismo que el nombre en %1" + + #: f/bad.def:524 + #, no-c-format + msgid "End of source file before end of block started at %0" + msgstr "Fin del fichero fuente antes de que empezara el bloque en %0" + + #: f/bad.def:527 + #, no-c-format + msgid "Undefined label, first referenced at %0" + msgstr "Etiqueta indefinida, primero referenciada en %0" + + #: f/bad.def:530 + #, no-c-format + msgid "SAVE statement or attribute at %1 cannot be specified along with SAVE statement or attribute at %0" + msgstr "La declaración o atributo SAVE en %1 no se puede espeficicar junto con la declaración o atributo SAVE en %0" + + #: f/bad.def:533 + #, no-c-format + msgid "PUBLIC or PRIVATE statement at %1 cannot be specified along with PUBLIC or PRIVATE statement at %0" + msgstr "La declaración PUBLIC o PRIVATE en %1 no se puede especificar junto con la declaración PUBLIC o PRIVATE en %0" + + #: f/bad.def:536 + #, no-c-format + msgid "RETURN statement at %0 invalid within a main program unit" + msgstr "La declaración RETURN en %0 es inválida dentro de una unidad de programa principal" + + #: f/bad.def:539 + #, no-c-format + msgid "Alternate return specifier at %0 invalid within a main program unit" + msgstr "El especificador de devolución alternante en %0 es inválido dentro de una unidad de programa principal" + + #: f/bad.def:542 + #, no-c-format + msgid "Alternate return specifier at %0 invalid within a function" + msgstr "El especificador de devolución alternante en %0 es inválido dentro de una función" + + #: f/bad.def:545 + #, no-c-format + msgid "Access specifier or PRIVATE statement at %0 invalid for derived-type definition within other than the specification part of a module" + msgstr "El especificador de acceso o la declaración PRIVATE en %0 es inválido para la definición de tipo derivado dentro de otro que la parte de especificación de un módulo" + + #: f/bad.def:548 + #, no-c-format + msgid "Access specifier at %0 must immediately follow derived-type statement at %1 with no intervening statements" + msgstr "El especificador de acceso en %0 debe seguir inmediatamente a la declaración de tipo derivado en %1 sin declaraciones que intervengan" + + #: f/bad.def:551 + #, no-c-format + msgid "No components specified as of %0 for derived-type definition beginning at %1" + msgstr "No se especificaron componentes para %0 para la definición de tipo derivado que comienza en %1" + + #: f/bad.def:554 + #, no-c-format + msgid "No components specified as of %0 for structure definition beginning at %1" + msgstr "No se especificaron componentes para %0 para la la definición de la estructura que comienza en %1" + + #: f/bad.def:557 + #, no-c-format + msgid "Missing structure name for outer structure definition at %0" + msgstr "Falta el nombre de la estructura para la definición de la estructura externa en %0" + + #: f/bad.def:560 + #, no-c-format + msgid "Field names at %0 for outer structure definition -- specify them in a subsequent RECORD statement instead" + msgstr "Nombres de campos en %0 para la definici{on de la estructura exterior -- especifíquelos en su lugar en una declaración RECORD subsecuente" + + #: f/bad.def:563 + #, no-c-format + msgid "Missing field name(s) for structure definition at %0 within structure definition at %1" + msgstr "Falta(n) el(los) nombre(s) de campo(s) para la definición de la estructura en %0 dentro de la definición de la estructura en %1" + + #: f/bad.def:566 + #, no-c-format + msgid "No components specified as of %0 for map beginning at %1" + msgstr "No se especificaron componente en %0 para el mapa que comienza en %1" + + #: f/bad.def:569 + #, no-c-format + msgid "Zero or one maps specified as of %0 for union beginning at %1 -- at least two are required" + msgstr "Se especificaron cero o un mapa en %0 para la unión que comienza en %1 -- se requieren por lo menos dos" + + #: f/bad.def:572 + #, no-c-format + msgid "Missing %A specifier in statement at %0" + msgstr "Falta el especificador %A en la declaración en %0" + + #: f/bad.def:575 + #, no-c-format + msgid "Items in I/O list starting at %0 invalid for namelist-directed I/O" + msgstr "Los elementos en la lista de E/S que comienza en %0 son inválidos para la E/S dirigida por una lista de nombres" + + #: f/bad.def:578 + #, no-c-format + msgid "Conflicting I/O control specifications at %0 and %1" + msgstr "Especificaciones de control de E/S en conflicto en %0 y %1" + + #: f/bad.def:581 + #, no-c-format + msgid "No UNIT= specifier in I/O control list at %0" + msgstr "No hay un especificador UNIT= en la lista de control de E/S en %0" + + #: f/bad.def:584 + #, no-c-format + msgid "Specification at %0 requires ADVANCE=`NO' specification in same I/O control list" + msgstr "La especificación en %0 requiere la especificación ADVANCE=`NO' en la misma lista de control de E/S" + + #: f/bad.def:587 + #, no-c-format + msgid "Specification at %0 requires explicit FMT= specification in same I/O control list" + msgstr "La especificación en %0 requiere la especificación FMT= explícita en la misma lista de control de E/S " + + #: f/bad.def:595 + #, no-c-format + msgid "Second occurrence of CASE DEFAULT at %0 within SELECT CASE at %1" + msgstr "Segunda ocurrencia de CASE DEFAULT en %0 dentro de un SELECT CASE en %1" + + #: f/bad.def:598 + #, no-c-format + msgid "Duplicate or overlapping case values/ranges at %0 and %1" + msgstr "Valores/rangos case duplicados o traslapados en %0 y %1" + + #: f/bad.def:601 + #, no-c-format + msgid "Type and/or kind-type parameter disagreement between CASE value or value within range at %0 and SELECT CASE at %1" + msgstr "Desacuerdo de tipo y/o parámetro de tipo entre el valor CASE o el valor dentro del rango en %0 y SELECT CASE en %1" + + #: f/bad.def:604 + #, no-c-format + msgid "Range specification at %0 invalid for CASE statement within logical-type SELECT CASE statement" + msgstr "Especificación de rango en %0 inválida para la declaración CASE dentro de la declaración SELECT CASE de tipo lógico" + + #: f/bad.def:617 + #, no-c-format + msgid "Fortran 90 feature at %0 unsupported" + msgstr "Característica Fortran 90 en %0 sin soporte" + + #: f/bad.def:630 + #, no-c-format + msgid "Invalid declaration of or reference to symbol `%A' at %0 [initially seen at %1]" + msgstr "Declaración inválida de o referencia al símbolo `%A' en %0 [observado inicialmente en %1]" + + #: f/bad.def:638 + #, no-c-format + msgid "Null element at %0 for array reference at %1" + msgstr "Elemento nullo en %0 para la referencia de matriz en %1" + + #: f/bad.def:641 + #, no-c-format + msgid "Too few elements (%A missing) as of %0 for array reference at %1" + msgstr "Muy pocos elementos (falta %A) para %0 para la referencia de matriz en %1" + + #: f/bad.def:644 + #, no-c-format + msgid "Too many elements as of %0 for array reference at %1" + msgstr "Demasiados elementos para %0 para la referencia de matriz en %1" + + #: f/bad.def:647 + #, no-c-format + msgid "Missing colon as of %0 in substring reference for %1" + msgstr "Faltan dos puntos en %0 en la referencia de subcadena para %1" + + #: f/bad.def:650 + #, no-c-format + msgid "Invalid use at %0 of substring operator on %1" + msgstr "Uso inválido en %0 del operador de subcadenas en %1" + + #: f/bad.def:653 + #, no-c-format + msgid "Substring begin/end point at %0 out of defined range" + msgstr "El punto de inicio/fin de la subcadena en %0 está fuera del rango definido" + + #: f/bad.def:656 + #, no-c-format + msgid "Array element value at %0 out of defined range" + msgstr "Valor del elementro de la matriz en %0 está fuera del rango definido" + + #: f/bad.def:659 + #, no-c-format + msgid "Expression at %0 has incorrect data type or rank for its context" + msgstr "La expresión en %0 tiene el tipo de dato o rango incorrecto para su contexto" + + #: f/bad.def:662 + #, no-c-format + msgid "Division by 0 (zero) at %0 (IEEE not yet supported)" + msgstr "División por 0 (cero) en %0 (IEEE aún no tiene soporte)" + + #: f/bad.def:665 + #, no-c-format + msgid "%A step count known to be 0 (zero) at %0" + msgstr "Se sabe que la cuenta de paso %A es 0 (cero) en %0" + + #: f/bad.def:668 + #, no-c-format + msgid "%A end value plus step count known to overflow at %0" + msgstr "Se sabe que el valor final %A mas la cuenta de paso se desborda en %0" + + #: f/bad.def:671 + #, no-c-format + msgid "%A begin, end, and step-count values known to result in implementation-dependent behavior due to overflow(s) in intermediate calculations at %0" + msgstr "Se sabe que los valores de inicio, fin y cuenta de paso %A resultan en conducta dependiente de la implementación debido a desbordamiento(s) en cálculos intermedios en %0" + + #: f/bad.def:674 + #, no-c-format + msgid "%A begin, end, and step-count values known to result in no iterations at %0" + msgstr "Se sabe que los valores de inicio, fin y cuenta de paso %A resultan en falta de iteraciones en %0" + + #: f/bad.def:677 + #, no-c-format + msgid "Type disagreement between expressions at %0 and %1" + msgstr "Desacuerdo de tipo entre las expresiones en %0 y %1" + + #: f/bad.def:690 + #, no-c-format + msgid "No specification for implied-DO iterator `%A' at %0" + msgstr "No hay especificación para el iterador del DO implícito `%A' en %0" + + #: f/bad.def:693 + #, no-c-format + msgid "Gratuitous parentheses surround implied-DO construct at %0" + msgstr "Paréntesis gratuitos alrededor de la construcción con DO implícito en %0" + + #: f/bad.def:696 + #, no-c-format + msgid "Zero-size specification invalid at %0" + msgstr "Especificación de tamaño cero inválida en %0" + + #: f/bad.def:699 + #, no-c-format + msgid "Zero-size array at %0" + msgstr "Matriz de tamaño cero en %0" + + #: f/bad.def:702 + #, no-c-format + msgid "Target machine does not support complex entity of kind specified at %0" + msgstr "La máquina objetivo no tiene soporte para la entidad compleja del tipo especificado en %0" + + #: f/bad.def:705 + #, no-c-format + msgid "Target machine does not support DOUBLE COMPLEX, specified at %0" + msgstr "La máquina objetivo no tiene soporte para DOUBLE COMPLEX, especificado en %0" + + #: f/bad.def:708 + #, no-c-format + msgid "Attempt to raise constant zero to a power at %0" + msgstr "Se intenta elevar la constante cero a una potencia en %0" + + #: f/bad.def:806 + #, no-c-format + msgid "Reference to generic intrinsic `%A' at %0 could be to form %B or %C" + msgstr "Referencia al intrínseco genérico `%A' en %0 puede ser para formar %B o %C" + + #: f/bad.def:809 + #, no-c-format + msgid "Ambiguous use of intrinsic `%A' at %0 [info -f g77 M CMPAMBIG]" + msgstr "Uso ambiguo del intrínseco `%A' en %0 [info -f g77 M CMPAMBIG]" + + # El que escribió esto en inglés nunca pensó que se traduciría algún día. cfuga + #: f/bad.def:812 + #, no-c-format + msgid "Intrinsic `%A' referenced %Bly at %0, %Cly at %1 [info -f g77 M EXPIMP]" + msgstr "Intrínseco `%A' referenciado %Bmente en %0, %Cmente en %1 [info -f g77 M EXPIMP]" + + #: f/bad.def:815 + #, no-c-format + msgid "Same name `%A' used for %B at %0 and %C at %1 [info -f g77 M INTGLOB]" + msgstr "Se usa el mismo nombre `%A' para %B en %0 y para %C en %1 [info -f g77 M INTGLOB]" + + #: f/bad.def:818 + #, no-c-format + msgid "Explicit type declaration for intrinsic `%A' disagrees with invocation at %0" + msgstr "La declaración de tipo explícita para el intrínsico `%A' no coincide con la invocación en %0" + + #: f/bad.def:821 + #, no-c-format + msgid "Unable to open INCLUDE file `%A' at %0" + msgstr "No se puede abrir el fichero INCLUDE `%A' en %0" + + #: f/bad.def:839 + #, no-c-format + msgid "Null argument at %0 for statement function reference at %1" + msgstr "Argumento nulo en %0 para la referencia de la declaración de función en %1" + + #: f/bad.def:842 + #, no-c-format + msgid "Null argument at %0 for procedure invocation at %1" + msgstr "Argumento nulo en %0 para la invocación del procedimiento en %1" + + #: f/bad.def:845 + #, no-c-format + msgid "%A too few arguments (starting with dummy argument `%B') as of %0 for statement function reference at %1" + msgstr "%A con muy pocos argumentos (comenzando con el argumento de imitación `%B') para %0 para la referencia de la declaración de función en %1" + + #: f/bad.def:848 + #, no-c-format + msgid "%A too many arguments as of %0 for statement function reference at %1" + msgstr "%A demasiados argumentos para %0 para la referencia de la declaración de función en %1" + + #: f/bad.def:851 + #, no-c-format + msgid "Array supplied at %1 for dummy argument `%A' in statement function reference at %0" + msgstr "Se proporcionó una matriz en %1 como argumento de imitación `%A' en la referencia de la declaración de función en %0" + + #: f/bad.def:854 + #, no-c-format + msgid "Unsupported FORMAT specifier at %0" + msgstr "Especificador de FORMAT sin soporte en %0" + + #: f/bad.def:857 + #, no-c-format + msgid "Variable-expression FORMAT specifier at %0 -- unsupported" + msgstr "Especificador de FORMAT de expresión variable en %0 -- sin soporte" + + #: f/bad.def:880 + #, no-c-format + msgid "Unsupported VXT statement at %0" + msgstr "Declaración VXT sin soporte en %0" + + #: f/bad.def:883 + #, no-c-format + msgid "Attempt to specify second initial value for `%A' at %0" + msgstr "Se intentó especificar un segundo valor inicial para `%A' en %0" + + #: f/bad.def:886 + #, no-c-format + msgid "Too few initial values in list of initializers for `%A' at %0" + msgstr "Muy pocos valores iniciales en la lista de iniciadores para `%A' en %0" + + #: f/bad.def:889 + #, no-c-format + msgid "Too many initial values in list of initializers starting at %0" + msgstr "Demasiados valores iniciales en la lista de iniciadores que comienza en %0" + + #: f/bad.def:892 + #, no-c-format + msgid "Array or substring specification for `%A' out of range in statement at %0" + msgstr "La especificación de matriz o subcadena para `%A' está fuera de rango en la declaración en %0" + + #: f/bad.def:895 + #, no-c-format + msgid "Array subscript #%B out of range for initialization of `%A' in statement at %0" + msgstr "El subíndice de matriz #%B está fuera de rango para la iniciación de `%A' en la declaración en %0" + + #: f/bad.def:898 + #, no-c-format + msgid "Implied do-loop step count of 0 (zero) for iteration variable `%A' in statement at %0" + msgstr "Cuenta de paso del ciclo do implícito de 0 (cero) para la variable de iteración `%A' en la declaración en %0" + + #: f/bad.def:901 + #, no-c-format + msgid "Implied do-loop iteration count of 0 (zero) for iteration variable `%A' in statement at %0" + msgstr "Cuenta de iteración del ciclo do implícito de 0 (cero) para la variable de iteración `%A' en la declaración en %0" + + #: f/bad.def:904 + #, no-c-format + msgid "Not an integer constant expression in implied do-loop in statement at %0" + msgstr "Una expresión constante que no es entero en el ciclo do implícito en la declaración en %0" + + #: f/bad.def:907 + #, no-c-format + msgid "Attempt to specify second initial value for element of `%A' at %0" + msgstr "Se intentó especificar un segundo valor inicial para un elemento de `%A' en %0" + + #: f/bad.def:910 + #, no-c-format + msgid "Attempt to EQUIVALENCE common areas `%A' and `%B' at %0" + msgstr "Se intentó hacer EQUIVALENCE en las áreas comunes `%A' y `%B' en %0" + + #: f/bad.def:913 + #, no-c-format + msgid "Can't place `%A' as directed by EQUIVALENCE due to alignment restrictions" + msgstr "No se puede colocar `%A' como lo indica EQUIVALENCE debido a restricciones de alineación" + + #: f/bad.def:916 + #, no-c-format + msgid "Mismatched EQUIVALENCE requirements for placement of `%A' at both %C and %D bytes offset from `%B'" + msgstr "No coinciden los requerimientos de EQUIVALENCE para la ubicación de `%A' en el desplazamiento de %C y %D bytes de `%B'" + + #: f/bad.def:919 + #, no-c-format + msgid "Array or substring specification for `%A' out of range in EQUIVALENCE statement" + msgstr "Especificación de matriz o subcadena para `%A' fuera de rango en la declaración EQUIVALENCE" + + #: f/bad.def:922 + #, no-c-format + msgid "Substring of non-CHARACTER entity `%A' in EQUIVALENCE statement" + msgstr "Subcadena de la entidad `%A' que no es CHARACTER en la declaración EQUIVALENCE" + + #: f/bad.def:925 + #, no-c-format + msgid "Array reference to scalar variable `%A' in EQUIVALENCE statement" + msgstr "Matriz de referencia a la variable escalar `%A' en la declaración EQUIVALENCE" + + #: f/bad.def:928 + #, no-c-format + msgid "Array subscript #%B out of range for EQUIVALENCE of `%A'" + msgstr "Subíndice de matriz #%B fuera de rango para EQUIVALENCE de `%A'" + + #: f/bad.def:936 + #, no-c-format + msgid "Attempt to extend COMMON area beyond its starting point via EQUIVALENCE of `%A'" + msgstr "Se intentó extender el área COMMON más allá de su punto de inicio a través de EQUIVALENCE de `%A'" + + #: f/bad.def:939 + #, no-c-format + msgid "Too few elements in reference to array `%A' in EQUIVALENCE statement" + msgstr "Muy pocos elementos en la referencia a la matriz `%A' en la declaración EQUIVALENCE" + + #: f/bad.def:942 + #, no-c-format + msgid "Too many elements in reference to array `%A' in EQUIVALENCE statement" + msgstr "Demasiados elementos en la referencia a la matriz `%A' en la declaración EQUIVALENCE" + + #: f/bad.def:945 + #, no-c-format + msgid "Mixed CHARACTER and non-CHARACTER types via COMMON/EQUIVALENCE -- for example, `%A' and `%B'" + msgstr "Tipos CHARACTER y no CHARACTER mezclados a través de COMMON/EQUIVALENCE -- por ejemplo, `%A' y `%B'" + + #: f/bad.def:958 + #, no-c-format + msgid "Return value `%A' for FUNCTION at %0 not referenced in subprogram" + msgstr "El valor de devolución `%A' para la FUNCTION en %0 no está referenciado en el subprograma" + + #: f/bad.def:976 + #, no-c-format + msgid "Common block `%A' is SAVEd, explicitly or implicitly, at %0 but not SAVEd at %1" + msgstr "El bloque común `%A' está SAVE(guardado), explícita o implícitamente, en %0 pero no está SAVE en %1" + + #: f/bad.def:979 + #, no-c-format + msgid "Common block `%A' is %B %D in length at %0 but %C %E at %1" + msgstr "El bloque común `%A' es %B %D en longitud en %0 pero %C %E en %1" + + #: f/bad.def:987 + #, no-c-format + msgid "Blank common initialized at %0" + msgstr "Común en blanco iniciado en %0" + + #: f/bad.def:990 + #, no-c-format + msgid "Intrinsic `%A' is passed as actual argument at %0 but not explicitly declared INTRINSIC" + msgstr "Se pasa el intrínseco `%A' como un argumento actual en %0 pero no está declarado explícitamente INTRINSIC" + + #: f/bad.def:993 + #, no-c-format + msgid "External procedure `%A' is passed as actual argument at %0 but not explicitly declared EXTERNAL" + msgstr "Se pasa el procedimiento externo como un argumento actual en %0 pero no está declarado explícitamente EXTERNAL" + + #: f/bad.def:996 + #, no-c-format + msgid "Character `%A' (for example) is upper-case in symbol name at %0" + msgstr "El carácter `%A' (por ejemplo) está en mayúsculas en el nombre de símbolo en %0" + + #: f/bad.def:999 + #, no-c-format + msgid "Character `%A' (for example) is lower-case in symbol name at %0" + msgstr "El carácter `%A' (por ejemplo) está en minúsculas en el nombre de símbolo en %0" + + #: f/bad.def:1002 + #, no-c-format + msgid "Character `%A' not followed at some point by lower-case character in symbol name at %0" + msgstr "El carácter `%A' no está seguido en algún punto por un carácter en minúsculas en el nombre de símbolo en %0" + + #: f/bad.def:1005 + #, no-c-format + msgid "Initial character `%A' is lower-case in symbol name at %0" + msgstr "El carácter inicial `%A' está en minúsculas en el nombre del símbolo en %0" + + #: f/bad.def:1013 + #, no-c-format + msgid "NAMELIST not adequately supported by run-time library for source files with case preserved" + msgstr "NAMELIST no tiene un soporte adecuado por la biblioteca de tiempo de ejecución para ficheros fuente con mayúsculas/minúsculas conservados" + + #: f/bad.def:1016 + #, no-c-format + msgid "Nested %% construct (%%VAL, %%REF, or %%DESCR) at %0" + msgstr "Construcción %% anidada (%%VAL, %%REF, o %%DESCR) en %0" + + #: f/bad.def:1034 + #, no-c-format + msgid "Statement at %0 invalid in BLOCK DATA program unit at %1" + msgstr "Declaración en %0 inválida en la unidad de programa BLOCK DATA en %1" + + #: f/bad.def:1037 + #, no-c-format + msgid "Truncating characters on right side of character constant at %0" + msgstr "Truncando caracteres en el lado derecho de la constante de carácter en %0" + + #: f/bad.def:1040 + #, no-c-format + msgid "Truncating characters on right side of hollerith constant at %0" + msgstr "Truncando caracteres en el lado derecho de la constante hollerith en %0" + + #: f/bad.def:1043 + #, no-c-format + msgid "Truncating non-zero data on left side of numeric constant at %0" + msgstr "Truncando datos que no son cero del lado izquierdo de la constante numérica en %0" + + #: f/bad.def:1046 + #, no-c-format + msgid "Truncating non-zero data on left side of typeless constant at %0" + msgstr "Truncando datos que no son cero del lado izquierdo de la constante sin tipo en %0" + + #: f/bad.def:1049 + #, no-c-format + msgid "Typeless constant at %0 too large" + msgstr "Constante sin tipo en %0 demasiado grande" + + #: f/bad.def:1052 + #, no-c-format + msgid "First-column ampersand continuation at %0" + msgstr "Continuación con signo & en la primera columna en %0" + + #: f/bad.def:1055 f/bad.def:1058 + #, no-c-format + msgid "Global name `%A' defined at %0 already defined at %1 [info -f g77 M GLOBALS]" + msgstr "El nombre global `%A' definido en %0 ya se había definido en %1 [info -f g77 M GLOBALS]" + + #: f/bad.def:1061 f/bad.def:1064 + #, no-c-format + msgid "Global name `%A' is %B at %0 but is %C at %1 [info -f g77 M GLOBALS]" + msgstr "El nombre global `%A' es %B en %0 pero es %C en %1 [info -f g77 M GLOBALS]" + + #: f/bad.def:1067 f/bad.def:1070 + #, no-c-format + msgid "Global name `%A' at %0 has different type at %1 [info -f g77 M GLOBALS]" + msgstr "El nombre global `%A' en %0 tiene tipo diferente en %1 [info -f g77 M GLOBALS]" + + # En las dos traducciones siguientes obviamente está adecuado al inglés, + # ya que corresponden a `too few' y `too many'. Tenemos en español `muy pocos', + # pero es una sola palabra para `demasiados'. Comentar a los autores originales. + # cfuga + #: f/bad.def:1073 + #, no-c-format + msgid "Too %B arguments passed to `%A' at %0 versus definition at %1 [info -f g77 M GLOBALS]" + msgstr "Se pasaron muy %B argumentos a `%A' en %0 contra la definición en %1 [info -f g77 M GLOBALS]" + + #: f/bad.def:1076 + #, no-c-format + msgid "Too %B arguments for `%A' at %0 versus invocation at %1 [info -f g77 M GLOBALS]" + msgstr "Muy %B argumentos para `%A' en %0 contra la invocación en %1 [info -f g77 M GLOBALS]" + + #: f/bad.def:1079 f/bad.def:1082 + #, no-c-format + msgid "Argument #%B of `%A' is %C at %0 but is %D at %1 [info -f g77 M GLOBALS]" + msgstr "El argumento #%B de `%A' es %C en %0 pero es %D en %1 [info -f g77 M GLOBALS]" + + #: f/bad.def:1085 + #, no-c-format + msgid "Array `%A' at %0 is too large to handle" + msgstr "La matriz `%A' en %0 es demasiado grande para manejarse" + + #: f/bad.def:1088 + #, no-c-format + msgid "Statement function `%A' defined at %0 is not used" + msgstr "La función de declaración `%A' está definida en %0 pero no se usa" + + #: f/bad.def:1091 + #, no-c-format + msgid "Intrinsic `%A', invoked at %0, known to be non-Y2K-compliant [info -f g77 M Y2KBAD]" + msgstr "Se sabe que el intrínseco `%A', invocado en %0, no cumple con Y2K [info -f g77 M Y2KBAD]" + + #: f/bad.def:1094 + #, no-c-format + msgid "Internal compiler error -- cannot perform operation" + msgstr "Error interno del compilador -- no se puede realizar la operación" + + #. Kind messages are used in diagnostic location reports of the + #. form ": In function `foo': ". + #: f/info-k.def:32 + msgid "In unknown kind" + msgstr "En el tipo desconocido" + + #: f/info-k.def:33 + msgid "In entity" + msgstr "En la entidad" + + #: f/info-k.def:34 + msgid "In function" + msgstr "En la función" + + #: f/info-k.def:35 + msgid "In subroutine" + msgstr "En la subrutina" + + #: f/info-k.def:36 + msgid "In program" + msgstr "En el programa" + + #: f/info-k.def:37 + msgid "In block-data unit" + msgstr "En la unidad de bloque de datos" + + #: f/info-k.def:38 + msgid "In common block" + msgstr "En el bloque común" + + #: f/info-k.def:39 + msgid "In construct" + msgstr "En construct" + + #: f/info-k.def:40 + msgid "In namelist" + msgstr "En la lista de nombres" + + #: f/info-k.def:41 + msgid "In anything" + msgstr "En cualquier" + + #: java/check-init.c:915 + #, c-format + msgid "internal error in check-init: tree code not implemented: %s" + msgstr "error interno en check-init: árbol de código no implementado: %s" + + #: java/check-init.c:988 + #, c-format + msgid "final field '%s' may not have been initialized" + msgstr "el campo final '%s' puede no haber sido iniciado" + + #: java/class.c:568 java/class.c:593 + msgid "internal error - too many interface type" + msgstr "error interno - demasiados tipos de interfaz" + + #: java/class.c:744 + msgid "bad method signature" + msgstr "firma de método errónea" + + #: java/class.c:793 + msgid "misplaced ConstantValue attribute (not in any field)" + msgstr "atributo ConstantValue mal colocado (no está en ningún campo)" + + #: java/class.c:795 + #, c-format + msgid "duplicate ConstantValue attribute for field '%s'" + msgstr "atributo ConstantValue duplicado para el campo '%s'" + + #: java/class.c:806 + #, c-format + msgid "ConstantValue attribute of field '%s' has wrong type" + msgstr "el atributo ConstantValue del campo '%s' tiene un tipo erróneo" + + #: java/class.c:1170 + #, c-format + msgid "field '%s' not found in class" + msgstr "no se encuentra el campo '%s' en la clase" + + #: java/class.c:1432 + msgid "abstract method in non-abstract class" + msgstr "método abstracto en la clase que no es abstracta" + + #: java/class.c:2133 + #, c-format + msgid "non-static method '%s' overrides static method" + msgstr "el método '%s' que no es estático anula al método estático" + + #: java/decl.c:1515 + #, c-format + msgid "In %s: overlapped variable and exception ranges at %d" + msgstr "En %s: variable sobreescrita y rangos de excepción en %d" + + #: java/decl.c:1603 + msgid "bad type in parameter debug info" + msgstr "tipo erróneo en la información de parámetros de depuración" + + #: java/decl.c:1613 + #, c-format + msgid "bad PC range for debug info for local `%s'" + msgstr "rango de PC erróneo para la información de depuración para `%s' local" + + #: java/expr.c:549 + msgid "stack underflow - dup* operation" + msgstr "desbordamiento de la pila - operación dup*" + + #: java/expr.c:1541 + #, c-format + msgid "reference `%s' is ambiguous: appears in interface `%s' and interface `%s'" + msgstr "la referencia `%s' es ambigua: aparece en la interfaz `%s' y en la interfaz `%s'" + + #: java/expr.c:1570 + #, c-format + msgid "field `%s' not found" + msgstr "no se encuentra el campo `%s'" + + #: java/expr.c:1725 + msgid "ret instruction not implemented" + msgstr "no se ha implementado aún la instrucción ret" + + #: java/expr.c:1862 + #, c-format + msgid "method '%s' not found in class" + msgstr "no se encuentra el método '%s' en la clase" + + #: java/expr.c:2066 + #, c-format + msgid "failed to find class '%s'" + msgstr "no se encontró la clase '%s'" + + #: java/expr.c:2078 + #, c-format + msgid "class '%s' has no method named '%s' matching signature '%s'" + msgstr "la clase '%s' no tiene un método llamado '%s' que coincida con la firma '%s'" + + #: java/expr.c:2088 + msgid "invokestatic on non static method" + msgstr "invokestatic en un método no estático" + + #: java/expr.c:2093 + msgid "invokestatic on abstract method" + msgstr "invokestatic en un método abstracto" + + #: java/expr.c:2101 + msgid "invoke[non-static] on static method" + msgstr "invoke[no-estático] en un método estático" + + #: java/expr.c:2386 + #, c-format + msgid "missing field '%s' in '%s'" + msgstr "falta el campo '%s' en '%s'" + + #: java/expr.c:2392 + #, c-format + msgid "mismatching signature for field '%s' in '%s'" + msgstr "no coincide la firma para el campo '%s' en '%s'" + + #: java/expr.c:2415 + #, c-format + msgid "assignment to final field `%s' not in field's class" + msgstr "la asignación para el campo final `%s' no está en el campo de la clase" + + #: java/expr.c:2420 + #, c-format + msgid "assignment to final static field `%s' not in class initializer" + msgstr "la asignación para el campo final estático `%s' no está en el iniciador de la clase" + + #: java/expr.c:2427 + #, c-format + msgid "assignment to final field `%s' not in constructor" + msgstr "la asignación al campo final `%s' no está en el constructor" + + #: java/expr.c:2665 + #, c-format + msgid "can't expand %s" + msgstr "no se puede expandir %s" + + #: java/expr.c:2841 + msgid "invalid PC in line number table" + msgstr "PC inválido en la tabla de números de línea" + + #. We've just reached the end of a region of dead code. + #: java/expr.c:2886 + #, c-format + msgid "unreachable bytecode from %d to before %d" + msgstr "bytecode inalcanzable desde %d hasta antes de %d" + + #. We've just reached the end of a region of dead code. + #: java/expr.c:2923 + #, c-format + msgid "unreachable bytecode from %d to the end of the method" + msgstr "bytecode inalcanzable desde %d hasta el final del método" + + #. duplicate code from LOAD macro + #: java/expr.c:3237 + msgid "unrecogized wide sub-instruction" + msgstr "no se reconoce la sub-instrucción ancha" + + #: java/jcf-io.c:410 + #, c-format + msgid "source file for class `%s' is newer than its matching class file. Source file `%s' used instead" + msgstr "el fichero fuente para la clase `%s' es más nuevo que su fichero de clase coincidente. Se usa entonces el fichero fuente `%s'" + + #: java/jcf-parse.c:376 + msgid "bad string constant" + msgstr "constante de cadena errónea" + + #: java/jcf-parse.c:394 + #, c-format + msgid "bad value constant type %d, index %d" + msgstr "valor erróneo del tipo constante %d, índice %d" + + #: java/jcf-parse.c:566 + #, c-format + msgid "can't reopen %s" + msgstr "no se puede reabrir %s" + + #: java/jcf-parse.c:571 + #, c-format + msgid "can't close %s" + msgstr "no se puede cerrar %s" + + #: java/jcf-parse.c:653 + #, c-format + msgid "cannot find file for class %s" + msgstr "no se puede encontrar el fichero para la clase %s" + + #: java/jcf-parse.c:665 + msgid "not a valid Java .class file" + msgstr "no es un fichero .class de Java válido" + + #: java/jcf-parse.c:668 + msgid "error while parsing constant pool" + msgstr "error mientras se analizaba el conjunto de constantes" + + #: java/jcf-parse.c:671 + #, c-format + msgid "error in constant pool entry #%d\n" + msgstr "error en la entrada de #%d del conjunto de constantes\n" + + #. FIXME - where was first time + #: java/jcf-parse.c:683 + #, c-format + msgid "reading class %s for the second time from %s" + msgstr "leyendo la clase %s por segunda vez desde %s" + + #: java/jcf-parse.c:701 + msgid "error while parsing fields" + msgstr "error mientras se analizaban los campos" + + #: java/jcf-parse.c:704 + msgid "error while parsing methods" + msgstr "error mientras se analizaban los métodos" + + #: java/jcf-parse.c:707 + msgid "error while parsing final attributes" + msgstr "error mientras se analizaban los atributos finales" + + #: java/jcf-parse.c:721 + #, c-format + msgid "the `java.lang.Object' that was found in `%s' didn't have the special zero-length `gnu.gcj.gcj-compiled' attribute. This generally means that your classpath is incorrectly set. Use `info gcj \"Input Options\"' to see the info page describing how to set the classpath" + msgstr "el `java.lang.Object' que se encontró en `%s' no tiene el atributo especial de longitud cero `gnu.gcj.gcj-compiled'. Esto significa generalmente que su ruta de clases está establecida incorrectamente. Use `info gcj \"Input Options\"' para ver la página de info que describe cómo establecer la ruta de clases" + + #: java/jcf-parse.c:811 + msgid "missing Code attribute" + msgstr "falta el atributo Code" + + #: java/jcf-parse.c:1050 + msgid "source file seen twice on command line and will be compiled only once" + msgstr "el fichero fuente se vio dos veces en la línea de comando y se compilará solo una vez" + + #: java/jcf-parse.c:1066 + msgid "no input file specified" + msgstr "no se especificaron ficheros de entrada" + + #: java/jcf-parse.c:1095 + #, c-format + msgid "can't close input file %s" + msgstr "no se puede cerrar el fichero de entrada %s" + + #: java/jcf-parse.c:1132 + #, c-format + msgid "bad zip/jar file %s" + msgstr "fichero zip/jar %s erróneo" + + #: java/jcf-write.c:2630 + #, c-format + msgid "internal error in generate_bytecode_insn - tree code not implemented: %s" + msgstr "error interno en generate_bytecode_insn - no se ha implementado el árbol de código: %s" + + #: java/jcf-write.c:2937 + msgid "field initializer type mismatch" + msgstr "no coincide el tipo del iniciador del campo" + + #: java/jcf-write.c:3346 + #, c-format + msgid "can't create directory %s" + msgstr "no se puede crear el directorio %s" + + #: java/jv-scan.c:183 + msgid "only one of `--print-main', `--list-class', and `--complexity' allowed" + msgstr "sólo se permite uno de `--print-main', `--list-class' y `--complexity'" + + #: java/jv-scan.c:186 + #, c-format + msgid "can't open output file `%s'" + msgstr "no se puede abrir el fichero de salida `%s'" + + #: java/jv-scan.c:220 + #, c-format + msgid "file not found `%s'" + msgstr "no se puede encontrar el fichero `%s'" + + #: java/jvspec.c:427 + msgid "can't specify `-D' without `--main'\n" + msgstr "no se puede especificar `-D' sin `--main'\n" + + #: java/jvspec.c:430 + #, c-format + msgid "`%s' is not a valid class name" + msgstr "`%s' no es un nombre de clase válido" + + #: java/jvspec.c:436 + msgid "-R requires -o" + msgstr "-R requiere -o" + + #: java/jvspec.c:443 + msgid "warning: already-compiled .class files ignored with -C" + msgstr "aviso: se ignoraron los ficheros .class que ya fueron compilados con -C" + + #: java/jvspec.c:450 + msgid "cannot specify both -C and -o" + msgstr "no se pueden especificar -C y -o al mismo tiempo" + + #: java/jvspec.c:462 + msgid "cannot create temporary file" + msgstr "no se puede crear el fichero temporal" + + #: java/jvspec.c:490 + msgid "using both @FILE with multiple files not implemented" + msgstr "no está implementado usar ambos @FILE con ficheros múltiples" + + #: java/jvspec.c:548 + msgid "cannot specify `main' class when not linking" + msgstr "no se puede especificar la clase `main' cuando no se está enlazando" + + #: java/lang.c:453 + msgid "can't do dependency tracking with input from stdin" + msgstr "no se puede hacer la revisión de dependencias con entrada desde entrada estándard" + + #: java/lang.c:469 + msgid "couldn't determine target name for dependency tracking" + msgstr "no se puede determinar el nombre del objetivo para la revisión de dependencias" + + #: java/lex.c:308 + #, c-format + msgid "" + "unknown encoding: `%s'\n" + "This might mean that your locale's encoding is not supported\n" + "by your system's iconv(3) implementation. If you aren't trying\n" + "to use a particular encoding for your input file, try the\n" + "`--encoding=UTF-8' option" + msgstr "" + "codificación desconocida: `%s'\n" + "Esto puede significar que la codificación de su localización\n" + "no tiene soporte en la implementación iconv(3) de su sistema.\n" + "Si no está intentando usar una codificación particular para su\n" + "fichero de entrada, utilice la opción `--encoding=UTF-8'" + + #: java/mangle.c:85 + #, c-format + msgid "can't mangle %s" + msgstr "no se puede deshacer %s" + + #: java/mangle_name.c:145 java/mangle_name.c:217 + msgid "internal error - invalid Utf8 name" + msgstr "error interno - nombre Utf8 inválido" + + #: /usr/share/bison.simple:650 + msgid "parse error; also virtual memory exceeded" + msgstr "error de decodificación; también se excedió la memoria" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:747 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:785 + msgid "Missing name" + msgstr "Falta el nombre" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:749 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:787 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:812 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:996 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1343 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1554 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1556 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1785 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1811 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1822 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1833 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1845 + msgid "';' expected" + msgstr "se esperaba ';'" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:810 + msgid "'*' expected" + msgstr "se esperaba '*'" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:824 + msgid "Class or interface declaration expected" + msgstr "se esperaba una declaración de clase o interfaz" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:859 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:861 + msgid "Missing class name" + msgstr "Falta el nombre de la clase" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:864 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:868 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:876 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1041 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1289 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1291 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1620 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1856 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1888 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1940 + msgid "'{' expected" + msgstr "Se esperaba '{'" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:878 + msgid "Missing super class name" + msgstr "No se encuentra el nombre de la super clase" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:888 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:904 + msgid "Missing interface name" + msgstr "No se encuentra el nombre de la interfaz" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:975 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1308 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1369 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1578 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1800 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1809 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1820 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1831 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1843 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1860 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1862 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1933 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2104 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2166 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2318 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2330 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2337 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2344 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2355 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2357 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2395 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2397 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2399 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2420 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2422 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2424 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2440 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2442 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2463 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2465 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2467 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2495 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2497 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2499 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2501 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2519 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2521 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2532 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2543 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2554 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2565 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2576 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2589 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2593 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2595 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2608 + msgid "Missing term" + msgstr "Falta el término" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:990 + msgid "Missing variable initializer" + msgstr "Falta la variable de inicio" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1007 + msgid "Invalid declaration" + msgstr "Declaración inválida" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1013 + msgid "Can't specify array dimension in a declaration" + msgstr "No se puede especificar la dimensión de una matriz en una declaración" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1015 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1091 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2141 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2163 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2167 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2202 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2279 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2289 + msgid "']' expected" + msgstr "Se esperaba ']'" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1019 + msgid "Unbalanced ']'" + msgstr "']' desbalanceado" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1055 + msgid "Invalid method declaration, method name required" + msgstr "Declaración de método inválida, se requiere un nombre de método" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1061 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1063 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2024 + msgid "Identifier expected" + msgstr "Se esperaba un identificador" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1066 + msgid "Invalid method declaration, return type required" + msgstr "Declaración de método inválida, se requiere un tipo de devolución" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1089 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1534 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1541 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1550 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1552 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1580 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1688 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1969 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2022 + msgid "')' expected" + msgstr "Se esperaba ')'" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1105 + msgid "Missing formal parameter term" + msgstr "Falta el término de parámetro formal" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1120 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1125 + msgid "Missing identifier" + msgstr "Falta el identificador" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1145 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1154 + msgid "Missing class type term" + msgstr "Falta el término de tipo de clase" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1306 + msgid "Invalid interface type" + msgstr "Tipo de interfaz inválido" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1498 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1667 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1669 + msgid "':' expected" + msgstr "Se esperaba ':'" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1520 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1525 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1530 + msgid "Invalid expression statement" + msgstr "Declaración de expresión inválida" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1548 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1576 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1616 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1684 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1752 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1858 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1926 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2016 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2018 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2026 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2262 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2264 + msgid "'(' expected" + msgstr "Se esperaba '('" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1618 + msgid "Missing term or ')'" + msgstr "Falta término o ')'" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1665 + msgid "Missing or invalid constant expression" + msgstr "Expresión constante faltante o inválida" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1686 + msgid "Missing term and ')' expected" + msgstr "Faltan término y ')' esperados" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1725 + msgid "Invalid control expression" + msgstr "Expresión de control inválida" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1727 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1729 + msgid "Invalid update expression" + msgstr "Expresión de actualización inválida" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1754 + msgid "Invalid init statement" + msgstr "Declaración de inicio inválida" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1929 + msgid "Missing term or ')' expected" + msgstr "Faltan término o ')' esperados" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1971 + msgid "'class' or 'this' expected" + msgstr "Se esperaba 'class' o 'this'" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1973 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1975 + msgid "'class' expected" + msgstr "Se esperaba 'class'" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2020 + msgid "')' or term expected" + msgstr "Se esperaba ')' o término" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2139 + msgid "'[' expected" + msgstr "Se esperaba '['" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2217 + msgid "Field expected" + msgstr "Se esperaba un campo" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2274 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2284 + msgid "Missing term and ']' expected" + msgstr "Faltan término y ']' esperados" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2388 + msgid "']' expected, invalid type expression" + msgstr "Se esperaba ']', expresión de tipo inválida" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2391 + msgid "Invalid type expression" + msgstr "Expresión de tipo inválida" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2503 + msgid "Invalid reference type" + msgstr "Tipo de referencia inválido" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2981 + msgid "Constructor invocation must be first thing in a constructor" + msgstr "La invocación del constructor debe ser el primer elemento en un constructor" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2983 + msgid "Only constructors can invoke constructors" + msgstr "Solamente los constructores pueden invocar constructores" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2992 + #, c-format + msgid ": `%s' JDK1.1(TM) feature" + msgstr ": `%s' es una característica de JDK1.1(MR)" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:3052 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:3054 + #, c-format + msgid "" + "%s.\n" + "%s" + msgstr "" + "%s.\n" + "%s" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:6833 + #, c-format + msgid "malformed .zip archive in CLASSPATH: %s" + msgstr "archivo .zip malformado en CLASSPATH: %s" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:6904 + #, c-format + msgid "Can't find default package `%s'. Check the CLASSPATH environment variable and the access to the archives" + msgstr "No se puede encontrar el paquete por omisión `%s'. Revise la variable de ambiente CLASSPATH y el acceso a los archivos" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:12228 + #, c-format + msgid "missing static field `%s'" + msgstr "falta el campo static `%s'" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:12233 + #, c-format + msgid "not a static field `%s'" + msgstr "'%s' no es un campo static" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:12276 + #, c-format + msgid "No case for %s" + msgstr "No hay case para %s" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:13122 + #, c-format + msgid "unregistered operator %s" + msgstr "operador %s sin registrar" + + #: java/typeck.c:178 + msgid "internal error - use of undefined type" + msgstr "error interno - uso de tipo indefinido" + + #: java/typeck.c:566 + msgid "junk at end of signature string" + msgstr "basura al final de la cadena de firma" + + #: java/verify.c:480 + msgid "bad pc in exception_table" + msgstr "pc erróneo en exception_table" + + #: java/verify.c:1392 + #, c-format + msgid "unknown opcode %d@pc=%d during verification" + msgstr "opcode desconocido %d@pc=%d durante la verificación" + + #: java/verify.c:1462 java/verify.c:1475 java/verify.c:1479 + #, c-format + msgid "verification error at PC=%d" + msgstr "error de verificación en PC=%d" + + #: java/lang-options.h:32 + msgid "Disable automatic array bounds checking" + msgstr "Desactivar la revisión automática de límites de matrices" + + #: java/lang-options.h:34 + msgid "Disable assignability checks for stores into object arrays" + msgstr "Desactivar revisiones de asignabilidad para almacenamientos en matrices de objetos" + + #: java/lang-options.h:36 + msgid "Assume native functions are implemented using JNI" + msgstr "Asumir que las funciones nativas se implementan usando JNI" + + #: java/lang-options.h:38 + msgid "Replace system path" + msgstr "Reemplazar la ruta del sistema" + + #: java/lang-options.h:40 + msgid "Set class path" + msgstr "Establecer la ruta de clases" + + #: java/lang-options.h:42 + msgid "Set class path (deprecated: use --classpath instead)" + msgstr "Establecer la ruta de clases (deprecado: utilice en su lugar --classpath)" + + #: java/lang-options.h:44 + msgid "Choose class whose main method should be used" + msgstr "Escoger la clase cuyo método main debería ser usado" + + #: java/lang-options.h:46 + msgid "Choose input encoding (default comes from locale)" + msgstr "Escoger la codificación de entrada (por omisión viene del local)" + + #: java/lang-options.h:48 + msgid "Add directory to class path" + msgstr "Agregar el directorio a la ruta de clases" + + #: java/lang-options.h:50 + msgid "Directory where class files should be written" + msgstr "Directorio donde se escribirán los ficheros de clase" + + #: java/lang-options.h:52 + msgid "Warn if modifiers are specified when not necessary" + msgstr "Avisar si se especifican modificadores cuando no son necesarios" + + #: java/lang-options.h:54 + msgid "Warn if deprecated empty statements are found" + msgstr "Avisar si se encuentran declaraciones vacías deprecadas" + + #: java/lang-options.h:56 + msgid "Warn if .class files are out of date" + msgstr "Avisar si los ficheros .class están desactualizados" + + #: java/lang-options.h:58 + msgid "Always check for non gcj generated classes archives" + msgstr "Revisar siempre por archivos de clases no generados por gcj" + + #: java/lang-options.h:60 + msgid "Never optimize static class initialization code" + msgstr "Nunca optimizar el código de iniciación de las clases static" + + #: java/lang-options.h:62 + msgid "Use offset tables for virtual method calls" + msgstr "Utilizar tablas de desplazamiento para llamadas a métodos virtuales" + + #: objc/objc-act.c:606 + msgid "no class name specified as argument to -fconstant-string-class" + msgstr "no se especificó un nombre de clase como argumento para -fconstant-string-class" + + #: objc/objc-act.c:757 + #, c-format + msgid "object does not conform to the `%s' protocol" + msgstr "el objeto no es conforme con el protocolo `%s'" + + #: objc/objc-act.c:801 + #, c-format + msgid "class `%s' does not implement the `%s' protocol" + msgstr "la clase `%s' no implementa el protocolo `%s'" + + #: objc/objc-act.c:882 + #, c-format + msgid "`%s' cannot be statically allocated" + msgstr "`%s' no se puede ubicar estáticamente" + + #: objc/objc-act.c:939 + #, c-format + msgid "unexpected type for `id' (%s)" + msgstr "tipo inesperado para `id' (%s)" + + #: objc/objc-act.c:944 + msgid "undefined type `id', please import " + msgstr "tipo `id' indefinido, por favor importe " + + #: objc/objc-act.c:996 + #, c-format + msgid "protocol `%s' has circular dependency" + msgstr "el protocolo `%s' tiene una dependencia circular" + + #: objc/objc-act.c:1018 objc/objc-act.c:5229 + #, c-format + msgid "cannot find protocol declaration for `%s'" + msgstr "no se puede encontrar la declaración de protocolo para `%s'" + + #: objc/objc-act.c:1279 objc/objc-act.c:5747 objc/objc-act.c:6077 objc/objc-act.c:6126 objc/objc-act.c:6162 objc-parse.y:1752 + #, c-format + msgid "cannot find interface declaration for `%s'" + msgstr "no se puede encontrar la declaración de interfaz para `%s'" + + #: objc/objc-act.c:1304 + #, c-format + msgid "cannot find reference tag for class `%s'" + msgstr "no se puede encontrar la marca de referencia para la clase %s" + + #: objc/objc-act.c:2314 + #, c-format + msgid "cannot find class `%s'" + msgstr "no se puede encontrar la clase `%s'" + + #: objc/objc-act.c:2316 + #, c-format + msgid "class `%s' already exists" + msgstr "ya existe la clase `%s'" + + #. fatal did not work with 2 args...should fix + #: objc/objc-act.c:2440 + #, c-format + msgid "cannot find interface declaration for `%s', superclass of `%s'" + msgstr "no se puede encontrar la declaración de interfaz para `%s', superclase de `%s'" + + #: objc/objc-act.c:2447 + #, c-format + msgid "circular inheritance in interface declaration for `%s'" + msgstr "herencia circular en la declaración de interfaz para `%s'" + + #: objc/objc-act.c:3500 objc/objc-act.c:3517 + msgid "inconsistent instance variable specification" + msgstr "especificación de instancia de variable inconsistente" + + #: objc/objc-act.c:4710 + #, c-format + msgid "multiple declarations for method `%s'" + msgstr "declaraciones múltiples para el método `%s'" + + #: objc/objc-act.c:4876 + #, c-format + msgid "invalid receiver type `%s'" + msgstr "tipo receptor `%s' inválido" + + #: objc/objc-act.c:4907 objc/objc-act.c:4933 objc/objc-act.c:4981 + #, c-format + msgid "`%s' does not respond to `%s'" + msgstr "`%s' no responde a `%s'" + + #: objc/objc-act.c:4913 objc/objc-act.c:7197 + #, c-format + msgid "no super class declared in interface for `%s'" + msgstr "no se declaró una super clase en la interfaz para `%s'" + + #: objc/objc-act.c:5011 + msgid "cannot find class (factory) method" + msgstr "no se puede encontrar el método de la clase (de fábrica)" + + #: objc/objc-act.c:5012 objc/objc-act.c:5056 + #, c-format + msgid "return type for `%s' defaults to id" + msgstr "el tipo de devolución para `%s' por omisión es id" + + #: objc/objc-act.c:5029 + #, c-format + msgid "method `%s' not implemented by protocol" + msgstr "el método `%s' no se ha implementado por el protocolo" + + #: objc/objc-act.c:5038 + msgid "return type defaults to id" + msgstr "el tipo de devolución por omisión es id" + + #: objc/objc-act.c:5055 + msgid "cannot find method" + msgstr "no se puede encontrar el método" + + #. Historically, a class method that produced objects (factory + #. method) would assign `self' to the instance that it + #. allocated. This would effectively turn the class method into + #. an instance method. Following this assignment, the instance + #. variables could be accessed. That practice, while safe, + #. violates the simple rule that a class method should not refer + #. to an instance variable. It's better to catch the cases + #. where this is done unknowingly than to support the above + #. paradigm. + #: objc/objc-act.c:5298 + #, c-format + msgid "instance variable `%s' accessed in class method" + msgstr "la variable de instancia `%s' es accessada en el método de la clase" + + #: objc/objc-act.c:5548 + #, c-format + msgid "duplicate definition of class method `%s'" + msgstr "definición duplicada del método de la clase `%s'" + + #: objc/objc-act.c:5554 + #, c-format + msgid "duplicate declaration of class method `%s'" + msgstr "declaración duplicada del método de la clase `%s'" + + #: objc/objc-act.c:5590 + #, c-format + msgid "duplicate definition of instance method `%s'" + msgstr "definición duplicada del método de la instancia `%s'" + + #: objc/objc-act.c:5596 + #, c-format + msgid "duplicate declaration of instance method `%s'" + msgstr "declaración duplicada del método de la instancia `%s'" + + #: objc/objc-act.c:5636 + #, c-format + msgid "duplicate interface declaration for category `%s(%s)'" + msgstr "declaración de interfaz duplicada para la categoría `%s(%s)'" + + #: objc/objc-act.c:5722 + #, c-format + msgid "instance variable `%s' is declared private" + msgstr "la variable de instancia `%s' es declarada privada" + + #: objc/objc-act.c:5769 + #, c-format + msgid "instance variable `%s' is declared %s" + msgstr "la variable de instancia `%s' es declarada %s" + + #: objc/objc-act.c:5779 + msgid "static access to object of type `id'" + msgstr "acceso estático al objeto de tipo `id'" + + #: objc/objc-act.c:5816 objc/objc-act.c:5909 + #, c-format + msgid "incomplete implementation of class `%s'" + msgstr "implementación incompleta de la clase `%s'" + + #: objc/objc-act.c:5820 objc/objc-act.c:5914 + #, c-format + msgid "incomplete implementation of category `%s'" + msgstr "implementación incompleta de la categoría `%s'" + + #: objc/objc-act.c:5825 objc/objc-act.c:5919 + #, c-format + msgid "method definition for `%c%s' not found" + msgstr "no se encuentra la definición de método para `%c%s'" + + #: objc/objc-act.c:5963 + #, c-format + msgid "%s `%s' does not fully implement the `%s' protocol" + msgstr "%s `%s' no implementa completamente el protocolo `%s'" + + #: objc/objc-act.c:6021 objc/objc-act.c:8118 + msgid "`@end' missing in implementation context" + msgstr "falta un `@end' en el contexto de una implementación" + + #: objc/objc-act.c:6049 + #, c-format + msgid "reimplementation of class `%s'" + msgstr "reimplementación de la clase `%s'" + + #: objc/objc-act.c:6091 + #, c-format + msgid "conflicting super class name `%s'" + msgstr "el nombre de la super clase `%s' causa conflicto" + + #: objc/objc-act.c:6106 + #, c-format + msgid "duplicate interface declaration for class `%s'" + msgstr "declaración de interfaz duplicada para la clase `%s'" + + #: objc/objc-act.c:6388 + #, c-format + msgid "duplicate declaration for protocol `%s'" + msgstr "declaración duplicada para el protocolo `%s'" + + #: objc/objc-act.c:7238 + msgid "[super ...] must appear in a method context" + msgstr "[super ...] debe aparecer en el contexto de un método" + + #: objc/objc-act.c:8220 objc/objc-act.c:8236 + #, c-format + msgid "potential selector conflict for method `%s'" + msgstr "conflicto potencial de selectores para el método `%s'" + + #: objc-parse.y:2612 + msgid "`@end' must appear in an implementation context" + msgstr "`@end' debe aparecer en el contexto de una implementación" + + #: objc-parse.y:2886 + msgid "method definition not in class context" + msgstr "la definición de método no está en el contexto de la clase" + + #: objc/lang-options.h:27 + msgid "Dump decls to a .decl file" + msgstr "Volcar decls a un fichero .decl" + + #: objc/lang-options.h:29 + msgid "Generate code for GNU runtime environment" + msgstr "Generar código para el ambiente de tiempo de ejecución GNU" + + #: objc/lang-options.h:32 + msgid "Generate code for NeXT runtime environment" + msgstr "Generar código para el ambiente de tiempo de ejecución NeXT" + + #: objc/lang-options.h:35 + msgid "Warn if a selector has multiple methods" + msgstr "Avisar si un selector tiene métodos múltiples" + + #: objc/lang-options.h:39 + msgid "Do not warn if inherited methods are unimplemented" + msgstr "No avisar si los métodos heredados no están implementados" + + #: objc/lang-options.h:41 + msgid "Generate C header of platform specific features" + msgstr "Generar encabezado C de características específicas de la plataforma" + + #: objc/lang-options.h:43 + msgid "Specify the name of the class for constant strings" + msgstr "Especificar el nombre de la clase para cadenas constantes" + + #: java/lang-specs.h:33 + msgid "-fjni and -femit-class-files are incompatible" + msgstr "-fjni y -femit-class-files son incompatibles" + + #: java/lang-specs.h:34 + msgid "-fjni and -femit-class-file are incompatible" + msgstr "-fjni y -femit-class-file son incompatibles" + + #: java/lang-specs.h:35 java/lang-specs.h:36 + msgid "-femit-class-file should used along with -fsyntax-only" + msgstr "-femit-class-file se debe usar junto con -fsyntax-only" + + #: config/nextstep.h:161 config/nextstep.h:164 + msgid "-p profiling is no longer supported. Use -pg instead" + msgstr "la creación de perfil con -p ya no tiene soporte. Use en su lugar -pg" + + #: config/arm/arm.h:211 + msgid "-mapcs-26 and -mapcs-32 may not be used together" + msgstr "no se pueden usar juntos -mapcs-26 y -mapcs-32" + + #: config/arm/arm.h:223 + msgid "-msoft-float and -mhard_float may not be used together" + msgstr "no se pueden usar juntos -msoft-float y -mhard_float" + + #: config/arm/arm.h:234 + msgid "-mbig-endian and -mlittle-endian may not be used together" + msgstr "no se pueden usar juntos -mbig-endian y -mlittle-endian" + + #: config/arm/arm.h:252 + msgid "incompatible interworking options" + msgstr "opciones de trabajo interno incompatibles" + + #: config/sparc/freebsd.h:31 config/ia64/freebsd.h:23 config/alpha/freebsd.h:36 config/i386/freebsd-aout.h:227 + msgid "`-p' not supported; use `-pg' and gprof(1)" + msgstr "`-p' no tiene soporte; use `-pg' y gprof(1)" + + #: gcc.c:672 f/lang-specs.h:35 + msgid "GNU C does not support -C without using -E" + msgstr "GNU C no da soporte a -C sin usar -E" + + #: gcc.c:699 ada/lang-specs.h:39 java/jvspec.c:77 + msgid "-pg and -fomit-frame-pointer are incompatible" + msgstr "-pg y -fomit-frame-pointer son incompatibles" + + #: gcc.c:846 + msgid "-E required when input is from standard input" + msgstr "se requiere -E cuando la entrada es de entrada estándar" + + #: gcc.c:850 + msgid "compilation of header file requested" + msgstr "se solicitó la compilación de fichero de encabezado" + + #: config/mcore/mcore.h:60 + msgid "choose either big or little endian, not both" + msgstr "escoja entre big o little endian, no ambos" + + #: config/mcore/mcore.h:63 + msgid "choose either m340 or m210 not both" + msgstr "escoja entre m340 o m210, no ambos" + + #: config/mcore/mcore.h:64 + msgid "the m210 does not have little endian support" + msgstr "el m210 no tiene soporte para little endian" + + #: ada/lang-specs.h:42 + msgid "-c or -S required for Ada" + msgstr "se requiere -c o -S para Ada" + + #: config/mips/r3900.h:36 config/mips/r3900.h:42 + msgid "-mhard-float not supported" + msgstr "-mhard-float no tiene soporte" + + #: config/mips/r3900.h:38 config/mips/r3900.h:44 + msgid "-msingle-float and -msoft-float can not both be specified" + msgstr "-msingle-float y -msoft-float no se pueden especificar al mismo tiempo" + + #: config/mmix/mmix.h:112 + msgid "options -mabi=mmixware and -mabi=gnu are mutually exclusive" + msgstr "las opciones -mabi=mmixware y -mabi=gnu son mutuamente exclusivas" + + #: config/i860/fx2800.h:290 + msgid "-p option not supported: use -pg instead" + msgstr "la opción -p no tiene soporte: en su lugar use -pg" + + #: config/arm/riscix.h:73 config/arm/riscix.h:133 + msgid "-mbsd and -pedantic incompatible" + msgstr "-mbsd y -pedantic son incompatibles" + + #: config/arm/riscix.h:74 config/arm/riscix.h:134 + msgid "-mbsd and -mxopen incompatible" + msgstr "-mbsd y -mxopen son incompatibles" + + #: config/arm/riscix.h:75 config/arm/riscix.h:135 + msgid "-mxopen and -pedantic incompatible" + msgstr "-mxopen y -pedantic son incompatibles" + + #: config/arc/arc.h:59 config/mips/mips.h:1007 + msgid "may not use both -EB and -EL" + msgstr "no se pueden usar -EB y -EL al mismo tiempo" + + #: config/vax/vax.h:42 config/vax/vax.h:43 + msgid "profiling not supported with -mg\n" + msgstr "la creación de perfil no tiene soporte con -mg\n" + + #: config/i386/cygwin.h:114 + msgid "mno-cygwin and mno-win32 are not compatible" + msgstr "-mno-cygwin y -mno-win32 no son compatibles" + + #: config/i386/cygwin.h:169 config/i386/mingw32.h:69 + msgid "shared and mdll are not compatible" + msgstr "shared y mdll no son compatibles." + + #: config/mips/mips.h:837 + msgid "-pipe is not supported" + msgstr "-pipe no tiene soporte" + + #: config/mips/mips.h:1003 + msgid "may not use both -mfp64 and -msingle-float" + msgstr "no se pueden usar -mfp64 y -msingle-float al mismo tiempo" + + #: config/mips/mips.h:1004 + msgid "may not use both -mfp64 and -m4650" + msgstr "no se pueden usar -mfp64 y -m4650 al mismo tiempo" + + #: config/mips/mips.h:1006 + msgid "may not use both -mgp32 and -mfp64" + msgstr "no se pueden usar -mgp32 y -mfp64 al mismo tiempo" + + #: config/i386/sco5.h:662 config/i386/sco5.h:737 + msgid "-static not valid with -mcoff" + msgstr "-static no es válido con -mcoff" + + #: config/i386/sco5.h:663 config/i386/sco5.h:738 + msgid "-shared not valid with -mcoff" + msgstr "-shared no es válido con -mcoff" + + #: config/i386/sco5.h:664 config/i386/sco5.h:739 + msgid "-symbolic not valid with -mcoff" + msgstr "-symbolic no es válido con -mcoff" + + #: config/i386/sco5.h:702 + msgid "-fpic is not valid with -mcoff" + msgstr "-fpic no es válido con -mcoff" + + #: config/i386/sco5.h:703 + msgid "-fPIC is not valid with -mcoff" + msgstr "-fPIC no es válido con -mcoff" + + #: config/i386/sco5.h:740 + msgid "-fpic not valid with -mcoff" + msgstr "-fpic no es válido con -mcoff" + + #: config/i386/sco5.h:741 + msgid "-fPIC not valid with -mcoff" + msgstr "-fPIC no es válido con -mcoff" + + #~ msgid "__builtin_trap not supported by this target" + #~ msgstr "no se da soporte a __builtin_trap en este objetivo" + + #~ msgid "`%s' previously defined here" + #~ msgstr "se definió `%s' previamente aquí" + + #~ msgid "`%s' previously declared here" + #~ msgstr "se declaró `%s' previamente aquí" + + #~ msgid "invalid lvalue in increment" + #~ msgstr "l-valor inválido en incremento" + + #~ msgid "invalid lvalue in decrement" + #~ msgstr "l-valor inválido en decremento" + + #~ msgid "increment" + #~ msgstr "incremento" + + #~ msgid "decrement" + #~ msgstr "decremento" + + #~ msgid "Usage: %s [switches] input output\n" + #~ msgstr "Modo de empleo: %s [interruptores] entrada salida\n" + + #~ msgid "output_operand: %s" + #~ msgstr "output_operand: %s" + + #~ msgid "invalid %H value" + #~ msgstr "valor %H inválido" + + #~ msgid "invalid %h value" + #~ msgstr "valor %h inválido" + + #~ msgid "invalid %Q value" + #~ msgstr "valor %Q inválido" + + #~ msgid "invalid %q value" + #~ msgstr "valor %q inválido" + + #~ msgid "invalid %p value" + #~ msgstr "valor %p inválido" + + #~ msgid "invalid %B value" + #~ msgstr "valor %B inválido" + + #~ msgid "invalid %C value" + #~ msgstr "valor %C inválido" + + #~ msgid "invalid %E value" + #~ msgstr "valor %E inválido" + + #~ msgid "invalid %r value" + #~ msgstr "valor %r inválido" + + #~ msgid "-march=%s does not support -mips%d" + #~ msgstr "-march=%s no tiene soporte para -mips%d" + + #~ msgid "no code label found" + #~ msgstr "no se encuentra la etiqueta" + + #~ msgid "profiling does not support code models other than medlow" + #~ msgstr "el análisis de perfil no soporta modelos de código que no sean medlow" + + #~ msgid "%s and profiling conflict: disabling %s" + #~ msgstr "%s y el análisis de perfil en conflicto: desactivando %s" + + #~ msgid "Use function_epilogue()" + #~ msgstr "Usar function_epilogue()" + + #~ msgid "Do not use function_epilogue()" + #~ msgstr "No usar function_epilogue()" + + #~ msgid "%d errors, %d sorries, do granting" + #~ msgstr "%d errores, %d lamentaciones, se hacen concesiones" + + #~ msgid "GNU compiler does not support statically allocated objects" + #~ msgstr "el compilador GNU no tiene soporte para objetos ubicados estáticamente" + + #~ msgid "causing unhandled exception `%s' (this is flaged only once)" + #~ msgstr "causando una excepción sin manejar `%s' (esto sólo se señala una vez)" + + #~ msgid "range failure (not inside function)" + #~ msgstr "falla de rango (no está dentro de la función)" + + #~ msgid "possible range failure (not inside function)" + #~ msgstr "posible falla de rango (no está dentro de la función)" + + #~ msgid "expression will always cause RANGEFAIL" + #~ msgstr "la expresión siempre causará RANGEFAIL" + + #~ msgid "right hand side of assignment is a mode" + #~ msgstr "el lado derecho de la asignación es un modo" + + #~ msgid "incompatible modes in %s" + #~ msgstr "modos incompatibles en %s" + + #~ msgid "bad string length in %s" + #~ msgstr "constante de cadena errónea en %s" + + #~ msgid "mode mismatch in %s expression" + #~ msgstr "el modo no coincide en la expresión %s" + + #~ msgid "%s expression must be referable" + #~ msgstr "la expresión %s debe ser referenciable" + + #~ msgid "%s not allowed outside a PROC" + #~ msgstr "no se permite %s fuera de un PROC" + + #~ msgid "%s action in PROC with no declared RESULTS" + #~ msgstr "acción %s en PROC con RESULTS sin declarar" + + #~ msgid "RETURN not allowed outside PROC" + #~ msgstr "no se permite RETURN fuera de PROC" + + #~ msgid "RETURN with a value, in PROC returning void" + #~ msgstr "RETURN con un valor, en un PROC que devuelve void" + + #~ msgid "RETURN with no value and no RESULT action in procedure" + #~ msgstr "RETURN sin valor y no hay una acción RESULT en el procedimiento" + + #~ msgid "no label named `%s'" + #~ msgstr "no hay una etiqueta llamada `%s'" + + #~ msgid "cannot GOTO label `%s' outside current function" + #~ msgstr "no se puede hacer GOTO a la etiqueta `%s' fuera de la función actual" + + #~ msgid "no EXITable label named `%s'" + #~ msgstr "no hay una etiqueta para EXIT llamada `%s'" + + #~ msgid "cannot EXIT label `%s' outside current function" + #~ msgstr "no se puede hacer EXIT a la etiqueta `%s' fuera de la función actual" + + #~ msgid "case selector not compatible with label" + #~ msgstr "el selector del case no es compatible con la etiqueta" + + #~ msgid "ELSE label not within a CASE statement" + #~ msgstr "la etiqueta ELSE no se encuentra dentro de una declaración CASE" + + #~ msgid "multiple default labels found in a CASE statement" + #~ msgstr "múltiples etiquetas por omisión en una declaración CASE" + + #~ msgid "this is the first ELSE label" + #~ msgstr "esta es la primera etiqueta ELSE" + + #~ msgid "label found outside of CASE statement" + #~ msgstr "se encontró una etiqueta fuera de una declaración CASE" + + #~ msgid "duplicate CASE value" + #~ msgstr "valor de CASE duplicado" + + #~ msgid "this is the first entry for that value" + #~ msgstr "esta es la primera entrada para ese valor" + + #~ msgid "CASE value out of range" + #~ msgstr "el valor de CASE está fuera de rango" + + #~ msgid "empty range" + #~ msgstr "rango vacío" + + #~ msgid "label within scope of cleanup or variable array" + #~ msgstr "etiqueta dentro del ámbito de limpieza o del de una matriz variable" + + #~ msgid "mode in label is not discrete" + #~ msgstr "el modo en la etiqueta no es discreto" + + #~ msgid "label not within a CASE statement" + #~ msgstr "la etiqueta no está dentro de una declaración CASE" + + #~ msgid "lower bound of range must be a discrete literal expression" + #~ msgstr "el límite inferior del rango debe ser una expresión literal discreta" + + #~ msgid "upper bound of range must be a discrete literal expression" + #~ msgstr "el límite superior del rango debe ser una expresión literal discreta" + + #~ msgid "CASE label is not valid" + #~ msgstr "la etiqueta CASE no es válida" + + #~ msgid "number of CASE selectors does not match the number of CASE label lists" + #~ msgstr "el número de selectores CASE no coincide con el número de las listas de etiquetas CASE" + + #~ msgid "incomplete CASE - %s not handled" + #~ msgstr "CASE incompleto - no se maneja %s" + + #~ msgid "CASE selector with variable range" + #~ msgstr "selector CASE con rango variable" + + #~ msgid "too many cases to do CASE completeness testing" + #~ msgstr "demasiados cases para hacer la pruebla de completez de CASE" + + # Probable error de dedo de los autores originales en 'assignent'. Notificar. cfuga + #~ msgid "type of tuple cannot be implicit in multiple assignent" + #~ msgstr "el tipo de tupla no puede ser implícito en una asignación múltiple" + + # Probable error de dedo de los autores originales en 'assignent'. Notificar. cfuga + #~ msgid "conditional expression cannot be used in multiple assignent" + #~ msgstr "no se puede usar una expresión condicional en asignaciones múltiples" + + #~ msgid "internal error - unknown type in multiple assignment" + #~ msgstr "error interno - tipo desconocido en una asignación múltiple" + + #~ msgid "no operator allowed in multiple assignment," + #~ msgstr "no se permite un operador en asignaciones múltiples," + + #~ msgid "location modes in multiple assignment are not equivalent" + #~ msgstr "no son equivalesntes los modos de ubicación en las asignaciones múltiples" + + #~ msgid "you may not assign a value to a BUFFER or EVENT location" + #~ msgstr "no se puede asignar un valor a una ubicación BUFFER o EVENT" + + #~ msgid "can't assign value to READonly location" + #~ msgstr "no se puede asignar un valor a una ubicación READonly" + + #~ msgid "cannot assign to location with non-value property" + #~ msgstr "no se puede asignar a una ubicación con una propiedad que no es valor" + + #~ msgid "lefthand side of assignment is not a location" + #~ msgstr "el lado izquierdo de la asignación no es una ubicación" + + #~ msgid "bitstring slice" + #~ msgstr "rebanada de cadena de bits" + + #~ msgid "LENGTH on left-hand-side is non-portable" + #~ msgstr "LENGTH en el lado izquierdo no es transportable" + + #~ msgid "can only set LENGTH of array location" + #~ msgstr "solamente se puede establecer LENGTH de la ubicación de una matriz" + + #~ msgid "internal error: trying to make loc-identity with non-location" + #~ msgstr "error interno: tratando de hacer una loc-identity con algo que no es una ubicación" + + #~ msgid "cannot convert to a boolean mode" + #~ msgstr "no se puede convertir a un modo boolean" + + #~ msgid "cannot convert to a char mode" + #~ msgstr "no se puede convertir a un modo char" + + # FIXME: ¿powerset? cfuga + #~ msgid "powerset tuple element out of range" + #~ msgstr "elemento de la tupla powerset fuera de rango" + + #~ msgid "incompatible member of powerset tuple (at position #%d)" + #~ msgstr "miembro incompatible de la tupla powerset (en la posición #%d)" + + #~ msgid "no initializer value for fixed field `%s'" + #~ msgstr "no hay valor inicial para el campo fijo `%s'" + + #~ msgid "non-constant value for tag field `%s'" + #~ msgstr "valor no constante para el campo de marcado '%s'" + + #~ msgid "field `%s' in wrong variant" + #~ msgstr "el campo `%s' está en una variante incorrecta" + + #~ msgid "missing variant fields (at least `%s')" + #~ msgstr "falta los campos variantes (por lo menos `%s')" + + #~ msgid "bad initializer for field `%s'" + #~ msgstr "iniciador inválido para el campo `%s'" + + #~ msgid "no initializer value for variant field `%s'" + #~ msgstr "no hay un valor iniciador para el campo variante `%s'" + + #~ msgid "no selected variant" + #~ msgstr "no se ha escogido un variant" + + #~ msgid "mixture of labelled and unlabelled tuple elements" + #~ msgstr "mezcla de elementos de tupla etiquetados y sin etiquetar" + + #~ msgid "probably not a structure tuple" + #~ msgstr "probablemente no es una estructura de tupla" + + #~ msgid "excess initializer for field `%s'" + #~ msgstr "exceso de iniciadores para el campo `%s'" + + #~ msgid "excess unnamed initializers" + #~ msgstr "exceso de iniciadores sin nombre" + + #~ msgid "non-constant start index for tuple" + #~ msgstr "índice de inicio no constante para la tupla" + + #~ msgid "invalid array tuple label" + #~ msgstr "etiqueta de tupla matriz inválida" + + #~ msgid "non-constant array tuple index range" + #~ msgstr "rango del índice de tupla matriz no constante" + + #~ msgid "incompatible array tuple element %s" + #~ msgstr "elemento %s de tupla matriz incompatible" + + #~ msgid "multiple (*) or (ELSE) array tuple labels" + #~ msgstr "múltiples etiquetas (*) o (ELSE) de tupla matriz" + + #~ msgid "empty range in array tuple" + #~ msgstr "rango vacío en la tupla matriz" + + #~ msgid "array tuple has duplicate index %s" + #~ msgstr "la tupla matriz tiene el índice %s duplicado" + + #~ msgid "array tuple index out of range" + #~ msgstr "índice de la tupla matriz fuera de rango" + + #~ msgid "too many array tuple values" + #~ msgstr "demasiados valores de la tupla matriz" + + #~ msgid "dynamic array tuple without (*) or (ELSE)" + #~ msgstr "tupla de matriz dinámica sin (*) o (ELSE)" + + #~ msgid "missing array tuple element %s" + #~ msgstr "falta el elemento %s de la tupla matriz" + + #~ msgid "missing array tuple elements %s : %s" + #~ msgstr "falta los elementos %s : %s de la tupla matriz" + + #~ msgid "initializer is not an array or string mode" + #~ msgstr "el iniciador no es un modo matriz o cadena" + + #~ msgid "destination is too small" + #~ msgstr "el destino es muy pequeño" + + #~ msgid "internal error: unknown type of expression" + #~ msgstr "error interno: tipo desconocido de expresión" + + #~ msgid "`%s' must not be declared readonly" + #~ msgstr "`%s' no debe ser declarado readonly" + + #~ msgid "declaration of readonly variable without initialization" + #~ msgstr "declaración de una variable readonly sin iniciación" + + #~ msgid "no initialization allowed for `%s'" + #~ msgstr "no se permite iniciación para `%s'" + + #~ msgid "value for loc-identity `%s' is not a location" + #~ msgstr "el valor para la loc-identity `%s' no es una ubicación" + + #~ msgid "location for `%s' not read-compatible" + #~ msgstr "la ubicación para `%s' no es compatible con la lectura" + + #~ msgid "nonconstant initializer for `%s'" + #~ msgstr "iniciador no constante para `%s'" + + #~ msgid "do_decl: internal error: don't know what to initialize" + #~ msgstr "do_decl: error interno: no se sabe qué hay que iniciar" + + #~ msgid "RECURSIVE PROCs" + #~ msgstr "PROCs RECURSIVE" + + #~ msgid "`%s' must not be READonly" + #~ msgstr "`%s' no debe ser READonly" + + #~ msgid "POS may not be specified for a list of field declarations" + #~ msgstr "no se puede especificar POS para una lista de declaraciones de campos" + + #~ msgid "(ELSE) case label as well as ELSE variant" + #~ msgstr "la etiqueta de case (ELSE) así como un variant ELSE" + + #~ msgid "inconsistent modes between labels and tag field" + #~ msgstr "modos inconsistentes entre las etiquetas y el campo de marcado" + + #~ msgid "too few tag labels" + #~ msgstr "muy pocas etiquetas de marcado" + + #~ msgid "too many tag labels" + #~ msgstr "demasiadas etiquetas de marcado" + + #~ msgid "case label lower limit is not a discrete constant expression" + #~ msgstr "la etiqueta de `case' del límite inferior no es una expresión constante entera" + + #~ msgid "case label upper limit is not a discrete constant expression" + #~ msgstr "la etiqueta de `case' del límite superior no es una expresión constante entera" + + #~ msgid "case label must be a discrete constant expression" + #~ msgstr "la etiqueta de `case' debe ser una expresión constante discreta" + + #~ msgid "variant label declared here..." + #~ msgstr "la etiqueta variant declarada aquí..." + + #~ msgid "...is duplicated here" + #~ msgstr "...está duplicada aquí" + + #~ msgid "no field (yet) for tag %s" + #~ msgstr "(aún) no hay un campo para la marca %s" + + #~ msgid "non-value mode may only returned by LOC" + #~ msgstr "un modo que no es valor sólo puede ser devuelto por LOC" + + #~ msgid "mode of `%s' is not a mode" + #~ msgstr "el modo de `%s' no es un modo" + + #~ msgid "`%s' may only be passed by LOC" + #~ msgstr "`%s' sólo puede ser pasado por LOC" + + #~ msgid "nothing named `%s' to grant" + #~ msgstr "nada llamado `%s' para conceder" + + #~ msgid "duplicate grant for `%s'" + #~ msgstr "concesión duplicada para `%s'" + + #~ msgid "previous grant for `%s'" + #~ msgstr "concesión previa para `%s'" + + #~ msgid "duplicate definition `%s'" + #~ msgstr "definición duplicada `%s'" + + #~ msgid "previous definition of `%s'" + #~ msgstr "definición previa de `%s'" + + #~ msgid "ambiguous choice for seize `%s' -" + #~ msgstr "elección ambigua para sujetar a `%s' -" + + #~ msgid " - can seize this `%s' -" + #~ msgstr " - puede sujetar a este `%s' -" + + #~ msgid " - or this granted decl `%s'" + #~ msgstr " - o este decl `%s' concedido" + + #~ msgid "enumerator value for `%s' is less than 0" + #~ msgstr "el valor de enumerador para `%s' es menor que 0" + + #~ msgid "enumerators `%s' and `%s' have equal values" + #~ msgstr "los enumeradores `%s' y `%s' tiene valores iguales" + + #~ msgid "undefined value in SET mode is obsolete and deprecated" + #~ msgstr "un valor indefinido en el modo SET es obsoleto y deprecado" + + #~ msgid "BASE variable never declared" + #~ msgstr "nunca se declaró la variable BASE" + + #~ msgid "cannot BASE a variable on a PROC/PROCESS name" + #~ msgstr "no se puede hacer BASE de una variable en un nombre PROC/PROCESS" + + #~ msgid "INTERNAL ERROR: handle_one_level is broken" + #~ msgstr "ERROR INTERNO: handle_one_level está descompuesto" + + #~ msgid "tuple without specified mode not allowed in %s" + #~ msgstr "no se permite una tupla sin modo especificado en %s" + + #~ msgid "conditional expression not allowed in %s" + #~ msgstr "no se permite una expresión condicional en %s" + + #~ msgid "internal error: unknown expression mode in %s" + #~ msgstr "error interno: modo de expresión desconocido en %s" + + #~ msgid "CASE selector is not a discrete expression" + #~ msgstr "el selector de CASE no es una expresión discreta" + + #~ msgid "The number of CASE selectors does not match the number of CASE label lists" + #~ msgstr "El número de selectores CASE no coincide con el número de listas de etiquetas CASE" + + #~ msgid "powerset is not addressable" + #~ msgstr "powerset no es direccionable" + + #~ msgid "array is not addressable" + #~ msgstr "la matriz no es direccionable" + + #~ msgid "too few arguments in call to `%s'" + #~ msgstr "muy pocos argumentos en la llamada a `%s'" + + #~ msgid "too many arguments in call to `%s'" + #~ msgstr "demasiados argumentos en la llamada a `%s'" + + #~ msgid "cannot dereference, not a pointer" + #~ msgstr "no se puede deferenciar, no es un apuntador" + + #~ msgid "missing '.' operator or undefined mode name `%s'" + #~ msgstr "falta el operador '.' o el nombre de modo indefinido `%s'" + + #~ msgid "you have forgotten the '.' operator which must" + #~ msgstr "ha olvidado el operador '.' el cual debe" + + #~ msgid " precede a STRUCT field reference, or `%s' is an undefined mode" + #~ msgstr " preceder a una referencia de campo STRUCT, o `%s' es un modo indefinido" + + #~ msgid "can't dereference PTR value using unary `->'" + #~ msgstr "no se puede dereferenciar el valor de PTR usando un `->' unario" + + #~ msgid "invalid type argument of `->'" + #~ msgstr "argumento de tipo inválido de `->'" + + #~ msgid "operand of '.' is not a STRUCT" + #~ msgstr "el operando de '.' no es un STRUCT" + + #~ msgid "no field named `%s'" + #~ msgstr "no hay un campo llamado `%s'" + + #~ msgid "ABS argument must be discrete or real mode" + #~ msgstr "el argumento de ABS debe ser de modo discreto o real" + + #~ msgid "argument %d to ABSTIME must be of integer type" + #~ msgstr "el argumento %d para ABSTIME debe ser de tipo entero" + + #~ msgid "parameter 1 must be referable" + #~ msgstr "el parámetro 1 debe ser referenciable" + + #~ msgid "mode mismatch in parameter 1" + #~ msgstr "no coincide el modo en el parámetro 1" + + #~ msgid "parameter 2 must be a positive integer" + #~ msgstr "el parámetro 2 debe ser un entero positivo" + + #~ msgid "CARD argument must be powerset mode" + #~ msgstr "el argumento de CARD debe ser del modo powerset" + + #~ msgid "expression for DESCR-built-in must be referable" + #~ msgstr "la expresión para el DESCR interno debe ser referenciable" + + #~ msgid "argument to `%s' must be of integer type" + #~ msgstr "el argumento para `%s' debe ser de tipo entero" + + #~ msgid "argument 1 to `%s' must be of floating point mode" + #~ msgstr "el argumento 1 para `%s' debe ser de modo de coma flotante" + + #~ msgid "first argument to `%s' must be a mode" + #~ msgstr "el primer argumento de `%s' debe ser un modo" + + #~ msgid "READonly modes for %s must have a value" + #~ msgstr "los modos READonly para %s deben tener un valor" + + #~ msgid "argument to TERMINATE must be a reference primitive value" + #~ msgstr "el argumento para TERMINATE debe ser un valor de referencia primitivo" + + #~ msgid "argument 1 to INTTIME must be of mode TIME" + #~ msgstr "el argumento 1 para INTTIME debe ser de modo TIME" + + #~ msgid "LENGTH argument must be string, buffer, event mode, text location or mode" + #~ msgstr "el argumento de LENGTH debe ser cadena, almacenamiento temporal, modo evento, ubicación o modo texto" + + #~ msgid "UPPER argument must have a mode, or be a mode" + #~ msgstr "el argumento de UPPER debe tener un modo, o ser un modo" + + #~ msgid "LOWER argument must have a mode, or be a mode" + #~ msgstr "el argumento de LOWER debe tener un modo, o ser un modo" + + #~ msgid "UPPER argument must be string, array, mode or integer" + #~ msgstr "el argumento de UPPER debe ser cadena, matriz, modo o entero" + + #~ msgid "LOWER argument must be string, array, mode or integer" + #~ msgstr "el argumento de LOWER debe ser cadena, matriz, modo o entero" + + #~ msgid "%s argument must be POWERSET mode" + #~ msgstr "el argumento %s debe ser de modo POWERSET" + + #~ msgid "%s called for empty POWERSET" + #~ msgstr "se llamó %s para un POWERSET vacío" + + #~ msgid "argument to NUM is not discrete" + #~ msgstr "el argumento para NUM no es discreto" + + #~ msgid "no integer mode which matches expression's mode" + #~ msgstr "no hay un modo entero que coincida con el modo de la expresión" + + #~ msgid "NUM's parameter is below its mode range" + #~ msgstr "el parámetro de NUM está por debajo de su rango de modo" + + #~ msgid "NUM's parameter is above its mode range" + #~ msgstr "el parámetro de NUM está por arriba de su rango de modo" + + #~ msgid "cannot take SUCC or PRED of a numbered SET" + #~ msgstr "no se puede tomar un SUCC o PRED de un SET numerado" + + #~ msgid "SUCC or PRED must not be done on a PTR" + #~ msgstr "no se debe hacer SUCC o PRED en un PTR" + + #~ msgid "SUCC or PRED for a reference type is not standard" + #~ msgstr "SUCC o PRED para un tipo de referencia no es estándard" + + #~ msgid "SUCC or PRED argument must be a discrete mode" + #~ msgstr "el argumento de SUCC o PRED debe ser un modo discreto" + + #~ msgid "taking the %s of a value already at its %s value" + #~ msgstr "tomando el %s de un valor que ya está en su %s valor" + + #~ msgid "size applied to a function mode" + #~ msgstr "size aplicado a una modo función" + + #~ msgid "sizeof applied to a void mode" + #~ msgstr "sizeof aplicado a un modo void" + + #~ msgid "sizeof applied to an incomplete mode" + #~ msgstr "sizeof aplicado a un modo incompleto" + + #~ msgid "cannot call a PROCESS, you START a PROCESS" + #~ msgstr "no se puede llamar a un PROCESS, usted START un PROCESS" + + #~ msgid "invalid %s" + #~ msgstr "%s inválido" + + #~ msgid "%s parameter %d must be a location" + #~ msgstr "%s del parámetro %d debe ser una ubicación" + + #~ msgid "%s parameter %d is READ-only" + #~ msgstr "%s del parámetro %d es READ-only" + + #~ msgid "LOC actual parameter %d is a non-referable location" + #~ msgstr "el parámetro %d actual de LOC es una ubicación no referenciable" + + #~ msgid "mode mismatch in parameter %d" + #~ msgstr "no coincide el modo en el parámetro %d" + + #~ msgid "too many arguments to procedure `%s'" + #~ msgstr "demasiados argumentos para el procedimiento `%s'" + + #~ msgid "too many arguments to procedure" + #~ msgstr "demasiados argumentos para el procedimiento" + + #~ msgid "too few arguments to procedure `%s'" + #~ msgstr "muy pocos argumentos para el procedimiento `%s'" + + #~ msgid "too few arguments to procedure" + #~ msgstr "muy pocos argumentos para el procedimiento" + + #~ msgid "syntax error (integer used as function)" + #~ msgstr "error sintáctico (entero usado como función)" + + #~ msgid "syntax error - missing operator, comma, or '('?" + #~ msgstr "error de sintaxis - ¿Falta un operador, una coma, o '('?" + + #~ msgid "unimplemented built-in function `%s'" + #~ msgstr "función interna `%s' sin implementar" + + #~ msgid "internal error - bad built-in function `%s'" + #~ msgstr "error interno - función interna `%s' errónea" + + #~ msgid "empty expression in string index" + #~ msgstr "expresión vacía en el índice de la cadena" + + #~ msgid "only one expression allowed in string index" + #~ msgstr "solamente se permite una expresión en el índice de la cadena" + + #~ msgid "invalid: primval ( untyped_exprlist )" + #~ msgstr "inválido: primval ( listaexpr_sintipo )" + + #~ msgid "operand is variable-size bitstring/power-set" + #~ msgstr "el operando es una cadena de bits/powerset de tamaño variable" + + #~ msgid "tree code `%s' unhandled in build_compare_set_expr" + #~ msgstr "árbol de código `%s' sin manejar en build_compare_set_expr" + + #~ msgid "incompatible modes in concat expression" + #~ msgstr "modos incompatibles en la concatenación de expresiones" + + #~ msgid "invalid operation on array of chars" + #~ msgstr "operación inválida en la matriz de chars" + + #~ msgid "comparison of variant structures is unsafe" + #~ msgstr "no es segura la comparacion de estructuras variantes" + + #~ msgid "compare with variant records" + #~ msgstr "compara con registros variantes" + + #~ msgid "incompatible operands to %s" + #~ msgstr "operandos incompatibles para %s" + + #~ msgid "relational operator not allowed for this mode" + #~ msgstr "no se permite un operador relacional para este modo" + + #~ msgid "cannot use %s operator on PROC mode variable" + #~ msgstr "no se puede usar el operador %s en la variable de modo PROC" + + #~ msgid "invalid left operand of %s" + #~ msgstr "operando izquierdo de %s inválido" + + #~ msgid "invalid right operand of %s" + #~ msgstr "operando derecho de %s inválido" + + #~ msgid "repetition expression must be constant" + #~ msgstr "la expresión de repetición debe ser constante" + + #~ msgid "left argument to MOD/REM operator must be integral" + #~ msgstr "el argumento izquierdo del operador MOD/REM debe ser integral" + + #~ msgid "right argument to MOD/REM operator must be integral" + #~ msgstr "el argumento derecho del operador MOD/REM debe ser integral" + + #~ msgid "right operand of IN is not a powerset" + #~ msgstr "el operando derecho de IN no es un powerset" + + #~ msgid "left operand of IN incompatible with right operand" + #~ msgstr "el operando izquierdo de IN es incompatible con el operando derecho" + + #~ msgid "-> operator not allow in constant expression" + #~ msgstr "no se permite el operador -> en la expresión constante" + + #~ msgid "taking the address of a string literal is non-standard" + #~ msgstr "tomar la dirección de una literal de cadena no es estándard" + + #~ msgid "taking the address of a function is non-standard" + #~ msgstr "tomar la dirección de una función no es estándard" + + #~ msgid "ADDR requires a LOCATION argument" + #~ msgstr "ADDR requiere un argumento LOCATION" + + #~ msgid "-> expression is not addressable" + #~ msgstr "la expresión -> no es direccionable" + + #~ msgid "ADDR parameter must be a LOCATION" + #~ msgstr "el parámetro de ADDR debe ser una LOCATION" + + #~ msgid "possible internal error in build_chill_arrow_expr" + #~ msgstr "posible error interno en build_chill_arrow_expr" + + #~ msgid "%s is not addressable" + #~ msgstr "%s no es direccionable" + + #~ msgid "repetition count is not an integer constant" + #~ msgstr "la cuenta de repetición no es una constante entera" + + #~ msgid "repetition count < 0" + #~ msgstr "la cuenta de repetición < 0" + + #~ msgid "repetition value not constant" + #~ msgstr "el valor de repetición no es una constante" + + #~ msgid "bitstring repetition of non-constant boolean" + #~ msgstr "repetición de la cadena de bits de un booleano que no es constante" + + #~ msgid "string repetition operand is non-constant bitstring" + #~ msgstr "el operando de repetición de cadena es una cadena de bits no constante" + + #~ msgid "non-char, non-bit string repetition" + #~ msgstr "repetición de cadena que no es de bit ni char" + + #~ msgid "right operand of %s is not array of boolean" + #~ msgstr "el operando derecho de %s no es una matriz de boolean" + + #~ msgid "%s operator applied to boolean variable" + #~ msgstr "operador %s aplicado a una variable boolean" + + #~ msgid "non-boolean mode in conditional expression" + #~ msgstr "modo no-booleano en la expresión condicional" + + #~ msgid "decode_constant: invalid component_ref" + #~ msgstr "decode_constant: component_ref inválido" + + #~ msgid "decode_constant: mode and value mismatch" + #~ msgstr "decode_constant: no coinciden el modo y el valor" + + #~ msgid "decode_constant: cannot decode this mode" + #~ msgstr "decode_constant: no se puede decodificar este modo" + + #~ msgid "decode_constant_selective: mode and value mismatch" + #~ msgstr "decode_constant_selective: no coinciden el modo y el valor" + + #~ msgid "decode_constant_selective: cannot decode this mode" + #~ msgstr "decode_constant_selective: no se puede decodificar este modo" + + #~ msgid "can't write to %s" + #~ msgstr "no se puede escribir a %s" + + #~ msgid "FORBID is not yet implemented" + #~ msgstr "FORBID no se ha implementado aún" + + #~ msgid "function \"really_grant_this\" called for `%s'" + #~ msgstr "se llamó la función \"really_grant_this\" para `%s'" + + #~ msgid "non-integral text length" + #~ msgstr "longitud de texto que no es integral" + + #~ msgid "non-constant text length" + #~ msgstr "longitud de texto que no es constante" + + #~ msgid "text length must be greater than 0" + #~ msgstr "la longitud de texto debe ser más grande que 0" + + #~ msgid "argument %d of %s must be of mode ASSOCIATION" + #~ msgstr "el argumento %d de %s debe ser de modo ASSOCIATION" + + #~ msgid "argument %d of %s must be a location" + #~ msgstr "el argumento %d de %s debe ser una ubicación" + + #~ msgid "argument 2 of ASSOCIATE must not be an empty string" + #~ msgstr "el argumento 2 de ASSOCIATE no debe ser una cadena vacía" + + #~ msgid "argument 2 to ASSOCIATE must be a string" + #~ msgstr "el argumento 2 de ASSOCIATE debe ser una cadena" + + #~ msgid "argument 3 to ASSOCIATE must be a string" + #~ msgstr "el argumento 3 de ASSOCIATE debe ser una cadena" + + #~ msgid "too many arguments in call to MODIFY" + #~ msgstr "demasiados argumentos en la llamada a MODIFY" + + #~ msgid "argument 2 of MODIFY must not be an empty string" + #~ msgstr "el argumento 2 de MODIFY no debe ser una cadena vacía" + + #~ msgid "argument 2 to MODIFY must be a string" + #~ msgstr "el argumento 2 de MODIFY debe ser una cadena" + + #~ msgid "argument 3 to MODIFY must be a string" + #~ msgstr "el argumento 3 de MODIFY debe ser una cadena" + + #~ msgid "argument %d of %s must be an ACCESS or TEXT mode" + #~ msgstr "el argumento %d de %s debe ser un modo ACCESS o TEXT" + + #~ msgid "argument 4 of CONNECT must be of mode WHERE" + #~ msgstr "el argumento 4 de CONNECT debe ser de modo WHERE" + + #~ msgid "index expression for ACCESS without index" + #~ msgstr "expresión de índice para ACCESS sin índice" + + #~ msgid "incompatible index mode" + #~ msgstr "modo de índices incompatibles" + + #~ msgid "argument 3 to CONNECT must be of mode USAGE" + #~ msgstr "el argumento 3 de CONNECT debe ser de modo USAGE" + + #~ msgid "argument %d of %s must be of mode ACCESS" + #~ msgstr "el argumento %d de %s debe ser de modo ACCESS" + + #~ msgid "too few arguments in call to `readrecord'" + #~ msgstr "muy pocos argumentos en la llamada a `readrecord'" + + #~ msgid "incompatible record mode" + #~ msgstr "modo de registro incompatible" + + #~ msgid "store location must not be READonly" + #~ msgstr "la ubicación de almacenamiento no debe ser READonly" + + #~ msgid "too few arguments in call to `writerecord'" + #~ msgstr "muy pocos argumentos en la llamada a `writerecord'" + + #~ msgid "transfer to ACCESS without record mode" + #~ msgstr "transferencia a ACCESS sin modo de grabación" + + #~ msgid "argument %d of %s must be of mode TEXT" + #~ msgstr "el argumento %d de %s debe ser de modo TEXT" + + #~ msgid "TEXT doesn't have a location" + #~ msgstr "TEXT no tiene una ubicación" + + #~ msgid "incompatible index mode for SETETEXTACCESS" + #~ msgstr "modo de índice incompatible para SETTEXTACCESS" + + #~ msgid "incompatible record mode for SETTEXTACCESS" + #~ msgstr "modo de grabación incompatible para SETTEXTACCESS" + + #~ msgid "parameter 2 must be a location" + #~ msgstr "el parámetro 2 debe ser una ubicación" + + #~ msgid "incompatible modes in parameter 2" + #~ msgstr "modos incompatibles en el parámetro 2" + + #~ msgid "conditional expression not allowed in this context" + #~ msgstr "no se permite una expresión condicional en este contexto" + + #~ msgid "untyped expression as argument %d" + #~ msgstr "expresión sin tipo como argumento %d" + + #~ msgid "cannot process %d bits integer for READTEXT argument %d" + #~ msgstr "no se pueden procesar %d bits enteros para el argumento %d de READTEXT" + + #~ msgid "cannot process %d bits integer WRITETEXT argument %d" + #~ msgstr "no se pueden procesar %d bits enteros para el argumento %d de WRITETEXT" + + #~ msgid "argument %d is READonly" + #~ msgstr "el argumento %d es READonly" + + #~ msgid "argument %d must be referable" + #~ msgstr "el argumento %d debe ser referenciable" + + #~ msgid "cannot process argument %d of WRITETEXT, unknown size" + #~ msgstr "no se puede procesar el argumento %d de WRITETEXT, tamaño desconocido" + + #~ msgid "cannot process mode of argument %d for %sTEXT" + #~ msgstr "no se puede procesar el modo del argumento %d para %sTEXT" + + #~ msgid "too few arguments for this format string" + #~ msgstr "muy pocos argumentos para esta cadena de formato" + + #~ msgid "type of argument %d invalid for conversion code at offset %d" + #~ msgstr "el tipo del argumento %d es inválido para el código de conversión en el desplazamiento %d" + + #~ msgid "unmatched open paren" + #~ msgstr "paréntesis abierto sin coincidencia" + + #~ msgid "bad format specification character (offset %d)" + #~ msgstr "carácter de especificación de formato erróneo (desplazamiento %d)" + + #~ msgid "repetition factor overflow (offset %d)" + #~ msgstr "desbordamiento del factor de repetición (desplazamiento %d)" + + #~ msgid "duplicate qualifier (offset %d)" + #~ msgstr "calificador duplicado (desplazamiento %d)" + + #~ msgid "clause width overflow (offset %d)" + #~ msgstr "desbordamiento de la anchura de la cláusula (desplazamiento %d)" + + #~ msgid "no fraction (offset %d)" + #~ msgstr "no hay una fracción (desplazamiento %d)" + + #~ msgid "no fraction width (offset %d)" + #~ msgstr "no hay anchura de la fracción (desplazamiento %d)" + + #~ msgid "fraction width overflow (offset %d)" + #~ msgstr "desbordamiento de la anchura de la fracción (desplazamiento %d)" + + #~ msgid "no exponent (offset %d)" + #~ msgstr "no hay un exponente (desplazamiento %d)" + + #~ msgid "no exponent width (offset %d)" + #~ msgstr "no hay anchura del exponente (desplazamiento %d)" + + #~ msgid "exponent width overflow (offset %d)" + #~ msgstr "desbordamiento de la anchura del exponente (desplazamiento %d)" + + #~ msgid "internal error in check_format_string" + #~ msgstr "error interno en check_format_string" + + #~ msgid "no padding character (offset %d)" + #~ msgstr "no hay un carácter de relleno (desplazamiento %d)" + + #~ msgid "too many arguments for this format string" + #~ msgstr "demasiados argumentos para esta cadena de formato" + + #~ msgid "missing index expression" + #~ msgstr "falta la expresión de índice" + + #~ msgid "too few arguments in call to `writetext'" + #~ msgstr "muy pocos argumentos en la llamada a `writetext'" + + #~ msgid "argument 1 for WRITETEXT must be a TEXT or CHARS(n) VARYING location" + #~ msgstr "el argumento 1 para WRITETEXT debe ser una ubicación TEXT o CHARS(N) VARYING" + + #~ msgid "`format string' for WRITETEXT must be a CHARACTER string" + #~ msgstr "la `cadena de formato' para WRITETEXT debe ser una cadena CHARACTER" + + #~ msgid "too few arguments in call to `readtext'" + #~ msgstr "muy pocos argumentos en la llamada a `readtext'" + + #~ msgid "argument 1 for READTEXT must be a TEXT location or CHARS(n) [ VARYING ] expression" + #~ msgstr "el argumento 1 para READTEXT debe ser una ubicación TEXT o una expresión CHARS(n) [ VARYING ]" + + #~ msgid "`format string' for READTEXT must be a CHARACTER string" + #~ msgstr "la `cadena de formato' para READTEXT debe ser una cadena CHARACTER" + + #~ msgid "non-constant expression" + #~ msgstr "expresión no constante" + + #~ msgid "ignoring case upon input and" + #~ msgstr "ignorar mayúsculas y minúsculas en la entrada y" + + #~ msgid "making special words uppercase wouldn't work" + #~ msgstr "hacer que las palabras especiales estén en mayúsculas no funcionará" + + #~ msgid "making special words uppercase and" + #~ msgstr "hacer que las palabras especiales estén en mayúsculas e" + + #~ msgid " ignoring case upon input wouldn't work" + #~ msgstr " ignorar mayúsculas y minúsculas de la entrada no funcionará" + + #~ msgid "invalid C'xx' " + #~ msgstr "C'xx' inválido " + + #~ msgid "malformed exponent part of floating-point literal" + #~ msgstr "parte del exponente malformada de una literal de coma flotante" + + #~ msgid "real number exceeds range of REAL" + #~ msgstr "el número real excede el rango de REAL" + + #~ msgid "end-of-file in '<>' directive" + #~ msgstr "fin de fichero en la directiva '<>'" + + #~ msgid "unrecognized compiler directive" + #~ msgstr "no se reconoce la directiva del compilador" + + #~ msgid "unrecognized compiler directive `%s'" + #~ msgstr "no se reconoce la directiva del compilador `%s'" + + #~ msgid "unterminated control sequence" + #~ msgstr "secuencia de control sin terminar" + + #~ msgid "invalid integer literal in control sequence" + #~ msgstr "entero literal inválido en la secuencia de control" + + #~ msgid "control sequence overflow" + #~ msgstr "desbordamiento de la secuencia de control" + + #~ msgid "invalid control sequence" + #~ msgstr "secuencia de control inválida" + + #~ msgid "invalid base in read control sequence" + #~ msgstr "base inválida en la secuencia de control de lectura" + + #~ msgid "invalid digit in control sequence" + #~ msgstr "dígito inválido en la secuencia de control" + + #~ msgid "unterminated string literal" + #~ msgstr "cadena literal sin terminar" + + #~ msgid "invalid number format `%s'" + #~ msgstr "formato de número `%s' inválido" + + #~ msgid "integer literal too big" + #~ msgstr "entero literal demasiado grande" + + #~ msgid "can't find %s" + #~ msgstr "no se puede encontrar %s" + + #~ msgid "USE_SEIZE_FILE directive must be followed by string" + #~ msgstr "la directiva USE_SEIZE_FILE debe tener una cadena a continuación" + + #~ msgid "missing `=' in compiler directive" + #~ msgstr "falta un `=' en la directiva del compilador" + + #~ msgid "invalid value follows `=' in compiler directive" + #~ msgstr "valor inválido a continuación de `=' la directiva" + + #~ msgid "invalid `%c' character in name" + #~ msgstr "carácter `%c' inválido en el nombre" + + #~ msgid "`%s' not integer constant synonym " + #~ msgstr "`%s' no es un sinónimo de la constante entera " + + #~ msgid "value out of range in compiler directive" + #~ msgstr "valor fuera de rango en la directiva del compilador" + + #~ msgid "no modules seen" + #~ msgstr "no se ven los módulos" + + #~ msgid "modeless tuple not allowed in this context" + #~ msgstr "no se permite una tupla sin modo en este contexto" + + #~ msgid "IN expression does not have a mode" + #~ msgstr "la expresión IN no tiene un modo" + + #~ msgid "location enumeration for BOOLS" + #~ msgstr "enumeración de ubicación para BOOLS" + + #~ msgid "location enumeration for bit-packed arrays" + #~ msgstr "enumeración de ubicación para matrices empacadas de bits" + + #~ msgid "loop's IN expression is not a composite object" + #~ msgstr "la expresión IN del ciclo no es un objeto compuesto" + + #~ msgid "start expr must have discrete mode" + #~ msgstr "la expresión de inicio debe tener un modo discreto" + + #~ msgid "DO FOR start expression is a numbered SET" + #~ msgstr "el inicio de la expresión DO FOR es un SET numerado" + + #~ msgid "TO expression is a numbered SET" + #~ msgstr "la expresión TO es un SET numerado" + + #~ msgid "TO expr must have discrete mode" + #~ msgstr "la expresión TO debe tener un modo discreto" + + #~ msgid "start expr and TO expr must be compatible" + #~ msgstr "la expresión de inicio y la expresión TO deben ser compatibles" + + #~ msgid "BY expr must have discrete mode" + #~ msgstr "la expresión BY debe tener un modo discreto" + + #~ msgid "start expr and BY expr must be compatible" + #~ msgstr "la expresión de inicio y la expresión BY deben ser compatibles" + + #~ msgid "loop identifier undeclared" + #~ msgstr "identificador de ciclo sin declarar" + + #~ msgid "loop variable incompatible with start expression" + #~ msgstr "variable de ciclo incompatible con la expresión de inicio" + + #~ msgid "body of DO FOR will never execute" + #~ msgstr "el cuerpo de DO FOR nunca se ejecutará" + + #~ msgid "BY expression is negative or zero" + #~ msgstr "la expresión BY es negativa o cero" + + #~ msgid "can't iterate through array of BOOL" + #~ msgstr "no se puede iterar a través de una matriz de BOOL" + + #~ msgid "Can't iterate through array of BOOL" + #~ msgstr "No se puede iterar a través de una matriz de BOOL" + + #~ msgid "there was no start label to match the end label '%s'" + #~ msgstr "no hubo una etiqueta de inicio que coincidiera con la etiqueta final '%s'" + + #~ msgid "start label '%s' does not match end label '%s'" + #~ msgstr "la etiqueta de inicio '%s' no coincide con la etiqueta final '%s'" + + #~ msgid "`%s' not declared" + #~ msgstr "no se declaró `%s'" + + #~ msgid "no RETURN or RESULT in procedure" + #~ msgstr "no hay RETURN o RESULT en el procedimiento" + + # Posible error de dedo en 'prelix'. Notificar. cfuga + #~ msgid "PREFIXED clause with no prelix in unlabeled module" + #~ msgstr "cláusula PREFIXED sin prefijo en el módulo sin etiqueta" + + #~ msgid "internal parser error - expected token %d" + #~ msgstr "error interno del decodificador - se esperaba el elemento %d" + + #~ msgid "'%s!' is not followed by an identifier" + #~ msgstr "'%s!' no es seguido por un identificador" + + #~ msgid "expected a name here" + #~ msgstr "se esperaba un nombre aquí" + + #~ msgid "expected a name string here" + #~ msgstr "se esperaba una cadena de nombre aquí" + + #~ msgid "`%s' undeclared" + #~ msgstr "`%s' sin declarar" + + #~ msgid "action not allowed in SPEC MODULE" + #~ msgstr "no se pertite una acción en SPEC MODULE" + + #~ msgid "missing defining occurrence" + #~ msgstr "falta la ocurrencia que define" + + #~ msgid "bad defining occurrence following ','" + #~ msgstr "ocurrencia de definición errónea a continuación de ','" + + #~ msgid "missing '(' in exception list" + #~ msgstr "falta un '(' en la lista de excepción" + + #~ msgid "ON exception names must be unique" + #~ msgstr "los nombres de excepción ON deben ser únicos" + + #~ msgid "syntax error in exception list" + #~ msgstr "error sintáctico en la lista de excepción" + + #~ msgid "empty ON-condition" + #~ msgstr "condición ON vacía" + + #~ msgid "INIT not allowed at loc-identity declaration" + #~ msgstr "no se permite INIT en una declaración loc-identity" + + #~ msgid "'=' used where ':=' is required" + #~ msgstr "se usa '=' cuando se requiere ':='" + + #~ msgid "initialization is not allowed in spec module" + #~ msgstr "no se permite la iniciación en el módulo de especificaciones" + + #~ msgid "loc-identity declaration without initialization" + #~ msgstr "declaración loc-identity sin iniciación" + + #~ msgid "bad syntax following FORBID" + #~ msgstr "sintaxis errónea a continuación de FORBID" + + #~ msgid "expected a postfix name here" + #~ msgstr "se esperaba un nombre postfijo aquí" + + #~ msgid "expected another rename clause" + #~ msgstr "se esperaba otra cláusula de renombrado" + + #~ msgid "syntax error in parameter name list" + #~ msgstr "error de sintaxis en la lista nombres de parámetros" + + #~ msgid "NONREF specific without LOC in result attribute" + #~ msgstr "NONREF específico sin LOC en el atributo de resultado" + + #~ msgid "DYNAMIC specific without LOC in result attribute" + #~ msgstr "DYNAMIC específico sin LOC en el atributo de resultado" + + #~ msgid "exception names must be unique" + #~ msgstr "los nombres de excepción deben ser únicos" + + #~ msgid "must specify a PROCESS name" + #~ msgstr "se debe especificar un nombre de PROCESS" + + #~ msgid "SIGNAL must be in global reach" + #~ msgstr "SIGNAL debe estar en el alcance global" + + #~ msgid "syntax error while parsing signal definition statement" + #~ msgstr "error de sintaxis mientras se analizaban la declaración de definición de señales" + + #~ msgid "case range list" + #~ msgstr "lista de rango de case" + + #~ msgid "misplaced colon in case label" + #~ msgstr "punto y coma mal ubicado en la etiqueta case" + + #~ msgid "unrecognized case label list after ','" + #~ msgstr "no se reconoce la lista de etiquetas case después de ','" + + #~ msgid "bad ASM operand" + #~ msgstr "operando ASM erróneo" + + #~ msgid "readonly location modified by 'asm'" + #~ msgstr "ubicación de sólo lectura modificada por 'asm'" + + #~ msgid "expected 'TO' in step enumeration" + #~ msgstr "se esperaba 'TO' en la enumeración de pasos" + + #~ msgid "expected 'IN' in FOR control here" + #~ msgstr "se esperaba 'IN' en el control FOR aquí" + + #~ msgid "missing DELAY CASE alternative" + #~ msgstr "falta la alternativa DELAY CASE" + + #~ msgid "non-referable location in DO WITH" + #~ msgstr "ubicación no referenciable en DO WITH" + + #~ msgid "WITH element must be of STRUCT mode" + #~ msgstr "el elemento WITH debe ser de modo STRUCT" + + #~ msgid "missing ')' in signal/buffer receive alternative" + #~ msgstr "falta un ')' en la alternativa de recepción de señal/almacenamiento temporal" + + #~ msgid "misplaced 'IN' in signal/buffer receive alternative" + #~ msgstr "'IN' mal ubicado en la alternativa de recepción de señal/almacenamiento temporal" + + #~ msgid "missing RECEIVE alternative" + #~ msgstr "falta la alternativa RECEIVE" + + #~ msgid "PROCESS copy number must be integer" + #~ msgstr "el número de copia de PROCESS debe ser entero" + + #~ msgid "missing parenthesis for procedure call" + #~ msgstr "faltan paréntesis para la llamada del procedimiento" + + #~ msgid "expression is not an action" + #~ msgstr "la expresión no es una acción" + + #~ msgid "syntax error in action" + #~ msgstr "error sintáctico en la acción" + + #~ msgid "no handler is permitted on this action" + #~ msgstr "no se permite un manejador en esta acción" + + #~ msgid "definition follows action" + #~ msgstr "una definición a continuación de la acción" + + #~ msgid "bad tuple field name list" + #~ msgstr "lista de nombres de campos de tupla errónea" + + #~ msgid "invalid syntax for label in tuple" + #~ msgstr "sintaxis inválida para la etiqueta en la tupla" + + #~ msgid "bad syntax in tuple" + #~ msgstr "sintaxis errónea en la tupla" + + #~ msgid "non-mode name before tuple" + #~ msgstr "nombre que no es modo antes de la tupla" + + #~ msgid "invalid expression/location syntax" + #~ msgstr "sintaxis de expresión/ubicación inválida" + + #~ msgid "RECEIVE expression" + #~ msgstr "expresión RECEIVE" + + #~ msgid "there should not be a ';' here" + #~ msgstr "no debería estar un ';' aquí" + + #~ msgid "missing ELSE/ELSIF in IF expression" + #~ msgstr "falta un ELSE/ELSIF en la expresión IF" + + #~ msgid "conditional expression not allowed inside parentheses" + #~ msgstr "no se permiten expresiones condicionales dentro de paréntesis" + + #~ msgid "mode-less tuple not allowed inside parentheses" + #~ msgstr "no se permite una tupla sin modo dentro de paréntesis" + + #~ msgid "mixed numbered and unnumbered set elements is not standard" + #~ msgstr "un conjunto de elementos numerados y sin numerar mezclados no es estándard" + + #~ msgid "SET mode must define at least one named value" + #~ msgstr "el modo SET debe definir por lo menos un valor nombrado" + + #~ msgid "POS not allowed for ARRAY" + #~ msgstr "no se permite POS en ARRAY" + + #~ msgid "STEP not allowed in field definition" + #~ msgstr "no se permite STEP en la definición de campos" + + #~ msgid "missing field name" + #~ msgstr "falta el nombre del campo" + + #~ msgid "bad field name following ','" + #~ msgstr "nombre de campo erróneo a continuación de ','" + + #~ msgid "expected ':' in structure variant alternative" + #~ msgstr "se esperaba ':' en la alternativa de estructura variante" + + #~ msgid "missing field" + #~ msgstr "falta el campo" + + #~ msgid "VARYING bit-strings not implemented" + #~ msgstr "no se han implementado las cadenas de bit VARYING" + + #~ msgid "strings must be composed of chars" + #~ msgstr "las cadenas deben estar compuestas de caracteres" + + #~ msgid "BUFFER modes may not be readonly" + #~ msgstr "los modos BUFFER no pueden ser de sólo lectura" + + #~ msgid "EVENT modes may not be readonly" + #~ msgstr "los modos EVENT no pueden ser de sólo lectura" + + #~ msgid "SIGNAL is not a valid mode" + #~ msgstr "SIGNAL no es un modo válido" + + #~ msgid "syntax error - missing mode" + #~ msgstr "error sintáctico - modo faltante" + + #~ msgid "syntax error - expected a module or end of file" + #~ msgstr "error sintáctico - se esperaba un módulo o el final del fichero" + + #~ msgid " `%s', which depends on ..." + #~ msgstr " `%s', el cual depende de ..." + + #~ msgid "cycle: `%s' depends on ..." + #~ msgstr "ciclo: `%s' depende de ..." + + #~ msgid " `%s'" + #~ msgstr " `%s'" + + #~ msgid "SYN of this mode not allowed" + #~ msgstr "no se permite el SYN de este modo" + + #~ msgid "mode of SYN incompatible with value" + #~ msgstr "el modo de SYN es incompatible con el valor" + + #~ msgid "SYN value outside range of its mode" + #~ msgstr "valor SYN fuera del rango de su modo" + + #~ msgid "INIT string too large for mode" + #~ msgstr "la cadena INIT es demasiado grande para el modo" + + #~ msgid "value of %s is not a valid constant" + #~ msgstr "el valor de %s no es una constante válida" + + #~ msgid "mode with non-value property in signal definition" + #~ msgstr "modo sin propiedad que no es valor en la definición de la señal" + + #~ msgid "undeclared identifier `%s'" + #~ msgstr "identificador sin declarar `%s'" + + #~ msgid "RETURNS spec with invalid mode" + #~ msgstr "especificación de RETURNS con modo inválido" + + #~ msgid "operand to REF is not a mode" + #~ msgstr "el operando para REF no es un modo" + + #~ msgid "field with non-value mode in variant structure not allowed" + #~ msgstr "no se permite un campo con modo que no es valor en una estructura variante" + + #~ msgid "buffer element mode must not have non-value property" + #~ msgstr "el modo de un elemento de un almacenamiento temporal no debe tener una propiedad que no sea valor" + + #~ msgid "recordmode must not have the non-value property" + #~ msgstr "el modo de grabación no debe tener la propiedad que no es valor" + + #~ msgid "tasking code %ld out of range for `%s'" + #~ msgstr "el código de tarea %ld está fuera de rango para `%s'" + + #~ msgid "invalid attribute for argument `%s' (only IN or LOC allowed)" + #~ msgstr "atributo inválido para el argumento `%s' (solamente se permiten IN o LOC)" + + #~ msgid "PROCESS may only be declared at module level" + #~ msgstr "solamente se puede declarar PROCESS en el nivel de módulos" + + #~ msgid "process name %s never declared" + #~ msgstr "nunca se declaró el nombre de proceso %s" + + #~ msgid "you may only START a process, not a proc" + #~ msgstr "solamente se puede hacer START de un proceso, no de un procedimiento" + + #~ msgid "SET expression not a location" + #~ msgstr "la expresión SET no es una ubicación" + + #~ msgid "SET location must be INSTANCE mode" + #~ msgstr "la ubicación SET debe ser de modo INSTANCE" + + #~ msgid "too many arguments to process `%s'" + #~ msgstr "demasiados argumentos para el proceso `%s'" + + #~ msgid "too many arguments to process" + #~ msgstr "demasiados argumentos para el proceso" + + #~ msgid "too few arguments to process `%s'" + #~ msgstr "muy pocos argumentos para el proceso `%s'" + + #~ msgid "too few arguments to process" + #~ msgstr "muy pocos argumentos para el proceso" + + #~ msgid "COPY_NUMBER argument must be INSTANCE expression" + #~ msgstr "el argumento de COPY_NUMBER debe ser una expresión INSTANCE" + + #~ msgid "GEN_CODE argument must be a process or signal name" + #~ msgstr "el argumento de GEN_CODE debe ser un proceso o un nombre de señal" + + #~ msgid "GEN_INST parameter 2 must be an integer mode" + #~ msgstr "el parámetor 2 de GEN_INST debe ser un modo entero" + + #~ msgid "GEN_INST parameter 1 must be a PROCESS or an integer expression" + #~ msgstr "el parámetro 1 de GEN_INST debe ser un PROCESS o una expresión entera" + + #~ msgid "%s is not a declared process" + #~ msgstr "%s no es un proceso declarado" + + #~ msgid "PROC_TYPE argument must be INSTANCE expression" + #~ msgstr "el argumento de PROC_TYPE debe ser una expresión INSTANCE" + + #~ msgid "QUEUE_LENGTH argument must be a BUFFER/EVENT location" + #~ msgstr "el argumento de QUEUE_LENGTH debe ser una ubicación BUFFER/EVENT" + + #~ msgid "SEND requires a SIGNAL; %s is not a SIGNAL name" + #~ msgstr "SEND requiere un SIGNAL; %s no es nombre de SIGNAL" + + #~ msgid "too many values for SIGNAL `%s'" + #~ msgstr "demasiados valores para SIGNAL `%s'" + + #~ msgid "too few values for SIGNAL `%s'" + #~ msgstr "muy pocos valores para SIGNAL `%s'" + + #~ msgid "signal sent without priority" + #~ msgstr "se envió una señal sin una prioridad" + + #~ msgid " and no default priority was set." + #~ msgstr " y no se estableción una prioridad por omisión." + + #~ msgid " PRIORITY defaulted to 0" + #~ msgstr " PRIORITY es 0 por omisión" + + #~ msgid "SEND without a destination instance" + #~ msgstr "SEND sin una instancia de destino" + + #~ msgid " and no destination process specified" + #~ msgstr " y no se especificó un proceso destino" + + #~ msgid " for the signal" + #~ msgstr " para la señal" + + #~ msgid "SEND to ANY copy of process `%s'" + #~ msgstr "SEND a ANY copia del proceso `%s'" + + #~ msgid "SEND TO must be an INSTANCE mode" + #~ msgstr "SEND TO debe ser de un modo INSTANCE" + + #~ msgid "SEND WITH must have a mode" + #~ msgstr "SEND WITH debe tener un modo" + + #~ msgid "internal error: RECEIVE CASE stack invalid" + #~ msgstr "error interno: pila RECEIVE CASE inválida" + + #~ msgid "SET requires INSTANCE location" + #~ msgstr "SET requiere de una ubicación INSTANCE" + + #~ msgid "SIGNAL in RECEIVE CASE alternative follows" + #~ msgstr "SIGNAL en una alternativa RECEIVE CASE a continuación de" + + #~ msgid " a BUFFER name on line %d" + #~ msgstr " un nombre de BUFFER en la línea %d" + + #~ msgid "SIGNAL `%s' has no data fields" + #~ msgstr "SIGNAL `%s' no tiene campos de datos" + + #~ msgid "SIGNAL `%s' requires data fields" + #~ msgstr "SIGNAL `%s' requiere de campos de datos" + + #~ msgid "too few data fields provided for `%s'" + #~ msgstr "se proporcionaron muy pocos campos de datos para `%s'" + + #~ msgid "too many data fields provided for `%s'" + #~ msgstr "se proporcionaron demasiados campos de datos para `%s'" + + #~ msgid "BUFFER in RECEIVE CASE alternative follows" + #~ msgstr "BUFFER en la alternavita RECEIVE CASE a continuación de" + + #~ msgid " a SIGNAL name on line %d" + #~ msgstr " un nombre SIGNALE en la línea %d" + + #~ msgid "BUFFER in RECEIVE CASE alternative must be a location" + #~ msgstr "BUFFER en la alternativa RECEIVE CASE debe ser una ubicación" + + #~ msgid "buffer receive alternative requires only 1 defining occurrence" + #~ msgstr "la alternativa de recepción de almacenamiento temporal sólo requiere de una ocurrencia de definición" + + #~ msgid "incompatible modes in receive buffer alternative" + #~ msgstr "modos incompatibles en la alternativa de almacenamiento temporal de recepción" + + #~ msgid "defining occurrence in receive buffer alternative must be a location" + #~ msgstr "la ocurrencia de definición en la alternativa de almacenamiento temporal de recepción debe ser una ubicación" + + #~ msgid "buffer receive alternative without `IN location'" + #~ msgstr "alternativa de almacenamiento temporal de recepción sin `IN ubicación'" + + #~ msgid "RECEIVE CASE alternative must specify a SIGNAL name or BUFFER location" + #~ msgstr "la alternativa RECEIVE CASE debe especificar un nombre SIGNAL o una ubicación BUFFER" + + #~ msgid "RECEIVE CASE without alternatives" + #~ msgstr "RECEIVE CASE sin alternativas" + + #~ msgid "CONTINUE requires an event location" + #~ msgstr "CONTINUE requiere de una ubicación de evento" + + #~ msgid "PRIORITY must be of integer type" + #~ msgstr "PRIORITY debe ser de tipo entero" + + #~ msgid "delay alternative must be an EVENT location" + #~ msgstr "la alternativa de retardo debe ser una ubicación EVENT" + + #~ msgid "DELAY CASE without alternatives" + #~ msgstr "DELAY CASE sin alternativas" + + #~ msgid "DELAY action requires an event location" + #~ msgstr "la acción DELAY requiere una ubicación de evento" + + #~ msgid "PRIORITY in DELAY action must be of integer type" + #~ msgstr "PRIORITY en la acción DELAY debe ser de tipo entero" + + #~ msgid "DELAY action without priority." + #~ msgstr "una acción DELAY sin prioridad." + + #~ msgid "send buffer action requires a BUFFER location" + #~ msgstr "la acción de almacenamiento temporal de envío requiere una ubicación BUFFER" + + #~ msgid "there must be only 1 value for send buffer action" + #~ msgstr "solamente debe haber 1 valor para la acción del almacenamiento temporal de envío" + + #~ msgid "convert failed for send buffer action" + #~ msgstr "falló la conversión para la acción del almacenamiento temporal de envío" + + #~ msgid "incompatible modes in send buffer action" + #~ msgstr "modos incompatibles en la acción de almacenamiento temporal de envío" + + #~ msgid "buffer sent without priority" + #~ msgstr "almacenamiento temporal enviado sin prioridad" + + #~ msgid "WITH not allowed for send buffer action" + #~ msgstr "no se permite WITH para la acción del almacenamiento temporal de envío" + + #~ msgid "TO not allowed for send buffer action" + #~ msgstr "no se permite TO para la acción del almacenamiento temporal de envío" + + #~ msgid "SEND requires a BUFFER; `%s' is not a BUFFER name" + #~ msgstr "SEND requiere un BUFFER; `%s' no es un nombre de BUFFER" + + #~ msgid "non-integral max queue size for EVENT/BUFFER mode" + #~ msgstr "tamaño máximo de cola no integral para el modo EVENT/BUFFER" + + #~ msgid "non-constant max queue size for EVENT/BUFFER mode" + #~ msgstr "tamaño máximo de cola no constante para el modo EVENT/BUFFER" + + #~ msgid "max queue_size for EVENT/BUFFER is not positive" + #~ msgstr "el tamaño máximo de cola para EVENT/BUFFER no es positivo" + + #~ msgid "absolute time value must be of mode TIME" + #~ msgstr "el valor de tiempo absoluto debe ser de modo TIME" + + #~ msgid "duration primitive value must be of mode DURATION" + #~ msgstr "el valor de duración primitivo debe ser de modo DURATION" + + #~ msgid "string length > UPPER (UINT)" + #~ msgstr "longitud de la cadena > UPPER (UINT)" + + #~ msgid "can only build a powerset from a discrete mode" + #~ msgstr "solamente se puede construir un powerset a partir de un modo discreto" + + #~ msgid "non-constant bitstring size invalid" + #~ msgstr "tamaño inválido de cadena de bits no constante" + + #~ msgid "non-constant powerset size invalid" + #~ msgstr "tamaño inválido de powerset no constante" + + #~ msgid "array or string index is a mode (instead of a value)" + #~ msgstr "el índice de una matriz o una cadena es un modo (en lugar de un valor)" + + #~ msgid "index is not an integer expression" + #~ msgstr "el índice no es una expresión entera" + + #~ msgid "index not compatible with index mode" + #~ msgstr "el índice no es compatible con el modo de índice" + + #~ msgid "index is not discrete" + #~ msgstr "el índice no es discreto" + + #~ msgid "possible internal error - slice argument is neither referable nor constant" + #~ msgstr "posible error interno - la rebanada del argumento no es referenciable ni constante" + + #~ msgid "bit array slice with non-constant length" + #~ msgstr "rebanada de la matriz de bits con longitud no constante" + + #~ msgid "bitstring slice with non-constant length" + #~ msgstr "rebanada de la cadena de bits con longitud no constante" + + #~ msgid "slice operation on non-array, non-bitstring value not supported" + #~ msgstr "no se da soporte a operaciones de rebanada en valores que no sean matrices o cadenas de bits" + + #~ msgid "can only take slice of array or string" + #~ msgstr "sólo se puede tomar una rebanada de una matriz o una cadena" + + #~ msgid "slice length is not an integer" + #~ msgstr "la longitud de la rebanada no es un entero" + + #~ msgid "slice length out-of-range" + #~ msgstr "longitud de la rebanada fuera de rango" + + #~ msgid "too many index expressions" + #~ msgstr "demasiadas expresiones índice" + + #~ msgid "array index is not discrete" + #~ msgstr "el índice de matriz no es discreto" + + #~ msgid "invalid compound index for bitstring mode" + #~ msgstr "índice compuesto inválido para el modo de cadena de bits" + + # FIXME: revisar que variable_size sea algo fijo en el código. cfuga + #~ msgid "conversions from variable_size value" + #~ msgstr "conversiones desde modo de tamaño variable" + + # FIXME: revisar que variable_size sea algo fijo en el código. cfuga + #~ msgid "conversions to variable_size mode" + #~ msgstr "conversiones a modo de tamaño variable" + + #~ msgid "cannot convert to float" + #~ msgstr "no se puede convertir a coma flotante" + + #~ msgid "cannot convert float to this mode" + #~ msgstr "no se puede convertir un número de coma flotante a este modo" + + #~ msgid "OVERFLOW in expression conversion" + #~ msgstr "OVERFLOW en la conversión de la expresión" + + # ¿Utilizar mejor 'fuera' que 'no dentro'? cfuga + #~ msgid "overflow (not inside function)" + #~ msgstr "desbordamiento (no dentro de la función)" + + #~ msgid "possible overflow (not inside function)" + #~ msgstr "posible desbordamiento (no dentro de la función)" + + #~ msgid "expression will always cause OVERFLOW" + #~ msgstr "la expresión siempre causará OVERFLOW" + + #~ msgid "not implemented: constant conversion from that kind of expression" + #~ msgstr "no implementado: conversión constante para ese tipo de expresión" + + #~ msgid "not implemented: constant conversion to that kind of mode" + #~ msgstr "no implementado: conversión constante a ese tipo de modo" + + #~ msgid "non-standard, non-portable value conversion" + #~ msgstr "conversión de valor no estándard y no transportable" + + #~ msgid "location conversion between differently-sized modes" + #~ msgstr "conversión de ubicaciones entre modos de tamaños diferentes" + + #~ msgid "unsupported value conversion" + #~ msgstr "conversión de valor sin soporte" + + #~ msgid "operand to bin must be a non-negative integer literal" + #~ msgstr "el operando para bin debe ser una literal entera no negativa" + + #~ msgid "size %d of BIN too big - no such integer mode" + #~ msgstr "el tamaño %d de BIN es demasiado grande - no existe tal modo entero" + + #~ msgid "BIN in pass 2" + #~ msgstr "BIN en el paso 2" + + #~ msgid "mode of tuple is neither ARRAY, STRUCT, nor POWERSET" + #~ msgstr "el modo de la tupla no es ARRAY, STRUCT ni POWERSET" + + #~ msgid "internal error in chill_root_resulting_mode" + #~ msgstr "error interno en chill_root_resulting_mode" + + #~ msgid "string lengths not equal" + #~ msgstr "la longitud de las cadenas no es igual" + + #~ msgid "can't do ARRAY assignment - too large" + #~ msgstr "no se puede hacer la asignación ARRAY - es demasiado grande" + + #~ msgid "rhs of array assignment is not addressable" + #~ msgstr "el lado derecho de la asignación de matriz no es direccionable" + + #~ msgid "non-constant expression for BIN" + #~ msgstr "expresión no constante para BIN" + + #~ msgid "expression for BIN must not be negative" + #~ msgstr "la expresión para BIN no debe ser negativa" + + #~ msgid "cannot process BIN (>32)" + #~ msgstr "no se puede procesar BIN (>32)" + + #~ msgid "bounds of range are not compatible" + #~ msgstr "los límites del rango no son compatibles" + + #~ msgid "negative string length" + #~ msgstr "longitud negativa de la cadena" + + #~ msgid "range's lower bound and parent mode don't match" + #~ msgstr "el límite inferior del rango y el modo padre no coinciden" + + #~ msgid "range's upper bound and parent mode don't match" + #~ msgstr "el límite superior del rango y el modo padre no coinciden" + + #~ msgid "making range from non-mode" + #~ msgstr "haciendo un rango a partir de algo que no es modo" + + #~ msgid "floating point ranges" + #~ msgstr "rangos de coma flotante" + + #~ msgid "range mode has non-constant limits" + #~ msgstr "el modo de rango tiene límites no constantes" + + #~ msgid "range's high bound < mode's low bound" + #~ msgstr "límite superior del rango < límite inferior del modo" + + #~ msgid "range's high bound > mode's high bound" + #~ msgstr "límite superior del rango > límite superior del modo" + + #~ msgid "range mode high bound < range mode low bound" + #~ msgstr "límite superior del modo del rango < límite inferior del modo del rango" + + #~ msgid "range's low bound < mode's low bound" + #~ msgstr "límite inferior del rango < límite inferior del modo" + + #~ msgid "range's low bound > mode's high bound" + #~ msgstr "límite inferior del rango > límite superior del modo" + + #~ msgid "stepsize in STEP must be an integer constant" + #~ msgstr "el tamaño del paso en STEP debe ser una constante entera" + + #~ msgid "stepsize in STEP must be > 0" + #~ msgstr "el tamaño del paso en STEP debe ser > 0" + + #~ msgid "stepsize in STEP must be the natural width of the array element mode" + #~ msgstr "el tamaño del paso en STEP debe ser la anchura natural del modo del elemento de la matriz" + + #~ msgid "starting word in POS must be an integer constant" + #~ msgstr "la palabra de inicio en POS debe ser una constante entera" + + #~ msgid "starting word in POS must be >= 0" + #~ msgstr "la palabra de inicio en POS debe ser >=0" + + #~ msgid "starting word in POS within STEP must be 0" + #~ msgstr "la palabra de inicio en POS dentro de STEP debe ser 0" + + #~ msgid "starting bit in POS must be an integer constant" + #~ msgstr "el bit de inicio en POS debe ser una constante entera" + + #~ msgid "starting bit in POS within STEP must be 0" + #~ msgstr "el bit de inicio en POS dentro de STEP debe ser 0" + + #~ msgid "starting bit in POS must be >= 0" + #~ msgstr "el bit de inicio en POS debe ser >= 0" + + #~ msgid "starting bit in POS must be < the width of a word" + #~ msgstr "el bit de inicio en POS debe ser < la anchura de una palabra" + + #~ msgid "length in POS must be an integer constant" + #~ msgstr "la longitud en POS debe ser una constante entera" + + #~ msgid "length in POS must be > 0" + #~ msgstr "la longitud en POS debe ser > 0" + + #~ msgid "end bit in POS must be an integer constant" + #~ msgstr "el bit final en POS debe ser una constante entera" + + #~ msgid "end bit in POS must be >= the start bit" + #~ msgstr "el bit final en POS debe ser >= el bit de inicio" + + #~ msgid "end bit in POS must be < the width of a word" + #~ msgstr "el bit final en POS debe ser < la anchura de una palabra" + + #~ msgid "the length specified on POS within STEP must be the natural length of the array element type" + #~ msgstr "la longitud especificada en POS dentro de STEP debe ser la longitud natural del tipo del elemento de la matriz" + + #~ msgid "step size in STEP must be >= the length in POS" + #~ msgstr "el tamaño del paso en STEP debe ser >= la longitud en POS" + + #~ msgid "array index must be a range, not a single integer" + #~ msgstr "el índice de la matriz debe ser un rango, no un entero simple" + + #~ msgid "array index is not a discrete mode" + #~ msgstr "el índice de la matriz no es un modo discreto" + + #~ msgid "the length specified on POS must be the natural length of the field type" + #~ msgstr "la longitud especificada en POS debe ser la longitud natural del tipo del campo" + + #~ msgid "STRUCT fields must be layed out in monotonically increasing order" + #~ msgstr "los campos STRUCT deben ser acomodados en un orden incrementado monotónicamente" + + #~ msgid "if one field has a POS layout, then all fields must have a POS layout" + #~ msgstr "si un campo tiene una disposición POS, entonces todos los campos deben tener una disposición POS" + + #~ msgid "parameterized structures not implemented" + #~ msgstr "no se han implementado las estructuras parametrizadas" + + #~ msgid "invalid parameterized type" + #~ msgstr "tipo parametrizado inválido" + + #~ msgid "abstract virtual `%#D' called from constructor" + #~ msgstr "virtual abstracto `%#D' llamado desde un constructor" + + #~ msgid "abstract virtual `%#D' called from destructor" + #~ msgstr "virtual abstracto `%#D' llamado desde un destructor" + + #~ msgid " perhaps you want `typename %T::%D' to make it a type" + #~ msgstr " tal vez quiere `typename %T::%D' para hacerlo un tipo" + + #~ msgid "discarding `const' applied to a reference" + #~ msgstr "descartando `const' aplicado a una referencia" + + #~ msgid "discarding `volatile' applied to a reference" + #~ msgstr "descartando `volatile' aplicado a una referencia" + + #~ msgid "parser lost in parsing declaration of `%D'" + #~ msgstr "se perdió el decodificador en la declaración de decodificación de `%D'" + + #~ msgid "`%T' cannot be `restrict'-qualified" + #~ msgstr "`%T' no se puede calificar con `restrict'" + + #~ msgid "`%T' cannot be `const'-, `volatile'-, or `restrict'-qualified" + #~ msgstr "`%T' no puede ser calificado con `const', `volatile' o `restrict'" + + #~ msgid "ISO C++ forbids using pointer of type `void *' in pointer arithmetic" + #~ msgstr "ISO C++ prohibe el uso de un apuntador a un tipo de tipo `void *' en la aritmética de apuntadores" + + #~ msgid "ISO C++ forbids using a pointer-to-function in pointer arithmetic" + #~ msgstr "ISO C++ prohibe el uso de un apuntador a función en la aritmética de apuntadores" + + #~ msgid "ISO C++ forbids using a pointer to member function in pointer arithmetic" + #~ msgstr "ISO C++ prohibe el uso de un apuntador a una función miembro en la aritmética de apuntadores" + + #~ msgid "ISO C++ forbids using pointer to a member in pointer arithmetic" + #~ msgstr "ISO C++ prohibe el uso de un apuntador a un miembro en la aritmética de apuntadores" + + #~ msgid "Extra label definition %A at %0 -- perhaps previous label definition %B at %1 should have CONTINUE statement?" + #~ msgstr "Definición de etiqueta extra %A en %0 -- ¿tal vez la definición de la etiqueta anterior %B en %1 debe tener una declaración CONTINUE?" + + #~ msgid "Extra label definition %A at %0 following label definition %B at %1" + #~ msgstr "Definición de etiqueta extra %A en %0 a continuación de la definición de la etiqueta %B en %1" + + #~ msgid "Continuation indicator at %0 invalid on first non-comment line of file or following END or INCLUDE [info -f g77 M LEX]" + #~ msgstr "Indicador de continuación en %0 inválido en la primera línea del fichero que no es comentario o a continuación de END o INCLUDE [info -f g77 M LEX]" + + #~ msgid "Continuation indicator at %0 invalid here [info -f g77 M LEX]" + #~ msgstr "Indicador de continuación en %0 inválido aquí [info -f g77 M LEX]" + + #~ msgid "Integer at %0 too large except as negative number (preceded by unary minus sign)" + #~ msgstr "Entero en %0 demasiado grande excepto como número negativo (precedido por el signo de menos unario)" + + #~ msgid "Non-negative integer at %0 too large" + #~ msgstr "Entero no negativo en %0 demasiado grande" + + #~ msgid "Integer at %0 too large; even though preceded by unary minus sign at %1, subsequent operator at %2 has precedence over unary minus -- enclose unary minus sign and integer in parentheses to force precedence" + #~ msgstr "Entero en %0 demasiado grande; aún estando precedido por el signo menos unario en %1, el operador subsecuente en %2 tiene precedencia sobre el menos unario -- encierre el signo menos unario y el entero en paréntesis para forzar la precedencia" + + #~ msgid "Integer at %0 too large (%2 has precedence over %1)" + #~ msgstr "Entero en %0 demasiado grande (%2 tiene precedencia sobre %1)" + + #~ msgid "Integer at %0 too large; even though preceded by minus sign at %1, because minus sign is a binary, not unary, operator -- insert plus sign before minus sign to change it to a unary minus sign" + #~ msgstr "Entero en %0 demasiado grande; aún estando precedido por el signo menos en %1, porque el signo menos es un operador binario, no unario -- inserte el signo más antes del signo menos para cambiarlo a un signo menos unario" + + #~ msgid "Integer at %0 too large (needs unary, not binary, minus at %1)" + #~ msgstr "Entero en %0 demasiado grande (necesita un menos unario, no binario, en %1)" + + #~ msgid "Integer at %0 too large; even though preceded by minus sign at %1, subsequent operator at %2 has precedence over minus, and that minus sign should be a unary minus rather than a binary minus -- insert plus sign before minus sign to change it to a unary minus sign, and enclose unary minus sign and integer in parentheses to force precedence" + #~ msgstr "Entero en %0 demasiado grande; aún precedido por un signo menos en %1, el operador subsecuente en %2 tiene precedencia sobre el menos, y ese signo menos debería ser un menos unario en lugar de un menos binario -- inserte el signo menos antes del signo menos para cambiarlo a un signo menos unario, y ponga dentro de paréntesis el signo unario menos y el entero para forzar la precedencia" + + #~ msgid "Integer at %0 too large (%2 has precedence over %1, which needs to be unary, not binary, minus)" + #~ msgstr "Entero en %0 demasiado grande (%2 tiene precedencia sobre %1, el cual necesita ser un menos unario, no binario)" + + #~ msgid "Period at %0 not followed by valid keyword forming a valid binary operator; `.%A.' is not a valid binary operator" + #~ msgstr "El punto en %0 no está seguido por una palabra clave válida que forme un operador binario válido; `.%A.' no es un operador binario válido" + + #~ msgid "`.%A.' at %0 not a binary operator" + #~ msgstr "`.%A.' en %0 no es un operador binario" + + #~ msgid "Double-quote at %0 not followed by a string of valid octal digits at %1" + #~ msgstr "La comilla doble en %0 no está seguida por una cadena de dígitos octales válidos en %1" + + #~ msgid "Invalid octal constant at %0" + #~ msgstr "Constante octal inválida en %0" + + # No me gusta esta traducción (y las que siguen del estilo). cfuga + #~ msgid "Invalid binary digit(s) found in string of digits at %0" + #~ msgstr "Se encontró(aron) (un) dígito(s) binario(s) inválidos en la cadena de dígitos en %0" + + #~ msgid "Invalid binary constant at %0" + #~ msgstr "Constante binaria inválida en %0" + + #~ msgid "Invalid hexadecimal digit(s) found in string of digits at %0" + #~ msgstr "Se encontró(aron) (un) dígito(s) hexadecimal(es) inválidos en la cadena de dígitos en %0" + + #~ msgid "Invalid hexadecimal constant at %0" + #~ msgstr "Constante hexadecimal inválida en %0" + + #~ msgid "Invalid octal digit(s) found in string of digits at %0" + #~ msgstr "Se encontró(aron) (un) dígito(s) octal(es) inválidos en la cadena de dígitos en %0" + + #~ msgid "Invalid radix specifier `%A' at %0 for typeless constant at %1" + #~ msgstr "Especificador de radical `%A' inválido en %0 para la constante sin tipo en %1" + + #~ msgid "Invalid typeless constant at %1" + #~ msgstr "Constante sin tipo inválida en %1" + + #~ msgid "%A part of complex constant at %0 must be a real or integer constant -- otherwise use CMPLX() or COMPLEX() in place of ()" + #~ msgstr "%A parte de la constante compleja en %0 debe ser una constante real o entera -- de otra forma use CMPLX() o COMPLEX() en lugar de ()" + + #~ msgid "%A part of complex constant at %0 not a real or integer constant" + #~ msgstr "%A parte de la constante compleja en %0 no es una constante real o entera" + + #~ msgid "Invalid keyword `%%%A' at %0 in this context" + #~ msgstr "Palabra clave `%%%A' inválida en %0 en este contexto" + + #~ msgid "Invalid keyword `%%%A' at %0" + #~ msgstr "Palabra clave `%%%A' inválida en %0" + + #~ msgid "Null expression between %0 and %1 invalid in this context" + #~ msgstr "Expresión nula entre %0 y %1 inválida en este contexto" + + #~ msgid "Invalid null expression between %0 and %1" + #~ msgstr "Expresión nula inválida entre %0 y %1" + + #~ msgid "Concatenation operator at %0 must operate on two subexpressions of character type, but neither subexpression at %1 or %2 is of character type" + #~ msgstr "El operador de concatenación %0 debe operar en dos subexpresiones de tipo carácter, pero ninguna subexpresión en %1 o %2 es de tipo carácter" + + #~ msgid "Invalid operands at %1 and %2 for concatenation operator at %0" + #~ msgstr "Operandos inválidos en %1 y %2 para el operador de concatenación en %0" + + #~ msgid "Concatenation operator at %0 must operate on two subexpressions of character type, but the subexpression at %1 is not of character type" + #~ msgstr "El operando de concatenación en %0 debe operar en dos subexpresiones de tipo carácter, pero la subexpresión en %1 no es de tipo carácter" + + #~ msgid "Invalid operand at %1 for concatenation operator at %0" + #~ msgstr "Operando inválido en %1 para el operador de concatenación en %0" + + #~ msgid "Concatenation operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning character scalars, or a combination of both -- but the subexpression at %1 is %A" + #~ msgstr "El operador de concatenación en %0 debe operar en dos subexpresiones escalares (no matrices), dos invocaciones de la función regresan caracteres escalares, o una combinación de ambos -- pero la subexpresión en %1 es %A" + + #~ msgid "Invalid operand (is %A) at %1 for concatenation operator at %0" + #~ msgstr "Operando inválido (es %A) en %1 para el operador de concatenación en %0" + + #~ msgid "Arithmetic operator at %0 must operate on two subexpressions of arithmetic type, but neither subexpression at %1 or %2 is of arithmetic type" + #~ msgstr "Operador aritmético en %0 debe operar en dos subexpresiones de tipo aritmético, pero ninguna subexpresión en %1 o %2 es de tipo aritmético" + + #~ msgid "Invalid operands at %1 and %2 for arithmetic operator at %0" + #~ msgstr "Operandos inválidos en %1 y %2 para el operador aritmético en %0" + + #~ msgid "Arithmetic operator at %0 must operate on two subexpressions of arithmetic type, but the subexpression at %1 is not of arithmetic type" + #~ msgstr "Operador aritmético en %0 debe operar en dos subexpresiones de tipo aritmético, pero la subexpresión en %1 no es de tipo aritmético" + + #~ msgid "Invalid operand at %1 for arithmetic operator at %0" + #~ msgstr "Operando inválido en %1 para el operador aritmético en %0" + + #~ msgid "Arithmetic operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning arithmetic scalars, or a combination of both -- but the subexpression at %1 is %A" + #~ msgstr "Operador aritmético en %0 debe operar en dos expresiones escalares (no matrices), dos invocaciones de la función regresan escalares aritméticos, o una combinación de ambos -- pero la subexpresión en %1 es %A" + + #~ msgid "Invalid operand (is %A) at %1 for arithmetic operator at %0" + #~ msgstr "Operando inválido (es %A) en %1 para el operador aritmético en %0" + + #~ msgid "Character constant at %0 has no closing quote at %1 [info -f g77 M LEX]" + #~ msgstr "La constante de carácter en %0 no tiene comilla que cierra en %1 [info -f g77 M LEX]" + + #~ msgid "Unterminated character constant at %0 [info -f g77 M LEX]" + #~ msgstr "Constante de carácter inválida sin terminar en %0 [info -f g77 M LEX]" + + #~ msgid "Continuation line at %0 must have initial `&' since it continues a character context [info -f g77 M LEX]" + #~ msgstr "La continuación de línea en %0 debe tener un `&' inicial ya que continúa un contexto de carácter [info -f g77 M LEX]" + + #~ msgid "Missing initial `&' on continuation line at %0 [info -f g77 M LEX]" + #~ msgstr "Falta el `&' inicial en la continuación de línea en %0 [info -f g77 M LEX]" + + #~ msgid "Continuation line at %0 must have initial `&' since it continues a split lexical token [info -f g77 M LEX]" + #~ msgstr "La continuación de línea en %0 debe tener un `&' ya que continúa un elemento léxico dividido [info -f g77 M LEX]" + + #~ msgid "Continuation line at %0 invalid because it consists only of a single `&' as the only nonblank character" + #~ msgstr "La continuación de línea en %0 es inválida porque sólo consiste de un `&' sencillo como el único carácter que no es blanco" + + #~ msgid "Invalid continuation line at %0" + #~ msgstr "Continuación de línea inválida en %0" + + #~ msgid "Statement at %0 begins with invalid token [info -f g77 M LEX]" + #~ msgstr "La declaración en %0 empieza con un elemento inválido [info -f g77 M LEX]" + + #~ msgid "Invalid statement at %0 [info -f g77 M LEX]" + #~ msgstr "Declaración inválida en %0 [info -f g77 M LEX]" + + #~ msgid "Unrecognized statement name at %0 and invalid form for assignment or statement-function definition at %1" + #~ msgstr "Nombre de declaración no reconocido en %0 y forma inválida para la asignación o la definición de la declaración de la función en %1" + + #~ msgid "Invalid statement at %0" + #~ msgstr "Declaración inválida en %0" + + #~ msgid "Invalid form for %A statement at %0" + #~ msgstr "Forma inválida para la declaración %A en %0" + + #~ msgid "Invalid %A statement at %0" + #~ msgstr "Declaración %A inválida en %0" + + #~ msgid "Invalid use of hollerith constant in statement at %0 -- enclose the constant in parentheses (for example, change BACKSPACE 2HAB to BACKSPACE (2HAB))" + #~ msgstr "Uso inválido de una constante hollerith en la declaración en %0 -- encierre la constante en paréntesis (por ejemplo, cambie BACKSPACE 2HAB a BACKSPACE (2HAB))" + + #~ msgid "Enclose hollerith constant in statement at %0 in parentheses" + #~ msgstr "Encierre la constante hollerith en paréntesis en la declaración en %0" + + #~ msgid "nP control edit descriptor not followed by comma but followed by edit descriptor at %0 other than D, E, EN, F, or G" + #~ msgstr "El descriptor de edición de control nP no está seguido de una coma sin por un descriptor de edición en %0 diferente de D, E, EN, F o G" + + #~ msgid "Invalid edit descriptor at %0 following nP control edit descriptor" + #~ msgstr "Descriptor de edición inválido en %0 a continuación del descriptor de edición de control nP" + + #~ msgid "Invalid I specifier in FORMAT statement at %0 -- correct form: [r]Iw.[m]" + #~ msgstr "Especificador I inválido en la declaración FORMAT en %0 -- forma correcta: [r]Iw.[m]" + + #~ msgid "Invalid I specifier in FORMAT statement at %0" + #~ msgstr "Especificador I inválido en la declaración FORMAT en %0" + + #~ msgid "Invalid B specifier in FORMAT statement at %0 -- correct form: [r]Bw.[m]" + #~ msgstr "Especificador B inválido en la declaración FORMAT en %0 -- forma correcta: [r]Bw.[m]" + + #~ msgid "Invalid B specifier in FORMAT statement at %0" + #~ msgstr "Especificador B inválido en la declaración FORMAT en %0" + + #~ msgid "Invalid O specifier in FORMAT statement at %0 -- correct form: [r]Ow.[m]" + #~ msgstr "Especificador O inválido en la declaración FORMAT en %0 -- forma correcta: [r]Ow.[m]" + + #~ msgid "Invalid O specifier in FORMAT statement at %0" + #~ msgstr "Especificador O inválido en la declaración FORMAT en %0" + + #~ msgid "Invalid Z specifier in FORMAT statement at %0 -- correct form: [r]Zw.[m]" + #~ msgstr "Especificador Z inválido en la declaración FORMAT en %0 -- forma correcta: [r]Zw.[m]" + + #~ msgid "Invalid Z specifier in FORMAT statement at %0" + #~ msgstr "Especificador Z inválido en la declaración FORMAT en %0" + + #~ msgid "Invalid F specifier in FORMAT statement at %0 -- correct form: [r]Fw.d" + #~ msgstr "Especificador F inválido en la declaración FORMAT en %0 -- forma correcta: [r]Fw.d" + + #~ msgid "Invalid F specifier in FORMAT statement at %0" + #~ msgstr "Especificador F inválido en la declaración FORMAT en %0" + + #~ msgid "Invalid E specifier in FORMAT statement at %0 -- correct form: [r]Ew.d[Ee]" + #~ msgstr "Especificador E inválido en la declaración FORMAT en %0 -- forma correcta: [r]Ew.d[Ee]" + + #~ msgid "Invalid E specifier in FORMAT statement at %0" + #~ msgstr "Especificador E inválido en la declaración FORMAT en %0" + + #~ msgid "Invalid EN specifier in FORMAT statement at %0 -- correct form: [r]ENw.d[Ee]" + #~ msgstr "Especificador EN inválido en la declaración FORMAT en %0 -- forma correcta: [r]ENw.d[Ee]" + + #~ msgid "Invalid EN specifier in FORMAT statement at %0" + #~ msgstr "Especificador EN inválido en la declaración FORMAT en %0" + + #~ msgid "Invalid G specifier in FORMAT statement at %0 -- correct form: [r]Gw.d[Ee]" + #~ msgstr "Especificador G inválido en la declaración FORMAT en %0 -- forma correcta: [r]Gw.d[Ee]" + + #~ msgid "Invalid G specifier in FORMAT statement at %0" + #~ msgstr "Especificador G inválido en la declaración FORMAT en %0" + + #~ msgid "Invalid L specifier in FORMAT statement at %0 -- correct form: [r]Lw" + #~ msgstr "Especificador L inválido en la declaración FORMAT en %0 -- forma correcta: [r]Lw" + + #~ msgid "Invalid L specifier in FORMAT statement at %0" + #~ msgstr "Especificador L inválido en la declaración FORMAT en %0" + + #~ msgid "Invalid A specifier in FORMAT statement at %0 -- correct form: [r]A[w]" + #~ msgstr "Especificador A inválido en la declaración FORMAT en %0 -- forma correcta: [r]A[w]" + + #~ msgid "Invalid A specifier in FORMAT statement at %0" + #~ msgstr "Especificador A inválido en la declaración FORMAT en %0" + + #~ msgid "Invalid D specifier in FORMAT statement at %0 -- correct form: [r]Dw.d" + #~ msgstr "Especificador D inválido en la declaración FORMAT en %0 -- forma correcta: [r]Dw.d" + + #~ msgid "Invalid D specifier in FORMAT statement at %0" + #~ msgstr "Especificador D inválido en la declaración FORMAT en %0" + + #~ msgid "Invalid Q specifier in FORMAT statement at %0 -- correct form: Q" + #~ msgstr "Especificador Q inválido en la declaración FORMAT en %0 -- forma correcta: Q" + + #~ msgid "Invalid Q specifier in FORMAT statement at %0" + #~ msgstr "Especificador Q inválido en la declaración FORMAT en %0" + + #~ msgid "Invalid $ specifier in FORMAT statement at %0 -- correct form: $" + #~ msgstr "Especificador $ inválido en la declaración FORMAT en %0 -- forma correcta: $" + + #~ msgid "Invalid $ specifier in FORMAT statement at %0" + #~ msgstr "Especificador $ inválido en la declaración FORMAT en %0" + + #~ msgid "Invalid P specifier in FORMAT statement at %0 -- correct form: kP" + #~ msgstr "Especificador P inválido en la declaración FORMAT en %0 -- forma correcta: kP" + + #~ msgid "Invalid P specifier in FORMAT statement at %0" + #~ msgstr "Especificador P inválido en la declaración FORMAT en %0" + + #~ msgid "Invalid T specifier in FORMAT statement at %0 -- correct form: Tn" + #~ msgstr "Especificador T inválido en la declaración FORMAT en %0 -- forma correcta: Tn" + + #~ msgid "Invalid T specifier in FORMAT statement at %0" + #~ msgstr "Especificador T inválido en la declaración FORMAT en %0" + + #~ msgid "Invalid TL specifier in FORMAT statement at %0 -- correct form: TLn" + #~ msgstr "Especificador TL inválido en la declaración FORMAT en %0 -- forma correcta: TLn" + + #~ msgid "Invalid TL specifier in FORMAT statement at %0" + #~ msgstr "Especificador TL inválido en la declaración FORMAT en %0" + + #~ msgid "Invalid TR specifier in FORMAT statement at %0 -- correct form: TRn" + #~ msgstr "Especificador TR inválido en la declaración FORMAT en %0 -- forma correcta: TRn" + + #~ msgid "Invalid TR specifier in FORMAT statement at %0" + #~ msgstr "Especificador TR inválido en la declaración FORMAT en %0" + + #~ msgid "Invalid X specifier in FORMAT statement at %0 -- correct form: nX" + #~ msgstr "Especificador X inválido en la declaración FORMAT en %0 -- forma correcta: nX" + + #~ msgid "Invalid X specifier in FORMAT statement at %0" + #~ msgstr "Especificador X inválido en la declaración FORMAT en %0" + + #~ msgid "Invalid S specifier in FORMAT statement at %0 -- correct form: S" + #~ msgstr "Especificador S inválido en la declaración FORMAT en %0 -- forma correcta: S" + + #~ msgid "Invalid S specifier in FORMAT statement at %0" + #~ msgstr "Especificador S inválido en la declaración FORMAT en %0" + + #~ msgid "Invalid SP specifier in FORMAT statement at %0 -- correct form: SP" + #~ msgstr "Especificador SP inválido en la declaración FORMAT en %0 -- forma correcta: SP" + + #~ msgid "Invalid SP specifier in FORMAT statement at %0" + #~ msgstr "Especificador SP inválido en la declaración FORMAT en %0" + + #~ msgid "Invalid SS specifier in FORMAT statement at %0 -- correct form: SS" + #~ msgstr "Especificador SS inválido en la declaración FORMAT en %0 -- forma correcta: SS" + + #~ msgid "Invalid SS specifier in FORMAT statement at %0" + #~ msgstr "Especificador SS inválido en la declaración FORMAT en %0" + + #~ msgid "Invalid BN specifier in FORMAT statement at %0 -- correct form: BN" + #~ msgstr "Especificador BN inválido en la declaración FORMAT en %0 -- forma correcta: BN" + + #~ msgid "Invalid BN specifier in FORMAT statement at %0" + #~ msgstr "Especificador BN inválido en la declaración FORMAT en %0" + + #~ msgid "Invalid BZ specifier in FORMAT statement at %0 -- correct form: BZ" + #~ msgstr "Especificador BZ inválido en la declaración FORMAT en %0 -- forma correcta: BZ" + + #~ msgid "Invalid BZ specifier in FORMAT statement at %0" + #~ msgstr "Especificador BZ inválido en la declaración FORMAT en %0" + + #~ msgid "Invalid : specifier in FORMAT statement at %0 -- correct form: :" + #~ msgstr "Especificador : inválido en la declaración FORMAT en %0 -- forma correcta: :" + + #~ msgid "Invalid : specifier in FORMAT statement at %0" + #~ msgstr "Especificador : inválido en la declaración FORMAT en %0" + + #~ msgid "Invalid H specifier in FORMAT statement at %0 -- correct form: nHcharacters !where n is an unsigned decimal constant, and characters !contains exactly n characters (including spaces)" + #~ msgstr "Especificador H inválido en la declaración FORMAT en %0 -- forma correcta: nHcaracteres !donde n es una constante decimal sin signo, y los caracteres !contienen exactamente n caracteres (incluyendo espacios)" + + #~ msgid "Invalid H specifier in FORMAT statement at %0" + #~ msgstr "Especificador H inválido en la declaración FORMAT en %0" + + #~ msgid "Invalid token with FORMAT run-time expression at %0 -- use the traditional operators .LT., .LE., .GT., .GE., .EQ., and .NE. in place of the newer tokens <, <=, >, >=, ==, and !=, because > ends an expression within a FORMAT statement" + #~ msgstr "Elemento inválido con la expresión de tiempo de ejecución FORMAT en %0 -- use los operadores tradicionales .LT., .LE., .GT., .GE., .EQ. y .NE. en lugar de los elementos más nuevos <, <=, >, >=, == y !=, porque > termina una expresión dentro de una declaración FORMAT" + + #~ msgid "Invalid token with FORMAT run-time expression at %0" + #~ msgstr "Elemento inválido con la expresión de tiempo de ejecución FORMAT en %0" + + #~ msgid "Defined operator at %0 contains a nonletter -- must contain only letters A-Z (or a-z)" + #~ msgstr "El operador definido en %0 contiene un carácter que no es letra -- debe contener solamente letras A-Z (o a-z)" + + #~ msgid "Nonletter in defined operator at %0" + #~ msgstr "Un carácter que no es letra en el operador definido en %0" + + #~ msgid "Invalid type-declaration attribute at %0 -- must be one of: DIMENSION(array-spec), EXTERNAL, INTRINSIC, PARAMETER, or SAVE" + #~ msgstr "Atributo de declaración de tipo inválido en %0 -- debe ser uno de: DIMENSION(espec-matriz), EXTERNAL, INTRINSIC, PARAMETER, o SAVE" + + #~ msgid "Invalid type-declaration attribute at %0" + #~ msgstr "Atributo de declaración de tipo inválido en %0" + + #~ msgid "Unrecognized value for character constant at %0 -- expecting %A" + #~ msgstr "Valor no reconocido para la constante de carácter en %0 -- se esperaba %A" + + #~ msgid "Unrecognized value for character constant at %0" + #~ msgstr "Valor no reconocido para una constante de carácter en %0" + + #~ msgid "Range specification at %0 invalid -- at least one expression must be specified, or use CASE DEFAULT" + #~ msgstr "Especificación de rango en %0 inválida -- por lo menos una expresión se debe especificar, o utilice CASE DEFAULT" + + #~ msgid "Range specification at %0 invalid" + #~ msgstr "Especificación de rango en %0 inválida" + + #~ msgid "Range specification at %0 useless; first expression greater than second expression in range, so range can never be matched by any selection expression" + #~ msgstr "Especificación de rango en %0 inútil; la primera expresión es más grande que la segunda expresión en el rango, así que el rango nunca coincidirá con cualquier expresión de rango" + + #~ msgid "Useless range at %0" + #~ msgstr "Rango inútil en %0" + + #~ msgid "Invalid kind at %0 for type at %1 -- unsupported or not permitted" + #~ msgstr "Afinidad inválida en %0 por el tipo en %1 -- sin soporte o no está permitido" + + #~ msgid "Invalid kind at %0 for type at %1" + #~ msgstr "Afinidad inválida %0 para el tipo en %1" + + #~ msgid "Cannot establish implicit type for initial letter `%A' at %0 -- already explicitly established or used to set implicit type of some name, or backwards order of letters in letter range" + #~ msgstr "No se puede establecer el tipo implícito para la letra inicial `%A' en %0 -- ya se estableció explícitamente o se usó para establecer el tipo implícito de otro nombre, o en orden inverso de letras en el rango de letras" + + #~ msgid "Cannot establish implicit type for initial letter `%A' at %0" + #~ msgstr "No se puede establecer el tipo implícito para la letra inicial `%A' en %0" + + #~ msgid "Label definition %A (at %0) invalid -- must be in columns 1-5" + #~ msgstr "La definición de la etiqueta %A (en %0) inválida -- debe estar en las columnas 1-5" + + #~ msgid "Invalid label definition %A (at %0)" + #~ msgstr "Definición de etiqueta inválida %A (en %0)" + + #~ msgid "Run-time expression at %0 in FORMAT statement that does not follow the first executable statement in the program unit -- move the statement" + #~ msgstr "Hay una expresión en tiempo de ejecución en %0 en la declaración FORMAT que no sigue la primera declaración ejecutable en la unidad de programa -- mueva la declaración" + + #~ msgid "FORMAT at %0 with run-time expression must follow first executable statement" + #~ msgstr "El FORMAT en %0 con una expresión de tiempo de ejecución debe seguir la primera declaración ejecutable" + + #~ msgid "Unexpected token at %0 in implied-DO construct at %1 -- form of implied-DO is `(item-list,do-var=start,end[,incr])'" + #~ msgstr "Elemento inesperado en %0 en la construcción con DO implícito en %1 -- la forma del DO implícito es `(elemento-lista,var-do=inicio,fin[,incr])'" + + #~ msgid "Unexpected token at %0 in implied-DO construct at %1" + #~ msgstr "Elemento inesperado en %0 en la construcción con DO implícito en %1" + + #~ msgid "Boolean/logical operator at %0 must operate on two subexpressions of logical type, but neither subexpression at %1 or %2 is of logical type" + #~ msgstr "El operador booleano/lógico en %0 debe operar en dos subexpresiones de tipo lógico, pero ninguna subexpresión en %1 o %2 es de tipo lógico" + + #~ msgid "Invalid operands at %1 and %2 for boolean operator at %0" + #~ msgstr "Operandos inválidos en %1 y %2 para el operador booleano en %0" + + #~ msgid "Boolean/logical operator at %0 must operate on two subexpressions of logical type, but the subexpression at %1 is not of logical type" + #~ msgstr "El operador booleano/lógico en %0 debe operar en dos subexpresiones de tipo lógico, pero la subexpresión en %1 no es de tipo lógico" + + #~ msgid "Invalid operand at %1 for boolean operator at %0" + #~ msgstr "Operando inválido en %1 para el operador booleano en %0" + + #~ msgid "Boolean/logical operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning logical scalars, or a combination of both -- but the subexpression at %1 is %A" + #~ msgstr "El operador booleano/lógico en %0 debe operar en dos subexpresiones escalares (no matrices), dos invocaciones de función que devuelvan escalares lógicos, o una combinación de ambos -- pero la subexpresión en %1 es %A" + + #~ msgid "Invalid operand (is %A) at %1 for boolean operator at %0" + #~ msgstr "Operando inválido (es %A) en %1 para el operador booleano en %0" + + #~ msgid ".NOT. operator at %0 must operate on subexpression of logical type, but the subexpression at %1 is not of logical type" + #~ msgstr "El operador .NOT. en %0 debe operar en una subexpresión de tipo lógico, pero la subexpresión en %1 no es de tipo lógico" + + #~ msgid "Invalid operand at %1 for .NOT. operator at %0" + #~ msgstr "Operando inválido en %1 para el operador .NOT. en %0" + + #~ msgid ".NOT. operator at %0 must operate on scalar subexpressions -- but the subexpression at %1 is %A" + #~ msgstr "El operador .NOT. en %0 debe operar en expresiones escalares -- pero la subexpresión en %1 es %A" + + #~ msgid "Invalid operand (is %A) at %1 for .NOT. operator at %0" + #~ msgstr "Operando inválido (es %A) en %1 para el operador .NOT. en %0" + + #~ msgid "Equality operator at %0 must operate on two subexpressions of arithmetic or character type, but neither subexpression at %1 or %2 is of arithmetic or character type" + #~ msgstr "El operador de igualdad en %0 debe operar en dos subexpresiones de tipo aritmético o carácter, pero ninguna subexpresión en %1 o %2 es de tipo aritmético o carácter" + + #~ msgid "Invalid operands at %1 and %2 for equality operator at %0" + #~ msgstr "Operandos inválidos en %1 y %2 para el operador de igualdad en %0" + + #~ msgid "Equality operator at %0 must operate on two subexpressions of arithmetic or character type, but the subexpression at %1 is not of arithmetic or character type" + #~ msgstr "El operador de igualdad en %0 debe operar en dos subexpresiones de tipo aritmético o carácter, pero la subexpresión en %1 no es de tipo aritmético o carácter" + + #~ msgid "Invalid operand at %1 for equality operator at %0" + #~ msgstr "Operando inválido en %1 para el operador de igualdad en %0" + + #~ msgid "Equality operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning arithmetic or character scalars, or a combination of both -- but the subexpression at %1 is %A" + #~ msgstr "El operador de igualdad en %0 debe operar en dos subexpresiones escalares (no matrices), dos invocaciones de función que devuelvan escalares aritméticos o carácter, o una combinación de ambos -- pero la subexpresión en %1 es %A" + + #~ msgid "Invalid operand (is %A) at %1 for equality operator at %0" + #~ msgstr "Operando inválido (es %A) en %1 para el operador de igualdad en %0" + + #~ msgid "Relational operator at %0 must operate on two subexpressions of integer, real, or character type, but neither subexpression at %1 or %2 is of integer, real, or character type" + #~ msgstr "El operador relacional en %0 debe operar en dos subexpresiones de tipo entero, real o carácter, pero ninguna subexpresión en %1 o %2 es de tipo entero, real, o carácter" + + #~ msgid "Invalid operands at %1 and %2 for relational operator at %0" + #~ msgstr "Operandos inválidos en %1 y %2 para el operador relacional en %0" + + #~ msgid "Relational operator at %0 must operate on two subexpressions of integer, real, or character type, but the subexpression at %1 is not of integer, real, or character type" + #~ msgstr "El operador relacional en %0 debe operar en dos subexpresiones de tiop entero, real o carácter, pero la subexpresión en %1 no es de tipo entero, real o carácter" + + #~ msgid "Invalid operand at %1 for relational operator at %0" + #~ msgstr "Operando inválido en %1 para el operador relacional en %0" + + #~ msgid "Relational operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning integer, real, or character scalars, or a combination of both -- but the subexpression at %1 is %A" + #~ msgstr "El operador relacional en %0 debe operar en dos subexpresiones escalares (no matrices), dos invocaciones de función que devuelvan escalares enteros, reales o de caracteres, o una combinación de ambos -- pero la subexpresión en %1 es %A" + + #~ msgid "Invalid operand (is %A) at %1 for relational operator at %0" + #~ msgstr "Operando inválido (es %A) en %1 para el operador relacional en %0" + + #~ msgid "Reference to intrinsic `%A' at %0 invalid -- one or more arguments have incorrect type" + #~ msgstr "La referencia al intrínseco `%A' en %0 es inválida -- uno o más argumentos tiene el tipo incorrecto" + + #~ msgid "Invalid reference to intrinsic `%A' at %0" + #~ msgstr "Referencia inválida al intrínseco `%A' en %0" + + #~ msgid "Too few arguments passed to intrinsic `%A' at %0" + #~ msgstr "Se pasaron muy pocos argumentos al intrínseco `%A' en %0" + + #~ msgid "Too few arguments for intrinsic `%A' at %0" + #~ msgstr "Muy pocos argumentos para el intrínseco `%A' en %0" + + #~ msgid "Too many arguments passed to intrinsic `%A' at %0" + #~ msgstr "Se pasaron demasiados argumentos para el intrínseco `%A' en %0" + + #~ msgid "Too many arguments for intrinsic `%A' at %0" + #~ msgstr "Demasiados argumentos para el intrínseco `%A' en %0" + + #~ msgid "Reference to disabled intrinsic `%A' at %0" + #~ msgstr "Referencia al intrínsico desactivado `%A' en %0" + + #~ msgid "Disabled intrinsic `%A' at %0" + #~ msgstr "Intrínseco desactivado `%A' en %0" + + #~ msgid "Reference to intrinsic subroutine `%A' as if it were a function at %0" + #~ msgstr "Referencia a la subrutina intrínseca `%A' como si fuera una función en %0" + + #~ msgid "Function reference to intrinsic subroutine `%A' at %0" + #~ msgstr "Referencia de función a la subrutina intrínseca `%A' en %0" + + #~ msgid "Reference to intrinsic function `%A' as if it were a subroutine at %0" + #~ msgstr "Referencia a la función intrínseca `%A' como si fuera una subrutina en %0" + + #~ msgid "Subroutine reference to intrinsic function `%A' at %0" + #~ msgstr "Referencia de subrutina a la función intrínseca `%A' en %0" + + #~ msgid "Reference to unimplemented intrinsic `%A' at %0 -- use EXTERNAL to reference user-written procedure with this name" + #~ msgstr "Referencia al intrínseco sin implementar `%A' en %0 -- use EXTERNAL para referenciar al procedimiento escrito por el usuario con este nombre" + + #~ msgid "Unimplemented intrinsic `%A' at %0" + #~ msgstr "Intrínseco sin implementar `%A' en %0" + + #~ msgid "Reference to unimplemented intrinsic `%A' at %0 (assumed EXTERNAL)" + #~ msgstr "Referencia al intrínseco sin implimentar `%A' en %0 (se asume EXTERNAL)" + + #~ msgid "Unimplemented intrinsic `%A' at %0 (assumed EXTERNAL)" + #~ msgstr "Intrínseco sin implementar `%A' en %0 (se asume EXTERNAL)" + + #~ msgid "Attempt to modify variable `%A' at %0 while it serves as DO-loop iterator at %1" + #~ msgstr "Se intentó modificar la variable `%A' en %0 mientras servía como un iterador de un ciclo DO en %1" + + #~ msgid "Modification of DO-loop iterator `%A' at %0" + #~ msgstr "Modificación del iterador del ciclo DO `%A' en %0" + + #~ msgid "Attempt to modify variable `%A' via item #%B in list at %0 while it serves as implied-DO iterator at %1" + #~ msgstr "Se intentó modificar la variable `%A' a través del elemento #%B en la lista en %0 mientras servía como un iterador DO implícito en %1" + + #~ msgid "Array has too many dimensions, as of dimension specifier at %0" + #~ msgstr "La matriz tiene demasiadas dimensiones, para el especificador de dimensión en %0" + + #~ msgid "Too many dimensions at %0" + #~ msgstr "Demasiadas dimensiones en %0" + + #~ msgid "Unsupported OPEN control item at %0 -- ACTION=, ASSOCIATEVARIABLE=, BLOCKSIZE=, BUFFERCOUNT=, CARRIAGECONTROL=, DEFAULTFILE=, DELIM=, DISPOSE=, EXTENDSIZE=, INITIALSIZE=, KEY=, MAXREC=, NOSPANBLOCKS, ORGANIZATION=, PAD=, POSITION=, READONLY=, RECORDTYPE=, SHARED=, and USEROPEN= are not supported" + #~ msgstr "Elemento de control OPEN sin soporte en %0 -- ACTION=, ASSOCIATEVARIABLE=, BLOCKSIZE=, BUFFERCOUNT=, CARRIAGECONTROL=, DEFAULTFILE=, DELIM=, DISPOSE=, EXTENDSIZE=, INITIALSIZE=, KEY=, MAXREC=, NOSPANBLOCKS, ORGANIZATION=, PAD=, POSITION=, READONLY=, RECORDTYPE=, SHARED=, y USEROPEN= no tienen soporte" + + #~ msgid "Unsupported OPEN control item at %0" + #~ msgstr "Elemento de control OPEN sin soporte en %0" + + #~ msgid "Unsupported INQUIRE control item at %0 -- ACTION=, CARRIAGECONTROL=, DEFAULTFILE=, DELIM=, KEYED=, ORGANIZATION=, PAD=, POSITION=, READ=, READWRITE=, RECORDTYPE=, and WRITE= are not supported" + #~ msgstr "Elemento de control INQUIRE sin soporte en %0 -- ACTION=, CARRIAGECONTROL=, DEFAULTFILE=, DELIM=, KEYED=, ORGANIZATION=, PAD=, POSITION=, READ=, READWRITE=, RECORDTYPE=, y WRITE= sin soporte" + + #~ msgid "Unsupported INQUIRE control item at %0" + #~ msgstr "Elemento de control INQUIRE sin soporte en %0" + + #~ msgid "Unsupported READ control item at %0 -- ADVANCE=, EOR=, KEYEQ=, KEYGE=, KEYGT=, KEYID=, NULLS=, and SIZE= are not supported" + #~ msgstr "Elemento de control READ sin soporte en %0 -- ADVANCE=, EOR=, KEYEQ=, KEYGE=, KEYGT=, KEYID=, NULLS=, y SIZE= sin soporte" + + #~ msgid "Unsupported READ control item at %0" + #~ msgstr "Elemento de control READ sin soporte en %0" + + #~ msgid "Unsupported WRITE control item at %0 -- ADVANCE= and EOR= are not supported" + #~ msgstr "Elemento de control WRITE sin soporte en %0 -- ADVANCE= y EOR= sin soporte" + + #~ msgid "Unsupported WRITE control item at %0" + #~ msgstr "Elemento de control WRITE sin soporte en %0" + + #~ msgid "Padding of %A %D required before `%B' in common block `%C' at %0 -- consider reordering members, largest-type-size first" + #~ msgstr "Se requiere el relleno de %A %D antes de `%B' en el bloque común `%C' en %0 -- considere reordenar los miembros, primero los de tamaño de tipo más grande" + + #~ msgid "Padding of %A %D required before `%B' in common block `%C' at %0" + #~ msgstr "Se requiere el relleno de %A %D antes de `%B' en el bloque común `%C' en %0" + + #~ msgid "Invalid length specification at %0 for IMPLICIT statement -- must be integer constant expression" + #~ msgstr "Especificación de longitud inválida en %0 para la declaración IMPLICIT -- debe ser una expresión constante entera" + + #~ msgid "Invalid length specification at %0" + #~ msgstr "Especificación de longitud inválida en %0" + + #~ msgid "Type of ENTRY point at %0 to function conflicts with type(s) of previous entrypoint(s) -- must all be identical-length CHARACTER or none be CHARACTER type" + #~ msgstr "El tipo del punto ENTRY en %0 a la función tiene conflictos con el(los) tipo(s) de punto(s) de entrada previo(s) -- deben ser todos CHARACTER de longitud idéntica o ninguno debe ser de tipo CHARACTER" + + #~ msgid "Type of ENTRY point at %0 to function conflicts with type(s) of previous entrypoint(s)" + #~ msgstr "El tipo del punto ENTRY en %0 a la función tiene conflictos con el(los) tipo(s) de punto(s) de entrada previo(s)" + + #~ msgid "Common block `%A' initialized at %0 already initialized at %1 -- only one program unit may specify initial values for a particular common block" + #~ msgstr "El bloque común `%A' iniciado en %0 ya se habia iniciado en %1 -- solamente una unidad de programa puede especificar valores iniciales para un bloque común en particular" + + #~ msgid "Common block `%A' initialized at %0 already initialized at %1" + #~ msgstr "El bloque común `%A' iniciado en %0 ya se habia iniciado en %1" + + #~ msgid "Initial padding for common block `%A' is %B %C at %0 -- consider reordering members, largest-type-size first" + #~ msgstr "El relleno inicial para el bloque común `%A' es %B %C en %0 -- considere reordenar a los miembros, primero los de tamaño de tipo más grande" + + #~ msgid "Initial padding for common block `%A' is %B %C at %0" + #~ msgstr "El relleno inicial para el bloque común `%A' es %B %C en %0" + + #~ msgid "Initial padding for common block `%A' is %B %D at %0 but %C %E at %1 -- consider reordering members, largest-type-size first" + #~ msgstr "El relleno inicial para el bloque común `%A' es %B %D en %0 pero %C %E en %1 -- considere reordenar a los miembros, primero los de tamaño de tipo más grande" + + #~ msgid "Initial padding for common block `%A' is %B %D at %0 but %C %E at %1" + #~ msgstr "El relleno inicial para el bloque común `%A' es %B %D en %0 pero %C %E en %1" + + #~ msgid "Common block `%A' is initialized to %B %D long at %0 but enlarged to %C %E at %1 -- use consistent definitions or reorder program units in source file" + #~ msgstr "El bloque común `%A' está iniciado a %B %D de longitud en %0 pero agrandado a %C %E en %1 -- utilice definiciones consistentes o reordene las unidades de programa en el fichero fuente" + + #~ msgid "Common block `%A' is initialized to %B %D long at %0 but enlarged to %C %E at %1" + #~ msgstr "El bloque común `%A' está iniciado a %B %D de longitud en %0 pero agrandado a %C %E en %1" + + #~ msgid "DO-variable `%A' is type REAL or DOUBLE PRECISION at %0 -- unexpected behavior likely" + #~ msgstr "La variable DO `%A' es de tipo REAL o DOUBLE PRECISION en %0 -- es probable que tenga una conducta inesperada" + + #~ msgid "DO-variable `%A' is type REAL or DOUBLE PRECISION at %0" + #~ msgstr "La variable DO `%A' es de tipo REAL o DOUBLE PRECISION en %0" + + #~ msgid "Invalid actual argument at %0 -- replace hollerith constants with %%REF('string') and typeless constants with INTEGER constant equivalents, or use -fugly-args or -fugly" + #~ msgstr "Argumento actual inválido en %0 -- reemplace las constantes hollerith con %%REF('cadena') y las constantes sin tipo con constantes INTEGER equivalentes, o utilice -fugly-args o -fugly" + + #~ msgid "Invalid actual argument at %0" + #~ msgstr "Argumento actual inválido en %0" + + #~ msgid "Quadruple-precision floating-point unsupported -- treating constant at %0 as double-precision" + #~ msgstr "Coma flotante de precisión cuádruple sin soporte -- se tratan las constantes en %0 como de doble precisión" + + #~ msgid "Quadruple-precision floating-point unsupported" + #~ msgstr "Coma flotante de precisión cuádruple sin soporte" + + #~ msgid "Initialization of large (%B-unit) aggregate area `%A' at %0 slow and takes lots of memory during g77 compile" + #~ msgstr "La iniciación del área agregada grande (unidad-%B) `%A' en %0 es actualmente muy lenta y toma mucha memoria durante la compilación de g77" + + #~ msgid "This could take a while (initializing `%A' at %0)..." + #~ msgstr "Esto puede tardar un rato (iniciando `%A' en %0)..." + + #~ msgid "can't to open %s" + #~ msgstr "no se puede abrir %s" + + #~ msgid "Set class path and suppress system path" + #~ msgstr "Establecer la ruta de clases y suprimir la ruta del sistema" + + #~ msgid "a -ifile option requires a -map option" + #~ msgstr "una opción -ifile requiere una opción -map" + + #~ msgid "invalid reference to NULL ptr, use ptr-to-member instead" + #~ msgstr "referencia inválida a NULL ptr, use en su lugar ptr-a-miembro" + + #~ msgid "can't create cross-reference file `%s'" + #~ msgstr "no se puede crear el fichero de referencia cruzada `%s'" + + #~ msgid "support non-32-bit machines better as of version 0.6" + #~ msgstr "dar mejor soporte a máquinas que no sean 32-bit a partir de la versión 0.6" + + #~ msgid "methods cannot be converted to function pointers" + #~ msgstr "los métodos no pueden ser convertidos a apuntadores a funciones" + + #~ msgid "ambiguous request for method pointer `%s'" + #~ msgstr "petición ambigua para el apuntador a método `%s'" + + #~ msgid "internal error #%d" + #~ msgstr "error interno #%d" + + #~ msgid "" + #~ msgstr "" + + #~ msgid "hard register `%s' listed as input operand to `asm'" + #~ msgstr "el registro fijo `%s' es listado como operando de entrada para `asm'" + + #~ msgid "floating point trap outputting a constant" + #~ msgstr "la captura de coma flotante genera como salida una constante" + + #~ msgid "no file-scope type named `%D'" + #~ msgstr "no hay un tipo de ámbito de fichero llamado `%D'" + + #~ msgid "%T is not a class type" + #~ msgstr "%T no es un tipo de clase" + + #~ msgid "base clause without member specification for `%#T'" + #~ msgstr "cláusula base sin una especificación de miembro para `%#T'" + + #~ msgid "non-`union' tag used in declaring `%#T'" + #~ msgstr "se usó una marca no-`union' en la declaración de `%#T'" + + #~ msgid "invalid use of %D" + #~ msgstr "uso inválido de %D" + + #~ msgid "return value from function receives multiple initializations" + #~ msgstr "el valor de de devolución de la función recibe iniciaciones múltiples" + + #~ msgid "Can't use '$' as a separator for inner classes" + #~ msgstr "No se puede usar '$' como un separador para las clases interiores" + + #~ msgid "-mlong32 and -mlong64 can not both be specified" + #~ msgstr "-mlong32 y -mlong64 no se pueden especificar al mismo tiempo" + + #~ msgid "type with more precision than %s" + #~ msgstr "tipo con más precisión que %s" + + #~ msgid "declaration of `%s' shadows previous local" + #~ msgstr "la declaración de `%s' obscurece a una declaración local previa" + + #~ msgid "ANSI C forbids const or volatile function types" + #~ msgstr "ANSI C prohibe los tipos de función const o volatile" + + #~ msgid "leaving more files than we entered" + #~ msgstr "dejando más ficheros de los que se introducieron" + + #~ msgid "universal-character-name used for '%c'" + #~ msgstr "se usó universal-character-name para '%c'" + + #~ msgid "unknown escape sequence: '\\' followed by char 0x%x" + #~ msgstr "secuencia de escape desconocida, '\\' seguida por el carácter 0x%x" + + #~ msgid "ISO C forbids `&&'" + #~ msgstr "ISO C prohibe `&&'" + + #~ msgid "`[*]' in parameter declaration only allowed in ISO C 99" + #~ msgstr "`[*]' en la declaración de parámetros solamente se permite en ISO C 99" + + #~ msgid "wrong type argument to %s" + #~ msgstr "argumento de tipo erróneo para %s" + + #~ msgid "deprecated initialization of zero-length array" + #~ msgstr "iniciación deprecada de una matriz de longitud cero" + + #~ msgid "initialization of zero-length array before end of structure" + #~ msgstr "iniciación de una matriz de longitud cero antes del fin de la estructura" + + #~ msgid "initialization of zero-length array inside a nested context" + #~ msgstr "iniciación de una matriz de longitud cero dentro de un contexto anidado" + + #~ msgid "Unable to find a temporary location for static chain register" + #~ msgstr "No se puede encontrar una ubicación temporal para el registro estático de cadena" + + #~ msgid "Only initialized variables can be placed into the 8-bit area." + #~ msgstr "Sólo las variables con valor inicial pueden ser colocadas en el área de 8-bit." + + #~ msgid "Internal gcc abort from %s:%d" + #~ msgstr "Aborto interno de gcc de %s:%d" + + #~ msgid "The local variable `insn' has the value:" + #~ msgstr "La variable local `insn' tiene el valor:" + + #~ msgid "Register '%c' is unknown" + #~ msgstr "El registro '%c' es desconocido" + + #~ msgid "Register '%c' already specified in allocation order" + #~ msgstr "El registro '%c' ya fue especificado en el orden de alojamiento" + + #~ msgid "Same as -mcpu=i386" + #~ msgstr "Igual que -mcpu=i386" + + #~ msgid "Same as -mcpu=i486" + #~ msgstr "Igual que -mcpu=i486" + + #~ msgid "Same as -mcpu=pentium" + #~ msgstr "Igual que -mcpu=pentium" + + #~ msgid "Same as -mcpu=pentiumpro" + #~ msgstr "Igual que -mcpu=pentiumpro" + + #~ msgid "Emit Intel syntax assembler opcodes" + #~ msgstr "Emitir códigos de operación ensamblador con sintaxis Intel" + + #~ msgid "Control allocation order of integer registers" + #~ msgstr "Control del orden de alojamiento de registros enteros" + + #~ msgid "The -mabi=32 support does not work yet." + #~ msgstr "El soporte para -mabi=32 aún no funciona." + + #~ msgid "-mcpu=%s does not support -mips%d" + #~ msgstr "-mcpu=%s no tiene soporte para -mips%d" + + #~ msgid "Use FUNCTION_EPILOGUE" + #~ msgstr "Usar FUNCTION_EPILOGUE" + + #~ msgid "Do not use FUNCTION_EPILOGUE" + #~ msgstr "No usar FUNCTION_EPILOGUE" + + #~ msgid "object size exceeds built-in limit for virtual function table implementation" + #~ msgstr "el tamaño del objeto excede el límite interno para la implementación de la tabla virtual de funciones" + + #~ msgid "object size exceeds normal limit for virtual function table implementation, recompile all source and use -fhuge-objects" + #~ msgstr "el tamaño del objeto excede el límite normal para la implementación de la tabla virtual de funciones,recompile todo el código y utilice -fhuge-objects" + + #~ msgid "the ABI requires vtable thunks" + #~ msgstr "el ABI requiere vtable thunks" + + #~ msgid "`__alignof__' applied to a bit-field" + #~ msgstr "`__alignof__' aplicado a un campo de bits" + + #~ msgid "base class initializer specified, but no base class to initialize" + #~ msgstr "se especificó el iniciador de la clase base, pero no hay clase base a iniciar" + + #~ msgid "initializer for unnamed base class ambiguous" + #~ msgstr "iniciador para clase base sin nombre ambiguo" + + #~ msgid "Do not treat the namespace `std' as a normal namespace" + #~ msgstr "No tratar al espacio de nombres `std' como un espacio de nombres normal" + + #~ msgid "ISO C++ forbids `&&'" + #~ msgstr "ISO C++ prohibe `&&'" + + #~ msgid "taking dynamic typeid of object with -fno-rtti" + #~ msgstr "tomando typeid dinámico de objeto con -fno-rtti" + + #~ msgid "recoverable compiler error, fixups for virtual function" + #~ msgstr "error de compilador recuperable, composturas para la función virtual" + + #~ msgid "`com_interface' only supported with -fvtable-thunks" + #~ msgstr "sólo se da soporte a `com_interface' con -fvtable-thunks" + + #~ msgid "\"defined\" operator appears during macro expansion" + #~ msgstr "el operador \"defined\" aparece durante la expansión de macro" + + #~ msgid "-include and -imacros cannot be used with -fpreprocessed" + #~ msgstr "no se pueden usar -include e -imacros con -fpreprocessed" + + #~ msgid "buffers still stacked in cpp_finish" + #~ msgstr "almacenamientos intermedios aún apilados en cpp_finish" + + #~ msgid "# followed by integer" + #~ msgstr "# seguido por entero" + + #~ msgid "attempt to push file buffer with contexts stacked" + #~ msgstr "intento de empujar el almacenamiento temporal de fichero con contextos apilados" + + #~ msgid "file \"%s\" left but not entered" + #~ msgstr "se dejó el fichero \"%s\" pero no se introdujo" + + #~ msgid "expected to return to file \"%s\"" + #~ msgstr "se esperaba regresar al fichero \"%s\"" + + #~ msgid "expected to return to line number %u" + #~ msgstr "se esperaba regresar a la línea número %u" + + #~ msgid "header flags for \"%s\" have changed" + #~ msgstr "los interruptores del encabezado para \"%s\" han cambiado" + + #~ msgid "file \"%s\" entered but not left" + #~ msgstr "se introdujo el fichero \"%s\" pero no se dejó" + + #~ msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d\n" + #~ msgstr "NOTE_INSN_BASIC_BLOCK falta para el bloque %d\n" + + #~ msgid "gcov [-b] [-v] [-n] [-l] [-f] [-o OBJDIR] file\n" + #~ msgstr "gcov [-b] [-v] [-n] [-l] [-f] [-o DIROBJ] fichero\n" + + #~ msgid "Premature end of input file %s" + #~ msgstr "Final prematuro del fichero de entrada %s" + + #~ msgid "Make is_compiled_class return 1" + #~ msgstr "Hacer is_compiled_class devuelve 1" + + #~ msgid "Dump class files to .class" + #~ msgstr "Volcar ficheros de clase a .class" + + #~ msgid "input file is list of file names to compile" + #~ msgstr "el fichero de entrada es la lista de nombres de fichero a compilar" + + #~ msgid "Generate code for Boehm GC" + #~ msgstr "Generar código para Boehm GC" + + #~ msgid "Don't put synchronization structure in each object" + #~ msgstr "No agregar la estructura de sincronización en cada objeto" + + #~ msgid "Arc profiling: some edge counts were bad." + #~ msgstr "Análisis de perfil de arco: algunas cuentas de borde fueron erróneas." + + #~ msgid "`asm' cannot be used in function where memory usage is checked" + #~ msgstr "no se puede usar `asm' en funciones donde se revisa el uso de memoria" + + #~ msgid "`asm' cannot be used with `-fcheck-memory-usage'" + #~ msgstr "no se puede usar `asm' con `-fcheck-memory-usage'" + + #~ msgid "output operand constraint %d contains `+'" + #~ msgstr "la restricción de operando de salida %d contiene un `+'" + + #~ msgid "\"%s\" and \"%s\" identical in first %d characters" + #~ msgstr "\"%s\" y \"%s\" son idénticos en los primeros %d caracteres" + + #~ msgid "Improve FP speed by violating ANSI & IEEE rules" + #~ msgstr "Mejorar la velocidad de FP violando las reglas ANSI & IEEE" + + #~ msgid "Generate code to check every memory access" + #~ msgstr "Generar código para revisar cada acceso a memoria" + + #~ msgid "Add a prefix to all function names" + #~ msgstr "Agregar un prefijo a todos los nombres de funciones" + + #~ msgid "Errors detected in input file (your bison.simple is out of date)\n" + #~ msgstr "Se detectaron errores de salida en el fichero de entrada (su bison.simple está desactualizado)\n" + + #~ msgid " -Wid-clash- Warn if 2 identifiers have the same first chars\n" + #~ msgstr " -Wid-clash- Avisar si 2 identificadores tiene los primeros caracteres iguales\n" + + #~ msgid "Unrecognized option `%s'" + #~ msgstr "Opción `%s' no reconocida" + + #~ msgid "`-a' option (basic block profile) not supported" + #~ msgstr "la opción `-a' (análisis de perfil de bloques básicos) no tiene soporte" + + #~ msgid "`-ax' option (jump profiling) not supported" + #~ msgstr "la opción `-ax' (análisis de perfil de saltos) no tiene soporte" + + #~ msgid "`-ax' and `-a' are conflicting options. `-a' ignored." + #~ msgstr "`-ax' y `-a' son opciones en conflicto. Se ignora `-a'." + + #~ msgid "Data size %ld.\n" + #~ msgstr "Tamaño de datos %ld.\n" + + #~ msgid "bx]" + #~ msgstr "bx]" + + #~ msgid "bx" + #~ msgstr "bx" + + #~ msgid "cx" + #~ msgstr "cx" diff -Nrc3pad gcc-3.0.4/gcc/po/exgettext gcc-3.1/gcc/po/exgettext *** gcc-3.0.4/gcc/po/exgettext Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/po/exgettext Wed Jan 23 02:55:20 2002 *************** *** 0 **** --- 1,158 ---- + #! /bin/sh + # Wrapper around gettext for programs using the msgid convention. + # Copyright 1998, 2001, 2002 Free Software Foundation, Inc. + + # Written by Paul Eggert . + # Revised by Zack Weinberg for no-POTFILES operation. + + # 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 GNU CC; see the file COPYING. If not, write to + # the Free Software Foundation, 59 Temple Place - Suite 330, + # Boston, MA 02111-1307, USA. + + # Always operate in the C locale. + LANG=C + LANGUAGE=C + LC_ALL=C + export LANG LANGUAGE LC_ALL + + # Set AWK if environment has not already set it. + AWK=${AWK-awk} + + # The arguments to this wrapper are: the program to execute, the + # name of the "package", and the path to the source directory. + + if [ $# -ne 3 ] + then echo "usage: $0 " + exit 1 + fi + + xgettext=$1 + package=$2 + srcdir=$3 + + nl=' + ' + + set -e + + # Create temporary directory for scratch files. + T=exg$$.d + mkdir $T + trap "rm -r $T" 0 + + pwd=`pwd` + kopt=$pwd/$T/keyword-options + emsg=$pwd/$T/emsgids.c + posr=$pwd/$T/po-sources + + # Locate files to scan, and generate the list. All .c, .h, and .def files + # in $srcdir are examined, likewise $srcdir/config and $srcdir/config/* + # (directories). Also, all subdirectories of $srcdir that contain a + # config-lang.in. Exclusions come from $srcdir/po/EXCLUDE. + # + # Then generate keyword options for xgettext, by scanning for declarations + # of functions whose parameter names end in "msgid". + # + # Finally, generate a source file containing all %e strings from + # driver specs, so those can be translated too. + # + # All in one huge awk script. + + echo "scanning for keywords and %e strings..." >&2 + + ( cd $srcdir + lang_subdirs=`echo */config-lang.in | sed -e 's|config-lang\.in||g'` + for dir in "" config/ config/*/ $lang_subdirs + do for glob in '*.c' '*.h' '*.def' + do eval echo $dir$glob + done + done | tr ' ' "$nl" | grep -v '\*' | + $AWK -v excl=po/EXCLUDES -v posr=$posr -v kopt=$kopt -v emsg=$emsg ' + function keyword_option(line) { + paren_index = index(line, "(") + name = substr(line, 1, paren_index - 1) + sub(/[^0-9A-Z_a-z]*$/, "", name) + sub(/[ ]+PARAMS/, "", name) + sub(/[ ]+VPARAMS/, "", name) + sub(/.*[^0-9A-Z_a-z]/, "", name) + + args = substr(line, paren_index) + sub(/msgid[,\)].*/, "", args) + for (n = 1; sub(/^[^,]*,/, "", args); n++) { + continue + } + + if (n == 1) { keyword = name } + else { keyword = name ":" n } + + if (! keyword_seen[keyword]++) { + print "--keyword=" keyword > kopt + } + } + + function spec_error_string (line) { + while ((percent_index = index(line, "%e")) != 0) { + escape = substr(line, percent_index - 1, 1) + line = substr(line, percent_index + 2) + if (escape == "%") return + + bracket_index = index(line, "}") + if (bracket_index == 0) return + + msgid = substr(line, 1, bracket_index - 1) + if (index(msgid, "%") != 0) return + + printf("#line %d \"%s\"\n", lineno, file) > emsg + printf("_(\"%s\")\n", msgid) > emsg + + line = substr(line, bracket_index + 1) + } + } + + BEGIN { + while ((getline < excl) > 0) { + if ($0 ~ /^#/ || $0 ~ /^[ ]*$/) + continue + excludes[$1] = 1 + } + } + + { if (!($0 in excludes)) { + print > posr + files[NR] = $0 + } + } + + END { + for (f in files) { + file = files[f] + lineno = 1 + while (getline < file) { + if (/^(#[ ]*define[ ]*)?[A-Za-z_].*\(.*msgid[,\)]/) { + keyword_option($0) + } else if (/%e/) { + spec_error_string($0) + } + lineno++ + } + } + print emsg > posr + }' + ) + + # Run the xgettext command, with temporary added as a file to scan. + echo "running xgettext..." >&2 + $xgettext --default-domain=$package --directory=$srcdir \ + --add-comments `cat $kopt` --files-from=$posr \ + --language=c -o po/$package.pot diff -Nrc3pad gcc-3.0.4/gcc/po/fr.gmo gcc-3.1/gcc/po/fr.gmo *** gcc-3.0.4/gcc/po/fr.gmo Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/po/fr.gmo Wed May 15 02:41:45 2002 *************** *** 0 **** --- 1,1147 ---- + Þ•r¬‹]<°t±t¶t@Ét' + u52u=hu^¦uv-!v1Ovv–vÛ³v:wÊw5åw9x%Ux+{x0§xØx ìxùx"y+;y7gyŸyEºy2zP3z4„z3¹zHízJ6{q{Mó|”A}¡Ö}Žx›=£?áA!‚Jc‚0®‚Nß‚K.ƒJzƒ•Ń~[…QÚ†1,‡7^‡2–‡<ɇ1ˆF8ˆIˆAɈ} ‰L‰‰NÖ‰C%ŠDiŠ?®ŠEîŠN4‹Oƒ‹³Ó‹O‡ŒK׌}#½¡D_=¤÷â{Ú‘*V’“?ž“8Þ“4”DL”4‘”EÆ”K •NX–I§–Dñ–B6—Py—MÊ—˜N¨˜Q÷˜LI™<–™OÓ™L#šòpšAcœH¥œBîœ91,k5˜+ΞúžŸ .Ÿ :Ÿ<FŸ0ƒŸ8´Ÿ.íŸ. 7K Xƒ Ü 'î .¡ E¡-O¡A}¡¿¡!Ô¡ö¡ ¢+¢%>¢,d¢,‘¢¾¢Ú¢ö¢£"'£J£ e£q£!ƒ£#¥£É£"à£6¤,:¤+g¤,“¤#À¤€ä¤e¥#¥¥¥·¥:Ê¥2¦8¦)K¦$u¦0š¦˦ë¦ §)§/H§/x§6¨§ß§ã§ü§¨&*¨*Q¨#|¨? ¨à¨.ý¨,©$@©+e©‘©¢©±©Å©(婪6ª$Uªzª‘ª2®ªáªóª«$«6«U«p«‚« + •« «>·«#ö«#¬#>¬b¬$}¬#¢¬ Ƭ3ç¬3­<O­Œ­¦­H¿­N®<W®=”®3Ò®2¯"9¯ \¯i¯‡¯¡¯+»¯/ç¯6°:N°(‰°,²°/ß°3±C±KÓ±4²T²(g²h²Eù²?³X³q³г¦³©³­³±³ ¹³ó˳à³ù³´ )´26´3i´3´2Ñ´3µ38µ2lµ3ŸµÓµñµ¶$¶3¶D¶W¶l¶{¶жŸ¶¯¶ʶ<ä¶0!·!R·t·'Œ·/´·/ä·¸0+¸(\¸*…¸/°¸à¸û¸¹2¹L¹d¹!¹/¡¹ ѹÞ¹'ú¹"ºBº`º-uº:£º)Þº»#»?»,O»,|»4©»,Þ»# ¼!/¼Q¼j¼†¼¤¼À¼ Û¼ü¼#½<½%Q½w½(•½_¾½¾6¾,=¾0j¾0›¾.̾/û¾&+¿<R¿¿,–¿ÿá¿ê¿À'ÀEÀYÀqÀ'‹À*³À+ÞÀ( + Á3Á'SÁ/{Á%«Á2ÑÁ)Â&.Â%UÂ{˜Â$¬Â+ÑÂýÂ/Ã/GÃ.wÃ)¦Ã)Ðà úÃ'Ä&CÄjÄ3ƒÄ/·ÄçÄûÄ5Å5LÅ.‚űÅÅÅÞÅ#üÅ Æ<Æ=VÆ@”Æ ÕÆ ãÆ0ñÆ-"Ç(PÇ*yÇ8¤Ç5ÝÇ+È=?È>}È%¼ÈâÈ ÿÈ É/AÉ:qɬɽÉÒÉ8åÉ5Ê(TÊ}Ê5œÊ ÒÊ ßÊìÊ Ë Ë Ë,(Ë UË bË%o˕˦Ë#ÁË åË.òË !Ì1/ÌSaÌ3µÌ,éÌ ÍW#Í´{Í20ÎcÎ.‚αÎ0ÄÎ+õÎ!Ï?Ï]Ï-zÏ&¨Ï5ÏÏÐÐ,(Ð,UÐ*‚Ð%­Ð%ÓÐ3ùÐ.-Ñ+\шÑ$¢Ñ/ÇÑ.÷Ñ*&Ò:QҌҨÒ;ÄÒ7Ó$8Ó7]Ó•Ó´Ó-ÐÓ$þÓ6#Ô2ZÔ;Ô8ÉÔ1ÕO4Õ,„Õ-±Õ.ßÕ'Ö6ÖUÖ0qÖ4¢ÖJ×Ö"×6>×u×7ˆ×!À×/â×MØ6`Ø/—Ø4ÇØ,üØ,)Ù(VÙ,Ù(¬Ù(ÕÙ0þÙ4/Ú6dÚ9›Ú(ÕÚ'þÚ&Û EÛ!fÛ,ˆÛ.µÛ(äÛ Ü!(Ü.JÜ,yÜ,¦ÜÓÜ&éÜ4Ý(EÝ6nÝ$¥Ý,ÊÝ3÷Ý-+Þ8YÞ’Þ)®Þ(ØÞß9ß6Yß2ß)Ãß"íß<à"Mà(pà5™àÏà1îà- áNáeáyá—áµá-Õá-â$1â2Vâ%‰â&¯âÖâ öâ ã #ã3-ã aãmãpãbŠã,íãä + )ä4ä+Cä$oäA”ä&Öä*ýäj(å„“å%æ>æ'Zæ‚æšæ#«æÏæîæ* ç7ç.Vç$…çªçÇçàç'úç$"è$Gèlè,„è1±è4ãè+é0Dé@ué(¶é&ßé%ê&,ê%Sê,yê¦ê:ÃêCþêBë3aë.•ë#Äë>èëH'ì'pì.˜ìOÇìIí@aí8¢íNÛíR*î + }îˆî3§î5Ûî,ï>ï1]ï%ï#µïÙï"ôï-ð0Eð#vð šð5»ð8ñð-*ñ4Xñ2ñÀñlàñpMò ¾ò7Ìò)óO.ó2~ó0±ó>âó;!ô/]ô6ôAÄô*õ)1õ-[õ=‰õ:ÇõBöEöVö2uö'¨ö-ÐöhþöIg÷.±÷à÷Tú÷/Oø+ø5«ø<áø*ù?Iù?‰ùVÉù8 ú"Yú|ú-šú1Èú'úú!"û:DûOû*Ïû*úû%üAü]ü}ü›ü°ü6Åü!üüý=ýTý.mý œý ½ýÞý3óý)'þ2Qþ3„þ3¸þ&ìþ&ÿ4:ÿSoÿ9ÃÿCýÿ;AH}Æ&á,<54r0§2Ø2 $>c+¡Íí  @oNB¾\^"|(ŸÈ3è;,T-5¯-å-"Ad-€*®Ù*ù%$:J'…­9¿@ù:-T&‚.©.Ø6 .> m Š ¨ 1Ä ö  + 4 + ,T + ! + 0£ + Ô + .ï +   ? 1_ 3‘ Å $å 1 + < 0X 2‰ ¼ )Î ø 8 9O )‰ ³ Ó  ó 1Ki!…"§6Ê'0)3Z"Ž4±&æ3 A)a)‹)µ2ß03C$w=œ'Ú% (5I;6»%ò'"@2cB– Ù$ú(AH%ŠG°,ø-%S#o!“'µ#Ý !""D!g‰3›*Ï!ú#3@4t%©Ï"ç + (!.J7y&±Ø)ï?/"o$’"·"Ú ý!-@)n)˜%Â!è& + %12W2Š(½&æ (%F2l*Ÿ!Ê-ì4/O>$¾ã<ü$9/^"Ž"±.Ô,0&K r"“0¶+ç* #> )b ,Œ (¹ .â 1!C!-]!$‹!%°!Ö!õ!)"."A"_""q"=”"6Ò"$ #.#"K#n#*}#¨#¿#Õ#!î#$!.$!P$8r$7«$+ã$O%<_%)œ%(Æ%.ï%&*9&8d&c&,'/.'/^'Ž'2£'5Ö' ("(">(+a()((·(0à(,)>).^)()"¶)Ù) ì)H *V*5o*6¥*/Ü*) +)6++`+Œ+$¥++Ê+'ö+,$7,$\,),«,¿,Ð,?ê,*-C-]-.t-£-%À-æ--.%1.W.l.Œ.©.È.+ç. /$4/.Y/(ˆ/±/4Æ/0û/<,0Li0,¶0@ã0_$1*„1*¯1Ú1ié1)S2"}2; 28Ü2232H32{32®32á3$4'94.a4;4DÌ4/5*A5l5ˆ5œ5°5É5%ä5/ + 6:6K6\6"|6Ÿ6»6Ï6å6ø67 717B7S7d7u7†7 —7¸7 ×77ø708I83b8–8.±8(à8$ 9.9H9b9|9–9°9Ê9ã9)ü9&:A:*\:‡: :º:Ô:î:7;@;7Z;’;¬;Æ;à;ú;<!.<)P<z<”<¯<Ê<å<==,=B=6X==«=É=é=>$>B>`>~>›>¸>Ó>!î>3?+D?Fp?5·?í? @3.@b@2@)²@\Ü@+9A)eA)A$¹A?ÞA(B.GB1vB¨BÄB)àB, + C7C/QCACÃCáCD, D9MDG‡DLÏDDE:aE7œEÔEòEF*&F+QF+}F3©F+ÝF8 GOBG’G1¦G7ØG4H+EH(qH5šH2ÐH,I?0I,pI6IÔI"ðI.J0BJ!sJ:•JDÐJ6K.LK;{K&·K,ÞK0 L)ÀTÿT0U(OUGxU+ÀU-ìUPV9kV"¥V=ÈVBW>IW;ˆW6ÄWIûW-EX3sXr§XGY-bY„Y:Z>PZDZ=ÔZ:[8M[8†[#¿[(ã[ \$,\#Q\2u\)¨\0Ò\$]S(]&|]/£]8Ó]! ^+.^+Z^2†^-¹^(ç^*_4;_p_(„_­_Ì_"ë_Z`Ui` ¿`5Ë` a a a 0a =aGaca a‹aa ¶a + ÂaÍa ãaña/b91b8kb(¤b"Íb5ðb/&c'Vc+~c3ªcÞc-öc3$d'Xd>€dY¿de+/e[e7{eW³eG fSSf§f%¿fåfg gO4gO„gÔg1ñg#h:h0Qh0‚h³h8Êhii-5iBci1¦i.Øi+j3j2Qj „j3¥jNÙj7(k8`kF™k'àk+l4l(Sl"|l*Ÿl6Êl4m46m%km&‘m)¸m$âm"n$*nOnOfn(¶nßn1ÿn)1o-[o,‰o,¶o<ão6 p&Wp/~p=®p&ìp%qv9q °q"Ñq5ôq&*rQr3lr7 r'Ørs5sbUs'¸sàsósD t5Pt/†t4¶t'ëtVu/jušu¸uËu âu6ïu9&v=`v&žv;Åvw w'wEwcwww2”wÇw\äw+AxZmx4Èx-ýx+y4Cy-xy/¦y"Öy,ùy&z>zZzozˆzL—z8äzI{g{,y{&¦{*Í{.ø{3'|.[|>Š|HÉ|2}:E}$€},¥}2Ò}(~).~4X~)~$·~+Ü~FOdwŽ¥·Éé€!#€"E€ h€)‰€7³€ ë€%õ€+G/b(’»Ù<õ?2‚Cr‚¶‚Ђ'ë‚#ƒb7ƒ-šƒ ȃ!éƒ „'„C„&_„ †„%§„$Í„2ò„D%…$j…$…4´…;é…(%†N†3m†`¡†‡7‡%T‡$z‡+Ÿ‡0ˇcü‡`ˆtˆ*ˆˆ'³ˆ5Ûˆ*‰,<‰3i‰"‰<À‰%ý‰1#ŠUŠ&oŠ–Š#®ŠÒŠ*튋0.‹,_‹.Œ‹0»‹0ì‹.ŒDLŒ2‘ŒÄŒ$áŒ##!G/i:™9Ô#ŽD2ŽFwŽ@¾Ž8ÿŽP8H‰^Ò1+HtCBÔ?‘EW‘0‘.Α3ý‘1’3E’5y’5¯’1å’2“J“ d“2…“&¸“-ß“$ ”'2”3Z”AŽ”+Д!ü”%•D•ba•<Ä•3–5–EU–(›–(Ä–í– —0—@M—8Ž—Ç—å— ˜#&˜;J˜†˜ š˜¨˜4·˜'옙/™J™ d™+…™2±™2ä™2šJšfš!€š¢šPµšQ›X›(k›#”›¸›&Ô›+û›''œ'Oœ'wœŸœ-¼œ,êœ(,@5m£!¸/Ú2 + ž"=ž+`ž%Œž2²ž2åž)Ÿ'BŸ7jŸ2¢Ÿ9ÕŸ8 AH 'Š ;² 1î # ¡"D¡&g¡4Ž¡4á?ø¡!8¢Z¢:r¢­¢@Ì¢4 £5B£'x£O £Ê𣻥ե"ï¥!¦54¦j¦‰¦?ž¦FÞ¦%§B?§'‚§4ª§:ß§N¨Ci¨Y­¨4©4<©4q©˜¦©?ª>Qª>ª6Ϫ:«;A«O}«UÍ«@#¬Dd¬=©¬4ç¬E­>b­9¡­6Û­C®V®u®•®.²®Ká®?-¯?m¯?­¯@í¯4.°c°€°A °qâ°2T±*‡±!²±Ô±(ð±&²@²'O²-w²¥²²#à²<³A³#a³0…³"¶³Ù³Aù³.;´0j´&›´´$ß´MµRµkµzµ‹µšµ©µÁµÞµ#óµ¶(¶@¶O¶g¶„¶˜¶­¶¾¶Ù¶ò¶· · + )·#4·X· s· ”· ¡·­·!Ê·ì· ¸:¸I¸c¸7~¸0¶¸ç¸¹"¹9¹S¹ + d¹o¹(ƒ¹,¬¹#Ù¹ý¹º5ºOºjº<ˆº(źîº. »,:»,g»”»:¥»4à»/¼&E¼l¼‹¼œ¼·¼Ó¼ï¼( ½4½!D½f½3„½¸½˽ç½*þ½)¾%F¾l¾…¾¢¾ ¾¾ß¾'÷¾*¿J¿h¿*€¿*«¿2Ö¿0 À:À2ZÀ"À°À1ÌÀþÀÁ1Á2@Á8sÁ ¬Á.ÍÁüÁ"Â";Â1^©ÂÃÂßÂýÂÃ5ÃOÃ&jÃ"‘Ã"´Ã×Ã>öÃ)5Ä._ÄŽÄ®Ä8ÈÄÅÅ7Å9MÅ2‡Å)ºÅ+äÅ3Æ.DÆ6sÆ*ªÆ&ÕÆEüÆDBÇ5‡Ç*½Ç)èÇ$È37È"kÈ(ŽÈ,·È,äÈ1É'CÉ;kÉ6§É.ÞÉ6 Ê9DÊ1~Ê&°Ê*×Ê*Ë5-Ë+cË,˼Ë9ÜË)Ì;@Ì2|Ì$¯Ì+ÔÌ'Í-(Í2VÍ$‰Í/®Í'ÞÍ4Î;Î(Z΃Î8ŸÎØÎ'÷Î/Ï*OÏ,zÏ3§Ï5ÛÏ0Ð$BÐ=gÐ#¥Ð*ÉÐ*ôÐ/Ñ#OÑ!sѕѵÑZÉÑ$$ÒIÒ%_Ò …Ò“Ò¢Ò³Ò+ÄÒ*ðÒ$Ó,@ÓDmÓ)²Ó0ÜÓ+ Ô29Ô/lԜԥԮÔ$·ÔÜÔ5õÔK+Õ!wÕG™Õ%áÕÖ%ÖDÖbÖ,yÖ¦Ö,ÆÖóÖ×61×h×;€×:¼×:÷×$2Ø4WØ(ŒØ8µØ&îØÙ4ÙPÙgÙyÙ Ù™Ù+¬Ù(ØÙ4Ú)6Ú:`Ú"›Ú¾ÚÞÚøÚ.Û-GÛuÛ%”Û&ºÛáÛ.úÛ)Ü?ÜTÜ&hÜ&ܶÜ%ÖÜ'üÜ$ÝDÝ!\Ý~Ý-–Ý(ÄÝ íÝIÞ7XÞ6ÞÇÞ*ÝÞ*ß#3ß$Wß|ߓߥß<¶ß*óßà):à!dà%†à¬à#¼à7ààá!3áAUá2—á4Êá%ÿá%â.>â+mâ%™â ¿â!àâ$ã'ã Eã!fã*ˆã³ã$Ëãðãä#äBä`ä"€ä)£ä.Íä(üä-%å/Så<ƒå7Àå øå&æ@æWæ0wæ-¨æ(Öæ2ÿæ(2ç4[ç#ç(´ç9Ýç.è,Fè'sè)›è*Åèðè + é+(éTé&pé#—é&»é,âéê&"ê(IêGrê&ºêáê'ë-(ë?Vë2–ëÉë)äë1ì@ì+Yì…ì%£ì,Éì(öìí;í-Zí8ˆí7Áí7ùí51î&gî*Žî¹îÂîËîÔîÝî*ûî8&ï"_ï‚ï–ï"Ÿï+Âï(îï/ð!Gðið …ð’ð ›ð¨ð±ð"ºð/Ýð ñ3ñ7Jñ(‚ñ=«ñéñLò-Nò.|ò4«ò(àò) ó43óMhó/¶ó$æó8 ôDô]ô*}ô¨ô'Äô4ìôa!õ$ƒõ<¨õ0åõ-ö1Dö6vö+­ö%Ùöÿö(÷%H÷Un÷6Ä÷*û÷+&ø1Rø5„ø)ºø*äø+ù0;ù=lùªù¿ù ÏùVÛù2úFCúAŠúÌú$âú,û%4û2Zû'û>µûBôû+7ücü8ü(ºü%ãü9 ý,Cý%pý1–ý1Èý/úý2*þ]þ>tþ&³þ'Úþ.ÿI1ÿ.{ÿ+ªÿ%Öÿ üÿ07(h+‘0½/îb–.°0ß7#H-l/š&Ê.ñ0 !Qs9<É*%18W¨6Â3ù2-.`8*È)ó)G`z—³!Ïñ ) Ij†+¤&Ð/÷$'5L4‚·Òí! &/ .V &… ¬ -´ 1â % + : + U +  + q + .| + « + 1 + 3ô + >( 3g › » :Ñ : G 0d (•  ¾ *ß  +  %3 Y o $Œ ± Ä &Õ -ü -*-X'†0®(ß(/1(a(гÄâ7÷/I `m‰™­ ¶× ô! 7#X| œ#½á!!#!Eg,‡(´#Ý*$,Qi‚*–(Á*êJ-`IŽ#Ø!ü#B\Dx.½%ì1%D'j'’&º,á$.,S!€¢¿8Ú.&B+i=• Ó)ô8N)f/.À)ï,$F*k!–$¸$Ý$$'#L+p*œ)Ç(ñ."Il„š ²(Ó;ü,82e9˜Òã)#NM=œ8Ú"<5R/ˆ¸Ø-ò= 2^ ‘ 9¡ Û í + !%5![!/u!¥! µ!Ã!Ý!ù!4"H"X")o"$™"¾"Þ"ù"+ #&7#M^#/¬#/Ü#/ $5<$!r$H”$ Ý$%þ$.$%S%Ip%º%*Ú%(&$.&$S&0x&,©&*Ö&:'3<'0p'&¡'%È''î'6(/M(R}(%Ð( ö(;)=S)‘)¢)´)"Å)è)ÿ)**>H*‡*)š*(Ä*í*(+ ,+*M+:x+³+8Ñ+7 + ,3B,:v,/±,Há,E*-3p-2¤-9×-,.>.%\.@‚.(Ã. ì.) /-7/1e/(—/'À/,è/)01?0!q0C“0B×0.10I1z1”1)±1.Û11 + 21<2%n2#”2/¸2'è23,,3#Y3}3,•36Â3$ù3;4-Z4,ˆ4µ4/Ï4ÿ45'5095$j55£5¸5Ñ5å560!6 R60s6"¤6&Ç6&î6:7(P7y71‘7<Ã7;8.<81k8.8.Ì85û8519?g9$§9Ì96å9:i5:;Ÿ:XÛ:74;9l;:¦;2á;2< G<+h<!”<¶<Ò<,í<)=)D=.n=)='Ç=,ï='>"D>,g>3”>BÈ>' ?3?$P?(u?ž?#¹?Ý?0ü?)-@6W@&Ž@1µ@<ç@$A'BA#jAŽA>«A7êA'"BJB0iBšB7ºBòBC.C6CC zC†CC$»C:àC1D.MDI|DÆDäD5ùD,/E2\E,E/¼E0ìE'F%EF4kF. FÏF4äF7G(QGzGb”G#÷G7H/SH)ƒH%­H3ÓHI.&I'UI<}IGºIBJEEJ‹J/©J)ÙJ.K(2K9[K0•K3ÆK5úKW0L9ˆL;ÂL2þL&1M%XM$~M&£M.ÊMùMN2)N4\N‘N(°NÙN*ôN+O2KO<~O»O7×O9PIP#eP$‰P®P0ÍPþP6 Q2DQwQ&—Q)¾QèQùQR/RNRkR4‰R'¾R$æR S%S0;SlS{SS¢S·S ×SøS' T*5T-`T)ŽT,¸TåT)ÿT))U+SU+U«U5ÊU.V/V DVeV„VšV°V+ËV÷VW0.W,_W+ŒW¸W3ÐWXX9XRXdX {X!œX¾XÛXñXJ + YTUYTªY8ÿY58ZnZ8ˆZ9ÁZ,ûZ2([.[[.Š[&¹[6à[6\N\!_\!\£\$¾\ã\ÿ\*]7>]%v](œ]$Å])ê]%^%:^$`^%…^«^ ´^6¾^õ^%_%;_=a_:Ÿ_,Ú_0`8`3U`5‰`-¿`,í`Na(ia&’a)¹a3ãa'b$?b1db1–b,Èbõb$c19ckc"ƒc)¦cÐcêcñc øcd dI'd#qd#•d¹d*Ød+e)/e)Ye!ƒe¥eÄe!Ùeûe-fIf Yfef‚fžf¼f6Ûfg-g Ag bg ƒg¤g ³g.Ôg h&$h6Kh0‚h"³h/Öhi*%i(Pi(yi¢i¼i5Ûi+j/=j+mj5™jÏj%çj& k%4kZk!ck…kC£k3çk)l6El!|l3žl7Òl6 + m2Am#tm(˜m!Ámãmým2n5Mn$ƒn$¨n/Ín!ýn o)@o)jo)”o-¾o0ìo9p*Wp8‚pA»pýp-q'4qX\q-µq*ãq,r";r0^r4r%Är!êr s&&s5Ms#ƒs'§s&Ïs$ös>t=Zt'˜t*Àtët u,)u!Vu&xu&Ÿu3Æu)úu@$v/ev,•v<Âv9ÿv59w8owE¨w"îw/xAxQx`x:qx¬x5Åx6ûx*2y$]y$‚y6§y5Þy5z6Jz-z¯z Çz-èz.{ E{Df{«{¿{ Ö{9÷{!1|"S|$v|$›|$À|=å|#}(7}!`}&‚}&©}%Ð}6ö}-~'F~n~~•~7µ~!í~);9u0Ž¿*Ö'€.)€X€#t€,˜€,Å€ò€)6, c„'“)»;å,!‚/N‚-~‚2¬‚#ß‚ƒ+ ƒ+Lƒ9xƒ0²ƒ4ãƒ/„;H„6„„5»„.ñ„C …Gd…6¬…>ã…3"†/V†2††1¹†1ë†&‡1D‡-v‡9¤‡Þ‡&þ‡6%ˆ8\ˆ/•ˆ&ň숉/‰%D‰*j‰"•‰;¸‰5ô‰**Š1UŠ>‡Š0ÆŠ[÷Š?S‹4“‹È‹æ‹+Œ&1Œ*XŒ'ƒŒ«Œ"ºŒ(ÝŒ&_-;HÉ(Ž;Ž<LŽ<‰Ž<ÆŽ<@ S:t5¯å3ø&,!S8u&®Õäó ‘‘$-‘R‘b‘v‘Š‘œ‘°‘‘Ö‘è‘ú‘ ’’0’A’S’e’w’‰’›’­’Á’Ó’å’÷’ ““-“?“S“e“w“‹“Ÿ“³“Å“דè“ú“ ””0”B”T”f”x”Œ”ž”°”Ĕ֔蔕#•=•[•'y•¡•±•Á•(Ù•)–",–O–Nk–"º–Ý–õ– —!4— V—.c—9’—8Ì—$˜.*˜'Y˜"˜;¤˜à˜!ó˜)™?™#]™1™³™,ЙOý™#Mšqš%‘š·š"Ëš+îš ›R(›{›››¸›Ô›ç› ÿ›( œ5œ6Rœ ‰œ"ªœGÍœ / P q ’ ³ Ô õ ž 7ž Xž yž"šž½žÝžùžŸ5ŸQŸqŸŸ©ŸÅŸ6០(6 _ q  … %¦ Ì å ü ¡#5¡&Y¡.€¡¯¡Ê¡#è¡( ¢$5¢0Z¢‹¢4ª¢Jߢ&*£-Q££4“£.È£!÷£/¤'I¤q¤*ޤ)¹¤#ã¤"¥3*¥^¥z¥#™¥.½¥ì¥¦¦-<¦/j¦3š¦Φ*妧0§D§(X§)§«§¿§"Ù§,ü§9)¨Dc¨,¨¨\Õ¨n2©$¡©&Æ©0í©ª49ªnª$Žª+³ª&ߪB«,I«#v«%š«À«&ß«¬#$¬H¬!h¬2Ь:½¬9ø¬U2­1ˆ­º­Í­à­*ú­$%®!J®!l®!Ž®$°®"Õ®#ø®#¯#@¯d¯'¯§¯ï ߯°°>°5^°+”°À°à°±- ±1N±€±# ±ıر%ó±1²3K²²š² ©²!ʲì²3 ³=³ M³n³!޳°³7¿³.÷³&´>´W´)n´9˜´1Ò´*µ0/µ*`µ3‹µ0¿µ7ðµ(¶_C¶ £¶ + Ķ1϶3·:5·p·#Œ·°·$з(õ·¸!1¸(S¸|¸š¸+¹¸å¸ ¹@&¹%g¹"¹-°¹3Þ¹'º:º/Tº5„ººº"׺*úº"%»?H»Lˆ»>Õ»2¼?G¼1‡¼6¹¼<ð¼7-½;e½&¡½+Ƚ6ô½+¾5I¾¾‡¾'¦¾&ξ&õ¾¿6¿,Q¿4~¿"³¿(Ö¿*ÿ¿,*ÀWÀsÀÀ,©À&ÖÀýÀ#Á;ÁZÁyÁ)ÁºÁÚÁùÁ#Â!5Â%WÂ}Â/˜Â/ÈÂøÂ# Ã.0Ã_à yÚÃ(ºÃ'ãÃ8 Ä+DÄpĀĖÄ-µÄ4ãÄ3Å-LÅzÅÅ"™Å¼Å)ÏÅKùÅEÆcÆ#~Æ%¢Æ,ÈÆ%õÆÇ)8Ç'bÇ.ŠÇ¹Ç/ØÇ!È *È,4È*aÈCŒÈÐÈ ×È'áÈ É'É5CÉ yÉ šÉ/¨ÉØÉ4òÉ3'Ê[Ê6pÊ §Ê ÈÊ8éÊ$"Ë!GË&iËË(¬Ë)ÕËÿË'Ì=Ì8[Ì/”ÌFÄÌ Í !Í2.ÍaÍA~Í>ÀÍ&ÿÍ&ÎFÎ[ÎvΓÎ(¦Î%ÏÎ#õÎÏ1Ï/@Ï5pÏ$¦Ï ËÏ1ìÏ)Ð0HÐ#yÐ(Ð!ÆÐèÐûÐ Ñ6Ñ:UÑÑ2§ÑÚÑ&øÑ&Ò-FÒtÒŠÒŸÒ*¼Ò>çÒ&Ó(;ÓdÓ'‚Ó5ªÓ1àÓ.Ô,AÔ-nÔ-œÔÊÔ,ÛÔ3Õ<Õ<ZÕD—Õ.ÜÕ4 Ö.@Ö9oÖH©Ö)òÖ× :×&[×‚×š×·× + Ó×Þ×ð×ö×&Ø7ØJØ+bØ<ŽØ1ËØýØ/Ù>MÙ,ŒÙ¹Ù%ÐÙ4öÙ9+Ú.eÚ/”Ú2ÄÚ/÷Ú"'Û(JÛsÛ*‡Û²ÛÍÛ(æÛ3ÜACÜF…Ü5ÌÜ$Ý'Ý!/Ý=QÝ>ÝÎÝLæÝ 3Þ&AÞhÞ%„Þ6ªÞ3áÞ#ß"9ß)\ß!†ß"¨ß%Ëßñß à%à;<àxàŠà/›àCËà3á=Cáá)¡á)Ëá#õá#â+=âiâ}â™â¹â&Øâ(ÿâ!(ã*Jã#uã7™ã-Ñã6ÿã6ä(Vä)ä©äÆä9ãä-å-Kåyå"–å-¹åçå(æ.æLæ*cæŽæ-¥æ7Óæ# ç//ç0_ç ç)œç#Æç)êç*è5?èuè0‹è-¼èFêè/1é<aé#žéÂéáé%øé=ê-\ê?ŠêÊêåê'êê(ë;ë+Cë,oë*œë(Çë)ðë&ì<Aì4~ì:³ì9îì-(í/Ví/†í<¶íZóí7Nî)†î°î-Îîüî(ï,:ï3gï›ï+»ï'çï'ð 7ðAð\ð|ð˜ð·ð×ðñðñ--ñ[ñxñ0•ñ=Æñòò:òZò#yò%ò'Ãò$ëòó&%ó'Ló/tó¤ó!Âó äó.òó)!ô)Kô%uô›ô4¯ôäô8ÿô@8õyõ8‹õ:Äõÿõ%öAö,Iö%vö%œö4Âö÷ö'÷=÷S÷"n÷‘÷ª÷À÷Õ÷ñ÷* ø7ø-Nø-|øIªø)ôø ù2?ù$rù8—ù/Ðù.ú8/ú,hú•úA´ú2öú)û?ûDUûDšûDßû=$üFbü%©ü'Ïü ÷ü2ý'Ký4sý2¨ýÛýûý'þ*þIþiþ‡þ#¢þ'Æþ!îþ ÿ11ÿ0cÿ'”ÿ3¼ÿKðÿP<!$¯#Ô ø!)"Kn*Œ3·5ë+!6M9„&¾4å3Nf&„,«+Ø A,a"ޱÎ*æ+2=p)…¯$È'í94'n–µ"Õø4#G(k4”"Éì! + ,$Jo‰£/¼,ìe ` Eà =& + +d + ! + ² + (Á + *ê + = )S 5} 4³ )è ) -<  j )‹ *µ à 'ô ) F  W x (• $¾ .ã (&;:b0;Î( + <34p.¥MÔ2"MU#£*Ç0ò$#>H+‡@³:ô#/ S#t ˜¹Ï(æ%\5m’/ N/X3ˆ2¼*ïFa${. &Ï8ö(/'X1€.²5á59M5‡5½5ó-)W.v ¥&²&Ù48mŠ#¦#Ê.î(F^8}=¶ô5Jh)†w°(6A.x%§7Í&C,p*ˆ+³Bß3"%V|=›-Ù0DZn–ª¿Óèþ ( B V i z ” © ¿ Õ  + è *ó!("G",b"-",½",ê",#,D#+q#4#3Ò#0$7$V$.v$¥$/·$-ç$2%)H%&r%3™%Í%Dì%1&N&m&"‹&7®&Ræ&$9')^' ˆ'©'È'æ'(#%()I(,s(1 (*Ò(ý(8)8K).„)-³)8á).**I*$t*$™*$¾*$ã*-+6+P+&p+$—+0¼+?í+-,K,*a,DŒ,2Ñ,$--)-,W-7„-&¼-1ã-F.\.2x.*«.5Ö.' /"4/DW/-œ/Ê/&Ý/'0),00V0‡0¥0@Ã010#1#T1)x15¢14Ø1/ 26=2't25œ2$Ò2)÷26!3FX3Ÿ3»3+×344'84%`4†4.¥44Ô40 5:5Z5&s5š5³5#Ì5 ð5ú5 6$6 A60b6“6£6³6È6Ý6ü67'07IX7)¢7'Ì7!ô78")8L8j8%ƒ8©8#É8í86ó8 *9.K99z99´9)î9%:A>:€:Uš:ð: ;"$;6G;<~;0»;ì;0 <0:<çk<S=q= =7°=+è=>&>@>S>+j>#–>º>Ô>ñ>. + ?A9?7{?=³?.ñ?' @3H@)|@5¦@ Ü@ý@A'A%EAkA„AžA¾AÝA8üA5BNB,cB-B.¾BíB"C$C5C.RC)C«CÀC&ÛC)D",DODeD!zD'œDÄD0áD&E/9E"iEŒE¥E(½E4æE(F.DF=sF#±FÕF*ëF*G1AG1sG¥G$ÄG4éG5H+TH-€H"®H ÑH/òH-"I=PI/ŽI;¾I/úI!*J2LJJ1ŸJ8ÑJ7 + K$BKgK5‡K3½K1ñK,#L9PLŠL¨LÄL7ÜL'M6P&oP–P´PÓP3òPG&QnQ‚Q%‹Q±Q%ÊQðQ6R5GR}R%˜R"¾R áR S-#S"QS!tS$–S%»S.áS T!1TSTqTT§TÁTDÖTV VU4V6ŠV=ÁVSÿVeSW¹WEØWIXhX!…XاXE€Y!ÆYEèYM.Z5|Z0²Z5ãZ[-['<[2d[>—[>Ö[\^1\A\sÒ\3F]2z]T­][^„^^aã_ÉE`ÑaÙáb¸»d<teT±eTfP[fD¬fYñf`KgS¬gçhïèi[ØkV4lD‹l<ÐlM m<[mM˜mYæmO@nŠn\oYxoKÒoMp>lpL«pYøp]Rqì°q_rMýr”KsàsJv3Kvcvãxsy‹z@©z>êz@){Tj{?¿{Pÿ{P|mÞ}TL~P¡~Vò~SIO·íf¥€[ ThG½W‚U]‚8³‚Qì„O>…PŽ…=ß…7†?U†1•‡LJÛ‡ + û‡ + ˆ;ˆ9MˆC‡ˆ/ˈ1ûˆ>-‰‡l‰ô‰# Š,-Š ZŠ1gŠM™ŠçŠ"‹$#‹(H‹q‹0‹9À‹5ú‹$0Œ$UŒ!zŒœŒ)¯Œ$ÙŒþŒ('&Pw+”GÀ7Ž;@Ž5|Ž0²Ž•ãŽy#—»ÌHÝ<&c5t4ªAß!!‘"C‘*f‘‘‘4¯‘8ä‘8’V’Z’*s’ž’/®’5Þ’.“RC“)–“8À“ù“/”EA”‡”™”!©”%Ë”3ñ”%•;5•%q•—•,±•=Þ•–..–]–l–.~–­–È–×– + ç–ò–N—(U—(~—$§—#Ì—-ð—!˜@˜=_˜8˜EÖ˜2™2O™E‚™LÈ™?š@Uš7–š>Κ" › 0› =›#^›"‚›7¥›8Ý›EœE\œ0¢œ1Óœ9<?§|M$ž@rž³ž0ÌžýžWŸןõŸ 3 O R V Z  b l t !ˆ %ª Р ã 9ð ;*¡:f¡7¡¡:Ù¡7¢8L¢8…¢#¾¢'⢠+ £"£2£D£V£o£££§£¶£Ö£Pó£4D¤&y¤& ¤8Ǥ4¥65¥l¥/‚¥&²¥(Ù¥;¦>¦\¦&x¦Ÿ¦½¦Û¦"ö¦1§K§!\§(~§!§§&ɧð§7¨;H¨-„¨ ²¨Ó¨ð¨4©47©Fl©0³©'ä©( ª&5ª*\ª-‡ª µª%Öª*üª#'«"K«!n«6«#Ç«2ë«_¬~¬™¬7 ¬9ج>­=Q­=­9Í­H®P®4W®#Œ®°®#¹®$Ý®¯¯ ;¯ \¯2}¯6°¯:ç¯>"°+a°1°D¿°0±G5±4}±:²±1í±"²B²*]²2ˆ²!»²4ݲ4³;G³Iƒ³Fͳ,´)A´1k´´B¹´>ü´;µ PµcqµCÕµE¶_¶#}¶ ¡¶-¶ð¶(·B7·Iz·Ä·Ø·Cì·B0¸<s¸<°¸Pí¸J>¹=‰¹NǹPº6gº(žº&Ǻ"îº9»?K»‹»¢»¼»OÑ»C!¼+e¼&‘¼@¸¼ ù¼ ½½ &½ 2½ >½>J½ ‰½ •½'¡½ɽÛ½0÷½ (¾34¾ h¾>t¾u³¾A)¿7k¿ £¿m¯¿ÐÀ<îÀ&+Á=RÁÁB¤Á6çÁÂ<ÂZÂFwÂ'¾Â/æÂÃ-Ã)<Ã)fÃ'Ã"¸Ã#ÛÃ0ÿÃ10Ä*bÄÄ%¦Ä9ÌÄ-Å)4ÅG^ŦÅÀÅAàÅ="Æ%`Æ;†Æ"ÂÆ"åÆ;Ç*DÇ9oÇ>©Ç@èÇP)È7zÈU²È-É.6É,eÉ(’É"»É"ÞÉ2ÊB4ÊZwÊ ÒÊNóÊBËCWË ›Ë0¼ËXíËDFÌ-‹Ì6¹Ì,ðÌ2Í(PÍ5yÍ(¯Í(ØÍ9Î4;Î@pÎA±Î%óÎ'ÏAÏ `Ï?Ï8ÁÏ/úÏ$*ÐOÐ'oÐ4—Ð3ÌÐ3Ñ4Ñ+OÑF{Ñ&ÂÑ6éÑ$ Ò-EÒ4sÒ.¨Ò>×ÒÓ*3Ó)^Ó ˆÓB©Ó@ìÓD-Ô*rÔ#Ô=ÁÔ"ÿÔ8"Õ;[Õ&—Õ6¾Õ.õÕ$Ö=Ö$VÖ${Ö& Ö2ÇÖ=úÖ&8×7_×6—×7Î×,Ø-3Ø aØ nØ>xØ ·ØÄØÇØkâØ3NÙ‚Ù ‘Ù›Ù/¯Ù#ßÙ_Ú/cÚ.“ÚyÂÚ¥<Û3âÛ+ÜABÜ6„Ü»Ü:ÙÜ*Ý.?Ý5nÝ.¤Ý=ÓÝ;ÞMÞlÞ‰Þ*©Þ3ÔÞ3ß%<ß4bß7—ßHÏßBàA[àMà3ëà:á4Zá9á<Éá8â?âM_â`­âã?.ã=nã>¬ãIëãL5ä3‚äA¶äeøäW^åV¶åM æ\[æd¸æç)8çHbçT«çQè.RèKè-Íè2ûè#.é3Ré>†é@Åé.ê55êBkê>®ê8íêD&ë6kë.¢ë€Ñë„Rì×ìKìì28í[kíFÇíEîPTîG¥îIíîB7ïMzï:Èï3ð77ðYoð9Éðeñiñ‚ñ9žñ:Øñ<òuPò^Æò=%ócóoó7ïó='ô=eôC£ô6çôKõKjõZ¶õ?ö0Qö#‚öB¦ö>éö-(÷&V÷=}÷W»÷8ø8Lø&…ø&¬ø Óøôøù+ù;Cù(ù ¨ùÉùâù>ú"Aú"dú‡ú:›ú7ÖúRûOaûP±û=ü=@ü6~üZµü6ýEGýPýPÞý/þ+Mþ/yþE©þQïþEAÿ0‡ÿ0¸ÿ7éÿ1!&S;z$¶!Û%ý2#V‰gQñnC ²9Ó9 9GB&Ä ë> 5KA5Ã5ù4/!d:†FÁ(/1+aH:ÖL-dz"ß@1C7u7­Cå7) 'a %‰ %¯ =Õ ) + -= + -k + =™ + -× + F $L 8q .ª 1Ù 9 5E ${ 5  <Ö  G1 Hy ! `ä EMeV³4 + 2?2r"¥Èç'#(K&t?›)Û@EF%ŒI²)üF&'mO•7å8<VJ“<Þ0\L4©7Þ&?=@}@¾,ÿ5,%b@ˆQÉ/:K-†J´*ÿP*={H¹&>)*h?“.Ó./10a3’(Æ?ïG/2w/ªCÚJ5i Ÿ2À%ó4INM˜1æ97#qU•%ë'%9%_#…$©6Î2 @8 2y )¬ 3Ö , + !H7!>€!6¿!-ö!%$"(J"Qs"IÅ"6#4F#1{#D­#:ò#E-$7s$«$<È$/%=5%.s%-¢%DÐ%E&*[&5†&/¼&.ì&F'=b'; '=Ü'>(@Y(Uš(Dð(15)*g)Q’):ä)E*(e*Ž*:£*Þ*'ø* +7@+Rx+KË+3,(K,1t,¦,C»,$ÿ,$-$C-@h-5©-0ß-1.WB.Mš.8è.]!/R/3Ò/80=?0-}07«0Bã0e&15Œ1OÂ1O2b29}29·2ñ2+ 3.932h38›34Ô3D 4.N41}4F¯48ö4./5^56|5Z³5+6O:65Š6@À6F7/H78x7±7+Ñ72ý7/08%`8*†8*±82Ü8,9<9&W9d~9+ã9*:*::?e:1¥:0×:%;5.;1d;–;&¶;&Ý;-<-2<=`<-ž<6Ì<@=6D={=8š==Ó=<>[N>8ª>Kã>p/?B ?4ã? @Ž&@,µ@8â@QAOmAC½AKBAMBBBBÒB$C*:C4eCPšCFëC02D)cDD©D¿D!ÕD#÷D+EEGEE E8³E;ìE1(FZFpFˆFF¶FÉFÜFïFGG(G;G2NG0G9²GNìG1;H8mH;¦H!âH6I>;I8zI³IÐIíI + J'JDJ aJ‚J4žJ"ÓJöJ8KMKjKˆK¦KÄK=âK L=>L|LšL¸LÖLôLM%0M6VMM«MÉMçM6NÎRB ScPSJ´S9ÿS79T,qTQžT=ðT:.U;iU3¥U:ÙU9V>NV5V7ÃVZûVVW"uW"˜W?»WDûWG@XJˆXFÓX>YNYY'¨Y$ÐYõY<Z3QZ3…Z?¹Z3ùZH-[Tv[Ë[6ä[?\?[\,›\,È\6õ\7,]4d]E™]1ß]=^O^%n^B”^7×^0_P@_X‘_Kê_=6`Gt`2¼`8ï`9(a=ba) a9Êa'b<,bFib=°b/îb=cL\c@©c>êc9)d4cdJ˜dAãdG%e1me:Ÿe/Úe/ + fD:f%f;¥f4áf%gXk&ÏkMök#Dl3hl;œlWØl60m4gmZœmD÷m+q5’q˜ÈqFarJ¨rUórUIsWŸsQ÷sVIt. t7Ït,u34u%hu4Žu,Ãu@ðu%1voWv-Çv:õvF0w"ww:šw5Õw8 x6Dx5{x;±x7íx%y/<…Q{…:Í…6†0?†p†H†(Ù†0‡[3‡C‡AÓ‡Vˆ:lˆ<§ˆ"äˆ+‰13‰0e‰Z–‰oñ‰RaŠ9´Š:îŠ<)‹8f‹#Ÿ‹1Ëõ‹dŒ3xŒ!¬Œ9ÎŒ,+5/a-‘I¿9 Ž)CŽ/mŽKŽ&éŽ&Š7%Â)èO/b$’D·?ü6<‘-s‘E¡‘‚ç‘2j’’´’UÑ’I'“5q“=§“4å“m”:ˆ”Ôâ”ú” •@ •Ea•E§•,í•F–a–~––¬–Ê–à–<þ–!;—g]—CÅ—{ ˜:…˜2À˜ó˜4™CE™?‰™,É™?ö™&6š']š…š ¥šÆšTÚš=/›Qm›¿›2Ø›+ œ67œ@nœ>¯œ@îœJ/hz9ãFž$dž2‰ž=¼ž8úž:3Ÿ:nŸ:©Ÿ+äŸ? WP #¨ Ì ä ¡¡3¡&J¡#q¡#•¡'¹¡)á¡. ¢3:¢Un¢ Ä¢:΢8 £(B£Xk£7Ä£'ü£$¤>?¤R~¤RѤ $¥E¥*`¥#‹¥q¯¥:!¦-\¦,Ц%·¦&ݦ §4%§+Z§&†§,­§4Ú§P¨-`¨;ލNʨN©0h©0™©:Ê©aªgªH‡ª6Ъ4«2<«9o«ƒ©«-¬G¬Ca¬;¥¬Já¬>,­Ck­5¯­5å­]®=y®<·®ô®-¯A?¯7¯F¹¯/°0°8I°/‚°2²°5å°7±5S±I‰±?Ó±²/2²b²4€²µ²BÕ²N³Pg³(¸³Sá³T5´JŠ´@Õ´]µStµ€Èµ)I¶-s¶%¡¶SǶS·Io·O¹·5 ¸B?¸Q‚¸Ô¸Hð¸O9¹F‰¹;й: º#Gº#kºLº<ܺ?»?Y»A™»PÛ»V,¼9ƒ¼)½¼9ç¼)!½rK½K¾½> + ¾#I¾Gm¾=µ¾Bó¾!6¿X¿8m¿G¦¿@î¿&/À8VÀ+À»ÀJÛÀ#&ÁJÁ!bÁM„Á<ÒÁ$Â$4Â#YÂ#}Â=¡ÂEßÂE%ÃEkÃ+±Ã%ÝÃ(Ä,Ä`EÄ`¦ÄÅ:"Å-]Å‹Å/ªÅ:ÚÅ3Æ3IÆ1}Æ,¯Æ2ÜÆ;Ç5KÇ4ÇN¶ÇÈ'È<EÈ9‚ȼÈ(ÚÈ,É50É8fÉ.ŸÉ-ÎÉAüÉ=>Ê?|ÊJ¼ÊIË*QËA|Ë>¾Ë0ýË3.Ì<bÌHŸÌDèÌD-Í&rÍ™ÍCµÍ#ùÍIÎ9gÎ@¡Î2âÎmσϢÑÁÑ3áÑ;ÒHQÒšÒ¶Ò:ÌÒIÓQÓBjÓ+­Ó4ÙÓAÔSPÔI¤ÔdîÔBSÕ6–Õ@Í՜֫ÖhÁÖP*×?{×C»×Cÿ×\CØ` ØNÙXPÙP©Ù@úÙT;ÚIÚFÚÚB!ÛMdÛ3²Û?æÛ2&Ü>YÜc˜ÜFüÜECÝN‰ÝNØÝD'Þ#lÞ5ÞSÆÞŽß2©ß2Üß$à4à*Sà1~à °à.¾à8íà'&á(Ná*wáN¢á ñá(â/;â)kâ!•âF·â8þâ37ã-kã™ã(¹ãUâã&8ä_ä!{ää¹ä$Ñä*öä !å:Bå!}å%ŸåÅå$Ýå*æ-æ Mænæ#Œæ!°æÒæ&îæ ç#ç38ç'lç8”çÍççç'ýç/%èUèrèP‹è'Üè(éK-éDyé)¾é,èé!ê'7ê_ê!xêšê<¶ê8óê@,ë*më"˜ë?»ë+ûë('ìXPì0©ì(ÚìIí?Mí@íÎíSìíJ@î9‹î/Åî.õî$ï.>ï)mï"—ï0ºï:ëï&ð->ð*lðF—ðÞð(üð$%ñ@JñA‹ñ<Íñ! + ò%,ò9Rò-Œò.ºòBéòA,ó'nó$–óF»óAôLDôF‘ô*ØôJõ2Nõ)õE«õ$ñõ9öPö?möN­ö1üö@.÷*o÷#š÷!¾÷9à÷ø6øSø rø“ø²øÑøîø/ ù+<ù9hù+¢ù\Îù;+úAgú,©úÖúWõú Mû%nû”ûI­ûJ÷û@Bü3ƒü;·ü:óü?.ýNnýC½ýWþZYþC´þ6øþ9/ÿ2iÿEœÿ.âÿ<BNA‘FÓ2QMJŸ1êOIl<¶3ó:'3b>–9Õ<)LRvBÉS D`+¥BÑ/9DM~3Ì667;n*ª5Õ+ H7,€=­?ë6+ ;b Fž Nå =4 + 0r + X£ + .ü + 8+ Id 9® ,è / &E l _… )å  *+ V e ~ — 8¬ 8å 31RQ„.Ö;4A;v6² + é + ô + ÿ% + 06KV‚&Ù[+\"ˆ«Êè6/88h$¡-Æ@ô5EOB•BØ%1A:sU®2&7&^…œ­ ÀÍ=æ:$G_>§Fæ+-"Y|!˜8º2ó&'C%k‘0¬Ýø*/)Z"„,§(Ô&ý$)B"l?1Ï(S*F~:Å27O*‡-²àýG.8v#¯=Ó/(Aj+}J©ô.T@J•Aà2" U 0u A¦ ,è  !%6!*\!$‡!0¬!.Ý!6 ""C",f"“"®"&Î"!õ"##(;#7d#Bœ#:ß#=$>X$L—$Gä$&,%-S%%"˜%8»%Bô%27&Cj&2®&@á&'"'3J';~'9º'7ô'.,(+[(3‡(&»(â(<)=)/X)%ˆ)'®)2Ö) *%*2C*Rv*1É*(û*+$+AP+K’+;Þ+&,1A,Es, ¹,6Ú,:-.L-={-4¹-)î-0.7I.E.KÇ.9/7M/)…/+¯/ Û/ + è/ + ó/ þ/ 03,0@`08¡0#Ú0 þ0- 1:91/t15¤1,Ú1&2.2 A2N2 a2 n2+{2+§2 Ó2@à2J!31l3Sž3"ò3\4Ir40¼4Cí4;15-m5I›5Wå59=6)w6;¡6Ý6.ü64+7&`71‡7?¹7qù7-k8J™88ä889?V9B–94Ù9):&8:._:,Ž:z»:E6;=|;/º;Eê;D0<<u</²<>â<@!=Tb=·=Ï= ã=oð=`>Ss>WÇ>?)8?7b?/š?6Ê?.@J0@G{@.Ã@*ò@:A2XA*‹A9¶A=ðA/.B;^B6šB6ÑB4C%=CJcC(®C0×C8D^AD? D7àD-E-FEtE4E'ÄE8ìE3%F2YFsŒFGG:7GIrG?¼G"üGAHCaH2¥HBØH9I.UI„I<£IEàI3&J7ZJH’JÛJöJ?K?QK;‘K.ÍKAüK5>L3tL7¨L!àL"M %MFMdM#‚M¦MÄM!äM"N)N!IN;kN,§NBÔN@OIXOJ¢O&íO&P';P(cP*ŒP2·P(êP Q> QA_Q,¡QÎQëQ R:RJR@dRA¥RUçRM=S%‹S±SNÌSNT,jTC—T>ÛT>UBYUœU ¬U8ÍUV"VFBV‰V¢V*¹V8äV8W8VW-W5½W3óW3'X<[X1˜X1ÊXüX,Y?Y?\YœY»YÚY#êYZ$Z =Z?IZ$‰Z'®Z)ÖZ'[*(['S[({[*¤['Ï[)÷[)!\(K\)t\6ž\2Õ\+]44]0i]š]¸]×]Hñ]5:^8p^]©^1_X9_&’_-¹_)ç_` -`YN`8¨`0á`Pa3ca6—a3Îa>b?Ab'b0©b?Úb!cUxh”x-ýx1+yP]yN®yýyz,z2Cz vz-—z6ÅzOüzL{7g{;Ÿ{Û{4ø{--|8[|A”|5Ö|O }?\}?œ}?Ü}>~X[~I´~Gþ~HF?KÏ$€1@€Ir€8¼€&õ€:LWA¤Gæ3.‚:b‚E‚?ã‚7#ƒU[ƒQ±ƒ=„;A„*}„+¨„8Ô„= …AK…I…-×…3†J9†=„††Eâ†&(‡$O‡<t‡B±‡)ô‡Rˆ.qˆ2 ˆÓˆ0툉'‰/0‰<`‰1‰ωã‰û‰Š8Š(XŠ?Š%ÁŠDçŠ ,‹*M‹*x‹?£‹*㋌D*ŒPoŒOÀŒ-F>3…2¹?ì>,ŽBkŽ,®ŽÛŽEôŽ!:|\5Ùi@yBºDý<B‘<‘%¼‘1â‘*’?’]’1|’-®’1Ü’5“0D“-u“<£“4à“)”;?”C{”S¿”,•(@•@i•1ª•Ü•%õ•–7:–,r–>Ÿ–7Þ–?—PV—!§—,É—.ö— %˜JF˜:‘˜)̘$ö˜9™*U™E€™)Æ™+ð™šD0šuš„š$Ÿš-ÄšPòšAC›A…›MÇ›(œ>œLSœ> œPßœ60?g>§+æ$ž97ž2qž¤ž.¹žCèž',Ÿ"TŸywŸ(ñŸF 2a 3” 3È 6ü '3¡8[¡(”¡A½¡Pÿ¡WP¢\¨¢£9!£3[£>£/ΣEþ£7D¤;|¤=¸¤fö¤>]¥Fœ¥Dã¥-(¦0V¦1‡¦(¹¦3â¦#§:§:W§D’§$×§.ü§+¨AI¨:‹¨BƨL ©V©@u©H¶© ÿ©. ª,Oª%|ª>¢ªáªEðªF6«#}«,¡«.Ϋý«¬ *¬!K¬m¬ ¬E®¬0ô¬*%­ P­6Z­<‘­έè­®%®,B®+o®›®+µ®9á®?¯;[¯>—¯%Ö¯.ü¯.+°/Z°5аÀ°Aß°4!±#V±,z±#§±˱ ä±²5$²Z²*s²9ž².ز3³;³GX³ ³$´³Ù³ò³´( ´*I´ t´•´²´fÍ´r4µt§µF¶;c¶(Ÿ¶<ȶR·<X·<•·CÒ·C¸(Z¸Cƒ¸BǸ + ¹.!¹8P¹.‰¹1¸¹0깺85ºGnº)¶º0àº2»@D»3…»1¹»/ë»2¼N¼ W¼Ba¼ ¤¼&ż&ì¼>½CR½-–½1Ľö½F¾>Z¾<™¾-Ö¾f¿/k¿(›¿,Ä¿=ñ¿6/À/fÀ>–ÀCÕÀ9Á'SÁ-{ÁD©ÁîÁ#Â0*Â%[ˆ ›Â.¢ÂJÑÂ*Ã*Gà rÃ9“Ã<ÍÃ; + Ä9FÄ'€Ä ¨ÄÉÄ.éÄ-ÅLFœŦÅ)·Å(áÅ* + Æ+5Æ>aÆ  ÆÁÆ)ÛÆ)Ç)/ÇYÇ2rÇ3¥Ç'ÙÇ.ÈE0È;vÈ&²È4ÙÈ'É76É5nÉ/¤É ÔÉ"õÉFÊ,_Ê<ŒÊ1ÉÊ=ûÊ 9Ë>ZË5™Ë)ÏË + ùË0Ì$5Ì[ZÌ?¶Ì3öÌ?*Í*jÍ@•ÍKÖÍG"ÎJjÎ>µÎ1ôÎ)&Ï!PÏ*rÏ4Ï;ÒÏ%Ð%4Ð3ZÐ"ŽÐ ±Ð(ÒÐ)ûÐ)%Ñ/OÑCÑ6ÃÑ7úÑ@2ÒGsÒ»Ò2ÄÒ*÷ÒY"ÓB|Ó1¿Ó2ñÓ-$Ô1RÔC„Ô4ÈÔ)ýÔ!'Õ.IÕBxÕ'»Õ,ãÕ+Ö+<ÖKhÖG´Ö9üÖ16×h×'†×;®×(ê×2Ø2FØ<yØ7¶Ø\îØ<KÙ9ˆÙLÂÙKÚG[ÚO£Ú\óÚ$PÛ8uÛ®Û¾ÛÍÛPàÛ1ÜEKÜ;‘Ü/ÍÜ+ýÜ+)ÝEUÝ;›Ý<×Ý@ÞIUÞ"ŸÞ.ÂÞ1ñÞ1#ß Ußavߨßêß)ÿßE)à1oà(¡à+Êà$öà,áWHá á*²á-Ýá- â*9â+dâKâÜâ2øâ+ãDã)bã?Œã(Ìã.õãD$äiä:„ä¿ä.Üä+ å.7åfå$„å:©å.äåæ3#æ@Wæ%˜æ¾æ:Íæ.çH7ç-€ç1®ç0àçBè,Tè èE¢è;èèH$é8mé:¦é=áéIê?iê?©ê=éêT'ëZ|ëD×ëOìClì;°ì8ìì;%íEaí2§íCÚí1îRPî(£î1ÌîDþîECï6‰ï(Àï"éï ð>ð-\ð1Šð)¼ðCæð=*ñ7hñC ñEäñ5*òV`òB·ò:úò 5ó&Vó4}ó0²ó3ãó-ôEô"Tô)wô1¡ô†ÓôDZõQŸõ3ñõ%ö@6ö?wö?·ö?÷ö7÷#J÷Dn÷N³÷ø?ø+Yø#…øG©ø1ñø#ù3ùCù]ùlù)ù©ù¾ùÔùêùþùú(ú>úRúfúzúŽú¢ú¶úÊúÞúòúûû.ûDûXûlû€û”û¨û¼ûÐûæûúûü$ü:üPüdüxüŒü ü´üÈüÜüðüýý,ýBýVýjý€ý•ý©ý/Åýõý"þ"7þ-Zþˆþ›þ¬þ/Æþ0öþ/'ÿWÿruÿ4èÿ!%?&e,Œ ¹?ÇCFK)’?¼+ü*(DS˜+­-Ù"2*:]&˜5¿cõ*Y&„.«Ú-ð6Ugd'Ì"ô!9Ol/|¬@Ë% &2WY±,Ï,ü,),V,ƒ,°,Ý, + ,7 ,d ,‘ $¾ 0ã ( + &= + "d + "‡ + &ª + "Ñ + "ô + " ": E] &£ ,Ê ÷  + !! %C i ƒ & #Ä (è . :@  {  œ $½ 3â (9?$yEžTä-9:g¢@¹8ú%32Y3Œ À&á2+;+gC“ ×$ø%6Czš$³GØ= B^¡7»(ó;=Z>˜×$ö4?PLWÝ<5trŒç4t2©:Ü%I=-‡3µ5é4QT8¦-ß/ )=/g#—/»,ë/;H7„3¼qðEb¨Çá-þ',$T$y$ž,Ã(ð&&@&gŽ*¬×ö# 9"Z(}4¦BÛ* *I *t FŸ @æ *'!.R!!š!+¸!6ä!9"(U"~"-’"5À")ö"C #d#.}#0¬#2Ý#$N$Gn$!¶$Ø$ó$<%OM%?%-Ý%; &7G&A&AÁ&K'"O'ur'#è' + (A(DY(Pž(ï(().7),f)9“)Í)#å)) *3*S*,s*  *!Á*@ã*%$+#J+-n+4œ+,Ñ+þ+C,F_,$¦,*Ë,2ö,*)-HT-]-Gû-;C.P.;Ð.6 /OC/B“/CÖ//0;J0;†0!Â0>ä0#10+15\18’1:Ë12)#2:M2>ˆ2,Ç2)ô2+3,J3w3—3¶3,Õ3(4+44J4'4'§4Ï4.æ4#5"95\5'w5-Ÿ56Í5!6<&63c6—6+­62Ù6 7$+7'P70x7,©7KÖ7/"8R8h8"86¤8?Û8=96Y99¬9$µ9Ú9*ó9]:$|: ¡:'Â:-ê:5;/N;~;0›;-Ì;7ú;"2<;U<$‘< ¶<:À<5û<W1=‰= ='ž=Æ= å=L>*S>~>K>'Ù>D?<F?ƒ?:š?(Õ?(þ?5'@-]@'‹@-³@ á@/A-2A`A?~A"¾ACáA=%BXcB#¼BàB4ïB$CQACH“C,ÜC, D6D)PD%zD D6ºD2ñD.$E)SE}EL—EIäE..F.]FFŒF4ÓF:G,CG4pG)¥GÏG)çG)H%;HOaH±HEÐH%I5}c¼cJØc=#dCadE¥dFëd02e5ce1™eJËe>fFUf1œf#Îfòf.gW=g6•gPÌgh=h5Bh-xh¦h3¯h9ãh5i2Si7†i3¾iTòiHGjPjYájC;kEk7ÅkAýkr?lJ²l:ýl+8m/dm”m.¯m2Þm;n(Mn9vn-°n-Þn o"o$9o^o'~o#¦o Êoëo p/+p [p |p9pE×pq7q)Vq(€q%©q*Ïq.úq')rQr.jr)™r6Ãr#úr&sEs=Us9“s+Ís/ùs)tA}*‡}/²}!â}5~$:~7_~B—~#Ú~þ~0%6!\-~¬+Ì2ø%+€(Q€@z€?»€.û€K*Yv]Ð%.‚%T‚"z‚(‚Æ‚-Ú‚5ƒ)>ƒBhƒ?«ƒAëƒ1-„D_„D¤„0é„7…<R……¬…'Ì…/ô…($†#M†)q†.›†1ʆ&ü†,#‡ P‡2q‡/¤‡:Ô‡ˆ;+ˆ!gˆ.‰ˆ1¸ˆ%êˆK‰1\‰%މ(´‰#݉ŠF Š*gŠ5’ŠEÈŠ,‹$;‹'`‹ ˆ‹%©‹Ï‹ê‹Œ.Œ)KŒtuŒ‚êŒVmEÄ1 + ŽA<Ž~Ž(Ž,¹ŽGæŽ7.=f?¤Bä1'5Y23Â3ö*‘/D‘6t‘«‘,Ñ$ð‘.’)D’=n’4¬’)á’I “=U“S““,ç“Q”>f”=¥”gã”AK•g•+õ•5!–>W–,––RÖB—TY—Q®—4˜-5˜4c˜-˜˜Ƙå˜9™4=™sr™gæ™Nšjš3qš ¥š<¯š<ìš=)›-g›V•›ì›/ œ49œ,nœ;›œ2ל6 + 8A@z@»@üN=ž@Œž@Íž@Ÿ7OŸ&‡Ÿ:®ŸéŸ.üŸ,+ !X (z K£ !ï  ¡!2¡!T¡0v¡,§¡Ô¡!í¡:¢=J¢$ˆ¢:­¢è¢£*!£›L£è£F¤0I¤-z¤K¨¤0ô¤M%¥s¥1‰¥6»¥Oò¥9B¦9|¦#¶¦=Ú¦8§Q§i§‚§š§¶§Ч駨¨3¨M¨f¨‚¨œ¨!¸¨Ú¨ô¨ ©!#©E©^©z©–©U¯©)«2/«b«E|«:«9ý«97¬'q¬9™¬/Ó¬D­AH­7Š­#­(æ­3®C®4U®*Š®6µ®:ì®0'¯EX¯'ž¯SƯ#°#>°%b°,ˆ°Iµ°Zÿ°,Z±5‡±*½± è± ²)²!I²(k².”²3òC÷²,;³h³E‚³Eȳ:´0I´>z´/¹´1é´'µ'Cµ'kµ&“µ+ºµ"æµ) ¶93¶,m¶Aš¶Uܶ2·O·1e·k—·@¸/D¸;t¸.°¸F߸0&¹=W¹V•¹"ì¹7º9Gº7º+¹º0åºG»=^» œ»ª»:Ê»B¼@H¼‰¼§¼Uļ,½1G½,y½)¦½CнQ¾Cf¾Fª¾1ñ¾C#¿,g¿3”¿>È¿bÀjÀˆÀ*¦À@ÑÀ7Á&JÁ"qÁM”ÁEâÁE(Â(nÂ8—Â2ÐÂ$Ã1(Ã0Zà + ‹Ã–çà ÅÃ#æÃ0 + Ä;ÄRÄfÄÄ ŸÄÀÄ×Ä+÷ÄY#Å,}Å+ªÅ"ÖÅùÅ( Æ6Æ VÆ1wÆ.©Æ)ØÆÇ9Ç2BÇ2uÇL¨ÇLõÇ0BÈ)sÈFÈäÈZÿÈZÉwÉ,‘É8¾ÉB÷É3:Ê&nÊ;•Ê=ÑÊüË% Ì&2Ì'YÌIÌ3ËÌÿÌÍ-ÍJÍ/iÍ*™ÍÄÍ$àÍÎ1!ÎDSÎC˜ÎHÜÎ1%Ï)WÏJÏ7ÌÏJÐ(OÐxБÐ#¦Ð,ÊÐ÷ÐÑ#,Ñ"PÑsÑ;“ÑÏÑêÑ4Ò5;Ò7qÒ©Ò1¿ÒñÒÓ7Ó/UÓ…ÓÓ-»Ó*éÓ-ÔBÔ]Ô!xÔ.šÔ#ÉÔBíÔ50Õ<fÕ*£Õ!ÎÕ$ðÕ:ÖOPÖ7 Ö5ØÖR×9a×2›×>Î×, Ø8:Ø:sØ#®Ø/ÒØGÙEJÙ;Ù>ÌÙ3 Ú.?ÚSnÚ5ÂÚEøÚ2>ÛEqÛ5·Û0íÛ7Ü"VÜ8yÜH²ÜMûÜ(IÝrÝJ‘ÝIÜÝ;&Þ4bÞC—Þ(ÛÞß$ßC<ß*€ß:«ß+æß@àGSà*›à*Æà-ñà á;@áK|áÈá×á@çá:(âHcâ<¬âEéâ//ãC_ã0£ã.Ôã!ä!%ä8GäS€äÔäîä*÷ä'"å+Jå%vå9œå8Öåæ0/æ*`æ(‹æ(´æ8Ýæ&ç&=ç&dç%‹ç+±ç)Ýç.è)6è)`èŠè&©èÐè¤ å">±ÐKú? \lj ¥ + ¤Þ #¦ + ߤ¨çtôím$>4N + Ï ¢ ñ! 8c Ï » tg~ + gÉ Ï@ÄDÝÔ è + Z åß bv F ¸Àx; †ý45g7 ãQÆy0  Y×HÈ |Ÿ + – 'R + ¸ É ² + i„ª/I¿ © î ¯o ô]"ã OlØ ¤´¡ ":ä ì ­ÇÌ <GÓB  + ü‚ ´ò¢È 0§ +   ±  " A  : + H + \ –uÀ ýTÌòó ¹_—Ãð‘ÖÒûg ¿ Pê Þ\$ð + ¬ÏŸ} + gT¸ ´ ð /ü ð§Ù‡cŽ «¹2 ¦V ” E ö ³<.  ¯ + À'ªº + ß:¡+ ÂP •Ó3 ÔïSƒ–›Ö 4m«  Phû VÚ;‚™ ’!®è^_9mU” Ð] ÀS + à8ù uJ¨wAA: rvÌÖÃ/ݳR + > + N° £ d Å ²= ‘€ "mÍÛ{` + HÑ + ãg~º ×ÒÍ”’–:>à’ uü # Ç + ͦ … + ú 1ø + / ÒÄ¥ã | + { Ä + [ OÆG'i ¬ Ë + w @¿ )å + pO½  2Ð`'›¼òæ¯ —… ó& èqXJ n×… ‡ãy ` t­L SÏI Ç[Õ$ + ü+ä 0 %gÃb ¥Î=_ÊLå óW + &YT¼ ¢ñ ¾VÂ'Y ¢ + |_’"]B ³ø v;gúÒÏá;\´õ + ù× &Éö˜îÜÖ © ( + . + q$ f : x \ + m = Ðzééq ÝïCM âþô ò %.š<X + ôý$ + =Î .ZVo– Çöžn ¼)Ù`¹ ? + Ò + ÐX ý + 8 €J ÷ ° + × + 1*Ô­¶ W O_ jS˜E@à ÔCà + /ˆ3 ™HG + <?€¸ Yá¾ ] h*a^Ò Âœ¨' Ù)3^ëòUP  — + Ïôt + ‚Ú±È&O• ¡ À÷ û ŸWÐ + •h8  =g‡ ëb  UtÅHK{iw õ V‚Nõ†a ´0×:ŸZU`Mþ‹ # + µ Ë çÁ L ›Ô + ã¾ ‰6 ÿǸ& + R Žç“ > 6Mà + ñºÆ7½ + pxy ª@ + =  + €*² ‘Ó › 웿º6Üšü¦ôŸ×™ + E» Ë + Æè´ N*~d B¡åÑ]U ¡ƒ ¬ + -„ + 5 ¡9 ‡ Á ­¬ Nmê 7 + % §ƒà  + ñåè¿á÷ªSoû¹q;iû5! + Ál´+Y K ,@õn3 Ô ’ Ö ‚%튙h`‰ + aѳ²` Vq …É + œ õ  ƒ ï|Ì o ASÆVõF \ û ]ó­¬ .O áy~Ûl+°0‹ ® »¥ Z?%­ Ù D€Pm  + GøÝ ¹ãyn}”¸3 +  ²e + +Þþ$ ¸Þ …° À‰=¢å Oä¶ÇI,ÄjF ¬U d³»÷ Û Õú + È ±IذÞdå ãå ¦–Ç  + " ú N¢& 7½Q§Ó (ù#f ½ Àw·ÉÌE´ / + 4. xuÎ2ñ + ^œÓLÙˆ + óã ž/boÊ 2Žš`Ñ · mG + t H- + ·QF¥]íúƒÆ g Ôk‡ÈcFÃ1åà ¢{¨DÿŒ H Ðq • á + ÈE ´ + ¹ ÏŠT } õ7 fÆ Íí{6ÆÙò + £ÏÞ  S sV #XÕƒ Þ  + Ê Á‰s TâEšF7 0 + øG ×ïN¯¸r‘Ù r z Cç} M >1”3sùè oz$Î + ” y öî + RøúÒ Ìs ÿj + - šËq ÀQiÐ D¹Á + u=£Ú +  k , §¸›Å«" 8Ÿ©¹r ª ©©†°ÎÏ ºu o3 ^=Ð ß o:’Ô: Í ñëà + º,‚óÿa†S  Ém©®ÞpäÅeòVë Nb + …ªêK x„…\)'œ@œÚ ˆ jÑIB„ˆ6;ͲFk¸0Z' «é  t “™1¯x  ˜ —’ ¨ÈJÏ + î ÷¿ËûµìõÞpÊ¢2 „Ķ ­l· îÒ Í ùR !\Z + ¤M¸pò $ß”mtâÜ Áeu%›¥p ˆ êCe x.û >v- ³’ + )D X Tl ߨ ŠPt – DD x ‡ + DrÂw7‹ öZ WC ¬@1â _ > ç !? ~ ã)ùpóX˶ „- ˜ + ìÔ0n§¼ ýMdý * ½ùCEâa_H”ê (o • 9[ÞÛ + a + pbjp + <4K ¶¦ \ + ʯ®[vh [ + E ¥ + w< ”Þ + ¦òÄÝÿ — *ãØ/ iJþ cPa§»Y‰Þ÷ô ¬Ÿ<ª + òŒ -ÿ + bö€&iÝ¥ X ª5k6v« + É˜Ž ˆMo + ]‡f±9Ü- È 3à§?£Ï¢ þ üì + {±ä‡*‰÷ ¹ÔJÿk£ dv ü Ù €þ ; + Û_2h ±½\¥Ž + š@ú< + é  _ + °ç ² è5R_øèæ¡ ûÙìØâ&-˜}Úñ°Òb¿Î + ÿ ‡ÿô¢” ‘ ­Fké _š TS 2>nÿÓpBÑѼ M vŠIXÖ :_ ^20?!ô­ + ÛÃAÔ€ 6 Ç Ó + ^ + ý&WÕ|F t ©½vC Š igð vµ/ K? ‚õ} aKŒg ÚïD š ”9  Í + •8î Þ + ä À 8 ïÕ|@Â÷ + ¹ï + n‹Ì߃ù± Î  œ5yì mXà ‹7í + ®)ž ê  Ç'Y´ì + < cáìÎWÝs!‚· Ë‹ò© î„ê– êáé + Q"00 ± [/3'ë¬ó Å Cz#ÓÁ â3. l(· ³ °[¡Ò Zö¥w.Œ6 + 7ê â( H ج&‰˜ ± ¯ p Ò žIÖ 5rš "ë[ôQ  *z p ‰ ç éQ ÕÚ9Ë   Ž' Jô ‹ ;<– +  kP Ø¥ Ý + ž’œ(‘ KN ¿.Ç ” Ú 'žzL‘óµ© + Àúè EzMû}ßç‰ Rþó Á y‹Õ ÕxÜ AÁ Ûî½þÐ Oí u‚a \/¢Jê> š + < †úç9 + $i …  ø -¹ +X ºµè Þ-àýà ² sþlÆ + Ÿ 9Rs0 ë N3Ç~ …%¬ XwË + + üÖZ ¥o˜›ƒL ¨ qß >¸ + ײc¡® i0Ý ª + jkš•ã ­Â@(‹A /— ÿå±í{úeWòrëä à D1 ½¾* W>HŸ× • + HX~÷={ÜJöà ½RùY›˜l(ù . _âUþ  &ÚÎ b5 + ç#ÛIp” +  û —µ U  »Î«… %» Z~Üi{?ùñ@R |ÖAÁz "Á²' + øñ : â  ”ú­ ¾Ì ¯ ÖQûT ¢)eó ™ É “M ) Ä‹¹ -k SÏåmý\9;™ 1 †œ Šl + * § 2V À $ ×sŠ –ò ‹<ã› v + þº + Bâ + ¿“ +  ¨ 6ÄP `¶O + ³ëS¿“™sE + 5ìÝõ| }•aE!^  ʵÂ5 `eó + XJ E*NÈ£ ß`¸îyo  + SR  + >  ßY + ëñ¼ + €eÞA± + }nöÍ Eº W Ä + ) ¶ßÝ + àIfЖ-b ¶O +Å÷P + žû¤w«+ ŠQDÉ + Æ §  ®³(OOÿ + Ÿ [ ýh“" ) IÃê ]Ç ¿ + #bü¡ yGöØ F ­ “ “ æd + ¶ÐÀŽ«] ,æ–†,ìf¯ nš]O –äÑ k [Æ—‹OQ 6 Z 1 ø’ý v Õ + ` D B’êŒ_— ØFQ i A + h :WÅÚ˜|  + /! ñ — aZ®»8 , Ÿ¾¢ L® Î.—ü‡e%†~ ˜ ÒÄ Ö/k‡» + Ù™Ì xÏü WB­äÚèî2hŽz + ¹ £| Û c *ÑÙ† ® + Õ# + ͆ã`Ì JdB×e žƒ + )r f + ¨W{ ‘$ ¨zÛ s R¿ÊC  ÖbM´A ÜÊŸ Õ; YÛ2 ‘3æ¨ÃW ¹|KÜá ¦C + wïí³ + ú ]Ñxˆ›Žf©¸LgqK } ¤?ìeÑú ¯û + ÇxÃÛR [ö ¹ + ÅZ ¾• ç® ° 2 Ö + ¡è{*°“D J + ì #ŠW ‚ºów=OH2 mÒf÷ í !?á + 媠 xU(ë^ IʈH nvï 9¹È¾$~ ¾ GT†v "nJ™b”œj £¬Ì¼ØsR- »ç ’ðî F*+u + ô^"d sMŽ µ¥Ä&Cÿ  a]ð + ª P£ + ?¾Èq + 2 + Š3 \ Ì7g¡qyŒ eÁå + ¸ ²¦UŸõä!Ø + -ZI ç! Q„ ¤µü† p¯³  &) ØM U + ö pž¶§¦0O #‰ ½Ñ.’ Ù + K>" + ˜ jk¾ R Ä ^&, æ + 8Ÿ¬.ïGÔE| ×™Tpø m • tþh~1 +  u{zô 5Ûã»9 ¾QG @ æ% + ÚðÒ ) + Ñ  ² —… “U ¤ë £÷5+ n ^ Íð ÓˇE H b I + # ] ½}ÛeÝ  ^W ð Ášˆ4 €Å}Š + waRNï šr‹&$+||Iì1^ -T + ½• ž*  •1 åó„ ÆŒäL2p N~ Q˜ ñO!C h, qfÇ  + ^Ñ Ü† M¨wŽ@ Q + r cKþBG‘‚ Òqìµ + h¡i= œ¦1Éd¶° ö Dö ˾ ¸ s + ­:3Éi¨‹ üfeÆg °« »éðÙè X‡Kç ጠ+ âÀ + ? ùu“~N ™ Uþ + ; e Š ð¯^º  + á TÁm <¤ + * + ¦ •Åä + åÐ õcÎ > +%“ c Yž —{ )¾ + € ì ë6¶ Q·û~B ,Œ F WZ 4ZÏ ( ÐY 'âƒó õj ú¿ ñÓ-{. j¦ ! ÜÌú vˆ†Ò¥éôK5; (Ú ù ž æ ƒŽ øÃ.}hð –òk‰µžcÜ + x +  a + ñ ¯± Økó™L¼& 8 yèö + ˆ 9y7Uß + y + õ µ4Ê c’ E«Š + œ ¦DÅ $ æî(à>–â æ8 ^8Á¥À× ÜÝ7µ Ô¢ × ç + «>Pé¦\Ó 8 + Õ§ írõT ê@ âï ¼Ì»Lí±Éñ5 “ 6 + í ŠÆ MŒ ±C´4"@7f7žÎ) VM + J + A ¨Ó& e + ª„Ø 9 + —$Ù ËG æÝj M ›í¶œ¢ …é¾l„'´× ó Ó ý= + È¡ƒíþäá yöL„ „Ê $„¯ » ß qt$ [ !   : µÍ ¬r &: u·J4G{f w + ðú ÉA- ¢'‘ + } + [CZŒ l|èrSaÁ3ï Ôã®à N…í LÞÊ7 ¯Û #8Å}§Öç#w A­ e + iD³, + £[É%› 1²OÐ 9 §Ö a k + ªˆ‹5§v „ €Øº·ð3"w ?¼ ,j+ý] + ' Pe4. N y =ç½ r + Ý;±ˆS“ ‚(4 ÐÑñ7‚T g + s6} ¡+Û›µH† … m + ·Ú† *Ký i + ­!Í ˆ, ™Ö¤» ‡  Dqt+Ó Y ]÷V % Âë Vº?‰ BŸt£f¶ + x aŽ I + kL+ + b…1ŒÕ Ž:„< ¦Õ òBŒ[ 4Ü` · + ƒk ½ _¿@ ÿz N‚ 3ë¿Fo €  Cq|/ ª ï6 F £ ‰ŒuŽ fÆæÊr I ˆÒCŸ I ÅÉb~%*È<ïêß TB³ Ýo5¤ VÚy`‡j©;;   hT? rtù + V + ÿ ²á˜ˆ + Bl Ü S?‘ % o: éGžÏ› Ú l Õ ‚ @ààÖd° ‘G Ä5Æ j « oàGGÍ €´’„o‰µíhÿa Î` ,VK<G p;œæ § ì – Œ¬­ + Ê:®³ ,fÔ [ü2ŠÃœ + »0i %>( sÕ–‰« dâ Íßñ Z¤ ¥ Y% Û d è© §ø•À þàd + QS Ì +  Å÷ 6XMP + ÂV_‘ x —› + c + û—”9¿#\ S½µ  z < + l ä(?n œghijŠ · 0·¨ šÈ6ÇË Kò ÷ù•¤ FdÎË ïº°n + æ Ùøu#(  + zýÀ, JWm‘·R0ql{ + ä.$ö + 4 + úõ z,¥ ×Q‘rƒü 4JjáªÐ¾û¼é¼6 ™Ëcôîs ³!U˜_2Uô¸ 0©ÊÊ + •bd ŒŸ E³ðh ¾Ä ¼ + %'L7“# â9)”Ü  † + ·ü + á- + L8z š n Î@¡ ¤ ¦ ¬u þRÔ ¯ÓkH/=H º… € + n¯Ä›·ËC(= æ ýã + ¼ [ ÿÍW‰ + 1P é Ëêl w´ u »/‰Š©«£=P4 K + øL + è + ˆ ¶ ÌAB + íÍ£Båßc j `ƒ + <Ýê + € L ït^ A6©îCcdPä™—2r ÈJîYðõP¨ + ®d`¶·®÷ÏÀ éÉ ˜ô + n{ « áb ë E£1² °šAB ¼³ äë + Ñf5 ø Å\é ]Ç´ƒŒg + T[ø + Ä!]È /’)m á7Î ¤ Ùà ª€ØYÜÆØ ‘ü ²\ž +  + ¿n¤lœÄcÅ Y¶ V¬ é÷sœ T‹¢¼ž ¡ + «ÓÉ ~± Óî ©ý îf Á_ 984 UÊ + øF + tù~ª}ÑX ;8oºÚ‹ + êæh + ½D + ®£  + Y + Å + q + N | « ÞXSz c XŽÇò\®3˜ ¼H;© ‚ + ‡ “Ž“‡ æIù ° ²4 vAx¨9u Ô" F ÕU8 =Ì…Ù¹Ø ’, ™ È + # ´ƒ 1 %#D + Options for %s: + + %s: %d: warning: can't add declaration of `%s' into macro call + + %s: error reading input file `%s': %s + + %s: fatal error: aux info file corrupted at line %d + + %s: warning: too few parameter lists in declaration of `%s' + + ;; Combiner totals: %d attempts, %d substitutions (%d requiring new space), + ;; %d successes. + + Execution times (seconds) + + For bug reporting instructions, please see: + + For bug reporting instructions, please see: + %s. + + Go ahead? (y or n) + Language specific options: + + Options starting with -g, -f, -m, -O, -W, or --param are automatically + passed on to the various sub-processes invoked by %s. In order to pass + other options on to these processes the -W options must be used. + + Processing symbol table #%d, offset = 0x%.8lx, kind = %s + + Target specific options: + + There are undocumented %s specific options as well. + + There are undocumented target specific options as well. + + Updating header and load commands. + + + ldd output with constructors/destructors. + + write_c_file - output name is %s, prefix is %s + %#D `%D' by earlier handler for `%T' in pointer to member conversion in pointer to member function conversion will be re-ordered to precede member initializations %-23.23s [undocumented] + (Use '-v --help' to display command line options of sub-processes) + (use `typename %T::%D' if that's what you meant) -### Like -v but options quoted and commands not executed + --help Display this information + --help Display this information + --target-help Display target specific command line options + -B Add to the compiler's search paths + -D Define a with string '1' as its value + -D= Define a with as its value + -A= Assert the to + -A-= Disable the to + -U Undefine + -v Display the version number + -E Preprocess only; do not compile, assemble or link + -G Put global and static data smaller than + bytes into a special section (on some targets) + -H Print the name of header files as they are used + -C Do not discard comments + -dM Display a list of macro definitions active at end + -dD Preserve macro definitions in output + -dN As -dD except that only the names are preserved + -dI Include #include directives in the output + -M Generate make dependencies + -MM As -M, but ignore system header files + -MD Generate make dependencies and compile + -MMD As -MD, but ignore system header files + -MF Write dependency output to the given file + -MG Treat missing header file as generated files + -MP Generate phony targets for all headers + -MQ Add a MAKE-quoted target + -MT Add an unquoted target + -O[number] Set optimization level to [number] + -Os Optimize for space rather than speed + -S Compile only; do not assemble or link + -V Run gcc version number , if installed + -W Enable extra warnings + -Wa, Pass comma-separated on to the assembler + -Wl, Pass comma-separated on to the linker + -Wlarger-than- Warn if an object is larger than bytes + -Wno-comment{s} Do not warn about comments + -Wtraditional Warn about features not present in traditional C + -Wno-traditional Do not warn about traditional C + -Wundef Warn if an undefined macro is used by #if + -Wno-undef Do not warn about testing undefined macros + -Wimport Warn about the use of the #import directive + -Wno-import Do not warn about the use of #import + -Werror Treat all warnings as errors + -Wno-error Do not treat warnings as errors + -Wsystem-headers Do not suppress warnings from system headers + -Wno-system-headers Suppress warnings from system headers + -Wall Enable all preprocessor warnings + -Wp, Pass comma-separated on to the preprocessor + -Wunused Enable unused warnings + -Xlinker Pass on to the linker + -a Enable block profiling + -aux-info Emit declaration info into + -ax Enable jump profiling + -b Run gcc for target , if installed + -b, --branch-probabilities Include branch probabilities in output + -c Compile and assemble, but do not link + -c, --branch-counts Given counts of branches taken + rather than percentages + -d[letters] Enable dumps from specific passes of the compiler + -dumpbase Base name to be used for dumps from specific passes + -dumpmachine Display the compiler's target processor + -dumpspecs Display all of the built in spec strings + -dumpversion Display the version of the compiler + -f, --function-summaries Output summaries for each function + -fcall-saved- Mark as being preserved across functions + -fcall-used- Mark as being corrupted by function calls + -fdiagnostics-show-location=[once | every-line] Indicates how often source location information should be emitted, as prefix, at the beginning of diagnostics when line-wrapping + -ffixed- Mark as being unavailable to the compiler + -finline-limit= Limits the size of inlined functions to + -fmessage-length= Limits diagnostics messages lengths to characters per line. 0 suppresses line-wrapping + -fpreprocessed Treat the input file as already preprocessed + -ftabstop= Distance between tab stops for column reporting + -P Do not generate #line directives + -$ Do not allow '$' in identifiers + -remap Remap file names when including files + --version Display version information + -h or --help Display this information + -fsched-verbose= Set the verbosity level of the scheduler + -h, --help Print this help, then exit + -idirafter Add to the end of the system include path + -I Add to the end of the main include path + -I- Fine-grained include path control; see info docs + -nostdinc Do not search system include directories + (dirs specified with -isystem will still be used) + -nostdinc++ Do not search system include directories for C++ + -o Put output into + -l, --long-file-names Use long output file names for included + source files + -lang-c++ Assume that the input sources are in C++ + -lang-objc Assume that the input sources are in ObjectiveC + -lang-objc++ Assume that the input sources are in ObjectiveC++ + -lang-asm Assume that the input sources are in assembler + -m%-23.23s [undocumented] + -n, --no-output Do not create an output file + -o Place the output into + -o Place output into + -o, --object-directory OBJDIR Search for object files in OBJDIR + -p Enable function profiling + -pass-exit-codes Exit with highest error code from a phase + -pedantic Issue all warnings demanded by strict ISO C + -pedantic-errors Issue -pedantic warnings as errors instead + -trigraphs Support ISO C trigraphs + -lang-c Assume that the input sources are in C + -lang-c89 Assume that the input sources are in C89 + -pedantic Issue warnings needed by strict compliance to ISO C + -pedantic-errors Like -pedantic except that errors are produced + -pipe Use pipes rather than intermediate files + -print-file-name= Display the full path to library + -print-libgcc-file-name Display the name of the compiler's companion library + -print-multi-directory Display the root directory for versions of libgcc + -print-multi-lib Display the mapping between command line options and + multiple library search directories + -print-prog-name= Display the full path to compiler component + -print-search-dirs Display the directories in the compiler's search path + -quiet Do not display functions compiled or elapsed time + -save-temps Do not delete intermediate files + -specs= Override built-in specs with the contents of + -std= Assume that the input sources are for + -std= Specify the conformance standard; one of: + gnu89, gnu99, c89, c99, iso9899:1990, + iso9899:199409, iso9899:1999 + -+ Allow parsing of C++ style features + -w Inhibit warning messages + -Wtrigraphs Warn if trigraphs are encountered + -Wno-trigraphs Do not warn about trigraphs + -Wcomment{s} Warn if one comment starts inside another + -time Time the execution of each subprocess + -v Display the programs invoked by the compiler + -v, --version Print version number, then exit + -version Display the compiler's version + -w Suppress warnings + -x Specify the language of the following input files + Permissable languages include: c c++ assembler none + 'none' means revert to the default behavior of + guessing the language based on the file's extension + They exist, but they are not documented. + `%#D' declared here also declared as `%#D' here and `%#D' and `%#T' as it has already been specified as a non-system directory as it is the same as non-system directory "%s" because conversion sequence for the argument is better because of local member `%#D' with same name because of local method `%#D' with same name because the following virtual functions are abstract: because worst conversion for the former is better than worst conversion for the latter but %d required but does not override `%T(const %T&)' but does not override `operator=(const %T&)' by `%D' candidate conversions include `%D' and `%D' cannot use obsolete binding at `%D' because it has a destructor conflict with `%D' crosses initialization of `%#D' enters catch block enters scope of non-POD `%#D' enters try block expected a class template, got `%T' expected a constant of type `%T', got `%T' expected a template of type `%D', got `%D' expected a type, got `%E' expected a type, got `%T' first declared as `%#D' here first type here for conversion from `%T' to `%T' from definition of `%#D' from here in call to `%D' in evaluation of `%Q(%#T, %#T)' in instantiation of template `%T' in thrown expression initializing argument %P of `%D' initializing argument %P of `%D' from result of `%D' initializing temporary from result of `%D' instead of `%D' from dependent base class matches this `%D' under ISO standard rules matches this `%D' under old rules names from dependent base classes are not visible to unqualified name lookup - to refer to the inherited type, say `%s %T::%T' or `operator=(const %T&)' original definition appeared here other type here overriding `%#D' overriding `%#D' (must be pointer or reference to class) overriding `%#D' (must use pointer or reference) overriding `%#F' perhaps you want `%T' for a constructor since `%#D' declared in base class since type `%T' has abstract virtual functions skips initialization of `%#D' trying to instantiate `%D' using obsolete binding at `%D' where cfront would use `%#D' will be re-ordered to match declaration order will be re-ordered to match inheritance order you can work around this by removing the initializer %s TOTAL : shadows template parm `%#D'"%.*s" redefined"%s" after # is not a positive integer"%s" after #line is not a positive integer"%s" cannot be used as a macro name"%s" cannot be used as a macro name as it is an operator in C++"%s" is not a valid filename"%s" is not a valid option to the preprocessor"%s" is not defined"%s" is not valid in #if expressions"%s" may not appear in macro parameter list"%s" re-asserted"%s" redefined"/*" within comment"Small register classes" kludge"defined" cannot be used as a macro name# %s %.2f %.2f + # operator should be followed by a macro argument name#%s expects "FILENAME" or #%s is a GCC extension#%s not within a conditional#-lines for entering and leaving files don't match#elif after #else#elif not within a conditional#elif without #if#else after #else#else not within a conditional#else or #elif after #else#else without #if#endif without #if#error%.*s#if with no expression#import is obsolete, use an #ifndef wrapper in the header file#include "..." search starts here: + #include <...> search starts here: + #include expects "fname" or #include nested too deeply#include_next in primary source file#pragma %s %s is already registered#pragma %s is already registered#pragma GHS endXXX does not match previous startXXX#pragma GHS endXXXX found without previous startXXX#pragma implementation for %s appears after file is included#pragma once in main file#pragma once is obsolete#pragma pack (pop) encountered without matching #pragma pack (push, )#pragma pack(pop, %s) encountered without matching #pragma pack(push, %s, )#pragma pack(pop[, id], ) is not supported on this target#pragma pack(push[, id], ) is not supported on this target#pragma redefine_extname conflicts with declaration#pragma system_header ignored outside include file#pragma vtable no longer supported#warning%.*s%%R not followed by %%B/C/D/E%%S computed all 0's mask%%S computed all 1's mask%6.2f%% of %d branches executed in file %s + %6.2f%% of %d branches executed in function %s + %6.2f%% of %d branches taken at least once in file %s + %6.2f%% of %d branches taken at least once in function %s + %6.2f%% of %d calls executed in file %s + %6.2f%% of %d calls executed in function %s + %6.2f%% of %d source lines executed in file %s + %6.2f%% of %d source lines executed in function %s + %A begin, end, and step-count values known to result in implementation-dependent behavior due to overflow(s) in intermediate calculations at %0%A begin, end, and step-count values known to result in no iterations at %0%A end value plus step count known to overflow at %0%A from %B at %0%C%A step count known to be 0 (zero) at %0%A too few arguments (starting with dummy argument `%B') as of %0 for statement function reference at %1%A too many arguments as of %0 for statement function reference at %1%d constructor(s) found + %d destructor(s) found + %d frame table(s) found + %i-bit mode not compiled in%s%s + %s %s %+#D%s %+#D%s%s %+#T%s %D(%T) %s %D(%T, %T) %s %D(%T, %T, %T) %s %T %s (GCC) %s + %s `%s' does not fully implement the `%s' protocol%s as `float' rather than `double' due to prototype%s as complex rather than floating due to prototype%s as complex rather than integer due to prototype%s as floating rather than complex due to prototype%s as floating rather than integer due to prototype%s as integer rather than complex due to prototype%s as integer rather than floating due to prototype%s as signed due to prototype%s as unsigned due to prototype%s at end of input%s before "%s"%s before %s'%c'%s before %s'\x%x'%s before '%s' token%s before `%c'%s before `%s'%s before `%s' token%s before `\%o'%s before numeric constant%s before string constant%s between distinct pointer types `%T' and `%T' lacks a cast%s cannot resolve address of overloaded function%s causes a section type conflict%s defined inside parms%s disabled, use normal debugging flags%s discards qualifiers from pointer target type%s does not support %%n$ operand number formats%s does not support %s%s does not support %s with the `%%%c' %s format%s does not support the `%%%c' %s format%s does not support the `%%%s%c' %s format%s does not support the `%s' %s length modifier%s for `%T %s %T' operator%s for `%T %s' operator%s for `%T ? %T : %T' operator%s for `%T [%T]' operator%s for `%s %T' operator%s format, %s arg (arg %d)%s from incompatible pointer type%s function, region %d, offset = %ld (0x%.8lx) + %s has no %s%s has no member named `%s'%s ignored with %s and `%%%c' %s format%s ignored with %s in %s format%s in preprocessing directive%s is a block device%s is a reference, not call, to function `%E'%s is deprecated, please see the documentation for details%s is not supported by this configuration%s is not type %s (arg %d)%s is shorter than expected%s is too large%s makes integer from pointer without a cast%s makes pointer from integer without a cast%s makes qualified function pointer from unqualified%s no longer supported -- try -fno-vxt -ff90%s no longer supported -- try -fvxt%s of negative value `%E' to `%T'%s of read-only location%s of read-only member `%s'%s of read-only variable `%s'%s qualifier ignored on asm%s returned %d exit status%s rotate count >= width of type%s rotate count is negative%s terminated with signal %d [%s]%s%s to `%T' from `%T'%s to non-pointer type `%T' from NULL%s used with `%%%c' %s format%s with different width due to prototype%s%s%s version %s (%s) + %s compiled by GNU C version %s. + %s%s%s version %s (%s) compiled by CC. + %s-%s is an empty range%s. + %s%s: %d: `%s' used but missing from SYSCALLS + %s: %d: warning: `%s' excluded by preprocessing + %s: %d: warning: definition of %s not converted + %s: %d: warning: found `%s' but expected `%s' + %s: %d: warning: no extern definition for `%s' + %s: %d: warning: source too confusing + %s: %d: warning: varargs function declaration not converted + %s: %s%s: %s compiler not installed on this system%s: %s exited with status %d + %s: %s: %s: %s: can't get status: %s + %s: In instantiation of `%s': + %s: NaN - producing operation%s: Not a directory%s: `%s' not converted + %s: argument domain error%s: can't change mode of file `%s': %s + %s: can't create/open clean file `%s': %s + %s: can't create/open output file `%s': %s + %s: can't delete aux info file `%s': %s + %s: can't delete file `%s': %s + %s: can't get status for file `%s': %s + %s: can't get status of aux info file `%s': %s + %s: can't link file `%s' to `%s': %s + %s: can't open aux info file `%s' for reading: %s + %s: can't open file `%s' for reading: %s + %s: can't read aux info file `%s': %s + %s: cannot get working directory: %s + %s: cannot open as COFF file%s: compiling `%s' + %s: conflict list for '%s' follows: + %s: conflicting extern definitions of '%s' + %s: converting file `%s' + %s: declaration of function `%s' not converted + %s: declarations of '%s' will not be converted + %s: definition of function `%s' not converted + %s: error closing aux info file `%s': %s + %s: error reading aux info file `%s': %s + %s: error writing file `%s': %s + %s: found definition of `%s' at %s(%d) + %s: function definition not converted + %s: function singularity%s: global declarations for file `%s' not inserted + %s: input file names must have .c suffixes: %s + %s: internal abort + %s: invalid file name: %s + %s: linker input file unused because linking not done%s: local declaration for function `%s' not inserted + %s: multiple static defs of `%s' in file `%s' + %s: not a COFF file%s: overflow range error%s: partial loss of precision%s: subprocess got fatal signal %d + %s: total loss of precision%s: underflow range error%s: usage '%s [ -VqfnkN ] [ -i ] [ filename ... ]' + %s: usage '%s [ -VqfnkNlgC ] [ -B ] [ filename ... ]' + %s: wait: %s + %s: warning: %s: warning: can't rename file `%s' to `%s': %s + %s: warning: file `%s' already saved in `%s' + %s: warning: missing SYSCALLS file `%s' + %s: warning: no read access for file `%s' + %s: warning: no static definition for `%s' in file `%s' + %s: warning: no write access for dir containing `%s' + %s: warning: no write access for file `%s' + %s: warning: too many parameter lists in declaration of `%s' + %s: warning: using formals list from %s(%d) for function `%s' + %s: warnings being treated as errors + %s: would convert file `%s' + %s:%d: instantiated from `%s' + %s:%d: instantiated from here + %s:%d: confused by earlier errors, bailing out + %s:%d: declaration of function `%s' takes different forms + %s:%d: warning: %s=%s is not numeric%s=%s is too large%smember function `%D' cannot have `%T' method qualifier'##' cannot appear at either end of a macro expansion'#' is not followed by a macro parameter'$' character(s) in identifier'%D' is used as a type, but is not defined as a type.'(' expected')' expected')' or term expected'*' expected':' expected';' expected'Ll' and 'lL' are not valid integer suffixes'[' expected']' expected']' expected, invalid type expression'class' expected'class' or 'this' expected'lul' is not a valid integer suffix'{' expected("%s" is an alternative token for "%s" in C++)((anonymous))(Each undeclared identifier is reported only once(Each undeclared identifier is reported only once for each function it appears in.)(a pointer to member can only be formed with `&%E')(an out of class initialization is required)(continued):(enclose actions of previous case statements requiring destructors in their own scope.)(if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) -Wno-non-template-friend disables this warning(it is valid for %s but not the selected language)(near initialization for `%s')(so you should pass `%s' not `%s' to `va_arg')(static %s for %s)(this will be reported only once per input file)(use `=' to initialize static data members), + from %s:%d, + from %s:%u--driver no longer supported-E required when input is from standard input-G and -membedded-pic are incompatible-G is incompatible with PIC code which is the default-I- specified twice-R requires -o-Wformat-extra-args ignored without -Wformat-Wformat-nonliteral ignored without -Wformat-Wformat-security ignored without -Wformat-Wformat-y2k ignored without -Wformat-Wid-clash-LEN is no longer supported-Wmissing-format-attribute ignored without -Wformat-Wno-strict-prototypes is not supported in C++-Wuninitialized is not supported without -O-c or -S required for Ada-f%s and -msdata=%s are incompatible-f%s ignored (all code is position independent)-f%s ignored for 68HC11/68HC12 (not supported)-f%s ignored for Unicos/Mk (not supported)-f%s ignored for target (all code is position independent)-f%s is no longer supported-f%s not supported: ignored-f%sleading-underscore not supported on this target machine-fPIC and -fpic are not supported in this configuration-fPIC and -mcall-%s are incompatible-fPIC is not currently supported on the 68000 or 68010 + -fPIC is not valid with -mcoff-fPIC not valid with -mcoff-fdata-sections not supported for this target-fdata-sections not supported on AIX-femit-class-file should used along with -fsyntax-only-ffunction-sections disabled on AIX when debugging-ffunction-sections disabled; it makes profiling impossible-ffunction-sections may affect debugging on some targets-ffunction-sections not supported for this target-fhandle-exceptions has been renamed to -fexceptions (and is now on by default)-fjni and -femit-class-file are incompatible-fjni and -femit-class-files are incompatible-fname-mangling-version is no longer supported-fpic and -mapcs-reent are incompatible-fpic is not valid with -mcoff-fpic not valid with -mcoff-fprefetch-loop-arrays is not supported with -Os-fprefetch-loop-arrays not supported for this target-fprefetch-loop-arrays not supported for this target (try -march switches)-frepo must be used with -c-g is only supported when using GAS on this processor,-g option disabled-g with -mno-apcs-frame may not give sensible debugging-mabi=%s does not support -mips%d-maix64 and POWER architecture are incompatible-maix64 required: 64-bit computation with 32-bit addressing not yet supported-maix64 requires PowerPC64 architecture remain enabled-malign-double makes no sense in the 64bit mode-malign-functions is obsolete, use -falign-functions-malign-functions=%d is not between 1 and %d-malign-jumps is obsolete, use -falign-jumps-malign-jumps=%d is not between 1 and %d-malign-loops is obsolete, use -falign-loops-malign-loops=%d is not between 0 and %d-malign-loops=%d is not between 1 and %d-mapcs-26 and -mapcs-32 may not be used together-mapcs-stack-check incompatible with -mno-apcs-frame-max-stackframe=%d is not usable, not between 0 and %d-mbig-endian and -mlittle-endian may not be used together-mbnu210 is ignored (option is obsolete)-mbranch-cost=%d is not between 0 and 5-mbsd and -mxopen incompatible-mbsd and -pedantic incompatible-mcall-aixdesc must be big endian-mcmodel= is not supported on 32 bit systems-membedded-pic and -mabicalls are incompatible-mentry is only meaningful with -mips-16-mhard-float not supported-mieee not supported on Unicos/Mk-mieee-with-inexact not supported on Unicos/Mk-mips%d does not support 64 bit fp registers-mips%d does not support 64 bit gp registers-mips%d not supported-mlong-double-64 not allowed with -m64-mmultiple is not supported on little endian systems-mpic-register= is useless without -fpic-mpreferred-stack-boundary=%d is not between %d and 12-mregparm=%d is not between 0 and %d-mrelocatable and -mcall-%s are incompatible-mrelocatable and -mno-minimal-toc are incompatible-mrelocatable and -msdata=%s are incompatible-mrtd calling convention not supported in the 64bit mode-ms2600 is used without -ms-msdata=%s and -mcall-%s are incompatible-mshort-data-%s and PIC are incompatible-mshort-data-%s is too large -msingle-float and -msoft-float can not both be specified-msoft-float and -mhard_float may not be used together-mstring is not supported on little endian systems-msystem-v and -mthreads are incompatible-msystem-v and -p are incompatible-mtrap-large-shift and -mhandle-large-shift are incompatible-mxopen and -pedantic incompatible-p option not supported: use -pg instead-p profiling is no longer supported. Use -pg instead-param option missing argument-pedantic and -traditional are mutually exclusive-pg and -fomit-frame-pointer are incompatible-pipe is not supported-pipe not supported-shared not valid with -mcoff-static not valid with -mcoff-symbolic not valid with -mcoff-traditional and -ansi are mutually exclusive-traditional is deprecated and may be removed-traditional is not supported in C++-trigraphs and -traditional are mutually exclusive.da file contents exhausted too early.da file contents exhausted too early + .da file contents not exhausted.da file contents not exhausted + 31 bit mode32381 fpu387 instruction set disabled, using SSE arithmetics64 bit mode: + : `%s' JDK1.1(TM) feature;; Combiner statistics: %d attempts, %d substitutions (%d requiring new space), + ;; %d successes. + + ;; Processing block from %d to %d, %d sets. + APCS reentrant code not supported. IgnoredASSIGN to variable that is too smallASSIGN'ed label cannot fit into `%A' at %0 -- using wider siblingASSIGNed FORMAT specifier is too smallASSIGNed GOTO target variable is too smallAccess specifier at %0 must immediately follow derived-type statement at %1 with no intervening statementsAccess specifier or PRIVATE statement at %0 invalid for derived-type definition within other than the specification part of a moduleAdd a directory for INCLUDE searchingAdd directory to class pathAdd extra commentry to assembler outputAdditional debug printsAlign all labelsAlign all loops to 32 byte boundaryAlign code and data to 32 bitsAlign code to 8 byte boundaryAlign destination of the string operationsAlign doubles on word boundaryAlign labels which are only reached by jumpingAlign some doubles on dword boundaryAlign the start of functionsAlign the start of loopsAlign to >word boundariesAlign to the base type of the bit-fieldAlign variables on a 16-bit boundaryAlign variables on a 32-bit boundaryAllow $ in symbol namesAllow INTEGER and LOGICAL interchangeabilityAllow REAL(Z) and AIMAG(Z) given DOUBLE COMPLEX ZAllow RTL generation to emit invalid 3 operand insnsAllow different types as args of ? operatorAllow function addresses to be held in registersAllow math optimizations that may violate IEEE or ANSI standardsAllow ordinary copying of ASSIGN'ed varsAllow speculative motion of more loadsAllow speculative motion of non-loadsAllow speculative motion of some loadsAllow the use of $ inside identifiersAllow unsigned interation counts for RPTB/DBAlternate calling conventionAlternate return specifier at %0 invalid within a functionAlternate return specifier at %0 invalid within a main program unitAlternative calling conventionAlways check for non gcj generated classes archivesAlways pass floating-point arguments in memoryAlways treat bit-field as int-sizedAmbiguous use of intrinsic `%A' at %0 [info -f g77 M CMPAMBIG]Argument #%B of `%A' is %C at %0 but is %D at %1 [info -f g77 M GLOBALS]Array `%A' at %0 is too large to handleArray element value at %0 out of defined rangeArray or substring specification for `%A' out of range in EQUIVALENCE statementArray or substring specification for `%A' out of range in statement at %0Array reference to scalar variable `%A' in EQUIVALENCE statementArray subscript #%B out of range for EQUIVALENCE of `%A'Array subscript #%B out of range for initialization of `%A' in statement at %0Array supplied at %1 for dummy argument `%A' in statement function reference at %0Assume GASAssume all doubles are alignedAssume arguments do not alias each other or globalsAssume arguments may alias globals but not each otherAssume big endian bytes, little endian wordsAssume int to be 8 bit integerAssume native functions are implemented using JNIAssume normal C execution environmentAssume possible double misalignmentAssume small address spaceAssume strict aliasing rules applyAssume target CPU is configured as big endianAssume target CPU is configured as little endianAssume that pointers may be aliasedAssume that pointers not aliasedAssume that standard libraries & main might not existAssume that unaligned accesses are handled by the systemAssuming that all execution counts are zero. + At %0, '!' and '/*' are not valid comment delimitersAt %0, INCLUDE file %A exists, but is not readableAt %0, INCLUDE nesting too deepAt %0, specify ASSIGNMENT instead of OPERATOR for INTERFACE statement specifying the assignment operator (=)At %0, specify OPERATOR instead of ASSIGNMENT for INTERFACE statement not specifying the assignment operator (=)At top level:Attempt to EQUIVALENCE common areas `%A' and `%B' at %0Attempt to delete prologue/epilogue insn:Attempt to extend COMMON area beyond its starting point via EQUIVALENCE of `%A'Attempt to fill delay slots of branch instructionsAttempt to keep stack aligned to this power of 2Attempt to merge identical constants accross compilation unitsAttempt to merge identical constants and constant variablesAttempt to raise constant zero to a power at %0Attempt to specify second initial value for `%A' at %0Attempt to specify second initial value for element of `%A' at %0Attempt to support traditional K&R style CAuto pre/post decrement increment allowedAuto pre/post decrement increment not allowedAutomatically align branch targets to reduce branch penaltiesBLOCK DATA name at %0 superfluous, no name specified at %1Backslashes in character/hollerith constants not special (C-style)Big memory modelBlank common initialized at %0Branches are this expensive (1-5, arbitrary units)Bypass data cache for volatile mem refsC++ style comments are not allowed in ISO C89Can't find default package `%s'. Check the CLASSPATH environment variable and the access to the archivesCan't place `%A' as directed by EQUIVALENCE due to alignment restrictionsCan't specify array dimension in a declarationCannot decompose address.Cannot specify =initialization-expr at %0 unless `::' appears before list of objectsChange only the low 8 bits of the stack pointerChange the branch costs within the compilerChange the stack pointer without disabling interruptsChange the threshold for conversion to conditional executionChange when template instances are emittedCharacter `%A' (for example) is lower-case in symbol name at %0Character `%A' (for example) is upper-case in symbol name at %0Character `%A' not followed at some point by lower-case character in symbol name at %0Character constant at %0 has no closing apostrophe at %1Check for syntax errors, then stopCheck the return value of newChoose class whose main method should be usedChoose input encoding (default comes from locale)Class or interface declaration expectedCode size: small, medium or largeCommon block `%A' is %B %D in length at %0 but %C %E at %1Common block `%A' is SAVEd, explicitly or implicitly, at %0 but not SAVEd at %1Compile as if program written in lowercaseCompile as if program written in uppercaseCompile for 32-bit pointersCompile for 64-bit pointersCompile for ETRAX 100 (CRIS v8)Compile for ETRAX 4 (CRIS v3)Compile for a 68HC11Compile for a 68HC12Compile for the MMU-less Etrax 100-based elinux systemCompile for the Thumb not the ARMCompile for the v850 processorCompile for v8plus ABICompile just for ISO C89Compile pointers as triples: value, base & endCompile with 16-bit integer modeCompile with 32-bit integer modeConfigured with: %s + Conflicting I/O control specifications at %0 and %1Consider access to byte sized memory slowConsider all mem refs through pointers as volatileConsider all mem refs to global data to be volatileConsider all mem refs to static data to be volatileConsider type `int' to be 16 bits wideConsider type `int' to be 32 bits wideConstantValue attribute of field '%s' has wrong typeConstruct name at %0 does not match construct name for any containing DO constructsConstruct name at %0 not the same as construct name at %1Construct name at %0 superfluous, no construct name specified at %1Constructor invocation must be first thing in a constructorContinuation indicator at %0 must appear in column 6 [info -f g77 M LEX]Control the IEEE trap modeControl the generated fp rounding modeControl the precision given to fp exceptionsConvert floating point constant to single precision constantCopy memory address constants into regs before usingCopy memory operands into registers before usingCopyright (C) 2001 Free Software Foundation, Inc. + Copyright (C) 2002 Free Software Foundation, Inc. + Could not open basic block file %s. + Could not open data file %s. + Could not open output file %s. + Could not open program flow graph file %s. + Could not open source file %s. + Create GUI applicationCreate console applicationCreate data files needed by gcovCreating %s. + DO-statement reference to label at %0 and label definition at %2 separated by unterminated block starting at %1DO-statement reference to label at %1 follows its definition at %0DO-statement references to label at %0 and %2 separated by unterminated block starting at %1DW_LOC_OP %s not implemented + Debug argument support in compilerDebug memory address support in compilerDebug stack support in compilerDefer popping functions args from stack until laterDelete MIL-STD 1753 intrinsicsDelete libU77 intrinsicsDelete libU77 intrinsics with bad interfacesDelete non-FORTRAN-77 intrinsics F90 supportsDelete non-FORTRAN-77 intrinsics VXT FORTRAN supportsDelete non-FORTRAN-77 intrinsics f2c supportsDelete non-FORTRAN-77 intrinsics g77 supportsDelete useless null pointer checksDetermine language standardDirectory where class files should be writtenDisable Dwarf 2 line debug info via GNU asDisable MIL-STD 1753 intrinsicsDisable MPY||ADD and MPY||SUB instructionsDisable Transmeta picoJava extensionsDisable assignability checks for stores into object arraysDisable automatic array bounds checkingDisable debuggingDisable fatal diagnostics about inter-procedural problemsDisable fused multiply/add and multiply/subtract FP instructionsDisable libU77 intrinsicsDisable libU77 intrinsics with bad interfacesDisable new features under developmentDisable non-FORTRAN 77 intrinsics F90 supportsDisable non-FORTRAN-77 intrinsics F90 supportsDisable non-FORTRAN-77 intrinsics VXT FORTRAN supportsDisable non-FORTRAN-77 intrinsics f2c supportsDisable optional diagnosticsDisable parallel instructionsDisable reorganization passDisable the appending of underscores to externalsDisable use of DB instructionDisable use of RTPB instructionDisable use of RTPS instructionDisable use of conditional move instructionsDisable use of sdata/scommon/sbssDisable warnings about inter-procedural problemsDisallow all ugly featuresDisallow unsigned iteration counts for RPTB/DBDiscard unused virtual functionsDisplay compile time statisticsDisplay statistics accumulated during compilationDivision by 0 (zero) at %0 (IEEE not yet supported)Do no generate code for a 68851Do not align code to 8 byte boundaryDo not align destination of the string operationsDo not allocate BK registerDo not allow bit-fields to cross word boundariesDo not arbitary sized immediates in bit operationsDo not assume GASDo not automatically align branch targetsDo not compile for v8plus ABIDo not emit addressing modes with side-effect assignmentDo not emit complex integer constants to read-only memoryDo not emit function prologue or epilogueDo not emit stack checking codeDo not enable linker relaxationDo not generate .size directivesDo not generate H8/300H codeDo not generate H8/S codeDo not generate H8/S2600 codeDo not generate byte writesDo not generate char instructionsDo not generate code for a Sun FPADo not generate code to check exception specificationsDo not generate code which uses the FPUDo not generate load/store multiple instructionsDo not generate load/store with update instructionsDo not generate multm instructionsDo not generate run time type descriptor informationDo not generate sin, cos, sqrt for FPUDo not generate string instructions for block movesDo not generate tablejump insnsDo not inline all known string operationsDo not inline member functions by defaultDo not layout types like Intel's v1.3 gccDo not load the PIC register in function prologuesDo not make adjacent short instructions parallelDo not move instructions into a function's prologueDo not obey access control semanticsDo not optimize tail call instructions in assembler or linkerDo not pass -assert pure-text to linkerDo not perform tail call optimizationDo not permit unaligned accessesDo not promote floats to double if using -traditionalDo not provide a default start-address 0x100 of the programDo not put uninitialized globals in the common sectionDo not recognize GNU defined keywordsDo not recognize any built in functionsDo not recognize the 'asm' keywordDo not return values of functions in FPU registersDo not serialize volatile memory references with MEMW instructionsDo not store floats in registersDo not store locals in arg registersDo not support 3DNow! built-in functionsDo not support MMX and SSE built-in functions and code generationDo not support MMX built-in functionsDo not support MMX, SSE and SSE2 built-in functions and code generationDo not suppress warnings from system headersDo not tune code and read-only data alignmentDo not tune stack alignmentDo not tune writable data alignmentDo not use ABI reserved registersDo not use IEEE math for fp comparisonsDo not use MPYI instruction for C3xDo not use POWER instruction setDo not use POWER2 instruction setDo not use PowerPC instruction setDo not use Sky linkage conventionDo not use VAX fpDo not use addresses that allocate global registersDo not use alternate leaf function entriesDo not use bit-field instructionsDo not use complex addressing modesDo not use condition codes from normal instructionsDo not use direct addressing mode for soft registersDo not use flat register window modelDo not use fp registersDo not use hardware floating pointDo not use hardware fpDo not use hardware quad fp instructionsDo not use multiply-accumulate fp instructionsDo not use push instructions to save outgoing argumentsDo not use red-zone in the x86-64 codeDo not use register sbDo not use registers for argument passingDo not use stack biasDo not use structs on stronger alignment for double-word copiesDo not use the Xtensa MAC16 optionDo not use the Xtensa MIN/MAX optionDo not use the Xtensa MUL16 optionDo not use the Xtensa MUL32 optionDo not use the Xtensa NSA optionDo not use the Xtensa SEXT optionDo not use the Xtensa boolean register optionDo not use the Xtensa code density optionDo not use the Xtensa floating-point unitDo not use the bit-field instructionsDo not use the divide instructionDo not use unaligned memory referencesDo not utilize Visual Instruction SetDo not warn about using 'long long' when -pedanticDo not warn if inherited methods are unimplementedDo not work around hardware multiply bugDo not work around storem hardware bugDo symbol renaming for BSDDo symbol renaming for X/OPENDo the full regmove optimization passDo the register copy-propagation optimization passDo the register renaming optimization passDon't align items in code or dataDon't align to the base type of the bit-fieldDon't always pass floating-point arguments in memoryDon't announce deprecation of compiler featuresDon't assume that unaligned accesses are handled by the systemDon't call any cache flush functionsDon't do symbol renamingDon't emit stop bits before and after volatile extended asmsDon't force constants into registersDon't generate code for a bit-manipulation unitDon't generate code for near callsDon't generate code for near jumpsDon't generate fused multiply/add instructionsDon't let reg. allocator use ybase registersDon't optimize block movesDon't optimize lui/addiu address loadsDon't output compiler statisticsDon't pass parameters in registersDon't pedwarn about uses of Microsoft extensionsDon't place floating point constants in TOCDon't place symbol+offset constants in TOCDon't print additional debug printsDon't produce code relocatable at runtimeDon't push arg count, depend on symbol tableDon't put uninitialized constants in ROMDon't save DP across ISR in small memory modelDon't schedule the start and end of the procedureDon't set Windows definesDon't set backchain (faster, but debug harderDon't trap on integer divide by zeroDon't trap on integer divide overflowDon't use AltiVec instructionsDon't use EABIDon't use GP relative sdata/sbss sectionsDon't use Irix PICDon't use MIPS16 instructionsDon't use OSF PICDon't use P-mnemonics for branchesDon't use PowerPC General Purpose group optional instructionsDon't use PowerPC Graphics group optional instructionsDon't use PowerPC-64 instruction setDon't use ROM instead of RAMDon't use alternate register namesDon't use brasDon't use data cache for volatile mem refsDon't use embedded PICDon't use hardware fpDon't use indirect callsDon't use mips-tfile asm postpassDon't use multiply accumulateDon't use single (32-bit) FP onlyDon't use symbolic register namesDon't warn about strftime formats yielding 2 digit yearsDon't warn about too many arguments to format functionsDon't warn when all ctors/dtors are privateDon't warn when non-templatized friend functions are declared within a templateDon't warn when type converting pointers to member functionsDon't work around early 4300 hardware bugDowngrade conformance errors to warningsDummy array dimensioned to (1) is assumed-sizeDump decls to a .decl fileDump the entire translation unit to a fileDuplicate or overlapping case values/ranges at %0 and %1END statement at %0 missing `%A' keyword required for internal or module procedure(s) bounded by %1ERROR: too many basic blocks in .bb file %s + Emit 16-bit relocations to the small data areasEmit 32-bit relocations to the small data areasEmit ELF object codeEmit IEEE-conformant code, with inexact exceptionsEmit IEEE-conformant code, without inexact exceptionsEmit ROSE object codeEmit call graph informationEmit code compatible with TI toolsEmit code for Itanium (TM) processor B stepEmit code for the byte/word ISA extensionEmit code for the counting ISA extensionEmit code for the fp move and sqrt ISA extensionEmit code for the motion video ISA extensionEmit code to use GAS extensionsEmit code using explicit relocation directivesEmit common-like symbols as weak symbolsEmit cross referencing informationEmit half-PIC codeEmit identifying info in .s fileEmit special debugging information for COMMON and EQUIVALENCE (disabled)Emit stack checking codeEmit static const variables even if they are not usedEmit stop bits before and after volatile extended asmsEmit verbose debug information in assembly codeEnable Dwarf 2 line debug info via GNU asEnable MPY||ADD and MPY||SUB instructionsEnable SSA conditional constant propagationEnable SSA optimizationsEnable Transmeta picoJava extensionsEnable aggressive SSA dead code eliminationEnable automatic template instantiationEnable backend debuggingEnable compatibility with iC960 v2.0Enable compatibility with iC960 v3.0Enable compatibility with ic960 assemblerEnable debug outputEnable debuggingEnable exception handlingEnable fused multiply/add and multiply/subtract FP instructionsEnable linker relaxationEnable linker relaxationsEnable linker relaxingEnable machine specific peephole optimizationsEnable most warning messagesEnable new features under developmentEnable parallel instructionsEnable saving registers around function callsEnable scheduling across basic blocksEnable stack probingEnable support for huge objectsEnable use of DB instructionEnable use of RTPB instructionEnable use of RTPS instructionEnable use of conditional move instructionsEnable use of sdata/scommon/sbssEnables a register move optimizationEnables an rtl peephole pass run before sched2Enables guessing of branch probabilitiesEnd of search list. + End of source file before end of block started at %0Escape sequence at %0 out of range for characterExpected binary operator between expressions at %0 and at %1Explicit type declaration for intrinsic `%A' disagrees with invocation at %0Export functions even if they can be inlinedExpression at %0 has incorrect data type or rank for its contextExternal procedure `%A' is passed as actual argument at %0 but not explicitly declared EXTERNALExternal symbols have a leading underscoreExtraneous comma in FORMAT statement at %0Field expectedField names at %0 for outer structure definition -- specify them in a subsequent RECORD statement insteadFirst-column ampersand continuation at %0Floating-point operations can trapFor elinux, request a specified stack-size for this programFor intrinsics library: pass all parameters in registersForce RTL generation to emit valid 3 operand insnsForce all loop invariant computations out of loopsForce constants into registers to improve hoistingForce functions to be aligned to a 2 byte boundaryForce functions to be aligned to a 4 byte boundaryFortran 90 feature at %0 unsupportedFortran-specific form of -fbounds-checkFunction starts are aligned to this power of 2GCC does not yet properly implement `[*]' array declaratorsGCSE disabled: %d > 1000 basic blocks and %d >= 20 edges/basic blockGCSE disabled: %d basic blocks and %d registersGNU C does not support -C without using -EGNU CPP version %s (cpplib)Generate 29000 codeGenerate 29050 codeGenerate 32bit i386 codeGenerate 64bit x86-64 codeGenerate APCS conformant stack framesGenerate C header of platform specific featuresGenerate CA codeGenerate CF codeGenerate COFF format debug infoGenerate DWARF-1 format debug infoGenerate DWARF-2 debug infoGenerate ELF outputGenerate H8/300H codeGenerate H8/S codeGenerate H8/S2600 codeGenerate JA codeGenerate JD codeGenerate JF codeGenerate KA codeGenerate KB codeGenerate MC codeGenerate SA codeGenerate SB codeGenerate STABS format debug infoGenerate VMS format debug infoGenerate XCOFF format debug infoGenerate a call to abort if a noreturn function returnsGenerate big endian codeGenerate big endian dataGenerate call insns as indirect calls, if necessaryGenerate char instructionsGenerate code an embedded assembler can handleGenerate code assuming DW bit is not setGenerate code assuming DW bit is setGenerate code for C30 CPUGenerate code for C31 CPUGenerate code for C32 CPUGenerate code for C33 CPUGenerate code for C40 CPUGenerate code for C44 CPUGenerate code for GNU asGenerate code for GNU ldGenerate code for GNU runtime environmentGenerate code for Intel asGenerate code for Intel ldGenerate code for NeXT runtime environmentGenerate code for a 520XGenerate code for a 68000Generate code for a 68020Generate code for a 68030Generate code for a 68040Generate code for a 68040, without any new instructionsGenerate code for a 68060Generate code for a 68060, without any new instructionsGenerate code for a 68302Generate code for a 68332Generate code for a 68851Generate code for a 68881Generate code for a DLLGenerate code for a Sun FPAGenerate code for a Sun Sky boardGenerate code for a bit-manipulation unitGenerate code for a cpu32Generate code for an 11/10Generate code for an 11/40Generate code for an 11/45Generate code for big endianGenerate code for c1Generate code for c2Generate code for c32Generate code for c34Generate code for funcs even if they are fully inlinedGenerate code for given CPUGenerate code for high memoryGenerate code for little endianGenerate code for low memoryGenerate code for memory map1Generate code for memory map2Generate code for memory map3Generate code for memory map4Generate code for near callsGenerate code for near jumpsGenerate code for the C300Generate code for the C400Generate code for the M*Core M340Generate code for the specified chip or CPU versionGenerate code the unix assembler can handleGenerate code to check bounds before dereferencing pointers and arraysGenerate code to check subscript and substring boundsGenerate code using byte writesGenerate code which uses the FPUGenerate code with library calls for floating pointGenerate code without GP regGenerate debugging info in default extended formatGenerate debugging info in default formatGenerate divide results with reminder having the same sign as the divisor (not the dividend)Generate extended DWARF-1 format debug infoGenerate extended STABS format debug infoGenerate extended XCOFF format debug infoGenerate external legend informationGenerate floating point mathematics using given instruction setGenerate fused multiply/add instructionsGenerate inline division, optimize for latencyGenerate inline division, optimize for throughputGenerate little endian codeGenerate little endian dataGenerate load/store multiple instructionsGenerate load/store with update instructionsGenerate pc-relative codeGenerate position independent code, if possibleGenerate prefetch instructions, if available, for arrays in loopsGenerate re-entrant, PIC codeGenerate self-relocatable codeGenerate sin, cos, sqrt for FPUGenerate string instructions for block movesGenerate unwind tables exact at each instruction boundaryGlobal name `%A' at %0 has different type at %1 [info -f g77 M GLOBALS]Global name `%A' defined at %0 already defined at %1 [info -f g77 M GLOBALS]Global name `%A' is %B at %0 but is %C at %1 [info -f g77 M GLOBALS]Gratuitous parentheses surround implied-DO construct at %0Have front end emulate COMPLEX arithmetic to avoid bugsHex escape at %0 out of rangeHide MIL-STD 1753 intrinsicsHide libU77 intrinsicsHide libU77 intrinsics with bad interfacesHide non-FORTRAN 77 intrinsics F90 supportsHide non-FORTRAN-77 intrinsics F90 supportsHide non-FORTRAN-77 intrinsics VXT FORTRAN supportsHide non-FORTRAN-77 intrinsics f2c supportsHollerith and typeless constants not passed as argumentsHollerith constant at %0 specified %A more characters than are present as of %1I/O error on outputICE: emit_insn used where emit_jump_insn needed: + INCLUDE at %0 not the only statement on the source lineISO C does not allow extra `;' outside of a functionISO C does not permit named variadic macrosISO C does not permit use of `varargs.h'ISO C does not support `++' and `--' on complex typesISO C does not support `~' for complex conjugationISO C does not support complex integer typesISO C does not support plain `complex' meaning `double complex'ISO C doesn't support unnamed structs/unionsISO C forbids %s between function pointer and `void *'ISO C forbids `goto *expr;'ISO C forbids an empty source fileISO C forbids braced-groups within expressionsISO C forbids casting nonscalar to the same typeISO C forbids casts to union typeISO C forbids comparison of `void *' with function pointerISO C forbids conditional expr between `void *' and function pointerISO C forbids conditional expr with only one void sideISO C forbids const or volatile function typesISO C forbids data definition with no type or storage classISO C forbids empty initializer bracesISO C forbids forward parameter declarationsISO C forbids forward references to `enum' typesISO C forbids imaginary numeric constantsISO C forbids label declarationsISO C forbids member declarations with no membersISO C forbids nested functionsISO C forbids omitting the middle term of a ?: expressionISO C forbids ordered comparisons of pointers to functionsISO C forbids parameter `%s' shadowing typedefISO C forbids qualified function typesISO C forbids qualified void function return typeISO C forbids range expressions in switch statementsISO C forbids specifying range of elements to initializeISO C forbids subscripting `register' arrayISO C forbids taking the address of a labelISO C forbids the address of a cast expressionISO C forbids use of cast expressions as lvaluesISO C forbids use of compound expressions as lvaluesISO C forbids use of conditional expressions as lvaluesISO C forbids zero-size array `%s'ISO C prohibits argument conversion to union typeISO C requires a named argument before `...'ISO C requires whitespace after the macro nameISO C restricts enumerator values to range of `int'ISO C++ does not permit "%s" in #ifISO C++ does not permit `%T::%D' to be defined as `%T::%D'ISO C++ does not permit named return valuesISO C++ does not support `long long'ISO C++ forbids %s between pointer of type `void *' and pointer-to-functionISO C++ forbids %sing a pointer of type `%T'ISO C++ forbids %sing an enumISO C++ forbids aggregate initializer to newISO C++ forbids an empty condition for `%s'ISO C++ forbids applying `sizeof' to a function typeISO C++ forbids applying `sizeof' to a member functionISO C++ forbids applying `sizeof' to an expression of function typeISO C++ forbids applying `sizeof' to type `void' which is an incomplete typeISO C++ forbids array dimensions with parenthesized type in newISO C++ forbids assignment of arraysISO C++ forbids braced-groups within expressionsISO C++ forbids calling `::main' from within programISO C++ forbids cast to non-reference type used as lvalueISO C++ forbids casting between pointer-to-function and pointer-to-objectISO C++ forbids casting to an array type `%T'ISO C++ forbids comparison between pointer and integerISO C++ forbids compound literalsISO C++ forbids compound statements inside for initializationsISO C++ forbids computed gotosISO C++ forbids declaration of `%s' with no typeISO C++ forbids defining types within %sISO C++ forbids in-class initialization of non-const static member `%D'ISO C++ forbids initialization in array newISO C++ forbids initialization of member `%D'ISO C++ forbids initialization of member constant `%D' of non-integral type `%T'ISO C++ forbids initialization of new expression with `='ISO C++ forbids label declarationsISO C++ forbids member `%D' with same name as enclosing classISO C++ forbids nested type `%D' with same name as enclosing classISO C++ forbids non-constant aggregate initializer expressionsISO C++ forbids omitting the middle term of a ?: expressionISO C++ forbids range expressions in switch statementsISO C++ forbids static data member `%D' with same name as enclosing classISO C++ forbids subscripting non-lvalue arrayISO C++ forbids taking address of function `::main'ISO C++ forbids taking the address of a bound member function to form a pointer to member function. Say `&%T::%D'ISO C++ forbids taking the address of a cast to a non-lvalue expressionISO C++ forbids taking the address of a labelISO C++ forbids taking the address of an unqualified non-static member function to form a pointer to member function. Say `&%T::%D'ISO C++ forbids the use of `%s' on explicit instantiationsISO C++ forbids the use of `extern' on explicit instantiationsISO C++ forbids use of initializer list to initialize reference `%D'ISO C++ forbids using pointer of type `void *' in subtractionISO C++ forbids using pointer to a function in subtractionISO C++ forbids using pointer to a member in subtractionISO C++ forbids using pointer to a method in subtractionISO C++ forbids variable-size arrayISO C++ forbids variable-size array `%D'ISO C++ forbids zero-size arrayISO C++ forbids zero-size array `%D'ISO C++ prohibits anonymous structsISO C++ prohibits conversion from `%#T' to `(...)'ISO C++ prohibits overloading operator ?:ISO C89 does not support `[*]' array declaratorsISO C89 does not support `long long'ISO C89 does not support `static' or type qualifiers in parameter array declaratorsISO C89 does not support complex typesISO C89 does not support flexible array membersISO C89 forbids array `%s' whose size can't be evaluatedISO C89 forbids compound literalsISO C89 forbids long long integer constantsISO C89 forbids mixed declarations and codeISO C89 forbids specifying subobject to initializeISO C89 forbids subscripting non-lvalue arrayISO C89 forbids variable-size array `%s'ISO C99 requires rest arguments to be usedISR %s requires %d words of local vars, max is 32767Identifier expectedIgnore dllimport attribute for functionsIgnore dllimport for functionsImplement vtables using thunksImplicit declaration of `%A' at %0Implied do-loop iteration count of 0 (zero) for iteration variable `%A' in statement at %0Implied do-loop step count of 0 (zero) for iteration variable `%A' in statement at %0In %s `%s':In %s: overlapped variable and exception ranges at %dIn anythingIn block-data unitIn common blockIn constructIn entityIn file included from %s:%dIn file included from %s:%uIn functionIn function `%s':In member function `%s':In namelistIn programIn statement functionIn subroutineIn unknown kindIndicate the number of soft registers availableInitial character `%A' is lower-case in symbol name at %0Initialization via DATA and PARAMETER is type-compatibleInitialize local vars and arrays to zeroInline all known string operationsInline constants if it can be done in 2 insns or lessInline constants if it only takes 1 instructionInsert arc based program profiling codeInsert stack checking code into the programInstrument function entry/exit with profiling callsInteger at %0 too largeIntegrate simple functions into their callersInternal compiler error -- cannot perform operationInternal compiler error in %s, at %s:%dInternal compiler error: Error reporting routines re-entered. + Internal error: %s (program %s) + Please submit a full bug report. + See %s for instructions.Internal gcov abort. + Internally convert most source to uppercaseInternally preserve source caseIntersperse literal pools with code in the text sectionIntrinsic `%A' is passed as actual argument at %0 but not explicitly declared INTRINSICIntrinsic `%A' referenced %Bly at %0, %Cly at %1 [info -f g77 M EXPIMP]Intrinsic `%A', invoked at %0, known to be non-Y2K-compliant [info -f g77 M Y2KBAD]Intrinsics in uppercaseIntrinsics letters in arbitrary casesIntrinsics spelled as e.g. SqRtInvalid control expressionInvalid declarationInvalid declaration of or reference to symbol `%A' at %0 [initially seen at %1]Invalid exponent at %0 for real constant at %1; nondigit `%A' in exponent fieldInvalid expression statementInvalid first character at %0 [info -f g77 M LEX]Invalid init statementInvalid interface typeInvalid method declaration, method name requiredInvalid method declaration, return type requiredInvalid reference typeInvalid token at %0 in expression or subexpression at %1Invalid type expressionInvalid update expressionInvalid use at %0 of substring operator on %1Items in I/O list starting at %0 invalid for namelist-directed I/OJava method '%D' has non-Java parameter type `%T'Java method '%D' has non-Java return type `%T'Jump targets are aligned to this power of 2Junk after end of expression.Just generate unwind tables for exception handlingL%d cache latency unknown for %sLabel %A already defined at %1 when redefined at %0Label at %0 invalid with continuation line indicator at %1 [info -f g77 M LEX]Label definition %A at %0 on empty statement (as of %1)Label definition at %0 invalid on this kind of statementLabel definition missing at %0 for DO construct specifying label at %1Label number at %0 not in range 1-99999Language keyword letters in arbitrary casesLanguage keywords in uppercaseLanguage keywords spelled as e.g. IOStatLayout types like Intel's v1.3 gccLine too long as of %0 [info -f g77 M LEX]Link programs/data to be in external memory by defaultLink programs/data to be in onchip memory by defaultLink to emit program in ELF format (rather than mmo)Link with libads.a, libc.a and crt0.oLink with libmvme.a, libc.a and crt0.oLink with libsim.a, libc.a and sim-crt0.oLink with libyk.a, libc.a and crt0.oLocal adjustable symbol `%A' at %0Loop code aligned to this power of 2MCU `%s' not supportedMIPS ECOFF format does not allow changing filenames within functions with #lineMMIX Internal: %s is not a shiftable intMMIX Internal: Bad register: %dMMIX Internal: Bad value for 'm', not a CONST_INTMMIX Internal: Cannot decode this operandMMIX Internal: Expected a CONST_INT, not thisMMIX Internal: Expected a constant, not thisMMIX Internal: Expected a register, not thisMMIX Internal: Last named vararg would not fit in a registerMMIX Internal: Missing `%c' case in mmix_print_operandMMIX Internal: This is not a constant:MMIX Internal: This is not a recognized addressMMIX Internal: Trying to output invalidly reversed condition:MMIX Internal: What is the CC of this?MMIX Internal: What's the CC of this?MODULE PROCEDURE statement at %0 disallowed because INTERFACE at %1 specifies no generic name, operator, or assignmentMake 'char' be signed by defaultMake 'char' be unsigned by defaultMake adjacent short instructions parallel if possibleMake bit-fields by unsigned by defaultMake integers 32 bits wideMake prefix-radix non-decimal constants be typelessMake string literals `char[]' instead of `const char[]'Mark data as shared rather than privateMark strings as 'const char *'Maximum amount for a single stack increment operationMismatched EQUIVALENCE requirements for placement of `%A' at both %C and %D bytes offset from `%B'Missing %A specifier in statement at %0Missing class nameMissing class type termMissing close parenthese at %0 needed to match open parenthese at %1Missing close-parenthese(s) in FORMAT statement at %0Missing close-period between `.%A' at %0 and %1Missing colon as of %0 in substring reference for %1Missing comma in FORMAT statement at %0Missing field name(s) for structure definition at %0 within structure definition at %1Missing first operand for binary operator at %0Missing formal parameter termMissing identifierMissing interface nameMissing nameMissing number following `E' in FORMAT statement at %0Missing number following period in FORMAT statement at %0Missing operand for operator at %1 at end of expression at %0Missing or invalid constant expressionMissing structure name for outer structure definition at %0Missing super class nameMissing termMissing term and ')' expectedMissing term and ']' expectedMissing term or ')'Missing term or ')' expectedMissing value at %1 for real-number exponent at %0Missing variable initializerMixed CHARACTER and non-CHARACTER types via COMMON/EQUIVALENCE -- for example, `%A' and `%B'Multiple include guards may be useful for: + NAMELIST not adequately supported by run-time library for source files with case preservedNOTE_INSN_BASIC_BLOCK %d in middle of basic block %dNOTE_INSN_BASIC_BLOCK is missing for block %dNULL used in arithmeticNested %% construct (%%VAL, %%REF, or %%DESCR) at %0Never append a second underscore to externalsNever optimize static class initialization codeNo "Small register classes" kludgeNo UNIT= specifier in I/O control list at %0No branches in file %s + No branches in function %s + No calls in file %s + No calls in function %s + No case for %sNo components specified as of %0 for derived-type definition beginning at %1No components specified as of %0 for map beginning at %1No components specified as of %0 for structure definition beginning at %1No default crt0.oNo executable code associated with file %s. + No executable source lines in file %s + No executable source lines in function %s + No label definition for FORMAT statement at %0No specification for implied-DO iterator `%A' at %0Non-ISO-C-standard escape sequence `\%A' at %0Non-numeric character at %0 in label field [info -f g77 M LEX]Not an integer constant expression in implied do-loop in statement at %0Null argument at %0 for procedure invocation at %1Null argument at %0 for statement function reference at %1Null character at %0 -- line ignoredNull element at %0 for array reference at %1Number of registers used to pass integer argumentsOmit the frame pointer in leaf functionsOnly constructors can invoke constructorsOnly emit explicit instatiations of inline templatesOnly emit explicit template instatiationsOnly issue one instruction per cycleOnly preserve 32 bits of FP reg across callOperator at %0 has lower precedence than that at %1 -- use parenthesesOptimize block movesOptimize for 32032Optimize for 32332 cpuOptimize for 32532 cpuOptimize for 3900Optimize for 4650Optimize for Cypress processorsOptimize for F930 processorsOptimize for F934 processorsOptimize for SparcLite processorsOptimize for SuperSparc processorsOptimize lui/addiu address loadsOptimize sibling and tail recursive callsOptimize tail call instructions in assembler and linkerOptions: + Ouput extra code for initialized dataOutput GNU ld formatted global initializersOutput compiler statisticsOutput extra debug info in Luxworks environmentOutput instruction sizes to the asm fileOutside of any program unit: + Override -mbest-lib-optionsOverride the underlying type for wchar_t to `unsigned short'PIC code generation is not compatible with fast indirect calls + PIC code generation is not supported in the portable runtime model + PIC register isn't set upPRINT_OPERAND null pointerPRINT_OPERAND: unknown punctuation '%c'PRINT_OPERAND_ADDRESS, null pointerPUBLIC or PRIVATE statement at %1 cannot be specified along with PUBLIC or PRIVATE statement at %0Pack structure members together without holesPass -assert pure-text to linkerPass FP arguments in FP registersPass all arguments on stackPass arguments in registersPass arguments on the stackPass parameters in registers (default)Pass some arguments in registersPay attention to the 'inline' keywordPerform DWARF2 duplicate eliminationPerform a number of minor, expensive optimizationsPerform enhanced load motion during global subexpression eliminationPerform jump threading optimizationsPerform loop unrolling for all loopsPerform loop unrolling when iteration count is knownPerform store motion after global subexpression eliminationPerform strength reduction optimizationsPerform tail call optimizationPerform the global common subexpression eliminationPeriod at %0 not followed by digits for floating-point number or by `NOT.', `TRUE.', or `FALSE.'Permit unaligned accessesPlace arg count in a nop instruction (faster than push)Place floating point constants in TOCPlace symbol+offset constants in TOCPlace variable addresses in the regular TOCPlease keep this in mind before you report bugs.Please submit a full bug report, + with preprocessed source if appropriate. + See %s for instructions. + Pointers are 32-bitPointers are 64-bitPrefer branches over conditional executionPrefer word accesses over byte accessesPrepend global symbols with ":" (for use with PREFIX)Preserve all 40 bits of FP reg across callPreserve all spelling (case) used in programPretend that host and target use the same FP formatPrint code coverage information. + + Print g77-specific compiler version info, run internal testsPrint internal debugging-related infoPrint names of program units as they are compiledProcess #ident directivesProcessing spec %c%s%c, which is '%s' + Produce big endian codeProduce code relocatable at runtimeProduce little endian codeProfiling is not supported on this target.Profiling uses mcountProgram does not use Unix-f77 dialectal featuresProgram is written in Fortran-90-ish dialectProgram is written in Fortran-90-ish free formProgram is written in VXT (Digital-like) FORTRANProgram is written in typical FORTRAN 66 dialectProgram is written in typical Unix f77 dialectProgram name at %0 superfluous, no PROGRAM statement specified at %1Program unit name at %0 not the same as name at %1Program written in lowercaseProgram written in strict mixed-caseProgram written in uppercaseProhibit PC relative function callsPut everything in the regular TOCPut literal pools in a separate literal sectionPut uninitialized constants in ROM (needs -membedded-data)RETURN statement at %0 invalid within a main program unitRETURN_ADDRESS_OFFSET not supportedRTL check: access of elt %d of `%s' with last elt %d in %s, at %s:%dRTL check: access of elt %d of vector with last elt %d in %s, at %s:%dRTL check: expected code `%s' or `%s', have `%s' in %s, at %s:%dRTL check: expected code `%s', have `%s' in %s, at %s:%dRTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s) in %s, at %s:%dRTL check: expected elt %d type '%c', have '%c' (rtx %s) in %s, at %s:%dRange specification at %0 invalid for CASE statement within logical-type SELECT CASE statementReading specs from %s + Recognize and/bitand/bitor/compl/not/or/xorReduce size of object filesReference to generic intrinsic `%A' at %0 could be to form %B or %CReference to label at %1 inconsistent with earlier reference at %0Reference to label at %1 inconsistent with its definition at %0Reference to label at %1 is outside block containing definition at %0Register sb is zero. Use for absolute addressingReorder basic blocks to improve code placementReplace add,compare,branch with branch on count regReplace system pathReport on permanent memory allocation at end of runReport time taken by each compiler pass at end of runRequest IEEE-conformant math library routines (OSF/1)Reschedule instructions after register allocationReschedule instructions before register allocationRetain legend informationRetain standard MXDB informationReturn 'short' aggregates in memory, not registersReturn 'short' aggregates in registersReturn all structures in memory (AIX default)Return floating point results in ac0Return floating point results in memoryReturn small structures in registers (SVR4 default)Return value `%A' for FUNCTION at %0 not referenced in subprogramReturn values of functions in FPU registersReuse r30 on a per function basisRun CSE pass after loop optimizationsRun the loop optimizer twiceSAVE statement or attribute at %1 cannot be specified along with SAVE statement or attribute at %0SELECT CASE on CHARACTER type (at %0) not supported -- sorrySSE instruction set disabled, using 387 arithmeticsSame as: -mep -mprolog-functionSame name `%A' used for %B at %0 and %C at %1 [info -f g77 M INTGLOB]Save DP across ISR in small memory modelSave temp. files in Luxworks environmentSchedule code for given CPUSchedule given CPUScope of for-init-statement vars extends outsideSecond occurrence of CASE DEFAULT at %0 within SELECT CASE at %1Second occurrence of ELSE WHERE at %0 within WHERE at %1Select ABI calling conventionSelect CPU to generate code forSelect method for sdata handlingSemicolon at %0 is an invalid tokenSerialize volatile memory references with MEMW instructionsSet Windows definesSet backchainSet class pathSet class path (deprecated: use --classpath instead)Set errno after built-in math functionsSet maximum alignment to 4Set maximum alignment to 8Set start-address of dataSet start-address of the programSet the PPC_EMB bit in the ELF flags headerSet the max size of data eligible for the SDA areaSet the max size of data eligible for the TDA areaSet the max size of data eligible for the ZDA areaSet the maximum line lengthSetting spec %s to '%s' + + Small data area: none, sdata, useSmall memory modelSpecification at %0 requires ADVANCE=`NO' specification in same I/O control listSpecification at %0 requires explicit FMT= specification in same I/O control listSpecify ABI to useSpecify CPU for code generation purposesSpecify CPU for scheduling purposesSpecify a Standard MIPS ISASpecify alternate name for bss sectionSpecify alternate name for constant sectionSpecify alternate name for data sectionSpecify alternate name for dsp16xx chipSpecify alternate name for text sectionSpecify cache flush functionSpecify maximum number of iterations for RPTSSpecify maximum template instantiation depthSpecify range of registers to make fixedSpecify size of long double (64 or 128 bits)Specify that arguments may alias each other & globalsSpecify the MCU nameSpecify the initial stack addressSpecify the minimum bit alignment of structuresSpecify the name of the class for constant stringsSpecify the name of the target CPUSpecify the name of the target architectureSpecify the register allocation orderSpecify the register to be used for PIC addressingSpecify the version of the floating point emulatorSpurious number in FORMAT statement at %0Spurious sign in FORMAT statement at %0Spurious text trailing number in FORMAT statement at %0Spurious trailing comma preceding terminator at %0Statement at %0 follows ELSE block for IF construct at %1Statement at %0 invalid in BLOCK DATA program unit at %1Statement at %0 invalid in context established by statement at %1Statement at %0 invalid in this contextStatement at %0 must specify construct name specified at %1Statement function `%A' defined at %0 is not usedStore function names in object codeStore locals in argument registersStore strings in writable data sectionStrength reduce all loop general induction variablesSubstring begin/end point at %0 out of defined rangeSubstring of non-CHARACTER entity `%A' in EQUIVALENCE statementSupport 3DNow! built-in functionsSupport Green Hills ABISupport MMX and SSE built-in functions and code generationSupport MMX built-in functionsSupport MMX, SSE and SSE2 built-in functions and code generationSupport calls between Thumb and ARM instruction setsSupport message passing with the Parallel EnvironmentSupport synchronous non-call exceptionsSuppress output of instruction numbers and line number notes in debugging dumpsSwitches: + -include Include the contents of before other files + -imacros Accept definition of macros in + -iprefix Specify as a prefix for next two options + -iwithprefix Add to the end of the system include path + -iwithprefixbefore Add to the end of the main include path + -isystem Add to the start of the system include path + Symbol names in lowercaseSymbol names in uppercaseSymbol names spelled in mixed caseSymbols have a leading underscoreTake at least one trip through each iterative DO loopTarget does not have split I&DTarget has split I&DTarget machine does not support DOUBLE COMPLEX, specified at %0Target machine does not support complex entity of kind specified at %0Target the AM33 processorThe -march option is incompatible to -mipsN and therefore ignored.The MMU will trap on unaligned accessesThe maximum amount of memory to be allocated by GCSEThe maximum length of scheduling's pending operations listThe maximum number of instructions in a function that is eligible for inliningThe maximum number of instructions to consider to fill a delay slotThe maximum number of instructions to consider to find accurate live register informationThe maximum number of passes to make when doing GCSEThe meaning of `\a' (at %0) varies with -traditionalThe meaning of `\x' (at %0) varies with -traditionalThis is free software; see the source for copying conditions. There is NO + warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + Thread model: %s + Thumb: Assume function pointers may go to non-Thumb aware codeThumb: Assume non-static functions may be called from ARM codeThumb: Generate (leaf) stack frames even if not neededThumb: Generate (non-leaf) stack frames even if not neededTogether with -fpic and -fPIC, do not use GOTPLT referencesToo %B arguments for `%A' at %0 versus invocation at %1 [info -f g77 M GLOBALS]Too %B arguments passed to `%A' at %0 versus definition at %1 [info -f g77 M GLOBALS]Too few elements (%A missing) as of %0 for array reference at %1Too few elements in reference to array `%A' in EQUIVALENCE statementToo few initial values in list of initializers for `%A' at %0Too many elements as of %0 for array reference at %1Too many elements in reference to array `%A' in EQUIVALENCE statementToo many initial values in list of initializers starting at %0Total size of local variables exceeds architecture limit.Trailing comma in procedure call denotes null argumentTrap for signed overflow in addition / subtraction / multiplicationTrap on integer divide by zeroTrap on integer divide overflowTreat all warnings as errorsTreat initial values of 0 like non-zero valuesTreat local vars and COMMON blocks as if they were named in SAVE statementsTruncating characters on right side of character constant at %0Truncating characters on right side of hollerith constant at %0Truncating non-zero data on left side of numeric constant at %0Truncating non-zero data on left side of typeless constant at %0Tune alignment for the specified chip or CPU versionTune expected memory latencyTurn on maintainer testing codeTwo arithmetic operators in a row at %0 and %1 -- use parenthesesType and/or kind-type parameter disagreement between CASE value or value within range at %0 and SELECT CASE at %1Type disagreement between expressions at %0 and %1Type name at %0 not the same as name at %1Typeless constant at %0 too largeUNKNOWN in print_operand !?UNKNOWN in s390_output_symbolic_const !?Unable to open INCLUDE file `%A' at %0Unbalanced ']'Undefined label, first referenced at %0Unexpected EOF while reading source file %s. + Uninitialized locals in .bssUninitialized locals in .dataUnknown escape sequence `\%A' at %0Unknown escape sequence `\' followed by char code 0x%A at %0Unknown switch -mlong-double-%sUnrecognized FORMAT specifier at %0Unrecognized character at %0 [info -f g77 M LEX]Unsupported FORMAT specifier at %0Unsupported VXT statement at %0Unsupported operand for ** at %1 -- converting to default INTEGERUnsupported; affects code-generation of arraysUnsupported; do not generate libf2c-calling codeUnterminated escape sequence `\' at %0Usage: %s [options] file... + Usage: gcov [OPTION]... SOURCEFILE + + Use .EQV./.NEQV. instead of .EQ./.NE. at %0 for LOGICAL operands at %1 and %2Use 128 bit long doublesUse 16 bit intUse 32 bit floatUse 32 bit intUse 32-bit ABIUse 32-bit FP registersUse 32-bit general registersUse 32-bit long typeUse 4 byte entries in switch tablesUse 64 bit floatUse 64 bit long doublesUse 64-bit ABIUse 64-bit FP registersUse 64-bit general registersUse 64-bit int typeUse 64-bit long typeUse 64-bit longsUse ABI reserved registersUse AltiVec instructionsUse Cygwin interfaceUse DEC assembler syntaxUse EABIUse GNU asUse GP relative sdata/sbss sectionsUse H8/300 alignment rulesUse IEEE math for fp comparisonsUse Irix PICUse MIPS asUse MPYI instruction for C3xUse Mingw-specific thread supportUse Mingw32 interfaceUse OSF PICUse P-mnemonics for branches statically predicted as takenUse POWER instruction setUse POWER2 instruction setUse PowerPC General Purpose group optional instructionsUse PowerPC Graphics group optional instructionsUse PowerPC instruction setUse PowerPC-64 instruction setUse ROM instead of RAMUse UNIX assembler syntaxUse V8 Sparc ISAUse VAX fpUse VAX-C alignmentUse __cxa_atexit to register destructorsUse addresses that allocate global registersUse alternate leaf function entriesUse alternate register namesUse bare Windows interfaceUse big-endian byte orderUse bit-field instructionsUse bras for execucable < 64kUse call-clobbered registers for parameters and return valueUse cc- and libc-compatible 32-bit longsUse complex addressing modesUse data cache for volatile mem refs (default)Use different calling convention using 'rtd'Use direct CALLn instructions for fast callsUse embedded PICUse epsilon-respecting floating point compare instructionsUse fast but approximate float to integer conversionUse features of and schedule code for given CPUUse features of and schedule given CPUUse flat register window modelUse fp registersUse given Sparc code modelUse given assembler dialectUse given x86-64 code modelUse hardware floating pointUse hardware floating point instructionsUse hardware fpUse hardware quad fp instructionsUse in/loc/out register namesUse indirect CALLXn instructions for large programsUse indirect callsUse kernel global registersUse large memory modelUse library calls to perform FP operationsUse little-endian byte orderUse little-endian byte order for dataUse mcount for profilingUse mcount_ptr for profilingUse mips-tfile asm postpassUse mips16 entry/exit psuedo opsUse multiply accumulateUse multiply-accumulate fp instructionsUse new mnemonics for PowerPC architectureUse normal calling conventionUse normal memory modelUse offset tables for virtual method callsUse old mnemonics for PowerPC architectureUse profiling information for branch probabilitiesUse push instructions to save outgoing argumentsUse red-zone in the x86-64 codeUse register stack for parameters and return valueUse registers for argument passingUse single (32-bit) FP onlyUse slow but accurate float to integer conversionUse small memory modelUse software floating pointUse stack biasUse standard calling sequence, with arg count wordUse structs on stronger alignment for double-word copiesUse stubs for function prologuesUse subroutines for function prologue/epilogueUse symbolic register namesUse the 26-bit version of the APCSUse the 32-bit version of the APCSUse the BK register as a general purpose registerUse the Cygwin interfaceUse the Mingw32 interfaceUse the Xtensa MAC16 optionUse the Xtensa MIN/MAX optionUse the Xtensa MUL16 optionUse the Xtensa MUL32 optionUse the Xtensa NSA optionUse the Xtensa SEXT optionUse the Xtensa boolean register optionUse the Xtensa code density optionUse the Xtensa floating-point unitUse the bit-field instructionsUse the most feature-enabling options allowed by other optionsUse the same size for double as for floatUse the smallest fitting integer to hold enumsUse unaligned memory referencesUse user global registersUse zero-extending memory loads, not sign-extending onesUsing built-in specs. + Utilize Visual Instruction SetVOIDmode on an outputVariable-expression FORMAT specifier at %0 -- unsupportedWarn about casting functions to incompatible typesWarn about casts which discard qualifiersWarn about code that will never be executedWarn about constructs whose meaning change in ISO CWarn about constructs with surprising meaningsWarn about enumerated switches missing a specific caseWarn about externs not at file scope levelWarn about function pointer arithmeticWarn about functions which might be candidates for attribute noreturnWarn about functions which might be candidates for format attributesWarn about global funcs without previous declarationsWarn about global funcs without prototypesWarn about implicit function declarationsWarn about inconsistent return typesWarn about multiple declarations of the same objectWarn about non virtual destructorsWarn about non-prototyped function declsWarn about non-string-literal format stringsWarn about overloaded virtual function namesWarn about pointer casts which increase alignmentWarn about possible missing parenthesesWarn about possible security problems with format functionsWarn about possible violations of sequence point rulesWarn about possibly confusing type conversionsWarn about possibly missing braces around initializersWarn about printf/scanf/strftime/strfmon format anomaliesWarn about returning structures, unions or arraysWarn about signed/unsigned comparisonsWarn about subscripts whose type is 'char'Warn about suspicious declarations of mainWarn about testing equality of floating point numbersWarn about the use of the #import directiveWarn about uninitialized automatic variablesWarn about unrecognized pragmasWarn about use of (only a few for now) Fortran extensionsWarn about use of multicharacter literalsWarn about uses of __attribute__((deprecated)) declarationsWarn about violations of Effective C++ style rulesWarn if .class files are out of dateWarn if a C style cast is used in a programWarn if a selector has multiple methodsWarn if deprecated empty statements are foundWarn if modifiers are specified when not necessaryWarn if nested comments are detectedWarn when a declaration does not specify a typeWarn when a function arg is a structureWarn when a function is declared extern, then inlineWarn when a function is unusedWarn when a function parameter is unusedWarn when a label is unusedWarn when a stackframe is larger than the specified sizeWarn when a variable is unusedWarn when an expression value is unusedWarn when an inlined function cannot be inlinedWarn when an optimization pass is disabledWarn when one local variable shadows anotherWarn when overload promotes from unsigned to signedWarn when padding is required to align struct membersWarn when synthesis behavior differs from CfrontWarn when the compiler reorders codeWarn when the packed attribute has no effect on struct layoutWarn when trigraphs are encounteredWhen possible do not generate stack framesWhen running CSE, follow conditional jumpsWhen running CSE, follow jumps to their targetsWork around early 4300 hardware bugWork around hardware multiply bugWork around storem hardware bugYYDEBUG not definedZero or one maps specified as of %0 for union beginning at %1 -- at least two are requiredZero-length character constant at %0Zero-size array at %0Zero-size specification invalid at %0[Leaving %s] + [REPORT BUG!!][REPORT BUG!!] %[cannot find %s][super ...] must appear in a method context\x used at %0 with no following hex digits\x used with no following hex digits_Pragma takes a parenthesized string literal__VA_ARGS__ can only appear in the expansion of a C99 variadic macro__alignof__ applied to an incomplete type__builtin_eh_return not supported on this target__builtin_longjmp second argument must be 1__builtin_saveregs not supported by this subtarget__builtin_saveregs not supported by this target` ' flag`!' flag`#' flag`%#D' and `%#D' cannot be overloaded`%#D' cannot be declared`%#D' conflicts with previous using declaration `%#D'`%#D' does not refer to the unqualified type, so it is not used for linkage`%#D' hides constructor for `%#T'`%#D' invalid; an anonymous union can only have non-static data members`%#D' is not a static member of `%#T'`%#D' needs a final overrider`%#D' previously declared here`%#D' previously defined here`%#D' redeclared as %C`%#D' redeclared as different kind of symbol`%#D' used prior to declaration`%#D' was used before it was declared inline`%#T' has no member named `%D'`%#T' has pointer data members`%#T' has virtual functions but non-virtual destructor`%#T' is not a template`%#T' is not a valid type for a template constant parameter`%#T' only defines a private destructor and has no friends`%#T' only defines private constructors and has no friends`%#T' used where a `%T' was expected`%#T' used where a floating point value was expected`%%%c' yields only last 2 digits of year`%%%c' yields only last 2 digits of year in some locales`%%' constraint used with last operand`%%d' operand isn't a register`%%l' operand isn't a label`%+#D' is inaccessible`%+#D' is private`%+#D' is protected`%D' access`%D' as declarator`%D' can only be specified for constructors`%D' can only be specified for functions`%D' can only be specified for objects and functions`%D' can only be specified inside a class`%D' cannot be declared virtual, since it is always static`%D' cannot have default arguments`%D' declared as a `virtual' %s`%D' declared as a friend`%D' declared as an `inline' %s`%D' declared as reference but not initialized`%D' declared with an exception specification`%D' denotes an ambiguous type`%D' does not declare a template type`%D' has already been declared in `%T'`%D' has incomplete type`%D' implicitly declared before its definition`%D' invalid in `%#T'`%D' invalid in `%T'`%D' is a namespace`%D' is already a friend of class `%T'`%D' is already declared in this scope`%D' is already defined in `%T'`%D' is already defined in class `%T'`%D' is already defined in the class %T`%D' is not a function template`%D' is not a function,`%D' is not a member of type `%T'`%D' is not a namespace`%D' is too small to hold all values of `%#T'`%D' must be a nonstatic member function`%D' must be declared before use`%D' must be either a non-static member function or a non-member function`%D' must be initialized by constructor, not by `{...}'`%D' must have an argument of class or enumerated type`%D' must take `void'`%D' must take either one or two arguments`%D' must take either zero or one argument`%D' must take exactly one argument`%D' must take exactly two arguments`%D' names constructor`%D' not declared`%D' not defined`%D' should be initialized in the member initialization list`%D' should have been declared inside `%D'`%D' should return by value`%D' undeclared (first use this function)`%D' undeclared in namespace `%D'`%D' used without template parameters`%D' was hidden`%D' was not declared in this scope`%D' was previously implicitly declared to return `int'`%D::%D' is not a template`%E' cannot be used as a function`%E' cannot be used as a member pointer, since it is of type `%T'`%E' has type `void' and is not a throw-expression`%E' is not a type, use `typename %E' to make it one`%E' is not a valid template argument`%E' is not of type `%T'`%T' does not have a class or union named `%D'`%T' fails to be a typedef or built-in type`%T' fails to be an aggregate typedef`%T' is already a friend of `%T'`%T' is an ambiguous base of `%T'`%T' is an inaccessible base of `%T'`%T' is implicitly a typename`%T' is not a class or namespace`%T' is not a class or union type`%T' is not a class, struct, or union type`%T' is not a namespace`%T' is not a pointer-to-object type`%T' is not a template`%T' is not a template type`%T' is not a valid expression`%T' is not an aggregate type`%T' specified as declarator-id`%T::%D' is not a valid declarator`%V' qualifiers cannot be applied to `%T'`%s %T' declares a new type at namespace scope`%s' attribute applies only to functions`%s' attribute argument not a string constant`%s' attribute argument not an integer constant`%s' attribute can only be applied to Java class definitions`%s' attribute can only be applied to class definitions`%s' attribute directive ignored`%s' attribute does not apply to types`%s' attribute ignored`%s' attribute ignored for `%s'`%s' attribute is not supported on this platform`%s' attribute only applies to function types`%s' attribute only applies to functions`%s' attribute only applies to interrupt functions`%s' attribute only applies to variables`%s' attribute requires an integer constant argument`%s' cannot be statically allocated`%s' declared `static' but never defined`%s' declared as both exported to and imported from a DLL`%s' declared as function returning a function`%s' declared as function returning an array`%s' declared inline after being called`%s' declared inline after its definition`%s' defined both normally and as an alias`%s' defined but not used`%s' does not respond to `%s'`%s' fails to be a typedef or built in type`%s' has an incomplete type`%s' has both `extern' and initializer`%s' ignored, conflicts with `-g%s'`%s' initialized and declared `extern'`%s' is an unrecognized format function type`%s' is deprecated`%s' is deprecated (declared at %s:%d)`%s' is narrower than values of its type`%s' is neither function nor member function; cannot be declared friend`%s' is normally a non-static function`%s' is not a valid class name`%s' is not at beginning of declaration`%s' is not defined outside of function scope`%s' is obsolete; g++ vtables are now COM-compatible by default`%s' is promoted to `%s' when passed through `...'`%s' is usually a function`%s' locally external but globally static`%s' might be used uninitialized in this function`%s' not supported by %s`%s' redeclared as different kind of symbol`%s' tag used in naming `%#T'`%s' takes only zero or two arguments`%s' undeclared (first use in this function)`%s' undeclared here (not in a function)`%s' used but never defined`%s' used prior to declaration`%s' was declared `extern' and later `static'`%s' was declared implicitly `extern' and later `static'`%s' was previously implicitly declared to return `int'`%s' was used with no declaration before its definition`%s' was used with no prototype before its definition`%s': unknown or unsupported -g option`&' constraint used with no register class`'' flag`(' flag`+' flag`-' flag`-gnat' misspelled as `-gant'`-p' not supported; use `-pg' and gprof(1)`...' handler must be the last handler for its try block`...' in old-style identifier list`/*' within comment`0' flag`::%D' undeclared (first use here)`>>' should be `> >' in template class name`@end' missing in implementation context`@end' must appear in an implementation context`B' operand has multiple bits set`B' operand is not constant`E' modifier`I' flag`O' modifier`^' flag`_' flag`__alignof' applied to a bit-field`__builtin_next_arg' called without an argument`a' flag`and' of mutually exclusive equal-tests is always 0`asm' operand constraint incompatible with operand size`asm' operand requires impossible reload`asm' specifiers are not permitted on non-static data members`bool' is now a keyword`const' and `volatile' function specifiers on `%D' invalid in %s declaration`default' label not within a switch statement`defined' must be followed by ident or (ident)`enum %s' declared in `for' loop initial declaration`enum %s' declared inside parameter list`enum %s' incomplete in scope ending here`for' loop initial declaration used outside C99 mode`inline' is not allowed in declaration of friend template specialization `%D'`inline' specified for friend class declaration`long long long' is too long for GCC`long' switch expression not converted to `int' in ISO C`main' must return `int'`noreturn' function does return`noreturn' function returns non-void value`o' operand is not constant`operator delete' must return type `%T'`operator delete' takes type `%T' as first parameter`operator new' must not return NULL unless it is declared `throw()' (or -fcheck-new is in effect)`operator new' must return type `%T'`operator new' takes type `size_t' (`%T') as first parameter`operator=' should return a reference to `*this'`or' of unmatched not-equal tests is always 1`return' with a value, in function returning void`return' with no value, in function returning non-void`sigof' applied to non-aggregate expression`sigof' applied to non-aggregate type`sizeof' applied to a bit-field`sizeof' applied to incomplete type `%T'`sizeof' applied to non-static member`static' may not be used when defining (as opposed to declaring) a static data member`struct %s' declared in `for' loop initial declaration`struct %s' declared inside parameter list`struct %s' incomplete in scope ending here`this' is unavailable for static member functions`union %s' declared in `for' loop initial declaration`union %s' declared inside parameter list`union %s' incomplete in scope ending here`va_start' used in function with fixed args`void' in parameter list must be the entire lista data area attribute cannot be specified for local variablesa global declarationa long long inta parametera parameter list with an ellipsis can't match an empty parameter name list declarationa previous locala using-declaration cannot specify a template-id. Try `using %T::%D'a using-declaration cannot specify a template-id. Try `using %D'abort in %s, at %s:%dabsolute file name in remap_filenameabstract declarator `%T' used as declarationabstract method in non-abstract classaddress of global register variable `%s' requestedaddress of local variable `%D' returnedaddress of non-extern `%E' cannot be used as template argumentaddress of overloaded function with no contextual type informationaddress of register variable `%s' requestedaddress offset not a constantaddress requested for `%D', which is declared `register'adjusting pointers for covariant returnsafter previous specification in `%#D'aggregate `%#D' has incomplete type and cannot be definedaggregate has a partly bracketed initializeraggregate initializer is not constantaggregate initializer uses complicated arithmeticaggregate value used where a complex was expectedaggregate value used where a float was expectedaggregate value used where an integer was expectedalias arg not a stringalias definitions not supported in this configuration; ignoredalias name is too long - alias ignoredalignment may not be specified for `%s'alignment must be a small power of two, not %dalignment of `%s' is greater than maximum object file alignment. Using %dall member functions in class `%T' are privateallocated but unused delay list in epilogueambiguates built-in declaration `%#D'ambiguates old declaration `%#D'ambiguous abbreviation %sambiguous class template instantiation for `%#T'ambiguous conversion for array subscriptambiguous default type conversion from `%T'ambiguous template specialization `%D' for `%+D'an anonymous union cannot have function membersan argument type that has a default promotion can't match an empty parameter name list declarationan unsigned long intan unsigned long long intanachronistic old style base class initializeranachronistic use of array size in vector deleteand pointers are %d bits wide, but g77 doesn't yet workanonymous aggregate with no membersanonymous enum declared inside parameter listanonymous struct declared inside parameter listanonymous struct not inside named typeanonymous union declared inside parameter listanonymous variadic macros were introduced in C99args to be formatted is not '...'argument #%d is a structureargument 1 of __builtin_altivec_predicate is out of rangeargument 1 of __builtin_altivec_predicate must be a constantargument 3 of `%s' must be a 2-bit literalargument `%s' doesn't match prototypeargument `%s' might be clobbered by `longjmp' or `vfork'argument is a structureargument missing after %sargument of `%s' attribute is not "ilink1" or "ilink2"argument of `%s' attribute is not a string constantargument of `__builtin_args_info' must be constantargument of `__builtin_args_info' out of rangeargument of `__builtin_eh_return_regno' must be constantargument of `asm' is not a constant stringargument of type `%T' does not match `%T'argument to `%s' attribute larger than %dargument to `%s' missingargument to `%s' missing + argument to `-%s' is missingargument to `-B' is missingargument to `-V' is missingargument to `-Xlinker' is missingargument to `-b' is missingargument to `-l' is missingargument to `-specs' is missingargument to `-specs=' is missingargument to `-x' is missingarguments given to macro `%s'arithmetic on pointer to an incomplete typearray `%s' assumed to have one elementarray index in initializer exceeds array boundsarray index in non-array initializerarray index range in initializer exceeds array boundsarray initialized from non-constant array expressionarray size missing in `%D'array size missing in `%s'array subscript has type `char'array subscript is not an integerarray type has incomplete element typearray type value used where scalar is requiredarrays of functions are not meaningfulas `%D'asm declaration conficts with previous renameasm operand %d probably doesn't match constraintsasm template is not a string constantassertion missing after %sassertion without predicateassignmentassignment (not initialization) in declarationassignment suppressionassignment to final field `%s' not in constructorassignment to final field `%s' not in field's classassignment to final static field `%s' not in class initializerassuming cast to type `%T' from overloaded functionassuming pointer to member `%D'at this point in fileattempt to take address of bit-field structure member `%D'attempt to take address of bit-field structure member `%s'attempt to use poisoned "%s"attributes in parameter array declarator ignoredbackslash and newline separated by spacebackslash-newline at end of filebad PC range for debug info for local `%s'bad addressbad address, not (reg+disp):bad amount of stack space removal: %dbad array initializerbad call to d30v_move_2wordsbad directive -- missing close-quotebad header versionbad insn for 'A'bad insn in d30v_print_operand, 0 casebad insn to d30v_print_operand, 'A' modifier:bad insn to d30v_print_operand, 'M' modifier:bad insn to d30v_print_operand, 'f' modifier:bad insn to d30v_print_operand_address:bad insn to d30v_print_operand_memory_reference:bad insn to print_operand, 'B' modifier:bad insn to print_operand, 'E' modifier:bad insn to print_operand, 'F' or 'T' modifier:bad insn to print_operand, 'R' modifier:bad insn to print_operand, 's' modifier:bad magic numberbad magic number in file '%s'bad method signaturebad modes_tieable_p for register %s, mode1 %s, mode2 %sbad pc in exception_tablebad raw header versionbad registerbad register extension codebad shift insn:bad string constantbad testbad type in parameter debug infobad value (%s) for %s switchbad value (%s) for -mabi= switchbad value (%s) for -march= switchbad value (%s) for -masm= switchbad value (%s) for -mcmodel= switchbad value (%s) for -mcpu switchbad value (%s) for -mcpu= switchbad value (%s) for -mfpmath= switchbad value (%s) for -mips switchbad value (%s) for -mmodel switchbad value (%s) for -msdata switchbad value (%s) for -mtune= switchbad value `%s' for -mcpu switchbad value `%s' for -mfp-rounding-mode switchbad value `%s' for -mfp-trap-mode switchbad value `%s' for -mmemory-latencybad value `%s' for -mtrap-precision switchbad value constant type %d, index %dbad value for -mcall-%sbad value for -msdata=%sbad zip/jar file %sbadly formed directive -- no closing quotebadly nested C headers from preprocessorbadly punctuated parameter list in #definebase `%T' with only non-default constructor in class without a constructorbase class `%#T' has a non-virtual destructorbase class `%#T' should be explicitly initialized in the copy constructorbase class `%T' already initializedbase class `%T' has cv qualifiersbase class `%T' has incomplete typebase initializer for `%T'base initializers for `%#T'base object `%E' of scoped method call is of non-aggregate type `%T'base operand of `->' has non-pointer type `%T'base operand of `->' is not a pointerbase type `%T' fails to be a struct or class typebasic block %d pred edge is corruptedbasic block %i edge lists are corruptedbasic blocks not numbered consecutivelybit-field `%#D' with non-integral typebit-field `%D' width not an integer constantbit-field `%s' has invalid typebit-field `%s' type invalid in ISO Cbit-field `%s' width not an integer constantblock_num = %ld, num_blocks = %d + bogus JARL construction: %d + bogus JR construction: %d + boolean registers required for the floating-point optionboth 'f' and 'l' suffixes on floating constantboth long and short specified for `%s'both signed and unsigned specified for `%s'braced-group within expression allowed only inside a functionbraces around scalar initializerbraces around scalar initializer for `%T'branch %d never executed + branch %d taken = %s + branch %d taken = %s%% + break statement not within loop or switchbuilt-in function `%s' declared as non-functionbuilt-in function `%s' not currently supportedc4x_address_cost: Invalid addressing modec4x_operand_subword: address not offsettablec4x_operand_subword: invalid addressc4x_operand_subword: invalid autoincrementc4x_operand_subword: invalid modec4x_operand_subword: invalid operandc4x_print_operand: %%L inconsistencyc4x_print_operand: %%N inconsistencyc4x_print_operand: %%O inconsistencyc4x_print_operand: Bad operand casec4x_print_operand_address: Bad operand casec4x_print_operand_address: Bad post_modifyc4x_print_operand_address: Bad pre_modifyc4x_rptb_insert: Cannot find start labelc4x_rptb_rpts_p: Repeat block top label moved + c4x_valid_operands: Internal errorcall %d never executed + call %d returns = %s + call %d returns = %s%% + call of `(%T) (%A)' is ambiguouscall of overloaded `%D(%A)' is ambiguouscall to Java `catch' or `throw' with `jthrowable' undefinedcall to Java constructor with `%s' undefinedcall to Java constructor, while `jclass' undefinedcall-clobbered register used for global register variablecalled from herecalled object is not a functioncalling type `%T' like a methodcan not handle inconsistent calls to `%s'can only use `%s' attribute on file-scope definitions of objects of class typecan't access imaginary part of complex value in hard registercan't access real part of complex value in hard registercan't close %scan't close input file %scan't close temp filecan't convert between vector values of different sizecan't convert from incomplete type `%T' to `%T'can't convert value to a vectorcan't create directory %scan't create repository information file `%s'can't define friend function `%s' in a local class definitioncan't do dependency tracking with input from stdincan't expand %scan't find a register in class `%s' while reloading `asm'can't find class$can't get current directorycan't have varargs with -mfp-arg-in-fp-regscan't initialize friend function `%s'can't inline call to `%s'can't make `%D' into a method -- not in a classcan't mangle %scan't open %scan't open %s for writingcan't open output file `%s'can't read from temp filecan't redefine default return value for constructorscan't reopen %scan't rewind temp filecan't set `%s' attribute after definitioncan't specify `-D' without `--main' + can't use '%s' as a %s registercan't write to output filecandidate%s: %+#Dcannot %s a pointer to incomplete type `%T'cannot allocate an object of type `%T'cannot apply member pointer `%E' to `%E', which is of non-aggregate type `%T'cannot call destructor `%T::~%T' without objectcannot call member function `%D' without objectcannot convert `%E' from type `%T' to type `%T'cannot convert `%T' to `%T' for argument `%P' to `%D'cannot convert `%T' to `%T' in %scannot convert from base `%T' to derived type `%T' via virtual base `%T'cannot convert to a pointer typecannot convert type `%T' to type `%T'cannot create pointer to reference member `%D'cannot create temporary filecannot create type information for type `%T' because its size is variablecannot declare %s to referencescannot declare `%D' to be a bit-field typecannot declare `::main' to be a templatecannot declare `::main' to be inlinecannot declare `::main' to be staticcannot declare bit-field `%D' with function typecannot declare field `%D' to be of type `%T'cannot declare member `%T::%s' within `%T'cannot declare member function `%D' to have static linkagecannot declare member function `%T::%s' within `%T'cannot declare parameter `%D' to be of type `%T'cannot declare pointer to `%#T' membercannot declare pointers to referencescannot declare references to referencescannot declare static function inside another functioncannot declare variable `%D' to be of type `%T'cannot delete a function. Only pointer-to-objects are valid arguments to `delete'cannot disable built-in function `%s'cannot do z-register replacementcannot dynamic_cast `%E' (of type `%#T') to type `%#T' (%s)cannot explicitly declare member `%#D' to have extern linkagecannot find `%s'cannot find `ldd'cannot find `nm'cannot find class (factory) methodcannot find class `%s'cannot find file for class %scannot find interface declaration for `%s'cannot find interface declaration for `%s', superclass of `%s'cannot find methodcannot find protocol declaration for `%s'cannot find reference tag for class `%s'cannot find source %scannot initialize `%D' to namespace `%D'cannot initialize `%T' from `%T'cannot initialize arrays using this syntaxcannot initialize multi-dimensional array with initializercannot inline function `main'cannot optimize division for both latency and throughputcannot pass objects of non-POD type `%#T' through `...'cannot put object with volatile field into registercannot receive objects of non-POD type `%#T' through `...'cannot reload integer constant operand in `asm'cannot resolve overloaded function `%D' based on conversion to type `%T'cannot return from a handler of a function-try-block of a constructorcannot set interrupt attribute: no current functioncannot set interrupt attribute: no such identifiercannot specify -o with -c or -S and multiple compilationscannot specify `main' class when not linkingcannot specify both -C and -ocannot take address of bit-field `%s'cannot take the address of `this', which is an rvalue expressioncannot use `::' in parameter declarationcannot use typeid with -fno-rtticannot use va_start in interrupt functioncase label `%E' not within a switch statementcase label does not reduce to an integer constantcase label not within a switch statementcase value `%ld' not in enumerated typecase value `%ld' not in enumerated type `%s'cast adds new qualifiers to function typecast discards qualifiers from pointer target typecast does not match function typecast from `%T' to `%T' discards qualifiers from pointer target typecast from `%T' to `%T' increases required alignment of target typecast from pointer to integer of different sizecast increases required alignment of target typecast specifies array typecast specifies function typecast to non-reference type used as lvaluecast to pointer from integer of different sizecast to union type from type not present in unioncasting `%T' to `%T' does not dereference pointercccp error: invalid special hash typechanges meaning of `%D' from `%+#D'changing search order for system directory "%s"char-array initialized from wide stringcharacter constant too longchoose either big or little endian, not bothchoose either m340 or m210 not bothchoosing `%D' over `%D'circular dependency in default args of `%#D'circular inheritance in interface declaration for `%s'circular pointer delegation detectedclass '%s' has no method named '%s' matching signature '%s'class `%T' does not have any field named `%D'class `%T' is implicitly friends with itselfclass `%s' already existsclass `%s' does not implement the `%s' protocolclose %dclose %scode model %s not supported in PIC modecode model `%s' not supported in the %s bit modecode model `large' not supported yetcollect2 version %scollect: reading %s + collect: recompiling %s + collect: relinking + collect: tweaking %s in %s + comma at end of enumerator listcomma expression used to initialize return valuecomma operator in operand of #ifcomparing floating point with == or != is unsafecomparison between `%#T' and `%#T'comparison between pointer and integercomparison between signed and unsignedcomparison between signed and unsigned integer expressionscomparison between types `%#T' and `%#T'comparison is always %dcomparison is always %d due to width of bit-fieldcomparison is always false due to limited range of data typecomparison is always true due to limited range of data typecomparison of complete and incomplete pointerscomparison of distinct pointer types lacks a castcomparison of promoted ~unsigned with constantcomparison of promoted ~unsigned with unsignedcomparison of unsigned expression < 0 is always falsecomparison of unsigned expression >= 0 is always truecomparisons like X<=Y<=Z do not have their mathematical meaningcompilation of header file requestedcompilation terminated. + complex integer constant is too wide for 'complex int'complex invalid for `%s'concatenation of string literals with __FUNCTION__ is deprecated. This feature will be removed in futureconfiguration: REAL, INTEGER, and LOGICAL are %d bits wide,configuration: char * holds %d bits, but INTEGER only %d -- + ASSIGN statement might failconfiguration: char * holds %d bits, but ftnlen only %dconflicting access specifications for field `%s', ignoredconflicting access specifications for method `%D', ignoredconflicting architectures defined - using C seriesconflicting architectures defined - using K seriesconflicting declarations of `%s'conflicting return type specified for `%#D'conflicting super class name `%s'conflicting types for `%#D'conflicting types for `%s'conflicting types for built-in function `%s'conflicts with built-in declaration `%#D'conflicts with function declaration `%#D'conflicts with new declaration with %L linkageconflicts with previous declaration `%#D'const `%s' cannot be declared `mutable'const declaration for `%s' follows non-constconst objects cannot go in .sdata/.sbssconst_double_split got a bad insn:constructor cannot be static member functionconstructor for alien class `%T' cannot be a memberconstructor syntax used, but no constructor declared for type `%T'constructors cannot be declared virtualconstructors may not be `%s'continue statement not within a loopcontrol reaches end of non-void functionconversion from NaN to intconversion from NaN to unsigned intconversion from `%#T' to `%#T'conversion from `%T' to `%T' discards qualifiersconversion from `%T' to `%T' is ambiguousconversion from `%T' to non-scalar type `%T' requestedconversion lacks type at end of formatconversion of `%E' from `%T' to `%T' is ambiguousconversion to %s%s will never use a type conversion operatorconversion to incomplete typeconversion to non-scalar type requestedconverting NULL to non-pointer typeconverting from `%T' to `%T'converting overloaded function `%D' to type `%#T' is ambiguouscorrupted profile info: prob for %d-%d thought to be %dcould not convert 0x%l.8x into a regioncould not convert `%E' to `%T'could not convert template argument `%E' to `%T'could not find a spill registercould not find class$ field in java interface type `%T'could not find specs file %s + could not open dump file `%s'could not split insncouldn't determine target name for dependency trackingcreating %screating array of `%T'creating array with size zerocreating array with size zero (`%E')creating pointer to member function of non-class type `%T'creating pointer to member of non-class type `%T'creating pointer to member reference type `%T'crossjump disabled: %d > 1000 basic blocks and %d >= 20 edges/basic blockcurrent file is older than %sd30v_emit_comparisondata area of '%s' conflicts with previous declarationdata definition has no type or storage classdata initializer on host with different endiannessdata member `%D' cannot be a member templatedata type of `%s' isn't suitable for a registerdecimal constant is so large that it is unsigneddecimal point in exponent - impossible!declaration does not declare anythingdeclaration for parameter `%s' but no such parameterdeclaration of C function `%#D' conflicts withdeclaration of `%#D'declaration of `%#D' has `extern' and is initializeddeclaration of `%#D' outside of class is not definitiondeclaration of `%#D' shadows a parameterdeclaration of `%D' as %sdeclaration of `%D' as multidimensional array must have bounds for all dimensions except the firstdeclaration of `%D' as non-functiondeclaration of `%D' not in a namespace surrounding `%D'declaration of `%F' throws different exceptionsdeclaration of `%s' as array of functionsdeclaration of `%s' as array of voidsdeclaration of `%s' has `extern' and is initializeddeclaration of `%s' shadows %sdeclaration of `%s' shadows a member of `this'declaration of `%s' shadows a parameterdeclaration of `%s' shadows a symbol from the parameter listdeclaration of `extern' variable `%s' in `for' loop initial declarationdeclaration of non-variable `%s' in `for' loop initial declarationdeclaration of static variable `%s' in `for' loop initial declarationdeclaration of template `%#D'declarator-id missing; using reserved word `%D'decrement of pointer to unknown structuredefault argument `%E' uses local variable `%D'default argument for `%#D' has type `%T'default argument for parameter of type `%T' has type `%T'default argument given for parameter %d of `%#D'default argument missing for parameter %P of `%+#D'default argument specified in explicit specializationdefault arguments are not allowed in declaration of friend template specialization `%D'default-initialization of `%#D', which has reference typedefining explicit specialization `%D' in friend declarationdefinition of `%#T' inside template parameter listdefinition of array `%#D' in conditiondefinition of class `%T' in conditiondefinition of enum `%T' in conditiondefinition of implicitly-declared `%D'definition provided for explicit instantiationdeleting `%T' is undefineddeleting array `%#D'deprecated conversion from string constant to `%T'deprecated use of label at end of compound statementdereferencing `void *' pointerdereferencing pointer to incomplete typederived union `%T' invaliddestructor `%T' must match class name `%T'destructor cannot be static member functiondestructor for alien class `%T' cannot be a memberdestructor name `~%T' does not match type `%T' of expressiondestructor needed for `%#D'destructor specifier `%T::~%T' must have matching namesdestructor specifier `%T::~%T()' must have matching namesdestructors may not be `%s'destructors may not have parametersdestructors must be member functionsdestructors take no parametersdidn't use all bb entries of graph, function %s + different typedirect base `%T' inaccessible in `%T' due to ambiguitydirectives may not be used inside a macro argumentdirectory name missing after %sdirectory name missing after -I optiondirectory name must immediately follow -Idivision by zerodivision by zero in #ifdivision by zero in `%E %% 0'division by zero in `%E %% 0.'division by zero in `%E / 0'division by zero in `%E / 0.'double quoted strings not allowed in #if expressionsdue to non-public access of member `%D'due to the presence of a constructordup2 %d 1duplicate (or overlapping) case valueduplicate ConstantValue attribute for field '%s'duplicate `%s'duplicate `const'duplicate `restrict'duplicate `volatile'duplicate asm operand name '%s'duplicate base type `%T' invalidduplicate case valueduplicate declaration for protocol `%s'duplicate declaration of class method `%s'duplicate declaration of instance method `%s'duplicate definition of class method `%s'duplicate definition of instance method `%s'duplicate enum value `%D'duplicate explicit instantiation of `%#D'duplicate explicit instantiation of `%#T'duplicate field `%D' (as enum and non-enum)duplicate field `%D' (as type and non-type)duplicate initialization of %Dduplicate interface declaration for category `%s(%s)'duplicate interface declaration for class `%s'duplicate label `%D'duplicate label declaration `%s'duplicate macro parameter "%s"duplicate member `%D'duplicate member `%s'duplicate nested type `%D'duplicate type qualifiers in %s declarationdynamic dependencies. + dynamic dependency %s not founddynamic_cast of `%#D' to `%#T' can never succeedelements of array `%#D' have incomplete typeelements of array `%s' have incomplete typeembedded `\0' in formatemitting PIC operand, but PIC register isn't set upempty #if expressionempty body in an else-statementempty character constantempty declarationempty file name in #%sempty index range in initializerempty left precision in %s formatempty precision in %s formatempty range specifiedempty scalar initializerenabling backtrace support is only meaningful when compiling for the Thumbenabling callee interworking support is only meaningful when compiling for the Thumbenabling caller interworking support is only meaningful when compiling for the Thumbenclosing class templates are not explicitly specializedend insn %d for block %d not found in the insn streamenum defined inside parmsenumeral and non-enumeral type in conditional expressionenumeral mismatch in conditional expression: `%T' vs `%T'enumeration value `%s' not handled in switchenumeration values exceed range of largest integerenumerator value for `%D' not integer constantenumerator value for `%s' not integer constantenvironment variable DJGPP not definedenvironment variable DJGPP points to corrupt file '%s'environment variable DJGPP points to missing file '%s'error closing %serror in constant pool entry #%d + error while parsing constant poolerror while parsing fieldserror while parsing final attributeserror while parsing methodserror writing to %sescape sequence out of range for characterexception handling disabled, use -fexceptions to enableexception of type `%T' will be caughtexcess elements in aggregate initializerexcess elements in array initializerexcess elements in char array initializerexcess elements in scalar initializerexcess elements in struct initializerexcess elements in union initializerexcess elements in vector initializerexecv %sexecvp %sexpected %d levels of template parms for `%#D', got %dexplicit instantiation of `%#D'explicit instantiation of `%#D' afterexplicit instantiation of `%#T' afterexplicit instantiation of `%#T' before definition of templateexplicit instantiation of `%D' but no definition availableexplicit instantiation of non-template `%#D'explicit instantiation of non-template type `%T'explicit specialization hereexplicit specialization in non-namespace scope `%D'explicit specialization not preceded by `template <>'explicit specialization of %D after first useexplicit specialization of non-template `%T'expression '%E' of abstract class type '%T' cannot be used in throw-expressionexpression statement has incomplete typeextended registers have no high halvesextern declaration of `%#D' doesn't matchextern declaration of `%s' doesn't match global oneextra brace group at end of initializerextra elements in scalar initializerextra qualification `%T::' on member `%D' ignoredextra qualification `%T::' on member `%s' ignoredextra semicolon in struct or union specifiedextra text at end of directiveextra tokens at end of #%s directiveextra type qualifiers in format argument (arg %d)extraneous `%T' ignoredextraneous argument to `%s' optionf2c-compatible code need not be generatedfailed to find class '%s'fatal:fclosefclose %sfdopenfield '%s' not found in classfield `%#D' is static; the only point of initialization is its definitionfield `%#D' with same name as classfield `%D' declared static in unionfield `%D' has incomplete typefield `%D' in local class cannot be staticfield `%D' invalidly declared function typefield `%D' invalidly declared method typefield `%D' invalidly declared offset typefield `%s' declared as a functionfield `%s' has incomplete typefield `%s' not foundfield initializer is not constantfield initializer type mismatchfield name not in record or union initializerfield precisionfield widthfield width in printf formatfield width in scanf formatfield width in strfmon formatfield width in strftime formatfile %s not found, execution counts assumed to be zerofile name missing after %sfile not found `%s'filename missing after %s optionfilename missing after -i optionfilename missing after -o optionfill characterfill character in strfmon formatfinal field '%s' may not have been initializedfini function found in object %sfirst argument of `%s' should be `int'first argument to __builtin_choose_expr not a constantfirst argument to `va_arg' not of type `va_list'fix_sched_param: unknown param: %sflexible array member in otherwise empty structflexible array member in unionflexible array member not at end of structfloating constant exponent has no digitsfloating constant may not be in radix 16floating constant misusedfloating constant out of rangefloating point constant not a valid immediate operandfloating point number exceeds range of '%s'floating point number exceeds range of 'double'floating point numbers are not valid in #iffloating point numbers not allowed in #if expressionsfloating point overflowfloating point overflow in expressionflow control insn inside a basic blockfollows non-prototype definition herefopen %sfor each function it appears in.)for template declaration `%D'format argument %d unused before used argument %d in $-style formatformat argument %d used more than once in %s formatformat argument is not a pointer (arg %d)format argument is not a pointer to a pointer (arg %d)format is a wide character stringformat not a string literal and no format argumentsformat not a string literal, argument types not checkedformat not a string literal, format string not checkedformat string arg follows the args to be formattedformat string arg not a string typeformat string has invalid operand numberforming %s to reference type `%T'forming reference to voidforward declaration of `%#T'fp software completion requires -mtrap-precision=ifp_offset (%ld) or end_offset (%ld) is less than zerofr30_print_operand: invalid %%F codefr30_print_operand: invalid %%x codefr30_print_operand: invalid operand to %%A codefr30_print_operand: unhandled MEMfr30_print_operand: unknown codefr30_print_operand: unrecognized %%B codefr30_print_operand: unrecognized %%b codefr30_print_operand: unrecognized %%p codefr30_print_operand_address: unhandled addressframe size too large for reliable stack checkingfriend declaration `%#D' declares a non-template functionfriend declaration not in class definitionfriend declaration requires class-key, i.e. `friend %#T'friend declaration requires class-key, i.e. `friend class %T::%T'fstat %sfunction `%#D' is initialized like a variablefunction `%D' cannot be declared friendfunction `%D' declared overloaded, but no definitions appear with which to resolve it?!?function `%D' declared virtual inside a unionfunction `%s' cannot be declared `mutable'function `%s' is initialized like a variablefunction `%s' redeclared as inlinefunction `%s' redeclared with attribute noinlinefunction `%s' was previously declared within a blockfunction body for constructor missingfunction call has aggregate valuefunction cannot be inlinefunction declaration isn't a prototypefunction declared `noreturn' has a `return' statementfunction definition declared `auto'function definition declared `register'function definition declared `typedef'function does not return string typefunction might be possible candidate for `%s' format attributefunction might be possible candidate for attribute `noreturn'function return type cannot be functionfunction returns address of local variablefunction returns an aggregatefunction too large to be inlinefunction types not truly compatible in ISO Cfunction uses __builtin_eh_returnfunction using alloca cannot be inlinefunction using setjmp cannot be inlinefunction using short complex types cannot be inlinefunction with computed jump cannot inlinefunction with label addresses used in initializers cannot inlinefunction with nested functions cannot be inlinefunction with nonlocal goto cannot be inlinefunction with target specific attribute(s) cannot be inlinedfunction with transparent unit parameter cannot be inlinefunction with varying-size parameter cannot be inlinefunction with varying-size return value cannot be inlinefunction-like macro "%s" must be used with arguments in traditional Cfunction_profiler support for MMIXgcc driver version %s executing gcc version %s + gcc version %s + gcov (GCC) %s + generate RP codegeneric thunk code fails for method `%#D' which uses `...'global declaration `%#D'global register variable `%s' used in nested functionglobal register variable follows a function definitionglobal register variable has initial valuegot %d template parameters for `%#D'got %d template parameters for `%#T'gp is constant (but save/restore gp on indirect calls)gp_offset (%ld) or end_offset (%ld) is less than zerohalf-pic init called on systems that don't support ithead insn %d for block %d not found in the insn streamhex character constant does not fit in a bytehex escape out of rangehex escape sequence out of rangehexadecimal floating constant has no exponentiC2.0 and iC3.0 are incompatible - using iC3.0ia64_print_operand: unknown codeidentifier name `%s' conflicts with GNU C++ internal naming strategyignoring #pragma %signoring #pragma %s %signoring `%V' qualifiers on `%T'ignoring asm-specifier for non-static local variable `%s'ignoring command line option '%s'ignoring duplicate directory "%s" + ignoring extra initializers for `%T'ignoring invalid multibyte characterignoring nonexistent directory "%s" + ignoring option `%s' due to invalid debug level specificationignoring pragma: %signoring unknown option `%.*s' in `-f%s'illegal pointer to bit-field `%D'implementation-reserved name `%D' usedimplicit declaration of function `%#D'implicit declaration of function `%s'implicitly popped regs must be grouped at top of stackimpossible operator '%s'impossible register constraint in `asm'in basic block %d:in declaration `%D'in passing argument %P of `%+D'incompatibilities between object file & expected valuesincompatible interworking optionsincompatible type for argument %d of `%s'incompatible type for argument %d of indirect function callincompatible types in %sincompatible types in assignment of `%T' to `%T'incomplete `%s' optionincomplete implementation of category `%s'incomplete implementation of class `%s'incomplete type `%T' does not have member `%D'incomplete type unificationincomplete universal-character-nameinconsistent instance variable specificationinconsistent operand constraints in an `asm'incorrect insn:increment of pointer to unknown structureindex value instead of field name in union initializerinit function found in object %sinitializationinitialization designators may not nestinitialization of a flexible array memberinitialization of flexible array member in a nested contextinitializations for multiple members of `%T'initialized field with side-effects overwritteninitialized variable `%s' is marked dllimportinitializer element is not computable at load timeinitializer element is not constantinitializer ends prematurelyinitializer fails to determine size of `%D'initializer fails to determine size of `%s'initializer for floating value is not a floating constantinitializer for integer value is too complicatedinitializer for scalar variable requires one elementinitializer for static variable is not constantinitializer for static variable uses complicated arithmeticinitializer invalid for static member with constructorinitializer list being treated as compound expressioninitializer list construction invalid for `%D'initializer list construction invalid for derived class object `%D'initializer list construction invalid for polymorphic class object `%D'initializer list for object of class with base classesinitializer list for object of class with virtual base classesinitializer list for object using virtual functionsinitializer list treated as compound expressioninitializer specified for non-member function `%D'initializer specified for non-virtual method `%D'initializer-string for array of chars is too longinitializing array with parameter listinline float constants not supported on this hostinline function `%s' given attribute noinlineinline functions not supported for this return value typeinlining failed in call to `%s'input operand constraint contains `%c'insn %d inside basic block %d but block_for_insn is %iinsn %d inside basic block %d but block_for_insn is NULLinsn %d is in multiple basic blocks (%d and %d)insn does not satisfy its constraints:insn outside basic blockinstall: %s%s + instance variable `%s' accessed in class methodinstance variable `%s' is declared %sinstance variable `%s' is declared privateinstantiation of `%D' as type `%T'instruction scheduling not supported on this target machineinsufficient contextual information to determine typeint-array initialized from non-wide stringinteger constant contains digits beyond the radixinteger constant is larger than the maximum value for its typeinteger constant is so large that it is unsignedinteger constant is too large for this configuration of the compiler - truncated to %d bitsinteger constant is unsigned in ISO C, signed with -traditionalinteger constant larger than the maximum value of %sinteger constant out of rangeinteger overflow in expressioninteger overflow in preprocessor expressioninternal compiler error. Bad address:internal compiler error. Incorrect shift:internal compiler error. Unknown mode:internal errorinternal error - invalid Utf8 nameinternal error - too many interface typeinternal error - use of undefined typeinternal error in %s, at tradcpp.c:%d + Please submit a full bug report. + See %s for instructions.internal error in check-init: tree code not implemented: %sinternal error in generate_bytecode_insn - tree code not implemented: %sinternal error--no jump follows compare:internal error: internal error: %%) found without a %%( in assembler patterninternal error: %%> found without a %%< in assembler patterninternal error: %%] found without a %%[ in assembler patterninternal error: %%} found without a %%{ in assembler patterninternal error: %sinternal error: bad register: %dinternal error: cris_side_effect_mode_ok with bad operandsinternal error: sideeffect-insn affecting main effectinternal gcc abortinternal gcc error: Can't express symbolic locationinternal gcc monitor: short-branch(%x)internal regno botch: regno = %d + interrupt Service Routines cannot be coded in Thumb modeinterworking forces APCS-32 to be usedinvalid #-lineinvalid #identinvalid #ident directiveinvalid #lineinvalid #pragma %sinvalid #pragma GCC poison directiveinvalid %%-codeinvalid %%A operandinvalid %%B operandinvalid %%B valueinvalid %%C operandinvalid %%C valueinvalid %%D operandinvalid %%D valueinvalid %%E valueinvalid %%F valueinvalid %%G valueinvalid %%H valueinvalid %%J codeinvalid %%J valueinvalid %%K valueinvalid %%L valueinvalid %%M valueinvalid %%N valueinvalid %%O valueinvalid %%P operandinvalid %%P valueinvalid %%Q valueinvalid %%R valueinvalid %%S valueinvalid %%T valueinvalid %%U valueinvalid %%V valueinvalid %%Y operandinvalid %%Z valueinvalid %%b valueinvalid %%c operandinvalid %%d operandinvalid %%f operandinvalid %%f valueinvalid %%h valueinvalid %%j codeinvalid %%j valueinvalid %%k valueinvalid %%m valueinvalid %%o valueinvalid %%p valueinvalid %%q valueinvalid %%r valueinvalid %%s valueinvalid %%s/S valueinvalid %%u valueinvalid %%v valueinvalid %%x/X valueinvalid %%xn codeinvalid %%z valueinvalid --param option: %sinvalid PC in line number tableinvalid UNSPEC as operandinvalid UNSPEC as operand (1)invalid UNSPEC as operand (2)invalid Z register replacement for insninvalid `asm': invalid addressinvalid addressing modeinvalid arg to `__builtin_frame_address'invalid arg to `__builtin_return_address'invalid argument of `%s' attributeinvalid built-in macro "%s"invalid call to member function needing `this' in static member function scopeinvalid cast to function type `%T'invalid catch parameterinvalid character '%c' in #ifinvalid character '\%03o' in #ifinvalid character constant in #ifinvalid codeinvalid const_cast from type `%T' to type `%T'invalid const_cast of an rvalue of type `%T' to type `%T'invalid constructor; you probably meant `%T (const %T&)'invalid conversion from `%T' to `%T'invalid conversion to type `%T' from type `%T'invalid covariant return type for `%#D'invalid data member initializationinvalid declaration of member template `%#D' in local classinvalid declaratorinvalid default template argumentinvalid definition of qualified type `%T'invalid expression as operandinvalid flag "%s" in line directiveinvalid floating point emulation option: -mfpe-%sinvalid format #line commandinvalid hash type %d in cpp_macro_definitioninvalid in-class initialization of static data member of non-integral type `%T'invalid indirect (S) memory addressinvalid indirect memory addressinvalid initial value for member `%s'invalid initializerinvalid initializer for bit stringinvalid initializer for virtual method `%D'invalid insn:invalid integer constant in parameter list, did you forget to give parameter name?invalid lvalue in asm statementinvalid lvalue in assignmentinvalid lvalue in unary `&'invalid macro nameinvalid macro name `%s'invalid maskinvalid member template declaration `%D'invalid mode for gen_tst_reginvalid mode for integer comparison in gen_compare_reginvalid number in #if expressioninvalid offset in ybase addressinginvalid offsetof from non-POD type `%#T'; use pointer to member insteadinvalid operand code `%c'invalid operand for 'A' modifierinvalid operand for 'D' modifierinvalid operand for 'H' modifierinvalid operand for 'P' modifierinvalid operand for 'T' modifierinvalid operand for 'b' modifierinvalid operand for 'e' modifierinvalid operand for 'm' modifierinvalid operand for 'p' modifierinvalid operand for 'v' modifierinvalid operand for 'z' modifierinvalid operand in the instructioninvalid operand modifier letterinvalid operand output codeinvalid operand to %%H/%%L codeinvalid operand to %%N codeinvalid operand to %%R codeinvalid operand to %%T/%%B codeinvalid operand to %%U codeinvalid operand to %%V codeinvalid operand to %%p codeinvalid operand to %%s codeinvalid operands of types `%T' and `%T' to binary `%O'invalid operands to binary %sinvalid operation on uninstantiated typeinvalid option %sinvalid option `%s'invalid option `-mshort-data-%s'invalid option `-mstack-increment=%s'invalid option `entry%s'invalid parameter `%s'invalid parameter type `%T'invalid parameter value `%s'invalid preprocessing directive #%sinvalid punctuation `%c' in constraintinvalid qualifiers on non-member function typeinvalid receiver type `%s'invalid redeclaration of `%D'invalid register in the instructioninvalid register in the move instructioninvalid register in ybase addressinginvalid register name `%s' for register variableinvalid register name for `%s'invalid reinterpret_cast from type `%T' to type `%T'invalid reinterpret_cast of an rvalue expression of type `%T' to type `%T'invalid return type for function `%#D'invalid return type for member function `%#D'invalid rotate insninvalid second arg to __builtin_prefetch; using zeroinvalid shift operator in emit_1600_core_shiftinvalid specification! Bug in ccinvalid static_cast from type `%T' to type `%T'invalid storage class for function `%s'invalid string constant `%E'invalid string literal, ignoring final '\'invalid suffix '%.*s' on integer constantinvalid suffix on floating constantinvalid suffix on integer constantinvalid third arg to __builtin_prefetch; using zeroinvalid token in expressioninvalid truth-value expressioninvalid type `%T' declared `friend'invalid type `%T' for default argument to `%T'invalid type `void' for newinvalid type argumentinvalid type argument of `%s'invalid type modifier within array declaratorinvalid type modifier within pointer declaratorinvalid type qualifier for non-member function typeinvalid type: `void &'invalid types `%T[%T]' for array subscriptinvalid use of %%d, %%x, or %%Xinvalid use of `%D'invalid use of `%T'invalid use of `%s' on pointer to memberinvalid use of `--' on bool variable `%D'invalid use of `::'invalid use of `restrict'invalid use of `this' at top levelinvalid use of `this' in non-member functioninvalid use of `virtual' in template declaration of `%#D'invalid use of a pointer to an incomplete type in pointer arithmeticinvalid use of array with unspecified boundsinvalid use of const_cast with type `%T', which is a pointer or reference to a function typeinvalid use of const_cast with type `%T', which is not a pointer, reference, nor a pointer-to-data-member typeinvalid use of flexible array memberinvalid use of incomplete typedef `%s'invalid use of member (did you forget the `&' ?)invalid use of member `%D'invalid use of member `%D' in static member functioninvalid use of non-lvalue arrayinvalid use of non-static field `%D'invalid use of template `%#D' as expressioninvalid use of template type parameterinvalid use of template-id `%D' in declaration of primary templateinvalid use of type decl `%#D' as expressioninvalid use of undefined type `%#T'invalid use of undefined type `%s %s'invalid use of void expressioninvalid vector type for attribute `%s'invalid version number formatinvoke[non-static] on static methodinvokestatic on abstract methodinvokestatic on non static methodit must be a pointer-to-member of the form `&X::Y'it must be the address of a function with external linkageit must be the address of an object with external linkageits scope is only this definition or declaration, which is probably not what you wantjump to `%s' invalidly jumps into binding contourjump to case labeljump to label `%D'junk at end of #pragma %sjunk at end of #pragma GCC java_exceptionsjunk at end of #pragma extern_prefixjunk at end of #pragma ghs endsdajunk at end of #pragma ghs endtdajunk at end of #pragma ghs endzdajunk at end of #pragma ghs interruptjunk at end of #pragma ghs sectionjunk at end of #pragma ghs startsdajunk at end of #pragma ghs starttdajunk at end of #pragma ghs startzdajunk at end of #pragma mapjunk at end of #pragma redefine_extnamejunk at end of #pragma weakjunk at end of '#pragma %s'junk at end of '#pragma options'junk at end of '#pragma pack'junk at end of '#pragma unused'junk at end of signature stringkeyword `export' not implemented, and will be ignoredlabel %s referenced outside of any functionlabel `%D' defined but not usedlabel `%D' used but not definedlabel `%s' defined but not usedlabel `%s' referenced outside of any functionlabel `%s' used before containing binding contourlabel `%s' used but not definedlabel must be followed by statementlabel named wchar_tlanguage %s not recognizedlanguage string `"%s"' not recognizedlarge frame pointer change (%d) with -mtiny-stacklarge integer implicitly truncated to unsigned typeld returned %d exit statusleft precisionleft precision in strfmon formatleft shift count >= width of typeleft shift count is negativeleft-hand operand of comma expression has no effectlength modifierlength modifier in printf formatlength modifier in scanf formatlength modifier in strfmon formatlibraries: %s + library function `%#D' redeclared as non-function `%#D'library function `%s' declared as non-functionlibrary lib%s not foundline number out of rangelo_sum not of registerload command map, %d cmds, new size %ld. + local class `%#T' shall not have static data member `%#D'local declaration of `%s' hides instance variablelong and short specified together for `%s'long long constant not a valid immediate operandlong or short specified with char for `%s'long or short specified with floating type for `%s'long, short, signed or unsigned invalid for `%s'long, short, signed or unsigned used invalidly for `%s'lookup of `%D' finds `%#D'lookup of `%D' in the scope of `%#T' (`%#D') does not match lookup in the current scope (`%#D')looser throw specifier for `%#F'lseek %s 0macro "%s" passed %u arguments, but takes just %umacro "%s" requires %u arguments, but only %u givenmacro argument "%s" would be stringified with -traditionalmacro name missing after %smacro name missing after -%c optionmacro names must be identifiersmacro or #include recursion too deepmacro parameters must be comma-separatedmaking `%D' staticmalformed #pragma align - ignoredmalformed #pragma extern_prefix, ignoredmalformed #pragma ghs sectionmalformed #pragma map, ignoredmalformed #pragma redefine_extname, ignoredmalformed #pragma weak, ignoredmalformed '#pragma %s' - ignoredmalformed '#pragma options align={mac68k|power|reset}', ignoringmalformed '#pragma options', ignoringmalformed '#pragma pack' - ignoredmalformed '#pragma pack(pop[, id])' - ignoredmalformed '#pragma pack(push[, id], )' - ignoredmalformed .zip archive in CLASSPATH: %smask must be an immediatematching constraint not valid in output operandmatching constraint references invalid operand numbermay not use both -EB and -ELmay not use both -mfp64 and -m4650may not use both -mfp64 and -msingle-floatmay not use both -mgp32 and -mfp64member %#D' with constructor not allowed in anonymous aggregatemember %#D' with copy assignment operator not allowed in anonymous aggregatemember %#D' with destructor not allowed in anonymous aggregatemember `%#D' with constructor not allowed in unionmember `%#D' with copy assignment operator not allowed in unionmember `%#D' with destructor not allowed in unionmember `%D' cannot be declared both virtual and staticmember `%D' conflicts with virtual function table field namemember `%D' declared as friend before type `%T' definedmember `%D' is non-static but referenced as a static membermember `%D' is uninitialized referencemember `%D' with uninitialized const fieldsmember functions are implicitly friends of their classmember initializers for `%#D'member type `%T::' incompatible with object type `%T'membersmethod '%s' not found in classmethod `%s' not implemented by protocolmethod definition for `%c%s' not foundmethod definition not in class contextmips16 function profilingmismatched braces in specsmismatching signature for field '%s' in '%s'misplaced ConstantValue attribute (not in any field)missing $ operand number in formatmissing '(' after '#pragma %s' - ignoredmissing '(' after '#pragma pack' - ignoredmissing '(' after '#pragma unused', ignoringmissing '(' after predicatemissing '(' in expressionmissing ')' after "defined"missing ')' after '#pragma unused', ignoringmissing ')' for '#pragma %s' - ignoredmissing ')' in expressionmissing ')' in macro parameter listmissing ')' to complete answermissing ';' before right bracemissing Code attributemissing argument in `__builtin_args_info'missing argument to `%s' optionmissing barrier after block %imissing binary operatormissing binary operator before '%s'missing braces around initializermissing close brace for named operandmissing field '%s' in '%s'missing fill character at end of strfmon formatmissing function name in '#pragma %s' - ignoredmissing initializermissing initializer for member `%D'missing section name in '#pragma %s' - ignoredmissing static field `%s'missing terminating %c charactermissing terminating > charactermissing type-name in typedef-declarationmissing white space after number '%.*s'mixing C++ and Java catches in a single translation unitmno-cygwin and mno-win32 are not compatiblemode not QImodemodification by `asm'more than %d operands in `asm'more than one 'f' suffix on floating constantmore than one 'i' or 'j' suffix on floating constantmore than one 'i' or 'j' suffix on integer constantmore than one 'l' suffix on floating constantmove insn not handledmsync %smulti-character character constantmulti-line commentmulti-line string literals are deprecatedmultidimensional array must have bounds for all dimensions except the firstmultiple `virtual' specifiersmultiple access specifiersmultiple declarations `%T' and `%T'multiple declarations for method `%s'multiple declarators in template declarationmultiple default labels in one switchmultiple definition of `%#T'multiple fields in union `%T' initializedmultiple initializations given for `%D'multiple initializations given for member `%D'multiple parameters named `%s'multiple storage classes in declaration of `%s'multiple types in one declarationmunmap %smust #include before using typeidmust have at least one catch per try blockmust use .* or ->* to call pointer-to-member function in `%E (...)'mvc&exmvcle usemysterious repository information in %sname `%T' has incomplete typename lookup of `%s' changedname lookup of `%s' changed for new ISO `for' scopingname missing for member functionnamed membersnamespace `%D' not allowed in using-declarationnamespace `%T' undeclarednamespace alias `%D' not allowed here, assuming `%D'namespace-scope anonymous aggregates must be staticnegative insn lengthnegative integer implicitly converted to unsigned typenegative width in bit-field `%D'negative width in bit-field `%s'neither varargs or stdarg in mmix_setup_incoming_varargsnested assembly dialect alternativesnested extern declaration of `%s'nested function `%s' declared `extern'nested redefinition of `%s'new cannot be applied to a function typenew cannot be applied to a reference typenew declaration `%#D'new of array type fails to specify sizeno FUNCTION_PROFILER for CRISno INTEGER type can hold a pointer on this configurationno `%#D' member function declared in class `%T'no `%D(int)' declared for postfix `%s', trying prefix operator insteadno args to macro `%s'no argumentsno base or member initializers given following ':'no bases given following `:'no body nor ';' separates two class, struct or union declarationsno class name specified as argument to -fconstant-string-classno class template named `%#T' in `%#T'no closing `]' for `%%[' formatno cmd_strings foundno data type for mode `%s'no default argument for `%D'no description yetno field `%D' in union being initializedno include path in which to find %.*sno include path in which to find %sno input file specifiedno input filesno input files; unwilling to write output filesno low registers available for popping high registersno macro name given in #%s directiveno match for call to `(%T) (%A)'no matches converting function `%D' to type `%#T'no matching function for call to `%D(%A)'no matching function for call to `%T::%D(%A)%#V'no matching template for `%D' foundno member function `%D' declared in `%T'no members matching `%D' in `%#T'no method `%T::%D'no newline at end of fileno previous declaration for `%s'no previous prototype for `%s'no prototype, and parameter address used; cannot be inlineno register in addressno return statement in function returning non-voidno sclass for %s stab (0x%x) + no semicolon at end of struct or unionno suitable `operator delete' for `%T'no super class declared in interface for `%s'no symbol table foundno type `%D' in `%T'no type named `%#T' in `%#T'no unique final overrider for `%D' in `%T'no vector mode with the size and type specified could be foundno viable candidatesnon-ANSI-standard escape sequence, `\%c'non-ISO escape sequence `\%c'non-ISO-standard escape sequence, '\%c'non-constant `%E' cannot be used as template argumentnon-empty initializer for array of empty elementsnon-hex digit '%c' in universal-character-namenon-local function `%#D' uses anonymous typenon-local function `%#D' uses local type `%T'non-local variable `%#D' uses local type `%T'non-lvalue in %snon-member `%s' cannot be declared `mutable'non-object member `%s' cannot be declared `mutable'non-prototype definition herenon-static const member `%#D' in class without a constructornon-static const member `%#D', can't use default assignment operatornon-static declaration for `%s' follows staticnon-static initialization of a flexible array membernon-static method '%s' overrides static methodnon-static reference `%#D' in class without a constructornon-static reference member `%#D', can't use default assignment operatornon-template type `%T' used as a templatenon-template used as templatenon-trivial labeled initializersnonconstant array index in initializernot a static field `%s'not a valid Java .class filenot enough type informationnot found + not in any file?!note:null character(s) ignorednull character(s) preserved in literalnull format stringnumber missing after %snumber of arguments doesn't match prototypenumber of bb notes in insn chain (%d) != n_basic_blocks (%d)numeric constant contains digits beyond the radixnumeric constant with no digitsobject `%E' cannot be used as template argumentobject `%E' of incomplete type `%T' will not be accessed in %sobject does not conform to the `%s' protocolobject missing in `%E'object missing in call to method `%D'object missing in use of pointer-to-member constructobject of incomplete type `%T' will not be accessed in %sobject of type `%T' will not be accessed in %sobsolete use of designated initializer with `:'obsolete use of designated initializer without `='octal character constant does not fit in a byteoctal escape sequence out of rangeoffset outside bounds of constant stringold raw header fileold style placement syntax, use () insteadonly %d args to macro `%s'only 1 arg to macro `%s'only constructors take base initializersonly declarations of constructors can be `explicit'only initialized variables can be placed into program memory areaonly one of `--print-main', `--list-class', and `--complexity' allowedonly weak aliases are supported in this configurationoops, not debugged; fixing up value:open %soperand 1 must be a hard registeroperand constraint contains incorrectly positioned '+' or '='operand constraints for `asm' differ in number of alternativesoperand is const_doubleoperand is neither a constant nor a condition code, invalid operand code 'c'operand is r0operand number missing after %%-letteroperand number out of rangeoperand number out of range in formatoperand number specified for format taking no argumentoperand number specified with suppressed assignmentoperands to ?: have different typesoperation on `%s' may be undefinedoperator "defined" requires an identifieroperator '%s' has no left operandoperator '%s' has no right operandoperator `%T' declared to return `%T'optimization level restoredoptimization turned offoptimization turned onoptions -mabi=mmixware and -mabi=gnu are mutually exclusiveoptions enabled: options passed: ordered comparison of pointer with integer zerooutput constraint %d cannot be specified together with "%s" clobberoutput constraint %d must specify a single registeroutput constraint `%c' for operand %d is not at the beginningoutput filename specified twiceoutput number %d not directly addressableoutput operand %d must use `&' constraintoutput operand constraint lacks `='output operand is constant in `asm'output regs must be grouped at top of stackoutput_move_single:overflow in array dimensionoverflow in constant expressionoverflow in enumeration valuesoverflow in enumeration values at `%D'overflow in implicit constant conversionoverflow on truncation to integeroverflow on truncation to unsigned integeroverflowed output arg list for `%s'overloaded function with no contextual type informationpacked attribute causes inefficient alignmentpacked attribute causes inefficient alignment for `%s'packed attribute is unnecessarypacked attribute is unnecessary for `%s'padding struct size to alignment boundarypadding struct to align `%s'parameter `%D' declared voidparameter `%D' includes %s to array of unknown bound `%T'parameter `%D' invalidly declared method typeparameter `%D' invalidly declared offset typeparameter `%s' declared voidparameter `%s' has incomplete typeparameter `%s' has just a forward declarationparameter `%s' is initializedparameter `%s' points to incomplete typeparameter has incomplete typeparameter name missingparameter name missing from parameter listparameter name omittedparameter name starts with a digit in #defineparameter names (without types) in function declarationparameter points to incomplete typeparameter type of called function is incompleteparm types given both in parmlist and separatelyparse errorparse error at end of saved function textparse error in method specificationparse error; also virtual memory exceededparse error; also virtual memory exhaustedparser may be lost: is there a '{' missing somewhere?parser stack overflowpartial specialization `%D' of function templatepartial specialization `%T' declared `friend'partial specialization `%T' does not specialize any template argumentspassing NULL used for non-pointer %s %P of `%D'passing `%T' as `this' argument of `%#D' discards qualifierspassing `%T' chooses `%T' over `%T'passing `%T' for %s %P of `%D'passing arg %d of `%s'passing arg %d of pointer to functionpassing floating point arguments in fp regs not yet supportedpassing negative value `%E' for %s %P of `%D'pasting "%s" and "%s" does not give a valid preprocessing tokenpath name missing after %spipeplace data items into their own sectionplace each function into its own sectionpointerpointer of type `void *' used in arithmeticpointer of type `void *' used in subtractionpointer targets in %s differ in signednesspointer to a function used in arithmeticpointer to a function used in subtractionpointer to a member used in arithmeticpointer to member cast from `%T' to `%T' is via virtual basepointer to member cast via virtual base `%T' of `%T'pointer to member conversion via virtual base `%T' of `%T'pointer to member function called, but not in class scopepointer to member function used in arithmeticpointer type mismatch in conditional expressionpointer value used where a complex was expectedpointer value used where a floating point value was expectedpointer-to-member function %E cannot be called without an object; consider using .* or ->*pointer/integer type mismatch in conditional expressionpointers are not permitted as case valuespoisoning existing macro "%s"possible start of unterminated string literalpossibly missing ')'post-increment address is not a registerpostfix `%D' must take `int' as its argumentpostfix `%D' must take `int' as its second argumentpostfix `%D' should return `%T'potential selector conflict for method `%s'pre-decrement address is not a registerpre-increment address is not a registerprecisionprecision in printf formatpredicate must be an identifierpredicate's answer is emptyprefix `%D' should return `%T'previous declaration `%#D' hereprevious declaration `%D'previous declaration as `%#D'previous declaration of `%#D'previous declaration of `%#D' with %L linkageprevious declaration of `%D'previous declaration of `%s'previous declaration of function `%s' was inlineprevious declaration of function `%s' with attribute noinlineprevious definition hereprevious definition of `%#T'previous external decl of `%#D'previous external decl of `%s'previous friend declaration of `%D'previous implicit declaration of `%s'previous non-function declaration `%#D'previous non-inline declaration herepreviously used hereprior parameter's size depends on `%s'private member `%#D' in anonymous unionprofiling does not work without a frame pointerprofiling not implemented yetprofiling not supported with -mg + programs: %s + promoted argument `%s' doesn't match prototypeproperly unless they all are 32 bits wideprotected member `%#D' in anonymous unionprotocol `%s' has circular dependencyprototype for `%#D'prototype for `%#D' does not match any in class `%T'prototype for `%s' followsprototype for `%s' follows and argument %d doesn't matchprototype for `%s' follows and number of arguments doesn't matchprovided for `%D'qualified type `%T' does not match destructor name `~%T'qualifiers are not allowed on declaration of `operator %T'raw header buffer too smallread %ld bytes, expected %ld, from %sread %sreading class %s for the second time from %sreading through null pointer (arg %d)real name is too long - alias ignoredreal-valued template parameters when cross-compilingrecursive type `%T' undefinedredeclaration of C++ built-in type `%T'redeclaration of `%s'redeclaration of `enum %s'redeclaration of `wchar_t' as `%T'redeclared here as `%#D'redefinition of `%#T'redefinition of `%s'redefinition of `struct %s'redefinition of `union %s'redefinition of default argument for `%#D'redirecting stdout: %sredundant redeclaration of `%D' in same scoperedundant redeclaration of `%s' in same scopereference `%s' is ambiguous: appears in interface `%s' and interface `%s'reference to local variable `%D' returnedreference to non-lvalue returnedregister name given for non-register variable `%s'register name not specified for `%s'register specified for `%s' isn't suitable for data typeregister used for two global register variablesregister variable `%s' used in nested functionregistering "%s" as both a pragma and a pragma namespaceregisters IX, IY and Z used in the same INSNreimplementation of class `%s'reinterpret_cast from `%T' to `%T' casts away const (or volatile)reinterpret_cast from `%T' to `%T' loses precisionrename spec %s to %s + repeated %s in formatrequest for member `%D' in `%E', which is of non-aggregate type `%T'request for member `%D' is ambiguous in multiple inheritance latticerequest for member `%T::%D' in expression of non-aggregate type `%T'request for member `%s' in something not a structure or unionrequested alignment for %s is greater than implemented alignment of %drequested alignment is not a constantrequested alignment is not a power of 2requested alignment is too largerequested init_priority is not an integer constantrequested init_priority is out of rangerequested init_priority is reserved for internal useresult of `operator->()' yields non-pointer resultret instruction not implementedreturnreturn identifier `%D' already in placereturn not followed by barrierreturn type `%#T' is incompletereturn type defaults to `int'return type defaults to idreturn type for `%s' defaults to idreturn type for `main' changed to `int'return type is an incomplete typereturn type of `%s' is not `int'return type specification for constructor invalidreturn type specification for destructor invalidreturn type specified for `operator %T'return value type specifier for constructor ignoredreturn-statement with a value, in function declared with a void return typereturn-statement with no value, in function declared with a non-void return typereturned value in block_exit_exprreturning a value from a constructorreturning a value from a destructorreturning reference to temporaryright precisionright precision in strfmon formatright shift count >= width of typeright shift count is negativerounding mode not supported for VAX floatssecond arg to `__builtin_expect' must be a constantsecond arg to `__builtin_prefetch' must be a constantsecond argument of `%s' should be `char **'second parameter of `va_start' not last named argumentsection attribute cannot be specified for local variablessection attribute not allowed for `%s'section attributes are not supported for this targetsection of `%s' conflicts with previous declarationsection pointer missingselector must be an immediatesemicolon missing after %s declarationsemicolon missing after declaration of `%#T'semicolon missing after declaration of `%T'shadowing %s function `%#D'shadowing built-in function `%s'shadowing library function `%s'shadowing previous type declaration of `%#D'shared and mdll are not compatibleshift count >= width of typeshift count is negativeshort, signed or unsigned invalid for `%s'signed and unsigned given together for `%s'signed and unsigned type in conditional expressionsigof type specifiersize in array new must have integral typesize of `%s' is %d bytessize of `%s' is larger than %d bytessize of array `%D' has non-integer typesize of array `%D' is negativesize of array `%D' is not an integral constant-expressionsize of array `%s' has non-integer typesize of array `%s' is negativesize of array `%s' is too largesize of array has non-integer typesize of array is negativesize of array is not an integral constant-expressionsize of member `%D' is not constantsize of return value of `%s' is %u bytessize of return value of `%s' is larger than %d bytessize of variable `%s' is too largesizeof applied to a bit-fieldsizeof applied to a function typesizeof applied to a void typesizeof applied to an incomplete typesizeof(long double) is 12sizeof(long double) is 16sorry, not implemented: sorry, not implemented: #pragma align NAME=SIZEsorry, not implemented: #pragma noalign NAMEsorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)source file for class `%s' is newer than its matching class file. Source file `%s' used insteadsource file seen twice on command line and will be compiled only oncespec failure: '%%*' has not been initialized by pattern matchspec failure: unrecognized spec option '%c'spec file has no spec for linkingspec is '%s' + + specialization of %D after instantiationspecialization of `%T' after instantiationspecialization of implicitly-declared special member functionspecializing `%#T' in different namespacespecs %%include syntax malformed after %ld charactersspecs %%rename syntax malformed after %ld charactersspecs %s spec was not found to be renamedspecs file malformed after %ld charactersspecs unknown %% command after %ld charactersspurious trailing `%%' in formatstack frame not a multiple of 8 bytes: %dstack frame not a multiple of octabyte: %dstack frame too bigstack limit expression is not supportedstack limits not supported on this targetstack size > 32kstack underflow - dup* operationstackframe too big: %d bytesstatic `%s' cannot be declared `mutable'static access to object of type `id'static declaration for `%s' follows non-staticstatic member `%D' cannot be a bit-fieldstatic member `%D' declared `register'static member function `%#D' declared with type qualifiersstatic or type qualifiers in abstract declaratorstatic or type qualifiers in non-parameter array declaratorstatic variable `%s' is marked dllimportstatic_cast from type `%T' to type `%T' casts away constnessstorage class `%D' applied to template instantiationstorage class `auto' invalid for function `%s'storage class `inline' invalid for function `%s' declared out of global scopestorage class `register' invalid for function `%s'storage class `static' invalid for function `%s' declared out of global scopestorage class specified for %s `%s'storage class specified for parameter `%s'storage class specified for structure field `%s'storage class specified for typenamestorage class specifier `%s' not allowed after struct or classstorage class specifier in array declaratorstorage class specifiers invalid in friend function declarationsstorage class specifiers invalid in parameter declarationsstorage size of `%D' isn't constantstorage size of `%D' isn't knownstorage size of `%s' isn't constantstorage size of `%s' isn't knownstray '%c' in programstray '\%o' in programstrftime formats cannot format argumentsstring constants are not valid in #ifstring length `%d' is greater than the length `%d' ISO C%d compilers are required to supportstring literal %E is not a valid template argument because it is the address of an object with static linkagestring section missingstructstruct type value used where scalar is requiredstructurestructure `%D' with uninitialized const membersstructure `%D' with uninitialized reference membersstructure size boundary can only be set to 8 or 32style of line directive is a GCC extensionsubobject of type `%T' must be initialized by constructor, not by `%E'subscript has type `char'subscript missing in array referencesubscripted value is neither array nor pointersubscripting array declared `register'suggest hiding #%s from traditional C with an indented #suggest not using #elif in traditional Csuggest parentheses around && within ||suggest parentheses around + or - in operand of &suggest parentheses around + or - inside shiftsuggest parentheses around arithmetic in operand of ^suggest parentheses around arithmetic in operand of |suggest parentheses around assignment used as truth valuesuggest parentheses around comparison in operand of &suggest parentheses around comparison in operand of ^suggest parentheses around comparison in operand of |switch -mcpu=%s conflicts with -march= switchswitch quantity not an integerswitch statement of size %lu entries too largesyntax errorsyntax error ':' without preceding '?'syntax error '?' without following ':'syntax error at '%s' tokensyntax error: cannot back uptaking address of bound pointer-to-member expressiontaking address of destructortaking address of temporarytarget CPU does not support APCS-26target CPU does not support APCS-32target CPU does not support THUMB instructionstarget CPU does not support interworkingtarget missing after %starget missing after %s optiontemplate `%#D' defined in file without #pragma interfacetemplate `%#D' instantiated in file without #pragma interfacetemplate argument %d is invalidtemplate argument `%E' involves template parameter(s)template class without a nametemplate declaration of `%#D'template definition of non-template `%#D'template instantiation depth exceeds maximum of %d (use -ftemplate-depth-NN to increase the maximum) instantiating `%D'template parameter `%#D'template parameter list used in explicit instantiationtemplate parameter type `%T' declared `friend'template parameters cannot be friendstemplate parameters not used in partial specialization:template specialization with C linkagetemplate type parameters must use the keyword `class' or `typename'template with C linkagetemplate-argument `%T' uses anonymous typetemplate-argument `%T' uses local type `%T'template-id `%D' for `%+D' does not match any template declarationtemplate-id `%D' in declaration of primary templatetemplate-id `%D' used as a declaratorthan previous declaration `%F'that particular -g option is invalid with -maout and -melinuxthe -mlong-double-64 option does not work yetthe ` ' printf flagthe `!' strfmon flagthe `#' printf flagthe `#' strftime flagthe `'' printf flagthe `'' scanf flagthe `(' strfmon flagthe `+' printf flagthe `+' strfmon flagthe `-' printf flagthe `-' strfmon flagthe `-' strftime flagthe `0' printf flagthe `0' strftime flagthe `E' strftime modifierthe `I' printf flagthe `I' scanf flagthe `O' modifierthe `O' strftime modifierthe `^' strfmon flagthe `^' strftime flagthe `_' strftime flagthe `a' scanf flagthe `java.lang.Object' that was found in `%s' didn't have the special zero-length `gnu.gcj.gcj-compiled' attribute. This generally means that your classpath is incorrectly set. Use `info gcj "Input Options"' to see the info page describing how to set the classpaththe address of `%D', will always be `true'the assignment suppression scanf featurethe conditional began herethe m210 does not have little endian supportthe meaning of '\%c' varies with -traditionalthe meaning of '\a' varies with -traditionalthe meaning of '\x' varies with -traditionalthe meaning of `\a' varies with -traditionalthe meaning of `\x' varies with -traditionalthe only valid combination is `long double'third arg to `__builtin_prefetch' must be a constantthird argument of `%s' should probably be `char **'this function may return with or without a valuethis is a previous declarationthis is the first default labelthis is the first entry overlapping that valuethis is the insn:this is the location of the previous definitionthis target does not support the -mabi switchthis target machine does not have delayed branchesthis use of "defined" may not be portablethree 'l' suffixes on integer constantthrowing NULL, which has integral, not pointer typetime in %s: %ld.%06ld (%ld%%) + to refer to a type member of a template parameter, use `typename %E'too few arguments for formattoo few arguments to %s `%+#D'too few arguments to functiontoo few arguments to function `%s'too few template parameter lists in declaration of `%D'too large function value type, needs %d registers, have only %d registers for thistoo many #pragma options align=resettoo many 'l' suffixes in integer constanttoo many (%d) args to macro `%s'too many alternatives in `asm'too many arguments for formattoo many arguments to %s `%+#D'too many arguments to functiontoo many arguments to function `%s'too many arguments to function `va_start'too many decimal points in floating constanttoo many filenames. Type %s --help for usage infotoo many initialization functions requiredtoo many input filestoo many template parameter lists in declaration of `%D'too many template parameter lists in declaration of `%T'top-level declaration of `%s' specifies `auto'traditional C ignores #%s with the # indentedtraditional C rejects automatic aggregate initializationtraditional C rejects initialization of unionstraditional C rejects string concatenationtraditional C rejects the 'f' suffixtraditional C rejects the 'l' suffixtraditional C rejects the 'u' suffixtraditional C rejects the `U' suffixtraditional C rejects the unary plus operatortrampolines not supportedtrampolines not yet implementedtrap mode not supported for VAX floatstrap mode not supported on Unicos/Mktree check: expected %s, have %s in %s, at %s:%dtree check: expected class '%c', have '%c' (%s) in %s, at %s:%dtrigraph ??%c converted to %ctrigraph ??%c ignoredtry reducing the number of local variablestrying to finish struct, but kicked out due to previous parse errorstrying to make class `%T' a friend of global scopetwo 'u' suffixes on integer constanttwo or more data types in declaration of `%s'two types specified in one empty declarationtype `%#T' argument given to `delete', expected pointertype `%D' is not a direct base of `%T'type `%D' is not a direct or virtual base of `%T'type `%T' composed from a local class is not a valid template-argumenttype `%T' has no destructortype `%T' is disallowed in Java `throw' or `catch'type `%T' is not a base type for type `%T'type `%T' is not derived from `java::lang::Throwable'type `%T' is not derived from type `%T'type `%T' is of non-aggregate typetype `%T' of template argument `%E' depends on template parameter(s)type defaults to `int' in declaration of `%s'type is deprecatedtype is deprecated (declared at %s:%d)type mismatch in conditional expressiontype mismatch with previous external decltype mismatch with previous implicit declarationtype name expected before `&'type name expected before `*'type of `%E' does not match destructor type `%T' (type was `%T')type of `%s' defaults to `int'type of asm operand `%E' could not be determinedtype of external `%s' is not globaltype of formal parameter %d is incompletetype qualifier `%s' not allowed after struct or classtype qualifiers for `%s' conflict with previous decltype qualifiers ignored on function return typetype qualifiers specified for friend class declarationtype size can't be explicitly evaluatedtype specifier `%s' not allowed after struct or classtype specifier omitted for parametertype specifier omitted for parameter `%E'type to vector delete is neither pointer or array typetype/value mismatch at argument %d in template parameter list for `%D'typedef `%D' is initializedtypedef `%s' is initializedtypedef declaration includes an initializertypedef declaration invalid in parameter declarationtypedef name may not be class-qualifiedtypename type `%#T' declared `friend'types are not quite compatibleunable to call pointer to member function hereunable to compute real location of stacked parameterunable to find a register to spill in class `%s'unable to generate reloads for:unable to mmap file '%s'unable to open dynamic dependency '%s'unable to open file '%s'unable to stat file '%s'unable to use '%s' for PIC registerunary `&'unbalanced #endifunbalanced stack in #ifundefined named operand '%s'undefined or invalid # directiveundefined type `id', please import undefining "%s"undefining `%s'undefining `defined'underscore in numberunexpected NOTE as addr_const:unexpected PIC symbolunexpected address expressionunexpected base-type in cris_print_baseunexpected function type needing stack adjustment for __builtin_eh_returnunexpected index-type in cris_print_indexunexpected letter `%c' in locate_error + unexpected multiplicative operandunexpected operandunexpected side-effects in addressunexpected type for `id' (%s)uninitialized const `%D'uninitialized const in `new' of `%#T'uninitialized const member `%D'uninitialized reference member `%D'unionunion `%T' with no named members cannot be initializedunion cannot be made transparentunion type value used where scalar is requireduniversal-character-name '\U%08x' not valid in identifieruniversal-character-name '\u%04x' not valid in identifieruniversal-character-name on EBCDIC targetuniversal-character-name out of rangeunknown -march= option (%s). + Valid options are 1.0, 1.1, and 2.0 + unknown -mdebug-%s switchunknown -mschedule= option (%s). + Valid options are 700, 7100, 7100LC, 7200, and 8000 + unknown ABI specified: '%s'unknown C standard `%s'unknown CPU version %d, using 40. + unknown CRIS cpu version specification in -mtune= : %sunknown CRIS version specification in -march= or -mcpu= : %sunknown action '%s' for '#pragma pack' - ignoredunknown array size in deleteunknown conversion type character 0x%x in formatunknown conversion type character `%c' in formatunknown encoding: `%s' + This might mean that your locale's encoding is not supported + by your system's iconv(3) implementation. If you aren't trying + to use a particular encoding for your input file, try the + `--encoding=UTF-8' optionunknown escape sequence '\%c'unknown escape sequence `\%c'unknown escape sequence: '\%03o'unknown escape sequence: `\' followed by char code 0x%xunknown field `%s' specified in initializerunknown insn modeunknown machine mode `%s'unknown move insn:unknown namespace `%D'unknown opcode %d@pc=%d during verificationunknown register name `%s' in `asm'unknown register name: %sunknown set constructor typeunknown string token %s + unknown {de,en}code_mach_o_hdr return value %dunnamed fields of type other than struct or union are not allowedunnamed initializer for `%T', which has no base classesunnamed initializer for `%T', which uses multiple inheritanceunnamed struct/union that defines no instancesunnamed variable or field declared voidunordered comparison on non-floating point argumentunreachable bytecode from %d to before %dunreachable bytecode from %d to the end of the methodunrecogized wide sub-instructionunrecognizable insn:unrecognized addressunrecognized format specifierunrecognized gcc debugging option: %cunrecognized option `%s'unrecognized option `-%s'unrecognized register name `%s'unrecognized section name "%s"unrecognized supposed constantunrecognized supposed constant in cris_global_pic_symbolunregistered operator %sunspellable token %sunsupported arg to `__builtin_frame_address'unsupported arg to `__builtin_return_address'unsupported operand size for extended registerunsupported versionunsupported wide integer operationunterminated #%sunterminated #%s conditionalunterminated argument list invoking macro "%s"unterminated assembly dialect alternativeunterminated commentunterminated format stringunterminated parameter list in #defineunterminated string or character constantunused arguments in $-style formatunused parameter `%s'unused variable `%s'usage: %s [switches] input outputuse -gdwarf -g%d for DWARF v1, level %duse -gdwarf-2 for DWARF v2use `#line ...' instead of `# ...' in first lineuse of %s and %s together in %s formatuse of %s and %s together with `%%%c' %s formatuse of %s from containing functionuse of `%D' is ambiguoususe of `%s' in templateuse of `%s' in template type unificationuse of `%s' length modifier with `%c' type characteruse of class template `%T' as expressionuse of enum `%#D' without previous declarationuse of linkage spec `%D' is different from previous spec `%D'use of namespace `%D' as expressionuse of old-style castuse of template qualifier outside templateused %d template parameter%s instead of %duseless keyword or type name in empty declarationuser-defined `%D' always evaluates both argumentsusing CONST_DOUBLE for addressusing `typename' outside of templateusing both @FILE with multiple files not implementedusing declaration `%D' introduced ambiguous type `%T'using synthesized `%#D' for copy assignmentusing template type parameter `%T' after `%s'using typedef-name `%D' after `%s'using-declaration for destructorusing-declaration for non-member at class scopevalidate_value_data: Loop in regno chain (%u)validate_value_data: [%u] Bad next_regno for empty chain (%u)validate_value_data: [%u] Bad oldest_regno (%u)validate_value_data: [%u] Non-empty reg in chain (%s %u %i)value of -mfixed-range must have form REG1-REG2varargs function cannot be inlinevariable `%#D' has initializer but incomplete typevariable `%s' declared `inline'variable `%s' has initializer but incomplete typevariable `%s' might be clobbered by `longjmp' or `vfork'variable offset is passed partially in stack and in regvariable or field `%s' declared voidvariable or field declared voidvariable size is passed partially in stack and in regvariable-size type declared outside of any functionvariable-sized object `%D' may not be initializedvariable-sized object may not be initializedvariable-sized object of type `%T' may not be initializedvector overflow in expressionverification error at PC=%dverify_flow_info failedverify_flow_info: Basic block %d succ edge is corruptedverify_flow_info: Duplicate edge %i->%iverify_flow_info: Incorrect blocks for fallthru %i->%iverify_flow_info: Incorrect fallthru %i->%ivirtual array %s[%lu]: element %lu out of bounds in %s, at %s:%dvirtual base `%T' inaccessible in `%T' due to ambiguityvirtual functions cannot be friendsvirtual non-class function `%s'virtual outside class declarationvoid expression between '(' and ')'void value not ignored as it ought to bevolatile register variables don't work as you might wishwarning:warning: warning: -pipe ignored because -save-temps specifiedwarning: -pipe ignored because -time specifiedwarning: `-x %s' after last input file has no effectwarning: already-compiled .class files ignored with -Cwarning: use of obsolete %%[ operator in specsweak declaration of `%s' must be publicweak declaration of `%s' must precede definitionweak declaration of `%s' not supportedwhere case label appears herewidth of `%D' exceeds its typewidth of `%s' exceeds its typewidth of integer constant changes with -traditionalwidth of integer constant may change on other systems with -traditionalwithin this contextwrite %swriting into constant object (arg %d)writing load commands. + + writing through null pointer (arg %d)wrong insn in the fallthru edgewrong number of arguments specified for `%s' attributewrong number of template arguments (%d, should be %d)wrong type argument to abswrong type argument to bit-complementwrong type argument to conjugationwrong type argument to decrementwrong type argument to incrementwrong type argument to unary exclamation markwrong type argument to unary minuswrong type argument to unary pluswrote %ld bytes, expected %ld, to %sxstormy16_print_operand: unknown codeyou must additionally specify either -M or -MMzero or negative size array `%s'zero size array reserves no spacezero width for bit-field `%D'zero width for bit-field `%s'zero width in %s formatzero-length format stringzero-size array `%D'Project-Id-Version: GNU gcc 3.1-b20020415 + POT-Creation-Date: 2002-04-23 12:53+0200 + PO-Revision-Date: 2002-04-29 14:00-0500 + Last-Translator: Michel Robitaille + Language-Team: French + MIME-Version: 1.0 + Content-Type: text/plain; charset=ISO-8859-1 + Content-Transfer-Encoding: 8-bit + %#D + Options pour %s: + + %s: %d: AVERTISSEMENT: ne peut ajouter une déclaration de « %s » dans l'appel macro + + %s: erreur de lecture du fichier d'entrée « %s »: %s + + %s: erreur fatale: fichier auxiliaire d'infos à la ligne %d + + %s: AVERTISSEMENT: trop peu de paramètres de listes dans la déclaration de « %s » + + ;; Totaux combinés: %d tentatives, %d substitutions (%d requérant un nouvel espace), + ;; %d succès. + + + Temps d'exécution (secondes) + + Pour les instructons afin de rapporter des anomales, SVP consulter: + + Pour les instructons afin de rapporter des anomales, SVP consulter: + %s. + + Aller de l'avant? (y ou n) + Options spécifiques au langage: + + Options débutant par -g, -f, -m, -O, -W, ou --param sont automatiquement + passés aux divers sous-processus invoqués par %s. Afin de passer + les autres options à ces processus l'option -W doit être utilisé. + + Table de symboles de traitement #%d, décalage = 0x%.8lx, sorte = %s + + Options spécifiques à la cible: + + Il y a des options spécifiques %s qui ne sont pas documentés aussi. + + Il y a des options spécifiques à la cible qui ne sont pas documentés aussi. + + Mise à jour d'en-tête et chargement des commandes. + + + sortie de ldd avec constructeurs/destructeurs. + + write_c_file - nom de sortie est %s, préfixe est %s + %#D « %D » par un handler antérieur pour « %T » dans la conversion d'un pointeur vers un membre dans la conversion d'un pointeur vers un membre de fonction sera ré-ordonné pour précéder les initialisations de membre %-23.23s [non documenté] + (Utiliser «-v --help» pour afficher les options de la ligne de commande des sous-processus) + (utiliser « typename %T::%D » si c'est ce que vous voulez dire) -### identique à -v mais les options et les commandes entre guillemets ne sont pas exécutées + --help afficher l'aide mémoire + --help afficher l'aide-mémoire + --target-help afficher les options spécifiques de la ligne de commande + -B ajouter le aux chemins de recherche du compilateur + -D définir une avec la chaîne « 1 » pour valeur + -D= définir une de + -A=() associer la à la + -A-=() dissocier la à la + -U ne plus définir la + -v afficher le numéro de version + -E pré-traiter seulement; ne pas compiler, assembler ou éditer les liens + -G placer les données globales et statiques plus + petites que d'octets dans une section + spéciale (sur certaine cible) + -H afficher le nom des fichiers en-tête tel qu'utilisés + -C ne pas mettre de côté les commantaires + -dM afficher la liste des définitions de macro actives à la fin + -dD préserver les définitions de macros à la sortie + -dN identique à -dD sauf que seuls les noms sont préservés + -dI inclure la directive #include à la sortie + -M générer les dépendances pour make + -MM identique à -M, mais ignorer les en-têtes systèmes de fichiers + -MD générer les dépendances pour make et compiler + -MMD identique à -MD, mais ignorer les fichiers d'en-tête système + -MF écrire les dépendances dans le + -MG traiter les en-têtes de fichiers comme des fichiers générés + -MP générer des cibles factices pour toutes les en-têtes + -MQ ajouter une cible MAKE-quoted + -MT ajouter une cible non « quoted » + -O[NIVEAU] utiliser le NIVEAU d'optimisation + -Os optimiser l'utilisation de l'espace plutôt que la vitesse + -S compiler seulement; ne pas assembler ou éditer les liens + -V exécuter le numéro de de gcc, si installée + -W autoriser les avertissements additionnels + -Wa, passer les séparées par des virgules à l'assembleur + -Wl, passer les séparées par des virgules à l'éditeur de liens + -Wlarger-than- avertir si un objet est plus grand que d'octets + -Wno-comment{s} ne pas avertir à propos des commentaires + -Wtraditional avertir à propos des options non présentes en C traditionnel + -Wno-traditional ne pas avertir à propos du C traditionel + -Wundef avertir à propos de macros indéfinies si utilisé dans un #if + -Wno-undef ne pas avertir à propos de la vérification des macros indéfinies + -Wimport avertir de l'utilisation de la directive #import + -Wno-import ne pas avertir à propos de l'utilisation de #import + -Werror traiter tous les avertissements comme des erreurs + -Wno-error ne pas traiter tous les avertissements comme des erreurs + -Wsystem-headers ne pas supprimer les avertissements dans les en-têtes système + -Wno-system-headers supprimer les avertissements dans les en-têtes système + -Wall autoriser tous les avertissements du préprocesseur + -Wp, passer les séparées par des virgules au préprocesseur + -Wunused autoriser les avertissements pour signaler les non utilisés + -Xlinker passer l' à l'éditeur de liens + -a autoriser le profilage des blocs + -aux-info produire une info de déclaration dans le + -ax autoriser le profilage des sauts + -b exécuter gcc pour la cible, si installé + -b, --branch-probabilities inclure les probabilités de branchement dans la sortie + -S compiler et assembler, mais ne pas éditer les liens + -c, --branch-counts donner le décompte de branchements pris + plutôt que les pourcentages + -d[lettres] autoriser les vidanges pour des passes spécifiques du compilateur + -dumpbase nom de base à utiliser pour les vidanges de passes spécifiques + -dumpmachine afficher le processeur ciblé par le compilateur + -dumpspecs afficher tous les construits des chaînes de specs + -dumpversion afficher la version du compilateur + -f, --function-summaries produire un sommaire pour chaque fonction + -fcall-saved- marquer le qui est préservé à travers les fonctions + -fcall-used- marquer le qui est corrompu par les appels de fonctions + -fdiagnostics-show-location=[once | every-line] indiquer combien de fois les information de localisation des sources doivent être produites, comme préfixe, au début d'un diagnostique lorsque les lignes doivent s'enrouler sur d'autres + -ffixed- marque le qui est rendu indisponibles pour le compilateur + -finline-limit= limiter la taille des fonction en ligne à + -fmessage-length= limiter la longueur des messages de diagnotiques à de caractères par ligne. 0 supprime l'enroulement de ligne + -fpreprocessed traiter le fichier d'entrée comme étant déjà pré-traitée + -ftabstop= sélectionner la largeur de tabulation pour les rapports + -P ne pas générer des directives #line + -$ ne pas permettre «$» dans les identificateurs + -remap refaire la table des noms de fichiers + lors de l'inclusion de fichiers + --version afficher le numéro de version + -h or --help afficher l'aide mémoire + -fsched-verbose= initialiser le niveau de verbosité du céduleur + -h, --help afficher l'aide mémoire + -idirafter ajouter le ertoire à la fin du chemind'inclusion système + -I ajouter le ertoire à la fin du chemind'inclusion principal + -I- raffiner le contrôle du chemin d'inclusion; consulter la doc + -nostdinc ne pas rechercher à travers les répertoires d'inclusion système + (rép spécifiés avec -isystem seront encode utilisés) + -nostdinc++ ne pas rechercher à travers les répertoires d'inclusion système pour C++ + -o produire la sortie dans le + -l, --long-file-names utiliser des longs noms de fichiers pour + les fichier sources d'inclusion + -lang-c++ assumer que les sources sont en C++ + -lang-objc assumer que les sources sont en ObjectiveC + -lang-objc++ assumer que les sources sont en ObjectiveC++ + -lang-asm assumer que les sources sont en assembleur + -m%-23.23s [non documenté] + -n, --no-output ne créer de fichier de sortie + -o placer la sortie dans le + -o produire la sortie dans le + -o, --object-directory RÉP rechercher les fichiers objets dans le RÉPertoire + -p autoriser le profilage des fonctions + -pass-exit-codes quitter avec le plus grand code d'erreur de la phase + -pedantic émettre tous les avertissements relatifs à la conformité stricte ISO C + -pedantic-errors transformer les avertissements -pedantic en erreurs à la place + -trigraphs supporter les trigraphes ISO C + -lang-c assumer que les sources à l'entrée sont en C + -lang-c89 assumer que les sources à l'entrée sont en C89 + -pedantic émettre les avertissements nécessaires pour être conforme de façon stricte à ISO C + -pedantic-errors identique à -pedantic sauf que les erreurs sont produites + -pipe utiliser des pipes au lieu de fichiers intermédiares + -print-file-name= afficher le chemin d'accès complet vers la librairie + -print-libgcc-file-name afficher le nom de la librairie compagne du compilateur + -print-multi-directory afficher la racine du répertoire des version libgcc + -print-multi-lib afficher la table de projection entre les options de la ligne de commande + les multiples répertoires de recherches des librairies + -print-prog-name= afficher le chemin d'accès complet vers le composant du compilateur + -print-search-dirs afficher les répertoires du chemin de recherche du compiltateur + -quiet ne pas afficher les fonctions compilées ou le temps écoulé + -save-temps ne pas détruire les fichiers intermédiaires + -specs= écraser les specs internes à l'aide du contenu du + -std= assumer que les fichiers sources respectent le + -std= spécifier le de conformité à utiliser; soit: + gnu89, gnu99, c89, c99, iso9899:1990, + iso9899:199409, iso9899:1999 + -+ permettre l'analyse des options de style C++ + -w inhiber les messages d'avertissement + -Wtrigraphs avertir si des trigraphes sont rencontrés + -Wno-trigraphs ne pas avertir à propos des trigraphes + -Wcomment{s} avertir si un commentaire débute à l'intérieur d'un autre + -time mesurer le temps d'exécution de chaque sous-processus + -v afficher les programmes invoqués par le compilateur + -v, --version exécuter le numéro de de gcc, si installée + -version afficher la version du compilateur + -w supprimer les avertissements + -x spécifier le langage des fichiers d'entrée parmi les + langages permis: c c++ assembler none + « none » signifiant d'utiliser le comportement par défaut + en tentant d'identifier le langage par l'extension du fichier + Ils existent, mais ils ne sont pas documentés. + «%#D» déclaré ici aussi déclaré comme «%#D» ici et «%#D» et «%#T» comme il a été déjà spécifié comme répertoire non système comme c'est le même qu'un répertoire non système « %s » parce que la séquence de conversion pour l'argument est meilleure parce que le membre local «%#D» a le même nom parce que la méthode locale «%#D» a le même nom parce que les fonctions viruelles suivantes sont abstraites: parce la plus mauvaise conversion de la déclaration initiale est meilleure que la plus mauvaise conversion de la dernière déclaration mais %d son requis mais n'écrase pas «%T(const %T&)» mais n'écrase pas « operator=(const %T&) » par « %D » conversions de candidat inclut « %D » et « %D » ne peut utiliser une liaison obsolète à « %D » parce qu'il a un destructeur en conflit avec « %D » initialisation croisée pour «%#D» entre dans le bloc d'interceptions entre dans la porté d'un non POD «%#D» entre dans le bloc d'essais attendait un patron de classe, a obtenu « %T » attendait une constante de type « %T », a obtenu « %T » attendait un patron de type « %D », a obtenu « %D » attendait un type, a obtenu « %E » attendait un type, a obtenu « %T » d'abord déclaré comme «%#D» ici premier type ici pour la conversion de « %T » vers « %T » à partir de la définition de «%#D» à partir d'ici dans l'appel de « %D » lors de l'évaluation de «%Q(%#T, %#T)» dans l'instanciation du patron « %T » dans l'expression projetée initialisation de l'argument %P de « %D » initialisation de l'argument %P de « %D » à partir du résultat « %D » initialisation temporaire à partir du résultat « %D » au lieu de « %D » à partir d'un classe de base dépendante concorde avec « %D » selon les règles standards ISO concorde avec « %D » selon les vieilles règles noms des classes de base dépendantes ne sont pas visibles à la recherche de nom non qualifié - pour référer à type par héritage, disons «%s %T::%T» ou « operator=(const %T&) » définition originale apparaît ici autre type ici écrasant «%#D» écrasant «%#D» (doit être un pointeur ou une référence vers un classe) écrasant «%#D» (doit utiliser un pointeur ou un référence) écrasant «%#F» peut-être que vous voulez « %T » comme constructeur alors que «%#D» est déclaré dans la classe de base depuis que le type « %T » a des fonctions virtuelles abstraites saut d'initialisation pour «%#D» tentative d'instanciation « %D » utilisation de liaison obsolète à « %D » où cfront utiliserait «%#D» sera ré-odonné pour concorder avec l'ordre déclaré sera ré-ordonné pour concorder avec l'ordre d'héritage vous pouvez contourner cela en enlevant l'initialiseur %s TOTAL : fait ombrage au paramètre du patron «%#D»"%.*s" redéfini"%s" après # n'est pas un nombre entier positif« %s » après #line n'est pas un nombre entier positif« %s » ne peut être utilisé comme nom de macro« %s » ne peut être utilisé comme nom de macro alors que c,est un opérateur en C++« %s » n'est pas un nom de fichier valide« %s » n'est pas une option valide pour le préprocesseur« %s » n'est pas défini« %s » n'est pas valide des les expressions #if« %s » peut ne pas apparaître dans la liste des paramètres des macros« %s » re-asserti« %s » redéfini«/*» à l'intérieur du commentaire"Petites classes de registres" kludge« defined » ne peut être utilisé comme nom de macro# %s %.2f %.2f + # opérator derait être suivi par le nom d'un argument macro#%s attend « FILENAME » ou #%s est une extension GCC#%s n'est pas à l'intérieur d'un conditionel#-lines pour entrer et quitter les fichiers ne concordent pas#elif après #else#elif n'est pas à l'intérieur d'un conditionel#elif sans #if#else après #else#else n'est pas à l'intérieur d'un conditionel#else ou #elif après #else#else sans #if#endif sans #if#error%.*s#if sans expression#import est obsolète, utiliser une enveloppe #ifndef dans le fichier d'en-tête#include «...» la recherche débute ici: + #include <...> la recherche débute ici: + #include espère « fname » ou #include imbriqué trop profondément#include_next dans un fichier source primaire#pragma %s %s est déjà enregistré#pragma %s est déjà enregistré#pragma GHS endXXX ne concorde pas avec le précédent startXXX#pragma GHS endXXXX repéré sans être précédé de startXXXimplantation de #pragma pour %s apparaît après l'inclusion du fichier#pragma utilisé une fois dans le fichier principalutilisation une seule fois de #pragma est obsolète#pragma pack (pop) rencontré sans #pragma pack (push, ) concordant#pragma pack(pop, %s) rencontré sans #pragma pack(push, %s, ) concordant#pragma pack(pop[, id], ) n'est pas supporté sur cette cible#pragma pack(push[, id], ) n'est pas supporté sur cette cible#pragma redefine_extname en conflit avec la déclaration#pragma system_header ignorée en dehors du fichier d'inclusion#pragma vtable n'est plus supporté#warning%.*s%%R n'est pas suivi de %%B/C/D/E%%S calculé avec un masque de zéros%%S calculé avec un masque que uns%6.2f%% de branchements %d exécutés dans le fichier %s + %6.2f%% de branchements %d exécutés dans la fonction %s + %6.2f%% de branchements %d pris au moins une fois dans le fichier %s + %6.2f%% de branchements %d pris au mons une fois dans la fonction %s + %6.2f%% d'appels %d exécutés dans le fichier %s + %6.2f%% d'appels %d exécutés dans la fonction %s + %6.2f%% de lignes sources %d exécutés dans le fichier %s + %6.2f%% des lignes sources %d exécutées dans la fonction %s + valeur de départ, fin et du pas %A connu pour résulter dans un comportement dépendant de l'implantation en raison d'un débordement dans les calculs intermédiaires à %0valeur de départ, fin et du pas %A connus pour ne faire aucune itération à %0valeur finale %A plus la valeur du pas connus pour déborder à %0%A à partir de %B à %0%Cvaleur du pas %A connu pour être à 0 (zéro) à %0trop peu d'arguments %A (débutant avec l'argument factice « %B ») tel que %0 pour la déclaration de la référence de fonction à %1trop peu d'arguments %A tel que %0 pour la déclaration de la référence de fonction à %1%d constructeur(s) repéré(s) + %d destructeur(s) repéré(s) + %d table(s) de trame repéré(s) + mode %i bits pas compilé en%s%s + %s %s %+#D%s %+#D%s%s %+#T%s %D(%T) %s %D(%T, %T) %s %D(%T, %T, %T) %s %T %s (GCC) %s + %s « %s » n'implante pas complètement le protocole « %s »%s est « float» plutôt que «double » en raison du prototype%s est complexe plutôt que flottant en raison du prototype%s est complexe plutôt qu'entier en raison du prototype%s est flottant plutôt que complexe en raison du prototype%s est flottant plutôt qu'entier en raison du prototype%s est entier plutôt que complexe en raison du prototype%s est entier plutôt que flottant en raison du prototype%s est signé en raison du prototype%s est non signé en raison du prototype%s à la fin de l'entrée%s avant « %s »%s avant %s« %c »%s avant %s'\x%x'%s avant le jeton « %s »%s avant « %c »%s avant « %s »%s avantle jeton « %s »%s avant «\%o»%s avant la constante numérique%s avant la constante chaîne%s entre des types distincs de pointeurs « %T » et « %T » manque de transtypage%s ne peut résoudre l'adresse la fonction surchargée%s cause un conflit du type de section%s défini à l'intérieur des paramètres%s désactivé, utiliser le fanion normal de mise au point%s écarte le qualificateur du type du pointeur cible%s ne supporte pas le format d'opérande de nombre %%n$%s ne supporte pas %s%s ne supporte pas %s avec le format «%%%c» %s %s ne supporte pas le format «%%%c» %s%s ne supporte par le format «%%%s%c» %s%s ne supporte pas « %s » %s comme modificateur de longueur%s pour l'opérateur «%t [%T]»%s pour l'opérateur «%T %s»%s pour «%T ? %T : %T» comme opérateur%s pour l'opérateur «%T [%T]»%s pour l'opérateur «%t [%T]»format %s, arg %s (arg %d)%s d'un type pointeur incompatiblefonction %s, région %d, décalage = %ld (0x%.8lx) + %s n'a pas de %s%s n'a pas de membre nommé « %s »%s ignoré avec %s et le format «%%%c» %s%s ignoré avec %s et le format %s%s dans la directive de pré-traitement%s est un périphérique de blocs%s est un référence, pas un appel, à la fonction « %E »%s est déprécié, SVP voir la documentation pour les détails%s n'est pas supporté par cette configuration%s n'est pas de type %s (arg %d)%s est plus petit que prévue%s est trop grand%s transforme en entier un pointeur sans transtypage%s transforme en pointeur un entier sans transtypage%s a rendu un pointeur de fonction qualifié à partir d'un non qualifié%s n'est plus supporté -- essayer -fno-vxt -ff90%s n'est plus supporté -- essayer -fvxt%s de valeur négative « %E » vers « %T »%s d'une location en lecture seulement%s d'un membre en lecture seulement « %s »%s d'une variable en lecture seulement « %s »%s qualificateur ignoré avec asm%s a retourné %d comme valeur d'état compteur de rotation %s >= largeur du typecompteur de rotation %s est négatif%s terminé par le signal %d [%s]%s%s vers « %T » à partir de « %T »%s vers un type non pointeur « %T » à partir d'un NULL%s utilisé avec le format «%%%c» %s%s a une largeur différente en raison du prototype%s%s%s version %s (%s) + %s compilé par GNU C version %s. + %s%s%s version %s (%s) compilé par CC. + %s-%s est une étendue vide%s. + %s%s: %d: « %s » utilisé mais manquant dans les SYSCALLS + %s: %d: AVERTISSEMENT: « %s » exclu par le préprocesseur + %s: %d: AVERTISSEMENT: définition de %s n'a pas été convertie + %s: %d: AVERTISSEMENT: a obtenu « %s » mais attendait « %s » + %s: %d: AVERTISSEMENT: pas de définition externe pour « %s » + %s: %d: AVERTISSEMENT: trop de confusions dans le source + %s: %d: AVERTISSEMENT: déclaration de varargs de fonction non convertis + %s: %s%s: %s compilateur n'est pas installé sur ce système%s: %s a terminé avec le statut %d + %s: %s: %s: %s: ne peut obtenir l'état: %s + %s: dans l'instanciation de « %s »: + %s: NaN - opération produite%s: n'est pas un répertoire%s: « %s » n'a pas été converti + %s: erreur d'argument de domaine%s: ne peut changer le mode du fichier « %s »: %s + %s: ne peut créer/ouvrir un fichier propre « %s »: %s + %s: ne peut créer/ouvrier le fichier de sortie « %s »: %s + %s: ne peut détruire le fichier auxiliaire d'infos « %s »: %s + %s: ne peut détruire le fichier « %s »: %s + %s: ne peut obtenur l'état du fichier « %s »: %s + %s: ne peut obtenir l'état du fichier auxiliaire d'infos « %s »: %s + %s: ne peut lier le fichier « %s » à « %s »: %s + %s: ne peut ouvrir le fichier auxiliaire d'infos « %s » en lecture: %s + %s: ne peut ouvrir le fichier « %s » en lecture: %s + %s: ne peut lire le fichier auxiliaire d'infos « %s »: %s + %s: ne peut repérer le répertoire de travail: %s + %s: ne peut ouvrir un fichier COFF%s: en compilation « %s » + %s: liste conflictuelle pour « %s » suit: + %s: définitions externes conflictuelles de « %s » + %s: conversion du fichier « %s » + %s: déclaration de la fonction « %s » non convertie + %s: déclarations de « %s » ne seront pas converties + %s: définition de la fonction « %s » n'a pas été convertie + %s: erreur lors de la fermeture du fichier auxiliaire d'infos « %s »: %s + %s: erreur lors de la lecture du fichier auxilaire d'infos « %s »: %s + %s: erreur d'écriture au fichier « %s »: %s + %s: définition de « %s » trouvé à %s(%d) + %s: définition de fonction n'a pas été convertie + %s: singularité de fonction%s: déclarations globale du fichier « %s » n'ont pas été insérées + %s: noms de fichiers d'entrée doivent avoir le suffixe .c: %s + %s: abandon interne + %s: nom de fichier invalide: %s + %s: fichier d'entrée d'édition de liens n'est pas utilisé parce l'édition de lien n'a pas été faite%s: déclaration locale pour la fonction « %s » n'a pas été insérée + %s: multiples définitions statiques de « %s » dans le fichier « %s » + %s: n'est pas un fichier COFF%s: erreur de débordement de bornes%s: perte partielle de précision%s: sous-processus a reçu le signal fatal %d + %s: perte totale de précision%s: erreur de sous débordement de bornes%s: usage «%s [ -VqfnkN ] [ -i ] [ nom-de-fichier ... ]» + %s: usage «%s [ -VqfnkNlgC ] [ -B ] [ nom-de-fichier ... ]» + %s: en attente: %s + %s: AVERTISSEMENT: %s: AVERTISSEMENT: ne peut renommer le fichier « %s » à « %s »: %s + %s: AVERTISSEMENT: fichier « %s » est déjà sauvegardé dans « %s » + %s: AVERTISSEMENT: fichier des SYSCALLS « %s » est manquant + %s: AVERTISSEMENT: aucun accès en lecture du fichier « %s » + %s: AVERTISSEMENT: pas de définition statique pour « %s » dans le fichier« %s » + %s: AVERTISSEMENT: aucun accès en écriture du répertoire contenant « %s » + %s: AVERTISSEMENT: aucun accès en écriture du fichier « %s » + %s: AVERTISSEMENT: trop de paramètres de listes dans la déclaration de « %s » + %s: AVERTISSEMENT: using la liste des formels de %s(%d) pour la fonction « %s » + %s: avertissements ont été traités commes des erreurs + %s: devrait convertir le fichier « %s » + %s:%d: instancié à partir de « %s » + %s:%d: instancié à partir d'ici + %s:%d: rendu confus par les erreurs précédentes, abandon + %s:%d: déclaration de fonction « %s » prend différentes formes + %s:%d: AVERTISSEMENT: %s=%s n'est pas numérique%s=%s est trop grand%smembre de fonction « %D » ne peut avoir « %T » comme qualificateur de méthode«##» ne peut apparaître à chacune des fins de l'expansion de macros«#» n'est pas suivi d'un paramètre de macrocaractère(s) «$» dans l'identificateur« %D » est utilisé comme type, mais n'est pas défini comme type.«(» attendu«)» attendu«)» or terme attendu«*» attendu«:» attendu«;» attendu« Ll» et «1L » ne sont pas des suffixes valides pour un entier«[» attendu«]» attendu«]» attendu, type d'expression invalide« class » attendu« class» ou «ceci » attendu'lul» n'est pas un suffixe valide pour un entier«{» attendu(« %s » est un jeton alternatif pour « %s » en C++)((anonyme))(Chaque identificateur non déclaré est rapporté une seule fois(Chaque identificateur non déclaré est rapporté seulement une seule fois pour la fonction dans laquelle il apparaît.)(un pointeur vers un membre peut seulement être formé avec «&%E»)(une initialisation en dehors de la classe est requise)(poursuite)(les actions enfermées du case précédent de la déclaration requiert des destructeurs dans leur propre champ.)(si ce n'est pas ce que vous vouliez faire, soyez sûr que le patron de la fonction a déjà été déclaré et ajouter <> après le nom de la fonction ici) -Wno-non-template-friend désactive le présent avertissement(c'est valide pour %s mais pas pour le langage séclectionné)(près de l'initialisation pour « %s »)(vous devriez passer « %s » mais non pas « %s » à « va_arg »)(static %s pour %s)(ceci sera rapporté seulement une seule fois par fichier d'entrée)(utiliser «=» pour initialiser les données de membres), + à partir de %s:%d, + à partir de %s:%u--driver n'est plus supporté-E est requis lorsque l'entrée est faite à partir de l'entrée standard-G et -membedded-pic sont incompatibles-G est incompatible avec le code PIC par défaut-I- spécifié deux fois-R requiert -o-Wformat-extra-args ignorée sans -Wformat-Wformat-nonliteral ignorée sans -Wformat-Wformat-security ignorée sans -Wformat-Wformat-y2k ignorée sans -Wformat-Wid-clash-LEN n'est plus supportée-Wmissing-format-attribute ignorée sans -Wformat-Wno-strict-prototypes n'est pas supportée en C++-Wuninitialized n'est pas supporté sans -O-c ou -S requis pour Ada-f%s et -msdata=%s sont incompatibles-f%s ignoré (tout le code est indépendant de la position)-f%s ignoré pour 68HC11/68HC12 (non supporté)-f%s ignoré pour Unicos/Mk (non supporté)-f%s ignoré pour la cible (tout le code set indépendant de la position)-f%s n'est plus supportée-f%s n'est pas supporté: ignoré-f%sleading-underscore n'est pas supporté sur cette machine cible-fPIC et -fpic ne sont pas supportées par cette configuration-fPIC et -mcall-%s sont incompatibles-fPIC n'est pas couramment supporté pour le 68000 ou 68010 + -fPic n'est pas valide avec -mcoff-fPIC n'est pas valide avec -mcoff-fdata-sections n'est pas supporté pour cette machine cible-fdata-sections n'est pas supporté sur AIX-femit-class-file dervait être utilisé avec -fsyntax-only-ffunction-sections désactivé sur AIX lors de la mise au point-ffunction-sections désactivé; cela rend le profilage impossible-ffunction-sections peut affecter la mise au point sur quelques machines cibles.-ffunction-sections n'est pas supporté pour cette cible-fhandle-exceptions a été renommé -fexceptions (et est utilisé par défaut maintenant)-fjni et -femit-class-file sont incompatibles-fjni et -femit-class-files sont incompatibles-fname-mangling-version n'est plus supportée-fpic et -mapcs-reent sont incompatibles-fpic n'est pas valide avec -mcoff-fpic n'est pas valide avec -mcoff-fprefetch-loop-arrays n'est pas supporté avec -Os-fprefetch-loop-arrays n'est pas supporté pour cette machine cible-fprefetch-loop-arrays n'est pas supporté sur cette machine cible (essayer -march options)-frepo doit être utilisé avec -cL'option -g est seulement supportée lorsque GAS est utilisé sur ce processeur,option -g désactivée-g avec -mno-apcs-frame peut ne pas donner une mise au point sensée-mabi=%s ne supporte pas -mips%d-maix64 et architecture POWER sont incompatibles-maix64 requis: calcul en 64 bits avec un adressage de 32 bits n'est pas encore supporté-maix64 requiert une architecture PowerPC64 qui demeure sélectionnée-malign-double n'a aucun sens en mode 64 bits-malign-functions est obsolète, utiliser -falign-loops-malign-functions=%d n'est pas entre 1 et %d-malign-jumps est obsolète, utiliser -falign-loops-malign-jumps=%d n'est pas entre 1 et %d-malign-loops=%d est obsolète, utiliser -falign-loops-malign-loops=%d n'est pas entre 0 et %d-malign-loops=%d n'est pas entre 1 et %d-mapcs-26 et -mapcs-32 ne peuvent être utilisés ensembles-mapcs-stack-check incompatible avec -mno-apcs-frame-max-stackframe=%d n'est pas utilisable, n'est pas entre 0 et %d-mbig-endian et -mlittle-endian ne peuvent être utilisés ensemble-mbnu210 est ignoré (option obsolète)-mbranch-cost=%d n'est pas entre 0 et 5-mbsd et -mxopen incompatibles-mbsd et -pedantic incompatibles-mcall-aixdesc doit être pour un système à octets de poids fort-mcmodel= n'est pas supporté sur les systèmes de 32 bits-membedded-pic et -mabicalls sont incompatibles-mentry n'a de sens qu'avec -mips-16-mhard-float n'est pas supporté-mieee n'est pas supporté sur Unicos/Mk-mieee-with-inexact n'est pas supporté sur Unicos/Mk-mips%d ne supporte pas les registres FP de 64 bits-mips%d ne supporte pas les registres GP de 64 bits-mips%d n'est pas supporté-mlong-double-64 n'est pas permis avec -m64-mmultiple n'est pas supporté sur des système à octets de poids faible-mpic-register= est inutile sans -fpic-mpreferred-stack-boundary=%d n'est pas entre %d et 12-mregparm=%d n'est pas entre 0 et %d-mrelocatable et -mcall-%s sont incompatibles-mrelocatable et -mno-minimal-toc sont incompatibles-mrelocatable et -msdata=%s sont incompatiblesla conversion d'appel -mrtd n'est pas supporté en mode 64 bits-ms2600 est utilisé sans -ms-msdata=%s et -mcall-%s sont incompatibles-mshort-data-%s et PIC sont incompatibles-mshort-data-%s est trop grande -msingle-float et -msoft-float ne peuvent être spécifiés ensembles-msoft-float et -mhard_float ne peuvent être utilisées ensembles-mstring n'est pas supporté sur des système à octets de poids faible-msystem-v et -mthreads sont incompatibles-msystem-v et -p sont incompatibles-mtrap-large-shift et -mhandle-large-shift sont incompatibles-mxopen et -pedantic incompatiblesl'option -p n'est pas supportée: utitilse -pg à la place-p profilage n'est plus supporté. Utiliser -pg à la place.argument manquant pour l'option -param-pedantic et -traditional sont mutuellement exclusives-pg et -fomit-frame-pointer sont incompatibles-pipe n'est pas supporté-pipe n'est pas supporté-shared n'est pas valide avec -mcoff-static n'est pas valide avec -mcoff-symbolic n'est pas valide avec -mcoff-traditional et -ansi sont mutuellement exclusives-traditional est dépréciée et peut être enlevée dans le futur-traditional n'est pas supporté en C++-trigraphs et -traditional sont mutuellement exclusivesLe contenu du fichier .da a été épuisé trop rapidementLe contenu du fichier .da a été épuisé trop rapidement + Le contenu du fichier .da n'a pas été épuiséLe contenu du fichier .da n'a pas été épuisé + mode 31 bitsFPU 32381jeu d'instructions 387 désactivé, arithmétique SSE est utilisémode 64 bits: + : « %s » option JDK1.1(TM);; Statistiques combinées: %d tentatives, %d substitutions (%d requérant un nouvel espace), + ;; %d succès. + + ;; traitement de blocs de %d à %d, %d initialisés. + Code réentrant APCS n'est pas supporté. IgnoréASSIGN à la variable est trop petitl'étiquette affectée ne peut s'insérer dans « %A » à %0 - utilisation d'un voisinage plus grandspécificateur dans ASSIGN FORMAT est trop petitvariable cible par ASSIGN GOTO est trop petiteSpécificateur d'accès à %0 doit suivre immédaitement la déclaration de type dérivé à %1 sans intervention de déclarationsspécificateur d'accès ou déclaration PRIVATE à %0 invalide pour une définition de type dérivé à l'intérieur d'autre chose que la portion de spécification d'un moduleAjouter un répertoire pour la recherche par INCLUDEAjouter un répertoire au chemin des classesAjouter des commentaires additionnels à la sortie de l'assembleurImprimer des informations additionnelles en mode débugAligner toutes les étiquettesAligner toutes les boucles sur des frontières de 32 octetsAligner le code et les données sur 32 bitsAligner le code sur des frontières de 8 octetsAligner la destination des opérations sur les chaînesAligner les doubles sur des frontières de motsAligner les étiquettes qui sont seulement atteintes par sautsAligner quelques doubles sur des frontières de mots doublesAligner le début des fonctionsAligner le début des bouclesAligner sur >frontières de motsAligner à la base du type du champ de bitsAligner les variables sur des frontières de 16 bitsAligner les variables sur des frontières de 32 bitsPermettre $ dans les noms de symbolesPermettre l'interchangeabilité de INTEGER et LOGICALPermettre REAL(Z) et AIMAG(Z) pour les DOUBLE COMPLEX ZAutoriser la génération RTL pour produire des opérandes insn 3 invalidesPermettre des types différents pour les arguments de l'opérateur ?Autoriser le maintien des adresses de fonction dans les registresPermettre l'optimisation des maths qui peut violer les standards IEEE ou ANSIPermettre le copie ordinaire des variable affectéesAutoriser le mouvement spéculatif de plusieurs chargementsAutoriser le mouvement spéculatif de non chargementsAutoriser le mouvement spéculatif de quelques chargementsPermettre l'utilisation de $ à l'intérieur d'identificateursAutoriser un compteur non signé d'itération pour RPTB/DBConvention alternative d'appelsspécificateur alternatif de retour à %0 invalide à l'intérieur de la fonctionspécificateur alternatif de retour à %0 invalide à l'intérieur de l'unité du programme principalConvention alternative d'appelsToujours vérifier dans les archives de classes non générées gcjToujours passer des arguments en virgule flottante en mémoireToujours traiter les champs de bits comme si la taille entièreutilisation ambiquë de l'intrinsèque « %A » à %0 [info -f g77 M CMPAMBIG]Argument #%B de « %A » est %C à %0 mais est %D à %1 [info -f g77 M GLOBALS]tableau « %A » à %0 est trop grand pour être traitéValeur de l'élément du tableau à %0 en dehors de la plage définiespécification de tableau ou de sous-chaîne pour « %A » est hors gamme dans la déclaration EQUIVALENCETableau ou sous-chaîne de spécification pour « %A » hors gamme dans la déclaration à %0référence de tableau vers une variable scalaire « %A » dans une déclaraion EQUIVALENCEsouscript de tableau #%B hors gamme pour la déclaration EQUIVALENCE de « %A »souscript de tableau #%B hors gamme pour l'initialisation de « %A » dans la déclaration à %0tableau fourni à %1 pour l'argument factice « %A » dans la déclaration de référence de fonction à %0Assumer la présence de GASAssumer que tous les doubles sont alignésAssumer que les arguments n'ont pas d'alias l'un vers l'autre ou globauxAssumer que les arguments peuvent avoir des alias globaux mais pas l'un vers l'autreAssumer un système à octets de poids fort pour les octets et faible pour les motsAssumer que les int sont des entiers de 8 bitsAssumer que les fonctions natives sont implantées et qu'elles utilisent JNIAssumer un environnement d'exécution normal CAssumer un mauvais alignement possible des doublesAssumer un petit espace d'adressageAssumer que des règles stricts d'alias s'appliquentAssumer que le CPU cible est un système à octets de poids fortAssumer que le CPU cible est un système à octets de poids faibleAssumer que les pointeurs peuvent être aliasésAssumer que les pointeurs ne peuvent pas être aliasésAssumer que les librairies standards & main peuvent ne pas existerAssumer que les accès non alignées sont traités par le systèmeAssumer que tous les compteurs d'exécution sont à zéro. + À %0, «!» et «/*» ne sont pas des délimiteurs de commentaire validesÀ %0, fichier INCLUDE %A existe mais n'est pas lisibleÀ %0, imbrication du INCLUDE est trop profondeÀ %0, spécifier une AFFECTATION au lieu d'un OPÉRATEUR dans la déclaration d'INTERFACE spécifiant un opérateur d'affectation (=)À %0, spécifier l'OPÉRATEUR au lieu de l'AFFECTATION pour le déclaration d'INTERFACE ne spécifiant pas d'opérateur d'affectation (=)Au niveau supérieur:Tentative de définit une zone commmue par EQUIVALENCE « %A » et « %B » à %0Tentative pour détruire le prologue/épilogue insn:Tentative d'étendre la zone COMMON au delà de son point de départ via EQUIVALENCE de « %A »Tented de remplir de délais les fentes des instructions de branchementTentative de conservation de la pile alignée selon une puissance de 2Tentative de fusion de constantes identiques à travers des unités de compilationTentative de fusion de constantes identique et des variables constantesTentative d'augmentation d'une constante de valeur zéro à la puissance %0Tentative de spécifier une seconde valeur initial pour « %A » à %0Tentative de spécifier une seconde valeur initiale pour l'élément « %A » à %0Tenter de supporter le style de langage C traditionnel K&RAuto pré/post décrementation incrémentation permiseAuto pré/post décrementation incrémentation non permiseAligner automatiquement les branchements cibles pour réduire les pénalités de branchementnom du BLOCK DATA à %0 superflue, aucun nom spécifié à %1Barres obliques inverses dans les constantes caractères/hollerith ne sont pas particulières (style C)Modèle de mémoire grandecommun vide initialisé à %0Branchements coûteux à ce point (1-4, unités arbitraires)Éviter la cache de données pour les réf. mémoire volatilesLe style des commentaires en C++ n'est pas permis en ISO C89ne peut repérer le package par défaut « %s ». Vérifier la variable d'environnement CLASSPATH et l'accès aux archives.ne peut insérer « %A » tel que demandé par EQUIVALENCE en raison des restrictions d'alignementNe peut spécifier la dimension du tableau dans la déclarationNe pas décomposer l'adresseNe peut spécifier une expression d'initialisation = à %0 à moins que «::» n'apparaissae avant la liste d'objetsChanger seulement les 8 bits du bas du pointeur de pileChanger les coûts de branchement à l'intérieur du compilateurChanger le pointeur de pile sans désactiver les interruptionsChanger le seuil pour la conversion en une exécution conditionnelleChanger lorsque les instances du patron sont produitescaractère « %A » (par exemple) est en minuscule dans le nom de symbole à %0caractère « %A » (par exemple) est en majuscule dans le nom de symbole à %0caractère « %A » n'est pas suivi par un caractère en minuscule dans le nom de symbole à %0constante caractère à %0 n'a pas d'apostrophe de fermeture à %1Vérifier les erreurs de syntaxes et puis stopperVérifier la valeur retournée de newChoisir la classe dont la méthode principale devrait être utiliséechoisir l'encodade d'entrée (par défaut provient de la locale)Déclaration de classe ou d'interface attendueTaille du code: small, medium ou largebloc commun « %A » est %B %D en longueur à %0 mais %C %E à %1bloc commun « %A » est sauvegardé, explicitement ou implicitement, à %0 mais non pas %1Compiler comme si le programme était écrit en minusculesCompiler comme si le programme était écrit en majusculesCompiler pour des pointeurs de 32 bitsCompiler pour des pointeurs de 64 bitsCompile pour ETRAX 100 (CRIS v8)Compilé pour ETRAX 4 (CRIS v3)Compiler pour un 68HC11Compiler pour un 68HC12Compiler pour le MMU-less Etrax 100-based de système elinuxCompiler pour le THUMB et non pas le ARMCompiler pour le processeur v850Compiler pour ABI v8plusCompiler seulement pour ISO C89Compiler les pointeurs comme des triplets: valeur, base et finCompiler en mode entier de 16 bitsCompiler en mode entier de 32 bitsConfiguré avec: %s + spécifications conflictuelles de contrôle d'E/S à %0 et %1Considérer l'accès mémoire lent pour la taille d'octetsConsidérer toutes les référence en mémoire comme faite par des pointeurs volatilesConsidérer toutes les références mémoire à des données globales comme volatilesConsidérer toutes les références mémoire à des données statiques comme volatilesConsidérer le type « int » comme ayant une largeur de 16 bitsConsidérer le type « int » comme ayant une largeur de 32 bitsattribut ConstanValue du champ « %s » a un type erronéNom de construit à %0 ne concorde pas avec un nom de construit contenant des construits DONom de construit à %0 n'est pas le même que celui à %1Nom de construit à %0 superflue, aucun nom de construit spécifié à %1L'invaocation d'un constructeur doit être la première chose dans un constructeurIndicateur de continuation à %0 doit apparaître en colonne 6 [info -f g77 M LEX]Contrôler le mode trappe IEEEContrôler le mode d'arondissement FP généréContrôler la précision donnée des exceptions FPConvertir les constantes flottantes en constantes en simple précisionCopier les constantes d'adresses mémoire dans les registres avant de les utiliserCopier les opérandes mémoire dans les registres avant de les utiliserCopyright © 2001 Free Software Foundation, Inc. + Copyright © 2002 Free Software Foundation, Inc. + Ne pourrait pas ouvrir le fichier de blocs de base %s. + Ne pourrait pas ouvrir le fichier de données %s. + N'a pu ouvrir le fichier d'entrée %s. + Ne pourrait pas ouvrir le fichier de flux du programm %s. + N'a pu ouvrir le fichier source %s. + Créer une application de type GUICréer une application de type consoleCréer les fichiers de données nécessaires par gcovCréation de %s. + Déclaration DO utilisant une référence à l'étiquette à %0 et la définition d'étiquette à %2 séparés par un bloc non complet débutant à %1Déclaration DO utilisant une référence à l'étiquette à %1 suis sa définition à %0Déclaration DO utilisant des références à l'étiquette à %0 et %2 séparés par un bloc non complet débutant à %1DW_LOC_OP %s n'est pas implanté + Mettre au point le support d'argument dans le compilateurMettre au point le support d'adresses dans le compilateurMettre au point le support de la pile dans le compilateurDéférer le dépilage des arguments de fonction de la pile plus tardDétruire les intrinsèques MIL-STD 1753Détruire les intrinsèques libU77Détruire les intrinsèques libU77 ayant des interfaces erronéesDétruire les supports F90 intrinsèques non Fortran 77Détruire les supports VXT Fortran des intrinsèques non Fortran-77Détruire les supports f2c intrinsèques non Fortran 77Détruire les supports g77 intrinsèques non Fortran 77Détruire les vérifications de pointeurs nul inutilesDéterminer le standard du langageRépertoire où les fichiers de classe devraient être écritsInterdire les infos de lignes de mise au point Dwarf 2 via GNU tel queDésactiver les intrinsèques MIL-STD 1753Interdire les instructions MPY||ADD et MPY||SUBInterdire les extensions Transmeta picoJavaDésactiver la vérificaitions des affectations dans les tableaux d'objetsVérification automatique désactivée des bornes de tableauxDésactiver la mise au pointInhiber les diagnostiques fatals à propos des problèmes entre les procéduresInterdire les instructions fusionnés FP de multiplication/addition et de multiplication/soustractionDésactiver les intrinsèques libU77Désactiver les intrinsèques libU77 ayant des interfaces erronéesDésactiver les nouvelles options en développementDésactiver les supports g77 intrinsèques non Fortran 77Désactiver les supports F90 intrinsèques non Fortran 77Désactiver les supports VXT Fortran des intrinsèques non Fortran-77Désactiver les supports f2c intrinsèques non Fortran 77Désactiver les diagnostiques optionnelsInterdire les instructions parallèlesDésactiver la passe de réorganisationDésactiver l'ajout de caractères de soulignement aux externesDésactiver l'utilisation d'instruction DBInterdire l'utilisation de l'instruction RTPBInterdire l'utilisation de l'instruction RTPSInterdire l'utilisation des instructions conditionnelles moveInterdire l'utilisation de sdata/scommon/sbssInhiber les avertissements à propos des problèmes entre les procéduresDésactiver toutes les options laidesInterdire un compteur non signé d'itération pour RPTB/DBÉcarter les fonctions virtuelles non utiliséesAfficher les statistiques de temps de compilationAfficher les statistiques accumulés durant la compilationdivision par 0 (zéro) à %0 (IEEE pas encore supporté)Ne pas générer le code pour un 68851Ne pas aligner le code sur des frontières de 8 octetsNe pas aligner la destination des opérations sur les chaînesNe pas allouer de registre BKNe pas permettre les champs de bits de traverser des frontières de motsNe pas calculer la taille des immédiats dans les opérations sur les bitsNe pas assumer la présence de GASNe pas aligner automatiquement les branchements cibles pour réduire les pénalités de branchementNe pas compiler pour ABI v8plusNe pas produire de modes d'adressage avec des affectations avec effet de bordNe pas produire des constantes entières complexes en mémoire en mode lecture seulementNe pas générer de prologue ou d'épilogue de fonctionNe pas produire le code de vérification de la pileNe pas autoriser la relâche par l'éditeur de liensNe pas générer de directives .sizeNe pas générer du code H8/300HNe pas générer du code H8/SNe pas générer du code H8/S2600Ne pas générer des écritures par octetsNe pas générer des instructions « char »Ne pas générer le code pour un Sun FPANe pas générer du code pour vérifier les exceptions spécifiquesNe pas générer du code qui utilise le FPUNe pas générer les instructions multiples de chargement/stockageNe pas générer les instructions de mise à jour de chargement/stockageNe pas générer des instructions multmNe pas générer l'information pour un type de descripteur pour l'exécutionNe pas générer sin, cos, sqrt pour le FPUNe pas générer les instructions chaînes pour les déplacements de blocsNe pas générer les sauts de table insnsNe pas permettre l'enlignage dans toutes les opérations portant sur les chaînesNe pas rendre en ligne un membre de fonction par défautNe pas utiliser une disposition de type Intel's v1.3 gccNe pas charger le registre PIC dans les prologue de fonctionNe pas rendre adjacentes les instructions short en instructions parallèlesNe pas déplacer les instruction dans le prologue de fonctionNe pas obéir à la sémantique du contrôle d'accèsNe pas optimiser sur mesure les instructions d'appel avec l'assembleur et l'éditeur de liensNe pas passer -assert pure-text à l'éditeur de liensNe pas effectuer une optimisation sur mesure des appelsNe pas permettre les accès non alignésNe pas promouvoir les flottants à des doubles avec -traditionalNe pas fournir d'adresse de départ par défaut 0x100 du programmeNe pas placer de globaux non initialisés dans la section communeNe pas reconnaître les mots clés définis GNUNe pas reocnnaître aucun construit dans les fonctionsNe pas reconnaître le mot clé « asm »Ne pas retourner les valeurs de fonctions dans les registres FPUNe pas sérialiser les références à la mémoire volatile avec des instructions MEMWNe pas stocker les flottants dans les registresNe pas stocker les var. locales dans redistres d'argumentsNe supporte pas les fonctions internes 3DNOW!Ne supporte pas les fonctions internes MMX et SSE et la génération de codeNe supporte pas les fonctions internes MMXNe supporte pas les fonctions internes MMX, SSE et SSE2 et la génération de codeNe pas supprimer les avertissements pour les en-têtes systèmeNe pas ajuster l'alignement du code et des sections de données statiquesNe pas ajuster l'alignement de la pileNe pas ajuster l'alignement les sections de données dynamiquesNe pas utiliser les registres réservés ABINe pas utiliser les mathématiques IEEE pour les comparaisons FPNe pas utiliser les instructions MPYI pour C3xNe pas utiliser le jeu d'instructions du POWERNe pas utiliser le jeu d'instructions du POWER2Ne pas utiliser le jeu d'instructions du PowerPCNe pas utiliser la convention d'édition de lien SkyNe pas utiliser les registres FP sur VAXNe pas utiliser des adresses qui allouent des registres globauxNe pas utiliser les entrées alternatives pour les fonctions de feuillesNe pas utiliser les instructions de champs de bitsNe pas utiliser les modes d'adressage complexesNe pas utiliser du code conditionnel pour des instructions normalesNe pas utiliser les modes directs d'adressage pour des registres logicielsNe pas utiliser le modèle de fenêtre de registre platNe pas utiliser les registres FPNe pas utiliser le matériel pour virgule flottanteNe pas utiliser l'unité FP matérielleNe pas utiliser les instructions matérielles quad FPNe pas utiliser les instructions FP de multiplications avec accumulationsNe pas utiliser les instructions push pour sauvegardes les arguments sortantsNe pas utiliser la zone-rouge pour le code x86-64Ne pas utiliser le registre sbNe pas utiliser les registres pour le passage d'argumentsNe pas utiliser le biais de la pileNe pas utiliser des structs avec alignement plus fort pour les copies de mots-doublesNe pas utiliser l'option Xtensa MAC16Ne pas utiliser l'option Xtensa MIN/MAXNe pas utiliser l'option Xtensa MUL16Ne pas utiliser l'option Xtensa MUL32Ne pas utiliser l'option Xtensa NSANe pas utiliser l'option Xtensa SEXTNe pas utiliser l'option des registres booléens XtensaNe pas utiliser l'option de densité du code XtensaNe pas utiliser l'unité matérielle pour virgule flottante XtensaNe pas utiliser les instructions de champs de bitsNe pas utiliser l'instruction de divisionNe pas utiliser des références mémoire non alignéesNe pas utiliser le jeu d'instructions VisualNe pas avertir à propos de l'utilisation de « long long » avec -pedanticNe pas avertir si les méthodes héritées ne sont pas implantéesNe pas contourner le bug matériel de la multiplicationNe pas contourner le bug matériel de stockageNe pas renommer les symboles pour BSDNe pas renommer les symboles pour X/OPENEffectuer la passe d'optimisation complète des des déplacements par les registresEffectuer la passe d'optimisation de la propagation-de-copie par registreRenommer les registres lors de la passe d'optimisationNe pas aligner les items dans le code ou les donnéesNe pas aligner à la base du type du champ de bitsNa pas toujours passer des arguments en virgule flottante en mémoireNe pas annoncer la dépréciation des options du compilateurNe pas assumer que les accès non alignées sont traités par le systèmeNe pas faire d'appel de fonction de vidange de la cacheNe pas renommer les symbolesNe pas produire de stop bits avant et après les asms étendusNe pas forcer les constantes dans les registresNe pas générer du code pour une unité de manipulation de bitsNe pas générer du code pour les appels prochesNe pas générer du code pour les sauts prochesNe pas générer des instructions fusionnés de multiplication/additionNe pas laisser l'allocateur de registres utiliser les registres ybaseNe pas optimiser les déplacements de blocsNe pas optimiser les chargements d'adresses lui/addiuNe pas afficher les statistiques de compilationNe pas passer les paramètres par les registresNe pas avertir et publiciser l'utilisation des extensions de MicrosoftNe pas placer les constantes en virgule flottante dans le TOCNe pas placer les constantes symboles+décalages dans le TOCNe pas imprimer des informations additionnelles en mode débugNe pas produire du code relocalisable au moment de l'exécutionNe pas empiler le compteur d'arg, dépend de la table de symbolesNe pas placer les constantes non itialisées dans le ROM (a besoin de -membedded-data)Ne pas sauvegarder DP à travers ISR dans le modèle de mémoire petiteNe pas çéduler le début et la fin de la procédureNe pas initialiser les définitions WindowsNe pas fixer la chaîne arrière (plus rapide mais plus difficle à mettre au point)Ne pas intercepter les divisions par zéros sur des entiersNe pas intercepter les débordement lors de divisions avec des entiersNe pas utiliser les instructions AltiVecNe pas utiliser EABINe pas utiliser GP en mode relatif aux sections sdata/sbssUtiliser le code PIC IrixNe pas utiliser les instructions MIPS16Ne pas utiliser le code PIC OSFNe pas utiliser les mnémoniques P pour les branchementsNe pas utiliser le groupe d'instructions optionnelles d'utilité général du PowerPCNe pas utiliser le groupe d'instructions graphiques optionnelles du PowerPCNe pas utiliser le jeu d'instructions du PowerPC-64Ne pas utiliser le ROM au lieu de la RAMNe pas utiliser les noms alternatifs de registresNe pas utiliser brasNe pas utiliser la cache de données pour les réf. mémoire volatilesNe pas utiliser le code PIC enchâsséNe pas utiliser le FP matérielNe pas utiliser les appels indirectsNe pas utiliser la post-passe de type mips-tfile de l'assembleurNe pas utiliser les multiplications par accumulationsNe pas utiliser un simple FP (32 bits) seulementNe pas utiliser les noms de registres symboliquesNe pas avertir à propos des formats de strftime ne laissant que 2 chiffres pour l'annéeNe pas avertir à propos d'un surplus d'arguments pour des fonctions de formatNe pas avertir lorsque toues les ctors/dtors sont privésNe pas avertir lorsque des fonctions amis sans patron sont déclarés à l'intérieur d'un patronNe pas avertir lors de la conversion des types de pointeur en membres de fonctionsNe pas contourner le bug matériel des premiers 4300Dégrader les erreurs de conformité en des avertissementsTableau factice dont la taille des dimensions (1) est assuméeVidange des déclaration dans un fichier .declVidanger l'unité de traduction complète dans un fichierduplication ou chevauchement des valeurs/plages de case à %0 et %1déclaration END à %0 manquante mot clé « %A » requis pour une procédure interne ou un module lié à %1ERREUR: trop de blocs de base dans le fichier .bb %s + Produire du code de 16 bits pour le relocalisation des petites zones de donnéesProduire du code de 32 bits pour le relocalisation des petites zones de donnéesProduire du code objet ELFProduire du code conforme IEEE, avec exceptions inexactesProduire du code conforme IEEE, sans exceptions inexactesProduire du code objet ROSEProduire les informations du graphe d'appelProduire du code compatible avec les outils TIProduire du code pour le processeur B Itanium (TM)Produire du code pour les octets/mots des extensions ISAProduire du code pour les extensions ISA de comptageProduire du code pour les déplacements FP et sqrt des extensions ISAProduire du code pour les extensions vidéo ISAProduire du code pour utiliser les extensions GASProduire du code utilisant des directives explicites de relocalisationProduire les symboles communs comme des symboles faiblesProduire l'information des références croiséesProduire du code à moitié PICProduire les infos d'identification dans le fichier .sProduire des information spéciales de mise au point pour COMMON et EQUIVALENCE (désactivé)Produire le code de vérification de la pileProduire des variables constantes statiques même si elles ne sont pas utiliséesProduire de stop bits avant et après les asms étendusProduire des informations de mise au point dans le code assembléAutoriser les infos de lignes de mise au point Dwarf 2 via GNU tel queAutoriser les instructions MPY||ADD et MPY||SUBAutoriser la propagation SSA de constante conditionnelleAutoriser les optimisations SSAAutoriser les extensions Transmeta picoJavaAutoriser l'élimination agressive SSA du code mortAutoriser l'instanciation automatique de patronAutoriser la mise au point par la finAutoriser la compatibilité avec iC960 v2.0Autoriser la compatibilité avec iC960 v3.0Autoriser la compatibilité avec l'assembleur iC960Autoriser la sortie lors de la mise au pointPermettre la mise au pointAutoriser le traitement des exceptionsPermettre les instructions fusionnés FP de multiplication/addition et de multiplication/soustractionAutoriser la relâche par l'éditeur de liensAutoriser la relâche de l'éditeur de liensAuoriser la rélâche par l'éditeur de liensAutoriser les optimisations des trous spécifiques à une machineAutoriser la plupart des messages d'avertissementAutoriser les nouvelles options en développementAutoriser les instructions parallèlesAutoriser la sauvegarde autour des appels de fonctionAutoriser le çédulage à travers les blocs de baseAutoriser le sondage de la pileAutoriser le support des grands objetsActiver l'utilisation d'instruction DBAutoriser l'utilisation de l'instruction RTPBAutoriser l'utilisation de l'instruction RTPSAutoriser l'utilisation des instructions conditionnelles moveAutoriser l'utilisation de sdata/scommon/sbssAutoriser l'optimisation des déplacements par registreAutoriser l'exécution de la passe rtl sur les trous avant sched2Autoriser l'estimation des probabilités de branchementFin de la liste de recherche. + Fin du fichier source avant la fin du bloc débutant à %0séquence d'échappement à %0 hors gamme pour le type caractèreOpérateur binaire attendu entre les expressions à %0 et à %1déclaration de type explicite pour l'intrinsèque « %A » en désaccord avec l'invocation à %0Exporter les fonctions même si elles peuvent être inlineexpression à %0 a un type de données ou un rang incorrect pour son contexteprocédure externe « %A » est pass comme argument actuel à %0 mais non pas déclaré explicitement déclaré EXTERNALLes symboles externes sont préfixés d'un caractère de soulignementVirgule superflue dans la déclaration de FORMAT à %0Champ attenduNoms de champs à %0 pour la définition externe de structure -- les spécifier dans une déclaration subséquente de déclaration RECORD à la place«&» en première colonne de continuation à %0les opérations virgule flottante peuvent être attrappéesPour elinux, faire la requête pour un taille de pile spécifique pour ce programmePour les librairies intrinsèques: passer tous les paramètres dans les registresForcer la génération RTL pour produire des opérandes insn 3 validesForcer pour toutes les boucles des calculs invariants en dehors des bouclesForcer les constantes dans les registres pour améliorer la montéeForcer les fonctions à être alignés sur des frontières de 2 octetsForcer les fonctions à être alignés sur des frontières de 4 octetsoption FORTRAN 90 à %0 non supportéeForme spécifique Fortran de -fbounds-checkDébuts des fonction alignés selon une puissance de 2GCC ne supporte pas encore adéquatement « [* ]» dans les déclarateurs de tableauGCSE désactivé: %d > 1000 blocs de base et %d >= 20 blocs edges/basicGCSE désactivé: %d vlocs de base et %d registresGNU C ne supporte pas -C sans utiliser -EGNU CPP version %s (cpplib)Générer le code 29000Générer le code 29050Générer du code 32 bits pour i386Générer du code 64 bits pour x86-64Générer des trames de pile conformes à APCSGénérer des en-têtes C pour les options spécifiques de la plate-formeGénérer du code CAGénérer du code CFGénérer les informations de mise au point du format COFFGénérer les informations de mise au point du format DWARF-1Générer les informations de mise au point DWARF-2Générer la sortie ELFGénérer du code H8/300HGénérer du code H8/SGénérer du code H8/S2600Générer du code JAGénérer du code JDGénérer du code JFGénérer du code KAGénérer du code KBGénérer du code MCGénérer du code SAGénérer du code SBGénérer des infos de mise au point de format STABSGénérer des infos de mise au point de format VMSGénérer les informations de mise au point du format XCOFFGénérer un appel pour stopper si une fonction sans retour retourne un résultatGénérer du code de système à octets de poids fortGénérer des données pour systèmes à octets de poids fortGénérer l'appel insn comme un appel indirect, si nécessaireGénérer des instructions « char »Générer du code qu'un assembleur enchâssé peut traiterGénérer le code en assumant que le bit DW n'est pas initialiséGénérer le code en assumant que le bit DW est initialiséGénérer du code pour CPU C30Générer du code pour CPU C31Générer du code pour CPU C32Générer du code pour CPU C33Générer du code pour CPU C40Générer du code pour CPU C44Générer du code pour GNU tel queGénérer du code pour GNU ldGénérer du code pour l'environnement GNU d'exécutionGénérer du code pour Intel tel queGénérer du code pour Intel ldGénérer le code pour l'environnement d'exécution du NeXTGénérer le code pour un 520XGénérer le code pour un 68000Générer le code pour un 68020Générer le code pour un 68030Générer du code pour un 68040Générer le code pour un 68040 sans les nouvelles instructionsGénérer le code pour un 68060Générer le code pour un 68060 sans les nouvelles instructionsGénérer le code pour un 68302Générer le code pour un 68332Générer le code pour un 68851Générer le code pour un 68881Générer le code pour un DLLGénérer le code pour un Sun FPAGénérer le code pour un Sun Sky boardGénérer du code pour une unité de manipulation de bitsGénérer le code pour un cpu32Générer du code pour un 11/10Générer du code pour un 11/40Générer du code pour un 11/45Générer du code pour un système à octets de poids fortGénérer le code pour le c1Générer le code pour le c2Générer le code pour le c3Générer le code pour le c34Générer le code pour les fonctions même si elles sont complètement en ligneGénérer le code pour le CPU donnéGénérer du code pour la partie haute de la mémoireGénérer du code pour un système à octets de poids faibleGénérer du code pour la partie basse de la mémoireGénérer du code pour la mémoire map1Générer du code pour la mémoire map2Générer du code pour la mémoire map3Générer du code pour la mémoire map4Générer du code pour les appels prochesGénérer du code pour les sauts prochesGénérer le code pour le C300Générer le code pour le C400Générer du code pour M*Core M340Générer le code pour la version de CPU ou le circuit spécifiqueGénérer du code que l'assembleur UNIX peut traiterGénérer du code pour vérifier les bornes avant de dé-référencer les pointeurs et les tableauxGénérer du code pour vérifier les bornes des souscripts et des sous-chaînesGénérer le code en utilisant des écritures par octetsGénérer du code qui utilise le FPUGénérer le code avec les appels de librairies en virgule flottanteGénérer du code sans registre GPGénérer les information de mise au point dans le format étenduGénérer les information de mise au point dans le format par défautgénérer des résultats de division avec reste ayant le même signe que le diviseur (pas le dividende)Générer les extensions des informations de mise au point du format DWARF-1Générer des infos de mise au point de format STABS étenduGénérer les extensions de mise au point du format XCOFFGénérer les informations externes de légendeGénérer les mathématiques en virgule flottante avec le jeu d'instructions donnéesGénérer des instructions fusionnés de multiplication/additionGénérer les divisions en ligne, optimisées pour la latenceGénérer les divisions en ligne, optimisées pour la quantitéGénérer du code de système à octets de poids faibleGénérer des données pour systèmes à octets de poids faibleGénérer les instructions multiples de chargement/stockageGénérer les instructions de mise à jour de chargement/stockageGénérer du code relatif au compteur de programme (PC)Générer du code indépendant de la position, si possibleGénérer des instructions prérecherchées, si disponible, pour les tableaux dans les bouclesGénérer du code PIC ré-entrantGénérer du code auto-relocalisableGénérer sin, cos, sqrt pour le FPUGénérer les instructions chaînes pour les déplacements de blocsGénérer des tables étendues exactes pour chaque bornes d'instructionnom global « %A » à %0 a un type différent à %1 [info -f g77 M GLOBALS]nom global « %A » défini à %0 est déjà défini à %1 [info -f g77 M GLOBALS]nom global « %A » est %B à %0 mais est %C à %1 [info -f g77 M GLOBALS]parenthèses gratuites entourant le construit DO implicite à %0Avoir un frontal d'émulation pour l'arithmétique COMPLEXE pour éviter les bugséchappement hexadécimal à %0 hors gammeCacher les intrinsèques MIL-STD 1753Cacher les intrinsèques libU77Cacher les intrinsèques libU77 ayant des interfaces erronéesCacher les supports g77 intrinsèques non Fortran 77Cacher les supports F90 intrinsèques non Fortran 77Cacher les supports VXT Fortran des intrinsèques non Fortran-77Cacher les supports f2c intrinsèques non Fortran 77Les constantes Hollerith et sans type ne sont pas passés comme argumentsConstante Hollerith à %0 spécifiée %A a plus de caractères que ceux présents dans %1Erreur E/S sur la sortieICE: emit_insn utilisé où emit_jump_insn est attendu: + INCLUDE à %0 n'est pas la seule déclaration sur la ligne sourceISO C ne permet pas de «;» additionnel en dehors d'une fonctionISO C ne permet les macros variables nomméesISO C ne permet pas l'usage de « varargs.h »ISO C ne supporte «++» et «--» sur les types complexesISO C ne supporte pas «~» pour une conjugaison complexeISO C ne supporte pas les type « complex » d'entiersISO C ne supporte pas les « complex » utilisé comme «double complex »ISO C ne supporte pas les structs/unions sans nomISO C interdit %s entre le pointeur de fonction et « void * »ISO C interdit « goto *expr; »ISO C interdit un fichier source videISO C interdit les groupes d'accolades à l'intérieur d'expressionsISO C interdit le transtypage non scalaire au même typeISO C interdit le transtypage vers un type unionISO C interdit la comparaison de « void * » avec un pointeur de fonction pointerISO C interdit une expression conditionnelle entre « void * » et un pointeur de fonctionISO C interdit une expression conditionnelle dont un seul côté est « void »ISO C interdit les types volatile ou de constante de fonctionISO C interdit la définition de données sans type ou classe de stockageISO C interdit les accolades vides d'initialiseursISO C interdit la déclaration de paramètres vers l'avantISO C interdit les références avant vers un type « enum »ISO C interdit les constante numérique de nombres imaginairesISO C interdit la déclaration d'étiquetteISO C interdit la déclaration de membre sans aucun membreISO C interdit les fonctions imbriquéesISO C interdit l'omission du terme milieu de l'expression ?:ISO C interdit les comparaisons ordonnées de pointeurs à des fonctionsISO C interdit le paramètre « %s » faisant ombrage au typedefISO C interdit les types de fonction qualifiéesISO C interdit les type retourné d'une fonction void qualifiéISO C interdit les expressions de bornes dans les déclarations de « switch »ISO C interdit de spécifier les bornes des éléments à initaliserISO C interdit le souscriptage de type « register » de tableauISO C interdit l'adresse d'une expression d'une étiquetteISO C interdit l'adresse d'une expression transtypéeISO C interdit l'utilisation de transtypage d'une expression comme lvaluesISO C interdit l'utilisation d'expressions composées comme lvalueISO C interdit l'utilisation d'expressions conditionnelles comme lvalueISO C interdit les tableaux de taille zéro « %s »ISO C interdit la conversion d'argument pour un type unionISO C requiert un argument nommé devant « ... »ISO C requiert des blancs après le nom de macroISO C restreint les valeurs de l'énumérateur aux bornes d'un « int »ISO C++ ne permet pas « %s » dans #ifISO C++ ne permet pas «%T::%D» d'être défini comme «%T::%D»ISO C++ ne permet pas les valeurs retournées nomméesISO C++ ne supporte pas « long long »ISO C++ interdit %s entre les pointeurs de type « void * » et les pointeurs de fonctionsISO C++ interdit %utilisation d'un pointeur de type « %T »ISO C++ interdit %sing un enumISO C++ interdit l'aggrégation d'initialiseur à newISO C++ interdit une condition vide pour « %s »ISO C++ interdit l'application de « sizeof » sur un type de fonctionISO C++ interdit l'application de « sizeof » sur le membre d'une fonctionISO C++ interdit l'application de « sizeof » sur l'expression d'un type de fonctionISO C++ interdit l'application de « sizeof» sur un type «void » qui est un type incompletISO C++ interdit l'utilisation de parenthèses autour du type pour les dimensions de tableaux avec newISO C++ interdit l'affectation de tableauxISO C++ interdit les groupes d'accolades à l'intérieur des expressionsISO C++ interdit l'appel de «::main» à partir de l'intérieur du programmeISO C++ interdit le transtypage d'un type non référencé utilisé comme lvalueISO C++ interdit le transtypage entre un pointeur de fonction et un pointeur d'objetISO C++ interdit le transtypage vers un type tableau « %T »ISO C++ interdit la comparaison entre un pointeur et un entierISO C++ interdit les chaînes composéesISO C++ interdit les déclarations composées à l'intérieur des initialisationsISO C++ interdit les gotos calculésISO C++ interdit la déclaration de « %s » sans typeISO C++ interdit la définition de types à l'intérieur de %sISO C++ interdit l'initialisation intra-classe d'un membre statique non constant « %D »ISO C++ interdit l'initialisation d'un nouveau tableauISO C++ interdit l'initialisation d'un membre « %D »ISO C++ interdit l'initialisation d'une membre constant « %D » d'un type non entier « %T »ISO C++ interdit l'initialisation d'une nouvelle expression avec «=»ISO C++ interdit la déclaration d'étiquetteISO C++ interdit le membre « %D » avec le même non de la classe de fermetureISO C++ interdit le type imbriqué « %D » avec le même nom que la classe de fermetureISO C++ interdit les expressions d'initialiseur d'aggrégat de non constanteISO C++ inerdit l'omission du terme milieu de l'expression ?:ISO C++ interdit les expressions de bornes dans les déclarations de « switch »ISO C++ interdit les données de mmebres statiques « %D » avec le même nom comme classe de fermetureISO C++ interdit le souscriptage de non lvalue de tableauISO C++ interdit de prendre l'adresse d'une fonction «::main»ISO C++ interdit de prendre l'adresse d'une borne d'un membre de fontion pour former un membre à la fonction. Disons «&%T::%D»ISO C++ interdit de prendre l'adresse du transtypage vers une expression non lvalueISO C++ interdit de prendre l'adresse d'une étiquetteISO C++ interdit de prendre l'adress d'un membre de fonction non statique non qualifié pour former un pointeur d'un membre de fonction. Disons «&%T::%D»ISO C++ interdit l'utilisation de « %s » sur instanciations explicitesISO C++ interdit l'utilisation de « extern » sur instanciations explicitesISO C++ interdit l'usage de liste d'initialiseur pour initialiser la référence « %D »ISO C++ interdit l'utilisation d'un pointeur de type « void * » dans une soustractionISO C++ interdit l'utilisation d'un pointeur survers une fonction dans une soustractionISO C++ interdit l'utilisation d'un pointeur vers un membre dans une soustractionISO C++ interdit l'utilisation d'un pointeur survers une méthode dans une soustractionISO C++ interdit le tableau de taille variableISO C++ interdit les tableaus de taille variable « %D »ISO C++ interdit les tableaux de taille zéroISO C++ interdit les tableaux de taille zéro « %D »ISO C++ interdit les structs anonymesISO C++ interdit la conversion de «%#T» en « (...) »ISO C++ interdit la surcharge d'opérateur ?:ISO C89 ne supporte pas « [*] » dans les déclarateurs de tableauISO C89 ne supporte pas « long long »ISO C89 ne supporte pas « static » ou les qualificateurs de type dans les déclarateurs de tableau de paramètresISO C89 ne supporte pas les types « complex »ISO C89 ne supporte pas les membres flexibles d'un tableauISO C89 interdit le tableau « %s » dont la taille ne peut être évaluéeISO C89 interdit les mots composésISO C89 interdit les constantes entières de type long longISO C89 interdit les déclarations mélangés et de codeISO C89 interdit la spécification d'objets à initialiserISO C89 interdit le souscriptage de tableau non lvalueISO C89 interdit le tableau de taille variable « %s »ISO C99 requiert que les arguments restants soient utilisésISR %s requiert %d mots de var. locales, max est 32767.Identificateur attenduIgnorer l'attribut dllimport pour les fonctionsIgnorer dllimport pour fonctionsImplanter les vtables en utilisant des thunksdéclaration implicite de « %A » à %0le compte implicite de la boucle DO est à 0 (zéro) pour la variable itérative « %A » dans la déclaration à %0 le pas implicite de la boucle DO a un compte de 0 (zéro) pour la variable itérative « %A » dans la déclaration à %0 Dans %s « %s »:Dans %s: chevauchement de variable et plage d'exception à %dDans n'importe quoiDans l'unité du bloc de donnéesDans le bloc communDans le construitDans l'entitéDans le fichier inclus à partir de %s:%dDans le fichier inclus à partir de %s:%uDans la fonctionDans la fonction « %s »:Dans le membre de la fonction « %s »:Dans la liste de nomsDans le programmeDans la déclaration de fonctionDans la sous-routinedans une sorte inconnueIndiquer le nombre de registres logiciels disponiblescaractère initial « %A » est en minuscule dans le nom de symbole à %0Initialisation via DATA et PARAMETER est un de types compatiblesInitialiser les vars locales et les tableaux à zéroPermettre l'enlignage dans toutes les opérations portant sur les chaînesConstante en ligne si elle peut être en 2 insn ou moinsConstantes en ligne si elle prend seulement 1 instructionInsérer le code de profilage du programme de baseInsérer du code de vérificaion de la pile dans le programmeTraiter les entrées/sorties des fonctins avec appels de profilageentier à %0 est trop grandIntégrer les fonctions simples à l'intérieur des appelantserreur interne du compilateur -- ne peut exécuter l'opérationErreur internal du compilateur dans %s, à %s:%derreur interne de compilateur: erreur pour rapporter une routine ré-entée + Erreur internal error: %s (programme %s) + SVP soumettre un rapport complet d'anomalies. + Consulter %s pour les instructions.Abandon interne de gcov. + Convertir à l'interne la majorité des sources en majusculesPréserver à l'interne la casse des sourcesEntrecouper les lots de litéraux avec le code dans la section texteintrinsèque « %A » est passé comme argument actuel à %0 mais non pas explicitment déclaré INTRINSICintrinsèque « %A » référencé %Bly à %0, %Cly à %1 [info -f g77 M EXPIMP]Intrinsèque « %A » invoqué à %0 est connu pour ne pas être conforme à l'An 2000 [info -f g77 M Y2KBAD]Intrinsèques en majusculesLettres d'instrinsèques en casse arbitraireIntrinsèques épellées tel que SqRtExpression de contrôle invalideDéclaration invalidedéclaration invalide ou référence au symboe « %A » à %0 [initialement vu à %1]Exposant invalide à %0 pour la constante réelle à %1; « %A » n'est pas un chiffre dans le champ de l'exposantDéclaration d'expression invalidePremier caractère invalide à %0 [info -f g77 M LEX]Déclaration init invalideType d'interface invalideDéclaration de méthode invalide, nom de méthode requisDéclaration de méthode invalide, type retourné requisType de référence invalidejeton invalide à %0 dans l'expression ou la sous-expression à %0Type d'expression invalideExpression de mise à jour invalideutilisation invalide à %0 de l'opérateur de sous-chaîne sur %1Items dans la liste E/S débutant à %0 invalide pour un liste nommé d'E/S dirigéesméthode Java « %D » a un paramètre non Java de type « %T »méthode Java « %D » a un type non Java retourné « %T »Sauts de cibles alignés selon une puissance de 2Rebut à la fin de l'expression.Générer simplement des tables étendues pour le traitement des exceptionslatence de la cache L%d inconnue pour %sÉtiquette %A déjà définie à %1 et redéfinie à %0Étiquette invalide à %0 avec l'indicateur de continuation de ligne à %1 [info -f g77 M LEX]Définition d'étiquette %A à %0 dans une déclaration vide (comme %1)définition d'étiquette à %0 invalide pour ce genre de déclarationDéfinition d'étiquette manquante à %0 pour le construit DO spécifiant l'étiquette à %1Numéro d'étiquette à %0 n'est pas entre les bornes 1-99999Lettres des mots clés du langage dans des casses arbitrairesMots clés du langage en majusculesMots clés du langage épellés tel que IOStatUtiliser une disposition de type Intel's v1.3 gccLigne trop longue tel que %0 [info -f g77 M LEX]Faire l'édition de lien des programmes/données comme étant externe à la mémoire par défautFaire l'édition de lien des programmes/données comme étant interne dans la circuiterie de la mémoire par défautFaire l'édition de liens pour produire le programme en format ELF (au lieu de mmo)Faire l'édition de liens avec libads.a, libc.a and crt0.oFaire l'édition de liens avec libmvme.a, libc.a and crt0.oFaire l'édition de liens avec libsim.a, libc.a et sim-crt0.oFaire l'édition de liens avec libyk.a, libc.a and crt0.oSymbole local ajustable « %A » à %0Codes de boucles alignés selon une puissance de 2MCU « %s » n'est pas supportéformat MIPS ECOFF ne permet pas de changer le nom des fichiers à l'intérieur des fonction avec #lineMMIX interne: %s n'est pas un entier pouvant décaléMMIX interne: registre erroné: %dMMIX interne: valeur erronée pour « m », pas un CONST_INTMMIX interne: ne peut décoder cette opérandeMMIX interne: attendait CONST_INT, pas ceciMMIX interne: attendait une constante, pas ceciMMIX interne: attendait un registre, pas ceciMMIX interne: dernier vararg nommé ne pourra être inséré dans un registreMMIX interne: cas « %c » manquant dans mmix_print_operandinterne MMIX: ce n'est pas une constante:MMIX interne: ce n'est pas une adresse reconnueMMIX interne: tentative de produire incorrectement une condition renversée:MMIX interne: quel sorte de CC est-ce?MMIX interne: quel sorte de CC est-ce?déclaration de MODULE PROCEDURE à %0 non permise parce que l'INTERFACE à %1 ne spécifie pas de nom générique, d'opérateur ou d'affectationRendre les « char » signés par défautRendre les « char » non signés par défautRendre adjacentes les instructions short en instructions parallèles si possibleRendre les champs de bits non signés par défautRendre les entiers larges de 32 bitsRendre les préfixes des bases des constantes non décimales sans typeRendre les chaînes de mots « char[] » au lieu de «const char[]'Marquer les données comme partagées au lieu de privéesMarque les chaînes comme étant 'const char *'Montant maximal pour une opération d'incrémentation simple de la pileDésaccord des conditions requises par EQUIVALENCE pour l'emplacement de « %A » aux deux décalages d'octets %C et %D à partir de %Bspécificateur %A manquant dans la déclaration à %0Nom de classe manquantType term de classe manquantParanethèse fermante amnquante à %0 nécessaire pour pairer la parenthèse ouverte à %1Parenthèse(s) fermante(s) manquante(s) dans la déclaration de FORMAT à %0Fermeture de période manquante entre «.%A» à %0 et %1«:» manquant dans %0 dans la sous-chaîne de référence pour %1Virgule manquante dans la déclaration de FORMAT à %0noms de champs manquant pour la définition de strcutreu à %0 à l'intérieur de la définition de structure à %1première opérande manquante pour l'opérateur biunaire à %0Paramètre term formel manquantIdentificateur manquantNom d'interface manquantNom manquantNombre manquant suivant « E » dans la déclaration de FORMAT à %0Nombre manquant suivant la période dans la déclaration de FORMAT à %0Opérande manquante pour l'opérateur %1 à la fin de l'expresssion à %0Expresion de constante manquante ou invalideNom de structure manquant pour la définition de structure externe à %0Nom de super classe manquantTerme manquantTerme manquant et «)» attendusTerme manquant et «]» attenduTerme manquant ou «)»Terme manquant ou «)» attenduValeur manquante à %1 pour l'exposant d'un nombre réeal à %0Initialiseur de variable manquantMélange de type caractère et de non caractère via le COMMON/EQUIVALENCE -- par exemple « %A » et « %B »De multiples balises pour les inclusions peuvent être utiles pour: + nom de liste n'est pas adéquatement supporté par la librairie d'exécution pour les fichiers source avec une casse préservéeNOTE_INSN_BASIC_BLOCK %d dans le milieu du bloc de base %dNOTE_INSN_BASIC_BLOCK est manquant pour le bloc %dNULL utilisé en arithmétiqueconstruit %% imbriqué (%%VAL, %%REF ou %%DESCR) à %0Ne jamais ajouter un second caractères de soulignement aux externesNe jamais optimiser le code d'initialisation de classe statiquePas de "Petites classes de registres" kludgeaucun spécificateur UNIT=1 dans la liste de contrôle d'E/S à %0Pas de branchement dans le fichier %s + Pas de branchement dans la fonction %s + Pas d'appel dans le fichier %s + Pas d'appel dans la fonction %s + Oas de case pour %sAucun composant spécifié tel que %0 pour une définition de type dérivé débutant à %1Aucun composant spécifié tel que %0 pour la map débutant à %1Aucun composant spécifié tel que %0 pour la définition de structure débutant à %1Aucun défaut pour crt0.oAucun code exécutable associé avec le fichier %s. + Pas de ligne exécutable dans le fichier %s + Pas de lignes sources exécutables dans la fonction %s + pas de définition d'étiquette pour la déclaration de FORMAT à %0aucune spécification pour l'itération DO-implicite « %A » à %0séquence d'échappement non conforme au standard ISO-C «\%A» à %0Caractère non-numérique à %0 dans le champ d'étiquette [info -f g77 M LEX]N'est pas un entier dans l'expression de la constante dans la déclaration implicite de la boucle DO à %0arguement nul à %0 pour l'invocation de la procédure à %1argument nul à %0 pour la déclaration de la référence de fonction à %1caractère null à %0 -- ligne ignoréeélément nul à %0 pour la référence au tableau à %1Nombre de registre utiliser pour passer les arguments entiersOmettre le pointeur de trame dans les fonctions feuillesSeuls les constructeurs peuvent invoquer des constructeursProduire les instanciations explicites de patrons en ligneProduire seulement des instanciations explicites du patronÉmettre seulement une instruction par cyclePréserver seulement 32 bits du registre FP à travers les appelsL'opérateur à %0 a une précédence plus basse que celui à %1 -- utiliser des parenthèsesOptimiser les déplacements de blocsOptimiser pour le 32022Optimiser pour le CPU 32332Optimiser pour le CPU 32532Optimiser pour le 3900Optimiser pour le 4650Optimiser pour les processeurs CypressOptimiser pour les processeurs F930Optimiser pour les processeurs F934Optimiser pour les processeurs SparLiteOptimiser pour les processeurs SuperSparcOptimiser les chargements d'adresses lui/addiuOptimiser sur mesure les appels enfants et récursifOptimiser sur mesure les instructions d'appel avec l'assembleur et l'éditeur de liensOptions: + Produire du code additionnel pour les données initialiséesProduire les initialiseurs globaux formattés pour GNU ldAfficher les statistiques de compilationProduire des informations supplémentaires de mise au point dans l'environnement LuxworksProduire les tailles d'instructions dans le fichier asmEn dehors de toute unité de programme: + Écraser -mbest-lib-optionsÉcraser le type sous-jacent de wchar_t vers « unsigned short »La génération de code PIC n'est pas compatible avec les appels indirects rapides. + La génération de code PIC n'est pas supportée dans le modèle portable d'exécution + le registre n'est pas initialiséPRINT_OPERAND pointeur nulPRINT_OPERAND: ponctuation « %c » inconnuePRINT_OPERAND_ADDRESS, pointeur nuldéclaration PUBLIC ou PRIVATE à %1 ne peut être spécifié en même temps avec la déclaration PUBLIC ou PRIVATE à %0Empaqueter les membres des structures ensembles sans trousPasser -assert pure-text à l'éditeur de liensPasser les arguments FP par les registres FPPAsser tous les arguments par la pilePasser les arguments par les registresPasser les arguments sur la pilePasser les paramètres par les registres (par défaut)Passer quelques arguments par les registresPorter attention au mot clé « inline »Exécuter une élimination DAWRF2 des doublonsEffectuer un nombre mineur d'optimisations coûteusesExécuter un chargement efficace lors de l'élimination de sous-expression globaleExécuter des optimisations de sauts de threadExécuter la boucle par désenroulement de toutes les bouclesExécuter un dé-roulement des boucles lorsque le compteur d'itération est connuExécuter un stockage efficace lors de l'élimination de sous-expression globaleExécuter un réduction en force des optimisationsEffectuer une optimisation sur mesure des appelsExécuter l'élimination de sous-expression du commun globalPériode à %0 n'est pas suivie de chiffres en nombre flottant ou de « NOT.», «TRUE.», ou «FALSE. »Permettre les accès non alignésPlacer le compteur d'arg dans une instruction NOP (plus rapide que push)Placer les constantes en virgule flottante dans le TOCPlacer les constantes symboles+décalages dans le TOCPlacer les adresses variables dans un TOC régulierSVP garder cela en tête avant de rapporter les anomalies.SVP soumettre un rapport complet d'anomalies, + avec le source pré-traité si cela est approprié. + Consulter %s pour les instructions. + Pointeurs sont de 32 bitsPointeurs sont de 64 bitsPrivilégier les branchements au lieu d'une exécution conditionnellePréférer l'accès à des mots plutôt qu'un accès à des octetspré ajouter les symboles globaux avec «:» (pour l'utilisation avec PREFIX)Préserver tous les 40 bits du registre FP à travers les appelsPréserver toutes les épellations (casses) utilisé dans le programmePrétendre que l'hôte et la cible utilise le format FPProduire les informations de la couverture du code. + + Afficher les informations de version du compilateur g77-specific, exécuter les tests internesAfficher les informations internes reliées à la mise au pointAfficher les noms des unités de programme qui sont compiléesTraiter les directive #identTraitement du spec %c%s%c, lequel est « %s » + Produire du code pour système à octets de poids fort (big endian)Produire du code relocalisable au moment de l'exécutionProduire du code pour système à octets de poids faible (little endian)le profilage n'est pas supporté sur cette cibleProfilage utilise mcountProgramme n'utilise pas les options du dialecte Unix f77Programme est écrit dans un dialecte Fortran 90Programme est écrit dans un style libre Fortran 90Programme est écrit en Fortran VXT (forme de Digital)Programme est écrit dans un dialecte typique FORTRAN 66Programme est écrit dans un dialecte typique Unix f77nom de programme à %0 superflue, aucune déclaration PROGRAM spécifié à %1nom de l'unité programme à %0 n'est pas le même que le nom à %1Programmes écrit en minusculesProgramme écrit dans une stricte casse mélangéeProgramme écrit en majusculesInterdire les appels relatifs de fonctions par le PCPlace tout dans le TOC régulierPlacer les lots de litéraux dans des sections séparées de litérauxPlacer les constantes non itialisées dans le ROM (a besoin de -membedded-data)déclaration RETURN à %0 invalide à l'intérieur de l'unité du programme principalRETURN_ADDRESS_OFFSET n'est pas supportévérification RTL: accès de elt %d de « %s » avec le dernier elt %d dans %s, à %s:%dvérification RTL: accès de elt %d du vecteur avec le dernier elt %d dans %s, à %s:%dvérification RTL: code attendu « %s » ou « %s », a « %s » dans %s, à %s:%dvérification RTL: code attendu « %s », a « %s » dans %s, à %s:%dvérification RTL: attendu elt %d de type « %c » ou « %c », a « %c » (rtx %s) dans %s, à %s:%dvérification RTL: attendu elt %d de type « %c », a « %c » (rtx %s) dans %s, à %s:%dspécification d'étendue à %0 invalide pour la déclaration du CASE à l'intérieur de la déclaration du type logique du SELECT CASELecture des spécification à partir de %s + Reconnaître and/bitand/bitor/compl/not/or/xorRéduire la taille des fichiers objetsréférence à un intrinsèque générique « %A » à %0 pourrait être de la forme %B ou %CLa référence à l'étiquette à %1 est inconsistente avec sa précédente référence à %0La référence à l'étiquette à %1 est inconsistente avec sa définition à %0Référence à l'étiquette à %1 est en dehors du bloc contenant la définition à %0Registre sb est zéro. Utilisé pour l'adressage absoluRé-ordonner les blocs de base pour améliorer l'emplacement de codeRemplacer add,compare,branch avec des branchements utilisant un compteur registreRemplacer le chemin systèmeRapporter toute allocation de mémoire permanente à la fin de l'exécutionRapporter le temps pris par chaque passe de compilation à la fin de l'exécutionRequête des routine de la librairie mathématique conforme IEEE (OSF/1)Reçédulers les instructions après l'allocation de registresReçéduler les instructions avant l'allocation de registresRetenir les informations de légendeRetenir l'information standard MXDBRetourner des aggrégats de type « short » en mémoire, pas dans les registresRetourner des aggrégats de type « short » dans les registresRetourner toutes les structures en mémoire (par défaut sur AIX)Le résultat retourné en virgule flottante se retrouve dans AC0.Le résultat retourné en virgule flottante se retrouve en mémoire.Retourner toutes les petites structures dans les registres (par défaut sur SVR4)valeur retournée « %A » pour FUNCTION à %0 n'est pas référencé dans le sous-programmeRetourner les valeurs de fonctions dans les registres FPURé-utiliser R30 sur une base par fonctionExécuter une passe CSE après une optimisation des bouclesExécuter l'optimiseur de boucle deux foisdéclaration SAVE ou attribut à %1 ne peut être spécifiée en même temps avec la déclaration SAVE ou l'attribut à %0SÉLECTION du CASE sur un type CHARACTER (à %0) n'est pas supporté -- désoléjeu d'instructions SSE désactivé, arithmétique 387 est utiliséIdentique à: -mep -mprolog-functionMême nom « %A » utilisé pour %B à %0 et %C à %1 [info -f g77 M INTGLOB]Sauvegarder DP à travers ISR dans le modèle de mémoire petiteSauvegarder les fichiers temporaires dans l'environnement LuxworksÇéduler le code pour le CPU donnéÇéduler le CPU donnéChamps de variables for-init-statement s'étend en dehorsSeconde occurence du CASE DEFAULT à %0 à l'intéreur de SELECT CASE à %1Seconde occurente de ELSE WHERE à %0 à l'intérieur du WHERE à %1Sélectionner la convention d'appel ABISélectionner le CPU pour lequel le code doit être généréSélectionner la méthode de traitement sdata«;» à %0 est une jeton invalideSérialiser les références à la mémoire volatile avec des instructions MEMWInitialiser les définitions WindowsFixer la chaîne arrièreInitialiser le chemin des classesInitialiser le chemin des classes (déprécié: utiliser --classpath à la place)Initialiser errno après les fonctions internes mathématiquesInitialiser l'alignement maximal à 4Initialiser l'alignement maximal à 8Adresse de départ des données fixéeAdress de départ du programme fixéeInitialiser le bit PPC_EMB bit dans l'en-tête des fanions ELFInitialiser la taille maximale des données éligibles pour la zone SDAInitialiser la taille maximale des données éligibles pour la zone TDAInitialiser la taille maximale des données éligibles pour la zone ZDAInitialiser la longueur maximale des lignesInitialisation des spec %s à « %s » + + Petite zone de données: none, sdata, useModèle de mémoire petitespécification à %0 requiert la spécification ADVANCE=« NO » dans la même liste de contrôel d'E/Sspécification à %0 requiert la spécification explicite FMT= dans la même liste de contrôel d'E/SSpécifier l'ABI à utiliserSpécifier le CPU pour les besoins de la génération de codeSpécifier le CPU pour les besoins de cédulageSpécifier le standard MIPS ISASpécifier un nom alternatif pour la section bssSpécifier un nom alternatif pour la section des constantesSpécifier un nom alternatif pour la section donnéesSpécifier un nom alternatif pour le cirsuit dsp16xxSpécifier un nom alternatif pour la section texteSpécifier la fonction de vidange de la cacheSpécifier le nombre maximum d'itérations pour RPTSSpécifier la profondeur maximale d'instanciation de patronsspécifier l'étendue des registres pour la rendre fixeSpécifier la taille des long double (64 ou 128 bits)Assumer que les arguments peuvent avoir des alias l'un vers l'autre et globauxSpécifier le nom du MCUSpécifier l'adresse initiale de la pileSpécifier le minimum de bits pour l'alignement de structuresSpécifier le nom de la classe pour les constantes chaînesSpécifier le nom du CPU cibleSpécifier le nom de l'architecture cibleSpécifier l'ordre d'allocation des registresSpécifier le registre à utiliser pour l'adressage PICSpécifier la version de l'émulateur en virgule flottantefaux nombre dans la déclaration de FORMAT à %0faux signe dans la déclaration de FORMAT à %0faux texte terminant le nombre dans la déclaration de FORMAT à %0fausse virgule qui traîne dans la précédente terminaison à %0Déclaration à %0 suivant un bloc ELSE pour le construit IF à %1Déclaration à %0 invalide dans le bloc de donnée de l'unité programme à %1déclaration à %0 invalide dans le contexte établi par la déclaration à %1déclaration à %0 invalide dans ce contexteDéclaration à %0 doit spécifier un nom de construit spécifié à %1déclaration de fonction « %A » définie à %0 n'est pas utiliséeSotcker les noms de fonctions dans le code objetStocker les var. locales dans redistres d'argumentsStocker les chaînes dans les sections d'écriture des donnéesRenforcer la réduction de toutes les boucles par induction des variablespoint begin/end de la sous-chaîne à %0 en dehors de la plage définieSous-chaîne de non caractères « %A » dans la déclaration EQUIVALENCESupporte les fonctions internes 3DNOW!Supporter l'ABI Green HillsSupporte les fonctions internes MMX et SSE et la génération de codeSupporte les fonctions internes MMXSupporte les fonctions internes MMX, SSE et SSE2 et la génération de codeSupporter les appels des jeux d'instructions THUMB et ARMSupporter le passage de messages dans un environnement parallèleSupporter les exceptions synchrones des non appelsSupprimer dans la sortie les numéros d'instructions et de notes de lignes dans les vidanges de mises au pointOptions: + -include inclure le contenu du avant d'autres fichiers + -imacros accepter la définition de macros dans le + -iprefix spécifier le comme un préfixe aux prochaines deux options + -iwithprefix ajouter le ertoire à la fin du chemin d'inclusion système + -iwithprefixbefore ajouter le ertoire à la fin du chemin d'inclusion principal + -isystem ajouter le ertoire au début du chemin d'inclusion système + Noms de symboles en minusculesNoms des symboles en majusculesNoms des symboles épellés dans des casses mélangéesLes symboles sont précédées d'un caractère de soulignement Exécuter une dernière fois la visite à traves chaque boucle itérative DOCible n'a pas un I&D séparéCible a un I&D séparémachine cible ne supporte pas DOUBLE COMPLEX spécifié à %0machine cible ne supporte par l'entité complexe de la sorte spécifié à %0Cible le processeur AM33L'option -march est incompatible avec -mipsN et est alors ignorée.Le MMU va intercepter les accès mal alignésLa taille maximale de mémoire à être alloué par GCSELa longueur maximum de la liste des opération çédulées en attenteLe nombre maximum d'instructions dans une fonction qui est éligible au type enligneLe nombre maximum d'instructions à considérer pour remplir une slot délaiLe nombre maximum d'instructions à considérer pour repérer un registre d'information actif et précisLe nombre maxium de passes à effectuer lors de l'exécution de GCSELa signification de «\a»(à %0) varie avec -traditionalLa signification de «\x» (à %0) varie avec l'option -traditionalCe logiciel est libre; voir les sources pour les conditions de copie. Il n'y a PAS + GARANTIE; ni implicite pour le MARCHANDAGE ou pour un BUT PARTICULIER. + + Modèle de thread: %s + Thumb: assumer que les pointeurs de fonction peuvent tomber dans le code en dehors non sensible au ThumbThumb: assumer que les fonctions non statiques peuvent être appelées du code ARMThumb: générer (feuilles) trames de pile même si non nécessaireThumb: générer (non feuilles) trames de pile même si non nécessaireensemble avec -fpic et -fPIC, ne pas utiliser les références GOTPLTtrop %B d'arguments pour « %A » à %0 par rapport à l'invocation à %1 [info -f g77 M GLOBALS]trop %B d'arguments passé à « %A » à %0 par rapport à la définition à %1 [info -f g77 M GLOBALS]Trop peu d'éléments (%A manquant) tel que %0 pour la référence au tableau à %1Trop peu d'élémens dans la référence au tableau « %A » dans la déclaration d'EQUIVALENCETrop peu de valeurs initiales dans la liste des initialisateurs pour « %A » à %0Trop peu d'éléments tel que %0 pour la référence au tableau à %1Trop d'élémens dans la référence au tableau « %A » dans la déclaration d'EQUIVALENCETrop de valeurs initiales dans la liste des initialisateurs débutant à %0Taille totale des variables locales excède la limite de l'architectureVirgule de fin dans l'appel de la procédure dénote un argument nulAttrapper les débordements de signe dans addition/soustraction/multiplicationIntercepter les divisions par zéros sur des entiersIntercepter les débordements lors de divisions avec des entiersTraiter tous les avertissements commes des erreursTraiter les valeurs initiales de 0 comme des valeurs non zérosTraiter les var. locales et les blocs COMMON tel que s'ils étaient nommés dans une déclaration SAVEtroncation de caractères du côté droit de la constante caractères à %0troncation de caractères du côté droit de la constante Hollerith à %0troncation de données non à zéro du côté gauche de la constante numérique à %0troncation de données non à zéro du côté gauche de la constante sans type à %0ajuster l'alignement pour la version de CPU ou le circuit spécifiqueAjuster la latence mémoire attendueMettre en marche le code d'entretien de mise au pointDeux opérateurs arithmétiques dans la rangée à %0 et %1 -- utiliser des parenthèsesDésaccord du paramètre du Type et/ou type de sorte entre la valeur du CASE ou la valeur à l'intérieur de l'étendue à %0 et le SELECT CASE à %1désaccord de type entre les expressions à %0 et %1Nom de type à %0 n'est pas le même que le nom à %1constante sans type à %0 trop grandeINCONNNU dans print_operand !?INCONNU dans s390_output_symbolic_const !?incapable d'ouvrir le fichier INCLUDE « %A » à %0«]» non pairéÉtiquette non définie, première référence à %0EOF inattendue lors de la lecture du fichier source %s. + Var. locales non initialisées dans .bssVar. locales non initialisées dans .dataséquence d'échappement inconnue «\%A» à %0séquence d'échappement inconnue «\» suivi par le code de caractères 0x%A at %0option -mlong-double-%s inconnuespécificateur de FORMAT non reconnu à %0Caractère non reconnue à %0 [info -f g77 M LEX]spécificateur de FORMAT non supporté à %0déclaration VXT non supporté à %0Opérande non supportée pour ** à %1 -- conversion à INTEGER par défautNon supporté; affecte la génération de code des tableauxNon supporté; ne pas générer le code d'appel libf2cséquence d'échappement non terminée «\» at %0Usage: %s [options] fichier... + Usage: gcov [OPTION]... FICHIER-SOURCE + + Utiliser .EQV./.NEQV. au lieu de .EQ./.NE. à %0 pour les opérandes LOGICAL à %1 et %2Utiliser des longs doubles de 128 bitsUtiliser des int de 16 bitsUtiliser des flottants de 32 bitsUtiliser des int de 32 bitsUtiliser ABI de 32 bitsUtiliser les registres FP de 32 bitsUtiliser les registres généraux de 32 bitsUtiliser le type long de 32 bitsUtiliser des entrées de 4 octets dans les tables de switchUtiliser des flottants de 64 bitsUtiliser les doubles longs de 64 bitsUtiliser ABI de 64 bitsUtiliser les registres FP de 64 bitsUtiliser les registres généraux de 64 bitsUtiliser le type int de 64 bitsUtiliser le type long de 64 bitsUtiliser des longs de 64 bitsUtiliser les registres réservés ABIUtiliser les instructions AltiVecUtiliser l'interface CygwinUtliser la syntaxe de l'assembleur DECUtiliser EABIUtiliser GNU tel queUtiliser GP en mode relatif aux sections sdata/sbssUtiliser les règles d'alignement H8/300Utiliser les mathématiques IEEE pour les comparaisons FPUtiliser le code PIC IrixUtiliser MIPS tel queUtiliser les instructions MPYI pour C3xUtilise le support de thread spécifique à MingwUtiliser l'interface Mingw32Utiliser le code PIC OSFUtiliser les mnémoniques P pour les branchements statiquement prévus à être prisUtiliser le jeu d'instructions du POWERUtiliser le jeu d'instructions du POWER2Utiliser le groupe d'instructions optionnelles d'utilité général du PowerPCUtiliser le groupe d'instructions graphiques optionnelles du PowerPCUtiliser le jeu d'instructions du PowerPCUtiliser le jeu d'instructions du PowerPC-64Utiliser le ROM au lieu de la RAMUtliser la syntaxe de l'assembleur UNIXUtiliser le Sparc V8 ISAUtiliser les registres FP sur VAXUtiliser l'alignement VAX-CUtiliser « __cxa_atexit » pour enregistrer les destructeurs.Utiliser les adresses qui allouent des registres globauxUtiliser les entrées alternatives pour les fonctions de feuillesUtiliser les noms alternatifs de registresUtiliser l'interface brute WindowsUtiliser l'ordre des octets pour système à octets de poids fortUtiliser les instructions de champs de bitsUtiliser bras pour les exécutables < 64kutiliser les registres d'appels maltraités pour les paramètres et les valeurs retournéesUtiliser cc- et libc-compatible longs de 32 bitsUtiliser les modes d'adressage complexesUtiliser la cache de données pour les réf. mémoire volatiles (par défaut)Utiliser une convention différente d'appel en utilisant « rtd »Utiliser les instructions directes CALLn pour des appels rapidesUtiliser le code PIC enchâsséUtiliser un epsilon respectant les instructions de comparaison en virgule flottanteUtiliser le mode rapide mais approprié de conversion de flottans à entiersUtiliser les options et çéduler le code pour le CPU donnéUtiliser les options de et çéduler le CPU donnéUtiliser le modèle de fenêtre de registre platUtiliser les registres FPUtiliser le modèle donné de code pour le SparcUtiliser la syntaxe de l'assembleur donnéUtiliser le modèle de x86-64 donnéUtiliser l'unité matérielle en virgule flottanteUtiliser les instructions matérielles en virgule flottanteUtiliser le FP matérielUtiliser les instructions matérielles quad FPUtilise les noms des registres in/loc/out Utiliser les instructions indirectes CALLXn pour les grands programmesUtiliser les appels indirectsUtiliser les registres globaux du kernelUtiliser le modèle de grande mémoireUtiliser les appels de librairie pour exécuter les opérations FPUtiliser l'ordre des octets pour système à octets de poids faibleUtiliser l'ordre des octets de poids faible pour les donnéesUtiliser mcount pour le profilageUtiliser mcount_ptr pour le profilageUtiliser la post-passe de type mips-tfile de l'assembleurUtiliser les pseudo-op mips16 d'entrée/sortieUtiliser les multiplications par accumulationsUtiliser les instructions FP de multiplications avec accumulationsUtiliser les nouvelles mnémoniques pour l'architecture du PowerPCUtiliser la convention normale d'appelsUtiliser le modèle normal de mémoireUtiliser des tables de décalage pour les appels de méthodes virtuellesUtiliser les anciennes mnémoniques pour l'architecture du PowerPCUtiliser les informations de profilage pour les probabilités de branchementsUtiliser les instructions push pour sauvegardes les arguments sortantsUtiliser la zone-rouge pour le code x86-64Utiliser le registre de la pile pour les paramètres et la valeur retournéeUtiliser les registres pour le passage d'argumentsUtiliser un simple FP (32 bits) seulementUtiliser le mode lent mais précis de conversion de flottans à entiersUtiliser le modèle de petite mémoireUtiliser le traitement par logiciel des nombres flottantsUtiliser le biais de la pileUtiliser la séquence standard d'appel, avec arg et mot compteurUtiliser des structs avec alignement plus fort pour les copies de mots-doublesUtiliser des stubs pour les prologues de fonctionUtiliser des sous-routines pour le prologue/epilogue de fonctionUtiliser les noms de registres symboliquesUtiliser la version 26 bits de APCSUtilise la version 32 bts de APCSUtiliser le registre BK comme registre général tout usageUtiliser l'interface CygwinUtiliser l'interface Mingw32Utiliser l'option Xtensa MAC16Utiliser l'option Xtensa MIN/MAXUtiliser l'option Xtensa MUL16Utiliser l'option Xtensa MUL16Utiliser l'option Xtensa NSAUtiliser l'option Xtensa SEXTUtiliser l'option des registres booléens XtensaUtiliser l'option de densité du code XtensaUtiliser l'unité matérielle pour virgule flottante XtensaUtiliser les instructions de champs de bitsUtiliser le plus d'options autorisant autorisant des options permises par les autres optionsUtiliser la même taille pour un double que pour un flottantUtiliser le plus petit entier pour contenir l'énumération (enums)Utiliser des références mémoire non alignéesUtiliser les registres globauxutiliser des chargements mémoire avec zéro extension, pas celles avec signe d'extensionUtilisation des specs internes. + Utiliser le jeu d'instructions Visualmode VOID sur une sortieexpression variable dans le spécificateur de FORMAT à %0 -- non supportéeAvertir à propos des fonctions de transtypage avec des types incompatiblesAvertir à propos des transtypage qui écartent les qualificateursAvertir à propos du code qui ne sera jamais exécutéAvertir à propos de construits dont le sens change en ISO CAvertir à propos des construits ayant des sens surprenantsAvertir à propos d'un switch énuméré où un case spécific manqueAvertir à propos des externes qui n'est pas au niveau dans le champ du fichierAvertir à propos d'arithmétique portant sur un pointeur de fonctionAvertir à propos des fonctions qui seraient candidates pour des attributs non retournésAvertir à propos des fonctions qui pourraient être candidates pour les attributs de formatAvertir à propos des fonctions globales sans déclaration précédenteAvertir à propos des fonctions globales sans prototypeAvertir à propos des déclarations de fonctions implicitesAvertir à propos des types retournés inconsistantsAvertir à propos des déclarations multiples portant sur le même objetAvertir à propos des destructeurs non virtuelsAvertir à propos des déclarations de fonction sans prototypeAvertir à propos des chaînes de format qui ne sont pas des chaînesAvertir à propos de la surcharge des noms de fonctions virtuellesAvertir à propos des pointeurs convertis lesquels augment l'alignementAvertir à propos du manque possible de parenthèsesAvertir à propos des problèmes possibles de sécurité avec les formats de fonctionAvertir à propos des violations possibles des règles de séquence de pointsAvertir à propos des type de conversions confusesAvertir à propos des accolades possiblement manquantes autour des initialiseursAvertir à propos des anomalies de format de printf/scanf/strftime/strfmonAvertir à propos de structures retournés, unions ou tableauxAvertir à propos des comparaisons signés/non signésAvertir à propose des souscripts dont le type est « char »Avertir à propos des déclarations douteuses de mainAvertir à propos des tests d'égalité sur des nombres flottantsAvertir à propos de l'utilisation de la directive #importAvertir à propos des variables automatiques non initialiséesAvertir à propos des pragmas non reconnusAvertir à propos de l'utilisation (très peu pour l'instant) des extensions FortranAvertir à propose de l'utilisation des chaînes de multi-caractèresAvertir à propos de l'utilisation des déclarations « __attribute__ ((deprecated)) »Avertir à propos des violations des règles de style de Effective C++Avertir si des fichier .class sont périméesAvertir si le style de transtypage C est utilisé dans un programmeAvertir si le sélecteur a de multiples méthodesAvertir si des déclarations vides dépréciés sont trouvéesAvertir si des modificateurs sont spécifiés sans que cela ne soit nécessairesAvertir si des commentaires imbriqués sont détectésAvertir lorsqu'une déclaration ne spécifie pas le typeAvertir lorsque l'arg d'une fonction est une structureAvertir lorsqu'un fonction est déclarée extern, puis inlineAvertir lorsqu'une fonction est inutiliséeAvertir lorsqu'un paramètre de fonction est inutiliséAvertir lorsqu'une étiquette est inutiliséeAvertir lorsqu'une trame de pile est plus grande que la taille spécifiéeAvertir lorsque 'une variable est inutiliséeAvertir lorsque la valeur d'une expression n'est pas utiliséeAvertir lorsque des fonctions en ligne ne peuvent être en ligneAvertir lorsque la passe d'optimisation est désactivéeAvertir lorsqu'une variable locale fait ombrage à une autreAvertir lorsque la surcharge fait la promotion d'un non signé en signéAvertir lorsque le remplissage est requis pour aligner les membres d'un structAvertir lorsque le comportement de synthère diffère de CfrontAvertir lorsque le compilateur réordonne le codeAvertir lorsque les attributs paquetés n'ont pas d'effet sur l'organtisation d'un structAvertir lorsque des trigraphes sont rencontrésLorsque c'est possible ne pas générer des trames de pileLorsque CSE s'exécute, suivre les sauts considitionnels vers leurs ciblesLorsque CSE s'exécute, suivre les sauts vers leurs ciblesContourner le bug matériel des premiers 4300Contourner le bug matériel de la multiplicationContourner le bug matériel de stockageYYDEBUG n'est pas définiAucune ou une map spécifié tel que %0 pour l'union débutant à %1 -- au moins deux sont requisesconstante caractère de longueur zéro à %0tableau de taille zéro à %0spécification de taille zéro invalide à %0[Laissant %s] + [RAPPORTER L'ANOMALIE!!][RAPPORTER L'ANOMALIE!!][ne peut repérer %s][super ...] doit apparaître dans une méthode du contexte\x utilisé à %0 sans être suivi des chiffres hexdécimaux\x utilisé sans être suivi des chiffres hexdécimaux_Pragma prend une chaîne entourée de parenthèrese« __VA_ARGS__ » peut seulement appraître dans l'expansion des macros C99 variadic« __alignof__ » appliqué sur un type incomplet« __builtin_eh_return » n'est pas supportée sur cette ciblesecond argument de « __builtin_longjmp » doit être 1« __builtin_saveregs » n'est pas supporté par la sous-cible« __builtin_saveregs » n'est pas supporté par la ciblefanion « »fanion «!»fanion «#»«%#D» et «%#D» ne peut être surchargé«%#D» ne peut être déclaré«%#D» en conflit avec une déclaration précédente «%#D»«%#D» ne réfère pas à un type non qualifié, aussi il n'est pas utilisé pour la liaison«%#D» cache un constructeur pour «%#T»«%#D» invalide; une union anonyme peut seulement avoir des données non statiques de membres«%#D» n'est pas un membre statique de «%#T»«%#D» a besoin d'un écraseur final«%#D» précédemment déclaré ici«%#D» précédemment défini ici«%#D» rédéclaré comme %C« %D » redéclaré comme une sorte différente de symbole«%#D» utilisé précédemment avant sa déclaration«%#D» a été utilisé avant qu'il ne soit déclaré en ligne«%#T» n'a pas de membre nommé « %D »«%#T» a un pointeur vers un membre de données«%#T» a des fonctions virtuelles mais un destructeur non virtuel«%#T» n'est pas un patron«%#T» n'a pas un type valide pour un patron de parametre de constante«%#T» définit seulement les constructeurs privés et n'a pas d'amis«%#T» définit seulement les constructeurs privés et n'a pas d'amis«%#T» utilisé où « %T » était attendu«%#T» utilisé où un nombre flottant était attendu«%%%c» laisse seulement les 2 derniers chiffres de l'année«%%%c» laisse seulement les 2 dernies chiffres de l'année dans certaines localisationcontrainte «%%» utilisée avec la dernière opérandel'opérande «%%d» n'est pas un registreopérande «%%l» n'est pas une étiquette«%+#D» et inaccessible«%+#D» est privé«%+#D» est protégé« %D » accès« %D » comme déclarateur« %D » ne peut seulement être spécifié pour les constructeurs« %D » ne peut seulement être spécifier pour les fonctions« %D » ne peut seulement être spécifié pour les objets et les fonctions« %D » peut seulement être spécifié à l'intérieur d'une classe« %D » ne peut être déclaré virtuel, alors qu'il est toujours statique« %D » ne peut avoir d'arguments par défaut« %D» déclaré comme « virtual » %s« %D » déclaré comme un ami« %D» déclaré comme « inline » %s« %D » déclaré comme référence mais n'est pas initialisé« %D » déclaré avec une exception de spécification« %D » dénote un type ambigu« %D » ne déclare pas un type de patron« %D » a déjà été déclaré dans « %T »« %D » a un type incomplet« %D » implicitement déclaré avant sa définition« %D » invalide dans «%#T»« %D » invalide dans « %T »« %D » est un nom d'espace« %D » est déjà un ami de la classe « %T »« %D » est déjà déclaré dans cette portée« %D » est déjà défini dans « %T »« %D » est déjà défini dans la classe « %T »« %D » est déjà défini dans la classe %T« %D » n'est pas un patron de fonction« %D » n'est pas une fonction« %D » n'est pas un membre de type « %T »« %D » n'est pas un espace de noms« %D » est trop petit pour contenir toutes les valeurs de «%#T»« %D » doit être une fonction membre non statique« %D » doit être déclaré avant son usage« %D » doit être soit un membre non statique de fonction ou une fonction non membre« %D » doit être initialisé par un constructeur, non pas par « {...} »« %D » doit avoir un argument de classe ou de type énuméré« %D» doit prendre « void »« %D » doit prendre seulement un OU deux arguments« %D » doit prendre seulement zéro ou un autre argument« %D » doit prendre exactement un argument« %D » doit prendre exactemenr deux arguments« %D » nomme le constructeur« %D » n'est pas déclaré« %D » n'est pas défini« %D » devrait être initialisé dans la liste d'initialisation du membre« %D » devrait avoir été déclaré à l'intérieur de « %D »« %D » devrait retourner par valeur« %D » non déclaré (première utilisation dans cette fonction)« %D » non déclaré dans l'espace de noms « %D »« %D » utilisé sans patron de paramétres« %D » était caché« %D » n'a pas été déclaré dans cet horizon« %D » a été précédemment implicitement déclaré comme retournant un entier«%D::%D» n'est pas un patron« %E » ne peut être utilisé comme une fonction« %E » ne peut être utilisé comme pointeur de membre, alors qu'il est de type « %T »« %E» a le type «void » et n'est pas une expresion de retour de type throw« %E» n'est pas un type, utiliser «typename %E » pour en faire un« %E » n'est pas un argument valide pour le patron« %E » n'est pas un type « %T »« %T » n'a pas de classe ou d'union nommé « %D »« %T » a échoué à devenir un typedef ou un type construit interne« %T » a échoué à être un typedef d'aggrégat« %T » est déjà un ami de « %T »« %T » est une base ambiguë de « %T »« %T » est une base inaccessible de « %T »« %T » est implicitement un typename« %T » n'est pas une classe ou un espace de noms« %T » n'est pas une classe ou un type d'union« %T » n'est pas une classe, struct ou un type d'union« %T » n'est pas un espace de noms« %T » n'est pas un type pointeur-vers-objet« %T » n'est pas un patron« %T » n'est pas un type patron« %T » n'est pas une expression valide« %T » n'est pas de type aggrégat« %T » spécifié comme declarator-id«%T::%D» n'est pas un déclarateur validequalificateur « %V » ne peut pas être appliqué à « %T »«%s %R» déclare un nouveau type dans l'étendue de l'espace de nomsattribut « %s » ne s'applique seulement qu'à des fonctionsl'attribut « %s » de l'argument n'est pas une contante chaînel'attribut « %s » de l'argument n'est pas une contante entièreattribut « %s » peut seulement être appliqué aux définitions de classes Javaattribut « %s » peut seulement être appliqué aux définitions de classes« %s » attribut de la directive ignoré« %s » attribut ne s'applique pas à ces types« %s » attribut ignoré« %s » attribut ignoré pour « %s »attribut « %s » n'est pas supporté sur cette plate-formeattribut « %s » ne s'applique seulement qu'à des types de fonctionattribut « %s » s'applique seulement aux fonctionsattribut « %s » s'applique seulement à des fonctions d'interruptionattribut « %s » s'applique seulement aux variablesl'attribut « %s » requiert un argument de type constante entière« %s » ne peut être statiquement alloué« %s » déclaré «static » mais n'a jamais été défiie« %s » déclaré à la fois comme exporté et importé d'une DLL« %s » déclaré comme une fonction retournant une fonction« %s » déclaré comme une fonction retournant un tableau« %s » déclaré en ligne après avoir été appelé« %s » déclaré en ligne après sa définition« %s » défini à la fois comme normal et comme alias« %s » défini mais n'a pas été utilisé« %s » ne répond pas à « %s »« %s » a échoué pour devenir un typedef ou un type construit« %s » a un type incomplet« %s » est à la fois « extern » et initialiseur« %s » ignoré, en conflit avec «-g%s»« %s » initialisé et déclaré « extern »« %s » a un format non reconnu de type de fonction« %s » est déprécié« %s » est déprécié (déclaré à %s:%d)« %s » est plus étroit que les valeurs de son type« %s » n'est ni une fonction ni le membre d'une fonction; ne peut être déclaré ami« %s » est normalement une fonction non «static »« %s » n'est pas un nom de classe valide« %s » n'est pas au début de la déclaration« %s » n'est pas défini à l'extérieur de l'étendue de la fonction« %s » est obsolète; vtables g++ sont maintenant COM-compatibles par défaut« %s » a été promu à « %s » lorsque passé à travers « ... »« %s » est habituellement une fonction« %s » localement externe mais globalement static« %s » pourrait être utilisé sans être initialisé dans cette fonction« %s » n'est pas supporté par %s« %s » redéclaré comme une sorte différente de symboleétiquette « union» utilisée dans la dénomination de «%#T »« %s » prend seulement aucun OU deux arguments« %s » non déclaré (première utilisation dans cette fonction)« %s » non déclaré ici (n'est pas dans une fonction)« %s » utilisé mais n'a jamais été défini« %s » utilisé précédemment avant sa déclaration« %s » a été déclaré « extern » et plus loin « static »« %s » a été déclaré implicitement « extern » et plus loin « static »« %s » a été précédemment implicitement déclaré comme retournant un « int »« %s » a été utilisé sans déclaration avant sa définition« %s » a été utilisé sans prototype avant sa définition« %s »: inconnu ou non supporté option -gcontrainte «&» utilisé sans classe registrefanion « ' »fanion «(»fanion «+»fanion « - »«-gnat» mal épellé comme «-gant»«-p» n'est pas supporté; utiliser «-pg» et gprof(1)« ... » handler doit être le dernier handler de son bloc d'essai« ... » dans une liste d'identificateurs de style ancien«/*» à l'intérieur d'un commentairefanion « 0 »«::%D» non déclaré (première utilisation ici)«>>» devrait être «> >» dans le nom du patron de la classe«@end» manquant dans l'implantation du contexte«@end» doit appraître dans un contaxte d'implantationl'opérande « B » a de multiples jeux de bitsopérande « B » n'est pas une constantemodificateur « E »fanion « I »modificateur « O »fanion « ^ »fanion « _ »« __alignof » appliqué sur un champ de bits« __builtin_next_arg » appelé sans argumentfanion « a »« and » de tests d'égalité mutuellement exclusifs est toujours 0contrainte de l'opérande « asm » incompatible avec la taille de l'opérandeopérande « asm » requiert une recharge impossiblespécificateurs « asm » ne sont pas permis pour des données de membres non statiques« bool » est maintenant un mot cléspécificateurs de fonction « const» et «volatile» invalide pour «%D » dans la déclaration %sétiquette « default » n'est pas à l'intérieur de la déclaration du switch« defined » doit être suivi par ident ou (ident)« enum %s» déclaré dans la déclaration initiale de la boucle «for »« enum %s » déclaré à l'intérieur de la liste de paramètres« enum %s » incomplet dans le champ final icidéclaration initiale de la boucle « for » utilisée en dehords du mode C99« inline» n'estpas permis dans la déclaration amie de la spécialisation du patron «%D »« inline » spécifié pour la déclaration d'une classe amie« long long long » est trop long pour GCCexpression « long» du switch pas converti à «int » en ISO C« main» doit retourner « int »fonction avec « noreturn » effectue des retourfonction « noreturn» retourne une valeur non «void »opérande « o » n'est pas une constante« operator delete » doit retourner le type « %T »« operator delete » prend le type «%T » comme premier paramètre« operator new» ne doit pas retourner NULL à moins qu'il ne soit déclaré «throw() » (ou -fcheck-new est utilisée)« operator new » doit retourner un type «%T »« operator new » prend le type « size_t » (« %T ») comme premier paramètre« operator= » devrait retourner une référence à «*ceci »« or » de tests non pairé de non égalité est troujours 1« return » avec une valeur, dans la fonction retournant un void« return » sans valeur, dans la fonction ne retournant pas un void« sigof » appliqué à une expression de non aggrégats« sigof » appliqué à un type non aggrégat« sizeof » appliqué à un champ de bits« sizeof» appliqué sur un type incomplet «%T »« sizeof » appliqué à un membre non statique« static » ne peut pas être utilisé lors de la définition (contrairement à la déclaration) de données de membres statiques« struct %s» déclaré dans la déclaration initiale de la boucle «for »« struct %s » déclaré à l'intérieur de la liste de paramètres« struct %s » incomplet dans le champ final ici« this » n'est pas disponible pour les membres statiques de fonctions« union %s» déclaré dans la déclaration initiale de la boucle «for »« union %s » déclaré à l'intérieur de la liste de paramètres« union %s » incomplet dans le champs final ici« va_start » utilisé dans la fonction avec des arguments fixes« void » dans la liste des paramètres doit être la liste entièreun attribut de zone de donnéées ne peut pas être spécifié pour des variables localesune déclaration globaleun entier long longun paramètreun paramètre de la liste avec une ellipse ne peut concorder une déclaration vide de liste de noms de paramètresun local antérieurl'utilisation de déclaration ne peut spécifier template-id. Essayer «using %T::%D'l'utilisation d'une déclaration ne peut spécifier un template-id. Essayer « using %D »abandon dans %s, à %s:%dnom de fichier absolu dans remap_filenamedéclaration abstrait « %T » utilisé dans la déclarationméthode abstraite dans une classe non abstraiteadresse d'une variable registre globale « %s » requiseadresse d'une variable locale « %D » retournéeadresse du non externe « %E » ne peut être utilisé comme patron d'argumentadresse de la fonction surchargée sans information contextuelle de typeadresse d'une variable registre « %s » requisedécalage d'adresse n'est pas une constanteadresse requise pour « %D», lequel est déclaré «register »ajuster les pointeurs pour des retours co-variantsaprès la déclaration précédente dans «%#D»aggrégat «%#D» a un type incomplet et ne peut être définiaggrégat a un initialiseur partiellement entourée d'accoladesinitialiseur d'aggrégat n'est pas une constanteinitialiseur d'aggrégat utilise une arithmétique compliquéevaleur d'aggrégat utilisé où un complexe était attenduvaleur d'aggrégat utilisé où un flottant était attenduvaleur d'aggrégat utilisé où un entier était attenduargument d'alias n'est pas une chaînedéfinitions d'alias ne sont pas supportés dans cette configuration; ignorénom d'alias est trop long - alias ignoréalignement ne peut pas être spécifié pour « %s »l'alignement doit être une puissance faible de 2, pas %dalignement de « %s » est plus grand que l'alignement maximal du fichier objet. %d est utilisé.tous les membres de fonctions dans la classe « %T » sont privésalloué mais liste de délai non utilisée dans l'épilogueambiguités de la déclaration interne de «%#D»ambiguités d'une vieille déclaration de «%#D»abréviation %s est ambiguëinstanciation ambiguë de patron de classe pour «%#T»comversion ambigue pour un sous-tableauconversion de type par défaut ambiguë à partir de « %T »spécialisation de patron amibiguë « %D » pour «%+D»un UNION anonyme ne peut avoir de fonction membreun type d'argument qui a une promotion par défaut ne peut concorder avec une déclaration vide de noms de paramètresun entier long non signéun entier long long non signéancien style anachronique d'initialiseur de classe de baseutilisation anachronique de la taille d'un tableau dans un vecteur deleteet les pointeura ont %d bits, mais g77 ne fonctionne pas encoreaggrégat anonyme sans aucun membre« enum » anonyme déclaré à l'intérieur de la liste des paramètres« struct » anonyme déclaré à l'intérieur de la liste des paramètresstruct anonyme n'est pas l'intérieur du type nommé« union » anonyme déclaré à l'intérieur de la liste des paramètresmacros anonymes variables ont été introduites avec le C99arguments à être formattés ne sont pas « ... »argument #%d est une structureargument 1 de « __builtin_altivec_predicate » est hors gammeargument 1 de « __builtin_altivec_predicate » doit être une constanteargument 3 de « %s » doit être un litéral de 2 bitsargument « %s » ne concorde pas avec celui du prototypeargument « %s » pourrait être maltraitée par un «longjmp» ou un «vfork »argument est une structureargument manquant après %sl'argument de l'attribut « %s » n'est pas «ilink1» ou «ilink2 »argument de l'attribut « %s » n'est pas une chaîne de constanteargument de « __builtin_args_info » doit être une constanteargument de « __builtin_args_info » hors gammeargument de « __builtin_eh_return_regno » doit être une constanteargument de « asm » n'est pas une chaîne de constanteargument de type « %T » ne concorde pas avec « %T »l'argument pour l'attribut « %s » est plus grand que %dargument pour « %s » est manquantargument pour « %s » est manquant + argument pour «-%s» est manquantargument de «-B» est manquantargument de «-V» est manquantargument de «-Xlinker» est manquantargument de «-b» est manquantargument pour «-l» est manquantargument de «-specs» est manquantargument de «-specs=» est manquantargument pour «-x» est manquantargument donnée à la macro « %s »arithmétique sur un pointeur appliqué sur un type incompleton assume que le tableau « %s » a un élémentindex de tableau dans l'initialiseur excèdes les bornes du tableauindex de tableau dans un initialiseur qui n'est pas pour tableauplage d'index du tableau dans l'initialiseur excède les bornes du tableautableau initialisé à l'aide de l'expression d'un tableau de non constantestaille du tableau manquant dans « %D »taille du tableau manquant dans « %s »souscript de tableau a un type « char »souscript de tableau n'est pas un entiertype tableau a un type d'élément incompletvaleur du type array utilisé nécessite un scalairetableaux de fonctions n'a pas grand senscomme « %D »déclaration asm en conflit avec le changement de nom précédentopérande asm %d ne concorde pas probablement avec les contraintespatron asm n'est pas une chaîne de constanteassertion manquante après %sassertion sans prédicataffectationaffectation (non pas l'initialisation) dans la déclarationsuppression d'affectationaffectation au champ final « %s » n'est pas dans le constructeuraffectation au champ final « %s » n'est pas le champ de la classeaffectation au champ statique final « %s » n'est pas dans l'initialiseur de la classetranstypage vers le type « %T » est assumé à partir de la fonction surchargéepointeur assumé vers le membre « %D »à ce point dans le fichiertentative de prise d'adresse du membre « %D » d'une structure de champ de bitstentative de prise d'adresse du membre « %s » d'une structure de champ de bitstentative d'utilisation empoisonée de « %s »les attributs dans un paramètre déclarateur de tableau sont ignorésbarre oblique inverse et retour de chariot séparé par un blancbarre oblique inverse et retour de chariot à la fin du fichierplage PC erroné pour les infos de débug pour la var. locale « %s »adresse erronéeadresse erronée, pas (reg+disp):taille erronée pour l'enlèvement d'espace de la pile: %dinitialiseur de base erronéappel erroné à d30v_move_2wordsdirective erronée -- manque un apostrophe ou un guillemet de fermetureversion d'en-tête erronéinsn erroné pour « A »insn erroné dans d30v_print_operand, cas 0insn erroné pour d30v_print_operand, modificateur « A »:insn erroné pour d30v_print_operand, modificateur « M »:insn erroné pour d30v_print_operand, modificateur « f »:insn erroné pour d30v_print_operand_addresse:insn erroné pour d30v_print_operand_memory_reference:insn erroné pour print_operand, modificateur « B »:insn erroné pour print_operand, modificateur « E »:insn erroné pour print_operand, modificateur « F » ou « T »:insn erroné to print_operand, modificateur « R »:insn erroné to print_operand, modificateur « s »:nombre magique erronénombre magique erroné pour le fichier « %s »méthode de signature erronéemodes_tieable_p erronée pour le registre %s, mode1 %s, mode2 %sPC erroné dans exception_tableversion brute d'en-tête erronéregistre erronécode d'extension de registre erronédécalage insn erroné:constante chaîne erronéetest erronétype erroné dans les paramètres d'informations de mise au pointvaleur (%s) erronée pour l'option %svaleur erronée (%s) pour l'option -mabivaleur erronée (%s) pour l'option -march=valeur erronée (%s) pour l'option -masmvaleur erronée (%s) pour l'opton -mcmodel=valeur (%s) erronée pour l'option -mcpuvaleur erronée (%s) pour l'option -mcpu=valeur erronée (%s) pour l'option -mfpmathvaleur erronée (%s) pour l'option -mipsvaleur erronée (%s) pour l'option -mmodelvaleur erronée (%s) pour l'option -msdatavaleur erronée (%s) pour l'option -mtunevaleur « %s » erronée pour l'option -mcpuvaleur « %s » erronée pour l'option -mfp-rounding-modevaleur « %s » erronée pour l'option -mfp-trap-modevaleur « %s » erronée pour -mmemory-latencyvaleur « %s » erronée pour l'option -mtrap-precisionvaleur %d de type de constante erronée, index %dvaleur erronée pour -mcall-%svaleur erronée pour -msdata=%sfichier zip/jar erroné %sdirective mal composée -- pas de guillement ou d'apostrophe de fermetureen-têtes C incorrectement imbriquées du préprocesseurliste de paramètres incorrectement ponctués dans #definebase « %T » avec seulement le constructeur non par défaut dans la classe sans un constructeurclasse de base «%#T» a un destructeur non virtuelclasse de base «%#T» devrait être explicitement initialisé dans la copie du constructeurclasse de base « %T » déjà initialiséeclasse de base « %T » a des qualificateurs cvclasse de base « %T » a un type incompletinitialiseur de base « %T »initialiseurs de base pour «%#T»objet de base « %E » de la portée d'appel de la méthode n'est pas de type aggrégat « %T »l'opérande de base de «->» a un type non pointeur « %T »l'opérande de base de «->» n'est pas un pointeurtype de base « %T » a échoué pour devenir un type de classe ou un type construitbordure précédente du bloc de base %d est corrompuelistes des bordures du bloc de base %i sont corrompuesblocs de base ne sont pas numérotés consécutivementlargeur du champ de bits «%#D» n'est pas une constante entièrelargeur du champ de bits « %D » n'est pas une constante entièrechamp de bits « %s » a un type invalidechamp de bits « %s » a un type invalide en ISO Clargeur du champ de bits « %s » n'est pas une constante entièreblock_num = %ld, num_blocks = %d + construction JARL boggée: %d + construction JR boggé: %d + registres booléens requis pour l'option de virgule flottanteles suffixes « f » et « l » ensembles sur une constante flottante« long » et « short » spécifiés à la fois pour « %s »signé et non signé spécifiés à la fois pour « %s »groupe d'accolades à l'intérieur d'expression permis seulement à l'intérieur d'une fonctionaccolades autour de l'initialiseur scalaireaccolades autour de l'initialiseur scalaire pour « %T »branchement %d n'a jamais été exécuté + branchement %d a pris = %s + branchement %d a pris = %s%% + déclaration de « break» n'est pas à l'intérieur d'une boucle ou d'un «switch »fonction interne « %s » n'est pas déclarée comme une fonctionfonction interne « %s » n'est pas couramment supportéec4x_address_cost: mode d'adressage invalidec4x_operand_subword: un décalage d'adresse ne peut s'appliquer sur cette adressec4x_operand_subword: adresse invalidec4x_operand_subword: autoincrement invalidec4x_oprande_subword: mode invalidec4x_operand_subword: opérande invalidec4x_print_operand: %%L inconsistentc4x_print_operand: %%N inconsistentc4x_print_operand: %%O inconsistenc4x_print_operand: opérande erronée pour un casec4x_print_operand_address: opérande erronée pour un casec4x_print_operand_address: post-modification erronéec4x_print_operand_address: pré-modification erronéec4x_rptb_insert: ne peut repérer l'étiquette de départc4x_rptb_rpts_p: étiquette supérieur de bloc de répétition déplacée + c4x_valid_operands: erreur interneappel %d n'a jamais été exécuté + appel %d a retourné = %s + appel %d a retourné = %s%% + appel de «(%T) (%A)» est ambiguappel du surchargé «%D(%A)» est ambiguappel en Java de « catch» ou «throw» avec «jthrowable » undéfiniappel au constructeur Java avec « %s » indéfiniappel d'un constructeur Java, alors que « jclass » est indéfiniregistre maltraité par un appel utilisé par un variable registre globaleappelé d'iciobjet appelé n'est pas une fonctionappel du type « %T » comme une méthodene peut traiter des appels inconsistents à « %s »peut seulement utiliser l'attribut « %s » sur la portée de fichier de définitions des objets de type de classene peut accéder la partie imaginaire d'une valeur complexe dans le registre matérielne peut accéder la partie réelle d'une valeur complexe dans le registre matérielne peut fermer %sne peut fermer le fichier d'entrée %sne peut fermer le fichier temporairene peut convertir entre des valeurs de vecteurs de tailles différentesne peut convertir d'un type incomplet « %T » vers « %T »ne peut convertir une valeur en un vecteurne peut créer le répertoire %sne peut créer le fichier « %s » pour dépôt d'informationsne peut définir une fonction amie « %s » dans une définition locale de classene peut faire le tracking de dépendance avec l'entrée à partir de stdinne peut faire l'expansion de %sne peut repérer un registre dans la classe « %s » durant le rechargement «asm »ne peut repérer class$ne peut repérer le répertoire courantne peut avoir varargs avec -mfp-arg-in-fp-regsne peut initialiser la fonction amie « %s »ne peut enligner l'appel de « %s »ne peut rendre « %D » dans la méthode -- n'est pas dans la classene peut mutiler %sne peut ouvrir %sne peut ouvrir %s en écriturene peut ouvrir le fichier de sortie « %s »ne peut lire du fichier temporairene peut redéfinir la valeur retournée par défaut pour les constructeursne peut ré-ouvrir %sne peut rembobiner le fichier temporairene peut initialiser l'attribut « %s » après définitionne peut spécifier «-D» sans «--main» + ne peut utiliser « %s » comme le registre %sne peut écrire dans le fichier de sortiecandidat%s: %+#Dne peut utiliser %s comme pointeur sur un type incomplet « %T »ne peut allouer un objet de type « %T »ne peut appliquer un pointeur de membre « %E » à « %E », lequel n'est pas un type d'aggrégat « %T »ne peut appeler le destructeur «%T::~%T» sans objetne peut appeler un membre de fonction « %D » sans objetne peut convertir « %E » du type « %T » vers le type « %T »ne peut convertir « %T » à « %T » pour l'argument « %P » vers « %D »ne peut convertir « %T » vers « %T » dans %sne peut convertir de la base « %T » à un type dérivé « %T » via la base virtuel « %T »ne peut convertir en un type pointeurne peut convertir type « %T » vers le type « %T »ne peut déclarer un pointeur vers le membre de référence « %D »ne peut créer un fichier temporairene peut créer une information pour le type « %T » parce que sa taille est variablene peut déclarer %s comme référencesne peut déclarer « %D » comme étant un type de champ de bitsne peut déclarer « ::main » comme étant un patronne peut déclarer «::main» à être en lignene peut déclarer « ::main » comme étant staticne peut déclarer un champ de bits « %D » avec un type de fonctionne peut déclarer la champ « %D » comme étant de type « %T »ne peut déclarer le membre «%T::%s» à l'intérieur de « %T »ne peut déclarer la fonction membre « %D » comme ayant un lien statiquene peut déclarer le membre de fonction «%T::%s» à l'intérieur de « %T »ne peut déclarer la paramètre « %D » comme étant de type « %T »ne peut déclarer un pointeur vers le membre «%#T»ne peut déclarer des pointeurs vers des référencesne peut décalrer des références vers des référencesne peut déclarer une fonction statique à l'intérieur d'une autre fonctionne peut déclarer la variable « %D » comme étant de type « %T »ne peut détruire une fonction. Seuls les pointeurs-d'objets sont des arguments valable pour destructionne peut désactiver la fonction interne « %s »ne peut effectuer le remplacement d'un registre zne peut effectuer un dynamic_cast « %E » (du type «%#T') vers le type «%#T» (%s)ne peut explicitement déclarer le membre «%#D» comme ayant une liaison externene peut repérer « %s »ne peut repérer « ldd »ne peut repérer « nm »ne peut repérer de méthode de classe (manufacturé)ne peut repérer la classe « %s »ne peut repérer le fichier pour la classe %s.ne peut repérer la déclaration d'interface pour « %s »ne peut repérer une déclaration d'interface pour « %s », super classe de « %s »ne peut repérer la méthodene peut repérer la déclaration de protocole pour « %s »ne peut repérer la référence pour l'étiquette de classe %s.ne peut repérer le source %sne peut initialiser « %D » à l'espace de noms « %D »ne peut initialiser « %T » à partir de « %T »ne peut initialiser les tableaux en utilisant la syntaxene peut initialiser un table multi-dimensionnel avec initialiseurne peut rendre en ligne « main » en fonction en lignene peut optimiser la division à la fois pour la latence et la quantité produitene peut recevoir d'objets de type non POD «%#T» through « ... »ne peut mettre un objet avec un champ volatile dans un registrene peut recevoir d'objets de type non POD «%#T» through « ... »ne peut recharger l'opérande de constante entière dans « asm »ne peut résoudre la fonction surchargé « %D » basé sur la conversion vers le type « %T »ne peut retourner d'un handler d'une fonction try-block d'un constructeurne peut initialiser l'attribut d'interruption: aucune fonction courantene peut initialiser l'attribut d'interruption: pas de tel identificateurne peut spécifier -o avec -c ou -S et de multiples compilationsne peut spécifier la classe « main » lorsqu'il n'y a pas d'édition de liensne peut spécéfier à la fois -C et -one peut prendre l'adresse du champ de bits « %s »ne peut prendre l'adresse de « ceci », laquelle est une expression rvaluene peut utiliser «::» dans le paramètre d'un déclarationne peut utiliser typeid avec -fno-rttine peut utiliser va-start dans une fonction d'interruptionétiquette du CASE « %E » n'est pas à l'intérieur de la déclaration du SWITCHl'étiquette du « case » ne se réduit pas en une constante entièreétiquette du 'case« n»est pas à l'intérieur de la déclaration du switchvaleur du case «%ld» n'est pas dans le type énumérévaleur du case «%ld» n'est pas dans le type énuméré « %s »le transtypage ajoute un nouveau qualifacateur au type de la fonctiontranstypage écarte les qualificateurs du type cible du pointeurtranstypage ne concorde pas avec le type de la fonctiontranstypage de « %T » vers « %T » écarte les qualificateurs du type cible du pointeurtranstypage de « %T » vers « %T » augmente l'alignement requis pour le type ciblétranstypage d'un pointeur vers un entier de taille différentetranstypage augmente l'alignement requis pour le type cibléle transtypage spécifie le type de tableaule transtypage spécifie le type de fonctiontranstypage d'un type non référencé utilisé comme lvaluetranstypage vers un pointeur d'un entier de taille différentetranstypage vers un type union d'un type non présent dans l'uniontranstypage de « %T » vers « %T » ne fait pas de dé-référence de pointeurerreur cccp: type de hachage spécial invalidechangements signifiant de « %D » à partir de «%+#D»modification de l'ordonnancement de recherche du répertoire système « %s »tableau de caractères initialisé à l'aide d'une grande chaîneconstante caractère trop longuechoisir un système à octets de poids fort ou faible mais pas les deuxchoisir m340 ou m210 mais pas les deuxchoix de « %D » à la place de « %D »dépendance circulaire dans les arguments par défaut de «%#D»héritage circulaire dans la déclaration de l'interface pour « %s »délégation de pointeur circulaire détectéclasse « %s » n'a pas de méthode nommée « %s » concordant avec la signature « %s »classe « %T » n'a pas aucun champ nommé « %D »classe « %T » est implicitement ami avec elle-mêmeclasse « %s » existe déjàclasse « %s » n'implante pas le protocole « %s »close %dclose %smodel de code %s n'est pas supporté en mode PICmodel de code « %s » n'est pas supporté dans le mode %s bitsmodel de code « large » n'est pas supporté encorecollect2 version %scollect: lecture de %s + collect: recompilation de %s + collect: ré-édition des liens + collect: tordage de %s dans %s + virgule à la fin de liste d'énumerateursexpression virgule utilsée pour initialiser la valeur de retouropérateur virgule dans l'opérande #ifcomparaison d'un nombre flottant à l'aide de == ou != n'est pas sûrecomparaison entre «%#T» et «%#T»comparaison entre un pointeur et un entiercomparaison entre un signé et un non signécomparaison entre des expressions entières signée et non signéecomparaison entre les types «%#T» et «%#T»comparaison est toujours %dcomparaison est toujours %d en raison de la largeur du champ de bitscomparaison est toujours fausse en raison d'une gamme limitée de type de donnéescomparaison est toujours vraie en raison d'une gamme limitée de type de donnéescomparaison de pointeurs complet et incompletcomparaison entre des types distincs de pointeur manque de transtypagecomparaison d'un non signé promu avec une constantecomparaison d'un non signé promu avec un non signécomparaison d'une expression non signée < 0 est toujours faussecomparaison d'une expression non signée >=0 est toujours vraiecomparaisons comme X<=Y<=Z n'ont pas de signification mathématiquefichier d'en-tête requis pour la compilationcompilation terminatée. + constante complexe entière est trop grande pour le type 'complex int'« complex » invalide pour « %s »concaténation de litéraux de chaîne avec « __FUNCTION__ » est dépréciée. Cette option ne sera plus disponible dans le futur.configuration: REAL, INTEGER, et LOGICAL ont %d bits,configuration: char * contient %d bits, mais INTEGER seulement %d -- + déclaration ASSIGN pourrait échouerconfiguration: char * contient %d bits, mais ftnlen seulement %dspécifications d'accès conflictuelles pour le champ « %s », ignoréspécifications d'accès conflictuelles pour la méthode « %D », ignoréarchitectures conflictuelles définies - utilise les séries Carchitectures conflictuelles définies - utilise les séries Kdéclarations conflictuelles de « %s »types retournés conflictuels spécifiés pour «%#D»nom de super classe « %s » est conflictueltypes conflictuels pour «%#D'types conflictuels pour « %s »type conflictuels pour la fonction interne « %s »conflits avec la déclaration interne de «%#D»conflits avec la déclaration de fonction de «%#D»conflits avec la nouvelle déclaration avec le lien %Lconflits avec la déclaration précédente de «%#D»const « %s » ne peut être déclaré « mutable »la déclaration constante de « %s » en suit une non constanteconstantes objets ne peuvent aller dans .sdata/.sbssconst_double_split a reçu un insn erroné:constructeur ne peut être un membre statique d'une fonctionconstructeur pour la classe étrangère « %T » ne peut être un membresyntaxe de constructeur utilisé mais aucun constructeur déclaré pour le type « %T »constructeurs ne peut être déclarés virtuelsconstructeurs ne peuvent pas être « %s »déclaration de « continue » n'est pas à l'intérieur d'une bouclecontrôle a atteint la fin non void de la fonctionconversion de NaN en intconversion de NaN en un int non signéconversion de «%#T» vers «%#T'conversion de « %T » à « %T » écarte les qualificateursconversion de « %T » vers « %T » est ambiguëconversion de « %T » vers un type non scalaire « %T » demandéeil manque un type pour la conversion à la fin du formatconversion de « %E » à partir de « %T » vers « %T » est ambiguëconversion de %s%s ne sera jamais utilisé dans un type d'opérateur de conversionconversion vers un type incompletconversion vers un type non scalaire demandéconversion d'un NULL vers un type non pointeurconversion de « %T » vers « %T »conversion d'une fonction surchargée « %D » vers le type «%#T» est ambiguëinfo de profilage corrompu: prob pour %d-%d pense être %d ne peut convertir 0x%l.8x dans une régionne peut convertir « %E » vers « %T »ne peut convertir l'argument du patron « %E » vers « %T »ne peut repérer un registre de déversementne peut repérer le champ classe$ dans le type d'interface JAVA « %T »ne peut repérer le fichiers des specs %s + ne peut ouvrir le fichier de vidange « %s »n'a pu séparer insnne peut déterminer le nom de la cible pour le tracking de dépendancecréation de %scréation du tableau « %T »création d'un tableau de taille zérocréation d'un tableau de taille zéro (« %E »)création d'un pointeur vers le membre d'une fonction d'un type non classe « %T »création d'un pointeur vers le membre d'un type non classe « %T »création d'un pointeur vers le membre de référence du type « %T »saut croisé désactivé: %d > 1000 blocs de base et %d >= 20 blocs edges/basicle fichier courant est plus vieux que %sd30v_emit_comparisonla zone de données de « %s » entre en conflit avec un déclaration précédentedéfinition de données n'a pas de type ou de classe de stockageinitialiseur de données sur l'hôte a un alignement des octets différent (endian)membre de données « %D » ne peut être membre du patrontype de données de « %s » n'est pas applicable pour un registreconstante décimale est tellement grande qu'elle est non signéepoint décimal dans l'exposant - impossible!déclaration ne déclare rien du tout!déclaration du paramètre « %s » mais pas de tel paramètredéclaration de la fonction C «%#D» en conflit avecdéclaration de «%#D»déclaration de «%#D» est externe et initialisédéclaraion de «%#D» en dehors de la classe n'est pas une définitiondéclaration de «%#D» cache un paramètredéclaration de « %D » comme « %s »déclaration de « %D » comme tableau multidimensionel doit avoir des bornes pour chaque dimension excepté pour la premièredéclaration de « %D » comme non-fonctiondéclaration de « %D » n'est pas dans l'espace de noms entourant « %D »déclaration de « %F » amène différentes exceptionsdéclaration de « %s » comme un tableau de fonctionsdéclaration de « %s » comme un tableau de « voids »déclaration de « %s » est « extern » et est initialisédéclaration de « %s » fait ombrage à %sdéclaration de « %s » fait ombrage au membre de « this »déclaration de « %s » cache un paramètredéclaration de « %s » cache un symbole de la liste des paramètresdéclaration d'une variable « extern » « %s » dans la déclaration initiale «for »déclaration de « %s » qui n'est pas une variable dans la déclaration initiale de «for »déclaration d'une variable « static» « %s » dans la déclaration initiale de la boucle «for »déclaration du patron «%#D»declarator-id manquant; utilisation du mot réservé « %D »décrément d'un pointeur vers une structure inconnueargument par défaut « %E » utiliser une variable locale « %D »argument par défaut pour «%#D» à un type « %T »argument par défaut pour le paramètre de type « %T » a le type « %T »argument par défaut donné pour le paramètre %d de «%#D»argument par défaut manquant pour le paramètre %P de «%+#D»argument par défaut spécifié dans la spécialisation explicitearguments par défaut ne sont pas permis dans la déclaration amie de la spécialisation du patron « %D »initialisation par défaut de «%#D», lequel a un type référencédéfinition explicite de spécialisation « %D » dans lka déclaration amidéfinition de «%#T» à l'intérieur d'un patron de liste de paramètresdéfinition du tableau «%#D» dans la conditiondéfinition de la classe « %T » dans la conditiondéfinition de l'aggrégat « %T » dans la conditiondéfinition implicitement déclarée « %D »définition fournie pour une instanciation explicitedestruction de « %T » est indéfiniedestruction du tableau «%#D'conversion dépréciée de la chaîne de constante vers « %T »utilisation déprécié d'étiquette à la fin de la déclaration composéedéréférence d'un pointeur « void * »déréférence d'un pointeur en un type incompletunion dérivée « %T » invalidedestructeur « %T » doit concorder avec le nom de la classe « %T »destructeur ne peut être un membre statique d'une fonctiondestructeur pour la classe étrangère « %T » ne peut être un membrenom du destructeur «~%T» ne concorde pas avec le type « %T » de l'expressiondestructeur requis pour «%#D»'spécificateur du destructeur «%T::~%T» doit des noms concordantsspécificateur du destructeur «%T::~%T()» doit avoir des noms concordantsdestructeurs ne peut être « %s »destructeurs ne peuvent pas avoir de paramètredestructeur doit être membres de la fonctiondestructeurs ne prend aucun paramètreN'a pas utiliser toutes les entrées bb du graphe, fonction %s + type différentbase directe « %T » inaccessible dans « %T » en raison de l'ambiguitédirectives ne peuvent être utilisées à l'intérieur d'un argument macronom de répertoire manquant après %snom de répertoire manquant après l'option -Inom du répertoire doit suivre immédiatement -Idivision par zérodivision par zéro dans #ifdivision par zéro dans «%E %% 0»division par zéro dans «%E %% 0.»division par zéro dans «%E / 0»division par zéro dans «%E / 0.»chaînes entre quillemets ne sont pas allouées dans les expression #ifen raison d'un accès non public du membre « %D »en raison de la présence d'un constructeurdup2 %d 1valeur de « case » double ou qui en chevauche un autreduplication de l'attribut ConstanValue pour le champ « %s »« %s » apparaît en double« const » apparaît en double« restrict » apparaît en doublevolatile» apparaît en doublenom d'opérande asm « %s » apparaît en doubleduplication du type de base « %T » invalidevaleur de « case » doubledouble déclaration pour le protocole « %s »duplication de déclaration de la méthode de classe « %s »duplication de déclaration de la méthode d'instanciation « %s »duplication de définition de la méthode de la classe « %s »duplication de définition de la méthode d'instanciation « %s »valeur d'énumérateur « %D » en doubleduplication d'instanciation explicite de «%#D»duplication d'instanciation explicite de «%#T»champ « %D » en double (comme enum et non enum)duplicattion du champ « %D » (comme type et non type)initialisation en double de %Dduplication de déclaration d'interface pour la catégorie «%s(%s)»double déclaration d'interface pour la classe « %s »étiquette « %D » apparaît en doubledéclaration de l'étiquette « %s » est doubleparamètre de macro en double « %s »membre « %D » est doublemembre « %s » apparaît en doubletype « %D » imbriqué en doublequalificateurs de types dupliqués dans déclaration %sdépendances dynamiques. + dépendance dynamique %s n'a pas été repérédynamic_cast de «%#D» vers «%#T» ne pourra jamais réussiréléments du tableau « %D » a un type incompletéléments du tableau « %s » ont des types incomplets«\0» enchâssé dans le formatgénération d'une opérande PIC mais le registre PIC n'est pas initialiséexpression #if videcorps vide de la déclaration du elseconstante caractère videdéclaration videnom de fichier vide dans #%sbornes vides d'index dans l'initialiseurprécision de gauche vide dans le format %sprécision vide dans le format %sbornes spécifiées sont videsinitialiseur scalaire videautoriser le support de pistage arrière si seulement significatif lors de la compilation pour le Thumbautoriser le support d'inter-réseautage des appelés si seulement significatif lors de la compilation pour le Thumbautoriser le support d'inter-réseautage des appelants si seulement significatif lors de la compilation pour le Thumbfermetures de patrons de classe ne sont pas explicitement spécialiséesfin insn %d du bloc %d n'a pas été repéré dans le flot insnenum défini à l'intérieur des paramètrestype énuméré et non énuméré dans l'expression conditionnellenon concordance de type énuméré dans l'expression conditionnelle: « %T » vs « %T »valeur d'énumération « %s » n'est pas traitée dans le switchvaleurs d'énumération excède les bornes du plus grand entiervaleur de l'énumérateur pour « %D » n'est pas une constante entièrevaleur de l'énumérateur pour « %s » n'est pas une constante entièrevariable d'environment DJGPP non définievariable d'environment DJGPP pointe vers un fichier corrompu « %s »variable d'environment DJGPP pointe sur un fichier manquant « %s »erreur de fermeture %serreur dans l'entrée #%d du lot de constantes + error lors de l'analyse syntaxique du lots de constanteserreur lors de l'analyse syntaxique des champserreur lors de l'analyse syntaxique des attributserreur lors de l'analyse syntaxique des méthodeserreur d'écriture dans %sséquence d'échappement hors gamme pour le type caractèretraitement d'exceptions désactivé, utiliser -fexceptions pour l'activerexception du type « %T » sera interceptéeéléments en excès dans l'initialiseur d'aggrégatéléments en excès dans l'initialisation de tableauéléments en excès dans l'initialisateur de tableau de caractèreséléments en excès dans l'initialisateur de scalaireéléments en excès dans l'initialisateur de structéléments en excès dans l'initialisateur d'unionéléments en excès dans l'initialisateur du vecteurexecv %sexecvp %sattendait %d niveaux de patron de paramètres pour «%#D», obtenu %dinstanciation explicite de «%#D»instanciation explicite de «%#D» aprèsinstanciation explicite de «%#T» aprèsinstanciation explicite de «%#T» avant la définition de patroninstanciation explicite de « %D » mais pas de définition disponibleinstanciation explicite d'un non patron «%#D»instanciation explicite de type non patron « %T »spécialisation explicite icispécialisation explicite dans la portée d'un non espace de noms « %D »spécialisation explicite n'est pas précédée de « template <> »spécialisation explicite de %D après la première utilisationspécialisation explicite du non patron « %T »expression « %E » de la classe abstraite de type « %T » ne peut être utilisé dans une expression throwdéclaration de l'expression a un type incompletregistres étendus n'a pas de demis hautsdéclaration externe de «%#D» ne concorde pasdéclaration externe de « %s » ne concorde pas avec la globalegroupe d'accolades superflu à la fin de l'initialiseuréléments superflus dans l'initialiseur scalairequalification additionnelle «%T::» sur le membre « %D » ignoréqualification additionnelle «%T::» sur le membre « %s » est ignoréepoint virgule superflu dans le struct ou l'union spécifiétexte superflu à la fin de la directivejetons superflus à la fin de la directive #%squalificateur de type additionnel dans l'argument du format (arg %d)« %T » surperflu ignoréargument superflu à l'option « %s »code f2c compatible n'a pas besoin d'être générééchec de repérage de la classe « %s »FATAL:fclosefclose() %sfdopenchamp « %s » n'a pas été repéré dans la classechamp «%#D» est statique; le seul point d'initialisation est sa définitionchamp «%#D» avec le même nom qu'une classechamp « %D » déclaré statique dans l'unionchamp « %D » a un type incompletchamp « %D » dans une classe locale ne peut être statiquechamp « %D » incorrectement validé comme un type de fonctionchamp « %D » incorrectement validé comme un type de méthodechamp « %D » incorrectement validé comme type de décalagechamp « %s » déclaré comme une fonctionchamp « %s » a un type incompletchamp « %s » n'a pas été trouvéinitialiseuur du champ n'est pas une constantetype de initialiseur du champ ne concorde pasnom du champ n'est pas dans l'initialiseur de l'enregistrement ou de l'unionchamp de précisionlargeur de champlargeur de champ dans le format de printflargeur de champ dans le format de scanflargeur de champ dans le format de strfmonlargeur de champ dans le format de strftimefichier %s non repéré, compteur d'exécution assumé être à zéronom de fichier manquant après %sfichier non repéré « %s »nom de fichier manquant après l'option %snom de fichier manquant après l'option -inom de fichier manquant après l'option -ocaractère de remplissagecaractère de remplissage dans le format de strfmonchamp final « %s » peut ne pas avoir été initialiséfonction fini() repérée dans l'objet %spremier argument de « %s » devrait être «int »premier argument de « __builtin_choose_expr » n'est pas une constantepremier argument de « va_arg » n'est pas de type « va_list fix_sched_param: paramètre inconnu: %smembre flexible de tableau dans un autre struct videmembre flexible de tableau dans l'unionmembre flexible de tableau n'est pas à la fin du structexposant de la constante flottante n'a pas de chiffreconstante flottante peut ne pas être en base 16constante flottante mal utiliséeconstante flottante est hors gammeconstante en virgule flottante n'est pas une opérande immédiate validenombre flottant excède les limites de « %s »nombre en virgule flottante excède les limites de « double »nombres flottants ne sont pas valides dans un #ifnombres flottants ne sont pas permis dans les expressions #ifdébordement de virgule flottantedébordement d'un nombre en virgule flottante dans l'expressioncontrôle de flot insn à l'intérieur d'un bloc de basesuit la définition d'un non prototype icifopen() %spour chaque fonction dans laquelle il apparaît.)pour la déclaration du patron « %D »argument de format %d inutilisé avant l'utilisation de l'argument %d dans le format $-styleargument de format %d utilisé plus d'une fois dans le format %sl'argument de format n'est pas un pointeur (arg %d)l'argument de format n'est pas un pointeur de pointeur (arg %d)format est une longue chaîne de caractèresformat n'est pas une chaîne de mots et pas d'arguments de formatformat n'est pas une chaîne de mots, types d'arguments ne sont pas vérifiésformat n'est pas une chaîne de mots, chaîne du format n'est pas vériféel'argument de la chaîne de format suit les arguments devant être formattésl'argument de la chaîne de format n'est pas de type « string »chaîne de format a un nombre invalide d'opérandesformant %s pour référencer le type « %T »formation d'une référence en voiddéclaration par l'avant (forward) de «%#T»complétion logicielle FP requiert -mtrap-precision=ifp_offset (%ld) ou end_offset (%ld) est plus petit que zérofr30_print_operand: code %%F invalidefr30_print_operand: code %%x invalidefr30_print_operand: opérande invalide pour code %%Afr30_print_operand: MEM non traitéfr30_print_operand: code inconnufr30_print_operand: code %%B non reconnufr30_print_operand: code %%b non reconnuefr30_print_operand: code %%p non reconnuefr30_print_operand_address: adresse non traitéetaille de trame trop grande pour une vérification fiable de la piledéclaration amie «%#D» déclare une fonction non patrondéclaration amie n'est pas dans la définition de classedéclaration amie requiert une clé de classes, i.e. « friend %#T'déclaration ami requiert une clé de classe, i.e. « friend class %T::%T'fstat %sfonction « %D » est initialisée comme une variablefonction « %D » ne peut être déclarée amiefontion « %D » déclarée surchargée, mais aucune définition n'apparaît pour la résoudre?!?fonction « %D » déclaré comme virtuelle à l'intérieur d'un agrégatfonction « %s » ne peut être déclarée « mutable »fonction « %s » est initialisée comme une variablefonction « %s » redéclarée comme étant inlinefonction « %s » redéclarée à l'intérieur noinlinefonction « %s » a été précédemment déclarée à l'intérieur d'un bloccorps de fonction pour le constructeur est manquanteappel de fonction a une valeur d'aggrégatfonction ne pas pas être en lignedéclaration de fonction n'est pas un prototypefonction déclarée avec « noreturn» a une déclaraion avec «return »définition de fonction déclaré « auto »définition de fonction déclarée « register »définition de fonction déclarée « typedef »fonction ne retourne pas un type « string »fonction peut être un candidat possible pour l'attribut du format de « %s »fonction peut être une possible candidate pour l'attribut « norreturn »Le type retourné d'une fonction ne peut être une fonctionfonction retourne l'adresse d'une variable localefonction retourne un aggrégatfonction trop grande pour être en lignetypes de fonction ne sont pas vraiment compatibles en ISO Cfonction utilise « __builtin_eh_return »fonction utilisant alloca ne pas pas être en lignefonction utilisant setjmp ne pas pas être en lignefoncton utilsant un type complex short ne peut être en lignefonction avec un saut calculé ne peut pas être en lignefonction avec étiquette d'adresses utilisée avec les initialiseurs ne peut pas être en lignefonction avec fonctions imbriquées ne peut pas être en lignefonction avec un goto non local ne peut pas être en lignefonction avec des attributs spécifiques à la cible ne peut pas être en lignefonction avec une unité transparente de paramètre ne peut pas être en lignefonction avec un paramètre de taille variable ne peut pas être en lignefonction avec une valeur retournée de taille variable ne peut pas être en lignemacro « %s » identique à une fonction doit être utilisé avec des arguments en C traditionnelfunction_profiler supporté pour MMIXversion du pilote gcc %s exécutant le version %s de gcc + version gcc %s + gcov (GCC) %s + Générer du code RPcode « thunk» générique a échoué pour la méthode «%#D» laquelle utilise « ... »déclaration globale «%#D»variable registre globale « %s » utilisée dans une fonction imbriquéevariable registre globale suit la définition d'une fonctionvariable globale registre a une valeur initialea obtenu %d paramètres de patron pour «%#D»a obtenu %d paramètres de patron pour «%#T»gp est une constante (mais save/restore gp fait par appels indirects)gp_offset (%ld) ou end_offset (%ld) est plus petit que zéroinit à demi PIC appelé sur un système qui ne le supporte pasen-tête insn %d du bloc %d n'a pas été repérée dans le flot insnconstante de caractères en hexadémical ne peut être insérée dans un octetéchappement hexadécimal hors gammeséquence d'échappement hexadécimale hors gammecontante flottante hexadécimal n'a pas d'exposantiC2.0 et iC3.0 sont incompatibles - utilise iC3.0ia64_print_operand: code inconnunom d'identificateur « %s » entre en conflit avec la stratégie interne de dénomination de GNU C++#pragma ignoré %s#pragma ignoré %s %squalificateurs « %V » ignorés pour « %T »spécificateur asm ignorés pour la variable locale non statique « %s »option « %s » de la ligne de commande est ignoréerépertoires « %s » doubles sont ignorés + initialiseurs superflus ignorés pour « %T »caractère multioctet invalide ignorérépertoires « %s » inexistents sont ignorés + option « %s » ignorée en raison de la spécification du niveau de mise au poitn invalidepragma: %s ignoréoption inconnue «%.*s» ignorée dans «-f%s»pointeur illégal pour un champ de bits « %D »nom d'implantation réservé « %D » est utilisédéclaration implicite de la fonction «%#D»déclaration implicite de la fonction « %s »les registres implicitement dépilés doivent être groupés au haut de la pileopérateur impossible « %s »impossible de contraindre les registres en « asm »dans le bloc de base %d:dans la déclaration de « %D »dans le passage de l'argument %P de «%+D»incompatibilités entre le fichier objet & les valeurs attenduesoptions d'inter-réseautage incompatiblestype incompatible pour l'argument %d de « %s »type incompatible pour l'argument %d de l'appel indirect de fonctiontype incompatibles dans %stype incompatible dans l'affectation de « %T » vers « %T »option « %s » est incomplèteimplantation incomplète de la catégorie « %s »implantation incomplète de la classe « %s »type incomplet « %T » n'a pas de membre « %D »type d'unification incomplètenom-de-caractère-universel incompletspécification inconsistente avec l'instance de la vairablecontrainte d'opérande inconsistente en « asm »insn incoorect:incérment d'un pointeur vers une structure inconnuevaleur index au lieu du nom de champ dans l'initialiseur d'unionfonction init repérée dans l'objet %sinitialisationinitialisation des désignateurs ne doit pas être imbriquéeinitialisation d'un membre de tableau flexibleinitialisation d'un membre de tableau flexible dans un contexte imbriquéinitialisation de multiples membres de « %T »champ initialisé avec effets de bord a été écrasévariable initialisé « %s » est marquée dllimportélément initialisateur n'est pas évaluable au moment du chargementélément initialiseur n'est pas une constantefin prématurée de l'initialiseurinitialiseur a échoué lors de la détermination de la taille de « %D »échec de l'initialiseur pour déterminer la taille de « %s »initialiseur pour une valeur flottante n'est pas une constante flottanteinitialiseur pour une valeur entière est trop compliquéeinitialiseur pour la variable scalaire requiert un élémentinitialisateur de variable « static » n'est pas une constanteinitialisateur de variable « static » utilise une artihmétique compliquéeinitialiseur invalide pour un membre statique avec constructeurliste d'initaliseurs a été traité comme une expression composéeconstruction de la liste d'initialiseurs invalide pour « %D »initialiseur de construction de liste invalide pour l'objet de classe dérivée « %D »initialiseur de construction de liste invalide pour l'objet de classe polymorphique « %D »liste d'initialiseurs pour les objets de classe avec classes de baseliste d'initialiseurs pour les objets de classe avec classes de base virtuellesliste d'initialiseurs pour objet utilisant des fonctions virtuellesliste d'initialiseurs traitée comme une expression composéeinitialiseur spécifié pour une fonction non membre «%#D»initialiseur spécifié pour une méthode non virtuelle « %D »chaîne d'initialisateur pour le tableau de caractères est trop longueinitialise le tableau avec la liste des paramètresenlignage des constantes flottantes n'est pas supporté sur cet hôtefonction inline « %s » a reçu l'attribut noinlinefonctions en ligne ne peuvent pas être supportées pour ce type de valeur retournéeenlignage a échoué dans l'appel à « %s »contrainte d'entrée de l'opérande contient « %c »insn %d à l'intérieur du bloc de base %d mais block_for_insn est %iinsn %d à l'intérieur du bloc de base %d mais block_for_insn est NULLinsn %d est dans de multiples blocs de base (%d et %d)insn ne satisfait pas à ses contraintes:insn à l'extérieur du bloc de baseinstallés: %s%s + instance « %s » de la variable accédé par la méthode de classeinstance de la variable « %s » est déclaré %sinstance de la variable « %s » est déclaré privéeinstanciation de « %D » comme type « %T »instruction de cédulage n'est pas supportée sur cette machine cibleinformation contextuelle insuffisante pour déterminer le typetableau d'entier initialisé à l'aide d'un chaîne courteconstante entière contient des chiffres en dehors la base numériqueconstante entière est plus grande que la valeur maximale pour ce typeconstante entière est si grande qu'ell est non signéeconstante entière trop grande pour la configuration du compilateur - tronqué à %d bitsconstante entìère est non signée en ISO C, signé avec -traditionalconstante entière plus grande que la valeur maximale de %sconstante entière est hors gammedébordement d'entier dans l'expressiondébordement entier dans l'expresion du préprocesseurerreur internal du compilateur. Adresse erronée:erreur internal du compilateur. Décalage incorrect:erreur internal du compilateur. Mode inconnu:erreur interneerreur interne - nom Utf8 invalideerreur interne - trop de type d'interfaceerreur interne - utilisation d'un type non définiErreur interne dans %s, à tradcpp.c:%d + SVP soumettre un rapport complet des anomalies rencontrées. + Consulter %s pour les instructions.erreur interne dans check-init: arbre de code n'est pas implanté: %serreur interne dans generate_bytecode_insn - arbre de code n'est pas implanté: %serreur interne--pas de saut suivant la comparaison:erreur interne: erreur interne: %%) trouvé sans %%( dans le patron d'aswsemblageerreur interne: %%> trouvé sans %%< dans le patron d'assemblageerreur interne: %%] trouvé sans %%[ dans le patron d'assemblageerreur interne: %%} trouvé sans %%{ dans le patron d'assemblageerreur interne: %serreur interne: registre erroné: %derreur interne: cris_side_effect_mode_ok avec des opérandes erronéeserreur interne: effet de bord de insn sideeffect-insn ayant un effet principalabandon interne de gccerreur interne gcc: ne peut exprimer la localisation symboliquemoniteur interne gcc: branchement court(%x)regno interne mal fait: regno = %d + routines d'interruption de service ne peuvent être codées en mode THUMBl'inter-réseautage force l'utilisation de APCS-32#-line invalide#ident invalidedirective #ident invalide#line invalide#pragma %s invalde#pragma GCC directive empoisonée invalide%%-code est invalideopérande %%A invalideOpérande %%B invalidevaleur %%B invalideopérande %%C invalidevaleur %%C invalideopérande %%D invalidevaleur %%D invalidevaleur %%E invalidevaleur %%F invalidevaleur %%G invalidevaleur %%H invalidevaleur %%J invalidevaleur %%J invalidevaleur %%K invalidevaleur %%L invalidevaleur %%M invalidevaleur %%N invalidevaleur %%O invalideopérande %%P invalidevaleur %%P invalidevaleur %%Q invalidevaleur %%R invalidevaleur %%S invalidevaleur %%T invalidevaleur %%U invalidevaleur %%V invalideopérande %%Y invalidevaleur %%Z invalidevaleur %%b invalideopérande %%c invalideopérande %%d invalideopérande %%f invalidevaleur %%f invalidevaleur %%h invalidevaleur %%j invalidevaleur %%j invalidevaleur %%k invalidevaleur %%m invalidevaleur %%o invalidevaleur %%p invalidevaleur %%q invalidevaleur %%r invalidevaleur %%s invalidevaleur %%s/S invalidevaleur %%u invalidevaleur %%v invalidevaleur %%x/X invalidevaleur %%xn invalidevaleur %%z invalideoption invalide --param: %sPC invalide dans la numéro de ligne de la tableUNSPEC invalide comme opérandeUNSPEC invalide comme opérande (1)UNSPEC invalide comme opérande (2)remplacement invalide de registre Z pour insn« asm » invalide: adresse invalidemode d'adressage invalideargument invalid de « __builtin_frame_address »argument invalid de « __builtin_return_address »type d'argument invalide pour l'attribut « %s »macro interne invalide « %s »appel invalide vers un membre de fonction ayant besoin de « ceci » dans le champ du membre statique de la fonctiontranstypage invalide pour un type de fonction « %T »paramètre d'interception invalidecaractère « %c » invalide dans le #ifcaractère invalide '\%03o» dans le #ifconstante de caractères invalide dans le #ifcode invalideconst_cast invalide à partir du type « %T » vers le type « %T »const_cast invalide de la rvalue du type « %T » vers le type « %T »constructeur invalide; vous vouliez probablement dire «%T (const %T&)»conversion invalide de « %T » vers « %T »conversion invalide vers un type « %T » à partir du type « %T »type retourné covariant invalide pour «%#D»initialisation de données membres invalidedéclaration invalide du patron de membre «%#D» dans la classe localedéclarateur invalideargument invalide pour le patron par défautdéfinition invalide d'un type qualifié « %T »expression invalide comme opérandefanion « %s » invalide dans la ligne de directivesoption d'émulation en virgule flottante invalide: -mfpe-%sformat invalide dans la commande #linetype de hachage invalide %d dans cpp_macro_definitioninitialisation invalide dans la class de données de membre statiques d'un non entier de type « %T »adresse mémoire (S) d'indirection invalideadresse mémoire d'indirection invalidevaleur initiale invalide pour le membre « %s »initialiseur invalideinitialiseur invalide pour une chaîne de bitsinitialiseur invalide pour une méthode virtuelle «%#D»insn invalide:constante entière invalide dans la liste de paramètre, avez-vous oublier de donner un nom de paramètre?lvalue invalide dans la déclaration asmlvalue invalide dans l'affectationlvalue invalide dans l'unaire «&»nom de macro invalidenom de macro invalide « %s »masque invalidedéclaration de membre de patron invalide « %D »mode invalide pour gen_tst_regmode invalide pour la comparaison d'entiers dans gen_compare_regnombre invalide dans l'expression #ifdécalage invalide dans l'adresse ybaseoffsetof invalide du type non POD «%#T»; utiliser un pointeur vers un membre à la placeopérande invalide pour « %c »opérande invalide pour le modificateur « A »opérande invalide pour le modificateur « D »opérande invalide pour le modificateur « H »opérande invalide pour le modificateur « P »opérande invalide pour le modificateur « T »opérande invalide pour le modificateur « b »opérande invalide pour le modificateur « e »opérande invalide pour le modificateur « m »opérande invalide pour le modificateur « p »opérande invalide pour le modificateur « v »opérande invalide pour le modificateur « z »opérande invalide dans l'instructionopérande invalide pour le modificateur de lettreopérande invalide pour le code de sortieopérande invalide pour le code %%H/%%Lopérande invalide pour le code %%Nopérande invalide pour le code %%Ropérande invalide pour le code %%T/%%Bopérande invalide pour le code %%Uopérande invalide pour le code %%Vopérande invalide pour le code %%popérande invalide pour le code %%sopérandes invalides pour les types « %T » et « %T » en binaire « %O »opérandes invalides pour le binaire %sopération invalide sur un type non instanciéoption invalide %soption invalide « %s »option invalide «-mshort-data-%s'opton invalide «-mstack-increment=%s'option invalide «entry%s'paramètre invalide « %s »paramètre invalide pour le type « %T »valeur du paramètre invalide « %s »directive de pré-traitement invalide #%sponctuation invalide « %c » dans la contraintequalificteurs invalide pour un type de fonction non membretype du receveur invalide « %s »redéclaration invalide de « %D »registre invalide dans l'instructionregistre invalide dans l'instruction de déplacementregistre invalide dans l'adressage ybasenom de registre invalide « %s » pour un variable registrenom de registre invalide pour « %s »reinterpret_cast invalide à partir du type « %T » vers le type « %T »reinterpret_cast invalide d'une expression rvalue de type « %T » vers le type « %T »type retourné invalide pour la fonction «%#D»type retourné invalide pour le membre de la fonction «%#D»rotation invalide insnsecond argument invalide de « __builtin_prefetch »; utilise zéroopérateur de décalage invalide dans emit_1600_core_shiftspécification invalide! Bug dans cc.static_cast invalide du type « %T » au type « %T »classe de stockage invalide pour la fonction « %s »constante chaîne invalide « %E »chaîne invalide, «\» final est ignorésuffixe invalide '%.*s» pour une constante entièresuffixe invalide pour une constante entièresuffixe invalide pour une constante entièretroisième argument invalide de « __builtin_prefetch »; utilise zérojeton invalide dans l'expressionexpression valeur de vérité invalidetype invalide « %T» déclaré «friend »type invalide « %T » pour l'argument par défaut « %T »type « void » invalide pour newtype d'argument invalidetype d'argument invalide pour « %s »modificateur invalide de type à l'intérieur d'un déclarateur de tableaumodificateur de type invalide dans la déclaration de pointeurqualificateur de type invalide pour un type de fonction non membretype invalide: « void & »types invalides «%T[%T]» pour un sous-script de tableauutilisation invalide de %%d, %%x, ou %%Xutilisation invalide de « %D »utilisation invalide de « %T »utilisation invalide de « %s » sur un pointeur vers un membreutilisation invalide de «--» sur une variable booléenne « %D »utilisation invalide de « :: »utilisation invalide de « restrict »utilisation invalide de « ceci » au niveau supérieurutilisation invalide de « ceci » dans un non membre de fonctionutilisation invalide de « virtual» dans la déclaration d'un patron de «%#D »utilisation invalide d'un pointeur vers un type incomplet dans un pointeur arithmétiqueutilisation invalide d'un tableau avec bornes non spécifiéesutilisation invalide de const_cast avec le type « %T », lequel est un pointeur ou un référence à un type de fonctionutilisation invalide de const_cast avec le type « %T », lequel n'est pas un pointeur, une référence, ni un type pointeur-vers-données-membreutilisation invalide d'un membre de tableau flexibleutilisation invalide d'un typedef incomplet « %s »utilisation invalide de membre (avez-vous oublié le «&» ?)utilisation invalide du membre « %D »utilisation invalide du membre « %D » dans un membre statique de fonctionutilisation invalide d'un tableau sans lvalueutilisation invalide d'un champ non statique « %D »utilisation invalide du patron «%#D» comme expressionutilisation invalide de patron de type de paramètresutilisation invalide du template-id « %D » dans la déclaration du patron primaireutilisation invalide du type decl «%#D» comme expressionutilisation invalide d'un type indéfini «%#T»utilisation invalide d'un type indéfini «%s %s»utilisation de l'expression voir invalidetype de vecteur invalide pour l'attribut « %s »format de numéro de verson invalideinvocation non statique sur un méthode statiqueinvocation statique sur un méthode abstraiteinvocation statique sur un méthode non statiqueil doit être un pointeur-vers-un-membre de la forme «&X::Y»il doit être l'adresse d'une fonction avec lien externeil doît être l'adresse d'un objet avec lien externeson étendue ne vaut que pour cette définition ou déclaration, laquelle n'est probablement celle que vous désirez.saut vers « %s » saute de manière invalide dans un contour de bindingsaut à l'étiquette du « case »saut à l'étiquette « %D »rebut à la fin de #pragma %srebut à la fin de #pragma GCC java_exceptionsrebut à la fin de #pragma extern_prefixrebut à la fin de #pragma ghs endsdarebut à la fin de #pragma ghs endtdarebut à la fin de #pragma ghs endzdarebut à la fin de l'interruption #pragma ghsrebut à la fin de la section #pragma ghsrebut à la fin de #pragma ghs startsdarebut à la fin de #pragma ghs starttdarebut à la fin de #pragma ghs startzdarebut à la fin de #pragma maprebut à la fin de #pragma redefine_extnamerebut à la fin de #pragma weakrebut à la fin de «#pragma %s'rebut à la fin de '#pragma options'rebut à la fin de «#pragma pack»rebut à la fin de '#pragma unused'rebut à la fin de la chaîne de signaturemot clé « export » n'est pas implanté et sera ignoréétiquette %s référencée à l'extérieur de n'importe quelle fonctionétiquette « %D » définie mais non utiliséeétiquette « %D » utilisée mais non définieétiquette « %s » définie mais non utiliséeétiquette « %s » référencée à l'extérieur de n'importe quelle fonctionétiquette « %s » utilisé avant de contenir le contour de bindingétiquette « %s » utilisée mais non définiel'étiquette doit être suivie d'une déclarationétiquette nommée wchar_tlanguage %s n'est pas reconnuchaîne du langage «"%s"» n'est pas reconnuegrand pointeur de trames change (%d) avec -mtiny-stackgrand entier implicitement tronqué pour un type non signéld a retourné %d code d'état d'exécutionprécision de gaucheprécision de gauche dans le format de strfmoncompteur de décalage à gauche >= à la largeur du typecompteur de décalage à gauche est négatifl'opérande à gauche de la virgule dans l'expression n'a pas d'effetlongueur du modificateurlongueur du modificateur dans le format printflongueur du modificateur dans le format de scanfmodificateur de longueur dans le format de strfmonlibraries: %s + fonction «%#D» de la librairie redéclarée comme n'étant pas une fonction «%#D»fonction « %s » de la librairie déclarée comme n'étant pas une fonctionlibrarie lib%s n'a pas été trouvénuméro de ligne hors gammelo_sum n'est pas un registrecharger la commande map, %d commandes, nouvelle taille %ld. + la classe locale «%#T» ne doit pas être un membre de données statiques de «%#D»la déclaration locale de « %s » cache l'instance d'une variablelong et short spécifiés ensembles pour « %s »constante long long n'est pas une opérande immédiate valide« long » ou « short » spécifié avec «char» pour « %s »« long » ou « short » spécifié avec un type flottant pour « %s »« long », « short », signé ou non signé est invalide pour « %s »« long », « short », signé ou non signé utilisé incorrectement pour « %s »recherche de « %D » a repéré «%#D»recherche de « %D » dans la portée de «%#T» («%#D») ne concorde pas avec la recherche dans la portée courante («%#D»)a placé un spécificateur pour «%#F»lseek %s 0macro « %s » a passé %u arguments, mais seulement %u ont été prismacro « %s » requiert %u arguments, mais seulement %u ont été donnésargument macro « %s » devrait être déclaré de champ de chaîne avec -traditional.nom de macro manquant après %snom de macro manquant après l'option -%cnoms de macro doivent être des identificateursmacro ou récursion de #include trop profondeparamètres de macro doivent être séparés par des virgulesrendant « %D » statique#pragma align mal composé - ignoré#pragma extern_prefix mal composé, ignorésectin mal composée #pragma ghs#pragma map mal composé, ignoré#pragma redefine_extname mal composé, ignoré#pragma weak mal composé, ignoré«#pragma %s» mal composé - ignoré'#pragma options align={mac68k|power|reset}» mal composé, ignoré'#pragma options» mal composé, ignoré«#pragma pack» mal composé - ignoré«#pragma pack(pop[, id])» mal composé, ignoré«#pragma pack(push[, id], )» mal composé - ignoréarchive .zip mal composée dans CLASSPATH: %smasque doit être un immédiatcontrainte concordante n'est pas valide dans une opérande de sortienombre d'opérandes invalides pour références de containte concordantesne peut utiliser ensemble -EB et -ELne peut utiliser ensemble -mfp64 et -m4650ne peut utiliser ensemble -mfp64 et -msingle-floatne peut utiliser ensemble -mfp32 et -mfp64membre «%#D» avec constructeur n'est pas permis dans un aggrégat anonymemembre «%#D» avec opérateur d'affectation par copie n'est pas permis dans un aggrégat anonymemembre «%#D» avec destructeur n'est pas permis dans un aggrégat anonymemembre «%#D» avec consructeur n'est pas permis dans l'unionmembre «%#D» avec opérateur d,affectation par copie n'st pas permis dans l'unionmembre «%#D» avec destructeur n'est pas permis dans l'unionmembre « %D » ne peut être déclaré virtuel et statiquemembre « %D » en conflit avec un nom de champ de table d'une fonction virtuellemembre « %D » déclaré comme ami avant la définition du type « %T »membre « %D » est non statique mais référencé comme membre statiquemembre « %D » est une référence non initialiséemembre « %D » avec des champs de constantes non initialiséemembres de fonctions sont implicitement amis de leur classeinitialiseur du membre pour «%#D»type du membre «%T::» incompatible avec le type d'objet « %T »membresméthode « %s » n'a pas été repéré dans la classeméthode « %s » n'est pas implantée dans le protocole.définition de la méthode pour «%c%s» n'a pas été repéréeméthode de définition n'est pas dans un contexte de classeprofilage de fonction mips16accolades non concordantes dans les specsaignature ne concorde pas pour le champ « %s » dans « %s »attribut ConstantValue mal positionné (n'est dans aucun champ)opérande $ de nombre manquant dans le format«(» manquante après «#pragma %s» - ignoré«(» manquante après «#pragma pack» - ignoré«(» manquante après '#pragma unused', ignoré«(» manquante après le prédicat«(» manquante dans l'expresion« )» manquant après «defined »«(» manquante après '#pragma unused', ignoré«)» manquante pour «#pragma %s» - ignoré«)» manquante dans l'expresion«)» manquante dans la liste des paramètres de macros«)» manquante pour completer la réponse«;» manquant avant l'accolade de droiteattribut Code manquantargument manquant dans « __builtin_args_info »argument manquant à l'option « %s »barrière manquante après le boc %iopérateur binaire manquantopérateur binaire manquant avant « %s »accolades manquantes autour de l'initialiseuraccolade de fermeture manquante pour l'opérandé nomméechamp « %s » manquant dans « %s »caractère de remplissage manquant à la fin du format strfmonnom de fonction manquant dans «#pragma %s» - ignoréinitialiseur manquantinitialiseur manquant pour le membre « %D »nom de section manquant dans «#pragma %s» - ignoréchamp statique manquant « %s »caractère %c de terminaison manquantcaractère > de terminaison est manquantnom de type manquant dans la déclaration typedefespace blanc manquant après le nombre '%.*s'mélange des interceptions C++ et Java dans une unité simple de traduction mno-cygwin et mno-win32 ne sont pas compatiblesmode n'est pas QImodemodification par « asm »plus que %d opérandes dans « asm »plus d'un « f » en suffixe sur une constante flottanteplus d'un « i » ou « j » en suffixe sur une constante flottanteplus d'un « i » ou « j » en suffixe sur une constante entièreplus d'un « l » en suffixe sur une constante flottantedéplacement insn non traitémsync %sconstante caractère multi-caractèrescommentaire multi-ligneschaîne de mots multi-lignes sont dépréciéstableau multidimensionel doit avoir des bornes pour chaque dimension excepté pour la premièrespécificateurs « virtual » multiplesspécificateurs d'accès multiplesmultiples déclarations « %T » et « %T »multiples déclarations pour la méthode « %s »déclarateurs multiples dans la déclaration de patronétiquettes multiples de défaut dans un « case »définition multiple de «%#T»champs multiples dans l'union « %T » initialisésmultiples initialisations données pour « %D »initialisations multiples données pour le membre « %D »multiples paramètres nommés « %s »multiples classes de stockage dans la déclaration de « %s »types multiples dans une déclarationmunmap %sdoit utiliser #include avant d'utiliser typeiddoit avoir au moins un intercepteur par bloc d'essaisdoit utiliser .* ou ->* pour l'appel de la fonction pointer-to-member dans « %E (...) »mvc&exmvcle utilisédépôt mystérieux d'informations dans %snom « %T » a un type incompletrecherche du nom « %s » a changérecherche du nom « %s » changé pour le nouveau ISO «for » d'étendue de champnom manquant pour le membre d'une fonctionmembres nommésespace de noms « %D » n'est pas permis dans l'utilisation d'une déclarationespace de noms « %T » n'est pas déclaréalias d'espace de noms « %D » n'est pas permis ici, on assume « %D »aggrégats anonymes de champs d'espace nom doit être statiquelongueur négative insnentier négatif implicitement converti en un type non signélargeur négative du champ de bits « %D »largeur négative du champ de bits « %s »ni varargs ou stdarg dans mmix_setup_incoming_varargsassemblage de dialectes alternatifs imbriquésdéclaration de « %s » externe imbriquéefonction imbriquée « %s » déclarée « extern »redéfinition imbriquée de « %s »new ne peut être appliqué à un type de fonctionnew ne peut être appliqué à un type référencénouvelle déclaration de «%#D»new sur un type tableau a échoué dans l'évaluation de la taillepas de FUNCTION_PROFILER pour CRISAUCUN type ENTIER ne peut tenir un pointeur sur cette configurationpas de membre de fontion «%#D» déclarée dans la classe « %T »pas «%D(int)» déclaré pour le postfixe « %s », essaie avec l'oprateur préfixe à la placeaucun argument pour la macro « %s »pas d'argumentpas d'initialiseur de base ou membre donné après «:»pas de base donnée après «:»pas de corps ni de «;» séparant les deux déclarations de classes, struct ou unionpas de nom de classe spécifier dans l'argument à -fconstant-string-classpas de patron de classe nommé «%#T» in «%#T»pas de «]» de fermeture pour le format «%%[»pas de cmd_strings trouvéaucun type de données pour le mode « %s »pas d'argument par défaut pour « %D »aucune description encorepas de champ « %D » dans l'aggrégat n'a été initialisépas de chemin d'inclusion dans lequel trouver %.*spas de chemin d'inclusion afin de retrouver %saucun fichier n'a été spécifié à l'entréepas de fichier à l'entréeaucun fichier d'entrée; pas d'accord pour écrire dans les fichiers de sortiepas de registre bas disponible pour faire ressortir les registres du hautaucun nom de macro donné dans la directive #%spas de concordance pour l'appel de «(%T) (%A)»pas de concordance de conversion de fonction « %D » vers le type «%#T'pas de fonction concordante pour l'appel de «%D(%A)»pas de fonction concordante pour l'appel à «%T::%D(%A)%#V»non concordance de patron pour « %D » repérépas de membre de fonction « %D » déclaré dans « %T »aucun membre concordant « %D » dans «%#T»pas de méthode «%T::%D»pas de nouvelle ligne à la fin du fichieraucune déclaration précédente pour « %s »aucun prototype précédent pour « %s »pas de prototpe, et de adresse de paramètre utilisée; ne peut pas être en lignepas de registre dans l'adressepas de déclaration « return » dans la fonction retournant un non voidpas de sclass pour le stab %s (0x%x) + pas de point virgule à la fin du struct ou de l'union« operator delete» pas adapté pour «%T »pas de super classe déclarée dans l'interface pour « %s »pas de table de symbole trouvéepas de type « %D » dans « %T »pas de type nommé dans «%#T» dans «%#T»pas d'écraseur unique final pour « %D » dans « %T »aucun mode vecteur avec la taille et le type spécifié n'a pas été répérépas de candidats viablesséquence d'échappement n'est pas ANSI standard: «\%c'séquence d'échappement non ISO «\%c'séquence d'échappement n'est conforme au standard ISO, '\%c'la non const « %E » ne peut être utilisé comme un patron d'argumentinitialiseurs non vides pour le tableau d'éléments videschiffre « %c » n'est pas hexadécimal dans le nom-de-caractère-universelfonction non locale «%#D» utilise un type anonymefonction non locale «%#D» utilise un type local « %T »variable non locale «%#D» utilise un type local « %T »n'est pas un lvalue dans %sle non membre « %s » ne peut être déclaré « mutable »un membre non objet « %s » ne peut être déclaré « mutable »définition d'un non prototype iciconstante non statique de membre «%#D» dans la classe sans un constructeurconstante non statique du membre «%#D», ne peut utiliser l'opérateur d'affectation par défautla déclaration non « static» de « %s » en suit une « static »initialisation non statique d'un membre de tableau flexibleméthode non statique « %s » écrase la méthode statiqueréférence non statique «%#D» dans la classe sans un constructeurréférence non statique du membre «%#D», ne peut utiliser l'opérateur d'affectation par défauttype non patron « %T » utilisé comme un patronnon patron utilisé comme patroninitialiseur étiquetée non trivialindex de tableau non constante dans l'initialiseurn'est pas un champ statique « %s »n'est pas un fichier Java .class validepas assez d'information sur le typepas repéré + n'est pas dans aucun fichier?!note:caractère null ignorécaractère(s) nul préservé(s) dans la chaînechaîne de format nullenombre manquant après %snombre d'arguments ne concorde pas avec celui du prototypenombre de notes bb dans la chaîne insn (%d) != n_basic_blocks (%d)constante numérique contient des chiffres en dehors la base numériqueconstante numérique sans chiffreobjet « %E » ne peut être utilisé comme un patron d'argumentobjet « %E » d'un type incomplet « %T » ne sera pas accessible dans %sobjet n'est pas conforme au protocole « %s »objet manquant dans « %E »objet manquant dans l'appel de la méthode « %D »objet manquant dans l'utilisation du construit pointeur-à-membreobjet de type incomplet « %T » ne sera pas accessible dans %sobjet de type « %T » ne sera pas acccessible dans %sutilisation obsolète d'un initialiseur désigné avec «:»utilisation obsolète de l'initialisateur désigné sans «=»constante de caractères en octal ne peut être insérée dans un octetséquence d'échappement octale hors gammedécalage hors gamme d'une chaîne de constanteancien fichier d'en-tête bruteancien style de syntaxe de positionnement, utiliser () à la placeseulement %d arguments pour la macro « %s »seulement 1 argument pour la macro « %s »seuls les constructeurs prennent des initialiseurs de baseseuls les déclarations de constructeurs peuvent être « explicit »seules les variables initialisées peuvent être placées dans la zone mémoire du programmeseule une des options «--print-main», «--list-class» et «--complexity» est permiseseulement les alias faibles sont supportés dans cette configurationoops, pas mis au point; correction de la valeur:open %sl'opérande 1 doit être un registre matérielcontrainte de l'opérande contient «+» ou «-» incorrectement positionnécontraintes de l'opérande pour « asm » diffèrent en nombre d'alternativesopérande est de type const_doublel'opérande n'est ni une constante ni du code de condition, code d'opérande invalide « c »opérande est R0numéro d'opérande manquant après %%-letternombre d'opérandes hors gammeopérande de nombre hors gamme dans le formatnombre d'opérandes spécifié pour un format n'acceptan aucun argumentnombre d'opérandes spécifié avec des affectations supriméesopérande vers ?: a différents typesopération portant sur « %s » est peut être indéfinieopérateur « defined » requiert un identificateuropérateur « %s » n'a pas d'opérande gauchel'opérateur « %s » n'a pas d'opérande droiteopérateur « %T » déclaré comme retournant « %T »niveau d'optimisation restauréoptimisation désactivéeoptimisation activéeoptions -mabi=mmixware et -mabi=gnu sont mutuellement exclusivesoptions autorisées: options passées: comparaison ordonné de pointeur avec un entier zérocontrainte de sortie %d ne doit pas être spécifié avec « %s » clobberContrainte de sortie %d doit spécifier un simple registrecontrainte de sortie « %c » pour l'opérande %d n'est pas au débutnom de fichier de sortie spécifié deux foisnombre de sortie %d n,est pas directement adressableopérande de sortie %d doit utiliser la contrainte «&»contrainte de sortie de l'opérande manque «=»opérande de sortie est une constante dans « asm »registres de sortie doivent être regroupés au haut de la pileoutput_move_single:débordement dans les dimensions du tableaudébordement dans l'expression de la constantedébordement dans les valeurs de l'énumérationdébordement dans les valeurs de l'énumération à « %D »débordement dans la conversion implicte de la constantedébordement de troncation d'un entierdébordement lors de la troncation d'un entier non signédébordement de la liste d'arguments de sortie pour « %s »fonction surchargée sans information contextuelle de typeattribut empaqueté provoque un alignement inefficientattribut empaqueté provoque un alignement inefficient pour « %s »attribut empaqueté n'est pas nécessaireattribut empaqueté n'est pas nécessaire pour « %s »remplissage la taille du struct pour aligner les frontièresremplissage du struct pour aligner « %s »paramètre « %D » déclaré «void »paramètre « %D » inclut %s au tableau de bornes inconnues « %T »paramètre « %D » incorrectement validé comme type de méthodeparamètre « %D » incorrectement validé comme type de décalageparamètre « %s » déclaré «void »paramètre « %s » a un type incompletparamètre « %s » n'a qu'une déclaration vers l'avantparamètre « %s » est initialiséparamètre « %s » pointe vers un type incompletparamètre a un type incompletnom de paramètre manquantnom du paramètre manquant dans la liste des paramètresnom de paramètre a été omisnom de paramètre débute avec un chiffre dans #definenoms de paramètres (sans types) dans la déclaration de fonctionparamètre pointe vers un type incomplettype de paramètre de la fonction appelée est incomplettype de paramètres à la fois donné dans la liste et séparémenterreur d'analyse syntaxiqueerreur d'analyse syntaxique à la fin de la sauvegarde de la fonction texteerreur d'analyse syntaxique dans la spécification de fonctionerreur d,analyse syntaxique; aussi la mémoire virtuelle est épuiséeerreur d'analyse syntaxique; de plus la mémoire virtuelle est épuiséeanalyseur syntaxique est perdu: y-a-t-il un «{» manquant quelque part?débordement de la pile de l'analyseur syntaxiquespécialisation partielle « %D » du patron de fonctionspécialisation partielle « %T» déclarée «friend »spécialisation partielle « %T » ne spécialise pas aucun patron d'argumentspassage d'un NULL utilisé pour un non pointeur %s %P de « %D »passant « %T» comme «cet» argument de «%#D » écarte les qualificateurspassant « %T » à choisit « %T » au lieu de « %T »passage « %T » pour %s %P de « %D »passage de arg %d de « %s »passage de arg %d du pointeur vers la fonctionpassage d'argument en virgule flottante dans les registres FP n'est pas encore supportépassage de valeur négative « %E » pour %s %P de « %D »collage de « %s » et de « %s » n'a pas donné des jetons valide de pré-traitementnom de chemin manquant après %spipeplacer les items des données dans leur propre sectionplacer chaque fonction dans sa propre sectionpointeurpointeur de type « void * » utilisé en arithmétiquepointeur de type « void * » utilisé dans une soustractionpointeurs ciblés dans %s diffèrent au niveau du signepointeur vers une fonction utilisé en arithmétiquepointeur vers un fonction utilisé dans une soustractionpointeur vers un membre utilisé dans l'arithmétiquepointeur vers un membre transtypé de « %T » à « %T » est fait via une base virtuellepointeur vers un membre transtypé via la base virtuelle « %T » de « %T »conversion de pointeur à membre à l'aide de la base virtuelle « %T » vers « %T »appel d'un pointeur vers un membre de fonction, mais n'est pas dans le champ de la classepointeur vers le membre d'une fonction utilisée dans l'arithmétiquenon concordance de type de pointeur dans un expression conditionnellevaleur de pointeur utilisé où un complexe était attenduvaleur du pointeur utilisé où une valeur flottante était attenduefonction de pointeur vers un membre %E ne peut être appelée sans un objet; considérer l'utilisation de .* ou ->*non concordance de type pointeur/entier dans une expression conditionnelleles pointeurs ne sont pas permis comme valeurs de « case »empoisonnement de la macro existente « %s »début possible d'une chaîne de mot non terminée«)» possiblement manquantepost-incrément d'adresse n'est pas un registrepostfixe « %D» doit prendre « int » comme argumentpostfixe « %D» doit prndre « int » pour son second argumentpostfixe « %D » devrait retourner « %T »conflit potentiel sur le sélecteur pour la méthode « %s »pré-décrément d'adresse n'est pas un registrepré-incrément d'adresse n'est pas un registreprécisionprécision dans le format de printfprédicat doit être un identificateurla réponse du prédicat est videpréfixe « %D » devrait retourner « %T »déclaration précédente de «%#D» icidéclaration précédente de « %D »déclaration précédente de «%#D'déclaration précédente de «%#D»déclaration précédente de «%#D» avec le lien %Ldéclaration précédente de « %D »déclaration précédente de « %s »déclaration précédente de la fonction « %s » était inlinedéclaration précédente de la fonction « %s » avec l'attribut noinlinedéfinition précédente icidéfinition précédente de «%#T»déclaration externe précédente de « %#D »déclaration externe précédente de « %s »déclaration amie précédente de « %D »déclaration précédente implicite de « %s »déclaration précédente d'un non fonction «%#D»déclaration précédente non en ligne iciprécédemment utilisé icitaille du paramètre précédent dépend de « %s »membre privé «%#D» dans une union anonymeprofilage ne fonctionne pas sans un pointeur de tramesprofilage n'est pas implanté encoreprofilage n'est pas supporté avec -mg + programmes: %s + argument promu « %s » ne concorde pas avec celui du prototypecorrectement à moins qu'ils aient tous 32 bits de largeurmembre protégé «%#D» dans une union anonymele protocole « %s » a une dépendance circulaireprototype de «%#D'prototype pour «%#D» ne concorde avec aucun dans la classe « %T »prototype de « %s » suitprototype de « %s » suit mais le nombre d'arguments %d ne concorde pasprototype de « %s » suit mais le nombre d'arguments ne concorde pasfournie pour « %D »type qualifé « %T » ne concorde pas le nom du destructeur «~%T»qualificateurs ne sont pas permis dans la déclaration de « operator %T »tampon brut d'en-tête trop petitlu %ld octets, attendu %ld, de %sread %slecture de la classe %s pour la seconde fois depuis %slecture à l'aide d'un pointeur nul (arg %d)nom réel est trop long - alias ignorépatron de paramètre en valeur réelle lors de la compilation croiséetype récursif « %T » non définiredéclaration du type interne C++ « %T »redéclaration de « %s »redéclaration de «enum %s'redéclaration de « wchar_t» comme «%T »redéclaré ici comme «%#D»redéfinition de «%#T»redéfinition de « %s »redéfinition de «struct %s'redéfinition de «union %s'redéfinition de l'argument par défaut pour «%#D»redirection de stdout: %sdéclaration redondante de « %D » dans la même étenduere-déclaration redondante de « %s » dans le même champ.référence « %s » est ambigue: apparaît dans l'interface « %s » et l'interface « %s »référence vers une variable locale « %D » retournéréférence vers un non lvalue a été retournénom de registre donné pour une variable non registre « %s »nom de registre n'est pas spécifié pour « %s »registre spécifié pour « %s » n'est applicable à un type de donnéesregistre utilisé pour deux variables registres globalesvariable registre « %s » utilisée dans une fonction imbriquéeenregistrement de "%s" à la fois comme pragma et pragma d'espace de nomsregistres IX, IY et Z utilisés dans le même INSNré-implantation de la classe « %s »reinterpret_cast de « %T » vers « %T » fait un transtypage écartant la constante (ou volatile)reinterpret_cast de « %T » vers « %T » génère une perte de précisionrenommé les specs %s à %s + %s répété dans le formatrequête du membre « %D » dans « %E », lequel n'est pas de type aggrégat « %T »requête du membre « %D » est ambiquë dans de mutliples héritage de treillisrequête du membre «%T::%D» dans l'expression du type non aggrégat « %T »requête pour le membre « %s » dans quelque chose qui n'est pas une structure ou un unionalignement requis pour %s est plus grand que l'alignement implanté de %dalignement demandé n'est pas une constantealignement demandé n'est pas une puissance de 2alignement demandé est trop grandinit_priority demandé n'est pas une constante entièreinit_priority demandé est hors gammeinit_priority demandé est réservé pour un usage internerésultat de « operator->() » laisse comme résultat un non pointeurinstruction ret n'est pas implantéereturnidentificateur retourné « %D » est déjà en placereturn n'est pas suivi d'une barrièretype retourné «%#T» est incompletle défaut choisi du type retourné est « int »type retourné par défaut est idtype retourné pour « %s » par défaut est idtype retourné pour « main » est changé pour «int »type retourné est d'un type incomplettype retourné de « %s » n'est pas «int »spécification de type retourné pour un constructeur est invalidespécification de type retourné pour un destructeur est invalidetype spécifié retourné pour l'opérateur « %T »type de valeur retournée d'un spécificateur pour un constructeur est ignorédéclaration d'un retour sans valeur, dans la fonction déclarée avec un type retourné voiddéclaration d'un retour sans valeur, dans la fonction déclarée avec un type retourné non voidvaleur retournée dans block_exit_exprretourné une valeur d'un constructeurretourné une valeur du destructeurretourné la référence vers le temporaireprécision de droiteprécision de droite dans le format de strfmoncompteur de décalage à droite >= à la largeur du typecompteur de décalage à droite est négatifmode d'arondissement n'est pas supporté pour les flottants sur VAXsecond argument de « __builtin_expect » doit être une constantesecond argument de « __builtin_prefetch » doit être une constantesecond argument de « %s » devrait être «char ** »second paramètre de « va_start » n'est pas le dernier argument nomméattribut de section ne peut être spécifié pour des variables localesattribut de section n'est pas permis pour « %s »attribut de section ne sont pas supportés pour la ciblesection de « %s » en conflit avec une déclaration précédentepointeur de section manquantsélecteur doit être un immédiat«;» manquant après la déclaration de %spoint-virgule manquant après la déclaration %#T«;» manquant après la déclaration « %T »%s fait ombrage à la fonction «%#D»fait ombrage à la fonction interne « %s »fait ombrage à fonction « %s » de la librairiefait ombrage à la déclaration précédente de «%#D»shared et mdll ne sont pas compatiblescompteur de décalage >= à la largeur du typecompteur de décalage est négatifshort, signed ou unsigned est invalide pour « %s »signed et unsigned donnés ensembles pour « %s »type signé et non signé dans une expression conditionnellespécificateur du type sigoftaille d'un nouveau tableau (new) doit avoir un type entiertaille de « %s » est de %d octetstaille de « %s » est plus grande que %d octetstaille du tableau « %D » n'est pas de type entiertaille du tableau « %D » est négativetaille du tableau « %D » n'a pas une expression de constante de type entiertaille du tableau « %s » n'est pas de type entiertaille du tableau « %s » est négativetaille du tableau « %s » est trop grandetaille du tableau a type non entiertaille du tableau est négativetaille du tableau n'est pas une expression de constante de type entiertaille du membre « %D » n'est pas constanttaille de la valeur retournée de « %s » est %u octetstaille de la valeur retournée de « %s » est plus grande que %d octetstaille de la variable « %s » est trop grandesizeof appliqué sur un champ de bitssizeof appliqué sur un type de fonctionsizeof appliqué sur un type voidsizeof appliqué sur un type incompletsizeof(long double) est 12sizeof(long double) est 16désolé, pas implanté: désolé, pas implanté: #pragma align NOM=TAILLEdésolé, pas implanté: #pragma noalign NOMdésolé: sémantique de fonction en ligne de données statiques «%#D» est erronée (vous obtiendrez de multiples copies)fichier source de la classe « %s » est plus récent que son fichier de classe concordant. Fichier source « %s » utilisé à la place.fichier source vu deux fois sur la ligne de commande et ne sera compilé une seule foiséchec du spec: «%%*» n'a pas été initialisé par concordance du patronéchec de spec: option « %c » de spec non reconnuefichier de specs n'a pas de spécification pour l'édition de liensspec est « %s » + + spécialisation de %D après instanciationspécialisation de « %T » après instanciationspécialisation d'un membre spécial d'nue fonction déclaré implicitementspécialisation de «%#T» dans différents espaces de nomssyntaxe des specs %%include mal composée après %ld caractèresspecs de la syntaxe %%rename mal composées après %ld caractèresspecs de la spécification %s n'a pas été trouvé pour être renommerfichier de specs mal composé après %ld caractèresspecs inconnus de la commande %% après %ld caractèresfaux caractères « %% » qui traînent dans le formattrame de pile n'est pas un multiple de 8 octets: %dtrame de pile n'est pas un multiple de 8 octets: %dtrame de pile trop grandeexpression limitant la pile n'est pas supportéelimites de pile ne sont pas supportées sur cette cibletaille de la pile > 32ksous débordement de la pile - opération dup*trame de pile trop grande: %d octetsstatic « %s » ne peut être déclaré « mutable »accès statique à un objket de type « id »la déclaration « static» de « %s » en suit une non « static »membre statique « %D » ne peut être un champ de bitsmambre statique « %D» déclaré «register »membre de fonction statique «%#D» déclaré avec des qualificateurs de tyepstatic ou qualificateurs de type dans un déclarateur abstraitstatic ou qualificateurs de type dans un déclarateur d'un tableau de non paramètresvariable static « %s » est marquée dllimportstatic_cast du type « %T » vers le type « %T » fait un transtypage sans constanteclasse de stockage « %D » appliqué à l'instanciation du patronclasse de stockage « auto» invalide pour une fonction « %s »classe de stockage « inline» invalide pour une fonction « %s » déclarée en dehors de la portée globaleclasse de stockage « register» invalide pour une fonction « %s »classe de stockage « static» invalide pour une fonction « %s » déclarée en dehors de la portée globaleclasse de stockage spécifiée pour %s « %s »classe de stockage spécifiée pour le paramètre « %s »classe de stockage spécifiée pour la structure du champ « %s »classe de stockage spécifié pour un typenamespécificateur de classe de stockages « %s » n'est pas permis après struct ou classspécificateur de classe de stockage dans le déclarateur de tableauspécificateurs de classe de stockage invalide dans les déclarations de fonction amiespécificateurs de classe de stockage invalides dans la déclaration des paramètrestaille de stockage de « %D » n'est pas une constantetaille de stockage de « %D » n'est pas connuetaille de stockage de « %s » n'est pas une constantetaille de stockage de « %s » n'est pas connuestray « %c » dans le programmestray '\%o» dans le programmeLes formats de strftime ne peuvent formater les argumentsconstantes de chaîne ne sont pas valides dasn un #iflongueur de la chaîne « %d » plus grande que la longueur « %d » que le compilateur ISO C%d requiert pour le supportchaîne %E n'est pas un patron d'argument valide parce que c'est l'adresse d'un objet avec lien statiquechaîne de section manquantestructvaleur du type struct utilisé nécessite un scalairestructurestructure « %D » avec constantes non initialisées de membresstructure « %D » avec références non initialisées de membrestaille des bornes de la structure peut seulement être 8 ou 32style de ligne de directive est extension GCCsous-objet de type « %T » doit être initialisé par un constructeur, non pas par « %E »souscript a un type « char »souscript manquant dans la référence du tableauvaleur sourcripté n'est ni un tableau ni un pointeursouscriptage de tableau déclaré « register »suggéré de cacher #%s en C traditionel avec l'indentation #suggéré de ne pas utiliser #elif en C traditionnelparenthèses suggérées autour de && à l'intérieur de ||parenthèses suggérées autour de + ou - dans l'opérande &parenthèses suggérées autour de + ou - à l'intérieur du décalageparenthèses suggérées autour de l'arithmétique dans l'opérande ^parenthèses suggérées autour de l'arithmétique dans l'opérande |parenthèses suggérées autour de l'affectation utilisées comme valeur de véritéparenthèses suggérées autour de la comparaison dans l'opérande &parenthèses suggérées autour de la comparaison dans l'opérande ^parenthèses suggérées autour de la comparaison dans l'opérande |l'option -mcpu=%s est en conflit avec l'option -march= quantité du switch n'est pas un entierdéclaration de switch de taille %lu entrée est trop grandeerreur de syntaxeserreur de syntaxe «:» sans être précédé de «?»erreur de syntaxe «?» sans être suivi de «:»erreur de syntaxe au jeton « %s »erreur de syntaxe: ne reculer en arrièreprise de l'adresse de la borne de l'expression d'un pointeur-vers-un membreprise de l'adresse du destructeurprise de l'adresse du temporaireCPU cible ne supporte pas APCS-26CPU cible ne supporte pas APCS-32CPU cible ne supporte pas les instructions THUMBCPU cible ne supporte pas l'inter-réseautagecible manquante après %scible manquante après l'option %spatron «%#D» défini dans le fichier sans interface #pragmapatron «%#D» instancié dans le fichier sans interface #pragmapatron de l'argument %d est invalidepatron d'argument « %E » implique des paramètres du patronpatron de classe sans nomdéclaration du patron de «%#D»définition de patron d'un non patron «%#D»instantiation de la profondeur du patron excède le maximum de %d (utiliser -ftemplate-depth-NN pour augmenter le maximum) lors de l'instanciation de « %D »patron de paramètre «%#D»patron de liste de paramètres utilisé dans une instanciation explicitetype paramètre du patron « %T» déclaré «friend »paramètres du patron ne peuvent pas être amisparamètres du patron ne sont pas utilisés dans la spécialisation partielle:spécialisation de patron avec édition de liens Cpatron de type de paramètres doit utiliser le mot clé « class» ou «typename »patron avec liaison Cargument du patron « %T » utilise un type anonymeargument du patron « %T » utilise un type local « %T »template-id « %D » pour «%+D» ne concorde pas avec aucune déclaration de patrontemplate-id « %D » dans la déclaration de patron primaireidentificateur de patron « %D » utilisé comme déclarateurqu'une précédente déclaratio « %F »l'option particulière -g est invalide avec -maout et -melinuxl'option -mlong-double-64 n'est pas fonctionnelle encorele fanion « » de printfle fanion «!» de strfmonle fanion «#» de printfle fanion « # » de strftimele fanion « ' » de printfla fanion « ' » de scanfle fanion «(» de strfmonle fanion «+» de printfle fanion «+» de strfmonle fanion « - » de printfle fanion «-» de strfmonle fanion « - » de strftimele fanion « 0 » de printfle fanion « 0 » de strftimele modificateur « E » de strftimele fanion « I » de printfle fanion « I » de scanfle modificateur « O »le modificateur « O » de strftimele fanion «^» de strfmonla fanion « ^ » de strftimele fanion « _ » de strftimele fanion « a » de scanf« java.lang.Object» qui a été repéré dans « %s » n'avait pas l'attribut spécial de longueur zéro «gnu.gcj.gcj-compiled». Cela généralement signifie que le chemin d'accès aux classes est incorrectement initialisé. Utiliser «info gcj "Input Options" » pour accéder aux informations décrivant comment initialiser le chemin d'accès des classes.l'adresse de « %D», sera toujours «true »options de scanf pour la suppression d'affectationle conditionel débute iciLe m210 ne supporte pas le code pour système à octets de poids faiblela signification de «\%c» varie avec l'option -traditionalla signification de «\a» varie avec l'option -traditionalla signification de «\x» varie avec l'option -traditionalle sens de «\a» varie avec -traditionalla signification de «\x» varie avec l'option -traditionalla seule combinaison valide est « long double »troisième argument de « __builtin_prefetch » doit être une constantetroisième argument de « %s » devrait probablement être «char ** »cette fonction peut ou ne peut pas retourner une valeurceci est une déclaration précédentececi est la première étiquette de défautc'est la première entrée qui chevauche cette valeurceci est le insn:ceci est la localisation d'une précédente définitioncette cible ne supporte pas l'option -mabicette machine cible n'a pas de branchments avec délaiscette utilisation de « defined » peut ne pas être portabletrois « l » en suffixe sur une constante entièreretounrnant NULL (par throw), lequel est entier, pas de type pointeurtemps passé dans %s: %ld.%06ld (%ld%%) + pour référencer un type de membre de patron de paramètres, utiliser « typename %E »trop peu d'arguments dans le formatpas assez d'argument pour %s «%+#D»trop peu d'arguments pour la fonctionpas assez d'argument pour la fonction « %s »trop peu de patrons de listes de paramètres dans la déclaration de « %D »valeur de type de fonction trop grande, a besoin de %d registres mais seuls %d disponiblestrop d'options pour #pragma pour align=resettrop de « l » en suffixe dans les constantes entièrestrop d'arguments (%d) pour la macro « %s »trop d'alternatives dans « asm »trop d'arguments pour le formattrop d'arguments pour %s «%+#D»trop d'arguments pour la fonctiontrop d'arguments pour la fonction « %s »trop d'arguments pour la function « va_start »trop de points décimaux dans la constante flottantetrop de noms de fichiers. Taper %s --help pour en connaître l'usagetrop d'initialisations de fonctions requisestrop de fichiers d'entréetrop de patrons de listes de paramètres dans la déclaration de « %D »trop de patrons de listes de paramètres dans la déclaration de « %T »la déclaration de haut niveau de « %s » a spécifié «auto »C traditionel ignore #%s avec le # d'indentationC traditionel rejette l'initialisation automatique d'aggrégatsC traditionel rejette l'initialisation d'unionsC traditionel rejette la concaténation de chaînesC traditionnel rejette le suffixe « f »C traditionnel rejette le suffixe « l »C traditionnel rejette le suffixe « u »C traditionel rejette le suffixe « U »C traditionnel rejette l'opérateur unaire +trampolines ne sont pas supportéestrampolines ne sont pas encore implantéesmode trappe n'est pas supporté avec les flottants sur VAXmode trappe n'est pas supporté sur Unicos/Mkvérification de l'arbre: attendait %s, obtenu %s dans %s, à %s:%dvérification de l'arbre: attendait classe « %c », obtenu « %c » (%s) dans %s, à %s:%dtrigraphe ??%c converti à %ctrigraphe ??%c ignoréessayer de réduire le nombre de variables localestentative de complétion du struct, mais a été stoppé en raison d'erreurs précédentes d'analyses syntaxiquestentative de rendre la classe « %T » un ami de la portée globaledeux « u » en suffixe sur une constante entièredeux types de données ou plus dans la déclaration de « %s »deux types spécifiés dans une déclaration videtype « %#T» de l'argument donné pour « delete », attendait un pointeurtype « %D » n'est pas une base directe de « %T »type « %D » n'est pas une base directe ou virtuelle de « %T »type « %T » composé à partir d'une classe locale n'est pas un patron d'argument validetype « %T » n'a pas de destructeurtype « %T» n'est pas permis en Java «throw» ou «catch »type « %T » n'est pas un type de base pour le type « %T »type « %T» n'est pas dérivé de «java::lang::Throwable »type « %T » n'est pas dérivé du type « %T »type « %T » est un type qui n'est pas d'aggrégattype « %T » du patron d'argument « %E » dépend des paramètres du patrontype utilisé par défaut « int» dans la déclaration de « %s »type dépréciétype déprécié (déclaré à %s:%d)non concordance de type dans une expression conditionnellepas de concordance de type avec une déclaration externe précédentenon concordance de type avec la déclaration implicite précédentenom de type attendu avant «&»nom de type attendu avec «*»type de « %E » ne concorde pas avec le type du destructeur « %T » (type était « %T »)type de « %s » utilisé par défaut est «int »type d'opérande asm « %E » ne peut être déterminéle type de l'externe « %s » n'est pas globaltype de paramètre formel %d est incompletqualificateur de type « %s » n'est pas permis après struct ou classle qualificateur du type de « %s » est en conflit avec une déclaration précédentequalificateurs de type ignorés pour le type retourné d'une fonctionqulificateurs de types spécifiés pour la déclaration d'une classe amietaille du type ne peut être explicitement évaluéespécificateur de type « %s » n'est pas permis après struct ou classspécificateur de type omis pour le paramètrespécificateur de type omis pour le paramètre « %E »type du vesteur delete n'est ni un pointeur ou un type tableaunon concordance de type/valeur pour l'argument %d dans la liste des paramètres du patron de « %D »typedef « %D » est initialisétypedef « %s » est initialisédéclaration typedef inclut un initialiseurdéclaration typedef invalide dans le paramètre de la déclarationnom du typedef peut ne pas être qualifié pour la classetype typename « %#T» déclaré «friend »types ne sont pas très compatiblesincapable de faire l'appel avec le pointeur vers le membre d'une fonction iciincapable de calculer la localisation réelle de la pile de paramètresincapable de trouver un registre de déversement dans la classe « %s »incapable de générer des recharges pour:incpable de projeter en mémoire (mmap) le fichier « %s »incapable d'ouvrir une dépendance dynamique « %s »incapable d'ouvrir le fichier « %s »incapable d'évaluer par stat() le fichier « %s »incapable d'utiliser « %s » pour un registre PICunaire «&»#endif non pairépile non balancés dans le #ifopérande nommée « %s » indéfiniedirective # non définie ou invalidetype « id » indéfini, SVP importer indéfinition de « %s »indéfinition « %s »indéfinition « defined »souligné présent dans le nombreNOTE inattendu comme addr_conts:symbole PIC inattendueexpression d'adresse inattenduetype de base inattendu dans cris_print_basetype de fonction inattendue ajustement de la pile nécessaire pour « __builtin_eh_return »type d'index inattendu dans cris_print_indexlettre inattendue « %c » dans locate_error + opérande multiplicative inattendueopérande inattendueeffets de bord inattendue dans l'adressetype inattendu pour « id » (%s)constante « %D » non initialiséeconstante non initialisée dans « new» pour «%#T »membre de constante non initialisé pour « %D »référence de membre non initialisé « %D »unionaggrégat « %T » sans mambre nommé ne peut être initialiséunion ne peut pas être faite de façon transparentevaleur du type union utilisé nécessite un scalairenom-de-caractère-universel invalide '\U%08x» invalide dans l'identificcateurnom-de-caractère-universel invalide '\U%04x» invalide dans l'identificcateurnom-de-caractère-universel pour une cible EBCDICnom-de-caractère-universel est hors gammeOption inconnue -march= (%s) + Les options valides sont 1.0, 1.1 et 2.0 + option -mdebug-%s inconnueOption inconnue -mschedule= (%s) + Les options valides sont 700, 7100, 7100LC, 7200 et 8000 + ABI spécifié inconnu: « %s »standard C « %s » inconnuversion de CPU %d inconnue, 40 est utilisé. + spécification de version CRIS inconnue dans -mtune= : %sspécification de version CRIS inconnue dans -march= ou -mcpu= : %s« %s » action inconnue pour «#pragma pack» - ignorétaille du tableau inconnue dans deletetype de caractère de conversion inconnu 0x%x dans le formattype de caractère de conversion inconnu « %c » dans le formatencodage inconnu: « %s » + Cela signifie que votre encodage local n'est pas supporté + par l'implantation iconv(3) sur votre système. Si vous n'essayez pas + d'utiliser un encodage particulier pour votre fichier d'entrée, essayer + l'option «--encoding=UTF-8».séquence d'échappement inconnue '\%c'séquence d'échappement inconnue: «\%c'séquence d'échappement inconnue '\%03o'séquence d'échappement inconnue: «\» suivi par le code de caractères 0x%xchamp inconnu « %s » spécifié dans l'initialisateurmode insn inconnumode machine inconnu « %s »insn de déplacement inconnu:espace de nomes inconnu « %D »code-op inconnu %d@pc=%d durant la vérificationnom de registre inconnu « %s » dans «asm »nom de registre inconnu: %stype de jeu de constructeurs inconnujeton de chaîne inconnu %s + mauvais {de,en}code_mach_o_hdr valeur retourné %dchamps sans nom de type autre que struct ou union ne sont pas permisinitialiseur sans nom pour « %T », lequel n'a pas de classe de baseinitialiseur sans nom pour « %T », lequel utilise de multiples héritagesstruct/union sans nom qui définit aucune instancevariable non nommée ou champ déclaré voidcomparaison non ordonné sur un argument qui n'est pas en virgule flottantebytcode n'est pas atteignable à partir de %d jusqu'à %dbytcode n'est pas atteignable à partir de %d jusqu'à la fin de la méthode.sous-instruction très large non reconnueinsn non reconnaissable:adresse non reconnuespécificateur de format non reconnuoption gcc de mise au point non reconnue: %coption « %s » non reconnueoption «-%s» non reconnuenom de registre non reconnue « %s »nom de section non reconnue « %s »supposée constante non reconnuesupposée constante non reconnue dans cris_global_pic_symbolopérator %s non enregistréjeton %s ne peut être épeléargument non supporté de « __builtin_frame_address »argument non supporté de « __builtin_return_address »taille d'opérande non supportée pour un registre étenduversion non supportéeopération sur de large entier n'est pas supportée#%s non terminé#%s conditionel non terminéliste d'arguments non terminé invoquant la macro « %s »assemblage de dialectes alternatifs non terminécommentaire non terminéchaîne de format non terminéeliste de paramètres non terminée dans #definechaîne non terminée ou constante caractèrearguments non utilisés dans le format $-styleparamètre « %s » inutilisévariable inutilisée « %s »usage: %s [options] entrée sortieutiliser -gdwarf -g%d pour DWARF v1, niveau %dutiliser -gdwarf-2 pour DWARF v2utiliser « #line ... » au lieu de « # ... » dans la première ligneutilisation de %s et de %s ensemble dans le format %sutilisation de %s et de %s ensemble dans le format «%%%c» %sutilisation de %s d'un fonction contenanteutilisation de « %T » est ambiguëutilisation de « %s » dans le patronutilisation de « %s » dans le patron du type d'unificationutilisation du modificateur de longueur « %s » avec le type de caractère « %c »utilisation du patron de classe « %T » comme expressionutilisation de enum «%#D» sans déclaration précédenteutilisation de spéc de liaisons « %D » est différente de la spec précédente « %D »utilisation d'un espace de dnomes « %D » comme expressionutilisation d'un vieux style de transtypage (cast)utilisation d'un qualificateur de patron en dehors d'un patronutilisé %d patrons paramètre%s au lieu de %dmot clé ou nom de type inutile dans une déclaration vide« %D » défini par l'usager évalue toujours les 2 argumentsCONST_DOUBLE utilisé pour l'adresseutilisation de « typename » en dehors du patronutilisé ensemble @FICHIER avec de multiples fichiers bMest pas implantél'utlisation de la déclaration « %D » introduit un type ambigu « %T »utilisation du synthétisé «%#D» pour l'affectaion par copieutilisation de type de patron de paramètre « %T » après « %s »utilisation d'un nom de typedef « %D » après « %s »utilisation de déclaration pour un destructeurl'utilisation de déclaration pour un non membre au niveau de la portée de la classevalidate_value_data: boucle dans la chaîne regno (%u)validate_value_data: [%u] next_regno erroné pour une chaîne vide (%u)validate_value_data: [%u] oldest_regno erroné (%u)validate_value_data: [%u] registre non vide dans la chaîne (%s %u %i)valeur de -mfixed-range doit avoir la forme REG1-REG2varargs de fonction ne peuvent par être en lignevariable «%#D» a un initialiseur mais un type incompletvariable « %s » déclarée «inline »variable « %s » a un initialiseur mais un type incompletvariable « %s » pourrait être maltraitée par un «longjmp» ou un «vfork »décalage de variable est passé partiellement dans la pile et dans le registrevariable ou champ « %s » déclaré «void »variable ou champ déclaré voidtaille de la variable est passée partiellement dans la pile et le registretype de taille variable déclaré à l'extérieur den'importe quelle fonctionobjet de taille variable « %D » peut ne pas être initialiséobjet de taille variable peut ne pas être initialiséobjet de taille variable de type « %T » peut ne pas être initialisédébordement du vecteur dans l'expressionerreur de vérification au PC=%dverify_flow_info failedverify_flow_info: bordure suivante du bloc de base %d est corrompueverify_flow_info: bordure dupliquée %i->%iverify_flow_info: blocs incorrects pour le fallthru %i->%iverify_flow_info: fallthru incorrect %i->%itableau virtuel %s[%lu]: élément %lu hors gamme dans %s, à %s:%dbase virtuelle « %T » inaccessible dans « %T » en raison de l'ambiguitéfonctions virtuelles ne peuvent être amiesfonction virtuelle d'une non classe « %s »virtuel en dehors de la déclaration de classeexpression void entre «(» et «)»valeur void n'a pas été ignorée comme elle aurait dû l'êtrevariables resgistres volatiles ne fonctionne pas comme vous le souhaiteriezAVERTISSEMENT:AVERTISSEMENT: AVERTISSEMENT: -pipe ignoré parce que -save-temps a été spécifiéAVERTISSEMENT: -pipe ignoré parce que -time a été spécifiéAVERTISSEMENT: «-x %s» après le dernier fichier d'entrée n'a pas d'effetAVERTISSEMENT: fichiers .class déjà compilés ignorés avec -CAVERTISSEMENT: utilisation obsolète de l'opérateur %%[ dans les specsdéclaration faible de « %s » doit être publiquedéclaraion faible de « %s » qui doit être précédée d'une définitiondéclaration faible de « %s » n'est pas supportéeoù les étiquettes de « case » apparaissent icilargeur de « %D » excède son typelargeur de « %s » excède son typelargeur de la constante entière change avec -traditionallargeur de la constante entière peut changer sur d'autres système avec -traditionalà l'intérieur du contextewrite %sécriture dans une constante objet (arg %d)écriture des commandes de chargement. + + écriture à travers un pointeur nul (arg %d)insn erronée dans la bordure fallthrunombre erroné d'arguments spécifié pour l'attribut « %s »nombre erroné d'arguments du patron (%d devrait être %d)type d'argument erroné pour abstype d'argument erroné pour un complément de bittype d'argument erroné pour la conjugaisontype d'argument erroné pour un décrémenttype d'argument erroné pour un incrémenttype d'argument erroné pour l'unaire point d'exclamationtype d'argument erroné pour l'unaire -type d'argument erroné pour l'unaire +écrit %ld octets, attendu %ld, vers %sxstormy16_print_operand: code inconnuvous devez en plus spécifier soit -M ou -MMtableau de taille zéro ou négative « %s »tableau de taille zéro ne réserve pas d'espacelargeur zéro pour le champ de bits « %D »largeur zéro pour le champ de bits « %s »largeur zéro dans le format %schaîne de longueur zéro dans le formattableau de taille zéro « %D » \ No newline at end of file diff -Nrc3pad gcc-3.0.4/gcc/po/fr.po gcc-3.1/gcc/po/fr.po *** gcc-3.0.4/gcc/po/fr.po Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/po/fr.po Fri May 10 14:52:05 2002 *************** *** 0 **** --- 1,22779 ---- + # Messages français pour GNU concernant gcc. + # Copyright © 2001 Free Software Foundation, Inc. + # Michel Robitaille , since 1996. + # + msgid "" + msgstr "" + "Project-Id-Version: GNU gcc 3.1-b20020415\n" + "POT-Creation-Date: 2002-04-23 12:53+0200\n" + "PO-Revision-Date: 2002-04-29 14:00-0500\n" + "Last-Translator: Michel Robitaille \n" + "Language-Team: French \n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=ISO-8859-1\n" + "Content-Transfer-Encoding: 8-bit\n" + + #: attribs.c:314 + #, c-format + msgid "`%s' attribute directive ignored" + msgstr "« %s » attribut de la directive ignoré" + + #: attribs.c:322 + #, c-format + msgid "wrong number of arguments specified for `%s' attribute" + msgstr "nombre erroné d'arguments spécifié pour l'attribut « %s »" + + #: attribs.c:339 + #, c-format + msgid "`%s' attribute does not apply to types" + msgstr "« %s » attribut ne s'applique pas à ces types" + + #: attribs.c:376 + #, c-format + msgid "`%s' attribute only applies to function types" + msgstr "attribut « %s » ne s'applique seulement qu'à des types de fonction" + + #: attribs.c:468 attribs.c:490 attribs.c:512 attribs.c:543 attribs.c:565 attribs.c:590 attribs.c:613 attribs.c:643 attribs.c:681 attribs.c:728 attribs.c:758 attribs.c:788 attribs.c:811 attribs.c:1057 attribs.c:1113 attribs.c:1169 attribs.c:1230 attribs.c:1256 attribs.c:1458 config/arm/arm.c:2007 config/arm/arm.c:2034 config/avr/avr.c:4683 config/h8300/h8300.c:3071 config/h8300/h8300.c:3096 config/i386/i386.c:1267 config/i386/winnt.c:74 + #, c-format + msgid "`%s' attribute ignored" + msgstr "« %s » attribut ignoré" + + #: attribs.c:844 + #, c-format + msgid "unknown machine mode `%s'" + msgstr "mode machine inconnu « %s »" + + #: attribs.c:847 + #, c-format + msgid "no data type for mode `%s'" + msgstr "aucun type de données pour le mode « %s »" + + #: attribs.c:880 + msgid "section attribute cannot be specified for local variables" + msgstr "attribut de section ne peut être spécifié pour des variables locales" + + #: attribs.c:891 + #, c-format + msgid "section of `%s' conflicts with previous declaration" + msgstr "section de « %s » en conflit avec une déclaration précédente" + + #: attribs.c:900 + #, c-format + msgid "section attribute not allowed for `%s'" + msgstr "attribut de section n'est pas permis pour « %s »" + + #: attribs.c:907 + msgid "section attributes are not supported for this target" + msgstr "attribut de section ne sont pas supportés pour la cible" + + #: attribs.c:949 + msgid "requested alignment is not a constant" + msgstr "alignement demandé n'est pas une constante" + + #: attribs.c:954 + msgid "requested alignment is not a power of 2" + msgstr "alignement demandé n'est pas une puissance de 2" + + #: attribs.c:959 + msgid "requested alignment is too large" + msgstr "alignement demandé est trop grand" + + #: attribs.c:986 + #, c-format + msgid "alignment may not be specified for `%s'" + msgstr "alignement ne peut pas être spécifié pour « %s »" + + #: attribs.c:1031 + #, c-format + msgid "`%s' defined both normally and as an alias" + msgstr "« %s » défini à la fois comme normal et comme alias" + + #: attribs.c:1041 + msgid "alias arg not a string" + msgstr "argument d'alias n'est pas une chaîne" + + #: attribs.c:1080 attribs.c:1136 + #, c-format + msgid "`%s' attribute applies only to functions" + msgstr "attribut « %s » ne s'applique seulement qu'à des fonctions" + + #: attribs.c:1087 attribs.c:1143 + #, c-format + msgid "can't set `%s' attribute after definition" + msgstr "ne peut initialiser l'attribut « %s » après définition" + + #: attribs.c:1227 + #, c-format + msgid "`%s' attribute ignored for `%s'" + msgstr "« %s » attribut ignoré pour « %s »" + + #: attribs.c:1284 + #, c-format + msgid "invalid vector type for attribute `%s'" + msgstr "type de vecteur invalide pour l'attribut « %s »" + + #: attribs.c:1307 attribs.c:1312 + msgid "no vector mode with the size and type specified could be found" + msgstr "aucun mode vecteur avec la taille et le type spécifié n'a pas été répéré" + + #: builtins.c:282 + msgid "offset outside bounds of constant string" + msgstr "décalage hors gamme d'une chaîne de constante" + + #: builtins.c:759 + msgid "second arg to `__builtin_prefetch' must be a constant" + msgstr "second argument de « __builtin_prefetch » doit être une constante" + + #: builtins.c:766 + msgid "invalid second arg to __builtin_prefetch; using zero" + msgstr "second argument invalide de « __builtin_prefetch »; utilise zéro" + + #: builtins.c:773 + msgid "third arg to `__builtin_prefetch' must be a constant" + msgstr "troisième argument de « __builtin_prefetch » doit être une constante" + + #: builtins.c:780 + msgid "invalid third arg to __builtin_prefetch; using zero" + msgstr "troisième argument invalide de « __builtin_prefetch »; utilise zéro" + + #. ??? We used to try and build up a call to the out of line function, + #. guessing about what registers needed saving etc. This became much + #. harder with __builtin_va_start, since we don't have a tree for a + #. call to __builtin_saveregs to fall back on. There was exactly one + #. port (i860) that used this code, and I'm unconvinced it could actually + #. handle the general case. So we no longer try to handle anything + #. weird and make the backend absorb the evil. + #: builtins.c:2760 + msgid "__builtin_saveregs not supported by this target" + msgstr "« __builtin_saveregs » n'est pas supporté par la cible" + + #: builtins.c:2802 + msgid "argument of `__builtin_args_info' must be constant" + msgstr "argument de « __builtin_args_info » doit être une constante" + + #: builtins.c:2808 + msgid "argument of `__builtin_args_info' out of range" + msgstr "argument de « __builtin_args_info » hors gamme" + + #: builtins.c:2814 + msgid "missing argument in `__builtin_args_info'" + msgstr "argument manquant dans « __builtin_args_info »" + + #: builtins.c:2846 + msgid "`va_start' used in function with fixed args" + msgstr "« va_start » utilisé dans la fonction avec des arguments fixes" + + #: builtins.c:2865 + msgid "second parameter of `va_start' not last named argument" + msgstr "second paramètre de « va_start » n'est pas le dernier argument nommé" + + #. Evidently an out of date version of ; can't validate + #. va_start's second argument, but can still work as intended. + #: builtins.c:2870 + msgid "`__builtin_next_arg' called without an argument" + msgstr "« __builtin_next_arg » appelé sans argument" + + #: builtins.c:2974 + msgid "too many arguments to function `va_start'" + msgstr "trop d'arguments pour la function « va_start »" + + #: builtins.c:3075 + msgid "first argument to `va_arg' not of type `va_list'" + msgstr "premier argument de « va_arg » n'est pas de type « va_list " + + #. Unfortunately, this is merely undefined, rather than a constraint + #. violation, so we cannot make this an error. If this call is never + #. executed, the program is still strictly conforming. + #: builtins.c:3106 + #, c-format + msgid "`%s' is promoted to `%s' when passed through `...'" + msgstr "« %s » a été promu à « %s » lorsque passé à travers « ... »" + + #: builtins.c:3111 + #, c-format + msgid "(so you should pass `%s' not `%s' to `va_arg')" + msgstr "(vous devriez passer « %s » mais non pas « %s » à « va_arg »)" + + #: builtins.c:3242 + msgid "invalid arg to `__builtin_frame_address'" + msgstr "argument invalid de « __builtin_frame_address »" + + #: builtins.c:3244 + msgid "invalid arg to `__builtin_return_address'" + msgstr "argument invalid de « __builtin_return_address »" + + #: builtins.c:3258 + msgid "unsupported arg to `__builtin_frame_address'" + msgstr "argument non supporté de « __builtin_frame_address »" + + #: builtins.c:3260 + msgid "unsupported arg to `__builtin_return_address'" + msgstr "argument non supporté de « __builtin_return_address »" + + #: builtins.c:3428 + msgid "second arg to `__builtin_expect' must be a constant" + msgstr "second argument de « __builtin_expect » doit être une constante" + + #: builtins.c:3909 + msgid "__builtin_longjmp second argument must be 1" + msgstr "second argument de « __builtin_longjmp » doit être 1" + + #. just do library call, if unknown builtin + #: builtins.c:3982 c-common.c:3811 + #, c-format + msgid "built-in function `%s' not currently supported" + msgstr "fonction interne « %s » n'est pas couramment supportée" + + #: c-common.c:550 + #, c-format + msgid "`%s' is not defined outside of function scope" + msgstr "« %s » n'est pas défini à l'extérieur de l'étendue de la fonction" + + #: c-common.c:590 + msgid "concatenation of string literals with __FUNCTION__ is deprecated. This feature will be removed in future" + msgstr "concaténation de litéraux de chaîne avec « __FUNCTION__ » est dépréciée. Cette option ne sera plus disponible dans le futur." + + #: c-common.c:659 + #, c-format + msgid "string length `%d' is greater than the length `%d' ISO C%d compilers are required to support" + msgstr "longueur de la chaîne « %d » plus grande que la longueur « %d » que le compilateur ISO C%d requiert pour le support" + + #: c-common.c:708 + msgid "overflow in constant expression" + msgstr "débordement dans l'expression de la constante" + + #: c-common.c:729 + msgid "integer overflow in expression" + msgstr "débordement d'entier dans l'expression" + + #: c-common.c:738 + msgid "floating point overflow in expression" + msgstr "débordement d'un nombre en virgule flottante dans l'expression" + + #: c-common.c:744 + msgid "vector overflow in expression" + msgstr "débordement du vecteur dans l'expression" + + #. This detects cases like converting -129 or 256 to unsigned char. + #: c-common.c:765 + msgid "large integer implicitly truncated to unsigned type" + msgstr "grand entier implicitement tronqué pour un type non signé" + + #: c-common.c:767 + msgid "negative integer implicitly converted to unsigned type" + msgstr "entier négatif implicitement converti en un type non signé" + + #: c-common.c:814 + msgid "overflow in implicit constant conversion" + msgstr "débordement dans la conversion implicte de la constante" + + #: c-common.c:962 + #, c-format + msgid "operation on `%s' may be undefined" + msgstr "opération portant sur « %s » est peut être indéfinie" + + #: c-common.c:1253 + msgid "expression statement has incomplete type" + msgstr "déclaration de l'expression a un type incomplet" + + #: c-common.c:1286 + msgid "case label does not reduce to an integer constant" + msgstr "l'étiquette du « case » ne se réduit pas en une constante entière" + + #: c-common.c:1586 + msgid "invalid truth-value expression" + msgstr "expression valeur de vérité invalide" + + #: c-common.c:1637 + #, c-format + msgid "invalid operands to binary %s" + msgstr "opérandes invalides pour le binaire %s" + + #: c-common.c:1872 c-common.c:1881 + msgid "comparison is always false due to limited range of data type" + msgstr "comparaison est toujours fausse en raison d'une gamme limitée de type de données" + + #: c-common.c:1874 c-common.c:1883 + msgid "comparison is always true due to limited range of data type" + msgstr "comparaison est toujours vraie en raison d'une gamme limitée de type de données" + + #: c-common.c:1949 + msgid "comparison of unsigned expression >= 0 is always true" + msgstr "comparaison d'une expression non signée >=0 est toujours vraie" + + #: c-common.c:1958 + msgid "comparison of unsigned expression < 0 is always false" + msgstr "comparaison d'une expression non signée < 0 est toujours fausse" + + #: c-common.c:2005 + msgid "pointer of type `void *' used in arithmetic" + msgstr "pointeur de type « void * » utilisé en arithmétique" + + #: c-common.c:2011 + msgid "pointer to a function used in arithmetic" + msgstr "pointeur vers une fonction utilisé en arithmétique" + + #: c-common.c:2017 + msgid "pointer to member function used in arithmetic" + msgstr "pointeur vers le membre d'une fonction utilisée dans l'arithmétique" + + #: c-common.c:2023 + msgid "pointer to a member used in arithmetic" + msgstr "pointeur vers un membre utilisé dans l'arithmétique" + + #: c-common.c:2110 f/com.c:14823 + msgid "struct type value used where scalar is required" + msgstr "valeur du type struct utilisé nécessite un scalaire" + + #: c-common.c:2114 f/com.c:14827 + msgid "union type value used where scalar is required" + msgstr "valeur du type union utilisé nécessite un scalaire" + + #: c-common.c:2118 f/com.c:14831 + msgid "array type value used where scalar is required" + msgstr "valeur du type array utilisé nécessite un scalaire" + + #: c-common.c:2233 f/com.c:14957 + msgid "suggest parentheses around assignment used as truth value" + msgstr "parenthèses suggérées autour de l'affectation utilisées comme valeur de vérité" + + #: c-common.c:2277 c-common.c:2309 + msgid "invalid use of `restrict'" + msgstr "utilisation invalide de « restrict »" + + #: c-common.c:2425 + msgid "__alignof__ applied to an incomplete type" + msgstr "« __alignof__ » appliqué sur un type incomplet" + + #: c-common.c:2451 + msgid "`__alignof' applied to a bit-field" + msgstr "« __alignof » appliqué sur un champ de bits" + + #: c-common.c:2893 + #, c-format + msgid "cannot disable built-in function `%s'" + msgstr "ne peut désactiver la fonction interne « %s »" + + #: c-common.c:3174 c-typeck.c:1781 + #, c-format + msgid "too few arguments to function `%s'" + msgstr "pas assez d'argument pour la fonction « %s »" + + #: c-common.c:3180 c-typeck.c:1634 + #, c-format + msgid "too many arguments to function `%s'" + msgstr "trop d'arguments pour la fonction « %s »" + + #: c-common.c:3369 + msgid "pointers are not permitted as case values" + msgstr "les pointeurs ne sont pas permis comme valeurs de « case »" + + #: c-common.c:3375 + msgid "ISO C++ forbids range expressions in switch statements" + msgstr "ISO C++ interdit les expressions de bornes dans les déclarations de « switch »" + + #: c-common.c:3377 + msgid "ISO C forbids range expressions in switch statements" + msgstr "ISO C interdit les expressions de bornes dans les déclarations de « switch »" + + #: c-common.c:3407 + msgid "empty range specified" + msgstr "bornes spécifiées sont vides" + + #: c-common.c:3458 + msgid "duplicate (or overlapping) case value" + msgstr "valeur de « case » double ou qui en chevauche un autre" + + #: c-common.c:3460 + msgid "this is the first entry overlapping that value" + msgstr "c'est la première entrée qui chevauche cette valeur" + + #: c-common.c:3464 + msgid "duplicate case value" + msgstr "valeur de « case » double" + + #: c-common.c:3465 + msgid "previously used here" + msgstr "précédemment utilisé ici" + + #: c-common.c:3469 + msgid "multiple default labels in one switch" + msgstr "étiquettes multiples de défaut dans un « case »" + + #: c-common.c:3470 + msgid "this is the first default label" + msgstr "ceci est la première étiquette de défaut" + + #: c-common.c:3498 + msgid "ISO C++ forbids taking the address of a label" + msgstr "ISO C++ interdit de prendre l'adresse d'une étiquette" + + #: c-common.c:3500 + msgid "ISO C forbids taking the address of a label" + msgstr "ISO C interdit l'adresse d'une expression d'une étiquette" + + #: c-common.c:4148 + msgid "-Wformat-y2k ignored without -Wformat" + msgstr "-Wformat-y2k ignorée sans -Wformat" + + #: c-common.c:4150 + msgid "-Wformat-extra-args ignored without -Wformat" + msgstr "-Wformat-extra-args ignorée sans -Wformat" + + #: c-common.c:4152 + msgid "-Wformat-nonliteral ignored without -Wformat" + msgstr "-Wformat-nonliteral ignorée sans -Wformat" + + #: c-common.c:4154 + msgid "-Wformat-security ignored without -Wformat" + msgstr "-Wformat-security ignorée sans -Wformat" + + #: c-common.c:4156 + msgid "-Wmissing-format-attribute ignored without -Wformat" + msgstr "-Wmissing-format-attribute ignorée sans -Wformat" + + #: c-common.c:4247 + #, c-format + msgid "declaration of `%s' shadows %s" + msgstr "déclaration de « %s » fait ombrage à %s" + + #: c-convert.c:78 c-typeck.c:1035 c-typeck.c:4047 cp/typeck.c:1673 cp/typeck.c:6165 + msgid "void value not ignored as it ought to be" + msgstr "valeur void n'a pas été ignorée comme elle aurait dû l'être" + + #: c-convert.c:110 java/typeck.c:150 + msgid "conversion to non-scalar type requested" + msgstr "conversion vers un type non scalaire demandé" + + #: c-decl.c:476 + msgid "-traditional is deprecated and may be removed" + msgstr "-traditional est dépréciée et peut être enlevée dans le futur" + + #: c-decl.c:566 + #, c-format + msgid "unknown C standard `%s'" + msgstr "standard C « %s » inconnu" + + #: c-decl.c:848 + #, c-format + msgid "array `%s' assumed to have one element" + msgstr "on assume que le tableau « %s » a un élément" + + #: c-decl.c:1024 + #, c-format + msgid "`struct %s' incomplete in scope ending here" + msgstr "« struct %s » incomplet dans le champ final ici" + + #: c-decl.c:1027 + #, c-format + msgid "`union %s' incomplete in scope ending here" + msgstr "« union %s » incomplet dans le champs final ici" + + #: c-decl.c:1030 + #, c-format + msgid "`enum %s' incomplete in scope ending here" + msgstr "« enum %s » incomplet dans le champ final ici" + + #: c-decl.c:1144 c-decl.c:1285 java/decl.c:1377 + #, c-format + msgid "label `%s' used but not defined" + msgstr "étiquette « %s » utilisée mais non définie" + + #: c-decl.c:1150 c-decl.c:1292 java/decl.c:1383 + #, c-format + msgid "label `%s' defined but not used" + msgstr "étiquette « %s » définie mais non utilisée" + + #: c-decl.c:1409 cp/decl.c:3128 + #, c-format + msgid "function `%s' redeclared as inline" + msgstr "fonction « %s » redéclarée comme étant inline" + + #: c-decl.c:1411 cp/decl.c:3130 + #, c-format + msgid "previous declaration of function `%s' with attribute noinline" + msgstr "déclaration précédente de la fonction « %s » avec l'attribut noinline" + + #: c-decl.c:1418 cp/decl.c:3137 + #, c-format + msgid "function `%s' redeclared with attribute noinline" + msgstr "fonction « %s » redéclarée à l'intérieur noinline" + + #: c-decl.c:1420 cp/decl.c:3139 + #, c-format + msgid "previous declaration of function `%s' was inline" + msgstr "déclaration précédente de la fonction « %s » était inline" + + #: c-decl.c:1449 c-decl.c:1502 + #, c-format + msgid "shadowing built-in function `%s'" + msgstr "fait ombrage à la fonction interne « %s »" + + #: c-decl.c:1451 + #, c-format + msgid "shadowing library function `%s'" + msgstr "fait ombrage à fonction « %s » de la librairie" + + #: c-decl.c:1457 + #, c-format + msgid "library function `%s' declared as non-function" + msgstr "fonction « %s » de la librairie déclarée comme n'étant pas une fonction" + + #: c-decl.c:1461 c-decl.c:1464 + #, c-format + msgid "built-in function `%s' declared as non-function" + msgstr "fonction interne « %s » n'est pas déclarée comme une fonction" + + #: c-decl.c:1468 objc/objc-act.c:2334 objc/objc-act.c:6036 + #, c-format + msgid "`%s' redeclared as different kind of symbol" + msgstr "« %s » redéclaré comme une sorte différente de symbole" + + #: c-decl.c:1469 c-decl.c:1667 c-decl.c:1817 objc/objc-act.c:2336 objc/objc-act.c:6038 objc/objc-act.c:6093 + #, c-format + msgid "previous declaration of `%s'" + msgstr "déclaration précédente de « %s »" + + #. If types don't match for a built-in, throw away the built-in. + #: c-decl.c:1571 + #, c-format + msgid "conflicting types for built-in function `%s'" + msgstr "type conflictuels pour la fonction interne « %s »" + + #: c-decl.c:1614 c-decl.c:1633 + #, c-format + msgid "conflicting types for `%s'" + msgstr "types conflictuels pour « %s »" + + #: c-decl.c:1656 + msgid "a parameter list with an ellipsis can't match an empty parameter name list declaration" + msgstr "un paramètre de la liste avec une ellipse ne peut concorder une déclaration vide de liste de noms de paramètres" + + #: c-decl.c:1662 + msgid "an argument type that has a default promotion can't match an empty parameter name list declaration" + msgstr "un type d'argument qui a une promotion par défaut ne peut concorder avec une déclaration vide de noms de paramètres" + + #: c-decl.c:1677 c-decl.c:1700 + #, c-format + msgid "redefinition of `%s'" + msgstr "redéfinition de « %s »" + + #: c-decl.c:1680 + #, c-format + msgid "redeclaration of `%s'" + msgstr "redéclaration de « %s »" + + #: c-decl.c:1683 + #, c-format + msgid "conflicting declarations of `%s'" + msgstr "déclarations conflictuelles de « %s »" + + #: c-decl.c:1727 + #, c-format + msgid "prototype for `%s' follows" + msgstr "prototype de « %s » suit" + + #: c-decl.c:1728 c-decl.c:1736 c-decl.c:1752 + msgid "non-prototype definition here" + msgstr "définition d'un non prototype ici" + + #: c-decl.c:1735 + #, c-format + msgid "prototype for `%s' follows and number of arguments doesn't match" + msgstr "prototype de « %s » suit mais le nombre d'arguments ne concorde pas" + + #: c-decl.c:1750 + #, c-format + msgid "prototype for `%s' follows and argument %d doesn't match" + msgstr "prototype de « %s » suit mais le nombre d'arguments %d ne concorde pas" + + #: c-decl.c:1768 + #, c-format + msgid "`%s' declared inline after being called" + msgstr "« %s » déclaré en ligne après avoir été appelé" + + #: c-decl.c:1774 + #, c-format + msgid "`%s' declared inline after its definition" + msgstr "« %s » déclaré en ligne après sa définition" + + #: c-decl.c:1781 + #, c-format + msgid "static declaration for `%s' follows non-static" + msgstr "la déclaration « static» de « %s » en suit une non « static »" + + #: c-decl.c:1789 + #, c-format + msgid "non-static declaration for `%s' follows static" + msgstr "la déclaration non « static» de « %s » en suit une « static »" + + #: c-decl.c:1796 + #, c-format + msgid "const declaration for `%s' follows non-const" + msgstr "la déclaration constante de « %s » en suit une non constante" + + #: c-decl.c:1803 + #, c-format + msgid "type qualifiers for `%s' conflict with previous decl" + msgstr "le qualificateur du type de « %s » est en conflit avec une déclaration précédente" + + #: c-decl.c:1816 + #, c-format + msgid "redundant redeclaration of `%s' in same scope" + msgstr "re-déclaration redondante de « %s » dans le même champ." + + #: c-decl.c:2120 java/decl.c:1076 + #, c-format + msgid "declaration of `%s' shadows a parameter" + msgstr "déclaration de « %s » cache un paramètre" + + #: c-decl.c:2123 java/decl.c:1079 + #, c-format + msgid "declaration of `%s' shadows a symbol from the parameter list" + msgstr "déclaration de « %s » cache un symbole de la liste des paramètres" + + #: c-decl.c:2144 cp/decl.c:4236 + msgid "a parameter" + msgstr "un paramètre" + + #: c-decl.c:2146 cp/decl.c:4253 + msgid "a previous local" + msgstr "un local antérieur" + + #. XXX shadow warnings in outer-more namespaces + #: c-decl.c:2150 cp/decl.c:4257 + msgid "a global declaration" + msgstr "une déclaration globale" + + #: c-decl.c:2194 + #, c-format + msgid "nested extern declaration of `%s'" + msgstr "déclaration de « %s » externe imbriquée" + + #: c-decl.c:2216 java/decl.c:1029 + #, c-format + msgid "`%s' used prior to declaration" + msgstr "« %s » utilisé précédemment avant sa déclaration" + + #: c-decl.c:2231 c-decl.c:2446 + #, c-format + msgid "`%s' was declared implicitly `extern' and later `static'" + msgstr "« %s » a été déclaré implicitement « extern » et plus loin « static »" + + #: c-decl.c:2341 cp/decl.c:4095 + msgid "type mismatch with previous external decl" + msgstr "pas de concordance de type avec une déclaration externe précédente" + + #: c-decl.c:2342 + #, c-format + msgid "previous external decl of `%s'" + msgstr "déclaration externe précédente de « %s »" + + #: c-decl.c:2355 + msgid "type mismatch with previous implicit declaration" + msgstr "non concordance de type avec la déclaration implicite précédente" + + #: c-decl.c:2357 + #, c-format + msgid "previous implicit declaration of `%s'" + msgstr "déclaration précédente implicite de « %s »" + + #: c-decl.c:2374 + #, c-format + msgid "type of external `%s' is not global" + msgstr "le type de l'externe « %s » n'est pas global" + + #: c-decl.c:2425 + #, c-format + msgid "`%s' was previously implicitly declared to return `int'" + msgstr "« %s » a été précédemment implicitement déclaré comme retournant un « int »" + + #: c-decl.c:2450 + #, c-format + msgid "`%s' was declared `extern' and later `static'" + msgstr "« %s » a été déclaré « extern » et plus loin « static »" + + #: c-decl.c:2474 + #, c-format + msgid "extern declaration of `%s' doesn't match global one" + msgstr "déclaration externe de « %s » ne concorde pas avec la globale" + + #: c-decl.c:2516 + #, c-format + msgid "`%s' locally external but globally static" + msgstr "« %s » localement externe mais globalement static" + + #: c-decl.c:2638 + #, c-format + msgid "function `%s' was previously declared within a block" + msgstr "fonction « %s » a été précédemment déclarée à l'intérieur d'un bloc" + + #: c-decl.c:2658 c-decl.c:2660 + #, c-format + msgid "implicit declaration of function `%s'" + msgstr "déclaration implicite de la fonction « %s »" + + #: c-decl.c:2748 + #, c-format + msgid "label %s referenced outside of any function" + msgstr "étiquette %s référencée à l'extérieur de n'importe quelle fonction" + + #: c-decl.c:2805 + #, c-format + msgid "duplicate label declaration `%s'" + msgstr "déclaration de l'étiquette « %s » est double" + + #: c-decl.c:2808 + msgid "this is a previous declaration" + msgstr "ceci est une déclaration précédente" + + #: c-decl.c:3320 + msgid "unnamed struct/union that defines no instances" + msgstr "struct/union sans nom qui définit aucune instance" + + #: c-decl.c:3339 + msgid "useless keyword or type name in empty declaration" + msgstr "mot clé ou nom de type inutile dans une déclaration vide" + + #: c-decl.c:3346 + msgid "two types specified in one empty declaration" + msgstr "deux types spécifiés dans une déclaration vide" + + #: c-decl.c:3351 c-parse.y:725 c-parse.y:727 parse.y:742 parse.y:1827 objc-parse.y:761 objc-parse.y:763 objc-parse.y:2997 + msgid "empty declaration" + msgstr "déclaration vide" + + #: c-decl.c:3381 + msgid "ISO C89 does not support `static' or type qualifiers in parameter array declarators" + msgstr "ISO C89 ne supporte pas « static » ou les qualificateurs de type dans les déclarateurs de tableau de paramètres" + + #: c-decl.c:3383 + msgid "ISO C89 does not support `[*]' array declarators" + msgstr "ISO C89 ne supporte pas « [*] » dans les déclarateurs de tableau" + + #: c-decl.c:3386 + msgid "GCC does not yet properly implement `[*]' array declarators" + msgstr "GCC ne supporte pas encore adéquatement « [* ]» dans les déclarateurs de tableau" + + #: c-decl.c:3405 + msgid "static or type qualifiers in abstract declarator" + msgstr "static ou qualificateurs de type dans un déclarateur abstrait" + + #: c-decl.c:3479 + #, c-format + msgid "`%s' is usually a function" + msgstr "« %s » est habituellement une fonction" + + #: c-decl.c:3493 + #, c-format + msgid "typedef `%s' is initialized" + msgstr "typedef « %s » est initialisé" + + #: c-decl.c:3500 + #, c-format + msgid "function `%s' is initialized like a variable" + msgstr "fonction « %s » est initialisée comme une variable" + + #. DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE. + #: c-decl.c:3507 + #, c-format + msgid "parameter `%s' is initialized" + msgstr "paramètre « %s » est initialisé" + + #: c-decl.c:3527 c-typeck.c:4841 + msgid "variable-sized object may not be initialized" + msgstr "objet de taille variable peut ne pas être initialisé" + + #: c-decl.c:3533 + #, c-format + msgid "variable `%s' has initializer but incomplete type" + msgstr "variable « %s » a un initialiseur mais un type incomplet" + + #: c-decl.c:3539 + #, c-format + msgid "elements of array `%s' have incomplete type" + msgstr "éléments du tableau « %s » ont des types incomplets" + + #: c-decl.c:3552 + #, c-format + msgid "declaration of `%s' has `extern' and is initialized" + msgstr "déclaration de « %s » est « extern » et est initialisé" + + #: c-decl.c:3591 c-decl.c:6246 cp/decl.c:7368 cp/decl.c:13623 + #, c-format + msgid "inline function `%s' given attribute noinline" + msgstr "fonction inline « %s » a reçu l'attribut noinline" + + #: c-decl.c:3674 + #, c-format + msgid "initializer fails to determine size of `%s'" + msgstr "échec de l'initialiseur pour déterminer la taille de « %s »" + + #: c-decl.c:3679 + #, c-format + msgid "array size missing in `%s'" + msgstr "taille du tableau manquant dans « %s »" + + #: c-decl.c:3695 + #, c-format + msgid "zero or negative size array `%s'" + msgstr "tableau de taille zéro ou négative « %s »" + + #: c-decl.c:3723 + #, c-format + msgid "storage size of `%s' isn't known" + msgstr "taille de stockage de « %s » n'est pas connue" + + #: c-decl.c:3733 + #, c-format + msgid "storage size of `%s' isn't constant" + msgstr "taille de stockage de « %s » n'est pas une constante" + + #: c-decl.c:3792 + #, c-format + msgid "ignoring asm-specifier for non-static local variable `%s'" + msgstr "spécificateur asm ignorés pour la variable locale non statique « %s »" + + #: c-decl.c:3867 + #, c-format + msgid "ISO C forbids parameter `%s' shadowing typedef" + msgstr "ISO C interdit le paramètre « %s » faisant ombrage au typedef" + + #: c-decl.c:4171 cp/decl.c:10171 + msgid "`long long long' is too long for GCC" + msgstr "« long long long » est trop long pour GCC" + + #: c-decl.c:4176 + msgid "ISO C89 does not support `long long'" + msgstr "ISO C89 ne supporte pas « long long »" + + #: c-decl.c:4181 cp/decl.c:10176 + #, c-format + msgid "duplicate `%s'" + msgstr "« %s » apparaît en double" + + #: c-decl.c:4187 cp/decl.c:10200 + #, c-format + msgid "two or more data types in declaration of `%s'" + msgstr "deux types de données ou plus dans la déclaration de « %s »" + + #: c-decl.c:4207 cp/decl.c:10205 + #, c-format + msgid "`%s' fails to be a typedef or built in type" + msgstr "« %s » a échoué pour devenir un typedef ou un type construit" + + #: c-decl.c:4246 + #, c-format + msgid "type defaults to `int' in declaration of `%s'" + msgstr "type utilisé par défaut « int» dans la déclaration de « %s »" + + #: c-decl.c:4275 + #, c-format + msgid "both long and short specified for `%s'" + msgstr "« long » et « short » spécifiés à la fois pour « %s »" + + #: c-decl.c:4279 cp/decl.c:10320 + #, c-format + msgid "long or short specified with char for `%s'" + msgstr "« long » ou « short » spécifié avec «char» pour « %s »" + + #: c-decl.c:4286 cp/decl.c:10324 + #, c-format + msgid "long or short specified with floating type for `%s'" + msgstr "« long » ou « short » spécifié avec un type flottant pour « %s »" + + #: c-decl.c:4289 + msgid "the only valid combination is `long double'" + msgstr "la seule combinaison valide est « long double »" + + #: c-decl.c:4295 + #, c-format + msgid "both signed and unsigned specified for `%s'" + msgstr "signé et non signé spécifiés à la fois pour « %s »" + + #: c-decl.c:4297 cp/decl.c:10313 + #, c-format + msgid "long, short, signed or unsigned invalid for `%s'" + msgstr "« long », « short », signé ou non signé est invalide pour « %s »" + + #: c-decl.c:4303 cp/decl.c:10333 + #, c-format + msgid "long, short, signed or unsigned used invalidly for `%s'" + msgstr "« long », « short », signé ou non signé utilisé incorrectement pour « %s »" + + #: c-decl.c:4322 cp/decl.c:10354 + #, c-format + msgid "complex invalid for `%s'" + msgstr "« complex » invalide pour « %s »" + + #: c-decl.c:4367 + msgid "ISO C89 does not support complex types" + msgstr "ISO C89 ne supporte pas les types « complex »" + + #: c-decl.c:4379 + msgid "ISO C does not support plain `complex' meaning `double complex'" + msgstr "ISO C ne supporte pas les « complex » utilisé comme «double complex »" + + #: c-decl.c:4385 c-decl.c:4397 + msgid "ISO C does not support complex integer types" + msgstr "ISO C ne supporte pas les type « complex » d'entiers" + + #: c-decl.c:4412 c-decl.c:4851 cp/decl.c:10969 + msgid "duplicate `const'" + msgstr "« const » apparaît en double" + + #: c-decl.c:4414 c-decl.c:4855 cp/decl.c:10973 + msgid "duplicate `restrict'" + msgstr "« restrict » apparaît en double" + + #: c-decl.c:4416 c-decl.c:4853 cp/decl.c:10971 + msgid "duplicate `volatile'" + msgstr "volatile» apparaît en double" + + #: c-decl.c:4438 cp/decl.c:10509 + #, c-format + msgid "multiple storage classes in declaration of `%s'" + msgstr "multiples classes de stockage dans la déclaration de « %s »" + + #: c-decl.c:4447 + msgid "function definition declared `auto'" + msgstr "définition de fonction déclaré « auto »" + + #: c-decl.c:4449 + msgid "function definition declared `register'" + msgstr "définition de fonction déclarée « register »" + + #: c-decl.c:4451 + msgid "function definition declared `typedef'" + msgstr "définition de fonction déclarée « typedef »" + + #: c-decl.c:4464 + #, c-format + msgid "storage class specified for structure field `%s'" + msgstr "classe de stockage spécifiée pour la structure du champ « %s »" + + #: c-decl.c:4468 cp/decl.c:10556 + #, c-format + msgid "storage class specified for parameter `%s'" + msgstr "classe de stockage spécifiée pour le paramètre « %s »" + + #: c-decl.c:4471 cp/decl.c:10558 + msgid "storage class specified for typename" + msgstr "classe de stockage spécifié pour un typename" + + #: c-decl.c:4483 cp/decl.c:10572 + #, c-format + msgid "`%s' initialized and declared `extern'" + msgstr "« %s » initialisé et déclaré « extern »" + + #: c-decl.c:4485 cp/decl.c:10575 + #, c-format + msgid "`%s' has both `extern' and initializer" + msgstr "« %s » est à la fois « extern » et initialiseur" + + #: c-decl.c:4489 cp/decl.c:10579 + #, c-format + msgid "nested function `%s' declared `extern'" + msgstr "fonction imbriquée « %s » déclarée « extern »" + + #: c-decl.c:4492 cp/decl.c:10583 + #, c-format + msgid "top-level declaration of `%s' specifies `auto'" + msgstr "la déclaration de haut niveau de « %s » a spécifié «auto »" + + #. Only the innermost declarator (making a parameter be of + #. array type which is converted to pointer type) + #. may have static or type qualifiers. + #: c-decl.c:4527 c-decl.c:4716 + msgid "static or type qualifiers in non-parameter array declarator" + msgstr "static ou qualificateurs de type dans un déclarateur d'un tableau de non paramètres" + + #: c-decl.c:4571 + #, c-format + msgid "declaration of `%s' as array of voids" + msgstr "déclaration de « %s » comme un tableau de « voids »" + + #: c-decl.c:4577 + #, c-format + msgid "declaration of `%s' as array of functions" + msgstr "déclaration de « %s » comme un tableau de fonctions" + + #: c-decl.c:4598 + #, c-format + msgid "size of array `%s' has non-integer type" + msgstr "taille du tableau « %s » n'est pas de type entier" + + #: c-decl.c:4603 + #, c-format + msgid "ISO C forbids zero-size array `%s'" + msgstr "ISO C interdit les tableaux de taille zéro « %s »" + + #: c-decl.c:4610 + #, c-format + msgid "size of array `%s' is negative" + msgstr "taille du tableau « %s » est négative" + + #: c-decl.c:4623 + #, c-format + msgid "ISO C89 forbids array `%s' whose size can't be evaluated" + msgstr "ISO C89 interdit le tableau « %s » dont la taille ne peut être évaluée" + + #: c-decl.c:4626 + #, c-format + msgid "ISO C89 forbids variable-size array `%s'" + msgstr "ISO C89 interdit le tableau de taille variable « %s »" + + #: c-decl.c:4656 c-decl.c:4877 cp/decl.c:11179 + #, c-format + msgid "size of array `%s' is too large" + msgstr "taille du tableau « %s » est trop grande" + + #: c-decl.c:4673 + msgid "ISO C89 does not support flexible array members" + msgstr "ISO C89 ne supporte pas les membres flexibles d'un tableau" + + #: c-decl.c:4683 + msgid "array type has incomplete element type" + msgstr "type tableau a un type d'élément incomplet" + + #: c-decl.c:4690 c-decl.c:4927 + msgid "ISO C forbids const or volatile function types" + msgstr "ISO C interdit les types volatile ou de constante de fonction" + + #: c-decl.c:4736 cp/decl.c:10720 + #, c-format + msgid "`%s' declared as function returning a function" + msgstr "« %s » déclaré comme une fonction retournant une fonction" + + #: c-decl.c:4741 cp/decl.c:10725 + #, c-format + msgid "`%s' declared as function returning an array" + msgstr "« %s » déclaré comme une fonction retournant un tableau" + + #: c-decl.c:4776 + msgid "ISO C forbids qualified void function return type" + msgstr "ISO C interdit les type retourné d'une fonction void qualifié" + + #: c-decl.c:4780 + msgid "type qualifiers ignored on function return type" + msgstr "qualificateurs de type ignorés pour le type retourné d'une fonction" + + #: c-decl.c:4809 c-decl.c:4892 c-decl.c:5016 c-decl.c:5110 + msgid "ISO C forbids qualified function types" + msgstr "ISO C interdit les types de fonction qualifiées" + + #: c-decl.c:4849 cp/decl.c:10965 + msgid "invalid type modifier within pointer declarator" + msgstr "modificateur de type invalide dans la déclaration de pointeur" + + #: c-decl.c:4947 cp/decl.c:11457 + #, c-format + msgid "variable or field `%s' declared void" + msgstr "variable ou champ « %s » déclaré «void »" + + #: c-decl.c:4980 + msgid "attributes in parameter array declarator ignored" + msgstr "les attributs dans un paramètre déclarateur de tableau sont ignorés" + + #: c-decl.c:5005 + msgid "invalid type modifier within array declarator" + msgstr "modificateur invalide de type à l'intérieur d'un déclarateur de tableau" + + #: c-decl.c:5054 + #, c-format + msgid "field `%s' declared as a function" + msgstr "champ « %s » déclaré comme une fonction" + + #: c-decl.c:5060 + #, c-format + msgid "field `%s' has incomplete type" + msgstr "champ « %s » a un type incomplet" + + #: c-decl.c:5092 c-decl.c:5094 c-decl.c:5101 + #, c-format + msgid "invalid storage class for function `%s'" + msgstr "classe de stockage invalide pour la fonction « %s »" + + #: c-decl.c:5116 + msgid "`noreturn' function returns non-void value" + msgstr "fonction « noreturn» retourne une valeur non «void »" + + #: c-decl.c:5131 + msgid "cannot inline function `main'" + msgstr "ne peut rendre en ligne « main » en fonction en ligne" + + #: c-decl.c:5184 + #, c-format + msgid "variable `%s' declared `inline'" + msgstr "variable « %s » déclarée «inline »" + + #: c-decl.c:5257 c-decl.c:6298 + msgid "function declaration isn't a prototype" + msgstr "déclaration de fonction n'est pas un prototype" + + #: c-decl.c:5263 + msgid "parameter names (without types) in function declaration" + msgstr "noms de paramètres (sans types) dans la déclaration de fonction" + + #: c-decl.c:5295 c-decl.c:6689 + #, c-format + msgid "parameter `%s' has incomplete type" + msgstr "paramètre « %s » a un type incomplet" + + #: c-decl.c:5298 + msgid "parameter has incomplete type" + msgstr "paramètre a un type incomplet" + + #: c-decl.c:5319 + #, c-format + msgid "parameter `%s' points to incomplete type" + msgstr "paramètre « %s » pointe vers un type incomplet" + + #: c-decl.c:5322 + msgid "parameter points to incomplete type" + msgstr "paramètre pointe vers un type incomplet" + + #: c-decl.c:5387 + #, c-format + msgid "parameter `%s' has just a forward declaration" + msgstr "paramètre « %s » n'a qu'une déclaration vers l'avant" + + #: c-decl.c:5428 + msgid "`void' in parameter list must be the entire list" + msgstr "« void » dans la liste des paramètres doit être la liste entière" + + #: c-decl.c:5459 + #, c-format + msgid "`struct %s' declared inside parameter list" + msgstr "« struct %s » déclaré à l'intérieur de la liste de paramètres" + + #: c-decl.c:5462 + #, c-format + msgid "`union %s' declared inside parameter list" + msgstr "« union %s » déclaré à l'intérieur de la liste de paramètres" + + #: c-decl.c:5465 + #, c-format + msgid "`enum %s' declared inside parameter list" + msgstr "« enum %s » déclaré à l'intérieur de la liste de paramètres" + + #: c-decl.c:5472 + msgid "anonymous struct declared inside parameter list" + msgstr "« struct » anonyme déclaré à l'intérieur de la liste des paramètres" + + #: c-decl.c:5474 + msgid "anonymous union declared inside parameter list" + msgstr "« union » anonyme déclaré à l'intérieur de la liste des paramètres" + + #: c-decl.c:5476 + msgid "anonymous enum declared inside parameter list" + msgstr "« enum » anonyme déclaré à l'intérieur de la liste des paramètres" + + #: c-decl.c:5480 + msgid "its scope is only this definition or declaration, which is probably not what you want" + msgstr "son étendue ne vaut que pour cette définition ou déclaration, laquelle n'est probablement celle que vous désirez." + + #: c-decl.c:5559 + #, c-format + msgid "redefinition of `union %s'" + msgstr "redéfinition de «union %s'" + + #: c-decl.c:5562 + #, c-format + msgid "redefinition of `struct %s'" + msgstr "redéfinition de «struct %s'" + + #: c-decl.c:5601 + msgid "unnamed fields of type other than struct or union are not allowed" + msgstr "champs sans nom de type autre que struct ou union ne sont pas permis" + + #: c-decl.c:5642 c-decl.c:5645 + #, c-format + msgid "%s defined inside parms" + msgstr "%s défini à l'intérieur des paramètres" + + #: c-decl.c:5643 c-decl.c:5646 c-decl.c:5657 + msgid "union" + msgstr "union" + + #: c-decl.c:5643 c-decl.c:5646 + msgid "structure" + msgstr "structure" + + #: c-decl.c:5656 + #, c-format + msgid "%s has no %s" + msgstr "%s n'a pas de %s" + + #: c-decl.c:5657 + msgid "struct" + msgstr "struct" + + #: c-decl.c:5658 + msgid "named members" + msgstr "membres nommés" + + #: c-decl.c:5658 + msgid "members" + msgstr "membres" + + #: c-decl.c:5697 + #, c-format + msgid "nested redefinition of `%s'" + msgstr "redéfinition imbriquée de « %s »" + + #: c-decl.c:5710 + #, c-format + msgid "bit-field `%s' width not an integer constant" + msgstr "largeur du champ de bits « %s » n'est pas une constante entière" + + #: c-decl.c:5721 + #, c-format + msgid "bit-field `%s' has invalid type" + msgstr "champ de bits « %s » a un type invalide" + + #: c-decl.c:5733 + #, c-format + msgid "bit-field `%s' type invalid in ISO C" + msgstr "champ de bits « %s » a un type invalide en ISO C" + + #: c-decl.c:5744 + #, c-format + msgid "negative width in bit-field `%s'" + msgstr "largeur négative du champ de bits « %s »" + + #: c-decl.c:5746 + #, c-format + msgid "width of `%s' exceeds its type" + msgstr "largeur de « %s » excède son type" + + #: c-decl.c:5748 + #, c-format + msgid "zero width for bit-field `%s'" + msgstr "largeur zéro pour le champ de bits « %s »" + + #: c-decl.c:5762 + #, c-format + msgid "`%s' is narrower than values of its type" + msgstr "« %s » est plus étroit que les valeurs de son type" + + #: c-decl.c:5808 + msgid "flexible array member in union" + msgstr "membre flexible de tableau dans l'union" + + #: c-decl.c:5810 + msgid "flexible array member not at end of struct" + msgstr "membre flexible de tableau n'est pas à la fin du struct" + + #: c-decl.c:5812 + msgid "flexible array member in otherwise empty struct" + msgstr "membre flexible de tableau dans un autre struct vide" + + #: c-decl.c:5837 + #, c-format + msgid "duplicate member `%s'" + msgstr "membre « %s » apparaît en double" + + #: c-decl.c:5881 + msgid "union cannot be made transparent" + msgstr "union ne peut pas être faite de façon transparente" + + #. This enum is a named one that has been declared already. + #: c-decl.c:5975 + #, c-format + msgid "redeclaration of `enum %s'" + msgstr "redéclaration de «enum %s'" + + #: c-decl.c:6009 + msgid "enum defined inside parms" + msgstr "enum défini à l'intérieur des paramètres" + + #: c-decl.c:6042 + msgid "enumeration values exceed range of largest integer" + msgstr "valeurs d'énumération excède les bornes du plus grand entier" + + #: c-decl.c:6151 + #, c-format + msgid "enumerator value for `%s' not integer constant" + msgstr "valeur de l'énumérateur pour « %s » n'est pas une constante entière" + + #: c-decl.c:6164 + msgid "overflow in enumeration values" + msgstr "débordement dans les valeurs de l'énumération" + + #: c-decl.c:6169 + msgid "ISO C restricts enumerator values to range of `int'" + msgstr "ISO C restreint les valeurs de l'énumérateur aux bornes d'un « int »" + + #: c-decl.c:6252 + msgid "return type is an incomplete type" + msgstr "type retourné est d'un type incomplet" + + #: c-decl.c:6260 + msgid "return type defaults to `int'" + msgstr "le défaut choisi du type retourné est « int »" + + #: c-decl.c:6307 + #, c-format + msgid "no previous prototype for `%s'" + msgstr "aucun prototype précédent pour « %s »" + + #: c-decl.c:6314 + #, c-format + msgid "`%s' was used with no prototype before its definition" + msgstr "« %s » a été utilisé sans prototype avant sa définition" + + #: c-decl.c:6320 + #, c-format + msgid "no previous declaration for `%s'" + msgstr "aucune déclaration précédente pour « %s »" + + #: c-decl.c:6327 + #, c-format + msgid "`%s' was used with no declaration before its definition" + msgstr "« %s » a été utilisé sans déclaration avant sa définition" + + #: c-decl.c:6351 c-decl.c:6936 + #, c-format + msgid "return type of `%s' is not `int'" + msgstr "type retourné de « %s » n'est pas «int »" + + #: c-decl.c:6367 + #, c-format + msgid "first argument of `%s' should be `int'" + msgstr "premier argument de « %s » devrait être «int »" + + #: c-decl.c:6376 + #, c-format + msgid "second argument of `%s' should be `char **'" + msgstr "second argument de « %s » devrait être «char ** »" + + #: c-decl.c:6385 + #, c-format + msgid "third argument of `%s' should probably be `char **'" + msgstr "troisième argument de « %s » devrait probablement être «char ** »" + + #: c-decl.c:6394 + #, c-format + msgid "`%s' takes only zero or two arguments" + msgstr "« %s » prend seulement aucun OU deux arguments" + + #: c-decl.c:6397 + #, c-format + msgid "`%s' is normally a non-static function" + msgstr "« %s » est normalement une fonction non «static »" + + #: c-decl.c:6507 + msgid "parm types given both in parmlist and separately" + msgstr "type de paramètres à la fois donné dans la liste et séparément" + + #: c-decl.c:6528 + msgid "parameter name omitted" + msgstr "nom de paramètre a été omis" + + #: c-decl.c:6532 c-decl.c:6634 + #, c-format + msgid "parameter `%s' declared void" + msgstr "paramètre « %s » déclaré «void »" + + #: c-decl.c:6608 + msgid "parameter name missing from parameter list" + msgstr "nom du paramètre manquant dans la liste des paramètres" + + #: c-decl.c:6627 + #, c-format + msgid "multiple parameters named `%s'" + msgstr "multiples paramètres nommés « %s »" + + #: c-decl.c:6658 c-decl.c:6660 + #, c-format + msgid "type of `%s' defaults to `int'" + msgstr "type de « %s » utilisé par défaut est «int »" + + #: c-decl.c:6696 + #, c-format + msgid "declaration for parameter `%s' but no such parameter" + msgstr "déclaration du paramètre « %s » mais pas de tel paramètre" + + #: c-decl.c:6744 + msgid "number of arguments doesn't match prototype" + msgstr "nombre d'arguments ne concorde pas avec celui du prototype" + + #: c-decl.c:6774 + #, c-format + msgid "promoted argument `%s' doesn't match prototype" + msgstr "argument promu « %s » ne concorde pas avec celui du prototype" + + #: c-decl.c:6788 + #, c-format + msgid "argument `%s' doesn't match prototype" + msgstr "argument « %s » ne concorde pas avec celui du prototype" + + #: c-decl.c:6968 cp/decl.c:14327 + msgid "no return statement in function returning non-void" + msgstr "pas de déclaration « return » dans la fonction retournant un non void" + + #: c-decl.c:7124 + msgid "this function may return with or without a value" + msgstr "cette fonction peut ou ne peut pas retourner une valeur" + + #: c-decl.c:7144 + #, c-format + msgid "size of return value of `%s' is %u bytes" + msgstr "taille de la valeur retournée de « %s » est %u octets" + + #: c-decl.c:7148 + #, c-format + msgid "size of return value of `%s' is larger than %d bytes" + msgstr "taille de la valeur retournée de « %s » est plus grande que %d octets" + + #. If we get here, declarations have been used in a for loop without + #. the C99 for loop scope. This doesn't make much sense, so don't + #. allow it. + #: c-decl.c:7203 + msgid "`for' loop initial declaration used outside C99 mode" + msgstr "déclaration initiale de la boucle « for » utilisée en dehords du mode C99" + + #: c-decl.c:7227 + #, c-format + msgid "`struct %s' declared in `for' loop initial declaration" + msgstr "« struct %s» déclaré dans la déclaration initiale de la boucle «for »" + + #: c-decl.c:7230 + #, c-format + msgid "`union %s' declared in `for' loop initial declaration" + msgstr "« union %s» déclaré dans la déclaration initiale de la boucle «for »" + + #: c-decl.c:7233 + #, c-format + msgid "`enum %s' declared in `for' loop initial declaration" + msgstr "« enum %s» déclaré dans la déclaration initiale de la boucle «for »" + + #: c-decl.c:7241 + #, c-format + msgid "declaration of non-variable `%s' in `for' loop initial declaration" + msgstr "déclaration de « %s » qui n'est pas une variable dans la déclaration initiale de «for »" + + #: c-decl.c:7243 + #, c-format + msgid "declaration of static variable `%s' in `for' loop initial declaration" + msgstr "déclaration d'une variable « static» « %s » dans la déclaration initiale de la boucle «for »" + + #: c-decl.c:7245 + #, c-format + msgid "declaration of `extern' variable `%s' in `for' loop initial declaration" + msgstr "déclaration d'une variable « extern » « %s » dans la déclaration initiale «for »" + + #: c-format.c:128 c-format.c:210 + msgid "format string arg not a string type" + msgstr "l'argument de la chaîne de format n'est pas de type « string »" + + #: c-format.c:143 + msgid "args to be formatted is not '...'" + msgstr "arguments à être formattés ne sont pas « ... »" + + #: c-format.c:152 + msgid "strftime formats cannot format arguments" + msgstr "Les formats de strftime ne peuvent formater les arguments" + + #: c-format.c:187 c-format.c:289 + msgid "format string has invalid operand number" + msgstr "chaîne de format a un nombre invalide d'opérandes" + + #: c-format.c:221 + msgid "function does not return string type" + msgstr "fonction ne retourne pas un type « string »" + + #: c-format.c:252 + msgid "unrecognized format specifier" + msgstr "spécificateur de format non reconnu" + + #: c-format.c:265 + #, c-format + msgid "`%s' is an unrecognized format function type" + msgstr "« %s » a un format non reconnu de type de fonction" + + #: c-format.c:299 + msgid "format string arg follows the args to be formatted" + msgstr "l'argument de la chaîne de format suit les arguments devant être formattés" + + #: c-format.c:620 + msgid "` ' flag" + msgstr "fanion « »" + + #: c-format.c:620 + msgid "the ` ' printf flag" + msgstr "le fanion « » de printf" + + #: c-format.c:621 c-format.c:692 + msgid "`+' flag" + msgstr "fanion «+»" + + #: c-format.c:621 + msgid "the `+' printf flag" + msgstr "le fanion «+» de printf" + + #: c-format.c:622 c-format.c:668 + msgid "`#' flag" + msgstr "fanion «#»" + + #: c-format.c:622 + msgid "the `#' printf flag" + msgstr "le fanion «#» de printf" + + #: c-format.c:623 c-format.c:666 + msgid "`0' flag" + msgstr "fanion « 0 »" + + #: c-format.c:623 + msgid "the `0' printf flag" + msgstr "le fanion « 0 » de printf" + + #: c-format.c:624 c-format.c:665 c-format.c:695 + msgid "`-' flag" + msgstr "fanion « - »" + + #: c-format.c:624 + msgid "the `-' printf flag" + msgstr "le fanion « - » de printf" + + #: c-format.c:625 c-format.c:649 + msgid "`'' flag" + msgstr "fanion « ' »" + + #: c-format.c:625 + msgid "the `'' printf flag" + msgstr "le fanion « ' » de printf" + + #: c-format.c:626 c-format.c:650 + msgid "`I' flag" + msgstr "fanion « I »" + + #: c-format.c:626 + msgid "the `I' printf flag" + msgstr "le fanion « I » de printf" + + #: c-format.c:627 c-format.c:647 c-format.c:669 c-format.c:696 c-format.c:1790 + msgid "field width" + msgstr "largeur de champ" + + #: c-format.c:627 + msgid "field width in printf format" + msgstr "largeur de champ dans le format de printf" + + #: c-format.c:628 + msgid "precision" + msgstr "précision" + + #: c-format.c:628 + msgid "precision in printf format" + msgstr "précision dans le format de printf" + + #: c-format.c:629 c-format.c:648 c-format.c:699 + msgid "length modifier" + msgstr "longueur du modificateur" + + #: c-format.c:629 + msgid "length modifier in printf format" + msgstr "longueur du modificateur dans le format printf" + + #: c-format.c:645 + msgid "assignment suppression" + msgstr "suppression d'affectation" + + #: c-format.c:645 + msgid "the assignment suppression scanf feature" + msgstr "options de scanf pour la suppression d'affectation" + + #: c-format.c:646 + msgid "`a' flag" + msgstr "fanion « a »" + + #: c-format.c:646 + msgid "the `a' scanf flag" + msgstr "le fanion « a » de scanf" + + #: c-format.c:647 + msgid "field width in scanf format" + msgstr "largeur de champ dans le format de scanf" + + #: c-format.c:648 + msgid "length modifier in scanf format" + msgstr "longueur du modificateur dans le format de scanf" + + #: c-format.c:649 + msgid "the `'' scanf flag" + msgstr "la fanion « ' » de scanf" + + #: c-format.c:650 + msgid "the `I' scanf flag" + msgstr "le fanion « I » de scanf" + + #: c-format.c:664 + msgid "`_' flag" + msgstr "fanion « _ »" + + #: c-format.c:664 + msgid "the `_' strftime flag" + msgstr "le fanion « _ » de strftime" + + #: c-format.c:665 + msgid "the `-' strftime flag" + msgstr "le fanion « - » de strftime" + + #: c-format.c:666 + msgid "the `0' strftime flag" + msgstr "le fanion « 0 » de strftime" + + #: c-format.c:667 c-format.c:691 + msgid "`^' flag" + msgstr "fanion « ^ »" + + #: c-format.c:667 + msgid "the `^' strftime flag" + msgstr "la fanion « ^ » de strftime" + + #: c-format.c:668 + msgid "the `#' strftime flag" + msgstr "le fanion « # » de strftime" + + #: c-format.c:669 + msgid "field width in strftime format" + msgstr "largeur de champ dans le format de strftime" + + #: c-format.c:670 + msgid "`E' modifier" + msgstr "modificateur « E »" + + #: c-format.c:670 + msgid "the `E' strftime modifier" + msgstr "le modificateur « E » de strftime" + + #: c-format.c:671 + msgid "`O' modifier" + msgstr "modificateur « O »" + + #: c-format.c:671 + msgid "the `O' strftime modifier" + msgstr "le modificateur « O » de strftime" + + #: c-format.c:672 + msgid "the `O' modifier" + msgstr "le modificateur « O »" + + #: c-format.c:690 + msgid "fill character" + msgstr "caractère de remplissage" + + #: c-format.c:690 + msgid "fill character in strfmon format" + msgstr "caractère de remplissage dans le format de strfmon" + + #: c-format.c:691 + msgid "the `^' strfmon flag" + msgstr "le fanion «^» de strfmon" + + #: c-format.c:692 + msgid "the `+' strfmon flag" + msgstr "le fanion «+» de strfmon" + + #: c-format.c:693 + msgid "`(' flag" + msgstr "fanion «(»" + + #: c-format.c:693 + msgid "the `(' strfmon flag" + msgstr "le fanion «(» de strfmon" + + #: c-format.c:694 + msgid "`!' flag" + msgstr "fanion «!»" + + #: c-format.c:694 + msgid "the `!' strfmon flag" + msgstr "le fanion «!» de strfmon" + + #: c-format.c:695 + msgid "the `-' strfmon flag" + msgstr "le fanion «-» de strfmon" + + #: c-format.c:696 + msgid "field width in strfmon format" + msgstr "largeur de champ dans le format de strfmon" + + #: c-format.c:697 + msgid "left precision" + msgstr "précision de gauche" + + #: c-format.c:697 + msgid "left precision in strfmon format" + msgstr "précision de gauche dans le format de strfmon" + + #: c-format.c:698 + msgid "right precision" + msgstr "précision de droite" + + #: c-format.c:698 + msgid "right precision in strfmon format" + msgstr "précision de droite dans le format de strfmon" + + #: c-format.c:699 + msgid "length modifier in strfmon format" + msgstr "modificateur de longueur dans le format de strfmon" + + #: c-format.c:998 + #, c-format + msgid "function might be possible candidate for `%s' format attribute" + msgstr "fonction peut être un candidat possible pour l'attribut du format de « %s »" + + #: c-format.c:1122 c-format.c:1143 c-format.c:2200 + msgid "missing $ operand number in format" + msgstr "opérande $ de nombre manquant dans le format" + + #: c-format.c:1153 + #, c-format + msgid "%s does not support %%n$ operand number formats" + msgstr "%s ne supporte pas le format d'opérande de nombre %%n$" + + #: c-format.c:1160 + msgid "operand number out of range in format" + msgstr "opérande de nombre hors gamme dans le format" + + #: c-format.c:1183 + #, c-format + msgid "format argument %d used more than once in %s format" + msgstr "argument de format %d utilisé plus d'une fois dans le format %s" + + #: c-format.c:1233 + #, c-format + msgid "format argument %d unused before used argument %d in $-style format" + msgstr "argument de format %d inutilisé avant l'utilisation de l'argument %d dans le format $-style" + + #: c-format.c:1330 + msgid "format not a string literal, format string not checked" + msgstr "format n'est pas une chaîne de mots, chaîne du format n'est pas vérifée" + + #: c-format.c:1344 + msgid "format not a string literal and no format arguments" + msgstr "format n'est pas une chaîne de mots et pas d'arguments de format" + + #: c-format.c:1346 + msgid "format not a string literal, argument types not checked" + msgstr "format n'est pas une chaîne de mots, types d'arguments ne sont pas vérifiés" + + #: c-format.c:1359 + msgid "too many arguments for format" + msgstr "trop d'arguments pour le format" + + #: c-format.c:1362 + msgid "unused arguments in $-style format" + msgstr "arguments non utilisés dans le format $-style" + + #: c-format.c:1365 + msgid "zero-length format string" + msgstr "chaîne de longueur zéro dans le format" + + #: c-format.c:1368 + msgid "format is a wide character string" + msgstr "format est une longue chaîne de caractères" + + #: c-format.c:1371 + msgid "unterminated format string" + msgstr "chaîne de format non terminée" + + #. FIXME: this warning should go away once Marc Espie's + #. __attribute__((nonnull)) patch is in. Instead, checking for + #. nonnull attributes should probably change this function to act + #. specially if info == NULL and add a res->number_null entry for + #. that case, or maybe add a function pointer to be called at + #. the end instead of hardcoding check_format_info_main. + #: c-format.c:1478 + msgid "null format string" + msgstr "chaîne de format nulle" + + #: c-format.c:1669 + msgid "embedded `\\0' in format" + msgstr "«\\0» enchâssé dans le format" + + #: c-format.c:1684 + #, c-format + msgid "spurious trailing `%%' in format" + msgstr "faux caractères « %% » qui traînent dans le format" + + #: c-format.c:1723 c-format.c:1960 + #, c-format + msgid "repeated %s in format" + msgstr "%s répété dans le format" + + #: c-format.c:1736 + msgid "missing fill character at end of strfmon format" + msgstr "caractère de remplissage manquant à la fin du format strfmon" + + #: c-format.c:1756 c-format.c:1874 c-format.c:2154 c-format.c:2207 + msgid "too few arguments for format" + msgstr "trop peu d'arguments dans le format" + + #: c-format.c:1816 + #, c-format + msgid "zero width in %s format" + msgstr "largeur zéro dans le format %s" + + #: c-format.c:1835 + #, c-format + msgid "empty left precision in %s format" + msgstr "précision de gauche vide dans le format %s" + + #: c-format.c:1889 + msgid "field precision" + msgstr "champ de précision" + + #: c-format.c:1904 + #, c-format + msgid "empty precision in %s format" + msgstr "précision vide dans le format %s" + + #: c-format.c:1944 + #, c-format + msgid "%s does not support the `%s' %s length modifier" + msgstr "%s ne supporte pas « %s » %s comme modificateur de longueur" + + #: c-format.c:1994 + msgid "conversion lacks type at end of format" + msgstr "il manque un type pour la conversion à la fin du format" + + #: c-format.c:2005 + #, c-format + msgid "unknown conversion type character `%c' in format" + msgstr "type de caractère de conversion inconnu « %c » dans le format" + + #: c-format.c:2008 + #, c-format + msgid "unknown conversion type character 0x%x in format" + msgstr "type de caractère de conversion inconnu 0x%x dans le format" + + #: c-format.c:2015 + #, c-format + msgid "%s does not support the `%%%c' %s format" + msgstr "%s ne supporte pas le format «%%%c» %s" + + #: c-format.c:2031 + #, c-format + msgid "%s used with `%%%c' %s format" + msgstr "%s utilisé avec le format «%%%c» %s" + + #: c-format.c:2040 + #, c-format + msgid "%s does not support %s" + msgstr "%s ne supporte pas %s" + + #: c-format.c:2049 + #, c-format + msgid "%s does not support %s with the `%%%c' %s format" + msgstr "%s ne supporte pas %s avec le format «%%%c» %s " + + #: c-format.c:2082 + #, c-format + msgid "%s ignored with %s and `%%%c' %s format" + msgstr "%s ignoré avec %s et le format «%%%c» %s" + + #: c-format.c:2086 + #, c-format + msgid "%s ignored with %s in %s format" + msgstr "%s ignoré avec %s et le format %s" + + #: c-format.c:2092 + #, c-format + msgid "use of %s and %s together with `%%%c' %s format" + msgstr "utilisation de %s et de %s ensemble dans le format «%%%c» %s" + + #: c-format.c:2096 + #, c-format + msgid "use of %s and %s together in %s format" + msgstr "utilisation de %s et de %s ensemble dans le format %s" + + #: c-format.c:2115 + #, c-format + msgid "`%%%c' yields only last 2 digits of year in some locales" + msgstr "«%%%c» laisse seulement les 2 dernies chiffres de l'année dans certaines localisation" + + #: c-format.c:2118 + #, c-format + msgid "`%%%c' yields only last 2 digits of year" + msgstr "«%%%c» laisse seulement les 2 derniers chiffres de l'année" + + #. The end of the format string was reached. + #: c-format.c:2134 + #, c-format + msgid "no closing `]' for `%%[' format" + msgstr "pas de «]» de fermeture pour le format «%%[»" + + #: c-format.c:2147 + #, c-format + msgid "use of `%s' length modifier with `%c' type character" + msgstr "utilisation du modificateur de longueur « %s » avec le type de caractère « %c »" + + #: c-format.c:2168 + #, c-format + msgid "%s does not support the `%%%s%c' %s format" + msgstr "%s ne supporte par le format «%%%s%c» %s" + + #: c-format.c:2183 + msgid "operand number specified with suppressed assignment" + msgstr "nombre d'opérandes spécifié avec des affectations suprimées" + + #: c-format.c:2185 + msgid "operand number specified for format taking no argument" + msgstr "nombre d'opérandes spécifié pour un format n'acceptan aucun argument" + + #: c-format.c:2304 + #, c-format + msgid "writing through null pointer (arg %d)" + msgstr "écriture à travers un pointeur nul (arg %d)" + + #: c-format.c:2313 + #, c-format + msgid "reading through null pointer (arg %d)" + msgstr "lecture à l'aide d'un pointeur nul (arg %d)" + + #: c-format.c:2333 + #, c-format + msgid "writing into constant object (arg %d)" + msgstr "écriture dans une constante objet (arg %d)" + + #: c-format.c:2343 + #, c-format + msgid "extra type qualifiers in format argument (arg %d)" + msgstr "qualificateur de type additionnel dans l'argument du format (arg %d)" + + #: c-format.c:2350 + #, c-format + msgid "format argument is not a pointer (arg %d)" + msgstr "l'argument de format n'est pas un pointeur (arg %d)" + + #: c-format.c:2352 + #, c-format + msgid "format argument is not a pointer to a pointer (arg %d)" + msgstr "l'argument de format n'est pas un pointeur de pointeur (arg %d)" + + #: c-format.c:2423 + msgid "pointer" + msgstr "pointeur" + + #: c-format.c:2425 + msgid "different type" + msgstr "type différent" + + #: c-format.c:2446 + #, c-format + msgid "%s is not type %s (arg %d)" + msgstr "%s n'est pas de type %s (arg %d)" + + #: c-format.c:2449 + #, c-format + msgid "%s format, %s arg (arg %d)" + msgstr "format %s, arg %s (arg %d)" + + #: c-lex.c:298 + msgid "badly nested C headers from preprocessor" + msgstr "en-têtes C incorrectement imbriquées du préprocesseur" + + #: c-lex.c:348 + #, c-format + msgid "ignoring #pragma %s %s" + msgstr "#pragma ignoré %s %s" + + #: c-lex.c:350 + #, c-format + msgid "ignoring #pragma %s" + msgstr "#pragma ignoré %s" + + #: c-lex.c:400 + #, c-format + msgid "universal-character-name '\\U%08x' not valid in identifier" + msgstr "nom-de-caractère-universel invalide '\\U%08x» invalide dans l'identificcateur" + + #: c-lex.c:646 + #, c-format + msgid "universal-character-name '\\u%04x' not valid in identifier" + msgstr "nom-de-caractère-universel invalide '\\U%04x» invalide dans l'identificcateur" + + #: c-lex.c:736 + msgid "both 'f' and 'l' suffixes on floating constant" + msgstr "les suffixes « f » et « l » ensembles sur une constante flottante" + + #: c-lex.c:763 + #, c-format + msgid "floating point number exceeds range of '%s'" + msgstr "nombre flottant excède les limites de « %s »" + + #: c-lex.c:793 + #, c-format + msgid "stray '%c' in program" + msgstr "stray « %c » dans le programme" + + #: c-lex.c:795 + #, c-format + msgid "stray '\\%o' in program" + msgstr "stray '\\%o» dans le programme" + + #: c-lex.c:893 + msgid "too many decimal points in floating constant" + msgstr "trop de points décimaux dans la constante flottante" + + #: c-lex.c:895 + msgid "decimal point in exponent - impossible!" + msgstr "point décimal dans l'exposant - impossible!" + + #. Possible future extension: silently ignore _ in numbers, + #. permitting cosmetic grouping - e.g. 0x8000_0000 == 0x80000000 + #. but somewhat easier to read. Ada has this? + #: c-lex.c:906 + msgid "underscore in number" + msgstr "souligné présent dans le nombre" + + #: c-lex.c:968 + msgid "numeric constant with no digits" + msgstr "constante numérique sans chiffre" + + #: c-lex.c:971 + msgid "numeric constant contains digits beyond the radix" + msgstr "constante numérique contient des chiffres en dehors la base numérique" + + #: c-lex.c:982 + msgid "floating constant may not be in radix 16" + msgstr "constante flottante peut ne pas être en base 16" + + #: c-lex.c:985 + msgid "hexadecimal floating constant has no exponent" + msgstr "contante flottante hexadécimal n'a pas d'exposant" + + #: c-lex.c:997 + msgid "floating constant exponent has no digits" + msgstr "exposant de la constante flottante n'a pas de chiffre" + + #: c-lex.c:1017 + msgid "more than one 'f' suffix on floating constant" + msgstr "plus d'un « f » en suffixe sur une constante flottante" + + #: c-lex.c:1020 + msgid "traditional C rejects the 'f' suffix" + msgstr "C traditionnel rejette le suffixe « f »" + + #: c-lex.c:1027 + msgid "more than one 'l' suffix on floating constant" + msgstr "plus d'un « l » en suffixe sur une constante flottante" + + #: c-lex.c:1030 + msgid "traditional C rejects the 'l' suffix" + msgstr "C traditionnel rejette le suffixe « l »" + + #: c-lex.c:1038 + msgid "more than one 'i' or 'j' suffix on floating constant" + msgstr "plus d'un « i » ou « j » en suffixe sur une constante flottante" + + #: c-lex.c:1040 c-lex.c:1134 + msgid "ISO C forbids imaginary numeric constants" + msgstr "ISO C interdit les constante numérique de nombres imaginaires" + + #: c-lex.c:1045 + msgid "invalid suffix on floating constant" + msgstr "suffixe invalide pour une constante entière" + + #. We got an exception from parse_float() + #: c-lex.c:1062 + msgid "floating constant out of range" + msgstr "constante flottante est hors gamme" + + #: c-lex.c:1074 + msgid "floating point number exceeds range of 'double'" + msgstr "nombre en virgule flottante excède les limites de « double »" + + #: c-lex.c:1103 + msgid "two 'u' suffixes on integer constant" + msgstr "deux « u » en suffixe sur une constante entière" + + #: c-lex.c:1106 + msgid "traditional C rejects the 'u' suffix" + msgstr "C traditionnel rejette le suffixe « u »" + + #: c-lex.c:1117 + msgid "three 'l' suffixes on integer constant" + msgstr "trois « l » en suffixe sur une constante entière" + + #: c-lex.c:1119 + msgid "'lul' is not a valid integer suffix" + msgstr "'lul» n'est pas un suffixe valide pour un entier" + + #: c-lex.c:1121 + msgid "'Ll' and 'lL' are not valid integer suffixes" + msgstr "« Ll» et «1L » ne sont pas des suffixes valides pour un entier" + + #: c-lex.c:1124 + msgid "ISO C89 forbids long long integer constants" + msgstr "ISO C89 interdit les constantes entières de type long long" + + #: c-lex.c:1132 + msgid "more than one 'i' or 'j' suffix on integer constant" + msgstr "plus d'un « i » ou « j » en suffixe sur une constante entière" + + #: c-lex.c:1139 + msgid "invalid suffix on integer constant" + msgstr "suffixe invalide pour une constante entière" + + #: c-lex.c:1147 + #, c-format + msgid "integer constant is too large for this configuration of the compiler - truncated to %d bits" + msgstr "constante entière trop grande pour la configuration du compilateur - tronqué à %d bits" + + #: c-lex.c:1237 + msgid "width of integer constant changes with -traditional" + msgstr "largeur de la constante entière change avec -traditional" + + #: c-lex.c:1239 + msgid "integer constant is unsigned in ISO C, signed with -traditional" + msgstr "constante entìère est non signée en ISO C, signé avec -traditional" + + #: c-lex.c:1241 + msgid "width of integer constant may change on other systems with -traditional" + msgstr "largeur de la constante entière peut changer sur d'autres système avec -traditional" + + #: c-lex.c:1251 + #, c-format + msgid "integer constant larger than the maximum value of %s" + msgstr "constante entière plus grande que la valeur maximale de %s" + + #: c-lex.c:1254 + msgid "an unsigned long long int" + msgstr "un entier long long non signé" + + #: c-lex.c:1255 + msgid "a long long int" + msgstr "un entier long long" + + #: c-lex.c:1256 + msgid "an unsigned long int" + msgstr "un entier long non signé" + + #: c-lex.c:1260 + msgid "decimal constant is so large that it is unsigned" + msgstr "constante décimale est tellement grande qu'elle est non signée" + + #: c-lex.c:1269 + msgid "complex integer constant is too wide for 'complex int'" + msgstr "constante complexe entière est trop grande pour le type 'complex int'" + + #: c-lex.c:1289 + msgid "integer constant is larger than the maximum value for its type" + msgstr "constante entière est plus grande que la valeur maximale pour ce type" + + #: c-lex.c:1293 + #, c-format + msgid "missing white space after number '%.*s'" + msgstr "espace blanc manquant après le nombre '%.*s'" + + #: c-lex.c:1329 cpplex.c:1873 + msgid "ignoring invalid multibyte character" + msgstr "caractère multioctet invalide ignoré" + + #. Like YYERROR but do call yyerror. + #: c-parse.y:56 parse.y:51 objc-parse.y:57 + msgid "syntax error" + msgstr "erreur de syntaxes" + + #: /usr/share/bison/bison.simple:176 /usr/share/bison.simple:112 + msgid "syntax error: cannot back up" + msgstr "erreur de syntaxe: ne reculer en arrière" + + #: c-parse.y:288 objc-parse.y:310 + msgid "ISO C forbids an empty source file" + msgstr "ISO C interdit un fichier source vide" + + #: c-parse.y:321 c-typeck.c:6895 objc-parse.y:343 + msgid "argument of `asm' is not a constant string" + msgstr "argument de « asm » n'est pas une chaîne de constante" + + #: c-parse.y:329 objc-parse.y:351 + msgid "ISO C forbids data definition with no type or storage class" + msgstr "ISO C interdit la définition de données sans type ou classe de stockage" + + #: c-parse.y:331 objc-parse.y:353 + msgid "data definition has no type or storage class" + msgstr "définition de données n'a pas de type ou de classe de stockage" + + #: c-parse.y:344 objc-parse.y:366 + msgid "ISO C does not allow extra `;' outside of a function" + msgstr "ISO C ne permet pas de «;» additionnel en dehors d'une fonction" + + #: c-parse.y:404 cppexp.c:693 + msgid "traditional C rejects the unary plus operator" + msgstr "C traditionnel rejette l'opérateur unaire +" + + #: c-parse.y:466 objc-parse.y:488 + msgid "`sizeof' applied to a bit-field" + msgstr "« sizeof » appliqué à un champ de bits" + + #: c-parse.y:546 objc-parse.y:568 + msgid "ISO C forbids omitting the middle term of a ?: expression" + msgstr "ISO C interdit l'omission du terme milieu de l'expression ?:" + + #: c-parse.y:593 objc-parse.y:615 + msgid "ISO C89 forbids compound literals" + msgstr "ISO C89 interdit les mots composés" + + #: c-parse.y:607 objc-parse.y:629 + msgid "ISO C forbids braced-groups within expressions" + msgstr "ISO C interdit les groupes d'accolades à l'intérieur d'expressions" + + #: c-parse.y:638 objc-parse.y:660 + msgid "first argument to __builtin_choose_expr not a constant" + msgstr "premier argument de « __builtin_choose_expr » n'est pas une constante" + + #: c-parse.y:681 + msgid "traditional C rejects string concatenation" + msgstr "C traditionel rejette la concaténation de chaînes" + + #: c-parse.y:696 objc-parse.y:732 + msgid "ISO C does not permit use of `varargs.h'" + msgstr "ISO C ne permet pas l'usage de « varargs.h »" + + #: c-parse.y:957 c-parse.y:963 c-parse.y:969 c-parse.y:975 c-parse.y:996 c-parse.y:1002 c-parse.y:1008 c-parse.y:1014 c-parse.y:1047 c-parse.y:1053 c-parse.y:1059 c-parse.y:1065 c-parse.y:1110 c-parse.y:1116 c-parse.y:1122 c-parse.y:1128 parse.y:1907 parse.y:1914 parse.y:1949 objc-parse.y:993 objc-parse.y:999 objc-parse.y:1005 objc-parse.y:1011 objc-parse.y:1032 objc-parse.y:1038 objc-parse.y:1044 objc-parse.y:1050 objc-parse.y:1083 objc-parse.y:1089 objc-parse.y:1095 objc-parse.y:1101 objc-parse.y:1146 objc-parse.y:1152 objc-parse.y:1158 objc-parse.y:1164 + #, c-format + msgid "`%s' is not at beginning of declaration" + msgstr "« %s » n'est pas au début de la déclaration" + + #: c-parse.y:1410 objc-parse.y:1455 + msgid "ISO C forbids empty initializer braces" + msgstr "ISO C interdit les accolades vides d'initialiseurs" + + #: c-parse.y:1424 objc-parse.y:1469 + msgid "ISO C89 forbids specifying subobject to initialize" + msgstr "ISO C89 interdit la spécification d'objets à initialiser" + + #: c-parse.y:1427 objc-parse.y:1472 + msgid "obsolete use of designated initializer without `='" + msgstr "utilisation obsolète de l'initialisateur désigné sans «=»" + + #: c-parse.y:1431 objc-parse.y:1476 + msgid "obsolete use of designated initializer with `:'" + msgstr "utilisation obsolète d'un initialiseur désigné avec «:»" + + #: c-parse.y:1460 + msgid "ISO C forbids specifying range of elements to initialize" + msgstr "ISO C interdit de spécifier les bornes des éléments à initaliser" + + #: c-parse.y:1468 c-parse.y:1498 objc-parse.y:1507 objc-parse.y:1537 + msgid "ISO C forbids nested functions" + msgstr "ISO C interdit les fonctions imbriquées" + + #: c-parse.y:1672 objc-parse.y:1713 + msgid "ISO C forbids forward references to `enum' types" + msgstr "ISO C interdit les références avant vers un type « enum »" + + #: c-parse.y:1684 parse.y:2364 objc-parse.y:1725 + msgid "comma at end of enumerator list" + msgstr "virgule à la fin de liste d'énumerateurs" + + #: c-parse.y:1692 objc-parse.y:1733 + msgid "no semicolon at end of struct or union" + msgstr "pas de point virgule à la fin du struct ou de l'union" + + #: c-parse.y:1701 objc-parse.y:1742 objc-parse.y:2819 + msgid "extra semicolon in struct or union specified" + msgstr "point virgule superflu dans le struct ou l'union spécifié" + + #: c-parse.y:1714 objc-parse.y:1769 + msgid "ISO C doesn't support unnamed structs/unions" + msgstr "ISO C ne supporte pas les structs/unions sans nom" + + #: c-parse.y:1723 objc-parse.y:1778 + msgid "ISO C forbids member declarations with no members" + msgstr "ISO C interdit la déclaration de membre sans aucun membre" + + #: c-parse.y:1872 c-parse.y:1876 c-parse.y:1880 objc-parse.y:1927 objc-parse.y:1931 objc-parse.y:1935 + msgid "storage class specifier in array declarator" + msgstr "spécificateur de classe de stockage dans le déclarateur de tableau" + + #: c-parse.y:1895 objc-parse.y:1950 + msgid "deprecated use of label at end of compound statement" + msgstr "utilisation déprécié d'étiquette à la fin de la déclaration composée" + + #: c-parse.y:1912 objc-parse.y:1967 + msgid "ISO C89 forbids mixed declarations and code" + msgstr "ISO C89 interdit les déclarations mélangés et de code" + + #: c-parse.y:1986 objc-parse.y:2045 + msgid "ISO C forbids label declarations" + msgstr "ISO C interdit la déclaration d'étiquette" + + #: c-parse.y:2035 parse.y:1607 objc-parse.y:2094 + msgid "braced-group within expression allowed only inside a function" + msgstr "groupe d'accolades à l'intérieur d'expression permis seulement à l'intérieur d'une fonction" + + #: c-parse.y:2161 objc-parse.y:2220 + msgid "empty body in an else-statement" + msgstr "corps vide de la déclaration du else" + + #: c-parse.y:2281 objc-parse.y:2340 + msgid "ISO C forbids `goto *expr;'" + msgstr "ISO C interdit « goto *expr; »" + + #: c-parse.y:2379 objc-parse.y:2438 + msgid "ISO C forbids forward parameter declarations" + msgstr "ISO C interdit la déclaration de paramètres vers l'avant" + + #. Gcc used to allow this as an extension. However, it does + #. not work for all targets, and thus has been disabled. + #. Also, since func (...) and func () are indistinguishable, + #. it caused problems with the code in expand_builtin which + #. tries to verify that BUILT_IN_NEXT_ARG is being used + #. correctly. + #: c-parse.y:2405 objc-parse.y:2464 + msgid "ISO C requires a named argument before `...'" + msgstr "ISO C requiert un argument nommé devant « ... »" + + #: c-parse.y:2500 objc-parse.y:2559 + msgid "`...' in old-style identifier list" + msgstr "« ... » dans une liste d'identificateurs de style ancien" + + #: /usr/share/bison/bison.simple:821 + msgid "parse error; also virtual memory exhausted" + msgstr "erreur d'analyse syntaxique; de plus la mémoire virtuelle est épuisée" + + #: /usr/share/bison/bison.simple:825 cp/spew.c:343 /usr/share/bison.simple:654 + msgid "parse error" + msgstr "erreur d'analyse syntaxique" + + #: /usr/share/bison/bison.simple:950 /usr/share/bison.simple:367 + msgid "parser stack overflow" + msgstr "débordement de la pile de l'analyseur syntaxique" + + #: c-parse.y:2824 cp/spew.c:1477 objc-parse.y:3511 + #, c-format + msgid "%s at end of input" + msgstr "%s à la fin de l'entrée" + + #: c-parse.y:2830 cp/spew.c:1483 objc-parse.y:3517 + #, c-format + msgid "%s before %s'%c'" + msgstr "%s avant %s« %c »" + + #: c-parse.y:2832 cp/spew.c:1485 objc-parse.y:3519 + #, c-format + msgid "%s before %s'\\x%x'" + msgstr "%s avant %s'\\x%x'" + + #: c-parse.y:2836 cp/spew.c:1489 objc-parse.y:3523 + #, c-format + msgid "%s before string constant" + msgstr "%s avant la constante chaîne" + + #: c-parse.y:2838 cp/spew.c:1491 objc-parse.y:3525 + #, c-format + msgid "%s before numeric constant" + msgstr "%s avant la constante numérique" + + #: c-parse.y:2840 objc-parse.y:3527 + #, c-format + msgid "%s before \"%s\"" + msgstr "%s avant « %s »" + + #: c-parse.y:2842 objc-parse.y:3529 + #, c-format + msgid "%s before '%s' token" + msgstr "%s avant le jeton « %s »" + + #: c-parse.y:2978 objc-parse.y:3708 + #, c-format + msgid "syntax error at '%s' token" + msgstr "erreur de syntaxe au jeton « %s »" + + #: c-parse.y:3008 cp/lex.c:906 objc-parse.y:3738 + msgid "YYDEBUG not defined" + msgstr "YYDEBUG n'est pas défini" + + #: c-pragma.c:109 + msgid "#pragma pack (pop) encountered without matching #pragma pack (push, )" + msgstr "#pragma pack (pop) rencontré sans #pragma pack (push, ) concordant" + + #: c-pragma.c:127 + #, c-format + msgid "#pragma pack(pop, %s) encountered without matching #pragma pack(push, %s, )" + msgstr "#pragma pack(pop, %s) rencontré sans #pragma pack(push, %s, ) concordant" + + #: c-pragma.c:162 + msgid "#pragma pack(push[, id], ) is not supported on this target" + msgstr "#pragma pack(push[, id], ) n'est pas supporté sur cette cible" + + #: c-pragma.c:164 + msgid "#pragma pack(pop[, id], ) is not supported on this target" + msgstr "#pragma pack(pop[, id], ) n'est pas supporté sur cette cible" + + #: c-pragma.c:184 + msgid "missing '(' after '#pragma pack' - ignored" + msgstr "«(» manquante après «#pragma pack» - ignoré" + + #: c-pragma.c:197 c-pragma.c:247 + msgid "malformed '#pragma pack' - ignored" + msgstr "«#pragma pack» mal composé - ignoré" + + #: c-pragma.c:202 + msgid "malformed '#pragma pack(push[, id], )' - ignored" + msgstr "«#pragma pack(push[, id], )» mal composé - ignoré" + + #: c-pragma.c:204 + msgid "malformed '#pragma pack(pop[, id])' - ignored" + msgstr "«#pragma pack(pop[, id])» mal composé, ignoré" + + #: c-pragma.c:213 + #, c-format + msgid "unknown action '%s' for '#pragma pack' - ignored" + msgstr "« %s » action inconnue pour «#pragma pack» - ignoré" + + #: c-pragma.c:250 + msgid "junk at end of '#pragma pack'" + msgstr "rebut à la fin de «#pragma pack»" + + #: c-pragma.c:264 + #, c-format + msgid "alignment must be a small power of two, not %d" + msgstr "l'alignement doit être une puissance faible de 2, pas %d" + + #: c-pragma.c:329 c-pragma.c:334 + msgid "malformed #pragma weak, ignored" + msgstr "#pragma weak mal composé, ignoré" + + #: c-pragma.c:338 + msgid "junk at end of #pragma weak" + msgstr "rebut à la fin de #pragma weak" + + #: c-pragma.c:369 c-pragma.c:374 + msgid "malformed #pragma redefine_extname, ignored" + msgstr "#pragma redefine_extname mal composé, ignoré" + + #: c-pragma.c:379 + msgid "junk at end of #pragma redefine_extname" + msgstr "rebut à la fin de #pragma redefine_extname" + + #: c-pragma.c:386 c-pragma.c:461 + msgid "#pragma redefine_extname conflicts with declaration" + msgstr "#pragma redefine_extname en conflit avec la déclaration" + + #: c-pragma.c:410 + msgid "malformed #pragma extern_prefix, ignored" + msgstr "#pragma extern_prefix mal composé, ignoré" + + #: c-pragma.c:415 + msgid "junk at end of #pragma extern_prefix" + msgstr "rebut à la fin de #pragma extern_prefix" + + #: c-pragma.c:447 + msgid "asm declaration conficts with previous rename" + msgstr "déclaration asm en conflit avec le changement de nom précédent" + + #: c-semantics.c:563 + msgid "break statement not within loop or switch" + msgstr "déclaration de « break» n'est pas à l'intérieur d'une boucle ou d'un «switch »" + + #: c-semantics.c:581 + msgid "continue statement not within a loop" + msgstr "déclaration de « continue » n'est pas à l'intérieur d'une boucle" + + #: c-semantics.c:676 + msgid "destructor needed for `%#D'" + msgstr "destructeur requis pour «%#D»'" + + #: c-semantics.c:677 + msgid "where case label appears here" + msgstr "où les étiquettes de « case » apparaissent ici" + + #: c-semantics.c:680 + msgid "(enclose actions of previous case statements requiring destructors in their own scope.)" + msgstr "(les actions enfermées du case précédent de la déclaration requiert des destructeurs dans leur propre champ.)" + + #: c-semantics.c:723 c-typeck.c:6923 cp/semantics.c:889 + #, c-format + msgid "%s qualifier ignored on asm" + msgstr "%s qualificateur ignoré avec asm" + + #: c-typeck.c:123 + #, c-format + msgid "`%s' has an incomplete type" + msgstr "« %s » a un type incomplet" + + #: c-typeck.c:145 cp/call.c:2621 + msgid "invalid use of void expression" + msgstr "utilisation de l'expression voir invalide" + + #: c-typeck.c:153 + msgid "invalid use of flexible array member" + msgstr "utilisation invalide d'un membre de tableau flexible" + + #: c-typeck.c:159 cp/typeck2.c:227 + msgid "invalid use of array with unspecified bounds" + msgstr "utilisation invalide d'un tableau avec bornes non spécifiées" + + #: c-typeck.c:167 + #, c-format + msgid "invalid use of undefined type `%s %s'" + msgstr "utilisation invalide d'un type indéfini «%s %s»" + + #. If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. + #: c-typeck.c:171 + #, c-format + msgid "invalid use of incomplete typedef `%s'" + msgstr "utilisation invalide d'un typedef incomplet « %s »" + + #: c-typeck.c:402 c-typeck.c:416 + msgid "function types not truly compatible in ISO C" + msgstr "types de fonction ne sont pas vraiment compatibles en ISO C" + + #: c-typeck.c:576 + msgid "types are not quite compatible" + msgstr "types ne sont pas très compatibles" + + #: c-typeck.c:729 + msgid "sizeof applied to a function type" + msgstr "sizeof appliqué sur un type de fonction" + + #: c-typeck.c:735 + msgid "sizeof applied to a void type" + msgstr "sizeof appliqué sur un type void" + + #: c-typeck.c:742 + msgid "sizeof applied to an incomplete type" + msgstr "sizeof appliqué sur un type incomplet" + + #: c-typeck.c:795 c-typeck.c:2704 + msgid "arithmetic on pointer to an incomplete type" + msgstr "arithmétique sur un pointeur appliqué sur un type incomplet" + + #: c-typeck.c:1183 + #, c-format + msgid "%s has no member named `%s'" + msgstr "%s n'a pas de membre nommé « %s »" + + #: c-typeck.c:1216 + #, c-format + msgid "request for member `%s' in something not a structure or union" + msgstr "requête pour le membre « %s » dans quelque chose qui n'est pas une structure ou un union" + + #: c-typeck.c:1248 + msgid "dereferencing pointer to incomplete type" + msgstr "déréférence d'un pointeur en un type incomplet" + + #: c-typeck.c:1252 + msgid "dereferencing `void *' pointer" + msgstr "déréférence d'un pointeur « void * »" + + #: c-typeck.c:1269 cp/typeck.c:2347 + #, c-format + msgid "invalid type argument of `%s'" + msgstr "type d'argument invalide pour « %s »" + + #: c-typeck.c:1288 cp/typeck.c:2373 + msgid "subscript missing in array reference" + msgstr "souscript manquant dans la référence du tableau" + + #: c-typeck.c:1309 cp/typeck.c:2415 + msgid "array subscript has type `char'" + msgstr "souscript de tableau a un type « char »" + + #: c-typeck.c:1317 c-typeck.c:1406 cp/typeck.c:2422 cp/typeck.c:2501 + msgid "array subscript is not an integer" + msgstr "souscript de tableau n'est pas un entier" + + #: c-typeck.c:1350 + msgid "ISO C forbids subscripting `register' array" + msgstr "ISO C interdit le souscriptage de type « register » de tableau" + + #: c-typeck.c:1352 + msgid "ISO C89 forbids subscripting non-lvalue array" + msgstr "ISO C89 interdit le souscriptage de tableau non lvalue" + + #: c-typeck.c:1385 + msgid "subscript has type `char'" + msgstr "souscript a un type « char »" + + #: c-typeck.c:1401 cp/typeck.c:2496 + msgid "subscripted value is neither array nor pointer" + msgstr "valeur sourcripté n'est ni un tableau ni un pointeur" + + #: c-typeck.c:1455 + #, c-format + msgid "`%s' undeclared here (not in a function)" + msgstr "« %s » non déclaré ici (n'est pas dans une fonction)" + + #: c-typeck.c:1462 + #, c-format + msgid "`%s' undeclared (first use in this function)" + msgstr "« %s » non déclaré (première utilisation dans cette fonction)" + + #: c-typeck.c:1467 + msgid "(Each undeclared identifier is reported only once" + msgstr "(Chaque identificateur non déclaré est rapporté une seule fois" + + #: c-typeck.c:1468 + msgid "for each function it appears in.)" + msgstr "pour chaque fonction dans laquelle il apparaît.)" + + #: c-typeck.c:1485 + #, c-format + msgid "local declaration of `%s' hides instance variable" + msgstr "la déclaration locale de « %s » cache l'instance d'une variable" + + #: c-typeck.c:1550 + msgid "called object is not a function" + msgstr "objet appelé n'est pas une fonction" + + #: c-typeck.c:1637 cp/typeck.c:3133 + msgid "too many arguments to function" + msgstr "trop d'arguments pour la fonction" + + #: c-typeck.c:1658 + #, c-format + msgid "type of formal parameter %d is incomplete" + msgstr "type de paramètre formel %d est incomplet" + + #: c-typeck.c:1671 + #, c-format + msgid "%s as integer rather than floating due to prototype" + msgstr "%s est entier plutôt que flottant en raison du prototype" + + #: c-typeck.c:1674 + #, c-format + msgid "%s as integer rather than complex due to prototype" + msgstr "%s est entier plutôt que complexe en raison du prototype" + + #: c-typeck.c:1677 + #, c-format + msgid "%s as complex rather than floating due to prototype" + msgstr "%s est complexe plutôt que flottant en raison du prototype" + + #: c-typeck.c:1680 + #, c-format + msgid "%s as floating rather than integer due to prototype" + msgstr "%s est flottant plutôt qu'entier en raison du prototype" + + #: c-typeck.c:1683 + #, c-format + msgid "%s as complex rather than integer due to prototype" + msgstr "%s est complexe plutôt qu'entier en raison du prototype" + + #: c-typeck.c:1686 + #, c-format + msgid "%s as floating rather than complex due to prototype" + msgstr "%s est flottant plutôt que complexe en raison du prototype" + + #: c-typeck.c:1696 + #, c-format + msgid "%s as `float' rather than `double' due to prototype" + msgstr "%s est « float» plutôt que «double » en raison du prototype" + + #: c-typeck.c:1714 + #, c-format + msgid "%s with different width due to prototype" + msgstr "%s a une largeur différente en raison du prototype" + + #: c-typeck.c:1748 + #, c-format + msgid "%s as unsigned due to prototype" + msgstr "%s est non signé en raison du prototype" + + #: c-typeck.c:1750 + #, c-format + msgid "%s as signed due to prototype" + msgstr "%s est signé en raison du prototype" + + #: c-typeck.c:1784 cp/typeck.c:3241 + msgid "too few arguments to function" + msgstr "trop peu d'arguments pour la fonction" + + #: c-typeck.c:1826 + msgid "suggest parentheses around + or - inside shift" + msgstr "parenthèses suggérées autour de + ou - à l'intérieur du décalage" + + #: c-typeck.c:1833 + msgid "suggest parentheses around && within ||" + msgstr "parenthèses suggérées autour de && à l'intérieur de ||" + + #: c-typeck.c:1842 + msgid "suggest parentheses around arithmetic in operand of |" + msgstr "parenthèses suggérées autour de l'arithmétique dans l'opérande |" + + #: c-typeck.c:1845 + msgid "suggest parentheses around comparison in operand of |" + msgstr "parenthèses suggérées autour de la comparaison dans l'opérande |" + + #: c-typeck.c:1854 + msgid "suggest parentheses around arithmetic in operand of ^" + msgstr "parenthèses suggérées autour de l'arithmétique dans l'opérande ^" + + #: c-typeck.c:1857 + msgid "suggest parentheses around comparison in operand of ^" + msgstr "parenthèses suggérées autour de la comparaison dans l'opérande ^" + + #: c-typeck.c:1864 + msgid "suggest parentheses around + or - in operand of &" + msgstr "parenthèses suggérées autour de + ou - dans l'opérande &" + + #: c-typeck.c:1867 + msgid "suggest parentheses around comparison in operand of &" + msgstr "parenthèses suggérées autour de la comparaison dans l'opérande &" + + #: c-typeck.c:1874 + msgid "comparisons like X<=Y<=Z do not have their mathematical meaning" + msgstr "comparaisons comme X<=Y<=Z n'ont pas de signification mathématique" + + #: c-typeck.c:2034 c-typeck.c:2067 + msgid "division by zero" + msgstr "division par zéro" + + #: c-typeck.c:2112 cp/typeck.c:3502 + msgid "right shift count is negative" + msgstr "compteur de décalage à droite est négatif" + + #: c-typeck.c:2119 cp/typeck.c:3508 + msgid "right shift count >= width of type" + msgstr "compteur de décalage à droite >= à la largeur du type" + + #: c-typeck.c:2144 cp/typeck.c:3527 + msgid "left shift count is negative" + msgstr "compteur de décalage à gauche est négatif" + + #: c-typeck.c:2147 cp/typeck.c:3529 + msgid "left shift count >= width of type" + msgstr "compteur de décalage à gauche >= à la largeur du type" + + #: c-typeck.c:2172 + msgid "shift count is negative" + msgstr "compteur de décalage est négatif" + + #: c-typeck.c:2174 + msgid "shift count >= width of type" + msgstr "compteur de décalage >= à la largeur du type" + + #: c-typeck.c:2195 cp/typeck.c:3564 + msgid "comparing floating point with == or != is unsafe" + msgstr "comparaison d'un nombre flottant à l'aide de == ou != n'est pas sûre" + + #: c-typeck.c:2219 c-typeck.c:2225 + msgid "ISO C forbids comparison of `void *' with function pointer" + msgstr "ISO C interdit la comparaison de « void * » avec un pointeur de fonction pointer" + + #: c-typeck.c:2228 c-typeck.c:2270 c-typeck.c:2298 + msgid "comparison of distinct pointer types lacks a cast" + msgstr "comparaison entre des types distincs de pointeur manque de transtypage" + + #: c-typeck.c:2243 c-typeck.c:2249 c-typeck.c:2319 c-typeck.c:2325 + msgid "comparison between pointer and integer" + msgstr "comparaison entre un pointeur et un entier" + + #: c-typeck.c:2265 c-typeck.c:2293 + msgid "ISO C forbids ordered comparisons of pointers to functions" + msgstr "ISO C interdit les comparaisons ordonnées de pointeurs à des fonctions" + + #: c-typeck.c:2290 + msgid "comparison of complete and incomplete pointers" + msgstr "comparaison de pointeurs complet et incomplet" + + #: c-typeck.c:2306 c-typeck.c:2313 + msgid "ordered comparison of pointer with integer zero" + msgstr "comparaison ordonné de pointeur avec un entier zéro" + + #: c-typeck.c:2339 cp/typeck.c:3697 + msgid "unordered comparison on non-floating point argument" + msgstr "comparaison non ordonné sur un argument qui n'est pas en virgule flottante" + + #: c-typeck.c:2543 + msgid "comparison between signed and unsigned" + msgstr "comparaison entre un signé et un non signé" + + #: c-typeck.c:2589 cp/typeck.c:3943 + msgid "comparison of promoted ~unsigned with constant" + msgstr "comparaison d'un non signé promu avec une constante" + + #: c-typeck.c:2597 cp/typeck.c:3951 + msgid "comparison of promoted ~unsigned with unsigned" + msgstr "comparaison d'un non signé promu avec un non signé" + + #: c-typeck.c:2656 + msgid "pointer of type `void *' used in subtraction" + msgstr "pointeur de type « void * » utilisé dans une soustraction" + + #: c-typeck.c:2658 + msgid "pointer to a function used in subtraction" + msgstr "pointeur vers un fonction utilisé dans une soustraction" + + #: c-typeck.c:2755 + msgid "wrong type argument to unary plus" + msgstr "type d'argument erroné pour l'unaire +" + + #: c-typeck.c:2766 + msgid "wrong type argument to unary minus" + msgstr "type d'argument erroné pour l'unaire -" + + #: c-typeck.c:2778 + msgid "ISO C does not support `~' for complex conjugation" + msgstr "ISO C ne supporte pas «~» pour une conjugaison complexe" + + #: c-typeck.c:2784 + msgid "wrong type argument to bit-complement" + msgstr "type d'argument erroné pour un complément de bit" + + #: c-typeck.c:2795 + msgid "wrong type argument to abs" + msgstr "type d'argument erroné pour abs" + + #: c-typeck.c:2807 + msgid "wrong type argument to conjugation" + msgstr "type d'argument erroné pour la conjugaison" + + #: c-typeck.c:2821 + msgid "wrong type argument to unary exclamation mark" + msgstr "type d'argument erroné pour l'unaire point d'exclamation" + + #: c-typeck.c:2864 + msgid "ISO C does not support `++' and `--' on complex types" + msgstr "ISO C ne supporte «++» et «--» sur les types complexes" + + #: c-typeck.c:2879 c-typeck.c:2911 + msgid "wrong type argument to increment" + msgstr "type d'argument erroné pour un incrément" + + #: c-typeck.c:2881 c-typeck.c:2913 + msgid "wrong type argument to decrement" + msgstr "type d'argument erroné pour un décrément" + + #: c-typeck.c:2902 + msgid "increment of pointer to unknown structure" + msgstr "incérment d'un pointeur vers une structure inconnue" + + #: c-typeck.c:2904 + msgid "decrement of pointer to unknown structure" + msgstr "décrément d'un pointeur vers une structure inconnue" + + #: c-typeck.c:3041 + msgid "ISO C forbids the address of a cast expression" + msgstr "ISO C interdit l'adresse d'une expression transtypée" + + #: c-typeck.c:3051 + msgid "invalid lvalue in unary `&'" + msgstr "lvalue invalide dans l'unaire «&»" + + #: c-typeck.c:3083 + #, c-format + msgid "attempt to take address of bit-field structure member `%s'" + msgstr "tentative de prise d'adresse du membre « %s » d'une structure de champ de bits" + + #: c-typeck.c:3192 c-typeck.c:4618 c-typeck.c:4634 c-typeck.c:4650 final.c:2981 final.c:2983 gcc.c:4462 rtl-error.c:121 tradcif.y:532 tradcpp.c:4134 config/cris/cris.c:515 cp/typeck.c:4650 java/expr.c:386 java/verify.c:1464 java/verify.c:1465 java/verify.c:1480 + #, c-format + msgid "%s" + msgstr "%s" + + #: c-typeck.c:3253 + msgid "ISO C forbids use of conditional expressions as lvalues" + msgstr "ISO C interdit l'utilisation d'expressions conditionnelles comme lvalue" + + #: c-typeck.c:3256 + msgid "ISO C forbids use of compound expressions as lvalues" + msgstr "ISO C interdit l'utilisation d'expressions composées comme lvalue" + + #: c-typeck.c:3259 + msgid "ISO C forbids use of cast expressions as lvalues" + msgstr "ISO C interdit l'utilisation de transtypage d'une expression comme lvalues" + + #: c-typeck.c:3276 + #, c-format + msgid "%s of read-only member `%s'" + msgstr "%s d'un membre en lecture seulement « %s »" + + #: c-typeck.c:3280 + #, c-format + msgid "%s of read-only variable `%s'" + msgstr "%s d'une variable en lecture seulement « %s »" + + #: c-typeck.c:3283 + #, c-format + msgid "%s of read-only location" + msgstr "%s d'une location en lecture seulement" + + #: c-typeck.c:3301 + #, c-format + msgid "cannot take address of bit-field `%s'" + msgstr "ne peut prendre l'adresse du champ de bits « %s »" + + #: c-typeck.c:3329 + #, c-format + msgid "global register variable `%s' used in nested function" + msgstr "variable registre globale « %s » utilisée dans une fonction imbriquée" + + #: c-typeck.c:3333 + #, c-format + msgid "register variable `%s' used in nested function" + msgstr "variable registre « %s » utilisée dans une fonction imbriquée" + + #: c-typeck.c:3340 + #, c-format + msgid "address of global register variable `%s' requested" + msgstr "adresse d'une variable registre globale « %s » requise" + + #: c-typeck.c:3352 + msgid "cannot put object with volatile field into register" + msgstr "ne peut mettre un objet avec un champ volatile dans un registre" + + #: c-typeck.c:3356 + #, c-format + msgid "address of register variable `%s' requested" + msgstr "adresse d'une variable registre « %s » requise" + + #: c-typeck.c:3464 + msgid "signed and unsigned type in conditional expression" + msgstr "type signé et non signé dans une expression conditionnelle" + + #: c-typeck.c:3471 + msgid "ISO C forbids conditional expr with only one void side" + msgstr "ISO C interdit une expression conditionnelle dont un seul côté est « void »" + + #: c-typeck.c:3487 c-typeck.c:3494 + msgid "ISO C forbids conditional expr between `void *' and function pointer" + msgstr "ISO C interdit une expression conditionnelle entre « void * » et un pointeur de fonction" + + #: c-typeck.c:3500 + msgid "pointer type mismatch in conditional expression" + msgstr "non concordance de type de pointeur dans un expression conditionnelle" + + #: c-typeck.c:3507 c-typeck.c:3517 + msgid "pointer/integer type mismatch in conditional expression" + msgstr "non concordance de type pointeur/entier dans une expression conditionnelle" + + #: c-typeck.c:3531 + msgid "type mismatch in conditional expression" + msgstr "non concordance de type dans une expression conditionnelle" + + #: c-typeck.c:3602 cp/typeck.c:4907 + msgid "left-hand operand of comma expression has no effect" + msgstr "l'opérande à gauche de la virgule dans l'expression n'a pas d'effet" + + #: c-typeck.c:3641 + msgid "cast specifies array type" + msgstr "le transtypage spécifie le type de tableau" + + #: c-typeck.c:3647 + msgid "cast specifies function type" + msgstr "le transtypage spécifie le type de fonction" + + #: c-typeck.c:3657 + msgid "ISO C forbids casting nonscalar to the same type" + msgstr "ISO C interdit le transtypage non scalaire au même type" + + #: c-typeck.c:3676 + msgid "ISO C forbids casts to union type" + msgstr "ISO C interdit le transtypage vers un type union" + + #: c-typeck.c:3692 + msgid "cast to union type from type not present in union" + msgstr "transtypage vers un type union d'un type non présent dans l'union" + + #: c-typeck.c:3743 + msgid "cast adds new qualifiers to function type" + msgstr "le transtypage ajoute un nouveau qualifacateur au type de la fonction" + + #. There are qualifiers present in IN_OTYPE that are not + #. present in IN_TYPE. + #: c-typeck.c:3748 + msgid "cast discards qualifiers from pointer target type" + msgstr "transtypage écarte les qualificateurs du type cible du pointeur" + + #: c-typeck.c:3763 + msgid "cast increases required alignment of target type" + msgstr "transtypage augmente l'alignement requis pour le type ciblé" + + #: c-typeck.c:3769 cp/typeck.c:5337 + msgid "cast from pointer to integer of different size" + msgstr "transtypage d'un pointeur vers un entier de taille différente" + + #: c-typeck.c:3774 + msgid "cast does not match function type" + msgstr "transtypage ne concorde pas avec le type de la fonction" + + #: c-typeck.c:3781 cp/typeck.c:5344 + msgid "cast to pointer from integer of different size" + msgstr "transtypage vers un pointeur d'un entier de taille différente" + + #. Now we have handled acceptable kinds of LHS that are not truly lvalues. + #. Reject anything strange now. + #: c-typeck.c:3939 + msgid "invalid lvalue in assignment" + msgstr "lvalue invalide dans l'affectation" + + #. Convert new value to destination type. + #: c-typeck.c:3948 c-typeck.c:3973 c-typeck.c:3990 cp/typeck.c:5454 cp/typeck.c:5605 + msgid "assignment" + msgstr "affectation" + + #: c-typeck.c:4157 c-typeck.c:4224 + #, c-format + msgid "%s makes qualified function pointer from unqualified" + msgstr "%s a rendu un pointeur de fonction qualifié à partir d'un non qualifié" + + #: c-typeck.c:4161 c-typeck.c:4204 + #, c-format + msgid "%s discards qualifiers from pointer target type" + msgstr "%s écarte le qualificateur du type du pointeur cible" + + #: c-typeck.c:4167 + msgid "ISO C prohibits argument conversion to union type" + msgstr "ISO C interdit la conversion d'argument pour un type union" + + #: c-typeck.c:4196 + #, c-format + msgid "ISO C forbids %s between function pointer and `void *'" + msgstr "ISO C interdit %s entre le pointeur de fonction et « void * »" + + #: c-typeck.c:4213 + #, c-format + msgid "pointer targets in %s differ in signedness" + msgstr "pointeurs ciblés dans %s diffèrent au niveau du signe" + + #: c-typeck.c:4229 + #, c-format + msgid "%s from incompatible pointer type" + msgstr "%s d'un type pointeur incompatible" + + #: c-typeck.c:4245 + #, c-format + msgid "%s makes pointer from integer without a cast" + msgstr "%s transforme en pointeur un entier sans transtypage" + + #: c-typeck.c:4253 + #, c-format + msgid "%s makes integer from pointer without a cast" + msgstr "%s transforme en entier un pointeur sans transtypage" + + #: c-typeck.c:4267 c-typeck.c:4270 + #, c-format + msgid "incompatible type for argument %d of `%s'" + msgstr "type incompatible pour l'argument %d de « %s »" + + #: c-typeck.c:4274 + #, c-format + msgid "incompatible type for argument %d of indirect function call" + msgstr "type incompatible pour l'argument %d de l'appel indirect de fonction" + + #: c-typeck.c:4278 + #, c-format + msgid "incompatible types in %s" + msgstr "type incompatibles dans %s" + + #. Function name is known; supply it. + #: c-typeck.c:4333 + #, c-format + msgid "passing arg %d of `%s'" + msgstr "passage de arg %d de « %s »" + + #. Function name unknown (call through ptr); just give arg number. + #: c-typeck.c:4343 + #, c-format + msgid "passing arg %d of pointer to function" + msgstr "passage de arg %d du pointeur vers la fonction" + + #: c-typeck.c:4410 + msgid "initializer for static variable is not constant" + msgstr "initialisateur de variable « static » n'est pas une constante" + + #: c-typeck.c:4416 + msgid "initializer for static variable uses complicated arithmetic" + msgstr "initialisateur de variable « static » utilise une artihmétique compliquée" + + #: c-typeck.c:4424 + msgid "aggregate initializer is not constant" + msgstr "initialiseur d'aggrégat n'est pas une constante" + + #: c-typeck.c:4426 + msgid "aggregate initializer uses complicated arithmetic" + msgstr "initialiseur d'aggrégat utilise une arithmétique compliquée" + + #: c-typeck.c:4433 + msgid "traditional C rejects automatic aggregate initialization" + msgstr "C traditionel rejette l'initialisation automatique d'aggrégats" + + #: c-typeck.c:4621 c-typeck.c:4637 c-typeck.c:4653 + #, c-format + msgid "(near initialization for `%s')" + msgstr "(près de l'initialisation pour « %s »)" + + #: c-typeck.c:4705 cp/typeck2.c:513 + msgid "char-array initialized from wide string" + msgstr "tableau de caractères initialisé à l'aide d'une grande chaîne" + + #: c-typeck.c:4712 cp/typeck2.c:520 + msgid "int-array initialized from non-wide string" + msgstr "tableau d'entier initialisé à l'aide d'un chaîne courte" + + #: c-typeck.c:4730 cp/typeck2.c:536 + msgid "initializer-string for array of chars is too long" + msgstr "chaîne d'initialisateur pour le tableau de caractères est trop longue" + + #: c-typeck.c:4768 + msgid "array initialized from non-constant array expression" + msgstr "tableau initialisé à l'aide de l'expression d'un tableau de non constantes" + + #: c-typeck.c:4785 c-typeck.c:4787 c-typeck.c:4803 c-typeck.c:4824 c-typeck.c:6262 + msgid "initializer element is not constant" + msgstr "élément initialiseur n'est pas une constante" + + #: c-typeck.c:4819 + msgid "initialization" + msgstr "initialisation" + + #: c-typeck.c:4830 c-typeck.c:6267 + msgid "initializer element is not computable at load time" + msgstr "élément initialisateur n'est pas évaluable au moment du chargement" + + #: c-typeck.c:4867 c-typeck.c:4883 cp/typeck2.c:613 + msgid "invalid initializer" + msgstr "initialiseur invalide" + + #: c-typeck.c:5376 + msgid "extra brace group at end of initializer" + msgstr "groupe d'accolades superflu à la fin de l'initialiseur" + + #: c-typeck.c:5396 + msgid "missing braces around initializer" + msgstr "accolades manquantes autour de l'initialiseur" + + #: c-typeck.c:5456 + msgid "braces around scalar initializer" + msgstr "accolades autour de l'initialiseur scalaire" + + #: c-typeck.c:5504 + msgid "initialization of flexible array member in a nested context" + msgstr "initialisation d'un membre de tableau flexible dans un contexte imbriqué" + + #: c-typeck.c:5506 + msgid "initialization of a flexible array member" + msgstr "initialisation d'un membre de tableau flexible" + + #: c-typeck.c:5537 + msgid "missing initializer" + msgstr "initialiseur manquant" + + #: c-typeck.c:5563 + msgid "empty scalar initializer" + msgstr "initialiseur scalaire vide" + + #: c-typeck.c:5568 + msgid "extra elements in scalar initializer" + msgstr "éléments superflus dans l'initialiseur scalaire" + + #: c-typeck.c:5654 + msgid "initialization designators may not nest" + msgstr "initialisation des désignateurs ne doit pas être imbriquée" + + #: c-typeck.c:5675 c-typeck.c:5746 + msgid "array index in non-array initializer" + msgstr "index de tableau dans un initialiseur qui n'est pas pour tableau" + + #: c-typeck.c:5680 c-typeck.c:5798 + msgid "field name not in record or union initializer" + msgstr "nom du champ n'est pas dans l'initialiseur de l'enregistrement ou de l'union" + + #: c-typeck.c:5742 c-typeck.c:5744 + msgid "nonconstant array index in initializer" + msgstr "index de tableau non constante dans l'initialiseur" + + #: c-typeck.c:5749 + msgid "array index in initializer exceeds array bounds" + msgstr "index de tableau dans l'initialiseur excèdes les bornes du tableau" + + #: c-typeck.c:5760 + msgid "empty index range in initializer" + msgstr "bornes vides d'index dans l'initialiseur" + + #: c-typeck.c:5769 + msgid "array index range in initializer exceeds array bounds" + msgstr "plage d'index du tableau dans l'initialiseur excède les bornes du tableau" + + #: c-typeck.c:5810 + #, c-format + msgid "unknown field `%s' specified in initializer" + msgstr "champ inconnu « %s » spécifié dans l'initialisateur" + + #: c-typeck.c:5847 c-typeck.c:5868 c-typeck.c:6330 + msgid "initialized field with side-effects overwritten" + msgstr "champ initialisé avec effets de bord a été écrasé" + + #: c-typeck.c:6540 + msgid "excess elements in char array initializer" + msgstr "éléments en excès dans l'initialisateur de tableau de caractères" + + #: c-typeck.c:6547 c-typeck.c:6593 + msgid "excess elements in struct initializer" + msgstr "éléments en excès dans l'initialisateur de struct" + + #: c-typeck.c:6608 + msgid "non-static initialization of a flexible array member" + msgstr "initialisation non statique d'un membre de tableau flexible" + + #: c-typeck.c:6670 + msgid "excess elements in union initializer" + msgstr "éléments en excès dans l'initialisateur d'union" + + #: c-typeck.c:6691 + msgid "traditional C rejects initialization of unions" + msgstr "C traditionel rejette l'initialisation d'unions" + + #: c-typeck.c:6754 + msgid "excess elements in array initializer" + msgstr "éléments en excès dans l'initialisation de tableau" + + #: c-typeck.c:6783 + msgid "excess elements in vector initializer" + msgstr "éléments en excès dans l'initialisateur du vecteur" + + #: c-typeck.c:6805 + msgid "excess elements in scalar initializer" + msgstr "éléments en excès dans l'initialisateur de scalaire" + + #: c-typeck.c:6916 + msgid "asm template is not a string constant" + msgstr "patron asm n'est pas une chaîne de constante" + + #: c-typeck.c:6948 + msgid "invalid lvalue in asm statement" + msgstr "lvalue invalide dans la déclaration asm" + + #: c-typeck.c:7019 + msgid "modification by `asm'" + msgstr "modification par « asm »" + + #: c-typeck.c:7038 cp/typeck.c:6453 + msgid "function declared `noreturn' has a `return' statement" + msgstr "fonction déclarée avec « noreturn» a une déclaraion avec «return »" + + #: c-typeck.c:7045 + msgid "`return' with no value, in function returning non-void" + msgstr "« return » sans valeur, dans la fonction ne retournant pas un void" + + #: c-typeck.c:7051 + msgid "`return' with a value, in function returning void" + msgstr "« return » avec une valeur, dans la fonction retournant un void" + + #: c-typeck.c:7055 + msgid "return" + msgstr "return" + + #: c-typeck.c:7107 + msgid "function returns address of local variable" + msgstr "fonction retourne l'adresse d'une variable locale" + + #: c-typeck.c:7163 cp/semantics.c:529 + msgid "switch quantity not an integer" + msgstr "quantité du switch n'est pas un entier" + + #: c-typeck.c:7173 + msgid "`long' switch expression not converted to `int' in ISO C" + msgstr "expression « long» du switch pas converti à «int » en ISO C" + + #: c-typeck.c:7208 cp/decl.c:5232 + msgid "case label not within a switch statement" + msgstr "étiquette du 'case« n»est pas à l'intérieur de la déclaration du switch" + + #: c-typeck.c:7210 cp/decl.c:5237 + msgid "`default' label not within a switch statement" + msgstr "étiquette « default » n'est pas à l'intérieur de la déclaration du switch" + + #: calls.c:1902 + #, c-format + msgid "inlining failed in call to `%s'" + msgstr "enlignage a échoué dans l'appel à « %s »" + + #: calls.c:1903 calls.c:2209 + msgid "called from here" + msgstr "appelé d'ici" + + #: calls.c:2208 + #, c-format + msgid "can't inline call to `%s'" + msgstr "ne peut enligner l'appel de « %s »" + + #: calls.c:2238 + msgid "function call has aggregate value" + msgstr "appel de fonction a une valeur d'aggrégat" + + #: calls.c:4545 + msgid "variable offset is passed partially in stack and in reg" + msgstr "décalage de variable est passé partiellement dans la pile et dans le registre" + + #: calls.c:4547 + msgid "variable size is passed partially in stack and in reg" + msgstr "taille de la variable est passée partiellement dans la pile et le registre" + + #: cfgrtl.c:1624 + #, c-format + msgid "end insn %d for block %d not found in the insn stream" + msgstr "fin insn %d du bloc %d n'a pas été repéré dans le flot insn" + + #: cfgrtl.c:1638 + #, c-format + msgid "insn %d is in multiple basic blocks (%d and %d)" + msgstr "insn %d est dans de multiples blocs de base (%d et %d)" + + #: cfgrtl.c:1650 + #, c-format + msgid "head insn %d for block %d not found in the insn stream" + msgstr "en-tête insn %d du bloc %d n'a pas été repérée dans le flot insn" + + #: cfgrtl.c:1669 + #, c-format + msgid "verify_flow_info: Duplicate edge %i->%i" + msgstr "verify_flow_info: bordure dupliquée %i->%i" + + #: cfgrtl.c:1688 + #, c-format + msgid "verify_flow_info: Incorrect blocks for fallthru %i->%i" + msgstr "verify_flow_info: blocs incorrects pour le fallthru %i->%i" + + #: cfgrtl.c:1703 + #, c-format + msgid "verify_flow_info: Incorrect fallthru %i->%i" + msgstr "verify_flow_info: fallthru incorrect %i->%i" + + #: cfgrtl.c:1705 + msgid "wrong insn in the fallthru edge" + msgstr "insn erronée dans la bordure fallthru" + + #: cfgrtl.c:1712 + #, c-format + msgid "verify_flow_info: Basic block %d succ edge is corrupted" + msgstr "verify_flow_info: bordure suivante du bloc de base %d est corrompue" + + #: cfgrtl.c:1736 + #, c-format + msgid "missing barrier after block %i" + msgstr "barrière manquante après le boc %i" + + #: cfgrtl.c:1746 + #, c-format + msgid "basic block %d pred edge is corrupted" + msgstr "bordure précédente du bloc de base %d est corrompue" + + #: cfgrtl.c:1763 + #, c-format + msgid "insn %d inside basic block %d but block_for_insn is NULL" + msgstr "insn %d à l'intérieur du bloc de base %d mais block_for_insn est NULL" + + #: cfgrtl.c:1767 + #, c-format + msgid "insn %d inside basic block %d but block_for_insn is %i" + msgstr "insn %d à l'intérieur du bloc de base %d mais block_for_insn est %i" + + #: cfgrtl.c:1781 cfgrtl.c:1791 + #, c-format + msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d" + msgstr "NOTE_INSN_BASIC_BLOCK est manquant pour le bloc %d" + + #: cfgrtl.c:1804 + #, c-format + msgid "NOTE_INSN_BASIC_BLOCK %d in middle of basic block %d" + msgstr "NOTE_INSN_BASIC_BLOCK %d dans le milieu du bloc de base %d" + + #: cfgrtl.c:1816 + #, c-format + msgid "in basic block %d:" + msgstr "dans le bloc de base %d:" + + #: cfgrtl.c:1817 + msgid "flow control insn inside a basic block" + msgstr "contrôle de flot insn à l'intérieur d'un bloc de base" + + #: cfgrtl.c:1836 + #, c-format + msgid "basic block %i edge lists are corrupted" + msgstr "listes des bordures du bloc de base %i sont corrompues" + + #: cfgrtl.c:1850 + msgid "basic blocks not numbered consecutively" + msgstr "blocs de base ne sont pas numérotés consécutivement" + + #: cfgrtl.c:1875 + msgid "insn outside basic block" + msgstr "insn à l'extérieur du bloc de base" + + #: cfgrtl.c:1883 + msgid "return not followed by barrier" + msgstr "return n'est pas suivi d'une barrière" + + #: cfgrtl.c:1888 + #, c-format + msgid "number of bb notes in insn chain (%d) != n_basic_blocks (%d)" + msgstr "nombre de notes bb dans la chaîne insn (%d) != n_basic_blocks (%d)" + + #: cfgrtl.c:1892 + msgid "verify_flow_info failed" + msgstr "verify_flow_info failed" + + #: collect2.c:439 + msgid "internal error" + msgstr "erreur interne" + + #: collect2.c:940 + msgid "no arguments" + msgstr "pas d'argument" + + #: collect2.c:1269 collect2.c:1417 collect2.c:1450 + #, c-format + msgid "fopen %s" + msgstr "fopen() %s" + + #: collect2.c:1272 collect2.c:1422 collect2.c:1453 + #, c-format + msgid "fclose %s" + msgstr "fclose() %s" + + #: collect2.c:1281 + #, c-format + msgid "collect2 version %s" + msgstr "collect2 version %s" + + #: collect2.c:1371 + #, c-format + msgid "%d constructor(s) found\n" + msgstr "%d constructeur(s) repéré(s)\n" + + #: collect2.c:1372 + #, c-format + msgid "%d destructor(s) found\n" + msgstr "%d destructeur(s) repéré(s)\n" + + #: collect2.c:1373 + #, c-format + msgid "%d frame table(s) found\n" + msgstr "%d table(s) de trame repéré(s)\n" + + #: collect2.c:1514 + #, c-format + msgid "%s terminated with signal %d [%s]%s" + msgstr "%s terminé par le signal %d [%s]%s" + + #: collect2.c:1533 + #, c-format + msgid "%s returned %d exit status" + msgstr "%s a retourné %d comme valeur d'état " + + #: collect2.c:1561 + #, c-format + msgid "[cannot find %s]" + msgstr "[ne peut repérer %s]" + + #: collect2.c:1576 + #, c-format + msgid "cannot find `%s'" + msgstr "ne peut repérer « %s »" + + #: collect2.c:1587 collect2.c:1590 + #, c-format + msgid "redirecting stdout: %s" + msgstr "redirection de stdout: %s" + + #: collect2.c:1633 + #, c-format + msgid "[Leaving %s]\n" + msgstr "[Laissant %s]\n" + + #: collect2.c:1876 + #, c-format + msgid "" + "\n" + "write_c_file - output name is %s, prefix is %s\n" + msgstr "" + "\n" + "write_c_file - nom de sortie est %s, préfixe est %s\n" + + #: collect2.c:2089 + msgid "cannot find `nm'" + msgstr "ne peut repérer « nm »" + + #: collect2.c:2099 collect2.c:2541 + msgid "pipe" + msgstr "pipe" + + #: collect2.c:2103 collect2.c:2545 + msgid "fdopen" + msgstr "fdopen" + + #: collect2.c:2129 collect2.c:2571 + #, c-format + msgid "dup2 %d 1" + msgstr "dup2 %d 1" + + #: collect2.c:2132 collect2.c:2135 collect2.c:2148 collect2.c:2574 collect2.c:2577 collect2.c:2590 + #, c-format + msgid "close %d" + msgstr "close %d" + + #: collect2.c:2138 + #, c-format + msgid "execvp %s" + msgstr "execvp %s" + + #: collect2.c:2192 + #, c-format + msgid "init function found in object %s" + msgstr "fonction init repérée dans l'objet %s" + + #: collect2.c:2200 + #, c-format + msgid "fini function found in object %s" + msgstr "fonction fini() repérée dans l'objet %s" + + #: collect2.c:2223 collect2.c:2629 + msgid "fclose" + msgstr "fclose" + + #: collect2.c:2268 + #, c-format + msgid "unable to open file '%s'" + msgstr "incapable d'ouvrir le fichier « %s »" + + #: collect2.c:2270 + #, c-format + msgid "unable to stat file '%s'" + msgstr "incapable d'évaluer par stat() le fichier « %s »" + + #: collect2.c:2276 + #, c-format + msgid "unable to mmap file '%s'" + msgstr "incpable de projeter en mémoire (mmap) le fichier « %s »" + + #: collect2.c:2429 + msgid "not found\n" + msgstr "pas repéré\n" + + #: collect2.c:2431 collect2.c:2608 + #, c-format + msgid "dynamic dependency %s not found" + msgstr "dépendance dynamique %s n'a pas été repéré" + + #: collect2.c:2451 + #, c-format + msgid "bad magic number in file '%s'" + msgstr "nombre magique erroné pour le fichier « %s »" + + #: collect2.c:2473 + msgid "dynamic dependencies.\n" + msgstr "dépendances dynamiques.\n" + + #: collect2.c:2532 + msgid "cannot find `ldd'" + msgstr "ne peut repérer « ldd »" + + #: collect2.c:2580 + #, c-format + msgid "execv %s" + msgstr "execv %s" + + #: collect2.c:2593 + msgid "" + "\n" + "ldd output with constructors/destructors.\n" + msgstr "" + "\n" + "sortie de ldd avec constructeurs/destructeurs.\n" + + #: collect2.c:2620 + #, c-format + msgid "unable to open dynamic dependency '%s'" + msgstr "incapable d'ouvrir une dépendance dynamique « %s »" + + #: collect2.c:2734 + #, c-format + msgid "%s: not a COFF file" + msgstr "%s: n'est pas un fichier COFF" + + #: collect2.c:2853 + #, c-format + msgid "%s: cannot open as COFF file" + msgstr "%s: ne peut ouvrir un fichier COFF" + + #: collect2.c:2909 + #, c-format + msgid "library lib%s not found" + msgstr "librarie lib%s n'a pas été trouvé" + + #: collect2.c:3038 + #, c-format + msgid "open %s" + msgstr "open %s" + + #: collect2.c:3061 + msgid "incompatibilities between object file & expected values" + msgstr "incompatibilités entre le fichier objet & les valeurs attendues" + + #: collect2.c:3134 + #, c-format + msgid "" + "\n" + "Processing symbol table #%d, offset = 0x%.8lx, kind = %s\n" + msgstr "" + "\n" + "Table de symboles de traitement #%d, décalage = 0x%.8lx, sorte = %s\n" + + #: collect2.c:3143 + msgid "string section missing" + msgstr "chaîne de section manquante" + + #: collect2.c:3146 + msgid "section pointer missing" + msgstr "pointeur de section manquant" + + #: collect2.c:3194 + msgid "no symbol table found" + msgstr "pas de table de symbole trouvée" + + #: collect2.c:3207 + msgid "no cmd_strings found" + msgstr "pas de cmd_strings trouvé" + + #: collect2.c:3219 + msgid "" + "\n" + "Updating header and load commands.\n" + "\n" + msgstr "" + "\n" + "Mise à jour d'en-tête et chargement des commandes.\n" + "\n" + + #: collect2.c:3226 + #, c-format + msgid "load command map, %d cmds, new size %ld.\n" + msgstr "charger la commande map, %d commandes, nouvelle taille %ld.\n" + + #: collect2.c:3257 + msgid "" + "writing load commands.\n" + "\n" + msgstr "" + "écriture des commandes de chargement.\n" + "\n" + + #: collect2.c:3277 + #, c-format + msgid "close %s" + msgstr "close %s" + + #: collect2.c:3351 + msgid "could not convert 0x%l.8x into a region" + msgstr "ne peut convertir 0x%l.8x dans une région" + + #: collect2.c:3355 + #, c-format + msgid "%s function, region %d, offset = %ld (0x%.8lx)\n" + msgstr "fonction %s, région %d, décalage = %ld (0x%.8lx)\n" + + #: collect2.c:3482 + msgid "bad magic number" + msgstr "nombre magique erroné" + + #: collect2.c:3483 + msgid "bad header version" + msgstr "version d'en-tête erroné" + + #: collect2.c:3484 + msgid "bad raw header version" + msgstr "version brute d'en-tête erroné" + + #: collect2.c:3485 + msgid "raw header buffer too small" + msgstr "tampon brut d'en-tête trop petit" + + #: collect2.c:3486 + msgid "old raw header file" + msgstr "ancien fichier d'en-tête brute" + + #: collect2.c:3487 + msgid "unsupported version" + msgstr "version non supportée" + + #: collect2.c:3489 + #, c-format + msgid "unknown {de,en}code_mach_o_hdr return value %d" + msgstr "mauvais {de,en}code_mach_o_hdr valeur retourné %d" + + #: collect2.c:3509 + #, c-format + msgid "fstat %s" + msgstr "fstat %s" + + #: collect2.c:3546 collect2.c:3594 + #, c-format + msgid "lseek %s 0" + msgstr "lseek %s 0" + + #: collect2.c:3550 + #, c-format + msgid "read %s" + msgstr "read %s" + + #: collect2.c:3553 + #, c-format + msgid "read %ld bytes, expected %ld, from %s" + msgstr "lu %ld octets, attendu %ld, de %s" + + #: collect2.c:3574 + #, c-format + msgid "msync %s" + msgstr "msync %s" + + #: collect2.c:3581 + #, c-format + msgid "munmap %s" + msgstr "munmap %s" + + #: collect2.c:3598 + #, c-format + msgid "write %s" + msgstr "write %s" + + #: collect2.c:3601 + #, c-format + msgid "wrote %ld bytes, expected %ld, to %s" + msgstr "écrit %ld octets, attendu %ld, vers %s" + + #: combine.c:12769 + #, c-format + msgid "" + ";; Combiner statistics: %d attempts, %d substitutions (%d requiring new space),\n" + ";; %d successes.\n" + "\n" + msgstr "" + ";; Statistiques combinées: %d tentatives, %d substitutions (%d requérant un nouvel espace),\n" + ";; %d succès.\n" + "\n" + + #: combine.c:12779 + #, c-format + msgid "" + "\n" + ";; Combiner totals: %d attempts, %d substitutions (%d requiring new space),\n" + ";; %d successes.\n" + msgstr "" + "\n" + ";; Totaux combinés: %d tentatives, %d substitutions (%d requérant un nouvel espace),\n" + ";; %d succès.\n" + "\n" + + #: convert.c:67 + msgid "cannot convert to a pointer type" + msgstr "ne peut convertir en un type pointeur" + + #: convert.c:100 + msgid "pointer value used where a floating point value was expected" + msgstr "valeur du pointeur utilisé où une valeur flottante était attendue" + + #: convert.c:104 + msgid "aggregate value used where a float was expected" + msgstr "valeur d'aggrégat utilisé où un flottant était attendu" + + #: convert.c:130 + msgid "conversion to incomplete type" + msgstr "conversion vers un type incomplet" + + #: convert.c:390 convert.c:470 + msgid "can't convert between vector values of different size" + msgstr "ne peut convertir entre des valeurs de vecteurs de tailles différentes" + + #: convert.c:396 + msgid "aggregate value used where an integer was expected" + msgstr "valeur d'aggrégat utilisé où un entier était attendu" + + #: convert.c:448 f/com.c:1073 + msgid "pointer value used where a complex was expected" + msgstr "valeur de pointeur utilisé où un complexe était attendu" + + #: convert.c:452 f/com.c:1075 + msgid "aggregate value used where a complex was expected" + msgstr "valeur d'aggrégat utilisé où un complexe était attendu" + + #: convert.c:476 + msgid "can't convert value to a vector" + msgstr "ne peut convertir une valeur en un vecteur" + + #: cpperror.c:125 + msgid "internal error: " + msgstr "erreur interne: " + + #: cpperror.c:132 tradcpp.c:4690 + msgid "warning: " + msgstr "AVERTISSEMENT: " + + #: cpperror.c:209 cpperror.c:299 cppfiles.c:691 gcc.c:6307 tradcpp.c:4728 + #, c-format + msgid "%s: %s" + msgstr "%s: %s" + + #: cppexp.c:154 + msgid "floating point numbers are not valid in #if" + msgstr "nombres flottants ne sont pas valides dans un #if" + + #: cppexp.c:176 + msgid "traditional C rejects the `U' suffix" + msgstr "C traditionel rejette le suffixe « U »" + + #: cppexp.c:179 + msgid "too many 'l' suffixes in integer constant" + msgstr "trop de « l » en suffixe dans les constantes entières" + + #: cppexp.c:183 + msgid "integer constant contains digits beyond the radix" + msgstr "constante entière contient des chiffres en dehors la base numérique" + + #: cppexp.c:186 + msgid "integer constant out of range" + msgstr "constante entière est hors gamme" + + #: cppexp.c:192 + msgid "integer constant is so large that it is unsigned" + msgstr "constante entière est si grande qu'ell est non signée" + + #: cppexp.c:201 + #, c-format + msgid "invalid suffix '%.*s' on integer constant" + msgstr "suffixe invalide '%.*s» pour une constante entière" + + #: cppexp.c:234 + msgid "missing ')' after \"defined\"" + msgstr "« )» manquant après «defined »" + + #: cppexp.c:240 + msgid "operator \"defined\" requires an identifier" + msgstr "opérateur « defined » requiert un identificateur" + + #: cppexp.c:248 + #, c-format + msgid "(\"%s\" is an alternative token for \"%s\" in C++)" + msgstr "(« %s » est un jeton alternatif pour « %s » en C++)" + + #: cppexp.c:259 + msgid "this use of \"defined\" may not be portable" + msgstr "cette utilisation de « defined » peut ne pas être portable" + + #: cppexp.c:307 + msgid "string constants are not valid in #if" + msgstr "constantes de chaîne ne sont pas valides dasn un #if" + + #: cppexp.c:311 + #, c-format + msgid "invalid character '%c' in #if" + msgstr "caractère « %c » invalide dans le #if" + + #: cppexp.c:313 + #, c-format + msgid "invalid character '\\%03o' in #if" + msgstr "caractère invalide '\\%03o» dans le #if" + + #: cppexp.c:330 + #, c-format + msgid "ISO C++ does not permit \"%s\" in #if" + msgstr "ISO C++ ne permet pas « %s » dans #if" + + #: cppexp.c:341 + #, c-format + msgid "\"%s\" is not defined" + msgstr "« %s » n'est pas défini" + + #: cppexp.c:367 + #, c-format + msgid "\"%s\" is not valid in #if expressions" + msgstr "« %s » n'est pas valide des les expressions #if" + + #: cppexp.c:382 + msgid "integer overflow in preprocessor expression" + msgstr "débordement entier dans l'expresion du préprocesseur" + + #: cppexp.c:612 + msgid "missing binary operator" + msgstr "opérateur binaire manquant" + + #: cppexp.c:647 + msgid "void expression between '(' and ')'" + msgstr "expression void entre «(» et «)»" + + #: cppexp.c:649 + #, c-format + msgid "operator '%s' has no right operand" + msgstr "l'opérateur « %s » n'a pas d'opérande droite" + + #: cppexp.c:661 + #, c-format + msgid "impossible operator '%s'" + msgstr "opérateur impossible « %s »" + + #: cppexp.c:737 tradcif.y:111 tradcif.y:122 + msgid "division by zero in #if" + msgstr "division par zéro dans #if" + + #: cppexp.c:771 + msgid "comma operator in operand of #if" + msgstr "opérateur virgule dans l'opérande #if" + + #: cppexp.c:776 + msgid "syntax error '?' without following ':'" + msgstr "erreur de syntaxe «?» sans être suivi de «:»" + + #: cppexp.c:779 + msgid "syntax error ':' without preceding '?'" + msgstr "erreur de syntaxe «:» sans être précédé de «?»" + + #: cppexp.c:787 + msgid "missing ')' in expression" + msgstr "«)» manquante dans l'expresion" + + #: cppexp.c:794 + msgid "missing '(' in expression" + msgstr "«(» manquante dans l'expresion" + + #: cppexp.c:820 + #, c-format + msgid "missing binary operator before '%s'" + msgstr "opérateur binaire manquant avant « %s »" + + #: cppexp.c:826 + #, c-format + msgid "operator '%s' has no left operand" + msgstr "opérateur « %s » n'a pas d'opérande gauche" + + #: cppexp.c:864 + msgid "unbalanced stack in #if" + msgstr "pile non balancés dans le #if" + + #: cppexp.c:867 + msgid "#if with no expression" + msgstr "#if sans expression" + + #: cppfiles.c:395 + #, c-format + msgid "%s is too large" + msgstr "%s est trop grand" + + #: cppfiles.c:426 + #, c-format + msgid "%s is shorter than expected" + msgstr "%s est plus petit que prévue" + + #: cppfiles.c:440 + #, c-format + msgid "%s is a block device" + msgstr "%s est un périphérique de blocs" + + #: cppfiles.c:566 + #, c-format + msgid "no include path in which to find %s" + msgstr "pas de chemin d'inclusion afin de retrouver %s" + + #: cppfiles.c:639 + msgid "Multiple include guards may be useful for:\n" + msgstr "De multiples balises pour les inclusions peuvent être utiles pour:\n" + + #: cppfiles.c:1029 + msgid "absolute file name in remap_filename" + msgstr "nom de fichier absolu dans remap_filename" + + #: cppinit.c:230 + #, c-format + msgid "ignoring nonexistent directory \"%s\"\n" + msgstr "répertoires « %s » inexistents sont ignorés\n" + + #: cppinit.c:237 + #, c-format + msgid "%s: Not a directory" + msgstr "%s: n'est pas un répertoire" + + #: cppinit.c:284 + #, c-format + msgid "ignoring duplicate directory \"%s\"\n" + msgstr "répertoires « %s » doubles sont ignorés\n" + + #: cppinit.c:312 + #, c-format + msgid "changing search order for system directory \"%s\"" + msgstr "modification de l'ordonnancement de recherche du répertoire système « %s »" + + #: cppinit.c:316 + #, c-format + msgid " as it is the same as non-system directory \"%s\"" + msgstr " comme c'est le même qu'un répertoire non système « %s »" + + #: cppinit.c:320 + msgid " as it has already been specified as a non-system directory" + msgstr " comme il a été déjà spécifié comme répertoire non système" + + #: cppinit.c:936 + msgid "#include \"...\" search starts here:\n" + msgstr "#include «...» la recherche débute ici:\n" + + #: cppinit.c:940 + msgid "#include <...> search starts here:\n" + msgstr "#include <...> la recherche débute ici:\n" + + #: cppinit.c:943 + msgid "End of search list.\n" + msgstr "Fin de la liste de recherche.\n" + + #: cppinit.c:1010 + msgid "" + msgstr "" + + #: cppinit.c:1012 + msgid "" + msgstr "" + + #: cppinit.c:1108 tradcpp.c:979 tradcpp.c:989 tradcpp.c:1080 + msgid "I/O error on output" + msgstr "Erreur E/S sur la sortie" + + #. Irix6 "cc -n32" and OSF4 cc have problems with char foo[] = ("string"); + #. I.e. a const string initializer with parens around it. That is + #. what N_("string") resolves to, so we make no_* be macros instead. + #: cppinit.c:1156 + #, c-format + msgid "argument missing after %s" + msgstr "argument manquant après %s" + + #: cppinit.c:1157 + #, c-format + msgid "assertion missing after %s" + msgstr "assertion manquante après %s" + + #: cppinit.c:1158 + #, c-format + msgid "directory name missing after %s" + msgstr "nom de répertoire manquant après %s" + + #: cppinit.c:1159 + #, c-format + msgid "file name missing after %s" + msgstr "nom de fichier manquant après %s" + + #: cppinit.c:1160 + #, c-format + msgid "macro name missing after %s" + msgstr "nom de macro manquant après %s" + + #: cppinit.c:1161 + #, c-format + msgid "path name missing after %s" + msgstr "nom de chemin manquant après %s" + + #: cppinit.c:1162 + #, c-format + msgid "number missing after %s" + msgstr "nombre manquant après %s" + + #: cppinit.c:1163 + #, c-format + msgid "target missing after %s" + msgstr "cible manquante après %s" + + #: cppinit.c:1351 + #, c-format + msgid "too many filenames. Type %s --help for usage info" + msgstr "trop de noms de fichiers. Taper %s --help pour en connaître l'usage" + + #: cppinit.c:1541 tradcpp.c:610 + msgid "output filename specified twice" + msgstr "nom de fichier de sortie spécifié deux fois" + + #: cppinit.c:1653 + msgid "-I- specified twice" + msgstr "-I- spécifié deux fois" + + #: cppinit.c:1794 + #, c-format + msgid "GNU CPP version %s (cpplib)" + msgstr "GNU CPP version %s (cpplib)" + + #: cppinit.c:1835 tradcpp.c:803 + msgid "you must additionally specify either -M or -MM" + msgstr "vous devez en plus spécifier soit -M ou -MM" + + #. To keep the lines from getting too long for some compilers, limit + #. to about 500 characters (6 lines) per chunk. + #: cppinit.c:1896 + msgid "" + "Switches:\n" + " -include Include the contents of before other files\n" + " -imacros Accept definition of macros in \n" + " -iprefix Specify as a prefix for next two options\n" + " -iwithprefix Add to the end of the system include path\n" + " -iwithprefixbefore Add to the end of the main include path\n" + " -isystem Add to the start of the system include path\n" + msgstr "" + "Options:\n" + " -include inclure le contenu du avant d'autres fichiers\n" + " -imacros accepter la définition de macros dans le \n" + " -iprefix spécifier le comme un préfixe aux prochaines deux options\n" + " -iwithprefix ajouter le ertoire à la fin du chemin d'inclusion système\n" + " -iwithprefixbefore ajouter le ertoire à la fin du chemin d'inclusion principal\n" + " -isystem ajouter le ertoire au début du chemin d'inclusion système\n" + + #: cppinit.c:1905 + msgid "" + " -idirafter Add to the end of the system include path\n" + " -I Add to the end of the main include path\n" + " -I- Fine-grained include path control; see info docs\n" + " -nostdinc Do not search system include directories\n" + " (dirs specified with -isystem will still be used)\n" + " -nostdinc++ Do not search system include directories for C++\n" + " -o Put output into \n" + msgstr "" + " -idirafter ajouter le ertoire à la fin du chemind'inclusion système\n" + " -I ajouter le ertoire à la fin du chemind'inclusion principal\n" + " -I- raffiner le contrôle du chemin d'inclusion; consulter la doc\n" + " -nostdinc ne pas rechercher à travers les répertoires d'inclusion système\n" + " (rép spécifiés avec -isystem seront encode utilisés)\n" + " -nostdinc++ ne pas rechercher à travers les répertoires d'inclusion système pour C++\n" + " -o produire la sortie dans le \n" + + #: cppinit.c:1914 + msgid "" + " -pedantic Issue all warnings demanded by strict ISO C\n" + " -pedantic-errors Issue -pedantic warnings as errors instead\n" + " -trigraphs Support ISO C trigraphs\n" + " -lang-c Assume that the input sources are in C\n" + " -lang-c89 Assume that the input sources are in C89\n" + msgstr "" + " -pedantic émettre tous les avertissements relatifs à la conformité stricte ISO C\n" + " -pedantic-errors transformer les avertissements -pedantic en erreurs à la place\n" + " -trigraphs supporter les trigraphes ISO C\n" + " -lang-c assumer que les sources à l'entrée sont en C\n" + " -lang-c89 assumer que les sources à l'entrée sont en C89\n" + + #: cppinit.c:1921 + msgid "" + " -lang-c++ Assume that the input sources are in C++\n" + " -lang-objc Assume that the input sources are in ObjectiveC\n" + " -lang-objc++ Assume that the input sources are in ObjectiveC++\n" + " -lang-asm Assume that the input sources are in assembler\n" + msgstr "" + " -lang-c++ assumer que les sources sont en C++\n" + " -lang-objc assumer que les sources sont en ObjectiveC\n" + " -lang-objc++ assumer que les sources sont en ObjectiveC++\n" + " -lang-asm assumer que les sources sont en assembleur\n" + + #: cppinit.c:1927 + msgid "" + " -std= Specify the conformance standard; one of:\n" + " gnu89, gnu99, c89, c99, iso9899:1990,\n" + " iso9899:199409, iso9899:1999\n" + " -+ Allow parsing of C++ style features\n" + " -w Inhibit warning messages\n" + " -Wtrigraphs Warn if trigraphs are encountered\n" + " -Wno-trigraphs Do not warn about trigraphs\n" + " -Wcomment{s} Warn if one comment starts inside another\n" + msgstr "" + " -std= spécifier le de conformité à utiliser; soit:\n" + " gnu89, gnu99, c89, c99, iso9899:1990,\n" + " iso9899:199409, iso9899:1999\n" + " -+ permettre l'analyse des options de style C++\n" + " -w inhiber les messages d'avertissement\n" + " -Wtrigraphs avertir si des trigraphes sont rencontrés\n" + " -Wno-trigraphs ne pas avertir à propos des trigraphes\n" + " -Wcomment{s} avertir si un commentaire débute à l'intérieur d'un autre\n" + + #: cppinit.c:1937 + msgid "" + " -Wno-comment{s} Do not warn about comments\n" + " -Wtraditional Warn about features not present in traditional C\n" + " -Wno-traditional Do not warn about traditional C\n" + " -Wundef Warn if an undefined macro is used by #if\n" + " -Wno-undef Do not warn about testing undefined macros\n" + " -Wimport Warn about the use of the #import directive\n" + msgstr "" + " -Wno-comment{s} ne pas avertir à propos des commentaires\n" + " -Wtraditional avertir à propos des options non présentes en C traditionnel\n" + " -Wno-traditional ne pas avertir à propos du C traditionel\n" + " -Wundef avertir à propos de macros indéfinies si utilisé dans un #if\n" + " -Wno-undef ne pas avertir à propos de la vérification des macros indéfinies\n" + " -Wimport avertir de l'utilisation de la directive #import\n" + + #: cppinit.c:1945 + msgid "" + " -Wno-import Do not warn about the use of #import\n" + " -Werror Treat all warnings as errors\n" + " -Wno-error Do not treat warnings as errors\n" + " -Wsystem-headers Do not suppress warnings from system headers\n" + " -Wno-system-headers Suppress warnings from system headers\n" + " -Wall Enable all preprocessor warnings\n" + msgstr "" + " -Wno-import ne pas avertir à propos de l'utilisation de #import\n" + " -Werror traiter tous les avertissements comme des erreurs\n" + " -Wno-error ne pas traiter tous les avertissements comme des erreurs\n" + " -Wsystem-headers ne pas supprimer les avertissements dans les en-têtes système\n" + " -Wno-system-headers supprimer les avertissements dans les en-têtes système\n" + " -Wall autoriser tous les avertissements du préprocesseur\n" + + #: cppinit.c:1953 + msgid "" + " -M Generate make dependencies\n" + " -MM As -M, but ignore system header files\n" + " -MD Generate make dependencies and compile\n" + " -MMD As -MD, but ignore system header files\n" + " -MF Write dependency output to the given file\n" + " -MG Treat missing header file as generated files\n" + msgstr "" + " -M générer les dépendances pour make\n" + " -MM identique à -M, mais ignorer les en-têtes systèmes de fichiers\n" + " -MD générer les dépendances pour make et compiler\n" + " -MMD identique à -MD, mais ignorer les fichiers d'en-tête système\n" + " -MF écrire les dépendances dans le \n" + " -MG traiter les en-têtes de fichiers comme des fichiers générés\n" + + #: cppinit.c:1961 + msgid "" + " -MP\t\t\t Generate phony targets for all headers\n" + " -MQ Add a MAKE-quoted target\n" + " -MT Add an unquoted target\n" + msgstr "" + " -MP\t\t\t générer des cibles factices pour toutes les en-têtes\n" + " -MQ ajouter une cible MAKE-quoted\n" + " -MT ajouter une cible non « quoted »\n" + + #: cppinit.c:1966 + msgid "" + " -D Define a with string '1' as its value\n" + " -D= Define a with as its value\n" + " -A= Assert the to \n" + " -A-= Disable the to \n" + " -U Undefine \n" + " -v Display the version number\n" + msgstr "" + " -D définir une avec la chaîne « 1 » pour valeur\n" + " -D= définir une de \n" + " -A=() associer la à la \n" + " -A-=() dissocier la à la \n" + " -U ne plus définir la \n" + " -v afficher le numéro de version\n" + + #: cppinit.c:1974 + msgid "" + " -H Print the name of header files as they are used\n" + " -C Do not discard comments\n" + " -dM Display a list of macro definitions active at end\n" + " -dD Preserve macro definitions in output\n" + " -dN As -dD except that only the names are preserved\n" + " -dI Include #include directives in the output\n" + msgstr "" + " -H afficher le nom des fichiers en-tête tel qu'utilisés\n" + " -C ne pas mettre de côté les commantaires\n" + " -dM afficher la liste des définitions de macro actives à la fin\n" + " -dD préserver les définitions de macros à la sortie\n" + " -dN identique à -dD sauf que seuls les noms sont préservés\n" + " -dI inclure la directive #include à la sortie\n" + + #: cppinit.c:1982 + msgid "" + " -fpreprocessed Treat the input file as already preprocessed\n" + " -ftabstop= Distance between tab stops for column reporting\n" + " -P Do not generate #line directives\n" + " -$ Do not allow '$' in identifiers\n" + " -remap Remap file names when including files\n" + " --version Display version information\n" + " -h or --help Display this information\n" + msgstr "" + " -fpreprocessed traiter le fichier d'entrée comme étant déjà pré-traitée\n" + " -ftabstop= sélectionner la largeur de tabulation pour les rapports\n" + " -P ne pas générer des directives #line\n" + " -$ ne pas permettre «$» dans les identificateurs\n" + " -remap refaire la table des noms de fichiers\n" + " lors de l'inclusion de fichiers\n" + " --version afficher le numéro de version\n" + " -h or --help afficher l'aide mémoire\n" + + #: cpplex.c:154 + #, c-format + msgid "trigraph ??%c converted to %c" + msgstr "trigraphe ??%c converti à %c" + + #: cpplex.c:162 + #, c-format + msgid "trigraph ??%c ignored" + msgstr "trigraphe ??%c ignoré" + + #: cpplex.c:218 + msgid "backslash and newline separated by space" + msgstr "barre oblique inverse et retour de chariot séparé par un blanc" + + #: cpplex.c:224 + msgid "backslash-newline at end of file" + msgstr "barre oblique inverse et retour de chariot à la fin du fichier" + + #: cpplex.c:290 + msgid "\"/*\" within comment" + msgstr "«/*» à l'intérieur du commentaire" + + #: cpplex.c:373 + msgid "null character(s) ignored" + msgstr "caractère null ignoré" + + #: cpplex.c:380 + #, c-format + msgid "%s in preprocessing directive" + msgstr "%s dans la directive de pré-traitement" + + #: cpplex.c:447 + #, c-format + msgid "attempt to use poisoned \"%s\"" + msgstr "tentative d'utilisation empoisonée de « %s »" + + #: cpplex.c:455 + msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro" + msgstr "« __VA_ARGS__ » peut seulement appraître dans l'expansion des macros C99 variadic" + + #: cpplex.c:508 + msgid "'$' character(s) in identifier" + msgstr "caractère(s) «$» dans l'identificateur" + + #: cpplex.c:589 + #, c-format + msgid "missing terminating %c character" + msgstr "caractère %c de terminaison manquant" + + #: cpplex.c:594 + msgid "possible start of unterminated string literal" + msgstr "début possible d'une chaîne de mot non terminée" + + #: cpplex.c:689 + msgid "multi-line string literals are deprecated" + msgstr "chaîne de mots multi-lignes sont dépréciés" + + #: cpplex.c:712 + msgid "null character(s) preserved in literal" + msgstr "caractère(s) nul préservé(s) dans la chaîne" + + #: cpplex.c:914 + msgid "no newline at end of file" + msgstr "pas de nouvelle ligne à la fin du fichier" + + #: cpplex.c:1034 tradcpp.c:1467 + msgid "unterminated comment" + msgstr "commentaire non terminé" + + #: cpplex.c:1045 + msgid "C++ style comments are not allowed in ISO C89" + msgstr "Le style des commentaires en C++ n'est pas permis en ISO C89" + + #: cpplex.c:1047 + msgid "(this will be reported only once per input file)" + msgstr "(ceci sera rapporté seulement une seule fois par fichier d'entrée)" + + #: cpplex.c:1052 + msgid "multi-line comment" + msgstr "commentaire multi-lignes" + + #: cpplex.c:1367 + #, c-format + msgid "unknown string token %s\n" + msgstr "jeton de chaîne inconnu %s\n" + + #: cpplex.c:1379 + #, c-format + msgid "unspellable token %s" + msgstr "jeton %s ne peut être épelé" + + #: cpplex.c:1635 + #, c-format + msgid "the meaning of '\\%c' varies with -traditional" + msgstr "la signification de «\\%c» varie avec l'option -traditional" + + #: cpplex.c:1641 + msgid "incomplete universal-character-name" + msgstr "nom-de-caractère-universel incomplet" + + #: cpplex.c:1655 + #, c-format + msgid "non-hex digit '%c' in universal-character-name" + msgstr "chiffre « %c » n'est pas hexadécimal dans le nom-de-caractère-universel" + + #: cpplex.c:1663 + msgid "universal-character-name on EBCDIC target" + msgstr "nom-de-caractère-universel pour une cible EBCDIC" + + #: cpplex.c:1677 + msgid "universal-character-name out of range" + msgstr "nom-de-caractère-universel est hors gamme" + + #: cpplex.c:1722 + msgid "the meaning of '\\a' varies with -traditional" + msgstr "la signification de «\\a» varie avec l'option -traditional" + + #: cpplex.c:1729 + #, c-format + msgid "non-ISO-standard escape sequence, '\\%c'" + msgstr "séquence d'échappement n'est conforme au standard ISO, '\\%c'" + + #: cpplex.c:1739 + msgid "the meaning of '\\x' varies with -traditional" + msgstr "la signification de «\\x» varie avec l'option -traditional" + + #: cpplex.c:1758 f/lex.c:620 + msgid "\\x used with no following hex digits" + msgstr "\\x utilisé sans être suivi des chiffres hexdécimaux" + + #: cpplex.c:1762 + msgid "hex escape sequence out of range" + msgstr "séquence d'échappement hexadécimale hors gamme" + + #: cpplex.c:1786 + msgid "octal escape sequence out of range" + msgstr "séquence d'échappement octale hors gamme" + + #: cpplex.c:1801 + #, c-format + msgid "unknown escape sequence '\\%c'" + msgstr "séquence d'échappement inconnue '\\%c'" + + #: cpplex.c:1803 + #, c-format + msgid "unknown escape sequence: '\\%03o'" + msgstr "séquence d'échappement inconnue '\\%03o'" + + #: cpplex.c:1807 + msgid "escape sequence out of range for character" + msgstr "séquence d'échappement hors gamme pour le type caractère" + + #: cpplex.c:1904 + msgid "empty character constant" + msgstr "constante caractère vide" + + #: cpplex.c:1908 + msgid "character constant too long" + msgstr "constante caractère trop longue" + + #: cpplex.c:1911 + msgid "multi-character character constant" + msgstr "constante caractère multi-caractères" + + #: cpplib.c:228 + #, c-format + msgid "extra tokens at end of #%s directive" + msgstr "jetons superflus à la fin de la directive #%s" + + #: cpplib.c:281 + #, c-format + msgid "#%s is a GCC extension" + msgstr "#%s est une extension GCC" + + #: cpplib.c:292 + msgid "suggest not using #elif in traditional C" + msgstr "suggéré de ne pas utiliser #elif en C traditionnel" + + #: cpplib.c:295 + #, c-format + msgid "traditional C ignores #%s with the # indented" + msgstr "C traditionel ignore #%s avec le # d'indentation" + + #: cpplib.c:299 + #, c-format + msgid "suggest hiding #%s from traditional C with an indented #" + msgstr "suggéré de cacher #%s en C traditionel avec l'indentation #" + + #: cpplib.c:333 + msgid "style of line directive is a GCC extension" + msgstr "style de ligne de directive est extension GCC" + + #: cpplib.c:382 + #, c-format + msgid "invalid preprocessing directive #%s" + msgstr "directive de pré-traitement invalide #%s" + + #: cpplib.c:437 + #, c-format + msgid "no macro name given in #%s directive" + msgstr "aucun nom de macro donné dans la directive #%s" + + #: cpplib.c:441 + #, c-format + msgid "\"%s\" cannot be used as a macro name as it is an operator in C++" + msgstr "« %s » ne peut être utilisé comme nom de macro alors que c,est un opérateur en C++" + + #: cpplib.c:444 + msgid "macro names must be identifiers" + msgstr "noms de macro doivent être des identificateurs" + + #: cpplib.c:455 + #, c-format + msgid "\"%s\" cannot be used as a macro name" + msgstr "« %s » ne peut être utilisé comme nom de macro" + + #: cpplib.c:493 + #, c-format + msgid "undefining \"%s\"" + msgstr "indéfinition de « %s »" + + #: cpplib.c:536 + msgid "missing terminating > character" + msgstr "caractère > de terminaison est manquant" + + #: cpplib.c:574 + #, c-format + msgid "#%s expects \"FILENAME\" or " + msgstr "#%s attend « FILENAME » ou " + + #: cpplib.c:585 + #, c-format + msgid "empty file name in #%s" + msgstr "nom de fichier vide dans #%s" + + #: cpplib.c:604 + msgid "#include_next in primary source file" + msgstr "#include_next dans un fichier source primaire" + + #: cpplib.c:611 + msgid "#import is obsolete, use an #ifndef wrapper in the header file" + msgstr "#import est obsolète, utiliser une enveloppe #ifndef dans le fichier d'en-tête" + + #: cpplib.c:619 + msgid "#include nested too deeply" + msgstr "#include imbriqué trop profondément" + + #: cpplib.c:677 + #, c-format + msgid "invalid flag \"%s\" in line directive" + msgstr "fanion « %s » invalide dans la ligne de directives" + + #: cpplib.c:759 + #, c-format + msgid "\"%s\" after #line is not a positive integer" + msgstr "« %s » après #line n'est pas un nombre entier positif" + + #: cpplib.c:765 + msgid "line number out of range" + msgstr "numéro de ligne hors gamme" + + #: cpplib.c:776 cpplib.c:847 + #, c-format + msgid "\"%s\" is not a valid filename" + msgstr "« %s » n'est pas un nom de fichier valide" + + #: cpplib.c:811 + #, c-format + msgid "\"%s\" after # is not a positive integer" + msgstr "\"%s\" après # n'est pas un nombre entier positif" + + #: cpplib.c:916 + msgid "invalid #ident directive" + msgstr "directive #ident invalide" + + #: cpplib.c:1004 + #, c-format + msgid "registering \"%s\" as both a pragma and a pragma namespace" + msgstr "enregistrement de \"%s\" à la fois comme pragma et pragma d'espace de noms" + + #: cpplib.c:1007 + #, c-format + msgid "#pragma %s %s is already registered" + msgstr "#pragma %s %s est déjà enregistré" + + #: cpplib.c:1009 + #, c-format + msgid "#pragma %s is already registered" + msgstr "#pragma %s est déjà enregistré" + + #: cpplib.c:1084 + msgid "#pragma once is obsolete" + msgstr "utilisation une seule fois de #pragma est obsolète" + + #: cpplib.c:1087 + msgid "#pragma once in main file" + msgstr "#pragma utilisé une fois dans le fichier principal" + + #: cpplib.c:1111 + msgid "invalid #pragma GCC poison directive" + msgstr "#pragma GCC directive empoisonée invalide" + + #: cpplib.c:1120 + #, c-format + msgid "poisoning existing macro \"%s\"" + msgstr "empoisonnement de la macro existente « %s »" + + #: cpplib.c:1140 + msgid "#pragma system_header ignored outside include file" + msgstr "#pragma system_header ignorée en dehors du fichier d'inclusion" + + #: cpplib.c:1165 + #, c-format + msgid "cannot find source %s" + msgstr "ne peut repérer le source %s" + + #: cpplib.c:1169 + #, c-format + msgid "current file is older than %s" + msgstr "le fichier courant est plus vieux que %s" + + #: cpplib.c:1244 + msgid "_Pragma takes a parenthesized string literal" + msgstr "_Pragma prend une chaîne entourée de parenthèrese" + + #: cpplib.c:1343 + msgid "#else without #if" + msgstr "#else sans #if" + + #: cpplib.c:1348 tradcpp.c:3871 + msgid "#else after #else" + msgstr "#else après #else" + + #: cpplib.c:1350 cpplib.c:1384 + msgid "the conditional began here" + msgstr "le conditionel débute ici" + + #: cpplib.c:1377 + msgid "#elif without #if" + msgstr "#elif sans #if" + + #: cpplib.c:1382 tradcpp.c:3566 + msgid "#elif after #else" + msgstr "#elif après #else" + + #: cpplib.c:1413 + msgid "#endif without #if" + msgstr "#endif sans #if" + + #: cpplib.c:1496 tradcpp.c:3263 + msgid "missing '(' after predicate" + msgstr "«(» manquante après le prédicat" + + #: cpplib.c:1511 tradcpp.c:3277 + msgid "missing ')' to complete answer" + msgstr "«)» manquante pour completer la réponse" + + #: cpplib.c:1531 tradcpp.c:3283 + msgid "predicate's answer is empty" + msgstr "la réponse du prédicat est vide" + + #: cpplib.c:1561 tradcpp.c:3331 + msgid "assertion without predicate" + msgstr "assertion sans prédicat" + + #: cpplib.c:1563 tradcpp.c:3333 + msgid "predicate must be an identifier" + msgstr "prédicat doit être un identificateur" + + #: cpplib.c:1645 tradcpp.c:3430 + #, c-format + msgid "\"%s\" re-asserted" + msgstr "« %s » re-asserti" + + #: cpplib.c:1875 + #, c-format + msgid "unterminated #%s" + msgstr "#%s non terminé" + + #: cppmacro.c:145 + #, c-format + msgid "invalid built-in macro \"%s\"" + msgstr "macro interne invalide « %s »" + + #: cppmacro.c:346 + msgid "invalid string literal, ignoring final '\\'" + msgstr "chaîne invalide, «\\» final est ignoré" + + #: cppmacro.c:438 + #, c-format + msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token" + msgstr "collage de « %s » et de « %s » n'a pas donné des jetons valide de pré-traitement" + + #: cppmacro.c:564 + msgid "directives may not be used inside a macro argument" + msgstr "directives ne peuvent être utilisées à l'intérieur d'un argument macro" + + #: cppmacro.c:576 + #, c-format + msgid "unterminated argument list invoking macro \"%s\"" + msgstr "liste d'arguments non terminé invoquant la macro « %s »" + + #: cppmacro.c:593 + msgid "ISO C99 requires rest arguments to be used" + msgstr "ISO C99 requiert que les arguments restants soient utilisés" + + #: cppmacro.c:598 + #, c-format + msgid "macro \"%s\" requires %u arguments, but only %u given" + msgstr "macro « %s » requiert %u arguments, mais seulement %u ont été donnés" + + #: cppmacro.c:609 + #, c-format + msgid "macro \"%s\" passed %u arguments, but takes just %u" + msgstr "macro « %s » a passé %u arguments, mais seulement %u ont été pris" + + #: cppmacro.c:692 + #, c-format + msgid "function-like macro \"%s\" must be used with arguments in traditional C" + msgstr "macro « %s » identique à une fonction doit être utilisé avec des arguments en C traditionnel" + + #: cppmacro.c:1188 + #, c-format + msgid "duplicate macro parameter \"%s\"" + msgstr "paramètre de macro en double « %s »" + + #: cppmacro.c:1216 + #, c-format + msgid "\"%s\" may not appear in macro parameter list" + msgstr "« %s » peut ne pas apparaître dans la liste des paramètres des macros" + + #: cppmacro.c:1223 + msgid "macro parameters must be comma-separated" + msgstr "paramètres de macro doivent être séparés par des virgules" + + #: cppmacro.c:1240 + msgid "parameter name missing" + msgstr "nom de paramètre manquant" + + #: cppmacro.c:1254 + msgid "anonymous variadic macros were introduced in C99" + msgstr "macros anonymes variables ont été introduites avec le C99" + + #: cppmacro.c:1257 + msgid "ISO C does not permit named variadic macros" + msgstr "ISO C ne permet les macros variables nommées" + + #: cppmacro.c:1266 + msgid "missing ')' in macro parameter list" + msgstr "«)» manquante dans la liste des paramètres de macros" + + #: cppmacro.c:1344 + msgid "ISO C requires whitespace after the macro name" + msgstr "ISO C requiert des blancs après le nom de macro" + + #: cppmacro.c:1374 + msgid "'#' is not followed by a macro parameter" + msgstr "«#» n'est pas suivi d'un paramètre de macro" + + #: cppmacro.c:1394 + msgid "'##' cannot appear at either end of a macro expansion" + msgstr "«##» ne peut apparaître à chacune des fins de l'expansion de macros" + + #: cppmacro.c:1430 + #, c-format + msgid "\"%s\" redefined" + msgstr "« %s » redéfini" + + #: cppmacro.c:1434 + msgid "this is the location of the previous definition" + msgstr "ceci est la localisation d'une précédente définition" + + #: cppmacro.c:1498 + #, c-format + msgid "macro argument \"%s\" would be stringified with -traditional" + msgstr "argument macro « %s » devrait être déclaré de champ de chaîne avec -traditional." + + #: cppmacro.c:1522 + #, c-format + msgid "invalid hash type %d in cpp_macro_definition" + msgstr "type de hachage invalide %d dans cpp_macro_definition" + + #: cppmain.c:121 + #, c-format + msgid "invalid option %s" + msgstr "option invalide %s" + + #: cppspec.c:131 + #, c-format + msgid "\"%s\" is not a valid option to the preprocessor" + msgstr "« %s » n'est pas une option valide pour le préprocesseur" + + #: cppspec.c:155 + msgid "too many input files" + msgstr "trop de fichiers d'entrée" + + #: cse.c:7112 + #, c-format + msgid ";; Processing block from %d to %d, %d sets.\n" + msgstr ";; traitement de blocs de %d à %d, %d initialisés.\n" + + #: diagnostic.c:784 + #, c-format + msgid "%s:%d: warning: " + msgstr "%s:%d: AVERTISSEMENT: " + + #: diagnostic.c:791 + #, c-format + msgid "%s: warning: " + msgstr "%s: AVERTISSEMENT: " + + #: diagnostic.c:871 + msgid "((anonymous))" + msgstr "((anonyme))" + + #: diagnostic.c:941 + #, c-format + msgid "%s: warnings being treated as errors\n" + msgstr "%s: avertissements ont été traités commes des erreurs\n" + + #: diagnostic.c:978 + #, c-format + msgid "%s: %s: " + msgstr "%s: %s: " + + #: diagnostic.c:1057 + msgid "sorry, not implemented: " + msgstr "désolé, pas implanté: " + + #: diagnostic.c:1076 + #, c-format + msgid "%s " + msgstr "%s " + + #: diagnostic.c:1078 + #, c-format + msgid " %s" + msgstr " %s" + + #: diagnostic.c:1102 + msgid "At top level:" + msgstr "Au niveau supérieur:" + + #: diagnostic.c:1107 + #, c-format + msgid "In member function `%s':" + msgstr "Dans le membre de la fonction « %s »:" + + #: diagnostic.c:1111 + #, c-format + msgid "In function `%s':" + msgstr "Dans la fonction « %s »:" + + #: diagnostic.c:1195 + msgid "compilation terminated.\n" + msgstr "compilation terminatée.\n" + + #: diagnostic.c:1227 + #, c-format + msgid "%s:%d: confused by earlier errors, bailing out\n" + msgstr "%s:%d: rendu confus par les erreurs précédentes, abandon\n" + + #: diagnostic.c:1242 diagnostic.c:1392 + #, c-format + msgid "" + "Please submit a full bug report,\n" + "with preprocessed source if appropriate.\n" + "See %s for instructions.\n" + msgstr "" + "SVP soumettre un rapport complet d'anomalies,\n" + "avec le source pré-traité si cela est approprié.\n" + "Consulter %s pour les instructions.\n" + + #: diagnostic.c:1390 + msgid "Internal compiler error: Error reporting routines re-entered.\n" + msgstr "erreur interne de compilateur: erreur pour rapporter une routine ré-entée\n" + + #: diagnostic.c:1452 + #, c-format + msgid "Internal compiler error in %s, at %s:%d" + msgstr "Erreur internal du compilateur dans %s, à %s:%d" + + #: diagnostic.c:1497 + #, c-format + msgid "In file included from %s:%d" + msgstr "Dans le fichier inclus à partir de %s:%d" + + #: diagnostic.c:1500 + #, c-format + msgid "" + ",\n" + " from %s:%d" + msgstr "" + ",\n" + " à partir de %s:%d" + + #: diagnostic.c:1501 + msgid ":\n" + msgstr ":\n" + + #: diagnostic.c:1534 diagnostic.c:1551 + #, c-format + msgid "`%s' is deprecated (declared at %s:%d)" + msgstr "« %s » est déprécié (déclaré à %s:%d)" + + #: diagnostic.c:1554 + #, c-format + msgid "`%s' is deprecated" + msgstr "« %s » est déprécié" + + #: diagnostic.c:1557 + #, c-format + msgid "type is deprecated (declared at %s:%d)" + msgstr "type déprécié (déclaré à %s:%d)" + + #: diagnostic.c:1560 + msgid "type is deprecated" + msgstr "type déprécié" + + #: dwarf2out.c:3056 + #, c-format + msgid "DW_LOC_OP %s not implemented\n" + msgstr "DW_LOC_OP %s n'est pas implanté\n" + + #: dwarfout.c:2089 + #, c-format + msgid "internal regno botch: regno = %d\n" + msgstr "regno interne mal fait: regno = %d\n" + + #: dwarfout.c:6291 + msgid "can't get current directory" + msgstr "ne peut repérer le répertoire courant" + + #: emit-rtl.c:1098 + msgid "can't access real part of complex value in hard register" + msgstr "ne peut accéder la partie réelle d'une valeur complexe dans le registre matériel" + + #: emit-rtl.c:1120 + msgid "can't access imaginary part of complex value in hard register" + msgstr "ne peut accéder la partie imaginaire d'une valeur complexe dans le registre matériel" + + #: emit-rtl.c:3271 + msgid "ICE: emit_insn used where emit_jump_insn needed:\n" + msgstr "ICE: emit_insn utilisé où emit_jump_insn est attendu:\n" + + #: errors.c:136 + #, c-format + msgid "abort in %s, at %s:%d" + msgstr "abandon dans %s, à %s:%d" + + #: except.c:382 + msgid "exception handling disabled, use -fexceptions to enable" + msgstr "traitement d'exceptions désactivé, utiliser -fexceptions pour l'activer" + + #: except.c:3235 + msgid "argument of `__builtin_eh_return_regno' must be constant" + msgstr "argument de « __builtin_eh_return_regno » doit être une constante" + + #: except.c:3346 except.c:3368 + msgid "__builtin_eh_return not supported on this target" + msgstr "« __builtin_eh_return » n'est pas supportée sur cette cible" + + #: explow.c:1369 + msgid "stack limits not supported on this target" + msgstr "limites de pile ne sont pas supportées sur cette cible" + + #: expr.c:2948 + msgid "function using short complex types cannot be inline" + msgstr "foncton utilsant un type complex short ne peut être en ligne" + + #: expr.c:5810 expr.c:5819 expr.c:5828 expr.c:5833 expr.c:6120 expr.c:6136 + msgid "unsupported wide integer operation" + msgstr "opération sur de large entier n'est pas supportée" + + #: expr.c:6185 + #, c-format + msgid "prior parameter's size depends on `%s'" + msgstr "taille du paramètre précédent dépend de « %s »" + + #: expr.c:6531 + msgid "returned value in block_exit_expr" + msgstr "valeur retournée dans block_exit_expr" + + #: final.c:1209 + msgid "negative insn length" + msgstr "longueur négative insn" + + #: final.c:2628 + msgid "could not split insn" + msgstr "n'a pu séparer insn" + + #: final.c:2976 + msgid "invalid `asm': " + msgstr "« asm » invalide: " + + #: final.c:3160 + msgid "nested assembly dialect alternatives" + msgstr "assemblage de dialectes alternatifs imbriqués" + + #: final.c:3177 final.c:3189 + msgid "unterminated assembly dialect alternative" + msgstr "assemblage de dialectes alternatifs non terminé" + + #: final.c:3233 + #, c-format + msgid "operand number missing after %%-letter" + msgstr "numéro d'opérande manquant après %%-letter" + + #: final.c:3236 final.c:3275 + msgid "operand number out of range" + msgstr "nombre d'opérandes hors gamme" + + #: final.c:3294 + #, c-format + msgid "invalid %%-code" + msgstr "%%-code est invalide" + + #: final.c:3325 + #, c-format + msgid "`%%l' operand isn't a label" + msgstr "opérande «%%l» n'est pas une étiquette" + + #. We can't handle floating point constants; + #. PRINT_OPERAND must handle them. + #: final.c:3432 vmsdbgout.c:478 config/i386/i386.c:5315 config/pdp11/pdp11.c:1570 + msgid "floating constant misused" + msgstr "constante flottante mal utilisée" + + #: final.c:3488 vmsdbgout.c:535 config/i386/i386.c:5369 config/pdp11/pdp11.c:1617 + msgid "invalid expression as operand" + msgstr "expression invalide comme opérande" + + #: flow.c:354 + msgid "function might be possible candidate for attribute `noreturn'" + msgstr "fonction peut être une possible candidate pour l'attribut « norreturn »" + + #: flow.c:359 + msgid "`noreturn' function does return" + msgstr "fonction avec « noreturn » effectue des retour" + + #: flow.c:378 + msgid "control reaches end of non-void function" + msgstr "contrôle a atteint la fin non void de la fonction" + + #: flow.c:1600 + msgid "Attempt to delete prologue/epilogue insn:" + msgstr "Tentative pour détruire le prologue/épilogue insn:" + + #: fold-const.c:3135 fold-const.c:3148 + #, c-format + msgid "comparison is always %d due to width of bit-field" + msgstr "comparaison est toujours %d en raison de la largeur du champ de bits" + + #: fold-const.c:4190 fold-const.c:4207 + #, c-format + msgid "comparison is always %d" + msgstr "comparaison est toujours %d" + + #: fold-const.c:4338 + msgid "`or' of unmatched not-equal tests is always 1" + msgstr "« or » de tests non pairé de non égalité est troujours 1" + + #: fold-const.c:4343 + msgid "`and' of mutually exclusive equal-tests is always 0" + msgstr "« and » de tests d'égalité mutuellement exclusifs est toujours 0" + + #: function.c:906 varasm.c:1530 + #, c-format + msgid "size of variable `%s' is too large" + msgstr "taille de la variable « %s » est trop grande" + + #: function.c:5445 + #, c-format + msgid "`%s' might be used uninitialized in this function" + msgstr "« %s » pourrait être utilisé sans être initialisé dans cette fonction" + + #: function.c:5452 + #, c-format + msgid "variable `%s' might be clobbered by `longjmp' or `vfork'" + msgstr "variable « %s » pourrait être maltraitée par un «longjmp» ou un «vfork »" + + #: function.c:5471 + #, c-format + msgid "argument `%s' might be clobbered by `longjmp' or `vfork'" + msgstr "argument « %s » pourrait être maltraitée par un «longjmp» ou un «vfork »" + + #: function.c:6337 + msgid "function returns an aggregate" + msgstr "fonction retourne un aggrégat" + + #: function.c:6856 + #, c-format + msgid "unused parameter `%s'" + msgstr "paramètre « %s » inutilisé" + + #: gcc.c:1102 + #, c-format + msgid "ambiguous abbreviation %s" + msgstr "abréviation %s est ambiguë" + + #: gcc.c:1129 + #, c-format + msgid "incomplete `%s' option" + msgstr "option « %s » est incomplète" + + #: gcc.c:1140 + #, c-format + msgid "missing argument to `%s' option" + msgstr "argument manquant à l'option « %s »" + + #: gcc.c:1153 + #, c-format + msgid "extraneous argument to `%s' option" + msgstr "argument superflu à l'option « %s »" + + #: gcc.c:1460 + msgid "Using built-in specs.\n" + msgstr "Utilisation des specs internes.\n" + + #: gcc.c:1634 + #, c-format + msgid "" + "Setting spec %s to '%s'\n" + "\n" + msgstr "" + "Initialisation des spec %s à « %s »\n" + "\n" + + #: gcc.c:1732 + #, c-format + msgid "Reading specs from %s\n" + msgstr "Lecture des spécification à partir de %s\n" + + #: gcc.c:1830 gcc.c:1849 + #, c-format + msgid "specs %%include syntax malformed after %ld characters" + msgstr "syntaxe des specs %%include mal composée après %ld caractères" + + #: gcc.c:1857 + #, c-format + msgid "could not find specs file %s\n" + msgstr "ne peut repérer le fichiers des specs %s\n" + + #: gcc.c:1873 gcc.c:1881 gcc.c:1890 gcc.c:1899 + #, c-format + msgid "specs %%rename syntax malformed after %ld characters" + msgstr "specs de la syntaxe %%rename mal composées après %ld caractères" + + #: gcc.c:1908 + #, c-format + msgid "specs %s spec was not found to be renamed" + msgstr "specs de la spécification %s n'a pas été trouvé pour être renommer" + + #: gcc.c:1915 + #, c-format + msgid "rename spec %s to %s\n" + msgstr "renommé les specs %s à %s\n" + + #: gcc.c:1917 + #, c-format + msgid "" + "spec is '%s'\n" + "\n" + msgstr "" + "spec est « %s »\n" + "\n" + + #: gcc.c:1930 + #, c-format + msgid "specs unknown %% command after %ld characters" + msgstr "specs inconnus de la commande %% après %ld caractères" + + #: gcc.c:1941 gcc.c:1954 + #, c-format + msgid "specs file malformed after %ld characters" + msgstr "fichier de specs mal composé après %ld caractères" + + #: gcc.c:2008 + msgid "spec file has no spec for linking" + msgstr "fichier de specs n'a pas de spécification pour l'édition de liens" + + #: gcc.c:2720 + msgid "-pipe not supported" + msgstr "-pipe n'est pas supporté" + + #: gcc.c:2774 + msgid "" + "\n" + "Go ahead? (y or n) " + msgstr "" + "\n" + "Aller de l'avant? (y ou n) " + + #: gcc.c:2873 + #, c-format + msgid "" + "Internal error: %s (program %s)\n" + "Please submit a full bug report.\n" + "See %s for instructions." + msgstr "" + "Erreur internal error: %s (programme %s)\n" + "SVP soumettre un rapport complet d'anomalies.\n" + "Consulter %s pour les instructions." + + #: gcc.c:2891 + #, c-format + msgid "# %s %.2f %.2f\n" + msgstr "# %s %.2f %.2f\n" + + #: gcc.c:3024 + #, c-format + msgid "Usage: %s [options] file...\n" + msgstr "Usage: %s [options] fichier...\n" + + #: gcc.c:3025 + msgid "Options:\n" + msgstr "Options:\n" + + #: gcc.c:3027 + msgid " -pass-exit-codes Exit with highest error code from a phase\n" + msgstr " -pass-exit-codes quitter avec le plus grand code d'erreur de la phase\n" + + #: gcc.c:3028 + msgid " --help Display this information\n" + msgstr " --help afficher l'aide mémoire\n" + + #: gcc.c:3029 + msgid " --target-help Display target specific command line options\n" + msgstr " --target-help afficher les options spécifiques de la ligne de commande\n" + + #: gcc.c:3031 + msgid " (Use '-v --help' to display command line options of sub-processes)\n" + msgstr " (Utiliser «-v --help» pour afficher les options de la ligne de commande des sous-processus)\n" + + #: gcc.c:3032 + msgid " -dumpspecs Display all of the built in spec strings\n" + msgstr " -dumpspecs afficher tous les construits des chaînes de specs\n" + + #: gcc.c:3033 + msgid " -dumpversion Display the version of the compiler\n" + msgstr " -dumpversion afficher la version du compilateur\n" + + #: gcc.c:3034 + msgid " -dumpmachine Display the compiler's target processor\n" + msgstr " -dumpmachine afficher le processeur ciblé par le compilateur\n" + + #: gcc.c:3035 + msgid " -print-search-dirs Display the directories in the compiler's search path\n" + msgstr " -print-search-dirs afficher les répertoires du chemin de recherche du compiltateur\n" + + #: gcc.c:3036 + msgid " -print-libgcc-file-name Display the name of the compiler's companion library\n" + msgstr " -print-libgcc-file-name afficher le nom de la librairie compagne du compilateur\n" + + #: gcc.c:3037 + msgid " -print-file-name= Display the full path to library \n" + msgstr " -print-file-name= afficher le chemin d'accès complet vers la librairie \n" + + #: gcc.c:3038 + msgid " -print-prog-name= Display the full path to compiler component \n" + msgstr " -print-prog-name= afficher le chemin d'accès complet vers le composant du compilateur \n" + + #: gcc.c:3039 + msgid " -print-multi-directory Display the root directory for versions of libgcc\n" + msgstr " -print-multi-directory afficher la racine du répertoire des version libgcc\n" + + #: gcc.c:3040 + msgid "" + " -print-multi-lib Display the mapping between command line options and\n" + " multiple library search directories\n" + msgstr "" + " -print-multi-lib afficher la table de projection entre les options de la ligne de commande\n" + " les multiples répertoires de recherches des librairies\n" + + #: gcc.c:3043 + msgid " -Wa, Pass comma-separated on to the assembler\n" + msgstr " -Wa, passer les séparées par des virgules à l'assembleur\n" + + #: gcc.c:3044 + msgid " -Wp, Pass comma-separated on to the preprocessor\n" + msgstr " -Wp, passer les séparées par des virgules au préprocesseur\n" + + #: gcc.c:3045 + msgid " -Wl, Pass comma-separated on to the linker\n" + msgstr " -Wl, passer les séparées par des virgules à l'éditeur de liens\n" + + #: gcc.c:3046 + msgid " -Xlinker Pass on to the linker\n" + msgstr " -Xlinker passer l' à l'éditeur de liens\n" + + #: gcc.c:3047 + msgid " -save-temps Do not delete intermediate files\n" + msgstr " -save-temps ne pas détruire les fichiers intermédiaires\n" + + #: gcc.c:3048 + msgid " -pipe Use pipes rather than intermediate files\n" + msgstr " -pipe utiliser des pipes au lieu de fichiers intermédiares\n" + + #: gcc.c:3049 + msgid " -time Time the execution of each subprocess\n" + msgstr " -time mesurer le temps d'exécution de chaque sous-processus\n" + + #: gcc.c:3050 + msgid " -specs= Override built-in specs with the contents of \n" + msgstr " -specs= écraser les specs internes à l'aide du contenu du \n" + + #: gcc.c:3051 + msgid " -std= Assume that the input sources are for \n" + msgstr " -std= assumer que les fichiers sources respectent le \n" + + #: gcc.c:3052 + msgid " -B Add to the compiler's search paths\n" + msgstr " -B ajouter le aux chemins de recherche du compilateur\n" + + #: gcc.c:3053 + msgid " -b Run gcc for target , if installed\n" + msgstr " -b exécuter gcc pour la cible, si installé\n" + + #: gcc.c:3054 + msgid " -V Run gcc version number , if installed\n" + msgstr " -V exécuter le numéro de de gcc, si installée\n" + + #: gcc.c:3055 + msgid " -v Display the programs invoked by the compiler\n" + msgstr " -v afficher les programmes invoqués par le compilateur\n" + + #: gcc.c:3056 + msgid " -### Like -v but options quoted and commands not executed\n" + msgstr " -### identique à -v mais les options et les commandes entre guillemets ne sont pas exécutées\n" + + #: gcc.c:3057 + msgid " -E Preprocess only; do not compile, assemble or link\n" + msgstr " -E pré-traiter seulement; ne pas compiler, assembler ou éditer les liens\n" + + #: gcc.c:3058 + msgid " -S Compile only; do not assemble or link\n" + msgstr " -S compiler seulement; ne pas assembler ou éditer les liens\n" + + #: gcc.c:3059 + msgid " -c Compile and assemble, but do not link\n" + msgstr " -S compiler et assembler, mais ne pas éditer les liens\n" + + #: gcc.c:3060 + msgid " -o Place the output into \n" + msgstr " -o placer la sortie dans le \n" + + #: gcc.c:3061 + msgid "" + " -x Specify the language of the following input files\n" + " Permissable languages include: c c++ assembler none\n" + " 'none' means revert to the default behavior of\n" + " guessing the language based on the file's extension\n" + msgstr "" + " -x spécifier le langage des fichiers d'entrée parmi les\n" + " langages permis: c c++ assembler none\n" + " « none » signifiant d'utiliser le comportement par défaut\n" + " en tentant d'identifier le langage par l'extension du fichier\n" + + #: gcc.c:3068 + #, c-format + msgid "" + "\n" + "Options starting with -g, -f, -m, -O, -W, or --param are automatically\n" + " passed on to the various sub-processes invoked by %s. In order to pass\n" + " other options on to these processes the -W options must be used.\n" + msgstr "" + "\n" + "Options débutant par -g, -f, -m, -O, -W, ou --param sont automatiquement\n" + " passés aux divers sous-processus invoqués par %s. Afin de passer\n" + " les autres options à ces processus l'option -W doit être utilisé.\n" + + #. translate_options () has turned --version into -fversion. + #: gcc.c:3348 + #, c-format + msgid "%s (GCC) %s\n" + msgstr "%s (GCC) %s\n" + + #: gcc.c:3349 + msgid "Copyright (C) 2002 Free Software Foundation, Inc.\n" + msgstr "Copyright © 2002 Free Software Foundation, Inc.\n" + + #: gcc.c:3351 gcov.c:320 + msgid "" + "This is free software; see the source for copying conditions. There is NO\n" + "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" + "\n" + msgstr "" + "Ce logiciel est libre; voir les sources pour les conditions de copie. Il n'y a PAS\n" + "GARANTIE; ni implicite pour le MARCHANDAGE ou pour un BUT PARTICULIER.\n" + "\n" + + #: gcc.c:3450 + msgid "argument to `-Xlinker' is missing" + msgstr "argument de «-Xlinker» est manquant" + + #: gcc.c:3458 + msgid "argument to `-l' is missing" + msgstr "argument pour «-l» est manquant" + + #: gcc.c:3475 + msgid "argument to `-specs' is missing" + msgstr "argument de «-specs» est manquant" + + #: gcc.c:3490 + msgid "argument to `-specs=' is missing" + msgstr "argument de «-specs=» est manquant" + + #: gcc.c:3521 + msgid "argument to `-b' is missing" + msgstr "argument de «-b» est manquant" + + #: gcc.c:3536 + msgid "argument to `-B' is missing" + msgstr "argument de «-B» est manquant" + + #: gcc.c:3606 + msgid "argument to `-V' is missing" + msgstr "argument de «-V» est manquant" + + #: gcc.c:3627 gcc.c:3634 gcc.c:3641 + msgid "invalid version number format" + msgstr "format de numéro de verson invalide" + + #: gcc.c:3752 + msgid "cannot specify -o with -c or -S and multiple compilations" + msgstr "ne peut spécifier -o avec -c ou -S et de multiples compilations" + + #: gcc.c:3923 + msgid "warning: -pipe ignored because -save-temps specified" + msgstr "AVERTISSEMENT: -pipe ignoré parce que -save-temps a été spécifié" + + #: gcc.c:3927 + msgid "warning: -pipe ignored because -time specified" + msgstr "AVERTISSEMENT: -pipe ignoré parce que -time a été spécifié" + + #: gcc.c:3939 + msgid "argument to `-x' is missing" + msgstr "argument pour «-x» est manquant" + + #: gcc.c:3967 + #, c-format + msgid "argument to `-%s' is missing" + msgstr "argument pour «-%s» est manquant" + + #: gcc.c:4028 + #, c-format + msgid "warning: `-x %s' after last input file has no effect" + msgstr "AVERTISSEMENT: «-x %s» après le dernier fichier d'entrée n'a pas d'effet" + + #: gcc.c:4327 + msgid "invalid specification! Bug in cc" + msgstr "spécification invalide! Bug dans cc." + + #: gcc.c:4476 + #, c-format + msgid "%s\n" + msgstr "%s\n" + + #. Catch the case where a spec string contains something like + #. '%{foo:%*}'. ie there is no * in the pattern on the left + #. hand side of the :. + #: gcc.c:5029 + #, c-format + msgid "spec failure: '%%*' has not been initialized by pattern match" + msgstr "échec du spec: «%%*» n'a pas été initialisé par concordance du patron" + + #: gcc.c:5038 + #, c-format + msgid "warning: use of obsolete %%[ operator in specs" + msgstr "AVERTISSEMENT: utilisation obsolète de l'opérateur %%[ dans les specs" + + #: gcc.c:5056 + #, c-format + msgid "Processing spec %c%s%c, which is '%s'\n" + msgstr "Traitement du spec %c%s%c, lequel est « %s »\n" + + #: gcc.c:5181 + #, c-format + msgid "spec failure: unrecognized spec option '%c'" + msgstr "échec de spec: option « %c » de spec non reconnue" + + #: gcc.c:5291 + msgid "mismatched braces in specs" + msgstr "accolades non concordantes dans les specs" + + #: gcc.c:5969 + #, c-format + msgid "unrecognized option `-%s'" + msgstr "option «-%s» non reconnue" + + #: gcc.c:5975 + #, c-format + msgid "install: %s%s\n" + msgstr "installés: %s%s\n" + + #: gcc.c:5976 + #, c-format + msgid "programs: %s\n" + msgstr "programmes: %s\n" + + #: gcc.c:5977 + #, c-format + msgid "libraries: %s\n" + msgstr "libraries: %s\n" + + #: gcc.c:6025 + msgid "" + "\n" + "For bug reporting instructions, please see:\n" + msgstr "" + "\n" + "Pour les instructons afin de rapporter des anomales, SVP consulter:\n" + + #: gcc.c:6041 + #, c-format + msgid "Configured with: %s\n" + msgstr "Configuré avec: %s\n" + + #: gcc.c:6055 + #, c-format + msgid "Thread model: %s\n" + msgstr "Modèle de thread: %s\n" + + #: gcc.c:6066 + #, c-format + msgid "gcc version %s\n" + msgstr "version gcc %s\n" + + #: gcc.c:6068 + #, c-format + msgid "gcc driver version %s executing gcc version %s\n" + msgstr "version du pilote gcc %s exécutant le version %s de gcc\n" + + #: gcc.c:6076 + msgid "no input files" + msgstr "pas de fichier à l'entrée" + + #: gcc.c:6114 + #, c-format + msgid "%s: %s compiler not installed on this system" + msgstr "%s: %s compilateur n'est pas installé sur ce système" + + #: gcc.c:6189 + #, c-format + msgid "%s: linker input file unused because linking not done" + msgstr "%s: fichier d'entrée d'édition de liens n'est pas utilisé parce l'édition de lien n'a pas été faite" + + #: gcc.c:6232 + #, c-format + msgid "language %s not recognized" + msgstr "language %s n'est pas reconnu" + + #: gcc.c:6335 + msgid "internal gcc abort" + msgstr "abandon interne de gcc" + + #: gcov.c:282 + msgid "Internal gcov abort.\n" + msgstr "Abandon interne de gcov.\n" + + #: gcov.c:295 + msgid "" + "Usage: gcov [OPTION]... SOURCEFILE\n" + "\n" + msgstr "" + "Usage: gcov [OPTION]... FICHIER-SOURCE\n" + "\n" + + #: gcov.c:296 + msgid "" + "Print code coverage information.\n" + "\n" + msgstr "" + "Produire les informations de la couverture du code.\n" + "\n" + + #: gcov.c:297 + msgid " -h, --help Print this help, then exit\n" + msgstr " -h, --help afficher l'aide mémoire\n" + + #: gcov.c:298 + msgid " -v, --version Print version number, then exit\n" + msgstr " -v, --version exécuter le numéro de de gcc, si installée\n" + + #: gcov.c:299 + msgid " -b, --branch-probabilities Include branch probabilities in output\n" + msgstr " -b, --branch-probabilities inclure les probabilités de branchement dans la sortie\n" + + #: gcov.c:300 + msgid "" + " -c, --branch-counts Given counts of branches taken\n" + " rather than percentages\n" + msgstr "" + " -c, --branch-counts donner le décompte de branchements pris\n" + " plutôt que les pourcentages\n" + + #: gcov.c:302 + msgid " -n, --no-output Do not create an output file\n" + msgstr " -n, --no-output ne créer de fichier de sortie\n" + + #: gcov.c:303 + msgid "" + " -l, --long-file-names Use long output file names for included\n" + " source files\n" + msgstr "" + " -l, --long-file-names utiliser des longs noms de fichiers pour\n" + " les fichier sources d'inclusion\n" + + #: gcov.c:305 + msgid " -f, --function-summaries Output summaries for each function\n" + msgstr " -f, --function-summaries produire un sommaire pour chaque fonction\n" + + #: gcov.c:306 + msgid " -o, --object-directory OBJDIR Search for object files in OBJDIR\n" + msgstr " -o, --object-directory RÉP rechercher les fichiers objets dans le RÉPertoire\n" + + #: gcov.c:307 + #, c-format + msgid "" + "\n" + "For bug reporting instructions, please see:\n" + "%s.\n" + msgstr "" + "\n" + "Pour les instructons afin de rapporter des anomales, SVP consulter:\n" + "%s.\n" + + #: gcov.c:317 + #, c-format + msgid "gcov (GCC) %s\n" + msgstr "gcov (GCC) %s\n" + + #: gcov.c:318 + msgid "Copyright (C) 2001 Free Software Foundation, Inc.\n" + msgstr "Copyright © 2001 Free Software Foundation, Inc.\n" + + #: gcov.c:462 + #, c-format + msgid "Could not open basic block file %s.\n" + msgstr "Ne pourrait pas ouvrir le fichier de blocs de base %s.\n" + + #: gcov.c:471 + #, c-format + msgid "Could not open data file %s.\n" + msgstr "Ne pourrait pas ouvrir le fichier de données %s.\n" + + #: gcov.c:472 + msgid "Assuming that all execution counts are zero.\n" + msgstr "Assumer que tous les compteurs d'exécution sont à zéro.\n" + + #: gcov.c:478 + #, c-format + msgid "Could not open program flow graph file %s.\n" + msgstr "Ne pourrait pas ouvrir le fichier de flux du programm %s.\n" + + #: gcov.c:489 + #, c-format + msgid "No executable code associated with file %s.\n" + msgstr "Aucun code exécutable associé avec le fichier %s.\n" + + #: gcov.c:789 + msgid ".da file contents exhausted too early\n" + msgstr "Le contenu du fichier .da a été épuisé trop rapidement\n" + + #: gcov.c:792 + msgid ".da file contents not exhausted\n" + msgstr "Le contenu du fichier .da n'a pas été épuisé\n" + + #: gcov.c:973 + #, c-format + msgid "%6.2f%% of %d source lines executed in function %s\n" + msgstr "%6.2f%% des lignes sources %d exécutées dans la fonction %s\n" + + #: gcov.c:977 + #, c-format + msgid "No executable source lines in function %s\n" + msgstr "Pas de lignes sources exécutables dans la fonction %s\n" + + #: gcov.c:984 + #, c-format + msgid "%6.2f%% of %d branches executed in function %s\n" + msgstr "%6.2f%% de branchements %d exécutés dans la fonction %s\n" + + #: gcov.c:988 + #, c-format + msgid "%6.2f%% of %d branches taken at least once in function %s\n" + msgstr "%6.2f%% de branchements %d pris au mons une fois dans la fonction %s\n" + + #: gcov.c:993 + #, c-format + msgid "No branches in function %s\n" + msgstr "Pas de branchement dans la fonction %s\n" + + #: gcov.c:995 + #, c-format + msgid "%6.2f%% of %d calls executed in function %s\n" + msgstr "%6.2f%% d'appels %d exécutés dans la fonction %s\n" + + #: gcov.c:999 + #, c-format + msgid "No calls in function %s\n" + msgstr "Pas d'appel dans la fonction %s\n" + + #: gcov.c:1126 + #, c-format + msgid "didn't use all bb entries of graph, function %s\n" + msgstr "N'a pas utiliser toutes les entrées bb du graphe, fonction %s\n" + + #: gcov.c:1128 + #, c-format + msgid "block_num = %ld, num_blocks = %d\n" + msgstr "block_num = %ld, num_blocks = %d\n" + + #: gcov.c:1166 + #, c-format + msgid "ERROR: too many basic blocks in .bb file %s\n" + msgstr "ERREUR: trop de blocs de base dans le fichier .bb %s\n" + + #: gcov.c:1243 + #, c-format + msgid "%6.2f%% of %d source lines executed in file %s\n" + msgstr "%6.2f%% de lignes sources %d exécutés dans le fichier %s\n" + + #: gcov.c:1247 + #, c-format + msgid "No executable source lines in file %s\n" + msgstr "Pas de ligne exécutable dans le fichier %s\n" + + #: gcov.c:1254 + #, c-format + msgid "%6.2f%% of %d branches executed in file %s\n" + msgstr "%6.2f%% de branchements %d exécutés dans le fichier %s\n" + + #: gcov.c:1258 + #, c-format + msgid "%6.2f%% of %d branches taken at least once in file %s\n" + msgstr "%6.2f%% de branchements %d pris au moins une fois dans le fichier %s\n" + + #: gcov.c:1263 + #, c-format + msgid "No branches in file %s\n" + msgstr "Pas de branchement dans le fichier %s\n" + + #: gcov.c:1265 + #, c-format + msgid "%6.2f%% of %d calls executed in file %s\n" + msgstr "%6.2f%% d'appels %d exécutés dans le fichier %s\n" + + #: gcov.c:1269 + #, c-format + msgid "No calls in file %s\n" + msgstr "Pas d'appel dans le fichier %s\n" + + #: gcov.c:1281 + #, c-format + msgid "Could not open source file %s.\n" + msgstr "N'a pu ouvrir le fichier source %s.\n" + + #: gcov.c:1331 + #, c-format + msgid "Could not open output file %s.\n" + msgstr "N'a pu ouvrir le fichier d'entrée %s.\n" + + #: gcov.c:1339 + #, c-format + msgid "Creating %s.\n" + msgstr "Création de %s.\n" + + #: gcov.c:1387 + #, c-format + msgid "call %d never executed\n" + msgstr "appel %d n'a jamais été exécuté\n" + + #: gcov.c:1396 + #, c-format + msgid "call %d returns = %s\n" + msgstr "appel %d a retourné = %s\n" + + #: gcov.c:1406 + #, c-format + msgid "call %d returns = %s%%\n" + msgstr "appel %d a retourné = %s%%\n" + + #: gcov.c:1413 + #, c-format + msgid "branch %d never executed\n" + msgstr "branchement %d n'a jamais été exécuté\n" + + #: gcov.c:1423 + #, c-format + msgid "branch %d taken = %s\n" + msgstr "branchement %d a pris = %s\n" + + #: gcov.c:1433 + #, c-format + msgid "branch %d taken = %s%%\n" + msgstr "branchement %d a pris = %s%%\n" + + #: gcov.c:1444 + #, c-format + msgid "Unexpected EOF while reading source file %s.\n" + msgstr "EOF inattendue lors de la lecture du fichier source %s.\n" + + #: gcse.c:758 + #, c-format + msgid "GCSE disabled: %d > 1000 basic blocks and %d >= 20 edges/basic block" + msgstr "GCSE désactivé: %d > 1000 blocs de base et %d >= 20 blocs edges/basic" + + #: gcse.c:770 + #, c-format + msgid "GCSE disabled: %d basic blocks and %d registers" + msgstr "GCSE désactivé: %d vlocs de base et %d registres" + + #: graph.c:421 profile.c:950 profile.c:958 toplev.c:1835 toplev.c:4978 f/com.c:14258 java/jcf-parse.c:950 java/jcf-parse.c:1099 java/lex.c:1790 objc/objc-act.c:529 + #, c-format + msgid "can't open %s" + msgstr "ne peut ouvrir %s" + + #: haifa-sched.c:190 + #, c-format + msgid "fix_sched_param: unknown param: %s" + msgstr "fix_sched_param: paramètre inconnu: %s" + + #: integrate.c:185 + msgid "function cannot be inline" + msgstr "fonction ne pas pas être en ligne" + + #: integrate.c:190 + msgid "varargs function cannot be inline" + msgstr "varargs de fonction ne peuvent par être en ligne" + + #: integrate.c:193 + msgid "function using alloca cannot be inline" + msgstr "fonction utilisant alloca ne pas pas être en ligne" + + #: integrate.c:196 + msgid "function using setjmp cannot be inline" + msgstr "fonction utilisant setjmp ne pas pas être en ligne" + + #: integrate.c:199 + msgid "function uses __builtin_eh_return" + msgstr "fonction utilise « __builtin_eh_return »" + + #: integrate.c:202 + msgid "function with nested functions cannot be inline" + msgstr "fonction avec fonctions imbriquées ne peut pas être en ligne" + + #: integrate.c:206 + msgid "function with label addresses used in initializers cannot inline" + msgstr "fonction avec étiquette d'adresses utilisée avec les initialiseurs ne peut pas être en ligne" + + #: integrate.c:213 integrate.c:257 + msgid "function too large to be inline" + msgstr "fonction trop grande pour être en ligne" + + #: integrate.c:223 + msgid "no prototype, and parameter address used; cannot be inline" + msgstr "pas de prototpe, et de adresse de paramètre utilisée; ne peut pas être en ligne" + + #: integrate.c:230 integrate.c:275 + msgid "inline functions not supported for this return value type" + msgstr "fonctions en ligne ne peuvent pas être supportées pour ce type de valeur retournée" + + #: integrate.c:235 + msgid "function with varying-size return value cannot be inline" + msgstr "fonction avec une valeur retournée de taille variable ne peut pas être en ligne" + + #: integrate.c:242 + msgid "function with varying-size parameter cannot be inline" + msgstr "fonction avec un paramètre de taille variable ne peut pas être en ligne" + + #: integrate.c:245 + msgid "function with transparent unit parameter cannot be inline" + msgstr "fonction avec une unité transparente de paramètre ne peut pas être en ligne" + + #: integrate.c:264 + msgid "function with computed jump cannot inline" + msgstr "fonction avec un saut calculé ne peut pas être en ligne" + + #: integrate.c:268 + msgid "function with nonlocal goto cannot be inline" + msgstr "fonction avec un goto non local ne peut pas être en ligne" + + #: integrate.c:282 + msgid "function with target specific attribute(s) cannot be inlined" + msgstr "fonction avec des attributs spécifiques à la cible ne peut pas être en ligne" + + #: line-map.c:198 + #, c-format + msgid "In file included from %s:%u" + msgstr "Dans le fichier inclus à partir de %s:%u" + + #. Translators note: this message is used in conjunction + #. with "In file included from %s:%ld" and some other + #. tricks. We want something like this: + #. + #. | In file included from sys/select.h:123, + #. | from sys/types.h:234, + #. | from userfile.c:31: + #. | bits/select.h:45: + #. + #. with all the "from"s lined up. + #. The trailing comma is at the beginning of this message, + #. and the trailing colon is not translated. + #: line-map.c:216 + #, c-format + msgid "" + ",\n" + " from %s:%u" + msgstr "" + ",\n" + " à partir de %s:%u" + + #. If we didn't find this parameter, issue an error message. + #: params.c:80 + #, c-format + msgid "invalid parameter `%s'" + msgstr "paramètre invalide « %s »" + + #: profile.c:429 + #, c-format + msgid "corrupted profile info: prob for %d-%d thought to be %d" + msgstr "info de profilage corrompu: prob pour %d-%d pense être %d " + + #: profile.c:975 + #, c-format + msgid "file %s not found, execution counts assumed to be zero" + msgstr "fichier %s non repéré, compteur d'exécution assumé être à zéro" + + #: profile.c:1022 + msgid ".da file contents exhausted too early" + msgstr "Le contenu du fichier .da a été épuisé trop rapidement" + + #: profile.c:1025 + msgid ".da file contents not exhausted" + msgstr "Le contenu du fichier .da n'a pas été épuisé" + + #: protoize.c:599 + #, c-format + msgid "%s: internal abort\n" + msgstr "%s: abandon interne\n" + + #: protoize.c:690 + #, c-format + msgid "%s: error writing file `%s': %s\n" + msgstr "%s: erreur d'écriture au fichier « %s »: %s\n" + + #: protoize.c:735 + #, c-format + msgid "%s: usage '%s [ -VqfnkN ] [ -i ] [ filename ... ]'\n" + msgstr "%s: usage «%s [ -VqfnkN ] [ -i ] [ nom-de-fichier ... ]»\n" + + #: protoize.c:738 + #, c-format + msgid "%s: usage '%s [ -VqfnkNlgC ] [ -B ] [ filename ... ]'\n" + msgstr "%s: usage «%s [ -VqfnkNlgC ] [ -B ] [ nom-de-fichier ... ]»\n" + + #: protoize.c:845 + #, c-format + msgid "%s: warning: no read access for file `%s'\n" + msgstr "%s: AVERTISSEMENT: aucun accès en lecture du fichier « %s »\n" + + #: protoize.c:853 + #, c-format + msgid "%s: warning: no write access for file `%s'\n" + msgstr "%s: AVERTISSEMENT: aucun accès en écriture du fichier « %s »\n" + + #: protoize.c:861 + #, c-format + msgid "%s: warning: no write access for dir containing `%s'\n" + msgstr "%s: AVERTISSEMENT: aucun accès en écriture du répertoire contenant « %s »\n" + + #. Catch cases like /.. where we try to backup to a + #. point above the absolute root of the logical file + #. system. + #: protoize.c:1279 + #, c-format + msgid "%s: invalid file name: %s\n" + msgstr "%s: nom de fichier invalide: %s\n" + + #: protoize.c:1431 + #, c-format + msgid "%s: %s: can't get status: %s\n" + msgstr "%s: %s: ne peut obtenir l'état: %s\n" + + #: protoize.c:1452 + #, c-format + msgid "" + "\n" + "%s: fatal error: aux info file corrupted at line %d\n" + msgstr "" + "\n" + "%s: erreur fatale: fichier auxiliaire d'infos à la ligne %d\n" + + #: protoize.c:1788 + #, c-format + msgid "%s:%d: declaration of function `%s' takes different forms\n" + msgstr "%s:%d: déclaration de fonction « %s » prend différentes formes\n" + + #: protoize.c:2046 + #, c-format + msgid "%s: compiling `%s'\n" + msgstr "%s: en compilation « %s »\n" + + #: protoize.c:2069 + #, c-format + msgid "%s: wait: %s\n" + msgstr "%s: en attente: %s\n" + + #: protoize.c:2074 + #, c-format + msgid "%s: subprocess got fatal signal %d\n" + msgstr "%s: sous-processus a reçu le signal fatal %d\n" + + #: protoize.c:2082 + #, c-format + msgid "%s: %s exited with status %d\n" + msgstr "%s: %s a terminé avec le statut %d\n" + + #: protoize.c:2134 + #, c-format + msgid "%s: warning: missing SYSCALLS file `%s'\n" + msgstr "%s: AVERTISSEMENT: fichier des SYSCALLS « %s » est manquant\n" + + #: protoize.c:2143 protoize.c:2172 + #, c-format + msgid "%s: can't read aux info file `%s': %s\n" + msgstr "%s: ne peut lire le fichier auxiliaire d'infos « %s »: %s\n" + + #: protoize.c:2188 protoize.c:2216 + #, c-format + msgid "%s: can't get status of aux info file `%s': %s\n" + msgstr "%s: ne peut obtenir l'état du fichier auxiliaire d'infos « %s »: %s\n" + + #: protoize.c:2244 + #, c-format + msgid "%s: can't open aux info file `%s' for reading: %s\n" + msgstr "%s: ne peut ouvrir le fichier auxiliaire d'infos « %s » en lecture: %s\n" + + #: protoize.c:2262 + #, c-format + msgid "%s: error reading aux info file `%s': %s\n" + msgstr "%s: erreur lors de la lecture du fichier auxilaire d'infos « %s »: %s\n" + + #: protoize.c:2275 + #, c-format + msgid "%s: error closing aux info file `%s': %s\n" + msgstr "%s: erreur lors de la fermeture du fichier auxiliaire d'infos « %s »: %s\n" + + #: protoize.c:2291 + #, c-format + msgid "%s: can't delete aux info file `%s': %s\n" + msgstr "%s: ne peut détruire le fichier auxiliaire d'infos « %s »: %s\n" + + #: protoize.c:2373 protoize.c:4375 + #, c-format + msgid "%s: can't delete file `%s': %s\n" + msgstr "%s: ne peut détruire le fichier « %s »: %s\n" + + #: protoize.c:2452 + #, c-format + msgid "%s: warning: can't rename file `%s' to `%s': %s\n" + msgstr "%s: AVERTISSEMENT: ne peut renommer le fichier « %s » à « %s »: %s\n" + + #: protoize.c:2577 + #, c-format + msgid "%s: conflicting extern definitions of '%s'\n" + msgstr "%s: définitions externes conflictuelles de « %s »\n" + + #: protoize.c:2581 + #, c-format + msgid "%s: declarations of '%s' will not be converted\n" + msgstr "%s: déclarations de « %s » ne seront pas converties\n" + + #: protoize.c:2583 + #, c-format + msgid "%s: conflict list for '%s' follows:\n" + msgstr "%s: liste conflictuelle pour « %s » suit:\n" + + #: protoize.c:2616 + #, c-format + msgid "%s: warning: using formals list from %s(%d) for function `%s'\n" + msgstr "%s: AVERTISSEMENT: using la liste des formels de %s(%d) pour la fonction « %s »\n" + + #: protoize.c:2656 + #, c-format + msgid "%s: %d: `%s' used but missing from SYSCALLS\n" + msgstr "%s: %d: « %s » utilisé mais manquant dans les SYSCALLS\n" + + #: protoize.c:2662 + #, c-format + msgid "%s: %d: warning: no extern definition for `%s'\n" + msgstr "%s: %d: AVERTISSEMENT: pas de définition externe pour « %s »\n" + + #: protoize.c:2693 + #, c-format + msgid "%s: warning: no static definition for `%s' in file `%s'\n" + msgstr "%s: AVERTISSEMENT: pas de définition statique pour « %s » dans le fichier« %s »\n" + + #: protoize.c:2699 + #, c-format + msgid "%s: multiple static defs of `%s' in file `%s'\n" + msgstr "%s: multiples définitions statiques de « %s » dans le fichier « %s »\n" + + #: protoize.c:2872 protoize.c:2875 + #, c-format + msgid "%s: %d: warning: source too confusing\n" + msgstr "%s: %d: AVERTISSEMENT: trop de confusions dans le source\n" + + #: protoize.c:3081 + #, c-format + msgid "%s: %d: warning: varargs function declaration not converted\n" + msgstr "%s: %d: AVERTISSEMENT: déclaration de varargs de fonction non convertis\n" + + #: protoize.c:3096 + #, c-format + msgid "%s: declaration of function `%s' not converted\n" + msgstr "%s: déclaration de la fonction « %s » non convertie\n" + + #: protoize.c:3219 + #, c-format + msgid "%s: warning: too many parameter lists in declaration of `%s'\n" + msgstr "%s: AVERTISSEMENT: trop de paramètres de listes dans la déclaration de « %s »\n" + + #: protoize.c:3240 + #, c-format + msgid "" + "\n" + "%s: warning: too few parameter lists in declaration of `%s'\n" + msgstr "" + "\n" + "%s: AVERTISSEMENT: trop peu de paramètres de listes dans la déclaration de « %s »\n" + + #: protoize.c:3338 + #, c-format + msgid "%s: %d: warning: found `%s' but expected `%s'\n" + msgstr "%s: %d: AVERTISSEMENT: a obtenu « %s » mais attendait « %s »\n" + + #: protoize.c:3516 + #, c-format + msgid "%s: local declaration for function `%s' not inserted\n" + msgstr "%s: déclaration locale pour la fonction « %s » n'a pas été insérée\n" + + #: protoize.c:3543 + #, c-format + msgid "" + "\n" + "%s: %d: warning: can't add declaration of `%s' into macro call\n" + msgstr "" + "\n" + "%s: %d: AVERTISSEMENT: ne peut ajouter une déclaration de « %s » dans l'appel macro\n" + + #: protoize.c:3617 + #, c-format + msgid "%s: global declarations for file `%s' not inserted\n" + msgstr "%s: déclarations globale du fichier « %s » n'ont pas été insérées\n" + + #: protoize.c:3708 protoize.c:3738 + #, c-format + msgid "%s: definition of function `%s' not converted\n" + msgstr "%s: définition de la fonction « %s » n'a pas été convertie\n" + + #: protoize.c:3727 + #, c-format + msgid "%s: %d: warning: definition of %s not converted\n" + msgstr "%s: %d: AVERTISSEMENT: définition de %s n'a pas été convertie\n" + + #: protoize.c:4057 + #, c-format + msgid "%s: found definition of `%s' at %s(%d)\n" + msgstr "%s: définition de « %s » trouvé à %s(%d)\n" + + #. If we make it here, then we did not know about this + #. function definition. + #: protoize.c:4073 + #, c-format + msgid "%s: %d: warning: `%s' excluded by preprocessing\n" + msgstr "%s: %d: AVERTISSEMENT: « %s » exclu par le préprocesseur\n" + + #: protoize.c:4076 + #, c-format + msgid "%s: function definition not converted\n" + msgstr "%s: définition de fonction n'a pas été convertie\n" + + #: protoize.c:4135 + #, c-format + msgid "%s: `%s' not converted\n" + msgstr "%s: « %s » n'a pas été converti\n" + + #: protoize.c:4143 + #, c-format + msgid "%s: would convert file `%s'\n" + msgstr "%s: devrait convertir le fichier « %s »\n" + + #: protoize.c:4146 + #, c-format + msgid "%s: converting file `%s'\n" + msgstr "%s: conversion du fichier « %s »\n" + + #: protoize.c:4156 + #, c-format + msgid "%s: can't get status for file `%s': %s\n" + msgstr "%s: ne peut obtenur l'état du fichier « %s »: %s\n" + + #: protoize.c:4198 + #, c-format + msgid "%s: can't open file `%s' for reading: %s\n" + msgstr "%s: ne peut ouvrir le fichier « %s » en lecture: %s\n" + + #: protoize.c:4213 + #, c-format + msgid "" + "\n" + "%s: error reading input file `%s': %s\n" + msgstr "" + "\n" + "%s: erreur de lecture du fichier d'entrée « %s »: %s\n" + + #: protoize.c:4247 + #, c-format + msgid "%s: can't create/open clean file `%s': %s\n" + msgstr "%s: ne peut créer/ouvrir un fichier propre « %s »: %s\n" + + #: protoize.c:4352 + #, c-format + msgid "%s: warning: file `%s' already saved in `%s'\n" + msgstr "%s: AVERTISSEMENT: fichier « %s » est déjà sauvegardé dans « %s »\n" + + #: protoize.c:4360 + #, c-format + msgid "%s: can't link file `%s' to `%s': %s\n" + msgstr "%s: ne peut lier le fichier « %s » à « %s »: %s\n" + + #: protoize.c:4390 + #, c-format + msgid "%s: can't create/open output file `%s': %s\n" + msgstr "%s: ne peut créer/ouvrier le fichier de sortie « %s »: %s\n" + + #: protoize.c:4423 + #, c-format + msgid "%s: can't change mode of file `%s': %s\n" + msgstr "%s: ne peut changer le mode du fichier « %s »: %s\n" + + #: protoize.c:4598 + #, c-format + msgid "%s: cannot get working directory: %s\n" + msgstr "%s: ne peut repérer le répertoire de travail: %s\n" + + #: protoize.c:4696 + #, c-format + msgid "%s: input file names must have .c suffixes: %s\n" + msgstr "%s: noms de fichiers d'entrée doivent avoir le suffixe .c: %s\n" + + #: real.c:824 real.c:1001 + msgid "conversion from NaN to int" + msgstr "conversion de NaN en int" + + #: real.c:847 + msgid "conversion from NaN to unsigned int" + msgstr "conversion de NaN en un int non signé" + + #: real.c:2730 + msgid "floating point overflow" + msgstr "débordement de virgule flottante" + + #: real.c:4395 real.c:6675 real.c:6756 + msgid "overflow on truncation to integer" + msgstr "débordement de troncation d'un entier" + + #: real.c:4467 + msgid "overflow on truncation to unsigned integer" + msgstr "débordement lors de la troncation d'un entier non signé" + + #: real.c:5812 + #, c-format + msgid "%s: argument domain error" + msgstr "%s: erreur d'argument de domaine" + + #: real.c:5813 + #, c-format + msgid "%s: function singularity" + msgstr "%s: singularité de fonction" + + #: real.c:5814 + #, c-format + msgid "%s: overflow range error" + msgstr "%s: erreur de débordement de bornes" + + #: real.c:5815 + #, c-format + msgid "%s: underflow range error" + msgstr "%s: erreur de sous débordement de bornes" + + #: real.c:5816 + #, c-format + msgid "%s: total loss of precision" + msgstr "%s: perte totale de précision" + + #: real.c:5817 + #, c-format + msgid "%s: partial loss of precision" + msgstr "%s: perte partielle de précision" + + #: real.c:5818 + #, c-format + msgid "%s: NaN - producing operation" + msgstr "%s: NaN - opération produite" + + #: reg-stack.c:677 + #, c-format + msgid "output constraint %d must specify a single register" + msgstr "Contrainte de sortie %d doit spécifier un simple registre" + + #: reg-stack.c:687 + #, c-format + msgid "output constraint %d cannot be specified together with \"%s\" clobber" + msgstr "contrainte de sortie %d ne doit pas être spécifié avec « %s » clobber" + + #: reg-stack.c:710 + msgid "output regs must be grouped at top of stack" + msgstr "registres de sortie doivent être regroupés au haut de la pile" + + #: reg-stack.c:747 + msgid "implicitly popped regs must be grouped at top of stack" + msgstr "les registres implicitement dépilés doivent être groupés au haut de la pile" + + #: reg-stack.c:766 + #, c-format + msgid "output operand %d must use `&' constraint" + msgstr "opérande de sortie %d doit utiliser la contrainte «&»" + + #: regclass.c:778 + #, c-format + msgid "can't use '%s' as a %s register" + msgstr "ne peut utiliser « %s » comme le registre %s" + + #: regclass.c:793 config/ia64/ia64.c:3840 config/ia64/ia64.c:3847 + #, c-format + msgid "unknown register name: %s" + msgstr "nom de registre inconnu: %s" + + #: regclass.c:804 + msgid "global register variable follows a function definition" + msgstr "variable registre globale suit la définition d'une fonction" + + #: regclass.c:808 + msgid "register used for two global register variables" + msgstr "registre utilisé pour deux variables registres globales" + + #: regclass.c:813 + msgid "call-clobbered register used for global register variable" + msgstr "registre maltraité par un appel utilisé par un variable registre globale" + + #: regrename.c:1845 + #, c-format + msgid "validate_value_data: [%u] Bad next_regno for empty chain (%u)" + msgstr "validate_value_data: [%u] next_regno erroné pour une chaîne vide (%u)" + + #: regrename.c:1857 + #, c-format + msgid "validate_value_data: Loop in regno chain (%u)" + msgstr "validate_value_data: boucle dans la chaîne regno (%u)" + + #: regrename.c:1860 + #, c-format + msgid "validate_value_data: [%u] Bad oldest_regno (%u)" + msgstr "validate_value_data: [%u] oldest_regno erroné (%u)" + + #: regrename.c:1872 + #, c-format + msgid "validate_value_data: [%u] Non-empty reg in chain (%s %u %i)" + msgstr "validate_value_data: [%u] registre non vide dans la chaîne (%s %u %i)" + + #: reload.c:1208 + msgid "cannot reload integer constant operand in `asm'" + msgstr "ne peut recharger l'opérande de constante entière dans « asm »" + + #: reload.c:1230 + msgid "impossible register constraint in `asm'" + msgstr "impossible de contraindre les registres en « asm »" + + #: reload.c:3389 + msgid "`&' constraint used with no register class" + msgstr "contrainte «&» utilisé sans classe registre" + + #: reload.c:3557 + msgid "unable to generate reloads for:" + msgstr "incapable de générer des recharges pour:" + + #: reload.c:3558 reload.c:3772 + msgid "inconsistent operand constraints in an `asm'" + msgstr "contrainte d'opérande inconsistente en « asm »" + + #: reload1.c:1247 + msgid "frame size too large for reliable stack checking" + msgstr "taille de trame trop grande pour une vérification fiable de la pile" + + #: reload1.c:1250 + msgid "try reducing the number of local variables" + msgstr "essayer de réduire le nombre de variables locales" + + #: reload1.c:1902 + #, c-format + msgid "can't find a register in class `%s' while reloading `asm'" + msgstr "ne peut repérer un registre dans la classe « %s » durant le rechargement «asm »" + + #: reload1.c:1906 + #, c-format + msgid "unable to find a register to spill in class `%s'" + msgstr "incapable de trouver un registre de déversement dans la classe « %s »" + + #: reload1.c:1908 + msgid "this is the insn:" + msgstr "ceci est le insn:" + + #: reload1.c:3924 + msgid "`asm' operand requires impossible reload" + msgstr "opérande « asm » requiert une recharge impossible" + + #. It's the compiler's fault. + #: reload1.c:5040 + msgid "could not find a spill register" + msgstr "ne peut repérer un registre de déversement" + + #: reload1.c:5045 + msgid "`asm' operand constraint incompatible with operand size" + msgstr "contrainte de l'opérande « asm » incompatible avec la taille de l'opérande" + + #. It's the compiler's fault. + #: reload1.c:6639 + msgid "VOIDmode on an output" + msgstr "mode VOID sur une sortie" + + #: reload1.c:6640 + msgid "output operand is constant in `asm'" + msgstr "opérande de sortie est une constante dans « asm »" + + #: rtl-error.c:139 + msgid "unrecognizable insn:" + msgstr "insn non reconnaissable:" + + #: rtl-error.c:141 + msgid "insn does not satisfy its constraints:" + msgstr "insn ne satisfait pas à ses contraintes:" + + #: rtl.c:627 + #, c-format + msgid "RTL check: access of elt %d of `%s' with last elt %d in %s, at %s:%d" + msgstr "vérification RTL: accès de elt %d de « %s » avec le dernier elt %d dans %s, à %s:%d" + + #: rtl.c:642 + #, c-format + msgid "RTL check: expected elt %d type '%c', have '%c' (rtx %s) in %s, at %s:%d" + msgstr "vérification RTL: attendu elt %d de type « %c », a « %c » (rtx %s) dans %s, à %s:%d" + + #: rtl.c:658 + #, c-format + msgid "RTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s) in %s, at %s:%d" + msgstr "vérification RTL: attendu elt %d de type « %c » ou « %c », a « %c » (rtx %s) dans %s, à %s:%d" + + #: rtl.c:671 + #, c-format + msgid "RTL check: expected code `%s', have `%s' in %s, at %s:%d" + msgstr "vérification RTL: code attendu « %s », a « %s » dans %s, à %s:%d" + + #: rtl.c:685 + #, c-format + msgid "RTL check: expected code `%s' or `%s', have `%s' in %s, at %s:%d" + msgstr "vérification RTL: code attendu « %s » ou « %s », a « %s » dans %s, à %s:%d" + + #: rtl.c:700 + #, c-format + msgid "RTL check: access of elt %d of vector with last elt %d in %s, at %s:%d" + msgstr "vérification RTL: accès de elt %d du vecteur avec le dernier elt %d dans %s, à %s:%d" + + #: stmt.c:927 + #, c-format + msgid "jump to `%s' invalidly jumps into binding contour" + msgstr "saut vers « %s » saute de manière invalide dans un contour de binding" + + #: stmt.c:1163 stmt.c:3755 + #, c-format + msgid "label `%s' used before containing binding contour" + msgstr "étiquette « %s » utilisé avant de contenir le contour de binding" + + #: stmt.c:1343 + msgid "output operand constraint lacks `='" + msgstr "contrainte de sortie de l'opérande manque «=»" + + #: stmt.c:1358 + #, c-format + msgid "output constraint `%c' for operand %d is not at the beginning" + msgstr "contrainte de sortie « %c » pour l'opérande %d n'est pas au début" + + #: stmt.c:1380 + msgid "operand constraint contains incorrectly positioned '+' or '='" + msgstr "contrainte de l'opérande contient «+» ou «-» incorrectement positionné" + + #: stmt.c:1386 stmt.c:1486 + #, c-format + msgid "`%%' constraint used with last operand" + msgstr "contrainte «%%» utilisée avec la dernière opérande" + + #: stmt.c:1405 + msgid "matching constraint not valid in output operand" + msgstr "contrainte concordante n'est pas valide dans une opérande de sortie" + + #: stmt.c:1477 + #, c-format + msgid "input operand constraint contains `%c'" + msgstr "contrainte d'entrée de l'opérande contient « %c »" + + #: stmt.c:1517 + msgid "matching constraint references invalid operand number" + msgstr "nombre d'opérandes invalides pour références de containte concordantes" + + #: stmt.c:1549 + #, c-format + msgid "invalid punctuation `%c' in constraint" + msgstr "ponctuation invalide « %c » dans la contrainte" + + #: stmt.c:1645 + #, c-format + msgid "unknown register name `%s' in `asm'" + msgstr "nom de registre inconnu « %s » dans «asm »" + + #: stmt.c:1689 + #, c-format + msgid "more than %d operands in `asm'" + msgstr "plus que %d opérandes dans « asm »" + + #: stmt.c:1748 + #, c-format + msgid "output number %d not directly addressable" + msgstr "nombre de sortie %d n,est pas directement adressable" + + #. ??? Leave this only until we have experience with what + #. happens in combine and elsewhere when constraints are + #. not satisfied. + #: stmt.c:1817 stmt.c:1846 + #, c-format + msgid "asm operand %d probably doesn't match constraints" + msgstr "opérande asm %d ne concorde pas probablement avec les contraintes" + + #: stmt.c:1992 + msgid "too many alternatives in `asm'" + msgstr "trop d'alternatives dans « asm »" + + #: stmt.c:2004 + msgid "operand constraints for `asm' differ in number of alternatives" + msgstr "contraintes de l'opérande pour « asm » diffèrent en nombre d'alternatives" + + #: stmt.c:2057 + #, c-format + msgid "duplicate asm operand name '%s'" + msgstr "nom d'opérande asm « %s » apparaît en double" + + #: stmt.c:2144 + msgid "missing close brace for named operand" + msgstr "accolade de fermeture manquante pour l'opérandé nommée" + + #: stmt.c:2172 + #, c-format + msgid "undefined named operand '%s'" + msgstr "opérande nommée « %s » indéfinie" + + #: stmt.c:3692 + #, c-format + msgid "unused variable `%s'" + msgstr "variable inutilisée « %s »" + + #: stmt.c:5167 + #, c-format + msgid "enumeration value `%s' not handled in switch" + msgstr "valeur d'énumération « %s » n'est pas traitée dans le switch" + + #: stmt.c:5193 stmt.c:5213 + #, c-format + msgid "case value `%ld' not in enumerated type" + msgstr "valeur du case «%ld» n'est pas dans le type énuméré" + + #: stmt.c:5196 stmt.c:5216 + #, c-format + msgid "case value `%ld' not in enumerated type `%s'" + msgstr "valeur du case «%ld» n'est pas dans le type énuméré « %s »" + + #: stor-layout.c:173 + msgid "type size can't be explicitly evaluated" + msgstr "taille du type ne peut être explicitement évaluée" + + #: stor-layout.c:175 + msgid "variable-size type declared outside of any function" + msgstr "type de taille variable déclaré à l'extérieur den'importe quelle fonction" + + #: stor-layout.c:456 + #, c-format + msgid "size of `%s' is %d bytes" + msgstr "taille de « %s » est de %d octets" + + #: stor-layout.c:458 + #, c-format + msgid "size of `%s' is larger than %d bytes" + msgstr "taille de « %s » est plus grande que %d octets" + + #: stor-layout.c:856 stor-layout.c:1157 + #, c-format + msgid "packed attribute causes inefficient alignment for `%s'" + msgstr "attribut empaqueté provoque un alignement inefficient pour « %s »" + + #: stor-layout.c:858 stor-layout.c:1159 + #, c-format + msgid "packed attribute is unnecessary for `%s'" + msgstr "attribut empaqueté n'est pas nécessaire pour « %s »" + + #: stor-layout.c:873 + #, c-format + msgid "padding struct to align `%s'" + msgstr "remplissage du struct pour aligner « %s »" + + #: stor-layout.c:1121 + msgid "padding struct size to alignment boundary" + msgstr "remplissage la taille du struct pour aligner les frontières" + + #: stor-layout.c:1164 + msgid "packed attribute causes inefficient alignment" + msgstr "attribut empaqueté provoque un alignement inefficient" + + #: stor-layout.c:1166 + msgid "packed attribute is unnecessary" + msgstr "attribut empaqueté n'est pas nécessaire" + + #: timevar.c:448 + msgid "" + "\n" + "Execution times (seconds)\n" + msgstr "" + "\n" + "Temps d'exécution (secondes)\n" + + #. Print total time. + #: timevar.c:498 + msgid " TOTAL :" + msgstr " TOTAL :" + + #: timevar.c:534 + #, c-format + msgid "time in %s: %ld.%06ld (%ld%%)\n" + msgstr "temps passé dans %s: %ld.%06ld (%ld%%)\n" + + #: tlink.c:428 + #, c-format + msgid "collect: reading %s\n" + msgstr "collect: lecture de %s\n" + + #: tlink.c:532 + #, c-format + msgid "collect: recompiling %s\n" + msgstr "collect: recompilation de %s\n" + + #: tlink.c:698 + #, c-format + msgid "collect: tweaking %s in %s\n" + msgstr "collect: tordage de %s dans %s\n" + + #: tlink.c:745 + msgid "collect: relinking\n" + msgstr "collect: ré-édition des liens\n" + + #: tlink.c:754 + #, c-format + msgid "ld returned %d exit status" + msgstr "ld a retourné %d code d'état d'exécution" + + #: toplev.c:895 + msgid "Generate debugging info in default format" + msgstr "Générer les information de mise au point dans le format par défaut" + + #: toplev.c:896 + msgid "Generate debugging info in default extended format" + msgstr "Générer les information de mise au point dans le format étendu" + + #: toplev.c:898 + msgid "Generate STABS format debug info" + msgstr "Générer des infos de mise au point de format STABS" + + #: toplev.c:899 + msgid "Generate extended STABS format debug info" + msgstr "Générer des infos de mise au point de format STABS étendu" + + #: toplev.c:902 + msgid "Generate DWARF-1 format debug info" + msgstr "Générer les informations de mise au point du format DWARF-1" + + #: toplev.c:904 + msgid "Generate extended DWARF-1 format debug info" + msgstr "Générer les extensions des informations de mise au point du format DWARF-1" + + #: toplev.c:907 + msgid "Generate DWARF-2 debug info" + msgstr "Générer les informations de mise au point DWARF-2" + + #: toplev.c:910 + msgid "Generate XCOFF format debug info" + msgstr "Générer les informations de mise au point du format XCOFF" + + #: toplev.c:911 + msgid "Generate extended XCOFF format debug info" + msgstr "Générer les extensions de mise au point du format XCOFF" + + #: toplev.c:914 + msgid "Generate COFF format debug info" + msgstr "Générer les informations de mise au point du format COFF" + + #: toplev.c:917 + msgid "Generate VMS format debug info" + msgstr "Générer des infos de mise au point de format VMS" + + #: toplev.c:961 + msgid "Perform DWARF2 duplicate elimination" + msgstr "Exécuter une élimination DAWRF2 des doublons" + + #: toplev.c:963 + msgid "Do not store floats in registers" + msgstr "Ne pas stocker les flottants dans les registres" + + #: toplev.c:965 + msgid "Consider all mem refs through pointers as volatile" + msgstr "Considérer toutes les référence en mémoire comme faite par des pointeurs volatiles" + + #: toplev.c:967 + msgid "Consider all mem refs to global data to be volatile" + msgstr "Considérer toutes les références mémoire à des données globales comme volatiles" + + #: toplev.c:969 + msgid "Consider all mem refs to static data to be volatile" + msgstr "Considérer toutes les références mémoire à des données statiques comme volatiles" + + #: toplev.c:971 + msgid "Defer popping functions args from stack until later" + msgstr "Déférer le dépilage des arguments de fonction de la pile plus tard" + + #: toplev.c:973 + msgid "When possible do not generate stack frames" + msgstr "Lorsque c'est possible ne pas générer des trames de pile" + + #: toplev.c:975 + msgid "Optimize sibling and tail recursive calls" + msgstr "Optimiser sur mesure les appels enfants et récursif" + + #: toplev.c:977 + msgid "When running CSE, follow jumps to their targets" + msgstr "Lorsque CSE s'exécute, suivre les sauts vers leurs cibles" + + #: toplev.c:979 + msgid "When running CSE, follow conditional jumps" + msgstr "Lorsque CSE s'exécute, suivre les sauts considitionnels vers leurs cibles" + + #: toplev.c:981 + msgid "Perform a number of minor, expensive optimizations" + msgstr "Effectuer un nombre mineur d'optimisations coûteuses" + + #: toplev.c:983 + msgid "Perform jump threading optimizations" + msgstr "Exécuter des optimisations de sauts de thread" + + #: toplev.c:985 + msgid "Perform strength reduction optimizations" + msgstr "Exécuter un réduction en force des optimisations" + + #: toplev.c:987 + msgid "Perform loop unrolling when iteration count is known" + msgstr "Exécuter un dé-roulement des boucles lorsque le compteur d'itération est connu" + + #: toplev.c:989 + msgid "Perform loop unrolling for all loops" + msgstr "Exécuter la boucle par désenroulement de toutes les boucles" + + #: toplev.c:991 + msgid "Generate prefetch instructions, if available, for arrays in loops" + msgstr "Générer des instructions prérecherchées, si disponible, pour les tableaux dans les boucles" + + #: toplev.c:993 + msgid "Force all loop invariant computations out of loops" + msgstr "Forcer pour toutes les boucles des calculs invariants en dehors des boucles" + + #: toplev.c:995 + msgid "Strength reduce all loop general induction variables" + msgstr "Renforcer la réduction de toutes les boucles par induction des variables" + + #: toplev.c:997 + msgid "Store strings in writable data section" + msgstr "Stocker les chaînes dans les sections d'écriture des données" + + #: toplev.c:999 + msgid "Enable machine specific peephole optimizations" + msgstr "Autoriser les optimisations des trous spécifiques à une machine" + + #: toplev.c:1001 + msgid "Copy memory operands into registers before using" + msgstr "Copier les opérandes mémoire dans les registres avant de les utiliser" + + #: toplev.c:1003 + msgid "Copy memory address constants into regs before using" + msgstr "Copier les constantes d'adresses mémoire dans les registres avant de les utiliser" + + #: toplev.c:1005 + msgid "Allow function addresses to be held in registers" + msgstr "Autoriser le maintien des adresses de fonction dans les registres" + + #: toplev.c:1007 + msgid "Integrate simple functions into their callers" + msgstr "Intégrer les fonctions simples à l'intérieur des appelants" + + #: toplev.c:1009 + msgid "Generate code for funcs even if they are fully inlined" + msgstr "Générer le code pour les fonctions même si elles sont complètement en ligne" + + #: toplev.c:1011 + msgid "Pay attention to the 'inline' keyword" + msgstr "Porter attention au mot clé « inline »" + + #: toplev.c:1013 + msgid "Emit static const variables even if they are not used" + msgstr "Produire des variables constantes statiques même si elles ne sont pas utilisées" + + #: toplev.c:1015 + msgid "Check for syntax errors, then stop" + msgstr "Vérifier les erreurs de syntaxes et puis stopper" + + #: toplev.c:1017 + msgid "Mark data as shared rather than private" + msgstr "Marquer les données comme partagées au lieu de privées" + + #: toplev.c:1019 + msgid "Enable saving registers around function calls" + msgstr "Autoriser la sauvegarde autour des appels de fonction" + + #: toplev.c:1021 + msgid "Return 'short' aggregates in memory, not registers" + msgstr "Retourner des aggrégats de type « short » en mémoire, pas dans les registres" + + #: toplev.c:1023 + msgid "Return 'short' aggregates in registers" + msgstr "Retourner des aggrégats de type « short » dans les registres" + + #: toplev.c:1025 + msgid "Attempt to fill delay slots of branch instructions" + msgstr "Tented de remplir de délais les fentes des instructions de branchement" + + #: toplev.c:1027 + msgid "Perform the global common subexpression elimination" + msgstr "Exécuter l'élimination de sous-expression du commun global" + + #: toplev.c:1029 + msgid "Perform enhanced load motion during global subexpression elimination" + msgstr "Exécuter un chargement efficace lors de l'élimination de sous-expression globale" + + #: toplev.c:1031 + msgid "Perform store motion after global subexpression elimination" + msgstr "Exécuter un stockage efficace lors de l'élimination de sous-expression globale" + + #: toplev.c:1033 + msgid "Run CSE pass after loop optimizations" + msgstr "Exécuter une passe CSE après une optimisation des boucles" + + #: toplev.c:1035 + msgid "Run the loop optimizer twice" + msgstr "Exécuter l'optimiseur de boucle deux fois" + + #: toplev.c:1037 + msgid "Delete useless null pointer checks" + msgstr "Détruire les vérifications de pointeurs nul inutiles" + + #: toplev.c:1039 + msgid "Pretend that host and target use the same FP format" + msgstr "Prétendre que l'hôte et la cible utilise le format FP" + + #: toplev.c:1041 + msgid "Reschedule instructions before register allocation" + msgstr "Reçéduler les instructions avant l'allocation de registres" + + #: toplev.c:1043 + msgid "Reschedule instructions after register allocation" + msgstr "Reçédulers les instructions après l'allocation de registres" + + #: toplev.c:1045 + msgid "Enable scheduling across basic blocks" + msgstr "Autoriser le çédulage à travers les blocs de base" + + #: toplev.c:1047 + msgid "Allow speculative motion of non-loads" + msgstr "Autoriser le mouvement spéculatif de non chargements" + + #: toplev.c:1049 + msgid "Allow speculative motion of some loads" + msgstr "Autoriser le mouvement spéculatif de quelques chargements" + + #: toplev.c:1051 + msgid "Allow speculative motion of more loads" + msgstr "Autoriser le mouvement spéculatif de plusieurs chargements" + + #: toplev.c:1053 + msgid "Replace add,compare,branch with branch on count reg" + msgstr "Remplacer add,compare,branch avec des branchements utilisant un compteur registre" + + #: toplev.c:1055 + msgid "Generate position independent code, if possible" + msgstr "Générer du code indépendant de la position, si possible" + + #: toplev.c:1058 + msgid "Enable exception handling" + msgstr "Autoriser le traitement des exceptions" + + #: toplev.c:1060 + msgid "Just generate unwind tables for exception handling" + msgstr "Générer simplement des tables étendues pour le traitement des exceptions" + + #: toplev.c:1062 + msgid "Generate unwind tables exact at each instruction boundary" + msgstr "Générer des tables étendues exactes pour chaque bornes d'instruction" + + #: toplev.c:1064 + msgid "Support synchronous non-call exceptions" + msgstr "Supporter les exceptions synchrones des non appels" + + #: toplev.c:1066 + msgid "Insert arc based program profiling code" + msgstr "Insérer le code de profilage du programme de base" + + #: toplev.c:1068 + msgid "Create data files needed by gcov" + msgstr "Créer les fichiers de données nécessaires par gcov" + + #: toplev.c:1070 + msgid "Use profiling information for branch probabilities" + msgstr "Utiliser les informations de profilage pour les probabilités de branchements" + + #: toplev.c:1072 + msgid "Reorder basic blocks to improve code placement" + msgstr "Ré-ordonner les blocs de base pour améliorer l'emplacement de code" + + #: toplev.c:1074 + msgid "Do the register renaming optimization pass" + msgstr "Renommer les registres lors de la passe d'optimisation" + + #: toplev.c:1076 + msgid "Do the register copy-propagation optimization pass" + msgstr "Effectuer la passe d'optimisation de la propagation-de-copie par registre" + + #: toplev.c:1078 + msgid "Do not put uninitialized globals in the common section" + msgstr "Ne pas placer de globaux non initialisés dans la section commune" + + #: toplev.c:1080 + msgid "Do not generate .size directives" + msgstr "Ne pas générer de directives .size" + + #: toplev.c:1082 + msgid "place each function into its own section" + msgstr "placer chaque fonction dans sa propre section" + + #: toplev.c:1084 + msgid "place data items into their own section" + msgstr "placer les items des données dans leur propre section" + + #: toplev.c:1086 + msgid "Add extra commentry to assembler output" + msgstr "Ajouter des commentaires additionnels à la sortie de l'assembleur" + + #: toplev.c:1088 + msgid "Output GNU ld formatted global initializers" + msgstr "Produire les initialiseurs globaux formattés pour GNU ld" + + #: toplev.c:1090 + msgid "Enables a register move optimization" + msgstr "Autoriser l'optimisation des déplacements par registre" + + #: toplev.c:1092 + msgid "Do the full regmove optimization pass" + msgstr "Effectuer la passe d'optimisation complète des des déplacements par les registres" + + #: toplev.c:1094 + msgid "Pack structure members together without holes" + msgstr "Empaqueter les membres des structures ensembles sans trous" + + #: toplev.c:1096 + msgid "Insert stack checking code into the program" + msgstr "Insérer du code de vérificaion de la pile dans le programme" + + #: toplev.c:1098 + msgid "Specify that arguments may alias each other & globals" + msgstr "Assumer que les arguments peuvent avoir des alias l'un vers l'autre et globaux" + + #: toplev.c:1100 + msgid "Assume arguments may alias globals but not each other" + msgstr "Assumer que les arguments peuvent avoir des alias globaux mais pas l'un vers l'autre" + + #: toplev.c:1102 + msgid "Assume arguments do not alias each other or globals" + msgstr "Assumer que les arguments n'ont pas d'alias l'un vers l'autre ou globaux" + + #: toplev.c:1104 + msgid "Assume strict aliasing rules apply" + msgstr "Assumer que des règles stricts d'alias s'appliquent" + + #: toplev.c:1106 + msgid "Align the start of loops" + msgstr "Aligner le début des boucles" + + #: toplev.c:1108 + msgid "Align labels which are only reached by jumping" + msgstr "Aligner les étiquettes qui sont seulement atteintes par sauts" + + #: toplev.c:1110 + msgid "Align all labels" + msgstr "Aligner toutes les étiquettes" + + #: toplev.c:1112 + msgid "Align the start of functions" + msgstr "Aligner le début des fonctions" + + #: toplev.c:1114 + msgid "Attempt to merge identical constants accross compilation units" + msgstr "Tentative de fusion de constantes identiques à travers des unités de compilation" + + #: toplev.c:1116 + msgid "Attempt to merge identical constants and constant variables" + msgstr "Tentative de fusion de constantes identique et des variables constantes" + + #: toplev.c:1118 + msgid "Suppress output of instruction numbers and line number notes in debugging dumps" + msgstr "Supprimer dans la sortie les numéros d'instructions et de notes de lignes dans les vidanges de mises au point" + + #: toplev.c:1120 + msgid "Instrument function entry/exit with profiling calls" + msgstr "Traiter les entrées/sorties des fonctins avec appels de profilage" + + #: toplev.c:1122 + msgid "Enable SSA optimizations" + msgstr "Autoriser les optimisations SSA" + + #: toplev.c:1124 + msgid "Enable SSA conditional constant propagation" + msgstr "Autoriser la propagation SSA de constante conditionnelle" + + #: toplev.c:1126 + msgid "Enable aggressive SSA dead code elimination" + msgstr "Autoriser l'élimination agressive SSA du code mort" + + #: toplev.c:1128 + msgid "External symbols have a leading underscore" + msgstr "Les symboles externes sont préfixés d'un caractère de soulignement" + + #: toplev.c:1130 + msgid "Process #ident directives" + msgstr "Traiter les directive #ident" + + #: toplev.c:1132 + msgid "Enables an rtl peephole pass run before sched2" + msgstr "Autoriser l'exécution de la passe rtl sur les trous avant sched2" + + #: toplev.c:1134 + msgid "Enables guessing of branch probabilities" + msgstr "Autoriser l'estimation des probabilités de branchement" + + #: toplev.c:1136 + msgid "Set errno after built-in math functions" + msgstr "Initialiser errno après les fonctions internes mathématiques" + + #: toplev.c:1138 + msgid "Floating-point operations can trap" + msgstr "les opérations virgule flottante peuvent être attrappées" + + #: toplev.c:1140 + msgid "Allow math optimizations that may violate IEEE or ANSI standards" + msgstr "Permettre l'optimisation des maths qui peut violer les standards IEEE ou ANSI" + + #: toplev.c:1142 + msgid "Compile pointers as triples: value, base & end" + msgstr "Compiler les pointeurs comme des triplets: valeur, base et fin" + + #: toplev.c:1144 + msgid "Generate code to check bounds before dereferencing pointers and arrays" + msgstr "Générer du code pour vérifier les bornes avant de dé-référencer les pointeurs et les tableaux" + + #: toplev.c:1146 + msgid "Convert floating point constant to single precision constant" + msgstr "Convertir les constantes flottantes en constantes en simple précision" + + #: toplev.c:1148 + msgid "Report time taken by each compiler pass at end of run" + msgstr "Rapporter le temps pris par chaque passe de compilation à la fin de l'exécution" + + #: toplev.c:1150 + msgid "Report on permanent memory allocation at end of run" + msgstr "Rapporter toute allocation de mémoire permanente à la fin de l'exécution" + + #: toplev.c:1152 + msgid "Trap for signed overflow in addition / subtraction / multiplication" + msgstr "Attrapper les débordements de signe dans addition/soustraction/multiplication" + + #: toplev.c:1169 + msgid "Compile just for ISO C89" + msgstr "Compiler seulement pour ISO C89" + + #: toplev.c:1171 + msgid "Do not promote floats to double if using -traditional" + msgstr "Ne pas promouvoir les flottants à des doubles avec -traditional" + + #: toplev.c:1173 + msgid "Determine language standard" + msgstr "Déterminer le standard du langage" + + #: toplev.c:1177 + msgid "Make bit-fields by unsigned by default" + msgstr "Rendre les champs de bits non signés par défaut" + + #: toplev.c:1181 + msgid "Make 'char' be signed by default" + msgstr "Rendre les « char » signés par défaut" + + #: toplev.c:1183 + msgid "Make 'char' be unsigned by default" + msgstr "Rendre les « char » non signés par défaut" + + #: toplev.c:1189 + msgid "Attempt to support traditional K&R style C" + msgstr "Tenter de supporter le style de langage C traditionnel K&R" + + #: toplev.c:1195 + msgid "Do not recognize the 'asm' keyword" + msgstr "Ne pas reconnaître le mot clé « asm »" + + #: toplev.c:1198 + msgid "Do not recognize any built in functions" + msgstr "Ne pas reocnnaître aucun construit dans les fonctions" + + #: toplev.c:1200 + msgid "Assume normal C execution environment" + msgstr "Assumer un environnement d'exécution normal C" + + #: toplev.c:1203 + msgid "Assume that standard libraries & main might not exist" + msgstr "Assumer que les librairies standards & main peuvent ne pas exister" + + #: toplev.c:1206 + msgid "Allow different types as args of ? operator" + msgstr "Permettre des types différents pour les arguments de l'opérateur ?" + + #: toplev.c:1209 + msgid "Allow the use of $ inside identifiers" + msgstr "Permettre l'utilisation de $ à l'intérieur d'identificateurs" + + #: toplev.c:1214 + msgid "Use the same size for double as for float" + msgstr "Utiliser la même taille pour un double que pour un flottant" + + #: toplev.c:1217 + msgid "Use the smallest fitting integer to hold enums" + msgstr "Utiliser le plus petit entier pour contenir l'énumération (enums)" + + #: toplev.c:1220 + msgid "Override the underlying type for wchar_t to `unsigned short'" + msgstr "Écraser le type sous-jacent de wchar_t vers « unsigned short »" + + #: toplev.c:1224 + msgid "Enable most warning messages" + msgstr "Autoriser la plupart des messages d'avertissement" + + #: toplev.c:1226 + msgid "Warn about casting functions to incompatible types" + msgstr "Avertir à propos des fonctions de transtypage avec des types incompatibles" + + #: toplev.c:1230 + msgid "Warn about functions which might be candidates for format attributes" + msgstr "Avertir à propos des fonctions qui pourraient être candidates pour les attributs de format" + + #: toplev.c:1233 + msgid "Warn about casts which discard qualifiers" + msgstr "Avertir à propos des transtypage qui écartent les qualificateurs" + + #: toplev.c:1236 + msgid "Warn about subscripts whose type is 'char'" + msgstr "Avertir à propose des souscripts dont le type est « char »" + + #: toplev.c:1239 toplev.c:1242 + msgid "Warn if nested comments are detected" + msgstr "Avertir si des commentaires imbriqués sont détectés" + + #: toplev.c:1245 + msgid "Warn about possibly confusing type conversions" + msgstr "Avertir à propos des type de conversions confuses" + + #: toplev.c:1248 + msgid "Warn about printf/scanf/strftime/strfmon format anomalies" + msgstr "Avertir à propos des anomalies de format de printf/scanf/strftime/strfmon" + + #: toplev.c:1252 + msgid "Don't warn about strftime formats yielding 2 digit years" + msgstr "Ne pas avertir à propos des formats de strftime ne laissant que 2 chiffres pour l'année" + + #: toplev.c:1255 + msgid "Don't warn about too many arguments to format functions" + msgstr "Ne pas avertir à propos d'un surplus d'arguments pour des fonctions de format" + + #: toplev.c:1257 + msgid "Warn about non-string-literal format strings" + msgstr "Avertir à propos des chaînes de format qui ne sont pas des chaînes" + + #: toplev.c:1260 + msgid "Warn about possible security problems with format functions" + msgstr "Avertir à propos des problèmes possibles de sécurité avec les formats de fonction" + + #: toplev.c:1263 + msgid "Warn about implicit function declarations" + msgstr "Avertir à propos des déclarations de fonctions implicites" + + #: toplev.c:1267 + msgid "Warn when a declaration does not specify a type" + msgstr "Avertir lorsqu'une déclaration ne spécifie pas le type" + + #: toplev.c:1272 + msgid "Warn about the use of the #import directive" + msgstr "Avertir à propos de l'utilisation de la directive #import" + + #: toplev.c:1276 + msgid "Do not warn about using 'long long' when -pedantic" + msgstr "Ne pas avertir à propos de l'utilisation de « long long » avec -pedantic" + + #: toplev.c:1278 + msgid "Warn about suspicious declarations of main" + msgstr "Avertir à propos des déclarations douteuses de main" + + #: toplev.c:1281 + msgid "Warn about possibly missing braces around initializers" + msgstr "Avertir à propos des accolades possiblement manquantes autour des initialiseurs" + + #: toplev.c:1284 + msgid "Warn about global funcs without previous declarations" + msgstr "Avertir à propos des fonctions globales sans déclaration précédente" + + #: toplev.c:1287 + msgid "Warn about global funcs without prototypes" + msgstr "Avertir à propos des fonctions globales sans prototype" + + #: toplev.c:1290 + msgid "Warn about use of multicharacter literals" + msgstr "Avertir à propose de l'utilisation des chaînes de multi-caractères" + + #: toplev.c:1293 + msgid "Warn about externs not at file scope level" + msgstr "Avertir à propos des externes qui n'est pas au niveau dans le champ du fichier" + + #: toplev.c:1296 + msgid "Warn about possible missing parentheses" + msgstr "Avertir à propos du manque possible de parenthèses" + + #: toplev.c:1299 + msgid "Warn about possible violations of sequence point rules" + msgstr "Avertir à propos des violations possibles des règles de séquence de points" + + #: toplev.c:1302 + msgid "Warn about function pointer arithmetic" + msgstr "Avertir à propos d'arithmétique portant sur un pointeur de fonction" + + #: toplev.c:1305 + msgid "Warn about multiple declarations of the same object" + msgstr "Avertir à propos des déclarations multiples portant sur le même objet" + + #: toplev.c:1308 + msgid "Warn about signed/unsigned comparisons" + msgstr "Avertir à propos des comparaisons signés/non signés" + + #: toplev.c:1311 + msgid "Warn about testing equality of floating point numbers" + msgstr "Avertir à propos des tests d'égalité sur des nombres flottants" + + #: toplev.c:1314 + msgid "Warn about unrecognized pragmas" + msgstr "Avertir à propos des pragmas non reconnus" + + #: toplev.c:1317 + msgid "Warn about non-prototyped function decls" + msgstr "Avertir à propos des déclarations de fonction sans prototype" + + #: toplev.c:1320 + msgid "Warn about constructs whose meaning change in ISO C" + msgstr "Avertir à propos de construits dont le sens change en ISO C" + + #: toplev.c:1323 + msgid "Warn when trigraphs are encountered" + msgstr "Avertir lorsque des trigraphes sont rencontrés" + + #: toplev.c:1328 + msgid "Mark strings as 'const char *'" + msgstr "Marque les chaînes comme étant 'const char *'" + + #: toplev.c:1458 + msgid "Warn when a function is unused" + msgstr "Avertir lorsqu'une fonction est inutilisée" + + #: toplev.c:1460 + msgid "Warn when a label is unused" + msgstr "Avertir lorsqu'une étiquette est inutilisée" + + #: toplev.c:1462 + msgid "Warn when a function parameter is unused" + msgstr "Avertir lorsqu'un paramètre de fonction est inutilisé" + + #: toplev.c:1464 + msgid "Warn when a variable is unused" + msgstr "Avertir lorsque 'une variable est inutilisée" + + #: toplev.c:1466 + msgid "Warn when an expression value is unused" + msgstr "Avertir lorsque la valeur d'une expression n'est pas utilisée" + + #: toplev.c:1468 + msgid "Do not suppress warnings from system headers" + msgstr "Ne pas supprimer les avertissements pour les en-têtes système" + + #: toplev.c:1470 + msgid "Treat all warnings as errors" + msgstr "Traiter tous les avertissements commes des erreurs" + + #: toplev.c:1472 + msgid "Warn when one local variable shadows another" + msgstr "Avertir lorsqu'une variable locale fait ombrage à une autre" + + #: toplev.c:1474 + msgid "Warn about enumerated switches missing a specific case" + msgstr "Avertir à propos d'un switch énuméré où un case spécific manque" + + #: toplev.c:1476 + msgid "Warn about returning structures, unions or arrays" + msgstr "Avertir à propos de structures retournés, unions ou tableaux" + + #: toplev.c:1478 + msgid "Warn about pointer casts which increase alignment" + msgstr "Avertir à propos des pointeurs convertis lesquels augment l'alignement" + + #: toplev.c:1480 + msgid "Warn about code that will never be executed" + msgstr "Avertir à propos du code qui ne sera jamais exécuté" + + #: toplev.c:1482 + msgid "Warn about uninitialized automatic variables" + msgstr "Avertir à propos des variables automatiques non initialisées" + + #: toplev.c:1484 + msgid "Warn when an inlined function cannot be inlined" + msgstr "Avertir lorsque des fonctions en ligne ne peuvent être en ligne" + + #: toplev.c:1486 + msgid "Warn when the packed attribute has no effect on struct layout" + msgstr "Avertir lorsque les attributs paquetés n'ont pas d'effet sur l'organtisation d'un struct" + + #: toplev.c:1488 + msgid "Warn when padding is required to align struct members" + msgstr "Avertir lorsque le remplissage est requis pour aligner les membres d'un struct" + + #: toplev.c:1490 + msgid "Warn when an optimization pass is disabled" + msgstr "Avertir lorsque la passe d'optimisation est désactivée" + + #: toplev.c:1492 + msgid "Warn about uses of __attribute__((deprecated)) declarations" + msgstr "Avertir à propos de l'utilisation des déclarations « __attribute__ ((deprecated)) »" + + #: toplev.c:1494 + msgid "Warn about functions which might be candidates for attribute noreturn" + msgstr "Avertir à propos des fonctions qui seraient candidates pour des attributs non retournés" + + #: toplev.c:1565 toplev.c:4379 tradcpp.c:792 + #, c-format + msgid "invalid option `%s'" + msgstr "option invalide « %s »" + + #: toplev.c:1711 + #, c-format + msgid "internal error: %s" + msgstr "erreur interne: %s" + + #: toplev.c:2024 + #, c-format + msgid "`%s' used but never defined" + msgstr "« %s » utilisé mais n'a jamais été défini" + + #: toplev.c:2027 + #, c-format + msgid "`%s' declared `static' but never defined" + msgstr "« %s » déclaré «static » mais n'a jamais été défiie" + + #: toplev.c:2049 + #, c-format + msgid "`%s' defined but not used" + msgstr "« %s » défini mais n'a pas été utilisé" + + #: toplev.c:2280 + #, c-format + msgid "invalid register name `%s' for register variable" + msgstr "nom de registre invalide « %s » pour un variable registre" + + #: toplev.c:3279 + #, c-format + msgid "crossjump disabled: %d > 1000 basic blocks and %d >= 20 edges/basic block" + msgstr "saut croisé désactivé: %d > 1000 blocs de base et %d >= 20 blocs edges/basic" + + #: toplev.c:3590 + msgid " -ffixed- Mark as being unavailable to the compiler\n" + msgstr " -ffixed- marque le qui est rendu indisponibles pour le compilateur\n" + + #: toplev.c:3591 + msgid " -fcall-used- Mark as being corrupted by function calls\n" + msgstr " -fcall-used- marquer le qui est corrompu par les appels de fonctions\n" + + #: toplev.c:3592 + msgid " -fcall-saved- Mark as being preserved across functions\n" + msgstr " -fcall-saved- marquer le qui est préservé à travers les fonctions\n" + + #: toplev.c:3593 + msgid " -finline-limit= Limits the size of inlined functions to \n" + msgstr " -finline-limit= limiter la taille des fonction en ligne à \n" + + #: toplev.c:3594 + msgid " -fmessage-length= Limits diagnostics messages lengths to characters per line. 0 suppresses line-wrapping\n" + msgstr " -fmessage-length= limiter la longueur des messages de diagnotiques à de caractères par ligne. 0 supprime l'enroulement de ligne\n" + + #: toplev.c:3595 + msgid " -fdiagnostics-show-location=[once | every-line] Indicates how often source location information should be emitted, as prefix, at the beginning of diagnostics when line-wrapping\n" + msgstr " -fdiagnostics-show-location=[once | every-line] indiquer combien de fois les information de localisation des sources doivent être produites, comme préfixe, au début d'un diagnostique lorsque les lignes doivent s'enrouler sur d'autres\n" + + #: toplev.c:3606 + msgid " -O[number] Set optimization level to [number]\n" + msgstr " -O[NIVEAU] utiliser le NIVEAU d'optimisation\n" + + #: toplev.c:3607 + msgid " -Os Optimize for space rather than speed\n" + msgstr " -Os optimiser l'utilisation de l'espace plutôt que la vitesse\n" + + #: toplev.c:3619 + msgid " -pedantic Issue warnings needed by strict compliance to ISO C\n" + msgstr " -pedantic émettre les avertissements nécessaires pour être conforme de façon stricte à ISO C\n" + + #: toplev.c:3620 + msgid " -pedantic-errors Like -pedantic except that errors are produced\n" + msgstr " -pedantic-errors identique à -pedantic sauf que les erreurs sont produites\n" + + #: toplev.c:3621 + msgid " -w Suppress warnings\n" + msgstr " -w supprimer les avertissements\n" + + #: toplev.c:3622 + msgid " -W Enable extra warnings\n" + msgstr " -W autoriser les avertissements additionnels\n" + + #: toplev.c:3633 + msgid " -Wunused Enable unused warnings\n" + msgstr " -Wunused autoriser les avertissements pour signaler les non utilisés\n" + + #: toplev.c:3634 + msgid " -Wlarger-than- Warn if an object is larger than bytes\n" + msgstr " -Wlarger-than- avertir si un objet est plus grand que d'octets\n" + + #: toplev.c:3635 + msgid " -p Enable function profiling\n" + msgstr " -p autoriser le profilage des fonctions\n" + + #: toplev.c:3637 + msgid " -a Enable block profiling \n" + msgstr " -a autoriser le profilage des blocs \n" + + #: toplev.c:3640 + msgid " -ax Enable jump profiling \n" + msgstr " -ax autoriser le profilage des sauts \n" + + #: toplev.c:3642 + msgid " -o Place output into \n" + msgstr " -o produire la sortie dans le \n" + + #: toplev.c:3643 + msgid "" + " -G Put global and static data smaller than \n" + " bytes into a special section (on some targets)\n" + msgstr "" + " -G placer les données globales et statiques plus\n" + " petites que d'octets dans une section\n" + " spéciale (sur certaine cible)\n" + + #: toplev.c:3654 + msgid " -aux-info Emit declaration info into \n" + msgstr " -aux-info produire une info de déclaration dans le \n" + + #: toplev.c:3655 + msgid " -quiet Do not display functions compiled or elapsed time\n" + msgstr " -quiet ne pas afficher les fonctions compilées ou le temps écoulé\n" + + #: toplev.c:3656 + msgid " -version Display the compiler's version\n" + msgstr " -version afficher la version du compilateur\n" + + #: toplev.c:3657 + msgid " -d[letters] Enable dumps from specific passes of the compiler\n" + msgstr " -d[lettres] autoriser les vidanges pour des passes spécifiques du compilateur\n" + + #: toplev.c:3658 + msgid " -dumpbase Base name to be used for dumps from specific passes\n" + msgstr " -dumpbase nom de base à utiliser pour les vidanges de passes spécifiques\n" + + #: toplev.c:3660 + msgid " -fsched-verbose= Set the verbosity level of the scheduler\n" + msgstr " -fsched-verbose= initialiser le niveau de verbosité du céduleur\n" + + #: toplev.c:3662 + msgid " --help Display this information\n" + msgstr " --help afficher l'aide-mémoire\n" + + #: toplev.c:3677 + msgid "" + "\n" + "Language specific options:\n" + msgstr "" + "\n" + "Options spécifiques au langage:\n" + + #: toplev.c:3689 + #, c-format + msgid " %-23.23s [undocumented]\n" + msgstr " %-23.23s [non documenté]\n" + + #: toplev.c:3697 toplev.c:3711 + #, c-format + msgid "" + "\n" + "There are undocumented %s specific options as well.\n" + msgstr "" + "\n" + "Il y a des options spécifiques %s qui ne sont pas documentés aussi.\n" + + #: toplev.c:3701 + #, c-format + msgid "" + "\n" + " Options for %s:\n" + msgstr "" + "\n" + " Options pour %s:\n" + + #: toplev.c:3738 + msgid "" + "\n" + "Target specific options:\n" + msgstr "" + "\n" + "Options spécifiques à la cible:\n" + + #: toplev.c:3752 toplev.c:3771 + #, c-format + msgid " -m%-23.23s [undocumented]\n" + msgstr " -m%-23.23s [non documenté]\n" + + #: toplev.c:3780 + msgid "" + "\n" + "There are undocumented target specific options as well.\n" + msgstr "" + "\n" + "Il y a des options spécifiques à la cible qui ne sont pas documentés aussi.\n" + + #: toplev.c:3782 + msgid " They exist, but they are not documented.\n" + msgstr " Ils existent, mais ils ne sont pas documentés.\n" + + #: toplev.c:3835 + #, c-format + msgid "unrecognized gcc debugging option: %c" + msgstr "option gcc de mise au point non reconnue: %c" + + #: toplev.c:3905 + #, c-format + msgid "unrecognized register name `%s'" + msgstr "nom de registre non reconnue « %s »" + + #: toplev.c:3930 toplev.c:4808 + #, c-format + msgid "unrecognized option `%s'" + msgstr "option « %s » non reconnue" + + #: toplev.c:3974 + msgid "-Wid-clash-LEN is no longer supported" + msgstr "-Wid-clash-LEN n'est plus supportée" + + #: toplev.c:4051 + #, c-format + msgid "use -gdwarf -g%d for DWARF v1, level %d" + msgstr "utiliser -gdwarf -g%d pour DWARF v1, niveau %d" + + #: toplev.c:4054 + msgid "use -gdwarf-2 for DWARF v2" + msgstr "utiliser -gdwarf-2 pour DWARF v2" + + #: toplev.c:4059 + #, c-format + msgid "ignoring option `%s' due to invalid debug level specification" + msgstr "option « %s » ignorée en raison de la spécification du niveau de mise au poitn invalide" + + #: toplev.c:4082 toplev.c:4806 + #, c-format + msgid "`%s': unknown or unsupported -g option" + msgstr "« %s »: inconnu ou non supporté option -g" + + #: toplev.c:4089 + #, c-format + msgid "`%s' ignored, conflicts with `-g%s'" + msgstr "« %s » ignoré, en conflit avec «-g%s»" + + #: toplev.c:4168 + msgid "-param option missing argument" + msgstr "argument manquant pour l'option -param" + + #: toplev.c:4177 + #, c-format + msgid "invalid --param option: %s" + msgstr "option invalide --param: %s" + + #: toplev.c:4189 + #, c-format + msgid "invalid parameter value `%s'" + msgstr "valeur du paramètre invalide « %s »" + + #: toplev.c:4396 + #, c-format + msgid "" + "%s%s%s version %s (%s)\n" + "%s\tcompiled by GNU C version %s.\n" + "%s%s%s version %s (%s) compiled by CC.\n" + msgstr "" + "%s%s%s version %s (%s)\n" + "%s\tcompilé par GNU C version %s.\n" + "%s%s%s version %s (%s) compilé par CC.\n" + + #: toplev.c:4452 + msgid "options passed: " + msgstr "options passées: " + + #: toplev.c:4481 + msgid "options enabled: " + msgstr "options autorisées: " + + #: toplev.c:4540 java/jcf-write.c:3373 + #, c-format + msgid "can't open %s for writing" + msgstr "ne peut ouvrir %s en écriture" + + #: toplev.c:4798 + #, c-format + msgid "ignoring command line option '%s'" + msgstr "option « %s » de la ligne de commande est ignorée" + + #: toplev.c:4801 + #, c-format + msgid "(it is valid for %s but not the selected language)" + msgstr "(c'est valide pour %s mais pas pour le langage séclectionné)" + + #: toplev.c:4835 + msgid "-Wuninitialized is not supported without -O" + msgstr "-Wuninitialized n'est pas supporté sans -O" + + #: toplev.c:4894 + msgid "instruction scheduling not supported on this target machine" + msgstr "instruction de cédulage n'est pas supportée sur cette machine cible" + + #: toplev.c:4898 + msgid "this target machine does not have delayed branches" + msgstr "cette machine cible n'a pas de branchments avec délais" + + #: toplev.c:4907 + msgid "profiling does not work without a frame pointer" + msgstr "profilage ne fonctionne pas sans un pointeur de trames" + + #: toplev.c:4922 + #, c-format + msgid "-f%sleading-underscore not supported on this target machine" + msgstr "-f%sleading-underscore n'est pas supporté sur cette machine cible" + + #: toplev.c:4985 + msgid "-ffunction-sections not supported for this target" + msgstr "-ffunction-sections n'est pas supporté pour cette cible" + + #: toplev.c:4990 + msgid "-fdata-sections not supported for this target" + msgstr "-fdata-sections n'est pas supporté pour cette machine cible" + + #: toplev.c:4997 + msgid "-ffunction-sections disabled; it makes profiling impossible" + msgstr "-ffunction-sections désactivé; cela rend le profilage impossible" + + #: toplev.c:5004 + msgid "-fprefetch-loop-arrays not supported for this target" + msgstr "-fprefetch-loop-arrays n'est pas supporté pour cette machine cible" + + #: toplev.c:5010 + msgid "-fprefetch-loop-arrays not supported for this target (try -march switches)" + msgstr "-fprefetch-loop-arrays n'est pas supporté sur cette machine cible (essayer -march options)" + + #: toplev.c:5019 + msgid "-fprefetch-loop-arrays is not supported with -Os" + msgstr "-fprefetch-loop-arrays n'est pas supporté avec -Os" + + #: toplev.c:5025 + msgid "-ffunction-sections may affect debugging on some targets" + msgstr "-ffunction-sections peut affecter la mise au point sur quelques machines cibles." + + #: toplev.c:5146 + #, c-format + msgid "error writing to %s" + msgstr "erreur d'écriture dans %s" + + #: toplev.c:5148 java/jcf-parse.c:969 java/jcf-write.c:3380 + #, c-format + msgid "error closing %s" + msgstr "erreur de fermeture %s" + + #. It's a float since it contains a point. + #: tradcif.y:231 + msgid "floating point numbers not allowed in #if expressions" + msgstr "nombres flottants ne sont pas permis dans les expressions #if" + + #: tradcif.y:277 + msgid "invalid number in #if expression" + msgstr "nombre invalide dans l'expression #if" + + #: tradcif.y:357 + msgid "invalid character constant in #if" + msgstr "constante de caractères invalide dans le #if" + + #: tradcif.y:394 + msgid "double quoted strings not allowed in #if expressions" + msgstr "chaînes entre quillemets ne sont pas allouées dans les expression #if" + + #: tradcif.y:407 + msgid "invalid token in expression" + msgstr "jeton invalide dans l'expression" + + #: tradcif.y:498 + msgid "octal character constant does not fit in a byte" + msgstr "constante de caractères en octal ne peut être insérée dans un octet" + + #: tradcif.y:519 + msgid "hex character constant does not fit in a byte" + msgstr "constante de caractères en hexadémical ne peut être insérée dans un octet" + + #: tradcif.y:550 + msgid "empty #if expression" + msgstr "expression #if vide" + + #: tradcif.y:564 + msgid "Junk after end of expression." + msgstr "Rebut à la fin de l'expression." + + #: tradcpp.c:145 + msgid "macro or #include recursion too deep" + msgstr "macro ou récursion de #include trop profonde" + + #: tradcpp.c:562 + #, c-format + msgid "usage: %s [switches] input output" + msgstr "usage: %s [options] entrée sortie" + + #: tradcpp.c:578 + msgid "-traditional is not supported in C++" + msgstr "-traditional n'est pas supporté en C++" + + #: tradcpp.c:580 + msgid "-traditional and -ansi are mutually exclusive" + msgstr "-traditional et -ansi sont mutuellement exclusives" + + #: tradcpp.c:594 + msgid "filename missing after -i option" + msgstr "nom de fichier manquant après l'option -i" + + #: tradcpp.c:612 + msgid "filename missing after -o option" + msgstr "nom de fichier manquant après l'option -o" + + #: tradcpp.c:675 + #, c-format + msgid "target missing after %s option" + msgstr "cible manquante après l'option %s" + + #: tradcpp.c:689 + #, c-format + msgid "filename missing after %s option" + msgstr "nom de fichier manquant après l'option %s" + + #: tradcpp.c:714 + #, c-format + msgid "macro name missing after -%c option" + msgstr "nom de macro manquant après l'option -%c" + + #: tradcpp.c:734 + msgid "-pedantic and -traditional are mutually exclusive" + msgstr "-pedantic et -traditional sont mutuellement exclusives" + + #: tradcpp.c:739 + msgid "-trigraphs and -traditional are mutually exclusive" + msgstr "-trigraphs et -traditional sont mutuellement exclusives" + + #: tradcpp.c:765 + msgid "directory name missing after -I option" + msgstr "nom de répertoire manquant après l'option -I" + + #: tradcpp.c:1445 tradcpp.c:3937 + msgid "`/*' within comment" + msgstr "«/*» à l'intérieur d'un commentaire" + + #: tradcpp.c:1821 + #, c-format + msgid "unterminated #%s conditional" + msgstr "#%s conditionel non terminé" + + #: tradcpp.c:2180 + msgid "not in any file?!" + msgstr "n'est pas dans aucun fichier?!" + + #: tradcpp.c:2286 + msgid "`defined' must be followed by ident or (ident)" + msgstr "« defined » doit être suivi par ident ou (ident)" + + #: tradcpp.c:2290 + msgid "cccp error: invalid special hash type" + msgstr "erreur cccp: type de hachage spécial invalide" + + #: tradcpp.c:2388 tradcpp.c:2458 + msgid "#include expects \"fname\" or " + msgstr "#include espère « fname » ou " + + #: tradcpp.c:2543 + #, c-format + msgid "no include path in which to find %.*s" + msgstr "pas de chemin d'inclusion dans lequel trouver %.*s" + + #: tradcpp.c:2721 + msgid "invalid macro name" + msgstr "nom de macro invalide" + + #: tradcpp.c:2729 + #, c-format + msgid "invalid macro name `%s'" + msgstr "nom de macro invalide « %s »" + + #: tradcpp.c:2734 + msgid "\"defined\" cannot be used as a macro name" + msgstr "« defined » ne peut être utilisé comme nom de macro" + + #: tradcpp.c:2761 + msgid "parameter name starts with a digit in #define" + msgstr "nom de paramètre débute avec un chiffre dans #define" + + #: tradcpp.c:2771 + msgid "badly punctuated parameter list in #define" + msgstr "liste de paramètres incorrectement ponctués dans #define" + + #: tradcpp.c:2779 + msgid "unterminated parameter list in #define" + msgstr "liste de paramètres non terminée dans #define" + + #: tradcpp.c:2827 + #, c-format + msgid "\"%.*s\" redefined" + msgstr "\"%.*s\" redéfini" + + #: tradcpp.c:3084 + msgid "# operator should be followed by a macro argument name" + msgstr "# opérator derait être suivi par le nom d'un argument macro" + + #: tradcpp.c:3131 tradcpp.c:3157 tradcpp.c:3171 tradcpp.c:3178 tradcpp.c:3203 + msgid "invalid format #line command" + msgstr "format invalide dans la commande #line" + + #: tradcpp.c:3229 + msgid "undefining `defined'" + msgstr "indéfinition « defined »" + + #: tradcpp.c:3233 + #, c-format + msgid "undefining `%s'" + msgstr "indéfinition « %s »" + + #: tradcpp.c:3289 + msgid "extra text at end of directive" + msgstr "texte superflu à la fin de la directive" + + #: tradcpp.c:3396 + #, c-format + msgid "#error%.*s" + msgstr "#error%.*s" + + #: tradcpp.c:3406 + #, c-format + msgid "#warning%.*s" + msgstr "#warning%.*s" + + #: tradcpp.c:3562 + msgid "#elif not within a conditional" + msgstr "#elif n'est pas à l'intérieur d'un conditionel" + + #: tradcpp.c:3819 + #, c-format + msgid "#%s not within a conditional" + msgstr "#%s n'est pas à l'intérieur d'un conditionel" + + #: tradcpp.c:3827 + msgid "#else or #elif after #else" + msgstr "#else ou #elif après #else" + + #: tradcpp.c:3867 + msgid "#else not within a conditional" + msgstr "#else n'est pas à l'intérieur d'un conditionel" + + #: tradcpp.c:3898 + msgid "unbalanced #endif" + msgstr "#endif non pairé" + + #: tradcpp.c:3992 + msgid "unterminated string or character constant" + msgstr "chaîne non terminée ou constante caractère" + + #: tradcpp.c:4150 + #, c-format + msgid "arguments given to macro `%s'" + msgstr "argument donnée à la macro « %s »" + + #: tradcpp.c:4156 + #, c-format + msgid "no args to macro `%s'" + msgstr "aucun argument pour la macro « %s »" + + #: tradcpp.c:4158 + #, c-format + msgid "only 1 arg to macro `%s'" + msgstr "seulement 1 argument pour la macro « %s »" + + #: tradcpp.c:4160 + #, c-format + msgid "only %d args to macro `%s'" + msgstr "seulement %d arguments pour la macro « %s »" + + #: tradcpp.c:4162 + #, c-format + msgid "too many (%d) args to macro `%s'" + msgstr "trop d'arguments (%d) pour la macro « %s »" + + #: tradcpp.c:4759 + #, c-format + msgid "" + "internal error in %s, at tradcpp.c:%d\n" + "Please submit a full bug report.\n" + "See %s for instructions." + msgstr "" + "Erreur interne dans %s, à tradcpp.c:%d\n" + "SVP soumettre un rapport complet des anomalies rencontrées.\n" + "Consulter %s pour les instructions." + + #: tree-dump.c:848 + #, c-format + msgid "could not open dump file `%s'" + msgstr "ne peut ouvrir le fichier de vidange « %s »" + + #: tree-dump.c:924 + #, c-format + msgid "ignoring unknown option `%.*s' in `-f%s'" + msgstr "option inconnue «%.*s» ignorée dans «-f%s»" + + #: tree.c:3888 + msgid "arrays of functions are not meaningful" + msgstr "tableaux de fonctions n'a pas grand sens" + + #: tree.c:3945 + msgid "function return type cannot be function" + msgstr "Le type retourné d'une fonction ne peut être une fonction" + + #: tree.c:4699 + msgid "invalid initializer for bit string" + msgstr "initialiseur invalide pour une chaîne de bits" + + #: tree.c:4758 + #, c-format + msgid "tree check: expected %s, have %s in %s, at %s:%d" + msgstr "vérification de l'arbre: attendait %s, obtenu %s dans %s, à %s:%d" + + #: tree.c:4775 + #, c-format + msgid "tree check: expected class '%c', have '%c' (%s) in %s, at %s:%d" + msgstr "vérification de l'arbre: attendait classe « %c », obtenu « %c » (%s) dans %s, à %s:%d" + + #: varasm.c:454 config/i386/winnt.c:522 + #, c-format + msgid "%s causes a section type conflict" + msgstr "%s cause un conflit du type de section" + + #: varasm.c:879 + #, c-format + msgid "register name not specified for `%s'" + msgstr "nom de registre n'est pas spécifié pour « %s »" + + #: varasm.c:881 + #, c-format + msgid "invalid register name for `%s'" + msgstr "nom de registre invalide pour « %s »" + + #: varasm.c:884 + #, c-format + msgid "data type of `%s' isn't suitable for a register" + msgstr "type de données de « %s » n'est pas applicable pour un registre" + + #: varasm.c:887 + #, c-format + msgid "register specified for `%s' isn't suitable for data type" + msgstr "registre spécifié pour « %s » n'est applicable à un type de données" + + #: varasm.c:896 + msgid "global register variable has initial value" + msgstr "variable globale registre a une valeur initiale" + + #: varasm.c:899 + msgid "volatile register variables don't work as you might wish" + msgstr "variables resgistres volatiles ne fonctionne pas comme vous le souhaiteriez" + + #: varasm.c:932 + #, c-format + msgid "register name given for non-register variable `%s'" + msgstr "nom de registre donné pour une variable non registre « %s »" + + #: varasm.c:1570 + #, c-format + msgid "alignment of `%s' is greater than maximum object file alignment. Using %d" + msgstr "alignement de « %s » est plus grand que l'alignement maximal du fichier objet. %d est utilisé." + + #: varasm.c:1621 + #, c-format + msgid "requested alignment for %s is greater than implemented alignment of %d" + msgstr "alignement requis pour %s est plus grand que l'alignement implanté de %d" + + #: varasm.c:4570 + msgid "initializer for integer value is too complicated" + msgstr "initialiseur pour une valeur entière est trop compliquée" + + #: varasm.c:4575 + msgid "initializer for floating value is not a floating constant" + msgstr "initialiseur pour une valeur flottante n'est pas une constante flottante" + + #: varasm.c:4625 + msgid "unknown set constructor type" + msgstr "type de jeu de constructeurs inconnu" + + #: varasm.c:4839 + #, c-format + msgid "invalid initial value for member `%s'" + msgstr "valeur initiale invalide pour le membre « %s »" + + #: varasm.c:5000 + #, c-format + msgid "weak declaration of `%s' must be public" + msgstr "déclaration faible de « %s » doit être publique" + + #: varasm.c:5002 + #, c-format + msgid "weak declaration of `%s' must precede definition" + msgstr "déclaraion faible de « %s » qui doit être précédée d'une définition" + + #: varasm.c:5009 + #, c-format + msgid "weak declaration of `%s' not supported" + msgstr "déclaration faible de « %s » n'est pas supportée" + + #: varasm.c:5036 varasm.c:5107 + msgid "only weak aliases are supported in this configuration" + msgstr "seulement les alias faibles sont supportés dans cette configuration" + + #: varasm.c:5116 + msgid "alias definitions not supported in this configuration; ignored" + msgstr "définitions d'alias ne sont pas supportés dans cette configuration; ignoré" + + #: varray.c:88 + #, c-format + msgid "virtual array %s[%lu]: element %lu out of bounds in %s, at %s:%d" + msgstr "tableau virtuel %s[%lu]: élément %lu hors gamme dans %s, à %s:%d" + + #. Print an error message for unrecognized stab codes. + #: xcoffout.c:174 + #, c-format + msgid "no sclass for %s stab (0x%x)\n" + msgstr "pas de sclass pour le stab %s (0x%x)\n" + + #: params.def:46 + msgid "The maximum number of instructions in a function that is eligible for inlining" + msgstr "Le nombre maximum d'instructions dans une fonction qui est éligible au type enligne" + + #: params.def:57 + msgid "The maximum number of instructions to consider to fill a delay slot" + msgstr "Le nombre maximum d'instructions à considérer pour remplir une slot délai" + + #: params.def:68 + msgid "The maximum number of instructions to consider to find accurate live register information" + msgstr "Le nombre maximum d'instructions à considérer pour repérer un registre d'information actif et précis" + + #: params.def:78 + msgid "The maximum length of scheduling's pending operations list" + msgstr "La longueur maximum de la liste des opération çédulées en attente" + + #: params.def:85 + msgid "The maximum amount of memory to be allocated by GCSE" + msgstr "La taille maximale de mémoire à être alloué par GCSE" + + #: params.def:90 + msgid "The maximum number of passes to make when doing GCSE" + msgstr "Le nombre maxium de passes à effectuer lors de l'exécution de GCSE" + + #: config/darwin-c.c:76 + msgid "too many #pragma options align=reset" + msgstr "trop d'options pour #pragma pour align=reset" + + #: config/darwin-c.c:98 config/darwin-c.c:101 config/darwin-c.c:103 config/darwin-c.c:105 + msgid "malformed '#pragma options', ignoring" + msgstr "'#pragma options» mal composé, ignoré" + + #: config/darwin-c.c:108 + msgid "junk at end of '#pragma options'" + msgstr "rebut à la fin de '#pragma options'" + + #: config/darwin-c.c:118 + msgid "malformed '#pragma options align={mac68k|power|reset}', ignoring" + msgstr "'#pragma options align={mac68k|power|reset}» mal composé, ignoré" + + #: config/darwin-c.c:131 + msgid "missing '(' after '#pragma unused', ignoring" + msgstr "«(» manquante après '#pragma unused', ignoré" + + #: config/darwin-c.c:149 + msgid "missing ')' after '#pragma unused', ignoring" + msgstr "«(» manquante après '#pragma unused', ignoré" + + #: config/darwin-c.c:152 + msgid "junk at end of '#pragma unused'" + msgstr "rebut à la fin de '#pragma unused'" + + #: config/nextstep.c:68 + msgid "optimization turned on" + msgstr "optimisation activée" + + #: config/nextstep.c:74 + msgid "optimization turned off" + msgstr "optimisation désactivée" + + #: config/nextstep.c:83 + msgid "optimization level restored" + msgstr "niveau d'optimisation restauré" + + #: config/lynx-ng.h:97 config/lynx.h:120 config/rs6000/lynx.h:85 + msgid "-msystem-v and -p are incompatible" + msgstr "-msystem-v et -p sont incompatibles" + + #: config/lynx-ng.h:99 config/lynx.h:122 config/rs6000/lynx.h:87 + msgid "-msystem-v and -mthreads are incompatible" + msgstr "-msystem-v et -mthreads sont incompatibles" + + #. Run-time compilation parameters selecting different hardware subsets. + #: config/1750a/1750a.h:39 + msgid "Use VAX-C alignment" + msgstr "Utiliser l'alignement VAX-C" + + #: config/a29k/a29k.c:1028 config/m88k/m88k.c:2967 + #, c-format + msgid "invalid %%Q value" + msgstr "valeur %%Q invalide" + + #: config/a29k/a29k.c:1034 config/alpha/alpha.c:5402 config/m88k/m88k.c:3063 + #, c-format + msgid "invalid %%C value" + msgstr "valeur %%C invalide" + + #: config/a29k/a29k.c:1040 config/alpha/alpha.c:5247 config/rs6000/rs6000.c:6454 + #, c-format + msgid "invalid %%N value" + msgstr "valeur %%N invalide" + + #: config/a29k/a29k.c:1046 config/alpha/alpha.c:5318 config/rs6000/rs6000.c:6416 + #, c-format + msgid "invalid %%M value" + msgstr "valeur %%M invalide" + + #: config/a29k/a29k.c:1052 config/alpha/alpha.c:5310 config/rs6000/rs6000.c:6381 + #, c-format + msgid "invalid %%m value" + msgstr "valeur %%m invalide" + + #: config/a29k/a29k.c:1154 config/alpha/alpha.c:5271 config/romp/romp.c:690 + #, c-format + msgid "invalid %%L value" + msgstr "valeur %%L invalide" + + #: config/a29k/a29k.c:1159 config/rs6000/rs6000.c:6462 + #, c-format + msgid "invalid %%O value" + msgstr "valeur %%O invalide" + + #: config/a29k/a29k.c:1165 config/alpha/alpha.c:5255 config/rs6000/rs6000.c:6482 + #, c-format + msgid "invalid %%P value" + msgstr "valeur %%P invalide" + + #: config/a29k/a29k.c:1175 + #, c-format + msgid "invalid %%V value" + msgstr "valeur %%V invalide" + + #: config/a29k/a29k.h:101 + msgid "Generate code assuming DW bit is set" + msgstr "Générer le code en assumant que le bit DW est initialisé" + + #: config/a29k/a29k.h:102 + msgid "Generate code assuming DW bit is not set" + msgstr "Générer le code en assumant que le bit DW n'est pas initialisé" + + #: config/a29k/a29k.h:103 + msgid "Generate code using byte writes" + msgstr "Générer le code en utilisant des écritures par octets" + + #: config/a29k/a29k.h:104 + msgid "Do not generate byte writes" + msgstr "Ne pas générer des écritures par octets" + + #: config/a29k/a29k.h:105 + msgid "Use small memory model" + msgstr "Utiliser le modèle de petite mémoire" + + #: config/a29k/a29k.h:106 + msgid "Use normal memory model" + msgstr "Utiliser le modèle normal de mémoire" + + #: config/a29k/a29k.h:107 + msgid "Use large memory model" + msgstr "Utiliser le modèle de grande mémoire" + + #: config/a29k/a29k.h:108 + msgid "Generate 29050 code" + msgstr "Générer le code 29050" + + #: config/a29k/a29k.h:109 + msgid "Generate 29000 code" + msgstr "Générer le code 29000" + + #: config/a29k/a29k.h:110 + msgid "Use kernel global registers" + msgstr "Utiliser les registres globaux du kernel" + + #: config/a29k/a29k.h:111 + msgid "Use user global registers" + msgstr "Utiliser les registres globaux" + + #: config/a29k/a29k.h:112 + msgid "Emit stack checking code" + msgstr "Produire le code de vérification de la pile" + + #: config/a29k/a29k.h:113 + msgid "Do not emit stack checking code" + msgstr "Ne pas produire le code de vérification de la pile" + + #: config/a29k/a29k.h:114 + msgid "Work around storem hardware bug" + msgstr "Contourner le bug matériel de stockage" + + #: config/a29k/a29k.h:115 + msgid "Do not work around storem hardware bug" + msgstr "Ne pas contourner le bug matériel de stockage" + + #: config/a29k/a29k.h:116 + msgid "Store locals in argument registers" + msgstr "Stocker les var. locales dans redistres d'arguments" + + #: config/a29k/a29k.h:117 + msgid "Do not store locals in arg registers" + msgstr "Ne pas stocker les var. locales dans redistres d'arguments" + + #: config/a29k/a29k.h:118 config/i960/i960.h:283 config/mips/mips.h:408 + msgid "Use software floating point" + msgstr "Utiliser le traitement par logiciel des nombres flottants" + + #: config/a29k/a29k.h:119 + msgid "Do not generate multm instructions" + msgstr "Ne pas générer des instructions multm" + + #: config/alpha/alpha.c:271 + #, c-format + msgid "-f%s ignored for Unicos/Mk (not supported)" + msgstr "-f%s ignoré pour Unicos/Mk (non supporté)" + + #: config/alpha/alpha.c:295 + msgid "-mieee not supported on Unicos/Mk" + msgstr "-mieee n'est pas supporté sur Unicos/Mk" + + #: config/alpha/alpha.c:306 + msgid "-mieee-with-inexact not supported on Unicos/Mk" + msgstr "-mieee-with-inexact n'est pas supporté sur Unicos/Mk" + + #: config/alpha/alpha.c:323 + #, c-format + msgid "bad value `%s' for -mtrap-precision switch" + msgstr "valeur « %s » erronée pour l'option -mtrap-precision" + + #: config/alpha/alpha.c:337 + #, c-format + msgid "bad value `%s' for -mfp-rounding-mode switch" + msgstr "valeur « %s » erronée pour l'option -mfp-rounding-mode" + + #: config/alpha/alpha.c:352 + #, c-format + msgid "bad value `%s' for -mfp-trap-mode switch" + msgstr "valeur « %s » erronée pour l'option -mfp-trap-mode" + + #: config/alpha/alpha.c:371 config/alpha/alpha.c:383 + #, c-format + msgid "bad value `%s' for -mcpu switch" + msgstr "valeur « %s » erronée pour l'option -mcpu" + + #: config/alpha/alpha.c:390 + msgid "trap mode not supported on Unicos/Mk" + msgstr "mode trappe n'est pas supporté sur Unicos/Mk" + + #: config/alpha/alpha.c:397 + msgid "fp software completion requires -mtrap-precision=i" + msgstr "complétion logicielle FP requiert -mtrap-precision=i" + + #: config/alpha/alpha.c:413 + msgid "rounding mode not supported for VAX floats" + msgstr "mode d'arondissement n'est pas supporté pour les flottants sur VAX" + + #: config/alpha/alpha.c:418 + msgid "trap mode not supported for VAX floats" + msgstr "mode trappe n'est pas supporté avec les flottants sur VAX" + + #: config/alpha/alpha.c:447 + #, c-format + msgid "L%d cache latency unknown for %s" + msgstr "latence de la cache L%d inconnue pour %s" + + #: config/alpha/alpha.c:462 + #, c-format + msgid "bad value `%s' for -mmemory-latency" + msgstr "valeur « %s » erronée pour -mmemory-latency" + + #: config/alpha/alpha.c:5211 config/m88k/m88k.c:2955 config/romp/romp.c:746 config/romp/romp.c:753 + #, c-format + msgid "invalid %%H value" + msgstr "valeur %%H invalide" + + #: config/alpha/alpha.c:5221 + #, c-format + msgid "invalid %%J value" + msgstr "valeur %%J invalide" + + #: config/alpha/alpha.c:5231 config/ia64/ia64.c:3509 config/m88k/m88k.c:3100 + #, c-format + msgid "invalid %%r value" + msgstr "valeur %%r invalide" + + #: config/alpha/alpha.c:5241 config/rs6000/rs6000.c:6528 + #, c-format + msgid "invalid %%R value" + msgstr "valeur %%R invalide" + + #: config/alpha/alpha.c:5263 config/m88k/m88k.c:2961 config/romp/romp.c:732 config/romp/romp.c:739 + #, c-format + msgid "invalid %%h value" + msgstr "valeur %%h invalide" + + #: config/alpha/alpha.c:5353 + #, c-format + msgid "invalid %%U value" + msgstr "valeur %%U invalide" + + #: config/alpha/alpha.c:5365 config/alpha/alpha.c:5379 config/romp/romp.c:698 config/rs6000/rs6000.c:6536 + #, c-format + msgid "invalid %%s value" + msgstr "valeur %%s invalide" + + #: config/alpha/alpha.c:5439 config/m88k/m88k.c:3084 config/rs6000/rs6000.c:6243 + #, c-format + msgid "invalid %%E value" + msgstr "valeur %%E invalide" + + #: config/alpha/alpha.c:5460 config/romp/romp.c:973 config/rs6000/rs6000.c:6844 + #, c-format + msgid "invalid %%xn code" + msgstr "valeur %%xn invalide" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/alpha/alpha.h:214 config/i386/i386.h:291 config/i386/i386.h:293 config/i386/i386.h:295 config/ns32k/ns32k.h:103 config/rs6000/rs6000.h:329 config/s390/s390.h:56 config/sparc/sparc.h:529 config/sparc/sparc.h:534 + msgid "Use hardware fp" + msgstr "Utiliser le FP matériel" + + #: config/alpha/alpha.h:215 config/i386/i386.h:292 config/i386/i386.h:294 config/rs6000/rs6000.h:331 config/sparc/sparc.h:531 config/sparc/sparc.h:536 + msgid "Do not use hardware fp" + msgstr "Ne pas utiliser l'unité FP matérielle" + + #: config/alpha/alpha.h:216 + msgid "Use fp registers" + msgstr "Utiliser les registres FP" + + #: config/alpha/alpha.h:218 + msgid "Do not use fp registers" + msgstr "Ne pas utiliser les registres FP" + + #: config/alpha/alpha.h:219 + msgid "Do not assume GAS" + msgstr "Ne pas assumer la présence de GAS" + + #: config/alpha/alpha.h:220 + msgid "Assume GAS" + msgstr "Assumer la présence de GAS" + + #: config/alpha/alpha.h:222 + msgid "Request IEEE-conformant math library routines (OSF/1)" + msgstr "Requête des routine de la librairie mathématique conforme IEEE (OSF/1)" + + #: config/alpha/alpha.h:224 + msgid "Emit IEEE-conformant code, without inexact exceptions" + msgstr "Produire du code conforme IEEE, sans exceptions inexactes" + + #: config/alpha/alpha.h:226 + msgid "Emit IEEE-conformant code, with inexact exceptions" + msgstr "Produire du code conforme IEEE, avec exceptions inexactes" + + #: config/alpha/alpha.h:228 + msgid "Do not emit complex integer constants to read-only memory" + msgstr "Ne pas produire des constantes entières complexes en mémoire en mode lecture seulement" + + #: config/alpha/alpha.h:229 + msgid "Use VAX fp" + msgstr "Utiliser les registres FP sur VAX" + + #: config/alpha/alpha.h:230 + msgid "Do not use VAX fp" + msgstr "Ne pas utiliser les registres FP sur VAX" + + #: config/alpha/alpha.h:231 + msgid "Emit code for the byte/word ISA extension" + msgstr "Produire du code pour les octets/mots des extensions ISA" + + #: config/alpha/alpha.h:234 + msgid "Emit code for the motion video ISA extension" + msgstr "Produire du code pour les extensions vidéo ISA" + + #: config/alpha/alpha.h:237 + msgid "Emit code for the fp move and sqrt ISA extension" + msgstr "Produire du code pour les déplacements FP et sqrt des extensions ISA" + + #: config/alpha/alpha.h:239 + msgid "Emit code for the counting ISA extension" + msgstr "Produire du code pour les extensions ISA de comptage" + + #: config/alpha/alpha.h:242 + msgid "Emit code using explicit relocation directives" + msgstr "Produire du code utilisant des directives explicites de relocalisation" + + #: config/alpha/alpha.h:245 + msgid "Emit 16-bit relocations to the small data areas" + msgstr "Produire du code de 16 bits pour le relocalisation des petites zones de données" + + #: config/alpha/alpha.h:247 + msgid "Emit 32-bit relocations to the small data areas" + msgstr "Produire du code de 32 bits pour le relocalisation des petites zones de données" + + #. For -mcpu= + #. For -mtune= + #. For -mfp-rounding-mode=[n|m|c|d] + #. For -mfp-trap-mode=[n|u|su|sui] + #. For -mtrap-precision=[p|f|i] + #. For -mmemory-latency= + #: config/alpha/alpha.h:275 + msgid "Use features of and schedule given CPU" + msgstr "Utiliser les options de et çéduler le CPU donné" + + #: config/alpha/alpha.h:277 + msgid "Schedule given CPU" + msgstr "Çéduler le CPU donné" + + #: config/alpha/alpha.h:279 + msgid "Control the generated fp rounding mode" + msgstr "Contrôler le mode d'arondissement FP généré" + + #: config/alpha/alpha.h:281 + msgid "Control the IEEE trap mode" + msgstr "Contrôler le mode trappe IEEE" + + #: config/alpha/alpha.h:283 + msgid "Control the precision given to fp exceptions" + msgstr "Contrôler la précision donnée des exceptions FP" + + #: config/alpha/alpha.h:285 + msgid "Tune expected memory latency" + msgstr "Ajuster la latence mémoire attendue" + + #: config/arc/arc.c:132 + #, c-format + msgid "bad value (%s) for -mcpu switch" + msgstr "valeur (%s) erronée pour l'option -mcpu" + + #: config/arc/arc.c:359 + #, c-format + msgid "argument of `%s' attribute is not a string constant" + msgstr "argument de l'attribut « %s » n'est pas une chaîne de constante" + + #: config/arc/arc.c:366 + #, c-format + msgid "argument of `%s' attribute is not \"ilink1\" or \"ilink2\"" + msgstr "l'argument de l'attribut « %s » n'est pas «ilink1» ou «ilink2 »" + + #: config/arc/arc.c:1709 config/m32r/m32r.c:2278 + #, c-format + msgid "invalid operand to %%R code" + msgstr "opérande invalide pour le code %%R" + + #: config/arc/arc.c:1741 config/m32r/m32r.c:2301 + #, c-format + msgid "invalid operand to %%H/%%L code" + msgstr "opérande invalide pour le code %%H/%%L" + + #: config/arc/arc.c:1765 config/m32r/m32r.c:2378 + #, c-format + msgid "invalid operand to %%U code" + msgstr "opérande invalide pour le code %%U" + + #: config/arc/arc.c:1776 + #, c-format + msgid "invalid operand to %%V code" + msgstr "opérande invalide pour le code %%V" + + #. Unknown flag. + #: config/arc/arc.c:1783 config/m32r/m32r.c:2417 config/sparc/sparc.c:6145 + msgid "invalid operand output code" + msgstr "opérande invalide pour le code de sortie" + + #: config/arm/arm.c:436 + #, c-format + msgid "switch -mcpu=%s conflicts with -march= switch" + msgstr "l'option -mcpu=%s est en conflit avec l'option -march= " + + #: config/arm/arm.c:446 config/rs6000/rs6000.c:444 config/sparc/sparc.c:381 + #, c-format + msgid "bad value (%s) for %s switch" + msgstr "valeur (%s) erronée pour l'option %s" + + #: config/arm/arm.c:582 + msgid "target CPU does not support APCS-32" + msgstr "CPU cible ne supporte pas APCS-32" + + #: config/arm/arm.c:587 + msgid "target CPU does not support APCS-26" + msgstr "CPU cible ne supporte pas APCS-26" + + #: config/arm/arm.c:593 + msgid "target CPU does not support interworking" + msgstr "CPU cible ne supporte pas l'inter-réseautage" + + #: config/arm/arm.c:599 + msgid "target CPU does not support THUMB instructions" + msgstr "CPU cible ne supporte pas les instructions THUMB" + + #: config/arm/arm.c:613 + msgid "enabling backtrace support is only meaningful when compiling for the Thumb" + msgstr "autoriser le support de pistage arrière si seulement significatif lors de la compilation pour le Thumb" + + #: config/arm/arm.c:616 + msgid "enabling callee interworking support is only meaningful when compiling for the Thumb" + msgstr "autoriser le support d'inter-réseautage des appelés si seulement significatif lors de la compilation pour le Thumb" + + #: config/arm/arm.c:619 + msgid "enabling caller interworking support is only meaningful when compiling for the Thumb" + msgstr "autoriser le support d'inter-réseautage des appelants si seulement significatif lors de la compilation pour le Thumb" + + #: config/arm/arm.c:625 + msgid "interworking forces APCS-32 to be used" + msgstr "l'inter-réseautage force l'utilisation de APCS-32" + + #: config/arm/arm.c:631 + msgid "-mapcs-stack-check incompatible with -mno-apcs-frame" + msgstr "-mapcs-stack-check incompatible avec -mno-apcs-frame" + + #: config/arm/arm.c:639 + msgid "-fpic and -mapcs-reent are incompatible" + msgstr "-fpic et -mapcs-reent sont incompatibles" + + #: config/arm/arm.c:642 + msgid "APCS reentrant code not supported. Ignored" + msgstr "Code réentrant APCS n'est pas supporté. Ignoré" + + #: config/arm/arm.c:650 + msgid "-g with -mno-apcs-frame may not give sensible debugging" + msgstr "-g avec -mno-apcs-frame peut ne pas donner une mise au point sensée" + + #: config/arm/arm.c:658 + msgid "passing floating point arguments in fp regs not yet supported" + msgstr "passage d'argument en virgule flottante dans les registres FP n'est pas encore supporté" + + #: config/arm/arm.c:687 + #, c-format + msgid "invalid floating point emulation option: -mfpe-%s" + msgstr "option d'émulation en virgule flottante invalide: -mfpe-%s" + + #: config/arm/arm.c:711 + msgid "structure size boundary can only be set to 8 or 32" + msgstr "taille des bornes de la structure peut seulement être 8 ou 32" + + #: config/arm/arm.c:719 + msgid "-mpic-register= is useless without -fpic" + msgstr "-mpic-register= est inutile sans -fpic" + + #: config/arm/arm.c:726 + #, c-format + msgid "unable to use '%s' for PIC register" + msgstr "incapable d'utiliser « %s » pour un registre PIC" + + #: config/arm/arm.c:1970 config/arm/arm.c:1993 config/avr/avr.c:4703 config/c4x/c4x.c:4650 config/h8300/h8300.c:3045 config/i386/i386.c:1260 config/i386/i386.c:1289 config/m68hc11/m68hc11.c:1220 config/mcore/mcore.c:3505 config/ns32k/ns32k.c:1044 config/rs6000/rs6000.c:10760 config/sh/sh.c:5583 config/sh/sh.c:5603 config/sh/sh.c:5642 config/stormy16/stormy16.c:2010 config/v850/v850.c:2047 + #, c-format + msgid "`%s' attribute only applies to functions" + msgstr "attribut « %s » s'applique seulement aux fonctions" + + #: config/arm/arm.c:9288 + msgid "unable to compute real location of stacked parameter" + msgstr "incapable de calculer la localisation réelle de la pile de paramètres" + + #: config/arm/arm.c:9968 + msgid "no low registers available for popping high registers" + msgstr "pas de registre bas disponible pour faire ressortir les registres du haut" + + #: config/arm/arm.c:10160 + msgid "interrupt Service Routines cannot be coded in Thumb mode" + msgstr "routines d'interruption de service ne peuvent être codées en mode THUMB" + + #: config/arm/pe.c:168 config/i386/winnt.c:290 config/mcore/mcore.c:3365 + #, c-format + msgid "initialized variable `%s' is marked dllimport" + msgstr "variable initialisé « %s » est marquée dllimport" + + #: config/arm/pe.c:177 config/i386/winnt.c:299 + #, c-format + msgid "static variable `%s' is marked dllimport" + msgstr "variable static « %s » est marquée dllimport" + + #: config/arm/arm.h:422 + msgid "Generate APCS conformant stack frames" + msgstr "Générer des trames de pile conformes à APCS" + + #: config/arm/arm.h:425 + msgid "Store function names in object code" + msgstr "Sotcker les noms de fonctions dans le code objet" + + #: config/arm/arm.h:429 + msgid "Use the 32-bit version of the APCS" + msgstr "Utilise la version 32 bts de APCS" + + #: config/arm/arm.h:431 + msgid "Use the 26-bit version of the APCS" + msgstr "Utiliser la version 26 bits de APCS" + + #: config/arm/arm.h:435 + msgid "Pass FP arguments in FP registers" + msgstr "Passer les arguments FP par les registres FP" + + #: config/arm/arm.h:438 + msgid "Generate re-entrant, PIC code" + msgstr "Générer du code PIC ré-entrant" + + #: config/arm/arm.h:441 + msgid "The MMU will trap on unaligned accesses" + msgstr "Le MMU va intercepter les accès mal alignés" + + #: config/arm/arm.h:448 + msgid "Use library calls to perform FP operations" + msgstr "Utiliser les appels de librairie pour exécuter les opérations FP" + + #: config/arm/arm.h:450 config/i960/i960.h:281 + msgid "Use hardware floating point instructions" + msgstr "Utiliser les instructions matérielles en virgule flottante" + + #: config/arm/arm.h:452 + msgid "Assume target CPU is configured as big endian" + msgstr "Assumer que le CPU cible est un système à octets de poids fort" + + #: config/arm/arm.h:454 + msgid "Assume target CPU is configured as little endian" + msgstr "Assumer que le CPU cible est un système à octets de poids faible" + + #: config/arm/arm.h:456 + msgid "Assume big endian bytes, little endian words" + msgstr "Assumer un système à octets de poids fort pour les octets et faible pour les mots" + + #: config/arm/arm.h:458 + msgid "Support calls between Thumb and ARM instruction sets" + msgstr "Supporter les appels des jeux d'instructions THUMB et ARM" + + #: config/arm/arm.h:461 + msgid "Generate a call to abort if a noreturn function returns" + msgstr "Générer un appel pour stopper si une fonction sans retour retourne un résultat" + + #: config/arm/arm.h:464 + msgid "Do not move instructions into a function's prologue" + msgstr "Ne pas déplacer les instruction dans le prologue de fonction" + + #: config/arm/arm.h:467 + msgid "Do not load the PIC register in function prologues" + msgstr "Ne pas charger le registre PIC dans les prologue de fonction" + + #: config/arm/arm.h:470 + msgid "Generate call insns as indirect calls, if necessary" + msgstr "Générer l'appel insn comme un appel indirect, si nécessaire" + + #: config/arm/arm.h:473 + msgid "Compile for the Thumb not the ARM" + msgstr "Compiler pour le THUMB et non pas le ARM" + + #: config/arm/arm.h:477 + msgid "Thumb: Generate (non-leaf) stack frames even if not needed" + msgstr "Thumb: générer (non feuilles) trames de pile même si non nécessaire" + + #: config/arm/arm.h:480 + msgid "Thumb: Generate (leaf) stack frames even if not needed" + msgstr "Thumb: générer (feuilles) trames de pile même si non nécessaire" + + #: config/arm/arm.h:483 + msgid "Thumb: Assume non-static functions may be called from ARM code" + msgstr "Thumb: assumer que les fonctions non statiques peuvent être appelées du code ARM" + + #: config/arm/arm.h:487 + msgid "Thumb: Assume function pointers may go to non-Thumb aware code" + msgstr "Thumb: assumer que les pointeurs de fonction peuvent tomber dans le code en dehors non sensible au Thumb" + + #: config/arm/arm.h:497 + msgid "Specify the name of the target CPU" + msgstr "Spécifier le nom du CPU cible" + + #: config/arm/arm.h:499 + msgid "Specify the name of the target architecture" + msgstr "Spécifier le nom de l'architecture cible" + + #: config/arm/arm.h:503 + msgid "Specify the version of the floating point emulator" + msgstr "Spécifier la version de l'émulateur en virgule flottante" + + #: config/arm/arm.h:505 + msgid "Specify the minimum bit alignment of structures" + msgstr "Spécifier le minimum de bits pour l'alignement de structures" + + #: config/arm/arm.h:507 + msgid "Specify the register to be used for PIC addressing" + msgstr "Spécifier le registre à utiliser pour l'adressage PIC" + + #: config/arm/pe.h:65 + msgid "Ignore dllimport attribute for functions" + msgstr "Ignorer l'attribut dllimport pour les fonctions" + + #. None of these is actually used in cc1. If we don't define them in target + #. switches cc1 complains about them. For the sake of argument lets allocate + #. bit 31 of target flags for such options. + #: config/arm/riscix.h:84 + msgid "Do symbol renaming for BSD" + msgstr "Ne pas renommer les symboles pour BSD" + + #: config/arm/riscix.h:85 + msgid "Do symbol renaming for X/OPEN" + msgstr "Ne pas renommer les symboles pour X/OPEN" + + #: config/arm/riscix.h:86 + msgid "Don't do symbol renaming" + msgstr "Ne pas renommer les symboles" + + #: config/avr/avr.c:221 + #, c-format + msgid "MCU `%s' not supported" + msgstr "MCU « %s » n'est pas supporté" + + #: config/avr/avr.c:461 + #, c-format + msgid "large frame pointer change (%d) with -mtiny-stack" + msgstr "grand pointeur de trames change (%d) avec -mtiny-stack" + + #: config/avr/avr.c:1056 + msgid "bad address, not (reg+disp):" + msgstr "adresse erronée, pas (reg+disp):" + + #: config/avr/avr.c:1064 + msgid "internal compiler error. Bad address:" + msgstr "erreur internal du compilateur. Adresse erronée:" + + #: config/avr/avr.c:1077 + msgid "internal compiler error. Unknown mode:" + msgstr "erreur internal du compilateur. Mode inconnu:" + + #: config/avr/avr.c:1785 config/avr/avr.c:2497 + msgid "invalid insn:" + msgstr "insn invalide:" + + #: config/avr/avr.c:1822 config/avr/avr.c:1908 config/avr/avr.c:1957 config/avr/avr.c:1966 config/avr/avr.c:2064 config/avr/avr.c:2236 config/avr/avr.c:2534 config/avr/avr.c:2645 + msgid "incorrect insn:" + msgstr "insn incoorect:" + + #: config/avr/avr.c:1985 config/avr/avr.c:2149 config/avr/avr.c:2307 config/avr/avr.c:2689 + msgid "unknown move insn:" + msgstr "insn de déplacement inconnu:" + + #: config/avr/avr.c:2925 + msgid "bad shift insn:" + msgstr "décalage insn erroné:" + + #: config/avr/avr.c:3041 config/avr/avr.c:3471 config/avr/avr.c:3851 + msgid "internal compiler error. Incorrect shift:" + msgstr "erreur internal du compilateur. Décalage incorrect:" + + #: config/avr/avr.c:4676 + msgid "only initialized variables can be placed into program memory area" + msgstr "seules les variables initialisées peuvent être placées dans la zone mémoire du programme" + + #: config/avr/avr.h:63 + msgid "Assume int to be 8 bit integer" + msgstr "Assumer que les int sont des entiers de 8 bits" + + #: config/avr/avr.h:65 + msgid "Change the stack pointer without disabling interrupts" + msgstr "Changer le pointeur de pile sans désactiver les interruptions" + + #: config/avr/avr.h:67 + msgid "Use subroutines for function prologue/epilogue" + msgstr "Utiliser des sous-routines pour le prologue/epilogue de fonction" + + #: config/avr/avr.h:69 + msgid "Change only the low 8 bits of the stack pointer" + msgstr "Changer seulement les 8 bits du bas du pointeur de pile" + + #: config/avr/avr.h:71 + msgid "Do not generate tablejump insns" + msgstr "Ne pas générer les sauts de table insns" + + #: config/avr/avr.h:74 + msgid "Output instruction sizes to the asm file" + msgstr "Produire les tailles d'instructions dans le fichier asm" + + #: config/avr/avr.h:87 + msgid "Specify the initial stack address" + msgstr "Spécifier l'adresse initiale de la pile" + + #: config/avr/avr.h:88 + msgid "Specify the MCU name" + msgstr "Spécifier le nom du MCU" + + #. `GIV_SORT_CRITERION(GIV1, GIV2)' + #. In some cases, the strength reduction optimization pass can + #. produce better code if this is defined. This macro controls the + #. order that induction variables are combined. This macro is + #. particularly useful if the target has limited addressing modes. + #. For instance, the SH target has only positive offsets in + #. addresses. Thus sorting to put the smallest address first allows + #. the most combinations to be found. + #: config/avr/avr.h:2566 + msgid "trampolines not supported" + msgstr "trampolines ne sont pas supportées" + + #: config/c4x/c4x-c.c:70 + #, c-format + msgid "missing '(' after '#pragma %s' - ignored" + msgstr "«(» manquante après «#pragma %s» - ignoré" + + #: config/c4x/c4x-c.c:73 + #, c-format + msgid "missing function name in '#pragma %s' - ignored" + msgstr "nom de fonction manquant dans «#pragma %s» - ignoré" + + #: config/c4x/c4x-c.c:78 + #, c-format + msgid "malformed '#pragma %s' - ignored" + msgstr "«#pragma %s» mal composé - ignoré" + + #: config/c4x/c4x-c.c:80 + #, c-format + msgid "missing section name in '#pragma %s' - ignored" + msgstr "nom de section manquant dans «#pragma %s» - ignoré" + + #: config/c4x/c4x-c.c:85 + #, c-format + msgid "missing ')' for '#pragma %s' - ignored" + msgstr "«)» manquante pour «#pragma %s» - ignoré" + + #: config/c4x/c4x-c.c:88 + #, c-format + msgid "junk at end of '#pragma %s'" + msgstr "rebut à la fin de «#pragma %s'" + + #: config/c4x/c4x.c:299 + #, c-format + msgid "unknown CPU version %d, using 40.\n" + msgstr "version de CPU %d inconnue, 40 est utilisé.\n" + + #: config/c4x/c4x.c:883 + #, c-format + msgid "ISR %s requires %d words of local vars, max is 32767" + msgstr "ISR %s requiert %d mots de var. locales, max est 32767." + + #: config/c4x/c4x.c:1635 + msgid "using CONST_DOUBLE for address" + msgstr "CONST_DOUBLE utilisé pour l'adresse" + + #: config/c4x/c4x.c:1775 + msgid "c4x_address_cost: Invalid addressing mode" + msgstr "c4x_address_cost: mode d'adressage invalide" + + #: config/c4x/c4x.c:1917 + #, c-format + msgid "c4x_print_operand: %%L inconsistency" + msgstr "c4x_print_operand: %%L inconsistent" + + #: config/c4x/c4x.c:1923 + #, c-format + msgid "c4x_print_operand: %%N inconsistency" + msgstr "c4x_print_operand: %%N inconsistent" + + #: config/c4x/c4x.c:1964 + #, c-format + msgid "c4x_print_operand: %%O inconsistency" + msgstr "c4x_print_operand: %%O inconsisten" + + #: config/c4x/c4x.c:2060 + msgid "c4x_print_operand: Bad operand case" + msgstr "c4x_print_operand: opérande erronée pour un case" + + #: config/c4x/c4x.c:2103 + msgid "c4x_print_operand_address: Bad post_modify" + msgstr "c4x_print_operand_address: post-modification erronée" + + #: config/c4x/c4x.c:2125 + msgid "c4x_print_operand_address: Bad pre_modify" + msgstr "c4x_print_operand_address: pré-modification erronée" + + #: config/c4x/c4x.c:2173 config/c4x/c4x.c:2185 config/c4x/c4x.c:2200 + msgid "c4x_print_operand_address: Bad operand case" + msgstr "c4x_print_operand_address: opérande erronée pour un case" + + #: config/c4x/c4x.c:2456 + msgid "c4x_rptb_insert: Cannot find start label" + msgstr "c4x_rptb_insert: ne peut repérer l'étiquette de départ" + + #: config/c4x/c4x.c:3443 config/c4x/c4x.c:3463 + msgid "mode not QImode" + msgstr "mode n'est pas QImode" + + #: config/c4x/c4x.c:3520 + msgid "invalid indirect memory address" + msgstr "adresse mémoire d'indirection invalide" + + #: config/c4x/c4x.c:3609 + msgid "invalid indirect (S) memory address" + msgstr "adresse mémoire (S) d'indirection invalide" + + #: config/c4x/c4x.c:3950 + msgid "c4x_valid_operands: Internal error" + msgstr "c4x_valid_operands: erreur interne" + + #: config/c4x/c4x.c:4430 + msgid "c4x_operand_subword: invalid mode" + msgstr "c4x_oprande_subword: mode invalide" + + #: config/c4x/c4x.c:4433 + msgid "c4x_operand_subword: invalid operand" + msgstr "c4x_operand_subword: opérande invalide" + + #. We could handle these with some difficulty. + #. e.g., *p-- => *(p-=2); *(p+1). + #: config/c4x/c4x.c:4459 + msgid "c4x_operand_subword: invalid autoincrement" + msgstr "c4x_operand_subword: autoincrement invalide" + + #: config/c4x/c4x.c:4465 + msgid "c4x_operand_subword: invalid address" + msgstr "c4x_operand_subword: adresse invalide" + + #: config/c4x/c4x.c:4476 + msgid "c4x_operand_subword: address not offsettable" + msgstr "c4x_operand_subword: un décalage d'adresse ne peut s'appliquer sur cette adresse" + + #: config/c4x/c4x.c:4676 + msgid "c4x_rptb_rpts_p: Repeat block top label moved\n" + msgstr "c4x_rptb_rpts_p: étiquette supérieur de bloc de répétition déplacée\n" + + #. Name of the c4x assembler. + #. Name of the c4x linker. + #. Define assembler options. + #. Define linker options. + #. Define C preprocessor options. + #. Specify the end file to link with. + #. Target compilation option flags. + #. Small memory model. + #. Use 24-bit MPYI for C3x. + #. Fast fixing of floats. + #. Allow use of RPTS. + #. Emit C3x code. + #. Be compatible with TI assembler. + #. Be paranoid about DP reg. in ISRs. + #. Pass arguments on stack. + #. Enable features under development. + #. Enable repeat block. + #. Use BK as general register. + #. Use decrement and branch for C3x. + #. Enable debugging of GCC. + #. Force constants into registers. + #. Allow unsigned loop counters. + #. Force op0 and op1 to be same. + #. Save all 40 bits for floats. + #. Allow parallel insns. + #. Allow MPY||ADD, MPY||SUB insns. + #. Assume mem refs possibly aliased. + #. Emit C30 code. + #. Emit C31 code. + #. Emit C32 code. + #. Emit C33 code. + #. Emit C40 code. + #. Emit C44 code. + #. Run-time compilation parameters selecting different hardware subsets. + #. + #. Macro to define tables used to set the flags. + #. This is a list in braces of triplets in braces, + #. each pair being { "NAME", VALUE, "DESCRIPTION" } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/c4x/c4x.h:141 + msgid "Small memory model" + msgstr "Modèle de mémoire petite" + + #: config/c4x/c4x.h:143 + msgid "Big memory model" + msgstr "Modèle de mémoire grande" + + #: config/c4x/c4x.h:145 + msgid "Use MPYI instruction for C3x" + msgstr "Utiliser les instructions MPYI pour C3x" + + #: config/c4x/c4x.h:147 + msgid "Do not use MPYI instruction for C3x" + msgstr "Ne pas utiliser les instructions MPYI pour C3x" + + #: config/c4x/c4x.h:149 + msgid "Use fast but approximate float to integer conversion" + msgstr "Utiliser le mode rapide mais approprié de conversion de flottans à entiers" + + #: config/c4x/c4x.h:151 + msgid "Use slow but accurate float to integer conversion" + msgstr "Utiliser le mode lent mais précis de conversion de flottans à entiers" + + #: config/c4x/c4x.h:153 + msgid "Enable use of RTPS instruction" + msgstr "Autoriser l'utilisation de l'instruction RTPS" + + #: config/c4x/c4x.h:155 + msgid "Disable use of RTPS instruction" + msgstr "Interdire l'utilisation de l'instruction RTPS" + + #: config/c4x/c4x.h:157 + msgid "Enable use of RTPB instruction" + msgstr "Autoriser l'utilisation de l'instruction RTPB" + + #: config/c4x/c4x.h:159 + msgid "Disable use of RTPB instruction" + msgstr "Interdire l'utilisation de l'instruction RTPB" + + #: config/c4x/c4x.h:161 + msgid "Generate code for C30 CPU" + msgstr "Générer du code pour CPU C30" + + #: config/c4x/c4x.h:163 + msgid "Generate code for C31 CPU" + msgstr "Générer du code pour CPU C31" + + #: config/c4x/c4x.h:165 + msgid "Generate code for C32 CPU" + msgstr "Générer du code pour CPU C32" + + #: config/c4x/c4x.h:167 + msgid "Generate code for C33 CPU" + msgstr "Générer du code pour CPU C33" + + #: config/c4x/c4x.h:169 + msgid "Generate code for C40 CPU" + msgstr "Générer du code pour CPU C40" + + #: config/c4x/c4x.h:171 + msgid "Generate code for C44 CPU" + msgstr "Générer du code pour CPU C44" + + #: config/c4x/c4x.h:173 + msgid "Emit code compatible with TI tools" + msgstr "Produire du code compatible avec les outils TI" + + #: config/c4x/c4x.h:175 + msgid "Emit code to use GAS extensions" + msgstr "Produire du code pour utiliser les extensions GAS" + + #: config/c4x/c4x.h:177 config/c4x/c4x.h:181 + msgid "Save DP across ISR in small memory model" + msgstr "Sauvegarder DP à travers ISR dans le modèle de mémoire petite" + + #: config/c4x/c4x.h:179 config/c4x/c4x.h:183 + msgid "Don't save DP across ISR in small memory model" + msgstr "Ne pas sauvegarder DP à travers ISR dans le modèle de mémoire petite" + + #: config/c4x/c4x.h:185 + msgid "Pass arguments on the stack" + msgstr "Passer les arguments sur la pile" + + #: config/c4x/c4x.h:187 + msgid "Pass arguments in registers" + msgstr "Passer les arguments par les registres" + + #: config/c4x/c4x.h:189 + msgid "Enable new features under development" + msgstr "Autoriser les nouvelles options en développement" + + #: config/c4x/c4x.h:191 + msgid "Disable new features under development" + msgstr "Désactiver les nouvelles options en développement" + + #: config/c4x/c4x.h:193 + msgid "Use the BK register as a general purpose register" + msgstr "Utiliser le registre BK comme registre général tout usage" + + #: config/c4x/c4x.h:195 + msgid "Do not allocate BK register" + msgstr "Ne pas allouer de registre BK" + + #: config/c4x/c4x.h:197 + msgid "Enable use of DB instruction" + msgstr "Activer l'utilisation d'instruction DB" + + #: config/c4x/c4x.h:199 + msgid "Disable use of DB instruction" + msgstr "Désactiver l'utilisation d'instruction DB" + + #: config/c4x/c4x.h:201 + msgid "Enable debugging" + msgstr "Permettre la mise au point" + + #: config/c4x/c4x.h:203 + msgid "Disable debugging" + msgstr "Désactiver la mise au point" + + #: config/c4x/c4x.h:205 + msgid "Force constants into registers to improve hoisting" + msgstr "Forcer les constantes dans les registres pour améliorer la montée" + + #: config/c4x/c4x.h:207 + msgid "Don't force constants into registers" + msgstr "Ne pas forcer les constantes dans les registres" + + #: config/c4x/c4x.h:209 + msgid "Force RTL generation to emit valid 3 operand insns" + msgstr "Forcer la génération RTL pour produire des opérandes insn 3 valides" + + #: config/c4x/c4x.h:211 + msgid "Allow RTL generation to emit invalid 3 operand insns" + msgstr "Autoriser la génération RTL pour produire des opérandes insn 3 invalides" + + #: config/c4x/c4x.h:213 + msgid "Allow unsigned interation counts for RPTB/DB" + msgstr "Autoriser un compteur non signé d'itération pour RPTB/DB" + + #: config/c4x/c4x.h:215 + msgid "Disallow unsigned iteration counts for RPTB/DB" + msgstr "Interdire un compteur non signé d'itération pour RPTB/DB" + + #: config/c4x/c4x.h:217 + msgid "Preserve all 40 bits of FP reg across call" + msgstr "Préserver tous les 40 bits du registre FP à travers les appels" + + #: config/c4x/c4x.h:219 + msgid "Only preserve 32 bits of FP reg across call" + msgstr "Préserver seulement 32 bits du registre FP à travers les appels" + + #: config/c4x/c4x.h:221 + msgid "Enable parallel instructions" + msgstr "Autoriser les instructions parallèles" + + #: config/c4x/c4x.h:223 + msgid "Disable parallel instructions" + msgstr "Interdire les instructions parallèles" + + #: config/c4x/c4x.h:225 + msgid "Enable MPY||ADD and MPY||SUB instructions" + msgstr "Autoriser les instructions MPY||ADD et MPY||SUB" + + #: config/c4x/c4x.h:227 + msgid "Disable MPY||ADD and MPY||SUB instructions" + msgstr "Interdire les instructions MPY||ADD et MPY||SUB" + + #: config/c4x/c4x.h:229 + msgid "Assume that pointers may be aliased" + msgstr "Assumer que les pointeurs peuvent être aliasés" + + #: config/c4x/c4x.h:231 + msgid "Assume that pointers not aliased" + msgstr "Assumer que les pointeurs ne peuvent pas être aliasés" + + #: config/c4x/c4x.h:304 + msgid "Specify maximum number of iterations for RPTS" + msgstr "Spécifier le nombre maximum d'itérations pour RPTS" + + #: config/c4x/c4x.h:306 + msgid "Select CPU to generate code for" + msgstr "Sélectionner le CPU pour lequel le code doit être généré" + + #. Macros used in the machine description to test the flags. + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/clipper/clipper.h:40 + msgid "Generate code for the C400" + msgstr "Générer le code pour le C400" + + #: config/clipper/clipper.h:41 + msgid "Generate code for the C300" + msgstr "Générer le code pour le C300" + + #: config/convex/convex.h:53 + msgid "Generate code for c1" + msgstr "Générer le code pour le c1" + + #: config/convex/convex.h:54 + msgid "Generate code for c2" + msgstr "Générer le code pour le c2" + + #: config/convex/convex.h:55 + msgid "Generate code for c32" + msgstr "Générer le code pour le c3" + + #: config/convex/convex.h:56 config/convex/convex.h:57 + msgid "Generate code for c34" + msgstr "Générer le code pour le c34" + + #: config/convex/convex.h:59 + msgid "Use standard calling sequence, with arg count word" + msgstr "Utiliser la séquence standard d'appel, avec arg et mot compteur" + + #: config/convex/convex.h:61 + msgid "Place arg count in a nop instruction (faster than push)" + msgstr "Placer le compteur d'arg dans une instruction NOP (plus rapide que push)" + + #: config/convex/convex.h:63 + msgid "Don't push arg count, depend on symbol table" + msgstr "Ne pas empiler le compteur d'arg, dépend de la table de symboles" + + #: config/convex/convex.h:65 + msgid "Use data cache for volatile mem refs (default)" + msgstr "Utiliser la cache de données pour les réf. mémoire volatiles (par défaut)" + + #: config/convex/convex.h:67 + msgid "Don't use data cache for volatile mem refs" + msgstr "Ne pas utiliser la cache de données pour les réf. mémoire volatiles" + + #: config/convex/convex.h:69 + msgid "Bypass data cache for volatile mem refs" + msgstr "Éviter la cache de données pour les réf. mémoire volatiles" + + #: config/convex/convex.h:70 + msgid "Use 64-bit longs" + msgstr "Utiliser des longs de 64 bits" + + #: config/convex/convex.h:71 + msgid "Use cc- and libc-compatible 32-bit longs" + msgstr "Utiliser cc- et libc-compatible longs de 32 bits" + + #: config/cris/cris.c:569 + msgid "unexpected index-type in cris_print_index" + msgstr "type d'index inattendu dans cris_print_index" + + #: config/cris/cris.c:585 + msgid "unexpected base-type in cris_print_base" + msgstr "type de base inattendu dans cris_print_base" + + #: config/cris/cris.c:878 + #, c-format + msgid "stackframe too big: %d bytes" + msgstr "trame de pile trop grande: %d octets" + + #: config/cris/cris.c:1193 + msgid "allocated but unused delay list in epilogue" + msgstr "alloué mais liste de délai non utilisée dans l'épilogue" + + #: config/cris/cris.c:1203 + msgid "unexpected function type needing stack adjustment for __builtin_eh_return" + msgstr "type de fonction inattendue ajustement de la pile nécessaire pour « __builtin_eh_return »" + + #: config/cris/cris.c:1282 + msgid "invalid operand for 'b' modifier" + msgstr "opérande invalide pour le modificateur « b »" + + #: config/cris/cris.c:1294 + msgid "invalid operand for 'v' modifier" + msgstr "opérande invalide pour le modificateur « v »" + + #: config/cris/cris.c:1304 + msgid "invalid operand for 'P' modifier" + msgstr "opérande invalide pour le modificateur « P »" + + #: config/cris/cris.c:1311 + msgid "invalid operand for 'p' modifier" + msgstr "opérande invalide pour le modificateur « p »" + + #: config/cris/cris.c:1350 + msgid "invalid operand for 'z' modifier" + msgstr "opérande invalide pour le modificateur « z »" + + #: config/cris/cris.c:1381 config/cris/cris.c:1411 + msgid "invalid operand for 'H' modifier" + msgstr "opérande invalide pour le modificateur « H »" + + #: config/cris/cris.c:1387 + msgid "bad register" + msgstr "registre erroné" + + #: config/cris/cris.c:1425 + msgid "invalid operand for 'e' modifier" + msgstr "opérande invalide pour le modificateur « e »" + + #: config/cris/cris.c:1442 + msgid "invalid operand for 'm' modifier" + msgstr "opérande invalide pour le modificateur « m »" + + #: config/cris/cris.c:1467 + msgid "invalid operand for 'A' modifier" + msgstr "opérande invalide pour le modificateur « A »" + + #: config/cris/cris.c:1475 + msgid "invalid operand for 'D' modifier" + msgstr "opérande invalide pour le modificateur « D »" + + #: config/cris/cris.c:1489 + msgid "invalid operand for 'T' modifier" + msgstr "opérande invalide pour le modificateur « T »" + + #: config/cris/cris.c:1498 + msgid "invalid operand modifier letter" + msgstr "opérande invalide pour le modificateur de lettre" + + #: config/cris/cris.c:1506 + #, c-format + msgid "internal error: bad register: %d" + msgstr "erreur interne: registre erroné: %d" + + #: config/cris/cris.c:1554 + msgid "unexpected multiplicative operand" + msgstr "opérande multiplicative inattendue" + + #: config/cris/cris.c:1574 + msgid "unexpected operand" + msgstr "opérande inattendue" + + #: config/cris/cris.c:1609 config/cris/cris.c:1619 + msgid "unrecognized address" + msgstr "adresse non reconnue" + + #: config/cris/cris.c:1975 + msgid "internal error: sideeffect-insn affecting main effect" + msgstr "erreur interne: effet de bord de insn sideeffect-insn ayant un effet principal" + + #. If we get here, the caller got its initial tests wrong. + #: config/cris/cris.c:2262 + msgid "internal error: cris_side_effect_mode_ok with bad operands" + msgstr "erreur interne: cris_side_effect_mode_ok avec des opérandes erronées" + + #: config/cris/cris.c:2344 config/cris/cris.c:2402 + msgid "unrecognized supposed constant" + msgstr "supposée constante non reconnue" + + #: config/cris/cris.c:2443 + msgid "unrecognized supposed constant in cris_global_pic_symbol" + msgstr "supposée constante non reconnue dans cris_global_pic_symbol" + + #: config/cris/cris.c:2462 + #, c-format + msgid "-max-stackframe=%d is not usable, not between 0 and %d" + msgstr "-max-stackframe=%d n'est pas utilisable, n'est pas entre 0 et %d" + + #: config/cris/cris.c:2490 + #, c-format + msgid "unknown CRIS version specification in -march= or -mcpu= : %s" + msgstr "spécification de version CRIS inconnue dans -march= ou -mcpu= : %s" + + #: config/cris/cris.c:2526 + #, c-format + msgid "unknown CRIS cpu version specification in -mtune= : %s" + msgstr "spécification de version CRIS inconnue dans -mtune= : %s" + + #: config/cris/cris.c:2544 + msgid "-fPIC and -fpic are not supported in this configuration" + msgstr "-fPIC et -fpic ne sont pas supportées par cette configuration" + + #: config/cris/cris.c:2560 + msgid "that particular -g option is invalid with -maout and -melinux" + msgstr "l'option particulière -g est invalide avec -maout et -melinux" + + #: config/cris/cris.c:2790 config/cris/cris.c:2835 + msgid "unexpected side-effects in address" + msgstr "effets de bord inattendue dans l'adresse" + + #. Labels are never marked as global symbols. + #: config/cris/cris.c:2932 config/cris/cris.c:2963 + msgid "unexpected PIC symbol" + msgstr "symbole PIC inattendue" + + #: config/cris/cris.c:2936 + msgid "PIC register isn't set up" + msgstr "le registre n'est pas initialisé" + + #: config/cris/cris.c:2949 config/cris/cris.c:3032 + msgid "unexpected address expression" + msgstr "expression d'adresse inattendue" + + #: config/cris/cris.c:2967 + msgid "emitting PIC operand, but PIC register isn't set up" + msgstr "génération d'une opérande PIC mais le registre PIC n'est pas initialisé" + + #: config/cris/cris.c:2976 + msgid "unexpected NOTE as addr_const:" + msgstr "NOTE inattendu comme addr_conts:" + + #: config/cris/aout.h:106 + msgid "Compile for the MMU-less Etrax 100-based elinux system" + msgstr "Compiler pour le MMU-less Etrax 100-based de système elinux" + + #: config/cris/aout.h:113 + msgid "For elinux, request a specified stack-size for this program" + msgstr "Pour elinux, faire la requête pour un taille de pile spécifique pour ce programme" + + #. No "no-etrax" as it does not really imply any model. On the other hand, "etrax" implies the common (and large) subset matching all models. + #: config/cris/cris.h:336 + msgid "Compile for ETRAX 4 (CRIS v3)" + msgstr "Compilé pour ETRAX 4 (CRIS v3)" + + #: config/cris/cris.h:341 + msgid "Compile for ETRAX 100 (CRIS v8)" + msgstr "Compile pour ETRAX 100 (CRIS v8)" + + #: config/cris/cris.h:345 + msgid "Emit verbose debug information in assembly code" + msgstr "Produire des informations de mise au point dans le code assemblé" + + #: config/cris/cris.h:348 + msgid "Do not use condition codes from normal instructions" + msgstr "Ne pas utiliser du code conditionnel pour des instructions normales" + + #: config/cris/cris.h:352 + msgid "Do not emit addressing modes with side-effect assignment" + msgstr "Ne pas produire de modes d'adressage avec des affectations avec effet de bord" + + #: config/cris/cris.h:355 + msgid "Do not tune stack alignment" + msgstr "Ne pas ajuster l'alignement de la pile" + + #: config/cris/cris.h:358 + msgid "Do not tune writable data alignment" + msgstr "Ne pas ajuster l'alignement les sections de données dynamiques" + + #: config/cris/cris.h:361 + msgid "Do not tune code and read-only data alignment" + msgstr "Ne pas ajuster l'alignement du code et des sections de données statiques" + + #: config/cris/cris.h:370 + msgid "Align code and data to 32 bits" + msgstr "Aligner le code et les données sur 32 bits" + + #: config/cris/cris.h:383 + msgid "Don't align items in code or data" + msgstr "Ne pas aligner les items dans le code ou les données" + + #: config/cris/cris.h:386 + msgid "Do not emit function prologue or epilogue" + msgstr "Ne pas générer de prologue ou d'épilogue de fonction" + + #. We have to handle this m-option here since we can't wash it off in both CC1_SPEC and CC1PLUS_SPEC. + #: config/cris/cris.h:390 + msgid "Use the most feature-enabling options allowed by other options" + msgstr "Utiliser le plus d'options autorisant autorisant des options permises par les autres options" + + #. We must call it "override-" since calling it "no-" will cause gcc.c to forget it, if there's a "later" -mbest-lib-options. Kludgy, but needed for some multilibbed files. + #: config/cris/cris.h:396 + msgid "Override -mbest-lib-options" + msgstr "Écraser -mbest-lib-options" + + #: config/cris/cris.h:428 + msgid "Generate code for the specified chip or CPU version" + msgstr "Générer le code pour la version de CPU ou le circuit spécifique" + + #: config/cris/cris.h:430 + msgid "Tune alignment for the specified chip or CPU version" + msgstr "ajuster l'alignement pour la version de CPU ou le circuit spécifique" + + #: config/cris/cris.h:432 + msgid "Warn when a stackframe is larger than the specified size" + msgstr "Avertir lorsqu'une trame de pile est plus grande que la taille spécifiée" + + #. Node: Profiling + #: config/cris/cris.h:1029 + msgid "no FUNCTION_PROFILER for CRIS" + msgstr "pas de FUNCTION_PROFILER pour CRIS" + + #: config/cris/linux.h:74 + msgid "Together with -fpic and -fPIC, do not use GOTPLT references" + msgstr "ensemble avec -fpic et -fPIC, ne pas utiliser les références GOTPLT" + + #: config/d30v/d30v.c:209 + #, c-format + msgid "bad modes_tieable_p for register %s, mode1 %s, mode2 %s" + msgstr "modes_tieable_p erronée pour le registre %s, mode1 %s, mode2 %s" + + #: config/d30v/d30v.c:2676 + msgid "bad insn to d30v_print_operand_address:" + msgstr "insn erroné pour d30v_print_operand_addresse:" + + #: config/d30v/d30v.c:2693 config/d30v/d30v.c:2754 config/d30v/d30v.c:2775 config/d30v/d30v.c:2793 + msgid "bad insn to d30v_print_operand_memory_reference:" + msgstr "insn erroné pour d30v_print_operand_memory_reference:" + + #: config/d30v/d30v.c:2861 + msgid "bad insn to d30v_print_operand, 'f' modifier:" + msgstr "insn erroné pour d30v_print_operand, modificateur « f »:" + + #: config/d30v/d30v.c:2870 + msgid "bad insn to d30v_print_operand, 'A' modifier:" + msgstr "insn erroné pour d30v_print_operand, modificateur « A »:" + + #: config/d30v/d30v.c:2877 + msgid "bad insn to d30v_print_operand, 'M' modifier:" + msgstr "insn erroné pour d30v_print_operand, modificateur « M »:" + + #: config/d30v/d30v.c:2931 + msgid "bad insn to print_operand, 'F' or 'T' modifier:" + msgstr "insn erroné pour print_operand, modificateur « F » ou « T »:" + + #: config/d30v/d30v.c:2942 + msgid "bad insn to print_operand, 'B' modifier:" + msgstr "insn erroné pour print_operand, modificateur « B »:" + + #: config/d30v/d30v.c:2949 + msgid "bad insn to print_operand, 'E' modifier:" + msgstr "insn erroné pour print_operand, modificateur « E »:" + + #: config/d30v/d30v.c:2967 + msgid "bad insn to print_operand, 'R' modifier:" + msgstr "insn erroné to print_operand, modificateur « R »:" + + #: config/d30v/d30v.c:2976 config/d30v/d30v.c:2984 + msgid "bad insn to print_operand, 's' modifier:" + msgstr "insn erroné to print_operand, modificateur « s »:" + + #: config/d30v/d30v.c:3013 + msgid "bad insn in d30v_print_operand, 0 case" + msgstr "insn erroné dans d30v_print_operand, cas 0" + + #: config/d30v/d30v.c:3368 + msgid "d30v_emit_comparison" + msgstr "d30v_emit_comparison" + + #: config/d30v/d30v.c:3412 + msgid "bad call to d30v_move_2words" + msgstr "appel erroné à d30v_move_2words" + + #: config/d30v/d30v.h:108 + msgid "Enable use of conditional move instructions" + msgstr "Autoriser l'utilisation des instructions conditionnelles move" + + #: config/d30v/d30v.h:111 + msgid "Disable use of conditional move instructions" + msgstr "Interdire l'utilisation des instructions conditionnelles move" + + #: config/d30v/d30v.h:114 + msgid "Debug argument support in compiler" + msgstr "Mettre au point le support d'argument dans le compilateur" + + #: config/d30v/d30v.h:117 + msgid "Debug stack support in compiler" + msgstr "Mettre au point le support de la pile dans le compilateur" + + #: config/d30v/d30v.h:120 + msgid "Debug memory address support in compiler" + msgstr "Mettre au point le support d'adresses dans le compilateur" + + #: config/d30v/d30v.h:123 + msgid "Make adjacent short instructions parallel if possible" + msgstr "Rendre adjacentes les instructions short en instructions parallèles si possible" + + #: config/d30v/d30v.h:126 + msgid "Do not make adjacent short instructions parallel" + msgstr "Ne pas rendre adjacentes les instructions short en instructions parallèles" + + #: config/d30v/d30v.h:129 config/d30v/d30v.h:132 + msgid "Link programs/data to be in external memory by default" + msgstr "Faire l'édition de lien des programmes/données comme étant externe à la mémoire par défaut" + + #: config/d30v/d30v.h:135 + msgid "Link programs/data to be in onchip memory by default" + msgstr "Faire l'édition de lien des programmes/données comme étant interne dans la circuiterie de la mémoire par défaut" + + #: config/d30v/d30v.h:143 + msgid "Change the branch costs within the compiler" + msgstr "Changer les coûts de branchement à l'intérieur du compilateur" + + #: config/d30v/d30v.h:146 + msgid "Change the threshold for conversion to conditional execution" + msgstr "Changer le seuil pour la conversion en une exécution conditionnelle" + + #: config/dsp16xx/dsp16xx.c:1446 config/dsp16xx/dsp16xx.c:1469 + msgid "stack size > 32k" + msgstr "taille de la pile > 32k" + + #: config/dsp16xx/dsp16xx.c:1678 + msgid "invalid addressing mode" + msgstr "mode d'adressage invalide" + + #: config/dsp16xx/dsp16xx.c:1857 + msgid "bad register extension code" + msgstr "code d'extension de registre erroné" + + #: config/dsp16xx/dsp16xx.c:1958 + msgid "invalid offset in ybase addressing" + msgstr "décalage invalide dans l'adresse ybase" + + #: config/dsp16xx/dsp16xx.c:1961 + msgid "invalid register in ybase addressing" + msgstr "registre invalide dans l'adressage ybase" + + #: config/dsp16xx/dsp16xx.c:1990 + msgid "inline float constants not supported on this host" + msgstr "enlignage des constantes flottantes n'est pas supporté sur cet hôte" + + #: config/dsp16xx/dsp16xx.c:2140 + msgid "invalid shift operator in emit_1600_core_shift" + msgstr "opérateur de décalage invalide dans emit_1600_core_shift" + + #: config/dsp16xx/dsp16xx.c:2469 + msgid "invalid mode for gen_tst_reg" + msgstr "mode invalide pour gen_tst_reg" + + #: config/dsp16xx/dsp16xx.c:2541 + msgid "invalid mode for integer comparison in gen_compare_reg" + msgstr "mode invalide pour la comparaison d'entiers dans gen_compare_reg" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/dsp16xx/dsp16xx.h:215 + msgid "Pass parameters in registers (default)" + msgstr "Passer les paramètres par les registres (par défaut)" + + #: config/dsp16xx/dsp16xx.h:217 + msgid "Don't pass parameters in registers" + msgstr "Ne pas passer les paramètres par les registres" + + #: config/dsp16xx/dsp16xx.h:219 + msgid "Generate code for near calls" + msgstr "Générer du code pour les appels proches" + + #: config/dsp16xx/dsp16xx.h:221 + msgid "Don't generate code for near calls" + msgstr "Ne pas générer du code pour les appels proches" + + #: config/dsp16xx/dsp16xx.h:223 + msgid "Generate code for near jumps" + msgstr "Générer du code pour les sauts proches" + + #: config/dsp16xx/dsp16xx.h:225 + msgid "Don't generate code for near jumps" + msgstr "Ne pas générer du code pour les sauts proches" + + #: config/dsp16xx/dsp16xx.h:227 + msgid "Generate code for a bit-manipulation unit" + msgstr "Générer du code pour une unité de manipulation de bits" + + #: config/dsp16xx/dsp16xx.h:229 + msgid "Don't generate code for a bit-manipulation unit" + msgstr "Ne pas générer du code pour une unité de manipulation de bits" + + #: config/dsp16xx/dsp16xx.h:231 + msgid "Generate code for memory map1" + msgstr "Générer du code pour la mémoire map1" + + #: config/dsp16xx/dsp16xx.h:233 + msgid "Generate code for memory map2" + msgstr "Générer du code pour la mémoire map2" + + #: config/dsp16xx/dsp16xx.h:235 + msgid "Generate code for memory map3" + msgstr "Générer du code pour la mémoire map3" + + #: config/dsp16xx/dsp16xx.h:237 + msgid "Generate code for memory map4" + msgstr "Générer du code pour la mémoire map4" + + #: config/dsp16xx/dsp16xx.h:239 + msgid "Ouput extra code for initialized data" + msgstr "Produire du code additionnel pour les données initialisées" + + #: config/dsp16xx/dsp16xx.h:241 + msgid "Don't let reg. allocator use ybase registers" + msgstr "Ne pas laisser l'allocateur de registres utiliser les registres ybase" + + #: config/dsp16xx/dsp16xx.h:243 + msgid "Output extra debug info in Luxworks environment" + msgstr "Produire des informations supplémentaires de mise au point dans l'environnement Luxworks" + + #: config/dsp16xx/dsp16xx.h:245 + msgid "Save temp. files in Luxworks environment" + msgstr "Sauvegarder les fichiers temporaires dans l'environnement Luxworks" + + #: config/dsp16xx/dsp16xx.h:257 + msgid "Specify alternate name for text section" + msgstr "Spécifier un nom alternatif pour la section texte" + + #: config/dsp16xx/dsp16xx.h:259 + msgid "Specify alternate name for data section" + msgstr "Spécifier un nom alternatif pour la section données" + + #: config/dsp16xx/dsp16xx.h:261 + msgid "Specify alternate name for bss section" + msgstr "Spécifier un nom alternatif pour la section bss" + + #: config/dsp16xx/dsp16xx.h:263 + msgid "Specify alternate name for constant section" + msgstr "Spécifier un nom alternatif pour la section des constantes" + + #: config/dsp16xx/dsp16xx.h:265 + msgid "Specify alternate name for dsp16xx chip" + msgstr "Spécifier un nom alternatif pour le cirsuit dsp16xx" + + #. Output assembler code to FILE to increment profiler label # LABELNO + #. for profiling a function entry. + #: config/dsp16xx/dsp16xx.h:1219 config/dsp16xx/dsp16xx.h:1224 config/dsp16xx/dsp16xx.h:1229 config/dsp16xx/dsp16xx.h:1809 config/dsp16xx/dsp16xx.h:1814 + msgid "profiling not implemented yet" + msgstr "profilage n'est pas implanté encore" + + #. Emit RTL insns to initialize the variable parts of a trampoline. + #. FNADDR is an RTX for the address of the function's pure code. + #. CXT is an RTX for the static chain value for the function. + #: config/dsp16xx/dsp16xx.h:1240 config/dsp16xx/dsp16xx.h:1252 + msgid "trampolines not yet implemented" + msgstr "trampolines ne sont pas encore implantées" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/elxsi/elxsi.h:51 + msgid "Generate code the unix assembler can handle" + msgstr "Générer du code que l'assembleur UNIX peut traiter" + + #: config/elxsi/elxsi.h:52 + msgid "Generate code an embedded assembler can handle" + msgstr "Générer du code qu'un assembleur enchâssé peut traiter" + + #: config/fr30/fr30.c:456 + msgid "fr30_print_operand_address: unhandled address" + msgstr "fr30_print_operand_address: adresse non traitée" + + #: config/fr30/fr30.c:483 + #, c-format + msgid "fr30_print_operand: unrecognized %%p code" + msgstr "fr30_print_operand: code %%p non reconnue" + + #: config/fr30/fr30.c:503 + #, c-format + msgid "fr30_print_operand: unrecognized %%b code" + msgstr "fr30_print_operand: code %%b non reconnue" + + #: config/fr30/fr30.c:524 + #, c-format + msgid "fr30_print_operand: unrecognized %%B code" + msgstr "fr30_print_operand: code %%B non reconnu" + + #: config/fr30/fr30.c:532 + #, c-format + msgid "fr30_print_operand: invalid operand to %%A code" + msgstr "fr30_print_operand: opérande invalide pour code %%A" + + #: config/fr30/fr30.c:549 + #, c-format + msgid "fr30_print_operand: invalid %%x code" + msgstr "fr30_print_operand: code %%x invalide" + + #: config/fr30/fr30.c:556 + #, c-format + msgid "fr30_print_operand: invalid %%F code" + msgstr "fr30_print_operand: code %%F invalide" + + #: config/fr30/fr30.c:572 + msgid "fr30_print_operand: unknown code" + msgstr "fr30_print_operand: code inconnu" + + #: config/fr30/fr30.c:601 config/fr30/fr30.c:610 config/fr30/fr30.c:621 config/fr30/fr30.c:634 + msgid "fr30_print_operand: unhandled MEM" + msgstr "fr30_print_operand: MEM non traité" + + #: config/fr30/fr30.h:57 + msgid "Assume small address space" + msgstr "Assumer un petit espace d'adressage" + + #: config/h8300/h8300.c:142 + msgid "-ms2600 is used without -ms" + msgstr "-ms2600 est utilisé sans -ms" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/h8300/h8300.h:117 + msgid "Generate H8/S code" + msgstr "Générer du code H8/S" + + #: config/h8300/h8300.h:118 + msgid "Do not generate H8/S code" + msgstr "Ne pas générer du code H8/S" + + #: config/h8300/h8300.h:119 + msgid "Generate H8/S2600 code" + msgstr "Générer du code H8/S2600" + + #: config/h8300/h8300.h:120 + msgid "Do not generate H8/S2600 code" + msgstr "Ne pas générer du code H8/S2600" + + #: config/h8300/h8300.h:121 + msgid "Make integers 32 bits wide" + msgstr "Rendre les entiers larges de 32 bits" + + #: config/h8300/h8300.h:124 + msgid "Use registers for argument passing" + msgstr "Utiliser les registres pour le passage d'arguments" + + #: config/h8300/h8300.h:126 + msgid "Do not use registers for argument passing" + msgstr "Ne pas utiliser les registres pour le passage d'arguments" + + #: config/h8300/h8300.h:128 + msgid "Consider access to byte sized memory slow" + msgstr "Considérer l'accès mémoire lent pour la taille d'octets" + + #: config/h8300/h8300.h:129 + msgid "Enable linker relaxing" + msgstr "Auoriser la rélâche par l'éditeur de liens" + + #: config/h8300/h8300.h:131 + msgid "Generate H8/300H code" + msgstr "Générer du code H8/300H" + + #: config/h8300/h8300.h:132 + msgid "Do not generate H8/300H code" + msgstr "Ne pas générer du code H8/300H" + + #: config/h8300/h8300.h:133 + msgid "Use H8/300 alignment rules" + msgstr "Utiliser les règles d'alignement H8/300" + + #: config/i370/i370-c.c:54 + msgid "junk at end of #pragma map" + msgstr "rebut à la fin de #pragma map" + + #: config/i370/i370-c.c:60 + msgid "malformed #pragma map, ignored" + msgstr "#pragma map mal composé, ignoré" + + #: config/i370/i370.c:897 + msgid "real name is too long - alias ignored" + msgstr "nom réel est trop long - alias ignoré" + + #: config/i370/i370.c:902 + msgid "alias name is too long - alias ignored" + msgstr "nom d'alias est trop long - alias ignoré" + + #: config/i370/i370.c:1173 + msgid "internal error--no jump follows compare:" + msgstr "erreur interne--pas de saut suivant la comparaison:" + + #. Macro to define tables used to set the flags. This is a list in braces + #. of pairs in braces, each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/i370/i370.h:63 + msgid "Generate char instructions" + msgstr "Générer des instructions « char »" + + #: config/i370/i370.h:64 + msgid "Do not generate char instructions" + msgstr "Ne pas générer des instructions « char »" + + #: config/i386/i386.c:925 + #, c-format + msgid "code model %s not supported in PIC mode" + msgstr "model de code %s n'est pas supporté en mode PIC" + + #: config/i386/i386.c:935 config/sparc/sparc.c:344 + #, c-format + msgid "bad value (%s) for -mcmodel= switch" + msgstr "valeur erronée (%s) pour l'opton -mcmodel=" + + #: config/i386/i386.c:950 + #, c-format + msgid "bad value (%s) for -masm= switch" + msgstr "valeur erronée (%s) pour l'option -masm" + + #: config/i386/i386.c:953 + #, c-format + msgid "code model `%s' not supported in the %s bit mode" + msgstr "model de code « %s » n'est pas supporté dans le mode %s bits" + + #: config/i386/i386.c:956 + msgid "code model `large' not supported yet" + msgstr "model de code « large » n'est pas supporté encore" + + #: config/i386/i386.c:958 + #, c-format + msgid "%i-bit mode not compiled in" + msgstr "mode %i bits pas compilé en" + + #: config/i386/i386.c:988 config/mips/mips.c:4989 + #, c-format + msgid "bad value (%s) for -march= switch" + msgstr "valeur erronée (%s) pour l'option -march=" + + #: config/i386/i386.c:999 config/mips/mips.c:4945 + #, c-format + msgid "bad value (%s) for -mcpu= switch" + msgstr "valeur erronée (%s) pour l'option -mcpu=" + + #: config/i386/i386.c:1018 + #, c-format + msgid "-mregparm=%d is not between 0 and %d" + msgstr "-mregparm=%d n'est pas entre 0 et %d" + + #: config/i386/i386.c:1031 + msgid "-malign-loops is obsolete, use -falign-loops" + msgstr "-malign-loops=%d est obsolète, utiliser -falign-loops" + + #: config/i386/i386.c:1036 config/i386/i386.c:1049 config/i386/i386.c:1062 + #, c-format + msgid "-malign-loops=%d is not between 0 and %d" + msgstr "-malign-loops=%d n'est pas entre 0 et %d" + + #: config/i386/i386.c:1044 + msgid "-malign-jumps is obsolete, use -falign-jumps" + msgstr "-malign-jumps est obsolète, utiliser -falign-loops" + + #: config/i386/i386.c:1057 + msgid "-malign-functions is obsolete, use -falign-functions" + msgstr "-malign-functions est obsolète, utiliser -falign-loops" + + #: config/i386/i386.c:1095 + #, c-format + msgid "-mpreferred-stack-boundary=%d is not between %d and 12" + msgstr "-mpreferred-stack-boundary=%d n'est pas entre %d et 12" + + #: config/i386/i386.c:1107 + #, c-format + msgid "-mbranch-cost=%d is not between 0 and 5" + msgstr "-mbranch-cost=%d n'est pas entre 0 et 5" + + #: config/i386/i386.c:1129 + msgid "-malign-double makes no sense in the 64bit mode" + msgstr "-malign-double n'a aucun sens en mode 64 bits" + + #: config/i386/i386.c:1131 + msgid "-mrtd calling convention not supported in the 64bit mode" + msgstr "la conversion d'appel -mrtd n'est pas supporté en mode 64 bits" + + #: config/i386/i386.c:1147 config/i386/i386.c:1158 + msgid "SSE instruction set disabled, using 387 arithmetics" + msgstr "jeu d'instructions SSE désactivé, arithmétique 387 est utilisé" + + #: config/i386/i386.c:1163 + msgid "387 instruction set disabled, using SSE arithmetics" + msgstr "jeu d'instructions 387 désactivé, arithmétique SSE est utilisé" + + #: config/i386/i386.c:1170 + #, c-format + msgid "bad value (%s) for -mfpmath= switch" + msgstr "valeur erronée (%s) pour l'option -mfpmath" + + #: config/i386/i386.c:1300 + #, c-format + msgid "`%s' attribute requires an integer constant argument" + msgstr "l'attribut « %s » requiert un argument de type constante entière" + + #: config/i386/i386.c:1306 + #, c-format + msgid "argument to `%s' attribute larger than %d" + msgstr "l'argument pour l'attribut « %s » est plus grand que %d" + + #: config/i386/i386.c:5363 + msgid "invalid UNSPEC as operand" + msgstr "UNSPEC invalide comme opérande" + + #: config/i386/i386.c:5596 + msgid "extended registers have no high halves" + msgstr "registres étendus n'a pas de demis hauts" + + #: config/i386/i386.c:5611 + msgid "unsupported operand size for extended register" + msgstr "taille d'opérande non supportée pour un registre étendu" + + #: config/i386/i386.c:5884 + msgid "operand is neither a constant nor a condition code, invalid operand code 'c'" + msgstr "l'opérande n'est ni une constante ni du code de condition, code d'opérande invalide « c »" + + #: config/i386/i386.c:5930 + #, c-format + msgid "invalid operand code `%c'" + msgstr "opérande invalide pour « %c »" + + #: config/i386/i386.c:9867 + msgid "unknown insn mode" + msgstr "mode insn inconnu" + + #. @@@ better error message + #: config/i386/i386.c:11730 config/i386/i386.c:11763 + msgid "selector must be an immediate" + msgstr "sélecteur doit être un immédiat" + + #. @@@ better error message + #: config/i386/i386.c:11921 config/i386/i386.c:11949 + msgid "mask must be an immediate" + msgstr "masque doit être un immédiat" + + #: config/i386/winnt.c:94 + #, c-format + msgid "`%s' attribute only applies to variables" + msgstr "attribut « %s » s'applique seulement aux variables" + + #: config/i386/winnt.c:262 + #, c-format + msgid "`%s' declared as both exported to and imported from a DLL" + msgstr "« %s » déclaré à la fois comme exporté et importé d'une DLL" + + #: config/i386/cygwin.h:51 + msgid "Use the Cygwin interface" + msgstr "Utiliser l'interface Cygwin" + + #: config/i386/cygwin.h:53 + msgid "Use the Mingw32 interface" + msgstr "Utiliser l'interface Mingw32" + + #: config/i386/cygwin.h:54 + msgid "Create GUI application" + msgstr "Créer une application de type GUI" + + #: config/i386/cygwin.h:55 + msgid "Don't set Windows defines" + msgstr "Ne pas initialiser les définitions Windows" + + #: config/i386/cygwin.h:56 + msgid "Set Windows defines" + msgstr "Initialiser les définitions Windows" + + #: config/i386/cygwin.h:58 + msgid "Create console application" + msgstr "Créer une application de type console" + + #: config/i386/cygwin.h:59 config/i386/win32.h:59 + msgid "Generate code for a DLL" + msgstr "Générer le code pour un DLL" + + #: config/i386/cygwin.h:61 config/i386/win32.h:61 + msgid "Ignore dllimport for functions" + msgstr "Ignorer dllimport pour fonctions" + + #: config/i386/cygwin.h:63 + msgid "Use Mingw-specific thread support" + msgstr "Utilise le support de thread spécifique à Mingw" + + #: config/i386/cygwin.h:257 + #, c-format + msgid "-f%s ignored for target (all code is position independent)" + msgstr "-f%s ignoré pour la cible (tout le code set indépendant de la position)" + + #: config/i386/dgux.h:60 + msgid "Retain standard MXDB information" + msgstr "Retenir l'information standard MXDB" + + #: config/i386/dgux.h:62 + msgid "Retain legend information" + msgstr "Retenir les informations de légende" + + #: config/i386/dgux.h:65 + msgid "Generate external legend information" + msgstr "Générer les informations externes de légende" + + #: config/i386/dgux.h:67 + msgid "Emit identifying info in .s file" + msgstr "Produire les infos d'identification dans le fichier .s" + + #: config/i386/dgux.h:69 + msgid "Warn when a function arg is a structure" + msgstr "Avertir lorsque l'arg d'une fonction est une structure" + + #: config/i386/dgux.h:252 + msgid "argument is a structure" + msgstr "argument est une structure" + + #: config/i386/djgpp.h:201 + msgid "-mbnu210 is ignored (option is obsolete)" + msgstr "-mbnu210 est ignoré (option obsolète)" + + #: config/i386/i386.h:45 config/mips/mips.h:186 + msgid "half-pic init called on systems that don't support it" + msgstr "init à demi PIC appelé sur un système qui ne le supporte pas" + + #. Deprecated. + #. Deprecated. + #. Deprecated. + #. Deprecated. + #. Deprecated. + #. Deprecated. + #: config/i386/i386.h:303 + msgid "Alternate calling convention" + msgstr "Convention alternative d'appels" + + #: config/i386/i386.h:305 config/m68k/m68k.h:180 config/ns32k/ns32k.h:106 + msgid "Use normal calling convention" + msgstr "Utiliser la convention normale d'appels" + + #: config/i386/i386.h:307 + msgid "Align some doubles on dword boundary" + msgstr "Aligner quelques doubles sur des frontières de mots doubles" + + #: config/i386/i386.h:309 + msgid "Align doubles on word boundary" + msgstr "Aligner les doubles sur des frontières de mots" + + #: config/i386/i386.h:311 + msgid "Uninitialized locals in .bss" + msgstr "Var. locales non initialisées dans .bss" + + #: config/i386/i386.h:313 + msgid "Uninitialized locals in .data" + msgstr "Var. locales non initialisées dans .data" + + #: config/i386/i386.h:315 config/m68k/linux-aout.h:45 config/m68k/linux.h:50 + msgid "Use IEEE math for fp comparisons" + msgstr "Utiliser les mathématiques IEEE pour les comparaisons FP" + + #: config/i386/i386.h:317 + msgid "Do not use IEEE math for fp comparisons" + msgstr "Ne pas utiliser les mathématiques IEEE pour les comparaisons FP" + + #: config/i386/i386.h:319 + msgid "Return values of functions in FPU registers" + msgstr "Retourner les valeurs de fonctions dans les registres FPU" + + #: config/i386/i386.h:321 + msgid "Do not return values of functions in FPU registers" + msgstr "Ne pas retourner les valeurs de fonctions dans les registres FPU" + + #: config/i386/i386.h:323 + msgid "Do not generate sin, cos, sqrt for FPU" + msgstr "Ne pas générer sin, cos, sqrt pour le FPU" + + #: config/i386/i386.h:325 + msgid "Generate sin, cos, sqrt for FPU" + msgstr "Générer sin, cos, sqrt pour le FPU" + + #: config/i386/i386.h:327 + msgid "Omit the frame pointer in leaf functions" + msgstr "Omettre le pointeur de trame dans les fonctions feuilles" + + #: config/i386/i386.h:330 + msgid "Enable stack probing" + msgstr "Autoriser le sondage de la pile" + + #. undocumented + #. undocumented + #: config/i386/i386.h:335 + msgid "Align destination of the string operations" + msgstr "Aligner la destination des opérations sur les chaînes" + + #: config/i386/i386.h:337 + msgid "Do not align destination of the string operations" + msgstr "Ne pas aligner la destination des opérations sur les chaînes" + + #: config/i386/i386.h:339 + msgid "Inline all known string operations" + msgstr "Permettre l'enlignage dans toutes les opérations portant sur les chaînes" + + #: config/i386/i386.h:341 + msgid "Do not inline all known string operations" + msgstr "Ne pas permettre l'enlignage dans toutes les opérations portant sur les chaînes" + + #: config/i386/i386.h:343 config/i386/i386.h:348 + msgid "Use push instructions to save outgoing arguments" + msgstr "Utiliser les instructions push pour sauvegardes les arguments sortants" + + #: config/i386/i386.h:345 config/i386/i386.h:350 + msgid "Do not use push instructions to save outgoing arguments" + msgstr "Ne pas utiliser les instructions push pour sauvegardes les arguments sortants" + + #: config/i386/i386.h:352 + msgid "Support MMX built-in functions" + msgstr "Supporte les fonctions internes MMX" + + #: config/i386/i386.h:354 + msgid "Do not support MMX built-in functions" + msgstr "Ne supporte pas les fonctions internes MMX" + + #: config/i386/i386.h:357 + msgid "Support 3DNow! built-in functions" + msgstr "Supporte les fonctions internes 3DNOW!" + + #: config/i386/i386.h:360 + msgid "Do not support 3DNow! built-in functions" + msgstr "Ne supporte pas les fonctions internes 3DNOW!" + + #: config/i386/i386.h:362 + msgid "Support MMX and SSE built-in functions and code generation" + msgstr "Supporte les fonctions internes MMX et SSE et la génération de code" + + #: config/i386/i386.h:365 + msgid "Do not support MMX and SSE built-in functions and code generation" + msgstr "Ne supporte pas les fonctions internes MMX et SSE et la génération de code" + + #: config/i386/i386.h:367 + msgid "Support MMX, SSE and SSE2 built-in functions and code generation" + msgstr "Supporte les fonctions internes MMX, SSE et SSE2 et la génération de code" + + #: config/i386/i386.h:370 + msgid "Do not support MMX, SSE and SSE2 built-in functions and code generation" + msgstr "Ne supporte pas les fonctions internes MMX, SSE et SSE2 et la génération de code" + + #: config/i386/i386.h:372 + msgid "sizeof(long double) is 16" + msgstr "sizeof(long double) est 16" + + #: config/i386/i386.h:374 + msgid "sizeof(long double) is 12" + msgstr "sizeof(long double) est 12" + + #: config/i386/i386.h:376 + msgid "Generate 64bit x86-64 code" + msgstr "Générer du code 64 bits pour x86-64" + + #: config/i386/i386.h:378 + msgid "Generate 32bit i386 code" + msgstr "Générer du code 32 bits pour i386" + + #: config/i386/i386.h:380 + msgid "Use red-zone in the x86-64 code" + msgstr "Utiliser la zone-rouge pour le code x86-64" + + #: config/i386/i386.h:382 + msgid "Do not use red-zone in the x86-64 code" + msgstr "Ne pas utiliser la zone-rouge pour le code x86-64" + + #. This macro is similar to `TARGET_SWITCHES' but defines names of + #. command options that have values. Its definition is an + #. initializer with a subgrouping for each command option. + #. + #. Each subgrouping contains a string constant, that defines the + #. fixed part of the option name, and the address of a variable. The + #. variable, type `char *', is set to the variable part of the given + #. option if the fixed part matches. The actual option name is made + #. by appending `-m' to the specified name. + #: config/i386/i386.h:428 config/rs6000/rs6000.h:428 config/sparc/sparc.h:641 + msgid "Schedule code for given CPU" + msgstr "Çéduler le code pour le CPU donné" + + #: config/i386/i386.h:430 + msgid "Generate floating point mathematics using given instruction set" + msgstr "Générer les mathématiques en virgule flottante avec le jeu d'instructions données" + + #: config/i386/i386.h:432 + msgid "Generate code for given CPU" + msgstr "Générer le code pour le CPU donné" + + #: config/i386/i386.h:434 + msgid "Number of registers used to pass integer arguments" + msgstr "Nombre de registre utiliser pour passer les arguments entiers" + + #. TARGET_DEFAULT is defined in sun*.h and isi.h, etc. + #. This macro is similar to `TARGET_SWITCHES' but defines names of + #. command options that have values. Its definition is an + #. initializer with a subgrouping for each command option. + #. + #. Each subgrouping contains a string constant, that defines the + #. fixed part of the option name, and the address of a variable. The + #. variable, type `char *', is set to the variable part of the given + #. option if the fixed part matches. The actual option name is made + #. by appending `-m' to the specified name. + #: config/i386/i386.h:436 config/m68k/m68k.h:263 + msgid "Loop code aligned to this power of 2" + msgstr "Codes de boucles alignés selon une puissance de 2" + + #: config/i386/i386.h:438 config/m68k/m68k.h:265 + msgid "Jump targets are aligned to this power of 2" + msgstr "Sauts de cibles alignés selon une puissance de 2" + + #: config/i386/i386.h:440 config/m68k/m68k.h:267 + msgid "Function starts are aligned to this power of 2" + msgstr "Débuts des fonction alignés selon une puissance de 2" + + #: config/i386/i386.h:443 + msgid "Attempt to keep stack aligned to this power of 2" + msgstr "Tentative de conservation de la pile alignée selon une puissance de 2" + + #: config/i386/i386.h:445 + msgid "Branches are this expensive (1-5, arbitrary units)" + msgstr "Branchements coûteux à ce point (1-4, unités arbitraires)" + + #: config/i386/i386.h:447 + msgid "Use given x86-64 code model" + msgstr "Utiliser le modèle de x86-64 donné" + + #. Undocumented. + #. Undocumented. + #: config/i386/i386.h:453 + msgid "Use given assembler dialect" + msgstr "Utiliser la syntaxe de l'assembleur donné" + + #: config/i386/osf1elf.h:112 + msgid "Profiling uses mcount" + msgstr "Profilage utilise mcount" + + #: config/i386/osfrose.h:60 + msgid "Emit half-PIC code" + msgstr "Produire du code à moitié PIC" + + #. intentionally undoc + #. intentionally undoc + #: config/i386/osfrose.h:67 + msgid "Emit ELF object code" + msgstr "Produire du code objet ELF" + + #: config/i386/osfrose.h:69 + msgid "Emit ROSE object code" + msgstr "Produire du code objet ROSE" + + #: config/i386/osfrose.h:71 + msgid "Symbols have a leading underscore" + msgstr "Les symboles sont précédées d'un caractère de soulignement " + + #: config/i386/osfrose.h:74 + msgid "Align to >word boundaries" + msgstr "Aligner sur >frontières de mots" + + #: config/i386/osfrose.h:77 + msgid "Use mcount for profiling" + msgstr "Utiliser mcount pour le profilage" + + #: config/i386/osfrose.h:79 + msgid "Use mcount_ptr for profiling" + msgstr "Utiliser mcount_ptr pour le profilage" + + #: config/i386/sco5.h:771 + msgid "Generate ELF output" + msgstr "Générer la sortie ELF" + + #: config/i386/win32.h:53 + msgid "Use Mingw32 interface" + msgstr "Utiliser l'interface Mingw32" + + #: config/i386/win32.h:55 + msgid "Use Cygwin interface" + msgstr "Utiliser l'interface Cygwin" + + #: config/i386/win32.h:57 + msgid "Use bare Windows interface" + msgstr "Utiliser l'interface brute Windows" + + #. If the environment variable DJDIR is not defined, then DJGPP is not installed correctly and GCC will quickly become confused with the default prefix settings. Report the problem now so the user doesn't receive deceptive "file not found" error messages later. + #. DJDIR is automatically defined by the DJGPP environment config file pointed to by the environment variable DJGPP. Examine DJGPP to try and figure out what's wrong. + #: config/i386/xm-djgpp.h:71 + msgid "environment variable DJGPP not defined" + msgstr "variable d'environment DJGPP non définie" + + #: config/i386/xm-djgpp.h:73 + #, c-format + msgid "environment variable DJGPP points to missing file '%s'" + msgstr "variable d'environment DJGPP pointe sur un fichier manquant « %s »" + + #: config/i386/xm-djgpp.h:76 + #, c-format + msgid "environment variable DJGPP points to corrupt file '%s'" + msgstr "variable d'environment DJGPP pointe vers un fichier corrompu « %s »" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/i860/i860.h:56 config/i860/paragon.h:28 + msgid "Generate code which uses the FPU" + msgstr "Générer du code qui utilise le FPU" + + #: config/i860/i860.h:57 config/i860/i860.h:58 config/i860/paragon.h:29 config/i860/paragon.h:30 config/i860/paragon.h:31 + msgid "Do not generate code which uses the FPU" + msgstr "Ne pas générer du code qui utilise le FPU" + + #: config/i960/i960-c.c:67 + msgid "sorry, not implemented: #pragma align NAME=SIZE" + msgstr "désolé, pas implanté: #pragma align NOM=TAILLE" + + #: config/i960/i960-c.c:72 + msgid "malformed #pragma align - ignored" + msgstr "#pragma align mal composé - ignoré" + + #: config/i960/i960-c.c:110 + msgid "sorry, not implemented: #pragma noalign NAME" + msgstr "désolé, pas implanté: #pragma noalign NOM" + + #: config/i960/i960.c:1405 config/m68k/m68k.c:665 config/rs6000/rs6000.c:8437 + msgid "stack limit expression is not supported" + msgstr "expression limitant la pile n'est pas supportée" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #. ??? Not all ten of these architecture variations actually exist, but I + #. am not sure which are real and which aren't. + #: config/i960/i960.h:240 + msgid "Generate SA code" + msgstr "Générer du code SA" + + #: config/i960/i960.h:243 + msgid "Generate SB code" + msgstr "Générer du code SB" + + #. {"sc", (TARGET_FLAG_NUMERICS|TARGET_FLAG_PROTECTED| TARGET_FLAG_MC|TARGET_FLAG_COMPLEX_ADDR), N_("Generate SC code")}, + #: config/i960/i960.h:248 + msgid "Generate KA code" + msgstr "Générer du code KA" + + #: config/i960/i960.h:251 + msgid "Generate KB code" + msgstr "Générer du code KB" + + #. {"kc", (TARGET_FLAG_NUMERICS|TARGET_FLAG_PROTECTED| TARGET_FLAG_MC|TARGET_FLAG_COMPLEX_ADDR), N_("Generate KC code")}, + #: config/i960/i960.h:256 + msgid "Generate JA code" + msgstr "Générer du code JA" + + #: config/i960/i960.h:258 + msgid "Generate JD code" + msgstr "Générer du code JD" + + #: config/i960/i960.h:261 + msgid "Generate JF code" + msgstr "Générer du code JF" + + #: config/i960/i960.h:263 + msgid "generate RP code" + msgstr "Générer du code RP" + + #: config/i960/i960.h:266 + msgid "Generate MC code" + msgstr "Générer du code MC" + + #: config/i960/i960.h:269 + msgid "Generate CA code" + msgstr "Générer du code CA" + + #. {"cb", (TARGET_FLAG_NUMERICS|TARGET_FLAG_C_SERIES| TARGET_FLAG_BRANCH_PREDICT|TARGET_FLAG_CODE_ALIGN), N_("Generate CB code")}, {"cc", (TARGET_FLAG_NUMERICS|TARGET_FLAG_PROTECTED| TARGET_FLAG_C_SERIES|TARGET_FLAG_BRANCH_PREDICT| TARGET_FLAG_CODE_ALIGN), N_("Generate CC code")}, + #: config/i960/i960.h:279 + msgid "Generate CF code" + msgstr "Générer du code CF" + + #: config/i960/i960.h:285 + msgid "Use alternate leaf function entries" + msgstr "Utiliser les entrées alternatives pour les fonctions de feuilles" + + #: config/i960/i960.h:287 + msgid "Do not use alternate leaf function entries" + msgstr "Ne pas utiliser les entrées alternatives pour les fonctions de feuilles" + + #: config/i960/i960.h:289 + msgid "Perform tail call optimization" + msgstr "Effectuer une optimisation sur mesure des appels" + + #: config/i960/i960.h:291 + msgid "Do not perform tail call optimization" + msgstr "Ne pas effectuer une optimisation sur mesure des appels" + + #: config/i960/i960.h:293 + msgid "Use complex addressing modes" + msgstr "Utiliser les modes d'adressage complexes" + + #: config/i960/i960.h:295 + msgid "Do not use complex addressing modes" + msgstr "Ne pas utiliser les modes d'adressage complexes" + + #: config/i960/i960.h:297 + msgid "Align code to 8 byte boundary" + msgstr "Aligner le code sur des frontières de 8 octets" + + #: config/i960/i960.h:299 + msgid "Do not align code to 8 byte boundary" + msgstr "Ne pas aligner le code sur des frontières de 8 octets" + + #. {"clean-linkage", (TARGET_FLAG_CLEAN_LINKAGE), N_("Force use of prototypes")}, {"no-clean-linkage", -(TARGET_FLAG_CLEAN_LINKAGE), N_("Do not force use of prototypes")}, + #: config/i960/i960.h:305 config/i960/i960.h:307 + msgid "Enable compatibility with iC960 v2.0" + msgstr "Autoriser la compatibilité avec iC960 v2.0" + + #: config/i960/i960.h:309 + msgid "Enable compatibility with iC960 v3.0" + msgstr "Autoriser la compatibilité avec iC960 v3.0" + + #: config/i960/i960.h:311 config/i960/i960.h:313 + msgid "Enable compatibility with ic960 assembler" + msgstr "Autoriser la compatibilité avec l'assembleur iC960" + + #: config/i960/i960.h:315 + msgid "Do not permit unaligned accesses" + msgstr "Ne pas permettre les accès non alignés" + + #: config/i960/i960.h:317 + msgid "Permit unaligned accesses" + msgstr "Permettre les accès non alignés" + + #: config/i960/i960.h:319 + msgid "Layout types like Intel's v1.3 gcc" + msgstr "Utiliser une disposition de type Intel's v1.3 gcc" + + #: config/i960/i960.h:321 + msgid "Do not layout types like Intel's v1.3 gcc" + msgstr "Ne pas utiliser une disposition de type Intel's v1.3 gcc" + + #: config/i960/i960.h:323 config/sparc/freebsd.h:80 config/sparc/linux.h:86 config/sparc/linux64.h:143 config/sparc/netbsd-elf.h:238 + msgid "Use 64 bit long doubles" + msgstr "Utiliser les doubles longs de 64 bits" + + #: config/i960/i960.h:325 + msgid "Enable linker relaxation" + msgstr "Autoriser la relâche par l'éditeur de liens" + + #: config/i960/i960.h:327 + msgid "Do not enable linker relaxation" + msgstr "Ne pas autoriser la relâche par l'éditeur de liens" + + #. Override conflicting target switch options. + #. Doesn't actually detect if more than one -mARCH option is given, but + #. does handle the case of two blatantly conflicting -mARCH options. + #: config/i960/i960.h:342 config/i960/i960.h:352 + msgid "conflicting architectures defined - using C series" + msgstr "architectures conflictuelles définies - utilise les séries C" + + #: config/i960/i960.h:347 + msgid "conflicting architectures defined - using K series" + msgstr "architectures conflictuelles définies - utilise les séries K" + + #: config/i960/i960.h:362 + msgid "iC2.0 and iC3.0 are incompatible - using iC3.0" + msgstr "iC2.0 et iC3.0 sont incompatibles - utilise iC3.0" + + #. ??? See the LONG_DOUBLE_TYPE_SIZE definition below. + #: config/i960/i960.h:373 + msgid "the -mlong-double-64 option does not work yet" + msgstr "l'option -mlong-double-64 n'est pas fonctionnelle encore" + + #: config/ia64/ia64.c:3554 + msgid "ia64_print_operand: unknown code" + msgstr "ia64_print_operand: code inconnu" + + #: config/ia64/ia64.c:3828 + msgid "value of -mfixed-range must have form REG1-REG2" + msgstr "valeur de -mfixed-range doit avoir la forme REG1-REG2" + + #: config/ia64/ia64.c:3855 + #, c-format + msgid "%s-%s is an empty range" + msgstr "%s-%s est une étendue vide" + + #: config/ia64/ia64.c:3920 + msgid "cannot optimize division for both latency and throughput" + msgstr "ne peut optimiser la division à la fois pour la latence et la quantité produite" + + #. This macro defines names of command options to set and clear bits in + #. `target_flags'. Its definition is an initializer with a subgrouping for + #. each command option. + #: config/ia64/ia64.h:119 + msgid "Generate big endian code" + msgstr "Générer du code de système à octets de poids fort" + + #: config/ia64/ia64.h:121 config/mcore/mcore.h:159 + msgid "Generate little endian code" + msgstr "Générer du code de système à octets de poids faible" + + #: config/ia64/ia64.h:123 + msgid "Generate code for GNU as" + msgstr "Générer du code pour GNU tel que" + + #: config/ia64/ia64.h:125 + msgid "Generate code for Intel as" + msgstr "Générer du code pour Intel tel que" + + #: config/ia64/ia64.h:127 + msgid "Generate code for GNU ld" + msgstr "Générer du code pour GNU ld" + + #: config/ia64/ia64.h:129 + msgid "Generate code for Intel ld" + msgstr "Générer du code pour Intel ld" + + #: config/ia64/ia64.h:131 + msgid "Generate code without GP reg" + msgstr "Générer du code sans registre GP" + + #: config/ia64/ia64.h:133 + msgid "Emit stop bits before and after volatile extended asms" + msgstr "Produire de stop bits avant et après les asms étendus" + + #: config/ia64/ia64.h:135 + msgid "Don't emit stop bits before and after volatile extended asms" + msgstr "Ne pas produire de stop bits avant et après les asms étendus" + + #: config/ia64/ia64.h:137 + msgid "Emit code for Itanium (TM) processor B step" + msgstr "Produire du code pour le processeur B Itanium (TM)" + + #: config/ia64/ia64.h:139 + msgid "Use in/loc/out register names" + msgstr "Utilise les noms des registres in/loc/out " + + #: config/ia64/ia64.h:141 + msgid "Disable use of sdata/scommon/sbss" + msgstr "Interdire l'utilisation de sdata/scommon/sbss" + + #: config/ia64/ia64.h:143 + msgid "Enable use of sdata/scommon/sbss" + msgstr "Autoriser l'utilisation de sdata/scommon/sbss" + + #: config/ia64/ia64.h:145 + msgid "gp is constant (but save/restore gp on indirect calls)" + msgstr "gp est une constante (mais save/restore gp fait par appels indirects)" + + #: config/ia64/ia64.h:147 + msgid "Generate self-relocatable code" + msgstr "Générer du code auto-relocalisable" + + #: config/ia64/ia64.h:149 + msgid "Generate inline division, optimize for latency" + msgstr "Générer les divisions en ligne, optimisées pour la latence" + + #: config/ia64/ia64.h:151 + msgid "Generate inline division, optimize for throughput" + msgstr "Générer les divisions en ligne, optimisées pour la quantité" + + #: config/ia64/ia64.h:153 + msgid "Enable Dwarf 2 line debug info via GNU as" + msgstr "Autoriser les infos de lignes de mise au point Dwarf 2 via GNU tel que" + + #: config/ia64/ia64.h:155 + msgid "Disable Dwarf 2 line debug info via GNU as" + msgstr "Interdire les infos de lignes de mise au point Dwarf 2 via GNU tel que" + + #: config/ia64/ia64.h:183 + msgid "Specify range of registers to make fixed" + msgstr "spécifier l'étendue des registres pour la rendre fixe" + + #: config/m32r/m32r.c:130 + #, c-format + msgid "bad value (%s) for -mmodel switch" + msgstr "valeur erronée (%s) pour l'option -mmodel" + + #: config/m32r/m32r.c:139 + #, c-format + msgid "bad value (%s) for -msdata switch" + msgstr "valeur erronée (%s) pour l'option -msdata" + + #: config/m32r/m32r.c:310 + #, c-format + msgid "invalid argument of `%s' attribute" + msgstr "type d'argument invalide pour l'attribut « %s »" + + #: config/m32r/m32r.c:408 + msgid "const objects cannot go in .sdata/.sbss" + msgstr "constantes objets ne peuvent aller dans .sdata/.sbss" + + #: config/m32r/m32r.c:2248 + #, c-format + msgid "invalid operand to %%s code" + msgstr "opérande invalide pour le code %%s" + + #: config/m32r/m32r.c:2255 + #, c-format + msgid "invalid operand to %%p code" + msgstr "opérande invalide pour le code %%p" + + #: config/m32r/m32r.c:2311 + msgid "bad insn for 'A'" + msgstr "insn erroné pour « A »" + + #: config/m32r/m32r.c:2363 + #, c-format + msgid "invalid operand to %%T/%%B code" + msgstr "opérande invalide pour le code %%T/%%B" + + #: config/m32r/m32r.c:2386 + #, c-format + msgid "invalid operand to %%N code" + msgstr "opérande invalide pour le code %%N" + + #: config/m32r/m32r.c:2431 + msgid "pre-increment address is not a register" + msgstr "pré-incrément d'adresse n'est pas un registre" + + #: config/m32r/m32r.c:2438 + msgid "pre-decrement address is not a register" + msgstr "pré-décrément d'adresse n'est pas un registre" + + #: config/m32r/m32r.c:2445 + msgid "post-increment address is not a register" + msgstr "post-incrément d'adresse n'est pas un registre" + + #: config/m32r/m32r.c:2523 config/m32r/m32r.c:2539 config/rs6000/rs6000.c:11065 + msgid "bad address" + msgstr "adresse erronée" + + #: config/m32r/m32r.c:2544 + msgid "lo_sum not of register" + msgstr "lo_sum n'est pas un registre" + + #. { "relax", TARGET_RELAX_MASK, "" }, { "no-relax", -TARGET_RELAX_MASK, "" }, + #: config/m32r/m32r.h:241 + msgid "Display compile time statistics" + msgstr "Afficher les statistiques de temps de compilation" + + #: config/m32r/m32r.h:243 + msgid "Align all loops to 32 byte boundary" + msgstr "Aligner toutes les boucles sur des frontières de 32 octets" + + #: config/m32r/m32r.h:246 + msgid "Only issue one instruction per cycle" + msgstr "Émettre seulement une instruction par cycle" + + #: config/m32r/m32r.h:249 + msgid "Prefer branches over conditional execution" + msgstr "Privilégier les branchements au lieu d'une exécution conditionnelle" + + #: config/m32r/m32r.h:265 + msgid "Code size: small, medium or large" + msgstr "Taille du code: small, medium ou large" + + #: config/m32r/m32r.h:267 + msgid "Small data area: none, sdata, use" + msgstr "Petite zone de données: none, sdata, use" + + #: config/m68hc11/m68hc11.c:236 + #, c-format + msgid "-f%s ignored for 68HC11/68HC12 (not supported)" + msgstr "-f%s ignoré pour 68HC11/68HC12 (non supporté)" + + #. !!!! SCz wrong here. + #: config/m68hc11/m68hc11.c:3170 config/m68hc11/m68hc11.c:3544 + msgid "move insn not handled" + msgstr "déplacement insn non traité" + + #: config/m68hc11/m68hc11.c:3390 config/m68hc11/m68hc11.c:3474 config/m68hc11/m68hc11.c:3747 + msgid "invalid register in the move instruction" + msgstr "registre invalide dans l'instruction de déplacement" + + #: config/m68hc11/m68hc11.c:3424 + msgid "invalid operand in the instruction" + msgstr "opérande invalide dans l'instruction" + + #: config/m68hc11/m68hc11.c:3721 + msgid "invalid register in the instruction" + msgstr "registre invalide dans l'instruction" + + #: config/m68hc11/m68hc11.c:3754 + msgid "operand 1 must be a hard register" + msgstr "l'opérande 1 doit être un registre matériel" + + #: config/m68hc11/m68hc11.c:3771 + msgid "invalid rotate insn" + msgstr "rotation invalide insn" + + #: config/m68hc11/m68hc11.c:4196 + msgid "registers IX, IY and Z used in the same INSN" + msgstr "registres IX, IY et Z utilisés dans le même INSN" + + #: config/m68hc11/m68hc11.c:4521 config/m68hc11/m68hc11.c:4823 + msgid "cannot do z-register replacement" + msgstr "ne peut effectuer le remplacement d'un registre z" + + #: config/m68hc11/m68hc11.c:4886 + msgid "invalid Z register replacement for insn" + msgstr "remplacement invalide de registre Z pour insn" + + #. Macro to define tables used to set the flags. This is a list in braces of + #. pairs in braces, each pair being { "NAME", VALUE } where VALUE is the bits + #. to set or minus the bits to clear. An empty string NAME is used to + #. identify the default VALUE. + #: config/m68hc11/m68hc11.h:155 + msgid "Compile with 16-bit integer mode" + msgstr "Compiler en mode entier de 16 bits" + + #: config/m68hc11/m68hc11.h:157 + msgid "Compile with 32-bit integer mode" + msgstr "Compiler en mode entier de 32 bits" + + #: config/m68hc11/m68hc11.h:159 + msgid "Auto pre/post decrement increment allowed" + msgstr "Auto pré/post décrementation incrémentation permise" + + #: config/m68hc11/m68hc11.h:161 + msgid "Auto pre/post decrement increment not allowed" + msgstr "Auto pré/post décrementation incrémentation non permise" + + #: config/m68hc11/m68hc11.h:163 + msgid "Do not use direct addressing mode for soft registers" + msgstr "Ne pas utiliser les modes directs d'adressage pour des registres logiciels" + + #: config/m68hc11/m68hc11.h:165 config/m68hc11/m68hc11.h:169 + msgid "Compile for a 68HC11" + msgstr "Compiler pour un 68HC11" + + #: config/m68hc11/m68hc11.h:167 config/m68hc11/m68hc11.h:171 + msgid "Compile for a 68HC12" + msgstr "Compiler pour un 68HC12" + + #. This macro is similar to `TARGET_SWITCHES' but defines names of + #. command options that have values. Its definition is an + #. initializer with a subgrouping for each command option. + #. + #. Each subgrouping contains a string constant, that defines the + #. fixed part of the option name, and the address of a variable. The + #. variable, type `char *', is set to the variable part of the given + #. option if the fixed part matches. The actual option name is made + #. by appending `-m' to the specified name. + #: config/m68hc11/m68hc11.h:185 + msgid "Specify the register allocation order" + msgstr "Spécifier l'ordre d'allocation des registres" + + #: config/m68hc11/m68hc11.h:187 + msgid "Indicate the number of soft registers available" + msgstr "Indiquer le nombre de registres logiciels disponibles" + + #: config/m68k/m68k.c:150 + #, c-format + msgid "-malign-loops=%d is not between 1 and %d" + msgstr "-malign-loops=%d n'est pas entre 1 et %d" + + #: config/m68k/m68k.c:161 + #, c-format + msgid "-malign-jumps=%d is not between 1 and %d" + msgstr "-malign-jumps=%d n'est pas entre 1 et %d" + + #: config/m68k/m68k.c:172 + #, c-format + msgid "-malign-functions=%d is not between 1 and %d" + msgstr "-malign-functions=%d n'est pas entre 1 et %d" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/m68k/m68k.h:162 config/m68k/m68k.h:164 + msgid "Generate code for a 68020" + msgstr "Générer le code pour un 68020" + + #: config/m68k/m68k.h:169 config/m68k/m68k.h:172 + msgid "Generate code for a 68000" + msgstr "Générer le code pour un 68000" + + #: config/m68k/m68k.h:174 + msgid "Use the bit-field instructions" + msgstr "Utiliser les instructions de champs de bits" + + #: config/m68k/m68k.h:176 + msgid "Do not use the bit-field instructions" + msgstr "Ne pas utiliser les instructions de champs de bits" + + #: config/m68k/m68k.h:178 + msgid "Use different calling convention using 'rtd'" + msgstr "Utiliser une convention différente d'appel en utilisant « rtd »" + + #: config/m68k/m68k.h:182 + msgid "Consider type `int' to be 16 bits wide" + msgstr "Considérer le type « int » comme ayant une largeur de 16 bits" + + #: config/m68k/m68k.h:184 + msgid "Consider type `int' to be 32 bits wide" + msgstr "Considérer le type « int » comme ayant une largeur de 32 bits" + + #: config/m68k/m68k.h:186 + msgid "Generate code for a Sun FPA" + msgstr "Générer le code pour un Sun FPA" + + #: config/m68k/m68k.h:189 + msgid "Do not generate code for a Sun FPA" + msgstr "Ne pas générer le code pour un Sun FPA" + + #: config/m68k/m68k.h:191 config/m68k/m68k.h:193 + msgid "Generate code for a Sun Sky board" + msgstr "Générer le code pour un Sun Sky board" + + #: config/m68k/m68k.h:195 + msgid "Do not use Sky linkage convention" + msgstr "Ne pas utiliser la convention d'édition de lien Sky" + + #: config/m68k/m68k.h:197 + msgid "Generate code for a 68881" + msgstr "Générer le code pour un 68881" + + #: config/m68k/m68k.h:200 + msgid "Generate code with library calls for floating point" + msgstr "Générer le code avec les appels de librairies en virgule flottante" + + #: config/m68k/m68k.h:202 + msgid "Generate code for a 68040, without any new instructions" + msgstr "Générer le code pour un 68040 sans les nouvelles instructions" + + #: config/m68k/m68k.h:205 + msgid "Generate code for a 68060, without any new instructions" + msgstr "Générer le code pour un 68060 sans les nouvelles instructions" + + #: config/m68k/m68k.h:209 + msgid "Generate code for a 68030" + msgstr "Générer le code pour un 68030" + + #: config/m68k/m68k.h:212 + msgid "Generate code for a 68040" + msgstr "Générer du code pour un 68040" + + #: config/m68k/m68k.h:216 + msgid "Generate code for a 68060" + msgstr "Générer le code pour un 68060" + + #: config/m68k/m68k.h:221 + msgid "Generate code for a 520X" + msgstr "Générer le code pour un 520X" + + #: config/m68k/m68k.h:224 + msgid "Generate code for a 68851" + msgstr "Générer le code pour un 68851" + + #: config/m68k/m68k.h:226 + msgid "Do no generate code for a 68851" + msgstr "Ne pas générer le code pour un 68851" + + #: config/m68k/m68k.h:229 + msgid "Generate code for a 68302" + msgstr "Générer le code pour un 68302" + + #: config/m68k/m68k.h:232 + msgid "Generate code for a 68332" + msgstr "Générer le code pour un 68332" + + #: config/m68k/m68k.h:236 + msgid "Generate code for a cpu32" + msgstr "Générer le code pour un cpu32" + + #: config/m68k/m68k.h:239 + msgid "Align variables on a 32-bit boundary" + msgstr "Aligner les variables sur des frontières de 32 bits" + + #: config/m68k/m68k.h:241 + msgid "Align variables on a 16-bit boundary" + msgstr "Aligner les variables sur des frontières de 16 bits" + + #: config/m68k/m68k.h:243 + msgid "Generate pc-relative code" + msgstr "Générer du code relatif au compteur de programme (PC)" + + #: config/m68k/m68k.h:245 + msgid "Do not use unaligned memory references" + msgstr "Ne pas utiliser des références mémoire non alignées" + + #: config/m68k/m68k.h:247 + msgid "Use unaligned memory references" + msgstr "Utiliser des références mémoire non alignées" + + #. Sometimes certain combinations of command options do not make + #. sense on a particular target machine. You can define a macro + #. `OVERRIDE_OPTIONS' to take account of this. This macro, if + #. defined, is executed once just after all the command options have + #. been parsed. + #. + #. Don't use this macro to turn on various extra optimizations for + #. `-O'. That is what `OPTIMIZATION_OPTIONS' is for. + #: config/m68k/m68k.h:284 config/m68k/m68kelf.h:267 config/m68k/m68kv4.h:299 + msgid "-fPIC is not currently supported on the 68000 or 68010\n" + msgstr "-fPIC n'est pas couramment supporté pour le 68000 ou 68010\n" + + #: config/m88k/m88k.c:900 + #, c-format + msgid "internal gcc monitor: short-branch(%x)" + msgstr "moniteur interne gcc: branchement court(%x)" + + #: config/m88k/m88k.c:2300 + msgid "internal gcc error: Can't express symbolic location" + msgstr "erreur interne gcc: ne peut exprimer la localisation symbolique" + + #: config/m88k/m88k.c:2582 + #, c-format + msgid "argument #%d is a structure" + msgstr "argument #%d est une structure" + + #: config/m88k/m88k.c:2882 + #, c-format + msgid "%%R not followed by %%B/C/D/E" + msgstr "%%R n'est pas suivi de %%B/C/D/E" + + #: config/m88k/m88k.c:2950 + #, c-format + msgid "invalid %%x/X value" + msgstr "valeur %%x/X invalide" + + #: config/m88k/m88k.c:2973 config/rs6000/rs6000.c:6509 + #, c-format + msgid "invalid %%q value" + msgstr "valeur %%q invalide" + + #: config/m88k/m88k.c:2979 + #, c-format + msgid "invalid %%o value" + msgstr "valeur %%o invalide" + + #: config/m88k/m88k.c:2986 config/rs6000/rs6000.c:6472 + #, c-format + msgid "invalid %%p value" + msgstr "valeur %%p invalide" + + #: config/m88k/m88k.c:2999 config/m88k/m88k.c:3004 + #, c-format + msgid "invalid %%s/S value" + msgstr "valeur %%s/S invalide" + + #: config/m88k/m88k.c:3015 + #, c-format + msgid "invalid %%P operand" + msgstr "opérande %%P invalide" + + #: config/m88k/m88k.c:3046 config/romp/romp.c:682 + #, c-format + msgid "invalid %%B value" + msgstr "valeur %%B invalide" + + #: config/m88k/m88k.c:3076 + #, c-format + msgid "invalid %%D value" + msgstr "valeur %%D invalide" + + #: config/m88k/m88k.c:3089 + #, c-format + msgid "`%%d' operand isn't a register" + msgstr "l'opérande «%%d» n'est pas un registre" + + #: config/m88k/m88k.c:3107 + msgid "operand is r0" + msgstr "opérande est R0" + + #: config/m88k/m88k.c:3121 + msgid "operand is const_double" + msgstr "opérande est de type const_double" + + #: config/m88k/m88k.c:3140 + msgid "invalid code" + msgstr "code invalide" + + #. Do any checking or such that is needed after processing the -m switches. + #: config/m88k/m88k.h:277 + msgid "-mtrap-large-shift and -mhandle-large-shift are incompatible" + msgstr "-mtrap-large-shift et -mhandle-large-shift sont incompatibles" + + #: config/m88k/m88k.h:299 + #, c-format + msgid "invalid option `-mshort-data-%s'" + msgstr "option invalide «-mshort-data-%s'" + + #: config/m88k/m88k.h:304 + #, c-format + msgid "-mshort-data-%s is too large " + msgstr "-mshort-data-%s est trop grande " + + #: config/m88k/m88k.h:306 + #, c-format + msgid "-mshort-data-%s and PIC are incompatible" + msgstr "-mshort-data-%s et PIC sont incompatibles" + + #: config/mcore/mcore.c:3083 + #, c-format + msgid "invalid option `-mstack-increment=%s'" + msgstr "opton invalide «-mstack-increment=%s'" + + #: config/mcore/mcore.h:126 + msgid "Inline constants if it can be done in 2 insns or less" + msgstr "Constante en ligne si elle peut être en 2 insn ou moins" + + #: config/mcore/mcore.h:128 + msgid "Inline constants if it only takes 1 instruction" + msgstr "Constantes en ligne si elle prend seulement 1 instruction" + + #: config/mcore/mcore.h:130 + msgid "Set maximum alignment to 4" + msgstr "Initialiser l'alignement maximal à 4" + + #: config/mcore/mcore.h:132 + msgid "Set maximum alignment to 8" + msgstr "Initialiser l'alignement maximal à 8" + + #: config/mcore/mcore.h:136 + msgid "Do not use the divide instruction" + msgstr "Ne pas utiliser l'instruction de division" + + #: config/mcore/mcore.h:140 + msgid "Do not arbitary sized immediates in bit operations" + msgstr "Ne pas calculer la taille des immédiats dans les opérations sur les bits" + + #: config/mcore/mcore.h:142 + msgid "Always treat bit-field as int-sized" + msgstr "Toujours traiter les champs de bits comme si la taille entière" + + #: config/mcore/mcore.h:146 + msgid "Force functions to be aligned to a 4 byte boundary" + msgstr "Forcer les fonctions à être alignés sur des frontières de 4 octets" + + #: config/mcore/mcore.h:148 + msgid "Force functions to be aligned to a 2 byte boundary" + msgstr "Forcer les fonctions à être alignés sur des frontières de 2 octets" + + #: config/mcore/mcore.h:150 + msgid "Emit call graph information" + msgstr "Produire les informations du graphe d'appel" + + #: config/mcore/mcore.h:154 + msgid "Prefer word accesses over byte accesses" + msgstr "Préférer l'accès à des mots plutôt qu'un accès à des octets" + + #: config/mcore/mcore.h:165 + msgid "Generate code for the M*Core M340" + msgstr "Générer du code pour M*Core M340" + + #: config/mcore/mcore.h:178 + msgid "Maximum amount for a single stack increment operation" + msgstr "Montant maximal pour une opération d'incrémentation simple de la pile" + + #: config/mips/mips.c:4815 + msgid "The -march option is incompatible to -mipsN and therefore ignored." + msgstr "L'option -march est incompatible avec -mipsN et est alors ignorée." + + #: config/mips/mips.c:4841 + #, c-format + msgid "-mips%d not supported" + msgstr "-mips%d n'est pas supporté" + + #: config/mips/mips.c:4848 + #, c-format + msgid "bad value (%s) for -mips switch" + msgstr "valeur erronée (%s) pour l'option -mips" + + #: config/mips/mips.c:4869 + #, c-format + msgid "bad value (%s) for -mabi= switch" + msgstr "valeur erronée (%s) pour l'option -mabi" + + #: config/mips/mips.c:4907 + #, c-format + msgid "-mabi=%s does not support -mips%d" + msgstr "-mabi=%s ne supporte pas -mips%d" + + #: config/mips/mips.c:4924 + msgid "this target does not support the -mabi switch" + msgstr "cette cible ne supporte pas l'option -mabi" + + #: config/mips/mips.c:5034 + #, c-format + msgid "bad value (%s) for -mtune= switch" + msgstr "valeur erronée (%s) pour l'option -mtune" + + #: config/mips/mips.c:5044 + #, c-format + msgid "-mips%d does not support 64 bit fp registers" + msgstr "-mips%d ne supporte pas les registres FP de 64 bits" + + #: config/mips/mips.c:5050 + #, c-format + msgid "-mips%d does not support 64 bit gp registers" + msgstr "-mips%d ne supporte pas les registres GP de 64 bits" + + #: config/mips/mips.c:5071 + msgid "-G is incompatible with PIC code which is the default" + msgstr "-G est incompatible avec le code PIC par défaut" + + #: config/mips/mips.c:5087 + msgid "-membedded-pic and -mabicalls are incompatible" + msgstr "-membedded-pic et -mabicalls sont incompatibles" + + #: config/mips/mips.c:5090 + msgid "-G and -membedded-pic are incompatible" + msgstr "-G et -membedded-pic sont incompatibles" + + #: config/mips/mips.c:5141 + #, c-format + msgid "invalid option `entry%s'" + msgstr "option invalide «entry%s'" + + #: config/mips/mips.c:5144 + msgid "-mentry is only meaningful with -mips-16" + msgstr "-mentry n'a de sens qu'avec -mips-16" + + #: config/mips/mips.c:5484 + #, c-format + msgid "internal error: %%) found without a %%( in assembler pattern" + msgstr "erreur interne: %%) trouvé sans %%( dans le patron d'aswsemblage" + + #: config/mips/mips.c:5498 + #, c-format + msgid "internal error: %%] found without a %%[ in assembler pattern" + msgstr "erreur interne: %%] trouvé sans %%[ dans le patron d'assemblage" + + #: config/mips/mips.c:5511 + #, c-format + msgid "internal error: %%> found without a %%< in assembler pattern" + msgstr "erreur interne: %%> trouvé sans %%< dans le patron d'assemblage" + + #: config/mips/mips.c:5524 + #, c-format + msgid "internal error: %%} found without a %%{ in assembler pattern" + msgstr "erreur interne: %%} trouvé sans %%{ dans le patron d'assemblage" + + #: config/mips/mips.c:5538 + #, c-format + msgid "PRINT_OPERAND: unknown punctuation '%c'" + msgstr "PRINT_OPERAND: ponctuation « %c » inconnue" + + #: config/mips/mips.c:5547 config/xtensa/xtensa.c:1913 + msgid "PRINT_OPERAND null pointer" + msgstr "PRINT_OPERAND pointeur nul" + + #: config/mips/mips.c:5680 + #, c-format + msgid "invalid use of %%d, %%x, or %%X" + msgstr "utilisation invalide de %%d, %%x, ou %%X" + + #: config/mips/mips.c:5723 config/xtensa/xtensa.c:2012 + msgid "PRINT_OPERAND_ADDRESS, null pointer" + msgstr "PRINT_OPERAND_ADDRESS, pointeur nul" + + #: config/mips/mips.c:5947 + msgid "MIPS ECOFF format does not allow changing filenames within functions with #line" + msgstr "format MIPS ECOFF ne permet pas de changer le nom des fichiers à l'intérieur des fonction avec #line" + + #: config/mips/mips.c:6261 + msgid "can't rewind temp file" + msgstr "ne peut rembobiner le fichier temporaire" + + #: config/mips/mips.c:6265 + msgid "can't write to output file" + msgstr "ne peut écrire dans le fichier de sortie" + + #: config/mips/mips.c:6268 + msgid "can't read from temp file" + msgstr "ne peut lire du fichier temporaire" + + #: config/mips/mips.c:6271 + msgid "can't close temp file" + msgstr "ne peut fermer le fichier temporaire" + + #: config/mips/mips.c:6704 + #, c-format + msgid "gp_offset (%ld) or end_offset (%ld) is less than zero" + msgstr "gp_offset (%ld) ou end_offset (%ld) est plus petit que zéro" + + #: config/mips/mips.c:6866 + #, c-format + msgid "fp_offset (%ld) or end_offset (%ld) is less than zero" + msgstr "fp_offset (%ld) ou end_offset (%ld) est plus petit que zéro" + + #: config/mips/mips.c:8927 + #, c-format + msgid "can not handle inconsistent calls to `%s'" + msgstr "ne peut traiter des appels inconsistents à « %s »" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/mips/mips.h:368 config/mn10300/mn10300.h:64 + msgid "No default crt0.o" + msgstr "Aucun défaut pour crt0.o" + + #: config/mips/mips.h:370 + msgid "Use 64-bit int type" + msgstr "Utiliser le type int de 64 bits" + + #: config/mips/mips.h:372 + msgid "Use 64-bit long type" + msgstr "Utiliser le type long de 64 bits" + + #: config/mips/mips.h:374 + msgid "Use 32-bit long type" + msgstr "Utiliser le type long de 32 bits" + + #: config/mips/mips.h:376 + msgid "Optimize lui/addiu address loads" + msgstr "Optimiser les chargements d'adresses lui/addiu" + + #: config/mips/mips.h:378 + msgid "Don't optimize lui/addiu address loads" + msgstr "Ne pas optimiser les chargements d'adresses lui/addiu" + + #: config/mips/mips.h:380 + msgid "Use MIPS as" + msgstr "Utiliser MIPS tel que" + + #: config/mips/mips.h:382 + msgid "Use GNU as" + msgstr "Utiliser GNU tel que" + + #: config/mips/mips.h:384 + msgid "Use symbolic register names" + msgstr "Utiliser les noms de registres symboliques" + + #: config/mips/mips.h:386 + msgid "Don't use symbolic register names" + msgstr "Ne pas utiliser les noms de registres symboliques" + + #: config/mips/mips.h:388 config/mips/mips.h:390 + msgid "Use GP relative sdata/sbss sections" + msgstr "Utiliser GP en mode relatif aux sections sdata/sbss" + + #: config/mips/mips.h:392 config/mips/mips.h:394 + msgid "Don't use GP relative sdata/sbss sections" + msgstr "Ne pas utiliser GP en mode relatif aux sections sdata/sbss" + + #: config/mips/mips.h:396 + msgid "Output compiler statistics" + msgstr "Afficher les statistiques de compilation" + + #: config/mips/mips.h:398 + msgid "Don't output compiler statistics" + msgstr "Ne pas afficher les statistiques de compilation" + + #: config/mips/mips.h:400 + msgid "Don't optimize block moves" + msgstr "Ne pas optimiser les déplacements de blocs" + + #: config/mips/mips.h:402 + msgid "Optimize block moves" + msgstr "Optimiser les déplacements de blocs" + + #: config/mips/mips.h:404 + msgid "Use mips-tfile asm postpass" + msgstr "Utiliser la post-passe de type mips-tfile de l'assembleur" + + #: config/mips/mips.h:406 + msgid "Don't use mips-tfile asm postpass" + msgstr "Ne pas utiliser la post-passe de type mips-tfile de l'assembleur" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of triplets in braces, + #. each triplet being { "NAME", VALUE, DOC } + #. where VALUE is the bits to set or minus the bits to clear and DOC + #. is the documentation for --help (NULL if intentionally undocumented). + #. An empty string NAME is used to identify the default VALUE. + #: config/mips/mips.h:410 config/pdp11/pdp11.h:55 + msgid "Use hardware floating point" + msgstr "Utiliser l'unité matérielle en virgule flottante" + + #: config/mips/mips.h:412 + msgid "Use 64-bit FP registers" + msgstr "Utiliser les registres FP de 64 bits" + + #: config/mips/mips.h:414 + msgid "Use 32-bit FP registers" + msgstr "Utiliser les registres FP de 32 bits" + + #: config/mips/mips.h:416 + msgid "Use 64-bit general registers" + msgstr "Utiliser les registres généraux de 64 bits" + + #: config/mips/mips.h:418 + msgid "Use 32-bit general registers" + msgstr "Utiliser les registres généraux de 32 bits" + + #: config/mips/mips.h:420 + msgid "Use Irix PIC" + msgstr "Utiliser le code PIC Irix" + + #: config/mips/mips.h:422 + msgid "Don't use Irix PIC" + msgstr "Utiliser le code PIC Irix" + + #: config/mips/mips.h:424 + msgid "Use OSF PIC" + msgstr "Utiliser le code PIC OSF" + + #: config/mips/mips.h:426 + msgid "Don't use OSF PIC" + msgstr "Ne pas utiliser le code PIC OSF" + + #: config/mips/mips.h:428 + msgid "Use indirect calls" + msgstr "Utiliser les appels indirects" + + #: config/mips/mips.h:430 + msgid "Don't use indirect calls" + msgstr "Ne pas utiliser les appels indirects" + + #: config/mips/mips.h:432 + msgid "Use embedded PIC" + msgstr "Utiliser le code PIC enchâssé" + + #: config/mips/mips.h:434 + msgid "Don't use embedded PIC" + msgstr "Ne pas utiliser le code PIC enchâssé" + + #: config/mips/mips.h:436 + msgid "Use ROM instead of RAM" + msgstr "Utiliser le ROM au lieu de la RAM" + + #: config/mips/mips.h:438 + msgid "Don't use ROM instead of RAM" + msgstr "Ne pas utiliser le ROM au lieu de la RAM" + + #: config/mips/mips.h:440 + msgid "Put uninitialized constants in ROM (needs -membedded-data)" + msgstr "Placer les constantes non itialisées dans le ROM (a besoin de -membedded-data)" + + #: config/mips/mips.h:442 + msgid "Don't put uninitialized constants in ROM" + msgstr "Ne pas placer les constantes non itialisées dans le ROM (a besoin de -membedded-data)" + + #. Macro to define tables used to set the flags. + #: config/mips/mips.h:444 config/xtensa/xtensa.h:110 + msgid "Use big-endian byte order" + msgstr "Utiliser l'ordre des octets pour système à octets de poids fort" + + #: config/mips/mips.h:446 config/xtensa/xtensa.h:112 + msgid "Use little-endian byte order" + msgstr "Utiliser l'ordre des octets pour système à octets de poids faible" + + #: config/mips/mips.h:448 + msgid "Use single (32-bit) FP only" + msgstr "Utiliser un simple FP (32 bits) seulement" + + #: config/mips/mips.h:450 + msgid "Don't use single (32-bit) FP only" + msgstr "Ne pas utiliser un simple FP (32 bits) seulement" + + #: config/mips/mips.h:452 + msgid "Use multiply accumulate" + msgstr "Utiliser les multiplications par accumulations" + + #: config/mips/mips.h:454 + msgid "Don't use multiply accumulate" + msgstr "Ne pas utiliser les multiplications par accumulations" + + #: config/mips/mips.h:456 config/rs6000/rs6000.h:351 + msgid "Don't generate fused multiply/add instructions" + msgstr "Ne pas générer des instructions fusionnés de multiplication/addition" + + #: config/mips/mips.h:458 config/rs6000/rs6000.h:349 + msgid "Generate fused multiply/add instructions" + msgstr "Générer des instructions fusionnés de multiplication/addition" + + #: config/mips/mips.h:460 + msgid "Work around early 4300 hardware bug" + msgstr "Contourner le bug matériel des premiers 4300" + + #: config/mips/mips.h:462 + msgid "Don't work around early 4300 hardware bug" + msgstr "Ne pas contourner le bug matériel des premiers 4300" + + #: config/mips/mips.h:464 + msgid "Optimize for 3900" + msgstr "Optimiser pour le 3900" + + #: config/mips/mips.h:466 + msgid "Optimize for 4650" + msgstr "Optimiser pour le 4650" + + #: config/mips/mips.h:468 + msgid "Trap on integer divide by zero" + msgstr "Intercepter les divisions par zéros sur des entiers" + + #: config/mips/mips.h:470 + msgid "Don't trap on integer divide by zero" + msgstr "Ne pas intercepter les divisions par zéros sur des entiers" + + #: config/mips/mips.h:472 + msgid "Trap on integer divide overflow" + msgstr "Intercepter les débordements lors de divisions avec des entiers" + + #: config/mips/mips.h:474 + msgid "Don't trap on integer divide overflow" + msgstr "Ne pas intercepter les débordement lors de divisions avec des entiers" + + #: config/mips/mips.h:590 config/mips/mips.h:592 + msgid "Specify CPU for scheduling purposes" + msgstr "Spécifier le CPU pour les besoins de cédulage" + + #: config/mips/mips.h:594 + msgid "Specify CPU for code generation purposes" + msgstr "Spécifier le CPU pour les besoins de la génération de code" + + #: config/mips/mips.h:596 + msgid "Specify a Standard MIPS ISA" + msgstr "Spécifier le standard MIPS ISA" + + #: config/mips/mips.h:598 + msgid "Use mips16 entry/exit psuedo ops" + msgstr "Utiliser les pseudo-op mips16 d'entrée/sortie" + + #: config/mips/mips.h:600 + msgid "Don't use MIPS16 instructions" + msgstr "Ne pas utiliser les instructions MIPS16" + + #: config/mips/mips.h:604 + msgid "Don't call any cache flush functions" + msgstr "Ne pas faire d'appel de fonction de vidange de la cache" + + #: config/mips/mips.h:606 + msgid "Specify cache flush function" + msgstr "Spécifier la fonction de vidange de la cache" + + #. Output assembler code to FILE to increment profiler label # LABELNO + #. for profiling a function entry. + #: config/mips/mips.h:2873 + msgid "mips16 function profiling" + msgstr "profilage de fonction mips16" + + #: config/mmix/mmix.c:138 + #, c-format + msgid "-f%s not supported: ignored" + msgstr "-f%s n'est pas supporté: ignoré" + + #: config/mmix/mmix.c:596 + #, c-format + msgid "too large function value type, needs %d registers, have only %d registers for this" + msgstr "valeur de type de fonction trop grande, a besoin de %d registres mais seuls %d disponibles" + + #: config/mmix/mmix.c:677 + msgid "stack frame too big" + msgstr "trame de pile trop grande" + + #: config/mmix/mmix.c:705 + #, c-format + msgid "stack frame not a multiple of 8 bytes: %d" + msgstr "trame de pile n'est pas un multiple de 8 octets: %d" + + #: config/mmix/mmix.c:1044 + #, c-format + msgid "stack frame not a multiple of octabyte: %d" + msgstr "trame de pile n'est pas un multiple de 8 octets: %d" + + #: config/mmix/mmix.c:1203 + msgid "function_profiler support for MMIX" + msgstr "function_profiler supporté pour MMIX" + + #: config/mmix/mmix.c:1240 + msgid "neither varargs or stdarg in mmix_setup_incoming_varargs" + msgstr "ni varargs ou stdarg dans mmix_setup_incoming_varargs" + + #: config/mmix/mmix.c:1246 + msgid "MMIX Internal: Last named vararg would not fit in a register" + msgstr "MMIX interne: dernier vararg nommé ne pourra être inséré dans un registre" + + #. FIXME: Remove when I know this trigs. + #: config/mmix/mmix.c:1608 + msgid "oops, not debugged; fixing up value:" + msgstr "oops, pas mis au point; correction de la valeur:" + + #: config/mmix/mmix.c:2184 config/mmix/mmix.c:2318 + msgid "MMIX Internal: Expected a CONST_INT, not this" + msgstr "MMIX interne: attendait CONST_INT, pas ceci" + + #: config/mmix/mmix.c:2192 config/mmix/mmix.c:2216 config/mmix/mmix.c:2335 + #, c-format + msgid "MMIX Internal: Bad register: %d" + msgstr "MMIX interne: registre erroné: %d" + + #: config/mmix/mmix.c:2263 + msgid "MMIX Internal: Bad value for 'm', not a CONST_INT" + msgstr "MMIX interne: valeur erronée pour « m », pas un CONST_INT" + + #: config/mmix/mmix.c:2286 + msgid "MMIX Internal: Expected a register, not this" + msgstr "MMIX interne: attendait un registre, pas ceci" + + #: config/mmix/mmix.c:2296 + msgid "MMIX Internal: Expected a constant, not this" + msgstr "MMIX interne: attendait une constante, pas ceci" + + #. Presumably there's a missing case above if we get here. + #: config/mmix/mmix.c:2328 + #, c-format + msgid "MMIX Internal: Missing `%c' case in mmix_print_operand" + msgstr "MMIX interne: cas « %c » manquant dans mmix_print_operand" + + #. We need the original here. + #: config/mmix/mmix.c:2379 + msgid "MMIX Internal: Cannot decode this operand" + msgstr "MMIX interne: ne peut décoder cette opérande" + + #: config/mmix/mmix.c:2444 + msgid "MMIX Internal: This is not a recognized address" + msgstr "MMIX interne: ce n'est pas une adresse reconnue" + + #: config/mmix/mmix.c:2940 config/mmix/mmix.c:3009 + #, c-format + msgid "MMIX Internal: %s is not a shiftable int" + msgstr "MMIX interne: %s n'est pas un entier pouvant décalé" + + #: config/mmix/mmix.c:3128 + msgid "MMIX Internal: Trying to output invalidly reversed condition:" + msgstr "MMIX interne: tentative de produire incorrectement une condition renversée:" + + #: config/mmix/mmix.c:3135 + msgid "MMIX Internal: What's the CC of this?" + msgstr "MMIX interne: quel sorte de CC est-ce?" + + #: config/mmix/mmix.c:3139 + msgid "MMIX Internal: What is the CC of this?" + msgstr "MMIX interne: quel sorte de CC est-ce?" + + #: config/mmix/mmix.c:3210 + msgid "MMIX Internal: This is not a constant:" + msgstr "interne MMIX: ce n'est pas une constante:" + + #. For these target macros, there is no generic documentation here. You + #. should read `Using and Porting GCC' for that. Only comments specific + #. to the MMIX target are here. + #. + #. There are however references to the specific texinfo node (comments + #. with "Node:"), so there should be little or nothing amiss. Probably + #. the opposite, since we don't have to care about old littering and + #. soon outdated generic comments. + #. Node: Driver + #. When both ABI:s work, this is how we tell them apart in code. The + #. GNU abi is implied the default. Also implied in TARGET_DEFAULT. + #. User symbols are in the same name-space as built-in symbols, but we + #. don't need the built-in symbols, so remove those and instead apply + #. stricter operand checking. Don't warn when expanding insns. + #. Pass on -mset-program-start=N and -mset-data-start=M to the linker. + #. Provide default program start 0x100 unless -mno-set-program-start. + #. Don't do this if linking relocatably, with -r. For a final link, + #. produce mmo, unless ELF is requested or when linking relocatably. + #. Put unused option values here. + #: config/mmix/mmix.h:137 + msgid "Set start-address of the program" + msgstr "Adress de départ du programme fixée" + + #: config/mmix/mmix.h:139 + msgid "Set start-address of data" + msgstr "Adresse de départ des données fixée" + + #. FIXME: Provide a way to *load* the epsilon register. + #: config/mmix/mmix.h:188 + msgid "For intrinsics library: pass all parameters in registers" + msgstr "Pour les librairies intrinsèques: passer tous les paramètres dans les registres" + + #: config/mmix/mmix.h:191 + msgid "Use register stack for parameters and return value" + msgstr "Utiliser le registre de la pile pour les paramètres et la valeur retournée" + + #: config/mmix/mmix.h:193 + msgid "Use call-clobbered registers for parameters and return value" + msgstr "utiliser les registres d'appels maltraités pour les paramètres et les valeurs retournées" + + #: config/mmix/mmix.h:195 + msgid "Use epsilon-respecting floating point compare instructions" + msgstr "Utiliser un epsilon respectant les instructions de comparaison en virgule flottante" + + #: config/mmix/mmix.h:198 + msgid "Use zero-extending memory loads, not sign-extending ones" + msgstr "utiliser des chargements mémoire avec zéro extension, pas celles avec signe d'extension" + + #: config/mmix/mmix.h:201 + msgid "Generate divide results with reminder having the same sign as the divisor (not the dividend)" + msgstr "générer des résultats de division avec reste ayant le même signe que le diviseur (pas le dividende)" + + #: config/mmix/mmix.h:205 + msgid "Prepend global symbols with \":\" (for use with PREFIX)" + msgstr "pré ajouter les symboles globaux avec «:» (pour l'utilisation avec PREFIX)" + + #: config/mmix/mmix.h:207 + msgid "Do not provide a default start-address 0x100 of the program" + msgstr "Ne pas fournir d'adresse de départ par défaut 0x100 du programme" + + #: config/mmix/mmix.h:209 + msgid "Link to emit program in ELF format (rather than mmo)" + msgstr "Faire l'édition de liens pour produire le programme en format ELF (au lieu de mmo)" + + #: config/mmix/mmix.h:211 + msgid "Use P-mnemonics for branches statically predicted as taken" + msgstr "Utiliser les mnémoniques P pour les branchements statiquement prévus à être pris" + + #: config/mmix/mmix.h:213 + msgid "Don't use P-mnemonics for branches" + msgstr "Ne pas utiliser les mnémoniques P pour les branchements" + + #: config/mmix/mmix.h:215 + msgid "Use addresses that allocate global registers" + msgstr "Utiliser les adresses qui allouent des registres globaux" + + #: config/mmix/mmix.h:217 + msgid "Do not use addresses that allocate global registers" + msgstr "Ne pas utiliser des adresses qui allouent des registres globaux" + + #: config/mn10300/mn10300.h:59 + msgid "Work around hardware multiply bug" + msgstr "Contourner le bug matériel de la multiplication" + + #: config/mn10300/mn10300.h:60 + msgid "Do not work around hardware multiply bug" + msgstr "Ne pas contourner le bug matériel de la multiplication" + + #: config/mn10300/mn10300.h:61 + msgid "Target the AM33 processor" + msgstr "Cible le processeur AM33" + + #: config/mn10300/mn10300.h:65 + msgid "Enable linker relaxations" + msgstr "Autoriser la relâche de l'éditeur de liens" + + #: config/ns32k/ns32k.h:104 config/s390/s390.h:57 + msgid "Don't use hardware fp" + msgstr "Ne pas utiliser le FP matériel" + + #: config/ns32k/ns32k.h:105 + msgid "Alternative calling convention" + msgstr "Convention alternative d'appels" + + #: config/ns32k/ns32k.h:107 + msgid "Pass some arguments in registers" + msgstr "Passer quelques arguments par les registres" + + #: config/ns32k/ns32k.h:108 + msgid "Pass all arguments on stack" + msgstr "PAsser tous les arguments par la pile" + + #: config/ns32k/ns32k.h:109 + msgid "Optimize for 32532 cpu" + msgstr "Optimiser pour le CPU 32532" + + #: config/ns32k/ns32k.h:110 + msgid "Optimize for 32332 cpu" + msgstr "Optimiser pour le CPU 32332" + + #: config/ns32k/ns32k.h:112 + msgid "Optimize for 32032" + msgstr "Optimiser pour le 32022" + + #: config/ns32k/ns32k.h:114 + msgid "Register sb is zero. Use for absolute addressing" + msgstr "Registre sb est zéro. Utilisé pour l'adressage absolu" + + #: config/ns32k/ns32k.h:115 + msgid "Do not use register sb" + msgstr "Ne pas utiliser le registre sb" + + #: config/ns32k/ns32k.h:116 + msgid "Do not use bit-field instructions" + msgstr "Ne pas utiliser les instructions de champs de bits" + + #: config/ns32k/ns32k.h:117 + msgid "Use bit-field instructions" + msgstr "Utiliser les instructions de champs de bits" + + #: config/ns32k/ns32k.h:118 + msgid "Generate code for high memory" + msgstr "Générer du code pour la partie haute de la mémoire" + + #: config/ns32k/ns32k.h:119 + msgid "Generate code for low memory" + msgstr "Générer du code pour la partie basse de la mémoire" + + #: config/ns32k/ns32k.h:120 + msgid "32381 fpu" + msgstr "FPU 32381" + + #: config/ns32k/ns32k.h:121 + msgid "Use multiply-accumulate fp instructions" + msgstr "Utiliser les instructions FP de multiplications avec accumulations" + + #: config/ns32k/ns32k.h:123 + msgid "Do not use multiply-accumulate fp instructions" + msgstr "Ne pas utiliser les instructions FP de multiplications avec accumulations" + + #: config/ns32k/ns32k.h:124 + msgid "\"Small register classes\" kludge" + msgstr "\"Petites classes de registres\" kludge" + + #: config/ns32k/ns32k.h:125 + msgid "No \"Small register classes\" kludge" + msgstr "Pas de \"Petites classes de registres\" kludge" + + #: config/pa/pa.c:200 + #, c-format + msgid "" + "unknown -mschedule= option (%s).\n" + "Valid options are 700, 7100, 7100LC, 7200, and 8000\n" + msgstr "" + "Option inconnue -mschedule= (%s)\n" + "Les options valides sont 700, 7100, 7100LC, 7200 et 8000\n" + + #: config/pa/pa.c:225 + #, c-format + msgid "" + "unknown -march= option (%s).\n" + "Valid options are 1.0, 1.1, and 2.0\n" + msgstr "" + "Option inconnue -march= (%s)\n" + "Les options valides sont 1.0, 1.1 et 2.0\n" + + #: config/pa/pa.c:230 + msgid "PIC code generation is not supported in the portable runtime model\n" + msgstr "La génération de code PIC n'est pas supportée dans le modèle portable d'exécution\n" + + #: config/pa/pa.c:235 + msgid "PIC code generation is not compatible with fast indirect calls\n" + msgstr "La génération de code PIC n'est pas compatible avec les appels indirects rapides.\n" + + #: config/pa/pa.c:240 + msgid "-g is only supported when using GAS on this processor," + msgstr "L'option -g est seulement supportée lorsque GAS est utilisé sur ce processeur," + + #: config/pa/pa.c:241 + msgid "-g option disabled" + msgstr "option -g désactivée" + + #: config/pdp11/pdp11.h:56 + msgid "Do not use hardware floating point" + msgstr "Ne pas utiliser le matériel pour virgule flottante" + + #. return float result in ac0 + #: config/pdp11/pdp11.h:58 + msgid "Return floating point results in ac0" + msgstr "Le résultat retourné en virgule flottante se retrouve dans AC0." + + #: config/pdp11/pdp11.h:59 + msgid "Return floating point results in memory" + msgstr "Le résultat retourné en virgule flottante se retrouve en mémoire." + + #. is 11/40 + #: config/pdp11/pdp11.h:61 + msgid "Generate code for an 11/40" + msgstr "Générer du code pour un 11/40" + + #. is 11/45 + #: config/pdp11/pdp11.h:64 + msgid "Generate code for an 11/45" + msgstr "Générer du code pour un 11/45" + + #. is 11/10 + #: config/pdp11/pdp11.h:67 + msgid "Generate code for an 11/10" + msgstr "Générer du code pour un 11/10" + + #. use movstrhi for bcopy + #. use 32 bit for int + #: config/pdp11/pdp11.h:72 config/pdp11/pdp11.h:73 + msgid "Use 32 bit int" + msgstr "Utiliser des int de 32 bits" + + #: config/pdp11/pdp11.h:74 config/pdp11/pdp11.h:75 + msgid "Use 16 bit int" + msgstr "Utiliser des int de 16 bits" + + #. use 32 bit for float + #: config/pdp11/pdp11.h:77 config/pdp11/pdp11.h:78 + msgid "Use 32 bit float" + msgstr "Utiliser des flottants de 32 bits" + + #: config/pdp11/pdp11.h:79 config/pdp11/pdp11.h:80 + msgid "Use 64 bit float" + msgstr "Utiliser des flottants de 64 bits" + + #. allow abshi pattern? - can trigger "optimizations" which make code SLOW! + #. is branching expensive - on a PDP, it's actually really cheap + #. this is just to play around and check what code gcc generates + #. split instruction and data memory? + #: config/pdp11/pdp11.h:89 + msgid "Target has split I&D" + msgstr "Cible a un I&D séparé" + + #: config/pdp11/pdp11.h:90 + msgid "Target does not have split I&D" + msgstr "Cible n'a pas un I&D séparé" + + #. UNIX assembler syntax? + #: config/pdp11/pdp11.h:92 + msgid "Use UNIX assembler syntax" + msgstr "Utliser la syntaxe de l'assembleur UNIX" + + #: config/pdp11/pdp11.h:93 + msgid "Use DEC assembler syntax" + msgstr "Utliser la syntaxe de l'assembleur DEC" + + #: config/pj/pj.h:73 + msgid "Generate little endian data" + msgstr "Générer des données pour systèmes à octets de poids faible" + + #: config/pj/pj.h:75 + msgid "Generate big endian data" + msgstr "Générer des données pour systèmes à octets de poids fort" + + #: config/pj/pj.h:77 + msgid "Turn on maintainer testing code" + msgstr "Mettre en marche le code d'entretien de mise au point" + + #: config/pj/pj.h:79 + msgid "Enable Transmeta picoJava extensions" + msgstr "Autoriser les extensions Transmeta picoJava" + + #: config/pj/pj.h:81 + msgid "Disable Transmeta picoJava extensions" + msgstr "Interdire les extensions Transmeta picoJava" + + #: config/pj/pj.h:83 + msgid "Disable reorganization pass" + msgstr "Désactiver la passe de réorganisation" + + #: config/romp/romp.c:709 config/rs6000/rs6000.c:6546 + #, c-format + msgid "invalid %%S value" + msgstr "valeur %%S invalide" + + #: config/romp/romp.c:718 config/romp/romp.c:725 + #, c-format + msgid "invalid %%b value" + msgstr "valeur %%b invalide" + + #: config/romp/romp.c:765 config/romp/romp.c:776 + #, c-format + msgid "invalid %%z value" + msgstr "valeur %%z invalide" + + #: config/romp/romp.c:784 config/romp/romp.c:792 + #, c-format + msgid "invalid %%Z value" + msgstr "valeur %%Z invalide" + + #: config/romp/romp.c:799 config/romp/romp.c:808 config/romp/romp.c:815 config/rs6000/rs6000.c:6325 + #, c-format + msgid "invalid %%k value" + msgstr "valeur %%k invalide" + + #: config/romp/romp.c:900 config/romp/romp.c:943 + #, c-format + msgid "invalid %%j value" + msgstr "valeur %%j invalide" + + #. Perform any needed actions needed for a function that is receiving a + #. variable number of arguments. + #. + #. CUM is as above. + #. + #. MODE and TYPE are the mode and type of the current parameter. + #. + #. PRETEND_SIZE is a variable that should be set to the amount of stack + #. that must be pushed by the prolog to pretend that our caller pushed + #. it. + #. + #. Normally, this macro will push all remaining incoming registers on the + #. stack and set PRETEND_SIZE to the length of the registers pushed. + #: config/romp/romp.h:661 + msgid "can't have varargs with -mfp-arg-in-fp-regs" + msgstr "ne peut avoir varargs avec -mfp-arg-in-fp-regs" + + #: config/rs6000/rs6000.c:475 + msgid "-mmultiple is not supported on little endian systems" + msgstr "-mmultiple n'est pas supporté sur des système à octets de poids faible" + + #: config/rs6000/rs6000.c:482 + msgid "-mstring is not supported on little endian systems" + msgstr "-mstring n'est pas supporté sur des système à octets de poids faible" + + #: config/rs6000/rs6000.c:488 config/xtensa/xtensa.c:1846 + #, c-format + msgid "-f%s ignored (all code is position independent)" + msgstr "-f%s ignoré (tout le code est indépendant de la position)" + + #: config/rs6000/rs6000.c:497 + msgid "-ffunction-sections disabled on AIX when debugging" + msgstr "-ffunction-sections désactivé sur AIX lors de la mise au point" + + #: config/rs6000/rs6000.c:503 + msgid "-fdata-sections not supported on AIX" + msgstr "-fdata-sections n'est pas supporté sur AIX" + + #: config/rs6000/rs6000.c:518 + #, c-format + msgid "unknown -mdebug-%s switch" + msgstr "option -mdebug-%s inconnue" + + #: config/rs6000/rs6000.c:528 + #, c-format + msgid "Unknown switch -mlong-double-%s" + msgstr "option -mlong-double-%s inconnue" + + #: config/rs6000/rs6000.c:595 + #, c-format + msgid "unknown ABI specified: '%s'" + msgstr "ABI spécifié inconnu: « %s »" + + #: config/rs6000/rs6000.c:3631 + msgid "argument 1 of __builtin_altivec_predicate must be a constant" + msgstr "argument 1 de « __builtin_altivec_predicate » doit être une constante" + + #: config/rs6000/rs6000.c:3685 + msgid "argument 1 of __builtin_altivec_predicate is out of range" + msgstr "argument 1 de « __builtin_altivec_predicate » est hors gamme" + + #: config/rs6000/rs6000.c:4041 + #, c-format + msgid "argument 3 of `%s' must be a 2-bit literal" + msgstr "argument 3 de « %s » doit être un litéral de 2 bits" + + #: config/rs6000/rs6000.c:6252 + #, c-format + msgid "invalid %%f value" + msgstr "valeur %%f invalide" + + #: config/rs6000/rs6000.c:6261 + #, c-format + msgid "invalid %%F value" + msgstr "valeur %%F invalide" + + #: config/rs6000/rs6000.c:6270 + #, c-format + msgid "invalid %%G value" + msgstr "valeur %%G invalide" + + #: config/rs6000/rs6000.c:6305 + #, c-format + msgid "invalid %%j code" + msgstr "valeur %%j invalide" + + #: config/rs6000/rs6000.c:6315 + #, c-format + msgid "invalid %%J code" + msgstr "valeur %%J invalide" + + #: config/rs6000/rs6000.c:6345 + #, c-format + msgid "invalid %%K value" + msgstr "valeur %%K invalide" + + #: config/rs6000/rs6000.c:6572 + #, c-format + msgid "%%S computed all 1's mask" + msgstr "%%S calculé avec un masque que uns" + + #: config/rs6000/rs6000.c:6599 + #, c-format + msgid "%%S computed all 0's mask" + msgstr "%%S calculé avec un masque de zéros" + + #: config/rs6000/rs6000.c:6609 + #, c-format + msgid "invalid %%T value" + msgstr "valeur %%T invalide" + + #: config/rs6000/rs6000.c:6619 + #, c-format + msgid "invalid %%u value" + msgstr "valeur %%u invalide" + + #: config/rs6000/rs6000.c:6628 + #, c-format + msgid "invalid %%v value" + msgstr "valeur %%v invalide" + + #: config/rs6000/aix.h:137 config/rs6000/beos.h:32 + msgid "Always pass floating-point arguments in memory" + msgstr "Toujours passer des arguments en virgule flottante en mémoire" + + #: config/rs6000/aix.h:139 config/rs6000/beos.h:34 + msgid "Don't always pass floating-point arguments in memory" + msgstr "Na pas toujours passer des arguments en virgule flottante en mémoire" + + #: config/rs6000/aix41.h:28 config/rs6000/aix43.h:32 config/rs6000/aix51.h:32 + msgid "Support message passing with the Parallel Environment" + msgstr "Supporter le passage de messages dans un environnement parallèle" + + #: config/rs6000/aix43.h:28 config/rs6000/aix51.h:28 + msgid "Compile for 64-bit pointers" + msgstr "Compiler pour des pointeurs de 64 bits" + + #: config/rs6000/aix43.h:30 config/rs6000/aix51.h:30 + msgid "Compile for 32-bit pointers" + msgstr "Compiler pour des pointeurs de 32 bits" + + #: config/rs6000/aix43.h:49 config/rs6000/aix51.h:49 + msgid "-maix64 and POWER architecture are incompatible" + msgstr "-maix64 et architecture POWER sont incompatibles" + + #: config/rs6000/aix43.h:54 config/rs6000/aix51.h:54 + msgid "-maix64 requires PowerPC64 architecture remain enabled" + msgstr "-maix64 requiert une architecture PowerPC64 qui demeure sélectionnée" + + #: config/rs6000/aix43.h:58 config/rs6000/aix51.h:58 + msgid "-maix64 required: 64-bit computation with 32-bit addressing not yet supported" + msgstr "-maix64 requis: calcul en 64 bits avec un adressage de 32 bits n'est pas encore supporté" + + #. Run-time compilation parameters selecting different hardware subsets. + #. + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/rs6000/rs6000.h:277 + msgid "Use POWER instruction set" + msgstr "Utiliser le jeu d'instructions du POWER" + + #: config/rs6000/rs6000.h:280 + msgid "Use POWER2 instruction set" + msgstr "Utiliser le jeu d'instructions du POWER2" + + #: config/rs6000/rs6000.h:282 + msgid "Do not use POWER2 instruction set" + msgstr "Ne pas utiliser le jeu d'instructions du POWER2" + + #: config/rs6000/rs6000.h:285 + msgid "Do not use POWER instruction set" + msgstr "Ne pas utiliser le jeu d'instructions du POWER" + + #: config/rs6000/rs6000.h:287 + msgid "Use PowerPC instruction set" + msgstr "Utiliser le jeu d'instructions du PowerPC" + + #: config/rs6000/rs6000.h:290 + msgid "Do not use PowerPC instruction set" + msgstr "Ne pas utiliser le jeu d'instructions du PowerPC" + + #: config/rs6000/rs6000.h:292 + msgid "Use PowerPC General Purpose group optional instructions" + msgstr "Utiliser le groupe d'instructions optionnelles d'utilité général du PowerPC" + + #: config/rs6000/rs6000.h:294 + msgid "Don't use PowerPC General Purpose group optional instructions" + msgstr "Ne pas utiliser le groupe d'instructions optionnelles d'utilité général du PowerPC" + + #: config/rs6000/rs6000.h:296 + msgid "Use PowerPC Graphics group optional instructions" + msgstr "Utiliser le groupe d'instructions graphiques optionnelles du PowerPC" + + #: config/rs6000/rs6000.h:298 + msgid "Don't use PowerPC Graphics group optional instructions" + msgstr "Ne pas utiliser le groupe d'instructions graphiques optionnelles du PowerPC" + + #: config/rs6000/rs6000.h:300 + msgid "Use PowerPC-64 instruction set" + msgstr "Utiliser le jeu d'instructions du PowerPC-64" + + #: config/rs6000/rs6000.h:302 + msgid "Don't use PowerPC-64 instruction set" + msgstr "Ne pas utiliser le jeu d'instructions du PowerPC-64" + + #: config/rs6000/rs6000.h:304 + msgid "Use AltiVec instructions" + msgstr "Utiliser les instructions AltiVec" + + #: config/rs6000/rs6000.h:306 + msgid "Don't use AltiVec instructions" + msgstr "Ne pas utiliser les instructions AltiVec" + + #: config/rs6000/rs6000.h:308 + msgid "Use new mnemonics for PowerPC architecture" + msgstr "Utiliser les nouvelles mnémoniques pour l'architecture du PowerPC" + + #: config/rs6000/rs6000.h:310 + msgid "Use old mnemonics for PowerPC architecture" + msgstr "Utiliser les anciennes mnémoniques pour l'architecture du PowerPC" + + #: config/rs6000/rs6000.h:313 + msgid "Put everything in the regular TOC" + msgstr "Place tout dans le TOC régulier" + + #: config/rs6000/rs6000.h:315 + msgid "Place floating point constants in TOC" + msgstr "Placer les constantes en virgule flottante dans le TOC" + + #: config/rs6000/rs6000.h:317 + msgid "Don't place floating point constants in TOC" + msgstr "Ne pas placer les constantes en virgule flottante dans le TOC" + + #: config/rs6000/rs6000.h:319 + msgid "Place symbol+offset constants in TOC" + msgstr "Placer les constantes symboles+décalages dans le TOC" + + #: config/rs6000/rs6000.h:321 + msgid "Don't place symbol+offset constants in TOC" + msgstr "Ne pas placer les constantes symboles+décalages dans le TOC" + + #: config/rs6000/rs6000.h:327 + msgid "Place variable addresses in the regular TOC" + msgstr "Placer les adresses variables dans un TOC régulier" + + #: config/rs6000/rs6000.h:333 + msgid "Generate load/store multiple instructions" + msgstr "Générer les instructions multiples de chargement/stockage" + + #: config/rs6000/rs6000.h:335 + msgid "Do not generate load/store multiple instructions" + msgstr "Ne pas générer les instructions multiples de chargement/stockage" + + #: config/rs6000/rs6000.h:339 + msgid "Generate string instructions for block moves" + msgstr "Générer les instructions chaînes pour les déplacements de blocs" + + #: config/rs6000/rs6000.h:341 + msgid "Do not generate string instructions for block moves" + msgstr "Ne pas générer les instructions chaînes pour les déplacements de blocs" + + #: config/rs6000/rs6000.h:345 + msgid "Generate load/store with update instructions" + msgstr "Générer les instructions de mise à jour de chargement/stockage" + + #: config/rs6000/rs6000.h:347 + msgid "Do not generate load/store with update instructions" + msgstr "Ne pas générer les instructions de mise à jour de chargement/stockage" + + #: config/rs6000/rs6000.h:355 + msgid "Don't schedule the start and end of the procedure" + msgstr "Ne pas çéduler le début et la fin de la procédure" + + #: config/rs6000/rs6000.h:361 + msgid "Return all structures in memory (AIX default)" + msgstr "Retourner toutes les structures en mémoire (par défaut sur AIX)" + + #: config/rs6000/rs6000.h:363 + msgid "Return small structures in registers (SVR4 default)" + msgstr "Retourner toutes les petites structures dans les registres (par défaut sur SVR4)" + + #: config/rs6000/rs6000.h:426 config/sparc/sparc.h:639 + msgid "Use features of and schedule code for given CPU" + msgstr "Utiliser les options et çéduler le code pour le CPU donné" + + #: config/rs6000/rs6000.h:429 + msgid "Enable debug output" + msgstr "Autoriser la sortie lors de la mise au point" + + #: config/rs6000/rs6000.h:430 + msgid "Specify ABI to use" + msgstr "Spécifier l'ABI à utiliser" + + #: config/rs6000/rs6000.h:432 + msgid "Specify size of long double (64 or 128 bits)" + msgstr "Spécifier la taille des long double (64 ou 128 bits)" + + #. Definitions for __builtin_return_address and __builtin_frame_address. + #. __builtin_return_address (0) should give link register (65), enable + #. this. + #. This should be uncommented, so that the link register is used, but + #. currently this would result in unmatched insns and spilling fixed + #. registers so we'll leave it for another day. When these problems are + #. taken care of one additional fetch will be necessary in RETURN_ADDR_RTX. + #. (mrs) + #. #define RETURN_ADDR_IN_PREVIOUS_FRAME + #. Number of bytes into the frame return addresses can be found. See + #. rs6000_stack_info in rs6000.c for more information on how the different + #. abi's store the return address. + #: config/rs6000/rs6000.h:1792 + msgid "RETURN_ADDRESS_OFFSET not supported" + msgstr "RETURN_ADDRESS_OFFSET n'est pas supporté" + + #: config/rs6000/sysv4.h:88 + msgid "Select ABI calling convention" + msgstr "Sélectionner la convention d'appel ABI" + + #: config/rs6000/sysv4.h:89 + msgid "Select method for sdata handling" + msgstr "Sélectionner la méthode de traitement sdata" + + #: config/rs6000/sysv4.h:104 + msgid "Align to the base type of the bit-field" + msgstr "Aligner à la base du type du champ de bits" + + #: config/rs6000/sysv4.h:106 + msgid "Don't align to the base type of the bit-field" + msgstr "Ne pas aligner à la base du type du champ de bits" + + #: config/rs6000/sysv4.h:108 + msgid "Don't assume that unaligned accesses are handled by the system" + msgstr "Ne pas assumer que les accès non alignées sont traités par le système" + + #: config/rs6000/sysv4.h:110 + msgid "Assume that unaligned accesses are handled by the system" + msgstr "Assumer que les accès non alignées sont traités par le système" + + #: config/rs6000/sysv4.h:112 config/rs6000/sysv4.h:116 + msgid "Produce code relocatable at runtime" + msgstr "Produire du code relocalisable au moment de l'exécution" + + #: config/rs6000/sysv4.h:114 config/rs6000/sysv4.h:118 + msgid "Don't produce code relocatable at runtime" + msgstr "Ne pas produire du code relocalisable au moment de l'exécution" + + #: config/rs6000/sysv4.h:120 config/rs6000/sysv4.h:122 + msgid "Produce little endian code" + msgstr "Produire du code pour système à octets de poids faible (little endian)" + + #: config/rs6000/sysv4.h:124 config/rs6000/sysv4.h:126 + msgid "Produce big endian code" + msgstr "Produire du code pour système à octets de poids fort (big endian)" + + #: config/rs6000/sysv4.h:127 config/rs6000/sysv4.h:128 config/rs6000/sysv4.h:129 config/rs6000/sysv4.h:130 config/rs6000/sysv4.h:131 config/rs6000/sysv4.h:132 config/rs6000/sysv4.h:142 config/rs6000/sysv4.h:143 config/rs6000/sysv4.h:154 config/rs6000/sysv4.h:155 config/rs6000/sysv4.h:157 + msgid "no description yet" + msgstr "aucune description encore" + + #: config/rs6000/sysv4.h:133 + msgid "Use EABI" + msgstr "Utiliser EABI" + + #: config/rs6000/sysv4.h:134 + msgid "Don't use EABI" + msgstr "Ne pas utiliser EABI" + + #: config/rs6000/sysv4.h:137 + msgid "Do not allow bit-fields to cross word boundaries" + msgstr "Ne pas permettre les champs de bits de traverser des frontières de mots" + + #: config/rs6000/sysv4.h:139 + msgid "Use alternate register names" + msgstr "Utiliser les noms alternatifs de registres" + + #: config/rs6000/sysv4.h:141 + msgid "Don't use alternate register names" + msgstr "Ne pas utiliser les noms alternatifs de registres" + + #: config/rs6000/sysv4.h:145 + msgid "Link with libsim.a, libc.a and sim-crt0.o" + msgstr "Faire l'édition de liens avec libsim.a, libc.a et sim-crt0.o" + + #: config/rs6000/sysv4.h:147 + msgid "Link with libads.a, libc.a and crt0.o" + msgstr "Faire l'édition de liens avec libads.a, libc.a and crt0.o" + + #: config/rs6000/sysv4.h:149 + msgid "Link with libyk.a, libc.a and crt0.o" + msgstr "Faire l'édition de liens avec libyk.a, libc.a and crt0.o" + + #: config/rs6000/sysv4.h:151 + msgid "Link with libmvme.a, libc.a and crt0.o" + msgstr "Faire l'édition de liens avec libmvme.a, libc.a and crt0.o" + + #: config/rs6000/sysv4.h:153 + msgid "Set the PPC_EMB bit in the ELF flags header" + msgstr "Initialiser le bit PPC_EMB bit dans l'en-tête des fanions ELF" + + #. Sometimes certain combinations of command options do not make sense + #. on a particular target machine. You can define a macro + #. `OVERRIDE_OPTIONS' to take account of this. This macro, if + #. defined, is executed once just after all the command options have + #. been parsed. + #. + #. The macro SUBTARGET_OVERRIDE_OPTIONS is provided for subtargets, to + #. get control. + #: config/rs6000/sysv4.h:214 + #, c-format + msgid "bad value for -mcall-%s" + msgstr "valeur erronée pour -mcall-%s" + + #: config/rs6000/sysv4.h:230 + #, c-format + msgid "bad value for -msdata=%s" + msgstr "valeur erronée pour -msdata=%s" + + #: config/rs6000/sysv4.h:247 + #, c-format + msgid "-mrelocatable and -msdata=%s are incompatible" + msgstr "-mrelocatable et -msdata=%s sont incompatibles" + + #: config/rs6000/sysv4.h:255 + #, c-format + msgid "-f%s and -msdata=%s are incompatible" + msgstr "-f%s et -msdata=%s sont incompatibles" + + #: config/rs6000/sysv4.h:263 + #, c-format + msgid "-msdata=%s and -mcall-%s are incompatible" + msgstr "-msdata=%s et -mcall-%s sont incompatibles" + + #: config/rs6000/sysv4.h:270 + msgid "-mrelocatable and -mno-minimal-toc are incompatible" + msgstr "-mrelocatable et -mno-minimal-toc sont incompatibles" + + #: config/rs6000/sysv4.h:276 + #, c-format + msgid "-mrelocatable and -mcall-%s are incompatible" + msgstr "-mrelocatable et -mcall-%s sont incompatibles" + + #: config/rs6000/sysv4.h:283 + #, c-format + msgid "-fPIC and -mcall-%s are incompatible" + msgstr "-fPIC et -mcall-%s sont incompatibles" + + #: config/rs6000/sysv4.h:290 + msgid "-mcall-aixdesc must be big endian" + msgstr "-mcall-aixdesc doit être pour un système à octets de poids fort" + + #: config/s390/s390.c:1910 + msgid "invalid UNSPEC as operand (1)" + msgstr "UNSPEC invalide comme opérande (1)" + + #: config/s390/s390.c:1940 + msgid "invalid UNSPEC as operand (2)" + msgstr "UNSPEC invalide comme opérande (2)" + + #: config/s390/s390.c:1946 + msgid "UNKNOWN in s390_output_symbolic_const !?" + msgstr "INCONNU dans s390_output_symbolic_const !?" + + #: config/s390/s390.c:1962 + msgid "Cannot decompose address." + msgstr "Ne pas décomposer l'adresse" + + #: config/s390/s390.c:2110 + msgid "UNKNOWN in print_operand !?" + msgstr "INCONNNU dans print_operand !?" + + #: config/s390/s390.c:2703 + msgid "Total size of local variables exceeds architecture limit." + msgstr "Taille totale des variables locales excède la limite de l'architecture" + + #: config/s390/s390.h:58 + msgid "Set backchain" + msgstr "Fixer la chaîne arrière" + + #: config/s390/s390.h:59 + msgid "Don't set backchain (faster, but debug harder" + msgstr "Ne pas fixer la chaîne arrière (plus rapide mais plus difficle à mettre au point)" + + #: config/s390/s390.h:60 + msgid "Use bras for execucable < 64k" + msgstr "Utiliser bras pour les exécutables < 64k" + + #: config/s390/s390.h:61 + msgid "Don't use bras" + msgstr "Ne pas utiliser bras" + + #: config/s390/s390.h:62 + msgid "Additional debug prints" + msgstr "Imprimer des informations additionnelles en mode débug" + + #: config/s390/s390.h:63 + msgid "Don't print additional debug prints" + msgstr "Ne pas imprimer des informations additionnelles en mode débug" + + #: config/s390/s390.h:64 + msgid "64 bit mode" + msgstr "mode 64 bits" + + #: config/s390/s390.h:65 + msgid "31 bit mode" + msgstr "mode 31 bits" + + #: config/s390/s390.h:66 + msgid "mvcle use" + msgstr "mvcle utilisé" + + #: config/s390/s390.h:67 + msgid "mvc&ex" + msgstr "mvc&ex" + + #: config/sh/sh.c:5060 + msgid "__builtin_saveregs not supported by this subtarget" + msgstr "« __builtin_saveregs » n'est pas supporté par la sous-cible" + + #. The sp_switch attribute only has meaning for interrupt functions. + #: config/sh/sh.c:5610 config/sh/sh.c:5649 + #, c-format + msgid "`%s' attribute only applies to interrupt functions" + msgstr "attribut « %s » s'applique seulement à des fonctions d'interruption" + + #. The argument must be a constant string. + #: config/sh/sh.c:5617 + #, c-format + msgid "`%s' attribute argument not a string constant" + msgstr "l'attribut « %s » de l'argument n'est pas une contante chaîne" + + #. The argument must be a constant integer. + #: config/sh/sh.c:5656 + #, c-format + msgid "`%s' attribute argument not an integer constant" + msgstr "l'attribut « %s » de l'argument n'est pas une contante entière" + + #. There are no delay slots on SHmedia. + #. Relaxation isn't yet supported for SHmedia + #: config/sh/sh.h:367 + msgid "Profiling is not supported on this target." + msgstr "le profilage n'est pas supporté sur cette cible" + + #: config/sparc/sparc.c:317 + #, c-format + msgid "%s is not supported by this configuration" + msgstr "%s n'est pas supporté par cette configuration" + + #: config/sparc/sparc.c:324 + msgid "-mlong-double-64 not allowed with -m64" + msgstr "-mlong-double-64 n'est pas permis avec -m64" + + #: config/sparc/sparc.c:349 + msgid "-mcmodel= is not supported on 32 bit systems" + msgstr "-mcmodel= n'est pas supporté sur les systèmes de 32 bits" + + #: config/sparc/sparc.c:5971 config/sparc/sparc.c:5977 + #, c-format + msgid "invalid %%Y operand" + msgstr "opérande %%Y invalide" + + #: config/sparc/sparc.c:6047 + #, c-format + msgid "invalid %%A operand" + msgstr "opérande %%A invalide" + + #: config/sparc/sparc.c:6057 + #, c-format + msgid "invalid %%B operand" + msgstr "Opérande %%B invalide" + + #: config/sparc/sparc.c:6096 + #, c-format + msgid "invalid %%c operand" + msgstr "opérande %%c invalide" + + #: config/sparc/sparc.c:6097 + #, c-format + msgid "invalid %%C operand" + msgstr "opérande %%C invalide" + + #: config/sparc/sparc.c:6118 + #, c-format + msgid "invalid %%d operand" + msgstr "opérande %%d invalide" + + #: config/sparc/sparc.c:6119 + #, c-format + msgid "invalid %%D operand" + msgstr "opérande %%D invalide" + + #: config/sparc/sparc.c:6135 + #, c-format + msgid "invalid %%f operand" + msgstr "opérande %%f invalide" + + #: config/sparc/sparc.c:6185 + msgid "long long constant not a valid immediate operand" + msgstr "constante long long n'est pas une opérande immédiate valide" + + #: config/sparc/sparc.c:6188 + msgid "floating point constant not a valid immediate operand" + msgstr "constante en virgule flottante n'est pas une opérande immédiate valide" + + #: config/sparc/freebsd.h:81 config/sparc/linux.h:87 config/sparc/linux64.h:144 config/sparc/netbsd-elf.h:239 + msgid "Use 128 bit long doubles" + msgstr "Utiliser des longs doubles de 128 bits" + + #: config/sparc/sp64-elf.h:84 config/sparc/splet.h:29 + msgid "Generate code for big endian" + msgstr "Générer du code pour un système à octets de poids fort" + + #: config/sparc/sp64-elf.h:85 config/sparc/splet.h:30 + msgid "Generate code for little endian" + msgstr "Générer du code pour un système à octets de poids faible" + + #: config/sparc/sp86x-aout.h:51 config/sparc/sp86x-elf.h:67 + msgid "Use little-endian byte order for data" + msgstr "Utiliser l'ordre des octets de poids faible pour les données" + + #: config/sparc/sparc.h:539 + msgid "Assume possible double misalignment" + msgstr "Assumer un mauvais alignement possible des doubles" + + #: config/sparc/sparc.h:541 + msgid "Assume all doubles are aligned" + msgstr "Assumer que tous les doubles sont alignés" + + #: config/sparc/sparc.h:543 + msgid "Pass -assert pure-text to linker" + msgstr "Passer -assert pure-text à l'éditeur de liens" + + #: config/sparc/sparc.h:545 + msgid "Do not pass -assert pure-text to linker" + msgstr "Ne pas passer -assert pure-text à l'éditeur de liens" + + #: config/sparc/sparc.h:547 + msgid "Use flat register window model" + msgstr "Utiliser le modèle de fenêtre de registre plat" + + #: config/sparc/sparc.h:549 + msgid "Do not use flat register window model" + msgstr "Ne pas utiliser le modèle de fenêtre de registre plat" + + #: config/sparc/sparc.h:551 + msgid "Use ABI reserved registers" + msgstr "Utiliser les registres réservés ABI" + + #: config/sparc/sparc.h:553 + msgid "Do not use ABI reserved registers" + msgstr "Ne pas utiliser les registres réservés ABI" + + #: config/sparc/sparc.h:555 + msgid "Use hardware quad fp instructions" + msgstr "Utiliser les instructions matérielles quad FP" + + #: config/sparc/sparc.h:557 + msgid "Do not use hardware quad fp instructions" + msgstr "Ne pas utiliser les instructions matérielles quad FP" + + #: config/sparc/sparc.h:559 + msgid "Compile for v8plus ABI" + msgstr "Compiler pour ABI v8plus" + + #: config/sparc/sparc.h:561 + msgid "Do not compile for v8plus ABI" + msgstr "Ne pas compiler pour ABI v8plus" + + #: config/sparc/sparc.h:563 + msgid "Utilize Visual Instruction Set" + msgstr "Utiliser le jeu d'instructions Visual" + + #: config/sparc/sparc.h:565 + msgid "Do not utilize Visual Instruction Set" + msgstr "Ne pas utiliser le jeu d'instructions Visual" + + #. ??? These are deprecated, coerced to -mcpu=. Delete in 2.9. + #: config/sparc/sparc.h:568 + msgid "Optimize for Cypress processors" + msgstr "Optimiser pour les processeurs Cypress" + + #: config/sparc/sparc.h:570 + msgid "Optimize for SparcLite processors" + msgstr "Optimiser pour les processeurs SparLite" + + #: config/sparc/sparc.h:572 + msgid "Optimize for F930 processors" + msgstr "Optimiser pour les processeurs F930" + + #: config/sparc/sparc.h:574 + msgid "Optimize for F934 processors" + msgstr "Optimiser pour les processeurs F934" + + #: config/sparc/sparc.h:576 + msgid "Use V8 Sparc ISA" + msgstr "Utiliser le Sparc V8 ISA" + + #: config/sparc/sparc.h:578 + msgid "Optimize for SuperSparc processors" + msgstr "Optimiser pour les processeurs SuperSparc" + + #. End of deprecated options. + #: config/sparc/sparc.h:581 + msgid "Pointers are 64-bit" + msgstr "Pointeurs sont de 64 bits" + + #: config/sparc/sparc.h:583 + msgid "Pointers are 32-bit" + msgstr "Pointeurs sont de 32 bits" + + #: config/sparc/sparc.h:585 + msgid "Use 32-bit ABI" + msgstr "Utiliser ABI de 32 bits" + + #: config/sparc/sparc.h:587 + msgid "Use 64-bit ABI" + msgstr "Utiliser ABI de 64 bits" + + #: config/sparc/sparc.h:589 + msgid "Use stack bias" + msgstr "Utiliser le biais de la pile" + + #: config/sparc/sparc.h:591 + msgid "Do not use stack bias" + msgstr "Ne pas utiliser le biais de la pile" + + #: config/sparc/sparc.h:593 + msgid "Use structs on stronger alignment for double-word copies" + msgstr "Utiliser des structs avec alignement plus fort pour les copies de mots-doubles" + + #: config/sparc/sparc.h:595 + msgid "Do not use structs on stronger alignment for double-word copies" + msgstr "Ne pas utiliser des structs avec alignement plus fort pour les copies de mots-doubles" + + #: config/sparc/sparc.h:597 + msgid "Optimize tail call instructions in assembler and linker" + msgstr "Optimiser sur mesure les instructions d'appel avec l'assembleur et l'éditeur de liens" + + #: config/sparc/sparc.h:599 + msgid "Do not optimize tail call instructions in assembler or linker" + msgstr "Ne pas optimiser sur mesure les instructions d'appel avec l'assembleur et l'éditeur de liens" + + #: config/sparc/sparc.h:643 + msgid "Use given Sparc code model" + msgstr "Utiliser le modèle donné de code pour le Sparc" + + #: config/stormy16/stormy16.c:1179 + msgid "cannot use va_start in interrupt function" + msgstr "ne peut utiliser va-start dans une fonction d'interruption" + + #: config/stormy16/stormy16.c:1536 + msgid "`B' operand is not constant" + msgstr "opérande « B » n'est pas une constante" + + #: config/stormy16/stormy16.c:1542 + msgid "`B' operand has multiple bits set" + msgstr "l'opérande « B » a de multiples jeux de bits" + + #: config/stormy16/stormy16.c:1569 + msgid "`o' operand is not constant" + msgstr "opérande « o » n'est pas une constante" + + #: config/stormy16/stormy16.c:1584 + msgid "xstormy16_print_operand: unknown code" + msgstr "xstormy16_print_operand: code inconnu" + + #: config/stormy16/stormy16.c:1634 + #, c-format + msgid "switch statement of size %lu entries too large" + msgstr "déclaration de switch de taille %lu entrée est trop grande" + + #: config/v850/v850-c.c:68 + msgid "#pragma GHS endXXXX found without previous startXXX" + msgstr "#pragma GHS endXXXX repéré sans être précédé de startXXX" + + #: config/v850/v850-c.c:70 + msgid "#pragma GHS endXXX does not match previous startXXX" + msgstr "#pragma GHS endXXX ne concorde pas avec le précédent startXXX" + + #: config/v850/v850-c.c:95 + msgid "cannot set interrupt attribute: no current function" + msgstr "ne peut initialiser l'attribut d'interruption: aucune fonction courante" + + #: config/v850/v850-c.c:103 + msgid "cannot set interrupt attribute: no such identifier" + msgstr "ne peut initialiser l'attribut d'interruption: pas de tel identificateur" + + #: config/v850/v850-c.c:149 + msgid "junk at end of #pragma ghs section" + msgstr "rebut à la fin de la section #pragma ghs" + + #: config/v850/v850-c.c:166 + #, c-format + msgid "unrecognized section name \"%s\"" + msgstr "nom de section non reconnue « %s »" + + #: config/v850/v850-c.c:181 + msgid "malformed #pragma ghs section" + msgstr "sectin mal composée #pragma ghs" + + #: config/v850/v850-c.c:201 + msgid "junk at end of #pragma ghs interrupt" + msgstr "rebut à la fin de l'interruption #pragma ghs" + + #: config/v850/v850-c.c:213 + msgid "junk at end of #pragma ghs starttda" + msgstr "rebut à la fin de #pragma ghs starttda" + + #: config/v850/v850-c.c:225 + msgid "junk at end of #pragma ghs startsda" + msgstr "rebut à la fin de #pragma ghs startsda" + + #: config/v850/v850-c.c:237 + msgid "junk at end of #pragma ghs startzda" + msgstr "rebut à la fin de #pragma ghs startzda" + + #: config/v850/v850-c.c:249 + msgid "junk at end of #pragma ghs endtda" + msgstr "rebut à la fin de #pragma ghs endtda" + + #: config/v850/v850-c.c:261 + msgid "junk at end of #pragma ghs endsda" + msgstr "rebut à la fin de #pragma ghs endsda" + + #: config/v850/v850-c.c:273 + msgid "junk at end of #pragma ghs endzda" + msgstr "rebut à la fin de #pragma ghs endzda" + + #: config/v850/v850.c:122 + #, c-format + msgid "%s=%s is not numeric" + msgstr "%s=%s n'est pas numérique" + + #: config/v850/v850.c:129 + #, c-format + msgid "%s=%s is too large" + msgstr "%s=%s est trop grand" + + #: config/v850/v850.c:285 + msgid "const_double_split got a bad insn:" + msgstr "const_double_split a reçu un insn erroné:" + + #: config/v850/v850.c:777 + msgid "output_move_single:" + msgstr "output_move_single:" + + #: config/v850/v850.c:2084 + msgid "a data area attribute cannot be specified for local variables" + msgstr "un attribut de zone de donnéées ne peut pas être spécifié pour des variables locales" + + #: config/v850/v850.c:2095 + #, c-format + msgid "data area of '%s' conflicts with previous declaration" + msgstr "la zone de données de « %s » entre en conflit avec un déclaration précédente" + + #: config/v850/v850.c:2298 + #, c-format + msgid "bogus JR construction: %d\n" + msgstr "construction JR boggé: %d\n" + + #: config/v850/v850.c:2319 config/v850/v850.c:2521 + #, c-format + msgid "bad amount of stack space removal: %d" + msgstr "taille erronée pour l'enlèvement d'espace de la pile: %d" + + #: config/v850/v850.c:2497 + #, c-format + msgid "bogus JARL construction: %d\n" + msgstr "construction JARL boggée: %d\n" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/v850/v850.h:120 + msgid "Support Green Hills ABI" + msgstr "Supporter l'ABI Green Hills" + + #: config/v850/v850.h:123 + msgid "Prohibit PC relative function calls" + msgstr "Interdire les appels relatifs de fonctions par le PC" + + #: config/v850/v850.h:126 + msgid "Reuse r30 on a per function basis" + msgstr "Ré-utiliser R30 sur une base par fonction" + + #: config/v850/v850.h:129 + msgid "Use stubs for function prologues" + msgstr "Utiliser des stubs pour les prologues de fonction" + + #: config/v850/v850.h:132 + msgid "Same as: -mep -mprolog-function" + msgstr "Identique à: -mep -mprolog-function" + + #: config/v850/v850.h:133 + msgid "Enable backend debugging" + msgstr "Autoriser la mise au point par la fin" + + #: config/v850/v850.h:135 + msgid "Compile for the v850 processor" + msgstr "Compiler pour le processeur v850" + + #: config/v850/v850.h:138 + msgid "Use 4 byte entries in switch tables" + msgstr "Utiliser des entrées de 4 octets dans les tables de switch" + + #: config/v850/v850.h:164 + msgid "Set the max size of data eligible for the TDA area" + msgstr "Initialiser la taille maximale des données éligibles pour la zone TDA" + + #: config/v850/v850.h:167 + msgid "Set the max size of data eligible for the SDA area" + msgstr "Initialiser la taille maximale des données éligibles pour la zone SDA" + + #: config/v850/v850.h:170 + msgid "Set the max size of data eligible for the ZDA area" + msgstr "Initialiser la taille maximale des données éligibles pour la zone ZDA" + + #: config/xtensa/xtensa.c:1048 config/xtensa/xtensa.c:1082 config/xtensa/xtensa.c:1091 + msgid "bad test" + msgstr "test erroné" + + #: config/xtensa/xtensa.c:1790 + msgid "boolean registers required for the floating-point option" + msgstr "registres booléens requis pour l'option de virgule flottante" + + #: config/xtensa/xtensa.c:1965 + msgid "invalid mask" + msgstr "masque invalide" + + #: config/xtensa/xtensa.c:2017 + msgid "invalid address" + msgstr "adresse invalide" + + #: config/xtensa/xtensa.c:2042 + msgid "no register in address" + msgstr "pas de registre dans l'adresse" + + #: config/xtensa/xtensa.c:2050 + msgid "address offset not a constant" + msgstr "décalage d'adresse n'est pas une constante" + + #: config/xtensa/xtensa.h:114 + msgid "Use the Xtensa code density option" + msgstr "Utiliser l'option de densité du code Xtensa" + + #: config/xtensa/xtensa.h:116 + msgid "Do not use the Xtensa code density option" + msgstr "Ne pas utiliser l'option de densité du code Xtensa" + + #: config/xtensa/xtensa.h:118 + msgid "Use the Xtensa MAC16 option" + msgstr "Utiliser l'option Xtensa MAC16" + + #: config/xtensa/xtensa.h:120 + msgid "Do not use the Xtensa MAC16 option" + msgstr "Ne pas utiliser l'option Xtensa MAC16" + + #: config/xtensa/xtensa.h:122 + msgid "Use the Xtensa MUL16 option" + msgstr "Utiliser l'option Xtensa MUL16" + + #: config/xtensa/xtensa.h:124 + msgid "Do not use the Xtensa MUL16 option" + msgstr "Ne pas utiliser l'option Xtensa MUL16" + + #: config/xtensa/xtensa.h:126 + msgid "Use the Xtensa MUL32 option" + msgstr "Utiliser l'option Xtensa MUL16" + + #: config/xtensa/xtensa.h:128 + msgid "Do not use the Xtensa MUL32 option" + msgstr "Ne pas utiliser l'option Xtensa MUL32" + + #. undocumented + #. undocumented + #: config/xtensa/xtensa.h:134 + msgid "Use the Xtensa NSA option" + msgstr "Utiliser l'option Xtensa NSA" + + #: config/xtensa/xtensa.h:136 + msgid "Do not use the Xtensa NSA option" + msgstr "Ne pas utiliser l'option Xtensa NSA" + + #: config/xtensa/xtensa.h:138 + msgid "Use the Xtensa MIN/MAX option" + msgstr "Utiliser l'option Xtensa MIN/MAX" + + #: config/xtensa/xtensa.h:140 + msgid "Do not use the Xtensa MIN/MAX option" + msgstr "Ne pas utiliser l'option Xtensa MIN/MAX" + + #: config/xtensa/xtensa.h:142 + msgid "Use the Xtensa SEXT option" + msgstr "Utiliser l'option Xtensa SEXT" + + #: config/xtensa/xtensa.h:144 + msgid "Do not use the Xtensa SEXT option" + msgstr "Ne pas utiliser l'option Xtensa SEXT" + + #: config/xtensa/xtensa.h:146 + msgid "Use the Xtensa boolean register option" + msgstr "Utiliser l'option des registres booléens Xtensa" + + #: config/xtensa/xtensa.h:148 + msgid "Do not use the Xtensa boolean register option" + msgstr "Ne pas utiliser l'option des registres booléens Xtensa" + + #: config/xtensa/xtensa.h:150 + msgid "Use the Xtensa floating-point unit" + msgstr "Utiliser l'unité matérielle pour virgule flottante Xtensa" + + #: config/xtensa/xtensa.h:152 + msgid "Do not use the Xtensa floating-point unit" + msgstr "Ne pas utiliser l'unité matérielle pour virgule flottante Xtensa" + + #. undocumented + #. undocumented + #. undocumented + #. undocumented + #. undocumented + #. undocumented + #. undocumented + #. undocumented + #: config/xtensa/xtensa.h:170 + msgid "Disable fused multiply/add and multiply/subtract FP instructions" + msgstr "Interdire les instructions fusionnés FP de multiplication/addition et de multiplication/soustraction" + + #: config/xtensa/xtensa.h:172 + msgid "Enable fused multiply/add and multiply/subtract FP instructions" + msgstr "Permettre les instructions fusionnés FP de multiplication/addition et de multiplication/soustraction" + + #: config/xtensa/xtensa.h:174 + msgid "Serialize volatile memory references with MEMW instructions" + msgstr "Sérialiser les références à la mémoire volatile avec des instructions MEMW" + + #: config/xtensa/xtensa.h:176 + msgid "Do not serialize volatile memory references with MEMW instructions" + msgstr "Ne pas sérialiser les références à la mémoire volatile avec des instructions MEMW" + + #: config/xtensa/xtensa.h:178 + msgid "Intersperse literal pools with code in the text section" + msgstr "Entrecouper les lots de litéraux avec le code dans la section texte" + + #: config/xtensa/xtensa.h:180 + msgid "Put literal pools in a separate literal section" + msgstr "Placer les lots de litéraux dans des sections séparées de litéraux" + + #: config/xtensa/xtensa.h:182 + msgid "Automatically align branch targets to reduce branch penalties" + msgstr "Aligner automatiquement les branchements cibles pour réduire les pénalités de branchement" + + #: config/xtensa/xtensa.h:184 + msgid "Do not automatically align branch targets" + msgstr "Ne pas aligner automatiquement les branchements cibles pour réduire les pénalités de branchement" + + #: config/xtensa/xtensa.h:186 + msgid "Use indirect CALLXn instructions for large programs" + msgstr "Utiliser les instructions indirectes CALLXn pour les grands programmes" + + #: config/xtensa/xtensa.h:188 + msgid "Use direct CALLn instructions for fast calls" + msgstr "Utiliser les instructions directes CALLn pour des appels rapides" + + #: ada/misc.c:219 + msgid "`-gnat' misspelled as `-gant'" + msgstr "«-gnat» mal épellé comme «-gant»" + + #: cp/call.c:270 cp/init.c:1635 + msgid "qualified type `%T' does not match destructor name `~%T'" + msgstr "type qualifé « %T » ne concorde pas le nom du destructeur «~%T»" + + #: cp/call.c:279 + msgid "type of `%E' does not match destructor type `%T' (type was `%T')" + msgstr "type de « %E » ne concorde pas avec le type du destructeur « %T » (type était « %T »)" + + #: cp/call.c:288 + msgid "`%D' is a namespace" + msgstr "« %D » est un nom d'espace" + + #: cp/call.c:296 + msgid "base object `%E' of scoped method call is of non-aggregate type `%T'" + msgstr "objet de base « %E » de la portée d'appel de la méthode n'est pas de type aggrégat « %T »" + + #: cp/call.c:394 + msgid "unable to call pointer to member function here" + msgstr "incapable de faire l'appel avec le pointeur vers le membre d'une fonction ici" + + #: cp/call.c:530 + msgid "destructors take no parameters" + msgstr "destructeurs ne prend aucun paramètre" + + #: cp/call.c:537 + msgid "destructor name `~%T' does not match type `%T' of expression" + msgstr "nom du destructeur «~%T» ne concorde pas avec le type « %T » de l'expression" + + #: cp/call.c:2374 + msgid "%s %D(%T, %T, %T) " + msgstr "%s %D(%T, %T, %T) " + + #: cp/call.c:2379 + msgid "%s %D(%T, %T) " + msgstr "%s %D(%T, %T) " + + #: cp/call.c:2383 + msgid "%s %D(%T) " + msgstr "%s %D(%T) " + + #: cp/call.c:2387 + msgid "%s %T " + msgstr "%s %T " + + #: cp/call.c:2389 + msgid "%s %+#D%s" + msgstr "%s %+#D%s" + + #: cp/call.c:2546 + msgid "no viable candidates" + msgstr "pas de candidats viables" + + #: cp/call.c:2560 + msgid "conversion from `%T' to `%T' is ambiguous" + msgstr "conversion de « %T » vers « %T » est ambiguë" + + #: cp/call.c:2677 + msgid "no matching function for call to `%D(%A)'" + msgstr "pas de fonction concordante pour l'appel de «%D(%A)»" + + #: cp/call.c:2688 cp/call.c:4681 + msgid "call of overloaded `%D(%A)' is ambiguous" + msgstr "appel du surchargé «%D(%A)» est ambigu" + + #. It's no good looking for an overloaded operator() on a + #. pointer-to-member-function. + #: cp/call.c:2715 + #, c-format + msgid "pointer-to-member function %E cannot be called without an object; consider using .* or ->*" + msgstr "fonction de pointeur vers un membre %E ne peut être appelée sans un objet; considérer l'utilisation de .* ou ->*" + + #: cp/call.c:2784 + msgid "no match for call to `(%T) (%A)'" + msgstr "pas de concordance pour l'appel de «(%T) (%A)»" + + #: cp/call.c:2794 + msgid "call of `(%T) (%A)' is ambiguous" + msgstr "appel de «(%T) (%A)» est ambigu" + + #: cp/call.c:2829 + msgid "%s for `%T ? %T : %T' operator" + msgstr "%s pour «%T ? %T : %T» comme opérateur" + + #: cp/call.c:2834 + msgid "%s for `%T %s' operator" + msgstr "%s pour l'opérateur «%T %s»" + + #: cp/call.c:2837 + msgid "%s for `%T [%T]' operator" + msgstr "%s pour l'opérateur «%T [%T]»" + + #: cp/call.c:2842 + msgid "%s for `%T %s %T' operator" + msgstr "%s pour l'opérateur «%t [%T]»" + + #: cp/call.c:2845 + msgid "%s for `%s %T' operator" + msgstr "%s pour l'opérateur «%t [%T]»" + + #: cp/call.c:2937 + msgid "ISO C++ forbids omitting the middle term of a ?: expression" + msgstr "ISO C++ inerdit l'omission du terme milieu de l'expression ?:" + + #: cp/call.c:2996 + #, c-format + msgid "`%E' has type `void' and is not a throw-expression" + msgstr "« %E» a le type «void » et n'est pas une expresion de retour de type throw" + + #: cp/call.c:3029 cp/call.c:3229 + msgid "operands to ?: have different types" + msgstr "opérande vers ?: a différents types" + + #: cp/call.c:3182 + msgid "enumeral mismatch in conditional expression: `%T' vs `%T'" + msgstr "non concordance de type énuméré dans l'expression conditionnelle: « %T » vs « %T »" + + #: cp/call.c:3189 + msgid "enumeral and non-enumeral type in conditional expression" + msgstr "type énuméré et non énuméré dans l'expression conditionnelle" + + #: cp/call.c:3270 + msgid "`%D' must be declared before use" + msgstr "« %D » doit être déclaré avant son usage" + + #: cp/call.c:3433 + msgid "no `%D(int)' declared for postfix `%s', trying prefix operator instead" + msgstr "pas «%D(int)» déclaré pour le postfixe « %s », essaie avec l'oprateur préfixe à la place" + + #: cp/call.c:3480 + msgid "using synthesized `%#D' for copy assignment" + msgstr "utilisation du synthétisé «%#D» pour l'affectaion par copie" + + #: cp/call.c:3482 + msgid " where cfront would use `%#D'" + msgstr " où cfront utiliserait «%#D»" + + #: cp/call.c:3509 + msgid "comparison between `%#T' and `%#T'" + msgstr "comparaison entre «%#T» et «%#T»" + + #: cp/call.c:3748 + msgid "no suitable `operator delete' for `%T'" + msgstr "« operator delete» pas adapté pour «%T »" + + #: cp/call.c:3767 + msgid "`%+#D' is private" + msgstr "«%+#D» est privé" + + #: cp/call.c:3769 + msgid "`%+#D' is protected" + msgstr "«%+#D» est protégé" + + #: cp/call.c:3771 + msgid "`%+#D' is inaccessible" + msgstr "«%+#D» et inaccessible" + + #: cp/call.c:3772 + msgid "within this context" + msgstr "à l'intérieur du contexte" + + #: cp/call.c:3814 + msgid "invalid conversion from `%T' to `%T'" + msgstr "conversion invalide de « %T » vers « %T »" + + #: cp/call.c:3816 cp/call.c:3955 cp/call.c:3957 + msgid " initializing argument %P of `%D'" + msgstr " initialisation de l'argument %P de « %D »" + + #: cp/call.c:3879 cp/call.c:3883 + msgid " initializing argument %P of `%D' from result of `%D'" + msgstr " initialisation de l'argument %P de « %D » à partir du résultat « %D »" + + #: cp/call.c:3889 cp/call.c:3892 + msgid " initializing temporary from result of `%D'" + msgstr " initialisation temporaire à partir du résultat « %D »" + + #. Undefined behaviour [expr.call] 5.2.2/7. + #: cp/call.c:4026 + msgid "cannot pass objects of non-POD type `%#T' through `...'" + msgstr "ne peut recevoir d'objets de type non POD «%#T» through « ... »" + + #. Undefined behaviour [expr.call] 5.2.2/7. + #: cp/call.c:4051 + msgid "cannot receive objects of non-POD type `%#T' through `...'" + msgstr "ne peut recevoir d'objets de type non POD «%#T» through « ... »" + + #: cp/call.c:4193 + msgid "passing `%T' as `this' argument of `%#D' discards qualifiers" + msgstr "passant « %T» comme «cet» argument de «%#D » écarte les qualificateurs" + + #: cp/call.c:4443 + msgid "could not find class$ field in java interface type `%T'" + msgstr "ne peut repérer le champ classe$ dans le type d'interface JAVA « %T »" + + #: cp/call.c:4544 cp/typeck.c:2018 + msgid "request for member `%D' in `%E', which is of non-aggregate type `%T'" + msgstr "requête du membre « %D » dans « %E », lequel n'est pas de type aggrégat « %T »" + + #: cp/call.c:4670 + msgid "no matching function for call to `%T::%D(%A)%#V'" + msgstr "pas de fonction concordante pour l'appel à «%T::%D(%A)%#V»" + + #: cp/call.c:4700 + msgid "cannot call member function `%D' without object" + msgstr "ne peut appeler un membre de fonction « %D » sans objet" + + #: cp/call.c:5313 + msgid "passing `%T' chooses `%T' over `%T'" + msgstr "passant « %T » à choisit « %T » au lieu de « %T »" + + #: cp/call.c:5315 cp/decl2.c:4508 + msgid " in call to `%D'" + msgstr " dans l'appel de « %D »" + + #: cp/call.c:5364 cp/call.c:5489 + msgid "choosing `%D' over `%D'" + msgstr "choix de « %D » à la place de « %D »" + + #: cp/call.c:5365 + msgid " for conversion from `%T' to `%T'" + msgstr " pour la conversion de « %T » vers « %T »" + + #: cp/call.c:5367 + msgid " because conversion sequence for the argument is better" + msgstr " parce que la séquence de conversion pour l'argument est meilleure" + + #: cp/call.c:5491 + msgid " because worst conversion for the former is better than worst conversion for the latter" + msgstr " parce la plus mauvaise conversion de la déclaration initiale est meilleure que la plus mauvaise conversion de la dernière déclaration" + + #: cp/call.c:5607 cp/call.c:5628 + msgid "could not convert `%E' to `%T'" + msgstr "ne peut convertir « %E » vers « %T »" + + #: cp/class.c:287 + msgid "cannot convert from base `%T' to derived type `%T' via virtual base `%T'" + msgstr "ne peut convertir de la base « %T » à un type dérivé « %T » via la base virtuel « %T »" + + #: cp/class.c:1020 + msgid "`%#D' and `%#D' cannot be overloaded" + msgstr "«%#D» et «%#D» ne peut être surchargé" + + #. There has already been a declaration of this method + #. or member template. + #: cp/class.c:1031 + msgid "`%D' has already been declared in `%T'" + msgstr "« %D » a déjà été déclaré dans « %T »" + + #: cp/class.c:1112 + msgid "duplicate enum value `%D'" + msgstr "valeur d'énumérateur « %D » en double" + + #: cp/class.c:1115 + msgid "duplicate field `%D' (as enum and non-enum)" + msgstr "champ « %D » en double (comme enum et non enum)" + + #: cp/class.c:1122 + msgid "duplicate nested type `%D'" + msgstr "type « %D » imbriqué en double" + + #: cp/class.c:1133 + msgid "duplicate field `%D' (as type and non-type)" + msgstr "duplicattion du champ « %D » (comme type et non type)" + + #: cp/class.c:1137 + msgid "duplicate member `%D'" + msgstr "membre « %D » est double" + + #: cp/class.c:1180 + msgid "conflicting access specifications for method `%D', ignored" + msgstr "spécifications d'accès conflictuelles pour la méthode « %D », ignoré" + + #: cp/class.c:1182 + #, c-format + msgid "conflicting access specifications for field `%s', ignored" + msgstr "spécifications d'accès conflictuelles pour le champ « %s », ignoré" + + #: cp/class.c:1225 + msgid "`%D' names constructor" + msgstr "« %D » nomme le constructeur" + + #: cp/class.c:1231 + msgid "`%D' invalid in `%T'" + msgstr "« %D » invalide dans « %T »" + + #: cp/class.c:1239 + msgid "no members matching `%D' in `%#T'" + msgstr "aucun membre concordant « %D » dans «%#T»" + + #: cp/class.c:1271 cp/class.c:1279 + msgid "`%D' invalid in `%#T'" + msgstr "« %D » invalide dans «%#T»" + + #: cp/class.c:1272 + msgid " because of local method `%#D' with same name" + msgstr " parce que la méthode locale «%#D» a le même nom" + + #: cp/class.c:1280 + msgid " because of local member `%#D' with same name" + msgstr " parce que le membre local «%#D» a le même nom" + + #: cp/class.c:1352 + msgid "base class `%#T' has a non-virtual destructor" + msgstr "classe de base «%#T» a un destructeur non virtuel" + + #: cp/class.c:1372 + msgid "base `%T' with only non-default constructor in class without a constructor" + msgstr "base « %T » avec seulement le constructeur non par défaut dans la classe sans un constructeur" + + #: cp/class.c:1959 + msgid "all member functions in class `%T' are private" + msgstr "tous les membres de fonctions dans la classe « %T » sont privés" + + #: cp/class.c:1973 + msgid "`%#T' only defines a private destructor and has no friends" + msgstr "«%#T» définit seulement les constructeurs privés et n'a pas d'amis" + + #: cp/class.c:2016 + msgid "`%#T' only defines private constructors and has no friends" + msgstr "«%#T» définit seulement les constructeurs privés et n'a pas d'amis" + + #: cp/class.c:2137 cp/class.c:5064 + msgid "redefinition of `%#T'" + msgstr "redéfinition de «%#T»" + + #: cp/class.c:2138 + msgid "previous definition of `%#T'" + msgstr "définition précédente de «%#T»" + + #: cp/class.c:2468 + msgid "no unique final overrider for `%D' in `%T'" + msgstr "pas d'écraseur unique final pour « %D » dans « %T »" + + #. Here we know it is a hider, and no overrider exists. + #: cp/class.c:2850 + msgid "`%D' was hidden" + msgstr "« %D » était caché" + + #: cp/class.c:2851 + msgid " by `%D'" + msgstr " par « %D »" + + #: cp/class.c:2893 + msgid "ISO C++ forbids member `%D' with same name as enclosing class" + msgstr "ISO C++ interdit le membre « %D » avec le même non de la classe de fermeture" + + #: cp/class.c:2898 cp/decl2.c:1883 + msgid "`%#D' invalid; an anonymous union can only have non-static data members" + msgstr "«%#D» invalide; une union anonyme peut seulement avoir des données non statiques de membres" + + #: cp/class.c:2904 cp/decl2.c:1889 + msgid "private member `%#D' in anonymous union" + msgstr "membre privé «%#D» dans une union anonyme" + + #: cp/class.c:2907 cp/decl2.c:1891 + msgid "protected member `%#D' in anonymous union" + msgstr "membre protégé «%#D» dans une union anonyme" + + #: cp/class.c:3059 + msgid "bit-field `%#D' with non-integral type" + msgstr "largeur du champ de bits «%#D» n'est pas une constante entière" + + #: cp/class.c:3079 + msgid "bit-field `%D' width not an integer constant" + msgstr "largeur du champ de bits « %D » n'est pas une constante entière" + + #: cp/class.c:3085 + msgid "negative width in bit-field `%D'" + msgstr "largeur négative du champ de bits « %D »" + + #: cp/class.c:3090 + msgid "zero width for bit-field `%D'" + msgstr "largeur zéro pour le champ de bits « %D »" + + #: cp/class.c:3096 + msgid "width of `%D' exceeds its type" + msgstr "largeur de « %D » excède son type" + + #: cp/class.c:3105 + msgid "`%D' is too small to hold all values of `%#T'" + msgstr "« %D » est trop petit pour contenir toutes les valeurs de «%#T»" + + #: cp/class.c:3189 + msgid "member `%#D' with constructor not allowed in union" + msgstr "membre «%#D» avec consructeur n'est pas permis dans l'union" + + #: cp/class.c:3192 + msgid "member `%#D' with destructor not allowed in union" + msgstr "membre «%#D» avec destructeur n'est pas permis dans l'union" + + #: cp/class.c:3195 + msgid "member `%#D' with copy assignment operator not allowed in union" + msgstr "membre «%#D» avec opérateur d,affectation par copie n'st pas permis dans l'union" + + #: cp/class.c:3222 + msgid "multiple fields in union `%T' initialized" + msgstr "champs multiples dans l'union « %T » initialisés" + + #: cp/class.c:3341 + msgid "field `%D' in local class cannot be static" + msgstr "champ « %D » dans une classe locale ne peut être statique" + + #: cp/class.c:3347 + msgid "field `%D' invalidly declared function type" + msgstr "champ « %D » incorrectement validé comme un type de fonction" + + #: cp/class.c:3354 + msgid "field `%D' invalidly declared method type" + msgstr "champ « %D » incorrectement validé comme un type de méthode" + + #: cp/class.c:3360 + msgid "field `%D' invalidly declared offset type" + msgstr "champ « %D » incorrectement validé comme type de décalage" + + #. Unions cannot have static members. + #: cp/class.c:3378 + msgid "field `%D' declared static in union" + msgstr "champ « %D » déclaré statique dans l'union" + + #: cp/class.c:3404 + msgid "non-static reference `%#D' in class without a constructor" + msgstr "référence non statique «%#D» dans la classe sans un constructeur" + + #: cp/class.c:3435 + msgid "non-static const member `%#D' in class without a constructor" + msgstr "constante non statique de membre «%#D» dans la classe sans un constructeur" + + #: cp/class.c:3450 + msgid "field `%#D' with same name as class" + msgstr "champ «%#D» avec le même nom qu'une classe" + + #: cp/class.c:3468 + msgid "`%#T' has pointer data members" + msgstr "«%#T» a un pointeur vers un membre de données" + + #: cp/class.c:3472 + msgid " but does not override `%T(const %T&)'" + msgstr " mais n'écrase pas «%T(const %T&)»" + + #: cp/class.c:3474 + msgid " or `operator=(const %T&)'" + msgstr " ou « operator=(const %T&) »" + + #: cp/class.c:3477 + msgid " but does not override `operator=(const %T&)'" + msgstr " mais n'écrase pas « operator=(const %T&) »" + + #: cp/class.c:3943 + msgid "initializer specified for non-virtual method `%D'" + msgstr "initialiseur spécifié pour une méthode non virtuelle « %D »" + + #: cp/class.c:4728 + msgid "virtual base `%T' inaccessible in `%T' due to ambiguity" + msgstr "base virtuelle « %T » inaccessible dans « %T » en raison de l'ambiguité" + + #: cp/class.c:4798 + msgid "direct base `%T' inaccessible in `%T' due to ambiguity" + msgstr "base directe « %T » inaccessible dans « %T » en raison de l'ambiguité" + + #: cp/class.c:5225 + msgid "`%#T' has virtual functions but non-virtual destructor" + msgstr "«%#T» a des fonctions virtuelles mais un destructeur non virtuel" + + #: cp/class.c:5309 + msgid "trying to finish struct, but kicked out due to previous parse errors" + msgstr "tentative de complétion du struct, mais a été stoppé en raison d'erreurs précédentes d'analyses syntaxiques" + + #: cp/class.c:5766 + #, c-format + msgid "language string `\"%s\"' not recognized" + msgstr "chaîne du langage «\"%s\"» n'est pas reconnue" + + #: cp/class.c:5862 + msgid "cannot resolve overloaded function `%D' based on conversion to type `%T'" + msgstr "ne peut résoudre la fonction surchargé « %D » basé sur la conversion vers le type « %T »" + + #: cp/class.c:5983 + msgid "no matches converting function `%D' to type `%#T'" + msgstr "pas de concordance de conversion de fonction « %D » vers le type «%#T'" + + #: cp/class.c:6006 + msgid "converting overloaded function `%D' to type `%#T' is ambiguous" + msgstr "conversion d'une fonction surchargée « %D » vers le type «%#T» est ambiguë" + + #: cp/class.c:6032 + msgid "assuming pointer to member `%D'" + msgstr "pointeur assumé vers le membre « %D »" + + #: cp/class.c:6035 + #, c-format + msgid "(a pointer to member can only be formed with `&%E')" + msgstr "(un pointeur vers un membre peut seulement être formé avec «&%E»)" + + #: cp/class.c:6079 cp/class.c:6247 cp/class.c:6254 + msgid "not enough type information" + msgstr "pas assez d'information sur le type" + + #: cp/class.c:6088 + msgid "argument of type `%T' does not match `%T'" + msgstr "argument de type « %T » ne concorde pas avec « %T »" + + #: cp/class.c:6231 + msgid "invalid operation on uninstantiated type" + msgstr "opération invalide sur un type non instancié" + + #. [basic.scope.class] + #. + #. A name N used in a class S shall refer to the same declaration + #. in its context and when re-evaluated in the completed scope of + #. S. + #: cp/class.c:6483 cp/decl.c:1032 cp/decl.c:3172 cp/pt.c:1842 + msgid "declaration of `%#D'" + msgstr "déclaration de «%#D»" + + #: cp/class.c:6484 + msgid "changes meaning of `%D' from `%+#D'" + msgstr "changements signifiant de « %D » à partir de «%+#D»" + + #: cp/cvt.c:88 + msgid "can't convert from incomplete type `%T' to `%T'" + msgstr "ne peut convertir d'un type incomplet « %T » vers « %T »" + + #: cp/cvt.c:97 + msgid "conversion of `%E' from `%T' to `%T' is ambiguous" + msgstr "conversion de « %E » à partir de « %T » vers « %T » est ambiguë" + + #: cp/cvt.c:126 + msgid "converting from `%T' to `%T'" + msgstr "conversion de « %T » vers « %T »" + + #: cp/cvt.c:198 cp/cvt.c:202 + msgid "pointer to member cast from `%T' to `%T' is via virtual base" + msgstr "pointeur vers un membre transtypé de « %T » à « %T » est fait via une base virtuelle" + + #: cp/cvt.c:220 cp/cvt.c:233 cp/cvt.c:272 + msgid "cannot convert `%E' from type `%T' to type `%T'" + msgstr "ne peut convertir « %E » du type « %T » vers le type « %T »" + + #: cp/cvt.c:525 + msgid "conversion from `%T' to `%T' discards qualifiers" + msgstr "conversion de « %T » à « %T » écarte les qualificateurs" + + #: cp/cvt.c:543 + msgid "casting `%T' to `%T' does not dereference pointer" + msgstr "transtypage de « %T » vers « %T » ne fait pas de dé-référence de pointeur" + + #: cp/cvt.c:572 + msgid "cannot convert type `%T' to type `%T'" + msgstr "ne peut convertir type « %T » vers le type « %T »" + + #: cp/cvt.c:689 + msgid "conversion from `%#T' to `%#T'" + msgstr "conversion de «%#T» vers «%#T'" + + #: cp/cvt.c:701 + msgid "`%#T' used where a `%T' was expected" + msgstr "«%#T» utilisé où « %T » était attendu" + + #: cp/cvt.c:718 + msgid "the address of `%D', will always be `true'" + msgstr "l'adresse de « %D», sera toujours «true »" + + #: cp/cvt.c:738 + msgid "`%#T' used where a floating point value was expected" + msgstr "«%#T» utilisé où un nombre flottant était attendu" + + #: cp/cvt.c:793 + msgid "conversion from `%T' to non-scalar type `%T' requested" + msgstr "conversion de « %T » vers un type non scalaire « %T » demandée" + + #: cp/cvt.c:879 + msgid "object of incomplete type `%T' will not be accessed in %s" + msgstr "objet de type incomplet « %T » ne sera pas accessible dans %s" + + #: cp/cvt.c:882 + msgid "object of type `%T' will not be accessed in %s" + msgstr "objet de type « %T » ne sera pas acccessible dans %s" + + #: cp/cvt.c:898 + msgid "object `%E' of incomplete type `%T' will not be accessed in %s" + msgstr "objet « %E » d'un type incomplet « %T » ne sera pas accessible dans %s" + + #. [over.over] enumerates the places where we can take the address + #. of an overloaded function, and this is not one of them. + #: cp/cvt.c:918 + #, c-format + msgid "%s cannot resolve address of overloaded function" + msgstr "%s ne peut résoudre l'adresse la fonction surchargée" + + #. Only warn when there is no &. + #: cp/cvt.c:923 + #, c-format + msgid "%s is a reference, not call, to function `%E'" + msgstr "%s est un référence, pas un appel, à la fonction « %E »" + + #: cp/cvt.c:1061 + msgid "converting NULL to non-pointer type" + msgstr "conversion d'un NULL vers un type non pointeur" + + #: cp/cvt.c:1137 + msgid "ambiguous default type conversion from `%T'" + msgstr "conversion de type par défaut ambiguë à partir de « %T »" + + #: cp/cvt.c:1139 + msgid " candidate conversions include `%D' and `%D'" + msgstr " conversions de candidat inclut « %D » et « %D »" + + #: cp/decl.c:1033 cp/decl.c:3275 + msgid "conflicts with previous declaration `%#D'" + msgstr "conflits avec la déclaration précédente de «%#D»" + + #: cp/decl.c:1222 + msgid "label `%D' used but not defined" + msgstr "étiquette « %D » utilisée mais non définie" + + #: cp/decl.c:1227 + msgid "label `%D' defined but not used" + msgstr "étiquette « %D » définie mais non utilisée" + + #: cp/decl.c:2294 + msgid "namespace alias `%D' not allowed here, assuming `%D'" + msgstr "alias d'espace de noms « %D » n'est pas permis ici, on assume « %D »" + + #: cp/decl.c:3078 cp/decl.c:3483 + msgid "previous declaration of `%D'" + msgstr "déclaration précédente de « %D »" + + #: cp/decl.c:3159 cp/decl.c:3197 + msgid "shadowing %s function `%#D'" + msgstr "%s fait ombrage à la fonction «%#D»" + + #: cp/decl.c:3168 + msgid "library function `%#D' redeclared as non-function `%#D'" + msgstr "fonction «%#D» de la librairie redéclarée comme n'étant pas une fonction «%#D»" + + #: cp/decl.c:3173 + msgid "conflicts with built-in declaration `%#D'" + msgstr "conflits avec la déclaration interne de «%#D»" + + #: cp/decl.c:3192 cp/decl.c:3285 cp/decl.c:3301 + msgid "new declaration `%#D'" + msgstr "nouvelle déclaration de «%#D»" + + #: cp/decl.c:3193 + msgid "ambiguates built-in declaration `%#D'" + msgstr "ambiguités de la déclaration interne de «%#D»" + + #: cp/decl.c:3249 + msgid "`%#D' redeclared as different kind of symbol" + msgstr "« %D » redéclaré comme une sorte différente de symbole" + + #: cp/decl.c:3252 + msgid "previous declaration of `%#D'" + msgstr "déclaration précédente de «%#D»" + + #: cp/decl.c:3274 + msgid "declaration of template `%#D'" + msgstr "déclaration du patron «%#D»" + + #: cp/decl.c:3286 cp/decl.c:3302 + msgid "ambiguates old declaration `%#D'" + msgstr "ambiguités d'une vieille déclaration de «%#D»" + + #: cp/decl.c:3294 + msgid "declaration of C function `%#D' conflicts with" + msgstr "déclaration de la fonction C «%#D» en conflit avec" + + #: cp/decl.c:3296 + msgid "previous declaration `%#D' here" + msgstr "déclaration précédente de «%#D» ici" + + #: cp/decl.c:3312 + msgid "conflicting types for `%#D'" + msgstr "types conflictuels pour «%#D'" + + #: cp/decl.c:3313 + msgid "previous declaration as `%#D'" + msgstr "déclaration précédente de «%#D'" + + #: cp/decl.c:3356 + msgid "`%#D' previously defined here" + msgstr "«%#D» précédemment défini ici" + + #: cp/decl.c:3357 + msgid "`%#D' previously declared here" + msgstr "«%#D» précédemment déclaré ici" + + #. Prototype decl follows defn w/o prototype. + #: cp/decl.c:3366 + msgid "prototype for `%#D'" + msgstr "prototype de «%#D'" + + #: cp/decl.c:3367 + msgid "follows non-prototype definition here" + msgstr "suit la définition d'un non prototype ici" + + #: cp/decl.c:3379 + msgid "previous declaration of `%#D' with %L linkage" + msgstr "déclaration précédente de «%#D» avec le lien %L" + + #: cp/decl.c:3381 + msgid "conflicts with new declaration with %L linkage" + msgstr "conflits avec la nouvelle déclaration avec le lien %L" + + #: cp/decl.c:3404 cp/decl.c:3411 + msgid "default argument given for parameter %d of `%#D'" + msgstr "argument par défaut donné pour le paramètre %d de «%#D»" + + #: cp/decl.c:3406 cp/decl.c:3413 + msgid "after previous specification in `%#D'" + msgstr "après la déclaration précédente dans «%#D»" + + #: cp/decl.c:3422 + msgid "`%#D' was used before it was declared inline" + msgstr "«%#D» a été utilisé avant qu'il ne soit déclaré en ligne" + + #: cp/decl.c:3424 + msgid "previous non-inline declaration here" + msgstr "déclaration précédente non en ligne ici" + + #: cp/decl.c:3482 + msgid "redundant redeclaration of `%D' in same scope" + msgstr "déclaration redondante de « %D » dans la même étendue" + + #: cp/decl.c:3566 + #, c-format + msgid "declaration of `%F' throws different exceptions" + msgstr "déclaration de « %F » amène différentes exceptions" + + #: cp/decl.c:3568 + #, c-format + msgid "than previous declaration `%F'" + msgstr "qu'une précédente déclaratio « %F »" + + #. From [temp.expl.spec]: + #. + #. If a template, a member template or the member of a class + #. template is explicitly specialized then that + #. specialization shall be declared before the first use of + #. that specialization that would cause an implicit + #. instantiation to take place, in every translation unit in + #. which such a use occurs. + #: cp/decl.c:3701 + msgid "explicit specialization of %D after first use" + msgstr "spécialisation explicite de %D après la première utilisation" + + #: cp/decl.c:3946 + msgid "`%#D' used prior to declaration" + msgstr "«%#D» utilisé précédemment avant sa déclaration" + + #: cp/decl.c:3977 + msgid "redeclaration of `wchar_t' as `%T'" + msgstr "redéclaration de « wchar_t» comme «%T »" + + #. A redeclaration of main, but not a duplicate of the + #. previous one. + #. + #. [basic.start.main] + #. + #. This function shall not be overloaded. + #: cp/decl.c:4005 + msgid "invalid redeclaration of `%D'" + msgstr "redéclaration invalide de « %D »" + + #: cp/decl.c:4006 + msgid "as `%D'" + msgstr "comme « %D »" + + #: cp/decl.c:4096 + msgid "previous external decl of `%#D'" + msgstr "déclaration externe précédente de « %#D »" + + #: cp/decl.c:4137 + msgid "`%D' was previously implicitly declared to return `int'" + msgstr "« %D » a été précédemment implicitement déclaré comme retournant un entier" + + #: cp/decl.c:4197 + msgid "extern declaration of `%#D' doesn't match" + msgstr "déclaration externe de «%#D» ne concorde pas" + + #: cp/decl.c:4198 + msgid "global declaration `%#D'" + msgstr "déclaration globale «%#D»" + + #: cp/decl.c:4229 + msgid "declaration of `%#D' shadows a parameter" + msgstr "déclaration de «%#D» cache un paramètre" + + #: cp/decl.c:4249 + #, c-format + msgid "declaration of `%s' shadows a member of `this'" + msgstr "déclaration de « %s » fait ombrage au membre de « this »" + + #: cp/decl.c:4600 + msgid "`%#D' hides constructor for `%#T'" + msgstr "«%#D» cache un constructeur pour «%#T»" + + #: cp/decl.c:4615 + msgid "`%#D' conflicts with previous using declaration `%#D'" + msgstr "«%#D» en conflit avec une déclaration précédente «%#D»" + + #: cp/decl.c:4627 + msgid "previous non-function declaration `%#D'" + msgstr "déclaration précédente d'un non fonction «%#D»" + + #: cp/decl.c:4628 + msgid "conflicts with function declaration `%#D'" + msgstr "conflits avec la déclaration de fonction de «%#D»" + + #: cp/decl.c:4718 + msgid "implicit declaration of function `%#D'" + msgstr "déclaration implicite de la fonction «%#D»" + + #: cp/decl.c:4876 + #, c-format + msgid "label `%s' referenced outside of any function" + msgstr "étiquette « %s » référencée à l'extérieur de n'importe quelle fonction" + + #: cp/decl.c:4979 cp/decl.c:5003 cp/decl.c:5096 + msgid "jump to label `%D'" + msgstr "saut à l'étiquette « %D »" + + #: cp/decl.c:4981 cp/decl.c:5005 + msgid "jump to case label" + msgstr "saut à l'étiquette du « case »" + + #: cp/decl.c:4989 + msgid " crosses initialization of `%#D'" + msgstr " initialisation croisée pour «%#D»" + + #: cp/decl.c:4992 cp/decl.c:5112 + msgid " enters scope of non-POD `%#D'" + msgstr " entre dans la porté d'un non POD «%#D»" + + #: cp/decl.c:5012 cp/decl.c:5116 + msgid " enters try block" + msgstr " entre dans le bloc d'essais" + + #. Can't skip init of __exception_info. + #: cp/decl.c:5014 cp/decl.c:5108 cp/decl.c:5118 + msgid " enters catch block" + msgstr " entre dans le bloc d'interceptions" + + #: cp/decl.c:5097 + msgid " from here" + msgstr " à partir d'ici" + + #: cp/decl.c:5110 + msgid " skips initialization of `%#D'" + msgstr " saut d'initialisation pour «%#D»" + + #: cp/decl.c:5145 + msgid "label named wchar_t" + msgstr "étiquette nommée wchar_t" + + #: cp/decl.c:5149 + msgid "duplicate label `%D'" + msgstr "étiquette « %D » apparaît en double" + + #: cp/decl.c:5234 + #, c-format + msgid "case label `%E' not within a switch statement" + msgstr "étiquette du CASE « %E » n'est pas à l'intérieur de la déclaration du SWITCH" + + #. Definition isn't the kind we were looking for. + #: cp/decl.c:5411 cp/decl.c:5430 + msgid "`%#D' redeclared as %C" + msgstr "«%#D» rédéclaré comme %C" + + #. This happens for A::B where B is a template, and there are no + #. template arguments. + #: cp/decl.c:5518 cp/typeck.c:1980 + msgid "invalid use of `%D'" + msgstr "utilisation invalide de « %D »" + + #: cp/decl.c:5559 + msgid "`%D::%D' is not a template" + msgstr "«%D::%D» n'est pas un patron" + + #: cp/decl.c:5576 + msgid "`%D' undeclared in namespace `%D'" + msgstr "« %D » non déclaré dans l'espace de noms « %D »" + + #: cp/decl.c:5713 + msgid "`%D' used without template parameters" + msgstr "« %D » utilisé sans patron de paramétres" + + #: cp/decl.c:5724 cp/decl.c:5740 cp/decl.c:5828 + msgid "no class template named `%#T' in `%#T'" + msgstr "pas de patron de classe nommé «%#T» in «%#T»" + + #: cp/decl.c:5758 cp/decl.c:5788 + msgid "no type named `%#T' in `%#T'" + msgstr "pas de type nommé dans «%#T» dans «%#T»" + + #: cp/decl.c:6011 + msgid "lookup of `%D' finds `%#D'" + msgstr "recherche de « %D » a repéré «%#D»" + + #: cp/decl.c:6013 + msgid " instead of `%D' from dependent base class" + msgstr " au lieu de « %D » à partir d'un classe de base dépendante" + + #: cp/decl.c:6015 + msgid " (use `typename %T::%D' if that's what you meant)" + msgstr " (utiliser « typename %T::%D » si c'est ce que vous voulez dire)" + + #: cp/decl.c:6188 + msgid "lookup of `%D' in the scope of `%#T' (`%#D') does not match lookup in the current scope (`%#D')" + msgstr "recherche de « %D » dans la portée de «%#T» («%#D») ne concorde pas avec la recherche dans la portée courante («%#D»)" + + #: cp/decl.c:7033 + msgid "an anonymous union cannot have function members" + msgstr "un UNION anonyme ne peut avoir de fonction membre" + + #: cp/decl.c:7050 + msgid "member %#D' with constructor not allowed in anonymous aggregate" + msgstr "membre «%#D» avec constructeur n'est pas permis dans un aggrégat anonyme" + + #: cp/decl.c:7053 + msgid "member %#D' with destructor not allowed in anonymous aggregate" + msgstr "membre «%#D» avec destructeur n'est pas permis dans un aggrégat anonyme" + + #: cp/decl.c:7056 + msgid "member %#D' with copy assignment operator not allowed in anonymous aggregate" + msgstr "membre «%#D» avec opérateur d'affectation par copie n'est pas permis dans un aggrégat anonyme" + + #: cp/decl.c:7094 + msgid "redeclaration of C++ built-in type `%T'" + msgstr "redéclaration du type interne C++ « %T »" + + #: cp/decl.c:7129 + msgid "multiple types in one declaration" + msgstr "types multiples dans une déclaration" + + #: cp/decl.c:7132 + msgid "declaration does not declare anything" + msgstr "déclaration ne déclare rien du tout!" + + #: cp/decl.c:7156 + msgid "missing type-name in typedef-declaration" + msgstr "nom de type manquant dans la déclaration typedef" + + #: cp/decl.c:7163 + msgid "ISO C++ prohibits anonymous structs" + msgstr "ISO C++ interdit les structs anonymes" + + #: cp/decl.c:7170 + msgid "`%D' can only be specified for functions" + msgstr "« %D » ne peut seulement être spécifier pour les fonctions" + + #: cp/decl.c:7172 + msgid "`%D' can only be specified inside a class" + msgstr "« %D » peut seulement être spécifié à l'intérieur d'une classe" + + #: cp/decl.c:7174 + msgid "`%D' can only be specified for constructors" + msgstr "« %D » ne peut seulement être spécifié pour les constructeurs" + + #: cp/decl.c:7177 + msgid "`%D' can only be specified for objects and functions" + msgstr "« %D » ne peut seulement être spécifié pour les objets et les fonctions" + + #: cp/decl.c:7326 + msgid "typedef `%D' is initialized" + msgstr "typedef « %D » est initialisé" + + #: cp/decl.c:7332 + msgid "function `%#D' is initialized like a variable" + msgstr "fonction « %D » est initialisée comme une variable" + + #: cp/decl.c:7344 + msgid "declaration of `%#D' has `extern' and is initialized" + msgstr "déclaration de «%#D» est externe et initialisé" + + #: cp/decl.c:7378 + msgid "`%#D' is not a static member of `%#T'" + msgstr "«%#D» n'est pas un membre statique de «%#T»" + + #: cp/decl.c:7383 + msgid "ISO C++ does not permit `%T::%D' to be defined as `%T::%D'" + msgstr "ISO C++ ne permet pas «%T::%D» d'être défini comme «%T::%D»" + + #: cp/decl.c:7394 + msgid "duplicate initialization of %D" + msgstr "initialisation en double de %D" + + #: cp/decl.c:7423 + msgid "declaration of `%#D' outside of class is not definition" + msgstr "déclaraion de «%#D» en dehors de la classe n'est pas une définition" + + #: cp/decl.c:7471 + msgid "variable `%#D' has initializer but incomplete type" + msgstr "variable «%#D» a un initialiseur mais un type incomplet" + + #: cp/decl.c:7479 cp/decl.c:7830 + msgid "elements of array `%#D' have incomplete type" + msgstr "éléments du tableau « %D » a un type incomplet" + + #: cp/decl.c:7495 + msgid "aggregate `%#D' has incomplete type and cannot be defined" + msgstr "aggrégat «%#D» a un type incomplet et ne peut être défini" + + #: cp/decl.c:7534 + msgid "`%D' declared as reference but not initialized" + msgstr "« %D » déclaré comme référence mais n'est pas initialisé" + + #: cp/decl.c:7543 + msgid "ISO C++ forbids use of initializer list to initialize reference `%D'" + msgstr "ISO C++ interdit l'usage de liste d'initialiseur pour initialiser la référence « %D »" + + #: cp/decl.c:7576 + msgid "cannot initialize `%T' from `%T'" + msgstr "ne peut initialiser « %T » à partir de « %T »" + + #: cp/decl.c:7637 + msgid "initializer fails to determine size of `%D'" + msgstr "initialiseur a échoué lors de la détermination de la taille de « %D »" + + #: cp/decl.c:7642 + msgid "array size missing in `%D'" + msgstr "taille du tableau manquant dans « %D »" + + #: cp/decl.c:7654 + msgid "zero-size array `%D'" + msgstr "tableau de taille zéro « %D »" + + #. An automatic variable with an incomplete type: that is an error. + #. Don't talk about array types here, since we took care of that + #. message in grokdeclarator. + #: cp/decl.c:7687 + msgid "storage size of `%D' isn't known" + msgstr "taille de stockage de « %D » n'est pas connue" + + #: cp/decl.c:7709 + msgid "storage size of `%D' isn't constant" + msgstr "taille de stockage de « %D » n'est pas une constante" + + #: cp/decl.c:7760 + msgid "sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)" + msgstr "désolé: sémantique de fonction en ligne de données statiques «%#D» est erronée (vous obtiendrez de multiples copies)" + + #: cp/decl.c:7761 + msgid " you can work around this by removing the initializer" + msgstr " vous pouvez contourner cela en enlevant l'initialiseur" + + #: cp/decl.c:7789 + msgid "uninitialized const `%D'" + msgstr "constante « %D » non initialisée" + + #: cp/decl.c:7824 + msgid "variable-sized object `%D' may not be initialized" + msgstr "objet de taille variable « %D » peut ne pas être initialisé" + + #: cp/decl.c:7835 cp/typeck2.c:201 + msgid "`%D' has incomplete type" + msgstr "« %D » a un type incomplet" + + #: cp/decl.c:7867 + msgid "`%D' must be initialized by constructor, not by `{...}'" + msgstr "« %D » doit être initialisé par un constructeur, non pas par « {...} »" + + #: cp/decl.c:7897 + msgid "structure `%D' with uninitialized const members" + msgstr "structure « %D » avec constantes non initialisées de membres" + + #: cp/decl.c:7899 + msgid "structure `%D' with uninitialized reference members" + msgstr "structure « %D » avec références non initialisées de membres" + + #: cp/decl.c:8166 + msgid "assignment (not initialization) in declaration" + msgstr "affectation (non pas l'initialisation) dans la déclaration" + + #: cp/decl.c:8178 + msgid "cannot initialize `%D' to namespace `%D'" + msgstr "ne peut initialiser « %D » à l'espace de noms « %D »" + + #: cp/decl.c:8235 + msgid "shadowing previous type declaration of `%#D'" + msgstr "fait ombrage à la déclaration précédente de «%#D»" + + #: cp/decl.c:8631 + msgid "multiple initializations given for `%D'" + msgstr "multiples initialisations données pour « %D »" + + #: cp/decl.c:8731 + msgid "invalid catch parameter" + msgstr "paramètre d'interception invalide" + + #: cp/decl.c:8849 + msgid "destructor for alien class `%T' cannot be a member" + msgstr "destructeur pour la classe étrangère « %T » ne peut être un membre" + + #: cp/decl.c:8852 + msgid "constructor for alien class `%T' cannot be a member" + msgstr "constructeur pour la classe étrangère « %T » ne peut être un membre" + + #: cp/decl.c:8871 + msgid "`%D' declared as a `virtual' %s" + msgstr "« %D» déclaré comme « virtual » %s" + + #: cp/decl.c:8873 + msgid "`%D' declared as an `inline' %s" + msgstr "« %D» déclaré comme « inline » %s" + + #: cp/decl.c:8875 + msgid "`const' and `volatile' function specifiers on `%D' invalid in %s declaration" + msgstr "spécificateurs de fonction « const» et «volatile» invalide pour «%D » dans la déclaration %s" + + #: cp/decl.c:8878 + msgid "`%D' declared as a friend" + msgstr "« %D » déclaré comme un ami" + + #: cp/decl.c:8884 + msgid "`%D' declared with an exception specification" + msgstr "« %D » déclaré avec une exception de spécification" + + #: cp/decl.c:8959 + msgid "cannot declare `::main' to be a template" + msgstr "ne peut déclarer « ::main » comme étant un patron" + + #: cp/decl.c:8961 + msgid "cannot declare `::main' to be inline" + msgstr "ne peut déclarer «::main» à être en ligne" + + #: cp/decl.c:8963 + msgid "cannot declare `::main' to be static" + msgstr "ne peut déclarer « ::main » comme étant static" + + #: cp/decl.c:8966 + msgid "`main' must return `int'" + msgstr "« main» doit retourner « int »" + + #: cp/decl.c:8994 + msgid "non-local function `%#D' uses anonymous type" + msgstr "fonction non locale «%#D» utilise un type anonyme" + + #: cp/decl.c:8997 + msgid "`%#D' does not refer to the unqualified type, so it is not used for linkage" + msgstr "«%#D» ne réfère pas à un type non qualifié, aussi il n'est pas utilisé pour la liaison" + + #: cp/decl.c:9003 + msgid "non-local function `%#D' uses local type `%T'" + msgstr "fonction non locale «%#D» utilise un type local « %T »" + + #: cp/decl.c:9026 + msgid "%smember function `%D' cannot have `%T' method qualifier" + msgstr "%smembre de fonction « %D » ne peut avoir « %T » comme qualificateur de méthode" + + #: cp/decl.c:9050 + msgid "defining explicit specialization `%D' in friend declaration" + msgstr "définition explicite de spécialisation « %D » dans lka déclaration ami" + + #. Something like `template friend void f()'. + #: cp/decl.c:9060 + msgid "invalid use of template-id `%D' in declaration of primary template" + msgstr "utilisation invalide du template-id « %D » dans la déclaration du patron primaire" + + #: cp/decl.c:9088 + msgid "default arguments are not allowed in declaration of friend template specialization `%D'" + msgstr "arguments par défaut ne sont pas permis dans la déclaration amie de la spécialisation du patron « %D »" + + #: cp/decl.c:9095 + msgid "`inline' is not allowed in declaration of friend template specialization `%D'" + msgstr "« inline» n'estpas permis dans la déclaration amie de la spécialisation du patron «%D »" + + #: cp/decl.c:9157 + msgid "definition of implicitly-declared `%D'" + msgstr "définition implicitement déclarée « %D »" + + #: cp/decl.c:9169 cp/decl2.c:1367 + msgid "no `%#D' member function declared in class `%T'" + msgstr "pas de membre de fontion «%#D» déclarée dans la classe « %T »" + + #: cp/decl.c:9288 + msgid "non-local variable `%#D' uses local type `%T'" + msgstr "variable non locale «%#D» utilise un type local « %T »" + + #: cp/decl.c:9378 + msgid "invalid in-class initialization of static data member of non-integral type `%T'" + msgstr "initialisation invalide dans la class de données de membre statiques d'un non entier de type « %T »" + + #: cp/decl.c:9387 + msgid "ISO C++ forbids in-class initialization of non-const static member `%D'" + msgstr "ISO C++ interdit l'initialisation intra-classe d'un membre statique non constant « %D »" + + #: cp/decl.c:9390 + msgid "ISO C++ forbids initialization of member constant `%D' of non-integral type `%T'" + msgstr "ISO C++ interdit l'initialisation d'une membre constant « %D » d'un type non entier « %T »" + + #: cp/decl.c:9440 + msgid "size of array `%D' has non-integer type" + msgstr "taille du tableau « %D » n'est pas de type entier" + + #: cp/decl.c:9442 + msgid "size of array has non-integer type" + msgstr "taille du tableau a type non entier" + + #: cp/decl.c:9462 + msgid "size of array `%D' is negative" + msgstr "taille du tableau « %D » est négative" + + #: cp/decl.c:9464 + msgid "size of array is negative" + msgstr "taille du tableau est négative" + + #: cp/decl.c:9473 + msgid "ISO C++ forbids zero-size array `%D'" + msgstr "ISO C++ interdit les tableaux de taille zéro « %D »" + + #: cp/decl.c:9475 + msgid "ISO C++ forbids zero-size array" + msgstr "ISO C++ interdit les tableaux de taille zéro" + + #: cp/decl.c:9482 + msgid "size of array `%D' is not an integral constant-expression" + msgstr "taille du tableau « %D » n'a pas une expression de constante de type entier" + + #: cp/decl.c:9485 + msgid "size of array is not an integral constant-expression" + msgstr "taille du tableau n'est pas une expression de constante de type entier" + + #: cp/decl.c:9503 + msgid "ISO C++ forbids variable-size array `%D'" + msgstr "ISO C++ interdit les tableaus de taille variable « %D »" + + #: cp/decl.c:9506 + msgid "ISO C++ forbids variable-size array" + msgstr "ISO C++ interdit le tableau de taille variable" + + #: cp/decl.c:9517 + msgid "overflow in array dimension" + msgstr "débordement dans les dimensions du tableau" + + #: cp/decl.c:9576 + msgid "declaration of `%D' as %s" + msgstr "déclaration de « %D » comme « %s »" + + #: cp/decl.c:9578 + #, c-format + msgid "creating %s" + msgstr "création de %s" + + #: cp/decl.c:9590 + msgid "declaration of `%D' as multidimensional array must have bounds for all dimensions except the first" + msgstr "déclaration de « %D » comme tableau multidimensionel doit avoir des bornes pour chaque dimension excepté pour la première" + + #: cp/decl.c:9593 + msgid "multidimensional array must have bounds for all dimensions except the first" + msgstr "tableau multidimensionel doit avoir des bornes pour chaque dimension excepté pour la première" + + #: cp/decl.c:9622 + msgid "return type specification for constructor invalid" + msgstr "spécification de type retourné pour un constructeur est invalide" + + #: cp/decl.c:9629 + msgid "return type specification for destructor invalid" + msgstr "spécification de type retourné pour un destructeur est invalide" + + #: cp/decl.c:9635 + msgid "operator `%T' declared to return `%T'" + msgstr "opérateur « %T » déclaré comme retournant « %T »" + + #: cp/decl.c:9637 + msgid "return type specified for `operator %T'" + msgstr "type spécifié retourné pour l'opérateur « %T »" + + #: cp/decl.c:9805 + msgid "destructors must be member functions" + msgstr "destructeur doit être membres de la fonction" + + #: cp/decl.c:9824 + msgid "destructor `%T' must match class name `%T'" + msgstr "destructeur « %T » doit concorder avec le nom de la classe « %T »" + + #: cp/decl.c:9874 + msgid "invalid declarator" + msgstr "déclarateur invalide" + + #: cp/decl.c:9927 + msgid "declarator-id missing; using reserved word `%D'" + msgstr "declarator-id manquant; utilisation du mot réservé « %D »" + + #: cp/decl.c:9984 + msgid "type `%T' is not derived from type `%T'" + msgstr "type « %T » n'est pas dérivé du type « %T »" + + #. Parse error puts this typespec where + #. a declarator should go. + #: cp/decl.c:10030 + msgid "`%T' specified as declarator-id" + msgstr "« %T » spécifié comme declarator-id" + + #: cp/decl.c:10032 + msgid " perhaps you want `%T' for a constructor" + msgstr " peut-être que vous voulez « %T » comme constructeur" + + #: cp/decl.c:10046 + msgid "`%D' as declarator" + msgstr "« %D » comme déclarateur" + + #: cp/decl.c:10061 + msgid "declaration of `%D' as non-function" + msgstr "déclaration de « %D » comme non-fonction" + + #: cp/decl.c:10138 + msgid "`bool' is now a keyword" + msgstr "« bool » est maintenant un mot clé" + + #: cp/decl.c:10140 + msgid "extraneous `%T' ignored" + msgstr "« %T » surperflu ignoré" + + #: cp/decl.c:10156 cp/decl.c:10189 + msgid "multiple declarations `%T' and `%T'" + msgstr "multiples déclarations « %T » et « %T »" + + #: cp/decl.c:10169 + msgid "ISO C++ does not support `long long'" + msgstr "ISO C++ ne supporte pas « long long »" + + #: cp/decl.c:10262 cp/decl.c:10265 + #, c-format + msgid "ISO C++ forbids declaration of `%s' with no type" + msgstr "ISO C++ interdit la déclaration de « %s » sans type" + + #. The implicit typename extension is deprecated and will be + #. removed. Warn about its use now. + #: cp/decl.c:10275 + msgid "`%T' is implicitly a typename" + msgstr "« %T » est implicitement un typename" + + #: cp/decl.c:10311 + #, c-format + msgid "short, signed or unsigned invalid for `%s'" + msgstr "short, signed ou unsigned est invalide pour « %s »" + + #: cp/decl.c:10316 + #, c-format + msgid "long and short specified together for `%s'" + msgstr "long et short spécifiés ensembles pour « %s »" + + #: cp/decl.c:10327 + #, c-format + msgid "signed and unsigned given together for `%s'" + msgstr "signed et unsigned donnés ensembles pour « %s »" + + #: cp/decl.c:10436 + msgid "qualifiers are not allowed on declaration of `operator %T'" + msgstr "qualificateurs ne sont pas permis dans la déclaration de « operator %T »" + + #: cp/decl.c:10458 + msgid "member `%D' cannot be declared both virtual and static" + msgstr "membre « %D » ne peut être déclaré virtuel et statique" + + #: cp/decl.c:10467 + msgid "`%T::%D' is not a valid declarator" + msgstr "«%T::%D» n'est pas un déclarateur valide" + + #: cp/decl.c:10478 + msgid "storage class specifiers invalid in parameter declarations" + msgstr "spécificateurs de classe de stockage invalides dans la déclaration des paramètres" + + #: cp/decl.c:10482 + msgid "typedef declaration invalid in parameter declaration" + msgstr "déclaration typedef invalide dans le paramètre de la déclaration" + + #: cp/decl.c:10495 + msgid "virtual outside class declaration" + msgstr "virtuel en dehors de la déclaration de classe" + + #: cp/decl.c:10549 + #, c-format + msgid "storage class specified for %s `%s'" + msgstr "classe de stockage spécifiée pour %s « %s »" + + #: cp/decl.c:10587 + msgid "storage class specifiers invalid in friend function declarations" + msgstr "spécificateurs de classe de stockage invalide dans les déclarations de fonction amie" + + #: cp/decl.c:10691 + msgid "size of member `%D' is not constant" + msgstr "taille du membre « %D » n'est pas constant" + + #: cp/decl.c:10770 + msgid "destructor cannot be static member function" + msgstr "destructeur ne peut être un membre statique d'une fonction" + + #: cp/decl.c:10773 + #, c-format + msgid "destructors may not be `%s'" + msgstr "destructeurs ne peut être « %s »" + + #: cp/decl.c:10794 + msgid "constructor cannot be static member function" + msgstr "constructeur ne peut être un membre statique d'une fonction" + + #: cp/decl.c:10797 + msgid "constructors cannot be declared virtual" + msgstr "constructeurs ne peut être déclarés virtuels" + + #: cp/decl.c:10802 + #, c-format + msgid "constructors may not be `%s'" + msgstr "constructeurs ne peuvent pas être « %s »" + + #: cp/decl.c:10812 + msgid "return value type specifier for constructor ignored" + msgstr "type de valeur retournée d'un spécificateur pour un constructeur est ignoré" + + #: cp/decl.c:10831 + #, c-format + msgid "can't initialize friend function `%s'" + msgstr "ne peut initialiser la fonction amie « %s »" + + #. Cannot be both friend and virtual. + #: cp/decl.c:10835 + msgid "virtual functions cannot be friends" + msgstr "fonctions virtuelles ne peuvent être amies" + + #: cp/decl.c:10840 + msgid "friend declaration not in class definition" + msgstr "déclaration amie n'est pas dans la définition de classe" + + #: cp/decl.c:10842 + #, c-format + msgid "can't define friend function `%s' in a local class definition" + msgstr "ne peut définir une fonction amie « %s » dans une définition locale de classe" + + #: cp/decl.c:10866 + msgid "destructors may not have parameters" + msgstr "destructeurs ne peuvent pas avoir de paramètre" + + #: cp/decl.c:10896 + #, c-format + msgid "cannot declare %s to references" + msgstr "ne peut déclarer %s comme références" + + #: cp/decl.c:10907 + msgid "cannot declare pointer to `%#T' member" + msgstr "ne peut déclarer un pointeur vers le membre «%#T»" + + #: cp/decl.c:10922 + msgid "invalid type: `void &'" + msgstr "type invalide: « void & »" + + #: cp/decl.c:11084 + msgid "extra qualification `%T::' on member `%s' ignored" + msgstr "qualification additionnelle «%T::» sur le membre « %s » est ignorée" + + #: cp/decl.c:11094 + msgid "cannot declare member function `%T::%s' within `%T'" + msgstr "ne peut déclarer le membre de fonction «%T::%s» à l'intérieur de « %T »" + + #: cp/decl.c:11109 + msgid "cannot declare member `%T::%s' within `%T'" + msgstr "ne peut déclarer le membre «%T::%s» à l'intérieur de « %T »" + + #. [dcl.fct.spec] The explicit specifier shall only be used in + #. declarations of constructors within a class definition. + #: cp/decl.c:11189 + msgid "only declarations of constructors can be `explicit'" + msgstr "seuls les déclarations de constructeurs peuvent être « explicit »" + + #: cp/decl.c:11197 + #, c-format + msgid "non-member `%s' cannot be declared `mutable'" + msgstr "le non membre « %s » ne peut être déclaré « mutable »" + + #: cp/decl.c:11202 + #, c-format + msgid "non-object member `%s' cannot be declared `mutable'" + msgstr "un membre non objet « %s » ne peut être déclaré « mutable »" + + #: cp/decl.c:11208 + #, c-format + msgid "function `%s' cannot be declared `mutable'" + msgstr "fonction « %s » ne peut être déclarée « mutable »" + + #: cp/decl.c:11213 + #, c-format + msgid "static `%s' cannot be declared `mutable'" + msgstr "static « %s » ne peut être déclaré « mutable »" + + #: cp/decl.c:11218 + #, c-format + msgid "const `%s' cannot be declared `mutable'" + msgstr "const « %s » ne peut être déclaré « mutable »" + + #: cp/decl.c:11231 + msgid "template-id `%D' used as a declarator" + msgstr "identificateur de patron « %D » utilisé comme déclarateur" + + #: cp/decl.c:11252 + msgid "ISO C++ forbids nested type `%D' with same name as enclosing class" + msgstr "ISO C++ interdit le type imbriqué « %D » avec le même nom que la classe de fermeture" + + #: cp/decl.c:11299 + msgid "typedef name may not be class-qualified" + msgstr "nom du typedef peut ne pas être qualifié pour la classe" + + #: cp/decl.c:11307 + msgid "invalid type qualifier for non-member function type" + msgstr "qualificateur de type invalide pour un type de fonction non membre" + + #: cp/decl.c:11323 + msgid "typedef declaration includes an initializer" + msgstr "déclaration typedef inclut un initialiseur" + + #: cp/decl.c:11373 + msgid "type qualifiers specified for friend class declaration" + msgstr "qulificateurs de types spécifiés pour la déclaration d'une classe amie" + + #: cp/decl.c:11378 + msgid "`inline' specified for friend class declaration" + msgstr "« inline » spécifié pour la déclaration d'une classe amie" + + #: cp/decl.c:11388 + msgid "template parameters cannot be friends" + msgstr "paramètres du patron ne peuvent pas être amis" + + #: cp/decl.c:11390 + msgid "friend declaration requires class-key, i.e. `friend class %T::%T'" + msgstr "déclaration ami requiert une clé de classe, i.e. « friend class %T::%T'" + + #: cp/decl.c:11395 + msgid "friend declaration requires class-key, i.e. `friend %#T'" + msgstr "déclaration amie requiert une clé de classes, i.e. « friend %#T'" + + #: cp/decl.c:11409 + msgid "trying to make class `%T' a friend of global scope" + msgstr "tentative de rendre la classe « %T » un ami de la portée globale" + + #: cp/decl.c:11420 + msgid "invalid qualifiers on non-member function type" + msgstr "qualificteurs invalide pour un type de fonction non membre" + + #: cp/decl.c:11439 + msgid "abstract declarator `%T' used as declaration" + msgstr "déclaration abstrait « %T » utilisé dans la déclaration" + + #: cp/decl.c:11451 + msgid "unnamed variable or field declared void" + msgstr "variable non nommée ou champ déclaré void" + + #: cp/decl.c:11460 + msgid "variable or field declared void" + msgstr "variable ou champ déclaré void" + + #: cp/decl.c:11470 + msgid "cannot use `::' in parameter declaration" + msgstr "ne peut utiliser «::» dans le paramètre d'un déclaration" + + #. Something like struct S { int N::j; }; + #: cp/decl.c:11516 + msgid "invalid use of `::'" + msgstr "utilisation invalide de « :: »" + + #: cp/decl.c:11528 + msgid "function `%D' cannot be declared friend" + msgstr "fonction « %D » ne peut être déclarée amie" + + #: cp/decl.c:11540 + msgid "can't make `%D' into a method -- not in a class" + msgstr "ne peut rendre « %D » dans la méthode -- n'est pas dans la classe" + + #: cp/decl.c:11549 + msgid "function `%D' declared virtual inside a union" + msgstr "fonction « %D » déclaré comme virtuelle à l'intérieur d'un agrégat" + + #: cp/decl.c:11561 + msgid "`%D' cannot be declared virtual, since it is always static" + msgstr "« %D » ne peut être déclaré virtuel, alors qu'il est toujours statique" + + #: cp/decl.c:11634 + msgid "field `%D' has incomplete type" + msgstr "champ « %D » a un type incomplet" + + #: cp/decl.c:11636 + msgid "name `%T' has incomplete type" + msgstr "nom « %T » a un type incomplet" + + #: cp/decl.c:11645 + msgid " in instantiation of template `%T'" + msgstr " dans l'instanciation du patron « %T »" + + #: cp/decl.c:11655 + #, c-format + msgid "`%s' is neither function nor member function; cannot be declared friend" + msgstr "« %s » n'est ni une fonction ni le membre d'une fonction; ne peut être déclaré ami" + + #: cp/decl.c:11666 + msgid "member functions are implicitly friends of their class" + msgstr "membres de fonctions sont implicitement amis de leur classe" + + #. An attempt is being made to initialize a non-static + #. member. But, from [class.mem]: + #. + #. 4 A member-declarator can contain a + #. constant-initializer only if it declares a static + #. member (_class.static_) of integral or enumeration + #. type, see _class.static.data_. + #. + #. This used to be relatively common practice, but + #. the rest of the compiler does not correctly + #. handle the initialization unless the member is + #. static so we make it static below. + #: cp/decl.c:11713 + msgid "ISO C++ forbids initialization of member `%D'" + msgstr "ISO C++ interdit l'initialisation d'un membre « %D »" + + #: cp/decl.c:11715 + msgid "making `%D' static" + msgstr "rendant « %D » statique" + + #: cp/decl.c:11739 + msgid "ISO C++ forbids static data member `%D' with same name as enclosing class" + msgstr "ISO C++ interdit les données de mmebres statiques « %D » avec le même nom comme classe de fermeture" + + #: cp/decl.c:11780 + #, c-format + msgid "storage class `auto' invalid for function `%s'" + msgstr "classe de stockage « auto» invalide pour une fonction « %s »" + + #: cp/decl.c:11782 + #, c-format + msgid "storage class `register' invalid for function `%s'" + msgstr "classe de stockage « register» invalide pour une fonction « %s »" + + #: cp/decl.c:11793 + #, c-format + msgid "storage class `static' invalid for function `%s' declared out of global scope" + msgstr "classe de stockage « static» invalide pour une fonction « %s » déclarée en dehors de la portée globale" + + #: cp/decl.c:11795 + #, c-format + msgid "storage class `inline' invalid for function `%s' declared out of global scope" + msgstr "classe de stockage « inline» invalide pour une fonction « %s » déclarée en dehors de la portée globale" + + #: cp/decl.c:11802 + #, c-format + msgid "virtual non-class function `%s'" + msgstr "fonction virtuelle d'une non classe « %s »" + + #: cp/decl.c:11831 + msgid "cannot declare member function `%D' to have static linkage" + msgstr "ne peut déclarer la fonction membre « %D » comme ayant un lien statique" + + #. FIXME need arm citation + #: cp/decl.c:11837 + msgid "cannot declare static function inside another function" + msgstr "ne peut déclarer une fonction statique à l'intérieur d'une autre fonction" + + #: cp/decl.c:11865 + msgid "`static' may not be used when defining (as opposed to declaring) a static data member" + msgstr "« static » ne peut pas être utilisé lors de la définition (contrairement à la déclaration) de données de membres statiques" + + #: cp/decl.c:11871 + msgid "static member `%D' declared `register'" + msgstr "mambre statique « %D» déclaré «register »" + + #: cp/decl.c:11876 + msgid "cannot explicitly declare member `%#D' to have extern linkage" + msgstr "ne peut explicitement déclarer le membre «%#D» comme ayant une liaison externe" + + #: cp/decl.c:12048 + msgid "default argument for `%#D' has type `%T'" + msgstr "argument par défaut pour «%#D» à un type « %T »" + + #: cp/decl.c:12051 + msgid "default argument for parameter of type `%T' has type `%T'" + msgstr "argument par défaut pour le paramètre de type « %T » a le type « %T »" + + #: cp/decl.c:12068 + msgid "default argument `%E' uses local variable `%D'" + msgstr "argument par défaut « %E » utiliser une variable locale « %D »" + + #: cp/decl.c:12113 + #, c-format + msgid "invalid string constant `%E'" + msgstr "constante chaîne invalide « %E »" + + #: cp/decl.c:12115 + msgid "invalid integer constant in parameter list, did you forget to give parameter name?" + msgstr "constante entière invalide dans la liste de paramètre, avez-vous oublier de donner un nom de paramètre?" + + #: cp/decl.c:12153 + msgid "parameter `%D' invalidly declared method type" + msgstr "paramètre « %D » incorrectement validé comme type de méthode" + + #: cp/decl.c:12159 + msgid "parameter `%D' invalidly declared offset type" + msgstr "paramètre « %D » incorrectement validé comme type de décalage" + + #: cp/decl.c:12183 + msgid "parameter `%D' includes %s to array of unknown bound `%T'" + msgstr "paramètre « %D » inclut %s au tableau de bornes inconnues « %T »" + + #. [class.copy] + #. + #. A declaration of a constructor for a class X is ill-formed if + #. its first parameter is of type (optionally cv-qualified) X + #. and either there are no other parameters or else all other + #. parameters have default arguments. + #. + #. We *don't* complain about member template instantiations that + #. have this form, though; they can occur as we try to decide + #. what constructor to use during overload resolution. Since + #. overload resolution will never prefer such a constructor to + #. the non-template copy constructor (which is either explicitly + #. or implicitly defined), there's no need to worry about their + #. existence. Theoretically, they should never even be + #. instantiated, but that's hard to forestall. + #: cp/decl.c:12350 + msgid "invalid constructor; you probably meant `%T (const %T&)'" + msgstr "constructeur invalide; vous vouliez probablement dire «%T (const %T&)»" + + #: cp/decl.c:12501 + msgid "`%D' must be a nonstatic member function" + msgstr "« %D » doit être une fonction membre non statique" + + #: cp/decl.c:12507 + msgid "`%D' must be either a non-static member function or a non-member function" + msgstr "« %D » doit être soit un membre non statique de fonction ou une fonction non membre" + + #: cp/decl.c:12524 + msgid "`%D' must have an argument of class or enumerated type" + msgstr "« %D » doit avoir un argument de classe ou de type énuméré" + + #: cp/decl.c:12556 + #, c-format + msgid "conversion to %s%s will never use a type conversion operator" + msgstr "conversion de %s%s ne sera jamais utilisé dans un type d'opérateur de conversion" + + #. 13.4.0.3 + #: cp/decl.c:12563 + msgid "ISO C++ prohibits overloading operator ?:" + msgstr "ISO C++ interdit la surcharge d'opérateur ?:" + + #: cp/decl.c:12613 + msgid "postfix `%D' must take `int' as its argument" + msgstr "postfixe « %D» doit prendre « int » comme argument" + + #: cp/decl.c:12617 + msgid "postfix `%D' must take `int' as its second argument" + msgstr "postfixe « %D» doit prndre « int » pour son second argument" + + #: cp/decl.c:12624 + msgid "`%D' must take either zero or one argument" + msgstr "« %D » doit prendre seulement zéro ou un autre argument" + + #: cp/decl.c:12626 + msgid "`%D' must take either one or two arguments" + msgstr "« %D » doit prendre seulement un OU deux arguments" + + #: cp/decl.c:12647 + msgid "prefix `%D' should return `%T'" + msgstr "préfixe « %D » devrait retourner « %T »" + + #: cp/decl.c:12653 + msgid "postfix `%D' should return `%T'" + msgstr "postfixe « %D » devrait retourner « %T »" + + #: cp/decl.c:12662 + msgid "`%D' must take `void'" + msgstr "« %D» doit prendre « void »" + + #: cp/decl.c:12664 cp/decl.c:12672 + msgid "`%D' must take exactly one argument" + msgstr "« %D » doit prendre exactement un argument" + + #: cp/decl.c:12674 + msgid "`%D' must take exactly two arguments" + msgstr "« %D » doit prendre exactemenr deux arguments" + + #: cp/decl.c:12682 + msgid "user-defined `%D' always evaluates both arguments" + msgstr "« %D » défini par l'usager évalue toujours les 2 arguments" + + #: cp/decl.c:12694 + msgid "`%D' should return by value" + msgstr "« %D » devrait retourner par valeur" + + #: cp/decl.c:12706 cp/decl.c:12709 + msgid "`%D' cannot have default arguments" + msgstr "« %D » ne peut avoir d'arguments par défaut" + + #: cp/decl.c:12800 + msgid "`%s %T' declares a new type at namespace scope" + msgstr "«%s %R» déclare un nouveau type dans l'étendue de l'espace de noms" + + #: cp/decl.c:12803 + msgid " names from dependent base classes are not visible to unqualified name lookup - to refer to the inherited type, say `%s %T::%T'" + msgstr " noms des classes de base dépendantes ne sont pas visibles à la recherche de nom non qualifié - pour référer à type par héritage, disons «%s %T::%T»" + + #: cp/decl.c:12841 + msgid "using typedef-name `%D' after `%s'" + msgstr "utilisation d'un nom de typedef « %D » après « %s »" + + #: cp/decl.c:12846 + msgid "using template type parameter `%T' after `%s'" + msgstr "utilisation de type de patron de paramètre « %T » après « %s »" + + #: cp/decl.c:12926 + msgid "use of enum `%#D' without previous declaration" + msgstr "utilisation de enum «%#D» sans déclaration précédente" + + #: cp/decl.c:13024 + msgid "derived union `%T' invalid" + msgstr "union dérivée « %T » invalide" + + #: cp/decl.c:13068 + msgid "base type `%T' fails to be a struct or class type" + msgstr "type de base « %T » a échoué pour devenir un type de classe ou un type construit" + + #: cp/decl.c:13078 + msgid "base class `%T' has incomplete type" + msgstr "classe de base « %T » a un type incomplet" + + #: cp/decl.c:13086 + msgid "recursive type `%T' undefined" + msgstr "type récursif « %T » non défini" + + #: cp/decl.c:13088 + msgid "duplicate base type `%T' invalid" + msgstr "duplication du type de base « %T » invalide" + + #: cp/decl.c:13199 + msgid "multiple definition of `%#T'" + msgstr "définition multiple de «%#T»" + + #: cp/decl.c:13200 + msgid "previous definition here" + msgstr "définition précédente ici" + + #: cp/decl.c:13371 + msgid "enumerator value for `%D' not integer constant" + msgstr "valeur de l'énumérateur pour « %D » n'est pas une constante entière" + + #: cp/decl.c:13391 + msgid "overflow in enumeration values at `%D'" + msgstr "débordement dans les valeurs de l'énumération à « %D »" + + #: cp/decl.c:13477 + msgid "return type `%#T' is incomplete" + msgstr "type retourné «%#T» est incomplet" + + #: cp/decl.c:13593 + msgid "semicolon missing after declaration of `%#T'" + msgstr "point-virgule manquant après la déclaration %#T" + + #: cp/decl.c:13614 + msgid "return type for `main' changed to `int'" + msgstr "type retourné pour « main » est changé pour «int »" + + #: cp/decl.c:13645 + msgid "`%D' implicitly declared before its definition" + msgstr "« %D » implicitement déclaré avant sa définition" + + #: cp/decl.c:13667 cp/typeck.c:6530 + msgid "`operator=' should return a reference to `*this'" + msgstr "« operator= » devrait retourner une référence à «*ceci »" + + #: cp/decl.c:13931 + msgid "parameter `%D' declared void" + msgstr "paramètre « %D » déclaré «void »" + + #: cp/decl.c:14408 + msgid "`%D' is already defined in class `%T'" + msgstr "« %D » est déjà défini dans la classe « %T »" + + #: cp/decl.c:14625 + msgid "static member function `%#D' declared with type qualifiers" + msgstr "membre de fonction statique «%#D» déclaré avec des qualificateurs de tyep" + + #: cp/decl2.c:529 + #, c-format + msgid "-f%s is no longer supported" + msgstr "-f%s n'est plus supportée" + + #: cp/decl2.c:535 + msgid "-fhandle-exceptions has been renamed to -fexceptions (and is now on by default)" + msgstr "-fhandle-exceptions a été renommé -fexceptions (et est utilisé par défaut maintenant)" + + #: cp/decl2.c:561 + msgid "-fname-mangling-version is no longer supported" + msgstr "-fname-mangling-version n'est plus supportée" + + #: cp/decl2.c:624 + msgid "-Wno-strict-prototypes is not supported in C++" + msgstr "-Wno-strict-prototypes n'est pas supportée en C++" + + #: cp/decl2.c:761 + #, c-format + msgid "duplicate type qualifiers in %s declaration" + msgstr "qualificateurs de types dupliqués dans déclaration %s" + + #: cp/decl2.c:800 + msgid "template `%#D' instantiated in file without #pragma interface" + msgstr "patron «%#D» instancié dans le fichier sans interface #pragma" + + #: cp/decl2.c:806 + msgid "template `%#D' defined in file without #pragma interface" + msgstr "patron «%#D» défini dans le fichier sans interface #pragma" + + #: cp/decl2.c:963 + msgid "name missing for member function" + msgstr "nom manquant pour le membre d'une fonction" + + #. Something has gone very wrong. Assume we are mistakenly reducing + #. an expression instead of a declaration. + #: cp/decl2.c:1026 + msgid "parser may be lost: is there a '{' missing somewhere?" + msgstr "analyseur syntaxique est perdu: y-a-t-il un «{» manquant quelque part?" + + #: cp/decl2.c:1057 cp/decl2.c:1071 + msgid "ambiguous conversion for array subscript" + msgstr "comversion ambigue pour un sous-tableau" + + #: cp/decl2.c:1065 + msgid "invalid types `%T[%T]' for array subscript" + msgstr "types invalides «%T[%T]» pour un sous-script de tableau" + + #: cp/decl2.c:1113 + msgid "type `%#T' argument given to `delete', expected pointer" + msgstr "type « %#T» de l'argument donné pour « delete », attendait un pointeur" + + #: cp/decl2.c:1121 + msgid "anachronistic use of array size in vector delete" + msgstr "utilisation anachronique de la taille d'un tableau dans un vecteur delete" + + #: cp/decl2.c:1131 + msgid "cannot delete a function. Only pointer-to-objects are valid arguments to `delete'" + msgstr "ne peut détruire une fonction. Seuls les pointeurs-d'objets sont des arguments valable pour destruction" + + #: cp/decl2.c:1138 + msgid "deleting `%T' is undefined" + msgstr "destruction de « %T » est indéfinie" + + #: cp/decl2.c:1146 + msgid "deleting array `%#D'" + msgstr "destruction du tableau «%#D'" + + #. 14.5.2.2 [temp.mem] + #. + #. A local class shall not have member templates. + #: cp/decl2.c:1180 + msgid "invalid declaration of member template `%#D' in local class" + msgstr "déclaration invalide du patron de membre «%#D» dans la classe locale" + + #: cp/decl2.c:1189 + msgid "invalid use of `virtual' in template declaration of `%#D'" + msgstr "utilisation invalide de « virtual» dans la déclaration d'un patron de «%#D »" + + #: cp/decl2.c:1199 cp/pt.c:2562 + msgid "template declaration of `%#D'" + msgstr "déclaration du patron de «%#D»" + + #: cp/decl2.c:1249 + msgid "Java method '%D' has non-Java return type `%T'" + msgstr "méthode Java « %D » a un type non Java retourné « %T »" + + #: cp/decl2.c:1258 + msgid "Java method '%D' has non-Java parameter type `%T'" + msgstr "méthode Java « %D » a un paramètre non Java de type « %T »" + + #: cp/decl2.c:1354 + msgid "prototype for `%#D' does not match any in class `%T'" + msgstr "prototype pour «%#D» ne concorde avec aucun dans la classe « %T »" + + #: cp/decl2.c:1356 + msgid "candidate%s: %+#D" + msgstr "candidat%s: %+#D" + + #: cp/decl2.c:1359 + msgid " %#D" + msgstr " %#D" + + #: cp/decl2.c:1411 + msgid "local class `%#T' shall not have static data member `%#D'" + msgstr "la classe locale «%#T» ne doit pas être un membre de données statiques de «%#D»" + + #: cp/decl2.c:1419 + msgid "initializer invalid for static member with constructor" + msgstr "initialiseur invalide pour un membre statique avec constructeur" + + #: cp/decl2.c:1422 + msgid "(an out of class initialization is required)" + msgstr "(une initialisation en dehors de la classe est requise)" + + #: cp/decl2.c:1481 + msgid "invalid data member initialization" + msgstr "initialisation de données membres invalide" + + #: cp/decl2.c:1484 + msgid "(use `=' to initialize static data members)" + msgstr "(utiliser «=» pour initialiser les données de membres)" + + #: cp/decl2.c:1524 + msgid "member `%D' conflicts with virtual function table field name" + msgstr "membre « %D » en conflit avec un nom de champ de table d'une fonction virtuelle" + + #: cp/decl2.c:1544 + msgid "`%D' is already defined in `%T'" + msgstr "« %D » est déjà défini dans « %T »" + + #: cp/decl2.c:1595 + msgid "field initializer is not constant" + msgstr "initialiseuur du champ n'est pas une constante" + + #: cp/decl2.c:1618 + msgid "`asm' specifiers are not permitted on non-static data members" + msgstr "spécificateurs « asm » ne sont pas permis pour des données de membres non statiques" + + #: cp/decl2.c:1670 + msgid "cannot declare `%D' to be a bit-field type" + msgstr "ne peut déclarer « %D » comme étant un type de champ de bits" + + #: cp/decl2.c:1680 + msgid "cannot declare bit-field `%D' with function type" + msgstr "ne peut déclarer un champ de bits « %D » avec un type de fonction" + + #: cp/decl2.c:1687 + msgid "`%D' is already defined in the class %T" + msgstr "« %D » est déjà défini dans la classe %T" + + #: cp/decl2.c:1694 + msgid "static member `%D' cannot be a bit-field" + msgstr "membre statique « %D » ne peut être un champ de bits" + + #: cp/decl2.c:1763 + msgid "initializer specified for non-member function `%D'" + msgstr "initialiseur spécifié pour une fonction non membre «%#D»" + + #: cp/decl2.c:1767 + msgid "invalid initializer for virtual method `%D'" + msgstr "initialiseur invalide pour une méthode virtuelle «%#D»" + + #: cp/decl2.c:1871 + msgid "anonymous struct not inside named type" + msgstr "struct anonyme n'est pas l'intérieur du type nommé" + + #: cp/decl2.c:1967 + msgid "namespace-scope anonymous aggregates must be static" + msgstr "aggrégats anonymes de champs d'espace nom doit être statique" + + #: cp/decl2.c:1977 + msgid "anonymous aggregate with no members" + msgstr "aggrégat anonyme sans aucun membre" + + #: cp/decl2.c:2044 + msgid "`operator new' must return type `%T'" + msgstr "« operator new » doit retourner un type «%T »" + + #: cp/decl2.c:2052 + msgid "`operator new' takes type `size_t' (`%T') as first parameter" + msgstr "« operator new » prend le type « size_t » (« %T ») comme premier paramètre" + + #: cp/decl2.c:2079 + msgid "`operator delete' must return type `%T'" + msgstr "« operator delete » doit retourner le type « %T »" + + #: cp/decl2.c:2087 + msgid "`operator delete' takes type `%T' as first parameter" + msgstr "« operator delete » prend le type «%T » comme premier paramètre" + + #. Overflow occurred. That means there are at least 4 billion + #. initialization functions. + #: cp/decl2.c:2828 + msgid "too many initialization functions required" + msgstr "trop d'initialisations de fonctions requises" + + #: cp/decl2.c:3639 + msgid "use of old-style cast" + msgstr "utilisation d'un vieux style de transtypage (cast)" + + #: cp/decl2.c:4220 + msgid "use of `%D' is ambiguous" + msgstr "utilisation de « %T » est ambiguë" + + #: cp/decl2.c:4221 + msgid " first declared as `%#D' here" + msgstr " d'abord déclaré comme «%#D» ici" + + #: cp/decl2.c:4224 + msgid " also declared as `%#D' here" + msgstr " aussi déclaré comme «%#D» ici" + + #: cp/decl2.c:4239 + msgid "`%D' denotes an ambiguous type" + msgstr "« %D » dénote un type ambigu" + + #: cp/decl2.c:4240 + msgid " first type here" + msgstr " premier type ici" + + #: cp/decl2.c:4241 + msgid " other type here" + msgstr " autre type ici" + + #: cp/decl2.c:4338 + msgid "declaration of `%D' not in a namespace surrounding `%D'" + msgstr "déclaration de « %D » n'est pas dans l'espace de noms entourant « %D »" + + #: cp/decl2.c:4372 + msgid "`%D' should have been declared inside `%D'" + msgstr "« %D » devrait avoir été déclaré à l'intérieur de « %D »" + + #: cp/decl2.c:4506 + msgid "`%D' is not a function," + msgstr "« %D » n'est pas une fonction" + + #: cp/decl2.c:4507 + msgid " conflict with `%D'" + msgstr " en conflit avec « %D »" + + #. The parser did not find it, so it's not there. + #: cp/decl2.c:4821 + msgid "unknown namespace `%D'" + msgstr "espace de nomes inconnu « %D »" + + #: cp/decl2.c:4855 cp/decl2.c:5125 + msgid "`%T' is not a namespace" + msgstr "« %T » n'est pas un espace de noms" + + #: cp/decl2.c:4857 + msgid "`%D' is not a namespace" + msgstr "« %D » n'est pas un espace de noms" + + #: cp/decl2.c:4866 + msgid "a using-declaration cannot specify a template-id. Try `using %D'" + msgstr "l'utilisation d'une déclaration ne peut spécifier un template-id. Essayer « using %D »" + + #: cp/decl2.c:4880 + msgid "namespace `%D' not allowed in using-declaration" + msgstr "espace de noms « %D » n'est pas permis dans l'utilisation d'une déclaration" + + #: cp/decl2.c:4909 + msgid "`%D' not declared" + msgstr "« %D » n'est pas déclaré" + + #: cp/decl2.c:4960 + msgid "`%D' is already declared in this scope" + msgstr "« %D » est déjà déclaré dans cette portée" + + #: cp/decl2.c:4987 + msgid "using declaration `%D' introduced ambiguous type `%T'" + msgstr "l'utlisation de la déclaration « %D » introduit un type ambigu « %T »" + + #: cp/decl2.c:5078 + msgid "using-declaration for non-member at class scope" + msgstr "l'utilisation de déclaration pour un non membre au niveau de la portée de la classe" + + #: cp/decl2.c:5084 + msgid "using-declaration for destructor" + msgstr "utilisation de déclaration pour un destructeur" + + #: cp/decl2.c:5090 + msgid "a using-declaration cannot specify a template-id. Try `using %T::%D'" + msgstr "l'utilisation de déclaration ne peut spécifier template-id. Essayer «using %T::%D'" + + #: cp/decl2.c:5119 + msgid "namespace `%T' undeclared" + msgstr "espace de noms « %T » n'est pas déclaré" + + #: cp/decl2.c:5148 + msgid "default argument missing for parameter %P of `%+#D'" + msgstr "argument par défaut manquant pour le paramètre %P de «%+#D»" + + #: cp/decl2.c:5238 + msgid "extra qualification `%T::' on member `%D' ignored" + msgstr "qualification additionnelle «%T::» sur le membre « %D » ignoré" + + #: cp/decl2.c:5242 + msgid "`%T' does not have a class or union named `%D'" + msgstr "« %T » n'a pas de classe ou d'union nommé « %D »" + + #: cp/decl2.c:5255 + msgid "`%T' is not a class or union type" + msgstr "« %T » n'est pas une classe ou un type d'union" + + #: cp/error.c:35 + #, c-format + msgid "`%s' not supported by %s" + msgstr "« %s » n'est pas supporté par %s" + + #: cp/error.c:577 + #, c-format + msgid "" + msgstr "" + + #: cp/error.c:814 + #, c-format + msgid "(static %s for %s)" + msgstr "(static %s pour %s)" + + #: cp/error.c:2438 + #, c-format + msgid "In %s `%s':" + msgstr "Dans %s « %s »:" + + #: cp/error.c:2493 + #, c-format + msgid "%s: In instantiation of `%s':\n" + msgstr "%s: dans l'instanciation de « %s »:\n" + + #: cp/error.c:2517 + #, c-format + msgid "%s:%d: instantiated from `%s'\n" + msgstr "%s:%d: instancié à partir de « %s »\n" + + #: cp/error.c:2522 + #, c-format + msgid "%s:%d: instantiated from here\n" + msgstr "%s:%d: instancié à partir d'ici\n" + + #. damn ICE suppression + #: cp/error.c:2675 + #, c-format + msgid "unexpected letter `%c' in locate_error\n" + msgstr "lettre inattendue « %c » dans locate_error\n" + + #. Can't throw a reference. + #: cp/except.c:245 + msgid "type `%T' is disallowed in Java `throw' or `catch'" + msgstr "type « %T» n'est pas permis en Java «throw» ou «catch »" + + #: cp/except.c:256 + msgid "call to Java `catch' or `throw' with `jthrowable' undefined" + msgstr "appel en Java de « catch» ou «throw» avec «jthrowable » undéfini" + + #. Thrown object must be a Throwable. + #: cp/except.c:263 + msgid "type `%T' is not derived from `java::lang::Throwable'" + msgstr "type « %T» n'est pas dérivé de «java::lang::Throwable »" + + #: cp/except.c:327 + msgid "mixing C++ and Java catches in a single translation unit" + msgstr "mélange des interceptions C++ et Java dans une unité simple de traduction " + + #: cp/except.c:558 + msgid "throwing NULL, which has integral, not pointer type" + msgstr "retounrnant NULL (par throw), lequel est entier, pas de type pointeur" + + #: cp/except.c:663 + msgid " in thrown expression" + msgstr " dans l'expression projetée" + + #: cp/except.c:775 + msgid "expression '%E' of abstract class type '%T' cannot be used in throw-expression" + msgstr "expression « %E » de la classe abstraite de type « %T » ne peut être utilisé dans une expression throw" + + #: cp/except.c:863 + msgid "exception of type `%T' will be caught" + msgstr "exception du type « %T » sera interceptée" + + #: cp/except.c:866 + msgid " by earlier handler for `%T'" + msgstr " par un handler antérieur pour « %T »" + + #: cp/except.c:887 + msgid "`...' handler must be the last handler for its try block" + msgstr "« ... » handler doit être le dernier handler de son bloc d'essai" + + #: cp/friend.c:155 + msgid "`%D' is already a friend of class `%T'" + msgstr "« %D » est déjà un ami de la classe « %T »" + + #: cp/friend.c:157 + msgid "previous friend declaration of `%D'" + msgstr "déclaration amie précédente de « %D »" + + #: cp/friend.c:197 + msgid "invalid type `%T' declared `friend'" + msgstr "type invalide « %T» déclaré «friend »" + + #. [temp.friend] + #. + #. Friend declarations shall not declare partial + #. specializations. + #: cp/friend.c:209 + msgid "partial specialization `%T' declared `friend'" + msgstr "spécialisation partielle « %T» déclarée «friend »" + + #: cp/friend.c:221 + msgid "class `%T' is implicitly friends with itself" + msgstr "classe « %T » est implicitement ami avec elle-même" + + #. template friend typename S::X; + #: cp/friend.c:239 + msgid "typename type `%#T' declared `friend'" + msgstr "type typename « %#T» déclaré «friend »" + + #. template friend class T; + #: cp/friend.c:245 + msgid "template parameter type `%T' declared `friend'" + msgstr "type paramètre du patron « %T» déclaré «friend »" + + #. template friend class A; where A is not a template + #: cp/friend.c:251 + msgid "`%#T' is not a template" + msgstr "«%#T» n'est pas un patron" + + #: cp/friend.c:266 + msgid "`%T' is already a friend of `%T'" + msgstr "« %T » est déjà un ami de « %T »" + + #: cp/friend.c:362 + msgid "member `%D' declared as friend before type `%T' defined" + msgstr "membre « %D » déclaré comme ami avant la définition du type « %T »" + + #: cp/friend.c:417 + msgid "friend declaration `%#D' declares a non-template function" + msgstr "déclaration amie «%#D» déclare une fonction non patron" + + #: cp/friend.c:420 + msgid "(if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) -Wno-non-template-friend disables this warning" + msgstr "(si ce n'est pas ce que vous vouliez faire, soyez sûr que le patron de la fonction a déjà été déclaré et ajouter <> après le nom de la fonction ici) -Wno-non-template-friend désactive le présent avertissement" + + #: cp/g++spec.c:198 java/jvspec.c:424 + #, c-format + msgid "argument to `%s' missing\n" + msgstr "argument pour « %s » est manquant\n" + + #: cp/init.c:285 + msgid "default-initialization of `%#D', which has reference type" + msgstr "initialisation par défaut de «%#D», lequel a un type référencé" + + #: cp/init.c:290 + msgid "uninitialized reference member `%D'" + msgstr "référence de membre non initialisé « %D »" + + #: cp/init.c:298 + msgid "initializer list treated as compound expression" + msgstr "liste d'initialiseurs traitée comme une expression composée" + + #: cp/init.c:410 + msgid "member initializers for `%#D'" + msgstr "initialiseur du membre pour «%#D»" + + #: cp/init.c:412 + msgid " and `%#D'" + msgstr " et «%#D»" + + #: cp/init.c:413 + msgid " will be re-ordered to match declaration order" + msgstr " sera ré-odonné pour concorder avec l'ordre déclaré" + + #: cp/init.c:428 + msgid "multiple initializations given for member `%D'" + msgstr "initialisations multiples données pour le membre « %D »" + + #: cp/init.c:500 + msgid "initializations for multiple members of `%T'" + msgstr "initialisation de multiples membres de « %T »" + + #: cp/init.c:617 + msgid "base initializers for `%#T'" + msgstr "initialiseurs de base pour «%#T»" + + #: cp/init.c:618 + msgid " and `%#T'" + msgstr " et «%#T»" + + #: cp/init.c:619 + msgid " will be re-ordered to match inheritance order" + msgstr " sera ré-ordonné pour concorder avec l'ordre d'héritage" + + #: cp/init.c:631 + msgid "base class `%T' already initialized" + msgstr "classe de base « %T » déjà initialisée" + + #: cp/init.c:702 + msgid "base class `%#T' should be explicitly initialized in the copy constructor" + msgstr "classe de base «%#T» devrait être explicitement initialisé dans la copie du constructeur" + + #: cp/init.c:745 + msgid "`%D' should be initialized in the member initialization list" + msgstr "« %D » devrait être initialisé dans la liste d'initialisation du membre" + + #: cp/init.c:987 + msgid "class `%T' does not have any field named `%D'" + msgstr "classe « %T » n'a pas aucun champ nommé « %D »" + + #: cp/init.c:993 + msgid "field `%#D' is static; the only point of initialization is its definition" + msgstr "champ «%#D» est statique; le seul point d'initialisation est sa définition" + + #: cp/init.c:1032 + msgid "unnamed initializer for `%T', which has no base classes" + msgstr "initialiseur sans nom pour « %T », lequel n'a pas de classe de base" + + #: cp/init.c:1039 + msgid "unnamed initializer for `%T', which uses multiple inheritance" + msgstr "initialiseur sans nom pour « %T », lequel utilise de multiples héritages" + + #: cp/init.c:1068 + msgid "type `%D' is not a direct or virtual base of `%T'" + msgstr "type « %D » n'est pas une base directe ou virtuelle de « %T »" + + #: cp/init.c:1071 + msgid "type `%D' is not a direct base of `%T'" + msgstr "type « %D » n'est pas une base directe de « %T »" + + #. Handle bad initializers like: + #. class COMPLEX { + #. public: + #. double re, im; + #. COMPLEX(double r = 0.0, double i = 0.0) {re = r; im = i;}; + #. ~COMPLEX() {}; + #. }; + #. + #. int main(int argc, char **argv) { + #. COMPLEX zees(1.0, 0.0)[10]; + #. } + #. + #: cp/init.c:1165 + msgid "bad array initializer" + msgstr "initialiseur de base erroné" + + #: cp/init.c:1357 + msgid "`%T' is not an aggregate type" + msgstr "« %T » n'est pas de type aggrégat" + + #: cp/init.c:1380 + msgid "`%T' fails to be an aggregate typedef" + msgstr "« %T » a échoué à être un typedef d'aggrégat" + + #: cp/init.c:1389 + msgid "type `%T' is of non-aggregate type" + msgstr "type « %T » est un type qui n'est pas d'aggrégat" + + #: cp/init.c:1491 + msgid "cannot call destructor `%T::~%T' without object" + msgstr "ne peut appeler le destructeur «%T::~%T» sans objet" + + #: cp/init.c:1531 + msgid "invalid use of non-static field `%D'" + msgstr "utilisation invalide d'un champ non statique « %D »" + + #. We can get here when processing a bad default + #. argument, like: + #. struct S { int a; void f(int i = a); } + #: cp/init.c:1540 cp/method.c:163 + msgid "invalid use of member `%D'" + msgstr "utilisation invalide du membre « %D »" + + #: cp/init.c:1550 + msgid "no method `%T::%D'" + msgstr "pas de méthode «%T::%D»" + + #: cp/init.c:1643 + msgid "incomplete type `%T' does not have member `%D'" + msgstr "type incomplet « %T » n'a pas de membre « %D »" + + #: cp/init.c:1712 + msgid "`%D' is not a member of type `%T'" + msgstr "« %D » n'est pas un membre de type « %T »" + + #: cp/init.c:1731 + msgid "illegal pointer to bit-field `%D'" + msgstr "pointeur illégal pour un champ de bits « %D »" + + #: cp/init.c:1770 + msgid "object missing in use of pointer-to-member construct" + msgstr "objet manquant dans l'utilisation du construit pointeur-à-membre" + + #: cp/init.c:1810 + msgid "member `%D' is non-static but referenced as a static member" + msgstr "membre « %D » est non statique mais référencé comme membre statique" + + #: cp/init.c:1812 cp/typeck.c:3130 cp/typeck.c:3238 + msgid "at this point in file" + msgstr "à ce point dans le fichier" + + #: cp/init.c:1853 cp/typeck.c:2929 + #, c-format + msgid "object missing in `%E'" + msgstr "objet manquant dans « %E »" + + #: cp/init.c:1984 + msgid "new of array type fails to specify size" + msgstr "new sur un type tableau a échoué dans l'évaluation de la taille" + + #: cp/init.c:1995 + msgid "size in array new must have integral type" + msgstr "taille d'un nouveau tableau (new) doit avoir un type entier" + + #: cp/init.c:2001 + msgid "zero size array reserves no space" + msgstr "tableau de taille zéro ne réserve pas d'espace" + + #: cp/init.c:2066 + msgid "new cannot be applied to a reference type" + msgstr "new ne peut être appliqué à un type référencé" + + #: cp/init.c:2072 + msgid "new cannot be applied to a function type" + msgstr "new ne peut être appliqué à un type de fonction" + + #: cp/init.c:2119 + msgid "call to Java constructor, while `jclass' undefined" + msgstr "appel d'un constructeur Java, alors que « jclass » est indéfini" + + #: cp/init.c:2135 + msgid "can't find class$" + msgstr "ne peut repérer class$" + + #: cp/init.c:2249 + msgid "invalid type `void' for new" + msgstr "type « void » invalide pour new" + + #: cp/init.c:2301 + #, c-format + msgid "call to Java constructor with `%s' undefined" + msgstr "appel au constructeur Java avec « %s » indéfini" + + #: cp/init.c:2408 + msgid "ISO C++ forbids initialization in array new" + msgstr "ISO C++ interdit l'initialisation d'un nouveau tableau" + + #: cp/init.c:2426 cp/typeck2.c:359 cp/typeck2.c:1217 + msgid "initializer list being treated as compound expression" + msgstr "liste d'initaliseurs a été traité comme une expression composée" + + #: cp/init.c:2432 + msgid "ISO C++ forbids aggregate initializer to new" + msgstr "ISO C++ interdit l'aggrégation d'initialiseur à new" + + #: cp/init.c:2516 + msgid "uninitialized const in `new' of `%#T'" + msgstr "constante non initialisée dans « new» pour «%#T »" + + #: cp/init.c:2880 + msgid "initializer ends prematurely" + msgstr "fin prématurée de l'initialiseur" + + #: cp/init.c:2950 + msgid "cannot initialize multi-dimensional array with initializer" + msgstr "ne peut initialiser un table multi-dimensionnel avec initialiseur" + + #: cp/init.c:3125 + msgid "unknown array size in delete" + msgstr "taille du tableau inconnue dans delete" + + #: cp/init.c:3398 + msgid "type to vector delete is neither pointer or array type" + msgstr "type du vesteur delete n'est ni un pointeur ou un type tableau" + + #: cp/lex.c:144 + msgid "type name expected before `*'" + msgstr "nom de type attendu avec «*»" + + #: cp/lex.c:166 + msgid "cannot declare references to references" + msgstr "ne peut décalrer des références vers des références" + + #: cp/lex.c:171 + msgid "cannot declare pointers to references" + msgstr "ne peut déclarer des pointeurs vers des références" + + #: cp/lex.c:175 + msgid "type name expected before `&'" + msgstr "nom de type attendu avant «&»" + + #: cp/lex.c:993 + #, c-format + msgid "semicolon missing after %s declaration" + msgstr "«;» manquant après la déclaration de %s" + + #: cp/lex.c:996 + msgid "semicolon missing after declaration of `%T'" + msgstr "«;» manquant après la déclaration « %T »" + + #: cp/lex.c:1044 + #, c-format + msgid "junk at end of #pragma %s" + msgstr "rebut à la fin de #pragma %s" + + #: cp/lex.c:1051 + #, c-format + msgid "invalid #pragma %s" + msgstr "#pragma %s invalde" + + #: cp/lex.c:1060 + msgid "#pragma vtable no longer supported" + msgstr "#pragma vtable n'est plus supporté" + + #: cp/lex.c:1137 + #, c-format + msgid "#pragma implementation for %s appears after file is included" + msgstr "implantation de #pragma pour %s apparaît après l'inclusion du fichier" + + #: cp/lex.c:1162 + msgid "junk at end of #pragma GCC java_exceptions" + msgstr "rebut à la fin de #pragma GCC java_exceptions" + + #: cp/lex.c:1247 + msgid "`%D' not defined" + msgstr "« %D » n'est pas défini" + + #: cp/lex.c:1252 + msgid "`%D' was not declared in this scope" + msgstr "« %D » n'a pas été déclaré dans cet horizon" + + #: cp/lex.c:1262 + msgid "`%D' undeclared (first use this function)" + msgstr "« %D » non déclaré (première utilisation dans cette fonction)" + + #: cp/lex.c:1266 + msgid "(Each undeclared identifier is reported only once for each function it appears in.)" + msgstr "(Chaque identificateur non déclaré est rapporté seulement une seule fois pour la fonction dans laquelle il apparaît.)" + + #: cp/lex.c:1289 + #, c-format + msgid "name lookup of `%s' changed" + msgstr "recherche du nom « %s » a changé" + + #: cp/lex.c:1291 + msgid " matches this `%D' under ISO standard rules" + msgstr " concorde avec « %D » selon les règles standards ISO" + + #: cp/lex.c:1293 + msgid " matches this `%D' under old rules" + msgstr " concorde avec « %D » selon les vieilles règles" + + #: cp/lex.c:1303 cp/lex.c:1310 + #, c-format + msgid "name lookup of `%s' changed for new ISO `for' scoping" + msgstr "recherche du nom « %s » changé pour le nouveau ISO «for » d'étendue de champ" + + #: cp/lex.c:1305 + msgid " cannot use obsolete binding at `%D' because it has a destructor" + msgstr " ne peut utiliser une liaison obsolète à « %D » parce qu'il a un destructeur" + + #: cp/lex.c:1312 + msgid " using obsolete binding at `%D'" + msgstr " utilisation de liaison obsolète à « %D »" + + #: cp/lex.c:1378 + msgid "`::%D' undeclared (first use here)" + msgstr "«::%D» non déclaré (première utilisation ici)" + + #: cp/mangle.c:1912 + msgid "real-valued template parameters when cross-compiling" + msgstr "patron de paramètre en valeur réelle lors de la compilation croisée" + + #: cp/method.c:157 + msgid "invalid use of member `%D' in static member function" + msgstr "utilisation invalide du membre « %D » dans un membre statique de fonction" + + #: cp/method.c:205 + msgid "use of namespace `%D' as expression" + msgstr "utilisation d'un espace de dnomes « %D » comme expression" + + #: cp/method.c:210 + msgid "use of class template `%T' as expression" + msgstr "utilisation du patron de classe « %T » comme expression" + + #: cp/method.c:223 + #, c-format + msgid "use of %s from containing function" + msgstr "utilisation de %s d'un fonction contenante" + + #: cp/method.c:226 + msgid " `%#D' declared here" + msgstr " «%#D» déclaré ici" + + #: cp/method.c:244 + msgid "request for member `%D' is ambiguous in multiple inheritance lattice" + msgstr "requête du membre « %D » est ambiquë dans de mutliples héritage de treillis" + + #: cp/method.c:297 + msgid "implementation-reserved name `%D' used" + msgstr "nom d'implantation réservé « %D » est utilisé" + + #: cp/method.c:428 + msgid "generic thunk code fails for method `%#D' which uses `...'" + msgstr "code « thunk» générique a échoué pour la méthode «%#D» laquelle utilise « ... »" + + #: cp/method.c:653 + msgid "non-static const member `%#D', can't use default assignment operator" + msgstr "constante non statique du membre «%#D», ne peut utiliser l'opérateur d'affectation par défaut" + + #: cp/method.c:658 + msgid "non-static reference member `%#D', can't use default assignment operator" + msgstr "référence non statique du membre «%#D», ne peut utiliser l'opérateur d'affectation par défaut" + + #: parse.y:218 + msgid "`%s' tag used in naming `%#T'" + msgstr "étiquette « union» utilisée dans la dénomination de «%#T »" + + #: parse.y:510 + msgid "keyword `export' not implemented, and will be ignored" + msgstr "mot clé « export » n'est pas implanté et sera ignoré" + + #: parse.y:615 + msgid "use of linkage spec `%D' is different from previous spec `%D'" + msgstr "utilisation de spéc de liaisons « %D » est différente de la spec précédente « %D »" + + #: parse.y:688 + msgid "invalid default template argument" + msgstr "argument invalide pour le patron par défaut" + + #: parse.y:919 + msgid "only constructors take base initializers" + msgstr "seuls les constructeurs prennent des initialiseurs de base" + + #: parse.y:921 + msgid "no base or member initializers given following ':'" + msgstr "pas d'initialiseur de base ou membre donné après «:»" + + #: parse.y:963 parse.y:969 + msgid "anachronistic old style base class initializer" + msgstr "ancien style anachronique d'initialiseur de classe de base" + + #. Handle `Class>' without space in the `>>' + #: parse.y:1095 + msgid "`>>' should be `> >' in template class name" + msgstr "«>>» devrait être «> >» dans le nom du patron de la classe" + + #: parse.y:1133 + msgid "use of template qualifier outside template" + msgstr "utilisation d'un qualificateur de patron en dehors d'un patron" + + #: parse.y:1162 parse.y:1171 + #, c-format + msgid "ISO C++ forbids an empty condition for `%s'" + msgstr "ISO C++ interdit une condition vide pour « %s »" + + #: parse.y:1194 + msgid "definition of class `%T' in condition" + msgstr "définition de la classe « %T » dans la condition" + + #: parse.y:1196 + msgid "definition of enum `%T' in condition" + msgstr "définition de l'aggrégat « %T » dans la condition" + + #: parse.y:1207 + msgid "definition of array `%#D' in condition" + msgstr "définition du tableau «%#D» dans la condition" + + #: parse.y:1316 + msgid "old style placement syntax, use () instead" + msgstr "ancien style de syntaxe de positionnement, utiliser () à la place" + + #: parse.y:1327 + msgid "`%T' is not a valid expression" + msgstr "« %T » n'est pas une expression valide" + + #: parse.y:1338 + msgid "ISO C++ forbids initialization of new expression with `='" + msgstr "ISO C++ interdit l'initialisation d'une nouvelle expression avec «=»" + + #: parse.y:1369 + msgid "ISO C++ forbids compound literals" + msgstr "ISO C++ interdit les chaînes composées" + + #: parse.y:1611 + msgid "ISO C++ forbids braced-groups within expressions" + msgstr "ISO C++ interdit les groupes d'accolades à l'intérieur des expressions" + + #: parse.y:2013 parse.y:2028 + msgid "sigof type specifier" + msgstr "spécificateur du type sigof" + + #: parse.y:2018 + msgid "`sigof' applied to non-aggregate expression" + msgstr "« sigof » appliqué à une expression de non aggrégats" + + #: parse.y:2033 + msgid "`sigof' applied to non-aggregate type" + msgstr "« sigof » appliqué à un type non aggrégat" + + #: parse.y:2299 + msgid "using `typename' outside of template" + msgstr "utilisation de « typename » en dehors du patron" + + #: parse.y:2370 + #, c-format + msgid "storage class specifier `%s' not allowed after struct or class" + msgstr "spécificateur de classe de stockages « %s » n'est pas permis après struct ou class" + + #: parse.y:2372 + #, c-format + msgid "type specifier `%s' not allowed after struct or class" + msgstr "spécificateur de type « %s » n'est pas permis après struct ou class" + + #: parse.y:2374 + #, c-format + msgid "type qualifier `%s' not allowed after struct or class" + msgstr "qualificateur de type « %s » n'est pas permis après struct ou class" + + #: parse.y:2376 + msgid "no body nor ';' separates two class, struct or union declarations" + msgstr "pas de corps ni de «;» séparant les deux déclarations de classes, struct ou union" + + #: parse.y:2508 + msgid "no bases given following `:'" + msgstr "pas de base donnée après «:»" + + #: parse.y:2539 parse.y:2554 + msgid "`%D' access" + msgstr "« %D » accès" + + #: parse.y:2544 + msgid "multiple access specifiers" + msgstr "spécificateurs d'accès multiples" + + #: parse.y:2562 + msgid "multiple `virtual' specifiers" + msgstr "spécificateurs « virtual » multiples" + + #: parse.y:2599 + msgid "missing ';' before right brace" + msgstr "«;» manquant avant l'accolade de droite" + + #: parse.y:2820 + msgid "ISO C++ forbids array dimensions with parenthesized type in new" + msgstr "ISO C++ interdit l'utilisation de parenthèses autour du type pour les dimensions de tableaux avec new" + + #: parse.y:3107 parse.y:3127 parse.y:3136 parse.y:3165 + msgid "`%T' is not a class or namespace" + msgstr "« %T » n'est pas une classe ou un espace de noms" + + #: parse.y:3332 + msgid "ISO C++ forbids label declarations" + msgstr "ISO C++ interdit la déclaration d'étiquette" + + #: parse.y:3492 + msgid "ISO C++ forbids computed gotos" + msgstr "ISO C++ interdit les gotos calculés" + + #: parse.y:3500 + msgid "label must be followed by statement" + msgstr "l'étiquette doit être suivie d'une déclaration" + + #: parse.y:3545 + msgid "must have at least one catch per try block" + msgstr "doit avoir au moins un intercepteur par bloc d'essais" + + #: parse.y:3605 + msgid "ISO C++ forbids compound statements inside for initializations" + msgstr "ISO C++ interdit les déclarations composées à l'intérieur des initialisations" + + #. This helps us recover from really nasty + #. parse errors, for example, a missing right + #. parenthesis. + #: parse.y:3690 parse.y:3700 + msgid "possibly missing ')'" + msgstr "«)» possiblement manquante" + + #: parse.y:3793 + msgid "type specifier omitted for parameter" + msgstr "spécificateur de type omis pour le paramètre" + + #: parse.y:3802 + #, c-format + msgid "`%E' is not a type, use `typename %E' to make it one" + msgstr "« %E» n'est pas un type, utiliser «typename %E » pour en faire un" + + #: parse.y:3804 + msgid "no type `%D' in `%T'" + msgstr "pas de type « %D » dans « %T »" + + #: parse.y:3807 + #, c-format + msgid "type specifier omitted for parameter `%E'" + msgstr "spécificateur de type omis pour le paramètre « %E »" + + #: parse.y:3815 + msgid "'%D' is used as a type, but is not defined as a type." + msgstr "« %D » est utilisé comme type, mais n'est pas défini comme type." + + #: cp/pt.c:211 + msgid "data member `%D' cannot be a member template" + msgstr "membre de données « %D » ne peut être membre du patron" + + #: cp/pt.c:223 + msgid "invalid member template declaration `%D'" + msgstr "déclaration de membre de patron invalide « %D »" + + #: cp/pt.c:618 + msgid "explicit specialization in non-namespace scope `%D'" + msgstr "spécialisation explicite dans la portée d'un non espace de noms « %D »" + + #: cp/pt.c:630 + msgid "enclosing class templates are not explicitly specialized" + msgstr "fermetures de patrons de classe ne sont pas explicitement spécialisées" + + #: cp/pt.c:705 + msgid "specializing `%#T' in different namespace" + msgstr "spécialisation de «%#T» dans différents espaces de noms" + + #: cp/pt.c:706 + msgid " from definition of `%#D'" + msgstr " à partir de la définition de «%#D»" + + #: cp/pt.c:714 + msgid "specialization of `%T' after instantiation" + msgstr "spécialisation de « %T » après instanciation" + + #: cp/pt.c:717 + msgid "explicit specialization of non-template `%T'" + msgstr "spécialisation explicite du non patron « %T »" + + #: cp/pt.c:849 + msgid "specialization of %D after instantiation" + msgstr "spécialisation de %D après instanciation" + + #: cp/pt.c:952 + msgid "%s %+#D" + msgstr "%s %+#D" + + #: cp/pt.c:1003 + msgid "`%D' is not a function template" + msgstr "« %D » n'est pas un patron de fonction" + + #: cp/pt.c:1126 + msgid "template-id `%D' for `%+D' does not match any template declaration" + msgstr "template-id « %D » pour «%+D» ne concorde pas avec aucune déclaration de patron" + + #: cp/pt.c:1134 + msgid "ambiguous template specialization `%D' for `%+D'" + msgstr "spécialisation de patron amibiguë « %D » pour «%+D»" + + #. This case handles bogus declarations like template <> + #. template void f(); + #: cp/pt.c:1361 cp/pt.c:1435 + msgid "template-id `%D' in declaration of primary template" + msgstr "template-id « %D » dans la déclaration de patron primaire" + + #: cp/pt.c:1374 + msgid "template parameter list used in explicit instantiation" + msgstr "patron de liste de paramètres utilisé dans une instanciation explicite" + + #: cp/pt.c:1380 + msgid "definition provided for explicit instantiation" + msgstr "définition fournie pour une instanciation explicite" + + #: cp/pt.c:1386 + msgid "too many template parameter lists in declaration of `%D'" + msgstr "trop de patrons de listes de paramètres dans la déclaration de « %D »" + + #: cp/pt.c:1402 + msgid "too few template parameter lists in declaration of `%D'" + msgstr "trop peu de patrons de listes de paramètres dans la déclaration de « %D »" + + #: cp/pt.c:1419 + msgid "explicit specialization not preceded by `template <>'" + msgstr "spécialisation explicite n'est pas précédée de « template <> »" + + #: cp/pt.c:1432 + msgid "partial specialization `%D' of function template" + msgstr "spécialisation partielle « %D » du patron de fonction" + + #: cp/pt.c:1464 + msgid "default argument specified in explicit specialization" + msgstr "argument par défaut spécifié dans la spécialisation explicite" + + #: cp/pt.c:1468 + msgid "template specialization with C linkage" + msgstr "spécialisation de patron avec édition de liens C" + + #. From [temp.expl.spec]: + #. + #. If such an explicit specialization for the member + #. of a class template names an implicitly-declared + #. special member function (clause _special_), the + #. program is ill-formed. + #. + #. Similar language is found in [temp.explicit]. + #: cp/pt.c:1556 + msgid "specialization of implicitly-declared special member function" + msgstr "spécialisation d'un membre spécial d'nue fonction déclaré implicitement" + + #: cp/pt.c:1599 + msgid "no member function `%D' declared in `%T'" + msgstr "pas de membre de fonction « %D » déclaré dans « %T »" + + #. There are two many template parameter lists. + #: cp/pt.c:1747 + msgid "too many template parameter lists in declaration of `%T'" + msgstr "trop de patrons de listes de paramètres dans la déclaration de « %T »" + + #: cp/pt.c:1843 + msgid " shadows template parm `%#D'" + msgstr " fait ombrage au paramètre du patron «%#D»" + + #: cp/pt.c:2247 + msgid "template parameters not used in partial specialization:" + msgstr "paramètres du patron ne sont pas utilisés dans la spécialisation partielle:" + + #: cp/pt.c:2251 + msgid " `%D'" + msgstr " « %D »" + + #: cp/pt.c:2263 + msgid "partial specialization `%T' does not specialize any template arguments" + msgstr "spécialisation partielle « %T » ne spécialise pas aucun patron d'arguments" + + #: cp/pt.c:2288 + #, c-format + msgid "template argument `%E' involves template parameter(s)" + msgstr "patron d'argument « %E » implique des paramètres du patron" + + #: cp/pt.c:2331 + msgid "type `%T' of template argument `%E' depends on template parameter(s)" + msgstr "type « %T » du patron d'argument « %E » dépend des paramètres du patron" + + #: cp/pt.c:2419 + msgid "no default argument for `%D'" + msgstr "pas d'argument par défaut pour « %D »" + + #: cp/pt.c:2552 + msgid "template with C linkage" + msgstr "patron avec liaison C" + + #: cp/pt.c:2555 + msgid "template class without a name" + msgstr "patron de classe sans nom" + + #: cp/pt.c:2632 + msgid "`%D' does not declare a template type" + msgstr "« %D » ne déclare pas un type de patron" + + #: cp/pt.c:2638 + msgid "template definition of non-template `%#D'" + msgstr "définition de patron d'un non patron «%#D»" + + #: cp/pt.c:2679 + msgid "expected %d levels of template parms for `%#D', got %d" + msgstr "attendait %d niveaux de patron de paramètres pour «%#D», obtenu %d" + + #: cp/pt.c:2691 + msgid "got %d template parameters for `%#D'" + msgstr "a obtenu %d paramètres de patron pour «%#D»" + + #: cp/pt.c:2694 + msgid "got %d template parameters for `%#T'" + msgstr "a obtenu %d paramètres de patron pour «%#T»" + + #: cp/pt.c:2696 + #, c-format + msgid " but %d required" + msgstr " mais %d son requis" + + #: cp/pt.c:2764 + msgid "`%T' is not a template type" + msgstr "« %T » n'est pas un type patron" + + #: cp/pt.c:2780 + msgid "previous declaration `%D'" + msgstr "déclaration précédente de « %D »" + + #: cp/pt.c:2781 + #, c-format + msgid "used %d template parameter%s instead of %d" + msgstr "utilisé %d patrons paramètre%s au lieu de %d" + + #: cp/pt.c:2797 + msgid "template parameter `%#D'" + msgstr "patron de paramètre «%#D»" + + #: cp/pt.c:2798 + msgid "redeclared here as `%#D'" + msgstr "redéclaré ici comme «%#D»" + + #. We have in [temp.param]: + #. + #. A template-parameter may not be given default arguments + #. by two different declarations in the same scope. + #: cp/pt.c:2808 + msgid "redefinition of default argument for `%#D'" + msgstr "redéfinition de l'argument par défaut pour «%#D»" + + #: cp/pt.c:2809 + msgid " original definition appeared here" + msgstr " définition originale apparaît ici" + + #: cp/pt.c:2902 + #, c-format + msgid "`%E' is not a valid template argument" + msgstr "« %E » n'est pas un argument valide pour le patron" + + #: cp/pt.c:2906 + msgid "it must be the address of a function with external linkage" + msgstr "il doit être l'adresse d'une fonction avec lien externe" + + #: cp/pt.c:2908 + msgid "it must be the address of an object with external linkage" + msgstr "il doît être l'adresse d'un objet avec lien externe" + + #: cp/pt.c:2912 + msgid "it must be a pointer-to-member of the form `&X::Y'" + msgstr "il doit être un pointeur-vers-un-membre de la forme «&X::Y»" + + #: cp/pt.c:2923 + #, c-format + msgid "string literal %E is not a valid template argument because it is the address of an object with static linkage" + msgstr "chaîne %E n'est pas un patron d'argument valide parce que c'est l'adresse d'un objet avec lien statique" + + #: cp/pt.c:2935 + #, c-format + msgid "address of non-extern `%E' cannot be used as template argument" + msgstr "adresse du non externe « %E » ne peut être utilisé comme patron d'argument" + + #: cp/pt.c:2946 + #, c-format + msgid "non-constant `%E' cannot be used as template argument" + msgstr "la non const « %E » ne peut être utilisé comme un patron d'argument" + + #: cp/pt.c:2953 + #, c-format + msgid "object `%E' cannot be used as template argument" + msgstr "objet « %E » ne peut être utilisé comme un patron d'argument" + + #: cp/pt.c:3333 + #, c-format + msgid "to refer to a type member of a template parameter, use `typename %E'" + msgstr "pour référencer un type de membre de patron de paramètres, utiliser « typename %E »" + + #: cp/pt.c:3346 cp/pt.c:3362 cp/pt.c:3401 + msgid "type/value mismatch at argument %d in template parameter list for `%D'" + msgstr "non concordance de type/valeur pour l'argument %d dans la liste des paramètres du patron de « %D »" + + #: cp/pt.c:3349 + msgid " expected a constant of type `%T', got `%T'" + msgstr " attendait une constante de type « %T », a obtenu « %T »" + + #: cp/pt.c:3353 + #, c-format + msgid " expected a type, got `%E'" + msgstr " attendait un type, a obtenu « %E »" + + #: cp/pt.c:3365 + msgid " expected a type, got `%T'" + msgstr " attendait un type, a obtenu « %T »" + + #: cp/pt.c:3367 + msgid " expected a class template, got `%T'" + msgstr " attendait un patron de classe, a obtenu « %T »" + + #: cp/pt.c:3403 + msgid " expected a template of type `%D', got `%D'" + msgstr " attendait un patron de type « %D », a obtenu « %D »" + + #: cp/pt.c:3425 + msgid "template-argument `%T' uses anonymous type" + msgstr "argument du patron « %T » utilise un type anonyme" + + #: cp/pt.c:3428 + msgid "template-argument `%T' uses local type `%T'" + msgstr "argument du patron « %T » utilise un type local « %T »" + + #: cp/pt.c:3463 + msgid "could not convert template argument `%E' to `%T'" + msgstr "ne peut convertir l'argument du patron « %E » vers « %T »" + + #: cp/pt.c:3507 + #, c-format + msgid "wrong number of template arguments (%d, should be %d)" + msgstr "nombre erroné d'arguments du patron (%d devrait être %d)" + + #: cp/pt.c:3511 + msgid "provided for `%D'" + msgstr "fournie pour « %D »" + + #: cp/pt.c:3558 + #, c-format + msgid "template argument %d is invalid" + msgstr "patron de l'argument %d est invalide" + + #: cp/pt.c:3790 + msgid "non-template used as template" + msgstr "non patron utilisé comme patron" + + #: cp/pt.c:3908 + msgid "`%T' is not a template" + msgstr "« %T » n'est pas un patron" + + #: cp/pt.c:3921 + msgid "non-template type `%T' used as a template" + msgstr "type non patron « %T » utilisé comme un patron" + + #: cp/pt.c:3923 + msgid "for template declaration `%D'" + msgstr "pour la déclaration du patron « %D »" + + #: cp/pt.c:4486 + msgid "template instantiation depth exceeds maximum of %d (use -ftemplate-depth-NN to increase the maximum) instantiating `%D'" + msgstr "instantiation de la profondeur du patron excède le maximum de %d (utiliser -ftemplate-depth-NN pour augmenter le maximum) lors de l'instanciation de « %D »" + + #: cp/pt.c:4921 + msgid "ambiguous class template instantiation for `%#T'" + msgstr "instanciation ambiguë de patron de classe pour «%#T»" + + #: cp/pt.c:4928 + msgid "%s %+#T" + msgstr "%s %+#T" + + #: cp/pt.c:5949 cp/pt.c:6054 + msgid "instantiation of `%D' as type `%T'" + msgstr "instanciation de « %D » comme type « %T »" + + #: cp/pt.c:6096 + msgid "invalid parameter type `%T'" + msgstr "paramètre invalide pour le type « %T »" + + #: cp/pt.c:6098 + msgid "in declaration `%D'" + msgstr "dans la déclaration de « %D »" + + #: cp/pt.c:6173 + msgid "creating pointer to member function of non-class type `%T'" + msgstr "création d'un pointeur vers le membre d'une fonction d'un type non classe « %T »" + + #: cp/pt.c:6336 + msgid "creating array with size zero" + msgstr "création d'un tableau de taille zéro" + + #: cp/pt.c:6350 + #, c-format + msgid "creating array with size zero (`%E')" + msgstr "création d'un tableau de taille zéro (« %E »)" + + #: cp/pt.c:6589 + msgid "forming reference to void" + msgstr "formation d'une référence en void" + + #: cp/pt.c:6591 + msgid "forming %s to reference type `%T'" + msgstr "formant %s pour référencer le type « %T »" + + #: cp/pt.c:6629 + msgid "creating pointer to member of non-class type `%T'" + msgstr "création d'un pointeur vers le membre d'un type non classe « %T »" + + #: cp/pt.c:6635 + msgid "creating pointer to member reference type `%T'" + msgstr "création d'un pointeur vers le membre de référence du type « %T »" + + #: cp/pt.c:6713 + msgid "creating array of `%T'" + msgstr "création du tableau « %T »" + + #: cp/pt.c:6756 + msgid "`%T' is not a class, struct, or union type" + msgstr "« %T » n'est pas une classe, struct ou un type d'union" + + #: cp/pt.c:6866 + #, c-format + msgid "use of `%s' in template" + msgstr "utilisation de « %s » dans le patron" + + #: cp/pt.c:7629 + msgid "type `%T' composed from a local class is not a valid template-argument" + msgstr "type « %T » composé à partir d'une classe locale n'est pas un patron d'argument valide" + + #: cp/pt.c:7630 + msgid " trying to instantiate `%D'" + msgstr " tentative d'instanciation « %D »" + + #: cp/pt.c:8060 + msgid "incomplete type unification" + msgstr "type d'unification incomplète" + + #: cp/pt.c:9027 + #, c-format + msgid "use of `%s' in template type unification" + msgstr "utilisation de « %s » dans le patron du type d'unification" + + #: cp/pt.c:9447 cp/pt.c:9515 + msgid "explicit instantiation of non-template `%#D'" + msgstr "instanciation explicite d'un non patron «%#D»" + + #: cp/pt.c:9463 cp/pt.c:9510 + msgid "no matching template for `%D' found" + msgstr "non concordance de patron pour « %D » repéré" + + #: cp/pt.c:9469 + msgid "explicit instantiation of `%#D'" + msgstr "instanciation explicite de «%#D»" + + #. [temp.spec] + #. + #. No program shall both explicitly instantiate and explicitly + #. specialize a template. + #: cp/pt.c:9486 + msgid "explicit instantiation of `%#D' after" + msgstr "instanciation explicite de «%#D» après" + + #: cp/pt.c:9487 cp/pt.c:9624 + msgid "explicit specialization here" + msgstr "spécialisation explicite ici" + + #: cp/pt.c:9502 + msgid "duplicate explicit instantiation of `%#D'" + msgstr "duplication d'instanciation explicite de «%#D»" + + #: cp/pt.c:9527 + msgid "ISO C++ forbids the use of `extern' on explicit instantiations" + msgstr "ISO C++ interdit l'utilisation de « extern » sur instanciations explicites" + + #: cp/pt.c:9531 cp/pt.c:9609 + msgid "storage class `%D' applied to template instantiation" + msgstr "classe de stockage « %D » appliqué à l'instanciation du patron" + + #: cp/pt.c:9576 + msgid "explicit instantiation of non-template type `%T'" + msgstr "instanciation explicite de type non patron « %T »" + + #: cp/pt.c:9590 + msgid "explicit instantiation of `%#T' before definition of template" + msgstr "instanciation explicite de «%#T» avant la définition de patron" + + #: cp/pt.c:9598 + #, c-format + msgid "ISO C++ forbids the use of `%s' on explicit instantiations" + msgstr "ISO C++ interdit l'utilisation de « %s » sur instanciations explicites" + + #: cp/pt.c:9623 + msgid "explicit instantiation of `%#T' after" + msgstr "instanciation explicite de «%#T» après" + + #: cp/pt.c:9641 + msgid "duplicate explicit instantiation of `%#T'" + msgstr "duplication d'instanciation explicite de «%#T»" + + #: cp/pt.c:10003 + msgid "explicit instantiation of `%D' but no definition available" + msgstr "instanciation explicite de « %D » mais pas de définition disponible" + + #: cp/pt.c:10375 + msgid "`%#T' is not a valid type for a template constant parameter" + msgstr "«%#T» n'a pas un type valide pour un patron de parametre de constante" + + #: cp/repo.c:272 + msgid "-frepo must be used with -c" + msgstr "-frepo doit être utilisé avec -c" + + #: cp/repo.c:366 + #, c-format + msgid "mysterious repository information in %s" + msgstr "dépôt mystérieux d'informations dans %s" + + #: cp/repo.c:381 + #, c-format + msgid "can't create repository information file `%s'" + msgstr "ne peut créer le fichier « %s » pour dépôt d'informations" + + #: cp/rtti.c:200 + msgid "cannot use typeid with -fno-rtti" + msgstr "ne peut utiliser typeid avec -fno-rtti" + + #: cp/rtti.c:206 + msgid "must #include before using typeid" + msgstr "doit utiliser #include avant d'utiliser typeid" + + #: cp/rtti.c:280 + msgid "cannot create type information for type `%T' because its size is variable" + msgstr "ne peut créer une information pour le type « %T » parce que sa taille est variable" + + #: cp/rtti.c:525 cp/rtti.c:539 + msgid "dynamic_cast of `%#D' to `%#T' can never succeed" + msgstr "dynamic_cast de «%#D» vers «%#T» ne pourra jamais réussir" + + #: cp/rtti.c:614 + msgid "cannot dynamic_cast `%E' (of type `%#T') to type `%#T' (%s)" + msgstr "ne peut effectuer un dynamic_cast « %E » (du type «%#T') vers le type «%#T» (%s)" + + #: cp/search.c:340 + msgid "`%T' is an inaccessible base of `%T'" + msgstr "« %T » est une base inaccessible de « %T »" + + #: cp/search.c:350 + msgid "`%T' is an ambiguous base of `%T'" + msgstr "« %T » est une base ambiguë de « %T »" + + #: cp/search.c:1820 + msgid "adjusting pointers for covariant returns" + msgstr "ajuster les pointeurs pour des retours co-variants" + + #: cp/search.c:1824 cp/search.c:1831 + msgid "invalid covariant return type for `%#D'" + msgstr "type retourné covariant invalide pour «%#D»" + + #: cp/search.c:1825 + msgid " overriding `%#D' (must be pointer or reference to class)" + msgstr " écrasant «%#D» (doit être un pointeur ou une référence vers un classe)" + + #: cp/search.c:1832 + msgid " overriding `%#D' (must use pointer or reference)" + msgstr " écrasant «%#D» (doit utiliser un pointeur ou un référence)" + + #: cp/search.c:1837 + msgid "conflicting return type specified for `%#D'" + msgstr "types retournés conflictuels spécifiés pour «%#D»" + + #: cp/search.c:1838 + msgid " overriding `%#D'" + msgstr " écrasant «%#D»" + + #: cp/search.c:1847 + #, c-format + msgid "looser throw specifier for `%#F'" + msgstr "a placé un spécificateur pour «%#F»" + + #: cp/search.c:1848 + #, c-format + msgid " overriding `%#F'" + msgstr " écrasant «%#F»" + + #. A static member function cannot match an inherited + #. virtual member function. + #: cp/search.c:1938 + msgid "`%#D' cannot be declared" + msgstr "«%#D» ne peut être déclaré" + + #: cp/search.c:1939 + msgid " since `%#D' declared in base class" + msgstr " alors que «%#D» est déclaré dans la classe de base" + + #: cp/search.c:2080 + msgid "`%#D' needs a final overrider" + msgstr "«%#D» a besoin d'un écraseur final" + + #: cp/semantics.c:911 + #, c-format + msgid "type of asm operand `%E' could not be determined" + msgstr "type d'opérande asm « %E » ne peut être déterminé" + + #: cp/semantics.c:1053 + msgid "ISO C++ does not permit named return values" + msgstr "ISO C++ ne permet pas les valeurs retournées nommées" + + #: cp/semantics.c:1062 + msgid "return identifier `%D' already in place" + msgstr "identificateur retourné « %D » est déjà en place" + + #: cp/semantics.c:1070 + msgid "can't redefine default return value for constructors" + msgstr "ne peut redéfinir la valeur retournée par défaut pour les constructeurs" + + #: cp/semantics.c:1137 + msgid "base initializer for `%T'" + msgstr "initialiseur de base « %T »" + + #: cp/semantics.c:1139 + msgid " will be re-ordered to precede member initializations" + msgstr " sera ré-ordonné pour précéder les initialisations de membre" + + #: cp/semantics.c:1327 + msgid "`this' is unavailable for static member functions" + msgstr "« this » n'est pas disponible pour les membres statiques de fonctions" + + #: cp/semantics.c:1333 + msgid "invalid use of `this' in non-member function" + msgstr "utilisation invalide de « ceci » dans un non membre de fonction" + + #: cp/semantics.c:1335 + msgid "invalid use of `this' at top level" + msgstr "utilisation invalide de « ceci » au niveau supérieur" + + #: cp/semantics.c:1373 + msgid "calling type `%T' like a method" + msgstr "appel du type « %T » comme une méthode" + + #: cp/semantics.c:1409 + msgid "destructor specifier `%T::~%T()' must have matching names" + msgstr "spécificateur du destructeur «%T::~%T()» doit avoir des noms concordants" + + #: cp/semantics.c:1415 + msgid "`%E' is not of type `%T'" + msgstr "« %E » n'est pas un type « %T »" + + #: cp/semantics.c:1608 + msgid "template type parameters must use the keyword `class' or `typename'" + msgstr "patron de type de paramètres doit utiliser le mot clé « class» ou «typename »" + + #: cp/semantics.c:1670 + msgid "definition of `%#T' inside template parameter list" + msgstr "définition de «%#T» à l'intérieur d'un patron de liste de paramètres" + + #: cp/semantics.c:1686 + msgid "invalid definition of qualified type `%T'" + msgstr "définition invalide d'un type qualifié « %T »" + + #: cp/semantics.c:2039 + msgid "base class `%T' has cv qualifiers" + msgstr "classe de base « %T » a des qualificateurs cv" + + #: cp/semantics.c:2072 + msgid "multiple declarators in template declaration" + msgstr "déclarateurs multiples dans la déclaration de patron" + + #: cp/spew.c:239 + #, c-format + msgid "identifier name `%s' conflicts with GNU C++ internal naming strategy" + msgstr "nom d'identificateur « %s » entre en conflit avec la stratégie interne de dénomination de GNU C++" + + #: cp/spew.c:1017 cp/spew.c:1292 + msgid "parse error at end of saved function text" + msgstr "erreur d'analyse syntaxique à la fin de la sauvegarde de la fonction texte" + + #: cp/spew.c:1062 + msgid "parse error in method specification" + msgstr "erreur d'analyse syntaxique dans la spécification de fonction" + + #: cp/spew.c:1104 + msgid "function body for constructor missing" + msgstr "corps de fonction pour le constructeur est manquante" + + #: cp/spew.c:1371 + msgid "circular dependency in default args of `%#D'" + msgstr "dépendance circulaire dans les arguments par défaut de «%#D»" + + #: cp/spew.c:1435 + msgid "invalid type `%T' for default argument to `%T'" + msgstr "type invalide « %T » pour l'argument par défaut « %T »" + + #: cp/spew.c:1495 + #, c-format + msgid "%s before `%s'" + msgstr "%s avant « %s »" + + #: cp/spew.c:1497 + #, c-format + msgid "%s before `%c'" + msgstr "%s avant « %c »" + + #: cp/spew.c:1499 + #, c-format + msgid "%s before `\\%o'" + msgstr "%s avant «\\%o»" + + #: cp/spew.c:1502 + #, c-format + msgid "%s before `%s' token" + msgstr "%s avantle jeton « %s »" + + #: cp/tree.c:224 + #, c-format + msgid "non-lvalue in %s" + msgstr "n'est pas un lvalue dans %s" + + #: cp/tree.c:578 + msgid "`%V' qualifiers cannot be applied to `%T'" + msgstr "qualificateur « %V » ne peut pas être appliqué à « %T »" + + #: cp/tree.c:581 + msgid "ignoring `%V' qualifiers on `%T'" + msgstr "qualificateurs « %V » ignorés pour « %T »" + + #: cp/tree.c:1920 + #, c-format + msgid "`%s' attribute can only be applied to Java class definitions" + msgstr "attribut « %s » peut seulement être appliqué aux définitions de classes Java" + + #: cp/tree.c:1950 + #, c-format + msgid "`%s' attribute can only be applied to class definitions" + msgstr "attribut « %s » peut seulement être appliqué aux définitions de classes" + + #: cp/tree.c:1956 + #, c-format + msgid "`%s' is obsolete; g++ vtables are now COM-compatible by default" + msgstr "« %s » est obsolète; vtables g++ sont maintenant COM-compatibles par défaut" + + #: cp/tree.c:1981 + msgid "requested init_priority is not an integer constant" + msgstr "init_priority demandé n'est pas une constante entière" + + #: cp/tree.c:2002 + #, c-format + msgid "can only use `%s' attribute on file-scope definitions of objects of class type" + msgstr "peut seulement utiliser l'attribut « %s » sur la portée de fichier de définitions des objets de type de classe" + + #: cp/tree.c:2010 + msgid "requested init_priority is out of range" + msgstr "init_priority demandé est hors gamme" + + #: cp/tree.c:2020 + msgid "requested init_priority is reserved for internal use" + msgstr "init_priority demandé est réservé pour un usage interne" + + #: cp/tree.c:2030 + #, c-format + msgid "`%s' attribute is not supported on this platform" + msgstr "attribut « %s » n'est pas supporté sur cette plate-forme" + + #: cp/typeck.c:518 + #, c-format + msgid "ISO C++ forbids %s between pointer of type `void *' and pointer-to-function" + msgstr "ISO C++ interdit %s entre les pointeurs de type « void * » et les pointeurs de fonctions" + + #: cp/typeck.c:539 + msgid "%s between distinct pointer types `%T' and `%T' lacks a cast" + msgstr "%s entre des types distincs de pointeurs « %T » et « %T » manque de transtypage" + + #: cp/typeck.c:1430 + msgid "ISO C++ prohibits conversion from `%#T' to `(...)'" + msgstr "ISO C++ interdit la conversion de «%#T» en « (...) »" + + #: cp/typeck.c:1500 + msgid "ISO C++ forbids applying `sizeof' to a function type" + msgstr "ISO C++ interdit l'application de « sizeof » sur un type de fonction" + + #: cp/typeck.c:1506 + msgid "ISO C++ forbids applying `sizeof' to a member function" + msgstr "ISO C++ interdit l'application de « sizeof » sur le membre d'une fonction" + + #: cp/typeck.c:1512 + msgid "ISO C++ forbids applying `sizeof' to type `void' which is an incomplete type" + msgstr "ISO C++ interdit l'application de « sizeof» sur un type «void » qui est un type incomplet" + + #: cp/typeck.c:1526 + msgid "`sizeof' applied to non-static member" + msgstr "« sizeof » appliqué à un membre non statique" + + #: cp/typeck.c:1531 + msgid "`sizeof' applied to incomplete type `%T'" + msgstr "« sizeof» appliqué sur un type incomplet «%T »" + + #: cp/typeck.c:1561 + msgid "sizeof applied to a bit-field" + msgstr "sizeof appliqué sur un champ de bits" + + #: cp/typeck.c:1564 + msgid "ISO C++ forbids applying `sizeof' to an expression of function type" + msgstr "ISO C++ interdit l'application de « sizeof » sur l'expression d'un type de fonction" + + #: cp/typeck.c:1711 + msgid "invalid use of non-lvalue array" + msgstr "utilisation invalide d'un tableau sans lvalue" + + #: cp/typeck.c:1817 + msgid "deprecated conversion from string constant to `%T'" + msgstr "conversion dépréciée de la chaîne de constante vers « %T »" + + #: cp/typeck.c:1835 + msgid "request for member `%T::%D' in expression of non-aggregate type `%T'" + msgstr "requête du membre «%T::%D» dans l'expression du type non aggrégat « %T »" + + #: cp/typeck.c:2030 + msgid "destructor specifier `%T::~%T' must have matching names" + msgstr "spécificateur du destructeur «%T::~%T» doit des noms concordants" + + #: cp/typeck.c:2036 + msgid "type `%T' has no destructor" + msgstr "type « %T » n'a pas de destructeur" + + #: cp/typeck.c:2053 cp/typeck.c:2135 + msgid "invalid use of type decl `%#D' as expression" + msgstr "utilisation invalide du type decl «%#D» comme expression" + + #: cp/typeck.c:2058 + msgid "invalid use of template `%#D' as expression" + msgstr "utilisation invalide du patron «%#D» comme expression" + + #: cp/typeck.c:2126 + msgid "`%#T' has no member named `%D'" + msgstr "«%#T» n'a pas de membre nommé « %D »" + + #: cp/typeck.c:2176 cp/typeck.c:2205 + msgid "invalid offsetof from non-POD type `%#T'; use pointer to member instead" + msgstr "offsetof invalide du type non POD «%#T»; utiliser un pointeur vers un membre à la place" + + #. A pointer to incomplete type (other than cv void) can be + #. dereferenced [expr.unary.op]/1 + #: cp/typeck.c:2316 + msgid "`%T' is not a pointer-to-object type" + msgstr "« %T » n'est pas un type pointeur-vers-objet" + + #: cp/typeck.c:2343 + #, c-format + msgid "invalid use of `%s' on pointer to member" + msgstr "utilisation invalide de « %s » sur un pointeur vers un membre" + + #: cp/typeck.c:2349 + msgid "invalid type argument" + msgstr "type d'argument invalide" + + #: cp/typeck.c:2452 + msgid "ISO C++ forbids subscripting non-lvalue array" + msgstr "ISO C++ interdit le souscriptage de non lvalue de tableau" + + #: cp/typeck.c:2463 + msgid "subscripting array declared `register'" + msgstr "souscriptage de tableau déclaré « register »" + + #: cp/typeck.c:2638 cp/typeck.c:2788 + msgid "pointer to member function called, but not in class scope" + msgstr "appel d'un pointeur vers un membre de fonction, mais n'est pas dans le champ de la classe" + + #: cp/typeck.c:2662 + msgid "object missing in call to method `%D'" + msgstr "objet manquant dans l'appel de la méthode « %D »" + + #: cp/typeck.c:2706 + msgid "function `%D' declared overloaded, but no definitions appear with which to resolve it?!?" + msgstr "fontion « %D » déclarée surchargée, mais aucune définition n'apparaît pour la résoudre?!?" + + #: cp/typeck.c:2786 + msgid "invalid call to member function needing `this' in static member function scope" + msgstr "appel invalide vers un membre de fonction ayant besoin de « ceci » dans le champ du membre statique de la fonction" + + #: cp/typeck.c:2965 + msgid "ISO C++ forbids calling `::main' from within program" + msgstr "ISO C++ interdit l'appel de «::main» à partir de l'intérieur du programme" + + #: cp/typeck.c:2990 + #, c-format + msgid "must use .* or ->* to call pointer-to-member function in `%E (...)'" + msgstr "doit utiliser .* ou ->* pour l'appel de la fonction pointer-to-member dans « %E (...) »" + + #: cp/typeck.c:3003 + #, c-format + msgid "`%E' cannot be used as a function" + msgstr "« %E » ne peut être utilisé comme une fonction" + + #: cp/typeck.c:3128 + msgid "too many arguments to %s `%+#D'" + msgstr "trop d'arguments pour %s «%+#D»" + + #: cp/typeck.c:3169 + msgid "parameter type of called function is incomplete" + msgstr "type de paramètre de la fonction appelée est incomplet" + + #: cp/typeck.c:3236 + msgid "too few arguments to %s `%+#D'" + msgstr "pas assez d'argument pour %s «%+#D»" + + #: cp/typeck.c:3364 cp/typeck.c:3374 + msgid "assuming cast to type `%T' from overloaded function" + msgstr "transtypage vers le type « %T » est assumé à partir de la fonction surchargée" + + #: cp/typeck.c:3434 + #, c-format + msgid "division by zero in `%E / 0'" + msgstr "division par zéro dans «%E / 0»" + + #: cp/typeck.c:3436 + #, c-format + msgid "division by zero in `%E / 0.'" + msgstr "division par zéro dans «%E / 0.»" + + #: cp/typeck.c:3466 + #, c-format + msgid "division by zero in `%E %% 0'" + msgstr "division par zéro dans «%E %% 0»" + + #: cp/typeck.c:3468 + #, c-format + msgid "division by zero in `%E %% 0.'" + msgstr "division par zéro dans «%E %% 0.»" + + #: cp/typeck.c:3548 + #, c-format + msgid "%s rotate count is negative" + msgstr "compteur de rotation %s est négatif" + + #: cp/typeck.c:3551 + #, c-format + msgid "%s rotate count >= width of type" + msgstr "compteur de rotation %s >= largeur du type" + + #: cp/typeck.c:3582 cp/typeck.c:3587 cp/typeck.c:3678 cp/typeck.c:3683 + msgid "ISO C++ forbids comparison between pointer and integer" + msgstr "ISO C++ interdit la comparaison entre un pointeur et un entier" + + #: cp/typeck.c:3863 + msgid "comparison between types `%#T' and `%#T'" + msgstr "comparaison entre les types «%#T» et «%#T»" + + #: cp/typeck.c:3899 + msgid "comparison between signed and unsigned integer expressions" + msgstr "comparaison entre des expressions entières signée et non signée" + + #: cp/typeck.c:3964 + msgid "invalid operands of types `%T' and `%T' to binary `%O'" + msgstr "opérandes invalides pour les types « %T » et « %T » en binaire « %O »" + + #. Some sort of arithmetic operation involving NULL was + #. performed. Note that pointer-difference and pointer-addition + #. have already been handled above, and so we don't end up here in + #. that case. + #: cp/typeck.c:3986 + msgid "NULL used in arithmetic" + msgstr "NULL utilisé en arithmétique" + + #: cp/typeck.c:4053 + msgid "ISO C++ forbids using pointer of type `void *' in subtraction" + msgstr "ISO C++ interdit l'utilisation d'un pointeur de type « void * » dans une soustraction" + + #: cp/typeck.c:4055 + msgid "ISO C++ forbids using pointer to a function in subtraction" + msgstr "ISO C++ interdit l'utilisation d'un pointeur survers une fonction dans une soustraction" + + #: cp/typeck.c:4057 + msgid "ISO C++ forbids using pointer to a method in subtraction" + msgstr "ISO C++ interdit l'utilisation d'un pointeur survers une méthode dans une soustraction" + + #: cp/typeck.c:4059 + msgid "ISO C++ forbids using pointer to a member in subtraction" + msgstr "ISO C++ interdit l'utilisation d'un pointeur vers un membre dans une soustraction" + + #: cp/typeck.c:4071 + msgid "invalid use of a pointer to an incomplete type in pointer arithmetic" + msgstr "utilisation invalide d'un pointeur vers un type incomplet dans un pointeur arithmétique" + + #: cp/typeck.c:4108 + msgid "attempt to take address of bit-field structure member `%D'" + msgstr "tentative de prise d'adresse du membre « %D » d'une structure de champ de bits" + + #: cp/typeck.c:4185 + msgid "taking address of temporary" + msgstr "prise de l'adresse du temporaire" + + #: cp/typeck.c:4387 + #, c-format + msgid "ISO C++ forbids %sing an enum" + msgstr "ISO C++ interdit %sing un enum" + + #: cp/typeck.c:4399 + msgid "cannot %s a pointer to incomplete type `%T'" + msgstr "ne peut utiliser %s comme pointeur sur un type incomplet « %T »" + + #: cp/typeck.c:4406 + msgid "ISO C++ forbids %sing a pointer of type `%T'" + msgstr "ISO C++ interdit %utilisation d'un pointeur de type « %T »" + + #: cp/typeck.c:4431 + msgid "cast to non-reference type used as lvalue" + msgstr "transtypage d'un type non référencé utilisé comme lvalue" + + #: cp/typeck.c:4465 + msgid "invalid use of `--' on bool variable `%D'" + msgstr "utilisation invalide de «--» sur une variable booléenne « %D »" + + #. ARM $3.4 + #: cp/typeck.c:4498 + msgid "ISO C++ forbids taking address of function `::main'" + msgstr "ISO C++ interdit de prendre l'adresse d'une fonction «::main»" + + #. An expression like &memfn. + #: cp/typeck.c:4565 + msgid "ISO C++ forbids taking the address of an unqualified non-static member function to form a pointer to member function. Say `&%T::%D'" + msgstr "ISO C++ interdit de prendre l'adress d'un membre de fonction non statique non qualifié pour former un pointeur d'un membre de fonction. Disons «&%T::%D»" + + #: cp/typeck.c:4567 + msgid "ISO C++ forbids taking the address of a bound member function to form a pointer to member function. Say `&%T::%D'" + msgstr "ISO C++ interdit de prendre l'adresse d'une borne d'un membre de fontion pour former un membre à la fonction. Disons «&%T::%D»" + + #: cp/typeck.c:4591 + msgid "ISO C++ forbids taking the address of a cast to a non-lvalue expression" + msgstr "ISO C++ interdit de prendre l'adresse du transtypage vers une expression non lvalue" + + #: cp/typeck.c:4607 + msgid "unary `&'" + msgstr "unaire «&»" + + #: cp/typeck.c:4727 + msgid "taking address of destructor" + msgstr "prise de l'adresse du destructeur" + + #: cp/typeck.c:4740 + msgid "taking address of bound pointer-to-member expression" + msgstr "prise de l'adresse de la borne de l'expression d'un pointeur-vers-un membre" + + #: cp/typeck.c:4756 + msgid "cannot create pointer to reference member `%D'" + msgstr "ne peut déclarer un pointeur vers le membre de référence « %D »" + + #: cp/typeck.c:4824 + msgid "cannot take the address of `this', which is an rvalue expression" + msgstr "ne peut prendre l'adresse de « ceci », laquelle est une expression rvalue" + + #: cp/typeck.c:4840 + msgid "address requested for `%D', which is declared `register'" + msgstr "adresse requise pour « %D», lequel est déclaré «register »" + + #: cp/typeck.c:5060 + msgid "static_cast from type `%T' to type `%T' casts away constness" + msgstr "static_cast du type « %T » vers le type « %T » fait un transtypage sans constante" + + #: cp/typeck.c:5068 + msgid "invalid static_cast from type `%T' to type `%T'" + msgstr "static_cast invalide du type « %T » au type « %T »" + + #: cp/typeck.c:5107 + msgid "invalid reinterpret_cast of an rvalue expression of type `%T' to type `%T'" + msgstr "reinterpret_cast invalide d'une expression rvalue de type « %T » vers le type « %T »" + + #: cp/typeck.c:5127 + msgid "reinterpret_cast from `%T' to `%T' loses precision" + msgstr "reinterpret_cast de « %T » vers « %T » génère une perte de précision" + + #: cp/typeck.c:5140 + msgid "reinterpret_cast from `%T' to `%T' casts away const (or volatile)" + msgstr "reinterpret_cast de « %T » vers « %T » fait un transtypage écartant la constante (ou volatile)" + + #: cp/typeck.c:5149 + msgid "ISO C++ forbids casting between pointer-to-function and pointer-to-object" + msgstr "ISO C++ interdit le transtypage entre un pointeur de fonction et un pointeur d'objet" + + #: cp/typeck.c:5155 + msgid "invalid reinterpret_cast from type `%T' to type `%T'" + msgstr "reinterpret_cast invalide à partir du type « %T » vers le type « %T »" + + #: cp/typeck.c:5182 + msgid "invalid use of const_cast with type `%T', which is not a pointer, reference, nor a pointer-to-data-member type" + msgstr "utilisation invalide de const_cast avec le type « %T », lequel n'est pas un pointeur, une référence, ni un type pointeur-vers-données-membre" + + #: cp/typeck.c:5185 + msgid "invalid use of const_cast with type `%T', which is a pointer or reference to a function type" + msgstr "utilisation invalide de const_cast avec le type « %T », lequel est un pointeur ou un référence à un type de fonction" + + #: cp/typeck.c:5208 + msgid "invalid const_cast of an rvalue of type `%T' to type `%T'" + msgstr "const_cast invalide de la rvalue du type « %T » vers le type « %T »" + + #: cp/typeck.c:5224 + msgid "invalid const_cast from type `%T' to type `%T'" + msgstr "const_cast invalide à partir du type « %T » vers le type « %T »" + + #: cp/typeck.c:5266 cp/typeck.c:5271 + msgid "ISO C++ forbids casting to an array type `%T'" + msgstr "ISO C++ interdit le transtypage vers un type tableau « %T »" + + #: cp/typeck.c:5279 + msgid "invalid cast to function type `%T'" + msgstr "transtypage invalide pour un type de fonction « %T »" + + #: cp/typeck.c:5331 + msgid "cast from `%T' to `%T' discards qualifiers from pointer target type" + msgstr "transtypage de « %T » vers « %T » écarte les qualificateurs du type cible du pointeur" + + #: cp/typeck.c:5377 + msgid "cast from `%T' to `%T' increases required alignment of target type" + msgstr "transtypage de « %T » vers « %T » augmente l'alignement requis pour le type ciblé" + + #: cp/typeck.c:5546 + msgid " in evaluation of `%Q(%#T, %#T)'" + msgstr " lors de l'évaluation de «%Q(%#T, %#T)»" + + #: cp/typeck.c:5588 + msgid "ISO C++ forbids cast to non-reference type used as lvalue" + msgstr "ISO C++ interdit le transtypage d'un type non référencé utilisé comme lvalue" + + #: cp/typeck.c:5659 + msgid "incompatible types in assignment of `%T' to `%T'" + msgstr "type incompatible dans l'affectation de « %T » vers « %T »" + + #: cp/typeck.c:5666 + msgid "ISO C++ forbids assignment of arrays" + msgstr "ISO C++ interdit l'affectation de tableaux" + + #: cp/typeck.c:5809 + msgid " in pointer to member function conversion" + msgstr " dans la conversion d'un pointeur vers un membre de fonction" + + #: cp/typeck.c:5817 + msgid " in pointer to member conversion" + msgstr " dans la conversion d'un pointeur vers un membre" + + #. This is a reinterpret cast, we choose to do nothing. + #: cp/typeck.c:5828 cp/typeck.c:5847 + msgid "pointer to member cast via virtual base `%T' of `%T'" + msgstr "pointeur vers un membre transtypé via la base virtuelle « %T » de « %T »" + + #: cp/typeck.c:5851 + msgid "pointer to member conversion via virtual base `%T' of `%T'" + msgstr "conversion de pointeur à membre à l'aide de la base virtuelle « %T » vers « %T »" + + #: cp/typeck.c:5921 + msgid "invalid conversion to type `%T' from type `%T'" + msgstr "conversion invalide vers un type « %T » à partir du type « %T »" + + #: cp/typeck.c:6086 + msgid "passing NULL used for non-pointer %s %P of `%D'" + msgstr "passage d'un NULL utilisé pour un non pointeur %s %P de « %D »" + + #: cp/typeck.c:6089 + msgid "%s to non-pointer type `%T' from NULL" + msgstr "%s vers un type non pointeur « %T » à partir d'un NULL" + + #: cp/typeck.c:6097 + msgid "passing `%T' for %s %P of `%D'" + msgstr "passage « %T » pour %s %P de « %D »" + + #: cp/typeck.c:6100 + msgid "%s to `%T' from `%T'" + msgstr "%s vers « %T » à partir de « %T »" + + #: cp/typeck.c:6110 + msgid "passing negative value `%E' for %s %P of `%D'" + msgstr "passage de valeur négative « %E » pour %s %P de « %D »" + + #: cp/typeck.c:6113 + msgid "%s of negative value `%E' to `%T'" + msgstr "%s de valeur négative « %E » vers « %T »" + + #: cp/typeck.c:6200 + msgid "cannot convert `%T' to `%T' for argument `%P' to `%D'" + msgstr "ne peut convertir « %T » à « %T » pour l'argument « %P » vers « %D »" + + #: cp/typeck.c:6203 + msgid "cannot convert `%T' to `%T' in %s" + msgstr "ne peut convertir « %T » vers « %T » dans %s" + + #: cp/typeck.c:6290 cp/typeck.c:6292 + msgid "in passing argument %P of `%+D'" + msgstr "dans le passage de l'argument %P de «%+D»" + + #: cp/typeck.c:6406 + msgid "returning reference to temporary" + msgstr "retourné la référence vers le temporaire" + + #: cp/typeck.c:6413 + msgid "reference to non-lvalue returned" + msgstr "référence vers un non lvalue a été retourné" + + #: cp/typeck.c:6425 + msgid "reference to local variable `%D' returned" + msgstr "référence vers une variable locale « %D » retourné" + + #: cp/typeck.c:6428 + msgid "address of local variable `%D' returned" + msgstr "adresse d'une variable locale « %D » retournée" + + #: cp/typeck.c:6459 + msgid "returning a value from a destructor" + msgstr "retourné une valeur du destructeur" + + #. If a return statement appears in a handler of the + #. function-try-block of a constructor, the program is ill-formed. + #: cp/typeck.c:6467 + msgid "cannot return from a handler of a function-try-block of a constructor" + msgstr "ne peut retourner d'un handler d'une fonction try-block d'un constructeur" + + #. You can't return a value from a constructor. + #: cp/typeck.c:6470 + msgid "returning a value from a constructor" + msgstr "retourné une valeur d'un constructeur" + + #: cp/typeck.c:6487 + msgid "return-statement with no value, in function declared with a non-void return type" + msgstr "déclaration d'un retour sans valeur, dans la fonction déclarée avec un type retourné non void" + + #: cp/typeck.c:6503 + msgid "return-statement with a value, in function declared with a void return type" + msgstr "déclaration d'un retour sans valeur, dans la fonction déclarée avec un type retourné void" + + #: cp/typeck.c:6524 + msgid "`operator new' must not return NULL unless it is declared `throw()' (or -fcheck-new is in effect)" + msgstr "« operator new» ne doit pas retourner NULL à moins qu'il ne soit déclaré «throw() » (ou -fcheck-new est utilisée)" + + #: cp/typeck2.c:54 + msgid "type `%T' is not a base type for type `%T'" + msgstr "type « %T » n'est pas un type de base pour le type « %T »" + + #: cp/typeck2.c:151 + msgid "cannot declare variable `%D' to be of type `%T'" + msgstr "ne peut déclarer la variable « %D » comme étant de type « %T »" + + #: cp/typeck2.c:154 + msgid "cannot declare parameter `%D' to be of type `%T'" + msgstr "ne peut déclarer la paramètre « %D » comme étant de type « %T »" + + #: cp/typeck2.c:157 + msgid "cannot declare field `%D' to be of type `%T'" + msgstr "ne peut déclarer la champ « %D » comme étant de type « %T »" + + #: cp/typeck2.c:161 + msgid "invalid return type for member function `%#D'" + msgstr "type retourné invalide pour le membre de la fonction «%#D»" + + #: cp/typeck2.c:163 + msgid "invalid return type for function `%#D'" + msgstr "type retourné invalide pour la fonction «%#D»" + + #: cp/typeck2.c:166 + msgid "cannot allocate an object of type `%T'" + msgstr "ne peut allouer un objet de type « %T »" + + #: cp/typeck2.c:173 + msgid " because the following virtual functions are abstract:" + msgstr " parce que les fonctions viruelles suivantes sont abstraites:" + + #: cp/typeck2.c:175 + msgid "\t%#D" + msgstr "\t%#D" + + #: cp/typeck2.c:178 + msgid " since type `%T' has abstract virtual functions" + msgstr " depuis que le type « %T » a des fonctions virtuelles abstraites" + + #: cp/typeck2.c:213 + msgid "invalid use of undefined type `%#T'" + msgstr "utilisation invalide d'un type indéfini «%#T»" + + #: cp/typeck2.c:214 + msgid "forward declaration of `%#T'" + msgstr "déclaration par l'avant (forward) de «%#T»" + + #: cp/typeck2.c:218 + msgid "invalid use of `%T'" + msgstr "utilisation invalide de « %T »" + + #: cp/typeck2.c:232 + msgid "invalid use of member (did you forget the `&' ?)" + msgstr "utilisation invalide de membre (avez-vous oublié le «&» ?)" + + #: cp/typeck2.c:236 + msgid "invalid use of template type parameter" + msgstr "utilisation invalide de patron de type de paramètres" + + #: cp/typeck2.c:243 + msgid "address of overloaded function with no contextual type information" + msgstr "adresse de la fonction surchargée sans information contextuelle de type" + + #: cp/typeck2.c:245 + msgid "overloaded function with no contextual type information" + msgstr "fonction surchargée sans information contextuelle de type" + + #: cp/typeck2.c:247 + msgid "insufficient contextual information to determine type" + msgstr "information contextuelle insuffisante pour déterminer le type" + + #: cp/typeck2.c:301 + msgid "constructor syntax used, but no constructor declared for type `%T'" + msgstr "syntaxe de constructeur utilisé mais aucun constructeur déclaré pour le type « %T »" + + #: cp/typeck2.c:311 + msgid "initializer list construction invalid for derived class object `%D'" + msgstr "initialiseur de construction de liste invalide pour l'objet de classe dérivée « %D »" + + #: cp/typeck2.c:313 + msgid "initializer list construction invalid for polymorphic class object `%D'" + msgstr "initialiseur de construction de liste invalide pour l'objet de classe polymorphique « %D »" + + #: cp/typeck2.c:316 cp/typeck2.c:322 cp/typeck2.c:328 + msgid "initializer list construction invalid for `%D'" + msgstr "construction de la liste d'initialiseurs invalide pour « %D »" + + #: cp/typeck2.c:317 + msgid "due to the presence of a constructor" + msgstr "en raison de la présence d'un constructeur" + + #: cp/typeck2.c:323 cp/typeck2.c:329 + msgid "due to non-public access of member `%D'" + msgstr "en raison d'un accès non public du membre « %D »" + + #: cp/typeck2.c:341 + msgid "comma expression used to initialize return value" + msgstr "expression virgule utilsée pour initialiser la valeur de retour" + + #: cp/typeck2.c:350 + msgid "cannot initialize arrays using this syntax" + msgstr "ne peut initialiser les tableaux en utilisant la syntaxe" + + #: cp/typeck2.c:412 + msgid "ISO C++ forbids non-constant aggregate initializer expressions" + msgstr "ISO C++ interdit les expressions d'initialiseur d'aggrégat de non constante" + + #: cp/typeck2.c:498 + msgid "initializing array with parameter list" + msgstr "initialise le tableau avec la liste des paramètres" + + #: cp/typeck2.c:554 + msgid "initializer for scalar variable requires one element" + msgstr "initialiseur pour la variable scalaire requiert un élément" + + #: cp/typeck2.c:561 + msgid "braces around scalar initializer for `%T'" + msgstr "accolades autour de l'initialiseur scalaire pour « %T »" + + #: cp/typeck2.c:564 + msgid "ignoring extra initializers for `%T'" + msgstr "initialiseurs superflus ignorés pour « %T »" + + #: cp/typeck2.c:576 + msgid "variable-sized object of type `%T' may not be initialized" + msgstr "objet de taille variable de type « %T » peut ne pas être initialisé" + + #: cp/typeck2.c:586 + msgid "subobject of type `%T' must be initialized by constructor, not by `%E'" + msgstr "sous-objet de type « %T » doit être initialisé par un constructeur, non pas par « %E »" + + #: cp/typeck2.c:652 + msgid "aggregate has a partly bracketed initializer" + msgstr "aggrégat a un initialiseur partiellement entourée d'accolades" + + #: cp/typeck2.c:690 cp/typeck2.c:791 + msgid "non-trivial labeled initializers" + msgstr "initialiseur étiquetée non trivial" + + #: cp/typeck2.c:707 + msgid "non-empty initializer for array of empty elements" + msgstr "initialiseurs non vides pour le tableau d'éléments vides" + + #: cp/typeck2.c:757 + msgid "initializer list for object of class with virtual base classes" + msgstr "liste d'initialiseurs pour les objets de classe avec classes de base virtuelles" + + #: cp/typeck2.c:763 + msgid "initializer list for object of class with base classes" + msgstr "liste d'initialiseurs pour les objets de classe avec classes de base" + + #: cp/typeck2.c:769 + msgid "initializer list for object using virtual functions" + msgstr "liste d'initialiseurs pour objet utilisant des fonctions virtuelles" + + #: cp/typeck2.c:832 cp/typeck2.c:849 + msgid "missing initializer for member `%D'" + msgstr "initialiseur manquant pour le membre « %D »" + + #: cp/typeck2.c:837 + msgid "uninitialized const member `%D'" + msgstr "membre de constante non initialisé pour « %D »" + + #: cp/typeck2.c:840 + msgid "member `%D' with uninitialized const fields" + msgstr "membre « %D » avec des champs de constantes non initialisée" + + #: cp/typeck2.c:843 + msgid "member `%D' is uninitialized reference" + msgstr "membre « %D » est une référence non initialisée" + + #: cp/typeck2.c:886 + msgid "index value instead of field name in union initializer" + msgstr "valeur index au lieu du nom de champ dans l'initialiseur d'union" + + #: cp/typeck2.c:898 + msgid "no field `%D' in union being initialized" + msgstr "pas de champ « %D » dans l'aggrégat n'a été initialisé" + + #: cp/typeck2.c:906 + msgid "union `%T' with no named members cannot be initialized" + msgstr "aggrégat « %T » sans mambre nommé ne peut être initialisé" + + #: cp/typeck2.c:942 + msgid "excess elements in aggregate initializer" + msgstr "éléments en excès dans l'initialiseur d'aggrégat" + + #: cp/typeck2.c:1047 + msgid "circular pointer delegation detected" + msgstr "délégation de pointeur circulaire détecté" + + #: cp/typeck2.c:1060 + msgid "base operand of `->' has non-pointer type `%T'" + msgstr "l'opérande de base de «->» a un type non pointeur « %T »" + + #: cp/typeck2.c:1074 + msgid "result of `operator->()' yields non-pointer result" + msgstr "résultat de « operator->() » laisse comme résultat un non pointeur" + + #: cp/typeck2.c:1076 + msgid "base operand of `->' is not a pointer" + msgstr "l'opérande de base de «->» n'est pas un pointeur" + + #: cp/typeck2.c:1142 + msgid "`%E' cannot be used as a member pointer, since it is of type `%T'" + msgstr "« %E » ne peut être utilisé comme pointeur de membre, alors qu'il est de type « %T »" + + #: cp/typeck2.c:1149 + msgid "cannot apply member pointer `%E' to `%E', which is of non-aggregate type `%T'" + msgstr "ne peut appliquer un pointeur de membre « %E » à « %E », lequel n'est pas un type d'aggrégat « %T »" + + #: cp/typeck2.c:1158 + msgid "member type `%T::' incompatible with object type `%T'" + msgstr "type du membre «%T::» incompatible avec le type d'objet « %T »" + + #: cp/typeck2.c:1195 + msgid "`%T' fails to be a typedef or built-in type" + msgstr "« %T » a échoué à devenir un typedef ou un type construit interne" + + #: cp/typeck2.c:1268 + #, c-format + msgid "ISO C++ forbids defining types within %s" + msgstr "ISO C++ interdit la définition de types à l'intérieur de %s" + + #. XXX Not i18n clean. + #: cp/cp-tree.h:3854 + #, c-format + msgid "%s is deprecated, please see the documentation for details" + msgstr "%s est déprécié, SVP voir la documentation pour les détails" + + #: cp/lang-options.h:29 + msgid "Do not obey access control semantics" + msgstr "Ne pas obéir à la sémantique du contrôle d'accès" + + #: cp/lang-options.h:31 + msgid "Change when template instances are emitted" + msgstr "Changer lorsque les instances du patron sont produites" + + #: cp/lang-options.h:36 + msgid "Check the return value of new" + msgstr "Vérifier la valeur retournée de new" + + #: cp/lang-options.h:39 + msgid "Reduce size of object files" + msgstr "Réduire la taille des fichiers objets" + + #: cp/lang-options.h:43 + msgid "Make string literals `char[]' instead of `const char[]'" + msgstr "Rendre les chaînes de mots « char[] » au lieu de «const char[]'" + + #: cp/lang-options.h:46 + msgid "Dump the entire translation unit to a file" + msgstr "Vidanger l'unité de traduction complète dans un fichier" + + #: cp/lang-options.h:48 + msgid "Do not inline member functions by default" + msgstr "Ne pas rendre en ligne un membre de fonction par défaut" + + #: cp/lang-options.h:51 + msgid "Do not generate run time type descriptor information" + msgstr "Ne pas générer l'information pour un type de descripteur pour l'exécution" + + #: cp/lang-options.h:56 + msgid "Do not generate code to check exception specifications" + msgstr "Ne pas générer du code pour vérifier les exceptions spécifiques" + + #: cp/lang-options.h:61 + msgid "Scope of for-init-statement vars extends outside" + msgstr "Champs de variables for-init-statement s'étend en dehors" + + #: cp/lang-options.h:64 + msgid "Do not recognize GNU defined keywords" + msgstr "Ne pas reconnaître les mots clés définis GNU" + + #: cp/lang-options.h:68 + msgid "Enable support for huge objects" + msgstr "Autoriser le support des grands objets" + + #: cp/lang-options.h:72 + msgid "Export functions even if they can be inlined" + msgstr "Exporter les fonctions même si elles peuvent être inline" + + #: cp/lang-options.h:75 + msgid "Only emit explicit template instatiations" + msgstr "Produire seulement des instanciations explicites du patron" + + #: cp/lang-options.h:78 + msgid "Only emit explicit instatiations of inline templates" + msgstr "Produire les instanciations explicites de patrons en ligne" + + #: cp/lang-options.h:84 + msgid "Don't pedwarn about uses of Microsoft extensions" + msgstr "Ne pas avertir et publiciser l'utilisation des extensions de Microsoft" + + #: cp/lang-options.h:87 + msgid "Recognize and/bitand/bitor/compl/not/or/xor" + msgstr "Reconnaître and/bitand/bitor/compl/not/or/xor" + + #: cp/lang-options.h:91 + msgid "Disable optional diagnostics" + msgstr "Désactiver les diagnostiques optionnels" + + #: cp/lang-options.h:93 + msgid "Downgrade conformance errors to warnings" + msgstr "Dégrader les erreurs de conformité en des avertissements" + + #: cp/lang-options.h:96 + msgid "Enable automatic template instantiation" + msgstr "Autoriser l'instanciation automatique de patron" + + #: cp/lang-options.h:101 + msgid "Display statistics accumulated during compilation" + msgstr "Afficher les statistiques accumulés durant la compilation" + + #: cp/lang-options.h:104 + msgid "Specify maximum template instantiation depth" + msgstr "Spécifier la profondeur maximale d'instanciation de patrons" + + #: cp/lang-options.h:106 + msgid "Use __cxa_atexit to register destructors" + msgstr "Utiliser « __cxa_atexit » pour enregistrer les destructeurs." + + #: cp/lang-options.h:109 + msgid "Discard unused virtual functions" + msgstr "Écarter les fonctions virtuelles non utilisées" + + #: cp/lang-options.h:112 + msgid "Implement vtables using thunks" + msgstr "Implanter les vtables en utilisant des thunks" + + #: cp/lang-options.h:115 + msgid "Emit common-like symbols as weak symbols" + msgstr "Produire les symboles communs comme des symboles faibles" + + #: cp/lang-options.h:118 + msgid "Emit cross referencing information" + msgstr "Produire l'information des références croisées" + + #: cp/lang-options.h:122 + msgid "Warn about inconsistent return types" + msgstr "Avertir à propos des types retournés inconsistants" + + #: cp/lang-options.h:125 + msgid "Warn about overloaded virtual function names" + msgstr "Avertir à propos de la surcharge des noms de fonctions virtuelles" + + #: cp/lang-options.h:129 + msgid "Don't warn when all ctors/dtors are private" + msgstr "Ne pas avertir lorsque toues les ctors/dtors sont privés" + + #: cp/lang-options.h:131 + msgid "Warn about non virtual destructors" + msgstr "Avertir à propos des destructeurs non virtuels" + + #: cp/lang-options.h:134 + msgid "Warn when a function is declared extern, then inline" + msgstr "Avertir lorsqu'un fonction est déclarée extern, puis inline" + + #: cp/lang-options.h:137 + msgid "Warn when the compiler reorders code" + msgstr "Avertir lorsque le compilateur réordonne le code" + + #: cp/lang-options.h:140 + msgid "Warn when synthesis behavior differs from Cfront" + msgstr "Avertir lorsque le comportement de synthère diffère de Cfront" + + #: cp/lang-options.h:144 + msgid "Don't warn when type converting pointers to member functions" + msgstr "Ne pas avertir lors de la conversion des types de pointeur en membres de fonctions" + + #: cp/lang-options.h:146 + msgid "Warn about violations of Effective C++ style rules" + msgstr "Avertir à propos des violations des règles de style de Effective C++" + + #: cp/lang-options.h:149 + msgid "Warn when overload promotes from unsigned to signed" + msgstr "Avertir lorsque la surcharge fait la promotion d'un non signé en signé" + + #: cp/lang-options.h:152 + msgid "Warn if a C style cast is used in a program" + msgstr "Avertir si le style de transtypage C est utilisé dans un programme" + + #: cp/lang-options.h:156 + msgid "Don't warn when non-templatized friend functions are declared within a template" + msgstr "Ne pas avertir lorsque des fonctions amis sans patron sont déclarés à l'intérieur d'un patron" + + #: cp/lang-options.h:159 + msgid "Don't announce deprecation of compiler features" + msgstr "Ne pas annoncer la dépréciation des options du compilateur" + + #: f/bad.c:386 + msgid "note:" + msgstr "note:" + + #: f/bad.c:390 + msgid "warning:" + msgstr "AVERTISSEMENT:" + + #: f/bad.c:394 + msgid "fatal:" + msgstr "FATAL:" + + #: f/bad.c:436 + msgid "(continued):" + msgstr "(poursuite)" + + #: f/bad.c:486 f/bad.c:504 + msgid "[REPORT BUG!!] %" + msgstr "[RAPPORTER L'ANOMALIE!!]" + + #: f/bad.c:493 f/bad.c:525 + msgid "[REPORT BUG!!]" + msgstr "[RAPPORTER L'ANOMALIE!!]" + + #: f/com.c:3122 + #, no-c-format + msgid "ASSIGN'ed label cannot fit into `%A' at %0 -- using wider sibling" + msgstr "l'étiquette affectée ne peut s'insérer dans « %A » à %0 - utilisation d'un voisinage plus grand" + + #: f/com.c:11606 + msgid "no INTEGER type can hold a pointer on this configuration" + msgstr "AUCUN type ENTIER ne peut tenir un pointeur sur cette configuration" + + #: f/com.c:11831 + #, c-format + msgid "configuration: REAL, INTEGER, and LOGICAL are %d bits wide," + msgstr "configuration: REAL, INTEGER, et LOGICAL ont %d bits," + + #: f/com.c:11833 + #, c-format + msgid "and pointers are %d bits wide, but g77 doesn't yet work" + msgstr "et les pointeura ont %d bits, mais g77 ne fonctionne pas encore" + + #: f/com.c:11835 + msgid "properly unless they all are 32 bits wide" + msgstr "correctement à moins qu'ils aient tous 32 bits de largeur" + + #: f/com.c:11836 + msgid "Please keep this in mind before you report bugs." + msgstr "SVP garder cela en tête avant de rapporter les anomalies." + + #. I/O will probably crash. + #: f/com.c:11844 + #, c-format + msgid "configuration: char * holds %d bits, but ftnlen only %d" + msgstr "configuration: char * contient %d bits, mais ftnlen seulement %d" + + #. ASSIGN 10 TO I will crash. + #: f/com.c:11853 + #, c-format + msgid "" + "configuration: char * holds %d bits, but INTEGER only %d --\n" + " ASSIGN statement might fail" + msgstr "" + "configuration: char * contient %d bits, mais INTEGER seulement %d --\n" + " déclaration ASSIGN pourrait échouer" + + #: f/com.c:13687 + msgid "In statement function" + msgstr "Dans la déclaration de fonction" + + #: f/com.c:13697 + msgid "Outside of any program unit:\n" + msgstr "En dehors de toute unité de programme:\n" + + #: f/com.c:15386 + #, no-c-format + msgid "%A from %B at %0%C" + msgstr "%A à partir de %B à %0%C" + + #: f/com.c:15563 + msgid "directory name must immediately follow -I" + msgstr "nom du répertoire doit suivre immédiatement -I" + + #: f/com.c:15706 + #, no-c-format + msgid "At %0, INCLUDE file %A exists, but is not readable" + msgstr "À %0, fichier INCLUDE %A existe mais n'est pas lisible" + + #: f/com.c:15741 + #, no-c-format + msgid "At %0, INCLUDE nesting too deep" + msgstr "À %0, imbrication du INCLUDE est trop profonde" + + #: f/expr.c:9613 + #, no-c-format + msgid "Two arithmetic operators in a row at %0 and %1 -- use parentheses" + msgstr "Deux opérateurs arithmétiques dans la rangée à %0 et %1 -- utiliser des parenthèses" + + #: f/expr.c:9663 + #, no-c-format + msgid "Operator at %0 has lower precedence than that at %1 -- use parentheses" + msgstr "L'opérateur à %0 a une précédence plus basse que celui à %1 -- utiliser des parenthèses" + + #: f/expr.c:10524 + #, no-c-format + msgid "Use .EQV./.NEQV. instead of .EQ./.NE. at %0 for LOGICAL operands at %1 and %2" + msgstr "Utiliser .EQV./.NEQV. au lieu de .EQ./.NE. à %0 pour les opérandes LOGICAL à %1 et %2" + + #: f/expr.c:10895 + #, no-c-format + msgid "Unsupported operand for ** at %1 -- converting to default INTEGER" + msgstr "Opérande non supportée pour ** à %1 -- conversion à INTEGER par défaut" + + #: f/g77spec.c:256 + #, c-format + msgid "overflowed output arg list for `%s'" + msgstr "débordement de la liste d'arguments de sortie pour « %s »" + + #: f/g77spec.c:395 + msgid "--driver no longer supported" + msgstr "--driver n'est plus supporté" + + #: f/g77spec.c:408 + #, c-format + msgid "argument to `%s' missing" + msgstr "argument pour « %s » est manquant" + + #: f/g77spec.c:412 + msgid "no input files; unwilling to write output files" + msgstr "aucun fichier d'entrée; pas d'accord pour écrire dans les fichiers de sortie" + + #: f/implic.c:203 + #, no-c-format + msgid "Implicit declaration of `%A' at %0" + msgstr "déclaration implicite de « %A » à %0" + + #: f/lex.c:274 + #, no-c-format + msgid "The meaning of `\\x' (at %0) varies with -traditional" + msgstr "La signification de «\\x» (à %0) varie avec l'option -traditional" + + #: f/lex.c:325 + #, no-c-format + msgid "The meaning of `\\a' (at %0) varies with -traditional" + msgstr "La signification de «\\a»(à %0) varie avec -traditional" + + #: f/lex.c:355 + #, no-c-format + msgid "Non-ISO-C-standard escape sequence `\\%A' at %0" + msgstr "séquence d'échappement non conforme au standard ISO-C «\\%A» à %0" + + #: f/lex.c:374 + #, no-c-format + msgid "Unknown escape sequence `\\%A' at %0" + msgstr "séquence d'échappement inconnue «\\%A» à %0" + + #: f/lex.c:383 + #, no-c-format + msgid "Unterminated escape sequence `\\' at %0" + msgstr "séquence d'échappement non terminée «\\» at %0" + + #: f/lex.c:394 + #, no-c-format + msgid "Unknown escape sequence `\\' followed by char code 0x%A at %0" + msgstr "séquence d'échappement inconnue «\\» suivi par le code de caractères 0x%A at %0" + + #: f/lex.c:422 + #, no-c-format + msgid "\\x used at %0 with no following hex digits" + msgstr "\\x utilisé à %0 sans être suivi des chiffres hexdécimaux" + + #: f/lex.c:436 + #, no-c-format + msgid "Hex escape at %0 out of range" + msgstr "échappement hexadécimal à %0 hors gamme" + + #: f/lex.c:470 + #, no-c-format + msgid "Escape sequence at %0 out of range for character" + msgstr "séquence d'échappement à %0 hors gamme pour le type caractère" + + #: f/lex.c:593 + msgid "the meaning of `\\x' varies with -traditional" + msgstr "la signification de «\\x» varie avec l'option -traditional" + + #: f/lex.c:630 + msgid "hex escape out of range" + msgstr "échappement hexadécimal hors gamme" + + #: f/lex.c:676 + msgid "the meaning of `\\a' varies with -traditional" + msgstr "le sens de «\\a» varie avec -traditional" + + #: f/lex.c:692 + #, c-format + msgid "non-ANSI-standard escape sequence, `\\%c'" + msgstr "séquence d'échappement n'est pas ANSI standard: «\\%c'" + + #: f/lex.c:705 + #, c-format + msgid "non-ISO escape sequence `\\%c'" + msgstr "séquence d'échappement non ISO «\\%c'" + + #: f/lex.c:709 + #, c-format + msgid "unknown escape sequence `\\%c'" + msgstr "séquence d'échappement inconnue: «\\%c'" + + #: f/lex.c:711 + #, c-format + msgid "unknown escape sequence: `\\' followed by char code 0x%x" + msgstr "séquence d'échappement inconnue: «\\» suivi par le code de caractères 0x%x" + + #: f/lex.c:788 + msgid "badly formed directive -- no closing quote" + msgstr "directive mal composée -- pas de guillement ou d'apostrophe de fermeture" + + #: f/lex.c:846 + msgid "#-lines for entering and leaving files don't match" + msgstr "#-lines pour entrer et quitter les fichiers ne concordent pas" + + #: f/lex.c:1008 + msgid "bad directive -- missing close-quote" + msgstr "directive erronée -- manque un apostrophe ou un guillemet de fermeture" + + #: f/lex.c:1122 + #, c-format + msgid "ignoring pragma: %s" + msgstr "pragma: %s ignoré" + + #: f/lex.c:1200 + msgid "invalid #ident" + msgstr "#ident invalide" + + #: f/lex.c:1217 + msgid "undefined or invalid # directive" + msgstr "directive # non définie ou invalide" + + #: f/lex.c:1273 + msgid "invalid #line" + msgstr "#line invalide" + + #: f/lex.c:1329 f/lex.c:1373 + msgid "use `#line ...' instead of `# ...' in first line" + msgstr "utiliser « #line ... » au lieu de « # ... » dans la première ligne" + + #: f/lex.c:1383 + msgid "invalid #-line" + msgstr "#-line invalide" + + #: f/lex.c:1476 + #, no-c-format + msgid "Null character at %0 -- line ignored" + msgstr "caractère null à %0 -- ligne ignorée" + + #: f/stb.c:12078 + #, no-c-format + msgid "INCLUDE at %0 not the only statement on the source line" + msgstr "INCLUDE à %0 n'est pas la seule déclaration sur la ligne source" + + #: f/ste.c:1404 f/ste.c:1755 + msgid "ASSIGNed FORMAT specifier is too small" + msgstr "spécificateur dans ASSIGN FORMAT est trop petit" + + #. ~~~Someday handle CHARACTER*1, CHARACTER*N + #: f/ste.c:2636 + #, no-c-format + msgid "SELECT CASE on CHARACTER type (at %0) not supported -- sorry" + msgstr "SÉLECTION du CASE sur un type CHARACTER (à %0) n'est pas supporté -- désolé" + + #: f/ste.c:2965 + msgid "ASSIGN to variable that is too small" + msgstr "ASSIGN à la variable est trop petit" + + #: f/ste.c:2993 + msgid "ASSIGNed GOTO target variable is too small" + msgstr "variable cible par ASSIGN GOTO est trop petite" + + #: f/stu.c:305 + #, no-c-format + msgid "Local adjustable symbol `%A' at %0" + msgstr "Symbole local ajustable « %A » à %0" + + #: f/target.c:2560 + msgid "data initializer on host with different endianness" + msgstr "initialiseur de données sur l'hôte a un alignement des octets différent (endian)" + + #: f/top.c:238 + #, c-format + msgid "%s no longer supported -- try -fvxt" + msgstr "%s n'est plus supporté -- essayer -fvxt" + + #: f/top.c:240 + #, c-format + msgid "%s no longer supported -- try -fno-vxt -ff90" + msgstr "%s n'est plus supporté -- essayer -fno-vxt -ff90" + + #: f/top.c:308 f/top.c:310 + #, c-format + msgid "%s disabled, use normal debugging flags" + msgstr "%s désactivé, utiliser le fanion normal de mise au point" + + #: f/lang-options.h:33 + msgid "Print g77-specific compiler version info, run internal tests" + msgstr "Afficher les informations de version du compilateur g77-specific, exécuter les tests internes" + + #: f/lang-options.h:37 + msgid "Program is written in typical FORTRAN 66 dialect" + msgstr "Programme est écrit dans un dialecte typique FORTRAN 66" + + #: f/lang-options.h:40 + msgid "Program is written in typical Unix f77 dialect" + msgstr "Programme est écrit dans un dialecte typique Unix f77" + + #: f/lang-options.h:42 + msgid "Program does not use Unix-f77 dialectal features" + msgstr "Programme n'utilise pas les options du dialecte Unix f77" + + #: f/lang-options.h:44 + msgid "Program is written in Fortran-90-ish dialect" + msgstr "Programme est écrit dans un dialecte Fortran 90" + + #: f/lang-options.h:48 + msgid "Treat local vars and COMMON blocks as if they were named in SAVE statements" + msgstr "Traiter les var. locales et les blocs COMMON tel que s'ils étaient nommés dans une déclaration SAVE" + + #: f/lang-options.h:50 + msgid "Allow $ in symbol names" + msgstr "Permettre $ dans les noms de symboles" + + #: f/lang-options.h:54 + msgid "f2c-compatible code need not be generated" + msgstr "code f2c compatible n'a pas besoin d'être généré" + + #: f/lang-options.h:57 + msgid "Unsupported; do not generate libf2c-calling code" + msgstr "Non supporté; ne pas générer le code d'appel libf2c" + + #: f/lang-options.h:59 + msgid "Unsupported; affects code-generation of arrays" + msgstr "Non supporté; affecte la génération de code des tableaux" + + #: f/lang-options.h:62 + msgid "Program is written in Fortran-90-ish free form" + msgstr "Programme est écrit dans un style libre Fortran 90" + + #: f/lang-options.h:67 + msgid "Warn about use of (only a few for now) Fortran extensions" + msgstr "Avertir à propos de l'utilisation (très peu pour l'instant) des extensions Fortran" + + #: f/lang-options.h:70 + msgid "Program is written in VXT (Digital-like) FORTRAN" + msgstr "Programme est écrit en Fortran VXT (forme de Digital)" + + #: f/lang-options.h:73 + msgid "Disallow all ugly features" + msgstr "Désactiver toutes les options laides" + + #: f/lang-options.h:76 + msgid "Hollerith and typeless constants not passed as arguments" + msgstr "Les constantes Hollerith et sans type ne sont pas passés comme arguments" + + #: f/lang-options.h:78 + msgid "Allow ordinary copying of ASSIGN'ed vars" + msgstr "Permettre le copie ordinaire des variable affectées" + + #: f/lang-options.h:81 + msgid "Dummy array dimensioned to (1) is assumed-size" + msgstr "Tableau factice dont la taille des dimensions (1) est assumée" + + #: f/lang-options.h:84 + msgid "Trailing comma in procedure call denotes null argument" + msgstr "Virgule de fin dans l'appel de la procédure dénote un argument nul" + + #: f/lang-options.h:87 + msgid "Allow REAL(Z) and AIMAG(Z) given DOUBLE COMPLEX Z" + msgstr "Permettre REAL(Z) et AIMAG(Z) pour les DOUBLE COMPLEX Z" + + #: f/lang-options.h:91 + msgid "Initialization via DATA and PARAMETER is type-compatible" + msgstr "Initialisation via DATA et PARAMETER est un de types compatibles" + + #: f/lang-options.h:93 + msgid "Allow INTEGER and LOGICAL interchangeability" + msgstr "Permettre l'interchangeabilité de INTEGER et LOGICAL" + + #: f/lang-options.h:96 + msgid "Print internal debugging-related info" + msgstr "Afficher les informations internes reliées à la mise au point" + + #: f/lang-options.h:99 + msgid "Initialize local vars and arrays to zero" + msgstr "Initialiser les vars locales et les tableaux à zéro" + + #: f/lang-options.h:103 + msgid "Backslashes in character/hollerith constants not special (C-style)" + msgstr "Barres obliques inverses dans les constantes caractères/hollerith ne sont pas particulières (style C)" + + #: f/lang-options.h:105 + msgid "Have front end emulate COMPLEX arithmetic to avoid bugs" + msgstr "Avoir un frontal d'émulation pour l'arithmétique COMPLEXE pour éviter les bugs" + + #: f/lang-options.h:109 + msgid "Disable the appending of underscores to externals" + msgstr "Désactiver l'ajout de caractères de soulignement aux externes" + + #: f/lang-options.h:112 + msgid "Never append a second underscore to externals" + msgstr "Ne jamais ajouter un second caractères de soulignement aux externes" + + #: f/lang-options.h:114 + msgid "Intrinsics spelled as e.g. SqRt" + msgstr "Intrinsèques épellées tel que SqRt" + + #: f/lang-options.h:116 + msgid "Intrinsics in uppercase" + msgstr "Intrinsèques en majuscules" + + #: f/lang-options.h:119 + msgid "Intrinsics letters in arbitrary cases" + msgstr "Lettres d'instrinsèques en casse arbitraire" + + #: f/lang-options.h:121 + msgid "Language keywords spelled as e.g. IOStat" + msgstr "Mots clés du langage épellés tel que IOStat" + + #: f/lang-options.h:123 + msgid "Language keywords in uppercase" + msgstr "Mots clés du langage en majuscules" + + #: f/lang-options.h:126 + msgid "Language keyword letters in arbitrary cases" + msgstr "Lettres des mots clés du langage dans des casses arbitraires" + + #: f/lang-options.h:128 + msgid "Internally convert most source to uppercase" + msgstr "Convertir à l'interne la majorité des sources en majuscules" + + #: f/lang-options.h:131 + msgid "Internally preserve source case" + msgstr "Préserver à l'interne la casse des sources" + + #: f/lang-options.h:133 + msgid "Symbol names spelled in mixed case" + msgstr "Noms des symboles épellés dans des casses mélangées" + + #: f/lang-options.h:135 + msgid "Symbol names in uppercase" + msgstr "Noms des symboles en majuscules" + + #: f/lang-options.h:137 + msgid "Symbol names in lowercase" + msgstr "Noms de symboles en minuscules" + + #: f/lang-options.h:140 + msgid "Program written in uppercase" + msgstr "Programme écrit en majuscules" + + #: f/lang-options.h:142 + msgid "Program written in lowercase" + msgstr "Programmes écrit en minuscules" + + #: f/lang-options.h:144 + msgid "Program written in strict mixed-case" + msgstr "Programme écrit dans une stricte casse mélangée" + + #: f/lang-options.h:146 + msgid "Compile as if program written in uppercase" + msgstr "Compiler comme si le programme était écrit en majuscules" + + #: f/lang-options.h:148 + msgid "Compile as if program written in lowercase" + msgstr "Compiler comme si le programme était écrit en minuscules" + + #: f/lang-options.h:150 + msgid "Preserve all spelling (case) used in program" + msgstr "Préserver toutes les épellations (casses) utilisé dans le programme" + + #: f/lang-options.h:152 + msgid "Delete libU77 intrinsics with bad interfaces" + msgstr "Détruire les intrinsèques libU77 ayant des interfaces erronées" + + #: f/lang-options.h:154 + msgid "Disable libU77 intrinsics with bad interfaces" + msgstr "Désactiver les intrinsèques libU77 ayant des interfaces erronées" + + #: f/lang-options.h:157 + msgid "Hide libU77 intrinsics with bad interfaces" + msgstr "Cacher les intrinsèques libU77 ayant des interfaces erronées" + + #: f/lang-options.h:159 + msgid "Delete non-FORTRAN-77 intrinsics f2c supports" + msgstr "Détruire les supports f2c intrinsèques non Fortran 77" + + #: f/lang-options.h:161 + msgid "Disable non-FORTRAN-77 intrinsics f2c supports" + msgstr "Désactiver les supports f2c intrinsèques non Fortran 77" + + #: f/lang-options.h:164 + msgid "Hide non-FORTRAN-77 intrinsics f2c supports" + msgstr "Cacher les supports f2c intrinsèques non Fortran 77" + + #: f/lang-options.h:166 + msgid "Delete non-FORTRAN-77 intrinsics F90 supports" + msgstr "Détruire les supports F90 intrinsèques non Fortran 77" + + #: f/lang-options.h:168 + msgid "Disable non-FORTRAN-77 intrinsics F90 supports" + msgstr "Désactiver les supports F90 intrinsèques non Fortran 77" + + #: f/lang-options.h:171 + msgid "Hide non-FORTRAN-77 intrinsics F90 supports" + msgstr "Cacher les supports F90 intrinsèques non Fortran 77" + + #: f/lang-options.h:173 + msgid "Delete non-FORTRAN-77 intrinsics g77 supports" + msgstr "Détruire les supports g77 intrinsèques non Fortran 77" + + #: f/lang-options.h:175 + msgid "Disable non-FORTRAN 77 intrinsics F90 supports" + msgstr "Désactiver les supports g77 intrinsèques non Fortran 77" + + #: f/lang-options.h:178 + msgid "Hide non-FORTRAN 77 intrinsics F90 supports" + msgstr "Cacher les supports g77 intrinsèques non Fortran 77" + + #: f/lang-options.h:180 + msgid "Delete MIL-STD 1753 intrinsics" + msgstr "Détruire les intrinsèques MIL-STD 1753" + + #: f/lang-options.h:182 + msgid "Disable MIL-STD 1753 intrinsics" + msgstr "Désactiver les intrinsèques MIL-STD 1753" + + #: f/lang-options.h:185 + msgid "Hide MIL-STD 1753 intrinsics" + msgstr "Cacher les intrinsèques MIL-STD 1753" + + #: f/lang-options.h:187 + msgid "Delete libU77 intrinsics" + msgstr "Détruire les intrinsèques libU77" + + #: f/lang-options.h:189 + msgid "Disable libU77 intrinsics" + msgstr "Désactiver les intrinsèques libU77" + + #: f/lang-options.h:192 + msgid "Hide libU77 intrinsics" + msgstr "Cacher les intrinsèques libU77" + + #: f/lang-options.h:194 + msgid "Delete non-FORTRAN-77 intrinsics VXT FORTRAN supports" + msgstr "Détruire les supports VXT Fortran des intrinsèques non Fortran-77" + + #: f/lang-options.h:196 + msgid "Disable non-FORTRAN-77 intrinsics VXT FORTRAN supports" + msgstr "Désactiver les supports VXT Fortran des intrinsèques non Fortran-77" + + #: f/lang-options.h:199 + msgid "Hide non-FORTRAN-77 intrinsics VXT FORTRAN supports" + msgstr "Cacher les supports VXT Fortran des intrinsèques non Fortran-77" + + #: f/lang-options.h:201 + msgid "Treat initial values of 0 like non-zero values" + msgstr "Traiter les valeurs initiales de 0 comme des valeurs non zéros" + + #: f/lang-options.h:204 + msgid "Emit special debugging information for COMMON and EQUIVALENCE (disabled)" + msgstr "Produire des information spéciales de mise au point pour COMMON et EQUIVALENCE (désactivé)" + + #: f/lang-options.h:207 + msgid "Take at least one trip through each iterative DO loop" + msgstr "Exécuter une dernière fois la visite à traves chaque boucle itérative DO" + + #: f/lang-options.h:211 + msgid "Print names of program units as they are compiled" + msgstr "Afficher les noms des unités de programme qui sont compilées" + + #: f/lang-options.h:214 + msgid "Disable fatal diagnostics about inter-procedural problems" + msgstr "Inhiber les diagnostiques fatals à propos des problèmes entre les procédures" + + #: f/lang-options.h:216 + msgid "Make prefix-radix non-decimal constants be typeless" + msgstr "Rendre les préfixes des bases des constantes non décimales sans type" + + #: f/lang-options.h:219 + msgid "Generate code to check subscript and substring bounds" + msgstr "Générer du code pour vérifier les bornes des souscripts et des sous-chaînes" + + #: f/lang-options.h:222 + msgid "Fortran-specific form of -fbounds-check" + msgstr "Forme spécifique Fortran de -fbounds-check" + + #: f/lang-options.h:226 + msgid "Disable warnings about inter-procedural problems" + msgstr "Inhiber les avertissements à propos des problèmes entre les procédures" + + #: f/lang-options.h:230 + msgid "Warn about constructs with surprising meanings" + msgstr "Avertir à propos des construits ayant des sens surprenants" + + #: f/lang-options.h:235 + msgid "Add a directory for INCLUDE searching" + msgstr "Ajouter un répertoire pour la recherche par INCLUDE" + + #: f/lang-options.h:237 + msgid "Set the maximum line length" + msgstr "Initialiser la longueur maximale des lignes" + + #: f/bad.def:39 + #, no-c-format + msgid "Missing first operand for binary operator at %0" + msgstr "première opérande manquante pour l'opérateur biunaire à %0" + + #: f/bad.def:42 + #, no-c-format + msgid "Zero-length character constant at %0" + msgstr "constante caractère de longueur zéro à %0" + + #: f/bad.def:45 + #, no-c-format + msgid "Invalid token at %0 in expression or subexpression at %1" + msgstr "jeton invalide à %0 dans l'expression ou la sous-expression à %0" + + #: f/bad.def:48 + #, no-c-format + msgid "Missing operand for operator at %1 at end of expression at %0" + msgstr "Opérande manquante pour l'opérateur %1 à la fin de l'expresssion à %0" + + #: f/bad.def:51 + #, no-c-format + msgid "Label %A already defined at %1 when redefined at %0" + msgstr "Étiquette %A déjà définie à %1 et redéfinie à %0" + + #: f/bad.def:54 + #, no-c-format + msgid "Unrecognized character at %0 [info -f g77 M LEX]" + msgstr "Caractère non reconnue à %0 [info -f g77 M LEX]" + + #: f/bad.def:57 + #, no-c-format + msgid "Label definition %A at %0 on empty statement (as of %1)" + msgstr "Définition d'étiquette %A à %0 dans une déclaration vide (comme %1)" + + #: f/bad.def:65 + #, no-c-format + msgid "Invalid first character at %0 [info -f g77 M LEX]" + msgstr "Premier caractère invalide à %0 [info -f g77 M LEX]" + + #: f/bad.def:68 + #, no-c-format + msgid "Line too long as of %0 [info -f g77 M LEX]" + msgstr "Ligne trop longue tel que %0 [info -f g77 M LEX]" + + #: f/bad.def:71 + #, no-c-format + msgid "Non-numeric character at %0 in label field [info -f g77 M LEX]" + msgstr "Caractère non-numérique à %0 dans le champ d'étiquette [info -f g77 M LEX]" + + #: f/bad.def:74 + #, no-c-format + msgid "Label number at %0 not in range 1-99999" + msgstr "Numéro d'étiquette à %0 n'est pas entre les bornes 1-99999" + + #: f/bad.def:77 + #, no-c-format + msgid "At %0, '!' and '/*' are not valid comment delimiters" + msgstr "À %0, «!» et «/*» ne sont pas des délimiteurs de commentaire valides" + + #: f/bad.def:80 + #, no-c-format + msgid "Continuation indicator at %0 must appear in column 6 [info -f g77 M LEX]" + msgstr "Indicateur de continuation à %0 doit apparaître en colonne 6 [info -f g77 M LEX]" + + #: f/bad.def:83 + #, no-c-format + msgid "Label at %0 invalid with continuation line indicator at %1 [info -f g77 M LEX]" + msgstr "Étiquette invalide à %0 avec l'indicateur de continuation de ligne à %1 [info -f g77 M LEX]" + + #: f/bad.def:91 + #, no-c-format + msgid "Character constant at %0 has no closing apostrophe at %1" + msgstr "constante caractère à %0 n'a pas d'apostrophe de fermeture à %1" + + #: f/bad.def:94 + #, no-c-format + msgid "Hollerith constant at %0 specified %A more characters than are present as of %1" + msgstr "Constante Hollerith à %0 spécifiée %A a plus de caractères que ceux présents dans %1" + + #: f/bad.def:97 + #, no-c-format + msgid "Missing close parenthese at %0 needed to match open parenthese at %1" + msgstr "Paranethèse fermante amnquante à %0 nécessaire pour pairer la parenthèse ouverte à %1" + + #: f/bad.def:100 + #, no-c-format + msgid "Integer at %0 too large" + msgstr "entier à %0 est trop grand" + + #: f/bad.def:123 + #, no-c-format + msgid "Period at %0 not followed by digits for floating-point number or by `NOT.', `TRUE.', or `FALSE.'" + msgstr "Période à %0 n'est pas suivie de chiffres en nombre flottant ou de « NOT.», «TRUE.», ou «FALSE. »" + + #: f/bad.def:126 + #, no-c-format + msgid "Missing close-period between `.%A' at %0 and %1" + msgstr "Fermeture de période manquante entre «.%A» à %0 et %1" + + #: f/bad.def:129 + #, no-c-format + msgid "Invalid exponent at %0 for real constant at %1; nondigit `%A' in exponent field" + msgstr "Exposant invalide à %0 pour la constante réelle à %1; « %A » n'est pas un chiffre dans le champ de l'exposant" + + #: f/bad.def:132 + #, no-c-format + msgid "Missing value at %1 for real-number exponent at %0" + msgstr "Valeur manquante à %1 pour l'exposant d'un nombre réeal à %0" + + #: f/bad.def:135 + #, no-c-format + msgid "Expected binary operator between expressions at %0 and at %1" + msgstr "Opérateur binaire attendu entre les expressions à %0 et à %1" + + #: f/bad.def:253 + #, no-c-format + msgid "Semicolon at %0 is an invalid token" + msgstr "«;» à %0 est une jeton invalide" + + #: f/bad.def:271 + #, no-c-format + msgid "Extraneous comma in FORMAT statement at %0" + msgstr "Virgule superflue dans la déclaration de FORMAT à %0" + + #: f/bad.def:274 + #, no-c-format + msgid "Missing comma in FORMAT statement at %0" + msgstr "Virgule manquante dans la déclaration de FORMAT à %0" + + #: f/bad.def:277 + #, no-c-format + msgid "Spurious sign in FORMAT statement at %0" + msgstr "faux signe dans la déclaration de FORMAT à %0" + + #: f/bad.def:280 + #, no-c-format + msgid "Spurious number in FORMAT statement at %0" + msgstr "faux nombre dans la déclaration de FORMAT à %0" + + #: f/bad.def:283 + #, no-c-format + msgid "Spurious text trailing number in FORMAT statement at %0" + msgstr "faux texte terminant le nombre dans la déclaration de FORMAT à %0" + + #: f/bad.def:291 + #, no-c-format + msgid "Unrecognized FORMAT specifier at %0" + msgstr "spécificateur de FORMAT non reconnu à %0" + + #: f/bad.def:419 + #, no-c-format + msgid "Missing close-parenthese(s) in FORMAT statement at %0" + msgstr "Parenthèse(s) fermante(s) manquante(s) dans la déclaration de FORMAT à %0" + + #: f/bad.def:422 + #, no-c-format + msgid "Missing number following period in FORMAT statement at %0" + msgstr "Nombre manquant suivant la période dans la déclaration de FORMAT à %0" + + #: f/bad.def:425 + #, no-c-format + msgid "Missing number following `E' in FORMAT statement at %0" + msgstr "Nombre manquant suivant « E » dans la déclaration de FORMAT à %0" + + #: f/bad.def:433 + #, no-c-format + msgid "Spurious trailing comma preceding terminator at %0" + msgstr "fausse virgule qui traîne dans la précédente terminaison à %0" + + #: f/bad.def:436 + #, no-c-format + msgid "At %0, specify OPERATOR instead of ASSIGNMENT for INTERFACE statement not specifying the assignment operator (=)" + msgstr "À %0, spécifier l'OPÉRATEUR au lieu de l'AFFECTATION pour le déclaration d'INTERFACE ne spécifiant pas d'opérateur d'affectation (=)" + + #: f/bad.def:439 + #, no-c-format + msgid "At %0, specify ASSIGNMENT instead of OPERATOR for INTERFACE statement specifying the assignment operator (=)" + msgstr "À %0, spécifier une AFFECTATION au lieu d'un OPÉRATEUR dans la déclaration d'INTERFACE spécifiant un opérateur d'affectation (=)" + + #: f/bad.def:452 + #, no-c-format + msgid "Cannot specify =initialization-expr at %0 unless `::' appears before list of objects" + msgstr "Ne peut spécifier une expression d'initialisation = à %0 à moins que «::» n'apparaissae avant la liste d'objets" + + #: f/bad.def:455 + #, no-c-format + msgid "Reference to label at %1 inconsistent with its definition at %0" + msgstr "La référence à l'étiquette à %1 est inconsistente avec sa définition à %0" + + #: f/bad.def:458 + #, no-c-format + msgid "Reference to label at %1 inconsistent with earlier reference at %0" + msgstr "La référence à l'étiquette à %1 est inconsistente avec sa précédente référence à %0" + + #: f/bad.def:461 + #, no-c-format + msgid "DO-statement reference to label at %1 follows its definition at %0" + msgstr "Déclaration DO utilisant une référence à l'étiquette à %1 suis sa définition à %0" + + #: f/bad.def:464 + #, no-c-format + msgid "Reference to label at %1 is outside block containing definition at %0" + msgstr "Référence à l'étiquette à %1 est en dehors du bloc contenant la définition à %0" + + #: f/bad.def:467 + #, no-c-format + msgid "DO-statement references to label at %0 and %2 separated by unterminated block starting at %1" + msgstr "Déclaration DO utilisant des références à l'étiquette à %0 et %2 séparés par un bloc non complet débutant à %1" + + #: f/bad.def:470 + #, no-c-format + msgid "DO-statement reference to label at %0 and label definition at %2 separated by unterminated block starting at %1" + msgstr "Déclaration DO utilisant une référence à l'étiquette à %0 et la définition d'étiquette à %2 séparés par un bloc non complet débutant à %1" + + #: f/bad.def:473 + #, no-c-format + msgid "Label definition at %0 invalid on this kind of statement" + msgstr "définition d'étiquette à %0 invalide pour ce genre de déclaration" + + #: f/bad.def:476 + #, no-c-format + msgid "Statement at %0 invalid in this context" + msgstr "déclaration à %0 invalide dans ce contexte" + + #: f/bad.def:479 + #, no-c-format + msgid "Statement at %0 invalid in context established by statement at %1" + msgstr "déclaration à %0 invalide dans le contexte établi par la déclaration à %1" + + #: f/bad.def:482 + #, no-c-format + msgid "Statement at %0 must specify construct name specified at %1" + msgstr "Déclaration à %0 doit spécifier un nom de construit spécifié à %1" + + #: f/bad.def:485 + #, no-c-format + msgid "Construct name at %0 superfluous, no construct name specified at %1" + msgstr "Nom de construit à %0 superflue, aucun nom de construit spécifié à %1" + + #: f/bad.def:488 + #, no-c-format + msgid "Construct name at %0 not the same as construct name at %1" + msgstr "Nom de construit à %0 n'est pas le même que celui à %1" + + #: f/bad.def:491 + #, no-c-format + msgid "Construct name at %0 does not match construct name for any containing DO constructs" + msgstr "Nom de construit à %0 ne concorde pas avec un nom de construit contenant des construits DO" + + #: f/bad.def:494 + #, no-c-format + msgid "Label definition missing at %0 for DO construct specifying label at %1" + msgstr "Définition d'étiquette manquante à %0 pour le construit DO spécifiant l'étiquette à %1" + + #: f/bad.def:497 + #, no-c-format + msgid "Statement at %0 follows ELSE block for IF construct at %1" + msgstr "Déclaration à %0 suivant un bloc ELSE pour le construit IF à %1" + + #: f/bad.def:500 + #, no-c-format + msgid "No label definition for FORMAT statement at %0" + msgstr "pas de définition d'étiquette pour la déclaration de FORMAT à %0" + + #: f/bad.def:503 + #, no-c-format + msgid "Second occurrence of ELSE WHERE at %0 within WHERE at %1" + msgstr "Seconde occurente de ELSE WHERE à %0 à l'intérieur du WHERE à %1" + + #: f/bad.def:506 + #, no-c-format + msgid "END statement at %0 missing `%A' keyword required for internal or module procedure(s) bounded by %1" + msgstr "déclaration END à %0 manquante mot clé « %A » requis pour une procédure interne ou un module lié à %1" + + #: f/bad.def:509 + #, no-c-format + msgid "MODULE PROCEDURE statement at %0 disallowed because INTERFACE at %1 specifies no generic name, operator, or assignment" + msgstr "déclaration de MODULE PROCEDURE à %0 non permise parce que l'INTERFACE à %1 ne spécifie pas de nom générique, d'opérateur ou d'affectation" + + #: f/bad.def:512 + #, no-c-format + msgid "BLOCK DATA name at %0 superfluous, no name specified at %1" + msgstr "nom du BLOCK DATA à %0 superflue, aucun nom spécifié à %1" + + #: f/bad.def:515 + #, no-c-format + msgid "Program name at %0 superfluous, no PROGRAM statement specified at %1" + msgstr "nom de programme à %0 superflue, aucune déclaration PROGRAM spécifié à %1" + + #: f/bad.def:518 + #, no-c-format + msgid "Program unit name at %0 not the same as name at %1" + msgstr "nom de l'unité programme à %0 n'est pas le même que le nom à %1" + + #: f/bad.def:521 + #, no-c-format + msgid "Type name at %0 not the same as name at %1" + msgstr "Nom de type à %0 n'est pas le même que le nom à %1" + + #: f/bad.def:524 + #, no-c-format + msgid "End of source file before end of block started at %0" + msgstr "Fin du fichier source avant la fin du bloc débutant à %0" + + #: f/bad.def:527 + #, no-c-format + msgid "Undefined label, first referenced at %0" + msgstr "Étiquette non définie, première référence à %0" + + #: f/bad.def:530 + #, no-c-format + msgid "SAVE statement or attribute at %1 cannot be specified along with SAVE statement or attribute at %0" + msgstr "déclaration SAVE ou attribut à %1 ne peut être spécifiée en même temps avec la déclaration SAVE ou l'attribut à %0" + + #: f/bad.def:533 + #, no-c-format + msgid "PUBLIC or PRIVATE statement at %1 cannot be specified along with PUBLIC or PRIVATE statement at %0" + msgstr "déclaration PUBLIC ou PRIVATE à %1 ne peut être spécifié en même temps avec la déclaration PUBLIC ou PRIVATE à %0" + + #: f/bad.def:536 + #, no-c-format + msgid "RETURN statement at %0 invalid within a main program unit" + msgstr "déclaration RETURN à %0 invalide à l'intérieur de l'unité du programme principal" + + #: f/bad.def:539 + #, no-c-format + msgid "Alternate return specifier at %0 invalid within a main program unit" + msgstr "spécificateur alternatif de retour à %0 invalide à l'intérieur de l'unité du programme principal" + + #: f/bad.def:542 + #, no-c-format + msgid "Alternate return specifier at %0 invalid within a function" + msgstr "spécificateur alternatif de retour à %0 invalide à l'intérieur de la fonction" + + #: f/bad.def:545 + #, no-c-format + msgid "Access specifier or PRIVATE statement at %0 invalid for derived-type definition within other than the specification part of a module" + msgstr "spécificateur d'accès ou déclaration PRIVATE à %0 invalide pour une définition de type dérivé à l'intérieur d'autre chose que la portion de spécification d'un module" + + #: f/bad.def:548 + #, no-c-format + msgid "Access specifier at %0 must immediately follow derived-type statement at %1 with no intervening statements" + msgstr "Spécificateur d'accès à %0 doit suivre immédaitement la déclaration de type dérivé à %1 sans intervention de déclarations" + + #: f/bad.def:551 + #, no-c-format + msgid "No components specified as of %0 for derived-type definition beginning at %1" + msgstr "Aucun composant spécifié tel que %0 pour une définition de type dérivé débutant à %1" + + #: f/bad.def:554 + #, no-c-format + msgid "No components specified as of %0 for structure definition beginning at %1" + msgstr "Aucun composant spécifié tel que %0 pour la définition de structure débutant à %1" + + #: f/bad.def:557 + #, no-c-format + msgid "Missing structure name for outer structure definition at %0" + msgstr "Nom de structure manquant pour la définition de structure externe à %0" + + #: f/bad.def:560 + #, no-c-format + msgid "Field names at %0 for outer structure definition -- specify them in a subsequent RECORD statement instead" + msgstr "Noms de champs à %0 pour la définition externe de structure -- les spécifier dans une déclaration subséquente de déclaration RECORD à la place" + + #: f/bad.def:563 + #, no-c-format + msgid "Missing field name(s) for structure definition at %0 within structure definition at %1" + msgstr "noms de champs manquant pour la définition de strcutreu à %0 à l'intérieur de la définition de structure à %1" + + #: f/bad.def:566 + #, no-c-format + msgid "No components specified as of %0 for map beginning at %1" + msgstr "Aucun composant spécifié tel que %0 pour la map débutant à %1" + + #: f/bad.def:569 + #, no-c-format + msgid "Zero or one maps specified as of %0 for union beginning at %1 -- at least two are required" + msgstr "Aucune ou une map spécifié tel que %0 pour l'union débutant à %1 -- au moins deux sont requises" + + #: f/bad.def:572 + #, no-c-format + msgid "Missing %A specifier in statement at %0" + msgstr "spécificateur %A manquant dans la déclaration à %0" + + #: f/bad.def:575 + #, no-c-format + msgid "Items in I/O list starting at %0 invalid for namelist-directed I/O" + msgstr "Items dans la liste E/S débutant à %0 invalide pour un liste nommé d'E/S dirigées" + + #: f/bad.def:578 + #, no-c-format + msgid "Conflicting I/O control specifications at %0 and %1" + msgstr "spécifications conflictuelles de contrôle d'E/S à %0 et %1" + + #: f/bad.def:581 + #, no-c-format + msgid "No UNIT= specifier in I/O control list at %0" + msgstr "aucun spécificateur UNIT=1 dans la liste de contrôle d'E/S à %0" + + #: f/bad.def:584 + #, no-c-format + msgid "Specification at %0 requires ADVANCE=`NO' specification in same I/O control list" + msgstr "spécification à %0 requiert la spécification ADVANCE=« NO » dans la même liste de contrôel d'E/S" + + #: f/bad.def:587 + #, no-c-format + msgid "Specification at %0 requires explicit FMT= specification in same I/O control list" + msgstr "spécification à %0 requiert la spécification explicite FMT= dans la même liste de contrôel d'E/S" + + #: f/bad.def:595 + #, no-c-format + msgid "Second occurrence of CASE DEFAULT at %0 within SELECT CASE at %1" + msgstr "Seconde occurence du CASE DEFAULT à %0 à l'intéreur de SELECT CASE à %1" + + #: f/bad.def:598 + #, no-c-format + msgid "Duplicate or overlapping case values/ranges at %0 and %1" + msgstr "duplication ou chevauchement des valeurs/plages de case à %0 et %1" + + #: f/bad.def:601 + #, no-c-format + msgid "Type and/or kind-type parameter disagreement between CASE value or value within range at %0 and SELECT CASE at %1" + msgstr "Désaccord du paramètre du Type et/ou type de sorte entre la valeur du CASE ou la valeur à l'intérieur de l'étendue à %0 et le SELECT CASE à %1" + + #: f/bad.def:604 + #, no-c-format + msgid "Range specification at %0 invalid for CASE statement within logical-type SELECT CASE statement" + msgstr "spécification d'étendue à %0 invalide pour la déclaration du CASE à l'intérieur de la déclaration du type logique du SELECT CASE" + + #: f/bad.def:617 + #, no-c-format + msgid "Fortran 90 feature at %0 unsupported" + msgstr "option FORTRAN 90 à %0 non supportée" + + #: f/bad.def:630 + #, no-c-format + msgid "Invalid declaration of or reference to symbol `%A' at %0 [initially seen at %1]" + msgstr "déclaration invalide ou référence au symboe « %A » à %0 [initialement vu à %1]" + + #: f/bad.def:638 + #, no-c-format + msgid "Null element at %0 for array reference at %1" + msgstr "élément nul à %0 pour la référence au tableau à %1" + + #: f/bad.def:641 + #, no-c-format + msgid "Too few elements (%A missing) as of %0 for array reference at %1" + msgstr "Trop peu d'éléments (%A manquant) tel que %0 pour la référence au tableau à %1" + + #: f/bad.def:644 + #, no-c-format + msgid "Too many elements as of %0 for array reference at %1" + msgstr "Trop peu d'éléments tel que %0 pour la référence au tableau à %1" + + #: f/bad.def:647 + #, no-c-format + msgid "Missing colon as of %0 in substring reference for %1" + msgstr "«:» manquant dans %0 dans la sous-chaîne de référence pour %1" + + #: f/bad.def:650 + #, no-c-format + msgid "Invalid use at %0 of substring operator on %1" + msgstr "utilisation invalide à %0 de l'opérateur de sous-chaîne sur %1" + + #: f/bad.def:653 + #, no-c-format + msgid "Substring begin/end point at %0 out of defined range" + msgstr "point begin/end de la sous-chaîne à %0 en dehors de la plage définie" + + #: f/bad.def:656 + #, no-c-format + msgid "Array element value at %0 out of defined range" + msgstr "Valeur de l'élément du tableau à %0 en dehors de la plage définie" + + #: f/bad.def:659 + #, no-c-format + msgid "Expression at %0 has incorrect data type or rank for its context" + msgstr "expression à %0 a un type de données ou un rang incorrect pour son contexte" + + #: f/bad.def:662 + #, no-c-format + msgid "Division by 0 (zero) at %0 (IEEE not yet supported)" + msgstr "division par 0 (zéro) à %0 (IEEE pas encore supporté)" + + #: f/bad.def:665 + #, no-c-format + msgid "%A step count known to be 0 (zero) at %0" + msgstr "valeur du pas %A connu pour être à 0 (zéro) à %0" + + #: f/bad.def:668 + #, no-c-format + msgid "%A end value plus step count known to overflow at %0" + msgstr "valeur finale %A plus la valeur du pas connus pour déborder à %0" + + #: f/bad.def:671 + #, no-c-format + msgid "%A begin, end, and step-count values known to result in implementation-dependent behavior due to overflow(s) in intermediate calculations at %0" + msgstr "valeur de départ, fin et du pas %A connu pour résulter dans un comportement dépendant de l'implantation en raison d'un débordement dans les calculs intermédiaires à %0" + + #: f/bad.def:674 + #, no-c-format + msgid "%A begin, end, and step-count values known to result in no iterations at %0" + msgstr "valeur de départ, fin et du pas %A connus pour ne faire aucune itération à %0" + + #: f/bad.def:677 + #, no-c-format + msgid "Type disagreement between expressions at %0 and %1" + msgstr "désaccord de type entre les expressions à %0 et %1" + + #: f/bad.def:690 + #, no-c-format + msgid "No specification for implied-DO iterator `%A' at %0" + msgstr "aucune spécification pour l'itération DO-implicite « %A » à %0" + + #: f/bad.def:693 + #, no-c-format + msgid "Gratuitous parentheses surround implied-DO construct at %0" + msgstr "parenthèses gratuites entourant le construit DO implicite à %0" + + #: f/bad.def:696 + #, no-c-format + msgid "Zero-size specification invalid at %0" + msgstr "spécification de taille zéro invalide à %0" + + #: f/bad.def:699 + #, no-c-format + msgid "Zero-size array at %0" + msgstr "tableau de taille zéro à %0" + + #: f/bad.def:702 + #, no-c-format + msgid "Target machine does not support complex entity of kind specified at %0" + msgstr "machine cible ne supporte par l'entité complexe de la sorte spécifié à %0" + + #: f/bad.def:705 + #, no-c-format + msgid "Target machine does not support DOUBLE COMPLEX, specified at %0" + msgstr "machine cible ne supporte pas DOUBLE COMPLEX spécifié à %0" + + #: f/bad.def:708 + #, no-c-format + msgid "Attempt to raise constant zero to a power at %0" + msgstr "Tentative d'augmentation d'une constante de valeur zéro à la puissance %0" + + #: f/bad.def:806 + #, no-c-format + msgid "Reference to generic intrinsic `%A' at %0 could be to form %B or %C" + msgstr "référence à un intrinsèque générique « %A » à %0 pourrait être de la forme %B ou %C" + + #: f/bad.def:809 + #, no-c-format + msgid "Ambiguous use of intrinsic `%A' at %0 [info -f g77 M CMPAMBIG]" + msgstr "utilisation ambiquë de l'intrinsèque « %A » à %0 [info -f g77 M CMPAMBIG]" + + #: f/bad.def:812 + #, no-c-format + msgid "Intrinsic `%A' referenced %Bly at %0, %Cly at %1 [info -f g77 M EXPIMP]" + msgstr "intrinsèque « %A » référencé %Bly à %0, %Cly à %1 [info -f g77 M EXPIMP]" + + #: f/bad.def:815 + #, no-c-format + msgid "Same name `%A' used for %B at %0 and %C at %1 [info -f g77 M INTGLOB]" + msgstr "Même nom « %A » utilisé pour %B à %0 et %C à %1 [info -f g77 M INTGLOB]" + + #: f/bad.def:818 + #, no-c-format + msgid "Explicit type declaration for intrinsic `%A' disagrees with invocation at %0" + msgstr "déclaration de type explicite pour l'intrinsèque « %A » en désaccord avec l'invocation à %0" + + #: f/bad.def:821 + #, no-c-format + msgid "Unable to open INCLUDE file `%A' at %0" + msgstr "incapable d'ouvrir le fichier INCLUDE « %A » à %0" + + #: f/bad.def:839 + #, no-c-format + msgid "Null argument at %0 for statement function reference at %1" + msgstr "argument nul à %0 pour la déclaration de la référence de fonction à %1" + + #: f/bad.def:842 + #, no-c-format + msgid "Null argument at %0 for procedure invocation at %1" + msgstr "arguement nul à %0 pour l'invocation de la procédure à %1" + + #: f/bad.def:845 + #, no-c-format + msgid "%A too few arguments (starting with dummy argument `%B') as of %0 for statement function reference at %1" + msgstr "trop peu d'arguments %A (débutant avec l'argument factice « %B ») tel que %0 pour la déclaration de la référence de fonction à %1" + + #: f/bad.def:848 + #, no-c-format + msgid "%A too many arguments as of %0 for statement function reference at %1" + msgstr "trop peu d'arguments %A tel que %0 pour la déclaration de la référence de fonction à %1" + + #: f/bad.def:851 + #, no-c-format + msgid "Array supplied at %1 for dummy argument `%A' in statement function reference at %0" + msgstr "tableau fourni à %1 pour l'argument factice « %A » dans la déclaration de référence de fonction à %0" + + #: f/bad.def:854 + #, no-c-format + msgid "Unsupported FORMAT specifier at %0" + msgstr "spécificateur de FORMAT non supporté à %0" + + #: f/bad.def:857 + #, no-c-format + msgid "Variable-expression FORMAT specifier at %0 -- unsupported" + msgstr "expression variable dans le spécificateur de FORMAT à %0 -- non supportée" + + #: f/bad.def:880 + #, no-c-format + msgid "Unsupported VXT statement at %0" + msgstr "déclaration VXT non supporté à %0" + + #: f/bad.def:883 + #, no-c-format + msgid "Attempt to specify second initial value for `%A' at %0" + msgstr "Tentative de spécifier une seconde valeur initial pour « %A » à %0" + + #: f/bad.def:886 + #, no-c-format + msgid "Too few initial values in list of initializers for `%A' at %0" + msgstr "Trop peu de valeurs initiales dans la liste des initialisateurs pour « %A » à %0" + + #: f/bad.def:889 + #, no-c-format + msgid "Too many initial values in list of initializers starting at %0" + msgstr "Trop de valeurs initiales dans la liste des initialisateurs débutant à %0" + + #: f/bad.def:892 + #, no-c-format + msgid "Array or substring specification for `%A' out of range in statement at %0" + msgstr "Tableau ou sous-chaîne de spécification pour « %A » hors gamme dans la déclaration à %0" + + #: f/bad.def:895 + #, no-c-format + msgid "Array subscript #%B out of range for initialization of `%A' in statement at %0" + msgstr "souscript de tableau #%B hors gamme pour l'initialisation de « %A » dans la déclaration à %0" + + #: f/bad.def:898 + #, no-c-format + msgid "Implied do-loop step count of 0 (zero) for iteration variable `%A' in statement at %0" + msgstr "le pas implicite de la boucle DO a un compte de 0 (zéro) pour la variable itérative « %A » dans la déclaration à %0 " + + #: f/bad.def:901 + #, no-c-format + msgid "Implied do-loop iteration count of 0 (zero) for iteration variable `%A' in statement at %0" + msgstr "le compte implicite de la boucle DO est à 0 (zéro) pour la variable itérative « %A » dans la déclaration à %0 " + + #: f/bad.def:904 + #, no-c-format + msgid "Not an integer constant expression in implied do-loop in statement at %0" + msgstr "N'est pas un entier dans l'expression de la constante dans la déclaration implicite de la boucle DO à %0" + + #: f/bad.def:907 + #, no-c-format + msgid "Attempt to specify second initial value for element of `%A' at %0" + msgstr "Tentative de spécifier une seconde valeur initiale pour l'élément « %A » à %0" + + #: f/bad.def:910 + #, no-c-format + msgid "Attempt to EQUIVALENCE common areas `%A' and `%B' at %0" + msgstr "Tentative de définit une zone commmue par EQUIVALENCE « %A » et « %B » à %0" + + #: f/bad.def:913 + #, no-c-format + msgid "Can't place `%A' as directed by EQUIVALENCE due to alignment restrictions" + msgstr "ne peut insérer « %A » tel que demandé par EQUIVALENCE en raison des restrictions d'alignement" + + #: f/bad.def:916 + #, no-c-format + msgid "Mismatched EQUIVALENCE requirements for placement of `%A' at both %C and %D bytes offset from `%B'" + msgstr "Désaccord des conditions requises par EQUIVALENCE pour l'emplacement de « %A » aux deux décalages d'octets %C et %D à partir de %B" + + #: f/bad.def:919 + #, no-c-format + msgid "Array or substring specification for `%A' out of range in EQUIVALENCE statement" + msgstr "spécification de tableau ou de sous-chaîne pour « %A » est hors gamme dans la déclaration EQUIVALENCE" + + #: f/bad.def:922 + #, no-c-format + msgid "Substring of non-CHARACTER entity `%A' in EQUIVALENCE statement" + msgstr "Sous-chaîne de non caractères « %A » dans la déclaration EQUIVALENCE" + + #: f/bad.def:925 + #, no-c-format + msgid "Array reference to scalar variable `%A' in EQUIVALENCE statement" + msgstr "référence de tableau vers une variable scalaire « %A » dans une déclaraion EQUIVALENCE" + + #: f/bad.def:928 + #, no-c-format + msgid "Array subscript #%B out of range for EQUIVALENCE of `%A'" + msgstr "souscript de tableau #%B hors gamme pour la déclaration EQUIVALENCE de « %A »" + + #: f/bad.def:936 + #, no-c-format + msgid "Attempt to extend COMMON area beyond its starting point via EQUIVALENCE of `%A'" + msgstr "Tentative d'étendre la zone COMMON au delà de son point de départ via EQUIVALENCE de « %A »" + + #: f/bad.def:939 + #, no-c-format + msgid "Too few elements in reference to array `%A' in EQUIVALENCE statement" + msgstr "Trop peu d'élémens dans la référence au tableau « %A » dans la déclaration d'EQUIVALENCE" + + #: f/bad.def:942 + #, no-c-format + msgid "Too many elements in reference to array `%A' in EQUIVALENCE statement" + msgstr "Trop d'élémens dans la référence au tableau « %A » dans la déclaration d'EQUIVALENCE" + + #: f/bad.def:945 + #, no-c-format + msgid "Mixed CHARACTER and non-CHARACTER types via COMMON/EQUIVALENCE -- for example, `%A' and `%B'" + msgstr "Mélange de type caractère et de non caractère via le COMMON/EQUIVALENCE -- par exemple « %A » et « %B »" + + #: f/bad.def:958 + #, no-c-format + msgid "Return value `%A' for FUNCTION at %0 not referenced in subprogram" + msgstr "valeur retournée « %A » pour FUNCTION à %0 n'est pas référencé dans le sous-programme" + + #: f/bad.def:976 + #, no-c-format + msgid "Common block `%A' is SAVEd, explicitly or implicitly, at %0 but not SAVEd at %1" + msgstr "bloc commun « %A » est sauvegardé, explicitement ou implicitement, à %0 mais non pas %1" + + #: f/bad.def:979 + #, no-c-format + msgid "Common block `%A' is %B %D in length at %0 but %C %E at %1" + msgstr "bloc commun « %A » est %B %D en longueur à %0 mais %C %E à %1" + + #: f/bad.def:987 + #, no-c-format + msgid "Blank common initialized at %0" + msgstr "commun vide initialisé à %0" + + #: f/bad.def:990 + #, no-c-format + msgid "Intrinsic `%A' is passed as actual argument at %0 but not explicitly declared INTRINSIC" + msgstr "intrinsèque « %A » est passé comme argument actuel à %0 mais non pas explicitment déclaré INTRINSIC" + + #: f/bad.def:993 + #, no-c-format + msgid "External procedure `%A' is passed as actual argument at %0 but not explicitly declared EXTERNAL" + msgstr "procédure externe « %A » est pass comme argument actuel à %0 mais non pas déclaré explicitement déclaré EXTERNAL" + + #: f/bad.def:996 + #, no-c-format + msgid "Character `%A' (for example) is upper-case in symbol name at %0" + msgstr "caractère « %A » (par exemple) est en majuscule dans le nom de symbole à %0" + + #: f/bad.def:999 + #, no-c-format + msgid "Character `%A' (for example) is lower-case in symbol name at %0" + msgstr "caractère « %A » (par exemple) est en minuscule dans le nom de symbole à %0" + + #: f/bad.def:1002 + #, no-c-format + msgid "Character `%A' not followed at some point by lower-case character in symbol name at %0" + msgstr "caractère « %A » n'est pas suivi par un caractère en minuscule dans le nom de symbole à %0" + + #: f/bad.def:1005 + #, no-c-format + msgid "Initial character `%A' is lower-case in symbol name at %0" + msgstr "caractère initial « %A » est en minuscule dans le nom de symbole à %0" + + #: f/bad.def:1013 + #, no-c-format + msgid "NAMELIST not adequately supported by run-time library for source files with case preserved" + msgstr "nom de liste n'est pas adéquatement supporté par la librairie d'exécution pour les fichiers source avec une casse préservée" + + #: f/bad.def:1016 + #, no-c-format + msgid "Nested %% construct (%%VAL, %%REF, or %%DESCR) at %0" + msgstr "construit %% imbriqué (%%VAL, %%REF ou %%DESCR) à %0" + + #: f/bad.def:1034 + #, no-c-format + msgid "Statement at %0 invalid in BLOCK DATA program unit at %1" + msgstr "Déclaration à %0 invalide dans le bloc de donnée de l'unité programme à %1" + + #: f/bad.def:1037 + #, no-c-format + msgid "Truncating characters on right side of character constant at %0" + msgstr "troncation de caractères du côté droit de la constante caractères à %0" + + #: f/bad.def:1040 + #, no-c-format + msgid "Truncating characters on right side of hollerith constant at %0" + msgstr "troncation de caractères du côté droit de la constante Hollerith à %0" + + #: f/bad.def:1043 + #, no-c-format + msgid "Truncating non-zero data on left side of numeric constant at %0" + msgstr "troncation de données non à zéro du côté gauche de la constante numérique à %0" + + #: f/bad.def:1046 + #, no-c-format + msgid "Truncating non-zero data on left side of typeless constant at %0" + msgstr "troncation de données non à zéro du côté gauche de la constante sans type à %0" + + #: f/bad.def:1049 + #, no-c-format + msgid "Typeless constant at %0 too large" + msgstr "constante sans type à %0 trop grande" + + #: f/bad.def:1052 + #, no-c-format + msgid "First-column ampersand continuation at %0" + msgstr "«&» en première colonne de continuation à %0" + + #: f/bad.def:1055 f/bad.def:1058 + #, no-c-format + msgid "Global name `%A' defined at %0 already defined at %1 [info -f g77 M GLOBALS]" + msgstr "nom global « %A » défini à %0 est déjà défini à %1 [info -f g77 M GLOBALS]" + + #: f/bad.def:1061 f/bad.def:1064 + #, no-c-format + msgid "Global name `%A' is %B at %0 but is %C at %1 [info -f g77 M GLOBALS]" + msgstr "nom global « %A » est %B à %0 mais est %C à %1 [info -f g77 M GLOBALS]" + + #: f/bad.def:1067 f/bad.def:1070 + #, no-c-format + msgid "Global name `%A' at %0 has different type at %1 [info -f g77 M GLOBALS]" + msgstr "nom global « %A » à %0 a un type différent à %1 [info -f g77 M GLOBALS]" + + #: f/bad.def:1073 + #, no-c-format + msgid "Too %B arguments passed to `%A' at %0 versus definition at %1 [info -f g77 M GLOBALS]" + msgstr "trop %B d'arguments passé à « %A » à %0 par rapport à la définition à %1 [info -f g77 M GLOBALS]" + + #: f/bad.def:1076 + #, no-c-format + msgid "Too %B arguments for `%A' at %0 versus invocation at %1 [info -f g77 M GLOBALS]" + msgstr "trop %B d'arguments pour « %A » à %0 par rapport à l'invocation à %1 [info -f g77 M GLOBALS]" + + #: f/bad.def:1079 f/bad.def:1082 + #, no-c-format + msgid "Argument #%B of `%A' is %C at %0 but is %D at %1 [info -f g77 M GLOBALS]" + msgstr "Argument #%B de « %A » est %C à %0 mais est %D à %1 [info -f g77 M GLOBALS]" + + #: f/bad.def:1085 + #, no-c-format + msgid "Array `%A' at %0 is too large to handle" + msgstr "tableau « %A » à %0 est trop grand pour être traité" + + #: f/bad.def:1088 + #, no-c-format + msgid "Statement function `%A' defined at %0 is not used" + msgstr "déclaration de fonction « %A » définie à %0 n'est pas utilisée" + + #: f/bad.def:1091 + #, no-c-format + msgid "Intrinsic `%A', invoked at %0, known to be non-Y2K-compliant [info -f g77 M Y2KBAD]" + msgstr "Intrinsèque « %A » invoqué à %0 est connu pour ne pas être conforme à l'An 2000 [info -f g77 M Y2KBAD]" + + #: f/bad.def:1094 + #, no-c-format + msgid "Internal compiler error -- cannot perform operation" + msgstr "erreur interne du compilateur -- ne peut exécuter l'opération" + + #. Kind messages are used in diagnostic location reports of the + #. form ": In function `foo': ". + #: f/info-k.def:32 + msgid "In unknown kind" + msgstr "dans une sorte inconnue" + + #: f/info-k.def:33 + msgid "In entity" + msgstr "Dans l'entité" + + #: f/info-k.def:34 + msgid "In function" + msgstr "Dans la fonction" + + #: f/info-k.def:35 + msgid "In subroutine" + msgstr "Dans la sous-routine" + + #: f/info-k.def:36 + msgid "In program" + msgstr "Dans le programme" + + #: f/info-k.def:37 + msgid "In block-data unit" + msgstr "Dans l'unité du bloc de données" + + #: f/info-k.def:38 + msgid "In common block" + msgstr "Dans le bloc commun" + + #: f/info-k.def:39 + msgid "In construct" + msgstr "Dans le construit" + + #: f/info-k.def:40 + msgid "In namelist" + msgstr "Dans la liste de noms" + + #: f/info-k.def:41 + msgid "In anything" + msgstr "Dans n'importe quoi" + + #: java/check-init.c:915 + #, c-format + msgid "internal error in check-init: tree code not implemented: %s" + msgstr "erreur interne dans check-init: arbre de code n'est pas implanté: %s" + + #: java/check-init.c:988 + #, c-format + msgid "final field '%s' may not have been initialized" + msgstr "champ final « %s » peut ne pas avoir été initialisé" + + #: java/class.c:568 java/class.c:593 + msgid "internal error - too many interface type" + msgstr "erreur interne - trop de type d'interface" + + #: java/class.c:744 + msgid "bad method signature" + msgstr "méthode de signature erronée" + + #: java/class.c:793 + msgid "misplaced ConstantValue attribute (not in any field)" + msgstr "attribut ConstantValue mal positionné (n'est dans aucun champ)" + + #: java/class.c:795 + #, c-format + msgid "duplicate ConstantValue attribute for field '%s'" + msgstr "duplication de l'attribut ConstanValue pour le champ « %s »" + + #: java/class.c:806 + #, c-format + msgid "ConstantValue attribute of field '%s' has wrong type" + msgstr "attribut ConstanValue du champ « %s » a un type erroné" + + #: java/class.c:1170 + #, c-format + msgid "field '%s' not found in class" + msgstr "champ « %s » n'a pas été repéré dans la classe" + + #: java/class.c:1432 + msgid "abstract method in non-abstract class" + msgstr "méthode abstraite dans une classe non abstraite" + + #: java/class.c:2133 + #, c-format + msgid "non-static method '%s' overrides static method" + msgstr "méthode non statique « %s » écrase la méthode statique" + + #: java/decl.c:1515 + #, c-format + msgid "In %s: overlapped variable and exception ranges at %d" + msgstr "Dans %s: chevauchement de variable et plage d'exception à %d" + + #: java/decl.c:1603 + msgid "bad type in parameter debug info" + msgstr "type erroné dans les paramètres d'informations de mise au point" + + #: java/decl.c:1613 + #, c-format + msgid "bad PC range for debug info for local `%s'" + msgstr "plage PC erroné pour les infos de débug pour la var. locale « %s »" + + #: java/expr.c:549 + msgid "stack underflow - dup* operation" + msgstr "sous débordement de la pile - opération dup*" + + #: java/expr.c:1541 + #, c-format + msgid "reference `%s' is ambiguous: appears in interface `%s' and interface `%s'" + msgstr "référence « %s » est ambigue: apparaît dans l'interface « %s » et l'interface « %s »" + + #: java/expr.c:1570 + #, c-format + msgid "field `%s' not found" + msgstr "champ « %s » n'a pas été trouvé" + + #: java/expr.c:1725 + msgid "ret instruction not implemented" + msgstr "instruction ret n'est pas implantée" + + #: java/expr.c:1862 + #, c-format + msgid "method '%s' not found in class" + msgstr "méthode « %s » n'a pas été repéré dans la classe" + + #: java/expr.c:2066 + #, c-format + msgid "failed to find class '%s'" + msgstr "échec de repérage de la classe « %s »" + + #: java/expr.c:2078 + #, c-format + msgid "class '%s' has no method named '%s' matching signature '%s'" + msgstr "classe « %s » n'a pas de méthode nommée « %s » concordant avec la signature « %s »" + + #: java/expr.c:2088 + msgid "invokestatic on non static method" + msgstr "invocation statique sur un méthode non statique" + + #: java/expr.c:2093 + msgid "invokestatic on abstract method" + msgstr "invocation statique sur un méthode abstraite" + + #: java/expr.c:2101 + msgid "invoke[non-static] on static method" + msgstr "invocation non statique sur un méthode statique" + + #: java/expr.c:2386 + #, c-format + msgid "missing field '%s' in '%s'" + msgstr "champ « %s » manquant dans « %s »" + + #: java/expr.c:2392 + #, c-format + msgid "mismatching signature for field '%s' in '%s'" + msgstr "aignature ne concorde pas pour le champ « %s » dans « %s »" + + #: java/expr.c:2415 + #, c-format + msgid "assignment to final field `%s' not in field's class" + msgstr "affectation au champ final « %s » n'est pas le champ de la classe" + + #: java/expr.c:2420 + #, c-format + msgid "assignment to final static field `%s' not in class initializer" + msgstr "affectation au champ statique final « %s » n'est pas dans l'initialiseur de la classe" + + #: java/expr.c:2427 + #, c-format + msgid "assignment to final field `%s' not in constructor" + msgstr "affectation au champ final « %s » n'est pas dans le constructeur" + + #: java/expr.c:2665 + #, c-format + msgid "can't expand %s" + msgstr "ne peut faire l'expansion de %s" + + #: java/expr.c:2841 + msgid "invalid PC in line number table" + msgstr "PC invalide dans la numéro de ligne de la table" + + #. We've just reached the end of a region of dead code. + #: java/expr.c:2886 + #, c-format + msgid "unreachable bytecode from %d to before %d" + msgstr "bytcode n'est pas atteignable à partir de %d jusqu'à %d" + + #. We've just reached the end of a region of dead code. + #: java/expr.c:2923 + #, c-format + msgid "unreachable bytecode from %d to the end of the method" + msgstr "bytcode n'est pas atteignable à partir de %d jusqu'à la fin de la méthode." + + #. duplicate code from LOAD macro + #: java/expr.c:3237 + msgid "unrecogized wide sub-instruction" + msgstr "sous-instruction très large non reconnue" + + #: java/jcf-io.c:410 + #, c-format + msgid "source file for class `%s' is newer than its matching class file. Source file `%s' used instead" + msgstr "fichier source de la classe « %s » est plus récent que son fichier de classe concordant. Fichier source « %s » utilisé à la place." + + #: java/jcf-parse.c:376 + msgid "bad string constant" + msgstr "constante chaîne erronée" + + #: java/jcf-parse.c:394 + #, c-format + msgid "bad value constant type %d, index %d" + msgstr "valeur %d de type de constante erronée, index %d" + + #: java/jcf-parse.c:566 + #, c-format + msgid "can't reopen %s" + msgstr "ne peut ré-ouvrir %s" + + #: java/jcf-parse.c:571 + #, c-format + msgid "can't close %s" + msgstr "ne peut fermer %s" + + #: java/jcf-parse.c:653 + #, c-format + msgid "cannot find file for class %s" + msgstr "ne peut repérer le fichier pour la classe %s." + + #: java/jcf-parse.c:665 + msgid "not a valid Java .class file" + msgstr "n'est pas un fichier Java .class valide" + + #: java/jcf-parse.c:668 + msgid "error while parsing constant pool" + msgstr "error lors de l'analyse syntaxique du lots de constantes" + + #: java/jcf-parse.c:671 + #, c-format + msgid "error in constant pool entry #%d\n" + msgstr "erreur dans l'entrée #%d du lot de constantes\n" + + #. FIXME - where was first time + #: java/jcf-parse.c:683 + #, c-format + msgid "reading class %s for the second time from %s" + msgstr "lecture de la classe %s pour la seconde fois depuis %s" + + #: java/jcf-parse.c:701 + msgid "error while parsing fields" + msgstr "erreur lors de l'analyse syntaxique des champs" + + #: java/jcf-parse.c:704 + msgid "error while parsing methods" + msgstr "erreur lors de l'analyse syntaxique des méthodes" + + #: java/jcf-parse.c:707 + msgid "error while parsing final attributes" + msgstr "erreur lors de l'analyse syntaxique des attributs" + + #: java/jcf-parse.c:721 + #, c-format + msgid "the `java.lang.Object' that was found in `%s' didn't have the special zero-length `gnu.gcj.gcj-compiled' attribute. This generally means that your classpath is incorrectly set. Use `info gcj \"Input Options\"' to see the info page describing how to set the classpath" + msgstr "« java.lang.Object» qui a été repéré dans « %s » n'avait pas l'attribut spécial de longueur zéro «gnu.gcj.gcj-compiled». Cela généralement signifie que le chemin d'accès aux classes est incorrectement initialisé. Utiliser «info gcj \"Input Options\" » pour accéder aux informations décrivant comment initialiser le chemin d'accès des classes." + + #: java/jcf-parse.c:811 + msgid "missing Code attribute" + msgstr "attribut Code manquant" + + #: java/jcf-parse.c:1050 + msgid "source file seen twice on command line and will be compiled only once" + msgstr "fichier source vu deux fois sur la ligne de commande et ne sera compilé une seule fois" + + #: java/jcf-parse.c:1066 + msgid "no input file specified" + msgstr "aucun fichier n'a été spécifié à l'entrée" + + #: java/jcf-parse.c:1095 + #, c-format + msgid "can't close input file %s" + msgstr "ne peut fermer le fichier d'entrée %s" + + #: java/jcf-parse.c:1132 + #, c-format + msgid "bad zip/jar file %s" + msgstr "fichier zip/jar erroné %s" + + #: java/jcf-write.c:2630 + #, c-format + msgid "internal error in generate_bytecode_insn - tree code not implemented: %s" + msgstr "erreur interne dans generate_bytecode_insn - arbre de code n'est pas implanté: %s" + + #: java/jcf-write.c:2937 + msgid "field initializer type mismatch" + msgstr "type de initialiseur du champ ne concorde pas" + + #: java/jcf-write.c:3346 + #, c-format + msgid "can't create directory %s" + msgstr "ne peut créer le répertoire %s" + + #: java/jv-scan.c:183 + msgid "only one of `--print-main', `--list-class', and `--complexity' allowed" + msgstr "seule une des options «--print-main», «--list-class» et «--complexity» est permise" + + #: java/jv-scan.c:186 + #, c-format + msgid "can't open output file `%s'" + msgstr "ne peut ouvrir le fichier de sortie « %s »" + + #: java/jv-scan.c:220 + #, c-format + msgid "file not found `%s'" + msgstr "fichier non repéré « %s »" + + #: java/jvspec.c:427 + msgid "can't specify `-D' without `--main'\n" + msgstr "ne peut spécifier «-D» sans «--main»\n" + + #: java/jvspec.c:430 + #, c-format + msgid "`%s' is not a valid class name" + msgstr "« %s » n'est pas un nom de classe valide" + + #: java/jvspec.c:436 + msgid "-R requires -o" + msgstr "-R requiert -o" + + #: java/jvspec.c:443 + msgid "warning: already-compiled .class files ignored with -C" + msgstr "AVERTISSEMENT: fichiers .class déjà compilés ignorés avec -C" + + #: java/jvspec.c:450 + msgid "cannot specify both -C and -o" + msgstr "ne peut spécéfier à la fois -C et -o" + + #: java/jvspec.c:462 + msgid "cannot create temporary file" + msgstr "ne peut créer un fichier temporaire" + + #: java/jvspec.c:490 + msgid "using both @FILE with multiple files not implemented" + msgstr "utilisé ensemble @FICHIER avec de multiples fichiers bMest pas implanté" + + #: java/jvspec.c:548 + msgid "cannot specify `main' class when not linking" + msgstr "ne peut spécifier la classe « main » lorsqu'il n'y a pas d'édition de liens" + + #: java/lang.c:453 + msgid "can't do dependency tracking with input from stdin" + msgstr "ne peut faire le tracking de dépendance avec l'entrée à partir de stdin" + + #: java/lang.c:469 + msgid "couldn't determine target name for dependency tracking" + msgstr "ne peut déterminer le nom de la cible pour le tracking de dépendance" + + #: java/lex.c:308 + #, c-format + msgid "" + "unknown encoding: `%s'\n" + "This might mean that your locale's encoding is not supported\n" + "by your system's iconv(3) implementation. If you aren't trying\n" + "to use a particular encoding for your input file, try the\n" + "`--encoding=UTF-8' option" + msgstr "" + "encodage inconnu: « %s »\n" + "Cela signifie que votre encodage local n'est pas supporté\n" + "par l'implantation iconv(3) sur votre système. Si vous n'essayez pas\n" + "d'utiliser un encodage particulier pour votre fichier d'entrée, essayer\n" + "l'option «--encoding=UTF-8»." + + #: java/mangle.c:85 + #, c-format + msgid "can't mangle %s" + msgstr "ne peut mutiler %s" + + #: java/mangle_name.c:145 java/mangle_name.c:217 + msgid "internal error - invalid Utf8 name" + msgstr "erreur interne - nom Utf8 invalide" + + #: /usr/share/bison.simple:650 + msgid "parse error; also virtual memory exceeded" + msgstr "erreur d,analyse syntaxique; aussi la mémoire virtuelle est épuisée" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:747 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:785 + msgid "Missing name" + msgstr "Nom manquant" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:749 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:787 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:812 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:996 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1343 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1554 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1556 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1785 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1811 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1822 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1833 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1845 + msgid "';' expected" + msgstr "«;» attendu" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:810 + msgid "'*' expected" + msgstr "«*» attendu" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:824 + msgid "Class or interface declaration expected" + msgstr "Déclaration de classe ou d'interface attendue" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:859 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:861 + msgid "Missing class name" + msgstr "Nom de classe manquant" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:864 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:868 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:876 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1041 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1289 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1291 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1620 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1856 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1888 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1940 + msgid "'{' expected" + msgstr "«{» attendu" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:878 + msgid "Missing super class name" + msgstr "Nom de super classe manquant" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:888 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:904 + msgid "Missing interface name" + msgstr "Nom d'interface manquant" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:975 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1308 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1369 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1578 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1800 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1809 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1820 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1831 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1843 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1860 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1862 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1933 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2104 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2166 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2318 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2330 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2337 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2344 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2355 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2357 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2395 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2397 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2399 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2420 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2422 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2424 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2440 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2442 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2463 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2465 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2467 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2495 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2497 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2499 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2501 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2519 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2521 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2532 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2543 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2554 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2565 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2576 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2589 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2593 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2595 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2608 + msgid "Missing term" + msgstr "Terme manquant" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:990 + msgid "Missing variable initializer" + msgstr "Initialiseur de variable manquant" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1007 + msgid "Invalid declaration" + msgstr "Déclaration invalide" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1013 + msgid "Can't specify array dimension in a declaration" + msgstr "Ne peut spécifier la dimension du tableau dans la déclaration" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1015 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1091 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2141 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2163 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2167 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2202 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2279 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2289 + msgid "']' expected" + msgstr "«]» attendu" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1019 + msgid "Unbalanced ']'" + msgstr "«]» non pairé" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1055 + msgid "Invalid method declaration, method name required" + msgstr "Déclaration de méthode invalide, nom de méthode requis" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1061 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1063 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2024 + msgid "Identifier expected" + msgstr "Identificateur attendu" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1066 + msgid "Invalid method declaration, return type required" + msgstr "Déclaration de méthode invalide, type retourné requis" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1089 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1534 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1541 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1550 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1552 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1580 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1688 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1969 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2022 + msgid "')' expected" + msgstr "«)» attendu" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1105 + msgid "Missing formal parameter term" + msgstr "Paramètre term formel manquant" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1120 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1125 + msgid "Missing identifier" + msgstr "Identificateur manquant" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1145 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1154 + msgid "Missing class type term" + msgstr "Type term de classe manquant" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1306 + msgid "Invalid interface type" + msgstr "Type d'interface invalide" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1498 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1667 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1669 + msgid "':' expected" + msgstr "«:» attendu" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1520 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1525 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1530 + msgid "Invalid expression statement" + msgstr "Déclaration d'expression invalide" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1548 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1576 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1616 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1684 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1752 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1858 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1926 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2016 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2018 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2026 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2262 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2264 + msgid "'(' expected" + msgstr "«(» attendu" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1618 + msgid "Missing term or ')'" + msgstr "Terme manquant ou «)»" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1665 + msgid "Missing or invalid constant expression" + msgstr "Expresion de constante manquante ou invalide" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1686 + msgid "Missing term and ')' expected" + msgstr "Terme manquant et «)» attendus" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1725 + msgid "Invalid control expression" + msgstr "Expression de contrôle invalide" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1727 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1729 + msgid "Invalid update expression" + msgstr "Expression de mise à jour invalide" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1754 + msgid "Invalid init statement" + msgstr "Déclaration init invalide" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1929 + msgid "Missing term or ')' expected" + msgstr "Terme manquant ou «)» attendu" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1971 + msgid "'class' or 'this' expected" + msgstr "« class» ou «ceci » attendu" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1973 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1975 + msgid "'class' expected" + msgstr "« class » attendu" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2020 + msgid "')' or term expected" + msgstr "«)» or terme attendu" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2139 + msgid "'[' expected" + msgstr "«[» attendu" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2217 + msgid "Field expected" + msgstr "Champ attendu" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2274 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2284 + msgid "Missing term and ']' expected" + msgstr "Terme manquant et «]» attendu" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2388 + msgid "']' expected, invalid type expression" + msgstr "«]» attendu, type d'expression invalide" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2391 + msgid "Invalid type expression" + msgstr "Type d'expression invalide" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2503 + msgid "Invalid reference type" + msgstr "Type de référence invalide" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2981 + msgid "Constructor invocation must be first thing in a constructor" + msgstr "L'invaocation d'un constructeur doit être la première chose dans un constructeur" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2983 + msgid "Only constructors can invoke constructors" + msgstr "Seuls les constructeurs peuvent invoquer des constructeurs" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2992 + #, c-format + msgid ": `%s' JDK1.1(TM) feature" + msgstr ": « %s » option JDK1.1(TM)" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:3052 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:3054 + #, c-format + msgid "" + "%s.\n" + "%s" + msgstr "" + "%s.\n" + "%s" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:6833 + #, c-format + msgid "malformed .zip archive in CLASSPATH: %s" + msgstr "archive .zip mal composée dans CLASSPATH: %s" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:6904 + #, c-format + msgid "Can't find default package `%s'. Check the CLASSPATH environment variable and the access to the archives" + msgstr "ne peut repérer le package par défaut « %s ». Vérifier la variable d'environnement CLASSPATH et l'accès aux archives." + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:12228 + #, c-format + msgid "missing static field `%s'" + msgstr "champ statique manquant « %s »" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:12233 + #, c-format + msgid "not a static field `%s'" + msgstr "n'est pas un champ statique « %s »" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:12276 + #, c-format + msgid "No case for %s" + msgstr "Oas de case pour %s" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:13122 + #, c-format + msgid "unregistered operator %s" + msgstr "opérator %s non enregistré" + + #: java/typeck.c:178 + msgid "internal error - use of undefined type" + msgstr "erreur interne - utilisation d'un type non défini" + + #: java/typeck.c:566 + msgid "junk at end of signature string" + msgstr "rebut à la fin de la chaîne de signature" + + #: java/verify.c:480 + msgid "bad pc in exception_table" + msgstr "PC erroné dans exception_table" + + #: java/verify.c:1392 + #, c-format + msgid "unknown opcode %d@pc=%d during verification" + msgstr "code-op inconnu %d@pc=%d durant la vérification" + + #: java/verify.c:1462 java/verify.c:1475 java/verify.c:1479 + #, c-format + msgid "verification error at PC=%d" + msgstr "erreur de vérification au PC=%d" + + #: java/lang-options.h:32 + msgid "Disable automatic array bounds checking" + msgstr "Vérification automatique désactivée des bornes de tableaux" + + #: java/lang-options.h:34 + msgid "Disable assignability checks for stores into object arrays" + msgstr "Désactiver la vérificaitions des affectations dans les tableaux d'objets" + + #: java/lang-options.h:36 + msgid "Assume native functions are implemented using JNI" + msgstr "Assumer que les fonctions natives sont implantées et qu'elles utilisent JNI" + + #: java/lang-options.h:38 + msgid "Replace system path" + msgstr "Remplacer le chemin système" + + #: java/lang-options.h:40 + msgid "Set class path" + msgstr "Initialiser le chemin des classes" + + #: java/lang-options.h:42 + msgid "Set class path (deprecated: use --classpath instead)" + msgstr "Initialiser le chemin des classes (déprécié: utiliser --classpath à la place)" + + #: java/lang-options.h:44 + msgid "Choose class whose main method should be used" + msgstr "Choisir la classe dont la méthode principale devrait être utilisée" + + #: java/lang-options.h:46 + msgid "Choose input encoding (default comes from locale)" + msgstr "choisir l'encodade d'entrée (par défaut provient de la locale)" + + #: java/lang-options.h:48 + msgid "Add directory to class path" + msgstr "Ajouter un répertoire au chemin des classes" + + #: java/lang-options.h:50 + msgid "Directory where class files should be written" + msgstr "Répertoire où les fichiers de classe devraient être écrits" + + #: java/lang-options.h:52 + msgid "Warn if modifiers are specified when not necessary" + msgstr "Avertir si des modificateurs sont spécifiés sans que cela ne soit nécessaires" + + #: java/lang-options.h:54 + msgid "Warn if deprecated empty statements are found" + msgstr "Avertir si des déclarations vides dépréciés sont trouvées" + + #: java/lang-options.h:56 + msgid "Warn if .class files are out of date" + msgstr "Avertir si des fichier .class sont périmées" + + #: java/lang-options.h:58 + msgid "Always check for non gcj generated classes archives" + msgstr "Toujours vérifier dans les archives de classes non générées gcj" + + #: java/lang-options.h:60 + msgid "Never optimize static class initialization code" + msgstr "Ne jamais optimiser le code d'initialisation de classe statique" + + #: java/lang-options.h:62 + msgid "Use offset tables for virtual method calls" + msgstr "Utiliser des tables de décalage pour les appels de méthodes virtuelles" + + #: objc/objc-act.c:606 + msgid "no class name specified as argument to -fconstant-string-class" + msgstr "pas de nom de classe spécifier dans l'argument à -fconstant-string-class" + + #: objc/objc-act.c:757 + #, c-format + msgid "object does not conform to the `%s' protocol" + msgstr "objet n'est pas conforme au protocole « %s »" + + #: objc/objc-act.c:801 + #, c-format + msgid "class `%s' does not implement the `%s' protocol" + msgstr "classe « %s » n'implante pas le protocole « %s »" + + #: objc/objc-act.c:882 + #, c-format + msgid "`%s' cannot be statically allocated" + msgstr "« %s » ne peut être statiquement alloué" + + #: objc/objc-act.c:939 + #, c-format + msgid "unexpected type for `id' (%s)" + msgstr "type inattendu pour « id » (%s)" + + #: objc/objc-act.c:944 + msgid "undefined type `id', please import " + msgstr "type « id » indéfini, SVP importer " + + #: objc/objc-act.c:996 + #, c-format + msgid "protocol `%s' has circular dependency" + msgstr "le protocole « %s » a une dépendance circulaire" + + #: objc/objc-act.c:1018 objc/objc-act.c:5229 + #, c-format + msgid "cannot find protocol declaration for `%s'" + msgstr "ne peut repérer la déclaration de protocole pour « %s »" + + #: objc/objc-act.c:1279 objc/objc-act.c:5747 objc/objc-act.c:6077 objc/objc-act.c:6126 objc/objc-act.c:6162 objc-parse.y:1752 + #, c-format + msgid "cannot find interface declaration for `%s'" + msgstr "ne peut repérer la déclaration d'interface pour « %s »" + + #: objc/objc-act.c:1304 + #, c-format + msgid "cannot find reference tag for class `%s'" + msgstr "ne peut repérer la référence pour l'étiquette de classe %s." + + #: objc/objc-act.c:2314 + #, c-format + msgid "cannot find class `%s'" + msgstr "ne peut repérer la classe « %s »" + + #: objc/objc-act.c:2316 + #, c-format + msgid "class `%s' already exists" + msgstr "classe « %s » existe déjà" + + #. fatal did not work with 2 args...should fix + #: objc/objc-act.c:2440 + #, c-format + msgid "cannot find interface declaration for `%s', superclass of `%s'" + msgstr "ne peut repérer une déclaration d'interface pour « %s », super classe de « %s »" + + #: objc/objc-act.c:2447 + #, c-format + msgid "circular inheritance in interface declaration for `%s'" + msgstr "héritage circulaire dans la déclaration de l'interface pour « %s »" + + #: objc/objc-act.c:3500 objc/objc-act.c:3517 + msgid "inconsistent instance variable specification" + msgstr "spécification inconsistente avec l'instance de la vairable" + + #: objc/objc-act.c:4710 + #, c-format + msgid "multiple declarations for method `%s'" + msgstr "multiples déclarations pour la méthode « %s »" + + #: objc/objc-act.c:4876 + #, c-format + msgid "invalid receiver type `%s'" + msgstr "type du receveur invalide « %s »" + + #: objc/objc-act.c:4907 objc/objc-act.c:4933 objc/objc-act.c:4981 + #, c-format + msgid "`%s' does not respond to `%s'" + msgstr "« %s » ne répond pas à « %s »" + + #: objc/objc-act.c:4913 objc/objc-act.c:7197 + #, c-format + msgid "no super class declared in interface for `%s'" + msgstr "pas de super classe déclarée dans l'interface pour « %s »" + + #: objc/objc-act.c:5011 + msgid "cannot find class (factory) method" + msgstr "ne peut repérer de méthode de classe (manufacturé)" + + #: objc/objc-act.c:5012 objc/objc-act.c:5056 + #, c-format + msgid "return type for `%s' defaults to id" + msgstr "type retourné pour « %s » par défaut est id" + + #: objc/objc-act.c:5029 + #, c-format + msgid "method `%s' not implemented by protocol" + msgstr "méthode « %s » n'est pas implantée dans le protocole." + + #: objc/objc-act.c:5038 + msgid "return type defaults to id" + msgstr "type retourné par défaut est id" + + #: objc/objc-act.c:5055 + msgid "cannot find method" + msgstr "ne peut repérer la méthode" + + #. Historically, a class method that produced objects (factory + #. method) would assign `self' to the instance that it + #. allocated. This would effectively turn the class method into + #. an instance method. Following this assignment, the instance + #. variables could be accessed. That practice, while safe, + #. violates the simple rule that a class method should not refer + #. to an instance variable. It's better to catch the cases + #. where this is done unknowingly than to support the above + #. paradigm. + #: objc/objc-act.c:5298 + #, c-format + msgid "instance variable `%s' accessed in class method" + msgstr "instance « %s » de la variable accédé par la méthode de classe" + + #: objc/objc-act.c:5548 + #, c-format + msgid "duplicate definition of class method `%s'" + msgstr "duplication de définition de la méthode de la classe « %s »" + + #: objc/objc-act.c:5554 + #, c-format + msgid "duplicate declaration of class method `%s'" + msgstr "duplication de déclaration de la méthode de classe « %s »" + + #: objc/objc-act.c:5590 + #, c-format + msgid "duplicate definition of instance method `%s'" + msgstr "duplication de définition de la méthode d'instanciation « %s »" + + #: objc/objc-act.c:5596 + #, c-format + msgid "duplicate declaration of instance method `%s'" + msgstr "duplication de déclaration de la méthode d'instanciation « %s »" + + #: objc/objc-act.c:5636 + #, c-format + msgid "duplicate interface declaration for category `%s(%s)'" + msgstr "duplication de déclaration d'interface pour la catégorie «%s(%s)»" + + #: objc/objc-act.c:5722 + #, c-format + msgid "instance variable `%s' is declared private" + msgstr "instance de la variable « %s » est déclaré privée" + + #: objc/objc-act.c:5769 + #, c-format + msgid "instance variable `%s' is declared %s" + msgstr "instance de la variable « %s » est déclaré %s" + + #: objc/objc-act.c:5779 + msgid "static access to object of type `id'" + msgstr "accès statique à un objket de type « id »" + + #: objc/objc-act.c:5816 objc/objc-act.c:5909 + #, c-format + msgid "incomplete implementation of class `%s'" + msgstr "implantation incomplète de la classe « %s »" + + #: objc/objc-act.c:5820 objc/objc-act.c:5914 + #, c-format + msgid "incomplete implementation of category `%s'" + msgstr "implantation incomplète de la catégorie « %s »" + + #: objc/objc-act.c:5825 objc/objc-act.c:5919 + #, c-format + msgid "method definition for `%c%s' not found" + msgstr "définition de la méthode pour «%c%s» n'a pas été repérée" + + #: objc/objc-act.c:5963 + #, c-format + msgid "%s `%s' does not fully implement the `%s' protocol" + msgstr "%s « %s » n'implante pas complètement le protocole « %s »" + + #: objc/objc-act.c:6021 objc/objc-act.c:8118 + msgid "`@end' missing in implementation context" + msgstr "«@end» manquant dans l'implantation du contexte" + + #: objc/objc-act.c:6049 + #, c-format + msgid "reimplementation of class `%s'" + msgstr "ré-implantation de la classe « %s »" + + #: objc/objc-act.c:6091 + #, c-format + msgid "conflicting super class name `%s'" + msgstr "nom de super classe « %s » est conflictuel" + + #: objc/objc-act.c:6106 + #, c-format + msgid "duplicate interface declaration for class `%s'" + msgstr "double déclaration d'interface pour la classe « %s »" + + #: objc/objc-act.c:6388 + #, c-format + msgid "duplicate declaration for protocol `%s'" + msgstr "double déclaration pour le protocole « %s »" + + #: objc/objc-act.c:7238 + msgid "[super ...] must appear in a method context" + msgstr "[super ...] doit apparaître dans une méthode du contexte" + + #: objc/objc-act.c:8220 objc/objc-act.c:8236 + #, c-format + msgid "potential selector conflict for method `%s'" + msgstr "conflit potentiel sur le sélecteur pour la méthode « %s »" + + #: objc-parse.y:2612 + msgid "`@end' must appear in an implementation context" + msgstr "«@end» doit appraître dans un contaxte d'implantation" + + #: objc-parse.y:2886 + msgid "method definition not in class context" + msgstr "méthode de définition n'est pas dans un contexte de classe" + + #: objc/lang-options.h:27 + msgid "Dump decls to a .decl file" + msgstr "Vidange des déclaration dans un fichier .decl" + + #: objc/lang-options.h:29 + msgid "Generate code for GNU runtime environment" + msgstr "Générer du code pour l'environnement GNU d'exécution" + + #: objc/lang-options.h:32 + msgid "Generate code for NeXT runtime environment" + msgstr "Générer le code pour l'environnement d'exécution du NeXT" + + #: objc/lang-options.h:35 + msgid "Warn if a selector has multiple methods" + msgstr "Avertir si le sélecteur a de multiples méthodes" + + #: objc/lang-options.h:39 + msgid "Do not warn if inherited methods are unimplemented" + msgstr "Ne pas avertir si les méthodes héritées ne sont pas implantées" + + #: objc/lang-options.h:41 + msgid "Generate C header of platform specific features" + msgstr "Générer des en-têtes C pour les options spécifiques de la plate-forme" + + #: objc/lang-options.h:43 + msgid "Specify the name of the class for constant strings" + msgstr "Spécifier le nom de la classe pour les constantes chaînes" + + #: java/lang-specs.h:33 + msgid "-fjni and -femit-class-files are incompatible" + msgstr "-fjni et -femit-class-files sont incompatibles" + + #: java/lang-specs.h:34 + msgid "-fjni and -femit-class-file are incompatible" + msgstr "-fjni et -femit-class-file sont incompatibles" + + #: java/lang-specs.h:35 java/lang-specs.h:36 + msgid "-femit-class-file should used along with -fsyntax-only" + msgstr "-femit-class-file dervait être utilisé avec -fsyntax-only" + + #: config/nextstep.h:161 config/nextstep.h:164 + msgid "-p profiling is no longer supported. Use -pg instead" + msgstr "-p profilage n'est plus supporté. Utiliser -pg à la place." + + #: config/arm/arm.h:211 + msgid "-mapcs-26 and -mapcs-32 may not be used together" + msgstr "-mapcs-26 et -mapcs-32 ne peuvent être utilisés ensembles" + + #: config/arm/arm.h:223 + msgid "-msoft-float and -mhard_float may not be used together" + msgstr "-msoft-float et -mhard_float ne peuvent être utilisées ensembles" + + #: config/arm/arm.h:234 + msgid "-mbig-endian and -mlittle-endian may not be used together" + msgstr "-mbig-endian et -mlittle-endian ne peuvent être utilisés ensemble" + + #: config/arm/arm.h:252 + msgid "incompatible interworking options" + msgstr "options d'inter-réseautage incompatibles" + + #: config/sparc/freebsd.h:31 config/ia64/freebsd.h:23 config/alpha/freebsd.h:36 config/i386/freebsd-aout.h:227 + msgid "`-p' not supported; use `-pg' and gprof(1)" + msgstr "«-p» n'est pas supporté; utiliser «-pg» et gprof(1)" + + #: gcc.c:672 f/lang-specs.h:35 + msgid "GNU C does not support -C without using -E" + msgstr "GNU C ne supporte pas -C sans utiliser -E" + + #: gcc.c:699 ada/lang-specs.h:39 java/jvspec.c:77 + msgid "-pg and -fomit-frame-pointer are incompatible" + msgstr "-pg et -fomit-frame-pointer sont incompatibles" + + #: gcc.c:846 + msgid "-E required when input is from standard input" + msgstr "-E est requis lorsque l'entrée est faite à partir de l'entrée standard" + + #: gcc.c:850 + msgid "compilation of header file requested" + msgstr "fichier d'en-tête requis pour la compilation" + + #: config/mcore/mcore.h:60 + msgid "choose either big or little endian, not both" + msgstr "choisir un système à octets de poids fort ou faible mais pas les deux" + + #: config/mcore/mcore.h:63 + msgid "choose either m340 or m210 not both" + msgstr "choisir m340 ou m210 mais pas les deux" + + #: config/mcore/mcore.h:64 + msgid "the m210 does not have little endian support" + msgstr "Le m210 ne supporte pas le code pour système à octets de poids faible" + + #: ada/lang-specs.h:42 + msgid "-c or -S required for Ada" + msgstr "-c ou -S requis pour Ada" + + #: config/mips/r3900.h:36 config/mips/r3900.h:42 + msgid "-mhard-float not supported" + msgstr "-mhard-float n'est pas supporté" + + #: config/mips/r3900.h:38 config/mips/r3900.h:44 + msgid "-msingle-float and -msoft-float can not both be specified" + msgstr "-msingle-float et -msoft-float ne peuvent être spécifiés ensembles" + + #: config/mmix/mmix.h:112 + msgid "options -mabi=mmixware and -mabi=gnu are mutually exclusive" + msgstr "options -mabi=mmixware et -mabi=gnu sont mutuellement exclusives" + + #: config/i860/fx2800.h:290 + msgid "-p option not supported: use -pg instead" + msgstr "l'option -p n'est pas supportée: utitilse -pg à la place" + + #: config/arm/riscix.h:73 config/arm/riscix.h:133 + msgid "-mbsd and -pedantic incompatible" + msgstr "-mbsd et -pedantic incompatibles" + + #: config/arm/riscix.h:74 config/arm/riscix.h:134 + msgid "-mbsd and -mxopen incompatible" + msgstr "-mbsd et -mxopen incompatibles" + + #: config/arm/riscix.h:75 config/arm/riscix.h:135 + msgid "-mxopen and -pedantic incompatible" + msgstr "-mxopen et -pedantic incompatibles" + + #: config/arc/arc.h:59 config/mips/mips.h:1007 + msgid "may not use both -EB and -EL" + msgstr "ne peut utiliser ensemble -EB et -EL" + + #: config/vax/vax.h:42 config/vax/vax.h:43 + msgid "profiling not supported with -mg\n" + msgstr "profilage n'est pas supporté avec -mg\n" + + #: config/i386/cygwin.h:114 + msgid "mno-cygwin and mno-win32 are not compatible" + msgstr "mno-cygwin et mno-win32 ne sont pas compatibles" + + #: config/i386/cygwin.h:169 config/i386/mingw32.h:69 + msgid "shared and mdll are not compatible" + msgstr "shared et mdll ne sont pas compatibles" + + #: config/mips/mips.h:837 + msgid "-pipe is not supported" + msgstr "-pipe n'est pas supporté" + + #: config/mips/mips.h:1003 + msgid "may not use both -mfp64 and -msingle-float" + msgstr "ne peut utiliser ensemble -mfp64 et -msingle-float" + + #: config/mips/mips.h:1004 + msgid "may not use both -mfp64 and -m4650" + msgstr "ne peut utiliser ensemble -mfp64 et -m4650" + + #: config/mips/mips.h:1006 + msgid "may not use both -mgp32 and -mfp64" + msgstr "ne peut utiliser ensemble -mfp32 et -mfp64" + + #: config/i386/sco5.h:662 config/i386/sco5.h:737 + msgid "-static not valid with -mcoff" + msgstr "-static n'est pas valide avec -mcoff" + + #: config/i386/sco5.h:663 config/i386/sco5.h:738 + msgid "-shared not valid with -mcoff" + msgstr "-shared n'est pas valide avec -mcoff" + + #: config/i386/sco5.h:664 config/i386/sco5.h:739 + msgid "-symbolic not valid with -mcoff" + msgstr "-symbolic n'est pas valide avec -mcoff" + + #: config/i386/sco5.h:702 + msgid "-fpic is not valid with -mcoff" + msgstr "-fpic n'est pas valide avec -mcoff" + + #: config/i386/sco5.h:703 + msgid "-fPIC is not valid with -mcoff" + msgstr "-fPic n'est pas valide avec -mcoff" + + #: config/i386/sco5.h:740 + msgid "-fpic not valid with -mcoff" + msgstr "-fpic n'est pas valide avec -mcoff" + + #: config/i386/sco5.h:741 + msgid "-fPIC not valid with -mcoff" + msgstr "-fPIC n'est pas valide avec -mcoff" + + #~ msgid "__builtin_trap not supported by this target" + #~ msgstr "__builtin_trap n'est pas supporté par la cible" + + #~ msgid "`%s' previously defined here" + #~ msgstr "« %s » précédemment défini ici" + + #~ msgid "`%s' previously declared here" + #~ msgstr "« %s » précédemment déclaré ici" + + #~ msgid "invalid lvalue in increment" + #~ msgstr "lvalue invalide dans l'incrémentation" + + #~ msgid "invalid lvalue in decrement" + #~ msgstr "lvalue invalide dans la décrémentation" + + #~ msgid "increment" + #~ msgstr "incrément" + + #~ msgid "decrement" + #~ msgstr "décrément" + + #~ msgid "Usage: %s [switches] input output\n" + #~ msgstr "Usage: %s [options] entrée sortie\n" + + #~ msgid "output_operand: %s" + #~ msgstr "output_operand: %s" + + #~ msgid "invalid %H value" + #~ msgstr "valeur %H invalide" + + #~ msgid "invalid %h value" + #~ msgstr "valeur %h invalide" + + #~ msgid "invalid %Q value" + #~ msgstr "valeur %Q invalide" + + #~ msgid "invalid %q value" + #~ msgstr "valeur %q invalide" + + #~ msgid "invalid %p value" + #~ msgstr "valeur %p invalide" + + #~ msgid "invalid %B value" + #~ msgstr "valeur %B invalide" + + #~ msgid "invalid %C value" + #~ msgstr "valeur %C invalide" + + #~ msgid "invalid %E value" + #~ msgstr "valeur %E invalide" + + #~ msgid "invalid %r value" + #~ msgstr "valeur %r invalide" + + #~ msgid "-march=%s does not support -mips%d" + #~ msgstr "-march=%s ne supporte pas -mips%d" + + #~ msgid "no code label found" + #~ msgstr "pas d'étiquette de code trouvée" + + #~ msgid "profiling does not support code models other than medlow" + #~ msgstr "profilage ne supporte pas le code pour les modèles autre que medlow" + + #~ msgid "%s and profiling conflict: disabling %s" + #~ msgstr "%s avec des conflit de profilage: désactivation de %s" + + #~ msgid "Use function_epilogue()" + #~ msgstr "Utiliser fonction_epilogue()" + + #~ msgid "Do not use function_epilogue()" + #~ msgstr "Ne pas utiliser fonction_epilogue()" + + #~ msgid "%d errors, %d sorries, do granting" + #~ msgstr "%d erreurs, %d plaintes, donner la permission" + + #~ msgid "GNU compiler does not support statically allocated objects" + #~ msgstr "compilateur GNU ne supporte pas les objets alloués de manière statique" + + #~ msgid "causing unhandled exception `%s' (this is flaged only once)" + #~ msgstr "causant l'exception non traité « %s » (ceci est relevé seulement une fois)" + + #~ msgid "range failure (not inside function)" + #~ msgstr "échec sur l'étendue (n'est pas à l'intérieur de la fonction)" + + #~ msgid "possible range failure (not inside function)" + #~ msgstr "échec possible de l'étendue (pas à l'intérique de la fonction)" + + #~ msgid "expression will always cause RANGEFAIL" + #~ msgstr "l'expression causera toujours RENGEFAIL" + + #~ msgid "right hand side of assignment is a mode" + #~ msgstr "côté droit de l'affectation est un mode" + + #~ msgid "incompatible modes in %s" + #~ msgstr "modes incompatibles dans %s" + + #~ msgid "bad string length in %s" + #~ msgstr "chaîne de longueur erronée dans %s" + + #~ msgid "mode mismatch in %s expression" + #~ msgstr "non concordance de mode dans l'expression %s" + + #~ msgid "%s expression must be referable" + #~ msgstr "expression %s doit être référable" + + #~ msgid "%s not allowed outside a PROC" + #~ msgstr "%s n'est pas permis en dehors d'une procédure" + + #~ msgid "%s action in PROC with no declared RESULTS" + #~ msgstr "action %s dans la procédure sans RÉSULTATS déclarés" + + #~ msgid "RETURN not allowed outside PROC" + #~ msgstr "RETURN n'est pas permis en dehors d'une procédure" + + #~ msgid "RETURN with a value, in PROC returning void" + #~ msgstr "RETURN avec valeur dans une procédure retournant void" + + #~ msgid "RETURN with no value and no RESULT action in procedure" + #~ msgstr "RETURN sans valeur et sans RÉSULTAT d'action dans la procédure" + + #~ msgid "no label named `%s'" + #~ msgstr "pas d'étiquette nommée « %s »" + + #~ msgid "cannot GOTO label `%s' outside current function" + #~ msgstr "ne peut aller à L'étiquette « %s » en dehors de la fonction courante" + + #~ msgid "no EXITable label named `%s'" + #~ msgstr "pas d'étiquette de sortie portant le nom « %s »" + + #~ msgid "cannot EXIT label `%s' outside current function" + #~ msgstr "ne sortir à l'aide de l'étiquette « %s » en dehors de la fonction courante" + + #~ msgid "case selector not compatible with label" + #~ msgstr "le sélecteur de CASE n'est pas compatible avec l'étiquette" + + #~ msgid "ELSE label not within a CASE statement" + #~ msgstr "étiquette du ELSE n'est pas n'est pas à l'intérieur de la déclaration du CASE" + + #~ msgid "multiple default labels found in a CASE statement" + #~ msgstr "étiquettes multiples de défaut dans la déclaration d'un «case»" + + #~ msgid "this is the first ELSE label" + #~ msgstr "ceci est la première étiquette ELSE" + + #~ msgid "label found outside of CASE statement" + #~ msgstr "étiquette trouvée en dehors de la déclaration du CASE" + + #~ msgid "duplicate CASE value" + #~ msgstr "valeur de CASE double" + + #~ msgid "this is the first entry for that value" + #~ msgstr "c'est la première entrée pour cette valeur" + + #~ msgid "CASE value out of range" + #~ msgstr "valeur du CASE hors gamme" + + #~ msgid "empty range" + #~ msgstr "bornes vides" + + #~ msgid "label within scope of cleanup or variable array" + #~ msgstr "étiquette à l'intérieur de la portée du nettoyage ou du tableau de variables" + + #~ msgid "mode in label is not discrete" + #~ msgstr "mode dans l'étiquette n'est pas discret" + + #~ msgid "label not within a CASE statement" + #~ msgstr "étiquette n'est pas à l'intérieur de la déclaration du CASE" + + #~ msgid "lower bound of range must be a discrete literal expression" + #~ msgstr "borne inférieure de l'étendue doit être une expression litérale discrète" + + #~ msgid "upper bound of range must be a discrete literal expression" + #~ msgstr "borne supérieure de l'étendue doit être une expression litérale discrète" + + #~ msgid "CASE label is not valid" + #~ msgstr "étiquette du CASE n'est pas valide" + + #~ msgid "number of CASE selectors does not match the number of CASE label lists" + #~ msgstr "nombre de sélecteurs de CASE ne concorde pas avec la liste des étiquettes du CASE" + + #~ msgid "incomplete CASE - %s not handled" + #~ msgstr "CASE incomplet - %s n'est pas traité" + + #~ msgid "CASE selector with variable range" + #~ msgstr "sélecteur du CASE avec un étendue variable" + + #~ msgid "too many cases to do CASE completeness testing" + #~ msgstr "trop de cas pour la complétion de tests du CASE" + + #~ msgid "type of tuple cannot be implicit in multiple assignent" + #~ msgstr "type de tuple ne peut être implicite dans de multiples affectations" + + #~ msgid "conditional expression cannot be used in multiple assignent" + #~ msgstr "expression conditionnelle ne peut être utilisé dans de multiples affectations" + + #~ msgid "internal error - unknown type in multiple assignment" + #~ msgstr "erreur interne - type inconnu dans une affectation multiple" + + #~ msgid "no operator allowed in multiple assignment," + #~ msgstr "pas d'opérateur permis dans de multiples affectations" + + #~ msgid "location modes in multiple assignment are not equivalent" + #~ msgstr "modes de localisation dans de multiples affectations ne sont pas équivalents" + + #~ msgid "you may not assign a value to a BUFFER or EVENT location" + #~ msgstr "vous pouvez affecter une valeur à la localisation d'un TAMPON ou d'un ÉVÉNEMENT " + + #~ msgid "can't assign value to READonly location" + #~ msgstr "ne peut affecter une valeur à une localisation en mode LECTURE seulement" + + #~ msgid "cannot assign to location with non-value property" + #~ msgstr "ne peut affecter une localisation avec une propriété sans valeur" + + #~ msgid "lefthand side of assignment is not a location" + #~ msgstr "côté gauche de l'affectation n'est pas un localisation" + + #~ msgid "bitstring slice" + #~ msgstr "tranche d'une chaîne de bits" + + #~ msgid "LENGTH on left-hand-side is non-portable" + #~ msgstr "LONGUEUR sur le côté droit n'est pas portable" + + #~ msgid "can only set LENGTH of array location" + #~ msgstr "peut seulement fixer la LONGUEUR de la localisation d'un tableau" + + #~ msgid "internal error: trying to make loc-identity with non-location" + #~ msgstr "erreur interne: tentative de créer une identité de localisation avec une non localisation" + + #~ msgid "cannot convert to a boolean mode" + #~ msgstr "ne peut convertir en un mode booléen" + + #~ msgid "cannot convert to a char mode" + #~ msgstr "ne peut convertir en mode caractère" + + #~ msgid "powerset tuple element out of range" + #~ msgstr "élément du tuple du powerset est hors gamme" + + #~ msgid "incompatible member of powerset tuple (at position #%d)" + #~ msgstr "membre incompatible du tuple du powerset ( à la position #%d)" + + #~ msgid "no initializer value for fixed field `%s'" + #~ msgstr "pas de valeur pour l'initialisateur du champ fixe « %s »" + + #~ msgid "non-constant value for tag field `%s'" + #~ msgstr "valeur non constante pour l'étiquette de champ « %s »" + + #~ msgid "field `%s' in wrong variant" + #~ msgstr "champ « %s » dans un variant erroné" + + #~ msgid "missing variant fields (at least `%s')" + #~ msgstr "champs variants manquants (au moins « %s »)" + + #~ msgid "bad initializer for field `%s'" + #~ msgstr "initialiseur erroné pour le champ « %s »" + + #~ msgid "no initializer value for variant field `%s'" + #~ msgstr "pas de valeur d'initialiseur pour le champ « %s »" + + #~ msgid "no selected variant" + #~ msgstr "pas de variant sélectionné" + + #~ msgid "mixture of labelled and unlabelled tuple elements" + #~ msgstr "mélange de tuple d'éléments étiquettés et non étiquettés" + + #~ msgid "probably not a structure tuple" + #~ msgstr "probablement pas une structure de tuple" + + #~ msgid "excess initializer for field `%s'" + #~ msgstr "débordement de l'initialiseur pour le champ « %s »" + + #~ msgid "excess unnamed initializers" + #~ msgstr "débordement d'initialiseurs sans nom" + + #~ msgid "non-constant start index for tuple" + #~ msgstr "index de départ du tuple n'est pas une constante" + + #~ msgid "invalid array tuple label" + #~ msgstr "étiquette invalide d'un tuple de tableau" + + #~ msgid "non-constant array tuple index range" + #~ msgstr "étendue de l'index du tableau de tuples n'est pas une constante" + + #~ msgid "incompatible array tuple element %s" + #~ msgstr "élément incompatible du tableau de tuples %s" + + #~ msgid "multiple (*) or (ELSE) array tuple labels" + #~ msgstr "multiples étiquettes de tuples de tableaux (*) ou (ELSE)" + + #~ msgid "empty range in array tuple" + #~ msgstr "étendue vide dans le tableau de tuples" + + #~ msgid "array tuple has duplicate index %s" + #~ msgstr "tableau de tuples a un double index %s" + + #~ msgid "array tuple index out of range" + #~ msgstr "index du tableau de tuples est hors gamme" + + #~ msgid "too many array tuple values" + #~ msgstr "trop de valeurs de tuples de tableaux" + + #~ msgid "dynamic array tuple without (*) or (ELSE)" + #~ msgstr "tuple de tableau dynamique sans (*) ou (ELSE)" + + #~ msgid "missing array tuple element %s" + #~ msgstr "élément de tuple de tableau manquant %s" + + #~ msgid "missing array tuple elements %s : %s" + #~ msgstr "éléments de tuple de tableau manquant %s : %s" + + #~ msgid "initializer is not an array or string mode" + #~ msgstr "initialiseur n'est pas en mode tableau ou chaîne" + + #~ msgid "destination is too small" + #~ msgstr "destination trop petite" + + #~ msgid "internal error: unknown type of expression" + #~ msgstr "erreur interne: type d'expression inconnue" + + #~ msgid "`%s' must not be declared readonly" + #~ msgstr "« %s » ne doit pas être déclaré en lecture seulement" + + #~ msgid "declaration of readonly variable without initialization" + #~ msgstr "déclaration d'une variable en lecture seuelement sans initialisation" + + #~ msgid "no initialization allowed for `%s'" + #~ msgstr "pas d'initialisation permise pour « %s »" + + #~ msgid "value for loc-identity `%s' is not a location" + #~ msgstr "valeur pour l'identité de localisation « %s » n'est pas une localisation" + + #~ msgid "location for `%s' not read-compatible" + #~ msgstr "localisation pour « %s » n'est pas compatible en lecture" + + #~ msgid "nonconstant initializer for `%s'" + #~ msgstr "initialiseur n,est pas un constante pour « %s »" + + #~ msgid "do_decl: internal error: don't know what to initialize" + #~ msgstr "do_decl: erreur interne: ne sait pas quoi initialiser" + + #~ msgid "RECURSIVE PROCs" + #~ msgstr "PROCÉDURES RÉCURSIVES" + + #~ msgid "`%s' must not be READonly" + #~ msgstr "« %s » ne doit pas être en lecture seulement" + + #~ msgid "POS may not be specified for a list of field declarations" + #~ msgstr "POS ne peut pas être spécifiés pour une liste de déclarations de champs" + + #~ msgid "(ELSE) case label as well as ELSE variant" + #~ msgstr "étiquette du cas (ELSE) aussi bien que le ELSE variant" + + #~ msgid "inconsistent modes between labels and tag field" + #~ msgstr "modes inconsistents entre les étiquettes et le champ étiquette" + + #~ msgid "too few tag labels" + #~ msgstr "pas assez d'étiquettes" + + #~ msgid "too many tag labels" + #~ msgstr "trop d'étiquettes" + + #~ msgid "case label lower limit is not a discrete constant expression" + #~ msgstr "limite inférieure de l'étiquette du CASE n'est pas une expression d'une constante discrète" + + #~ msgid "case label upper limit is not a discrete constant expression" + #~ msgstr "limite supérieure de l'étiquette du CASE n'est pas une expression d'une constante discrète" + + #~ msgid "case label must be a discrete constant expression" + #~ msgstr "l'étiquette du CASE doit être une expression de constante discrète" + + #~ msgid "variant label declared here..." + #~ msgstr "étiquette variante déclarée ici..." + + #~ msgid "...is duplicated here" + #~ msgstr "...est dupliqué ici" + + #~ msgid "no field (yet) for tag %s" + #~ msgstr "pas de champ (encore) pour l'étiquette %s" + + #~ msgid "non-value mode may only returned by LOC" + #~ msgstr "mode non-valeur peut seulement être retourné par LOC" + + #~ msgid "mode of `%s' is not a mode" + #~ msgstr "mode de %s n'est pas un mode" + + #~ msgid "`%s' may only be passed by LOC" + #~ msgstr "« %s » peut seulement être passé par LOC" + + #~ msgid "nothing named `%s' to grant" + #~ msgstr "rien de nommé « %s » à autoriser" + + #~ msgid "duplicate grant for `%s'" + #~ msgstr "duplication autorisée pour « %s »" + + #~ msgid "previous grant for `%s'" + #~ msgstr "autorisation précédente pour « %s »" + + #~ msgid "duplicate definition `%s'" + #~ msgstr "double définition de « %s »" + + #~ msgid "previous definition of `%s'" + #~ msgstr "définition précédente de « %s »" + + #~ msgid "ambiguous choice for seize `%s' -" + #~ msgstr "¨choix ambigu pour évaluer « %s » -" + + #~ msgid " - can seize this `%s' -" + #~ msgstr " - peut évaluer ceci « %s » -" + + #~ msgid " - or this granted decl `%s'" + #~ msgstr " - ou cette decl « %s » autorisé" + + #~ msgid "enumerator value for `%s' is less than 0" + #~ msgstr "valeur de l'énumérateur pour « %s » est plus petit que 0" + + #~ msgid "enumerators `%s' and `%s' have equal values" + #~ msgstr "énumérateurs « %s » et « %s » ont les mêmes valeurs" + + #~ msgid "undefined value in SET mode is obsolete and deprecated" + #~ msgstr "valeur non définie dans le mode SET est obsolète et déprécié" + + #~ msgid "BASE variable never declared" + #~ msgstr "variable de BASE jamais déclarée" + + #~ msgid "cannot BASE a variable on a PROC/PROCESS name" + #~ msgstr "ne peut établir une variable sur le nom du PROC/PROCESSUS" + + #~ msgid "INTERNAL ERROR: handle_one_level is broken" + #~ msgstr "ERREUR INTERNE: handle_one_level est brisé" + + #~ msgid "tuple without specified mode not allowed in %s" + #~ msgstr "tuple sans mode spécifié n'est pas permis dans %s" + + #~ msgid "conditional expression not allowed in %s" + #~ msgstr "expression conditionnelle n'est pas permise dans « %s »" + + #~ msgid "internal error: unknown expression mode in %s" + #~ msgstr "erreur interne: mode d'expression inconnnu dans %s" + + #~ msgid "CASE selector is not a discrete expression" + #~ msgstr "sélecteur du CASE n'est pas une expression discrète" + + #~ msgid "The number of CASE selectors does not match the number of CASE label lists" + #~ msgstr "Le nombre de sélecteurs de CASE ne concordent pas avec le nombre de listes d'étiquettes du CASE" + + #~ msgid "powerset is not addressable" + #~ msgstr "powerset n'est pas adressable" + + #~ msgid "array is not addressable" + #~ msgstr "tableau n'est pas adressable" + + #~ msgid "too few arguments in call to `%s'" + #~ msgstr "pas assez d'argument pour l'appel de « %s »" + + #~ msgid "too many arguments in call to `%s'" + #~ msgstr "trop d'arguments pour l'appel de « %s »" + + #~ msgid "cannot dereference, not a pointer" + #~ msgstr "ne peut déréférencer, n'est pas un pointeur" + + #~ msgid "missing '.' operator or undefined mode name `%s'" + #~ msgstr "opérateur «.» manquant ou nom de mode « %s » indéfini" + + #~ msgid "you have forgotten the '.' operator which must" + #~ msgstr "vous avez oublié l'opérateur «.» lequel doit être" + + #~ msgid " precede a STRUCT field reference, or `%s' is an undefined mode" + #~ msgstr " précède une référence sur champ STRUCT ou « %s » est un mode indéfini" + + #~ msgid "can't dereference PTR value using unary `->'" + #~ msgstr "ne peut dé-référencer une valeur PTR utilisant l'unaire «->»" + + #~ msgid "invalid type argument of `->'" + #~ msgstr "type d'argument invalide de «->»" + + #~ msgid "operand of '.' is not a STRUCT" + #~ msgstr "l'opérande de '.« n»est pas un STRUCT" + + #~ msgid "no field named `%s'" + #~ msgstr "pas de champ nommé « %s »" + + #~ msgid "ABS argument must be discrete or real mode" + #~ msgstr "argument ABS doit être en mode discret ou réel" + + #~ msgid "argument %d to ABSTIME must be of integer type" + #~ msgstr "argument %d à ABSTIME doit être un type entier" + + #~ msgid "parameter 1 must be referable" + #~ msgstr "paramètre 1 doit pouvoir être référencé" + + #~ msgid "mode mismatch in parameter 1" + #~ msgstr "non concordance de mode dans le paramètre 1" + + #~ msgid "parameter 2 must be a positive integer" + #~ msgstr "paramètre 2 doit être un entier positif" + + #~ msgid "CARD argument must be powerset mode" + #~ msgstr "argument CARD doit être un mode powerset" + + #~ msgid "expression for DESCR-built-in must be referable" + #~ msgstr "expression pour DESCR-built-in doit pouvoir être référencé" + + #~ msgid "argument to `%s' must be of integer type" + #~ msgstr "argument de « %s » doit être de type entier" + + #~ msgid "argument 1 to `%s' must be of floating point mode" + #~ msgstr "argument 1 de « %s » doit être en mode virgule flottante" + + #~ msgid "first argument to `%s' must be a mode" + #~ msgstr "premier argument de « %s » doit être un mode" + + #~ msgid "READonly modes for %s must have a value" + #~ msgstr "mode LECTRURE seulement pour %s doit avoir une valeur" + + #~ msgid "argument to TERMINATE must be a reference primitive value" + #~ msgstr "argument à TERMINATE doit être une référence à une valeur primitive" + + #~ msgid "argument 1 to INTTIME must be of mode TIME" + #~ msgstr "argument 1 de INTTIME doit être de mode TIME" + + #~ msgid "LENGTH argument must be string, buffer, event mode, text location or mode" + #~ msgstr "LONGUEUR de l'argument doit être une chaîne, un tampon, un mode d'événement, la localisation d'un texte ou un mode" + + #~ msgid "UPPER argument must have a mode, or be a mode" + #~ msgstr "argument du HAUT doit avoir un mode ou être un mode" + + #~ msgid "LOWER argument must have a mode, or be a mode" + #~ msgstr "argument du BAS doit avoir un mode ou être un mode" + + #~ msgid "UPPER argument must be string, array, mode or integer" + #~ msgstr "argument du HAUT doit être une chaîne, un tableau, un mode ou un entier" + + #~ msgid "LOWER argument must be string, array, mode or integer" + #~ msgstr "argument du BAS doit être une chaîne, un tableau, un mode ou un entier" + + #~ msgid "%s argument must be POWERSET mode" + #~ msgstr "argument %s doit être un mode POWERSET" + + #~ msgid "%s called for empty POWERSET" + #~ msgstr "%s appelé pour un POWERSET vide" + + #~ msgid "argument to NUM is not discrete" + #~ msgstr "argument à NUM n'est pas discret" + + #~ msgid "no integer mode which matches expression's mode" + #~ msgstr "pas de mode entier concordant au mode de l'expresion" + + #~ msgid "NUM's parameter is below its mode range" + #~ msgstr "paramètre NUMÉRIQUE est en dessous de l'étendue de son mode" + + #~ msgid "NUM's parameter is above its mode range" + #~ msgstr "paramètre NUMÉRIQUE est au dessus de l'étendue de son mode" + + #~ msgid "cannot take SUCC or PRED of a numbered SET" + #~ msgstr "ne peut prendre le SUIVANT ou le PRÉCÉDENT d'un ensemble énuméré" + + #~ msgid "SUCC or PRED must not be done on a PTR" + #~ msgstr "SUIVANT ou PRÉCÉDENT ne peuvent être pris sur un PTR" + + #~ msgid "SUCC or PRED for a reference type is not standard" + #~ msgstr "SUIVANT ou PRÉCÉDENT pour un type référencé n'est pas standard" + + #~ msgid "SUCC or PRED argument must be a discrete mode" + #~ msgstr "SUIVANT ou PRÉCÉDENT comme argument doit être en mode discret" + + #~ msgid "taking the %s of a value already at its %s value" + #~ msgstr "prendre le %s d'une valeur déjà à sa %s valeur" + + #~ msgid "size applied to a function mode" + #~ msgstr "taille appliquée au mode de la fonction" + + #~ msgid "sizeof applied to a void mode" + #~ msgstr "sizeof appliqué sur un mode void" + + #~ msgid "sizeof applied to an incomplete mode" + #~ msgstr "sizeof appliqué sur un mode incomplet" + + #~ msgid "cannot call a PROCESS, you START a PROCESS" + #~ msgstr "ne peut lancer un PROCESSUS, vous devez lancer le PROCESSUS" + + #~ msgid "%s parameter %d must be a location" + #~ msgstr "%s paramètre %d doit être une localisation" + + #~ msgid "%s parameter %d is READ-only" + #~ msgstr "%s paramètre %d est en mode LECTURE seulement" + + #~ msgid "LOC actual parameter %d is a non-referable location" + #~ msgstr "LOCALISATION du paramètre actuel %d est dans une localisation non référençable" + + #~ msgid "mode mismatch in parameter %d" + #~ msgstr "non concordance du mode dans le paramètre %d" + + #~ msgid "too many arguments to procedure `%s'" + #~ msgstr "trop d'arguments pour la procédure « %s »" + + #~ msgid "too many arguments to procedure" + #~ msgstr "trop d'arguments pour la procédure" + + #~ msgid "too few arguments to procedure `%s'" + #~ msgstr "pas assez d'argument pour la procédure « %s »" + + #~ msgid "too few arguments to procedure" + #~ msgstr "trop peu d'arguments pour la procédure" + + #~ msgid "syntax error (integer used as function)" + #~ msgstr "erreur de syntaxe (entier utilisé comme un fonction)" + + #~ msgid "syntax error - missing operator, comma, or '('?" + #~ msgstr "erreur de syntaxe - opérateur manquant virgule ou «(»?" + + #~ msgid "unimplemented built-in function `%s'" + #~ msgstr "fonction interne non implantée « %s »" + + #~ msgid "internal error - bad built-in function `%s'" + #~ msgstr "erreur interne - mauvaise fonction interne « %s »" + + #~ msgid "empty expression in string index" + #~ msgstr "expression vide dans la chaîne d'index" + + #~ msgid "only one expression allowed in string index" + #~ msgstr "seul un expression est permise dans une chaîne d'index" + + #~ msgid "invalid: primval ( untyped_exprlist )" + #~ msgstr "invalide: primval ( untyped_exprlist )" + + #~ msgid "operand is variable-size bitstring/power-set" + #~ msgstr "opérande est de taille variable bitstring/power-set" + + #~ msgid "tree code `%s' unhandled in build_compare_set_expr" + #~ msgstr "code de l'arbre « %s » n'est pas traitée dans build_compare_set_expr" + + #~ msgid "incompatible modes in concat expression" + #~ msgstr "modes incompatibles dans l'expression de concaténation" + + #~ msgid "invalid operation on array of chars" + #~ msgstr "opération invalide pour des tableaux de caractères" + + #~ msgid "comparison of variant structures is unsafe" + #~ msgstr "comparaison de structures variantes n'est pas sûre" + + #~ msgid "compare with variant records" + #~ msgstr "comparaison avec des enregistrements vairants" + + #~ msgid "incompatible operands to %s" + #~ msgstr "type d'opérandes incompatibles pour %s" + + #~ msgid "relational operator not allowed for this mode" + #~ msgstr "opérateur relationnel n'est pas permis pour ce mode" + + #~ msgid "cannot use %s operator on PROC mode variable" + #~ msgstr "ne peut utiliser l'opérateur %s pour une variable en mode PROCÉDURE" + + #~ msgid "invalid left operand of %s" + #~ msgstr "opérande de gauche invalide pour %s" + + #~ msgid "invalid right operand of %s" + #~ msgstr "opérande de droite invalide pour %s" + + #~ msgid "repetition expression must be constant" + #~ msgstr "répétitions d'expressions doit être une constante" + + #~ msgid "left argument to MOD/REM operator must be integral" + #~ msgstr "argument de gauche de l'opérateur MOD/REM doit être entier" + + #~ msgid "right argument to MOD/REM operator must be integral" + #~ msgstr "argument de droite de l'opérateur MOD/REM doit être entier" + + #~ msgid "right operand of IN is not a powerset" + #~ msgstr "l'opérande de droite de IN n'est pas un POWERSET" + + #~ msgid "left operand of IN incompatible with right operand" + #~ msgstr "opérande de gauche de IN incompatible avec l'opérande de droite" + + #~ msgid "-> operator not allow in constant expression" + #~ msgstr "opérateur -> n'est pas permis dans l'expression d'une constante" + + #~ msgid "taking the address of a string literal is non-standard" + #~ msgstr "prendre l'adresse d'un litéral de chaîne n,est pas standard" + + #~ msgid "taking the address of a function is non-standard" + #~ msgstr "prendre l'adresse d'une fonction n'est pas standard" + + #~ msgid "ADDR requires a LOCATION argument" + #~ msgstr "ADDR requiert un argument de LOCALISATION" + + #~ msgid "-> expression is not addressable" + #~ msgstr "expression -> n'est pas adressable" + + #~ msgid "ADDR parameter must be a LOCATION" + #~ msgstr "paramètre ADDR doit être une LOCALISATION" + + #~ msgid "possible internal error in build_chill_arrow_expr" + #~ msgstr "erreur interne possible dans build_chill_arrow_expr" + + #~ msgid "%s is not addressable" + #~ msgstr "%s n'est pas adressable" + + #~ msgid "repetition count is not an integer constant" + #~ msgstr "compteur de répétition n'est pas une constante entière" + + #~ msgid "repetition count < 0" + #~ msgstr "compteur de répétition > que 0" + + #~ msgid "repetition value not constant" + #~ msgstr "valeur de répétition n'est pas une constante" + + #~ msgid "bitstring repetition of non-constant boolean" + #~ msgstr "répétition de chaîne de bits d'un booléen non constant" + + #~ msgid "string repetition operand is non-constant bitstring" + #~ msgstr "opérande de répétition de chaînes n'est pas une contante de chaîne de bits" + + #~ msgid "non-char, non-bit string repetition" + #~ msgstr "répétition de chaîne n'est pas de caractères ni de bits" + + #~ msgid "right operand of %s is not array of boolean" + #~ msgstr "opérande de droite de %s n'est pas un tableau de booléens" + + #~ msgid "%s operator applied to boolean variable" + #~ msgstr "opérateur %s appliqué à une variable booléenne" + + #~ msgid "non-boolean mode in conditional expression" + #~ msgstr "mode non booléen dans l'expression conditionnelle" + + #~ msgid "decode_constant: invalid component_ref" + #~ msgstr "decode_constant: component_ref invalide" + + #~ msgid "decode_constant: mode and value mismatch" + #~ msgstr "decode_constant: mode et valeur ne concordent pas" + + #~ msgid "decode_constant: cannot decode this mode" + #~ msgstr "decode_constant: ne peut décoder ce mode" + + #~ msgid "decode_constant_selective: mode and value mismatch" + #~ msgstr "decode_constant_selective: mode et value ne concorde pas" + + #~ msgid "decode_constant_selective: cannot decode this mode" + #~ msgstr "decode_constant_selective: ne peut décoder ce mode" + + #~ msgid "can't write to %s" + #~ msgstr "ne peut écrire dans %s" + + #~ msgid "FORBID is not yet implemented" + #~ msgstr "FORBID n'est pas encore implantée" + + #~ msgid "function \"really_grant_this\" called for `%s'" + #~ msgstr "fonction «really_grant_this» appelée pour « %s »" + + #~ msgid "non-integral text length" + #~ msgstr "longueur de texte non entier" + + #~ msgid "non-constant text length" + #~ msgstr "longueur de texte non constante" + + #~ msgid "text length must be greater than 0" + #~ msgstr "la longueur de texte doit être plus grande que 0" + + #~ msgid "argument %d of %s must be of mode ASSOCIATION" + #~ msgstr "argument %d de %s doit être de mode ASSOCIATION" + + #~ msgid "argument %d of %s must be a location" + #~ msgstr "argument %d de %s doit être une localisation" + + #~ msgid "argument 2 of ASSOCIATE must not be an empty string" + #~ msgstr "argument 2 de ASSOCIATE ne doit pas être une chaîne vide" + + #~ msgid "argument 2 to ASSOCIATE must be a string" + #~ msgstr "argument 2 de ASSOCIATE doit être une chaîne" + + #~ msgid "argument 3 to ASSOCIATE must be a string" + #~ msgstr "argument 3 de ASSOCIATE doit être une chaîne" + + #~ msgid "too many arguments in call to MODIFY" + #~ msgstr "trop d'arguments dans l'appel de MODIFY" + + #~ msgid "argument 2 of MODIFY must not be an empty string" + #~ msgstr "argument 2 de MODIFY ne doit pas être une chaîne vide" + + #~ msgid "argument 2 to MODIFY must be a string" + #~ msgstr "argument 2 de MODIFY doit être une chaîne" + + #~ msgid "argument 3 to MODIFY must be a string" + #~ msgstr "argument 3 de MODIFY doit être une chaîne" + + #~ msgid "argument %d of %s must be an ACCESS or TEXT mode" + #~ msgstr "argument %d de %s doit être de mode ACCESS ou TEXT" + + #~ msgid "argument 4 of CONNECT must be of mode WHERE" + #~ msgstr "argument 4 de CONNECT doit être de mode WHERE" + + #~ msgid "index expression for ACCESS without index" + #~ msgstr "expression d'index pour ACCESS sans index" + + #~ msgid "incompatible index mode" + #~ msgstr "mode incompatible d'index" + + #~ msgid "argument 3 to CONNECT must be of mode USAGE" + #~ msgstr "argument 3 de CONNECT doit être de mode USAGE" + + #~ msgid "argument %d of %s must be of mode ACCESS" + #~ msgstr "argument %d de %s doit être de mode ACCESS" + + #~ msgid "too few arguments in call to `readrecord'" + #~ msgstr "pas assez d'arguments dans l'appel de readrecord()" + + #~ msgid "incompatible record mode" + #~ msgstr "mode incompatible d'enregistrement" + + #~ msgid "store location must not be READonly" + #~ msgstr "localisation de stockage ne doit pas être en LECTURE seulement" + + #~ msgid "too few arguments in call to `writerecord'" + #~ msgstr "pas assez d'arguments pour l'appel de writerecord()" + + #~ msgid "transfer to ACCESS without record mode" + #~ msgstr "transfer vers ACCESS sans mode d'enregistrement" + + #~ msgid "argument %d of %s must be of mode TEXT" + #~ msgstr "argument %d de %s doit être de mode TEXT" + + #~ msgid "TEXT doesn't have a location" + #~ msgstr "TEXT n'a pas de localisation" + + #~ msgid "incompatible index mode for SETETEXTACCESS" + #~ msgstr "mode d'index incompatible pour SETETEXTACCESS" + + #~ msgid "incompatible record mode for SETTEXTACCESS" + #~ msgstr "mode d'enregistrement incompatible pour SETTEXTACCESS" + + #~ msgid "parameter 2 must be a location" + #~ msgstr "paramètre 2 doit être une localisation" + + #~ msgid "incompatible modes in parameter 2" + #~ msgstr "modes incompatible dans le paramètre 2" + + #~ msgid "conditional expression not allowed in this context" + #~ msgstr "expression conditionnelle n'est pas permise dans ce contexte" + + #~ msgid "untyped expression as argument %d" + #~ msgstr "expression sans type comme argument %d" + + #~ msgid "cannot process %d bits integer for READTEXT argument %d" + #~ msgstr "ne peut traiter %d bits entiers pour l'argument de READTEXT %d" + + #~ msgid "cannot process %d bits integer WRITETEXT argument %d" + #~ msgstr "ne peut traiter %d bits entiers pour l'argument de WRITETEXT %d" + + #~ msgid "argument %d is READonly" + #~ msgstr "argument %d est en LECTURE seulement" + + #~ msgid "argument %d must be referable" + #~ msgstr "argument %d doit pouvoir être référencé" + + #~ msgid "cannot process argument %d of WRITETEXT, unknown size" + #~ msgstr "ne peut traiter l'argument %d de WRITETEXT, taille inconnue" + + #~ msgid "cannot process mode of argument %d for %sTEXT" + #~ msgstr "ne peut traiter le mode de l'argument %d pour %s de type TEXTE" + + #~ msgid "too few arguments for this format string" + #~ msgstr "trop peu d'arguments pour ce format de chaîne" + + #~ msgid "type of argument %d invalid for conversion code at offset %d" + #~ msgstr "type d'argument %d invalide pour la conversion du code au décalage %d" + + #~ msgid "unmatched open paren" + #~ msgstr "parenthèse ouverte non pairée" + + #~ msgid "bad format specification character (offset %d)" + #~ msgstr "caractère de format de spécification erroné (décalage %d)" + + #~ msgid "repetition factor overflow (offset %d)" + #~ msgstr "débordement du facteur de répétition (décalage %d)" + + #~ msgid "duplicate qualifier (offset %d)" + #~ msgstr "duplication du qualificateur (décalage %d)" + + #~ msgid "clause width overflow (offset %d)" + #~ msgstr "débordement de la largeur de la clause (décalage %d)" + + #~ msgid "no fraction (offset %d)" + #~ msgstr "pas de fraction (décalage %d)" + + #~ msgid "no fraction width (offset %d)" + #~ msgstr "pas de largeur de fraction (décalage %d)" + + #~ msgid "fraction width overflow (offset %d)" + #~ msgstr "débordement de largeur de fraction (décalage %d)" + + #~ msgid "no exponent (offset %d)" + #~ msgstr "pas d'exposant (décalage %d)" + + #~ msgid "no exponent width (offset %d)" + #~ msgstr "pas de largeur d'exposant (décalage %d)" + + #~ msgid "exponent width overflow (offset %d)" + #~ msgstr "débordement de largeur d'exposant (décalage %d)" + + #~ msgid "internal error in check_format_string" + #~ msgstr "erreur interne dans check_format_string" + + #~ msgid "no padding character (offset %d)" + #~ msgstr "pas de caractère de remplissage (décalage %d)" + + #~ msgid "too many arguments for this format string" + #~ msgstr "trop d'arguments pour ce format de chaîne" + + #~ msgid "missing index expression" + #~ msgstr "expresion d'index manquante" + + #~ msgid "too few arguments in call to `writetext'" + #~ msgstr "pas assez d'arguments pour l'appel de writext()" + + #~ msgid "argument 1 for WRITETEXT must be a TEXT or CHARS(n) VARYING location" + #~ msgstr "argument 1 de WRITETEXT doit être TEXT ou CHARS(n) VARYING location" + + #~ msgid "`format string' for WRITETEXT must be a CHARACTER string" + #~ msgstr "«format string» pour WRITETEXT doit être une chaîne de caractères" + + #~ msgid "too few arguments in call to `readtext'" + #~ msgstr "trop peu d'arguments dans l'appel de readtext()" + + #~ msgid "argument 1 for READTEXT must be a TEXT location or CHARS(n) [ VARYING ] expression" + #~ msgstr "argument 1 de READTEXT doit être de localisation TEXT ou CHARS(n) [ VARYING ] expression" + + #~ msgid "`format string' for READTEXT must be a CHARACTER string" + #~ msgstr "«format string» de READTEXT doit être une chaîne de caractères" + + #~ msgid "non-constant expression" + #~ msgstr "expression n'est pas une constante" + + #~ msgid "ignoring case upon input and" + #~ msgstr "ignorer la casse durant l'entrée et" + + #~ msgid "making special words uppercase wouldn't work" + #~ msgstr "rendre les mots spéciaux en majuscule ne fonctionnerait pas" + + #~ msgid "making special words uppercase and" + #~ msgstr "rendant les mots spéciaux en majuscule et" + + #~ msgid " ignoring case upon input wouldn't work" + #~ msgstr " ignorer la casse durant ne fonctionnerait pas" + + #~ msgid "invalid C'xx' " + #~ msgstr "C«xx» invalide" + + #~ msgid "malformed exponent part of floating-point literal" + #~ msgstr "partie de l'exposant mal composée du litéral en virgule flottante" + + #~ msgid "real number exceeds range of REAL" + #~ msgstr "nombre réel excède les limites de REAL" + + #~ msgid "end-of-file in '<>' directive" + #~ msgstr "fin de fichier dans la directive «<>»" + + #~ msgid "unrecognized compiler directive" + #~ msgstr "directive du compilateur non reconnue" + + #~ msgid "unrecognized compiler directive `%s'" + #~ msgstr "directive du compilateur « %s » non reconnue" + + #~ msgid "unterminated control sequence" + #~ msgstr "séquence de contrôle non terminée" + + #~ msgid "invalid integer literal in control sequence" + #~ msgstr "chaîne d'entiers invalide dans la séquence de contrôle" + + #~ msgid "control sequence overflow" + #~ msgstr "débordement de la chaîne de contrôle" + + #~ msgid "invalid control sequence" + #~ msgstr "séquence de contrôle invalide" + + #~ msgid "invalid base in read control sequence" + #~ msgstr "base invalide dans la séquence de contrôle de lecture" + + #~ msgid "invalid digit in control sequence" + #~ msgstr "chiffre invalide dans la séquence de contrôle" + + #~ msgid "unterminated string literal" + #~ msgstr "chaîne litérale non terminée" + + #~ msgid "invalid number format `%s'" + #~ msgstr "format de numéro « %s » invalide" + + #~ msgid "integer literal too big" + #~ msgstr "litéral d'entier trop grand" + + #~ msgid "can't find %s" + #~ msgstr "ne peut repérer %s" + + #~ msgid "USE_SEIZE_FILE directive must be followed by string" + #~ msgstr "directive USE_SEIZE_FILE doit être suivie d'une chaîne" + + #~ msgid "missing `=' in compiler directive" + #~ msgstr "«=» manquant dans la directtive au compilateur" + + #~ msgid "invalid value follows `=' in compiler directive" + #~ msgstr "valeur invalide suivant «=» dans la directive au compilateur" + + #~ msgid "invalid `%c' character in name" + #~ msgstr "caractère «%c» invalide dans le nom" + + #~ msgid "`%s' not integer constant synonym " + #~ msgstr "« %s » n'est pas un synonyme de constante entière" + + #~ msgid "value out of range in compiler directive" + #~ msgstr "valeur hors gamme dans la directive au compilateur" + + #~ msgid "no modules seen" + #~ msgstr "aucun module vu" + + #~ msgid "modeless tuple not allowed in this context" + #~ msgstr "tuple sans modèle n'est pas permis dans ce contexte" + + #~ msgid "IN expression does not have a mode" + #~ msgstr "expression IN n'a pas de mode" + + #~ msgid "location enumeration for BOOLS" + #~ msgstr "localisation d'énumération pour BOOLÉENS" + + #~ msgid "location enumeration for bit-packed arrays" + #~ msgstr "localisation d'énumération tableaux de bits paquetés" + + #~ msgid "loop's IN expression is not a composite object" + #~ msgstr "boucle dans l'expression IN n'est pas un objet composite" + + #~ msgid "start expr must have discrete mode" + #~ msgstr "début de l'expression doit avoir un mode discret" + + #~ msgid "DO FOR start expression is a numbered SET" + #~ msgstr "expression de départ de DO FOR est un SET énuméré" + + #~ msgid "TO expression is a numbered SET" + #~ msgstr "expression TO est un SET énuméré" + + #~ msgid "TO expr must have discrete mode" + #~ msgstr "expression TO doit avoir un mode discret" + + #~ msgid "start expr and TO expr must be compatible" + #~ msgstr "début de l'expression et l'expression TO doivent être compatibles" + + #~ msgid "BY expr must have discrete mode" + #~ msgstr "expression BY doit avoir un mode discret" + + #~ msgid "start expr and BY expr must be compatible" + #~ msgstr "début de l'expression et l'expression BY doivent être compatibles" + + #~ msgid "loop identifier undeclared" + #~ msgstr "identificateur de boucle non déclaré" + + #~ msgid "loop variable incompatible with start expression" + #~ msgstr "variable de boucle incompatible avec le début de l'expression" + + #~ msgid "body of DO FOR will never execute" + #~ msgstr "corps de DO FOR ne sera jamais exécuté" + + #~ msgid "BY expression is negative or zero" + #~ msgstr "expression BY est négative ou zéro" + + #~ msgid "can't iterate through array of BOOL" + #~ msgstr "ne peut faire d'itération à travers le tableau de BOOLÉENS" + + #~ msgid "Can't iterate through array of BOOL" + #~ msgstr "ne peut faire d'itération à travers le tableau de BOOLÉENS" + + #~ msgid "there was no start label to match the end label '%s'" + #~ msgstr "il n'y a pas d'étiquette de départ concordant avec l'étiquette de fin « %s »" + + #~ msgid "start label '%s' does not match end label '%s'" + #~ msgstr "étiquette de départ « %s » ne concorde pas avec l'étiquette de fin « %s »" + + #~ msgid "`%s' not declared" + #~ msgstr "« %s » n'est pas déclaré" + + #~ msgid "no RETURN or RESULT in procedure" + #~ msgstr "pas de RETURN ou RESULT dans la procédure" + + #~ msgid "PREFIXED clause with no prelix in unlabeled module" + #~ msgstr "cluase PREFIXÉ sans no prelix dans un module sans étiquette" + + #~ msgid "internal parser error - expected token %d" + #~ msgstr "erreur interne d'analyse syntaxique - jeton attendu %d" + + #~ msgid "'%s!' is not followed by an identifier" + #~ msgstr "« %s » n'est pas suivi d'un identificateur" + + #~ msgid "expected a name here" + #~ msgstr "un nom est attendu ici" + + #~ msgid "expected a name string here" + #~ msgstr "un nom de chaîne est attendu ici" + + #~ msgid "`%s' undeclared" + #~ msgstr "« %s » non déclaré" + + #~ msgid "action not allowed in SPEC MODULE" + #~ msgstr "action n,est pas permise dans le MODULE SPEC" + + #~ msgid "missing defining occurrence" + #~ msgstr "définition d'occurence manquante" + + #~ msgid "bad defining occurrence following ','" + #~ msgstr "définition d'occurence erronée suivant «,»" + + #~ msgid "missing '(' in exception list" + #~ msgstr "«)» manquante dans la liste d'exceptions" + + #~ msgid "ON exception names must be unique" + #~ msgstr "noms d'exception ON doivent être uniques" + + #~ msgid "syntax error in exception list" + #~ msgstr "erreur de syntaxe dans la liste d'exception" + + #~ msgid "empty ON-condition" + #~ msgstr "condition ON vide" + + #~ msgid "INIT not allowed at loc-identity declaration" + #~ msgstr "INIT n'est pas permis dans la déclaration d'identité de localisation" + + #~ msgid "'=' used where ':=' is required" + #~ msgstr "«=» utilisé où «:=» est requis" + + #~ msgid "initialization is not allowed in spec module" + #~ msgstr "initialisation n'est pas permise dans un module SPEC" + + #~ msgid "loc-identity declaration without initialization" + #~ msgstr "déclaration de loc n'a pas d'initialisation" + + #~ msgid "bad syntax following FORBID" + #~ msgstr "syntaxe erronée suivant FORBID" + + #~ msgid "expected a postfix name here" + #~ msgstr "nom postfixe attendu ici" + + #~ msgid "expected another rename clause" + #~ msgstr "attendait une autre clause de changement de nom" + + #~ msgid "syntax error in parameter name list" + #~ msgstr "erreur de syntaxe dans la liste de noms de paramètres" + + #~ msgid "NONREF specific without LOC in result attribute" + #~ msgstr "NONREF spécifique sans LOCALISATION dans l'attribut résultant" + + #~ msgid "DYNAMIC specific without LOC in result attribute" + #~ msgstr "DYNAMIC spécifique sans LOCALISATION dans l'attribut résultant" + + #~ msgid "exception names must be unique" + #~ msgstr "noms d'exceptions doivent être uniques" + + #~ msgid "must specify a PROCESS name" + #~ msgstr "doit spécifier un nom de processus" + + #~ msgid "SIGNAL must be in global reach" + #~ msgstr "SIGNAL doit être dans l'étendue globale" + + #~ msgid "syntax error while parsing signal definition statement" + #~ msgstr "erreur de syntaxe lors de l'analyse syntaxique de la déclaration de la définition" + + #~ msgid "case range list" + #~ msgstr "liste d'étendue du CASE" + + #~ msgid "misplaced colon in case label" + #~ msgstr "«:» mal placés dans l'étiquette du CASE" + + #~ msgid "unrecognized case label list after ','" + #~ msgstr "étiquette non reconnue du CASE après «,»" + + #~ msgid "bad ASM operand" + #~ msgstr "opérande ASM erronée" + + #~ msgid "readonly location modified by 'asm'" + #~ msgstr "localisation en lecture seulement modifiée par «asm»" + + #~ msgid "expected 'TO' in step enumeration" + #~ msgstr "attendait «TO» dans l'énumération du PAS" + + #~ msgid "expected 'IN' in FOR control here" + #~ msgstr "attendait «IN» dans le contrôle du FOR ici" + + #~ msgid "missing DELAY CASE alternative" + #~ msgstr "alternative de délais du CASE manquante" + + #~ msgid "non-referable location in DO WITH" + #~ msgstr "localisation non référençable dans le DO WITH" + + #~ msgid "WITH element must be of STRUCT mode" + #~ msgstr "élément WITH doit être de mode STRUCT" + + #~ msgid "missing ')' in signal/buffer receive alternative" + #~ msgstr "«)» manquant dans la réception alternative de signal/tampon" + + #~ msgid "misplaced 'IN' in signal/buffer receive alternative" + #~ msgstr "«IN» mal placé dans la réception alternative de signal/tampon" + + #~ msgid "missing RECEIVE alternative" + #~ msgstr "RECEIVE alternative manquant" + + #~ msgid "PROCESS copy number must be integer" + #~ msgstr "processus de copie de nombres doit être entier" + + #~ msgid "missing parenthesis for procedure call" + #~ msgstr "parenthèse manquante dans l'appel de procédure" + + #~ msgid "expression is not an action" + #~ msgstr "l'expression n'est pas une action" + + #~ msgid "syntax error in action" + #~ msgstr "erreur de syntaxe dans l,action" + + #~ msgid "no handler is permitted on this action" + #~ msgstr "pas de handler permis pour cette action" + + #~ msgid "definition follows action" + #~ msgstr "définition suit l'action" + + #~ msgid "bad tuple field name list" + #~ msgstr "nom erroné de liste de champ de tuple" + + #~ msgid "invalid syntax for label in tuple" + #~ msgstr "syntaxe invalide pour l'étiquette dans le tuple" + + #~ msgid "bad syntax in tuple" + #~ msgstr "syntaxe erronée dans le tuple" + + #~ msgid "non-mode name before tuple" + #~ msgstr "nom sans mode avant le tuple" + + #~ msgid "invalid expression/location syntax" + #~ msgstr "expression/localisation syntaxe invalide" + + #~ msgid "RECEIVE expression" + #~ msgstr "expression RECEIVE" + + #~ msgid "there should not be a ';' here" + #~ msgstr "il ne devrait pas y avoir un «;» ici" + + #~ msgid "missing ELSE/ELSIF in IF expression" + #~ msgstr "ELSE/ELSIF manquant dans l'expresion IF" + + #~ msgid "conditional expression not allowed inside parentheses" + #~ msgstr "expression conditionnelle non permise à l'intérieur des parenthèses" + + #~ msgid "mode-less tuple not allowed inside parentheses" + #~ msgstr "tuple sans modèle n'est pas permis à l'intérieur des parenthèses" + + #~ msgid "mixed numbered and unnumbered set elements is not standard" + #~ msgstr "éléments de l'ensemble numérotés et non numérotés mélangés n'est pas standard" + + #~ msgid "SET mode must define at least one named value" + #~ msgstr "mode SET doit définir au moins une valeur nommée" + + #~ msgid "POS not allowed for ARRAY" + #~ msgstr "POSITION n'est pas permise pour un TABLEAU" + + #~ msgid "STEP not allowed in field definition" + #~ msgstr "PAS n'est pas alloué dans la définition d'un champ" + + #~ msgid "missing field name" + #~ msgstr "nom de champ manquant" + + #~ msgid "bad field name following ','" + #~ msgstr "nom de champ erroné après «,»" + + #~ msgid "expected ':' in structure variant alternative" + #~ msgstr "«:» attendu dans la structure variante alternative" + + #~ msgid "missing field" + #~ msgstr "champ manquant" + + #~ msgid "VARYING bit-strings not implemented" + #~ msgstr "chaîne variante de bits n'est pas implantée" + + #~ msgid "strings must be composed of chars" + #~ msgstr "chaînes doivent être composées de caractères" + + #~ msgid "BUFFER modes may not be readonly" + #~ msgstr "modes des TAMPOONS ne peuvent pas être en LECTURE seulement" + + #~ msgid "EVENT modes may not be readonly" + #~ msgstr "modes d'ÉVÉVEMENTS ne peuvent pas être en LECTURE seulement" + + #~ msgid "SIGNAL is not a valid mode" + #~ msgstr "SIGNAL n'est pas un mode valide" + + #~ msgid "syntax error - missing mode" + #~ msgstr "erreur de syntaxe - mode manquant" + + #~ msgid "syntax error - expected a module or end of file" + #~ msgstr "erreur de syntaxe - module attendu ou fin de fichier" + + #~ msgid " `%s', which depends on ..." + #~ msgstr " « %s », laquel dépend de ..." + + #~ msgid "cycle: `%s' depends on ..." + #~ msgstr "cycle: « %s » dépend de ..." + + #~ msgid " `%s'" + #~ msgstr " « %s »" + + #~ msgid "SYN of this mode not allowed" + #~ msgstr "SYN de de mode n'est pas permis" + + #~ msgid "mode of SYN incompatible with value" + #~ msgstr "mode de SYN incompatible avec la valeur" + + #~ msgid "SYN value outside range of its mode" + #~ msgstr "valeur de SYN en dehors de l'étendue de son mode" + + #~ msgid "INIT string too large for mode" + #~ msgstr "chaîne d'INIT trop grande pour ce mode" + + #~ msgid "mode with non-value property in signal definition" + #~ msgstr "mode sans propriété de non valeur dans la définition de signal" + + #~ msgid "undeclared identifier `%s'" + #~ msgstr "identificateur « %s » non déclaré" + + #~ msgid "RETURNS spec with invalid mode" + #~ msgstr "spécification de RETOUR avec un mode invalide" + + #~ msgid "operand to REF is not a mode" + #~ msgstr "l'opérande de REF n'est pas un mode" + + #~ msgid "field with non-value mode in variant structure not allowed" + #~ msgstr "champ avec un mode non valeur dans une structure variante n'est pas permis" + + #~ msgid "buffer element mode must not have non-value property" + #~ msgstr "mode élément du tampon ne doit pas avoir une propriété de non valeur" + + #~ msgid "recordmode must not have the non-value property" + #~ msgstr "mode d'enregistrement ne doit pas avoir une propriété de non valeur" + + #~ msgid "tasking code %ld out of range for `%s'" + #~ msgstr "code de tache %ld hors gamme pour « %s »" + + #~ msgid "invalid attribute for argument `%s' (only IN or LOC allowed)" + #~ msgstr "attribue invalide pour l'argument « %s » (seul IN ou LOC est permis)" + + #~ msgid "PROCESS may only be declared at module level" + #~ msgstr "PROCESSUS peut seulement être déclaré au niveau module" + + #~ msgid "process name %s never declared" + #~ msgstr "nom de processus %s n'a jamais été déclaré" + + #~ msgid "you may only START a process, not a proc" + #~ msgstr "vous pouvez seulement LANCER un processus, pas une procédure" + + #~ msgid "SET expression not a location" + #~ msgstr "expression de l'ENSEMBLE n'est pas une localisation" + + #~ msgid "SET location must be INSTANCE mode" + #~ msgstr "localisation de l'ENSEMBLE doit être un mode d'INSTANCE" + + #~ msgid "too many arguments to process `%s'" + #~ msgstr "trop d'arguments à traiter pour « %s »" + + #~ msgid "too many arguments to process" + #~ msgstr "trop d'arguments à traiter" + + #~ msgid "too few arguments to process `%s'" + #~ msgstr "pas assez d'arguments pour traiter « %s »" + + #~ msgid "too few arguments to process" + #~ msgstr "trop peu d'arguments pour le traitement" + + #~ msgid "COPY_NUMBER argument must be INSTANCE expression" + #~ msgstr "argument de COPY_NUMBER doit être une expression d'INSTANCE" + + #~ msgid "GEN_CODE argument must be a process or signal name" + #~ msgstr "argument GEN_CODE doit être une processus ou un nom de signal" + + #~ msgid "GEN_INST parameter 2 must be an integer mode" + #~ msgstr "paramètre 2 de GEN_INST doit être un mode entier" + + #~ msgid "GEN_INST parameter 1 must be a PROCESS or an integer expression" + #~ msgstr "paramètre 1 de GEN_INST doit être une PROCESSUS ou une expression entière" + + #~ msgid "%s is not a declared process" + #~ msgstr "%s n'est pas processus déclaré" + + #~ msgid "PROC_TYPE argument must be INSTANCE expression" + #~ msgstr "argument de PROC_TYPE doit être une expression d'INSTANCE" + + #~ msgid "QUEUE_LENGTH argument must be a BUFFER/EVENT location" + #~ msgstr "argument de QUEUE_LENGTH doit avoir une localisation de TAMPON/ÉVÉNEMENT" + + #~ msgid "SEND requires a SIGNAL; %s is not a SIGNAL name" + #~ msgstr "TRANSMISSION requiert un SIGNAL; %s n'est pas un nom de SIGNAL" + + #~ msgid "too many values for SIGNAL `%s'" + #~ msgstr "trop de valeurs pour le SIGNAL « %s »" + + #~ msgid "too few values for SIGNAL `%s'" + #~ msgstr "pas assez de valeurs pour le SIGNAL « %s »" + + #~ msgid "signal sent without priority" + #~ msgstr "signal transmis sans priorité" + + #~ msgid " and no default priority was set." + #~ msgstr " et aucune priorité par défaut n'a été définie." + + #~ msgid " PRIORITY defaulted to 0" + #~ msgstr " PRIORITÉ par défaut est 0" + + #~ msgid "SEND without a destination instance" + #~ msgstr "TRANSMISSION sans instance de destination" + + #~ msgid " and no destination process specified" + #~ msgstr " et aucune destination de processus spécifiée" + + #~ msgid " for the signal" + #~ msgstr " pour le signal" + + #~ msgid "SEND to ANY copy of process `%s'" + #~ msgstr "TRANSMISSION vers N'IMPORTE QUELLE copie de processus « %s »" + + #~ msgid "SEND TO must be an INSTANCE mode" + #~ msgstr "TRANSMISSION TO doit avoir un mode d'INSTANCE" + + #~ msgid "SEND WITH must have a mode" + #~ msgstr "TRANSMISSION WITH doit avoir un mode" + + #~ msgid "internal error: RECEIVE CASE stack invalid" + #~ msgstr "erreur interne: pile du RECEIVE CASE invalide" + + #~ msgid "SET requires INSTANCE location" + #~ msgstr "ENSEMBLE requiert une INSTANCE de localisation" + + #~ msgid "SIGNAL in RECEIVE CASE alternative follows" + #~ msgstr "SIGNAL dans un CASE de RÉCEPTION alternative suit" + + #~ msgid " a BUFFER name on line %d" + #~ msgstr " un nom de TAMPON sur la ligne %d" + + #~ msgid "SIGNAL `%s' has no data fields" + #~ msgstr "SIGNAL « %s » n'a pas de champs de données" + + #~ msgid "SIGNAL `%s' requires data fields" + #~ msgstr "SIGNAL « %s » requiert des champs de données" + + #~ msgid "too few data fields provided for `%s'" + #~ msgstr "trop peu de champs de données fournies pour « %s »" + + #~ msgid "too many data fields provided for `%s'" + #~ msgstr "trop de champs de données fournis pour « %s »" + + #~ msgid "BUFFER in RECEIVE CASE alternative follows" + #~ msgstr "TAMPON du CASE de RÉCEPTION alternative suit" + + #~ msgid " a SIGNAL name on line %d" + #~ msgstr " un nom de SIGNAL sur la ligne %d" + + #~ msgid "BUFFER in RECEIVE CASE alternative must be a location" + #~ msgstr "TAMPON dans un CASE de RÉCEPTION alternative doit être une localisation " + + #~ msgid "buffer receive alternative requires only 1 defining occurrence" + #~ msgstr "tampon de réception alternatif requiert une seule définition d'occurence" + + #~ msgid "incompatible modes in receive buffer alternative" + #~ msgstr "modes incompatibles dans le tampon alternatif de réception" + + #~ msgid "defining occurrence in receive buffer alternative must be a location" + #~ msgstr "définition d'occurence dans un tampon de réception alternatif doit être une localisation" + + #~ msgid "buffer receive alternative without `IN location'" + #~ msgstr "tampon de réception alternative sans «IN location»" + + #~ msgid "RECEIVE CASE alternative must specify a SIGNAL name or BUFFER location" + #~ msgstr "alternative de RÉCEPTION DE CASE doit spécifier un nom de SIGNAL ou la localisation d'un TAMPON" + + #~ msgid "RECEIVE CASE without alternatives" + #~ msgstr "RÉCEPTION DE CASE sans alternative" + + #~ msgid "CONTINUE requires an event location" + #~ msgstr "CONTINUE requiert une localisation d'événement" + + #~ msgid "PRIORITY must be of integer type" + #~ msgstr "PRIORITÉ doit avoir un type entier" + + #~ msgid "delay alternative must be an EVENT location" + #~ msgstr "délai alternatif doit avoir une localisation d'ÉVÉNEMENT" + + #~ msgid "DELAY CASE without alternatives" + #~ msgstr "DÉLAI du CASE sans alternative" + + #~ msgid "DELAY action requires an event location" + #~ msgstr "DÉLAI d'action requiert une localisation d'événement" + + #~ msgid "PRIORITY in DELAY action must be of integer type" + #~ msgstr "PRIORITÉ dans le DÉLAI d'action doit avoir un type entier" + + #~ msgid "DELAY action without priority." + #~ msgstr "DÉLAI d'action sans priorité" + + #~ msgid "send buffer action requires a BUFFER location" + #~ msgstr "le tampon d'expédition de l'action requiert une localisation de TAMPON" + + #~ msgid "there must be only 1 value for send buffer action" + #~ msgstr "il ne doit y avoir qu'une valeur pour le tampon de transmission d'action" + + #~ msgid "convert failed for send buffer action" + #~ msgstr "échec de voncversion pour le tampon de transmission d'action" + + #~ msgid "incompatible modes in send buffer action" + #~ msgstr "modes incompatibles dans le tampon de transmission d'action" + + #~ msgid "buffer sent without priority" + #~ msgstr "tampon de transmission sans priorité" + + #~ msgid "WITH not allowed for send buffer action" + #~ msgstr "WITH n'est pas permis pour le tampon de transmission d'action" + + #~ msgid "TO not allowed for send buffer action" + #~ msgstr "TO n'est pas permis pour le tampon de transmission d'action" + + #~ msgid "SEND requires a BUFFER; `%s' is not a BUFFER name" + #~ msgstr "SEND requiert un TAMPON; « %s » n'est pas un nom de TAMPON" + + #~ msgid "non-integral max queue size for EVENT/BUFFER mode" + #~ msgstr "taille maximale de queue n'est pas un entier pour un mode ÉVÉNEMENT/TAMPON" + + #~ msgid "non-constant max queue size for EVENT/BUFFER mode" + #~ msgstr "taille maximale de queue n'est pas une constante pour un mode ÉVÉNEMENT/TAMPON" + + #~ msgid "max queue_size for EVENT/BUFFER is not positive" + #~ msgstr "taille maximale de queue pour un ÉVÉNEMENT/TAMPON n'est pas positive" + + #~ msgid "absolute time value must be of mode TIME" + #~ msgstr "valeur absolue de temps doit être du mode TEMPS" + + #~ msgid "duration primitive value must be of mode DURATION" + #~ msgstr "valeur de la durée de la primitive doit être un mode de DURÉE" + + #~ msgid "string length > UPPER (UINT)" + #~ msgstr "longueur de la chaîne > UPPER (UINT)" + + #~ msgid "can only build a powerset from a discrete mode" + #~ msgstr "peut seulement construire un powerset à partir d'un mode discret" + + #~ msgid "non-constant bitstring size invalid" + #~ msgstr "taille du champ de bits n'est pas une constante valide" + + #~ msgid "non-constant powerset size invalid" + #~ msgstr "taille de la non constante du powerset est invalide" + + #~ msgid "array or string index is a mode (instead of a value)" + #~ msgstr "tableau ou chaîne d'index est une mode (au lieu d'une valeur)" + + #~ msgid "index is not an integer expression" + #~ msgstr "index n'est pas une expression entière" + + #~ msgid "index not compatible with index mode" + #~ msgstr "index n'est pas compatible avec le mode index" + + #~ msgid "index is not discrete" + #~ msgstr "index n'est pas discret" + + #~ msgid "possible internal error - slice argument is neither referable nor constant" + #~ msgstr "erreur interne possible - l'argument de découpage n'est ni référençable ni une constante" + + #~ msgid "bit array slice with non-constant length" + #~ msgstr "découpage de tableau de bits avec une longueur non constante" + + #~ msgid "bitstring slice with non-constant length" + #~ msgstr "découpage de chaîne de bits avec une longueur non constante" + + #~ msgid "slice operation on non-array, non-bitstring value not supported" + #~ msgstr "opération de découpage sur un non tableau ou sur une valeur non chaîne de bits n'est pas supportée" + + #~ msgid "can only take slice of array or string" + #~ msgstr "peut seulement faire le découpage d'un tableau ou d'une chaîne" + + #~ msgid "slice length is not an integer" + #~ msgstr "tranche de la longueur n'est pas un entier" + + #~ msgid "slice length out-of-range" + #~ msgstr "tranche de la longueur est hors gamme" + + #~ msgid "too many index expressions" + #~ msgstr "trop d'expressions d'index" + + #~ msgid "array index is not discrete" + #~ msgstr "index de tableau n'est pas discret" + + #~ msgid "invalid compound index for bitstring mode" + #~ msgstr "index composé invalide pour un mode chaîne de bits" + + #~ msgid "conversions from variable_size value" + #~ msgstr "conversions à partir de la valeur variable_size" + + #~ msgid "conversions to variable_size mode" + #~ msgstr "conversion vers un mode variable_size" + + #~ msgid "cannot convert to float" + #~ msgstr "ne peut convertir en un type flottant" + + #~ msgid "cannot convert float to this mode" + #~ msgstr "ne peut convertir un flottant vers ce mode" + + #~ msgid "OVERFLOW in expression conversion" + #~ msgstr "DÉBORDEMENT dans la conversion d'expression" + + #~ msgid "overflow (not inside function)" + #~ msgstr "débordement (pas à l'intérieur de la fonction)" + + #~ msgid "possible overflow (not inside function)" + #~ msgstr "débordement possible (pas à l'intérieur de la fonction)" + + #~ msgid "expression will always cause OVERFLOW" + #~ msgstr "expression causera toujours un DÉBORDEMENT" + + #~ msgid "not implemented: constant conversion from that kind of expression" + #~ msgstr "pas implanté: conversion de constante depuis quel sorte d'expression" + + #~ msgid "not implemented: constant conversion to that kind of mode" + #~ msgstr "pas implanté: conversion de constante vers quell sorte de mode" + + #~ msgid "non-standard, non-portable value conversion" + #~ msgstr "non standard, conversion de valeur non portable" + + #~ msgid "location conversion between differently-sized modes" + #~ msgstr "conversion de localisation entre des mode de taille différentes" + + #~ msgid "unsupported value conversion" + #~ msgstr "valeur de conversion non supportée" + + #~ msgid "operand to bin must be a non-negative integer literal" + #~ msgstr "opérande à bin doit être un litéral entier non négatif" + + #~ msgid "size %d of BIN too big - no such integer mode" + #~ msgstr "taille %d de BIN trop grand - pas de tel mode entier" + + #~ msgid "BIN in pass 2" + #~ msgstr "BIN dans la passe 2" + + #~ msgid "mode of tuple is neither ARRAY, STRUCT, nor POWERSET" + #~ msgstr "mode du tuple n'est pas ARRAY, STRUCT, ni POWERSET" + + #~ msgid "internal error in chill_root_resulting_mode" + #~ msgstr "erreur interne dans chill_root_resulting_mode" + + #~ msgid "string lengths not equal" + #~ msgstr "longueurs de chaînes inégales" + + #~ msgid "can't do ARRAY assignment - too large" + #~ msgstr "ne peut effectuer une affectation de tableau - trop grand" + + #~ msgid "rhs of array assignment is not addressable" + #~ msgstr "rhs de l'affectation de tableau n'est pas adressable" + + #~ msgid "non-constant expression for BIN" + #~ msgstr "expression n'est pas un constante pour BIN" + + #~ msgid "expression for BIN must not be negative" + #~ msgstr "expression pour BIN ne doit pas être négatif" + + #~ msgid "cannot process BIN (>32)" + #~ msgstr "ne peut traiter BIN (>32)" + + #~ msgid "bounds of range are not compatible" + #~ msgstr "bornes de l'étendue ne sont pas compatibles" + + #~ msgid "negative string length" + #~ msgstr "longueur négative de chaîne" + + #~ msgid "range's lower bound and parent mode don't match" + #~ msgstr "borne inférieure de l'étendue et le mode parent ne concordent pas" + + #~ msgid "range's upper bound and parent mode don't match" + #~ msgstr "borne supérieure de l'étendue et le mode parent ne concordent pas" + + #~ msgid "making range from non-mode" + #~ msgstr "faisant une étendue à partir de non mode" + + #~ msgid "floating point ranges" + #~ msgstr "étendues en virgules flottantes" + + #~ msgid "range mode has non-constant limits" + #~ msgstr "mode d'étendue a des limites non contantes" + + #~ msgid "range's high bound < mode's low bound" + #~ msgstr "borne supérieure de l'étendue < mode de la borne inférieure" + + #~ msgid "range's high bound > mode's high bound" + #~ msgstr "borne supérieure de l'étendue > mode de la borne supérieure" + + #~ msgid "range mode high bound < range mode low bound" + #~ msgstr "borne supérieure de l'étendue < mode de l'étendue la borne inférieure" + + #~ msgid "range's low bound < mode's low bound" + #~ msgstr "borne inférieure de l'étendue < mode de la borne inférieure" + + #~ msgid "range's low bound > mode's high bound" + #~ msgstr "borne inférieure de l'étendue > mode de la borne supérieure" + + #~ msgid "stepsize in STEP must be an integer constant" + #~ msgstr "taille du PAS doit être une contante entière" + + #~ msgid "stepsize in STEP must be > 0" + #~ msgstr "taille du PAS doit être > 0" + + #~ msgid "stepsize in STEP must be the natural width of the array element mode" + #~ msgstr "taille du PAS doit être de largeur naturelle au mode d'éléments du tableau" + + #~ msgid "starting word in POS must be an integer constant" + #~ msgstr "début du mot dans la POSITION doit être une constante entière" + + #~ msgid "starting word in POS must be >= 0" + #~ msgstr "début du mot dans la POSITION doit être >= 0" + + #~ msgid "starting word in POS within STEP must be 0" + #~ msgstr "début du mot dans la POSITION à l'intérieur du PAS doit être 0" + + #~ msgid "starting bit in POS must be an integer constant" + #~ msgstr "bit de départ dans la POSITION doit être une constante entière" + + #~ msgid "starting bit in POS within STEP must be 0" + #~ msgstr "bit de départ dans la POSITION à l'intérieur du PAS doit être 0" + + #~ msgid "starting bit in POS must be >= 0" + #~ msgstr "bit de départ dans la POSITION doit être >= 0" + + #~ msgid "starting bit in POS must be < the width of a word" + #~ msgstr "bit de départ dans la POSITION doit être < que la largeur d'un mot" + + #~ msgid "length in POS must be an integer constant" + #~ msgstr "longueur dans la POSITION doit être une constante entière" + + #~ msgid "length in POS must be > 0" + #~ msgstr "longueur dans la POSITION doit être > 0" + + #~ msgid "end bit in POS must be an integer constant" + #~ msgstr "bit final dans la POSITION doit être une constante entière" + + #~ msgid "end bit in POS must be >= the start bit" + #~ msgstr "bit final dans la POSITION doit être >= bit de départ" + + #~ msgid "end bit in POS must be < the width of a word" + #~ msgstr "bit final dans la POSITION doit être < la largeur de mot" + + #~ msgid "the length specified on POS within STEP must be the natural length of the array element type" + #~ msgstr "la longueur spécifié de positionnement à l'intérieur du pas doit être naturelle à la longueur des types des éléments du tableau" + + #~ msgid "step size in STEP must be >= the length in POS" + #~ msgstr "la taille du PAS doit être >= la longueur dans la POSITION" + + #~ msgid "array index must be a range, not a single integer" + #~ msgstr "l'index d'un tableau doit être une étendue, pas un simple entier" + + #~ msgid "array index is not a discrete mode" + #~ msgstr "index du tableau n'a pas un mode discret" + + #~ msgid "the length specified on POS must be the natural length of the field type" + #~ msgstr "la longueur spécifiée de positionnement doit être de longueur naturel au type du champ" + + #~ msgid "STRUCT fields must be layed out in monotonically increasing order" + #~ msgstr "champs STRUCT doit avoir été disposés en ordre monotonique croissant" + + #~ msgid "if one field has a POS layout, then all fields must have a POS layout" + #~ msgstr "si un champ a une disposition de positionnement, alors tous les champs doivent avoir une disposition de positionnement" + + #~ msgid "parameterized structures not implemented" + #~ msgstr "structure paramétrisées ne sont pas implantées" + + #~ msgid "invalid parameterized type" + #~ msgstr "type paramétrisé invalide" + + #~ msgid "abstract virtual `%#D' called from constructor" + #~ msgstr "abstrait virtuel «%#D» appelé à partir d'un constructeur" + + #~ msgid "abstract virtual `%#D' called from destructor" + #~ msgstr "abstrait virtuel «%#D» appelé à partir d'un destructeur" + + #~ msgid " perhaps you want `typename %T::%D' to make it a type" + #~ msgstr " peut-être vous voulez «typename %T::%D» pour en faire un type" + + #~ msgid "discarding `const' applied to a reference" + #~ msgstr "mis de côté «const» appliqué à une référence" + + #~ msgid "discarding `volatile' applied to a reference" + #~ msgstr "mis de côté «volatile» appliqué à une référence" + + #~ msgid "parser lost in parsing declaration of `%D'" + #~ msgstr "analyseur syntaxique perdu dans l'analyse de la déclaration de «%D»" + + #~ msgid "methods cannot be converted to function pointers" + #~ msgstr "méthode ne peuvent être converties en des pointeurs de fonction" + + #~ msgid "ambiguous request for method pointer `%s'" + #~ msgstr "requête ambigue pour la méthode sur pointeur « %s »" + + #~ msgid "`%T' cannot be `restrict'-qualified" + #~ msgstr "«%T» ne peut être «restrict»-qualified" + + #~ msgid "`%T' cannot be `const'-, `volatile'-, or `restrict'-qualified" + #~ msgstr "«%T» ne peut être «const»-, «volatile»- ou «restrict»-qualified" + + #~ msgid "invalid reference to NULL ptr, use ptr-to-member instead" + #~ msgstr "référence invalide à un pointeur NUL, utiliser pointeur de membre à la place" + + #~ msgid "ISO C++ forbids using pointer of type `void *' in pointer arithmetic" + #~ msgstr "ISO C++ interdit l'utilisation d'un pointeur de type «void *» dans un pointeur arithmétique" + + #~ msgid "ISO C++ forbids using a pointer-to-function in pointer arithmetic" + #~ msgstr "ISO C++ interdit l'utilisation d'un pointeur sur une fonction dans un opinteur arithmétique" + + #~ msgid "ISO C++ forbids using a pointer to member function in pointer arithmetic" + #~ msgstr "ISO C++ interdit l'utilisation d'un pointeur sur un membre de fonction dans un pointeur arithmétique" + + #~ msgid "ISO C++ forbids using pointer to a member in pointer arithmetic" + #~ msgstr "ISO C++ interdit l'utilisation d'un pointeur sur un membre dans un pointeur arithmétique" + + #~ msgid "internal error #%d" + #~ msgstr "erreur interne #%d" + + #~ msgid "can't create cross-reference file `%s'" + #~ msgstr "ne peut produire un fichier de références croisées « %s »" + + #~ msgid "support non-32-bit machines better as of version 0.6" + #~ msgstr "le support des machines n'ayant pas 32 bits est meilleur avec la version 0.6" + + #~ msgid "Extra label definition %A at %0 -- perhaps previous label definition %B at %1 should have CONTINUE statement?" + #~ msgstr "Définition superflue d'étiquette %A à %0 -- peut-être que la définition précédente d'étiquette %B à %1 aurait besoin d'une déclaration CONTINUE?" + + #~ msgid "Extra label definition %A at %0 following label definition %B at %1" + #~ msgstr "Définition superflue d'étiquette %A à %0 après la définition de l'étiquette %B à %1" + + #~ msgid "Continuation indicator at %0 invalid on first non-comment line of file or following END or INCLUDE [info -f g77 M LEX]" + #~ msgstr "Indicateur de continuation à %0 invalide sur la première ligne de non commentaire du fichier ou suivant END ou INCLUDE [info -f g77 M LEX]" + + #~ msgid "Continuation indicator at %0 invalid here [info -f g77 M LEX]" + #~ msgstr "Indicateur de continuation à %0 invalide ici [info -f g77 M LEX]" + + #~ msgid "Integer at %0 too large except as negative number (preceded by unary minus sign)" + #~ msgstr "Entier à %0 trop grand sauf comme nombre négatif (si précédé du signe unaire moins)" + + #~ msgid "Non-negative integer at %0 too large" + #~ msgstr "Entier non négatif à %0 trop grand" + + #~ msgid "Integer at %0 too large; even though preceded by unary minus sign at %1, subsequent operator at %2 has precedence over unary minus -- enclose unary minus sign and integer in parentheses to force precedence" + #~ msgstr "Entier à %0 trop grand; même en étant précédé du signe unaire moins à %1, l'oérateur subséquent à %2 a précédence sur l'unaire moins -- encapsuler le signe unaire moins et l'entier entre parenthèses" + + #~ msgid "Integer at %0 too large (%2 has precedence over %1)" + #~ msgstr "Entier à %0 trop grand (%2 a précédence sur %1)" + + #~ msgid "Integer at %0 too large; even though preceded by minus sign at %1, because minus sign is a binary, not unary, operator -- insert plus sign before minus sign to change it to a unary minus sign" + #~ msgstr "Entier à %0 trop grand; même précédé du signe moins à %1, parce que le signe moins est un opérateur binaire, non pas unaire -- insérer avant un signe plus pour le changer en un signe unaire moins " + + #~ msgid "Integer at %0 too large (needs unary, not binary, minus at %1)" + #~ msgstr "Entier à %0 trop grand (nécessite l'unaire moins, non pas binaire, à %1)" + + #~ msgid "Integer at %0 too large; even though preceded by minus sign at %1, subsequent operator at %2 has precedence over minus, and that minus sign should be a unary minus rather than a binary minus -- insert plus sign before minus sign to change it to a unary minus sign, and enclose unary minus sign and integer in parentheses to force precedence" + #~ msgstr "Entier à %0 trop grand; même précédé du signe moins à %1, l'opérateur subséquent à %2 a précédence sur le moins et le signe moins doit être un signe unaire moins au lieu d'un signe binaire moins -- insérer avant un signe plus pour le changer en un signe unaire moins et encapsuler le signe unaire moins et l'entier entre parenthèse pour forcer la précédence" + + #~ msgid "Integer at %0 too large (%2 has precedence over %1, which needs to be unary, not binary, minus)" + #~ msgstr "Entier à %0 trop grand (%2 a précédence sur %1, lequel nécessite l'unaire moins, non pas bianire)" + + #~ msgid "Period at %0 not followed by valid keyword forming a valid binary operator; `.%A.' is not a valid binary operator" + #~ msgstr "Période à %0 n'est pas suivie d'un mot clé valide formant un opérateut binaire valide; «.%A,» n'est pas un opérateur binaire valide" + + #~ msgid "`.%A.' at %0 not a binary operator" + #~ msgstr "«.%A.» n'est pas un opérateur binaire valide" + + #~ msgid "Double-quote at %0 not followed by a string of valid octal digits at %1" + #~ msgstr "Double apostrophe à %0 pas suivi par une chaîne valide de chiffres en octal à %1" + + #~ msgid "Invalid octal constant at %0" + #~ msgstr "constante octale invalide à %0" + + #~ msgid "Invalid binary digit(s) found in string of digits at %0" + #~ msgstr "Chiffre binaire invalide trouvé dans la chaîne de chiffres à %0" + + #~ msgid "Invalid binary constant at %0" + #~ msgstr "constante binaire invalide à %0" + + #~ msgid "Invalid hexadecimal digit(s) found in string of digits at %0" + #~ msgstr "Chiffre hexadécimal invalide trouvé dans la chaîne de chiffres à %0" + + #~ msgid "Invalid hexadecimal constant at %0" + #~ msgstr "constante hexadécimale invalide %0" + + #~ msgid "Invalid octal digit(s) found in string of digits at %0" + #~ msgstr "Chiffre octal invalide trouvé dans la chaîne de chiffres à %0" + + #~ msgid "Invalid radix specifier `%A' at %0 for typeless constant at %1" + #~ msgstr "Spécificateur de base invalide «%A» à %0 pour un constante sans type à %1" + + #~ msgid "Invalid typeless constant at %1" + #~ msgstr "constante sans type invalide à %1" + + #~ msgid "%A part of complex constant at %0 must be a real or integer constant -- otherwise use CMPLX() or COMPLEX() in place of ()" + #~ msgstr "la partie %A de la constante complexe à %0 doit être une constante réelle ou entière -- autrement utiliser CMPLX() ou COMPLEX() à la place de ()" + + #~ msgid "%A part of complex constant at %0 not a real or integer constant" + #~ msgstr "la partie %A de la constante complexe à %0 n'est pas une constante réelle ou entière" + + #~ msgid "Invalid keyword `%%%A' at %0 in this context" + #~ msgstr "mot clé invalide «%%%A» à %0 dans ce contexte" + + #~ msgid "Invalid keyword `%%%A' at %0" + #~ msgstr "mot clé invalide «%%%A» à %0" + + #~ msgid "Null expression between %0 and %1 invalid in this context" + #~ msgstr "expression nulle entre %0 et %1 invalide dans ce contexte" + + #~ msgid "Invalid null expression between %0 and %1" + #~ msgstr "expression null invalide entre %0 et %1" + + #~ msgid "Concatenation operator at %0 must operate on two subexpressions of character type, but neither subexpression at %1 or %2 is of character type" + #~ msgstr "opérateur de concaténation à %0 doit opérer sur deux sous-expressions de type caractère, mais aucune des sous-expressions à %1 ou %2 n'est de type caractère" + + #~ msgid "Invalid operands at %1 and %2 for concatenation operator at %0" + #~ msgstr "Opérandes invalides à %1 et %2 pour l'opérateur de concaténation à %0" + + #~ msgid "Concatenation operator at %0 must operate on two subexpressions of character type, but the subexpression at %1 is not of character type" + #~ msgstr "Opérateur de concaténation à %0 doit opérer sur deux sous-expressions de type caractère, mais la sous-expression à %1 n'est pas de type caractère" + + #~ msgid "Invalid operand at %1 for concatenation operator at %0" + #~ msgstr "Opérande invalide à %1 pour l'opérateur de concaténation à %0" + + #~ msgid "Concatenation operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning character scalars, or a combination of both -- but the subexpression at %1 is %A" + #~ msgstr "Opérateur de concaténation à %0 doit opérer sur deux sous-expressions scalaires (non pas de tableau), deux invocations de fonctions retournant des caractères scalaires ou une combinaison des deux -- mais la sous-expression à %1 est %A" + + #~ msgid "Invalid operand (is %A) at %1 for concatenation operator at %0" + #~ msgstr "Opérande invalide (est %A) à %1 pour l'opérateur de concaténation à %0" + + #~ msgid "Arithmetic operator at %0 must operate on two subexpressions of arithmetic type, but neither subexpression at %1 or %2 is of arithmetic type" + #~ msgstr "Opérateur arithmétique à %0 doit opérer sur deux sous-expressions de type artihmétique, mais aucune des sous-expressions à %1 ou %2 n'est pas de type arithmétique" + + #~ msgid "Invalid operands at %1 and %2 for arithmetic operator at %0" + #~ msgstr "Opérande invalide à %1 et %2 pour l'opérateur arithmétique à %0" + + #~ msgid "Arithmetic operator at %0 must operate on two subexpressions of arithmetic type, but the subexpression at %1 is not of arithmetic type" + #~ msgstr "Opérateur arithmétique à %0 doit opérer sur deux sous-expressions de type artihmétique, mais la sous-expression à %1 n'est pas de type arithmétique" + + #~ msgid "Invalid operand at %1 for arithmetic operator at %0" + #~ msgstr "Opérande invalide à %1 pour l'opérateur arithmétique à %0" + + #~ msgid "Arithmetic operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning arithmetic scalars, or a combination of both -- but the subexpression at %1 is %A" + #~ msgstr "Opérateur arithmétique à %0 doit opérer sur deux sous-expressions scalaires (pas de tableau), l'invocation des deux fonctions retournant un scalaire arithmétique ou une combinaison des deux -- mais la sous-expressions à %1 est %A" + + #~ msgid "Invalid operand (is %A) at %1 for arithmetic operator at %0" + #~ msgstr "Opérande invalide (est %A) à %1 pour l'opérateur arithmétique à %0" + + #~ msgid "Character constant at %0 has no closing quote at %1 [info -f g77 M LEX]" + #~ msgstr "Constante caractère à %0 n'a pas de guillemets de fermeture à %1 [info -f g77 M LEX]" + + #~ msgid "Unterminated character constant at %0 [info -f g77 M LEX]" + #~ msgstr "constante de caractères non terminée à %0 [info -f g77 M LEX]" + + #, fuzzy + #~ msgid "Continuation line at %0 must have initial `&' since it continues a character context [info -f g77 M LEX]" + #~ msgstr "La ligne de continuation à %0 doit avoir un «&» initial puisqu'elle est la suite du contexte caractère [info -f g77 M LEX]" + + #~ msgid "Missing initial `&' on continuation line at %0 [info -f g77 M LEX]" + #~ msgstr "«&» initial manquant sur la ligne de continuation à %0 [info -f g77 M LEX]" + + #, fuzzy + #~ msgid "Continuation line at %0 must have initial `&' since it continues a split lexical token [info -f g77 M LEX]" + #~ msgstr "Ligne de continuation à %0 doit avoir un «&» initial puisqu'elle est la suite d'un jeton lexical scindé [info -f g77 M LEX]" + + #~ msgid "Continuation line at %0 invalid because it consists only of a single `&' as the only nonblank character" + #~ msgstr "Ligne de continuation à %0 invalide parce qu'elle contient seulement un simple «&» comme seul caractère non blanc" + + #~ msgid "Invalid continuation line at %0" + #~ msgstr "ligne de continuation invalide à %0" + + #~ msgid "Statement at %0 begins with invalid token [info -f g77 M LEX]" + #~ msgstr "Déclaration à %0 débute avec un jeton invalide [info -f g77 M LEX]" + + #~ msgid "Invalid statement at %0 [info -f g77 M LEX]" + #~ msgstr "Déclaration invalide à %0 [info -f g77 M LEX]" + + #~ msgid "Unrecognized statement name at %0 and invalid form for assignment or statement-function definition at %1" + #~ msgstr "Déclaration de nom non reconnue à %0 et forme invalide pour l'affectation ou la définition de déclaration de fonction à %1" + + #~ msgid "Invalid statement at %0" + #~ msgstr "Déclaration invalide à %0" + + #~ msgid "Invalid form for %A statement at %0" + #~ msgstr "Forme invalide pour la déclaration %A à %0" + + #~ msgid "Invalid %A statement at %0" + #~ msgstr "Déclaration %A invalide à %0" + + #~ msgid "Invalid use of hollerith constant in statement at %0 -- enclose the constant in parentheses (for example, change BACKSPACE 2HAB to BACKSPACE (2HAB))" + #~ msgstr "Utilisation invalide d'une constante Hollerith à la déclaration à %0 -- encapsuler la constante entre paranthèses (par exemple, changer BACKSPACE 2HAB en BACKSPACE (2HAB) )" + + #, fuzzy + #~ msgid "Enclose hollerith constant in statement at %0 in parentheses" + #~ msgstr "Encapsuler la constante Hollerith dans la déclaration à %0 entre parenthèses" + + #, fuzzy + #~ msgid "nP control edit descriptor not followed by comma but followed by edit descriptor at %0 other than D, E, EN, F, or G" + #~ msgstr "descripteur nP de contrôle d'édition n'est pas suivi par une virgule mais par un descripteur d'édition à %0 autre que D, E, EN, F ou G" + + #, fuzzy + #~ msgid "Invalid edit descriptor at %0 following nP control edit descriptor" + #~ msgstr "Descripteur d'édition invalide à %0 suivant le descripteur nP de contrôle d'édition" + + #, fuzzy + #~ msgid "Invalid I specifier in FORMAT statement at %0 -- correct form: [r]Iw.[m]" + #~ msgstr "Spécificateur I invalide dans la déclaration de FORMAT à %0 -- forme correcte: [r]Iw.[m]" + + #~ msgid "Invalid I specifier in FORMAT statement at %0" + #~ msgstr "spécificateur I invalide dans la déclaration de FORMAT à %0" + + #, fuzzy + #~ msgid "Invalid B specifier in FORMAT statement at %0 -- correct form: [r]Bw.[m]" + #~ msgstr "Spécificateur B invalide dans la déclaration de FORMAT à %0 -- forme correcte: [r]Bw.[m]" + + #~ msgid "Invalid B specifier in FORMAT statement at %0" + #~ msgstr "spécificateur B invalide dans la déclaration de FORMAT à %0" + + #, fuzzy + #~ msgid "Invalid O specifier in FORMAT statement at %0 -- correct form: [r]Ow.[m]" + #~ msgstr "Spécificateur O invalide dans la déclaration de FORMAT à %0 -- forme correcte: [r]Ow.[m]" + + #~ msgid "Invalid O specifier in FORMAT statement at %0" + #~ msgstr "spécificateur O invalide dans la déclaration de FORMAT à %0" + + #, fuzzy + #~ msgid "Invalid Z specifier in FORMAT statement at %0 -- correct form: [r]Zw.[m]" + #~ msgstr "Spécificateur Z invalide dans la déclaration de FORMAT à %0 -- forme correcte: [r]Zw.[m]" + + #~ msgid "Invalid Z specifier in FORMAT statement at %0" + #~ msgstr "spécificateur Z invalide dans la déclaration de FORMAT à %0" + + #, fuzzy + #~ msgid "Invalid F specifier in FORMAT statement at %0 -- correct form: [r]Fw.d" + #~ msgstr "Spécificateur F invalide dans la déclaration de FORMAT à %0 -- forme correcte: [r]Fw.d" + + #~ msgid "Invalid F specifier in FORMAT statement at %0" + #~ msgstr "spécificateur F invalide dans la déclaration de FORMAT à %0" + + #, fuzzy + #~ msgid "Invalid E specifier in FORMAT statement at %0 -- correct form: [r]Ew.d[Ee]" + #~ msgstr "Spécificateur E invalide dans la déclaration de FORMAT à %0 -- forme correcte: [r]Ew.d[Ee]" + + #~ msgid "Invalid E specifier in FORMAT statement at %0" + #~ msgstr "spécificateur E invalide dans la déclaration de FORMAT à %0" + + #, fuzzy + #~ msgid "Invalid EN specifier in FORMAT statement at %0 -- correct form: [r]ENw.d[Ee]" + #~ msgstr "Spécificateur EN invalide dans la déclaration de FORMAT à %0 -- forme correcte: [r]ENw.d[Ee]" + + #~ msgid "Invalid EN specifier in FORMAT statement at %0" + #~ msgstr "spécificateur EN invalide dans la déclaration de FORMAT à %0" + + #, fuzzy + #~ msgid "Invalid G specifier in FORMAT statement at %0 -- correct form: [r]Gw.d[Ee]" + #~ msgstr "Spécificateur G invalide dans la déclaration de FORMAT à %0 -- forme correcte: [r]Gw.d[Ee]" + + #~ msgid "Invalid G specifier in FORMAT statement at %0" + #~ msgstr "spécificateur G invalide dans la déclaration de FORMAT à %0" + + #, fuzzy + #~ msgid "Invalid L specifier in FORMAT statement at %0 -- correct form: [r]Lw" + #~ msgstr "Spécificateur L invalide dans la déclaration de FORMAT à %0 -- forme correcte: [r]Lw" + + #~ msgid "Invalid L specifier in FORMAT statement at %0" + #~ msgstr "spécificateur L invalide dans la déclaration de FORMAT à %0" + + #, fuzzy + #~ msgid "Invalid A specifier in FORMAT statement at %0 -- correct form: [r]A[w]" + #~ msgstr "Spécificateur A invalide dans la déclaration de FORMAT à %0 -- forme correcte: [r]A[w]" + + #~ msgid "Invalid A specifier in FORMAT statement at %0" + #~ msgstr "spécificateur A invalide dans la déclaration de FORMAT à %0" + + #, fuzzy + #~ msgid "Invalid D specifier in FORMAT statement at %0 -- correct form: [r]Dw.d" + #~ msgstr "Spécificateur D invalide dans la déclaration de FORMAT à %0 -- forme correcte: [r]Dw.d" + + #~ msgid "Invalid D specifier in FORMAT statement at %0" + #~ msgstr "spécificateur D invalide dans la déclaration de FORMAT à %0" + + #, fuzzy + #~ msgid "Invalid Q specifier in FORMAT statement at %0 -- correct form: Q" + #~ msgstr "Spécificateur Q invalide dans la déclaration de FORMAT à %0 -- forme correcte: Q" + + #~ msgid "Invalid Q specifier in FORMAT statement at %0" + #~ msgstr "spécificateur Q invalide dans la déclaration de FORMAT à %0" + + #, fuzzy + #~ msgid "Invalid $ specifier in FORMAT statement at %0 -- correct form: $" + #~ msgstr "Spécificateur $ invalide dans la déclaration de FORMAT à %0 -- forme correcte: $" + + #~ msgid "Invalid $ specifier in FORMAT statement at %0" + #~ msgstr "spécificateur $ invalide dans la déclaration de FORMAT à %0" + + #, fuzzy + #~ msgid "Invalid P specifier in FORMAT statement at %0 -- correct form: kP" + #~ msgstr "Spécificateur P invalide dans la déclaration de FORMAT à %0 -- forme correcte: kP" + + #~ msgid "Invalid P specifier in FORMAT statement at %0" + #~ msgstr "spécificateur P invalide dans la déclaration de FORMAT à %0" + + #, fuzzy + #~ msgid "Invalid T specifier in FORMAT statement at %0 -- correct form: Tn" + #~ msgstr "Spécificateur T invalide dans la déclaration de FORMAT à %0 -- forme correcte: Tn" + + #~ msgid "Invalid T specifier in FORMAT statement at %0" + #~ msgstr "spécificateur T invalide dans la déclaration de FORMAT à %0" + + #, fuzzy + #~ msgid "Invalid TL specifier in FORMAT statement at %0 -- correct form: TLn" + #~ msgstr "Spécificateur TL invalide dans la déclaration de FORMAT à %0 -- forme correcte: TLn" + + #~ msgid "Invalid TL specifier in FORMAT statement at %0" + #~ msgstr "spécificateur TL invalide dans la déclaration de FORMAT à %0" + + #, fuzzy + #~ msgid "Invalid TR specifier in FORMAT statement at %0 -- correct form: TRn" + #~ msgstr "Spécificateur TR invalide dans la déclaration de FORMAT à %0 -- forme correcte: TRn" + + #~ msgid "Invalid TR specifier in FORMAT statement at %0" + #~ msgstr "spécificateur TR invalide dans la déclaration de FORMAT à %0" + + #, fuzzy + #~ msgid "Invalid X specifier in FORMAT statement at %0 -- correct form: nX" + #~ msgstr "Spécificateur X invalide dans la déclaration de FORMAT à %0 -- forme correcte: nX" + + #~ msgid "Invalid X specifier in FORMAT statement at %0" + #~ msgstr "spécificateur X invalide dans la déclaration de FORMAT à %0" + + #, fuzzy + #~ msgid "Invalid S specifier in FORMAT statement at %0 -- correct form: S" + #~ msgstr "Spécificateur S invalide dans la déclaration de FORMAT à %0 -- forme correcte: S" + + #~ msgid "Invalid S specifier in FORMAT statement at %0" + #~ msgstr "spécificateur S invalide dans la déclaration de FORMAT à %0" + + #, fuzzy + #~ msgid "Invalid SP specifier in FORMAT statement at %0 -- correct form: SP" + #~ msgstr "Spécificateur SP invalide dans la déclaration de FORMAT à %0 -- forme correcte: SP" + + #~ msgid "Invalid SP specifier in FORMAT statement at %0" + #~ msgstr "spécificateur SP invalide dans la déclaration de FORMAT à %0" + + #, fuzzy + #~ msgid "Invalid SS specifier in FORMAT statement at %0 -- correct form: SS" + #~ msgstr "Spécificateur SS invalide dans la déclaration de FORMAT à %0 -- forme correcte: SS" + + #~ msgid "Invalid SS specifier in FORMAT statement at %0" + #~ msgstr "spécificateur SS invalide dans la déclaration de FORMAT à %0" + + #, fuzzy + #~ msgid "Invalid BN specifier in FORMAT statement at %0 -- correct form: BN" + #~ msgstr "Spécificateur BN invalide dans la déclaration de FORMAT à %0 -- forme correcte: BN" + + #~ msgid "Invalid BN specifier in FORMAT statement at %0" + #~ msgstr "spécificateur BN invalide dans la déclaration de FORMAT à %0" + + #, fuzzy + #~ msgid "Invalid BZ specifier in FORMAT statement at %0 -- correct form: BZ" + #~ msgstr "Spécificateur BZ invalide dans la déclaration de FORMAT à %0 -- forme correcte: BZ" + + #~ msgid "Invalid BZ specifier in FORMAT statement at %0" + #~ msgstr "spécificateur BZ invalide dans la déclaration de FORMAT à %0" + + #, fuzzy + #~ msgid "Invalid : specifier in FORMAT statement at %0 -- correct form: :" + #~ msgstr "Invalide : spécificateur dans la déclaration de FORMAT à %0 -- forme correcte : :" + + #~ msgid "Invalid : specifier in FORMAT statement at %0" + #~ msgstr "Invalide: spécificateur de déclaration de FORMAT à %0" + + #, fuzzy + #~ msgid "Invalid H specifier in FORMAT statement at %0 -- correct form: nHcharacters !where n is an unsigned decimal constant, and characters !contains exactly n characters (including spaces)" + #~ msgstr "Spécificateur H invalide dans la déclaration de FORMAT à %0 -- forme correcte: nHcaractères !où n est une constante décimale non signée et les caractères !contiennte exactement n caractères (incluant les espaces)" + + #~ msgid "Invalid H specifier in FORMAT statement at %0" + #~ msgstr "spécificateur H invalide dans la déclaration de FORMAT à %0" + + #~ msgid "Invalid token with FORMAT run-time expression at %0 -- use the traditional operators .LT., .LE., .GT., .GE., .EQ., and .NE. in place of the newer tokens <, <=, >, >=, ==, and !=, because > ends an expression within a FORMAT statement" + #~ msgstr "Jeton invalide dans le FORMAT de l'expression d'exécution à %0 -- utiliser les opérateurs tradictionnels .LT., .LE., .GT., .GE., .EQ. et .NE. à la place des nouveaux jetons <, <=, >, >=, == et != parce que > termine l'expression dans la déclaration de FORMAT" + + #~ msgid "Invalid token with FORMAT run-time expression at %0" + #~ msgstr "jeton invalide avec le FORMAT de l'expression d'exécution à %0" + + #, fuzzy + #~ msgid "Defined operator at %0 contains a nonletter -- must contain only letters A-Z (or a-z)" + #~ msgstr "L'opérateur défini à %0 ne contient pas une lettre -- doit contenir seulement des lettres A-Z (pas a-z)" + + #~ msgid "Nonletter in defined operator at %0" + #~ msgstr "ne contient pas une non lettre dans l'opérateur défini à %0" + + #, fuzzy + #~ msgid "Invalid type-declaration attribute at %0 -- must be one of: DIMENSION(array-spec), EXTERNAL, INTRINSIC, PARAMETER, or SAVE" + #~ msgstr "Attribut de type invalide dans la déclaration à %0 -- doit être un de: DIMENSION(array-spec), EXTERNAL, INTRINSIC, PARAMETER, or SAVE" + + #~ msgid "Invalid type-declaration attribute at %0" + #~ msgstr "type d'attribut de déclaration invalide à %0" + + #~ msgid "Unrecognized value for character constant at %0 -- expecting %A" + #~ msgstr "valeur non reconnue pour la constante caractère à %0 -- %A attendu" + + #~ msgid "Unrecognized value for character constant at %0" + #~ msgstr "valeur non reconnnue pour la constante caractère à %0" + + #~ msgid "Range specification at %0 invalid -- at least one expression must be specified, or use CASE DEFAULT" + #~ msgstr "spécification d'étendue à %0 invalide -- au moins une expression doit être spécifié ou utiliser CASE DEFAULT" + + #~ msgid "Range specification at %0 invalid" + #~ msgstr "spécification d'étendue à %0 invalide" + + #, fuzzy + #~ msgid "Range specification at %0 useless; first expression greater than second expression in range, so range can never be matched by any selection expression" + #~ msgstr "spécification d'étendue à %0 inutile; première expression plus grande que la seconde expression dans l'étendue, aussi l'étendue ne peut jamais être en concordance avec une expression de sélection" + + #~ msgid "Useless range at %0" + #~ msgstr "étendue inutile à %0" + + #~ msgid "Invalid kind at %0 for type at %1 -- unsupported or not permitted" + #~ msgstr "sorte invalide à %0 pour le type à %1 -- non supporté ou non permis" + + #~ msgid "Invalid kind at %0 for type at %1" + #~ msgstr "sorte invalide à %0 pour le type à %1" + + #~ msgid "Cannot establish implicit type for initial letter `%A' at %0 -- already explicitly established or used to set implicit type of some name, or backwards order of letters in letter range" + #~ msgstr "ne peut établir un type implicite pour la lettre initiale «%A» à %0 -- déjà explicitement établie ou utilisé pour initialiser un type implicite pour un nom quelconque ou un ordre arrière de lettres dans une étendue de lettres" + + #~ msgid "Cannot establish implicit type for initial letter `%A' at %0" + #~ msgstr "ne peut établir un type implicite pour la lettre initiale «%A» à %0" + + #~ msgid "Label definition %A (at %0) invalid -- must be in columns 1-5" + #~ msgstr "définition d'étiquette %A (à %0) invalide -- doit être en colonnes 1-5" + + #~ msgid "Invalid label definition %A (at %0)" + #~ msgstr "définition d'étiquette invalide %A (à %0)" + + #~ msgid "Run-time expression at %0 in FORMAT statement that does not follow the first executable statement in the program unit -- move the statement" + #~ msgstr "expression lors de l'exécution à %0 dans la déclaration de FORMAT qui ne suit pas la première déclaration exécutable dans l'unité programme -- déplacer la déclaration" + + #~ msgid "FORMAT at %0 with run-time expression must follow first executable statement" + #~ msgstr "FORMAT à %0 dans l'expression lors de l'exécution doit suivre la première déclaration exécutable" + + #~ msgid "Unexpected token at %0 in implied-DO construct at %1 -- form of implied-DO is `(item-list,do-var=start,end[,incr])'" + #~ msgstr "Jeton inattendu à %0 dans le construit DO implicite à %1 -- forme du DO implicite est «(item-list,do-var=start,end[,incr])»" + + #~ msgid "Unexpected token at %0 in implied-DO construct at %1" + #~ msgstr "jeton inattendu à %0 dans le construit DO implcite à %1" + + #~ msgid "Boolean/logical operator at %0 must operate on two subexpressions of logical type, but neither subexpression at %1 or %2 is of logical type" + #~ msgstr "opérateur booléen/logique à %0 doit opérer sur deux sous-expressions de type logique mais aucune des sous-expressions à %1 ou %2 n'est de type logique" + + #~ msgid "Invalid operands at %1 and %2 for boolean operator at %0" + #~ msgstr "opérandes invalides à %1 et %2 pour l'opérateur booléen à %0" + + #~ msgid "Boolean/logical operator at %0 must operate on two subexpressions of logical type, but the subexpression at %1 is not of logical type" + #~ msgstr "opérateur booléen/logique à %0 doit opérer sur deux sous-expressions de type logique mais la sous-expression à %1 n'est pas de type logique" + + #~ msgid "Invalid operand at %1 for boolean operator at %0" + #~ msgstr "opérande invalide à %1 pour l'opérateur booléen à %0" + + #~ msgid "Boolean/logical operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning logical scalars, or a combination of both -- but the subexpression at %1 is %A" + #~ msgstr "opérateur booléen/logique à %0 doit opérer sur deux sous-expressions de type scalaire (pas tableau), deux invocations de fonction retournant des scalaires logique ou une combinaison des deux -- mais la sous-expression à %1 est %A" + + #~ msgid "Invalid operand (is %A) at %1 for boolean operator at %0" + #~ msgstr "opérande invalide (est %A) à %1 pour l'opérateur booléen à %0" + + #~ msgid ".NOT. operator at %0 must operate on subexpression of logical type, but the subexpression at %1 is not of logical type" + #~ msgstr "opérateur .NOT. à %0 doit opérer sur une sous-expression de type logique mais la sous-expression à %1 n'est pas de type logique" + + #~ msgid "Invalid operand at %1 for .NOT. operator at %0" + #~ msgstr "opérande invalide à %1 pour l'opérateur .NOT. à %0" + + #~ msgid ".NOT. operator at %0 must operate on scalar subexpressions -- but the subexpression at %1 is %A" + #~ msgstr "opérateur .NOT. à %0 doit opérer sur une sous-expression scalaire mais la sous-expression à %1 est %A" + + #~ msgid "Invalid operand (is %A) at %1 for .NOT. operator at %0" + #~ msgstr "opérande invalide (est %A) à %1 pour l'opérateur .NOT. à %0" + + #~ msgid "Equality operator at %0 must operate on two subexpressions of arithmetic or character type, but neither subexpression at %1 or %2 is of arithmetic or character type" + #~ msgstr "opérateur d'égalité à %0 doit opérer sur deux sous-expressions de type artihmétique ou caractère mais aucune des sous-expressions à %1 ou %2 n'est de type arithmétique ou caractère" + + #~ msgid "Invalid operands at %1 and %2 for equality operator at %0" + #~ msgstr "opérandes invalides à %1 et %2 pour l'opérateur d'égalité à %0" + + #~ msgid "Equality operator at %0 must operate on two subexpressions of arithmetic or character type, but the subexpression at %1 is not of arithmetic or character type" + #~ msgstr "opérateur d'égalité à %0 doit opérer sur deux sous-expressions de type artihmétique ou caractère mais la sous-expression à %1 n'est pas de type arithmétique ou caractère" + + #~ msgid "Invalid operand at %1 for equality operator at %0" + #~ msgstr "opérande invalide à %1 pour l'opérateur d'égalité à %0" + + #~ msgid "Equality operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning arithmetic or character scalars, or a combination of both -- but the subexpression at %1 is %A" + #~ msgstr "opérateur d'égalité à %0 doit opérer sur deux sous-expressions de type scalaire (non pas de tableau), deux invocations de fonction retournant un type arithmétique ou scalaires caractère ou une combinaison des deux mais la sous-expression à %1 est %A" + + #~ msgid "Invalid operand (is %A) at %1 for equality operator at %0" + #~ msgstr "opérande invalide (est %A) à %1 pour l'opérateur d'égalité à %0" + + #~ msgid "Relational operator at %0 must operate on two subexpressions of integer, real, or character type, but neither subexpression at %1 or %2 is of integer, real, or character type" + #~ msgstr "opérateur relationnal à %0 doit opérer sur deux sous-expressions de type entier, réel ou caractère, mais aucune des sous-expression à %1 ou %2 n'est de type entier, réel ou caractère" + + #~ msgid "Invalid operands at %1 and %2 for relational operator at %0" + #~ msgstr "opérandes invalides à %1 et %2 pour l'opérateur relationnel à %0" + + #~ msgid "Relational operator at %0 must operate on two subexpressions of integer, real, or character type, but the subexpression at %1 is not of integer, real, or character type" + #~ msgstr "opérateur relationnal à %0 doit opérer sur deux sous-expressions de type entier, réel ou caractère, mais la sous-expression à %1 n'est pas de type entier, réel ou caractère" + + #~ msgid "Invalid operand at %1 for relational operator at %0" + #~ msgstr "opérande invalide à %1 pour l'opérateur relationnel à %0" + + #~ msgid "Relational operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning integer, real, or character scalars, or a combination of both -- but the subexpression at %1 is %A" + #~ msgstr "opérateur relationnal à %0 doit opérer sur deux sous-expressions de type scalaire (non pas de tableau), deux invocations de fonction retournant un type entier, réel ou caractère ou une combinaison des deux mais la sous-expression à %1 est %A" + + #~ msgid "Invalid operand (is %A) at %1 for relational operator at %0" + #~ msgstr "opérande invalide (est %A) à %1 pour l'opérateur relationnel à %0" + + #~ msgid "Reference to intrinsic `%A' at %0 invalid -- one or more arguments have incorrect type" + #~ msgstr "référence à l'intrinsèque «%A» à %0 invalide -- un ou plusieurs d'arguments ont un type incorrect" + + #~ msgid "Invalid reference to intrinsic `%A' at %0" + #~ msgstr "référence invalide vers l'intrinsèque «%A» à %0" + + #~ msgid "Too few arguments passed to intrinsic `%A' at %0" + #~ msgstr "trop peu d'arguments passés à l'intrinsèque «%A» à %0" + + #~ msgid "Too few arguments for intrinsic `%A' at %0" + #~ msgstr "trop peu d'arguments passés à l'intrinsèque «%A» à %0" + + #~ msgid "Too many arguments passed to intrinsic `%A' at %0" + #~ msgstr "trop d'arguments passés à l'intrinsèque «%A» à %0" + + #~ msgid "Too many arguments for intrinsic `%A' at %0" + #~ msgstr "trop d'arguments passés à l'intrinsèque «%A» à %0" + + #~ msgid "Reference to disabled intrinsic `%A' at %0" + #~ msgstr "référence à l'intrinsèque désactivé «%A» à %0" + + #~ msgid "Disabled intrinsic `%A' at %0" + #~ msgstr "Désactiver les intrinsèques «%A» à %0" + + #~ msgid "Reference to intrinsic subroutine `%A' as if it were a function at %0" + #~ msgstr "référence à la sous-routine intrinsèque «%A» comme s'il est une fonction à %0" + + #~ msgid "Function reference to intrinsic subroutine `%A' at %0" + #~ msgstr "référence de fonction à la sous-routine intrinsèque «%A» à %0" + + #~ msgid "Reference to intrinsic function `%A' as if it were a subroutine at %0" + #~ msgstr "référence à une fonction intrinsèque «%A» comme s'il est une sous-routine à %0" + + #~ msgid "Subroutine reference to intrinsic function `%A' at %0" + #~ msgstr "référence de sous-routine à la fonction «%A» à %0" + + #~ msgid "Reference to unimplemented intrinsic `%A' at %0 -- use EXTERNAL to reference user-written procedure with this name" + #~ msgstr "référence à un intrinsèque non implanté «%A» à %0 -- utiliser EXTERNAL pour référence la procédure ayant ce nom et écrite par l'usager" + + #~ msgid "Unimplemented intrinsic `%A' at %0" + #~ msgstr "intrinsèque «%A» non implanté à %0" + + #~ msgid "Reference to unimplemented intrinsic `%A' at %0 (assumed EXTERNAL)" + #~ msgstr "référence à un intrinsèque non implanté «%A» à (EXTERNAL assumé)" + + #~ msgid "Unimplemented intrinsic `%A' at %0 (assumed EXTERNAL)" + #~ msgstr "intrinsèque non implantée «%A» à (EXTERNAL assumé)" + + #~ msgid "Attempt to modify variable `%A' at %0 while it serves as DO-loop iterator at %1" + #~ msgstr "Tentative de modification de la variable «%A» à %0 alors qu'il sert à l'itération de la boucle DO à %1" + + #~ msgid "Modification of DO-loop iterator `%A' at %0" + #~ msgstr "Modification de l'itération de la boucle DO «%A» à %0" + + #~ msgid "Attempt to modify variable `%A' via item #%B in list at %0 while it serves as implied-DO iterator at %1" + #~ msgstr "Tentative de modification de la variable «%A» par le biais de l'item #%b dans la liste à %0 alors qu'il sert à l'itération implicite de la boucle DO à %1" + + #~ msgid "Array has too many dimensions, as of dimension specifier at %0" + #~ msgstr "Tableau à trop de dimensions comme spécificateur de dimension à %0" + + #~ msgid "Too many dimensions at %0" + #~ msgstr "trop de dimensions à %0" + + #~ msgid "Unsupported OPEN control item at %0 -- ACTION=, ASSOCIATEVARIABLE=, BLOCKSIZE=, BUFFERCOUNT=, CARRIAGECONTROL=, DEFAULTFILE=, DELIM=, DISPOSE=, EXTENDSIZE=, INITIALSIZE=, KEY=, MAXREC=, NOSPANBLOCKS, ORGANIZATION=, PAD=, POSITION=, READONLY=, RECORDTYPE=, SHARED=, and USEROPEN= are not supported" + #~ msgstr "Item de contrôle OPEN non supporté à %0 -- ACTION=, ASSOCIATEVARIABLE=, BLOCKSIZE=, BUFFERCOUNT=, CARRIAGECONTROL=, DEFAULTFILE=, DELIM=, DISPOSE=, EXTENDSIZE=, INITIALSIZE=, KEY=, MAXREC=, NOSPANBLOCKS, ORGANIZATION=, PAD=, POSITION=, READONLY=, RECORDTYPE=, SHARED= et USEROPEN= ne sont pas supportés" + + #~ msgid "Unsupported OPEN control item at %0" + #~ msgstr "item de contrôle OPEN non supporté à %0" + + #~ msgid "Unsupported INQUIRE control item at %0 -- ACTION=, CARRIAGECONTROL=, DEFAULTFILE=, DELIM=, KEYED=, ORGANIZATION=, PAD=, POSITION=, READ=, READWRITE=, RECORDTYPE=, and WRITE= are not supported" + #~ msgstr "item de contrôle INQUIRE non supporté à %0 -- ACTION=, CARRIAGECONTROL=, DEFAULTFILE=, DELIM=, KEYED=, ORGANIZATION=, PAD=, POSITION=, READ=, READWRITE=, RECORDTYPE= et WRITE= ne sont pas supportés" + + #~ msgid "Unsupported INQUIRE control item at %0" + #~ msgstr "item de contrôle INQUIRE non supporté à %0" + + #~ msgid "Unsupported READ control item at %0 -- ADVANCE=, EOR=, KEYEQ=, KEYGE=, KEYGT=, KEYID=, NULLS=, and SIZE= are not supported" + #~ msgstr "item de contrôle READ non supporté à %0 -- ADVANCE=, EOR=, KEYEQ=, KEYGE=, KEYGT=, KEYID=, NULLS= et SIZE= ne sont pas supportés" + + #~ msgid "Unsupported READ control item at %0" + #~ msgstr "item de contrôle READ non supporté à %0" + + #~ msgid "Unsupported WRITE control item at %0 -- ADVANCE= and EOR= are not supported" + #~ msgstr "item de contrôle WRITE non supporté à %0 -- ADVANCE= et EOR= ne sont pas supportés" + + #~ msgid "Unsupported WRITE control item at %0" + #~ msgstr "item de contrôle WRITE non supporté à %0" + + #~ msgid "Padding of %A %D required before `%B' in common block `%C' at %0 -- consider reordering members, largest-type-size first" + #~ msgstr "Remplissage de %A %D requis avant «%B» dans le bloc commun «%C» à %0 -- considérer reordonner les membres, celui de plus grande taille en premier" + + #~ msgid "Padding of %A %D required before `%B' in common block `%C' at %0" + #~ msgstr "Remplissage de %A %D requis avant «%B» dans le bloc commun «%C» à %0" + + #, fuzzy + #~ msgid "Invalid length specification at %0 for IMPLICIT statement -- must be integer constant expression" + #~ msgstr "longueur de spécification invalide à %0 pour la déclaration IMPLICIT -- doit être l'expression d'une constante entière " + + #~ msgid "Invalid length specification at %0" + #~ msgstr "spécification de longueur invalide à %0" + + #~ msgid "Type of ENTRY point at %0 to function conflicts with type(s) of previous entrypoint(s) -- must all be identical-length CHARACTER or none be CHARACTER type" + #~ msgstr "Type du point d'entrée à %0 de la fonction est en conflit avec le type de point d'entrée précédent de la fonction -- doit être de longueur indentique ou zéro pour un type caractère" + + #~ msgid "Type of ENTRY point at %0 to function conflicts with type(s) of previous entrypoint(s)" + #~ msgstr "type de point d'entré à %0 à la fonction est en conflit avec le type de point d'entrée précédent de la fonction" + + #~ msgid "Common block `%A' initialized at %0 already initialized at %1 -- only one program unit may specify initial values for a particular common block" + #~ msgstr "bloc commun «%A» initialisé à %0 est déjà initialisé à %1 -- une seule unité de programme peut spécifier les valeurs initiales pour un bloc commun particulier" + + #~ msgid "Common block `%A' initialized at %0 already initialized at %1" + #~ msgstr "bloc commun «%A» initialisé à %0 est déjà initialisé à %1" + + #~ msgid "Initial padding for common block `%A' is %B %C at %0 -- consider reordering members, largest-type-size first" + #~ msgstr "remplissage initial pour le bloc commun «%A» est %B %C à %0 -- considérer réordonner les membres, celui de plus grande taille en premier" + + #~ msgid "Initial padding for common block `%A' is %B %C at %0" + #~ msgstr "remplissage initial pour le bloc commun «%A» est %B %C à %0" + + #~ msgid "Initial padding for common block `%A' is %B %D at %0 but %C %E at %1 -- consider reordering members, largest-type-size first" + #~ msgstr "remplissage initial pour le bloc commun «%A» est %B %D à %0 mais %C %E à %1 -- considérer réordonner les membres, ceux de plus grande taille en premier" + + #~ msgid "Initial padding for common block `%A' is %B %D at %0 but %C %E at %1" + #~ msgstr "remplissage initial pour le bloc commun «%A» est %B %D à %0 mais %C %E à %1" + + #~ msgid "Common block `%A' is initialized to %B %D long at %0 but enlarged to %C %E at %1 -- use consistent definitions or reorder program units in source file" + #~ msgstr "bloc commun «%A» initialisé à un longueur %B %D à %0 mais augmenté à %C %E à %1 -- utiliser des définitions consistantes ou réordonner les unités de programmes dans le fichier source" + + #~ msgid "Common block `%A' is initialized to %B %D long at %0 but enlarged to %C %E at %1" + #~ msgstr "bloc commun «%A» initialisé à un longueur %B %D à %0 mais augmenté à %C %E à %1" + + #~ msgid "DO-variable `%A' is type REAL or DOUBLE PRECISION at %0 -- unexpected behavior likely" + #~ msgstr "variable DO «%A» est de type REEL ou DOUBLE PRECISION à %0 -- comportement inattendue est à prévoir" + + #~ msgid "DO-variable `%A' is type REAL or DOUBLE PRECISION at %0" + #~ msgstr "variable DO «%A» est de type REEL ou DOUBLE PRECISION à %0" + + #~ msgid "Invalid actual argument at %0 -- replace hollerith constants with %%REF('string') and typeless constants with INTEGER constant equivalents, or use -fugly-args or -fugly" + #~ msgstr "argument actuel invalide à %0 -- remplacer les constantes Hollerith avec %%REF('chaÎne') et des constantes sans type avec des équivalents entiers ou utiliser -fugly-args ou -fugly" + + #~ msgid "Invalid actual argument at %0" + #~ msgstr "argument actuel invalide à %0" + + #~ msgid "Quadruple-precision floating-point unsupported -- treating constant at %0 as double-precision" + #~ msgstr "virgule flottante en quadruple précision non supporté -- tratement de la constante à %0 en double précision" + + #~ msgid "Quadruple-precision floating-point unsupported" + #~ msgstr "virgule flottante en quadruple précision non supporté" + + #~ msgid "Initialization of large (%B-unit) aggregate area `%A' at %0 currently very slow and takes lots of memory during g77 compile -- to be improved in 0.6" + #~ msgstr "initialisation d'une large zone aggrégat (unit %B) «%A» à %0 couramment lente et prenant beaucoup de mémoire durant la compilation g77 -- à être amélioré dans 0.6" + + #~ msgid "This could take a while (initializing `%A' at %0)..." + #~ msgstr "Cela pourrait prendre du temps (initialisation «%A» à %0)..." + + #~ msgid "can't to open %s" + #~ msgstr "ne peut ouvrir %s" + + #~ msgid "Set class path and suppress system path" + #~ msgstr "Initialiser le chemin des classes et supprimer le chemin systèmes" + + #~ msgid "a -ifile option requires a -map option" + #~ msgstr "l'option -ifile requiert l'option -map" + + #~ msgid "" + #~ msgstr "" + + #~ msgid "hard register `%s' listed as input operand to `asm'" + #~ msgstr "registre matériel `%s' est listé comme une opérande d'entrée à `asm'" + + #~ msgid "floating point trap outputting a constant" + #~ msgstr "la trappe en virgule flottante produit une constante" + + #~ msgid "no file-scope type named `%D'" + #~ msgstr "pas de type de portée de fichier nommé `%D'" + + #~ msgid "%T is not a class type" + #~ msgstr "%T n'est pas un type de classe" + + #~ msgid "base clause without member specification for `%#T'" + #~ msgstr "clause de base sans spécification de membre pour `%#T'" + + #~ msgid "non-`union' tag used in declaring `%#T'" + #~ msgstr "étiquette non-`union' utilisé dans la déclaration de `%#T'" + + #~ msgid "invalid use of %D" + #~ msgstr "utilisation invalide de %D" + + #~ msgid "return value from function receives multiple initializations" + #~ msgstr "valeur retournée de la fonction reçoit de multiples initialisations" + + #~ msgid "Can't use '$' as a separator for inner classes" + #~ msgstr "Ne peut utiliser '$' comme séparateur pour des classes internes" + + #~ msgid "-mlong32 and -mlong64 can not both be specified" + #~ msgstr "-mlong32 et -mlong64 ne peuvent être spécifiés ensembles." + + #~ msgid "type with more precision than %s" + #~ msgstr "type avec plus de precision que %s" + + #~ msgid "declaration of `%s' shadows previous local" + #~ msgstr "déclaration de `%s' cache la déclaration locale précédente" + + #~ msgid "ANSI C forbids const or volatile function types" + #~ msgstr "C ANSI interdit les types `const' ou de fonctions volatiles" + + #~ msgid "leaving more files than we entered" + #~ msgstr "laissant plus de fichiers que nous en avons entrée" + + #~ msgid "universal-character-name used for '%c'" + #~ msgstr "nom-de-caractère-universel utilisé pour `%c'" + + #~ msgid "unknown escape sequence: '\\' followed by char 0x%x" + #~ msgstr "séquence d'échappement inconnue: '\\' suivi du caractère 0x%x" + + #~ msgid "ISO C forbids `&&'" + #~ msgstr "ISO C interdit `&&'" + + #~ msgid "`[*]' in parameter declaration only allowed in ISO C 99" + #~ msgstr "`[*]' dans la déclaration de paramètres est permis seulement avec ISO C 99" + + #~ msgid "wrong type argument to %s" + #~ msgstr "type d'argument erroné pour %s" + + #~ msgid "deprecated initialization of zero-length array" + #~ msgstr "initialisation dépréciée d'un tableau de taille zéro" + + #~ msgid "initialization of zero-length array before end of structure" + #~ msgstr "initialisation d'un tableau de taille zéro avant la fin de la structure" + + #~ msgid "initialization of zero-length array inside a nested context" + #~ msgstr "initialisation d'un tableau de taille zéro à l'intérieur d'un contexte imbriqué" + + #~ msgid "Unable to find a temporary location for static chain register" + #~ msgstr "Incapable de trouver une location temporaire pour un registre chaîné statique" + + #~ msgid "Only initialized variables can be placed into the 8-bit area." + #~ msgstr "Seuls les variables initialisées peuvent être placées dans une aire de 8 bits" + + #~ msgid "Internal gcc abort from %s:%d" + #~ msgstr "Abandon interne gcc à partir de %s:%d" + + #~ msgid "The local variable `insn' has the value:" + #~ msgstr "La variable locale `insn' a la valeur:" + + #~ msgid "Register '%c' is unknown" + #~ msgstr "Registre '%c' est inconnu" + + #~ msgid "Register '%c' already specified in allocation order" + #~ msgstr "Registre '%c' est déjà spécifié dans l'ordre d'allocation" + + #~ msgid "Same as -mcpu=i386" + #~ msgstr "Identique à -mcpu=i386" + + #~ msgid "Same as -mcpu=i486" + #~ msgstr "Identique à -mcpu=i486" + + #~ msgid "Same as -mcpu=pentium" + #~ msgstr "Identique à -mcpu=pentium" + + #~ msgid "Same as -mcpu=pentiumpro" + #~ msgstr "Identique à -mcpu=pentiumpro" + + #~ msgid "Emit Intel syntax assembler opcodes" + #~ msgstr "Produire les code-op pour la syntaxe d'assembleur Intel" + + #~ msgid "Control allocation order of integer registers" + #~ msgstr "Contrôle l'ordre d'allocation des registres entier" + + #~ msgid "The -mabi=32 support does not work yet." + #~ msgstr "L'option -mabi=32 n'est pas fonctionnelle encore." + + #~ msgid "-mcpu=%s does not support -mips%d" + #~ msgstr "-mcpu=%s ne supporte par -mips%d" + + #~ msgid "Use FUNCTION_EPILOGUE" + #~ msgstr "Utiliser FUNCTION_EPILOGUE" + + #~ msgid "Do not use FUNCTION_EPILOGUE" + #~ msgstr "Ne pas utiliser FUNCTION_EPILOGUE" + + #~ msgid "object size exceeds built-in limit for virtual function table implementation" + #~ msgstr "taille des objets excède les limites internes pour la table implantée de fonctions virtuelles" + + #~ msgid "object size exceeds normal limit for virtual function table implementation, recompile all source and use -fhuge-objects" + #~ msgstr "taille des objets excède la limite normale pour la table implantée de foncions virtuelles, recompiler tous les sources et utiliser -fhuge-objects" + + #~ msgid "the ABI requires vtable thunks" + #~ msgstr "l'ABI requiert vtable thunks" + + #~ msgid "`__alignof__' applied to a bit-field" + #~ msgstr "`__alignof__' appliqué à un champ de bits" + + #~ msgid "base class initializer specified, but no base class to initialize" + #~ msgstr "classe de base d'initialiseurs spécifié, mais aucune classe de base éa initialiser" + + #~ msgid "initializer for unnamed base class ambiguous" + #~ msgstr "initialiseur ambigü pour une classe de base non nommé" + + #~ msgid "Do not treat the namespace `std' as a normal namespace" + #~ msgstr "Ne pas traiter l'espace nom `std' comme un espace nom normal" + + #~ msgid "ISO C++ forbids `&&'" + #~ msgstr "ISO C++ interdit `&&'" + + #~ msgid "taking dynamic typeid of object with -fno-rtti" + #~ msgstr "prendre le typeid dynamique d'objet avec -fno-rtti" + + #~ msgid "recoverable compiler error, fixups for virtual function" + #~ msgstr "erreur de recouvrement du compilateur, correctifs pour les fonctions virtuelles" + + #~ msgid "`com_interface' only supported with -fvtable-thunks" + #~ msgstr "`com_interface' supporté seulement avec -fvtable-thunks" + + #~ msgid "\"defined\" operator appears during macro expansion" + #~ msgstr "opérateur \"defined\" apparaît durant l'expansion de macro" + + #~ msgid "-include and -imacros cannot be used with -fpreprocessed" + #~ msgstr "-include et -imacros ne peuvent être utilisés avec -fpreprocessed" + + #~ msgid "buffers still stacked in cpp_finish" + #~ msgstr "tampons toujours empilés dans cpp_finish" + + #~ msgid "# followed by integer" + #~ msgstr "# suivi d'un entier" + + #~ msgid "attempt to push file buffer with contexts stacked" + #~ msgstr "tentative d'empilage du tampon fichier dans un contexte de pile" + + #~ msgid "file \"%s\" left but not entered" + #~ msgstr "fichier \"%s\" a été laissé mais n'a pas été entré" + + #~ msgid "expected to return to file \"%s\"" + #~ msgstr "attendait retourner au fichier \"%s\"" + + #~ msgid "expected to return to line number %u" + #~ msgstr "attendait retourner au numéro de ligne %u" + + #~ msgid "header flags for \"%s\" have changed" + #~ msgstr "fanion d'en-tête de \"%s\" a changé" + + #~ msgid "file \"%s\" entered but not left" + #~ msgstr "fichier \"%s\" entrée mais non laissé" + + #~ msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d\n" + #~ msgstr "NOTE_INSN_BASIC_BLOCK est manquant por le bloc %d\n" + + #~ msgid "gcov [-b] [-v] [-n] [-l] [-f] [-o OBJDIR] file\n" + #~ msgstr "gcov [-b] [-v] [-n] [-l] [-f] [-o RÉP_OBJ] fichier\n" + + #~ msgid "Premature end of input file %s" + #~ msgstr "Fin prématuré du fichier d'entrée %s" + + #~ msgid "Make is_compiled_class return 1" + #~ msgstr "Faire que is_compiled_class retourne 1" + + #~ msgid "Dump class files to .class" + #~ msgstr "Vidanger les fichiers de classs dans .class" + + #~ msgid "input file is list of file names to compile" + #~ msgstr "fichier d'entrée est listé dans les noms de fichiers à compiler" + + #~ msgid "Generate code for Boehm GC" + #~ msgstr "Générer le code pour Boehm GC" + + #~ msgid "Don't put synchronization structure in each object" + #~ msgstr "Ne pas insérer de structure de synchronisation dans cahque objet" + + #~ msgid "Arc profiling: some edge counts were bad." + #~ msgstr "profilage Arc: quelques compteurs de bordures étaient erronées." + + #~ msgid "`asm' cannot be used in function where memory usage is checked" + #~ msgstr "`asm' ne peut être utilisé dans une fonction où l'usage de la mémoire est vérifié" + + #~ msgid "`asm' cannot be used with `-fcheck-memory-usage'" + #~ msgstr "`asm' ne peut être utilisé `-fcheck-memory-usage'" + + #~ msgid "output operand constraint %d contains `+'" + #~ msgstr "contrainte de sortie de l'opérande %d contient `+'" + + #~ msgid "\"%s\" and \"%s\" identical in first %d characters" + #~ msgstr "\"%s\" et \"%s\" identique pour les premiers %d caractères" + + #~ msgid "Improve FP speed by violating ANSI & IEEE rules" + #~ msgstr "Améliorer la vitesse FP en violant les règles ANSI & IEEE" + + #~ msgid "Generate code to check every memory access" + #~ msgstr "Générer du code pour vérifier chaque accès mémoire" + + #~ msgid "Add a prefix to all function names" + #~ msgstr "Ajouter un préfixe à tous les noms de fonctions" + + #~ msgid "Errors detected in input file (your bison.simple is out of date)\n" + #~ msgstr "Erreurs détectées dans le fichier d'entrée (votre bison.simple est périmé)\n" + + #~ msgid " -Wid-clash- Warn if 2 identifiers have the same first chars\n" + #~ msgstr " -Wid-clash- avertir si 2 identificateurs one les mêmes premiers de caractères\n" + + #~ msgid "Unrecognized option `%s'" + #~ msgstr "Option non reconnue `%s'" + + #~ msgid "`-a' option (basic block profile) not supported" + #~ msgstr "`-a' option (profile de blocs de base) non supporté" + + #~ msgid "`-ax' option (jump profiling) not supported" + #~ msgstr "`-ax' option (profilage des sauts) non supporté" + + #~ msgid "`-ax' and `-a' are conflicting options. `-a' ignored." + #~ msgstr "`-ax' et `-a' sont des options conflictuelles. `-a' ignoré." + + #~ msgid "Data size %ld.\n" + #~ msgstr "Taille des données %ld.\n" + + #~ msgid "bx]" + #~ msgstr "bx]" + + #~ msgid "bx" + #~ msgstr "bx" + + #~ msgid "cx" + #~ msgstr "cx" diff -Nrc3pad gcc-3.0.4/gcc/po/gcc.pot gcc-3.1/gcc/po/gcc.pot *** gcc-3.0.4/gcc/po/gcc.pot Wed Jun 13 00:45:34 2001 --- gcc-3.1/gcc/po/gcc.pot Tue Apr 23 11:05:42 2002 *************** *** 1,12 **** # SOME DESCRIPTIVE TITLE. ! # Copyright (C) YEAR Free Software Foundation, Inc. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" ! "POT-Creation-Date: 2001-06-11 15:08-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" --- 1,13 ---- # SOME DESCRIPTIVE TITLE. ! # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER ! # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" ! "POT-Creation-Date: 2002-04-23 12:53+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" *************** msgstr "" *** 14,365 **** "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" ! #: builtins.c:280 ! msgid "offset outside bounds of constant string" ! msgstr "" ! ! #. ??? We used to try and build up a call to the out of line function, ! #. guessing about what registers needed saving etc. This became much ! #. harder with __builtin_va_start, since we don't have a tree for a ! #. call to __builtin_saveregs to fall back on. There was exactly one ! #. port (i860) that used this code, and I'm unconvinced it could actually ! #. handle the general case. So we no longer try to handle anything ! #. weird and make the backend absorb the evil. ! #: builtins.c:2634 ! msgid "__builtin_saveregs not supported by this target" ! msgstr "" ! ! #: builtins.c:2677 ! msgid "argument of `__builtin_args_info' must be constant" msgstr "" ! #: builtins.c:2683 ! msgid "argument of `__builtin_args_info' out of range" msgstr "" ! #: builtins.c:2689 ! msgid "missing argument in `__builtin_args_info'" msgstr "" ! #: builtins.c:2720 ! msgid "`va_start' used in function with fixed args" msgstr "" ! #: builtins.c:2739 ! msgid "second parameter of `va_start' not last named argument" msgstr "" ! #. Evidently an out of date version of ; can't validate ! #. va_start's second argument, but can still work as intended. ! #: builtins.c:2744 ! msgid "`__builtin_next_arg' called without an argument" msgstr "" ! #: builtins.c:2846 ! msgid "too many arguments to function `va_start'" msgstr "" ! #: builtins.c:2932 ! msgid "first argument to `va_arg' not of type `va_list'" msgstr "" ! #: builtins.c:2960 #, c-format ! msgid "`%s' is promoted to `%s' when passed through `...'" msgstr "" ! #: builtins.c:2964 #, c-format ! msgid "(so you should pass `%s' not `%s' to `va_arg')" msgstr "" ! #: builtins.c:3073 ! msgid "invalid arg to `__builtin_frame_address'" msgstr "" ! #: builtins.c:3075 ! msgid "invalid arg to `__builtin_return_address'" msgstr "" ! #: builtins.c:3088 ! msgid "unsupported arg to `__builtin_frame_address'" msgstr "" ! #: builtins.c:3090 ! msgid "unsupported arg to `__builtin_return_address'" msgstr "" ! #: builtins.c:3253 ! msgid "second arg to `__builtin_expect' must be a constant" msgstr "" ! #: builtins.c:3564 ! msgid "__builtin_longjmp second argument must be 1" msgstr "" ! #: builtins.c:3578 ! msgid "__builtin_trap not supported by this target" msgstr "" ! #. just do library call, if unknown builtin ! #: builtins.c:3630 c-common.c:4256 #, c-format ! msgid "built-in function `%s' not currently supported" msgstr "" ! #: c-common.c:465 #, c-format ! msgid "" ! "string length `%d' is greater than the length `%d' ISO C%d compilers are " ! "required to support" msgstr "" ! #: c-common.c:630 #, c-format ! msgid "`%s' attribute directive ignored" msgstr "" ! #: c-common.c:638 #, c-format ! msgid "`%s' attribute does not apply to types" msgstr "" ! #: c-common.c:645 ! #, c-format ! msgid "wrong number of arguments specified for `%s' attribute" msgstr "" ! #: c-common.c:661 c-common.c:668 c-common.c:675 c-common.c:688 c-common.c:696 ! #: c-common.c:711 c-common.c:724 c-common.c:732 c-common.c:748 c-common.c:760 ! #: c-common.c:772 c-common.c:777 c-common.c:951 c-common.c:1103 ! #, c-format ! msgid "`%s' attribute ignored" msgstr "" ! #: c-common.c:810 ! #, c-format ! msgid "unknown machine mode `%s'" msgstr "" ! #: c-common.c:813 ! #, c-format ! msgid "no data type for mode `%s'" msgstr "" ! #: c-common.c:820 ! #, c-format ! msgid "type with more precision than %s" msgstr "" ! #: c-common.c:839 ! msgid "section attribute cannot be specified for local variables" msgstr "" ! #: c-common.c:846 ! #, c-format ! msgid "section of `%s' conflicts with previous declaration" msgstr "" ! #: c-common.c:852 ! #, c-format ! msgid "section attribute not allowed for `%s'" msgstr "" ! #: c-common.c:855 ! msgid "section attributes are not supported for this target" msgstr "" ! #: c-common.c:874 ! msgid "requested alignment is not a constant" msgstr "" ! #: c-common.c:879 ! msgid "requested alignment is not a power of 2" msgstr "" ! #: c-common.c:881 ! msgid "requested alignment is too large" msgstr "" ! #: c-common.c:904 #, c-format ! msgid "alignment may not be specified for `%s'" msgstr "" ! #: c-common.c:929 #, c-format ! msgid "`%s' defined both normally and as an alias" msgstr "" ! #: c-common.c:937 ! msgid "alias arg not a string" msgstr "" ! #: c-common.c:958 c-common.c:975 c-common.c:992 #, c-format ! msgid "`%s' attribute applies only to functions" msgstr "" ! #: c-common.c:964 c-common.c:981 c-common.c:998 #, c-format ! msgid "can't set `%s' attribute after definition" msgstr "" ! #: c-common.c:1131 msgid "overflow in constant expression" msgstr "" ! #: c-common.c:1152 msgid "integer overflow in expression" msgstr "" ! #: c-common.c:1161 msgid "floating point overflow in expression" msgstr "" #. This detects cases like converting -129 or 256 to unsigned char. ! #: c-common.c:1182 msgid "large integer implicitly truncated to unsigned type" msgstr "" ! #: c-common.c:1184 msgid "negative integer implicitly converted to unsigned type" msgstr "" ! #: c-common.c:1231 msgid "overflow in implicit constant conversion" msgstr "" ! #: c-common.c:1379 #, c-format msgid "operation on `%s' may be undefined" msgstr "" ! #: c-common.c:1664 msgid "expression statement has incomplete type" msgstr "" ! #: c-common.c:1697 msgid "case label does not reduce to an integer constant" msgstr "" ! #: c-common.c:1967 msgid "invalid truth-value expression" msgstr "" ! #: c-common.c:2018 #, c-format msgid "invalid operands to binary %s" msgstr "" ! #: c-common.c:2253 c-common.c:2262 msgid "comparison is always false due to limited range of data type" msgstr "" ! #: c-common.c:2255 c-common.c:2264 msgid "comparison is always true due to limited range of data type" msgstr "" ! #: c-common.c:2330 msgid "comparison of unsigned expression >= 0 is always true" msgstr "" ! #: c-common.c:2339 msgid "comparison of unsigned expression < 0 is always false" msgstr "" ! #: c-common.c:2390 f/com.c:15291 msgid "struct type value used where scalar is required" msgstr "" ! #: c-common.c:2394 f/com.c:15295 msgid "union type value used where scalar is required" msgstr "" ! #: c-common.c:2398 f/com.c:15299 msgid "array type value used where scalar is required" msgstr "" ! #: c-common.c:2513 f/com.c:15425 msgid "suggest parentheses around assignment used as truth value" msgstr "" ! #: c-common.c:2557 c-common.c:2589 msgid "invalid use of `restrict'" msgstr "" ! #: c-common.c:3724 c-typeck.c:1792 #, c-format msgid "too few arguments to function `%s'" msgstr "" ! #: c-common.c:3730 c-typeck.c:1644 #, c-format msgid "too many arguments to function `%s'" msgstr "" ! #: c-common.c:3917 msgid "pointers are not permitted as case values" msgstr "" ! #: c-common.c:3923 msgid "ISO C++ forbids range expressions in switch statements" msgstr "" ! #: c-common.c:3925 msgid "ISO C forbids range expressions in switch statements" msgstr "" ! #: c-common.c:3955 msgid "empty range specified" msgstr "" ! #: c-common.c:4006 msgid "duplicate (or overlapping) case value" msgstr "" ! #: c-common.c:4008 msgid "this is the first entry overlapping that value" msgstr "" ! #: c-common.c:4012 msgid "duplicate case value" msgstr "" ! #: c-common.c:4013 msgid "previously used here" msgstr "" ! #: c-common.c:4017 msgid "multiple default labels in one switch" msgstr "" ! #: c-common.c:4018 msgid "this is the first default label" msgstr "" ! #: c-common.c:4526 msgid "-Wformat-y2k ignored without -Wformat" msgstr "" ! #: c-common.c:4528 msgid "-Wformat-extra-args ignored without -Wformat" msgstr "" ! #: c-common.c:4530 msgid "-Wformat-nonliteral ignored without -Wformat" msgstr "" ! #: c-common.c:4532 msgid "-Wformat-security ignored without -Wformat" msgstr "" ! #: c-common.c:4534 msgid "-Wmissing-format-attribute ignored without -Wformat" msgstr "" ! #: c-convert.c:78 c-typeck.c:983 c-typeck.c:4098 cp/typeck.c:1754 ! #: cp/typeck.c:6304 msgid "void value not ignored as it ought to be" msgstr "" --- 15,456 ---- "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" ! #: attribs.c:314 ! #, c-format ! msgid "`%s' attribute directive ignored" msgstr "" ! #: attribs.c:322 ! #, c-format ! msgid "wrong number of arguments specified for `%s' attribute" msgstr "" ! #: attribs.c:339 ! #, c-format ! msgid "`%s' attribute does not apply to types" msgstr "" ! #: attribs.c:376 ! #, c-format ! msgid "`%s' attribute only applies to function types" msgstr "" ! #: attribs.c:468 attribs.c:490 attribs.c:512 attribs.c:543 attribs.c:565 ! #: attribs.c:590 attribs.c:613 attribs.c:643 attribs.c:681 attribs.c:728 ! #: attribs.c:758 attribs.c:788 attribs.c:811 attribs.c:1057 attribs.c:1113 ! #: attribs.c:1169 attribs.c:1230 attribs.c:1256 attribs.c:1458 ! #: config/arm/arm.c:2007 config/arm/arm.c:2034 config/avr/avr.c:4683 ! #: config/h8300/h8300.c:3071 config/h8300/h8300.c:3096 config/i386/i386.c:1267 ! #: config/i386/winnt.c:74 ! #, c-format ! msgid "`%s' attribute ignored" msgstr "" ! #: attribs.c:844 ! #, c-format ! msgid "unknown machine mode `%s'" msgstr "" ! #: attribs.c:847 ! #, c-format ! msgid "no data type for mode `%s'" msgstr "" ! #: attribs.c:880 ! msgid "section attribute cannot be specified for local variables" msgstr "" ! #: attribs.c:891 #, c-format ! msgid "section of `%s' conflicts with previous declaration" msgstr "" ! #: attribs.c:900 #, c-format ! msgid "section attribute not allowed for `%s'" msgstr "" ! #: attribs.c:907 ! msgid "section attributes are not supported for this target" msgstr "" ! #: attribs.c:949 ! msgid "requested alignment is not a constant" msgstr "" ! #: attribs.c:954 ! msgid "requested alignment is not a power of 2" msgstr "" ! #: attribs.c:959 ! msgid "requested alignment is too large" msgstr "" ! #: attribs.c:986 ! #, c-format ! msgid "alignment may not be specified for `%s'" msgstr "" ! #: attribs.c:1031 ! #, c-format ! msgid "`%s' defined both normally and as an alias" msgstr "" ! #: attribs.c:1041 ! msgid "alias arg not a string" msgstr "" ! #: attribs.c:1080 attribs.c:1136 #, c-format ! msgid "`%s' attribute applies only to functions" msgstr "" ! #: attribs.c:1087 attribs.c:1143 #, c-format ! msgid "can't set `%s' attribute after definition" msgstr "" ! #: attribs.c:1227 #, c-format ! msgid "`%s' attribute ignored for `%s'" msgstr "" ! #: attribs.c:1284 #, c-format ! msgid "invalid vector type for attribute `%s'" msgstr "" ! #: attribs.c:1307 attribs.c:1312 ! msgid "no vector mode with the size and type specified could be found" msgstr "" ! #: builtins.c:282 ! msgid "offset outside bounds of constant string" msgstr "" ! #: builtins.c:759 ! msgid "second arg to `__builtin_prefetch' must be a constant" msgstr "" ! #: builtins.c:766 ! msgid "invalid second arg to __builtin_prefetch; using zero" msgstr "" ! #: builtins.c:773 ! msgid "third arg to `__builtin_prefetch' must be a constant" msgstr "" ! #: builtins.c:780 ! msgid "invalid third arg to __builtin_prefetch; using zero" msgstr "" ! #. ??? We used to try and build up a call to the out of line function, ! #. guessing about what registers needed saving etc. This became much ! #. harder with __builtin_va_start, since we don't have a tree for a ! #. call to __builtin_saveregs to fall back on. There was exactly one ! #. port (i860) that used this code, and I'm unconvinced it could actually ! #. handle the general case. So we no longer try to handle anything ! #. weird and make the backend absorb the evil. ! #: builtins.c:2760 ! msgid "__builtin_saveregs not supported by this target" msgstr "" ! #: builtins.c:2802 ! msgid "argument of `__builtin_args_info' must be constant" msgstr "" ! #: builtins.c:2808 ! msgid "argument of `__builtin_args_info' out of range" msgstr "" ! #: builtins.c:2814 ! msgid "missing argument in `__builtin_args_info'" msgstr "" ! #: builtins.c:2846 ! msgid "`va_start' used in function with fixed args" msgstr "" ! #: builtins.c:2865 ! msgid "second parameter of `va_start' not last named argument" msgstr "" ! #. Evidently an out of date version of ; can't validate ! #. va_start's second argument, but can still work as intended. ! #: builtins.c:2870 ! msgid "`__builtin_next_arg' called without an argument" ! msgstr "" ! ! #: builtins.c:2974 ! msgid "too many arguments to function `va_start'" ! msgstr "" ! ! #: builtins.c:3075 ! msgid "first argument to `va_arg' not of type `va_list'" ! msgstr "" ! ! #. Unfortunately, this is merely undefined, rather than a constraint ! #. violation, so we cannot make this an error. If this call is never ! #. executed, the program is still strictly conforming. ! #: builtins.c:3106 #, c-format ! msgid "`%s' is promoted to `%s' when passed through `...'" msgstr "" ! #: builtins.c:3111 #, c-format ! msgid "(so you should pass `%s' not `%s' to `va_arg')" msgstr "" ! #: builtins.c:3242 ! msgid "invalid arg to `__builtin_frame_address'" msgstr "" ! #: builtins.c:3244 ! msgid "invalid arg to `__builtin_return_address'" ! msgstr "" ! ! #: builtins.c:3258 ! msgid "unsupported arg to `__builtin_frame_address'" ! msgstr "" ! ! #: builtins.c:3260 ! msgid "unsupported arg to `__builtin_return_address'" ! msgstr "" ! ! #: builtins.c:3428 ! msgid "second arg to `__builtin_expect' must be a constant" ! msgstr "" ! ! #: builtins.c:3909 ! msgid "__builtin_longjmp second argument must be 1" ! msgstr "" ! ! #. just do library call, if unknown builtin ! #: builtins.c:3982 c-common.c:3811 #, c-format ! msgid "built-in function `%s' not currently supported" msgstr "" ! #: c-common.c:550 #, c-format ! msgid "`%s' is not defined outside of function scope" msgstr "" ! #: c-common.c:590 ! msgid "" ! "concatenation of string literals with __FUNCTION__ is deprecated. This " ! "feature will be removed in future" ! msgstr "" ! ! #: c-common.c:659 ! #, c-format ! msgid "" ! "string length `%d' is greater than the length `%d' ISO C%d compilers are " ! "required to support" ! msgstr "" ! ! #: c-common.c:708 msgid "overflow in constant expression" msgstr "" ! #: c-common.c:729 msgid "integer overflow in expression" msgstr "" ! #: c-common.c:738 msgid "floating point overflow in expression" msgstr "" + #: c-common.c:744 + msgid "vector overflow in expression" + msgstr "" + #. This detects cases like converting -129 or 256 to unsigned char. ! #: c-common.c:765 msgid "large integer implicitly truncated to unsigned type" msgstr "" ! #: c-common.c:767 msgid "negative integer implicitly converted to unsigned type" msgstr "" ! #: c-common.c:814 msgid "overflow in implicit constant conversion" msgstr "" ! #: c-common.c:962 #, c-format msgid "operation on `%s' may be undefined" msgstr "" ! #: c-common.c:1253 msgid "expression statement has incomplete type" msgstr "" ! #: c-common.c:1286 msgid "case label does not reduce to an integer constant" msgstr "" ! #: c-common.c:1586 msgid "invalid truth-value expression" msgstr "" ! #: c-common.c:1637 #, c-format msgid "invalid operands to binary %s" msgstr "" ! #: c-common.c:1872 c-common.c:1881 msgid "comparison is always false due to limited range of data type" msgstr "" ! #: c-common.c:1874 c-common.c:1883 msgid "comparison is always true due to limited range of data type" msgstr "" ! #: c-common.c:1949 msgid "comparison of unsigned expression >= 0 is always true" msgstr "" ! #: c-common.c:1958 msgid "comparison of unsigned expression < 0 is always false" msgstr "" ! #: c-common.c:2005 ! msgid "pointer of type `void *' used in arithmetic" ! msgstr "" ! ! #: c-common.c:2011 ! msgid "pointer to a function used in arithmetic" ! msgstr "" ! ! #: c-common.c:2017 ! msgid "pointer to member function used in arithmetic" ! msgstr "" ! ! #: c-common.c:2023 ! msgid "pointer to a member used in arithmetic" ! msgstr "" ! ! #: c-common.c:2110 f/com.c:14823 msgid "struct type value used where scalar is required" msgstr "" ! #: c-common.c:2114 f/com.c:14827 msgid "union type value used where scalar is required" msgstr "" ! #: c-common.c:2118 f/com.c:14831 msgid "array type value used where scalar is required" msgstr "" ! #: c-common.c:2233 f/com.c:14957 msgid "suggest parentheses around assignment used as truth value" msgstr "" ! #: c-common.c:2277 c-common.c:2309 msgid "invalid use of `restrict'" msgstr "" ! #: c-common.c:2425 ! msgid "__alignof__ applied to an incomplete type" ! msgstr "" ! ! #: c-common.c:2451 ! msgid "`__alignof' applied to a bit-field" ! msgstr "" ! ! #: c-common.c:2893 ! #, c-format ! msgid "cannot disable built-in function `%s'" ! msgstr "" ! ! #: c-common.c:3174 c-typeck.c:1781 #, c-format msgid "too few arguments to function `%s'" msgstr "" ! #: c-common.c:3180 c-typeck.c:1634 #, c-format msgid "too many arguments to function `%s'" msgstr "" ! #: c-common.c:3369 msgid "pointers are not permitted as case values" msgstr "" ! #: c-common.c:3375 msgid "ISO C++ forbids range expressions in switch statements" msgstr "" ! #: c-common.c:3377 msgid "ISO C forbids range expressions in switch statements" msgstr "" ! #: c-common.c:3407 msgid "empty range specified" msgstr "" ! #: c-common.c:3458 msgid "duplicate (or overlapping) case value" msgstr "" ! #: c-common.c:3460 msgid "this is the first entry overlapping that value" msgstr "" ! #: c-common.c:3464 msgid "duplicate case value" msgstr "" ! #: c-common.c:3465 msgid "previously used here" msgstr "" ! #: c-common.c:3469 msgid "multiple default labels in one switch" msgstr "" ! #: c-common.c:3470 msgid "this is the first default label" msgstr "" ! #: c-common.c:3498 ! msgid "ISO C++ forbids taking the address of a label" ! msgstr "" ! ! #: c-common.c:3500 ! msgid "ISO C forbids taking the address of a label" ! msgstr "" ! ! #: c-common.c:4148 msgid "-Wformat-y2k ignored without -Wformat" msgstr "" ! #: c-common.c:4150 msgid "-Wformat-extra-args ignored without -Wformat" msgstr "" ! #: c-common.c:4152 msgid "-Wformat-nonliteral ignored without -Wformat" msgstr "" ! #: c-common.c:4154 msgid "-Wformat-security ignored without -Wformat" msgstr "" ! #: c-common.c:4156 msgid "-Wmissing-format-attribute ignored without -Wformat" msgstr "" ! #: c-common.c:4247 ! #, c-format ! msgid "declaration of `%s' shadows %s" ! msgstr "" ! ! #: c-convert.c:78 c-typeck.c:1035 c-typeck.c:4047 cp/typeck.c:1673 ! #: cp/typeck.c:6165 msgid "void value not ignored as it ought to be" msgstr "" *************** msgstr "" *** 367,1293 **** msgid "conversion to non-scalar type requested" msgstr "" ! #: c-decl.c:550 #, c-format msgid "unknown C standard `%s'" msgstr "" ! #: c-decl.c:844 #, c-format msgid "array `%s' assumed to have one element" msgstr "" ! #: c-decl.c:1020 #, c-format msgid "`struct %s' incomplete in scope ending here" msgstr "" ! #: c-decl.c:1023 #, c-format msgid "`union %s' incomplete in scope ending here" msgstr "" ! #: c-decl.c:1026 #, c-format msgid "`enum %s' incomplete in scope ending here" msgstr "" ! #: c-decl.c:1140 c-decl.c:1305 java/decl.c:1337 #, c-format msgid "label `%s' used but not defined" msgstr "" ! #: c-decl.c:1146 c-decl.c:1312 java/decl.c:1343 #, c-format msgid "label `%s' defined but not used" msgstr "" ! #: c-decl.c:1434 c-decl.c:1487 #, c-format msgid "shadowing built-in function `%s'" msgstr "" ! #: c-decl.c:1436 #, c-format msgid "shadowing library function `%s'" msgstr "" ! #: c-decl.c:1442 #, c-format msgid "library function `%s' declared as non-function" msgstr "" ! #: c-decl.c:1446 c-decl.c:1449 #, c-format msgid "built-in function `%s' declared as non-function" msgstr "" ! #: c-decl.c:1453 objc/objc-act.c:2480 objc/objc-act.c:6133 #, c-format msgid "`%s' redeclared as different kind of symbol" msgstr "" ! #: c-decl.c:1454 c-decl.c:1632 c-decl.c:1779 objc/objc-act.c:2482 ! #: objc/objc-act.c:6135 objc/objc-act.c:6193 #, c-format msgid "previous declaration of `%s'" msgstr "" #. If types don't match for a built-in, throw away the built-in. ! #: c-decl.c:1536 #, c-format msgid "conflicting types for built-in function `%s'" msgstr "" ! #: c-decl.c:1579 c-decl.c:1598 #, c-format msgid "conflicting types for `%s'" msgstr "" ! #: c-decl.c:1621 msgid "" ! "A parameter list with an ellipsis can't match an empty parameter name list " ! "declaration." msgstr "" ! #: c-decl.c:1627 msgid "" ! "An argument type that has a default promotion can't match an empty parameter " ! "name list declaration." msgstr "" ! #: c-decl.c:1642 c-decl.c:1664 #, c-format msgid "redefinition of `%s'" msgstr "" ! #: c-decl.c:1645 #, c-format msgid "redeclaration of `%s'" msgstr "" ! #: c-decl.c:1648 #, c-format msgid "conflicting declarations of `%s'" msgstr "" ! #: c-decl.c:1657 c-decl.c:1669 ! #, c-format ! msgid "`%s' previously defined here" ! msgstr "" ! ! #: c-decl.c:1658 c-decl.c:1670 ! #, c-format ! msgid "`%s' previously declared here" ! msgstr "" ! ! #: c-decl.c:1691 #, c-format msgid "prototype for `%s' follows" msgstr "" ! #: c-decl.c:1692 c-decl.c:1700 c-decl.c:1716 msgid "non-prototype definition here" msgstr "" ! #: c-decl.c:1699 #, c-format msgid "prototype for `%s' follows and number of arguments doesn't match" msgstr "" ! #: c-decl.c:1714 #, c-format msgid "prototype for `%s' follows and argument %d doesn't match" msgstr "" ! #: c-decl.c:1731 #, c-format msgid "`%s' declared inline after being called" msgstr "" ! #: c-decl.c:1736 #, c-format msgid "`%s' declared inline after its definition" msgstr "" ! #: c-decl.c:1743 #, c-format msgid "static declaration for `%s' follows non-static" msgstr "" ! #: c-decl.c:1751 #, c-format msgid "non-static declaration for `%s' follows static" msgstr "" ! #: c-decl.c:1758 #, c-format msgid "const declaration for `%s' follows non-const" msgstr "" ! #: c-decl.c:1765 #, c-format msgid "type qualifiers for `%s' conflict with previous decl" msgstr "" ! #: c-decl.c:1778 #, c-format msgid "redundant redeclaration of `%s' in same scope" msgstr "" ! #: c-decl.c:2069 #, c-format msgid "nested extern declaration of `%s'" msgstr "" ! #: c-decl.c:2094 java/decl.c:989 #, c-format msgid "`%s' used prior to declaration" msgstr "" ! #: c-decl.c:2115 c-decl.c:2330 #, c-format msgid "`%s' was declared implicitly `extern' and later `static'" msgstr "" ! #: c-decl.c:2225 msgid "type mismatch with previous external decl" msgstr "" ! #: c-decl.c:2226 #, c-format msgid "previous external decl of `%s'" msgstr "" ! #: c-decl.c:2239 msgid "type mismatch with previous implicit declaration" msgstr "" ! #: c-decl.c:2241 #, c-format msgid "previous implicit declaration of `%s'" msgstr "" ! #: c-decl.c:2258 #, c-format msgid "type of external `%s' is not global" msgstr "" ! #: c-decl.c:2309 #, c-format msgid "`%s' was previously implicitly declared to return `int'" msgstr "" ! #: c-decl.c:2334 #, c-format msgid "`%s' was declared `extern' and later `static'" msgstr "" ! #: c-decl.c:2357 #, c-format msgid "extern declaration of `%s' doesn't match global one" msgstr "" ! #: c-decl.c:2397 #, c-format msgid "`%s' locally external but globally static" msgstr "" ! #: c-decl.c:2433 c-decl.c:2458 cp/decl.c:4225 java/decl.c:1036 ! #, c-format ! msgid "declaration of `%s' shadows a parameter" ! msgstr "" ! ! #: c-decl.c:2436 java/decl.c:1039 ! #, c-format ! msgid "declaration of `%s' shadows a symbol from the parameter list" ! msgstr "" ! ! #: c-decl.c:2460 cp/decl.c:4233 ! #, c-format ! msgid "declaration of `%s' shadows previous local" ! msgstr "" ! ! #. XXX shadow warnings in outer-more namespaces ! #: c-decl.c:2463 cp/decl.c:4237 ! #, c-format ! msgid "declaration of `%s' shadows global declaration" ! msgstr "" ! ! #: c-decl.c:2553 #, c-format msgid "function `%s' was previously declared within a block" msgstr "" ! #: c-decl.c:2570 c-decl.c:2572 #, c-format msgid "implicit declaration of function `%s'" msgstr "" ! #: c-decl.c:2659 #, c-format msgid "label %s referenced outside of any function" msgstr "" ! #: c-decl.c:2716 #, c-format msgid "duplicate label declaration `%s'" msgstr "" ! #: c-decl.c:2719 msgid "this is a previous declaration" msgstr "" ! #: c-decl.c:3246 msgid "unnamed struct/union that defines no instances" msgstr "" ! #: c-decl.c:3265 msgid "useless keyword or type name in empty declaration" msgstr "" ! #: c-decl.c:3272 msgid "two types specified in one empty declaration" msgstr "" ! #: c-decl.c:3277 c-parse.y:303 c-parse.y:722 c-parse.y:724 c-parse.y:774 ! #: cp/parse.y:724 cp/parse.y:1781 objc/objc-parse.y:332 objc/objc-parse.y:774 ! #: objc/objc-parse.y:776 objc/objc-parse.y:826 objc/objc-parse.y:2574 msgid "empty declaration" msgstr "" ! #: c-decl.c:3334 #, c-format msgid "`%s' is usually a function" msgstr "" ! #: c-decl.c:3348 #, c-format msgid "typedef `%s' is initialized" msgstr "" ! #: c-decl.c:3355 #, c-format msgid "function `%s' is initialized like a variable" msgstr "" #. DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE. ! #: c-decl.c:3362 #, c-format msgid "parameter `%s' is initialized" msgstr "" ! #: c-decl.c:3382 c-typeck.c:4829 msgid "variable-sized object may not be initialized" msgstr "" ! #: c-decl.c:3388 #, c-format msgid "variable `%s' has initializer but incomplete type" msgstr "" ! #: c-decl.c:3394 #, c-format msgid "elements of array `%s' have incomplete type" msgstr "" ! #: c-decl.c:3407 #, c-format msgid "declaration of `%s' has `extern' and is initialized" msgstr "" ! #: c-decl.c:3521 #, c-format msgid "initializer fails to determine size of `%s'" msgstr "" ! #: c-decl.c:3526 #, c-format msgid "array size missing in `%s'" msgstr "" ! #: c-decl.c:3542 #, c-format msgid "zero or negative size array `%s'" msgstr "" ! #: c-decl.c:3570 #, c-format msgid "storage size of `%s' isn't known" msgstr "" ! #: c-decl.c:3580 #, c-format msgid "storage size of `%s' isn't constant" msgstr "" ! #: c-decl.c:3631 #, c-format msgid "ignoring asm-specifier for non-static local variable `%s'" msgstr "" ! #: c-decl.c:3706 #, c-format ! msgid "ANSI C forbids parameter `%s' shadowing typedef" msgstr "" ! #: c-decl.c:3940 cp/decl.c:10013 msgid "`long long long' is too long for GCC" msgstr "" ! #: c-decl.c:3945 msgid "ISO C89 does not support `long long'" msgstr "" ! #: c-decl.c:3950 cp/decl.c:10018 #, c-format msgid "duplicate `%s'" msgstr "" ! #: c-decl.c:3956 cp/decl.c:10038 #, c-format msgid "two or more data types in declaration of `%s'" msgstr "" ! #: c-decl.c:3971 cp/decl.c:10043 #, c-format msgid "`%s' fails to be a typedef or built in type" msgstr "" ! #: c-decl.c:4009 #, c-format msgid "type defaults to `int' in declaration of `%s'" msgstr "" ! #: c-decl.c:4038 #, c-format msgid "both long and short specified for `%s'" msgstr "" ! #: c-decl.c:4042 cp/decl.c:10142 #, c-format msgid "long or short specified with char for `%s'" msgstr "" ! #: c-decl.c:4049 cp/decl.c:10146 #, c-format msgid "long or short specified with floating type for `%s'" msgstr "" ! #: c-decl.c:4052 msgid "the only valid combination is `long double'" msgstr "" ! #: c-decl.c:4058 #, c-format msgid "both signed and unsigned specified for `%s'" msgstr "" ! #: c-decl.c:4060 cp/decl.c:10135 #, c-format msgid "long, short, signed or unsigned invalid for `%s'" msgstr "" ! #: c-decl.c:4066 cp/decl.c:10155 #, c-format msgid "long, short, signed or unsigned used invalidly for `%s'" msgstr "" ! #: c-decl.c:4085 cp/decl.c:10176 #, c-format msgid "complex invalid for `%s'" msgstr "" ! #: c-decl.c:4130 msgid "ISO C89 does not support complex types" msgstr "" ! #: c-decl.c:4142 msgid "ISO C does not support plain `complex' meaning `double complex'" msgstr "" ! #: c-decl.c:4148 c-decl.c:4160 msgid "ISO C does not support complex integer types" msgstr "" ! #: c-decl.c:4175 c-decl.c:4571 cp/decl.c:10775 msgid "duplicate `const'" msgstr "" ! #: c-decl.c:4177 c-decl.c:4575 cp/decl.c:10779 msgid "duplicate `restrict'" msgstr "" ! #: c-decl.c:4179 c-decl.c:4573 cp/decl.c:10777 msgid "duplicate `volatile'" msgstr "" ! #: c-decl.c:4201 cp/decl.c:10325 #, c-format msgid "multiple storage classes in declaration of `%s'" msgstr "" ! #: c-decl.c:4210 msgid "function definition declared `auto'" msgstr "" ! #: c-decl.c:4212 msgid "function definition declared `register'" msgstr "" ! #: c-decl.c:4214 msgid "function definition declared `typedef'" msgstr "" ! #: c-decl.c:4227 #, c-format msgid "storage class specified for structure field `%s'" msgstr "" ! #: c-decl.c:4231 cp/decl.c:10372 #, c-format msgid "storage class specified for parameter `%s'" msgstr "" ! #: c-decl.c:4234 cp/decl.c:10374 msgid "storage class specified for typename" msgstr "" ! #: c-decl.c:4246 cp/decl.c:10388 #, c-format msgid "`%s' initialized and declared `extern'" msgstr "" ! #: c-decl.c:4248 cp/decl.c:10391 #, c-format msgid "`%s' has both `extern' and initializer" msgstr "" ! #: c-decl.c:4252 cp/decl.c:10395 #, c-format msgid "nested function `%s' declared `extern'" msgstr "" ! #: c-decl.c:4255 cp/decl.c:10399 #, c-format msgid "top-level declaration of `%s' specifies `auto'" msgstr "" ! #: c-decl.c:4297 #, c-format msgid "declaration of `%s' as array of voids" msgstr "" ! #: c-decl.c:4303 #, c-format msgid "declaration of `%s' as array of functions" msgstr "" ! #: c-decl.c:4325 #, c-format msgid "size of array `%s' has non-integer type" msgstr "" ! #: c-decl.c:4330 #, c-format msgid "ISO C forbids zero-size array `%s'" msgstr "" ! #: c-decl.c:4337 #, c-format msgid "size of array `%s' is negative" msgstr "" ! #: c-decl.c:4350 #, c-format msgid "ISO C89 forbids array `%s' whose size can't be evaluated" msgstr "" ! #: c-decl.c:4353 #, c-format msgid "ISO C89 forbids variable-size array `%s'" msgstr "" ! #: c-decl.c:4383 c-decl.c:4597 #, c-format msgid "size of array `%s' is too large" msgstr "" ! #: c-decl.c:4400 msgid "ISO C89 does not support flexible array members" msgstr "" ! #: c-decl.c:4410 msgid "array type has incomplete element type" msgstr "" ! #: c-decl.c:4417 ! msgid "ANSI C forbids const or volatile function types" msgstr "" ! #: c-decl.c:4456 cp/decl.c:10535 #, c-format msgid "`%s' declared as function returning a function" msgstr "" ! #: c-decl.c:4461 cp/decl.c:10540 #, c-format msgid "`%s' declared as function returning an array" msgstr "" ! #: c-decl.c:4496 msgid "ISO C forbids qualified void function return type" msgstr "" ! #: c-decl.c:4500 msgid "type qualifiers ignored on function return type" msgstr "" ! #: c-decl.c:4529 c-decl.c:4612 c-decl.c:4696 c-decl.c:4787 msgid "ISO C forbids qualified function types" msgstr "" ! #: c-decl.c:4569 cp/decl.c:10771 msgid "invalid type modifier within pointer declarator" msgstr "" ! #: c-decl.c:4646 ! msgid "ISO C forbids const or volatile function types" ! msgstr "" ! ! #: c-decl.c:4665 cp/decl.c:11247 #, c-format msgid "variable or field `%s' declared void" msgstr "" ! #: c-decl.c:4734 #, c-format msgid "field `%s' declared as a function" msgstr "" ! #: c-decl.c:4740 #, c-format msgid "field `%s' has incomplete type" msgstr "" ! #: c-decl.c:4772 c-decl.c:4774 c-decl.c:4781 #, c-format msgid "invalid storage class for function `%s'" msgstr "" ! #: c-decl.c:4793 msgid "`noreturn' function returns non-void value" msgstr "" ! #: c-decl.c:4805 msgid "cannot inline function `main'" msgstr "" ! #: c-decl.c:4840 #, c-format msgid "variable `%s' declared `inline'" msgstr "" ! #: c-decl.c:4911 c-decl.c:5898 msgid "function declaration isn't a prototype" msgstr "" ! #: c-decl.c:4917 msgid "parameter names (without types) in function declaration" msgstr "" ! #: c-decl.c:4949 c-decl.c:6286 c-decl.c:6585 #, c-format msgid "parameter `%s' has incomplete type" msgstr "" ! #: c-decl.c:4952 msgid "parameter has incomplete type" msgstr "" ! #: c-decl.c:4973 #, c-format msgid "parameter `%s' points to incomplete type" msgstr "" ! #: c-decl.c:4976 msgid "parameter points to incomplete type" msgstr "" ! #: c-decl.c:5041 #, c-format msgid "parameter `%s' has just a forward declaration" msgstr "" ! #: c-decl.c:5082 msgid "`void' in parameter list must be the entire list" msgstr "" ! #: c-decl.c:5111 #, c-format ! msgid "`%s %s' declared inside parameter list" msgstr "" ! #: c-decl.c:5120 msgid "anonymous struct declared inside parameter list" msgstr "" ! #: c-decl.c:5122 msgid "anonymous union declared inside parameter list" msgstr "" ! #: c-decl.c:5124 msgid "anonymous enum declared inside parameter list" msgstr "" ! #: c-decl.c:5128 msgid "" "its scope is only this definition or declaration, which is probably not what " ! "you want." msgstr "" ! #: c-decl.c:5198 #, c-format ! msgid "redefinition of `%s %s'" msgstr "" ! #: c-decl.c:5266 c-decl.c:5269 #, c-format msgid "%s defined inside parms" msgstr "" ! #: c-decl.c:5267 c-decl.c:5270 c-decl.c:5281 msgid "union" msgstr "" ! #: c-decl.c:5267 c-decl.c:5270 msgid "structure" msgstr "" ! #: c-decl.c:5280 #, c-format msgid "%s has no %s" msgstr "" ! #: c-decl.c:5281 msgid "struct" msgstr "" ! #: c-decl.c:5282 msgid "named members" msgstr "" ! #: c-decl.c:5282 msgid "members" msgstr "" ! #: c-decl.c:5321 #, c-format msgid "nested redefinition of `%s'" msgstr "" ! #: c-decl.c:5334 #, c-format msgid "bit-field `%s' width not an integer constant" msgstr "" ! #: c-decl.c:5345 #, c-format msgid "bit-field `%s' has invalid type" msgstr "" ! #: c-decl.c:5357 #, c-format msgid "bit-field `%s' type invalid in ISO C" msgstr "" ! #: c-decl.c:5369 #, c-format msgid "negative width in bit-field `%s'" msgstr "" ! #: c-decl.c:5371 #, c-format msgid "width of `%s' exceeds its type" msgstr "" ! #: c-decl.c:5373 #, c-format msgid "zero width for bit-field `%s'" msgstr "" ! #: c-decl.c:5387 #, c-format msgid "`%s' is narrower than values of its type" msgstr "" ! #: c-decl.c:5432 msgid "flexible array member in union" msgstr "" ! #: c-decl.c:5434 msgid "flexible array member not at end of struct" msgstr "" ! #: c-decl.c:5436 msgid "flexible array member in otherwise empty struct" msgstr "" ! #: c-decl.c:5461 #, c-format msgid "duplicate member `%s'" msgstr "" ! #: c-decl.c:5505 msgid "union cannot be made transparent" msgstr "" #. This enum is a named one that has been declared already. ! #: c-decl.c:5586 #, c-format msgid "redeclaration of `enum %s'" msgstr "" ! #: c-decl.c:5620 msgid "enum defined inside parms" msgstr "" ! #: c-decl.c:5653 msgid "enumeration values exceed range of largest integer" msgstr "" ! #: c-decl.c:5762 #, c-format msgid "enumerator value for `%s' not integer constant" msgstr "" ! #: c-decl.c:5775 msgid "overflow in enumeration values" msgstr "" ! #: c-decl.c:5780 msgid "ISO C restricts enumerator values to range of `int'" msgstr "" ! #: c-decl.c:5852 msgid "return type is an incomplete type" msgstr "" ! #: c-decl.c:5860 msgid "return type defaults to `int'" msgstr "" ! #: c-decl.c:5907 #, c-format msgid "no previous prototype for `%s'" msgstr "" ! #: c-decl.c:5914 #, c-format msgid "`%s' was used with no prototype before its definition" msgstr "" ! #: c-decl.c:5920 #, c-format msgid "no previous declaration for `%s'" msgstr "" ! #: c-decl.c:5927 #, c-format msgid "`%s' was used with no declaration before its definition" msgstr "" ! #: c-decl.c:5955 c-decl.c:6672 #, c-format msgid "return type of `%s' is not `int'" msgstr "" ! #: c-decl.c:5971 #, c-format msgid "first argument of `%s' should be `int'" msgstr "" ! #: c-decl.c:5980 #, c-format msgid "second argument of `%s' should be `char **'" msgstr "" ! #: c-decl.c:5989 #, c-format msgid "third argument of `%s' should probably be `char **'" msgstr "" ! #: c-decl.c:5998 #, c-format msgid "`%s' takes only zero or two arguments" msgstr "" ! #: c-decl.c:6001 #, c-format msgid "`%s' is normally a non-static function" msgstr "" ! #: c-decl.c:6104 msgid "parm types given both in parmlist and separately" msgstr "" ! #: c-decl.c:6125 msgid "parameter name omitted" msgstr "" ! #: c-decl.c:6129 c-decl.c:6231 c-decl.c:6542 #, c-format msgid "parameter `%s' declared void" msgstr "" ! #: c-decl.c:6205 msgid "parameter name missing from parameter list" msgstr "" ! #: c-decl.c:6224 c-decl.c:6535 #, c-format msgid "multiple parameters named `%s'" msgstr "" ! #: c-decl.c:6255 c-decl.c:6257 #, c-format msgid "type of `%s' defaults to `int'" msgstr "" ! #: c-decl.c:6293 c-decl.c:6592 #, c-format msgid "declaration for parameter `%s' but no such parameter" msgstr "" ! #: c-decl.c:6341 msgid "number of arguments doesn't match prototype" msgstr "" ! #: c-decl.c:6371 #, c-format msgid "promoted argument `%s' doesn't match prototype" msgstr "" ! #: c-decl.c:6385 #, c-format msgid "argument `%s' doesn't match prototype" msgstr "" ! #: c-decl.c:6565 ! #, c-format ! msgid "type of parameter `%s' is not declared" msgstr "" ! #: c-decl.c:6793 msgid "this function may return with or without a value" msgstr "" ! #: c-decl.c:6813 #, c-format msgid "size of return value of `%s' is %u bytes" msgstr "" ! #: c-decl.c:6817 #, c-format msgid "size of return value of `%s' is larger than %d bytes" msgstr "" --- 458,1451 ---- msgid "conversion to non-scalar type requested" msgstr "" ! #: c-decl.c:476 ! msgid "-traditional is deprecated and may be removed" ! msgstr "" ! ! #: c-decl.c:566 #, c-format msgid "unknown C standard `%s'" msgstr "" ! #: c-decl.c:848 #, c-format msgid "array `%s' assumed to have one element" msgstr "" ! #: c-decl.c:1024 #, c-format msgid "`struct %s' incomplete in scope ending here" msgstr "" ! #: c-decl.c:1027 #, c-format msgid "`union %s' incomplete in scope ending here" msgstr "" ! #: c-decl.c:1030 #, c-format msgid "`enum %s' incomplete in scope ending here" msgstr "" ! #: c-decl.c:1144 c-decl.c:1285 java/decl.c:1377 #, c-format msgid "label `%s' used but not defined" msgstr "" ! #: c-decl.c:1150 c-decl.c:1292 java/decl.c:1383 #, c-format msgid "label `%s' defined but not used" msgstr "" ! #: c-decl.c:1409 cp/decl.c:3128 ! #, c-format ! msgid "function `%s' redeclared as inline" ! msgstr "" ! ! #: c-decl.c:1411 cp/decl.c:3130 ! #, c-format ! msgid "previous declaration of function `%s' with attribute noinline" ! msgstr "" ! ! #: c-decl.c:1418 cp/decl.c:3137 ! #, c-format ! msgid "function `%s' redeclared with attribute noinline" ! msgstr "" ! ! #: c-decl.c:1420 cp/decl.c:3139 ! #, c-format ! msgid "previous declaration of function `%s' was inline" ! msgstr "" ! ! #: c-decl.c:1449 c-decl.c:1502 #, c-format msgid "shadowing built-in function `%s'" msgstr "" ! #: c-decl.c:1451 #, c-format msgid "shadowing library function `%s'" msgstr "" ! #: c-decl.c:1457 #, c-format msgid "library function `%s' declared as non-function" msgstr "" ! #: c-decl.c:1461 c-decl.c:1464 #, c-format msgid "built-in function `%s' declared as non-function" msgstr "" ! #: c-decl.c:1468 objc/objc-act.c:2334 objc/objc-act.c:6036 #, c-format msgid "`%s' redeclared as different kind of symbol" msgstr "" ! #: c-decl.c:1469 c-decl.c:1667 c-decl.c:1817 objc/objc-act.c:2336 ! #: objc/objc-act.c:6038 objc/objc-act.c:6093 #, c-format msgid "previous declaration of `%s'" msgstr "" #. If types don't match for a built-in, throw away the built-in. ! #: c-decl.c:1571 #, c-format msgid "conflicting types for built-in function `%s'" msgstr "" ! #: c-decl.c:1614 c-decl.c:1633 #, c-format msgid "conflicting types for `%s'" msgstr "" ! #: c-decl.c:1656 msgid "" ! "a parameter list with an ellipsis can't match an empty parameter name list " ! "declaration" msgstr "" ! #: c-decl.c:1662 msgid "" ! "an argument type that has a default promotion can't match an empty parameter " ! "name list declaration" msgstr "" ! #: c-decl.c:1677 c-decl.c:1700 #, c-format msgid "redefinition of `%s'" msgstr "" ! #: c-decl.c:1680 #, c-format msgid "redeclaration of `%s'" msgstr "" ! #: c-decl.c:1683 #, c-format msgid "conflicting declarations of `%s'" msgstr "" ! #: c-decl.c:1727 #, c-format msgid "prototype for `%s' follows" msgstr "" ! #: c-decl.c:1728 c-decl.c:1736 c-decl.c:1752 msgid "non-prototype definition here" msgstr "" ! #: c-decl.c:1735 #, c-format msgid "prototype for `%s' follows and number of arguments doesn't match" msgstr "" ! #: c-decl.c:1750 #, c-format msgid "prototype for `%s' follows and argument %d doesn't match" msgstr "" ! #: c-decl.c:1768 #, c-format msgid "`%s' declared inline after being called" msgstr "" ! #: c-decl.c:1774 #, c-format msgid "`%s' declared inline after its definition" msgstr "" ! #: c-decl.c:1781 #, c-format msgid "static declaration for `%s' follows non-static" msgstr "" ! #: c-decl.c:1789 #, c-format msgid "non-static declaration for `%s' follows static" msgstr "" ! #: c-decl.c:1796 #, c-format msgid "const declaration for `%s' follows non-const" msgstr "" ! #: c-decl.c:1803 #, c-format msgid "type qualifiers for `%s' conflict with previous decl" msgstr "" ! #: c-decl.c:1816 #, c-format msgid "redundant redeclaration of `%s' in same scope" msgstr "" ! #: c-decl.c:2120 java/decl.c:1076 ! #, c-format ! msgid "declaration of `%s' shadows a parameter" ! msgstr "" ! ! #: c-decl.c:2123 java/decl.c:1079 ! #, c-format ! msgid "declaration of `%s' shadows a symbol from the parameter list" ! msgstr "" ! ! #: c-decl.c:2144 cp/decl.c:4236 ! msgid "a parameter" ! msgstr "" ! ! #: c-decl.c:2146 cp/decl.c:4253 ! msgid "a previous local" ! msgstr "" ! ! #. XXX shadow warnings in outer-more namespaces ! #: c-decl.c:2150 cp/decl.c:4257 ! msgid "a global declaration" ! msgstr "" ! ! #: c-decl.c:2194 #, c-format msgid "nested extern declaration of `%s'" msgstr "" ! #: c-decl.c:2216 java/decl.c:1029 #, c-format msgid "`%s' used prior to declaration" msgstr "" ! #: c-decl.c:2231 c-decl.c:2446 #, c-format msgid "`%s' was declared implicitly `extern' and later `static'" msgstr "" ! #: c-decl.c:2341 cp/decl.c:4095 msgid "type mismatch with previous external decl" msgstr "" ! #: c-decl.c:2342 #, c-format msgid "previous external decl of `%s'" msgstr "" ! #: c-decl.c:2355 msgid "type mismatch with previous implicit declaration" msgstr "" ! #: c-decl.c:2357 #, c-format msgid "previous implicit declaration of `%s'" msgstr "" ! #: c-decl.c:2374 #, c-format msgid "type of external `%s' is not global" msgstr "" ! #: c-decl.c:2425 #, c-format msgid "`%s' was previously implicitly declared to return `int'" msgstr "" ! #: c-decl.c:2450 #, c-format msgid "`%s' was declared `extern' and later `static'" msgstr "" ! #: c-decl.c:2474 #, c-format msgid "extern declaration of `%s' doesn't match global one" msgstr "" ! #: c-decl.c:2516 #, c-format msgid "`%s' locally external but globally static" msgstr "" ! #: c-decl.c:2638 #, c-format msgid "function `%s' was previously declared within a block" msgstr "" ! #: c-decl.c:2658 c-decl.c:2660 #, c-format msgid "implicit declaration of function `%s'" msgstr "" ! #: c-decl.c:2748 #, c-format msgid "label %s referenced outside of any function" msgstr "" ! #: c-decl.c:2805 #, c-format msgid "duplicate label declaration `%s'" msgstr "" ! #: c-decl.c:2808 msgid "this is a previous declaration" msgstr "" ! #: c-decl.c:3320 msgid "unnamed struct/union that defines no instances" msgstr "" ! #: c-decl.c:3339 msgid "useless keyword or type name in empty declaration" msgstr "" ! #: c-decl.c:3346 msgid "two types specified in one empty declaration" msgstr "" ! #: c-decl.c:3351 c-parse.y:725 c-parse.y:727 parse.y:742 parse.y:1827 ! #: objc-parse.y:761 objc-parse.y:763 objc-parse.y:2997 msgid "empty declaration" msgstr "" ! #: c-decl.c:3381 ! msgid "" ! "ISO C89 does not support `static' or type qualifiers in parameter array " ! "declarators" ! msgstr "" ! ! #: c-decl.c:3383 ! msgid "ISO C89 does not support `[*]' array declarators" ! msgstr "" ! ! #: c-decl.c:3386 ! msgid "GCC does not yet properly implement `[*]' array declarators" ! msgstr "" ! ! #: c-decl.c:3405 ! msgid "static or type qualifiers in abstract declarator" ! msgstr "" ! ! #: c-decl.c:3479 #, c-format msgid "`%s' is usually a function" msgstr "" ! #: c-decl.c:3493 #, c-format msgid "typedef `%s' is initialized" msgstr "" ! #: c-decl.c:3500 #, c-format msgid "function `%s' is initialized like a variable" msgstr "" #. DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE. ! #: c-decl.c:3507 #, c-format msgid "parameter `%s' is initialized" msgstr "" ! #: c-decl.c:3527 c-typeck.c:4841 msgid "variable-sized object may not be initialized" msgstr "" ! #: c-decl.c:3533 #, c-format msgid "variable `%s' has initializer but incomplete type" msgstr "" ! #: c-decl.c:3539 #, c-format msgid "elements of array `%s' have incomplete type" msgstr "" ! #: c-decl.c:3552 #, c-format msgid "declaration of `%s' has `extern' and is initialized" msgstr "" ! #: c-decl.c:3591 c-decl.c:6246 cp/decl.c:7368 cp/decl.c:13623 ! #, c-format ! msgid "inline function `%s' given attribute noinline" ! msgstr "" ! ! #: c-decl.c:3674 #, c-format msgid "initializer fails to determine size of `%s'" msgstr "" ! #: c-decl.c:3679 #, c-format msgid "array size missing in `%s'" msgstr "" ! #: c-decl.c:3695 #, c-format msgid "zero or negative size array `%s'" msgstr "" ! #: c-decl.c:3723 #, c-format msgid "storage size of `%s' isn't known" msgstr "" ! #: c-decl.c:3733 #, c-format msgid "storage size of `%s' isn't constant" msgstr "" ! #: c-decl.c:3792 #, c-format msgid "ignoring asm-specifier for non-static local variable `%s'" msgstr "" ! #: c-decl.c:3867 #, c-format ! msgid "ISO C forbids parameter `%s' shadowing typedef" msgstr "" ! #: c-decl.c:4171 cp/decl.c:10171 msgid "`long long long' is too long for GCC" msgstr "" ! #: c-decl.c:4176 msgid "ISO C89 does not support `long long'" msgstr "" ! #: c-decl.c:4181 cp/decl.c:10176 #, c-format msgid "duplicate `%s'" msgstr "" ! #: c-decl.c:4187 cp/decl.c:10200 #, c-format msgid "two or more data types in declaration of `%s'" msgstr "" ! #: c-decl.c:4207 cp/decl.c:10205 #, c-format msgid "`%s' fails to be a typedef or built in type" msgstr "" ! #: c-decl.c:4246 #, c-format msgid "type defaults to `int' in declaration of `%s'" msgstr "" ! #: c-decl.c:4275 #, c-format msgid "both long and short specified for `%s'" msgstr "" ! #: c-decl.c:4279 cp/decl.c:10320 #, c-format msgid "long or short specified with char for `%s'" msgstr "" ! #: c-decl.c:4286 cp/decl.c:10324 #, c-format msgid "long or short specified with floating type for `%s'" msgstr "" ! #: c-decl.c:4289 msgid "the only valid combination is `long double'" msgstr "" ! #: c-decl.c:4295 #, c-format msgid "both signed and unsigned specified for `%s'" msgstr "" ! #: c-decl.c:4297 cp/decl.c:10313 #, c-format msgid "long, short, signed or unsigned invalid for `%s'" msgstr "" ! #: c-decl.c:4303 cp/decl.c:10333 #, c-format msgid "long, short, signed or unsigned used invalidly for `%s'" msgstr "" ! #: c-decl.c:4322 cp/decl.c:10354 #, c-format msgid "complex invalid for `%s'" msgstr "" ! #: c-decl.c:4367 msgid "ISO C89 does not support complex types" msgstr "" ! #: c-decl.c:4379 msgid "ISO C does not support plain `complex' meaning `double complex'" msgstr "" ! #: c-decl.c:4385 c-decl.c:4397 msgid "ISO C does not support complex integer types" msgstr "" ! #: c-decl.c:4412 c-decl.c:4851 cp/decl.c:10969 msgid "duplicate `const'" msgstr "" ! #: c-decl.c:4414 c-decl.c:4855 cp/decl.c:10973 msgid "duplicate `restrict'" msgstr "" ! #: c-decl.c:4416 c-decl.c:4853 cp/decl.c:10971 msgid "duplicate `volatile'" msgstr "" ! #: c-decl.c:4438 cp/decl.c:10509 #, c-format msgid "multiple storage classes in declaration of `%s'" msgstr "" ! #: c-decl.c:4447 msgid "function definition declared `auto'" msgstr "" ! #: c-decl.c:4449 msgid "function definition declared `register'" msgstr "" ! #: c-decl.c:4451 msgid "function definition declared `typedef'" msgstr "" ! #: c-decl.c:4464 #, c-format msgid "storage class specified for structure field `%s'" msgstr "" ! #: c-decl.c:4468 cp/decl.c:10556 #, c-format msgid "storage class specified for parameter `%s'" msgstr "" ! #: c-decl.c:4471 cp/decl.c:10558 msgid "storage class specified for typename" msgstr "" ! #: c-decl.c:4483 cp/decl.c:10572 #, c-format msgid "`%s' initialized and declared `extern'" msgstr "" ! #: c-decl.c:4485 cp/decl.c:10575 #, c-format msgid "`%s' has both `extern' and initializer" msgstr "" ! #: c-decl.c:4489 cp/decl.c:10579 #, c-format msgid "nested function `%s' declared `extern'" msgstr "" ! #: c-decl.c:4492 cp/decl.c:10583 #, c-format msgid "top-level declaration of `%s' specifies `auto'" msgstr "" ! #. Only the innermost declarator (making a parameter be of ! #. array type which is converted to pointer type) ! #. may have static or type qualifiers. ! #: c-decl.c:4527 c-decl.c:4716 ! msgid "static or type qualifiers in non-parameter array declarator" ! msgstr "" ! ! #: c-decl.c:4571 #, c-format msgid "declaration of `%s' as array of voids" msgstr "" ! #: c-decl.c:4577 #, c-format msgid "declaration of `%s' as array of functions" msgstr "" ! #: c-decl.c:4598 #, c-format msgid "size of array `%s' has non-integer type" msgstr "" ! #: c-decl.c:4603 #, c-format msgid "ISO C forbids zero-size array `%s'" msgstr "" ! #: c-decl.c:4610 #, c-format msgid "size of array `%s' is negative" msgstr "" ! #: c-decl.c:4623 #, c-format msgid "ISO C89 forbids array `%s' whose size can't be evaluated" msgstr "" ! #: c-decl.c:4626 #, c-format msgid "ISO C89 forbids variable-size array `%s'" msgstr "" ! #: c-decl.c:4656 c-decl.c:4877 cp/decl.c:11179 #, c-format msgid "size of array `%s' is too large" msgstr "" ! #: c-decl.c:4673 msgid "ISO C89 does not support flexible array members" msgstr "" ! #: c-decl.c:4683 msgid "array type has incomplete element type" msgstr "" ! #: c-decl.c:4690 c-decl.c:4927 ! msgid "ISO C forbids const or volatile function types" msgstr "" ! #: c-decl.c:4736 cp/decl.c:10720 #, c-format msgid "`%s' declared as function returning a function" msgstr "" ! #: c-decl.c:4741 cp/decl.c:10725 #, c-format msgid "`%s' declared as function returning an array" msgstr "" ! #: c-decl.c:4776 msgid "ISO C forbids qualified void function return type" msgstr "" ! #: c-decl.c:4780 msgid "type qualifiers ignored on function return type" msgstr "" ! #: c-decl.c:4809 c-decl.c:4892 c-decl.c:5016 c-decl.c:5110 msgid "ISO C forbids qualified function types" msgstr "" ! #: c-decl.c:4849 cp/decl.c:10965 msgid "invalid type modifier within pointer declarator" msgstr "" ! #: c-decl.c:4947 cp/decl.c:11457 #, c-format msgid "variable or field `%s' declared void" msgstr "" ! #: c-decl.c:4980 ! msgid "attributes in parameter array declarator ignored" ! msgstr "" ! ! #: c-decl.c:5005 ! msgid "invalid type modifier within array declarator" ! msgstr "" ! ! #: c-decl.c:5054 #, c-format msgid "field `%s' declared as a function" msgstr "" ! #: c-decl.c:5060 #, c-format msgid "field `%s' has incomplete type" msgstr "" ! #: c-decl.c:5092 c-decl.c:5094 c-decl.c:5101 #, c-format msgid "invalid storage class for function `%s'" msgstr "" ! #: c-decl.c:5116 msgid "`noreturn' function returns non-void value" msgstr "" ! #: c-decl.c:5131 msgid "cannot inline function `main'" msgstr "" ! #: c-decl.c:5184 #, c-format msgid "variable `%s' declared `inline'" msgstr "" ! #: c-decl.c:5257 c-decl.c:6298 msgid "function declaration isn't a prototype" msgstr "" ! #: c-decl.c:5263 msgid "parameter names (without types) in function declaration" msgstr "" ! #: c-decl.c:5295 c-decl.c:6689 #, c-format msgid "parameter `%s' has incomplete type" msgstr "" ! #: c-decl.c:5298 msgid "parameter has incomplete type" msgstr "" ! #: c-decl.c:5319 #, c-format msgid "parameter `%s' points to incomplete type" msgstr "" ! #: c-decl.c:5322 msgid "parameter points to incomplete type" msgstr "" ! #: c-decl.c:5387 #, c-format msgid "parameter `%s' has just a forward declaration" msgstr "" ! #: c-decl.c:5428 msgid "`void' in parameter list must be the entire list" msgstr "" ! #: c-decl.c:5459 #, c-format ! msgid "`struct %s' declared inside parameter list" msgstr "" ! #: c-decl.c:5462 ! #, c-format ! msgid "`union %s' declared inside parameter list" ! msgstr "" ! ! #: c-decl.c:5465 ! #, c-format ! msgid "`enum %s' declared inside parameter list" ! msgstr "" ! ! #: c-decl.c:5472 msgid "anonymous struct declared inside parameter list" msgstr "" ! #: c-decl.c:5474 msgid "anonymous union declared inside parameter list" msgstr "" ! #: c-decl.c:5476 msgid "anonymous enum declared inside parameter list" msgstr "" ! #: c-decl.c:5480 msgid "" "its scope is only this definition or declaration, which is probably not what " ! "you want" msgstr "" ! #: c-decl.c:5559 #, c-format ! msgid "redefinition of `union %s'" msgstr "" ! #: c-decl.c:5562 ! #, c-format ! msgid "redefinition of `struct %s'" ! msgstr "" ! ! #: c-decl.c:5601 ! msgid "unnamed fields of type other than struct or union are not allowed" ! msgstr "" ! ! #: c-decl.c:5642 c-decl.c:5645 #, c-format msgid "%s defined inside parms" msgstr "" ! #: c-decl.c:5643 c-decl.c:5646 c-decl.c:5657 msgid "union" msgstr "" ! #: c-decl.c:5643 c-decl.c:5646 msgid "structure" msgstr "" ! #: c-decl.c:5656 #, c-format msgid "%s has no %s" msgstr "" ! #: c-decl.c:5657 msgid "struct" msgstr "" ! #: c-decl.c:5658 msgid "named members" msgstr "" ! #: c-decl.c:5658 msgid "members" msgstr "" ! #: c-decl.c:5697 #, c-format msgid "nested redefinition of `%s'" msgstr "" ! #: c-decl.c:5710 #, c-format msgid "bit-field `%s' width not an integer constant" msgstr "" ! #: c-decl.c:5721 #, c-format msgid "bit-field `%s' has invalid type" msgstr "" ! #: c-decl.c:5733 #, c-format msgid "bit-field `%s' type invalid in ISO C" msgstr "" ! #: c-decl.c:5744 #, c-format msgid "negative width in bit-field `%s'" msgstr "" ! #: c-decl.c:5746 #, c-format msgid "width of `%s' exceeds its type" msgstr "" ! #: c-decl.c:5748 #, c-format msgid "zero width for bit-field `%s'" msgstr "" ! #: c-decl.c:5762 #, c-format msgid "`%s' is narrower than values of its type" msgstr "" ! #: c-decl.c:5808 msgid "flexible array member in union" msgstr "" ! #: c-decl.c:5810 msgid "flexible array member not at end of struct" msgstr "" ! #: c-decl.c:5812 msgid "flexible array member in otherwise empty struct" msgstr "" ! #: c-decl.c:5837 #, c-format msgid "duplicate member `%s'" msgstr "" ! #: c-decl.c:5881 msgid "union cannot be made transparent" msgstr "" #. This enum is a named one that has been declared already. ! #: c-decl.c:5975 #, c-format msgid "redeclaration of `enum %s'" msgstr "" ! #: c-decl.c:6009 msgid "enum defined inside parms" msgstr "" ! #: c-decl.c:6042 msgid "enumeration values exceed range of largest integer" msgstr "" ! #: c-decl.c:6151 #, c-format msgid "enumerator value for `%s' not integer constant" msgstr "" ! #: c-decl.c:6164 msgid "overflow in enumeration values" msgstr "" ! #: c-decl.c:6169 msgid "ISO C restricts enumerator values to range of `int'" msgstr "" ! #: c-decl.c:6252 msgid "return type is an incomplete type" msgstr "" ! #: c-decl.c:6260 msgid "return type defaults to `int'" msgstr "" ! #: c-decl.c:6307 #, c-format msgid "no previous prototype for `%s'" msgstr "" ! #: c-decl.c:6314 #, c-format msgid "`%s' was used with no prototype before its definition" msgstr "" ! #: c-decl.c:6320 #, c-format msgid "no previous declaration for `%s'" msgstr "" ! #: c-decl.c:6327 #, c-format msgid "`%s' was used with no declaration before its definition" msgstr "" ! #: c-decl.c:6351 c-decl.c:6936 #, c-format msgid "return type of `%s' is not `int'" msgstr "" ! #: c-decl.c:6367 #, c-format msgid "first argument of `%s' should be `int'" msgstr "" ! #: c-decl.c:6376 #, c-format msgid "second argument of `%s' should be `char **'" msgstr "" ! #: c-decl.c:6385 #, c-format msgid "third argument of `%s' should probably be `char **'" msgstr "" ! #: c-decl.c:6394 #, c-format msgid "`%s' takes only zero or two arguments" msgstr "" ! #: c-decl.c:6397 #, c-format msgid "`%s' is normally a non-static function" msgstr "" ! #: c-decl.c:6507 msgid "parm types given both in parmlist and separately" msgstr "" ! #: c-decl.c:6528 msgid "parameter name omitted" msgstr "" ! #: c-decl.c:6532 c-decl.c:6634 #, c-format msgid "parameter `%s' declared void" msgstr "" ! #: c-decl.c:6608 msgid "parameter name missing from parameter list" msgstr "" ! #: c-decl.c:6627 #, c-format msgid "multiple parameters named `%s'" msgstr "" ! #: c-decl.c:6658 c-decl.c:6660 #, c-format msgid "type of `%s' defaults to `int'" msgstr "" ! #: c-decl.c:6696 #, c-format msgid "declaration for parameter `%s' but no such parameter" msgstr "" ! #: c-decl.c:6744 msgid "number of arguments doesn't match prototype" msgstr "" ! #: c-decl.c:6774 #, c-format msgid "promoted argument `%s' doesn't match prototype" msgstr "" ! #: c-decl.c:6788 #, c-format msgid "argument `%s' doesn't match prototype" msgstr "" ! #: c-decl.c:6968 cp/decl.c:14327 ! msgid "no return statement in function returning non-void" msgstr "" ! #: c-decl.c:7124 msgid "this function may return with or without a value" msgstr "" ! #: c-decl.c:7144 #, c-format msgid "size of return value of `%s' is %u bytes" msgstr "" ! #: c-decl.c:7148 #, c-format msgid "size of return value of `%s' is larger than %d bytes" msgstr "" *************** msgstr "" *** 1295,1649 **** #. If we get here, declarations have been used in a for loop without #. the C99 for loop scope. This doesn't make much sense, so don't #. allow it. ! #: c-decl.c:6872 msgid "`for' loop initial declaration used outside C99 mode" msgstr "" ! #: c-decl.c:6892 #, c-format ! msgid "`%s %s' declared in `for' loop initial declaration" msgstr "" ! #: c-decl.c:6901 #, c-format ! msgid "declaration of non-variable `%s' in `for' loop initial declaration" msgstr "" ! #: c-decl.c:6903 #, c-format ! msgid "declaration of static variable `%s' in `for' loop initial declaration" msgstr "" ! #: c-decl.c:6905 #, c-format ! msgid "declaration of `extern' variable `%s' in `for' loop initial declaration" msgstr "" ! #: c-dump.c:826 #, c-format ! msgid "could not open dump file `%s'" msgstr "" ! #: c-dump.c:871 #, c-format ! msgid "ignoring `%s' at end of `-f%s'" msgstr "" ! #: c-format.c:106 c-format.c:219 ! #, c-format ! msgid "argument format specified for non-function `%s'" msgstr "" ! #: c-format.c:112 ! msgid "unrecognized format specifier" msgstr "" ! #: c-format.c:123 ! #, c-format ! msgid "`%s' is an unrecognized format function type" msgstr "" ! #: c-format.c:145 c-format.c:233 msgid "format string has invalid operand number" msgstr "" ! #: c-format.c:153 ! msgid "format string arg follows the args to be formatted" ! msgstr "" ! ! #: c-format.c:172 c-format.c:254 ! msgid "format string arg not a string type" msgstr "" ! #: c-format.c:185 ! msgid "args to be formatted is not '...'" msgstr "" ! #: c-format.c:193 ! msgid "strftime formats cannot format arguments" msgstr "" ! #: c-format.c:263 ! msgid "function does not return string type" msgstr "" ! #: c-format.c:757 msgid "` ' flag" msgstr "" ! #: c-format.c:757 msgid "the ` ' printf flag" msgstr "" ! #: c-format.c:758 c-format.c:829 msgid "`+' flag" msgstr "" ! #: c-format.c:758 msgid "the `+' printf flag" msgstr "" ! #: c-format.c:759 c-format.c:805 msgid "`#' flag" msgstr "" ! #: c-format.c:759 msgid "the `#' printf flag" msgstr "" ! #: c-format.c:760 c-format.c:803 msgid "`0' flag" msgstr "" ! #: c-format.c:760 msgid "the `0' printf flag" msgstr "" ! #: c-format.c:761 c-format.c:802 c-format.c:832 msgid "`-' flag" msgstr "" ! #: c-format.c:761 msgid "the `-' printf flag" msgstr "" ! #: c-format.c:762 c-format.c:786 msgid "`'' flag" msgstr "" ! #: c-format.c:762 msgid "the `'' printf flag" msgstr "" ! #: c-format.c:763 c-format.c:787 msgid "`I' flag" msgstr "" ! #: c-format.c:763 msgid "the `I' printf flag" msgstr "" ! #: c-format.c:764 c-format.c:784 c-format.c:806 c-format.c:833 c-format.c:1846 msgid "field width" msgstr "" ! #: c-format.c:764 msgid "field width in printf format" msgstr "" ! #: c-format.c:765 msgid "precision" msgstr "" ! #: c-format.c:765 msgid "precision in printf format" msgstr "" ! #: c-format.c:766 c-format.c:785 c-format.c:836 msgid "length modifier" msgstr "" ! #: c-format.c:766 msgid "length modifier in printf format" msgstr "" ! #: c-format.c:782 msgid "assignment suppression" msgstr "" ! #: c-format.c:783 msgid "`a' flag" msgstr "" ! #: c-format.c:783 msgid "the `a' scanf flag" msgstr "" ! #: c-format.c:784 msgid "field width in scanf format" msgstr "" ! #: c-format.c:785 msgid "length modifier in scanf format" msgstr "" ! #: c-format.c:786 msgid "the `'' scanf flag" msgstr "" ! #: c-format.c:787 msgid "the `I' scanf flag" msgstr "" ! #: c-format.c:801 msgid "`_' flag" msgstr "" ! #: c-format.c:801 msgid "the `_' strftime flag" msgstr "" ! #: c-format.c:802 msgid "the `-' strftime flag" msgstr "" ! #: c-format.c:803 msgid "the `0' strftime flag" msgstr "" ! #: c-format.c:804 c-format.c:828 msgid "`^' flag" msgstr "" ! #: c-format.c:804 msgid "the `^' strftime flag" msgstr "" ! #: c-format.c:805 msgid "the `#' strftime flag" msgstr "" ! #: c-format.c:806 msgid "field width in strftime format" msgstr "" ! #: c-format.c:807 msgid "`E' modifier" msgstr "" ! #: c-format.c:807 msgid "the `E' strftime modifier" msgstr "" ! #: c-format.c:808 msgid "`O' modifier" msgstr "" ! #: c-format.c:808 msgid "the `O' strftime modifier" msgstr "" ! #: c-format.c:809 msgid "the `O' modifier" msgstr "" ! #: c-format.c:827 msgid "fill character" msgstr "" ! #: c-format.c:827 msgid "fill character in strfmon format" msgstr "" ! #: c-format.c:828 msgid "the `^' strfmon flag" msgstr "" ! #: c-format.c:829 msgid "the `+' strfmon flag" msgstr "" ! #: c-format.c:830 msgid "`(' flag" msgstr "" ! #: c-format.c:830 msgid "the `(' strfmon flag" msgstr "" ! #: c-format.c:831 msgid "`!' flag" msgstr "" ! #: c-format.c:831 msgid "the `!' strfmon flag" msgstr "" ! #: c-format.c:832 msgid "the `-' strfmon flag" msgstr "" ! #: c-format.c:833 msgid "field width in strfmon format" msgstr "" ! #: c-format.c:834 msgid "left precision" msgstr "" ! #: c-format.c:834 msgid "left precision in strfmon format" msgstr "" ! #: c-format.c:835 msgid "right precision" msgstr "" ! #: c-format.c:835 msgid "right precision in strfmon format" msgstr "" ! #: c-format.c:836 msgid "length modifier in strfmon format" msgstr "" ! #: c-format.c:1135 #, c-format msgid "function might be possible candidate for `%s' format attribute" msgstr "" ! #: c-format.c:1248 c-format.c:1269 c-format.c:2256 msgid "missing $ operand number in format" msgstr "" ! #: c-format.c:1279 #, c-format msgid "%s does not support %%n$ operand number formats" msgstr "" ! #: c-format.c:1286 msgid "operand number out of range in format" msgstr "" ! #: c-format.c:1307 #, c-format msgid "format argument %d used more than once in %s format" msgstr "" ! #: c-format.c:1349 #, c-format msgid "format argument %d unused before used argument %d in $-style format" msgstr "" ! #: c-format.c:1443 msgid "format not a string literal, format string not checked" msgstr "" ! #: c-format.c:1457 msgid "format not a string literal and no format arguments" msgstr "" ! #: c-format.c:1459 msgid "format not a string literal, argument types not checked" msgstr "" ! #: c-format.c:1472 msgid "too many arguments for format" msgstr "" ! #: c-format.c:1475 msgid "unused arguments in $-style format" msgstr "" ! #: c-format.c:1478 msgid "zero-length format string" msgstr "" ! #: c-format.c:1481 msgid "format is a wide character string" msgstr "" ! #: c-format.c:1484 msgid "unterminated format string" msgstr "" --- 1453,1806 ---- #. If we get here, declarations have been used in a for loop without #. the C99 for loop scope. This doesn't make much sense, so don't #. allow it. ! #: c-decl.c:7203 msgid "`for' loop initial declaration used outside C99 mode" msgstr "" ! #: c-decl.c:7227 #, c-format ! msgid "`struct %s' declared in `for' loop initial declaration" msgstr "" ! #: c-decl.c:7230 #, c-format ! msgid "`union %s' declared in `for' loop initial declaration" msgstr "" ! #: c-decl.c:7233 #, c-format ! msgid "`enum %s' declared in `for' loop initial declaration" msgstr "" ! #: c-decl.c:7241 #, c-format ! msgid "declaration of non-variable `%s' in `for' loop initial declaration" msgstr "" ! #: c-decl.c:7243 #, c-format ! msgid "declaration of static variable `%s' in `for' loop initial declaration" msgstr "" ! #: c-decl.c:7245 #, c-format ! msgid "declaration of `extern' variable `%s' in `for' loop initial declaration" msgstr "" ! #: c-format.c:128 c-format.c:210 ! msgid "format string arg not a string type" msgstr "" ! #: c-format.c:143 ! msgid "args to be formatted is not '...'" msgstr "" ! #: c-format.c:152 ! msgid "strftime formats cannot format arguments" msgstr "" ! #: c-format.c:187 c-format.c:289 msgid "format string has invalid operand number" msgstr "" ! #: c-format.c:221 ! msgid "function does not return string type" msgstr "" ! #: c-format.c:252 ! msgid "unrecognized format specifier" msgstr "" ! #: c-format.c:265 ! #, c-format ! msgid "`%s' is an unrecognized format function type" msgstr "" ! #: c-format.c:299 ! msgid "format string arg follows the args to be formatted" msgstr "" ! #: c-format.c:620 msgid "` ' flag" msgstr "" ! #: c-format.c:620 msgid "the ` ' printf flag" msgstr "" ! #: c-format.c:621 c-format.c:692 msgid "`+' flag" msgstr "" ! #: c-format.c:621 msgid "the `+' printf flag" msgstr "" ! #: c-format.c:622 c-format.c:668 msgid "`#' flag" msgstr "" ! #: c-format.c:622 msgid "the `#' printf flag" msgstr "" ! #: c-format.c:623 c-format.c:666 msgid "`0' flag" msgstr "" ! #: c-format.c:623 msgid "the `0' printf flag" msgstr "" ! #: c-format.c:624 c-format.c:665 c-format.c:695 msgid "`-' flag" msgstr "" ! #: c-format.c:624 msgid "the `-' printf flag" msgstr "" ! #: c-format.c:625 c-format.c:649 msgid "`'' flag" msgstr "" ! #: c-format.c:625 msgid "the `'' printf flag" msgstr "" ! #: c-format.c:626 c-format.c:650 msgid "`I' flag" msgstr "" ! #: c-format.c:626 msgid "the `I' printf flag" msgstr "" ! #: c-format.c:627 c-format.c:647 c-format.c:669 c-format.c:696 c-format.c:1790 msgid "field width" msgstr "" ! #: c-format.c:627 msgid "field width in printf format" msgstr "" ! #: c-format.c:628 msgid "precision" msgstr "" ! #: c-format.c:628 msgid "precision in printf format" msgstr "" ! #: c-format.c:629 c-format.c:648 c-format.c:699 msgid "length modifier" msgstr "" ! #: c-format.c:629 msgid "length modifier in printf format" msgstr "" ! #: c-format.c:645 msgid "assignment suppression" msgstr "" ! #: c-format.c:645 ! msgid "the assignment suppression scanf feature" ! msgstr "" ! ! #: c-format.c:646 msgid "`a' flag" msgstr "" ! #: c-format.c:646 msgid "the `a' scanf flag" msgstr "" ! #: c-format.c:647 msgid "field width in scanf format" msgstr "" ! #: c-format.c:648 msgid "length modifier in scanf format" msgstr "" ! #: c-format.c:649 msgid "the `'' scanf flag" msgstr "" ! #: c-format.c:650 msgid "the `I' scanf flag" msgstr "" ! #: c-format.c:664 msgid "`_' flag" msgstr "" ! #: c-format.c:664 msgid "the `_' strftime flag" msgstr "" ! #: c-format.c:665 msgid "the `-' strftime flag" msgstr "" ! #: c-format.c:666 msgid "the `0' strftime flag" msgstr "" ! #: c-format.c:667 c-format.c:691 msgid "`^' flag" msgstr "" ! #: c-format.c:667 msgid "the `^' strftime flag" msgstr "" ! #: c-format.c:668 msgid "the `#' strftime flag" msgstr "" ! #: c-format.c:669 msgid "field width in strftime format" msgstr "" ! #: c-format.c:670 msgid "`E' modifier" msgstr "" ! #: c-format.c:670 msgid "the `E' strftime modifier" msgstr "" ! #: c-format.c:671 msgid "`O' modifier" msgstr "" ! #: c-format.c:671 msgid "the `O' strftime modifier" msgstr "" ! #: c-format.c:672 msgid "the `O' modifier" msgstr "" ! #: c-format.c:690 msgid "fill character" msgstr "" ! #: c-format.c:690 msgid "fill character in strfmon format" msgstr "" ! #: c-format.c:691 msgid "the `^' strfmon flag" msgstr "" ! #: c-format.c:692 msgid "the `+' strfmon flag" msgstr "" ! #: c-format.c:693 msgid "`(' flag" msgstr "" ! #: c-format.c:693 msgid "the `(' strfmon flag" msgstr "" ! #: c-format.c:694 msgid "`!' flag" msgstr "" ! #: c-format.c:694 msgid "the `!' strfmon flag" msgstr "" ! #: c-format.c:695 msgid "the `-' strfmon flag" msgstr "" ! #: c-format.c:696 msgid "field width in strfmon format" msgstr "" ! #: c-format.c:697 msgid "left precision" msgstr "" ! #: c-format.c:697 msgid "left precision in strfmon format" msgstr "" ! #: c-format.c:698 msgid "right precision" msgstr "" ! #: c-format.c:698 msgid "right precision in strfmon format" msgstr "" ! #: c-format.c:699 msgid "length modifier in strfmon format" msgstr "" ! #: c-format.c:998 #, c-format msgid "function might be possible candidate for `%s' format attribute" msgstr "" ! #: c-format.c:1122 c-format.c:1143 c-format.c:2200 msgid "missing $ operand number in format" msgstr "" ! #: c-format.c:1153 #, c-format msgid "%s does not support %%n$ operand number formats" msgstr "" ! #: c-format.c:1160 msgid "operand number out of range in format" msgstr "" ! #: c-format.c:1183 #, c-format msgid "format argument %d used more than once in %s format" msgstr "" ! #: c-format.c:1233 #, c-format msgid "format argument %d unused before used argument %d in $-style format" msgstr "" ! #: c-format.c:1330 msgid "format not a string literal, format string not checked" msgstr "" ! #: c-format.c:1344 msgid "format not a string literal and no format arguments" msgstr "" ! #: c-format.c:1346 msgid "format not a string literal, argument types not checked" msgstr "" ! #: c-format.c:1359 msgid "too many arguments for format" msgstr "" ! #: c-format.c:1362 msgid "unused arguments in $-style format" msgstr "" ! #: c-format.c:1365 msgid "zero-length format string" msgstr "" ! #: c-format.c:1368 msgid "format is a wide character string" msgstr "" ! #: c-format.c:1371 msgid "unterminated format string" msgstr "" *************** msgstr "" *** 1653,2187 **** #. specially if info == NULL and add a res->number_null entry for #. that case, or maybe add a function pointer to be called at #. the end instead of hardcoding check_format_info_main. ! #: c-format.c:1572 msgid "null format string" msgstr "" ! #: c-format.c:1725 msgid "embedded `\\0' in format" msgstr "" ! #: c-format.c:1740 #, c-format msgid "spurious trailing `%%' in format" msgstr "" ! #: c-format.c:1779 c-format.c:2016 #, c-format msgid "repeated %s in format" msgstr "" ! #: c-format.c:1792 msgid "missing fill character at end of strfmon format" msgstr "" ! #: c-format.c:1812 c-format.c:1930 c-format.c:2210 c-format.c:2263 msgid "too few arguments for format" msgstr "" ! #: c-format.c:1872 #, c-format msgid "zero width in %s format" msgstr "" ! #: c-format.c:1891 #, c-format msgid "empty left precision in %s format" msgstr "" ! #: c-format.c:1945 msgid "field precision" msgstr "" ! #: c-format.c:1960 #, c-format msgid "empty precision in %s format" msgstr "" ! #: c-format.c:2000 #, c-format msgid "%s does not support the `%s' %s length modifier" msgstr "" ! #: c-format.c:2050 msgid "conversion lacks type at end of format" msgstr "" ! #: c-format.c:2061 #, c-format msgid "unknown conversion type character `%c' in format" msgstr "" ! #: c-format.c:2064 #, c-format msgid "unknown conversion type character 0x%x in format" msgstr "" ! #: c-format.c:2071 #, c-format msgid "%s does not support the `%%%c' %s format" msgstr "" ! #: c-format.c:2087 #, c-format msgid "%s used with `%%%c' %s format" msgstr "" ! #: c-format.c:2096 #, c-format msgid "%s does not support %s" msgstr "" ! #: c-format.c:2105 #, c-format msgid "%s does not support %s with the `%%%c' %s format" msgstr "" ! #: c-format.c:2138 #, c-format msgid "%s ignored with %s and `%%%c' %s format" msgstr "" ! #: c-format.c:2142 #, c-format msgid "%s ignored with %s in %s format" msgstr "" ! #: c-format.c:2148 #, c-format msgid "use of %s and %s together with `%%%c' %s format" msgstr "" ! #: c-format.c:2152 #, c-format msgid "use of %s and %s together in %s format" msgstr "" ! #: c-format.c:2171 #, c-format msgid "`%%%c' yields only last 2 digits of year in some locales" msgstr "" ! #: c-format.c:2174 #, c-format msgid "`%%%c' yields only last 2 digits of year" msgstr "" #. The end of the format string was reached. ! #: c-format.c:2190 #, c-format msgid "no closing `]' for `%%[' format" msgstr "" ! #: c-format.c:2203 #, c-format msgid "use of `%s' length modifier with `%c' type character" msgstr "" ! #: c-format.c:2224 #, c-format msgid "%s does not support the `%%%s%c' %s format" msgstr "" ! #: c-format.c:2239 msgid "operand number specified with suppressed assignment" msgstr "" ! #: c-format.c:2241 msgid "operand number specified for format taking no argument" msgstr "" ! #: c-format.c:2360 #, c-format msgid "writing through null pointer (arg %d)" msgstr "" ! #: c-format.c:2369 #, c-format msgid "reading through null pointer (arg %d)" msgstr "" ! #: c-format.c:2389 #, c-format msgid "writing into constant object (arg %d)" msgstr "" ! #: c-format.c:2399 #, c-format msgid "extra type qualifiers in format argument (arg %d)" msgstr "" ! #: c-format.c:2406 #, c-format msgid "format argument is not a pointer (arg %d)" msgstr "" ! #: c-format.c:2408 #, c-format msgid "format argument is not a pointer to a pointer (arg %d)" msgstr "" ! #: c-format.c:2502 #, c-format msgid "%s is not type %s (arg %d)" msgstr "" ! #: c-format.c:2505 #, c-format msgid "%s format, %s arg (arg %d)" msgstr "" ! #: c-lex.c:279 msgid "badly nested C headers from preprocessor" msgstr "" ! #: c-lex.c:297 ! msgid "leaving more files than we entered" ! msgstr "" ! ! #: c-lex.c:329 #, c-format msgid "ignoring #pragma %s %s" msgstr "" ! #: c-lex.c:331 #, c-format msgid "ignoring #pragma %s" msgstr "" ! #: c-lex.c:381 ! msgid "incomplete universal-character-name" msgstr "" ! #: c-lex.c:388 #, c-format ! msgid "non hex digit '%c' in universal-character-name" msgstr "" ! #: c-lex.c:403 ! msgid "universal-character-name on EBCDIC target" msgstr "" ! #: c-lex.c:416 #, c-format ! msgid "universal-character-name used for '%c'" ! msgstr "" ! ! #: c-lex.c:419 ! msgid "invalid universal-character-name" msgstr "" ! #: c-lex.c:453 f/lex.c:601 ! msgid "the meaning of `\\x' varies with -traditional" msgstr "" ! #: c-lex.c:489 cppexp.c:579 f/lex.c:636 ! msgid "\\x used with no following hex digits" msgstr "" ! #: c-lex.c:502 f/lex.c:646 ! msgid "hex escape out of range" msgstr "" ! #: c-lex.c:540 ! msgid "the meaning of '\\a' varies with -traditional" msgstr "" ! #: c-lex.c:550 ! #, c-format ! msgid "the meaning of '\\%c' varies with -traditional" msgstr "" ! #: c-lex.c:556 cppexp.c:527 ! #, c-format ! msgid "non-ISO-standard escape sequence, '\\%c'" msgstr "" ! #: c-lex.c:563 c-lex.c:569 ! #, c-format ! msgid "unknown escape sequence '\\%c'" msgstr "" ! #: c-lex.c:571 ! #, c-format ! msgid "unknown escape sequence: '\\' followed by char 0x%x" msgstr "" ! #: c-lex.c:601 ! #, c-format ! msgid "universal-character-name '\\U%08x' not valid in identifier" msgstr "" ! #: c-lex.c:847 ! #, c-format ! msgid "universal-character-name '\\u%04x' not valid in identifier" msgstr "" ! #: c-lex.c:937 ! msgid "both 'f' and 'l' suffixes on floating constant" msgstr "" ! #: c-lex.c:964 ! #, c-format ! msgid "floating point number exceeds range of '%s'" msgstr "" ! #: c-lex.c:994 ! #, c-format ! msgid "stray '%c' in program" msgstr "" ! #: c-lex.c:996 ! #, c-format ! msgid "stray '\\%o' in program" msgstr "" ! #: c-lex.c:1193 ! msgid "floating constant may not be in radix 16" msgstr "" ! #: c-lex.c:1230 ! msgid "traditional C rejects the 'f' suffix" msgstr "" ! #: c-lex.c:1239 ! msgid "traditional C rejects the 'l' suffix" msgstr "" ! #: c-lex.c:1249 c-lex.c:1342 ! msgid "ISO C forbids imaginary numeric constants" msgstr "" ! #: c-lex.c:1283 msgid "floating point number exceeds range of 'double'" msgstr "" ! #: c-lex.c:1312 msgid "two 'u' suffixes on integer constant" msgstr "" ! #: c-lex.c:1314 msgid "traditional C rejects the 'u' suffix" msgstr "" ! #: c-lex.c:1325 msgid "three 'l' suffixes on integer constant" msgstr "" ! #: c-lex.c:1327 msgid "'lul' is not a valid integer suffix" msgstr "" ! #: c-lex.c:1329 msgid "'Ll' and 'lL' are not valid integer suffixes" msgstr "" ! #: c-lex.c:1332 msgid "ISO C89 forbids long long integer constants" msgstr "" ! #: c-lex.c:1340 msgid "more than one 'i' or 'j' suffix on integer constant" msgstr "" ! #: c-lex.c:1355 #, c-format msgid "" "integer constant is too large for this configuration of the compiler - " "truncated to %d bits" msgstr "" ! #: c-lex.c:1445 msgid "width of integer constant changes with -traditional" msgstr "" ! #: c-lex.c:1447 msgid "integer constant is unsigned in ISO C, signed with -traditional" msgstr "" ! #: c-lex.c:1449 msgid "width of integer constant may change on other systems with -traditional" msgstr "" ! #: c-lex.c:1459 #, c-format msgid "integer constant larger than the maximum value of %s" msgstr "" ! #: c-lex.c:1468 ! msgid "decimal constant is so large that it is unsigned" msgstr "" ! #: c-lex.c:1497 ! msgid "integer constant is larger than the maximum value for its type" msgstr "" ! #: c-lex.c:1501 ! #, c-format ! msgid "missing white space after number '%.*s'" msgstr "" ! #: c-lex.c:1537 c-lex.c:1641 ! msgid "Ignoring invalid multibyte character" msgstr "" ! #: c-lex.c:1555 c-lex.c:1660 cppexp.c:275 ! msgid "escape sequence out of range for character" msgstr "" ! #: c-lex.c:1679 ! msgid "empty character constant" msgstr "" ! #: c-lex.c:1683 ! msgid "character constant too long" msgstr "" ! #: c-lex.c:1686 cppexp.c:293 ! msgid "multi-character character constant" msgstr "" #. Like YYERROR but do call yyerror. ! #: c-parse.y:61 cp/parse.y:55 objc/objc-parse.y:62 msgid "syntax error" msgstr "" ! #: c-parse.y:247 objc/objc-parse.y:275 msgid "ISO C forbids an empty source file" msgstr "" ! #: c-parse.y:279 c-parse.y:1824 objc/objc-parse.y:308 objc/objc-parse.y:1888 msgid "argument of `asm' is not a constant string" msgstr "" ! #: c-parse.y:287 objc/objc-parse.y:316 msgid "ISO C forbids data definition with no type or storage class" msgstr "" ! #: c-parse.y:289 objc/objc-parse.y:318 msgid "data definition has no type or storage class" msgstr "" ! #: c-parse.y:310 objc/objc-parse.y:339 msgid "ISO C does not allow extra `;' outside of a function" msgstr "" ! #: c-parse.y:382 cppexp.c:900 msgid "traditional C rejects the unary plus operator" msgstr "" ! #: c-parse.y:426 objc/objc-parse.y:455 ! msgid "ISO C forbids `&&'" ! msgstr "" ! ! #: c-parse.y:455 objc/objc-parse.y:484 msgid "`sizeof' applied to a bit-field" msgstr "" ! #: c-parse.y:543 objc/objc-parse.y:572 msgid "ISO C forbids omitting the middle term of a ?: expression" msgstr "" ! #: c-parse.y:591 objc/objc-parse.y:620 msgid "ISO C89 forbids compound literals" msgstr "" ! #: c-parse.y:621 objc/objc-parse.y:650 msgid "ISO C forbids braced-groups within expressions" msgstr "" ! #: c-parse.y:674 msgid "traditional C rejects string concatenation" msgstr "" ! #: c-parse.y:689 objc/objc-parse.y:741 msgid "ISO C does not permit use of `varargs.h'" msgstr "" ! #: c-parse.y:797 c-parse.y:818 c-parse.y:850 cp/parse.y:1861 cp/parse.y:1868 ! #: cp/parse.y:1907 objc/objc-parse.y:849 objc/objc-parse.y:870 ! #: objc/objc-parse.y:902 #, c-format msgid "`%s' is not at beginning of declaration" msgstr "" ! #: c-parse.y:1014 objc/objc-parse.y:1075 msgid "ISO C forbids empty initializer braces" msgstr "" ! #: c-parse.y:1028 objc/objc-parse.y:1089 msgid "ISO C89 forbids specifying subobject to initialize" msgstr "" ! #: c-parse.y:1031 objc/objc-parse.y:1092 msgid "obsolete use of designated initializer without `='" msgstr "" ! #: c-parse.y:1035 objc/objc-parse.y:1096 msgid "obsolete use of designated initializer with `:'" msgstr "" ! #: c-parse.y:1064 msgid "ISO C forbids specifying range of elements to initialize" msgstr "" ! #: c-parse.y:1072 c-parse.y:1102 objc/objc-parse.y:1127 objc/objc-parse.y:1157 msgid "ISO C forbids nested functions" msgstr "" ! #: c-parse.y:1177 c-parse.y:1211 ! msgid "`[*]' in parameter declaration only allowed in ISO C 99" ! msgstr "" ! ! #: c-parse.y:1286 objc/objc-parse.y:1332 msgid "ISO C forbids forward references to `enum' types" msgstr "" ! #: c-parse.y:1298 cp/parse.y:2326 objc/objc-parse.y:1344 msgid "comma at end of enumerator list" msgstr "" ! #: c-parse.y:1306 objc/objc-parse.y:1352 msgid "no semicolon at end of struct or union" msgstr "" ! #: c-parse.y:1315 objc/objc-parse.y:1361 objc/objc-parse.y:2359 msgid "extra semicolon in struct or union specified" msgstr "" ! #: c-parse.y:1339 objc/objc-parse.y:1399 msgid "ISO C doesn't support unnamed structs/unions" msgstr "" ! #: c-parse.y:1353 objc/objc-parse.y:1413 msgid "ISO C forbids member declarations with no members" msgstr "" ! #: c-parse.y:1472 objc/objc-parse.y:1532 msgid "deprecated use of label at end of compound statement" msgstr "" ! #: c-parse.y:1489 objc/objc-parse.y:1549 msgid "ISO C89 forbids mixed declarations and code" msgstr "" ! #: c-parse.y:1563 objc/objc-parse.y:1627 msgid "ISO C forbids label declarations" msgstr "" ! #: c-parse.y:1612 cp/parse.y:1562 objc/objc-parse.y:1676 msgid "braced-group within expression allowed only inside a function" msgstr "" ! #: c-parse.y:1727 objc/objc-parse.y:1791 msgid "empty body in an else-statement" msgstr "" ! #: c-parse.y:1856 objc/objc-parse.y:1920 msgid "ISO C forbids `goto *expr;'" msgstr "" ! #: c-parse.y:1948 objc/objc-parse.y:2012 msgid "ISO C forbids forward parameter declarations" msgstr "" --- 1810,2356 ---- #. specially if info == NULL and add a res->number_null entry for #. that case, or maybe add a function pointer to be called at #. the end instead of hardcoding check_format_info_main. ! #: c-format.c:1478 msgid "null format string" msgstr "" ! #: c-format.c:1669 msgid "embedded `\\0' in format" msgstr "" ! #: c-format.c:1684 #, c-format msgid "spurious trailing `%%' in format" msgstr "" ! #: c-format.c:1723 c-format.c:1960 #, c-format msgid "repeated %s in format" msgstr "" ! #: c-format.c:1736 msgid "missing fill character at end of strfmon format" msgstr "" ! #: c-format.c:1756 c-format.c:1874 c-format.c:2154 c-format.c:2207 msgid "too few arguments for format" msgstr "" ! #: c-format.c:1816 #, c-format msgid "zero width in %s format" msgstr "" ! #: c-format.c:1835 #, c-format msgid "empty left precision in %s format" msgstr "" ! #: c-format.c:1889 msgid "field precision" msgstr "" ! #: c-format.c:1904 #, c-format msgid "empty precision in %s format" msgstr "" ! #: c-format.c:1944 #, c-format msgid "%s does not support the `%s' %s length modifier" msgstr "" ! #: c-format.c:1994 msgid "conversion lacks type at end of format" msgstr "" ! #: c-format.c:2005 #, c-format msgid "unknown conversion type character `%c' in format" msgstr "" ! #: c-format.c:2008 #, c-format msgid "unknown conversion type character 0x%x in format" msgstr "" ! #: c-format.c:2015 #, c-format msgid "%s does not support the `%%%c' %s format" msgstr "" ! #: c-format.c:2031 #, c-format msgid "%s used with `%%%c' %s format" msgstr "" ! #: c-format.c:2040 #, c-format msgid "%s does not support %s" msgstr "" ! #: c-format.c:2049 #, c-format msgid "%s does not support %s with the `%%%c' %s format" msgstr "" ! #: c-format.c:2082 #, c-format msgid "%s ignored with %s and `%%%c' %s format" msgstr "" ! #: c-format.c:2086 #, c-format msgid "%s ignored with %s in %s format" msgstr "" ! #: c-format.c:2092 #, c-format msgid "use of %s and %s together with `%%%c' %s format" msgstr "" ! #: c-format.c:2096 #, c-format msgid "use of %s and %s together in %s format" msgstr "" ! #: c-format.c:2115 #, c-format msgid "`%%%c' yields only last 2 digits of year in some locales" msgstr "" ! #: c-format.c:2118 #, c-format msgid "`%%%c' yields only last 2 digits of year" msgstr "" #. The end of the format string was reached. ! #: c-format.c:2134 #, c-format msgid "no closing `]' for `%%[' format" msgstr "" ! #: c-format.c:2147 #, c-format msgid "use of `%s' length modifier with `%c' type character" msgstr "" ! #: c-format.c:2168 #, c-format msgid "%s does not support the `%%%s%c' %s format" msgstr "" ! #: c-format.c:2183 msgid "operand number specified with suppressed assignment" msgstr "" ! #: c-format.c:2185 msgid "operand number specified for format taking no argument" msgstr "" ! #: c-format.c:2304 #, c-format msgid "writing through null pointer (arg %d)" msgstr "" ! #: c-format.c:2313 #, c-format msgid "reading through null pointer (arg %d)" msgstr "" ! #: c-format.c:2333 #, c-format msgid "writing into constant object (arg %d)" msgstr "" ! #: c-format.c:2343 #, c-format msgid "extra type qualifiers in format argument (arg %d)" msgstr "" ! #: c-format.c:2350 #, c-format msgid "format argument is not a pointer (arg %d)" msgstr "" ! #: c-format.c:2352 #, c-format msgid "format argument is not a pointer to a pointer (arg %d)" msgstr "" ! #: c-format.c:2423 ! msgid "pointer" ! msgstr "" ! ! #: c-format.c:2425 ! msgid "different type" ! msgstr "" ! ! #: c-format.c:2446 #, c-format msgid "%s is not type %s (arg %d)" msgstr "" ! #: c-format.c:2449 #, c-format msgid "%s format, %s arg (arg %d)" msgstr "" ! #: c-lex.c:298 msgid "badly nested C headers from preprocessor" msgstr "" ! #: c-lex.c:348 #, c-format msgid "ignoring #pragma %s %s" msgstr "" ! #: c-lex.c:350 #, c-format msgid "ignoring #pragma %s" msgstr "" ! #: c-lex.c:400 ! #, c-format ! msgid "universal-character-name '\\U%08x' not valid in identifier" msgstr "" ! #: c-lex.c:646 #, c-format ! msgid "universal-character-name '\\u%04x' not valid in identifier" msgstr "" ! #: c-lex.c:736 ! msgid "both 'f' and 'l' suffixes on floating constant" msgstr "" ! #: c-lex.c:763 #, c-format ! msgid "floating point number exceeds range of '%s'" msgstr "" ! #: c-lex.c:793 ! #, c-format ! msgid "stray '%c' in program" msgstr "" ! #: c-lex.c:795 ! #, c-format ! msgid "stray '\\%o' in program" msgstr "" ! #: c-lex.c:893 ! msgid "too many decimal points in floating constant" msgstr "" ! #: c-lex.c:895 ! msgid "decimal point in exponent - impossible!" msgstr "" ! #. Possible future extension: silently ignore _ in numbers, ! #. permitting cosmetic grouping - e.g. 0x8000_0000 == 0x80000000 ! #. but somewhat easier to read. Ada has this? ! #: c-lex.c:906 ! msgid "underscore in number" msgstr "" ! #: c-lex.c:968 ! msgid "numeric constant with no digits" msgstr "" ! #: c-lex.c:971 ! msgid "numeric constant contains digits beyond the radix" msgstr "" ! #: c-lex.c:982 ! msgid "floating constant may not be in radix 16" msgstr "" ! #: c-lex.c:985 ! msgid "hexadecimal floating constant has no exponent" msgstr "" ! #: c-lex.c:997 ! msgid "floating constant exponent has no digits" msgstr "" ! #: c-lex.c:1017 ! msgid "more than one 'f' suffix on floating constant" msgstr "" ! #: c-lex.c:1020 ! msgid "traditional C rejects the 'f' suffix" msgstr "" ! #: c-lex.c:1027 ! msgid "more than one 'l' suffix on floating constant" msgstr "" ! #: c-lex.c:1030 ! msgid "traditional C rejects the 'l' suffix" msgstr "" ! #: c-lex.c:1038 ! msgid "more than one 'i' or 'j' suffix on floating constant" msgstr "" ! #: c-lex.c:1040 c-lex.c:1134 ! msgid "ISO C forbids imaginary numeric constants" msgstr "" ! #: c-lex.c:1045 ! msgid "invalid suffix on floating constant" msgstr "" ! #. We got an exception from parse_float() ! #: c-lex.c:1062 ! msgid "floating constant out of range" msgstr "" ! #: c-lex.c:1074 msgid "floating point number exceeds range of 'double'" msgstr "" ! #: c-lex.c:1103 msgid "two 'u' suffixes on integer constant" msgstr "" ! #: c-lex.c:1106 msgid "traditional C rejects the 'u' suffix" msgstr "" ! #: c-lex.c:1117 msgid "three 'l' suffixes on integer constant" msgstr "" ! #: c-lex.c:1119 msgid "'lul' is not a valid integer suffix" msgstr "" ! #: c-lex.c:1121 msgid "'Ll' and 'lL' are not valid integer suffixes" msgstr "" ! #: c-lex.c:1124 msgid "ISO C89 forbids long long integer constants" msgstr "" ! #: c-lex.c:1132 msgid "more than one 'i' or 'j' suffix on integer constant" msgstr "" ! #: c-lex.c:1139 ! msgid "invalid suffix on integer constant" ! msgstr "" ! ! #: c-lex.c:1147 #, c-format msgid "" "integer constant is too large for this configuration of the compiler - " "truncated to %d bits" msgstr "" ! #: c-lex.c:1237 msgid "width of integer constant changes with -traditional" msgstr "" ! #: c-lex.c:1239 msgid "integer constant is unsigned in ISO C, signed with -traditional" msgstr "" ! #: c-lex.c:1241 msgid "width of integer constant may change on other systems with -traditional" msgstr "" ! #: c-lex.c:1251 #, c-format msgid "integer constant larger than the maximum value of %s" msgstr "" ! #: c-lex.c:1254 ! msgid "an unsigned long long int" msgstr "" ! #: c-lex.c:1255 ! msgid "a long long int" msgstr "" ! #: c-lex.c:1256 ! msgid "an unsigned long int" msgstr "" ! #: c-lex.c:1260 ! msgid "decimal constant is so large that it is unsigned" msgstr "" ! #: c-lex.c:1269 ! msgid "complex integer constant is too wide for 'complex int'" msgstr "" ! #: c-lex.c:1289 ! msgid "integer constant is larger than the maximum value for its type" msgstr "" ! #: c-lex.c:1293 ! #, c-format ! msgid "missing white space after number '%.*s'" msgstr "" ! #: c-lex.c:1329 cpplex.c:1873 ! msgid "ignoring invalid multibyte character" msgstr "" #. Like YYERROR but do call yyerror. ! #: c-parse.y:56 parse.y:51 objc-parse.y:57 msgid "syntax error" msgstr "" ! #: /usr/share/bison/bison.simple:176 /usr/share/bison.simple:112 ! msgid "syntax error: cannot back up" ! msgstr "" ! ! #: c-parse.y:288 objc-parse.y:310 msgid "ISO C forbids an empty source file" msgstr "" ! #: c-parse.y:321 c-typeck.c:6895 objc-parse.y:343 msgid "argument of `asm' is not a constant string" msgstr "" ! #: c-parse.y:329 objc-parse.y:351 msgid "ISO C forbids data definition with no type or storage class" msgstr "" ! #: c-parse.y:331 objc-parse.y:353 msgid "data definition has no type or storage class" msgstr "" ! #: c-parse.y:344 objc-parse.y:366 msgid "ISO C does not allow extra `;' outside of a function" msgstr "" ! #: c-parse.y:404 cppexp.c:693 msgid "traditional C rejects the unary plus operator" msgstr "" ! #: c-parse.y:466 objc-parse.y:488 msgid "`sizeof' applied to a bit-field" msgstr "" ! #: c-parse.y:546 objc-parse.y:568 msgid "ISO C forbids omitting the middle term of a ?: expression" msgstr "" ! #: c-parse.y:593 objc-parse.y:615 msgid "ISO C89 forbids compound literals" msgstr "" ! #: c-parse.y:607 objc-parse.y:629 msgid "ISO C forbids braced-groups within expressions" msgstr "" ! #: c-parse.y:638 objc-parse.y:660 ! msgid "first argument to __builtin_choose_expr not a constant" ! msgstr "" ! ! #: c-parse.y:681 msgid "traditional C rejects string concatenation" msgstr "" ! #: c-parse.y:696 objc-parse.y:732 msgid "ISO C does not permit use of `varargs.h'" msgstr "" ! #: c-parse.y:957 c-parse.y:963 c-parse.y:969 c-parse.y:975 c-parse.y:996 ! #: c-parse.y:1002 c-parse.y:1008 c-parse.y:1014 c-parse.y:1047 c-parse.y:1053 ! #: c-parse.y:1059 c-parse.y:1065 c-parse.y:1110 c-parse.y:1116 c-parse.y:1122 ! #: c-parse.y:1128 parse.y:1907 parse.y:1914 parse.y:1949 objc-parse.y:993 ! #: objc-parse.y:999 objc-parse.y:1005 objc-parse.y:1011 objc-parse.y:1032 ! #: objc-parse.y:1038 objc-parse.y:1044 objc-parse.y:1050 objc-parse.y:1083 ! #: objc-parse.y:1089 objc-parse.y:1095 objc-parse.y:1101 objc-parse.y:1146 ! #: objc-parse.y:1152 objc-parse.y:1158 objc-parse.y:1164 #, c-format msgid "`%s' is not at beginning of declaration" msgstr "" ! #: c-parse.y:1410 objc-parse.y:1455 msgid "ISO C forbids empty initializer braces" msgstr "" ! #: c-parse.y:1424 objc-parse.y:1469 msgid "ISO C89 forbids specifying subobject to initialize" msgstr "" ! #: c-parse.y:1427 objc-parse.y:1472 msgid "obsolete use of designated initializer without `='" msgstr "" ! #: c-parse.y:1431 objc-parse.y:1476 msgid "obsolete use of designated initializer with `:'" msgstr "" ! #: c-parse.y:1460 msgid "ISO C forbids specifying range of elements to initialize" msgstr "" ! #: c-parse.y:1468 c-parse.y:1498 objc-parse.y:1507 objc-parse.y:1537 msgid "ISO C forbids nested functions" msgstr "" ! #: c-parse.y:1672 objc-parse.y:1713 msgid "ISO C forbids forward references to `enum' types" msgstr "" ! #: c-parse.y:1684 parse.y:2364 objc-parse.y:1725 msgid "comma at end of enumerator list" msgstr "" ! #: c-parse.y:1692 objc-parse.y:1733 msgid "no semicolon at end of struct or union" msgstr "" ! #: c-parse.y:1701 objc-parse.y:1742 objc-parse.y:2819 msgid "extra semicolon in struct or union specified" msgstr "" ! #: c-parse.y:1714 objc-parse.y:1769 msgid "ISO C doesn't support unnamed structs/unions" msgstr "" ! #: c-parse.y:1723 objc-parse.y:1778 msgid "ISO C forbids member declarations with no members" msgstr "" ! #: c-parse.y:1872 c-parse.y:1876 c-parse.y:1880 objc-parse.y:1927 ! #: objc-parse.y:1931 objc-parse.y:1935 ! msgid "storage class specifier in array declarator" ! msgstr "" ! ! #: c-parse.y:1895 objc-parse.y:1950 msgid "deprecated use of label at end of compound statement" msgstr "" ! #: c-parse.y:1912 objc-parse.y:1967 msgid "ISO C89 forbids mixed declarations and code" msgstr "" ! #: c-parse.y:1986 objc-parse.y:2045 msgid "ISO C forbids label declarations" msgstr "" ! #: c-parse.y:2035 parse.y:1607 objc-parse.y:2094 msgid "braced-group within expression allowed only inside a function" msgstr "" ! #: c-parse.y:2161 objc-parse.y:2220 msgid "empty body in an else-statement" msgstr "" ! #: c-parse.y:2281 objc-parse.y:2340 msgid "ISO C forbids `goto *expr;'" msgstr "" ! #: c-parse.y:2379 objc-parse.y:2438 msgid "ISO C forbids forward parameter declarations" msgstr "" *************** msgstr "" *** 2191,2915 **** #. it caused problems with the code in expand_builtin which #. tries to verify that BUILT_IN_NEXT_ARG is being used #. correctly. ! #: c-parse.y:1971 objc/objc-parse.y:2035 msgid "ISO C requires a named argument before `...'" msgstr "" ! #: c-parse.y:2051 objc/objc-parse.y:2115 msgid "`...' in old-style identifier list" msgstr "" ! #: c-parse.y:2377 cp/spew.c:1480 objc/objc-parse.y:3109 #, c-format msgid "%s at end of input" msgstr "" ! #: c-parse.y:2383 cp/spew.c:1486 objc/objc-parse.y:3115 #, c-format msgid "%s before %s'%c'" msgstr "" ! #: c-parse.y:2385 cp/spew.c:1488 objc/objc-parse.y:3117 #, c-format msgid "%s before %s'\\x%x'" msgstr "" ! #: c-parse.y:2389 cp/spew.c:1492 objc/objc-parse.y:3121 #, c-format msgid "%s before string constant" msgstr "" ! #: c-parse.y:2393 cp/spew.c:1496 objc/objc-parse.y:3125 #, c-format msgid "%s before numeric constant" msgstr "" ! #: c-parse.y:2395 objc/objc-parse.y:3127 #, c-format msgid "%s before \"%s\"" msgstr "" ! #: c-parse.y:2397 objc/objc-parse.y:3129 #, c-format msgid "%s before '%s' token" msgstr "" ! #: c-parse.y:2543 objc/objc-parse.y:3292 #, c-format msgid "syntax error at '%s' token" msgstr "" ! #: c-parse.y:2573 cp/lex.c:928 objc/objc-parse.y:3322 ! msgid "YYDEBUG not defined." msgstr "" ! #: c-pragma.c:108 msgid "" "#pragma pack (pop) encountered without matching #pragma pack (push, )" msgstr "" ! #: c-pragma.c:126 #, c-format msgid "" "#pragma pack(pop, %s) encountered without matching #pragma pack(push, %s, " ")" msgstr "" ! #: c-pragma.c:249 msgid "junk at end of '#pragma pack'" msgstr "" ! #: c-pragma.c:298 msgid "junk at end of #pragma weak" msgstr "" ! #: c-semantics.c:607 msgid "break statement not within loop or switch" msgstr "" ! #: c-semantics.c:625 msgid "continue statement not within a loop" msgstr "" ! #: c-semantics.c:720 msgid "destructor needed for `%#D'" msgstr "" ! #: c-semantics.c:721 msgid "where case label appears here" msgstr "" ! #: c-semantics.c:724 msgid "" "(enclose actions of previous case statements requiring destructors in their " "own scope.)" msgstr "" ! #: c-semantics.c:757 c-typeck.c:6800 #, c-format msgid "%s qualifier ignored on asm" msgstr "" ! #: c-typeck.c:122 #, c-format msgid "`%s' has an incomplete type" msgstr "" ! #: c-typeck.c:144 cp/call.c:2553 msgid "invalid use of void expression" msgstr "" #: c-typeck.c:153 msgid "invalid use of array with unspecified bounds" msgstr "" ! #: c-typeck.c:161 #, c-format msgid "invalid use of undefined type `%s %s'" msgstr "" #. If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. ! #: c-typeck.c:165 #, c-format msgid "invalid use of incomplete typedef `%s'" msgstr "" ! #: c-typeck.c:396 c-typeck.c:410 msgid "function types not truly compatible in ISO C" msgstr "" ! #: c-typeck.c:561 msgid "types are not quite compatible" msgstr "" ! #: c-typeck.c:714 msgid "sizeof applied to a function type" msgstr "" ! #: c-typeck.c:720 msgid "sizeof applied to a void type" msgstr "" ! #: c-typeck.c:727 msgid "sizeof applied to an incomplete type" msgstr "" ! #: c-typeck.c:780 c-typeck.c:2793 msgid "arithmetic on pointer to an incomplete type" msgstr "" ! #: c-typeck.c:808 ! msgid "__alignof__ applied to an incomplete type" ! msgstr "" ! ! #: c-typeck.c:834 ! msgid "`__alignof' applied to a bit-field" ! msgstr "" ! ! #: c-typeck.c:1025 cp/typeck.c:1792 ! msgid "invalid use of non-lvalue array" ! msgstr "" ! ! #: c-typeck.c:1200 #, c-format msgid "%s has no member named `%s'" msgstr "" ! #: c-typeck.c:1231 #, c-format msgid "request for member `%s' in something not a structure or union" msgstr "" ! #: c-typeck.c:1264 msgid "dereferencing pointer to incomplete type" msgstr "" ! #: c-typeck.c:1268 msgid "dereferencing `void *' pointer" msgstr "" ! #: c-typeck.c:1285 cp/typeck.c:2402 #, c-format msgid "invalid type argument of `%s'" msgstr "" ! #: c-typeck.c:1304 cp/typeck.c:2428 msgid "subscript missing in array reference" msgstr "" ! #: c-typeck.c:1325 cp/typeck.c:2470 msgid "array subscript has type `char'" msgstr "" ! #: c-typeck.c:1333 c-typeck.c:1422 cp/typeck.c:2477 cp/typeck.c:2556 msgid "array subscript is not an integer" msgstr "" ! #: c-typeck.c:1366 msgid "ISO C forbids subscripting `register' array" msgstr "" ! #: c-typeck.c:1368 msgid "ISO C89 forbids subscripting non-lvalue array" msgstr "" ! #: c-typeck.c:1401 msgid "subscript has type `char'" msgstr "" ! #: c-typeck.c:1417 cp/typeck.c:2551 msgid "subscripted value is neither array nor pointer" msgstr "" ! #: c-typeck.c:1468 #, c-format msgid "`%s' undeclared here (not in a function)" msgstr "" ! #: c-typeck.c:1475 #, c-format msgid "`%s' undeclared (first use in this function)" msgstr "" ! #: c-typeck.c:1480 msgid "(Each undeclared identifier is reported only once" msgstr "" ! #: c-typeck.c:1481 msgid "for each function it appears in.)" msgstr "" ! #: c-typeck.c:1498 #, c-format msgid "local declaration of `%s' hides instance variable" msgstr "" ! #: c-typeck.c:1563 msgid "called object is not a function" msgstr "" ! #: c-typeck.c:1647 cp/typeck.c:3189 msgid "too many arguments to function" msgstr "" ! #: c-typeck.c:1670 #, c-format msgid "type of formal parameter %d is incomplete" msgstr "" ! #: c-typeck.c:1683 #, c-format msgid "%s as integer rather than floating due to prototype" msgstr "" ! #: c-typeck.c:1686 #, c-format msgid "%s as integer rather than complex due to prototype" msgstr "" ! #: c-typeck.c:1689 #, c-format msgid "%s as complex rather than floating due to prototype" msgstr "" ! #: c-typeck.c:1692 #, c-format msgid "%s as floating rather than integer due to prototype" msgstr "" ! #: c-typeck.c:1695 #, c-format msgid "%s as complex rather than integer due to prototype" msgstr "" ! #: c-typeck.c:1698 #, c-format msgid "%s as floating rather than complex due to prototype" msgstr "" ! #: c-typeck.c:1708 #, c-format msgid "%s as `float' rather than `double' due to prototype" msgstr "" ! #: c-typeck.c:1725 #, c-format msgid "%s with different width due to prototype" msgstr "" ! #: c-typeck.c:1759 #, c-format msgid "%s as unsigned due to prototype" msgstr "" ! #: c-typeck.c:1761 #, c-format msgid "%s as signed due to prototype" msgstr "" ! #: c-typeck.c:1795 cp/typeck.c:3290 msgid "too few arguments to function" msgstr "" ! #: c-typeck.c:1836 msgid "suggest parentheses around + or - inside shift" msgstr "" ! #: c-typeck.c:1843 msgid "suggest parentheses around && within ||" msgstr "" ! #: c-typeck.c:1852 msgid "suggest parentheses around arithmetic in operand of |" msgstr "" ! #: c-typeck.c:1855 msgid "suggest parentheses around comparison in operand of |" msgstr "" ! #: c-typeck.c:1864 msgid "suggest parentheses around arithmetic in operand of ^" msgstr "" ! #: c-typeck.c:1867 msgid "suggest parentheses around comparison in operand of ^" msgstr "" ! #: c-typeck.c:1874 msgid "suggest parentheses around + or - in operand of &" msgstr "" ! #: c-typeck.c:1877 msgid "suggest parentheses around comparison in operand of &" msgstr "" ! #: c-typeck.c:1884 msgid "comparisons like X<=Y<=Z do not have their mathematical meaning" msgstr "" ! #: c-typeck.c:2138 cp/typeck.c:3569 msgid "right shift count is negative" msgstr "" ! #: c-typeck.c:2145 cp/typeck.c:3575 msgid "right shift count >= width of type" msgstr "" ! #: c-typeck.c:2170 cp/typeck.c:3594 msgid "left shift count is negative" msgstr "" ! #: c-typeck.c:2173 cp/typeck.c:3596 msgid "left shift count >= width of type" msgstr "" ! #: c-typeck.c:2198 msgid "shift count is negative" msgstr "" ! #: c-typeck.c:2200 msgid "shift count >= width of type" msgstr "" ! #: c-typeck.c:2221 cp/typeck.c:3631 msgid "comparing floating point with == or != is unsafe" msgstr "" ! #: c-typeck.c:2245 c-typeck.c:2251 msgid "ISO C forbids comparison of `void *' with function pointer" msgstr "" ! #: c-typeck.c:2254 c-typeck.c:2296 c-typeck.c:2324 msgid "comparison of distinct pointer types lacks a cast" msgstr "" ! #: c-typeck.c:2269 c-typeck.c:2275 c-typeck.c:2345 c-typeck.c:2351 msgid "comparison between pointer and integer" msgstr "" ! #: c-typeck.c:2291 c-typeck.c:2319 msgid "ISO C forbids ordered comparisons of pointers to functions" msgstr "" ! #: c-typeck.c:2316 msgid "comparison of complete and incomplete pointers" msgstr "" ! #: c-typeck.c:2332 c-typeck.c:2339 msgid "ordered comparison of pointer with integer zero" msgstr "" ! #: c-typeck.c:2365 cp/typeck.c:3764 msgid "unordered comparison on non-floating point argument" msgstr "" ! #: c-typeck.c:2579 msgid "comparison between signed and unsigned" msgstr "" ! #: c-typeck.c:2625 cp/typeck.c:4010 msgid "comparison of promoted ~unsigned with constant" msgstr "" ! #: c-typeck.c:2633 cp/typeck.c:4018 msgid "comparison of promoted ~unsigned with unsigned" msgstr "" ! #: c-typeck.c:2695 ! msgid "pointer of type `void *' used in arithmetic" ! msgstr "" ! ! #: c-typeck.c:2701 ! msgid "pointer to a function used in arithmetic" ! msgstr "" ! ! #: c-typeck.c:2779 msgid "pointer of type `void *' used in subtraction" msgstr "" ! #: c-typeck.c:2781 msgid "pointer to a function used in subtraction" msgstr "" ! #: c-typeck.c:2839 msgid "wrong type argument to unary plus" msgstr "" ! #: c-typeck.c:2850 msgid "wrong type argument to unary minus" msgstr "" ! #: c-typeck.c:2862 msgid "ISO C does not support `~' for complex conjugation" msgstr "" ! #: c-typeck.c:2868 msgid "wrong type argument to bit-complement" msgstr "" ! #: c-typeck.c:2879 msgid "wrong type argument to abs" msgstr "" ! #: c-typeck.c:2891 msgid "wrong type argument to conjugation" msgstr "" ! #: c-typeck.c:2905 msgid "wrong type argument to unary exclamation mark" msgstr "" ! #: c-typeck.c:2948 msgid "ISO C does not support `++' and `--' on complex types" msgstr "" ! #: c-typeck.c:2962 c-typeck.c:2988 ! #, c-format ! msgid "wrong type argument to %s" ! msgstr "" ! ! #: c-typeck.c:2982 ! #, c-format ! msgid "%s of pointer to unknown structure" ! msgstr "" ! ! #: c-typeck.c:3052 ! msgid "invalid lvalue in increment" msgstr "" ! #: c-typeck.c:3053 ! msgid "invalid lvalue in decrement" msgstr "" ! #: c-typeck.c:3061 cp/typeck.c:4587 ! msgid "increment" msgstr "" ! #: c-typeck.c:3061 cp/typeck.c:4587 ! msgid "decrement" msgstr "" ! #: c-typeck.c:3117 msgid "ISO C forbids the address of a cast expression" msgstr "" ! #: c-typeck.c:3131 msgid "invalid lvalue in unary `&'" msgstr "" ! #: c-typeck.c:3163 #, c-format msgid "attempt to take address of bit-field structure member `%s'" msgstr "" ! #: c-typeck.c:3271 c-typeck.c:4618 c-typeck.c:4634 c-typeck.c:4650 ! #: cp/typeck.c:4780 diagnostic.c:1475 gcc.c:4207 java/verify.c:1416 ! #: java/verify.c:1417 java/verify.c:1432 #, c-format msgid "%s" msgstr "" ! #: c-typeck.c:3328 msgid "ISO C forbids use of conditional expressions as lvalues" msgstr "" ! #: c-typeck.c:3331 msgid "ISO C forbids use of compound expressions as lvalues" msgstr "" ! #: c-typeck.c:3334 msgid "ISO C forbids use of cast expressions as lvalues" msgstr "" ! #: c-typeck.c:3351 #, c-format msgid "%s of read-only member `%s'" msgstr "" ! #: c-typeck.c:3355 #, c-format msgid "%s of read-only variable `%s'" msgstr "" ! #: c-typeck.c:3358 #, c-format msgid "%s of read-only location" msgstr "" ! #: c-typeck.c:3376 #, c-format ! msgid "cannot take address of bitfield `%s'" msgstr "" ! #: c-typeck.c:3403 #, c-format msgid "global register variable `%s' used in nested function" msgstr "" ! #: c-typeck.c:3407 #, c-format msgid "register variable `%s' used in nested function" msgstr "" ! #: c-typeck.c:3414 #, c-format msgid "address of global register variable `%s' requested" msgstr "" ! #: c-typeck.c:3426 msgid "cannot put object with volatile field into register" msgstr "" ! #: c-typeck.c:3430 #, c-format msgid "address of register variable `%s' requested" msgstr "" ! #: c-typeck.c:3538 msgid "signed and unsigned type in conditional expression" msgstr "" ! #: c-typeck.c:3545 msgid "ISO C forbids conditional expr with only one void side" msgstr "" ! #: c-typeck.c:3561 c-typeck.c:3568 msgid "ISO C forbids conditional expr between `void *' and function pointer" msgstr "" ! #: c-typeck.c:3574 msgid "pointer type mismatch in conditional expression" msgstr "" ! #: c-typeck.c:3581 c-typeck.c:3591 msgid "pointer/integer type mismatch in conditional expression" msgstr "" ! #: c-typeck.c:3605 msgid "type mismatch in conditional expression" msgstr "" ! #: c-typeck.c:3678 cp/typeck.c:5012 msgid "left-hand operand of comma expression has no effect" msgstr "" ! #: c-typeck.c:3717 msgid "cast specifies array type" msgstr "" ! #: c-typeck.c:3723 msgid "cast specifies function type" msgstr "" ! #: c-typeck.c:3733 msgid "ISO C forbids casting nonscalar to the same type" msgstr "" ! #: c-typeck.c:3754 msgid "ISO C forbids casts to union type" msgstr "" ! #: c-typeck.c:3770 msgid "cast to union type from type not present in union" msgstr "" #. There are qualifiers present in IN_OTYPE that are not #. present in IN_TYPE. ! #: c-typeck.c:3815 msgid "cast discards qualifiers from pointer target type" msgstr "" ! #: c-typeck.c:3830 msgid "cast increases required alignment of target type" msgstr "" ! #: c-typeck.c:3836 cp/typeck.c:5420 msgid "cast from pointer to integer of different size" msgstr "" ! #: c-typeck.c:3841 msgid "cast does not match function type" msgstr "" ! #: c-typeck.c:3848 cp/typeck.c:5427 msgid "cast to pointer from integer of different size" msgstr "" #. Now we have handled acceptable kinds of LHS that are not truly lvalues. #. Reject anything strange now. ! #: c-typeck.c:3990 msgid "invalid lvalue in assignment" msgstr "" #. Convert new value to destination type. ! #: c-typeck.c:3999 c-typeck.c:4024 c-typeck.c:4041 cp/typeck.c:5542 ! #: cp/typeck.c:5699 msgid "assignment" msgstr "" ! #: c-typeck.c:4208 c-typeck.c:4275 #, c-format msgid "%s makes qualified function pointer from unqualified" msgstr "" ! #: c-typeck.c:4212 c-typeck.c:4255 #, c-format msgid "%s discards qualifiers from pointer target type" msgstr "" ! #: c-typeck.c:4218 msgid "ISO C prohibits argument conversion to union type" msgstr "" ! #: c-typeck.c:4247 #, c-format msgid "ISO C forbids %s between function pointer and `void *'" msgstr "" ! #: c-typeck.c:4264 #, c-format msgid "pointer targets in %s differ in signedness" msgstr "" ! #: c-typeck.c:4280 #, c-format msgid "%s from incompatible pointer type" msgstr "" ! #: c-typeck.c:4296 #, c-format msgid "%s makes pointer from integer without a cast" msgstr "" ! #: c-typeck.c:4304 #, c-format msgid "%s makes integer from pointer without a cast" msgstr "" ! #: c-typeck.c:4318 c-typeck.c:4321 #, c-format msgid "incompatible type for argument %d of `%s'" msgstr "" ! #: c-typeck.c:4325 #, c-format msgid "incompatible type for argument %d of indirect function call" msgstr "" ! #: c-typeck.c:4329 #, c-format msgid "incompatible types in %s" msgstr "" #. Function name is known; supply it. ! #: c-typeck.c:4360 #, c-format msgid "passing arg %d of `%s'" msgstr "" #. Function name unknown (call through ptr); just give arg number. ! #: c-typeck.c:4370 #, c-format msgid "passing arg %d of pointer to function" msgstr "" ! #: c-typeck.c:4437 msgid "initializer for static variable is not constant" msgstr "" ! #: c-typeck.c:4443 msgid "initializer for static variable uses complicated arithmetic" msgstr "" ! #: c-typeck.c:4451 msgid "aggregate initializer is not constant" msgstr "" ! #: c-typeck.c:4453 msgid "aggregate initializer uses complicated arithmetic" msgstr "" ! #: c-typeck.c:4460 msgid "traditional C rejects automatic aggregate initialization" msgstr "" --- 2360,3141 ---- #. it caused problems with the code in expand_builtin which #. tries to verify that BUILT_IN_NEXT_ARG is being used #. correctly. ! #: c-parse.y:2405 objc-parse.y:2464 msgid "ISO C requires a named argument before `...'" msgstr "" ! #: c-parse.y:2500 objc-parse.y:2559 msgid "`...' in old-style identifier list" msgstr "" ! #: /usr/share/bison/bison.simple:821 ! msgid "parse error; also virtual memory exhausted" ! msgstr "" ! ! #: /usr/share/bison/bison.simple:825 cp/spew.c:343 /usr/share/bison.simple:654 ! msgid "parse error" ! msgstr "" ! ! #: /usr/share/bison/bison.simple:950 /usr/share/bison.simple:367 ! msgid "parser stack overflow" ! msgstr "" ! ! #: c-parse.y:2824 cp/spew.c:1477 objc-parse.y:3511 #, c-format msgid "%s at end of input" msgstr "" ! #: c-parse.y:2830 cp/spew.c:1483 objc-parse.y:3517 #, c-format msgid "%s before %s'%c'" msgstr "" ! #: c-parse.y:2832 cp/spew.c:1485 objc-parse.y:3519 #, c-format msgid "%s before %s'\\x%x'" msgstr "" ! #: c-parse.y:2836 cp/spew.c:1489 objc-parse.y:3523 #, c-format msgid "%s before string constant" msgstr "" ! #: c-parse.y:2838 cp/spew.c:1491 objc-parse.y:3525 #, c-format msgid "%s before numeric constant" msgstr "" ! #: c-parse.y:2840 objc-parse.y:3527 #, c-format msgid "%s before \"%s\"" msgstr "" ! #: c-parse.y:2842 objc-parse.y:3529 #, c-format msgid "%s before '%s' token" msgstr "" ! #: c-parse.y:2978 objc-parse.y:3708 #, c-format msgid "syntax error at '%s' token" msgstr "" ! #: c-parse.y:3008 cp/lex.c:906 objc-parse.y:3738 ! msgid "YYDEBUG not defined" msgstr "" ! #: c-pragma.c:109 msgid "" "#pragma pack (pop) encountered without matching #pragma pack (push, )" msgstr "" ! #: c-pragma.c:127 #, c-format msgid "" "#pragma pack(pop, %s) encountered without matching #pragma pack(push, %s, " ")" msgstr "" ! #: c-pragma.c:162 ! msgid "#pragma pack(push[, id], ) is not supported on this target" ! msgstr "" ! ! #: c-pragma.c:164 ! msgid "#pragma pack(pop[, id], ) is not supported on this target" ! msgstr "" ! ! #: c-pragma.c:184 ! msgid "missing '(' after '#pragma pack' - ignored" ! msgstr "" ! ! #: c-pragma.c:197 c-pragma.c:247 ! msgid "malformed '#pragma pack' - ignored" ! msgstr "" ! ! #: c-pragma.c:202 ! msgid "malformed '#pragma pack(push[, id], )' - ignored" ! msgstr "" ! ! #: c-pragma.c:204 ! msgid "malformed '#pragma pack(pop[, id])' - ignored" ! msgstr "" ! ! #: c-pragma.c:213 ! #, c-format ! msgid "unknown action '%s' for '#pragma pack' - ignored" ! msgstr "" ! ! #: c-pragma.c:250 msgid "junk at end of '#pragma pack'" msgstr "" ! #: c-pragma.c:264 ! #, c-format ! msgid "alignment must be a small power of two, not %d" ! msgstr "" ! ! #: c-pragma.c:329 c-pragma.c:334 ! msgid "malformed #pragma weak, ignored" ! msgstr "" ! ! #: c-pragma.c:338 msgid "junk at end of #pragma weak" msgstr "" ! #: c-pragma.c:369 c-pragma.c:374 ! msgid "malformed #pragma redefine_extname, ignored" ! msgstr "" ! ! #: c-pragma.c:379 ! msgid "junk at end of #pragma redefine_extname" ! msgstr "" ! ! #: c-pragma.c:386 c-pragma.c:461 ! msgid "#pragma redefine_extname conflicts with declaration" ! msgstr "" ! ! #: c-pragma.c:410 ! msgid "malformed #pragma extern_prefix, ignored" ! msgstr "" ! ! #: c-pragma.c:415 ! msgid "junk at end of #pragma extern_prefix" ! msgstr "" ! ! #: c-pragma.c:447 ! msgid "asm declaration conficts with previous rename" ! msgstr "" ! ! #: c-semantics.c:563 msgid "break statement not within loop or switch" msgstr "" ! #: c-semantics.c:581 msgid "continue statement not within a loop" msgstr "" ! #: c-semantics.c:676 msgid "destructor needed for `%#D'" msgstr "" ! #: c-semantics.c:677 msgid "where case label appears here" msgstr "" ! #: c-semantics.c:680 msgid "" "(enclose actions of previous case statements requiring destructors in their " "own scope.)" msgstr "" ! #: c-semantics.c:723 c-typeck.c:6923 cp/semantics.c:889 #, c-format msgid "%s qualifier ignored on asm" msgstr "" ! #: c-typeck.c:123 #, c-format msgid "`%s' has an incomplete type" msgstr "" ! #: c-typeck.c:145 cp/call.c:2621 msgid "invalid use of void expression" msgstr "" #: c-typeck.c:153 + msgid "invalid use of flexible array member" + msgstr "" + + #: c-typeck.c:159 cp/typeck2.c:227 msgid "invalid use of array with unspecified bounds" msgstr "" ! #: c-typeck.c:167 #, c-format msgid "invalid use of undefined type `%s %s'" msgstr "" #. If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. ! #: c-typeck.c:171 #, c-format msgid "invalid use of incomplete typedef `%s'" msgstr "" ! #: c-typeck.c:402 c-typeck.c:416 msgid "function types not truly compatible in ISO C" msgstr "" ! #: c-typeck.c:576 msgid "types are not quite compatible" msgstr "" ! #: c-typeck.c:729 msgid "sizeof applied to a function type" msgstr "" ! #: c-typeck.c:735 msgid "sizeof applied to a void type" msgstr "" ! #: c-typeck.c:742 msgid "sizeof applied to an incomplete type" msgstr "" ! #: c-typeck.c:795 c-typeck.c:2704 msgid "arithmetic on pointer to an incomplete type" msgstr "" ! #: c-typeck.c:1183 #, c-format msgid "%s has no member named `%s'" msgstr "" ! #: c-typeck.c:1216 #, c-format msgid "request for member `%s' in something not a structure or union" msgstr "" ! #: c-typeck.c:1248 msgid "dereferencing pointer to incomplete type" msgstr "" ! #: c-typeck.c:1252 msgid "dereferencing `void *' pointer" msgstr "" ! #: c-typeck.c:1269 cp/typeck.c:2347 #, c-format msgid "invalid type argument of `%s'" msgstr "" ! #: c-typeck.c:1288 cp/typeck.c:2373 msgid "subscript missing in array reference" msgstr "" ! #: c-typeck.c:1309 cp/typeck.c:2415 msgid "array subscript has type `char'" msgstr "" ! #: c-typeck.c:1317 c-typeck.c:1406 cp/typeck.c:2422 cp/typeck.c:2501 msgid "array subscript is not an integer" msgstr "" ! #: c-typeck.c:1350 msgid "ISO C forbids subscripting `register' array" msgstr "" ! #: c-typeck.c:1352 msgid "ISO C89 forbids subscripting non-lvalue array" msgstr "" ! #: c-typeck.c:1385 msgid "subscript has type `char'" msgstr "" ! #: c-typeck.c:1401 cp/typeck.c:2496 msgid "subscripted value is neither array nor pointer" msgstr "" ! #: c-typeck.c:1455 #, c-format msgid "`%s' undeclared here (not in a function)" msgstr "" ! #: c-typeck.c:1462 #, c-format msgid "`%s' undeclared (first use in this function)" msgstr "" ! #: c-typeck.c:1467 msgid "(Each undeclared identifier is reported only once" msgstr "" ! #: c-typeck.c:1468 msgid "for each function it appears in.)" msgstr "" ! #: c-typeck.c:1485 #, c-format msgid "local declaration of `%s' hides instance variable" msgstr "" ! #: c-typeck.c:1550 msgid "called object is not a function" msgstr "" ! #: c-typeck.c:1637 cp/typeck.c:3133 msgid "too many arguments to function" msgstr "" ! #: c-typeck.c:1658 #, c-format msgid "type of formal parameter %d is incomplete" msgstr "" ! #: c-typeck.c:1671 #, c-format msgid "%s as integer rather than floating due to prototype" msgstr "" ! #: c-typeck.c:1674 #, c-format msgid "%s as integer rather than complex due to prototype" msgstr "" ! #: c-typeck.c:1677 #, c-format msgid "%s as complex rather than floating due to prototype" msgstr "" ! #: c-typeck.c:1680 #, c-format msgid "%s as floating rather than integer due to prototype" msgstr "" ! #: c-typeck.c:1683 #, c-format msgid "%s as complex rather than integer due to prototype" msgstr "" ! #: c-typeck.c:1686 #, c-format msgid "%s as floating rather than complex due to prototype" msgstr "" ! #: c-typeck.c:1696 #, c-format msgid "%s as `float' rather than `double' due to prototype" msgstr "" ! #: c-typeck.c:1714 #, c-format msgid "%s with different width due to prototype" msgstr "" ! #: c-typeck.c:1748 #, c-format msgid "%s as unsigned due to prototype" msgstr "" ! #: c-typeck.c:1750 #, c-format msgid "%s as signed due to prototype" msgstr "" ! #: c-typeck.c:1784 cp/typeck.c:3241 msgid "too few arguments to function" msgstr "" ! #: c-typeck.c:1826 msgid "suggest parentheses around + or - inside shift" msgstr "" ! #: c-typeck.c:1833 msgid "suggest parentheses around && within ||" msgstr "" ! #: c-typeck.c:1842 msgid "suggest parentheses around arithmetic in operand of |" msgstr "" ! #: c-typeck.c:1845 msgid "suggest parentheses around comparison in operand of |" msgstr "" ! #: c-typeck.c:1854 msgid "suggest parentheses around arithmetic in operand of ^" msgstr "" ! #: c-typeck.c:1857 msgid "suggest parentheses around comparison in operand of ^" msgstr "" ! #: c-typeck.c:1864 msgid "suggest parentheses around + or - in operand of &" msgstr "" ! #: c-typeck.c:1867 msgid "suggest parentheses around comparison in operand of &" msgstr "" ! #: c-typeck.c:1874 msgid "comparisons like X<=Y<=Z do not have their mathematical meaning" msgstr "" ! #: c-typeck.c:2034 c-typeck.c:2067 ! msgid "division by zero" ! msgstr "" ! ! #: c-typeck.c:2112 cp/typeck.c:3502 msgid "right shift count is negative" msgstr "" ! #: c-typeck.c:2119 cp/typeck.c:3508 msgid "right shift count >= width of type" msgstr "" ! #: c-typeck.c:2144 cp/typeck.c:3527 msgid "left shift count is negative" msgstr "" ! #: c-typeck.c:2147 cp/typeck.c:3529 msgid "left shift count >= width of type" msgstr "" ! #: c-typeck.c:2172 msgid "shift count is negative" msgstr "" ! #: c-typeck.c:2174 msgid "shift count >= width of type" msgstr "" ! #: c-typeck.c:2195 cp/typeck.c:3564 msgid "comparing floating point with == or != is unsafe" msgstr "" ! #: c-typeck.c:2219 c-typeck.c:2225 msgid "ISO C forbids comparison of `void *' with function pointer" msgstr "" ! #: c-typeck.c:2228 c-typeck.c:2270 c-typeck.c:2298 msgid "comparison of distinct pointer types lacks a cast" msgstr "" ! #: c-typeck.c:2243 c-typeck.c:2249 c-typeck.c:2319 c-typeck.c:2325 msgid "comparison between pointer and integer" msgstr "" ! #: c-typeck.c:2265 c-typeck.c:2293 msgid "ISO C forbids ordered comparisons of pointers to functions" msgstr "" ! #: c-typeck.c:2290 msgid "comparison of complete and incomplete pointers" msgstr "" ! #: c-typeck.c:2306 c-typeck.c:2313 msgid "ordered comparison of pointer with integer zero" msgstr "" ! #: c-typeck.c:2339 cp/typeck.c:3697 msgid "unordered comparison on non-floating point argument" msgstr "" ! #: c-typeck.c:2543 msgid "comparison between signed and unsigned" msgstr "" ! #: c-typeck.c:2589 cp/typeck.c:3943 msgid "comparison of promoted ~unsigned with constant" msgstr "" ! #: c-typeck.c:2597 cp/typeck.c:3951 msgid "comparison of promoted ~unsigned with unsigned" msgstr "" ! #: c-typeck.c:2656 msgid "pointer of type `void *' used in subtraction" msgstr "" ! #: c-typeck.c:2658 msgid "pointer to a function used in subtraction" msgstr "" ! #: c-typeck.c:2755 msgid "wrong type argument to unary plus" msgstr "" ! #: c-typeck.c:2766 msgid "wrong type argument to unary minus" msgstr "" ! #: c-typeck.c:2778 msgid "ISO C does not support `~' for complex conjugation" msgstr "" ! #: c-typeck.c:2784 msgid "wrong type argument to bit-complement" msgstr "" ! #: c-typeck.c:2795 msgid "wrong type argument to abs" msgstr "" ! #: c-typeck.c:2807 msgid "wrong type argument to conjugation" msgstr "" ! #: c-typeck.c:2821 msgid "wrong type argument to unary exclamation mark" msgstr "" ! #: c-typeck.c:2864 msgid "ISO C does not support `++' and `--' on complex types" msgstr "" ! #: c-typeck.c:2879 c-typeck.c:2911 ! msgid "wrong type argument to increment" msgstr "" ! #: c-typeck.c:2881 c-typeck.c:2913 ! msgid "wrong type argument to decrement" msgstr "" ! #: c-typeck.c:2902 ! msgid "increment of pointer to unknown structure" msgstr "" ! #: c-typeck.c:2904 ! msgid "decrement of pointer to unknown structure" msgstr "" ! #: c-typeck.c:3041 msgid "ISO C forbids the address of a cast expression" msgstr "" ! #: c-typeck.c:3051 msgid "invalid lvalue in unary `&'" msgstr "" ! #: c-typeck.c:3083 #, c-format msgid "attempt to take address of bit-field structure member `%s'" msgstr "" ! #: c-typeck.c:3192 c-typeck.c:4618 c-typeck.c:4634 c-typeck.c:4650 ! #: final.c:2981 final.c:2983 gcc.c:4462 rtl-error.c:121 tradcif.y:532 ! #: tradcpp.c:4134 config/cris/cris.c:515 cp/typeck.c:4650 java/expr.c:386 ! #: java/verify.c:1464 java/verify.c:1465 java/verify.c:1480 #, c-format msgid "%s" msgstr "" ! #: c-typeck.c:3253 msgid "ISO C forbids use of conditional expressions as lvalues" msgstr "" ! #: c-typeck.c:3256 msgid "ISO C forbids use of compound expressions as lvalues" msgstr "" ! #: c-typeck.c:3259 msgid "ISO C forbids use of cast expressions as lvalues" msgstr "" ! #: c-typeck.c:3276 #, c-format msgid "%s of read-only member `%s'" msgstr "" ! #: c-typeck.c:3280 #, c-format msgid "%s of read-only variable `%s'" msgstr "" ! #: c-typeck.c:3283 #, c-format msgid "%s of read-only location" msgstr "" ! #: c-typeck.c:3301 #, c-format ! msgid "cannot take address of bit-field `%s'" msgstr "" ! #: c-typeck.c:3329 #, c-format msgid "global register variable `%s' used in nested function" msgstr "" ! #: c-typeck.c:3333 #, c-format msgid "register variable `%s' used in nested function" msgstr "" ! #: c-typeck.c:3340 #, c-format msgid "address of global register variable `%s' requested" msgstr "" ! #: c-typeck.c:3352 msgid "cannot put object with volatile field into register" msgstr "" ! #: c-typeck.c:3356 #, c-format msgid "address of register variable `%s' requested" msgstr "" ! #: c-typeck.c:3464 msgid "signed and unsigned type in conditional expression" msgstr "" ! #: c-typeck.c:3471 msgid "ISO C forbids conditional expr with only one void side" msgstr "" ! #: c-typeck.c:3487 c-typeck.c:3494 msgid "ISO C forbids conditional expr between `void *' and function pointer" msgstr "" ! #: c-typeck.c:3500 msgid "pointer type mismatch in conditional expression" msgstr "" ! #: c-typeck.c:3507 c-typeck.c:3517 msgid "pointer/integer type mismatch in conditional expression" msgstr "" ! #: c-typeck.c:3531 msgid "type mismatch in conditional expression" msgstr "" ! #: c-typeck.c:3602 cp/typeck.c:4907 msgid "left-hand operand of comma expression has no effect" msgstr "" ! #: c-typeck.c:3641 msgid "cast specifies array type" msgstr "" ! #: c-typeck.c:3647 msgid "cast specifies function type" msgstr "" ! #: c-typeck.c:3657 msgid "ISO C forbids casting nonscalar to the same type" msgstr "" ! #: c-typeck.c:3676 msgid "ISO C forbids casts to union type" msgstr "" ! #: c-typeck.c:3692 msgid "cast to union type from type not present in union" msgstr "" + #: c-typeck.c:3743 + msgid "cast adds new qualifiers to function type" + msgstr "" + #. There are qualifiers present in IN_OTYPE that are not #. present in IN_TYPE. ! #: c-typeck.c:3748 msgid "cast discards qualifiers from pointer target type" msgstr "" ! #: c-typeck.c:3763 msgid "cast increases required alignment of target type" msgstr "" ! #: c-typeck.c:3769 cp/typeck.c:5337 msgid "cast from pointer to integer of different size" msgstr "" ! #: c-typeck.c:3774 msgid "cast does not match function type" msgstr "" ! #: c-typeck.c:3781 cp/typeck.c:5344 msgid "cast to pointer from integer of different size" msgstr "" #. Now we have handled acceptable kinds of LHS that are not truly lvalues. #. Reject anything strange now. ! #: c-typeck.c:3939 msgid "invalid lvalue in assignment" msgstr "" #. Convert new value to destination type. ! #: c-typeck.c:3948 c-typeck.c:3973 c-typeck.c:3990 cp/typeck.c:5454 ! #: cp/typeck.c:5605 msgid "assignment" msgstr "" ! #: c-typeck.c:4157 c-typeck.c:4224 #, c-format msgid "%s makes qualified function pointer from unqualified" msgstr "" ! #: c-typeck.c:4161 c-typeck.c:4204 #, c-format msgid "%s discards qualifiers from pointer target type" msgstr "" ! #: c-typeck.c:4167 msgid "ISO C prohibits argument conversion to union type" msgstr "" ! #: c-typeck.c:4196 #, c-format msgid "ISO C forbids %s between function pointer and `void *'" msgstr "" ! #: c-typeck.c:4213 #, c-format msgid "pointer targets in %s differ in signedness" msgstr "" ! #: c-typeck.c:4229 #, c-format msgid "%s from incompatible pointer type" msgstr "" ! #: c-typeck.c:4245 #, c-format msgid "%s makes pointer from integer without a cast" msgstr "" ! #: c-typeck.c:4253 #, c-format msgid "%s makes integer from pointer without a cast" msgstr "" ! #: c-typeck.c:4267 c-typeck.c:4270 #, c-format msgid "incompatible type for argument %d of `%s'" msgstr "" ! #: c-typeck.c:4274 #, c-format msgid "incompatible type for argument %d of indirect function call" msgstr "" ! #: c-typeck.c:4278 #, c-format msgid "incompatible types in %s" msgstr "" #. Function name is known; supply it. ! #: c-typeck.c:4333 #, c-format msgid "passing arg %d of `%s'" msgstr "" #. Function name unknown (call through ptr); just give arg number. ! #: c-typeck.c:4343 #, c-format msgid "passing arg %d of pointer to function" msgstr "" ! #: c-typeck.c:4410 msgid "initializer for static variable is not constant" msgstr "" ! #: c-typeck.c:4416 msgid "initializer for static variable uses complicated arithmetic" msgstr "" ! #: c-typeck.c:4424 msgid "aggregate initializer is not constant" msgstr "" ! #: c-typeck.c:4426 msgid "aggregate initializer uses complicated arithmetic" msgstr "" ! #: c-typeck.c:4433 msgid "traditional C rejects automatic aggregate initialization" msgstr "" *************** msgstr "" *** 2918,3454 **** msgid "(near initialization for `%s')" msgstr "" ! #: c-typeck.c:4705 cp/typeck2.c:518 msgid "char-array initialized from wide string" msgstr "" ! #: c-typeck.c:4712 cp/typeck2.c:525 msgid "int-array initialized from non-wide string" msgstr "" ! #: c-typeck.c:4729 cp/typeck2.c:541 msgid "initializer-string for array of chars is too long" msgstr "" ! #: c-typeck.c:4756 msgid "array initialized from non-constant array expression" msgstr "" ! #: c-typeck.c:4773 c-typeck.c:4775 c-typeck.c:4791 c-typeck.c:4812 ! #: c-typeck.c:6207 msgid "initializer element is not constant" msgstr "" ! #: c-typeck.c:4807 msgid "initialization" msgstr "" ! #: c-typeck.c:4818 c-typeck.c:6212 msgid "initializer element is not computable at load time" msgstr "" ! #: c-typeck.c:4855 c-typeck.c:4871 cp/typeck2.c:618 msgid "invalid initializer" msgstr "" ! #: c-typeck.c:5339 msgid "extra brace group at end of initializer" msgstr "" ! #: c-typeck.c:5359 msgid "missing braces around initializer" msgstr "" ! #: c-typeck.c:5403 msgid "braces around scalar initializer" msgstr "" ! #: c-typeck.c:5455 msgid "initialization of flexible array member in a nested context" msgstr "" ! #: c-typeck.c:5457 msgid "initialization of a flexible array member" msgstr "" ! #: c-typeck.c:5467 ! msgid "deprecated initialization of zero-length array" ! msgstr "" ! ! #: c-typeck.c:5472 ! msgid "initialization of zero-length array before end of structure" ! msgstr "" ! ! #: c-typeck.c:5477 ! msgid "initialization of zero-length array inside a nested context" ! msgstr "" ! ! #: c-typeck.c:5496 msgid "missing initializer" msgstr "" ! #: c-typeck.c:5521 msgid "empty scalar initializer" msgstr "" ! #: c-typeck.c:5526 msgid "extra elements in scalar initializer" msgstr "" ! #: c-typeck.c:5610 msgid "initialization designators may not nest" msgstr "" ! #: c-typeck.c:5631 c-typeck.c:5701 msgid "array index in non-array initializer" msgstr "" ! #: c-typeck.c:5636 c-typeck.c:5753 msgid "field name not in record or union initializer" msgstr "" ! #: c-typeck.c:5697 c-typeck.c:5699 msgid "nonconstant array index in initializer" msgstr "" ! #: c-typeck.c:5704 msgid "array index in initializer exceeds array bounds" msgstr "" ! #: c-typeck.c:5715 msgid "empty index range in initializer" msgstr "" ! #: c-typeck.c:5724 msgid "array index range in initializer exceeds array bounds" msgstr "" ! #: c-typeck.c:5765 #, c-format msgid "unknown field `%s' specified in initializer" msgstr "" ! #: c-typeck.c:5802 c-typeck.c:5823 c-typeck.c:6277 msgid "initialized field with side-effects overwritten" msgstr "" ! #: c-typeck.c:6490 msgid "excess elements in char array initializer" msgstr "" ! #: c-typeck.c:6497 c-typeck.c:6536 msgid "excess elements in struct initializer" msgstr "" ! #: c-typeck.c:6603 msgid "excess elements in union initializer" msgstr "" ! #: c-typeck.c:6620 msgid "traditional C rejects initialization of unions" msgstr "" ! #: c-typeck.c:6683 msgid "excess elements in array initializer" msgstr "" ! #: c-typeck.c:6709 msgid "excess elements in scalar initializer" msgstr "" ! #: c-typeck.c:6793 msgid "asm template is not a string constant" msgstr "" ! #: c-typeck.c:6825 msgid "invalid lvalue in asm statement" msgstr "" ! #: c-typeck.c:6898 msgid "modification by `asm'" msgstr "" ! #: c-typeck.c:6917 cp/typeck.c:6589 msgid "function declared `noreturn' has a `return' statement" msgstr "" ! #: c-typeck.c:6924 msgid "`return' with no value, in function returning non-void" msgstr "" ! #: c-typeck.c:6930 msgid "`return' with a value, in function returning void" msgstr "" ! #: c-typeck.c:6934 msgid "return" msgstr "" ! #: c-typeck.c:6985 msgid "function returns address of local variable" msgstr "" ! #: c-typeck.c:7043 cp/semantics.c:533 msgid "switch quantity not an integer" msgstr "" ! #: c-typeck.c:7054 msgid "`long' switch expression not converted to `int' in ISO C" msgstr "" ! #: c-typeck.c:7097 cp/decl.c:5228 msgid "case label not within a switch statement" msgstr "" ! #: c-typeck.c:7099 cp/decl.c:5233 msgid "`default' label not within a switch statement" msgstr "" ! #: calls.c:1877 #, c-format msgid "inlining failed in call to `%s'" msgstr "" ! #: calls.c:1878 calls.c:2191 msgid "called from here" msgstr "" ! #: calls.c:2190 #, c-format msgid "can't inline call to `%s'" msgstr "" ! #: calls.c:2228 msgid "function call has aggregate value" msgstr "" ! #: calls.c:4604 ! msgid "variable offset is passed paritially in stack and in reg" msgstr "" ! #: calls.c:4606 msgid "variable size is passed partially in stack and in reg" msgstr "" ! #: collect2.c:454 msgid "internal error" msgstr "" ! #: collect2.c:935 msgid "no arguments" msgstr "" ! #: collect2.c:1290 collect2.c:1438 collect2.c:1482 #, c-format msgid "fopen %s" msgstr "" ! #: collect2.c:1293 collect2.c:1443 collect2.c:1485 #, c-format msgid "fclose %s" msgstr "" ! #: collect2.c:1302 #, c-format msgid "collect2 version %s" msgstr "" ! #: collect2.c:1392 #, c-format msgid "%d constructor(s) found\n" msgstr "" ! #: collect2.c:1393 #, c-format msgid "%d destructor(s) found\n" msgstr "" ! #: collect2.c:1394 #, c-format msgid "%d frame table(s) found\n" msgstr "" ! #: collect2.c:1546 #, c-format msgid "%s terminated with signal %d [%s]%s" msgstr "" ! #: collect2.c:1565 #, c-format msgid "%s returned %d exit status" msgstr "" ! #: collect2.c:1593 #, c-format msgid "[cannot find %s]" msgstr "" ! #: collect2.c:1608 #, c-format msgid "cannot find `%s'" msgstr "" ! #: collect2.c:1619 collect2.c:1622 #, c-format msgid "redirecting stdout: %s" msgstr "" ! #: collect2.c:1665 #, c-format msgid "[Leaving %s]\n" msgstr "" ! #: collect2.c:1906 #, c-format msgid "" "\n" "write_c_file - output name is %s, prefix is %s\n" msgstr "" ! #: collect2.c:2124 msgid "cannot find `nm'" msgstr "" ! #: collect2.c:2134 collect2.c:2576 msgid "pipe" msgstr "" ! #: collect2.c:2138 collect2.c:2580 msgid "fdopen" msgstr "" ! #: collect2.c:2164 collect2.c:2606 #, c-format msgid "dup2 %d 1" msgstr "" ! #: collect2.c:2167 collect2.c:2170 collect2.c:2183 collect2.c:2609 ! #: collect2.c:2612 collect2.c:2625 #, c-format msgid "close %d" msgstr "" ! #: collect2.c:2173 #, c-format msgid "execvp %s" msgstr "" ! #: collect2.c:2227 #, c-format msgid "init function found in object %s" msgstr "" ! #: collect2.c:2235 #, c-format msgid "fini function found in object %s" msgstr "" ! #: collect2.c:2258 collect2.c:2664 msgid "fclose" msgstr "" ! #: collect2.c:2303 #, c-format msgid "unable to open file '%s'" msgstr "" ! #: collect2.c:2305 #, c-format msgid "unable to stat file '%s'" msgstr "" ! #: collect2.c:2311 #, c-format msgid "unable to mmap file '%s'" msgstr "" ! #: collect2.c:2464 msgid "not found\n" msgstr "" ! #: collect2.c:2466 collect2.c:2643 #, c-format msgid "dynamic dependency %s not found" msgstr "" ! #: collect2.c:2486 #, c-format msgid "bad magic number in file '%s'" msgstr "" ! #: collect2.c:2508 msgid "dynamic dependencies.\n" msgstr "" ! #: collect2.c:2567 msgid "cannot find `ldd'" msgstr "" ! #: collect2.c:2615 #, c-format msgid "execv %s" msgstr "" ! #: collect2.c:2628 msgid "" "\n" "ldd output with constructors/destructors.\n" msgstr "" ! #: collect2.c:2655 #, c-format msgid "unable to open dynamic dependency '%s'" msgstr "" ! #: collect2.c:2769 #, c-format msgid "%s: not a COFF file" msgstr "" ! #: collect2.c:2888 #, c-format msgid "%s: cannot open as COFF file" msgstr "" ! #: collect2.c:2944 #, c-format ! msgid "Library lib%s not found" msgstr "" ! #: collect2.c:3073 #, c-format msgid "open %s" msgstr "" ! #: collect2.c:3096 msgid "incompatibilities between object file & expected values" msgstr "" ! #: collect2.c:3169 #, c-format msgid "" "\n" "Processing symbol table #%d, offset = 0x%.8lx, kind = %s\n" msgstr "" ! #: collect2.c:3178 msgid "string section missing" msgstr "" ! #: collect2.c:3181 msgid "section pointer missing" msgstr "" ! #: collect2.c:3229 msgid "no symbol table found" msgstr "" ! #: collect2.c:3242 msgid "no cmd_strings found" msgstr "" ! #: collect2.c:3254 msgid "" "\n" "Updating header and load commands.\n" "\n" msgstr "" ! #: collect2.c:3261 #, c-format msgid "load command map, %d cmds, new size %ld.\n" msgstr "" ! #: collect2.c:3292 msgid "" "writing load commands.\n" "\n" msgstr "" ! #: collect2.c:3312 #, c-format msgid "close %s" msgstr "" ! #: collect2.c:3386 msgid "could not convert 0x%l.8x into a region" msgstr "" ! #: collect2.c:3390 #, c-format msgid "%s function, region %d, offset = %ld (0x%.8lx)\n" msgstr "" ! #: collect2.c:3517 msgid "bad magic number" msgstr "" ! #: collect2.c:3518 msgid "bad header version" msgstr "" ! #: collect2.c:3519 msgid "bad raw header version" msgstr "" ! #: collect2.c:3520 msgid "raw header buffer too small" msgstr "" ! #: collect2.c:3521 msgid "old raw header file" msgstr "" ! #: collect2.c:3522 msgid "unsupported version" msgstr "" ! #: collect2.c:3524 #, c-format msgid "unknown {de,en}code_mach_o_hdr return value %d" msgstr "" ! #: collect2.c:3544 #, c-format msgid "fstat %s" msgstr "" ! #: collect2.c:3581 collect2.c:3629 #, c-format msgid "lseek %s 0" msgstr "" ! #: collect2.c:3585 #, c-format msgid "read %s" msgstr "" ! #: collect2.c:3588 #, c-format msgid "read %ld bytes, expected %ld, from %s" msgstr "" ! #: collect2.c:3609 #, c-format msgid "msync %s" msgstr "" ! #: collect2.c:3616 #, c-format msgid "munmap %s" msgstr "" ! #: collect2.c:3633 #, c-format msgid "write %s" msgstr "" ! #: collect2.c:3636 #, c-format msgid "wrote %ld bytes, expected %ld, to %s" msgstr "" ! #: combine.c:12818 #, c-format msgid "" ";; Combiner statistics: %d attempts, %d substitutions (%d requiring new " --- 3144,3780 ---- msgid "(near initialization for `%s')" msgstr "" ! #: c-typeck.c:4705 cp/typeck2.c:513 msgid "char-array initialized from wide string" msgstr "" ! #: c-typeck.c:4712 cp/typeck2.c:520 msgid "int-array initialized from non-wide string" msgstr "" ! #: c-typeck.c:4730 cp/typeck2.c:536 msgid "initializer-string for array of chars is too long" msgstr "" ! #: c-typeck.c:4768 msgid "array initialized from non-constant array expression" msgstr "" ! #: c-typeck.c:4785 c-typeck.c:4787 c-typeck.c:4803 c-typeck.c:4824 ! #: c-typeck.c:6262 msgid "initializer element is not constant" msgstr "" ! #: c-typeck.c:4819 msgid "initialization" msgstr "" ! #: c-typeck.c:4830 c-typeck.c:6267 msgid "initializer element is not computable at load time" msgstr "" ! #: c-typeck.c:4867 c-typeck.c:4883 cp/typeck2.c:613 msgid "invalid initializer" msgstr "" ! #: c-typeck.c:5376 msgid "extra brace group at end of initializer" msgstr "" ! #: c-typeck.c:5396 msgid "missing braces around initializer" msgstr "" ! #: c-typeck.c:5456 msgid "braces around scalar initializer" msgstr "" ! #: c-typeck.c:5504 msgid "initialization of flexible array member in a nested context" msgstr "" ! #: c-typeck.c:5506 msgid "initialization of a flexible array member" msgstr "" ! #: c-typeck.c:5537 msgid "missing initializer" msgstr "" ! #: c-typeck.c:5563 msgid "empty scalar initializer" msgstr "" ! #: c-typeck.c:5568 msgid "extra elements in scalar initializer" msgstr "" ! #: c-typeck.c:5654 msgid "initialization designators may not nest" msgstr "" ! #: c-typeck.c:5675 c-typeck.c:5746 msgid "array index in non-array initializer" msgstr "" ! #: c-typeck.c:5680 c-typeck.c:5798 msgid "field name not in record or union initializer" msgstr "" ! #: c-typeck.c:5742 c-typeck.c:5744 msgid "nonconstant array index in initializer" msgstr "" ! #: c-typeck.c:5749 msgid "array index in initializer exceeds array bounds" msgstr "" ! #: c-typeck.c:5760 msgid "empty index range in initializer" msgstr "" ! #: c-typeck.c:5769 msgid "array index range in initializer exceeds array bounds" msgstr "" ! #: c-typeck.c:5810 #, c-format msgid "unknown field `%s' specified in initializer" msgstr "" ! #: c-typeck.c:5847 c-typeck.c:5868 c-typeck.c:6330 msgid "initialized field with side-effects overwritten" msgstr "" ! #: c-typeck.c:6540 msgid "excess elements in char array initializer" msgstr "" ! #: c-typeck.c:6547 c-typeck.c:6593 msgid "excess elements in struct initializer" msgstr "" ! #: c-typeck.c:6608 ! msgid "non-static initialization of a flexible array member" ! msgstr "" ! ! #: c-typeck.c:6670 msgid "excess elements in union initializer" msgstr "" ! #: c-typeck.c:6691 msgid "traditional C rejects initialization of unions" msgstr "" ! #: c-typeck.c:6754 msgid "excess elements in array initializer" msgstr "" ! #: c-typeck.c:6783 ! msgid "excess elements in vector initializer" ! msgstr "" ! ! #: c-typeck.c:6805 msgid "excess elements in scalar initializer" msgstr "" ! #: c-typeck.c:6916 msgid "asm template is not a string constant" msgstr "" ! #: c-typeck.c:6948 msgid "invalid lvalue in asm statement" msgstr "" ! #: c-typeck.c:7019 msgid "modification by `asm'" msgstr "" ! #: c-typeck.c:7038 cp/typeck.c:6453 msgid "function declared `noreturn' has a `return' statement" msgstr "" ! #: c-typeck.c:7045 msgid "`return' with no value, in function returning non-void" msgstr "" ! #: c-typeck.c:7051 msgid "`return' with a value, in function returning void" msgstr "" ! #: c-typeck.c:7055 msgid "return" msgstr "" ! #: c-typeck.c:7107 msgid "function returns address of local variable" msgstr "" ! #: c-typeck.c:7163 cp/semantics.c:529 msgid "switch quantity not an integer" msgstr "" ! #: c-typeck.c:7173 msgid "`long' switch expression not converted to `int' in ISO C" msgstr "" ! #: c-typeck.c:7208 cp/decl.c:5232 msgid "case label not within a switch statement" msgstr "" ! #: c-typeck.c:7210 cp/decl.c:5237 msgid "`default' label not within a switch statement" msgstr "" ! #: calls.c:1902 #, c-format msgid "inlining failed in call to `%s'" msgstr "" ! #: calls.c:1903 calls.c:2209 msgid "called from here" msgstr "" ! #: calls.c:2208 #, c-format msgid "can't inline call to `%s'" msgstr "" ! #: calls.c:2238 msgid "function call has aggregate value" msgstr "" ! #: calls.c:4545 ! msgid "variable offset is passed partially in stack and in reg" msgstr "" ! #: calls.c:4547 msgid "variable size is passed partially in stack and in reg" msgstr "" ! #: cfgrtl.c:1624 ! #, c-format ! msgid "end insn %d for block %d not found in the insn stream" ! msgstr "" ! ! #: cfgrtl.c:1638 ! #, c-format ! msgid "insn %d is in multiple basic blocks (%d and %d)" ! msgstr "" ! ! #: cfgrtl.c:1650 ! #, c-format ! msgid "head insn %d for block %d not found in the insn stream" ! msgstr "" ! ! #: cfgrtl.c:1669 ! #, c-format ! msgid "verify_flow_info: Duplicate edge %i->%i" ! msgstr "" ! ! #: cfgrtl.c:1688 ! #, c-format ! msgid "verify_flow_info: Incorrect blocks for fallthru %i->%i" ! msgstr "" ! ! #: cfgrtl.c:1703 ! #, c-format ! msgid "verify_flow_info: Incorrect fallthru %i->%i" ! msgstr "" ! ! #: cfgrtl.c:1705 ! msgid "wrong insn in the fallthru edge" ! msgstr "" ! ! #: cfgrtl.c:1712 ! #, c-format ! msgid "verify_flow_info: Basic block %d succ edge is corrupted" ! msgstr "" ! ! #: cfgrtl.c:1736 ! #, c-format ! msgid "missing barrier after block %i" ! msgstr "" ! ! #: cfgrtl.c:1746 ! #, c-format ! msgid "basic block %d pred edge is corrupted" ! msgstr "" ! ! #: cfgrtl.c:1763 ! #, c-format ! msgid "insn %d inside basic block %d but block_for_insn is NULL" ! msgstr "" ! ! #: cfgrtl.c:1767 ! #, c-format ! msgid "insn %d inside basic block %d but block_for_insn is %i" ! msgstr "" ! ! #: cfgrtl.c:1781 cfgrtl.c:1791 ! #, c-format ! msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d" ! msgstr "" ! ! #: cfgrtl.c:1804 ! #, c-format ! msgid "NOTE_INSN_BASIC_BLOCK %d in middle of basic block %d" ! msgstr "" ! ! #: cfgrtl.c:1816 ! #, c-format ! msgid "in basic block %d:" ! msgstr "" ! ! #: cfgrtl.c:1817 ! msgid "flow control insn inside a basic block" ! msgstr "" ! ! #: cfgrtl.c:1836 ! #, c-format ! msgid "basic block %i edge lists are corrupted" ! msgstr "" ! ! #: cfgrtl.c:1850 ! msgid "basic blocks not numbered consecutively" ! msgstr "" ! ! #: cfgrtl.c:1875 ! msgid "insn outside basic block" ! msgstr "" ! ! #: cfgrtl.c:1883 ! msgid "return not followed by barrier" ! msgstr "" ! ! #: cfgrtl.c:1888 ! #, c-format ! msgid "number of bb notes in insn chain (%d) != n_basic_blocks (%d)" ! msgstr "" ! ! #: cfgrtl.c:1892 ! msgid "verify_flow_info failed" ! msgstr "" ! ! #: collect2.c:439 msgid "internal error" msgstr "" ! #: collect2.c:940 msgid "no arguments" msgstr "" ! #: collect2.c:1269 collect2.c:1417 collect2.c:1450 #, c-format msgid "fopen %s" msgstr "" ! #: collect2.c:1272 collect2.c:1422 collect2.c:1453 #, c-format msgid "fclose %s" msgstr "" ! #: collect2.c:1281 #, c-format msgid "collect2 version %s" msgstr "" ! #: collect2.c:1371 #, c-format msgid "%d constructor(s) found\n" msgstr "" ! #: collect2.c:1372 #, c-format msgid "%d destructor(s) found\n" msgstr "" ! #: collect2.c:1373 #, c-format msgid "%d frame table(s) found\n" msgstr "" ! #: collect2.c:1514 #, c-format msgid "%s terminated with signal %d [%s]%s" msgstr "" ! #: collect2.c:1533 #, c-format msgid "%s returned %d exit status" msgstr "" ! #: collect2.c:1561 #, c-format msgid "[cannot find %s]" msgstr "" ! #: collect2.c:1576 #, c-format msgid "cannot find `%s'" msgstr "" ! #: collect2.c:1587 collect2.c:1590 #, c-format msgid "redirecting stdout: %s" msgstr "" ! #: collect2.c:1633 #, c-format msgid "[Leaving %s]\n" msgstr "" ! #: collect2.c:1876 #, c-format msgid "" "\n" "write_c_file - output name is %s, prefix is %s\n" msgstr "" ! #: collect2.c:2089 msgid "cannot find `nm'" msgstr "" ! #: collect2.c:2099 collect2.c:2541 msgid "pipe" msgstr "" ! #: collect2.c:2103 collect2.c:2545 msgid "fdopen" msgstr "" ! #: collect2.c:2129 collect2.c:2571 #, c-format msgid "dup2 %d 1" msgstr "" ! #: collect2.c:2132 collect2.c:2135 collect2.c:2148 collect2.c:2574 ! #: collect2.c:2577 collect2.c:2590 #, c-format msgid "close %d" msgstr "" ! #: collect2.c:2138 #, c-format msgid "execvp %s" msgstr "" ! #: collect2.c:2192 #, c-format msgid "init function found in object %s" msgstr "" ! #: collect2.c:2200 #, c-format msgid "fini function found in object %s" msgstr "" ! #: collect2.c:2223 collect2.c:2629 msgid "fclose" msgstr "" ! #: collect2.c:2268 #, c-format msgid "unable to open file '%s'" msgstr "" ! #: collect2.c:2270 #, c-format msgid "unable to stat file '%s'" msgstr "" ! #: collect2.c:2276 #, c-format msgid "unable to mmap file '%s'" msgstr "" ! #: collect2.c:2429 msgid "not found\n" msgstr "" ! #: collect2.c:2431 collect2.c:2608 #, c-format msgid "dynamic dependency %s not found" msgstr "" ! #: collect2.c:2451 #, c-format msgid "bad magic number in file '%s'" msgstr "" ! #: collect2.c:2473 msgid "dynamic dependencies.\n" msgstr "" ! #: collect2.c:2532 msgid "cannot find `ldd'" msgstr "" ! #: collect2.c:2580 #, c-format msgid "execv %s" msgstr "" ! #: collect2.c:2593 msgid "" "\n" "ldd output with constructors/destructors.\n" msgstr "" ! #: collect2.c:2620 #, c-format msgid "unable to open dynamic dependency '%s'" msgstr "" ! #: collect2.c:2734 #, c-format msgid "%s: not a COFF file" msgstr "" ! #: collect2.c:2853 #, c-format msgid "%s: cannot open as COFF file" msgstr "" ! #: collect2.c:2909 #, c-format ! msgid "library lib%s not found" msgstr "" ! #: collect2.c:3038 #, c-format msgid "open %s" msgstr "" ! #: collect2.c:3061 msgid "incompatibilities between object file & expected values" msgstr "" ! #: collect2.c:3134 #, c-format msgid "" "\n" "Processing symbol table #%d, offset = 0x%.8lx, kind = %s\n" msgstr "" ! #: collect2.c:3143 msgid "string section missing" msgstr "" ! #: collect2.c:3146 msgid "section pointer missing" msgstr "" ! #: collect2.c:3194 msgid "no symbol table found" msgstr "" ! #: collect2.c:3207 msgid "no cmd_strings found" msgstr "" ! #: collect2.c:3219 msgid "" "\n" "Updating header and load commands.\n" "\n" msgstr "" ! #: collect2.c:3226 #, c-format msgid "load command map, %d cmds, new size %ld.\n" msgstr "" ! #: collect2.c:3257 msgid "" "writing load commands.\n" "\n" msgstr "" ! #: collect2.c:3277 #, c-format msgid "close %s" msgstr "" ! #: collect2.c:3351 msgid "could not convert 0x%l.8x into a region" msgstr "" ! #: collect2.c:3355 #, c-format msgid "%s function, region %d, offset = %ld (0x%.8lx)\n" msgstr "" ! #: collect2.c:3482 msgid "bad magic number" msgstr "" ! #: collect2.c:3483 msgid "bad header version" msgstr "" ! #: collect2.c:3484 msgid "bad raw header version" msgstr "" ! #: collect2.c:3485 msgid "raw header buffer too small" msgstr "" ! #: collect2.c:3486 msgid "old raw header file" msgstr "" ! #: collect2.c:3487 msgid "unsupported version" msgstr "" ! #: collect2.c:3489 #, c-format msgid "unknown {de,en}code_mach_o_hdr return value %d" msgstr "" ! #: collect2.c:3509 #, c-format msgid "fstat %s" msgstr "" ! #: collect2.c:3546 collect2.c:3594 #, c-format msgid "lseek %s 0" msgstr "" ! #: collect2.c:3550 #, c-format msgid "read %s" msgstr "" ! #: collect2.c:3553 #, c-format msgid "read %ld bytes, expected %ld, from %s" msgstr "" ! #: collect2.c:3574 #, c-format msgid "msync %s" msgstr "" ! #: collect2.c:3581 #, c-format msgid "munmap %s" msgstr "" ! #: collect2.c:3598 #, c-format msgid "write %s" msgstr "" ! #: collect2.c:3601 #, c-format msgid "wrote %ld bytes, expected %ld, to %s" msgstr "" ! #: combine.c:12769 #, c-format msgid "" ";; Combiner statistics: %d attempts, %d substitutions (%d requiring new " *************** msgid "" *** 3457,3463 **** "\n" msgstr "" ! #: combine.c:12828 #, c-format msgid "" "\n" --- 3783,3789 ---- "\n" msgstr "" ! #: combine.c:12779 #, c-format msgid "" "\n" *************** msgid "" *** 3465,3520 **** ";; %d successes.\n" msgstr "" #. Run-time compilation parameters selecting different hardware subsets. #: config/1750a/1750a.h:39 msgid "Use VAX-C alignment" msgstr "" ! #: config/a29k/a29k.c:1006 #, c-format msgid "invalid %%Q value" msgstr "" ! #: config/a29k/a29k.c:1012 config/alpha/alpha.c:4055 #, c-format msgid "invalid %%C value" msgstr "" ! #: config/a29k/a29k.c:1018 config/alpha/alpha.c:3919 ! #: config/rs6000/rs6000.c:4015 #, c-format msgid "invalid %%N value" msgstr "" ! #: config/a29k/a29k.c:1024 config/alpha/alpha.c:3990 ! #: config/rs6000/rs6000.c:3977 #, c-format msgid "invalid %%M value" msgstr "" ! #: config/a29k/a29k.c:1030 config/alpha/alpha.c:3982 ! #: config/rs6000/rs6000.c:3942 #, c-format msgid "invalid %%m value" msgstr "" ! #: config/a29k/a29k.c:1130 config/alpha/alpha.c:3943 config/romp/romp.c:682 #, c-format msgid "invalid %%L value" msgstr "" ! #: config/a29k/a29k.c:1135 config/rs6000/rs6000.c:4023 #, c-format msgid "invalid %%O value" msgstr "" ! #: config/a29k/a29k.c:1141 config/alpha/alpha.c:3927 ! #: config/rs6000/rs6000.c:4042 #, c-format msgid "invalid %%P value" msgstr "" ! #: config/a29k/a29k.c:1151 #, c-format msgid "invalid %%V value" msgstr "" --- 3791,8171 ---- ";; %d successes.\n" msgstr "" + #: convert.c:67 + msgid "cannot convert to a pointer type" + msgstr "" + + #: convert.c:100 + msgid "pointer value used where a floating point value was expected" + msgstr "" + + #: convert.c:104 + msgid "aggregate value used where a float was expected" + msgstr "" + + #: convert.c:130 + msgid "conversion to incomplete type" + msgstr "" + + #: convert.c:390 convert.c:470 + msgid "can't convert between vector values of different size" + msgstr "" + + #: convert.c:396 + msgid "aggregate value used where an integer was expected" + msgstr "" + + #: convert.c:448 f/com.c:1073 + msgid "pointer value used where a complex was expected" + msgstr "" + + #: convert.c:452 f/com.c:1075 + msgid "aggregate value used where a complex was expected" + msgstr "" + + #: convert.c:476 + msgid "can't convert value to a vector" + msgstr "" + + #: cpperror.c:125 + msgid "internal error: " + msgstr "" + + #: cpperror.c:132 tradcpp.c:4690 + msgid "warning: " + msgstr "" + + #: cpperror.c:209 cpperror.c:299 cppfiles.c:691 gcc.c:6307 tradcpp.c:4728 + #, c-format + msgid "%s: %s" + msgstr "" + + #: cppexp.c:154 + msgid "floating point numbers are not valid in #if" + msgstr "" + + #: cppexp.c:176 + msgid "traditional C rejects the `U' suffix" + msgstr "" + + #: cppexp.c:179 + msgid "too many 'l' suffixes in integer constant" + msgstr "" + + #: cppexp.c:183 + msgid "integer constant contains digits beyond the radix" + msgstr "" + + #: cppexp.c:186 + msgid "integer constant out of range" + msgstr "" + + #: cppexp.c:192 + msgid "integer constant is so large that it is unsigned" + msgstr "" + + #: cppexp.c:201 + #, c-format + msgid "invalid suffix '%.*s' on integer constant" + msgstr "" + + #: cppexp.c:234 + msgid "missing ')' after \"defined\"" + msgstr "" + + #: cppexp.c:240 + msgid "operator \"defined\" requires an identifier" + msgstr "" + + #: cppexp.c:248 + #, c-format + msgid "(\"%s\" is an alternative token for \"%s\" in C++)" + msgstr "" + + #: cppexp.c:259 + msgid "this use of \"defined\" may not be portable" + msgstr "" + + #: cppexp.c:307 + msgid "string constants are not valid in #if" + msgstr "" + + #: cppexp.c:311 + #, c-format + msgid "invalid character '%c' in #if" + msgstr "" + + #: cppexp.c:313 + #, c-format + msgid "invalid character '\\%03o' in #if" + msgstr "" + + #: cppexp.c:330 + #, c-format + msgid "ISO C++ does not permit \"%s\" in #if" + msgstr "" + + #: cppexp.c:341 + #, c-format + msgid "\"%s\" is not defined" + msgstr "" + + #: cppexp.c:367 + #, c-format + msgid "\"%s\" is not valid in #if expressions" + msgstr "" + + #: cppexp.c:382 + msgid "integer overflow in preprocessor expression" + msgstr "" + + #: cppexp.c:612 + msgid "missing binary operator" + msgstr "" + + #: cppexp.c:647 + msgid "void expression between '(' and ')'" + msgstr "" + + #: cppexp.c:649 + #, c-format + msgid "operator '%s' has no right operand" + msgstr "" + + #: cppexp.c:661 + #, c-format + msgid "impossible operator '%s'" + msgstr "" + + #: cppexp.c:737 tradcif.y:111 tradcif.y:122 + msgid "division by zero in #if" + msgstr "" + + #: cppexp.c:771 + msgid "comma operator in operand of #if" + msgstr "" + + #: cppexp.c:776 + msgid "syntax error '?' without following ':'" + msgstr "" + + #: cppexp.c:779 + msgid "syntax error ':' without preceding '?'" + msgstr "" + + #: cppexp.c:787 + msgid "missing ')' in expression" + msgstr "" + + #: cppexp.c:794 + msgid "missing '(' in expression" + msgstr "" + + #: cppexp.c:820 + #, c-format + msgid "missing binary operator before '%s'" + msgstr "" + + #: cppexp.c:826 + #, c-format + msgid "operator '%s' has no left operand" + msgstr "" + + #: cppexp.c:864 + msgid "unbalanced stack in #if" + msgstr "" + + #: cppexp.c:867 + msgid "#if with no expression" + msgstr "" + + #: cppfiles.c:395 + #, c-format + msgid "%s is too large" + msgstr "" + + #: cppfiles.c:426 + #, c-format + msgid "%s is shorter than expected" + msgstr "" + + #: cppfiles.c:440 + #, c-format + msgid "%s is a block device" + msgstr "" + + #: cppfiles.c:566 + #, c-format + msgid "no include path in which to find %s" + msgstr "" + + #: cppfiles.c:639 + msgid "Multiple include guards may be useful for:\n" + msgstr "" + + #: cppfiles.c:1029 + msgid "absolute file name in remap_filename" + msgstr "" + + #: cppinit.c:230 + #, c-format + msgid "ignoring nonexistent directory \"%s\"\n" + msgstr "" + + #: cppinit.c:237 + #, c-format + msgid "%s: Not a directory" + msgstr "" + + #: cppinit.c:284 + #, c-format + msgid "ignoring duplicate directory \"%s\"\n" + msgstr "" + + #: cppinit.c:312 + #, c-format + msgid "changing search order for system directory \"%s\"" + msgstr "" + + #: cppinit.c:316 + #, c-format + msgid " as it is the same as non-system directory \"%s\"" + msgstr "" + + #: cppinit.c:320 + msgid " as it has already been specified as a non-system directory" + msgstr "" + + #: cppinit.c:936 + msgid "#include \"...\" search starts here:\n" + msgstr "" + + #: cppinit.c:940 + msgid "#include <...> search starts here:\n" + msgstr "" + + #: cppinit.c:943 + msgid "End of search list.\n" + msgstr "" + + #: cppinit.c:1010 + msgid "" + msgstr "" + + #: cppinit.c:1012 + msgid "" + msgstr "" + + #: cppinit.c:1108 tradcpp.c:979 tradcpp.c:989 tradcpp.c:1080 + msgid "I/O error on output" + msgstr "" + + #. Irix6 "cc -n32" and OSF4 cc have problems with char foo[] = ("string"); + #. I.e. a const string initializer with parens around it. That is + #. what N_("string") resolves to, so we make no_* be macros instead. + #: cppinit.c:1156 + #, c-format + msgid "argument missing after %s" + msgstr "" + + #: cppinit.c:1157 + #, c-format + msgid "assertion missing after %s" + msgstr "" + + #: cppinit.c:1158 + #, c-format + msgid "directory name missing after %s" + msgstr "" + + #: cppinit.c:1159 + #, c-format + msgid "file name missing after %s" + msgstr "" + + #: cppinit.c:1160 + #, c-format + msgid "macro name missing after %s" + msgstr "" + + #: cppinit.c:1161 + #, c-format + msgid "path name missing after %s" + msgstr "" + + #: cppinit.c:1162 + #, c-format + msgid "number missing after %s" + msgstr "" + + #: cppinit.c:1163 + #, c-format + msgid "target missing after %s" + msgstr "" + + #: cppinit.c:1351 + #, c-format + msgid "too many filenames. Type %s --help for usage info" + msgstr "" + + #: cppinit.c:1541 tradcpp.c:610 + msgid "output filename specified twice" + msgstr "" + + #: cppinit.c:1653 + msgid "-I- specified twice" + msgstr "" + + #: cppinit.c:1794 + #, c-format + msgid "GNU CPP version %s (cpplib)" + msgstr "" + + #: cppinit.c:1835 tradcpp.c:803 + msgid "you must additionally specify either -M or -MM" + msgstr "" + + #. To keep the lines from getting too long for some compilers, limit + #. to about 500 characters (6 lines) per chunk. + #: cppinit.c:1896 + msgid "" + "Switches:\n" + " -include Include the contents of before other " + "files\n" + " -imacros Accept definition of macros in \n" + " -iprefix Specify as a prefix for next two options\n" + " -iwithprefix Add to the end of the system include path\n" + " -iwithprefixbefore Add to the end of the main include path\n" + " -isystem Add to the start of the system include " + "path\n" + msgstr "" + + #: cppinit.c:1905 + msgid "" + " -idirafter Add to the end of the system include path\n" + " -I Add to the end of the main include path\n" + " -I- Fine-grained include path control; see info " + "docs\n" + " -nostdinc Do not search system include directories\n" + " (dirs specified with -isystem will still be " + "used)\n" + " -nostdinc++ Do not search system include directories for C+" + "+\n" + " -o Put output into \n" + msgstr "" + + #: cppinit.c:1914 + msgid "" + " -pedantic Issue all warnings demanded by strict ISO C\n" + " -pedantic-errors Issue -pedantic warnings as errors instead\n" + " -trigraphs Support ISO C trigraphs\n" + " -lang-c Assume that the input sources are in C\n" + " -lang-c89 Assume that the input sources are in C89\n" + msgstr "" + + #: cppinit.c:1921 + msgid "" + " -lang-c++ Assume that the input sources are in C++\n" + " -lang-objc Assume that the input sources are in ObjectiveC\n" + " -lang-objc++ Assume that the input sources are in ObjectiveC+" + "+\n" + " -lang-asm Assume that the input sources are in assembler\n" + msgstr "" + + #: cppinit.c:1927 + msgid "" + " -std= Specify the conformance standard; one of:\n" + " gnu89, gnu99, c89, c99, iso9899:1990,\n" + " iso9899:199409, iso9899:1999\n" + " -+ Allow parsing of C++ style features\n" + " -w Inhibit warning messages\n" + " -Wtrigraphs Warn if trigraphs are encountered\n" + " -Wno-trigraphs Do not warn about trigraphs\n" + " -Wcomment{s} Warn if one comment starts inside another\n" + msgstr "" + + #: cppinit.c:1937 + msgid "" + " -Wno-comment{s} Do not warn about comments\n" + " -Wtraditional Warn about features not present in traditional " + "C\n" + " -Wno-traditional Do not warn about traditional C\n" + " -Wundef Warn if an undefined macro is used by #if\n" + " -Wno-undef Do not warn about testing undefined macros\n" + " -Wimport Warn about the use of the #import directive\n" + msgstr "" + + #: cppinit.c:1945 + msgid "" + " -Wno-import Do not warn about the use of #import\n" + " -Werror Treat all warnings as errors\n" + " -Wno-error Do not treat warnings as errors\n" + " -Wsystem-headers Do not suppress warnings from system headers\n" + " -Wno-system-headers Suppress warnings from system headers\n" + " -Wall Enable all preprocessor warnings\n" + msgstr "" + + #: cppinit.c:1953 + msgid "" + " -M Generate make dependencies\n" + " -MM As -M, but ignore system header files\n" + " -MD Generate make dependencies and compile\n" + " -MMD As -MD, but ignore system header files\n" + " -MF Write dependency output to the given file\n" + " -MG Treat missing header file as generated files\n" + msgstr "" + + #: cppinit.c:1961 + msgid "" + " -MP\t\t\t Generate phony targets for all headers\n" + " -MQ Add a MAKE-quoted target\n" + " -MT Add an unquoted target\n" + msgstr "" + + #: cppinit.c:1966 + msgid "" + " -D Define a with string '1' as its value\n" + " -D= Define a with as its value\n" + " -A= Assert the to \n" + " -A-= Disable the to \n" + " -U Undefine \n" + " -v Display the version number\n" + msgstr "" + + #: cppinit.c:1974 + msgid "" + " -H Print the name of header files as they are used\n" + " -C Do not discard comments\n" + " -dM Display a list of macro definitions active at " + "end\n" + " -dD Preserve macro definitions in output\n" + " -dN As -dD except that only the names are preserved\n" + " -dI Include #include directives in the output\n" + msgstr "" + + #: cppinit.c:1982 + msgid "" + " -fpreprocessed Treat the input file as already preprocessed\n" + " -ftabstop= Distance between tab stops for column reporting\n" + " -P Do not generate #line directives\n" + " -$ Do not allow '$' in identifiers\n" + " -remap Remap file names when including files\n" + " --version Display version information\n" + " -h or --help Display this information\n" + msgstr "" + + #: cpplex.c:154 + #, c-format + msgid "trigraph ??%c converted to %c" + msgstr "" + + #: cpplex.c:162 + #, c-format + msgid "trigraph ??%c ignored" + msgstr "" + + #: cpplex.c:218 + msgid "backslash and newline separated by space" + msgstr "" + + #: cpplex.c:224 + msgid "backslash-newline at end of file" + msgstr "" + + #: cpplex.c:290 + msgid "\"/*\" within comment" + msgstr "" + + #: cpplex.c:373 + msgid "null character(s) ignored" + msgstr "" + + #: cpplex.c:380 + #, c-format + msgid "%s in preprocessing directive" + msgstr "" + + #: cpplex.c:447 + #, c-format + msgid "attempt to use poisoned \"%s\"" + msgstr "" + + #: cpplex.c:455 + msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro" + msgstr "" + + #: cpplex.c:508 + msgid "'$' character(s) in identifier" + msgstr "" + + #: cpplex.c:589 + #, c-format + msgid "missing terminating %c character" + msgstr "" + + #: cpplex.c:594 + msgid "possible start of unterminated string literal" + msgstr "" + + #: cpplex.c:689 + msgid "multi-line string literals are deprecated" + msgstr "" + + #: cpplex.c:712 + msgid "null character(s) preserved in literal" + msgstr "" + + #: cpplex.c:914 + msgid "no newline at end of file" + msgstr "" + + #: cpplex.c:1034 tradcpp.c:1467 + msgid "unterminated comment" + msgstr "" + + #: cpplex.c:1045 + msgid "C++ style comments are not allowed in ISO C89" + msgstr "" + + #: cpplex.c:1047 + msgid "(this will be reported only once per input file)" + msgstr "" + + #: cpplex.c:1052 + msgid "multi-line comment" + msgstr "" + + #: cpplex.c:1367 + #, c-format + msgid "unknown string token %s\n" + msgstr "" + + #: cpplex.c:1379 + #, c-format + msgid "unspellable token %s" + msgstr "" + + #: cpplex.c:1635 + #, c-format + msgid "the meaning of '\\%c' varies with -traditional" + msgstr "" + + #: cpplex.c:1641 + msgid "incomplete universal-character-name" + msgstr "" + + #: cpplex.c:1655 + #, c-format + msgid "non-hex digit '%c' in universal-character-name" + msgstr "" + + #: cpplex.c:1663 + msgid "universal-character-name on EBCDIC target" + msgstr "" + + #: cpplex.c:1677 + msgid "universal-character-name out of range" + msgstr "" + + #: cpplex.c:1722 + msgid "the meaning of '\\a' varies with -traditional" + msgstr "" + + #: cpplex.c:1729 + #, c-format + msgid "non-ISO-standard escape sequence, '\\%c'" + msgstr "" + + #: cpplex.c:1739 + msgid "the meaning of '\\x' varies with -traditional" + msgstr "" + + #: cpplex.c:1758 f/lex.c:620 + msgid "\\x used with no following hex digits" + msgstr "" + + #: cpplex.c:1762 + msgid "hex escape sequence out of range" + msgstr "" + + #: cpplex.c:1786 + msgid "octal escape sequence out of range" + msgstr "" + + #: cpplex.c:1801 + #, c-format + msgid "unknown escape sequence '\\%c'" + msgstr "" + + #: cpplex.c:1803 + #, c-format + msgid "unknown escape sequence: '\\%03o'" + msgstr "" + + #: cpplex.c:1807 + msgid "escape sequence out of range for character" + msgstr "" + + #: cpplex.c:1904 + msgid "empty character constant" + msgstr "" + + #: cpplex.c:1908 + msgid "character constant too long" + msgstr "" + + #: cpplex.c:1911 + msgid "multi-character character constant" + msgstr "" + + #: cpplib.c:228 + #, c-format + msgid "extra tokens at end of #%s directive" + msgstr "" + + #: cpplib.c:281 + #, c-format + msgid "#%s is a GCC extension" + msgstr "" + + #: cpplib.c:292 + msgid "suggest not using #elif in traditional C" + msgstr "" + + #: cpplib.c:295 + #, c-format + msgid "traditional C ignores #%s with the # indented" + msgstr "" + + #: cpplib.c:299 + #, c-format + msgid "suggest hiding #%s from traditional C with an indented #" + msgstr "" + + #: cpplib.c:333 + msgid "style of line directive is a GCC extension" + msgstr "" + + #: cpplib.c:382 + #, c-format + msgid "invalid preprocessing directive #%s" + msgstr "" + + #: cpplib.c:437 + #, c-format + msgid "no macro name given in #%s directive" + msgstr "" + + #: cpplib.c:441 + #, c-format + msgid "\"%s\" cannot be used as a macro name as it is an operator in C++" + msgstr "" + + #: cpplib.c:444 + msgid "macro names must be identifiers" + msgstr "" + + #: cpplib.c:455 + #, c-format + msgid "\"%s\" cannot be used as a macro name" + msgstr "" + + #: cpplib.c:493 + #, c-format + msgid "undefining \"%s\"" + msgstr "" + + #: cpplib.c:536 + msgid "missing terminating > character" + msgstr "" + + #: cpplib.c:574 + #, c-format + msgid "#%s expects \"FILENAME\" or " + msgstr "" + + #: cpplib.c:585 + #, c-format + msgid "empty file name in #%s" + msgstr "" + + #: cpplib.c:604 + msgid "#include_next in primary source file" + msgstr "" + + #: cpplib.c:611 + msgid "#import is obsolete, use an #ifndef wrapper in the header file" + msgstr "" + + #: cpplib.c:619 + msgid "#include nested too deeply" + msgstr "" + + #: cpplib.c:677 + #, c-format + msgid "invalid flag \"%s\" in line directive" + msgstr "" + + #: cpplib.c:759 + #, c-format + msgid "\"%s\" after #line is not a positive integer" + msgstr "" + + #: cpplib.c:765 + msgid "line number out of range" + msgstr "" + + #: cpplib.c:776 cpplib.c:847 + #, c-format + msgid "\"%s\" is not a valid filename" + msgstr "" + + #: cpplib.c:811 + #, c-format + msgid "\"%s\" after # is not a positive integer" + msgstr "" + + #: cpplib.c:916 + msgid "invalid #ident directive" + msgstr "" + + #: cpplib.c:1004 + #, c-format + msgid "registering \"%s\" as both a pragma and a pragma namespace" + msgstr "" + + #: cpplib.c:1007 + #, c-format + msgid "#pragma %s %s is already registered" + msgstr "" + + #: cpplib.c:1009 + #, c-format + msgid "#pragma %s is already registered" + msgstr "" + + #: cpplib.c:1084 + msgid "#pragma once is obsolete" + msgstr "" + + #: cpplib.c:1087 + msgid "#pragma once in main file" + msgstr "" + + #: cpplib.c:1111 + msgid "invalid #pragma GCC poison directive" + msgstr "" + + #: cpplib.c:1120 + #, c-format + msgid "poisoning existing macro \"%s\"" + msgstr "" + + #: cpplib.c:1140 + msgid "#pragma system_header ignored outside include file" + msgstr "" + + #: cpplib.c:1165 + #, c-format + msgid "cannot find source %s" + msgstr "" + + #: cpplib.c:1169 + #, c-format + msgid "current file is older than %s" + msgstr "" + + #: cpplib.c:1244 + msgid "_Pragma takes a parenthesized string literal" + msgstr "" + + #: cpplib.c:1343 + msgid "#else without #if" + msgstr "" + + #: cpplib.c:1348 tradcpp.c:3871 + msgid "#else after #else" + msgstr "" + + #: cpplib.c:1350 cpplib.c:1384 + msgid "the conditional began here" + msgstr "" + + #: cpplib.c:1377 + msgid "#elif without #if" + msgstr "" + + #: cpplib.c:1382 tradcpp.c:3566 + msgid "#elif after #else" + msgstr "" + + #: cpplib.c:1413 + msgid "#endif without #if" + msgstr "" + + #: cpplib.c:1496 tradcpp.c:3263 + msgid "missing '(' after predicate" + msgstr "" + + #: cpplib.c:1511 tradcpp.c:3277 + msgid "missing ')' to complete answer" + msgstr "" + + #: cpplib.c:1531 tradcpp.c:3283 + msgid "predicate's answer is empty" + msgstr "" + + #: cpplib.c:1561 tradcpp.c:3331 + msgid "assertion without predicate" + msgstr "" + + #: cpplib.c:1563 tradcpp.c:3333 + msgid "predicate must be an identifier" + msgstr "" + + #: cpplib.c:1645 tradcpp.c:3430 + #, c-format + msgid "\"%s\" re-asserted" + msgstr "" + + #: cpplib.c:1875 + #, c-format + msgid "unterminated #%s" + msgstr "" + + #: cppmacro.c:145 + #, c-format + msgid "invalid built-in macro \"%s\"" + msgstr "" + + #: cppmacro.c:346 + msgid "invalid string literal, ignoring final '\\'" + msgstr "" + + #: cppmacro.c:438 + #, c-format + msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token" + msgstr "" + + #: cppmacro.c:564 + msgid "directives may not be used inside a macro argument" + msgstr "" + + #: cppmacro.c:576 + #, c-format + msgid "unterminated argument list invoking macro \"%s\"" + msgstr "" + + #: cppmacro.c:593 + msgid "ISO C99 requires rest arguments to be used" + msgstr "" + + #: cppmacro.c:598 + #, c-format + msgid "macro \"%s\" requires %u arguments, but only %u given" + msgstr "" + + #: cppmacro.c:609 + #, c-format + msgid "macro \"%s\" passed %u arguments, but takes just %u" + msgstr "" + + #: cppmacro.c:692 + #, c-format + msgid "function-like macro \"%s\" must be used with arguments in traditional C" + msgstr "" + + #: cppmacro.c:1188 + #, c-format + msgid "duplicate macro parameter \"%s\"" + msgstr "" + + #: cppmacro.c:1216 + #, c-format + msgid "\"%s\" may not appear in macro parameter list" + msgstr "" + + #: cppmacro.c:1223 + msgid "macro parameters must be comma-separated" + msgstr "" + + #: cppmacro.c:1240 + msgid "parameter name missing" + msgstr "" + + #: cppmacro.c:1254 + msgid "anonymous variadic macros were introduced in C99" + msgstr "" + + #: cppmacro.c:1257 + msgid "ISO C does not permit named variadic macros" + msgstr "" + + #: cppmacro.c:1266 + msgid "missing ')' in macro parameter list" + msgstr "" + + #: cppmacro.c:1344 + msgid "ISO C requires whitespace after the macro name" + msgstr "" + + #: cppmacro.c:1374 + msgid "'#' is not followed by a macro parameter" + msgstr "" + + #: cppmacro.c:1394 + msgid "'##' cannot appear at either end of a macro expansion" + msgstr "" + + #: cppmacro.c:1430 + #, c-format + msgid "\"%s\" redefined" + msgstr "" + + #: cppmacro.c:1434 + msgid "this is the location of the previous definition" + msgstr "" + + #: cppmacro.c:1498 + #, c-format + msgid "macro argument \"%s\" would be stringified with -traditional" + msgstr "" + + #: cppmacro.c:1522 + #, c-format + msgid "invalid hash type %d in cpp_macro_definition" + msgstr "" + + #: cppmain.c:121 + #, c-format + msgid "invalid option %s" + msgstr "" + + #: cppspec.c:131 + #, c-format + msgid "\"%s\" is not a valid option to the preprocessor" + msgstr "" + + #: cppspec.c:155 + msgid "too many input files" + msgstr "" + + #: cse.c:7112 + #, c-format + msgid ";; Processing block from %d to %d, %d sets.\n" + msgstr "" + + #: diagnostic.c:784 + #, c-format + msgid "%s:%d: warning: " + msgstr "" + + #: diagnostic.c:791 + #, c-format + msgid "%s: warning: " + msgstr "" + + #: diagnostic.c:871 + msgid "((anonymous))" + msgstr "" + + #: diagnostic.c:941 + #, c-format + msgid "%s: warnings being treated as errors\n" + msgstr "" + + #: diagnostic.c:978 + #, c-format + msgid "%s: %s: " + msgstr "" + + #: diagnostic.c:1057 + msgid "sorry, not implemented: " + msgstr "" + + #: diagnostic.c:1076 + #, c-format + msgid "%s " + msgstr "" + + #: diagnostic.c:1078 + #, c-format + msgid " %s" + msgstr "" + + #: diagnostic.c:1102 + msgid "At top level:" + msgstr "" + + #: diagnostic.c:1107 + #, c-format + msgid "In member function `%s':" + msgstr "" + + #: diagnostic.c:1111 + #, c-format + msgid "In function `%s':" + msgstr "" + + #: diagnostic.c:1195 + msgid "compilation terminated.\n" + msgstr "" + + #: diagnostic.c:1227 + #, c-format + msgid "%s:%d: confused by earlier errors, bailing out\n" + msgstr "" + + #: diagnostic.c:1242 diagnostic.c:1392 + #, c-format + msgid "" + "Please submit a full bug report,\n" + "with preprocessed source if appropriate.\n" + "See %s for instructions.\n" + msgstr "" + + #: diagnostic.c:1390 + msgid "Internal compiler error: Error reporting routines re-entered.\n" + msgstr "" + + #: diagnostic.c:1452 + #, c-format + msgid "Internal compiler error in %s, at %s:%d" + msgstr "" + + #: diagnostic.c:1497 + #, c-format + msgid "In file included from %s:%d" + msgstr "" + + #: diagnostic.c:1500 + #, c-format + msgid "" + ",\n" + " from %s:%d" + msgstr "" + + #: diagnostic.c:1501 + msgid ":\n" + msgstr "" + + #: diagnostic.c:1534 diagnostic.c:1551 + #, c-format + msgid "`%s' is deprecated (declared at %s:%d)" + msgstr "" + + #: diagnostic.c:1554 + #, c-format + msgid "`%s' is deprecated" + msgstr "" + + #: diagnostic.c:1557 + #, c-format + msgid "type is deprecated (declared at %s:%d)" + msgstr "" + + #: diagnostic.c:1560 + msgid "type is deprecated" + msgstr "" + + #: dwarf2out.c:3056 + #, c-format + msgid "DW_LOC_OP %s not implemented\n" + msgstr "" + + #: dwarfout.c:2089 + #, c-format + msgid "internal regno botch: regno = %d\n" + msgstr "" + + #: dwarfout.c:6291 + msgid "can't get current directory" + msgstr "" + + #: emit-rtl.c:1098 + msgid "can't access real part of complex value in hard register" + msgstr "" + + #: emit-rtl.c:1120 + msgid "can't access imaginary part of complex value in hard register" + msgstr "" + + #: emit-rtl.c:3271 + msgid "ICE: emit_insn used where emit_jump_insn needed:\n" + msgstr "" + + #: errors.c:136 + #, c-format + msgid "abort in %s, at %s:%d" + msgstr "" + + #: except.c:382 + msgid "exception handling disabled, use -fexceptions to enable" + msgstr "" + + #: except.c:3235 + msgid "argument of `__builtin_eh_return_regno' must be constant" + msgstr "" + + #: except.c:3346 except.c:3368 + msgid "__builtin_eh_return not supported on this target" + msgstr "" + + #: explow.c:1369 + msgid "stack limits not supported on this target" + msgstr "" + + #: expr.c:2948 + msgid "function using short complex types cannot be inline" + msgstr "" + + #: expr.c:5810 expr.c:5819 expr.c:5828 expr.c:5833 expr.c:6120 expr.c:6136 + msgid "unsupported wide integer operation" + msgstr "" + + #: expr.c:6185 + #, c-format + msgid "prior parameter's size depends on `%s'" + msgstr "" + + #: expr.c:6531 + msgid "returned value in block_exit_expr" + msgstr "" + + #: final.c:1209 + msgid "negative insn length" + msgstr "" + + #: final.c:2628 + msgid "could not split insn" + msgstr "" + + #: final.c:2976 + msgid "invalid `asm': " + msgstr "" + + #: final.c:3160 + msgid "nested assembly dialect alternatives" + msgstr "" + + #: final.c:3177 final.c:3189 + msgid "unterminated assembly dialect alternative" + msgstr "" + + #: final.c:3233 + #, c-format + msgid "operand number missing after %%-letter" + msgstr "" + + #: final.c:3236 final.c:3275 + msgid "operand number out of range" + msgstr "" + + #: final.c:3294 + #, c-format + msgid "invalid %%-code" + msgstr "" + + #: final.c:3325 + #, c-format + msgid "`%%l' operand isn't a label" + msgstr "" + + #. We can't handle floating point constants; + #. PRINT_OPERAND must handle them. + #: final.c:3432 vmsdbgout.c:478 config/i386/i386.c:5315 + #: config/pdp11/pdp11.c:1570 + msgid "floating constant misused" + msgstr "" + + #: final.c:3488 vmsdbgout.c:535 config/i386/i386.c:5369 + #: config/pdp11/pdp11.c:1617 + msgid "invalid expression as operand" + msgstr "" + + #: flow.c:354 + msgid "function might be possible candidate for attribute `noreturn'" + msgstr "" + + #: flow.c:359 + msgid "`noreturn' function does return" + msgstr "" + + #: flow.c:378 + msgid "control reaches end of non-void function" + msgstr "" + + #: flow.c:1600 + msgid "Attempt to delete prologue/epilogue insn:" + msgstr "" + + #: fold-const.c:3135 fold-const.c:3148 + #, c-format + msgid "comparison is always %d due to width of bit-field" + msgstr "" + + #: fold-const.c:4190 fold-const.c:4207 + #, c-format + msgid "comparison is always %d" + msgstr "" + + #: fold-const.c:4338 + msgid "`or' of unmatched not-equal tests is always 1" + msgstr "" + + #: fold-const.c:4343 + msgid "`and' of mutually exclusive equal-tests is always 0" + msgstr "" + + #: function.c:906 varasm.c:1530 + #, c-format + msgid "size of variable `%s' is too large" + msgstr "" + + #: function.c:5445 + #, c-format + msgid "`%s' might be used uninitialized in this function" + msgstr "" + + #: function.c:5452 + #, c-format + msgid "variable `%s' might be clobbered by `longjmp' or `vfork'" + msgstr "" + + #: function.c:5471 + #, c-format + msgid "argument `%s' might be clobbered by `longjmp' or `vfork'" + msgstr "" + + #: function.c:6337 + msgid "function returns an aggregate" + msgstr "" + + #: function.c:6856 + #, c-format + msgid "unused parameter `%s'" + msgstr "" + + #: gcc.c:1102 + #, c-format + msgid "ambiguous abbreviation %s" + msgstr "" + + #: gcc.c:1129 + #, c-format + msgid "incomplete `%s' option" + msgstr "" + + #: gcc.c:1140 + #, c-format + msgid "missing argument to `%s' option" + msgstr "" + + #: gcc.c:1153 + #, c-format + msgid "extraneous argument to `%s' option" + msgstr "" + + #: gcc.c:1460 + msgid "Using built-in specs.\n" + msgstr "" + + #: gcc.c:1634 + #, c-format + msgid "" + "Setting spec %s to '%s'\n" + "\n" + msgstr "" + + #: gcc.c:1732 + #, c-format + msgid "Reading specs from %s\n" + msgstr "" + + #: gcc.c:1830 gcc.c:1849 + #, c-format + msgid "specs %%include syntax malformed after %ld characters" + msgstr "" + + #: gcc.c:1857 + #, c-format + msgid "could not find specs file %s\n" + msgstr "" + + #: gcc.c:1873 gcc.c:1881 gcc.c:1890 gcc.c:1899 + #, c-format + msgid "specs %%rename syntax malformed after %ld characters" + msgstr "" + + #: gcc.c:1908 + #, c-format + msgid "specs %s spec was not found to be renamed" + msgstr "" + + #: gcc.c:1915 + #, c-format + msgid "rename spec %s to %s\n" + msgstr "" + + #: gcc.c:1917 + #, c-format + msgid "" + "spec is '%s'\n" + "\n" + msgstr "" + + #: gcc.c:1930 + #, c-format + msgid "specs unknown %% command after %ld characters" + msgstr "" + + #: gcc.c:1941 gcc.c:1954 + #, c-format + msgid "specs file malformed after %ld characters" + msgstr "" + + #: gcc.c:2008 + msgid "spec file has no spec for linking" + msgstr "" + + #: gcc.c:2720 + msgid "-pipe not supported" + msgstr "" + + #: gcc.c:2774 + msgid "" + "\n" + "Go ahead? (y or n) " + msgstr "" + + #: gcc.c:2873 + #, c-format + msgid "" + "Internal error: %s (program %s)\n" + "Please submit a full bug report.\n" + "See %s for instructions." + msgstr "" + + #: gcc.c:2891 + #, c-format + msgid "# %s %.2f %.2f\n" + msgstr "" + + #: gcc.c:3024 + #, c-format + msgid "Usage: %s [options] file...\n" + msgstr "" + + #: gcc.c:3025 + msgid "Options:\n" + msgstr "" + + #: gcc.c:3027 + msgid " -pass-exit-codes Exit with highest error code from a phase\n" + msgstr "" + + #: gcc.c:3028 + msgid " --help Display this information\n" + msgstr "" + + #: gcc.c:3029 + msgid "" + " --target-help Display target specific command line options\n" + msgstr "" + + #: gcc.c:3031 + msgid " (Use '-v --help' to display command line options of sub-processes)\n" + msgstr "" + + #: gcc.c:3032 + msgid " -dumpspecs Display all of the built in spec strings\n" + msgstr "" + + #: gcc.c:3033 + msgid " -dumpversion Display the version of the compiler\n" + msgstr "" + + #: gcc.c:3034 + msgid " -dumpmachine Display the compiler's target processor\n" + msgstr "" + + #: gcc.c:3035 + msgid "" + " -print-search-dirs Display the directories in the compiler's search " + "path\n" + msgstr "" + + #: gcc.c:3036 + msgid "" + " -print-libgcc-file-name Display the name of the compiler's companion " + "library\n" + msgstr "" + + #: gcc.c:3037 + msgid " -print-file-name= Display the full path to library \n" + msgstr "" + + #: gcc.c:3038 + msgid "" + " -print-prog-name= Display the full path to compiler component " + "\n" + msgstr "" + + #: gcc.c:3039 + msgid "" + " -print-multi-directory Display the root directory for versions of " + "libgcc\n" + msgstr "" + + #: gcc.c:3040 + msgid "" + " -print-multi-lib Display the mapping between command line options " + "and\n" + " multiple library search directories\n" + msgstr "" + + #: gcc.c:3043 + msgid "" + " -Wa, Pass comma-separated on to the " + "assembler\n" + msgstr "" + + #: gcc.c:3044 + msgid "" + " -Wp, Pass comma-separated on to the " + "preprocessor\n" + msgstr "" + + #: gcc.c:3045 + msgid "" + " -Wl, Pass comma-separated on to the linker\n" + msgstr "" + + #: gcc.c:3046 + msgid " -Xlinker Pass on to the linker\n" + msgstr "" + + #: gcc.c:3047 + msgid " -save-temps Do not delete intermediate files\n" + msgstr "" + + #: gcc.c:3048 + msgid " -pipe Use pipes rather than intermediate files\n" + msgstr "" + + #: gcc.c:3049 + msgid " -time Time the execution of each subprocess\n" + msgstr "" + + #: gcc.c:3050 + msgid "" + " -specs= Override built-in specs with the contents of " + "\n" + msgstr "" + + #: gcc.c:3051 + msgid "" + " -std= Assume that the input sources are for \n" + msgstr "" + + #: gcc.c:3052 + msgid "" + " -B Add to the compiler's search paths\n" + msgstr "" + + #: gcc.c:3053 + msgid " -b Run gcc for target , if installed\n" + msgstr "" + + #: gcc.c:3054 + msgid "" + " -V Run gcc version number , if installed\n" + msgstr "" + + #: gcc.c:3055 + msgid "" + " -v Display the programs invoked by the compiler\n" + msgstr "" + + #: gcc.c:3056 + msgid "" + " -### Like -v but options quoted and commands not " + "executed\n" + msgstr "" + + #: gcc.c:3057 + msgid "" + " -E Preprocess only; do not compile, assemble or " + "link\n" + msgstr "" + + #: gcc.c:3058 + msgid " -S Compile only; do not assemble or link\n" + msgstr "" + + #: gcc.c:3059 + msgid " -c Compile and assemble, but do not link\n" + msgstr "" + + #: gcc.c:3060 + msgid " -o Place the output into \n" + msgstr "" + + #: gcc.c:3061 + msgid "" + " -x Specify the language of the following input " + "files\n" + " Permissable languages include: c c++ assembler " + "none\n" + " 'none' means revert to the default behavior of\n" + " guessing the language based on the file's " + "extension\n" + msgstr "" + + #: gcc.c:3068 + #, c-format + msgid "" + "\n" + "Options starting with -g, -f, -m, -O, -W, or --param are automatically\n" + " passed on to the various sub-processes invoked by %s. In order to pass\n" + " other options on to these processes the -W options must be used.\n" + msgstr "" + + #. translate_options () has turned --version into -fversion. + #: gcc.c:3348 + #, c-format + msgid "%s (GCC) %s\n" + msgstr "" + + #: gcc.c:3349 + msgid "Copyright (C) 2002 Free Software Foundation, Inc.\n" + msgstr "" + + #: gcc.c:3351 gcov.c:320 + msgid "" + "This is free software; see the source for copying conditions. There is NO\n" + "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" + "\n" + msgstr "" + + #: gcc.c:3450 + msgid "argument to `-Xlinker' is missing" + msgstr "" + + #: gcc.c:3458 + msgid "argument to `-l' is missing" + msgstr "" + + #: gcc.c:3475 + msgid "argument to `-specs' is missing" + msgstr "" + + #: gcc.c:3490 + msgid "argument to `-specs=' is missing" + msgstr "" + + #: gcc.c:3521 + msgid "argument to `-b' is missing" + msgstr "" + + #: gcc.c:3536 + msgid "argument to `-B' is missing" + msgstr "" + + #: gcc.c:3606 + msgid "argument to `-V' is missing" + msgstr "" + + #: gcc.c:3627 gcc.c:3634 gcc.c:3641 + msgid "invalid version number format" + msgstr "" + + #: gcc.c:3752 + msgid "cannot specify -o with -c or -S and multiple compilations" + msgstr "" + + #: gcc.c:3923 + msgid "warning: -pipe ignored because -save-temps specified" + msgstr "" + + #: gcc.c:3927 + msgid "warning: -pipe ignored because -time specified" + msgstr "" + + #: gcc.c:3939 + msgid "argument to `-x' is missing" + msgstr "" + + #: gcc.c:3967 + #, c-format + msgid "argument to `-%s' is missing" + msgstr "" + + #: gcc.c:4028 + #, c-format + msgid "warning: `-x %s' after last input file has no effect" + msgstr "" + + #: gcc.c:4327 + msgid "invalid specification! Bug in cc" + msgstr "" + + #: gcc.c:4476 + #, c-format + msgid "%s\n" + msgstr "" + + #. Catch the case where a spec string contains something like + #. '%{foo:%*}'. ie there is no * in the pattern on the left + #. hand side of the :. + #: gcc.c:5029 + #, c-format + msgid "spec failure: '%%*' has not been initialized by pattern match" + msgstr "" + + #: gcc.c:5038 + #, c-format + msgid "warning: use of obsolete %%[ operator in specs" + msgstr "" + + #: gcc.c:5056 + #, c-format + msgid "Processing spec %c%s%c, which is '%s'\n" + msgstr "" + + #: gcc.c:5181 + #, c-format + msgid "spec failure: unrecognized spec option '%c'" + msgstr "" + + #: gcc.c:5291 + msgid "mismatched braces in specs" + msgstr "" + + #: gcc.c:5969 + #, c-format + msgid "unrecognized option `-%s'" + msgstr "" + + #: gcc.c:5975 + #, c-format + msgid "install: %s%s\n" + msgstr "" + + #: gcc.c:5976 + #, c-format + msgid "programs: %s\n" + msgstr "" + + #: gcc.c:5977 + #, c-format + msgid "libraries: %s\n" + msgstr "" + + #: gcc.c:6025 + msgid "" + "\n" + "For bug reporting instructions, please see:\n" + msgstr "" + + #: gcc.c:6041 + #, c-format + msgid "Configured with: %s\n" + msgstr "" + + #: gcc.c:6055 + #, c-format + msgid "Thread model: %s\n" + msgstr "" + + #: gcc.c:6066 + #, c-format + msgid "gcc version %s\n" + msgstr "" + + #: gcc.c:6068 + #, c-format + msgid "gcc driver version %s executing gcc version %s\n" + msgstr "" + + #: gcc.c:6076 + msgid "no input files" + msgstr "" + + #: gcc.c:6114 + #, c-format + msgid "%s: %s compiler not installed on this system" + msgstr "" + + #: gcc.c:6189 + #, c-format + msgid "%s: linker input file unused because linking not done" + msgstr "" + + #: gcc.c:6232 + #, c-format + msgid "language %s not recognized" + msgstr "" + + #: gcc.c:6335 + msgid "internal gcc abort" + msgstr "" + + #: gcov.c:282 + msgid "Internal gcov abort.\n" + msgstr "" + + #: gcov.c:295 + msgid "" + "Usage: gcov [OPTION]... SOURCEFILE\n" + "\n" + msgstr "" + + #: gcov.c:296 + msgid "" + "Print code coverage information.\n" + "\n" + msgstr "" + + #: gcov.c:297 + msgid " -h, --help Print this help, then exit\n" + msgstr "" + + #: gcov.c:298 + msgid " -v, --version Print version number, then exit\n" + msgstr "" + + #: gcov.c:299 + msgid "" + " -b, --branch-probabilities Include branch probabilities in output\n" + msgstr "" + + #: gcov.c:300 + msgid "" + " -c, --branch-counts Given counts of branches taken\n" + " rather than percentages\n" + msgstr "" + + #: gcov.c:302 + msgid " -n, --no-output Do not create an output file\n" + msgstr "" + + #: gcov.c:303 + msgid "" + " -l, --long-file-names Use long output file names for included\n" + " source files\n" + msgstr "" + + #: gcov.c:305 + msgid " -f, --function-summaries Output summaries for each function\n" + msgstr "" + + #: gcov.c:306 + msgid " -o, --object-directory OBJDIR Search for object files in OBJDIR\n" + msgstr "" + + #: gcov.c:307 + #, c-format + msgid "" + "\n" + "For bug reporting instructions, please see:\n" + "%s.\n" + msgstr "" + + #: gcov.c:317 + #, c-format + msgid "gcov (GCC) %s\n" + msgstr "" + + #: gcov.c:318 + msgid "Copyright (C) 2001 Free Software Foundation, Inc.\n" + msgstr "" + + #: gcov.c:462 + #, c-format + msgid "Could not open basic block file %s.\n" + msgstr "" + + #: gcov.c:471 + #, c-format + msgid "Could not open data file %s.\n" + msgstr "" + + #: gcov.c:472 + msgid "Assuming that all execution counts are zero.\n" + msgstr "" + + #: gcov.c:478 + #, c-format + msgid "Could not open program flow graph file %s.\n" + msgstr "" + + #: gcov.c:489 + #, c-format + msgid "No executable code associated with file %s.\n" + msgstr "" + + #: gcov.c:789 + msgid ".da file contents exhausted too early\n" + msgstr "" + + #: gcov.c:792 + msgid ".da file contents not exhausted\n" + msgstr "" + + #: gcov.c:973 + #, c-format + msgid "%6.2f%% of %d source lines executed in function %s\n" + msgstr "" + + #: gcov.c:977 + #, c-format + msgid "No executable source lines in function %s\n" + msgstr "" + + #: gcov.c:984 + #, c-format + msgid "%6.2f%% of %d branches executed in function %s\n" + msgstr "" + + #: gcov.c:988 + #, c-format + msgid "%6.2f%% of %d branches taken at least once in function %s\n" + msgstr "" + + #: gcov.c:993 + #, c-format + msgid "No branches in function %s\n" + msgstr "" + + #: gcov.c:995 + #, c-format + msgid "%6.2f%% of %d calls executed in function %s\n" + msgstr "" + + #: gcov.c:999 + #, c-format + msgid "No calls in function %s\n" + msgstr "" + + #: gcov.c:1126 + #, c-format + msgid "didn't use all bb entries of graph, function %s\n" + msgstr "" + + #: gcov.c:1128 + #, c-format + msgid "block_num = %ld, num_blocks = %d\n" + msgstr "" + + #: gcov.c:1166 + #, c-format + msgid "ERROR: too many basic blocks in .bb file %s\n" + msgstr "" + + #: gcov.c:1243 + #, c-format + msgid "%6.2f%% of %d source lines executed in file %s\n" + msgstr "" + + #: gcov.c:1247 + #, c-format + msgid "No executable source lines in file %s\n" + msgstr "" + + #: gcov.c:1254 + #, c-format + msgid "%6.2f%% of %d branches executed in file %s\n" + msgstr "" + + #: gcov.c:1258 + #, c-format + msgid "%6.2f%% of %d branches taken at least once in file %s\n" + msgstr "" + + #: gcov.c:1263 + #, c-format + msgid "No branches in file %s\n" + msgstr "" + + #: gcov.c:1265 + #, c-format + msgid "%6.2f%% of %d calls executed in file %s\n" + msgstr "" + + #: gcov.c:1269 + #, c-format + msgid "No calls in file %s\n" + msgstr "" + + #: gcov.c:1281 + #, c-format + msgid "Could not open source file %s.\n" + msgstr "" + + #: gcov.c:1331 + #, c-format + msgid "Could not open output file %s.\n" + msgstr "" + + #: gcov.c:1339 + #, c-format + msgid "Creating %s.\n" + msgstr "" + + #: gcov.c:1387 + #, c-format + msgid "call %d never executed\n" + msgstr "" + + #: gcov.c:1396 + #, c-format + msgid "call %d returns = %s\n" + msgstr "" + + #: gcov.c:1406 + #, c-format + msgid "call %d returns = %s%%\n" + msgstr "" + + #: gcov.c:1413 + #, c-format + msgid "branch %d never executed\n" + msgstr "" + + #: gcov.c:1423 + #, c-format + msgid "branch %d taken = %s\n" + msgstr "" + + #: gcov.c:1433 + #, c-format + msgid "branch %d taken = %s%%\n" + msgstr "" + + #: gcov.c:1444 + #, c-format + msgid "Unexpected EOF while reading source file %s.\n" + msgstr "" + + #: gcse.c:758 + #, c-format + msgid "GCSE disabled: %d > 1000 basic blocks and %d >= 20 edges/basic block" + msgstr "" + + #: gcse.c:770 + #, c-format + msgid "GCSE disabled: %d basic blocks and %d registers" + msgstr "" + + #: graph.c:421 profile.c:950 profile.c:958 toplev.c:1835 toplev.c:4978 + #: f/com.c:14258 java/jcf-parse.c:950 java/jcf-parse.c:1099 java/lex.c:1790 + #: objc/objc-act.c:529 + #, c-format + msgid "can't open %s" + msgstr "" + + #: haifa-sched.c:190 + #, c-format + msgid "fix_sched_param: unknown param: %s" + msgstr "" + + #: integrate.c:185 + msgid "function cannot be inline" + msgstr "" + + #: integrate.c:190 + msgid "varargs function cannot be inline" + msgstr "" + + #: integrate.c:193 + msgid "function using alloca cannot be inline" + msgstr "" + + #: integrate.c:196 + msgid "function using setjmp cannot be inline" + msgstr "" + + #: integrate.c:199 + msgid "function uses __builtin_eh_return" + msgstr "" + + #: integrate.c:202 + msgid "function with nested functions cannot be inline" + msgstr "" + + #: integrate.c:206 + msgid "function with label addresses used in initializers cannot inline" + msgstr "" + + #: integrate.c:213 integrate.c:257 + msgid "function too large to be inline" + msgstr "" + + #: integrate.c:223 + msgid "no prototype, and parameter address used; cannot be inline" + msgstr "" + + #: integrate.c:230 integrate.c:275 + msgid "inline functions not supported for this return value type" + msgstr "" + + #: integrate.c:235 + msgid "function with varying-size return value cannot be inline" + msgstr "" + + #: integrate.c:242 + msgid "function with varying-size parameter cannot be inline" + msgstr "" + + #: integrate.c:245 + msgid "function with transparent unit parameter cannot be inline" + msgstr "" + + #: integrate.c:264 + msgid "function with computed jump cannot inline" + msgstr "" + + #: integrate.c:268 + msgid "function with nonlocal goto cannot be inline" + msgstr "" + + #: integrate.c:282 + msgid "function with target specific attribute(s) cannot be inlined" + msgstr "" + + #: line-map.c:198 + #, c-format + msgid "In file included from %s:%u" + msgstr "" + + #. Translators note: this message is used in conjunction + #. with "In file included from %s:%ld" and some other + #. tricks. We want something like this: + #. + #. | In file included from sys/select.h:123, + #. | from sys/types.h:234, + #. | from userfile.c:31: + #. | bits/select.h:45: + #. + #. with all the "from"s lined up. + #. The trailing comma is at the beginning of this message, + #. and the trailing colon is not translated. + #: line-map.c:216 + #, c-format + msgid "" + ",\n" + " from %s:%u" + msgstr "" + + #. If we didn't find this parameter, issue an error message. + #: params.c:80 + #, c-format + msgid "invalid parameter `%s'" + msgstr "" + + #: profile.c:429 + #, c-format + msgid "corrupted profile info: prob for %d-%d thought to be %d" + msgstr "" + + #: profile.c:975 + #, c-format + msgid "file %s not found, execution counts assumed to be zero" + msgstr "" + + #: profile.c:1022 + msgid ".da file contents exhausted too early" + msgstr "" + + #: profile.c:1025 + msgid ".da file contents not exhausted" + msgstr "" + + #: protoize.c:599 + #, c-format + msgid "%s: internal abort\n" + msgstr "" + + #: protoize.c:690 + #, c-format + msgid "%s: error writing file `%s': %s\n" + msgstr "" + + #: protoize.c:735 + #, c-format + msgid "%s: usage '%s [ -VqfnkN ] [ -i ] [ filename ... ]'\n" + msgstr "" + + #: protoize.c:738 + #, c-format + msgid "%s: usage '%s [ -VqfnkNlgC ] [ -B ] [ filename ... ]'\n" + msgstr "" + + #: protoize.c:845 + #, c-format + msgid "%s: warning: no read access for file `%s'\n" + msgstr "" + + #: protoize.c:853 + #, c-format + msgid "%s: warning: no write access for file `%s'\n" + msgstr "" + + #: protoize.c:861 + #, c-format + msgid "%s: warning: no write access for dir containing `%s'\n" + msgstr "" + + #. Catch cases like /.. where we try to backup to a + #. point above the absolute root of the logical file + #. system. + #: protoize.c:1279 + #, c-format + msgid "%s: invalid file name: %s\n" + msgstr "" + + #: protoize.c:1431 + #, c-format + msgid "%s: %s: can't get status: %s\n" + msgstr "" + + #: protoize.c:1452 + #, c-format + msgid "" + "\n" + "%s: fatal error: aux info file corrupted at line %d\n" + msgstr "" + + #: protoize.c:1788 + #, c-format + msgid "%s:%d: declaration of function `%s' takes different forms\n" + msgstr "" + + #: protoize.c:2046 + #, c-format + msgid "%s: compiling `%s'\n" + msgstr "" + + #: protoize.c:2069 + #, c-format + msgid "%s: wait: %s\n" + msgstr "" + + #: protoize.c:2074 + #, c-format + msgid "%s: subprocess got fatal signal %d\n" + msgstr "" + + #: protoize.c:2082 + #, c-format + msgid "%s: %s exited with status %d\n" + msgstr "" + + #: protoize.c:2134 + #, c-format + msgid "%s: warning: missing SYSCALLS file `%s'\n" + msgstr "" + + #: protoize.c:2143 protoize.c:2172 + #, c-format + msgid "%s: can't read aux info file `%s': %s\n" + msgstr "" + + #: protoize.c:2188 protoize.c:2216 + #, c-format + msgid "%s: can't get status of aux info file `%s': %s\n" + msgstr "" + + #: protoize.c:2244 + #, c-format + msgid "%s: can't open aux info file `%s' for reading: %s\n" + msgstr "" + + #: protoize.c:2262 + #, c-format + msgid "%s: error reading aux info file `%s': %s\n" + msgstr "" + + #: protoize.c:2275 + #, c-format + msgid "%s: error closing aux info file `%s': %s\n" + msgstr "" + + #: protoize.c:2291 + #, c-format + msgid "%s: can't delete aux info file `%s': %s\n" + msgstr "" + + #: protoize.c:2373 protoize.c:4375 + #, c-format + msgid "%s: can't delete file `%s': %s\n" + msgstr "" + + #: protoize.c:2452 + #, c-format + msgid "%s: warning: can't rename file `%s' to `%s': %s\n" + msgstr "" + + #: protoize.c:2577 + #, c-format + msgid "%s: conflicting extern definitions of '%s'\n" + msgstr "" + + #: protoize.c:2581 + #, c-format + msgid "%s: declarations of '%s' will not be converted\n" + msgstr "" + + #: protoize.c:2583 + #, c-format + msgid "%s: conflict list for '%s' follows:\n" + msgstr "" + + #: protoize.c:2616 + #, c-format + msgid "%s: warning: using formals list from %s(%d) for function `%s'\n" + msgstr "" + + #: protoize.c:2656 + #, c-format + msgid "%s: %d: `%s' used but missing from SYSCALLS\n" + msgstr "" + + #: protoize.c:2662 + #, c-format + msgid "%s: %d: warning: no extern definition for `%s'\n" + msgstr "" + + #: protoize.c:2693 + #, c-format + msgid "%s: warning: no static definition for `%s' in file `%s'\n" + msgstr "" + + #: protoize.c:2699 + #, c-format + msgid "%s: multiple static defs of `%s' in file `%s'\n" + msgstr "" + + #: protoize.c:2872 protoize.c:2875 + #, c-format + msgid "%s: %d: warning: source too confusing\n" + msgstr "" + + #: protoize.c:3081 + #, c-format + msgid "%s: %d: warning: varargs function declaration not converted\n" + msgstr "" + + #: protoize.c:3096 + #, c-format + msgid "%s: declaration of function `%s' not converted\n" + msgstr "" + + #: protoize.c:3219 + #, c-format + msgid "%s: warning: too many parameter lists in declaration of `%s'\n" + msgstr "" + + #: protoize.c:3240 + #, c-format + msgid "" + "\n" + "%s: warning: too few parameter lists in declaration of `%s'\n" + msgstr "" + + #: protoize.c:3338 + #, c-format + msgid "%s: %d: warning: found `%s' but expected `%s'\n" + msgstr "" + + #: protoize.c:3516 + #, c-format + msgid "%s: local declaration for function `%s' not inserted\n" + msgstr "" + + #: protoize.c:3543 + #, c-format + msgid "" + "\n" + "%s: %d: warning: can't add declaration of `%s' into macro call\n" + msgstr "" + + #: protoize.c:3617 + #, c-format + msgid "%s: global declarations for file `%s' not inserted\n" + msgstr "" + + #: protoize.c:3708 protoize.c:3738 + #, c-format + msgid "%s: definition of function `%s' not converted\n" + msgstr "" + + #: protoize.c:3727 + #, c-format + msgid "%s: %d: warning: definition of %s not converted\n" + msgstr "" + + #: protoize.c:4057 + #, c-format + msgid "%s: found definition of `%s' at %s(%d)\n" + msgstr "" + + #. If we make it here, then we did not know about this + #. function definition. + #: protoize.c:4073 + #, c-format + msgid "%s: %d: warning: `%s' excluded by preprocessing\n" + msgstr "" + + #: protoize.c:4076 + #, c-format + msgid "%s: function definition not converted\n" + msgstr "" + + #: protoize.c:4135 + #, c-format + msgid "%s: `%s' not converted\n" + msgstr "" + + #: protoize.c:4143 + #, c-format + msgid "%s: would convert file `%s'\n" + msgstr "" + + #: protoize.c:4146 + #, c-format + msgid "%s: converting file `%s'\n" + msgstr "" + + #: protoize.c:4156 + #, c-format + msgid "%s: can't get status for file `%s': %s\n" + msgstr "" + + #: protoize.c:4198 + #, c-format + msgid "%s: can't open file `%s' for reading: %s\n" + msgstr "" + + #: protoize.c:4213 + #, c-format + msgid "" + "\n" + "%s: error reading input file `%s': %s\n" + msgstr "" + + #: protoize.c:4247 + #, c-format + msgid "%s: can't create/open clean file `%s': %s\n" + msgstr "" + + #: protoize.c:4352 + #, c-format + msgid "%s: warning: file `%s' already saved in `%s'\n" + msgstr "" + + #: protoize.c:4360 + #, c-format + msgid "%s: can't link file `%s' to `%s': %s\n" + msgstr "" + + #: protoize.c:4390 + #, c-format + msgid "%s: can't create/open output file `%s': %s\n" + msgstr "" + + #: protoize.c:4423 + #, c-format + msgid "%s: can't change mode of file `%s': %s\n" + msgstr "" + + #: protoize.c:4598 + #, c-format + msgid "%s: cannot get working directory: %s\n" + msgstr "" + + #: protoize.c:4696 + #, c-format + msgid "%s: input file names must have .c suffixes: %s\n" + msgstr "" + + #: real.c:824 real.c:1001 + msgid "conversion from NaN to int" + msgstr "" + + #: real.c:847 + msgid "conversion from NaN to unsigned int" + msgstr "" + + #: real.c:2730 + msgid "floating point overflow" + msgstr "" + + #: real.c:4395 real.c:6675 real.c:6756 + msgid "overflow on truncation to integer" + msgstr "" + + #: real.c:4467 + msgid "overflow on truncation to unsigned integer" + msgstr "" + + #: real.c:5812 + #, c-format + msgid "%s: argument domain error" + msgstr "" + + #: real.c:5813 + #, c-format + msgid "%s: function singularity" + msgstr "" + + #: real.c:5814 + #, c-format + msgid "%s: overflow range error" + msgstr "" + + #: real.c:5815 + #, c-format + msgid "%s: underflow range error" + msgstr "" + + #: real.c:5816 + #, c-format + msgid "%s: total loss of precision" + msgstr "" + + #: real.c:5817 + #, c-format + msgid "%s: partial loss of precision" + msgstr "" + + #: real.c:5818 + #, c-format + msgid "%s: NaN - producing operation" + msgstr "" + + #: reg-stack.c:677 + #, c-format + msgid "output constraint %d must specify a single register" + msgstr "" + + #: reg-stack.c:687 + #, c-format + msgid "output constraint %d cannot be specified together with \"%s\" clobber" + msgstr "" + + #: reg-stack.c:710 + msgid "output regs must be grouped at top of stack" + msgstr "" + + #: reg-stack.c:747 + msgid "implicitly popped regs must be grouped at top of stack" + msgstr "" + + #: reg-stack.c:766 + #, c-format + msgid "output operand %d must use `&' constraint" + msgstr "" + + #: regclass.c:778 + #, c-format + msgid "can't use '%s' as a %s register" + msgstr "" + + #: regclass.c:793 config/ia64/ia64.c:3840 config/ia64/ia64.c:3847 + #, c-format + msgid "unknown register name: %s" + msgstr "" + + #: regclass.c:804 + msgid "global register variable follows a function definition" + msgstr "" + + #: regclass.c:808 + msgid "register used for two global register variables" + msgstr "" + + #: regclass.c:813 + msgid "call-clobbered register used for global register variable" + msgstr "" + + #: regrename.c:1845 + #, c-format + msgid "validate_value_data: [%u] Bad next_regno for empty chain (%u)" + msgstr "" + + #: regrename.c:1857 + #, c-format + msgid "validate_value_data: Loop in regno chain (%u)" + msgstr "" + + #: regrename.c:1860 + #, c-format + msgid "validate_value_data: [%u] Bad oldest_regno (%u)" + msgstr "" + + #: regrename.c:1872 + #, c-format + msgid "validate_value_data: [%u] Non-empty reg in chain (%s %u %i)" + msgstr "" + + #: reload.c:1208 + msgid "cannot reload integer constant operand in `asm'" + msgstr "" + + #: reload.c:1230 + msgid "impossible register constraint in `asm'" + msgstr "" + + #: reload.c:3389 + msgid "`&' constraint used with no register class" + msgstr "" + + #: reload.c:3557 + msgid "unable to generate reloads for:" + msgstr "" + + #: reload.c:3558 reload.c:3772 + msgid "inconsistent operand constraints in an `asm'" + msgstr "" + + #: reload1.c:1247 + msgid "frame size too large for reliable stack checking" + msgstr "" + + #: reload1.c:1250 + msgid "try reducing the number of local variables" + msgstr "" + + #: reload1.c:1902 + #, c-format + msgid "can't find a register in class `%s' while reloading `asm'" + msgstr "" + + #: reload1.c:1906 + #, c-format + msgid "unable to find a register to spill in class `%s'" + msgstr "" + + #: reload1.c:1908 + msgid "this is the insn:" + msgstr "" + + #: reload1.c:3924 + msgid "`asm' operand requires impossible reload" + msgstr "" + + #. It's the compiler's fault. + #: reload1.c:5040 + msgid "could not find a spill register" + msgstr "" + + #: reload1.c:5045 + msgid "`asm' operand constraint incompatible with operand size" + msgstr "" + + #. It's the compiler's fault. + #: reload1.c:6639 + msgid "VOIDmode on an output" + msgstr "" + + #: reload1.c:6640 + msgid "output operand is constant in `asm'" + msgstr "" + + #: rtl-error.c:139 + msgid "unrecognizable insn:" + msgstr "" + + #: rtl-error.c:141 + msgid "insn does not satisfy its constraints:" + msgstr "" + + #: rtl.c:627 + #, c-format + msgid "RTL check: access of elt %d of `%s' with last elt %d in %s, at %s:%d" + msgstr "" + + #: rtl.c:642 + #, c-format + msgid "" + "RTL check: expected elt %d type '%c', have '%c' (rtx %s) in %s, at %s:%d" + msgstr "" + + #: rtl.c:658 + #, c-format + msgid "" + "RTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s) in %s, at %" + "s:%d" + msgstr "" + + #: rtl.c:671 + #, c-format + msgid "RTL check: expected code `%s', have `%s' in %s, at %s:%d" + msgstr "" + + #: rtl.c:685 + #, c-format + msgid "RTL check: expected code `%s' or `%s', have `%s' in %s, at %s:%d" + msgstr "" + + #: rtl.c:700 + #, c-format + msgid "RTL check: access of elt %d of vector with last elt %d in %s, at %s:%d" + msgstr "" + + #: stmt.c:927 + #, c-format + msgid "jump to `%s' invalidly jumps into binding contour" + msgstr "" + + #: stmt.c:1163 stmt.c:3755 + #, c-format + msgid "label `%s' used before containing binding contour" + msgstr "" + + #: stmt.c:1343 + msgid "output operand constraint lacks `='" + msgstr "" + + #: stmt.c:1358 + #, c-format + msgid "output constraint `%c' for operand %d is not at the beginning" + msgstr "" + + #: stmt.c:1380 + msgid "operand constraint contains incorrectly positioned '+' or '='" + msgstr "" + + #: stmt.c:1386 stmt.c:1486 + #, c-format + msgid "`%%' constraint used with last operand" + msgstr "" + + #: stmt.c:1405 + msgid "matching constraint not valid in output operand" + msgstr "" + + #: stmt.c:1477 + #, c-format + msgid "input operand constraint contains `%c'" + msgstr "" + + #: stmt.c:1517 + msgid "matching constraint references invalid operand number" + msgstr "" + + #: stmt.c:1549 + #, c-format + msgid "invalid punctuation `%c' in constraint" + msgstr "" + + #: stmt.c:1645 + #, c-format + msgid "unknown register name `%s' in `asm'" + msgstr "" + + #: stmt.c:1689 + #, c-format + msgid "more than %d operands in `asm'" + msgstr "" + + #: stmt.c:1748 + #, c-format + msgid "output number %d not directly addressable" + msgstr "" + + #. ??? Leave this only until we have experience with what + #. happens in combine and elsewhere when constraints are + #. not satisfied. + #: stmt.c:1817 stmt.c:1846 + #, c-format + msgid "asm operand %d probably doesn't match constraints" + msgstr "" + + #: stmt.c:1992 + msgid "too many alternatives in `asm'" + msgstr "" + + #: stmt.c:2004 + msgid "operand constraints for `asm' differ in number of alternatives" + msgstr "" + + #: stmt.c:2057 + #, c-format + msgid "duplicate asm operand name '%s'" + msgstr "" + + #: stmt.c:2144 + msgid "missing close brace for named operand" + msgstr "" + + #: stmt.c:2172 + #, c-format + msgid "undefined named operand '%s'" + msgstr "" + + #: stmt.c:3692 + #, c-format + msgid "unused variable `%s'" + msgstr "" + + #: stmt.c:5167 + #, c-format + msgid "enumeration value `%s' not handled in switch" + msgstr "" + + #: stmt.c:5193 stmt.c:5213 + #, c-format + msgid "case value `%ld' not in enumerated type" + msgstr "" + + #: stmt.c:5196 stmt.c:5216 + #, c-format + msgid "case value `%ld' not in enumerated type `%s'" + msgstr "" + + #: stor-layout.c:173 + msgid "type size can't be explicitly evaluated" + msgstr "" + + #: stor-layout.c:175 + msgid "variable-size type declared outside of any function" + msgstr "" + + #: stor-layout.c:456 + #, c-format + msgid "size of `%s' is %d bytes" + msgstr "" + + #: stor-layout.c:458 + #, c-format + msgid "size of `%s' is larger than %d bytes" + msgstr "" + + #: stor-layout.c:856 stor-layout.c:1157 + #, c-format + msgid "packed attribute causes inefficient alignment for `%s'" + msgstr "" + + #: stor-layout.c:858 stor-layout.c:1159 + #, c-format + msgid "packed attribute is unnecessary for `%s'" + msgstr "" + + #: stor-layout.c:873 + #, c-format + msgid "padding struct to align `%s'" + msgstr "" + + #: stor-layout.c:1121 + msgid "padding struct size to alignment boundary" + msgstr "" + + #: stor-layout.c:1164 + msgid "packed attribute causes inefficient alignment" + msgstr "" + + #: stor-layout.c:1166 + msgid "packed attribute is unnecessary" + msgstr "" + + #: timevar.c:448 + msgid "" + "\n" + "Execution times (seconds)\n" + msgstr "" + + #. Print total time. + #: timevar.c:498 + msgid " TOTAL :" + msgstr "" + + #: timevar.c:534 + #, c-format + msgid "time in %s: %ld.%06ld (%ld%%)\n" + msgstr "" + + #: tlink.c:428 + #, c-format + msgid "collect: reading %s\n" + msgstr "" + + #: tlink.c:532 + #, c-format + msgid "collect: recompiling %s\n" + msgstr "" + + #: tlink.c:698 + #, c-format + msgid "collect: tweaking %s in %s\n" + msgstr "" + + #: tlink.c:745 + msgid "collect: relinking\n" + msgstr "" + + #: tlink.c:754 + #, c-format + msgid "ld returned %d exit status" + msgstr "" + + #: toplev.c:895 + msgid "Generate debugging info in default format" + msgstr "" + + #: toplev.c:896 + msgid "Generate debugging info in default extended format" + msgstr "" + + #: toplev.c:898 + msgid "Generate STABS format debug info" + msgstr "" + + #: toplev.c:899 + msgid "Generate extended STABS format debug info" + msgstr "" + + #: toplev.c:902 + msgid "Generate DWARF-1 format debug info" + msgstr "" + + #: toplev.c:904 + msgid "Generate extended DWARF-1 format debug info" + msgstr "" + + #: toplev.c:907 + msgid "Generate DWARF-2 debug info" + msgstr "" + + #: toplev.c:910 + msgid "Generate XCOFF format debug info" + msgstr "" + + #: toplev.c:911 + msgid "Generate extended XCOFF format debug info" + msgstr "" + + #: toplev.c:914 + msgid "Generate COFF format debug info" + msgstr "" + + #: toplev.c:917 + msgid "Generate VMS format debug info" + msgstr "" + + #: toplev.c:961 + msgid "Perform DWARF2 duplicate elimination" + msgstr "" + + #: toplev.c:963 + msgid "Do not store floats in registers" + msgstr "" + + #: toplev.c:965 + msgid "Consider all mem refs through pointers as volatile" + msgstr "" + + #: toplev.c:967 + msgid "Consider all mem refs to global data to be volatile" + msgstr "" + + #: toplev.c:969 + msgid "Consider all mem refs to static data to be volatile" + msgstr "" + + #: toplev.c:971 + msgid "Defer popping functions args from stack until later" + msgstr "" + + #: toplev.c:973 + msgid "When possible do not generate stack frames" + msgstr "" + + #: toplev.c:975 + msgid "Optimize sibling and tail recursive calls" + msgstr "" + + #: toplev.c:977 + msgid "When running CSE, follow jumps to their targets" + msgstr "" + + #: toplev.c:979 + msgid "When running CSE, follow conditional jumps" + msgstr "" + + #: toplev.c:981 + msgid "Perform a number of minor, expensive optimizations" + msgstr "" + + #: toplev.c:983 + msgid "Perform jump threading optimizations" + msgstr "" + + #: toplev.c:985 + msgid "Perform strength reduction optimizations" + msgstr "" + + #: toplev.c:987 + msgid "Perform loop unrolling when iteration count is known" + msgstr "" + + #: toplev.c:989 + msgid "Perform loop unrolling for all loops" + msgstr "" + + #: toplev.c:991 + msgid "Generate prefetch instructions, if available, for arrays in loops" + msgstr "" + + #: toplev.c:993 + msgid "Force all loop invariant computations out of loops" + msgstr "" + + #: toplev.c:995 + msgid "Strength reduce all loop general induction variables" + msgstr "" + + #: toplev.c:997 + msgid "Store strings in writable data section" + msgstr "" + + #: toplev.c:999 + msgid "Enable machine specific peephole optimizations" + msgstr "" + + #: toplev.c:1001 + msgid "Copy memory operands into registers before using" + msgstr "" + + #: toplev.c:1003 + msgid "Copy memory address constants into regs before using" + msgstr "" + + #: toplev.c:1005 + msgid "Allow function addresses to be held in registers" + msgstr "" + + #: toplev.c:1007 + msgid "Integrate simple functions into their callers" + msgstr "" + + #: toplev.c:1009 + msgid "Generate code for funcs even if they are fully inlined" + msgstr "" + + #: toplev.c:1011 + msgid "Pay attention to the 'inline' keyword" + msgstr "" + + #: toplev.c:1013 + msgid "Emit static const variables even if they are not used" + msgstr "" + + #: toplev.c:1015 + msgid "Check for syntax errors, then stop" + msgstr "" + + #: toplev.c:1017 + msgid "Mark data as shared rather than private" + msgstr "" + + #: toplev.c:1019 + msgid "Enable saving registers around function calls" + msgstr "" + + #: toplev.c:1021 + msgid "Return 'short' aggregates in memory, not registers" + msgstr "" + + #: toplev.c:1023 + msgid "Return 'short' aggregates in registers" + msgstr "" + + #: toplev.c:1025 + msgid "Attempt to fill delay slots of branch instructions" + msgstr "" + + #: toplev.c:1027 + msgid "Perform the global common subexpression elimination" + msgstr "" + + #: toplev.c:1029 + msgid "Perform enhanced load motion during global subexpression elimination" + msgstr "" + + #: toplev.c:1031 + msgid "Perform store motion after global subexpression elimination" + msgstr "" + + #: toplev.c:1033 + msgid "Run CSE pass after loop optimizations" + msgstr "" + + #: toplev.c:1035 + msgid "Run the loop optimizer twice" + msgstr "" + + #: toplev.c:1037 + msgid "Delete useless null pointer checks" + msgstr "" + + #: toplev.c:1039 + msgid "Pretend that host and target use the same FP format" + msgstr "" + + #: toplev.c:1041 + msgid "Reschedule instructions before register allocation" + msgstr "" + + #: toplev.c:1043 + msgid "Reschedule instructions after register allocation" + msgstr "" + + #: toplev.c:1045 + msgid "Enable scheduling across basic blocks" + msgstr "" + + #: toplev.c:1047 + msgid "Allow speculative motion of non-loads" + msgstr "" + + #: toplev.c:1049 + msgid "Allow speculative motion of some loads" + msgstr "" + + #: toplev.c:1051 + msgid "Allow speculative motion of more loads" + msgstr "" + + #: toplev.c:1053 + msgid "Replace add,compare,branch with branch on count reg" + msgstr "" + + #: toplev.c:1055 + msgid "Generate position independent code, if possible" + msgstr "" + + #: toplev.c:1058 + msgid "Enable exception handling" + msgstr "" + + #: toplev.c:1060 + msgid "Just generate unwind tables for exception handling" + msgstr "" + + #: toplev.c:1062 + msgid "Generate unwind tables exact at each instruction boundary" + msgstr "" + + #: toplev.c:1064 + msgid "Support synchronous non-call exceptions" + msgstr "" + + #: toplev.c:1066 + msgid "Insert arc based program profiling code" + msgstr "" + + #: toplev.c:1068 + msgid "Create data files needed by gcov" + msgstr "" + + #: toplev.c:1070 + msgid "Use profiling information for branch probabilities" + msgstr "" + + #: toplev.c:1072 + msgid "Reorder basic blocks to improve code placement" + msgstr "" + + #: toplev.c:1074 + msgid "Do the register renaming optimization pass" + msgstr "" + + #: toplev.c:1076 + msgid "Do the register copy-propagation optimization pass" + msgstr "" + + #: toplev.c:1078 + msgid "Do not put uninitialized globals in the common section" + msgstr "" + + #: toplev.c:1080 + msgid "Do not generate .size directives" + msgstr "" + + #: toplev.c:1082 + msgid "place each function into its own section" + msgstr "" + + #: toplev.c:1084 + msgid "place data items into their own section" + msgstr "" + + #: toplev.c:1086 + msgid "Add extra commentry to assembler output" + msgstr "" + + #: toplev.c:1088 + msgid "Output GNU ld formatted global initializers" + msgstr "" + + #: toplev.c:1090 + msgid "Enables a register move optimization" + msgstr "" + + #: toplev.c:1092 + msgid "Do the full regmove optimization pass" + msgstr "" + + #: toplev.c:1094 + msgid "Pack structure members together without holes" + msgstr "" + + #: toplev.c:1096 + msgid "Insert stack checking code into the program" + msgstr "" + + #: toplev.c:1098 + msgid "Specify that arguments may alias each other & globals" + msgstr "" + + #: toplev.c:1100 + msgid "Assume arguments may alias globals but not each other" + msgstr "" + + #: toplev.c:1102 + msgid "Assume arguments do not alias each other or globals" + msgstr "" + + #: toplev.c:1104 + msgid "Assume strict aliasing rules apply" + msgstr "" + + #: toplev.c:1106 + msgid "Align the start of loops" + msgstr "" + + #: toplev.c:1108 + msgid "Align labels which are only reached by jumping" + msgstr "" + + #: toplev.c:1110 + msgid "Align all labels" + msgstr "" + + #: toplev.c:1112 + msgid "Align the start of functions" + msgstr "" + + #: toplev.c:1114 + msgid "Attempt to merge identical constants accross compilation units" + msgstr "" + + #: toplev.c:1116 + msgid "Attempt to merge identical constants and constant variables" + msgstr "" + + #: toplev.c:1118 + msgid "" + "Suppress output of instruction numbers and line number notes in debugging " + "dumps" + msgstr "" + + #: toplev.c:1120 + msgid "Instrument function entry/exit with profiling calls" + msgstr "" + + #: toplev.c:1122 + msgid "Enable SSA optimizations" + msgstr "" + + #: toplev.c:1124 + msgid "Enable SSA conditional constant propagation" + msgstr "" + + #: toplev.c:1126 + msgid "Enable aggressive SSA dead code elimination" + msgstr "" + + #: toplev.c:1128 + msgid "External symbols have a leading underscore" + msgstr "" + + #: toplev.c:1130 + msgid "Process #ident directives" + msgstr "" + + #: toplev.c:1132 + msgid "Enables an rtl peephole pass run before sched2" + msgstr "" + + #: toplev.c:1134 + msgid "Enables guessing of branch probabilities" + msgstr "" + + #: toplev.c:1136 + msgid "Set errno after built-in math functions" + msgstr "" + + #: toplev.c:1138 + msgid "Floating-point operations can trap" + msgstr "" + + #: toplev.c:1140 + msgid "Allow math optimizations that may violate IEEE or ANSI standards" + msgstr "" + + #: toplev.c:1142 + msgid "Compile pointers as triples: value, base & end" + msgstr "" + + #: toplev.c:1144 + msgid "Generate code to check bounds before dereferencing pointers and arrays" + msgstr "" + + #: toplev.c:1146 + msgid "Convert floating point constant to single precision constant" + msgstr "" + + #: toplev.c:1148 + msgid "Report time taken by each compiler pass at end of run" + msgstr "" + + #: toplev.c:1150 + msgid "Report on permanent memory allocation at end of run" + msgstr "" + + #: toplev.c:1152 + msgid "Trap for signed overflow in addition / subtraction / multiplication" + msgstr "" + + #: toplev.c:1169 + msgid "Compile just for ISO C89" + msgstr "" + + #: toplev.c:1171 + msgid "Do not promote floats to double if using -traditional" + msgstr "" + + #: toplev.c:1173 + msgid "Determine language standard" + msgstr "" + + #: toplev.c:1177 + msgid "Make bit-fields by unsigned by default" + msgstr "" + + #: toplev.c:1181 + msgid "Make 'char' be signed by default" + msgstr "" + + #: toplev.c:1183 + msgid "Make 'char' be unsigned by default" + msgstr "" + + #: toplev.c:1189 + msgid "Attempt to support traditional K&R style C" + msgstr "" + + #: toplev.c:1195 + msgid "Do not recognize the 'asm' keyword" + msgstr "" + + #: toplev.c:1198 + msgid "Do not recognize any built in functions" + msgstr "" + + #: toplev.c:1200 + msgid "Assume normal C execution environment" + msgstr "" + + #: toplev.c:1203 + msgid "Assume that standard libraries & main might not exist" + msgstr "" + + #: toplev.c:1206 + msgid "Allow different types as args of ? operator" + msgstr "" + + #: toplev.c:1209 + msgid "Allow the use of $ inside identifiers" + msgstr "" + + #: toplev.c:1214 + msgid "Use the same size for double as for float" + msgstr "" + + #: toplev.c:1217 + msgid "Use the smallest fitting integer to hold enums" + msgstr "" + + #: toplev.c:1220 + msgid "Override the underlying type for wchar_t to `unsigned short'" + msgstr "" + + #: toplev.c:1224 + msgid "Enable most warning messages" + msgstr "" + + #: toplev.c:1226 + msgid "Warn about casting functions to incompatible types" + msgstr "" + + #: toplev.c:1230 + msgid "Warn about functions which might be candidates for format attributes" + msgstr "" + + #: toplev.c:1233 + msgid "Warn about casts which discard qualifiers" + msgstr "" + + #: toplev.c:1236 + msgid "Warn about subscripts whose type is 'char'" + msgstr "" + + #: toplev.c:1239 toplev.c:1242 + msgid "Warn if nested comments are detected" + msgstr "" + + #: toplev.c:1245 + msgid "Warn about possibly confusing type conversions" + msgstr "" + + #: toplev.c:1248 + msgid "Warn about printf/scanf/strftime/strfmon format anomalies" + msgstr "" + + #: toplev.c:1252 + msgid "Don't warn about strftime formats yielding 2 digit years" + msgstr "" + + #: toplev.c:1255 + msgid "Don't warn about too many arguments to format functions" + msgstr "" + + #: toplev.c:1257 + msgid "Warn about non-string-literal format strings" + msgstr "" + + #: toplev.c:1260 + msgid "Warn about possible security problems with format functions" + msgstr "" + + #: toplev.c:1263 + msgid "Warn about implicit function declarations" + msgstr "" + + #: toplev.c:1267 + msgid "Warn when a declaration does not specify a type" + msgstr "" + + #: toplev.c:1272 + msgid "Warn about the use of the #import directive" + msgstr "" + + #: toplev.c:1276 + msgid "Do not warn about using 'long long' when -pedantic" + msgstr "" + + #: toplev.c:1278 + msgid "Warn about suspicious declarations of main" + msgstr "" + + #: toplev.c:1281 + msgid "Warn about possibly missing braces around initializers" + msgstr "" + + #: toplev.c:1284 + msgid "Warn about global funcs without previous declarations" + msgstr "" + + #: toplev.c:1287 + msgid "Warn about global funcs without prototypes" + msgstr "" + + #: toplev.c:1290 + msgid "Warn about use of multicharacter literals" + msgstr "" + + #: toplev.c:1293 + msgid "Warn about externs not at file scope level" + msgstr "" + + #: toplev.c:1296 + msgid "Warn about possible missing parentheses" + msgstr "" + + #: toplev.c:1299 + msgid "Warn about possible violations of sequence point rules" + msgstr "" + + #: toplev.c:1302 + msgid "Warn about function pointer arithmetic" + msgstr "" + + #: toplev.c:1305 + msgid "Warn about multiple declarations of the same object" + msgstr "" + + #: toplev.c:1308 + msgid "Warn about signed/unsigned comparisons" + msgstr "" + + #: toplev.c:1311 + msgid "Warn about testing equality of floating point numbers" + msgstr "" + + #: toplev.c:1314 + msgid "Warn about unrecognized pragmas" + msgstr "" + + #: toplev.c:1317 + msgid "Warn about non-prototyped function decls" + msgstr "" + + #: toplev.c:1320 + msgid "Warn about constructs whose meaning change in ISO C" + msgstr "" + + #: toplev.c:1323 + msgid "Warn when trigraphs are encountered" + msgstr "" + + #: toplev.c:1328 + msgid "Mark strings as 'const char *'" + msgstr "" + + #: toplev.c:1458 + msgid "Warn when a function is unused" + msgstr "" + + #: toplev.c:1460 + msgid "Warn when a label is unused" + msgstr "" + + #: toplev.c:1462 + msgid "Warn when a function parameter is unused" + msgstr "" + + #: toplev.c:1464 + msgid "Warn when a variable is unused" + msgstr "" + + #: toplev.c:1466 + msgid "Warn when an expression value is unused" + msgstr "" + + #: toplev.c:1468 + msgid "Do not suppress warnings from system headers" + msgstr "" + + #: toplev.c:1470 + msgid "Treat all warnings as errors" + msgstr "" + + #: toplev.c:1472 + msgid "Warn when one local variable shadows another" + msgstr "" + + #: toplev.c:1474 + msgid "Warn about enumerated switches missing a specific case" + msgstr "" + + #: toplev.c:1476 + msgid "Warn about returning structures, unions or arrays" + msgstr "" + + #: toplev.c:1478 + msgid "Warn about pointer casts which increase alignment" + msgstr "" + + #: toplev.c:1480 + msgid "Warn about code that will never be executed" + msgstr "" + + #: toplev.c:1482 + msgid "Warn about uninitialized automatic variables" + msgstr "" + + #: toplev.c:1484 + msgid "Warn when an inlined function cannot be inlined" + msgstr "" + + #: toplev.c:1486 + msgid "Warn when the packed attribute has no effect on struct layout" + msgstr "" + + #: toplev.c:1488 + msgid "Warn when padding is required to align struct members" + msgstr "" + + #: toplev.c:1490 + msgid "Warn when an optimization pass is disabled" + msgstr "" + + #: toplev.c:1492 + msgid "Warn about uses of __attribute__((deprecated)) declarations" + msgstr "" + + #: toplev.c:1494 + msgid "Warn about functions which might be candidates for attribute noreturn" + msgstr "" + + #: toplev.c:1565 toplev.c:4379 tradcpp.c:792 + #, c-format + msgid "invalid option `%s'" + msgstr "" + + #: toplev.c:1711 + #, c-format + msgid "internal error: %s" + msgstr "" + + #: toplev.c:2024 + #, c-format + msgid "`%s' used but never defined" + msgstr "" + + #: toplev.c:2027 + #, c-format + msgid "`%s' declared `static' but never defined" + msgstr "" + + #: toplev.c:2049 + #, c-format + msgid "`%s' defined but not used" + msgstr "" + + #: toplev.c:2280 + #, c-format + msgid "invalid register name `%s' for register variable" + msgstr "" + + #: toplev.c:3279 + #, c-format + msgid "" + "crossjump disabled: %d > 1000 basic blocks and %d >= 20 edges/basic block" + msgstr "" + + #: toplev.c:3590 + msgid "" + " -ffixed- Mark as being unavailable to the " + "compiler\n" + msgstr "" + + #: toplev.c:3591 + msgid "" + " -fcall-used- Mark as being corrupted by function " + "calls\n" + msgstr "" + + #: toplev.c:3592 + msgid "" + " -fcall-saved- Mark as being preserved across " + "functions\n" + msgstr "" + + #: toplev.c:3593 + msgid "" + " -finline-limit= Limits the size of inlined functions to \n" + msgstr "" + + #: toplev.c:3594 + msgid "" + " -fmessage-length= Limits diagnostics messages lengths to " + "characters per line. 0 suppresses line-wrapping\n" + msgstr "" + + #: toplev.c:3595 + msgid "" + " -fdiagnostics-show-location=[once | every-line] Indicates how often source " + "location information should be emitted, as prefix, at the beginning of " + "diagnostics when line-wrapping\n" + msgstr "" + + #: toplev.c:3606 + msgid " -O[number] Set optimization level to [number]\n" + msgstr "" + + #: toplev.c:3607 + msgid " -Os Optimize for space rather than speed\n" + msgstr "" + + #: toplev.c:3619 + msgid "" + " -pedantic Issue warnings needed by strict compliance to ISO " + "C\n" + msgstr "" + + #: toplev.c:3620 + msgid "" + " -pedantic-errors Like -pedantic except that errors are produced\n" + msgstr "" + + #: toplev.c:3621 + msgid " -w Suppress warnings\n" + msgstr "" + + #: toplev.c:3622 + msgid " -W Enable extra warnings\n" + msgstr "" + + #: toplev.c:3633 + msgid " -Wunused Enable unused warnings\n" + msgstr "" + + #: toplev.c:3634 + msgid "" + " -Wlarger-than- Warn if an object is larger than bytes\n" + msgstr "" + + #: toplev.c:3635 + msgid " -p Enable function profiling\n" + msgstr "" + + #: toplev.c:3637 + msgid " -a Enable block profiling \n" + msgstr "" + + #: toplev.c:3640 + msgid " -ax Enable jump profiling \n" + msgstr "" + + #: toplev.c:3642 + msgid " -o Place output into \n" + msgstr "" + + #: toplev.c:3643 + msgid "" + " -G Put global and static data smaller than \n" + " bytes into a special section (on some targets)\n" + msgstr "" + + #: toplev.c:3654 + msgid " -aux-info Emit declaration info into \n" + msgstr "" + + #: toplev.c:3655 + msgid "" + " -quiet Do not display functions compiled or elapsed time\n" + msgstr "" + + #: toplev.c:3656 + msgid " -version Display the compiler's version\n" + msgstr "" + + #: toplev.c:3657 + msgid "" + " -d[letters] Enable dumps from specific passes of the compiler\n" + msgstr "" + + #: toplev.c:3658 + msgid "" + " -dumpbase Base name to be used for dumps from specific " + "passes\n" + msgstr "" + + #: toplev.c:3660 + msgid " -fsched-verbose= Set the verbosity level of the scheduler\n" + msgstr "" + + #: toplev.c:3662 + msgid " --help Display this information\n" + msgstr "" + + #: toplev.c:3677 + msgid "" + "\n" + "Language specific options:\n" + msgstr "" + + #: toplev.c:3689 + #, c-format + msgid " %-23.23s [undocumented]\n" + msgstr "" + + #: toplev.c:3697 toplev.c:3711 + #, c-format + msgid "" + "\n" + "There are undocumented %s specific options as well.\n" + msgstr "" + + #: toplev.c:3701 + #, c-format + msgid "" + "\n" + " Options for %s:\n" + msgstr "" + + #: toplev.c:3738 + msgid "" + "\n" + "Target specific options:\n" + msgstr "" + + #: toplev.c:3752 toplev.c:3771 + #, c-format + msgid " -m%-23.23s [undocumented]\n" + msgstr "" + + #: toplev.c:3780 + msgid "" + "\n" + "There are undocumented target specific options as well.\n" + msgstr "" + + #: toplev.c:3782 + msgid " They exist, but they are not documented.\n" + msgstr "" + + #: toplev.c:3835 + #, c-format + msgid "unrecognized gcc debugging option: %c" + msgstr "" + + #: toplev.c:3905 + #, c-format + msgid "unrecognized register name `%s'" + msgstr "" + + #: toplev.c:3930 toplev.c:4808 + #, c-format + msgid "unrecognized option `%s'" + msgstr "" + + #: toplev.c:3974 + msgid "-Wid-clash-LEN is no longer supported" + msgstr "" + + #: toplev.c:4051 + #, c-format + msgid "use -gdwarf -g%d for DWARF v1, level %d" + msgstr "" + + #: toplev.c:4054 + msgid "use -gdwarf-2 for DWARF v2" + msgstr "" + + #: toplev.c:4059 + #, c-format + msgid "ignoring option `%s' due to invalid debug level specification" + msgstr "" + + #: toplev.c:4082 toplev.c:4806 + #, c-format + msgid "`%s': unknown or unsupported -g option" + msgstr "" + + #: toplev.c:4089 + #, c-format + msgid "`%s' ignored, conflicts with `-g%s'" + msgstr "" + + #: toplev.c:4168 + msgid "-param option missing argument" + msgstr "" + + #: toplev.c:4177 + #, c-format + msgid "invalid --param option: %s" + msgstr "" + + #: toplev.c:4189 + #, c-format + msgid "invalid parameter value `%s'" + msgstr "" + + #: toplev.c:4396 + #, c-format + msgid "" + "%s%s%s version %s (%s)\n" + "%s\tcompiled by GNU C version %s.\n" + "%s%s%s version %s (%s) compiled by CC.\n" + msgstr "" + + #: toplev.c:4452 + msgid "options passed: " + msgstr "" + + #: toplev.c:4481 + msgid "options enabled: " + msgstr "" + + #: toplev.c:4540 java/jcf-write.c:3373 + #, c-format + msgid "can't open %s for writing" + msgstr "" + + #: toplev.c:4798 + #, c-format + msgid "ignoring command line option '%s'" + msgstr "" + + #: toplev.c:4801 + #, c-format + msgid "(it is valid for %s but not the selected language)" + msgstr "" + + #: toplev.c:4835 + msgid "-Wuninitialized is not supported without -O" + msgstr "" + + #: toplev.c:4894 + msgid "instruction scheduling not supported on this target machine" + msgstr "" + + #: toplev.c:4898 + msgid "this target machine does not have delayed branches" + msgstr "" + + #: toplev.c:4907 + msgid "profiling does not work without a frame pointer" + msgstr "" + + #: toplev.c:4922 + #, c-format + msgid "-f%sleading-underscore not supported on this target machine" + msgstr "" + + #: toplev.c:4985 + msgid "-ffunction-sections not supported for this target" + msgstr "" + + #: toplev.c:4990 + msgid "-fdata-sections not supported for this target" + msgstr "" + + #: toplev.c:4997 + msgid "-ffunction-sections disabled; it makes profiling impossible" + msgstr "" + + #: toplev.c:5004 + msgid "-fprefetch-loop-arrays not supported for this target" + msgstr "" + + #: toplev.c:5010 + msgid "" + "-fprefetch-loop-arrays not supported for this target (try -march switches)" + msgstr "" + + #: toplev.c:5019 + msgid "-fprefetch-loop-arrays is not supported with -Os" + msgstr "" + + #: toplev.c:5025 + msgid "-ffunction-sections may affect debugging on some targets" + msgstr "" + + #: toplev.c:5146 + #, c-format + msgid "error writing to %s" + msgstr "" + + #: toplev.c:5148 java/jcf-parse.c:969 java/jcf-write.c:3380 + #, c-format + msgid "error closing %s" + msgstr "" + + #. It's a float since it contains a point. + #: tradcif.y:231 + msgid "floating point numbers not allowed in #if expressions" + msgstr "" + + #: tradcif.y:277 + msgid "invalid number in #if expression" + msgstr "" + + #: tradcif.y:357 + msgid "invalid character constant in #if" + msgstr "" + + #: tradcif.y:394 + msgid "double quoted strings not allowed in #if expressions" + msgstr "" + + #: tradcif.y:407 + msgid "invalid token in expression" + msgstr "" + + #: tradcif.y:498 + msgid "octal character constant does not fit in a byte" + msgstr "" + + #: tradcif.y:519 + msgid "hex character constant does not fit in a byte" + msgstr "" + + #: tradcif.y:550 + msgid "empty #if expression" + msgstr "" + + #: tradcif.y:564 + msgid "Junk after end of expression." + msgstr "" + + #: tradcpp.c:145 + msgid "macro or #include recursion too deep" + msgstr "" + + #: tradcpp.c:562 + #, c-format + msgid "usage: %s [switches] input output" + msgstr "" + + #: tradcpp.c:578 + msgid "-traditional is not supported in C++" + msgstr "" + + #: tradcpp.c:580 + msgid "-traditional and -ansi are mutually exclusive" + msgstr "" + + #: tradcpp.c:594 + msgid "filename missing after -i option" + msgstr "" + + #: tradcpp.c:612 + msgid "filename missing after -o option" + msgstr "" + + #: tradcpp.c:675 + #, c-format + msgid "target missing after %s option" + msgstr "" + + #: tradcpp.c:689 + #, c-format + msgid "filename missing after %s option" + msgstr "" + + #: tradcpp.c:714 + #, c-format + msgid "macro name missing after -%c option" + msgstr "" + + #: tradcpp.c:734 + msgid "-pedantic and -traditional are mutually exclusive" + msgstr "" + + #: tradcpp.c:739 + msgid "-trigraphs and -traditional are mutually exclusive" + msgstr "" + + #: tradcpp.c:765 + msgid "directory name missing after -I option" + msgstr "" + + #: tradcpp.c:1445 tradcpp.c:3937 + msgid "`/*' within comment" + msgstr "" + + #: tradcpp.c:1821 + #, c-format + msgid "unterminated #%s conditional" + msgstr "" + + #: tradcpp.c:2180 + msgid "not in any file?!" + msgstr "" + + #: tradcpp.c:2286 + msgid "`defined' must be followed by ident or (ident)" + msgstr "" + + #: tradcpp.c:2290 + msgid "cccp error: invalid special hash type" + msgstr "" + + #: tradcpp.c:2388 tradcpp.c:2458 + msgid "#include expects \"fname\" or " + msgstr "" + + #: tradcpp.c:2543 + #, c-format + msgid "no include path in which to find %.*s" + msgstr "" + + #: tradcpp.c:2721 + msgid "invalid macro name" + msgstr "" + + #: tradcpp.c:2729 + #, c-format + msgid "invalid macro name `%s'" + msgstr "" + + #: tradcpp.c:2734 + msgid "\"defined\" cannot be used as a macro name" + msgstr "" + + #: tradcpp.c:2761 + msgid "parameter name starts with a digit in #define" + msgstr "" + + #: tradcpp.c:2771 + msgid "badly punctuated parameter list in #define" + msgstr "" + + #: tradcpp.c:2779 + msgid "unterminated parameter list in #define" + msgstr "" + + #: tradcpp.c:2827 + #, c-format + msgid "\"%.*s\" redefined" + msgstr "" + + #: tradcpp.c:3084 + msgid "# operator should be followed by a macro argument name" + msgstr "" + + #: tradcpp.c:3131 tradcpp.c:3157 tradcpp.c:3171 tradcpp.c:3178 tradcpp.c:3203 + msgid "invalid format #line command" + msgstr "" + + #: tradcpp.c:3229 + msgid "undefining `defined'" + msgstr "" + + #: tradcpp.c:3233 + #, c-format + msgid "undefining `%s'" + msgstr "" + + #: tradcpp.c:3289 + msgid "extra text at end of directive" + msgstr "" + + #: tradcpp.c:3396 + #, c-format + msgid "#error%.*s" + msgstr "" + + #: tradcpp.c:3406 + #, c-format + msgid "#warning%.*s" + msgstr "" + + #: tradcpp.c:3562 + msgid "#elif not within a conditional" + msgstr "" + + #: tradcpp.c:3819 + #, c-format + msgid "#%s not within a conditional" + msgstr "" + + #: tradcpp.c:3827 + msgid "#else or #elif after #else" + msgstr "" + + #: tradcpp.c:3867 + msgid "#else not within a conditional" + msgstr "" + + #: tradcpp.c:3898 + msgid "unbalanced #endif" + msgstr "" + + #: tradcpp.c:3992 + msgid "unterminated string or character constant" + msgstr "" + + #: tradcpp.c:4150 + #, c-format + msgid "arguments given to macro `%s'" + msgstr "" + + #: tradcpp.c:4156 + #, c-format + msgid "no args to macro `%s'" + msgstr "" + + #: tradcpp.c:4158 + #, c-format + msgid "only 1 arg to macro `%s'" + msgstr "" + + #: tradcpp.c:4160 + #, c-format + msgid "only %d args to macro `%s'" + msgstr "" + + #: tradcpp.c:4162 + #, c-format + msgid "too many (%d) args to macro `%s'" + msgstr "" + + #: tradcpp.c:4759 + #, c-format + msgid "" + "internal error in %s, at tradcpp.c:%d\n" + "Please submit a full bug report.\n" + "See %s for instructions." + msgstr "" + + #: tree-dump.c:848 + #, c-format + msgid "could not open dump file `%s'" + msgstr "" + + #: tree-dump.c:924 + #, c-format + msgid "ignoring unknown option `%.*s' in `-f%s'" + msgstr "" + + #: tree.c:3888 + msgid "arrays of functions are not meaningful" + msgstr "" + + #: tree.c:3945 + msgid "function return type cannot be function" + msgstr "" + + #: tree.c:4699 + msgid "invalid initializer for bit string" + msgstr "" + + #: tree.c:4758 + #, c-format + msgid "tree check: expected %s, have %s in %s, at %s:%d" + msgstr "" + + #: tree.c:4775 + #, c-format + msgid "tree check: expected class '%c', have '%c' (%s) in %s, at %s:%d" + msgstr "" + + #: varasm.c:454 config/i386/winnt.c:522 + #, c-format + msgid "%s causes a section type conflict" + msgstr "" + + #: varasm.c:879 + #, c-format + msgid "register name not specified for `%s'" + msgstr "" + + #: varasm.c:881 + #, c-format + msgid "invalid register name for `%s'" + msgstr "" + + #: varasm.c:884 + #, c-format + msgid "data type of `%s' isn't suitable for a register" + msgstr "" + + #: varasm.c:887 + #, c-format + msgid "register specified for `%s' isn't suitable for data type" + msgstr "" + + #: varasm.c:896 + msgid "global register variable has initial value" + msgstr "" + + #: varasm.c:899 + msgid "volatile register variables don't work as you might wish" + msgstr "" + + #: varasm.c:932 + #, c-format + msgid "register name given for non-register variable `%s'" + msgstr "" + + #: varasm.c:1570 + #, c-format + msgid "" + "alignment of `%s' is greater than maximum object file alignment. Using %d" + msgstr "" + + #: varasm.c:1621 + #, c-format + msgid "requested alignment for %s is greater than implemented alignment of %d" + msgstr "" + + #: varasm.c:4570 + msgid "initializer for integer value is too complicated" + msgstr "" + + #: varasm.c:4575 + msgid "initializer for floating value is not a floating constant" + msgstr "" + + #: varasm.c:4625 + msgid "unknown set constructor type" + msgstr "" + + #: varasm.c:4839 + #, c-format + msgid "invalid initial value for member `%s'" + msgstr "" + + #: varasm.c:5000 + #, c-format + msgid "weak declaration of `%s' must be public" + msgstr "" + + #: varasm.c:5002 + #, c-format + msgid "weak declaration of `%s' must precede definition" + msgstr "" + + #: varasm.c:5009 + #, c-format + msgid "weak declaration of `%s' not supported" + msgstr "" + + #: varasm.c:5036 varasm.c:5107 + msgid "only weak aliases are supported in this configuration" + msgstr "" + + #: varasm.c:5116 + msgid "alias definitions not supported in this configuration; ignored" + msgstr "" + + #: varray.c:88 + #, c-format + msgid "virtual array %s[%lu]: element %lu out of bounds in %s, at %s:%d" + msgstr "" + + #. Print an error message for unrecognized stab codes. + #: xcoffout.c:174 + #, c-format + msgid "no sclass for %s stab (0x%x)\n" + msgstr "" + + #: params.def:46 + msgid "" + "The maximum number of instructions in a function that is eligible for " + "inlining" + msgstr "" + + #: params.def:57 + msgid "The maximum number of instructions to consider to fill a delay slot" + msgstr "" + + #: params.def:68 + msgid "" + "The maximum number of instructions to consider to find accurate live " + "register information" + msgstr "" + + #: params.def:78 + msgid "The maximum length of scheduling's pending operations list" + msgstr "" + + #: params.def:85 + msgid "The maximum amount of memory to be allocated by GCSE" + msgstr "" + + #: params.def:90 + msgid "The maximum number of passes to make when doing GCSE" + msgstr "" + + #: config/darwin-c.c:76 + msgid "too many #pragma options align=reset" + msgstr "" + + #: config/darwin-c.c:98 config/darwin-c.c:101 config/darwin-c.c:103 + #: config/darwin-c.c:105 + msgid "malformed '#pragma options', ignoring" + msgstr "" + + #: config/darwin-c.c:108 + msgid "junk at end of '#pragma options'" + msgstr "" + + #: config/darwin-c.c:118 + msgid "malformed '#pragma options align={mac68k|power|reset}', ignoring" + msgstr "" + + #: config/darwin-c.c:131 + msgid "missing '(' after '#pragma unused', ignoring" + msgstr "" + + #: config/darwin-c.c:149 + msgid "missing ')' after '#pragma unused', ignoring" + msgstr "" + + #: config/darwin-c.c:152 + msgid "junk at end of '#pragma unused'" + msgstr "" + + #: config/nextstep.c:68 + msgid "optimization turned on" + msgstr "" + + #: config/nextstep.c:74 + msgid "optimization turned off" + msgstr "" + + #: config/nextstep.c:83 + msgid "optimization level restored" + msgstr "" + + #: config/lynx-ng.h:97 config/lynx.h:120 config/rs6000/lynx.h:85 + msgid "-msystem-v and -p are incompatible" + msgstr "" + + #: config/lynx-ng.h:99 config/lynx.h:122 config/rs6000/lynx.h:87 + msgid "-msystem-v and -mthreads are incompatible" + msgstr "" + #. Run-time compilation parameters selecting different hardware subsets. #: config/1750a/1750a.h:39 msgid "Use VAX-C alignment" msgstr "" ! #: config/a29k/a29k.c:1028 config/m88k/m88k.c:2967 #, c-format msgid "invalid %%Q value" msgstr "" ! #: config/a29k/a29k.c:1034 config/alpha/alpha.c:5402 config/m88k/m88k.c:3063 #, c-format msgid "invalid %%C value" msgstr "" ! #: config/a29k/a29k.c:1040 config/alpha/alpha.c:5247 ! #: config/rs6000/rs6000.c:6454 #, c-format msgid "invalid %%N value" msgstr "" ! #: config/a29k/a29k.c:1046 config/alpha/alpha.c:5318 ! #: config/rs6000/rs6000.c:6416 #, c-format msgid "invalid %%M value" msgstr "" ! #: config/a29k/a29k.c:1052 config/alpha/alpha.c:5310 ! #: config/rs6000/rs6000.c:6381 #, c-format msgid "invalid %%m value" msgstr "" ! #: config/a29k/a29k.c:1154 config/alpha/alpha.c:5271 config/romp/romp.c:690 #, c-format msgid "invalid %%L value" msgstr "" ! #: config/a29k/a29k.c:1159 config/rs6000/rs6000.c:6462 #, c-format msgid "invalid %%O value" msgstr "" ! #: config/a29k/a29k.c:1165 config/alpha/alpha.c:5255 ! #: config/rs6000/rs6000.c:6482 #, c-format msgid "invalid %%P value" msgstr "" ! #: config/a29k/a29k.c:1175 #, c-format msgid "invalid %%V value" msgstr "" *************** msgstr "" *** 3587,3593 **** msgid "Do not store locals in arg registers" msgstr "" ! #: config/a29k/a29k.h:118 config/i960/i960.h:284 config/mips/mips.h:375 msgid "Use software floating point" msgstr "" --- 8238,8244 ---- msgid "Do not store locals in arg registers" msgstr "" ! #: config/a29k/a29k.h:118 config/i960/i960.h:283 config/mips/mips.h:408 msgid "Use software floating point" msgstr "" *************** msgstr "" *** 3595,3675 **** msgid "Do not generate multm instructions" msgstr "" ! #: config/alpha/alpha.c:201 #, c-format msgid "bad value `%s' for -mtrap-precision switch" msgstr "" ! #: config/alpha/alpha.c:215 #, c-format msgid "bad value `%s' for -mfp-rounding-mode switch" msgstr "" ! #: config/alpha/alpha.c:230 #, c-format msgid "bad value `%s' for -mfp-trap-mode switch" msgstr "" ! #: config/alpha/alpha.c:249 config/alpha/alpha.c:261 #, c-format msgid "bad value `%s' for -mcpu switch" msgstr "" ! #: config/alpha/alpha.c:269 msgid "fp software completion requires -mtrap-precision=i" msgstr "" ! #: config/alpha/alpha.c:285 msgid "rounding mode not supported for VAX floats" msgstr "" ! #: config/alpha/alpha.c:290 msgid "trap mode not supported for VAX floats" msgstr "" ! #: config/alpha/alpha.c:319 #, c-format msgid "L%d cache latency unknown for %s" msgstr "" ! #: config/alpha/alpha.c:334 #, c-format msgid "bad value `%s' for -mmemory-latency" msgstr "" ! #: config/alpha/alpha.c:3901 config/ia64/ia64.c:3368 #, c-format msgid "invalid %%r value" msgstr "" ! #: config/alpha/alpha.c:3912 config/rs6000/rs6000.c:4088 #, c-format msgid "invalid %%R value" msgstr "" ! #: config/alpha/alpha.c:3935 config/romp/romp.c:724 config/romp/romp.c:731 #, c-format msgid "invalid %%h value" msgstr "" ! #: config/alpha/alpha.c:4025 #, c-format msgid "invalid %%U value" msgstr "" ! #: config/alpha/alpha.c:4033 config/alpha/alpha.c:4044 config/romp/romp.c:690 ! #: config/rs6000/rs6000.c:4096 #, c-format msgid "invalid %%s value" msgstr "" ! #: config/alpha/alpha.c:4092 config/rs6000/rs6000.c:3806 #, c-format msgid "invalid %%E value" msgstr "" ! #: config/alpha/alpha.c:4113 config/romp/romp.c:965 ! #: config/rs6000/rs6000.c:4388 #, c-format msgid "invalid %%xn code" msgstr "" --- 8246,8356 ---- msgid "Do not generate multm instructions" msgstr "" ! #: config/alpha/alpha.c:271 ! #, c-format ! msgid "-f%s ignored for Unicos/Mk (not supported)" ! msgstr "" ! ! #: config/alpha/alpha.c:295 ! msgid "-mieee not supported on Unicos/Mk" ! msgstr "" ! ! #: config/alpha/alpha.c:306 ! msgid "-mieee-with-inexact not supported on Unicos/Mk" ! msgstr "" ! ! #: config/alpha/alpha.c:323 #, c-format msgid "bad value `%s' for -mtrap-precision switch" msgstr "" ! #: config/alpha/alpha.c:337 #, c-format msgid "bad value `%s' for -mfp-rounding-mode switch" msgstr "" ! #: config/alpha/alpha.c:352 #, c-format msgid "bad value `%s' for -mfp-trap-mode switch" msgstr "" ! #: config/alpha/alpha.c:371 config/alpha/alpha.c:383 #, c-format msgid "bad value `%s' for -mcpu switch" msgstr "" ! #: config/alpha/alpha.c:390 ! msgid "trap mode not supported on Unicos/Mk" ! msgstr "" ! ! #: config/alpha/alpha.c:397 msgid "fp software completion requires -mtrap-precision=i" msgstr "" ! #: config/alpha/alpha.c:413 msgid "rounding mode not supported for VAX floats" msgstr "" ! #: config/alpha/alpha.c:418 msgid "trap mode not supported for VAX floats" msgstr "" ! #: config/alpha/alpha.c:447 #, c-format msgid "L%d cache latency unknown for %s" msgstr "" ! #: config/alpha/alpha.c:462 #, c-format msgid "bad value `%s' for -mmemory-latency" msgstr "" ! #: config/alpha/alpha.c:5211 config/m88k/m88k.c:2955 config/romp/romp.c:746 ! #: config/romp/romp.c:753 ! #, c-format ! msgid "invalid %%H value" ! msgstr "" ! ! #: config/alpha/alpha.c:5221 ! #, c-format ! msgid "invalid %%J value" ! msgstr "" ! ! #: config/alpha/alpha.c:5231 config/ia64/ia64.c:3509 config/m88k/m88k.c:3100 #, c-format msgid "invalid %%r value" msgstr "" ! #: config/alpha/alpha.c:5241 config/rs6000/rs6000.c:6528 #, c-format msgid "invalid %%R value" msgstr "" ! #: config/alpha/alpha.c:5263 config/m88k/m88k.c:2961 config/romp/romp.c:732 ! #: config/romp/romp.c:739 #, c-format msgid "invalid %%h value" msgstr "" ! #: config/alpha/alpha.c:5353 #, c-format msgid "invalid %%U value" msgstr "" ! #: config/alpha/alpha.c:5365 config/alpha/alpha.c:5379 config/romp/romp.c:698 ! #: config/rs6000/rs6000.c:6536 #, c-format msgid "invalid %%s value" msgstr "" ! #: config/alpha/alpha.c:5439 config/m88k/m88k.c:3084 ! #: config/rs6000/rs6000.c:6243 #, c-format msgid "invalid %%E value" msgstr "" ! #: config/alpha/alpha.c:5460 config/romp/romp.c:973 ! #: config/rs6000/rs6000.c:6844 #, c-format msgid "invalid %%xn code" msgstr "" *************** msgstr "" *** 3679,4058 **** #. each pair being { "NAME", VALUE } #. where VALUE is the bits to set or minus the bits to clear. #. An empty string NAME is used to identify the default VALUE. ! #: config/alpha/alpha.h:200 config/i386/i386.h:233 config/i386/i386.h:235 ! #: config/i386/i386.h:237 config/ns32k/ns32k.h:103 config/rs6000/rs6000.h:301 ! #: config/sparc/sparc.h:577 config/sparc/sparc.h:582 msgid "Use hardware fp" msgstr "" ! #: config/alpha/alpha.h:201 config/i386/i386.h:234 config/i386/i386.h:236 ! #: config/rs6000/rs6000.h:303 config/sparc/sparc.h:579 ! #: config/sparc/sparc.h:584 msgid "Do not use hardware fp" msgstr "" ! #: config/alpha/alpha.h:202 msgid "Use fp registers" msgstr "" ! #: config/alpha/alpha.h:204 msgid "Do not use fp registers" msgstr "" ! #: config/alpha/alpha.h:205 msgid "Do not assume GAS" msgstr "" ! #: config/alpha/alpha.h:206 msgid "Assume GAS" msgstr "" ! #: config/alpha/alpha.h:208 msgid "Request IEEE-conformant math library routines (OSF/1)" msgstr "" ! #: config/alpha/alpha.h:210 msgid "Emit IEEE-conformant code, without inexact exceptions" msgstr "" ! #: config/alpha/alpha.h:212 msgid "Emit IEEE-conformant code, with inexact exceptions" msgstr "" ! #: config/alpha/alpha.h:214 msgid "Do not emit complex integer constants to read-only memory" msgstr "" ! #: config/alpha/alpha.h:215 msgid "Use VAX fp" msgstr "" ! #: config/alpha/alpha.h:216 msgid "Do not use VAX fp" msgstr "" ! #: config/alpha/alpha.h:217 msgid "Emit code for the byte/word ISA extension" msgstr "" ! #: config/alpha/alpha.h:220 msgid "Emit code for the motion video ISA extension" msgstr "" ! #: config/alpha/alpha.h:223 msgid "Emit code for the fp move and sqrt ISA extension" msgstr "" ! #: config/alpha/alpha.h:225 msgid "Emit code for the counting ISA extension" msgstr "" ! #. This macro is similar to `TARGET_SWITCHES' but defines names of ! #. command options that have values. Its definition is an initializer ! #. with a subgrouping for each command option. ! #. ! #. Each subgrouping contains a string constant, that defines the fixed ! #. part of the option name, and the address of a variable. The ! #. variable, type `char *', is set to the variable part of the given ! #. option if the fixed part matches. The actual option name is made ! #. by appending `-m' to the specified name. ! #. ! #. Here is an example which defines `-mshort-data-NUMBER'. If the ! #. given option is `-mshort-data-512', the variable `m88k_short_data' ! #. will be set to the string `"512"'. ! #. ! #. extern char *m88k_short_data; ! #. #define TARGET_OPTIONS { { "short-data-", &m88k_short_data } } #. For -mcpu= #. For -mtune= #. For -mfp-rounding-mode=[n|m|c|d] #. For -mfp-trap-mode=[n|u|su|sui] #. For -mtrap-precision=[p|f|i] #. For -mmemory-latency= ! #: config/alpha/alpha.h:262 msgid "Use features of and schedule given CPU" msgstr "" ! #: config/alpha/alpha.h:264 msgid "Schedule given CPU" msgstr "" ! #: config/alpha/alpha.h:266 msgid "Control the generated fp rounding mode" msgstr "" ! #: config/alpha/alpha.h:268 msgid "Control the IEEE trap mode" msgstr "" ! #: config/alpha/alpha.h:270 msgid "Control the precision given to fp exceptions" msgstr "" ! #: config/alpha/alpha.h:272 msgid "Tune expected memory latency" msgstr "" ! #. The names we put in the hashtable will always be the unique versions gived to us by the stringtable, so we can just use their addresses as the keys. ! #. See if we already have an entry for this section. ! #: config/alpha/elf.h:354 config/elfos.h:461 config/i386/sco5.h:492 ! #: config/pa/pa-64.h:320 config/rs6000/sysv4.h:963 #, c-format ! msgid "%s causes a section type conflict" msgstr "" ! #: config/arc/arc.c:108 #, c-format ! msgid "bad value (%s) for -mcpu switch" msgstr "" ! #: config/arc/arc.c:1666 config/m32r/m32r.c:2217 ! msgid "invalid operand to %R code" msgstr "" ! #: config/arc/arc.c:1698 config/m32r/m32r.c:2240 ! msgid "invalid operand to %H/%L code" msgstr "" ! #: config/arc/arc.c:1722 config/m32r/m32r.c:2317 ! msgid "invalid operand to %U code" msgstr "" ! #: config/arc/arc.c:1733 ! msgid "invalid operand to %V code" msgstr "" #. Unknown flag. ! #: config/arc/arc.c:1740 config/m32r/m32r.c:2356 config/sparc/sparc.c:5888 msgid "invalid operand output code" msgstr "" ! #: config/arm/arm.c:372 #, c-format msgid "switch -mcpu=%s conflicts with -march= switch" msgstr "" ! #: config/arm/arm.c:382 config/rs6000/rs6000.c:311 config/sparc/sparc.c:317 #, c-format msgid "bad value (%s) for %s switch" msgstr "" ! #: config/arm/arm.c:518 msgid "target CPU does not support APCS-32" msgstr "" ! #: config/arm/arm.c:523 msgid "target CPU does not support APCS-26" msgstr "" ! #: config/arm/arm.c:529 msgid "target CPU does not support interworking" msgstr "" ! #: config/arm/arm.c:535 ! msgid "target CPU does not support THUMB instructions." msgstr "" ! #: config/arm/arm.c:549 msgid "" ! "enabling backtrace support is only meaningful when compiling for the Thumb." msgstr "" ! #: config/arm/arm.c:552 msgid "" "enabling callee interworking support is only meaningful when compiling for " ! "the Thumb." msgstr "" ! #: config/arm/arm.c:555 msgid "" "enabling caller interworking support is only meaningful when compiling for " ! "the Thumb." msgstr "" ! #: config/arm/arm.c:561 msgid "interworking forces APCS-32 to be used" msgstr "" ! #: config/arm/arm.c:567 msgid "-mapcs-stack-check incompatible with -mno-apcs-frame" msgstr "" ! #: config/arm/arm.c:575 msgid "-fpic and -mapcs-reent are incompatible" msgstr "" ! #: config/arm/arm.c:578 msgid "APCS reentrant code not supported. Ignored" msgstr "" ! #: config/arm/arm.c:586 msgid "-g with -mno-apcs-frame may not give sensible debugging" msgstr "" ! #: config/arm/arm.c:594 ! msgid "Passing floating point arguments in fp regs not yet supported" msgstr "" ! #: config/arm/arm.c:623 #, c-format ! msgid "Invalid floating point emulation option: -mfpe-%s" msgstr "" ! #: config/arm/arm.c:647 ! msgid "Structure size boundary can only be set to 8 or 32" msgstr "" ! #: config/arm/arm.c:655 msgid "-mpic-register= is useless without -fpic" msgstr "" ! #: config/arm/arm.c:664 #, c-format ! msgid "Unable to use '%s' for PIC register" msgstr "" ! #. FIXME - the way to handle this situation is to allow ! #. the pretend args to be dumped onto the stack, then ! #. reuse r3 to save IP. This would involve moving the ! #. copying of SP into IP until after the pretend args ! #. have been dumped, but this is not too hard. ! #. [See e.g. gcc.c-torture/execute/nest-stdar-1.c.] ! #: config/arm/arm.c:7844 ! msgid "Unable to find a temporary location for static chain register" msgstr "" ! #: config/arm/arm.c:8806 ! msgid "Unable to compute real location of stacked parameter" msgstr "" ! #: config/arm/arm.c:9500 msgid "no low registers available for popping high registers" msgstr "" ! #: config/arm/arm.c:9712 ! msgid "Interrupt Service Routines cannot be coded in Thumb mode." msgstr "" ! #: config/arm/arm.h:421 msgid "Generate APCS conformant stack frames" msgstr "" ! #: config/arm/arm.h:424 msgid "Store function names in object code" msgstr "" ! #: config/arm/arm.h:428 msgid "Use the 32-bit version of the APCS" msgstr "" ! #: config/arm/arm.h:430 msgid "Use the 26-bit version of the APCS" msgstr "" ! #: config/arm/arm.h:434 msgid "Pass FP arguments in FP registers" msgstr "" ! #: config/arm/arm.h:437 msgid "Generate re-entrant, PIC code" msgstr "" ! #: config/arm/arm.h:440 msgid "The MMU will trap on unaligned accesses" msgstr "" ! #: config/arm/arm.h:447 msgid "Use library calls to perform FP operations" msgstr "" ! #: config/arm/arm.h:449 config/i960/i960.h:282 msgid "Use hardware floating point instructions" msgstr "" ! #: config/arm/arm.h:451 msgid "Assume target CPU is configured as big endian" msgstr "" ! #: config/arm/arm.h:453 msgid "Assume target CPU is configured as little endian" msgstr "" ! #: config/arm/arm.h:455 msgid "Assume big endian bytes, little endian words" msgstr "" ! #: config/arm/arm.h:457 msgid "Support calls between Thumb and ARM instruction sets" msgstr "" ! #: config/arm/arm.h:460 msgid "Generate a call to abort if a noreturn function returns" msgstr "" ! #: config/arm/arm.h:463 msgid "Do not move instructions into a function's prologue" msgstr "" ! #: config/arm/arm.h:466 msgid "Do not load the PIC register in function prologues" msgstr "" ! #: config/arm/arm.h:469 msgid "Generate call insns as indirect calls, if necessary" msgstr "" ! #: config/arm/arm.h:472 msgid "Compile for the Thumb not the ARM" msgstr "" ! #: config/arm/arm.h:476 msgid "Thumb: Generate (non-leaf) stack frames even if not needed" msgstr "" ! #: config/arm/arm.h:479 msgid "Thumb: Generate (leaf) stack frames even if not needed" msgstr "" ! #: config/arm/arm.h:482 msgid "Thumb: Assume non-static functions may be called from ARM code" msgstr "" ! #: config/arm/arm.h:486 msgid "Thumb: Assume function pointers may go to non-Thumb aware code" msgstr "" ! #: config/arm/arm.h:496 msgid "Specify the name of the target CPU" msgstr "" ! #: config/arm/arm.h:498 msgid "Specify the name of the target architecture" msgstr "" ! #: config/arm/arm.h:502 msgid "Specify the version of the floating point emulator" msgstr "" ! #: config/arm/arm.h:504 msgid "Specify the minimum bit alignment of structures" msgstr "" ! #: config/arm/arm.h:506 msgid "Specify the register to be used for PIC addressing" msgstr "" ! #: config/arm/pe.c:255 config/i386/winnt.c:339 config/mcore/mcore.c:3400 ! #, c-format ! msgid "initialized variable `%s' is marked dllimport" ! msgstr "" ! ! #: config/arm/pe.c:264 config/i386/winnt.c:348 ! #, c-format ! msgid "static variable `%s' is marked dllimport" ! msgstr "" ! ! #: config/arm/pe.h:62 msgid "Ignore dllimport attribute for functions" msgstr "" --- 8360,8741 ---- #. each pair being { "NAME", VALUE } #. where VALUE is the bits to set or minus the bits to clear. #. An empty string NAME is used to identify the default VALUE. ! #: config/alpha/alpha.h:214 config/i386/i386.h:291 config/i386/i386.h:293 ! #: config/i386/i386.h:295 config/ns32k/ns32k.h:103 config/rs6000/rs6000.h:329 ! #: config/s390/s390.h:56 config/sparc/sparc.h:529 config/sparc/sparc.h:534 msgid "Use hardware fp" msgstr "" ! #: config/alpha/alpha.h:215 config/i386/i386.h:292 config/i386/i386.h:294 ! #: config/rs6000/rs6000.h:331 config/sparc/sparc.h:531 ! #: config/sparc/sparc.h:536 msgid "Do not use hardware fp" msgstr "" ! #: config/alpha/alpha.h:216 msgid "Use fp registers" msgstr "" ! #: config/alpha/alpha.h:218 msgid "Do not use fp registers" msgstr "" ! #: config/alpha/alpha.h:219 msgid "Do not assume GAS" msgstr "" ! #: config/alpha/alpha.h:220 msgid "Assume GAS" msgstr "" ! #: config/alpha/alpha.h:222 msgid "Request IEEE-conformant math library routines (OSF/1)" msgstr "" ! #: config/alpha/alpha.h:224 msgid "Emit IEEE-conformant code, without inexact exceptions" msgstr "" ! #: config/alpha/alpha.h:226 msgid "Emit IEEE-conformant code, with inexact exceptions" msgstr "" ! #: config/alpha/alpha.h:228 msgid "Do not emit complex integer constants to read-only memory" msgstr "" ! #: config/alpha/alpha.h:229 msgid "Use VAX fp" msgstr "" ! #: config/alpha/alpha.h:230 msgid "Do not use VAX fp" msgstr "" ! #: config/alpha/alpha.h:231 msgid "Emit code for the byte/word ISA extension" msgstr "" ! #: config/alpha/alpha.h:234 msgid "Emit code for the motion video ISA extension" msgstr "" ! #: config/alpha/alpha.h:237 msgid "Emit code for the fp move and sqrt ISA extension" msgstr "" ! #: config/alpha/alpha.h:239 msgid "Emit code for the counting ISA extension" msgstr "" ! #: config/alpha/alpha.h:242 ! msgid "Emit code using explicit relocation directives" ! msgstr "" ! ! #: config/alpha/alpha.h:245 ! msgid "Emit 16-bit relocations to the small data areas" ! msgstr "" ! ! #: config/alpha/alpha.h:247 ! msgid "Emit 32-bit relocations to the small data areas" ! msgstr "" ! #. For -mcpu= #. For -mtune= #. For -mfp-rounding-mode=[n|m|c|d] #. For -mfp-trap-mode=[n|u|su|sui] #. For -mtrap-precision=[p|f|i] #. For -mmemory-latency= ! #: config/alpha/alpha.h:275 msgid "Use features of and schedule given CPU" msgstr "" ! #: config/alpha/alpha.h:277 msgid "Schedule given CPU" msgstr "" ! #: config/alpha/alpha.h:279 msgid "Control the generated fp rounding mode" msgstr "" ! #: config/alpha/alpha.h:281 msgid "Control the IEEE trap mode" msgstr "" ! #: config/alpha/alpha.h:283 msgid "Control the precision given to fp exceptions" msgstr "" ! #: config/alpha/alpha.h:285 msgid "Tune expected memory latency" msgstr "" ! #: config/arc/arc.c:132 #, c-format ! msgid "bad value (%s) for -mcpu switch" msgstr "" ! #: config/arc/arc.c:359 #, c-format ! msgid "argument of `%s' attribute is not a string constant" msgstr "" ! #: config/arc/arc.c:366 ! #, c-format ! msgid "argument of `%s' attribute is not \"ilink1\" or \"ilink2\"" msgstr "" ! #: config/arc/arc.c:1709 config/m32r/m32r.c:2278 ! #, c-format ! msgid "invalid operand to %%R code" msgstr "" ! #: config/arc/arc.c:1741 config/m32r/m32r.c:2301 ! #, c-format ! msgid "invalid operand to %%H/%%L code" msgstr "" ! #: config/arc/arc.c:1765 config/m32r/m32r.c:2378 ! #, c-format ! msgid "invalid operand to %%U code" ! msgstr "" ! ! #: config/arc/arc.c:1776 ! #, c-format ! msgid "invalid operand to %%V code" msgstr "" #. Unknown flag. ! #: config/arc/arc.c:1783 config/m32r/m32r.c:2417 config/sparc/sparc.c:6145 msgid "invalid operand output code" msgstr "" ! #: config/arm/arm.c:436 #, c-format msgid "switch -mcpu=%s conflicts with -march= switch" msgstr "" ! #: config/arm/arm.c:446 config/rs6000/rs6000.c:444 config/sparc/sparc.c:381 #, c-format msgid "bad value (%s) for %s switch" msgstr "" ! #: config/arm/arm.c:582 msgid "target CPU does not support APCS-32" msgstr "" ! #: config/arm/arm.c:587 msgid "target CPU does not support APCS-26" msgstr "" ! #: config/arm/arm.c:593 msgid "target CPU does not support interworking" msgstr "" ! #: config/arm/arm.c:599 ! msgid "target CPU does not support THUMB instructions" msgstr "" ! #: config/arm/arm.c:613 msgid "" ! "enabling backtrace support is only meaningful when compiling for the Thumb" msgstr "" ! #: config/arm/arm.c:616 msgid "" "enabling callee interworking support is only meaningful when compiling for " ! "the Thumb" msgstr "" ! #: config/arm/arm.c:619 msgid "" "enabling caller interworking support is only meaningful when compiling for " ! "the Thumb" msgstr "" ! #: config/arm/arm.c:625 msgid "interworking forces APCS-32 to be used" msgstr "" ! #: config/arm/arm.c:631 msgid "-mapcs-stack-check incompatible with -mno-apcs-frame" msgstr "" ! #: config/arm/arm.c:639 msgid "-fpic and -mapcs-reent are incompatible" msgstr "" ! #: config/arm/arm.c:642 msgid "APCS reentrant code not supported. Ignored" msgstr "" ! #: config/arm/arm.c:650 msgid "-g with -mno-apcs-frame may not give sensible debugging" msgstr "" ! #: config/arm/arm.c:658 ! msgid "passing floating point arguments in fp regs not yet supported" msgstr "" ! #: config/arm/arm.c:687 #, c-format ! msgid "invalid floating point emulation option: -mfpe-%s" msgstr "" ! #: config/arm/arm.c:711 ! msgid "structure size boundary can only be set to 8 or 32" msgstr "" ! #: config/arm/arm.c:719 msgid "-mpic-register= is useless without -fpic" msgstr "" ! #: config/arm/arm.c:726 #, c-format ! msgid "unable to use '%s' for PIC register" msgstr "" ! #: config/arm/arm.c:1970 config/arm/arm.c:1993 config/avr/avr.c:4703 ! #: config/c4x/c4x.c:4650 config/h8300/h8300.c:3045 config/i386/i386.c:1260 ! #: config/i386/i386.c:1289 config/m68hc11/m68hc11.c:1220 ! #: config/mcore/mcore.c:3505 config/ns32k/ns32k.c:1044 ! #: config/rs6000/rs6000.c:10760 config/sh/sh.c:5583 config/sh/sh.c:5603 ! #: config/sh/sh.c:5642 config/stormy16/stormy16.c:2010 config/v850/v850.c:2047 ! #, c-format ! msgid "`%s' attribute only applies to functions" msgstr "" ! #: config/arm/arm.c:9288 ! msgid "unable to compute real location of stacked parameter" msgstr "" ! #: config/arm/arm.c:9968 msgid "no low registers available for popping high registers" msgstr "" ! #: config/arm/arm.c:10160 ! msgid "interrupt Service Routines cannot be coded in Thumb mode" msgstr "" ! #: config/arm/pe.c:168 config/i386/winnt.c:290 config/mcore/mcore.c:3365 ! #, c-format ! msgid "initialized variable `%s' is marked dllimport" ! msgstr "" ! ! #: config/arm/pe.c:177 config/i386/winnt.c:299 ! #, c-format ! msgid "static variable `%s' is marked dllimport" ! msgstr "" ! ! #: config/arm/arm.h:422 msgid "Generate APCS conformant stack frames" msgstr "" ! #: config/arm/arm.h:425 msgid "Store function names in object code" msgstr "" ! #: config/arm/arm.h:429 msgid "Use the 32-bit version of the APCS" msgstr "" ! #: config/arm/arm.h:431 msgid "Use the 26-bit version of the APCS" msgstr "" ! #: config/arm/arm.h:435 msgid "Pass FP arguments in FP registers" msgstr "" ! #: config/arm/arm.h:438 msgid "Generate re-entrant, PIC code" msgstr "" ! #: config/arm/arm.h:441 msgid "The MMU will trap on unaligned accesses" msgstr "" ! #: config/arm/arm.h:448 msgid "Use library calls to perform FP operations" msgstr "" ! #: config/arm/arm.h:450 config/i960/i960.h:281 msgid "Use hardware floating point instructions" msgstr "" ! #: config/arm/arm.h:452 msgid "Assume target CPU is configured as big endian" msgstr "" ! #: config/arm/arm.h:454 msgid "Assume target CPU is configured as little endian" msgstr "" ! #: config/arm/arm.h:456 msgid "Assume big endian bytes, little endian words" msgstr "" ! #: config/arm/arm.h:458 msgid "Support calls between Thumb and ARM instruction sets" msgstr "" ! #: config/arm/arm.h:461 msgid "Generate a call to abort if a noreturn function returns" msgstr "" ! #: config/arm/arm.h:464 msgid "Do not move instructions into a function's prologue" msgstr "" ! #: config/arm/arm.h:467 msgid "Do not load the PIC register in function prologues" msgstr "" ! #: config/arm/arm.h:470 msgid "Generate call insns as indirect calls, if necessary" msgstr "" ! #: config/arm/arm.h:473 msgid "Compile for the Thumb not the ARM" msgstr "" ! #: config/arm/arm.h:477 msgid "Thumb: Generate (non-leaf) stack frames even if not needed" msgstr "" ! #: config/arm/arm.h:480 msgid "Thumb: Generate (leaf) stack frames even if not needed" msgstr "" ! #: config/arm/arm.h:483 msgid "Thumb: Assume non-static functions may be called from ARM code" msgstr "" ! #: config/arm/arm.h:487 msgid "Thumb: Assume function pointers may go to non-Thumb aware code" msgstr "" ! #: config/arm/arm.h:497 msgid "Specify the name of the target CPU" msgstr "" ! #: config/arm/arm.h:499 msgid "Specify the name of the target architecture" msgstr "" ! #: config/arm/arm.h:503 msgid "Specify the version of the floating point emulator" msgstr "" ! #: config/arm/arm.h:505 msgid "Specify the minimum bit alignment of structures" msgstr "" ! #: config/arm/arm.h:507 msgid "Specify the register to be used for PIC addressing" msgstr "" ! #: config/arm/pe.h:65 msgid "Ignore dllimport attribute for functions" msgstr "" *************** msgstr "" *** 4071,4160 **** msgid "Don't do symbol renaming" msgstr "" ! #: config/avr/avr.c:190 #, c-format msgid "MCU `%s' not supported" msgstr "" ! #: config/avr/avr.c:430 #, c-format msgid "large frame pointer change (%d) with -mtiny-stack" msgstr "" ! #: config/avr/avr.c:4704 ! msgid "Only initialized variables can be placed into program memory area." msgstr "" ! #. `TARGET_...' ! #. This series of macros is to allow compiler command arguments to ! #. enable or disable the use of optional features of the target ! #. machine. For example, one machine description serves both the ! #. 68000 and the 68020; a command argument tells the compiler whether ! #. it should use 68020-only instructions or not. This command ! #. argument works by means of a macro `TARGET_68020' that tests a bit ! #. in `target_flags'. ! #. ! #. Define a macro `TARGET_FEATURENAME' for each such option. Its ! #. definition should test a bit in `target_flags'; for example: ! #. ! #. #define TARGET_68020 (target_flags & 1) ! #. ! #. One place where these macros are used is in the ! #. condition-expressions of instruction patterns. Note how ! #. `TARGET_68020' appears frequently in the 68000 machine description ! #. file, `m68k.md'. Another place they are used is in the ! #. definitions of the other macros in the `MACHINE.h' file. ! #: config/avr/avr.h:99 msgid "Assume int to be 8 bit integer" msgstr "" ! #: config/avr/avr.h:101 msgid "Change the stack pointer without disabling interrupts" msgstr "" ! #: config/avr/avr.h:103 msgid "Use subroutines for function prologue/epilogue" msgstr "" ! #: config/avr/avr.h:105 msgid "Change only the low 8 bits of the stack pointer" msgstr "" ! #: config/avr/avr.h:107 msgid "Do not generate tablejump insns" msgstr "" ! #: config/avr/avr.h:110 msgid "Output instruction sizes to the asm file" msgstr "" ! #: config/avr/avr.h:144 msgid "Specify the initial stack address" msgstr "" ! #: config/avr/avr.h:145 msgid "Specify the MCU name" msgstr "" ! #: config/avr/avr.h:2899 ! msgid "Trampolines not supported\n" msgstr "" ! #: config/c4x/c4x.c:268 #, c-format ! msgid "Unknown CPU version %d, using 40.\n" msgstr "" ! #: config/c4x/c4x.c:859 #, c-format ! msgid "ISR %s requires %d words of local vars, max is 32767." msgstr "" ! #: config/c4x/c4x.c:4525 #, c-format msgid "junk at end of '#pragma %s'" msgstr "" #. Name of the c4x assembler. #. Name of the c4x linker. #. Define assembler options. --- 8754,8977 ---- msgid "Don't do symbol renaming" msgstr "" ! #: config/avr/avr.c:221 #, c-format msgid "MCU `%s' not supported" msgstr "" ! #: config/avr/avr.c:461 #, c-format msgid "large frame pointer change (%d) with -mtiny-stack" msgstr "" ! #: config/avr/avr.c:1056 ! msgid "bad address, not (reg+disp):" msgstr "" ! #: config/avr/avr.c:1064 ! msgid "internal compiler error. Bad address:" ! msgstr "" ! ! #: config/avr/avr.c:1077 ! msgid "internal compiler error. Unknown mode:" ! msgstr "" ! ! #: config/avr/avr.c:1785 config/avr/avr.c:2497 ! msgid "invalid insn:" ! msgstr "" ! ! #: config/avr/avr.c:1822 config/avr/avr.c:1908 config/avr/avr.c:1957 ! #: config/avr/avr.c:1966 config/avr/avr.c:2064 config/avr/avr.c:2236 ! #: config/avr/avr.c:2534 config/avr/avr.c:2645 ! msgid "incorrect insn:" ! msgstr "" ! ! #: config/avr/avr.c:1985 config/avr/avr.c:2149 config/avr/avr.c:2307 ! #: config/avr/avr.c:2689 ! msgid "unknown move insn:" ! msgstr "" ! ! #: config/avr/avr.c:2925 ! msgid "bad shift insn:" ! msgstr "" ! ! #: config/avr/avr.c:3041 config/avr/avr.c:3471 config/avr/avr.c:3851 ! msgid "internal compiler error. Incorrect shift:" ! msgstr "" ! ! #: config/avr/avr.c:4676 ! msgid "only initialized variables can be placed into program memory area" ! msgstr "" ! ! #: config/avr/avr.h:63 msgid "Assume int to be 8 bit integer" msgstr "" ! #: config/avr/avr.h:65 msgid "Change the stack pointer without disabling interrupts" msgstr "" ! #: config/avr/avr.h:67 msgid "Use subroutines for function prologue/epilogue" msgstr "" ! #: config/avr/avr.h:69 msgid "Change only the low 8 bits of the stack pointer" msgstr "" ! #: config/avr/avr.h:71 msgid "Do not generate tablejump insns" msgstr "" ! #: config/avr/avr.h:74 msgid "Output instruction sizes to the asm file" msgstr "" ! #: config/avr/avr.h:87 msgid "Specify the initial stack address" msgstr "" ! #: config/avr/avr.h:88 msgid "Specify the MCU name" msgstr "" ! #. `GIV_SORT_CRITERION(GIV1, GIV2)' ! #. In some cases, the strength reduction optimization pass can ! #. produce better code if this is defined. This macro controls the ! #. order that induction variables are combined. This macro is ! #. particularly useful if the target has limited addressing modes. ! #. For instance, the SH target has only positive offsets in ! #. addresses. Thus sorting to put the smallest address first allows ! #. the most combinations to be found. ! #: config/avr/avr.h:2566 ! msgid "trampolines not supported" msgstr "" ! #: config/c4x/c4x-c.c:70 #, c-format ! msgid "missing '(' after '#pragma %s' - ignored" msgstr "" ! #: config/c4x/c4x-c.c:73 #, c-format ! msgid "missing function name in '#pragma %s' - ignored" msgstr "" ! #: config/c4x/c4x-c.c:78 ! #, c-format ! msgid "malformed '#pragma %s' - ignored" ! msgstr "" ! ! #: config/c4x/c4x-c.c:80 ! #, c-format ! msgid "missing section name in '#pragma %s' - ignored" ! msgstr "" ! ! #: config/c4x/c4x-c.c:85 ! #, c-format ! msgid "missing ')' for '#pragma %s' - ignored" ! msgstr "" ! ! #: config/c4x/c4x-c.c:88 #, c-format msgid "junk at end of '#pragma %s'" msgstr "" + #: config/c4x/c4x.c:299 + #, c-format + msgid "unknown CPU version %d, using 40.\n" + msgstr "" + + #: config/c4x/c4x.c:883 + #, c-format + msgid "ISR %s requires %d words of local vars, max is 32767" + msgstr "" + + #: config/c4x/c4x.c:1635 + msgid "using CONST_DOUBLE for address" + msgstr "" + + #: config/c4x/c4x.c:1775 + msgid "c4x_address_cost: Invalid addressing mode" + msgstr "" + + #: config/c4x/c4x.c:1917 + #, c-format + msgid "c4x_print_operand: %%L inconsistency" + msgstr "" + + #: config/c4x/c4x.c:1923 + #, c-format + msgid "c4x_print_operand: %%N inconsistency" + msgstr "" + + #: config/c4x/c4x.c:1964 + #, c-format + msgid "c4x_print_operand: %%O inconsistency" + msgstr "" + + #: config/c4x/c4x.c:2060 + msgid "c4x_print_operand: Bad operand case" + msgstr "" + + #: config/c4x/c4x.c:2103 + msgid "c4x_print_operand_address: Bad post_modify" + msgstr "" + + #: config/c4x/c4x.c:2125 + msgid "c4x_print_operand_address: Bad pre_modify" + msgstr "" + + #: config/c4x/c4x.c:2173 config/c4x/c4x.c:2185 config/c4x/c4x.c:2200 + msgid "c4x_print_operand_address: Bad operand case" + msgstr "" + + #: config/c4x/c4x.c:2456 + msgid "c4x_rptb_insert: Cannot find start label" + msgstr "" + + #: config/c4x/c4x.c:3443 config/c4x/c4x.c:3463 + msgid "mode not QImode" + msgstr "" + + #: config/c4x/c4x.c:3520 + msgid "invalid indirect memory address" + msgstr "" + + #: config/c4x/c4x.c:3609 + msgid "invalid indirect (S) memory address" + msgstr "" + + #: config/c4x/c4x.c:3950 + msgid "c4x_valid_operands: Internal error" + msgstr "" + + #: config/c4x/c4x.c:4430 + msgid "c4x_operand_subword: invalid mode" + msgstr "" + + #: config/c4x/c4x.c:4433 + msgid "c4x_operand_subword: invalid operand" + msgstr "" + + #. We could handle these with some difficulty. + #. e.g., *p-- => *(p-=2); *(p+1). + #: config/c4x/c4x.c:4459 + msgid "c4x_operand_subword: invalid autoincrement" + msgstr "" + + #: config/c4x/c4x.c:4465 + msgid "c4x_operand_subword: invalid address" + msgstr "" + + #: config/c4x/c4x.c:4476 + msgid "c4x_operand_subword: address not offsettable" + msgstr "" + + #: config/c4x/c4x.c:4676 + msgid "c4x_rptb_rpts_p: Repeat block top label moved\n" + msgstr "" + #. Name of the c4x assembler. #. Name of the c4x linker. #. Define assembler options. *************** msgstr "" *** 4371,4381 **** msgid "Assume that pointers not aliased" msgstr "" ! #: config/c4x/c4x.h:321 msgid "Specify maximum number of iterations for RPTS" msgstr "" ! #: config/c4x/c4x.h:323 msgid "Select CPU to generate code for" msgstr "" --- 9188,9198 ---- msgid "Assume that pointers not aliased" msgstr "" ! #: config/c4x/c4x.h:304 msgid "Specify maximum number of iterations for RPTS" msgstr "" ! #: config/c4x/c4x.h:306 msgid "Select CPU to generate code for" msgstr "" *************** msgstr "" *** 4393,4553 **** msgid "Generate code for the C300" msgstr "" ! #: config/convex/convex.h:52 msgid "Generate code for c1" msgstr "" ! #: config/convex/convex.h:53 msgid "Generate code for c2" msgstr "" ! #: config/convex/convex.h:54 msgid "Generate code for c32" msgstr "" ! #: config/convex/convex.h:55 config/convex/convex.h:56 msgid "Generate code for c34" msgstr "" ! #: config/convex/convex.h:58 msgid "Use standard calling sequence, with arg count word" msgstr "" ! #: config/convex/convex.h:60 msgid "Place arg count in a nop instruction (faster than push)" msgstr "" ! #: config/convex/convex.h:62 msgid "Don't push arg count, depend on symbol table" msgstr "" ! #: config/convex/convex.h:64 msgid "Use data cache for volatile mem refs (default)" msgstr "" ! #: config/convex/convex.h:66 msgid "Don't use data cache for volatile mem refs" msgstr "" ! #: config/convex/convex.h:68 msgid "Bypass data cache for volatile mem refs" msgstr "" ! #: config/convex/convex.h:69 msgid "Use 64-bit longs" msgstr "" ! #: config/convex/convex.h:70 msgid "Use cc- and libc-compatible 32-bit longs" msgstr "" ! #: config/d30v/d30v.c:186 #, c-format ! msgid "Bad modes_tieable_p for register %s, mode1 %s, mode2 %s" msgstr "" ! #. This macro defines names of command options to set and clear bits in ! #. `target_flags'. Its definition is an initializer with a subgrouping for ! #. each command option. ! #. ! #. Each subgrouping contains a string constant, that defines the option name, a ! #. number, which contains the bits to set in `target_flags', and a second ! #. string which is the description displayed by `--help'. If the number is ! #. negative then the bits specified by the number are cleared instead of being ! #. set. If the description string is present but empty, then no help ! #. information will be displayed for that option, but it will not count as an ! #. undocumented option. The actual option name is made by appending `-m' to ! #. the specified name. ! #. ! #. One of the subgroupings should have a null string. The number in this ! #. grouping is the default value for target_flags. Any target options act ! #. starting with that value. ! #. ! #. Here is an example which defines -m68000 and -m68020 with opposite meanings, ! #. and picks the latter as the default: ! #. ! #. #define TARGET_SWITCHES { { "68020", TARGET_MASK_68020, "" }, { "68000", -TARGET_MASK_68020, "Compile for the 68000" }, { "", TARGET_MASK_68020, "" }} ! #: config/d30v/d30v.h:447 msgid "Enable use of conditional move instructions" msgstr "" ! #: config/d30v/d30v.h:450 msgid "Disable use of conditional move instructions" msgstr "" ! #: config/d30v/d30v.h:453 msgid "Debug argument support in compiler" msgstr "" ! #: config/d30v/d30v.h:456 msgid "Debug stack support in compiler" msgstr "" ! #: config/d30v/d30v.h:459 msgid "Debug memory address support in compiler" msgstr "" ! #: config/d30v/d30v.h:462 ! msgid "Make adjacent short instructions parallel if possible." msgstr "" ! #: config/d30v/d30v.h:465 ! msgid "Do not make adjacent short instructions parallel." msgstr "" ! #: config/d30v/d30v.h:468 config/d30v/d30v.h:471 msgid "Link programs/data to be in external memory by default" msgstr "" ! #: config/d30v/d30v.h:474 msgid "Link programs/data to be in onchip memory by default" msgstr "" ! #. This macro is similar to `TARGET_SWITCHES' but defines names of command ! #. options that have values. Its definition is an initializer with a ! #. subgrouping for each command option. ! #. ! #. Each subgrouping contains a string constant, that defines the fixed part of ! #. the option name, the address of a variable, and a description string. The ! #. variable, type `char *', is set to the variable part of the given option if ! #. the fixed part matches. The actual option name is made by appending `-m' to ! #. the specified name. ! #. ! #. Here is an example which defines `-mshort-data-'. If the given ! #. option is `-mshort-data-512', the variable `m88k_short_data' will be set to ! #. the string "512". ! #. ! #. extern char *m88k_short_data; ! #. #define TARGET_OPTIONS { { "short-data-", &m88k_short_data, "Specify the size of the short data section" } } ! #: config/d30v/d30v.h:501 msgid "Change the branch costs within the compiler" msgstr "" ! #: config/d30v/d30v.h:504 msgid "Change the threshold for conversion to conditional execution" msgstr "" ! #: config/dsp16xx/dsp16xx.c:1225 config/dsp16xx/dsp16xx.c:1250 ! msgid "Stack size > 32k" msgstr "" ! #: config/dsp16xx/dsp16xx.c:1759 config/dsp16xx/dsp16xx.c:1999 msgid "inline float constants not supported on this host" msgstr "" #. Output assembler code to FILE to increment profiler label # LABELNO #. for profiling a function entry. ! #: config/dsp16xx/dsp16xx.h:1188 config/dsp16xx/dsp16xx.h:1193 ! #: config/dsp16xx/dsp16xx.h:1198 config/dsp16xx/dsp16xx.h:1840 ! #: config/dsp16xx/dsp16xx.h:1845 ! msgid "Profiling not implemented yet." msgstr "" #. Emit RTL insns to initialize the variable parts of a trampoline. #. FNADDR is an RTX for the address of the function's pure code. #. CXT is an RTX for the static chain value for the function. ! #: config/dsp16xx/dsp16xx.h:1209 config/dsp16xx/dsp16xx.h:1221 ! msgid "Trampolines not yet implemented" msgstr "" #. Macro to define tables used to set the flags. --- 9210,9743 ---- msgid "Generate code for the C300" msgstr "" ! #: config/convex/convex.h:53 msgid "Generate code for c1" msgstr "" ! #: config/convex/convex.h:54 msgid "Generate code for c2" msgstr "" ! #: config/convex/convex.h:55 msgid "Generate code for c32" msgstr "" ! #: config/convex/convex.h:56 config/convex/convex.h:57 msgid "Generate code for c34" msgstr "" ! #: config/convex/convex.h:59 msgid "Use standard calling sequence, with arg count word" msgstr "" ! #: config/convex/convex.h:61 msgid "Place arg count in a nop instruction (faster than push)" msgstr "" ! #: config/convex/convex.h:63 msgid "Don't push arg count, depend on symbol table" msgstr "" ! #: config/convex/convex.h:65 msgid "Use data cache for volatile mem refs (default)" msgstr "" ! #: config/convex/convex.h:67 msgid "Don't use data cache for volatile mem refs" msgstr "" ! #: config/convex/convex.h:69 msgid "Bypass data cache for volatile mem refs" msgstr "" ! #: config/convex/convex.h:70 msgid "Use 64-bit longs" msgstr "" ! #: config/convex/convex.h:71 msgid "Use cc- and libc-compatible 32-bit longs" msgstr "" ! #: config/cris/cris.c:569 ! msgid "unexpected index-type in cris_print_index" ! msgstr "" ! ! #: config/cris/cris.c:585 ! msgid "unexpected base-type in cris_print_base" ! msgstr "" ! ! #: config/cris/cris.c:878 #, c-format ! msgid "stackframe too big: %d bytes" msgstr "" ! #: config/cris/cris.c:1193 ! msgid "allocated but unused delay list in epilogue" ! msgstr "" ! ! #: config/cris/cris.c:1203 ! msgid "" ! "unexpected function type needing stack adjustment for __builtin_eh_return" ! msgstr "" ! ! #: config/cris/cris.c:1282 ! msgid "invalid operand for 'b' modifier" ! msgstr "" ! ! #: config/cris/cris.c:1294 ! msgid "invalid operand for 'v' modifier" ! msgstr "" ! ! #: config/cris/cris.c:1304 ! msgid "invalid operand for 'P' modifier" ! msgstr "" ! ! #: config/cris/cris.c:1311 ! msgid "invalid operand for 'p' modifier" ! msgstr "" ! ! #: config/cris/cris.c:1350 ! msgid "invalid operand for 'z' modifier" ! msgstr "" ! ! #: config/cris/cris.c:1381 config/cris/cris.c:1411 ! msgid "invalid operand for 'H' modifier" ! msgstr "" ! ! #: config/cris/cris.c:1387 ! msgid "bad register" ! msgstr "" ! ! #: config/cris/cris.c:1425 ! msgid "invalid operand for 'e' modifier" ! msgstr "" ! ! #: config/cris/cris.c:1442 ! msgid "invalid operand for 'm' modifier" ! msgstr "" ! ! #: config/cris/cris.c:1467 ! msgid "invalid operand for 'A' modifier" ! msgstr "" ! ! #: config/cris/cris.c:1475 ! msgid "invalid operand for 'D' modifier" ! msgstr "" ! ! #: config/cris/cris.c:1489 ! msgid "invalid operand for 'T' modifier" ! msgstr "" ! ! #: config/cris/cris.c:1498 ! msgid "invalid operand modifier letter" ! msgstr "" ! ! #: config/cris/cris.c:1506 ! #, c-format ! msgid "internal error: bad register: %d" ! msgstr "" ! ! #: config/cris/cris.c:1554 ! msgid "unexpected multiplicative operand" ! msgstr "" ! ! #: config/cris/cris.c:1574 ! msgid "unexpected operand" ! msgstr "" ! ! #: config/cris/cris.c:1609 config/cris/cris.c:1619 ! msgid "unrecognized address" ! msgstr "" ! ! #: config/cris/cris.c:1975 ! msgid "internal error: sideeffect-insn affecting main effect" ! msgstr "" ! ! #. If we get here, the caller got its initial tests wrong. ! #: config/cris/cris.c:2262 ! msgid "internal error: cris_side_effect_mode_ok with bad operands" ! msgstr "" ! ! #: config/cris/cris.c:2344 config/cris/cris.c:2402 ! msgid "unrecognized supposed constant" ! msgstr "" ! ! #: config/cris/cris.c:2443 ! msgid "unrecognized supposed constant in cris_global_pic_symbol" ! msgstr "" ! ! #: config/cris/cris.c:2462 ! #, c-format ! msgid "-max-stackframe=%d is not usable, not between 0 and %d" ! msgstr "" ! ! #: config/cris/cris.c:2490 ! #, c-format ! msgid "unknown CRIS version specification in -march= or -mcpu= : %s" ! msgstr "" ! ! #: config/cris/cris.c:2526 ! #, c-format ! msgid "unknown CRIS cpu version specification in -mtune= : %s" ! msgstr "" ! ! #: config/cris/cris.c:2544 ! msgid "-fPIC and -fpic are not supported in this configuration" ! msgstr "" ! ! #: config/cris/cris.c:2560 ! msgid "that particular -g option is invalid with -maout and -melinux" ! msgstr "" ! ! #: config/cris/cris.c:2790 config/cris/cris.c:2835 ! msgid "unexpected side-effects in address" ! msgstr "" ! ! #. Labels are never marked as global symbols. ! #: config/cris/cris.c:2932 config/cris/cris.c:2963 ! msgid "unexpected PIC symbol" ! msgstr "" ! ! #: config/cris/cris.c:2936 ! msgid "PIC register isn't set up" ! msgstr "" ! ! #: config/cris/cris.c:2949 config/cris/cris.c:3032 ! msgid "unexpected address expression" ! msgstr "" ! ! #: config/cris/cris.c:2967 ! msgid "emitting PIC operand, but PIC register isn't set up" ! msgstr "" ! ! #: config/cris/cris.c:2976 ! msgid "unexpected NOTE as addr_const:" ! msgstr "" ! ! #: config/cris/aout.h:106 ! msgid "Compile for the MMU-less Etrax 100-based elinux system" ! msgstr "" ! ! #: config/cris/aout.h:113 ! msgid "For elinux, request a specified stack-size for this program" ! msgstr "" ! ! #. No "no-etrax" as it does not really imply any model. On the other hand, "etrax" implies the common (and large) subset matching all models. ! #: config/cris/cris.h:336 ! msgid "Compile for ETRAX 4 (CRIS v3)" ! msgstr "" ! ! #: config/cris/cris.h:341 ! msgid "Compile for ETRAX 100 (CRIS v8)" ! msgstr "" ! ! #: config/cris/cris.h:345 ! msgid "Emit verbose debug information in assembly code" ! msgstr "" ! ! #: config/cris/cris.h:348 ! msgid "Do not use condition codes from normal instructions" ! msgstr "" ! ! #: config/cris/cris.h:352 ! msgid "Do not emit addressing modes with side-effect assignment" ! msgstr "" ! ! #: config/cris/cris.h:355 ! msgid "Do not tune stack alignment" ! msgstr "" ! ! #: config/cris/cris.h:358 ! msgid "Do not tune writable data alignment" ! msgstr "" ! ! #: config/cris/cris.h:361 ! msgid "Do not tune code and read-only data alignment" ! msgstr "" ! ! #: config/cris/cris.h:370 ! msgid "Align code and data to 32 bits" ! msgstr "" ! ! #: config/cris/cris.h:383 ! msgid "Don't align items in code or data" ! msgstr "" ! ! #: config/cris/cris.h:386 ! msgid "Do not emit function prologue or epilogue" ! msgstr "" ! ! #. We have to handle this m-option here since we can't wash it off in both CC1_SPEC and CC1PLUS_SPEC. ! #: config/cris/cris.h:390 ! msgid "Use the most feature-enabling options allowed by other options" ! msgstr "" ! ! #. We must call it "override-" since calling it "no-" will cause gcc.c to forget it, if there's a "later" -mbest-lib-options. Kludgy, but needed for some multilibbed files. ! #: config/cris/cris.h:396 ! msgid "Override -mbest-lib-options" ! msgstr "" ! ! #: config/cris/cris.h:428 ! msgid "Generate code for the specified chip or CPU version" ! msgstr "" ! ! #: config/cris/cris.h:430 ! msgid "Tune alignment for the specified chip or CPU version" ! msgstr "" ! ! #: config/cris/cris.h:432 ! msgid "Warn when a stackframe is larger than the specified size" ! msgstr "" ! ! #. Node: Profiling ! #: config/cris/cris.h:1029 ! msgid "no FUNCTION_PROFILER for CRIS" ! msgstr "" ! ! #: config/cris/linux.h:74 ! msgid "Together with -fpic and -fPIC, do not use GOTPLT references" ! msgstr "" ! ! #: config/d30v/d30v.c:209 ! #, c-format ! msgid "bad modes_tieable_p for register %s, mode1 %s, mode2 %s" ! msgstr "" ! ! #: config/d30v/d30v.c:2676 ! msgid "bad insn to d30v_print_operand_address:" ! msgstr "" ! ! #: config/d30v/d30v.c:2693 config/d30v/d30v.c:2754 config/d30v/d30v.c:2775 ! #: config/d30v/d30v.c:2793 ! msgid "bad insn to d30v_print_operand_memory_reference:" ! msgstr "" ! ! #: config/d30v/d30v.c:2861 ! msgid "bad insn to d30v_print_operand, 'f' modifier:" ! msgstr "" ! ! #: config/d30v/d30v.c:2870 ! msgid "bad insn to d30v_print_operand, 'A' modifier:" ! msgstr "" ! ! #: config/d30v/d30v.c:2877 ! msgid "bad insn to d30v_print_operand, 'M' modifier:" ! msgstr "" ! ! #: config/d30v/d30v.c:2931 ! msgid "bad insn to print_operand, 'F' or 'T' modifier:" ! msgstr "" ! ! #: config/d30v/d30v.c:2942 ! msgid "bad insn to print_operand, 'B' modifier:" ! msgstr "" ! ! #: config/d30v/d30v.c:2949 ! msgid "bad insn to print_operand, 'E' modifier:" ! msgstr "" ! ! #: config/d30v/d30v.c:2967 ! msgid "bad insn to print_operand, 'R' modifier:" ! msgstr "" ! ! #: config/d30v/d30v.c:2976 config/d30v/d30v.c:2984 ! msgid "bad insn to print_operand, 's' modifier:" ! msgstr "" ! ! #: config/d30v/d30v.c:3013 ! msgid "bad insn in d30v_print_operand, 0 case" ! msgstr "" ! ! #: config/d30v/d30v.c:3368 ! msgid "d30v_emit_comparison" ! msgstr "" ! ! #: config/d30v/d30v.c:3412 ! msgid "bad call to d30v_move_2words" ! msgstr "" ! ! #: config/d30v/d30v.h:108 msgid "Enable use of conditional move instructions" msgstr "" ! #: config/d30v/d30v.h:111 msgid "Disable use of conditional move instructions" msgstr "" ! #: config/d30v/d30v.h:114 msgid "Debug argument support in compiler" msgstr "" ! #: config/d30v/d30v.h:117 msgid "Debug stack support in compiler" msgstr "" ! #: config/d30v/d30v.h:120 msgid "Debug memory address support in compiler" msgstr "" ! #: config/d30v/d30v.h:123 ! msgid "Make adjacent short instructions parallel if possible" msgstr "" ! #: config/d30v/d30v.h:126 ! msgid "Do not make adjacent short instructions parallel" msgstr "" ! #: config/d30v/d30v.h:129 config/d30v/d30v.h:132 msgid "Link programs/data to be in external memory by default" msgstr "" ! #: config/d30v/d30v.h:135 msgid "Link programs/data to be in onchip memory by default" msgstr "" ! #: config/d30v/d30v.h:143 msgid "Change the branch costs within the compiler" msgstr "" ! #: config/d30v/d30v.h:146 msgid "Change the threshold for conversion to conditional execution" msgstr "" ! #: config/dsp16xx/dsp16xx.c:1446 config/dsp16xx/dsp16xx.c:1469 ! msgid "stack size > 32k" msgstr "" ! #: config/dsp16xx/dsp16xx.c:1678 ! msgid "invalid addressing mode" ! msgstr "" ! ! #: config/dsp16xx/dsp16xx.c:1857 ! msgid "bad register extension code" ! msgstr "" ! ! #: config/dsp16xx/dsp16xx.c:1958 ! msgid "invalid offset in ybase addressing" ! msgstr "" ! ! #: config/dsp16xx/dsp16xx.c:1961 ! msgid "invalid register in ybase addressing" ! msgstr "" ! ! #: config/dsp16xx/dsp16xx.c:1990 msgid "inline float constants not supported on this host" msgstr "" + #: config/dsp16xx/dsp16xx.c:2140 + msgid "invalid shift operator in emit_1600_core_shift" + msgstr "" + + #: config/dsp16xx/dsp16xx.c:2469 + msgid "invalid mode for gen_tst_reg" + msgstr "" + + #: config/dsp16xx/dsp16xx.c:2541 + msgid "invalid mode for integer comparison in gen_compare_reg" + msgstr "" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/dsp16xx/dsp16xx.h:215 + msgid "Pass parameters in registers (default)" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:217 + msgid "Don't pass parameters in registers" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:219 + msgid "Generate code for near calls" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:221 + msgid "Don't generate code for near calls" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:223 + msgid "Generate code for near jumps" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:225 + msgid "Don't generate code for near jumps" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:227 + msgid "Generate code for a bit-manipulation unit" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:229 + msgid "Don't generate code for a bit-manipulation unit" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:231 + msgid "Generate code for memory map1" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:233 + msgid "Generate code for memory map2" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:235 + msgid "Generate code for memory map3" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:237 + msgid "Generate code for memory map4" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:239 + msgid "Ouput extra code for initialized data" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:241 + msgid "Don't let reg. allocator use ybase registers" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:243 + msgid "Output extra debug info in Luxworks environment" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:245 + msgid "Save temp. files in Luxworks environment" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:257 + msgid "Specify alternate name for text section" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:259 + msgid "Specify alternate name for data section" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:261 + msgid "Specify alternate name for bss section" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:263 + msgid "Specify alternate name for constant section" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:265 + msgid "Specify alternate name for dsp16xx chip" + msgstr "" + #. Output assembler code to FILE to increment profiler label # LABELNO #. for profiling a function entry. ! #: config/dsp16xx/dsp16xx.h:1219 config/dsp16xx/dsp16xx.h:1224 ! #: config/dsp16xx/dsp16xx.h:1229 config/dsp16xx/dsp16xx.h:1809 ! #: config/dsp16xx/dsp16xx.h:1814 ! msgid "profiling not implemented yet" msgstr "" #. Emit RTL insns to initialize the variable parts of a trampoline. #. FNADDR is an RTX for the address of the function's pure code. #. CXT is an RTX for the static chain value for the function. ! #: config/dsp16xx/dsp16xx.h:1240 config/dsp16xx/dsp16xx.h:1252 ! msgid "trampolines not yet implemented" msgstr "" #. Macro to define tables used to set the flags. *************** msgstr "" *** 4563,4617 **** msgid "Generate code an embedded assembler can handle" msgstr "" ! #: config/fr30/fr30.c:445 msgid "fr30_print_operand_address: unhandled address" msgstr "" ! #: config/fr30/fr30.c:472 #, c-format ! msgid "fr30_print_operand: unrecognised %p code" msgstr "" ! #: config/fr30/fr30.c:492 ! msgid "fr30_print_operand: unrecognised %b code" msgstr "" ! #: config/fr30/fr30.c:513 ! msgid "fr30_print_operand: unrecognised %B code" msgstr "" ! #: config/fr30/fr30.c:521 ! msgid "fr30_print_operand: invalid operand to %A code" msgstr "" ! #: config/fr30/fr30.c:538 #, c-format ! msgid "fr30_print_operand: invalid %x code" msgstr "" ! #: config/fr30/fr30.c:545 ! msgid "fr30_print_operand: invalid %F code" msgstr "" ! #: config/fr30/fr30.c:561 msgid "fr30_print_operand: unknown code" msgstr "" ! #: config/fr30/fr30.c:590 config/fr30/fr30.c:599 config/fr30/fr30.c:610 ! #: config/fr30/fr30.c:623 msgid "fr30_print_operand: unhandled MEM" msgstr "" ! #: config/fr30/fr30.h:85 msgid "Assume small address space" msgstr "" ! #: config/h8300/h8300.c:116 ! msgid "-ms2600 is used without -ms." ! msgstr "" ! ! #: config/h8300/h8300.c:3047 config/h8300/h8300.c:3059 ! msgid "Only initialized variables can be placed into the 8-bit area." msgstr "" #. Macro to define tables used to set the flags. --- 9753,9807 ---- msgid "Generate code an embedded assembler can handle" msgstr "" ! #: config/fr30/fr30.c:456 msgid "fr30_print_operand_address: unhandled address" msgstr "" ! #: config/fr30/fr30.c:483 #, c-format ! msgid "fr30_print_operand: unrecognized %%p code" msgstr "" ! #: config/fr30/fr30.c:503 ! #, c-format ! msgid "fr30_print_operand: unrecognized %%b code" msgstr "" ! #: config/fr30/fr30.c:524 ! #, c-format ! msgid "fr30_print_operand: unrecognized %%B code" msgstr "" ! #: config/fr30/fr30.c:532 ! #, c-format ! msgid "fr30_print_operand: invalid operand to %%A code" msgstr "" ! #: config/fr30/fr30.c:549 #, c-format ! msgid "fr30_print_operand: invalid %%x code" msgstr "" ! #: config/fr30/fr30.c:556 ! #, c-format ! msgid "fr30_print_operand: invalid %%F code" msgstr "" ! #: config/fr30/fr30.c:572 msgid "fr30_print_operand: unknown code" msgstr "" ! #: config/fr30/fr30.c:601 config/fr30/fr30.c:610 config/fr30/fr30.c:621 ! #: config/fr30/fr30.c:634 msgid "fr30_print_operand: unhandled MEM" msgstr "" ! #: config/fr30/fr30.h:57 msgid "Assume small address space" msgstr "" ! #: config/h8300/h8300.c:142 ! msgid "-ms2600 is used without -ms" msgstr "" #. Macro to define tables used to set the flags. *************** msgstr "" *** 4619,4686 **** #. each pair being { "NAME", VALUE } #. where VALUE is the bits to set or minus the bits to clear. #. An empty string NAME is used to identify the default VALUE. ! #: config/h8300/h8300.h:108 msgid "Generate H8/S code" msgstr "" ! #: config/h8300/h8300.h:109 msgid "Do not generate H8/S code" msgstr "" ! #: config/h8300/h8300.h:110 msgid "Generate H8/S2600 code" msgstr "" ! #: config/h8300/h8300.h:111 msgid "Do not generate H8/S2600 code" msgstr "" ! #: config/h8300/h8300.h:112 msgid "Make integers 32 bits wide" msgstr "" ! #: config/h8300/h8300.h:115 msgid "Use registers for argument passing" msgstr "" ! #: config/h8300/h8300.h:117 msgid "Do not use registers for argument passing" msgstr "" ! #: config/h8300/h8300.h:119 msgid "Consider access to byte sized memory slow" msgstr "" ! #: config/h8300/h8300.h:120 msgid "Enable linker relaxing" msgstr "" ! #: config/h8300/h8300.h:122 msgid "Generate H8/300H code" msgstr "" ! #: config/h8300/h8300.h:123 msgid "Do not generate H8/300H code" msgstr "" ! #: config/h8300/h8300.h:124 msgid "Use H8/300 alignment rules" msgstr "" ! #: config/i370/i370.c:869 ! msgid "real name is too long - alias ignored" msgstr "" ! #: config/i370/i370.c:874 ! msgid "alias name is too long - alias ignored" msgstr "" ! #: config/i370/i370.c:1039 ! msgid "junk at end of #pragma map" msgstr "" ! #: config/i370/i370.c:1045 ! msgid "malformed #pragma map, ignored" msgstr "" #. Macro to define tables used to set the flags. This is a list in braces --- 9809,9880 ---- #. each pair being { "NAME", VALUE } #. where VALUE is the bits to set or minus the bits to clear. #. An empty string NAME is used to identify the default VALUE. ! #: config/h8300/h8300.h:117 msgid "Generate H8/S code" msgstr "" ! #: config/h8300/h8300.h:118 msgid "Do not generate H8/S code" msgstr "" ! #: config/h8300/h8300.h:119 msgid "Generate H8/S2600 code" msgstr "" ! #: config/h8300/h8300.h:120 msgid "Do not generate H8/S2600 code" msgstr "" ! #: config/h8300/h8300.h:121 msgid "Make integers 32 bits wide" msgstr "" ! #: config/h8300/h8300.h:124 msgid "Use registers for argument passing" msgstr "" ! #: config/h8300/h8300.h:126 msgid "Do not use registers for argument passing" msgstr "" ! #: config/h8300/h8300.h:128 msgid "Consider access to byte sized memory slow" msgstr "" ! #: config/h8300/h8300.h:129 msgid "Enable linker relaxing" msgstr "" ! #: config/h8300/h8300.h:131 msgid "Generate H8/300H code" msgstr "" ! #: config/h8300/h8300.h:132 msgid "Do not generate H8/300H code" msgstr "" ! #: config/h8300/h8300.h:133 msgid "Use H8/300 alignment rules" msgstr "" ! #: config/i370/i370-c.c:54 ! msgid "junk at end of #pragma map" msgstr "" ! #: config/i370/i370-c.c:60 ! msgid "malformed #pragma map, ignored" msgstr "" ! #: config/i370/i370.c:897 ! msgid "real name is too long - alias ignored" msgstr "" ! #: config/i370/i370.c:902 ! msgid "alias name is too long - alias ignored" ! msgstr "" ! ! #: config/i370/i370.c:1173 ! msgid "internal error--no jump follows compare:" msgstr "" #. Macro to define tables used to set the flags. This is a list in braces *************** msgstr "" *** 4695,4968 **** msgid "Do not generate char instructions" msgstr "" ! #: config/i386/cygwin.h:49 ! msgid "Use the Cygwin interface" msgstr "" ! #: config/i386/cygwin.h:51 ! msgid "Use the Mingw32 interface" msgstr "" ! #: config/i386/cygwin.h:52 ! msgid "Create GUI application" msgstr "" ! #: config/i386/cygwin.h:53 ! msgid "Don't set Windows defines" msgstr "" ! #: config/i386/cygwin.h:54 ! msgid "Set Windows defines" msgstr "" ! #: config/i386/cygwin.h:56 ! msgid "Create console application" msgstr "" ! #: config/i386/cygwin.h:57 config/i386/win32.h:59 ! msgid "Generate code for a DLL" msgstr "" ! #: config/i386/cygwin.h:59 config/i386/win32.h:61 ! msgid "Ignore dllimport for functions" msgstr "" ! #: config/i386/cygwin.h:61 ! msgid "Use Mingw-specific thread support" msgstr "" ! #: config/i386/cygwin.h:313 ! #, c-format ! msgid "-f%s ignored for target (all code is position independent)" msgstr "" ! #: config/i386/dgux.c:185 #, c-format ! msgid "Internal gcc abort from %s:%d" msgstr "" ! #: config/i386/dgux.c:189 ! msgid "The local variable `insn' has the value:" msgstr "" ! #: config/i386/dgux.h:62 ! msgid "Retain standard MXDB information" msgstr "" ! #: config/i386/dgux.h:64 ! msgid "Retain legend information" msgstr "" ! #: config/i386/dgux.h:67 ! msgid "Generate external legend information" msgstr "" ! #: config/i386/dgux.h:69 ! msgid "Emit identifying info in .s file" msgstr "" ! #: config/i386/dgux.h:71 ! msgid "Warn when a function arg is a structure" msgstr "" ! #: config/i386/dgux.h:249 ! msgid "argument is a structure" msgstr "" ! #: config/i386/djgpp.h:286 ! msgid "-mbnu210 is ignored (option is obsolete)." msgstr "" ! #: config/i386/i386.c:558 #, c-format ! msgid "bad value (%s) for -march= switch" msgstr "" ! #: config/i386/i386.c:570 config/mips/mips.c:4935 #, c-format ! msgid "bad value (%s) for -mcpu= switch" msgstr "" ! #: config/i386/i386.c:601 #, c-format ! msgid "Register '%c' is unknown" msgstr "" ! #: config/i386/i386.c:607 ! #, c-format ! msgid "Register '%c' already specified in allocation order" msgstr "" ! #: config/i386/i386.c:620 ! #, c-format ! msgid "-mregparm=%d is not between 0 and %d" msgstr "" ! #: config/i386/i386.c:631 ! #, c-format ! msgid "-malign-loops=%d is not between 0 and %d" msgstr "" ! #: config/i386/i386.c:642 ! #, c-format ! msgid "-malign-jumps=%d is not between 0 and %d" msgstr "" ! #: config/i386/i386.c:653 #, c-format ! msgid "-malign-functions=%d is not between 0 and %d" msgstr "" ! #: config/i386/i386.c:666 #, c-format ! msgid "-mpreferred-stack-boundary=%d is not between 2 and 31" msgstr "" ! #: config/i386/i386.c:677 #, c-format ! msgid "-mbranch-cost=%d is not between 0 and 5" msgstr "" ! #. We can't handle floating point constants; ! #. PRINT_OPERAND must handle them. ! #: config/i386/i386.c:3124 config/pdp11/pdp11.c:1477 final.c:3676 ! msgid "floating constant misused" msgstr "" ! #: config/i386/i386.c:3169 ! msgid "invalid UNSPEC as operand" msgstr "" ! #: config/i386/i386.c:3175 config/pdp11/pdp11.c:1524 final.c:3731 ! msgid "invalid expression as operand" msgstr "" ! #. @@@ better error message ! #: config/i386/i386.c:8457 config/i386/i386.c:8490 config/i386/i386.c:8627 ! msgid "selector must be an immediate" msgstr "" ! #. @@@ better error message ! #: config/i386/i386.c:8658 config/i386/i386.c:8686 ! msgid "mask must be an immediate" msgstr "" ! #: config/i386/i386.h:45 config/mips/mips.h:176 ! msgid "half-pic init called on systems that don't support it." msgstr "" ! #: config/i386/i386.h:238 ! msgid "Same as -mcpu=i386" msgstr "" ! #: config/i386/i386.h:239 ! msgid "Same as -mcpu=i486" msgstr "" ! #: config/i386/i386.h:240 ! msgid "Same as -mcpu=pentium" msgstr "" ! #: config/i386/i386.h:241 ! msgid "Same as -mcpu=pentiumpro" msgstr "" ! #: config/i386/i386.h:243 msgid "Alternate calling convention" msgstr "" ! #: config/i386/i386.h:245 config/ns32k/ns32k.h:106 msgid "Use normal calling convention" msgstr "" ! #: config/i386/i386.h:247 msgid "Align some doubles on dword boundary" msgstr "" ! #: config/i386/i386.h:249 msgid "Align doubles on word boundary" msgstr "" ! #: config/i386/i386.h:251 msgid "Uninitialized locals in .bss" msgstr "" ! #: config/i386/i386.h:253 msgid "Uninitialized locals in .data" msgstr "" ! #: config/i386/i386.h:255 msgid "Use IEEE math for fp comparisons" msgstr "" ! #: config/i386/i386.h:257 msgid "Do not use IEEE math for fp comparisons" msgstr "" ! #: config/i386/i386.h:259 msgid "Return values of functions in FPU registers" msgstr "" ! #: config/i386/i386.h:261 msgid "Do not return values of functions in FPU registers" msgstr "" ! #: config/i386/i386.h:263 msgid "Do not generate sin, cos, sqrt for FPU" msgstr "" ! #: config/i386/i386.h:265 msgid "Generate sin, cos, sqrt for FPU" msgstr "" ! #: config/i386/i386.h:267 msgid "Omit the frame pointer in leaf functions" msgstr "" ! #. undocumented ! #. undocumented ! #. undocumented ! #. undocumented ! #: config/i386/i386.h:274 msgid "Enable stack probing" msgstr "" #. undocumented #. undocumented ! #: config/i386/i386.h:279 ! msgid "Emit Intel syntax assembler opcodes" ! msgstr "" ! ! #: config/i386/i386.h:282 msgid "Align destination of the string operations" msgstr "" ! #: config/i386/i386.h:284 msgid "Do not align destination of the string operations" msgstr "" ! #: config/i386/i386.h:286 msgid "Inline all known string operations" msgstr "" ! #: config/i386/i386.h:288 msgid "Do not inline all known string operations" msgstr "" ! #: config/i386/i386.h:290 config/i386/i386.h:294 msgid "Use push instructions to save outgoing arguments" msgstr "" ! #: config/i386/i386.h:292 config/i386/i386.h:296 msgid "Do not use push instructions to save outgoing arguments" msgstr "" ! #: config/i386/i386.h:298 ! msgid "sizeof(long double) is 16." msgstr "" ! #: config/i386/i386.h:300 ! msgid "sizeof(long double) is 12." msgstr "" #. This macro is similar to `TARGET_SWITCHES' but defines names of --- 9889,10257 ---- msgid "Do not generate char instructions" msgstr "" ! #: config/i386/i386.c:925 ! #, c-format ! msgid "code model %s not supported in PIC mode" msgstr "" ! #: config/i386/i386.c:935 config/sparc/sparc.c:344 ! #, c-format ! msgid "bad value (%s) for -mcmodel= switch" msgstr "" ! #: config/i386/i386.c:950 ! #, c-format ! msgid "bad value (%s) for -masm= switch" msgstr "" ! #: config/i386/i386.c:953 ! #, c-format ! msgid "code model `%s' not supported in the %s bit mode" msgstr "" ! #: config/i386/i386.c:956 ! msgid "code model `large' not supported yet" msgstr "" ! #: config/i386/i386.c:958 ! #, c-format ! msgid "%i-bit mode not compiled in" msgstr "" ! #: config/i386/i386.c:988 config/mips/mips.c:4989 ! #, c-format ! msgid "bad value (%s) for -march= switch" msgstr "" ! #: config/i386/i386.c:999 config/mips/mips.c:4945 ! #, c-format ! msgid "bad value (%s) for -mcpu= switch" msgstr "" ! #: config/i386/i386.c:1018 ! #, c-format ! msgid "-mregparm=%d is not between 0 and %d" msgstr "" ! #: config/i386/i386.c:1031 ! msgid "-malign-loops is obsolete, use -falign-loops" msgstr "" ! #: config/i386/i386.c:1036 config/i386/i386.c:1049 config/i386/i386.c:1062 #, c-format ! msgid "-malign-loops=%d is not between 0 and %d" msgstr "" ! #: config/i386/i386.c:1044 ! msgid "-malign-jumps is obsolete, use -falign-jumps" msgstr "" ! #: config/i386/i386.c:1057 ! msgid "-malign-functions is obsolete, use -falign-functions" msgstr "" ! #: config/i386/i386.c:1095 ! #, c-format ! msgid "-mpreferred-stack-boundary=%d is not between %d and 12" msgstr "" ! #: config/i386/i386.c:1107 ! #, c-format ! msgid "-mbranch-cost=%d is not between 0 and 5" msgstr "" ! #: config/i386/i386.c:1129 ! msgid "-malign-double makes no sense in the 64bit mode" msgstr "" ! #: config/i386/i386.c:1131 ! msgid "-mrtd calling convention not supported in the 64bit mode" msgstr "" ! #: config/i386/i386.c:1147 config/i386/i386.c:1158 ! msgid "SSE instruction set disabled, using 387 arithmetics" msgstr "" ! #: config/i386/i386.c:1163 ! msgid "387 instruction set disabled, using SSE arithmetics" msgstr "" ! #: config/i386/i386.c:1170 #, c-format ! msgid "bad value (%s) for -mfpmath= switch" msgstr "" ! #: config/i386/i386.c:1300 #, c-format ! msgid "`%s' attribute requires an integer constant argument" msgstr "" ! #: config/i386/i386.c:1306 #, c-format ! msgid "argument to `%s' attribute larger than %d" msgstr "" ! #: config/i386/i386.c:5363 ! msgid "invalid UNSPEC as operand" msgstr "" ! #: config/i386/i386.c:5596 ! msgid "extended registers have no high halves" msgstr "" ! #: config/i386/i386.c:5611 ! msgid "unsupported operand size for extended register" msgstr "" ! #: config/i386/i386.c:5884 ! msgid "" ! "operand is neither a constant nor a condition code, invalid operand code 'c'" msgstr "" ! #: config/i386/i386.c:5930 #, c-format ! msgid "invalid operand code `%c'" msgstr "" ! #: config/i386/i386.c:9867 ! msgid "unknown insn mode" ! msgstr "" ! ! #. @@@ better error message ! #: config/i386/i386.c:11730 config/i386/i386.c:11763 ! msgid "selector must be an immediate" ! msgstr "" ! ! #. @@@ better error message ! #: config/i386/i386.c:11921 config/i386/i386.c:11949 ! msgid "mask must be an immediate" ! msgstr "" ! ! #: config/i386/winnt.c:94 #, c-format ! msgid "`%s' attribute only applies to variables" msgstr "" ! #: config/i386/winnt.c:262 #, c-format ! msgid "`%s' declared as both exported to and imported from a DLL" msgstr "" ! #: config/i386/cygwin.h:51 ! msgid "Use the Cygwin interface" msgstr "" ! #: config/i386/cygwin.h:53 ! msgid "Use the Mingw32 interface" msgstr "" ! #: config/i386/cygwin.h:54 ! msgid "Create GUI application" msgstr "" ! #: config/i386/cygwin.h:55 ! msgid "Don't set Windows defines" msgstr "" ! #: config/i386/cygwin.h:56 ! msgid "Set Windows defines" msgstr "" ! #: config/i386/cygwin.h:58 ! msgid "Create console application" msgstr "" ! #: config/i386/cygwin.h:59 config/i386/win32.h:59 ! msgid "Generate code for a DLL" msgstr "" ! #: config/i386/cygwin.h:61 config/i386/win32.h:61 ! msgid "Ignore dllimport for functions" msgstr "" ! #: config/i386/cygwin.h:63 ! msgid "Use Mingw-specific thread support" msgstr "" ! #: config/i386/cygwin.h:257 ! #, c-format ! msgid "-f%s ignored for target (all code is position independent)" msgstr "" ! #: config/i386/dgux.h:60 ! msgid "Retain standard MXDB information" ! msgstr "" ! ! #: config/i386/dgux.h:62 ! msgid "Retain legend information" ! msgstr "" ! ! #: config/i386/dgux.h:65 ! msgid "Generate external legend information" ! msgstr "" ! ! #: config/i386/dgux.h:67 ! msgid "Emit identifying info in .s file" ! msgstr "" ! ! #: config/i386/dgux.h:69 ! msgid "Warn when a function arg is a structure" ! msgstr "" ! ! #: config/i386/dgux.h:252 ! msgid "argument is a structure" ! msgstr "" ! ! #: config/i386/djgpp.h:201 ! msgid "-mbnu210 is ignored (option is obsolete)" ! msgstr "" ! ! #: config/i386/i386.h:45 config/mips/mips.h:186 ! msgid "half-pic init called on systems that don't support it" ! msgstr "" ! ! #. Deprecated. ! #. Deprecated. ! #. Deprecated. ! #. Deprecated. ! #. Deprecated. ! #. Deprecated. ! #: config/i386/i386.h:303 msgid "Alternate calling convention" msgstr "" ! #: config/i386/i386.h:305 config/m68k/m68k.h:180 config/ns32k/ns32k.h:106 msgid "Use normal calling convention" msgstr "" ! #: config/i386/i386.h:307 msgid "Align some doubles on dword boundary" msgstr "" ! #: config/i386/i386.h:309 msgid "Align doubles on word boundary" msgstr "" ! #: config/i386/i386.h:311 msgid "Uninitialized locals in .bss" msgstr "" ! #: config/i386/i386.h:313 msgid "Uninitialized locals in .data" msgstr "" ! #: config/i386/i386.h:315 config/m68k/linux-aout.h:45 config/m68k/linux.h:50 msgid "Use IEEE math for fp comparisons" msgstr "" ! #: config/i386/i386.h:317 msgid "Do not use IEEE math for fp comparisons" msgstr "" ! #: config/i386/i386.h:319 msgid "Return values of functions in FPU registers" msgstr "" ! #: config/i386/i386.h:321 msgid "Do not return values of functions in FPU registers" msgstr "" ! #: config/i386/i386.h:323 msgid "Do not generate sin, cos, sqrt for FPU" msgstr "" ! #: config/i386/i386.h:325 msgid "Generate sin, cos, sqrt for FPU" msgstr "" ! #: config/i386/i386.h:327 msgid "Omit the frame pointer in leaf functions" msgstr "" ! #: config/i386/i386.h:330 msgid "Enable stack probing" msgstr "" #. undocumented #. undocumented ! #: config/i386/i386.h:335 msgid "Align destination of the string operations" msgstr "" ! #: config/i386/i386.h:337 msgid "Do not align destination of the string operations" msgstr "" ! #: config/i386/i386.h:339 msgid "Inline all known string operations" msgstr "" ! #: config/i386/i386.h:341 msgid "Do not inline all known string operations" msgstr "" ! #: config/i386/i386.h:343 config/i386/i386.h:348 msgid "Use push instructions to save outgoing arguments" msgstr "" ! #: config/i386/i386.h:345 config/i386/i386.h:350 msgid "Do not use push instructions to save outgoing arguments" msgstr "" ! #: config/i386/i386.h:352 ! msgid "Support MMX built-in functions" msgstr "" ! #: config/i386/i386.h:354 ! msgid "Do not support MMX built-in functions" ! msgstr "" ! ! #: config/i386/i386.h:357 ! msgid "Support 3DNow! built-in functions" ! msgstr "" ! ! #: config/i386/i386.h:360 ! msgid "Do not support 3DNow! built-in functions" ! msgstr "" ! ! #: config/i386/i386.h:362 ! msgid "Support MMX and SSE built-in functions and code generation" ! msgstr "" ! ! #: config/i386/i386.h:365 ! msgid "Do not support MMX and SSE built-in functions and code generation" ! msgstr "" ! ! #: config/i386/i386.h:367 ! msgid "Support MMX, SSE and SSE2 built-in functions and code generation" ! msgstr "" ! ! #: config/i386/i386.h:370 ! msgid "Do not support MMX, SSE and SSE2 built-in functions and code generation" ! msgstr "" ! ! #: config/i386/i386.h:372 ! msgid "sizeof(long double) is 16" ! msgstr "" ! ! #: config/i386/i386.h:374 ! msgid "sizeof(long double) is 12" ! msgstr "" ! ! #: config/i386/i386.h:376 ! msgid "Generate 64bit x86-64 code" ! msgstr "" ! ! #: config/i386/i386.h:378 ! msgid "Generate 32bit i386 code" ! msgstr "" ! ! #: config/i386/i386.h:380 ! msgid "Use red-zone in the x86-64 code" ! msgstr "" ! ! #: config/i386/i386.h:382 ! msgid "Do not use red-zone in the x86-64 code" msgstr "" #. This macro is similar to `TARGET_SWITCHES' but defines names of *************** msgstr "" *** 4974,5050 **** #. variable, type `char *', is set to the variable part of the given #. option if the fixed part matches. The actual option name is made #. by appending `-m' to the specified name. ! #: config/i386/i386.h:333 config/rs6000/rs6000.h:402 config/sparc/sparc.h:710 msgid "Schedule code for given CPU" msgstr "" ! #: config/i386/i386.h:335 ! msgid "Generate code for given CPU" msgstr "" ! #: config/i386/i386.h:337 ! msgid "Control allocation order of integer registers" msgstr "" ! #: config/i386/i386.h:339 msgid "Number of registers used to pass integer arguments" msgstr "" ! #: config/i386/i386.h:341 msgid "Loop code aligned to this power of 2" msgstr "" ! #: config/i386/i386.h:343 msgid "Jump targets are aligned to this power of 2" msgstr "" ! #: config/i386/i386.h:345 msgid "Function starts are aligned to this power of 2" msgstr "" ! #: config/i386/i386.h:348 msgid "Attempt to keep stack aligned to this power of 2" msgstr "" ! #: config/i386/i386.h:350 msgid "Branches are this expensive (1-5, arbitrary units)" msgstr "" ! #: config/i386/osf1elf.h:111 msgid "Profiling uses mcount" msgstr "" ! #: config/i386/osfrose.h:63 msgid "Emit half-PIC code" msgstr "" #. intentionally undoc #. intentionally undoc ! #: config/i386/osfrose.h:70 msgid "Emit ELF object code" msgstr "" ! #: config/i386/osfrose.h:72 msgid "Emit ROSE object code" msgstr "" ! #: config/i386/osfrose.h:74 msgid "Symbols have a leading underscore" msgstr "" ! #: config/i386/osfrose.h:77 msgid "Align to >word boundaries" msgstr "" ! #: config/i386/osfrose.h:80 msgid "Use mcount for profiling" msgstr "" ! #: config/i386/osfrose.h:82 msgid "Use mcount_ptr for profiling" msgstr "" ! #: config/i386/sco5.h:887 msgid "Generate ELF output" msgstr "" --- 10263,10359 ---- #. variable, type `char *', is set to the variable part of the given #. option if the fixed part matches. The actual option name is made #. by appending `-m' to the specified name. ! #: config/i386/i386.h:428 config/rs6000/rs6000.h:428 config/sparc/sparc.h:641 msgid "Schedule code for given CPU" msgstr "" ! #: config/i386/i386.h:430 ! msgid "Generate floating point mathematics using given instruction set" msgstr "" ! #: config/i386/i386.h:432 ! msgid "Generate code for given CPU" msgstr "" ! #: config/i386/i386.h:434 msgid "Number of registers used to pass integer arguments" msgstr "" ! #. TARGET_DEFAULT is defined in sun*.h and isi.h, etc. ! #. This macro is similar to `TARGET_SWITCHES' but defines names of ! #. command options that have values. Its definition is an ! #. initializer with a subgrouping for each command option. ! #. ! #. Each subgrouping contains a string constant, that defines the ! #. fixed part of the option name, and the address of a variable. The ! #. variable, type `char *', is set to the variable part of the given ! #. option if the fixed part matches. The actual option name is made ! #. by appending `-m' to the specified name. ! #: config/i386/i386.h:436 config/m68k/m68k.h:263 msgid "Loop code aligned to this power of 2" msgstr "" ! #: config/i386/i386.h:438 config/m68k/m68k.h:265 msgid "Jump targets are aligned to this power of 2" msgstr "" ! #: config/i386/i386.h:440 config/m68k/m68k.h:267 msgid "Function starts are aligned to this power of 2" msgstr "" ! #: config/i386/i386.h:443 msgid "Attempt to keep stack aligned to this power of 2" msgstr "" ! #: config/i386/i386.h:445 msgid "Branches are this expensive (1-5, arbitrary units)" msgstr "" ! #: config/i386/i386.h:447 ! msgid "Use given x86-64 code model" ! msgstr "" ! ! #. Undocumented. ! #. Undocumented. ! #: config/i386/i386.h:453 ! msgid "Use given assembler dialect" ! msgstr "" ! ! #: config/i386/osf1elf.h:112 msgid "Profiling uses mcount" msgstr "" ! #: config/i386/osfrose.h:60 msgid "Emit half-PIC code" msgstr "" #. intentionally undoc #. intentionally undoc ! #: config/i386/osfrose.h:67 msgid "Emit ELF object code" msgstr "" ! #: config/i386/osfrose.h:69 msgid "Emit ROSE object code" msgstr "" ! #: config/i386/osfrose.h:71 msgid "Symbols have a leading underscore" msgstr "" ! #: config/i386/osfrose.h:74 msgid "Align to >word boundaries" msgstr "" ! #: config/i386/osfrose.h:77 msgid "Use mcount for profiling" msgstr "" ! #: config/i386/osfrose.h:79 msgid "Use mcount_ptr for profiling" msgstr "" ! #: config/i386/sco5.h:771 msgid "Generate ELF output" msgstr "" *************** msgstr "" *** 5060,5084 **** msgid "Use bare Windows interface" msgstr "" - #: config/i386/winnt.c:311 - #, c-format - msgid "`%s' declared as both exported to and imported from a DLL." - msgstr "" - #. If the environment variable DJDIR is not defined, then DJGPP is not installed correctly and GCC will quickly become confused with the default prefix settings. Report the problem now so the user doesn't receive deceptive "file not found" error messages later. #. DJDIR is automatically defined by the DJGPP environment config file pointed to by the environment variable DJGPP. Examine DJGPP to try and figure out what's wrong. ! #: config/i386/xm-djgpp.h:75 ! msgid "Environment variable DJGPP not defined." msgstr "" ! #: config/i386/xm-djgpp.h:77 #, c-format ! msgid "Environment variable DJGPP points to missing file '%s'." msgstr "" ! #: config/i386/xm-djgpp.h:80 #, c-format ! msgid "Environment variable DJGPP points to corrupt file '%s'." msgstr "" #. Macro to define tables used to set the flags. --- 10369,10388 ---- msgid "Use bare Windows interface" msgstr "" #. If the environment variable DJDIR is not defined, then DJGPP is not installed correctly and GCC will quickly become confused with the default prefix settings. Report the problem now so the user doesn't receive deceptive "file not found" error messages later. #. DJDIR is automatically defined by the DJGPP environment config file pointed to by the environment variable DJGPP. Examine DJGPP to try and figure out what's wrong. ! #: config/i386/xm-djgpp.h:71 ! msgid "environment variable DJGPP not defined" msgstr "" ! #: config/i386/xm-djgpp.h:73 #, c-format ! msgid "environment variable DJGPP points to missing file '%s'" msgstr "" ! #: config/i386/xm-djgpp.h:76 #, c-format ! msgid "environment variable DJGPP points to corrupt file '%s'" msgstr "" #. Macro to define tables used to set the flags. *************** msgstr "" *** 5095,5113 **** msgid "Do not generate code which uses the FPU" msgstr "" ! #: config/i960/i960.c:122 msgid "sorry, not implemented: #pragma align NAME=SIZE" msgstr "" ! #: config/i960/i960.c:127 msgid "malformed #pragma align - ignored" msgstr "" ! #: config/i960/i960.c:165 msgid "sorry, not implemented: #pragma noalign NAME" msgstr "" ! #: config/i960/i960.c:1513 config/m68k/m68k.c:407 config/rs6000/rs6000.c:5520 msgid "stack limit expression is not supported" msgstr "" --- 10399,10417 ---- msgid "Do not generate code which uses the FPU" msgstr "" ! #: config/i960/i960-c.c:67 msgid "sorry, not implemented: #pragma align NAME=SIZE" msgstr "" ! #: config/i960/i960-c.c:72 msgid "malformed #pragma align - ignored" msgstr "" ! #: config/i960/i960-c.c:110 msgid "sorry, not implemented: #pragma noalign NAME" msgstr "" ! #: config/i960/i960.c:1405 config/m68k/m68k.c:665 config/rs6000/rs6000.c:8437 msgid "stack limit expression is not supported" msgstr "" *************** msgstr "" *** 5118,5464 **** #. An empty string NAME is used to identify the default VALUE. #. ??? Not all ten of these architecture variations actually exist, but I #. am not sure which are real and which aren't. ! #: config/i960/i960.h:241 msgid "Generate SA code" msgstr "" ! #: config/i960/i960.h:244 msgid "Generate SB code" msgstr "" #. {"sc", (TARGET_FLAG_NUMERICS|TARGET_FLAG_PROTECTED| TARGET_FLAG_MC|TARGET_FLAG_COMPLEX_ADDR), N_("Generate SC code")}, ! #: config/i960/i960.h:249 msgid "Generate KA code" msgstr "" ! #: config/i960/i960.h:252 msgid "Generate KB code" msgstr "" #. {"kc", (TARGET_FLAG_NUMERICS|TARGET_FLAG_PROTECTED| TARGET_FLAG_MC|TARGET_FLAG_COMPLEX_ADDR), N_("Generate KC code")}, ! #: config/i960/i960.h:257 msgid "Generate JA code" msgstr "" ! #: config/i960/i960.h:259 msgid "Generate JD code" msgstr "" ! #: config/i960/i960.h:262 msgid "Generate JF code" msgstr "" ! #: config/i960/i960.h:264 msgid "generate RP code" msgstr "" ! #: config/i960/i960.h:267 msgid "Generate MC code" msgstr "" ! #: config/i960/i960.h:270 msgid "Generate CA code" msgstr "" #. {"cb", (TARGET_FLAG_NUMERICS|TARGET_FLAG_C_SERIES| TARGET_FLAG_BRANCH_PREDICT|TARGET_FLAG_CODE_ALIGN), N_("Generate CB code")}, {"cc", (TARGET_FLAG_NUMERICS|TARGET_FLAG_PROTECTED| TARGET_FLAG_C_SERIES|TARGET_FLAG_BRANCH_PREDICT| TARGET_FLAG_CODE_ALIGN), N_("Generate CC code")}, ! #: config/i960/i960.h:280 msgid "Generate CF code" msgstr "" ! #: config/i960/i960.h:286 msgid "Use alternate leaf function entries" msgstr "" ! #: config/i960/i960.h:288 msgid "Do not use alternate leaf function entries" msgstr "" ! #: config/i960/i960.h:290 msgid "Perform tail call optimization" msgstr "" ! #: config/i960/i960.h:292 msgid "Do not perform tail call optimization" msgstr "" ! #: config/i960/i960.h:294 msgid "Use complex addressing modes" msgstr "" ! #: config/i960/i960.h:296 msgid "Do not use complex addressing modes" msgstr "" ! #: config/i960/i960.h:298 msgid "Align code to 8 byte boundary" msgstr "" ! #: config/i960/i960.h:300 msgid "Do not align code to 8 byte boundary" msgstr "" #. {"clean-linkage", (TARGET_FLAG_CLEAN_LINKAGE), N_("Force use of prototypes")}, {"no-clean-linkage", -(TARGET_FLAG_CLEAN_LINKAGE), N_("Do not force use of prototypes")}, ! #: config/i960/i960.h:306 config/i960/i960.h:308 msgid "Enable compatibility with iC960 v2.0" msgstr "" ! #: config/i960/i960.h:310 msgid "Enable compatibility with iC960 v3.0" msgstr "" ! #: config/i960/i960.h:312 config/i960/i960.h:314 msgid "Enable compatibility with ic960 assembler" msgstr "" ! #: config/i960/i960.h:316 msgid "Do not permit unaligned accesses" msgstr "" ! #: config/i960/i960.h:318 msgid "Permit unaligned accesses" msgstr "" ! #: config/i960/i960.h:320 msgid "Layout types like Intel's v1.3 gcc" msgstr "" ! #: config/i960/i960.h:322 msgid "Do not layout types like Intel's v1.3 gcc" msgstr "" ! #: config/i960/i960.h:324 config/rs6000/sysv4.h:128 config/sparc/linux.h:83 ! #: config/sparc/linux64.h:139 msgid "Use 64 bit long doubles" msgstr "" ! #: config/i960/i960.h:326 msgid "Enable linker relaxation" msgstr "" ! #: config/i960/i960.h:328 msgid "Do not enable linker relaxation" msgstr "" #. Override conflicting target switch options. #. Doesn't actually detect if more than one -mARCH option is given, but #. does handle the case of two blatantly conflicting -mARCH options. ! #: config/i960/i960.h:343 config/i960/i960.h:353 msgid "conflicting architectures defined - using C series" msgstr "" ! #: config/i960/i960.h:348 msgid "conflicting architectures defined - using K series" msgstr "" ! #: config/i960/i960.h:363 msgid "iC2.0 and iC3.0 are incompatible - using iC3.0" msgstr "" #. ??? See the LONG_DOUBLE_TYPE_SIZE definition below. ! #: config/i960/i960.h:374 ! msgid "The -mlong-double-64 option does not work yet." msgstr "" ! #: config/ia64/ia64.c:3413 msgid "ia64_print_operand: unknown code" msgstr "" ! #: config/ia64/ia64.c:3651 msgid "value of -mfixed-range must have form REG1-REG2" msgstr "" ! #: config/ia64/ia64.c:3663 config/ia64/ia64.c:3670 regclass.c:714 ! #, c-format ! msgid "unknown register name: %s" ! msgstr "" ! ! #: config/ia64/ia64.c:3678 #, c-format msgid "%s-%s is an empty range" msgstr "" ! #: config/ia64/ia64.c:3743 msgid "cannot optimize division for both latency and throughput" msgstr "" #. This macro defines names of command options to set and clear bits in #. `target_flags'. Its definition is an initializer with a subgrouping for #. each command option. ! #: config/ia64/ia64.h:110 msgid "Generate big endian code" msgstr "" ! #: config/ia64/ia64.h:112 config/mcore/mcore.h:164 msgid "Generate little endian code" msgstr "" ! #: config/ia64/ia64.h:114 msgid "Generate code for GNU as" msgstr "" ! #: config/ia64/ia64.h:116 msgid "Generate code for Intel as" msgstr "" ! #: config/ia64/ia64.h:118 msgid "Generate code for GNU ld" msgstr "" ! #: config/ia64/ia64.h:120 msgid "Generate code for Intel ld" msgstr "" ! #: config/ia64/ia64.h:122 msgid "Generate code without GP reg" msgstr "" ! #: config/ia64/ia64.h:124 msgid "Emit stop bits before and after volatile extended asms" msgstr "" ! #: config/ia64/ia64.h:126 msgid "Don't emit stop bits before and after volatile extended asms" msgstr "" ! #: config/ia64/ia64.h:128 msgid "Emit code for Itanium (TM) processor B step" msgstr "" ! #: config/ia64/ia64.h:130 msgid "Use in/loc/out register names" msgstr "" ! #: config/ia64/ia64.h:132 msgid "Disable use of sdata/scommon/sbss" msgstr "" ! #: config/ia64/ia64.h:134 msgid "Enable use of sdata/scommon/sbss" msgstr "" ! #: config/ia64/ia64.h:136 msgid "gp is constant (but save/restore gp on indirect calls)" msgstr "" ! #: config/ia64/ia64.h:138 msgid "Generate self-relocatable code" msgstr "" ! #: config/ia64/ia64.h:140 msgid "Generate inline division, optimize for latency" msgstr "" ! #: config/ia64/ia64.h:142 msgid "Generate inline division, optimize for throughput" msgstr "" ! #: config/ia64/ia64.h:144 msgid "Enable Dwarf 2 line debug info via GNU as" msgstr "" ! #: config/ia64/ia64.h:146 msgid "Disable Dwarf 2 line debug info via GNU as" msgstr "" ! #: config/ia64/ia64.h:169 ! msgid "Specify range of registers to make fixed." msgstr "" ! #: config/lynx-ng.h:97 config/lynx.h:120 config/rs6000/lynx.h:88 ! msgid "-msystem-v and -p are incompatible" msgstr "" ! #: config/lynx-ng.h:99 config/lynx.h:122 config/rs6000/lynx.h:90 ! msgid "-msystem-v and -mthreads are incompatible" msgstr "" ! #: config/m32r/m32r.c:83 #, c-format ! msgid "bad value (%s) for -mmodel switch" msgstr "" ! #: config/m32r/m32r.c:92 #, c-format ! msgid "bad value (%s) for -msdata switch" msgstr "" ! #: config/m32r/m32r.c:380 ! msgid "const objects cannot go in .sdata/.sbss" msgstr "" ! #: config/m32r/m32r.c:2187 #, c-format ! msgid "invalid operand to %s code" msgstr "" ! #: config/m32r/m32r.c:2194 #, c-format ! msgid "invalid operand to %p code" msgstr "" ! #: config/m32r/m32r.c:2302 ! msgid "invalid operand to %T/%B code" msgstr "" ! #: config/m32r/m32r.c:2325 ! msgid "invalid operand to %N code" msgstr "" #. { "relax", TARGET_RELAX_MASK, "" }, { "no-relax", -TARGET_RELAX_MASK, "" }, ! #: config/m32r/m32r.h:186 msgid "Display compile time statistics" msgstr "" ! #: config/m32r/m32r.h:188 msgid "Align all loops to 32 byte boundary" msgstr "" ! #: config/m32r/m32r.h:191 msgid "Only issue one instruction per cycle" msgstr "" ! #: config/m32r/m32r.h:194 msgid "Prefer branches over conditional execution" msgstr "" ! #: config/m32r/m32r.h:210 msgid "Code size: small, medium or large" msgstr "" ! #: config/m32r/m32r.h:212 msgid "Small data area: none, sdata, use" msgstr "" ! #: config/m68hc11/m68hc11.c:227 #, c-format msgid "-f%s ignored for 68HC11/68HC12 (not supported)" msgstr "" #. Macro to define tables used to set the flags. This is a list in braces of #. pairs in braces, each pair being { "NAME", VALUE } where VALUE is the bits #. to set or minus the bits to clear. An empty string NAME is used to #. identify the default VALUE. ! #: config/m68hc11/m68hc11.h:179 msgid "Compile with 16-bit integer mode" msgstr "" ! #: config/m68hc11/m68hc11.h:181 msgid "Compile with 32-bit integer mode" msgstr "" ! #: config/m68hc11/m68hc11.h:183 msgid "Auto pre/post decrement increment allowed" msgstr "" ! #: config/m68hc11/m68hc11.h:185 msgid "Auto pre/post decrement increment not allowed" msgstr "" ! #: config/m68hc11/m68hc11.h:187 config/m68hc11/m68hc11.h:191 msgid "Compile for a 68HC11" msgstr "" ! #: config/m68hc11/m68hc11.h:189 config/m68hc11/m68hc11.h:193 msgid "Compile for a 68HC12" msgstr "" --- 10422,10829 ---- #. An empty string NAME is used to identify the default VALUE. #. ??? Not all ten of these architecture variations actually exist, but I #. am not sure which are real and which aren't. ! #: config/i960/i960.h:240 msgid "Generate SA code" msgstr "" ! #: config/i960/i960.h:243 msgid "Generate SB code" msgstr "" #. {"sc", (TARGET_FLAG_NUMERICS|TARGET_FLAG_PROTECTED| TARGET_FLAG_MC|TARGET_FLAG_COMPLEX_ADDR), N_("Generate SC code")}, ! #: config/i960/i960.h:248 msgid "Generate KA code" msgstr "" ! #: config/i960/i960.h:251 msgid "Generate KB code" msgstr "" #. {"kc", (TARGET_FLAG_NUMERICS|TARGET_FLAG_PROTECTED| TARGET_FLAG_MC|TARGET_FLAG_COMPLEX_ADDR), N_("Generate KC code")}, ! #: config/i960/i960.h:256 msgid "Generate JA code" msgstr "" ! #: config/i960/i960.h:258 msgid "Generate JD code" msgstr "" ! #: config/i960/i960.h:261 msgid "Generate JF code" msgstr "" ! #: config/i960/i960.h:263 msgid "generate RP code" msgstr "" ! #: config/i960/i960.h:266 msgid "Generate MC code" msgstr "" ! #: config/i960/i960.h:269 msgid "Generate CA code" msgstr "" #. {"cb", (TARGET_FLAG_NUMERICS|TARGET_FLAG_C_SERIES| TARGET_FLAG_BRANCH_PREDICT|TARGET_FLAG_CODE_ALIGN), N_("Generate CB code")}, {"cc", (TARGET_FLAG_NUMERICS|TARGET_FLAG_PROTECTED| TARGET_FLAG_C_SERIES|TARGET_FLAG_BRANCH_PREDICT| TARGET_FLAG_CODE_ALIGN), N_("Generate CC code")}, ! #: config/i960/i960.h:279 msgid "Generate CF code" msgstr "" ! #: config/i960/i960.h:285 msgid "Use alternate leaf function entries" msgstr "" ! #: config/i960/i960.h:287 msgid "Do not use alternate leaf function entries" msgstr "" ! #: config/i960/i960.h:289 msgid "Perform tail call optimization" msgstr "" ! #: config/i960/i960.h:291 msgid "Do not perform tail call optimization" msgstr "" ! #: config/i960/i960.h:293 msgid "Use complex addressing modes" msgstr "" ! #: config/i960/i960.h:295 msgid "Do not use complex addressing modes" msgstr "" ! #: config/i960/i960.h:297 msgid "Align code to 8 byte boundary" msgstr "" ! #: config/i960/i960.h:299 msgid "Do not align code to 8 byte boundary" msgstr "" #. {"clean-linkage", (TARGET_FLAG_CLEAN_LINKAGE), N_("Force use of prototypes")}, {"no-clean-linkage", -(TARGET_FLAG_CLEAN_LINKAGE), N_("Do not force use of prototypes")}, ! #: config/i960/i960.h:305 config/i960/i960.h:307 msgid "Enable compatibility with iC960 v2.0" msgstr "" ! #: config/i960/i960.h:309 msgid "Enable compatibility with iC960 v3.0" msgstr "" ! #: config/i960/i960.h:311 config/i960/i960.h:313 msgid "Enable compatibility with ic960 assembler" msgstr "" ! #: config/i960/i960.h:315 msgid "Do not permit unaligned accesses" msgstr "" ! #: config/i960/i960.h:317 msgid "Permit unaligned accesses" msgstr "" ! #: config/i960/i960.h:319 msgid "Layout types like Intel's v1.3 gcc" msgstr "" ! #: config/i960/i960.h:321 msgid "Do not layout types like Intel's v1.3 gcc" msgstr "" ! #: config/i960/i960.h:323 config/sparc/freebsd.h:80 config/sparc/linux.h:86 ! #: config/sparc/linux64.h:143 config/sparc/netbsd-elf.h:238 msgid "Use 64 bit long doubles" msgstr "" ! #: config/i960/i960.h:325 msgid "Enable linker relaxation" msgstr "" ! #: config/i960/i960.h:327 msgid "Do not enable linker relaxation" msgstr "" #. Override conflicting target switch options. #. Doesn't actually detect if more than one -mARCH option is given, but #. does handle the case of two blatantly conflicting -mARCH options. ! #: config/i960/i960.h:342 config/i960/i960.h:352 msgid "conflicting architectures defined - using C series" msgstr "" ! #: config/i960/i960.h:347 msgid "conflicting architectures defined - using K series" msgstr "" ! #: config/i960/i960.h:362 msgid "iC2.0 and iC3.0 are incompatible - using iC3.0" msgstr "" #. ??? See the LONG_DOUBLE_TYPE_SIZE definition below. ! #: config/i960/i960.h:373 ! msgid "the -mlong-double-64 option does not work yet" msgstr "" ! #: config/ia64/ia64.c:3554 msgid "ia64_print_operand: unknown code" msgstr "" ! #: config/ia64/ia64.c:3828 msgid "value of -mfixed-range must have form REG1-REG2" msgstr "" ! #: config/ia64/ia64.c:3855 #, c-format msgid "%s-%s is an empty range" msgstr "" ! #: config/ia64/ia64.c:3920 msgid "cannot optimize division for both latency and throughput" msgstr "" #. This macro defines names of command options to set and clear bits in #. `target_flags'. Its definition is an initializer with a subgrouping for #. each command option. ! #: config/ia64/ia64.h:119 msgid "Generate big endian code" msgstr "" ! #: config/ia64/ia64.h:121 config/mcore/mcore.h:159 msgid "Generate little endian code" msgstr "" ! #: config/ia64/ia64.h:123 msgid "Generate code for GNU as" msgstr "" ! #: config/ia64/ia64.h:125 msgid "Generate code for Intel as" msgstr "" ! #: config/ia64/ia64.h:127 msgid "Generate code for GNU ld" msgstr "" ! #: config/ia64/ia64.h:129 msgid "Generate code for Intel ld" msgstr "" ! #: config/ia64/ia64.h:131 msgid "Generate code without GP reg" msgstr "" ! #: config/ia64/ia64.h:133 msgid "Emit stop bits before and after volatile extended asms" msgstr "" ! #: config/ia64/ia64.h:135 msgid "Don't emit stop bits before and after volatile extended asms" msgstr "" ! #: config/ia64/ia64.h:137 msgid "Emit code for Itanium (TM) processor B step" msgstr "" ! #: config/ia64/ia64.h:139 msgid "Use in/loc/out register names" msgstr "" ! #: config/ia64/ia64.h:141 msgid "Disable use of sdata/scommon/sbss" msgstr "" ! #: config/ia64/ia64.h:143 msgid "Enable use of sdata/scommon/sbss" msgstr "" ! #: config/ia64/ia64.h:145 msgid "gp is constant (but save/restore gp on indirect calls)" msgstr "" ! #: config/ia64/ia64.h:147 msgid "Generate self-relocatable code" msgstr "" ! #: config/ia64/ia64.h:149 msgid "Generate inline division, optimize for latency" msgstr "" ! #: config/ia64/ia64.h:151 msgid "Generate inline division, optimize for throughput" msgstr "" ! #: config/ia64/ia64.h:153 msgid "Enable Dwarf 2 line debug info via GNU as" msgstr "" ! #: config/ia64/ia64.h:155 msgid "Disable Dwarf 2 line debug info via GNU as" msgstr "" ! #: config/ia64/ia64.h:183 ! msgid "Specify range of registers to make fixed" msgstr "" ! #: config/m32r/m32r.c:130 ! #, c-format ! msgid "bad value (%s) for -mmodel switch" msgstr "" ! #: config/m32r/m32r.c:139 ! #, c-format ! msgid "bad value (%s) for -msdata switch" msgstr "" ! #: config/m32r/m32r.c:310 #, c-format ! msgid "invalid argument of `%s' attribute" msgstr "" ! #: config/m32r/m32r.c:408 ! msgid "const objects cannot go in .sdata/.sbss" ! msgstr "" ! ! #: config/m32r/m32r.c:2248 #, c-format ! msgid "invalid operand to %%s code" msgstr "" ! #: config/m32r/m32r.c:2255 ! #, c-format ! msgid "invalid operand to %%p code" msgstr "" ! #: config/m32r/m32r.c:2311 ! msgid "bad insn for 'A'" ! msgstr "" ! ! #: config/m32r/m32r.c:2363 #, c-format ! msgid "invalid operand to %%T/%%B code" msgstr "" ! #: config/m32r/m32r.c:2386 #, c-format ! msgid "invalid operand to %%N code" msgstr "" ! #: config/m32r/m32r.c:2431 ! msgid "pre-increment address is not a register" msgstr "" ! #: config/m32r/m32r.c:2438 ! msgid "pre-decrement address is not a register" ! msgstr "" ! ! #: config/m32r/m32r.c:2445 ! msgid "post-increment address is not a register" ! msgstr "" ! ! #: config/m32r/m32r.c:2523 config/m32r/m32r.c:2539 ! #: config/rs6000/rs6000.c:11065 ! msgid "bad address" ! msgstr "" ! ! #: config/m32r/m32r.c:2544 ! msgid "lo_sum not of register" msgstr "" #. { "relax", TARGET_RELAX_MASK, "" }, { "no-relax", -TARGET_RELAX_MASK, "" }, ! #: config/m32r/m32r.h:241 msgid "Display compile time statistics" msgstr "" ! #: config/m32r/m32r.h:243 msgid "Align all loops to 32 byte boundary" msgstr "" ! #: config/m32r/m32r.h:246 msgid "Only issue one instruction per cycle" msgstr "" ! #: config/m32r/m32r.h:249 msgid "Prefer branches over conditional execution" msgstr "" ! #: config/m32r/m32r.h:265 msgid "Code size: small, medium or large" msgstr "" ! #: config/m32r/m32r.h:267 msgid "Small data area: none, sdata, use" msgstr "" ! #: config/m68hc11/m68hc11.c:236 #, c-format msgid "-f%s ignored for 68HC11/68HC12 (not supported)" msgstr "" + #. !!!! SCz wrong here. + #: config/m68hc11/m68hc11.c:3170 config/m68hc11/m68hc11.c:3544 + msgid "move insn not handled" + msgstr "" + + #: config/m68hc11/m68hc11.c:3390 config/m68hc11/m68hc11.c:3474 + #: config/m68hc11/m68hc11.c:3747 + msgid "invalid register in the move instruction" + msgstr "" + + #: config/m68hc11/m68hc11.c:3424 + msgid "invalid operand in the instruction" + msgstr "" + + #: config/m68hc11/m68hc11.c:3721 + msgid "invalid register in the instruction" + msgstr "" + + #: config/m68hc11/m68hc11.c:3754 + msgid "operand 1 must be a hard register" + msgstr "" + + #: config/m68hc11/m68hc11.c:3771 + msgid "invalid rotate insn" + msgstr "" + + #: config/m68hc11/m68hc11.c:4196 + msgid "registers IX, IY and Z used in the same INSN" + msgstr "" + + #: config/m68hc11/m68hc11.c:4521 config/m68hc11/m68hc11.c:4823 + msgid "cannot do z-register replacement" + msgstr "" + + #: config/m68hc11/m68hc11.c:4886 + msgid "invalid Z register replacement for insn" + msgstr "" + #. Macro to define tables used to set the flags. This is a list in braces of #. pairs in braces, each pair being { "NAME", VALUE } where VALUE is the bits #. to set or minus the bits to clear. An empty string NAME is used to #. identify the default VALUE. ! #: config/m68hc11/m68hc11.h:155 msgid "Compile with 16-bit integer mode" msgstr "" ! #: config/m68hc11/m68hc11.h:157 msgid "Compile with 32-bit integer mode" msgstr "" ! #: config/m68hc11/m68hc11.h:159 msgid "Auto pre/post decrement increment allowed" msgstr "" ! #: config/m68hc11/m68hc11.h:161 msgid "Auto pre/post decrement increment not allowed" msgstr "" ! #: config/m68hc11/m68hc11.h:163 ! msgid "Do not use direct addressing mode for soft registers" ! msgstr "" ! ! #: config/m68hc11/m68hc11.h:165 config/m68hc11/m68hc11.h:169 msgid "Compile for a 68HC11" msgstr "" ! #: config/m68hc11/m68hc11.h:167 config/m68hc11/m68hc11.h:171 msgid "Compile for a 68HC12" msgstr "" *************** msgstr "" *** 5471,5499 **** #. variable, type `char *', is set to the variable part of the given #. option if the fixed part matches. The actual option name is made #. by appending `-m' to the specified name. ! #: config/m68hc11/m68hc11.h:207 msgid "Specify the register allocation order" msgstr "" ! #: config/m68hc11/m68hc11.h:209 msgid "Indicate the number of soft registers available" msgstr "" ! #: config/m68k/m68k.c:102 #, c-format msgid "-malign-loops=%d is not between 1 and %d" msgstr "" ! #: config/m68k/m68k.c:113 #, c-format msgid "-malign-jumps=%d is not between 1 and %d" msgstr "" ! #: config/m68k/m68k.c:124 #, c-format msgid "-malign-functions=%d is not between 1 and %d" msgstr "" #. Sometimes certain combinations of command options do not make #. sense on a particular target machine. You can define a macro #. `OVERRIDE_OPTIONS' to take account of this. This macro, if --- 10836,10985 ---- #. variable, type `char *', is set to the variable part of the given #. option if the fixed part matches. The actual option name is made #. by appending `-m' to the specified name. ! #: config/m68hc11/m68hc11.h:185 msgid "Specify the register allocation order" msgstr "" ! #: config/m68hc11/m68hc11.h:187 msgid "Indicate the number of soft registers available" msgstr "" ! #: config/m68k/m68k.c:150 #, c-format msgid "-malign-loops=%d is not between 1 and %d" msgstr "" ! #: config/m68k/m68k.c:161 #, c-format msgid "-malign-jumps=%d is not between 1 and %d" msgstr "" ! #: config/m68k/m68k.c:172 #, c-format msgid "-malign-functions=%d is not between 1 and %d" msgstr "" + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/m68k/m68k.h:162 config/m68k/m68k.h:164 + msgid "Generate code for a 68020" + msgstr "" + + #: config/m68k/m68k.h:169 config/m68k/m68k.h:172 + msgid "Generate code for a 68000" + msgstr "" + + #: config/m68k/m68k.h:174 + msgid "Use the bit-field instructions" + msgstr "" + + #: config/m68k/m68k.h:176 + msgid "Do not use the bit-field instructions" + msgstr "" + + #: config/m68k/m68k.h:178 + msgid "Use different calling convention using 'rtd'" + msgstr "" + + #: config/m68k/m68k.h:182 + msgid "Consider type `int' to be 16 bits wide" + msgstr "" + + #: config/m68k/m68k.h:184 + msgid "Consider type `int' to be 32 bits wide" + msgstr "" + + #: config/m68k/m68k.h:186 + msgid "Generate code for a Sun FPA" + msgstr "" + + #: config/m68k/m68k.h:189 + msgid "Do not generate code for a Sun FPA" + msgstr "" + + #: config/m68k/m68k.h:191 config/m68k/m68k.h:193 + msgid "Generate code for a Sun Sky board" + msgstr "" + + #: config/m68k/m68k.h:195 + msgid "Do not use Sky linkage convention" + msgstr "" + + #: config/m68k/m68k.h:197 + msgid "Generate code for a 68881" + msgstr "" + + #: config/m68k/m68k.h:200 + msgid "Generate code with library calls for floating point" + msgstr "" + + #: config/m68k/m68k.h:202 + msgid "Generate code for a 68040, without any new instructions" + msgstr "" + + #: config/m68k/m68k.h:205 + msgid "Generate code for a 68060, without any new instructions" + msgstr "" + + #: config/m68k/m68k.h:209 + msgid "Generate code for a 68030" + msgstr "" + + #: config/m68k/m68k.h:212 + msgid "Generate code for a 68040" + msgstr "" + + #: config/m68k/m68k.h:216 + msgid "Generate code for a 68060" + msgstr "" + + #: config/m68k/m68k.h:221 + msgid "Generate code for a 520X" + msgstr "" + + #: config/m68k/m68k.h:224 + msgid "Generate code for a 68851" + msgstr "" + + #: config/m68k/m68k.h:226 + msgid "Do no generate code for a 68851" + msgstr "" + + #: config/m68k/m68k.h:229 + msgid "Generate code for a 68302" + msgstr "" + + #: config/m68k/m68k.h:232 + msgid "Generate code for a 68332" + msgstr "" + + #: config/m68k/m68k.h:236 + msgid "Generate code for a cpu32" + msgstr "" + + #: config/m68k/m68k.h:239 + msgid "Align variables on a 32-bit boundary" + msgstr "" + + #: config/m68k/m68k.h:241 + msgid "Align variables on a 16-bit boundary" + msgstr "" + + #: config/m68k/m68k.h:243 + msgid "Generate pc-relative code" + msgstr "" + + #: config/m68k/m68k.h:245 + msgid "Do not use unaligned memory references" + msgstr "" + + #: config/m68k/m68k.h:247 + msgid "Use unaligned memory references" + msgstr "" + #. Sometimes certain combinations of command options do not make #. sense on a particular target machine. You can define a macro #. `OVERRIDE_OPTIONS' to take account of this. This macro, if *************** msgstr "" *** 5502,5604 **** #. #. Don't use this macro to turn on various extra optimizations for #. `-O'. That is what `OPTIMIZATION_OPTIONS' is for. ! #: config/m68k/m68k.h:238 config/m68k/m68kelf.h:265 config/m68k/m68kv4.h:295 msgid "-fPIC is not currently supported on the 68000 or 68010\n" msgstr "" ! #: config/m88k/m88k.c:860 #, c-format ! msgid "Internal gcc monitor: short-branch(%x)" msgstr "" ! #: config/m88k/m88k.c:2266 ! msgid "Internal gcc error: Can't express symbolic location" msgstr "" ! #: config/m88k/m88k.c:2547 #, c-format msgid "argument #%d is a structure" msgstr "" ! #: config/m88k/m88k.c:2862 ! msgid "%R not followed by %B/C/D/E" ! msgstr "" ! ! #: config/m88k/m88k.c:2930 #, c-format ! msgid "invalid %x/X value" ! msgstr "" ! ! #: config/m88k/m88k.c:2935 ! msgid "invalid %H value" ! msgstr "" ! ! #: config/m88k/m88k.c:2941 ! msgid "invalid %h value" ! msgstr "" ! ! #: config/m88k/m88k.c:2947 ! msgid "invalid %Q value" ! msgstr "" ! ! #: config/m88k/m88k.c:2953 ! msgid "invalid %q value" msgstr "" ! #: config/m88k/m88k.c:2959 #, c-format ! msgid "invalid %o value" msgstr "" ! #: config/m88k/m88k.c:2966 #, c-format ! msgid "invalid %p value" msgstr "" ! #: config/m88k/m88k.c:2979 config/m88k/m88k.c:2984 #, c-format ! msgid "invalid %s/S value" ! msgstr "" ! ! #: config/m88k/m88k.c:2995 ! msgid "invalid %P operand" msgstr "" ! #: config/m88k/m88k.c:3026 ! msgid "invalid %B value" msgstr "" ! #: config/m88k/m88k.c:3043 ! msgid "invalid %C value" msgstr "" ! #: config/m88k/m88k.c:3056 ! msgid "invalid %D value" msgstr "" ! #: config/m88k/m88k.c:3064 #, c-format ! msgid "invalid %E value" msgstr "" ! #: config/m88k/m88k.c:3069 #, c-format ! msgid "`%d' operand isn't a register" msgstr "" ! #: config/m88k/m88k.c:3080 ! msgid "invalid %r value" msgstr "" ! #: config/m88k/m88k.c:3087 msgid "operand is r0" msgstr "" ! #: config/m88k/m88k.c:3101 msgid "operand is const_double" msgstr "" ! #: config/m88k/m88k.c:3120 msgid "invalid code" msgstr "" --- 10988,11070 ---- #. #. Don't use this macro to turn on various extra optimizations for #. `-O'. That is what `OPTIMIZATION_OPTIONS' is for. ! #: config/m68k/m68k.h:284 config/m68k/m68kelf.h:267 config/m68k/m68kv4.h:299 msgid "-fPIC is not currently supported on the 68000 or 68010\n" msgstr "" ! #: config/m88k/m88k.c:900 #, c-format ! msgid "internal gcc monitor: short-branch(%x)" msgstr "" ! #: config/m88k/m88k.c:2300 ! msgid "internal gcc error: Can't express symbolic location" msgstr "" ! #: config/m88k/m88k.c:2582 #, c-format msgid "argument #%d is a structure" msgstr "" ! #: config/m88k/m88k.c:2882 #, c-format ! msgid "%%R not followed by %%B/C/D/E" msgstr "" ! #: config/m88k/m88k.c:2950 #, c-format ! msgid "invalid %%x/X value" msgstr "" ! #: config/m88k/m88k.c:2973 config/rs6000/rs6000.c:6509 #, c-format ! msgid "invalid %%q value" msgstr "" ! #: config/m88k/m88k.c:2979 #, c-format ! msgid "invalid %%o value" msgstr "" ! #: config/m88k/m88k.c:2986 config/rs6000/rs6000.c:6472 ! #, c-format ! msgid "invalid %%p value" msgstr "" ! #: config/m88k/m88k.c:2999 config/m88k/m88k.c:3004 ! #, c-format ! msgid "invalid %%s/S value" msgstr "" ! #: config/m88k/m88k.c:3015 ! #, c-format ! msgid "invalid %%P operand" msgstr "" ! #: config/m88k/m88k.c:3046 config/romp/romp.c:682 #, c-format ! msgid "invalid %%B value" msgstr "" ! #: config/m88k/m88k.c:3076 #, c-format ! msgid "invalid %%D value" msgstr "" ! #: config/m88k/m88k.c:3089 ! #, c-format ! msgid "`%%d' operand isn't a register" msgstr "" ! #: config/m88k/m88k.c:3107 msgid "operand is r0" msgstr "" ! #: config/m88k/m88k.c:3121 msgid "operand is const_double" msgstr "" ! #: config/m88k/m88k.c:3140 msgid "invalid code" msgstr "" *************** msgstr "" *** 5609,5615 **** #: config/m88k/m88k.h:299 #, c-format ! msgid "Invalid option `-mshort-data-%s'" msgstr "" #: config/m88k/m88k.h:304 --- 11075,11081 ---- #: config/m88k/m88k.h:299 #, c-format ! msgid "invalid option `-mshort-data-%s'" msgstr "" #: config/m88k/m88k.h:304 *************** msgstr "" *** 5622,5830 **** msgid "-mshort-data-%s and PIC are incompatible" msgstr "" ! #: config/mcore/mcore.c:3118 #, c-format ! msgid "Invalid option `-mstack-increment=%s'" msgstr "" ! #: config/mcore/mcore.h:131 msgid "Inline constants if it can be done in 2 insns or less" msgstr "" ! #: config/mcore/mcore.h:133 ! msgid "inline constants if it only takes 1 instruction" msgstr "" ! #: config/mcore/mcore.h:135 msgid "Set maximum alignment to 4" msgstr "" ! #: config/mcore/mcore.h:137 msgid "Set maximum alignment to 8" msgstr "" ! #: config/mcore/mcore.h:141 msgid "Do not use the divide instruction" msgstr "" ! #: config/mcore/mcore.h:145 msgid "Do not arbitary sized immediates in bit operations" msgstr "" ! #: config/mcore/mcore.h:147 ! msgid "Always treat bitfield as int-sized" msgstr "" ! #: config/mcore/mcore.h:151 msgid "Force functions to be aligned to a 4 byte boundary" msgstr "" ! #: config/mcore/mcore.h:153 msgid "Force functions to be aligned to a 2 byte boundary" msgstr "" ! #: config/mcore/mcore.h:155 msgid "Emit call graph information" msgstr "" ! #: config/mcore/mcore.h:159 msgid "Prefer word accesses over byte accesses" msgstr "" ! #: config/mcore/mcore.h:170 msgid "Generate code for the M*Core M340" msgstr "" ! #: config/mcore/mcore.h:183 msgid "Maximum amount for a single stack increment operation" msgstr "" ! #: config/mips/mips.c:4737 #, c-format msgid "-mips%d not supported" msgstr "" ! #: config/mips/mips.c:4744 #, c-format msgid "bad value (%s) for -mips switch" msgstr "" ! #: config/mips/mips.c:4763 #, c-format msgid "bad value (%s) for -mabi= switch" msgstr "" ! #: config/mips/mips.c:4793 #, c-format msgid "-mabi=%s does not support -mips%d" msgstr "" ! #: config/mips/mips.c:4810 ! msgid "The -mabi=32 support does not work yet." ! msgstr "" ! ! #: config/mips/mips.c:4814 ! msgid "This target does not support the -mabi switch." msgstr "" ! #: config/mips/mips.c:4948 #, c-format ! msgid "-mcpu=%s does not support -mips%d" msgstr "" ! #: config/mips/mips.c:4955 #, c-format msgid "-mips%d does not support 64 bit fp registers" msgstr "" ! #: config/mips/mips.c:4961 #, c-format msgid "-mips%d does not support 64 bit gp registers" msgstr "" ! #: config/mips/mips.c:4982 msgid "-G is incompatible with PIC code which is the default" msgstr "" ! #: config/mips/mips.c:4998 msgid "-membedded-pic and -mabicalls are incompatible" msgstr "" ! #: config/mips/mips.c:5001 msgid "-G and -membedded-pic are incompatible" msgstr "" ! #: config/mips/mips.c:5052 #, c-format ! msgid "Invalid option `entry%s'" msgstr "" ! #: config/mips/mips.c:5055 msgid "-mentry is only meaningful with -mips-16" msgstr "" ! #: config/mips/mips.c:5388 #, c-format msgid "internal error: %%) found without a %%( in assembler pattern" msgstr "" ! #: config/mips/mips.c:5402 #, c-format msgid "internal error: %%] found without a %%[ in assembler pattern" msgstr "" ! #: config/mips/mips.c:5415 #, c-format msgid "internal error: %%> found without a %%< in assembler pattern" msgstr "" ! #: config/mips/mips.c:5428 #, c-format msgid "internal error: %%} found without a %%{ in assembler pattern" msgstr "" ! #: config/mips/mips.c:5442 #, c-format ! msgid "PRINT_OPERAND: Unknown punctuation '%c'" msgstr "" ! #: config/mips/mips.c:5451 msgid "PRINT_OPERAND null pointer" msgstr "" ! #: config/mips/mips.c:5579 #, c-format msgid "invalid use of %%d, %%x, or %%X" msgstr "" ! #: config/mips/mips.c:5622 msgid "PRINT_OPERAND_ADDRESS, null pointer" msgstr "" ! #: config/mips/mips.c:5826 f/com.c:14611 graph.c:421 java/jcf-parse.c:929 ! #: java/jcf-parse.c:1065 java/lex.c:1726 objc/objc-act.c:733 profile.c:906 ! #: profile.c:914 toplev.c:1875 toplev.c:2234 ! #, c-format ! msgid "can't open %s" ! msgstr "" ! ! #: config/mips/mips.c:5877 msgid "" "MIPS ECOFF format does not allow changing filenames within functions with " "#line" msgstr "" ! #: config/mips/mips.c:6076 ! #, c-format ! msgid "can't rewind %s" msgstr "" ! #: config/mips/mips.c:6080 ! #, c-format ! msgid "can't write to %s" msgstr "" ! #: config/mips/mips.c:6083 ! #, c-format ! msgid "can't read from %s" msgstr "" ! #: config/mips/mips.c:6086 java/jcf-parse.c:605 java/jcf-write.c:3341 ! #, c-format ! msgid "can't close %s" msgstr "" ! #: config/mips/mips.c:6455 #, c-format ! msgid "gp_offset (%ld) or end_offset (%ld) is less than zero." msgstr "" ! #: config/mips/mips.c:6673 #, c-format ! msgid "fp_offset (%ld) or end_offset (%ld) is less than zero." msgstr "" ! #: config/mips/mips.c:8744 #, c-format msgid "can not handle inconsistent calls to `%s'" msgstr "" --- 11088,11285 ---- msgid "-mshort-data-%s and PIC are incompatible" msgstr "" ! #: config/mcore/mcore.c:3083 #, c-format ! msgid "invalid option `-mstack-increment=%s'" msgstr "" ! #: config/mcore/mcore.h:126 msgid "Inline constants if it can be done in 2 insns or less" msgstr "" ! #: config/mcore/mcore.h:128 ! msgid "Inline constants if it only takes 1 instruction" msgstr "" ! #: config/mcore/mcore.h:130 msgid "Set maximum alignment to 4" msgstr "" ! #: config/mcore/mcore.h:132 msgid "Set maximum alignment to 8" msgstr "" ! #: config/mcore/mcore.h:136 msgid "Do not use the divide instruction" msgstr "" ! #: config/mcore/mcore.h:140 msgid "Do not arbitary sized immediates in bit operations" msgstr "" ! #: config/mcore/mcore.h:142 ! msgid "Always treat bit-field as int-sized" msgstr "" ! #: config/mcore/mcore.h:146 msgid "Force functions to be aligned to a 4 byte boundary" msgstr "" ! #: config/mcore/mcore.h:148 msgid "Force functions to be aligned to a 2 byte boundary" msgstr "" ! #: config/mcore/mcore.h:150 msgid "Emit call graph information" msgstr "" ! #: config/mcore/mcore.h:154 msgid "Prefer word accesses over byte accesses" msgstr "" ! #: config/mcore/mcore.h:165 msgid "Generate code for the M*Core M340" msgstr "" ! #: config/mcore/mcore.h:178 msgid "Maximum amount for a single stack increment operation" msgstr "" ! #: config/mips/mips.c:4815 ! msgid "The -march option is incompatible to -mipsN and therefore ignored." ! msgstr "" ! ! #: config/mips/mips.c:4841 #, c-format msgid "-mips%d not supported" msgstr "" ! #: config/mips/mips.c:4848 #, c-format msgid "bad value (%s) for -mips switch" msgstr "" ! #: config/mips/mips.c:4869 #, c-format msgid "bad value (%s) for -mabi= switch" msgstr "" ! #: config/mips/mips.c:4907 #, c-format msgid "-mabi=%s does not support -mips%d" msgstr "" ! #: config/mips/mips.c:4924 ! msgid "this target does not support the -mabi switch" msgstr "" ! #: config/mips/mips.c:5034 #, c-format ! msgid "bad value (%s) for -mtune= switch" msgstr "" ! #: config/mips/mips.c:5044 #, c-format msgid "-mips%d does not support 64 bit fp registers" msgstr "" ! #: config/mips/mips.c:5050 #, c-format msgid "-mips%d does not support 64 bit gp registers" msgstr "" ! #: config/mips/mips.c:5071 msgid "-G is incompatible with PIC code which is the default" msgstr "" ! #: config/mips/mips.c:5087 msgid "-membedded-pic and -mabicalls are incompatible" msgstr "" ! #: config/mips/mips.c:5090 msgid "-G and -membedded-pic are incompatible" msgstr "" ! #: config/mips/mips.c:5141 #, c-format ! msgid "invalid option `entry%s'" msgstr "" ! #: config/mips/mips.c:5144 msgid "-mentry is only meaningful with -mips-16" msgstr "" ! #: config/mips/mips.c:5484 #, c-format msgid "internal error: %%) found without a %%( in assembler pattern" msgstr "" ! #: config/mips/mips.c:5498 #, c-format msgid "internal error: %%] found without a %%[ in assembler pattern" msgstr "" ! #: config/mips/mips.c:5511 #, c-format msgid "internal error: %%> found without a %%< in assembler pattern" msgstr "" ! #: config/mips/mips.c:5524 #, c-format msgid "internal error: %%} found without a %%{ in assembler pattern" msgstr "" ! #: config/mips/mips.c:5538 #, c-format ! msgid "PRINT_OPERAND: unknown punctuation '%c'" msgstr "" ! #: config/mips/mips.c:5547 config/xtensa/xtensa.c:1913 msgid "PRINT_OPERAND null pointer" msgstr "" ! #: config/mips/mips.c:5680 #, c-format msgid "invalid use of %%d, %%x, or %%X" msgstr "" ! #: config/mips/mips.c:5723 config/xtensa/xtensa.c:2012 msgid "PRINT_OPERAND_ADDRESS, null pointer" msgstr "" ! #: config/mips/mips.c:5947 msgid "" "MIPS ECOFF format does not allow changing filenames within functions with " "#line" msgstr "" ! #: config/mips/mips.c:6261 ! msgid "can't rewind temp file" msgstr "" ! #: config/mips/mips.c:6265 ! msgid "can't write to output file" msgstr "" ! #: config/mips/mips.c:6268 ! msgid "can't read from temp file" msgstr "" ! #: config/mips/mips.c:6271 ! msgid "can't close temp file" msgstr "" ! #: config/mips/mips.c:6704 #, c-format ! msgid "gp_offset (%ld) or end_offset (%ld) is less than zero" msgstr "" ! #: config/mips/mips.c:6866 #, c-format ! msgid "fp_offset (%ld) or end_offset (%ld) is less than zero" msgstr "" ! #: config/mips/mips.c:8927 #, c-format msgid "can not handle inconsistent calls to `%s'" msgstr "" *************** msgstr "" *** 5834,5908 **** #. each pair being { "NAME", VALUE } #. where VALUE is the bits to set or minus the bits to clear. #. An empty string NAME is used to identify the default VALUE. ! #: config/mips/mips.h:335 config/mn10300/mn10300.h:64 msgid "No default crt0.o" msgstr "" ! #: config/mips/mips.h:337 msgid "Use 64-bit int type" msgstr "" ! #: config/mips/mips.h:339 msgid "Use 64-bit long type" msgstr "" ! #: config/mips/mips.h:341 msgid "Use 32-bit long type" msgstr "" ! #: config/mips/mips.h:343 msgid "Optimize lui/addiu address loads" msgstr "" ! #: config/mips/mips.h:345 msgid "Don't optimize lui/addiu address loads" msgstr "" ! #: config/mips/mips.h:347 msgid "Use MIPS as" msgstr "" ! #: config/mips/mips.h:349 msgid "Use GNU as" msgstr "" ! #: config/mips/mips.h:351 msgid "Use symbolic register names" msgstr "" ! #: config/mips/mips.h:353 msgid "Don't use symbolic register names" msgstr "" ! #: config/mips/mips.h:355 config/mips/mips.h:357 msgid "Use GP relative sdata/sbss sections" msgstr "" ! #: config/mips/mips.h:359 config/mips/mips.h:361 msgid "Don't use GP relative sdata/sbss sections" msgstr "" ! #: config/mips/mips.h:363 msgid "Output compiler statistics" msgstr "" ! #: config/mips/mips.h:365 msgid "Don't output compiler statistics" msgstr "" ! #: config/mips/mips.h:367 msgid "Don't optimize block moves" msgstr "" ! #: config/mips/mips.h:369 msgid "Optimize block moves" msgstr "" ! #: config/mips/mips.h:371 msgid "Use mips-tfile asm postpass" msgstr "" ! #: config/mips/mips.h:373 msgid "Don't use mips-tfile asm postpass" msgstr "" --- 11289,11363 ---- #. each pair being { "NAME", VALUE } #. where VALUE is the bits to set or minus the bits to clear. #. An empty string NAME is used to identify the default VALUE. ! #: config/mips/mips.h:368 config/mn10300/mn10300.h:64 msgid "No default crt0.o" msgstr "" ! #: config/mips/mips.h:370 msgid "Use 64-bit int type" msgstr "" ! #: config/mips/mips.h:372 msgid "Use 64-bit long type" msgstr "" ! #: config/mips/mips.h:374 msgid "Use 32-bit long type" msgstr "" ! #: config/mips/mips.h:376 msgid "Optimize lui/addiu address loads" msgstr "" ! #: config/mips/mips.h:378 msgid "Don't optimize lui/addiu address loads" msgstr "" ! #: config/mips/mips.h:380 msgid "Use MIPS as" msgstr "" ! #: config/mips/mips.h:382 msgid "Use GNU as" msgstr "" ! #: config/mips/mips.h:384 msgid "Use symbolic register names" msgstr "" ! #: config/mips/mips.h:386 msgid "Don't use symbolic register names" msgstr "" ! #: config/mips/mips.h:388 config/mips/mips.h:390 msgid "Use GP relative sdata/sbss sections" msgstr "" ! #: config/mips/mips.h:392 config/mips/mips.h:394 msgid "Don't use GP relative sdata/sbss sections" msgstr "" ! #: config/mips/mips.h:396 msgid "Output compiler statistics" msgstr "" ! #: config/mips/mips.h:398 msgid "Don't output compiler statistics" msgstr "" ! #: config/mips/mips.h:400 msgid "Don't optimize block moves" msgstr "" ! #: config/mips/mips.h:402 msgid "Optimize block moves" msgstr "" ! #: config/mips/mips.h:404 msgid "Use mips-tfile asm postpass" msgstr "" ! #: config/mips/mips.h:406 msgid "Don't use mips-tfile asm postpass" msgstr "" *************** msgstr "" *** 5912,6079 **** #. where VALUE is the bits to set or minus the bits to clear and DOC #. is the documentation for --help (NULL if intentionally undocumented). #. An empty string NAME is used to identify the default VALUE. ! #: config/mips/mips.h:377 config/pdp11/pdp11.h:55 msgid "Use hardware floating point" msgstr "" ! #: config/mips/mips.h:379 msgid "Use 64-bit FP registers" msgstr "" ! #: config/mips/mips.h:381 msgid "Use 32-bit FP registers" msgstr "" ! #: config/mips/mips.h:383 msgid "Use 64-bit general registers" msgstr "" ! #: config/mips/mips.h:385 msgid "Use 32-bit general registers" msgstr "" ! #: config/mips/mips.h:387 msgid "Use Irix PIC" msgstr "" ! #: config/mips/mips.h:389 msgid "Don't use Irix PIC" msgstr "" ! #: config/mips/mips.h:391 msgid "Use OSF PIC" msgstr "" ! #: config/mips/mips.h:393 msgid "Don't use OSF PIC" msgstr "" ! #: config/mips/mips.h:395 msgid "Use indirect calls" msgstr "" ! #: config/mips/mips.h:397 msgid "Don't use indirect calls" msgstr "" ! #: config/mips/mips.h:399 msgid "Use embedded PIC" msgstr "" ! #: config/mips/mips.h:401 msgid "Don't use embedded PIC" msgstr "" ! #: config/mips/mips.h:403 msgid "Use ROM instead of RAM" msgstr "" ! #: config/mips/mips.h:405 msgid "Don't use ROM instead of RAM" msgstr "" ! #: config/mips/mips.h:407 msgid "Put uninitialized constants in ROM (needs -membedded-data)" msgstr "" ! #: config/mips/mips.h:409 msgid "Don't put uninitialized constants in ROM" msgstr "" ! #: config/mips/mips.h:411 msgid "Use big-endian byte order" msgstr "" ! #: config/mips/mips.h:413 msgid "Use little-endian byte order" msgstr "" ! #: config/mips/mips.h:415 msgid "Use single (32-bit) FP only" msgstr "" ! #: config/mips/mips.h:417 msgid "Don't use single (32-bit) FP only" msgstr "" ! #: config/mips/mips.h:419 msgid "Use multiply accumulate" msgstr "" ! #: config/mips/mips.h:421 msgid "Don't use multiply accumulate" msgstr "" ! #: config/mips/mips.h:423 msgid "Work around early 4300 hardware bug" msgstr "" ! #: config/mips/mips.h:425 msgid "Don't work around early 4300 hardware bug" msgstr "" ! #: config/mips/mips.h:427 ! msgid "Optimize for 4650" msgstr "" ! #: config/mips/mips.h:429 ! msgid "Optimize for 3900" msgstr "" ! #: config/mips/mips.h:431 msgid "Trap on integer divide by zero" msgstr "" ! #: config/mips/mips.h:433 msgid "Don't trap on integer divide by zero" msgstr "" ! #: config/mips/mips.h:435 msgid "Trap on integer divide overflow" msgstr "" ! #: config/mips/mips.h:437 msgid "Don't trap on integer divide overflow" msgstr "" ! #. This macro is similar to `TARGET_SWITCHES' but defines names of ! #. command options that have values. Its definition is an ! #. initializer with a subgrouping for each command option. ! #. ! #. Each subgrouping contains a string constant, that defines the ! #. fixed part of the option name, and the address of a variable. ! #. The variable, type `char *', is set to the variable part of the ! #. given option if the fixed part matches. The actual option name ! #. is made by appending `-m' to the specified name. ! #. ! #. Here is an example which defines `-mshort-data-NUMBER'. If the ! #. given option is `-mshort-data-512', the variable `m88k_short_data' ! #. will be set to the string `"512"'. ! #. ! #. extern char *m88k_short_data; ! #. #define TARGET_OPTIONS { { "short-data-", &m88k_short_data } } ! #: config/mips/mips.h:562 msgid "Specify CPU for scheduling purposes" msgstr "" ! #: config/mips/mips.h:564 ! msgid "Specify MIPS ISA" msgstr "" ! #: config/mips/mips.h:566 msgid "Use mips16 entry/exit psuedo ops" msgstr "" ! #: config/mips/mips.h:568 msgid "Don't use MIPS16 instructions" msgstr "" #. Output assembler code to FILE to increment profiler label # LABELNO #. for profiling a function entry. ! #: config/mips/mips.h:2592 msgid "mips16 function profiling" msgstr "" #: config/mn10300/mn10300.h:59 msgid "Work around hardware multiply bug" msgstr "" --- 11367,11721 ---- #. where VALUE is the bits to set or minus the bits to clear and DOC #. is the documentation for --help (NULL if intentionally undocumented). #. An empty string NAME is used to identify the default VALUE. ! #: config/mips/mips.h:410 config/pdp11/pdp11.h:55 msgid "Use hardware floating point" msgstr "" ! #: config/mips/mips.h:412 msgid "Use 64-bit FP registers" msgstr "" ! #: config/mips/mips.h:414 msgid "Use 32-bit FP registers" msgstr "" ! #: config/mips/mips.h:416 msgid "Use 64-bit general registers" msgstr "" ! #: config/mips/mips.h:418 msgid "Use 32-bit general registers" msgstr "" ! #: config/mips/mips.h:420 msgid "Use Irix PIC" msgstr "" ! #: config/mips/mips.h:422 msgid "Don't use Irix PIC" msgstr "" ! #: config/mips/mips.h:424 msgid "Use OSF PIC" msgstr "" ! #: config/mips/mips.h:426 msgid "Don't use OSF PIC" msgstr "" ! #: config/mips/mips.h:428 msgid "Use indirect calls" msgstr "" ! #: config/mips/mips.h:430 msgid "Don't use indirect calls" msgstr "" ! #: config/mips/mips.h:432 msgid "Use embedded PIC" msgstr "" ! #: config/mips/mips.h:434 msgid "Don't use embedded PIC" msgstr "" ! #: config/mips/mips.h:436 msgid "Use ROM instead of RAM" msgstr "" ! #: config/mips/mips.h:438 msgid "Don't use ROM instead of RAM" msgstr "" ! #: config/mips/mips.h:440 msgid "Put uninitialized constants in ROM (needs -membedded-data)" msgstr "" ! #: config/mips/mips.h:442 msgid "Don't put uninitialized constants in ROM" msgstr "" ! #. Macro to define tables used to set the flags. ! #: config/mips/mips.h:444 config/xtensa/xtensa.h:110 msgid "Use big-endian byte order" msgstr "" ! #: config/mips/mips.h:446 config/xtensa/xtensa.h:112 msgid "Use little-endian byte order" msgstr "" ! #: config/mips/mips.h:448 msgid "Use single (32-bit) FP only" msgstr "" ! #: config/mips/mips.h:450 msgid "Don't use single (32-bit) FP only" msgstr "" ! #: config/mips/mips.h:452 msgid "Use multiply accumulate" msgstr "" ! #: config/mips/mips.h:454 msgid "Don't use multiply accumulate" msgstr "" ! #: config/mips/mips.h:456 config/rs6000/rs6000.h:351 ! msgid "Don't generate fused multiply/add instructions" ! msgstr "" ! ! #: config/mips/mips.h:458 config/rs6000/rs6000.h:349 ! msgid "Generate fused multiply/add instructions" ! msgstr "" ! ! #: config/mips/mips.h:460 msgid "Work around early 4300 hardware bug" msgstr "" ! #: config/mips/mips.h:462 msgid "Don't work around early 4300 hardware bug" msgstr "" ! #: config/mips/mips.h:464 ! msgid "Optimize for 3900" msgstr "" ! #: config/mips/mips.h:466 ! msgid "Optimize for 4650" msgstr "" ! #: config/mips/mips.h:468 msgid "Trap on integer divide by zero" msgstr "" ! #: config/mips/mips.h:470 msgid "Don't trap on integer divide by zero" msgstr "" ! #: config/mips/mips.h:472 msgid "Trap on integer divide overflow" msgstr "" ! #: config/mips/mips.h:474 msgid "Don't trap on integer divide overflow" msgstr "" ! #: config/mips/mips.h:590 config/mips/mips.h:592 msgid "Specify CPU for scheduling purposes" msgstr "" ! #: config/mips/mips.h:594 ! msgid "Specify CPU for code generation purposes" msgstr "" ! #: config/mips/mips.h:596 ! msgid "Specify a Standard MIPS ISA" ! msgstr "" ! ! #: config/mips/mips.h:598 msgid "Use mips16 entry/exit psuedo ops" msgstr "" ! #: config/mips/mips.h:600 msgid "Don't use MIPS16 instructions" msgstr "" + #: config/mips/mips.h:604 + msgid "Don't call any cache flush functions" + msgstr "" + + #: config/mips/mips.h:606 + msgid "Specify cache flush function" + msgstr "" + #. Output assembler code to FILE to increment profiler label # LABELNO #. for profiling a function entry. ! #: config/mips/mips.h:2873 msgid "mips16 function profiling" msgstr "" + #: config/mmix/mmix.c:138 + #, c-format + msgid "-f%s not supported: ignored" + msgstr "" + + #: config/mmix/mmix.c:596 + #, c-format + msgid "" + "too large function value type, needs %d registers, have only %d registers " + "for this" + msgstr "" + + #: config/mmix/mmix.c:677 + msgid "stack frame too big" + msgstr "" + + #: config/mmix/mmix.c:705 + #, c-format + msgid "stack frame not a multiple of 8 bytes: %d" + msgstr "" + + #: config/mmix/mmix.c:1044 + #, c-format + msgid "stack frame not a multiple of octabyte: %d" + msgstr "" + + #: config/mmix/mmix.c:1203 + msgid "function_profiler support for MMIX" + msgstr "" + + #: config/mmix/mmix.c:1240 + msgid "neither varargs or stdarg in mmix_setup_incoming_varargs" + msgstr "" + + #: config/mmix/mmix.c:1246 + msgid "MMIX Internal: Last named vararg would not fit in a register" + msgstr "" + + #. FIXME: Remove when I know this trigs. + #: config/mmix/mmix.c:1608 + msgid "oops, not debugged; fixing up value:" + msgstr "" + + #: config/mmix/mmix.c:2184 config/mmix/mmix.c:2318 + msgid "MMIX Internal: Expected a CONST_INT, not this" + msgstr "" + + #: config/mmix/mmix.c:2192 config/mmix/mmix.c:2216 config/mmix/mmix.c:2335 + #, c-format + msgid "MMIX Internal: Bad register: %d" + msgstr "" + + #: config/mmix/mmix.c:2263 + msgid "MMIX Internal: Bad value for 'm', not a CONST_INT" + msgstr "" + + #: config/mmix/mmix.c:2286 + msgid "MMIX Internal: Expected a register, not this" + msgstr "" + + #: config/mmix/mmix.c:2296 + msgid "MMIX Internal: Expected a constant, not this" + msgstr "" + + #. Presumably there's a missing case above if we get here. + #: config/mmix/mmix.c:2328 + #, c-format + msgid "MMIX Internal: Missing `%c' case in mmix_print_operand" + msgstr "" + + #. We need the original here. + #: config/mmix/mmix.c:2379 + msgid "MMIX Internal: Cannot decode this operand" + msgstr "" + + #: config/mmix/mmix.c:2444 + msgid "MMIX Internal: This is not a recognized address" + msgstr "" + + #: config/mmix/mmix.c:2940 config/mmix/mmix.c:3009 + #, c-format + msgid "MMIX Internal: %s is not a shiftable int" + msgstr "" + + #: config/mmix/mmix.c:3128 + msgid "MMIX Internal: Trying to output invalidly reversed condition:" + msgstr "" + + #: config/mmix/mmix.c:3135 + msgid "MMIX Internal: What's the CC of this?" + msgstr "" + + #: config/mmix/mmix.c:3139 + msgid "MMIX Internal: What is the CC of this?" + msgstr "" + + #: config/mmix/mmix.c:3210 + msgid "MMIX Internal: This is not a constant:" + msgstr "" + + #. For these target macros, there is no generic documentation here. You + #. should read `Using and Porting GCC' for that. Only comments specific + #. to the MMIX target are here. + #. + #. There are however references to the specific texinfo node (comments + #. with "Node:"), so there should be little or nothing amiss. Probably + #. the opposite, since we don't have to care about old littering and + #. soon outdated generic comments. + #. Node: Driver + #. When both ABI:s work, this is how we tell them apart in code. The + #. GNU abi is implied the default. Also implied in TARGET_DEFAULT. + #. User symbols are in the same name-space as built-in symbols, but we + #. don't need the built-in symbols, so remove those and instead apply + #. stricter operand checking. Don't warn when expanding insns. + #. Pass on -mset-program-start=N and -mset-data-start=M to the linker. + #. Provide default program start 0x100 unless -mno-set-program-start. + #. Don't do this if linking relocatably, with -r. For a final link, + #. produce mmo, unless ELF is requested or when linking relocatably. + #. Put unused option values here. + #: config/mmix/mmix.h:137 + msgid "Set start-address of the program" + msgstr "" + + #: config/mmix/mmix.h:139 + msgid "Set start-address of data" + msgstr "" + + #. FIXME: Provide a way to *load* the epsilon register. + #: config/mmix/mmix.h:188 + msgid "For intrinsics library: pass all parameters in registers" + msgstr "" + + #: config/mmix/mmix.h:191 + msgid "Use register stack for parameters and return value" + msgstr "" + + #: config/mmix/mmix.h:193 + msgid "Use call-clobbered registers for parameters and return value" + msgstr "" + + #: config/mmix/mmix.h:195 + msgid "Use epsilon-respecting floating point compare instructions" + msgstr "" + + #: config/mmix/mmix.h:198 + msgid "Use zero-extending memory loads, not sign-extending ones" + msgstr "" + + #: config/mmix/mmix.h:201 + msgid "" + "Generate divide results with reminder having the same sign as the divisor " + "(not the dividend)" + msgstr "" + + #: config/mmix/mmix.h:205 + msgid "Prepend global symbols with \":\" (for use with PREFIX)" + msgstr "" + + #: config/mmix/mmix.h:207 + msgid "Do not provide a default start-address 0x100 of the program" + msgstr "" + + #: config/mmix/mmix.h:209 + msgid "Link to emit program in ELF format (rather than mmo)" + msgstr "" + + #: config/mmix/mmix.h:211 + msgid "Use P-mnemonics for branches statically predicted as taken" + msgstr "" + + #: config/mmix/mmix.h:213 + msgid "Don't use P-mnemonics for branches" + msgstr "" + + #: config/mmix/mmix.h:215 + msgid "Use addresses that allocate global registers" + msgstr "" + + #: config/mmix/mmix.h:217 + msgid "Do not use addresses that allocate global registers" + msgstr "" + #: config/mn10300/mn10300.h:59 msgid "Work around hardware multiply bug" msgstr "" *************** msgstr "" *** 6086,6104 **** msgid "Target the AM33 processor" msgstr "" ! #: config/nextstep.c:65 ! msgid "optimization turned on" ! msgstr "" ! ! #: config/nextstep.c:71 ! msgid "optimization turned off" ! msgstr "" ! ! #: config/nextstep.c:80 ! msgid "optimization level restored" msgstr "" ! #: config/ns32k/ns32k.h:104 msgid "Don't use hardware fp" msgstr "" --- 11728,11738 ---- msgid "Target the AM33 processor" msgstr "" ! #: config/mn10300/mn10300.h:65 ! msgid "Enable linker relaxations" msgstr "" ! #: config/ns32k/ns32k.h:104 config/s390/s390.h:57 msgid "Don't use hardware fp" msgstr "" *************** msgid "Do not use register sb" *** 6135,6145 **** msgstr "" #: config/ns32k/ns32k.h:116 ! msgid "Do not use bitfield instructions" msgstr "" #: config/ns32k/ns32k.h:117 ! msgid "Use bitfield instructions" msgstr "" #: config/ns32k/ns32k.h:118 --- 11769,11779 ---- msgstr "" #: config/ns32k/ns32k.h:116 ! msgid "Do not use bit-field instructions" msgstr "" #: config/ns32k/ns32k.h:117 ! msgid "Use bit-field instructions" msgstr "" #: config/ns32k/ns32k.h:118 *************** msgstr "" *** 6170,6207 **** msgid "No \"Small register classes\" kludge" msgstr "" ! #: config/pa/pa.c:135 #, c-format msgid "" ! "Unknown -mschedule= option (%s).\n" "Valid options are 700, 7100, 7100LC, 7200, and 8000\n" msgstr "" ! #: config/pa/pa.c:160 #, c-format msgid "" ! "Unknown -march= option (%s).\n" "Valid options are 1.0, 1.1, and 2.0\n" msgstr "" ! #: config/pa/pa.c:165 msgid "PIC code generation is not supported in the portable runtime model\n" msgstr "" ! #: config/pa/pa.c:170 msgid "PIC code generation is not compatible with fast indirect calls\n" msgstr "" ! #: config/pa/pa.c:175 ! msgid "PIC code generation is not compatible with profiling\n" ! msgstr "" ! ! #: config/pa/pa.c:180 msgid "-g is only supported when using GAS on this processor," msgstr "" ! #: config/pa/pa.c:181 ! msgid "-g option disabled." msgstr "" #: config/pdp11/pdp11.h:56 --- 11804,11837 ---- msgid "No \"Small register classes\" kludge" msgstr "" ! #: config/pa/pa.c:200 #, c-format msgid "" ! "unknown -mschedule= option (%s).\n" "Valid options are 700, 7100, 7100LC, 7200, and 8000\n" msgstr "" ! #: config/pa/pa.c:225 #, c-format msgid "" ! "unknown -march= option (%s).\n" "Valid options are 1.0, 1.1, and 2.0\n" msgstr "" ! #: config/pa/pa.c:230 msgid "PIC code generation is not supported in the portable runtime model\n" msgstr "" ! #: config/pa/pa.c:235 msgid "PIC code generation is not compatible with fast indirect calls\n" msgstr "" ! #: config/pa/pa.c:240 msgid "-g is only supported when using GAS on this processor," msgstr "" ! #: config/pa/pa.c:241 ! msgid "-g option disabled" msgstr "" #: config/pdp11/pdp11.h:56 *************** msgstr "" *** 6296,6338 **** msgid "Disable reorganization pass" msgstr "" ! #: config/romp/romp.c:674 ! #, c-format ! msgid "invalid %%B value" ! msgstr "" ! ! #: config/romp/romp.c:701 config/rs6000/rs6000.c:4106 #, c-format msgid "invalid %%S value" msgstr "" ! #: config/romp/romp.c:710 config/romp/romp.c:717 #, c-format msgid "invalid %%b value" msgstr "" ! #: config/romp/romp.c:738 config/romp/romp.c:745 ! #, c-format ! msgid "invalid %%H value" ! msgstr "" ! ! #: config/romp/romp.c:757 config/romp/romp.c:768 #, c-format msgid "invalid %%z value" msgstr "" ! #: config/romp/romp.c:776 config/romp/romp.c:784 #, c-format msgid "invalid %%Z value" msgstr "" ! #: config/romp/romp.c:791 config/romp/romp.c:800 config/romp/romp.c:807 ! #: config/rs6000/rs6000.c:3888 #, c-format msgid "invalid %%k value" msgstr "" ! #: config/romp/romp.c:892 config/romp/romp.c:935 #, c-format msgid "invalid %%j value" msgstr "" --- 11926,11958 ---- msgid "Disable reorganization pass" msgstr "" ! #: config/romp/romp.c:709 config/rs6000/rs6000.c:6546 #, c-format msgid "invalid %%S value" msgstr "" ! #: config/romp/romp.c:718 config/romp/romp.c:725 #, c-format msgid "invalid %%b value" msgstr "" ! #: config/romp/romp.c:765 config/romp/romp.c:776 #, c-format msgid "invalid %%z value" msgstr "" ! #: config/romp/romp.c:784 config/romp/romp.c:792 #, c-format msgid "invalid %%Z value" msgstr "" ! #: config/romp/romp.c:799 config/romp/romp.c:808 config/romp/romp.c:815 ! #: config/rs6000/rs6000.c:6325 #, c-format msgid "invalid %%k value" msgstr "" ! #: config/romp/romp.c:900 config/romp/romp.c:943 #, c-format msgid "invalid %%j value" msgstr "" *************** msgstr "" *** 6354,6487 **** msgid "can't have varargs with -mfp-arg-in-fp-regs" msgstr "" ! #: config/rs6000/aix.h:303 config/rs6000/beos.h:30 ! msgid "Always pass floating-point arguments in memory" ! msgstr "" ! ! #: config/rs6000/aix.h:305 config/rs6000/beos.h:32 ! msgid "Don't always pass floating-point arguments in memory" ! msgstr "" ! ! #: config/rs6000/aix41.h:28 config/rs6000/aix43.h:32 config/rs6000/aix51.h:32 ! msgid "Support message passing with the Parallel Environment" ! msgstr "" ! ! #: config/rs6000/aix43.h:28 config/rs6000/aix51.h:28 ! msgid "Compile for 64-bit pointers" msgstr "" ! #: config/rs6000/aix43.h:30 config/rs6000/aix51.h:30 ! msgid "Compile for 32-bit pointers" msgstr "" ! #: config/rs6000/aix43.h:49 config/rs6000/aix51.h:49 ! msgid "-maix64 and POWER architecture are incompatible." msgstr "" ! #: config/rs6000/aix43.h:54 config/rs6000/aix51.h:54 ! msgid "-maix64 requires PowerPC64 architecture remain enabled." msgstr "" ! #: config/rs6000/aix43.h:58 config/rs6000/aix51.h:58 ! msgid "" ! "-maix64 required: 64-bit computation with 32-bit addressing not yet " ! "supported." msgstr "" ! #: config/rs6000/rs6000.c:341 ! msgid "-mmultiple is not supported on little endian systems" msgstr "" ! #: config/rs6000/rs6000.c:348 ! msgid "-mstring is not supported on little endian systems" msgstr "" ! #: config/rs6000/rs6000.c:354 #, c-format ! msgid "-f%s ignored for AIX (all code is position independent)" msgstr "" ! #: config/rs6000/rs6000.c:362 ! msgid "-ffunction-sections disabled on AIX when debugging" msgstr "" ! #: config/rs6000/rs6000.c:368 ! msgid "-fdata-sections not supported on AIX" msgstr "" ! #: config/rs6000/rs6000.c:382 #, c-format ! msgid "Unknown -mdebug-%s switch" msgstr "" ! #: config/rs6000/rs6000.c:3815 #, c-format msgid "invalid %%f value" msgstr "" ! #: config/rs6000/rs6000.c:3824 #, c-format msgid "invalid %%F value" msgstr "" ! #: config/rs6000/rs6000.c:3833 #, c-format msgid "invalid %%G value" msgstr "" ! #: config/rs6000/rs6000.c:3868 #, c-format msgid "invalid %%j code" msgstr "" ! #: config/rs6000/rs6000.c:3878 #, c-format msgid "invalid %%J code" msgstr "" ! #: config/rs6000/rs6000.c:3908 #, c-format msgid "invalid %%K value" msgstr "" ! #: config/rs6000/rs6000.c:4032 ! #, c-format ! msgid "invalid %%p value" ! msgstr "" ! ! #: config/rs6000/rs6000.c:4069 ! #, c-format ! msgid "invalid %%q value" ! msgstr "" ! ! #: config/rs6000/rs6000.c:4132 #, c-format msgid "%%S computed all 1's mask" msgstr "" ! #: config/rs6000/rs6000.c:4159 #, c-format msgid "%%S computed all 0's mask" msgstr "" ! #: config/rs6000/rs6000.c:4169 #, c-format msgid "invalid %%T value" msgstr "" ! #: config/rs6000/rs6000.c:4179 #, c-format msgid "invalid %%u value" msgstr "" ! #: config/rs6000/rs6000.c:4188 #, c-format msgid "invalid %%v value" msgstr "" ! #: config/rs6000/rs6000.c:4261 ! #, c-format ! msgid "invalid %%W value" msgstr "" #. Run-time compilation parameters selecting different hardware subsets. --- 11974,12114 ---- msgid "can't have varargs with -mfp-arg-in-fp-regs" msgstr "" ! #: config/rs6000/rs6000.c:475 ! msgid "-mmultiple is not supported on little endian systems" msgstr "" ! #: config/rs6000/rs6000.c:482 ! msgid "-mstring is not supported on little endian systems" msgstr "" ! #: config/rs6000/rs6000.c:488 config/xtensa/xtensa.c:1846 ! #, c-format ! msgid "-f%s ignored (all code is position independent)" msgstr "" ! #: config/rs6000/rs6000.c:497 ! msgid "-ffunction-sections disabled on AIX when debugging" msgstr "" ! #: config/rs6000/rs6000.c:503 ! msgid "-fdata-sections not supported on AIX" msgstr "" ! #: config/rs6000/rs6000.c:518 ! #, c-format ! msgid "unknown -mdebug-%s switch" msgstr "" ! #: config/rs6000/rs6000.c:528 ! #, c-format ! msgid "Unknown switch -mlong-double-%s" msgstr "" ! #: config/rs6000/rs6000.c:595 #, c-format ! msgid "unknown ABI specified: '%s'" msgstr "" ! #: config/rs6000/rs6000.c:3631 ! msgid "argument 1 of __builtin_altivec_predicate must be a constant" msgstr "" ! #: config/rs6000/rs6000.c:3685 ! msgid "argument 1 of __builtin_altivec_predicate is out of range" msgstr "" ! #: config/rs6000/rs6000.c:4041 #, c-format ! msgid "argument 3 of `%s' must be a 2-bit literal" msgstr "" ! #: config/rs6000/rs6000.c:6252 #, c-format msgid "invalid %%f value" msgstr "" ! #: config/rs6000/rs6000.c:6261 #, c-format msgid "invalid %%F value" msgstr "" ! #: config/rs6000/rs6000.c:6270 #, c-format msgid "invalid %%G value" msgstr "" ! #: config/rs6000/rs6000.c:6305 #, c-format msgid "invalid %%j code" msgstr "" ! #: config/rs6000/rs6000.c:6315 #, c-format msgid "invalid %%J code" msgstr "" ! #: config/rs6000/rs6000.c:6345 #, c-format msgid "invalid %%K value" msgstr "" ! #: config/rs6000/rs6000.c:6572 #, c-format msgid "%%S computed all 1's mask" msgstr "" ! #: config/rs6000/rs6000.c:6599 #, c-format msgid "%%S computed all 0's mask" msgstr "" ! #: config/rs6000/rs6000.c:6609 #, c-format msgid "invalid %%T value" msgstr "" ! #: config/rs6000/rs6000.c:6619 #, c-format msgid "invalid %%u value" msgstr "" ! #: config/rs6000/rs6000.c:6628 #, c-format msgid "invalid %%v value" msgstr "" ! #: config/rs6000/aix.h:137 config/rs6000/beos.h:32 ! msgid "Always pass floating-point arguments in memory" ! msgstr "" ! ! #: config/rs6000/aix.h:139 config/rs6000/beos.h:34 ! msgid "Don't always pass floating-point arguments in memory" ! msgstr "" ! ! #: config/rs6000/aix41.h:28 config/rs6000/aix43.h:32 config/rs6000/aix51.h:32 ! msgid "Support message passing with the Parallel Environment" ! msgstr "" ! ! #: config/rs6000/aix43.h:28 config/rs6000/aix51.h:28 ! msgid "Compile for 64-bit pointers" ! msgstr "" ! ! #: config/rs6000/aix43.h:30 config/rs6000/aix51.h:30 ! msgid "Compile for 32-bit pointers" ! msgstr "" ! ! #: config/rs6000/aix43.h:49 config/rs6000/aix51.h:49 ! msgid "-maix64 and POWER architecture are incompatible" ! msgstr "" ! ! #: config/rs6000/aix43.h:54 config/rs6000/aix51.h:54 ! msgid "-maix64 requires PowerPC64 architecture remain enabled" ! msgstr "" ! ! #: config/rs6000/aix43.h:58 config/rs6000/aix51.h:58 ! msgid "" ! "-maix64 required: 64-bit computation with 32-bit addressing not yet supported" msgstr "" #. Run-time compilation parameters selecting different hardware subsets. *************** msgstr "" *** 6491,6636 **** #. each pair being { "NAME", VALUE } #. where VALUE is the bits to set or minus the bits to clear. #. An empty string NAME is used to identify the default VALUE. ! #: config/rs6000/rs6000.h:253 msgid "Use POWER instruction set" msgstr "" ! #: config/rs6000/rs6000.h:256 msgid "Use POWER2 instruction set" msgstr "" ! #: config/rs6000/rs6000.h:258 msgid "Do not use POWER2 instruction set" msgstr "" ! #: config/rs6000/rs6000.h:261 msgid "Do not use POWER instruction set" msgstr "" ! #: config/rs6000/rs6000.h:263 msgid "Use PowerPC instruction set" msgstr "" ! #: config/rs6000/rs6000.h:266 msgid "Do not use PowerPC instruction set" msgstr "" ! #: config/rs6000/rs6000.h:268 msgid "Use PowerPC General Purpose group optional instructions" msgstr "" ! #: config/rs6000/rs6000.h:270 msgid "Don't use PowerPC General Purpose group optional instructions" msgstr "" ! #: config/rs6000/rs6000.h:272 msgid "Use PowerPC Graphics group optional instructions" msgstr "" ! #: config/rs6000/rs6000.h:274 msgid "Don't use PowerPC Graphics group optional instructions" msgstr "" ! #: config/rs6000/rs6000.h:276 msgid "Use PowerPC-64 instruction set" msgstr "" ! #: config/rs6000/rs6000.h:278 msgid "Don't use PowerPC-64 instruction set" msgstr "" ! #: config/rs6000/rs6000.h:280 msgid "Use new mnemonics for PowerPC architecture" msgstr "" ! #: config/rs6000/rs6000.h:282 msgid "Use old mnemonics for PowerPC architecture" msgstr "" ! #: config/rs6000/rs6000.h:285 msgid "Put everything in the regular TOC" msgstr "" ! #: config/rs6000/rs6000.h:287 msgid "Place floating point constants in TOC" msgstr "" ! #: config/rs6000/rs6000.h:289 msgid "Don't place floating point constants in TOC" msgstr "" ! #: config/rs6000/rs6000.h:291 msgid "Place symbol+offset constants in TOC" msgstr "" ! #: config/rs6000/rs6000.h:293 msgid "Don't place symbol+offset constants in TOC" msgstr "" ! #: config/rs6000/rs6000.h:299 msgid "Place variable addresses in the regular TOC" msgstr "" ! #: config/rs6000/rs6000.h:305 msgid "Generate load/store multiple instructions" msgstr "" ! #: config/rs6000/rs6000.h:307 msgid "Do not generate load/store multiple instructions" msgstr "" ! #: config/rs6000/rs6000.h:311 msgid "Generate string instructions for block moves" msgstr "" ! #: config/rs6000/rs6000.h:313 msgid "Do not generate string instructions for block moves" msgstr "" ! #: config/rs6000/rs6000.h:317 msgid "Generate load/store with update instructions" msgstr "" ! #: config/rs6000/rs6000.h:319 msgid "Do not generate load/store with update instructions" msgstr "" ! #: config/rs6000/rs6000.h:321 ! msgid "Generate fused multiply/add instructions" msgstr "" ! #: config/rs6000/rs6000.h:323 ! msgid "Don't generate fused multiply/add instructions" msgstr "" ! #: config/rs6000/rs6000.h:327 ! msgid "Don't schedule the start and end of the procedure" msgstr "" ! #. This macro is similar to `TARGET_SWITCHES' but defines names of ! #. command options that have values. Its definition is an ! #. initializer with a subgrouping for each command option. ! #. ! #. Each subgrouping contains a string constant, that defines the ! #. fixed part of the option name, and the address of a variable. ! #. The variable, type `char *', is set to the variable part of the ! #. given option if the fixed part matches. The actual option name ! #. is made by appending `-m' to the specified name. ! #. ! #. Here is an example which defines `-mshort-data-NUMBER'. If the ! #. given option is `-mshort-data-512', the variable `m88k_short_data' ! #. will be set to the string `"512"'. ! #. ! #. extern char *m88k_short_data; ! #. #define TARGET_OPTIONS { { "short-data-", &m88k_short_data } } ! #: config/rs6000/rs6000.h:400 config/sparc/sparc.h:708 msgid "Use features of and schedule code for given CPU" msgstr "" ! #: config/rs6000/rs6000.h:403 msgid "Enable debug output" msgstr "" #. Definitions for __builtin_return_address and __builtin_frame_address. #. __builtin_return_address (0) should give link register (65), enable #. this. --- 12118,12263 ---- #. each pair being { "NAME", VALUE } #. where VALUE is the bits to set or minus the bits to clear. #. An empty string NAME is used to identify the default VALUE. ! #: config/rs6000/rs6000.h:277 msgid "Use POWER instruction set" msgstr "" ! #: config/rs6000/rs6000.h:280 msgid "Use POWER2 instruction set" msgstr "" ! #: config/rs6000/rs6000.h:282 msgid "Do not use POWER2 instruction set" msgstr "" ! #: config/rs6000/rs6000.h:285 msgid "Do not use POWER instruction set" msgstr "" ! #: config/rs6000/rs6000.h:287 msgid "Use PowerPC instruction set" msgstr "" ! #: config/rs6000/rs6000.h:290 msgid "Do not use PowerPC instruction set" msgstr "" ! #: config/rs6000/rs6000.h:292 msgid "Use PowerPC General Purpose group optional instructions" msgstr "" ! #: config/rs6000/rs6000.h:294 msgid "Don't use PowerPC General Purpose group optional instructions" msgstr "" ! #: config/rs6000/rs6000.h:296 msgid "Use PowerPC Graphics group optional instructions" msgstr "" ! #: config/rs6000/rs6000.h:298 msgid "Don't use PowerPC Graphics group optional instructions" msgstr "" ! #: config/rs6000/rs6000.h:300 msgid "Use PowerPC-64 instruction set" msgstr "" ! #: config/rs6000/rs6000.h:302 msgid "Don't use PowerPC-64 instruction set" msgstr "" ! #: config/rs6000/rs6000.h:304 ! msgid "Use AltiVec instructions" ! msgstr "" ! ! #: config/rs6000/rs6000.h:306 ! msgid "Don't use AltiVec instructions" ! msgstr "" ! ! #: config/rs6000/rs6000.h:308 msgid "Use new mnemonics for PowerPC architecture" msgstr "" ! #: config/rs6000/rs6000.h:310 msgid "Use old mnemonics for PowerPC architecture" msgstr "" ! #: config/rs6000/rs6000.h:313 msgid "Put everything in the regular TOC" msgstr "" ! #: config/rs6000/rs6000.h:315 msgid "Place floating point constants in TOC" msgstr "" ! #: config/rs6000/rs6000.h:317 msgid "Don't place floating point constants in TOC" msgstr "" ! #: config/rs6000/rs6000.h:319 msgid "Place symbol+offset constants in TOC" msgstr "" ! #: config/rs6000/rs6000.h:321 msgid "Don't place symbol+offset constants in TOC" msgstr "" ! #: config/rs6000/rs6000.h:327 msgid "Place variable addresses in the regular TOC" msgstr "" ! #: config/rs6000/rs6000.h:333 msgid "Generate load/store multiple instructions" msgstr "" ! #: config/rs6000/rs6000.h:335 msgid "Do not generate load/store multiple instructions" msgstr "" ! #: config/rs6000/rs6000.h:339 msgid "Generate string instructions for block moves" msgstr "" ! #: config/rs6000/rs6000.h:341 msgid "Do not generate string instructions for block moves" msgstr "" ! #: config/rs6000/rs6000.h:345 msgid "Generate load/store with update instructions" msgstr "" ! #: config/rs6000/rs6000.h:347 msgid "Do not generate load/store with update instructions" msgstr "" ! #: config/rs6000/rs6000.h:355 ! msgid "Don't schedule the start and end of the procedure" msgstr "" ! #: config/rs6000/rs6000.h:361 ! msgid "Return all structures in memory (AIX default)" msgstr "" ! #: config/rs6000/rs6000.h:363 ! msgid "Return small structures in registers (SVR4 default)" msgstr "" ! #: config/rs6000/rs6000.h:426 config/sparc/sparc.h:639 msgid "Use features of and schedule code for given CPU" msgstr "" ! #: config/rs6000/rs6000.h:429 msgid "Enable debug output" msgstr "" + #: config/rs6000/rs6000.h:430 + msgid "Specify ABI to use" + msgstr "" + + #: config/rs6000/rs6000.h:432 + msgid "Specify size of long double (64 or 128 bits)" + msgstr "" + #. Definitions for __builtin_return_address and __builtin_frame_address. #. __builtin_return_address (0) should give link register (65), enable #. this. *************** msgstr "" *** 6643,6666 **** #. Number of bytes into the frame return addresses can be found. See #. rs6000_stack_info in rs6000.c for more information on how the different #. abi's store the return address. ! #: config/rs6000/rs6000.h:1654 msgid "RETURN_ADDRESS_OFFSET not supported" msgstr "" #: config/rs6000/sysv4.h:88 ! msgid "Select ABI calling convention." msgstr "" #: config/rs6000/sysv4.h:89 ! msgid "Select method for sdata handling." msgstr "" #: config/rs6000/sysv4.h:104 ! msgid "Align to the base type of the bitfield." msgstr "" #: config/rs6000/sysv4.h:106 ! msgid "Don't align to the base type of the bitfield." msgstr "" #: config/rs6000/sysv4.h:108 --- 12270,12293 ---- #. Number of bytes into the frame return addresses can be found. See #. rs6000_stack_info in rs6000.c for more information on how the different #. abi's store the return address. ! #: config/rs6000/rs6000.h:1792 msgid "RETURN_ADDRESS_OFFSET not supported" msgstr "" #: config/rs6000/sysv4.h:88 ! msgid "Select ABI calling convention" msgstr "" #: config/rs6000/sysv4.h:89 ! msgid "Select method for sdata handling" msgstr "" #: config/rs6000/sysv4.h:104 ! msgid "Align to the base type of the bit-field" msgstr "" #: config/rs6000/sysv4.h:106 ! msgid "Don't align to the base type of the bit-field" msgstr "" #: config/rs6000/sysv4.h:108 *************** msgid "Assume that unaligned accesses ar *** 6672,6739 **** msgstr "" #: config/rs6000/sysv4.h:112 config/rs6000/sysv4.h:116 ! msgid "Produce code relocatable at runtime." msgstr "" #: config/rs6000/sysv4.h:114 config/rs6000/sysv4.h:118 ! msgid "Don't produce code relocatable at runtime." msgstr "" #: config/rs6000/sysv4.h:120 config/rs6000/sysv4.h:122 ! msgid "Produce little endian code." msgstr "" #: config/rs6000/sysv4.h:124 config/rs6000/sysv4.h:126 ! msgid "Produce big endian code." ! msgstr "" ! ! #: config/rs6000/sysv4.h:130 config/sparc/linux.h:84 ! #: config/sparc/linux64.h:140 ! msgid "Use 128 bit long doubles" msgstr "" #: config/rs6000/sysv4.h:131 config/rs6000/sysv4.h:132 ! #: config/rs6000/sysv4.h:133 config/rs6000/sysv4.h:134 ! #: config/rs6000/sysv4.h:135 config/rs6000/sysv4.h:136 ! #: config/rs6000/sysv4.h:143 config/rs6000/sysv4.h:144 ! #: config/rs6000/sysv4.h:155 config/rs6000/sysv4.h:156 ! #: config/rs6000/sysv4.h:157 config/rs6000/sysv4.h:159 msgid "no description yet" msgstr "" ! #: config/rs6000/sysv4.h:137 ! msgid "Use EABI." msgstr "" ! #: config/rs6000/sysv4.h:138 ! msgid "Don't use EABI." msgstr "" ! #: config/rs6000/sysv4.h:140 ! msgid "Use alternate register names." msgstr "" ! #: config/rs6000/sysv4.h:142 ! msgid "Don't use alternate register names." msgstr "" ! #: config/rs6000/sysv4.h:146 ! msgid "Link with libsim.a, libc.a and sim-crt0.o." msgstr "" ! #: config/rs6000/sysv4.h:148 ! msgid "Link with libads.a, libc.a and crt0.o." msgstr "" ! #: config/rs6000/sysv4.h:150 ! msgid "Link with libyk.a, libc.a and crt0.o." msgstr "" ! #: config/rs6000/sysv4.h:152 ! msgid "Link with libmvme.a, libc.a and crt0.o." msgstr "" ! #: config/rs6000/sysv4.h:154 msgid "Set the PPC_EMB bit in the ELF flags header" msgstr "" --- 12299,12365 ---- msgstr "" #: config/rs6000/sysv4.h:112 config/rs6000/sysv4.h:116 ! msgid "Produce code relocatable at runtime" msgstr "" #: config/rs6000/sysv4.h:114 config/rs6000/sysv4.h:118 ! msgid "Don't produce code relocatable at runtime" msgstr "" #: config/rs6000/sysv4.h:120 config/rs6000/sysv4.h:122 ! msgid "Produce little endian code" msgstr "" #: config/rs6000/sysv4.h:124 config/rs6000/sysv4.h:126 ! msgid "Produce big endian code" msgstr "" + #: config/rs6000/sysv4.h:127 config/rs6000/sysv4.h:128 + #: config/rs6000/sysv4.h:129 config/rs6000/sysv4.h:130 #: config/rs6000/sysv4.h:131 config/rs6000/sysv4.h:132 ! #: config/rs6000/sysv4.h:142 config/rs6000/sysv4.h:143 ! #: config/rs6000/sysv4.h:154 config/rs6000/sysv4.h:155 ! #: config/rs6000/sysv4.h:157 msgid "no description yet" msgstr "" ! #: config/rs6000/sysv4.h:133 ! msgid "Use EABI" msgstr "" ! #: config/rs6000/sysv4.h:134 ! msgid "Don't use EABI" msgstr "" ! #: config/rs6000/sysv4.h:137 ! msgid "Do not allow bit-fields to cross word boundaries" msgstr "" ! #: config/rs6000/sysv4.h:139 ! msgid "Use alternate register names" msgstr "" ! #: config/rs6000/sysv4.h:141 ! msgid "Don't use alternate register names" msgstr "" ! #: config/rs6000/sysv4.h:145 ! msgid "Link with libsim.a, libc.a and sim-crt0.o" msgstr "" ! #: config/rs6000/sysv4.h:147 ! msgid "Link with libads.a, libc.a and crt0.o" msgstr "" ! #: config/rs6000/sysv4.h:149 ! msgid "Link with libyk.a, libc.a and crt0.o" msgstr "" ! #: config/rs6000/sysv4.h:151 ! msgid "Link with libmvme.a, libc.a and crt0.o" ! msgstr "" ! ! #: config/rs6000/sysv4.h:153 msgid "Set the PPC_EMB bit in the ELF flags header" msgstr "" *************** msgstr "" *** 6745,7017 **** #. #. The macro SUBTARGET_OVERRIDE_OPTIONS is provided for subtargets, to #. get control. ! #: config/rs6000/sysv4.h:205 #, c-format ! msgid "Bad value for -mcall-%s" msgstr "" ! #: config/rs6000/sysv4.h:221 #, c-format ! msgid "Bad value for -msdata=%s" msgstr "" ! #: config/rs6000/sysv4.h:238 #, c-format ! msgid "-mrelocatable and -msdata=%s are incompatible." msgstr "" ! #: config/rs6000/sysv4.h:246 #, c-format ! msgid "-f%s and -msdata=%s are incompatible." msgstr "" ! #: config/rs6000/sysv4.h:255 #, c-format ! msgid "-msdata=%s and -mcall-%s are incompatible." msgstr "" ! #: config/rs6000/sysv4.h:262 ! msgid "-mrelocatable and -mno-minimal-toc are incompatible." msgstr "" ! #: config/rs6000/sysv4.h:268 #, c-format ! msgid "-mrelocatable and -mcall-%s are incompatible." msgstr "" ! #: config/rs6000/sysv4.h:275 #, c-format ! msgid "-fPIC and -mcall-%s are incompatible." msgstr "" ! #: config/rs6000/sysv4.h:282 msgid "-mcall-aixdesc must be big endian" msgstr "" ! #: config/sparc/sp64-elf.h:84 config/sparc/splet.h:29 ! msgid "Generate code for big endian" msgstr "" ! #: config/sparc/sp64-elf.h:85 config/sparc/splet.h:30 ! msgid "Generate code for little endian" msgstr "" ! #: config/sparc/sp86x-aout.h:53 config/sparc/sp86x-elf.h:66 ! msgid "Use little-endian byte order for data" msgstr "" ! #: config/sparc/sparc.c:253 #, c-format ! msgid "%s is not supported by this configuration" msgstr "" ! #: config/sparc/sparc.c:260 ! msgid "-mlong-double-64 not allowed with -m64" msgstr "" ! #: config/sparc/sparc.c:280 #, c-format ! msgid "bad value (%s) for -mcmodel= switch" msgstr "" ! #: config/sparc/sparc.c:285 ! msgid "-mcmodel= is not supported on 32 bit systems" msgstr "" ! #: config/sparc/sparc.c:366 ! msgid "profiling does not support code models other than medlow" msgstr "" ! #: config/sparc/sparc.c:5712 config/sparc/sparc.c:5718 #, c-format ! msgid "Invalid %%Y operand" msgstr "" ! #: config/sparc/sparc.c:5788 #, c-format ! msgid "Invalid %%A operand" msgstr "" ! #: config/sparc/sparc.c:5798 #, c-format ! msgid "Invalid %%B operand" msgstr "" ! #: config/sparc/sparc.c:5837 #, c-format ! msgid "Invalid %%c operand" msgstr "" ! #: config/sparc/sparc.c:5838 #, c-format ! msgid "Invalid %%C operand" msgstr "" ! #: config/sparc/sparc.c:5859 #, c-format ! msgid "Invalid %%d operand" msgstr "" ! #: config/sparc/sparc.c:5860 #, c-format ! msgid "Invalid %%D operand" msgstr "" ! #: config/sparc/sparc.c:5878 #, c-format ! msgid "Invalid %%f operand" msgstr "" ! #: config/sparc/sparc.c:5928 msgid "long long constant not a valid immediate operand" msgstr "" ! #: config/sparc/sparc.c:5931 msgid "floating point constant not a valid immediate operand" msgstr "" ! #. To make profiling work with -f{pic,PIC}, we need to emit the profiling ! #. code into the rtl. Also, if we are profiling, we cannot eliminate ! #. the frame pointer (because the return address will get smashed). ! #: config/sparc/sparc.h:403 ! #, c-format ! msgid "%s and profiling conflict: disabling %s" msgstr "" ! #: config/sparc/sparc.h:587 ! msgid "Use FUNCTION_EPILOGUE" msgstr "" ! #: config/sparc/sparc.h:589 ! msgid "Do not use FUNCTION_EPILOGUE" msgstr "" ! #: config/sparc/sparc.h:591 msgid "Assume possible double misalignment" msgstr "" ! #: config/sparc/sparc.h:593 msgid "Assume all doubles are aligned" msgstr "" ! #: config/sparc/sparc.h:595 msgid "Pass -assert pure-text to linker" msgstr "" ! #: config/sparc/sparc.h:597 msgid "Do not pass -assert pure-text to linker" msgstr "" ! #: config/sparc/sparc.h:599 msgid "Use flat register window model" msgstr "" ! #: config/sparc/sparc.h:601 msgid "Do not use flat register window model" msgstr "" ! #: config/sparc/sparc.h:603 msgid "Use ABI reserved registers" msgstr "" ! #: config/sparc/sparc.h:605 msgid "Do not use ABI reserved registers" msgstr "" ! #: config/sparc/sparc.h:607 msgid "Use hardware quad fp instructions" msgstr "" ! #: config/sparc/sparc.h:609 msgid "Do not use hardware quad fp instructions" msgstr "" ! #: config/sparc/sparc.h:611 msgid "Compile for v8plus ABI" msgstr "" ! #: config/sparc/sparc.h:613 msgid "Do not compile for v8plus ABI" msgstr "" ! #: config/sparc/sparc.h:615 msgid "Utilize Visual Instruction Set" msgstr "" ! #: config/sparc/sparc.h:617 msgid "Do not utilize Visual Instruction Set" msgstr "" #. ??? These are deprecated, coerced to -mcpu=. Delete in 2.9. ! #: config/sparc/sparc.h:620 msgid "Optimize for Cypress processors" msgstr "" ! #: config/sparc/sparc.h:622 msgid "Optimize for SparcLite processors" msgstr "" ! #: config/sparc/sparc.h:624 msgid "Optimize for F930 processors" msgstr "" ! #: config/sparc/sparc.h:626 msgid "Optimize for F934 processors" msgstr "" ! #: config/sparc/sparc.h:628 msgid "Use V8 Sparc ISA" msgstr "" ! #: config/sparc/sparc.h:630 msgid "Optimize for SuperSparc processors" msgstr "" #. End of deprecated options. ! #: config/sparc/sparc.h:633 msgid "Pointers are 64-bit" msgstr "" ! #: config/sparc/sparc.h:635 msgid "Pointers are 32-bit" msgstr "" ! #: config/sparc/sparc.h:637 msgid "Use 32-bit ABI" msgstr "" ! #: config/sparc/sparc.h:639 msgid "Use 64-bit ABI" msgstr "" ! #: config/sparc/sparc.h:641 msgid "Use stack bias" msgstr "" ! #: config/sparc/sparc.h:643 msgid "Do not use stack bias" msgstr "" ! #: config/sparc/sparc.h:645 msgid "Use structs on stronger alignment for double-word copies" msgstr "" ! #: config/sparc/sparc.h:647 msgid "Do not use structs on stronger alignment for double-word copies" msgstr "" ! #: config/sparc/sparc.h:649 msgid "Optimize tail call instructions in assembler and linker" msgstr "" ! #: config/sparc/sparc.h:651 msgid "Do not optimize tail call instructions in assembler or linker" msgstr "" ! #: config/sparc/sparc.h:712 msgid "Use given Sparc code model" msgstr "" #: config/v850/v850-c.c:68 msgid "#pragma GHS endXXXX found without previous startXXX" msgstr "" --- 12371,12740 ---- #. #. The macro SUBTARGET_OVERRIDE_OPTIONS is provided for subtargets, to #. get control. ! #: config/rs6000/sysv4.h:214 #, c-format ! msgid "bad value for -mcall-%s" msgstr "" ! #: config/rs6000/sysv4.h:230 #, c-format ! msgid "bad value for -msdata=%s" msgstr "" ! #: config/rs6000/sysv4.h:247 #, c-format ! msgid "-mrelocatable and -msdata=%s are incompatible" msgstr "" ! #: config/rs6000/sysv4.h:255 #, c-format ! msgid "-f%s and -msdata=%s are incompatible" msgstr "" ! #: config/rs6000/sysv4.h:263 #, c-format ! msgid "-msdata=%s and -mcall-%s are incompatible" msgstr "" ! #: config/rs6000/sysv4.h:270 ! msgid "-mrelocatable and -mno-minimal-toc are incompatible" msgstr "" ! #: config/rs6000/sysv4.h:276 #, c-format ! msgid "-mrelocatable and -mcall-%s are incompatible" msgstr "" ! #: config/rs6000/sysv4.h:283 #, c-format ! msgid "-fPIC and -mcall-%s are incompatible" msgstr "" ! #: config/rs6000/sysv4.h:290 msgid "-mcall-aixdesc must be big endian" msgstr "" ! #: config/s390/s390.c:1910 ! msgid "invalid UNSPEC as operand (1)" msgstr "" ! #: config/s390/s390.c:1940 ! msgid "invalid UNSPEC as operand (2)" msgstr "" ! #: config/s390/s390.c:1946 ! msgid "UNKNOWN in s390_output_symbolic_const !?" msgstr "" ! #: config/s390/s390.c:1962 ! msgid "Cannot decompose address." ! msgstr "" ! ! #: config/s390/s390.c:2110 ! msgid "UNKNOWN in print_operand !?" ! msgstr "" ! ! #: config/s390/s390.c:2703 ! msgid "Total size of local variables exceeds architecture limit." ! msgstr "" ! ! #: config/s390/s390.h:58 ! msgid "Set backchain" ! msgstr "" ! ! #: config/s390/s390.h:59 ! msgid "Don't set backchain (faster, but debug harder" ! msgstr "" ! ! #: config/s390/s390.h:60 ! msgid "Use bras for execucable < 64k" ! msgstr "" ! ! #: config/s390/s390.h:61 ! msgid "Don't use bras" ! msgstr "" ! ! #: config/s390/s390.h:62 ! msgid "Additional debug prints" ! msgstr "" ! ! #: config/s390/s390.h:63 ! msgid "Don't print additional debug prints" ! msgstr "" ! ! #: config/s390/s390.h:64 ! msgid "64 bit mode" ! msgstr "" ! ! #: config/s390/s390.h:65 ! msgid "31 bit mode" ! msgstr "" ! ! #: config/s390/s390.h:66 ! msgid "mvcle use" ! msgstr "" ! ! #: config/s390/s390.h:67 ! msgid "mvc&ex" ! msgstr "" ! ! #: config/sh/sh.c:5060 ! msgid "__builtin_saveregs not supported by this subtarget" ! msgstr "" ! ! #. The sp_switch attribute only has meaning for interrupt functions. ! #: config/sh/sh.c:5610 config/sh/sh.c:5649 #, c-format ! msgid "`%s' attribute only applies to interrupt functions" msgstr "" ! #. The argument must be a constant string. ! #: config/sh/sh.c:5617 ! #, c-format ! msgid "`%s' attribute argument not a string constant" msgstr "" ! #. The argument must be a constant integer. ! #: config/sh/sh.c:5656 #, c-format ! msgid "`%s' attribute argument not an integer constant" msgstr "" ! #. There are no delay slots on SHmedia. ! #. Relaxation isn't yet supported for SHmedia ! #: config/sh/sh.h:367 ! msgid "Profiling is not supported on this target." msgstr "" ! #: config/sparc/sparc.c:317 ! #, c-format ! msgid "%s is not supported by this configuration" msgstr "" ! #: config/sparc/sparc.c:324 ! msgid "-mlong-double-64 not allowed with -m64" ! msgstr "" ! ! #: config/sparc/sparc.c:349 ! msgid "-mcmodel= is not supported on 32 bit systems" ! msgstr "" ! ! #: config/sparc/sparc.c:5971 config/sparc/sparc.c:5977 #, c-format ! msgid "invalid %%Y operand" msgstr "" ! #: config/sparc/sparc.c:6047 #, c-format ! msgid "invalid %%A operand" msgstr "" ! #: config/sparc/sparc.c:6057 #, c-format ! msgid "invalid %%B operand" msgstr "" ! #: config/sparc/sparc.c:6096 #, c-format ! msgid "invalid %%c operand" msgstr "" ! #: config/sparc/sparc.c:6097 #, c-format ! msgid "invalid %%C operand" msgstr "" ! #: config/sparc/sparc.c:6118 #, c-format ! msgid "invalid %%d operand" msgstr "" ! #: config/sparc/sparc.c:6119 #, c-format ! msgid "invalid %%D operand" msgstr "" ! #: config/sparc/sparc.c:6135 #, c-format ! msgid "invalid %%f operand" msgstr "" ! #: config/sparc/sparc.c:6185 msgid "long long constant not a valid immediate operand" msgstr "" ! #: config/sparc/sparc.c:6188 msgid "floating point constant not a valid immediate operand" msgstr "" ! #: config/sparc/freebsd.h:81 config/sparc/linux.h:87 ! #: config/sparc/linux64.h:144 config/sparc/netbsd-elf.h:239 ! msgid "Use 128 bit long doubles" msgstr "" ! #: config/sparc/sp64-elf.h:84 config/sparc/splet.h:29 ! msgid "Generate code for big endian" msgstr "" ! #: config/sparc/sp64-elf.h:85 config/sparc/splet.h:30 ! msgid "Generate code for little endian" msgstr "" ! #: config/sparc/sp86x-aout.h:51 config/sparc/sp86x-elf.h:67 ! msgid "Use little-endian byte order for data" ! msgstr "" ! ! #: config/sparc/sparc.h:539 msgid "Assume possible double misalignment" msgstr "" ! #: config/sparc/sparc.h:541 msgid "Assume all doubles are aligned" msgstr "" ! #: config/sparc/sparc.h:543 msgid "Pass -assert pure-text to linker" msgstr "" ! #: config/sparc/sparc.h:545 msgid "Do not pass -assert pure-text to linker" msgstr "" ! #: config/sparc/sparc.h:547 msgid "Use flat register window model" msgstr "" ! #: config/sparc/sparc.h:549 msgid "Do not use flat register window model" msgstr "" ! #: config/sparc/sparc.h:551 msgid "Use ABI reserved registers" msgstr "" ! #: config/sparc/sparc.h:553 msgid "Do not use ABI reserved registers" msgstr "" ! #: config/sparc/sparc.h:555 msgid "Use hardware quad fp instructions" msgstr "" ! #: config/sparc/sparc.h:557 msgid "Do not use hardware quad fp instructions" msgstr "" ! #: config/sparc/sparc.h:559 msgid "Compile for v8plus ABI" msgstr "" ! #: config/sparc/sparc.h:561 msgid "Do not compile for v8plus ABI" msgstr "" ! #: config/sparc/sparc.h:563 msgid "Utilize Visual Instruction Set" msgstr "" ! #: config/sparc/sparc.h:565 msgid "Do not utilize Visual Instruction Set" msgstr "" #. ??? These are deprecated, coerced to -mcpu=. Delete in 2.9. ! #: config/sparc/sparc.h:568 msgid "Optimize for Cypress processors" msgstr "" ! #: config/sparc/sparc.h:570 msgid "Optimize for SparcLite processors" msgstr "" ! #: config/sparc/sparc.h:572 msgid "Optimize for F930 processors" msgstr "" ! #: config/sparc/sparc.h:574 msgid "Optimize for F934 processors" msgstr "" ! #: config/sparc/sparc.h:576 msgid "Use V8 Sparc ISA" msgstr "" ! #: config/sparc/sparc.h:578 msgid "Optimize for SuperSparc processors" msgstr "" #. End of deprecated options. ! #: config/sparc/sparc.h:581 msgid "Pointers are 64-bit" msgstr "" ! #: config/sparc/sparc.h:583 msgid "Pointers are 32-bit" msgstr "" ! #: config/sparc/sparc.h:585 msgid "Use 32-bit ABI" msgstr "" ! #: config/sparc/sparc.h:587 msgid "Use 64-bit ABI" msgstr "" ! #: config/sparc/sparc.h:589 msgid "Use stack bias" msgstr "" ! #: config/sparc/sparc.h:591 msgid "Do not use stack bias" msgstr "" ! #: config/sparc/sparc.h:593 msgid "Use structs on stronger alignment for double-word copies" msgstr "" ! #: config/sparc/sparc.h:595 msgid "Do not use structs on stronger alignment for double-word copies" msgstr "" ! #: config/sparc/sparc.h:597 msgid "Optimize tail call instructions in assembler and linker" msgstr "" ! #: config/sparc/sparc.h:599 msgid "Do not optimize tail call instructions in assembler or linker" msgstr "" ! #: config/sparc/sparc.h:643 msgid "Use given Sparc code model" msgstr "" + #: config/stormy16/stormy16.c:1179 + msgid "cannot use va_start in interrupt function" + msgstr "" + + #: config/stormy16/stormy16.c:1536 + msgid "`B' operand is not constant" + msgstr "" + + #: config/stormy16/stormy16.c:1542 + msgid "`B' operand has multiple bits set" + msgstr "" + + #: config/stormy16/stormy16.c:1569 + msgid "`o' operand is not constant" + msgstr "" + + #: config/stormy16/stormy16.c:1584 + msgid "xstormy16_print_operand: unknown code" + msgstr "" + + #: config/stormy16/stormy16.c:1634 + #, c-format + msgid "switch statement of size %lu entries too large" + msgstr "" + #: config/v850/v850-c.c:68 msgid "#pragma GHS endXXXX found without previous startXXX" msgstr "" *************** msgid "#pragma GHS endXXX does not match *** 7021,7031 **** msgstr "" #: config/v850/v850-c.c:95 ! msgid "Cannot set interrupt attribute: no current function" msgstr "" #: config/v850/v850-c.c:103 ! msgid "Cannot set interrupt attribute: no such identifier" msgstr "" #: config/v850/v850-c.c:149 --- 12744,12754 ---- msgstr "" #: config/v850/v850-c.c:95 ! msgid "cannot set interrupt attribute: no current function" msgstr "" #: config/v850/v850-c.c:103 ! msgid "cannot set interrupt attribute: no such identifier" msgstr "" #: config/v850/v850-c.c:149 *************** msgstr "" *** 7034,7040 **** #: config/v850/v850-c.c:166 #, c-format ! msgid "unrecognised section name \"%s\"" msgstr "" #: config/v850/v850-c.c:181 --- 12757,12763 ---- #: config/v850/v850-c.c:166 #, c-format ! msgid "unrecognized section name \"%s\"" msgstr "" #: config/v850/v850-c.c:181 *************** msgstr "" *** 7069,7106 **** msgid "junk at end of #pragma ghs endzda" msgstr "" ! #: config/v850/v850.c:107 #, c-format ! msgid "%s=%s is not numeric." msgstr "" ! #: config/v850/v850.c:114 #, c-format ! msgid "%s=%s is too large." msgstr "" ! #: config/v850/v850.c:2039 msgid "a data area attribute cannot be specified for local variables" msgstr "" ! #: config/v850/v850.c:2047 #, c-format msgid "data area of '%s' conflicts with previous declaration" msgstr "" ! #: config/v850/v850.c:2249 #, c-format ! msgid "Bogus JR construction: %d\n" msgstr "" ! #: config/v850/v850.c:2270 config/v850/v850.c:2472 #, c-format ! msgid "Bad amount of stack space removal: %d" msgstr "" ! #: config/v850/v850.c:2448 #, c-format ! msgid "Bogus JARL construction: %d\n" msgstr "" #. Macro to define tables used to set the flags. --- 12792,12837 ---- msgid "junk at end of #pragma ghs endzda" msgstr "" ! #: config/v850/v850.c:122 #, c-format ! msgid "%s=%s is not numeric" msgstr "" ! #: config/v850/v850.c:129 #, c-format ! msgid "%s=%s is too large" msgstr "" ! #: config/v850/v850.c:285 ! msgid "const_double_split got a bad insn:" ! msgstr "" ! ! #: config/v850/v850.c:777 ! msgid "output_move_single:" ! msgstr "" ! ! #: config/v850/v850.c:2084 msgid "a data area attribute cannot be specified for local variables" msgstr "" ! #: config/v850/v850.c:2095 #, c-format msgid "data area of '%s' conflicts with previous declaration" msgstr "" ! #: config/v850/v850.c:2298 #, c-format ! msgid "bogus JR construction: %d\n" msgstr "" ! #: config/v850/v850.c:2319 config/v850/v850.c:2521 #, c-format ! msgid "bad amount of stack space removal: %d" msgstr "" ! #: config/v850/v850.c:2497 #, c-format ! msgid "bogus JARL construction: %d\n" msgstr "" #. Macro to define tables used to set the flags. *************** msgstr "" *** 7108,13970 **** #. each pair being { "NAME", VALUE } #. where VALUE is the bits to set or minus the bits to clear. #. An empty string NAME is used to identify the default VALUE. ! #: config/v850/v850.h:121 msgid "Support Green Hills ABI" msgstr "" ! #: config/v850/v850.h:124 msgid "Prohibit PC relative function calls" msgstr "" ! #: config/v850/v850.h:127 msgid "Reuse r30 on a per function basis" msgstr "" ! #: config/v850/v850.h:130 msgid "Use stubs for function prologues" msgstr "" ! #: config/v850/v850.h:133 msgid "Same as: -mep -mprolog-function" msgstr "" ! #: config/v850/v850.h:134 msgid "Enable backend debugging" msgstr "" ! #: config/v850/v850.h:136 msgid "Compile for the v850 processor" msgstr "" ! #: config/v850/v850.h:139 msgid "Use 4 byte entries in switch tables" msgstr "" ! #. This macro is similar to `TARGET_SWITCHES' but defines names of ! #. command options that have values. Its definition is an ! #. initializer with a subgrouping for each command option. ! #. ! #. Each subgrouping contains a string constant, that defines the ! #. fixed part of the option name, and the address of a variable. The ! #. variable, type `char *', is set to the variable part of the given ! #. option if the fixed part matches. The actual option name is made ! #. by appending `-m' to the specified name. ! #. ! #. Here is an example which defines `-mshort-data-NUMBER'. If the ! #. given option is `-mshort-data-512', the variable `m88k_short_data' ! #. will be set to the string `"512"'. ! #. ! #. extern char *m88k_short_data; ! #. #define TARGET_OPTIONS { { "short-data-", &m88k_short_data } } ! #: config/v850/v850.h:183 msgid "Set the max size of data eligible for the TDA area" msgstr "" ! #: config/v850/v850.h:186 msgid "Set the max size of data eligible for the SDA area" msgstr "" ! #: config/v850/v850.h:189 msgid "Set the max size of data eligible for the ZDA area" msgstr "" ! #: convert.c:67 ! msgid "cannot convert to a pointer type" msgstr "" ! #: convert.c:100 ! msgid "pointer value used where a floating point value was expected" msgstr "" ! #: convert.c:104 ! msgid "aggregate value used where a float was expected" msgstr "" ! #: convert.c:130 ! msgid "conversion to incomplete type" msgstr "" ! #: convert.c:390 convert.c:470 ! msgid "can't convert between vector values of different size" msgstr "" ! #: convert.c:396 ! msgid "aggregate value used where an integer was expected" msgstr "" ! #: convert.c:448 f/com.c:1132 ! msgid "pointer value used where a complex was expected" msgstr "" ! #: convert.c:452 f/com.c:1134 ! msgid "aggregate value used where a complex was expected" msgstr "" ! #: convert.c:476 ! msgid "can't convert value to a vector" msgstr "" ! #: cp/call.c:379 ! msgid "unable to call pointer to member function here" msgstr "" ! #: cp/call.c:509 ! msgid "destructors take no parameters" msgstr "" ! #: cp/call.c:2867 ! msgid "ISO C++ forbids omitting the middle term of a ?: expression" msgstr "" ! #: cp/class.c:1438 ! #, c-format ! msgid "conflicting access specifications for field `%s', ignored" msgstr "" ! #: cp/class.c:5533 ! msgid "trying to finish struct, but kicked out due to previous parse errors." msgstr "" ! #: cp/class.c:5988 ! #, c-format ! msgid "language string `\"%s\"' not recognized" msgstr "" ! #: cp/class.c:6303 cp/class.c:6471 cp/class.c:6478 ! msgid "not enough type information" msgstr "" ! #: cp/class.c:6455 ! msgid "invalid operation on uninstantiated type" msgstr "" ! #: cp/class.c:8256 ! msgid "" ! "object size exceeds built-in limit for virtual function table implementation" msgstr "" ! #: cp/class.c:8258 ! msgid "" ! "object size exceeds normal limit for virtual function table implementation, " ! "recompile all source and use -fhuge-objects" msgstr "" ! #: cp/decl.c:4230 ! #, c-format ! msgid "declaration of `%s' shadows a member of `this'" msgstr "" ! #: cp/decl.c:4871 ! #, c-format ! msgid "label `%s' referenced outside of any function" msgstr "" ! #: cp/decl.c:4976 cp/decl.c:5000 ! msgid "jump to case label" msgstr "" ! #: cp/decl.c:5007 cp/decl.c:5111 ! msgid " enters try block" msgstr "" ! #: cp/decl.c:5009 cp/decl.c:5113 ! msgid " enters catch block" msgstr "" ! #: cp/decl.c:5092 ! msgid " from here" msgstr "" ! #: cp/decl.c:6355 ! msgid "the ABI requires vtable thunks" msgstr "" ! #: cp/decl.c:6996 ! msgid "multiple types in one declaration" msgstr "" ! #: cp/decl.c:6999 ! msgid "declaration does not declare anything" msgstr "" ! #: cp/decl.c:7023 ! msgid "Missing type-name in typedef-declaration." msgstr "" ! #: cp/decl.c:7030 ! msgid "ISO C++ prohibits anonymous structs" msgstr "" ! #: cp/decl.c:8018 ! msgid "assignment (not initialization) in declaration" msgstr "" ! #: cp/decl.c:8580 ! msgid "invalid catch parameter" msgstr "" ! #: cp/decl.c:8807 ! msgid "cannot declare `::main' to be a template" msgstr "" ! #: cp/decl.c:8809 ! msgid "cannot declare `::main' to be inline" msgstr "" ! #: cp/decl.c:8811 ! msgid "cannot declare `::main' to be static" msgstr "" ! #: cp/decl.c:8814 ! msgid "`main' must return `int'" msgstr "" ! #: cp/decl.c:9365 ! msgid "overflow in array dimension" msgstr "" ! #: cp/decl.c:9651 ! msgid "destructors must be member functions" msgstr "" ! #: cp/decl.c:9980 ! msgid "`bool' is now a keyword" msgstr "" ! #: cp/decl.c:10011 ! msgid "ISO C++ does not support `long long'" msgstr "" ! #: cp/decl.c:10133 ! #, c-format ! msgid "short, signed or unsigned invalid for `%s'" msgstr "" ! #: cp/decl.c:10138 ! #, c-format ! msgid "long and short specified together for `%s'" msgstr "" ! #: cp/decl.c:10149 ! #, c-format ! msgid "signed and unsigned given together for `%s'" msgstr "" ! #: cp/decl.c:10296 ! msgid "storage class specifiers invalid in parameter declarations" msgstr "" ! #: cp/decl.c:10300 ! msgid "typedef declaration invalid in parameter declaration" msgstr "" ! #: cp/decl.c:10311 ! msgid "virtual outside class declaration" msgstr "" ! #: cp/decl.c:10365 ! #, c-format ! msgid "storage class specified for %s `%s'" msgstr "" ! #: cp/decl.c:10403 ! msgid "storage class specifiers invalid in friend function declarations" msgstr "" ! #: cp/decl.c:10585 ! msgid "destructor cannot be static member function" msgstr "" ! #: cp/decl.c:10609 ! msgid "constructor cannot be static member function" msgstr "" ! #: cp/decl.c:10612 ! msgid "constructors cannot be declared virtual" msgstr "" ! #: cp/decl.c:10627 ! msgid "return value type specifier for constructor ignored" msgstr "" ! #: cp/decl.c:10646 ! #, c-format ! msgid "can't initialize friend function `%s'" msgstr "" ! #. Cannot be both friend and virtual. ! #: cp/decl.c:10650 ! msgid "virtual functions cannot be friends" msgstr "" ! #: cp/decl.c:10655 ! msgid "friend declaration not in class definition" msgstr "" ! #: cp/decl.c:10711 ! #, c-format ! msgid "cannot declare %s to references" msgstr "" ! #: cp/decl.c:10737 ! msgid "invalid type: `void &'" msgstr "" ! #: cp/decl.c:10788 ! msgid "discarding `const' applied to a reference" msgstr "" ! #: cp/decl.c:10790 ! msgid "discarding `volatile' applied to a reference" msgstr "" ! #. [dcl.fct.spec] The explicit specifier shall only be used in ! #. declarations of constructors within a class definition. ! #: cp/decl.c:10997 ! msgid "only declarations of constructors can be `explicit'" msgstr "" ! #: cp/decl.c:11005 #, c-format ! msgid "non-member `%s' cannot be declared `mutable'" msgstr "" ! #: cp/decl.c:11010 ! #, c-format ! msgid "non-object member `%s' cannot be declared `mutable'" msgstr "" ! #: cp/decl.c:11016 ! #, c-format ! msgid "function `%s' cannot be declared `mutable'" msgstr "" ! #: cp/decl.c:11021 ! #, c-format ! msgid "static `%s' cannot be declared `mutable'" msgstr "" ! #: cp/decl.c:11026 ! #, c-format ! msgid "const `%s' cannot be declared `mutable'" msgstr "" ! #: cp/decl.c:11131 ! msgid "typedef declaration includes an initializer" msgstr "" ! #: cp/decl.c:11241 ! msgid "unnamed variable or field declared void" msgstr "" ! #: cp/decl.c:11250 ! msgid "variable or field declared void" msgstr "" ! #: cp/decl.c:11260 ! msgid "cannot use `::' in parameter declaration" msgstr "" ! #: cp/decl.c:11445 ! #, c-format ! msgid "`%s' is neither function nor member function; cannot be declared friend" msgstr "" ! #: cp/decl.c:11456 ! msgid "member functions are implicitly friends of their class" msgstr "" ! #: cp/decl.c:11570 ! #, c-format ! msgid "storage class `auto' invalid for function `%s'" msgstr "" ! #: cp/decl.c:11572 ! #, c-format ! msgid "storage class `register' invalid for function `%s'" msgstr "" ! #: cp/decl.c:11583 ! #, c-format ! msgid "" ! "storage class `static' invalid for function `%s' declared out of global scope" msgstr "" ! #: cp/decl.c:11585 ! #, c-format ! msgid "" ! "storage class `inline' invalid for function `%s' declared out of global scope" msgstr "" ! #: cp/decl.c:11592 ! #, c-format ! msgid "virtual non-class function `%s'" msgstr "" ! #. FIXME need arm citation ! #: cp/decl.c:11627 ! msgid "cannot declare static function inside another function" msgstr "" ! #: cp/decl.c:11904 ! msgid "" ! "invalid integer constant in parameter list, did you forget to give parameter " ! "name?" msgstr "" ! #: cp/decl.c:12281 ! #, c-format ! msgid "conversion to %s%s will never use a type conversion operator" msgstr "" ! #: cp/decl.c:13365 ! msgid "return type for `main' changed to `int'" msgstr "" ! #: cp/decl2.c:569 ! #, c-format ! msgid "-f%s is no longer supported" msgstr "" ! #: cp/decl2.c:575 ! msgid "" ! "-fhandle-exceptions has been renamed to -fexceptions (and is now on by " ! "default)" msgstr "" ! #: cp/decl2.c:601 ! msgid "-fname-mangling-version is no longer supported" msgstr "" ! #: cp/decl2.c:664 ! msgid "-Wno-strict-prototypes is not supported in C++" msgstr "" ! #: cp/decl2.c:1000 ! msgid "name missing for member function" msgstr "" ! #: cp/decl2.c:1061 ! msgid "`__alignof__' applied to a bit-field" msgstr "" ! #. Something has gone very wrong. Assume we are mistakenly reducing ! #. an expression instead of a declaration. ! #: cp/decl2.c:1103 ! msgid "parser may be lost: is there a '{' missing somewhere?" msgstr "" ! #: cp/decl2.c:1134 cp/decl2.c:1148 ! msgid "ambiguous conversion for array subscript" msgstr "" ! #: cp/decl2.c:1198 ! msgid "anachronistic use of array size in vector delete" msgstr "" ! #: cp/decl2.c:1208 msgid "" ! "cannot delete a function. Only pointer-to-objects are valid arguments to " ! "`delete'" msgstr "" ! #: cp/decl2.c:1505 ! msgid "initializer invalid for static member with constructor" msgstr "" ! #: cp/decl2.c:1508 ! msgid "(an out of class initialization is required)" msgstr "" ! #: cp/decl2.c:1681 ! msgid "field initializer is not constant" msgstr "" ! #: cp/decl2.c:2020 ! msgid "anonymous struct not inside named type" msgstr "" ! #: cp/decl2.c:2119 ! msgid "namespace-scope anonymous aggregates must be static" msgstr "" ! #: cp/decl2.c:2129 ! msgid "anonymous aggregate with no members" msgstr "" ! #. Overflow occurred. That means there are at least 4 billion ! #. initialization functions. ! #: cp/decl2.c:2997 ! msgid "too many initialization functions required" msgstr "" ! #: cp/decl2.c:3807 ! msgid "use of old-style cast" msgstr "" ! #: cp/error.c:46 ! #, c-format ! msgid "`%s' not supported by %s" msgstr "" ! #: cp/error.c:630 ! #, c-format ! msgid "" msgstr "" ! #: cp/error.c:891 #, c-format ! msgid "(static %s for %s)" msgstr "" ! #: cp/error.c:2528 ! #, c-format ! msgid "In %s `%s':" msgstr "" ! #: cp/error.c:2583 ! #, c-format ! msgid "%s: In instantiation of `%s':\n" msgstr "" ! #: cp/error.c:2607 ! #, c-format ! msgid "%s:%d: instantiated from `%s'\n" msgstr "" ! #: cp/error.c:2612 ! #, c-format ! msgid "%s:%d: instantiated from here\n" msgstr "" ! #: cp/except.c:258 ! msgid "call to Java `catch' or `throw' with `jthrowable' undefined" msgstr "" ! #: cp/except.c:329 ! msgid "mixing C++ and Java catches in a single translation unit" msgstr "" ! #: cp/except.c:685 ! msgid " in thrown expression" msgstr "" ! #: cp/friend.c:423 msgid "" ! "(if this is not what you intended, make sure the function template has " ! "already been declared and add <> after the function name here) -Wno-non-" ! "template-friend disables this warning." msgstr "" ! #: cp/g++spec.c:197 java/jvspec.c:357 ! #, c-format ! msgid "argument to `%s' missing\n" msgstr "" ! #: cp/init.c:313 ! msgid "initializer list treated as compound expression" msgstr "" ! #: cp/init.c:428 ! msgid " will be re-ordered to match declaration order" msgstr "" ! #: cp/init.c:662 ! msgid " will be re-ordered to match inheritance order" msgstr "" ! #: cp/init.c:1105 ! msgid "base class initializer specified, but no base class to initialize" msgstr "" ! #: cp/init.c:1111 ! msgid "initializer for unnamed base class ambiguous" msgstr "" ! #: cp/init.c:1136 ! msgid "no base class to initialize" msgstr "" ! #: cp/init.c:1860 ! msgid "object missing in use of pointer-to-member construct" msgstr "" ! #: cp/init.c:1902 cp/typeck.c:3186 cp/typeck.c:3287 ! msgid "at this point in file" msgstr "" ! #: cp/init.c:2076 ! msgid "new of array type fails to specify size" msgstr "" ! #: cp/init.c:2087 ! msgid "size in array new must have integral type" msgstr "" ! #: cp/init.c:2093 ! msgid "zero size array reserves no space" msgstr "" ! #: cp/init.c:2158 ! msgid "new cannot be applied to a reference type" msgstr "" ! #: cp/init.c:2164 ! msgid "new cannot be applied to a function type" msgstr "" ! #: cp/init.c:2211 ! msgid "call to Java constructor, while `jclass' undefined" msgstr "" ! #: cp/init.c:2227 ! msgid "Can't find class$" msgstr "" ! #: cp/init.c:2340 ! msgid "invalid type `void' for new" msgstr "" ! #: cp/init.c:2394 ! #, c-format ! msgid "call to Java constructor with `%s' undefined" msgstr "" ! #: cp/init.c:2522 cp/typeck2.c:381 cp/typeck2.c:1207 ! msgid "initializer list being treated as compound expression" msgstr "" ! #: cp/init.c:2528 ! msgid "ISO C++ forbids aggregate initializer to new" msgstr "" ! #: cp/init.c:2967 ! msgid "initializer ends prematurely" msgstr "" ! #: cp/init.c:3037 ! msgid "cannot initialize multi-dimensional array with initializer" msgstr "" ! #: cp/init.c:3215 ! msgid "unknown array size in delete" msgstr "" ! #: cp/init.c:3440 ! msgid "type to vector delete is neither pointer or array type" msgstr "" ! #: cp/lang-options.h:29 ! msgid "Do not obey access control semantics" msgstr "" ! #: cp/lang-options.h:31 ! msgid "Change when template instances are emitted" msgstr "" ! #: cp/lang-options.h:36 ! msgid "Check the return value of new" msgstr "" ! #: cp/lang-options.h:39 ! msgid "Reduce size of object files" msgstr "" ! #: cp/lang-options.h:43 ! msgid "Make string literals `char[]' instead of `const char[]'" msgstr "" ! #: cp/lang-options.h:46 ! msgid "Dump the entire translation unit to a file" msgstr "" ! #: cp/lang-options.h:48 ! msgid "Do not inline member functions by default" msgstr "" ! #: cp/lang-options.h:51 ! msgid "Do not generate run time type descriptor information" msgstr "" ! #: cp/lang-options.h:56 ! msgid "Do not generate code to check exception specifications" msgstr "" ! #: cp/lang-options.h:61 ! msgid "Scope of for-init-statement vars extends outside" msgstr "" ! #: cp/lang-options.h:64 ! msgid "Do not recognise GNU defined keywords" msgstr "" ! #: cp/lang-options.h:69 ! msgid "Do not treat the namespace `std' as a normal namespace" msgstr "" ! #: cp/lang-options.h:71 ! msgid "Enable support for huge objects" msgstr "" ! #: cp/lang-options.h:75 ! msgid "Export functions even if they can be inlined" msgstr "" ! #: cp/lang-options.h:78 ! msgid "Only emit explicit template instatiations" msgstr "" ! #: cp/lang-options.h:81 ! msgid "Only emit explicit instatiations of inline templates" msgstr "" ! #: cp/lang-options.h:87 ! msgid "Don't pedwarn about uses of Microsoft extensions" msgstr "" ! #: cp/lang-options.h:90 ! msgid "Recognise and/bitand/bitor/compl/not/or/xor" msgstr "" ! #: cp/lang-options.h:94 ! msgid "Disable optional diagnostics" msgstr "" ! #: cp/lang-options.h:96 ! msgid "Downgrade conformance errors to warnings" msgstr "" ! #: cp/lang-options.h:99 ! msgid "Enable automatic template instantiation" msgstr "" ! #: cp/lang-options.h:104 ! msgid "Display statistics accumulated during compilation" msgstr "" ! #: cp/lang-options.h:107 ! msgid "Specify maximum template instantiation depth" msgstr "" ! #: cp/lang-options.h:109 ! msgid "Use __cxa_atexit to register destructors." msgstr "" ! #: cp/lang-options.h:112 ! msgid "Discard unused virtual functions" msgstr "" ! #: cp/lang-options.h:115 ! msgid "Implement vtables using thunks" msgstr "" ! #: cp/lang-options.h:118 ! msgid "Emit common-like symbols as weak symbols" msgstr "" ! #: cp/lang-options.h:121 ! msgid "Emit cross referencing information" msgstr "" ! #: cp/lang-options.h:125 ! msgid "Warn about inconsistent return types" msgstr "" ! #: cp/lang-options.h:128 ! msgid "Warn about overloaded virtual function names" msgstr "" ! #: cp/lang-options.h:132 ! msgid "Don't warn when all ctors/dtors are private" msgstr "" ! #: cp/lang-options.h:134 ! msgid "Warn about non virtual destructors" msgstr "" ! #: cp/lang-options.h:137 ! msgid "Warn when a function is declared extern, then inline" msgstr "" ! #: cp/lang-options.h:140 ! msgid "Warn when the compiler reorders code" msgstr "" ! #: cp/lang-options.h:143 ! msgid "Warn when synthesis behaviour differs from Cfront" msgstr "" ! #: cp/lang-options.h:147 ! msgid "Don't warn when type converting pointers to member functions" msgstr "" ! #: cp/lang-options.h:149 ! msgid "Warn about violations of Effective C++ style rules" msgstr "" ! #: cp/lang-options.h:152 ! msgid "Warn when overload promotes from unsigned to signed" msgstr "" ! #: cp/lang-options.h:155 ! msgid "Warn if a C style cast is used in a program" msgstr "" ! #: cp/lang-options.h:159 ! msgid "" ! "Don't warn when non-templatized friend functions are declared within a " ! "template" msgstr "" ! #: cp/lang-options.h:162 ! msgid "Don't announce deprecation of compiler features" msgstr "" ! #: cp/lex.c:148 ! msgid "type name expected before `*'" msgstr "" ! #: cp/lex.c:170 ! msgid "cannot declare references to references" msgstr "" ! #: cp/lex.c:175 ! msgid "cannot declare pointers to references" msgstr "" ! #: cp/lex.c:179 ! msgid "type name expected before `&'" msgstr "" ! #: cp/lex.c:1018 ! #, c-format ! msgid "semicolon missing after %s declaration" msgstr "" ! #: cp/lex.c:1069 ! #, c-format ! msgid "junk at end of #pragma %s" msgstr "" ! #: cp/lex.c:1076 ! #, c-format ! msgid "invalid #pragma %s" msgstr "" ! #: cp/lex.c:1166 ! #, c-format ! msgid "#pragma implementation for %s appears after file is included" msgstr "" ! #: cp/lex.c:1191 ! msgid "junk at end of #pragma GCC java_exceptions" msgstr "" ! #: cp/lex.c:1292 ! msgid "" ! "(Each undeclared identifier is reported only once for each function it " ! "appears in.)" msgstr "" ! #: cp/lex.c:1315 ! #, c-format ! msgid "name lookup of `%s' changed" msgstr "" ! #: cp/lex.c:1329 cp/lex.c:1336 ! #, c-format ! msgid "name lookup of `%s' changed for new ISO `for' scoping" msgstr "" ! #: cp/mangle.c:1877 ! msgid "real-valued template parameters when cross-compiling" msgstr "" ! #: cp/method.c:173 ! msgid "methods cannot be converted to function pointers" msgstr "" ! #: cp/method.c:178 ! #, c-format ! msgid "ambiguous request for method pointer `%s'" msgstr "" ! #: cp/parse.y:670 ! msgid "invalid default template argument" msgstr "" ! #: cp/parse.y:879 ! msgid "no base or member initializers given following ':'" msgstr "" ! #: cp/parse.y:892 ! msgid "base initializers not allowed for non-member functions" msgstr "" ! #: cp/parse.y:894 ! msgid "only constructors take base initializers" msgstr "" ! #: cp/parse.y:927 cp/parse.y:933 ! msgid "anachronistic old style base class initializer" msgstr "" ! #. Handle `Class>' without space in the `>>' ! #: cp/parse.y:1055 ! msgid "`>>' should be `> >' in template class name" msgstr "" ! #: cp/parse.y:1112 cp/parse.y:1121 ! #, c-format ! msgid "ISO C++ forbids an empty condition for `%s'" msgstr "" ! #: cp/parse.y:1216 ! msgid "ISO C++ forbids `&&'" msgstr "" ! #: cp/parse.y:1300 ! msgid "ISO C++ forbids initialization of new expression with `='" msgstr "" ! #: cp/parse.y:1331 ! msgid "ISO C++ forbids compound literals" msgstr "" ! #: cp/parse.y:1566 ! msgid "ISO C++ forbids braced-groups within expressions" msgstr "" ! #: cp/parse.y:1972 cp/parse.y:1987 ! msgid "sigof type specifier" msgstr "" ! #: cp/parse.y:1977 ! msgid "`sigof' applied to non-aggregate expression" msgstr "" ! #: cp/parse.y:1992 ! msgid "`sigof' applied to non-aggregate type" msgstr "" ! #: cp/parse.y:2332 ! #, c-format ! msgid "storage class specifier `%s' not allowed after struct or class" msgstr "" ! #: cp/parse.y:2334 ! #, c-format ! msgid "type specifier `%s' not allowed after struct or class" msgstr "" ! #: cp/parse.y:2336 ! #, c-format ! msgid "type qualifier `%s' not allowed after struct or class" msgstr "" ! #: cp/parse.y:2338 ! msgid "no body nor ';' separates two class, struct or union declarations" msgstr "" ! #: cp/parse.y:2503 ! msgid "multiple access specifiers" msgstr "" ! #: cp/parse.y:2521 ! msgid "multiple `virtual' specifiers" msgstr "" ! #: cp/parse.y:2556 ! msgid "missing ';' before right brace" msgstr "" ! #: cp/parse.y:2779 ! msgid "ISO C++ forbids array dimensions with parenthesized type in new" msgstr "" ! #: cp/parse.y:3288 ! msgid "ISO C++ forbids label declarations" msgstr "" ! #: cp/parse.y:3450 ! msgid "ISO C++ forbids computed gotos" msgstr "" ! #: cp/parse.y:3458 ! msgid "label must be followed by statement" msgstr "" ! #: cp/parse.y:3557 ! msgid "ISO C++ forbids compound statements inside for initializations" msgstr "" ! #. This helps us recover from really nasty ! #. parse errors, for example, a missing right ! #. parenthesis. ! #: cp/parse.y:3640 cp/parse.y:3650 ! msgid "possibly missing ')'" msgstr "" ! #: cp/parse.y:3747 cp/parse.y:3752 ! msgid "type specifier omitted for parameter" msgstr "" ! #: cp/pt.c:6316 ! msgid "creating array with size zero" msgstr "" ! #: cp/pt.c:6830 ! #, c-format ! msgid "use of `%s' in template" msgstr "" ! #: cp/pt.c:8036 ! msgid "incomplete type unification" msgstr "" ! #: cp/pt.c:8966 #, c-format ! msgid "use of `%s' in template type unification" msgstr "" ! #: cp/repo.c:272 ! msgid "-frepo must be used with -c" msgstr "" ! #: cp/repo.c:366 ! #, c-format ! msgid "mysterious repository information in %s" msgstr "" ! #: cp/repo.c:381 ! #, c-format ! msgid "can't create repository information file `%s'" msgstr "" ! #: cp/rtti.c:224 ! msgid "taking dynamic typeid of object with -fno-rtti" msgstr "" ! #: cp/rtti.c:260 ! msgid "cannot use typeid with -fno-rtti" msgstr "" ! #: cp/rtti.c:266 cp/rtti.c:415 ! msgid "must #include before using typeid" msgstr "" ! #: cp/search.c:1961 ! msgid "adjusting pointers for covariant returns" msgstr "" ! #. This shouldn't happen, I don't want errors! ! #: cp/search.c:2469 ! msgid "recoverable compiler error, fixups for virtual function" msgstr "" ! #: cp/semantics.c:1026 ! msgid "ISO C++ does not permit named return values" msgstr "" ! #: cp/semantics.c:1043 ! msgid "can't redefine default return value for constructors" msgstr "" ! #: cp/semantics.c:1112 ! msgid " will be re-ordered to precede member initializations" msgstr "" ! #: cp/semantics.c:1385 ! msgid "`this' is unavailable for static member functions" msgstr "" ! #: cp/semantics.c:1391 ! msgid "invalid use of `this' in non-member function" msgstr "" ! #: cp/semantics.c:1393 ! msgid "invalid use of `this' at top level" msgstr "" ! #: cp/semantics.c:1678 ! msgid "template type parameters must use the keyword `class' or `typename'" msgstr "" ! #: cp/spew.c:249 #, c-format ! msgid "identifier name `%s' conflicts with GNU C++ internal naming strategy" msgstr "" ! #: cp/spew.c:357 ! msgid "parse error" msgstr "" ! #: cp/spew.c:1023 cp/spew.c:1295 ! msgid "parse error at end of saved function text" msgstr "" ! #: cp/spew.c:1065 ! msgid "parse error in method specification" msgstr "" ! #: cp/spew.c:1107 ! msgid "function body for constructor missing" msgstr "" ! #: cp/spew.c:1500 ! #, c-format ! msgid "%s before `%s'" msgstr "" ! #: cp/spew.c:1502 ! #, c-format ! msgid "%s before `%c'" msgstr "" ! #: cp/spew.c:1504 ! #, c-format ! msgid "%s before `\\%o'" msgstr "" ! #: cp/spew.c:1507 ! #, c-format ! msgid "%s before `%s' token" msgstr "" ! #: cp/tree.c:216 ! #, c-format ! msgid "non-lvalue in %s" msgstr "" ! #: cp/tree.c:2232 msgid "" ! "`java_interface' attribute can only be applied to Java class definitions" msgstr "" ! #: cp/tree.c:2242 ! msgid "`com_interface' only supported with -fvtable-thunks" msgstr "" ! #: cp/tree.c:2251 ! msgid "`com_interface' attribute can only be applied to class definitions" msgstr "" ! #: cp/tree.c:2267 ! msgid "requested init_priority is not an integer constant" msgstr "" ! #: cp/tree.c:2287 msgid "" ! "can only use init_priority attribute on file-scope definitions of objects of " ! "class type" msgstr "" ! #: cp/tree.c:2293 ! msgid "requested init_priority is out of range" msgstr "" ! #: cp/tree.c:2302 ! msgid "requested init_priority is reserved for internal use" msgstr "" ! #: cp/tree.c:2312 ! msgid "init_priority attribute is not supported on this platform" msgstr "" ! #: cp/typeck.c:483 ! #, c-format ! msgid "" ! "ISO C++ forbids %s between pointer of type `void *' and pointer-to-function" msgstr "" ! #: cp/typeck.c:1558 ! msgid "ISO C++ forbids applying `sizeof' to a function type" msgstr "" ! #: cp/typeck.c:1564 ! msgid "ISO C++ forbids applying `sizeof' to a member function" msgstr "" ! #: cp/typeck.c:1570 ! msgid "" ! "ISO C++ forbids applying `sizeof' to type `void' which is an incomplete type" msgstr "" ! #: cp/typeck.c:1619 ! msgid "sizeof applied to a bit-field" msgstr "" ! #: cp/typeck.c:1622 ! msgid "ISO C++ forbids applying `sizeof' to an expression of function type" msgstr "" ! #: cp/typeck.c:2235 ! msgid "invalid reference to NULL ptr, use ptr-to-member instead" msgstr "" ! #: cp/typeck.c:2398 ! #, c-format ! msgid "invalid use of `%s' on pointer to member" msgstr "" ! #: cp/typeck.c:2404 ! msgid "invalid type argument" msgstr "" ! #: cp/typeck.c:2507 ! msgid "ISO C++ forbids subscripting non-lvalue array" msgstr "" ! #: cp/typeck.c:2518 ! msgid "subscripting array declared `register'" msgstr "" ! #: cp/typeck.c:2693 cp/typeck.c:2833 ! msgid "pointer to member function called, but not in class scope" msgstr "" ! #: cp/typeck.c:2831 ! msgid "" ! "invalid call to member function needing `this' in static member function " ! "scope" msgstr "" ! #: cp/typeck.c:3021 ! msgid "ISO C++ forbids calling `::main' from within program" msgstr "" ! #: cp/typeck.c:3225 ! msgid "parameter type of called function is incomplete" msgstr "" ! #: cp/typeck.c:3615 ! #, c-format ! msgid "%s rotate count is negative" msgstr "" ! #: cp/typeck.c:3618 ! #, c-format ! msgid "%s rotate count >= width of type" msgstr "" ! #: cp/typeck.c:3649 cp/typeck.c:3654 cp/typeck.c:3745 cp/typeck.c:3750 ! msgid "ISO C++ forbids comparison between pointer and integer" msgstr "" ! #: cp/typeck.c:3966 ! msgid "comparison between signed and unsigned integer expressions" msgstr "" ! #: cp/typeck.c:4105 ! msgid "ISO C++ forbids using pointer of type `void *' in pointer arithmetic" msgstr "" ! #: cp/typeck.c:4111 ! msgid "ISO C++ forbids using a pointer-to-function in pointer arithmetic" msgstr "" ! #: cp/typeck.c:4117 msgid "" ! "ISO C++ forbids using a pointer to member function in pointer arithmetic" msgstr "" ! #: cp/typeck.c:4123 ! msgid "ISO C++ forbids using pointer to a member in pointer arithmetic" msgstr "" ! #: cp/typeck.c:4194 ! msgid "ISO C++ forbids using pointer of type `void *' in subtraction" msgstr "" ! #: cp/typeck.c:4196 ! msgid "ISO C++ forbids using pointer to a function in subtraction" msgstr "" ! #: cp/typeck.c:4198 ! msgid "ISO C++ forbids using pointer to a method in subtraction" msgstr "" ! #: cp/typeck.c:4200 ! msgid "ISO C++ forbids using pointer to a member in subtraction" msgstr "" ! #: cp/typeck.c:4212 ! msgid "invalid use of a pointer to an incomplete type in pointer arithmetic" msgstr "" ! #: cp/typeck.c:4317 ! msgid "taking address of temporary" msgstr "" ! #: cp/typeck.c:4517 ! #, c-format ! msgid "ISO C++ forbids %sing an enum" msgstr "" ! #: cp/typeck.c:4561 ! msgid "cast to non-reference type used as lvalue" msgstr "" ! #. ARM $3.4 ! #: cp/typeck.c:4628 ! msgid "ISO C++ forbids taking address of function `::main'" msgstr "" ! #: cp/typeck.c:4721 ! msgid "ISO C++ forbids taking the address of a cast to a non-lvalue expression" msgstr "" ! #: cp/typeck.c:4737 ! msgid "unary `&'" msgstr "" ! #: cp/typeck.c:4929 ! msgid "cannot take the address of `this', which is an rvalue expression" msgstr "" ! #: cp/typeck.c:5232 ! msgid "" ! "ISO C++ forbids casting between pointer-to-function and pointer-to-object" msgstr "" ! #: cp/typeck.c:5682 ! msgid "ISO C++ forbids cast to non-reference type used as lvalue" msgstr "" ! #: cp/typeck.c:5788 ! msgid "ISO C++ forbids assignment of arrays" msgstr "" ! #: cp/typeck.c:5803 ! msgid "return value from function receives multiple initializations" msgstr "" ! #: cp/typeck.c:5946 ! msgid " in pointer to member function conversion" msgstr "" ! #: cp/typeck.c:5954 ! msgid " in pointer to member conversion" msgstr "" ! #: cp/typeck.c:6542 ! msgid "returning reference to temporary" msgstr "" ! #: cp/typeck.c:6549 ! msgid "reference to non-lvalue returned" msgstr "" ! #: cp/typeck.c:6595 ! msgid "returning a value from a destructor" msgstr "" ! #. If a return statement appears in a handler of the ! #. function-try-block of a constructor, the program is ill-formed. ! #: cp/typeck.c:6603 ! msgid "cannot return from a handler of a function-try-block of a constructor" msgstr "" ! #. You can't return a value from a constructor. ! #: cp/typeck.c:6606 ! msgid "returning a value from a constructor" msgstr "" ! #: cp/typeck.c:6623 msgid "" ! "return-statement with no value, in function declared with a non-void return " ! "type" msgstr "" ! #: cp/typeck.c:6639 ! msgid "" ! "return-statement with a value, in function declared with a void return type" msgstr "" ! #: cp/typeck2.c:171 ! msgid " because the following virtual functions are abstract:" msgstr "" ! #: cp/typeck2.c:268 ! #, c-format ! msgid "Internal error #%d." msgstr "" ! #: cp/typeck2.c:339 ! msgid "due to the presence of a constructor" msgstr "" ! #: cp/typeck2.c:363 ! msgid "comma expression used to initialize return value" msgstr "" ! #: cp/typeck2.c:372 ! msgid "cannot initialize arrays using this syntax" msgstr "" ! #: cp/typeck2.c:428 ! msgid "ANSI C++ forbids non-constant aggregate initializer expressions" msgstr "" ! #: cp/typeck2.c:503 ! msgid "initializing array with parameter list" msgstr "" ! #: cp/typeck2.c:559 ! msgid "initializer for scalar variable requires one element" msgstr "" ! #: cp/typeck2.c:657 ! msgid "aggregate has a partly bracketed initializer" msgstr "" ! #: cp/typeck2.c:687 cp/typeck2.c:788 ! msgid "non-trivial labeled initializers" msgstr "" ! #: cp/typeck2.c:704 ! msgid "non-empty initializer for array of empty elements" msgstr "" ! #: cp/typeck2.c:754 ! msgid "initializer list for object of class with virtual base classes" msgstr "" ! #: cp/typeck2.c:760 ! msgid "initializer list for object of class with base classes" msgstr "" ! #: cp/typeck2.c:766 ! msgid "initializer list for object using virtual functions" msgstr "" ! #: cp/typeck2.c:883 ! msgid "index value instead of field name in union initializer" msgstr "" ! #: cp/typeck2.c:939 ! msgid "excess elements in aggregate initializer" msgstr "" ! #: cp/typeck2.c:1037 ! msgid "circular pointer delegation detected" msgstr "" ! #: cp/typeck2.c:1064 ! msgid "result of `operator->()' yields non-pointer result" msgstr "" ! #: cp/typeck2.c:1066 ! msgid "base operand of `->' is not a pointer" msgstr "" ! #: cp/typeck2.c:1258 ! #, c-format ! msgid "ISO C++ forbids defining types within %s" msgstr "" ! #: cp/xref.c:833 ! #, c-format ! msgid "Can't create cross-reference file `%s'" msgstr "" ! #. The current line in each outer source file is now the ! #. same as the line of the #include. ! #: cpperror.c:55 ! #, c-format ! msgid "In file included from %s:%u" msgstr "" ! #. Translators note: this message is used in conjunction ! #. with "In file included from %s:%ld" and some other ! #. tricks. We want something like this: ! #. ! #. | In file included from sys/select.h:123, ! #. | from sys/types.h:234, ! #. | from userfile.c:31: ! #. | bits/select.h:45: ! #. ! #. with all the "from"s lined up. ! #. The trailing comma is at the beginning of this message, ! #. and the trailing colon is not translated. ! #: cpperror.c:71 #, c-format msgid "" ! ",\n" ! " from %s:%u" msgstr "" ! #: cpperror.c:188 ! msgid "internal error: " msgstr "" ! #: cpperror.c:195 ! msgid "warning: " msgstr "" ! #: cpperror.c:309 cpperror.c:480 cppfiles.c:661 gcc.c:6076 tradcpp.c:4722 ! #, c-format ! msgid "%s: %s" msgstr "" ! #: cppexp.c:209 ! msgid "traditional C rejects the `U' suffix" msgstr "" ! #: cppexp.c:212 ! msgid "too many 'l' suffixes in integer constant" msgstr "" ! #: cppexp.c:216 ! msgid "integer constant contains digits beyond the radix" msgstr "" ! #: cppexp.c:219 ! msgid "integer constant out of range" msgstr "" ! #: cppexp.c:225 ! msgid "integer constant is so large that it is unsigned" msgstr "" ! #: cppexp.c:234 ! #, c-format ! msgid "invalid suffix '%.*s' on integer constant" msgstr "" ! #: cppexp.c:343 ! msgid "missing ')' after \"defined\"" msgstr "" ! #: cppexp.c:350 ! msgid "operator \"defined\" requires an identifier" msgstr "" ! #: cppexp.c:358 ! #, c-format ! msgid "(\"%s\" is an alternative token for \"%s\" in C++)" msgstr "" ! #: cppexp.c:427 ! msgid "\"defined\" operator appears during macro expansion" msgstr "" ! #: cppexp.c:443 ! #, c-format ! msgid "ISO C++ does not permit \"%s\" in #if" msgstr "" ! #: cppexp.c:458 ! #, c-format ! msgid "\"%s\" is not defined" msgstr "" ! #: cppexp.c:550 ! msgid "octal escape sequence out of range" msgstr "" ! #: cppexp.c:583 ! msgid "hex escape sequence out of range" msgstr "" ! #: cppexp.c:598 ! msgid "integer overflow in preprocessor expression" msgstr "" ! #: cppexp.c:868 #, c-format ! msgid "impossible operator '%s'" msgstr "" ! #: cppexp.c:978 ! msgid "comma operator in operand of #if" msgstr "" ! #: cppfiles.c:383 #, c-format ! msgid "%s is too large" msgstr "" ! #: cppfiles.c:412 #, c-format ! msgid "%s is shorter than expected" msgstr "" ! #: cppfiles.c:421 #, c-format ! msgid "%s is a block device" msgstr "" ! #: cppfiles.c:541 ! #, c-format ! msgid "No include path in which to find %s" msgstr "" ! #: cppfiles.c:609 ! msgid "Multiple include guards may be useful for:\n" msgstr "" ! #: cppfiles.c:999 ! msgid "absolute file name in remap_filename" msgstr "" ! #: cppinit.c:223 ! #, c-format ! msgid "ignoring nonexistent directory \"%s\"\n" msgstr "" ! #: cppinit.c:229 ! #, c-format ! msgid "%s: Not a directory" msgstr "" ! #: cppinit.c:275 #, c-format ! msgid "ignoring duplicate directory \"%s\"\n" msgstr "" ! #: cppinit.c:889 ! msgid "-include and -imacros cannot be used with -fpreprocessed" msgstr "" ! #: cppinit.c:925 ! msgid "#include \"...\" search starts here:\n" msgstr "" ! #: cppinit.c:929 ! msgid "#include <...> search starts here:\n" msgstr "" ! #: cppinit.c:932 ! msgid "End of search list.\n" msgstr "" ! #: cppinit.c:1004 tradcpp.c:963 tradcpp.c:973 tradcpp.c:1064 ! msgid "I/O error on output" msgstr "" ! #: cppinit.c:1018 ! msgid "buffers still stacked in cpp_finish" msgstr "" ! #. Irix6 "cc -n32" and OSF4 cc have problems with char foo[] = ("string"); ! #. I.e. a const string initializer with parens around it. That is ! #. what N_("string") resolves to, so we make no_* be macros instead. ! #: cppinit.c:1050 #, c-format ! msgid "Argument missing after %s" msgstr "" ! #: cppinit.c:1051 ! #, c-format ! msgid "Assertion missing after %s" msgstr "" ! #: cppinit.c:1052 #, c-format ! msgid "Directory name missing after %s" msgstr "" ! #: cppinit.c:1053 #, c-format ! msgid "File name missing after %s" msgstr "" ! #: cppinit.c:1054 #, c-format ! msgid "Macro name missing after %s" msgstr "" ! #: cppinit.c:1055 #, c-format ! msgid "Path name missing after %s" msgstr "" ! #: cppinit.c:1056 #, c-format ! msgid "Number missing after %s" msgstr "" ! #: cppinit.c:1057 #, c-format ! msgid "Target missing after %s" msgstr "" ! #: cppinit.c:1242 #, c-format ! msgid "Too many filenames. Type %s --help for usage info" msgstr "" ! #: cppinit.c:1426 tradcpp.c:598 ! msgid "Output filename specified twice" msgstr "" ! #: cppinit.c:1546 ! msgid "-I- specified twice" msgstr "" ! #: cppinit.c:1694 ! #, c-format ! msgid "GNU CPP version %s (cpplib)" msgstr "" ! #: cppinit.c:1735 tradcpp.c:787 ! msgid "you must additionally specify either -M or -MM" msgstr "" ! #: cppinit.c:1795 ! #, c-format ! msgid "Usage: %s [switches] input output\n" msgstr "" ! #. To keep the lines from getting too long for some compilers, limit ! #. to about 500 characters (6 lines) per chunk. ! #: cppinit.c:1798 ! msgid "" ! "Switches:\n" ! " -include Include the contents of before other " ! "files\n" ! " -imacros Accept definition of macros in \n" ! " -iprefix Specify as a prefix for next two options\n" ! " -iwithprefix Add to the end of the system include path\n" ! " -iwithprefixbefore Add to the end of the main include path\n" ! " -isystem Add to the start of the system include " ! "path\n" msgstr "" ! #: cppinit.c:1807 ! msgid "" ! " -idirafter Add to the end of the system include path\n" ! " -I Add to the end of the main include path\n" ! " -I- Fine-grained include path control; see info " ! "docs\n" ! " -nostdinc Do not search system include directories\n" ! " (dirs specified with -isystem will still be " ! "used)\n" ! " -nostdinc++ Do not search system include directories for C+" ! "+\n" ! " -o Put output into \n" msgstr "" ! #: cppinit.c:1816 ! msgid "" ! " -pedantic Issue all warnings demanded by strict ISO C\n" ! " -pedantic-errors Issue -pedantic warnings as errors instead\n" ! " -trigraphs Support ISO C trigraphs\n" ! " -lang-c Assume that the input sources are in C\n" ! " -lang-c89 Assume that the input sources are in C89\n" msgstr "" ! #: cppinit.c:1823 ! msgid "" ! " -lang-c++ Assume that the input sources are in C++\n" ! " -lang-objc Assume that the input sources are in ObjectiveC\n" ! " -lang-objc++ Assume that the input sources are in ObjectiveC+" ! "+\n" ! " -lang-asm Assume that the input sources are in assembler\n" msgstr "" ! #: cppinit.c:1829 ! msgid "" ! " -std= Specify the conformance standard; one of:\n" ! " gnu89, gnu99, c89, c99, iso9899:1990,\n" ! " iso9899:199409, iso9899:1999\n" ! " -+ Allow parsing of C++ style features\n" ! " -w Inhibit warning messages\n" ! " -Wtrigraphs Warn if trigraphs are encountered\n" ! " -Wno-trigraphs Do not warn about trigraphs\n" ! " -Wcomment{s} Warn if one comment starts inside another\n" msgstr "" ! #: cppinit.c:1839 ! msgid "" ! " -Wno-comment{s} Do not warn about comments\n" ! " -Wtraditional Warn about features not present in traditional " ! "C\n" ! " -Wno-traditional Do not warn about traditional C\n" ! " -Wundef Warn if an undefined macro is used by #if\n" ! " -Wno-undef Do not warn about testing undefined macros\n" ! " -Wimport Warn about the use of the #import directive\n" msgstr "" ! #: cppinit.c:1847 ! msgid "" ! " -Wno-import Do not warn about the use of #import\n" ! " -Werror Treat all warnings as errors\n" ! " -Wno-error Do not treat warnings as errors\n" ! " -Wsystem-headers Do not suppress warnings from system headers\n" ! " -Wno-system-headers Suppress warnings from system headers\n" ! " -Wall Enable all preprocessor warnings\n" msgstr "" ! #: cppinit.c:1855 ! msgid "" ! " -M Generate make dependencies\n" ! " -MM As -M, but ignore system header files\n" ! " -MF Write dependency output to the given file\n" ! " -MG Treat missing header file as generated files\n" msgstr "" ! #: cppinit.c:1861 ! msgid "" ! " -MP\t\t\t Generate phony targets for all headers\n" ! " -MQ Add a MAKE-quoted target\n" ! " -MT Add an unquoted target\n" msgstr "" ! #: cppinit.c:1866 ! msgid "" ! " -D Define a with string '1' as its value\n" ! " -D= Define a with as its value\n" ! " -A () Assert the to \n" ! " -A- () Disable the to \n" ! " -U Undefine \n" ! " -v Display the version number\n" msgstr "" ! #: cppinit.c:1874 ! msgid "" ! " -H Print the name of header files as they are used\n" ! " -C Do not discard comments\n" ! " -dM Display a list of macro definitions active at " ! "end\n" ! " -dD Preserve macro definitions in output\n" ! " -dN As -dD except that only the names are preserved\n" ! " -dI Include #include directives in the output\n" msgstr "" ! #: cppinit.c:1882 ! msgid "" ! " -fpreprocessed Treat the input file as already preprocessed\n" ! " -ftabstop= Distance between tab stops for column reporting\n" ! " -P Do not generate #line directives\n" ! " -$ Do not allow '$' in identifiers\n" ! " -remap Remap file names when including files.\n" ! " --version Display version information\n" ! " -h or --help Display this information\n" msgstr "" ! #: cpplex.c:159 ! #, c-format ! msgid "trigraph ??%c converted to %c" msgstr "" ! #: cpplex.c:167 ! #, c-format ! msgid "trigraph ??%c ignored" msgstr "" ! #: cpplex.c:251 ! msgid "backslash and newline separated by space" msgstr "" ! #: cpplex.c:255 ! msgid "backslash-newline at end of file" msgstr "" ! #: cpplex.c:330 ! msgid "\"/*\" within comment" msgstr "" ! #: cpplex.c:416 ! msgid "null character(s) ignored" msgstr "" ! #: cpplex.c:423 ! #, c-format ! msgid "%s in preprocessing directive" msgstr "" ! #: cpplex.c:507 ! msgid "'$' character(s) in identifier" msgstr "" ! #: cpplex.c:521 #, c-format ! msgid "attempt to use poisoned \"%s\"" msgstr "" ! #: cpplex.c:527 ! msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro" msgstr "" ! #: cpplex.c:597 ! #, c-format ! msgid "missing terminating %c character" msgstr "" ! #: cpplex.c:604 ! msgid "possible start of unterminated string literal" msgstr "" ! #: cpplex.c:697 ! msgid "multi-line string literals are deprecated" msgstr "" ! #: cpplex.c:708 ! msgid "null character(s) preserved in literal" msgstr "" ! #: cpplex.c:881 ! msgid "no newline at end of file" msgstr "" ! #: cpplex.c:1002 tradcpp.c:1447 ! msgid "unterminated comment" msgstr "" ! #: cpplex.c:1016 ! msgid "C++ style comments are not allowed in ISO C89" msgstr "" ! #: cpplex.c:1018 ! msgid "(this will be reported only once per input file)" msgstr "" ! #: cpplex.c:1026 ! msgid "multi-line comment" msgstr "" ! #: cpplex.c:1188 ! msgid "directives may not be used inside a macro argument" msgstr "" ! #: cpplex.c:1343 ! #, c-format ! msgid "Unspellable token %s" msgstr "" ! #: cpplib.c:214 ! #, c-format ! msgid "extra tokens at end of #%s directive" msgstr "" ! #: cpplib.c:303 ! msgid "# followed by integer" msgstr "" ! #: cpplib.c:352 ! msgid "suggest not using #elif in traditional C" msgstr "" ! #: cpplib.c:355 ! #, c-format ! msgid "traditional C ignores #%s with the # indented" msgstr "" ! #: cpplib.c:359 ! #, c-format ! msgid "suggest hiding #%s from traditional C with an indented #" msgstr "" ! #: cpplib.c:369 #, c-format ! msgid "#%s is a GCC extension" msgstr "" ! #: cpplib.c:393 ! #, c-format ! msgid "invalid preprocessing directive #%s" msgstr "" ! #: cpplib.c:454 ! #, c-format ! msgid "no macro name given in #%s directive" msgstr "" ! #: cpplib.c:458 ! #, c-format ! msgid "\"%s\" cannot be used as a macro name as it is an operator in C++" msgstr "" ! #: cpplib.c:461 ! msgid "macro names must be identifiers" msgstr "" ! #: cpplib.c:470 ! #, c-format ! msgid "\"%s\" cannot be used as a macro name" msgstr "" ! #: cpplib.c:508 ! #, c-format ! msgid "undefining \"%s\"" msgstr "" ! #: cpplib.c:552 ! msgid "missing terminating > character" msgstr "" ! #: cpplib.c:590 ! #, c-format ! msgid "#%s expects \"FILENAME\" or " msgstr "" ! #: cpplib.c:599 #, c-format ! msgid "empty file name in #%s" msgstr "" ! #: cpplib.c:627 ! msgid "#include nested too deeply" msgstr "" ! #: cpplib.c:629 ! msgid "attempt to push file buffer with contexts stacked" msgstr "" ! #: cpplib.c:636 ! msgid "#include_next in primary source file" msgstr "" ! #: cpplib.c:660 ! msgid "#import is obsolete, use an #ifndef wrapper in the header file" msgstr "" ! #: cpplib.c:696 ! #, c-format ! msgid "invalid flag \"%s\" in line directive" msgstr "" ! #: cpplib.c:748 ! #, c-format ! msgid "\"%s\" after #line is not a positive integer" msgstr "" ! #: cpplib.c:754 ! msgid "line number out of range" msgstr "" ! #: cpplib.c:798 ! #, c-format ! msgid "file \"%s\" left but not entered" msgstr "" ! #: cpplib.c:806 ! #, c-format ! msgid "expected to return to file \"%s\"" msgstr "" ! #: cpplib.c:809 ! #, c-format ! msgid "expected to return to line number %u" msgstr "" ! #: cpplib.c:812 ! #, c-format ! msgid "header flags for \"%s\" have changed" msgstr "" ! #: cpplib.c:823 ! #, c-format ! msgid "\"%s\" is not a valid filename" msgstr "" ! #: cpplib.c:920 f/lex.c:1240 ! msgid "invalid #ident" msgstr "" ! #: cpplib.c:971 ! #, c-format ! msgid "unknown #pragma namespace %s" msgstr "" ! #: cpplib.c:1083 ! msgid "#pragma once is obsolete" msgstr "" ! #: cpplib.c:1086 ! msgid "#pragma once in main file" msgstr "" ! #: cpplib.c:1110 ! msgid "invalid #pragma GCC poison directive" msgstr "" ! #: cpplib.c:1119 ! #, c-format ! msgid "poisoning existing macro \"%s\"" msgstr "" ! #: cpplib.c:1144 ! msgid "#pragma system_header ignored outside include file" msgstr "" ! #: cpplib.c:1166 ! #, c-format ! msgid "cannot find source %s" msgstr "" ! #: cpplib.c:1170 ! #, c-format ! msgid "current file is older than %s" msgstr "" ! #: cpplib.c:1233 ! msgid "_Pragma takes a parenthesized string literal" msgstr "" ! #: cpplib.c:1326 ! msgid "#else without #if" msgstr "" ! #: cpplib.c:1331 tradcpp.c:3850 ! msgid "#else after #else" msgstr "" ! #: cpplib.c:1333 cpplib.c:1367 ! msgid "the conditional began here" msgstr "" ! #: cpplib.c:1360 ! msgid "#elif without #if" msgstr "" ! #: cpplib.c:1365 tradcpp.c:3545 ! msgid "#elif after #else" msgstr "" ! #: cpplib.c:1397 ! msgid "#endif without #if" msgstr "" ! #: cpplib.c:1482 tradcpp.c:3242 ! msgid "missing '(' after predicate" msgstr "" ! #: cpplib.c:1503 tradcpp.c:3256 ! msgid "missing ')' to complete answer" msgstr "" ! #: cpplib.c:1511 tradcpp.c:3262 ! msgid "predicate's answer is empty" msgstr "" ! #: cpplib.c:1542 tradcpp.c:3310 ! msgid "assertion without predicate" msgstr "" ! #: cpplib.c:1544 tradcpp.c:3312 ! msgid "predicate must be an identifier" msgstr "" ! #: cpplib.c:1625 tradcpp.c:3409 #, c-format ! msgid "\"%s\" re-asserted" msgstr "" ! #: cpplib.c:1821 ! msgid "" msgstr "" ! #: cpplib.c:1823 ! msgid "" msgstr "" ! #: cpplib.c:1846 ! msgid "" msgstr "" ! #: cpplib.c:1879 #, c-format ! msgid "unterminated #%s" msgstr "" ! #: cpplib.c:1907 ! #, c-format ! msgid "file \"%s\" entered but not left" msgstr "" ! #: cppmacro.c:213 ! #, c-format ! msgid "invalid builtin macro \"%s\"" msgstr "" ! #: cppmacro.c:333 ! msgid "invalid string literal, ignoring final '\\'" msgstr "" ! #: cppmacro.c:367 ! #, c-format ! msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token" msgstr "" ! #: cppmacro.c:539 ! #, c-format ! msgid "unterminated argument list invoking macro \"%s\"" msgstr "" ! #: cppmacro.c:556 ! msgid "ISO C99 requires rest arguments to be used" msgstr "" ! #: cppmacro.c:561 ! #, c-format ! msgid "macro \"%s\" requires %u arguments, but only %u given" msgstr "" ! #: cppmacro.c:572 ! #, c-format ! msgid "macro \"%s\" passed %u arguments, but takes just %u" msgstr "" ! #: cppmacro.c:612 ! #, c-format ! msgid "function-like macro \"%s\" must be used with arguments in traditional C" msgstr "" ! #: cppmacro.c:1236 ! #, c-format ! msgid "duplicate macro parameter \"%s\"" msgstr "" ! #: cppmacro.c:1271 ! #, c-format ! msgid "\"%s\" may not appear in macro parameter list" msgstr "" ! #: cppmacro.c:1278 ! msgid "macro parameters must be comma-separated" msgstr "" ! #: cppmacro.c:1295 ! msgid "parameter name missing" msgstr "" ! #: cppmacro.c:1309 ! msgid "anonymous variadic macros were introduced in C99" msgstr "" ! #: cppmacro.c:1312 ! msgid "ISO C does not permit named variadic macros" msgstr "" ! #: cppmacro.c:1321 ! msgid "missing ')' in macro parameter list" msgstr "" ! #: cppmacro.c:1400 ! msgid "ISO C requires whitespace after the macro name" msgstr "" ! #: cppmacro.c:1423 ! msgid "'#' is not followed by a macro parameter" msgstr "" ! #: cppmacro.c:1443 ! msgid "'##' cannot appear at either end of a macro expansion" msgstr "" ! #: cppmacro.c:1478 ! #, c-format ! msgid "\"%s\" redefined" msgstr "" ! #: cppmacro.c:1484 ! msgid "this is the location of the previous definition" msgstr "" ! #: cppmacro.c:1542 ! #, c-format ! msgid "macro argument \"%s\" would be stringified with -traditional." msgstr "" ! #: cppmacro.c:1566 ! #, c-format ! msgid "invalid hash type %d in dump_definition" msgstr "" ! #: cppmain.c:128 ! #, c-format ! msgid "Invalid option %s" msgstr "" ! #: cppspec.c:128 ! #, c-format ! msgid "\"%s\" is not a valid option to the preprocessor" msgstr "" ! #: cppspec.c:152 ! msgid "too many input files" msgstr "" ! #: cse.c:7140 ! #, c-format ! msgid ";; Processing block from %d to %d, %d sets.\n" msgstr "" ! #: diagnostic.c:844 ! #, c-format ! msgid "%s:%d: warning: " msgstr "" ! #: diagnostic.c:851 ! #, c-format ! msgid "%s: warning: " msgstr "" ! #: diagnostic.c:937 ! msgid "((anonymous))" msgstr "" ! #: diagnostic.c:1064 ! #, c-format ! msgid "%s: warnings being treated as errors\n" msgstr "" ! #: diagnostic.c:1116 ! #, c-format ! msgid "%s: %s: " msgstr "" ! #: diagnostic.c:1224 ! msgid "sorry, not implemented: " msgstr "" ! #: diagnostic.c:1243 ! #, c-format ! msgid "%s " msgstr "" ! #: diagnostic.c:1245 ! #, c-format ! msgid " %s" msgstr "" ! #: diagnostic.c:1268 ! msgid "At top level:" msgstr "" ! #: diagnostic.c:1273 ! #, c-format ! msgid "In method `%s':" msgstr "" ! #: diagnostic.c:1277 ! #, c-format ! msgid "In function `%s':" msgstr "" ! #: diagnostic.c:1412 ! msgid "compilation terminated.\n" msgstr "" ! #: diagnostic.c:1447 ! #, c-format ! msgid "%s:%d: confused by earlier errors, bailing out\n" msgstr "" ! #: diagnostic.c:1461 diagnostic.c:1700 ! #, c-format ! msgid "" ! "Please submit a full bug report,\n" ! "with preprocessed source if appropriate.\n" ! "See %s for instructions.\n" msgstr "" ! #: diagnostic.c:1493 ! msgid "Unrecognizable insn:" msgstr "" ! #: diagnostic.c:1495 ! msgid "Insn does not satisfy its constraints:" msgstr "" ! #: diagnostic.c:1698 ! msgid "Internal compiler error: Error reporting routines re-entered.\n" msgstr "" ! #: diagnostic.c:1760 ! #, c-format ! msgid "Internal compiler error in %s, at %s:%d" msgstr "" ! #: diagnostic.c:1805 ! #, c-format ! msgid "In file included from %s:%d" msgstr "" ! #: diagnostic.c:1808 ! #, c-format ! msgid "" ! ",\n" ! " from %s:%d" msgstr "" ! #: diagnostic.c:1809 ! msgid ":\n" msgstr "" ! #: dwarf2out.c:2977 ! #, c-format ! msgid "DW_LOC_OP %s not implememnted\n" msgstr "" ! #: dwarf2out.c:7071 dwarfout.c:2128 ! #, c-format ! msgid "internal regno botch: regno = %d\n" msgstr "" ! #: dwarfout.c:6262 ! msgid "can't get current directory" msgstr "" ! #: emit-rtl.c:1006 ! msgid "Can't access real part of complex value in hard register" msgstr "" ! #: emit-rtl.c:1030 ! msgid "can't access imaginary part of complex value in hard register" msgstr "" ! #: emit-rtl.c:2560 ! msgid "ICE: emit_insn used where emit_jump_insn needed:\n" msgstr "" ! #: errors.c:168 ! #, c-format ! msgid "abort in %s, at %s:%d" msgstr "" ! #: except.c:357 ! msgid "exception handling disabled, use -fexceptions to enable" msgstr "" ! #: except.c:2931 ! msgid "argument of `__builtin_eh_return_regno' must be constant" msgstr "" ! #: except.c:3029 except.c:3053 ! msgid "__builtin_eh_return not supported on this target" msgstr "" ! #: explow.c:1458 ! msgid "stack limits not supported on this target" msgstr "" ! #: expr.c:2842 ! msgid "function using short complex types cannot be inline" msgstr "" ! #: expr.c:5860 expr.c:5869 expr.c:5878 expr.c:5883 expr.c:6041 expr.c:6056 ! msgid "unsupported wide integer operation" msgstr "" ! #: expr.c:6103 ! #, c-format ! msgid "prior parameter's size depends on `%s'" msgstr "" ! #: expr.c:6504 ! msgid "returned value in block_exit_expr" msgstr "" ! #: f/com.c:11860 ! msgid "no INTEGER type can hold a pointer on this configuration" msgstr "" ! #: f/com.c:12087 ! #, c-format ! msgid "configuration: REAL, INTEGER, and LOGICAL are %d bits wide," msgstr "" ! #: f/com.c:12089 ! #, c-format ! msgid "and pointers are %d bits wide, but g77 doesn't yet work" msgstr "" ! #: f/com.c:12091 ! msgid "properly unless they all are 32 bits wide." msgstr "" ! #: f/com.c:12092 ! msgid "Please keep this in mind before you report bugs. g77 should" msgstr "" ! #: f/com.c:12093 ! msgid "support non-32-bit machines better as of version 0.6." msgstr "" ! #. I/O will probably crash. ! #: f/com.c:12101 #, c-format ! msgid "configuration: char * holds %d bits, but ftnlen only %d" msgstr "" ! #. ASSIGN 10 TO I will crash. ! #: f/com.c:12110 #, c-format ! msgid "" ! "configuration: char * holds %d bits, but INTEGER only %d --\n" ! " ASSIGN statement might fail" msgstr "" ! #: f/com.c:16088 ! msgid "Directory name must immediately follow -I" msgstr "" ! #: f/g77spec.c:250 #, c-format ! msgid "overflowed output arg list for `%s'" msgstr "" ! #: f/g77spec.c:436 ! msgid "--driver no longer supported" msgstr "" ! #: f/g77spec.c:450 #, c-format ! msgid "argument to `%s' missing" msgstr "" ! #: f/g77spec.c:454 ! msgid "No input files; unwilling to write output files" msgstr "" ! #: f/lang-options.h:33 ! msgid "Print g77-specific compiler version info, run internal tests" msgstr "" ! #: f/lang-options.h:38 ! msgid "Program is written in typical FORTRAN 66 dialect" msgstr "" ! #: f/lang-options.h:41 ! msgid "Program is written in typical Unix f77 dialect" msgstr "" ! #: f/lang-options.h:43 ! msgid "Program does not use Unix-f77 dialectal features" msgstr "" ! #: f/lang-options.h:45 ! msgid "Program is written in Fortran-90-ish dialect" msgstr "" ! #: f/lang-options.h:49 msgid "" ! "Treat local vars and COMMON blocks as if they were named in SAVE statements" msgstr "" ! #: f/lang-options.h:51 ! msgid "Allow $ in symbol names" msgstr "" ! #: f/lang-options.h:55 ! msgid "f2c-compatible code need not be generated" msgstr "" ! #: f/lang-options.h:58 ! msgid "Unsupported; do not generate libf2c-calling code" msgstr "" ! #: f/lang-options.h:60 ! msgid "Unsupported; affects code-generation of arrays" msgstr "" ! #: f/lang-options.h:63 ! msgid "Program is written in Fortran-90-ish free form" msgstr "" ! #: f/lang-options.h:68 ! msgid "Warn about use of (only a few for now) Fortran extensions" msgstr "" ! #: f/lang-options.h:71 ! msgid "Program is written in VXT (Digital-like) FORTRAN" msgstr "" ! #: f/lang-options.h:74 ! msgid "Disallow all ugly features" msgstr "" ! #: f/lang-options.h:77 ! msgid "Hollerith and typeless constants not passed as arguments" msgstr "" ! #: f/lang-options.h:79 ! msgid "Allow ordinary copying of ASSIGN'ed vars" msgstr "" ! #: f/lang-options.h:82 ! msgid "Dummy array dimensioned to (1) is assumed-size" msgstr "" ! #: f/lang-options.h:85 ! msgid "Trailing comma in procedure call denotes null argument" msgstr "" ! #: f/lang-options.h:88 ! msgid "Allow REAL(Z) and AIMAG(Z) given DOUBLE COMPLEX Z" msgstr "" ! #: f/lang-options.h:92 ! msgid "Initialization via DATA and PARAMETER is type-compatible" msgstr "" ! #: f/lang-options.h:94 ! msgid "Allow INTEGER and LOGICAL interchangeability" msgstr "" ! #: f/lang-options.h:97 ! msgid "Print internal debugging-related info" msgstr "" ! #: f/lang-options.h:100 ! msgid "Initialize local vars and arrays to zero" msgstr "" ! #: f/lang-options.h:104 ! msgid "Backslashes in character/hollerith constants not special (C-style)" msgstr "" ! #: f/lang-options.h:106 ! msgid "Have front end emulate COMPLEX arithmetic to avoid bugs" msgstr "" ! #: f/lang-options.h:110 ! msgid "Disable the appending of underscores to externals" msgstr "" ! #: f/lang-options.h:113 ! msgid "Never append a second underscore to externals" msgstr "" ! #: f/lang-options.h:115 ! msgid "Intrinsics spelled as e.g. SqRt" msgstr "" ! #: f/lang-options.h:117 ! msgid "Intrinsics in uppercase" msgstr "" ! #: f/lang-options.h:120 ! msgid "Intrinsics letters in arbitrary cases" msgstr "" ! #: f/lang-options.h:122 ! msgid "Language keywords spelled as e.g. IOStat" msgstr "" ! #: f/lang-options.h:124 ! msgid "Language keywords in uppercase" msgstr "" ! #: f/lang-options.h:127 ! msgid "Language keyword letters in arbitrary cases" msgstr "" ! #: f/lang-options.h:129 ! msgid "Internally convert most source to uppercase" msgstr "" ! #: f/lang-options.h:132 ! msgid "Internally preserve source case" msgstr "" ! #: f/lang-options.h:134 ! msgid "Symbol names spelled in mixed case" msgstr "" ! #: f/lang-options.h:136 ! msgid "Symbol names in uppercase" msgstr "" ! #: f/lang-options.h:138 ! msgid "Symbol names in lowercase" msgstr "" ! #: f/lang-options.h:141 ! msgid "Program written in uppercase" msgstr "" ! #: f/lang-options.h:143 ! msgid "Program written in lowercase" msgstr "" ! #: f/lang-options.h:145 ! msgid "Program written in strict mixed-case" msgstr "" ! #: f/lang-options.h:147 ! msgid "Compile as if program written in uppercase" msgstr "" ! #: f/lang-options.h:149 ! msgid "Compile as if program written in lowercase" msgstr "" ! #: f/lang-options.h:151 ! msgid "Preserve all spelling (case) used in program" msgstr "" ! #: f/lang-options.h:153 ! msgid "Delete libU77 intrinsics with bad interfaces" msgstr "" ! #: f/lang-options.h:155 ! msgid "Disable libU77 intrinsics with bad interfaces" msgstr "" ! #: f/lang-options.h:158 ! msgid "Hide libU77 intrinsics with bad interfaces" msgstr "" ! #: f/lang-options.h:160 ! msgid "Delete non-FORTRAN-77 intrinsics f2c supports" msgstr "" ! #: f/lang-options.h:162 ! msgid "Disable non-FORTRAN-77 intrinsics f2c supports" msgstr "" ! #: f/lang-options.h:165 ! msgid "Hide non-FORTRAN-77 intrinsics f2c supports" msgstr "" ! #: f/lang-options.h:167 ! msgid "Delete non-FORTRAN-77 intrinsics F90 supports" msgstr "" ! #: f/lang-options.h:169 ! msgid "Disable non-FORTRAN-77 intrinsics F90 supports" msgstr "" ! #: f/lang-options.h:172 ! msgid "Hide non-FORTRAN-77 intrinsics F90 supports" msgstr "" ! #: f/lang-options.h:174 ! msgid "Delete non-FORTRAN-77 intrinsics g77 supports" msgstr "" ! #: f/lang-options.h:176 ! msgid "Disable non-FORTRAN 77 intrinsics F90 supports" msgstr "" ! #: f/lang-options.h:179 ! msgid "Hide non-FORTRAN 77 intrinsics F90 supports" msgstr "" ! #: f/lang-options.h:181 ! msgid "Delete MIL-STD 1753 intrinsics" msgstr "" ! #: f/lang-options.h:183 ! msgid "Disable MIL-STD 1753 intrinsics" msgstr "" ! #: f/lang-options.h:186 ! msgid "Hide MIL-STD 1753 intrinsics" msgstr "" ! #: f/lang-options.h:188 ! msgid "Delete libU77 intrinsics" msgstr "" ! #: f/lang-options.h:190 ! msgid "Disable libU77 intrinsics" msgstr "" ! #: f/lang-options.h:193 ! msgid "Hide libU77 intrinsics" msgstr "" ! #: f/lang-options.h:195 ! msgid "Delete non-FORTRAN-77 intrinsics VXT FORTRAN supports" msgstr "" ! #: f/lang-options.h:197 ! msgid "Disable non-FORTRAN-77 intrinsics VXT FORTRAN supports" msgstr "" ! #: f/lang-options.h:200 ! msgid "Hide non-FORTRAN-77 intrinsics VXT FORTRAN supports" msgstr "" ! #: f/lang-options.h:202 ! msgid "Treat initial values of 0 like non-zero values" msgstr "" ! #: f/lang-options.h:205 ! msgid "" ! "Emit special debugging information for COMMON and EQUIVALENCE (disabled)" msgstr "" ! #: f/lang-options.h:208 ! msgid "Take at least one trip through each iterative DO loop" msgstr "" ! #: f/lang-options.h:212 ! msgid "Print names of program units as they are compiled" msgstr "" ! #: f/lang-options.h:215 ! msgid "Disable fatal diagnostics about inter-procedural problems" msgstr "" ! #: f/lang-options.h:217 ! msgid "Make prefix-radix non-decimal constants be typeless" msgstr "" ! #: f/lang-options.h:220 ! msgid "Generate code to check subscript and substring bounds" msgstr "" ! #: f/lang-options.h:223 ! msgid "Fortran-specific form of -fbounds-check" msgstr "" ! #: f/lang-options.h:227 ! msgid "Disable warnings about inter-procedural problems" msgstr "" ! #: f/lang-options.h:231 ! msgid "Warn about constructs with surprising meanings" msgstr "" ! #: f/lang-options.h:236 ! msgid "Add a directory for INCLUDE searching" msgstr "" ! #: f/lang-options.h:238 ! msgid "Set the maximum line length" msgstr "" ! #: f/lex.c:692 ! msgid "the meaning of `\\a' varies with -traditional" msgstr "" ! #: f/lex.c:708 #, c-format ! msgid "non-ANSI-standard escape sequence, `\\%c'" msgstr "" ! #: f/lex.c:721 #, c-format ! msgid "non-ANSI escape sequence `\\%c'" msgstr "" ! #: f/lex.c:725 #, c-format ! msgid "unknown escape sequence `\\%c'" msgstr "" ! #: f/lex.c:727 #, c-format ! msgid "unknown escape sequence: `\\' followed by char code 0x%x" msgstr "" ! #: f/lex.c:806 ! msgid "Badly formed directive -- no closing quote" msgstr "" ! #: f/lex.c:870 ! msgid "#-lines for entering and leaving files don't match" msgstr "" ! #: f/lex.c:1039 ! msgid "Bad directive -- missing close-quote" msgstr "" ! #: f/lex.c:1156 #, c-format ! msgid "ignoring pragma: %s" msgstr "" ! #: f/lex.c:1257 ! msgid "undefined or invalid # directive" msgstr "" ! #: f/lex.c:1313 ! msgid "invalid #line" msgstr "" ! #: f/lex.c:1369 f/lex.c:1413 ! msgid "Use `#line ...' instead of `# ...' in first line" msgstr "" ! #: f/lex.c:1423 ! msgid "invalid #-line" msgstr "" ! #: f/ste.c:1436 f/ste.c:1791 ! msgid "ASSIGNed FORMAT specifier is too small" msgstr "" ! #: f/ste.c:3259 ! msgid "ASSIGN to variable that is too small" msgstr "" ! #: f/ste.c:3297 ! msgid "ASSIGNed GOTO target variable is too small" msgstr "" ! #: f/top.c:240 ! #, c-format ! msgid "%s no longer supported -- try -fvxt" msgstr "" ! #: f/top.c:242 ! #, c-format ! msgid "%s no longer supported -- try -fno-vxt -ff90" msgstr "" ! #: f/top.c:310 f/top.c:312 ! #, c-format ! msgid "%s disabled, use normal debugging flags" msgstr "" ! #: final.c:3349 #, c-format ! msgid "invalid `asm': %s" msgstr "" ! #: final.c:3352 ! #, c-format ! msgid "output_operand: %s" msgstr "" ! #: final.c:3492 ! #, c-format ! msgid "operand number missing after %-letter" msgstr "" ! #: final.c:3494 final.c:3529 ! msgid "operand number out of range" msgstr "" ! #: final.c:3543 ! #, c-format ! msgid "invalid %%-code" msgstr "" ! #: final.c:3570 ! msgid "`%l' operand isn't a label" msgstr "" ! #: flow.c:541 ! msgid "function might be possible candidate for attribute `noreturn'" msgstr "" ! #: flow.c:546 ! msgid "`noreturn' function does return" msgstr "" ! #: flow.c:567 ! msgid "control reaches end of non-void function" msgstr "" ! #: flow.c:6646 ! #, c-format ! msgid "End insn %d for block %d not found in the insn stream." msgstr "" ! #: flow.c:6660 ! #, c-format ! msgid "Insn %d is in multiple basic blocks (%d and %d)" msgstr "" ! #: flow.c:6671 ! #, c-format ! msgid "Head insn %d for block %d not found in the insn stream." msgstr "" ! #: flow.c:6708 flow.c:6735 ! #, c-format ! msgid "Basic block %i edge lists are corrupted" msgstr "" ! #: flow.c:6720 ! #, c-format ! msgid "Basic block %d pred edge is corrupted" msgstr "" ! #: flow.c:6750 ! #, c-format ! msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d" msgstr "" ! #: flow.c:6758 ! #, c-format ! msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d\n" msgstr "" ! #: flow.c:6774 #, c-format ! msgid "NOTE_INSN_BASIC_BLOCK %d in the middle of basic block %d" msgstr "" ! #: flow.c:6786 ! #, c-format ! msgid "In basic block %d:" msgstr "" ! #: flow.c:6848 ! #, c-format ! msgid "number of bb notes in insn chain (%d) != n_basic_blocks (%d)" msgstr "" ! #: fold-const.c:3013 fold-const.c:3026 ! #, c-format ! msgid "comparison is always %d due to width of bitfield" msgstr "" ! #: fold-const.c:4069 fold-const.c:4086 ! #, c-format ! msgid "comparison is always %d" msgstr "" ! #: fold-const.c:4217 ! msgid "`or' of unmatched not-equal tests is always 1" msgstr "" ! #: fold-const.c:4222 ! msgid "`and' of mutually exclusive equal-tests is always 0" msgstr "" ! #: function.c:5390 ! #, c-format ! msgid "`%s' might be used uninitialized in this function" msgstr "" ! #: function.c:5397 ! #, c-format ! msgid "variable `%s' might be clobbered by `longjmp' or `vfork'" msgstr "" ! #: function.c:5416 ! #, c-format ! msgid "argument `%s' might be clobbered by `longjmp' or `vfork'" msgstr "" ! #: function.c:6216 ! msgid "function returns an aggregate" msgstr "" ! #: function.c:6745 ! #, c-format ! msgid "unused parameter `%s'" msgstr "" ! #: gcc.c:954 ! #, c-format ! msgid "Ambiguous abbreviation %s" msgstr "" ! #: gcc.c:981 #, c-format ! msgid "Incomplete `%s' option" msgstr "" ! #: gcc.c:992 #, c-format ! msgid "Missing argument to `%s' option" msgstr "" ! #: gcc.c:1005 #, c-format ! msgid "Extraneous argument to `%s' option" msgstr "" ! #: gcc.c:1308 ! msgid "Using builtin specs.\n" msgstr "" ! #: gcc.c:1474 ! #, c-format ! msgid "" ! "Setting spec %s to '%s'\n" ! "\n" msgstr "" ! #: gcc.c:1572 ! #, c-format ! msgid "Reading specs from %s\n" msgstr "" ! #: gcc.c:1670 gcc.c:1689 ! #, c-format ! msgid "specs %%include syntax malformed after %ld characters" msgstr "" ! #: gcc.c:1697 ! #, c-format ! msgid "Could not find specs file %s\n" msgstr "" ! #: gcc.c:1713 gcc.c:1721 gcc.c:1730 gcc.c:1739 ! #, c-format ! msgid "specs %%rename syntax malformed after %ld characters" msgstr "" ! #: gcc.c:1748 ! #, c-format ! msgid "specs %s spec was not found to be renamed" msgstr "" ! #: gcc.c:1755 ! #, c-format ! msgid "rename spec %s to %s\n" msgstr "" ! #: gcc.c:1757 ! #, c-format ! msgid "" ! "spec is '%s'\n" ! "\n" msgstr "" ! #: gcc.c:1770 ! #, c-format ! msgid "specs unknown %% command after %ld characters" msgstr "" ! #: gcc.c:1781 gcc.c:1794 ! #, c-format ! msgid "specs file malformed after %ld characters" msgstr "" ! #: gcc.c:1848 ! msgid "spec file has no spec for linking" msgstr "" ! #: gcc.c:2609 ! msgid "-pipe not supported" msgstr "" ! #: gcc.c:2645 ! msgid "" ! "\n" ! "Go ahead? (y or n) " msgstr "" ! #: gcc.c:2744 ! #, c-format ! msgid "" ! "Internal error: %s (program %s)\n" ! "Please submit a full bug report.\n" ! "See %s for instructions." msgstr "" ! #: gcc.c:2762 #, c-format ! msgid "# %s %.2f %.2f\n" msgstr "" ! #: gcc.c:2890 ! #, c-format ! msgid "Usage: %s [options] file...\n" msgstr "" ! #: gcc.c:2891 ! msgid "Options:\n" msgstr "" ! #: gcc.c:2893 ! msgid " -pass-exit-codes Exit with highest error code from a phase\n" msgstr "" ! #: gcc.c:2894 ! msgid " --help Display this information\n" msgstr "" ! #: gcc.c:2895 ! msgid "" ! " --target-help Display target specific command line options\n" msgstr "" ! #: gcc.c:2897 ! msgid " (Use '-v --help' to display command line options of sub-processes)\n" msgstr "" ! #: gcc.c:2898 ! msgid " -dumpspecs Display all of the built in spec strings\n" msgstr "" ! #: gcc.c:2899 ! msgid " -dumpversion Display the version of the compiler\n" msgstr "" ! #: gcc.c:2900 ! msgid " -dumpmachine Display the compiler's target processor\n" msgstr "" ! #: gcc.c:2901 ! msgid "" ! " -print-search-dirs Display the directories in the compiler's search " ! "path\n" msgstr "" ! #: gcc.c:2902 ! msgid "" ! " -print-libgcc-file-name Display the name of the compiler's companion " ! "library\n" msgstr "" ! #: gcc.c:2903 ! msgid " -print-file-name= Display the full path to library \n" msgstr "" ! #: gcc.c:2904 ! msgid "" ! " -print-prog-name= Display the full path to compiler component " ! "\n" msgstr "" ! #: gcc.c:2905 ! msgid "" ! " -print-multi-directory Display the root directory for versions of " ! "libgcc\n" msgstr "" ! #: gcc.c:2906 ! msgid "" ! " -print-multi-lib Display the mapping between command line options " ! "and\n" ! " multiple library search directories\n" msgstr "" ! #: gcc.c:2909 ! msgid "" ! " -Wa, Pass comma-separated on to the " ! "assembler\n" msgstr "" ! #: gcc.c:2910 ! msgid "" ! " -Wp, Pass comma-separated on to the " ! "preprocessor\n" msgstr "" ! #: gcc.c:2911 ! msgid "" ! " -Wl, Pass comma-separated on to the linker\n" msgstr "" ! #: gcc.c:2912 ! msgid " -Xlinker Pass on to the linker\n" msgstr "" ! #: gcc.c:2913 ! msgid " -save-temps Do not delete intermediate files\n" msgstr "" ! #: gcc.c:2914 ! msgid " -pipe Use pipes rather than intermediate files\n" msgstr "" ! #: gcc.c:2915 ! msgid " -time Time the execution of each subprocess\n" msgstr "" ! #: gcc.c:2916 ! msgid "" ! " -specs= Override builtin specs with the contents of " ! "\n" msgstr "" ! #: gcc.c:2917 ! msgid "" ! " -std= Assume that the input sources are for \n" msgstr "" ! #: gcc.c:2918 ! msgid "" ! " -B Add to the compiler's search paths\n" msgstr "" ! #: gcc.c:2919 ! msgid " -b Run gcc for target , if installed\n" msgstr "" ! #: gcc.c:2920 ! msgid "" ! " -V Run gcc version number , if installed\n" msgstr "" ! #: gcc.c:2921 ! msgid "" ! " -v Display the programs invoked by the compiler\n" msgstr "" ! #: gcc.c:2922 ! msgid "" ! " -E Preprocess only; do not compile, assemble or " ! "link\n" msgstr "" ! #: gcc.c:2923 ! msgid " -S Compile only; do not assemble or link\n" msgstr "" ! #: gcc.c:2924 ! msgid " -c Compile and assemble, but do not link\n" msgstr "" ! #: gcc.c:2925 ! msgid " -o Place the output into \n" msgstr "" ! #: gcc.c:2926 ! msgid "" ! " -x Specify the language of the following input " ! "files\n" ! " Permissable languages include: c c++ assembler " ! "none\n" ! " 'none' means revert to the default behaviour of\n" ! " guessing the language based on the file's " ! "extension\n" msgstr "" ! #: gcc.c:2933 ! #, c-format ! msgid "" ! "\n" ! "Options starting with -g, -f, -m, -O, -W, or --param are automatically\n" ! " passed on to the various sub-processes invoked by %s. In order to pass\n" ! " other options on to these processes the -W options must be used.\n" msgstr "" ! #: gcc.c:3300 ! msgid "argument to `-Xlinker' is missing" msgstr "" ! #: gcc.c:3317 ! msgid "argument to `-specs' is missing" msgstr "" ! #: gcc.c:3332 ! msgid "argument to `-specs=' is missing" msgstr "" ! #: gcc.c:3354 ! msgid "argument to `-b' is missing" msgstr "" ! #: gcc.c:3367 ! msgid "argument to `-B' is missing" msgstr "" ! #: gcc.c:3420 ! msgid "argument to `-V' is missing" msgstr "" ! #: gcc.c:3441 gcc.c:3448 gcc.c:3455 ! msgid "invalid version number format" msgstr "" ! #: gcc.c:3566 ! msgid "cannot specify -o with -c or -S and multiple compilations" msgstr "" ! #: gcc.c:3762 ! msgid "Warning: -pipe ignored because -save-temps specified" msgstr "" ! #: gcc.c:3766 ! msgid "Warning: -pipe ignored because -time specified" msgstr "" ! #: gcc.c:3776 ! msgid "argument to `-x' is missing" msgstr "" ! #: gcc.c:3804 #, c-format ! msgid "argument to `-%s' is missing" msgstr "" ! #: gcc.c:3867 ! #, c-format ! msgid "Warning: `-x %s' after last input file has no effect" msgstr "" ! #: gcc.c:4072 ! msgid "Invalid specification! Bug in cc." msgstr "" ! #: gcc.c:4221 ! #, c-format ! msgid "%s\n" msgstr "" ! #. Catch the case where a spec string contains something like ! #. '%{foo:%*}'. ie there is no * in the pattern on the left ! #. hand side of the :. ! #: gcc.c:4738 ! #, c-format ! msgid "Spec failure: '%%*' has not been initialised by pattern match" msgstr "" ! #: gcc.c:4747 #, c-format ! msgid "Warning: use of obsolete %%[ operator in specs" msgstr "" ! #: gcc.c:4765 ! #, c-format ! msgid "Processing spec %c%s%c, which is '%s'\n" msgstr "" ! #: gcc.c:4890 #, c-format ! msgid "Spec failure: Unrecognised spec option '%c'" msgstr "" ! #: gcc.c:5744 #, c-format ! msgid "unrecognized option `-%s'" msgstr "" ! #: gcc.c:5750 #, c-format ! msgid "install: %s%s\n" msgstr "" ! #: gcc.c:5751 #, c-format ! msgid "programs: %s\n" msgstr "" ! #: gcc.c:5752 #, c-format ! msgid "libraries: %s\n" msgstr "" ! #: gcc.c:5800 ! msgid "" ! "\n" ! "For bug reporting instructions, please see:\n" msgstr "" ! #: gcc.c:5816 ! #, c-format ! msgid "Configured with: %s\n" msgstr "" ! #: gcc.c:5830 #, c-format ! msgid "Thread model: %s\n" msgstr "" ! #: gcc.c:5841 ! #, c-format ! msgid "gcc version %s\n" msgstr "" ! #: gcc.c:5843 ! #, c-format ! msgid "gcc driver version %s executing gcc version %s\n" msgstr "" ! #: gcc.c:5851 ! msgid "No input files" msgstr "" ! #: gcc.c:5888 ! #, c-format ! msgid "%s: %s compiler not installed on this system" msgstr "" ! #: gcc.c:5958 #, c-format ! msgid "%s: linker input file unused because linking not done" msgstr "" ! #: gcc.c:6001 #, c-format ! msgid "language %s not recognized" msgstr "" ! #: gcc.c:6104 ! msgid "Internal gcc abort." msgstr "" ! #: gcov.c:299 ! msgid "Internal gcov abort.\n" msgstr "" ! #: gcov.c:308 ! msgid "gcov [-b] [-v] [-n] [-l] [-f] [-o OBJDIR] file\n" msgstr "" ! #: gcov.c:428 ! #, c-format ! msgid "Could not open basic block file %s.\n" msgstr "" ! #: gcov.c:437 ! #, c-format ! msgid "Could not open data file %s.\n" msgstr "" ! #: gcov.c:438 ! msgid "Assuming that all execution counts are zero.\n" msgstr "" ! #: gcov.c:444 ! #, c-format ! msgid "Could not open program flow graph file %s.\n" msgstr "" ! #: gcov.c:455 ! #, c-format ! msgid "No executable code associated with file %s.\n" msgstr "" ! #: gcov.c:754 profile.c:977 ! msgid ".da file contents exhausted too early\n" msgstr "" ! #: gcov.c:757 profile.c:980 ! msgid ".da file contents not exhausted\n" msgstr "" ! #: gcov.c:938 ! #, c-format ! msgid "%6.2f%% of %d source lines executed in function %s\n" msgstr "" ! #: gcov.c:942 ! #, c-format ! msgid "No executable source lines in function %s\n" msgstr "" ! #: gcov.c:949 #, c-format ! msgid "%6.2f%% of %d branches executed in function %s\n" msgstr "" ! #: gcov.c:953 ! #, c-format ! msgid "%6.2f%% of %d branches taken at least once in function %s\n" msgstr "" ! #: gcov.c:958 ! #, c-format ! msgid "No branches in function %s\n" msgstr "" ! #: gcov.c:960 ! #, c-format ! msgid "%6.2f%% of %d calls executed in function %s\n" msgstr "" ! #: gcov.c:964 ! #, c-format ! msgid "No calls in function %s\n" msgstr "" ! #: gcov.c:1096 ! #, c-format ! msgid "didn't use all bb entries of graph, function %s\n" msgstr "" ! #: gcov.c:1098 ! #, c-format ! msgid "block_num = %ld, num_blocks = %d\n" msgstr "" ! #: gcov.c:1136 #, c-format ! msgid "ERROR: too many basic blocks in .bb file %s\n" msgstr "" ! #: gcov.c:1213 ! #, c-format ! msgid "%6.2f%% of %d source lines executed in file %s\n" msgstr "" ! #: gcov.c:1217 ! #, c-format ! msgid "No executable source lines in file %s\n" msgstr "" ! #: gcov.c:1224 ! #, c-format ! msgid "%6.2f%% of %d branches executed in file %s\n" msgstr "" ! #: gcov.c:1228 #, c-format ! msgid "%6.2f%% of %d branches taken at least once in file %s\n" msgstr "" ! #: gcov.c:1233 ! #, c-format ! msgid "No branches in file %s\n" msgstr "" ! #: gcov.c:1235 ! #, c-format ! msgid "%6.2f%% of %d calls executed in file %s\n" msgstr "" ! #: gcov.c:1239 ! #, c-format ! msgid "No calls in file %s\n" msgstr "" ! #: gcov.c:1251 ! #, c-format ! msgid "Could not open source file %s.\n" msgstr "" ! #: gcov.c:1301 ! #, c-format ! msgid "Could not open output file %s.\n" msgstr "" ! #: gcov.c:1309 ! #, c-format ! msgid "Creating %s.\n" msgstr "" ! #: gcov.c:1353 ! #, c-format ! msgid "call %d never executed\n" msgstr "" ! #: gcov.c:1358 ! #, c-format ! msgid "call %d returns = %d\n" msgstr "" ! #: gcov.c:1362 ! #, c-format ! msgid "call %d returns = %d%%\n" msgstr "" ! #: gcov.c:1370 ! #, c-format ! msgid "branch %d never executed\n" msgstr "" ! #: gcov.c:1376 #, c-format ! msgid "branch %d taken = %d\n" msgstr "" ! #: gcov.c:1380 ! #, c-format ! msgid "branch %d taken = %d%%\n" msgstr "" ! #: gcov.c:1394 ! #, c-format ! msgid "Unexpected EOF while reading source file %s.\n" msgstr "" ! #: gcse.c:691 ! #, c-format ! msgid "GCSE disabled: %d > 1000 basic blocks and %d >= 20 edges/basic block" msgstr "" ! #: gcse.c:703 #, c-format ! msgid "GCSE disabled: %d basic blocks and %d registers" msgstr "" ! #: haifa-sched.c:193 #, c-format ! msgid "fix_sched_param: unknown param: %s" msgstr "" ! #: integrate.c:142 ! msgid "function cannot be inline" msgstr "" ! #: integrate.c:147 ! msgid "varargs function cannot be inline" msgstr "" ! #: integrate.c:150 ! msgid "function using alloca cannot be inline" msgstr "" ! #: integrate.c:153 ! msgid "function using setjmp cannot be inline" msgstr "" ! #: integrate.c:156 ! msgid "function uses __builtin_eh_return" msgstr "" ! #: integrate.c:159 ! msgid "function with nested functions cannot be inline" msgstr "" ! #: integrate.c:163 ! msgid "function with label addresses used in initializers cannot inline" msgstr "" ! #: integrate.c:170 integrate.c:214 ! msgid "function too large to be inline" msgstr "" ! #: integrate.c:180 ! msgid "no prototype, and parameter address used; cannot be inline" msgstr "" ! #: integrate.c:187 integrate.c:232 ! msgid "inline functions not supported for this return value type" msgstr "" ! #: integrate.c:192 ! msgid "function with varying-size return value cannot be inline" msgstr "" ! #: integrate.c:199 ! msgid "function with varying-size parameter cannot be inline" msgstr "" ! #: integrate.c:202 ! msgid "function with transparent unit parameter cannot be inline" msgstr "" ! #: integrate.c:221 ! msgid "function with computed jump cannot inline" msgstr "" ! #: integrate.c:225 ! msgid "function with nonlocal goto cannot be inline" msgstr "" ! #: integrate.c:240 ! msgid "function with target specific attribute(s) cannot be inlined" msgstr "" ! #: java/check-init.c:731 #, c-format ! msgid "internal error in check-init: tree code not implemented: %s" msgstr "" ! #: java/class.c:543 java/class.c:568 ! msgid "internal error - too many interface type" msgstr "" ! #: java/class.c:702 ! msgid "bad method signature" msgstr "" ! #: java/class.c:747 ! msgid "misplaced ConstantValue attribute (not in any field)" msgstr "" ! #: java/class.c:749 ! #, c-format ! msgid "duplicate ConstanValue atribute for field '%s'" msgstr "" ! #: java/class.c:995 ! #, c-format ! msgid "field '%s' not found in class" msgstr "" ! #: java/class.c:1203 ! msgid "abstract method in non-abstract class" msgstr "" ! #: java/class.c:1820 ! #, c-format ! msgid "non-static method '%s' overrides static method" msgstr "" ! #: java/decl.c:1475 ! #, c-format ! msgid "In %s: overlapped variable and exception ranges at %d" msgstr "" ! #: java/decl.c:1563 ! msgid "bad type in parameter debug info" msgstr "" ! #: java/decl.c:1573 ! #, c-format ! msgid "bad PC range for debug info for local `%s'" msgstr "" ! #: java/expr.c:553 ! msgid "stack underflow - dup* operation" msgstr "" ! #: java/expr.c:1444 ! #, c-format ! msgid "" ! "reference `%s' is ambiguous: appears in interface `%s' and interface `%s'" msgstr "" ! #: java/expr.c:1473 ! #, c-format ! msgid "field `%s' not found" msgstr "" ! #: java/expr.c:1624 ! msgid "ret instruction not implemented" msgstr "" ! #: java/expr.c:1750 ! #, c-format ! msgid "method '%s' not found in class" msgstr "" ! #: java/expr.c:1885 ! #, c-format ! msgid "failed to find class '%s'" msgstr "" ! #: java/expr.c:1897 #, c-format ! msgid "Class '%s' has no method named '%s' matching signature '%s'" msgstr "" ! #: java/expr.c:1907 ! msgid "invokestatic on non static method" msgstr "" ! #: java/expr.c:1912 ! msgid "invokestatic on abstract method" msgstr "" ! #: java/expr.c:1920 ! msgid "invoke[non-static] on static method" msgstr "" ! #: java/expr.c:2208 ! #, c-format ! msgid "Missing field '%s' in '%s'" msgstr "" ! #: java/expr.c:2214 #, c-format ! msgid "Mismatching signature for field '%s' in '%s'" msgstr "" ! #: java/expr.c:2253 #, c-format ! msgid "assignment to final field `%s' not in field's class" msgstr "" ! #: java/expr.c:2258 #, c-format ! msgid "assignment to final static field `%s' not in class initializer" msgstr "" ! #: java/expr.c:2265 #, c-format ! msgid "assignment to final field `%s' not in constructor" msgstr "" ! #: java/expr.c:2519 #, c-format ! msgid "Can't expand %s" msgstr "" ! #: java/expr.c:2695 ! msgid "invalid PC in line number table" msgstr "" ! #. We've just reached the end of a region of dead code. ! #: java/expr.c:2740 #, c-format ! msgid "Unreachable bytecode from %d to before %d." msgstr "" ! #. We've just reached the end of a region of dead code. ! #: java/expr.c:2777 #, c-format ! msgid "Unreachable bytecode from %d to the end of the method." msgstr "" ! #. duplicate code from LOAD macro ! #: java/expr.c:3096 ! msgid "unrecogized wide sub-instruction" msgstr "" ! #: java/jcf-io.c:416 #, c-format msgid "" ! "Source file for class `%s' is newer than its matching class file. Source " ! "file used instead" msgstr "" ! #: java/jcf-parse.c:375 ! msgid "bad string constant" msgstr "" ! #: java/jcf-parse.c:431 ! #, c-format ! msgid "bad value constant type %d, index %d" msgstr "" ! #: java/jcf-parse.c:601 #, c-format ! msgid "can't reopen %s" msgstr "" ! #: java/jcf-parse.c:663 #, c-format ! msgid "Cannot find file for class %s." msgstr "" ! #: java/jcf-parse.c:675 ! msgid "not a valid Java .class file" msgstr "" ! #: java/jcf-parse.c:678 ! msgid "error while parsing constant pool" msgstr "" ! #: java/jcf-parse.c:681 ! #, c-format ! msgid "error in constant pool entry #%d\n" msgstr "" ! #. FIXME - where was first time ! #: java/jcf-parse.c:693 ! #, c-format ! msgid "reading class %s for the second time from %s" msgstr "" ! #: java/jcf-parse.c:711 ! msgid "error while parsing fields" msgstr "" ! #: java/jcf-parse.c:714 ! msgid "error while parsing methods" msgstr "" ! #: java/jcf-parse.c:717 ! msgid "error while parsing final attributes" msgstr "" ! #: java/jcf-parse.c:731 #, c-format msgid "" ! "The `java.lang.Object' that was found in `%s' didn't have the special zero-" ! "length `gnu.gcj.gcj-compiled' attribute. This generally means that your " ! "classpath is incorrect set. Use `info gcj \"Input Options\"' to see the info " ! "page describing how to set the classpath." msgstr "" ! #: java/jcf-parse.c:804 ! msgid "missing Code attribute" msgstr "" ! #: java/jcf-parse.c:948 toplev.c:2511 #, c-format ! msgid "error closing %s" msgstr "" ! #: java/jcf-parse.c:1029 ! msgid "source file seen twice on command line and will be compiled only once." msgstr "" ! #: java/jcf-parse.c:1045 ! msgid "no input file specified" msgstr "" ! #: java/jcf-parse.c:1061 #, c-format ! msgid "can't close input file %s" msgstr "" ! #: java/jcf-parse.c:1075 #, c-format ! msgid "Premature end of input file %s" msgstr "" ! #: java/jcf-parse.c:1098 #, c-format ! msgid "bad zip/jar file %s" msgstr "" ! #: java/jcf-write.c:2597 #, c-format ! msgid "" ! "internal error in generate_bytecode_insn - tree code not implemented: %s" msgstr "" ! #: java/jcf-write.c:3307 #, c-format ! msgid "can't create directory %s" msgstr "" ! #: java/jcf-write.c:3334 #, c-format ! msgid "can't to open %s" msgstr "" ! #: java/jv-scan.c:183 ! msgid "Only one of `--print-main', `--list-class', and `--complexity' allowed" msgstr "" ! #: java/jv-scan.c:186 ! #, c-format ! msgid "Can't open output file `%s'" msgstr "" ! #: java/jv-scan.c:222 ! #, c-format ! msgid "File not found `%s'" msgstr "" ! #: java/jvspec.c:360 ! msgid "can't specify `-D' without `--main'\n" msgstr "" ! #: java/jvspec.c:368 ! msgid "Warning: already-compiled .class files ignored with -C" msgstr "" ! #: java/jvspec.c:375 ! msgid "cannot specify both -C and -o" msgstr "" ! #: java/jvspec.c:387 ! msgid "cannot create temporary file" msgstr "" ! #: java/jvspec.c:415 ! msgid "using both @FILE with multiple files not implemented" msgstr "" ! #: java/jvspec.c:456 ! msgid "cannot specify `main' class when not linking" msgstr "" ! #: java/lang-options.h:32 ! msgid "Disable automatic array bounds checking" msgstr "" ! #: java/lang-options.h:34 ! msgid "Make is_compiled_class return 1" msgstr "" ! #: java/lang-options.h:38 ! msgid "Dump class files to .class" msgstr "" ! #: java/lang-options.h:40 ! msgid "input file is list of file names to compile" msgstr "" ! #: java/lang-options.h:42 ! msgid "Generate code for Boehm GC" msgstr "" ! #: java/lang-options.h:44 ! msgid "Don't put synchronization structure in each object" msgstr "" ! #: java/lang-options.h:46 ! msgid "Assume native functions are implemented using JNI" msgstr "" ! #: java/lang-options.h:48 ! msgid "Set class path and suppress system path" msgstr "" ! #: java/lang-options.h:50 ! msgid "Set class path" msgstr "" ! #: java/lang-options.h:52 ! msgid "Choose class whose main method should be used" msgstr "" ! #: java/lang-options.h:54 ! msgid "Choose input encoding (default is UTF-8)" msgstr "" ! #: java/lang-options.h:56 ! msgid "Add directory to class path" msgstr "" ! #: java/lang-options.h:58 ! msgid "Directory where class files should be written" msgstr "" ! #: java/lang-options.h:61 ! msgid "Use built-in instructions for division" msgstr "" ! #: java/lang-options.h:63 ! msgid "Warn if modifiers are specified when not necessary" msgstr "" ! #: java/lang-options.h:65 ! msgid "Warn if deprecated empty statements are found" msgstr "" ! #: java/lang-options.h:67 ! msgid "Warn if .class files are out of date" msgstr "" ! #: java/lang-options.h:69 ! msgid "Always check for non gcj generated classes archives" msgstr "" ! #: java/lang.c:387 ! msgid "can't do dependency tracking with input from stdin" msgstr "" ! #: java/lang.c:403 ! msgid "couldn't determine target name for dependency tracking" msgstr "" ! #: java/lex.c:297 ! #, c-format msgid "" ! "unknown encoding: `%s'\n" ! "This might mean that your locale's encoding is not supported\n" ! "by your system's iconv(3) implementation. If you aren't trying\n" ! "to use a particular encoding for your input file, try the\n" ! "`--encoding=UTF-8' option." msgstr "" ! #: java/mangle.c:85 ! #, c-format ! msgid "Can't mangle %s" msgstr "" ! #: java/mangle_name.c:151 java/mangle_name.c:228 ! msgid "internal error - invalid Utf8 name" msgstr "" ! #: java/parse.y:737 java/parse.y:775 ! msgid "Missing name" msgstr "" ! #: java/parse.y:739 java/parse.y:777 java/parse.y:796 java/parse.y:977 ! #: java/parse.y:1324 java/parse.y:1527 java/parse.y:1529 java/parse.y:1758 ! #: java/parse.y:1784 java/parse.y:1795 java/parse.y:1806 java/parse.y:1818 ! msgid "';' expected" msgstr "" ! #: java/parse.y:794 ! msgid "'*' expected" msgstr "" ! #: java/parse.y:808 ! msgid "Class or interface declaration expected" msgstr "" ! #: java/parse.y:843 java/parse.y:845 ! msgid "Missing class name" msgstr "" ! #: java/parse.y:848 java/parse.y:852 java/parse.y:860 java/parse.y:1022 ! #: java/parse.y:1270 java/parse.y:1272 java/parse.y:1593 java/parse.y:1829 ! #: java/parse.y:1861 java/parse.y:1913 ! msgid "'{' expected" msgstr "" ! #: java/parse.y:862 ! msgid "Missing super class name" msgstr "" ! #: java/parse.y:872 java/parse.y:888 ! msgid "Missing interface name" msgstr "" ! #. That's for () ! #: java/parse.y:956 java/parse.y:1289 java/parse.y:1348 java/parse.y:1551 ! #: java/parse.y:1773 java/parse.y:1782 java/parse.y:1793 java/parse.y:1804 ! #: java/parse.y:1816 java/parse.y:1833 java/parse.y:1835 java/parse.y:1906 ! #: java/parse.y:2077 java/parse.y:2138 java/parse.y:2292 java/parse.y:2294 ! #: java/parse.y:2301 java/parse.y:2308 java/parse.y:2319 java/parse.y:2321 ! #: java/parse.y:2358 java/parse.y:2360 java/parse.y:2362 java/parse.y:2383 ! #: java/parse.y:2385 java/parse.y:2387 java/parse.y:2403 java/parse.y:2405 ! #: java/parse.y:2426 java/parse.y:2428 java/parse.y:2430 java/parse.y:2458 ! #: java/parse.y:2460 java/parse.y:2462 java/parse.y:2464 java/parse.y:2482 ! #: java/parse.y:2484 java/parse.y:2495 java/parse.y:2506 java/parse.y:2517 ! #: java/parse.y:2528 java/parse.y:2539 java/parse.y:2552 java/parse.y:2556 ! #: java/parse.y:2558 java/parse.y:2571 ! msgid "Missing term" msgstr "" ! #: java/parse.y:971 ! msgid "Missing variable initializer" msgstr "" ! #: java/parse.y:988 ! msgid "Invalid declaration" msgstr "" ! #: java/parse.y:994 ! msgid "Can't specify array dimension in a declaration" msgstr "" ! #: java/parse.y:996 java/parse.y:1072 java/parse.y:2113 java/parse.y:2135 ! #: java/parse.y:2139 java/parse.y:2174 java/parse.y:2251 java/parse.y:2261 ! msgid "']' expected" msgstr "" ! #: java/parse.y:1000 ! msgid "Unbalanced ']'" msgstr "" ! #: java/parse.y:1036 ! msgid "Invalid method declaration, method name required" msgstr "" ! #: java/parse.y:1042 java/parse.y:1044 java/parse.y:1997 ! msgid "Identifier expected" msgstr "" ! #: java/parse.y:1047 ! msgid "Invalid method declaration, return type required" msgstr "" ! #: java/parse.y:1070 java/parse.y:1507 java/parse.y:1514 java/parse.y:1523 ! #: java/parse.y:1525 java/parse.y:1553 java/parse.y:1661 java/parse.y:1942 ! #: java/parse.y:1995 ! msgid "')' expected" msgstr "" ! #: java/parse.y:1086 ! msgid "Missing formal parameter term" msgstr "" ! #: java/parse.y:1101 java/parse.y:1106 ! msgid "Missing identifier" msgstr "" ! #: java/parse.y:1126 java/parse.y:1135 ! msgid "Missing class type term" msgstr "" ! #: java/parse.y:1287 ! msgid "Invalid interface type" msgstr "" ! #: java/parse.y:1471 java/parse.y:1640 java/parse.y:1642 ! msgid "':' expected" msgstr "" ! #: java/parse.y:1493 java/parse.y:1498 java/parse.y:1503 ! msgid "Invalid expression statement" msgstr "" ! #: java/parse.y:1521 java/parse.y:1549 java/parse.y:1589 java/parse.y:1657 ! #: java/parse.y:1725 java/parse.y:1831 java/parse.y:1899 java/parse.y:1989 ! #: java/parse.y:1991 java/parse.y:1999 java/parse.y:2234 java/parse.y:2236 ! msgid "'(' expected" msgstr "" ! #: java/parse.y:1591 ! msgid "Missing term or ')'" msgstr "" ! #: java/parse.y:1638 ! msgid "Missing or invalid constant expression" msgstr "" ! #: java/parse.y:1659 ! msgid "Missing term and ')' expected" msgstr "" ! #: java/parse.y:1698 ! msgid "Invalid control expression" msgstr "" ! #: java/parse.y:1700 java/parse.y:1702 ! msgid "Invalid update expression" msgstr "" ! #: java/parse.y:1727 ! msgid "Invalid init statement" msgstr "" ! #: java/parse.y:1902 ! msgid "Missing term or ')' expected" msgstr "" ! #: java/parse.y:1944 ! msgid "'class' or 'this' expected" msgstr "" ! #: java/parse.y:1946 java/parse.y:1948 ! msgid "'class' expected" msgstr "" ! #: java/parse.y:1993 ! msgid "')' or term expected" msgstr "" ! #: java/parse.y:2111 ! msgid "'[' expected" msgstr "" ! #: java/parse.y:2189 ! msgid "Field expected" msgstr "" ! #: java/parse.y:2246 java/parse.y:2256 ! msgid "Missing term and ']' expected" msgstr "" ! #: java/parse.y:2351 ! msgid "']' expected, invalid type expression" msgstr "" ! #: java/parse.y:2354 ! msgid "Invalid type expression" msgstr "" ! #: java/parse.y:2466 ! msgid "Invalid reference type" msgstr "" ! #: java/parse.y:2944 ! msgid "Constructor invocation must be first thing in a constructor" msgstr "" ! #: java/parse.y:2946 ! msgid "Only constructors can invoke constructors" msgstr "" ! #: java/parse.y:2955 ! #, c-format ! msgid ": `%s' JDK1.1(TM) feature" msgstr "" ! #: java/parse.y:3015 java/parse.y:3017 ! #, c-format ! msgid "" ! "%s.\n" ! "%s" msgstr "" ! #: java/parse.y:3480 ! msgid "Can't use '$' as a separator for inner classes" msgstr "" ! #: java/parse.y:6577 ! #, c-format ! msgid "malformed .zip archive in CLASSPATH: %s" msgstr "" ! #: java/parse.y:6648 ! #, c-format ! msgid "" ! "Can't find default package `%s'. Check the CLASSPATH environment variable " ! "and the access to the archives." msgstr "" ! #: java/parse.y:11787 ! #, c-format ! msgid "missing static field `%s'" msgstr "" ! #: java/parse.y:11792 ! #, c-format ! msgid "not a static field `%s'" msgstr "" ! #: java/parse.y:11845 ! #, c-format ! msgid "No case for %s" msgstr "" ! #: java/parse.y:13030 ! #, c-format ! msgid "unregistered operator %s" msgstr "" ! #: java/typeck.c:178 ! msgid "internal error - use of undefined type" msgstr "" ! #: java/typeck.c:557 ! msgid "junk at end of signature string" msgstr "" ! #: java/verify.c:464 ! msgid "bad pc in exception_table" msgstr "" ! #: java/verify.c:1344 ! #, c-format ! msgid "unknown opcode %d@pc=%d during verification" msgstr "" ! #: java/verify.c:1414 java/verify.c:1427 java/verify.c:1431 ! #, c-format ! msgid "verification error at PC=%d" msgstr "" ! #: objc/lang-options.h:27 ! msgid "Dump decls to a .decl file" msgstr "" ! #: objc/lang-options.h:29 ! msgid "Generate code for GNU runtime environment" msgstr "" ! #: objc/lang-options.h:32 ! msgid "Generate code for NeXT runtime environment" msgstr "" ! #: objc/lang-options.h:35 ! msgid "Warn if a selector has multiple methods" msgstr "" ! #: objc/lang-options.h:39 ! msgid "Do not warn if inherited methods are unimplemented" msgstr "" ! #: objc/lang-options.h:41 ! msgid "Generate C header of platform specific features" msgstr "" ! #: objc/lang-options.h:43 ! msgid "Specify the name of the class for constant strings" msgstr "" ! #: objc/objc-act.c:811 ! msgid "no class name specified as argument to -fconstant-string-class" msgstr "" ! #: objc/objc-act.c:972 ! #, c-format ! msgid "object does not conform to the `%s' protocol" msgstr "" ! #: objc/objc-act.c:1010 ! #, c-format ! msgid "class `%s' does not implement the `%s' protocol" msgstr "" ! #: objc/objc-act.c:1091 ! #, c-format ! msgid "`%s' cannot be statically allocated" msgstr "" ! #: objc/objc-act.c:1147 ! #, c-format ! msgid "Unexpected type for `id' (%s)" msgstr "" ! #: objc/objc-act.c:1152 ! msgid "Undefined type `id', please import " msgstr "" ! #: objc/objc-act.c:1200 objc/objc-act.c:5359 ! #, c-format ! msgid "Cannot find protocol declaration for `%s'" msgstr "" ! #: objc/objc-act.c:1422 objc/objc-act.c:5879 objc/objc-act.c:6177 ! #: objc/objc-act.c:6226 objc/objc-act.c:6262 objc/objc-parse.y:1371 ! #, c-format ! msgid "Cannot find interface declaration for `%s'" msgstr "" ! #: objc/objc-act.c:2460 ! #, c-format ! msgid "Cannot find class `%s'" msgstr "" ! #: objc/objc-act.c:2462 ! #, c-format ! msgid "Class `%s' already exists" msgstr "" ! #. fatal did not work with 2 args...should fix ! #: objc/objc-act.c:2586 ! #, c-format ! msgid "Cannot find interface declaration for `%s', superclass of `%s'" msgstr "" ! #: objc/objc-act.c:2593 ! #, c-format ! msgid "Circular inheritance in interface declaration for `%s'" msgstr "" ! #: objc/objc-act.c:3643 objc/objc-act.c:3660 ! msgid "inconsistent instance variable specification" msgstr "" ! #: objc/objc-act.c:4854 ! #, c-format ! msgid "multiple declarations for method `%s'" msgstr "" ! #: objc/objc-act.c:4968 ! #, c-format ! msgid "invalid receiver type `%s'" msgstr "" ! #: objc/objc-act.c:5036 objc/objc-act.c:5062 objc/objc-act.c:5110 ! #, c-format ! msgid "`%s' does not respond to `%s'" msgstr "" ! #: objc/objc-act.c:5042 objc/objc-act.c:7283 ! #, c-format ! msgid "no super class declared in interface for `%s'" msgstr "" ! #: objc/objc-act.c:5140 ! msgid "cannot find class (factory) method." msgstr "" ! #: objc/objc-act.c:5141 objc/objc-act.c:5185 ! #, c-format ! msgid "return type for `%s' defaults to id" msgstr "" ! #: objc/objc-act.c:5158 ! #, c-format ! msgid "method `%s' not implemented by protocol." msgstr "" ! #: objc/objc-act.c:5167 ! msgid "return type defaults to id" msgstr "" ! #: objc/objc-act.c:5184 ! msgid "cannot find method." msgstr "" ! #. Historically, a class method that produced objects (factory ! #. method) would assign `self' to the instance that it ! #. allocated. This would effectively turn the class method into ! #. an instance method. Following this assignment, the instance ! #. variables could be accessed. That practice, while safe, ! #. violates the simple rule that a class method should not refer ! #. to an instance variable. It's better to catch the cases ! #. where this is done unknowingly than to support the above ! #. paradigm. ! #: objc/objc-act.c:5428 ! #, c-format ! msgid "instance variable `%s' accessed in class method" msgstr "" ! #: objc/objc-act.c:5680 ! #, c-format ! msgid "duplicate definition of class method `%s'." msgstr "" ! #: objc/objc-act.c:5686 ! #, c-format ! msgid "duplicate declaration of class method `%s'." msgstr "" ! #: objc/objc-act.c:5722 ! #, c-format ! msgid "duplicate definition of instance method `%s'." msgstr "" ! #: objc/objc-act.c:5728 ! #, c-format ! msgid "duplicate declaration of instance method `%s'." msgstr "" ! #: objc/objc-act.c:5768 ! #, c-format ! msgid "duplicate interface declaration for category `%s(%s)'" msgstr "" ! #: objc/objc-act.c:5854 #, c-format ! msgid "instance variable `%s' is declared private" msgstr "" ! #: objc/objc-act.c:5901 #, c-format ! msgid "instance variable `%s' is declared %s" msgstr "" ! #: objc/objc-act.c:5911 ! msgid "static access to object of type `id'" msgstr "" ! #: objc/objc-act.c:5945 objc/objc-act.c:6039 ! #, c-format ! msgid "incomplete implementation of class `%s'" msgstr "" ! #: objc/objc-act.c:5949 objc/objc-act.c:6044 ! #, c-format ! msgid "incomplete implementation of category `%s'" msgstr "" ! #: objc/objc-act.c:5954 objc/objc-act.c:6049 ! #, c-format ! msgid "method definition for `%c%s' not found" msgstr "" ! #: objc/objc-act.c:6090 ! #, c-format ! msgid "%s `%s' does not fully implement the `%s' protocol" msgstr "" ! #: objc/objc-act.c:6149 ! #, c-format ! msgid "reimplementation of class `%s'" msgstr "" ! #: objc/objc-act.c:6191 ! #, c-format ! msgid "conflicting super class name `%s'" msgstr "" ! #: objc/objc-act.c:6206 ! #, c-format ! msgid "duplicate interface declaration for class `%s'" msgstr "" ! #: objc/objc-act.c:6449 ! #, c-format ! msgid "duplicate declaration for protocol `%s'" msgstr "" ! #: objc/objc-act.c:7324 ! msgid "[super ...] must appear in a method context" msgstr "" ! #: objc/objc-act.c:8287 objc/objc-act.c:8303 ! #, c-format ! msgid "potential selector conflict for method `%s'" msgstr "" ! #: objc/objc-parse.y:2159 ! msgid "`@end' must appear in an implementation context" msgstr "" ! #: objc/objc-parse.y:2425 objc/objc-parse.y:2450 ! msgid "method definition not in class context" msgstr "" ! #: objc/objc-parse.y:3278 ! msgid "syntax error at '@' token" msgstr "" ! #. If we didn't find this parameter, issue an error message. ! #: params.c:80 ! #, c-format ! msgid "invalid parameter `%s'" msgstr "" ! #: profile.c:490 ! msgid "Arc profiling: some edge counts were bad." msgstr "" ! #: profile.c:931 ! #, c-format ! msgid "file %s not found, execution counts assumed to be zero." msgstr "" ! #: protoize.c:601 ! #, c-format ! msgid "%s: internal abort\n" msgstr "" ! #: protoize.c:692 ! #, c-format ! msgid "%s: error writing file `%s': %s\n" msgstr "" ! #: protoize.c:737 ! #, c-format ! msgid "%s: usage '%s [ -VqfnkN ] [ -i ] [ filename ... ]'\n" msgstr "" ! #: protoize.c:740 ! #, c-format ! msgid "%s: usage '%s [ -VqfnkNlgC ] [ -B ] [ filename ... ]'\n" msgstr "" ! #: protoize.c:847 ! #, c-format ! msgid "%s: warning: no read access for file `%s'\n" msgstr "" ! #: protoize.c:855 ! #, c-format ! msgid "%s: warning: no write access for file `%s'\n" msgstr "" ! #: protoize.c:863 ! #, c-format ! msgid "%s: warning: no write access for dir containing `%s'\n" msgstr "" ! #. Catch cases like /.. where we try to backup to a ! #. point above the absolute root of the logical file ! #. system. ! #: protoize.c:1281 ! #, c-format ! msgid "%s: invalid file name: %s\n" msgstr "" ! #: protoize.c:1433 ! #, c-format ! msgid "%s: %s: can't get status: %s\n" msgstr "" ! #: protoize.c:1454 ! #, c-format ! msgid "" ! "\n" ! "%s: fatal error: aux info file corrupted at line %d\n" msgstr "" ! #: protoize.c:1790 ! #, c-format ! msgid "%s:%d: declaration of function `%s' takes different forms\n" msgstr "" ! #: protoize.c:2048 ! #, c-format ! msgid "%s: compiling `%s'\n" msgstr "" ! #: protoize.c:2071 ! #, c-format ! msgid "%s: wait: %s\n" msgstr "" ! #: protoize.c:2076 ! #, c-format ! msgid "%s: subprocess got fatal signal %d\n" msgstr "" ! #: protoize.c:2084 ! #, c-format ! msgid "%s: %s exited with status %d\n" msgstr "" ! #: protoize.c:2136 ! #, c-format ! msgid "%s: warning: missing SYSCALLS file `%s'\n" msgstr "" ! #: protoize.c:2145 protoize.c:2174 ! #, c-format ! msgid "%s: can't read aux info file `%s': %s\n" msgstr "" ! #: protoize.c:2190 protoize.c:2218 ! #, c-format ! msgid "%s: can't get status of aux info file `%s': %s\n" msgstr "" ! #: protoize.c:2246 ! #, c-format ! msgid "%s: can't open aux info file `%s' for reading: %s\n" msgstr "" ! #: protoize.c:2264 ! #, c-format ! msgid "%s: error reading aux info file `%s': %s\n" msgstr "" ! #: protoize.c:2277 ! #, c-format ! msgid "%s: error closing aux info file `%s': %s\n" msgstr "" ! #: protoize.c:2293 ! #, c-format ! msgid "%s: can't delete aux info file `%s': %s\n" msgstr "" ! #: protoize.c:2375 protoize.c:4377 ! #, c-format ! msgid "%s: can't delete file `%s': %s\n" msgstr "" ! #: protoize.c:2454 ! #, c-format ! msgid "%s: warning: can't rename file `%s' to `%s': %s\n" msgstr "" ! #: protoize.c:2579 ! #, c-format ! msgid "%s: conflicting extern definitions of '%s'\n" msgstr "" ! #: protoize.c:2583 ! #, c-format ! msgid "%s: declarations of '%s' will not be converted\n" msgstr "" ! #: protoize.c:2585 ! #, c-format ! msgid "%s: conflict list for '%s' follows:\n" msgstr "" ! #: protoize.c:2618 ! #, c-format ! msgid "%s: warning: using formals list from %s(%d) for function `%s'\n" msgstr "" ! #: protoize.c:2658 ! #, c-format ! msgid "%s: %d: `%s' used but missing from SYSCALLS\n" msgstr "" ! #: protoize.c:2664 ! #, c-format ! msgid "%s: %d: warning: no extern definition for `%s'\n" msgstr "" ! #: protoize.c:2695 ! #, c-format ! msgid "%s: warning: no static definition for `%s' in file `%s'\n" msgstr "" ! #: protoize.c:2701 #, c-format ! msgid "%s: multiple static defs of `%s' in file `%s'\n" msgstr "" ! #: protoize.c:2874 protoize.c:2877 #, c-format ! msgid "%s: %d: warning: source too confusing\n" msgstr "" ! #: protoize.c:3083 ! #, c-format ! msgid "%s: %d: warning: varargs function declaration not converted\n" msgstr "" ! #: protoize.c:3098 ! #, c-format ! msgid "%s: declaration of function `%s' not converted\n" msgstr "" ! #: protoize.c:3221 #, c-format ! msgid "%s: warning: too many parameter lists in declaration of `%s'\n" msgstr "" ! #: protoize.c:3242 #, c-format msgid "" ! "\n" ! "%s: warning: too few parameter lists in declaration of `%s'\n" msgstr "" ! #: protoize.c:3340 ! #, c-format ! msgid "%s: %d: warning: found `%s' but expected `%s'\n" msgstr "" ! #: protoize.c:3518 ! #, c-format ! msgid "%s: local declaration for function `%s' not inserted\n" msgstr "" ! #: protoize.c:3545 ! #, c-format ! msgid "" ! "\n" ! "%s: %d: warning: can't add declaration of `%s' into macro call\n" msgstr "" ! #: protoize.c:3619 ! #, c-format ! msgid "%s: global declarations for file `%s' not inserted\n" msgstr "" ! #: protoize.c:3710 protoize.c:3740 ! #, c-format ! msgid "%s: definition of function `%s' not converted\n" msgstr "" ! #: protoize.c:3729 ! #, c-format ! msgid "%s: %d: warning: definition of %s not converted\n" msgstr "" ! #: protoize.c:4059 ! #, c-format ! msgid "%s: found definition of `%s' at %s(%d)\n" msgstr "" ! #. If we make it here, then we did not know about this ! #. function definition. ! #: protoize.c:4075 ! #, c-format ! msgid "%s: %d: warning: `%s' excluded by preprocessing\n" msgstr "" ! #: protoize.c:4078 ! #, c-format ! msgid "%s: function definition not converted\n" msgstr "" ! #: protoize.c:4137 ! #, c-format ! msgid "%s: `%s' not converted\n" msgstr "" ! #: protoize.c:4145 #, c-format ! msgid "%s: would convert file `%s'\n" msgstr "" ! #: protoize.c:4148 ! #, c-format ! msgid "%s: converting file `%s'\n" msgstr "" ! #: protoize.c:4158 #, c-format ! msgid "%s: can't get status for file `%s': %s\n" msgstr "" ! #: protoize.c:4200 ! #, c-format ! msgid "%s: can't open file `%s' for reading: %s\n" msgstr "" ! #: protoize.c:4215 ! #, c-format ! msgid "" ! "\n" ! "%s: error reading input file `%s': %s\n" msgstr "" ! #: protoize.c:4249 ! #, c-format ! msgid "%s: can't create/open clean file `%s': %s\n" msgstr "" ! #: protoize.c:4354 ! #, c-format ! msgid "%s: warning: file `%s' already saved in `%s'\n" msgstr "" ! #: protoize.c:4362 ! #, c-format ! msgid "%s: can't link file `%s' to `%s': %s\n" msgstr "" ! #: protoize.c:4392 ! #, c-format ! msgid "%s: can't create/open output file `%s': %s\n" msgstr "" ! #: protoize.c:4425 ! #, c-format ! msgid "%s: can't change mode of file `%s': %s\n" msgstr "" ! #: protoize.c:4611 ! #, c-format ! msgid "%s: cannot get working directory: %s\n" msgstr "" ! #: protoize.c:4709 ! #, c-format ! msgid "%s: input file names must have .c suffixes: %s\n" msgstr "" ! #: real.c:802 real.c:979 ! msgid "conversion from NaN to int" msgstr "" ! #: real.c:825 ! msgid "conversion from NaN to unsigned int" msgstr "" ! #: real.c:2700 ! msgid "floating point overflow" msgstr "" ! #: real.c:4340 real.c:6619 real.c:6700 ! msgid "overflow on truncation to integer" msgstr "" ! #: real.c:4412 ! msgid "overflow on truncation to unsigned integer" msgstr "" ! #: real.c:5760 #, c-format ! msgid "%s: argument domain error" msgstr "" ! #: real.c:5761 #, c-format ! msgid "%s: function singularity" msgstr "" ! #: real.c:5762 #, c-format ! msgid "%s: overflow range error" msgstr "" ! #: real.c:5763 #, c-format ! msgid "%s: underflow range error" msgstr "" ! #: real.c:5764 ! #, c-format ! msgid "%s: total loss of precision" msgstr "" ! #: real.c:5765 ! #, c-format ! msgid "%s: partial loss of precision" msgstr "" ! #: real.c:5766 ! #, c-format ! msgid "%s: NaN - producing operation" msgstr "" ! #: reg-stack.c:655 #, c-format ! msgid "Output constraint %d must specify a single register" msgstr "" ! #: reg-stack.c:675 ! msgid "Output regs must be grouped at top of stack" msgstr "" ! #: reg-stack.c:712 ! msgid "Implicitly popped regs must be grouped at top of stack" msgstr "" ! #: reg-stack.c:731 ! #, c-format ! msgid "Output operand %d must use `&' constraint" msgstr "" ! #: regclass.c:703 ! #, c-format ! msgid "can't use '%s' as a %s register" msgstr "" ! #: regclass.c:725 ! msgid "global register variable follows a function definition" msgstr "" ! #: regclass.c:729 ! msgid "register used for two global register variables" msgstr "" ! #: regclass.c:734 ! msgid "call-clobbered register used for global register variable" msgstr "" ! #: reload.c:1198 ! msgid "cannot reload integer constant operand in `asm'" msgstr "" ! #: reload.c:1220 ! msgid "impossible register constraint in `asm'" msgstr "" ! #: reload.c:3330 ! msgid "`&' constraint used with no register class" msgstr "" ! #: reload.c:3487 reload.c:3701 ! msgid "inconsistent operand constraints in an `asm'" msgstr "" ! #: reload1.c:1235 ! msgid "frame size too large for reliable stack checking" msgstr "" ! #: reload1.c:1238 ! msgid "try reducing the number of local variables" msgstr "" ! #: reload1.c:1893 #, c-format ! msgid "Can't find a register in class `%s' while reloading `asm'." msgstr "" ! #: reload1.c:1897 #, c-format ! msgid "Unable to find a register to spill in class `%s'." msgstr "" ! #: reload1.c:3922 ! msgid "`asm' operand requires impossible reload" msgstr "" ! #: reload1.c:5033 ! msgid "`asm' operand constraint incompatible with operand size" msgstr "" ! #: reload1.c:6620 ! msgid "output operand is constant in `asm'" msgstr "" ! #: rtl.c:1289 ! #, c-format ! msgid "RTL check: access of elt %d of `%s' with last elt %d in %s, at %s:%d" msgstr "" ! #: rtl.c:1304 ! #, c-format ! msgid "" ! "RTL check: expected elt %d type '%c', have '%c' (rtx %s) in %s, at %s:%d" msgstr "" ! #: rtl.c:1320 ! #, c-format msgid "" ! "RTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s) in %s, at %" ! "s:%d" msgstr "" ! #: rtl.c:1333 ! #, c-format ! msgid "RTL check: expected code `%s', have `%s' in %s, at %s:%d" msgstr "" ! #: rtl.c:1347 ! #, c-format ! msgid "RTL check: expected code `%s' or `%s', have `%s' in %s, at %s:%d" msgstr "" ! #: rtl.c:1362 ! #, c-format ! msgid "RTL check: access of elt %d of vector with last elt %d in %s, at %s:%d" msgstr "" ! #: stmt.c:917 ! #, c-format ! msgid "jump to `%s' invalidly jumps into binding contour" msgstr "" ! #: stmt.c:1153 stmt.c:3641 ! #, c-format ! msgid "label `%s' used before containing binding contour" msgstr "" ! #: stmt.c:1283 stmt.c:1357 ! msgid "`asm' cannot be used in function where memory usage is checked" msgstr "" ! #: stmt.c:1343 ! msgid "`asm' cannot be used with `-fcheck-memory-usage'" msgstr "" ! #: stmt.c:1372 ! #, c-format ! msgid "unknown register name `%s' in `asm'" msgstr "" ! #: stmt.c:1387 ! msgid "too many alternatives in `asm'" msgstr "" ! #: stmt.c:1398 ! msgid "operand constraints for `asm' differ in number of alternatives" msgstr "" ! #: stmt.c:1446 ! msgid "output operand constraint lacks `='" msgstr "" ! #: stmt.c:1465 ! #, c-format ! msgid "output constraint `%c' for operand %d is not at the beginning" msgstr "" ! #: stmt.c:1472 ! #, c-format ! msgid "output operand constraint %d contains `+'" msgstr "" ! #: stmt.c:1481 ! msgid "operand constraint contains '+' or '=' at illegal position." msgstr "" ! #: stmt.c:1487 stmt.c:1664 ! #, c-format ! msgid "`%%' constraint used with last operand" msgstr "" ! #: stmt.c:1501 ! msgid "matching constraint not valid in output operand" msgstr "" ! #: stmt.c:1527 stmt.c:1724 ! #, c-format ! msgid "invalid punctuation `%c' in constraint" msgstr "" ! #: stmt.c:1571 ! #, c-format ! msgid "output number %d not directly addressable" msgstr "" ! #: stmt.c:1599 ! #, c-format ! msgid "more than %d operands in `asm'" msgstr "" ! #: stmt.c:1637 ! #, c-format ! msgid "hard register `%s' listed as input operand to `asm'" msgstr "" ! #: stmt.c:1654 ! #, c-format ! msgid "input operand constraint contains `%c'" msgstr "" ! #: stmt.c:1691 ! msgid "matching constraint references invalid operand number" msgstr "" ! #. ??? Leave this only until we have experience with what ! #. happens in combine and elsewhere when constraints are ! #. not satisfied. ! #: stmt.c:1758 stmt.c:1786 ! #, c-format ! msgid "asm operand %d probably doesn't match constraints" msgstr "" ! #: stmt.c:3578 ! #, c-format ! msgid "unused variable `%s'" msgstr "" ! #: stmt.c:5026 ! #, c-format ! msgid "enumeration value `%s' not handled in switch" msgstr "" ! #: stmt.c:5052 stmt.c:5072 ! #, c-format ! msgid "case value `%ld' not in enumerated type" msgstr "" ! #: stmt.c:5055 stmt.c:5075 ! #, c-format ! msgid "case value `%ld' not in enumerated type `%s'" msgstr "" ! #: stor-layout.c:140 ! msgid "type size can't be explicitly evaluated" msgstr "" ! #: stor-layout.c:142 ! msgid "variable-size type declared outside of any function" msgstr "" ! #: stor-layout.c:415 ! #, c-format ! msgid "size of `%s' is %d bytes" msgstr "" ! #: stor-layout.c:417 ! #, c-format ! msgid "size of `%s' is larger than %d bytes" msgstr "" ! #: stor-layout.c:771 stor-layout.c:1023 ! #, c-format ! msgid "packed attribute causes inefficient alignment for `%s'" msgstr "" ! #: stor-layout.c:773 stor-layout.c:1025 ! #, c-format ! msgid "packed attribute is unnecessary for `%s'" msgstr "" ! #: stor-layout.c:788 ! #, c-format ! msgid "padding struct to align `%s'" msgstr "" ! #: stor-layout.c:987 ! msgid "padding struct size to alignment boundary" msgstr "" ! #: stor-layout.c:1030 ! msgid "packed attribute causes inefficient alignment" msgstr "" ! #: stor-layout.c:1032 ! msgid "packed attribute is unnecessary" msgstr "" ! #: stringpool.c:307 ! #, c-format ! msgid "\"%s\" and \"%s\" identical in first %d characters" msgstr "" ! #: timevar.c:428 ! msgid "" ! "\n" ! "Execution times (seconds)\n" msgstr "" ! #. Print total time. ! #: timevar.c:476 ! msgid " TOTAL :" msgstr "" ! #: timevar.c:515 ! #, c-format ! msgid "time in %s: %ld.%06ld (%ld%%)\n" msgstr "" ! #: tlink.c:428 ! #, c-format ! msgid "collect: reading %s\n" msgstr "" ! #: tlink.c:529 ! #, c-format ! msgid "collect: recompiling %s\n" msgstr "" ! #: tlink.c:694 ! #, c-format ! msgid "collect: tweaking %s in %s\n" msgstr "" ! #: tlink.c:741 ! msgid "collect: relinking\n" msgstr "" ! #: tlink.c:750 ! #, c-format ! msgid "ld returned %d exit status" msgstr "" ! #: toplev.c:913 ! msgid "Generate debugging info in default format" msgstr "" ! #: toplev.c:914 ! msgid "Generate debugging info in default extended format" msgstr "" ! #: toplev.c:916 ! msgid "Generate STABS format debug info" msgstr "" ! #: toplev.c:917 ! msgid "Generate extended STABS format debug info" msgstr "" ! #: toplev.c:920 ! msgid "Generate DWARF-1 format debug info" msgstr "" ! #: toplev.c:922 ! msgid "Generate extended DWARF-1 format debug info" msgstr "" ! #: toplev.c:925 ! msgid "Generate DWARF-2 debug info" msgstr "" ! #: toplev.c:928 ! msgid "Generate XCOFF format debug info" msgstr "" ! #: toplev.c:929 ! msgid "Generate extended XCOFF format debug info" msgstr "" ! #: toplev.c:932 ! msgid "Generate COFF format debug info" msgstr "" ! #: toplev.c:976 ! msgid "Do not store floats in registers" msgstr "" ! #: toplev.c:978 ! msgid "Consider all mem refs through pointers as volatile" msgstr "" ! #: toplev.c:980 ! msgid "Consider all mem refs to global data to be volatile" msgstr "" ! #: toplev.c:982 ! msgid "Consider all mem refs to static data to be volatile" msgstr "" ! #: toplev.c:984 ! msgid "Defer popping functions args from stack until later" msgstr "" ! #: toplev.c:986 ! msgid "When possible do not generate stack frames" msgstr "" ! #: toplev.c:988 ! msgid "Optimize sibling and tail recursive calls" msgstr "" ! #: toplev.c:990 ! msgid "When running CSE, follow jumps to their targets" msgstr "" ! #: toplev.c:992 ! msgid "When running CSE, follow conditional jumps" msgstr "" ! #: toplev.c:994 ! msgid "Perform a number of minor, expensive optimisations" msgstr "" ! #: toplev.c:996 ! msgid "Perform jump threading optimisations" msgstr "" ! #: toplev.c:998 ! msgid "Perform strength reduction optimisations" msgstr "" ! #: toplev.c:1000 ! msgid "Perform loop unrolling when iteration count is known" msgstr "" ! #: toplev.c:1002 ! msgid "Perform loop unrolling for all loops" msgstr "" ! #: toplev.c:1004 ! msgid "Force all loop invariant computations out of loops" msgstr "" ! #: toplev.c:1006 ! msgid "Strength reduce all loop general induction variables" msgstr "" ! #: toplev.c:1008 ! msgid "Store strings in writable data section" msgstr "" ! #: toplev.c:1010 ! msgid "Enable machine specific peephole optimisations" msgstr "" ! #: toplev.c:1012 ! msgid "Copy memory operands into registers before using" msgstr "" ! #: toplev.c:1014 ! msgid "Copy memory address constants into regs before using" msgstr "" ! #: toplev.c:1016 ! msgid "Allow function addresses to be held in registers" msgstr "" ! #: toplev.c:1018 ! msgid "Integrate simple functions into their callers" msgstr "" ! #: toplev.c:1020 ! msgid "Generate code for funcs even if they are fully inlined" msgstr "" ! #: toplev.c:1022 ! msgid "Pay attention to the 'inline' keyword" msgstr "" ! #: toplev.c:1024 ! msgid "Emit static const variables even if they are not used" msgstr "" ! #: toplev.c:1026 ! msgid "Check for syntax errors, then stop" msgstr "" ! #: toplev.c:1028 ! msgid "Mark data as shared rather than private" msgstr "" ! #: toplev.c:1030 ! msgid "Enable saving registers around function calls" msgstr "" ! #: toplev.c:1032 ! msgid "Return 'short' aggregates in memory, not registers" msgstr "" ! #: toplev.c:1034 ! msgid "Return 'short' aggregates in registers" msgstr "" ! #: toplev.c:1036 ! msgid "Attempt to fill delay slots of branch instructions" msgstr "" ! #: toplev.c:1038 ! msgid "Perform the global common subexpression elimination" msgstr "" ! #: toplev.c:1040 ! msgid "Run CSE pass after loop optimisations" msgstr "" ! #: toplev.c:1042 ! msgid "Run the loop optimiser twice" msgstr "" ! #: toplev.c:1044 ! msgid "Delete useless null pointer checks" msgstr "" ! #: toplev.c:1046 ! msgid "Pretend that host and target use the same FP format" msgstr "" ! #: toplev.c:1048 ! msgid "Reschedule instructions before register allocation" msgstr "" ! #: toplev.c:1050 ! msgid "Reschedule instructions after register allocation" msgstr "" ! #: toplev.c:1052 ! msgid "Enable scheduling across basic blocks" msgstr "" ! #: toplev.c:1054 ! msgid "Allow speculative motion of non-loads" msgstr "" ! #: toplev.c:1056 ! msgid "Allow speculative motion of some loads" msgstr "" ! #: toplev.c:1058 ! msgid "Allow speculative motion of more loads" msgstr "" ! #: toplev.c:1060 ! msgid "Replace add,compare,branch with branch on count reg" msgstr "" ! #: toplev.c:1062 ! msgid "Generate position independent code, if possible" msgstr "" ! #: toplev.c:1065 ! msgid "Enable exception handling" msgstr "" ! #: toplev.c:1067 ! msgid "Just generate unwind tables for exception handling" msgstr "" ! #: toplev.c:1069 ! msgid "Support synchronous non-call exceptions" msgstr "" ! #: toplev.c:1071 ! msgid "Insert arc based program profiling code" msgstr "" ! #: toplev.c:1073 ! msgid "Create data files needed by gcov" msgstr "" ! #: toplev.c:1075 ! msgid "Use profiling information for branch probabilities" msgstr "" ! #: toplev.c:1077 ! msgid "Reorder basic blocks to improve code placement" msgstr "" ! #: toplev.c:1079 ! msgid "Do the register renaming optimization pass" msgstr "" ! #: toplev.c:1081 ! msgid "Improve FP speed by violating ANSI & IEEE rules" msgstr "" ! #: toplev.c:1083 ! msgid "Do not put unitialised globals in the common section" msgstr "" ! #: toplev.c:1085 ! msgid "Do not generate .size directives" msgstr "" ! #: toplev.c:1087 ! msgid "place each function into its own section" msgstr "" ! #: toplev.c:1089 ! msgid "place data items into their own section" msgstr "" ! #: toplev.c:1091 ! msgid "Add extra commentry to assembler output" msgstr "" ! #: toplev.c:1093 ! msgid "Output GNU ld formatted global initialisers" msgstr "" ! #: toplev.c:1095 ! msgid "Enables a register move optimisation" msgstr "" ! #: toplev.c:1097 ! msgid "Do the full regmove optimization pass" msgstr "" ! #: toplev.c:1099 ! msgid "Pack structure members together without holes" msgstr "" ! #: toplev.c:1101 ! msgid "Insert stack checking code into the program" msgstr "" ! #: toplev.c:1103 ! msgid "Specify that arguments may alias each other & globals" msgstr "" ! #: toplev.c:1105 ! msgid "Assume arguments may alias globals but not each other" msgstr "" ! #: toplev.c:1107 ! msgid "Assume arguments do not alias each other or globals" msgstr "" ! #: toplev.c:1109 ! msgid "Assume strict aliasing rules apply" msgstr "" ! #: toplev.c:1111 ! msgid "Align the start of loops" msgstr "" ! #: toplev.c:1113 ! msgid "Align labels which are only reached by jumping" msgstr "" ! #: toplev.c:1115 ! msgid "Align all labels" msgstr "" ! #: toplev.c:1117 ! msgid "Align the start of functions" msgstr "" ! #: toplev.c:1119 ! msgid "Generate code to check every memory access" msgstr "" ! #: toplev.c:1121 ! msgid "Add a prefix to all function names" msgstr "" ! #: toplev.c:1123 ! msgid "" ! "Suppress output of instruction numbers and line number notes in debugging " ! "dumps" msgstr "" ! #: toplev.c:1125 ! msgid "Instrument function entry/exit with profiling calls" msgstr "" ! #: toplev.c:1127 ! msgid "Enable SSA optimizations" msgstr "" ! #: toplev.c:1129 ! msgid "Enable dead code elimination" msgstr "" ! #: toplev.c:1131 ! msgid "External symbols have a leading underscore" msgstr "" ! #: toplev.c:1133 ! msgid "Process #ident directives" msgstr "" ! #: toplev.c:1135 ! msgid "Enables an rtl peephole pass run before sched2" msgstr "" ! #: toplev.c:1137 ! msgid "Enables guessing of branch probabilities" msgstr "" ! #: toplev.c:1139 ! msgid "Set errno after built-in math functions" msgstr "" ! #: toplev.c:1141 ! msgid "Convert floating point constant to single precision constant" msgstr "" ! #: toplev.c:1143 ! msgid "Report time taken by each compiler pass at end of run" msgstr "" ! #: toplev.c:1145 ! msgid "Report on permanent memory allocation at end of run" msgstr "" ! #: toplev.c:1147 ! msgid "Trap for signed overflow in addition / subtraction / multiplication." msgstr "" ! #: toplev.c:1164 ! msgid "Compile just for ISO C89" msgstr "" ! #: toplev.c:1166 ! msgid "Do not promote floats to double if using -traditional" msgstr "" ! #: toplev.c:1168 ! msgid "Determine language standard" msgstr "" ! #: toplev.c:1172 ! msgid "Make bitfields by unsigned by default" msgstr "" ! #: toplev.c:1176 ! msgid "Make 'char' be signed by default" msgstr "" ! #: toplev.c:1178 ! msgid "Make 'char' be unsigned by default" msgstr "" ! #: toplev.c:1184 ! msgid "Attempt to support traditional K&R style C" msgstr "" ! #: toplev.c:1190 ! msgid "Do not recognise the 'asm' keyword" msgstr "" ! #: toplev.c:1193 ! msgid "Do not recognise any built in functions" msgstr "" ! #: toplev.c:1195 ! msgid "Assume normal C execution environment" msgstr "" ! #: toplev.c:1198 ! msgid "Assume that standard libraries & main might not exist" msgstr "" ! #: toplev.c:1201 ! msgid "Allow different types as args of ? operator" msgstr "" ! #: toplev.c:1204 ! msgid "Allow the use of $ inside identifiers" msgstr "" ! #: toplev.c:1209 ! msgid "Use the same size for double as for float" msgstr "" ! #: toplev.c:1212 ! msgid "Use the smallest fitting integer to hold enums" msgstr "" ! #: toplev.c:1215 ! msgid "Override the underlying type for wchar_t to `unsigned short'" msgstr "" ! #: toplev.c:1219 ! msgid "Enable most warning messages" msgstr "" ! #: toplev.c:1221 ! msgid "Warn about casting functions to incompatible types" msgstr "" ! #: toplev.c:1225 ! msgid "Warn about functions which might be candidates for format attributes" msgstr "" ! #: toplev.c:1228 ! msgid "Warn about casts which discard qualifiers" msgstr "" ! #: toplev.c:1231 ! msgid "Warn about subscripts whose type is 'char'" msgstr "" ! #: toplev.c:1234 toplev.c:1237 ! msgid "Warn if nested comments are detected" msgstr "" ! #: toplev.c:1240 ! msgid "Warn about possibly confusing type conversions" msgstr "" ! #: toplev.c:1243 ! msgid "Warn about printf/scanf/strftime/strfmon format anomalies" msgstr "" ! #: toplev.c:1247 ! msgid "Don't warn about strftime formats yielding 2 digit years" msgstr "" ! #: toplev.c:1250 ! msgid "Don't warn about too many arguments to format functions" msgstr "" ! #: toplev.c:1252 ! msgid "Warn about non-string-literal format strings" msgstr "" ! #: toplev.c:1255 ! msgid "Warn about possible security problems with format functions" msgstr "" ! #: toplev.c:1258 ! msgid "Warn about implicit function declarations" msgstr "" ! #: toplev.c:1262 ! msgid "Warn when a declaration does not specify a type" msgstr "" ! #: toplev.c:1267 ! msgid "Warn about the use of the #import directive" msgstr "" ! #: toplev.c:1271 ! msgid "Do not warn about using 'long long' when -pedantic" msgstr "" ! #: toplev.c:1273 ! msgid "Warn about suspicious declarations of main" msgstr "" ! #: toplev.c:1276 ! msgid "Warn about possibly missing braces around initialisers" msgstr "" ! #: toplev.c:1279 ! msgid "Warn about global funcs without previous declarations" msgstr "" ! #: toplev.c:1282 ! msgid "Warn about global funcs without prototypes" msgstr "" ! #: toplev.c:1285 ! msgid "Warn about use of multicharacter literals" msgstr "" ! #: toplev.c:1288 ! msgid "Warn about externs not at file scope level" msgstr "" ! #: toplev.c:1291 ! msgid "Warn about possible missing parentheses" msgstr "" ! #: toplev.c:1294 ! msgid "Warn about possible violations of sequence point rules" msgstr "" ! #: toplev.c:1297 ! msgid "Warn about function pointer arithmetic" msgstr "" ! #: toplev.c:1300 ! msgid "Warn about multiple declarations of the same object" msgstr "" ! #: toplev.c:1303 ! msgid "Warn about signed/unsigned comparisons" msgstr "" ! #: toplev.c:1306 ! msgid "Warn about testing equality of floating point numbers" msgstr "" ! #: toplev.c:1309 ! msgid "Warn about unrecognized pragmas" msgstr "" ! #: toplev.c:1312 ! msgid "Warn about non-prototyped function decls" msgstr "" ! #: toplev.c:1315 ! msgid "Warn about constructs whose meaning change in ISO C" msgstr "" ! #: toplev.c:1318 ! msgid "Warn when trigraphs are encountered" msgstr "" ! #: toplev.c:1323 ! msgid "Mark strings as 'const char *'" msgstr "" ! #: toplev.c:1471 ! msgid "Warn when a function is unused" msgstr "" ! #: toplev.c:1473 ! msgid "Warn when a label is unused" msgstr "" ! #: toplev.c:1475 ! msgid "Warn when a function parameter is unused" msgstr "" ! #: toplev.c:1477 ! msgid "Warn when a variable is unused" msgstr "" ! #: toplev.c:1479 ! msgid "Warn when an expression value is unused" msgstr "" ! #: toplev.c:1481 ! msgid "Do not suppress warnings from system headers" msgstr "" ! #: toplev.c:1483 ! msgid "Treat all warnings as errors" msgstr "" ! #: toplev.c:1485 ! msgid "Warn when one local variable shadows another" msgstr "" ! #: toplev.c:1487 ! msgid "Warn about enumerated switches missing a specific case" msgstr "" ! #: toplev.c:1489 ! msgid "Warn about returning structures, unions or arrays" msgstr "" ! #: toplev.c:1491 ! msgid "Warn about pointer casts which increase alignment" msgstr "" ! #: toplev.c:1493 ! msgid "Warn about code that will never be executed" msgstr "" ! #: toplev.c:1495 ! msgid "Warn about unitialized automatic variables" msgstr "" ! #: toplev.c:1497 ! msgid "Warn when an inlined function cannot be inlined" msgstr "" ! #: toplev.c:1499 ! msgid "Warn when the packed attribute has no effect on struct layout" msgstr "" ! #: toplev.c:1501 ! msgid "Warn when padding is required to align struct members" msgstr "" ! #: toplev.c:1503 ! msgid "Warn when an optimization pass is disabled" msgstr "" ! #: toplev.c:1505 ! msgid "Warn about functions which might be candidates for attribute noreturn" msgstr "" ! #: toplev.c:1539 toplev.c:5061 tradcpp.c:776 ! #, c-format ! msgid "Invalid option `%s'" msgstr "" ! #: toplev.c:1741 ! #, c-format ! msgid "Internal error: %s" msgstr "" ! #: toplev.c:2056 ! #, c-format ! msgid "`%s' used but never defined" msgstr "" ! #: toplev.c:2059 ! #, c-format ! msgid "`%s' declared `static' but never defined" msgstr "" ! #: toplev.c:2081 ! #, c-format ! msgid "`%s' defined but not used" msgstr "" ! #: toplev.c:2259 ! #, c-format ! msgid "can't open %s for writing" msgstr "" ! #: toplev.c:2312 ! msgid "-ffunction-sections not supported for this target." msgstr "" ! #: toplev.c:2317 ! msgid "-fdata-sections not supported for this target." msgstr "" ! #: toplev.c:2325 ! msgid "-ffunction-sections disabled; it makes profiling impossible." msgstr "" ! #: toplev.c:2331 ! msgid "-ffunction-sections may affect debugging on some targets." msgstr "" ! #: toplev.c:2372 ! msgid "Errors detected in input file (your bison.simple is out of date)\n" msgstr "" ! #: toplev.c:2509 ! #, c-format ! msgid "error writing to %s" msgstr "" ! #: toplev.c:2614 ! #, c-format ! msgid "invalid register name `%s' for register variable" msgstr "" ! #: toplev.c:3863 msgid "" ! " -ffixed- Mark as being unavailable to the " ! "compiler\n" msgstr "" ! #: toplev.c:3864 msgid "" ! " -fcall-used- Mark as being corrupted by function " ! "calls\n" msgstr "" ! #: toplev.c:3865 msgid "" ! " -fcall-saved- Mark as being preserved across " ! "functions\n" msgstr "" ! #: toplev.c:3866 msgid "" ! " -finline-limit= Limits the size of inlined functions to \n" msgstr "" ! #: toplev.c:3867 msgid "" ! " -fmessage-length= Limits diagnostics messages lengths to " ! "characters per line. 0 suppresses line-wrapping\n" msgstr "" ! #: toplev.c:3868 msgid "" ! " -fdiagnostics-show-location=[once | every-line] Indicates how often source " ! "location information should be emitted, as prefix, at the beginning of " ! "diagnostics when line-wrapping\n" msgstr "" ! #: toplev.c:3879 ! msgid " -O[number] Set optimisation level to [number]\n" msgstr "" ! #: toplev.c:3880 ! msgid " -Os Optimise for space rather than speed\n" msgstr "" ! #: toplev.c:3892 msgid "" ! " -pedantic Issue warnings needed by strict compliance to ISO " ! "C\n" msgstr "" ! #: toplev.c:3893 ! msgid "" ! " -pedantic-errors Like -pedantic except that errors are produced\n" msgstr "" ! #: toplev.c:3894 ! msgid " -w Suppress warnings\n" msgstr "" ! #: toplev.c:3895 ! msgid " -W Enable extra warnings\n" msgstr "" ! #: toplev.c:3906 ! msgid " -Wunused Enable unused warnings\n" msgstr "" ! #: toplev.c:3907 ! msgid "" ! " -Wid-clash- Warn if 2 identifiers have the same first " ! "chars\n" msgstr "" ! #: toplev.c:3908 ! msgid "" ! " -Wlarger-than- Warn if an object is larger than bytes\n" msgstr "" ! #: toplev.c:3909 ! msgid " -p Enable function profiling\n" msgstr "" ! #: toplev.c:3911 ! msgid " -a Enable block profiling \n" msgstr "" ! #: toplev.c:3914 ! msgid " -ax Enable jump profiling \n" msgstr "" ! #: toplev.c:3916 ! msgid " -o Place output into \n" msgstr "" ! #: toplev.c:3917 ! msgid "" ! " -G Put global and static data smaller than \n" ! " bytes into a special section (on some targets)\n" msgstr "" ! #: toplev.c:3928 ! msgid " -aux-info Emit declaration info into \n" msgstr "" ! #: toplev.c:3929 ! msgid "" ! " -quiet Do not display functions compiled or elapsed time\n" msgstr "" ! #: toplev.c:3930 ! msgid " -version Display the compiler's version\n" msgstr "" ! #: toplev.c:3931 ! msgid "" ! " -d[letters] Enable dumps from specific passes of the compiler\n" msgstr "" ! #: toplev.c:3932 ! msgid "" ! " -dumpbase Base name to be used for dumps from specific " ! "passes\n" msgstr "" ! #: toplev.c:3934 ! msgid " -fsched-verbose= Set the verbosity level of the scheduler\n" msgstr "" ! #: toplev.c:3936 ! msgid " --help Display this information\n" msgstr "" ! #: toplev.c:3951 ! msgid "" ! "\n" ! "Language specific options:\n" msgstr "" ! #: toplev.c:3963 #, c-format ! msgid " %-23.23s [undocumented]\n" msgstr "" ! #: toplev.c:3971 toplev.c:3985 #, c-format ! msgid "" ! "\n" ! "There are undocumented %s specific options as well.\n" msgstr "" ! #: toplev.c:3975 #, c-format ! msgid "" ! "\n" ! " Options for %s:\n" msgstr "" ! #: toplev.c:4006 msgid "" ! "\n" ! "Target specific options:\n" msgstr "" ! #: toplev.c:4020 toplev.c:4039 #, c-format ! msgid " -m%-23.23s [undocumented]\n" msgstr "" ! #: toplev.c:4048 ! msgid "" ! "\n" ! "There are undocumented target specific options as well.\n" msgstr "" ! #: toplev.c:4050 ! msgid " They exist, but they are not documented.\n" msgstr "" ! #: toplev.c:4106 #, c-format ! msgid "unrecognized gcc debugging option: %c" msgstr "" ! #: toplev.c:4172 #, c-format ! msgid "unrecognized register name `%s'" msgstr "" ! #: toplev.c:4196 toplev.c:4880 #, c-format ! msgid "Unrecognized option `%s'" msgstr "" ! #: toplev.c:4322 #, c-format ! msgid "use -gdwarf -g%d for DWARF v1, level %d" msgstr "" ! #: toplev.c:4325 ! msgid "use -gdwarf-2 for DWARF v2" msgstr "" ! #: toplev.c:4330 #, c-format ! msgid "ignoring option `%s' due to invalid debug level specification" msgstr "" ! #: toplev.c:4353 toplev.c:4878 #, c-format ! msgid "`%s': unknown or unsupported -g option" msgstr "" ! #: toplev.c:4360 #, c-format ! msgid "`%s' ignored, conflicts with `-g%s'" msgstr "" ! #: toplev.c:4439 ! msgid "-param option missing argument" msgstr "" ! #: toplev.c:4448 #, c-format ! msgid "invalid --param option: %s" msgstr "" ! #: toplev.c:4460 #, c-format ! msgid "invalid parameter value `%s'" msgstr "" ! #: toplev.c:4551 ! msgid "`-a' option (basic block profile) not supported" msgstr "" ! #: toplev.c:4559 ! msgid "`-ax' option (jump profiling) not supported" msgstr "" ! #: toplev.c:4870 #, c-format ! msgid "Ignoring command line option '%s'" msgstr "" ! #: toplev.c:4873 #, c-format ! msgid "(It is valid for %s but not the selected language)" msgstr "" ! #: toplev.c:4911 ! msgid "-Wuninitialized is not supported without -O" msgstr "" ! #: toplev.c:4938 ! msgid "`-ax' and `-a' are conflicting options. `-a' ignored." msgstr "" ! #: toplev.c:4959 ! msgid "instruction scheduling not supported on this target machine" msgstr "" ! #: toplev.c:4963 ! msgid "this target machine does not have delayed branches" msgstr "" ! #: toplev.c:4972 ! msgid "profiling does not work without a frame pointer" msgstr "" ! #: toplev.c:4987 #, c-format ! msgid "-f%sleading-underscore not supported on this target machine" msgstr "" ! #: toplev.c:5007 #, c-format ! msgid "Data size %ld.\n" msgstr "" ! #: toplev.c:5078 #, c-format msgid "" ! "%s%s%s version %s (%s)\n" ! "%s\tcompiled by GNU C version %s.\n" ! "%s%s%s version %s (%s) compiled by CC.\n" msgstr "" ! #: toplev.c:5134 ! msgid "options passed: " msgstr "" ! #: toplev.c:5163 ! msgid "options enabled: " msgstr "" ! #: tradcif.y:110 tradcif.y:121 ! msgid "division by zero in #if" msgstr "" ! #. It's a float since it contains a point. ! #: tradcif.y:230 ! msgid "floating point numbers not allowed in #if expressions" msgstr "" ! #: tradcif.y:276 ! msgid "Invalid number in #if expression" msgstr "" ! #: tradcif.y:361 ! msgid "Invalid character constant in #if" msgstr "" ! #: tradcif.y:398 ! msgid "double quoted strings not allowed in #if expressions" msgstr "" ! #: tradcif.y:411 ! msgid "Invalid token in expression" msgstr "" ! #: tradcif.y:502 ! msgid "octal character constant does not fit in a byte" msgstr "" ! #: tradcif.y:527 ! msgid "hex character constant does not fit in a byte" msgstr "" ! #: tradcif.y:558 ! msgid "empty #if expression" msgstr "" ! #: tradcif.y:572 ! msgid "Junk after end of expression." msgstr "" ! #: tradcpp.c:137 ! msgid "macro or #include recursion too deep" msgstr "" ! #: tradcpp.c:550 #, c-format ! msgid "Usage: %s [switches] input output" msgstr "" ! #: tradcpp.c:566 ! msgid "-traditional is not supported in C++" msgstr "" ! #: tradcpp.c:568 ! msgid "-traditional and -ansi are mutually exclusive" msgstr "" ! #: tradcpp.c:582 ! msgid "Filename missing after -i option" msgstr "" ! #: tradcpp.c:600 ! msgid "Filename missing after -o option" msgstr "" ! #: tradcpp.c:659 #, c-format ! msgid "Target missing after %s option" msgstr "" ! #: tradcpp.c:673 #, c-format ! msgid "Filename missing after %s option" msgstr "" ! #: tradcpp.c:698 #, c-format ! msgid "Macro name missing after -%c option" msgstr "" ! #: tradcpp.c:718 ! msgid "-pedantic and -traditional are mutually exclusive" msgstr "" ! #: tradcpp.c:723 ! msgid "-trigraphs and -traditional are mutually exclusive" msgstr "" ! #: tradcpp.c:749 ! msgid "Directory name missing after -I option" msgstr "" ! #: tradcpp.c:1425 tradcpp.c:3916 ! msgid "`/*' within comment" msgstr "" ! #: tradcpp.c:1800 #, c-format ! msgid "unterminated #%s conditional" msgstr "" ! #: tradcpp.c:2159 ! msgid "not in any file?!" msgstr "" ! #: tradcpp.c:2265 ! msgid "`defined' must be followed by ident or (ident)" msgstr "" ! #: tradcpp.c:2269 ! msgid "cccp error: invalid special hash type" msgstr "" ! #: tradcpp.c:2367 tradcpp.c:2437 ! msgid "#include expects \"fname\" or " msgstr "" ! #: tradcpp.c:2522 #, c-format ! msgid "No include path in which to find %.*s" msgstr "" ! #: tradcpp.c:2700 ! msgid "invalid macro name" msgstr "" ! #: tradcpp.c:2708 ! #, c-format ! msgid "invalid macro name `%s'" msgstr "" ! #: tradcpp.c:2713 ! msgid "\"defined\" cannot be used as a macro name" msgstr "" ! #: tradcpp.c:2740 ! msgid "parameter name starts with a digit in #define" msgstr "" ! #: tradcpp.c:2750 ! msgid "badly punctuated parameter list in #define" msgstr "" ! #: tradcpp.c:2758 ! msgid "unterminated parameter list in #define" msgstr "" ! #: tradcpp.c:2806 ! #, c-format ! msgid "\"%.*s\" redefined" msgstr "" ! #: tradcpp.c:3063 ! msgid "# operator should be followed by a macro argument name" msgstr "" ! #: tradcpp.c:3110 tradcpp.c:3136 tradcpp.c:3150 tradcpp.c:3157 tradcpp.c:3182 ! msgid "invalid format #line command" msgstr "" ! #: tradcpp.c:3208 ! msgid "undefining `defined'" msgstr "" ! #: tradcpp.c:3212 ! #, c-format ! msgid "undefining `%s'" msgstr "" ! #: tradcpp.c:3268 ! msgid "extra text at end of directive" msgstr "" ! #: tradcpp.c:3375 ! #, c-format ! msgid "#error%.*s" msgstr "" ! #: tradcpp.c:3385 ! #, c-format ! msgid "#warning%.*s" msgstr "" ! #: tradcpp.c:3541 ! msgid "#elif not within a conditional" msgstr "" ! #: tradcpp.c:3798 #, c-format ! msgid "#%s not within a conditional" msgstr "" ! #: tradcpp.c:3806 ! msgid "#else or #elif after #else" msgstr "" ! #: tradcpp.c:3846 ! msgid "#else not within a conditional" msgstr "" ! #: tradcpp.c:3877 ! msgid "unbalanced #endif" msgstr "" ! #: tradcpp.c:3971 ! msgid "unterminated string or character constant" msgstr "" ! #: tradcpp.c:4129 #, c-format ! msgid "arguments given to macro `%s'" msgstr "" ! #: tradcpp.c:4135 #, c-format ! msgid "no args to macro `%s'" msgstr "" ! #: tradcpp.c:4137 #, c-format ! msgid "only 1 arg to macro `%s'" msgstr "" ! #: tradcpp.c:4139 #, c-format ! msgid "only %d args to macro `%s'" msgstr "" ! #: tradcpp.c:4141 #, c-format ! msgid "too many (%d) args to macro `%s'" msgstr "" ! #: tradcpp.c:4767 #, c-format ! msgid "" ! "Internal error in %s, at tradcpp.c:%d\n" ! "Please submit a full bug report.\n" ! "See %s for instructions." msgstr "" ! #: tree.c:3879 ! msgid "arrays of functions are not meaningful" msgstr "" ! #: tree.c:3936 ! msgid "function return type cannot be function" msgstr "" ! #: tree.c:4673 ! msgid "invalid initializer for bit string" msgstr "" ! #: tree.c:4732 #, c-format ! msgid "Tree check: expected %s, have %s in %s, at %s:%d" msgstr "" ! #: tree.c:4749 #, c-format ! msgid "Tree check: expected class '%c', have '%c' (%s) in %s, at %s:%d" msgstr "" ! #: varasm.c:639 #, c-format ! msgid "register name not specified for `%s'" msgstr "" ! #: varasm.c:641 #, c-format ! msgid "invalid register name for `%s'" msgstr "" ! #: varasm.c:644 #, c-format ! msgid "data type of `%s' isn't suitable for a register" msgstr "" ! #: varasm.c:647 #, c-format ! msgid "register specified for `%s' isn't suitable for data type" msgstr "" ! #: varasm.c:656 ! msgid "global register variable has initial value" msgstr "" ! #: varasm.c:659 ! msgid "volatile register variables don't work as you might wish" msgstr "" ! #: varasm.c:695 #, c-format ! msgid "register name given for non-register variable `%s'" msgstr "" ! #: varasm.c:1333 #, c-format ! msgid "size of variable `%s' is too large" msgstr "" ! #: varasm.c:1373 #, c-format ! msgid "" ! "alignment of `%s' is greater than maximum object file alignment. Using %d." msgstr "" ! #: varasm.c:1420 #, c-format ! msgid "requested alignment for %s is greater than implemented alignment of %d." msgstr "" ! #: varasm.c:1899 ! msgid "floating point trap outputting a constant" msgstr "" ! #: varasm.c:4304 ! msgid "initializer for integer value is too complicated" msgstr "" ! #: varasm.c:4310 ! msgid "initializer for floating value is not a floating constant" msgstr "" ! #: varasm.c:4367 ! msgid "unknown set constructor type" msgstr "" ! #: varasm.c:4572 #, c-format ! msgid "invalid initial value for member `%s'" msgstr "" ! #: varasm.c:4754 #, c-format ! msgid "weak declaration of `%s' must be public" msgstr "" ! #: varasm.c:4756 #, c-format ! msgid "weak declaration of `%s' must precede definition" msgstr "" ! #: varasm.c:4852 ! msgid "only weak aliases are supported in this configuration" msgstr "" ! #: varasm.c:4857 ! msgid "alias definitions not supported in this configuration; ignored" msgstr "" ! #: varray.c:87 #, c-format ! msgid "Virtual array %s[%lu]: element %lu out of bounds" msgstr "" ! #. Print an error message for unrecognized stab codes. ! #: xcoffout.c:176 #, c-format ! msgid "No sclass for %s stab (0x%x)\n" msgstr "" ! #: config/alpha/freebsd.h:35 config/i386/freebsd-aout.h:236 ! msgid "`-p' not supported; use `-pg' and gprof(1)" msgstr "" ! #: config/arc/arc.h:61 config/mips/mips.h:918 ! msgid "may not use both -EB and -EL" msgstr "" ! #: config/arm/arm.h:216 ! msgid "-mapcs-26 and -mapcs-32 may not be used together" msgstr "" ! #: config/arm/arm.h:228 ! msgid "-msoft-float and -mhard_float may not be used together" msgstr "" ! #: config/arm/arm.h:239 ! msgid "-mbig-endian and -mlittle-endian may not be used together" msgstr "" ! #: config/arm/arm.h:257 ! msgid "Incompatible interworking options" msgstr "" ! #: config/arm/riscix.h:73 config/arm/riscix.h:135 ! msgid "-mbsd and -pedantic incompatible" msgstr "" ! #: config/arm/riscix.h:74 config/arm/riscix.h:136 ! msgid "-mbsd and -mxopen incompatible" msgstr "" ! #: config/arm/riscix.h:75 config/arm/riscix.h:137 ! msgid "-mxopen and -pedantic incompatible" msgstr "" ! #: config/dsp16xx/dsp16xx.h:101 config/dsp16xx/dsp16xx.h:110 ! msgid "A -ifile option requires a -map option" msgstr "" ! #: config/i386/cygwin.h:103 ! msgid "mno-cygwin and mno-win32 are not compatible" msgstr "" ! #: config/i386/cygwin.h:158 config/i386/mingw32.h:63 ! msgid "shared and mdll are not compatible" msgstr "" ! #: config/i386/sco5.h:777 config/i386/sco5.h:852 ! msgid "-static not valid with -mcoff" msgstr "" ! #: config/i386/sco5.h:778 config/i386/sco5.h:853 ! msgid "-shared not valid with -mcoff" msgstr "" ! #: config/i386/sco5.h:779 config/i386/sco5.h:854 ! msgid "-symbolic not valid with -mcoff" msgstr "" ! #: config/i386/sco5.h:817 ! msgid "-fpic is not valid with -mcoff" msgstr "" ! #: config/i386/sco5.h:818 ! msgid "-fPIC is not valid with -mcoff" msgstr "" ! #: config/i386/sco5.h:855 ! msgid "-fpic not valid with -mcoff" msgstr "" ! #: config/i386/sco5.h:856 ! msgid "-fPIC not valid with -mcoff" msgstr "" ! #: config/i386/unix.h:122 ! msgid "bx]" msgstr "" ! #: config/i386/unix.h:124 ! msgid "bx" msgstr "" ! #: config/i386/unix.h:125 ! msgid "cx" msgstr "" ! #: config/i860/fx2800.h:305 ! msgid "-p option not supported: use -pg instead" msgstr "" ! #: config/mcore/mcore.h:65 msgid "choose either big or little endian, not both" msgstr "" ! #: config/mcore/mcore.h:68 msgid "choose either m340 or m210 not both" msgstr "" ! #: config/mcore/mcore.h:69 msgid "the m210 does not have little endian support" msgstr "" ! #: config/mips/mips.h:774 ! msgid "-pipe is not supported." msgstr "" ! #: config/mips/mips.h:913 ! msgid "may not use both -mfp64 and -msingle-float" msgstr "" ! #: config/mips/mips.h:914 ! msgid "may not use both -mfp64 and -m4650" msgstr "" ! #: config/mips/r3900.h:28 config/mips/r3900.h:42 ! msgid "-mhard-float not supported." msgstr "" ! #: config/mips/r3900.h:30 config/mips/r3900.h:44 ! msgid "-msingle-float and -msoft-float can not both be specified." msgstr "" ! #: config/nextstep.h:163 config/nextstep.h:166 ! msgid "-p profiling is no longer supported. Use -pg instead." msgstr "" ! #: config/vax/vax.h:41 config/vax/vax.h:42 msgid "profiling not supported with -mg\n" msgstr "" ! #: f/lang-specs.h:35 gcc.c:593 ! msgid "GNU C does not support -C without using -E" msgstr "" ! #: gcc.c:614 java/jvspec.c:68 ! msgid "-pg and -fomit-frame-pointer are incompatible" msgstr "" ! #: gcc.c:762 ! msgid "-E required when input is from standard input" msgstr "" ! #: gcc.c:766 ! msgid "Compilation of header file requested" msgstr "" ! #: java/lang-specs.h:33 ! msgid "-fjni and -femit-class-files are incompatible" msgstr "" ! #: java/lang-specs.h:34 ! msgid "-fjni and -femit-class-file are incompatible" msgstr "" --- 12839,20338 ---- #. each pair being { "NAME", VALUE } #. where VALUE is the bits to set or minus the bits to clear. #. An empty string NAME is used to identify the default VALUE. ! #: config/v850/v850.h:120 msgid "Support Green Hills ABI" msgstr "" ! #: config/v850/v850.h:123 msgid "Prohibit PC relative function calls" msgstr "" ! #: config/v850/v850.h:126 msgid "Reuse r30 on a per function basis" msgstr "" ! #: config/v850/v850.h:129 msgid "Use stubs for function prologues" msgstr "" ! #: config/v850/v850.h:132 msgid "Same as: -mep -mprolog-function" msgstr "" ! #: config/v850/v850.h:133 msgid "Enable backend debugging" msgstr "" ! #: config/v850/v850.h:135 msgid "Compile for the v850 processor" msgstr "" ! #: config/v850/v850.h:138 msgid "Use 4 byte entries in switch tables" msgstr "" ! #: config/v850/v850.h:164 msgid "Set the max size of data eligible for the TDA area" msgstr "" ! #: config/v850/v850.h:167 msgid "Set the max size of data eligible for the SDA area" msgstr "" ! #: config/v850/v850.h:170 msgid "Set the max size of data eligible for the ZDA area" msgstr "" ! #: config/xtensa/xtensa.c:1048 config/xtensa/xtensa.c:1082 ! #: config/xtensa/xtensa.c:1091 ! msgid "bad test" msgstr "" ! #: config/xtensa/xtensa.c:1790 ! msgid "boolean registers required for the floating-point option" msgstr "" ! #: config/xtensa/xtensa.c:1965 ! msgid "invalid mask" msgstr "" ! #: config/xtensa/xtensa.c:2017 ! msgid "invalid address" msgstr "" ! #: config/xtensa/xtensa.c:2042 ! msgid "no register in address" msgstr "" ! #: config/xtensa/xtensa.c:2050 ! msgid "address offset not a constant" msgstr "" ! #: config/xtensa/xtensa.h:114 ! msgid "Use the Xtensa code density option" msgstr "" ! #: config/xtensa/xtensa.h:116 ! msgid "Do not use the Xtensa code density option" msgstr "" ! #: config/xtensa/xtensa.h:118 ! msgid "Use the Xtensa MAC16 option" msgstr "" ! #: config/xtensa/xtensa.h:120 ! msgid "Do not use the Xtensa MAC16 option" msgstr "" ! #: config/xtensa/xtensa.h:122 ! msgid "Use the Xtensa MUL16 option" msgstr "" ! #: config/xtensa/xtensa.h:124 ! msgid "Do not use the Xtensa MUL16 option" msgstr "" ! #: config/xtensa/xtensa.h:126 ! msgid "Use the Xtensa MUL32 option" msgstr "" ! #: config/xtensa/xtensa.h:128 ! msgid "Do not use the Xtensa MUL32 option" msgstr "" ! #. undocumented ! #. undocumented ! #: config/xtensa/xtensa.h:134 ! msgid "Use the Xtensa NSA option" msgstr "" ! #: config/xtensa/xtensa.h:136 ! msgid "Do not use the Xtensa NSA option" msgstr "" ! #: config/xtensa/xtensa.h:138 ! msgid "Use the Xtensa MIN/MAX option" msgstr "" ! #: config/xtensa/xtensa.h:140 ! msgid "Do not use the Xtensa MIN/MAX option" msgstr "" ! #: config/xtensa/xtensa.h:142 ! msgid "Use the Xtensa SEXT option" msgstr "" ! #: config/xtensa/xtensa.h:144 ! msgid "Do not use the Xtensa SEXT option" msgstr "" ! #: config/xtensa/xtensa.h:146 ! msgid "Use the Xtensa boolean register option" msgstr "" ! #: config/xtensa/xtensa.h:148 ! msgid "Do not use the Xtensa boolean register option" msgstr "" ! #: config/xtensa/xtensa.h:150 ! msgid "Use the Xtensa floating-point unit" msgstr "" ! #: config/xtensa/xtensa.h:152 ! msgid "Do not use the Xtensa floating-point unit" msgstr "" ! #. undocumented ! #. undocumented ! #. undocumented ! #. undocumented ! #. undocumented ! #. undocumented ! #. undocumented ! #. undocumented ! #: config/xtensa/xtensa.h:170 ! msgid "Disable fused multiply/add and multiply/subtract FP instructions" msgstr "" ! #: config/xtensa/xtensa.h:172 ! msgid "Enable fused multiply/add and multiply/subtract FP instructions" msgstr "" ! #: config/xtensa/xtensa.h:174 ! msgid "Serialize volatile memory references with MEMW instructions" msgstr "" ! #: config/xtensa/xtensa.h:176 ! msgid "Do not serialize volatile memory references with MEMW instructions" msgstr "" ! #: config/xtensa/xtensa.h:178 ! msgid "Intersperse literal pools with code in the text section" msgstr "" ! #: config/xtensa/xtensa.h:180 ! msgid "Put literal pools in a separate literal section" msgstr "" ! #: config/xtensa/xtensa.h:182 ! msgid "Automatically align branch targets to reduce branch penalties" msgstr "" ! #: config/xtensa/xtensa.h:184 ! msgid "Do not automatically align branch targets" msgstr "" ! #: config/xtensa/xtensa.h:186 ! msgid "Use indirect CALLXn instructions for large programs" msgstr "" ! #: config/xtensa/xtensa.h:188 ! msgid "Use direct CALLn instructions for fast calls" msgstr "" ! #: ada/misc.c:219 ! msgid "`-gnat' misspelled as `-gant'" msgstr "" ! #: cp/call.c:270 cp/init.c:1635 ! msgid "qualified type `%T' does not match destructor name `~%T'" msgstr "" ! #: cp/call.c:279 ! msgid "type of `%E' does not match destructor type `%T' (type was `%T')" msgstr "" ! #: cp/call.c:288 ! msgid "`%D' is a namespace" msgstr "" ! #: cp/call.c:296 ! msgid "base object `%E' of scoped method call is of non-aggregate type `%T'" msgstr "" ! #: cp/call.c:394 ! msgid "unable to call pointer to member function here" msgstr "" ! #: cp/call.c:530 ! msgid "destructors take no parameters" msgstr "" ! #: cp/call.c:537 ! msgid "destructor name `~%T' does not match type `%T' of expression" msgstr "" ! #: cp/call.c:2374 ! msgid "%s %D(%T, %T, %T) " msgstr "" ! #: cp/call.c:2379 ! msgid "%s %D(%T, %T) " msgstr "" ! #: cp/call.c:2383 ! msgid "%s %D(%T) " msgstr "" ! #: cp/call.c:2387 ! msgid "%s %T " msgstr "" ! #: cp/call.c:2389 ! msgid "%s %+#D%s" msgstr "" ! #: cp/call.c:2546 ! msgid "no viable candidates" msgstr "" ! #: cp/call.c:2560 ! msgid "conversion from `%T' to `%T' is ambiguous" msgstr "" ! #: cp/call.c:2677 ! msgid "no matching function for call to `%D(%A)'" msgstr "" ! #: cp/call.c:2688 cp/call.c:4681 ! msgid "call of overloaded `%D(%A)' is ambiguous" msgstr "" ! #. It's no good looking for an overloaded operator() on a ! #. pointer-to-member-function. ! #: cp/call.c:2715 ! #, c-format ! msgid "" ! "pointer-to-member function %E cannot be called without an object; consider " ! "using .* or ->*" msgstr "" ! #: cp/call.c:2784 ! msgid "no match for call to `(%T) (%A)'" msgstr "" ! #: cp/call.c:2794 ! msgid "call of `(%T) (%A)' is ambiguous" msgstr "" ! #: cp/call.c:2829 ! msgid "%s for `%T ? %T : %T' operator" msgstr "" ! #: cp/call.c:2834 ! msgid "%s for `%T %s' operator" msgstr "" ! #: cp/call.c:2837 ! msgid "%s for `%T [%T]' operator" msgstr "" ! #: cp/call.c:2842 ! msgid "%s for `%T %s %T' operator" msgstr "" ! #: cp/call.c:2845 ! msgid "%s for `%s %T' operator" msgstr "" ! #: cp/call.c:2937 ! msgid "ISO C++ forbids omitting the middle term of a ?: expression" msgstr "" ! #: cp/call.c:2996 #, c-format ! msgid "`%E' has type `void' and is not a throw-expression" msgstr "" ! #: cp/call.c:3029 cp/call.c:3229 ! msgid "operands to ?: have different types" msgstr "" ! #: cp/call.c:3182 ! msgid "enumeral mismatch in conditional expression: `%T' vs `%T'" msgstr "" ! #: cp/call.c:3189 ! msgid "enumeral and non-enumeral type in conditional expression" msgstr "" ! #: cp/call.c:3270 ! msgid "`%D' must be declared before use" msgstr "" ! #: cp/call.c:3433 ! msgid "no `%D(int)' declared for postfix `%s', trying prefix operator instead" msgstr "" ! #: cp/call.c:3480 ! msgid "using synthesized `%#D' for copy assignment" msgstr "" ! #: cp/call.c:3482 ! msgid " where cfront would use `%#D'" msgstr "" ! #: cp/call.c:3509 ! msgid "comparison between `%#T' and `%#T'" msgstr "" ! #: cp/call.c:3748 ! msgid "no suitable `operator delete' for `%T'" msgstr "" ! #: cp/call.c:3767 ! msgid "`%+#D' is private" msgstr "" ! #: cp/call.c:3769 ! msgid "`%+#D' is protected" msgstr "" ! #: cp/call.c:3771 ! msgid "`%+#D' is inaccessible" msgstr "" ! #: cp/call.c:3772 ! msgid "within this context" msgstr "" ! #: cp/call.c:3814 ! msgid "invalid conversion from `%T' to `%T'" msgstr "" ! #: cp/call.c:3816 cp/call.c:3955 cp/call.c:3957 ! msgid " initializing argument %P of `%D'" msgstr "" ! #: cp/call.c:3879 cp/call.c:3883 ! msgid " initializing argument %P of `%D' from result of `%D'" msgstr "" ! #: cp/call.c:3889 cp/call.c:3892 ! msgid " initializing temporary from result of `%D'" msgstr "" ! #. Undefined behaviour [expr.call] 5.2.2/7. ! #: cp/call.c:4026 ! msgid "cannot pass objects of non-POD type `%#T' through `...'" msgstr "" ! #. Undefined behaviour [expr.call] 5.2.2/7. ! #: cp/call.c:4051 ! msgid "cannot receive objects of non-POD type `%#T' through `...'" msgstr "" ! #: cp/call.c:4193 ! msgid "passing `%T' as `this' argument of `%#D' discards qualifiers" msgstr "" ! #: cp/call.c:4443 ! msgid "could not find class$ field in java interface type `%T'" msgstr "" ! #: cp/call.c:4544 cp/typeck.c:2018 ! msgid "request for member `%D' in `%E', which is of non-aggregate type `%T'" msgstr "" ! #: cp/call.c:4670 ! msgid "no matching function for call to `%T::%D(%A)%#V'" msgstr "" ! #: cp/call.c:4700 ! msgid "cannot call member function `%D' without object" msgstr "" ! #: cp/call.c:5313 ! msgid "passing `%T' chooses `%T' over `%T'" msgstr "" ! #: cp/call.c:5315 cp/decl2.c:4508 ! msgid " in call to `%D'" msgstr "" ! #: cp/call.c:5364 cp/call.c:5489 ! msgid "choosing `%D' over `%D'" msgstr "" ! #: cp/call.c:5365 ! msgid " for conversion from `%T' to `%T'" msgstr "" ! #: cp/call.c:5367 ! msgid " because conversion sequence for the argument is better" ! msgstr "" ! ! #: cp/call.c:5491 msgid "" ! " because worst conversion for the former is better than worst conversion " ! "for the latter" msgstr "" ! #: cp/call.c:5607 cp/call.c:5628 ! msgid "could not convert `%E' to `%T'" msgstr "" ! #: cp/class.c:287 ! msgid "" ! "cannot convert from base `%T' to derived type `%T' via virtual base `%T'" msgstr "" ! #: cp/class.c:1020 ! msgid "`%#D' and `%#D' cannot be overloaded" msgstr "" ! #. There has already been a declaration of this method ! #. or member template. ! #: cp/class.c:1031 ! msgid "`%D' has already been declared in `%T'" msgstr "" ! #: cp/class.c:1112 ! msgid "duplicate enum value `%D'" msgstr "" ! #: cp/class.c:1115 ! msgid "duplicate field `%D' (as enum and non-enum)" msgstr "" ! #: cp/class.c:1122 ! msgid "duplicate nested type `%D'" msgstr "" ! #: cp/class.c:1133 ! msgid "duplicate field `%D' (as type and non-type)" msgstr "" ! #: cp/class.c:1137 ! msgid "duplicate member `%D'" msgstr "" ! #: cp/class.c:1180 ! msgid "conflicting access specifications for method `%D', ignored" msgstr "" ! #: cp/class.c:1182 #, c-format ! msgid "conflicting access specifications for field `%s', ignored" msgstr "" ! #: cp/class.c:1225 ! msgid "`%D' names constructor" msgstr "" ! #: cp/class.c:1231 ! msgid "`%D' invalid in `%T'" msgstr "" ! #: cp/class.c:1239 ! msgid "no members matching `%D' in `%#T'" msgstr "" ! #: cp/class.c:1271 cp/class.c:1279 ! msgid "`%D' invalid in `%#T'" msgstr "" ! #: cp/class.c:1272 ! msgid " because of local method `%#D' with same name" msgstr "" ! #: cp/class.c:1280 ! msgid " because of local member `%#D' with same name" msgstr "" ! #: cp/class.c:1352 ! msgid "base class `%#T' has a non-virtual destructor" msgstr "" ! #: cp/class.c:1372 msgid "" ! "base `%T' with only non-default constructor in class without a constructor" msgstr "" ! #: cp/class.c:1959 ! msgid "all member functions in class `%T' are private" msgstr "" ! #: cp/class.c:1973 ! msgid "`%#T' only defines a private destructor and has no friends" msgstr "" ! #: cp/class.c:2016 ! msgid "`%#T' only defines private constructors and has no friends" msgstr "" ! #: cp/class.c:2137 cp/class.c:5064 ! msgid "redefinition of `%#T'" msgstr "" ! #: cp/class.c:2138 ! msgid "previous definition of `%#T'" msgstr "" ! #: cp/class.c:2468 ! msgid "no unique final overrider for `%D' in `%T'" msgstr "" ! #. Here we know it is a hider, and no overrider exists. ! #: cp/class.c:2850 ! msgid "`%D' was hidden" msgstr "" ! #: cp/class.c:2851 ! msgid " by `%D'" msgstr "" ! #: cp/class.c:2893 ! msgid "ISO C++ forbids member `%D' with same name as enclosing class" msgstr "" ! #: cp/class.c:2898 cp/decl2.c:1883 ! msgid "`%#D' invalid; an anonymous union can only have non-static data members" msgstr "" ! #: cp/class.c:2904 cp/decl2.c:1889 ! msgid "private member `%#D' in anonymous union" msgstr "" ! #: cp/class.c:2907 cp/decl2.c:1891 ! msgid "protected member `%#D' in anonymous union" msgstr "" ! #: cp/class.c:3059 ! msgid "bit-field `%#D' with non-integral type" msgstr "" ! #: cp/class.c:3079 ! msgid "bit-field `%D' width not an integer constant" msgstr "" ! #: cp/class.c:3085 ! msgid "negative width in bit-field `%D'" msgstr "" ! #: cp/class.c:3090 ! msgid "zero width for bit-field `%D'" msgstr "" ! #: cp/class.c:3096 ! msgid "width of `%D' exceeds its type" msgstr "" ! #: cp/class.c:3105 ! msgid "`%D' is too small to hold all values of `%#T'" msgstr "" ! #: cp/class.c:3189 ! msgid "member `%#D' with constructor not allowed in union" msgstr "" ! #: cp/class.c:3192 ! msgid "member `%#D' with destructor not allowed in union" msgstr "" ! #: cp/class.c:3195 ! msgid "member `%#D' with copy assignment operator not allowed in union" msgstr "" ! #: cp/class.c:3222 ! msgid "multiple fields in union `%T' initialized" msgstr "" ! #: cp/class.c:3341 ! msgid "field `%D' in local class cannot be static" msgstr "" ! #: cp/class.c:3347 ! msgid "field `%D' invalidly declared function type" msgstr "" ! #: cp/class.c:3354 ! msgid "field `%D' invalidly declared method type" msgstr "" ! #: cp/class.c:3360 ! msgid "field `%D' invalidly declared offset type" msgstr "" ! #. Unions cannot have static members. ! #: cp/class.c:3378 ! msgid "field `%D' declared static in union" msgstr "" ! #: cp/class.c:3404 ! msgid "non-static reference `%#D' in class without a constructor" msgstr "" ! #: cp/class.c:3435 ! msgid "non-static const member `%#D' in class without a constructor" msgstr "" ! #: cp/class.c:3450 ! msgid "field `%#D' with same name as class" msgstr "" ! #: cp/class.c:3468 ! msgid "`%#T' has pointer data members" msgstr "" ! #: cp/class.c:3472 ! msgid " but does not override `%T(const %T&)'" msgstr "" ! #: cp/class.c:3474 ! msgid " or `operator=(const %T&)'" msgstr "" ! #: cp/class.c:3477 ! msgid " but does not override `operator=(const %T&)'" msgstr "" ! #: cp/class.c:3943 ! msgid "initializer specified for non-virtual method `%D'" msgstr "" ! #: cp/class.c:4728 ! msgid "virtual base `%T' inaccessible in `%T' due to ambiguity" msgstr "" ! #: cp/class.c:4798 ! msgid "direct base `%T' inaccessible in `%T' due to ambiguity" msgstr "" ! #: cp/class.c:5225 ! msgid "`%#T' has virtual functions but non-virtual destructor" msgstr "" ! #: cp/class.c:5309 ! msgid "trying to finish struct, but kicked out due to previous parse errors" msgstr "" ! #: cp/class.c:5766 ! #, c-format ! msgid "language string `\"%s\"' not recognized" msgstr "" ! #: cp/class.c:5862 ! msgid "" ! "cannot resolve overloaded function `%D' based on conversion to type `%T'" msgstr "" ! #: cp/class.c:5983 ! msgid "no matches converting function `%D' to type `%#T'" msgstr "" ! #: cp/class.c:6006 ! msgid "converting overloaded function `%D' to type `%#T' is ambiguous" msgstr "" ! #: cp/class.c:6032 ! msgid "assuming pointer to member `%D'" msgstr "" ! #: cp/class.c:6035 ! #, c-format ! msgid "(a pointer to member can only be formed with `&%E')" msgstr "" ! #: cp/class.c:6079 cp/class.c:6247 cp/class.c:6254 ! msgid "not enough type information" msgstr "" ! #: cp/class.c:6088 ! msgid "argument of type `%T' does not match `%T'" msgstr "" ! #: cp/class.c:6231 ! msgid "invalid operation on uninstantiated type" msgstr "" ! #. [basic.scope.class] ! #. ! #. A name N used in a class S shall refer to the same declaration ! #. in its context and when re-evaluated in the completed scope of ! #. S. ! #: cp/class.c:6483 cp/decl.c:1032 cp/decl.c:3172 cp/pt.c:1842 ! msgid "declaration of `%#D'" msgstr "" ! #: cp/class.c:6484 ! msgid "changes meaning of `%D' from `%+#D'" msgstr "" ! #: cp/cvt.c:88 ! msgid "can't convert from incomplete type `%T' to `%T'" msgstr "" ! #: cp/cvt.c:97 ! msgid "conversion of `%E' from `%T' to `%T' is ambiguous" msgstr "" ! #: cp/cvt.c:126 ! msgid "converting from `%T' to `%T'" msgstr "" ! #: cp/cvt.c:198 cp/cvt.c:202 ! msgid "pointer to member cast from `%T' to `%T' is via virtual base" msgstr "" ! #: cp/cvt.c:220 cp/cvt.c:233 cp/cvt.c:272 ! msgid "cannot convert `%E' from type `%T' to type `%T'" msgstr "" ! #: cp/cvt.c:525 ! msgid "conversion from `%T' to `%T' discards qualifiers" msgstr "" ! #: cp/cvt.c:543 ! msgid "casting `%T' to `%T' does not dereference pointer" msgstr "" ! #: cp/cvt.c:572 ! msgid "cannot convert type `%T' to type `%T'" msgstr "" ! #: cp/cvt.c:689 ! msgid "conversion from `%#T' to `%#T'" msgstr "" ! #: cp/cvt.c:701 ! msgid "`%#T' used where a `%T' was expected" msgstr "" ! #: cp/cvt.c:718 ! msgid "the address of `%D', will always be `true'" msgstr "" ! #: cp/cvt.c:738 ! msgid "`%#T' used where a floating point value was expected" msgstr "" ! #: cp/cvt.c:793 ! msgid "conversion from `%T' to non-scalar type `%T' requested" msgstr "" ! #: cp/cvt.c:879 ! msgid "object of incomplete type `%T' will not be accessed in %s" msgstr "" ! #: cp/cvt.c:882 ! msgid "object of type `%T' will not be accessed in %s" msgstr "" ! #: cp/cvt.c:898 ! msgid "object `%E' of incomplete type `%T' will not be accessed in %s" msgstr "" ! #. [over.over] enumerates the places where we can take the address ! #. of an overloaded function, and this is not one of them. ! #: cp/cvt.c:918 ! #, c-format ! msgid "%s cannot resolve address of overloaded function" msgstr "" ! #. Only warn when there is no &. ! #: cp/cvt.c:923 ! #, c-format ! msgid "%s is a reference, not call, to function `%E'" msgstr "" ! #: cp/cvt.c:1061 ! msgid "converting NULL to non-pointer type" msgstr "" ! #: cp/cvt.c:1137 ! msgid "ambiguous default type conversion from `%T'" msgstr "" ! #: cp/cvt.c:1139 ! msgid " candidate conversions include `%D' and `%D'" msgstr "" ! #: cp/decl.c:1033 cp/decl.c:3275 ! msgid "conflicts with previous declaration `%#D'" msgstr "" ! #: cp/decl.c:1222 ! msgid "label `%D' used but not defined" msgstr "" ! #: cp/decl.c:1227 ! msgid "label `%D' defined but not used" msgstr "" ! #: cp/decl.c:2294 ! msgid "namespace alias `%D' not allowed here, assuming `%D'" msgstr "" ! #: cp/decl.c:3078 cp/decl.c:3483 ! msgid "previous declaration of `%D'" msgstr "" ! #: cp/decl.c:3159 cp/decl.c:3197 ! msgid "shadowing %s function `%#D'" msgstr "" ! #: cp/decl.c:3168 ! msgid "library function `%#D' redeclared as non-function `%#D'" msgstr "" ! #: cp/decl.c:3173 ! msgid "conflicts with built-in declaration `%#D'" msgstr "" ! #: cp/decl.c:3192 cp/decl.c:3285 cp/decl.c:3301 ! msgid "new declaration `%#D'" msgstr "" ! #: cp/decl.c:3193 ! msgid "ambiguates built-in declaration `%#D'" msgstr "" ! #: cp/decl.c:3249 ! msgid "`%#D' redeclared as different kind of symbol" msgstr "" ! #: cp/decl.c:3252 ! msgid "previous declaration of `%#D'" msgstr "" ! #: cp/decl.c:3274 ! msgid "declaration of template `%#D'" msgstr "" ! #: cp/decl.c:3286 cp/decl.c:3302 ! msgid "ambiguates old declaration `%#D'" msgstr "" ! #: cp/decl.c:3294 ! msgid "declaration of C function `%#D' conflicts with" msgstr "" ! #: cp/decl.c:3296 ! msgid "previous declaration `%#D' here" msgstr "" ! #: cp/decl.c:3312 ! msgid "conflicting types for `%#D'" msgstr "" ! #: cp/decl.c:3313 ! msgid "previous declaration as `%#D'" msgstr "" ! #: cp/decl.c:3356 ! msgid "`%#D' previously defined here" msgstr "" ! #: cp/decl.c:3357 ! msgid "`%#D' previously declared here" msgstr "" ! #. Prototype decl follows defn w/o prototype. ! #: cp/decl.c:3366 ! msgid "prototype for `%#D'" msgstr "" ! #: cp/decl.c:3367 ! msgid "follows non-prototype definition here" msgstr "" ! #: cp/decl.c:3379 ! msgid "previous declaration of `%#D' with %L linkage" msgstr "" ! #: cp/decl.c:3381 ! msgid "conflicts with new declaration with %L linkage" msgstr "" ! #: cp/decl.c:3404 cp/decl.c:3411 ! msgid "default argument given for parameter %d of `%#D'" msgstr "" ! #: cp/decl.c:3406 cp/decl.c:3413 ! msgid "after previous specification in `%#D'" msgstr "" ! #: cp/decl.c:3422 ! msgid "`%#D' was used before it was declared inline" msgstr "" ! #: cp/decl.c:3424 ! msgid "previous non-inline declaration here" msgstr "" ! #: cp/decl.c:3482 ! msgid "redundant redeclaration of `%D' in same scope" msgstr "" ! #: cp/decl.c:3566 ! #, c-format ! msgid "declaration of `%F' throws different exceptions" msgstr "" ! #: cp/decl.c:3568 ! #, c-format ! msgid "than previous declaration `%F'" msgstr "" ! #. From [temp.expl.spec]: ! #. ! #. If a template, a member template or the member of a class ! #. template is explicitly specialized then that ! #. specialization shall be declared before the first use of ! #. that specialization that would cause an implicit ! #. instantiation to take place, in every translation unit in ! #. which such a use occurs. ! #: cp/decl.c:3701 ! msgid "explicit specialization of %D after first use" msgstr "" ! #: cp/decl.c:3946 ! msgid "`%#D' used prior to declaration" msgstr "" ! #: cp/decl.c:3977 ! msgid "redeclaration of `wchar_t' as `%T'" msgstr "" ! #. A redeclaration of main, but not a duplicate of the ! #. previous one. ! #. ! #. [basic.start.main] ! #. ! #. This function shall not be overloaded. ! #: cp/decl.c:4005 ! msgid "invalid redeclaration of `%D'" msgstr "" ! #: cp/decl.c:4006 ! msgid "as `%D'" msgstr "" ! #: cp/decl.c:4096 ! msgid "previous external decl of `%#D'" msgstr "" ! #: cp/decl.c:4137 ! msgid "`%D' was previously implicitly declared to return `int'" msgstr "" ! #: cp/decl.c:4197 ! msgid "extern declaration of `%#D' doesn't match" msgstr "" ! #: cp/decl.c:4198 ! msgid "global declaration `%#D'" msgstr "" ! #: cp/decl.c:4229 ! msgid "declaration of `%#D' shadows a parameter" ! msgstr "" ! ! #: cp/decl.c:4249 #, c-format ! msgid "declaration of `%s' shadows a member of `this'" msgstr "" ! #: cp/decl.c:4600 ! msgid "`%#D' hides constructor for `%#T'" msgstr "" ! #: cp/decl.c:4615 ! msgid "`%#D' conflicts with previous using declaration `%#D'" msgstr "" ! #: cp/decl.c:4627 ! msgid "previous non-function declaration `%#D'" msgstr "" ! #: cp/decl.c:4628 ! msgid "conflicts with function declaration `%#D'" msgstr "" ! #: cp/decl.c:4718 ! msgid "implicit declaration of function `%#D'" msgstr "" ! #: cp/decl.c:4876 ! #, c-format ! msgid "label `%s' referenced outside of any function" msgstr "" ! #: cp/decl.c:4979 cp/decl.c:5003 cp/decl.c:5096 ! msgid "jump to label `%D'" msgstr "" ! #: cp/decl.c:4981 cp/decl.c:5005 ! msgid "jump to case label" msgstr "" ! #: cp/decl.c:4989 ! msgid " crosses initialization of `%#D'" msgstr "" ! #: cp/decl.c:4992 cp/decl.c:5112 ! msgid " enters scope of non-POD `%#D'" msgstr "" ! #: cp/decl.c:5012 cp/decl.c:5116 ! msgid " enters try block" msgstr "" ! #. Can't skip init of __exception_info. ! #: cp/decl.c:5014 cp/decl.c:5108 cp/decl.c:5118 ! msgid " enters catch block" msgstr "" ! #: cp/decl.c:5097 ! msgid " from here" msgstr "" ! #: cp/decl.c:5110 ! msgid " skips initialization of `%#D'" msgstr "" ! #: cp/decl.c:5145 ! msgid "label named wchar_t" msgstr "" ! #: cp/decl.c:5149 ! msgid "duplicate label `%D'" ! msgstr "" ! ! #: cp/decl.c:5234 #, c-format ! msgid "case label `%E' not within a switch statement" msgstr "" ! #. Definition isn't the kind we were looking for. ! #: cp/decl.c:5411 cp/decl.c:5430 ! msgid "`%#D' redeclared as %C" msgstr "" ! #. This happens for A::B where B is a template, and there are no ! #. template arguments. ! #: cp/decl.c:5518 cp/typeck.c:1980 ! msgid "invalid use of `%D'" msgstr "" ! #: cp/decl.c:5559 ! msgid "`%D::%D' is not a template" msgstr "" ! #: cp/decl.c:5576 ! msgid "`%D' undeclared in namespace `%D'" msgstr "" ! #: cp/decl.c:5713 ! msgid "`%D' used without template parameters" msgstr "" ! #: cp/decl.c:5724 cp/decl.c:5740 cp/decl.c:5828 ! msgid "no class template named `%#T' in `%#T'" msgstr "" ! #: cp/decl.c:5758 cp/decl.c:5788 ! msgid "no type named `%#T' in `%#T'" msgstr "" ! #: cp/decl.c:6011 ! msgid "lookup of `%D' finds `%#D'" msgstr "" ! #: cp/decl.c:6013 ! msgid " instead of `%D' from dependent base class" msgstr "" ! #: cp/decl.c:6015 ! msgid " (use `typename %T::%D' if that's what you meant)" ! msgstr "" ! ! #: cp/decl.c:6188 msgid "" ! "lookup of `%D' in the scope of `%#T' (`%#D') does not match lookup in the " ! "current scope (`%#D')" msgstr "" ! #: cp/decl.c:7033 ! msgid "an anonymous union cannot have function members" msgstr "" ! #: cp/decl.c:7050 ! msgid "member %#D' with constructor not allowed in anonymous aggregate" msgstr "" ! #: cp/decl.c:7053 ! msgid "member %#D' with destructor not allowed in anonymous aggregate" msgstr "" ! #: cp/decl.c:7056 msgid "" ! "member %#D' with copy assignment operator not allowed in anonymous aggregate" msgstr "" ! #: cp/decl.c:7094 ! msgid "redeclaration of C++ built-in type `%T'" msgstr "" ! #: cp/decl.c:7129 ! msgid "multiple types in one declaration" msgstr "" ! #: cp/decl.c:7132 ! msgid "declaration does not declare anything" msgstr "" ! #: cp/decl.c:7156 ! msgid "missing type-name in typedef-declaration" msgstr "" ! #: cp/decl.c:7163 ! msgid "ISO C++ prohibits anonymous structs" msgstr "" ! #: cp/decl.c:7170 ! msgid "`%D' can only be specified for functions" msgstr "" ! #: cp/decl.c:7172 ! msgid "`%D' can only be specified inside a class" msgstr "" ! #: cp/decl.c:7174 ! msgid "`%D' can only be specified for constructors" msgstr "" ! #: cp/decl.c:7177 ! msgid "`%D' can only be specified for objects and functions" msgstr "" ! #: cp/decl.c:7326 ! msgid "typedef `%D' is initialized" msgstr "" ! #: cp/decl.c:7332 ! msgid "function `%#D' is initialized like a variable" msgstr "" ! #: cp/decl.c:7344 ! msgid "declaration of `%#D' has `extern' and is initialized" msgstr "" ! #: cp/decl.c:7378 ! msgid "`%#D' is not a static member of `%#T'" msgstr "" ! #: cp/decl.c:7383 ! msgid "ISO C++ does not permit `%T::%D' to be defined as `%T::%D'" msgstr "" ! #: cp/decl.c:7394 ! msgid "duplicate initialization of %D" msgstr "" ! #: cp/decl.c:7423 ! msgid "declaration of `%#D' outside of class is not definition" msgstr "" ! #: cp/decl.c:7471 ! msgid "variable `%#D' has initializer but incomplete type" msgstr "" ! #: cp/decl.c:7479 cp/decl.c:7830 ! msgid "elements of array `%#D' have incomplete type" msgstr "" ! #: cp/decl.c:7495 ! msgid "aggregate `%#D' has incomplete type and cannot be defined" msgstr "" ! #: cp/decl.c:7534 ! msgid "`%D' declared as reference but not initialized" msgstr "" ! #: cp/decl.c:7543 ! msgid "ISO C++ forbids use of initializer list to initialize reference `%D'" msgstr "" ! #: cp/decl.c:7576 ! msgid "cannot initialize `%T' from `%T'" msgstr "" ! #: cp/decl.c:7637 ! msgid "initializer fails to determine size of `%D'" msgstr "" ! #: cp/decl.c:7642 ! msgid "array size missing in `%D'" msgstr "" ! #: cp/decl.c:7654 ! msgid "zero-size array `%D'" ! msgstr "" ! ! #. An automatic variable with an incomplete type: that is an error. ! #. Don't talk about array types here, since we took care of that ! #. message in grokdeclarator. ! #: cp/decl.c:7687 ! msgid "storage size of `%D' isn't known" ! msgstr "" ! ! #: cp/decl.c:7709 ! msgid "storage size of `%D' isn't constant" ! msgstr "" ! ! #: cp/decl.c:7760 msgid "" ! "sorry: semantics of inline function static data `%#D' are wrong (you'll wind " ! "up with multiple copies)" msgstr "" ! #: cp/decl.c:7761 ! msgid " you can work around this by removing the initializer" msgstr "" ! #: cp/decl.c:7789 ! msgid "uninitialized const `%D'" msgstr "" ! #: cp/decl.c:7824 ! msgid "variable-sized object `%D' may not be initialized" msgstr "" ! #: cp/decl.c:7835 cp/typeck2.c:201 ! msgid "`%D' has incomplete type" msgstr "" ! #: cp/decl.c:7867 ! msgid "`%D' must be initialized by constructor, not by `{...}'" msgstr "" ! #: cp/decl.c:7897 ! msgid "structure `%D' with uninitialized const members" msgstr "" ! #: cp/decl.c:7899 ! msgid "structure `%D' with uninitialized reference members" msgstr "" ! #: cp/decl.c:8166 ! msgid "assignment (not initialization) in declaration" msgstr "" ! #: cp/decl.c:8178 ! msgid "cannot initialize `%D' to namespace `%D'" msgstr "" ! #: cp/decl.c:8235 ! msgid "shadowing previous type declaration of `%#D'" msgstr "" ! #: cp/decl.c:8631 ! msgid "multiple initializations given for `%D'" msgstr "" ! #: cp/decl.c:8731 ! msgid "invalid catch parameter" msgstr "" ! #: cp/decl.c:8849 ! msgid "destructor for alien class `%T' cannot be a member" msgstr "" ! #: cp/decl.c:8852 ! msgid "constructor for alien class `%T' cannot be a member" msgstr "" ! #: cp/decl.c:8871 ! msgid "`%D' declared as a `virtual' %s" msgstr "" ! #: cp/decl.c:8873 ! msgid "`%D' declared as an `inline' %s" msgstr "" ! #: cp/decl.c:8875 ! msgid "" ! "`const' and `volatile' function specifiers on `%D' invalid in %s declaration" msgstr "" ! #: cp/decl.c:8878 ! msgid "`%D' declared as a friend" msgstr "" ! #: cp/decl.c:8884 ! msgid "`%D' declared with an exception specification" msgstr "" ! #: cp/decl.c:8959 ! msgid "cannot declare `::main' to be a template" msgstr "" ! #: cp/decl.c:8961 ! msgid "cannot declare `::main' to be inline" msgstr "" ! #: cp/decl.c:8963 ! msgid "cannot declare `::main' to be static" msgstr "" ! #: cp/decl.c:8966 ! msgid "`main' must return `int'" msgstr "" ! #: cp/decl.c:8994 ! msgid "non-local function `%#D' uses anonymous type" msgstr "" ! #: cp/decl.c:8997 msgid "" ! "`%#D' does not refer to the unqualified type, so it is not used for linkage" msgstr "" ! #: cp/decl.c:9003 ! msgid "non-local function `%#D' uses local type `%T'" msgstr "" ! #: cp/decl.c:9026 ! msgid "%smember function `%D' cannot have `%T' method qualifier" msgstr "" ! #: cp/decl.c:9050 ! msgid "defining explicit specialization `%D' in friend declaration" msgstr "" ! #. Something like `template friend void f()'. ! #: cp/decl.c:9060 ! msgid "invalid use of template-id `%D' in declaration of primary template" msgstr "" ! #: cp/decl.c:9088 ! msgid "" ! "default arguments are not allowed in declaration of friend template " ! "specialization `%D'" msgstr "" ! #: cp/decl.c:9095 ! msgid "" ! "`inline' is not allowed in declaration of friend template specialization `%D'" msgstr "" ! #: cp/decl.c:9157 ! msgid "definition of implicitly-declared `%D'" msgstr "" ! #: cp/decl.c:9169 cp/decl2.c:1367 ! msgid "no `%#D' member function declared in class `%T'" msgstr "" ! #: cp/decl.c:9288 ! msgid "non-local variable `%#D' uses local type `%T'" msgstr "" ! #: cp/decl.c:9378 ! msgid "" ! "invalid in-class initialization of static data member of non-integral type `%" ! "T'" msgstr "" ! #: cp/decl.c:9387 ! msgid "ISO C++ forbids in-class initialization of non-const static member `%D'" msgstr "" ! #: cp/decl.c:9390 ! msgid "" ! "ISO C++ forbids initialization of member constant `%D' of non-integral type `" ! "%T'" msgstr "" ! #: cp/decl.c:9440 ! msgid "size of array `%D' has non-integer type" msgstr "" ! #: cp/decl.c:9442 ! msgid "size of array has non-integer type" msgstr "" ! #: cp/decl.c:9462 ! msgid "size of array `%D' is negative" msgstr "" ! #: cp/decl.c:9464 ! msgid "size of array is negative" msgstr "" ! #: cp/decl.c:9473 ! msgid "ISO C++ forbids zero-size array `%D'" msgstr "" ! #: cp/decl.c:9475 ! msgid "ISO C++ forbids zero-size array" msgstr "" ! #: cp/decl.c:9482 ! msgid "size of array `%D' is not an integral constant-expression" msgstr "" ! #: cp/decl.c:9485 ! msgid "size of array is not an integral constant-expression" msgstr "" ! #: cp/decl.c:9503 ! msgid "ISO C++ forbids variable-size array `%D'" msgstr "" ! #: cp/decl.c:9506 ! msgid "ISO C++ forbids variable-size array" msgstr "" ! #: cp/decl.c:9517 ! msgid "overflow in array dimension" msgstr "" ! #: cp/decl.c:9576 ! msgid "declaration of `%D' as %s" ! msgstr "" ! ! #: cp/decl.c:9578 #, c-format + msgid "creating %s" + msgstr "" + + #: cp/decl.c:9590 msgid "" ! "declaration of `%D' as multidimensional array must have bounds for all " ! "dimensions except the first" msgstr "" ! #: cp/decl.c:9593 ! msgid "" ! "multidimensional array must have bounds for all dimensions except the first" msgstr "" ! #: cp/decl.c:9622 ! msgid "return type specification for constructor invalid" msgstr "" ! #: cp/decl.c:9629 ! msgid "return type specification for destructor invalid" msgstr "" ! #: cp/decl.c:9635 ! msgid "operator `%T' declared to return `%T'" msgstr "" ! #: cp/decl.c:9637 ! msgid "return type specified for `operator %T'" msgstr "" ! #: cp/decl.c:9805 ! msgid "destructors must be member functions" msgstr "" ! #: cp/decl.c:9824 ! msgid "destructor `%T' must match class name `%T'" msgstr "" ! #: cp/decl.c:9874 ! msgid "invalid declarator" msgstr "" ! #: cp/decl.c:9927 ! msgid "declarator-id missing; using reserved word `%D'" msgstr "" ! #: cp/decl.c:9984 ! msgid "type `%T' is not derived from type `%T'" msgstr "" ! #. Parse error puts this typespec where ! #. a declarator should go. ! #: cp/decl.c:10030 ! msgid "`%T' specified as declarator-id" msgstr "" ! #: cp/decl.c:10032 ! msgid " perhaps you want `%T' for a constructor" msgstr "" ! #: cp/decl.c:10046 ! msgid "`%D' as declarator" msgstr "" ! #: cp/decl.c:10061 ! msgid "declaration of `%D' as non-function" msgstr "" ! #: cp/decl.c:10138 ! msgid "`bool' is now a keyword" msgstr "" ! #: cp/decl.c:10140 ! msgid "extraneous `%T' ignored" msgstr "" ! #: cp/decl.c:10156 cp/decl.c:10189 ! msgid "multiple declarations `%T' and `%T'" msgstr "" ! #: cp/decl.c:10169 ! msgid "ISO C++ does not support `long long'" msgstr "" ! #: cp/decl.c:10262 cp/decl.c:10265 #, c-format ! msgid "ISO C++ forbids declaration of `%s' with no type" msgstr "" ! #. The implicit typename extension is deprecated and will be ! #. removed. Warn about its use now. ! #: cp/decl.c:10275 ! msgid "`%T' is implicitly a typename" msgstr "" ! #: cp/decl.c:10311 #, c-format ! msgid "short, signed or unsigned invalid for `%s'" msgstr "" ! #: cp/decl.c:10316 #, c-format ! msgid "long and short specified together for `%s'" msgstr "" ! #: cp/decl.c:10327 #, c-format ! msgid "signed and unsigned given together for `%s'" msgstr "" ! #: cp/decl.c:10436 ! msgid "qualifiers are not allowed on declaration of `operator %T'" msgstr "" ! #: cp/decl.c:10458 ! msgid "member `%D' cannot be declared both virtual and static" msgstr "" ! #: cp/decl.c:10467 ! msgid "`%T::%D' is not a valid declarator" msgstr "" ! #: cp/decl.c:10478 ! msgid "storage class specifiers invalid in parameter declarations" msgstr "" ! #: cp/decl.c:10482 ! msgid "typedef declaration invalid in parameter declaration" msgstr "" ! #: cp/decl.c:10495 ! msgid "virtual outside class declaration" ! msgstr "" ! ! #: cp/decl.c:10549 #, c-format ! msgid "storage class specified for %s `%s'" msgstr "" ! #: cp/decl.c:10587 ! msgid "storage class specifiers invalid in friend function declarations" msgstr "" ! #: cp/decl.c:10691 ! msgid "size of member `%D' is not constant" msgstr "" ! #: cp/decl.c:10770 ! msgid "destructor cannot be static member function" msgstr "" ! #: cp/decl.c:10773 ! #, c-format ! msgid "destructors may not be `%s'" msgstr "" ! #: cp/decl.c:10794 ! msgid "constructor cannot be static member function" msgstr "" ! #: cp/decl.c:10797 ! msgid "constructors cannot be declared virtual" msgstr "" ! #: cp/decl.c:10802 #, c-format ! msgid "constructors may not be `%s'" msgstr "" ! #: cp/decl.c:10812 ! msgid "return value type specifier for constructor ignored" msgstr "" ! #: cp/decl.c:10831 #, c-format ! msgid "can't initialize friend function `%s'" msgstr "" ! #. Cannot be both friend and virtual. ! #: cp/decl.c:10835 ! msgid "virtual functions cannot be friends" ! msgstr "" ! ! #: cp/decl.c:10840 ! msgid "friend declaration not in class definition" ! msgstr "" ! ! #: cp/decl.c:10842 #, c-format ! msgid "can't define friend function `%s' in a local class definition" msgstr "" ! #: cp/decl.c:10866 ! msgid "destructors may not have parameters" ! msgstr "" ! ! #: cp/decl.c:10896 #, c-format ! msgid "cannot declare %s to references" msgstr "" ! #: cp/decl.c:10907 ! msgid "cannot declare pointer to `%#T' member" ! msgstr "" ! ! #: cp/decl.c:10922 ! msgid "invalid type: `void &'" ! msgstr "" ! ! #: cp/decl.c:11084 ! msgid "extra qualification `%T::' on member `%s' ignored" ! msgstr "" ! ! #: cp/decl.c:11094 ! msgid "cannot declare member function `%T::%s' within `%T'" ! msgstr "" ! ! #: cp/decl.c:11109 ! msgid "cannot declare member `%T::%s' within `%T'" ! msgstr "" ! ! #. [dcl.fct.spec] The explicit specifier shall only be used in ! #. declarations of constructors within a class definition. ! #: cp/decl.c:11189 ! msgid "only declarations of constructors can be `explicit'" ! msgstr "" ! ! #: cp/decl.c:11197 #, c-format ! msgid "non-member `%s' cannot be declared `mutable'" msgstr "" ! #: cp/decl.c:11202 #, c-format ! msgid "non-object member `%s' cannot be declared `mutable'" msgstr "" ! #: cp/decl.c:11208 #, c-format ! msgid "function `%s' cannot be declared `mutable'" msgstr "" ! #: cp/decl.c:11213 #, c-format ! msgid "static `%s' cannot be declared `mutable'" msgstr "" ! #: cp/decl.c:11218 ! #, c-format ! msgid "const `%s' cannot be declared `mutable'" msgstr "" ! #: cp/decl.c:11231 ! msgid "template-id `%D' used as a declarator" msgstr "" ! #: cp/decl.c:11252 ! msgid "ISO C++ forbids nested type `%D' with same name as enclosing class" msgstr "" ! #: cp/decl.c:11299 ! msgid "typedef name may not be class-qualified" msgstr "" ! #: cp/decl.c:11307 ! msgid "invalid type qualifier for non-member function type" msgstr "" ! #: cp/decl.c:11323 ! msgid "typedef declaration includes an initializer" msgstr "" ! #: cp/decl.c:11373 ! msgid "type qualifiers specified for friend class declaration" msgstr "" ! #: cp/decl.c:11378 ! msgid "`inline' specified for friend class declaration" msgstr "" ! #: cp/decl.c:11388 ! msgid "template parameters cannot be friends" msgstr "" ! #: cp/decl.c:11390 ! msgid "friend declaration requires class-key, i.e. `friend class %T::%T'" msgstr "" ! #: cp/decl.c:11395 ! msgid "friend declaration requires class-key, i.e. `friend %#T'" msgstr "" ! #: cp/decl.c:11409 ! msgid "trying to make class `%T' a friend of global scope" msgstr "" ! #: cp/decl.c:11420 ! msgid "invalid qualifiers on non-member function type" msgstr "" ! #: cp/decl.c:11439 ! msgid "abstract declarator `%T' used as declaration" msgstr "" ! #: cp/decl.c:11451 ! msgid "unnamed variable or field declared void" msgstr "" ! #: cp/decl.c:11460 ! msgid "variable or field declared void" msgstr "" ! #: cp/decl.c:11470 ! msgid "cannot use `::' in parameter declaration" msgstr "" ! #. Something like struct S { int N::j; }; ! #: cp/decl.c:11516 ! msgid "invalid use of `::'" msgstr "" ! #: cp/decl.c:11528 ! msgid "function `%D' cannot be declared friend" msgstr "" ! #: cp/decl.c:11540 ! msgid "can't make `%D' into a method -- not in a class" msgstr "" ! #: cp/decl.c:11549 ! msgid "function `%D' declared virtual inside a union" msgstr "" ! #: cp/decl.c:11561 ! msgid "`%D' cannot be declared virtual, since it is always static" msgstr "" ! #: cp/decl.c:11634 ! msgid "field `%D' has incomplete type" msgstr "" ! #: cp/decl.c:11636 ! msgid "name `%T' has incomplete type" msgstr "" ! #: cp/decl.c:11645 ! msgid " in instantiation of template `%T'" msgstr "" ! #: cp/decl.c:11655 #, c-format ! msgid "`%s' is neither function nor member function; cannot be declared friend" msgstr "" ! #: cp/decl.c:11666 ! msgid "member functions are implicitly friends of their class" msgstr "" ! #. An attempt is being made to initialize a non-static ! #. member. But, from [class.mem]: ! #. ! #. 4 A member-declarator can contain a ! #. constant-initializer only if it declares a static ! #. member (_class.static_) of integral or enumeration ! #. type, see _class.static.data_. ! #. ! #. This used to be relatively common practice, but ! #. the rest of the compiler does not correctly ! #. handle the initialization unless the member is ! #. static so we make it static below. ! #: cp/decl.c:11713 ! msgid "ISO C++ forbids initialization of member `%D'" msgstr "" ! #: cp/decl.c:11715 ! msgid "making `%D' static" msgstr "" ! #: cp/decl.c:11739 ! msgid "" ! "ISO C++ forbids static data member `%D' with same name as enclosing class" msgstr "" ! #: cp/decl.c:11780 ! #, c-format ! msgid "storage class `auto' invalid for function `%s'" msgstr "" ! #: cp/decl.c:11782 ! #, c-format ! msgid "storage class `register' invalid for function `%s'" msgstr "" ! #: cp/decl.c:11793 ! #, c-format ! msgid "" ! "storage class `static' invalid for function `%s' declared out of global scope" msgstr "" ! #: cp/decl.c:11795 ! #, c-format ! msgid "" ! "storage class `inline' invalid for function `%s' declared out of global scope" msgstr "" ! #: cp/decl.c:11802 ! #, c-format ! msgid "virtual non-class function `%s'" msgstr "" ! #: cp/decl.c:11831 ! msgid "cannot declare member function `%D' to have static linkage" msgstr "" ! #. FIXME need arm citation ! #: cp/decl.c:11837 ! msgid "cannot declare static function inside another function" msgstr "" ! #: cp/decl.c:11865 ! msgid "" ! "`static' may not be used when defining (as opposed to declaring) a static " ! "data member" msgstr "" ! #: cp/decl.c:11871 ! msgid "static member `%D' declared `register'" msgstr "" ! #: cp/decl.c:11876 ! msgid "cannot explicitly declare member `%#D' to have extern linkage" msgstr "" ! #: cp/decl.c:12048 ! msgid "default argument for `%#D' has type `%T'" msgstr "" ! #: cp/decl.c:12051 ! msgid "default argument for parameter of type `%T' has type `%T'" msgstr "" ! #: cp/decl.c:12068 ! msgid "default argument `%E' uses local variable `%D'" msgstr "" ! #: cp/decl.c:12113 #, c-format ! msgid "invalid string constant `%E'" msgstr "" ! #: cp/decl.c:12115 ! msgid "" ! "invalid integer constant in parameter list, did you forget to give parameter " ! "name?" msgstr "" ! #: cp/decl.c:12153 ! msgid "parameter `%D' invalidly declared method type" msgstr "" ! #: cp/decl.c:12159 ! msgid "parameter `%D' invalidly declared offset type" msgstr "" ! #: cp/decl.c:12183 ! msgid "parameter `%D' includes %s to array of unknown bound `%T'" msgstr "" ! #. [class.copy] ! #. ! #. A declaration of a constructor for a class X is ill-formed if ! #. its first parameter is of type (optionally cv-qualified) X ! #. and either there are no other parameters or else all other ! #. parameters have default arguments. ! #. ! #. We *don't* complain about member template instantiations that ! #. have this form, though; they can occur as we try to decide ! #. what constructor to use during overload resolution. Since ! #. overload resolution will never prefer such a constructor to ! #. the non-template copy constructor (which is either explicitly ! #. or implicitly defined), there's no need to worry about their ! #. existence. Theoretically, they should never even be ! #. instantiated, but that's hard to forestall. ! #: cp/decl.c:12350 ! msgid "invalid constructor; you probably meant `%T (const %T&)'" msgstr "" ! #: cp/decl.c:12501 ! msgid "`%D' must be a nonstatic member function" msgstr "" ! #: cp/decl.c:12507 ! msgid "" ! "`%D' must be either a non-static member function or a non-member function" msgstr "" ! #: cp/decl.c:12524 ! msgid "`%D' must have an argument of class or enumerated type" msgstr "" ! #: cp/decl.c:12556 #, c-format ! msgid "conversion to %s%s will never use a type conversion operator" msgstr "" ! #. 13.4.0.3 ! #: cp/decl.c:12563 ! msgid "ISO C++ prohibits overloading operator ?:" msgstr "" ! #: cp/decl.c:12613 ! msgid "postfix `%D' must take `int' as its argument" msgstr "" ! #: cp/decl.c:12617 ! msgid "postfix `%D' must take `int' as its second argument" msgstr "" ! #: cp/decl.c:12624 ! msgid "`%D' must take either zero or one argument" msgstr "" ! #: cp/decl.c:12626 ! msgid "`%D' must take either one or two arguments" msgstr "" ! #: cp/decl.c:12647 ! msgid "prefix `%D' should return `%T'" msgstr "" ! #: cp/decl.c:12653 ! msgid "postfix `%D' should return `%T'" msgstr "" ! #: cp/decl.c:12662 ! msgid "`%D' must take `void'" msgstr "" ! #: cp/decl.c:12664 cp/decl.c:12672 ! msgid "`%D' must take exactly one argument" msgstr "" ! #: cp/decl.c:12674 ! msgid "`%D' must take exactly two arguments" msgstr "" ! #: cp/decl.c:12682 ! msgid "user-defined `%D' always evaluates both arguments" msgstr "" ! #: cp/decl.c:12694 ! msgid "`%D' should return by value" msgstr "" ! #: cp/decl.c:12706 cp/decl.c:12709 ! msgid "`%D' cannot have default arguments" msgstr "" ! #: cp/decl.c:12800 ! msgid "`%s %T' declares a new type at namespace scope" msgstr "" ! #: cp/decl.c:12803 ! msgid "" ! " names from dependent base classes are not visible to unqualified name " ! "lookup - to refer to the inherited type, say `%s %T::%T'" msgstr "" ! #: cp/decl.c:12841 ! msgid "using typedef-name `%D' after `%s'" msgstr "" ! #: cp/decl.c:12846 ! msgid "using template type parameter `%T' after `%s'" msgstr "" ! #: cp/decl.c:12926 ! msgid "use of enum `%#D' without previous declaration" msgstr "" ! #: cp/decl.c:13024 ! msgid "derived union `%T' invalid" msgstr "" ! #: cp/decl.c:13068 ! msgid "base type `%T' fails to be a struct or class type" msgstr "" ! #: cp/decl.c:13078 ! msgid "base class `%T' has incomplete type" msgstr "" ! #: cp/decl.c:13086 ! msgid "recursive type `%T' undefined" msgstr "" ! #: cp/decl.c:13088 ! msgid "duplicate base type `%T' invalid" msgstr "" ! #: cp/decl.c:13199 ! msgid "multiple definition of `%#T'" msgstr "" ! #: cp/decl.c:13200 ! msgid "previous definition here" msgstr "" ! #: cp/decl.c:13371 ! msgid "enumerator value for `%D' not integer constant" msgstr "" ! #: cp/decl.c:13391 ! msgid "overflow in enumeration values at `%D'" msgstr "" ! #: cp/decl.c:13477 ! msgid "return type `%#T' is incomplete" msgstr "" ! #: cp/decl.c:13593 ! msgid "semicolon missing after declaration of `%#T'" msgstr "" ! #: cp/decl.c:13614 ! msgid "return type for `main' changed to `int'" msgstr "" ! #: cp/decl.c:13645 ! msgid "`%D' implicitly declared before its definition" msgstr "" ! #: cp/decl.c:13667 cp/typeck.c:6530 ! msgid "`operator=' should return a reference to `*this'" msgstr "" ! #: cp/decl.c:13931 ! msgid "parameter `%D' declared void" msgstr "" ! #: cp/decl.c:14408 ! msgid "`%D' is already defined in class `%T'" ! msgstr "" ! ! #: cp/decl.c:14625 ! msgid "static member function `%#D' declared with type qualifiers" ! msgstr "" ! ! #: cp/decl2.c:529 #, c-format ! msgid "-f%s is no longer supported" msgstr "" ! #: cp/decl2.c:535 ! msgid "" ! "-fhandle-exceptions has been renamed to -fexceptions (and is now on by " ! "default)" msgstr "" ! #: cp/decl2.c:561 ! msgid "-fname-mangling-version is no longer supported" msgstr "" ! #: cp/decl2.c:624 ! msgid "-Wno-strict-prototypes is not supported in C++" msgstr "" ! #: cp/decl2.c:761 #, c-format ! msgid "duplicate type qualifiers in %s declaration" msgstr "" ! #: cp/decl2.c:800 ! msgid "template `%#D' instantiated in file without #pragma interface" msgstr "" ! #: cp/decl2.c:806 ! msgid "template `%#D' defined in file without #pragma interface" msgstr "" ! #: cp/decl2.c:963 ! msgid "name missing for member function" msgstr "" ! #. Something has gone very wrong. Assume we are mistakenly reducing ! #. an expression instead of a declaration. ! #: cp/decl2.c:1026 ! msgid "parser may be lost: is there a '{' missing somewhere?" msgstr "" ! #: cp/decl2.c:1057 cp/decl2.c:1071 ! msgid "ambiguous conversion for array subscript" msgstr "" ! #: cp/decl2.c:1065 ! msgid "invalid types `%T[%T]' for array subscript" msgstr "" ! #: cp/decl2.c:1113 ! msgid "type `%#T' argument given to `delete', expected pointer" msgstr "" ! #: cp/decl2.c:1121 ! msgid "anachronistic use of array size in vector delete" msgstr "" ! #: cp/decl2.c:1131 ! msgid "" ! "cannot delete a function. Only pointer-to-objects are valid arguments to " ! "`delete'" msgstr "" ! #: cp/decl2.c:1138 ! msgid "deleting `%T' is undefined" msgstr "" ! #: cp/decl2.c:1146 ! msgid "deleting array `%#D'" msgstr "" ! #. 14.5.2.2 [temp.mem] ! #. ! #. A local class shall not have member templates. ! #: cp/decl2.c:1180 ! msgid "invalid declaration of member template `%#D' in local class" msgstr "" ! #: cp/decl2.c:1189 ! msgid "invalid use of `virtual' in template declaration of `%#D'" msgstr "" ! #: cp/decl2.c:1199 cp/pt.c:2562 ! msgid "template declaration of `%#D'" msgstr "" ! #: cp/decl2.c:1249 ! msgid "Java method '%D' has non-Java return type `%T'" msgstr "" ! #: cp/decl2.c:1258 ! msgid "Java method '%D' has non-Java parameter type `%T'" msgstr "" ! #: cp/decl2.c:1354 ! msgid "prototype for `%#D' does not match any in class `%T'" msgstr "" ! #: cp/decl2.c:1356 ! msgid "candidate%s: %+#D" msgstr "" ! #: cp/decl2.c:1359 ! msgid " %#D" msgstr "" ! #: cp/decl2.c:1411 ! msgid "local class `%#T' shall not have static data member `%#D'" msgstr "" ! #: cp/decl2.c:1419 ! msgid "initializer invalid for static member with constructor" msgstr "" ! #: cp/decl2.c:1422 ! msgid "(an out of class initialization is required)" msgstr "" ! #: cp/decl2.c:1481 ! msgid "invalid data member initialization" msgstr "" ! #: cp/decl2.c:1484 ! msgid "(use `=' to initialize static data members)" msgstr "" ! #: cp/decl2.c:1524 ! msgid "member `%D' conflicts with virtual function table field name" msgstr "" ! #: cp/decl2.c:1544 ! msgid "`%D' is already defined in `%T'" msgstr "" ! #: cp/decl2.c:1595 ! msgid "field initializer is not constant" msgstr "" ! #: cp/decl2.c:1618 ! msgid "`asm' specifiers are not permitted on non-static data members" msgstr "" ! #: cp/decl2.c:1670 ! msgid "cannot declare `%D' to be a bit-field type" msgstr "" ! #: cp/decl2.c:1680 ! msgid "cannot declare bit-field `%D' with function type" msgstr "" ! #: cp/decl2.c:1687 ! msgid "`%D' is already defined in the class %T" msgstr "" ! #: cp/decl2.c:1694 ! msgid "static member `%D' cannot be a bit-field" msgstr "" ! #: cp/decl2.c:1763 ! msgid "initializer specified for non-member function `%D'" msgstr "" ! #: cp/decl2.c:1767 ! msgid "invalid initializer for virtual method `%D'" msgstr "" ! #: cp/decl2.c:1871 ! msgid "anonymous struct not inside named type" msgstr "" ! #: cp/decl2.c:1967 ! msgid "namespace-scope anonymous aggregates must be static" msgstr "" ! #: cp/decl2.c:1977 ! msgid "anonymous aggregate with no members" msgstr "" ! #: cp/decl2.c:2044 ! msgid "`operator new' must return type `%T'" msgstr "" ! #: cp/decl2.c:2052 ! msgid "`operator new' takes type `size_t' (`%T') as first parameter" msgstr "" ! #: cp/decl2.c:2079 ! msgid "`operator delete' must return type `%T'" msgstr "" ! #: cp/decl2.c:2087 ! msgid "`operator delete' takes type `%T' as first parameter" msgstr "" ! #. Overflow occurred. That means there are at least 4 billion ! #. initialization functions. ! #: cp/decl2.c:2828 ! msgid "too many initialization functions required" msgstr "" ! #: cp/decl2.c:3639 ! msgid "use of old-style cast" msgstr "" ! #: cp/decl2.c:4220 ! msgid "use of `%D' is ambiguous" msgstr "" ! #: cp/decl2.c:4221 ! msgid " first declared as `%#D' here" msgstr "" ! #: cp/decl2.c:4224 ! msgid " also declared as `%#D' here" msgstr "" ! #: cp/decl2.c:4239 ! msgid "`%D' denotes an ambiguous type" msgstr "" ! #: cp/decl2.c:4240 ! msgid " first type here" msgstr "" ! #: cp/decl2.c:4241 ! msgid " other type here" msgstr "" ! #: cp/decl2.c:4338 ! msgid "declaration of `%D' not in a namespace surrounding `%D'" msgstr "" ! #: cp/decl2.c:4372 ! msgid "`%D' should have been declared inside `%D'" msgstr "" ! #: cp/decl2.c:4506 ! msgid "`%D' is not a function," msgstr "" ! #: cp/decl2.c:4507 ! msgid " conflict with `%D'" msgstr "" ! #. The parser did not find it, so it's not there. ! #: cp/decl2.c:4821 ! msgid "unknown namespace `%D'" msgstr "" ! #: cp/decl2.c:4855 cp/decl2.c:5125 ! msgid "`%T' is not a namespace" msgstr "" ! #: cp/decl2.c:4857 ! msgid "`%D' is not a namespace" msgstr "" ! #: cp/decl2.c:4866 ! msgid "a using-declaration cannot specify a template-id. Try `using %D'" msgstr "" ! #: cp/decl2.c:4880 ! msgid "namespace `%D' not allowed in using-declaration" msgstr "" ! #: cp/decl2.c:4909 ! msgid "`%D' not declared" msgstr "" ! #: cp/decl2.c:4960 ! msgid "`%D' is already declared in this scope" msgstr "" ! #: cp/decl2.c:4987 ! msgid "using declaration `%D' introduced ambiguous type `%T'" msgstr "" ! #: cp/decl2.c:5078 ! msgid "using-declaration for non-member at class scope" msgstr "" ! #: cp/decl2.c:5084 ! msgid "using-declaration for destructor" msgstr "" ! #: cp/decl2.c:5090 ! msgid "a using-declaration cannot specify a template-id. Try `using %T::%D'" msgstr "" ! #: cp/decl2.c:5119 ! msgid "namespace `%T' undeclared" msgstr "" ! #: cp/decl2.c:5148 ! msgid "default argument missing for parameter %P of `%+#D'" msgstr "" ! #: cp/decl2.c:5238 ! msgid "extra qualification `%T::' on member `%D' ignored" msgstr "" ! #: cp/decl2.c:5242 ! msgid "`%T' does not have a class or union named `%D'" msgstr "" ! #: cp/decl2.c:5255 ! msgid "`%T' is not a class or union type" msgstr "" ! #: cp/error.c:35 #, c-format ! msgid "`%s' not supported by %s" msgstr "" ! #: cp/error.c:577 #, c-format ! msgid "" msgstr "" ! #: cp/error.c:814 ! #, c-format ! msgid "(static %s for %s)" msgstr "" ! #: cp/error.c:2438 #, c-format ! msgid "In %s `%s':" msgstr "" ! #: cp/error.c:2493 ! #, c-format ! msgid "%s: In instantiation of `%s':\n" msgstr "" ! #: cp/error.c:2517 #, c-format ! msgid "%s:%d: instantiated from `%s'\n" msgstr "" ! #: cp/error.c:2522 ! #, c-format ! msgid "%s:%d: instantiated from here\n" msgstr "" ! #. damn ICE suppression ! #: cp/error.c:2675 ! #, c-format ! msgid "unexpected letter `%c' in locate_error\n" msgstr "" ! #. Can't throw a reference. ! #: cp/except.c:245 ! msgid "type `%T' is disallowed in Java `throw' or `catch'" msgstr "" ! #: cp/except.c:256 ! msgid "call to Java `catch' or `throw' with `jthrowable' undefined" msgstr "" ! #. Thrown object must be a Throwable. ! #: cp/except.c:263 ! msgid "type `%T' is not derived from `java::lang::Throwable'" msgstr "" ! #: cp/except.c:327 ! msgid "mixing C++ and Java catches in a single translation unit" msgstr "" ! #: cp/except.c:558 ! msgid "throwing NULL, which has integral, not pointer type" ! msgstr "" ! ! #: cp/except.c:663 ! msgid " in thrown expression" ! msgstr "" ! ! #: cp/except.c:775 msgid "" ! "expression '%E' of abstract class type '%T' cannot be used in throw-" ! "expression" msgstr "" ! #: cp/except.c:863 ! msgid "exception of type `%T' will be caught" msgstr "" ! #: cp/except.c:866 ! msgid " by earlier handler for `%T'" msgstr "" ! #: cp/except.c:887 ! msgid "`...' handler must be the last handler for its try block" msgstr "" ! #: cp/friend.c:155 ! msgid "`%D' is already a friend of class `%T'" msgstr "" ! #: cp/friend.c:157 ! msgid "previous friend declaration of `%D'" msgstr "" ! #: cp/friend.c:197 ! msgid "invalid type `%T' declared `friend'" msgstr "" ! #. [temp.friend] ! #. ! #. Friend declarations shall not declare partial ! #. specializations. ! #: cp/friend.c:209 ! msgid "partial specialization `%T' declared `friend'" msgstr "" ! #: cp/friend.c:221 ! msgid "class `%T' is implicitly friends with itself" msgstr "" ! #. template friend typename S::X; ! #: cp/friend.c:239 ! msgid "typename type `%#T' declared `friend'" msgstr "" ! #. template friend class T; ! #: cp/friend.c:245 ! msgid "template parameter type `%T' declared `friend'" msgstr "" ! #. template friend class A; where A is not a template ! #: cp/friend.c:251 ! msgid "`%#T' is not a template" msgstr "" ! #: cp/friend.c:266 ! msgid "`%T' is already a friend of `%T'" msgstr "" ! #: cp/friend.c:362 ! msgid "member `%D' declared as friend before type `%T' defined" msgstr "" ! #: cp/friend.c:417 ! msgid "friend declaration `%#D' declares a non-template function" msgstr "" ! #: cp/friend.c:420 ! msgid "" ! "(if this is not what you intended, make sure the function template has " ! "already been declared and add <> after the function name here) -Wno-non-" ! "template-friend disables this warning" msgstr "" ! #: cp/g++spec.c:198 java/jvspec.c:424 ! #, c-format ! msgid "argument to `%s' missing\n" msgstr "" ! #: cp/init.c:285 ! msgid "default-initialization of `%#D', which has reference type" msgstr "" ! #: cp/init.c:290 ! msgid "uninitialized reference member `%D'" msgstr "" ! #: cp/init.c:298 ! msgid "initializer list treated as compound expression" msgstr "" ! #: cp/init.c:410 ! msgid "member initializers for `%#D'" msgstr "" ! #: cp/init.c:412 ! msgid " and `%#D'" msgstr "" ! #: cp/init.c:413 ! msgid " will be re-ordered to match declaration order" msgstr "" ! #: cp/init.c:428 ! msgid "multiple initializations given for member `%D'" msgstr "" ! #: cp/init.c:500 ! msgid "initializations for multiple members of `%T'" msgstr "" ! #: cp/init.c:617 ! msgid "base initializers for `%#T'" msgstr "" ! #: cp/init.c:618 ! msgid " and `%#T'" msgstr "" ! #: cp/init.c:619 ! msgid " will be re-ordered to match inheritance order" msgstr "" ! #: cp/init.c:631 ! msgid "base class `%T' already initialized" msgstr "" ! #: cp/init.c:702 ! msgid "" ! "base class `%#T' should be explicitly initialized in the copy constructor" msgstr "" ! #: cp/init.c:745 ! msgid "`%D' should be initialized in the member initialization list" msgstr "" ! #: cp/init.c:987 ! msgid "class `%T' does not have any field named `%D'" msgstr "" ! #: cp/init.c:993 ! msgid "" ! "field `%#D' is static; the only point of initialization is its definition" msgstr "" ! #: cp/init.c:1032 ! msgid "unnamed initializer for `%T', which has no base classes" msgstr "" ! #: cp/init.c:1039 ! msgid "unnamed initializer for `%T', which uses multiple inheritance" msgstr "" ! #: cp/init.c:1068 ! msgid "type `%D' is not a direct or virtual base of `%T'" msgstr "" ! #: cp/init.c:1071 ! msgid "type `%D' is not a direct base of `%T'" msgstr "" ! #. Handle bad initializers like: ! #. class COMPLEX { ! #. public: ! #. double re, im; ! #. COMPLEX(double r = 0.0, double i = 0.0) {re = r; im = i;}; ! #. ~COMPLEX() {}; ! #. }; ! #. ! #. int main(int argc, char **argv) { ! #. COMPLEX zees(1.0, 0.0)[10]; ! #. } ! #. ! #: cp/init.c:1165 ! msgid "bad array initializer" msgstr "" ! #: cp/init.c:1357 ! msgid "`%T' is not an aggregate type" msgstr "" ! #: cp/init.c:1380 ! msgid "`%T' fails to be an aggregate typedef" msgstr "" ! #: cp/init.c:1389 ! msgid "type `%T' is of non-aggregate type" msgstr "" ! #: cp/init.c:1491 ! msgid "cannot call destructor `%T::~%T' without object" msgstr "" ! #: cp/init.c:1531 ! msgid "invalid use of non-static field `%D'" msgstr "" ! #. We can get here when processing a bad default ! #. argument, like: ! #. struct S { int a; void f(int i = a); } ! #: cp/init.c:1540 cp/method.c:163 ! msgid "invalid use of member `%D'" msgstr "" ! #: cp/init.c:1550 ! msgid "no method `%T::%D'" msgstr "" ! #: cp/init.c:1643 ! msgid "incomplete type `%T' does not have member `%D'" msgstr "" ! #: cp/init.c:1712 ! msgid "`%D' is not a member of type `%T'" msgstr "" ! #: cp/init.c:1731 ! msgid "illegal pointer to bit-field `%D'" msgstr "" ! #: cp/init.c:1770 ! msgid "object missing in use of pointer-to-member construct" msgstr "" ! #: cp/init.c:1810 ! msgid "member `%D' is non-static but referenced as a static member" msgstr "" ! #: cp/init.c:1812 cp/typeck.c:3130 cp/typeck.c:3238 ! msgid "at this point in file" msgstr "" ! #: cp/init.c:1853 cp/typeck.c:2929 ! #, c-format ! msgid "object missing in `%E'" msgstr "" ! #: cp/init.c:1984 ! msgid "new of array type fails to specify size" msgstr "" ! #: cp/init.c:1995 ! msgid "size in array new must have integral type" msgstr "" ! #: cp/init.c:2001 ! msgid "zero size array reserves no space" msgstr "" ! #: cp/init.c:2066 ! msgid "new cannot be applied to a reference type" msgstr "" ! #: cp/init.c:2072 ! msgid "new cannot be applied to a function type" msgstr "" ! #: cp/init.c:2119 ! msgid "call to Java constructor, while `jclass' undefined" msgstr "" ! #: cp/init.c:2135 ! msgid "can't find class$" msgstr "" ! #: cp/init.c:2249 ! msgid "invalid type `void' for new" msgstr "" ! #: cp/init.c:2301 ! #, c-format ! msgid "call to Java constructor with `%s' undefined" msgstr "" ! #: cp/init.c:2408 ! msgid "ISO C++ forbids initialization in array new" msgstr "" ! #: cp/init.c:2426 cp/typeck2.c:359 cp/typeck2.c:1217 ! msgid "initializer list being treated as compound expression" msgstr "" ! #: cp/init.c:2432 ! msgid "ISO C++ forbids aggregate initializer to new" msgstr "" ! #: cp/init.c:2516 ! msgid "uninitialized const in `new' of `%#T'" msgstr "" ! #: cp/init.c:2880 ! msgid "initializer ends prematurely" msgstr "" ! #: cp/init.c:2950 ! msgid "cannot initialize multi-dimensional array with initializer" msgstr "" ! #: cp/init.c:3125 ! msgid "unknown array size in delete" msgstr "" ! #: cp/init.c:3398 ! msgid "type to vector delete is neither pointer or array type" msgstr "" ! #: cp/lex.c:144 ! msgid "type name expected before `*'" msgstr "" ! #: cp/lex.c:166 ! msgid "cannot declare references to references" msgstr "" ! #: cp/lex.c:171 ! msgid "cannot declare pointers to references" msgstr "" ! #: cp/lex.c:175 ! msgid "type name expected before `&'" msgstr "" ! #: cp/lex.c:993 #, c-format ! msgid "semicolon missing after %s declaration" msgstr "" ! #: cp/lex.c:996 ! msgid "semicolon missing after declaration of `%T'" ! msgstr "" ! ! #: cp/lex.c:1044 #, c-format ! msgid "junk at end of #pragma %s" msgstr "" ! #: cp/lex.c:1051 #, c-format ! msgid "invalid #pragma %s" msgstr "" ! #: cp/lex.c:1060 ! msgid "#pragma vtable no longer supported" ! msgstr "" ! ! #: cp/lex.c:1137 #, c-format ! msgid "#pragma implementation for %s appears after file is included" msgstr "" ! #: cp/lex.c:1162 ! msgid "junk at end of #pragma GCC java_exceptions" msgstr "" ! #: cp/lex.c:1247 ! msgid "`%D' not defined" msgstr "" ! #: cp/lex.c:1252 ! msgid "`%D' was not declared in this scope" msgstr "" ! #: cp/lex.c:1262 ! msgid "`%D' undeclared (first use this function)" ! msgstr "" ! ! #: cp/lex.c:1266 ! msgid "" ! "(Each undeclared identifier is reported only once for each function it " ! "appears in.)" ! msgstr "" ! ! #: cp/lex.c:1289 #, c-format ! msgid "name lookup of `%s' changed" msgstr "" ! #: cp/lex.c:1291 ! msgid " matches this `%D' under ISO standard rules" msgstr "" ! #: cp/lex.c:1293 ! msgid " matches this `%D' under old rules" msgstr "" ! #: cp/lex.c:1303 cp/lex.c:1310 ! #, c-format ! msgid "name lookup of `%s' changed for new ISO `for' scoping" msgstr "" ! #: cp/lex.c:1305 ! msgid " cannot use obsolete binding at `%D' because it has a destructor" msgstr "" ! #: cp/lex.c:1312 ! msgid " using obsolete binding at `%D'" msgstr "" ! #: cp/lex.c:1378 ! msgid "`::%D' undeclared (first use here)" msgstr "" ! #: cp/mangle.c:1912 ! msgid "real-valued template parameters when cross-compiling" msgstr "" ! #: cp/method.c:157 ! msgid "invalid use of member `%D' in static member function" msgstr "" ! #: cp/method.c:205 ! msgid "use of namespace `%D' as expression" msgstr "" ! #: cp/method.c:210 ! msgid "use of class template `%T' as expression" msgstr "" ! #: cp/method.c:223 #, c-format ! msgid "use of %s from containing function" msgstr "" ! #: cp/method.c:226 ! msgid " `%#D' declared here" msgstr "" ! #: cp/method.c:244 ! msgid "request for member `%D' is ambiguous in multiple inheritance lattice" msgstr "" ! #: cp/method.c:297 ! msgid "implementation-reserved name `%D' used" msgstr "" ! #: cp/method.c:428 ! msgid "generic thunk code fails for method `%#D' which uses `...'" msgstr "" ! #: cp/method.c:653 ! msgid "non-static const member `%#D', can't use default assignment operator" msgstr "" ! #: cp/method.c:658 ! msgid "" ! "non-static reference member `%#D', can't use default assignment operator" msgstr "" ! #: parse.y:218 ! msgid "`%s' tag used in naming `%#T'" msgstr "" ! #: parse.y:510 ! msgid "keyword `export' not implemented, and will be ignored" msgstr "" ! #: parse.y:615 ! msgid "use of linkage spec `%D' is different from previous spec `%D'" msgstr "" ! #: parse.y:688 ! msgid "invalid default template argument" msgstr "" ! #: parse.y:919 ! msgid "only constructors take base initializers" msgstr "" ! #: parse.y:921 ! msgid "no base or member initializers given following ':'" msgstr "" ! #: parse.y:963 parse.y:969 ! msgid "anachronistic old style base class initializer" msgstr "" ! #. Handle `Class>' without space in the `>>' ! #: parse.y:1095 ! msgid "`>>' should be `> >' in template class name" msgstr "" ! #: parse.y:1133 ! msgid "use of template qualifier outside template" msgstr "" ! #: parse.y:1162 parse.y:1171 #, c-format ! msgid "ISO C++ forbids an empty condition for `%s'" msgstr "" ! #: parse.y:1194 ! msgid "definition of class `%T' in condition" msgstr "" ! #: parse.y:1196 ! msgid "definition of enum `%T' in condition" msgstr "" ! #: parse.y:1207 ! msgid "definition of array `%#D' in condition" msgstr "" ! #: parse.y:1316 ! msgid "old style placement syntax, use () instead" msgstr "" ! #: parse.y:1327 ! msgid "`%T' is not a valid expression" msgstr "" ! #: parse.y:1338 ! msgid "ISO C++ forbids initialization of new expression with `='" msgstr "" ! #: parse.y:1369 ! msgid "ISO C++ forbids compound literals" msgstr "" ! #: parse.y:1611 ! msgid "ISO C++ forbids braced-groups within expressions" msgstr "" ! #: parse.y:2013 parse.y:2028 ! msgid "sigof type specifier" msgstr "" ! #: parse.y:2018 ! msgid "`sigof' applied to non-aggregate expression" msgstr "" ! #: parse.y:2033 ! msgid "`sigof' applied to non-aggregate type" msgstr "" ! #: parse.y:2299 ! msgid "using `typename' outside of template" msgstr "" ! #: parse.y:2370 #, c-format ! msgid "storage class specifier `%s' not allowed after struct or class" msgstr "" ! #: parse.y:2372 #, c-format ! msgid "type specifier `%s' not allowed after struct or class" msgstr "" ! #: parse.y:2374 #, c-format ! msgid "type qualifier `%s' not allowed after struct or class" msgstr "" ! #: parse.y:2376 ! msgid "no body nor ';' separates two class, struct or union declarations" msgstr "" ! #: parse.y:2508 ! msgid "no bases given following `:'" msgstr "" ! #: parse.y:2539 parse.y:2554 ! msgid "`%D' access" msgstr "" ! #: parse.y:2544 ! msgid "multiple access specifiers" msgstr "" ! #: parse.y:2562 ! msgid "multiple `virtual' specifiers" msgstr "" ! #: parse.y:2599 ! msgid "missing ';' before right brace" msgstr "" ! #: parse.y:2820 ! msgid "ISO C++ forbids array dimensions with parenthesized type in new" msgstr "" ! #: parse.y:3107 parse.y:3127 parse.y:3136 parse.y:3165 ! msgid "`%T' is not a class or namespace" msgstr "" ! #: parse.y:3332 ! msgid "ISO C++ forbids label declarations" msgstr "" ! #: parse.y:3492 ! msgid "ISO C++ forbids computed gotos" msgstr "" ! #: parse.y:3500 ! msgid "label must be followed by statement" msgstr "" ! #: parse.y:3545 ! msgid "must have at least one catch per try block" msgstr "" ! #: parse.y:3605 ! msgid "ISO C++ forbids compound statements inside for initializations" msgstr "" ! #. This helps us recover from really nasty ! #. parse errors, for example, a missing right ! #. parenthesis. ! #: parse.y:3690 parse.y:3700 ! msgid "possibly missing ')'" msgstr "" ! #: parse.y:3793 ! msgid "type specifier omitted for parameter" msgstr "" ! #: parse.y:3802 #, c-format ! msgid "`%E' is not a type, use `typename %E' to make it one" msgstr "" ! #: parse.y:3804 ! msgid "no type `%D' in `%T'" msgstr "" ! #: parse.y:3807 ! #, c-format ! msgid "type specifier omitted for parameter `%E'" msgstr "" ! #: parse.y:3815 ! msgid "'%D' is used as a type, but is not defined as a type." msgstr "" ! #: cp/pt.c:211 ! msgid "data member `%D' cannot be a member template" msgstr "" ! #: cp/pt.c:223 ! msgid "invalid member template declaration `%D'" msgstr "" ! #: cp/pt.c:618 ! msgid "explicit specialization in non-namespace scope `%D'" msgstr "" ! #: cp/pt.c:630 ! msgid "enclosing class templates are not explicitly specialized" msgstr "" ! #: cp/pt.c:705 ! msgid "specializing `%#T' in different namespace" msgstr "" ! #: cp/pt.c:706 ! msgid " from definition of `%#D'" msgstr "" ! #: cp/pt.c:714 ! msgid "specialization of `%T' after instantiation" msgstr "" ! #: cp/pt.c:717 ! msgid "explicit specialization of non-template `%T'" msgstr "" ! #: cp/pt.c:849 ! msgid "specialization of %D after instantiation" msgstr "" ! #: cp/pt.c:952 ! msgid "%s %+#D" msgstr "" ! #: cp/pt.c:1003 ! msgid "`%D' is not a function template" msgstr "" ! #: cp/pt.c:1126 ! msgid "template-id `%D' for `%+D' does not match any template declaration" msgstr "" ! #: cp/pt.c:1134 ! msgid "ambiguous template specialization `%D' for `%+D'" msgstr "" ! #. This case handles bogus declarations like template <> ! #. template void f(); ! #: cp/pt.c:1361 cp/pt.c:1435 ! msgid "template-id `%D' in declaration of primary template" msgstr "" ! #: cp/pt.c:1374 ! msgid "template parameter list used in explicit instantiation" msgstr "" ! #: cp/pt.c:1380 ! msgid "definition provided for explicit instantiation" msgstr "" ! #: cp/pt.c:1386 ! msgid "too many template parameter lists in declaration of `%D'" msgstr "" ! #: cp/pt.c:1402 ! msgid "too few template parameter lists in declaration of `%D'" msgstr "" ! #: cp/pt.c:1419 ! msgid "explicit specialization not preceded by `template <>'" msgstr "" ! #: cp/pt.c:1432 ! msgid "partial specialization `%D' of function template" msgstr "" ! #: cp/pt.c:1464 ! msgid "default argument specified in explicit specialization" msgstr "" ! #: cp/pt.c:1468 ! msgid "template specialization with C linkage" msgstr "" ! #. From [temp.expl.spec]: ! #. ! #. If such an explicit specialization for the member ! #. of a class template names an implicitly-declared ! #. special member function (clause _special_), the ! #. program is ill-formed. ! #. ! #. Similar language is found in [temp.explicit]. ! #: cp/pt.c:1556 ! msgid "specialization of implicitly-declared special member function" msgstr "" ! #: cp/pt.c:1599 ! msgid "no member function `%D' declared in `%T'" msgstr "" ! #. There are two many template parameter lists. ! #: cp/pt.c:1747 ! msgid "too many template parameter lists in declaration of `%T'" msgstr "" ! #: cp/pt.c:1843 ! msgid " shadows template parm `%#D'" msgstr "" ! #: cp/pt.c:2247 ! msgid "template parameters not used in partial specialization:" msgstr "" ! #: cp/pt.c:2251 ! msgid " `%D'" msgstr "" ! #: cp/pt.c:2263 ! msgid "partial specialization `%T' does not specialize any template arguments" msgstr "" ! #: cp/pt.c:2288 ! #, c-format ! msgid "template argument `%E' involves template parameter(s)" msgstr "" ! #: cp/pt.c:2331 ! msgid "type `%T' of template argument `%E' depends on template parameter(s)" msgstr "" ! #: cp/pt.c:2419 ! msgid "no default argument for `%D'" msgstr "" ! #: cp/pt.c:2552 ! msgid "template with C linkage" msgstr "" ! #: cp/pt.c:2555 ! msgid "template class without a name" msgstr "" ! #: cp/pt.c:2632 ! msgid "`%D' does not declare a template type" msgstr "" ! #: cp/pt.c:2638 ! msgid "template definition of non-template `%#D'" msgstr "" ! #: cp/pt.c:2679 ! msgid "expected %d levels of template parms for `%#D', got %d" msgstr "" ! #: cp/pt.c:2691 ! msgid "got %d template parameters for `%#D'" msgstr "" ! #: cp/pt.c:2694 ! msgid "got %d template parameters for `%#T'" msgstr "" ! #: cp/pt.c:2696 ! #, c-format ! msgid " but %d required" msgstr "" ! #: cp/pt.c:2764 ! msgid "`%T' is not a template type" msgstr "" ! #: cp/pt.c:2780 ! msgid "previous declaration `%D'" msgstr "" ! #: cp/pt.c:2781 #, c-format ! msgid "used %d template parameter%s instead of %d" msgstr "" ! #: cp/pt.c:2797 ! msgid "template parameter `%#D'" msgstr "" ! #: cp/pt.c:2798 ! msgid "redeclared here as `%#D'" msgstr "" ! #. We have in [temp.param]: ! #. ! #. A template-parameter may not be given default arguments ! #. by two different declarations in the same scope. ! #: cp/pt.c:2808 ! msgid "redefinition of default argument for `%#D'" msgstr "" ! #: cp/pt.c:2809 ! msgid " original definition appeared here" msgstr "" ! #: cp/pt.c:2902 #, c-format ! msgid "`%E' is not a valid template argument" msgstr "" ! #: cp/pt.c:2906 ! msgid "it must be the address of a function with external linkage" msgstr "" ! #: cp/pt.c:2908 ! msgid "it must be the address of an object with external linkage" ! msgstr "" ! ! #: cp/pt.c:2912 ! msgid "it must be a pointer-to-member of the form `&X::Y'" ! msgstr "" ! ! #: cp/pt.c:2923 #, c-format ! msgid "" ! "string literal %E is not a valid template argument because it is the address " ! "of an object with static linkage" msgstr "" ! #: cp/pt.c:2935 #, c-format ! msgid "address of non-extern `%E' cannot be used as template argument" msgstr "" ! #: cp/pt.c:2946 #, c-format ! msgid "non-constant `%E' cannot be used as template argument" msgstr "" ! #: cp/pt.c:2953 #, c-format ! msgid "object `%E' cannot be used as template argument" msgstr "" ! #: cp/pt.c:3333 #, c-format ! msgid "to refer to a type member of a template parameter, use `typename %E'" msgstr "" ! #: cp/pt.c:3346 cp/pt.c:3362 cp/pt.c:3401 ! msgid "type/value mismatch at argument %d in template parameter list for `%D'" msgstr "" ! #: cp/pt.c:3349 ! msgid " expected a constant of type `%T', got `%T'" msgstr "" ! #: cp/pt.c:3353 #, c-format ! msgid " expected a type, got `%E'" msgstr "" ! #: cp/pt.c:3365 ! msgid " expected a type, got `%T'" msgstr "" ! #: cp/pt.c:3367 ! msgid " expected a class template, got `%T'" msgstr "" ! #: cp/pt.c:3403 ! msgid " expected a template of type `%D', got `%D'" msgstr "" ! #: cp/pt.c:3425 ! msgid "template-argument `%T' uses anonymous type" msgstr "" ! #: cp/pt.c:3428 ! msgid "template-argument `%T' uses local type `%T'" ! msgstr "" ! ! #: cp/pt.c:3463 ! msgid "could not convert template argument `%E' to `%T'" ! msgstr "" ! ! #: cp/pt.c:3507 #, c-format ! msgid "wrong number of template arguments (%d, should be %d)" msgstr "" ! #: cp/pt.c:3511 ! msgid "provided for `%D'" ! msgstr "" ! ! #: cp/pt.c:3558 #, c-format ! msgid "template argument %d is invalid" msgstr "" ! #: cp/pt.c:3790 ! msgid "non-template used as template" msgstr "" ! #: cp/pt.c:3908 ! msgid "`%T' is not a template" msgstr "" ! #: cp/pt.c:3921 ! msgid "non-template type `%T' used as a template" msgstr "" ! #: cp/pt.c:3923 ! msgid "for template declaration `%D'" msgstr "" ! #: cp/pt.c:4486 ! msgid "" ! "template instantiation depth exceeds maximum of %d (use -ftemplate-depth-NN " ! "to increase the maximum) instantiating `%D'" msgstr "" ! #: cp/pt.c:4921 ! msgid "ambiguous class template instantiation for `%#T'" msgstr "" ! #: cp/pt.c:4928 ! msgid "%s %+#T" msgstr "" ! #: cp/pt.c:5949 cp/pt.c:6054 ! msgid "instantiation of `%D' as type `%T'" msgstr "" ! #: cp/pt.c:6096 ! msgid "invalid parameter type `%T'" msgstr "" ! #: cp/pt.c:6098 ! msgid "in declaration `%D'" msgstr "" ! #: cp/pt.c:6173 ! msgid "creating pointer to member function of non-class type `%T'" msgstr "" ! #: cp/pt.c:6336 ! msgid "creating array with size zero" msgstr "" ! #: cp/pt.c:6350 #, c-format ! msgid "creating array with size zero (`%E')" msgstr "" ! #: cp/pt.c:6589 ! msgid "forming reference to void" msgstr "" ! #: cp/pt.c:6591 ! msgid "forming %s to reference type `%T'" msgstr "" ! #: cp/pt.c:6629 ! msgid "creating pointer to member of non-class type `%T'" msgstr "" ! #: cp/pt.c:6635 ! msgid "creating pointer to member reference type `%T'" msgstr "" ! #: cp/pt.c:6713 ! msgid "creating array of `%T'" msgstr "" ! #: cp/pt.c:6756 ! msgid "`%T' is not a class, struct, or union type" msgstr "" ! #: cp/pt.c:6866 #, c-format ! msgid "use of `%s' in template" msgstr "" ! #: cp/pt.c:7629 ! msgid "type `%T' composed from a local class is not a valid template-argument" msgstr "" ! #: cp/pt.c:7630 ! msgid " trying to instantiate `%D'" msgstr "" ! #: cp/pt.c:8060 ! msgid "incomplete type unification" msgstr "" ! #: cp/pt.c:9027 #, c-format ! msgid "use of `%s' in template type unification" msgstr "" ! #: cp/pt.c:9447 cp/pt.c:9515 ! msgid "explicit instantiation of non-template `%#D'" msgstr "" ! #: cp/pt.c:9463 cp/pt.c:9510 ! msgid "no matching template for `%D' found" msgstr "" ! #: cp/pt.c:9469 ! msgid "explicit instantiation of `%#D'" msgstr "" ! #. [temp.spec] ! #. ! #. No program shall both explicitly instantiate and explicitly ! #. specialize a template. ! #: cp/pt.c:9486 ! msgid "explicit instantiation of `%#D' after" msgstr "" ! #: cp/pt.c:9487 cp/pt.c:9624 ! msgid "explicit specialization here" msgstr "" ! #: cp/pt.c:9502 ! msgid "duplicate explicit instantiation of `%#D'" msgstr "" ! #: cp/pt.c:9527 ! msgid "ISO C++ forbids the use of `extern' on explicit instantiations" msgstr "" ! #: cp/pt.c:9531 cp/pt.c:9609 ! msgid "storage class `%D' applied to template instantiation" msgstr "" ! #: cp/pt.c:9576 ! msgid "explicit instantiation of non-template type `%T'" msgstr "" ! #: cp/pt.c:9590 ! msgid "explicit instantiation of `%#T' before definition of template" msgstr "" ! #: cp/pt.c:9598 #, c-format ! msgid "ISO C++ forbids the use of `%s' on explicit instantiations" msgstr "" ! #: cp/pt.c:9623 ! msgid "explicit instantiation of `%#T' after" msgstr "" ! #: cp/pt.c:9641 ! msgid "duplicate explicit instantiation of `%#T'" msgstr "" ! #: cp/pt.c:10003 ! msgid "explicit instantiation of `%D' but no definition available" msgstr "" ! #: cp/pt.c:10375 ! msgid "`%#T' is not a valid type for a template constant parameter" ! msgstr "" ! ! #: cp/repo.c:272 ! msgid "-frepo must be used with -c" ! msgstr "" ! ! #: cp/repo.c:366 #, c-format ! msgid "mysterious repository information in %s" msgstr "" ! #: cp/repo.c:381 #, c-format ! msgid "can't create repository information file `%s'" msgstr "" ! #: cp/rtti.c:200 ! msgid "cannot use typeid with -fno-rtti" msgstr "" ! #: cp/rtti.c:206 ! msgid "must #include before using typeid" msgstr "" ! #: cp/rtti.c:280 ! msgid "" ! "cannot create type information for type `%T' because its size is variable" msgstr "" ! #: cp/rtti.c:525 cp/rtti.c:539 ! msgid "dynamic_cast of `%#D' to `%#T' can never succeed" msgstr "" ! #: cp/rtti.c:614 ! msgid "cannot dynamic_cast `%E' (of type `%#T') to type `%#T' (%s)" msgstr "" ! #: cp/search.c:340 ! msgid "`%T' is an inaccessible base of `%T'" msgstr "" ! #: cp/search.c:350 ! msgid "`%T' is an ambiguous base of `%T'" msgstr "" ! #: cp/search.c:1820 ! msgid "adjusting pointers for covariant returns" msgstr "" ! #: cp/search.c:1824 cp/search.c:1831 ! msgid "invalid covariant return type for `%#D'" msgstr "" ! #: cp/search.c:1825 ! msgid " overriding `%#D' (must be pointer or reference to class)" msgstr "" ! #: cp/search.c:1832 ! msgid " overriding `%#D' (must use pointer or reference)" msgstr "" ! #: cp/search.c:1837 ! msgid "conflicting return type specified for `%#D'" msgstr "" ! #: cp/search.c:1838 ! msgid " overriding `%#D'" msgstr "" ! #: cp/search.c:1847 ! #, c-format ! msgid "looser throw specifier for `%#F'" msgstr "" ! #: cp/search.c:1848 ! #, c-format ! msgid " overriding `%#F'" msgstr "" ! #. A static member function cannot match an inherited ! #. virtual member function. ! #: cp/search.c:1938 ! msgid "`%#D' cannot be declared" msgstr "" ! #: cp/search.c:1939 ! msgid " since `%#D' declared in base class" ! msgstr "" ! ! #: cp/search.c:2080 ! msgid "`%#D' needs a final overrider" ! msgstr "" ! ! #: cp/semantics.c:911 #, c-format ! msgid "type of asm operand `%E' could not be determined" msgstr "" ! #: cp/semantics.c:1053 ! msgid "ISO C++ does not permit named return values" msgstr "" ! #: cp/semantics.c:1062 ! msgid "return identifier `%D' already in place" msgstr "" ! #: cp/semantics.c:1070 ! msgid "can't redefine default return value for constructors" msgstr "" ! #: cp/semantics.c:1137 ! msgid "base initializer for `%T'" msgstr "" ! #: cp/semantics.c:1139 ! msgid " will be re-ordered to precede member initializations" msgstr "" ! #: cp/semantics.c:1327 ! msgid "`this' is unavailable for static member functions" msgstr "" ! #: cp/semantics.c:1333 ! msgid "invalid use of `this' in non-member function" msgstr "" ! #: cp/semantics.c:1335 ! msgid "invalid use of `this' at top level" msgstr "" ! #: cp/semantics.c:1373 ! msgid "calling type `%T' like a method" msgstr "" ! #: cp/semantics.c:1409 ! msgid "destructor specifier `%T::~%T()' must have matching names" msgstr "" ! #: cp/semantics.c:1415 ! msgid "`%E' is not of type `%T'" msgstr "" ! #: cp/semantics.c:1608 ! msgid "template type parameters must use the keyword `class' or `typename'" msgstr "" ! #: cp/semantics.c:1670 ! msgid "definition of `%#T' inside template parameter list" msgstr "" ! #: cp/semantics.c:1686 ! msgid "invalid definition of qualified type `%T'" msgstr "" ! #: cp/semantics.c:2039 ! msgid "base class `%T' has cv qualifiers" msgstr "" ! #: cp/semantics.c:2072 ! msgid "multiple declarators in template declaration" msgstr "" ! #: cp/spew.c:239 #, c-format ! msgid "identifier name `%s' conflicts with GNU C++ internal naming strategy" msgstr "" ! #: cp/spew.c:1017 cp/spew.c:1292 ! msgid "parse error at end of saved function text" msgstr "" ! #: cp/spew.c:1062 ! msgid "parse error in method specification" msgstr "" ! #: cp/spew.c:1104 ! msgid "function body for constructor missing" msgstr "" ! #: cp/spew.c:1371 ! msgid "circular dependency in default args of `%#D'" msgstr "" ! #: cp/spew.c:1435 ! msgid "invalid type `%T' for default argument to `%T'" ! msgstr "" ! ! #: cp/spew.c:1495 #, c-format ! msgid "%s before `%s'" msgstr "" ! #: cp/spew.c:1497 #, c-format ! msgid "%s before `%c'" msgstr "" ! #: cp/spew.c:1499 #, c-format ! msgid "%s before `\\%o'" msgstr "" ! #: cp/spew.c:1502 #, c-format ! msgid "%s before `%s' token" msgstr "" ! #: cp/tree.c:224 #, c-format ! msgid "non-lvalue in %s" msgstr "" ! #: cp/tree.c:578 ! msgid "`%V' qualifiers cannot be applied to `%T'" msgstr "" ! #: cp/tree.c:581 ! msgid "ignoring `%V' qualifiers on `%T'" ! msgstr "" ! ! #: cp/tree.c:1920 #, c-format ! msgid "`%s' attribute can only be applied to Java class definitions" msgstr "" ! #: cp/tree.c:1950 #, c-format ! msgid "`%s' attribute can only be applied to class definitions" msgstr "" ! #: cp/tree.c:1956 ! #, c-format ! msgid "`%s' is obsolete; g++ vtables are now COM-compatible by default" msgstr "" ! #: cp/tree.c:1981 ! msgid "requested init_priority is not an integer constant" ! msgstr "" ! ! #: cp/tree.c:2002 #, c-format msgid "" ! "can only use `%s' attribute on file-scope definitions of objects of class " ! "type" msgstr "" ! #: cp/tree.c:2010 ! msgid "requested init_priority is out of range" msgstr "" ! #: cp/tree.c:2020 ! msgid "requested init_priority is reserved for internal use" msgstr "" ! #: cp/tree.c:2030 #, c-format ! msgid "`%s' attribute is not supported on this platform" msgstr "" ! #: cp/typeck.c:518 #, c-format ! msgid "" ! "ISO C++ forbids %s between pointer of type `void *' and pointer-to-function" msgstr "" ! #: cp/typeck.c:539 ! msgid "%s between distinct pointer types `%T' and `%T' lacks a cast" msgstr "" ! #: cp/typeck.c:1430 ! msgid "ISO C++ prohibits conversion from `%#T' to `(...)'" msgstr "" ! #: cp/typeck.c:1500 ! msgid "ISO C++ forbids applying `sizeof' to a function type" msgstr "" ! #: cp/typeck.c:1506 ! msgid "ISO C++ forbids applying `sizeof' to a member function" msgstr "" ! #: cp/typeck.c:1512 ! msgid "" ! "ISO C++ forbids applying `sizeof' to type `void' which is an incomplete type" msgstr "" ! #: cp/typeck.c:1526 ! msgid "`sizeof' applied to non-static member" msgstr "" ! #: cp/typeck.c:1531 ! msgid "`sizeof' applied to incomplete type `%T'" msgstr "" ! #: cp/typeck.c:1561 ! msgid "sizeof applied to a bit-field" ! msgstr "" ! ! #: cp/typeck.c:1564 ! msgid "ISO C++ forbids applying `sizeof' to an expression of function type" ! msgstr "" ! ! #: cp/typeck.c:1711 ! msgid "invalid use of non-lvalue array" ! msgstr "" ! ! #: cp/typeck.c:1817 ! msgid "deprecated conversion from string constant to `%T'" ! msgstr "" ! ! #: cp/typeck.c:1835 ! msgid "request for member `%T::%D' in expression of non-aggregate type `%T'" ! msgstr "" ! ! #: cp/typeck.c:2030 ! msgid "destructor specifier `%T::~%T' must have matching names" ! msgstr "" ! ! #: cp/typeck.c:2036 ! msgid "type `%T' has no destructor" ! msgstr "" ! ! #: cp/typeck.c:2053 cp/typeck.c:2135 ! msgid "invalid use of type decl `%#D' as expression" ! msgstr "" ! ! #: cp/typeck.c:2058 ! msgid "invalid use of template `%#D' as expression" ! msgstr "" ! ! #: cp/typeck.c:2126 ! msgid "`%#T' has no member named `%D'" ! msgstr "" ! ! #: cp/typeck.c:2176 cp/typeck.c:2205 ! msgid "invalid offsetof from non-POD type `%#T'; use pointer to member instead" ! msgstr "" ! ! #. A pointer to incomplete type (other than cv void) can be ! #. dereferenced [expr.unary.op]/1 ! #: cp/typeck.c:2316 ! msgid "`%T' is not a pointer-to-object type" ! msgstr "" ! ! #: cp/typeck.c:2343 #, c-format + msgid "invalid use of `%s' on pointer to member" + msgstr "" + + #: cp/typeck.c:2349 + msgid "invalid type argument" + msgstr "" + + #: cp/typeck.c:2452 + msgid "ISO C++ forbids subscripting non-lvalue array" + msgstr "" + + #: cp/typeck.c:2463 + msgid "subscripting array declared `register'" + msgstr "" + + #: cp/typeck.c:2638 cp/typeck.c:2788 + msgid "pointer to member function called, but not in class scope" + msgstr "" + + #: cp/typeck.c:2662 + msgid "object missing in call to method `%D'" + msgstr "" + + #: cp/typeck.c:2706 msgid "" ! "function `%D' declared overloaded, but no definitions appear with which to " ! "resolve it?!?" msgstr "" ! #: cp/typeck.c:2786 ! msgid "" ! "invalid call to member function needing `this' in static member function " ! "scope" msgstr "" ! #: cp/typeck.c:2965 ! msgid "ISO C++ forbids calling `::main' from within program" ! msgstr "" ! ! #: cp/typeck.c:2990 #, c-format ! msgid "must use .* or ->* to call pointer-to-member function in `%E (...)'" msgstr "" ! #: cp/typeck.c:3003 ! #, c-format ! msgid "`%E' cannot be used as a function" msgstr "" ! #: cp/typeck.c:3128 ! msgid "too many arguments to %s `%+#D'" msgstr "" ! #: cp/typeck.c:3169 ! msgid "parameter type of called function is incomplete" ! msgstr "" ! ! #: cp/typeck.c:3236 ! msgid "too few arguments to %s `%+#D'" ! msgstr "" ! ! #: cp/typeck.c:3364 cp/typeck.c:3374 ! msgid "assuming cast to type `%T' from overloaded function" ! msgstr "" ! ! #: cp/typeck.c:3434 #, c-format ! msgid "division by zero in `%E / 0'" msgstr "" ! #: cp/typeck.c:3436 #, c-format ! msgid "division by zero in `%E / 0.'" msgstr "" ! #: cp/typeck.c:3466 #, c-format ! msgid "division by zero in `%E %% 0'" msgstr "" ! #: cp/typeck.c:3468 #, c-format ! msgid "division by zero in `%E %% 0.'" msgstr "" ! #: cp/typeck.c:3548 #, c-format ! msgid "%s rotate count is negative" msgstr "" ! #: cp/typeck.c:3551 #, c-format ! msgid "%s rotate count >= width of type" msgstr "" ! #: cp/typeck.c:3582 cp/typeck.c:3587 cp/typeck.c:3678 cp/typeck.c:3683 ! msgid "ISO C++ forbids comparison between pointer and integer" msgstr "" ! #: cp/typeck.c:3863 ! msgid "comparison between types `%#T' and `%#T'" msgstr "" ! #: cp/typeck.c:3899 ! msgid "comparison between signed and unsigned integer expressions" msgstr "" ! #: cp/typeck.c:3964 ! msgid "invalid operands of types `%T' and `%T' to binary `%O'" msgstr "" ! #. Some sort of arithmetic operation involving NULL was ! #. performed. Note that pointer-difference and pointer-addition ! #. have already been handled above, and so we don't end up here in ! #. that case. ! #: cp/typeck.c:3986 ! msgid "NULL used in arithmetic" msgstr "" ! #: cp/typeck.c:4053 ! msgid "ISO C++ forbids using pointer of type `void *' in subtraction" msgstr "" ! #: cp/typeck.c:4055 ! msgid "ISO C++ forbids using pointer to a function in subtraction" msgstr "" ! #: cp/typeck.c:4057 ! msgid "ISO C++ forbids using pointer to a method in subtraction" msgstr "" ! #: cp/typeck.c:4059 ! msgid "ISO C++ forbids using pointer to a member in subtraction" msgstr "" ! #: cp/typeck.c:4071 ! msgid "invalid use of a pointer to an incomplete type in pointer arithmetic" msgstr "" ! #: cp/typeck.c:4108 ! msgid "attempt to take address of bit-field structure member `%D'" msgstr "" ! #: cp/typeck.c:4185 ! msgid "taking address of temporary" msgstr "" ! #: cp/typeck.c:4387 ! #, c-format ! msgid "ISO C++ forbids %sing an enum" msgstr "" ! #: cp/typeck.c:4399 ! msgid "cannot %s a pointer to incomplete type `%T'" msgstr "" ! #: cp/typeck.c:4406 ! msgid "ISO C++ forbids %sing a pointer of type `%T'" msgstr "" ! #: cp/typeck.c:4431 ! msgid "cast to non-reference type used as lvalue" msgstr "" ! #: cp/typeck.c:4465 ! msgid "invalid use of `--' on bool variable `%D'" msgstr "" ! #. ARM $3.4 ! #: cp/typeck.c:4498 ! msgid "ISO C++ forbids taking address of function `::main'" msgstr "" ! #. An expression like &memfn. ! #: cp/typeck.c:4565 ! msgid "" ! "ISO C++ forbids taking the address of an unqualified non-static member " ! "function to form a pointer to member function. Say `&%T::%D'" msgstr "" ! #: cp/typeck.c:4567 ! msgid "" ! "ISO C++ forbids taking the address of a bound member function to form a " ! "pointer to member function. Say `&%T::%D'" msgstr "" ! #: cp/typeck.c:4591 ! msgid "ISO C++ forbids taking the address of a cast to a non-lvalue expression" msgstr "" ! #: cp/typeck.c:4607 ! msgid "unary `&'" msgstr "" ! #: cp/typeck.c:4727 ! msgid "taking address of destructor" msgstr "" ! #: cp/typeck.c:4740 ! msgid "taking address of bound pointer-to-member expression" msgstr "" ! #: cp/typeck.c:4756 ! msgid "cannot create pointer to reference member `%D'" msgstr "" ! #: cp/typeck.c:4824 ! msgid "cannot take the address of `this', which is an rvalue expression" msgstr "" ! #: cp/typeck.c:4840 ! msgid "address requested for `%D', which is declared `register'" msgstr "" ! #: cp/typeck.c:5060 ! msgid "static_cast from type `%T' to type `%T' casts away constness" msgstr "" ! #: cp/typeck.c:5068 ! msgid "invalid static_cast from type `%T' to type `%T'" msgstr "" ! #: cp/typeck.c:5107 msgid "" ! "invalid reinterpret_cast of an rvalue expression of type `%T' to type `%T'" msgstr "" ! #: cp/typeck.c:5127 ! msgid "reinterpret_cast from `%T' to `%T' loses precision" msgstr "" ! #: cp/typeck.c:5140 ! msgid "reinterpret_cast from `%T' to `%T' casts away const (or volatile)" msgstr "" ! #: cp/typeck.c:5149 ! msgid "" ! "ISO C++ forbids casting between pointer-to-function and pointer-to-object" msgstr "" ! #: cp/typeck.c:5155 ! msgid "invalid reinterpret_cast from type `%T' to type `%T'" msgstr "" ! #: cp/typeck.c:5182 ! msgid "" ! "invalid use of const_cast with type `%T', which is not a pointer, reference, " ! "nor a pointer-to-data-member type" msgstr "" ! #: cp/typeck.c:5185 ! msgid "" ! "invalid use of const_cast with type `%T', which is a pointer or reference to " ! "a function type" msgstr "" ! #: cp/typeck.c:5208 ! msgid "invalid const_cast of an rvalue of type `%T' to type `%T'" msgstr "" ! #: cp/typeck.c:5224 ! msgid "invalid const_cast from type `%T' to type `%T'" msgstr "" ! #: cp/typeck.c:5266 cp/typeck.c:5271 ! msgid "ISO C++ forbids casting to an array type `%T'" msgstr "" ! #: cp/typeck.c:5279 ! msgid "invalid cast to function type `%T'" msgstr "" ! #: cp/typeck.c:5331 ! msgid "cast from `%T' to `%T' discards qualifiers from pointer target type" msgstr "" ! #: cp/typeck.c:5377 ! msgid "cast from `%T' to `%T' increases required alignment of target type" msgstr "" ! #: cp/typeck.c:5546 ! msgid " in evaluation of `%Q(%#T, %#T)'" msgstr "" ! #: cp/typeck.c:5588 ! msgid "ISO C++ forbids cast to non-reference type used as lvalue" msgstr "" ! #: cp/typeck.c:5659 ! msgid "incompatible types in assignment of `%T' to `%T'" msgstr "" ! #: cp/typeck.c:5666 ! msgid "ISO C++ forbids assignment of arrays" msgstr "" ! #: cp/typeck.c:5809 ! msgid " in pointer to member function conversion" msgstr "" ! #: cp/typeck.c:5817 ! msgid " in pointer to member conversion" msgstr "" ! #. This is a reinterpret cast, we choose to do nothing. ! #: cp/typeck.c:5828 cp/typeck.c:5847 ! msgid "pointer to member cast via virtual base `%T' of `%T'" msgstr "" ! #: cp/typeck.c:5851 ! msgid "pointer to member conversion via virtual base `%T' of `%T'" msgstr "" ! #: cp/typeck.c:5921 ! msgid "invalid conversion to type `%T' from type `%T'" msgstr "" ! #: cp/typeck.c:6086 ! msgid "passing NULL used for non-pointer %s %P of `%D'" msgstr "" ! #: cp/typeck.c:6089 ! msgid "%s to non-pointer type `%T' from NULL" msgstr "" ! #: cp/typeck.c:6097 ! msgid "passing `%T' for %s %P of `%D'" msgstr "" ! #: cp/typeck.c:6100 ! msgid "%s to `%T' from `%T'" msgstr "" ! #: cp/typeck.c:6110 ! msgid "passing negative value `%E' for %s %P of `%D'" msgstr "" ! #: cp/typeck.c:6113 ! msgid "%s of negative value `%E' to `%T'" msgstr "" ! #: cp/typeck.c:6200 ! msgid "cannot convert `%T' to `%T' for argument `%P' to `%D'" msgstr "" ! #: cp/typeck.c:6203 ! msgid "cannot convert `%T' to `%T' in %s" msgstr "" ! #: cp/typeck.c:6290 cp/typeck.c:6292 ! msgid "in passing argument %P of `%+D'" msgstr "" ! #: cp/typeck.c:6406 ! msgid "returning reference to temporary" msgstr "" ! #: cp/typeck.c:6413 ! msgid "reference to non-lvalue returned" msgstr "" ! #: cp/typeck.c:6425 ! msgid "reference to local variable `%D' returned" msgstr "" ! #: cp/typeck.c:6428 ! msgid "address of local variable `%D' returned" msgstr "" ! #: cp/typeck.c:6459 ! msgid "returning a value from a destructor" msgstr "" ! #. If a return statement appears in a handler of the ! #. function-try-block of a constructor, the program is ill-formed. ! #: cp/typeck.c:6467 ! msgid "cannot return from a handler of a function-try-block of a constructor" msgstr "" ! #. You can't return a value from a constructor. ! #: cp/typeck.c:6470 ! msgid "returning a value from a constructor" msgstr "" ! #: cp/typeck.c:6487 ! msgid "" ! "return-statement with no value, in function declared with a non-void return " ! "type" msgstr "" ! #: cp/typeck.c:6503 ! msgid "" ! "return-statement with a value, in function declared with a void return type" msgstr "" ! #: cp/typeck.c:6524 ! msgid "" ! "`operator new' must not return NULL unless it is declared `throw()' (or -" ! "fcheck-new is in effect)" msgstr "" ! #: cp/typeck2.c:54 ! msgid "type `%T' is not a base type for type `%T'" msgstr "" ! #: cp/typeck2.c:151 ! msgid "cannot declare variable `%D' to be of type `%T'" msgstr "" ! #: cp/typeck2.c:154 ! msgid "cannot declare parameter `%D' to be of type `%T'" msgstr "" ! #: cp/typeck2.c:157 ! msgid "cannot declare field `%D' to be of type `%T'" msgstr "" ! #: cp/typeck2.c:161 ! msgid "invalid return type for member function `%#D'" msgstr "" ! #: cp/typeck2.c:163 ! msgid "invalid return type for function `%#D'" msgstr "" ! #: cp/typeck2.c:166 ! msgid "cannot allocate an object of type `%T'" msgstr "" ! #: cp/typeck2.c:173 ! msgid " because the following virtual functions are abstract:" msgstr "" ! #: cp/typeck2.c:175 ! msgid "\t%#D" msgstr "" ! #: cp/typeck2.c:178 ! msgid " since type `%T' has abstract virtual functions" msgstr "" ! #: cp/typeck2.c:213 ! msgid "invalid use of undefined type `%#T'" msgstr "" ! #: cp/typeck2.c:214 ! msgid "forward declaration of `%#T'" msgstr "" ! #: cp/typeck2.c:218 ! msgid "invalid use of `%T'" msgstr "" ! #: cp/typeck2.c:232 ! msgid "invalid use of member (did you forget the `&' ?)" msgstr "" ! #: cp/typeck2.c:236 ! msgid "invalid use of template type parameter" msgstr "" ! #: cp/typeck2.c:243 ! msgid "address of overloaded function with no contextual type information" msgstr "" ! #: cp/typeck2.c:245 ! msgid "overloaded function with no contextual type information" msgstr "" ! #: cp/typeck2.c:247 ! msgid "insufficient contextual information to determine type" msgstr "" ! #: cp/typeck2.c:301 ! msgid "constructor syntax used, but no constructor declared for type `%T'" msgstr "" ! #: cp/typeck2.c:311 ! msgid "initializer list construction invalid for derived class object `%D'" msgstr "" ! #: cp/typeck2.c:313 ! msgid "initializer list construction invalid for polymorphic class object `%D'" msgstr "" ! #: cp/typeck2.c:316 cp/typeck2.c:322 cp/typeck2.c:328 ! msgid "initializer list construction invalid for `%D'" msgstr "" ! #: cp/typeck2.c:317 ! msgid "due to the presence of a constructor" msgstr "" ! #: cp/typeck2.c:323 cp/typeck2.c:329 ! msgid "due to non-public access of member `%D'" msgstr "" ! #: cp/typeck2.c:341 ! msgid "comma expression used to initialize return value" msgstr "" ! #: cp/typeck2.c:350 ! msgid "cannot initialize arrays using this syntax" msgstr "" ! #: cp/typeck2.c:412 ! msgid "ISO C++ forbids non-constant aggregate initializer expressions" msgstr "" ! #: cp/typeck2.c:498 ! msgid "initializing array with parameter list" msgstr "" ! #: cp/typeck2.c:554 ! msgid "initializer for scalar variable requires one element" msgstr "" ! #: cp/typeck2.c:561 ! msgid "braces around scalar initializer for `%T'" msgstr "" ! #: cp/typeck2.c:564 ! msgid "ignoring extra initializers for `%T'" msgstr "" ! #: cp/typeck2.c:576 ! msgid "variable-sized object of type `%T' may not be initialized" msgstr "" ! #: cp/typeck2.c:586 ! msgid "subobject of type `%T' must be initialized by constructor, not by `%E'" msgstr "" ! #: cp/typeck2.c:652 ! msgid "aggregate has a partly bracketed initializer" msgstr "" ! #: cp/typeck2.c:690 cp/typeck2.c:791 ! msgid "non-trivial labeled initializers" msgstr "" ! #: cp/typeck2.c:707 ! msgid "non-empty initializer for array of empty elements" msgstr "" ! #: cp/typeck2.c:757 ! msgid "initializer list for object of class with virtual base classes" msgstr "" ! #: cp/typeck2.c:763 ! msgid "initializer list for object of class with base classes" msgstr "" ! #: cp/typeck2.c:769 ! msgid "initializer list for object using virtual functions" msgstr "" ! #: cp/typeck2.c:832 cp/typeck2.c:849 ! msgid "missing initializer for member `%D'" msgstr "" ! #: cp/typeck2.c:837 ! msgid "uninitialized const member `%D'" msgstr "" ! #: cp/typeck2.c:840 ! msgid "member `%D' with uninitialized const fields" msgstr "" ! #: cp/typeck2.c:843 ! msgid "member `%D' is uninitialized reference" msgstr "" ! #: cp/typeck2.c:886 ! msgid "index value instead of field name in union initializer" msgstr "" ! #: cp/typeck2.c:898 ! msgid "no field `%D' in union being initialized" msgstr "" ! #: cp/typeck2.c:906 ! msgid "union `%T' with no named members cannot be initialized" msgstr "" ! #: cp/typeck2.c:942 ! msgid "excess elements in aggregate initializer" msgstr "" ! #: cp/typeck2.c:1047 ! msgid "circular pointer delegation detected" msgstr "" ! #: cp/typeck2.c:1060 ! msgid "base operand of `->' has non-pointer type `%T'" msgstr "" ! #: cp/typeck2.c:1074 ! msgid "result of `operator->()' yields non-pointer result" msgstr "" ! #: cp/typeck2.c:1076 ! msgid "base operand of `->' is not a pointer" msgstr "" ! #: cp/typeck2.c:1142 ! msgid "`%E' cannot be used as a member pointer, since it is of type `%T'" msgstr "" ! #: cp/typeck2.c:1149 ! msgid "" ! "cannot apply member pointer `%E' to `%E', which is of non-aggregate type `%T'" msgstr "" ! #: cp/typeck2.c:1158 ! msgid "member type `%T::' incompatible with object type `%T'" msgstr "" ! #: cp/typeck2.c:1195 ! msgid "`%T' fails to be a typedef or built-in type" ! msgstr "" ! ! #: cp/typeck2.c:1268 #, c-format ! msgid "ISO C++ forbids defining types within %s" msgstr "" ! #. XXX Not i18n clean. ! #: cp/cp-tree.h:3854 #, c-format ! msgid "%s is deprecated, please see the documentation for details" msgstr "" ! #: cp/lang-options.h:29 ! msgid "Do not obey access control semantics" msgstr "" ! #: cp/lang-options.h:31 ! msgid "Change when template instances are emitted" msgstr "" ! #: cp/lang-options.h:36 ! msgid "Check the return value of new" msgstr "" ! #: cp/lang-options.h:39 ! msgid "Reduce size of object files" msgstr "" ! #: cp/lang-options.h:43 ! msgid "Make string literals `char[]' instead of `const char[]'" msgstr "" ! #: cp/lang-options.h:46 ! msgid "Dump the entire translation unit to a file" msgstr "" ! #: cp/lang-options.h:48 ! msgid "Do not inline member functions by default" msgstr "" ! #: cp/lang-options.h:51 ! msgid "Do not generate run time type descriptor information" msgstr "" ! #: cp/lang-options.h:56 ! msgid "Do not generate code to check exception specifications" msgstr "" ! #: cp/lang-options.h:61 ! msgid "Scope of for-init-statement vars extends outside" msgstr "" ! #: cp/lang-options.h:64 ! msgid "Do not recognize GNU defined keywords" msgstr "" ! #: cp/lang-options.h:68 ! msgid "Enable support for huge objects" msgstr "" ! #: cp/lang-options.h:72 ! msgid "Export functions even if they can be inlined" msgstr "" ! #: cp/lang-options.h:75 ! msgid "Only emit explicit template instatiations" msgstr "" ! #: cp/lang-options.h:78 ! msgid "Only emit explicit instatiations of inline templates" msgstr "" ! #: cp/lang-options.h:84 ! msgid "Don't pedwarn about uses of Microsoft extensions" msgstr "" ! #: cp/lang-options.h:87 ! msgid "Recognize and/bitand/bitor/compl/not/or/xor" msgstr "" ! #: cp/lang-options.h:91 ! msgid "Disable optional diagnostics" msgstr "" ! #: cp/lang-options.h:93 ! msgid "Downgrade conformance errors to warnings" msgstr "" ! #: cp/lang-options.h:96 ! msgid "Enable automatic template instantiation" msgstr "" ! #: cp/lang-options.h:101 ! msgid "Display statistics accumulated during compilation" msgstr "" ! #: cp/lang-options.h:104 ! msgid "Specify maximum template instantiation depth" msgstr "" ! #: cp/lang-options.h:106 ! msgid "Use __cxa_atexit to register destructors" msgstr "" ! #: cp/lang-options.h:109 ! msgid "Discard unused virtual functions" msgstr "" ! #: cp/lang-options.h:112 ! msgid "Implement vtables using thunks" msgstr "" ! #: cp/lang-options.h:115 ! msgid "Emit common-like symbols as weak symbols" msgstr "" ! #: cp/lang-options.h:118 ! msgid "Emit cross referencing information" msgstr "" ! #: cp/lang-options.h:122 ! msgid "Warn about inconsistent return types" msgstr "" ! #: cp/lang-options.h:125 ! msgid "Warn about overloaded virtual function names" msgstr "" ! #: cp/lang-options.h:129 ! msgid "Don't warn when all ctors/dtors are private" msgstr "" ! #: cp/lang-options.h:131 ! msgid "Warn about non virtual destructors" msgstr "" ! #: cp/lang-options.h:134 ! msgid "Warn when a function is declared extern, then inline" msgstr "" ! #: cp/lang-options.h:137 ! msgid "Warn when the compiler reorders code" msgstr "" ! #: cp/lang-options.h:140 ! msgid "Warn when synthesis behavior differs from Cfront" msgstr "" ! #: cp/lang-options.h:144 ! msgid "Don't warn when type converting pointers to member functions" msgstr "" ! #: cp/lang-options.h:146 ! msgid "Warn about violations of Effective C++ style rules" msgstr "" ! #: cp/lang-options.h:149 ! msgid "Warn when overload promotes from unsigned to signed" msgstr "" ! #: cp/lang-options.h:152 ! msgid "Warn if a C style cast is used in a program" msgstr "" ! #: cp/lang-options.h:156 ! msgid "" ! "Don't warn when non-templatized friend functions are declared within a " ! "template" msgstr "" ! #: cp/lang-options.h:159 ! msgid "Don't announce deprecation of compiler features" msgstr "" ! #: f/bad.c:386 ! msgid "note:" msgstr "" ! #: f/bad.c:390 ! msgid "warning:" msgstr "" ! #: f/bad.c:394 ! msgid "fatal:" msgstr "" ! #: f/bad.c:436 ! msgid "(continued):" msgstr "" ! #: f/bad.c:486 f/bad.c:504 ! msgid "[REPORT BUG!!] %" msgstr "" ! #: f/bad.c:493 f/bad.c:525 ! msgid "[REPORT BUG!!]" msgstr "" ! #: f/com.c:3122 ! #, no-c-format ! msgid "ASSIGN'ed label cannot fit into `%A' at %0 -- using wider sibling" msgstr "" ! #: f/com.c:11606 ! msgid "no INTEGER type can hold a pointer on this configuration" msgstr "" ! #: f/com.c:11831 #, c-format ! msgid "configuration: REAL, INTEGER, and LOGICAL are %d bits wide," msgstr "" ! #: f/com.c:11833 #, c-format ! msgid "and pointers are %d bits wide, but g77 doesn't yet work" msgstr "" ! #: f/com.c:11835 ! msgid "properly unless they all are 32 bits wide" msgstr "" ! #: f/com.c:11836 ! msgid "Please keep this in mind before you report bugs." msgstr "" ! #. I/O will probably crash. ! #: f/com.c:11844 #, c-format ! msgid "configuration: char * holds %d bits, but ftnlen only %d" msgstr "" ! #. ASSIGN 10 TO I will crash. ! #: f/com.c:11853 #, c-format msgid "" ! "configuration: char * holds %d bits, but INTEGER only %d --\n" ! " ASSIGN statement might fail" msgstr "" ! #: f/com.c:13687 ! msgid "In statement function" msgstr "" ! #: f/com.c:13697 ! msgid "Outside of any program unit:\n" msgstr "" ! #: f/com.c:15386 ! #, no-c-format ! msgid "%A from %B at %0%C" msgstr "" ! #: f/com.c:15563 ! msgid "directory name must immediately follow -I" msgstr "" ! #: f/com.c:15706 ! #, no-c-format ! msgid "At %0, INCLUDE file %A exists, but is not readable" msgstr "" ! #: f/com.c:15741 ! #, no-c-format ! msgid "At %0, INCLUDE nesting too deep" msgstr "" ! #: f/expr.c:9613 ! #, no-c-format ! msgid "Two arithmetic operators in a row at %0 and %1 -- use parentheses" msgstr "" ! #: f/expr.c:9663 ! #, no-c-format ! msgid "Operator at %0 has lower precedence than that at %1 -- use parentheses" msgstr "" ! #: f/expr.c:10524 ! #, no-c-format ! msgid "" ! "Use .EQV./.NEQV. instead of .EQ./.NE. at %0 for LOGICAL operands at %1 and %2" msgstr "" ! #: f/expr.c:10895 ! #, no-c-format ! msgid "Unsupported operand for ** at %1 -- converting to default INTEGER" msgstr "" ! #: f/g77spec.c:256 #, c-format ! msgid "overflowed output arg list for `%s'" msgstr "" ! #: f/g77spec.c:395 ! msgid "--driver no longer supported" msgstr "" ! #: f/g77spec.c:408 #, c-format ! msgid "argument to `%s' missing" msgstr "" ! #: f/g77spec.c:412 ! msgid "no input files; unwilling to write output files" msgstr "" ! #: f/implic.c:203 ! #, no-c-format ! msgid "Implicit declaration of `%A' at %0" msgstr "" ! #: f/lex.c:274 ! #, no-c-format ! msgid "The meaning of `\\x' (at %0) varies with -traditional" msgstr "" ! #: f/lex.c:325 ! #, no-c-format ! msgid "The meaning of `\\a' (at %0) varies with -traditional" msgstr "" ! #: f/lex.c:355 ! #, no-c-format ! msgid "Non-ISO-C-standard escape sequence `\\%A' at %0" msgstr "" ! #: f/lex.c:374 ! #, no-c-format ! msgid "Unknown escape sequence `\\%A' at %0" msgstr "" ! #: f/lex.c:383 ! #, no-c-format ! msgid "Unterminated escape sequence `\\' at %0" msgstr "" ! #: f/lex.c:394 ! #, no-c-format ! msgid "Unknown escape sequence `\\' followed by char code 0x%A at %0" msgstr "" ! #: f/lex.c:422 ! #, no-c-format ! msgid "\\x used at %0 with no following hex digits" msgstr "" ! #: f/lex.c:436 ! #, no-c-format ! msgid "Hex escape at %0 out of range" msgstr "" ! #: f/lex.c:470 ! #, no-c-format ! msgid "Escape sequence at %0 out of range for character" msgstr "" ! #: f/lex.c:593 ! msgid "the meaning of `\\x' varies with -traditional" msgstr "" ! #: f/lex.c:630 ! msgid "hex escape out of range" msgstr "" ! #: f/lex.c:676 ! msgid "the meaning of `\\a' varies with -traditional" msgstr "" ! #: f/lex.c:692 #, c-format ! msgid "non-ANSI-standard escape sequence, `\\%c'" msgstr "" ! #: f/lex.c:705 #, c-format ! msgid "non-ISO escape sequence `\\%c'" msgstr "" ! #: f/lex.c:709 #, c-format ! msgid "unknown escape sequence `\\%c'" msgstr "" ! #: f/lex.c:711 #, c-format ! msgid "unknown escape sequence: `\\' followed by char code 0x%x" msgstr "" ! #: f/lex.c:788 ! msgid "badly formed directive -- no closing quote" msgstr "" ! #: f/lex.c:846 ! msgid "#-lines for entering and leaving files don't match" msgstr "" ! #: f/lex.c:1008 ! msgid "bad directive -- missing close-quote" msgstr "" ! #: f/lex.c:1122 #, c-format ! msgid "ignoring pragma: %s" msgstr "" ! #: f/lex.c:1200 ! msgid "invalid #ident" msgstr "" ! #: f/lex.c:1217 ! msgid "undefined or invalid # directive" msgstr "" ! #: f/lex.c:1273 ! msgid "invalid #line" msgstr "" ! #: f/lex.c:1329 f/lex.c:1373 ! msgid "use `#line ...' instead of `# ...' in first line" msgstr "" ! #: f/lex.c:1383 ! msgid "invalid #-line" msgstr "" ! #: f/lex.c:1476 ! #, no-c-format ! msgid "Null character at %0 -- line ignored" msgstr "" ! #: f/stb.c:12078 ! #, no-c-format ! msgid "INCLUDE at %0 not the only statement on the source line" msgstr "" ! #: f/ste.c:1404 f/ste.c:1755 ! msgid "ASSIGNed FORMAT specifier is too small" msgstr "" ! #. ~~~Someday handle CHARACTER*1, CHARACTER*N ! #: f/ste.c:2636 ! #, no-c-format ! msgid "SELECT CASE on CHARACTER type (at %0) not supported -- sorry" msgstr "" ! #: f/ste.c:2965 ! msgid "ASSIGN to variable that is too small" msgstr "" ! #: f/ste.c:2993 ! msgid "ASSIGNed GOTO target variable is too small" msgstr "" ! #: f/stu.c:305 ! #, no-c-format ! msgid "Local adjustable symbol `%A' at %0" msgstr "" ! #: f/target.c:2560 ! msgid "data initializer on host with different endianness" msgstr "" ! #: f/top.c:238 #, c-format ! msgid "%s no longer supported -- try -fvxt" msgstr "" ! #: f/top.c:240 #, c-format ! msgid "%s no longer supported -- try -fno-vxt -ff90" msgstr "" ! #: f/top.c:308 f/top.c:310 ! #, c-format ! msgid "%s disabled, use normal debugging flags" msgstr "" ! #: f/lang-options.h:33 ! msgid "Print g77-specific compiler version info, run internal tests" msgstr "" ! #: f/lang-options.h:37 ! msgid "Program is written in typical FORTRAN 66 dialect" msgstr "" ! #: f/lang-options.h:40 ! msgid "Program is written in typical Unix f77 dialect" msgstr "" ! #: f/lang-options.h:42 ! msgid "Program does not use Unix-f77 dialectal features" msgstr "" ! #: f/lang-options.h:44 ! msgid "Program is written in Fortran-90-ish dialect" ! msgstr "" ! ! #: f/lang-options.h:48 msgid "" ! "Treat local vars and COMMON blocks as if they were named in SAVE statements" msgstr "" ! #: f/lang-options.h:50 ! msgid "Allow $ in symbol names" msgstr "" ! #: f/lang-options.h:54 ! msgid "f2c-compatible code need not be generated" msgstr "" ! #: f/lang-options.h:57 ! msgid "Unsupported; do not generate libf2c-calling code" msgstr "" ! #: f/lang-options.h:59 ! msgid "Unsupported; affects code-generation of arrays" msgstr "" ! #: f/lang-options.h:62 ! msgid "Program is written in Fortran-90-ish free form" msgstr "" ! #: f/lang-options.h:67 ! msgid "Warn about use of (only a few for now) Fortran extensions" msgstr "" ! #: f/lang-options.h:70 ! msgid "Program is written in VXT (Digital-like) FORTRAN" msgstr "" ! #: f/lang-options.h:73 ! msgid "Disallow all ugly features" msgstr "" ! #: f/lang-options.h:76 ! msgid "Hollerith and typeless constants not passed as arguments" msgstr "" ! #: f/lang-options.h:78 ! msgid "Allow ordinary copying of ASSIGN'ed vars" msgstr "" ! #: f/lang-options.h:81 ! msgid "Dummy array dimensioned to (1) is assumed-size" msgstr "" ! #: f/lang-options.h:84 ! msgid "Trailing comma in procedure call denotes null argument" msgstr "" ! #: f/lang-options.h:87 ! msgid "Allow REAL(Z) and AIMAG(Z) given DOUBLE COMPLEX Z" msgstr "" ! #: f/lang-options.h:91 ! msgid "Initialization via DATA and PARAMETER is type-compatible" msgstr "" ! #: f/lang-options.h:93 ! msgid "Allow INTEGER and LOGICAL interchangeability" msgstr "" ! #: f/lang-options.h:96 ! msgid "Print internal debugging-related info" msgstr "" ! #: f/lang-options.h:99 ! msgid "Initialize local vars and arrays to zero" msgstr "" ! #: f/lang-options.h:103 ! msgid "Backslashes in character/hollerith constants not special (C-style)" msgstr "" ! #: f/lang-options.h:105 ! msgid "Have front end emulate COMPLEX arithmetic to avoid bugs" msgstr "" ! #: f/lang-options.h:109 ! msgid "Disable the appending of underscores to externals" msgstr "" ! #: f/lang-options.h:112 ! msgid "Never append a second underscore to externals" msgstr "" ! #: f/lang-options.h:114 ! msgid "Intrinsics spelled as e.g. SqRt" msgstr "" ! #: f/lang-options.h:116 ! msgid "Intrinsics in uppercase" msgstr "" ! #: f/lang-options.h:119 ! msgid "Intrinsics letters in arbitrary cases" msgstr "" ! #: f/lang-options.h:121 ! msgid "Language keywords spelled as e.g. IOStat" msgstr "" ! #: f/lang-options.h:123 ! msgid "Language keywords in uppercase" msgstr "" ! #: f/lang-options.h:126 ! msgid "Language keyword letters in arbitrary cases" msgstr "" ! #: f/lang-options.h:128 ! msgid "Internally convert most source to uppercase" msgstr "" ! #: f/lang-options.h:131 ! msgid "Internally preserve source case" msgstr "" ! #: f/lang-options.h:133 ! msgid "Symbol names spelled in mixed case" msgstr "" ! #: f/lang-options.h:135 ! msgid "Symbol names in uppercase" msgstr "" ! #: f/lang-options.h:137 ! msgid "Symbol names in lowercase" msgstr "" ! #: f/lang-options.h:140 ! msgid "Program written in uppercase" msgstr "" ! #: f/lang-options.h:142 ! msgid "Program written in lowercase" msgstr "" ! #: f/lang-options.h:144 ! msgid "Program written in strict mixed-case" msgstr "" ! #: f/lang-options.h:146 ! msgid "Compile as if program written in uppercase" msgstr "" ! #: f/lang-options.h:148 ! msgid "Compile as if program written in lowercase" msgstr "" ! #: f/lang-options.h:150 ! msgid "Preserve all spelling (case) used in program" msgstr "" ! #: f/lang-options.h:152 ! msgid "Delete libU77 intrinsics with bad interfaces" msgstr "" ! #: f/lang-options.h:154 ! msgid "Disable libU77 intrinsics with bad interfaces" msgstr "" ! #: f/lang-options.h:157 ! msgid "Hide libU77 intrinsics with bad interfaces" msgstr "" ! #: f/lang-options.h:159 ! msgid "Delete non-FORTRAN-77 intrinsics f2c supports" msgstr "" ! #: f/lang-options.h:161 ! msgid "Disable non-FORTRAN-77 intrinsics f2c supports" msgstr "" ! #: f/lang-options.h:164 ! msgid "Hide non-FORTRAN-77 intrinsics f2c supports" msgstr "" ! #: f/lang-options.h:166 ! msgid "Delete non-FORTRAN-77 intrinsics F90 supports" msgstr "" ! #: f/lang-options.h:168 ! msgid "Disable non-FORTRAN-77 intrinsics F90 supports" msgstr "" ! #: f/lang-options.h:171 ! msgid "Hide non-FORTRAN-77 intrinsics F90 supports" msgstr "" ! #: f/lang-options.h:173 ! msgid "Delete non-FORTRAN-77 intrinsics g77 supports" msgstr "" ! #: f/lang-options.h:175 ! msgid "Disable non-FORTRAN 77 intrinsics F90 supports" msgstr "" ! #: f/lang-options.h:178 ! msgid "Hide non-FORTRAN 77 intrinsics F90 supports" msgstr "" ! #: f/lang-options.h:180 ! msgid "Delete MIL-STD 1753 intrinsics" msgstr "" ! #: f/lang-options.h:182 ! msgid "Disable MIL-STD 1753 intrinsics" msgstr "" ! #: f/lang-options.h:185 ! msgid "Hide MIL-STD 1753 intrinsics" msgstr "" ! #: f/lang-options.h:187 ! msgid "Delete libU77 intrinsics" msgstr "" ! #: f/lang-options.h:189 ! msgid "Disable libU77 intrinsics" msgstr "" ! #: f/lang-options.h:192 ! msgid "Hide libU77 intrinsics" msgstr "" ! #: f/lang-options.h:194 ! msgid "Delete non-FORTRAN-77 intrinsics VXT FORTRAN supports" msgstr "" ! #: f/lang-options.h:196 ! msgid "Disable non-FORTRAN-77 intrinsics VXT FORTRAN supports" msgstr "" ! #: f/lang-options.h:199 ! msgid "Hide non-FORTRAN-77 intrinsics VXT FORTRAN supports" msgstr "" ! #: f/lang-options.h:201 ! msgid "Treat initial values of 0 like non-zero values" msgstr "" ! #: f/lang-options.h:204 ! msgid "" ! "Emit special debugging information for COMMON and EQUIVALENCE (disabled)" msgstr "" ! #: f/lang-options.h:207 ! msgid "Take at least one trip through each iterative DO loop" msgstr "" ! #: f/lang-options.h:211 ! msgid "Print names of program units as they are compiled" msgstr "" ! #: f/lang-options.h:214 ! msgid "Disable fatal diagnostics about inter-procedural problems" msgstr "" ! #: f/lang-options.h:216 ! msgid "Make prefix-radix non-decimal constants be typeless" msgstr "" ! #: f/lang-options.h:219 ! msgid "Generate code to check subscript and substring bounds" msgstr "" ! #: f/lang-options.h:222 ! msgid "Fortran-specific form of -fbounds-check" msgstr "" ! #: f/lang-options.h:226 ! msgid "Disable warnings about inter-procedural problems" msgstr "" ! #: f/lang-options.h:230 ! msgid "Warn about constructs with surprising meanings" msgstr "" ! #: f/lang-options.h:235 ! msgid "Add a directory for INCLUDE searching" msgstr "" ! #: f/lang-options.h:237 ! msgid "Set the maximum line length" msgstr "" ! #: f/bad.def:39 ! #, no-c-format ! msgid "Missing first operand for binary operator at %0" msgstr "" ! #: f/bad.def:42 ! #, no-c-format ! msgid "Zero-length character constant at %0" msgstr "" ! #: f/bad.def:45 ! #, no-c-format ! msgid "Invalid token at %0 in expression or subexpression at %1" msgstr "" ! #: f/bad.def:48 ! #, no-c-format ! msgid "Missing operand for operator at %1 at end of expression at %0" msgstr "" ! #: f/bad.def:51 ! #, no-c-format ! msgid "Label %A already defined at %1 when redefined at %0" msgstr "" ! #: f/bad.def:54 ! #, no-c-format ! msgid "Unrecognized character at %0 [info -f g77 M LEX]" msgstr "" ! #: f/bad.def:57 ! #, no-c-format ! msgid "Label definition %A at %0 on empty statement (as of %1)" msgstr "" ! #: f/bad.def:65 ! #, no-c-format ! msgid "Invalid first character at %0 [info -f g77 M LEX]" msgstr "" ! #: f/bad.def:68 ! #, no-c-format ! msgid "Line too long as of %0 [info -f g77 M LEX]" msgstr "" ! #: f/bad.def:71 ! #, no-c-format ! msgid "Non-numeric character at %0 in label field [info -f g77 M LEX]" msgstr "" ! #: f/bad.def:74 ! #, no-c-format ! msgid "Label number at %0 not in range 1-99999" msgstr "" ! #: f/bad.def:77 ! #, no-c-format ! msgid "At %0, '!' and '/*' are not valid comment delimiters" msgstr "" ! #: f/bad.def:80 ! #, no-c-format ! msgid "" ! "Continuation indicator at %0 must appear in column 6 [info -f g77 M LEX]" msgstr "" ! #: f/bad.def:83 ! #, no-c-format ! msgid "" ! "Label at %0 invalid with continuation line indicator at %1 [info -f g77 M " ! "LEX]" msgstr "" ! #: f/bad.def:91 ! #, no-c-format ! msgid "Character constant at %0 has no closing apostrophe at %1" msgstr "" ! #: f/bad.def:94 ! #, no-c-format ! msgid "" ! "Hollerith constant at %0 specified %A more characters than are present as of " ! "%1" msgstr "" ! #: f/bad.def:97 ! #, no-c-format ! msgid "Missing close parenthese at %0 needed to match open parenthese at %1" msgstr "" ! #: f/bad.def:100 ! #, no-c-format ! msgid "Integer at %0 too large" msgstr "" ! #: f/bad.def:123 ! #, no-c-format ! msgid "" ! "Period at %0 not followed by digits for floating-point number or by `NOT.', " ! "`TRUE.', or `FALSE.'" msgstr "" ! #: f/bad.def:126 ! #, no-c-format ! msgid "Missing close-period between `.%A' at %0 and %1" msgstr "" ! #: f/bad.def:129 ! #, no-c-format ! msgid "" ! "Invalid exponent at %0 for real constant at %1; nondigit `%A' in exponent " ! "field" msgstr "" ! #: f/bad.def:132 ! #, no-c-format ! msgid "Missing value at %1 for real-number exponent at %0" msgstr "" ! #: f/bad.def:135 ! #, no-c-format ! msgid "Expected binary operator between expressions at %0 and at %1" msgstr "" ! #: f/bad.def:253 ! #, no-c-format ! msgid "Semicolon at %0 is an invalid token" msgstr "" ! #: f/bad.def:271 ! #, no-c-format ! msgid "Extraneous comma in FORMAT statement at %0" msgstr "" ! #: f/bad.def:274 ! #, no-c-format ! msgid "Missing comma in FORMAT statement at %0" msgstr "" ! #: f/bad.def:277 ! #, no-c-format ! msgid "Spurious sign in FORMAT statement at %0" msgstr "" ! #: f/bad.def:280 ! #, no-c-format ! msgid "Spurious number in FORMAT statement at %0" msgstr "" ! #: f/bad.def:283 ! #, no-c-format ! msgid "Spurious text trailing number in FORMAT statement at %0" msgstr "" ! #: f/bad.def:291 ! #, no-c-format ! msgid "Unrecognized FORMAT specifier at %0" msgstr "" ! #: f/bad.def:419 ! #, no-c-format ! msgid "Missing close-parenthese(s) in FORMAT statement at %0" msgstr "" ! #: f/bad.def:422 ! #, no-c-format ! msgid "Missing number following period in FORMAT statement at %0" msgstr "" ! #: f/bad.def:425 ! #, no-c-format ! msgid "Missing number following `E' in FORMAT statement at %0" msgstr "" ! #: f/bad.def:433 ! #, no-c-format ! msgid "Spurious trailing comma preceding terminator at %0" msgstr "" ! #: f/bad.def:436 ! #, no-c-format ! msgid "" ! "At %0, specify OPERATOR instead of ASSIGNMENT for INTERFACE statement not " ! "specifying the assignment operator (=)" msgstr "" ! #: f/bad.def:439 ! #, no-c-format ! msgid "" ! "At %0, specify ASSIGNMENT instead of OPERATOR for INTERFACE statement " ! "specifying the assignment operator (=)" msgstr "" ! #: f/bad.def:452 ! #, no-c-format ! msgid "" ! "Cannot specify =initialization-expr at %0 unless `::' appears before list of " ! "objects" msgstr "" ! #: f/bad.def:455 ! #, no-c-format ! msgid "Reference to label at %1 inconsistent with its definition at %0" msgstr "" ! #: f/bad.def:458 ! #, no-c-format ! msgid "Reference to label at %1 inconsistent with earlier reference at %0" msgstr "" ! #: f/bad.def:461 ! #, no-c-format ! msgid "DO-statement reference to label at %1 follows its definition at %0" msgstr "" ! #: f/bad.def:464 ! #, no-c-format ! msgid "Reference to label at %1 is outside block containing definition at %0" msgstr "" ! #: f/bad.def:467 ! #, no-c-format ! msgid "" ! "DO-statement references to label at %0 and %2 separated by unterminated " ! "block starting at %1" msgstr "" ! #: f/bad.def:470 ! #, no-c-format ! msgid "" ! "DO-statement reference to label at %0 and label definition at %2 separated " ! "by unterminated block starting at %1" msgstr "" ! #: f/bad.def:473 ! #, no-c-format ! msgid "Label definition at %0 invalid on this kind of statement" msgstr "" ! #: f/bad.def:476 ! #, no-c-format ! msgid "Statement at %0 invalid in this context" msgstr "" ! #: f/bad.def:479 ! #, no-c-format ! msgid "Statement at %0 invalid in context established by statement at %1" msgstr "" ! #: f/bad.def:482 ! #, no-c-format ! msgid "Statement at %0 must specify construct name specified at %1" msgstr "" ! #: f/bad.def:485 ! #, no-c-format ! msgid "Construct name at %0 superfluous, no construct name specified at %1" msgstr "" ! #: f/bad.def:488 ! #, no-c-format ! msgid "Construct name at %0 not the same as construct name at %1" msgstr "" ! #: f/bad.def:491 ! #, no-c-format ! msgid "" ! "Construct name at %0 does not match construct name for any containing DO " ! "constructs" msgstr "" ! #: f/bad.def:494 ! #, no-c-format ! msgid "Label definition missing at %0 for DO construct specifying label at %1" msgstr "" ! #: f/bad.def:497 ! #, no-c-format ! msgid "Statement at %0 follows ELSE block for IF construct at %1" msgstr "" ! #: f/bad.def:500 ! #, no-c-format ! msgid "No label definition for FORMAT statement at %0" msgstr "" ! #: f/bad.def:503 ! #, no-c-format ! msgid "Second occurrence of ELSE WHERE at %0 within WHERE at %1" msgstr "" ! #: f/bad.def:506 ! #, no-c-format ! msgid "" ! "END statement at %0 missing `%A' keyword required for internal or module " ! "procedure(s) bounded by %1" msgstr "" ! #: f/bad.def:509 ! #, no-c-format ! msgid "" ! "MODULE PROCEDURE statement at %0 disallowed because INTERFACE at %1 " ! "specifies no generic name, operator, or assignment" msgstr "" ! #: f/bad.def:512 ! #, no-c-format ! msgid "BLOCK DATA name at %0 superfluous, no name specified at %1" msgstr "" ! #: f/bad.def:515 ! #, no-c-format ! msgid "Program name at %0 superfluous, no PROGRAM statement specified at %1" msgstr "" ! #: f/bad.def:518 ! #, no-c-format ! msgid "Program unit name at %0 not the same as name at %1" msgstr "" ! #: f/bad.def:521 ! #, no-c-format ! msgid "Type name at %0 not the same as name at %1" msgstr "" ! #: f/bad.def:524 ! #, no-c-format ! msgid "End of source file before end of block started at %0" msgstr "" ! #: f/bad.def:527 ! #, no-c-format ! msgid "Undefined label, first referenced at %0" msgstr "" ! #: f/bad.def:530 ! #, no-c-format ! msgid "" ! "SAVE statement or attribute at %1 cannot be specified along with SAVE " ! "statement or attribute at %0" msgstr "" ! #: f/bad.def:533 ! #, no-c-format ! msgid "" ! "PUBLIC or PRIVATE statement at %1 cannot be specified along with PUBLIC or " ! "PRIVATE statement at %0" msgstr "" ! #: f/bad.def:536 ! #, no-c-format ! msgid "RETURN statement at %0 invalid within a main program unit" msgstr "" ! #: f/bad.def:539 ! #, no-c-format ! msgid "Alternate return specifier at %0 invalid within a main program unit" msgstr "" ! #: f/bad.def:542 ! #, no-c-format ! msgid "Alternate return specifier at %0 invalid within a function" msgstr "" ! #: f/bad.def:545 ! #, no-c-format ! msgid "" ! "Access specifier or PRIVATE statement at %0 invalid for derived-type " ! "definition within other than the specification part of a module" msgstr "" ! #: f/bad.def:548 ! #, no-c-format ! msgid "" ! "Access specifier at %0 must immediately follow derived-type statement at %1 " ! "with no intervening statements" msgstr "" ! #: f/bad.def:551 ! #, no-c-format ! msgid "" ! "No components specified as of %0 for derived-type definition beginning at %1" msgstr "" ! #: f/bad.def:554 ! #, no-c-format ! msgid "" ! "No components specified as of %0 for structure definition beginning at %1" msgstr "" ! #: f/bad.def:557 ! #, no-c-format ! msgid "Missing structure name for outer structure definition at %0" msgstr "" ! #: f/bad.def:560 ! #, no-c-format ! msgid "" ! "Field names at %0 for outer structure definition -- specify them in a " ! "subsequent RECORD statement instead" msgstr "" ! #: f/bad.def:563 ! #, no-c-format ! msgid "" ! "Missing field name(s) for structure definition at %0 within structure " ! "definition at %1" msgstr "" ! #: f/bad.def:566 ! #, no-c-format ! msgid "No components specified as of %0 for map beginning at %1" msgstr "" ! #: f/bad.def:569 ! #, no-c-format ! msgid "" ! "Zero or one maps specified as of %0 for union beginning at %1 -- at least " ! "two are required" msgstr "" ! #: f/bad.def:572 ! #, no-c-format ! msgid "Missing %A specifier in statement at %0" msgstr "" ! #: f/bad.def:575 ! #, no-c-format ! msgid "Items in I/O list starting at %0 invalid for namelist-directed I/O" msgstr "" ! #: f/bad.def:578 ! #, no-c-format ! msgid "Conflicting I/O control specifications at %0 and %1" msgstr "" ! #: f/bad.def:581 ! #, no-c-format ! msgid "No UNIT= specifier in I/O control list at %0" msgstr "" ! #: f/bad.def:584 ! #, no-c-format ! msgid "" ! "Specification at %0 requires ADVANCE=`NO' specification in same I/O control " ! "list" msgstr "" ! #: f/bad.def:587 ! #, no-c-format ! msgid "" ! "Specification at %0 requires explicit FMT= specification in same I/O control " ! "list" msgstr "" ! #: f/bad.def:595 ! #, no-c-format ! msgid "Second occurrence of CASE DEFAULT at %0 within SELECT CASE at %1" msgstr "" ! #: f/bad.def:598 ! #, no-c-format ! msgid "Duplicate or overlapping case values/ranges at %0 and %1" msgstr "" ! #: f/bad.def:601 ! #, no-c-format ! msgid "" ! "Type and/or kind-type parameter disagreement between CASE value or value " ! "within range at %0 and SELECT CASE at %1" msgstr "" ! #: f/bad.def:604 ! #, no-c-format ! msgid "" ! "Range specification at %0 invalid for CASE statement within logical-type " ! "SELECT CASE statement" msgstr "" ! #: f/bad.def:617 ! #, no-c-format ! msgid "Fortran 90 feature at %0 unsupported" msgstr "" ! #: f/bad.def:630 ! #, no-c-format ! msgid "" ! "Invalid declaration of or reference to symbol `%A' at %0 [initially seen at %" ! "1]" msgstr "" ! #: f/bad.def:638 ! #, no-c-format ! msgid "Null element at %0 for array reference at %1" msgstr "" ! #: f/bad.def:641 ! #, no-c-format ! msgid "Too few elements (%A missing) as of %0 for array reference at %1" msgstr "" ! #: f/bad.def:644 ! #, no-c-format ! msgid "Too many elements as of %0 for array reference at %1" msgstr "" ! #: f/bad.def:647 ! #, no-c-format ! msgid "Missing colon as of %0 in substring reference for %1" msgstr "" ! #: f/bad.def:650 ! #, no-c-format ! msgid "Invalid use at %0 of substring operator on %1" msgstr "" ! #: f/bad.def:653 ! #, no-c-format ! msgid "Substring begin/end point at %0 out of defined range" msgstr "" ! #: f/bad.def:656 ! #, no-c-format ! msgid "Array element value at %0 out of defined range" msgstr "" ! #: f/bad.def:659 ! #, no-c-format ! msgid "Expression at %0 has incorrect data type or rank for its context" msgstr "" ! #: f/bad.def:662 ! #, no-c-format ! msgid "Division by 0 (zero) at %0 (IEEE not yet supported)" msgstr "" ! #: f/bad.def:665 ! #, no-c-format ! msgid "%A step count known to be 0 (zero) at %0" msgstr "" ! #: f/bad.def:668 ! #, no-c-format ! msgid "%A end value plus step count known to overflow at %0" msgstr "" ! #: f/bad.def:671 ! #, no-c-format ! msgid "" ! "%A begin, end, and step-count values known to result in implementation-" ! "dependent behavior due to overflow(s) in intermediate calculations at %0" msgstr "" ! #: f/bad.def:674 ! #, no-c-format ! msgid "" ! "%A begin, end, and step-count values known to result in no iterations at %0" msgstr "" ! #: f/bad.def:677 ! #, no-c-format ! msgid "Type disagreement between expressions at %0 and %1" msgstr "" ! #: f/bad.def:690 ! #, no-c-format ! msgid "No specification for implied-DO iterator `%A' at %0" msgstr "" ! #: f/bad.def:693 ! #, no-c-format ! msgid "Gratuitous parentheses surround implied-DO construct at %0" msgstr "" ! #: f/bad.def:696 ! #, no-c-format ! msgid "Zero-size specification invalid at %0" msgstr "" ! #: f/bad.def:699 ! #, no-c-format ! msgid "Zero-size array at %0" msgstr "" ! #: f/bad.def:702 ! #, no-c-format ! msgid "Target machine does not support complex entity of kind specified at %0" msgstr "" ! #: f/bad.def:705 ! #, no-c-format ! msgid "Target machine does not support DOUBLE COMPLEX, specified at %0" msgstr "" ! #: f/bad.def:708 ! #, no-c-format ! msgid "Attempt to raise constant zero to a power at %0" msgstr "" ! #: f/bad.def:806 ! #, no-c-format ! msgid "Reference to generic intrinsic `%A' at %0 could be to form %B or %C" msgstr "" ! #: f/bad.def:809 ! #, no-c-format ! msgid "Ambiguous use of intrinsic `%A' at %0 [info -f g77 M CMPAMBIG]" msgstr "" ! #: f/bad.def:812 ! #, no-c-format ! msgid "Intrinsic `%A' referenced %Bly at %0, %Cly at %1 [info -f g77 M EXPIMP]" msgstr "" ! #: f/bad.def:815 ! #, no-c-format ! msgid "Same name `%A' used for %B at %0 and %C at %1 [info -f g77 M INTGLOB]" msgstr "" ! #: f/bad.def:818 ! #, no-c-format ! msgid "" ! "Explicit type declaration for intrinsic `%A' disagrees with invocation at %0" msgstr "" ! #: f/bad.def:821 ! #, no-c-format ! msgid "Unable to open INCLUDE file `%A' at %0" msgstr "" ! #: f/bad.def:839 ! #, no-c-format ! msgid "Null argument at %0 for statement function reference at %1" msgstr "" ! #: f/bad.def:842 ! #, no-c-format ! msgid "Null argument at %0 for procedure invocation at %1" msgstr "" ! #: f/bad.def:845 ! #, no-c-format ! msgid "" ! "%A too few arguments (starting with dummy argument `%B') as of %0 for " ! "statement function reference at %1" msgstr "" ! #: f/bad.def:848 ! #, no-c-format ! msgid "%A too many arguments as of %0 for statement function reference at %1" msgstr "" ! #: f/bad.def:851 ! #, no-c-format ! msgid "" ! "Array supplied at %1 for dummy argument `%A' in statement function reference " ! "at %0" msgstr "" ! #: f/bad.def:854 ! #, no-c-format ! msgid "Unsupported FORMAT specifier at %0" msgstr "" ! #: f/bad.def:857 ! #, no-c-format ! msgid "Variable-expression FORMAT specifier at %0 -- unsupported" msgstr "" ! #: f/bad.def:880 ! #, no-c-format ! msgid "Unsupported VXT statement at %0" msgstr "" ! #: f/bad.def:883 ! #, no-c-format ! msgid "Attempt to specify second initial value for `%A' at %0" msgstr "" ! #: f/bad.def:886 ! #, no-c-format ! msgid "Too few initial values in list of initializers for `%A' at %0" msgstr "" ! #: f/bad.def:889 ! #, no-c-format ! msgid "Too many initial values in list of initializers starting at %0" msgstr "" ! #: f/bad.def:892 ! #, no-c-format ! msgid "" ! "Array or substring specification for `%A' out of range in statement at %0" msgstr "" ! #: f/bad.def:895 ! #, no-c-format ! msgid "" ! "Array subscript #%B out of range for initialization of `%A' in statement at %" ! "0" msgstr "" ! #: f/bad.def:898 ! #, no-c-format ! msgid "" ! "Implied do-loop step count of 0 (zero) for iteration variable `%A' in " ! "statement at %0" msgstr "" ! #: f/bad.def:901 ! #, no-c-format ! msgid "" ! "Implied do-loop iteration count of 0 (zero) for iteration variable `%A' in " ! "statement at %0" msgstr "" ! #: f/bad.def:904 ! #, no-c-format ! msgid "" ! "Not an integer constant expression in implied do-loop in statement at %0" msgstr "" ! #: f/bad.def:907 ! #, no-c-format ! msgid "Attempt to specify second initial value for element of `%A' at %0" msgstr "" ! #: f/bad.def:910 ! #, no-c-format ! msgid "Attempt to EQUIVALENCE common areas `%A' and `%B' at %0" msgstr "" ! #: f/bad.def:913 ! #, no-c-format ! msgid "" ! "Can't place `%A' as directed by EQUIVALENCE due to alignment restrictions" msgstr "" ! #: f/bad.def:916 ! #, no-c-format ! msgid "" ! "Mismatched EQUIVALENCE requirements for placement of `%A' at both %C and %D " ! "bytes offset from `%B'" msgstr "" ! #: f/bad.def:919 ! #, no-c-format ! msgid "" ! "Array or substring specification for `%A' out of range in EQUIVALENCE " ! "statement" msgstr "" ! #: f/bad.def:922 ! #, no-c-format ! msgid "Substring of non-CHARACTER entity `%A' in EQUIVALENCE statement" msgstr "" ! #: f/bad.def:925 ! #, no-c-format ! msgid "Array reference to scalar variable `%A' in EQUIVALENCE statement" msgstr "" ! #: f/bad.def:928 ! #, no-c-format ! msgid "Array subscript #%B out of range for EQUIVALENCE of `%A'" msgstr "" ! #: f/bad.def:936 ! #, no-c-format ! msgid "" ! "Attempt to extend COMMON area beyond its starting point via EQUIVALENCE of `%" ! "A'" msgstr "" ! #: f/bad.def:939 ! #, no-c-format ! msgid "Too few elements in reference to array `%A' in EQUIVALENCE statement" msgstr "" ! #: f/bad.def:942 ! #, no-c-format ! msgid "Too many elements in reference to array `%A' in EQUIVALENCE statement" msgstr "" ! #: f/bad.def:945 ! #, no-c-format ! msgid "" ! "Mixed CHARACTER and non-CHARACTER types via COMMON/EQUIVALENCE -- for " ! "example, `%A' and `%B'" msgstr "" ! #: f/bad.def:958 ! #, no-c-format ! msgid "Return value `%A' for FUNCTION at %0 not referenced in subprogram" msgstr "" ! #: f/bad.def:976 ! #, no-c-format ! msgid "" ! "Common block `%A' is SAVEd, explicitly or implicitly, at %0 but not SAVEd at " ! "%1" msgstr "" ! #: f/bad.def:979 ! #, no-c-format ! msgid "Common block `%A' is %B %D in length at %0 but %C %E at %1" msgstr "" ! #: f/bad.def:987 ! #, no-c-format ! msgid "Blank common initialized at %0" msgstr "" ! #: f/bad.def:990 ! #, no-c-format ! msgid "" ! "Intrinsic `%A' is passed as actual argument at %0 but not explicitly " ! "declared INTRINSIC" msgstr "" ! #: f/bad.def:993 ! #, no-c-format ! msgid "" ! "External procedure `%A' is passed as actual argument at %0 but not " ! "explicitly declared EXTERNAL" msgstr "" ! #: f/bad.def:996 ! #, no-c-format ! msgid "Character `%A' (for example) is upper-case in symbol name at %0" msgstr "" ! #: f/bad.def:999 ! #, no-c-format ! msgid "Character `%A' (for example) is lower-case in symbol name at %0" msgstr "" ! #: f/bad.def:1002 ! #, no-c-format msgid "" ! "Character `%A' not followed at some point by lower-case character in symbol " ! "name at %0" msgstr "" ! #: f/bad.def:1005 ! #, no-c-format ! msgid "Initial character `%A' is lower-case in symbol name at %0" ! msgstr "" ! ! #: f/bad.def:1013 ! #, no-c-format msgid "" ! "NAMELIST not adequately supported by run-time library for source files with " ! "case preserved" msgstr "" ! #: f/bad.def:1016 ! #, no-c-format ! msgid "Nested %% construct (%%VAL, %%REF, or %%DESCR) at %0" ! msgstr "" ! ! #: f/bad.def:1034 ! #, no-c-format ! msgid "Statement at %0 invalid in BLOCK DATA program unit at %1" ! msgstr "" ! ! #: f/bad.def:1037 ! #, no-c-format ! msgid "Truncating characters on right side of character constant at %0" ! msgstr "" ! ! #: f/bad.def:1040 ! #, no-c-format ! msgid "Truncating characters on right side of hollerith constant at %0" ! msgstr "" ! ! #: f/bad.def:1043 ! #, no-c-format ! msgid "Truncating non-zero data on left side of numeric constant at %0" ! msgstr "" ! ! #: f/bad.def:1046 ! #, no-c-format ! msgid "Truncating non-zero data on left side of typeless constant at %0" ! msgstr "" ! ! #: f/bad.def:1049 ! #, no-c-format ! msgid "Typeless constant at %0 too large" ! msgstr "" ! ! #: f/bad.def:1052 ! #, no-c-format ! msgid "First-column ampersand continuation at %0" ! msgstr "" ! ! #: f/bad.def:1055 f/bad.def:1058 ! #, no-c-format msgid "" ! "Global name `%A' defined at %0 already defined at %1 [info -f g77 M GLOBALS]" msgstr "" ! #: f/bad.def:1061 f/bad.def:1064 ! #, no-c-format ! msgid "Global name `%A' is %B at %0 but is %C at %1 [info -f g77 M GLOBALS]" ! msgstr "" ! ! #: f/bad.def:1067 f/bad.def:1070 ! #, no-c-format ! msgid "Global name `%A' at %0 has different type at %1 [info -f g77 M GLOBALS]" ! msgstr "" ! ! #: f/bad.def:1073 ! #, no-c-format msgid "" ! "Too %B arguments passed to `%A' at %0 versus definition at %1 [info -f g77 M " ! "GLOBALS]" msgstr "" ! #: f/bad.def:1076 ! #, no-c-format msgid "" ! "Too %B arguments for `%A' at %0 versus invocation at %1 [info -f g77 M " ! "GLOBALS]" msgstr "" ! #: f/bad.def:1079 f/bad.def:1082 ! #, no-c-format msgid "" ! "Argument #%B of `%A' is %C at %0 but is %D at %1 [info -f g77 M GLOBALS]" msgstr "" ! #: f/bad.def:1085 ! #, no-c-format ! msgid "Array `%A' at %0 is too large to handle" msgstr "" ! #: f/bad.def:1088 ! #, no-c-format ! msgid "Statement function `%A' defined at %0 is not used" msgstr "" ! #: f/bad.def:1091 ! #, no-c-format msgid "" ! "Intrinsic `%A', invoked at %0, known to be non-Y2K-compliant [info -f g77 M " ! "Y2KBAD]" msgstr "" ! #: f/bad.def:1094 ! #, no-c-format ! msgid "Internal compiler error -- cannot perform operation" msgstr "" ! #. Kind messages are used in diagnostic location reports of the ! #. form ": In function `foo': ". ! #: f/info-k.def:32 ! msgid "In unknown kind" msgstr "" ! #: f/info-k.def:33 ! msgid "In entity" msgstr "" ! #: f/info-k.def:34 ! msgid "In function" msgstr "" ! #: f/info-k.def:35 ! msgid "In subroutine" msgstr "" ! #: f/info-k.def:36 ! msgid "In program" msgstr "" ! #: f/info-k.def:37 ! msgid "In block-data unit" msgstr "" ! #: f/info-k.def:38 ! msgid "In common block" msgstr "" ! #: f/info-k.def:39 ! msgid "In construct" msgstr "" ! #: f/info-k.def:40 ! msgid "In namelist" msgstr "" ! #: f/info-k.def:41 ! msgid "In anything" msgstr "" ! #: java/check-init.c:915 ! #, c-format ! msgid "internal error in check-init: tree code not implemented: %s" msgstr "" ! #: java/check-init.c:988 ! #, c-format ! msgid "final field '%s' may not have been initialized" msgstr "" ! #: java/class.c:568 java/class.c:593 ! msgid "internal error - too many interface type" msgstr "" ! #: java/class.c:744 ! msgid "bad method signature" msgstr "" ! #: java/class.c:793 ! msgid "misplaced ConstantValue attribute (not in any field)" msgstr "" ! #: java/class.c:795 ! #, c-format ! msgid "duplicate ConstantValue attribute for field '%s'" msgstr "" ! #: java/class.c:806 ! #, c-format ! msgid "ConstantValue attribute of field '%s' has wrong type" msgstr "" ! #: java/class.c:1170 ! #, c-format ! msgid "field '%s' not found in class" msgstr "" ! #: java/class.c:1432 ! msgid "abstract method in non-abstract class" ! msgstr "" ! ! #: java/class.c:2133 #, c-format ! msgid "non-static method '%s' overrides static method" msgstr "" ! #: java/decl.c:1515 #, c-format ! msgid "In %s: overlapped variable and exception ranges at %d" msgstr "" ! #: java/decl.c:1603 ! msgid "bad type in parameter debug info" ! msgstr "" ! ! #: java/decl.c:1613 #, c-format ! msgid "bad PC range for debug info for local `%s'" msgstr "" ! #: java/expr.c:549 ! msgid "stack underflow - dup* operation" ! msgstr "" ! ! #: java/expr.c:1541 ! #, c-format msgid "" ! "reference `%s' is ambiguous: appears in interface `%s' and interface `%s'" msgstr "" ! #: java/expr.c:1570 #, c-format ! msgid "field `%s' not found" msgstr "" ! #: java/expr.c:1725 ! msgid "ret instruction not implemented" msgstr "" ! #: java/expr.c:1862 ! #, c-format ! msgid "method '%s' not found in class" msgstr "" ! #: java/expr.c:2066 #, c-format ! msgid "failed to find class '%s'" msgstr "" ! #: java/expr.c:2078 #, c-format ! msgid "class '%s' has no method named '%s' matching signature '%s'" msgstr "" ! #: java/expr.c:2088 ! msgid "invokestatic on non static method" ! msgstr "" ! ! #: java/expr.c:2093 ! msgid "invokestatic on abstract method" ! msgstr "" ! ! #: java/expr.c:2101 ! msgid "invoke[non-static] on static method" ! msgstr "" ! ! #: java/expr.c:2386 #, c-format ! msgid "missing field '%s' in '%s'" msgstr "" ! #: java/expr.c:2392 #, c-format ! msgid "mismatching signature for field '%s' in '%s'" msgstr "" ! #: java/expr.c:2415 ! #, c-format ! msgid "assignment to final field `%s' not in field's class" msgstr "" ! #: java/expr.c:2420 #, c-format ! msgid "assignment to final static field `%s' not in class initializer" msgstr "" ! #: java/expr.c:2427 #, c-format ! msgid "assignment to final field `%s' not in constructor" msgstr "" ! #: java/expr.c:2665 #, c-format ! msgid "can't expand %s" msgstr "" ! #: java/expr.c:2841 ! msgid "invalid PC in line number table" msgstr "" ! #. We've just reached the end of a region of dead code. ! #: java/expr.c:2886 #, c-format ! msgid "unreachable bytecode from %d to before %d" msgstr "" ! #. We've just reached the end of a region of dead code. ! #: java/expr.c:2923 #, c-format ! msgid "unreachable bytecode from %d to the end of the method" msgstr "" ! #. duplicate code from LOAD macro ! #: java/expr.c:3237 ! msgid "unrecogized wide sub-instruction" msgstr "" ! #: java/jcf-io.c:410 ! #, c-format ! msgid "" ! "source file for class `%s' is newer than its matching class file. Source " ! "file `%s' used instead" msgstr "" ! #: java/jcf-parse.c:376 ! msgid "bad string constant" ! msgstr "" ! ! #: java/jcf-parse.c:394 #, c-format ! msgid "bad value constant type %d, index %d" msgstr "" ! #: java/jcf-parse.c:566 #, c-format ! msgid "can't reopen %s" msgstr "" ! #: java/jcf-parse.c:571 ! #, c-format ! msgid "can't close %s" msgstr "" ! #: java/jcf-parse.c:653 ! #, c-format ! msgid "cannot find file for class %s" msgstr "" ! #: java/jcf-parse.c:665 ! msgid "not a valid Java .class file" msgstr "" ! #: java/jcf-parse.c:668 ! msgid "error while parsing constant pool" msgstr "" ! #: java/jcf-parse.c:671 ! #, c-format ! msgid "error in constant pool entry #%d\n" msgstr "" ! #. FIXME - where was first time ! #: java/jcf-parse.c:683 #, c-format ! msgid "reading class %s for the second time from %s" msgstr "" ! #: java/jcf-parse.c:701 ! msgid "error while parsing fields" ! msgstr "" ! ! #: java/jcf-parse.c:704 ! msgid "error while parsing methods" ! msgstr "" ! ! #: java/jcf-parse.c:707 ! msgid "error while parsing final attributes" ! msgstr "" ! ! #: java/jcf-parse.c:721 #, c-format ! msgid "" ! "the `java.lang.Object' that was found in `%s' didn't have the special zero-" ! "length `gnu.gcj.gcj-compiled' attribute. This generally means that your " ! "classpath is incorrectly set. Use `info gcj \"Input Options\"' to see the " ! "info page describing how to set the classpath" msgstr "" ! #: java/jcf-parse.c:811 ! msgid "missing Code attribute" ! msgstr "" ! ! #: java/jcf-parse.c:1050 ! msgid "source file seen twice on command line and will be compiled only once" ! msgstr "" ! ! #: java/jcf-parse.c:1066 ! msgid "no input file specified" ! msgstr "" ! ! #: java/jcf-parse.c:1095 ! #, c-format ! msgid "can't close input file %s" ! msgstr "" ! ! #: java/jcf-parse.c:1132 ! #, c-format ! msgid "bad zip/jar file %s" ! msgstr "" ! ! #: java/jcf-write.c:2630 #, c-format msgid "" ! "internal error in generate_bytecode_insn - tree code not implemented: %s" msgstr "" ! #: java/jcf-write.c:2937 ! msgid "field initializer type mismatch" msgstr "" ! #: java/jcf-write.c:3346 ! #, c-format ! msgid "can't create directory %s" msgstr "" ! #: java/jv-scan.c:183 ! msgid "only one of `--print-main', `--list-class', and `--complexity' allowed" msgstr "" ! #: java/jv-scan.c:186 ! #, c-format ! msgid "can't open output file `%s'" msgstr "" ! #: java/jv-scan.c:220 ! #, c-format ! msgid "file not found `%s'" msgstr "" ! #: java/jvspec.c:427 ! msgid "can't specify `-D' without `--main'\n" msgstr "" ! #: java/jvspec.c:430 ! #, c-format ! msgid "`%s' is not a valid class name" msgstr "" ! #: java/jvspec.c:436 ! msgid "-R requires -o" msgstr "" ! #: java/jvspec.c:443 ! msgid "warning: already-compiled .class files ignored with -C" msgstr "" ! #: java/jvspec.c:450 ! msgid "cannot specify both -C and -o" msgstr "" ! #: java/jvspec.c:462 ! msgid "cannot create temporary file" msgstr "" ! #: java/jvspec.c:490 ! msgid "using both @FILE with multiple files not implemented" msgstr "" ! #: java/jvspec.c:548 ! msgid "cannot specify `main' class when not linking" msgstr "" ! #: java/lang.c:453 ! msgid "can't do dependency tracking with input from stdin" ! msgstr "" ! ! #: java/lang.c:469 ! msgid "couldn't determine target name for dependency tracking" ! msgstr "" ! ! #: java/lex.c:308 #, c-format ! msgid "" ! "unknown encoding: `%s'\n" ! "This might mean that your locale's encoding is not supported\n" ! "by your system's iconv(3) implementation. If you aren't trying\n" ! "to use a particular encoding for your input file, try the\n" ! "`--encoding=UTF-8' option" msgstr "" ! #: java/mangle.c:85 ! #, c-format ! msgid "can't mangle %s" msgstr "" ! #: java/mangle_name.c:145 java/mangle_name.c:217 ! msgid "internal error - invalid Utf8 name" msgstr "" ! #: /usr/share/bison.simple:650 ! msgid "parse error; also virtual memory exceeded" msgstr "" ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:747 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:785 ! msgid "Missing name" msgstr "" ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:749 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:787 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:812 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:996 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1343 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1554 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1556 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1785 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1811 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1822 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1833 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1845 ! msgid "';' expected" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:810 ! msgid "'*' expected" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:824 ! msgid "Class or interface declaration expected" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:859 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:861 ! msgid "Missing class name" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:864 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:868 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:876 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1041 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1289 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1291 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1620 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1856 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1888 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1940 ! msgid "'{' expected" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:878 ! msgid "Missing super class name" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:888 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:904 ! msgid "Missing interface name" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:975 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1308 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1369 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1578 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1800 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1809 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1820 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1831 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1843 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1860 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1862 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1933 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2104 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2166 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2318 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2330 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2337 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2344 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2355 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2357 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2395 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2397 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2399 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2420 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2422 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2424 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2440 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2442 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2463 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2465 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2467 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2495 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2497 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2499 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2501 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2519 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2521 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2532 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2543 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2554 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2565 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2576 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2589 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2593 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2595 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2608 ! msgid "Missing term" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:990 ! msgid "Missing variable initializer" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1007 ! msgid "Invalid declaration" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1013 ! msgid "Can't specify array dimension in a declaration" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1015 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1091 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2141 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2163 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2167 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2202 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2279 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2289 ! msgid "']' expected" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1019 ! msgid "Unbalanced ']'" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1055 ! msgid "Invalid method declaration, method name required" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1061 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1063 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2024 ! msgid "Identifier expected" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1066 ! msgid "Invalid method declaration, return type required" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1089 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1534 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1541 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1550 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1552 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1580 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1688 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1969 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2022 ! msgid "')' expected" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1105 ! msgid "Missing formal parameter term" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1120 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1125 ! msgid "Missing identifier" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1145 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1154 ! msgid "Missing class type term" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1306 ! msgid "Invalid interface type" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1498 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1667 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1669 ! msgid "':' expected" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1520 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1525 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1530 ! msgid "Invalid expression statement" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1548 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1576 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1616 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1684 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1752 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1858 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1926 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2016 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2018 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2026 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2262 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2264 ! msgid "'(' expected" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1618 ! msgid "Missing term or ')'" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1665 ! msgid "Missing or invalid constant expression" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1686 ! msgid "Missing term and ')' expected" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1725 ! msgid "Invalid control expression" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1727 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1729 ! msgid "Invalid update expression" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1754 ! msgid "Invalid init statement" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1929 ! msgid "Missing term or ')' expected" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1971 ! msgid "'class' or 'this' expected" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1973 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1975 ! msgid "'class' expected" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2020 ! msgid "')' or term expected" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2139 ! msgid "'[' expected" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2217 ! msgid "Field expected" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2274 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2284 ! msgid "Missing term and ']' expected" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2388 ! msgid "']' expected, invalid type expression" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2391 ! msgid "Invalid type expression" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2503 ! msgid "Invalid reference type" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2981 ! msgid "Constructor invocation must be first thing in a constructor" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2983 ! msgid "Only constructors can invoke constructors" ! msgstr "" ! ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2992 #, c-format ! msgid ": `%s' JDK1.1(TM) feature" msgstr "" ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:3052 ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:3054 #, c-format ! msgid "" ! "%s.\n" ! "%s" msgstr "" ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:6833 #, c-format ! msgid "malformed .zip archive in CLASSPATH: %s" msgstr "" ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:6904 ! #, c-format ! msgid "" ! "Can't find default package `%s'. Check the CLASSPATH environment variable " ! "and the access to the archives" msgstr "" ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:12228 ! #, c-format ! msgid "missing static field `%s'" msgstr "" ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:12233 ! #, c-format ! msgid "not a static field `%s'" msgstr "" ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:12276 ! #, c-format ! msgid "No case for %s" msgstr "" ! #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:13122 #, c-format ! msgid "unregistered operator %s" msgstr "" ! #: java/typeck.c:178 ! msgid "internal error - use of undefined type" msgstr "" ! #: java/typeck.c:566 ! msgid "junk at end of signature string" msgstr "" ! #: java/verify.c:480 ! msgid "bad pc in exception_table" msgstr "" ! #: java/verify.c:1392 ! #, c-format ! msgid "unknown opcode %d@pc=%d during verification" msgstr "" ! #: java/verify.c:1462 java/verify.c:1475 java/verify.c:1479 #, c-format ! msgid "verification error at PC=%d" msgstr "" ! #: java/lang-options.h:32 ! msgid "Disable automatic array bounds checking" msgstr "" ! #: java/lang-options.h:34 ! msgid "Disable assignability checks for stores into object arrays" msgstr "" ! #: java/lang-options.h:36 ! msgid "Assume native functions are implemented using JNI" msgstr "" ! #: java/lang-options.h:38 ! msgid "Replace system path" msgstr "" ! #: java/lang-options.h:40 ! msgid "Set class path" msgstr "" ! #: java/lang-options.h:42 ! msgid "Set class path (deprecated: use --classpath instead)" msgstr "" ! #: java/lang-options.h:44 ! msgid "Choose class whose main method should be used" msgstr "" ! #: java/lang-options.h:46 ! msgid "Choose input encoding (default comes from locale)" msgstr "" ! #: java/lang-options.h:48 ! msgid "Add directory to class path" msgstr "" ! #: java/lang-options.h:50 ! msgid "Directory where class files should be written" msgstr "" ! #: java/lang-options.h:52 ! msgid "Warn if modifiers are specified when not necessary" msgstr "" ! #: java/lang-options.h:54 ! msgid "Warn if deprecated empty statements are found" msgstr "" ! #: java/lang-options.h:56 ! msgid "Warn if .class files are out of date" msgstr "" ! #: java/lang-options.h:58 ! msgid "Always check for non gcj generated classes archives" msgstr "" ! #: java/lang-options.h:60 ! msgid "Never optimize static class initialization code" msgstr "" ! #: java/lang-options.h:62 ! msgid "Use offset tables for virtual method calls" ! msgstr "" ! ! #: objc/objc-act.c:606 ! msgid "no class name specified as argument to -fconstant-string-class" ! msgstr "" ! ! #: objc/objc-act.c:757 #, c-format ! msgid "object does not conform to the `%s' protocol" msgstr "" ! #: objc/objc-act.c:801 ! #, c-format ! msgid "class `%s' does not implement the `%s' protocol" msgstr "" ! #: objc/objc-act.c:882 ! #, c-format ! msgid "`%s' cannot be statically allocated" msgstr "" ! #: objc/objc-act.c:939 ! #, c-format ! msgid "unexpected type for `id' (%s)" msgstr "" ! #: objc/objc-act.c:944 ! msgid "undefined type `id', please import " msgstr "" ! #: objc/objc-act.c:996 #, c-format ! msgid "protocol `%s' has circular dependency" msgstr "" ! #: objc/objc-act.c:1018 objc/objc-act.c:5229 #, c-format ! msgid "cannot find protocol declaration for `%s'" msgstr "" ! #: objc/objc-act.c:1279 objc/objc-act.c:5747 objc/objc-act.c:6077 ! #: objc/objc-act.c:6126 objc/objc-act.c:6162 objc-parse.y:1752 #, c-format ! msgid "cannot find interface declaration for `%s'" msgstr "" ! #: objc/objc-act.c:1304 #, c-format ! msgid "cannot find reference tag for class `%s'" msgstr "" ! #: objc/objc-act.c:2314 #, c-format ! msgid "cannot find class `%s'" msgstr "" ! #: objc/objc-act.c:2316 #, c-format ! msgid "class `%s' already exists" msgstr "" ! #. fatal did not work with 2 args...should fix ! #: objc/objc-act.c:2440 ! #, c-format ! msgid "cannot find interface declaration for `%s', superclass of `%s'" msgstr "" ! #: objc/objc-act.c:2447 ! #, c-format ! msgid "circular inheritance in interface declaration for `%s'" msgstr "" ! #: objc/objc-act.c:3500 objc/objc-act.c:3517 ! msgid "inconsistent instance variable specification" msgstr "" ! #: objc/objc-act.c:4710 #, c-format ! msgid "multiple declarations for method `%s'" msgstr "" ! #: objc/objc-act.c:4876 #, c-format ! msgid "invalid receiver type `%s'" msgstr "" ! #: objc/objc-act.c:4907 objc/objc-act.c:4933 objc/objc-act.c:4981 #, c-format ! msgid "`%s' does not respond to `%s'" msgstr "" ! #: objc/objc-act.c:4913 objc/objc-act.c:7197 #, c-format ! msgid "no super class declared in interface for `%s'" msgstr "" ! #: objc/objc-act.c:5011 ! msgid "cannot find class (factory) method" ! msgstr "" ! ! #: objc/objc-act.c:5012 objc/objc-act.c:5056 #, c-format ! msgid "return type for `%s' defaults to id" msgstr "" ! #: objc/objc-act.c:5029 #, c-format ! msgid "method `%s' not implemented by protocol" msgstr "" ! #: objc/objc-act.c:5038 ! msgid "return type defaults to id" msgstr "" ! #: objc/objc-act.c:5055 ! msgid "cannot find method" msgstr "" ! #. Historically, a class method that produced objects (factory ! #. method) would assign `self' to the instance that it ! #. allocated. This would effectively turn the class method into ! #. an instance method. Following this assignment, the instance ! #. variables could be accessed. That practice, while safe, ! #. violates the simple rule that a class method should not refer ! #. to an instance variable. It's better to catch the cases ! #. where this is done unknowingly than to support the above ! #. paradigm. ! #: objc/objc-act.c:5298 #, c-format ! msgid "instance variable `%s' accessed in class method" msgstr "" ! #: objc/objc-act.c:5548 #, c-format ! msgid "duplicate definition of class method `%s'" msgstr "" ! #: objc/objc-act.c:5554 #, c-format ! msgid "duplicate declaration of class method `%s'" msgstr "" ! #: objc/objc-act.c:5590 #, c-format ! msgid "duplicate definition of instance method `%s'" msgstr "" ! #: objc/objc-act.c:5596 ! #, c-format ! msgid "duplicate declaration of instance method `%s'" msgstr "" ! #: objc/objc-act.c:5636 ! #, c-format ! msgid "duplicate interface declaration for category `%s(%s)'" msgstr "" ! #: objc/objc-act.c:5722 ! #, c-format ! msgid "instance variable `%s' is declared private" msgstr "" ! #: objc/objc-act.c:5769 ! #, c-format ! msgid "instance variable `%s' is declared %s" msgstr "" ! #: objc/objc-act.c:5779 ! msgid "static access to object of type `id'" ! msgstr "" ! ! #: objc/objc-act.c:5816 objc/objc-act.c:5909 #, c-format ! msgid "incomplete implementation of class `%s'" msgstr "" ! #: objc/objc-act.c:5820 objc/objc-act.c:5914 #, c-format ! msgid "incomplete implementation of category `%s'" msgstr "" ! #: objc/objc-act.c:5825 objc/objc-act.c:5919 #, c-format ! msgid "method definition for `%c%s' not found" msgstr "" ! #: objc/objc-act.c:5963 ! #, c-format ! msgid "%s `%s' does not fully implement the `%s' protocol" msgstr "" ! #: objc/objc-act.c:6021 objc/objc-act.c:8118 ! msgid "`@end' missing in implementation context" msgstr "" ! #: objc/objc-act.c:6049 #, c-format ! msgid "reimplementation of class `%s'" msgstr "" ! #: objc/objc-act.c:6091 #, c-format ! msgid "conflicting super class name `%s'" msgstr "" ! #: objc/objc-act.c:6106 ! #, c-format ! msgid "duplicate interface declaration for class `%s'" msgstr "" ! #: objc/objc-act.c:6388 ! #, c-format ! msgid "duplicate declaration for protocol `%s'" msgstr "" ! #: objc/objc-act.c:7238 ! msgid "[super ...] must appear in a method context" msgstr "" ! #: objc/objc-act.c:8220 objc/objc-act.c:8236 ! #, c-format ! msgid "potential selector conflict for method `%s'" msgstr "" ! #: objc-parse.y:2612 ! msgid "`@end' must appear in an implementation context" msgstr "" ! #: objc-parse.y:2886 ! msgid "method definition not in class context" msgstr "" ! #: objc/lang-options.h:27 ! msgid "Dump decls to a .decl file" msgstr "" ! #: objc/lang-options.h:29 ! msgid "Generate code for GNU runtime environment" msgstr "" ! #: objc/lang-options.h:32 ! msgid "Generate code for NeXT runtime environment" msgstr "" ! #: objc/lang-options.h:35 ! msgid "Warn if a selector has multiple methods" msgstr "" ! #: objc/lang-options.h:39 ! msgid "Do not warn if inherited methods are unimplemented" msgstr "" ! #: objc/lang-options.h:41 ! msgid "Generate C header of platform specific features" msgstr "" ! #: objc/lang-options.h:43 ! msgid "Specify the name of the class for constant strings" msgstr "" ! #: java/lang-specs.h:33 ! msgid "-fjni and -femit-class-files are incompatible" msgstr "" ! #: java/lang-specs.h:34 ! msgid "-fjni and -femit-class-file are incompatible" msgstr "" ! #: java/lang-specs.h:35 java/lang-specs.h:36 ! msgid "-femit-class-file should used along with -fsyntax-only" msgstr "" ! #: config/nextstep.h:161 config/nextstep.h:164 ! msgid "-p profiling is no longer supported. Use -pg instead" msgstr "" ! #: config/arm/arm.h:211 ! msgid "-mapcs-26 and -mapcs-32 may not be used together" msgstr "" ! #: config/arm/arm.h:223 ! msgid "-msoft-float and -mhard_float may not be used together" msgstr "" ! #: config/arm/arm.h:234 ! msgid "-mbig-endian and -mlittle-endian may not be used together" msgstr "" ! #: config/arm/arm.h:252 ! msgid "incompatible interworking options" msgstr "" ! #: config/sparc/freebsd.h:31 config/ia64/freebsd.h:23 ! #: config/alpha/freebsd.h:36 config/i386/freebsd-aout.h:227 ! msgid "`-p' not supported; use `-pg' and gprof(1)" msgstr "" ! #: gcc.c:672 f/lang-specs.h:35 ! msgid "GNU C does not support -C without using -E" msgstr "" ! #: gcc.c:699 ada/lang-specs.h:39 java/jvspec.c:77 ! msgid "-pg and -fomit-frame-pointer are incompatible" ! msgstr "" ! ! #: gcc.c:846 ! msgid "-E required when input is from standard input" ! msgstr "" ! ! #: gcc.c:850 ! msgid "compilation of header file requested" ! msgstr "" ! ! #: config/mcore/mcore.h:60 msgid "choose either big or little endian, not both" msgstr "" ! #: config/mcore/mcore.h:63 msgid "choose either m340 or m210 not both" msgstr "" ! #: config/mcore/mcore.h:64 msgid "the m210 does not have little endian support" msgstr "" ! #: ada/lang-specs.h:42 ! msgid "-c or -S required for Ada" msgstr "" ! #: config/mips/r3900.h:36 config/mips/r3900.h:42 ! msgid "-mhard-float not supported" msgstr "" ! #: config/mips/r3900.h:38 config/mips/r3900.h:44 ! msgid "-msingle-float and -msoft-float can not both be specified" msgstr "" ! #: config/mmix/mmix.h:112 ! msgid "options -mabi=mmixware and -mabi=gnu are mutually exclusive" msgstr "" ! #: config/i860/fx2800.h:290 ! msgid "-p option not supported: use -pg instead" msgstr "" ! #: config/arm/riscix.h:73 config/arm/riscix.h:133 ! msgid "-mbsd and -pedantic incompatible" msgstr "" ! #: config/arm/riscix.h:74 config/arm/riscix.h:134 ! msgid "-mbsd and -mxopen incompatible" ! msgstr "" ! ! #: config/arm/riscix.h:75 config/arm/riscix.h:135 ! msgid "-mxopen and -pedantic incompatible" ! msgstr "" ! ! #: config/arc/arc.h:59 config/mips/mips.h:1007 ! msgid "may not use both -EB and -EL" ! msgstr "" ! ! #: config/vax/vax.h:42 config/vax/vax.h:43 msgid "profiling not supported with -mg\n" msgstr "" ! #: config/i386/cygwin.h:114 ! msgid "mno-cygwin and mno-win32 are not compatible" msgstr "" ! #: config/i386/cygwin.h:169 config/i386/mingw32.h:69 ! msgid "shared and mdll are not compatible" msgstr "" ! #: config/mips/mips.h:837 ! msgid "-pipe is not supported" msgstr "" ! #: config/mips/mips.h:1003 ! msgid "may not use both -mfp64 and -msingle-float" msgstr "" ! #: config/mips/mips.h:1004 ! msgid "may not use both -mfp64 and -m4650" msgstr "" ! #: config/mips/mips.h:1006 ! msgid "may not use both -mgp32 and -mfp64" ! msgstr "" ! ! #: config/i386/sco5.h:662 config/i386/sco5.h:737 ! msgid "-static not valid with -mcoff" ! msgstr "" ! ! #: config/i386/sco5.h:663 config/i386/sco5.h:738 ! msgid "-shared not valid with -mcoff" ! msgstr "" ! ! #: config/i386/sco5.h:664 config/i386/sco5.h:739 ! msgid "-symbolic not valid with -mcoff" ! msgstr "" ! ! #: config/i386/sco5.h:702 ! msgid "-fpic is not valid with -mcoff" ! msgstr "" ! ! #: config/i386/sco5.h:703 ! msgid "-fPIC is not valid with -mcoff" ! msgstr "" ! ! #: config/i386/sco5.h:740 ! msgid "-fpic not valid with -mcoff" ! msgstr "" ! ! #: config/i386/sco5.h:741 ! msgid "-fPIC not valid with -mcoff" msgstr "" diff -Nrc3pad gcc-3.0.4/gcc/po/ja.gmo gcc-3.1/gcc/po/ja.gmo *** gcc-3.0.4/gcc/po/ja.gmo Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/po/ja.gmo Wed May 15 02:41:46 2002 *************** *** 0 **** --- 1,872 ---- + Þ•| + üSý ܧÐßÑß@äß'%à5Mà=ƒà^Áà á-<ájááÛœá:xâ³â5Îâ9ã%>ã+dã0ã"Áã+äã7äHäEcä4©ä3ÞäHåJ[åq¦åMç”fç¡ûç雦êABëJ„ë0ÏëNìKOìJ›ì•æì~|îQûï1Mð7ð2·ð<êð1'ñFYñA ñLâñN/òC~òDÂò?óNGóO–ó³æóOšôKêô}6õ¾´õDs÷÷¸÷*°ùÛú8øú41û4fûE›ûKáûN-ýI|ýDÆýB þPNþMŸþíþN}ÿQÌÿL<kL¨òõAèH*9s,­+Ú7>S fr/‰/¹éí*#B?f¦.Ãò+2CRf(†¯6¿$ö22O‚”³Å×ö# + 6>A#€#¤#Èì$ 3, 3` <” Ñ ë H + NM + 2œ +  Ï + Ü + ö + + /< 6l :£ (Þ , /4 3d ˜ ´ Í æ ÿ   2 + '= 3e 3™ 2Í 3342h3›Ïí  /@Shw†›«Æ!à'/B/r¢0¹(ê*/>n!‰/« Ûè',Lj)©Äà,ð,4J,#¬Ðé#? Z{#—»(Ù_bz,0®0ß./?&o<–Ó,Ú%.Lk‰µ'Ï*÷+"(Nw'—/¿%ï2)H&r%™¿Ü$ð+A/[/‹.»)ê) >'_&‡®3Ç/û+?5Z5.Æõ "#@d€=š@Ø  '05-f(”*½8è5!+W=ƒ>Á% &  C  d /… :µ ð 5!(7!`! ! Œ!™! ®! »! È!,Õ! " "%"B"S"#n" ’".Ÿ" Î"1Ü"S#,b#W#ç#.$5$0H$y$—$µ$-Ò$&%5'%]%,q%,ž%*Ë%%ö%3&.P&+&.«&:Ú&';1'7m'¥'Ä'$à'2(O8(,ˆ(-µ(.ã('):)Y)u)6‘)7È)!*,"*(O*(x*(¡*0Ê*4û*90+'j+’+ ±+!Ò+,ô+.!,(P,,y,,¦,Ó,&é,4-(E-$n-(“-¼-6Ú-2.)D."n.<‘."Î.(ñ./19/-k/™/­/Ë/é/- 0$702\0&0 ¶0 ×0á0ä0bþ0,a1Ž11¬1+´1$à1&2*,2%W2}2'™2Á2#Ò2ö2*3?3.^3$3²3Ï3è34,41G44y4+®40Ú4( 5&45%[5&5%¨5,Î5û56376.k6 + š6¥63Ä65ø6,.7[71z7%¬7#Ò7ö7"8-480b8#“8 ·85Ø889-G9 u92ƒ90¶9*ç9):-<:Bj:­:2¾:'ñ:-;.G;.v;/¥;+Õ;5<<7<*t<"Ÿ<Â<-à<'=!6=*X=*ƒ=®=Ê=æ=û=!>2>Q>h> > ¢>Ã>)Ø>2?35?3i?;?Ù?&ô?,@<H@4…@0º@$ë@A.A+NAzAšA±A ÌA íA"ûA(BGB3gB›BºB,ÓB-C5.C-dC-’C"ÀCãC-ÿC*-DXD*xD%£D'ÉDñD9E=E-WE&…E.¬E.ÛE6 + F.AFpFF«F1ÇFùFG7G,WG!„G0¦G×G.òG !HBH1bH$”H1¹HëH2I:ILI9jI¤IÄI äIJ"JƒSÂS<ÛS$T.=TlT&‡T ®T0ÏT+U*,U,WU(„U.­U1ÜUV$(V%MV)sVV°VÎV=àV6W$UWzW*—WÂWÙWïW!X*X!HX!jX8ŒX7ÅX+ýXO)Y<yY)¶Y(àY. Z8Z*SZ,~Z«Z2ÀZ5óZ)[?["[[+~[)ª[(Ô[0ý[,.\[\({\"¤\Ç\ Ú\Hû\D]5]]6“])Ê])ô]^$7^'\^„^$^$Â^)ç^_%_6_P_i_€_%_Ã_-à_%`4`I`i`†`¥`+Ä` ð`.a(@aia,~a*«aÖa2åa2b2Kb2~b2±b'äb. cD;c/€c*°cÛc÷c d%d/Edud†d—d"·dÚdöd + e e3eJe[ele}eŽeŸe°eÁe Òe óe7fLfef3~f²f.Íf(üf$%gJgdg~g˜g²gÌgægÿg)hBh]h*xh£h»hÖhñh i)i>iSiii6i¶iÒiðij-jHj!cj+…j5±jçj k(k2Ek)xk+¢k)Îk)øk$"l(Gl.pl1ŸlÑlíl) m,3m/`mm®mÍm,ím7nRnon*†n+±n+Ýn3 o+=o8io¢o1¶o4èo+p(Ip5rp2¨p,Ûp?q,Hq6uq¬q"Èq.ëq0r!Kr:mrD¨r6ír.$s;Ss&s,¶s0ãs)t >t1_t‘t9°t:êt&%u1Lu4~u8³u+ìu.v0Gv4xv7­v"åv1w,:w.gw3–w#Êw+îw$xK?x‹x,©x+Öx4y67yCnyL²y?ÿy$?z0dz4•z9ÊzI{6N{!…{>§{æ{(|9.|"h|;‹|6Ç|-þ|3,}G`}H¨}Añ}D3~=x~:¶~?ñ~818j#£$Ç&ì/€8C€!|€+ž€+Ê€2ö€-)(W*€«(¿è‚ &‚52‚h‚„‚ ‚/²‚8â‚(ƒ"Dƒ5gƒ'ƒ+Ń3ñƒ-%„'S„>{„Yº„…+*…V…v…%Ž…´…Ô…ï…† †7†0N†0†°†dž߆+ù†%‡2C‡ v‡+—‡Ç(â‡" ˆ6.ˆ4eˆ$šˆ¿ˆOÖˆ &‰"G‰j‰3…‰7¹‰'ñ‰Š58ŠnŠŠ™Š·ŠÊŠ áŠ& .‹;‹Y‹w‹‹‹¨‹+Å‹8ñ‹-*Œ-XŒ"†Œ©ŒÁŒÝŒòŒ ,,&Y*€2«(Þ)Ž41Ž)fŽ$Ž+µŽáŽöŽ  7I[{˜!µ"× ú)7E }‡(¢<Ë?‘CH‘Œ‘#§‘-Ë‘ ù‘!’<’X’t’ ’%±’$×’4ü’1“3P“„“7ž“%Ö“$ü“+!”<M”cŠ”î”•*•'A•*i•,”•3Á•<õ•%2–1X–Š–&¤–Ë–0á–,—.?—0n—0Ÿ—.Зÿ—$˜A˜#^˜!‚˜:¤˜#ߘD™FH™@™8ЙP šHZš£šºš0Öš.›36›3j›5ž›5Ô›1 + œ2<œoœ ‰œ2ªœ&Ýœ$')+Q!}Ÿ(¿èž0žHžhž|ž'‹ž'³žÛžöž+Ÿ2=Ÿ2pŸ2£ŸÖŸòŸ!  . #A -e ,“ 5À ö ! ¡/-¡2]¡"¡+³¡%ß¡2¢28¢#k¢"¢&²¢4Ù¢£4&£5[£'‘£O¹£Ê ¤Ô¥î¥"¦!+¦5M¦ƒ¦¢¦·¦'Ѧù¦> §>J§6‰§:À§6û§2¨Q¨q¨.ލK½¨ ©&©F©-U©ƒ© ©.¾©0í©ª";ª^ªwª†ª—ª¦ªµªͪêª#ÿª#«4«L«[«s««¤«¹«Ê«å«ú« + ¬#¬B¬ ]¬ ~¬ ‹¬—¬!´¬Ö¬ ì¬ø¬­7-­0e­–­²­Ñ­è­® + ®®#2®V®q®(‹®´®.Ñ®¯4¯/F¯&v¯¯¼¯ͯè¯(°-°!=°_°}°°¬°*ðî°% ±1±J±g± ƒ±¤±'¼±*ä±²-²*E²2p²0£²"Ô²÷²1³E³\³x³2‡³8º³ ó³.´C´"_´"‚´1¥´×´ð´) + µ.4µcµ}µ2œµ)ϵ+ùµ3%¶.Y¶6ˆ¶*¿¶&ê¶E·DW·5œ·*Ò·)ý·$'¸3L¸"€¸(£¸,̸,ù¸1&¹'X¹;€¹6¼¹.ó¹9"º1\º&Žº*µº*àº5 »+A»m»9»)Ç»2ñ»$$¼+I¼'u¼-¼2˼$þ¼/#½'S½4{½°½(Ͻø½¾'3¾/[¾*‹¾,¶¾3ã¾5¿$M¿=r¿#°¿*Ô¿*ÿ¿/*À#ZÀ!~À À ÀÀÎÀ+ßÀ$ Á,0ÁD]Á)¢Á0ÌÁ+ýÁ/)Â+Y…Ž—Â( Â8ÉÂ&Ã)ÃGÃ(bà ‹Ã&¬ÃÓÃ#êÃ(Ä.7Ä,fÄ'“Ä)»Ä*åÄÅ*Å+HÅtÅ&Å#·Å&ÛÅ,Æ(/ÆGXÆ& Æ'ÇÆ2ïÆ"Ç)=Ç1gÇ™Ç+²Ç%ÞÇ,È(1ÈZÈvÈ-•È8ÃÈ7üÈ74É5lÉ&¢É*ÉÉôÉýÉÊÊ*Ê"CÊfÊzÊ+ƒÊ/¯Ê ßÊìÊ õÊË Ë"Ë/7ËgË3pË7¤Ë(ÜËÌ-Ì.KÌ)zÌ4¤Ì$ÙÌ8þÌ7ÍPÍ*pÍ-›Í1ÉÍ6ûÍ+2Î%^΄Î+¤Î1ÐÎ*Ï+-Ï0YÏ=ŠÏÈÏ$ÞÏ%Ð2)Ð+\Ð(ˆÐ,±Ð%ÞÐ1Ñ16Ñ/hÑ2˜ÑËÑ>âÑ&!Ò'HÒ(pÒ)™Ò.ÃÒ0òÒ7#Ó#[Ó-Ó/­Ó&ÝÓ.Ô03Ô!dÔ†Ô%¢Ô8ÈÔÕ2Õ.LÕ8{Õ*´ÕßÕøÕÖ/ÖKÖ!gÖ‰Ö¥Ö ÅÖæÖ×+ ×&L×/s×$£×5È×4þ×3ØNØ!nØ&Ø.·Ø&æØ1 Ù%?ÙeÙ + Ù.ŒÙ»Ù1ÒÙ3Ú>8ÚwÚ:ÚÈÚ(åÚ Û*/ÛZÛpÛƒÛ”Û²ÛÇÛáÛøÛ Ü-Ü JÜ!kÜ#Ü±Ü ÑÜòÜ!Ý!4ÝVÝ,vÝ(£Ý#ÌÝ*ðÝ$Þ@Þ(TÞ*}Þ%¨ÞÎÞ$îÞ,ß!@ß.bß&‘ß+¸ß=äß "àCà)]à/‡à.·àæà;þà,:á2gá9šáÔáåá)â=/âmâ|â5–âÌâìâ-ã24ãgã+ƒã%¯ãÕã ïãýã4äLä)\ä$†ä«ä¼äÜä îäå,å(Lå$uå$šå%¿å'åå6 æRDæ—æ¨æºæËæ*áæ: çGç8eç3žç/ÒçEè9Hè,‚è¯è@Íè(é 7é1Xé(Šé'³é,Ûé1ê!:ê.\ê0‹ê¼êÖê)óê.ë1Lë%~ë'¤ëÌë,èë#ì$9ì/^ìŽì—ì ì´ìÉìâìöìí02í cí0„í&µí&Üí:î>î<Vî;“î.Ïî1þî.0ï._ï5Žï5Äï?úï:ðSð;lðX¨ð7ñ99ñ2sñ2¦ñ Ùñ!úñò,7ò'dò,Œò'¹ò,áò'ó$6ó([ó„ó#Ÿó&Ãó<êó'ô'Eô'mô•ô6³ôêôõ5&õ,\õ/‰õ0¹õ%êõ4ö)Eö%oö3•ö.Éö'øö< ÷G]÷B¥÷Eè÷ .ø48ømø(Œø+µøáø$ýø"ù0Aù2rù)¥ù,Ïùüù4ú$Iú nú%xúžú­ú¿úÔúéú'þú5&û.\û ‹û¬ûËûáûøû+üDü\üqü‘üªü¼ü Óü!ôüý3ýIýbý,|ý2©ý.Üý þ!þ!>þ`þ${þ þ¼þ*Ðþ7ûþ(3ÿ$\ÿ)ÿ%«ÿ%Ñÿ$÷ÿ %(/3X'Œ$´,Ù$%1J)|¦À ÇÑØ!ö7!L-nœ ¬¸Õñ. = ^&0¦"×/ú**I(t(Æ5à+/B5r¨%À)æ!C;3)³6Ý!367j6¢2Ù# (02Y#Œ#°.Ô!  % -F 0t *¥ Ð *Ù , + 41 + %f + !Œ + ® + &È + 5ï + #% 'I &q $˜ >½ =ü ': *b  « ,Ë !ø & &A 3h )œ @Æ /,7<d9¡5Û8EJ/ÀÐ5á6*N6y3°-ä *-K.y ¨DÉ"99"s$–=»ù% 3'L7t)¬;Ö*+'V~#š,¾,ë 6" Yz'‰)±;Û/-G2u#¨Ì+é90O4€/µ;å6!5X6Ž>Å3/81h&š1Á9ó-&Mt/ƒ%³*Ù;*@1k>0Ü[ ?i4©Þü+G"V(y&¢;ÉHN<_<œ<Ù<!S&uœ« ºÈ$Û  " 4 F X j |  Ÿ ± à Õ ç ù  !!/!A!S!e!w!‰!›!­!¾!Ð!â!ô!""*"<"N"`"r"„"•"¦"·"È"Ù"ì"ý"##0#A#R#e#x#“#³#Í#(ß#)$N2$$ ™$!¦$È$#æ$ + %%'%M%"a%R„%×%÷%&0&C&[&w&•&°&Ë&é&'':'U'(s'œ'³'#Ð'&ô'(86(0o( ('¿(*ç())<)[)w))/«)Û)ò)(*;*"U*,x*D¥*,ê*&+>+%^+„+£+#Á+å+!,1',Y,l,*†,!±,!Ó,!õ,$-"<-#_-#ƒ-#§-Ë-æ-..<.+\.ˆ.-¨.1Ö./#(/L/%g/1/3¿/ó/0 0!>0`03}0±0 Á0â0!1$1.31b1){11¥1*×102*323^20’27Ã2 + û213383l3$Œ3(±3!Ú3ü34'94a4/{45«4á4"þ4*!56L5ƒ5‹5&ª5&Ñ50ø5)64C6"x6›6·6#Ó6÷6757)L7!v7/˜7È7Ü7 ö78'788_8+˜8Ä8Ú83ù8-9"69Y9)l9–9´9%Ï9%õ9:/::!j: Œ:,–:'Ã:ë:5; =; ^;3l;6 ; ×;!ø;&<A<(]<)†<'°<8Ø<= '=24=Ag=>©=è=>>8>K>5c>$™>¾> Ø>ù>:?&S?-z?¨?(¾?'ç?1@A@,R@3@³@.Ñ@.A /A&PAwAA¬A + ÈAÓAåA&ÿA&B+9B<eB1¢B,ÔB4C/6C2fC/™C"ÉC(ìCD)DDD(]D3†D5ºDðD>øD7E OE%]EƒE%ŸE6ÅE3üE"0F)SF}F™F±FÈFÚF/ëF=G)YG#ƒG#§GËGÞGúGH(9H!bH*„H#¯H-ÓH6I8I(XI)I«IÈI"åI-J6J(TJ}J›J*²JÝJ-ôJ7"K#ZK/~K0®K ßK)ëK#L)9L5cL™L¯L%ÆL?ìL,M'1M(YM+‚M,®M*ÛM(N)/N9YN/“N/ÃN<óN70O)hO’O-°OÞO+óO P)PDPdP€PP%¼PâP&÷P8Q/WQ!‡Q ©Q.·QæQ8R@:R{R%—R½R,ÅR%òR%S4>SsS‰S¤S¹S-ÐSIþS HT2iT$œT8ÁT/úT.*UYUxUŽU=¤U%âU'V 0V2QV'„V4¬V2áVW4W;WYW#tW'˜W!ÀW âW<X3@XKtXPÀX!Y$3Y#XY |YY!­Y"ÏYòY*Z3;Z+oZ6›Z9ÒZ& [43[3h[œ[´[&Ò[ ù[\":\]\z\*’\+½\2é\])1][]$t]'™]Á]à](^4)^"^^^!Ÿ^Á^$ß^_/_,M_!z_œ_5«_4á_)`)@`-j` ˜`'¹`)á` a(,a$Ua.za(©a.ÒaMb2ObM‚b#Ðb*ôb0c$Pc>uc@´c:õc#0d Tdud‹d(¢d\Ëd(e?e/Fe ve€e$še.¿e&îe8f(Nf'wf1Ÿf.Ñf5g56g9lg5¦g5Üg5h-Hhvh •h¢h½hÚh#öh#i(>iCgi«i¿iÔièiþij%j:jNjcjwjŒj¢j¶jÌjæjúj kk8kMkckykŒk,§k-Ôk,l,/l,\l+‰l3µl0élm9m.Ym/ˆm2¸m&ëmn1nNn"ln)n ¹nÚnùno#6o)Zo*„o¯o.Äo-óo8!p.Zp*‰p$´p$Ùp$þp$#q-Hq&vqq»q*Ñq$üq-!r,Or-|r'ªr)Òr0ür-sKsis#ˆs)¬s5Ös4 t/At'qt5™t$Ït6ôt+u+Gu4su¨u.Çuöu&v6vOv hvrv „v¥vµvÅvÚv àv.w90w9jw)¤wÎwæw0x04xexƒx7¡x+Ùxy+y#Kyoy‰y.¦y.Õy'z3,z `zz%ŸzÅzßzÿz,{-E{s{"‡{ª{»{.Ø{||&7|)^|"ˆ|«|Á|'Ö|þ|&}/B}r}(Š}4³}è}1þ}40~/e~!•~·~1×~8 $Bg5‡3½,ñ€#:€^€!~€( €8É€ ' 04eƒ3¢GÖ‚%'‚M‚%f‚6Œ‚Â%Þ‚"ƒ-'ƒ"Uƒ!xƒ$šƒ.¿ƒ îƒ!„1„O„g„(„ª…;¾…0ú…<+†5h†Cž†â†"ó†‡1‡ÍG‡DˆZˆ2vˆ8©ˆ&âˆ3 ‰/=‰m‰#‰+±‰ ݉Cþ‰0BŠ-sŠJ¡ŠHìŠp5‹z¦ŒŒ!i®Å-Ló@‘1‘Gô‘C<’O€’Ð’|n”Kë•;7–0s–;¤–7à–;—}T—LÒ—C˜Gc˜B«˜>î˜8-™Jf™O±™ƒšM…šGÓšj›¤†›>+éjïTŸ"D 1g 3™ 7Í u¡2{¡D®¢Có¢<7£?t£F´£Gû£„C¤FȤJ¥EZ¥4 ¥<Õ¥÷¦> + ¨HI¨;’¨)Ψ-ø¨%&©L©g© + €©‹©( ©(É©ò©ö©ª,)ª!VªBxª%»ª;᪫-7«e««™«3¶«&ꫬ:!¬8\¬•¬«¬.Ȭ÷¬­6­P­p­(­¸­Ò­ + í­Mø­+F®+r®/ž®ή.ì®1¯8M¯J†¯'ѯ#ù¯K°Li°;¶° ò°%ÿ°%%±:K±8†±J¿±F + ²<Q²4޲:ò6þ²5³&U³$|³(¡³ʳͳѳ4Õ³4 + ´A?´B´>Ä´@µ@Dµ<…µ@µ.¶.2¶a¶q¶‹¶§¶!Ŷç¶·!·=·X·j·+~·ª·/Ç·8÷·10¸b¸@|¸,½¸.ê¸(¹2B¹"u¹-˜¹ƹ)ݹ>º5Fº"|ºŸº5¹º#ﺻ+»4=»4r»H§»@ð»71¼"i¼*Œ¼(·¼ ༽!½A½*_½0н-»½_é½I¾^¾6e¾6œ¾,Ó¾>¿0?¿)p¿3š¿ο;Õ¿&À8À!AÀcÀwÀÀ¯ÀÎÀ/åÀ8ÁCNÁ/’Á'ÂÁ7êÁ?"Â1bÂA”Â9ÖÂ5Ã'FÃ!nÃÃ+©Ã$ÕÃúÃ)Ä @Ä)aÄ7‹Ä3ÃÄ+÷Ä*#Å#NÅrÅ1ƒÅ9µÅ ïÅýÅFÆ1^Æ8ÆÉÆéÆÇ5ÇSÇjÇ@‡ÇJÈÇ È + !È7,È7dÈ.œÈ9ËÈ:ÉB@É9ƒÉ2½É>ðÉ%/ÊUÊ#lÊ Ê6±Ê.èÊ Ë)%Ë$OËt˓ˢ˱ËÈË×ËæË-õË#Ì2ÌAÌ`Ì sÌ&”Ì»Ì,ÊÌ÷Ì=ÍH>Í"‡ÍNªÍùÍBÎXÎ.hΗεÎ!ÓÎ$õÎ%Ï,@ÏmÏ=†Ï=ÄÏ;Ð6>ÐDuÐ4ºÐ0ïÐC Ñ>dÑ£ÑCÃÑ>Ò4FÒ4{Ò-°Ò9ÞÒOÓ,hÓ,•Ó2ÂÓ&õÓ4Ô2QÔ%„Ô<ªÔFçÔ&.Õ6UÕ2ŒÕ0¿Õ2ðÕ)#Ö6MÖ2„Ö/·Ö!çÖ# ×7-×4e×-š×4È×/ý×3-ØaØ5~Ø?´Ø3ôØ,(Ù'UÙ }Ù/žÙ=ÎÙ, Ú%9Ú;_Ú%›ÚDÁÚ#Û,*Û,WÛ„Û6ŸÛ6ÖÛ8 Ü(FÜ*oÜ-šÜ7ÈÜ'Ý(ÝAÝDÝBdÝ.§Ý ÖÝàÝ + ñÝ7üÝ4Þ)RÞ'|Þ&¤Þ"ËÞ(îÞß*2ß#]ß(ß'ªß6Òß( à2àKà"fà$‰à/®à4Þà3á(Gá,pá)á*Çá"òá*â@â-`âŽâ§â2Ââ$õâã*1ã4\ãB‘ã=Ôãä4.äcä7ä¹ä Öä?÷ä?7å(wå  å8Áå@úå#;æ _æ(mæ4–æ"Ëæ3îæ5"çBXç›ç,®ç6Ûç1è*Dè.oè-žè&Ìè0óè*$é0Oé$€é¥é+¼é&èé&ê06ê0gê#˜ê#¼êàêúê%ë!:ë\ëzë#•ë#¹ëÝë4÷ë0,ì0]ì0ŽìF¿ìí($í(Mí$ví4›í2Ðí-î11î$cî1ˆî&ºîáî üî)ï Gï(Uï2~ï,±ï9Þï!ð:ð2Vð5‰ð=¿ð5ýð53ñ$iñŽñ(£ñ/Ìñ#üñ) ò#Jònòò;¢òÞò4üò1ó7Ló7„ó?¼ó7üó&4ô[ôpô&‡ô®ôÈôäô"õ%#õ3Iõ}õ/˜õÈõçõ*ö%1ö*Wö‚ö$šö¿öØö2øö"+÷N÷i÷„÷Ÿ÷·÷"Ó÷ö÷& ø.2ø#aø0…ø¶øÍø$êø(ù 8ù(Yù*‚ù-­ù-Ûù ú*ú2Gú%zú ú$½úHâú"+ûNû(mû$–û»û$Øûýûü9üWüvü ‘ü$²ü,×üý"#ý"Fý"iý#Œý4°ýåýýýþ:5þpþ…þ;£þ(ßþ ÿ))ÿSÿpÿ%ÿ$¶ÿ&Ûÿ(F+r6"Ä#ç &&M4h#,Á6î%-C0q¢Á(à) 3Ia2v6©!à3"V"p“$¬Ñì" 1/-a:EÊ4,E"r•!µ"×3ú .0O0€!±Óð1*B%m4“-È"ö. H _ #w J› æ * + 60 + /g + )— + Á + #Ø + "ü +   !@ !b &„ « Ä Ù î & ". Q l . &° × ð  ' C "_ %‚ -¨ Ö ï &,*W3l* EË));$e0ŠF»4,7d€“'¦/Îþ!&$H$m’¥¾Ôî*>Rfz"Ž"±:Ô "06SŠ.1Ì+þ*Gdž»Øô 1O!m¨ÃÞ&ù 8Pi4‚·&×&þ&%Lf €+¡.Í ü.#L*p&›)Â'ì'<!W.y0¨ Ù"ú!.?$n!“µ"Ô&÷>]{.“1Â1ô9&1`*’½;×+,?)l5–)Ì)öG ,h0•$Æ$ë*2;&n2•>È. -6 0d (•  ¾ &ß  !'!(D!#m!*‘!&¼! ã!4"09"(j"*“"*¾"0é",#,G#(t#0#5Î#*$1/$%a$&‡$'®$>Ö$ %+6%*b%.%2¼%2ï%@"&5c&™&,¸&>å&<$'Fa'*¨' Ó'0ô' %("F(,i("–(,¹(2æ(,)6F)>})B¼)<ÿ)B<*:*4º*>ï*6.+8e+$ž+'Ã+%ë+(,2:, m,)Ž,(¸,0á,&-,9-0f-—-¨-È- æ- .+.#A.#e. ‰. —.,¸.$å.& + /.1/6`/,—/1Ä/ ö/!0990_s0Ó0.ä0 141"O1&r1™1ª1¹1È1Û1,ø1,%2R2c2t2,…2²2,Ï2.ü2"+3N3(i3(’37»3=ó3.14`4F~4#Å4#é4 5(&5:O54Š5(¿5&è56&6C6`6 u6–6©6Æ6å6ö6727!N7p7-‹7=¹70÷7.(87W8%8µ8#Ó8÷8959/Q9-9)¯9,Ù9(:0/:4`:(•:$¾:2ã:;/;D;];v;Š; ž;¿;Ý;"û;#<$B<.g<0–< Ç<Ô<"í<.=/?=7o=§=$Ã=*è=!>5>Q>p>‰>"¢>Å> å>(?/?H?"g?.Š?!¹?*Û?#@8*@tc@Ø@ó@$A&3A2ZA0A:¾A:ùA4B.SB‚B'¢B ÊB.ëB,C6GC1~C2°C0ãC"D*7D"bD…D£D-¿D.íDJERgECºE;þEQ:FHŒFÕF(ðF/G2IG<|G.¹G4èG4H RH sH”HªH5ÃH'ùH!I?I^I#}I¡I1¿I'ñI&J(@J!iJ‹J¨J&½J)äJ!K!0K/RK2‚K2µK2èKL6L$QLvL+‹L·L*ÕL6M7MHM,gM ”MµM(ÕMþM.N,FN$sN&˜N.¿N,îN O1ÓRSL&SBsS5¶S7ìS8$T]T&zT ¡T$ÂTFçT$.U SUtU.ˆU)·U*áU. V5;V$qV –V#·VÛVóVW'W@W`W€W,œWÉW åWXX?X_XzX–X°X!ËXíX + Y'Y#DY hY‰YY°Y&ÍY"ôYZ*ZEZ0aZ6’ZÉZæZ[$[B[Z[s[Ž['©[&Ñ[,ø["%\;H\„\6œ\5Ó\, ]*6]a]'~] ¦]$Ç]ì] ^*^J^ a^‚^0›^&Ì^.ó^""_*E_"p_-“_Á_#Ô_6ø_/`H`4c`*˜`,Ã`ð` a0)aZauaa4«a8àa b/:b jb‹b©b'Çb!ïb"c,4c(acŠc©c.Åc(ôc*d0Hd$yd>žd4Ýd"e35e3ie(e*Æeñe*f*;f"ff0‰f0ºf.ëf@g*[g:†g0Ág&òg@h0Zh'‹h"³h$Öh(ûh,$i$Qi0vi&§i6Îi3j.9j.hj$—j,¼j.éj&k"?k9bkœk&»k âkl "l2Cl&vl2l@Ðl:m,Lm1ym$«m(Ðm*ùm<$n(anŠn%©nÏnàn:ön+1o6]o7”o(Ìo>õo34p9hp3¢p + Öp + áp + ìp%÷p9q/Wq'‡q¯q'Ïq#÷qr;rUr-qr+Ÿr+Ër7÷r1/s5as)—sÁs,Ýs + t+t+Jt4vt)«tÕtDõt!:u!\u4~u³u?Éu; v!Ev+gv%“v2¹v4ìv!w#Aw;ew=¡w2ßw-x3@x2tx*§x + Òx + Ýx + èx + óx=þx$‘m‘C‹‘6Ï‘:’FA’ˆ’,’)Ê’6ô’+“#B“.f“•“ ´“.Õ“0”$5”2Z”#”)±”Û”!ë”> •L•0d•(••¾•/Ô•––3–P–+n–)š–)Ä–"î–—(0—UY—¯—Å—Ü—ò—0 ˜0>˜#o˜6“˜Gʘ1™CD™;ˆ™.Ä™%ó™;š"Uš,xš%¥š'Ëš$óš*›<C›$€›8¥›@Þ› œ @œ,aœ2Žœ2Áœ%ôœ.ID^9£ Ý0þ/ž8žAžUž!qž“ž"¬ž$Ïž2ôž''Ÿ8OŸ&ˆŸ¯Ÿ(Ο÷Ÿ7 6H , 4¬ /á /¡,A¡,n¡8›¡Ô¡"ò¡3¢fI¢D°¢Dõ¢7:£8r£«£"Ç£ê£"¤,#¤-P¤.~¤4­¤'â¤# + ¥&.¥U¥ n¥,¥=¼¥ú¥"¦2¦$Q¦8v¦$¯¦ Ô¦&õ¦*§3G§,{§¨§8çü§¨9.¨1h¨!š¨1¼¨>î¨9-©Ag© ©©.¶©!婪2&ª$Yª,~ª «ª8̪0«'6«*^«‰«3¦«Ú« ù«&¬*¬@¬Q¬k¬¬&’¬:¹¬2ô¬"'­"J­m­­ ‘­$²­(×­®® &® 3®@®*[®†®¦®Ä®Ý® ò®*¯*>¯%i¯¯1ª¯1ܯ,°,;°*h°“°4­°Fâ°&)± P±%q±$—±"¼±"ß±² ²²24²*g²’²6¯².æ²3³4I³"~³%¡³dz γس*ß³& + ´1´ L´(m´0–´Ç´ Ö´#ã´ µ"(µ#Kµoµxµ)—µ$Áµ6æµ#¶.A¶ p¶0‘¶4¶$÷¶·09·&j·,‘·*¾·"é·( ¸45¸j¸ s¸J”¸>߸2¹>Q¹¹B¯¹Hò¹L;º@ˆº.ɺ2øº2+»(^»(‡»5°»)æ»$¼45¼>j¼'©¼Ѽ-Ú¼0½.9½&h½&½¶½$ѽ3ö½$*¾(O¾'x¾ ¾/»¾.ë¾&¿*A¿l¿$‡¿'¬¿%Ô¿-ú¿-(À0VÀ4‡ÀB¼À*ÿÀ6*Á0aÁ0’Á*ÃÁ.îÁ=Â1[ Â4´Â,éÂ(Ã??ÃGÃ(ÇÃ%ðÃ%Ä%<Ä:bÄ$Ä9ÂÄüÄÅ9/Å'iÅ)‘Å<»ÅøÅÆ'Æ&=Æ&dÆ-‹Æ:¹ÆôÆ Ç)ÇHÇ[Ç(uÇ*žÇÉÇ@ØÇ)ÈCÈ,JÈ wÈ0˜È.ÉÈ5øÈ*.É"YÉ*|É,§É<ÔÉ"Ê.4Ê)cÊ/Ê,½Ê6êÊ:!Ë>\Ë4›Ë,ÐË-ýË2+Ì<^Ì.›Ì-ÊÌ(øÌ!Í<5Í.rÍ3¡Í@ÕÍ/Î(FÎ*oÎ.šÎMÉÎDÏ'\Ï„Ï ¡Ï0ÂÏ + óÏþÏ%ÐDÐ=dÐJ¢Ð íÐ@úÐ@;Ñ@|Ñ@½Ñ&þÑ*%Ò PÒ \Ò jÒwÒ(ŽÒ·Ò ÆÒ ÔÒ âÒðÒÓ Ó"Ó8Ó JÓ XÓ fÓ tÓ ‚Ó Ó žÓ ¬ÓºÓ ÌÓ ÚÓ èÓ öÓÔ Ô$Ô :Ô HÔ VÔdÔvÔ ˆÔ –Ô¤Ô¶ÔÈÔ ÛÔéÔúÔ ÕÕ-Õ>ÕWÕhÕyÕŠÕ›Õ¬Õ½ÕÐÕãÕ$Ö&ÖDÖ.UÖ/„ÖJ´ÖÿÖ× $×E×/^×Ž× ­×Î×Ý×Dø×=ØVØqؑؠشØ$ÏØ!ôØ!Ù$8Ù!]Ù!Ù!¡Ù!ÃÙåÙ.Ú/ÚFÚ$\Ú$Ú¦ÚEÁÚ/Û%7Û$]Û1‚Û$´ÛÙÛ!îÛÜ!Ü ;Ü\Ü"oÜ(’Ü»Ü(ÙÜ(Ý6+Ý$bÝ(‡Ý°Ý%ÉÝïÝÞ)Þ$HÞ&mÞC”ÞØÞøÞ(ß)9ß)cß"ß,°ß*Ýß+à+4à+`à"Œà#¯à#Óà%÷à(á.Fá.uá,¤á:Ñá. â;âXâ"qâ;”â0Ðâ!ã#ã*ã$Gãlã(…ã + ®ã¹ãÙã øãä0)äZä9mä3§ä4Ûä2å@CåD„å>Éå@æ + Iæ=TæA’æ$Ôæ(ùæ0"ç'Sç{ç$˜ç0½ç îç(è88è'qè-™è5Çè,ýè*é(1é%Zé0€é&±éØéHðé+9êeê%…ê(«êÔê%ôêë(2ë([ë2„ë·ë%Îëôëì$,ì7Qì(‰ì²ì,Ãì0ðì!í*íCí$Tíyí“í&ªí/Ñíî#î;î Zî:dî%ŸîÅî8åîï=ï8Lï*…ï&°ï%×ï0ýï.ð#Fð#jð'Žð3¶ð êð ñ5ñDRñ@—ñ+Øñò(!òJò _ò=€ò3¾òòòó#-óIQó.›ó9Êó ô)%ô(Oô.xô§ô-½ô9ëô"%õ/Hõ<xõ$µõ.Úõ% ö)/öYöhöxöö&§öÎö&íö;÷0P÷,÷8®÷*ç÷(ø';ø$cø*ˆø³ø+Êø(öø0ù/Pù0€ù±ù.¹ùèùú"ú?ú$Rú6wú*®ú+Ùú$û*ûGûZûmû~û!“û4µû(êû'ü#;ü_ü"rü•ü´ü&Ëü.òü6!ý/Xý3ˆýA¼ýþý%þ4@þ1uþ&§þÎþ$éþÿ$-ÿRÿgÿ(~ÿ§ÿ*¾ÿ*éÿ$3>X—*¦ Ñ0òC# gˆ"¥EÈ,*@)k/•/Å õ&F=$„2©6Ü(+<h&‡®0Êû =Ncz—&®BÕ2%Kq4#¶7Ú9L-i—-Ÿ'Í-õ,#Ph{“-¯CÝ! 2@ (s ;œ 8Ø 0 + B + [ + &w + <ž + ,Û + 3 &< 5c %™ ?¿ 4ÿ 4 Q 'X $€ +¥ (Ñ ú ( .< 4k A  Aâ &$(K&t,›ÈÏ$ì**9U(9¸2ò$%4J5 µ"Ö'ù !"B!e"‡ª5Á8÷*0[1q£/Áñ )%J5p ¦)Çñ!#3W1n. /Ïÿ21F=x$¶2Û.=2\"+²-Þ/ /<.l@›2Ü@ P"q,” Á;â-*L%w!½"ß3T6‹ª0±âé2#7VCŽ(Ò=û@9:z?µ?õ@5?v?¶?ö06!g + ‰”².Í,ü,)1VIˆÒçý ) > R h } “ ¨ ¾ Õ ê !!-!A!P!g!}!”!«!¿!/Ü!4 "3A")u"3Ÿ")Ó"4ý"02#c#x#$˜#½#.Ü#) $5$"U$x$ “$'´$.Ü$$ % 0%Q%"n%#‘%&µ%Ü%/õ%3%&-Y&!‡&!©&$Ë&$ð&('$>''c'.‹'(º'"ã'&()-(/W(.‡(0¶($ç( )"-) P) q)&’)(¹) â)3*'7*$_*2„*3·*"ë*<+K+&k+'’+º+.Ó+ ,#, B, c, + „,,%¥,Ë,à,õ,--01->b->¡-Cà-$.7.0W.0ˆ. ¹. Ú.5û.01/b/-z/*¨/Ó/ ì/' 0750,m0,š0Ç0æ0'1-1H1d1;ƒ1:¿1"ú1"2@2O2>c2¢2"»2,Þ2& 3*23]3t3)“3½3/Ù38 4&B4*i45”4&Ê44ñ40&57W5"5&²50Ù5H + 6.S6,‚62¯6(â64 7@7S7r7)Ž7/¸74è78/$83T8ˆ8'¨8/Ð8B9C9,L9y9)™9/Ã9 ó9&:';:)c:(:&¶:+Ý:6 ;!@;$b;#‡;«;È;ñI + Ç×Ûoç rp˜xÝf Fú VB䜼\‚uQ äÐØq¨K m + à ‡”? œQ“ÜwİÇd\…: † §,a ¶å ´Œž„"FRh + Ñô8 + þ”!èÐ< + 3¤ê‡!¨ØL´« ƒC¬ª6v + (DÂ&4u~NzíOÇúä¦âŠ–žH[ + p …¿øtÂHØ—I Ö“kŽÜ²ÊÓ¨ie + ’  ‰À߀ªPÙn•lg²B«®I³Ë<¾ V + – E1… À ; +  + 3l: + `û Ù¹y n + Õ< ^[ÔÕÌ&PG + Ñ Aþçã'bá—£…Ý tD·ežV@  + ‘™±0fï¢ ›ʧl —®Ú»ÏÖ • ðì½èh´”¢; ` 6 ~} ’à«o0Ûû3À³áò §œ@ žq„û”R + 01+ö›uЇƒ¤‡n ‰ hu :íÀs + ÓÎg + š $qµ8$41Jc¶îKa^€Þ 9ôpÛ Ž¿˜ uëÜ@ÙA4À~1a¤õ A• \¨â  + ¹3€  ,ï­ @= ú­Syˆ³êùÕ‘8}ðXgÉm-šP¬  ˜, xÓCè[â b + AØkT …bmï3¯^—w²õÑÊ~ צT7 + ó“;•d Éí¤ žþ"ßl ŽŠê T + ñ ù¦zÒµXzÒz qF…¡( + }kr + iG‚F ºµ8i‚D©75–s‰q N¼ÌQ + Ö> + !üØ5ùÇZþ$õ yÀwh|& + ñ¹v¬5fÁÍœÔZÅ ¸Ãeª3=é¯)*U + 'ýwŸ3 + ‡h%?Ìó²ËîM=t’g œZÉæÇ ×î¥ ˆ%kþäj9 o ÏÄ fªöúöÿ)×Ö× ‡5A¼¨L + |o}9‘lL + §Cs d>ÍwR‹Õ  bL yÖ^"9ë + ÛŸÁÔ³Âr 0- Ž/À ]=HM–ó=#/£ˆ ‚A + E + üu + ä^¬qUw â(P + Øš¬Yéž–( IV•(‘ÝSE`‰¾x ŽÄÑP¡ + +’aìLÔ¶üY¡êù¶§V¯W÷µº"ßëÈ (ù £iJÝ &•/€} + ŒJvf±û,È¡sI + k ñ2YNcCY + ¾Š‹Syï TõÅb ±£WœäQÃ×>ñ(<Ó xý Æ þ¡ ÿ!$j + [#Ž Cêö{4œsQé9t_šEÆ + )€¶ mcá ìÈû" §"¦—g1½ÇUøáŒOâWo¬›Ç/° ) +  +  =ï* ïšõ¥Ëº + + 7<:….AB™ú>„g :p|‡7ë"í  + Qd—4h ½É#·[ {-’ `%¢®Í ñ9 + xë ‘Îº÷'€nï ¢^ÒxR•a + 4 6£;© +ø D1:2› Ý‘'ÿ–EPë |if + CU0_÷ H3“å»t+F]*ƒ-ÃSÈÜ_XS + ÷åº_ + Ði + ]!TǘËoüÉÏ+ôe †\³¼ƒì® + î-b%¤ßÿ 4 + ?_rÌ z(≮<«ÏF{ :!J K¾k‡¤+aÕÆöЈý¦žÉ¥2-¾2¤1ÊD ÍãÉ ‰«I[Ú¦}¬y + .b~>¦  [èt ~àŸU¨N-Ö I\jÑôœ©{úÜ ÐY „¸"?ÚÒkÙ å¥, dˆ'ðR¯ç ´ í2åæÒ"÷T2 6 ‚.G  + >öš= + )x + YV t$ + 2’°Þ¡¿õð²jçS w·8 + ‹½ Hk.%.O ê&” + ‘¼zhÙ¼= + M + ˆ;™[;à¯Q ÜJ# ­ÜŽøÔ + ÷­ò–½sÞm{„Z ›,B¢e¥)ÓÙòB ‡ S7`¸Hv ©z½a·E9$ýXŠ€ ³ [ <ªæ†C.@7Êñæp + †‹Q.PÙf:# + + é?ÿª¿‡tü`‹­31 R²Üý ŒUÐ1.E Á ZJ‰ßKhÆ& è° el¤ÈMû oþÂn>í— ©¯à¨ <X§šûå–as õ‰?̉% ¼ ´RwöÂâ-5 + ú¿ËJ,}q±ª±04‹`¿;Ÿ B_Í  Î^ŒGÁ TÓÑ " + ¬òÿÐM?5) Kâé Ä’y÷*$\ÈE¶U ŒŸ/j  ¦á-Wc¹n—KGeD»ºŠûôâè! + ÜMì 6sÕ}ã² ©™jÁ± ))•ð „5 + ˆG¨ù¼rs ÁM 麷֧ O^¤\ + ØLæÃW + ,»)'Õ] + q + ѸäÖšN ›pü¹Í¸ GÞ¡¹0 nÕ_ O + Û:ù<vB|H ‰›©ÔàUOC­ƒ>&e°Ø5KŒ –†”Ykó ò* + ÜТIÞeÙ d + 2{î´]½÷ÍçJ + f >!4ÆÚ_³ Ì²?áûX + fÔ 4sµ $c + º ¼”{ggŸ ¹¶&É VÊ¢Ï É‚z¡ó Ÿ1 + ‹ud«Ã`67 zK + ØÓqæ ­Â j7(O­g³8¥ | *ýþ ï"Ÿ„Áå×ôî ˜ž + ;+ çãôv“ å¯v†F9òÃÎËPÝãV$ u + ôÈá¡Î¬°ó‚ Ê Sÿ?ŒYU# + rË X¾9ù' »Úí’×J?!GøXµ 1_…™˜ v/r(#T ±&% + ÏËMA£ + p]yõ“d ¸ôW ~ GhÙÞ8ì¦[-Ì”oVÄ7AÅþá¥#ƒ§FÀö݆Ž%Ø l + + +ã ô ~W^ 9ÚHÐàH³ ëö`•ÊeÇx°·¾$çèÑ'F + Ib¢;= + Ï ¥iÈÕÛÚÍì« + OÒáý¸·cZÒ ýON/òéÛ ºK»îN0Y†m pé® ÁZ + Ý íH + @Cb ¸FîQUnídb“½c/hJ×çi + á®\®Z + ¬PÌ2B2IÛwL‹˜îESgö - + ÞvY + 'LiH™ó®ú›ð{ä X ÌšcÓ±eê´K±“|¯· + ƒÏý­¯ ¨Nj Å‹ À%_‘ÊÞ£ êÎ ž| + ßq + P rkÃ` + &ç•¥{˜N + ‘ èDð, + ¶Ê¿ cTJ + œ¿¹†O,Ûi pRµ ÇC + Ÿ¹ aÖ7ŠŒ7|%ß + !Y5¹Úš …s‚n]L¦  V°™þm6\~md¨u0 Äì¢ ’W°ÑŽŠ  Ž œ í·ìmR óN«ÅV@ + u›F¶øª B + W:™Eó^ Î. ˆ>„3 *®<©jŠåo + „ü ×£Æ`à ã¸øZÁæúw €Š8„ àã6 + EàBßÉÔµýÿa¶. + 0Åç? + / + MvBA ; · ˜;LmûMµÈ' +  + r»ïé6µDøÆ@²ìåù­ …Aj, + GÒ æÕR Ã¥5 r«Kñ¾ß T + ˆ=%½Ž‹QÆypê‘|r²¸ðÞ¤ 6oë »6— + ƒ‚|zR + 3ä0 + ±æÃ ÙÛ*! 'l§õ + £ù 4 Ú f³WÄDä_€Òãø:¯» ´ÂQ¿Ð v2 + a÷{ + $úëè Xü €ð8 @™ xw + Æ¡”ÚÝÿÎ’U @Åò †ZÞ +  ât + õ]xqhi#òÄfj éî]ÄD + x] ê´¾{£y).ÎC è8/àÝI© ªË+c 9‚}pÍÒ óM<(\@Ó¢ ÆÏÖž ñL°÷Îl´bò8 ƒÏG ã&” uk + ¿> ÔÌø}]* “ ƒ ÑÈ*—[ + O + ñ^ + +mŸ*X›˜–ºˆ5~ty“Ån/ À#dSÅltl # + \ « z + ÿ ZN»¼WÄæÓë™S¾cTn=©ðPgüËß + oÍüÔDÁ + Options for %s: + + %s: %d: warning: can't add declaration of `%s' into macro call + + %s: error reading input file `%s': %s + + %s: fatal error: aux info file corrupted at line %d + + %s: warning: too few parameter lists in declaration of `%s' + + ;; Combiner totals: %d attempts, %d substitutions (%d requiring new space), + ;; %d successes. + + Execution times (seconds) + + For bug reporting instructions, please see: + + Go ahead? (y or n) + Language specific options: + + Options starting with -g, -f, -m, -O, -W, or --param are automatically + passed on to the various sub-processes invoked by %s. In order to pass + other options on to these processes the -W options must be used. + + Processing symbol table #%d, offset = 0x%.8lx, kind = %s + + Target specific options: + + There are undocumented %s specific options as well. + + There are undocumented target specific options as well. + + Updating header and load commands. + + + ldd output with constructors/destructors. + + write_c_file - output name is %s, prefix is %s + in pointer to member conversion in pointer to member function conversion will be re-ordered to precede member initializations %-23.23s [undocumented] + (Use '-v --help' to display command line options of sub-processes) + --help Display this information + --help Display this information + --target-help Display target specific command line options + -B Add to the compiler's search paths + -D Define a with string '1' as its value + -D= Define a with as its value + -A () Assert the to + -A- () Disable the to + -U Undefine + -v Display the version number + -E Preprocess only; do not compile, assemble or link + -G Put global and static data smaller than + bytes into a special section (on some targets) + -H Print the name of header files as they are used + -C Do not discard comments + -dM Display a list of macro definitions active at end + -dD Preserve macro definitions in output + -dN As -dD except that only the names are preserved + -dI Include #include directives in the output + -M Generate make dependencies + -MM As -M, but ignore system header files + -MF Write dependency output to the given file + -MG Treat missing header file as generated files + -MP Generate phony targets for all headers + -MQ Add a MAKE-quoted target + -MT Add an unquoted target + -S Compile only; do not assemble or link + -V Run gcc version number , if installed + -W Enable extra warnings + -Wa, Pass comma-separated on to the assembler + -Wl, Pass comma-separated on to the linker + -Wlarger-than- Warn if an object is larger than bytes + -Wno-comment{s} Do not warn about comments + -Wtraditional Warn about features not present in traditional C + -Wno-traditional Do not warn about traditional C + -Wundef Warn if an undefined macro is used by #if + -Wno-undef Do not warn about testing undefined macros + -Wimport Warn about the use of the #import directive + -Wno-import Do not warn about the use of #import + -Werror Treat all warnings as errors + -Wno-error Do not treat warnings as errors + -Wsystem-headers Do not suppress warnings from system headers + -Wno-system-headers Suppress warnings from system headers + -Wall Enable all preprocessor warnings + -Wp, Pass comma-separated on to the preprocessor + -Wunused Enable unused warnings + -Xlinker Pass on to the linker + -a Enable block profiling + -aux-info Emit declaration info into + -ax Enable jump profiling + -b Run gcc for target , if installed + -c Compile and assemble, but do not link + -d[letters] Enable dumps from specific passes of the compiler + -dumpbase Base name to be used for dumps from specific passes + -dumpmachine Display the compiler's target processor + -dumpspecs Display all of the built in spec strings + -dumpversion Display the version of the compiler + -fcall-saved- Mark as being preserved across functions + -fcall-used- Mark as being corrupted by function calls + -fdiagnostics-show-location=[once | every-line] Indicates how often source location information should be emitted, as prefix, at the beginning of diagnostics when line-wrapping + -ffixed- Mark as being unavailable to the compiler + -finline-limit= Limits the size of inlined functions to + -fmessage-length= Limits diagnostics messages lengths to characters per line. 0 suppresses line-wrapping + -fpreprocessed Treat the input file as already preprocessed + -ftabstop= Distance between tab stops for column reporting + -P Do not generate #line directives + -$ Do not allow '$' in identifiers + -remap Remap file names when including files. + --version Display version information + -h or --help Display this information + -fsched-verbose= Set the verbosity level of the scheduler + -idirafter Add to the end of the system include path + -I Add to the end of the main include path + -I- Fine-grained include path control; see info docs + -nostdinc Do not search system include directories + (dirs specified with -isystem will still be used) + -nostdinc++ Do not search system include directories for C++ + -o Put output into + -lang-c++ Assume that the input sources are in C++ + -lang-objc Assume that the input sources are in ObjectiveC + -lang-objc++ Assume that the input sources are in ObjectiveC++ + -lang-asm Assume that the input sources are in assembler + -m%-23.23s [undocumented] + -o Place the output into + -o Place output into + -p Enable function profiling + -pass-exit-codes Exit with highest error code from a phase + -pedantic Issue all warnings demanded by strict ISO C + -pedantic-errors Issue -pedantic warnings as errors instead + -trigraphs Support ISO C trigraphs + -lang-c Assume that the input sources are in C + -lang-c89 Assume that the input sources are in C89 + -pedantic Issue warnings needed by strict compliance to ISO C + -pedantic-errors Like -pedantic except that errors are produced + -pipe Use pipes rather than intermediate files + -print-file-name= Display the full path to library + -print-libgcc-file-name Display the name of the compiler's companion library + -print-multi-directory Display the root directory for versions of libgcc + -print-multi-lib Display the mapping between command line options and + multiple library search directories + -print-prog-name= Display the full path to compiler component + -print-search-dirs Display the directories in the compiler's search path + -quiet Do not display functions compiled or elapsed time + -save-temps Do not delete intermediate files + -std= Assume that the input sources are for + -std= Specify the conformance standard; one of: + gnu89, gnu99, c89, c99, iso9899:1990, + iso9899:199409, iso9899:1999 + -+ Allow parsing of C++ style features + -w Inhibit warning messages + -Wtrigraphs Warn if trigraphs are encountered + -Wno-trigraphs Do not warn about trigraphs + -Wcomment{s} Warn if one comment starts inside another + -time Time the execution of each subprocess + -v Display the programs invoked by the compiler + -version Display the compiler's version + -w Suppress warnings + They exist, but they are not documented. + because the following virtual functions are abstract: enters catch block enters try block from here in thrown expression will be re-ordered to match declaration order will be re-ordered to match inheritance order %s TOTAL :"%.*s" redefined"%s" after #line is not a positive integer"%s" cannot be used as a macro name"%s" cannot be used as a macro name as it is an operator in C++"%s" is not a valid filename"%s" is not a valid option to the preprocessor"%s" is not defined"%s" may not appear in macro parameter list"%s" re-asserted"%s" redefined"/*" within comment"Small register classes" kludge"defined" cannot be used as a macro name# %s %.2f %.2f + # operator should be followed by a macro argument name#%s expects "FILENAME" or #%s is a GCC extension#%s not within a conditional#-lines for entering and leaving files don't match#elif after #else#elif not within a conditional#elif without #if#else after #else#else not within a conditional#else or #elif after #else#else without #if#endif without #if#error%.*s#import is obsolete, use an #ifndef wrapper in the header file#include "..." search starts here: + #include <...> search starts here: + #include expects "fname" or #include nested too deeply#include_next in primary source file#pragma GHS endXXX does not match previous startXXX#pragma GHS endXXXX found without previous startXXX#pragma implementation for %s appears after file is included#pragma once in main file#pragma once is obsolete#pragma pack (pop) encountered without matching #pragma pack (push, )#pragma pack(pop, %s) encountered without matching #pragma pack(push, %s, )#pragma system_header ignored outside include file#warning%.*s%%S computed all 0's mask%%S computed all 1's mask%6.2f%% of %d branches executed in file %s + %6.2f%% of %d branches executed in function %s + %6.2f%% of %d branches taken at least once in file %s + %6.2f%% of %d branches taken at least once in function %s + %6.2f%% of %d calls executed in file %s + %6.2f%% of %d calls executed in function %s + %6.2f%% of %d source lines executed in file %s + %6.2f%% of %d source lines executed in function %s + %R not followed by %B/C/D/E%d constructor(s) found + %d destructor(s) found + %d frame table(s) found + %s%s + %s %s `%s' does not fully implement the `%s' protocol%s and profiling conflict: disabling %s%s as `float' rather than `double' due to prototype%s as complex rather than floating due to prototype%s as complex rather than integer due to prototype%s as floating rather than complex due to prototype%s as floating rather than integer due to prototype%s as integer rather than complex due to prototype%s as integer rather than floating due to prototype%s as signed due to prototype%s as unsigned due to prototype%s at end of input%s before "%s"%s before %s'%c'%s before %s'\x%x'%s before '%s' token%s before `%c'%s before `%s'%s before `%s' token%s before `\%o'%s before numeric constant%s before string constant%s causes a section type conflict%s defined inside parms%s disabled, use normal debugging flags%s discards qualifiers from pointer target type%s does not support %%n$ operand number formats%s does not support %s%s does not support %s with the `%%%c' %s format%s does not support the `%%%c' %s format%s does not support the `%%%s%c' %s format%s does not support the `%s' %s length modifier%s format, %s arg (arg %d)%s from incompatible pointer type%s function, region %d, offset = %ld (0x%.8lx) + %s has no %s%s has no member named `%s'%s ignored with %s and `%%%c' %s format%s ignored with %s in %s format%s in preprocessing directive%s is a block device%s is not supported by this configuration%s is not type %s (arg %d)%s is shorter than expected%s is too large%s makes integer from pointer without a cast%s makes pointer from integer without a cast%s makes qualified function pointer from unqualified%s no longer supported -- try -fno-vxt -ff90%s no longer supported -- try -fvxt%s of read-only location%s of read-only member `%s'%s of read-only variable `%s'%s qualifier ignored on asm%s returned %d exit status%s rotate count >= width of type%s rotate count is negative%s terminated with signal %d [%s]%s%s used with `%%%c' %s format%s with different width due to prototype%s%s%s version %s (%s) + %s compiled by GNU C version %s. + %s%s%s version %s (%s) compiled by CC. + %s-%s is an empty range%s. + %s%s: %d: `%s' used but missing from SYSCALLS + %s: %d: warning: `%s' excluded by preprocessing + %s: %d: warning: definition of %s not converted + %s: %d: warning: found `%s' but expected `%s' + %s: %d: warning: no extern definition for `%s' + %s: %d: warning: source too confusing + %s: %d: warning: varargs function declaration not converted + %s: %s%s: %s compiler not installed on this system%s: %s exited with status %d + %s: %s: %s: %s: can't get status: %s + %s: In instantiation of `%s': + %s: NaN - producing operation%s: Not a directory%s: `%s' not converted + %s: argument domain error%s: can't change mode of file `%s': %s + %s: can't create/open clean file `%s': %s + %s: can't create/open output file `%s': %s + %s: can't delete aux info file `%s': %s + %s: can't delete file `%s': %s + %s: can't get status for file `%s': %s + %s: can't get status of aux info file `%s': %s + %s: can't link file `%s' to `%s': %s + %s: can't open aux info file `%s' for reading: %s + %s: can't open file `%s' for reading: %s + %s: can't read aux info file `%s': %s + %s: cannot get working directory: %s + %s: cannot open as COFF file%s: compiling `%s' + %s: conflict list for '%s' follows: + %s: conflicting extern definitions of '%s' + %s: converting file `%s' + %s: declaration of function `%s' not converted + %s: declarations of '%s' will not be converted + %s: definition of function `%s' not converted + %s: error closing aux info file `%s': %s + %s: error reading aux info file `%s': %s + %s: error writing file `%s': %s + %s: found definition of `%s' at %s(%d) + %s: function definition not converted + %s: function singularity%s: global declarations for file `%s' not inserted + %s: input file names must have .c suffixes: %s + %s: internal abort + %s: invalid file name: %s + %s: linker input file unused because linking not done%s: local declaration for function `%s' not inserted + %s: multiple static defs of `%s' in file `%s' + %s: not a COFF file%s: overflow range error%s: partial loss of precision%s: subprocess got fatal signal %d + %s: total loss of precision%s: underflow range error%s: usage '%s [ -VqfnkN ] [ -i ] [ filename ... ]' + %s: usage '%s [ -VqfnkNlgC ] [ -B ] [ filename ... ]' + %s: wait: %s + %s: warning: %s: warning: can't rename file `%s' to `%s': %s + %s: warning: file `%s' already saved in `%s' + %s: warning: missing SYSCALLS file `%s' + %s: warning: no read access for file `%s' + %s: warning: no static definition for `%s' in file `%s' + %s: warning: no write access for dir containing `%s' + %s: warning: no write access for file `%s' + %s: warning: too many parameter lists in declaration of `%s' + %s: warning: using formals list from %s(%d) for function `%s' + %s: warnings being treated as errors + %s: would convert file `%s' + %s:%d: instantiated from `%s' + %s:%d: instantiated from here + %s:%d: confused by earlier errors, bailing out + %s:%d: declaration of function `%s' takes different forms + %s:%d: warning: '##' cannot appear at either end of a macro expansion'#' is not followed by a macro parameter'$' character(s) in identifier'(' expected')' expected')' or term expected'*' expected':' expected';' expected'Ll' and 'lL' are not valid integer suffixes'[' expected']' expected']' expected, invalid type expression'class' expected'class' or 'this' expected'lul' is not a valid integer suffix'{' expected("%s" is an alternative token for "%s" in C++)((anonymous))(Each undeclared identifier is reported only once(Each undeclared identifier is reported only once for each function it appears in.)(an out of class initialization is required)(enclose actions of previous case statements requiring destructors in their own scope.)(near initialization for `%s')(so you should pass `%s' not `%s' to `va_arg')(static %s for %s)(this will be reported only once per input file), + from %s:%d, + from %s:%u--driver no longer supported-E required when input is from standard input-G and -membedded-pic are incompatible-G is incompatible with PIC code which is the default-I- specified twice-Wformat-extra-args ignored without -Wformat-Wformat-nonliteral ignored without -Wformat-Wformat-security ignored without -Wformat-Wformat-y2k ignored without -Wformat-Wmissing-format-attribute ignored without -Wformat-Wno-strict-prototypes is not supported in C++-Wuninitialized is not supported without -O-f%s ignored for 68HC11/68HC12 (not supported)-f%s ignored for target (all code is position independent)-f%s is no longer supported-f%sleading-underscore not supported on this target machine-fPIC is not currently supported on the 68000 or 68010 + -fPIC is not valid with -mcoff-fPIC not valid with -mcoff-fdata-sections not supported on AIX-ffunction-sections disabled on AIX when debugging-fhandle-exceptions has been renamed to -fexceptions (and is now on by default)-fjni and -femit-class-file are incompatible-fjni and -femit-class-files are incompatible-fname-mangling-version is no longer supported-fpic and -mapcs-reent are incompatible-fpic is not valid with -mcoff-fpic not valid with -mcoff-frepo must be used with -c-g is only supported when using GAS on this processor,-g with -mno-apcs-frame may not give sensible debugging-mabi=%s does not support -mips%d-malign-functions=%d is not between 1 and %d-malign-jumps=%d is not between 1 and %d-malign-loops=%d is not between 0 and %d-malign-loops=%d is not between 1 and %d-mapcs-26 and -mapcs-32 may not be used together-mapcs-stack-check incompatible with -mno-apcs-frame-mbig-endian and -mlittle-endian may not be used together-mbranch-cost=%d is not between 0 and 5-mbsd and -mxopen incompatible-mbsd and -pedantic incompatible-mcall-aixdesc must be big endian-mcmodel= is not supported on 32 bit systems-membedded-pic and -mabicalls are incompatible-mentry is only meaningful with -mips-16-mips%d does not support 64 bit fp registers-mips%d does not support 64 bit gp registers-mips%d not supported-mlong-double-64 not allowed with -m64-mmultiple is not supported on little endian systems-mpic-register= is useless without -fpic-mregparm=%d is not between 0 and %d-mshort-data-%s and PIC are incompatible-mshort-data-%s is too large -msoft-float and -mhard_float may not be used together-mstring is not supported on little endian systems-msystem-v and -mthreads are incompatible-msystem-v and -p are incompatible-mtrap-large-shift and -mhandle-large-shift are incompatible-mxopen and -pedantic incompatible-p option not supported: use -pg instead-param option missing argument-pedantic and -traditional are mutually exclusive-pg and -fomit-frame-pointer are incompatible-pipe not supported-shared not valid with -mcoff-static not valid with -mcoff-symbolic not valid with -mcoff-traditional and -ansi are mutually exclusive-traditional is not supported in C++-trigraphs and -traditional are mutually exclusive.da file contents exhausted too early + .da file contents not exhausted + 32381 fpu: + : `%s' JDK1.1(TM) feature;; Combiner statistics: %d attempts, %d substitutions (%d requiring new space), + ;; %d successes. + + ;; Processing block from %d to %d, %d sets. + APCS reentrant code not supported. IgnoredASSIGN to variable that is too smallASSIGNed FORMAT specifier is too smallASSIGNed GOTO target variable is too smallAdd a directory for INCLUDE searchingAdd directory to class pathAdd extra commentry to assembler outputAlign all labelsAlign all loops to 32 byte boundaryAlign code to 8 byte boundaryAlign destination of the string operationsAlign doubles on word boundaryAlign labels which are only reached by jumpingAlign some doubles on dword boundaryAlign the start of functionsAlign the start of loopsAlign to >word boundariesAllow $ in symbol namesAllow INTEGER and LOGICAL interchangeabilityAllow REAL(Z) and AIMAG(Z) given DOUBLE COMPLEX ZAllow RTL generation to emit invalid 3 operand insnsAllow different types as args of ? operatorAllow function addresses to be held in registersAllow ordinary copying of ASSIGN'ed varsAllow speculative motion of more loadsAllow speculative motion of non-loadsAllow speculative motion of some loadsAllow the use of $ inside identifiersAllow unsigned interation counts for RPTB/DBAlternate calling conventionAlternative calling conventionAlways check for non gcj generated classes archivesAlways pass floating-point arguments in memoryAssume GASAssume all doubles are alignedAssume arguments do not alias each other or globalsAssume arguments may alias globals but not each otherAssume big endian bytes, little endian wordsAssume int to be 8 bit integerAssume native functions are implemented using JNIAssume normal C execution environmentAssume possible double misalignmentAssume small address spaceAssume strict aliasing rules applyAssume target CPU is configured as big endianAssume target CPU is configured as little endianAssume that pointers may be aliasedAssume that pointers not aliasedAssume that standard libraries & main might not existAssume that unaligned accesses are handled by the systemAssuming that all execution counts are zero. + At top level:Attempt to fill delay slots of branch instructionsAttempt to keep stack aligned to this power of 2Attempt to support traditional K&R style CAuto pre/post decrement increment allowedAuto pre/post decrement increment not allowedBackslashes in character/hollerith constants not special (C-style)Big memory modelBranches are this expensive (1-5, arbitrary units)Bypass data cache for volatile mem refsC++ style comments are not allowed in ISO C89Can't specify array dimension in a declarationCan't use '$' as a separator for inner classesChange only the low 8 bits of the stack pointerChange the branch costs within the compilerChange the stack pointer without disabling interruptsChange the threshold for conversion to conditional executionChange when template instances are emittedCheck for syntax errors, then stopCheck the return value of newChoose class whose main method should be usedClass or interface declaration expectedCode size: small, medium or largeCompile as if program written in lowercaseCompile as if program written in uppercaseCompile for 32-bit pointersCompile for 64-bit pointersCompile for a 68HC11Compile for a 68HC12Compile for the Thumb not the ARMCompile for the v850 processorCompile for v8plus ABICompile just for ISO C89Compile with 16-bit integer modeCompile with 32-bit integer modeConfigured with: %s + Consider access to byte sized memory slowConsider all mem refs through pointers as volatileConsider all mem refs to global data to be volatileConsider all mem refs to static data to be volatileConstructor invocation must be first thing in a constructorControl the IEEE trap modeControl the generated fp rounding modeControl the precision given to fp exceptionsConvert floating point constant to single precision constantCopy memory address constants into regs before usingCopy memory operands into registers before usingCould not open basic block file %s. + Could not open data file %s. + Could not open output file %s. + Could not open program flow graph file %s. + Could not open source file %s. + Create GUI applicationCreate console applicationCreate data files needed by gcovCreating %s. + Debug argument support in compilerDebug memory address support in compilerDebug stack support in compilerDefer popping functions args from stack until laterDelete MIL-STD 1753 intrinsicsDelete libU77 intrinsicsDelete libU77 intrinsics with bad interfacesDelete non-FORTRAN-77 intrinsics F90 supportsDelete non-FORTRAN-77 intrinsics VXT FORTRAN supportsDelete non-FORTRAN-77 intrinsics f2c supportsDelete non-FORTRAN-77 intrinsics g77 supportsDelete useless null pointer checksDetermine language standardDirectory where class files should be writtenDisable Dwarf 2 line debug info via GNU asDisable MIL-STD 1753 intrinsicsDisable MPY||ADD and MPY||SUB instructionsDisable Transmeta picoJava extensionsDisable automatic array bounds checkingDisable debuggingDisable fatal diagnostics about inter-procedural problemsDisable libU77 intrinsicsDisable libU77 intrinsics with bad interfacesDisable new features under developmentDisable non-FORTRAN 77 intrinsics F90 supportsDisable non-FORTRAN-77 intrinsics F90 supportsDisable non-FORTRAN-77 intrinsics VXT FORTRAN supportsDisable non-FORTRAN-77 intrinsics f2c supportsDisable optional diagnosticsDisable parallel instructionsDisable reorganization passDisable the appending of underscores to externalsDisable use of DB instructionDisable use of RTPB instructionDisable use of RTPS instructionDisable use of conditional move instructionsDisable use of sdata/scommon/sbssDisable warnings about inter-procedural problemsDisallow all ugly featuresDisallow unsigned iteration counts for RPTB/DBDiscard unused virtual functionsDisplay compile time statisticsDisplay statistics accumulated during compilationDo not align code to 8 byte boundaryDo not align destination of the string operationsDo not allocate BK registerDo not arbitary sized immediates in bit operationsDo not assume GASDo not compile for v8plus ABIDo not emit complex integer constants to read-only memoryDo not emit stack checking codeDo not enable linker relaxationDo not generate .size directivesDo not generate H8/300H codeDo not generate H8/S codeDo not generate H8/S2600 codeDo not generate byte writesDo not generate char instructionsDo not generate code to check exception specificationsDo not generate code which uses the FPUDo not generate load/store multiple instructionsDo not generate load/store with update instructionsDo not generate multm instructionsDo not generate run time type descriptor informationDo not generate sin, cos, sqrt for FPUDo not generate string instructions for block movesDo not generate tablejump insnsDo not inline all known string operationsDo not inline member functions by defaultDo not layout types like Intel's v1.3 gccDo not load the PIC register in function prologuesDo not move instructions into a function's prologueDo not obey access control semanticsDo not optimize tail call instructions in assembler or linkerDo not pass -assert pure-text to linkerDo not perform tail call optimizationDo not permit unaligned accessesDo not promote floats to double if using -traditionalDo not return values of functions in FPU registersDo not store floats in registersDo not store locals in arg registersDo not suppress warnings from system headersDo not use ABI reserved registersDo not use IEEE math for fp comparisonsDo not use MPYI instruction for C3xDo not use POWER instruction setDo not use POWER2 instruction setDo not use PowerPC instruction setDo not use VAX fpDo not use alternate leaf function entriesDo not use complex addressing modesDo not use flat register window modelDo not use fp registersDo not use hardware floating pointDo not use hardware fpDo not use hardware quad fp instructionsDo not use multiply-accumulate fp instructionsDo not use push instructions to save outgoing argumentsDo not use register sbDo not use registers for argument passingDo not use stack biasDo not use structs on stronger alignment for double-word copiesDo not use the divide instructionDo not utilize Visual Instruction SetDo not warn about using 'long long' when -pedanticDo not warn if inherited methods are unimplementedDo not work around hardware multiply bugDo not work around storem hardware bugDo symbol renaming for BSDDo symbol renaming for X/OPENDo the full regmove optimization passDo the register renaming optimization passDon't always pass floating-point arguments in memoryDon't announce deprecation of compiler featuresDon't assume that unaligned accesses are handled by the systemDon't do symbol renamingDon't emit stop bits before and after volatile extended asmsDon't force constants into registersDon't generate fused multiply/add instructionsDon't optimize block movesDon't optimize lui/addiu address loadsDon't output compiler statisticsDon't pedwarn about uses of Microsoft extensionsDon't place floating point constants in TOCDon't place symbol+offset constants in TOCDon't push arg count, depend on symbol tableDon't put uninitialized constants in ROMDon't save DP across ISR in small memory modelDon't schedule the start and end of the procedureDon't set Windows definesDon't trap on integer divide by zeroDon't trap on integer divide overflowDon't use GP relative sdata/sbss sectionsDon't use Irix PICDon't use MIPS16 instructionsDon't use OSF PICDon't use PowerPC General Purpose group optional instructionsDon't use PowerPC Graphics group optional instructionsDon't use PowerPC-64 instruction setDon't use ROM instead of RAMDon't use data cache for volatile mem refsDon't use embedded PICDon't use hardware fpDon't use indirect callsDon't use mips-tfile asm postpassDon't use multiply accumulateDon't use single (32-bit) FP onlyDon't use symbolic register namesDon't warn about strftime formats yielding 2 digit yearsDon't warn about too many arguments to format functionsDon't warn when all ctors/dtors are privateDon't warn when non-templatized friend functions are declared within a templateDon't warn when type converting pointers to member functionsDon't work around early 4300 hardware bugDowngrade conformance errors to warningsDummy array dimensioned to (1) is assumed-sizeDump decls to a .decl fileDump the entire translation unit to a fileERROR: too many basic blocks in .bb file %s + Emit ELF object codeEmit IEEE-conformant code, with inexact exceptionsEmit IEEE-conformant code, without inexact exceptionsEmit ROSE object codeEmit call graph informationEmit code compatible with TI toolsEmit code for Itanium (TM) processor B stepEmit code for the byte/word ISA extensionEmit code for the counting ISA extensionEmit code for the fp move and sqrt ISA extensionEmit code for the motion video ISA extensionEmit code to use GAS extensionsEmit common-like symbols as weak symbolsEmit cross referencing informationEmit half-PIC codeEmit identifying info in .s fileEmit special debugging information for COMMON and EQUIVALENCE (disabled)Emit stack checking codeEmit static const variables even if they are not usedEmit stop bits before and after volatile extended asmsEnable Dwarf 2 line debug info via GNU asEnable MPY||ADD and MPY||SUB instructionsEnable SSA optimizationsEnable Transmeta picoJava extensionsEnable automatic template instantiationEnable backend debuggingEnable compatibility with iC960 v2.0Enable compatibility with iC960 v3.0Enable compatibility with ic960 assemblerEnable debug outputEnable debuggingEnable exception handlingEnable linker relaxationEnable linker relaxingEnable most warning messagesEnable new features under developmentEnable parallel instructionsEnable saving registers around function callsEnable scheduling across basic blocksEnable stack probingEnable support for huge objectsEnable use of DB instructionEnable use of RTPB instructionEnable use of RTPS instructionEnable use of conditional move instructionsEnable use of sdata/scommon/sbssEnables an rtl peephole pass run before sched2Enables guessing of branch probabilitiesEnd of search list. + Export functions even if they can be inlinedExternal symbols have a leading underscoreField expectedForce RTL generation to emit valid 3 operand insnsForce all loop invariant computations out of loopsForce constants into registers to improve hoistingForce functions to be aligned to a 2 byte boundaryForce functions to be aligned to a 4 byte boundaryFortran-specific form of -fbounds-checkFunction starts are aligned to this power of 2GCSE disabled: %d > 1000 basic blocks and %d >= 20 edges/basic blockGCSE disabled: %d basic blocks and %d registersGNU C does not support -C without using -EGNU CPP version %s (cpplib)Generate 29000 codeGenerate 29050 codeGenerate APCS conformant stack framesGenerate C header of platform specific featuresGenerate CA codeGenerate CF codeGenerate COFF format debug infoGenerate DWARF-1 format debug infoGenerate DWARF-2 debug infoGenerate ELF outputGenerate H8/300H codeGenerate H8/S codeGenerate H8/S2600 codeGenerate JA codeGenerate JD codeGenerate JF codeGenerate KA codeGenerate KB codeGenerate MC codeGenerate SA codeGenerate SB codeGenerate STABS format debug infoGenerate XCOFF format debug infoGenerate a call to abort if a noreturn function returnsGenerate big endian codeGenerate big endian dataGenerate call insns as indirect calls, if necessaryGenerate char instructionsGenerate code an embedded assembler can handleGenerate code assuming DW bit is not setGenerate code assuming DW bit is setGenerate code for C30 CPUGenerate code for C31 CPUGenerate code for C32 CPUGenerate code for C33 CPUGenerate code for C40 CPUGenerate code for C44 CPUGenerate code for GNU asGenerate code for GNU ldGenerate code for GNU runtime environmentGenerate code for Intel asGenerate code for Intel ldGenerate code for NeXT runtime environmentGenerate code for a DLLGenerate code for an 11/10Generate code for an 11/40Generate code for an 11/45Generate code for big endianGenerate code for c1Generate code for c2Generate code for c32Generate code for c34Generate code for funcs even if they are fully inlinedGenerate code for given CPUGenerate code for high memoryGenerate code for little endianGenerate code for low memoryGenerate code for the C300Generate code for the C400Generate code for the M*Core M340Generate code the unix assembler can handleGenerate code to check subscript and substring boundsGenerate code using byte writesGenerate code which uses the FPUGenerate code without GP regGenerate debugging info in default extended formatGenerate debugging info in default formatGenerate extended DWARF-1 format debug infoGenerate extended STABS format debug infoGenerate extended XCOFF format debug infoGenerate external legend informationGenerate fused multiply/add instructionsGenerate inline division, optimize for latencyGenerate inline division, optimize for throughputGenerate little endian codeGenerate little endian dataGenerate load/store multiple instructionsGenerate load/store with update instructionsGenerate position independent code, if possibleGenerate re-entrant, PIC codeGenerate self-relocatable codeGenerate sin, cos, sqrt for FPUGenerate string instructions for block movesHave front end emulate COMPLEX arithmetic to avoid bugsHide MIL-STD 1753 intrinsicsHide libU77 intrinsicsHide libU77 intrinsics with bad interfacesHide non-FORTRAN 77 intrinsics F90 supportsHide non-FORTRAN-77 intrinsics F90 supportsHide non-FORTRAN-77 intrinsics VXT FORTRAN supportsHide non-FORTRAN-77 intrinsics f2c supportsHollerith and typeless constants not passed as argumentsI/O error on outputICE: emit_insn used where emit_jump_insn needed: + ISO C does not allow extra `;' outside of a functionISO C does not permit named variadic macrosISO C does not permit use of `varargs.h'ISO C does not support `++' and `--' on complex typesISO C does not support `~' for complex conjugationISO C does not support complex integer typesISO C does not support plain `complex' meaning `double complex'ISO C doesn't support unnamed structs/unionsISO C forbids %s between function pointer and `void *'ISO C forbids `goto *expr;'ISO C forbids an empty source fileISO C forbids braced-groups within expressionsISO C forbids casting nonscalar to the same typeISO C forbids casts to union typeISO C forbids comparison of `void *' with function pointerISO C forbids conditional expr between `void *' and function pointerISO C forbids conditional expr with only one void sideISO C forbids const or volatile function typesISO C forbids data definition with no type or storage classISO C forbids empty initializer bracesISO C forbids forward parameter declarationsISO C forbids forward references to `enum' typesISO C forbids imaginary numeric constantsISO C forbids label declarationsISO C forbids member declarations with no membersISO C forbids nested functionsISO C forbids omitting the middle term of a ?: expressionISO C forbids ordered comparisons of pointers to functionsISO C forbids qualified function typesISO C forbids qualified void function return typeISO C forbids range expressions in switch statementsISO C forbids specifying range of elements to initializeISO C forbids subscripting `register' arrayISO C forbids the address of a cast expressionISO C forbids use of cast expressions as lvaluesISO C forbids use of compound expressions as lvaluesISO C forbids use of conditional expressions as lvaluesISO C forbids zero-size array `%s'ISO C prohibits argument conversion to union typeISO C requires a named argument before `...'ISO C requires whitespace after the macro nameISO C restricts enumerator values to range of `int'ISO C++ does not permit "%s" in #ifISO C++ does not permit named return valuesISO C++ does not support `long long'ISO C++ forbids %s between pointer of type `void *' and pointer-to-functionISO C++ forbids %sing an enumISO C++ forbids aggregate initializer to newISO C++ forbids an empty condition for `%s'ISO C++ forbids applying `sizeof' to a function typeISO C++ forbids applying `sizeof' to a member functionISO C++ forbids applying `sizeof' to an expression of function typeISO C++ forbids applying `sizeof' to type `void' which is an incomplete typeISO C++ forbids array dimensions with parenthesized type in newISO C++ forbids assignment of arraysISO C++ forbids braced-groups within expressionsISO C++ forbids calling `::main' from within programISO C++ forbids cast to non-reference type used as lvalueISO C++ forbids casting between pointer-to-function and pointer-to-objectISO C++ forbids comparison between pointer and integerISO C++ forbids compound literalsISO C++ forbids compound statements inside for initializationsISO C++ forbids computed gotosISO C++ forbids defining types within %sISO C++ forbids initialization of new expression with `='ISO C++ forbids label declarationsISO C++ forbids omitting the middle term of a ?: expressionISO C++ forbids range expressions in switch statementsISO C++ forbids subscripting non-lvalue arrayISO C++ forbids taking address of function `::main'ISO C++ forbids taking the address of a cast to a non-lvalue expressionISO C++ forbids using a pointer to member function in pointer arithmeticISO C++ forbids using a pointer-to-function in pointer arithmeticISO C++ forbids using pointer of type `void *' in pointer arithmeticISO C++ forbids using pointer of type `void *' in subtractionISO C++ forbids using pointer to a function in subtractionISO C++ forbids using pointer to a member in pointer arithmeticISO C++ forbids using pointer to a member in subtractionISO C++ forbids using pointer to a method in subtractionISO C++ prohibits anonymous structsISO C89 does not support `long long'ISO C89 does not support complex typesISO C89 does not support flexible array membersISO C89 forbids array `%s' whose size can't be evaluatedISO C89 forbids compound literalsISO C89 forbids long long integer constantsISO C89 forbids mixed declarations and codeISO C89 forbids specifying subobject to initializeISO C89 forbids subscripting non-lvalue arrayISO C89 forbids variable-size array `%s'ISO C99 requires rest arguments to be usedIdentifier expectedIgnore dllimport attribute for functionsIgnore dllimport for functionsImplement vtables using thunksIn %s `%s':In %s: overlapped variable and exception ranges at %dIn file included from %s:%dIn file included from %s:%uIn function `%s':Indicate the number of soft registers availableInitialization via DATA and PARAMETER is type-compatibleInitialize local vars and arrays to zeroInline all known string operationsInline constants if it can be done in 2 insns or lessInsert arc based program profiling codeInsert stack checking code into the programInstrument function entry/exit with profiling callsIntegrate simple functions into their callersInternal compiler error in %s, at %s:%dInternal compiler error: Error reporting routines re-entered. + Internal error: %s (program %s) + Please submit a full bug report. + See %s for instructions.Internal gcov abort. + Internally convert most source to uppercaseInternally preserve source caseIntrinsics in uppercaseIntrinsics letters in arbitrary casesIntrinsics spelled as e.g. SqRtInvalid control expressionInvalid declarationInvalid expression statementInvalid init statementInvalid interface typeInvalid method declaration, method name requiredInvalid method declaration, return type requiredInvalid reference typeInvalid type expressionInvalid update expressionJump targets are aligned to this power of 2Junk after end of expression.Just generate unwind tables for exception handlingL%d cache latency unknown for %sLanguage keyword letters in arbitrary casesLanguage keywords in uppercaseLanguage keywords spelled as e.g. IOStatLayout types like Intel's v1.3 gccLink programs/data to be in external memory by defaultLink programs/data to be in onchip memory by defaultLoop code aligned to this power of 2MCU `%s' not supportedMIPS ECOFF format does not allow changing filenames within functions with #lineMake 'char' be signed by defaultMake 'char' be unsigned by defaultMake integers 32 bits wideMake prefix-radix non-decimal constants be typelessMake string literals `char[]' instead of `const char[]'Mark data as shared rather than privateMark strings as 'const char *'Maximum amount for a single stack increment operationMissing class nameMissing class type termMissing formal parameter termMissing identifierMissing interface nameMissing nameMissing or invalid constant expressionMissing super class nameMissing termMissing term and ')' expectedMissing term and ']' expectedMissing term or ')'Missing term or ')' expectedMissing variable initializerMultiple include guards may be useful for: + NOTE_INSN_BASIC_BLOCK %d in the middle of basic block %dNOTE_INSN_BASIC_BLOCK is missing for block %dNever append a second underscore to externalsNo "Small register classes" kludgeNo branches in file %s + No branches in function %s + No calls in file %s + No calls in function %s + No case for %sNo default crt0.oNo executable code associated with file %s. + No executable source lines in file %s + No executable source lines in function %s + Number of registers used to pass integer argumentsOmit the frame pointer in leaf functionsOnly constructors can invoke constructorsOnly emit explicit instatiations of inline templatesOnly emit explicit template instatiationsOnly issue one instruction per cycleOnly preserve 32 bits of FP reg across callOptimize block movesOptimize for 32032Optimize for 32332 cpuOptimize for 32532 cpuOptimize for 3900Optimize for 4650Optimize for Cypress processorsOptimize for F930 processorsOptimize for F934 processorsOptimize for SparcLite processorsOptimize for SuperSparc processorsOptimize lui/addiu address loadsOptimize sibling and tail recursive callsOptimize tail call instructions in assembler and linkerOptions: + Output compiler statisticsOutput instruction sizes to the asm fileOverride the underlying type for wchar_t to `unsigned short'PIC code generation is not compatible with fast indirect calls + PIC code generation is not supported in the portable runtime model + PRINT_OPERAND null pointerPRINT_OPERAND_ADDRESS, null pointerPack structure members together without holesPass -assert pure-text to linkerPass FP arguments in FP registersPass all arguments on stackPass arguments in registersPass arguments on the stackPass some arguments in registersPay attention to the 'inline' keywordPerform loop unrolling for all loopsPerform loop unrolling when iteration count is knownPerform tail call optimizationPerform the global common subexpression eliminationPermit unaligned accessesPlace arg count in a nop instruction (faster than push)Place floating point constants in TOCPlace symbol+offset constants in TOCPlace variable addresses in the regular TOCPlease keep this in mind before you report bugs. g77 shouldPlease submit a full bug report, + with preprocessed source if appropriate. + See %s for instructions. + Pointers are 32-bitPointers are 64-bitPrefer branches over conditional executionPrefer word accesses over byte accessesPreserve all 40 bits of FP reg across callPreserve all spelling (case) used in programPretend that host and target use the same FP formatPrint g77-specific compiler version info, run internal testsPrint internal debugging-related infoPrint names of program units as they are compiledProcess #ident directivesProcessing spec %c%s%c, which is '%s' + Profiling uses mcountProgram does not use Unix-f77 dialectal featuresProgram is written in Fortran-90-ish dialectProgram is written in Fortran-90-ish free formProgram is written in VXT (Digital-like) FORTRANProgram is written in typical FORTRAN 66 dialectProgram is written in typical Unix f77 dialectProgram written in lowercaseProgram written in strict mixed-caseProgram written in uppercaseProhibit PC relative function callsPut everything in the regular TOCPut uninitialized constants in ROM (needs -membedded-data)RETURN_ADDRESS_OFFSET not supportedRTL check: access of elt %d of `%s' with last elt %d in %s, at %s:%dRTL check: access of elt %d of vector with last elt %d in %s, at %s:%dRTL check: expected code `%s' or `%s', have `%s' in %s, at %s:%dRTL check: expected code `%s', have `%s' in %s, at %s:%dRTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s) in %s, at %s:%dRTL check: expected elt %d type '%c', have '%c' (rtx %s) in %s, at %s:%dReading specs from %s + Reduce size of object filesRegister sb is zero. Use for absolute addressingReorder basic blocks to improve code placementReplace add,compare,branch with branch on count regReport on permanent memory allocation at end of runReport time taken by each compiler pass at end of runRequest IEEE-conformant math library routines (OSF/1)Reschedule instructions after register allocationReschedule instructions before register allocationRetain legend informationRetain standard MXDB informationReturn 'short' aggregates in memory, not registersReturn 'short' aggregates in registersReturn floating point results in ac0Return floating point results in memoryReturn values of functions in FPU registersReuse r30 on a per function basisSame as: -mep -mprolog-functionSave DP across ISR in small memory modelSchedule code for given CPUSchedule given CPUScope of for-init-statement vars extends outsideSelect CPU to generate code forSet Windows definesSet class pathSet class path and suppress system pathSet errno after built-in math functionsSet maximum alignment to 4Set maximum alignment to 8Set the PPC_EMB bit in the ELF flags headerSet the max size of data eligible for the SDA areaSet the max size of data eligible for the TDA areaSet the max size of data eligible for the ZDA areaSet the maximum line lengthSetting spec %s to '%s' + + Small data area: none, sdata, useSmall memory modelSpecify CPU for scheduling purposesSpecify maximum number of iterations for RPTSSpecify maximum template instantiation depthSpecify that arguments may alias each other & globalsSpecify the MCU nameSpecify the initial stack addressSpecify the minimum bit alignment of structuresSpecify the name of the class for constant stringsSpecify the name of the target CPUSpecify the name of the target architectureSpecify the register allocation orderSpecify the register to be used for PIC addressingSpecify the version of the floating point emulatorStore function names in object codeStore locals in argument registersStore strings in writable data sectionStrength reduce all loop general induction variablesSupport Green Hills ABISupport calls between Thumb and ARM instruction setsSupport message passing with the Parallel EnvironmentSupport synchronous non-call exceptionsSuppress output of instruction numbers and line number notes in debugging dumpsSwitches: + -include Include the contents of before other files + -imacros Accept definition of macros in + -iprefix Specify as a prefix for next two options + -iwithprefix Add to the end of the system include path + -iwithprefixbefore Add to the end of the main include path + -isystem Add to the start of the system include path + Symbol names in lowercaseSymbol names in uppercaseSymbol names spelled in mixed caseSymbols have a leading underscoreTake at least one trip through each iterative DO loopTarget does not have split I&DTarget has split I&DTarget the AM33 processorThe MMU will trap on unaligned accessesThread model: %s + Thumb: Assume function pointers may go to non-Thumb aware codeThumb: Assume non-static functions may be called from ARM codeThumb: Generate (leaf) stack frames even if not neededThumb: Generate (non-leaf) stack frames even if not neededTrailing comma in procedure call denotes null argumentTrap on integer divide by zeroTrap on integer divide overflowTreat all warnings as errorsTreat initial values of 0 like non-zero valuesTreat local vars and COMMON blocks as if they were named in SAVE statementsTune expected memory latencyTurn on maintainer testing codeUnbalanced ']'Unexpected EOF while reading source file %s. + Uninitialized locals in .bssUninitialized locals in .dataUnsupported; affects code-generation of arraysUnsupported; do not generate libf2c-calling codeUsage: %s [options] file... + Usage: %s [switches] input output + Use 128 bit long doublesUse 16 bit intUse 32 bit floatUse 32 bit intUse 32-bit ABIUse 32-bit FP registersUse 32-bit general registersUse 32-bit long typeUse 4 byte entries in switch tablesUse 64 bit floatUse 64 bit long doublesUse 64-bit ABIUse 64-bit FP registersUse 64-bit general registersUse 64-bit int typeUse 64-bit long typeUse 64-bit longsUse ABI reserved registersUse Cygwin interfaceUse DEC assembler syntaxUse GNU asUse GP relative sdata/sbss sectionsUse H8/300 alignment rulesUse IEEE math for fp comparisonsUse Irix PICUse MIPS asUse MPYI instruction for C3xUse Mingw-specific thread supportUse Mingw32 interfaceUse OSF PICUse POWER instruction setUse POWER2 instruction setUse PowerPC General Purpose group optional instructionsUse PowerPC Graphics group optional instructionsUse PowerPC instruction setUse PowerPC-64 instruction setUse ROM instead of RAMUse UNIX assembler syntaxUse V8 Sparc ISAUse VAX fpUse VAX-C alignmentUse alternate leaf function entriesUse bare Windows interfaceUse big-endian byte orderUse cc- and libc-compatible 32-bit longsUse complex addressing modesUse data cache for volatile mem refs (default)Use embedded PICUse fast but approximate float to integer conversionUse features of and schedule code for given CPUUse features of and schedule given CPUUse flat register window modelUse fp registersUse given Sparc code modelUse hardware floating pointUse hardware floating point instructionsUse hardware fpUse hardware quad fp instructionsUse in/loc/out register namesUse indirect callsUse kernel global registersUse large memory modelUse library calls to perform FP operationsUse little-endian byte orderUse little-endian byte order for dataUse mcount for profilingUse mcount_ptr for profilingUse mips-tfile asm postpassUse mips16 entry/exit psuedo opsUse multiply accumulateUse multiply-accumulate fp instructionsUse new mnemonics for PowerPC architectureUse normal calling conventionUse normal memory modelUse old mnemonics for PowerPC architectureUse profiling information for branch probabilitiesUse push instructions to save outgoing argumentsUse registers for argument passingUse single (32-bit) FP onlyUse slow but accurate float to integer conversionUse small memory modelUse software floating pointUse stack biasUse standard calling sequence, with arg count wordUse structs on stronger alignment for double-word copiesUse stubs for function prologuesUse subroutines for function prologue/epilogueUse symbolic register namesUse the 26-bit version of the APCSUse the 32-bit version of the APCSUse the BK register as a general purpose registerUse the Cygwin interfaceUse the Mingw32 interfaceUse the same size for double as for floatUse the smallest fitting integer to hold enumsUse user global registersUtilize Visual Instruction SetWarn about casting functions to incompatible typesWarn about casts which discard qualifiersWarn about code that will never be executedWarn about constructs whose meaning change in ISO CWarn about constructs with surprising meaningsWarn about enumerated switches missing a specific caseWarn about externs not at file scope levelWarn about function pointer arithmeticWarn about functions which might be candidates for attribute noreturnWarn about functions which might be candidates for format attributesWarn about global funcs without previous declarationsWarn about global funcs without prototypesWarn about implicit function declarationsWarn about inconsistent return typesWarn about multiple declarations of the same objectWarn about non virtual destructorsWarn about non-prototyped function declsWarn about non-string-literal format stringsWarn about overloaded virtual function namesWarn about pointer casts which increase alignmentWarn about possible missing parenthesesWarn about possible security problems with format functionsWarn about possible violations of sequence point rulesWarn about possibly confusing type conversionsWarn about printf/scanf/strftime/strfmon format anomaliesWarn about returning structures, unions or arraysWarn about signed/unsigned comparisonsWarn about subscripts whose type is 'char'Warn about suspicious declarations of mainWarn about testing equality of floating point numbersWarn about the use of the #import directiveWarn about unrecognized pragmasWarn about use of (only a few for now) Fortran extensionsWarn about use of multicharacter literalsWarn about violations of Effective C++ style rulesWarn if .class files are out of dateWarn if a C style cast is used in a programWarn if a selector has multiple methodsWarn if deprecated empty statements are foundWarn if modifiers are specified when not necessaryWarn if nested comments are detectedWarn when a declaration does not specify a typeWarn when a function arg is a structureWarn when a function is declared extern, then inlineWarn when a function is unusedWarn when a function parameter is unusedWarn when a label is unusedWarn when a variable is unusedWarn when an expression value is unusedWarn when an inlined function cannot be inlinedWarn when an optimization pass is disabledWarn when one local variable shadows anotherWarn when overload promotes from unsigned to signedWarn when padding is required to align struct membersWarn when the compiler reorders codeWarn when the packed attribute has no effect on struct layoutWarn when trigraphs are encounteredWhen possible do not generate stack framesWhen running CSE, follow conditional jumpsWhen running CSE, follow jumps to their targetsWork around early 4300 hardware bugWork around hardware multiply bugWork around storem hardware bug[Leaving %s] + [cannot find %s][super ...] must appear in a method context\x used with no following hex digits_Pragma takes a parenthesized string literal__VA_ARGS__ can only appear in the expansion of a C99 variadic macro__alignof__ applied to an incomplete type__builtin_eh_return not supported on this target__builtin_longjmp second argument must be 1__builtin_saveregs not supported by this target__builtin_trap not supported by this target` ' flag`!' flag`#' flag`%%%c' yields only last 2 digits of year`%%%c' yields only last 2 digits of year in some locales`%%' constraint used with last operand`%d' operand isn't a register`%l' operand isn't a label`%s' attribute applies only to functions`%s' attribute directive ignored`%s' attribute does not apply to types`%s' attribute ignored`%s' cannot be statically allocated`%s' declared `static' but never defined`%s' declared as function returning a function`%s' declared as function returning an array`%s' declared inline after being called`%s' declared inline after its definition`%s' defined both normally and as an alias`%s' defined but not used`%s' does not respond to `%s'`%s' fails to be a typedef or built in type`%s' has an incomplete type`%s' has both `extern' and initializer`%s' ignored, conflicts with `-g%s'`%s' initialized and declared `extern'`%s' is an unrecognized format function type`%s' is narrower than values of its type`%s' is neither function nor member function; cannot be declared friend`%s' is normally a non-static function`%s' is not at beginning of declaration`%s' is promoted to `%s' when passed through `...'`%s' is usually a function`%s' locally external but globally static`%s' might be used uninitialized in this function`%s' not supported by %s`%s' redeclared as different kind of symbol`%s' takes only zero or two arguments`%s' undeclared (first use in this function)`%s' undeclared here (not in a function)`%s' used but never defined`%s' used prior to declaration`%s' was declared `extern' and later `static'`%s' was declared implicitly `extern' and later `static'`%s' was previously implicitly declared to return `int'`%s' was used with no declaration before its definition`%s' was used with no prototype before its definition`%s': unknown or unsupported -g option`&' constraint used with no register class`'' flag`(' flag`+' flag`-' flag`-p' not supported; use `-pg' and gprof(1)`...' in old-style identifier list`/*' within comment`0' flag`>>' should be `> >' in template class name`@end' must appear in an implementation context`E' modifier`I' flag`O' modifier`^' flag`_' flag`__alignof' applied to a bit-field`__builtin_next_arg' called without an argument`a' flag`and' of mutually exclusive equal-tests is always 0`asm' operand constraint incompatible with operand size`asm' operand requires impossible reload`bool' is now a keyword`default' label not within a switch statement`defined' must be followed by ident or (ident)`enum %s' incomplete in scope ending here`for' loop initial declaration used outside C99 mode`long long long' is too long for GCC`long' switch expression not converted to `int' in ISO C`main' must return `int'`noreturn' function does return`noreturn' function returns non-void value`or' of unmatched not-equal tests is always 1`return' with a value, in function returning void`return' with no value, in function returning non-void`sigof' applied to non-aggregate expression`sigof' applied to non-aggregate type`sizeof' applied to a bit-field`struct %s' incomplete in scope ending here`this' is unavailable for static member functions`union %s' incomplete in scope ending here`va_start' used in function with fixed args`void' in parameter list must be the entire lista data area attribute cannot be specified for local variablesabort in %s, at %s:%dabsolute file name in remap_filenameabstract method in non-abstract classaddress of global register variable `%s' requestedaddress of register variable `%s' requestedadjusting pointers for covariant returnsaggregate has a partly bracketed initializeraggregate initializer is not constantaggregate initializer uses complicated arithmeticaggregate value used where a complex was expectedaggregate value used where a float was expectedaggregate value used where an integer was expectedalias arg not a stringalias definitions not supported in this configuration; ignoredalias name is too long - alias ignoredalignment may not be specified for `%s'ambiguous conversion for array subscriptambiguous request for method pointer `%s'anachronistic old style base class initializeranachronistic use of array size in vector deleteand pointers are %d bits wide, but g77 doesn't yet workanonymous aggregate with no membersanonymous enum declared inside parameter listanonymous struct declared inside parameter listanonymous struct not inside named typeanonymous union declared inside parameter listanonymous variadic macros were introduced in C99args to be formatted is not '...'argument #%d is a structureargument `%s' doesn't match prototypeargument `%s' might be clobbered by `longjmp' or `vfork'argument is a structureargument of `__builtin_args_info' must be constantargument of `__builtin_args_info' out of rangeargument of `__builtin_eh_return_regno' must be constantargument of `asm' is not a constant stringargument to `%s' missingargument to `%s' missing + argument to `-%s' is missingargument to `-B' is missingargument to `-V' is missingargument to `-Xlinker' is missingargument to `-b' is missingargument to `-specs' is missingargument to `-specs=' is missingargument to `-x' is missingarguments given to macro `%s'arithmetic on pointer to an incomplete typearray `%s' assumed to have one elementarray index in initializer exceeds array boundsarray index in non-array initializerarray index range in initializer exceeds array boundsarray initialized from non-constant array expressionarray size missing in `%s'array subscript has type `char'array subscript is not an integerarray type has incomplete element typearray type value used where scalar is requiredarrays of functions are not meaningfulasm operand %d probably doesn't match constraintsasm template is not a string constantassertion without predicateassignmentassignment (not initialization) in declarationassignment suppressionassignment to final field `%s' not in constructorassignment to final field `%s' not in field's classassignment to final static field `%s' not in class initializerat this point in fileattempt to take address of bit-field structure member `%s'attempt to use poisoned "%s"backslash and newline separated by spacebackslash-newline at end of filebad PC range for debug info for local `%s'bad array initializerbad header versionbad magic numberbad magic number in file '%s'bad method signaturebad pc in exception_tablebad raw header versionbad string constantbad type in parameter debug infobad value (%s) for %s switchbad value (%s) for -mabi= switchbad value (%s) for -march= switchbad value (%s) for -mcmodel= switchbad value (%s) for -mcpu switchbad value (%s) for -mcpu= switchbad value (%s) for -mips switchbad value (%s) for -mmodel switchbad value (%s) for -msdata switchbad value `%s' for -mcpu switchbad value `%s' for -mfp-rounding-mode switchbad value `%s' for -mfp-trap-mode switchbad value `%s' for -mmemory-latencybad value `%s' for -mtrap-precision switchbad value constant type %d, index %dbad zip/jar file %sbadly nested C headers from preprocessorbadly punctuated parameter list in #definebase operand of `->' is not a pointerbit-field `%s' has invalid typebit-field `%s' type invalid in ISO Cbit-field `%s' width not an integer constantblock_num = %ld, num_blocks = %d + both 'f' and 'l' suffixes on floating constantboth long and short specified for `%s'both signed and unsigned specified for `%s'braced-group within expression allowed only inside a functionbraces around scalar initializerbranch %d never executed + break statement not within loop or switchbuilt-in function `%s' declared as non-functionbuilt-in function `%s' not currently supportedcall %d never executed + call to Java `catch' or `throw' with `jthrowable' undefinedcall to Java constructor with `%s' undefinedcall to Java constructor, while `jclass' undefinedcall-clobbered register used for global register variablecalled from herecalled object is not a functioncan not handle inconsistent calls to `%s'can't access imaginary part of complex value in hard registercan't close %scan't close input file %scan't convert between vector values of different sizecan't convert value to a vectorcan't create directory %scan't create repository information file `%s'can't do dependency tracking with input from stdincan't get current directorycan't have varargs with -mfp-arg-in-fp-regscan't initialize friend function `%s'can't inline call to `%s'can't open %scan't open %s for writingcan't redefine default return value for constructorscan't reopen %scan't set `%s' attribute after definitioncan't specify `-D' without `--main' + can't to open %scan't use '%s' as a %s registercan't write to %scannot convert to a pointer typecannot create temporary filecannot declare %s to referencescannot declare `::main' to be a templatecannot declare `::main' to be inlinecannot declare `::main' to be staticcannot declare pointers to referencescannot declare references to referencescannot declare static function inside another functioncannot delete a function. Only pointer-to-objects are valid arguments to `delete'cannot find `%s'cannot find `ldd'cannot find `nm'cannot find source %scannot initialize arrays using this syntaxcannot initialize multi-dimensional array with initializercannot inline function `main'cannot optimize division for both latency and throughputcannot put object with volatile field into registercannot reload integer constant operand in `asm'cannot return from a handler of a function-try-block of a constructorcannot specify -o with -c or -S and multiple compilationscannot specify `main' class when not linkingcannot specify both -C and -ocannot take the address of `this', which is an rvalue expressioncannot use `::' in parameter declarationcannot use typeid with -fno-rtticase label does not reduce to an integer constantcase label not within a switch statementcase value `%ld' not in enumerated typecase value `%ld' not in enumerated type `%s'cast discards qualifiers from pointer target typecast does not match function typecast from pointer to integer of different sizecast increases required alignment of target typecast specifies array typecast specifies function typecast to non-reference type used as lvaluecast to pointer from integer of different sizecast to union type from type not present in unioncccp error: invalid special hash typechar-array initialized from wide stringcharacter constant too longchoose either big or little endian, not bothchoose either m340 or m210 not bothcircular pointer delegation detectedclass `%s' does not implement the `%s' protocolclose %dclose %scollect2 version %scollect: reading %s + collect: recompiling %s + collect: relinking + collect: tweaking %s in %s + comma at end of enumerator listcomma expression used to initialize return valuecomma operator in operand of #ifcomparing floating point with == or != is unsafecomparison between pointer and integercomparison between signed and unsignedcomparison between signed and unsigned integer expressionscomparison is always %dcomparison is always false due to limited range of data typecomparison is always true due to limited range of data typecomparison of complete and incomplete pointerscomparison of distinct pointer types lacks a castcomparison of promoted ~unsigned with constantcomparison of promoted ~unsigned with unsignedcomparison of unsigned expression < 0 is always falsecomparison of unsigned expression >= 0 is always truecomparisons like X<=Y<=Z do not have their mathematical meaningcompilation terminated. + complex invalid for `%s'configuration: REAL, INTEGER, and LOGICAL are %d bits wide,configuration: char * holds %d bits, but INTEGER only %d -- + ASSIGN statement might failconfiguration: char * holds %d bits, but ftnlen only %dconflicting access specifications for field `%s', ignoredconflicting architectures defined - using C seriesconflicting architectures defined - using K seriesconflicting declarations of `%s'conflicting super class name `%s'conflicting types for `%s'conflicting types for built-in function `%s'const `%s' cannot be declared `mutable'const declaration for `%s' follows non-constconst objects cannot go in .sdata/.sbssconstructor cannot be static member functionconstructors cannot be declared virtualcontinue statement not within a loopcontrol reaches end of non-void functionconversion from NaN to intconversion from NaN to unsigned intconversion lacks type at end of formatconversion to %s%s will never use a type conversion operatorconversion to incomplete typeconversion to non-scalar type requestedcould not convert 0x%l.8x into a regioncould not open dump file `%s'couldn't determine target name for dependency trackingcreating array with size zerocurrent file is older than %sdata area of '%s' conflicts with previous declarationdata definition has no type or storage classdata type of `%s' isn't suitable for a registerdecimal constant is so large that it is unsigneddeclaration does not declare anythingdeclaration for parameter `%s' but no such parameterdeclaration of `%s' as array of functionsdeclaration of `%s' as array of voidsdeclaration of `%s' has `extern' and is initializeddeclaration of `%s' shadows a member of `this'declaration of `%s' shadows a parameterdeclaration of `%s' shadows a symbol from the parameter listdeclaration of `extern' variable `%s' in `for' loop initial declarationdeclaration of non-variable `%s' in `for' loop initial declarationdeclaration of static variable `%s' in `for' loop initial declarationdecrementdeprecated use of label at end of compound statementdereferencing `void *' pointerdereferencing pointer to incomplete typedestructor cannot be static member functiondestructor needed for `%#D'destructors must be member functionsdestructors take no parametersdidn't use all bb entries of graph, function %s + directives may not be used inside a macro argumentdiscarding `const' applied to a referencediscarding `volatile' applied to a referencedivision by zero in #ifdouble quoted strings not allowed in #if expressionsdue to the presence of a constructordup2 %d 1duplicate (or overlapping) case valueduplicate `%s'duplicate `const'duplicate `restrict'duplicate `volatile'duplicate case valueduplicate declaration for protocol `%s'duplicate interface declaration for category `%s(%s)'duplicate interface declaration for class `%s'duplicate label declaration `%s'duplicate macro parameter "%s"duplicate member `%s'dynamic dependencies. + dynamic dependency %s not foundelements of array `%s' have incomplete typeembedded `\0' in formatempty #if expressionempty body in an else-statementempty character constantempty declarationempty file name in #%sempty index range in initializerempty left precision in %s formatempty precision in %s formatempty range specifiedempty scalar initializerenum defined inside parmsenumeration value `%s' not handled in switchenumeration values exceed range of largest integerenumerator value for `%s' not integer constanterror closing %serror in constant pool entry #%d + error while parsing constant poolerror while parsing fieldserror while parsing final attributeserror while parsing methodserror writing to %sescape sequence out of range for characterexception handling disabled, use -fexceptions to enableexcess elements in aggregate initializerexcess elements in array initializerexcess elements in char array initializerexcess elements in scalar initializerexcess elements in struct initializerexcess elements in union initializerexecv %sexecvp %sexpression statement has incomplete typeextern declaration of `%s' doesn't match global oneextra brace group at end of initializerextra elements in scalar initializerextra semicolon in struct or union specifiedextra text at end of directiveextra tokens at end of #%s directiveextra type qualifiers in format argument (arg %d)f2c-compatible code need not be generatedfailed to find class '%s'fclosefclose %sfdopenfield '%s' not found in classfield `%s' declared as a functionfield `%s' has incomplete typefield `%s' not foundfield initializer is not constantfield name not in record or union initializerfield precisionfield widthfield width in printf formatfield width in scanf formatfield width in strfmon formatfield width in strftime formatfill characterfill character in strfmon formatfini function found in object %sfirst argument of `%s' should be `int'first argument to `va_arg' not of type `va_list'fix_sched_param: unknown param: %sflexible array member in otherwise empty structflexible array member in unionflexible array member not at end of structfloating constant exponent has no digitsfloating constant may not be in radix 16floating constant misusedfloating point constant not a valid immediate operandfloating point number exceeds range of '%s'floating point number exceeds range of 'double'floating point numbers not allowed in #if expressionsfloating point overflowfloating point overflow in expressionfloating point trap outputting a constantfopen %sfor each function it appears in.)format argument %d unused before used argument %d in $-style formatformat argument %d used more than once in %s formatformat argument is not a pointer (arg %d)format argument is not a pointer to a pointer (arg %d)format is a wide character stringformat not a string literal and no format argumentsformat not a string literal, argument types not checkedformat not a string literal, format string not checkedformat string arg follows the args to be formattedformat string arg not a string typeformat string has invalid operand numberfp software completion requires -mtrap-precision=ifr30_print_operand: invalid %F codefr30_print_operand: invalid %x codefr30_print_operand: invalid operand to %A codefr30_print_operand: unhandled MEMfr30_print_operand: unknown codefr30_print_operand_address: unhandled addressframe size too large for reliable stack checkingfriend declaration not in class definitionfstat %sfunction `%s' cannot be declared `mutable'function `%s' is initialized like a variablefunction `%s' was previously declared within a blockfunction body for constructor missingfunction call has aggregate valuefunction cannot be inlinefunction declaration isn't a prototypefunction declared `noreturn' has a `return' statementfunction definition declared `auto'function definition declared `register'function definition declared `typedef'function does not return string typefunction might be possible candidate for `%s' format attributefunction might be possible candidate for attribute `noreturn'function return type cannot be functionfunction returns address of local variablefunction returns an aggregatefunction too large to be inlinefunction types not truly compatible in ISO Cfunction uses __builtin_eh_returnfunction using alloca cannot be inlinefunction using setjmp cannot be inlinefunction using short complex types cannot be inlinefunction with computed jump cannot inlinefunction with label addresses used in initializers cannot inlinefunction with nested functions cannot be inlinefunction with nonlocal goto cannot be inlinefunction with target specific attribute(s) cannot be inlinedfunction with transparent unit parameter cannot be inlinefunction with varying-size parameter cannot be inlinefunction with varying-size return value cannot be inlinefunction-like macro "%s" must be used with arguments in traditional Cgcc driver version %s executing gcc version %s + gcc version %s + generate RP codeglobal register variable `%s' used in nested functionglobal register variable follows a function definitionglobal register variable has initial valuegp is constant (but save/restore gp on indirect calls)hard register `%s' listed as input operand to `asm'hex character constant does not fit in a bytehex escape out of rangehex escape sequence out of rangehexadecimal floating constant has no exponentiC2.0 and iC3.0 are incompatible - using iC3.0ia64_print_operand: unknown codeidentifier name `%s' conflicts with GNU C++ internal naming strategyignoring #pragma %signoring #pragma %s %signoring asm-specifier for non-static local variable `%s'ignoring duplicate directory "%s" + ignoring nonexistent directory "%s" + ignoring option `%s' due to invalid debug level specificationignoring pragma: %simplicit declaration of function `%s'impossible operator '%s'impossible register constraint in `asm'incompatibilities between object file & expected valuesincompatible type for argument %d of `%s'incompatible type for argument %d of indirect function callincompatible types in %sincomplete implementation of category `%s'incomplete implementation of class `%s'incomplete type unificationincomplete universal-character-nameinconsistent instance variable specificationinconsistent operand constraints in an `asm'incrementindex value instead of field name in union initializerinit function found in object %sinitializationinitialization designators may not nestinitialization of a flexible array memberinitialization of flexible array member in a nested contextinitialized field with side-effects overwritteninitialized variable `%s' is marked dllimportinitializer element is not computable at load timeinitializer element is not constantinitializer ends prematurelyinitializer fails to determine size of `%s'initializer for floating value is not a floating constantinitializer for integer value is too complicatedinitializer for scalar variable requires one elementinitializer for static variable is not constantinitializer for static variable uses complicated arithmeticinitializer invalid for static member with constructorinitializer list being treated as compound expressioninitializer list for object of class with base classesinitializer list for object of class with virtual base classesinitializer list for object using virtual functionsinitializer list treated as compound expressioninitializer-string for array of chars is too longinitializing array with parameter listinline float constants not supported on this hostinline functions not supported for this return value typeinlining failed in call to `%s'input operand constraint contains `%c'install: %s%s + instance variable `%s' accessed in class methodinstance variable `%s' is declared %sinstance variable `%s' is declared privateinstruction scheduling not supported on this target machineint-array initialized from non-wide stringinteger constant contains digits beyond the radixinteger constant is larger than the maximum value for its typeinteger constant is so large that it is unsignedinteger constant is too large for this configuration of the compiler - truncated to %d bitsinteger constant is unsigned in ISO C, signed with -traditionalinteger constant larger than the maximum value of %sinteger constant out of rangeinteger overflow in expressioninteger overflow in preprocessor expressioninternal errorinternal error - invalid Utf8 nameinternal error - too many interface typeinternal error - use of undefined typeinternal error in check-init: tree code not implemented: %sinternal error in generate_bytecode_insn - tree code not implemented: %sinternal error: internal error: %%) found without a %%( in assembler patterninternal error: %%> found without a %%< in assembler patterninternal error: %%] found without a %%[ in assembler patterninternal error: %%} found without a %%{ in assembler patterninternal regno botch: regno = %d + interworking forces APCS-32 to be usedinvalid #-lineinvalid #identinvalid #lineinvalid #pragma %sinvalid #pragma GCC poison directiveinvalid %%-codeinvalid %%B valueinvalid %%C valueinvalid %%E valueinvalid %%F valueinvalid %%G valueinvalid %%H valueinvalid %%J codeinvalid %%K valueinvalid %%L valueinvalid %%M valueinvalid %%N valueinvalid %%O valueinvalid %%P valueinvalid %%Q valueinvalid %%R valueinvalid %%S valueinvalid %%T valueinvalid %%U valueinvalid %%V valueinvalid %%Z valueinvalid %%b valueinvalid %%f valueinvalid %%h valueinvalid %%j codeinvalid %%j valueinvalid %%k valueinvalid %%m valueinvalid %%p valueinvalid %%q valueinvalid %%r valueinvalid %%s valueinvalid %%u valueinvalid %%v valueinvalid %%xn codeinvalid %%z valueinvalid %B valueinvalid %C valueinvalid %D valueinvalid %E valueinvalid %H valueinvalid %P operandinvalid %Q valueinvalid %h valueinvalid %o valueinvalid %p valueinvalid %q valueinvalid %r valueinvalid %s/S valueinvalid %x/X valueinvalid --param option: %sinvalid PC in line number tableinvalid UNSPEC as operandinvalid `asm': %sinvalid arg to `__builtin_frame_address'invalid arg to `__builtin_return_address'invalid call to member function needing `this' in static member function scopeinvalid catch parameterinvalid codeinvalid default template argumentinvalid expression as operandinvalid flag "%s" in line directiveinvalid format #line commandinvalid initial value for member `%s'invalid initializerinvalid initializer for bit stringinvalid integer constant in parameter list, did you forget to give parameter name?invalid lvalue in asm statementinvalid lvalue in assignmentinvalid lvalue in unary `&'invalid macro nameinvalid macro name `%s'invalid operand output codeinvalid operand to %H/%L codeinvalid operand to %N codeinvalid operand to %R codeinvalid operand to %T/%B codeinvalid operand to %U codeinvalid operand to %V codeinvalid operand to %p codeinvalid operand to %s codeinvalid operands to binary %sinvalid operation on uninstantiated typeinvalid parameter `%s'invalid parameter value `%s'invalid preprocessing directive #%sinvalid punctuation `%c' in constraintinvalid receiver type `%s'invalid reference to NULL ptr, use ptr-to-member insteadinvalid register name `%s' for register variableinvalid register name for `%s'invalid storage class for function `%s'invalid string literal, ignoring final '\'invalid suffix '%.*s' on integer constantinvalid truth-value expressioninvalid type `void' for newinvalid type argumentinvalid type argument of `%s'invalid type modifier within pointer declaratorinvalid type: `void &'invalid use of %%d, %%x, or %%Xinvalid use of `%s' on pointer to memberinvalid use of `restrict'invalid use of `this' at top levelinvalid use of `this' in non-member functioninvalid use of a pointer to an incomplete type in pointer arithmeticinvalid use of array with unspecified boundsinvalid use of incomplete typedef `%s'invalid use of non-lvalue arrayinvalid use of undefined type `%s %s'invalid use of void expressioninvalid version number formatinvoke[non-static] on static methodinvokestatic on abstract methodinvokestatic on non static methodjump to `%s' invalidly jumps into binding contourjump to case labeljunk at end of #pragma %sjunk at end of #pragma GCC java_exceptionsjunk at end of #pragma ghs endsdajunk at end of #pragma ghs endtdajunk at end of #pragma ghs endzdajunk at end of #pragma ghs interruptjunk at end of #pragma ghs sectionjunk at end of #pragma ghs startsdajunk at end of #pragma ghs starttdajunk at end of #pragma ghs startzdajunk at end of #pragma mapjunk at end of #pragma weakjunk at end of '#pragma %s'junk at end of '#pragma pack'junk at end of signature stringlabel %s referenced outside of any functionlabel `%s' defined but not usedlabel `%s' referenced outside of any functionlabel `%s' used before containing binding contourlabel `%s' used but not definedlabel must be followed by statementlanguage %s not recognizedlanguage string `"%s"' not recognizedlarge frame pointer change (%d) with -mtiny-stacklarge integer implicitly truncated to unsigned typeld returned %d exit statusleft precisionleft precision in strfmon formatleft shift count >= width of typeleft shift count is negativeleft-hand operand of comma expression has no effectlength modifierlength modifier in printf formatlength modifier in scanf formatlength modifier in strfmon formatlibraries: %s + library function `%s' declared as non-functionline number out of rangeload command map, %d cmds, new size %ld. + local declaration of `%s' hides instance variablelong and short specified together for `%s'long long constant not a valid immediate operandlong or short specified with char for `%s'long or short specified with floating type for `%s'long, short, signed or unsigned invalid for `%s'long, short, signed or unsigned used invalidly for `%s'lseek %s 0macro "%s" passed %u arguments, but takes just %umacro "%s" requires %u arguments, but only %u givenmacro names must be identifiersmacro or #include recursion too deepmacro parameters must be comma-separatedmalformed #pragma align - ignoredmalformed #pragma ghs sectionmalformed #pragma map, ignoredmalformed .zip archive in CLASSPATH: %smask must be an immediatematching constraint not valid in output operandmatching constraint references invalid operand numbermay not use both -EB and -ELmay not use both -mfp64 and -m4650may not use both -mfp64 and -msingle-floatmember functions are implicitly friends of their classmembersmethod '%s' not found in classmethod definition for `%c%s' not foundmethod definition not in class contextmethods cannot be converted to function pointersmips16 function profilingmisplaced ConstantValue attribute (not in any field)missing $ operand number in formatmissing '(' after predicatemissing ')' after "defined"missing ')' in macro parameter listmissing ')' to complete answermissing ';' before right bracemissing Code attributemissing argument in `__builtin_args_info'missing braces around initializermissing fill character at end of strfmon formatmissing initializermissing static field `%s'missing terminating %c charactermissing terminating > charactermissing white space after number '%.*s'mixing C++ and Java catches in a single translation unitmno-cygwin and mno-win32 are not compatiblemodification by `asm'more than %d operands in `asm'more than one 'i' or 'j' suffix on integer constantmsync %smulti-character character constantmulti-line commentmulti-line string literals are deprecatedmultiple `virtual' specifiersmultiple access specifiersmultiple declarations for method `%s'multiple default labels in one switchmultiple parameters named `%s'multiple storage classes in declaration of `%s'multiple types in one declarationmunmap %smust #include before using typeidmysterious repository information in %sname lookup of `%s' changedname lookup of `%s' changed for new ISO `for' scopingname missing for member functionnamed membersnamespace-scope anonymous aggregates must be staticnegative integer implicitly converted to unsigned typenegative width in bit-field `%s'nested extern declaration of `%s'nested function `%s' declared `extern'nested redefinition of `%s'new cannot be applied to a function typenew cannot be applied to a reference typenew of array type fails to specify sizeno INTEGER type can hold a pointer on this configurationno args to macro `%s'no argumentsno base or member initializers given following ':'no body nor ';' separates two class, struct or union declarationsno class name specified as argument to -fconstant-string-classno closing `]' for `%%[' formatno cmd_strings foundno data type for mode `%s'no description yetno input file specifiedno low registers available for popping high registersno macro name given in #%s directiveno newline at end of fileno previous declaration for `%s'no previous prototype for `%s'no prototype, and parameter address used; cannot be inlineno semicolon at end of struct or unionno super class declared in interface for `%s'no symbol table foundnon-ANSI-standard escape sequence, `\%c'non-ISO-standard escape sequence, '\%c'non-empty initializer for array of empty elementsnon-lvalue in %snon-member `%s' cannot be declared `mutable'non-object member `%s' cannot be declared `mutable'non-prototype definition herenon-static declaration for `%s' follows staticnon-static method '%s' overrides static methodnon-trivial labeled initializersnonconstant array index in initializernot a static field `%s'not a valid Java .class filenot enough type informationnot found + not in any file?!null character(s) ignorednull character(s) preserved in literalnull format stringnumber of arguments doesn't match prototypenumber of bb notes in insn chain (%d) != n_basic_blocks (%d)numeric constant contains digits beyond the radixobject does not conform to the `%s' protocolobject missing in use of pointer-to-member constructobsolete use of designated initializer with `:'obsolete use of designated initializer without `='octal character constant does not fit in a byteoctal escape sequence out of rangeoffset outside bounds of constant stringold raw header fileonly %d args to macro `%s'only 1 arg to macro `%s'only constructors take base initializersonly declarations of constructors can be `explicit'only weak aliases are supported in this configurationopen %soperand constraints for `asm' differ in number of alternativesoperand is const_doubleoperand is r0operand number missing after %-letteroperand number out of rangeoperand number out of range in formatoperand number specified for format taking no argumentoperand number specified with suppressed assignmentoperation on `%s' may be undefinedoperator "defined" requires an identifieroptimization level restoredoptimization turned offoptimization turned onoptions enabled: options passed: ordered comparison of pointer with integer zerooutput constraint `%c' for operand %d is not at the beginningoutput number %d not directly addressableoutput operand constraint lacks `='output operand is constant in `asm'output_operand: %soverflow in array dimensionoverflow in constant expressionoverflow in enumeration valuesoverflow in implicit constant conversionoverflow on truncation to integeroverflow on truncation to unsigned integeroverflowed output arg list for `%s'packed attribute causes inefficient alignmentpacked attribute causes inefficient alignment for `%s'packed attribute is unnecessarypacked attribute is unnecessary for `%s'padding struct size to alignment boundarypadding struct to align `%s'parameter `%s' declared voidparameter `%s' has incomplete typeparameter `%s' has just a forward declarationparameter `%s' is initializedparameter `%s' points to incomplete typeparameter has incomplete typeparameter name missingparameter name missing from parameter listparameter name omittedparameter name starts with a digit in #defineparameter names (without types) in function declarationparameter points to incomplete typeparameter type of called function is incompleteparm types given both in parmlist and separatelyparse errorparse error at end of saved function textparse error in method specificationparse error; also virtual memory exceededparser may be lost: is there a '{' missing somewhere?parser stack overflowpassing arg %d of `%s'passing arg %d of pointer to functionpasting "%s" and "%s" does not give a valid preprocessing tokenpipeplace data items into their own sectionplace each function into its own sectionpointer of type `void *' used in arithmeticpointer of type `void *' used in subtractionpointer targets in %s differ in signednesspointer to a function used in arithmeticpointer to a function used in subtractionpointer to member function called, but not in class scopepointer type mismatch in conditional expressionpointer value used where a complex was expectedpointer value used where a floating point value was expectedpointer/integer type mismatch in conditional expressionpointers are not permitted as case valuespoisoning existing macro "%s"possible start of unterminated string literalpossibly missing ')'potential selector conflict for method `%s'precisionprecision in printf formatpredicate must be an identifierpredicate's answer is emptyprevious declaration of `%s'previous external decl of `%s'previous implicit declaration of `%s'previously used hereprior parameter's size depends on `%s'profiling does not support code models other than medlowprofiling does not work without a frame pointerprofiling not supported with -mg + programs: %s + promoted argument `%s' doesn't match prototypeprototype for `%s' followsprototype for `%s' follows and argument %d doesn't matchprototype for `%s' follows and number of arguments doesn't matchraw header buffer too smallread %ld bytes, expected %ld, from %sread %sreading class %s for the second time from %sreading through null pointer (arg %d)real name is too long - alias ignoredreal-valued template parameters when cross-compilingredeclaration of `%s'redeclaration of `enum %s'redefinition of `%s'redirecting stdout: %sredundant redeclaration of `%s' in same scopereference `%s' is ambiguous: appears in interface `%s' and interface `%s'reference to non-lvalue returnedregister name given for non-register variable `%s'register name not specified for `%s'register specified for `%s' isn't suitable for data typeregister used for two global register variablesregister variable `%s' used in nested functionreimplementation of class `%s'rename spec %s to %s + repeated %s in formatrequest for member `%s' in something not a structure or unionrequested alignment is not a constantrequested alignment is not a power of 2requested alignment is too largerequested init_priority is not an integer constantrequested init_priority is out of rangerequested init_priority is reserved for internal useresult of `operator->()' yields non-pointer resultret instruction not implementedreturnreturn type defaults to `int'return type defaults to idreturn type for `%s' defaults to idreturn type for `main' changed to `int'return type is an incomplete typereturn type of `%s' is not `int'return value from function receives multiple initializationsreturn value type specifier for constructor ignoredreturn-statement with a value, in function declared with a void return typereturn-statement with no value, in function declared with a non-void return typereturned value in block_exit_exprreturning a value from a constructorreturning a value from a destructorreturning reference to temporaryright precisionright precision in strfmon formatright shift count >= width of typeright shift count is negativerounding mode not supported for VAX floatssecond arg to `__builtin_expect' must be a constantsecond argument of `%s' should be `char **'second parameter of `va_start' not last named argumentsection attribute cannot be specified for local variablessection attribute not allowed for `%s'section attributes are not supported for this targetsection of `%s' conflicts with previous declarationsection pointer missingselector must be an immediatesemicolon missing after %s declarationshadowing built-in function `%s'shadowing library function `%s'shared and mdll are not compatibleshift count >= width of typeshift count is negativeshort, signed or unsigned invalid for `%s'signed and unsigned given together for `%s'signed and unsigned type in conditional expressionsigof type specifiersize in array new must have integral typesize of `%s' is %d bytessize of `%s' is larger than %d bytessize of array `%s' has non-integer typesize of array `%s' is negativesize of array `%s' is too largesize of return value of `%s' is %u bytessize of return value of `%s' is larger than %d bytessize of variable `%s' is too largesizeof applied to a bit-fieldsizeof applied to a function typesizeof applied to a void typesizeof applied to an incomplete typesorry, not implemented: sorry, not implemented: #pragma align NAME=SIZEsorry, not implemented: #pragma noalign NAMEspec file has no spec for linkingspec is '%s' + + specs %%include syntax malformed after %ld charactersspecs %%rename syntax malformed after %ld charactersspecs %s spec was not found to be renamedspecs file malformed after %ld charactersspecs unknown %% command after %ld charactersspurious trailing `%%' in formatstack limit expression is not supportedstack limits not supported on this targetstack underflow - dup* operationstatic `%s' cannot be declared `mutable'static access to object of type `id'static declaration for `%s' follows non-staticstatic variable `%s' is marked dllimportstorage class `auto' invalid for function `%s'storage class `inline' invalid for function `%s' declared out of global scopestorage class `register' invalid for function `%s'storage class `static' invalid for function `%s' declared out of global scopestorage class specified for %s `%s'storage class specified for parameter `%s'storage class specified for structure field `%s'storage class specified for typenamestorage class specifier `%s' not allowed after struct or classstorage class specifiers invalid in friend function declarationsstorage class specifiers invalid in parameter declarationsstorage size of `%s' isn't constantstorage size of `%s' isn't knownstray '%c' in programstray '\%o' in programstrftime formats cannot format argumentsstring length `%d' is greater than the length `%d' ISO C%d compilers are required to supportstring section missingstructstruct type value used where scalar is requiredstructuresubscript has type `char'subscript missing in array referencesubscripted value is neither array nor pointersubscripting array declared `register'suggest hiding #%s from traditional C with an indented #suggest not using #elif in traditional Csuggest parentheses around && within ||suggest parentheses around + or - in operand of &suggest parentheses around + or - inside shiftsuggest parentheses around arithmetic in operand of ^suggest parentheses around arithmetic in operand of |suggest parentheses around assignment used as truth valuesuggest parentheses around comparison in operand of &suggest parentheses around comparison in operand of ^suggest parentheses around comparison in operand of |switch -mcpu=%s conflicts with -march= switchswitch quantity not an integersyntax errorsyntax error at '%s' tokensyntax error: cannot back uptaking address of temporarytarget CPU does not support APCS-26target CPU does not support APCS-32target CPU does not support interworkingtemplate type parameters must use the keyword `class' or `typename'the ` ' printf flagthe `!' strfmon flagthe `#' printf flagthe `#' strftime flagthe `'' printf flagthe `'' scanf flagthe `(' strfmon flagthe `+' printf flagthe `+' strfmon flagthe `-' printf flagthe `-' strfmon flagthe `-' strftime flagthe `0' printf flagthe `0' strftime flagthe `E' strftime modifierthe `I' printf flagthe `I' scanf flagthe `O' modifierthe `O' strftime modifierthe `^' strfmon flagthe `^' strftime flagthe `_' strftime flagthe `a' scanf flagthe conditional began herethe m210 does not have little endian supportthe meaning of '\%c' varies with -traditionalthe meaning of '\a' varies with -traditionalthe meaning of `\a' varies with -traditionalthe meaning of `\x' varies with -traditionalthe only valid combination is `long double'third argument of `%s' should probably be `char **'this function may return with or without a valuethis is a previous declarationthis is the first default labelthis is the first entry overlapping that valuethis is the location of the previous definitionthis target machine does not have delayed branchesthree 'l' suffixes on integer constanttime in %s: %ld.%06ld (%ld%%) + too few arguments for formattoo few arguments to functiontoo few arguments to function `%s'too many 'l' suffixes in integer constanttoo many (%d) args to macro `%s'too many alternatives in `asm'too many arguments for formattoo many arguments to functiontoo many arguments to function `%s'too many arguments to function `va_start'too many initialization functions requiredtoo many input filestop-level declaration of `%s' specifies `auto'traditional C ignores #%s with the # indentedtraditional C rejects automatic aggregate initializationtraditional C rejects initialization of unionstraditional C rejects string concatenationtraditional C rejects the 'f' suffixtraditional C rejects the 'l' suffixtraditional C rejects the 'u' suffixtraditional C rejects the `U' suffixtraditional C rejects the unary plus operatortrap mode not supported for VAX floatstrigraph ??%c converted to %ctrigraph ??%c ignoredtry reducing the number of local variablestwo 'u' suffixes on integer constanttwo or more data types in declaration of `%s'two types specified in one empty declarationtype defaults to `int' in declaration of `%s'type mismatch in conditional expressiontype mismatch with previous external decltype mismatch with previous implicit declarationtype name expected before `&'type name expected before `*'type of `%s' defaults to `int'type of external `%s' is not globaltype of formal parameter %d is incompletetype qualifier `%s' not allowed after struct or classtype qualifiers for `%s' conflict with previous decltype qualifiers ignored on function return typetype size can't be explicitly evaluatedtype specifier `%s' not allowed after struct or classtype specifier omitted for parametertype to vector delete is neither pointer or array typetypedef `%s' is initializedtypedef declaration includes an initializertypedef declaration invalid in parameter declarationtypes are not quite compatibleunable to call pointer to member function hereunable to mmap file '%s'unable to open dynamic dependency '%s'unable to open file '%s'unable to stat file '%s'unary `&'unbalanced #endifundefined or invalid # directiveundefining "%s"undefining `%s'undefining `defined'unionunion cannot be made transparentunion type value used where scalar is requireduniversal-character-name '\U%08x' not valid in identifieruniversal-character-name '\u%04x' not valid in identifieruniversal-character-name on EBCDIC targetunknown C standard `%s'unknown array size in deleteunknown conversion type character 0x%x in formatunknown conversion type character `%c' in formatunknown escape sequence '\%c'unknown escape sequence `\%c'unknown escape sequence: `\' followed by char code 0x%xunknown field `%s' specified in initializerunknown machine mode `%s'unknown opcode %d@pc=%d during verificationunknown register name `%s' in `asm'unknown register name: %sunknown set constructor typeunknown {de,en}code_mach_o_hdr return value %dunnamed struct/union that defines no instancesunnamed variable or field declared voidunordered comparison on non-floating point argumentunrecogized wide sub-instructionunrecognized format specifierunrecognized gcc debugging option: %cunrecognized option `-%s'unrecognized register name `%s'unregistered operator %sunsupported arg to `__builtin_frame_address'unsupported arg to `__builtin_return_address'unsupported versionunsupported wide integer operationunterminated #%sunterminated #%s conditionalunterminated argument list invoking macro "%s"unterminated commentunterminated format stringunterminated parameter list in #defineunterminated string or character constantunused arguments in $-style formatunused parameter `%s'unused variable `%s'use -gdwarf -g%d for DWARF v1, level %duse -gdwarf-2 for DWARF v2use of %s and %s together in %s formatuse of %s and %s together with `%%%c' %s formatuse of `%s' in templateuse of `%s' in template type unificationuse of `%s' length modifier with `%c' type characteruse of old-style castuseless keyword or type name in empty declarationusing both @FILE with multiple files not implementedvalue of -mfixed-range must have form REG1-REG2varargs function cannot be inlinevariable `%s' declared `inline'variable `%s' has initializer but incomplete typevariable `%s' might be clobbered by `longjmp' or `vfork'variable or field `%s' declared voidvariable or field declared voidvariable size is passed partially in stack and in regvariable-size type declared outside of any functionvariable-sized object may not be initializedverification error at PC=%dvirtual functions cannot be friendsvirtual non-class function `%s'virtual outside class declarationvoid value not ignored as it ought to bevolatile register variables don't work as you might wishwarning: weak declaration of `%s' must be publicweak declaration of `%s' must precede definitionwhere case label appears herewidth of `%s' exceeds its typewidth of integer constant changes with -traditionalwidth of integer constant may change on other systems with -traditionalwrite %swriting into constant object (arg %d)writing load commands. + + writing through null pointer (arg %d)wrong number of arguments specified for `%s' attributewrong type argument to abswrong type argument to bit-complementwrong type argument to conjugationwrong type argument to unary exclamation markwrong type argument to unary minuswrong type argument to unary pluswrote %ld bytes, expected %ld, to %syou must additionally specify either -M or -MMzero or negative size array `%s'zero size array reserves no spacezero width for bit-field `%s'zero width in %s formatzero-length format stringProject-Id-Version: gcc 3.0 + POT-Creation-Date: 2001-12-20 04:18-0500 + PO-Revision-Date: 2001-12-05 22:47+0900 + Last-Translator: Daisuke Yamashita + Language-Team: Japanese + MIME-Version: 1.0 + Content-Type: text/plain; charset=EUC-JP + Content-Transfer-Encoding: 8bit + + %s ÍÑ¥ª¥×¥·¥ç¥ó: + + %s: %d: ·Ù¹ð: `%s' ¤ÎÀë¸À¤ò¥Þ¥¯¥í¸Æ¤Ó½Ð¤·¤ËÄɲäǤ­¤Þ¤»¤ó + + %s: ÆþÎÏ¥Õ¥¡¥¤¥ë `%s' ¤òÆÉ¤ß¹þ¤ßÃæ¤Ë¥¨¥é¡¼: %s + + %s: Ã×̿Ū¥¨¥é¡¼: Éû info ¥Õ¥¡¥¤¥ë¤¬ %d ¹ÔÌܤDzõ¤ì¤Æ¤¤¤Þ¤¹ + + %s: ·Ù¹ð: `%s' ¤ÎÀë¸À¤Ç¤Î²¾°ú¿ô¥ê¥¹¥È¤¬¾¯¤Ê¤¹¤®¤Þ¤¹ + + ;; ·ë¹ç¹ç·×: %d »î¹Ô, %d ÂåÂØ (%d ¿·¤¿¤Ê¶õ´Ö¤òÍ×µá), + ;; %d À®¸ù¡£ + + ¼Â¹Ô²ó¿ô (ÉÃ) + + ¥Ð¥°¥ì¥Ý¡¼¥È¤Î¼ê½ç¤Ï¡¢°Ê²¼¤ò»²¾È + + ³¤±¤Þ¤¹¤«? (y ¤Þ¤¿¤Ï n) + ¸À¸ì»ÅÍÍ¥ª¥×¥·¥ç¥ó: + + -g, -f, -m, -O, -W ¤Ç»Ï¤Þ¤ë¥ª¥×¥·¥ç¥ó¤ä¡¢--param ¤Ï %s ¤¬µ¯Æ°¤¹¤ë¤¢¤é¤æ¤ë + »Ò¥×¥í¥»¥¹¤Ë¼«Æ°Åª¤ËÅϤµ¤ì¤Þ¤¹¡£¤³¤¦¤¤¤Ã¤¿¥×¥í¥»¥¹¤Ë¤½¤Î¾¤Î¥ª¥×¥·¥ç¥ó¤òÅϤ¹ + ¤Ë¤Ï -W ¥ª¥×¥·¥ç¥ó¤ò»È¤ï¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£ + + ¥·¥ó¥Ü¥ë¥Æ¡¼¥Ö¥ë #%d ¤ò½èÍý¤·¤Þ¤¹¡¢¥ª¥Õ¥»¥Ã¥È = 0x%.8lx, ¼ïÎà = %s + + ¥¿¡¼¥²¥Ã¥È»ÅÍÍ¥ª¥×¥·¥ç¥ó: + + ʸ½ñ²½¤µ¤ì¤Æ¤¤¤Ê¤¤ %s »ÅÍÍ¥ª¥×¥·¥ç¥ó¤â¤¢¤ê¤Þ¤¹¡£ + + ʸ½ñ²½¤µ¤ì¤Æ¤¤¤Ê¤¤¥¿¡¼¥²¥Ã¥È»ÅÍÍ¥ª¥×¥·¥ç¥ó¤â¤¢¤ê¤Þ¤¹¡£ + + ¥Ø¥Ã¥À¤È load ¥³¥Þ¥ó¥É¤ò¹¹¿·¤·¤Þ¤¹¡£ + + ldd ½ÐÎϤ¬¥³¥ó¥¹¥È¥é¥¯¥¿/¥Ç¥¹¥È¥é¥¯¥¿¤òȼ¤¤¤Þ¤¹¡£ + + write_c_file - ½ÐÎÏ̾¤Ï %s¡¢¥×¥ì¥Õ¥£¥¯¥¹¤Ï %s + ¥Ý¥¤¥ó¥¿¤«¤é¥á¥ó¥Ð¤Ø¤ÎÊÑ´¹¤Ç ¥Ý¥¤¥ó¥¿¤«¤é¥á¥ó¥Ð´Ø¿ô¤Ø¤ÎÊÑ´¹¤Ç Àè¤Ë¤¢¤ë¥á¥ó¥Ð½é´ü²½»Ò¤ÈʤÓÂØ¤¨¤é¤ì¤Þ¤¹ %-23.23s [ʸ½ñ²½¤µ¤ì¤Æ¤¤¤Ê¤¤] + (`-v --help' ¤ò»È¤¦¤È¡¢»Ò¥×¥í¥»¥¹¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó¥ª¥×¥·¥ç¥ó¤òɽ¼¨) + --help ¤³¤Î¥Ø¥ë¥×¾ðÊó¤òɽ¼¨ + --help ¤³¤Î¾ðÊó¤òɽ¼¨¤¹¤ë + --target-help ¥¿¡¼¥²¥Ã¥È¸ÇÍ­¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó¥ª¥×¥·¥ç¥ó¤òɽ¼¨ + -B ¤ò¥³¥ó¥Ñ¥¤¥é¤Îõº÷¥Ñ¥¹¤ËÄɲ乤ë + -D ¤òÄêµÁ¤·¡¢¤½¤ÎÃͤòʸ»úÎó¤Î '1' ¤È¤¹¤ë + -D= ¤òÄêµÁ¤·¡¢¤½¤ÎÃͤò ¤È¤¹¤ë + -A () ¤Ë ¤ÈÀ¼ÌÀ¤¹¤ë + -A- () ¤ò ¤È¤·¤Ê¤¤ + -U ÄêµÁ¤ò²ò½ü¤¹¤ë + -v ¥Ð¡¼¥¸¥ç¥óÈÖ¹æ¤òɽ¼¨¤¹¤ë + -E ¥×¥ê¥×¥í¥»¥¹¤Î¤ß -- ¥³¥ó¥Ñ¥¤¥ë¡¢¥¢¥»¥ó¥Ö¥ë¡¢¥ê¥ó¥¯ + ¤ò¹Ô¤Ê¤ï¤Ê¤¤ + -G ¥Ð¥¤¥È¤è¤ê¾®¤µ¤ÊÂç°è¤ª¤è¤ÓÀÅŪ¥Ç¡¼¥¿¤ò + ÆÃÊ̤ʥ»¥¯¥·¥ç¥ó¤ËÃÖ¤¯ (¥¿¡¼¥²¥Ã¥È¼¡Âè) + -H »È¤ï¤ì¤¿¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤òɽ¼¨¤¹¤ë + -C ¥³¥á¥ó¥È¤òÇË´þ¤·¤Ê¤¤ + -dM ºÇ¸å¤ËÍ­¸ú¤Ê¥Þ¥¯¥íÄêµÁ¥ê¥¹¥È¤òɽ¼¨¤¹¤ë + -dD ½ÐÎϤ˥ޥ¯¥íÄêµÁ¤òÊݸ¤¹¤ë + -dN -dD ¤ÈƱÍͤÀ¤¬¡¢Ì¾Á°¤À¤±¤òÊݸ¤¹¤ë + -dI #include ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò½ÐÎϤ˴ޤá¤ë + -M make °Í¸´Ø·¸¤òÀ¸À®¤¹¤ë + -MM -M ƱÍÍ¡¢Ã¢¤·¥·¥¹¥Æ¥à¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤ò̵»ë¤¹¤ë + -MF °Í¸´Ø·¸¤Î½ÐÎϤòÍ¿¤¨¤é¤ì¤¿¥Õ¥¡¥¤¥ë¤Ë½ñ¤­¹þ¤à + -MG ¸«¤Ä¤«¤é¤Ê¤¤¥Ø¥Ã¥À¤òÀ¸À®¤µ¤ì¤ë¥Õ¥¡¥¤¥ë¤È¤·¤Æ°·¤¦ + -MP Á´¤Æ¤Î¥Ø¥Ã¥À¤Ë¤Ä¤¤¤Æ phony ¥¿¡¼¥²¥Ã¥È¤òÀ¸À®¤¹¤ë + -MQ MAKE ¤Ç¤Î¥¯¥ª¡¼¥È¤µ¤ì¤¿¥¿¡¼¥²¥Ã¥È¤òÄɲ乤ë + -MT ¥¯¥ª¡¼¥È¤µ¤ì¤Ê¤¤¥¿¡¼¥²¥Ã¥È¤òÄɲ乤ë + -S ¥³¥ó¥Ñ¥¤¥ë¤Î¤ß -- ¥¢¥»¥ó¥Ö¥ë¡¢¥ê¥ó¥¯¤ò¹Ô¤Ê¤ï¤Ê¤¤ + -V ¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤ì¤Ð ¥Ð¡¼¥¸¥ç¥óÈÖ¹æ¤Î + gcc ¤È¤·¤Æ¼Â¹Ô¤¹¤ë + -W ÆÃÊ̤ʷٹð¤òÍ­¸ú¤Ë¤¹¤ë + -Wa, ¥«¥ó¥Þ¶èÀÚ¤ê¤Î ¤ò¥¢¥»¥ó¥Ö¥é¤ËÅϤ¹ + -Wl, ¥«¥ó¥Þ¶èÀÚ¤ê¤Î ¤ò¥ê¥ó¥«¤ËÅϤ¹ + -Wlarger-than- ¥ª¥Ö¥¸¥§¥¯¥È¤¬ ¥Ð¥¤¥È¤è¤êÂ礭¤±¤ì¤Ð·Ù¹ð¤¹¤ë + -Wno-comment{s} ¥³¥á¥ó¥È¤Ë´Ø¤¹¤ë·Ù¹ð¤ò¹Ô¤Ê¤ï¤Ê¤¤ + -Wtraditional ¸½ºß¤È¤Ï°Û¤Ê¤ë¸Å¤¤ C ¤Ç¤Îµ¡Ç½¤Ë¤Ä¤¤¤Æ·Ù¹ð¤¹¤ë + -Wno-traditional ¸Å¤¤ C ¤Ë´Ø¤¹¤ë·Ù¹ð¤ò¹Ô¤Ê¤ï¤Ê¤¤ + -Wundef ̤ÄêµÁ¤Î¥Þ¥¯¥í¤¬ #if ¤Ç»È¤ï¤ì¤Æ¤¤¤ì¤Ð·Ù¹ð¤¹¤ë + -Wno-undef ̤ÄêµÁ¥Þ¥¯¥í¤Îɾ²Á¤Ë´Ø¤¹¤ë·Ù¹ð¤ò¹Ô¤Ê¤ï¤Ê¤¤ + -Wimport #import ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÍøÍѤ˴ؤ·¤Æ·Ù¹ð¤¹¤ë + -Wno-import #import ¤ÎÍøÍѤ˴ؤ¹¤ë·Ù¹ð¤ò¹Ô¤Ê¤ï¤Ê¤¤ + -Werror Á´¤Æ¤Î·Ù¹ð¤ò¥¨¥é¡¼¤È¤·¤Æ¼è¤ê°·¤¦ + -Wno-error ·Ù¹ð¤ò¥¨¥é¡¼¤È¤·¤Æ¼è¤ê°·¤ï¤Ê¤¤ + -Wsystem-headers ¥·¥¹¥Æ¥à¥Ø¥Ã¥À¤«¤é¤Î·Ù¹ð¤òÍÞÀ©¤·¤Ê¤¤ + -Wno-system-headers ¥·¥¹¥Æ¥à¥Ø¥Ã¥À¤«¤é¤Î·Ù¹ð¤òÍÞÀ©¤¹¤ë + -Wall Á´¤Æ¤Î¥×¥ê¥×¥í¥»¥Ã¥µ·Ù¹ð¤òÍ­¸ú¤Ë¤¹¤ë + -Wp, ¥«¥ó¥Þ¶èÀÚ¤ê¤Î ¤ò¥×¥ê¥×¥í¥»¥Ã¥µ¤ËÅϤ¹ + -Wunused ̤»ÈÍѤˤĤ¤¤Æ¤Î·Ù¹ð¤òÍ­¸ú¤Ë¤¹¤ë + -Xlinker ¤ò¥ê¥ó¥«¤ËÅϤ¹ + -a ¥Ö¥í¥Ã¥¯¥×¥í¥Õ¥¡¥¤¥ë¤òÍ­¸ú¤Ë¤¹¤ë + -aux-info Àë¸À¾ðÊó¤ò ¤ØÈ¯¹Ô¤¹¤ë + -ax ¥¸¥ã¥ó¥×¥×¥í¥Õ¥¡¥¤¥ë¤òÍ­¸ú¤Ë¤¹¤ë + -b ¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤ì¤Ð¥¿¡¼¥²¥Ã¥È ¤È¤·¤Æ + gcc ¤ò¼Â¹Ô¤¹¤ë + -c ¥³¥ó¥Ñ¥¤¥ë¡¢¥¢¥»¥ó¥Ö¥ë¤¹¤ë¤¬¡¢¥ê¥ó¥¯¤ò¹Ô¤Ê¤ï¤Ê¤¤ + -d[letters] ¥³¥ó¥Ñ¥¤¥é¤Î²áÄø¤«¤é¤Î¥À¥ó¥×¤òÍ­¸ú¤Ë¤¹¤ë + -dumpbase ²áÄø¤«¤é¤Î¥À¥ó¥×¤Ë»È¤ï¤ì¤ë̾Á°¤Î¥Ù¡¼¥¹¤È¤¹¤ë + -dumpmachine ¥³¥ó¥Ñ¥¤¥é¤Î¥¿¡¼¥²¥Ã¥È¥×¥í¥»¥Ã¥µ¤òɽ¼¨ + -dumpspecs ÁȤ߹þ¤Þ¤ì¤¿ spec ʸ»úÎó¤òÁ´¤ÆÉ½¼¨ + -dumpversion ¥³¥ó¥Ñ¥¤¥é¤Î¥Ð¡¼¥¸¥ç¥ó¤òɽ¼¨ + -fcall-saved- ¤¬´Ø¿ô¤òÄ̤¸¤ÆÊÝ»ý¤µ¤ì¤ë¤È¥Þ¡¼¥¯¤¹¤ë + -fcall-used- ´Ø¿ô¸Æ¤Ó½Ð¤·¤ÇÇ˲õ¤µ¤ì¤ë ¤È¤·¤Æ¥Þ¡¼¥¯¤¹¤ë + -fdiagnostics-show-location=[once | every-line] ¿ÇÃÇ¥á¥Ã¥»¡¼¥¸¤Î²þ¹Ô¤ÎºÝ¤Ë, + ¥½¡¼¥¹°ÌÃÖ¾ðÊ󤬹Ԥκǽé¤Ëɽ¼¨¤µ¤ì¤ëÉÑÅÙ¤ò»ØÄꤹ¤ë + -ffixed- ¥³¥ó¥Ñ¥¤¥é¤ËÂФ· ¤ò»ÈÍÑÉԲĤȥޡ¼¥¯¤¹¤ë + -finline-limit= ¥¤¥ó¥é¥¤¥ó´Ø¿ô¤Î¥µ¥¤¥º¤ò ¤ËÀ©¸Â¤¹¤ë + -fmessage-length= ¿ÇÃÇ¥á¥Ã¥»¡¼¥¸¤ÎŤµ¤ò°ì¹ÔÊÕ¤ê ʸ»ú¤ËÀ©¸Â¤¹¤ë¡£ 0 ¤À¤È²þ¹Ô¤òÍÞÀ©¤¹¤ë + -fpreprocessed ÆþÎÏ¥Õ¥¡¥¤¥ë¤ò´û¤Ë¥×¥ê¥×¥í¥»¥¹ºÑ¤È¤·¤Æ°·¤¦ + -ftabstop= ¥«¥é¥à¤Î¥¿¥Ö´Ö³Ö¤òÊó¹ð¤¹¤ë + -P #line ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤òÀ¸À®¤·¤Ê¤¤ + -$ ¼±Ê̻ҤǤΠ'$' ¤òµö²Ä¤·¤Ê¤¤ + -remap ¥Õ¥¡¥¤¥ë¥¤¥ó¥¯¥ë¡¼¥É»þ¤Ë¥Õ¥¡¥¤¥ë̾¤òºÆ¥Þ¥Ã¥×¤¹¤ë + --version ¥Ð¡¼¥¸¥ç¥ó¾ðÊó¤òɽ¼¨¤¹¤ë + -h or --help ¤³¤Î¾ðÊó¤òɽ¼¨¤¹¤ë + -fsched-verbose= ¥¹¥±¥¸¥å¡¼¥é¤ÎñÁÀå¥ì¥Ù¥ë¤òÀßÄꤹ¤ë + -idirafter ¤ò¥·¥¹¥Æ¥à include ¥Ñ¥¹¤Î½ª¤ê¤ËÄɲ乤ë + -I ¤ò¥á¥¤¥ó include ¥Ñ¥¹¤Î½ª¤ê¤ËÄɲ乤ë + -I- ¤­¤áºÙ¤«¤Ê include ¥Ñ¥¹À©¸æ -- info ʸ½ñ¤ò»²¾È + -nostdinc ¥·¥¹¥Æ¥à include ¥Ç¥£¥ì¥¯¥È¥ê¤òõº÷¤·¤Ê¤¤ + (-system ¤Ç»ØÄꤵ¤ì¤¿¥Ç¥£¥ì¥¯¥È¥ê¤Ïõº÷¤µ¤ì¤ë) + -nostdinc++ C++ ÍÑ¥·¥¹¥Æ¥à include ¥Ç¥£¥ì¥¯¥È¥ê¤òõº÷¤·¤Ê¤¤ + -o ¤Ø½ÐÎϤ¹¤ë + -lang-c++ ÆþÎÏ¥½¡¼¥¹¤ò C ¤È¤ß¤Ê¤¹ + -lang-objc ÆþÎÏ¥½¡¼¥¹¤ò ObjectiveC ¤È¤ß¤Ê¤¹ + -lang-objc++ ÆþÎÏ¥½¡¼¥¹¤ò ObjectiveC++ ¤È¤ß¤Ê¤¹ + -lang-asm ÆþÎÏ¥½¡¼¥¹¤ò¥¢¥»¥ó¥Ö¥ê¸À¸ì¤È¤ß¤Ê¤¹ + -m%-23.23s [ʸ½ñ²½¤µ¤ì¤Æ¤¤¤Ê¤¤] + -o ¤Ë½ÐÎϤò¹Ô¤Ê¤¦ + -o ½ÐÎϤò ¤Ë½ñ¤­¹þ¤à + -p ´Ø¿ô¥×¥í¥Õ¥¡¥¤¥ë¤òÍ­¸ú¤Ë¤¹¤ë + -pass-exit-codes ¥Õ¥§¡¼¥º¤«¤é¤Î¥¨¥é¡¼¥³¡¼¥É¤ÎºÇÂçÃͤò exit + ¥³¡¼¥É¤È¤·¤ÆÊÖ¤¹ + -pedantic ¸·Ì©¤Ê ISO C ¤ÇÍ׵ᤵ¤ì¤ëÁ´¤Æ¤Î·Ù¹ð¤òȯ¹Ô¤¹¤ë + -pedantic-errors -pedantic ·Ù¹ð¤ÎÂå¤ê¤Ë¥¨¥é¡¼¤òȯ¹Ô¤¹¤ë + -trigraphs ISO C ¥È¥é¥¤¥°¥é¥Õ¤ò¼õ¤±Æþ¤ì¤ë + -lang-c ÆþÎÏ¥½¡¼¥¹¤ò C ¤È¤ß¤Ê¤¹ + -lang-c89 ÆþÎÏ¥½¡¼¥¹¤ò C89 ¤È¤ß¤Ê¤¹ + -pedantic ¸·Ì©¤Ê ISO C ¤Ø¤ÎŬ¹ç¤ËÍפ¹¤ë·Ù¹ð¤òȯ¤¹¤ë + -pedantic-errors -pedantic ¤ÈƱÍͤÀ¤¬¡¢¥¨¥é¡¼¤òȯÀ¸¤µ¤»¤ë + -pipe Ãæ´Ö¥Õ¥¡¥¤¥ë¤Ç¤Ï¤Ê¤¯¥Ñ¥¤¥×¤ò»È¤¦ + -print-file-name= ¥é¥¤¥Ö¥é¥ê ¤Ø¤Î¥Õ¥ë¥Ñ¥¹¤òɽ¼¨ + -print-libgcc-file-name ¥³¥ó¥Ñ¥¤¥é¤Î¥³¥ó¥Ñ¥Ë¥ª¥ó¥é¥¤¥Ö¥é¥ê̾¤òɽ¼¨ + -print-multi-directory libgcc ¤Î¥Ð¡¼¥¸¥ç¥ó¥Ç¥£¥ì¥¯¥È¥ê¥ë¡¼¥È¤òɽ¼¨ + -print-multi-lib ¥³¥Þ¥ó¥É¥é¥¤¥ó¥ª¥×¥·¥ç¥ó¤ÈÊ£¿ô¤Î¥é¥¤¥Ö¥é¥êõº÷ + ¥Ç¥£¥ì¥¯¥È¥ê¤È¤ÎÂбþ¤òɽ¼¨ + -print-prog-name= ¥³¥ó¥Ñ¥¤¥é¤ÎÉôÉÊ ¤Ø¤Î¥Õ¥ë¥Ñ¥¹¤òɽ¼¨ + -print-search-dirs ¥³¥ó¥Ñ¥¤¥é¤Î¥µ¡¼¥Á¥Ñ¥¹¤Ë¤¢¤ë¥Ç¥£¥ì¥¯¥È¥ê¤òɽ¼¨ + -quiet ¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤¿´Ø¿ô¤ä·Ð²á»þ´Ö¤òɽ¼¨¤·¤Ê¤¤ + -save-temps Ãæ´Ö¥Õ¥¡¥¤¥ë¤òºï½ü¤·¤Ê¤¤ + -std= ÆþÎÏ¥½¡¼¥¹¤ò ¤È¸«¤Ê¤¹ + -std= Ŭ¹ç¤µ¤»¤ëɸ½à¤ò»ØÄê -- °Ê²¼¤è¤ê°ì¤Ä + gnu89, gnu99, c89, c99, iso9899:1990, + iso9899:199409, iso9899:1999 + -+ C++ ¼°¤Î¹½Ê¸²òÀϤòµö²Ä¤¹¤ë + -w ·Ù¹ð¥á¥Ã¥»¡¼¥¸¤òÍÞÀ©¤¹¤ë + -Wtrigraphs ¥È¥é¥¤¥°¥é¥Õ¤Ë½Ð¤¯¤ï¤·¤¿¤é·Ù¹ð¤¹¤ë + -Wno-trigraphs ¥È¥é¥¤¥°¥é¥Õ¤Ë¤Ä¤¤¤Æ¤Î·Ù¹ð¤ò¹Ô¤Ê¤ï¤Ê¤¤ + -Wcomment{s} ¥³¥á¥ó¥È¤¬Â¾¤Î¥³¥á¥ó¥ÈÆâ¤Ç»Ï¤Þ¤Ã¤Æ¤¤¤¿¤é·Ù¹ð¤¹¤ë + -time »Ò¥×¥í¥»¥¹¤´¤È¤Î¼Â¹Ô»þ´Ö¤ò·×¬¤¹¤ë + -v ¥³¥ó¥Ñ¥¤¥é¤Ë¤è¤Ã¤Æµ¯Æ°¤µ¤ì¤ë¥×¥í¥°¥é¥à¤òɽ¼¨ + -version ¥³¥ó¥Ñ¥¤¥é¤Î¥Ð¡¼¥¸¥ç¥ó¤òɽ¼¨¤¹¤ë + -w ·Ù¹ð¤òÍÞÀ©¤¹¤ë + ¤³¤ì¤é¤Ï¸ºß¤·¤Þ¤¹¤¬¡¢Ê¸½ñ²½¤µ¤ì¤Æ¤¤¤Þ¤»¤ó + °Ê²¼¤Î²¾ÁÛ´Ø¿ô¤¬Ãê¾Ý¤Ç¤¢¤ë¤¿¤á¤Ç¤¹: catch ¥Ö¥í¥Ã¥¯¤ËÆþ¤ê¤Þ¤¹ try ¥Ö¥í¥Ã¥¯¤ËÆþ¤ê¤Þ¤¹ ¤³¤³¤«¤é throw ¤µ¤ì¤¿¼°¤ÎÃæ Àë¸À½ç¤È°ìÃפ¹¤ë¤è¤¦¤ËʤÓÂØ¤¨¤é¤ì¤Þ¤¹ ÇÉÀ¸½ç¤È°ìÃפ¹¤ë¤è¤¦¤ËʤÙÂØ¤¨¤é¤ì¤Þ¤¹ %s ¹ç·× :"%.*s" ¤¬ºÆÄêµÁ¤µ¤ì¤Þ¤·¤¿#line ¤Î¸å¤í¤Î "%s" ¤¬Àµ¤ÎÀ°¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"%s" ¤Ï¥Þ¥¯¥í̾¤È¤·¤Æ¤Ï»È¤¨¤Þ¤»¤ó"%s" ¤Ï C++ ¤Î±é»»»Ò¤Ç¤¢¤ê¡¢¥Þ¥¯¥í̾¤È¤·¤Æ»ÈÍѤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó"%s" ¤ÏÀµ¾ï¤Ê¥Õ¥¡¥¤¥ë̾¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"%s" ¤Ï¥×¥ê¥×¥í¥»¥Ã¥µ¤ËÂФ¹¤ëÀµ¾ï¤Ê¥ª¥×¥·¥ç¥ó¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"%s" ¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"%s" ¤Ï¥Þ¥¯¥í²¾°ú¿ô¥ê¥¹¥È¤Ë¸½¤ì¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó"%s" ¤¬ºÆ¥¢¥µ¡¼¥È¤µ¤ì¤Þ¤·¤¿"%s" ¤¬ºÆÄêµÁ¤µ¤ì¤Þ¤·¤¿¥³¥á¥ó¥ÈÆâ¤Ë "/*" ¤¬¤¢¤ê¤Þ¤¹"¥¹¥â¡¼¥ë¥ì¥¸¥¹¥¿¥¯¥é¥¹" ¤Î¥Ä¥®¥Ï¥®(kludge)¤ò¹Ô¤Ê¤¦"defined" ¤ò¥Þ¥¯¥í̾¤È¤·¤Æ¤Ï»È¤¨¤Þ¤»¤ó# %s %.2f %.2f + # ±é»»»Ò¤Î¸å¤í¤Ë¤Ï¥Þ¥¯¥í°ú¿ô̾¤¬Â³¤¤¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó#%s ¤Ï "¥Õ¥¡¥¤¥ë̾" ¤¢¤ë¤¤¤Ï <¥Õ¥¡¥¤¥ë̾> ¤òɬÍפȤ·¤Þ¤¹#%s ¤Ï GCC ¤Î³ÈÄ¥¤Ç¤¹#%s ¤¬¾ò·ïʸ¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤ó¥Õ¥¡¥¤¥ë¤Ø¤Î½ÐÆþ¤ê¸ý¤È¤Ê¤ë #-¹Ô ¤¬À°¹ç¤·¤Þ¤»¤ó#elif ¤¬ #else ¤Î¸å¤í¤Ë¤¢¤ê¤Þ¤¹#elif ¤¬¾ò·ïʸ¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤ó#elif ¤Ë #if ¤¬¤¢¤ê¤Þ¤»¤ó#else ¤¬ #else ¤Î¸å¤í¤Ë¤¢¤ê¤Þ¤¹#else ¤¬¾ò·ïʸ¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤ó#else ¤Î¸å¤í¤Ë #else ¤ä #elif ¤¬¤¢¤ê¤Þ¤¹#else ¤Ë #if ¤¬¤¢¤ê¤Þ¤»¤ó#endif ¤Ë #if ¤¬¤¢¤ê¤Þ¤»¤ó#error%.*s#import ¤Ï¸Å¤¤É½¸½¤Ç¤¹. ¥Ø¥Ã¥À¥Õ¥¡¥¤¥ëÃæ¤Ç #ifndef ¤Î¥é¥Ã¥Ñ¡¼¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤#include "..." ¤Îõº÷¤Ï¤³¤³¤«¤é»Ï¤Þ¤ê¤Þ¤¹: + #include <...> ¤Îõº÷¤Ï¤³¤³¤«¤é»Ï¤Þ¤ê¤Þ¤¹: + #include ¤Î¸å¤Ë¤Ï "fname" ¤ä ¤¬É¬ÍפǤ¹#include ¤Î¥Í¥¹¥È¤¬¿¼¤¹¤®¤Þ¤¹#include_next ¤¬¼ç¤¿¤ë¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤Ë¤¢¤ê¤Þ¤¹#pragma GHS endXXX ¤¬Á°¤Î startXXX ¤ÈŬ¹ç¤·¤Þ¤»¤ó#pragma GHS endXXXX ¤¬Á°¤Î startXXX ̵¤·¤Ç¸«¤Ä¤«¤ê¤Þ¤·¤¿%s ¤Ø¤Î #pragma implementation ¤Ï¥Õ¥¡¥¤¥ë¤¬ include ¤µ¤ì¤¿¸å¤Ç½Ð¸½¤·¤Þ¤·¤¿#pragma once ¤¬¥á¥¤¥ó¥Õ¥¡¥¤¥ë¤Ë¤¢¤ê¤Þ¤¹#pragma once ¤Ï¤â¤¦»È¤ï¤ì¤Æ¤¤¤Þ¤»¤ó#pragma pack (pop) ¤¬¡¢Âбþ¤¹¤ë #pragma pack (push, ) ¤Ê¤·¤Ë½Ð¸½¤·¤Þ¤·¤¿#pragma pack(pop, %s) ¤¬¡¢Âбþ¤¹¤ë #pragma pack(push, %s) ¤Ê¤·¤Ë½Ð¸½¤·¤Þ¤·¤¿include ¥Õ¥¡¥¤¥ë³°¤Î #pragma system_header ¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿#warning%.*s%%S ¤ÏÁ´¤Æ¤¬ 0 ¤Î¥Þ¥¹¥¯¤ò·×»»¤·¤Þ¤·¤¿%%S ¤ÏÁ´¤Æ¤¬ 1 ¤Î¥Þ¥¹¥¯¤ò·×»»¤·¤Þ¤·¤¿%6.2f%%(%d ËÜÃæ) ¤Î¥Ö¥é¥ó¥Á¤¬¥Õ¥¡¥¤¥ë %s ¤Ç¼Â¹Ô¤µ¤ì¤Þ¤·¤¿ + %6.2f%%(%d ËÜÃæ) ¤Î¥Ö¥é¥ó¥Á¤¬´Ø¿ô %s Æâ¤Ç¼Â¹Ô¤µ¤ì¤Þ¤·¤¿ + %6.2f%%(%d ËÜÃæ) ¤Î¥Ö¥é¥ó¥Á¤¬¾¯¤Ê¤¯¤È¤â°ì²ó¤Ï¥Õ¥¡¥¤¥ë %s ¤Ç¼õ¼è¤é¤ì¤Þ¤·¤¿ + %6.2f%%(%d ËÜÃæ) ¤Î¥Ö¥é¥ó¥Á¤¬¾¯¤Ê¤¯¤È¤â°ìÅ٤ϴؿô %s ¤Ç¼õ¼è¤é¤ì¤Þ¤·¤¿ + %6.2f%%(%d ²óÃæ) ¤Î¸Æ¤Ó½Ð¤·¤¬¥Õ¥¡¥¤¥ë %s Æâ¤Ç¼Â¹Ô¤µ¤ì¤Þ¤·¤¿ + %6.2f%%(%d ²ó) ¤Î¸Æ¤Ó½Ð¤·¤¬´Ø¿ô %s ¤Ç¼Â¹Ô¤µ¤ì¤Þ¤·¤¿ + %6.2f%%(%d ¹ÔÃæ) ¤Î¥½¡¼¥¹¹Ô¤¬¥Õ¥¡¥¤¥ë %s ¤Ç¼Â¹Ô¤µ¤ì¤Þ¤·¤¿ + %6.2f%%(%d ¹ÔÃæ) ¤Î¥½¡¼¥¹¹Ô¤¬´Ø¿ô %s ¤Ç¼Â¹Ô¤µ¤ì¤Þ¤·¤¿ + %R ¤Î¸å¤Ë %B/C/D/E ¤ÏÃÖ¤±¤Þ¤»¤ó%d ¸Ä¤Î¥³¥ó¥¹¥È¥é¥¯¥¿¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿ + %d ¸Ä¤Î¥Ç¥¹¥È¥é¥¯¥¿¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿ + %d ¸Ä¤Î¥Õ¥ì¡¼¥à¥Æ¡¼¥Ö¥ë¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿ + %s%s + %s %s `%s' ¤Ï `%s' ¥×¥í¥È¥³¥ë¤ò´°Á´¤Ë¤Ï¼ÂÁõ¤·¤Æ¤¤¤Þ¤»¤ó%s ¤È¥×¥í¥Õ¥¡¥¤¥ê¥ó¥°¤Ï¶¥¹ç¤·¤Þ¤¹: %s ¤ò̵¸ú²½¤·¤Þ¤¹¥×¥í¥È¥¿¥¤¥×¤Ë¤è¤ë¤È %s ¤Ï `double' ¤Ç¤Ê¤¯ `float' ¤È¤µ¤ì¤Æ¤¤¤Þ¤¹¥×¥í¥È¥¿¥¤¥×¤Ë¤è¤ë¤È %s ¤ÏÉâÆ°¾®¿ô·¿¤Ç¤Ï¤Ê¤¯Ê£ÁÇ¿ô·¿¤È¤µ¤ì¤Æ¤¤¤Þ¤¹¥×¥í¥È¥¿¥¤¥×¤Ë¤è¤ë¤È %s ¤ÏÀ°¿ô·¿¤Ç¤Ï¤Ê¤¯Ê£ÁÇ¿ô·¿¤È¤µ¤ì¤Æ¤¤¤Þ¤¹¥×¥í¥È¥¿¥¤¥×¤Ë¤è¤ë¤È %s ¤ÏÊ£ÁÇ¿ô¤Ç¤Ï¤Ê¤¯ÉâÆ°¾®¿ô·¿¤È¤µ¤ì¤Æ¤¤¤Þ¤¹¥×¥í¥È¥¿¥¤¥×¤Ë¤è¤ë¤È %s ¤ÏÀ°¿ô·¿¤Ç¤Ï¤Ê¤¯ÉâÆ°¾®¿ô·¿¤È¤µ¤ì¤Æ¤¤¤Þ¤¹¥×¥í¥È¥¿¥¤¥×¤Ë¤è¤ë¤È %s ¤ÏÊ£ÁÇ¿ô¤Ç¤Ï¤Ê¤¯À°¿ô·¿¤È¤µ¤ì¤Æ¤¤¤Þ¤¹¥×¥í¥È¥¿¥¤¥×¤Ë¤è¤ë¤È %s ¤ÏÉâÆ°¾®¿ô·¿¤Ç¤Ï¤Ê¤¯À°¿ô·¿¤È¤µ¤ì¤Æ¤¤¤Þ¤¹¥×¥í¥È¥¿¥¤¥×¤Ë¤è¤ê %s ¤ÏÉä¹çÉÕ¤­¤È¤µ¤ì¤Æ¤¤¤Þ¤¹¥×¥í¥È¥¿¥¤¥×¤Ë¤è¤ê %s ¤ÏÉä¹ç¤Ê¤·¤È¤µ¤ì¤Æ¤¤¤Þ¤¹ÆþÎϤκǸå¤Ë %s%s ¤¬ "%s" ¤ÎÁ°¤Ë¤¢¤ê¤Þ¤¹%s ¤¬ %s'%c' ¤ÎÁ°¤Ë¤¢¤ê¤Þ¤¹%s ¤¬ %s'\x%x' ¤ÎÁ°¤Ë¤¢¤ê¤Þ¤¹%s ¤¬ '%s' ¥È¡¼¥¯¥ó¤ÎÁ°¤Ë¤¢¤ê¤Þ¤¹%s ¤¬ `%c' ¤ÎÁ°¤Ë¤¢¤ê¤Þ¤¹%s ¤¬ `%s' ¤ÎÁ°¤Ë¤¢¤ê¤Þ¤¹%s ¤¬ `%s' ¥È¡¼¥¯¥ó¤ÎÁ°¤Ë¤¢¤ê¤Þ¤¹%s ¤¬ `\%o' ¤ÎÁ°¤Ë¤¢¤ê¤Þ¤¹¿ôÃÍÄê¿ô¤ÎÁ°¤Ë %sʸ»úÎóÄê¿ô¤ÎÁ°¤Ë %s%s ¤Ï¥»¥¯¥·¥ç¥ó¥¿¥¤¥×¤Î¶¥¹ç¤ò°ú¤­µ¯¤³¤·¤Þ¤¹%s¤¬²¾°ú¿ôÆâ¤ÇÄêµÁ¤µ¤ì¤Þ¤·¤¿%s ¤¬Ìµ¸ú¤Ç¤¹¡£Ä̾ï¥Ç¥Ð¥Ã¥°¥Õ¥é¥°¤ò»È¤¤¤Þ¤·¤ç¤¦%s¤Ë¤è¤ê¡¢¥Ý¥¤¥ó¥¿¤Î¼¨¤¹·¿¤«¤é¤Î½¤¾þ»Ò¤¬ÀÚ¤ê¼Î¤Æ¤é¤ì¤Þ¤¹%s ¤Ï %%n$ ±é»»»ÒÈÖ¹æ¥Õ¥©¡¼¥Þ¥Ã¥È¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó%s ¤Ï %s ¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó%s ¤Ï %s ¤ò `%%%c' %s ¥Õ¥©¡¼¥Þ¥Ã¥È¤È°ì½ï¤Ë»È¤¦»ö¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó%s ¤Ï `%%%c' %s ¥Õ¥©¡¼¥Þ¥Ã¥È¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó%s ¤Ï `%%%s%c' %s ¥Õ¥©¡¼¥Þ¥Ã¥È¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó%s ¤Ï `%s' %s Ťµ½¤¾þ»Ò¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó¥Õ¥©¡¼¥Þ¥Ã¥È¤Ï %s ¤Ç¤¹¤¬¡¢°ú¿ô¤Ï %s ¤Ç¤¹ (°ú¿ô %d)¸ß´¹À­¤Î¤Ê¤¤¥Ý¥¤¥ó¥¿·¿¤«¤é¤Î%s¤Ç¤¹%s ´Ø¿ô, Îΰè %d, ¥ª¥Õ¥»¥Ã¥È = %ld (0x%.8lx) + %s¤¬%s¤ò»ý¤Ã¤Æ¤¤¤Þ¤»¤ó%s ¤Ë `%s' ¤È¤¤¤¦Ì¾Á°¤Î¥á¥ó¥Ð¤Ï¤¢¤ê¤Þ¤»¤ó%s ¤Ï %s µÚ¤Ó `%%%c' %s ¥Õ¥©¡¼¥Þ¥Ã¥È¤È°ì½ï¤Ë»È¤¦¤È̵»ë¤µ¤ì¤Þ¤¹%s ¤Ï %s ¤ò %s ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç°ì½ï¤Ë»È¤¦¤È̵»ë¤µ¤ì¤Þ¤¹¥×¥ê¥×¥í¥»¥¹Ì¿ÎáÃæ¤Ë %s ¤¬¤¢¤ê¤Þ¤¹%s ¤Ï¥Ö¥í¥Ã¥¯¥Ç¥Ð¥¤¥¹¤Ç¤¹%s ¤Ï¤³¤Î¥³¥ó¥Õ¥£¥®¥å¥ì¡¼¥·¥ç¥ó¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó%s ¤Ï·¿ %s ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó (°ú¿ô %d)%s ¤¬ËÜÍè¤è¤ê¤âû¤¤¤Ç¤¹%s ¤ÏÂ礭¤¹¤®¤Þ¤¹%s¤Ë¤è¤ê¡¢¥­¥ã¥¹¥È¤Ê¤·¤Ç¥Ý¥¤¥ó¥¿¤«¤éÀ°¿ô¤òºî¤ê¤Þ¤·¤¿%s¤Ë¤è¤ê¡¢¥­¥ã¥¹¥È¤Ê¤·¤ÇÀ°¿ô¤«¤é¥Ý¥¤¥ó¥¿¤òºî¤ê¤Þ¤·¤¿%s¤Ë¤è¤ê¡¢½¤¾þ¤µ¤ì¤Ê¤¤´Ø¿ô¥Ý¥¤¥ó¥¿¤«¤é¡¢½¤¾þ¤µ¤ì¤¿´Ø¿ô¥Ý¥¤¥ó¥¿¤òºî¤ê¤Þ¤¹%s ¤ÏºÇÁ᥵¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó -- -fno-vxt -ff90 ¤È¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤%s ¤ÏºÇÁ᥵¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó -- -fvxt ¤È¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤%s¤¬ÆÉ¤ß¹þ¤ßÀìÍÑÎΰè¤Ç¹Ô¤ï¤ì¤Þ¤·¤¿%s¤¬ÆÉ¤ß¹þ¤ßÀìÍÑ¥á¥ó¥Ð `%s' ¤Ë¹Ô¤ï¤ì¤Þ¤·¤¿%s¤¬ÆÉ¤ß¹þ¤ßÀìÍÑÊÑ¿ô `%s' ¤Ë¹Ô¤ï¤ì¤Þ¤·¤¿asm ¤Ç¤Ï %s ½¤¾þ»Ò¤¬Ìµ»ë¤µ¤ì¤Þ¤¹%s ¤Ï exit ¾õÂÖ %d ¤òÊÖ¤·¤Þ¤·¤¿%s ¥í¡¼¥Æ¡¼¥È²ó¿ô >= ·¿¤ÎÉý¤Ç¤¹%s ¥í¡¼¥Æ¡¼¥È²ó¿ô¤¬Éé¤ÎÃͤǤ¹%s ¥·¥°¥Ê¥ë %d [%s]%s ¤Ç½ªÎ»¤µ¤»¤é¤ì¤Þ¤·¤¿%s ¤¬ `%%%c' %s ¥Õ¥©¡¼¥Þ¥Ã¥È¤È°ì½ï¤Ë»È¤ï¤ì¤Þ¤·¤¿%s ¤Ï¥×¥í¥È¥¿¥¤¥×¤Ç¤Î·¿¤ÎÉý¤È¤Ï°Û¤Ê¤Ã¤Æ¤¤¤Þ¤¹%s%s%s version %s (%s) + %s compiled by GNU C version %s. + %s%s%s version %s (%s) compiled by CC. + %s-%s ¤¬¶õ¤ÎÈϰϤǤ¹%s. + %s%s: %d: `%s' ¤Ï»È¤ï¤ì¤Æ¤¤¤Þ¤¹¤¬ SYSCALLS ¤Ë¤¢¤ê¤Þ¤»¤ó + %s: %d: ·Ù¹ð: `%s' ¤Ï¥×¥ê¥×¥í¥»¥¹¤«¤é½ü³°¤µ¤ì¤Æ¤¤¤Þ¤¹ + %s: %d: ·Ù¹ð: %s ¤ÎÄêµÁ¤¬ÊÑ´¹¤µ¤ì¤Æ¤¤¤Þ¤»¤ó + %s: %d: ·Ù¹ð: `%s' ¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿¤¬ `%s' ¤¬´üÂÔ¤µ¤ì¤Æ¤¤¤Þ¤¹ + %s: %d: ·Ù¹ð: `%s' ¤ËÂФ¹¤ë³°ÉôÄêµÁ¤¬¤¢¤ê¤Þ¤»¤ó + %s: %d: ·Ù¹ð: ¥½¡¼¥¹¤¬º®Í𤷤¹¤®¤Æ¤¤¤Þ¤¹ + %s: %d: ·Ù¹ð: varargs ´Ø¿ôÀë¸À¤¬ÊÑ´¹¤µ¤ì¤Æ¤¤¤Þ¤»¤ó + %s: %s%s: %s ¥³¥ó¥Ñ¥¤¥é¤Ï¤³¤Î¥·¥¹¥Æ¥à¤Ë¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤Þ¤»¤ó%s: %s ¤Ï¥¹¥Æ¡¼¥¿¥¹ %d ¤Ç½ªÎ»¤·¤Þ¤·¤¿ + %s: %s: %s: %s: ¾õÂÖ¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó: %s + %s: `%s' ¤Î½é´ü²½: + %s: NaN - Áàºî¤òÀ¸¤¸¤Þ¤¹%s: ¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó%s: `%s' ¤ÏÊÑ´¹¤µ¤ì¤Æ¤¤¤Þ¤»¤ó + %s: °ú¿ôÎΰ襨¥é¡¼¤Ç¤¹%s: ¥Õ¥¡¥¤¥ë `%s' ¤Î¥â¡¼¥É¤òÊѹ¹¤Ç¤­¤Þ¤»¤ó: %s + %s: ¤­¤ì¤¤¤Ê¥Õ¥¡¥¤¥ë `%s' ¤òºîÀ®/¥ª¡¼¥×¥ó¤Ç¤­¤Þ¤»¤ó: %s + %s: ½ÐÎÏ¥Õ¥¡¥¤¥ë `%s' ¤òºîÀ®¤·¤¿¤ê³«¤¤¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó: %s + %s: Éû info ¥Õ¥¡¥¤¥ë `%s' ¤òºï½ü¤Ç¤­¤Þ¤»¤ó: %s + %s: ¥Õ¥¡¥¤¥ë `%s' ¤òºï½ü¤Ç¤­¤Þ¤»¤ó: %s + %s: ¥Õ¥¡¥¤¥ë `%s' ¤Î¾õÂÖ¤ò¼èÆÀ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó: %s + %s: Éû info ¥Õ¥¡¥¤¥ë `%s' ¤Î¾õÂÖ¤ò¼èÆÀ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó: %s + %s: ¥Õ¥¡¥¤¥ë `%s' ¤ò `%s' ¤Ë¥ê¥ó¥¯¤Ç¤­¤Þ¤»¤ó: %s + %s: Éû info ¥Õ¥¡¥¤¥ë `%s' ¤òÆÉ¤ß¹þ¤ßÍѤ˳«¤¯¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó: %s + %s: ÆÉ¤ß¹þ¤ßÍѤ˥ե¡¥¤¥ë `%s' ¤ò³«¤¯¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó: %s + %s: Éû info ¥Õ¥¡¥¤¥ë `%s' ¤òÆÉ¤à¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó: %s + %s: ºî¶È¥Ç¥£¥ì¥¯¥È¥ê¤¬Ê¬¤«¤ê¤Þ¤»¤ó: %s + %s: COFF ¥Õ¥¡¥¤¥ë¤È¤·¤Æ³«¤±¤Þ¤»¤ó%s: `%s' ¤ò¥³¥ó¥Ñ¥¤¥ëÃæ + %s: `%s' ¤ËÂФ¹¤ëÌ·½â°ìÍ÷¤Ï°Ê²¼¤ÎÄ̤ê¤Ç¤¹: + %s: '%s' ¤Î³°ÉôÄêµÁ¤¬Ì·½â¤·¤Æ¤¤¤Þ¤¹ + %s: ¥Õ¥¡¥¤¥ë `%s' ¤òÊÑ´¹Ãæ + %s: ´Ø¿ô `%s' ¤ÎÀë¸À¤¬ÊÑ´¹¤µ¤ì¤Æ¤¤¤Þ¤»¤ó + %s: '%s' ¤ÎÀë¸À¤ÏÊÑ´¹¤µ¤ì¤Þ¤»¤ó + %s: ´Ø¿ô `%s' ¤ÎÄêµÁ¤¬ÊÑ´¹¤µ¤ì¤Æ¤¤¤Þ¤»¤ó + %s: Éû info ¥Õ¥¡¥¤¥ë `%s' ¤òÊĤ¸¤Æ¤¤¤ëºÇÃæ¤Ë¥¨¥é¡¼: %s + %s: Éû info ¥Õ¥¡¥¤¥ë `%s' ¤òÆÉ¤ß¹þ¤ßÃæ¤Ë¥¨¥é¡¼: %s + %s: ¥Õ¥¡¥¤¥ë `%s' ¤Ë½ñ¤­¹þ¤ßÃæ¤Ë¥¨¥é¡¼: %s + %s: `%s' ¤ÎÄêµÁ¤¬ %s(%d) ¤Ë¸«¤Ä¤«¤ê¤Þ¤·¤¿ + %s: ´Ø¿ô¤ÎÄêµÁ¤¬ÊÑ´¹¤µ¤ì¤Æ¤¤¤Þ¤»¤ó + %s: ´Ø¿ô¤Îñ°ìÀ­%s: ¥Õ¥¡¥¤¥ë `%s' ¤ÎÂç°èÀë¸À¤¬ÁÞÆþ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó + %s: ÆþÎÏ¥Õ¥¡¥¤¥ë̾¤Ë¤Ï³ÈÄ¥»Ò .c ¤¬¤Ê¤±¤ì¤Ð¤¤¤±¤Þ¤»¤ó: %s + %s: ÆâÉôÃæÃÇ + %s: ̵¸ú¤Ê¥Õ¥¡¥¤¥ë̾: %s + %s: ¥ê¥ó¥¯¤¬´°Î»¤·¤Ê¤«¤Ã¤¿¤Î¤Ç¥ê¥ó¥«¤ÎÆþÎÏ¥Õ¥¡¥¤¥ë¤Ï»È¤ï¤ì¤Þ¤»¤ó¤Ç¤·¤¿%s: ´Ø¿ô `%s' ¤Î¥í¡¼¥«¥ëÀë¸À¤¬ÁÞÆþ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó + %s: `%s' ¤ÎÀÅŪÄêµÁ¤¬¥Õ¥¡¥¤¥ë `%s' ¤ÎÃæ¤Ç½ÅÊ£¤·¤Æ¤¤¤Þ¤¹ + %s: COFF ¥Õ¥¡¥¤¥ë¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó%s: ¥ª¡¼¥Ð¡¼¥Õ¥í¡¼Èϰϥ¨¥é¡¼%s: ÉôʬŪ¤ÊÀºÅÙ¤ÎÄã²¼%s: ¥µ¥Ö¥×¥í¥»¥¹¤¬Ã×̿Ū¥·¥°¥Ê¥ë %d ¤ò¼õ¤±¼è¤ê¤Þ¤·¤¿ + %s: Á´ÂÎŪ¤ÊÀºÅÙ¤ÎÄã²¼%s: ¥¢¥ó¥À¡¼¥Õ¥í¡¼Èϰϥ¨¥é¡¼%s: »ÈÍÑË¡ '%s [ -VqfnkN ] [ -i ] [ ¥Õ¥¡¥¤¥ë̾ ... ]' + %s: »ÈÍÑË¡ '%s [ -VqfnkNlgC ] [ -B <¥Ç¥£¥ì¥¯¥È¥ê̾> ] [ ¥Õ¥¡¥¤¥ë̾ ... ]' + %s: ÂÔ¤Á: %s + %s: ·Ù¹ð: %s: ·Ù¹ð: ¥Õ¥¡¥¤¥ë `%s' ¤ò `%s' ̾Á°Êѹ¹¤Ç¤­¤Þ¤»¤ó: %s + %s: ·Ù¹ð: ¥Õ¥¡¥¤¥ë `%s' ¤Ï´û¤Ë `%s' ¤ËÊݸ¤µ¤ì¤Æ¤¤¤Þ¤¹ + %s: ·Ù¹ð: SYSCALLS ¥Õ¥¡¥¤¥ë `%s' ¤¬¤¢¤ê¤Þ¤»¤ó + %s: ·Ù¹ð: ¥Õ¥¡¥¤¥ë `%s' ¤ËÂФ·¤ÆÆÉ¤ß½Ð¤·µö²Ä¤¬¤¢¤ê¤Þ¤»¤ó + %s: ·Ù¹ð: `%s' ¤ÎÀÅŪÄêµÁ¤¬¥Õ¥¡¥¤¥ë `%s' ¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤ó + %s: ·Ù¹ð: `%s' ¤ò´Þ¤à¥Ç¥£¥ì¥¯¥È¥ê¤ËÂФ·¤Æ½ñ¤­¹þ¤ßµö²Ä¤¬¤¢¤ê¤Þ¤»¤ó + %s: ·Ù¹ð: ¥Õ¥¡¥¤¥ë `%s' ¤ËÂФ·¤Æ½ñ¤­¹þ¤ßµö²Ä¤¬¤¢¤ê¤Þ¤»¤ó + %s: ·Ù¹ð: `%s' ¤ÎÀë¸À¤Ç¤Î²¾°ú¿ô¥ê¥¹¥È¤¬Â¿¤¹¤®¤Þ¤¹ + %s: ·Ù¹ð: %s(%d) ¤«¤é¤Î·Á¼°¥ê¥¹¥È¤ò¡¢´Ø¿ô `%s' ¤Î°Ù¤Ë»È¤¤¤Þ¤¹ + %s: ·Ù¹ð¤Ï¥¨¥é¡¼¤È¤·¤Æ¼è¤ê°·¤ï¤ì¤Þ¤¹ + %s: `%s' ¤òÊÑ´¹¤·¤Þ¤¹ + %s:%d: `%s' ¤«¤é¼ÂÂ⽤µ¤ì¤Þ¤·¤¿ + %s:%d: ¤³¤³¤Ç¼ÂÂ⽤µ¤ì¤Þ¤·¤¿ + %s:%d: Á°¤Î¥¨¥é¡¼¤Ë¤è¤êº®Í𤷤Ƥ¤¤Þ¤¹¤Î¤Ç¡¢Ã¦½Ð¤·¤Þ¤¹ + %s:%d: ´Ø¿ô `%s' ¤ÎÀë¸À¤¬Ê̤ηÁ¤ò¼è¤Ã¤Æ¤¤¤Þ¤¹ + %s:%d: ·Ù¹ð: '##' ¤Ï¥Þ¥¯¥íŸ³«¤Îξü¤Ë¤Ï½Ð¸½¤Ç¤­¤Þ¤»¤ó'#' ¤Ë¥Þ¥¯¥í²¾°ú¿ô̾¤¬Â³¤¤¤Æ¤¤¤Þ¤»¤ó'$' ʸ»ú¤¬¼±ÊÌ»Ò¤ËÆþ¤Ã¤Æ¤¤¤Þ¤¹'(' ¤¬É¬ÍפǤ¹')' ¤¬É¬ÍפǤ¹')' ¤Þ¤¿¤Ï¹à¤¬É¬ÍפǤ¹'*' ¤¬É¬ÍפǤ¹':' ¤¬É¬ÍפǤ¹';' ¤¬É¬ÍפǤ¹'Ll' ¤È 'lL' ¤ÏÀµ¾ï¤ÊÀ°¿ôÀÜÈø¼­¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó'[' ¤¬É¬ÍפǤ¹']' ¤¬É¬ÍפǤ¹']' ¤¬É¬Íפǡ¢Ìµ¸ú¤Ê·¿É½¸½¤Ç¤¹'class' ¤¬É¬ÍפǤ¹'class' ¤Þ¤¿¤Ï 'this' ¤¬É¬ÍפǤ¹'lul' ¤ÏÀµ¾ï¤ÊÀ°¿ôÀÜÈø¼­¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó'{' ¤¬É¬ÍפǤ¹¡ÊC++ ¤Ç¤Ï "%s" ¤¬ "%s" ¤ÎÂåÂØ¥È¡¼¥¯¥ó¤Ç¤¹¡Ë((̵̾))(̤Àë¸À¤Î³ÆÊÑ¿ô¤Ë¤Ä¤¤¤Æ¤Ï¡¢¤½¤ì¤¬ºÇ½é¤Ë¸½¤ï¤ì¤¿¤½¤ì¤¾¤ì¤Î´Ø¿ô(̤Àë¸ÀÊÑ¿ô¤Ë¤Ä¤¤¤Æ¤Ï¡¢¤½¤ì¤¬´Ø¿ôÆâ¤ÇºÇ½é¤Ë¸½¤ï¤ì¤¿»þ¤À¤±Êó¹ð¤µ¤ì¤Þ¤¹¡£)(¥¯¥é¥¹³°¤Ç¤Î½é´ü²½¤òɬÍפȤ·¤Þ¤¹)(Á°¤Î case ʸ¤Î°Ï¤¤¹þ¤Þ¤ì¤¿Æ°ºî¤Ï¤½¤ì¼«¿È¤Î¥¹¥³¡¼¥×¤Ç¥Ç¥¹¥È¥é¥¯¥¿¤òÍ׵ᤷ¤Þ¤¹)(`%s' ¤Î½é´ü²½¤ÏÉÔ´°Á´¤Ç¤¹)(½¾¤Ã¤Æ¡¢`va_arg' ¤Ë¤Ï `%s' ¤ò(`%s' ¤Ç¤Ê¤¯)ÅϤµ¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó)(ÀÅŪ%s: %s ÍÑ)(¤³¤ì¤ÏÆþÎÏ¥Õ¥¡¥¤¥ë¤Ë¤Ä¤­°ì²ó¤À¤±Êó¹ð¤µ¤ì¤Þ¤¹), + %s:%d ¤«¤é, + %s:%u ¤«¤é--driver ¤ÏºÇÁ᥵¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤óÆþÎϤ¬É¸½àÆþÎϤξì¹ç¤Ï -E ¤¬É¬ÍפǤ¹-G ¤È -membedded-pic ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó-G ¤Ï¥Ç¥Õ¥©¥ë¥È¤Î PIC ¥³¡¼¥É¤È¶¦Â¸¤Ç¤­¤Þ¤»¤ó-I- ¤¬Æó²ó»ØÄꤵ¤ì¤Þ¤·¤¿-Wformat-extra-args ¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿¡Ê-Wformat ¤¬¤¢¤ê¤Þ¤»¤ó¡Ë-Wformat-nonliteral ¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿¡Ê-Wformat ¤¬¤¢¤ê¤Þ¤»¤ó¡Ë-Wformat-security ¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿¡Ê-Wformat ¤¬¤¢¤ê¤Þ¤»¤ó¡Ë-Wformat-y2k ¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿¡Ê-Wformat ¤¬¤¢¤ê¤Þ¤»¤ó¡Ë-Wmissing-format-attribute ¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿¡Ê-Wformat ¤¬¤¢¤ê¤Þ¤»¤ó¡Ë-Wno-strict-prototypes ¤Ï C++ ¤Ç¤Ï¼õ¤±ÉÕ¤±¤é¤ì¤Þ¤»¤ó-Wuninitialized ¤Ï -O ̵¤·¤Ë¤Ï¼õ¤±Æþ¤ì¤é¤ì¤Þ¤»¤ó-f%s ¤Ï 68HC11/68HC12 ÍѤȤ·¤Æ¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿ (¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó)-f%s ¤Ï¥¿¡¼¥²¥Ã¥È¤Ç̵»ë¤µ¤ì¤Þ¤¹ (Á´¤Æ¤Î¥³¡¼¥É¤Ï°ÌÃÖÈó°Í¸¤Ç¤¹)-f%s ¤Ï¤â¤Ï¤ä¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó-f%sleading-underscore ¤Ï¤³¤Î¥¿¡¼¥²¥Ã¥È¥Þ¥·¥ó¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤óº£¤Î¤È¤³¤í 68000 ¤ä 68010 ¤Ç¤Ï -fPIC ¤¬¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó + -fPIC ¤¬ -mcoff ¤È¤È¤â¤Ë»È¤ï¤ì¤ë¤Î¤ÏÀµ¤·¤¯¤¢¤ê¤Þ¤»¤ó-fPIC ¤¬ -mcoff ¤È¤È¤â¤Ë»È¤ï¤ì¤ë¤Î¤ÏÀµ¤·¤¯¤¢¤ê¤Þ¤»¤óAIX ¤Ç¤Ï -fdata-sections ¤Ï¼õ¤±Æþ¤ì¤é¤ì¤Þ¤»¤óAIX ¤Ç¤Ï¥Ç¥Ð¥Ã¥°»þ¤Î -ffunction-sections ¤Ï̵¸ú¤È¤µ¤ì¤Þ¤¹-fhandle-exceptions ¤Ï -fexception ¤ËÊѹ¹¤µ¤ì¤Þ¤·¤¿(¤µ¤é¤Ë¥Ç¥Õ¥©¥ë¥È¤ÇÍ­¸ú¤Ç¤¹)-fjini ¤È -femit-class-file ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó-fjni ¤È -femit-class-files ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó-fname-mangling-version ¤Ï¤â¤Ï¤ä¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó-fpic ¤È -mapcs-reent ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó-fpic ¤¬ -mcoff ¤È¤È¤â¤Ë»È¤ï¤ì¤ë¤Î¤ÏÀµ¤·¤¯¤¢¤ê¤Þ¤»¤ó-fpic -mcoff ¤È¤È¤â¤Ë»È¤ï¤ì¤ë¤Î¤ÏÀµ¤·¤¯¤¢¤ê¤Þ¤»¤ó-frepo ¤Ï -c ÉÕ¤­¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó-g ¤Ï¤³¤Î¥×¥í¥»¥Ã¥µ¤Ç¤Ï GAS ¤ò»ÈÍѤ¹¤ë»þ¤À¤±¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤¹-g ¤Ë -mno-apcs-frame ¤ò¤Ä¤±¤ë¤È¡¢¤­¤áºÙ¤«¤Ê¥Ç¥Ð¥Ã¥°¤Ï¤Ç¤­¤Ê¤¤¤Ç¤·¤ç¤¦-mabi=%s ¤Ï -mips%d ¤ò¥µ¥Ý¡¼¥È¤·¤Þ¤»¤ó-malign-functions=%d ¤¬ 1 ¤«¤é %d ¤Î´Ö¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤»¤ó-malign-jumps=%d ¤¬ 1 ¤«¤é %d ¤Î´Ö¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤»¤ó-malign-loops=%d ¤¬ 0 ¤«¤é %d ¤Î´Ö¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó-malign-loops=%d ¤¬ 1 ¤«¤é %d ¤Î´Ö¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤»¤ó-mapcs-26 ¤È -mapcs-32 ¤ÏƱ»þ¤Ë»È¤¨¤Þ¤»¤ó-mapcs-stack-check ¤Ï -mno-apcs-frame ¤È¶¦Â¸¤Ç¤­¤Þ¤»¤ó-mbig-endian ¤È -mlittle-endian ¤ÏƱ»þ¤Ë»È¤¨¤Þ¤»¤ó-mbranch-cost=%d ¤¬ 0 ¤«¤é 5 ¤Î´Ö¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó-mbsd ¤È -mxopen ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó-mbsd ¤È -pedantic ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó-mcall-aixdesc ¤Ï¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥ó¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó-mcmodel= ¤Ï 32 bit ¥·¥¹¥Æ¥à¾å¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó-membedded-pic ¤È -mabicalls ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó-mentry ¤Ï -mips-16 ¤ò»ØÄꤷ¤¿¤È¤­¤À¤±°ÕÌ£¤ò»ý¤Á¤Þ¤¹-mips%d ¤Ï 64 bit fp ¥ì¥¸¥¹¥¿¤ò¥µ¥Ý¡¼¥È¤·¤Þ¤»¤ó-mips%d ¤Ï 64 bit gp ¥ì¥¸¥¹¥¿¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó-mips%d ¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó-m64 »ØÄê¥â¡¼¥É¤Ç¤Ï -mlong-double-64 ¤Ïµö²Ä¤µ¤ì¤Þ¤»¤ó-mmultiple ¤Ï¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¥·¥¹¥Æ¥à¾å¤Ç¤Ï¼õ¤±Æþ¤ì¤é¤ì¤Þ¤»¤ó-mpic-register= ¤Ï -fpic ¤ò¤Ä¤±¤Ê¤¤¤ÈÌò¤ËΩ¤Á¤Þ¤»¤ó-mregparm=%d ¤¬ 0 ¤«¤é %d ¤Î´Ö¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó-mshort-data-%s ¤È PIC ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó-mshort-data-%s ¤¬Â礭¤¹¤®¤Þ¤¹¡£-msoft-float ¤È -mhard_float ¤ÏƱ»þ¤Ë»È¤¨¤Þ¤»¤ó-mstring ¤Ï¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¥·¥¹¥Æ¥à¾å¤Ç¤Ï¼õ¤±Æþ¤ì¤é¤ì¤Þ¤»¤ó-msystem-v ¤È -mthreads ¤Ï¸ß´¹À­¤¬¤¢¤ê¤Þ¤»¤ó-msystem-v ¤È -p ¤Ï¸ß´¹À­¤¬¤¢¤ê¤Þ¤»¤ó-mtrap-large-shift ¤È -mhandle-large-shift ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó-mxopen ¤È -pedantic ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó-p ¥ª¥×¥·¥ç¥ó¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó. Âå¤ï¤ê¤Ë -pg ¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤-param ¥ª¥×¥·¥ç¥ó¤Ë°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó-pedantic ¤È -traditional ¤È¤ÏÁê¸ßÇÓ¾Ū¤Ç¤¹-pg ¤È -fomit-frame-pointer ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó-pipe ¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó-shared ¤¬ -mcoff ¤È¤È¤â¤Ë»È¤ï¤ì¤ë¤Î¤ÏÀµ¤·¤¯¤¢¤ê¤Þ¤»¤ó-static ¤¬ -mcoff ¤È¤È¤â¤Ë»È¤ï¤ì¤ë¤Î¤ÏÀµ¤·¤¯¤¢¤ê¤Þ¤»¤ó-symbolic ¤¬ -mcoff ¤È¤È¤â¤Ë»È¤ï¤ì¤ë¤Î¤ÏÀµ¤·¤¯¤¢¤ê¤Þ¤»¤ó-traditional ¤È -ansi ¤È¤ÏÁê¸ßÇÓ¾Ū¤Ç¤¹-traditional ¤Ï C++ ¤Ç¤Ï¼õ¤±ÉÕ¤±¤é¤ì¤Þ¤»¤ó-trigraphs ¤È -traditional ¤È¤ÏÁê¸ßÇÓ¾Ū¤Ç¤¹.da ¥Õ¥¡¥¤¥ë¤ÎÆâÍÆ¤ò¤¢¤Þ¤ê¤ËÁ᤯»È¤¤ÀڤäƤ·¤Þ¤¤¤Þ¤·¤¿ + .da ¥Õ¥¡¥¤¥ë¤ÎÆâÍÆ¤ò»È¤¤ÀڤäƤ¤¤Þ¤»¤ó + 32381 ÉâÆ°¾®¿ôÅÀ¥æ¥Ë¥Ã¥È: + : `%s' ¤Ï JDK1.1(TM) ¤Îµ¡Ç½¤Ç¤¹;; ·ë¹çÅý·×: %d »î¹Ô, %d ÂåÂØ (%d ¿·¤¿¤Ê¶õ´Ö¤òÍ×µá), + ;; %d À®¸ù¡£ + ;; %d ¤«¤é %d ¤Þ¤Ç¤Î½èÍý¥Ö¥í¥Ã¥¯¡¢%d ¥»¥Ã¥È¡£ + <̵̾ %s><¥³¥Þ¥ó¥É¥é¥¤¥ó><ɸ½àÆþÎÏ>APCS ºÆÆþ²Äǽ¥³¡¼¥É¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó¡£Ìµ»ë¤µ¤ì¤Þ¤·¤¿ASSIGN Àè¤ÎÊÑ¿ô¤¬¾®¤µ¤¹¤®¤Þ¤¹ASSIGN ¤µ¤ì¤¿ FORMAT »ØÄê»Ò¤¬¾®¤µ¤¹¤®¤Þ¤¹ASSIGN ¤µ¤ì¤¿ GOTO ÀèÊÑ¿ô¤¬¾®¤µ¤¹¤®¤Þ¤¹INCLUDE õº÷ÍѤΥǥ£¥ì¥¯¥È¥ê¤òÄɲ乤륯¥é¥¹¥Ñ¥¹¤Ë¥Ç¥£¥ì¥¯¥È¥ê¤òÄɲ乤ë;ʬ¤Ê¥³¥á¥ó¥È¤ò¥¢¥»¥ó¥Ö¥é½ÐÎϤËÄɲ乤ëÁ´¤Æ¤Î¥é¥Ù¥ë¤ò¥¢¥é¥¤¥ó¤¹¤ëÁ´¤Æ¤Î¥ë¡¼¥×¤ò 32 ¥Ð¥¤¥È¶­³¦¤Ë¥¢¥é¥¤¥ó¤¹¤ë¥³¡¼¥É¤ò 8 ¥Ð¥¤¥È¶­³¦¤Ë¥¢¥é¥¤¥ó¤¹¤ëʸ»úÎóÁàºî¤Î½ñ¹þ¤ßÀè¤ò¥¢¥é¥¤¥ó¥á¥ó¥È¤¹¤ëdouble ¤ò word ¶­³¦¤Ë¥¢¥é¥¤¥ó¥á¥ó¥È¤¹¤ë¥é¥Ù¥ë¤Î¤¦¤Á¥¸¥ã¥ó¥×ÅþãÀè¤È¤Ê¤ë¤â¤Î¤À¤±¤ò¥¢¥é¥¤¥ó¤¹¤ëdouble ¤ò dword ¶­³¦¤Ë¥¢¥é¥¤¥ó¥á¥ó¥È¤¹¤ë´Ø¿ô¤Î³«»Ï¤ò¥¢¥é¥¤¥ó¤¹¤ë¥ë¡¼¥×¤Î³«»Ï¤ò¥¢¥é¥¤¥ó¤¹¤ë¥ï¡¼¥É¶­³¦¤è¤êÂ礭¤á¤Ë¥¢¥é¥¤¥ó¤¹¤ë$ ¤ò¥·¥ó¥Ü¥ë̾¤È¤·¤Æ»È¤¨¤ë¤è¤¦¤Ë¤¹¤ëINTEGER ¤È LOGICAL ¤ÏÁê¸ß¤ËÊѹ¹²Äǽ¤Ç¤¢¤ë¤È¤¹¤ëDOUBLE COMPLEX Z ¤Ç¤Î REAL(Z) ¤È AIMAG(Z) ¤òµö²Ä¤¹¤ëRTL À¸À®¤Ë¤Ä¤¤¤Æ¡¢Ìµ¸ú¤Ê 3 ¥ª¥Ú¥é¥ó¥ÉÌ¿Îá¤òµöÍÆ¤¹¤ë? ±é»»»Ò¤Î°ú¿ô¤È¤·¤Æ°Û¤Ê¤Ã¤¿·¿¤òµöÍÆ¤¹¤ë´Ø¿ô¥¢¥É¥ì¥¹¤ò¥ì¥¸¥¹¥¿¤Ë»ý¤¿¤»¤ë»ö¤òµö²Ä¤¹¤ëASSIGN ¤µ¤ì¤¿ÊÑ¿ô¤ÎÄ̾ï¤Î¥³¥Ô¡¼¤òµö²Ä¤¹¤ë¤è¤ê¿¤¯¤Î¥í¡¼¥É¤Ç¤ÎÉÔ³Î¼Â¤ÊÆ°ºî¤òµö²Ä¤¹¤ëÈó¥í¡¼¥É¤Ç¤ÎÉÔ³Î¼Â¤ÊÆ°ºî¤òµö²Ä¤¹¤ë¤¤¤¯¤Ä¤«¤Î¥í¡¼¥É¤Ç¤ÎÉÔ³Î¼Â¤ÊÆ°ºî¤òµö²Ä¤¹¤ë¼±ÊÌ»ÒÃæ¤Ç¤Î $ ¤Î»ÈÍѤòµöÍÆ¤¹¤ëÉä¹ç̵¤·¤Î RPTB/DB ÍѤÎÈ¿Éü¥«¥¦¥ó¥È¤òµöÍÆ¤¹¤ë¸Æ¤Ó½Ð¤·µ¬Ìó¤òÆþ¤ìÂØ¤¨¤ëÊ̤θƤӽФ·µ¬Ìó¤ò»ÈÍѤ¹¤ëgcj ¤¬À¸À®¤·¤Æ¤¤¤Ê¤¤¥¯¥é¥¹¥¢¡¼¥«¥¤¥Ö¤ò¾ï¤Ë¸¡ºº¤¹¤ëÉâÆ°¾®¿ôÅÀ°ú¿ô¤Ï¾ï¤Ë¥á¥â¥êÅϤ·¤È¤¹¤ëGAS ¤ÎÍøÍѤòÁ°Äó¤È¤¹¤ëÁ´¤Æ¤Î double ¤ò¥¢¥é¥¤¥ó¤µ¤ì¤¿¤â¤Î¤È¤ß¤Ê¤¹°ú¿ô¤¬Âç°è¥Ç¡¼¥¿¤ä¾¤Î°ú¿ô¤ÈÊÌ̾¤Ë¤Ï¤Ê¤é¤Ê¤¤¤È¤ß¤Ê¤¹°ú¿ô¤ÈÂç°è¥Ç¡¼¥¿¤ÏÊÌ̾¤Ë¤Ê¤ê¤¦¤ë¤¬Â¾¤Î°ú¿ô¤È¤ÏÊÌ̾¤Ç¤Ï¤Ê¤¤¤È¤ß¤Ê¤¹byte ¤¬¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥ó¤Ç word ¤¬¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¤È¤ß¤Ê¤¹int ¤ò 8 ¥Ó¥Ã¥ÈÀ°¿ô¤È¤ß¤Ê¤¹native ´Ø¿ô¤¬ JNI ¤òÍøÍѤ·¤Æ¼ÂÁõ¤·¤Æ¤¤¤ë¤â¤Î¤È¤ß¤Ê¤¹Ä̾ï¤Î C ¼Â¹Ô´Ä¶­¤òÁ°Äó¤È¤¹¤ëdouble ¤¬¸í¤Ã¤¿¥¢¥é¥¤¥ó¥á¥ó¥È¤È¤Ê¤ë²ÄǽÀ­¤¬¤¢¤ë¤È¤ß¤Ê¤¹¥¹¥â¡¼¥ë¥¢¥É¥ì¥¹¶õ´Ö¤È¤ß¤Ê¤¹¸·Ì©¤ÊÊÌ̾µ¬Â§¤ËŬ¹ç¤¹¤ë¤È¤ß¤Ê¤¹¥¿¡¼¥²¥Ã¥È CPU ¤¬¥Ó¥Ã¥¯¥¨¥ó¥Ç¥£¥¢¥ó¤È¤·¤ÆÀßÄꤵ¤ì¤Æ¤¤¤ë¤È¤ß¤Ê¤¹¥¿¡¼¥²¥Ã¥È CPU ¤¬¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¤È¤·¤ÆÀßÄꤵ¤ì¤Æ¤¤¤ë¤È¤ß¤Ê¤¹¥Ý¥¤¥ó¥¿¤¬ÊÌ̾¤È¤Ê¤ê¤¦¤ë¤³¤È¤òÁ°Äó¤È¤¹¤ë¥Ý¥¤¥ó¥¿¤ÏÊÌ̾¤Ë¤Ê¤é¤Ê¤¤¤È¤ß¤Ê¤¹É¸½à¥é¥¤¥Ö¥é¥ê¤ä main ¤¬Â¸ºß¤·¤Ê¤¤²ÄǽÀ­¤¬¤¢¤ë¤â¤Î¤È¤¹¤ë¥¢¥é¥¤¥ó¤µ¤ì¤Ê¤¤¥¢¥¯¥»¥¹¤¬¥·¥¹¥Æ¥à¤Ë¤è¤Ã¤Æ¥Ï¥ó¥É¥ë¤µ¤ì¤ë¤È¤ß¤Ê¤¹Á´¼Â¹Ô¿ô¤¬¥¼¥í¤Ç¤¢¤ë¤È²¾Äꤷ¤Þ¤¹¡£ + ¥È¥Ã¥×¥ì¥Ù¥ë:ʬ´ôÌ¿Îá¤ÎÃٱ䥹¥í¥Ã¥È¤ò»È¤¦¤³¤È¤ò»î¤ß¤ë¤Ç¤­¤ë¤À¤±¥¹¥¿¥Ã¥¯¤ò¤³¤ÎÃÍ¤ÎÆó¾è¤Ë¥¢¥é¥¤¥ó¥á¥ó¥È¤¹¤ë¸Å¤¤ K&R ¼°¤Î C ¤Î¥µ¥Ý¡¼¥È¤ò»î¤ß¤ë¼«Æ° pre/post ¥Ç¥¯¥ê¥á¥ó¥È ¥¤¥ó¥¯¥ê¥á¥ó¥È¤òµöÍÆ¤¹¤ë¼«Æ° pre/post ¥Ç¥¯¥ê¥á¥ó¥È ¥¤¥ó¥¯¥ê¥á¥ó¥È¤òµöÍÆ¤·¤Ê¤¤Ê¸»ú/hollerith Äê¿ô¤Ç¤Î¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥å¤òÆÃ¼ì¤Ê¤â¤Î¤È¤·¤Ê¤¤ (C ¼°)¥Ó¥Ã¥°¥á¥â¥ê¥â¥Ç¥ë¥Ö¥é¥ó¥Á¤Î¥³¥¹¥È¤ò»Ø¼¨¤¹¤ë (1-5, Ǥ°Õ¤Î¸Ä¿ô)volatile ¥á¥â¥ê»²¾ÈÍÑ¤Ë¤Ï cache ¤µ¤ì¤¿¥Ç¡¼¥¿¤ò²óÈò¤¹¤ëC++ ¥¹¥¿¥¤¥ë¤Î¥³¥á¥ó¥È¤Ï ISO C89 ¤Ç¤Ïµö¤µ¤ì¤Þ¤»¤óÇÛÎó¤Î¼¡¸µ¤òÀë¸À¤Ç»ØÄꤹ¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó'$' ¤ÏÆâÉô¥¯¥é¥¹¤Î¶èÀÚ¤ê»Ò¤È¤·¤Æ»ÈÍѤǤ­¤Þ¤»¤ó¥¹¥¿¥Ã¥¯¥Ý¥¤¥ó¥¿¤Î²¼°Ì 8 ¥Ó¥Ã¥È¤À¤±¤òÊѹ¹¤¹¤ë¥³¥ó¥Ñ¥¤¥éÆâÉô¤Ç¤Îʬ´ô¥³¥¹¥È¤òÊѹ¹¤¹¤ë³ä¤ê¹þ¤ß¤Î̵¸ú²½¤Ê¤·¤Ç¥¹¥¿¥Ã¥¯¥Ý¥¤¥ó¥¿¤òÊѹ¹¤¹¤ë¾ò·ïŪ¤Ê¼Â¹Ô¤Ø¤ÎÊѹ¹¤Î¤¿¤á¤ÎïçÃͤòÊѹ¹¤¹¤ë¥Æ¥ó¥×¥ì¡¼¥È¥¤¥ó¥¹¥¿¥ó¥¹¤¬Á÷½Ð¤µ¤ì¤¿»þ¤ËÊѹ¹¤¹¤ëʸˡ¥¨¥é¡¼¤ò¸¡½Ð¤·¤Æ¡¢¤½¤³¤ÇÄä»ß¤¹¤ënew ¤ÎÌá¤êÃͤò¸¡ºº¤¹¤ëmain ¥á¥½¥Ã¥É¤¬»È¤ï¤ì¤ë¤Ù¤­¥¯¥é¥¹¤òÁªÂò¤¹¤ë¥¯¥é¥¹¤ä¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹Àë¸À¤¬É¬ÍפǤ¹¥³¡¼¥É¥µ¥¤¥º: small, medium Ëô¤Ï large¥×¥í¥°¥é¥à¤¬±Ñ¾®Ê¸»ú¤Ç½ñ¤«¤ì¤¿Íͤ˥³¥ó¥Ñ¥¤¥ë¤¹¤ë¥×¥í¥°¥é¥à¤¬±ÑÂçʸ»ú¤Ç½ñ¤«¤ì¤¿Íͤ˥³¥ó¥Ñ¥¤¥ë¤¹¤ë32 ¥Ó¥Ã¥È¥Ý¥¤¥ó¥¿ÍѤ˥³¥ó¥Ñ¥¤¥ë¤¹¤ë64 ¥Ó¥Ã¥È¥Ý¥¤¥ó¥¿ÍѤ˥³¥ó¥Ñ¥¤¥ë¤¹¤ë68HC11 ÍѤ˥³¥ó¥Ñ¥¤¥ë¤¹¤ë68HC12 ÍѤ˥³¥ó¥Ñ¥¤¥ë¤¹¤ëARM ¤Ç¤Ï¤Ê¤¯ Thumb ÍѤ˥³¥ó¥Ñ¥¤¥ë¤¹¤ëv850 ¥×¥í¥»¥Ã¥µÍѤ˥³¥ó¥Ñ¥¤¥ë¤¹¤ëv8plus ABI ÍѤ˥³¥ó¥Ñ¥¤¥ë¤¹¤ëISO C89 ÍѤ˥³¥ó¥Ñ¥¤¥ë¤¹¤ë16 ¥Ó¥Ã¥ÈÀ°¿ô¥â¡¼¥É¤Ç¥³¥ó¥Ñ¥¤¥ë¤¹¤ë32 ¥Ó¥Ã¥ÈÀ°¿ô¥â¡¼¥É¤Ç¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¥³¥ó¥Õ¥£¥°¥ª¥×¥·¥ç¥ó: %s + ¥Ð¥¤¥È¥µ¥¤¥ºÃ±°Ì¤Î¥á¥â¥ê¥¢¥¯¥»¥¹¤¬ÃÙ¤¤¤³¤È¤ò¹Íθ¤¹¤ë¥Ý¥¤¥ó¥¿·Ðͳ¤Î¥á¥â¥ê»²¾È¤òÁ´¤Æ volatile ¤È¤ß¤Ê¤¹Âç°è¥Ç¡¼¥¿¤Ø¤Î¥á¥â¥ê»²¾È¤òÁ´¤Æ volatile ¤È¤ß¤Ê¤¹ÀÅŪ¥Ç¡¼¥¿¤Ø¤Î¥á¥â¥ê»²¾È¤òÁ´¤Æ volatile ¤È¤ß¤Ê¤¹¥³¥ó¥¹¥È¥é¥¯¥¿¤Îµ¯Æ°¤Ï¥³¥ó¥¹¥È¥é¥¯¥¿Æâ¤ÇºÇ½é¤Ë¹Ô¤Ê¤ï¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤óIEEE ¥È¥é¥Ã¥×¥â¡¼¥É¤òÀ©¸æ¤¹¤ëÀ¸À®¤µ¤ì¤¿ÉâÆ°¾®¿ôÅÀ´Ý¤á¥â¡¼¥É¤òÀ©¸æ¤¹¤ëÉâÆ°¾®¿ôÅÀÎã³°¤ËÍ¿¤¨¤é¤ì¤¿ÀºÅÙ¤òÀ©¸æ¤¹¤ëÉâÆ°¾®¿ôÅÀÄê¿ô¤òñÀºÅÙÄê¿ô¤ËÊÑ´¹¤¹¤ë¥á¥â¥ê¥¢¥É¥ì¥¹Äê¿ô¤òÍøÍѤ¹¤ëÁ°¤Ë¥ì¥¸¥¹¥¿¤Ø¥³¥Ô¡¼¤¹¤ë¥á¥â¥ê¥ª¥Ú¥é¥ó¥É¤òÍøÍѤ¹¤ëÁ°¤Ë¥ì¥¸¥¹¥¿¤Ø¥³¥Ô¡¼¤¹¤ë´ðËÜ¥Ö¥í¥Ã¥¯¥Õ¥¡¥¤¥ë %s ¤ò³«¤±¤Þ¤»¤ó¤Ç¤·¤¿¡£ + ¥Ç¡¼¥¿¥Õ¥¡¥¤¥ë %s ¤ò³«¤¯¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£ + ½ÐÎÏ¥Õ¥¡¥¤¥ë %s ¤ò³«¤±¤Þ¤»¤ó¤Ç¤·¤¿. + ¥×¥í¥°¥é¥à¥Õ¥í¡¼¥Õ¥¡¥¤¥ë %s ¤ò³«¤±¤Þ¤»¤ó¤Ç¤·¤¿¡£ + ¥½¡¼¥¹¥Õ¥¡¥¤¥ë %s ¤ò³«¤±¤Þ¤»¤ó¤Ç¤·¤¿. + GUI ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤òºî¤ë¥³¥ó¥½¡¼¥ë¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤òºî¤ëgcov ¤¬É¬ÍפȤ¹¤ë¥Ç¡¼¥¿¥Õ¥¡¥¤¥ë¤òºîÀ®¤¹¤ë%s ¤òºîÀ®Ãæ. + ¥³¥ó¥Ñ¥¤¥éÆâ¤Î¥Ç¥Ð¥Ã¥°°ú¿ô¤ò¥µ¥Ý¡¼¥È¤¹¤ë¥³¥ó¥Ñ¥¤¥éÆâ¤Î¥Ç¥Ð¥Ã¥°¥á¥â¥ê¥¢¥É¥ì¥¹¤ò¥µ¥Ý¡¼¥È¤¹¤ë¥³¥ó¥Ñ¥¤¥éÆâ¤Î¥Ç¥Ð¥Ã¥°¥¹¥¿¥Ã¥¯¤ò¥µ¥Ý¡¼¥È¤¹¤ë´Ø¿ô°ú¿ô¤ò¥¹¥¿¥Ã¥¯¤«¤é pop ¤¹¤ë¤Î¤ò¸Æ¤Ó½Ð¤·¸å¤Þ¤ÇÃ٤餻¤ëMIL-STD 1753 intrinsic ¤òºï½ü¤¹¤ëlibU77 intrinsic ¤òºï½ü¤¹¤ëlibU77 intrinsic ¤òÉÔÀµ¤Ê interface ¤È¶¦¤Ëºï½ü¤¹¤ëF90 ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤òºï½ü¤¹¤ëVXT FORTRAN ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤òºï½ü¤¹¤ëf2c ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤òºï½ü¤¹¤ëg77 ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤òºï½ü¤¹¤ë̵°ÕÌ£¤Ê null ¥Ý¥¤¥ó¥¿¸¡ºº¤òºï½ü¤¹¤ë¸À¸ì¤Îɸ½à¤ò·èÄꤹ¤ë¥¯¥é¥¹¥Õ¥¡¥¤¥ë¤¬½ñ¤­¹þ¤Þ¤ì¤ë¥Ç¥£¥ì¥¯¥È¥êGNU as ¤òÄ̤¸¤¿ Dwarf2 ¤Î¹Ô¥Ç¥Ð¥Ã¥°¤ò̵¸ú¤Ë¤¹¤ëMIL-STD 1753 intrinsic ¤ò̵¸ú²½¤¹¤ëMPY||ADD ¤ª¤è¤Ó MPY||SUB Ì¿Îá¤ò̵¸ú¤Ë¤¹¤ëTransmeta picoJava ³ÈÄ¥¤ò̵¸ú¤Ë¤¹¤ë¼«Æ°Åª¤ÊÇÛÎó¶­³¦¸¡ºº¤ò¹Ô¤ï¤Ê¤¤¥Ç¥Ð¥Ã¥°¤ò̵¸ú¤Ë¤¹¤ëinter-procedural ÌäÂê¤Ë¤Ä¤¤¤Æ¤ÎÃ×̿Ū¤Ê¿ÇÃÇɽ¼¨¤òɽ¼¨¤·¤Ê¤¤libU77 intrinsic ¤ò̵¸ú²½¤¹¤ëlibU77 intrinsic ¤òÉÔÀµ¤Ê interface ¤È¶¦¤Ë̵¸ú²½¤¹¤ë³«È¯Ãæ¤Î¿·µ¡Ç½¤ò̵¸ú¤Ë¤¹¤ëg77 ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤ò̵¸ú²½¤¹¤ëF90 ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤ò̵¸ú²½¤¹¤ëVXT FORTRAN ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤ò̵¸ú²½¤¹¤ëf2c ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤ò̵¸ú²½¤¹¤ë¥ª¥×¥·¥ç¥ó¤Î¿ÇÃÇ¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤·¤Ê¤¤ÊÂÎóÌ¿Îá¤ò̵¸ú¤Ë¤¹¤ëºÆÊÔÀ®¹©Äø¤ò̵¸ú¤Ë¤¹¤ë³°ÉôÊÑ¿ô¤Ë¥¢¥ó¥À¡¼¥¹¥³¥¢¤òÉÕ¤±Â­¤µ¤Ê¤¤DB Ì¿Îá¤Î»ÈÍѤò̵¸ú¤Ë¤¹¤ëRTPB Ì¿Îá¤ÎÍøÍѤò̵¸ú¤Ë¤¹¤ëRTPS Ì¿Îá¤ÎÍøÍѤò̵¸ú¤Ë¤¹¤ë¾ò·ïŪ move Ì¿Îá¤ÎÍøÍѤò̵¸ú¤Ë¤¹¤ësdata/scommon/sbss ¤Î»ÈÍѤò̵¸ú¤Ë¤¹¤ëinter-procedural ÌäÂê¤Ë¤Ä¤¤¤Æ¤Î·Ù¹ðɽ¼¨¤òɽ¼¨¤·¤Ê¤¤Á´¤Æ¤Î½¹¤¤µ¡Ç½¤òµö²Ä¤·¤Ê¤¤Éä¹ç̵¤·¤Î RPTB/DB ÍѤÎÈ¿Éü¥«¥¦¥ó¥È¤òµöÍÆ¤·¤Ê¤¤»È¤ï¤ì¤Ê¤¤²¾ÁÛ´Ø¿ô¤òÀÚ¤ê¼Î¤Æ¤ë¥³¥ó¥Ñ¥¤¥ë»þ´ÖÅý·×Ãͤòɽ¼¨¤¹¤ë¥³¥ó¥Ñ¥¤¥ëÃæ¤ËÃßÀѤµ¤ì¤¿Åý·×¾ðÊó¤òɽ¼¨¤¹¤ë¥³¡¼¥É¤ò 8 bit ¥³¡¼¥É¤Ë¥¢¥é¥¤¥ó¤·¤Ê¤¤Ê¸»úÎóÁàºî¤Î½ñ¹þ¤ßÀè¤ò¥¢¥é¥¤¥ó¥á¥ó¥È¤·¤Ê¤¤BK ¥ì¥¸¥¹¥¿¤ò³ÎÊݤ·¤Ê¤¤¥Ó¥Ã¥È±é»»¤Ç¤Î¨ÃÍ¥µ¥¤¥º¤òÄ´Ä䤷¤Ê¤¤GAS ¤ÎÍøÍѤòÁ°Äó¤È¤·¤Ê¤¤v8plus ABI ÍѤ˥³¥ó¥Ñ¥¤¥ë¤·¤Ê¤¤Ê£ÁÇ¿ô¤ÎÀ°¿ôÄê¿ô¤òÆÉ¤ß¹þ¤ßÀìÍÑ¥á¥â¥ê¤ËŸ³«¤µ¤»¤Ê¤¤¥¹¥¿¥Ã¥¯¥Á¥§¥Ã¥¯ÍÑ¥³¡¼¥É¤òÅǤ«¤Ê¤¤¥ê¥ó¥«¤Î´ËϤòÍ­¸ú¤Ë¤·¤Ê¤¤.size µ¿»÷Ì¿Îá¤òÀ¸À®¤·¤Ê¤¤H8/300H ¥³¡¼¥É¤òÀ¸À®¤·¤Ê¤¤H8/S ¥³¡¼¥É¤òÀ¸À®¤·¤Ê¤¤H8/S2600 ¥³¡¼¥É¤òÀ¸À®¤·¤Ê¤¤¥Ð¥¤¥È½ñ¤­¹þ¤ß¤ò»È¤ï¤º¤Ë¥³¡¼¥ÉÀ¸À®Ê¸»úÌ¿Îá¤òÀ¸À®¤·¤Ê¤¤Îã³°»ÅÍͤθ¡ºº¤ò¤¹¤ë¥³¡¼¥É¤òÀ¸À®¤·¤Ê¤¤ÉâÆ°¾®¿ôÅÀ¥æ¥Ë¥Ã¥È¤òÍøÍѤ¹¤ë¥³¡¼¥É¤òÀ¸À®¤·¤Ê¤¤Ê£¿ôÌ¿Îá¤Î¥í¡¼¥É/¥¹¥È¥¢¤òÀ¸À®¤·¤Ê¤¤update Ì¿Îá¤È°ì½ï¤Ë¥í¡¼¥É/¥¹¥È¥¢Ì¿Îá¤òÀ¸À®¤·¤Ê¤¤multm Ì¿Îá¤òÀ¸À®¤·¤Ê¤¤¼Â¹Ô»þ·¿µ­½Ò¾ðÊó¤òÀ¸À®¤·¤Ê¤¤FPU ÍѤΠsin, cos, sqrt ¤òÀ¸À®¤·¤Ê¤¤¥Ö¥í¥Ã¥¯°ÜưÍѤΠstring Ì¿Îá¤òÀ¸À®¤·¤Ê¤¤¥Æ¡¼¥Ö¥ë¥¸¥ã¥ó¥×Ì¿Îá¤òÀ¸À®¤·¤Ê¤¤´ûÃΤÎÁ´¤Æ¤Îʸ»úÎóÁàºî¤ò inline ¤Ë¤·¤Ê¤¤¥á¥ó¥Ð´Ø¿ô¤ò¥Ç¥Õ¥©¥ë¥È¤Ç¥¤¥ó¥é¥¤¥ó¤È¤·¤Ê¤¤Intel v1.3 gcc ¤ÎÍͤʥ¿¥¤¥×¤ÎÇÛÃÖ¤ò¹Ô¤Ê¤ï¤Ê¤¤´Ø¿ô¤ÎÁ°ÃÖ¤­Éôʬ¤Ë PIC ¥ì¥¸¥¹¥¿¤ò¥í¡¼¥É¤·¤Ê¤¤´Ø¿ô¤Î³«»ÏÉôʬ¤ËÌ¿Îá¤ò°Üư¤·¤Ê¤¤¥¢¥¯¥»¥¹À©¸æ¤Î°ÕÌ£¤Ë½¾¤ï¤Ê¤¤¥¢¥»¥ó¥Ö¥é¤È¥ê¥ó¥«¤ÇËöÈø¸Æ¤Ó½Ð¤·Ì¿Îá¤òºÇŬ²½¤·¤Ê¤¤¥ê¥ó¥«¤Ë -assert pure-text ¤òÅϤµ¤Ê¤¤ËöÈø¸Æ¤Ó½Ð¤·ºÇŬ²½¤ò¹Ô¤ï¤Ê¤¤¥¢¥é¥¤¥ó¤µ¤ì¤Ê¤¤¥¢¥¯¥»¥¹¤òµö²Ä¤·¤Ê¤¤-traditional »ÈÍÑ»þ¤Ë¤Ï¡¢ÉâÆ°¾®¿ô¤Ë´Ø¤· float ¤«¤é double ¤Ë³Ê¾å¤²¤·¤Ê¤¤FPU ¥ì¥¸¥¹¥¿Æâ¤Îµ¡Ç½¤ÎÃͤòÊÖ¤µ¤Ê¤¤¥ì¥¸¥¹¥¿¤ËÉâÆ°¾®¿ô¤ò³ÊǼ¤·¤Ê¤¤°ú¿ô¥ì¥¸¥¹¥¿¤Ë¥í¡¼¥«¥ë¤Î¤â¤Î¤ò³ÊǼ¤·¤Ê¤¤¥·¥¹¥Æ¥à¥Ø¥Ã¥À¤«¤é¤Î·Ù¹ð¤òÍÞÀ©¤·¤Ê¤¤ABI ͽÌó¥ì¥¸¥¹¥¿¤ò»ÈÍѤ·¤Ê¤¤ÉâÆ°¾®¿ôÅÀÈæ³Ó¤Ë IEEE µ¬³Ê¤ò»È¤ï¤Ê¤¤MPYI Ì¿Îá¤ò C3x ÍѤ˻ÈÍѤ·¤Ê¤¤POWER Ì¿Î᥻¥Ã¥È¤ò»ÈÍѤ·¤Ê¤¤POWER2 Ì¿Î᥻¥Ã¥È¤ò»ÈÍѤ·¤Ê¤¤PowerPC Ì¿Î᥻¥Ã¥È¤ò»ÈÍѤ·¤Ê¤¤VAX ÉâÆ°¾®¿ôÅÀ¤òÍøÍѤ·¤Ê¤¤´Ø¿ô¹àÌÜËöÈø¤ÎÂå¤ï¤ê¤ÏÍøÍѤ·¤Ê¤¤Ê£»¨¤Ê¥¢¥É¥ì¥·¥ó¥°¥â¡¼¥É¤òÍøÍѤ·¤Ê¤¤¥Õ¥é¥Ã¥È¥ì¥¸¥¹¥¿¥¦¥£¥ó¥É¥¦¥â¥Ç¥ë¤ò»ÈÍѤ·¤Ê¤¤ÉâÆ°¾®¿ôÅÀ¥ì¥¸¥¹¥¿¤òÍøÍѤ·¤Ê¤¤¥Ï¡¼¥É¥¦¥§¥¢ÉâÆ°¾®¿ôÅÀ¤òÍøÍѤ·¤Ê¤¤¥Ï¡¼¥É¥¦¥§¥¢ÉâÆ°¾®¿ôÅÀ¤òÍøÍѤ·¤Ê¤¤»ÍÇÜÀºÅÙÉâÆ°¾®¿ôÅÀÌ¿Îá¤ò»ÈÍѤ·¤Ê¤¤¾è»»-²Ã»»ÉâÆ°¾®¿ôÅÀÌ¿Îá¤ò»ÈÍѤ·¤Ê¤¤½ÐÎϤ¹¤ë°ú¿ô¤ò¥»¡¼¥Ö¤¹¤ë¤¿¤á¤Ë¤Ï push Ì¿Îá¤ò»È¤ï¤Ê¤¤sb ¥ì¥¸¥¹¥¿¤ò»ÈÍѤ·¤Ê¤¤°ú¿ô¤ò¥ì¥¸¥¹¥¿ÅϤ·¤Ë¤·¤Ê¤¤¥¹¥¿¥Ã¥¯¥Ð¥¤¥¢¥¹¤ò»ÈÍѤ·¤Ê¤¤¥À¥Ö¥ë¥ï¡¼¥É¥³¥Ô¡¼ÍѤζ¯¤¯¥¢¥é¥¤¥ó¤µ¤ì¤¿¹½Â¤ÂΤò»ÈÍѤ·¤Ê¤¤Ê¬³äÌ¿Îá¤ò»ÈÍѤ·¤Ê¤¤Visual Ì¿Î᥻¥Ã¥È¤òÍøÍѤ·¤Ê¤¤-pedantic »ØÄê»þ¤Ç¤â 'long long' ¤Î»ÈÍѤˤĤ¤¤Æ¤Ï·Ù¹ð¤·¤Ê¤¤ÇÉÀ¸¥á¥½¥Ã¥É¤¬Ì¤¼ÂÁõ¤Î¾ì¹ç¤Ç¤â·Ù¹ð¤·¤Ê¤¤¥Ï¡¼¥É¥¦¥§¥¢¾è»»¥Ð¥°¤ËÂн褷¤Ê¤¤storem ¥Ï¡¼¥É¥¦¥§¥¢¥Ð¥°¤ÎÂнè¤ò¹Ô¤Ê¤ï¤Ê¤¤BSD ÍѤ˥·¥ó¥Ü¥ë̾¤òÊѹ¹¤¹¤ëX/OPEN ÍѤ˥·¥ó¥Ü¥ë̾¤òÊѹ¹¤¹¤ëºÇŬ²½²áÄø¤ÇºÇÂç¸Â¤Î regmove ¤ò¹Ô¤Ê¤¦ºÇŬ²½²áÄø¤Î¥ì¥¸¥¹¥¿¤Ä¤±ÊѤ¨¤ò¹Ô¤Ê¤¦ÉâÆ°¾®¿ôÅÀ°ú¿ô¤Ï¾ï¤Ë¥á¥â¥êÅϤ·¤È¤·¤Ê¤¤¿ä¾©¤µ¤ì¤Ê¤¤¥³¥ó¥Ñ¥¤¥é¤Îµ¡Ç½¤ò¹ðÃΤ·¤Ê¤¤¥¢¥é¥¤¥ó¤µ¤ì¤Ê¤¤¥¢¥¯¥»¥¹¤¬¥·¥¹¥Æ¥à¤Ë¤è¤Ã¤Æ¥Ï¥ó¥É¥ë¤µ¤ì¤ë¤È¤Ï¤ß¤Ê¤µ¤Ê¤¤¥·¥ó¥Ü¥ë̾¤ÎÊѹ¹¤ò¹Ô¤ï¤Ê¤¤³ÈÄ¥¥¢¥»¥ó¥Ö¥ê volatile ¤ÎÁ°¸å¤Ë stop ¥Ó¥Ã¥È¤òÁ÷½Ð¤¹¤ëÄê¿ô¤Î¥ì¥¸¥¹¥¿³ä¤êÅö¤Æ¤ò¶¯Íפ·¤Ê¤¤ÉâÆ°¾®¿ô¤Î¾è»»/²Ã»»Ì¿Îá¤òÀ¸À®¤·¤Ê¤¤¥Ö¥í¥Ã¥¯°Üư¤òºÇŬ²½¤·¤Ê¤¤lui/addiu ¥¢¥É¥ì¥¹¥í¡¼¥É¤òºÇŬ²½¤·¤Ê¤¤¥³¥ó¥Ñ¥¤¥éÅý·×¤ò½ÐÎϤ·¤Ê¤¤Microsoft ³ÈÄ¥¤ÎÍøÍѤ˴ؤ·¤Æ pedantic ·Ù¹ð¤ò¹Ô¤ï¤Ê¤¤ÉâÆ°¾®¿ôÅÀÄê¿ô¤ò TOC Æâ¤ËÇÛÃÖ¤·¤Ê¤¤¥·¥ó¥Ü¥ë+¥ª¥Õ¥»¥Ã¥ÈÄê¿ô¤ò TOC Æâ¤ËÇÛÃÖ¤·¤Ê¤¤°ú¿ô¥«¥¦¥ó¥È¤ò push ¤»¤º¡¢¥·¥ó¥Ü¥ë¥Æ¡¼¥Ö¥ë¤ò¤¢¤Æ¤Ë¤¹¤ë̤½é´ü²½Äê¿ô¤ò ROM ¤ËÃÖ¤«¤Ê¤¤¥¹¥â¡¼¥ë¥â¥Ç¥ë¤Ç ISR ¤ò¸Ù¤ë DP ¤ò¥»¡¼¥Ö¤·¤Ê¤¤¥×¥í¥·¡¼¥¸¥ã³«»Ï¤È½ªÎ»¤Î¥¹¥±¥¸¥å¡¼¥ë¤ò¹Ô¤Ê¤ï¤Ê¤¤Windows ¤Î define ¤òÀßÄꤷ¤Ê¤¤À°¿ô¤Î¥¼¥í½ü»»¤ò¥È¥é¥Ã¥×¤·¤Ê¤¤À°¿ô½ü»»¤Î¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤ò¥È¥é¥Ã¥×¤·¤Ê¤¤GP ´ØÏ¢ sdata/sbss ¥»¥¯¥·¥ç¥ó¤ò»ÈÍѤ·¤Ê¤¤Irix PIC ¤òÍøÍѤ·¤Ê¤¤MIPS16 Ì¿Îá¤ò»ÈÍѤ·¤Ê¤¤OSF PIC ¤òÍøÍѤ·¤Ê¤¤PowerPC °ìÈÌÍÑÅÓ¥°¥ë¡¼¥×¥ª¥×¥·¥ç¥óÌ¿Îá¤ò»ÈÍѤ·¤Ê¤¤PowerPC ¥°¥é¥Õ¥£¥¯¥¹¥°¥ë¡¼¥×¥ª¥×¥·¥ç¥óÌ¿Îá¤ò»ÈÍѤ·¤Ê¤¤PowerPC-64 Ì¿Î᥻¥Ã¥È¤ò»ÈÍѤ·¤Ê¤¤RAM ¤ÎÂå¤ï¤ê¤Ë ROM ¤òÍøÍѤ·¤Ê¤¤volatile ¥á¥â¥ê»²¾ÈÍѤˤϥǡ¼¥¿¥­¥ã¥Ã¥·¥å¤ò¹Ô¤ï¤Ê¤¤Ëä¤á¹þ¤ß PIC ¤ò»ÈÍѤ·¤Ê¤¤¥Ï¡¼¥É¥¦¥§¥¢ÉâÆ°¾®¿ôÅÀ¤ò»ÈÍѤ·¤Ê¤¤´ÖÀܸƤӽФ·¤ò»ÈÍѤ·¤Ê¤¤asm ¸å²áÄø¤Ç mips-tfile ¤òÍøÍѤ·¤Ê¤¤¾è»»¡¦²Ã»»Ì¿Îá¤ò»ÈÍѤ·¤Ê¤¤Ã±ÀºÅÙ(32bit) FP °Ê³°¤âÍøÍѤ¹¤ë¥·¥ó¥Ü¥ê¥Ã¥¯¥ì¥¸¥¹¥¿Ì¾¤ò»ÈÍѤ·¤Ê¤¤strftime ·Á¼°¤¬Æó·å¤Çǯ¤òɽ¤·¤Æ¤¤¤ë»þ¤Î·Ù¹ð¤·¤Ê¤¤format ´Ø¿ô¤Ø¤Î¿¤¹¤®¤ë°ú¿ô¤Ë´Ø¤¹¤ë·Ù¹ð¤·¤Ê¤¤Á´¤Æ¤Î¥³¥ó¥¹¥È¥é¥¯¥¿/¥Ç¥¹¥È¥é¥¯¥¿¤¬ private ¤Ç¤â·Ù¹ð¤·¤Ê¤¤template Æâ¤ÇÈó template ¤Î friend ´Ø¿ô¤¬Àë¸À¤µ¤ì¤¿¾ì¹ç¤Ç¤â·Ù¹ð¤·¤Ê¤¤¥Ý¥¤¥ó¥¿¤«¤é¥á¥ó¥Ð´Ø¿ô¤Ø¤Î·¿ÊÑ´¹¤Î¾ì¹ç¤Ç¤â·Ù¹ð¤·¤Ê¤¤½é´ü¤Î 4300 ¥Ï¡¼¥É¥¦¥§¥¢¥Ð¥°¤ÎÂнè¤ò¹Ô¤ï¤Ê¤¤µ¬³ÊŬ¹çÀ­¥¨¥é¡¼¤ò·Ù¹ð¤Ë³Ê²¼¤²¤¹¤ë¥À¥ß¡¼ÇÛÎó¤Î¼¡¸µ¤ò (1) ¤È¤ß¤Ê¤¹Àë¸À¤ò .decl ¥Õ¥¡¥¤¥ë¤Ë¥À¥ó¥×¤¹¤ëËÝÌõñ°ÌÁ´ÂΤò¥Õ¥¡¥¤¥ë¤Ë¥À¥ó¥×¤¹¤ë¥¨¥é¡¼: .bb ¥Õ¥¡¥¤¥ë %s ¤Ë´ðËÜ¥Ö¥í¥Ã¥¯¤¬Â¿¤¹¤®¤Þ¤¹ + ELF ¥ª¥Ö¥¸¥§¥¯¥È¥³¡¼¥É¤òÁ÷½Ð¤¹¤ëÉÔŬÀÚ¤ÊÎã³°¤ò´Þ¤á¤Æ IEEE ½àµò¤Î¥³¡¼¥É¤òȯ¹Ô¤¹¤ëÉÔŬÀÚ¤ÊÎã³°¤ò½ü¤¤¤Æ IEEE ½àµò¤Î¥³¡¼¥É¤òȯ¹Ô¤¹¤ëROSE ¥ª¥Ö¥¸¥§¥¯¥È¥³¡¼¥É¤òÁ÷½Ð¤¹¤ë¸Æ¤Ó½Ð¤·¥°¥é¥Õ¾ðÊó¤òÁ÷½Ð¤¹¤ëTI ¥Ä¡¼¥ë¸ß´¹¤Î¥³¡¼¥É¤òȯ¹Ô¤¹¤ëItanium (TM) ¥×¥í¥»¥Ã¥µ B step ÍÑ¥³¡¼¥É¤òÁ÷½Ð¤¹¤ë¥Ð¥¤¥È/¥ï¡¼¥É ISA ³ÈÄ¥ÍѤΥ³¡¼¥É¤òȯ¹Ô¤¹¤ë¥«¥¦¥ó¥È ISA ³ÈÄ¥ÍѤΥ³¡¼¥É¤òȯ¹Ô¤¹¤ëÉâÆ°¾®¿ôÅÀ move ¤È sqrt ISA ³ÈÄ¥ÍѤΥ³¡¼¥É¤òȯ¹Ô¤¹¤ë¥â¡¼¥·¥ç¥ó¥Ó¥Ç¥ª ISA ³ÈÄ¥ÍѤΥ³¡¼¥É¤òȯ¹Ô¤¹¤ëGAS ³ÈÄ¥¤òÍøÍѤ¹¤ë¥³¡¼¥É¤òȯ¹Ô¤¹¤ë¥³¥â¥ó¥·¥ó¥Ü¥ë¤ò¥¦¥£¡¼¥¯¥·¥ó¥Ü¥ë¤ÎÍͤËÀ¸À®¤¹¤ëÁê¸ß»²¾È¾ðÊó¤òÀ¸À®¤¹¤ëȾ PIC ¥³¡¼¥É¤òÁ÷½Ð¤¹¤ë.s ¥Õ¥¡¥¤¥ëÆâ¤Ë¼±Ê̻ҾðÊó¤òÁ÷½Ð¤¹¤ëCOMMON ¤ä EQUIVALENCE ÍÑ¤ÎÆÃÊ̤ʥǥХå°¾ðÊó¤òȯ¹Ô¤¹¤ë¡Ê̵¸ú²½¤µ¤ì¤Æ¤¤¤ë¡Ë¥¹¥¿¥Ã¥¯¥Á¥§¥Ã¥¯ÍÑ¥³¡¼¥É¤òÅǤ¯»ÈÍѤµ¤ì¤Ê¤¤ÀÅŪÄê¿ôÊÑ¿ô¤Ç¤¢¤Ã¤Æ¤â½ÐÎϤ¹¤ë³ÈÄ¥¥¢¥»¥ó¥Ö¥ê volatile ¤ÎÁ°¸å¤Ë stop ¥Ó¥Ã¥È¤òÁ÷½Ð¤¹¤ëGNU as ¤òÄ̤¸¤¿ Dwarf2 ¤Î¹Ô¥Ç¥Ð¥Ã¥°¤òÍ­¸ú¤Ë¤¹¤ëMPY||ADD ¤ª¤è¤Ó MPY||SUB Ì¿Îá¤òÍ­¸ú¤Ë¤¹¤ëSSA ºÇŬ²½¤òÍ­¸ú¤Ë¤¹¤ëTransmeta picoJava ³ÈÄ¥¤òÍ­¸ú¤Ë¤¹¤ë¼«Æ°¥Æ¥ó¥×¥ì¡¼¥È¼ÂÂ⽤òÍ­¸ú¤Ë¤¹¤ë¥Ð¥Ã¥¯¥¨¥ó¥É¥Ç¥Ð¥Ã¥°¤òÍ­¸ú¤Ë¤¹¤ëiC960 v2.0 ¤È¤Î¸ß´¹À­¤òÍ­¸ú¤Ë¤¹¤ëiC960 v3.0 ¤È¤Î¸ß´¹À­¤òÍ­¸ú¤Ë¤¹¤ëic960 ¥¢¥»¥ó¥Ö¥é¤È¤Î¸ß´¹À­¤òÍ­¸ú¤Ë¤¹¤ë¥Ç¥Ð¥Ã¥°½ÐÎϤòÍ­¸ú¤Ë¤¹¤ë¥Ç¥Ð¥Ã¥°¤òÍ­¸ú¤Ë¤¹¤ëÎã³°Ê᪤òÍ­¸ú¤Ë¤¹¤ë¥ê¥ó¥«¤Î´ËϤòÍ­¸ú¤Ë¤¹¤ë¥ê¥ó¥«¤Î -relax ¥ª¥×¥·¥ç¥ó¤òÍ­¸ú¤Ë¤¹¤ëËØ¤ó¤É¤Î·Ù¹ð¥á¥Ã¥»¡¼¥¸¤òÍ­¸ú¤Ë¤¹¤ë³«È¯Ãæ¤Î¿·µ¡Ç½¤òÍ­¸ú¤Ë¤¹¤ëÊÂÎóÌ¿Îá¤òÍ­¸ú¤Ë¤¹¤ë´Ø¿ô¸Æ¤Ó½Ð¤·¤ÎÁ°¸å¤Ç¥ì¥¸¥¹¥¿¤ÎÊݸ¤òÍ­¸ú¤Ë¤¹¤ë´ðËÜ¥Ö¥í¥Ã¥¯¤ò¸Ù¤°Ì¿ÎáÇÛÃÖ¤òÍ­¸ú¤Ë¤¹¤ë¥¹¥¿¥Ã¥¯Ãµº÷¤òÍ­¸ú¤Ë¤¹¤ëÂ礭¤Ê¥ª¥Ö¥¸¥§¥¯¥È¤Î¥µ¥Ý¡¼¥ÈDB Ì¿Îá¤Î»ÈÍѤòÍ­¸ú¤Ë¤¹¤ëRTPB Ì¿Îá¤ÎÍøÍѤòÍ­¸ú¤Ë¤¹¤ëRTPS Ì¿Îá¤ÎÍøÍѤòÍ­¸ú¤Ë¤¹¤ë¾ò·ïŪ move Ì¿Îá¤ÎÍøÍѤòÍ­¸ú¤Ë¤¹¤ësdata/scommon/sbss ¤Î»ÈÍѤòÍ­¸ú¤Ë¤¹¤ëÂèÆóÌ¿ÎáÇÛÃÖ¤ÎÁ°¤Ç rtl ÇÁ¤­·ê²áÄø¤òÍ­¸ú¤Ë¤¹¤ëʬ´ô·ÐÏ©¿ä¬¤òÍ­¸ú¤Ë¤¹¤ëõº÷¥ê¥¹¥È¤Î½ª¤ï¤ê + ¥¤¥ó¥é¥¤¥ó¤Ë¤Ç¤­¤ë´Ø¿ô¤Ç¤â export ¤¹¤ë³°Éô¥·¥ó¥Ü¥ë¤ËƬʸ»ú¥¢¥ó¥À¡¼¥¹¥³¥¢¤ò»ý¤¿¤»¤ë¥Õ¥£¡¼¥ë¥É¤¬É¬ÍפǤ¹RTL À¸À®¤Ë¤Ä¤¤¤Æ¡¢Àµ¾ï¤Ê 3 ¥ª¥Ú¥é¥ó¥ÉÌ¿Îá¤ò¶¯Íפ¹¤ë¥ë¡¼¥×Ãæ¤ËÉÔÊѤʷ׻»¤ò¥ë¡¼¥×¤Î³°¤Ë°Üư¤¹¤ë´¬¤­¾å¤²(hoist)¤ò²þÁ±¤¹¤ë¤¿¤áÄê¿ô¤ò¥ì¥¸¥¹¥¿¤Ë³ä¤êÅö¤Æ¤ë¤³¤È¤ò¶¯Íפ¹¤ë´Ø¿ô¤ò¶¯À©Åª¤Ë 2 ¥Ð¥¤¥È¶­³¦¤Ë¥¢¥é¥¤¥ó¤¹¤ë´Ø¿ô¤ò¶¯À©Åª¤Ë 4 ¥Ð¥¤¥È¶­³¦¤Ë¥¢¥é¥¤¥ó¤¹¤ëFortran ¸ÇÍ­¤Î -fbounds-check ¤Î·Á¼°´Ø¿ô¤Î³«»Ï°ÌÃÖ¤ò¤³¤ÎÃÍ¤ÎÆó¾è¤Ë¥¢¥é¥¤¥ó¥á¥ó¥È¤¹¤ëGCSE ¤ò̵¸ú²½: %d > 1000 ´ðËÜ¥Ö¥í¥Ã¥¯¡¢µÚ¤Ó %d >= 20 edge/´ðËÜ¥Ö¥í¥Ã¥¯GCSE ¤ò̵¸ú²½: %d ´ðËÜ¥Ö¥í¥Ã¥¯¡¢µÚ¤Ó %d ¸Ä¤Î¥ì¥¸¥¹¥¿GNU C ¤Ï -E ¤òȼ¤ï¤Ê¤¤ -C ¤ò¼ÂÁõ¤·¤Æ¤¤¤Þ¤»¤óGNU CPP version %s (cpplib)29000 ¥³¡¼¥É¤òÀ¸À®29050 ¥³¡¼¥É¤òÀ¸À®APCS Ŭ¹ç¤·¤¿¥¹¥¿¥Ã¥¯¥Õ¥ì¡¼¥à¤òÀ¸À®¤¹¤ë¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¸ÇÍ­¤Îµ¡Ç½¤Î C ¥Ø¥Ã¥À¤òÀ¸À®¤¹¤ëCA ¥³¡¼¥É¤òÀ¸À®¤¹¤ëCF ¥³¡¼¥É¤òÀ¸À®¤¹¤ëCOFF ·Á¼°¤Î¥Ç¥Ð¥Ã¥°¾ðÊó¤òÀ¸À®¤¹¤ëDWARF-1 ·Á¼°¤Î¥Ç¥Ð¥Ã¥°¾ðÊó¤òÀ¸À®¤¹¤ëDWARF-2 ·Á¼°¤Î¥Ç¥Ð¥Ã¥°¾ðÊó¤òÀ¸À®¤¹¤ëELF ½ÐÎϤòÀ¸À®¤¹¤ëH8/300H ¥³¡¼¥É¤òÀ¸À®¤¹¤ëH8/S ¥³¡¼¥É¤òÀ¸À®¤¹¤ëH8/S2600 ¥³¡¼¥É¤òÀ¸À®¤¹¤ëJA ¥³¡¼¥É¤òÀ¸À®¤¹¤ëJD ¥³¡¼¥É¤òÀ¸À®¤¹¤ëJF ¥³¡¼¥É¤òÀ¸À®¤¹¤ëKA ¥³¡¼¥É¤òÀ¸À®¤¹¤ëKB ¥³¡¼¥É¤òÀ¸À®¤¹¤ëMC ¥³¡¼¥É¤òÀ¸À®¤¹¤ëSA ¥³¡¼¥É¤òÀ¸À®¤¹¤ëSB ¥³¡¼¥É¤òÀ¸À®¤¹¤ëSTABS ·Á¼°¤Î¥Ç¥Ð¥Ã¥°¾ðÊó¤òÀ¸À®¤¹¤ëXCOFF ·Á¼°¤Î¥Ç¥Ð¥Ã¥°¾ðÊó¤òÀ¸À®¤¹¤ënoreturn ´Ø¿ô¤¬ return ¤¹¤ë¤È¤­ abort ¤Î¸Æ¤Ó½Ð¤·¤òÀ¸À®¤¹¤ë¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥ó¤Î¥³¡¼¥É¤òÀ¸À®¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥ó¥Ç¡¼¥¿¤òÀ¸À®¤¹¤ëɬÍפ¬¤¢¤ì¤Ð¡¢Ì¿Îá¸Æ¤Ó½Ð¤·¤ò´ÖÀܸƤӽФ·¤È¤·¤ÆÀ¸À®¤¹¤ëʸ»úÌ¿Îá¤òÀ¸À®¤¹¤ëËä¤á¹þ¤ß¥¢¥»¥ó¥Ö¥é¤¬½èÍý¤Ç¤­¤ë¥³¡¼¥É¤òÀ¸À®¤¹¤ëDW ¥Ó¥Ã¥È¤¬¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¤È¸«¤Ê¤·¤Æ¥³¡¼¥ÉÀ¸À®DW ¥Ó¥Ã¥È¤¬¥»¥Ã¥È¤µ¤ì¤¿¤È¸«¤Ê¤·¤Æ¥³¡¼¥ÉÀ¸À®C30 CPU ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ëC31 CPU ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ëC32 CPU ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ëC33 CPU ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ëC40 CPU ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ëC44 CPU ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ëGNU as ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ëGNU ld ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ëGNU ¼Â¹Ô´Ä¶­ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ëIntel as ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ëIntel ld ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ëNeXT ¼Â¹Ô´Ä¶­ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ëDLL ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë11/10 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë11/40 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë11/45 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥óÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ëc1 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ëc2 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ëc32 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ëc34 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ëÁ´¤Æ¥¤¥ó¥é¥¤¥ó¤È¤µ¤ì¤¿¤È¤·¤Æ¤â´Ø¿ô¤Î¥³¡¼¥É¤òÀ¸À®¤¹¤ë½êÍ¿¤Î CPU ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë¹â°Ì¥¢¥É¥ì¥¹¥á¥â¥êÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥óÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ëÄã°Ì¥¢¥É¥ì¥¹¥á¥â¥êÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ëC300 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ëC400 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ëM*Core M340 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ëunix ¥¢¥»¥ó¥Ö¥é¤¬½èÍý¤Ç¤­¤ë¥³¡¼¥É¤òÀ¸À®¤¹¤ëÇÛÎó¤Îź»ú¤Èź»ú¶­³¦¤ò¸¡ºº¤¹¤ë¥³¡¼¥É¤òÀ¸À®¤¹¤ë¥Ð¥¤¥È½ñ¤­¹þ¤ß¤ò»È¤Ã¤Æ¥³¡¼¥ÉÀ¸À®ÉâÆ°¾®¿ôÅÀ¥æ¥Ë¥Ã¥È¤òÍøÍѤ¹¤ë¥³¡¼¥É¤òÀ¸À®¤·¤Ê¤¤GP ¥ì¥¸¥¹¥¿ÉÔ»ÈÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë¥Ç¥Õ¥©¥ë¥È³ÈÄ¥·Á¼°¤Î¥Ç¥Ð¥Ã¥°¾ðÊó¤òÀ¸À®¤¹¤ë¥Ç¥Õ¥©¥ë¥È·Á¼°¤Î¥Ç¥Ð¥Ã¥°¾ðÊó¤òÀ¸À®¤¹¤ë³ÈÄ¥ DWARF-1 ·Á¼°¤Î¥Ç¥Ð¥Ã¥°¾ðÊó¤òÀ¸À®¤¹¤ë³ÈÄ¥ STABS ·Á¼°¤Î¥Ç¥Ð¥Ã¥°¾ðÊó¤òÀ¸À®¤¹¤ë³ÈÄ¥ XCOFF ·Á¼°¤Î¥Ç¥Ð¥Ã¥°¾ðÊó¤òÀ¸À®¤¹¤ë³°Éô legend ¾ðÊó¤òÀ¸À®¤¹¤ëÉâÆ°¾®¿ô¤Î¾è»»/²Ã»»Ì¿Îá¤òÀ¸À®¤¹¤ë¥ì¥¤¥Æ¥ó¥·¤òºÇŬ²½¤¹¤ë¥¤¥ó¥é¥¤¥ó¶èʬ¤òÀ¸À®¤¹¤ë¥¹¥ë¡¼¥×¥Ã¥È¤òºÇŬ²½¤¹¤ë¥¤¥ó¥é¥¤¥ó¶èʬ¤òÀ¸À®¤¹¤ë¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¤Î¥³¡¼¥É¤òÀ¸À®¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¥Ç¡¼¥¿¤òÀ¸À®¤¹¤ëÊ£¿ôÌ¿Îá¤Î¥í¡¼¥É/¥¹¥È¥¢¤òÀ¸À®¤¹¤ëupdate Ì¿Îá¤È°ì½ï¤Ë¥í¡¼¥É/¥¹¥È¥¢Ì¿Îá¤òÀ¸À®¤¹¤ë²Äǽ¤Ç¤¢¤ì¤Ð°ÌÃÖÆÈΩ¥³¡¼¥É¤òÀ¸À®¤¹¤ëºÆÆþ²Äǽ¤Ê PIC ¥³¡¼¥É¤òÀ¸À®¤·¤Þ¤¹¼«¸ÊºÆÇÛÃÖ²Äǽ¥³¡¼¥É¤òÀ¸À®¤¹¤ëFPU ÍѤΠsin, cos, sqrt ¤òÀ¸À®¤¹¤ë¥Ö¥í¥Ã¥¯°ÜưÍѤΠstring Ì¿Îá¤òÀ¸À®¤¹¤ëCOMPLEX ·×»»¤Î¥Ð¥°¤ò²óÈò¤ò¥¨¥ß¥å¥ì¡¼¥È¤¹¤ë¥Õ¥í¥ó¥È¥¨¥ó¥É¤ò»ý¤ÄMIL-STD 1753 intrinsic ¤ò±£¤¹libU77 intrinsic ¤ò±£¤¹libU77 intrinsic ¤òÉÔÀµ¤Ê interface ¤È¶¦¤Ë±£¤¹g77 ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤ò±£¤¹F90 ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤ò±£¤¹VXT FORTRAN ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤ò±£¤¹f2c ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤ò±£¤¹Hollerith ¤ä·¿¤Ê¤·Äê¿ô¤ò°ú¿ô¤È¤·¤ÆÅϤµ¤Ê¤¤½ÐÎÏÃæ¤Ë I/O ¥¨¥é¡¼¤¬È¯À¸ICE: emit_insn ¤¬ emit_jump_insn ¤òÍפ¹¤ë½ê¤Ç»È¤ï¤ì¤Þ¤·¤¿: + ISO C ¤Ç¤Ï´Ø¿ô³°¤Ç¤Î;ʬ¤Ê `;' ¤òµö¤·¤Þ¤»¤óISO C ¤Ç¤Ï̾Á°¤Ä¤­²ÄÊѰú¿ô¥Þ¥¯¥í¤òµö¤·¤Þ¤»¤óISO C ¤Ç¤Ï `varargs.h' ¤ÎÍøÍѤòµö¤·¤Þ¤»¤óISO C ¤Ï complex ·¿¤Ç¤Î `++' ¤È `--' ¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤óISO C ¤ÏÊ£ÁǶ¦ÌòÍѤΠ`~' ¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤óISO C ¤ÏÀ°¿ô·¿¤Î complex ¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤óISO C ¤Ï `double complex' ¤ò°ÕÌ£¤¹¤ë̵½¤¾þ¤Î `complex' ¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤óISO C ¤Ç¤Ï̵̾¹½Â¤ÂΤ䶦ÍÑÂΤò¼õ¤±ÉÕ¤±¤Þ¤»¤óISO C ¤Ï´Ø¿ô¥Ý¥¤¥ó¥¿¤È `void *' ¤È¤Î%s¤ò¶Ø¤¸¤Þ¤¹ISO C `goto *¼°;' ¤Î½ñ¤­Êý¤ò¶Ø¤¸¤Þ¤¹ISO C ¤Ï¶õ¤Î¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤ò¶Ø¤¸¤Þ¤¹ISO C ¤Ï¥Ö¥ì¡¼¥¹¤Ç¤Þ¤È¤á¤é¤ì¤¿¼°¤ò¶Ø¤¸¤Þ¤¹ISO C ¤ÏÈó¥¹¥«¥é¡¼¤«¤éƱ¤¸·¿¤Ø¤Î¥­¥ã¥¹¥È¤ò¶Ø¤¸¤Þ¤¹ISO C ¤Ï¶¦ÍÑÂη¿¤Ø¤Î¥­¥ã¥¹¥È¤ò¶Ø¤¸¤Þ¤¹ISO C ¤Ï `void *' ¤È´Ø¿ô¥Ý¥¤¥ó¥¿¤È¤ÎÈæ³Ó¤ò¶Ø¤¸¤Þ¤¹ISO C ¤Ï `void *' ¤È´Ø¿ô¥Ý¥¤¥ó¥¿¤È¤ò¾ò·ï¼°¤È¤¹¤ë¤³¤È¤ò¶Ø¤¸¤Þ¤¹ISO C ¤ÏÊÒ¦¤À¤±¤¬ void ¤È¤Ê¤ë¾ò·ï¼°¤ò¶Ø¤¸¤Þ¤¹ISO C ¤Ï const ¤ä volatile ¤Î´Ø¿ô·¿¤ò¶Ø¤¸¤Þ¤¹ISO C ¤Ï·¿¤äµ­²±¥¯¥é¥¹¤Î¤Ê¤¤¥Ç¡¼¥¿ÄêµÁ¤ò¶Ø¤¸¤Þ¤¹ISO C ¤Ç¤Ï¶õ¤Î½é´ü²½Íѥ֥졼¥¹¤ò¶Ø¤¸¤Þ¤¹ISO C ¤ÏÁ°Êý²¾°ú¿ôÀë¸À¤ò¶Ø¤¸¤Þ¤¹ISO C ¤Ï `enum' ·¿¤ÎÁ°Êý»²¾È¤ò¶Ø¤¸¤Þ¤¹ISO C ¤Ç¤Ïµõ¿ôÄê¿ô¤ò¶Ø¤¸¤Æ¤¤¤Þ¤¹ISO C ¤Ï¥é¥Ù¥ëÀë¸À¤ò¶Ø¤¸¤Þ¤¹ISO C ¤Ï¥á¥ó¥Ð¤Î¤Ê¤¤¥á¥ó¥ÐÀë¸À¤ò¶Ø¤¸¤Þ¤¹ISO C ¤Ï ¥Í¥¹¥È¤µ¤ì¤¿´Ø¿ô¤ò¶Ø¤¸¤Þ¤¹ISO C ¤ÏÃæ´Ö¹à¤¬¾Êά¤µ¤ì¤¿ ?: ¼°¤ò¶Ø¤¸¤Þ¤¹ISO C ´Ø¿ô¥Ý¥¤¥ó¥¿¤Î½ç½øÈæ³Ó¤ò¶Ø¤¸¤Þ¤¹ISO C ¤Ï´Ø¿ô¤Î·¿½¤¾þ»Ò¤ò¶Ø¤¸¤Þ¤¹ISO C ¤Ï½¤¾þÉÕ¤­ void ·¿¤ÎÌá¤êÃͤò»ý¤Ä´Ø¿ô¤ò¶Ø¤¸¤Þ¤¹ISO C ¤Ç¤Ï switch ʸ¤Ç¤ÎÈϰϼ°¤Ï¶Ø¤¸¤é¤ì¤Æ¤¤¤Þ¤¹ISO C ¤Ï½é´ü²½ÍѤÎÍ×ÁÇÈϰϻØÄê¤ò¶Ø¤¸¤Þ¤¹ISO C ¤Ï `register' ÇÛÎ󤨤Îź»ú¤ò¶Ø¤¸¤Þ¤¹ISO C ¤Ï¥­¥ã¥¹¥È¼°¤Î¥¢¥É¥ì¥¹É¾²Á¤ò¶Ø¤¸¤Þ¤¹ISO C ¤Ïº¸ÊÕÃͤȤ·¤Æ¤Î¥­¥ã¥¹¥È¼°¤ÎÍøÍѤò¶Ø¤¸¤Þ¤¹ISO C ¤Ïº¸ÊÕÃͤȤ·¤Æ¤ÎÊ£¹ç¼°¤ÎÍøÍѤò¶Ø¤¸¤Þ¤¹ISO C ¤Ïº¸ÊÕÃͤȤ·¤Æ¤Î¾ò·ï¼°¤ÎÍøÍѤò¶Ø¤¸¤Þ¤¹ISO C ¤Ï ¥µ¥¤¥º 0 ¤ÎÇÛÎó `%s' ¤ò¶Ø¤¸¤Þ¤¹ISO C ¤Ç¤Ï°ú¿ô¤«¤é¶¦ÍÑÂΤؤÎÊÑ´¹¤ò¶Ø»ß¤·¤Æ¤¤¤Þ¤¹ISO C ¤Ï `...' ¤ÎÁ°¤Ë̾Á°¤ò¤Ä¤±¤é¤ì¤¿°ú¿ô¤òÍ׵ᤷ¤Þ¤¹ISO C ¤Ç¤Ï¥Þ¥¯¥í̾¤Î¸å¤í¤Ë¶õÇò¤òÍ׵ᤷ¤Þ¤¹ISO C ¤ÏÎóµó»Ò¤ÎÃͤò `int' ¤ÎÈϰϤ˸ÂÄꤷ¤Æ¤¤¤Þ¤¹ISO C++ ¤Ï #if Æâ¤Î "%s" ¤òµö¤·¤Þ¤»¤óISO C++ ¤Ï̾Á°¤Ä¤­Ìá¤êÃͤòµö²Ä¤·¤Þ¤»¤óISO C++ ¤Ï `long long' ¤ò¼õ¤±Æþ¤ì¤Þ¤»¤óISO C++ ¤Ï `void *' ·¿¥Ý¥¤¥ó¥¿¤È´Ø¿ô¥Ý¥¤¥ó¥¿¤È¤Î %s ¤ò¶Ø¤¸¤Þ¤¹ISO C++ ¤Ï enum ¤Î %s ¤ò¶Ø¤¸¤Þ¤¹ISO C++ ¤Ï new ¤Ø¤Î½¸¹çÂνé´ü²½»Ò¤ò¶Ø¤¸¤Þ¤¹ISO C++ ¤Ï `%s' ¤ËÂФ¹¤ë¶õ¤Î¾ò·ï¤ò¶Ø¤¸¤Þ¤¹ISO C++ ¤Ï´Ø¿ô·¿¤Ø¤Î `sizeof' ¤ÎŬÍѤò¶Ø¤¸¤Þ¤¹ISO C++ ¤Ï¥á¥ó¥Ð´Ø¿ô¤Ø¤Î `sizeof' ¤ÎŬÍѤò¶Ø¤¸¤Þ¤¹ISO C++ ¤Ï´Ø¿ô·¿¤Î¼°¤Ø¤Î `sizeof' ¤ÎŬÍѤò¶Ø¤¸¤Þ¤¹ISO C++ ¤ÏÉÔ´°Á´·¿¤Ç¤¢¤ë `void' ·¿¤Ø¤Î `sizeof' ¤ÎŬÍѤò¶Ø¤¸¤Þ¤¹ISO C++ ¤Ï new Ãæ¤Ç¤Ï¡¢³ç¸Ì¤Î¤Ä¤¤¤¿ÇÛÎ󼡸µ¤ò¶Ø¤¸¤Þ¤¹ISO C++ ¤ÏÇÛÎó¤ÎÂåÆþ¤ò¶Ø¤¸¤Þ¤¹ISO C++ ¤Ï¥Ö¥ì¡¼¥¹¤Ç¤Þ¤È¤á¤é¤ì¤¿¼°¤ò¶Ø¤¸¤Þ¤¹ISO C++ ¤Ï¥×¥í¥°¥é¥à¤ÎÃæ¤«¤é `::main' ¤ò¸Æ¤Ó½Ð¤¹¤³¤È¤ò¶Ø¤¸¤Þ¤¹ISO C++ ¤Ïº¸ÊÕÃͤȤ·¤Æ»È¤ï¤ì¤ëÈ󻲾ȷ¿¤Ø¤Î¥­¥ã¥¹¥È¤ò¶Ø¤¸¤Þ¤¹ISO C++ ¤Ï´Ø¿ô¥Ý¥¤¥ó¥¿¤È¥ª¥Ö¥¸¥§¥¯¥È¥Ý¥¤¥ó¥¿¤Î´Ö¤Ç¤Î¥­¥ã¥¹¥È¤ò¶Ø¤¸¤Þ¤¹ISO C++ ¤Ï¥Ý¥¤¥ó¥¿¤ÈÀ°¿ô¤È¤ÎÈæ³Ó¤ò¶Ø¤¸¤Þ¤¹ISO C++ ¤ÏÊ£¹ç¥ê¥Æ¥é¥ë¤ò¶Ø¤¸¤Þ¤¹ISO C++ ½é´ü²½»Ò¤ÎÆâÉô¤Ç¤Ïʣʸ¤¬¶Ø¤¸¤é¤ì¤Æ¤¤¤Þ¤¹ISO C++ ¤Ï·×»»·¿ goto ¤ò¶Ø¤¸¤Þ¤¹ISO C++ ¤Ï %s Ãæ¤Î·¿ÄêµÁ¤ò¶Ø¤¸¤Þ¤¹ISO C++ ¤Ï new ¼°¤Î½é´ü²½¤Ç¤Î `=' ¤ò¶Ø¤¸¤Þ¤¹ISO C++ ¤Ï¥é¥Ù¥ëÀë¸À¤ò¶Ø¤¸¤Æ¤¤¤Þ¤¹ISO C++ ¤ÏÃæ´Ö¹à¤¬¾Êά¤µ¤ì¤¿ ?: ¼°¤ò¶Ø¤¸¤Þ¤¹ISO C++ ¤Ç¤Ï switch ʸ¤Ç¤ÎÈϰϼ°¤Ï¶Ø¤¸¤é¤ì¤Æ¤¤¤Þ¤¹ISO C++ ¤Ïº¸ÊÕÃͤǤϤʤ¤ÇÛÎó¤Îź»ú¤ò¶Ø¤¸¤Þ¤¹ISO C++ ¤Ï `::main' ´Ø¿ô¤Î¥¢¥É¥ì¥¹¤ò¼è¤ë¤³¤È¤ò¶Ø¤¸¤Þ¤¹ISO C++ ¤ÏÈóº¸ÊÕÃͼ°¤Ø¤Î¥­¥ã¥¹¥È¤Î¥¢¥É¥ì¥¹¤ò¼è¤ë¤³¤È¤ò¶Ø¤¸¤Þ¤¹ISO C++ ¤Ï¥Ý¥¤¥ó¥¿·×»»¤Ë¥á¥ó¥Ð´Ø¿ô¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò»È¤¦¤³¤È¤ò¶Ø¤¸¤Þ¤¹ISO C++ ¤Ï¥Ý¥¤¥ó¥¿·×»»¤Ë´Ø¿ô¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò»È¤¦¤³¤È¤ò¶Ø¤¸¤Þ¤¹ISO C++ ¤Ï¥Ý¥¤¥ó¥¿·×»»¤Ë `void *' ·¿¤Î¥Ý¥¤¥ó¥¿¤ò»È¤¦¤³¤È¤ò¶Ø¤¸¤Þ¤¹ISO C++ ¤Ï¸º»»¤Ë `void *' ·¿¤Î¥Ý¥¤¥ó¥¿¤ò»È¤¦¤³¤È¤ò¶Ø¤¸¤Þ¤¹ISO C++ ¤Ï¸º»»¤Ë´Ø¿ô¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò»È¤¦¤³¤È¤ò¶Ø¤¸¤Þ¤¹ISO C++ ¤Ï¥Ý¥¤¥ó¥¿·×»»¤Ë¥á¥ó¥Ð¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò»È¤¦¤³¤È¤ò¶Ø¤¸¤Þ¤¹ISO C++ ¤Ï¸º»»¤Ë¥á¥ó¥Ð¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò»È¤¦¤³¤È¤ò¶Ø¤¸¤Þ¤¹ISO C++ ¤Ï¸º»»¤Ë¥á¥½¥Ã¥É¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò»È¤¦¤³¤È¤ò¶Ø¤¸¤Þ¤¹ISO C++ ¤Ï̵̾¹½Â¤ÂΤò¶Ø»ß¤·¤Æ¤¤¤Þ¤¹ISO C89 ¤Ï `long long' ¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤óISO C89 ¤Ï complex ·¿¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤óISO C89 ¤Ï²ÄÊÑÇÛÎó¥á¥ó¥Ð¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤óISO C89 ¤Ï¥µ¥¤¥º¤¬É¾²Á¤Ç¤­¤Ê¤¤ÇÛÎó `%s' ¤ò¶Ø¤¸¤Þ¤¹ISO C89 ¤ÏÊ£¹ç¥ê¥Æ¥é¥ë¤ò¶Ø¤¸¤Þ¤¹ISO C89 ¤Ç¤Ï long long À°¿ôÄê¿ô¤ò¶Ø¤¸¤Þ¤¹ISO C89 ¤ÏÀë¸À¤È¥³¡¼¥É¤È¤Îº®¹ç¤ò¶Ø¤¸¤Þ¤¹ISO C89 ¤Ï½é´ü²½ÍѤÎÉû¥ª¥Ö¥¸¥§¥¯¥È»ØÄê¤ò¶Ø¤¸¤Þ¤¹ISO C89 Èóº¸ÊÕÃÍÇÛÎ󤨤Îź»ú¤ò¶Ø¤¸¤Þ¤¹ISO C89 ¤Ï²ÄÊÑĹ¥µ¥¤¥º¤ÎÇÛÎó `%s' ¤ò¶Ø¤¸¤Þ¤¹ISO C99 ¤Ï»ÈÍѤµ¤ì¤ë¤Ù¤­»Ä¤ê¤Î¤Î°ú¿ô¤òÍ׵ᤷ¤Þ¤¹¼±Ê̻Ҥ¬É¬ÍפǤ¹´Ø¿ô¤Î dllimport °À­¤ò̵»ë¤¹¤ë´Ø¿ô¤Ø¤Î dllimport ¤ò̵»ë¤¹¤ëthunk ¤ò»È¤Ã¤Æ vtable ¤ò¼ÂÁõ¤¹¤ë%s Æâ¤Î `%s':%s Æâ: ÊÑ¿ô¤ÈÎã³°ÈϰϤ¬ %d ¤Ç½Å¤Ê¤Ã¤Æ¤¤¤Þ¤¹%s:%d ¤«¤é include ¤µ¤ì¤¿¥Õ¥¡¥¤¥ëÆâ%s:%u ¤«¤é include ¤µ¤ì¤¿¥Õ¥¡¥¤¥ëÃæ´Ø¿ô `%s' Æâ:ÍøÍѲÄǽ¥½¥Õ¥È¥ì¥¸¥¹¥¿¤Î¿ô¤ò¼¨¤¹DATA ¤ä PARAMETER ·Ðͳ¤Î½é´ü²½¤Ï·¿¸ß´¹¤Ç¤¢¤ë¥í¡¼¥«¥ëÊÑ¿ô¤äÇÛÎó¤ò¥¼¥í¤Ë½é´ü²½¤¹¤ë´ûÃΤÎÁ´¤Æ¤Îʸ»úÎóÁàºî¤ò inline ¤Ë¤¹¤ë2 Ì¿Îá°Ê²¼¤Ç¹Ô¤Ê¤¨¤ëÉÔÊѽèÍý¤ò¥¤¥ó¥é¥¤¥ó¤Ë¤¹¤ë¥×¥í¥°¥é¥à¤¬¥³¡¼¥É¥×¥í¥Õ¥¡¥¤¥ë¤¹¤ë¸µ¤Ë¤Ê¤ë¸Ì¤òÁÞÆþ¤¹¤ë¥×¥í¥°¥é¥à¤Ë¥¹¥¿¥Ã¥¯¶­³¦¸¡½Ð¥³¡¼¥É¤òÁÞÆþ¤¹¤ë´Ø¿ô¤ÎÆþ¤ê¸ý/½Ð¸ý¤Ç¥×¥í¥Õ¥¡¥¤¥ë¸Æ¤Ó½Ð¤·¤òÀ¸À®¤¹¤ëñ½ã¤Ê´Ø¿ô¤ò¸Æ¤Ó½Ð¤·Â¦¤ËÅý¹ç¤¹¤ë%s ¤ÇÆâÉô¥³¥ó¥Ñ¥¤¥é¥¨¥é¡¼ (%s:%d)ÆâÉô¥³¥ó¥Ñ¥¤¥ë¥¨¥é¡¼: ¥¨¥é¡¼Êó¹ð¥ë¡¼¥Á¥ó¤ËºÆÆþ¤·¤Þ¤·¤¿¡£ + ÆâÉô¥¨¥é¡¼: %s (¥×¥í¥°¥é¥à %s) + ´°Á´¤Ê¥Ð¥°¥ì¥Ý¡¼¥È¤òÁ÷¤Ã¤Æ¤¯¤À¤µ¤¤¡£ + %s ¤Ë¼ê½ç¤¬½ñ¤¤¤Æ¤¢¤ê¤Þ¤¹¡£ÆâÉô gcc abort. + ÆâÉôŪ¤ÊÊÑ´¹¤Ç¤Ï¥½¡¼¥¹¤ÎËØ¤ó¤É¤ò±ÑÂçʸ»ú¤È¤¹¤ëÆâÉôŪ¤Ë¥½¡¼¥¹¤Î¥±¡¼¥¹¤òÊÝ»ý¤¹¤ëintrinsic ¤ò±ÑÂçʸ»ú¤È¤¹¤ëintrinsic ʸ»ú¤ÏǤ°Õ¤Î¥±¡¼¥¹¤È¤¹¤ëintrinsic ¤¬Î㤨¤Ð SqRt ¤ÎÍѤËÄÖ¤é¤ì¤ë̵¸ú¤ÊÀ©¸æ¼°¤Ç¤¹Ìµ¸ú¤ÊÀë¸À¤Ç¤¹¼°Ê¸¤¬Ìµ¸ú¤Ç¤¹Ìµ¸ú¤Ê½é´ü²½¼°¤Ç¤¹¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹·¿¤¬Ìµ¸ú¤Ç¤¹Ìµ¸ú¤Ê¥á¥½¥Ã¥ÉÀë¸À¤Ç¤¹¡£¥á¥½¥Ã¥É̾¤¬É¬ÍפǤ¹Ìµ¸ú¤Ê¥á¥½¥Ã¥ÉÀë¸À¤Ç¤¹¡£¥á¥½¥Ã¥É̾¤¬É¬ÍפǤ¹Ìµ¸ú¤Ê»²¾È·¿¤Ç¤¹Ìµ¸ú¤Ê·¿É½¸½¤Ç¤¹Ìµ¸ú¤Ê¹¹¿·¼°¤Ç¤¹¥¸¥ã¥ó¥×Àè¤ò¤³¤ÎÃÍ¤ÎÆó¾è¤Ë¥¢¥é¥¤¥ó¥á¥ó¥È¤¹¤ë¼°¤Î½ª¤ê°Ê¹ß¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹´¬¤­Ìᤷ¤ò¹Ô¤Ê¤¦Îã³°Êä­Íѥơ¼¥Ö¥ë¤òÀ¸À®¤¹¤ëL%d ¥­¥ã¥Ã¥·¥å¥ì¥¤¥Æ¥ó¥·¤Ï %s ¤Ë¤È¤Ã¤ÆÉÔÌÀ¤Ç¤¹¸À¸ìͽÌó¸ìʸ»ú¤ÏǤ°Õ¤Î¥±¡¼¥¹¤È¤¹¤ë¸À¸ìͽÌó¸ì¤Ï±ÑÂçʸ»ú¤È¤¹¤ë¸À¸ìͽÌó¸ì¤¬Î㤨¤Ð IOStat ¤ÎÍѤËÄÖ¤é¤ì¤ëIntel ¤Î v1.3 gcc ¤ÎÍͤʥ¿¥¤¥×¤ËÇÛÃÖ¤¹¤ë¥×¥í¥°¥é¥à/¥Ç¡¼¥¿¤ò¥Ç¥Õ¥©¥ë¥È¤Ç³°Éô¥á¥â¥êÆâ¤Ë¥ê¥ó¥¯¤¹¤ë¥×¥í¥°¥é¥à/¥Ç¡¼¥¿¤ò¥Ç¥Õ¥©¥ë¥È¤Ç¥Á¥Ã¥×¾å¤Î¥á¥â¥êÆâ¤Ë¥ê¥ó¥¯¤¹¤ë¥ë¡¼¥×¥³¡¼¥É¤ò¤³¤ÎÃÍ¤ÎÆó¾è¤Ë¥¢¥é¥¤¥ó¥á¥ó¥È¤¹¤ëMCU `%s' ¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤óMIPS ECOFF ·Á¼°¤Ç¤Ï #line ¤ò»ý¤Ä´Ø¿ô¤Ç¤Î¥Õ¥¡¥¤¥ë̾Êѹ¹¤Ïµö²Ä¤µ¤ì¤Þ¤»¤ó'char' ¤ò¥Ç¥Õ¥©¥ë¥È¤ÇÉä¹çÉÕ¤­¤È¤¹¤ë'char' ¤ò¥Ç¥Õ¥©¥ë¥È¤ÇÉä¹ç̵¤·¤È¤¹¤ëÀ°¿ô¤ò 32 ¥Ó¥Ã¥ÈÉý¤È¤¹¤ëÈóÀ°¿ôÄê¿ô¤ÎÀÜÈø´ð¿ô¤¬·¿¤Ê¤·¤Ç¤¢¤ë¤È¤¹¤ëʸ»úÎó¥ê¥Æ¥é¥ë¤ò `const char[]' ¤ÎÂå¤ï¤ê¤Ë `char[]' ¤È¤¹¤ë¥Ç¡¼¥¿¤ò¥×¥é¥¤¥Ù¡¼¥È¤Ç¤Ï¤Ê¤¯¶¦Í­¤µ¤ì¤ë¤è¤¦¥Þ¡¼¥¯¤¹¤ëʸ»úÎó¤ò 'const char *' ¤È¤·¤Æ¥Þ¡¼¥¯¤¹¤ëñ°ì¥¹¥¿¥Ã¥¯¥¤¥ó¥¯¥ê¥á¥ó¥ÈÁàºî¤ÎºÇÂçÃÍ¥¯¥é¥¹Ì¾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹¥¯¥é¥¹¥¿¥¤¥×¹à¤ò·ç¤¤¤Æ¤¤¤Þ¤¹Àµ¼°¤Ê²¾°ú¿ô¹à¤ò·ç¤¤¤Æ¤¤¤Þ¤¹¼±Ê̻Ҥò·ç¤¤¤Æ¤¤¤Þ¤¹¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹Ì¾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹Ì¾Á°¤ò·ç¤¤¤Æ¤¤¤Þ¤¹Äê¿ô¼°¤¬·ç¤±¤Æ¤¤¤ë¤«Ìµ¸ú¤Ç¤¹¥¹¡¼¥Ñ¡¼¥¯¥é¥¹Ì¾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹¹à¤ò·ç¤¤¤Æ¤¤¤Þ¤¹¹à¤Èɬ¿Ü¤Î ')' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹¹à¤Èɬ¿Ü¤Î ']' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹¹à¤Þ¤¿¤Ï ')' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹¹à¤Þ¤¿¤Ïɬ¿Ü¤Î ')' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹ÊÑ¿ô½é´ü²½»Ò¤ò·ç¤¤¤Æ¤¤¤Þ¤¹Â¿½Å include ¤«¤é¤ÎÊݸͭ±×¤È¤Ê¤ë¤Ç¤·¤ç¤¦: + NOTE_INSN_BASIC_BLOCK %d ¤¬´ðËÜ¥Ö¥í¥Ã¥¯ %d ¤ÎÃæ¤Û¤É¤Ë¤¢¤ê¤Þ¤¹NOTE_INSN_BASIC_BLOCK ¤¬¥Ö¥í¥Ã¥¯ %d ¤Ë¤¢¤ê¤Þ¤»¤ó³°ÉôÊÑ¿ô¤ËÆó¤ÄÌܤΥ¢¥ó¥À¡¼¥¹¥³¥¢¤òÉÕ¤±Â­¤µ¤Ê¤¤"¥¹¥â¡¼¥ë¥ì¥¸¥¹¥¿¥¯¥é¥¹" ¤Î¥Ä¥®¥Ï¥®(kludge)¤ò¹Ô¤Ê¤ï¤Ê¤¤¥Õ¥¡¥¤¥ë %s ¤Ë¤Ï¥Ö¥é¥ó¥Á¤¬¤¢¤ê¤Þ¤»¤ó + ´Ø¿ô %s ¤Ë¤Ïʬ´ô¤¬¤¢¤ê¤Þ¤»¤ó + ¥Õ¥¡¥¤¥ë %s ¤Ë¸Æ¤Ó½Ð¤·¤¬¤¢¤ê¤Þ¤»¤ó + ´Ø¿ô %s ¤Ë¸Æ¤Ó½Ð¤·¤¬¤¢¤ê¤Þ¤»¤ó + %s ¤Î¤¿¤á¤Î case ¤¬¤¢¤ê¤Þ¤»¤ócrt0.o ¤ò¥Ç¥Õ¥©¥ë¥È¤È¤·¤Ê¤¤¥Õ¥¡¥¤¥ë %s ¤Ë·ë¤ÓÉÕ¤¯¼Â¹Ô¥³¡¼¥É¤¬¤¢¤ê¤Þ¤»¤ó¡£ + ¥Õ¥¡¥¤¥ë %s ¤Ë¼Â¹Ô²Äǽ¤Ê¥½¡¼¥¹¹Ô¤¬¤¢¤ê¤Þ¤»¤ó + ´Ø¿ô %s ¤Ë¼Â¹Ô²Äǽ¤Ê¥½¡¼¥¹¹Ô¤¬¤¢¤ê¤Þ¤»¤ó + ¥ì¥¸¥¹¥¿¤Î¿ô¤¬À°¿ô¤ò°ú¿ô¤òÅϤ¹¤¿¤á¤Ë»È¤ï¤ì¤ëËöü¤Î´Ø¿ô¤Ç¤Ï¥Õ¥ì¡¼¥à¥Ý¥¤¥ó¥¿¤ò¾Êά¤¹¤ë¥³¥ó¥¹¥È¥é¥¯¥¿¤À¤±¤¬¥³¥ó¥¹¥È¥é¥¯¥¿¤òµ¯Æ°¤Ç¤­¤Þ¤¹¥¤¥ó¥é¥¤¥ó¥Æ¥ó¥×¥ì¡¼¥È¤ÎÌÀ¼¨Åª¤Ê¼ÂÂβ½¤Î¤ß¤òÀ¸À®¤¹¤ëÌÀ¼¨Åª¤Ê¥Æ¥ó¥×¥ì¡¼¥È¼ÂÂβ½¤Î¤ß¤òÀ¸À®¤¹¤ë¥µ¥¤¥¯¥ëËè¤Ë°ì¤Ä¤ÎÌ¿Îá¤À¤±¤òȯ¹Ô¤¹¤ë¸Æ¤Ó½Ð¤·¤Î´Ö FP ¥ì¥¸¥¹¥¿¤Î 32 ¥Ó¥Ã¥È¤À¤±¤òÊݸ¤¹¤ë¥Ö¥í¥Ã¥¯°Üư¤òºÇŬ²½¤¹¤ë32032 ÍѤ˺ÇŬ²½¤¹¤ë32332 cpu ÍѤ˺ÇŬ²½¤¹¤ë32532 cpu ÍѤ˺ÇŬ²½¤¹¤ë3900 ÍѤ˺ÇŬ²½¤¹¤ë4650 ÍѤ˺ÇŬ²½¤¹¤ëCypress ¥×¥í¥»¥Ã¥µÍѤ˺ÇŬ²½¤¹¤ëF930 ¥×¥í¥»¥Ã¥µÍѤ˺ÇŬ²½¤¹¤ëF934 ¥×¥í¥»¥Ã¥µÍѤ˺ÇŬ²½¤¹¤ëSparcLite ¥×¥í¥»¥Ã¥µÍѤ˺ÇŬ²½¤¹¤ëSuperSparc ¥×¥í¥»¥Ã¥µÍѤ˺ÇŬ²½¤¹¤ëlui/addiu ¥¢¥É¥ì¥¹¥í¡¼¥É¤òºÇŬ²½¤¹¤ësibling ¸Æ¤Ó½Ð¤·¤äËöÈøºÆµ¢¸Æ¤Ó½Ð¤·¤òºÇŬ²½¤¹¤ë¥¢¥»¥ó¥Ö¥é¤È¥ê¥ó¥«¤ÇËöÈø¸Æ¤Ó½Ð¤·Ì¿Îá¤òºÇŬ²½¤¹¤ë¥ª¥×¥·¥ç¥ó: + ¥³¥ó¥Ñ¥¤¥éÅý·×¤ò½ÐÎϤ¹¤ëasm ¥Õ¥¡¥¤¥ë¤ËÌ¿Î᥵¥¤¥º¤ò½ÐÎϤ¹¤ëwchar_t ¤Îº¬ËÜŪ¤Ê·¿¤ò `unsigned short' ¤Èʤ¤¹PIC ¥³¡¼¥ÉÀ¸À®¤Ï¹â®´ÖÀܸƤӽФ·¤ÈÁêÍÆ¤ì¤Þ¤»¤ó + PIC ¥³¡¼¥ÉÀ¸À®¤Ï²Äȼ¹Իþ¥â¥Ç¥ë¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó + PRINT_OPERAND NULL ¥Ý¥¤¥ó¥¿PRINT_OPERAND_ADDRESS, null ¥Ý¥¤¥ó¥¿¹½Â¤ÂÎ¥á¥ó¥Ð¤ò·ê¤¬³«¤«¤Ê¤¤¤è¤¦¤Ë¥Ñ¥Ã¥¯¤¹¤ë¥ê¥ó¥«¤Ë -assert pure-text ¤òÅϤ¹FP ¥ì¥¸¥¹¥¿¤Ç FP °ú¿ô¤òÅϤ¹Á´¤Æ¤Î°ú¿ô¤ò¥¹¥¿¥Ã¥¯ÅϤ·¤Ë¤¹¤ë°ú¿ô¤ò¥ì¥¸¥¹¥¿ÅϤ·¤Ë¤¹¤ë°ú¿ô¤ò¥¹¥¿¥Ã¥¯ÅϤ·¤Ë¤¹¤ë¤¤¤¯¤Ä¤«¤Î°ú¿ô¤Ï¥ì¥¸¥¹¥¿ÅϤ·¤Ë¤¹¤ë'inline' ¥­¡¼¥ï¡¼¥É¤ËÃí°Õ¤òʧ¤¦Á´¤Æ¤Î¥ë¡¼¥×¤Ç¥ë¡¼¥×Ÿ³«¤ò¹Ô¤Ê¤¦È¿Éü²ó¿ô¤¬´ûÃΤΤȤ­¡¢¥ë¡¼¥×Ÿ³«¤ò¹Ô¤Ê¤¦ËöÈø¸Æ¤Ó½Ð¤·ºÇŬ²½¤ò¹Ô¤¦¥°¥í¡¼¥Ð¥ë¶¦ÄÌÉôʬ¼°¤ò½üµî¤¹¤ë¥¢¥é¥¤¥ó¤µ¤ì¤Ê¤¤¥¢¥¯¥»¥¹¤òµö²Ä¤¹¤ënop Ì¿ÎáÆâ¤Ë°ú¿ô¥«¥¦¥ó¥È¤òÃÖ¤¯ (push ¤è¤ê¹â®)ÉâÆ°¾®¿ôÅÀÄê¿ô¤ò TOC Æâ¤ËÇÛÃÖ¤¹¤ë¥·¥ó¥Ü¥ë+¥ª¥Õ¥»¥Ã¥ÈÄê¿ô¤ò TOC Æâ¤ËÇÛÃÖ¤¹¤ëÊÑ¿ô¥¢¥É¥ì¥¹¤òÄ̾ï TOC Æâ¤ËÇÛÃÖ¤¹¤ë¥Ð¥°¥ì¥Ý¡¼¥È¤òÁ÷¤ëÁ°¤Ë¤³¤Î»ö¤ò¿´¤Ëα¤á¤ÆÃÖ¤¤¤Æ¤¯¤À¤µ¤¤¡£´°Á´¤Ê¥Ð¥°Êó¹ð¤òÁ÷¤Ã¤Æ²¼¤µ¤¤¡£ + ŬÀڤʤé¤Ð¥×¥ê¥×¥í¥»¥¹¸å¤Î¥½¡¼¥¹¤ò¤Ä¤±¤Æ¤¯¤À¤µ¤¤¡£ + %s ¤ò¸«¤ì¤ÐÊýË¡¤¬½ñ¤¤¤Æ¤¢¤ê¤Þ¤¹¡£ + ¥Ý¥¤¥ó¥¿¤ò 32 ¥Ó¥Ã¥È¤È¤¹¤ë¥Ý¥¤¥ó¥¿¤ò 64 ¥Ó¥Ã¥È¤È¤¹¤ë¾ò·ï¤Î¼Â¹Ô¤è¤ê¤Ïʬ´ô¤ÎÀ¸À®¤òÍ¥À褹¤ë¥Ð¥¤¥È¥¢¥¯¥»¥¹¤è¤ê¥ï¡¼¥É¥¢¥¯¥»¥¹¤òÁª¤Ö¸Æ¤Ó½Ð¤·¤Î´Ö FP ¥ì¥¸¥¹¥¿¤Î 40 ¥Ó¥Ã¥ÈÁ´¤Æ¤òÊݸ¤¹¤ë¥×¥í¥°¥é¥à¤Ç»È¤ï¤ì¤¿ÄÖ¤ê(¤Î¥±¡¼¥¹)¤òÁ´¤ÆÊÝ»ý¤¹¤ë¥Û¥¹¥È¤È¥¿¡¼¥²¥Ã¥È¤¬Æ±¤¸ÉâÆ°¾®¿ô·Á¼°¤ò»È¤¦¿¶¤ëÉñ¤¤¤ò¤µ¤»¤ëg77 ¸ÇÍ­¤Î¥³¥ó¥Ñ¥¤¥é¥Ð¡¼¥¸¥ç¥ó¾ðÊó¤òɽ¼¨¡¢ÆâÉô¥Æ¥¹¥È¤Î¼Â¹ÔÆâÉô¥Ç¥Ð¥Ã¥°´ØÏ¢¾ðÊó¤òɽ¼¨¤¹¤ë¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤¿¥×¥í¥°¥é¥àñ°Ì¤Î̾Á°¤òɽ¼¨¤¹¤ë#ident ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò½èÍý¤¹¤ëspec %c%s%c ¤ò½èÍýÃæ, ¤³¤ì¤Ï '%s' ¤Ç¤¹ + ¥×¥í¥Õ¥¡¥¤¥ë¤Ç mcount ¤òÍøÍѤ¹¤ë¥×¥í¥°¥é¥à¤¬ Unix-f77 Êý¸À¤Îµ¡Ç½¤ò»È¤Ã¤Æ¤¤¤Ê¤¤¥×¥í¥°¥é¥à¤¬ Fortran-90 ŪÊý¸À¤Ç½ñ¤«¤ì¤Æ¤¤¤ë¥×¥í¥°¥é¥à¤Ï Fortran-90 Ū¥Õ¥ê¡¼¥Õ¥©¡¼¥à¤Ç½ñ¤«¤ì¤Æ¤¤¤ë¥×¥í¥°¥é¥à¤Ï VXT (Digital) FORTRAN ¤Ç½ñ¤«¤ì¤Æ¤¤¤ë¥×¥í¥°¥é¥à¤¬Åµ·¿Åª¤Ê FORTRAN 66 Êý¸À¤Ç½ñ¤«¤ì¤Æ¤¤¤ë¥×¥í¥°¥é¥à¤¬Åµ·¿Åª¤Ê Unix f77 Êý¸À¤Ç½ñ¤«¤ì¤Æ¤¤¤ë¥×¥í¥°¥é¥à¤¬±Ñ¾®Ê¸»ú¤Ç½ñ¤«¤ì¤Æ¤¤¤ë¥×¥í¥°¥é¥à¤¬¸·Ì©¤Ë¥±¡¼¥¹º®ºß¤Ç½ñ¤«¤ì¤Æ¤¤¤ë¥×¥í¥°¥é¥à¤¬±ÑÂçʸ»ú¤Ç½ñ¤«¤ì¤Æ¤¤¤ëPC ´ØÏ¢¤Î´Ø¿ô¸Æ¤Ó½Ð¤·¤ò¶Ø¤¸¤ëÁ´¤Æ¤òÄ̾ï TOC Æâ¤ËÇÛÃÖ¤¹¤ë̤½é´ü²½Äê¿ô¤ò ROM ¤ËÃÖ¤¯(Í× -membedded-data)RETURN_ADDRESS_OFFSET ¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤óRTL ¸¡ºº: elt %d(%s) ¤¬ºÇ¸å¤Î elt %d(%s Ãæ) ¤È°ì½ï¤Ë¥¢¥¯¥»¥¹¤·¤Þ¤¹ (%s:%d)RTL check: ¥Ù¥¯¥È¥ë¤Î elt %d ¤òºÇ¸å¤Î elt %d (%s Ãæ)¤È°ì½ï¤Ë¥¢¥¯¥»¥¹¤·¤Þ¤¹ (%s:%d)RTL ¸¡ºº: ¥³¡¼¥É `%s' ¤« `%s' ¤Î¤Ï¤º¤Ê¤Î¤Ë `%s' (%s Ãæ)¤Ç¤¹ (%s:%d)RTL ¸¡ºº: ¥³¡¼¥É `%s' ¤Î¤Ï¤º¤Ê¤Î¤Ë `%s' (%s Ãæ)¤Ç¤¹ (%s:%d)RTL ¸¡ºº: elt %d ·¿¤Ï '%c' ¤« '%c' ¤Î¤Ï¤º¤Ê¤Î¤Ë '%c' (rtx %s, %s Ãæ) ¤Ç¤¹ (%s:%d)RTL ¸¡ºº: elt %d ·¿¤Ï '%c' ¤Î¤Ï¤º¤Ê¤Î¤Ë '%c' (rtx %s, %s Ãæ)¤Ç¤¹ (%s:%d)%s ¤«¤é spec ¤òÆÉ¤ß¹þ¤ßÃæ + ¥ª¥Ö¥¸¥§¥¯¥È¥Õ¥¡¥¤¥ë¤Î¥µ¥¤¥º¤ò¾®¤µ¤¯¤¹¤ësb ¥ì¥¸¥¹¥¿¤ò¥¼¥í¤È¤¹¤ë¡£ÀäÂÐ¥¢¥É¥ì¥¹¤ò»ÈÍѤ¹¤ë¥³¡¼¥ÉÇÛÃÖ¤ò²þÁ±¤¹¤ë¤¿¤á¤Ë´ðËÜ¥Ö¥í¥Ã¥¯¤òºÆÀ°Íý¤¹¤ë²Ã»»¡¢Èæ³Ó¥Ö¥é¥ó¥Á¤ÎÂå¤ï¤ê¤Ë¥«¥¦¥ó¥È¥ì¥¸¥¹¥¿¤Î¥Ö¥é¥ó¥Á¤ò»È¤¦¼Â¹Ô½ªÎ»»þ¤Ë±Ê³Ū¤Ë³ÎÊݤµ¤ì¤¿¥á¥â¥ê¤òÊó¹ð¤¹¤ë¼Â¹Ô½ªÎ»»þ¤Ë¥³¥ó¥Ñ¥¤¥é¤Î³Æ²áÄø¤ËÍפ·¤¿»þ´Ö¤òÊó¹ð¤¹¤ëIEEE ½àµò¤Î¿ô³Ø¥é¥¤¥Ö¥é¥ê¥ë¡¼¥Á¥ó (OSF/1) ¤òÍ׵᤹¤ë¥ì¥¸¥¹¥¿³ÎÊݤθå¤ÇÌ¿Îá¤òÊ¤Ùľ¤¹¥ì¥¸¥¹¥¿³ÎÊݤÎÁ°¤ËÌ¿Îá¤òÊ¤Ùľ¤¹legend ¾ðÊó¤ò°Ý»ý¤¹¤ëɸ½à MXDB ¾ðÊó¤òÊÝ»ý¤¹¤ë'¾®¤µ¤Ê' ½¸¹çÂΤò¥ì¥¸¥¹¥¿¤Ç¤Ï¤Ê¤¯¥á¥â¥ê¤Ë³ÊǼ¤·¤ÆÊÖ¤¹'¾®¤µ¤Ê' ½¸¹çÂΤò¥ì¥¸¥¹¥¿¤Ë³ÊǼ¤·¤ÆÊÖ¤¹ÉâÆ°¾®¿ôÅÀ¤Î·ë²Ì¤ò ac0 ¤ÇÊÖ¤¹ÉâÆ°¾®¿ôÅÀ¤Î·ë²Ì¤ò¥á¥â¥ê¤ÇÊÖ¤¹FPU ¥ì¥¸¥¹¥¿Æâ¤Îµ¡Ç½¤ÎÃͤòÊÖ¤¹´Ø¿ô¤Î¼çÍ×ÉôʬËè¤Ë r30 ¤òºÆÍøÍѤ¹¤ë-mep -mprolog-function ¤ÈƱÍÍ¥¹¥â¡¼¥ë¥á¥â¥ê¥â¥Ç¥ë¤Ç ISR ¤ò¸Ù¤ë DP ¤ò¥»¡¼¥Ö¤¹¤ë½êÍ¿¤Î CPU ÍѤΥ³¡¼¥É¤ò¥¹¥±¥¸¥å¡¼¥ë¤¹¤ëCPU ¤ËÍ¿¤¨¤é¤ì¤¿¥¹¥±¥¸¥å¡¼¥ë¤òÍøÍѤ¹¤ëfor ½é´ü²½Ê¸¤ÎÊÑ¿ô¤ò¥¹¥³¡¼¥×³°¤Ë³ÈÂ礹¤ë¥³¡¼¥É¤¬À¸À®¤µ¤ì¤ë CPU ¤òÁªÂò¤¹¤ëWindows ¤Î define ¤òÀßÄꤹ¤ë¥¯¥é¥¹¥Ñ¥¹¤òÀßÄꤹ¤ë¥¯¥é¥¹¥Ñ¥¹¤òÀßÄꤷ¤Æ¥·¥¹¥Æ¥à¥Ñ¥¹¤ò±£¤¹ÁȤ߹þ¤ß¿ô³Ø´Ø¿ô¤Î¸å¤Ë errno ¤ò¥»¥Ã¥È¤¹¤ëºÇÂ祢¥é¥¤¥ó¥á¥ó¥È¤ò 4 ¤ËÀßÄꤹ¤ëºÇÂ祢¥é¥¤¥ó¥á¥ó¥È¤ò 8 ¤ËÀßÄꤹ¤ëPPC_EMB ¥Ó¥Ã¥È¤ò ELF ¥Õ¥é¥°¥Ø¥Ã¥ÀÆâ¤Ë¥»¥Ã¥È¤¹¤ëSDA Îΰè¤Ë¤È¤Ã¤ÆË¾¤Þ¤·¤¤ºÇÂç¥Ç¡¼¥¿¥µ¥¤¥º¤òÀßÄꤹ¤ëTDA Îΰè¤Ë¤È¤Ã¤ÆË¾¤Þ¤·¤¤ºÇÂç¥Ç¡¼¥¿¥µ¥¤¥º¤òÀßÄꤹ¤ëZDA Îΰè¤Ë¤È¤Ã¤ÆË¾¤Þ¤·¤¤ºÇÂç¥Ç¡¼¥¿¥µ¥¤¥º¤òÀßÄꤹ¤ë¹Ô¤ÎŤµ¤ÎºÇÂçÃͤòÀßÄꤹ¤ëspec %s ¤ò '%s' ¤ËÀßÄêÃæ + + ¥¹¥â¡¼¥ë¥Ç¡¼¥¿Îΰè: none, sdata, use¥¹¥â¡¼¥ë¥á¥â¥ê¥â¥Ç¥ëÌ¿Î᥹¥±¥¸¥å¡¼¥ê¥ó¥°¤Î¤¿¤á¤Ë CPU ¤ò»ØÄꤹ¤ëRPTS ÍѤκÇÂçÈ¿Éü¿ô¤ò»ØÄꤹ¤ë¥Æ¥ó¥×¥ì¡¼¥È¼ÂÂβ½¤Î¿¼¤µ¤ÎºÇÂçÃͤò»ØÄꤹ¤ë°ú¿ô¤ÈÂç°è¥Ç¡¼¥¿¤ä¾¤Î°ú¿ô¤ÈÊÌ̾¤Ë¤Ê¤ê¤¦¤ë»ö¤ò»ØÄꤹ¤ëMCU ̾¤ò»ØÄꤹ¤ë½é´ü¥¹¥¿¥Ã¥¯¥¢¥É¥ì¥¹¤ò»ØÄꤹ¤ë¹½Â¤ÂÎ¥¢¥é¥¤¥ó¥á¥ó¥È¤ÎºÇ¾®¥Ó¥Ã¥È¿ô¤ò»ØÄꤹ¤ëÄê¿ôʸ»úÎóÍѤΥ¯¥é¥¹Ì¾¤ò»ØÄꤹ¤ë¥¿¡¼¥²¥Ã¥È CPU ¤Î̾Á°¤ò»ØÄꤹ¤ë¥¿¡¼¥²¥Ã¥È¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤Î̾Á°¤ò»ØÄꤹ¤ë¥ì¥¸¥¹¥¿³ÎÊݽç¤ò»ØÄꤹ¤ëPIC ¥¢¥É¥ì¥·¥ó¥°¤ËÍøÍѤµ¤ì¤ë¥ì¥¸¥¹¥¿¤ò»ØÄꤹ¤ëÉâÆ°¾®¿ôÅÀ¥¨¥ß¥å¥ì¡¼¥¿¤Î¥Ð¡¼¥¸¥ç¥ó¤ò»ØÄꤹ¤ë¥ª¥Ö¥¸¥§¥¯¥È¥³¡¼¥É¤Ë´Ø¿ô̾¤ò³ÊǼ¤¹¤ë°ú¿ô¥ì¥¸¥¹¥¿¤Ë¥í¡¼¥«¥ë¤Î¤â¤Î¤ò³ÊǼ¤¹¤ëʸ»úÎó¤ò½ñ¤­¹þ¤ß²Äǽ¥Ç¡¼¥¿¥»¥¯¥·¥ç¥ó¤Ë³ÊǼ¤¹¤ë¥ë¡¼¥×¤ÎÃæ¤ÎÁ´¤Æ¤Î°ìÈÌͶƳÊÑ¿ô¤ò¶¯Åٺ︺¤¹¤ëGreen Hill ¤Î ABI ¤ò¥µ¥Ý¡¼¥È¤¹¤ëThumb ¤È ARM Ì¿Î᥻¥Ã¥È´Ö¤Î¸Æ¤Ó½Ð¤·¤ò¥µ¥Ý¡¼¥È¤¹¤ëÊÂÎó´Ä¶­¤Ç¤Î¥á¥Ã¥»¡¼¥¸¥Ñ¥Ã¥·¥ó¥°¤ò¥µ¥Ý¡¼¥È¤¹¤ëƱ´üÈó¸Æ¤Ó½Ð¤·Îã³°¤ò¥µ¥Ý¡¼¥È¤¹¤ë¥Ç¥Ð¥Ã¥°¥À¥ó¥×¤ÇÌ¿ÎáÈÖ¹æ¤È¹ÔÈÖ¹æ¥Î¡¼¥È¤Î½ÐÎϤòÍÞÀ©¤¹¤ë¥¹¥¤¥Ã¥Á: + -include ¾¤Î¥Õ¥¡¥¤¥ë¤ÎÁ°¤Ë ¤ÎÆâÍÆ¤ò´Þ¤á¤ë + -imacros ¤Î¥Þ¥¯¥íÄêµÁ¤ò¼õ¤±Æþ¤ì¤ë + -iprefix ¼¡¤ÎÆó¤Ä¤Î¥ª¥×¥·¥ç¥óÍÑ¥×¥ì¥Õ¥£¥¯¥¹¤Ë ¤ò»ØÄê + -iwithprefix ¤ò¥·¥¹¥Æ¥à include ¥Ñ¥¹¤Î½ª¤ê¤ËÄɲ乤ë + -iwithprefixbefore ¤ò¥á¥¤¥ó include ¥Ñ¥¹¤Î½ª¤ê¤ËÄɲ乤ë + -isystem ¤ò¥·¥¹¥Æ¥à include ¥Ñ¥¹¤ÎºÇ½é¤ËÄɲ乤ë + ¥·¥ó¥Ü¥ë̾¤ò¾®Ê¸»ú¤È¤¹¤ë¥·¥ó¥Ü¥ë̾¤òÂçʸ»ú¤È¤¹¤ë¥·¥ó¥Ü¥ë̾¤Ï¥±¡¼¥¹º®ºß¤ÇÄÖ¤é¤ì¤ë¥·¥ó¥Ü¥ë¤ÎƬ¤Ë¥¢¥ó¥À¡¼¥¹¥³¥¢¤ò¤Ä¤±¤ëºÇÄã¤Ç¤â°ì²ó¤Ï³ÆÈ¿Éü DO ¥ë¡¼¥×¤¬½èÍý¤µ¤ì¤ë¤È¤¹¤ë¥¿¡¼¥²¥Ã¥È¤Ï split Ì¿Îá¤È¥Ç¡¼¥¿¥á¥â¥ê¤ò»ý¤¿¤Ê¤¤¥¿¡¼¥²¥Ã¥È¤Ï split Ì¿Îá¤È¥Ç¡¼¥¿¥á¥â¥ê¤ò»ý¤ÄAM33 ¥×¥í¥»¥Ã¥µ¤ò¥¿¡¼¥²¥Ã¥È¤È¤¹¤ëMMU ¤Ï¥¢¥é¥¤¥ó¥á¥ó¥È¤µ¤ì¤Ê¤¤¥¢¥¯¥»¥¹¤Ç¥È¥é¥Ã¥×¤òȯ¤¹¤ë¤Ç¤·¤ç¤¦¥¹¥ì¥Ã¥É¥â¥Ç¥ë: %s + Thumb: ´Ø¿ô¥Ý¥¤¥ó¥¿¤¬Èó Thumb ¤Èǧ¼±¤¹¤ë¥³¡¼¥É¤ËÆÍÆþ¤¹¤ë²ÄǽÀ­¤¬¤¢¤ë¤È¤ß¤Ê¤¹Thumb: ÈóÀÅŪ´Ø¿ô¤¬ ARM ¥³¡¼¥É¤«¤é¸Æ¤Ó½Ð¤µ¤ì¤ë²ÄǽÀ­¤¬¤¢¤ë¤È¤ß¤Ê¤¹Thumb: ÉÔÍפʾì¹ç¤Ç¤â(Ëöü)¥¹¥¿¥Ã¥¯¥Õ¥ì¡¼¥à¤òÀ¸À®¤¹¤ëThumb: ÉÔÍפʾì¹ç¤Ç¤â(ÈóËöü)¥¹¥¿¥Ã¥¯¥Õ¥ì¡¼¥à¤òÀ¸À®¤¹¤ë¥×¥í¥·¡¼¥¸¥ã¸Æ¤Ó½Ð¤·Ãæ¤ÎϢ³¥«¥ó¥Þ¤Ç null °ú¿ô¤òɽ¸½¤¹¤ëÀ°¿ô¤Î¥¼¥í½ü»»¤ò¥È¥é¥Ã¥×¤¹¤ëÀ°¿ô½ü»»¤Î¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤ò¥È¥é¥Ã¥×¤¹¤ëÁ´¤Æ¤Î·Ù¹ð¤ò¥¨¥é¡¼¤È¤·¤Æ¼è¤ê°·¤¦0 ¤Î½é´ü²½ÃͤòÈó¥¼¥íÃͤȤ·¤Æ¼è¤ê°·¤¦¥í¡¼¥«¥ëÊÑ¿ô¤È COMMON ¥Ö¥í¥Ã¥¯¤ò SAVE ʸ¤Ç̾Á°ÉÕ¤±¤é¤ì¤¿¤è¤¦¤Ë¼è¤ê°·¤¦Í½´ü¤µ¤ì¤ë¥á¥â¥ê¥ì¥¤¥Æ¥ó¥·¤òÄ´À°¤¹¤ë¥á¥ó¥Æ¥Ê¥Æ¥¹¥È¥³¡¼¥É¤òÍ­¸ú¤Ë¤¹¤ëÂбþ¤Î¤Ê¤¤ ']' ¤Ç¤¹¥½¡¼¥¹¥Õ¥¡¥¤¥ë %s ¤òÆÉ¤ß¹þ¤ßÃæ¤Ëͽ´ü¤»¤Ì EOF. + .bss ¤Ë¤¢¤ë¥í¡¼¥«¥ë¤Ê¤â¤Î¤Ï½é´ü²½¤µ¤ì¤Ê¤¤.data ¤Ë¤¢¤ë¥í¡¼¥«¥ë¤Ê¤â¤Î¤Ï½é´ü²½¤µ¤ì¤Ê¤¤¥µ¥Ý¡¼¥È¤µ¤ì¤Ê¤¤ -- ÇÛÎó¤Î¥³¡¼¥ÉÀ¸À®¤Ë±Æ¶Á¤¹¤ë¥µ¥Ý¡¼¥È¤µ¤ì¤Ê¤¤ -- libf2c-calling ¥³¡¼¥É¤òÀ¸À®¤·¤Ê¤¤»È¤¤Êý: %s [¥ª¥×¥·¥ç¥ó] ¥Õ¥¡¥¤¥ë... + »È¤¤Êý: %s [¥¹¥¤¥Ã¥Á] ÆþÎÏ ½ÐÎÏ + 128 ¥Ó¥Ã¥È¤Î long double ¤ò»ÈÍѤ¹¤ë16 ¥Ó¥Ã¥ÈÀ°¿ô¤ò»ÈÍѤ¹¤ë32 ¥Ó¥Ã¥ÈÉâÆ°¾®¿ô¤ò»ÈÍѤ¹¤ë32 ¥Ó¥Ã¥ÈÀ°¿ô¤ò»ÈÍѤ¹¤ë32 ¥Ó¥Ã¥È ABI ¤ò»ÈÍѤ¹¤ë32 ¥Ó¥Ã¥È FP ¥ì¥¸¥¹¥¿¤ò»ÈÍѤ¹¤ë32 ¥Ó¥Ã¥È°ìÈ̥쥸¥¹¥¿¤ò»ÈÍѤ¹¤ë32 ¥Ó¥Ã¥È long ·¿¤ò»ÈÍѤ¹¤ëswitch ¥Æ¡¼¥Ö¥ë¤Ç 4 ¥Ð¥¤¥È¥¨¥ó¥È¥ê¤ò»ÈÍѤ¹¤ë64 ¥Ó¥Ã¥ÈÉâÆ°¾®¿ô¤ò»ÈÍѤ¹¤ë64 ¥Ó¥Ã¥È long double ¤ò»ÈÍѤ¹¤ë64 ¥Ó¥Ã¥È ABI ¤ò»ÈÍѤ¹¤ë64 ¥Ó¥Ã¥È FP ¥ì¥¸¥¹¥¿¤ò»ÈÍѤ¹¤ë64 ¥Ó¥Ã¥È°ìÈ̥쥸¥¹¥¿¤ò»ÈÍѤ¹¤ë64 ¥Ó¥Ã¥È int ·¿¤ò»ÈÍѤ¹¤ë64 ¥Ó¥Ã¥È long ·¿¤ò»ÈÍѤ¹¤ë64 ¥Ó¥Ã¥È long ¤ò»ÈÍѤ¹¤ëABI ͽÌó¥ì¥¸¥¹¥¿¤ò»ÈÍѤ¹¤ëCygwin ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤ò»ÈÍѤ¹¤ëDEC ¥¢¥»¥ó¥Ö¥éʸˡ¤ò»ÈÍѤ¹¤ëGNU as ¤òÍøÍѤ¹¤ëGP ´ØÏ¢ sdata/sbss ¥»¥¯¥·¥ç¥ó¤ò»ÈÍѤ¹¤ëH8/300 ¥¢¥é¥¤¥ó¥á¥ó¥Èµ¬Â§¤ò»ÈÍѤ¹¤ëÉâÆ°¾®¿ôÅÀÈæ³Ó¤Ë IEEE µ¬³Ê¤ò»È¤¦Irix PIC ¤òÍøÍѤ¹¤ëMIPS as ¤òÍøÍѤ¹¤ëMPYI Ì¿Îá¤ò C3x ÍѤ˻ÈÍѤ¹¤ëMingw ¸ÇÍ­¤Î¥¹¥ì¥Ã¥É¥µ¥Ý¡¼¥È¤ò»ÈÍѤ¹¤ëMingw32 ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤ò»ÈÍѤ¹¤ëOSF PIC ¤òÍøÍѤ¹¤ëPOWER Ì¿Î᥻¥Ã¥È¤ò»ÈÍѤ¹¤ëPOWER2 Ì¿Î᥻¥Ã¥È¤ò»ÈÍѤ¹¤ëPowerPC °ìÈÌÍÑÅÓ¥°¥ë¡¼¥×¥ª¥×¥·¥ç¥óÌ¿Îá¤ò»ÈÍѤ¹¤ëPowerPC ¥°¥é¥Õ¥£¥¯¥¹¥°¥ë¡¼¥×¥ª¥×¥·¥ç¥óÌ¿Îá¤ò»ÈÍѤ·¤Ê¤¤PowerPC Ì¿Î᥻¥Ã¥È¤ò»ÈÍѤ¹¤ëPowerPC-64 Ì¿Î᥻¥Ã¥È¤ò»ÈÍѤ¹¤ëRAM ¤ÎÂå¤ï¤ê¤Ë ROM ¤òÍøÍѤ¹¤ëUNIX ¥¢¥»¥ó¥Ö¥éʸˡ¤ò»ÈÍѤ¹¤ëV8 Sparc ISA ¤ò»ÈÍѤ¹¤ëVAX ÉâÆ°¾®¿ôÅÀ¤òÍøÍѤ¹¤ëVAX-C ¥¢¥é¥¤¥ó¥á¥ó¥È¤ò»ÈÍÑ´Ø¿ô¹àÌܤÎÂå¤ï¤ê¤òÍøÍѤ¹¤ëÁǤΠWindows ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤ò»ÈÍѤ¹¤ë¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥ó¤Î¥Ð¥¤¥È½ç¤ò»ÈÍѤ¹¤ëcc- ¤È libc ¸ß´¹¤Î 32 ¥Ó¥Ã¥È long ¤ò»ÈÍѤ¹¤ëÊ£»¨¤Ê¥¢¥É¥ì¥·¥ó¥°¥â¡¼¥É¤ò»ÈÍѤ¹¤ëvolatile ¥á¥â¥ê»²¾ÈÍѥǡ¼¥¿¥­¥ã¥Ã¥·¥å¤òÍøÍѤ¹¤ë(¥Ç¥Õ¥©¥ë¥È)Ëä¤á¹þ¤ß PIC ¤ò»ÈÍѤ¹¤ë¹â®¤À¤¬¶á»÷ÃͤȤʤëÉâÆ°¾®¿ô¤«¤éÀ°¿ô¤Ø¤ÎÊÑ´¹¤òÍøÍѤ¹¤ëÍ¿¤¨¤é¤ì¤¿ CPU ÍѤε¡Ç½¤È¥¹¥±¥¸¥å¡¼¥ë¥³¡¼¥É¤òÍøÍѤ¹¤ëCPU ¤ËÍ¿¤¨¤é¤ì¤¿ÆÃħ¤ä¥¹¥±¥¸¥å¡¼¥ë¤òÍøÍѤ¹¤ë¥Õ¥é¥Ã¥È¥ì¥¸¥¹¥¿¥¦¥£¥ó¥É¥¦¥â¥Ç¥ë¤ò»ÈÍѤ¹¤ëÉâÆ°¾®¿ôÅÀ¥ì¥¸¥¹¥¿¤òÍøÍѤ¹¤ëÍ¿¤¨¤é¤ì¤¿ Sparc ¥³¡¼¥É¥â¥Ç¥ë¤ò»ÈÍѤ¹¤ë¥Ï¡¼¥É¥¦¥§¥¢ÉâÆ°¾®¿ôÅÀ¤òÍøÍѤ¹¤ë¥Ï¡¼¥É¥¦¥§¥¢ÉâÆ°¾®¿ôÅÀÌ¿Îá¤ò»ÈÍѤ¹¤ë¥Ï¡¼¥É¥¦¥§¥¢ÉâÆ°¾®¿ôÅÀ¤òÍøÍÑ»ÍÇÜÀºÅÙÉâÆ°¾®¿ôÅÀÌ¿Îá¤ò»ÈÍѤ¹¤ëin/loc/out ¥ì¥¸¥¹¥¿Ì¾¤ò»ÈÍѤ¹¤ë´ÖÀܸƤӽФ·¤ò»ÈÍѤ¹¤ë¥«¡¼¥Í¥ë¥°¥í¡¼¥Ð¥ë¥ì¥¸¥¹¥¿¤òÍøÍѥ顼¥¸¥á¥â¥ê¥â¥Ç¥ë¤òÍøÍÑÉâÆ°¾®¿ôÅÀ±é»»¤ò¹Ô¤¦¥é¥¤¥Ö¥é¥ê¸Æ¤Ó½Ð¤·¤òÍøÍѤ¹¤ë¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¤Î¥Ð¥¤¥È½ç¤ò»ÈÍѤ¹¤ë¥Ç¡¼¥¿¤Î¥Ð¥¤¥È½ç¤Ë¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¤ò»ÈÍѤ¹¤ë¥×¥í¥Õ¥¡¥¤¥ëÍÑ¤Ë mcount ¤òÍøÍѤ¹¤ë¥×¥í¥Õ¥¡¥¤¥ë¤Î¤¿¤á¤Ë mcount_ptr ¤òÍøÍѤ¹¤ëasm ¸å²áÄø¤Ç mips-tfile ¤òÍøÍѤ¹¤ëmips16 ¤Î entry/exit µ¿»÷¥ª¥Ú¥é¥ó¥É¤ò»ÈÍѤ¹¤ë¾è»»Ì¿Îá¤ò»ÈÍѤ¹¤ë¾è»»-²Ã»»ÉâÆ°¾®¿ôÅÀÌ¿Îá¤ò¤ò»ÈÍѤ¹¤ëPowerPC ¥¢¡¼¥­¥Æ¥¯¥Á¥ãÍѤο·¤·¤¤¥Ë¡¼¥â¥Ë¥Ã¥¯¤ò»ÈÍѤ¹¤ëÉáÄ̤θƤӽФ·µ¬Ìó¤ò»È¤¦¥Î¡¼¥Þ¥ë¥á¥â¥ê¥â¥Ç¥ë¤òÍøÍÑPowerPC ¥¢¡¼¥­¥Æ¥¯¥Á¥ãÍѤθŤ¤¥Ë¡¼¥â¥Ë¥Ã¥¯¤ò»ÈÍѤ¹¤ëʬ´ô·ÐÏ©¿ä¬ÍѤΥץí¥Õ¥¡¥¤¥ë¾ðÊó¤òÍøÍѤ¹¤ë½ÐÎϤ¹¤ë°ú¿ô¤ò¥»¡¼¥Ö¤¹¤ë¤¿¤á push Ì¿Îá¤ò»È¤¦°ú¿ô¤ò¥ì¥¸¥¹¥¿ÅϤ·¤Ë¤¹¤ëñÀºÅÙ(32bit) FP ¤Î¤ß¤òÍøÍѤ¹¤ëÄ㮤À¤¬Àµ³Î¤ÊÉâÆ°¾®¿ô¤«¤éÀ°¿ô¤Ø¤ÎÊÑ´¹¤òÍøÍѤ¹¤ë¥¹¥â¡¼¥ë¥á¥â¥ê¥â¥Ç¥ë¤òÍøÍÑ¥½¥Õ¥ÈÉâÆ°¾®¿ôÅÀ¤òÍøÍѤ¹¤ë¥¹¥¿¥Ã¥¯¥Ð¥¤¥¢¥¹¤ò»ÈÍѤ¹¤ëɸ½àŪ¸Æ¤Ó½Ð¤·¼ê½ç¤ò»È¤¤¡¢°ú¿ô¥«¥¦¥ó¥È word ¤ò¤Ä¤±¤ë¥À¥Ö¥ë¥ï¡¼¥É¥³¥Ô¡¼ÍѤζ¯¤¯¥¢¥é¥¤¥ó¤µ¤ì¤¿¹½Â¤ÂΤò»ÈÍѤ¹¤ë´Ø¿ô³«»ÏÉôʬÍѤΥ¹¥¿¥Ö¤ò»ÈÍѤ¹¤ë´Ø¿ô¤ÎÁ°ÃÖ¤­/·ë¤Ó¤Î¤¿¤á¤Î¥µ¥Ö¥ë¡¼¥Á¥ó¤òÍøÍѤ¹¤ë¥·¥ó¥Ü¥ê¥Ã¥¯¥ì¥¸¥¹¥¿Ì¾¤ò»ÈÍѤ¹¤ëAPCS ¤Î 26 ¥Ó¥Ã¥ÈÈǤò»ÈÍѤ¹¤ëAPCS ¤Î 32 ¥Ó¥Ã¥ÈÈǤò»ÈÍѤ¹¤ëBK ¥ì¥¸¥¹¥¿¤òÈÆÍѥ쥸¥¹¥¿¤È¤·¤Æ»ÈÍѤ¹¤ëCygwin ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤ò»ÈÍѤ¹¤ëMingw32 ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤ò»ÈÍѤ¹¤ëdouble ¤Î¥µ¥¤¥º¤ò float ¤ÈƱ¤¸¤È¤·¤Æ»ÈÍѤ¹¤ëÎóµó·¿¤¬ÊÝ»ý¤Ç¤­¤ëºÇ¾®¤ÎÀ°¿ô·¿¤ò»ÈÍѤ¹¤ë¥æ¡¼¥¶¥°¥í¡¼¥Ð¥ë¥ì¥¸¥¹¥¿¤òÍøÍÑVisual Ì¿Î᥻¥Ã¥È¤òÍøÍѤ¹¤ë·¿¤Ë¸ß´¹À­¤Î¤Ê¤¤´Ø¿ô¤Î¥­¥ã¥¹¥È¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë½¤¾þ»Ò¤ò¼è¤êµî¤ë¥­¥ã¥¹¥È¤Ë¤Ä¤¤¤Æ·Ù¹ð¤¹¤ë¼Â¹Ô¤µ¤ì¤ë¤³¤È¤¬¤Ê¤¤¥³¡¼¥É¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ëISO C ¤Ç¤½¤Î°ÕÌ£¤¬Êѹ¹¤µ¤ì¤¿ÆâÍÆ¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë²ò¼á¤Ë¸í²ò¤ò¾·¤¯¤â¤Î¤Ë¤Ä¤¤¤Æ·Ù¹ð¤¹¤ëÎóµóÄê¿ô¤Î switch ¤Ç case »ØÄ꤬·ç¤±¤Æ¤¤¤ë¤â¤Î¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë¥Õ¥¡¥¤¥ë¥¹¥³¡¼¥×¥ì¥Ù¥ë¤Ç¤Ê¤¤ extern ¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë´Ø¿ô¥Ý¥¤¥ó¥¿¤Î·×»»¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ënoreturn °À­¤Î¸õÊä¤È¤Ê¤ê¤½¤¦¤Ê´Ø¿ô¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ëformat °À­¤ò¤Î¸õÊä¤È¤Ê¤ê¤½¤¦¤Ê´Ø¿ô¤Ë¤Ä¤¤¤Æ·Ù¹ð¤¹¤ë»öÁ°¤ÎÀë¸À¤Ê¤·¤ÎÂç°è´Ø¿ô¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë¥×¥í¥È¥¿¥¤¥×¤Ê¤·¤ÎÂç°è´Ø¿ô¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë°ÅÌۤδؿôÀë¸À¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ëÌá¤êÃͤη¿¤È°ìÃפ·¤Ê¤¤¤â¤Î¤Ë¤Ä¤¤¤Æ·Ù¹ð¤¹¤ëƱ°ì¥ª¥Ö¥¸¥§¥¯¥È¤ÎÀë¸À¤¬Ê£¿ô¤¢¤ì¤Ð·Ù¹ð¤¹¤ëÈó²¾Áۥǥ¹¥È¥é¥¯¥¿¤Ë¤Ä¤¤¤Æ·Ù¹ð¤¹¤ë¥×¥í¥È¥¿¥¤¥×¤µ¤ì¤Æ¤¤¤Ê¤¤´Ø¿ôÀë¸À¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ëÈóʸ»úÎó¥ê¥Æ¥é¥ë¤Î format ʸ»úÎó¤Ë¤Ä¤¤¤Æ·Ù¹ð¤¹¤ë¥ª¡¼¥Ð¡¼¥í¡¼¥É¤µ¤ì¤¿²¾ÁÛ´Ø¿ô̾¤Ë¤Ä¤¤¤Æ·Ù¹ð¤¹¤ë¥Ý¥¤¥ó¥¿¤Î¥­¥ã¥¹¥È¤Ç¥¢¥é¥¤¥ó¥á¥ó¥È¤¬Áý²Ã¤¹¤ë¤â¤Î¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë³ç¸Ì¤ò·ç¤¤¤Æ¤¤¤ë²ÄǽÀ­¤¬¤¢¤ë¾ì¹ç¤Ë·Ù¹ð¤¹¤ë¥»¥­¥å¥ê¥Æ¥£Åª¤ÊÌäÂê¤È¤Ê¤ê¤¦¤ë format ´Ø¿ô¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ëÉûºîÍÑ´°Î»ÅÀµ¬Â§¤òÇˤë²ÄǽÀ­¤¬¤¢¤ë¾ì¹ç¤Ë·Ù¹ð¤¹¤ë·¿ÊÑ´¹¤¬º®Í𤹤ë²ÄǽÀ­¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ëprintf/scanf/strftime/strfmon ·Á¼°¤ÎÊÑ§Ū¤Ê¤â¤Î¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë¹½Â¤ÂΡ¢¶¦ÍÑÂÎËô¤ÏÇÛÎó¤òÊÖ¤¹¤â¤Î¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ëÉä¹çÉÕ¤­/Éä¹ç̵¤·¤ÎÈæ³Ó¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ëź»ú¤Î·¿¤¬ 'char' ¤Ç¤¢¤ì¤Ð·Ù¹ð¤¹¤ëµ¿¤ï¤·¤¤ main ¤ÎÀë¸À¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ëÉâÆ°¾®¿ôÅÀ¿ô¤ÎÅù²Á¥Æ¥¹¥È¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë#import ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÍøÍѤ˴ؤ·¤Æ·Ù¹ð¤¹¤ëǧ¼±¤Ç¤­¤Ê¤¤ pragma ¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ëFortran ³ÈÄ¥(º£¤Ï¾¯¤Ê¤¤¤¬)¤Î»ÈÍѤˤĤ¤¤Æ·Ù¹ð¤¹¤ëÊ£¿ôʸ»ú¥ê¥Æ¥é¥ë¤Î»ÈÍѤ˴ؤ·¤Æ·Ù¹ð¤¹¤ëEffective C++ ¼°¤Î»Ø¿Ë¤«¤é¤Ï¤º¤ì¤ë¤â¤Î¤Ë¤Ä¤¤¤Æ·Ù¹ð¤¹¤ë.class ¥Õ¥¡¥¤¥ë¤¬¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤è¤ê¸Å¤±¤ì¤Ð·Ù¹ð¤¹¤ëC ¼°¤Î¥­¥ã¥¹¥È¤¬¥×¥í¥°¥é¥à¤Ç»È¤ï¤ì¤¿¤é·Ù¹ð¤¹¤ë¥»¥ì¥¯¥¿¤¬Ê£¿ô¤Î¥á¥½¥Ã¥É¤ò»ý¤Ã¤Æ¤¤¤ì¤Ð·Ù¹ð¤¹¤ë¿ä¾©¤µ¤ì¤Ê¤¤¶õʸ¤¬¸«¤Ä¤«¤ì¤Ð·Ù¹ð¤¹¤ë»ØÄꤵ¤ì¤¿½¤¾þ»Ò¤¬ÉÔÍפʤâ¤Î¤Ç¤¢¤ì¤Ð·Ù¹ð¤¹¤ëÆþ¤ì»Ò¤Ë¤Ê¤Ã¤¿¥³¥á¥ó¥È¤ò¸¡½Ð¤·¤¿¤È¤­¤Ë·Ù¹ð¤¹¤ëÀë¸À¤¬·¿¤ò»ØÄꤷ¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ë·Ù¹ð¤¹¤ë´Ø¿ô¤Î°ú¿ô¤¬¹½Â¤ÂΤÀ¤Ã¤¿¤é·Ù¹ð¤¹¤ë´Ø¿ô¤¬ extern Àë¸À¤µ¤ì¤¿¸å¡¢inline ¤È¤µ¤ì¤¿¾ì¹ç¤Ë·Ù¹ð¤¹¤ë´Ø¿ô¤¬»È¤ï¤ì¤Ê¤¤¤È¤­¤Ë·Ù¹ð¤¹¤ë´Ø¿ô¤Î²¾°ú¿ô¤¬»È¤ï¤ì¤Ê¤¤¤È¤­¤Ë·Ù¹ð¤¹¤ë¥é¥Ù¥ë¤¬»È¤ï¤ì¤Ê¤¤¤È¤­¤Ë·Ù¹ð¤¹¤ëÊÑ¿ô¤¬»È¤ï¤ì¤Ê¤¤¤È¤­¤Ë·Ù¹ð¤¹¤ë¼°¤ÎÃͤ¬»È¤ï¤ì¤Ê¤¤¤È¤­¤Ë·Ù¹ð¤¹¤ë¥¤¥ó¥é¥¤¥ó´Ø¿ô¤ò¥¤¥ó¥é¥¤¥ó²½¤Ç¤­¤Ê¤¤¾ì¹ç¤Ë·Ù¹ð¤¹¤ëºÇŬ²½²áÄø¤¬Ìµ¸ú²½¤µ¤ì¤¿¾ì¹ç¤Ë·Ù¹ð¤¹¤ë¤¢¤ë¥í¡¼¥«¥ëÊÑ¿ô¤¬Â¾¤Î¤â¤Î¤òʤ¤¤±£¤¹¤È¤­¤Ë·Ù¹ð¤¹¤ë¥ª¡¼¥Ð¡¼¥í¡¼¥É¤¬Éä¹ç̵¤·¤«¤éÉä¹çÉÕ¤­¤Ë³Ê¾å¤²¤È¤Ê¤ë¾ì¹ç¤Ë·Ù¹ð¤¹¤ë¹½Â¤ÂÎ¥á¥ó¥Ð¤Î¥¢¥é¥¤¥ó¤Ç¡¢¥Ñ¥Ç¥£¥ó¥°¤òÍפ¹¤ë¾ì¹ç¤Ë·Ù¹ð¤¹¤ë¥³¥ó¥Ñ¥¤¥é¤¬¥³¡¼¥É¤òʤÙÂØ¤¨¤ë¤È¤­¤Ë·Ù¹ð¤¹¤ëpacked °À­¤¬¹½Â¤ÂÎÇÛÃ֤˱ƶÁ¤·¤Ê¤¤¾ì¹ç¤Ë·Ù¹ð¤¹¤ë¥È¥é¥¤¥°¥é¥Õ¤òȯ¸«¤·¤¿¤È¤­¤Ë·Ù¹ð¤¹¤ë²Äǽ¤Ê¾ì¹ç¡¢¥¹¥¿¥Ã¥¯¥Õ¥ì¡¼¥à¤òÀ¸À®¤·¤Ê¤¤CSE ¤Çưºî¤¹¤ë¤È¤­¡¢¾ò·ï¥¸¥ã¥ó¥×¤ËÄɿ魯¤ëCSE ¤Çưºî¤¹¤ë¤È¤­¡¢¤½¤ì¤é¤Î¥¿¡¼¥²¥Ã¥È¤Ø¤Î¥¸¥ã¥ó¥×¤ËÄɿ魯¤ë½é´ü¤Î 4300 ¥Ï¡¼¥É¥¦¥§¥¢¥Ð¥°¤ÎÂнè¤ò¹Ô¤¦¥Ï¡¼¥É¥¦¥§¥¢¾è»»¥Ð¥°¤ËÂн褹¤ëstorem ¥Ï¡¼¥É¥¦¥§¥¢¥Ð¥°¤ÎÂнè¤ò¹Ô¤Ê¤¦[%s ¤òÎ¥¤ì¤Þ¤¹] + [%s ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó][super ...] ¤Ï¥á¥½¥Ã¥É¥³¥ó¥Æ¥­¥¹¥È¤Ë¸½¤ì¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó\x ¤Ë¡¢¤½¤ì¤Ë³¤¯¤Ï¤º¤Î 16 ¿Ê¿ô¤¬¤¢¤ê¤Þ¤»¤ó_Pramga ¤¬³ç¸Ì¤Ç°Ï¤Þ¤ì¤¿Ê¸»úÎó¥ê¥Æ¥é¥ë¤ò¼õ¤±¼è¤ê¤Þ¤·¤¿__VA_ARGS__ ¤Ï C99 ²ÄÊѰú¿ô¥Þ¥¯¥í³ÈÄ¥¤Ç¤Î¤ß½Ð¸½¤Ç¤­¤Þ¤¹__alignof__ ¤¬ÉÔ´°Á´¤Ê·¿¤ËŬÍѤµ¤ì¤Þ¤·¤¿__builtin_eh_return ¤Ï¤³¤Î¥¿¡¼¥²¥Ã¥È¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó__builtin_longjmp ÂèÆó°ú¿ô¤Ï 1 ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó__builtin_saveregs ¤Ï¤³¤Î¥¿¡¼¥²¥Ã¥È¤Ç¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó__builtin_trap ¤³¤Î¥¿¡¼¥²¥Ã¥È¤Ç¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó` ' ¥Õ¥é¥°`!' ¥Õ¥é¥°`#' ¥Õ¥é¥°`%%%c' ¤Ïǯ¤Î²¼Æó·å¤À¤±¤ò¤â¤¿¤é¤·¤Þ¤¹`%%%c' ¤Ï¥í¥±¡¼¥ë¤Ë¤è¤Ã¤Æ¤Ï¡¢Ç¯¤Î²¼Æó·å¤À¤±¤ò¤â¤¿¤é¤·¤Þ¤¹`%%' À©Ì󤬺Ǹå¤Î¥ª¥Ú¥é¥ó¥É¤È¤È¤â¤Ë»È¤ï¤ì¤Þ¤·¤¿`%d' ¥ª¥Ú¥é¥ó¥É¤¬¥ì¥¸¥¹¥¿¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó`%l' ±é»»¤Ï¥é¥Ù¥ë¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó`%s' °À­¤Ï´Ø¿ô¤ËÂФ·¤Æ¤Î¤ßŬÍѤµ¤ì¤Þ¤¹`%s' °À­¤Îµ¿»÷Ì¿Î᤬̵»ë¤µ¤ì¤Þ¤·¤¿`%s' °À­¤Ï·¿¤Ë¤ÏŬÍѤµ¤ì¤Þ¤»¤ó`%s' °À­¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿`%s' ¤òÀÅŪ¤Ë³ÎÊݤǤ­¤Þ¤»¤ó`%s' ¤¬ `static' ¤ÈÀë¸À¤µ¤ì¤Þ¤·¤¿¤¬Ì¤ÄêµÁ¤Ç¤¹`%s' ¤Ï´Ø¿ô¤òÊÖ¤¹´Ø¿ô¤È¤·¤ÆÀë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹`%s' ¤ÏÇÛÎó¤òÊÖ¤¹´Ø¿ô¤È¤·¤ÆÀë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹`%s' ¤Ï¸Æ¤Ó½Ð¤µ¤ì¤ë¤è¤ê¤â¸å¤í¤Ç inline Àë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹`%s' ¤Ï¤½¤ÎÄêµÁ¤è¤ê¤â¸å¤Ç inline Àë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹`%s' ¤¬Ä̾ï¤Î¤â¤Î¤È¥¨¥¤¥ê¥¢¥¹¤È¤ÎξÊý¤ÇÄêµÁ¤µ¤ì¤Þ¤·¤¿`%s' ¤¬ÄêµÁ¤µ¤ì¤Þ¤·¤¿¤¬»È¤ï¤ì¤Þ¤»¤ó¤Ç¤·¤¿`%s' ¤Ï `%s' ¤Ë±þÅú¤·¤Þ¤»¤ó`%s' ¤ò typedef ¤Þ¤¿¤ÏÁȤ߹þ¤ß·¿¤Ë¤Ç¤­¤Þ¤»¤ó`%s' ¤ÏÉÔ´°Á´·¿¤Ç¤¹`%s' ¤Ë `extern' ¤È½é´ü²½»Ò¤ÎξÊý¤¬¤¢¤ê¤Þ¤¹`%s' ¤Ï `-g%s' ¤È¶¥¹ç¤¹¤ë¤¿¤á̵»ë¤µ¤ì¤Þ¤·¤¿`%s' ¤¬½é´ü²½¤µ¤ì¤ë¤È¤³¤í¤Ç¡¢`extern' Àë¸À¤µ¤ì¤Þ¤·¤¿`%s' ¤Ïǧ¼±¤Ç¤­¤Ê¤¤¥Õ¥©¡¼¥Þ¥Ã¥È´Ø¿ô·¿¤Ç¤¹`%s' ¤Ï¤½¤Î·¿¤ÎÃͤè¤ê¤â¶¹¤¤¤Ç¤¹`%s' ¤Ï´Ø¿ô¤Ç¤â¥á¥ó¥Ð´Ø¿ô¤Ç¤â¤¢¤ê¤Þ¤»¤ó -- friend ¤È¤ÏÀë¸À¤Ç¤­¤Þ¤»¤ó`%s' ¤ÏÄ̾Èó static ¤Ê´Ø¿ô¤Ç¤¹`%s' ¤ÏÀë¸À¤Î»Ï¤Þ¤ê¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó`%s' ¤Ï `...' ¤Î½èÍý¤Î²áÄø¤Ç `%s' ¤Ë³Ê¾å¤²¤µ¤ì¤Þ¤·¤¿`%s' ¤ÏÄ̾ï¤Ï´Ø¿ô¤Ç¤¹`%s' ¤Ï¥í¡¼¥«¥ëŪ¤Ë¤Ï extern ¤Ç¤¹¤¬¡¢¥°¥í¡¼¥Ð¥ëŪ¤Ë static ¤Ç¤¹`%s' ¤Ï¤³¤Î´Ø¿ôÆâ¤Ç½é´ü²½¤µ¤ì¤º¤Ë»ÈÍѤµ¤ì¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹`%s' ¤Ï %s ¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó`%s' ¤¬Ê̤Υ·¥ó¥Ü¥ë¼ï¤È¤·¤ÆºÆÀë¸À¤µ¤ì¤Þ¤·¤¿`%s' ¤Ï 0 ¤« 2 ¸Ä¤Î°ú¿ô¤·¤«¤È¤ê¤Þ¤»¤ó`%s' ¤¬Àë¸À¤µ¤ì¤Æ¤¤¤Þ¤»¤ó (¤³¤Î´Ø¿ôÆâ¤ÇºÇ½é¤ËÍøÍÑ)`%s' ¤¬¤³¤³¤Ç¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó (´Ø¿ô¤ÎÃæ¤Ç¤Ï¤Ê¤¤)`%s' ¤¬»È¤ï¤ì¤Þ¤·¤¿¤¬Ì¤ÄêµÁ¤Ç¤¹`%s' ¤ÏÀë¸À¤è¤ê¤âÀè¤Ë»ÈÍѤµ¤ì¤Þ¤·¤¿`%s' ¤Ï `extern' ¤ÈÀë¸À¤µ¤ì¡¢¸å¤Ç `static' ¤ÈÀë¸À¤µ¤ì¤Þ¤·¤¿`%s' ¤Ï°ÅÌÛ¤Ë `extern' Àë¸À¤µ¤ì¡¢¸å¤Ë `static' Àë¸À¤µ¤ì¤Þ¤·¤¿`%s' ¤ÏÁ°Êý¤Ç°ÅÌÛŪ¤Ë `int' ¤òÊÖ¤¹¤ÈÀë¸À¤µ¤ì¤Þ¤·¤¿`%s' ¤Ï¤½¤ÎÄêµÁ¤ÎÁ°¤ÇÀë¸À¤Ê¤·¤Ç»ÈÍѤµ¤ì¤Þ¤·¤¿`%s' ¤Ï¤½¤ÎÄêµÁ¤ÎÁ°¤Ë¥×¥í¥È¥¿¥¤¥×¤Ê¤·¤Ç»È¤ï¤ì¤Þ¤·¤¿`%s': ÉÔÌÀ¤Þ¤¿¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Ê¤¤ -g ¥ª¥×¥·¥ç¥ó¤Ç¤¹`&' À©Ì󤬥쥸¥¹¥¿¥¯¥é¥¹Ìµ¤·¤Ç»È¤ï¤ì¤Þ¤·¤¿`'' ¥Õ¥é¥°`(' ¥Õ¥é¥°`+' ¥Õ¥é¥°`-' ¥Õ¥é¥°`-p' ¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó. `-pg' ¤È gprof(1) ¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¸Å¤¤¥¹¥¿¥¤¥ë¤Î¼±Ê̻ҥꥹ¥È¤Ç¤Î `...'`/*' ¤¬¥³¥á¥ó¥ÈÆâ¤Ë¤¢¤ê¤Þ¤¹`0' ¥Õ¥é¥°`>>' ¤Ï¥Æ¥ó¥×¥ì¡¼¥È¥¯¥é¥¹Ì¾¤Ï `> >' ¤È¤¹¤Ù¤­¤Ç¤¹`@end' ¤Ï¼ÂÁõ¥³¥ó¥Æ¥¯¥¹¥È¤Ë¸½¤ì¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó`E' ½¤¾þ»Ò`I' ¥Õ¥é¥°`O' ½¤¾þ»Ò`^' ¥Õ¥é¥°`_' ¥Õ¥é¥°¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤Ë `__alignof' ¤¬Å¬ÍѤµ¤ì¤Þ¤·¤¿`__builtin_next_arg' ¤¬°ú¿ô̵¤·¤Ç¤Ç¸Æ¤Ó½Ð¤µ¤ì¤Þ¤·¤¿`a' ¥Õ¥é¥°Áê¸ßÇÓ¾Ū¤ÊÃͤÎÅù²Á¤Î `and' ¥Æ¥¹¥È¤Ï¾ï¤Ë 0 ¤Ç¤¹`asm' ¥ª¥Ú¥é¥ó¥ÉÀ©Ì󤬥ª¥Ú¥é¥ó¥É¥µ¥¤¥º¤ÈÀ°¹ç¤·¤Þ¤»¤ó`asm' ¥ª¥Ú¥é¥ó¥É¤ÏºÆ¥í¡¼¥É¤Ç¤­¤Ê¤¤»ö¤¬Í׵ᤵ¤ì¤Þ¤¹`bool' ¤Ïº£¤ä¥­¡¼¥ï¡¼¥É¤Ç¤¹`default' ¥é¥Ù¥ë¤¬ switch ʸ¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤ó`defined' ¤Î¸å¤í¤Ë ident ¤ä (ident) ¤¬¤³¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¥¹¥³¡¼¥×¤¬½ª¤ï¤ë¤³¤ÎÉôʬ¤Ç `enum %s' ¤¬ÉÔ´°Á´¤Ç¤¹`for' ¥ë¡¼¥×¤Î½é´ü²½Àë¸À¤¬ C99 ¥â¡¼¥É°Ê³°¤Ç»È¤ï¤ì¤Þ¤·¤¿`long long long' ¤Ï GCC ¤Ë¤È¤Ã¤ÆÄ¹¤¹¤®¤Þ¤¹ISO C ¤Ç¤Ï `long' ¤Î switch ¼°¤Ï `int' ¤ËÊÑ´¹¤µ¤ì¤Þ¤»¤ó`main' ¤Ï `int' ¤òÊÖ¤µ¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó`noreturn' ´Ø¿ô¤¬ return ¤·¤Æ¤¤¤Þ¤¹`noreturn' ´Ø¿ô¤¬Èó void ÃͤòÊÖ¤·¤Æ¤¤¤Þ¤¹°ìÃפ·¤Ê¤¤ÃÍÆ±»Î¤Ç¤ÎÈóÅù²Á¤Î `or' ¥Æ¥¹¥È¤Ï¾ï¤Ë 1 ¤Ç¤¹Ìá¤ê·¿¤¬ void ¤Î´Ø¿ô¤Ç¡¢`return' ¤ËÃͤ¬¤¢¤ê¤Þ¤¹Ìá¤ê·¿¤¬´Ø¿ô¤Ç¡¢`return' ¤ËÃͤ¬¤¢¤ê¤Þ¤»¤óÈ󽸹çÂμ°¤ËÂФ·¤ÆÅ¬ÍѤµ¤ì¤¿ `sigof'È󽸹çÂη¿¤ËÂФ·¤ÆÅ¬ÍѤµ¤ì¤¿ `sigof'¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤ËŬÍѤµ¤ì¤¿ `sizeof'¥¹¥³¡¼¥×¤¬½ª¤ï¤ë¤³¤Î°ÌÃ֤ǡ¢`struct %s' ¤¬ÉÔ´°Á´¤Ç¤¹`this' ¤ÏÀÅŪ¥á¥ó¥Ð´Ø¿ô¤«¤é»ÈÍѤǤ­¤Þ¤»¤ó¥¹¥³¡¼¥×¤¬½ª¤ï¤ë¤³¤ÎÉôʬ¤Ç `union %s' ¤¬ÉÔ´°Á´¤Ç¤¹`va_start' ¤¬¸ÇÄê¸Ä°ú¿ô¤Î´Ø¿ôÆâ¤Ç»È¤ï¤ì¤Þ¤·¤¿²¾°ú¿ô¥ê¥¹¥ÈÃæ¤Î `void' ¤Ï¥ê¥¹¥ÈÁ´ÂΤòÀê¤á¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¥Ç¡¼¥¿Îΰè°À­¤ò¥í¡¼¥«¥ëÊÑ¿ô¤Ë¤Ï»ØÄê¤Ç¤­¤Þ¤»¤ó%s ¤ÇÃæÃÇ, °ÌÃÖ %s:%dÀäÂХѥ¹¥Õ¥¡¥¤¥ë̾¤¬ remap_filename ¤Ë¤¢¤ê¤Þ¤¹abstract ¥á¥½¥Ã¥É¤¬ÈóÃê¾Ý¥¯¥é¥¹¤Ë¤¢¤ê¤Þ¤¹Í׵ᤵ¤ì¤¿Âç°è¥ì¥¸¥¹¥¿ÊÑ¿ô `%s' ¤Î¥¢¥É¥ì¥¹register ÊÑ¿ô `%s' ¤Î¥¢¥É¥ì¥¹¤¬Í׵ᤵ¤ì¤Þ¤·¤¿¶¦ÊÑ(covariant)Ìá¤êÃͤؤΥݥ¤¥ó¥¿¤òÄ´À°¤·¤Þ¤¹½¸¹çÂΤ¬ÉôʬŪ¤Ë¥Ö¥é¥±¥Ã¥È¤Î½é´ü²½»Ò¤ò»ý¤Á¤Þ¤¹½¸¹çÂΤνé´ü²½»Ò¤¬Äê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó½¸¹çÂΤνé´ü²½»Ò¤ÇÊ£»¨¤Ê·×»»¤ò¹Ô¤Ã¤Æ¤¤¤Þ¤¹Ê£ÁÇ¿ô·¿¤¬¤¢¤ë¤Ù¤­²Õ½ê¤Ç¡¢½¸¹çÂΤÎÃͤ¬»È¤ï¤ì¤Þ¤·¤¿ÉâÆ°¾®¿ôÅÀ·¿¤¬¤¢¤ë¤Ù¤­²Õ½ê¤Ç¡¢½¸¹çÂΤÎÃͤ¬»È¤ï¤ì¤Þ¤·¤¿À°¿ô·¿¤¬¤¢¤ë¤Ù¤­²Õ½ê¤Ç¡¢½¸¹çÂΤÎÃͤ¬»È¤ï¤ì¤Þ¤·¤¿alias °ú¿ô¤¬Ê¸»úÎó¤Ç¤Ï¤Ê¤¤¸½ºß¤ÎÀßÄê¤Ç¤Ï alias ÄêµÁ¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó -- ̵»ë¤µ¤ì¤Þ¤·¤¿ÊÌ̾¤¬Ä¹¤¹¤®¤Þ¤¹ - ÊÌ̾¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿`%s' ¤ËÂФ·¤Æ¤Î¥¢¥é¥¤¥ó¥á¥ó¥È¤Ï»ØÄê¤Ç¤­¤Þ¤»¤óÇÛÎó¤Îź»ú¤ËÂФ¹¤ëÛ£Ëæ¤ÊÊÑ´¹¥á¥½¥Ã¥É¥Ý¥¤¥ó¥¿ `%s' ¤Ø¤ÎÍ×µá¤¬Û£Ëæ¤Ç¤¹Á°»þÂåŪ¤Ê¸Å¤¤¥¹¥¿¥¤¥ë¤Î´ðÄ쥯¥é¥¹½é´ü²½»Ò¤Ç¤¹¥Ù¥¯¥È¥ë¤Î delete ¤ÇÇÛÎó¥µ¥¤¥º¤ò»È¤¦¤Î¤ÏÁ°»þÂåŪ¤Ç¤¹¥Ý¥¤¥ó¥¿¤Ï %d ¥Ó¥Ã¥ÈÉý¤Ç¤¹¤¬¡¢¤½¤ì¤éÁ´¤Æ¤¬ 32 ¥Ó¥Ã¥ÈÉý̵̾¶¦ÍÑÂΤ˥á¥ó¥Ð¤¬¤¢¤ê¤Þ¤»¤ó̵̾Îóµó»Ò¤¬²¾°ú¿ô¥ê¥¹¥ÈÆâ¤ÇÀë¸À¤µ¤ì¤Þ¤·¤¿ÌµÌ¾¹½Â¤ÂΤ¬²¾°ú¿ô¥ê¥¹¥ÈÆâ¤ÇÀë¸À¤µ¤ì¤Þ¤·¤¿ÌµÌ¾¹½Â¤ÂΤ¬Ì¾Á°¤Ä¤­·¿¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤ó̵̾¶¦ÍÑÂΤ¬²¾°ú¿ô¥ê¥¹¥ÈÆâ¤ÇÀë¸À¤µ¤ì¤Þ¤·¤¿ÌµÌ¾²ÄÊѰú¿ô¥Þ¥¯¥í¤Ï C99 ¤ÇºÎ¤êÆþ¤ì¤é¤ì¤Þ¤·¤¿¥Õ¥©¡¼¥Þ¥Ã¥È¤µ¤ì¤ë°ú¿ô¤¬¡¢'...' ¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤»¤ó°ú¿ô #%d ¤Ï¹½Â¤ÂΤǤ¹²¾°ú¿ô `%s' ¤Ï¥×¥í¥È¥¿¥¤¥×¤Ë°ìÃפ·¤Þ¤»¤ó°ú¿ô `%s' ¤Ï `longjmp' ¤ä `vfork' ¤Ë¤è¤Ã¤Æ¹ó¤¤¤³¤È¤Ë¤Ê¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹°ú¿ô¤¬¹½Â¤ÂΤǤ¹`__builtin_args_info' ¤Î°ú¿ô¤ÏÄê¿ô¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó`__builtin_args_info' ¤Î°ú¿ô¤¬Èϰϳ°¤Ç¤¹`__builtin_eh_return_regno' ¤Î°ú¿ô¤ÏÄê¿ô¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó`asm' ¤Î°ú¿ô¤¬Äê¿ôʸ»úÎó¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó `%s' ¤Ø¤Î°ú¿ô¤ò·ç¤¤¤Æ¤¤¤Þ¤¹`%s' ¤Ø¤Î°ú¿ô¤ò·ç¤¤¤Æ¤¤¤Þ¤¹ + `-%s' ¤Î°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó`-B' ¤Î°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó`-V' ¤Î°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó`-Xlinker' ¤Î°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó`-b' ¤Î°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó`-specs' ¤Î°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó`-specs=' ¤Î°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó`-x' ¤Î°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó¥Þ¥¯¥í `%s' ¤Ë°ú¿ô¤¬Í¿¤¨¤é¤ì¤Þ¤·¤¿ÉÔ´°Á´·¿¤Ø¤Î¥Ý¥¤¥ó¥¿¤ËÂФ¹¤ë±é»»ÇÛÎó `%s' ¤Ï°ìÍ×ÁǤò»ý¤Ã¤Æ¤¤¤ë¤â¤Î¤È¸«¤Ê¤µ¤ì¤Þ¤¹½é´ü²½»ÒÆâ¤ÎÇÛÎ󥤥ó¥Ç¥Ã¥¯¥¹¤¬ÇÛÎó¤Î¶­³¦¤òͤ¨¤Þ¤·¤¿ÈóÇÛÎó¤Î½é´ü²½»Ò¤ËÇÛÎ󥤥ó¥Ç¥Ã¥¯¥¹¤¬»È¤ï¤ì¤Þ¤·¤¿½é´ü²½»Ò¤ÎÈϰϥ¤¥ó¥Ç¥Ã¥¯¥¹¤¬ÇÛÎó¤Î¶­³¦¤òͤ¨¤Þ¤·¤¿ÈóÄê¿ôÇÛÎó¼°¤«¤éÇÛÎ󤬽é´ü²½¤µ¤ì¤Þ¤·¤¿`%s' ¤Ç¤ÎÇÛÎó¥µ¥¤¥º¤ò·ç¤¤¤Æ¤¤¤Þ¤¹ÇÛÎó¤Îź»ú¤¬ `char' ·¿¤Ç¤¹ÇÛÎó¤Îź»ú¤¬À°¿ô·¿¤Ç¤Ï¤¢¤ê¤Þ¤»¤óÇÛÎó¤Î·¿¤¬ÉÔ´°Á´Í×ÁÇ·¿¤ò»ý¤Ã¤Æ¤¤¤Þ¤¹¥¹¥«¥é¡¼¤¬É¬Íפʾì½ê¤ËÇÛÎ󷿤ÎÃͤ¬»È¤ï¤ì¤Þ¤·¤¿´Ø¿ô¤ÎÇÛÎó¤Ï°ÕÌ£¤¬¤¢¤ê¤Þ¤»¤óasm ¥ª¥Ú¥é¥ó¥É %d ¤Ï¶²¤é¤¯À©Ìó¤ËŬ¹ç¤·¤Þ¤»¤óasm ¥Æ¥ó¥×¥ì¡¼¥È¤¬Ê¸»úÎóÄê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó½Ò¸ì¤Î¤Ê¤¤¥¢¥µ¡¼¥·¥ç¥ó¤Ç¤¹ÂåÆþÀë¸À¤ÎÃæ¤ËÂåÆþ(½é´ü²½¤Ç¤Ï¤Ê¤¯)¤¬¤¢¤ê¤Þ¤¹ÂåÆþ¤ÎÍÞÀ©final ¥Õ¥£¡¼¥ë¥É `%s' ¤Ø¤ÎÂåÆþ¤Ç¤¹¤¬¡¢¥³¥ó¥¹¥È¥é¥¯¥¿Æâ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ófinal ¥Õ¥£¡¼¥ë¥É `%s' ¤Ø¤ÎÂåÆþ¤Ç¤¹¤¬¡¢¤½¤Î¥Õ¥£¡¼¥ë¥É¤Î¥¯¥é¥¹Æâ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ófinal static ¥Õ¥£¡¼¥ë¥É `%s' ¤Ø¤ÎÂåÆþ¤Ç¤¹¤¬¡¢¤½¤Î¥Õ¥£¡¼¥ë¥É¤Î¥¯¥é¥¹Æâ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¥Õ¥¡¥¤¥ë¤Î¤³¤Î°ÌÃÖ¹½Â¤ÂÎ¥á¥ó¥Ð `%s' ¤Î¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤Î¥¢¥É¥ì¥¹¤ò¼èÆÀ¤·¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹±øÀ÷¤µ¤ì¤¿ '%s' »È¤ª¤¦¤È¤·¤Æ¤¤¤Þ¤¹¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥å¤È²þ¹Ô¤¬¶õÇò¤Çʬ³ä¤µ¤ì¤Þ¤·¤¿¥Õ¥¡¥¤¥ë¤Î½ª¤ê¤Ë¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥å-²þ¹Ô¤¬¤¢¤ê¤Þ¤¹¥í¡¼¥«¥ë¤Î `%s' ÍѥǥХå°¾ðÊó¤Î¤¿¤á¤Î PC ÈϰϤ¬ÉÔÀµ¤Ç¤¹ÇÛÎó¤ÎÉÔÀµ¤Ê½é´ü²½ÉÔÀµ¤Ê¥Ø¥Ã¥À¥Ð¡¼¥¸¥ç¥óÉÔÀµ¤Ê¥Þ¥¸¥Ã¥¯¥Ê¥ó¥Ð¥Õ¥¡¥¤¥ë '%s' ¤ËÉÔÀµ¤Ê¥Þ¥¸¥Ã¥¯¥Ê¥ó¥ÐÉÔÀµ¤Ê¥á¥½¥Ã¥É¥·¥°¥Í¥¤¥Á¥ã¤Ç¤¹exception_table ¤ËÉÔÀµ¤Ê pc ¤¬¤¢¤ê¤Þ¤¹ÉÔÀµ¤ÊÀ¸¤Î¥Ø¥Ã¥À¥Ð¡¼¥¸¥ç¥óÉÔÀµ¤Êʸ»úÎóÄê¿ô¤Ç¤¹²¾°ú¿ô¥Ç¥Ð¥Ã¥°¾ðÊó¤ËÉÔÀµ¤Ê·¿¤¬¤¢¤ê¤Þ¤¹ÃÍ (%s) ¤Ï %s switch ¤Ë¤È¤Ã¤ÆÀµ¤·¤¯¤¢¤ê¤Þ¤»¤ó-mabi= ¥¹¥¤¥Ã¥Á¤ËÂФ¹¤ëÉÔÀµ¤ÊÃÍ (%s)-march= ¥¹¥¤¥Ã¥Á¤ËÂФ¹¤ëÉÔÀµ¤ÊÃÍ (%s)-mcmodel= ¥¹¥¤¥Ã¥Á¤Ë¤È¤Ã¤ÆÉÔÀµ¤ÊÃÍ (%s)-mcpu ¥¹¥¤¥Ã¥Á¤ËÂФ¹¤ëÉÔÀµ¤ÊÃÍ (%s)-mcpu= ¥¹¥¤¥Ã¥Á¤ËÂФ¹¤ëÉÔÀµ¤ÊÃÍ (%s)-mips ¥¹¥¤¥Ã¥Á¤ËÂФ¹¤ëÉÔÀµ¤ÊÃÍ (%s)-mmodel ¥¹¥¤¥Ã¥Á¤ËÂФ¹¤ëÉÔÀµ¤ÊÃÍ (%s)-msdata ¥¹¥¤¥Ã¥Á¤ËÂФ¹¤ëÉÔÀµ¤ÊÃÍ (%s)-mcpu ¥¹¥¤¥Ã¥Á¤Ë¤È¤Ã¤Æ¤ÎÉÔÀµ¤ÊÃÍ `%s'-mfp-rounding-mode ¥¹¥¤¥Ã¥Á¤Ë¤È¤Ã¤Æ¤ÎÉÔÀµ¤ÊÃÍ `%s'-mfp-trap-mode ¥¹¥¤¥Ã¥Á¤Ë¤È¤Ã¤Æ¤ÎÉÔÀµ¤ÊÃÍ `%s'`%s' ¤Ï -mmemory-latency ¤Ë¤È¤Ã¤ÆÉÔÀµ¤ÊÃͤǤ¹-mtrap-precision ¥¹¥¤¥Ã¥Á¤Ë¤È¤Ã¤Æ¤ÎÉÔÀµ¤ÊÃÍ `%s'ÉÔÀµ¤ÊÄê¿ôÃÍ·¿ %d, ¥¤¥ó¥Ç¥Ã¥¯¥¹ %dzip/jar ¥Õ¥¡¥¤¥ë %s ¤ÏÉÔÀµ¤Ç¤¹¥×¥ê¥×¥í¥»¥Ã¥µ¤«¤é°Û¾ï¤Ë¥Í¥¹¥È¤µ¤ì¤¿ C ¥Ø¥Ã¥À¤Ç¤¹#define Ãæ¤Î²¾°ú¿ô¥ê¥¹¥È¤¬ÊѤ˶èÀÚ¤é¤ì¤Þ¤·¤¿`->' ¤Î¥Ù¡¼¥¹¥ª¥Ú¥é¥ó¥É¤¬¥Ý¥¤¥ó¥¿¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É `%s' ¤ÏÉÔŬÀڤʷ¿¤ò»ý¤Ã¤Æ¤¤¤Þ¤¹¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É `%s' ·¿¤Ï ISO C ¤Ç¤ÏÉÔŬÀڤǤ¹¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É `%s' ¤ÎÉý¤¬À°¿ôÄê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¥Ö¥í¥Ã¥¯¿ô = %ld¡¢ÈÖ¹æ¥Ö¥í¥Ã¥¯ = %d + ÉâÆ°¾®¿ôÄê¿ô¤Ë 'f' ¤È 'l' ÀÜÈø¼­¤ÎξÊý¤¬¤¢¤ê¤Þ¤¹`%s' ¤ËÂФ·¤Æ long ¤È short ¤ÎξÊý¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤¹`%s' ¤ËÂФ·¤ÆÉ乿¤¢¤ê¤ÈÉ乿¤Ê¤·¤ÎξÊý¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤¹¥Ö¥ì¡¼¥¹¤Ç¤Þ¤È¤á¤é¤ì¤¿¼°¤Ï´Ø¿ô¤ÎÆâ¦¤Ç¤Î¤ßµö¤µ¤ì¤Þ¤¹¥¹¥«¥é¡¼½é´ü²½»Ò¤¬¥Ö¥ì¡¼¥¹¤Ç°Ï¤Þ¤ì¤Æ¤¤¤Þ¤¹¥Ö¥é¥ó¥Á %d ¤Ï°ìÅÙ¤â¼Â¹Ô¤µ¤ì¤º + break ʸ¤¬ loop ¤Þ¤¿¤Ï switch ¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤óÁȤ߹þ¤ß´Ø¿ô `%s' ¤ÏÈó´Ø¿ô¤È¤·¤ÆÀë¸À¤µ¤ì¤Þ¤·¤¿ÁȤ߹þ¤ß´Ø¿ô `%s' ¤Ï¸½ºß¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¸Æ¤Ó½Ð¤· %d ¤Ï°ìÅÙ¤â¼Â¹Ô¤»¤º + Java `catch' ¤ä `throw' ¤¬¸Æ¤Ð¤ì¤Þ¤·¤¿¤¬¡¢`jthrowable' ¤Ï̤ÄêµÁ¤Ç¤¹Java ¥³¥ó¥¹¥È¥é¥¯¥¿¤¬¸Æ¤Ð¤ì¤Þ¤·¤¿¤¬¡¢`%s' ¤Ï̤ÄêµÁ¤Ç¤¹Java ¥³¥ó¥¹¥È¥é¥¯¥¿¤¬¸Æ¤Ð¤ì¤Þ¤·¤¿¤¬¡¢`jclass' ¤Ï̤ÄêµÁ¤Ç¤¹¸Æ¤Ó½Ð¤·¤ÇÇ˲õ¤µ¤ì¤ë¥ì¥¸¥¹¥¿¤¬¥°¥í¡¼¥Ð¥ë¥ì¥¸¥¹¥¿ÊÑ¿ô¤È¤·¤Æ»È¤ï¤ì¤Þ¤·¤¿¤³¤³¤«¤é¸Æ¤Ð¤ì¤Þ¤·¤¿¸Æ¤Ó½Ð¤µ¤ì¤¿¥ª¥Ö¥¸¥§¥¯¥È¤Ï´Ø¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó`%s' ¤Ø¤ÎÌ·½â¤·¤¿¸Æ¤Ó½Ð¤·¤òÊ᪤Ǥ­¤Þ¤»¤ó¥Ï¡¼¥É¥ì¥¸¥¹¥¿Æâ¤ÇÊ£ÁÇ¿ô¤Îµõ¿ôÉôʬ¤Ë¥¢¥¯¥»¥¹¤Ç¤­¤Þ¤»¤ó%s ¤ò close ¤Ç¤­¤Þ¤»¤óÆþÎÏ¥Õ¥¡¥¤¥ë %s ¤ò close ¤Ç¤­¤Þ¤»¤óÂ礭¤µ¤Î°Û¤Ê¤ë¥Ù¥¯¥È¥ëÃÍÆ±»Î¤ÎÊÑ´¹¤Ï¤Ç¤­¤Þ¤»¤óÃͤò¥Ù¥¯¥È¥ë¤Ë¤ÏÊÑ´¹¤Ç¤­¤Þ¤»¤ó¥Ç¥£¥ì¥¯¥È¥ê %s ¤òºîÀ®¤Ç¤­¤Þ¤»¤ó¥Õ¥¡¥¤¥ë `%s' ¤Ë¥ê¥Ý¥¸¥È¥ê¾ðÊó¤òºîÀ®¤Ç¤­¤Þ¤»¤óɸ½àÆþÎϤ«¤é¤ÎÆþÎϤǤϰ͸´Ø·¸¤ÎÄÉÀפ¬¤Ç¤­¤Þ¤»¤ó¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó-mfp-arg-in-fp-regs ¤ò»È¤¦¤È²ÄÊѸİú¿ô¤ò»ý¤Æ¤Þ¤»¤ófriend ´Ø¿ô `%s' ¤ò½é´ü²½¤Ç¤­¤Þ¤»¤ó`%s' ¤Ø¤Î¸Æ¤Ó½Ð¤·¤Ï¥¤¥ó¥é¥¤¥ó²½¤Ç¤­¤Þ¤»¤ó%s ¤ò³«¤±¤Þ¤»¤ó%s ¤ò½ñ¤­¹þ¤ßÍѤ˳«¤±¤Þ¤»¤ó¤Ç¤·¤¿¥³¥ó¥¹¥È¥é¥¯¥¿ÍѤΥǥե©¥ë¥ÈÌá¤êÃͤòºÆÄêµÁ¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó%s ¤òºÆ open ¤Ç¤­¤Þ¤»¤óÄêµÁ¤Î¸å¤Ç `%s' °À­¤ò¥»¥Ã¥È¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó`--main' ̵¤·¤Ç¤Ï `-D' ¤ò»ØÄê¤Ç¤­¤Þ¤»¤ó + %s ¤ò open ¤Ç¤­¤Þ¤»¤ó'%s' ¤ò %s ¤Î¥ì¥¸¥¹¥¿¤È¤·¤Æ»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó%s ¤Ø½ñ¤­¹þ¤á¤Þ¤»¤ó¥Ý¥¤¥ó¥¿·¿¤ËÊÑ´¹¤Ç¤­¤Þ¤»¤ó°ì»þ¥Õ¥¡¥¤¥ë¤òºîÀ®¤Ç¤­¤Þ¤»¤ó%s ¤ò»²¾È¤È¤·¤ÆÀë¸À¤Ç¤­¤Þ¤»¤ó`::main' ¤ò template ¤È¤·¤Æ¤ÏÀë¸À¤Ç¤­¤Þ¤»¤ó`::main' ¤ò inline ¤È¤·¤Æ¤ÏÀë¸À¤Ç¤­¤Þ¤»¤ó`::main' ¤ò static ¤È¤·¤Æ¤ÏÀë¸À¤Ç¤­¤Þ¤»¤ó¥Ý¥¤¥ó¥¿¤ò»²¾È¤È¤·¤ÆÀë¸À¤Ç¤­¤Þ¤»¤ó»²¾È¤ò»²¾È¤È¤·¤ÆÀë¸À¤Ç¤­¤Þ¤»¤ó¾¤Î´Ø¿ôÆâ¤Ç static ´Ø¿ô¤òÀë¸À¤Ç¤­¤Þ¤»¤ó´Ø¿ô¤Ï delete ¤Ç¤­¤Þ¤»¤ó¡£ ¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¤À¤±¤¬ `delete' °ú¿ô¤È¤·¤ÆÍ­¸ú¤Ç¤¹`%s' ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó`ldd' ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó`nm' ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¥½¡¼¥¹ %s ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¤³¤Îʸˡ¤ò»È¤Ã¤ÆÇÛÎó¤ò½é´ü²½¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¿¼¡¸µÇÛÎó¤Ï½é´ü²½»Ò¤Ç½é´ü²½¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó`main' ¤ò inline ´Ø¿ô¤Ë¤Ï¤Ç¤­¤Þ¤»¤ó¥ì¥¤¥Æ¥ó¥·¤È¥¹¥ë¡¼¥×¥Ã¥ÈξÊý¤Îʬ³äºÇŬ²½¤Ï¹Ô¤Ê¤¨¤Þ¤»¤óvolatile ¥Õ¥£¡¼¥ë¥É¤ò¥ì¥¸¥¹¥¿¤Ë»ý¤Ã¤Æ¤¤¤ë¤è¤¦¤Ê¥ª¥Ö¥¸¥§¥¯¥È¤òÃÖ¤±¤Þ¤»¤óÀ°¿ôÄê¿ô¥ª¥Ú¥é¥ó¥É¤ò `asm' Æâ¤ÇºÆ¥í¡¼¥É¤Ç¤­¤Þ¤»¤ó¥³¥ó¥¹¥È¥é¥¯¥¿¤Î´Ø¿ô try ¥Ö¥í¥Ã¥¯¤Î¥Ï¥ó¥É¥é¤«¤é¤Ï return ¤Ç¤­¤Þ¤»¤ó-c ¤ä -S ¤È°ì½ï¤Ë -o ¤ò»ØÄꤹ¤ë¤È¡¢Ê£¿ô¥³¥ó¥Ñ¥¤¥ë¤Ç¤­¤Þ¤»¤ó¥ê¥ó¥¯»þ°Ê³°¤Ë¤Ï `main' ¥¯¥é¥¹¤ò»ØÄê¤Ç¤­¤Þ¤»¤ó-C ¤È -o ¤ÏξÊý¤ò°ì½ï¤Ë»ØÄê¤Ç¤­¤Þ¤»¤ó`this' ¤Ï±¦ÊÕÃͼ°¤Ç¤¢¤ê¡¢¤½¤Î¥¢¥É¥ì¥¹¤ò¼è¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó²¾°ú¿ôÀë¸À¤ÎÃæ¤Ç `::' ¤ò»È¤¨¤Þ¤»¤ó-fno-rtti ¤¬»ØÄꤵ¤ì¤ë¤È typeid ¤ò»È¤¨¤Þ¤»¤ócase ¥é¥Ù¥ë¤òÀ°¿ôÄê¿ô¤Ë´Ô¸µ¤Ç¤­¤Þ¤»¤ócase ¥é¥Ù¥ë¤¬ switch ʸ¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤ócase ÃÍ `%ld' ¤ÏÎóµó·¿¤Ë¤Ï¤¢¤ê¤Þ¤»¤ócase ÃÍ `%ld' ¤ÏÎóµó·¿ `%s' ¤Ë¤Ï¤¢¤ê¤Þ¤»¤ó¥­¥ã¥¹¥È¤Ë¤è¤Ã¤Æ¥Ý¥¤¥ó¥¿¤¬¼¨¤¹·¿¤«¤é½¤¾þ»Ò¤¬ÀÚ¤ê¼Î¤Æ¤é¤ì¤Þ¤¹¥­¥ã¥¹¥È¤Ë¤è¤ë´Ø¿ô¤Î·¿¤¬Å¬¹ç¤·¤Þ¤»¤ó¥­¥ã¥¹¥È¤Ë¤è¤Ã¤Æ¥Ý¥¤¥ó¥¿¤«¤é°Û¤Ê¤ë¥µ¥¤¥º¤ÎÀ°¿ô¤È¤Ê¤ê¤Þ¤¹¥­¥ã¥¹¥È¤Ë¤è¤Ã¤Æ¥Ý¥¤¥ó¥¿¤¬¼¨¤¹·¿¤ÎÍ׵ᥢ¥é¥¤¥ó¥á¥ó¥È¤¬Áý²Ã¤·¤Þ¤¹¥­¥ã¥¹¥È¤¬ÇÛÎ󷿤ò»ØÄꤷ¤Æ¤¤¤Þ¤¹¥­¥ã¥¹¥È¤Ï´Ø¿ô·¿¤ò»ØÄꤷ¤Æ¤¤¤Þ¤¹º¸ÊÕÃͤȤ·¤Æ»È¤ï¤ì¤ëÈ󻲾ȷ¿¤Ø¤Î¥­¥ã¥¹¥È¤Ç¤¹°Û¤Ê¤ë¥µ¥¤¥º¤ÎÀ°¿ô¤«¤é¥Ý¥¤¥ó¥¿¤Ë¥­¥ã¥¹¥È¤µ¤ì¤Þ¤·¤¿¶¦ÍÑÂΤÎÃæ¤Ë¤Ê¤¤·¿¤«¤é¶¦ÍÑÂη¿¤Ø¥­¥ã¥¹¥È¤·¤Æ¤¤¤Þ¤¹cccp ¥¨¥é¡¼: ÆÃ¼ì¥Ï¥Ã¥·¥å·¿¤¬Ìµ¸ú¤Ç¤¹¥ï¥¤¥Éʸ»úÎ󤫤é char ¤ÎÇÛÎ󤬽é´ü²½¤µ¤ì¤Þ¤·¤¿Ê¸»úÄê¿ô¤¬Ä¹¤¹¤®¤Þ¤¹¥Ó¥Ã¥°¤Þ¤¿¤Ï¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥óξÊý¤Ç¤Ï¤Ê¤¯¡¢¤É¤Á¤é¤«¤òÁª¤ó¤Ç¤¯¤À¤µ¤¤m340 ¤Þ¤¿¤Ï m210 ¤ÎξÊý¤Ç¤Ï¤Ê¤¯¡¢¤É¤Á¤é¤«¤òÁª¤ó¤Ç¤¯¤À¤µ¤¤½Û´Ä¥Ý¥¤¥ó¥¿¤ÎÂåɽ¤ò¸¡½Ð¤·¤Þ¤·¤¿¥¯¥é¥¹ `%s' ¤Ï `%s' ¥×¥í¥È¥³¥ë¤ò¼ÂÁõ¤·¤Æ¤¤¤Þ¤»¤óclose %dclose %scollect2 version %scollect: %s ¤òÆÉ¤ß¹þ¤ß¤Þ¤¹ + collect: %s ¤òºÆ¥³¥ó¥Ñ¥¤¥ë¤·¤Þ¤¹ + collect: ºÆ¥ê¥ó¥¯¤·¤Þ¤¹ + collect: %s ¤ò°ú¤ÃÄ¥¤ê¤Þ¤¹(%s Æâ) + Îóµó»Ò¥ê¥¹¥È¤ÎºÇ¸å¤Ë¥«¥ó¥Þ¤¬¤¢¤ê¤Þ¤¹¥«¥ó¥Þ±é»»»Ò¤¬Ìá¤êÃͤò½é´ü²½¤¹¤ë¤¿¤á¤Ë»È¤ï¤ì¤Þ¤·¤¿¥«¥ó¥Þ±é»»»Ò¤¬ #if ±é»»»Ò¤ÎÃæ¤Ë¤¢¤ê¤Þ¤¹ÉâÆ°¾®¿ôÅÀ¤ÎÈæ³Ó¤Ç == ¤ä != ¤ò»È¤¦¤Î¤Ï°ÂÁ´¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¥Ý¥¤¥ó¥¿¤ÈÀ°¿ô¤È¤ÎÈæ³Ó¤ò¹Ô¤Ê¤Ã¤Æ¤¤¤Þ¤¹Éä¹çÉÕ¤­¤ÈÉä¹ç̵¤·¤È¤ÎÈæ³Ó¤Ç¤¹Éä¹çÉÕ¤­¤ÈÉä¹ç̵¤·¤ÎÀ°¿ô¼°Æ±»Î¤ÎÈæ³Ó¤Ç¤¹Èæ³Ó¤¬¾ï¤Ë %d ¤È¤Ê¤ê¤Þ¤¹¥Ç¡¼¥¿·¿¤ÎÈϰÏÀ©¸Â¤Ë¤è¤Ã¤Æ¡¢Èæ³Ó¤¬¾ï¤Ë false ¤È¤Ê¤ê¤Þ¤¹¥Ç¡¼¥¿·¿¤ÎÈϰÏÀ©¸Â¤Ë¤è¤Ã¤Æ¡¢Èæ³Ó¤¬¾ï¤Ë true ¤È¤Ê¤ê¤Þ¤¹´°Á´¤Ê¥Ý¥¤¥ó¥¿¤ÈÉÔ´°Á´¤Ê¥Ý¥¤¥ó¥¿¤È¤ÎÈæ³Ó¤Ç¤¹·¿¤¬Á´¤¯°Û¤Ê¤ë¥Ý¥¤¥ó¥¿¤ÎÈæ³Ó¤Ç¥­¥ã¥¹¥È¤ò·ç¤¤¤Æ¤¤¤Þ¤¹~¤Çȿž¤µ¤ì¤¿³Ê¾å¤²Éä¹ç̵¤··¿¤ÈÄê¿ô¤È¤ÎÈæ³Ó¤Ç¤¹~¤Çȿž¤µ¤ì¤¿Éä¹ç̵¤··¿¤ÈÉä¹ç̵¤··¿¤È¤ÎÈæ³Ó¤Ç¤¹Éä¹ç̵¤·¤Î¼° < 0 ¤È¤¤¤¦Èæ³Ó¤Ï¾ï¤Ë false ¤Ç¤¹Éä¹ç̵¤·¤Î¼° >= 0 ¤È¤¤¤¦Èæ³Ó¤Ï¾ï¤Ë true ¤Ç¤¹X<=Y<=Z ¤ÎÍͤÊÈæ³Ó¤Ï¿ô³ØÅª¤Ê°ÕÌ£¤Ç¤Î·ë²Ì¤ò¤â¤¿¤é¤·¤Þ¤»¤ó¥³¥ó¥Ñ¥¤¥ë¤¬ÃæÃǤµ¤ì¤Þ¤·¤¿¡£ + `%s' ¤ËÂФ·¤Æ complex ¤ÏÉÔŬÀڤǤ¹ÀßÄê: REAL, INTEGER µÚ¤Ó LOGICAL ¤Ï %d ¥Ó¥Ã¥ÈÉý¤Ç¡¢ÀßÄê: char * ¤Ï %d ¥Ó¥Ã¥È³ÎÊݤ·¤Þ¤¹¤¬¡¢INTEGER ¤¬¤¿¤Ã¤¿ %d ¥Ó¥Ã¥È¤Ç¤¹ -- + ¶²¤é¤¯ ASSIGN ʸ¤¬¼ºÇÔ¤·¤Þ¤¹ÀßÄê: char * ¤Ï %d ¥Ó¥Ã¥È³ÎÊݤ·¤Þ¤¹¤¬¡¢ftnlen ¤¬¤¿¤Ã¤¿ %d ¥Ó¥Ã¥È¤Ç¤¹¥Õ¥£¡¼¥ë¥É `%s' ¤ËÂФ¹¤ë¥¢¥¯¥»¥¹»ØÄê»Ò¤¬¶¥¹ç¤·¤¿¤¿¤á¡¢Ìµ»ë¤µ¤ì¤Þ¤·¤¿¶¥¹ç¤¹¤ë architecture ¤¬ÄêµÁ¤µ¤ì¤Þ¤·¤¿ - C ¥·¥ê¡¼¥º»ÈÍѶ¥¹ç¤¹¤ë architecture ¤¬ÄêµÁ¤µ¤ì¤Þ¤·¤¿ - K ¥·¥ê¡¼¥º»ÈÍÑ<`%s' ¤ÎÀë¸À¤¬Ì·½â¤·¤Æ¤¤¤Þ¤¹´ðÄ쥯¥é¥¹Ì¾ `%s' ¤¬¾×ÆÍ¤·¤Æ¤¤¤Þ¤¹`%s' ¤È·¿¤¬Ì·½â¤·¤Þ¤¹ÁȤ߹þ¤ß´Ø¿ô `%s' ¤È·¿¤¬Ì·½â¤·¤Þ¤¹const `%s' ¤ò `mutable' ¤È¤·¤ÆÀë¸À¤Ç¤­¤Þ¤»¤ó`%s' ¤ÏÈó const ¤Î¸å¤Ç const Àë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹const ¥ª¥Ö¥¸¥§¥¯¥È¤Ï .sdata/.sbss ¤ËÃÖ¤±¤Þ¤»¤ó¥³¥ó¥¹¥È¥é¥¯¥¿¤òÀÅŪ¥á¥ó¥Ð´Ø¿ô¤È¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¥³¥ó¥¹¥È¥é¥¯¥¿¤Ï virtual Àë¸À¤Ç¤­¤Þ¤»¤ócontinue ʸ¤¬ loop ¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤óÀ©¸æ¤¬Èó void ´Ø¿ô¤Î½ª¤ê¤ËÅþ㤷¤Þ¤·¤¿NaN ¤«¤éÀ°¿ô¤Ø¤ÎÊÑ´¹¤Ç¤¹NaN ¤«¤éÉä¹ç̵¤·À°¿ô¤Ø¤ÎÊÑ´¹¤Ç¤¹¥Õ¥©¡¼¥Þ¥Ã¥È¤Î½ª¤ê¤Ç·¿ÊÑ´¹Ê¸»ú¤¬·ç¤±¤Æ¤¤¤Þ¤¹%s%s ¤Ø¤ÎÊÑ´¹¤Ç·¿ÊÑ´¹±é»»»Ò¤¬ÍøÍѤµ¤ì¤ë¤³¤È¤Ï·è¤·¤Æ¤¢¤ê¤Þ¤»¤óÉÔ´°Á´·¿¤Ø¤ÎÊÑ´¹¤Ç¤¹Èó¥¹¥«¥é¡¼·¿¤Ø¤ÎÊÑ´¹¤¬Í׵ᤵ¤ì¤Þ¤¹0x%l.8x ¤òÎΰè¤ËÊÑ´¹¤Ç¤­¤Þ¤»¤ó¥À¥ó¥×¥Õ¥¡¥¤¥ë %s ¤ò³«¤±¤Þ¤»¤ó¤Ç¤·¤¿°Í¸´Ø·¸¤ÎÄÉÀפΤ¿¤á¤Î¥¿¡¼¥²¥Ã¥È̾¤¬ÆÃÄê¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿Â礭¤µ¥¼¥í¤ÎÇÛÎó¤òºî¤í¤¦¤È¤·¤Æ¤¤¤Þ¤¹¸½ºß¤Î¥Õ¥¡¥¤¥ë¤Ï %s ¤è¤ê¸Å¤¤¤Ç¤¹¥Ç¡¼¥¿Îΰè '%s' ¤ÏÁ°¤ÎÀë¸À¤ÈÌ·½â¤·¤Þ¤¹¥Ç¡¼¥¿ÄêµÁ¤¬·¿¤äµ­²±¥¯¥é¥¹¤ò»ý¤Ã¤Æ¤¤¤Þ¤»¤ó`%s' ¤Î¥Ç¡¼¥¿·¿¤Ï register ¤Ë¤Ï¤Õ¤µ¤ï¤·¤¯¤¢¤ê¤Þ¤»¤ó½½¿ÊÄê¿ô¤¬¤È¤Æ¤âÂ礭¤¤¤Î¤ÇÉä¹ç̵¤·¤È¤·¤Þ¤·¤¿Àë¸À¤¬²¿¤âÀë¸À¤·¤Æ¤¤¤Þ¤»¤ó²¾°ú¿ô `%s' ¤ÎÀë¸À¤¬¤¢¤ê¤Þ¤¹¤¬¡¢¤½¤ó¤Ê²¾°ú¿ô¤Ï¤¢¤ê¤Þ¤»¤ó`%s' ¤ÎÀë¸À¤Ï´Ø¿ô¤ÎÇÛÎó`%s' ¤ÎÀë¸À¤Ï void ¤ÎÇÛÎó`%s' ¤ÎÀë¸À¤Ë `extern' ¤¬¤Ä¤¤¤Æ¤ª¤ê¡¢½é´ü²½¤â¤µ¤ì¤Æ¤¤¤Þ¤¹`%s' ¤ÎÀë¸À¤Ë¤è¤ê `this' ¤Î¥á¥ó¥Ð¤¬Ê¤¤¤±£¤µ¤ì¤Þ¤¹`%s' ¤ÎÀë¸À¤Ï²¾°ú¿ô¤òʤ¤¤±£¤·¤Þ¤¹`%s' ¤ÎÀë¸À¤Ï²¾°ú¿ô¥ê¥¹¥È¤Î¥·¥ó¥Ü¥ë¤òʤ¤¤±£¤·¤Þ¤¹`extern' ÊÑ¿ô `%s' ¤ÎÀë¸À¤¬ `for' ¥ë¡¼¥×½é´ü²½Àë¸ÀÆâ¤Ë¤¢¤ê¤Þ¤¹ÈóÊÑ¿ô `%s' ¤ÎÀë¸À¤¬ `for' ¥ë¡¼¥×½é´ü²½Àë¸À¤ÎÃæ¤Ë¤¢¤ê¤Þ¤¹¥¹¥¿¥Æ¥£¥Ã¥¯ÊÑ¿ô `%s' ¤ÎÀë¸À¤¬ `for' ¥ë¡¼¥×½é´ü²½Àë¸ÀÆâ¤Ë¤¢¤ê¤Þ¤¹¥Ç¥¯¥ê¥á¥ó¥ÈÊ£¹çʸ¤Î½ª¤ê¤Ç¥é¥Ù¥ë¤ò»È¤¦¤³¤È¤Ï¿ä¾©¤µ¤ì¤Þ¤»¤ó`void *' ¥Ý¥¤¥ó¥¿¤Ø¤Î´ÖÀÜ»²¾È¤Ç¤¹ÉÔ´°Á´·¿¤Î¥Ý¥¤¥ó¥¿¤Ø¤Î´ÖÀÜ»²¾È¥Ç¥¹¥È¥é¥¯¥¿¤òÀÅŪ¥á¥ó¥Ð´Ø¿ô¤È¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó`%#D' ¤Î¤¿¤á¤Î¥Ç¥¹¥È¥é¥¯¥¿¤¬É¬ÍפǤ¹¥Ç¥¹¥È¥é¥¯¥¿¤Ï¥á¥ó¥Ð´Ø¿ô¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¥Ç¥¹¥È¥é¥¯¥¿¤Ï²¾°ú¿ô¤ò¼è¤ê¤Þ¤»¤ó¥°¥é¥Õ¤Î bb ¥¨¥ó¥È¥ê¤Î°ìÉô¤·¤«»È¤¤¤Þ¤»¤ó¤Ç¤·¤¿¡¢´Ø¿ô %s + ¥Þ¥¯¥í°ú¿ôÆâ¤Ç¥Ç¥£¥ì¥¯¥È¥ê¤ò»È¤¦¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó»²¾È¤ËÍѤ¤¤é¤ì¤¿ `const' ¤Ï¼Î¤Æ¤é¤ì¤Þ¤¹»²¾È¤ËÍѤ¤¤é¤ì¤¿ `volatile' ¤Ï¼Î¤Æ¤é¤ì¤Þ¤¹#if ¤Ç¥¼¥í½ü»»¤¬È¯À¸¤·¤Þ¤·¤¿Æó½Å¤Ë¥¯¥©¡¼¥È¤µ¤ì¤¿Ê¸»úÎó¤Ï #if ¼°Æâ¤Ç¤Ï»È¤¨¤Þ¤»¤ó¥³¥ó¥¹¥È¥é¥¯¥¿¤¬¤¢¤ë¤³¤È¤Ë¤è¤ëdup2 %d 1Æó½Å¤Î(¤¢¤ë¤¤¤Ï½ÅÊ£¤·¤Æ¤¤¤ë) case ¤ÎÃÍ`%s' ¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹½ÅÊ£¤·¤¿ `const'½ÅÊ£¤·¤¿¥é¥Ù¥ë `restrict'½ÅÊ£¤·¤¿ `volatile'½ÅÊ£¤·¤¿ case ¤ÎÃÍ¥×¥í¥È¥³¥ë '%s' ¤ÎÀë¸À¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹¥«¥Æ¥´¥ê `%s(%s)' ¤Ø¤Î¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹Àë¸À¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹¥¯¥é¥¹ `%s' ¤Î¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹Àë¸À¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹¥é¥Ù¥ë¤ÎÀë¸À `%s' ¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹¥Þ¥¯¥í²¾°ú¿ô "%s" ¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹½ÅÊ£¤·¤¿¥á¥ó¥Ð `%s'ưŪ°Í¸´Ø·¸¡£ + ưŪ°Í¸´Ø·¸ %s ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤óÇÛÎó `%s' ¤ÎÍ×ÁǤËÉÔ´°Á´·¿¤¬¤¢¤ê¤Þ¤¹¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë `\0' ¤¬Ëä¤á¹þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¶õ¤Î #if ¼°¤Ç¤¹else ʸ¤ÎÃæ¿È¤¬¶õ¤Ç¤¹¶õ¤Îʸ»úÄê¿ô¶õ¤ÎÀë¸À¤Ç¤¹#%s ¤Ç¤Î¥Õ¥¡¥¤¥ë̾¤¬¶õ¤Ç¤¹½é´ü²½»ÒÆâ¤Ë¶õ¤ÎÈϰϥ¤¥ó¥Ç¥Ã¥¯¥¹¤¬¤¢¤ê¤Þ¤¹%s ¤Ç¶õ¤Îº¸ÀºÅÙ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç¤¹%s ¤Ç¶õ¤ÎÀºÅÙ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç¤¹¶õ¤ÎÈϰϤ¬»ØÄꤵ¤ì¤Þ¤·¤¿¶õ¤Î¥¹¥«¥é¡¼½é´ü²½»Ò²¾°ú¿ôÆâ¤Ç enum ¤¬ÄêµÁ¤µ¤ì¤Þ¤·¤¿ÎóµóÃÍ `%s' ¤Ï switch Æâ¤Ç°·¤ï¤ì¤Æ¤¤¤Þ¤»¤óÎóµó»Ò¤ÎÃͤ¬À°¿ô¤ÎÈϰϤκÇÂçÃͤòͤ¨¤Þ¤·¤¿`%s' ¤ÎÎóµóÃͤ¬À°¿ôÄê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¥¨¥é¡¼¤Ë¤è¤ê %s ¤òÊĤ¸¤Þ¤¹constant ¥×¡¼¥ë¹àÌÜ #%d Æâ¤Ç¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿ + constant ¥×¡¼¥ë¤Î¹½Ê¸²òÀÏÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿¥Õ¥£¡¼¥ë¥É¤Î¹½Ê¸²òÀÏÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿final °À­¤Î¹½Ê¸²òÀÏÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿¥á¥½¥Ã¥É¤Î¹½Ê¸²òÀÏÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿%s ¤Ø¤Î½ñ¤­¹þ¤ß¥¨¥é¡¼¤Ç¤¹Ê¸»ú¤ËÂФ¹¤ë¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹¤¬ÈϰϤò³°¤ì¤Æ¤¤¤Þ¤¹Îã³°½èÍý¤ò̵¸ú¤Ë¤·¤Þ¤·¤¿. Í­¸ú¤Ë¤¹¤ë¤Ë¤Ï -fexceptions ¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤½¸¹çÂνé´ü²½»ÒÆâ¤Ç¤½¤ÎÍ×ÁǤ¬°î¤ì¤Þ¤·¤¿ÇÛÎó½é´ü²½»ÒÆâ¤ÎÍ×ÁǤ¬Â¿¤¹¤®¤Þ¤¹char ÇÛÎó½é´ü²½»ÒÆâ¤ÎÍ×ÁǤ¬Â¿¤¹¤®¤Þ¤¹¥¹¥«¥é¡¼½é´ü²½»ÒÆâ¤ÎÍ×ÁǤ¬Â¿¤¹¤®¤Þ¤¹¹½Â¤Âνé´ü²½»ÒÆâ¤ÎÍ×ÁǤ¬Â¿¤¹¤®¤Þ¤¹¶¦ÍÑÂνé´ü²½»ÒÆâ¤ÎÍ×ÁǤ¬Â¿¤¹¤®¤Þ¤¹execv %sexecvp %s¼°¤ÎÃæ¤Îʸ¤ËÉÔ´°Á´·¿¤¬¤¢¤ê¤Þ¤¹`%s' ¤Îextern Àë¸À¤Ï¥°¥í¡¼¥Ð¥ë¤Î¤½¤ì¤È°ìÃפ·¤Þ¤»¤ó½é´ü²½»Ò¤Î½ª¤ï¤ê¤Ë;ʬ¤Ê¥Ö¥ì¡¼¥¹¤Î¥°¥ë¡¼¥×¥¹¥«¥é¡¼½é´ü²½»Ò¤Ë;ʬ¤ÊÍ×ÁÇstruct ¤ä union ¤ÎÃæ¤Ç;ʬ¤Ê¥»¥ß¥³¥í¥ó¤¬»ØÄꤵ¤ì¤Þ¤·¤¿¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î½ª¤ê¤Ë;ʬ¤Ê¥Æ¥¯¥¹¥È¤¬¤¢¤ê¤Þ¤¹Í¾Ê¬¤Ê¥È¡¼¥¯¥ó¤¬ #%s ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î½ª¤ê¤Ë¤¢¤ê¤Þ¤¹¥Õ¥©¡¼¥Þ¥Ã¥È°ú¿ô¤Ë;ʬ¤Ê·¿½¤¾þ»Ò¤¬¤¢¤ê¤Þ¤¹ (°ú¿ô %d)f2c ¸ß´¹¥³¡¼¥É¤òÀ¸À®¤¹¤ëɬÍפ¬¤Ê¤¤'%s' ¥¯¥é¥¹¤ò¸«¤Ä¤±¤ë¤Î¤Ë¼ºÇÔ¤·¤Þ¤·¤¿fclosefclose %sfdopen¥Õ¥£¡¼¥ë¥É '%s' ¤¬¥¯¥é¥¹Æâ¤Ë¸«¤Ä¤«¤ê¤Þ¤»¤óÎΰè `%s' ¤Ï´Ø¿ô¤È¤·¤ÆÀë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹Îΰè `%s' ¤ÏÉÔ´°Á´¤Ê·¿¤Ç¤¹¥Õ¥£¡¼¥ë¥É `%s' ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¥Õ¥£¡¼¥ë¥É½é´üÀßÄê»Ò¤¬Äê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¥ì¥³¡¼¥É¤ä¶¦ÍÑÂΤ˥ե£¡¼¥ë¥É̾¤¬¤Ê¤¤½é´ü²½»Ò¤Ç¤¹¥Õ¥£¡¼¥ë¥ÉÀºÅÙ¥Õ¥£¡¼¥ë¥ÉÉýprintf ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç¤Î¥Õ¥£¡¼¥ë¥ÉÉýscanf ¥Õ¥©¡¼¥Þ¥Ã¥È¤Î¥Õ¥£¡¼¥ë¥ÉÉýstrfmon ¥Õ¥©¡¼¥Þ¥Ã¥È¤Î¥Õ¥£¡¼¥ë¥ÉÉýstrftime ¥Õ¥©¡¼¥Þ¥Ã¥È¤Î¥Õ¥£¡¼¥ë¥ÉÉýµÍ¤áʸ»ústrfmon ¥Õ¥©¡¼¥Þ¥Ã¥È¤ÎµÍ¤áʸ»úfini ´Ø¿ô¤ò¥ª¥Ö¥¸¥§¥¯¥È %s ¤Ç¸«¤Ä¤±¤Þ¤·¤¿`%s' ¤ÎÂè°ì°ú¿ô¤Ï `int' ¤È¤¹¤Ù¤­¤Ç¤¹`va_arg' ¤ËÂФ¹¤ëÂè°ì°ú¿ô¤¬ `va_list' ·¿¤Ç¤Ï¤¢¤ê¤Þ¤»¤ófix_sched_param: ÉÔÌÀ¤Ê¥Ñ¥é¥á¥¿: %s¹½Â¤ÂΤ˲ÄÊÑÇÛÎó¥á¥ó¥Ð°Ê³°¤Î¥á¥ó¥Ð¤¬¤¢¤ê¤Þ¤»¤ó¶¦ÍÑÂΤ˲ÄÊÑÇÛÎó¥á¥ó¥Ð¤¬¤¢¤ê¤Þ¤¹¹½Â¤ÂΤκǸå¤Ç¤Ï¤Ê¤¤½ê¤Ë²ÄÊÑÇÛÎó¥á¥ó¥Ð¤¬¤¢¤ê¤Þ¤¹ÉâÆ°¾®¿ôÄê¿ô¤Î¤Ù¤­¿ô¤¬¡¢¥¢¥é¥Ó¥¢¿ô»ú¤ò»ý¤Ã¤Æ¤¤¤Þ¤»¤ó´ð¿ô 16 ¤ÎÉâÆ°¾¯¿ôÄê¿ô¤Ïµö¤µ¤ì¤Þ¤»¤óÉâÆ°¾®¿ôÄê¿ô¤ò»È¤¤Â»¤Í¤Þ¤·¤¿ÉâÆ°¾®¿ôÄê¿ô¤ÏÀµ¾ï¤Ê¨ÃÍ¥ª¥Ú¥é¥ó¥É¤Ç¤Ï¤¢¤ê¤Þ¤»¤óÉâÆ°¾®¿ôÅÀ¿ô¤¬ '%s' ¤ÎÈϰϤòͤ¨¤Þ¤·¤¿ÉâÆ°¾®¿ôÅÀ¿ô¤¬ 'double' ¤ÎÈϰϤòͤ¨¤Æ¤¤¤Þ¤¹#if ¼°¤ÎÃæ¤Ç¤ÎÉâÆ°¾®¿ôÅÀ¿ô¤Ïµö²Ä¤µ¤ì¤Þ¤»¤óÉâÆ°¾®¿ôÅÀ¤¬¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤Þ¤·¤¿¼°¤ÎÉâÆ°¾®¿ôÅÀ¿ô¤¬¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤Þ¤·¤¿ÉâÆ°¾®¿ôÅÀ¤Î¨Ãͤò½ÐÎϤ¹¤ëºÝ¤Ë¥È¥é¥Ã¥×¤¬¤«¤«¤ê¤Þ¤·¤¿fopen %s ¤ËÂФ·¤Æ°ìÅÙ¤À¤±Êó¹ð¤µ¤ì¤Þ¤¹¡£)$-¼°¥Õ¥©¡¼¥Þ¥Ã¥ÈÆâ¤Î¥Õ¥©¡¼¥Þ¥Ã¥È°ú¿ô %d ¤¬°ú¿ô %d ¤¬»È¤ï¤ì¤ëÁ°¤Ç̤»ÈÍѤǤ¹¥Õ¥©¡¼¥Þ¥Ã¥È°ú¿ô %d ¤¬ %s ¥Õ¥©¡¼¥Þ¥Ã¥ÈÃæ¤ÇÆó²ó°Ê¾å»È¤ï¤ì¤Þ¤·¤¿¥Õ¥©¡¼¥Þ¥Ã¥È°ú¿ô¤¬¥Ý¥¤¥ó¥¿¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó (°ú¿ô %d)¥Õ¥©¡¼¥Þ¥Ã¥È°ú¿ô¤¬¥Ý¥¤¥ó¥¿¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó (°ú¿ô %d)¥Õ¥©¡¼¥Þ¥Ã¥È¤¬¥ï¥¤¥Éʸ»úÎó¤Ç¤¹¥Õ¥©¡¼¥Þ¥Ã¥È¤ÏÈóʸ»úÎó¥ê¥Æ¥é¥ë¤Ç¡¢³î¤Ä¥Õ¥©¡¼¥Þ¥Ã¥È°ú¿ô¤ò»ý¤Á¤Þ¤»¤ó¥Õ¥©¡¼¥Þ¥Ã¥È¤Ïʸ»úÎó¥ê¥Æ¥é¥ë¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¤Î¤Ç¡¢°ú¿ô¤Î·¿¤Ï¸¡ºº¤µ¤ì¤Þ¤»¤ó¥Õ¥©¡¼¥Þ¥Ã¥È¤¬Ê¸»úÎó¥ê¥Æ¥é¥ë¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¤Î¤Ç¡¢¥Õ¥©¡¼¥Þ¥Ã¥È¤Ï¸¡ºº¤µ¤ì¤Þ¤»¤ó¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó°ú¿ô¤¬¥Õ¥©¡¼¥Þ¥Ã¥È¤µ¤ì¤ë°ú¿ô¤Î¸å¤Ë³¤¤¤Æ¤¤¤Þ¤¹¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó°ú¿ô¤¬Ê¸»úÎ󷿤ǤϤ¢¤ê¤Þ¤»¤ó¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó¤ËÉÔŬÀڤʥª¥Ú¥é¥ó¥É¿ô¤¬¤¢¤ê¤Þ¤¹ÉâÆ°¾®¿ôÅÀÊä´°¤Ï -mtrap-precision=i ¤òɬÍפȤ·¤Þ¤¹fr30_print_operand: ̵¸ú¤Ê %F ¥³¡¼¥É¤Ç¤¹fr30_print_operand: ̵¸ú¤Ê %x ¥³¡¼¥É¤Ç¤¹fr30_print_operand: %A ¥³¡¼¥É¤ËÂФ¹¤ë̵¸ú¤Ê±é»»»Ò¤Ç¤¹fr30_print_operand: ½èÍý¤µ¤ì¤Ê¤¤ MEM ¤Ç¤¹fr30_print_operand: ÉÔÌÀ¤Ê¥³¡¼¥É¤Ç¤¹fr30_print_operand_address: ½èÍý¤µ¤ì¤Ê¤¤¥¢¥É¥ì¥¹¤Ç¤¹¥Õ¥ì¡¼¥à¥µ¥¤¥º¤¬Â礭¤¹¤®¤Æ¡¢¥¹¥¿¥Ã¥¯¸¡ºº¤¬¿®Íê¤Ç¤­¤Ê¤¯¤Ê¤ê¤Þ¤¹friend Àë¸À¤¬¥¯¥é¥¹ÄêµÁ¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤ófstat %s´Ø¿ô `%s' ¤ò `mutable' ¤È¤·¤Æ¤ÏÀë¸À¤Ç¤­¤Þ¤»¤ó´Ø¿ô `%s' ¤¬ÊÑ¿ô¤Ç¤¢¤ë¤«¤Î¤è¤¦¤Ë½é´ü²½¤µ¤ì¤Þ¤·¤¿´Ø¿ô `%s' ¤Ï¥Ö¥í¥Ã¥¯Æâ¤ÎÁ°Êý¤ÇÀë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹¥³¥ó¥¹¥È¥é¥¯¥¿¤Î´Ø¿ôËÜÂΤò·ç¤¤¤Æ¤¤¤Þ¤¹´Ø¿ô¸Æ¤Ó½Ð¤·¤¬½¸¹çÂΤÎÃͤò»ý¤Ã¤Æ¤¤¤Þ¤¹´Ø¿ô¤ò inline ¤Ë¤Ç¤­¤Þ¤»¤ó´Ø¿ôÀë¸À¤Ï¥×¥í¥È¥¿¥¤¥×¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó`noreturn' ¤ÎÀë¸À¤µ¤ì¤¿´Ø¿ô¤Ë `return' ʸ¤¬¤¢¤ê¤Þ¤¹´Ø¿ô¤ÎÄêµÁ¤¬ `auto' ¤ÈÀë¸À¤µ¤ì¤Þ¤·¤¿´Ø¿ô¤ÎÄêµÁ¤¬ `register' ¤ÈÀë¸À¤µ¤ì¤Þ¤·¤¿´Ø¿ô¤ÎÄêµÁ¤¬ `typedef' ¤ÈÀë¸À¤µ¤ì¤Þ¤·¤¿´Ø¿ô¤¬Ê¸»úÎ󷿤òÊÖ¤·¤Þ¤»¤ó´Ø¿ô¤Ï¶²¤é¤¯ `%s' format °À­¤Î¸õÊä¤È»×¤ï¤ì¤Þ¤¹´Ø¿ô¤Ï¶²¤é¤¯ `noreturn' °À­¤Î¸õÊä¤È»×¤ï¤ì¤Þ¤¹´Ø¿ô¤ÎÊÖ¤¹·¿¤¬´Ø¿ô¤Ç¤¢¤Ã¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó´Ø¿ô¤¬¥í¡¼¥«¥ëÊÑ¿ô¤Î¥¢¥É¥ì¥¹¤òÊÖ¤·¤Æ¤¤¤Þ¤¹´Ø¿ô¤¬½¸¹çÂΤòÊÖ¤·¤Æ¤¤¤Þ¤¹´Ø¿ô¤¬Â礭¤¹¤®¤Æ inline ¤Ë¤Ç¤­¤Þ¤»¤ó´Ø¿ô·¿¤¬ ISO C ¤È´°Á´¸ß´¹¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó´Ø¿ô¤¬ __builtin_eh_return ¤ò»È¤¤¤Þ¤¹alloca ¤ò»È¤Ã¤Æ¤¤¤ë´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤ósetjmp ¤ò»È¤Ã¤Æ¤¤¤ë´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤óshort complex ·¿¤ò»È¤¦´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤ó»»½Ð¤µ¤ì¤¿¥¸¥ã¥ó¥×¤ò¹Ô¤Ê¤¦´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤ó¥é¥Ù¥ë¥¢¥É¥ì¥¹¤ò»ý¤Á¡¢½é´ü²½»Ò¤Ç»È¤ï¤ì¤ë´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤óÆþ¤ì»Ò´Ø¿ô¤ò»ý¤Ä´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤óÈó¥í¡¼¥«¥ë goto ¤ò»È¤Ã¤Æ¤¤¤ë´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤ó¥¿¡¼¥²¥Ã¥È¸Çͭ°À­Éդδؿô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤óÆ©²á¶¦ÍÑÂΤΰú¿ô¤ò»ý¤Ä´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤ó²ÄÊÑŰú¿ô¤ò»ý¤Ä´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤ó²ÄÊÑŤÎÌá¤êÃͤòÊÖ¤¹´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤ó¸Å¤¤ C ¤Ç¤Ï¡¢´Ø¿ôŪ¥Þ¥¯¥í "%s" ¤Ë°ú¿ô¤¬Í¿¤¨¤é¤ì¤Í¤Ð¤Ê¤ê¤Þ¤»¤ógcc ¥É¥é¥¤¥Ð¥Ð¡¼¥¸¥ç¥ó %s ¼Â¹Ô gcc ¥Ð¡¼¥¸¥ç¥ó %s + gcc ¥Ð¡¼¥¸¥ç¥ó %s + RP ¥³¡¼¥É¤òÀ¸À®¤¹¤ëÂç°è¥ì¥¸¥¹¥¿ÊÑ¿ô `%s' ¤¬Æþ¤ì»Ò´Ø¿ô¤ÎÃæ¤Ç»È¤ï¤ì¤Þ¤·¤¿Âç°è register ÊÑ¿ô¤¬´Ø¿ôÄêµÁ¤Î¸å¤í¤Ë¤¢¤ê¤Þ¤¹Âç°è register ÊÑ¿ô¤¬½é´üÃͤò»ý¤Ã¤Æ¤¤¤Þ¤¹gp ¤òÄê¿ô¤È¤¹¤ë¡Êâ¡¢´ÖÀܸƤӽФ·¤Ç¤Ï gp ¤ò save/restore ¤¹¤ë¡Ë¥Ï¡¼¥É¥ì¥¸¥¹¥¿ `%s' ¤¬ `asm' ¤ËÂФ·¡¢ÆþÎÏ¥ª¥Ú¥é¥ó¥É¤È¤·¤ÆÅÐÏ¿¤µ¤ì¤Þ¤·¤¿16 ¿Ê¿ôʸ»úÄê¿ô¤¬ 1 ¥Ð¥¤¥È¤Ë¼ý¤Þ¤ê¤Þ¤»¤ó16 ¿Ê¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹¤¬Èϰϳ°¤Ç¤¹16 ¿Ê¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹¤¬Èϰϳ°¤Ç¤¹16 ¿ÊÉâÆ°¾®¿ôÄê¿ô¤¬¤Ù¤­¾è¤ò»ý¤Á¤Þ¤»¤óiC2.0 ¤È iC3.0 ¤È¤Ï¸ß´¹À­¤¬¤¢¤ê¤Þ¤»¤ó - iC3.0 ¤ò»ÈÍѤ·¤Þ¤¹ia64_print_operand: ÉÔÌÀ¤Ê¥³¡¼¥É¤Ç¤¹¼±ÊÌ»Ò̾ `%s' ¤Ï GNU C++ ÆâÉô¤Î¥Í¡¼¥ß¥ó¥°Àïά¤È¶¥¹ç¤·¤Þ¤¹#pragma %s ¤ò̵»ë¤·¤Þ¤¹#pragma %s %s ¤ò̵»ë¤·¤Þ¤¹Èó static ¥í¡¼¥«¥ëÊÑ¿ô `%s' ¤Ø¤Î asm »ØÄê»Ò¤Ï̵»ë¤µ¤ì¤Þ¤¹½ÅÊ£¤·¤¿¥Ç¥£¥ì¥¯¥È¥ê "%s" ¤ò̵»ë¤·¤Þ¤¹ + ¸ºß¤·¤Ê¤¤¥Ç¥£¥ì¥¯¥È¥ê "%s" ¤ò̵»ë¤·¤Þ¤¹ + ̵¸ú¤Ê¥Ç¥Ð¥Ã¥°¥ì¥Ù¥ë»ØÄê¤Ë¤è¤ê¡¢¥ª¥×¥·¥ç¥ó `%s' ¤ò̵»ë¤·¤Þ¤¹pragma ¤ò̵»ë¤·¤Þ¤¹: %s´Ø¿ô `%s' ¤Î°ÅÌÛ¤ÎÀë¸À¤¢¤ê¤¨¤Ê¤¤±é»»»Ò '%s'`asm' Æâ¤Ç¤Ï¥ì¥¸¥¹¥¿À©Ìó¤ò¹Ô¤Ê¤¨¤Þ¤»¤óξΩ¤·¤Ê¤¤¥ª¥Ö¥¸¥§¥¯¥È¥Õ¥¡¥¤¥ë¤È´üÂÔÃÍ%d ÈÖÌܤΰú¿ô¤¬ `%s' ¤Î·¿¤È¸ß´¹À­¤¬¤¢¤ê¤Þ¤»¤ó´ÖÀÜŪ¤Ê´Ø¿ô¸Æ¤Ó½Ð¤·¤ÎÂè %d °ú¿ô¤ËÂФ·¤Æ¸ß´¹À­¤Î¤Ê¤¤·¿¤Ç¤¹%s ¤Ë¸ß´¹À­¤Î¤Ê¤¤·¿¥«¥Æ¥´¥ê `%s' ¤Î¼ÂÁõ¤¬ÉÔ´°Á´¤Ç¤¹¥¯¥é¥¹ `%s' ¤Î¼ÂÁõ¤¬ÉÔ´°Á´¤Ç¤¹ÉÔ´°Á´¤Ê·¿¤Îñ°ì²½Ìµ¸ú¤Ê ¥æ¥Ë¥Ð¡¼¥µ¥ëʸ»ú̾¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô¤Î»ÅÍͤ¬°ì´Ó¤·¤Æ¤¤¤Þ¤»¤ó`asm' Æâ¤Ç¤Î¥ª¥Ú¥é¥ó¥ÉÀ©Ìó¤¬Ì·½â¤·¤Æ¤¤¤Þ¤¹¥¤¥ó¥¯¥ê¥á¥ó¥Èunion ½é´ü²½»Ò¤¬¥Õ¥£¡¼¥ë¥É̾¤Ç¤Ï¤Ê¤¯¥¤¥ó¥Ç¥Ã¥¯¥¹ÃͤˤʤäƤ¤¤Þ¤¹init ´Ø¿ô¤ò¥ª¥Ö¥¸¥§¥¯¥È %s ¤Ç¸«¤Ä¤±¤Þ¤·¤¿½é´ü²½½é´ü²½»ØÌ¾»Ò¤Ç¤Ï¥Í¥¹¥È¤µ¤»¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó²ÄÊÑÇÛÎó¥á¥ó¥Ð¤ò½é´ü²½¤·¤Æ¤¤¤Þ¤¹¥Í¥¹¥È¤·¤¿Ê¸Ì®¤Ç²ÄÊÑÇÛÎó¥á¥ó¥Ð¤ò½é´ü²½¤·¤Æ¤¤¤Þ¤¹½é´ü²½¤µ¤ì¤¿¥Õ¥£¡¼¥ë¥É¤¬ÉûºîÍѤǾå½ñ¤­¤µ¤ì¤Þ¤¹½é´ü²½¤µ¤ì¤¿ÊÑ¿ô `%s' ¤Ï dllimport ¥Þ¡¼¥¯¤µ¤ì¤Æ¤¤¤Þ¤¹½é´ü²½»Ò¤ÎÍ×ÁÇ¤Ï¥í¡¼¥É»þ¤Ë·×»»¤µ¤ìÆÀ¤Þ¤»¤ó½é´ü²½»Ò¤ÎÍ×ÁǤ¬Äê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó½é´üÀßÄê»Ò¤ÎËöÈø¤¬ËÜÍè¤è¤êÁ᤯½Ð¸½¤·¤Þ¤·¤¿½é´ü²½»Ò¤Ï `%s' ¤Î¥µ¥¤¥º¤ÎÆÃÄê¤Ë¼ºÇÔ¤·¤Þ¤·¤¿ÉâÆ°¾®¿ôÅÀ¿ô¤Î½é´üÀßÄê»Ò¤ÎÃͤ¬¡¢ÉâÆ°¾®¿ôÅÀÄê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤óÀ°¿ô¤Î½é´üÀßÄê»Ò¤ÎÃͤ¬Ê£»¨¤¹¤®¤Þ¤¹¥¹¥«¥é¡¼ÊÑ¿ô¤Î½é´ü²½»Ò¤Ï°ì¤Ä¤ÎÍ×ÁǤòÍ׵ᤷ¤Þ¤¹static ÊÑ¿ô¤Î½é´ü²½»Ò¤¬Äê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤óstatic ÊÑ¿ô¤Î½é´ü²½»Ò¤¬Ê£»¨¤Ê·×»»¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¥³¥ó¥¹¥È¥é¥¯¥¿¤ÎÀÅŪ¥á¥ó¥Ð½é´ü²½»Ò¤Ï̵¸ú¤Ç¤¹½é´ü²½»Ò¥ê¥¹¥È¤¬Ê£¹ç¼°¤È¤·¤Æ¼è¤ê°·¤ï¤ì¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹´ðÄ쥯¥é¥¹¤ò»ý¤Ä¥¯¥é¥¹¤Î¥ª¥Ö¥¸¥§¥¯¥ÈÍѤνé´ü²½»Ò¥ê¥¹¥È¤Ç¤¹²¾ÁÛ´ðÄ쥯¥é¥¹¤ò»ý¤Ä¥¯¥é¥¹¤Î¥ª¥Ö¥¸¥§¥¯¥ÈÍѤνé´ü²½»Ò¥ê¥¹¥È¤Ç¤¹²¾ÁÛ´Ø¿ô¤ò»ÈÍѤ¹¤ë¥ª¥Ö¥¸¥§¥¯¥ÈÍѤνé´ü²½»Ò¥ê¥¹¥È¤Ç¤¹½é´ü²½»Ò¥ê¥¹¥È¤ÏÊ£¹ç¼°¤È¤·¤Æ¼è¤ê°·¤ï¤ì¤Þ¤·¤¿char ¤ÎÇÛÎó¤Ë¤È¤Ã¤Æ½é´ü²½»Òʸ»úÎó¤¬Ä¹¤¹¤®¤Þ¤¹ÇÛÎó¤ò²¾°ú¿ô¥ê¥¹¥È¤Ë¤è¤Ã¤Æ½é´ü²½¤·¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹¤³¤Î¥Û¥¹¥È¤Ç¤Ï¥¤¥ó¥é¥¤¥óÉâÆ°¾®¿ôÄê¿ô¤ò¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¤³¤ÎÌá¤êÃÍ·¿¤Î inline ´Ø¿ô¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó`%s' ¤Ø¤Î¸Æ¤Ó½Ð¤·¤Î¥¤¥ó¥é¥¤¥ó²½¤Ë¼ºÇÔ¤·¤Þ¤·¤¿ÆþÎÏ¥ª¥Ú¥é¥ó¥ÉÀ©Ìó¤¬ `%c' ¤ò´Þ¤ó¤Ç¤¤¤Þ¤¹¥¤¥ó¥¹¥È¡¼¥ë: %s%s + ¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô `%s' ¤¬¥¯¥é¥¹¥á¥½¥Ã¥É¤«¤é¥¢¥¯¥»¥¹¤µ¤ì¤Þ¤·¤¿¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô `%s' ¤Ï %s ¤ÈÀë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô `%s' ¤Ï private ¤ÈÀë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹Ì¿Î᥹¥±¥¸¥å¡¼¥ê¥ó¥°¤Ï¤³¤Î¥¿¡¼¥²¥Ã¥È¥Þ¥·¥ó¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤óÈó¥ï¥¤¥Éʸ»úÎ󤫤é int ¤ÎÇÛÎ󤬽é´ü²½¤µ¤ì¤Þ¤·¤¿À°¿ôÄê¿ô¤¬´ð¿ô¤òͤ¨¤¿¿ôÃͤò´Þ¤ó¤Ç¤¤¤Þ¤¹¤½¤Î·¿¤ÎºÇÂçÃͤè¤ê¤âÂ礭¤ÊÃͤÎÀ°¿ôÄê¿ô¤Ç¤¹À°¿ôÄê¿ô¤¬Â礭¤¹¤®¤ë¤Î¤Ç unsigned ¤Ë¤Ê¤ê¤Þ¤·¤¿À°¿ôÄê¿ô¤¬¥³¥ó¥Ñ¥¤¥é¤Î¸½ºß¤ÎÀßÄê¤è¤êÂ礭¤¹¤®¤ë¤¿¤á¡¢%d ¥Ó¥Ã¥È¤ËÀÚ¤êµÍ¤á¤Þ¤·¤¿À°¿ôÄê¿ô¤Ï ISO C ¤Ç¤ÏÉä¹ç̵¤·¤Ç¡¢-traditional ¤ò¤Ä¤±¤ë¤ÈÉä¹çÉÕ¤­¤Ç¤¹%s ¤ÎºÇÂçÃͤè¤ê¤âÂ礭¤ÊÃͤÎÀ°¿ôÄê¿ô¤Ç¤¹À°¿ôÄê¿ô¤¬ÈϰϤò³°¤ì¤Æ¤¤¤Þ¤¹¼°¤ÎÀ°¿ô¤¬¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤Þ¤·¤¿À°¿ô¤¬¥×¥ê¥×¥í¥»¥Ã¥µ¼°Æâ¤Ç¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤Þ¤·¤¿ÆâÉô¥¨¥é¡¼ÆâÉô¥¨¥é¡¼ - ̵¸ú¤Ê Utf8 ̾¤Ç¤¹ÆâÉô¥¨¥é¡¼ - interface ·¿¤¬Â¿¤¹¤®¤Þ¤¹ÆâÉô¥¨¥é¡¼ - ̤ÄêµÁ·¿¤Î»ÈÍѤǤ¹check-init ¤ÇÆâÉô¥¨¥é¡¼: ¥Ä¥ê¡¼¥³¡¼¥É¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó: %sgenerate_bytecode_insn ¤ÇÆâÉô¥¨¥é¡¼ - ¥Ä¥ê¡¼¥³¡¼¥É¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó: %sÆâÉô¥¨¥é¡¼: ÆâÉô¥¨¥é¡¼: ¥¢¥»¥ó¥Ö¥é¥Ñ¥¿¡¼¥ó¤Ç %%( ¤Ê¤·¤Î %%) ¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿ÆâÉô¥¨¥é¡¼: ¥¢¥»¥ó¥Ö¥é¥Ñ¥¿¡¼¥ó¤Ç %%< ¤Ê¤·¤Î %%> ¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿ÆâÉô¥¨¥é¡¼: ¥¢¥»¥ó¥Ö¥é¥Ñ¥¿¡¼¥ó¤Ç %%[ ¤Ê¤·¤Î %%] ¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿ÆâÉô¥¨¥é¡¼: ¥¢¥»¥ó¥Ö¥é¥Ñ¥¿¡¼¥ó¤Ç %%{ ¤Ê¤·¤Î %%} ¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿ÆâÉôŪ¤Ë regno ¤Î½èÍý¤¬ÊÑ: regno = %d + interworking ¤Ï APCS-32 ¤Î»ÈÍѤò¶¯Íפ·¤Þ¤¹Ìµ¸ú¤Ê #-¹Ô̵¸ú¤Ê #ident̵¸ú¤Ê #line̵¸ú¤Ê #pragma %s ¤Ç¤¹#pragma GCC ±øÀ÷¥Ç¥£¥ì¥¯¥Æ¥£¥ô¤¬Ìµ¸ú¤Ç¤¹Ìµ¸ú¤Ê %%-code̵¸ú¤Ê %%B ÃÍ̵¸ú¤Ê %%C ÃÍ̵¸ú¤Ê %%E ÃÍ̵¸ú¤Ê %%F ÃͤǤ¹Ìµ¸ú¤Ê %%G ÃͤǤ¹Ìµ¸ú¤Ê %%H ÃÍ̵¸ú¤Ê %%J ¥³¡¼¥É¤Ç¤¹Ìµ¸ú¤Ê %%K ÃͤǤ¹Ìµ¸ú¤Ê %%L ÃÍ̵¸ú¤Ê %%M ÃÍ̵¸ú¤Ê %%N ÃÍ̵¸ú¤Ê %%O ÃÍ̵¸ú¤Ê %%P ÃÍ̵¸ú¤Ê %%Q ÃÍ̵¸ú¤Ê %%R ÃÍ̵¸ú¤Ê %%S ÃÍ̵¸ú¤Ê %%T ÃͤǤ¹Ìµ¸ú¤Ê %%U ÃÍ̵¸ú¤Ê %%V ÃÍ̵¸ú¤Ê %%Z ÃÍ̵¸ú¤Ê %%b ÃÍ̵¸ú¤Ê %%f ÃͤǤ¹Ìµ¸ú¤Ê %%h ÃÍ̵¸ú¤Ê %%j ¥³¡¼¥É¤Ç¤¹Ìµ¸ú¤Ê %%j ÃÍ̵¸ú¤Ê %%k ÃÍ̵¸ú¤Ê %%m ÃÍ̵¸ú¤Ê %%p ÃͤǤ¹Ìµ¸ú¤Ê %%q ÃͤǤ¹Ìµ¸ú¤Ê %%r ÃÍ̵¸ú¤Ê %%s ÃÍ̵¸ú¤Ê %%u ÃͤǤ¹Ìµ¸ú¤Ê %%v ÃͤǤ¹Ìµ¸ú¤Ê %%xn ¥³¡¼¥É̵¸ú¤Ê %%z ÃÍ̵¸ú¤Ê %B ÃͤǤ¹Ìµ¸ú¤Ê %C ÃͤǤ¹Ìµ¸ú¤Ê %D ÃͤǤ¹Ìµ¸ú¤Ê %E ÃͤǤ¹Ìµ¸ú¤Ê %H ÃͤǤ¹Ìµ¸ú¤Ê %P ¥ª¥Ú¥é¥ó¥É¤Ç¤¹Ìµ¸ú¤Ê %Q ÃͤǤ¹Ìµ¸ú¤Ê %h ÃͤǤ¹Ìµ¸ú¤Ê %o ÃͤǤ¹Ìµ¸ú¤Ê %p ÃͤǤ¹Ìµ¸ú¤Ê %q ÃͤǤ¹Ìµ¸ú¤Ê %r ÃͤǤ¹Ìµ¸ú¤Ê %s/S ÃͤǤ¹Ìµ¸ú¤Ê %x/X ÃͤǤ¹Ìµ¸ú¤Ê --param ¥ª¥×¥·¥ç¥ó: %s̵¸ú¤Ê PC ¤¬¹ÔÈÖ¹æ¥Æ¡¼¥Ö¥ë¤Ë¤¢¤ê¤Þ¤¹¥ª¥Ú¥é¥ó¥É¤È¤·¤ÆÌµ¸ú¤Ê UNSPEC̵¸ú¤Ê `asm': %s`__builtin_frame_address' ¤Ø¤Î°ú¿ô¤¬ÉÔŬÀڤǤ¹`__builtin_return_address' ¤Ø¤Î°ú¿ô¤¬ÉÔŬÀڤǤ¹ÀÅŪ¥á¥ó¥Ð´Ø¿ô¥¹¥³¡¼¥×Æâ¤Ç¤Ï `this' ¤òÍפ¹¤ë¥á¥ó¥Ð´Ø¿ô¤Î¸Æ¤Ó½Ð¤·¤Ï̵¸ú¤Ç¤¹Ìµ¸ú¤Ê catch ¤Î°ú¿ô̵¸ú¤Ê¥³¡¼¥É¤Ç¤¹Ìµ¸ú¤Ê¥Ç¥Õ¥©¥ë¥È¥Æ¥ó¥×¥ì¡¼¥È°ú¿ô¥ª¥Ú¥é¥ó¥É¤È¤·¤ÆÌµ¸ú¤Ê¼°"%s" ¤Ï line ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç¤Ï̵¸ú¤Ê¥Õ¥é¥°¤Ç¤¹#line ¥³¥Þ¥ó¥É¤Î½ñ¼°¤¬Ìµ¸ú¤Ç¤¹¥á¥ó¥Ð `%s' ¤ËÂФ¹¤ë̵¸ú¤Ê½é´üÃÍ̵¸ú¤Ê½é´ü²½»Ò̵¸ú¤Ê¥Ó¥Ã¥ÈÎó½é´ü²½»Ò¤Ç¤¹²¾°ú¿ô¥ê¥¹¥È¤Ë̵¸ú¤ÊÀ°¿ôÄê¿ô¤¬¤¢¤ê¤Þ¤¹¡£²¾°ú¿ô̾¤òÍ¿¤¨Ëº¤ì¤¿¤Î¤Ç¤Ï¡©asm ʸ¤ÎÃæ¤Ë̵¸ú¤Êº¸ÊÕÃÍÂåÆþ¤È¤·¤ÆÌµ¸ú¤Êº¸ÊÕÃͤǤ¹Ã±¹à¤Î `&' ¤Ç¤Îº¸ÊÕÃͤ¬Ìµ¸ú¤Ç¤¹Ìµ¸ú¤Ê¥Þ¥¯¥í̵̾¸ú¤Ê¥Þ¥¯¥í̾ `%s'̵¸ú¤Ê¥ª¥Ú¥é¥ó¥É½ÐÎÏ¥³¡¼¥É%H/%L ¥³¡¼¥É¤ËÂФ¹¤ë̵¸ú¤Ê¥ª¥Ú¥é¥ó¥É%N ¥³¡¼¥É¤ËÂФ¹¤ë̵¸ú¤Ê¥ª¥Ú¥é¥ó¥É%R ¥³¡¼¥É¤ËÂФ¹¤ë̵¸ú¤Ê¥ª¥Ú¥é¥ó¥É%T/%B ¥³¡¼¥É¤ËÂФ¹¤ë̵¸ú¤Ê¥ª¥Ú¥é¥ó¥É%U ¥³¡¼¥É¤ËÂФ¹¤ë̵¸ú¤Ê¥ª¥Ú¥é¥ó¥É%V ¥³¡¼¥É¤ËÂФ¹¤ë̵¸ú¤Ê¥ª¥Ú¥é¥ó¥É%p ¥³¡¼¥É¤ËÂФ¹¤ë̵¸ú¤Ê¥ª¥Ú¥é¥ó¥É%s ¥³¡¼¥É¤ËÂФ¹¤ë̵¸ú¤Ê¥ª¥Ú¥é¥ó¥ÉÆó¹à±é»»»Ò %s ¤¬ÉÔŬÀڤǤ¹¥¤¥ó¥¹¥¿¥ó¥¹²½¤µ¤ì¤Ê¤¤·¿¤ËÂФ¹¤ë̵¸ú¤ÊÁàºî¤Ç¤¹²¾°ú¿ô `%s' ¤Ï̵¸ú¤Ç¤¹Ìµ¸ú¤Ê¥Ñ¥é¥á¥¿ÃÍ `%s'̵¸ú¤Ê¥×¥ê¥×¥í¥»¥¹¥Ç¥£¥ì¥¯¥Æ¥£¥ô #%s̵¸ú¤Ê¶çÆÉÅÀ `%c' ¤¬À©ÌóÆâ¤Ë¤¢¤ê¤Þ¤¹¥ì¥·¡¼¥Ð·¿ `%s' ¤¬Ìµ¸ú¤Ç¤¹NULL ¥Ý¥¤¥ó¥¿¤Ø¤Î̵¸ú¤Ê»²¾È¡¢Âå¤ï¤ê¤Ë¥á¥ó¥Ð¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò»È¤¤¤Þ¤·¤ç¤¦`%s' ¤Ï¥ì¥¸¥¹¥¿ÊÑ¿ô¤È¤·¤Æ¤Ï̵¸ú¤Ê¥ì¥¸¥¹¥¿Ì¾¤Ç¤¹`%s' ¤ËÂФ¹¤ë¥ì¥¸¥¹¥¿Ì¾¤È¤·¤ÆÌµ¸ú¤Ç¤¹´Ø¿ô `%s' ¤ËÂФ·¤ÆÉÔŬÀÚ¤ÊÊݸ¥¯¥é¥¹Ê¸»úÎó¥ê¥Æ¥é¥ë¤¬Ìµ¸ú¤Ç¤¹¡¢ºÇ¸å¤Î '\' ¤ò̵»ë¤·¤Þ¤¹ÀÜÈø¼­ '%.*s' ¤ÏÀ°¿ôÄê¿ô¤Ë¤Ï̵¸ú¤Ç¤¹¿¿µ¶Ãͼ°¤¬ÉÔŬÀڤǤ¹new ¤ËÂФ·¤ÆÌµ¸ú¤Ê·¿¤Ç¤¢¤ë `void'̵¸ú¤Ê·¿°ú¿ô¤Ç¤¹`%s' ¤Î°ú¿ô¤È¤·¤ÆÌµ¸ú¤Ê·¿¥Ý¥¤¥ó¥¿Àë¸À»Ò¤ËÉÔŬÀڤʷ¿½¤¾þ»Ò̵¸ú¤Ê·¿: `void &'̵¸ú¤ÊÍÑË¡¤Î of %%d, %%x, Ëô¤Ï %%X¥á¥ó¥Ð¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤Î̵¸ú¤Ê `%s' ¤Î»ÈÍÑ`restrict' ¤ÎÍÑË¡¤¬ÉÔŬÀڤǤ¹¥È¥Ã¥×¥ì¥Ù¥ë¤Ç¤Î `this' ¤Î»ÈÍѤÏ̵¸ú¤Ç¤¹Èó¥á¥ó¥Ð´Ø¿ô¤Ç¤Î `this' ¤Î»ÈÍѤÏ̵¸ú¤Ç¤¹¥Ý¥¤¥ó¥¿±é»»¤ÇÉÔ´°Á´·¿¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò»È¤¦¤³¤È¤Ï̵¸ú¤Ç¤¹¶­³¦¤¬»ØÄꤵ¤ì¤Ê¤¤ÇÛÎó¤ÎÉÔŬÀÚ¤ÊÍøÍÑÉÔ´°Á´¤Ê typedef `%s' ¤Î»ÈÍѤÏÉÔŬÀڤǤ¹Èóº¸ÊÕÃÍÇÛÎó¤Î̵¸ú¤ÊÍøÍÑ̤ÄêµÁ¤Î·¿ `%s %s' ¤Î»ÈÍѤÏÉÔŬÀڤǤ¹void ¼°¤ÎÉÔŬÀڤʻÈÍÑ̵¸ú¤Ê¥Ð¡¼¥¸¥ç¥óÈÖ¹æ·Á¼°ÀÅŪ¥á¥½¥Ã¥É¤Ë invoke[Èó static] ¤·¤Þ¤·¤¿Ãê¾Ý¥á¥½¥Ã¥É¤Ë invokestatic ¤·¤Þ¤·¤¿ÈóÀÅŪ¥á¥½¥Ã¥É¤Ë invokestatic ¤·¤Þ¤·¤¿`%s' ¤Ø¤Î¥¸¥ã¥ó¥×¤ÏÅ»¤á¤é¤ì¤¿¥Ö¥í¥Ã¥¯Æâ¤Ø¡¢Ìµ¸ú¤Ë¥¸¥ã¥ó¥×¤·¤Æ¤¤¤Þ¤¹case ¥é¥Ù¥ë¤Ë¥¸¥ã¥ó¥×¤·¤Æ¤¤¤Þ¤¹#pragma %s ¤ÎËöÈø¤Ë¥´¥ß#pragma GCC java_exceptions ¤ÎËöÈø¤Ë¥´¥ß#pragma ghs endsda ¤Î½ª¤ê¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹#pragma ghs endtda ¤Î½ª¤ê¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹#pragma ghs ¤Î½ª¤ê¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹#pragma ghs interrupt ¤Î½ª¤ê¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹#pragma ghs section ¤Î½ª¤ê¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹#pragma ghs startsda ¤Î½ª¤ê¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹#pragma ghs starttda ¤Î½ª¤ê¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹#pragma ghs startzda ¤Î½ª¤ê¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹#pragma map ¤Î½ª¤ê¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹#pragma weak ¤ÎËöÈø¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹'#pragma %s' ¤ÎºÇ¸å¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹'#pragma pack' ¤ÎËöÈø¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹¥·¥°¥Í¥¤¥Á¥ãʸ»úÎó¤Î½ª¤ê¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹¥é¥Ù¥ë %s ¤¬¤¢¤é¤æ¤ë´Ø¿ô¤Î³°Â¦¤Ç»²¾È¤µ¤ì¤Þ¤·¤¿¥é¥Ù¥ë `%s' ¤¬ÄêµÁ¤µ¤ì¤Þ¤·¤¿¤¬»È¤ï¤ì¤Æ¤¤¤Þ¤»¤ó¥é¥Ù¥ë `%s' ¤¬´Ø¿ô¤Î³°Â¦¤Î²¿¤«¤ò»²¾È¤·¤Þ¤·¤¿¥é¥Ù¥ë `%s' ¤¬Å»¤á¤é¤ì¤¿¥Ö¥í¥Ã¥¯¤ò¹½À®¤¹¤ëÁ°¤Ë»È¤ï¤ì¤Þ¤·¤¿¥é¥Ù¥ë `%s' ¤¬»È¤ï¤ì¤Þ¤·¤¿¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¥é¥Ù¥ë¤Î¸å¤í¤Ë¤Ïʸ¤¬É¬ÍפǤ¹¸À¸ì %s ¤Ïǧ¼±¤Ç¤­¤Þ¤»¤ó¸À¸ìʸ»úÎó `"%s"' ¤Ïǧ¼±¤µ¤ì¤Þ¤»¤ó-mtiny-stack ¤Ë¤è¤ê¥é¡¼¥¸¥Õ¥ì¡¼¥à¥Ý¥¤¥ó¥¿¤¬Êѹ¹¤µ¤ì¤Þ¤¹(%d)Â礭¤ÊÀ°¿ô¤¬°ÅÌÛ¤ËÉä¹ç̵¤··¿¤ËÀÚ¤êµÍ¤á¤é¤ì¤Þ¤·¤¿ld ¤Ï¥¹¥Æ¡¼¥¿¥¹ %d ¤Ç½ªÎ»¤·¤Þ¤·¤¿º¸ÀºÅÙstrfmon ¥Õ¥©¡¼¥Þ¥Ã¥È¤Îº¸ÀºÅÙº¸¥·¥Õ¥È²ó¿ô >= ·¿¤ÎÉý¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹º¸¥·¥Õ¥È²ó¿ô¤¬Éé¤Î¿ô¤Ç¤¹¥«¥ó¥Þ±é»»»Ò¤Îº¸Â¦¤Î¼°¤Ë¸úÎϤ¬¤¢¤ê¤Þ¤»¤óŤµ½¤¾þ»Òprintf ¥Õ¥©¡¼¥Þ¥Ã¥È¤ÎŤµ½¤¾þ»Òscanf ¥Õ¥©¡¼¥Þ¥Ã¥È¤ÎŤµ½¤¾þ»Òstrfmon ¥Õ¥©¡¼¥Þ¥Ã¥È¤ÎŤµ½¤¾þ»Ò¥é¥¤¥Ö¥é¥ê: %s + ¥é¥¤¥Ö¥é¥ê´Ø¿ô `%s' ¤ÏÈó´Ø¿ô¤È¤·¤ÆÀë¸À¤µ¤ì¤Þ¤·¤¿¹ÔÈֹ椬Èϰϳ°¤Ç¤¹load ¥³¥Þ¥ó¥É¥Þ¥Ã¥×¡¢%d ¸Ä¤Î¥³¥Þ¥ó¥É¡¢¿·¤¿¤Ê¥µ¥¤¥º %ld¡£ + `%s' ¤Î¥í¡¼¥«¥ëÀë¸À¤Ç¡¢¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô¤¬±£¤µ¤ì¤Þ¤¹long ¤È short ¤¬ `%s' ¤ËÂФ·¤Æ°ì½ï¤Ë»ØÄꤵ¤ì¤Æ¤¤¤Þ¤¹long long Äê¿ô¤ÏÀµ¾ï¤Ê¨ÃÍ¥ª¥Ú¥é¥ó¥É¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó`%s' ¤ËÂФ·¤Æ char ¤È¤È¤â¤Ë long ¤Þ¤¿¤Ï short ¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤¹`%s' ¤ËÂФ·¤ÆÉâÆ°¾®¿ô·¿¤È¤È¤â¤Ë long ¤Þ¤¿¤Ï short ¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤¹`%s' ¤ËÂФ·¤Æ long, short, signed ¤Þ¤¿¤Ï unsigned ¤ÏÉÔŬÀڤǤ¹`%s' ¤ËÂФ¹¤ë long, short, singed ¤ä unsigned ¤Î»ÈÍѤÏÉÔŬÀڤǤ¹lseek %s 0¥Þ¥¯¥í "%s" ¤Ë°ú¿ô¤¬ %u ÅϤµ¤ì¤Þ¤·¤¿¤¬¡¢%u ¤·¤«¼õ¤±¼è¤ê¤Þ¤»¤ó¥Þ¥¯¥í "%s" ¤Ï°ú¿ô¤ò %u Í׵ᤷ¤Þ¤¹¤¬¡¢%u ¸Ä¤·¤«Í¿¤¨¤é¤ì¤Æ¤¤¤Þ¤»¤ó¥Þ¥¯¥í̾¤Ï¼±Ê̻ҤǤʤ¯¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó¥Þ¥¯¥í¤Þ¤¿¤Ï #include ¤ÎºÆµ¢¤¬¿¼¤¹¤®¤Þ¤¹¥Þ¥¯¥í²¾°ú¿ô¤Ï¥«¥ó¥Þ¶èÀڤꤵ¤ì¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¤ª¤«¤·¤Ê #pragma align - ̵»ë¤µ¤ì¤Þ¤·¤¿¤ª¤«¤·¤Ê #pragma ghs section¤ª¤«¤·¤Ê #pragma map¡¢Ìµ»ë¤µ¤ì¤Þ¤·¤¿CLASSPATH Æâ¤ËÊÑ¤Ê .zip ¥¢¡¼¥«¥¤¥Ö¤¬¤¢¤ê¤Þ¤¹: %s¥Þ¥¹¥¯¤Ï¨ÃͤǤʤ±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó½ÐÎÏ¥ª¥Ú¥é¥ó¥ÉÆâ¤ÎÀ©Ìó¤¬Àµ¤·¤¯¤¢¤ê¤Þ¤»¤óÀ©Ìó¤ËŬ¹ç¤µ¤»¤ë»þ¤Ë¡¢Ìµ¸ú¤Ê¥ª¥Ú¥é¥ó¥ÉÈÖ¹æ¤ò»²¾È¤·¤Þ¤·¤¿-EB ¤È -EL ¤ÎξÊý¤ò»È¤¦¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó-mfp64 ¤È -m4650 ¤ÎξÊý¤ò»È¤¦¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó-mfp64 ¤È -msingle-float ¤ÎξÊý¤ò»È¤¦¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¥á¥ó¥Ð´Ø¿ô¤Ï°ÅÌÛŪ¤Ë¤½¤Î¥¯¥é¥¹¤Î friend ¤Ç¤¹¥á¥ó¥Ð¥á¥½¥Ã¥É '%s' ¤Ï¥¯¥é¥¹Æâ¤Ë¸«¤Ä¤«¤ê¤Þ¤»¤ó`%c%s' ¤Î¥á¥½¥Ã¥ÉÄêµÁ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¥á¥½¥Ã¥ÉÄêµÁ¤¬¥¯¥é¥¹¥³¥ó¥Æ¥­¥¹¥ÈÆâ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¥á¥½¥Ã¥É¤Ï´Ø¿ô¥Ý¥¤¥ó¥¿¤ËÊÑ´¹¤Ç¤­¤Þ¤»¤ómips16 ´Ø¿ô¥×¥í¥Õ¥¡¥¤¥ëConstantValue °À­¤Î¾ì½ê¤ò´Ö°ã¤¨¤Æ¤¤¤Þ¤¹¡Ê¤É¤Î¥Õ¥£¡¼¥ë¥É¤Ç¤â¤¢¤ê¤Þ¤»¤ó¡Ë¥Õ¥©¡¼¥Þ¥Ã¥ÈÆâ¤Ç $ ±é»»»ÒÈÖ¹æ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹½Ò¸ì¤Î¸å¤í¤Î '(' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"defined" ¤Î¸å¤í¤Î ')' ¤¬·ç¤±¤Æ¤¤¤Þ¤¹¥Þ¥¯¥í²¾°ú¿ô¥ê¥¹¥È¤Ç¡¢')' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹²ò¤òÊä´°¤¹¤ë ')' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹±¦Â¦¥Ö¥ì¡¼¥¹¤ÎÁ°¤Î ';' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹Code °À­¤ò·ç¤¤¤Æ¤¤¤Þ¤¹`__builtin_args_info' ¤Ë°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó½é´ü²½»Ò¤Î¤Þ¤ï¤ê¤Î¥Ö¥ì¡¼¥¹¤ò·ç¤¤¤Æ¤¤¤Þ¤¹strfmon ¥Õ¥©¡¼¥Þ¥Ã¥È¤Î½ª¤ê¤ÇµÍ¤áʸ»ú¤ò·ç¤¤¤Æ¤¤¤Þ¤¹½é´ü²½»Ò¤ò·ç¤¤¤Æ¤¤¤Þ¤¹static ¥Õ¥£¡¼¥ë¥É `%s' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹%c ʸ»ú¤Ç¤Î½ªÃ¼¤ò·ç¤¤¤Æ¤¤¤Þ¤¹½ªÃ¼Ê¸»ú > ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹¿ô»ú '%.*s' ¤Î¸å¤Ë¶õÇò¤ò·ç¤¤¤Æ¤¤¤Þ¤¹C++ ¤È Java ¤Î `catch' ¤ò°ì¤Ä¤ÎËÝÌõ¥æ¥Ë¥Ã¥È¤Ë¤Þ¤È¤á¤Þ¤¹mno-cygwin ¤È mno-win32 ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó`asm' ¤Ë¤è¤ë½¤Àµ`asm' ¤ÎÃæ¤Ë %d ¤ò±Û¤¨¤ë¥ª¥Ú¥é¥ó¥É¤¬¤¢¤ê¤Þ¤¹Ê£¿ô¤Î 'i' ¤ä 'j' ÀÜÈø¼­¤¬À°¿ôÄê¿ô¤Ë¤Ä¤¤¤Æ¤¤¤Þ¤¹msync %sÊ£¿ôʸ»ú¤«¤é¤Ê¤ëʸ»úÄê¿ôÊ£¿ô¹Ô¤Î¥³¥á¥ó¥ÈÊ£¿ô¹Ôʸ»úÎó¥ê¥Æ¥é¥ë¤Ï¿ä¾©¤µ¤ì¤Þ¤»¤ó½ÅÊ£¤¹¤ë `virtual' »ØÄê»Ò½ÅÊ£¤¹¤ë¥¢¥¯¥»¥¹»ØÄê»Ò¥á¥½¥Ã¥É `%s' ¤ÎÀë¸À¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹¡£°ì¤Ä¤Î switch ¤ËÊ£¿ô¤Î default ¥é¥Ù¥ë¤¬¤¢¤ê¤Þ¤¹½ÅÊ£¤·¤¿²¾°ú¿ô̾ `%s'`%s' ¤ÎÀë¸À¤Ë¤ª¤¤¤ÆÊ£¿ô¤ÎÊݸ¥¯¥é¥¹°ì¤Ä¤ÎÀë¸À¤ËÊ£¿ô¤Î·¿¤¬¤¢¤ê¤Þ¤¹munmap %stypeid ¤ò»È¤¦Á°¤Ë #include ¤È¤·¤Ê¤¤¤È¤¤¤±¤Þ¤»¤ó%s ¤ËÉԲIJò¤Ê¥ê¥Ý¥¸¥È¥ê¾ðÊ󤬤¢¤ê¤Þ¤¹`%s' ¤Î̾Á°°ú¤­¤ÏÊѹ¹¤µ¤ì¤Þ¤·¤¿`%s' ¤Î̾Á°°ú¤­¤Ï¿·¤¿¤Ê ISO `for' ¥¹¥³¡¼¥×¤ËÊѤï¤ê¤Þ¤·¤¿¥á¥ó¥Ð´Ø¿ô¤Î̾Á°¤ò·ç¤¤¤Æ¤¤¤Þ¤¹Ì¾Á°ÉÕ¤­¥á¥ó¥Ðanonumous ̾Á°¶õ´Ö¤Î½¸¹çÂÎ¤Ï static ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤óÉé¤ÎÀ°¿ô¤¬°ÅÌÛ¤ËÉä¹ç̵¤··¿¤ËÊÑ´¹¤µ¤ì¤Þ¤·¤¿¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É `%s' ¤ÎÉý¤¬Éé¤Î¿ô¤Ç¤¹`%s' ¤Î extern Àë¸À¤¬¥Í¥¹¥È¤·¤Æ¤¤¤Þ¤¹¥Í¥¹¥È¤·¤¿´Ø¿ô `%s' ¤Ï `extern' ¤ËÀë¸À¤µ¤ì¤Þ¤·¤¿`%s' ¤Î¥Í¥¹¥È¤·¤¿ºÆÄêµÁ´Ø¿ô·¿¤ËÂФ·¤Æ new ¤òŬÍѤǤ­¤Þ¤»¤ó»²¾È·¿¤ËÂФ·¤Æ new ¤òŬÍѤǤ­¤Þ¤»¤óÇÛÎ󷿤Πnew ¤Ï¥µ¥¤¥º¤Î»ØÄê¤Ë¼ºÇÔ¤·¤Þ¤¹¸½ºß¤ÎÀßÄê¤Ç¤ÏÈó INTEGER ·¿¤¬¥Ý¥¤¥ó¥¿¤òÊÝ»ý¤Ç¤­¤Þ¤¹¥Þ¥¯¥í `%s' ¤Ø¤Î°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó´ðÄì¤ä¥á¥ó¥Ð½é´ü²½»Ò¥ê¥¹¥È¤¬ ':' ¤Î¸å¤Ë³¤¤¤Æ¤¤¤Þ¤»¤óËÜÂΤ¬¤Ê¤¯¡¢class, struct °¿¤¤¤Ï union Àë¸À¤ò¶èÀÚ¤ë ';' ¤â¤¢¤ê¤Þ¤»¤ó-fconstant-string-class ¤Ë°ú¿ô¤È¤·¤Æ»ØÄꤵ¤ì¤¿¥¯¥é¥¹¤¬¤¢¤ê¤Þ¤»¤ó`%%[' ¥Õ¥©¡¼¥Þ¥Ã¥È¤òÊĤ¸¤ë `]' ¤¬¤¢¤ê¤Þ¤»¤ócmd_strings ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¥â¡¼¥É `%s' ¤ËÂФ¹¤ë¥Ç¡¼¥¿·¿¤¬¤¢¤ê¤Þ¤»¤óÀâÌÀ¤Ï¤Þ¤À¤¢¤ê¤Þ¤»¤óÆþÎÏ¥Õ¥¡¥¤¥ë¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó¹â°Ì¥ì¥¸¥¹¥¿¤ò pop ¤¹¤ë°Ù¤Ë»ÈÍѤǤ­¤ëÄã°Ì¥ì¥¸¥¹¥¿¤¬¤¢¤ê¤Þ¤»¤ó¥Þ¥¯¥í̾¤¬ #%s ¥Ç¥£¥ì¥¯¥Æ¥£¥ÖÃæ¤ËÍ¿¤¨¤é¤ì¤Æ¤¤¤Þ¤»¤ó¥Õ¥¡¥¤¥ëËöÈø¤Ë²þ¹Ô¤¬¤¢¤ê¤Þ¤»¤ó`%s' ¤ÎÁ°ÊýÀë¸À¤¬¤¢¤ê¤Þ¤»¤ó`%s' ¤ÎÁ°Êý¥×¥í¥È¥¿¥¤¥×¤¬¤¢¤ê¤Þ¤»¤ó¥×¥í¥È¥¿¥¤¥×¤¬¤Ê¤¯¡¢²¾°ú¿ô¤Î¥¢¥É¥ì¥¹¤¬»È¤ï¤ì¤Æ¤¤¤ë -- inline ¤Ë¤Ç¤­¤Þ¤»¤óstruct ¤ä union ¤ÎºÇ¸å¤Ë¥»¥ß¥³¥í¥ó¤¬¤¢¤ê¤Þ¤»¤ó`%s' ¤Ø¤Î¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤Ë´ðÄ쥯¥é¥¹¤¬Àë¸À¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¥·¥ó¥Ü¥ë¥Æ¡¼¥Ö¥ë¤¬¸«¤Ä¤«¤ê¤Þ¤»¤óÈó ANSI ɸ½à¤Î¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹¡¢`\%c'Èó ISO ɸ½à¤Î¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹, '\%c'Í×ÁǤΤʤ¤ÇÛÎó¤ËÂФ¹¤ë¡¢¶õ¤Ç¤Ï¤Ê¤¤½é´ü²½»Ò¤Ç¤¹%s ¤Ëº¸ÊÕÃͤǤϤʤ¤ÃÍÈó¥á¥ó¥Ð `%s' ¤ò `mutable' ¤È¤ÏÀë¸À¤Ç¤­¤Þ¤»¤óÈ󥪥֥¸¥§¥¯¥È¥á¥ó¥Ð `%s' ¤ò `mutable' ¤È¤ÏÀë¸À¤Ç¤­¤Þ¤»¤óÈó¥×¥í¥È¥¿¥¤¥×ÄêµÁ¤¬¤³¤³¤Ë¤¢¤ê¤Þ¤¹`%s' ¤Ï static ¤Î¸å¤ÇÈó static Àë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹ÈóÀÅŪ¥á¥½¥Ã¥É '%s' ¤¬ÀÅŪ¥á¥½¥Ã¥É¤ò¥ª¡¼¥Ð¡¼¥é¥¤¥É¤·¤Æ¤¤¤Þ¤¹¼«ÌÀ¤Ç¤Ê¤¤¥é¥Ù¥ë¤Î¤Ä¤¤¤¿½é´ü²½»Ò¤Ç¤¹½é´ü²½»ÒÆâ¤ËÈóÄê¿ô¤ÎÇÛÎ󥤥ó¥Ç¥Ã¥¯¥¹¤¬¤¢¤ê¤Þ¤¹static ¥Õ¥£¡¼¥ë¥É `%s' ¤Ç¤Ï¤¢¤ê¤Þ¤»¤óÀµ¾ï¤Ê Java .class ¥Õ¥¡¥¤¥ë¤Ç¤Ï¤¢¤ê¤Þ¤»¤óÉÔ½½Ê¬¤Ê·¿¾ðÊ󸫤Ĥ«¤ê¤Þ¤»¤ó + Á´¤¯¥Õ¥¡¥¤¥ë¤¬¤Ê¤¤?!null ʸ»ú¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿¥ê¥Æ¥é¥ëÃæ¤Ç null ʸ»ú¤¬³ÎÊݤµ¤ì¤Þ¤·¤¿¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó¤¬ null ¤Ç¤¹²¾°ú¿ô¤Î¿ô¤¬¥×¥í¥È¥¿¥¤¥×¤È°ìÃפ·¤Þ¤»¤óÌ¿ÎáÏ¢º¿Ãæ¤Î bb ¤Î¿ô (%d) ¤¬ n_basic_blocks (%d) ¤È°ã¤¤¤Þ¤¹¿ôÃÍÄê¿ô¤¬´ð¿ô¤òͤ¨¤¿¥¢¥é¥Ó¥¢¿ô»ú¤ò´Þ¤ó¤Ç¤¤¤Þ¤¹¥ª¥Ö¥¸¥§¥¯¥È¤¬ `%s' ¥×¥í¥È¥³¥ë¤ËŬ¹ç¤·¤Þ¤»¤ó¥á¥ó¥Ð¤Ø¤Î¥Ý¥¤¥ó¥¿¹½ÃۤλÈÍѤǥª¥Ö¥¸¥§¥¯¥È¤ò·ç¤¤¤Æ¤¤¤Þ¤¹`:' ¤ò¤Ä¤±¤ë¥á¥ó¥Ð»ØÌ¾½é´ü²½»Ò¤ÏÇѤì¤Þ¤·¤¿`=' ¤Î¤Ê¤¤¥á¥ó¥Ð»ØÌ¾½é´ü²½»Ò¤ÏÇѤì¤Þ¤·¤¿8 ¿Ê¿ôʸ»úÄê¿ô¤¬ 1 ¥Ð¥¤¥È¤Ë¼ý¤Þ¤ê¤Þ¤»¤ó8 ¿Ê¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹¤¬Èϰϳ°¤Ç¤¹¥ª¥Õ¥»¥Ã¥È¤¬Äê¿ôʸ»úÎó¤Î¶­³¦¤Î³°¤Ë¤¢¤ê¤Þ¤¹¸Å¤¤À¸¤Î¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë%d ¸Ä¤Î°ú¿ô¤·¤«¥Þ¥¯¥í `%s' ¤ËÅϤ·¤Æ¤¤¤Þ¤»¤ó¥Þ¥¯¥í `%s' ¤Ø¤Î°ú¿ô¤¬°ì¸Ä¤·¤«¤¢¤ê¤Þ¤»¤ó¥³¥ó¥¹¥È¥é¥¯¥¿¤·¤«´ðÄì½é´ü²½»Ò¥ê¥¹¥È¤ò¤È¤ê¤Þ¤»¤ó`explicit' ¤Ë¤Ç¤­¤ë¤Î¤Ï¡¢¥³¥ó¥¹¥È¥é¥¯¥¿¤À¤±¤Ç¤¹¸½ºß¤ÎÀßÄê¤Ç¤Ï weak alias ¤·¤«¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤óopen %s`asm' ¤Î¥ª¥Ú¥é¥ó¥ÉÀ©Ìó¤¬ÂåÂØÈÖ¹æ¤È¤Ï°Û¤Ê¤ê¤Þ¤¹¥ª¥Ú¥é¥ó¥É¤Ï const_double ¤Ç¤¹¥ª¥Ú¥é¥ó¥É¤Ï r0 ¤Ç¤¹±é»»¿ô¤¬ %-letter ¤Î¸å¤Ë¤¢¤ê¤Þ¤»¤ó±é»»¿ô¤¬Èϰϳ°¤Ç¤¹±é»»»ÒÈֹ椬¥Õ¥©¡¼¥Þ¥Ã¥È¤ÎÈϰϳ°¤Ç¤¹±é»»»ÒÈֹ椬°ú¿ô¤ò¼è¤é¤Ê¤¤¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç»ØÄꤵ¤ì¤Þ¤·¤¿±é»»»ÒÈֹ椬ÂåÆþ¤ÎÍÞÀ©¤È¶¦¤Ë»È¤ï¤ì¤Æ¤¤¤Þ¤¹`%s' ¤Ç¤Î±é»»¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤¤¤È»×¤ï¤ì¤Þ¤¹"defined" ±é»»»Ò¤Ï¼±Ê̻ҤòÍ׵ᤷ¤Þ¤¹ºÇŬ²½¥ì¥Ù¥ë¤ò¸µ¤ËÌᤷ¤Þ¤·¤¿ºÇŬ²½¤ò̵¸ú¤Ë¤¹¤ëºÇŬ²½¤òÍ­¸ú¤Ë¤¹¤ëÍ­¸ú¥ª¥×¥·¥ç¥ó: ÅϤµ¤ì¤¿¥ª¥×¥·¥ç¥ó: À°¿ô 0 ¤È¥Ý¥¤¥ó¥¿¤È¤Î½ç½øÈæ³Ó¤Ç¤¹½ÐÎÏÀ©Ìó `%c' (operand %d ÍÑ) ¤¬³«»ÏÉôʬ¤Ë¤¢¤ê¤Þ¤»¤ó½ÐÎÏÈÖ¹æ %d ¤ÏľÀÜ¥¢¥É¥ì¥¹»ØÄê¤Ç¤­¤Þ¤»¤ó½ÐÎÏ¥ª¥Ú¥é¥ó¥ÉÀ©Ìó¤Ë `=' ¤¬·ç¤±¤Æ¤¤¤Þ¤¹½ÐÎÏ¥ª¥Ú¥é¥ó¥É¤¬ `asm' Æâ¤ÇÄê¿ô¤Ç¤¹output_operand: %sÇÛÎó¤Î¼¡¸µ¤¬¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤Þ¤·¤¿Äê¿ô¼°¤¬¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤Þ¤·¤¿ÎóµóÃͤ¬¥ª¡¼¥Ð¡¼¥Õ¥í¡¼°ÅÌÛ¤ÎÄê¿ôÊÑ´¹¤Ç¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤Þ¤·¤¿À°¿ô¤Ø¤ÎÀÚ¤êµÍ¤á¤Ç¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤¬µ¯¤³¤ê¤Þ¤·¤¿Éä¹ç̵¤·À°¿ô¤Ø¤ÎÀÚ¤êµÍ¤á¤Ç¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤¬µ¯¤³¤ê¤Þ¤·¤¿`%s' ÍѤνÐÎϰú¿ô¥ê¥¹¥È¤¬¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤Þ¤·¤¿packed °À­¤ÏÉÔ¸úΨ¤Ê¥¢¥é¥¤¥ó¥á¥ó¥È¤ò°ú¤­µ¯¤³¤·¤Þ¤¹packed °À­¤Ï `%s' ¤ËÂФ·¤ÆÉÔ¸úΨ¤Ê¥¢¥é¥¤¥ó¥á¥ó¥È¤ò°ú¤­µ¯¤³¤·¤Þ¤¹packed °À­¤ÏɬÍפ¢¤ê¤Þ¤»¤ópacked °À­¤Ï `%s' ¤Ë¤ÏɬÍפ¢¤ê¤Þ¤»¤ó¥¢¥é¥¤¥ó¥á¥ó¥È¶­³¦¤Î¥µ¥¤¥º¤Ë¹½Â¤ÂΤò¥Ñ¥Ç¥£¥ó¥°¤·¤Þ¤¹`%s' ¤ò¥¢¥é¥¤¥ó¤¹¤ë¤¿¤á¤Ë¹½Â¤ÂΤò¥Ñ¥Ç¥£¥ó¥°¤·¤Þ¤¹²¾°ú¿ô `%s' ¤¬ void ¤ÈÀë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹²¾°ú¿ô `%s' ¤ÏÉÔ´°Á´·¿¤Ç¤¹²¾°ú¿ô `%s' ¾¯¤·Á°Êý¤ÇÀë¸À¤µ¤ì¤Þ¤·¤¿²¾°ú¿ô `%s' ¤¬½é´ü²½¤µ¤ì¤Þ¤·¤¿²¾°ú¿ô `%s' ¤ÏÉÔ´°Á´·¿¤ò»Ø¤·¤Æ¤¤¤Þ¤¹²¾°ú¿ô¤¬ÉÔ´°Á´·¿¤Ç¤¹²¾°ú¿ô̾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹²¾°ú¿ô¥ê¥¹¥È¤«¤é¤Î²¾°ú¿ô̾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹²¾°ú¿ô¤¬¾Êά¤µ¤ì¤Þ¤·¤¿#define Ãæ¤Î²¾°ú¿ô̾¤¬¿ô»ú¤Ç»Ï¤Þ¤Ã¤Æ¤¤¤Þ¤¹´Ø¿ôÀë¸ÀÃæ¤Ë¡Ê·¿¤Î̵¤¤¡Ë²¾°ú¿ô̾¤¬¤¢¤ê¤Þ¤¹²¾°ú¿ô¤¬ÉÔ´°Á´·¿¤ò»Ø¤·¤Æ¤¤¤Þ¤¹¸Æ¤Ð¤ì¤¿´Ø¿ô¤Î²¾°ú¿ô¤Î·¿¤¬ÉÔ´°Á´¤Ç¤¹²¾°ú¿ô¤Î·¿¤¬¡¢²¾°ú¿ô¥ê¥¹¥È¤È¤ÏÊ̤ΤȤ³¤í¤«¤é¤âÍ¿¤¨¤é¤ì¤Æ¤¤¤Þ¤¹¹½Ê¸²òÀÏ¥¨¥é¡¼ÊݸºÑ¤ß´Ø¿ô¥Æ¥­¥¹¥È¤ÎËöÈø¤Ç¹½Ê¸²òÀÏ¥¨¥é¡¼¥á¥½¥Ã¥É»ÅÍÍÆâ¤Ç¤Î¹½Ê¸²òÀÏ¥¨¥é¡¼¹½Ê¸²òÀÏ¥¨¥é¡¼ -- ¤µ¤é¤Ë²¾ÁÛ¥á¥â¥ê¤òĶ²á¤·¤Þ¤·¤¿¹½Ê¸²òÀϴ郎Ì»Ҥˤʤ俤褦¤Ç¤¹: ¤É¤³¤«¤Ç '{' ¤ò˺¤ì¤Æ¤¤¤ë¤Î¤Ç¤Ï¡©¹½Ê¸²òÀÏ´ï¤Î¥¹¥¿¥Ã¥¯¤¬°î¤ì¤Þ¤·¤¿°ú¿ô %d ¸Ä¤Î `%s' ¤òÅϤ·¤Þ¤¹°ú¿ô %d ¸Ä¤Î´Ø¿ô¥Ý¥¤¥ó¥¿¤òÅϤ·¤Þ¤¹"%s" ¤È "%s" ¤òŽÉÕ¤±¤Þ¤·¤¿¤¬Àµ¾ï¤Ê¥×¥ê¥×¥í¥»¥Ã¥µ¥È¡¼¥¯¥ó¤È¤Ê¤ê¤Þ¤»¤ópipe¥Ç¡¼¥¿¹àÌܤò¤½¤ì¤é¼«¿È¤Î¥»¥¯¥·¥ç¥ó¤ËÇÛÃÖ¤¹¤ë³Æ¡¹¤Î´Ø¿ô¤ò¤½¤ì¼«¿È¤Î¥»¥¯¥·¥ç¥ó¤ËÇÛÃÖ¤¹¤ë`void *' ·¿¤Î¥Ý¥¤¥ó¥¿¤¬·×»»¤Ç»È¤ï¤ì¤Þ¤·¤¿`void *' ·¿¤Î¥Ý¥¤¥ó¥¿¤Îº¹¤òµá¤á¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹%s ¤Ç¥Ý¥¤¥ó¥¿¤Î¼¨¤¹ÂоݤÎÉ乿¤Î̵ͭ¤¬°Û¤Ê¤ê¤Þ¤¹´Ø¿ô¥Ý¥¤¥ó¥¿¤¬·×»»¤Ç»È¤ï¤ì¤Þ¤·¤¿´Ø¿ô¥Ý¥¤¥ó¥¿¤Îº¹¤òµá¤á¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹¥á¥ó¥Ð´Ø¿ô¤Ø¤Î¥Ý¥¤¥ó¥¿¤¬¸Æ¤Ð¤ì¤Þ¤·¤¿¤¬¡¢¥¯¥é¥¹¥¹¥³¡¼¥×Æâ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¾ò·ï¼°¤Ç¤Î¥Ý¥¤¥ó¥¿¤Î·¿¤¬Å¬¹ç¤·¤Þ¤»¤óÊ£ÁÇ¿ô·¿¤¬¤¢¤ë¤Ù¤­²Õ½ê¤Ç¡¢¥Ý¥¤¥ó¥¿Ãͤ¬»È¤ï¤ì¤Þ¤·¤¿ÉâÆ°¾®¿ôÅÀ¿ô¤¬¤¢¤ë¤Ù¤­²Õ½ê¤Ç¡¢¥Ý¥¤¥ó¥¿Ãͤ¬»È¤ï¤ì¤Þ¤·¤¿¾ò·ï¼°¤Ç¥Ý¥¤¥ó¥¿·¿¤ÈÀ°¿ô·¿¤¬Å¬¹ç¤·¤Þ¤»¤ócase ¤ÎÃͤȤ·¤Æ¤Î¥Ý¥¤¥ó¥¿¤Ïµö¤µ¤ì¤Æ¤¤¤Þ¤»¤ó´û¸¤Î¥Þ¥¯¥í "%s' ¤ò±øÀ÷¤·¤Þ¤¹½ªÃ¼¤Î¤Ê¤¤Ê¸»úÎó¥ê¥Æ¥é¥ë¤Î¿äÄ곫»Ï°ÌÃÖ¤ª¤½¤é¤¯ ')' ¤ò˺¤ì¤Æ¤¤¤Þ¤¹²ÄǽÀ­¤Î¤¢¤ë¥»¥ì¥¯¥¿¤¬¥á¥½¥Ã¥É `%s' ¤È¶¥¹ç¤·¤Þ¤¹ÀºÅÙprintf ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç¤ÎÀºÅÙ½Ò¸ì¤Ï¼±Ê̻ҤǤʤ±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó½Ò¸ì¤Î²ò¤¬¶õ¤Ç¤¹Á°Êý¤Ç¤Î `%s' ¤ÎÀë¸ÀÁ°Êý¤Î `%s' ¤Î³°ÉôÀë¸ÀÁ°Êý¤Ç¤Î `%s' ¤Î°ÅÌÛŪ¤ÊÀë¸ÀÁ°¤Ë¤³¤³¤Ç»È¤ï¤ì¤Þ¤·¤¿Í¥À褹¤ë²¾°ú¿ô¤Î¥µ¥¤¥º¤Ï `%s' ¼¡Âè¤Ç¤¹¥×¥í¥Õ¥¡¥¤¥ê¥ó¥°¤Ï medlow °Ê³°¤Î¥³¡¼¥É¥â¥Ç¥ë¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó¥×¥í¥Õ¥¡¥¤¥ë¤Ï¥Õ¥ì¡¼¥à¥Ý¥¤¥ó¥¿¤Ê¤·¤Ç¤Ïưºî¤·¤Þ¤»¤ó-mg ¤Ç¤Î¥×¥í¥Õ¥¡¥¤¥ë¤ÏÄ󶡤µ¤ì¤Þ¤»¤ó + ¥×¥í¥°¥é¥à: %s + ³Ê¾å¤²¤µ¤ì¤¿²¾°ú¿ô `%s' ¤Ï¥×¥í¥È¥¿¥¤¥×¤È°ìÃפ·¤Þ¤»¤ó`%s' ¤Î¥×¥í¥È¥¿¥¤¥×¤¬¸å¤í¤Ë¤¢¤ê¤Þ¤¹`%s' ¤Î¥×¥í¥È¥¿¥¤¥×¤¬¸å¤í¤Ë¤¢¤ê¡¢°ú¿ô %d ¤¬°ìÃפ·¤Þ¤»¤ó`%s' ¤Î¥×¥í¥È¥¿¥¤¥×¤¬¸å¤í¤Ë¤¢¤ê¡¢°ú¿ô¤Î¸Ä¿ô¤¬°ìÃפ·¤Þ¤»¤ó¾®¤µ¤¹¤®¤ëÀ¸¤Î¥Ø¥Ã¥À¥Ð¥Ã¥Õ¥¡%ld ¥Ð¥¤¥ÈÆÉ¹þ¤ß¡£%ld (%s ¤«¤é)ÆÉ¹þ¤à¤Ï¤º¤Ç¤¹read %sclass %s ¤òÆÉ¹þ¤à¤Î¤Ï %s ¤«¤éÆó²óÌܤˤʤê¤Þ¤¹null ¥Ý¥¤¥ó¥¿¤òÆÉ¹þ¤ó¤Ç¤¤¤Þ¤¹ (°ú¿ô %d)ËÜÍè¤Î̾Á°¤¬Ä¹¤¹¤®¤Þ¤¹ - ÊÌ̾¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿¥¯¥í¥¹¥³¥ó¥Ñ¥¤¥ë»þ¤Î¼Â¿ôÃͥƥó¥×¥ì¡¼¥È²¾°ú¿ô`%s' ¤¬ºÆÀë¸À¤µ¤ì¤Þ¤·¤¿`enum %s' ¤ÎºÆÀë¸À`%s' ¤¬ºÆÄêµÁ¤µ¤ì¤Þ¤·¤¿stdout ¤Ø¤Î¥ê¥À¥¤¥ì¥¯¥È: %s`%s' ¤Î¾éĹ¤ÊºÆÀë¸À¤¬Æ±°ì¥¹¥³¡¼¥×Æâ¤Ë¤¢¤ê¤Þ¤¹»²¾È `%s' ¤ÏÛ£Ëæ¤Ç¤¹: interface `%s' ¤È interface `%s' ¤Ë¸½¤ì¤Þ¤·¤¿Èóº¸ÊÕÃͤؤλ²¾È¤¬ÊÖ¤µ¤ì¤Þ¤·¤¿¥ì¥¸¥¹¥¿Ì¾¤¬Èó register ÊÑ¿ô `%s' ¤ËÍ¿¤¨¤é¤ì¤Þ¤·¤¿¥ì¥¸¥¹¥¿Ì¾¤¬ `%s' ÍѤ˻ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó`%s' ¤Ë»ØÄꤵ¤ì¤¿ register ¤Ï¥Ç¡¼¥¿·¿¤Ë¤Õ¤µ¤ï¤·¤¯¤¢¤ê¤Þ¤»¤ó¥ì¥¸¥¹¥¿¤¬Æó¤Ä¤Î¥°¥í¡¼¥Ð¥ë¥ì¥¸¥¹¥¿ÊÑ¿ô¤È¤·¤Æ»È¤ï¤ì¤Þ¤·¤¿¥ì¥¸¥¹¥¿ÊÑ¿ô `%s' ¤¬Æþ¤ì»Ò´Ø¿ô¤ÎÃæ¤Ç»È¤ï¤ì¤Þ¤·¤¿¥¯¥é¥¹ `%s' ¤ÎºÆ¼ÂÁõ¤Ç¤¹spec %s ¤ò %s ¤Ë̾Á°¤òÊѹ¹ + ¥Õ¥©¡¼¥Þ¥Ã¥ÈÃæ¤Ç %s ¤ò·«¤êÊÖ¤·¤Æ¤¤¤Þ¤¹¹½Â¤ÂΤǤⶦÍÑÂΤǤâ¤Ê¤¤²¿¤«¤Ç¡¢¥á¥ó¥Ð `%s' ¤òÍ׵ᤵ¤ì¤Þ¤·¤¿Í׵ᤵ¤ì¤¿¥¢¥é¥¤¥ó¥á¥ó¥È¤¬Äê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤óÍ׵ᤵ¤ì¤¿¥¢¥é¥¤¥ó¥á¥ó¥È¤¬ 2 ¤Î¤Ù¤­¾è¤Ç¤Ï¤¢¤ê¤Þ¤»¤óÍ׵ᤵ¤ì¤¿¥¢¥é¥¤¥ó¥á¥ó¥È¤¬Â礭¤¹¤®¤Þ¤¹Í׵ᤵ¤ì¤¿ init_priority ¤ÏÀ°¿ô·¿¤ÎÄê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤óÍ׵ᤵ¤ì¤¿ init_priority ¤¬Èϰϳ°¤Ç¤¹Í׵ᤵ¤ì¤¿ init_priority ¤ÏÆâÉô¤Ç»ÈÍѤ¹¤ë¤¿¤á¤ËͽÌó¤µ¤ì¤Æ¤¤¤Þ¤¹`operator->()'¤Î·ë²Ì¤¬Èó¥Ý¥¤¥ó¥¿¤Î·ë²Ì¤ò¤â¤¿¤é¤·¤Þ¤¹ret Ì¿Îá¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤óreturnÌá¤êÃͤη¿¤ò¥Ç¥Õ¥©¥ë¥È¤Î `int' ¤È¤·¤Þ¤¹Ìá¤êÃͤη¿¤ò¥Ç¥Õ¥©¥ë¥È¤Î id ¤È¤·¤Þ¤¹`%s' ¤ÎÌá¤êÃͤη¿¤Ï¥Ç¥Õ¥©¥ë¥È¤Î id ¤È¤·¤Þ¤¹`main' ¤Î return ·¿¤Ï `int' ¤ËÊѤ¨¤Þ¤·¤¿Ìá¤êÃͤη¿¤¬ÉÔ´°Á´·¿¤Ç¤¹`%s' ¤ÎÌá¤êÃͤη¿¤¬ `int' ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó´Ø¿ô¤«¤é¤ÎÌá¤êÃͤ¬Ê£¿ô¤Î½é´ü²½¤ò¼õ¤±¼è¤ê¤Þ¤·¤¿¥³¥ó¥¹¥È¥é¥¯¥¿¤ËÂФ¹¤ëÌá¤êÃͤη¿»ØÄê¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿return ʸ¤¬Ãͤò»ý¤Á¤Þ¤¹¡£´Ø¿ôÀë¸À¤Ç¤ÏÌá¤ê·¿¤¬ void ¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹return ʸ¤¬Ãͤò»ý¤Á¤Þ¤»¤ó¡£´Ø¿ôÀë¸À¤Ç¤ÏÈó void ¤ÎÌá¤êÃͤò»ý¤Á¤Þ¤¹block_exit_expr ¤ÇÃͤò return ¤·¤Þ¤·¤¿¥³¥ó¥¹¥È¥é¥¯¥¿¤«¤éÃͤòÊÖ¤½¤¦¤È¤·¤Æ¤¤¤Þ¤¹¥Ç¥¹¥È¥é¥¯¥¿¤«¤éÃͤòÊÖ¤½¤¦¤È¤·¤Æ¤¤¤Þ¤¹°ì»þ¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î»²¾È¤òÊÖ¤½¤¦¤È¤·¤Æ¤¤¤Þ¤¹±¦ÀºÅÙstrfmon ¥Õ¥©¡¼¥Þ¥Ã¥È¤Î±¦ÀºÅÙ±¦¥·¥Õ¥È²ó¿ô >= ·¿¤ÎÉý¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹±¦¥·¥Õ¥È²ó¿ô¤¬Éé¤Î¿ô¤Ç¤¹VAX ÉâÆ°¾®¿ô¤Ç¤Ï´Ý¤á¥â¡¼¥É¤òÍøÍѤǤ­¤Þ¤»¤ó`__builtin_expect' ¤Ø¤ÎÂèÆó°ú¿ô¤ÏÄê¿ô¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó`%s' ¤ÎÂèÆó°ú¿ô¤Ï `char **' ¤È¤¹¤Ù¤­¤Ç¤¹`va_start' ¤ÎÆóÈÖÌܤÎÃͤ¬°ú¿ô¤ÎºÇ¸å¤Î̾Á°¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤»¤ósection °À­¤Ï¥í¡¼¥«¥ëÊÑ¿ô¤ËÂФ·¤Æ¤Ï»ØÄê¤Ç¤­¤Þ¤»¤ó¥»¥¯¥·¥ç¥ó°À­¤Ï `%s' ¤Ë¤Ï»È¤¨¤Þ¤»¤ó¥»¥¯¥·¥ç¥ó°À­¤Ï¤³¤Î¥¿¡¼¥²¥Ã¥È¤Ç¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó`%s' ¤Î¥»¥¯¥·¥ç¥ó¤ÏÁ°Êý¤Ç¤ËÀë¸À¤µ¤ì¤¿¤â¤Î¤È¾×ÆÍ¤·¤Þ¤¹¥»¥¯¥·¥ç¥ó¥Ý¥¤¥ó¥¿¤ò·ç¤¤¤Æ¤¤¤Þ¤¹¥»¥ì¥¯¥¿¤Ï¨ÃͤǤʤ±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó%s Àë¸À¤Î¸å¤í¤Î¥»¥ß¥³¥í¥ó¤ò·ç¤¤¤Æ¤¤¤Þ¤¹ÁȤ߹þ¤ß´Ø¿ô `%s' ¤òʤ¤¤±£¤·¤Þ¤¹¥é¥¤¥Ö¥é¥ê´Ø¿ô `%s' ¤òʤ¤¤±£¤·¤Þ¤¹shared ¤È mdll ¤È¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó¥·¥Õ¥È²ó¿ô >= ·¿¤ÎÉý¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹¥·¥Õ¥È²ó¿ô¤¬Éé¤ÎÃͤǤ¹short, Éä¹ç¤Ä¤­¤Þ¤¿¤ÏÉä¹ç¤Ê¤·¤Ï `%s' ¤Ë¤È¤Ã¤ÆÌµ¸ú¤Ç¤¹Éä¹çÉÕ¤­¤ÈÉä¹ç̵¤·¤¬ `%s' ¤ËÂФ·¤Æ°ì½ï¤ËÍ¿¤¨¤é¤ì¤Æ¤¤¤Þ¤¹¾ò·ï¼°¤ËÉä¹çÉÕ¤­·¿¤ÈÉä¹ç̵¤··¿¤È¤¬¤¢¤ê¤Þ¤¹·¿»ØÄê»Ò¤Î sigof ¤Ç¤¹ÇÛÎó new ¤Ç¤Î¥µ¥¤¥º¤Ï´°Á´¤Ê·¿¤ò»ý¤¿¤Í¤Ð¤Ê¤ê¤Þ¤»¤ó`%s' ¤Î¥µ¥¤¥º¤¬ %d ¥Ð¥¤¥È¤Ç¤¹`%s' ¤Î¥µ¥¤¥º¤¬ %d ¥Ð¥¤¥È¤è¤êÂ礭¤¯¤Ê¤Ã¤Æ¤¤¤Þ¤¹ÇÛÎó `%s' ¤ÎÂ礭¤µ¤ÏÈóÀ°¿ô·¿ÇÛÎó `%s' ¤ÎÂ礭¤µ¤¬Éé¤Ç¤¹ÇÛÎó `%s' ¤ÎÂ礭¤µ¤¬Â礭¤¹¤®¤Þ¤¹`%s' ¤ÎÌá¤êÃͤΥµ¥¤¥º¤¬ %u ¥Ð¥¤¥È¤Ç¤¹`%s' ¤ÎÌá¤êÃͤΥµ¥¤¥º¤¬ %d ¥Ð¥¤¥È¤è¤ê¤âÂ礭¤¯¤Ê¤ê¤Þ¤¹ÊÑ¿ô `%s' ¤Î¥µ¥¤¥º¤¬Â礭¤¹¤®¤Þ¤¹sizeof ¤¬¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤ËŬÍѤµ¤ì¤Þ¤·¤¿sizeof ¤¬´Ø¿ô·¿¤ËŬÍѤµ¤ì¤Þ¤·¤¿sizeof ¤¬ void ·¿¤ËŬÍѤµ¤ì¤Þ¤·¤¿sizeof ¤¬ÉÔ´°Á´¤Ê·¿¤ËŬÍѤµ¤ì¤Þ¤·¤¿»Äǰ¤Ê¤¬¤é¸«¼ÂÁõ¤Ç¤¹: »Äǰ¡¢¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó: #pragma align NAME=SIZE»Äǰ¡¢¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó: #pragma noalign NAMEspec ¥Õ¥¡¥¤¥ë¤Ë¥ê¥ó¥¯¤Ë´Ø¤¹¤ë spec ¤¬¤¢¤ê¤Þ¤»¤óspec ¤Ï '%s' ¤Ç¤¹ + + specs ¤Î %ld ʸ»úÌܰʹߤΠ%%include ¤Î½ñ¼°¤¬ÊѤǤ¹specs ¤Î %ld ʸ»úÌܰʹߤΠ%%rename ¤Î½ñ¼°¤¬ÊѤǤ¹spec ¥Õ¥¡¥¤¥ë %s ¤Ë̾Á°¤òÊѹ¹¤¹¤ë spec ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿%ld ʸ»ú¤Î¸å¤Ë¤ª¤«¤·¤Ê spec ¥Õ¥¡¥¤¥ëspec ¥Õ¥¡¥¤¥ëÃæ¤Î %ld ʸ»ú¤Î¸å¤ËÉÔÌÀ¤Ê %% ¥³¥Þ¥ó¥É¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë `%%' ¤Îº¯Àפ餷¤­¤â¤Î¤¬¤¢¤ê¤Þ¤¹¥¹¥¿¥Ã¥¯À©¸Â¼°¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó¥¹¥¿¥Ã¥¯À©¸Â¤Ï¤³¤Î¥¿¡¼¥²¥Ã¥È¤Ç¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¥¹¥¿¥Ã¥¯¥¢¥ó¥À¡¼¥Õ¥í¡¼ - dup* Áàºîstatic `%s' ¤ò mutable ¤È¤·¤ÆÀë¸À¤Ç¤­¤Þ¤»¤ó`id' ·¿¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ËÂΤ¹¤ëÀÅŪ¥¢¥¯¥»¥¹¤Ç¤¹`%s' ¤ÏÈó static ¤Î¸å¤Ç static Àë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹ÀÅŪÊÑ¿ô `%s' ¤Ï dllimport ¤È¥Þ¡¼¥¯¤µ¤ì¤Æ¤¤¤Þ¤¹´Ø¿ô `%s' ¤ËÂФ¹¤ëµ­²±¥¯¥é¥¹ `auto' ¤Ï̵¸ú¤Ç¤¹Âç°è¥¹¥³¡¼¥×³°¤Î´Ø¿ô `%s' ¤ËÂФ¹¤ëµ­²±¥¯¥é¥¹ `inline' ¤Ï̵¸ú¤Ç¤¹´Ø¿ô `%s' ¤ËÂФ¹¤ëµ­²±¥¯¥é¥¹ `register' ¤Ï̵¸ú¤Ç¤¹Âç°è¥¹¥³¡¼¥×³°¤Î´Ø¿ô `%s' ¤ËÂФ¹¤ëµ­²±¥¯¥é¥¹ `static' ¤Ï̵¸ú¤Ç¤¹%s ¤ËÂФ¹¤ëµ­²±¥¯¥é¥¹»ØÄê»Ò `%s'²¾°ú¿ô `%s' ¤Ç»ØÄꤵ¤ì¤¿µ­²±¥¯¥é¥¹¹½Â¤ÂÎ¥Õ¥£¡¼¥ë¥É `%s' ¤Ë»ØÄꤵ¤ì¤¿µ­²±¥¯¥é¥¹·¿Ì¾¤ËÂФ·¤Æ»ØÄꤵ¤ì¤¿µ­²±¥¯¥é¥¹µ­²±¥¯¥é¥¹»ØÄê»Ò `%s' ¤Ï struct ¤ä class ¤Î¸å¤Ë¤Ï»È¤¨¤Þ¤»¤ófriend ´Ø¿ôÀë¸ÀÆâ¤Îµ­²±¥¯¥é¥¹»ØÄê»Ò¤Ï̵¸ú¤Ç¤¹²¾°ú¿ôÀë¸À¤ÎÃæ¤Îµ­²±¥¯¥é¥¹»ØÄê»Ò¤Ï̵¸ú¤Ç¤¹`%s' ¤ÎÎΰ襵¥¤¥º¤¬°ìÄê¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó`%s' ¤ÎÎΰ襵¥¤¥º¤¬¤ï¤«¤ê¤Þ¤»¤ó¥×¥í¥°¥é¥à¤È¤·¤Æ°ï椷¤¿Ê¸»ú '%c'¥×¥í¥°¥é¥à¤È¤·¤Æ°ï椷¤¿Ê¸»ú '\%o'strftime ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ï°ú¿ô¤ò¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç¤­¤Þ¤»¤óʸ»úÎóĹ `%d' ¤Ï¡¢Ä¹¤µ `%d' (ISO C%d ¥³¥ó¥Ñ¥¤¥é¤Î¥µ¥Ý¡¼¥ÈÍ×·ï)¤è¤êÂ礭¤¯¤Ê¤Ã¤Æ¤¤¤Þ¤¹Ê¸»úÎ󥻥¯¥·¥ç¥ó¤ò·ç¤¤¤Æ¤¤¤Þ¤¹¹½Â¤ÂÎ¥¹¥«¥é¡¼¤¬É¬Íפʾì½ê¤Ë¹½Â¤Âη¿¤ÎÃͤ¬»È¤ï¤ì¤Þ¤·¤¿¹½Â¤ÂÎź»ú¤¬ `char' ·¿¤ò¤â¤Á¤Þ¤¹ÇÛÎ󻲾ȤǤÎź»ú¤ò·ç¤¤¤Æ¤¤¤Þ¤¹Åº»ú¤ò¤Ä¤±¤é¤ì¤¿Ãͤ¬ÇÛÎó¤Ç¤â¥Ý¥¤¥ó¥¿¤Ç¤â¤¢¤ê¤Þ¤»¤ó`register' ¤ÈÀë¸À¤µ¤ì¤¿ÇÛÎó¤Ëź»ú¤ò¤Ä¤±¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹¥¤¥ó¥Ç¥ó¥È¤µ¤ì¤¿ # ¤¬¤¢¤ë¸Å¤¤ C ¤«¤é¤Ï #%s ¤ò±£¤¹¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹¸Å¤¤ C ¤Ç¤Ï #elif ¤ò»È¤ï¤Ê¤¤Êý¤¬¤¤¤¤¤Ç¤¹|| ¤È¶¦¤Ë»È¤ï¤ì¤ë && ¤Î¼þ¤ê¤Ç¤Ï³ç¸Ì¤ò¤Ä¤±¤ë¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹& ±é»»»Ò¤Î¼þ¤ê¤Î + ¤ä - ¤Î¼þ¤ê¤Ë¤Ï³ç¸Ì¤ò¤Ä¤±¤ë¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹¥·¥Õ¥ÈÃæ¤Î + ¤ä - ¤Î¼þ¤ê¤Ç¤Ï³ç¸Ì¤ò¤Ä¤±¤ë¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹·×»»¤¬ ^ ±é»»»Ò¤Î¹à¤È¤Ê¤ë¾ì¹ç¤Ë¤Ï³ç¸Ì¤ò¤Ä¤±¤ë¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹·×»»¤¬ | ±é»»»Ò¤Î¹à¤È¤Ê¤ë¾ì¹ç¤Ë¤Ï³ç¸Ì¤ò¤Ä¤±¤ë¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹¿¿µ¶ÃͤȤ·¤Æ»È¤ï¤ì¤ëÂåÆþ¤Î¤Þ¤ï¤ê¤Ç¤Ï¡¢´Ý³ç¸Ì¤Î»ÈÍѤò¤ª´«¤á¤·¤Þ¤¹Èæ³Ó¤¬ & ±é»»»Ò¤Î¹à¤È¤Ê¤ë¾ì¹ç¤Ë¤Ï³ç¸Ì¤ò¤Ä¤±¤ë¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹·×»»¤¬ ^ ±é»»»Ò¤Î¹à¤È¤Ê¤ë¾ì¹ç¤Ë¤Ï³ç¸Ì¤ò¤Ä¤±¤ë¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹Èæ³Ó¤¬ | ±é»»»Ò¤Î¹à¤È¤Ê¤ë¾ì¹ç¤Ë¤Ï³ç¸Ì¤ò¤Ä¤±¤ë¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹-mcpu=%s ¥¹¥¤¥Ã¥Á¤Ï -march= ¥¹¥¤¥Ã¥Á¤È¶¥¹ç¤·¤Þ¤¹switch ¤ÎÆâÍÆ¤¬À°¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤óʸˡ¥¨¥é¡¼'%s' ¥È¡¼¥¯¥ó¤Î½ê¤Çʸˡ¥¨¥é¡¼Ê¸Ë¡¥¨¥é¡¼: ÄÉ¿ï¤Ç¤­¤Þ¤»¤ó°ì»þ¥ª¥Ö¥¸¥§¥¯¥È¤Î¥¢¥É¥ì¥¹¤ò¼è¤í¤¦¤È¤·¤Æ¤¤¤Þ¤¹¥¿¡¼¥²¥Ã¥È CPU ¤Ï APCS-26 ¤ò¥µ¥Ý¡¼¥È¤·¤Þ¤»¤ó¥¿¡¼¥²¥Ã¥È CPU ¤Ï APCS-32 ¤ò¥µ¥Ý¡¼¥È¤·¤Þ¤»¤ó¥¿¡¼¥²¥Ã¥È CPU ¤Ï interworking ¤ò¥µ¥Ý¡¼¥È¤·¤Þ¤»¤ó¥Æ¥ó¥×¥ì¡¼¥È·¿²¾°ú¿ô¤Ë¤Ï `class' ¤ä `typename' ͽÌó¸ì¤ò»È¤ï¤Í¤Ð¤Ê¤ê¤Þ¤»¤óprintf ¤Î ` ' ¥Õ¥é¥°strfmon ¤Î `!' ¥Õ¥é¥°printf ¤Î `#' ¥Õ¥é¥°strftime ¤Î `#' ¥Õ¥é¥°printf ¤Î `'' ¥Õ¥é¥°scanf ¤Î `'' ¥Õ¥é¥°strfmon ¤Î `(' ¥Õ¥é¥°printf ¤Î `+' ¥Õ¥é¥°strfmon ¤Î `+' ¥Õ¥é¥°printf ¤Î `-' ¥Õ¥é¥°strfmon ¤Î `-' ¥Õ¥é¥°strftime ¤Î `-' ¥Õ¥é¥°printf ¤Î `0' ¥Õ¥é¥°strftime ¤Î `^' ¥Õ¥é¥°strftime ¤Î `E' ½¤¾þ»Òprintf ¤Î `I' ¥Õ¥é¥°scanf ¤Î `I' ¥Õ¥é¥°the `O' ½¤¾þ»Òstrftime ¤Î `O' ½¤¾þ»Òstrfmon ¤Î `^' ¥Õ¥é¥°strftime ¤Î `^' ¥Õ¥é¥°strftime ¤Î `_' ¥Õ¥é¥°scanf ¤Î `a' ¥Õ¥é¥°¤½¤Î¾ò·ï¤Ï¤³¤³¤«¤é»Ï¤Þ¤ê¤Þ¤¹m210 ¤Ï¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¥µ¥Ý¡¼¥È¤ò¹Ô¤Ê¤¨¤Þ¤»¤ó'\%c' ¤Î°ÕÌ£¤Ï -traditional ¤ò¤Ä¤±¤¿¾ì¹ç¤È°Û¤Ê¤ê¤Þ¤¹'\a' ¤Î°ÕÌ£¤Ï -traditional ¤ò¤Ä¤±¤¿¾ì¹ç¤È°Û¤Ê¤ê¤Þ¤¹-traditional ¤Ç¤Ï `\a' ¤Î°ÕÌ£¤¬°Û¤Ê¤ê¤Þ¤¹`\x' ¤Î°ÕÌ£¤Ï -traditional ¤ò¤Ä¤±¤¿¾ì¹ç¤È°Û¤Ê¤ê¤Þ¤¹Í£°ì¤ÎÍ­¸ú¤ÊÁȹç¤ï¤»¤Ï `long double' ¤Ç¤¹`%s' ¤ÎÂè»°°ú¿ô¤Ï¤ª¤½¤é¤¯ `char **' ¤È¤¹¤Ù¤­¤Ç¤·¤ç¤¦¤³¤Î´Ø¿ô¤ÏÃͤòÊÖ¤·¤¿¤êÊÖ¤µ¤Ê¤«¤Ã¤¿¤ê¤¹¤ë¤Ç¤·¤ç¤¦Á°Êý¤Ç¤Î `%s' ¤ÎÀë¸À¤³¤ì¤¬ºÇ½é¤Î default ¥é¥Ù¥ë¤Ç¤¹¤³¤ì¤¬¤½¤ÎÃͤȽÅÊ£¤·¤¿ºÇ½é¤Î¹àÌܤǤ¹¤³¤³¤¬°ÊÁ°¤ÎÀë¸À¤¬¤¢¤ë°ÌÃ֤Ǥ¹¤³¤Î¥¿¡¼¥²¥Ã¥È¥Þ¥·¥ó¤ÏÃÙ±äʬ´ô¤ò»ý¤Ã¤Æ¤¤¤Þ¤»¤ó3 ¤Ä¤Î 'l' ÀÜÈø¼­¤¬À°¿ôÄê¿ô¤Ë¤Ä¤¤¤Æ¤¤¤Þ¤¹%s ¤Ç¤Î»þ´Ö: %ld.%06ld (%ld%%) + ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ø¤Î°ú¿ô¤¬¾¯¤Ê¤¹¤®¤Þ¤¹´Ø¿ô¤Ø¤Î°ú¿ô¤¬¾¯¤Ê¤¹¤®¤Þ¤¹´Ø¿ô `%s' ¤Ø¤Î°ú¿ô¤¬¾¯¤Ê¤¹¤®¤Þ¤¹À°¿ôÄê¿ô¤Î¥µ¥Õ¥£¥Ã¥¯¥¹ 'l' ¤¬Â¿¤¹¤®¤Þ¤¹°ú¿ô¤Î¿ô (%d) ¤¬¥Þ¥¯¥í `%s' ¤ËÂФ·¤ÆÂ¿¤¹¤®¤Þ¤¹`asm' Ãæ¤ÎÂåÂØ¥­¡¼¥ï¡¼¥É¤¬Â¿¤¹¤®¤Þ¤¹¥Õ¥©¡¼¥Þ¥Ã¥È¤Ø¤Î°ú¿ô¤¬Â¿¤¹¤®¤Þ¤¹´Ø¿ô¤ËÂФ¹¤ë°ú¿ô¤¬Â¿¤¹¤®¤Þ¤¹´Ø¿ô `%s' ¤ËÂФ¹¤ë°ú¿ô¤¬Â¿¤¹¤®¤Þ¤¹`va_start' ¤ËÂФ¹¤ë°ú¿ô¤¬Â¿¤¹¤®¤Þ¤¹É¬ÍפȤµ¤ì¤ë½é´ü²½´Ø¿ô¤Î¿ô¤¬Â¿¤¹¤®¤Þ¤¹ÆþÎÏ¥Õ¥¡¥¤¥ë¤¬Â¿¤¹¤®¤Þ¤¹`%s' ¤Î¥È¥Ã¥×¥ì¥Ù¥ë¤ÎÀë¸À¤¬ `auto' ¤ò»ØÄꤷ¤Þ¤¹¸Å¤¤ C ¤Ç¤Ï¡¢¥¤¥ó¥Ç¥ó¥È¤µ¤ì¤¿ # ¤Î #%s ¤ò̵»ë¤·¤Þ¤¹¸Å¤¤ C ¤Ç¤Ï¼«Æ°Åª¤Ê½¸¹çÂΤνé´ü²½¤òµñÀ䤷¤Þ¤¹¸Å¤¤ C ¤Ï¶¦ÍÑÂΤνé´ü¤òµñÀ䤷¤Þ¤¹¸Å¤¤ C ¤Ç¤Ïʸ»úÎó·ë¹ç¤òµñÈݤ·¤Þ¤¹¸Å¤¤ C ¤Ç¤Ï 'f' ÀÜÈø¼­¤¬µñÈݤµ¤ì¤Þ¤¹¸Å¤¤ C ¤Ç¤Ï 'l' ÀÜÈø¼­¤¬µñÈݤµ¤ì¤Þ¤¹ÅÁÅýŪ¤Ê C ¤Ç¤Ï 'u' ÀÜÈø¼­¤¬µñÈݤµ¤ì¤Þ¤¹¸Å¤¤ C ¤Ç¤Ï `U' ÀÜÈø¼­¤¬µñÀ䤵¤ì¤Þ¤¹¸Å¤¤ C ¤Ç¤Ïñ¹à¥×¥é¥¹±é»»»Ò¤òµñÈݤ·¤Þ¤¹VAX ÉâÆ°¾®¿ô¤Ç¤Ï¥È¥é¥Ã¥×¥â¡¼¥É¤òÍøÍѤǤ­¤Þ¤»¤ó¥È¥é¥¤¥°¥é¥Õ ??%c ¤Ï %c ¤ËÊÑ´¹¤µ¤ì¤Þ¤·¤¿¥È¥é¥¤¥°¥é¥Õ ??%c ¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿¥í¡¼¥«¥ëÊÑ¿ô¤Î¿ô¤òºï¸º¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤2 ¤Ä¤Î 'u' ÀÜÈø¼­¤¬À°¿ôÄê¿ô¤Ë¤Ä¤¤¤Æ¤¤¤Þ¤¹`%s' ¤ÎÀë¸À¤ËÆó¤Ä°Ê¾å¤Î¥Ç¡¼¥¿·¿¤¬»ØÄꤵ¤ì¤Þ¤·¤¿°ì¤Ä¤Î¶õ¤ÎÀë¸ÀÃæ¤Ë¡¢Æó¤Ä¤Î·¿¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤¹`%s' ¤ÎÀë¸À¤Ç·¿¤¬¥Ç¥Õ¥©¥ë¥È¤Î `int' ¤È¤µ¤ì¤Þ¤·¤¿¾ò·ï¼°¤Ç¤Î·¿¤ÎÁȹç¤ï¤»¤¬Å¬¹ç¤·¤Þ¤»¤ó·¿¤¬Á°Êý¤Î³°ÉôÀë¸À¤È°ìÃפ·¤Þ¤»¤ó·¿¤¬Á°Êý¤Î°ÅÌÛ¤ÎÀë¸À¤È°ìÃפ·¤Þ¤»¤ó`&' ¤ÎÁ°¤Ë·¿¤Î̾Á°¤¬¤¢¤ë¤Ù¤­¤Ç¤¹`*' ¤ÎÁ°¤Ë·¿¤Î̾Á°¤¬¤¢¤ë¤Ù¤­¤Ç¤¹`%s' ¤Î·¿¤ò¥Ç¥Õ¥©¥ë¥È¤Î `int' ¤È¤·¤Þ¤¹³°Éô `%s' ¤Î·¿¤Ï¥°¥í¡¼¥Ð¥ë¤Ç¤Ï¤¢¤ê¤Þ¤»¤óÀµ¼°¤Ê²¾°ú¿ô %d ¤Î·¿¤¬ÉÔ´°Á´¤Ç¤¹·¿½¤¾þ»Ò `%s' ¤Ï struct ¤ä class ¤Î¸å¤Ë¤Ï»È¤¨¤Þ¤»¤ó`%s' ¤Î·¿½¤¾þ»Ò¤¬Á°Êý¤ÎÀë¸À¤ÈÌ·½â¤·¤Þ¤¹´Ø¿ôÌá¤êÃͤη¿½¤¾þ»Ò¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿·¿¤ÎÂ礭¤µ¤ÏÌÀ¼¨Åª¤Ëɾ²Á¤µ¤ì¤ë¤â¤Î¤Ç¤Ï¤¢¤ê¤¨¤Þ¤»¤ó·¿»ØÄê»Ò `%s' ¤Ï struct ¤ä class ¤Î¸å¤Ë¤Ï»È¤¨¤Þ¤»¤ó·¿»ØÄê»Ò¤Ï²¾°ú¿ôÍѤ˾Êά¤µ¤ì¤Þ¤·¤¿¥Ù¥¯¥È¥ë·¿¤Î delete ¤Ç¤¹¤¬¡¢¥Ý¥¤¥ó¥¿¤Ç¤âÇÛÎ󷿤Ǥ⤢¤ê¤Þ¤»¤ótypedef `%s' ¤¬½é´ü²½¤µ¤ì¤Þ¤·¤¿typedef Àë¸À¤¬½é´üÀßÄê»Ò¤ò´Þ¤ó¤Ç¤¤¤Þ¤¹²¾°ú¿ôÀë¸À¤ÎÃæ¤Î typedef Àë¸À¤Ï̵¸ú¤Ç¤¹·¿¤ÏÁ´¤¯¸ß´¹¤¬¤¢¤ê¤Þ¤»¤ó¤³¤³¤Ç¤Ï¥á¥ó¥Ð´Ø¿ô¥Ý¥¤¥ó¥¿¸Æ¤Ó½Ð¤·¤¬¤Ç¤­¤Þ¤»¤ó¥Õ¥¡¥¤¥ë '%s' ¤ò mmap ¤Ç¤­¤Þ¤»¤óưŪ°Í¸´Ø·¸ '%s' ¤ò³«¤±¤Þ¤»¤ó¥Õ¥¡¥¤¥ë '%s' ¤ò open ¤Ç¤­¤Þ¤»¤ó¥Õ¥¡¥¤¥ë '%s' ¤ò stat ¤Ç¤­¤Þ¤»¤óñ¹à¤Î `&'Âбþ¤·¤Æ¤¤¤Ê¤¤ #endif̤ÄêµÁËô¤ÏÉÔÀµ¤Ê # ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç¤¹"%s" ¤ò undef ¤·¤Þ¤¹`%s' ¤ò undef ¤·¤Þ¤¹`defined' ¤ò undef ¤·¤Þ¤¹¶¦ÍÑÂζ¦ÍÑÂΤòÆ©²áŪ¤Ë¤Ç¤­¤Þ¤»¤ó¥¹¥«¥é¡¼¤¬É¬Íפʾì½ê¤Ë¶¦ÍÑÂη¿¤ÎÃͤ¬»È¤ï¤ì¤Þ¤·¤¿¥æ¥Ë¥Ð¡¼¥µ¥ëʸ»ú̾ `\U%08x' ¤Ï¼±Ê̻ҤÎÃæ¤Ç¤ÏÍ­¸ú¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¥æ¥Ë¥Ð¡¼¥µ¥ëʸ»ú̾ `\u%04x' ¤Ï¼±Ê̻ҤÎÃæ¤Ç¤ÏÍ­¸ú¤Ç¤Ï¤¢¤ê¤Þ¤»¤óEBCDIC ¤Î¥¿¡¼¥²¥Ã¥È¤Ç `%c' ¤Ë¥æ¥Ë¥Ð¡¼¥µ¥ë¥­¥ã¥é¥¯¥¿Ì¾¤¬»È¤ï¤ì¤Þ¤·¤¿ÉÔÌÀ¤Ê C ɸ½à `%s'delete ¤Ç¤ÎÇÛÎó¥µ¥¤¥º¤¬ÉÔÌÀ¤Ç¤¹¥Õ¥©¡¼¥Þ¥Ã¥ÈÆâ¤ËÉÔÌÀ¤Ê·¿ÊÑ´¹Ê¸»ú 0x%x ¤¬¤¢¤ê¤Þ¤¹¥Õ¥©¡¼¥Þ¥Ã¥ÈÆâ¤ËÉÔÌÀ¤Ê·¿ÊÑ´¹Ê¸»ú `%c' ¤¬¤¢¤ê¤Þ¤¹ÉÔÌÀ¤Ê¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹ '\%c'ÉÔÌÀ¤Ê¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹ `\%c'ÉÔÌÀ¤Ê¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹: `\' ¤Î¸å¤Ëʸ»ú¥³¡¼¥É 0x%xÉÔÌÀ¤Ê¥Õ¥£¡¼¥ë¥É `%s' ¤¬½é´ü²½»Ò¤Ç»ØÄꤵ¤ì¤Þ¤·¤¿ÉÔÌÀ¤Ê¥Þ¥·¥ó¥â¡¼¥É `%s'ÉÔÌÀ¤Ê opcode %d@pc=%d ¤ò¸¡¾ÚÃæ¤Ëȯ¸«¤·¤Þ¤·¤¿`asm' Ãæ¤ËÉÔÌÀ¤Ê¥ì¥¸¥¹¥¿Ì¾ `%s' ¤¬¤¢¤ê¤Þ¤¹ÉÔÌÀ¤Ê¥ì¥¸¥¹¥¿Ì¾¤Ç¤¹: %sÉÔÌÀ¤ÊÀßÄêºÑ¥³¥ó¥¹¥È¥é¥¯¥¿·¿¤Ç¤¹ÉÔÌÀ¤Ê {de,en}code_mach_o_hdr Ìá¤êÃÍ %d̵̾¹½Â¤ÂÎ/¶¦ÍÑÂΤ¬¡¢¤½¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òÄêµÁ¤·¤Æ¤¤¤Þ¤»¤ó̵̾ÊÑ¿ô¤ä¥Õ¥£¡¼¥ë¥É¤¬ void ¤ÈÀë¸À¤µ¤ì¤Þ¤·¤¿ÈóÉâÆ°¾®¿ôÅÀ°ú¿ô¤Ç¤Î½ç½øÉÕ¤±¤é¤ì¤Ê¤¤Èæ³Ó¤Ç¤¹Ç§¼±¤Ç¤­¤Ê¤¤ wide sub Ì¿Îá¤Ç¤¹Ç§¼±¤Ç¤­¤Ê¤¤¥Õ¥©¡¼¥Þ¥Ã¥È»ØÄê»Òǧ¼±¤Ç¤­¤Ê¤¤ gcc ¥Ç¥Ð¥Ã¥°¥ª¥×¥·¥ç¥ó: %cǧ¼±ÉÔǽ¤Ê¥ª¥×¥·¥ç¥ó `-%s'ǧ¼±¤Ç¤­¤Ê¤¤¥ì¥¸¥¹¥¿Ì¾ `%s'ÅÐÏ¿¤µ¤ì¤Æ¤¤¤Ê¤¤±é»»»Ò %s ¤Ç¤¹¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤ `__builtin_frame_address' ¤Ø¤Î°ú¿ô¤Ç¤¹¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤ `__builtin_return_address' ¤Ø°ú¿ô¤Ç¤¹¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¥Ð¡¼¥¸¥ç¥ó¤Ç¤¹¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¥ï¥¤¥ÉÀ°¿ô±é»»½ªÃ¼¤Î¤Ê¤¤ #%s½ªÃ¼¤Î¤Ê¤¤ #%s ¾ò·ï½ªÃ¼¤µ¤ì¤Æ¤¤¤Ê¤¤°ú¿ô¥ê¥¹¥È¤¬¥Þ¥¯¥í "%s" ¤òµ¯Æ°¤·¤è¤¦¤È¤·¤Þ¤·¤¿½ªÃ¼¤µ¤ì¤Æ¤¤¤Ê¤¤¥³¥á¥ó¥È½ªÃ¼¤µ¤ì¤Æ¤¤¤Ê¤¤¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó#define Ãæ¤Î²¾°ú¿ô¥ê¥¹¥È¤¬½ªÃ¼¤µ¤ì¤Æ¤¤¤Þ¤»¤ó½ªÃ¼¤µ¤ì¤Æ¤¤¤Ê¤¤Ê¸»úÎóÄê¿ôËô¤Ïʸ»úÄê¿ô$-¼°¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç̤»ÈÍѤΰú¿ô¤¬¤¢¤ê¤Þ¤¹°ú¿ô `%s' ¤¬Ì¤»ÈÍѤǤ¹ÊÑ¿ô `%s' ¤Ï»È¤ï¤ì¤Þ¤»¤ó¤Ç¤·¤¿-gdwarf -g%d ¤ò»ÈÍÑ (DWARF v1, ¥ì¥Ù¥ë %d)-gdwarf-2 ¤ò»ÈÍÑ (DWARF v2)%s ¤È %s ¤È¤ò %s ¥Õ¥©¡¼¥Þ¥Ã¥È¤ÎÃæ¤Ç»È¤Ã¤Æ¤¤¤Þ¤¹%s ¤È %s ¤È¤ò `%%%c' %s ¥Õ¥©¡¼¥Þ¥Ã¥È¤È°ì½ï¤Ë»È¤Ã¤Æ¤¤¤Þ¤¹¥Æ¥ó¥×¥ì¡¼¥ÈÆâ¤Ç `%s' ¤ò»ÈÍѤ·¤Æ¤¤¤Þ¤¹¥Æ¥ó¥×¥ì¡¼¥È·¿Åý°ìÃæ `%s' ¤¬»ÈÍѤµ¤ì¤Þ¤·¤¿`%s' Ťµ½¤¾þ»Ò¤ò `%c' ·¿ÊÑ´¹Ê¸»ú¤È°ì½ï¤Ë»È¤Ã¤Æ¤¤¤Þ¤¹¸Å¤¤¥¹¥¿¥¤¥ë¤Î¥­¥ã¥¹¥È¤ò»ÈÍѤ·¤Æ¤¤¤Þ¤¹¶õ¤ÎÀë¸À¤ÎÃæ¤Ë¡¢Ìµ°ÕÌ£¤Ê¥­¡¼¥ï¡¼¥ÉËô¤Ï·¿Ì¾¤¬¤¢¤ê¤Þ¤¹@FILE ¤Ç¤ÎÊ£¿ô¥Õ¥¡¥¤¥ë¤Î»ÈÍѤϼÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó-mfixed-range ¤ÎÃÍ¤Ï REG1-REG2 ·Á¼°¤ò»ý¤¿¤Í¤Ð¤Ê¤ê¤Þ¤»¤ó²ÄÊѰú¿ô´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤óÊÑ¿ô `%s' ¤¬ `inline' ¤ÈÀë¸À¤µ¤ì¤Þ¤·¤¿ÊÑ¿ô `%s' ¤Ë¤Ï½é´ü²½»Ò¤¬¤¢¤ê¤Þ¤¹¤¬¡¢ÉÔ´°Á´·¿¤Ç¤¹ÊÑ¿ô `%s' ¤Ï `longjmp' ¤ä `vfork' ¤Ë¤è¤Ã¤Æ¹ó¤¤¤³¤È¤Ë¤Ê¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹ÊÑ¿ô¤Þ¤¿¤ÏÎΰè `%s' ¤Ï void ¤ÈÀë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹ÊÑ¿ô¤Þ¤¿¤Ï¥Õ¥£¡¼¥ë¥É¤¬ void ¤ÈÀë¸À¤µ¤ì¤Þ¤·¤¿ÊÑ¿ô¥µ¥¤¥º¤¬¥¹¥¿¥Ã¥¯¤È¥ì¥¸¥¹¥¿¤ÇÅù²Á¤ËÅϤµ¤ì¤Þ¤·¤¿ÊÑ¿ô¥µ¥¤¥º·¿¤¬´Ø¿ô¤Î³°Â¦¤ÇÀë¸À¤µ¤ì¤Þ¤·¤¿²ÄÊÑĹ¥ª¥Ö¥¸¥§¥¯¥È¤Ï½é´ü²½¤µ¤ì¤Ê¤¤¤³¤È¤Ë¤Ê¤ë¤Ç¤·¤ç¤¦¸¡¾Ú¥¨¥é¡¼ (PC=%d)²¾ÁÛ´Ø¿ô¤Ï friend ¤Ë¤Ç¤­¤Þ¤»¤óvirtual ¤ÊÈ󥯥饹´Ø¿ô `%s'¥¯¥é¥¹Àë¸À¤Î³°Â¦¤Ç virtual »ØÄꤷ¤Æ¤¤¤Þ¤¹void ¤ÎÃͤ¬ËÜÍè¤Î°ÕÌ£Ä̤ê¤Ë̵»ë¤µ¤ì¤Þ¤»¤ó¤Ç¤·¤¿volatile register ÊÑ¿ô¤Ï°Õ¿Þ¤·¤¿¤è¤¦¤Ë¤Ïưºî¤·¤Þ¤»¤ó·Ù¹ð: `%s' ¤Î weak Àë¸À¤Ï public ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó`%s' ¤Î weak Àë¸À¤ÏÄêµÁ¤è¤ê¤âÀè¤Ë¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ócase ¥é¥Ù¥ë¤¬¸½¤ì¤¿¤Î¤Ï¤³¤³¤Ç¤¹`%s' ¤ÎÉý¤Ï¤½¤Î·¿¤Î¥µ¥¤¥º¤òͤ¨¤Æ¤¤¤Þ¤¹-traditional ¤ò¤Ä¤±¤ë¤ÈÀ°¿ôÄê¿ô¤ÎÉý¤¬ÊѤï¤ê¤Þ¤¹À°¿ôÄê¿ô¤ÎÉý¤Ï¾¤Î¥·¥¹¥Æ¥à¤Ç -traditional ¤ò¤Ä¤±¤ë¤ÈÊѤï¤ë¤Ç¤·¤ç¤¦write %sÄê¿ô¥ª¥Ö¥¸¥§¥¯¥È¤Ë½ñ¤­¹þ¤ó¤Ç¤¤¤Þ¤¹ (°ú¿ô %d)load ¥³¥Þ¥ó¥É¤ò½ñ¤­¹þ¤ß¤Þ¤¹¡£ + + null ¥Ý¥¤¥ó¥¿¤ò½ñ¤­¹þ¤ó¤Ç¤¤¤Þ¤¹ (°ú¿ô %d)`%s' °À­¤Ë»ØÄꤵ¤ì¤¿°ú¿ô¤Î¸Ä¿ô¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹abs ¤Ø¤Î°ú¿ô¤Î·¿¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹¥Ó¥Ã¥Èȿž¤Ø¤Î°ú¿ô¤Î·¿¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹Ê£ÁǶ¦Ìò(~)¤Ø¤Î°ú¿ô¤Î·¿¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹Ã±¹à´¶Ã²Éä(!)¤Ø¤Î°ú¿ô¤Î·¿¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹Ã±¹à¥Þ¥¤¥Ê¥¹¤Ø¤Î°ú¿ô¤Î·¿¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹Ã±¹à¥×¥é¥¹¤Ø¤Î°ú¿ô¤Î·¿¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹%ld ¥Ð¥¤¥È½ñ¹þ¤ß¡£%ld (%s ¤Ø)½ñ¹þ¤à¤Ï¤º¤Ç¤¹-M ¤« -MM ¤Î¤¤¤º¤ì¤«¤òÄɲÃŪ¤Ë»ØÄꤷ¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó`%s' ¤ÎÇÛÎó¥µ¥¤¥º¤¬¥¼¥íËô¤ÏÉé¤Ç¤¹¥µ¥¤¥º¥¼¥í¤ÎÇÛÎó¤Ï¶õ´Ö¤ò³ÎÊݤ·¤Þ¤»¤ó¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É `%s' ¤ÎÉý¤¬ 0 ¤Ç¤¹%s ¤ÇÉý 0 ¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç¤¹Ä¹¤µ 0 ¤Î¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó \ No newline at end of file diff -Nrc3pad gcc-3.0.4/gcc/po/ja.po gcc-3.1/gcc/po/ja.po *** gcc-3.0.4/gcc/po/ja.po Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/po/ja.po Tue Jan 29 13:26:33 2002 *************** *** 0 **** --- 1,22928 ---- + # Japanese messages for gcc 3.0 + # Copyright (C) 2001 Free Software Foundation, Inc. + # Daisuke Yamashita , 1999-2001 + # Masahito Yamaga , 1999. + # IIDA Yosiaki , 1999. + # + msgid "" + msgstr "" + "Project-Id-Version: gcc 3.0\n" + "POT-Creation-Date: 2001-12-20 04:18-0500\n" + "PO-Revision-Date: 2001-12-05 22:47+0900\n" + "Last-Translator: Daisuke Yamashita \n" + "Language-Team: Japanese \n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=EUC-JP\n" + "Content-Transfer-Encoding: 8bit\n" + + #: attribs.c:306 + #, c-format + msgid "`%s' attribute directive ignored" + msgstr "`%s' °À­¤Îµ¿»÷Ì¿Î᤬̵»ë¤µ¤ì¤Þ¤·¤¿" + + #: attribs.c:314 + #, c-format + msgid "wrong number of arguments specified for `%s' attribute" + msgstr "`%s' °À­¤Ë»ØÄꤵ¤ì¤¿°ú¿ô¤Î¸Ä¿ô¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹" + + #: attribs.c:331 + #, c-format + msgid "`%s' attribute does not apply to types" + msgstr "`%s' °À­¤Ï·¿¤Ë¤ÏŬÍѤµ¤ì¤Þ¤»¤ó" + + #: attribs.c:361 + #, fuzzy, c-format + msgid "`%s' attribute only applies to function types" + msgstr "`%s' °À­¤Ï´Ø¿ô¤ËÂФ·¤Æ¤Î¤ßŬÍѤµ¤ì¤Þ¤¹" + + #: attribs.c:451 attribs.c:473 attribs.c:495 attribs.c:526 attribs.c:548 + #: attribs.c:571 attribs.c:601 attribs.c:639 attribs.c:686 attribs.c:716 + #: attribs.c:746 attribs.c:769 attribs.c:1015 attribs.c:1071 attribs.c:1127 + #: attribs.c:1153 attribs.c:1353 config/arm/arm.c:2005 config/arm/arm.c:2033 + #: config/avr/avr.c:4691 config/h8300/h8300.c:3205 config/h8300/h8300.c:3230 + #: config/i386/i386.c:1256 config/i386/winnt.c:74 + #, c-format + msgid "`%s' attribute ignored" + msgstr "`%s' °À­¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿" + + #: attribs.c:802 + #, c-format + msgid "unknown machine mode `%s'" + msgstr "ÉÔÌÀ¤Ê¥Þ¥·¥ó¥â¡¼¥É `%s'" + + #: attribs.c:805 + #, c-format + msgid "no data type for mode `%s'" + msgstr "¥â¡¼¥É `%s' ¤ËÂФ¹¤ë¥Ç¡¼¥¿·¿¤¬¤¢¤ê¤Þ¤»¤ó" + + #: attribs.c:838 + msgid "section attribute cannot be specified for local variables" + msgstr "section °À­¤Ï¥í¡¼¥«¥ëÊÑ¿ô¤ËÂФ·¤Æ¤Ï»ØÄê¤Ç¤­¤Þ¤»¤ó" + + #: attribs.c:849 + #, c-format + msgid "section of `%s' conflicts with previous declaration" + msgstr "`%s' ¤Î¥»¥¯¥·¥ç¥ó¤ÏÁ°Êý¤Ç¤ËÀë¸À¤µ¤ì¤¿¤â¤Î¤È¾×ÆÍ¤·¤Þ¤¹" + + #: attribs.c:858 + #, c-format + msgid "section attribute not allowed for `%s'" + msgstr "¥»¥¯¥·¥ç¥ó°À­¤Ï `%s' ¤Ë¤Ï»È¤¨¤Þ¤»¤ó" + + #: attribs.c:865 + msgid "section attributes are not supported for this target" + msgstr "¥»¥¯¥·¥ç¥ó°À­¤Ï¤³¤Î¥¿¡¼¥²¥Ã¥È¤Ç¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: attribs.c:907 + msgid "requested alignment is not a constant" + msgstr "Í׵ᤵ¤ì¤¿¥¢¥é¥¤¥ó¥á¥ó¥È¤¬Äê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: attribs.c:912 + msgid "requested alignment is not a power of 2" + msgstr "Í׵ᤵ¤ì¤¿¥¢¥é¥¤¥ó¥á¥ó¥È¤¬ 2 ¤Î¤Ù¤­¾è¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: attribs.c:917 + msgid "requested alignment is too large" + msgstr "Í׵ᤵ¤ì¤¿¥¢¥é¥¤¥ó¥á¥ó¥È¤¬Â礭¤¹¤®¤Þ¤¹" + + #: attribs.c:944 + #, c-format + msgid "alignment may not be specified for `%s'" + msgstr "`%s' ¤ËÂФ·¤Æ¤Î¥¢¥é¥¤¥ó¥á¥ó¥È¤Ï»ØÄê¤Ç¤­¤Þ¤»¤ó" + + #: attribs.c:989 + #, c-format + msgid "`%s' defined both normally and as an alias" + msgstr "`%s' ¤¬Ä̾ï¤Î¤â¤Î¤È¥¨¥¤¥ê¥¢¥¹¤È¤ÎξÊý¤ÇÄêµÁ¤µ¤ì¤Þ¤·¤¿" + + #: attribs.c:999 + msgid "alias arg not a string" + msgstr "alias °ú¿ô¤¬Ê¸»úÎó¤Ç¤Ï¤Ê¤¤" + + #: attribs.c:1038 attribs.c:1094 + #, c-format + msgid "`%s' attribute applies only to functions" + msgstr "`%s' °À­¤Ï´Ø¿ô¤ËÂФ·¤Æ¤Î¤ßŬÍѤµ¤ì¤Þ¤¹" + + #: attribs.c:1045 attribs.c:1101 + #, c-format + msgid "can't set `%s' attribute after definition" + msgstr "ÄêµÁ¤Î¸å¤Ç `%s' °À­¤ò¥»¥Ã¥È¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó" + + #: attribs.c:1180 + #, fuzzy, c-format + msgid "invalid vector type for attribute `%s'" + msgstr "`%s' ¤Î°ú¿ô¤È¤·¤ÆÌµ¸ú¤Ê·¿" + + #: attribs.c:1202 attribs.c:1207 + msgid "no vector mode with the size and type specified could be found" + msgstr "" + + #: builtins.c:282 + msgid "offset outside bounds of constant string" + msgstr "¥ª¥Õ¥»¥Ã¥È¤¬Äê¿ôʸ»úÎó¤Î¶­³¦¤Î³°¤Ë¤¢¤ê¤Þ¤¹" + + #: builtins.c:759 + #, fuzzy + msgid "second arg to `__builtin_prefetch' must be a constant" + msgstr "`__builtin_expect' ¤Ø¤ÎÂèÆó°ú¿ô¤ÏÄê¿ô¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: builtins.c:766 + #, fuzzy + msgid "invalid second arg to __builtin_prefetch; using zero" + msgstr "`__builtin_return_address' ¤Ø¤Î°ú¿ô¤¬ÉÔŬÀڤǤ¹" + + #: builtins.c:773 + #, fuzzy + msgid "third arg to `__builtin_prefetch' must be a constant" + msgstr "`__builtin_expect' ¤Ø¤ÎÂèÆó°ú¿ô¤ÏÄê¿ô¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: builtins.c:780 + #, fuzzy + msgid "invalid third arg to __builtin_prefetch; using zero" + msgstr "`__builtin_return_address' ¤Ø¤Î°ú¿ô¤¬ÉÔŬÀڤǤ¹" + + #. ??? We used to try and build up a call to the out of line function, + #. guessing about what registers needed saving etc. This became much + #. harder with __builtin_va_start, since we don't have a tree for a + #. call to __builtin_saveregs to fall back on. There was exactly one + #. port (i860) that used this code, and I'm unconvinced it could actually + #. handle the general case. So we no longer try to handle anything + #. weird and make the backend absorb the evil. + #: builtins.c:2745 + msgid "__builtin_saveregs not supported by this target" + msgstr "__builtin_saveregs ¤Ï¤³¤Î¥¿¡¼¥²¥Ã¥È¤Ç¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: builtins.c:2787 + msgid "argument of `__builtin_args_info' must be constant" + msgstr "`__builtin_args_info' ¤Î°ú¿ô¤ÏÄê¿ô¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: builtins.c:2793 + msgid "argument of `__builtin_args_info' out of range" + msgstr "`__builtin_args_info' ¤Î°ú¿ô¤¬Èϰϳ°¤Ç¤¹" + + #: builtins.c:2799 + msgid "missing argument in `__builtin_args_info'" + msgstr "`__builtin_args_info' ¤Ë°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó" + + #: builtins.c:2831 + msgid "`va_start' used in function with fixed args" + msgstr "`va_start' ¤¬¸ÇÄê¸Ä°ú¿ô¤Î´Ø¿ôÆâ¤Ç»È¤ï¤ì¤Þ¤·¤¿" + + #: builtins.c:2850 + msgid "second parameter of `va_start' not last named argument" + msgstr "`va_start' ¤ÎÆóÈÖÌܤÎÃͤ¬°ú¿ô¤ÎºÇ¸å¤Î̾Á°¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤»¤ó" + + #. Evidently an out of date version of ; can't validate + #. va_start's second argument, but can still work as intended. + #: builtins.c:2855 + msgid "`__builtin_next_arg' called without an argument" + msgstr "`__builtin_next_arg' ¤¬°ú¿ô̵¤·¤Ç¤Ç¸Æ¤Ó½Ð¤µ¤ì¤Þ¤·¤¿" + + #: builtins.c:2959 + msgid "too many arguments to function `va_start'" + msgstr "`va_start' ¤ËÂФ¹¤ë°ú¿ô¤¬Â¿¤¹¤®¤Þ¤¹" + + #: builtins.c:3043 + msgid "first argument to `va_arg' not of type `va_list'" + msgstr "`va_arg' ¤ËÂФ¹¤ëÂè°ì°ú¿ô¤¬ `va_list' ·¿¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: builtins.c:3071 + #, c-format + msgid "`%s' is promoted to `%s' when passed through `...'" + msgstr "`%s' ¤Ï `...' ¤Î½èÍý¤Î²áÄø¤Ç `%s' ¤Ë³Ê¾å¤²¤µ¤ì¤Þ¤·¤¿" + + #: builtins.c:3075 + #, c-format + msgid "(so you should pass `%s' not `%s' to `va_arg')" + msgstr "(½¾¤Ã¤Æ¡¢`va_arg' ¤Ë¤Ï `%s' ¤ò(`%s' ¤Ç¤Ê¤¯)ÅϤµ¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó)" + + #: builtins.c:3199 + msgid "invalid arg to `__builtin_frame_address'" + msgstr "`__builtin_frame_address' ¤Ø¤Î°ú¿ô¤¬ÉÔŬÀڤǤ¹" + + #: builtins.c:3201 + msgid "invalid arg to `__builtin_return_address'" + msgstr "`__builtin_return_address' ¤Ø¤Î°ú¿ô¤¬ÉÔŬÀڤǤ¹" + + #: builtins.c:3215 + msgid "unsupported arg to `__builtin_frame_address'" + msgstr "¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤ `__builtin_frame_address' ¤Ø¤Î°ú¿ô¤Ç¤¹" + + #: builtins.c:3217 + msgid "unsupported arg to `__builtin_return_address'" + msgstr "¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤ `__builtin_return_address' ¤Ø°ú¿ô¤Ç¤¹" + + #: builtins.c:3381 + msgid "second arg to `__builtin_expect' must be a constant" + msgstr "`__builtin_expect' ¤Ø¤ÎÂèÆó°ú¿ô¤ÏÄê¿ô¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: builtins.c:3844 + msgid "__builtin_longjmp second argument must be 1" + msgstr "__builtin_longjmp ÂèÆó°ú¿ô¤Ï 1 ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: builtins.c:3858 + msgid "__builtin_trap not supported by this target" + msgstr "__builtin_trap ¤³¤Î¥¿¡¼¥²¥Ã¥È¤Ç¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #. just do library call, if unknown builtin + #: builtins.c:3914 c-common.c:3605 + #, c-format + msgid "built-in function `%s' not currently supported" + msgstr "ÁȤ߹þ¤ß´Ø¿ô `%s' ¤Ï¸½ºß¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: c-common.c:506 + #, fuzzy, c-format + msgid "`%s' is not defined outside of function scope" + msgstr "¥é¥Ù¥ë `%s' ¤¬´Ø¿ô¤Î³°Â¦¤Î²¿¤«¤ò»²¾È¤·¤Þ¤·¤¿" + + #: c-common.c:546 + msgid "concatenation of string literals with __FUNCTION__ is deprecated. This feature will be removed in future" + msgstr "" + + #: c-common.c:615 + #, c-format + msgid "string length `%d' is greater than the length `%d' ISO C%d compilers are required to support" + msgstr "ʸ»úÎóĹ `%d' ¤Ï¡¢Ä¹¤µ `%d' (ISO C%d ¥³¥ó¥Ñ¥¤¥é¤Î¥µ¥Ý¡¼¥ÈÍ×·ï)¤è¤êÂ礭¤¯¤Ê¤Ã¤Æ¤¤¤Þ¤¹" + + #: c-common.c:663 ch/decl.c:4100 + msgid "overflow in constant expression" + msgstr "Äê¿ô¼°¤¬¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤Þ¤·¤¿" + + #: c-common.c:684 + msgid "integer overflow in expression" + msgstr "¼°¤ÎÀ°¿ô¤¬¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤Þ¤·¤¿" + + #: c-common.c:693 + msgid "floating point overflow in expression" + msgstr "¼°¤ÎÉâÆ°¾®¿ôÅÀ¿ô¤¬¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤Þ¤·¤¿" + + #. This detects cases like converting -129 or 256 to unsigned char. + #: c-common.c:714 + msgid "large integer implicitly truncated to unsigned type" + msgstr "Â礭¤ÊÀ°¿ô¤¬°ÅÌÛ¤ËÉä¹ç̵¤··¿¤ËÀÚ¤êµÍ¤á¤é¤ì¤Þ¤·¤¿" + + #: c-common.c:716 + msgid "negative integer implicitly converted to unsigned type" + msgstr "Éé¤ÎÀ°¿ô¤¬°ÅÌÛ¤ËÉä¹ç̵¤··¿¤ËÊÑ´¹¤µ¤ì¤Þ¤·¤¿" + + #: c-common.c:763 + msgid "overflow in implicit constant conversion" + msgstr "°ÅÌÛ¤ÎÄê¿ôÊÑ´¹¤Ç¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤Þ¤·¤¿" + + #: c-common.c:911 + #, c-format + msgid "operation on `%s' may be undefined" + msgstr "`%s' ¤Ç¤Î±é»»¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤¤¤È»×¤ï¤ì¤Þ¤¹" + + #: c-common.c:1202 + msgid "expression statement has incomplete type" + msgstr "¼°¤ÎÃæ¤Îʸ¤ËÉÔ´°Á´·¿¤¬¤¢¤ê¤Þ¤¹" + + #: c-common.c:1235 ch/actions.c:1027 + msgid "case label does not reduce to an integer constant" + msgstr "case ¥é¥Ù¥ë¤òÀ°¿ôÄê¿ô¤Ë´Ô¸µ¤Ç¤­¤Þ¤»¤ó" + + #: c-common.c:1533 + msgid "invalid truth-value expression" + msgstr "¿¿µ¶Ãͼ°¤¬ÉÔŬÀڤǤ¹" + + #: c-common.c:1584 + #, c-format + msgid "invalid operands to binary %s" + msgstr "Æó¹à±é»»»Ò %s ¤¬ÉÔŬÀڤǤ¹" + + #: c-common.c:1819 c-common.c:1828 + msgid "comparison is always false due to limited range of data type" + msgstr "¥Ç¡¼¥¿·¿¤ÎÈϰÏÀ©¸Â¤Ë¤è¤Ã¤Æ¡¢Èæ³Ó¤¬¾ï¤Ë false ¤È¤Ê¤ê¤Þ¤¹" + + #: c-common.c:1821 c-common.c:1830 + msgid "comparison is always true due to limited range of data type" + msgstr "¥Ç¡¼¥¿·¿¤ÎÈϰÏÀ©¸Â¤Ë¤è¤Ã¤Æ¡¢Èæ³Ó¤¬¾ï¤Ë true ¤È¤Ê¤ê¤Þ¤¹" + + #: c-common.c:1896 + msgid "comparison of unsigned expression >= 0 is always true" + msgstr "Éä¹ç̵¤·¤Î¼° >= 0 ¤È¤¤¤¦Èæ³Ó¤Ï¾ï¤Ë true ¤Ç¤¹" + + #: c-common.c:1905 + msgid "comparison of unsigned expression < 0 is always false" + msgstr "Éä¹ç̵¤·¤Î¼° < 0 ¤È¤¤¤¦Èæ³Ó¤Ï¾ï¤Ë false ¤Ç¤¹" + + #: c-common.c:1956 f/com.c:14834 + msgid "struct type value used where scalar is required" + msgstr "¥¹¥«¥é¡¼¤¬É¬Íפʾì½ê¤Ë¹½Â¤Âη¿¤ÎÃͤ¬»È¤ï¤ì¤Þ¤·¤¿" + + #: c-common.c:1960 f/com.c:14838 + msgid "union type value used where scalar is required" + msgstr "¥¹¥«¥é¡¼¤¬É¬Íפʾì½ê¤Ë¶¦ÍÑÂη¿¤ÎÃͤ¬»È¤ï¤ì¤Þ¤·¤¿" + + #: c-common.c:1964 f/com.c:14842 + msgid "array type value used where scalar is required" + msgstr "¥¹¥«¥é¡¼¤¬É¬Íפʾì½ê¤ËÇÛÎ󷿤ÎÃͤ¬»È¤ï¤ì¤Þ¤·¤¿" + + #: c-common.c:2079 f/com.c:14968 + msgid "suggest parentheses around assignment used as truth value" + msgstr "¿¿µ¶ÃͤȤ·¤Æ»È¤ï¤ì¤ëÂåÆþ¤Î¤Þ¤ï¤ê¤Ç¤Ï¡¢´Ý³ç¸Ì¤Î»ÈÍѤò¤ª´«¤á¤·¤Þ¤¹" + + #: c-common.c:2123 c-common.c:2155 + msgid "invalid use of `restrict'" + msgstr "`restrict' ¤ÎÍÑË¡¤¬ÉÔŬÀڤǤ¹" + + #: c-common.c:2271 + msgid "__alignof__ applied to an incomplete type" + msgstr "__alignof__ ¤¬ÉÔ´°Á´¤Ê·¿¤ËŬÍѤµ¤ì¤Þ¤·¤¿" + + #: c-common.c:2297 + msgid "`__alignof' applied to a bit-field" + msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤Ë `__alignof' ¤¬Å¬ÍѤµ¤ì¤Þ¤·¤¿" + + #: c-common.c:2739 + #, fuzzy, c-format + msgid "cannot disable built-in function `%s'" + msgstr "ÁȤ߹þ¤ß´Ø¿ô `%s' ¤òʤ¤¤±£¤·¤Þ¤¹" + + #: c-common.c:3020 c-typeck.c:1767 + #, c-format + msgid "too few arguments to function `%s'" + msgstr "´Ø¿ô `%s' ¤Ø¤Î°ú¿ô¤¬¾¯¤Ê¤¹¤®¤Þ¤¹" + + #: c-common.c:3026 c-typeck.c:1620 + #, c-format + msgid "too many arguments to function `%s'" + msgstr "´Ø¿ô `%s' ¤ËÂФ¹¤ë°ú¿ô¤¬Â¿¤¹¤®¤Þ¤¹" + + #: c-common.c:3213 + msgid "pointers are not permitted as case values" + msgstr "case ¤ÎÃͤȤ·¤Æ¤Î¥Ý¥¤¥ó¥¿¤Ïµö¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: c-common.c:3219 + msgid "ISO C++ forbids range expressions in switch statements" + msgstr "ISO C++ ¤Ç¤Ï switch ʸ¤Ç¤ÎÈϰϼ°¤Ï¶Ø¤¸¤é¤ì¤Æ¤¤¤Þ¤¹" + + #: c-common.c:3221 + msgid "ISO C forbids range expressions in switch statements" + msgstr "ISO C ¤Ç¤Ï switch ʸ¤Ç¤ÎÈϰϼ°¤Ï¶Ø¤¸¤é¤ì¤Æ¤¤¤Þ¤¹" + + #: c-common.c:3251 + msgid "empty range specified" + msgstr "¶õ¤ÎÈϰϤ¬»ØÄꤵ¤ì¤Þ¤·¤¿" + + #: c-common.c:3302 + msgid "duplicate (or overlapping) case value" + msgstr "Æó½Å¤Î(¤¢¤ë¤¤¤Ï½ÅÊ£¤·¤Æ¤¤¤ë) case ¤ÎÃÍ" + + #: c-common.c:3304 + msgid "this is the first entry overlapping that value" + msgstr "¤³¤ì¤¬¤½¤ÎÃͤȽÅÊ£¤·¤¿ºÇ½é¤Î¹àÌܤǤ¹" + + #: c-common.c:3308 ch/actions.c:1125 + msgid "duplicate case value" + msgstr "½ÅÊ£¤·¤¿ case ¤ÎÃÍ" + + #: c-common.c:3309 + msgid "previously used here" + msgstr "Á°¤Ë¤³¤³¤Ç»È¤ï¤ì¤Þ¤·¤¿" + + #: c-common.c:3313 + msgid "multiple default labels in one switch" + msgstr "°ì¤Ä¤Î switch ¤ËÊ£¿ô¤Î default ¥é¥Ù¥ë¤¬¤¢¤ê¤Þ¤¹" + + #: c-common.c:3314 + msgid "this is the first default label" + msgstr "¤³¤ì¤¬ºÇ½é¤Î default ¥é¥Ù¥ë¤Ç¤¹" + + #: c-common.c:3342 + #, fuzzy + msgid "ISO C++ forbids taking the address of a label" + msgstr "ISO C++ ¤Ï `::main' ´Ø¿ô¤Î¥¢¥É¥ì¥¹¤ò¼è¤ë¤³¤È¤ò¶Ø¤¸¤Þ¤¹" + + #: c-common.c:3344 + #, fuzzy + msgid "ISO C forbids taking the address of a label" + msgstr "ISO C ¤Ï¥­¥ã¥¹¥È¼°¤Î¥¢¥É¥ì¥¹É¾²Á¤ò¶Ø¤¸¤Þ¤¹" + + #: c-common.c:3937 + msgid "-Wformat-y2k ignored without -Wformat" + msgstr "-Wformat-y2k ¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿¡Ê-Wformat ¤¬¤¢¤ê¤Þ¤»¤ó¡Ë" + + #: c-common.c:3939 + msgid "-Wformat-extra-args ignored without -Wformat" + msgstr "-Wformat-extra-args ¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿¡Ê-Wformat ¤¬¤¢¤ê¤Þ¤»¤ó¡Ë" + + #: c-common.c:3941 + msgid "-Wformat-nonliteral ignored without -Wformat" + msgstr "-Wformat-nonliteral ¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿¡Ê-Wformat ¤¬¤¢¤ê¤Þ¤»¤ó¡Ë" + + #: c-common.c:3943 + msgid "-Wformat-security ignored without -Wformat" + msgstr "-Wformat-security ¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿¡Ê-Wformat ¤¬¤¢¤ê¤Þ¤»¤ó¡Ë" + + #: c-common.c:3945 + msgid "-Wmissing-format-attribute ignored without -Wformat" + msgstr "-Wmissing-format-attribute ¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿¡Ê-Wformat ¤¬¤¢¤ê¤Þ¤»¤ó¡Ë" + + #: c-common.c:4036 + #, fuzzy, c-format + msgid "declaration of `%s' shadows %s" + msgstr "`%s' ¤ÎÀë¸À¤Ï²¾°ú¿ô¤òʤ¤¤±£¤·¤Þ¤¹" + + #: c-convert.c:78 c-typeck.c:1031 c-typeck.c:4129 ch/convert.c:1164 + #: cp/typeck.c:1736 cp/typeck.c:6298 + msgid "void value not ignored as it ought to be" + msgstr "void ¤ÎÃͤ¬ËÜÍè¤Î°ÕÌ£Ä̤ê¤Ë̵»ë¤µ¤ì¤Þ¤»¤ó¤Ç¤·¤¿" + + #: c-convert.c:110 java/typeck.c:150 + msgid "conversion to non-scalar type requested" + msgstr "Èó¥¹¥«¥é¡¼·¿¤Ø¤ÎÊÑ´¹¤¬Í׵ᤵ¤ì¤Þ¤¹" + + #: c-decl.c:458 + msgid "-traditional is deprecated and may be removed" + msgstr "" + + #: c-decl.c:548 + #, c-format + msgid "unknown C standard `%s'" + msgstr "ÉÔÌÀ¤Ê C ɸ½à `%s'" + + #: c-decl.c:830 + #, c-format + msgid "array `%s' assumed to have one element" + msgstr "ÇÛÎó `%s' ¤Ï°ìÍ×ÁǤò»ý¤Ã¤Æ¤¤¤ë¤â¤Î¤È¸«¤Ê¤µ¤ì¤Þ¤¹" + + #: c-decl.c:1006 + #, c-format + msgid "`struct %s' incomplete in scope ending here" + msgstr "¥¹¥³¡¼¥×¤¬½ª¤ï¤ë¤³¤Î°ÌÃ֤ǡ¢`struct %s' ¤¬ÉÔ´°Á´¤Ç¤¹" + + #: c-decl.c:1009 + #, c-format + msgid "`union %s' incomplete in scope ending here" + msgstr "¥¹¥³¡¼¥×¤¬½ª¤ï¤ë¤³¤ÎÉôʬ¤Ç `union %s' ¤¬ÉÔ´°Á´¤Ç¤¹" + + #: c-decl.c:1012 + #, c-format + msgid "`enum %s' incomplete in scope ending here" + msgstr "¥¹¥³¡¼¥×¤¬½ª¤ï¤ë¤³¤ÎÉôʬ¤Ç `enum %s' ¤¬ÉÔ´°Á´¤Ç¤¹" + + #: c-decl.c:1126 c-decl.c:1267 ch/decl.c:2920 java/decl.c:1383 + #, c-format + msgid "label `%s' used but not defined" + msgstr "¥é¥Ù¥ë `%s' ¤¬»È¤ï¤ì¤Þ¤·¤¿¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: c-decl.c:1132 c-decl.c:1274 ch/decl.c:2926 java/decl.c:1389 + #, c-format + msgid "label `%s' defined but not used" + msgstr "¥é¥Ù¥ë `%s' ¤¬ÄêµÁ¤µ¤ì¤Þ¤·¤¿¤¬»È¤ï¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: c-decl.c:1391 cp/decl.c:3119 + #, fuzzy, c-format + msgid "function `%s' redeclared as inline" + msgstr "¥é¥¤¥Ö¥é¥ê´Ø¿ô `%s' ¤ÏÈó´Ø¿ô¤È¤·¤ÆÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: c-decl.c:1393 cp/decl.c:3121 + #, fuzzy, c-format + msgid "previous declaration of function `%s' with attribute noinline" + msgstr "%s: ´Ø¿ô `%s' ¤ÎÀë¸À¤¬ÊÑ´¹¤µ¤ì¤Æ¤¤¤Þ¤»¤ó\n" + + #: c-decl.c:1400 cp/decl.c:3128 + #, fuzzy, c-format + msgid "function `%s' redeclared with attribute noinline" + msgstr "´Ø¿ô `%s' ¤Ï¥Ö¥í¥Ã¥¯Æâ¤ÎÁ°Êý¤ÇÀë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: c-decl.c:1402 cp/decl.c:3130 + #, fuzzy, c-format + msgid "previous declaration of function `%s' was inline" + msgstr "Á°Êý¤Ç¤Î `%s' ¤ÎÀë¸À" + + #: c-decl.c:1431 c-decl.c:1484 + #, c-format + msgid "shadowing built-in function `%s'" + msgstr "ÁȤ߹þ¤ß´Ø¿ô `%s' ¤òʤ¤¤±£¤·¤Þ¤¹" + + #: c-decl.c:1433 + #, c-format + msgid "shadowing library function `%s'" + msgstr "¥é¥¤¥Ö¥é¥ê´Ø¿ô `%s' ¤òʤ¤¤±£¤·¤Þ¤¹" + + #: c-decl.c:1439 + #, c-format + msgid "library function `%s' declared as non-function" + msgstr "¥é¥¤¥Ö¥é¥ê´Ø¿ô `%s' ¤ÏÈó´Ø¿ô¤È¤·¤ÆÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: c-decl.c:1443 c-decl.c:1446 + #, c-format + msgid "built-in function `%s' declared as non-function" + msgstr "ÁȤ߹þ¤ß´Ø¿ô `%s' ¤ÏÈó´Ø¿ô¤È¤·¤ÆÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: c-decl.c:1450 objc/objc-act.c:2334 objc/objc-act.c:6028 + #, c-format + msgid "`%s' redeclared as different kind of symbol" + msgstr "`%s' ¤¬Ê̤Υ·¥ó¥Ü¥ë¼ï¤È¤·¤ÆºÆÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: c-decl.c:1451 c-decl.c:1633 c-decl.c:1782 objc/objc-act.c:2336 + #: objc/objc-act.c:6030 objc/objc-act.c:6085 + #, c-format + msgid "previous declaration of `%s'" + msgstr "Á°Êý¤Ç¤Î `%s' ¤ÎÀë¸À" + + #. If types don't match for a built-in, throw away the built-in. + #: c-decl.c:1537 + #, c-format + msgid "conflicting types for built-in function `%s'" + msgstr "ÁȤ߹þ¤ß´Ø¿ô `%s' ¤È·¿¤¬Ì·½â¤·¤Þ¤¹" + + #: c-decl.c:1580 c-decl.c:1599 + #, c-format + msgid "conflicting types for `%s'" + msgstr "`%s' ¤È·¿¤¬Ì·½â¤·¤Þ¤¹" + + #: c-decl.c:1622 + #, fuzzy + msgid "a parameter list with an ellipsis can't match an empty parameter name list declaration" + msgstr "¾Êάµ­¹æÉÕ¤­¥Ñ¥é¥á¥¿¥ê¥¹¥È¤Ï¡¢¶õ¤Î²¾°ú¿ô̾¥ê¥¹¥ÈÀë¸À¤È°ìÃפǤ­¤Þ¤»¤ó¡£" + + #: c-decl.c:1628 + #, fuzzy + msgid "an argument type that has a default promotion can't match an empty parameter name list declaration" + msgstr "¥Ç¥Õ¥©¥ë¥È¤Ç³Ê¾å¤²¤µ¤ì¤ë·¿¤Î°ú¿ô¤¬¡¢¶õ¤Î²¾°ú¿ô̾¥ê¥¹¥ÈÀë¸À¤ÈŬ¹ç¤·¤Þ¤»¤ó¡£" + + #: c-decl.c:1643 c-decl.c:1665 + #, c-format + msgid "redefinition of `%s'" + msgstr "`%s' ¤¬ºÆÄêµÁ¤µ¤ì¤Þ¤·¤¿" + + #: c-decl.c:1646 + #, c-format + msgid "redeclaration of `%s'" + msgstr "`%s' ¤¬ºÆÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: c-decl.c:1649 + #, c-format + msgid "conflicting declarations of `%s'" + msgstr "`%s' ¤ÎÀë¸À¤¬Ì·½â¤·¤Æ¤¤¤Þ¤¹" + + #: c-decl.c:1692 + #, c-format + msgid "prototype for `%s' follows" + msgstr "`%s' ¤Î¥×¥í¥È¥¿¥¤¥×¤¬¸å¤í¤Ë¤¢¤ê¤Þ¤¹" + + #: c-decl.c:1693 c-decl.c:1701 c-decl.c:1717 + msgid "non-prototype definition here" + msgstr "Èó¥×¥í¥È¥¿¥¤¥×ÄêµÁ¤¬¤³¤³¤Ë¤¢¤ê¤Þ¤¹" + + #: c-decl.c:1700 + #, c-format + msgid "prototype for `%s' follows and number of arguments doesn't match" + msgstr "`%s' ¤Î¥×¥í¥È¥¿¥¤¥×¤¬¸å¤í¤Ë¤¢¤ê¡¢°ú¿ô¤Î¸Ä¿ô¤¬°ìÃפ·¤Þ¤»¤ó" + + #: c-decl.c:1715 + #, c-format + msgid "prototype for `%s' follows and argument %d doesn't match" + msgstr "`%s' ¤Î¥×¥í¥È¥¿¥¤¥×¤¬¸å¤í¤Ë¤¢¤ê¡¢°ú¿ô %d ¤¬°ìÃפ·¤Þ¤»¤ó" + + #: c-decl.c:1733 + #, c-format + msgid "`%s' declared inline after being called" + msgstr "`%s' ¤Ï¸Æ¤Ó½Ð¤µ¤ì¤ë¤è¤ê¤â¸å¤í¤Ç inline Àë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: c-decl.c:1739 + #, c-format + msgid "`%s' declared inline after its definition" + msgstr "`%s' ¤Ï¤½¤ÎÄêµÁ¤è¤ê¤â¸å¤Ç inline Àë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: c-decl.c:1746 + #, c-format + msgid "static declaration for `%s' follows non-static" + msgstr "`%s' ¤ÏÈó static ¤Î¸å¤Ç static Àë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: c-decl.c:1754 + #, c-format + msgid "non-static declaration for `%s' follows static" + msgstr "`%s' ¤Ï static ¤Î¸å¤ÇÈó static Àë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: c-decl.c:1761 + #, c-format + msgid "const declaration for `%s' follows non-const" + msgstr "`%s' ¤ÏÈó const ¤Î¸å¤Ç const Àë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: c-decl.c:1768 + #, c-format + msgid "type qualifiers for `%s' conflict with previous decl" + msgstr "`%s' ¤Î·¿½¤¾þ»Ò¤¬Á°Êý¤ÎÀë¸À¤ÈÌ·½â¤·¤Þ¤¹" + + #: c-decl.c:1781 + #, c-format + msgid "redundant redeclaration of `%s' in same scope" + msgstr "`%s' ¤Î¾éĹ¤ÊºÆÀë¸À¤¬Æ±°ì¥¹¥³¡¼¥×Æâ¤Ë¤¢¤ê¤Þ¤¹" + + #: c-decl.c:2073 java/decl.c:1082 + #, c-format + msgid "declaration of `%s' shadows a parameter" + msgstr "`%s' ¤ÎÀë¸À¤Ï²¾°ú¿ô¤òʤ¤¤±£¤·¤Þ¤¹" + + #: c-decl.c:2076 java/decl.c:1085 + #, c-format + msgid "declaration of `%s' shadows a symbol from the parameter list" + msgstr "`%s' ¤ÎÀë¸À¤Ï²¾°ú¿ô¥ê¥¹¥È¤Î¥·¥ó¥Ü¥ë¤òʤ¤¤±£¤·¤Þ¤¹" + + #: c-decl.c:2097 cp/decl.c:4204 + #, fuzzy + msgid "a parameter" + msgstr "²¾°ú¿ô `%s' ¤Ï̵¸ú¤Ç¤¹" + + #: c-decl.c:2099 cp/decl.c:4221 + msgid "a previous local" + msgstr "" + + #. XXX shadow warnings in outer-more namespaces + #: c-decl.c:2103 cp/decl.c:4225 + #, fuzzy + msgid "a global declaration" + msgstr "̵¸ú¤ÊÀë¸À¤Ç¤¹" + + #: c-decl.c:2147 + #, c-format + msgid "nested extern declaration of `%s'" + msgstr "`%s' ¤Î extern Àë¸À¤¬¥Í¥¹¥È¤·¤Æ¤¤¤Þ¤¹" + + #: c-decl.c:2167 java/decl.c:1035 + #, c-format + msgid "`%s' used prior to declaration" + msgstr "`%s' ¤ÏÀë¸À¤è¤ê¤âÀè¤Ë»ÈÍѤµ¤ì¤Þ¤·¤¿" + + #: c-decl.c:2182 c-decl.c:2397 + #, c-format + msgid "`%s' was declared implicitly `extern' and later `static'" + msgstr "`%s' ¤Ï°ÅÌÛ¤Ë `extern' Àë¸À¤µ¤ì¡¢¸å¤Ë `static' Àë¸À¤µ¤ì¤Þ¤·¤¿" + + #: c-decl.c:2292 cp/decl.c:4060 + msgid "type mismatch with previous external decl" + msgstr "·¿¤¬Á°Êý¤Î³°ÉôÀë¸À¤È°ìÃפ·¤Þ¤»¤ó" + + #: c-decl.c:2293 + #, c-format + msgid "previous external decl of `%s'" + msgstr "Á°Êý¤Î `%s' ¤Î³°ÉôÀë¸À" + + #: c-decl.c:2306 + msgid "type mismatch with previous implicit declaration" + msgstr "·¿¤¬Á°Êý¤Î°ÅÌÛ¤ÎÀë¸À¤È°ìÃפ·¤Þ¤»¤ó" + + #: c-decl.c:2308 + #, c-format + msgid "previous implicit declaration of `%s'" + msgstr "Á°Êý¤Ç¤Î `%s' ¤Î°ÅÌÛŪ¤ÊÀë¸À" + + #: c-decl.c:2325 + #, c-format + msgid "type of external `%s' is not global" + msgstr "³°Éô `%s' ¤Î·¿¤Ï¥°¥í¡¼¥Ð¥ë¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: c-decl.c:2376 + #, c-format + msgid "`%s' was previously implicitly declared to return `int'" + msgstr "`%s' ¤ÏÁ°Êý¤Ç°ÅÌÛŪ¤Ë `int' ¤òÊÖ¤¹¤ÈÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: c-decl.c:2401 + #, c-format + msgid "`%s' was declared `extern' and later `static'" + msgstr "`%s' ¤Ï `extern' ¤ÈÀë¸À¤µ¤ì¡¢¸å¤Ç `static' ¤ÈÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: c-decl.c:2425 + #, c-format + msgid "extern declaration of `%s' doesn't match global one" + msgstr "`%s' ¤Îextern Àë¸À¤Ï¥°¥í¡¼¥Ð¥ë¤Î¤½¤ì¤È°ìÃפ·¤Þ¤»¤ó" + + #: c-decl.c:2467 + #, c-format + msgid "`%s' locally external but globally static" + msgstr "`%s' ¤Ï¥í¡¼¥«¥ëŪ¤Ë¤Ï extern ¤Ç¤¹¤¬¡¢¥°¥í¡¼¥Ð¥ëŪ¤Ë static ¤Ç¤¹" + + #: c-decl.c:2589 + #, c-format + msgid "function `%s' was previously declared within a block" + msgstr "´Ø¿ô `%s' ¤Ï¥Ö¥í¥Ã¥¯Æâ¤ÎÁ°Êý¤ÇÀë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: c-decl.c:2609 c-decl.c:2611 + #, c-format + msgid "implicit declaration of function `%s'" + msgstr "´Ø¿ô `%s' ¤Î°ÅÌÛ¤ÎÀë¸À" + + #: c-decl.c:2699 + #, c-format + msgid "label %s referenced outside of any function" + msgstr "¥é¥Ù¥ë %s ¤¬¤¢¤é¤æ¤ë´Ø¿ô¤Î³°Â¦¤Ç»²¾È¤µ¤ì¤Þ¤·¤¿" + + #: c-decl.c:2756 + #, c-format + msgid "duplicate label declaration `%s'" + msgstr "¥é¥Ù¥ë¤ÎÀë¸À `%s' ¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹" + + #: c-decl.c:2759 + msgid "this is a previous declaration" + msgstr "Á°Êý¤Ç¤Î `%s' ¤ÎÀë¸À" + + #: c-decl.c:3267 + msgid "unnamed struct/union that defines no instances" + msgstr "̵̾¹½Â¤ÂÎ/¶¦ÍÑÂΤ¬¡¢¤½¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òÄêµÁ¤·¤Æ¤¤¤Þ¤»¤ó" + + #: c-decl.c:3286 + msgid "useless keyword or type name in empty declaration" + msgstr "¶õ¤ÎÀë¸À¤ÎÃæ¤Ë¡¢Ìµ°ÕÌ£¤Ê¥­¡¼¥ï¡¼¥ÉËô¤Ï·¿Ì¾¤¬¤¢¤ê¤Þ¤¹" + + #: c-decl.c:3293 + msgid "two types specified in one empty declaration" + msgstr "°ì¤Ä¤Î¶õ¤ÎÀë¸ÀÃæ¤Ë¡¢Æó¤Ä¤Î·¿¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤¹" + + #: c-decl.c:3298 c-parse.y:721 c-parse.y:723 parse.y:731 parse.y:1803 + #: objc-parse.y:757 objc-parse.y:759 objc-parse.y:2962 + msgid "empty declaration" + msgstr "¶õ¤ÎÀë¸À¤Ç¤¹" + + #: c-decl.c:3328 + #, fuzzy + msgid "ISO C89 does not support `static' or type qualifiers in parameter array declarators" + msgstr "ISO C89 ¤Ï²ÄÊÑÇÛÎó¥á¥ó¥Ð¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó" + + #: c-decl.c:3330 + #, fuzzy + msgid "ISO C89 does not support `[*]' array declarators" + msgstr "ISO C89 ¤Ï²ÄÊÑÇÛÎó¥á¥ó¥Ð¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó" + + #: c-decl.c:3333 + msgid "GCC does not yet properly implement `[*]' array declarators" + msgstr "" + + #: c-decl.c:3352 + #, fuzzy + msgid "static or type qualifiers in abstract declarator" + msgstr "¥Ý¥¤¥ó¥¿Àë¸À»Ò¤ËÉÔŬÀڤʷ¿½¤¾þ»Ò" + + #: c-decl.c:3417 + #, c-format + msgid "`%s' is usually a function" + msgstr "`%s' ¤ÏÄ̾ï¤Ï´Ø¿ô¤Ç¤¹" + + #: c-decl.c:3431 + #, c-format + msgid "typedef `%s' is initialized" + msgstr "typedef `%s' ¤¬½é´ü²½¤µ¤ì¤Þ¤·¤¿" + + #: c-decl.c:3438 + #, c-format + msgid "function `%s' is initialized like a variable" + msgstr "´Ø¿ô `%s' ¤¬ÊÑ¿ô¤Ç¤¢¤ë¤«¤Î¤è¤¦¤Ë½é´ü²½¤µ¤ì¤Þ¤·¤¿" + + #. DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE. + #: c-decl.c:3445 + #, c-format + msgid "parameter `%s' is initialized" + msgstr "²¾°ú¿ô `%s' ¤¬½é´ü²½¤µ¤ì¤Þ¤·¤¿" + + #: c-decl.c:3465 c-typeck.c:4870 + msgid "variable-sized object may not be initialized" + msgstr "²ÄÊÑĹ¥ª¥Ö¥¸¥§¥¯¥È¤Ï½é´ü²½¤µ¤ì¤Ê¤¤¤³¤È¤Ë¤Ê¤ë¤Ç¤·¤ç¤¦" + + #: c-decl.c:3471 + #, c-format + msgid "variable `%s' has initializer but incomplete type" + msgstr "ÊÑ¿ô `%s' ¤Ë¤Ï½é´ü²½»Ò¤¬¤¢¤ê¤Þ¤¹¤¬¡¢ÉÔ´°Á´·¿¤Ç¤¹" + + #: c-decl.c:3477 + #, c-format + msgid "elements of array `%s' have incomplete type" + msgstr "ÇÛÎó `%s' ¤ÎÍ×ÁǤËÉÔ´°Á´·¿¤¬¤¢¤ê¤Þ¤¹" + + #: c-decl.c:3490 + #, c-format + msgid "declaration of `%s' has `extern' and is initialized" + msgstr "`%s' ¤ÎÀë¸À¤Ë `extern' ¤¬¤Ä¤¤¤Æ¤ª¤ê¡¢½é´ü²½¤â¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: c-decl.c:3525 c-decl.c:6150 cp/decl.c:7241 cp/decl.c:13502 + #, fuzzy, c-format + msgid "inline function `%s' given attribute noinline" + msgstr "ÁȤ߹þ¤ß´Ø¿ô `%s' ¤ÏÈó´Ø¿ô¤È¤·¤ÆÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: c-decl.c:3606 + #, c-format + msgid "initializer fails to determine size of `%s'" + msgstr "½é´ü²½»Ò¤Ï `%s' ¤Î¥µ¥¤¥º¤ÎÆÃÄê¤Ë¼ºÇÔ¤·¤Þ¤·¤¿" + + #: c-decl.c:3611 + #, c-format + msgid "array size missing in `%s'" + msgstr "`%s' ¤Ç¤ÎÇÛÎó¥µ¥¤¥º¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: c-decl.c:3627 + #, c-format + msgid "zero or negative size array `%s'" + msgstr "`%s' ¤ÎÇÛÎó¥µ¥¤¥º¤¬¥¼¥íËô¤ÏÉé¤Ç¤¹" + + #: c-decl.c:3655 ch/decl.c:4133 + #, c-format + msgid "storage size of `%s' isn't known" + msgstr "`%s' ¤ÎÎΰ襵¥¤¥º¤¬¤ï¤«¤ê¤Þ¤»¤ó" + + #: c-decl.c:3665 + #, c-format + msgid "storage size of `%s' isn't constant" + msgstr "`%s' ¤ÎÎΰ襵¥¤¥º¤¬°ìÄê¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: c-decl.c:3724 + #, c-format + msgid "ignoring asm-specifier for non-static local variable `%s'" + msgstr "Èó static ¥í¡¼¥«¥ëÊÑ¿ô `%s' ¤Ø¤Î asm »ØÄê»Ò¤Ï̵»ë¤µ¤ì¤Þ¤¹" + + #: c-decl.c:3799 + #, fuzzy, c-format + msgid "ISO C forbids parameter `%s' shadowing typedef" + msgstr "ANSI C ¤Ï typedef ¤òʤ¤¤±£¤¹²¾°ú¿ô `%s' ¤ò¶Ø¤¸¤Æ¤¤¤Þ¤¹" + + #: c-decl.c:4095 cp/decl.c:10038 + msgid "`long long long' is too long for GCC" + msgstr "`long long long' ¤Ï GCC ¤Ë¤È¤Ã¤ÆÄ¹¤¹¤®¤Þ¤¹" + + #: c-decl.c:4100 + msgid "ISO C89 does not support `long long'" + msgstr "ISO C89 ¤Ï `long long' ¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó" + + #: c-decl.c:4105 cp/decl.c:10043 + #, c-format + msgid "duplicate `%s'" + msgstr "`%s' ¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹" + + #: c-decl.c:4111 cp/decl.c:10067 + #, c-format + msgid "two or more data types in declaration of `%s'" + msgstr "`%s' ¤ÎÀë¸À¤ËÆó¤Ä°Ê¾å¤Î¥Ç¡¼¥¿·¿¤¬»ØÄꤵ¤ì¤Þ¤·¤¿" + + #: c-decl.c:4126 cp/decl.c:10072 + #, c-format + msgid "`%s' fails to be a typedef or built in type" + msgstr "`%s' ¤ò typedef ¤Þ¤¿¤ÏÁȤ߹þ¤ß·¿¤Ë¤Ç¤­¤Þ¤»¤ó" + + #: c-decl.c:4165 + #, c-format + msgid "type defaults to `int' in declaration of `%s'" + msgstr "`%s' ¤ÎÀë¸À¤Ç·¿¤¬¥Ç¥Õ¥©¥ë¥È¤Î `int' ¤È¤µ¤ì¤Þ¤·¤¿" + + #: c-decl.c:4194 + #, c-format + msgid "both long and short specified for `%s'" + msgstr "`%s' ¤ËÂФ·¤Æ long ¤È short ¤ÎξÊý¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤¹" + + #: c-decl.c:4198 cp/decl.c:10186 + #, c-format + msgid "long or short specified with char for `%s'" + msgstr "`%s' ¤ËÂФ·¤Æ char ¤È¤È¤â¤Ë long ¤Þ¤¿¤Ï short ¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤¹" + + #: c-decl.c:4205 cp/decl.c:10190 + #, c-format + msgid "long or short specified with floating type for `%s'" + msgstr "`%s' ¤ËÂФ·¤ÆÉâÆ°¾®¿ô·¿¤È¤È¤â¤Ë long ¤Þ¤¿¤Ï short ¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤¹" + + #: c-decl.c:4208 + msgid "the only valid combination is `long double'" + msgstr "Í£°ì¤ÎÍ­¸ú¤ÊÁȹç¤ï¤»¤Ï `long double' ¤Ç¤¹" + + #: c-decl.c:4214 + #, c-format + msgid "both signed and unsigned specified for `%s'" + msgstr "`%s' ¤ËÂФ·¤ÆÉ乿¤¢¤ê¤ÈÉ乿¤Ê¤·¤ÎξÊý¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤¹" + + #: c-decl.c:4216 cp/decl.c:10179 + #, c-format + msgid "long, short, signed or unsigned invalid for `%s'" + msgstr "`%s' ¤ËÂФ·¤Æ long, short, signed ¤Þ¤¿¤Ï unsigned ¤ÏÉÔŬÀڤǤ¹" + + #: c-decl.c:4222 cp/decl.c:10199 + #, c-format + msgid "long, short, signed or unsigned used invalidly for `%s'" + msgstr "`%s' ¤ËÂФ¹¤ë long, short, singed ¤ä unsigned ¤Î»ÈÍѤÏÉÔŬÀڤǤ¹" + + #: c-decl.c:4241 cp/decl.c:10220 + #, c-format + msgid "complex invalid for `%s'" + msgstr "`%s' ¤ËÂФ·¤Æ complex ¤ÏÉÔŬÀڤǤ¹" + + #: c-decl.c:4286 + msgid "ISO C89 does not support complex types" + msgstr "ISO C89 ¤Ï complex ·¿¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó" + + #: c-decl.c:4298 + msgid "ISO C does not support plain `complex' meaning `double complex'" + msgstr "ISO C ¤Ï `double complex' ¤ò°ÕÌ£¤¹¤ë̵½¤¾þ¤Î `complex' ¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó" + + #: c-decl.c:4304 c-decl.c:4316 + msgid "ISO C does not support complex integer types" + msgstr "ISO C ¤ÏÀ°¿ô·¿¤Î complex ¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó" + + #: c-decl.c:4331 c-decl.c:4770 cp/decl.c:10822 + msgid "duplicate `const'" + msgstr "½ÅÊ£¤·¤¿ `const'" + + #: c-decl.c:4333 c-decl.c:4774 cp/decl.c:10826 + msgid "duplicate `restrict'" + msgstr "½ÅÊ£¤·¤¿¥é¥Ù¥ë `restrict'" + + #: c-decl.c:4335 c-decl.c:4772 cp/decl.c:10824 + msgid "duplicate `volatile'" + msgstr "½ÅÊ£¤·¤¿ `volatile'" + + #: c-decl.c:4357 cp/decl.c:10371 + #, c-format + msgid "multiple storage classes in declaration of `%s'" + msgstr "`%s' ¤ÎÀë¸À¤Ë¤ª¤¤¤ÆÊ£¿ô¤ÎÊݸ¥¯¥é¥¹" + + #: c-decl.c:4366 + msgid "function definition declared `auto'" + msgstr "´Ø¿ô¤ÎÄêµÁ¤¬ `auto' ¤ÈÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: c-decl.c:4368 + msgid "function definition declared `register'" + msgstr "´Ø¿ô¤ÎÄêµÁ¤¬ `register' ¤ÈÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: c-decl.c:4370 + msgid "function definition declared `typedef'" + msgstr "´Ø¿ô¤ÎÄêµÁ¤¬ `typedef' ¤ÈÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: c-decl.c:4383 + #, c-format + msgid "storage class specified for structure field `%s'" + msgstr "¹½Â¤ÂÎ¥Õ¥£¡¼¥ë¥É `%s' ¤Ë»ØÄꤵ¤ì¤¿µ­²±¥¯¥é¥¹" + + #: c-decl.c:4387 cp/decl.c:10418 + #, c-format + msgid "storage class specified for parameter `%s'" + msgstr "²¾°ú¿ô `%s' ¤Ç»ØÄꤵ¤ì¤¿µ­²±¥¯¥é¥¹" + + #: c-decl.c:4390 cp/decl.c:10420 + msgid "storage class specified for typename" + msgstr "·¿Ì¾¤ËÂФ·¤Æ»ØÄꤵ¤ì¤¿µ­²±¥¯¥é¥¹" + + #: c-decl.c:4402 cp/decl.c:10434 + #, c-format + msgid "`%s' initialized and declared `extern'" + msgstr "`%s' ¤¬½é´ü²½¤µ¤ì¤ë¤È¤³¤í¤Ç¡¢`extern' Àë¸À¤µ¤ì¤Þ¤·¤¿" + + #: c-decl.c:4404 cp/decl.c:10437 + #, c-format + msgid "`%s' has both `extern' and initializer" + msgstr "`%s' ¤Ë `extern' ¤È½é´ü²½»Ò¤ÎξÊý¤¬¤¢¤ê¤Þ¤¹" + + #: c-decl.c:4408 cp/decl.c:10441 + #, c-format + msgid "nested function `%s' declared `extern'" + msgstr "¥Í¥¹¥È¤·¤¿´Ø¿ô `%s' ¤Ï `extern' ¤ËÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: c-decl.c:4411 cp/decl.c:10445 + #, c-format + msgid "top-level declaration of `%s' specifies `auto'" + msgstr "`%s' ¤Î¥È¥Ã¥×¥ì¥Ù¥ë¤ÎÀë¸À¤¬ `auto' ¤ò»ØÄꤷ¤Þ¤¹" + + #. Only the innermost declarator (making a parameter be of + #. array type which is converted to pointer type) + #. may have static or type qualifiers. + #: c-decl.c:4446 c-decl.c:4635 + #, fuzzy + msgid "static or type qualifiers in non-parameter array declarator" + msgstr "²¾°ú¿ôÀë¸À¤ÎÃæ¤Îµ­²±¥¯¥é¥¹»ØÄê»Ò¤Ï̵¸ú¤Ç¤¹" + + #: c-decl.c:4490 + #, c-format + msgid "declaration of `%s' as array of voids" + msgstr "`%s' ¤ÎÀë¸À¤Ï void ¤ÎÇÛÎó" + + #: c-decl.c:4496 + #, c-format + msgid "declaration of `%s' as array of functions" + msgstr "`%s' ¤ÎÀë¸À¤Ï´Ø¿ô¤ÎÇÛÎó" + + #: c-decl.c:4517 + #, c-format + msgid "size of array `%s' has non-integer type" + msgstr "ÇÛÎó `%s' ¤ÎÂ礭¤µ¤ÏÈóÀ°¿ô·¿" + + #: c-decl.c:4522 + #, c-format + msgid "ISO C forbids zero-size array `%s'" + msgstr "ISO C ¤Ï ¥µ¥¤¥º 0 ¤ÎÇÛÎó `%s' ¤ò¶Ø¤¸¤Þ¤¹" + + #: c-decl.c:4529 + #, c-format + msgid "size of array `%s' is negative" + msgstr "ÇÛÎó `%s' ¤ÎÂ礭¤µ¤¬Éé¤Ç¤¹" + + #: c-decl.c:4542 + #, c-format + msgid "ISO C89 forbids array `%s' whose size can't be evaluated" + msgstr "ISO C89 ¤Ï¥µ¥¤¥º¤¬É¾²Á¤Ç¤­¤Ê¤¤ÇÛÎó `%s' ¤ò¶Ø¤¸¤Þ¤¹" + + #: c-decl.c:4545 + #, c-format + msgid "ISO C89 forbids variable-size array `%s'" + msgstr "ISO C89 ¤Ï²ÄÊÑĹ¥µ¥¤¥º¤ÎÇÛÎó `%s' ¤ò¶Ø¤¸¤Þ¤¹" + + #: c-decl.c:4575 c-decl.c:4796 cp/decl.c:11043 + #, c-format + msgid "size of array `%s' is too large" + msgstr "ÇÛÎó `%s' ¤ÎÂ礭¤µ¤¬Â礭¤¹¤®¤Þ¤¹" + + #: c-decl.c:4592 + msgid "ISO C89 does not support flexible array members" + msgstr "ISO C89 ¤Ï²ÄÊÑÇÛÎó¥á¥ó¥Ð¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó" + + #: c-decl.c:4602 + msgid "array type has incomplete element type" + msgstr "ÇÛÎó¤Î·¿¤¬ÉÔ´°Á´Í×ÁÇ·¿¤ò»ý¤Ã¤Æ¤¤¤Þ¤¹" + + #: c-decl.c:4609 c-decl.c:4846 + msgid "ISO C forbids const or volatile function types" + msgstr "ISO C ¤Ï const ¤ä volatile ¤Î´Ø¿ô·¿¤ò¶Ø¤¸¤Þ¤¹" + + #: c-decl.c:4655 cp/decl.c:10582 + #, c-format + msgid "`%s' declared as function returning a function" + msgstr "`%s' ¤Ï´Ø¿ô¤òÊÖ¤¹´Ø¿ô¤È¤·¤ÆÀë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: c-decl.c:4660 cp/decl.c:10587 + #, c-format + msgid "`%s' declared as function returning an array" + msgstr "`%s' ¤ÏÇÛÎó¤òÊÖ¤¹´Ø¿ô¤È¤·¤ÆÀë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: c-decl.c:4695 + msgid "ISO C forbids qualified void function return type" + msgstr "ISO C ¤Ï½¤¾þÉÕ¤­ void ·¿¤ÎÌá¤êÃͤò»ý¤Ä´Ø¿ô¤ò¶Ø¤¸¤Þ¤¹" + + #: c-decl.c:4699 + msgid "type qualifiers ignored on function return type" + msgstr "´Ø¿ôÌá¤êÃͤη¿½¤¾þ»Ò¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿" + + #: c-decl.c:4728 c-decl.c:4811 c-decl.c:4935 c-decl.c:5029 + msgid "ISO C forbids qualified function types" + msgstr "ISO C ¤Ï´Ø¿ô¤Î·¿½¤¾þ»Ò¤ò¶Ø¤¸¤Þ¤¹" + + #: c-decl.c:4768 cp/decl.c:10818 + msgid "invalid type modifier within pointer declarator" + msgstr "¥Ý¥¤¥ó¥¿Àë¸À»Ò¤ËÉÔŬÀڤʷ¿½¤¾þ»Ò" + + #: c-decl.c:4866 cp/decl.c:11326 + #, c-format + msgid "variable or field `%s' declared void" + msgstr "ÊÑ¿ô¤Þ¤¿¤ÏÎΰè `%s' ¤Ï void ¤ÈÀë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: c-decl.c:4899 + #, fuzzy + msgid "attributes in parameter array declarator ignored" + msgstr "²¾°ú¿ôÀë¸À¤ÎÃæ¤Ç `::' ¤ò»È¤¨¤Þ¤»¤ó" + + #: c-decl.c:4924 + #, fuzzy + msgid "invalid type modifier within array declarator" + msgstr "¥Ý¥¤¥ó¥¿Àë¸À»Ò¤ËÉÔŬÀڤʷ¿½¤¾þ»Ò" + + #: c-decl.c:4973 + #, c-format + msgid "field `%s' declared as a function" + msgstr "Îΰè `%s' ¤Ï´Ø¿ô¤È¤·¤ÆÀë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: c-decl.c:4979 + #, c-format + msgid "field `%s' has incomplete type" + msgstr "Îΰè `%s' ¤ÏÉÔ´°Á´¤Ê·¿¤Ç¤¹" + + #: c-decl.c:5011 c-decl.c:5013 c-decl.c:5020 + #, c-format + msgid "invalid storage class for function `%s'" + msgstr "´Ø¿ô `%s' ¤ËÂФ·¤ÆÉÔŬÀÚ¤ÊÊݸ¥¯¥é¥¹" + + #: c-decl.c:5035 + msgid "`noreturn' function returns non-void value" + msgstr "`noreturn' ´Ø¿ô¤¬Èó void ÃͤòÊÖ¤·¤Æ¤¤¤Þ¤¹" + + #: c-decl.c:5047 + msgid "cannot inline function `main'" + msgstr "`main' ¤ò inline ´Ø¿ô¤Ë¤Ï¤Ç¤­¤Þ¤»¤ó" + + #: c-decl.c:5093 + #, c-format + msgid "variable `%s' declared `inline'" + msgstr "ÊÑ¿ô `%s' ¤¬ `inline' ¤ÈÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: c-decl.c:5166 c-decl.c:6202 + msgid "function declaration isn't a prototype" + msgstr "´Ø¿ôÀë¸À¤Ï¥×¥í¥È¥¿¥¤¥×¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: c-decl.c:5172 + msgid "parameter names (without types) in function declaration" + msgstr "´Ø¿ôÀë¸ÀÃæ¤Ë¡Ê·¿¤Î̵¤¤¡Ë²¾°ú¿ô̾¤¬¤¢¤ê¤Þ¤¹" + + #: c-decl.c:5204 c-decl.c:6593 + #, c-format + msgid "parameter `%s' has incomplete type" + msgstr "²¾°ú¿ô `%s' ¤ÏÉÔ´°Á´·¿¤Ç¤¹" + + #: c-decl.c:5207 + msgid "parameter has incomplete type" + msgstr "²¾°ú¿ô¤¬ÉÔ´°Á´·¿¤Ç¤¹" + + #: c-decl.c:5228 + #, c-format + msgid "parameter `%s' points to incomplete type" + msgstr "²¾°ú¿ô `%s' ¤ÏÉÔ´°Á´·¿¤ò»Ø¤·¤Æ¤¤¤Þ¤¹" + + #: c-decl.c:5231 + msgid "parameter points to incomplete type" + msgstr "²¾°ú¿ô¤¬ÉÔ´°Á´·¿¤ò»Ø¤·¤Æ¤¤¤Þ¤¹" + + #: c-decl.c:5296 + #, c-format + msgid "parameter `%s' has just a forward declaration" + msgstr "²¾°ú¿ô `%s' ¾¯¤·Á°Êý¤ÇÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: c-decl.c:5337 + msgid "`void' in parameter list must be the entire list" + msgstr "²¾°ú¿ô¥ê¥¹¥ÈÃæ¤Î `void' ¤Ï¥ê¥¹¥ÈÁ´ÂΤòÀê¤á¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: c-decl.c:5368 + #, fuzzy, c-format + msgid "`struct %s' declared inside parameter list" + msgstr "`%s %s' ¤Ï²¾°ú¿ô¥ê¥¹¥ÈÆâ¤ÇÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: c-decl.c:5371 + #, fuzzy, c-format + msgid "`union %s' declared inside parameter list" + msgstr "`%s %s' ¤Ï²¾°ú¿ô¥ê¥¹¥ÈÆâ¤ÇÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: c-decl.c:5374 + #, fuzzy, c-format + msgid "`enum %s' declared inside parameter list" + msgstr "`%s %s' ¤Ï²¾°ú¿ô¥ê¥¹¥ÈÆâ¤ÇÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: c-decl.c:5381 + msgid "anonymous struct declared inside parameter list" + msgstr "̵̾¹½Â¤ÂΤ¬²¾°ú¿ô¥ê¥¹¥ÈÆâ¤ÇÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: c-decl.c:5383 + msgid "anonymous union declared inside parameter list" + msgstr "̵̾¶¦ÍÑÂΤ¬²¾°ú¿ô¥ê¥¹¥ÈÆâ¤ÇÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: c-decl.c:5385 + msgid "anonymous enum declared inside parameter list" + msgstr "̵̾Îóµó»Ò¤¬²¾°ú¿ô¥ê¥¹¥ÈÆâ¤ÇÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: c-decl.c:5389 + #, fuzzy + msgid "its scope is only this definition or declaration, which is probably not what you want" + msgstr "¤½¤Î¥¹¥³¡¼¥×¤ÏÄêµÁ¤«Àë¸À¤À¤±¤Ç¤¹¡¢¶²¤é¤¯Ë¾¤ó¤À¤³¤È¤È°Û¤Ê¤ë¤Ç¤·¤ç¤¦¡£" + + #: c-decl.c:5468 + #, fuzzy, c-format + msgid "redefinition of `union %s'" + msgstr "`%s' ¤¬ºÆÄêµÁ¤µ¤ì¤Þ¤·¤¿" + + #: c-decl.c:5471 + #, fuzzy, c-format + msgid "redefinition of `struct %s'" + msgstr "`%s %s' ¤ÎºÆÄêµÁ" + + #: c-decl.c:5510 + msgid "unnamed fields of type other than struct or union are not allowed" + msgstr "" + + #: c-decl.c:5551 c-decl.c:5554 + #, c-format + msgid "%s defined inside parms" + msgstr "%s¤¬²¾°ú¿ôÆâ¤ÇÄêµÁ¤µ¤ì¤Þ¤·¤¿" + + #: c-decl.c:5552 c-decl.c:5555 c-decl.c:5566 + msgid "union" + msgstr "¶¦ÍÑÂÎ" + + #: c-decl.c:5552 c-decl.c:5555 + msgid "structure" + msgstr "¹½Â¤ÂÎ" + + #: c-decl.c:5565 + #, c-format + msgid "%s has no %s" + msgstr "%s¤¬%s¤ò»ý¤Ã¤Æ¤¤¤Þ¤»¤ó" + + #: c-decl.c:5566 + msgid "struct" + msgstr "¹½Â¤ÂÎ" + + #: c-decl.c:5567 + msgid "named members" + msgstr "̾Á°ÉÕ¤­¥á¥ó¥Ð" + + #: c-decl.c:5567 + msgid "members" + msgstr "¥á¥ó¥Ð" + + #: c-decl.c:5606 + #, c-format + msgid "nested redefinition of `%s'" + msgstr "`%s' ¤Î¥Í¥¹¥È¤·¤¿ºÆÄêµÁ" + + #: c-decl.c:5619 + #, c-format + msgid "bit-field `%s' width not an integer constant" + msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É `%s' ¤ÎÉý¤¬À°¿ôÄê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: c-decl.c:5630 + #, c-format + msgid "bit-field `%s' has invalid type" + msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É `%s' ¤ÏÉÔŬÀڤʷ¿¤ò»ý¤Ã¤Æ¤¤¤Þ¤¹" + + #: c-decl.c:5642 + #, c-format + msgid "bit-field `%s' type invalid in ISO C" + msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É `%s' ·¿¤Ï ISO C ¤Ç¤ÏÉÔŬÀڤǤ¹" + + #: c-decl.c:5654 + #, c-format + msgid "negative width in bit-field `%s'" + msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É `%s' ¤ÎÉý¤¬Éé¤Î¿ô¤Ç¤¹" + + #: c-decl.c:5656 + #, c-format + msgid "width of `%s' exceeds its type" + msgstr "`%s' ¤ÎÉý¤Ï¤½¤Î·¿¤Î¥µ¥¤¥º¤òͤ¨¤Æ¤¤¤Þ¤¹" + + #: c-decl.c:5658 + #, c-format + msgid "zero width for bit-field `%s'" + msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É `%s' ¤ÎÉý¤¬ 0 ¤Ç¤¹" + + #: c-decl.c:5672 + #, c-format + msgid "`%s' is narrower than values of its type" + msgstr "`%s' ¤Ï¤½¤Î·¿¤ÎÃͤè¤ê¤â¶¹¤¤¤Ç¤¹" + + #: c-decl.c:5717 + msgid "flexible array member in union" + msgstr "¶¦ÍÑÂΤ˲ÄÊÑÇÛÎó¥á¥ó¥Ð¤¬¤¢¤ê¤Þ¤¹" + + #: c-decl.c:5719 + msgid "flexible array member not at end of struct" + msgstr "¹½Â¤ÂΤκǸå¤Ç¤Ï¤Ê¤¤½ê¤Ë²ÄÊÑÇÛÎó¥á¥ó¥Ð¤¬¤¢¤ê¤Þ¤¹" + + #: c-decl.c:5721 + msgid "flexible array member in otherwise empty struct" + msgstr "¹½Â¤ÂΤ˲ÄÊÑÇÛÎó¥á¥ó¥Ð°Ê³°¤Î¥á¥ó¥Ð¤¬¤¢¤ê¤Þ¤»¤ó" + + #: c-decl.c:5746 ch/typeck.c:3060 + #, c-format + msgid "duplicate member `%s'" + msgstr "½ÅÊ£¤·¤¿¥á¥ó¥Ð `%s'" + + #: c-decl.c:5790 + msgid "union cannot be made transparent" + msgstr "¶¦ÍÑÂΤòÆ©²áŪ¤Ë¤Ç¤­¤Þ¤»¤ó" + + #. This enum is a named one that has been declared already. + #: c-decl.c:5884 + #, c-format + msgid "redeclaration of `enum %s'" + msgstr "`enum %s' ¤ÎºÆÀë¸À" + + #: c-decl.c:5918 + msgid "enum defined inside parms" + msgstr "²¾°ú¿ôÆâ¤Ç enum ¤¬ÄêµÁ¤µ¤ì¤Þ¤·¤¿" + + #: c-decl.c:5951 + msgid "enumeration values exceed range of largest integer" + msgstr "Îóµó»Ò¤ÎÃͤ¬À°¿ô¤ÎÈϰϤκÇÂçÃͤòͤ¨¤Þ¤·¤¿" + + #: c-decl.c:6060 ch/decl.c:4437 + #, c-format + msgid "enumerator value for `%s' not integer constant" + msgstr "`%s' ¤ÎÎóµóÃͤ¬À°¿ôÄê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: c-decl.c:6073 ch/decl.c:4449 + msgid "overflow in enumeration values" + msgstr "ÎóµóÃͤ¬¥ª¡¼¥Ð¡¼¥Õ¥í¡¼" + + #: c-decl.c:6078 + msgid "ISO C restricts enumerator values to range of `int'" + msgstr "ISO C ¤ÏÎóµó»Ò¤ÎÃͤò `int' ¤ÎÈϰϤ˸ÂÄꤷ¤Æ¤¤¤Þ¤¹" + + #: c-decl.c:6156 + msgid "return type is an incomplete type" + msgstr "Ìá¤êÃͤη¿¤¬ÉÔ´°Á´·¿¤Ç¤¹" + + #: c-decl.c:6164 + msgid "return type defaults to `int'" + msgstr "Ìá¤êÃͤη¿¤ò¥Ç¥Õ¥©¥ë¥È¤Î `int' ¤È¤·¤Þ¤¹" + + #: c-decl.c:6211 + #, c-format + msgid "no previous prototype for `%s'" + msgstr "`%s' ¤ÎÁ°Êý¥×¥í¥È¥¿¥¤¥×¤¬¤¢¤ê¤Þ¤»¤ó" + + #: c-decl.c:6218 + #, c-format + msgid "`%s' was used with no prototype before its definition" + msgstr "`%s' ¤Ï¤½¤ÎÄêµÁ¤ÎÁ°¤Ë¥×¥í¥È¥¿¥¤¥×¤Ê¤·¤Ç»È¤ï¤ì¤Þ¤·¤¿" + + #: c-decl.c:6224 + #, c-format + msgid "no previous declaration for `%s'" + msgstr "`%s' ¤ÎÁ°ÊýÀë¸À¤¬¤¢¤ê¤Þ¤»¤ó" + + #: c-decl.c:6231 + #, c-format + msgid "`%s' was used with no declaration before its definition" + msgstr "`%s' ¤Ï¤½¤ÎÄêµÁ¤ÎÁ°¤ÇÀë¸À¤Ê¤·¤Ç»ÈÍѤµ¤ì¤Þ¤·¤¿" + + #: c-decl.c:6255 c-decl.c:6836 + #, c-format + msgid "return type of `%s' is not `int'" + msgstr "`%s' ¤ÎÌá¤êÃͤη¿¤¬ `int' ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: c-decl.c:6271 + #, c-format + msgid "first argument of `%s' should be `int'" + msgstr "`%s' ¤ÎÂè°ì°ú¿ô¤Ï `int' ¤È¤¹¤Ù¤­¤Ç¤¹" + + #: c-decl.c:6280 + #, c-format + msgid "second argument of `%s' should be `char **'" + msgstr "`%s' ¤ÎÂèÆó°ú¿ô¤Ï `char **' ¤È¤¹¤Ù¤­¤Ç¤¹" + + #: c-decl.c:6289 + #, c-format + msgid "third argument of `%s' should probably be `char **'" + msgstr "`%s' ¤ÎÂè»°°ú¿ô¤Ï¤ª¤½¤é¤¯ `char **' ¤È¤¹¤Ù¤­¤Ç¤·¤ç¤¦" + + #: c-decl.c:6298 + #, c-format + msgid "`%s' takes only zero or two arguments" + msgstr "`%s' ¤Ï 0 ¤« 2 ¸Ä¤Î°ú¿ô¤·¤«¤È¤ê¤Þ¤»¤ó" + + #: c-decl.c:6301 + #, c-format + msgid "`%s' is normally a non-static function" + msgstr "`%s' ¤ÏÄ̾Èó static ¤Ê´Ø¿ô¤Ç¤¹" + + #: c-decl.c:6411 + msgid "parm types given both in parmlist and separately" + msgstr "²¾°ú¿ô¤Î·¿¤¬¡¢²¾°ú¿ô¥ê¥¹¥È¤È¤ÏÊ̤ΤȤ³¤í¤«¤é¤âÍ¿¤¨¤é¤ì¤Æ¤¤¤Þ¤¹" + + #: c-decl.c:6432 + msgid "parameter name omitted" + msgstr "²¾°ú¿ô¤¬¾Êά¤µ¤ì¤Þ¤·¤¿" + + #: c-decl.c:6436 c-decl.c:6538 + #, c-format + msgid "parameter `%s' declared void" + msgstr "²¾°ú¿ô `%s' ¤¬ void ¤ÈÀë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: c-decl.c:6512 + msgid "parameter name missing from parameter list" + msgstr "²¾°ú¿ô¥ê¥¹¥È¤«¤é¤Î²¾°ú¿ô̾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: c-decl.c:6531 + #, c-format + msgid "multiple parameters named `%s'" + msgstr "½ÅÊ£¤·¤¿²¾°ú¿ô̾ `%s'" + + #: c-decl.c:6562 c-decl.c:6564 + #, c-format + msgid "type of `%s' defaults to `int'" + msgstr "`%s' ¤Î·¿¤ò¥Ç¥Õ¥©¥ë¥È¤Î `int' ¤È¤·¤Þ¤¹" + + #: c-decl.c:6600 + #, c-format + msgid "declaration for parameter `%s' but no such parameter" + msgstr "²¾°ú¿ô `%s' ¤ÎÀë¸À¤¬¤¢¤ê¤Þ¤¹¤¬¡¢¤½¤ó¤Ê²¾°ú¿ô¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: c-decl.c:6648 + msgid "number of arguments doesn't match prototype" + msgstr "²¾°ú¿ô¤Î¿ô¤¬¥×¥í¥È¥¿¥¤¥×¤È°ìÃפ·¤Þ¤»¤ó" + + #: c-decl.c:6678 + #, c-format + msgid "promoted argument `%s' doesn't match prototype" + msgstr "³Ê¾å¤²¤µ¤ì¤¿²¾°ú¿ô `%s' ¤Ï¥×¥í¥È¥¿¥¤¥×¤È°ìÃפ·¤Þ¤»¤ó" + + #: c-decl.c:6692 + #, c-format + msgid "argument `%s' doesn't match prototype" + msgstr "²¾°ú¿ô `%s' ¤Ï¥×¥í¥È¥¿¥¤¥×¤Ë°ìÃפ·¤Þ¤»¤ó" + + #: c-decl.c:7006 + msgid "this function may return with or without a value" + msgstr "¤³¤Î´Ø¿ô¤ÏÃͤòÊÖ¤·¤¿¤êÊÖ¤µ¤Ê¤«¤Ã¤¿¤ê¤¹¤ë¤Ç¤·¤ç¤¦" + + #: c-decl.c:7026 + #, c-format + msgid "size of return value of `%s' is %u bytes" + msgstr "`%s' ¤ÎÌá¤êÃͤΥµ¥¤¥º¤¬ %u ¥Ð¥¤¥È¤Ç¤¹" + + #: c-decl.c:7030 + #, c-format + msgid "size of return value of `%s' is larger than %d bytes" + msgstr "`%s' ¤ÎÌá¤êÃͤΥµ¥¤¥º¤¬ %d ¥Ð¥¤¥È¤è¤ê¤âÂ礭¤¯¤Ê¤ê¤Þ¤¹" + + #. If we get here, declarations have been used in a for loop without + #. the C99 for loop scope. This doesn't make much sense, so don't + #. allow it. + #: c-decl.c:7085 + msgid "`for' loop initial declaration used outside C99 mode" + msgstr "`for' ¥ë¡¼¥×¤Î½é´ü²½Àë¸À¤¬ C99 ¥â¡¼¥É°Ê³°¤Ç»È¤ï¤ì¤Þ¤·¤¿" + + #: c-decl.c:7109 + #, fuzzy, c-format + msgid "`struct %s' declared in `for' loop initial declaration" + msgstr "`%s %s' ¤¬ `for' ¥ë¡¼¥×½é´ü²½Àë¸ÀÆâ¤ÇÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: c-decl.c:7112 + #, fuzzy, c-format + msgid "`union %s' declared in `for' loop initial declaration" + msgstr "`%s %s' ¤¬ `for' ¥ë¡¼¥×½é´ü²½Àë¸ÀÆâ¤ÇÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: c-decl.c:7115 + #, fuzzy, c-format + msgid "`enum %s' declared in `for' loop initial declaration" + msgstr "`%s %s' ¤¬ `for' ¥ë¡¼¥×½é´ü²½Àë¸ÀÆâ¤ÇÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: c-decl.c:7123 + #, c-format + msgid "declaration of non-variable `%s' in `for' loop initial declaration" + msgstr "ÈóÊÑ¿ô `%s' ¤ÎÀë¸À¤¬ `for' ¥ë¡¼¥×½é´ü²½Àë¸À¤ÎÃæ¤Ë¤¢¤ê¤Þ¤¹" + + #: c-decl.c:7125 + #, c-format + msgid "declaration of static variable `%s' in `for' loop initial declaration" + msgstr "¥¹¥¿¥Æ¥£¥Ã¥¯ÊÑ¿ô `%s' ¤ÎÀë¸À¤¬ `for' ¥ë¡¼¥×½é´ü²½Àë¸ÀÆâ¤Ë¤¢¤ê¤Þ¤¹" + + #: c-decl.c:7127 + #, c-format + msgid "declaration of `extern' variable `%s' in `for' loop initial declaration" + msgstr "`extern' ÊÑ¿ô `%s' ¤ÎÀë¸À¤¬ `for' ¥ë¡¼¥×½é´ü²½Àë¸ÀÆâ¤Ë¤¢¤ê¤Þ¤¹" + + #: c-format.c:128 c-format.c:210 + msgid "format string arg not a string type" + msgstr "¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó°ú¿ô¤¬Ê¸»úÎ󷿤ǤϤ¢¤ê¤Þ¤»¤ó" + + #: c-format.c:143 + msgid "args to be formatted is not '...'" + msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È¤µ¤ì¤ë°ú¿ô¤¬¡¢'...' ¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤»¤ó" + + #: c-format.c:152 + msgid "strftime formats cannot format arguments" + msgstr "strftime ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ï°ú¿ô¤ò¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç¤­¤Þ¤»¤ó" + + #: c-format.c:187 c-format.c:289 + msgid "format string has invalid operand number" + msgstr "¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó¤ËÉÔŬÀڤʥª¥Ú¥é¥ó¥É¿ô¤¬¤¢¤ê¤Þ¤¹" + + #: c-format.c:221 + msgid "function does not return string type" + msgstr "´Ø¿ô¤¬Ê¸»úÎ󷿤òÊÖ¤·¤Þ¤»¤ó" + + #: c-format.c:252 + msgid "unrecognized format specifier" + msgstr "ǧ¼±¤Ç¤­¤Ê¤¤¥Õ¥©¡¼¥Þ¥Ã¥È»ØÄê»Ò" + + #: c-format.c:265 + #, c-format + msgid "`%s' is an unrecognized format function type" + msgstr "`%s' ¤Ïǧ¼±¤Ç¤­¤Ê¤¤¥Õ¥©¡¼¥Þ¥Ã¥È´Ø¿ô·¿¤Ç¤¹" + + #: c-format.c:299 + msgid "format string arg follows the args to be formatted" + msgstr "¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó°ú¿ô¤¬¥Õ¥©¡¼¥Þ¥Ã¥È¤µ¤ì¤ë°ú¿ô¤Î¸å¤Ë³¤¤¤Æ¤¤¤Þ¤¹" + + #: c-format.c:620 + msgid "` ' flag" + msgstr "` ' ¥Õ¥é¥°" + + #: c-format.c:620 + msgid "the ` ' printf flag" + msgstr "printf ¤Î ` ' ¥Õ¥é¥°" + + #: c-format.c:621 c-format.c:692 + msgid "`+' flag" + msgstr "`+' ¥Õ¥é¥°" + + #: c-format.c:621 + msgid "the `+' printf flag" + msgstr "printf ¤Î `+' ¥Õ¥é¥°" + + #: c-format.c:622 c-format.c:668 + msgid "`#' flag" + msgstr "`#' ¥Õ¥é¥°" + + #: c-format.c:622 + msgid "the `#' printf flag" + msgstr "printf ¤Î `#' ¥Õ¥é¥°" + + #: c-format.c:623 c-format.c:666 + msgid "`0' flag" + msgstr "`0' ¥Õ¥é¥°" + + #: c-format.c:623 + msgid "the `0' printf flag" + msgstr "printf ¤Î `0' ¥Õ¥é¥°" + + #: c-format.c:624 c-format.c:665 c-format.c:695 + msgid "`-' flag" + msgstr "`-' ¥Õ¥é¥°" + + #: c-format.c:624 + msgid "the `-' printf flag" + msgstr "printf ¤Î `-' ¥Õ¥é¥°" + + #: c-format.c:625 c-format.c:649 + msgid "`'' flag" + msgstr "`'' ¥Õ¥é¥°" + + #: c-format.c:625 + msgid "the `'' printf flag" + msgstr "printf ¤Î `'' ¥Õ¥é¥°" + + #: c-format.c:626 c-format.c:650 + msgid "`I' flag" + msgstr "`I' ¥Õ¥é¥°" + + #: c-format.c:626 + msgid "the `I' printf flag" + msgstr "printf ¤Î `I' ¥Õ¥é¥°" + + #: c-format.c:627 c-format.c:647 c-format.c:669 c-format.c:696 c-format.c:1791 + msgid "field width" + msgstr "¥Õ¥£¡¼¥ë¥ÉÉý" + + #: c-format.c:627 + msgid "field width in printf format" + msgstr "printf ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç¤Î¥Õ¥£¡¼¥ë¥ÉÉý" + + #: c-format.c:628 + msgid "precision" + msgstr "ÀºÅÙ" + + #: c-format.c:628 + msgid "precision in printf format" + msgstr "printf ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç¤ÎÀºÅÙ" + + #: c-format.c:629 c-format.c:648 c-format.c:699 + msgid "length modifier" + msgstr "Ťµ½¤¾þ»Ò" + + #: c-format.c:629 + msgid "length modifier in printf format" + msgstr "printf ¥Õ¥©¡¼¥Þ¥Ã¥È¤ÎŤµ½¤¾þ»Ò" + + #: c-format.c:645 + msgid "assignment suppression" + msgstr "ÂåÆþ¤ÎÍÞÀ©" + + #: c-format.c:645 + #, fuzzy + msgid "the assignment suppression scanf feature" + msgstr "ÂåÆþ¤ÎÍÞÀ©" + + #: c-format.c:646 + msgid "`a' flag" + msgstr "`a' ¥Õ¥é¥°" + + #: c-format.c:646 + msgid "the `a' scanf flag" + msgstr "scanf ¤Î `a' ¥Õ¥é¥°" + + #: c-format.c:647 + msgid "field width in scanf format" + msgstr "scanf ¥Õ¥©¡¼¥Þ¥Ã¥È¤Î¥Õ¥£¡¼¥ë¥ÉÉý" + + #: c-format.c:648 + msgid "length modifier in scanf format" + msgstr "scanf ¥Õ¥©¡¼¥Þ¥Ã¥È¤ÎŤµ½¤¾þ»Ò" + + #: c-format.c:649 + msgid "the `'' scanf flag" + msgstr "scanf ¤Î `'' ¥Õ¥é¥°" + + #: c-format.c:650 + msgid "the `I' scanf flag" + msgstr "scanf ¤Î `I' ¥Õ¥é¥°" + + #: c-format.c:664 + msgid "`_' flag" + msgstr "`_' ¥Õ¥é¥°" + + #: c-format.c:664 + msgid "the `_' strftime flag" + msgstr "strftime ¤Î `_' ¥Õ¥é¥°" + + #: c-format.c:665 + msgid "the `-' strftime flag" + msgstr "strftime ¤Î `-' ¥Õ¥é¥°" + + #: c-format.c:666 + msgid "the `0' strftime flag" + msgstr "strftime ¤Î `^' ¥Õ¥é¥°" + + #: c-format.c:667 c-format.c:691 + msgid "`^' flag" + msgstr "`^' ¥Õ¥é¥°" + + #: c-format.c:667 + msgid "the `^' strftime flag" + msgstr "strftime ¤Î `^' ¥Õ¥é¥°" + + #: c-format.c:668 + msgid "the `#' strftime flag" + msgstr "strftime ¤Î `#' ¥Õ¥é¥°" + + #: c-format.c:669 + msgid "field width in strftime format" + msgstr "strftime ¥Õ¥©¡¼¥Þ¥Ã¥È¤Î¥Õ¥£¡¼¥ë¥ÉÉý" + + #: c-format.c:670 + msgid "`E' modifier" + msgstr "`E' ½¤¾þ»Ò" + + #: c-format.c:670 + msgid "the `E' strftime modifier" + msgstr "strftime ¤Î `E' ½¤¾þ»Ò" + + #: c-format.c:671 + msgid "`O' modifier" + msgstr "`O' ½¤¾þ»Ò" + + #: c-format.c:671 + msgid "the `O' strftime modifier" + msgstr "strftime ¤Î `O' ½¤¾þ»Ò" + + #: c-format.c:672 + msgid "the `O' modifier" + msgstr "the `O' ½¤¾þ»Ò" + + #: c-format.c:690 + msgid "fill character" + msgstr "µÍ¤áʸ»ú" + + #: c-format.c:690 + msgid "fill character in strfmon format" + msgstr "strfmon ¥Õ¥©¡¼¥Þ¥Ã¥È¤ÎµÍ¤áʸ»ú" + + #: c-format.c:691 + msgid "the `^' strfmon flag" + msgstr "strfmon ¤Î `^' ¥Õ¥é¥°" + + #: c-format.c:692 + msgid "the `+' strfmon flag" + msgstr "strfmon ¤Î `+' ¥Õ¥é¥°" + + #: c-format.c:693 + msgid "`(' flag" + msgstr "`(' ¥Õ¥é¥°" + + #: c-format.c:693 + msgid "the `(' strfmon flag" + msgstr "strfmon ¤Î `(' ¥Õ¥é¥°" + + #: c-format.c:694 + msgid "`!' flag" + msgstr "`!' ¥Õ¥é¥°" + + #: c-format.c:694 + msgid "the `!' strfmon flag" + msgstr "strfmon ¤Î `!' ¥Õ¥é¥°" + + #: c-format.c:695 + msgid "the `-' strfmon flag" + msgstr "strfmon ¤Î `-' ¥Õ¥é¥°" + + #: c-format.c:696 + msgid "field width in strfmon format" + msgstr "strfmon ¥Õ¥©¡¼¥Þ¥Ã¥È¤Î¥Õ¥£¡¼¥ë¥ÉÉý" + + #: c-format.c:697 + msgid "left precision" + msgstr "º¸ÀºÅÙ" + + #: c-format.c:697 + msgid "left precision in strfmon format" + msgstr "strfmon ¥Õ¥©¡¼¥Þ¥Ã¥È¤Îº¸ÀºÅÙ" + + #: c-format.c:698 + msgid "right precision" + msgstr "±¦ÀºÅÙ" + + #: c-format.c:698 + msgid "right precision in strfmon format" + msgstr "strfmon ¥Õ¥©¡¼¥Þ¥Ã¥È¤Î±¦ÀºÅÙ" + + #: c-format.c:699 + msgid "length modifier in strfmon format" + msgstr "strfmon ¥Õ¥©¡¼¥Þ¥Ã¥È¤ÎŤµ½¤¾þ»Ò" + + #: c-format.c:998 + #, c-format + msgid "function might be possible candidate for `%s' format attribute" + msgstr "´Ø¿ô¤Ï¶²¤é¤¯ `%s' format °À­¤Î¸õÊä¤È»×¤ï¤ì¤Þ¤¹" + + #: c-format.c:1122 c-format.c:1143 c-format.c:2201 + msgid "missing $ operand number in format" + msgstr "¥Õ¥©¡¼¥Þ¥Ã¥ÈÆâ¤Ç $ ±é»»»ÒÈÖ¹æ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: c-format.c:1153 + #, c-format + msgid "%s does not support %%n$ operand number formats" + msgstr "%s ¤Ï %%n$ ±é»»»ÒÈÖ¹æ¥Õ¥©¡¼¥Þ¥Ã¥È¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó" + + #: c-format.c:1160 + msgid "operand number out of range in format" + msgstr "±é»»»ÒÈֹ椬¥Õ¥©¡¼¥Þ¥Ã¥È¤ÎÈϰϳ°¤Ç¤¹" + + #: c-format.c:1183 + #, c-format + msgid "format argument %d used more than once in %s format" + msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È°ú¿ô %d ¤¬ %s ¥Õ¥©¡¼¥Þ¥Ã¥ÈÃæ¤ÇÆó²ó°Ê¾å»È¤ï¤ì¤Þ¤·¤¿" + + #: c-format.c:1233 + #, c-format + msgid "format argument %d unused before used argument %d in $-style format" + msgstr "$-¼°¥Õ¥©¡¼¥Þ¥Ã¥ÈÆâ¤Î¥Õ¥©¡¼¥Þ¥Ã¥È°ú¿ô %d ¤¬°ú¿ô %d ¤¬»È¤ï¤ì¤ëÁ°¤Ç̤»ÈÍѤǤ¹" + + #: c-format.c:1330 + msgid "format not a string literal, format string not checked" + msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È¤¬Ê¸»úÎó¥ê¥Æ¥é¥ë¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¤Î¤Ç¡¢¥Õ¥©¡¼¥Þ¥Ã¥È¤Ï¸¡ºº¤µ¤ì¤Þ¤»¤ó" + + #: c-format.c:1344 + msgid "format not a string literal and no format arguments" + msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È¤ÏÈóʸ»úÎó¥ê¥Æ¥é¥ë¤Ç¡¢³î¤Ä¥Õ¥©¡¼¥Þ¥Ã¥È°ú¿ô¤ò»ý¤Á¤Þ¤»¤ó" + + #: c-format.c:1346 + msgid "format not a string literal, argument types not checked" + msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È¤Ïʸ»úÎó¥ê¥Æ¥é¥ë¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¤Î¤Ç¡¢°ú¿ô¤Î·¿¤Ï¸¡ºº¤µ¤ì¤Þ¤»¤ó" + + #: c-format.c:1359 + msgid "too many arguments for format" + msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È¤Ø¤Î°ú¿ô¤¬Â¿¤¹¤®¤Þ¤¹" + + #: c-format.c:1362 + msgid "unused arguments in $-style format" + msgstr "$-¼°¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç̤»ÈÍѤΰú¿ô¤¬¤¢¤ê¤Þ¤¹" + + #: c-format.c:1365 + msgid "zero-length format string" + msgstr "Ťµ 0 ¤Î¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó" + + #: c-format.c:1368 + msgid "format is a wide character string" + msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È¤¬¥ï¥¤¥Éʸ»úÎó¤Ç¤¹" + + #: c-format.c:1371 + msgid "unterminated format string" + msgstr "½ªÃ¼¤µ¤ì¤Æ¤¤¤Ê¤¤¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó" + + #. FIXME: this warning should go away once Marc Espie's + #. __attribute__((nonnull)) patch is in. Instead, checking for + #. nonnull attributes should probably change this function to act + #. specially if info == NULL and add a res->number_null entry for + #. that case, or maybe add a function pointer to be called at + #. the end instead of hardcoding check_format_info_main. + #: c-format.c:1478 + msgid "null format string" + msgstr "¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó¤¬ null ¤Ç¤¹" + + #: c-format.c:1670 + msgid "embedded `\\0' in format" + msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë `\\0' ¤¬Ëä¤á¹þ¤Þ¤ì¤Æ¤¤¤Þ¤¹" + + #: c-format.c:1685 + #, c-format + msgid "spurious trailing `%%' in format" + msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë `%%' ¤Îº¯Àפ餷¤­¤â¤Î¤¬¤¢¤ê¤Þ¤¹" + + #: c-format.c:1724 c-format.c:1961 + #, c-format + msgid "repeated %s in format" + msgstr "¥Õ¥©¡¼¥Þ¥Ã¥ÈÃæ¤Ç %s ¤ò·«¤êÊÖ¤·¤Æ¤¤¤Þ¤¹" + + #: c-format.c:1737 + msgid "missing fill character at end of strfmon format" + msgstr "strfmon ¥Õ¥©¡¼¥Þ¥Ã¥È¤Î½ª¤ê¤ÇµÍ¤áʸ»ú¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: c-format.c:1757 c-format.c:1875 c-format.c:2155 c-format.c:2208 + msgid "too few arguments for format" + msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È¤Ø¤Î°ú¿ô¤¬¾¯¤Ê¤¹¤®¤Þ¤¹" + + #: c-format.c:1817 + #, c-format + msgid "zero width in %s format" + msgstr "%s ¤ÇÉý 0 ¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç¤¹" + + #: c-format.c:1836 + #, c-format + msgid "empty left precision in %s format" + msgstr "%s ¤Ç¶õ¤Îº¸ÀºÅÙ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç¤¹" + + #: c-format.c:1890 + msgid "field precision" + msgstr "¥Õ¥£¡¼¥ë¥ÉÀºÅÙ" + + #: c-format.c:1905 + #, c-format + msgid "empty precision in %s format" + msgstr "%s ¤Ç¶õ¤ÎÀºÅÙ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç¤¹" + + #: c-format.c:1945 + #, c-format + msgid "%s does not support the `%s' %s length modifier" + msgstr "%s ¤Ï `%s' %s Ťµ½¤¾þ»Ò¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó" + + #: c-format.c:1995 + msgid "conversion lacks type at end of format" + msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È¤Î½ª¤ê¤Ç·¿ÊÑ´¹Ê¸»ú¤¬·ç¤±¤Æ¤¤¤Þ¤¹" + + #: c-format.c:2006 + #, c-format + msgid "unknown conversion type character `%c' in format" + msgstr "¥Õ¥©¡¼¥Þ¥Ã¥ÈÆâ¤ËÉÔÌÀ¤Ê·¿ÊÑ´¹Ê¸»ú `%c' ¤¬¤¢¤ê¤Þ¤¹" + + #: c-format.c:2009 + #, c-format + msgid "unknown conversion type character 0x%x in format" + msgstr "¥Õ¥©¡¼¥Þ¥Ã¥ÈÆâ¤ËÉÔÌÀ¤Ê·¿ÊÑ´¹Ê¸»ú 0x%x ¤¬¤¢¤ê¤Þ¤¹" + + #: c-format.c:2016 + #, c-format + msgid "%s does not support the `%%%c' %s format" + msgstr "%s ¤Ï `%%%c' %s ¥Õ¥©¡¼¥Þ¥Ã¥È¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó" + + #: c-format.c:2032 + #, c-format + msgid "%s used with `%%%c' %s format" + msgstr "%s ¤¬ `%%%c' %s ¥Õ¥©¡¼¥Þ¥Ã¥È¤È°ì½ï¤Ë»È¤ï¤ì¤Þ¤·¤¿" + + #: c-format.c:2041 + #, c-format + msgid "%s does not support %s" + msgstr "%s ¤Ï %s ¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó" + + #: c-format.c:2050 + #, c-format + msgid "%s does not support %s with the `%%%c' %s format" + msgstr "%s ¤Ï %s ¤ò `%%%c' %s ¥Õ¥©¡¼¥Þ¥Ã¥È¤È°ì½ï¤Ë»È¤¦»ö¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó" + + #: c-format.c:2083 + #, c-format + msgid "%s ignored with %s and `%%%c' %s format" + msgstr "%s ¤Ï %s µÚ¤Ó `%%%c' %s ¥Õ¥©¡¼¥Þ¥Ã¥È¤È°ì½ï¤Ë»È¤¦¤È̵»ë¤µ¤ì¤Þ¤¹" + + #: c-format.c:2087 + #, c-format + msgid "%s ignored with %s in %s format" + msgstr "%s ¤Ï %s ¤ò %s ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç°ì½ï¤Ë»È¤¦¤È̵»ë¤µ¤ì¤Þ¤¹" + + #: c-format.c:2093 + #, c-format + msgid "use of %s and %s together with `%%%c' %s format" + msgstr "%s ¤È %s ¤È¤ò `%%%c' %s ¥Õ¥©¡¼¥Þ¥Ã¥È¤È°ì½ï¤Ë»È¤Ã¤Æ¤¤¤Þ¤¹" + + #: c-format.c:2097 + #, c-format + msgid "use of %s and %s together in %s format" + msgstr "%s ¤È %s ¤È¤ò %s ¥Õ¥©¡¼¥Þ¥Ã¥È¤ÎÃæ¤Ç»È¤Ã¤Æ¤¤¤Þ¤¹" + + #: c-format.c:2116 + #, c-format + msgid "`%%%c' yields only last 2 digits of year in some locales" + msgstr "`%%%c' ¤Ï¥í¥±¡¼¥ë¤Ë¤è¤Ã¤Æ¤Ï¡¢Ç¯¤Î²¼Æó·å¤À¤±¤ò¤â¤¿¤é¤·¤Þ¤¹" + + #: c-format.c:2119 + #, c-format + msgid "`%%%c' yields only last 2 digits of year" + msgstr "`%%%c' ¤Ïǯ¤Î²¼Æó·å¤À¤±¤ò¤â¤¿¤é¤·¤Þ¤¹" + + #. The end of the format string was reached. + #: c-format.c:2135 + #, c-format + msgid "no closing `]' for `%%[' format" + msgstr "`%%[' ¥Õ¥©¡¼¥Þ¥Ã¥È¤òÊĤ¸¤ë `]' ¤¬¤¢¤ê¤Þ¤»¤ó" + + #: c-format.c:2148 + #, c-format + msgid "use of `%s' length modifier with `%c' type character" + msgstr "`%s' Ťµ½¤¾þ»Ò¤ò `%c' ·¿ÊÑ´¹Ê¸»ú¤È°ì½ï¤Ë»È¤Ã¤Æ¤¤¤Þ¤¹" + + #: c-format.c:2169 + #, c-format + msgid "%s does not support the `%%%s%c' %s format" + msgstr "%s ¤Ï `%%%s%c' %s ¥Õ¥©¡¼¥Þ¥Ã¥È¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó" + + #: c-format.c:2184 + msgid "operand number specified with suppressed assignment" + msgstr "±é»»»ÒÈֹ椬ÂåÆþ¤ÎÍÞÀ©¤È¶¦¤Ë»È¤ï¤ì¤Æ¤¤¤Þ¤¹" + + #: c-format.c:2186 + msgid "operand number specified for format taking no argument" + msgstr "±é»»»ÒÈֹ椬°ú¿ô¤ò¼è¤é¤Ê¤¤¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç»ØÄꤵ¤ì¤Þ¤·¤¿" + + #: c-format.c:2305 + #, c-format + msgid "writing through null pointer (arg %d)" + msgstr "null ¥Ý¥¤¥ó¥¿¤ò½ñ¤­¹þ¤ó¤Ç¤¤¤Þ¤¹ (°ú¿ô %d)" + + #: c-format.c:2314 + #, c-format + msgid "reading through null pointer (arg %d)" + msgstr "null ¥Ý¥¤¥ó¥¿¤òÆÉ¹þ¤ó¤Ç¤¤¤Þ¤¹ (°ú¿ô %d)" + + #: c-format.c:2334 + #, c-format + msgid "writing into constant object (arg %d)" + msgstr "Äê¿ô¥ª¥Ö¥¸¥§¥¯¥È¤Ë½ñ¤­¹þ¤ó¤Ç¤¤¤Þ¤¹ (°ú¿ô %d)" + + #: c-format.c:2344 + #, c-format + msgid "extra type qualifiers in format argument (arg %d)" + msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È°ú¿ô¤Ë;ʬ¤Ê·¿½¤¾þ»Ò¤¬¤¢¤ê¤Þ¤¹ (°ú¿ô %d)" + + #: c-format.c:2351 + #, c-format + msgid "format argument is not a pointer (arg %d)" + msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È°ú¿ô¤¬¥Ý¥¤¥ó¥¿¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó (°ú¿ô %d)" + + #: c-format.c:2353 + #, c-format + msgid "format argument is not a pointer to a pointer (arg %d)" + msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È°ú¿ô¤¬¥Ý¥¤¥ó¥¿¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó (°ú¿ô %d)" + + #: c-format.c:2424 + msgid "pointer" + msgstr "" + + #: c-format.c:2426 + #, fuzzy + msgid "different type" + msgstr "̵¸ú¤Ê»²¾È·¿¤Ç¤¹" + + #: c-format.c:2447 + #, c-format + msgid "%s is not type %s (arg %d)" + msgstr "%s ¤Ï·¿ %s ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó (°ú¿ô %d)" + + #: c-format.c:2450 + #, c-format + msgid "%s format, %s arg (arg %d)" + msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È¤Ï %s ¤Ç¤¹¤¬¡¢°ú¿ô¤Ï %s ¤Ç¤¹ (°ú¿ô %d)" + + #: c-lex.c:292 + msgid "badly nested C headers from preprocessor" + msgstr "¥×¥ê¥×¥í¥»¥Ã¥µ¤«¤é°Û¾ï¤Ë¥Í¥¹¥È¤µ¤ì¤¿ C ¥Ø¥Ã¥À¤Ç¤¹" + + #: c-lex.c:342 + #, c-format + msgid "ignoring #pragma %s %s" + msgstr "#pragma %s %s ¤ò̵»ë¤·¤Þ¤¹" + + #: c-lex.c:344 + #, c-format + msgid "ignoring #pragma %s" + msgstr "#pragma %s ¤ò̵»ë¤·¤Þ¤¹" + + #: c-lex.c:394 + #, c-format + msgid "universal-character-name '\\U%08x' not valid in identifier" + msgstr "¥æ¥Ë¥Ð¡¼¥µ¥ëʸ»ú̾ `\\U%08x' ¤Ï¼±Ê̻ҤÎÃæ¤Ç¤ÏÍ­¸ú¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: c-lex.c:640 + #, c-format + msgid "universal-character-name '\\u%04x' not valid in identifier" + msgstr "¥æ¥Ë¥Ð¡¼¥µ¥ëʸ»ú̾ `\\u%04x' ¤Ï¼±Ê̻ҤÎÃæ¤Ç¤ÏÍ­¸ú¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: c-lex.c:730 + msgid "both 'f' and 'l' suffixes on floating constant" + msgstr "ÉâÆ°¾®¿ôÄê¿ô¤Ë 'f' ¤È 'l' ÀÜÈø¼­¤ÎξÊý¤¬¤¢¤ê¤Þ¤¹" + + #: c-lex.c:757 + #, c-format + msgid "floating point number exceeds range of '%s'" + msgstr "ÉâÆ°¾®¿ôÅÀ¿ô¤¬ '%s' ¤ÎÈϰϤòͤ¨¤Þ¤·¤¿" + + #: c-lex.c:787 + #, c-format + msgid "stray '%c' in program" + msgstr "¥×¥í¥°¥é¥à¤È¤·¤Æ°ï椷¤¿Ê¸»ú '%c'" + + #: c-lex.c:789 + #, c-format + msgid "stray '\\%o' in program" + msgstr "¥×¥í¥°¥é¥à¤È¤·¤Æ°ï椷¤¿Ê¸»ú '\\%o'" + + #: c-lex.c:887 + #, fuzzy + msgid "too many decimal points in floating constant" + msgstr "À°¿ôÄê¿ô¤Î¥µ¥Õ¥£¥Ã¥¯¥¹ 'l' ¤¬Â¿¤¹¤®¤Þ¤¹" + + #: c-lex.c:889 + #, fuzzy + msgid "decimal point in exponent - impossible!" + msgstr "²Äǽ¤Ç¤¢¤ì¤Ð°ÌÃÖÆÈΩ¥³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #. Possible future extension: silently ignore _ in numbers, + #. permitting cosmetic grouping - e.g. 0x8000_0000 == 0x80000000 + #. but somewhat easier to read. Ada has this? + #: c-lex.c:900 + msgid "underscore in number" + msgstr "" + + #: c-lex.c:962 + #, fuzzy + msgid "numeric constant with no digits" + msgstr "¿ôÃÍÄê¿ô¤¬´ð¿ô¤òͤ¨¤¿¥¢¥é¥Ó¥¢¿ô»ú¤ò´Þ¤ó¤Ç¤¤¤Þ¤¹" + + #: c-lex.c:965 + msgid "numeric constant contains digits beyond the radix" + msgstr "¿ôÃÍÄê¿ô¤¬´ð¿ô¤òͤ¨¤¿¥¢¥é¥Ó¥¢¿ô»ú¤ò´Þ¤ó¤Ç¤¤¤Þ¤¹" + + #: c-lex.c:976 + msgid "floating constant may not be in radix 16" + msgstr "´ð¿ô 16 ¤ÎÉâÆ°¾¯¿ôÄê¿ô¤Ïµö¤µ¤ì¤Þ¤»¤ó" + + #: c-lex.c:979 + msgid "hexadecimal floating constant has no exponent" + msgstr "16 ¿ÊÉâÆ°¾®¿ôÄê¿ô¤¬¤Ù¤­¾è¤ò»ý¤Á¤Þ¤»¤ó" + + #: c-lex.c:991 + msgid "floating constant exponent has no digits" + msgstr "ÉâÆ°¾®¿ôÄê¿ô¤Î¤Ù¤­¿ô¤¬¡¢¥¢¥é¥Ó¥¢¿ô»ú¤ò»ý¤Ã¤Æ¤¤¤Þ¤»¤ó" + + #: c-lex.c:1011 + #, fuzzy + msgid "more than one 'f' suffix on floating constant" + msgstr "Ê£¿ô¤Î 'i' ¤ä 'j' ÀÜÈø¼­¤¬À°¿ôÄê¿ô¤Ë¤Ä¤¤¤Æ¤¤¤Þ¤¹" + + #: c-lex.c:1014 + msgid "traditional C rejects the 'f' suffix" + msgstr "¸Å¤¤ C ¤Ç¤Ï 'f' ÀÜÈø¼­¤¬µñÈݤµ¤ì¤Þ¤¹" + + #: c-lex.c:1021 + #, fuzzy + msgid "more than one 'l' suffix on floating constant" + msgstr "ÉâÆ°¾®¿ôÄê¿ô¤Ë 'f' ¤È 'l' ÀÜÈø¼­¤ÎξÊý¤¬¤¢¤ê¤Þ¤¹" + + #: c-lex.c:1024 + msgid "traditional C rejects the 'l' suffix" + msgstr "¸Å¤¤ C ¤Ç¤Ï 'l' ÀÜÈø¼­¤¬µñÈݤµ¤ì¤Þ¤¹" + + #: c-lex.c:1032 + #, fuzzy + msgid "more than one 'i' or 'j' suffix on floating constant" + msgstr "Ê£¿ô¤Î 'i' ¤ä 'j' ÀÜÈø¼­¤¬À°¿ôÄê¿ô¤Ë¤Ä¤¤¤Æ¤¤¤Þ¤¹" + + #: c-lex.c:1034 c-lex.c:1128 + msgid "ISO C forbids imaginary numeric constants" + msgstr "ISO C ¤Ç¤Ïµõ¿ôÄê¿ô¤ò¶Ø¤¸¤Æ¤¤¤Þ¤¹" + + #: c-lex.c:1039 + #, fuzzy + msgid "invalid suffix on floating constant" + msgstr "ÀÜÈø¼­ '%.*s' ¤ÏÀ°¿ôÄê¿ô¤Ë¤Ï̵¸ú¤Ç¤¹" + + #. We got an exception from parse_float() + #: c-lex.c:1056 + #, fuzzy + msgid "floating constant out of range" + msgstr "À°¿ôÄê¿ô¤¬ÈϰϤò³°¤ì¤Æ¤¤¤Þ¤¹" + + #: c-lex.c:1068 + msgid "floating point number exceeds range of 'double'" + msgstr "ÉâÆ°¾®¿ôÅÀ¿ô¤¬ 'double' ¤ÎÈϰϤòͤ¨¤Æ¤¤¤Þ¤¹" + + #: c-lex.c:1097 + msgid "two 'u' suffixes on integer constant" + msgstr "2 ¤Ä¤Î 'u' ÀÜÈø¼­¤¬À°¿ôÄê¿ô¤Ë¤Ä¤¤¤Æ¤¤¤Þ¤¹" + + #: c-lex.c:1100 + msgid "traditional C rejects the 'u' suffix" + msgstr "ÅÁÅýŪ¤Ê C ¤Ç¤Ï 'u' ÀÜÈø¼­¤¬µñÈݤµ¤ì¤Þ¤¹" + + #: c-lex.c:1111 + msgid "three 'l' suffixes on integer constant" + msgstr "3 ¤Ä¤Î 'l' ÀÜÈø¼­¤¬À°¿ôÄê¿ô¤Ë¤Ä¤¤¤Æ¤¤¤Þ¤¹" + + #: c-lex.c:1113 + msgid "'lul' is not a valid integer suffix" + msgstr "'lul' ¤ÏÀµ¾ï¤ÊÀ°¿ôÀÜÈø¼­¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: c-lex.c:1115 + msgid "'Ll' and 'lL' are not valid integer suffixes" + msgstr "'Ll' ¤È 'lL' ¤ÏÀµ¾ï¤ÊÀ°¿ôÀÜÈø¼­¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: c-lex.c:1118 + msgid "ISO C89 forbids long long integer constants" + msgstr "ISO C89 ¤Ç¤Ï long long À°¿ôÄê¿ô¤ò¶Ø¤¸¤Þ¤¹" + + #: c-lex.c:1126 + msgid "more than one 'i' or 'j' suffix on integer constant" + msgstr "Ê£¿ô¤Î 'i' ¤ä 'j' ÀÜÈø¼­¤¬À°¿ôÄê¿ô¤Ë¤Ä¤¤¤Æ¤¤¤Þ¤¹" + + #: c-lex.c:1133 + #, fuzzy + msgid "invalid suffix on integer constant" + msgstr "ÀÜÈø¼­ '%.*s' ¤ÏÀ°¿ôÄê¿ô¤Ë¤Ï̵¸ú¤Ç¤¹" + + #: c-lex.c:1141 + #, c-format + msgid "integer constant is too large for this configuration of the compiler - truncated to %d bits" + msgstr "À°¿ôÄê¿ô¤¬¥³¥ó¥Ñ¥¤¥é¤Î¸½ºß¤ÎÀßÄê¤è¤êÂ礭¤¹¤®¤ë¤¿¤á¡¢%d ¥Ó¥Ã¥È¤ËÀÚ¤êµÍ¤á¤Þ¤·¤¿" + + #: c-lex.c:1231 + msgid "width of integer constant changes with -traditional" + msgstr "-traditional ¤ò¤Ä¤±¤ë¤ÈÀ°¿ôÄê¿ô¤ÎÉý¤¬ÊѤï¤ê¤Þ¤¹" + + #: c-lex.c:1233 + msgid "integer constant is unsigned in ISO C, signed with -traditional" + msgstr "À°¿ôÄê¿ô¤Ï ISO C ¤Ç¤ÏÉä¹ç̵¤·¤Ç¡¢-traditional ¤ò¤Ä¤±¤ë¤ÈÉä¹çÉÕ¤­¤Ç¤¹" + + #: c-lex.c:1235 + msgid "width of integer constant may change on other systems with -traditional" + msgstr "À°¿ôÄê¿ô¤ÎÉý¤Ï¾¤Î¥·¥¹¥Æ¥à¤Ç -traditional ¤ò¤Ä¤±¤ë¤ÈÊѤï¤ë¤Ç¤·¤ç¤¦" + + #: c-lex.c:1245 + #, c-format + msgid "integer constant larger than the maximum value of %s" + msgstr "%s ¤ÎºÇÂçÃͤè¤ê¤âÂ礭¤ÊÃͤÎÀ°¿ôÄê¿ô¤Ç¤¹" + + #: c-lex.c:1248 + msgid "an unsigned long long int" + msgstr "" + + #: c-lex.c:1249 + msgid "a long long int" + msgstr "" + + #: c-lex.c:1250 + msgid "an unsigned long int" + msgstr "" + + #: c-lex.c:1254 + msgid "decimal constant is so large that it is unsigned" + msgstr "½½¿ÊÄê¿ô¤¬¤È¤Æ¤âÂ礭¤¤¤Î¤ÇÉä¹ç̵¤·¤È¤·¤Þ¤·¤¿" + + #: c-lex.c:1263 + #, fuzzy + msgid "complex integer constant is too wide for 'complex int'" + msgstr "Ê£ÁÇ¿ô·¿À°¿ôÄê¿ô¤Ï `__complex int' ¤Ë¤È¤Ã¤Æ¹­¤¹¤®¤Þ¤¹" + + #: c-lex.c:1283 + msgid "integer constant is larger than the maximum value for its type" + msgstr "¤½¤Î·¿¤ÎºÇÂçÃͤè¤ê¤âÂ礭¤ÊÃͤÎÀ°¿ôÄê¿ô¤Ç¤¹" + + #: c-lex.c:1287 + #, c-format + msgid "missing white space after number '%.*s'" + msgstr "¿ô»ú '%.*s' ¤Î¸å¤Ë¶õÇò¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: c-lex.c:1323 cpplex.c:1867 + #, fuzzy + msgid "ignoring invalid multibyte character" + msgstr "̵¸ú¤Ê¥Þ¥ë¥Á¥Ð¥¤¥Èʸ»ú¤ò̵»ë¤·¤Þ¤¹" + + #. Like YYERROR but do call yyerror. + #: c-parse.y:56 parse.y:51 objc-parse.y:57 + msgid "syntax error" + msgstr "ʸˡ¥¨¥é¡¼" + + #: /usr/lib/bison.simple:107 + msgid "syntax error: cannot back up" + msgstr "ʸˡ¥¨¥é¡¼: ÄÉ¿ï¤Ç¤­¤Þ¤»¤ó" + + #: /usr/lib/bison.simple:358 + msgid "parser stack overflow" + msgstr "¹½Ê¸²òÀÏ´ï¤Î¥¹¥¿¥Ã¥¯¤¬°î¤ì¤Þ¤·¤¿" + + #: c-parse.y:284 objc-parse.y:306 + msgid "ISO C forbids an empty source file" + msgstr "ISO C ¤Ï¶õ¤Î¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤ò¶Ø¤¸¤Þ¤¹" + + #: c-parse.y:317 c-typeck.c:6855 ch/parse.c:2113 objc-parse.y:339 + msgid "argument of `asm' is not a constant string" + msgstr "`asm' ¤Î°ú¿ô¤¬Äê¿ôʸ»úÎó¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó " + + #: c-parse.y:325 objc-parse.y:347 + msgid "ISO C forbids data definition with no type or storage class" + msgstr "ISO C ¤Ï·¿¤äµ­²±¥¯¥é¥¹¤Î¤Ê¤¤¥Ç¡¼¥¿ÄêµÁ¤ò¶Ø¤¸¤Þ¤¹" + + #: c-parse.y:327 objc-parse.y:349 + msgid "data definition has no type or storage class" + msgstr "¥Ç¡¼¥¿ÄêµÁ¤¬·¿¤äµ­²±¥¯¥é¥¹¤ò»ý¤Ã¤Æ¤¤¤Þ¤»¤ó" + + #: c-parse.y:340 objc-parse.y:362 + msgid "ISO C does not allow extra `;' outside of a function" + msgstr "ISO C ¤Ç¤Ï´Ø¿ô³°¤Ç¤Î;ʬ¤Ê `;' ¤òµö¤·¤Þ¤»¤ó" + + #: c-parse.y:400 cppexp.c:688 + msgid "traditional C rejects the unary plus operator" + msgstr "¸Å¤¤ C ¤Ç¤Ïñ¹à¥×¥é¥¹±é»»»Ò¤òµñÈݤ·¤Þ¤¹" + + #: c-parse.y:462 objc-parse.y:484 + msgid "`sizeof' applied to a bit-field" + msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤ËŬÍѤµ¤ì¤¿ `sizeof'" + + #: c-parse.y:542 objc-parse.y:564 + msgid "ISO C forbids omitting the middle term of a ?: expression" + msgstr "ISO C ¤ÏÃæ´Ö¹à¤¬¾Êά¤µ¤ì¤¿ ?: ¼°¤ò¶Ø¤¸¤Þ¤¹" + + #: c-parse.y:589 objc-parse.y:611 + msgid "ISO C89 forbids compound literals" + msgstr "ISO C89 ¤ÏÊ£¹ç¥ê¥Æ¥é¥ë¤ò¶Ø¤¸¤Þ¤¹" + + #: c-parse.y:603 objc-parse.y:625 + msgid "ISO C forbids braced-groups within expressions" + msgstr "ISO C ¤Ï¥Ö¥ì¡¼¥¹¤Ç¤Þ¤È¤á¤é¤ì¤¿¼°¤ò¶Ø¤¸¤Þ¤¹" + + #: c-parse.y:634 objc-parse.y:656 + #, fuzzy + msgid "first argument to __builtin_choose_expr not a constant" + msgstr "`__builtin_args_info' ¤Î°ú¿ô¤ÏÄê¿ô¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: c-parse.y:677 + msgid "traditional C rejects string concatenation" + msgstr "¸Å¤¤ C ¤Ç¤Ïʸ»úÎó·ë¹ç¤òµñÈݤ·¤Þ¤¹" + + #: c-parse.y:692 objc-parse.y:728 + msgid "ISO C does not permit use of `varargs.h'" + msgstr "ISO C ¤Ç¤Ï `varargs.h' ¤ÎÍøÍѤòµö¤·¤Þ¤»¤ó" + + #: c-parse.y:953 c-parse.y:959 c-parse.y:965 c-parse.y:971 c-parse.y:992 + #: c-parse.y:998 c-parse.y:1004 c-parse.y:1010 c-parse.y:1043 c-parse.y:1049 + #: c-parse.y:1055 c-parse.y:1061 c-parse.y:1106 c-parse.y:1112 c-parse.y:1118 + #: c-parse.y:1124 parse.y:1883 parse.y:1890 parse.y:1929 objc-parse.y:989 + #: objc-parse.y:995 objc-parse.y:1001 objc-parse.y:1007 objc-parse.y:1028 + #: objc-parse.y:1034 objc-parse.y:1040 objc-parse.y:1046 objc-parse.y:1079 + #: objc-parse.y:1085 objc-parse.y:1091 objc-parse.y:1097 objc-parse.y:1142 + #: objc-parse.y:1148 objc-parse.y:1154 objc-parse.y:1160 + #, c-format + msgid "`%s' is not at beginning of declaration" + msgstr "`%s' ¤ÏÀë¸À¤Î»Ï¤Þ¤ê¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: c-parse.y:1406 objc-parse.y:1451 + msgid "ISO C forbids empty initializer braces" + msgstr "ISO C ¤Ç¤Ï¶õ¤Î½é´ü²½Íѥ֥졼¥¹¤ò¶Ø¤¸¤Þ¤¹" + + #: c-parse.y:1420 objc-parse.y:1465 + msgid "ISO C89 forbids specifying subobject to initialize" + msgstr "ISO C89 ¤Ï½é´ü²½ÍѤÎÉû¥ª¥Ö¥¸¥§¥¯¥È»ØÄê¤ò¶Ø¤¸¤Þ¤¹" + + #: c-parse.y:1423 objc-parse.y:1468 + msgid "obsolete use of designated initializer without `='" + msgstr "`=' ¤Î¤Ê¤¤¥á¥ó¥Ð»ØÌ¾½é´ü²½»Ò¤ÏÇѤì¤Þ¤·¤¿" + + #: c-parse.y:1427 objc-parse.y:1472 + msgid "obsolete use of designated initializer with `:'" + msgstr "`:' ¤ò¤Ä¤±¤ë¥á¥ó¥Ð»ØÌ¾½é´ü²½»Ò¤ÏÇѤì¤Þ¤·¤¿" + + #: c-parse.y:1456 + msgid "ISO C forbids specifying range of elements to initialize" + msgstr "ISO C ¤Ï½é´ü²½ÍѤÎÍ×ÁÇÈϰϻØÄê¤ò¶Ø¤¸¤Þ¤¹" + + #: c-parse.y:1464 c-parse.y:1494 objc-parse.y:1503 objc-parse.y:1533 + msgid "ISO C forbids nested functions" + msgstr "ISO C ¤Ï ¥Í¥¹¥È¤µ¤ì¤¿´Ø¿ô¤ò¶Ø¤¸¤Þ¤¹" + + #: c-parse.y:1668 objc-parse.y:1709 + msgid "ISO C forbids forward references to `enum' types" + msgstr "ISO C ¤Ï `enum' ·¿¤ÎÁ°Êý»²¾È¤ò¶Ø¤¸¤Þ¤¹" + + #: c-parse.y:1680 parse.y:2348 objc-parse.y:1721 + msgid "comma at end of enumerator list" + msgstr "Îóµó»Ò¥ê¥¹¥È¤ÎºÇ¸å¤Ë¥«¥ó¥Þ¤¬¤¢¤ê¤Þ¤¹" + + #: c-parse.y:1688 objc-parse.y:1729 + msgid "no semicolon at end of struct or union" + msgstr "struct ¤ä union ¤ÎºÇ¸å¤Ë¥»¥ß¥³¥í¥ó¤¬¤¢¤ê¤Þ¤»¤ó" + + #: c-parse.y:1697 objc-parse.y:1738 objc-parse.y:2784 + msgid "extra semicolon in struct or union specified" + msgstr "struct ¤ä union ¤ÎÃæ¤Ç;ʬ¤Ê¥»¥ß¥³¥í¥ó¤¬»ØÄꤵ¤ì¤Þ¤·¤¿" + + #: c-parse.y:1710 objc-parse.y:1765 + msgid "ISO C doesn't support unnamed structs/unions" + msgstr "ISO C ¤Ç¤Ï̵̾¹½Â¤ÂΤ䶦ÍÑÂΤò¼õ¤±ÉÕ¤±¤Þ¤»¤ó" + + #: c-parse.y:1719 objc-parse.y:1774 + msgid "ISO C forbids member declarations with no members" + msgstr "ISO C ¤Ï¥á¥ó¥Ð¤Î¤Ê¤¤¥á¥ó¥ÐÀë¸À¤ò¶Ø¤¸¤Þ¤¹" + + #: c-parse.y:1868 c-parse.y:1872 c-parse.y:1876 objc-parse.y:1923 + #: objc-parse.y:1927 objc-parse.y:1931 + #, fuzzy + msgid "storage class specifier in array declarator" + msgstr "²¾°ú¿ôÀë¸À¤ÎÃæ¤Îµ­²±¥¯¥é¥¹»ØÄê»Ò¤Ï̵¸ú¤Ç¤¹" + + #: c-parse.y:1891 objc-parse.y:1946 + msgid "deprecated use of label at end of compound statement" + msgstr "Ê£¹çʸ¤Î½ª¤ê¤Ç¥é¥Ù¥ë¤ò»È¤¦¤³¤È¤Ï¿ä¾©¤µ¤ì¤Þ¤»¤ó" + + #: c-parse.y:1908 objc-parse.y:1963 + msgid "ISO C89 forbids mixed declarations and code" + msgstr "ISO C89 ¤ÏÀë¸À¤È¥³¡¼¥É¤È¤Îº®¹ç¤ò¶Ø¤¸¤Þ¤¹" + + #: c-parse.y:1982 objc-parse.y:2041 + msgid "ISO C forbids label declarations" + msgstr "ISO C ¤Ï¥é¥Ù¥ëÀë¸À¤ò¶Ø¤¸¤Þ¤¹" + + #: c-parse.y:2031 parse.y:1584 objc-parse.y:2090 + msgid "braced-group within expression allowed only inside a function" + msgstr "¥Ö¥ì¡¼¥¹¤Ç¤Þ¤È¤á¤é¤ì¤¿¼°¤Ï´Ø¿ô¤ÎÆâ¦¤Ç¤Î¤ßµö¤µ¤ì¤Þ¤¹" + + #: c-parse.y:2146 objc-parse.y:2205 + msgid "empty body in an else-statement" + msgstr "else ʸ¤ÎÃæ¿È¤¬¶õ¤Ç¤¹" + + #: c-parse.y:2256 objc-parse.y:2315 + msgid "ISO C forbids `goto *expr;'" + msgstr "ISO C `goto *¼°;' ¤Î½ñ¤­Êý¤ò¶Ø¤¸¤Þ¤¹" + + #: c-parse.y:2354 objc-parse.y:2413 + msgid "ISO C forbids forward parameter declarations" + msgstr "ISO C ¤ÏÁ°Êý²¾°ú¿ôÀë¸À¤ò¶Ø¤¸¤Þ¤¹" + + #. Gcc used to allow this as an extension. However, it does + #. not work for all targets, and thus has been disabled. + #. Also, since func (...) and func () are indistinguishable, + #. it caused problems with the code in expand_builtin which + #. tries to verify that BUILT_IN_NEXT_ARG is being used + #. correctly. + #: c-parse.y:2380 objc-parse.y:2439 + msgid "ISO C requires a named argument before `...'" + msgstr "ISO C ¤Ï `...' ¤ÎÁ°¤Ë̾Á°¤ò¤Ä¤±¤é¤ì¤¿°ú¿ô¤òÍ׵ᤷ¤Þ¤¹" + + #: c-parse.y:2474 objc-parse.y:2533 + msgid "`...' in old-style identifier list" + msgstr "¸Å¤¤¥¹¥¿¥¤¥ë¤Î¼±Ê̻ҥꥹ¥È¤Ç¤Î `...'" + + #: /usr/lib/bison.simple:639 + msgid "parse error; also virtual memory exceeded" + msgstr "¹½Ê¸²òÀÏ¥¨¥é¡¼ -- ¤µ¤é¤Ë²¾ÁÛ¥á¥â¥ê¤òĶ²á¤·¤Þ¤·¤¿" + + #: /usr/lib/bison.simple:643 cp/spew.c:349 + msgid "parse error" + msgstr "¹½Ê¸²òÀÏ¥¨¥é¡¼" + + #: c-parse.y:2789 cp/spew.c:1477 objc-parse.y:3476 + #, c-format + msgid "%s at end of input" + msgstr "ÆþÎϤκǸå¤Ë %s" + + #: c-parse.y:2795 cp/spew.c:1483 objc-parse.y:3482 + #, c-format + msgid "%s before %s'%c'" + msgstr "%s ¤¬ %s'%c' ¤ÎÁ°¤Ë¤¢¤ê¤Þ¤¹" + + #: c-parse.y:2797 cp/spew.c:1485 objc-parse.y:3484 + #, c-format + msgid "%s before %s'\\x%x'" + msgstr "%s ¤¬ %s'\\x%x' ¤ÎÁ°¤Ë¤¢¤ê¤Þ¤¹" + + #: c-parse.y:2801 cp/spew.c:1489 objc-parse.y:3488 + #, c-format + msgid "%s before string constant" + msgstr "ʸ»úÎóÄê¿ô¤ÎÁ°¤Ë %s" + + #: c-parse.y:2803 cp/spew.c:1491 objc-parse.y:3490 + #, c-format + msgid "%s before numeric constant" + msgstr "¿ôÃÍÄê¿ô¤ÎÁ°¤Ë %s" + + #: c-parse.y:2805 objc-parse.y:3492 + #, c-format + msgid "%s before \"%s\"" + msgstr "%s ¤¬ \"%s\" ¤ÎÁ°¤Ë¤¢¤ê¤Þ¤¹" + + #: c-parse.y:2807 objc-parse.y:3494 + #, c-format + msgid "%s before '%s' token" + msgstr "%s ¤¬ '%s' ¥È¡¼¥¯¥ó¤ÎÁ°¤Ë¤¢¤ê¤Þ¤¹" + + #: c-parse.y:2943 objc-parse.y:3673 + #, c-format + msgid "syntax error at '%s' token" + msgstr "'%s' ¥È¡¼¥¯¥ó¤Î½ê¤Çʸˡ¥¨¥é¡¼" + + #: c-parse.y:2973 ch/parse.c:4329 cp/lex.c:910 objc-parse.y:3703 + #, fuzzy + msgid "YYDEBUG not defined" + msgstr "YYDEBUG ¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: c-pragma.c:109 + msgid "#pragma pack (pop) encountered without matching #pragma pack (push, )" + msgstr "#pragma pack (pop) ¤¬¡¢Âбþ¤¹¤ë #pragma pack (push, ) ¤Ê¤·¤Ë½Ð¸½¤·¤Þ¤·¤¿" + + #: c-pragma.c:127 + #, c-format + msgid "#pragma pack(pop, %s) encountered without matching #pragma pack(push, %s, )" + msgstr "#pragma pack(pop, %s) ¤¬¡¢Âбþ¤¹¤ë #pragma pack(push, %s) ¤Ê¤·¤Ë½Ð¸½¤·¤Þ¤·¤¿" + + #: c-pragma.c:162 + #, fuzzy + msgid "#pragma pack(push[, id], ) is not supported on this target" + msgstr "¥¹¥¿¥Ã¥¯À©¸Â¤Ï¤³¤Î¥¿¡¼¥²¥Ã¥È¤Ç¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: c-pragma.c:164 + #, fuzzy + msgid "#pragma pack(pop[, id], ) is not supported on this target" + msgstr "¥¹¥¿¥Ã¥¯À©¸Â¤Ï¤³¤Î¥¿¡¼¥²¥Ã¥È¤Ç¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: c-pragma.c:184 + #, fuzzy + msgid "missing '(' after '#pragma pack' - ignored" + msgstr "¤ª¤«¤·¤Ê #pragma align - ̵»ë¤µ¤ì¤Þ¤·¤¿" + + #: c-pragma.c:197 c-pragma.c:247 + #, fuzzy + msgid "malformed '#pragma pack' - ignored" + msgstr "¤ª¤«¤·¤Ê #pragma align - ̵»ë¤µ¤ì¤Þ¤·¤¿" + + #: c-pragma.c:202 + #, fuzzy + msgid "malformed '#pragma pack(push[, id], )' - ignored" + msgstr "¤ª¤«¤·¤Ê #pragma align - ̵»ë¤µ¤ì¤Þ¤·¤¿" + + #: c-pragma.c:204 + #, fuzzy + msgid "malformed '#pragma pack(pop[, id])' - ignored" + msgstr "¤ª¤«¤·¤Ê #pragma map¡¢Ìµ»ë¤µ¤ì¤Þ¤·¤¿" + + #: c-pragma.c:213 + #, fuzzy, c-format + msgid "unknown action '%s' for '#pragma pack' - ignored" + msgstr "'#pragma pack' ¤ÎËöÈø¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹" + + #: c-pragma.c:250 + msgid "junk at end of '#pragma pack'" + msgstr "'#pragma pack' ¤ÎËöÈø¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹" + + #: c-pragma.c:264 + #, c-format + msgid "alignment must be a small power of two, not %d" + msgstr "" + + #: c-pragma.c:290 c-pragma.c:295 + #, fuzzy + msgid "malformed #pragma weak, ignored" + msgstr "¤ª¤«¤·¤Ê #pragma map¡¢Ìµ»ë¤µ¤ì¤Þ¤·¤¿" + + #: c-pragma.c:299 + msgid "junk at end of #pragma weak" + msgstr "#pragma weak ¤ÎËöÈø¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹" + + #: c-semantics.c:532 + msgid "break statement not within loop or switch" + msgstr "break ʸ¤¬ loop ¤Þ¤¿¤Ï switch ¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤ó" + + #: c-semantics.c:550 + msgid "continue statement not within a loop" + msgstr "continue ʸ¤¬ loop ¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤ó" + + #: c-semantics.c:645 + msgid "destructor needed for `%#D'" + msgstr "`%#D' ¤Î¤¿¤á¤Î¥Ç¥¹¥È¥é¥¯¥¿¤¬É¬ÍפǤ¹" + + #: c-semantics.c:646 + msgid "where case label appears here" + msgstr "case ¥é¥Ù¥ë¤¬¸½¤ì¤¿¤Î¤Ï¤³¤³¤Ç¤¹" + + #: c-semantics.c:649 + msgid "(enclose actions of previous case statements requiring destructors in their own scope.)" + msgstr "(Á°¤Î case ʸ¤Î°Ï¤¤¹þ¤Þ¤ì¤¿Æ°ºî¤Ï¤½¤ì¼«¿È¤Î¥¹¥³¡¼¥×¤Ç¥Ç¥¹¥È¥é¥¯¥¿¤òÍ׵ᤷ¤Þ¤¹)" + + #: c-semantics.c:692 c-typeck.c:6883 cp/semantics.c:881 + #, c-format + msgid "%s qualifier ignored on asm" + msgstr "asm ¤Ç¤Ï %s ½¤¾þ»Ò¤¬Ìµ»ë¤µ¤ì¤Þ¤¹" + + #: c-typeck.c:124 + #, c-format + msgid "`%s' has an incomplete type" + msgstr "`%s' ¤ÏÉÔ´°Á´·¿¤Ç¤¹" + + #: c-typeck.c:146 cp/call.c:2586 + msgid "invalid use of void expression" + msgstr "void ¼°¤ÎÉÔŬÀڤʻÈÍÑ" + + #: c-typeck.c:155 cp/typeck2.c:227 + msgid "invalid use of array with unspecified bounds" + msgstr "¶­³¦¤¬»ØÄꤵ¤ì¤Ê¤¤ÇÛÎó¤ÎÉÔŬÀÚ¤ÊÍøÍÑ" + + #: c-typeck.c:163 + #, c-format + msgid "invalid use of undefined type `%s %s'" + msgstr "̤ÄêµÁ¤Î·¿ `%s %s' ¤Î»ÈÍѤÏÉÔŬÀڤǤ¹" + + #. If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. + #: c-typeck.c:167 + #, c-format + msgid "invalid use of incomplete typedef `%s'" + msgstr "ÉÔ´°Á´¤Ê typedef `%s' ¤Î»ÈÍѤÏÉÔŬÀڤǤ¹" + + #: c-typeck.c:398 c-typeck.c:412 + msgid "function types not truly compatible in ISO C" + msgstr "´Ø¿ô·¿¤¬ ISO C ¤È´°Á´¸ß´¹¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: c-typeck.c:572 + msgid "types are not quite compatible" + msgstr "·¿¤ÏÁ´¤¯¸ß´¹¤¬¤¢¤ê¤Þ¤»¤ó" + + #: c-typeck.c:725 + msgid "sizeof applied to a function type" + msgstr "sizeof ¤¬´Ø¿ô·¿¤ËŬÍѤµ¤ì¤Þ¤·¤¿" + + #: c-typeck.c:731 + msgid "sizeof applied to a void type" + msgstr "sizeof ¤¬ void ·¿¤ËŬÍѤµ¤ì¤Þ¤·¤¿" + + #: c-typeck.c:738 + msgid "sizeof applied to an incomplete type" + msgstr "sizeof ¤¬ÉÔ´°Á´¤Ê·¿¤ËŬÍѤµ¤ì¤Þ¤·¤¿" + + #: c-typeck.c:791 c-typeck.c:2799 + msgid "arithmetic on pointer to an incomplete type" + msgstr "ÉÔ´°Á´·¿¤Ø¤Î¥Ý¥¤¥ó¥¿¤ËÂФ¹¤ë±é»»" + + #: c-typeck.c:1179 + #, c-format + msgid "%s has no member named `%s'" + msgstr "%s ¤Ë `%s' ¤È¤¤¤¦Ì¾Á°¤Î¥á¥ó¥Ð¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: c-typeck.c:1208 + #, c-format + msgid "request for member `%s' in something not a structure or union" + msgstr "¹½Â¤ÂΤǤⶦÍÑÂΤǤâ¤Ê¤¤²¿¤«¤Ç¡¢¥á¥ó¥Ð `%s' ¤òÍ׵ᤵ¤ì¤Þ¤·¤¿" + + #: c-typeck.c:1240 ch/expr.c:810 + msgid "dereferencing pointer to incomplete type" + msgstr "ÉÔ´°Á´·¿¤Î¥Ý¥¤¥ó¥¿¤Ø¤Î´ÖÀÜ»²¾È" + + #: c-typeck.c:1244 ch/expr.c:814 + msgid "dereferencing `void *' pointer" + msgstr "`void *' ¥Ý¥¤¥ó¥¿¤Ø¤Î´ÖÀÜ»²¾È¤Ç¤¹" + + #: c-typeck.c:1261 cp/typeck.c:2376 + #, c-format + msgid "invalid type argument of `%s'" + msgstr "`%s' ¤Î°ú¿ô¤È¤·¤ÆÌµ¸ú¤Ê·¿" + + #: c-typeck.c:1280 cp/typeck.c:2402 + msgid "subscript missing in array reference" + msgstr "ÇÛÎ󻲾ȤǤÎź»ú¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:1301 cp/typeck.c:2444 + msgid "array subscript has type `char'" + msgstr "ÇÛÎó¤Îź»ú¤¬ `char' ·¿¤Ç¤¹" + + #: c-typeck.c:1309 c-typeck.c:1398 cp/typeck.c:2451 cp/typeck.c:2530 + msgid "array subscript is not an integer" + msgstr "ÇÛÎó¤Îź»ú¤¬À°¿ô·¿¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: c-typeck.c:1342 + msgid "ISO C forbids subscripting `register' array" + msgstr "ISO C ¤Ï `register' ÇÛÎ󤨤Îź»ú¤ò¶Ø¤¸¤Þ¤¹" + + #: c-typeck.c:1344 + msgid "ISO C89 forbids subscripting non-lvalue array" + msgstr "ISO C89 Èóº¸ÊÕÃÍÇÛÎ󤨤Îź»ú¤ò¶Ø¤¸¤Þ¤¹" + + #: c-typeck.c:1377 + msgid "subscript has type `char'" + msgstr "ź»ú¤¬ `char' ·¿¤ò¤â¤Á¤Þ¤¹" + + #: c-typeck.c:1393 cp/typeck.c:2525 + msgid "subscripted value is neither array nor pointer" + msgstr "ź»ú¤ò¤Ä¤±¤é¤ì¤¿Ãͤ¬ÇÛÎó¤Ç¤â¥Ý¥¤¥ó¥¿¤Ç¤â¤¢¤ê¤Þ¤»¤ó" + + #: c-typeck.c:1444 + #, c-format + msgid "`%s' undeclared here (not in a function)" + msgstr "`%s' ¤¬¤³¤³¤Ç¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó (´Ø¿ô¤ÎÃæ¤Ç¤Ï¤Ê¤¤)" + + #: c-typeck.c:1451 + #, c-format + msgid "`%s' undeclared (first use in this function)" + msgstr "`%s' ¤¬Àë¸À¤µ¤ì¤Æ¤¤¤Þ¤»¤ó (¤³¤Î´Ø¿ôÆâ¤ÇºÇ½é¤ËÍøÍÑ)" + + #: c-typeck.c:1456 + msgid "(Each undeclared identifier is reported only once" + msgstr "(̤Àë¸À¤Î³ÆÊÑ¿ô¤Ë¤Ä¤¤¤Æ¤Ï¡¢¤½¤ì¤¬ºÇ½é¤Ë¸½¤ï¤ì¤¿¤½¤ì¤¾¤ì¤Î´Ø¿ô" + + #: c-typeck.c:1457 + msgid "for each function it appears in.)" + msgstr " ¤ËÂФ·¤Æ°ìÅÙ¤À¤±Êó¹ð¤µ¤ì¤Þ¤¹¡£)" + + #: c-typeck.c:1474 + #, c-format + msgid "local declaration of `%s' hides instance variable" + msgstr "`%s' ¤Î¥í¡¼¥«¥ëÀë¸À¤Ç¡¢¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô¤¬±£¤µ¤ì¤Þ¤¹" + + #: c-typeck.c:1539 + msgid "called object is not a function" + msgstr "¸Æ¤Ó½Ð¤µ¤ì¤¿¥ª¥Ö¥¸¥§¥¯¥È¤Ï´Ø¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: c-typeck.c:1623 cp/typeck.c:3157 + msgid "too many arguments to function" + msgstr "´Ø¿ô¤ËÂФ¹¤ë°ú¿ô¤¬Â¿¤¹¤®¤Þ¤¹" + + #: c-typeck.c:1644 + #, c-format + msgid "type of formal parameter %d is incomplete" + msgstr "Àµ¼°¤Ê²¾°ú¿ô %d ¤Î·¿¤¬ÉÔ´°Á´¤Ç¤¹" + + #: c-typeck.c:1657 + #, c-format + msgid "%s as integer rather than floating due to prototype" + msgstr "¥×¥í¥È¥¿¥¤¥×¤Ë¤è¤ë¤È %s ¤ÏÉâÆ°¾®¿ô·¿¤Ç¤Ï¤Ê¤¯À°¿ô·¿¤È¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:1660 + #, c-format + msgid "%s as integer rather than complex due to prototype" + msgstr "¥×¥í¥È¥¿¥¤¥×¤Ë¤è¤ë¤È %s ¤ÏÊ£ÁÇ¿ô¤Ç¤Ï¤Ê¤¯À°¿ô·¿¤È¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:1663 + #, c-format + msgid "%s as complex rather than floating due to prototype" + msgstr "¥×¥í¥È¥¿¥¤¥×¤Ë¤è¤ë¤È %s ¤ÏÉâÆ°¾®¿ô·¿¤Ç¤Ï¤Ê¤¯Ê£ÁÇ¿ô·¿¤È¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:1666 + #, c-format + msgid "%s as floating rather than integer due to prototype" + msgstr "¥×¥í¥È¥¿¥¤¥×¤Ë¤è¤ë¤È %s ¤ÏÀ°¿ô·¿¤Ç¤Ï¤Ê¤¯ÉâÆ°¾®¿ô·¿¤È¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:1669 + #, c-format + msgid "%s as complex rather than integer due to prototype" + msgstr "¥×¥í¥È¥¿¥¤¥×¤Ë¤è¤ë¤È %s ¤ÏÀ°¿ô·¿¤Ç¤Ï¤Ê¤¯Ê£ÁÇ¿ô·¿¤È¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:1672 + #, c-format + msgid "%s as floating rather than complex due to prototype" + msgstr "¥×¥í¥È¥¿¥¤¥×¤Ë¤è¤ë¤È %s ¤ÏÊ£ÁÇ¿ô¤Ç¤Ï¤Ê¤¯ÉâÆ°¾®¿ô·¿¤È¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:1682 + #, c-format + msgid "%s as `float' rather than `double' due to prototype" + msgstr "¥×¥í¥È¥¿¥¤¥×¤Ë¤è¤ë¤È %s ¤Ï `double' ¤Ç¤Ê¤¯ `float' ¤È¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:1700 + #, c-format + msgid "%s with different width due to prototype" + msgstr "%s ¤Ï¥×¥í¥È¥¿¥¤¥×¤Ç¤Î·¿¤ÎÉý¤È¤Ï°Û¤Ê¤Ã¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:1734 + #, c-format + msgid "%s as unsigned due to prototype" + msgstr "¥×¥í¥È¥¿¥¤¥×¤Ë¤è¤ê %s ¤ÏÉä¹ç¤Ê¤·¤È¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:1736 + #, c-format + msgid "%s as signed due to prototype" + msgstr "¥×¥í¥È¥¿¥¤¥×¤Ë¤è¤ê %s ¤ÏÉä¹çÉÕ¤­¤È¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:1770 cp/typeck.c:3265 + msgid "too few arguments to function" + msgstr "´Ø¿ô¤Ø¤Î°ú¿ô¤¬¾¯¤Ê¤¹¤®¤Þ¤¹" + + #: c-typeck.c:1809 + msgid "suggest parentheses around + or - inside shift" + msgstr "¥·¥Õ¥ÈÃæ¤Î + ¤ä - ¤Î¼þ¤ê¤Ç¤Ï³ç¸Ì¤ò¤Ä¤±¤ë¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹" + + #: c-typeck.c:1816 + msgid "suggest parentheses around && within ||" + msgstr "|| ¤È¶¦¤Ë»È¤ï¤ì¤ë && ¤Î¼þ¤ê¤Ç¤Ï³ç¸Ì¤ò¤Ä¤±¤ë¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹" + + #: c-typeck.c:1825 + msgid "suggest parentheses around arithmetic in operand of |" + msgstr "·×»»¤¬ | ±é»»»Ò¤Î¹à¤È¤Ê¤ë¾ì¹ç¤Ë¤Ï³ç¸Ì¤ò¤Ä¤±¤ë¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹" + + #: c-typeck.c:1828 + msgid "suggest parentheses around comparison in operand of |" + msgstr "Èæ³Ó¤¬ | ±é»»»Ò¤Î¹à¤È¤Ê¤ë¾ì¹ç¤Ë¤Ï³ç¸Ì¤ò¤Ä¤±¤ë¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹" + + #: c-typeck.c:1837 + msgid "suggest parentheses around arithmetic in operand of ^" + msgstr "·×»»¤¬ ^ ±é»»»Ò¤Î¹à¤È¤Ê¤ë¾ì¹ç¤Ë¤Ï³ç¸Ì¤ò¤Ä¤±¤ë¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹" + + #: c-typeck.c:1840 + msgid "suggest parentheses around comparison in operand of ^" + msgstr "·×»»¤¬ ^ ±é»»»Ò¤Î¹à¤È¤Ê¤ë¾ì¹ç¤Ë¤Ï³ç¸Ì¤ò¤Ä¤±¤ë¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹" + + #: c-typeck.c:1847 + msgid "suggest parentheses around + or - in operand of &" + msgstr "& ±é»»»Ò¤Î¼þ¤ê¤Î + ¤ä - ¤Î¼þ¤ê¤Ë¤Ï³ç¸Ì¤ò¤Ä¤±¤ë¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹" + + #: c-typeck.c:1850 + msgid "suggest parentheses around comparison in operand of &" + msgstr "Èæ³Ó¤¬ & ±é»»»Ò¤Î¹à¤È¤Ê¤ë¾ì¹ç¤Ë¤Ï³ç¸Ì¤ò¤Ä¤±¤ë¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹" + + #: c-typeck.c:1857 + msgid "comparisons like X<=Y<=Z do not have their mathematical meaning" + msgstr "X<=Y<=Z ¤ÎÍͤÊÈæ³Ó¤Ï¿ô³ØÅª¤Ê°ÕÌ£¤Ç¤Î·ë²Ì¤ò¤â¤¿¤é¤·¤Þ¤»¤ó" + + #: c-typeck.c:2017 c-typeck.c:2073 ch/expr.c:3951 + #, fuzzy + msgid "division by zero" + msgstr "#if ¤Ç¥¼¥í½ü»»¤¬È¯À¸¤·¤Þ¤·¤¿" + + #: c-typeck.c:2118 cp/typeck.c:3551 + msgid "right shift count is negative" + msgstr "±¦¥·¥Õ¥È²ó¿ô¤¬Éé¤Î¿ô¤Ç¤¹" + + #: c-typeck.c:2125 cp/typeck.c:3557 + msgid "right shift count >= width of type" + msgstr "±¦¥·¥Õ¥È²ó¿ô >= ·¿¤ÎÉý¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:2150 cp/typeck.c:3576 + msgid "left shift count is negative" + msgstr "º¸¥·¥Õ¥È²ó¿ô¤¬Éé¤Î¿ô¤Ç¤¹" + + #: c-typeck.c:2153 cp/typeck.c:3578 + msgid "left shift count >= width of type" + msgstr "º¸¥·¥Õ¥È²ó¿ô >= ·¿¤ÎÉý¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:2178 + msgid "shift count is negative" + msgstr "¥·¥Õ¥È²ó¿ô¤¬Éé¤ÎÃͤǤ¹" + + #: c-typeck.c:2180 + msgid "shift count >= width of type" + msgstr "¥·¥Õ¥È²ó¿ô >= ·¿¤ÎÉý¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:2201 cp/typeck.c:3613 + msgid "comparing floating point with == or != is unsafe" + msgstr "ÉâÆ°¾®¿ôÅÀ¤ÎÈæ³Ó¤Ç == ¤ä != ¤ò»È¤¦¤Î¤Ï°ÂÁ´¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: c-typeck.c:2225 c-typeck.c:2231 + msgid "ISO C forbids comparison of `void *' with function pointer" + msgstr "ISO C ¤Ï `void *' ¤È´Ø¿ô¥Ý¥¤¥ó¥¿¤È¤ÎÈæ³Ó¤ò¶Ø¤¸¤Þ¤¹" + + #: c-typeck.c:2234 c-typeck.c:2276 c-typeck.c:2304 + msgid "comparison of distinct pointer types lacks a cast" + msgstr "·¿¤¬Á´¤¯°Û¤Ê¤ë¥Ý¥¤¥ó¥¿¤ÎÈæ³Ó¤Ç¥­¥ã¥¹¥È¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:2249 c-typeck.c:2255 c-typeck.c:2325 c-typeck.c:2331 + msgid "comparison between pointer and integer" + msgstr "¥Ý¥¤¥ó¥¿¤ÈÀ°¿ô¤È¤ÎÈæ³Ó¤ò¹Ô¤Ê¤Ã¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:2271 c-typeck.c:2299 + msgid "ISO C forbids ordered comparisons of pointers to functions" + msgstr "ISO C ´Ø¿ô¥Ý¥¤¥ó¥¿¤Î½ç½øÈæ³Ó¤ò¶Ø¤¸¤Þ¤¹" + + #: c-typeck.c:2296 + msgid "comparison of complete and incomplete pointers" + msgstr "´°Á´¤Ê¥Ý¥¤¥ó¥¿¤ÈÉÔ´°Á´¤Ê¥Ý¥¤¥ó¥¿¤È¤ÎÈæ³Ó¤Ç¤¹" + + #: c-typeck.c:2312 c-typeck.c:2319 + msgid "ordered comparison of pointer with integer zero" + msgstr "À°¿ô 0 ¤È¥Ý¥¤¥ó¥¿¤È¤Î½ç½øÈæ³Ó¤Ç¤¹" + + #: c-typeck.c:2345 cp/typeck.c:3746 + msgid "unordered comparison on non-floating point argument" + msgstr "ÈóÉâÆ°¾®¿ôÅÀ°ú¿ô¤Ç¤Î½ç½øÉÕ¤±¤é¤ì¤Ê¤¤Èæ³Ó¤Ç¤¹" + + #: c-typeck.c:2549 + msgid "comparison between signed and unsigned" + msgstr "Éä¹çÉÕ¤­¤ÈÉä¹ç̵¤·¤È¤ÎÈæ³Ó¤Ç¤¹" + + #: c-typeck.c:2595 cp/typeck.c:3992 + msgid "comparison of promoted ~unsigned with constant" + msgstr "~¤Çȿž¤µ¤ì¤¿³Ê¾å¤²Éä¹ç̵¤··¿¤ÈÄê¿ô¤È¤ÎÈæ³Ó¤Ç¤¹" + + #: c-typeck.c:2603 cp/typeck.c:4000 + msgid "comparison of promoted ~unsigned with unsigned" + msgstr "~¤Çȿž¤µ¤ì¤¿Éä¹ç̵¤··¿¤ÈÉä¹ç̵¤··¿¤È¤ÎÈæ³Ó¤Ç¤¹" + + #: c-typeck.c:2665 + msgid "pointer of type `void *' used in arithmetic" + msgstr "`void *' ·¿¤Î¥Ý¥¤¥ó¥¿¤¬·×»»¤Ç»È¤ï¤ì¤Þ¤·¤¿" + + #: c-typeck.c:2671 + msgid "pointer to a function used in arithmetic" + msgstr "´Ø¿ô¥Ý¥¤¥ó¥¿¤¬·×»»¤Ç»È¤ï¤ì¤Þ¤·¤¿" + + #: c-typeck.c:2751 + msgid "pointer of type `void *' used in subtraction" + msgstr "`void *' ·¿¤Î¥Ý¥¤¥ó¥¿¤Îº¹¤òµá¤á¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:2753 + msgid "pointer to a function used in subtraction" + msgstr "´Ø¿ô¥Ý¥¤¥ó¥¿¤Îº¹¤òµá¤á¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:2850 + msgid "wrong type argument to unary plus" + msgstr "ñ¹à¥×¥é¥¹¤Ø¤Î°ú¿ô¤Î·¿¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:2861 + msgid "wrong type argument to unary minus" + msgstr "ñ¹à¥Þ¥¤¥Ê¥¹¤Ø¤Î°ú¿ô¤Î·¿¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:2873 + msgid "ISO C does not support `~' for complex conjugation" + msgstr "ISO C ¤ÏÊ£ÁǶ¦ÌòÍѤΠ`~' ¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó" + + #: c-typeck.c:2879 + msgid "wrong type argument to bit-complement" + msgstr "¥Ó¥Ã¥Èȿž¤Ø¤Î°ú¿ô¤Î·¿¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:2890 + msgid "wrong type argument to abs" + msgstr "abs ¤Ø¤Î°ú¿ô¤Î·¿¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:2902 + msgid "wrong type argument to conjugation" + msgstr "Ê£ÁǶ¦Ìò(~)¤Ø¤Î°ú¿ô¤Î·¿¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:2916 + msgid "wrong type argument to unary exclamation mark" + msgstr "ñ¹à´¶Ã²Éä(!)¤Ø¤Î°ú¿ô¤Î·¿¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:2959 + msgid "ISO C does not support `++' and `--' on complex types" + msgstr "ISO C ¤Ï complex ·¿¤Ç¤Î `++' ¤È `--' ¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó" + + #: c-typeck.c:2974 c-typeck.c:3006 + #, fuzzy + msgid "wrong type argument to increment" + msgstr "¥Ó¥Ã¥Èȿž¤Ø¤Î°ú¿ô¤Î·¿¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:2976 c-typeck.c:3008 + #, fuzzy + msgid "wrong type argument to decrement" + msgstr "¥Ó¥Ã¥Èȿž¤Ø¤Î°ú¿ô¤Î·¿¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:2997 + #, fuzzy + msgid "increment of pointer to unknown structure" + msgstr "ÉÔÌÀ¤Ê¹½Â¤ÂΤËÂФ¹¤ë¥Ý¥¤¥ó¥¿¤Î%s" + + #: c-typeck.c:2999 + #, fuzzy + msgid "decrement of pointer to unknown structure" + msgstr "ÉÔÌÀ¤Ê¹½Â¤ÂΤËÂФ¹¤ë¥Ý¥¤¥ó¥¿¤Î%s" + + #: c-typeck.c:3081 + msgid "increment" + msgstr "¥¤¥ó¥¯¥ê¥á¥ó¥È" + + #: c-typeck.c:3081 + msgid "decrement" + msgstr "¥Ç¥¯¥ê¥á¥ó¥È" + + #: c-typeck.c:3136 + msgid "ISO C forbids the address of a cast expression" + msgstr "ISO C ¤Ï¥­¥ã¥¹¥È¼°¤Î¥¢¥É¥ì¥¹É¾²Á¤ò¶Ø¤¸¤Þ¤¹" + + #: c-typeck.c:3146 + msgid "invalid lvalue in unary `&'" + msgstr "ñ¹à¤Î `&' ¤Ç¤Îº¸ÊÕÃͤ¬Ìµ¸ú¤Ç¤¹" + + #: c-typeck.c:3178 + #, c-format + msgid "attempt to take address of bit-field structure member `%s'" + msgstr "¹½Â¤ÂÎ¥á¥ó¥Ð `%s' ¤Î¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤Î¥¢¥É¥ì¥¹¤ò¼èÆÀ¤·¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹" + + #. condition met at compile time + #: c-typeck.c:3287 c-typeck.c:4649 c-typeck.c:4665 c-typeck.c:4681 gcc.c:4457 + #: rtl-error.c:121 tradcif.y:533 tradcpp.c:4123 ch/expr.c:1782 ch/parse.c:361 + #: ch/typeck.c:160 cp/typeck.c:4767 java/expr.c:387 java/verify.c:1464 + #: java/verify.c:1465 java/verify.c:1480 + #, c-format + msgid "%s" + msgstr "%s" + + #: c-typeck.c:3348 + msgid "ISO C forbids use of conditional expressions as lvalues" + msgstr "ISO C ¤Ïº¸ÊÕÃͤȤ·¤Æ¤Î¾ò·ï¼°¤ÎÍøÍѤò¶Ø¤¸¤Þ¤¹" + + #: c-typeck.c:3351 + msgid "ISO C forbids use of compound expressions as lvalues" + msgstr "ISO C ¤Ïº¸ÊÕÃͤȤ·¤Æ¤ÎÊ£¹ç¼°¤ÎÍøÍѤò¶Ø¤¸¤Þ¤¹" + + #: c-typeck.c:3354 + msgid "ISO C forbids use of cast expressions as lvalues" + msgstr "ISO C ¤Ïº¸ÊÕÃͤȤ·¤Æ¤Î¥­¥ã¥¹¥È¼°¤ÎÍøÍѤò¶Ø¤¸¤Þ¤¹" + + #: c-typeck.c:3371 + #, c-format + msgid "%s of read-only member `%s'" + msgstr "%s¤¬ÆÉ¤ß¹þ¤ßÀìÍÑ¥á¥ó¥Ð `%s' ¤Ë¹Ô¤ï¤ì¤Þ¤·¤¿" + + #: c-typeck.c:3375 + #, c-format + msgid "%s of read-only variable `%s'" + msgstr "%s¤¬ÆÉ¤ß¹þ¤ßÀìÍÑÊÑ¿ô `%s' ¤Ë¹Ô¤ï¤ì¤Þ¤·¤¿" + + #: c-typeck.c:3378 + #, c-format + msgid "%s of read-only location" + msgstr "%s¤¬ÆÉ¤ß¹þ¤ßÀìÍÑÎΰè¤Ç¹Ô¤ï¤ì¤Þ¤·¤¿" + + #: c-typeck.c:3396 + #, fuzzy, c-format + msgid "cannot take address of bit-field `%s'" + msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É `%s' ¤Î¥¢¥É¥ì¥¹¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó" + + #: c-typeck.c:3424 ch/typeck.c:3676 ch/xtypeck.c:62 + #, c-format + msgid "global register variable `%s' used in nested function" + msgstr "Âç°è¥ì¥¸¥¹¥¿ÊÑ¿ô `%s' ¤¬Æþ¤ì»Ò´Ø¿ô¤ÎÃæ¤Ç»È¤ï¤ì¤Þ¤·¤¿" + + #: c-typeck.c:3428 ch/typeck.c:3680 ch/xtypeck.c:66 + #, c-format + msgid "register variable `%s' used in nested function" + msgstr "¥ì¥¸¥¹¥¿ÊÑ¿ô `%s' ¤¬Æþ¤ì»Ò´Ø¿ô¤ÎÃæ¤Ç»È¤ï¤ì¤Þ¤·¤¿" + + #: c-typeck.c:3435 ch/typeck.c:3687 ch/xtypeck.c:73 + #, c-format + msgid "address of global register variable `%s' requested" + msgstr "Í׵ᤵ¤ì¤¿Âç°è¥ì¥¸¥¹¥¿ÊÑ¿ô `%s' ¤Î¥¢¥É¥ì¥¹" + + #: c-typeck.c:3447 ch/typeck.c:3699 ch/xtypeck.c:85 + msgid "cannot put object with volatile field into register" + msgstr "volatile ¥Õ¥£¡¼¥ë¥É¤ò¥ì¥¸¥¹¥¿¤Ë»ý¤Ã¤Æ¤¤¤ë¤è¤¦¤Ê¥ª¥Ö¥¸¥§¥¯¥È¤òÃÖ¤±¤Þ¤»¤ó" + + #: c-typeck.c:3451 ch/typeck.c:3703 ch/xtypeck.c:89 + #, c-format + msgid "address of register variable `%s' requested" + msgstr "register ÊÑ¿ô `%s' ¤Î¥¢¥É¥ì¥¹¤¬Í׵ᤵ¤ì¤Þ¤·¤¿" + + #: c-typeck.c:3559 + msgid "signed and unsigned type in conditional expression" + msgstr "¾ò·ï¼°¤ËÉä¹çÉÕ¤­·¿¤ÈÉä¹ç̵¤··¿¤È¤¬¤¢¤ê¤Þ¤¹" + + #: c-typeck.c:3566 + msgid "ISO C forbids conditional expr with only one void side" + msgstr "ISO C ¤ÏÊÒ¦¤À¤±¤¬ void ¤È¤Ê¤ë¾ò·ï¼°¤ò¶Ø¤¸¤Þ¤¹" + + #: c-typeck.c:3582 c-typeck.c:3589 + msgid "ISO C forbids conditional expr between `void *' and function pointer" + msgstr "ISO C ¤Ï `void *' ¤È´Ø¿ô¥Ý¥¤¥ó¥¿¤È¤ò¾ò·ï¼°¤È¤¹¤ë¤³¤È¤ò¶Ø¤¸¤Þ¤¹" + + #: c-typeck.c:3595 + msgid "pointer type mismatch in conditional expression" + msgstr "¾ò·ï¼°¤Ç¤Î¥Ý¥¤¥ó¥¿¤Î·¿¤¬Å¬¹ç¤·¤Þ¤»¤ó" + + #: c-typeck.c:3602 c-typeck.c:3612 + msgid "pointer/integer type mismatch in conditional expression" + msgstr "¾ò·ï¼°¤Ç¥Ý¥¤¥ó¥¿·¿¤ÈÀ°¿ô·¿¤¬Å¬¹ç¤·¤Þ¤»¤ó" + + #: c-typeck.c:3626 + msgid "type mismatch in conditional expression" + msgstr "¾ò·ï¼°¤Ç¤Î·¿¤ÎÁȹç¤ï¤»¤¬Å¬¹ç¤·¤Þ¤»¤ó" + + #: c-typeck.c:3697 cp/typeck.c:5008 + msgid "left-hand operand of comma expression has no effect" + msgstr "¥«¥ó¥Þ±é»»»Ò¤Îº¸Â¦¤Î¼°¤Ë¸úÎϤ¬¤¢¤ê¤Þ¤»¤ó" + + #: c-typeck.c:3736 + msgid "cast specifies array type" + msgstr "¥­¥ã¥¹¥È¤¬ÇÛÎ󷿤ò»ØÄꤷ¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:3742 + msgid "cast specifies function type" + msgstr "¥­¥ã¥¹¥È¤Ï´Ø¿ô·¿¤ò»ØÄꤷ¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:3752 + msgid "ISO C forbids casting nonscalar to the same type" + msgstr "ISO C ¤ÏÈó¥¹¥«¥é¡¼¤«¤éƱ¤¸·¿¤Ø¤Î¥­¥ã¥¹¥È¤ò¶Ø¤¸¤Þ¤¹" + + #: c-typeck.c:3771 + msgid "ISO C forbids casts to union type" + msgstr "ISO C ¤Ï¶¦ÍÑÂη¿¤Ø¤Î¥­¥ã¥¹¥È¤ò¶Ø¤¸¤Þ¤¹" + + #: c-typeck.c:3787 + msgid "cast to union type from type not present in union" + msgstr "¶¦ÍÑÂΤÎÃæ¤Ë¤Ê¤¤·¿¤«¤é¶¦ÍÑÂη¿¤Ø¥­¥ã¥¹¥È¤·¤Æ¤¤¤Þ¤¹" + + #. There are qualifiers present in IN_OTYPE that are not + #. present in IN_TYPE. + #: c-typeck.c:3830 + msgid "cast discards qualifiers from pointer target type" + msgstr "¥­¥ã¥¹¥È¤Ë¤è¤Ã¤Æ¥Ý¥¤¥ó¥¿¤¬¼¨¤¹·¿¤«¤é½¤¾þ»Ò¤¬ÀÚ¤ê¼Î¤Æ¤é¤ì¤Þ¤¹" + + #: c-typeck.c:3845 + msgid "cast increases required alignment of target type" + msgstr "¥­¥ã¥¹¥È¤Ë¤è¤Ã¤Æ¥Ý¥¤¥ó¥¿¤¬¼¨¤¹·¿¤ÎÍ׵ᥢ¥é¥¤¥ó¥á¥ó¥È¤¬Áý²Ã¤·¤Þ¤¹" + + #: c-typeck.c:3851 cp/typeck.c:5422 + msgid "cast from pointer to integer of different size" + msgstr "¥­¥ã¥¹¥È¤Ë¤è¤Ã¤Æ¥Ý¥¤¥ó¥¿¤«¤é°Û¤Ê¤ë¥µ¥¤¥º¤ÎÀ°¿ô¤È¤Ê¤ê¤Þ¤¹" + + #: c-typeck.c:3856 + msgid "cast does not match function type" + msgstr "¥­¥ã¥¹¥È¤Ë¤è¤ë´Ø¿ô¤Î·¿¤¬Å¬¹ç¤·¤Þ¤»¤ó" + + #: c-typeck.c:3863 cp/typeck.c:5429 + msgid "cast to pointer from integer of different size" + msgstr "°Û¤Ê¤ë¥µ¥¤¥º¤ÎÀ°¿ô¤«¤é¥Ý¥¤¥ó¥¿¤Ë¥­¥ã¥¹¥È¤µ¤ì¤Þ¤·¤¿" + + #. Now we have handled acceptable kinds of LHS that are not truly lvalues. + #. Reject anything strange now. + #: c-typeck.c:4021 + msgid "invalid lvalue in assignment" + msgstr "ÂåÆþ¤È¤·¤ÆÌµ¸ú¤Êº¸ÊÕÃͤǤ¹" + + #. Convert new value to destination type. + #: c-typeck.c:4030 c-typeck.c:4055 c-typeck.c:4072 ch/typeck.c:2334 + #: cp/typeck.c:5544 cp/typeck.c:5701 + msgid "assignment" + msgstr "ÂåÆþ" + + #: c-typeck.c:4239 c-typeck.c:4306 + #, c-format + msgid "%s makes qualified function pointer from unqualified" + msgstr "%s¤Ë¤è¤ê¡¢½¤¾þ¤µ¤ì¤Ê¤¤´Ø¿ô¥Ý¥¤¥ó¥¿¤«¤é¡¢½¤¾þ¤µ¤ì¤¿´Ø¿ô¥Ý¥¤¥ó¥¿¤òºî¤ê¤Þ¤¹" + + #: c-typeck.c:4243 c-typeck.c:4286 + #, c-format + msgid "%s discards qualifiers from pointer target type" + msgstr "%s¤Ë¤è¤ê¡¢¥Ý¥¤¥ó¥¿¤Î¼¨¤¹·¿¤«¤é¤Î½¤¾þ»Ò¤¬ÀÚ¤ê¼Î¤Æ¤é¤ì¤Þ¤¹" + + #: c-typeck.c:4249 + msgid "ISO C prohibits argument conversion to union type" + msgstr "ISO C ¤Ç¤Ï°ú¿ô¤«¤é¶¦ÍÑÂΤؤÎÊÑ´¹¤ò¶Ø»ß¤·¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:4278 + #, c-format + msgid "ISO C forbids %s between function pointer and `void *'" + msgstr "ISO C ¤Ï´Ø¿ô¥Ý¥¤¥ó¥¿¤È `void *' ¤È¤Î%s¤ò¶Ø¤¸¤Þ¤¹" + + #: c-typeck.c:4295 + #, c-format + msgid "pointer targets in %s differ in signedness" + msgstr "%s ¤Ç¥Ý¥¤¥ó¥¿¤Î¼¨¤¹ÂоݤÎÉ乿¤Î̵ͭ¤¬°Û¤Ê¤ê¤Þ¤¹" + + #: c-typeck.c:4311 + #, c-format + msgid "%s from incompatible pointer type" + msgstr "¸ß´¹À­¤Î¤Ê¤¤¥Ý¥¤¥ó¥¿·¿¤«¤é¤Î%s¤Ç¤¹" + + #: c-typeck.c:4327 + #, c-format + msgid "%s makes pointer from integer without a cast" + msgstr "%s¤Ë¤è¤ê¡¢¥­¥ã¥¹¥È¤Ê¤·¤ÇÀ°¿ô¤«¤é¥Ý¥¤¥ó¥¿¤òºî¤ê¤Þ¤·¤¿" + + #: c-typeck.c:4335 + #, c-format + msgid "%s makes integer from pointer without a cast" + msgstr "%s¤Ë¤è¤ê¡¢¥­¥ã¥¹¥È¤Ê¤·¤Ç¥Ý¥¤¥ó¥¿¤«¤éÀ°¿ô¤òºî¤ê¤Þ¤·¤¿" + + #: c-typeck.c:4349 c-typeck.c:4352 + #, c-format + msgid "incompatible type for argument %d of `%s'" + msgstr "%d ÈÖÌܤΰú¿ô¤¬ `%s' ¤Î·¿¤È¸ß´¹À­¤¬¤¢¤ê¤Þ¤»¤ó" + + #: c-typeck.c:4356 + #, c-format + msgid "incompatible type for argument %d of indirect function call" + msgstr "´ÖÀÜŪ¤Ê´Ø¿ô¸Æ¤Ó½Ð¤·¤ÎÂè %d °ú¿ô¤ËÂФ·¤Æ¸ß´¹À­¤Î¤Ê¤¤·¿¤Ç¤¹" + + #: c-typeck.c:4360 + #, c-format + msgid "incompatible types in %s" + msgstr "%s ¤Ë¸ß´¹À­¤Î¤Ê¤¤·¿" + + #. Function name is known; supply it. + #: c-typeck.c:4391 + #, c-format + msgid "passing arg %d of `%s'" + msgstr "°ú¿ô %d ¸Ä¤Î `%s' ¤òÅϤ·¤Þ¤¹" + + #. Function name unknown (call through ptr); just give arg number. + #: c-typeck.c:4401 + #, c-format + msgid "passing arg %d of pointer to function" + msgstr "°ú¿ô %d ¸Ä¤Î´Ø¿ô¥Ý¥¤¥ó¥¿¤òÅϤ·¤Þ¤¹" + + #: c-typeck.c:4468 + msgid "initializer for static variable is not constant" + msgstr "static ÊÑ¿ô¤Î½é´ü²½»Ò¤¬Äê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: c-typeck.c:4474 + msgid "initializer for static variable uses complicated arithmetic" + msgstr "static ÊÑ¿ô¤Î½é´ü²½»Ò¤¬Ê£»¨¤Ê·×»»¤ò»È¤Ã¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:4482 + msgid "aggregate initializer is not constant" + msgstr "½¸¹çÂΤνé´ü²½»Ò¤¬Äê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: c-typeck.c:4484 + msgid "aggregate initializer uses complicated arithmetic" + msgstr "½¸¹çÂΤνé´ü²½»Ò¤ÇÊ£»¨¤Ê·×»»¤ò¹Ô¤Ã¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:4491 + msgid "traditional C rejects automatic aggregate initialization" + msgstr "¸Å¤¤ C ¤Ç¤Ï¼«Æ°Åª¤Ê½¸¹çÂΤνé´ü²½¤òµñÀ䤷¤Þ¤¹" + + #: c-typeck.c:4652 c-typeck.c:4668 c-typeck.c:4684 + #, c-format + msgid "(near initialization for `%s')" + msgstr "(`%s' ¤Î½é´ü²½¤ÏÉÔ´°Á´¤Ç¤¹)" + + #: c-typeck.c:4736 cp/typeck2.c:531 + msgid "char-array initialized from wide string" + msgstr "¥ï¥¤¥Éʸ»úÎ󤫤é char ¤ÎÇÛÎ󤬽é´ü²½¤µ¤ì¤Þ¤·¤¿" + + #: c-typeck.c:4743 cp/typeck2.c:538 + msgid "int-array initialized from non-wide string" + msgstr "Èó¥ï¥¤¥Éʸ»úÎ󤫤é int ¤ÎÇÛÎ󤬽é´ü²½¤µ¤ì¤Þ¤·¤¿" + + #: c-typeck.c:4761 cp/typeck2.c:554 + msgid "initializer-string for array of chars is too long" + msgstr "char ¤ÎÇÛÎó¤Ë¤È¤Ã¤Æ½é´ü²½»Òʸ»úÎó¤¬Ä¹¤¹¤®¤Þ¤¹" + + #: c-typeck.c:4797 + msgid "array initialized from non-constant array expression" + msgstr "ÈóÄê¿ôÇÛÎó¼°¤«¤éÇÛÎ󤬽é´ü²½¤µ¤ì¤Þ¤·¤¿" + + #: c-typeck.c:4814 c-typeck.c:4816 c-typeck.c:4832 c-typeck.c:4853 + #: c-typeck.c:6264 + msgid "initializer element is not constant" + msgstr "½é´ü²½»Ò¤ÎÍ×ÁǤ¬Äê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: c-typeck.c:4848 + msgid "initialization" + msgstr "½é´ü²½" + + #: c-typeck.c:4859 c-typeck.c:6269 + msgid "initializer element is not computable at load time" + msgstr "½é´ü²½»Ò¤ÎÍ×ÁÇ¤Ï¥í¡¼¥É»þ¤Ë·×»»¤µ¤ìÆÀ¤Þ¤»¤ó" + + #: c-typeck.c:4896 c-typeck.c:4912 cp/typeck2.c:631 + msgid "invalid initializer" + msgstr "̵¸ú¤Ê½é´ü²½»Ò" + + #: c-typeck.c:5397 + msgid "extra brace group at end of initializer" + msgstr "½é´ü²½»Ò¤Î½ª¤ï¤ê¤Ë;ʬ¤Ê¥Ö¥ì¡¼¥¹¤Î¥°¥ë¡¼¥×" + + #: c-typeck.c:5417 + msgid "missing braces around initializer" + msgstr "½é´ü²½»Ò¤Î¤Þ¤ï¤ê¤Î¥Ö¥ì¡¼¥¹¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:5469 + msgid "braces around scalar initializer" + msgstr "¥¹¥«¥é¡¼½é´ü²½»Ò¤¬¥Ö¥ì¡¼¥¹¤Ç°Ï¤Þ¤ì¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:5517 + msgid "initialization of flexible array member in a nested context" + msgstr "¥Í¥¹¥È¤·¤¿Ê¸Ì®¤Ç²ÄÊÑÇÛÎó¥á¥ó¥Ð¤ò½é´ü²½¤·¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:5519 + msgid "initialization of a flexible array member" + msgstr "²ÄÊÑÇÛÎó¥á¥ó¥Ð¤ò½é´ü²½¤·¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:5550 + msgid "missing initializer" + msgstr "½é´ü²½»Ò¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:5575 + msgid "empty scalar initializer" + msgstr "¶õ¤Î¥¹¥«¥é¡¼½é´ü²½»Ò" + + #: c-typeck.c:5580 + msgid "extra elements in scalar initializer" + msgstr "¥¹¥«¥é¡¼½é´ü²½»Ò¤Ë;ʬ¤ÊÍ×ÁÇ" + + #: c-typeck.c:5666 + msgid "initialization designators may not nest" + msgstr "½é´ü²½»ØÌ¾»Ò¤Ç¤Ï¥Í¥¹¥È¤µ¤»¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó" + + #: c-typeck.c:5687 c-typeck.c:5758 + msgid "array index in non-array initializer" + msgstr "ÈóÇÛÎó¤Î½é´ü²½»Ò¤ËÇÛÎ󥤥ó¥Ç¥Ã¥¯¥¹¤¬»È¤ï¤ì¤Þ¤·¤¿" + + #: c-typeck.c:5692 c-typeck.c:5810 + msgid "field name not in record or union initializer" + msgstr "¥ì¥³¡¼¥É¤ä¶¦ÍÑÂΤ˥ե£¡¼¥ë¥É̾¤¬¤Ê¤¤½é´ü²½»Ò¤Ç¤¹" + + #: c-typeck.c:5754 c-typeck.c:5756 + msgid "nonconstant array index in initializer" + msgstr "½é´ü²½»ÒÆâ¤ËÈóÄê¿ô¤ÎÇÛÎ󥤥ó¥Ç¥Ã¥¯¥¹¤¬¤¢¤ê¤Þ¤¹" + + #: c-typeck.c:5761 + msgid "array index in initializer exceeds array bounds" + msgstr "½é´ü²½»ÒÆâ¤ÎÇÛÎ󥤥ó¥Ç¥Ã¥¯¥¹¤¬ÇÛÎó¤Î¶­³¦¤òͤ¨¤Þ¤·¤¿" + + #: c-typeck.c:5772 + msgid "empty index range in initializer" + msgstr "½é´ü²½»ÒÆâ¤Ë¶õ¤ÎÈϰϥ¤¥ó¥Ç¥Ã¥¯¥¹¤¬¤¢¤ê¤Þ¤¹" + + #: c-typeck.c:5781 + msgid "array index range in initializer exceeds array bounds" + msgstr "½é´ü²½»Ò¤ÎÈϰϥ¤¥ó¥Ç¥Ã¥¯¥¹¤¬ÇÛÎó¤Î¶­³¦¤òͤ¨¤Þ¤·¤¿" + + #: c-typeck.c:5822 + #, c-format + msgid "unknown field `%s' specified in initializer" + msgstr "ÉÔÌÀ¤Ê¥Õ¥£¡¼¥ë¥É `%s' ¤¬½é´ü²½»Ò¤Ç»ØÄꤵ¤ì¤Þ¤·¤¿" + + #: c-typeck.c:5859 c-typeck.c:5880 c-typeck.c:6332 + msgid "initialized field with side-effects overwritten" + msgstr "½é´ü²½¤µ¤ì¤¿¥Õ¥£¡¼¥ë¥É¤¬ÉûºîÍѤǾå½ñ¤­¤µ¤ì¤Þ¤¹" + + #: c-typeck.c:6542 + msgid "excess elements in char array initializer" + msgstr "char ÇÛÎó½é´ü²½»ÒÆâ¤ÎÍ×ÁǤ¬Â¿¤¹¤®¤Þ¤¹" + + #: c-typeck.c:6549 c-typeck.c:6588 + msgid "excess elements in struct initializer" + msgstr "¹½Â¤Âνé´ü²½»ÒÆâ¤ÎÍ×ÁǤ¬Â¿¤¹¤®¤Þ¤¹" + + #: c-typeck.c:6655 + msgid "excess elements in union initializer" + msgstr "¶¦ÍÑÂνé´ü²½»ÒÆâ¤ÎÍ×ÁǤ¬Â¿¤¹¤®¤Þ¤¹" + + #: c-typeck.c:6676 + msgid "traditional C rejects initialization of unions" + msgstr "¸Å¤¤ C ¤Ï¶¦ÍÑÂΤνé´ü¤òµñÀ䤷¤Þ¤¹" + + #: c-typeck.c:6739 + msgid "excess elements in array initializer" + msgstr "ÇÛÎó½é´ü²½»ÒÆâ¤ÎÍ×ÁǤ¬Â¿¤¹¤®¤Þ¤¹" + + #: c-typeck.c:6765 + msgid "excess elements in scalar initializer" + msgstr "¥¹¥«¥é¡¼½é´ü²½»ÒÆâ¤ÎÍ×ÁǤ¬Â¿¤¹¤®¤Þ¤¹" + + #: c-typeck.c:6876 ch/parse.c:2026 + msgid "asm template is not a string constant" + msgstr "asm ¥Æ¥ó¥×¥ì¡¼¥È¤¬Ê¸»úÎóÄê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: c-typeck.c:6908 + msgid "invalid lvalue in asm statement" + msgstr "asm ʸ¤ÎÃæ¤Ë̵¸ú¤Êº¸ÊÕÃÍ" + + #: c-typeck.c:6979 + msgid "modification by `asm'" + msgstr "`asm' ¤Ë¤è¤ë½¤Àµ" + + #: c-typeck.c:6998 cp/typeck.c:6586 + msgid "function declared `noreturn' has a `return' statement" + msgstr "`noreturn' ¤ÎÀë¸À¤µ¤ì¤¿´Ø¿ô¤Ë `return' ʸ¤¬¤¢¤ê¤Þ¤¹" + + #: c-typeck.c:7005 + msgid "`return' with no value, in function returning non-void" + msgstr "Ìá¤ê·¿¤¬´Ø¿ô¤Ç¡¢`return' ¤ËÃͤ¬¤¢¤ê¤Þ¤»¤ó" + + #: c-typeck.c:7011 + msgid "`return' with a value, in function returning void" + msgstr "Ìá¤ê·¿¤¬ void ¤Î´Ø¿ô¤Ç¡¢`return' ¤ËÃͤ¬¤¢¤ê¤Þ¤¹" + + #: c-typeck.c:7015 + msgid "return" + msgstr "return" + + #: c-typeck.c:7066 + msgid "function returns address of local variable" + msgstr "´Ø¿ô¤¬¥í¡¼¥«¥ëÊÑ¿ô¤Î¥¢¥É¥ì¥¹¤òÊÖ¤·¤Æ¤¤¤Þ¤¹" + + #: c-typeck.c:7123 cp/semantics.c:525 + msgid "switch quantity not an integer" + msgstr "switch ¤ÎÆâÍÆ¤¬À°¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: c-typeck.c:7134 + msgid "`long' switch expression not converted to `int' in ISO C" + msgstr "ISO C ¤Ç¤Ï `long' ¤Î switch ¼°¤Ï `int' ¤ËÊÑ´¹¤µ¤ì¤Þ¤»¤ó" + + #: c-typeck.c:7177 cp/decl.c:5214 + msgid "case label not within a switch statement" + msgstr "case ¥é¥Ù¥ë¤¬ switch ʸ¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤ó" + + #: c-typeck.c:7179 cp/decl.c:5219 + msgid "`default' label not within a switch statement" + msgstr "`default' ¥é¥Ù¥ë¤¬ switch ʸ¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤ó" + + #: calls.c:1889 + #, c-format + msgid "inlining failed in call to `%s'" + msgstr "`%s' ¤Ø¤Î¸Æ¤Ó½Ð¤·¤Î¥¤¥ó¥é¥¤¥ó²½¤Ë¼ºÇÔ¤·¤Þ¤·¤¿" + + #: calls.c:1890 calls.c:2196 + msgid "called from here" + msgstr "¤³¤³¤«¤é¸Æ¤Ð¤ì¤Þ¤·¤¿" + + #: calls.c:2195 + #, c-format + msgid "can't inline call to `%s'" + msgstr "`%s' ¤Ø¤Î¸Æ¤Ó½Ð¤·¤Ï¥¤¥ó¥é¥¤¥ó²½¤Ç¤­¤Þ¤»¤ó" + + #: calls.c:2233 + msgid "function call has aggregate value" + msgstr "´Ø¿ô¸Æ¤Ó½Ð¤·¤¬½¸¹çÂΤÎÃͤò»ý¤Ã¤Æ¤¤¤Þ¤¹" + + #: calls.c:4527 + #, fuzzy + msgid "variable offset is passed partially in stack and in reg" + msgstr "ÊÑ¿ô¥ª¥Õ¥»¥Ã¥È¤¬¥¹¥¿¥Ã¥¯¤È¥ì¥¸¥¹¥¿¤ÇÅù²Á¤ËÅϤµ¤ì¤Þ¤·¤¿" + + #: calls.c:4529 + msgid "variable size is passed partially in stack and in reg" + msgstr "ÊÑ¿ô¥µ¥¤¥º¤¬¥¹¥¿¥Ã¥¯¤È¥ì¥¸¥¹¥¿¤ÇÅù²Á¤ËÅϤµ¤ì¤Þ¤·¤¿" + + #: cfgrtl.c:1545 + #, fuzzy, c-format + msgid "end insn %d for block %d not found in the insn stream" + msgstr "½ªÎ»Ì¿Îá %d(¥Ö¥í¥Ã¥¯ %d) ¤¬°ìÏ¢¤ÎÌ¿ÎáÎó¤ÎÃæ¤Ë¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£" + + #: cfgrtl.c:1559 + #, fuzzy, c-format + msgid "insn %d is in multiple basic blocks (%d and %d)" + msgstr "Ì¿Îá %d ¤¬Ê£¿ô¤Î´ðËÜ¥Ö¥í¥Ã¥¯(%d ¤È %d)¤ÎÃæ¤Ë¤¢¤ê¤Þ¤¹" + + #: cfgrtl.c:1570 + #, fuzzy, c-format + msgid "head insn %d for block %d not found in the insn stream" + msgstr "³«»ÏÌ¿Îá %d(¥Ö¥í¥Ã¥¯ %d) ¤¬°ìÏ¢¤ÎÌ¿ÎáÎó¤ÎÃæ¤Ë¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£" + + #: cfgrtl.c:1590 + #, c-format + msgid "verify_flow_info: Duplicate edge %i->%i" + msgstr "" + + #: cfgrtl.c:1606 + #, c-format + msgid "verify_flow_info: Incorrect blocks for fallthru %i->%i" + msgstr "" + + #: cfgrtl.c:1620 + #, c-format + msgid "verify_flow_info: Incorrect fallthru %i->%i" + msgstr "" + + #: cfgrtl.c:1622 + msgid "wrong insn in the fallthru edge" + msgstr "" + + #: cfgrtl.c:1628 + #, fuzzy, c-format + msgid "verify_flow_info: Basic block %d succ edge is corrupted" + msgstr "´ðËÜ¥Ö¥í¥Ã¥¯ %d pred edge ¥ê¥¹¥È¤¬µ¡Ç½¤·¤Æ¤¤¤Þ¤»¤ó" + + #: cfgrtl.c:1651 + #, c-format + msgid "missing barrier after block %i" + msgstr "" + + #: cfgrtl.c:1662 + #, fuzzy, c-format + msgid "basic block %d pred edge is corrupted" + msgstr "´ðËÜ¥Ö¥í¥Ã¥¯ %d pred edge ¥ê¥¹¥È¤¬µ¡Ç½¤·¤Æ¤¤¤Þ¤»¤ó" + + #: cfgrtl.c:1678 + #, fuzzy, c-format + msgid "insn %d is inside basic block %d but block_for_insn is NULL" + msgstr "Ì¿Îá %d ¤¬Ê£¿ô¤Î´ðËÜ¥Ö¥í¥Ã¥¯(%d ¤È %d)¤ÎÃæ¤Ë¤¢¤ê¤Þ¤¹" + + #: cfgrtl.c:1681 + #, fuzzy, c-format + msgid "insn %d is inside basic block %d but block_for_insn is %i" + msgstr "Ì¿Îá %d ¤¬Ê£¿ô¤Î´ðËÜ¥Ö¥í¥Ã¥¯(%d ¤È %d)¤ÎÃæ¤Ë¤¢¤ê¤Þ¤¹" + + #: cfgrtl.c:1694 cfgrtl.c:1702 + #, c-format + msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d" + msgstr "NOTE_INSN_BASIC_BLOCK ¤¬¥Ö¥í¥Ã¥¯ %d ¤Ë¤¢¤ê¤Þ¤»¤ó" + + #: cfgrtl.c:1718 + #, c-format + msgid "NOTE_INSN_BASIC_BLOCK %d in the middle of basic block %d" + msgstr "NOTE_INSN_BASIC_BLOCK %d ¤¬´ðËÜ¥Ö¥í¥Ã¥¯ %d ¤ÎÃæ¤Û¤É¤Ë¤¢¤ê¤Þ¤¹" + + #: cfgrtl.c:1730 + #, fuzzy, c-format + msgid "in basic block %d:" + msgstr "´ðËÜ¥Ö¥í¥Ã¥¯ %d Æâ:" + + #: cfgrtl.c:1731 + msgid "flow control insn inside a basic block" + msgstr "" + + #: cfgrtl.c:1751 + #, fuzzy, c-format + msgid "basic block %i edge lists are corrupted" + msgstr "´ðËÜ¥Ö¥í¥Ã¥¯ %i edge ¥ê¥¹¥È¤¬µ¡Ç½¤·¤Æ¤¤¤Þ¤»¤ó" + + #: cfgrtl.c:1765 + #, fuzzy + msgid "basic blocks not numbered consecutively" + msgstr "´ðËÜ¥Ö¥í¥Ã¥¯¤¬Ï¢Â³Åª¤ËÈÖ¹æÉÕ¤±¤é¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: cfgrtl.c:1792 + #, fuzzy + msgid "insn outside basic block" + msgstr "´ðËÜ¥Ö¥í¥Ã¥¯ %d Æâ:" + + #: cfgrtl.c:1800 + #, fuzzy + msgid "return not followed by barrier" + msgstr "'#' ¤Ë¥Þ¥¯¥í²¾°ú¿ô̾¤¬Â³¤¤¤Æ¤¤¤Þ¤»¤ó" + + #: cfgrtl.c:1807 + #, c-format + msgid "number of bb notes in insn chain (%d) != n_basic_blocks (%d)" + msgstr "Ì¿ÎáÏ¢º¿Ãæ¤Î bb ¤Î¿ô (%d) ¤¬ n_basic_blocks (%d) ¤È°ã¤¤¤Þ¤¹" + + #: cfgrtl.c:1811 + msgid "verify_flow_info failed" + msgstr "" + + #: collect2.c:439 + msgid "internal error" + msgstr "ÆâÉô¥¨¥é¡¼" + + #: collect2.c:940 + msgid "no arguments" + msgstr "°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó" + + #: collect2.c:1269 collect2.c:1417 collect2.c:1450 + #, c-format + msgid "fopen %s" + msgstr "fopen %s" + + #: collect2.c:1272 collect2.c:1422 collect2.c:1453 + #, c-format + msgid "fclose %s" + msgstr "fclose %s" + + #: collect2.c:1281 + #, c-format + msgid "collect2 version %s" + msgstr "collect2 version %s" + + #: collect2.c:1371 + #, c-format + msgid "%d constructor(s) found\n" + msgstr "%d ¸Ä¤Î¥³¥ó¥¹¥È¥é¥¯¥¿¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿\n" + + #: collect2.c:1372 + #, c-format + msgid "%d destructor(s) found\n" + msgstr "%d ¸Ä¤Î¥Ç¥¹¥È¥é¥¯¥¿¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿\n" + + #: collect2.c:1373 + #, c-format + msgid "%d frame table(s) found\n" + msgstr "%d ¸Ä¤Î¥Õ¥ì¡¼¥à¥Æ¡¼¥Ö¥ë¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿\n" + + #: collect2.c:1514 + #, c-format + msgid "%s terminated with signal %d [%s]%s" + msgstr "%s ¥·¥°¥Ê¥ë %d [%s]%s ¤Ç½ªÎ»¤µ¤»¤é¤ì¤Þ¤·¤¿" + + #: collect2.c:1533 + #, c-format + msgid "%s returned %d exit status" + msgstr "%s ¤Ï exit ¾õÂÖ %d ¤òÊÖ¤·¤Þ¤·¤¿" + + #: collect2.c:1561 + #, c-format + msgid "[cannot find %s]" + msgstr "[%s ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó]" + + #: collect2.c:1576 + #, c-format + msgid "cannot find `%s'" + msgstr "`%s' ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó" + + #: collect2.c:1587 collect2.c:1590 + #, c-format + msgid "redirecting stdout: %s" + msgstr "stdout ¤Ø¤Î¥ê¥À¥¤¥ì¥¯¥È: %s" + + #: collect2.c:1633 + #, c-format + msgid "[Leaving %s]\n" + msgstr "[%s ¤òÎ¥¤ì¤Þ¤¹]\n" + + #: collect2.c:1876 + #, c-format + msgid "\nwrite_c_file - output name is %s, prefix is %s\n" + msgstr "\nwrite_c_file - ½ÐÎÏ̾¤Ï %s¡¢¥×¥ì¥Õ¥£¥¯¥¹¤Ï %s\n" + + #: collect2.c:2089 + msgid "cannot find `nm'" + msgstr "`nm' ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó" + + #: collect2.c:2099 collect2.c:2541 + msgid "pipe" + msgstr "pipe" + + #: collect2.c:2103 collect2.c:2545 + msgid "fdopen" + msgstr "fdopen" + + #: collect2.c:2129 collect2.c:2571 + #, c-format + msgid "dup2 %d 1" + msgstr "dup2 %d 1" + + #: collect2.c:2132 collect2.c:2135 collect2.c:2148 collect2.c:2574 + #: collect2.c:2577 collect2.c:2590 + #, c-format + msgid "close %d" + msgstr "close %d" + + #: collect2.c:2138 + #, c-format + msgid "execvp %s" + msgstr "execvp %s" + + #: collect2.c:2192 + #, c-format + msgid "init function found in object %s" + msgstr "init ´Ø¿ô¤ò¥ª¥Ö¥¸¥§¥¯¥È %s ¤Ç¸«¤Ä¤±¤Þ¤·¤¿" + + #: collect2.c:2200 + #, c-format + msgid "fini function found in object %s" + msgstr "fini ´Ø¿ô¤ò¥ª¥Ö¥¸¥§¥¯¥È %s ¤Ç¸«¤Ä¤±¤Þ¤·¤¿" + + #: collect2.c:2223 collect2.c:2629 + msgid "fclose" + msgstr "fclose" + + #: collect2.c:2268 + #, c-format + msgid "unable to open file '%s'" + msgstr "¥Õ¥¡¥¤¥ë '%s' ¤ò open ¤Ç¤­¤Þ¤»¤ó" + + #: collect2.c:2270 + #, c-format + msgid "unable to stat file '%s'" + msgstr "¥Õ¥¡¥¤¥ë '%s' ¤ò stat ¤Ç¤­¤Þ¤»¤ó" + + #: collect2.c:2276 + #, c-format + msgid "unable to mmap file '%s'" + msgstr "¥Õ¥¡¥¤¥ë '%s' ¤ò mmap ¤Ç¤­¤Þ¤»¤ó" + + #: collect2.c:2429 + msgid "not found\n" + msgstr "¸«¤Ä¤«¤ê¤Þ¤»¤ó\n" + + #: collect2.c:2431 collect2.c:2608 + #, c-format + msgid "dynamic dependency %s not found" + msgstr "ưŪ°Í¸´Ø·¸ %s ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó" + + #: collect2.c:2451 + #, c-format + msgid "bad magic number in file '%s'" + msgstr "¥Õ¥¡¥¤¥ë '%s' ¤ËÉÔÀµ¤Ê¥Þ¥¸¥Ã¥¯¥Ê¥ó¥Ð" + + #: collect2.c:2473 + msgid "dynamic dependencies.\n" + msgstr "ưŪ°Í¸´Ø·¸¡£\n" + + #: collect2.c:2532 + msgid "cannot find `ldd'" + msgstr "`ldd' ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó" + + #: collect2.c:2580 + #, c-format + msgid "execv %s" + msgstr "execv %s" + + #: collect2.c:2593 + msgid "\nldd output with constructors/destructors.\n" + msgstr "\nldd ½ÐÎϤ¬¥³¥ó¥¹¥È¥é¥¯¥¿/¥Ç¥¹¥È¥é¥¯¥¿¤òȼ¤¤¤Þ¤¹¡£\n" + + #: collect2.c:2620 + #, c-format + msgid "unable to open dynamic dependency '%s'" + msgstr "ưŪ°Í¸´Ø·¸ '%s' ¤ò³«¤±¤Þ¤»¤ó" + + #: collect2.c:2734 + #, c-format + msgid "%s: not a COFF file" + msgstr "%s: COFF ¥Õ¥¡¥¤¥ë¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: collect2.c:2853 + #, c-format + msgid "%s: cannot open as COFF file" + msgstr "%s: COFF ¥Õ¥¡¥¤¥ë¤È¤·¤Æ³«¤±¤Þ¤»¤ó" + + #: collect2.c:2909 + #, fuzzy, c-format + msgid "library lib%s not found" + msgstr "¥é¥¤¥Ö¥é¥ê lib%s ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó" + + #: collect2.c:3038 + #, c-format + msgid "open %s" + msgstr "open %s" + + #: collect2.c:3061 + msgid "incompatibilities between object file & expected values" + msgstr "ξΩ¤·¤Ê¤¤¥ª¥Ö¥¸¥§¥¯¥È¥Õ¥¡¥¤¥ë¤È´üÂÔÃÍ" + + #: collect2.c:3134 + #, c-format + msgid "\nProcessing symbol table #%d, offset = 0x%.8lx, kind = %s\n" + msgstr "\n¥·¥ó¥Ü¥ë¥Æ¡¼¥Ö¥ë #%d ¤ò½èÍý¤·¤Þ¤¹¡¢¥ª¥Õ¥»¥Ã¥È = 0x%.8lx, ¼ïÎà = %s\n" + + #: collect2.c:3143 + msgid "string section missing" + msgstr "ʸ»úÎ󥻥¯¥·¥ç¥ó¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: collect2.c:3146 + msgid "section pointer missing" + msgstr "¥»¥¯¥·¥ç¥ó¥Ý¥¤¥ó¥¿¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: collect2.c:3194 + msgid "no symbol table found" + msgstr "¥·¥ó¥Ü¥ë¥Æ¡¼¥Ö¥ë¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó" + + #: collect2.c:3207 + msgid "no cmd_strings found" + msgstr "cmd_strings ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó" + + #: collect2.c:3219 + msgid "\nUpdating header and load commands.\n\n" + msgstr "\n¥Ø¥Ã¥À¤È load ¥³¥Þ¥ó¥É¤ò¹¹¿·¤·¤Þ¤¹¡£\n" + + #: collect2.c:3226 + #, c-format + msgid "load command map, %d cmds, new size %ld.\n" + msgstr "load ¥³¥Þ¥ó¥É¥Þ¥Ã¥×¡¢%d ¸Ä¤Î¥³¥Þ¥ó¥É¡¢¿·¤¿¤Ê¥µ¥¤¥º %ld¡£\n" + + #: collect2.c:3257 + msgid "writing load commands.\n\n" + msgstr "load ¥³¥Þ¥ó¥É¤ò½ñ¤­¹þ¤ß¤Þ¤¹¡£\n\n" + + #: collect2.c:3277 + #, c-format + msgid "close %s" + msgstr "close %s" + + #: collect2.c:3351 + msgid "could not convert 0x%l.8x into a region" + msgstr "0x%l.8x ¤òÎΰè¤ËÊÑ´¹¤Ç¤­¤Þ¤»¤ó" + + #: collect2.c:3355 + #, c-format + msgid "%s function, region %d, offset = %ld (0x%.8lx)\n" + msgstr "%s ´Ø¿ô, Îΰè %d, ¥ª¥Õ¥»¥Ã¥È = %ld (0x%.8lx)\n" + + #: collect2.c:3482 + msgid "bad magic number" + msgstr "ÉÔÀµ¤Ê¥Þ¥¸¥Ã¥¯¥Ê¥ó¥Ð" + + #: collect2.c:3483 + msgid "bad header version" + msgstr "ÉÔÀµ¤Ê¥Ø¥Ã¥À¥Ð¡¼¥¸¥ç¥ó" + + #: collect2.c:3484 + msgid "bad raw header version" + msgstr "ÉÔÀµ¤ÊÀ¸¤Î¥Ø¥Ã¥À¥Ð¡¼¥¸¥ç¥ó" + + #: collect2.c:3485 + msgid "raw header buffer too small" + msgstr "¾®¤µ¤¹¤®¤ëÀ¸¤Î¥Ø¥Ã¥À¥Ð¥Ã¥Õ¥¡" + + #: collect2.c:3486 + msgid "old raw header file" + msgstr "¸Å¤¤À¸¤Î¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë" + + #: collect2.c:3487 + msgid "unsupported version" + msgstr "¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¥Ð¡¼¥¸¥ç¥ó¤Ç¤¹" + + #: collect2.c:3489 + #, c-format + msgid "unknown {de,en}code_mach_o_hdr return value %d" + msgstr "ÉÔÌÀ¤Ê {de,en}code_mach_o_hdr Ìá¤êÃÍ %d" + + #: collect2.c:3509 + #, c-format + msgid "fstat %s" + msgstr "fstat %s" + + #: collect2.c:3546 collect2.c:3594 + #, c-format + msgid "lseek %s 0" + msgstr "lseek %s 0" + + #: collect2.c:3550 + #, c-format + msgid "read %s" + msgstr "read %s" + + #: collect2.c:3553 + #, c-format + msgid "read %ld bytes, expected %ld, from %s" + msgstr "%ld ¥Ð¥¤¥ÈÆÉ¹þ¤ß¡£%ld (%s ¤«¤é)ÆÉ¹þ¤à¤Ï¤º¤Ç¤¹" + + #: collect2.c:3574 + #, c-format + msgid "msync %s" + msgstr "msync %s" + + #: collect2.c:3581 + #, c-format + msgid "munmap %s" + msgstr "munmap %s" + + #: collect2.c:3598 + #, c-format + msgid "write %s" + msgstr "write %s" + + #: collect2.c:3601 + #, c-format + msgid "wrote %ld bytes, expected %ld, to %s" + msgstr "%ld ¥Ð¥¤¥È½ñ¹þ¤ß¡£%ld (%s ¤Ø)½ñ¹þ¤à¤Ï¤º¤Ç¤¹" + + #: combine.c:12615 + #, c-format + msgid "" + ";; Combiner statistics: %d attempts, %d substitutions (%d requiring new space),\n" + ";; %d successes.\n" + "\n" + msgstr "" + ";; ·ë¹çÅý·×: %d »î¹Ô, %d ÂåÂØ (%d ¿·¤¿¤Ê¶õ´Ö¤òÍ×µá),\n" + ";; %d À®¸ù¡£\n" + + #: combine.c:12625 + #, c-format + msgid "" + "\n" + ";; Combiner totals: %d attempts, %d substitutions (%d requiring new space),\n" + ";; %d successes.\n" + msgstr "" + "\n" + ";; ·ë¹ç¹ç·×: %d »î¹Ô, %d ÂåÂØ (%d ¿·¤¿¤Ê¶õ´Ö¤òÍ×µá),\n" + ";; %d À®¸ù¡£\n" + + #: convert.c:67 + msgid "cannot convert to a pointer type" + msgstr "¥Ý¥¤¥ó¥¿·¿¤ËÊÑ´¹¤Ç¤­¤Þ¤»¤ó" + + #: convert.c:100 + msgid "pointer value used where a floating point value was expected" + msgstr "ÉâÆ°¾®¿ôÅÀ¿ô¤¬¤¢¤ë¤Ù¤­²Õ½ê¤Ç¡¢¥Ý¥¤¥ó¥¿Ãͤ¬»È¤ï¤ì¤Þ¤·¤¿" + + #: convert.c:104 + msgid "aggregate value used where a float was expected" + msgstr "ÉâÆ°¾®¿ôÅÀ·¿¤¬¤¢¤ë¤Ù¤­²Õ½ê¤Ç¡¢½¸¹çÂΤÎÃͤ¬»È¤ï¤ì¤Þ¤·¤¿" + + #: convert.c:130 + msgid "conversion to incomplete type" + msgstr "ÉÔ´°Á´·¿¤Ø¤ÎÊÑ´¹¤Ç¤¹" + + #: convert.c:390 convert.c:470 + msgid "can't convert between vector values of different size" + msgstr "Â礭¤µ¤Î°Û¤Ê¤ë¥Ù¥¯¥È¥ëÃÍÆ±»Î¤ÎÊÑ´¹¤Ï¤Ç¤­¤Þ¤»¤ó" + + #: convert.c:396 + msgid "aggregate value used where an integer was expected" + msgstr "À°¿ô·¿¤¬¤¢¤ë¤Ù¤­²Õ½ê¤Ç¡¢½¸¹çÂΤÎÃͤ¬»È¤ï¤ì¤Þ¤·¤¿" + + #: convert.c:448 f/com.c:1072 + msgid "pointer value used where a complex was expected" + msgstr "Ê£ÁÇ¿ô·¿¤¬¤¢¤ë¤Ù¤­²Õ½ê¤Ç¡¢¥Ý¥¤¥ó¥¿Ãͤ¬»È¤ï¤ì¤Þ¤·¤¿" + + #: convert.c:452 f/com.c:1074 + msgid "aggregate value used where a complex was expected" + msgstr "Ê£ÁÇ¿ô·¿¤¬¤¢¤ë¤Ù¤­²Õ½ê¤Ç¡¢½¸¹çÂΤÎÃͤ¬»È¤ï¤ì¤Þ¤·¤¿" + + #: convert.c:476 + msgid "can't convert value to a vector" + msgstr "Ãͤò¥Ù¥¯¥È¥ë¤Ë¤ÏÊÑ´¹¤Ç¤­¤Þ¤»¤ó" + + #: cpperror.c:124 + msgid "internal error: " + msgstr "ÆâÉô¥¨¥é¡¼: " + + #: cpperror.c:131 tradcpp.c:4679 + msgid "warning: " + msgstr "·Ù¹ð: " + + #: cpperror.c:208 cpperror.c:292 cppfiles.c:677 gcc.c:6308 tradcpp.c:4717 + #, c-format + msgid "%s: %s" + msgstr "%s: %s" + + #: cppexp.c:155 + #, fuzzy + msgid "floating point numbers are not valid in #if" + msgstr "#if ¼°¤ÎÃæ¤Ç¤ÎÉâÆ°¾®¿ôÅÀ¿ô¤Ïµö²Ä¤µ¤ì¤Þ¤»¤ó" + + #: cppexp.c:177 + msgid "traditional C rejects the `U' suffix" + msgstr "¸Å¤¤ C ¤Ç¤Ï `U' ÀÜÈø¼­¤¬µñÀ䤵¤ì¤Þ¤¹" + + #: cppexp.c:180 + msgid "too many 'l' suffixes in integer constant" + msgstr "À°¿ôÄê¿ô¤Î¥µ¥Õ¥£¥Ã¥¯¥¹ 'l' ¤¬Â¿¤¹¤®¤Þ¤¹" + + #: cppexp.c:184 + msgid "integer constant contains digits beyond the radix" + msgstr "À°¿ôÄê¿ô¤¬´ð¿ô¤òͤ¨¤¿¿ôÃͤò´Þ¤ó¤Ç¤¤¤Þ¤¹" + + #: cppexp.c:187 + msgid "integer constant out of range" + msgstr "À°¿ôÄê¿ô¤¬ÈϰϤò³°¤ì¤Æ¤¤¤Þ¤¹" + + #: cppexp.c:193 + msgid "integer constant is so large that it is unsigned" + msgstr "À°¿ôÄê¿ô¤¬Â礭¤¹¤®¤ë¤Î¤Ç unsigned ¤Ë¤Ê¤ê¤Þ¤·¤¿" + + #: cppexp.c:202 + #, c-format + msgid "invalid suffix '%.*s' on integer constant" + msgstr "ÀÜÈø¼­ '%.*s' ¤ÏÀ°¿ôÄê¿ô¤Ë¤Ï̵¸ú¤Ç¤¹" + + #: cppexp.c:234 + msgid "missing ')' after \"defined\"" + msgstr "\"defined\" ¤Î¸å¤í¤Î ')' ¤¬·ç¤±¤Æ¤¤¤Þ¤¹" + + #: cppexp.c:240 + msgid "operator \"defined\" requires an identifier" + msgstr "\"defined\" ±é»»»Ò¤Ï¼±Ê̻ҤòÍ׵ᤷ¤Þ¤¹" + + #: cppexp.c:248 + #, c-format + msgid "(\"%s\" is an alternative token for \"%s\" in C++)" + msgstr "¡ÊC++ ¤Ç¤Ï \"%s\" ¤¬ \"%s\" ¤ÎÂåÂØ¥È¡¼¥¯¥ó¤Ç¤¹¡Ë" + + #: cppexp.c:259 + msgid "this use of \"defined\" may not be portable" + msgstr "" + + #: cppexp.c:306 + #, fuzzy + msgid "string constants are not valid in #if" + msgstr "#if ¼°¤ÎÃæ¤Ç¤Ïʸ»úÎóÄê¿ô¤¬»È¤¨¤Þ¤»¤ó" + + #: cppexp.c:310 + #, fuzzy, c-format + msgid "invalid character '%c' in #if" + msgstr "̵¸ú¤Êʸ»úÄê¿ô¤¬ #if ¤Ë¤¢¤ê¤Þ¤¹" + + #: cppexp.c:312 + #, fuzzy, c-format + msgid "invalid character '\\%03o' in #if" + msgstr "̵¸ú¤Êʸ»úÄê¿ô¤¬ #if ¤Ë¤¢¤ê¤Þ¤¹" + + #: cppexp.c:329 + #, c-format + msgid "ISO C++ does not permit \"%s\" in #if" + msgstr "ISO C++ ¤Ï #if Æâ¤Î \"%s\" ¤òµö¤·¤Þ¤»¤ó" + + #: cppexp.c:340 + #, c-format + msgid "\"%s\" is not defined" + msgstr "\"%s\" ¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: cppexp.c:366 + #, fuzzy, c-format + msgid "\"%s\" is not valid in #if expressions" + msgstr "\"%s\" ¤Ï¥×¥ê¥×¥í¥»¥Ã¥µ¤ËÂФ¹¤ëÀµ¾ï¤Ê¥ª¥×¥·¥ç¥ó¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: cppexp.c:380 + msgid "integer overflow in preprocessor expression" + msgstr "À°¿ô¤¬¥×¥ê¥×¥í¥»¥Ã¥µ¼°Æâ¤Ç¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤Þ¤·¤¿" + + #: cppexp.c:607 + #, fuzzy + msgid "missing binary operator" + msgstr "¥Þ¥¯¥í²¾°ú¿ô¥ê¥¹¥È¤Ç¡¢')' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: cppexp.c:642 + #, fuzzy + msgid "void expression between '(' and ')'" + msgstr "¼°Ê¸¤¬Ìµ¸ú¤Ç¤¹" + + #: cppexp.c:644 + #, fuzzy, c-format + msgid "operator '%s' has no right operand" + msgstr "È¿Éü»Ò `%s' ¤ÏÈóÀ°¿ô·¿¤Ç¤¹" + + #: cppexp.c:656 + #, c-format + msgid "impossible operator '%s'" + msgstr "¤¢¤ê¤¨¤Ê¤¤±é»»»Ò '%s'" + + #: cppexp.c:732 tradcif.y:111 tradcif.y:122 + msgid "division by zero in #if" + msgstr "#if ¤Ç¥¼¥í½ü»»¤¬È¯À¸¤·¤Þ¤·¤¿" + + #: cppexp.c:766 + msgid "comma operator in operand of #if" + msgstr "¥«¥ó¥Þ±é»»»Ò¤¬ #if ±é»»»Ò¤ÎÃæ¤Ë¤¢¤ê¤Þ¤¹" + + #: cppexp.c:771 + #, fuzzy + msgid "syntax error '?' without following ':'" + msgstr "'@' ¥È¡¼¥¯¥ó¤Çʸˡ¥¨¥é¡¼" + + #: cppexp.c:774 + #, fuzzy + msgid "syntax error ':' without preceding '?'" + msgstr "'@' ¥È¡¼¥¯¥ó¤Çʸˡ¥¨¥é¡¼" + + #: cppexp.c:782 + #, fuzzy + msgid "missing ')' in expression" + msgstr "Äê¿ô¼°¤¬·ç¤±¤Æ¤¤¤ë¤«Ìµ¸ú¤Ç¤¹" + + #: cppexp.c:789 + #, fuzzy + msgid "missing '(' in expression" + msgstr "Äê¿ô¼°¤¬·ç¤±¤Æ¤¤¤ë¤«Ìµ¸ú¤Ç¤¹" + + #: cppexp.c:815 + #, fuzzy, c-format + msgid "missing binary operator before '%s'" + msgstr "¿ô»ú '%.*s' ¤Î¸å¤Ë¶õÇò¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: cppexp.c:821 + #, fuzzy, c-format + msgid "operator '%s' has no left operand" + msgstr "²¾°ú¿ô `%s' ¤ÏÉÔ´°Á´·¿¤Ç¤¹" + + #: cppexp.c:859 + #, fuzzy + msgid "unbalanced stack in #if" + msgstr "Âбþ¤·¤Æ¤¤¤Ê¤¤ #endif" + + #: cppexp.c:862 + #, fuzzy + msgid "#if with no expression" + msgstr " throw ¤µ¤ì¤¿¼°¤ÎÃæ" + + #: cppfiles.c:334 + msgid "" + msgstr "<ɸ½àÆþÎÏ>" + + #: cppfiles.c:378 + #, c-format + msgid "%s is too large" + msgstr "%s ¤ÏÂ礭¤¹¤®¤Þ¤¹" + + #: cppfiles.c:415 + #, c-format + msgid "%s is shorter than expected" + msgstr "%s ¤¬ËÜÍè¤è¤ê¤âû¤¤¤Ç¤¹" + + #: cppfiles.c:429 + #, c-format + msgid "%s is a block device" + msgstr "%s ¤Ï¥Ö¥í¥Ã¥¯¥Ç¥Ð¥¤¥¹¤Ç¤¹" + + #: cppfiles.c:555 + #, fuzzy, c-format + msgid "no include path in which to find %s" + msgstr "%s ¤ò¸«¤Ä¤±¤ë¤¿¤á¤Î¥¤¥ó¥¯¥ë¡¼¥É¥Ñ¥¹¤¬¤¢¤ê¤Þ¤»¤ó" + + #: cppfiles.c:627 + msgid "Multiple include guards may be useful for:\n" + msgstr "¿½Å include ¤«¤é¤ÎÊݸͭ±×¤È¤Ê¤ë¤Ç¤·¤ç¤¦:\n" + + #: cppfiles.c:1014 + msgid "absolute file name in remap_filename" + msgstr "ÀäÂХѥ¹¥Õ¥¡¥¤¥ë̾¤¬ remap_filename ¤Ë¤¢¤ê¤Þ¤¹" + + #: cppinit.c:230 + #, c-format + msgid "ignoring nonexistent directory \"%s\"\n" + msgstr "¸ºß¤·¤Ê¤¤¥Ç¥£¥ì¥¯¥È¥ê \"%s\" ¤ò̵»ë¤·¤Þ¤¹\n" + + #: cppinit.c:237 + #, c-format + msgid "%s: Not a directory" + msgstr "%s: ¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: cppinit.c:284 + #, c-format + msgid "ignoring duplicate directory \"%s\"\n" + msgstr "½ÅÊ£¤·¤¿¥Ç¥£¥ì¥¯¥È¥ê \"%s\" ¤ò̵»ë¤·¤Þ¤¹\n" + + #: cppinit.c:312 + #, fuzzy, c-format + msgid "changing search order for system directory \"%s\"" + msgstr "¥Ç¥£¥ì¥¯¥È¥ê %s ¤òºîÀ®¤Ç¤­¤Þ¤»¤ó" + + #: cppinit.c:316 + #, c-format + msgid " as it is the same as non-system directory \"%s\"" + msgstr "" + + #: cppinit.c:320 + msgid " as it has already been specified as a non-system directory" + msgstr "" + + #: cppinit.c:929 + msgid "#include \"...\" search starts here:\n" + msgstr "#include \"...\" ¤Îõº÷¤Ï¤³¤³¤«¤é»Ï¤Þ¤ê¤Þ¤¹:\n" + + #: cppinit.c:933 + msgid "#include <...> search starts here:\n" + msgstr "#include <...> ¤Îõº÷¤Ï¤³¤³¤«¤é»Ï¤Þ¤ê¤Þ¤¹:\n" + + #: cppinit.c:936 + msgid "End of search list.\n" + msgstr "õº÷¥ê¥¹¥È¤Î½ª¤ï¤ê\n" + + #: cppinit.c:1003 + #, fuzzy + msgid "" + msgstr "<ÁȤ߹þ¤ß>" + + #: cppinit.c:1005 + msgid "" + msgstr "<¥³¥Þ¥ó¥É¥é¥¤¥ó>" + + #: cppinit.c:1101 tradcpp.c:968 tradcpp.c:978 tradcpp.c:1069 + msgid "I/O error on output" + msgstr "½ÐÎÏÃæ¤Ë I/O ¥¨¥é¡¼¤¬È¯À¸" + + #. Irix6 "cc -n32" and OSF4 cc have problems with char foo[] = ("string"); + #. I.e. a const string initializer with parens around it. That is + #. what N_("string") resolves to, so we make no_* be macros instead. + #: cppinit.c:1148 + #, fuzzy, c-format + msgid "argument missing after %s" + msgstr "%s ¤Î¸å¤í¤Î°ú¿ô¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: cppinit.c:1149 + #, fuzzy, c-format + msgid "assertion missing after %s" + msgstr "%s ¤Î¸å¤í¤Î¥¢¥µ¡¼¥·¥ç¥ó¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: cppinit.c:1150 + #, fuzzy, c-format + msgid "directory name missing after %s" + msgstr "%s ¤Î¸å¤í¤Î¥Ç¥£¥ì¥¯¥È¥ê̾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: cppinit.c:1151 + #, fuzzy, c-format + msgid "file name missing after %s" + msgstr "%s ¤Î¸å¤í¤Î¥Õ¥¡¥¤¥ë̾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: cppinit.c:1152 + #, fuzzy, c-format + msgid "macro name missing after %s" + msgstr "%s ¤Î¸å¤í¤Î¥Þ¥¯¥í̾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: cppinit.c:1153 + #, fuzzy, c-format + msgid "path name missing after %s" + msgstr "%s ¤Î¸å¤í¤Î¥Ñ¥¹Ì¾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: cppinit.c:1154 + #, fuzzy, c-format + msgid "number missing after %s" + msgstr "%s ¤Î¸å¤í¤Î¿ô»ú¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: cppinit.c:1155 + #, fuzzy, c-format + msgid "target missing after %s" + msgstr "%s ¤Î¸å¤í¤Î¥¿¡¼¥²¥Ã¥È¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: cppinit.c:1340 + #, fuzzy, c-format + msgid "too many filenames. Type %s --help for usage info" + msgstr "¥Õ¥¡¥¤¥ë̾¤¬Â¿¤¹¤®¤Þ¤¹¡£%s --help ¤È¥¿¥¤¥×¤·¤Æ»È¤¤Êý¤ò¸«¤Þ¤·¤ç¤¦" + + #: cppinit.c:1524 tradcpp.c:603 + #, fuzzy + msgid "output filename specified twice" + msgstr "½ÐÎÏ¥Õ¥¡¥¤¥ë̾¤¬Æó²ó»ØÄꤵ¤ì¤Þ¤·¤¿" + + #: cppinit.c:1636 + msgid "-I- specified twice" + msgstr "-I- ¤¬Æó²ó»ØÄꤵ¤ì¤Þ¤·¤¿" + + #: cppinit.c:1775 + #, c-format + msgid "GNU CPP version %s (cpplib)" + msgstr "GNU CPP version %s (cpplib)" + + #: cppinit.c:1816 tradcpp.c:792 + msgid "you must additionally specify either -M or -MM" + msgstr "-M ¤« -MM ¤Î¤¤¤º¤ì¤«¤òÄɲÃŪ¤Ë»ØÄꤷ¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: cppinit.c:1878 + #, c-format + msgid "Usage: %s [switches] input output\n" + msgstr "»È¤¤Êý: %s [¥¹¥¤¥Ã¥Á] ÆþÎÏ ½ÐÎÏ\n" + + #. To keep the lines from getting too long for some compilers, limit + #. to about 500 characters (6 lines) per chunk. + #: cppinit.c:1881 + msgid "" + "Switches:\n" + " -include Include the contents of before other files\n" + " -imacros Accept definition of macros in \n" + " -iprefix Specify as a prefix for next two options\n" + " -iwithprefix Add to the end of the system include path\n" + " -iwithprefixbefore Add to the end of the main include path\n" + " -isystem Add to the start of the system include path\n" + msgstr "" + "¥¹¥¤¥Ã¥Á:\n" + " -include ¾¤Î¥Õ¥¡¥¤¥ë¤ÎÁ°¤Ë ¤ÎÆâÍÆ¤ò´Þ¤á¤ë\n" + " -imacros ¤Î¥Þ¥¯¥íÄêµÁ¤ò¼õ¤±Æþ¤ì¤ë\n" + " -iprefix ¼¡¤ÎÆó¤Ä¤Î¥ª¥×¥·¥ç¥óÍÑ¥×¥ì¥Õ¥£¥¯¥¹¤Ë ¤ò»ØÄê\n" + " -iwithprefix ¤ò¥·¥¹¥Æ¥à include ¥Ñ¥¹¤Î½ª¤ê¤ËÄɲ乤ë\n" + " -iwithprefixbefore ¤ò¥á¥¤¥ó include ¥Ñ¥¹¤Î½ª¤ê¤ËÄɲ乤ë\n" + " -isystem ¤ò¥·¥¹¥Æ¥à include ¥Ñ¥¹¤ÎºÇ½é¤ËÄɲ乤ë\n" + + #: cppinit.c:1890 + msgid "" + " -idirafter Add to the end of the system include path\n" + " -I Add to the end of the main include path\n" + " -I- Fine-grained include path control; see info docs\n" + " -nostdinc Do not search system include directories\n" + " (dirs specified with -isystem will still be used)\n" + " -nostdinc++ Do not search system include directories for C++\n" + " -o Put output into \n" + msgstr "" + " -idirafter ¤ò¥·¥¹¥Æ¥à include ¥Ñ¥¹¤Î½ª¤ê¤ËÄɲ乤ë\n" + " -I ¤ò¥á¥¤¥ó include ¥Ñ¥¹¤Î½ª¤ê¤ËÄɲ乤ë\n" + " -I- ¤­¤áºÙ¤«¤Ê include ¥Ñ¥¹À©¸æ -- info ʸ½ñ¤ò»²¾È\n" + " -nostdinc ¥·¥¹¥Æ¥à include ¥Ç¥£¥ì¥¯¥È¥ê¤òõº÷¤·¤Ê¤¤\n" + " (-system ¤Ç»ØÄꤵ¤ì¤¿¥Ç¥£¥ì¥¯¥È¥ê¤Ïõº÷¤µ¤ì¤ë)\n" + " -nostdinc++ C++ ÍÑ¥·¥¹¥Æ¥à include ¥Ç¥£¥ì¥¯¥È¥ê¤òõº÷¤·¤Ê¤¤\n" + " -o ¤Ø½ÐÎϤ¹¤ë\n" + + #: cppinit.c:1899 + msgid "" + " -pedantic Issue all warnings demanded by strict ISO C\n" + " -pedantic-errors Issue -pedantic warnings as errors instead\n" + " -trigraphs Support ISO C trigraphs\n" + " -lang-c Assume that the input sources are in C\n" + " -lang-c89 Assume that the input sources are in C89\n" + msgstr "" + " -pedantic ¸·Ì©¤Ê ISO C ¤ÇÍ׵ᤵ¤ì¤ëÁ´¤Æ¤Î·Ù¹ð¤òȯ¹Ô¤¹¤ë\n" + " -pedantic-errors -pedantic ·Ù¹ð¤ÎÂå¤ê¤Ë¥¨¥é¡¼¤òȯ¹Ô¤¹¤ë\n" + " -trigraphs ISO C ¥È¥é¥¤¥°¥é¥Õ¤ò¼õ¤±Æþ¤ì¤ë\n" + " -lang-c ÆþÎÏ¥½¡¼¥¹¤ò C ¤È¤ß¤Ê¤¹\n" + " -lang-c89 ÆþÎÏ¥½¡¼¥¹¤ò C89 ¤È¤ß¤Ê¤¹\n" + + #: cppinit.c:1906 + msgid "" + " -lang-c++ Assume that the input sources are in C++\n" + " -lang-objc Assume that the input sources are in ObjectiveC\n" + " -lang-objc++ Assume that the input sources are in ObjectiveC++\n" + " -lang-asm Assume that the input sources are in assembler\n" + msgstr "" + " -lang-c++ ÆþÎÏ¥½¡¼¥¹¤ò C ¤È¤ß¤Ê¤¹\n" + " -lang-objc ÆþÎÏ¥½¡¼¥¹¤ò ObjectiveC ¤È¤ß¤Ê¤¹\n" + " -lang-objc++ ÆþÎÏ¥½¡¼¥¹¤ò ObjectiveC++ ¤È¤ß¤Ê¤¹\n" + " -lang-asm ÆþÎÏ¥½¡¼¥¹¤ò¥¢¥»¥ó¥Ö¥ê¸À¸ì¤È¤ß¤Ê¤¹\n" + + #: cppinit.c:1912 + msgid "" + " -std= Specify the conformance standard; one of:\n" + " gnu89, gnu99, c89, c99, iso9899:1990,\n" + " iso9899:199409, iso9899:1999\n" + " -+ Allow parsing of C++ style features\n" + " -w Inhibit warning messages\n" + " -Wtrigraphs Warn if trigraphs are encountered\n" + " -Wno-trigraphs Do not warn about trigraphs\n" + " -Wcomment{s} Warn if one comment starts inside another\n" + msgstr "" + " -std= Ŭ¹ç¤µ¤»¤ëɸ½à¤ò»ØÄê -- °Ê²¼¤è¤ê°ì¤Ä\n" + " gnu89, gnu99, c89, c99, iso9899:1990,\n" + " iso9899:199409, iso9899:1999\n" + " -+ C++ ¼°¤Î¹½Ê¸²òÀϤòµö²Ä¤¹¤ë\n" + " -w ·Ù¹ð¥á¥Ã¥»¡¼¥¸¤òÍÞÀ©¤¹¤ë\n" + " -Wtrigraphs ¥È¥é¥¤¥°¥é¥Õ¤Ë½Ð¤¯¤ï¤·¤¿¤é·Ù¹ð¤¹¤ë\n" + " -Wno-trigraphs ¥È¥é¥¤¥°¥é¥Õ¤Ë¤Ä¤¤¤Æ¤Î·Ù¹ð¤ò¹Ô¤Ê¤ï¤Ê¤¤\n" + " -Wcomment{s} ¥³¥á¥ó¥È¤¬Â¾¤Î¥³¥á¥ó¥ÈÆâ¤Ç»Ï¤Þ¤Ã¤Æ¤¤¤¿¤é·Ù¹ð¤¹¤ë\n" + + #: cppinit.c:1922 + msgid "" + " -Wno-comment{s} Do not warn about comments\n" + " -Wtraditional Warn about features not present in traditional C\n" + " -Wno-traditional Do not warn about traditional C\n" + " -Wundef Warn if an undefined macro is used by #if\n" + " -Wno-undef Do not warn about testing undefined macros\n" + " -Wimport Warn about the use of the #import directive\n" + msgstr "" + " -Wno-comment{s} ¥³¥á¥ó¥È¤Ë´Ø¤¹¤ë·Ù¹ð¤ò¹Ô¤Ê¤ï¤Ê¤¤\n" + " -Wtraditional ¸½ºß¤È¤Ï°Û¤Ê¤ë¸Å¤¤ C ¤Ç¤Îµ¡Ç½¤Ë¤Ä¤¤¤Æ·Ù¹ð¤¹¤ë\n" + " -Wno-traditional ¸Å¤¤ C ¤Ë´Ø¤¹¤ë·Ù¹ð¤ò¹Ô¤Ê¤ï¤Ê¤¤\n" + " -Wundef ̤ÄêµÁ¤Î¥Þ¥¯¥í¤¬ #if ¤Ç»È¤ï¤ì¤Æ¤¤¤ì¤Ð·Ù¹ð¤¹¤ë\n" + " -Wno-undef ̤ÄêµÁ¥Þ¥¯¥í¤Îɾ²Á¤Ë´Ø¤¹¤ë·Ù¹ð¤ò¹Ô¤Ê¤ï¤Ê¤¤\n" + " -Wimport #import ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÍøÍѤ˴ؤ·¤Æ·Ù¹ð¤¹¤ë\n" + + #: cppinit.c:1930 + msgid "" + " -Wno-import Do not warn about the use of #import\n" + " -Werror Treat all warnings as errors\n" + " -Wno-error Do not treat warnings as errors\n" + " -Wsystem-headers Do not suppress warnings from system headers\n" + " -Wno-system-headers Suppress warnings from system headers\n" + " -Wall Enable all preprocessor warnings\n" + msgstr "" + " -Wno-import #import ¤ÎÍøÍѤ˴ؤ¹¤ë·Ù¹ð¤ò¹Ô¤Ê¤ï¤Ê¤¤\n" + " -Werror Á´¤Æ¤Î·Ù¹ð¤ò¥¨¥é¡¼¤È¤·¤Æ¼è¤ê°·¤¦\n" + " -Wno-error ·Ù¹ð¤ò¥¨¥é¡¼¤È¤·¤Æ¼è¤ê°·¤ï¤Ê¤¤\n" + " -Wsystem-headers ¥·¥¹¥Æ¥à¥Ø¥Ã¥À¤«¤é¤Î·Ù¹ð¤òÍÞÀ©¤·¤Ê¤¤\n" + " -Wno-system-headers ¥·¥¹¥Æ¥à¥Ø¥Ã¥À¤«¤é¤Î·Ù¹ð¤òÍÞÀ©¤¹¤ë\n" + " -Wall Á´¤Æ¤Î¥×¥ê¥×¥í¥»¥Ã¥µ·Ù¹ð¤òÍ­¸ú¤Ë¤¹¤ë\n" + + #: cppinit.c:1938 + msgid "" + " -M Generate make dependencies\n" + " -MM As -M, but ignore system header files\n" + " -MF Write dependency output to the given file\n" + " -MG Treat missing header file as generated files\n" + msgstr "" + " -M make °Í¸´Ø·¸¤òÀ¸À®¤¹¤ë\n" + " -MM -M ƱÍÍ¡¢Ã¢¤·¥·¥¹¥Æ¥à¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤ò̵»ë¤¹¤ë\n" + " -MF °Í¸´Ø·¸¤Î½ÐÎϤòÍ¿¤¨¤é¤ì¤¿¥Õ¥¡¥¤¥ë¤Ë½ñ¤­¹þ¤à\n" + " -MG ¸«¤Ä¤«¤é¤Ê¤¤¥Ø¥Ã¥À¤òÀ¸À®¤µ¤ì¤ë¥Õ¥¡¥¤¥ë¤È¤·¤Æ°·¤¦\n" + + #: cppinit.c:1944 + msgid "" + " -MP\t\t\t Generate phony targets for all headers\n" + " -MQ Add a MAKE-quoted target\n" + " -MT Add an unquoted target\n" + msgstr "" + " -MP\t\t\t Á´¤Æ¤Î¥Ø¥Ã¥À¤Ë¤Ä¤¤¤Æ phony ¥¿¡¼¥²¥Ã¥È¤òÀ¸À®¤¹¤ë\n" + " -MQ MAKE ¤Ç¤Î¥¯¥ª¡¼¥È¤µ¤ì¤¿¥¿¡¼¥²¥Ã¥È¤òÄɲ乤ë\n" + " -MT ¥¯¥ª¡¼¥È¤µ¤ì¤Ê¤¤¥¿¡¼¥²¥Ã¥È¤òÄɲ乤ë\n" + + #: cppinit.c:1949 + msgid "" + " -D Define a with string '1' as its value\n" + " -D= Define a with as its value\n" + " -A () Assert the to \n" + " -A- () Disable the to \n" + " -U Undefine \n" + " -v Display the version number\n" + msgstr "" + " -D ¤òÄêµÁ¤·¡¢¤½¤ÎÃͤòʸ»úÎó¤Î '1' ¤È¤¹¤ë\n" + " -D= ¤òÄêµÁ¤·¡¢¤½¤ÎÃͤò ¤È¤¹¤ë\n" + " -A () ¤Ë ¤ÈÀ¼ÌÀ¤¹¤ë\n" + " -A- () ¤ò ¤È¤·¤Ê¤¤\n" + " -U ÄêµÁ¤ò²ò½ü¤¹¤ë\n" + " -v ¥Ð¡¼¥¸¥ç¥óÈÖ¹æ¤òɽ¼¨¤¹¤ë\n" + + #: cppinit.c:1957 + msgid "" + " -H Print the name of header files as they are used\n" + " -C Do not discard comments\n" + " -dM Display a list of macro definitions active at end\n" + " -dD Preserve macro definitions in output\n" + " -dN As -dD except that only the names are preserved\n" + " -dI Include #include directives in the output\n" + msgstr "" + " -H »È¤ï¤ì¤¿¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤òɽ¼¨¤¹¤ë\n" + " -C ¥³¥á¥ó¥È¤òÇË´þ¤·¤Ê¤¤\n" + " -dM ºÇ¸å¤ËÍ­¸ú¤Ê¥Þ¥¯¥íÄêµÁ¥ê¥¹¥È¤òɽ¼¨¤¹¤ë\n" + " -dD ½ÐÎϤ˥ޥ¯¥íÄêµÁ¤òÊݸ¤¹¤ë\n" + " -dN -dD ¤ÈƱÍͤÀ¤¬¡¢Ì¾Á°¤À¤±¤òÊݸ¤¹¤ë\n" + " -dI #include ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò½ÐÎϤ˴ޤá¤ë\n" + + #: cppinit.c:1965 + msgid "" + " -fpreprocessed Treat the input file as already preprocessed\n" + " -ftabstop= Distance between tab stops for column reporting\n" + " -P Do not generate #line directives\n" + " -$ Do not allow '$' in identifiers\n" + " -remap Remap file names when including files.\n" + " --version Display version information\n" + " -h or --help Display this information\n" + msgstr "" + " -fpreprocessed ÆþÎÏ¥Õ¥¡¥¤¥ë¤ò´û¤Ë¥×¥ê¥×¥í¥»¥¹ºÑ¤È¤·¤Æ°·¤¦\n" + " -ftabstop= ¥«¥é¥à¤Î¥¿¥Ö´Ö³Ö¤òÊó¹ð¤¹¤ë\n" + " -P #line ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤òÀ¸À®¤·¤Ê¤¤\n" + " -$ ¼±Ê̻ҤǤΠ'$' ¤òµö²Ä¤·¤Ê¤¤\n" + " -remap ¥Õ¥¡¥¤¥ë¥¤¥ó¥¯¥ë¡¼¥É»þ¤Ë¥Õ¥¡¥¤¥ë̾¤òºÆ¥Þ¥Ã¥×¤¹¤ë\n" + " --version ¥Ð¡¼¥¸¥ç¥ó¾ðÊó¤òɽ¼¨¤¹¤ë\n" + " -h or --help ¤³¤Î¾ðÊó¤òɽ¼¨¤¹¤ë\n" + + #: cpplex.c:155 + #, c-format + msgid "trigraph ??%c converted to %c" + msgstr "¥È¥é¥¤¥°¥é¥Õ ??%c ¤Ï %c ¤ËÊÑ´¹¤µ¤ì¤Þ¤·¤¿" + + #: cpplex.c:163 + #, c-format + msgid "trigraph ??%c ignored" + msgstr "¥È¥é¥¤¥°¥é¥Õ ??%c ¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿" + + #: cpplex.c:219 + msgid "backslash and newline separated by space" + msgstr "¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥å¤È²þ¹Ô¤¬¶õÇò¤Çʬ³ä¤µ¤ì¤Þ¤·¤¿" + + #: cpplex.c:225 + msgid "backslash-newline at end of file" + msgstr "¥Õ¥¡¥¤¥ë¤Î½ª¤ê¤Ë¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥å-²þ¹Ô¤¬¤¢¤ê¤Þ¤¹" + + #: cpplex.c:291 + msgid "\"/*\" within comment" + msgstr "¥³¥á¥ó¥ÈÆâ¤Ë \"/*\" ¤¬¤¢¤ê¤Þ¤¹" + + #: cpplex.c:374 + msgid "null character(s) ignored" + msgstr "null ʸ»ú¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿" + + #: cpplex.c:381 + #, c-format + msgid "%s in preprocessing directive" + msgstr "¥×¥ê¥×¥í¥»¥¹Ì¿ÎáÃæ¤Ë %s ¤¬¤¢¤ê¤Þ¤¹" + + #: cpplex.c:449 + #, c-format + msgid "attempt to use poisoned \"%s\"" + msgstr "±øÀ÷¤µ¤ì¤¿ '%s' »È¤ª¤¦¤È¤·¤Æ¤¤¤Þ¤¹" + + #: cpplex.c:457 + msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro" + msgstr "__VA_ARGS__ ¤Ï C99 ²ÄÊѰú¿ô¥Þ¥¯¥í³ÈÄ¥¤Ç¤Î¤ß½Ð¸½¤Ç¤­¤Þ¤¹" + + #: cpplex.c:510 + msgid "'$' character(s) in identifier" + msgstr "'$' ʸ»ú¤¬¼±ÊÌ»Ò¤ËÆþ¤Ã¤Æ¤¤¤Þ¤¹" + + #: cpplex.c:589 + #, c-format + msgid "missing terminating %c character" + msgstr "%c ʸ»ú¤Ç¤Î½ªÃ¼¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: cpplex.c:594 + msgid "possible start of unterminated string literal" + msgstr "½ªÃ¼¤Î¤Ê¤¤Ê¸»úÎó¥ê¥Æ¥é¥ë¤Î¿äÄ곫»Ï°ÌÃÖ" + + #: cpplex.c:689 + msgid "multi-line string literals are deprecated" + msgstr "Ê£¿ô¹Ôʸ»úÎó¥ê¥Æ¥é¥ë¤Ï¿ä¾©¤µ¤ì¤Þ¤»¤ó" + + #: cpplex.c:712 + msgid "null character(s) preserved in literal" + msgstr "¥ê¥Æ¥é¥ëÃæ¤Ç null ʸ»ú¤¬³ÎÊݤµ¤ì¤Þ¤·¤¿" + + #: cpplex.c:914 + msgid "no newline at end of file" + msgstr "¥Õ¥¡¥¤¥ëËöÈø¤Ë²þ¹Ô¤¬¤¢¤ê¤Þ¤»¤ó" + + #: cpplex.c:1034 tradcpp.c:1456 + msgid "unterminated comment" + msgstr "½ªÃ¼¤µ¤ì¤Æ¤¤¤Ê¤¤¥³¥á¥ó¥È" + + #: cpplex.c:1045 + msgid "C++ style comments are not allowed in ISO C89" + msgstr "C++ ¥¹¥¿¥¤¥ë¤Î¥³¥á¥ó¥È¤Ï ISO C89 ¤Ç¤Ïµö¤µ¤ì¤Þ¤»¤ó" + + #: cpplex.c:1047 + msgid "(this will be reported only once per input file)" + msgstr "(¤³¤ì¤ÏÆþÎÏ¥Õ¥¡¥¤¥ë¤Ë¤Ä¤­°ì²ó¤À¤±Êó¹ð¤µ¤ì¤Þ¤¹)" + + #: cpplex.c:1052 + msgid "multi-line comment" + msgstr "Ê£¿ô¹Ô¤Î¥³¥á¥ó¥È" + + #: cpplex.c:1367 + #, fuzzy, c-format + msgid "unknown string token %s\n" + msgstr "ÉÔÌÀ¤Ê¥ì¥¸¥¹¥¿Ì¾¤Ç¤¹: %s" + + #: cpplex.c:1379 + #, fuzzy, c-format + msgid "unspellable token %s" + msgstr "ÄÖ¤ì¤Ê¤¤¥È¡¼¥¯¥ó %s ¤Ç¤¹" + + #: cpplex.c:1635 + #, c-format + msgid "the meaning of '\\%c' varies with -traditional" + msgstr "'\\%c' ¤Î°ÕÌ£¤Ï -traditional ¤ò¤Ä¤±¤¿¾ì¹ç¤È°Û¤Ê¤ê¤Þ¤¹" + + #: cpplex.c:1641 + msgid "incomplete universal-character-name" + msgstr "̵¸ú¤Ê ¥æ¥Ë¥Ð¡¼¥µ¥ëʸ»ú̾" + + #: cpplex.c:1655 + #, fuzzy, c-format + msgid "non-hex digit '%c' in universal-character-name" + msgstr "Èó 16 ¿Ê¿ô '%c' ¤¬ universal-character-name Æâ¤Ë¤¢¤ê¤Þ¤¹" + + #: cpplex.c:1663 + msgid "universal-character-name on EBCDIC target" + msgstr "EBCDIC ¤Î¥¿¡¼¥²¥Ã¥È¤Ç `%c' ¤Ë¥æ¥Ë¥Ð¡¼¥µ¥ë¥­¥ã¥é¥¯¥¿Ì¾¤¬»È¤ï¤ì¤Þ¤·¤¿" + + #: cpplex.c:1677 + #, fuzzy + msgid "universal-character-name out of range" + msgstr "EBCDIC ¤Î¥¿¡¼¥²¥Ã¥È¤Ç `%c' ¤Ë¥æ¥Ë¥Ð¡¼¥µ¥ë¥­¥ã¥é¥¯¥¿Ì¾¤¬»È¤ï¤ì¤Þ¤·¤¿" + + #: cpplex.c:1723 + msgid "the meaning of '\\a' varies with -traditional" + msgstr "'\\a' ¤Î°ÕÌ£¤Ï -traditional ¤ò¤Ä¤±¤¿¾ì¹ç¤È°Û¤Ê¤ê¤Þ¤¹" + + #: cpplex.c:1730 + #, c-format + msgid "non-ISO-standard escape sequence, '\\%c'" + msgstr "Èó ISO ɸ½à¤Î¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹, '\\%c'" + + #: cpplex.c:1740 + #, fuzzy + msgid "the meaning of '\\x' varies with -traditional" + msgstr "`\\x' ¤Î°ÕÌ£¤Ï -traditional ¤ò¤Ä¤±¤¿¾ì¹ç¤È°Û¤Ê¤ê¤Þ¤¹" + + #: cpplex.c:1759 f/lex.c:610 + msgid "\\x used with no following hex digits" + msgstr "\\x ¤Ë¡¢¤½¤ì¤Ë³¤¯¤Ï¤º¤Î 16 ¿Ê¿ô¤¬¤¢¤ê¤Þ¤»¤ó" + + #: cpplex.c:1763 + msgid "hex escape sequence out of range" + msgstr "16 ¿Ê¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹¤¬Èϰϳ°¤Ç¤¹" + + #: cpplex.c:1787 + msgid "octal escape sequence out of range" + msgstr "8 ¿Ê¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹¤¬Èϰϳ°¤Ç¤¹" + + #: cpplex.c:1802 + #, c-format + msgid "unknown escape sequence '\\%c'" + msgstr "ÉÔÌÀ¤Ê¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹ '\\%c'" + + #: cpplex.c:1804 + #, fuzzy, c-format + msgid "unknown escape sequence: '\\%03o'" + msgstr "ÉÔÌÀ¤Ê¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹ '\\%c'" + + #: cpplex.c:1808 + msgid "escape sequence out of range for character" + msgstr "ʸ»ú¤ËÂФ¹¤ë¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹¤¬ÈϰϤò³°¤ì¤Æ¤¤¤Þ¤¹" + + #: cpplex.c:1898 + msgid "empty character constant" + msgstr "¶õ¤Îʸ»úÄê¿ô" + + #: cpplex.c:1902 + msgid "character constant too long" + msgstr "ʸ»úÄê¿ô¤¬Ä¹¤¹¤®¤Þ¤¹" + + #: cpplex.c:1905 + msgid "multi-character character constant" + msgstr "Ê£¿ôʸ»ú¤«¤é¤Ê¤ëʸ»úÄê¿ô" + + #: cpplib.c:222 + #, c-format + msgid "extra tokens at end of #%s directive" + msgstr ";ʬ¤Ê¥È¡¼¥¯¥ó¤¬ #%s ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î½ª¤ê¤Ë¤¢¤ê¤Þ¤¹" + + #: cpplib.c:277 + #, fuzzy + msgid "style of line directive is a GCC extension" + msgstr "#%s ¤Ï GCC ¤Î³ÈÄ¥¤Ç¤¹" + + #: cpplib.c:285 + #, c-format + msgid "#%s is a GCC extension" + msgstr "#%s ¤Ï GCC ¤Î³ÈÄ¥¤Ç¤¹" + + #: cpplib.c:296 + msgid "suggest not using #elif in traditional C" + msgstr "¸Å¤¤ C ¤Ç¤Ï #elif ¤ò»È¤ï¤Ê¤¤Êý¤¬¤¤¤¤¤Ç¤¹" + + #: cpplib.c:299 + #, c-format + msgid "traditional C ignores #%s with the # indented" + msgstr "¸Å¤¤ C ¤Ç¤Ï¡¢¥¤¥ó¥Ç¥ó¥È¤µ¤ì¤¿ # ¤Î #%s ¤ò̵»ë¤·¤Þ¤¹" + + #: cpplib.c:303 + #, c-format + msgid "suggest hiding #%s from traditional C with an indented #" + msgstr "¥¤¥ó¥Ç¥ó¥È¤µ¤ì¤¿ # ¤¬¤¢¤ë¸Å¤¤ C ¤«¤é¤Ï #%s ¤ò±£¤¹¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹" + + #: cpplib.c:386 + #, c-format + msgid "invalid preprocessing directive #%s" + msgstr "̵¸ú¤Ê¥×¥ê¥×¥í¥»¥¹¥Ç¥£¥ì¥¯¥Æ¥£¥ô #%s" + + #: cpplib.c:441 + #, c-format + msgid "no macro name given in #%s directive" + msgstr "¥Þ¥¯¥í̾¤¬ #%s ¥Ç¥£¥ì¥¯¥Æ¥£¥ÖÃæ¤ËÍ¿¤¨¤é¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: cpplib.c:445 + #, c-format + msgid "\"%s\" cannot be used as a macro name as it is an operator in C++" + msgstr "\"%s\" ¤Ï C++ ¤Î±é»»»Ò¤Ç¤¢¤ê¡¢¥Þ¥¯¥í̾¤È¤·¤Æ»ÈÍѤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó" + + #: cpplib.c:448 + msgid "macro names must be identifiers" + msgstr "¥Þ¥¯¥í̾¤Ï¼±Ê̻ҤǤʤ¯¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó" + + #: cpplib.c:459 + #, c-format + msgid "\"%s\" cannot be used as a macro name" + msgstr "\"%s\" ¤Ï¥Þ¥¯¥í̾¤È¤·¤Æ¤Ï»È¤¨¤Þ¤»¤ó" + + #: cpplib.c:497 + #, c-format + msgid "undefining \"%s\"" + msgstr "\"%s\" ¤ò undef ¤·¤Þ¤¹" + + #: cpplib.c:543 + msgid "missing terminating > character" + msgstr "½ªÃ¼Ê¸»ú > ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: cpplib.c:578 + #, c-format + msgid "#%s expects \"FILENAME\" or " + msgstr "#%s ¤Ï \"¥Õ¥¡¥¤¥ë̾\" ¤¢¤ë¤¤¤Ï <¥Õ¥¡¥¤¥ë̾> ¤òɬÍפȤ·¤Þ¤¹" + + #: cpplib.c:589 + #, c-format + msgid "empty file name in #%s" + msgstr "#%s ¤Ç¤Î¥Õ¥¡¥¤¥ë̾¤¬¶õ¤Ç¤¹" + + #: cpplib.c:608 + msgid "#include_next in primary source file" + msgstr "#include_next ¤¬¼ç¤¿¤ë¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤Ë¤¢¤ê¤Þ¤¹" + + #: cpplib.c:615 + msgid "#import is obsolete, use an #ifndef wrapper in the header file" + msgstr "#import ¤Ï¸Å¤¤É½¸½¤Ç¤¹. ¥Ø¥Ã¥À¥Õ¥¡¥¤¥ëÃæ¤Ç #ifndef ¤Î¥é¥Ã¥Ñ¡¼¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤" + + #: cpplib.c:623 + msgid "#include nested too deeply" + msgstr "#include ¤Î¥Í¥¹¥È¤¬¿¼¤¹¤®¤Þ¤¹" + + #: cpplib.c:681 + #, c-format + msgid "invalid flag \"%s\" in line directive" + msgstr "\"%s\" ¤Ï line ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç¤Ï̵¸ú¤Ê¥Õ¥é¥°¤Ç¤¹" + + #: cpplib.c:737 + #, c-format + msgid "\"%s\" after #line is not a positive integer" + msgstr "#line ¤Î¸å¤í¤Î \"%s\" ¤¬Àµ¤ÎÀ°¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: cpplib.c:744 + msgid "line number out of range" + msgstr "¹ÔÈֹ椬Èϰϳ°¤Ç¤¹" + + #: cpplib.c:782 + #, c-format + msgid "\"%s\" is not a valid filename" + msgstr "\"%s\" ¤ÏÀµ¾ï¤Ê¥Õ¥¡¥¤¥ë̾¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: cpplib.c:855 + #, fuzzy + msgid "invalid #ident directive" + msgstr "̵¸ú¤Ê #ident" + + #: cpplib.c:943 + #, c-format + msgid "registering \"%s\" as both a pragma and a pragma namespace" + msgstr "" + + #: cpplib.c:946 + #, fuzzy, c-format + msgid "#pragma %s %s is already registered" + msgstr "¥¯¥é¥¹ `%s' ¤Ï´û¤Ë¸ºß¤·¤Þ¤¹" + + #: cpplib.c:948 + #, c-format + msgid "#pragma %s is already registered" + msgstr "" + + #: cpplib.c:1022 + msgid "#pragma once is obsolete" + msgstr "#pragma once ¤Ï¤â¤¦»È¤ï¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: cpplib.c:1025 + msgid "#pragma once in main file" + msgstr "#pragma once ¤¬¥á¥¤¥ó¥Õ¥¡¥¤¥ë¤Ë¤¢¤ê¤Þ¤¹" + + #: cpplib.c:1049 + msgid "invalid #pragma GCC poison directive" + msgstr "#pragma GCC ±øÀ÷¥Ç¥£¥ì¥¯¥Æ¥£¥ô¤¬Ìµ¸ú¤Ç¤¹" + + #: cpplib.c:1058 + #, c-format + msgid "poisoning existing macro \"%s\"" + msgstr "´û¸¤Î¥Þ¥¯¥í \"%s' ¤ò±øÀ÷¤·¤Þ¤¹" + + #: cpplib.c:1078 + msgid "#pragma system_header ignored outside include file" + msgstr "include ¥Õ¥¡¥¤¥ë³°¤Î #pragma system_header ¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿" + + #: cpplib.c:1103 + #, c-format + msgid "cannot find source %s" + msgstr "¥½¡¼¥¹ %s ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó" + + #: cpplib.c:1107 + #, c-format + msgid "current file is older than %s" + msgstr "¸½ºß¤Î¥Õ¥¡¥¤¥ë¤Ï %s ¤è¤ê¸Å¤¤¤Ç¤¹" + + #: cpplib.c:1182 + msgid "_Pragma takes a parenthesized string literal" + msgstr "_Pramga ¤¬³ç¸Ì¤Ç°Ï¤Þ¤ì¤¿Ê¸»úÎó¥ê¥Æ¥é¥ë¤ò¼õ¤±¼è¤ê¤Þ¤·¤¿" + + #: cpplib.c:1281 + msgid "#else without #if" + msgstr "#else ¤Ë #if ¤¬¤¢¤ê¤Þ¤»¤ó" + + #: cpplib.c:1286 tradcpp.c:3860 + msgid "#else after #else" + msgstr "#else ¤¬ #else ¤Î¸å¤í¤Ë¤¢¤ê¤Þ¤¹" + + #: cpplib.c:1288 cpplib.c:1323 + msgid "the conditional began here" + msgstr "¤½¤Î¾ò·ï¤Ï¤³¤³¤«¤é»Ï¤Þ¤ê¤Þ¤¹" + + #: cpplib.c:1316 + msgid "#elif without #if" + msgstr "#elif ¤Ë #if ¤¬¤¢¤ê¤Þ¤»¤ó" + + #: cpplib.c:1321 tradcpp.c:3555 + msgid "#elif after #else" + msgstr "#elif ¤¬ #else ¤Î¸å¤í¤Ë¤¢¤ê¤Þ¤¹" + + #: cpplib.c:1353 + msgid "#endif without #if" + msgstr "#endif ¤Ë #if ¤¬¤¢¤ê¤Þ¤»¤ó" + + #: cpplib.c:1436 tradcpp.c:3252 + msgid "missing '(' after predicate" + msgstr "½Ò¸ì¤Î¸å¤í¤Î '(' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: cpplib.c:1451 tradcpp.c:3266 + msgid "missing ')' to complete answer" + msgstr "²ò¤òÊä´°¤¹¤ë ')' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: cpplib.c:1471 tradcpp.c:3272 + msgid "predicate's answer is empty" + msgstr "½Ò¸ì¤Î²ò¤¬¶õ¤Ç¤¹" + + #: cpplib.c:1501 tradcpp.c:3320 + msgid "assertion without predicate" + msgstr "½Ò¸ì¤Î¤Ê¤¤¥¢¥µ¡¼¥·¥ç¥ó¤Ç¤¹" + + #: cpplib.c:1503 tradcpp.c:3322 + msgid "predicate must be an identifier" + msgstr "½Ò¸ì¤Ï¼±Ê̻ҤǤʤ±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: cpplib.c:1584 tradcpp.c:3419 + #, c-format + msgid "\"%s\" re-asserted" + msgstr "\"%s\" ¤¬ºÆ¥¢¥µ¡¼¥È¤µ¤ì¤Þ¤·¤¿" + + #: cpplib.c:1813 + #, c-format + msgid "unterminated #%s" + msgstr "½ªÃ¼¤Î¤Ê¤¤ #%s" + + #: cppmacro.c:148 + #, fuzzy, c-format + msgid "invalid built-in macro \"%s\"" + msgstr "ÁȤ߹þ¤ß¥Þ¥¯¥í \"%s\" ¤Ï̵¸ú¤Ç¤¹" + + #: cppmacro.c:347 + msgid "invalid string literal, ignoring final '\\'" + msgstr "ʸ»úÎó¥ê¥Æ¥é¥ë¤¬Ìµ¸ú¤Ç¤¹¡¢ºÇ¸å¤Î '\\' ¤ò̵»ë¤·¤Þ¤¹" + + #: cppmacro.c:437 + #, c-format + msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token" + msgstr "\"%s\" ¤È \"%s\" ¤òŽÉÕ¤±¤Þ¤·¤¿¤¬Àµ¾ï¤Ê¥×¥ê¥×¥í¥»¥Ã¥µ¥È¡¼¥¯¥ó¤È¤Ê¤ê¤Þ¤»¤ó" + + #: cppmacro.c:561 + msgid "directives may not be used inside a macro argument" + msgstr "¥Þ¥¯¥í°ú¿ôÆâ¤Ç¥Ç¥£¥ì¥¯¥È¥ê¤ò»È¤¦¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó" + + #: cppmacro.c:573 + #, c-format + msgid "unterminated argument list invoking macro \"%s\"" + msgstr "½ªÃ¼¤µ¤ì¤Æ¤¤¤Ê¤¤°ú¿ô¥ê¥¹¥È¤¬¥Þ¥¯¥í \"%s\" ¤òµ¯Æ°¤·¤è¤¦¤È¤·¤Þ¤·¤¿" + + #: cppmacro.c:590 + msgid "ISO C99 requires rest arguments to be used" + msgstr "ISO C99 ¤Ï»ÈÍѤµ¤ì¤ë¤Ù¤­»Ä¤ê¤Î¤Î°ú¿ô¤òÍ׵ᤷ¤Þ¤¹" + + #: cppmacro.c:595 + #, c-format + msgid "macro \"%s\" requires %u arguments, but only %u given" + msgstr "¥Þ¥¯¥í \"%s\" ¤Ï°ú¿ô¤ò %u Í׵ᤷ¤Þ¤¹¤¬¡¢%u ¸Ä¤·¤«Í¿¤¨¤é¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: cppmacro.c:606 + #, c-format + msgid "macro \"%s\" passed %u arguments, but takes just %u" + msgstr "¥Þ¥¯¥í \"%s\" ¤Ë°ú¿ô¤¬ %u ÅϤµ¤ì¤Þ¤·¤¿¤¬¡¢%u ¤·¤«¼õ¤±¼è¤ê¤Þ¤»¤ó" + + #: cppmacro.c:689 + #, c-format + msgid "function-like macro \"%s\" must be used with arguments in traditional C" + msgstr "¸Å¤¤ C ¤Ç¤Ï¡¢´Ø¿ôŪ¥Þ¥¯¥í \"%s\" ¤Ë°ú¿ô¤¬Í¿¤¨¤é¤ì¤Í¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: cppmacro.c:1174 + #, c-format + msgid "duplicate macro parameter \"%s\"" + msgstr "¥Þ¥¯¥í²¾°ú¿ô \"%s\" ¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹" + + #: cppmacro.c:1202 + #, c-format + msgid "\"%s\" may not appear in macro parameter list" + msgstr "\"%s\" ¤Ï¥Þ¥¯¥í²¾°ú¿ô¥ê¥¹¥È¤Ë¸½¤ì¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó" + + #: cppmacro.c:1209 + msgid "macro parameters must be comma-separated" + msgstr "¥Þ¥¯¥í²¾°ú¿ô¤Ï¥«¥ó¥Þ¶èÀڤꤵ¤ì¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: cppmacro.c:1226 + msgid "parameter name missing" + msgstr "²¾°ú¿ô̾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: cppmacro.c:1240 + msgid "anonymous variadic macros were introduced in C99" + msgstr "̵̾²ÄÊѰú¿ô¥Þ¥¯¥í¤Ï C99 ¤ÇºÎ¤êÆþ¤ì¤é¤ì¤Þ¤·¤¿" + + #: cppmacro.c:1243 + msgid "ISO C does not permit named variadic macros" + msgstr "ISO C ¤Ç¤Ï̾Á°¤Ä¤­²ÄÊѰú¿ô¥Þ¥¯¥í¤òµö¤·¤Þ¤»¤ó" + + #: cppmacro.c:1252 + msgid "missing ')' in macro parameter list" + msgstr "¥Þ¥¯¥í²¾°ú¿ô¥ê¥¹¥È¤Ç¡¢')' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: cppmacro.c:1328 + msgid "ISO C requires whitespace after the macro name" + msgstr "ISO C ¤Ç¤Ï¥Þ¥¯¥í̾¤Î¸å¤í¤Ë¶õÇò¤òÍ׵ᤷ¤Þ¤¹" + + #: cppmacro.c:1358 + msgid "'#' is not followed by a macro parameter" + msgstr "'#' ¤Ë¥Þ¥¯¥í²¾°ú¿ô̾¤¬Â³¤¤¤Æ¤¤¤Þ¤»¤ó" + + #: cppmacro.c:1378 + msgid "'##' cannot appear at either end of a macro expansion" + msgstr "'##' ¤Ï¥Þ¥¯¥íŸ³«¤Îξü¤Ë¤Ï½Ð¸½¤Ç¤­¤Þ¤»¤ó" + + #: cppmacro.c:1414 + #, c-format + msgid "\"%s\" redefined" + msgstr "\"%s\" ¤¬ºÆÄêµÁ¤µ¤ì¤Þ¤·¤¿" + + #: cppmacro.c:1418 + msgid "this is the location of the previous definition" + msgstr "¤³¤³¤¬°ÊÁ°¤ÎÀë¸À¤¬¤¢¤ë°ÌÃ֤Ǥ¹" + + #: cppmacro.c:1483 + #, fuzzy, c-format + msgid "macro argument \"%s\" would be stringified with -traditional" + msgstr "¥Þ¥¯¥í°ú¿ô \"%s\" ¤Ï -traditional ¤ò¤Ä¤±¤ë¤Èʸ»úÎ󲽤µ¤ì¤¿»ö¤Ç¤·¤ç¤¦" + + #: cppmacro.c:1508 + #, fuzzy, c-format + msgid "invalid hash type %d in cpp_macro_definition" + msgstr "dump_definition ¤Ë ̵¸ú¤Ê¥Ï¥Ã¥·¥å¥¿¥¤¥× %d" + + #: cppmain.c:121 + #, fuzzy, c-format + msgid "invalid option %s" + msgstr "̵¸ú¤Ê¥ª¥×¥·¥ç¥ó %s" + + #: cppspec.c:131 + #, c-format + msgid "\"%s\" is not a valid option to the preprocessor" + msgstr "\"%s\" ¤Ï¥×¥ê¥×¥í¥»¥Ã¥µ¤ËÂФ¹¤ëÀµ¾ï¤Ê¥ª¥×¥·¥ç¥ó¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: cppspec.c:155 + msgid "too many input files" + msgstr "ÆþÎÏ¥Õ¥¡¥¤¥ë¤¬Â¿¤¹¤®¤Þ¤¹" + + #: cse.c:7092 + #, c-format + msgid ";; Processing block from %d to %d, %d sets.\n" + msgstr ";; %d ¤«¤é %d ¤Þ¤Ç¤Î½èÍý¥Ö¥í¥Ã¥¯¡¢%d ¥»¥Ã¥È¡£\n" + + #: diagnostic.c:784 + #, c-format + msgid "%s:%d: warning: " + msgstr "%s:%d: ·Ù¹ð: " + + #: diagnostic.c:791 + #, c-format + msgid "%s: warning: " + msgstr "%s: ·Ù¹ð: " + + #: diagnostic.c:871 + msgid "((anonymous))" + msgstr "((̵̾))" + + #: diagnostic.c:941 + #, c-format + msgid "%s: warnings being treated as errors\n" + msgstr "%s: ·Ù¹ð¤Ï¥¨¥é¡¼¤È¤·¤Æ¼è¤ê°·¤ï¤ì¤Þ¤¹\n" + + #: diagnostic.c:978 + #, c-format + msgid "%s: %s: " + msgstr "%s: %s: " + + #: diagnostic.c:1057 + msgid "sorry, not implemented: " + msgstr "»Äǰ¤Ê¤¬¤é¸«¼ÂÁõ¤Ç¤¹: " + + #: diagnostic.c:1076 + #, c-format + msgid "%s " + msgstr "%s " + + #: diagnostic.c:1078 + #, c-format + msgid " %s" + msgstr " %s" + + #: diagnostic.c:1102 + msgid "At top level:" + msgstr "¥È¥Ã¥×¥ì¥Ù¥ë:" + + #: diagnostic.c:1107 + #, fuzzy, c-format + msgid "In member function `%s':" + msgstr "´Ø¿ô `%s' Æâ:" + + #: diagnostic.c:1111 + #, c-format + msgid "In function `%s':" + msgstr "´Ø¿ô `%s' Æâ:" + + #: diagnostic.c:1195 + msgid "compilation terminated.\n" + msgstr "¥³¥ó¥Ñ¥¤¥ë¤¬ÃæÃǤµ¤ì¤Þ¤·¤¿¡£\n" + + #: diagnostic.c:1226 + #, c-format + msgid "%s:%d: confused by earlier errors, bailing out\n" + msgstr "%s:%d: Á°¤Î¥¨¥é¡¼¤Ë¤è¤êº®Í𤷤Ƥ¤¤Þ¤¹¤Î¤Ç¡¢Ã¦½Ð¤·¤Þ¤¹\n" + + #: diagnostic.c:1240 diagnostic.c:1390 + #, c-format + msgid "" + "Please submit a full bug report,\n" + "with preprocessed source if appropriate.\n" + "See %s for instructions.\n" + msgstr "" + "´°Á´¤Ê¥Ð¥°Êó¹ð¤òÁ÷¤Ã¤Æ²¼¤µ¤¤¡£\n" + "ŬÀڤʤé¤Ð¥×¥ê¥×¥í¥»¥¹¸å¤Î¥½¡¼¥¹¤ò¤Ä¤±¤Æ¤¯¤À¤µ¤¤¡£\n" + "%s ¤ò¸«¤ì¤ÐÊýË¡¤¬½ñ¤¤¤Æ¤¢¤ê¤Þ¤¹¡£\n" + + #: diagnostic.c:1388 + msgid "Internal compiler error: Error reporting routines re-entered.\n" + msgstr "ÆâÉô¥³¥ó¥Ñ¥¤¥ë¥¨¥é¡¼: ¥¨¥é¡¼Êó¹ð¥ë¡¼¥Á¥ó¤ËºÆÆþ¤·¤Þ¤·¤¿¡£\n" + + #: diagnostic.c:1450 + #, c-format + msgid "Internal compiler error in %s, at %s:%d" + msgstr "%s ¤ÇÆâÉô¥³¥ó¥Ñ¥¤¥é¥¨¥é¡¼ (%s:%d)" + + #: diagnostic.c:1495 + #, c-format + msgid "In file included from %s:%d" + msgstr "%s:%d ¤«¤é include ¤µ¤ì¤¿¥Õ¥¡¥¤¥ëÆâ" + + #: diagnostic.c:1498 + #, c-format + msgid "" + ",\n" + " from %s:%d" + msgstr "" + ",\n" + " %s:%d ¤«¤é" + + #: diagnostic.c:1499 + msgid ":\n" + msgstr ":\n" + + #: dwarf2out.c:3009 + #, fuzzy, c-format + msgid "DW_LOC_OP %s not implemented\n" + msgstr "DW_LOC_OP %s ¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó\n" + + #: dwarfout.c:2093 + #, c-format + msgid "internal regno botch: regno = %d\n" + msgstr "ÆâÉôŪ¤Ë regno ¤Î½èÍý¤¬ÊÑ: regno = %d\n" + + #: dwarfout.c:6296 + msgid "can't get current directory" + msgstr "¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó" + + #: emit-rtl.c:1091 + #, fuzzy + msgid "can't access real part of complex value in hard register" + msgstr "¥Ï¡¼¥É¥ì¥¸¥¹¥¿Æâ¤ÇÊ£ÁÇ¿ô¤Î¼Â¿ôÉôʬ¤Ë¥¢¥¯¥»¥¹¤Ç¤­¤Þ¤»¤ó" + + #: emit-rtl.c:1113 + msgid "can't access imaginary part of complex value in hard register" + msgstr "¥Ï¡¼¥É¥ì¥¸¥¹¥¿Æâ¤ÇÊ£ÁÇ¿ô¤Îµõ¿ôÉôʬ¤Ë¥¢¥¯¥»¥¹¤Ç¤­¤Þ¤»¤ó" + + #: emit-rtl.c:3138 + msgid "ICE: emit_insn used where emit_jump_insn needed:\n" + msgstr "ICE: emit_insn ¤¬ emit_jump_insn ¤òÍפ¹¤ë½ê¤Ç»È¤ï¤ì¤Þ¤·¤¿:\n" + + #: errors.c:136 + #, c-format + msgid "abort in %s, at %s:%d" + msgstr "%s ¤ÇÃæÃÇ, °ÌÃÖ %s:%d" + + #: except.c:359 + msgid "exception handling disabled, use -fexceptions to enable" + msgstr "Îã³°½èÍý¤ò̵¸ú¤Ë¤·¤Þ¤·¤¿. Í­¸ú¤Ë¤¹¤ë¤Ë¤Ï -fexceptions ¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤" + + #: except.c:3007 + msgid "argument of `__builtin_eh_return_regno' must be constant" + msgstr "`__builtin_eh_return_regno' ¤Î°ú¿ô¤ÏÄê¿ô¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: except.c:3118 except.c:3140 + msgid "__builtin_eh_return not supported on this target" + msgstr "__builtin_eh_return ¤Ï¤³¤Î¥¿¡¼¥²¥Ã¥È¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: explow.c:1357 + msgid "stack limits not supported on this target" + msgstr "¥¹¥¿¥Ã¥¯À©¸Â¤Ï¤³¤Î¥¿¡¼¥²¥Ã¥È¤Ç¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: expr.c:2919 + msgid "function using short complex types cannot be inline" + msgstr "short complex ·¿¤ò»È¤¦´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤ó" + + #: expr.c:5755 expr.c:5764 expr.c:5773 expr.c:5778 expr.c:6064 expr.c:6080 + msgid "unsupported wide integer operation" + msgstr "¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¥ï¥¤¥ÉÀ°¿ô±é»»" + + #: expr.c:6129 + #, c-format + msgid "prior parameter's size depends on `%s'" + msgstr "Í¥À褹¤ë²¾°ú¿ô¤Î¥µ¥¤¥º¤Ï `%s' ¼¡Âè¤Ç¤¹" + + #: expr.c:6463 + msgid "returned value in block_exit_expr" + msgstr "block_exit_expr ¤ÇÃͤò return ¤·¤Þ¤·¤¿" + + #: final.c:1229 + msgid "negative insn length" + msgstr "" + + #: final.c:2647 + msgid "could not split insn" + msgstr "" + + #: final.c:2990 + #, c-format + msgid "invalid `asm': %s" + msgstr "̵¸ú¤Ê `asm': %s" + + #: final.c:2992 + #, c-format + msgid "output_operand: %s" + msgstr "output_operand: %s" + + #: final.c:3165 + msgid "nested assembly dialect alternatives" + msgstr "" + + #: final.c:3182 final.c:3194 + msgid "unterminated assembly dialect alternative" + msgstr "" + + #: final.c:3238 + #, c-format + msgid "operand number missing after %-letter" + msgstr "±é»»¿ô¤¬ %-letter ¤Î¸å¤Ë¤¢¤ê¤Þ¤»¤ó" + + #: final.c:3241 final.c:3280 + msgid "operand number out of range" + msgstr "±é»»¿ô¤¬Èϰϳ°¤Ç¤¹" + + #: final.c:3299 + #, c-format + msgid "invalid %%-code" + msgstr "̵¸ú¤Ê %%-code" + + #: final.c:3330 + msgid "`%l' operand isn't a label" + msgstr "`%l' ±é»»¤Ï¥é¥Ù¥ë¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #. We can't handle floating point constants; + #. PRINT_OPERAND must handle them. + #: final.c:3437 vmsdbgout.c:464 config/i386/i386.c:5269 + #: config/pdp11/pdp11.c:1570 + msgid "floating constant misused" + msgstr "ÉâÆ°¾®¿ôÄê¿ô¤ò»È¤¤Â»¤Í¤Þ¤·¤¿" + + #: final.c:3492 vmsdbgout.c:521 config/i386/i386.c:5323 + #: config/pdp11/pdp11.c:1617 + msgid "invalid expression as operand" + msgstr "¥ª¥Ú¥é¥ó¥É¤È¤·¤ÆÌµ¸ú¤Ê¼°" + + #: flow.c:360 + msgid "function might be possible candidate for attribute `noreturn'" + msgstr "´Ø¿ô¤Ï¶²¤é¤¯ `noreturn' °À­¤Î¸õÊä¤È»×¤ï¤ì¤Þ¤¹" + + #: flow.c:365 + msgid "`noreturn' function does return" + msgstr "`noreturn' ´Ø¿ô¤¬ return ¤·¤Æ¤¤¤Þ¤¹" + + #: flow.c:384 + msgid "control reaches end of non-void function" + msgstr "À©¸æ¤¬Èó void ´Ø¿ô¤Î½ª¤ê¤ËÅþ㤷¤Þ¤·¤¿" + + #: fold-const.c:3114 fold-const.c:3127 + #, fuzzy, c-format + msgid "comparison is always %d due to width of bit-field" + msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤ÎÉý¤Î¤»¤¤¤ÇÈæ³Ó¤¬¾ï¤Ë %d ¤È¤Ê¤ê¤Þ¤¹" + + #: fold-const.c:4169 fold-const.c:4186 + #, c-format + msgid "comparison is always %d" + msgstr "Èæ³Ó¤¬¾ï¤Ë %d ¤È¤Ê¤ê¤Þ¤¹" + + #: fold-const.c:4317 + msgid "`or' of unmatched not-equal tests is always 1" + msgstr "°ìÃפ·¤Ê¤¤ÃÍÆ±»Î¤Ç¤ÎÈóÅù²Á¤Î `or' ¥Æ¥¹¥È¤Ï¾ï¤Ë 1 ¤Ç¤¹" + + #: fold-const.c:4322 + msgid "`and' of mutually exclusive equal-tests is always 0" + msgstr "Áê¸ßÇÓ¾Ū¤ÊÃͤÎÅù²Á¤Î `and' ¥Æ¥¹¥È¤Ï¾ï¤Ë 0 ¤Ç¤¹" + + #: function.c:5371 + #, c-format + msgid "`%s' might be used uninitialized in this function" + msgstr "`%s' ¤Ï¤³¤Î´Ø¿ôÆâ¤Ç½é´ü²½¤µ¤ì¤º¤Ë»ÈÍѤµ¤ì¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹" + + #: function.c:5378 + #, c-format + msgid "variable `%s' might be clobbered by `longjmp' or `vfork'" + msgstr "ÊÑ¿ô `%s' ¤Ï `longjmp' ¤ä `vfork' ¤Ë¤è¤Ã¤Æ¹ó¤¤¤³¤È¤Ë¤Ê¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹" + + #: function.c:5397 + #, c-format + msgid "argument `%s' might be clobbered by `longjmp' or `vfork'" + msgstr "°ú¿ô `%s' ¤Ï `longjmp' ¤ä `vfork' ¤Ë¤è¤Ã¤Æ¹ó¤¤¤³¤È¤Ë¤Ê¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹" + + #: function.c:6240 + msgid "function returns an aggregate" + msgstr "´Ø¿ô¤¬½¸¹çÂΤòÊÖ¤·¤Æ¤¤¤Þ¤¹" + + #: function.c:6744 + #, c-format + msgid "unused parameter `%s'" + msgstr "°ú¿ô `%s' ¤¬Ì¤»ÈÍѤǤ¹" + + #: gcc.c:1101 + #, fuzzy, c-format + msgid "ambiguous abbreviation %s" + msgstr "¤¢¤¤¤Þ¤¤¤Ê¾Êά %s ¤Ç¤¹" + + #: gcc.c:1128 + #, fuzzy, c-format + msgid "incomplete `%s' option" + msgstr "ÉÔ´°Á´¤Ê `%s' ¥ª¥×¥·¥ç¥ó¤Ç¤¹" + + #: gcc.c:1139 + #, fuzzy, c-format + msgid "missing argument to `%s' option" + msgstr "`%s' ¥ª¥×¥·¥ç¥ó¤ËÂФ¹¤ë°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó" + + #: gcc.c:1152 + #, fuzzy, c-format + msgid "extraneous argument to `%s' option" + msgstr "`%s' ¥ª¥×¥·¥ç¥ó¤ËÂФ·¤ÆÌµ´Ø·¸¤Ê°ú¿ô" + + #: gcc.c:1466 + #, fuzzy + msgid "Using built-in specs.\n" + msgstr "ÁȤ߹þ¤ß spec ¤ò»ÈÍÑ.\n" + + #: gcc.c:1640 + #, c-format + msgid "Setting spec %s to '%s'\n\n" + msgstr "spec %s ¤ò '%s' ¤ËÀßÄêÃæ\n\n" + + #: gcc.c:1738 + #, c-format + msgid "Reading specs from %s\n" + msgstr "%s ¤«¤é spec ¤òÆÉ¤ß¹þ¤ßÃæ\n" + + #: gcc.c:1836 gcc.c:1855 + #, c-format + msgid "specs %%include syntax malformed after %ld characters" + msgstr "specs ¤Î %ld ʸ»úÌܰʹߤΠ%%include ¤Î½ñ¼°¤¬ÊѤǤ¹" + + #: gcc.c:1863 + #, fuzzy, c-format + msgid "could not find specs file %s\n" + msgstr "spec ¥Õ¥¡¥¤¥ë %s ¤ò¸«¤Ä¤±¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿\n" + + #: gcc.c:1879 gcc.c:1887 gcc.c:1896 gcc.c:1905 + #, c-format + msgid "specs %%rename syntax malformed after %ld characters" + msgstr "specs ¤Î %ld ʸ»úÌܰʹߤΠ%%rename ¤Î½ñ¼°¤¬ÊѤǤ¹" + + #: gcc.c:1914 + #, c-format + msgid "specs %s spec was not found to be renamed" + msgstr "spec ¥Õ¥¡¥¤¥ë %s ¤Ë̾Á°¤òÊѹ¹¤¹¤ë spec ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿" + + #: gcc.c:1921 + #, c-format + msgid "rename spec %s to %s\n" + msgstr "spec %s ¤ò %s ¤Ë̾Á°¤òÊѹ¹\n" + + #: gcc.c:1923 + #, c-format + msgid "spec is '%s'\n\n" + msgstr "spec ¤Ï '%s' ¤Ç¤¹\n\n" + + #: gcc.c:1936 + #, c-format + msgid "specs unknown %% command after %ld characters" + msgstr "spec ¥Õ¥¡¥¤¥ëÃæ¤Î %ld ʸ»ú¤Î¸å¤ËÉÔÌÀ¤Ê %% ¥³¥Þ¥ó¥É" + + #: gcc.c:1947 gcc.c:1960 + #, c-format + msgid "specs file malformed after %ld characters" + msgstr "%ld ʸ»ú¤Î¸å¤Ë¤ª¤«¤·¤Ê spec ¥Õ¥¡¥¤¥ë" + + #: gcc.c:2014 + msgid "spec file has no spec for linking" + msgstr "spec ¥Õ¥¡¥¤¥ë¤Ë¥ê¥ó¥¯¤Ë´Ø¤¹¤ë spec ¤¬¤¢¤ê¤Þ¤»¤ó" + + #: gcc.c:2726 + msgid "-pipe not supported" + msgstr "-pipe ¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: gcc.c:2780 + msgid "\nGo ahead? (y or n) " + msgstr "\n³¤±¤Þ¤¹¤«? (y ¤Þ¤¿¤Ï n) " + + #: gcc.c:2879 + #, c-format + msgid "" + "Internal error: %s (program %s)\n" + "Please submit a full bug report.\n" + "See %s for instructions." + msgstr "" + "ÆâÉô¥¨¥é¡¼: %s (¥×¥í¥°¥é¥à %s)\n" + "´°Á´¤Ê¥Ð¥°¥ì¥Ý¡¼¥È¤òÁ÷¤Ã¤Æ¤¯¤À¤µ¤¤¡£\n" + "%s ¤Ë¼ê½ç¤¬½ñ¤¤¤Æ¤¢¤ê¤Þ¤¹¡£" + + #: gcc.c:2897 + #, c-format + msgid "# %s %.2f %.2f\n" + msgstr "# %s %.2f %.2f\n" + + #: gcc.c:3030 + #, c-format + msgid "Usage: %s [options] file...\n" + msgstr "»È¤¤Êý: %s [¥ª¥×¥·¥ç¥ó] ¥Õ¥¡¥¤¥ë...\n" + + #: gcc.c:3031 + msgid "Options:\n" + msgstr "¥ª¥×¥·¥ç¥ó:\n" + + #: gcc.c:3033 + msgid " -pass-exit-codes Exit with highest error code from a phase\n" + msgstr "" + " -pass-exit-codes ¥Õ¥§¡¼¥º¤«¤é¤Î¥¨¥é¡¼¥³¡¼¥É¤ÎºÇÂçÃͤò exit\n" + " ¥³¡¼¥É¤È¤·¤ÆÊÖ¤¹\n" + + #: gcc.c:3034 + msgid " --help Display this information\n" + msgstr " --help ¤³¤Î¥Ø¥ë¥×¾ðÊó¤òɽ¼¨\n" + + #: gcc.c:3035 + msgid " --target-help Display target specific command line options\n" + msgstr " --target-help ¥¿¡¼¥²¥Ã¥È¸ÇÍ­¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó¥ª¥×¥·¥ç¥ó¤òɽ¼¨\n" + + #: gcc.c:3037 + msgid " (Use '-v --help' to display command line options of sub-processes)\n" + msgstr "(`-v --help' ¤ò»È¤¦¤È¡¢»Ò¥×¥í¥»¥¹¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó¥ª¥×¥·¥ç¥ó¤òɽ¼¨)\n" + + #: gcc.c:3038 + msgid " -dumpspecs Display all of the built in spec strings\n" + msgstr " -dumpspecs ÁȤ߹þ¤Þ¤ì¤¿ spec ʸ»úÎó¤òÁ´¤ÆÉ½¼¨\n" + + #: gcc.c:3039 + msgid " -dumpversion Display the version of the compiler\n" + msgstr " -dumpversion ¥³¥ó¥Ñ¥¤¥é¤Î¥Ð¡¼¥¸¥ç¥ó¤òɽ¼¨\n" + + #: gcc.c:3040 + msgid " -dumpmachine Display the compiler's target processor\n" + msgstr " -dumpmachine ¥³¥ó¥Ñ¥¤¥é¤Î¥¿¡¼¥²¥Ã¥È¥×¥í¥»¥Ã¥µ¤òɽ¼¨\n" + + #: gcc.c:3041 + msgid " -print-search-dirs Display the directories in the compiler's search path\n" + msgstr " -print-search-dirs ¥³¥ó¥Ñ¥¤¥é¤Î¥µ¡¼¥Á¥Ñ¥¹¤Ë¤¢¤ë¥Ç¥£¥ì¥¯¥È¥ê¤òɽ¼¨\n" + + #: gcc.c:3042 + msgid " -print-libgcc-file-name Display the name of the compiler's companion library\n" + msgstr " -print-libgcc-file-name ¥³¥ó¥Ñ¥¤¥é¤Î¥³¥ó¥Ñ¥Ë¥ª¥ó¥é¥¤¥Ö¥é¥ê̾¤òɽ¼¨\n" + + #: gcc.c:3043 + msgid " -print-file-name= Display the full path to library \n" + msgstr " -print-file-name= ¥é¥¤¥Ö¥é¥ê ¤Ø¤Î¥Õ¥ë¥Ñ¥¹¤òɽ¼¨\n" + + #: gcc.c:3044 + msgid " -print-prog-name= Display the full path to compiler component \n" + msgstr " -print-prog-name= ¥³¥ó¥Ñ¥¤¥é¤ÎÉôÉÊ ¤Ø¤Î¥Õ¥ë¥Ñ¥¹¤òɽ¼¨\n" + + #: gcc.c:3045 + msgid " -print-multi-directory Display the root directory for versions of libgcc\n" + msgstr " -print-multi-directory libgcc ¤Î¥Ð¡¼¥¸¥ç¥ó¥Ç¥£¥ì¥¯¥È¥ê¥ë¡¼¥È¤òɽ¼¨\n" + + #: gcc.c:3046 + msgid "" + " -print-multi-lib Display the mapping between command line options and\n" + " multiple library search directories\n" + msgstr "" + " -print-multi-lib ¥³¥Þ¥ó¥É¥é¥¤¥ó¥ª¥×¥·¥ç¥ó¤ÈÊ£¿ô¤Î¥é¥¤¥Ö¥é¥êõº÷\n" + " ¥Ç¥£¥ì¥¯¥È¥ê¤È¤ÎÂбþ¤òɽ¼¨\n" + + #: gcc.c:3049 + msgid " -Wa, Pass comma-separated on to the assembler\n" + msgstr " -Wa, ¥«¥ó¥Þ¶èÀÚ¤ê¤Î ¤ò¥¢¥»¥ó¥Ö¥é¤ËÅϤ¹\n" + + #: gcc.c:3050 + msgid " -Wp, Pass comma-separated on to the preprocessor\n" + msgstr " -Wp, ¥«¥ó¥Þ¶èÀÚ¤ê¤Î ¤ò¥×¥ê¥×¥í¥»¥Ã¥µ¤ËÅϤ¹\n" + + #: gcc.c:3051 + msgid " -Wl, Pass comma-separated on to the linker\n" + msgstr " -Wl, ¥«¥ó¥Þ¶èÀÚ¤ê¤Î ¤ò¥ê¥ó¥«¤ËÅϤ¹\n" + + #: gcc.c:3052 + msgid " -Xlinker Pass on to the linker\n" + msgstr " -Xlinker ¤ò¥ê¥ó¥«¤ËÅϤ¹\n" + + #: gcc.c:3053 + msgid " -save-temps Do not delete intermediate files\n" + msgstr " -save-temps Ãæ´Ö¥Õ¥¡¥¤¥ë¤òºï½ü¤·¤Ê¤¤\n" + + #: gcc.c:3054 + msgid " -pipe Use pipes rather than intermediate files\n" + msgstr " -pipe Ãæ´Ö¥Õ¥¡¥¤¥ë¤Ç¤Ï¤Ê¤¯¥Ñ¥¤¥×¤ò»È¤¦\n" + + #: gcc.c:3055 + msgid " -time Time the execution of each subprocess\n" + msgstr " -time »Ò¥×¥í¥»¥¹¤´¤È¤Î¼Â¹Ô»þ´Ö¤ò·×¬¤¹¤ë\n" + + #: gcc.c:3056 + #, fuzzy + msgid " -specs= Override built-in specs with the contents of \n" + msgstr " -specs= ÁȤ߹þ¤ß specs ¤ò ¤ÎÆâÍÆ¤ÇÃÖ¤­´¹¤¨¤ë\n" + + #: gcc.c:3057 + msgid " -std= Assume that the input sources are for \n" + msgstr " -std= ÆþÎÏ¥½¡¼¥¹¤ò ¤È¸«¤Ê¤¹\n" + + #: gcc.c:3058 + msgid " -B Add to the compiler's search paths\n" + msgstr " -B ¤ò¥³¥ó¥Ñ¥¤¥é¤Îõº÷¥Ñ¥¹¤ËÄɲ乤ë\n" + + #: gcc.c:3059 + msgid " -b Run gcc for target , if installed\n" + msgstr "" + " -b ¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤ì¤Ð¥¿¡¼¥²¥Ã¥È ¤È¤·¤Æ\n" + " gcc ¤ò¼Â¹Ô¤¹¤ë\n" + + #: gcc.c:3060 + msgid " -V Run gcc version number , if installed\n" + msgstr "" + " -V ¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤ì¤Ð ¥Ð¡¼¥¸¥ç¥óÈÖ¹æ¤Î\n" + " gcc ¤È¤·¤Æ¼Â¹Ô¤¹¤ë\n" + + #: gcc.c:3061 + msgid " -v Display the programs invoked by the compiler\n" + msgstr " -v ¥³¥ó¥Ñ¥¤¥é¤Ë¤è¤Ã¤Æµ¯Æ°¤µ¤ì¤ë¥×¥í¥°¥é¥à¤òɽ¼¨\n" + + #: gcc.c:3062 + msgid " -### Like -v but options quoted and commands not executed\n" + msgstr "" + + #: gcc.c:3063 + msgid " -E Preprocess only; do not compile, assemble or link\n" + msgstr "" + " -E ¥×¥ê¥×¥í¥»¥¹¤Î¤ß -- ¥³¥ó¥Ñ¥¤¥ë¡¢¥¢¥»¥ó¥Ö¥ë¡¢¥ê¥ó¥¯\n" + " ¤ò¹Ô¤Ê¤ï¤Ê¤¤\n" + + #: gcc.c:3064 + msgid " -S Compile only; do not assemble or link\n" + msgstr " -S ¥³¥ó¥Ñ¥¤¥ë¤Î¤ß -- ¥¢¥»¥ó¥Ö¥ë¡¢¥ê¥ó¥¯¤ò¹Ô¤Ê¤ï¤Ê¤¤\n" + + #: gcc.c:3065 + msgid " -c Compile and assemble, but do not link\n" + msgstr " -c ¥³¥ó¥Ñ¥¤¥ë¡¢¥¢¥»¥ó¥Ö¥ë¤¹¤ë¤¬¡¢¥ê¥ó¥¯¤ò¹Ô¤Ê¤ï¤Ê¤¤\n" + + #: gcc.c:3066 + msgid " -o Place the output into \n" + msgstr " -o ¤Ë½ÐÎϤò¹Ô¤Ê¤¦\n" + + #: gcc.c:3067 + #, fuzzy + msgid "" + " -x Specify the language of the following input files\n" + " Permissable languages include: c c++ assembler none\n" + " 'none' means revert to the default behavior of\n" + " guessing the language based on the file's extension\n" + msgstr "" + " -x °Ê²¼¤ÎÆþÎÏ¥Õ¥¡¥¤¥ë¤Î¸À¸ì¤ò»ØÄꤹ¤ë\n" + " »ØÄê¤Ç¤­¤ë¸À¸ì: c c++ assembler none\n" + " 'none' ¤ò»ØÄꤹ¤ë¤È¥Õ¥¡¥¤¥ë³ÈÄ¥»Ò¤Ë¤è¤Ã¤Æ¸À¸ì¤ò\n" + " ¿äÄꤹ¤ë¡¢¥Ç¥Õ¥©¥ë¥È¤Î¿¶¤ëÉñ¤¤¤ËÌá¤ë\n" + + #: gcc.c:3074 + #, c-format + msgid "" + "\n" + "Options starting with -g, -f, -m, -O, -W, or --param are automatically\n" + " passed on to the various sub-processes invoked by %s. In order to pass\n" + " other options on to these processes the -W options must be used.\n" + msgstr "" + "\n" + "-g, -f, -m, -O, -W ¤Ç»Ï¤Þ¤ë¥ª¥×¥·¥ç¥ó¤ä¡¢--param ¤Ï %s ¤¬µ¯Æ°¤¹¤ë¤¢¤é¤æ¤ë\n" + "»Ò¥×¥í¥»¥¹¤Ë¼«Æ°Åª¤ËÅϤµ¤ì¤Þ¤¹¡£¤³¤¦¤¤¤Ã¤¿¥×¥í¥»¥¹¤Ë¤½¤Î¾¤Î¥ª¥×¥·¥ç¥ó¤òÅϤ¹\n" + "¤Ë¤Ï -W ¥ª¥×¥·¥ç¥ó¤ò»È¤ï¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£\n" + + #: gcc.c:3445 + msgid "argument to `-Xlinker' is missing" + msgstr "`-Xlinker' ¤Î°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó" + + #: gcc.c:3453 + #, fuzzy + msgid "argument to `-l' is missing" + msgstr "`-x' ¤Î°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó" + + #: gcc.c:3470 + msgid "argument to `-specs' is missing" + msgstr "`-specs' ¤Î°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó" + + #: gcc.c:3485 + msgid "argument to `-specs=' is missing" + msgstr "`-specs=' ¤Î°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó" + + #: gcc.c:3516 + msgid "argument to `-b' is missing" + msgstr "`-b' ¤Î°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó" + + #: gcc.c:3531 + msgid "argument to `-B' is missing" + msgstr "`-B' ¤Î°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó" + + #: gcc.c:3601 + msgid "argument to `-V' is missing" + msgstr "`-V' ¤Î°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó" + + #: gcc.c:3622 gcc.c:3629 gcc.c:3636 + msgid "invalid version number format" + msgstr "̵¸ú¤Ê¥Ð¡¼¥¸¥ç¥óÈÖ¹æ·Á¼°" + + #: gcc.c:3747 + msgid "cannot specify -o with -c or -S and multiple compilations" + msgstr "-c ¤ä -S ¤È°ì½ï¤Ë -o ¤ò»ØÄꤹ¤ë¤È¡¢Ê£¿ô¥³¥ó¥Ñ¥¤¥ë¤Ç¤­¤Þ¤»¤ó" + + #: gcc.c:3918 + #, fuzzy + msgid "warning: -pipe ignored because -save-temps specified" + msgstr "·Ù¹ð: -save-temps ¤¬»ØÄꤵ¤ì¤¿¤Î¤Ç -pipe ¤Ï̵»ë¤µ¤ì¤Þ¤¹" + + #: gcc.c:3922 + #, fuzzy + msgid "warning: -pipe ignored because -time specified" + msgstr "·Ù¹ð: -time ¤¬»ØÄꤵ¤ì¤¿¤Î¤Ç -pipe ¤Ï̵»ë¤µ¤ì¤Þ¤¹" + + #: gcc.c:3934 + msgid "argument to `-x' is missing" + msgstr "`-x' ¤Î°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó" + + #: gcc.c:3962 + #, c-format + msgid "argument to `-%s' is missing" + msgstr "`-%s' ¤Î°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó" + + #: gcc.c:4023 + #, fuzzy, c-format + msgid "warning: `-x %s' after last input file has no effect" + msgstr "·Ù¹ð: ºÇ¸å¤ÎÆþÎÏ¥Õ¥¡¥¤¥ë¤Î¸å¤Î `-x %s' ¤Ï²¿¤â¤·¤Þ¤»¤ó" + + #: gcc.c:4322 + #, fuzzy + msgid "invalid specification! Bug in cc" + msgstr "̵¸ú¤Ê»ØÄê! cc ¤Î¥Ð¥°." + + #: gcc.c:4471 + #, c-format + msgid "%s\n" + msgstr "%s\n" + + #. Catch the case where a spec string contains something like + #. '%{foo:%*}'. ie there is no * in the pattern on the left + #. hand side of the :. + #: gcc.c:5030 + #, fuzzy, c-format + msgid "spec failure: '%%*' has not been initialized by pattern match" + msgstr "spec ¥¨¥é¡¼: '%%*' ¤Ï¥Ñ¥¿¡¼¥ó¥Þ¥Ã¥Á¤Ç½é´ü²½¤µ¤ì¤Ê¤¤¤Þ¤Þ¤Ç¤¹" + + #: gcc.c:5039 + #, fuzzy, c-format + msgid "warning: use of obsolete %%[ operator in specs" + msgstr "·Ù¹ð: µì¼°¤Î %%[ ±é»»»Ò¤¬ spec ¤ÎÃæ¤Ë¤¢¤ê¤Þ¤¹" + + #: gcc.c:5057 + #, c-format + msgid "Processing spec %c%s%c, which is '%s'\n" + msgstr "spec %c%s%c ¤ò½èÍýÃæ, ¤³¤ì¤Ï '%s' ¤Ç¤¹\n" + + #: gcc.c:5182 + #, fuzzy, c-format + msgid "spec failure: unrecognized spec option '%c'" + msgstr "spec ¥¨¥é¡¼: ǧ¼±ÉÔǽ¤Ê spec ¥ª¥×¥·¥ç¥ó '%c'" + + #: gcc.c:5292 + msgid "mismatched braces in specs" + msgstr "" + + #: gcc.c:5970 + #, c-format + msgid "unrecognized option `-%s'" + msgstr "ǧ¼±ÉÔǽ¤Ê¥ª¥×¥·¥ç¥ó `-%s'" + + #: gcc.c:5976 + #, c-format + msgid "install: %s%s\n" + msgstr "¥¤¥ó¥¹¥È¡¼¥ë: %s%s\n" + + #: gcc.c:5977 + #, c-format + msgid "programs: %s\n" + msgstr "¥×¥í¥°¥é¥à: %s\n" + + #: gcc.c:5978 + #, c-format + msgid "libraries: %s\n" + msgstr "¥é¥¤¥Ö¥é¥ê: %s\n" + + #: gcc.c:6026 + msgid "\nFor bug reporting instructions, please see:\n" + msgstr "\n¥Ð¥°¥ì¥Ý¡¼¥È¤Î¼ê½ç¤Ï¡¢°Ê²¼¤ò»²¾È\n" + + #: gcc.c:6042 + #, c-format + msgid "Configured with: %s\n" + msgstr "¥³¥ó¥Õ¥£¥°¥ª¥×¥·¥ç¥ó: %s\n" + + #: gcc.c:6056 + #, c-format + msgid "Thread model: %s\n" + msgstr "¥¹¥ì¥Ã¥É¥â¥Ç¥ë: %s\n" + + #: gcc.c:6067 + #, c-format + msgid "gcc version %s\n" + msgstr "gcc ¥Ð¡¼¥¸¥ç¥ó %s\n" + + #: gcc.c:6069 + #, c-format + msgid "gcc driver version %s executing gcc version %s\n" + msgstr "gcc ¥É¥é¥¤¥Ð¥Ð¡¼¥¸¥ç¥ó %s ¼Â¹Ô gcc ¥Ð¡¼¥¸¥ç¥ó %s\n" + + #: gcc.c:6077 + #, fuzzy + msgid "no input files" + msgstr "ÆþÎÏ¥Õ¥¡¥¤¥ë¤¬¤¢¤ê¤Þ¤»¤ó" + + #: gcc.c:6115 + #, c-format + msgid "%s: %s compiler not installed on this system" + msgstr "%s: %s ¥³¥ó¥Ñ¥¤¥é¤Ï¤³¤Î¥·¥¹¥Æ¥à¤Ë¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: gcc.c:6190 + #, c-format + msgid "%s: linker input file unused because linking not done" + msgstr "%s: ¥ê¥ó¥¯¤¬´°Î»¤·¤Ê¤«¤Ã¤¿¤Î¤Ç¥ê¥ó¥«¤ÎÆþÎÏ¥Õ¥¡¥¤¥ë¤Ï»È¤ï¤ì¤Þ¤»¤ó¤Ç¤·¤¿" + + #: gcc.c:6233 + #, c-format + msgid "language %s not recognized" + msgstr "¸À¸ì %s ¤Ïǧ¼±¤Ç¤­¤Þ¤»¤ó" + + #: gcc.c:6336 + #, fuzzy + msgid "internal gcc abort" + msgstr "ÆâÉô gcc ÃæÃÇ" + + #: gcov.c:282 + msgid "Internal gcov abort.\n" + msgstr "ÆâÉô gcc abort.\n" + + #: gcov.c:295 + msgid "Usage: gcov [OPTION]... SOURCEFILE\n\n" + msgstr "" + + #: gcov.c:296 + #, fuzzy + msgid "Print code coverage information.\n\n" + msgstr "¸Æ¤Ó½Ð¤·¥°¥é¥Õ¾ðÊó¤òÁ÷½Ð¤¹¤ë" + + #: gcov.c:297 + #, fuzzy + msgid " -h, --help Print this help, then exit\n" + msgstr " --help ¤³¤Î¥Ø¥ë¥×¾ðÊó¤òɽ¼¨\n" + + #: gcov.c:298 + #, fuzzy + msgid " -v, --version Print version number, then exit\n" + msgstr "" + " -V ¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤ì¤Ð ¥Ð¡¼¥¸¥ç¥óÈÖ¹æ¤Î\n" + " gcc ¤È¤·¤Æ¼Â¹Ô¤¹¤ë\n" + + #: gcov.c:299 + msgid " -b, --branch-probabilities Include branch probabilities in output\n" + msgstr "" + + #: gcov.c:300 + msgid "" + " -c, --branch-counts Given counts of branches taken\n" + " rather than percentages\n" + msgstr "" + + #: gcov.c:302 + #, fuzzy + msgid " -n, --no-output Do not create an output file\n" + msgstr " -save-temps Ãæ´Ö¥Õ¥¡¥¤¥ë¤òºï½ü¤·¤Ê¤¤\n" + + #: gcov.c:303 + msgid "" + " -l, --long-file-names Use long output file names for included\n" + " source files\n" + msgstr "" + + #: gcov.c:305 + msgid " -f, --function-summaries Output summaries for each function\n" + msgstr "" + + #: gcov.c:306 + msgid " -o, --object-directory OBJDIR Search for object files in OBJDIR\n" + msgstr "" + + #: gcov.c:307 + #, fuzzy, c-format + msgid "" + "\n" + "For bug reporting instructions, please see:\n" + "%s.\n" + msgstr "\n¥Ð¥°¥ì¥Ý¡¼¥È¤Î¼ê½ç¤Ï¡¢°Ê²¼¤ò»²¾È\n" + + #: gcov.c:317 + #, c-format + msgid "gcov (GCC) %s\n" + msgstr "" + + #: gcov.c:318 + msgid "Copyright (C) 2001 Free Software Foundation, Inc.\n" + msgstr "" + + #: gcov.c:320 + msgid "" + "This is free software; see the source for copying conditions. There is NO\n" + "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" + "\n" + msgstr "" + + #: gcov.c:462 + #, c-format + msgid "Could not open basic block file %s.\n" + msgstr "´ðËÜ¥Ö¥í¥Ã¥¯¥Õ¥¡¥¤¥ë %s ¤ò³«¤±¤Þ¤»¤ó¤Ç¤·¤¿¡£\n" + + #: gcov.c:471 + #, c-format + msgid "Could not open data file %s.\n" + msgstr "¥Ç¡¼¥¿¥Õ¥¡¥¤¥ë %s ¤ò³«¤¯¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£\n" + + #: gcov.c:472 + msgid "Assuming that all execution counts are zero.\n" + msgstr "Á´¼Â¹Ô¿ô¤¬¥¼¥í¤Ç¤¢¤ë¤È²¾Äꤷ¤Þ¤¹¡£\n" + + #: gcov.c:478 + #, c-format + msgid "Could not open program flow graph file %s.\n" + msgstr "¥×¥í¥°¥é¥à¥Õ¥í¡¼¥Õ¥¡¥¤¥ë %s ¤ò³«¤±¤Þ¤»¤ó¤Ç¤·¤¿¡£\n" + + #: gcov.c:489 + #, c-format + msgid "No executable code associated with file %s.\n" + msgstr "¥Õ¥¡¥¤¥ë %s ¤Ë·ë¤ÓÉÕ¤¯¼Â¹Ô¥³¡¼¥É¤¬¤¢¤ê¤Þ¤»¤ó¡£\n" + + #: gcov.c:789 + msgid ".da file contents exhausted too early\n" + msgstr ".da ¥Õ¥¡¥¤¥ë¤ÎÆâÍÆ¤ò¤¢¤Þ¤ê¤ËÁ᤯»È¤¤ÀڤäƤ·¤Þ¤¤¤Þ¤·¤¿\n" + + #: gcov.c:792 + msgid ".da file contents not exhausted\n" + msgstr ".da ¥Õ¥¡¥¤¥ë¤ÎÆâÍÆ¤ò»È¤¤ÀڤäƤ¤¤Þ¤»¤ó\n" + + #: gcov.c:973 + #, c-format + msgid "%6.2f%% of %d source lines executed in function %s\n" + msgstr "%6.2f%%(%d ¹ÔÃæ) ¤Î¥½¡¼¥¹¹Ô¤¬´Ø¿ô %s ¤Ç¼Â¹Ô¤µ¤ì¤Þ¤·¤¿\n" + + #: gcov.c:977 + #, c-format + msgid "No executable source lines in function %s\n" + msgstr "´Ø¿ô %s ¤Ë¼Â¹Ô²Äǽ¤Ê¥½¡¼¥¹¹Ô¤¬¤¢¤ê¤Þ¤»¤ó\n" + + #: gcov.c:984 + #, c-format + msgid "%6.2f%% of %d branches executed in function %s\n" + msgstr "%6.2f%%(%d ËÜÃæ) ¤Î¥Ö¥é¥ó¥Á¤¬´Ø¿ô %s Æâ¤Ç¼Â¹Ô¤µ¤ì¤Þ¤·¤¿\n" + + #: gcov.c:988 + #, c-format + msgid "%6.2f%% of %d branches taken at least once in function %s\n" + msgstr "%6.2f%%(%d ËÜÃæ) ¤Î¥Ö¥é¥ó¥Á¤¬¾¯¤Ê¤¯¤È¤â°ìÅ٤ϴؿô %s ¤Ç¼õ¼è¤é¤ì¤Þ¤·¤¿\n" + + #: gcov.c:993 + #, c-format + msgid "No branches in function %s\n" + msgstr "´Ø¿ô %s ¤Ë¤Ïʬ´ô¤¬¤¢¤ê¤Þ¤»¤ó\n" + + #: gcov.c:995 + #, c-format + msgid "%6.2f%% of %d calls executed in function %s\n" + msgstr "%6.2f%%(%d ²ó) ¤Î¸Æ¤Ó½Ð¤·¤¬´Ø¿ô %s ¤Ç¼Â¹Ô¤µ¤ì¤Þ¤·¤¿\n" + + #: gcov.c:999 + #, c-format + msgid "No calls in function %s\n" + msgstr "´Ø¿ô %s ¤Ë¸Æ¤Ó½Ð¤·¤¬¤¢¤ê¤Þ¤»¤ó\n" + + #: gcov.c:1126 + #, c-format + msgid "didn't use all bb entries of graph, function %s\n" + msgstr "¥°¥é¥Õ¤Î bb ¥¨¥ó¥È¥ê¤Î°ìÉô¤·¤«»È¤¤¤Þ¤»¤ó¤Ç¤·¤¿¡¢´Ø¿ô %s\n" + + #: gcov.c:1128 + #, c-format + msgid "block_num = %ld, num_blocks = %d\n" + msgstr "¥Ö¥í¥Ã¥¯¿ô = %ld¡¢ÈÖ¹æ¥Ö¥í¥Ã¥¯ = %d\n" + + #: gcov.c:1166 + #, c-format + msgid "ERROR: too many basic blocks in .bb file %s\n" + msgstr "¥¨¥é¡¼: .bb ¥Õ¥¡¥¤¥ë %s ¤Ë´ðËÜ¥Ö¥í¥Ã¥¯¤¬Â¿¤¹¤®¤Þ¤¹\n" + + #: gcov.c:1243 + #, c-format + msgid "%6.2f%% of %d source lines executed in file %s\n" + msgstr "%6.2f%%(%d ¹ÔÃæ) ¤Î¥½¡¼¥¹¹Ô¤¬¥Õ¥¡¥¤¥ë %s ¤Ç¼Â¹Ô¤µ¤ì¤Þ¤·¤¿\n" + + #: gcov.c:1247 + #, c-format + msgid "No executable source lines in file %s\n" + msgstr "¥Õ¥¡¥¤¥ë %s ¤Ë¼Â¹Ô²Äǽ¤Ê¥½¡¼¥¹¹Ô¤¬¤¢¤ê¤Þ¤»¤ó\n" + + #: gcov.c:1254 + #, c-format + msgid "%6.2f%% of %d branches executed in file %s\n" + msgstr "%6.2f%%(%d ËÜÃæ) ¤Î¥Ö¥é¥ó¥Á¤¬¥Õ¥¡¥¤¥ë %s ¤Ç¼Â¹Ô¤µ¤ì¤Þ¤·¤¿\n" + + #: gcov.c:1258 + #, c-format + msgid "%6.2f%% of %d branches taken at least once in file %s\n" + msgstr "%6.2f%%(%d ËÜÃæ) ¤Î¥Ö¥é¥ó¥Á¤¬¾¯¤Ê¤¯¤È¤â°ì²ó¤Ï¥Õ¥¡¥¤¥ë %s ¤Ç¼õ¼è¤é¤ì¤Þ¤·¤¿\n" + + #: gcov.c:1263 + #, c-format + msgid "No branches in file %s\n" + msgstr "¥Õ¥¡¥¤¥ë %s ¤Ë¤Ï¥Ö¥é¥ó¥Á¤¬¤¢¤ê¤Þ¤»¤ó\n" + + #: gcov.c:1265 + #, c-format + msgid "%6.2f%% of %d calls executed in file %s\n" + msgstr "%6.2f%%(%d ²óÃæ) ¤Î¸Æ¤Ó½Ð¤·¤¬¥Õ¥¡¥¤¥ë %s Æâ¤Ç¼Â¹Ô¤µ¤ì¤Þ¤·¤¿\n" + + #: gcov.c:1269 + #, c-format + msgid "No calls in file %s\n" + msgstr "¥Õ¥¡¥¤¥ë %s ¤Ë¸Æ¤Ó½Ð¤·¤¬¤¢¤ê¤Þ¤»¤ó\n" + + #: gcov.c:1281 + #, c-format + msgid "Could not open source file %s.\n" + msgstr "¥½¡¼¥¹¥Õ¥¡¥¤¥ë %s ¤ò³«¤±¤Þ¤»¤ó¤Ç¤·¤¿.\n" + + #: gcov.c:1331 + #, c-format + msgid "Could not open output file %s.\n" + msgstr "½ÐÎÏ¥Õ¥¡¥¤¥ë %s ¤ò³«¤±¤Þ¤»¤ó¤Ç¤·¤¿.\n" + + #: gcov.c:1339 + #, c-format + msgid "Creating %s.\n" + msgstr "%s ¤òºîÀ®Ãæ.\n" + + #: gcov.c:1387 + #, c-format + msgid "call %d never executed\n" + msgstr "¸Æ¤Ó½Ð¤· %d ¤Ï°ìÅÙ¤â¼Â¹Ô¤»¤º\n" + + #: gcov.c:1396 + #, fuzzy, c-format + msgid "call %d returns = %s\n" + msgstr "¸Æ¤Ó½Ð¤· %d ¤ÎÌá¤ê = %d\n" + + #: gcov.c:1406 + #, fuzzy, c-format + msgid "call %d returns = %s%%\n" + msgstr "¸Æ¤Ó½Ð¤· %d ¤ÎÌá¤ê = %d%%\n" + + #: gcov.c:1413 + #, c-format + msgid "branch %d never executed\n" + msgstr "¥Ö¥é¥ó¥Á %d ¤Ï°ìÅÙ¤â¼Â¹Ô¤µ¤ì¤º\n" + + #: gcov.c:1423 + #, fuzzy, c-format + msgid "branch %d taken = %s\n" + msgstr "¥Ö¥é¥ó¥Á %d ¼õÍý = %d\n" + + #: gcov.c:1433 + #, fuzzy, c-format + msgid "branch %d taken = %s%%\n" + msgstr "¥Ö¥é¥ó¥Á %d ¼õÍý = %d%%\n" + + #: gcov.c:1444 + #, c-format + msgid "Unexpected EOF while reading source file %s.\n" + msgstr "¥½¡¼¥¹¥Õ¥¡¥¤¥ë %s ¤òÆÉ¤ß¹þ¤ßÃæ¤Ëͽ´ü¤»¤Ì EOF.\n" + + #: gcse.c:756 + #, c-format + msgid "GCSE disabled: %d > 1000 basic blocks and %d >= 20 edges/basic block" + msgstr "GCSE ¤ò̵¸ú²½: %d > 1000 ´ðËÜ¥Ö¥í¥Ã¥¯¡¢µÚ¤Ó %d >= 20 edge/´ðËÜ¥Ö¥í¥Ã¥¯" + + #: gcse.c:768 + #, c-format + msgid "GCSE disabled: %d basic blocks and %d registers" + msgstr "GCSE ¤ò̵¸ú²½: %d ´ðËÜ¥Ö¥í¥Ã¥¯¡¢µÚ¤Ó %d ¸Ä¤Î¥ì¥¸¥¹¥¿" + + #: graph.c:421 profile.c:950 profile.c:958 toplev.c:1842 toplev.c:4908 + #: ch/grant.c:2652 ch/lex.c:212 ch/lex.c:2189 f/com.c:14269 + #: java/jcf-parse.c:963 java/jcf-parse.c:1115 java/lex.c:1782 + #: objc/objc-act.c:534 + #, c-format + msgid "can't open %s" + msgstr "%s ¤ò³«¤±¤Þ¤»¤ó" + + #: haifa-sched.c:190 + #, c-format + msgid "fix_sched_param: unknown param: %s" + msgstr "fix_sched_param: ÉÔÌÀ¤Ê¥Ñ¥é¥á¥¿: %s" + + #: integrate.c:185 + msgid "function cannot be inline" + msgstr "´Ø¿ô¤ò inline ¤Ë¤Ç¤­¤Þ¤»¤ó" + + #: integrate.c:190 + msgid "varargs function cannot be inline" + msgstr "²ÄÊѰú¿ô´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤ó" + + #: integrate.c:193 + msgid "function using alloca cannot be inline" + msgstr "alloca ¤ò»È¤Ã¤Æ¤¤¤ë´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤ó" + + #: integrate.c:196 + msgid "function using setjmp cannot be inline" + msgstr "setjmp ¤ò»È¤Ã¤Æ¤¤¤ë´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤ó" + + #: integrate.c:199 + msgid "function uses __builtin_eh_return" + msgstr "´Ø¿ô¤¬ __builtin_eh_return ¤ò»È¤¤¤Þ¤¹" + + #: integrate.c:202 + msgid "function with nested functions cannot be inline" + msgstr "Æþ¤ì»Ò´Ø¿ô¤ò»ý¤Ä´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤ó" + + #: integrate.c:206 + msgid "function with label addresses used in initializers cannot inline" + msgstr "¥é¥Ù¥ë¥¢¥É¥ì¥¹¤ò»ý¤Á¡¢½é´ü²½»Ò¤Ç»È¤ï¤ì¤ë´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤ó" + + #: integrate.c:213 integrate.c:257 + msgid "function too large to be inline" + msgstr "´Ø¿ô¤¬Â礭¤¹¤®¤Æ inline ¤Ë¤Ç¤­¤Þ¤»¤ó" + + #: integrate.c:223 + msgid "no prototype, and parameter address used; cannot be inline" + msgstr "¥×¥í¥È¥¿¥¤¥×¤¬¤Ê¤¯¡¢²¾°ú¿ô¤Î¥¢¥É¥ì¥¹¤¬»È¤ï¤ì¤Æ¤¤¤ë -- inline ¤Ë¤Ç¤­¤Þ¤»¤ó" + + #: integrate.c:230 integrate.c:275 + msgid "inline functions not supported for this return value type" + msgstr "¤³¤ÎÌá¤êÃÍ·¿¤Î inline ´Ø¿ô¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó" + + #: integrate.c:235 + msgid "function with varying-size return value cannot be inline" + msgstr "²ÄÊÑŤÎÌá¤êÃͤòÊÖ¤¹´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤ó" + + #: integrate.c:242 + msgid "function with varying-size parameter cannot be inline" + msgstr "²ÄÊÑŰú¿ô¤ò»ý¤Ä´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤ó" + + #: integrate.c:245 + msgid "function with transparent unit parameter cannot be inline" + msgstr "Æ©²á¶¦ÍÑÂΤΰú¿ô¤ò»ý¤Ä´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤ó" + + #: integrate.c:264 + msgid "function with computed jump cannot inline" + msgstr "»»½Ð¤µ¤ì¤¿¥¸¥ã¥ó¥×¤ò¹Ô¤Ê¤¦´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤ó" + + #: integrate.c:268 + msgid "function with nonlocal goto cannot be inline" + msgstr "Èó¥í¡¼¥«¥ë goto ¤ò»È¤Ã¤Æ¤¤¤ë´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤ó" + + #: integrate.c:282 + msgid "function with target specific attribute(s) cannot be inlined" + msgstr "¥¿¡¼¥²¥Ã¥È¸Çͭ°À­Éդδؿô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤ó" + + #: line-map.c:198 + #, c-format + msgid "In file included from %s:%u" + msgstr "%s:%u ¤«¤é include ¤µ¤ì¤¿¥Õ¥¡¥¤¥ëÃæ" + + #. Translators note: this message is used in conjunction + #. with "In file included from %s:%ld" and some other + #. tricks. We want something like this: + #. + #. | In file included from sys/select.h:123, + #. | from sys/types.h:234, + #. | from userfile.c:31: + #. | bits/select.h:45: + #. + #. with all the "from"s lined up. + #. The trailing comma is at the beginning of this message, + #. and the trailing colon is not translated. + #: line-map.c:216 + #, c-format + msgid "" + ",\n" + " from %s:%u" + msgstr "" + ",\n" + " %s:%u ¤«¤é" + + #. If we didn't find this parameter, issue an error message. + #: params.c:80 + #, c-format + msgid "invalid parameter `%s'" + msgstr "²¾°ú¿ô `%s' ¤Ï̵¸ú¤Ç¤¹" + + #: profile.c:429 + #, c-format + msgid "corrupted profile info: prob for %d-%d thought to be %d" + msgstr "" + + #: profile.c:975 + #, fuzzy, c-format + msgid "file %s not found, execution counts assumed to be zero" + msgstr "¥Õ¥¡¥¤¥ë %s ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¤Î¤Ç¡¢¼Â¹Ô¥«¥¦¥ó¥È¤Ï¥¼¥í¤È¸«¤Ê¤·¤Þ¤¹" + + #: profile.c:1022 + #, fuzzy + msgid ".da file contents exhausted too early" + msgstr ".da ¥Õ¥¡¥¤¥ë¤ÎÆâÍÆ¤ò¤¢¤Þ¤ê¤ËÁ᤯»È¤¤ÀڤäƤ·¤Þ¤¤¤Þ¤·¤¿\n" + + #: profile.c:1025 + #, fuzzy + msgid ".da file contents not exhausted" + msgstr ".da ¥Õ¥¡¥¤¥ë¤ÎÆâÍÆ¤ò»È¤¤ÀڤäƤ¤¤Þ¤»¤ó\n" + + #: protoize.c:593 + #, c-format + msgid "%s: internal abort\n" + msgstr "%s: ÆâÉôÃæÃÇ\n" + + #: protoize.c:684 + #, c-format + msgid "%s: error writing file `%s': %s\n" + msgstr "%s: ¥Õ¥¡¥¤¥ë `%s' ¤Ë½ñ¤­¹þ¤ßÃæ¤Ë¥¨¥é¡¼: %s\n" + + #: protoize.c:729 + #, c-format + msgid "%s: usage '%s [ -VqfnkN ] [ -i ] [ filename ... ]'\n" + msgstr "%s: »ÈÍÑË¡ '%s [ -VqfnkN ] [ -i ] [ ¥Õ¥¡¥¤¥ë̾ ... ]'\n" + + #: protoize.c:732 + #, c-format + msgid "%s: usage '%s [ -VqfnkNlgC ] [ -B ] [ filename ... ]'\n" + msgstr "%s: »ÈÍÑË¡ '%s [ -VqfnkNlgC ] [ -B <¥Ç¥£¥ì¥¯¥È¥ê̾> ] [ ¥Õ¥¡¥¤¥ë̾ ... ]'\n" + + #: protoize.c:839 + #, c-format + msgid "%s: warning: no read access for file `%s'\n" + msgstr "%s: ·Ù¹ð: ¥Õ¥¡¥¤¥ë `%s' ¤ËÂФ·¤ÆÆÉ¤ß½Ð¤·µö²Ä¤¬¤¢¤ê¤Þ¤»¤ó\n" + + #: protoize.c:847 + #, c-format + msgid "%s: warning: no write access for file `%s'\n" + msgstr "%s: ·Ù¹ð: ¥Õ¥¡¥¤¥ë `%s' ¤ËÂФ·¤Æ½ñ¤­¹þ¤ßµö²Ä¤¬¤¢¤ê¤Þ¤»¤ó\n" + + #: protoize.c:855 + #, c-format + msgid "%s: warning: no write access for dir containing `%s'\n" + msgstr "%s: ·Ù¹ð: `%s' ¤ò´Þ¤à¥Ç¥£¥ì¥¯¥È¥ê¤ËÂФ·¤Æ½ñ¤­¹þ¤ßµö²Ä¤¬¤¢¤ê¤Þ¤»¤ó\n" + + #. Catch cases like /.. where we try to backup to a + #. point above the absolute root of the logical file + #. system. + #: protoize.c:1273 + #, c-format + msgid "%s: invalid file name: %s\n" + msgstr "%s: ̵¸ú¤Ê¥Õ¥¡¥¤¥ë̾: %s\n" + + #: protoize.c:1425 + #, c-format + msgid "%s: %s: can't get status: %s\n" + msgstr "%s: %s: ¾õÂÖ¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó: %s\n" + + #: protoize.c:1446 + #, c-format + msgid "\n%s: fatal error: aux info file corrupted at line %d\n" + msgstr "\n%s: Ã×̿Ū¥¨¥é¡¼: Éû info ¥Õ¥¡¥¤¥ë¤¬ %d ¹ÔÌܤDzõ¤ì¤Æ¤¤¤Þ¤¹\n" + + #: protoize.c:1782 + #, c-format + msgid "%s:%d: declaration of function `%s' takes different forms\n" + msgstr "%s:%d: ´Ø¿ô `%s' ¤ÎÀë¸À¤¬Ê̤ηÁ¤ò¼è¤Ã¤Æ¤¤¤Þ¤¹\n" + + #: protoize.c:2040 + #, c-format + msgid "%s: compiling `%s'\n" + msgstr "%s: `%s' ¤ò¥³¥ó¥Ñ¥¤¥ëÃæ\n" + + #: protoize.c:2063 + #, c-format + msgid "%s: wait: %s\n" + msgstr "%s: ÂÔ¤Á: %s\n" + + #: protoize.c:2068 + #, c-format + msgid "%s: subprocess got fatal signal %d\n" + msgstr "%s: ¥µ¥Ö¥×¥í¥»¥¹¤¬Ã×̿Ū¥·¥°¥Ê¥ë %d ¤ò¼õ¤±¼è¤ê¤Þ¤·¤¿\n" + + #: protoize.c:2076 + #, c-format + msgid "%s: %s exited with status %d\n" + msgstr "%s: %s ¤Ï¥¹¥Æ¡¼¥¿¥¹ %d ¤Ç½ªÎ»¤·¤Þ¤·¤¿\n" + + #: protoize.c:2128 + #, c-format + msgid "%s: warning: missing SYSCALLS file `%s'\n" + msgstr "%s: ·Ù¹ð: SYSCALLS ¥Õ¥¡¥¤¥ë `%s' ¤¬¤¢¤ê¤Þ¤»¤ó\n" + + #: protoize.c:2137 protoize.c:2166 + #, c-format + msgid "%s: can't read aux info file `%s': %s\n" + msgstr "%s: Éû info ¥Õ¥¡¥¤¥ë `%s' ¤òÆÉ¤à¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó: %s\n" + + #: protoize.c:2182 protoize.c:2210 + #, c-format + msgid "%s: can't get status of aux info file `%s': %s\n" + msgstr "%s: Éû info ¥Õ¥¡¥¤¥ë `%s' ¤Î¾õÂÖ¤ò¼èÆÀ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó: %s\n" + + #: protoize.c:2238 + #, c-format + msgid "%s: can't open aux info file `%s' for reading: %s\n" + msgstr "%s: Éû info ¥Õ¥¡¥¤¥ë `%s' ¤òÆÉ¤ß¹þ¤ßÍѤ˳«¤¯¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó: %s\n" + + #: protoize.c:2256 + #, c-format + msgid "%s: error reading aux info file `%s': %s\n" + msgstr "%s: Éû info ¥Õ¥¡¥¤¥ë `%s' ¤òÆÉ¤ß¹þ¤ßÃæ¤Ë¥¨¥é¡¼: %s\n" + + #: protoize.c:2269 + #, c-format + msgid "%s: error closing aux info file `%s': %s\n" + msgstr "%s: Éû info ¥Õ¥¡¥¤¥ë `%s' ¤òÊĤ¸¤Æ¤¤¤ëºÇÃæ¤Ë¥¨¥é¡¼: %s\n" + + #: protoize.c:2285 + #, c-format + msgid "%s: can't delete aux info file `%s': %s\n" + msgstr "%s: Éû info ¥Õ¥¡¥¤¥ë `%s' ¤òºï½ü¤Ç¤­¤Þ¤»¤ó: %s\n" + + #: protoize.c:2367 protoize.c:4369 + #, c-format + msgid "%s: can't delete file `%s': %s\n" + msgstr "%s: ¥Õ¥¡¥¤¥ë `%s' ¤òºï½ü¤Ç¤­¤Þ¤»¤ó: %s\n" + + #: protoize.c:2446 + #, c-format + msgid "%s: warning: can't rename file `%s' to `%s': %s\n" + msgstr "%s: ·Ù¹ð: ¥Õ¥¡¥¤¥ë `%s' ¤ò `%s' ̾Á°Êѹ¹¤Ç¤­¤Þ¤»¤ó: %s\n" + + #: protoize.c:2571 + #, c-format + msgid "%s: conflicting extern definitions of '%s'\n" + msgstr "%s: '%s' ¤Î³°ÉôÄêµÁ¤¬Ì·½â¤·¤Æ¤¤¤Þ¤¹\n" + + #: protoize.c:2575 + #, c-format + msgid "%s: declarations of '%s' will not be converted\n" + msgstr "%s: '%s' ¤ÎÀë¸À¤ÏÊÑ´¹¤µ¤ì¤Þ¤»¤ó\n" + + #: protoize.c:2577 + #, c-format + msgid "%s: conflict list for '%s' follows:\n" + msgstr "%s: `%s' ¤ËÂФ¹¤ëÌ·½â°ìÍ÷¤Ï°Ê²¼¤ÎÄ̤ê¤Ç¤¹:\n" + + #: protoize.c:2610 + #, c-format + msgid "%s: warning: using formals list from %s(%d) for function `%s'\n" + msgstr "%s: ·Ù¹ð: %s(%d) ¤«¤é¤Î·Á¼°¥ê¥¹¥È¤ò¡¢´Ø¿ô `%s' ¤Î°Ù¤Ë»È¤¤¤Þ¤¹\n" + + #: protoize.c:2650 + #, c-format + msgid "%s: %d: `%s' used but missing from SYSCALLS\n" + msgstr "%s: %d: `%s' ¤Ï»È¤ï¤ì¤Æ¤¤¤Þ¤¹¤¬ SYSCALLS ¤Ë¤¢¤ê¤Þ¤»¤ó\n" + + #: protoize.c:2656 + #, c-format + msgid "%s: %d: warning: no extern definition for `%s'\n" + msgstr "%s: %d: ·Ù¹ð: `%s' ¤ËÂФ¹¤ë³°ÉôÄêµÁ¤¬¤¢¤ê¤Þ¤»¤ó\n" + + #: protoize.c:2687 + #, c-format + msgid "%s: warning: no static definition for `%s' in file `%s'\n" + msgstr "%s: ·Ù¹ð: `%s' ¤ÎÀÅŪÄêµÁ¤¬¥Õ¥¡¥¤¥ë `%s' ¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤ó\n" + + #: protoize.c:2693 + #, c-format + msgid "%s: multiple static defs of `%s' in file `%s'\n" + msgstr "%s: `%s' ¤ÎÀÅŪÄêµÁ¤¬¥Õ¥¡¥¤¥ë `%s' ¤ÎÃæ¤Ç½ÅÊ£¤·¤Æ¤¤¤Þ¤¹\n" + + #: protoize.c:2866 protoize.c:2869 + #, c-format + msgid "%s: %d: warning: source too confusing\n" + msgstr "%s: %d: ·Ù¹ð: ¥½¡¼¥¹¤¬º®Í𤷤¹¤®¤Æ¤¤¤Þ¤¹\n" + + #: protoize.c:3075 + #, c-format + msgid "%s: %d: warning: varargs function declaration not converted\n" + msgstr "%s: %d: ·Ù¹ð: varargs ´Ø¿ôÀë¸À¤¬ÊÑ´¹¤µ¤ì¤Æ¤¤¤Þ¤»¤ó\n" + + #: protoize.c:3090 + #, c-format + msgid "%s: declaration of function `%s' not converted\n" + msgstr "%s: ´Ø¿ô `%s' ¤ÎÀë¸À¤¬ÊÑ´¹¤µ¤ì¤Æ¤¤¤Þ¤»¤ó\n" + + #: protoize.c:3213 + #, c-format + msgid "%s: warning: too many parameter lists in declaration of `%s'\n" + msgstr "%s: ·Ù¹ð: `%s' ¤ÎÀë¸À¤Ç¤Î²¾°ú¿ô¥ê¥¹¥È¤¬Â¿¤¹¤®¤Þ¤¹\n" + + #: protoize.c:3234 + #, c-format + msgid "\n%s: warning: too few parameter lists in declaration of `%s'\n" + msgstr "\n%s: ·Ù¹ð: `%s' ¤ÎÀë¸À¤Ç¤Î²¾°ú¿ô¥ê¥¹¥È¤¬¾¯¤Ê¤¹¤®¤Þ¤¹\n" + + #: protoize.c:3332 + #, c-format + msgid "%s: %d: warning: found `%s' but expected `%s'\n" + msgstr "%s: %d: ·Ù¹ð: `%s' ¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿¤¬ `%s' ¤¬´üÂÔ¤µ¤ì¤Æ¤¤¤Þ¤¹\n" + + #: protoize.c:3510 + #, c-format + msgid "%s: local declaration for function `%s' not inserted\n" + msgstr "%s: ´Ø¿ô `%s' ¤Î¥í¡¼¥«¥ëÀë¸À¤¬ÁÞÆþ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó\n" + + #: protoize.c:3537 + #, c-format + msgid "\n%s: %d: warning: can't add declaration of `%s' into macro call\n" + msgstr "\n%s: %d: ·Ù¹ð: `%s' ¤ÎÀë¸À¤ò¥Þ¥¯¥í¸Æ¤Ó½Ð¤·¤ËÄɲäǤ­¤Þ¤»¤ó\n" + + #: protoize.c:3611 + #, c-format + msgid "%s: global declarations for file `%s' not inserted\n" + msgstr "%s: ¥Õ¥¡¥¤¥ë `%s' ¤ÎÂç°èÀë¸À¤¬ÁÞÆþ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó\n" + + #: protoize.c:3702 protoize.c:3732 + #, c-format + msgid "%s: definition of function `%s' not converted\n" + msgstr "%s: ´Ø¿ô `%s' ¤ÎÄêµÁ¤¬ÊÑ´¹¤µ¤ì¤Æ¤¤¤Þ¤»¤ó\n" + + #: protoize.c:3721 + #, c-format + msgid "%s: %d: warning: definition of %s not converted\n" + msgstr "%s: %d: ·Ù¹ð: %s ¤ÎÄêµÁ¤¬ÊÑ´¹¤µ¤ì¤Æ¤¤¤Þ¤»¤ó\n" + + #: protoize.c:4051 + #, c-format + msgid "%s: found definition of `%s' at %s(%d)\n" + msgstr "%s: `%s' ¤ÎÄêµÁ¤¬ %s(%d) ¤Ë¸«¤Ä¤«¤ê¤Þ¤·¤¿\n" + + #. If we make it here, then we did not know about this + #. function definition. + #: protoize.c:4067 + #, c-format + msgid "%s: %d: warning: `%s' excluded by preprocessing\n" + msgstr "%s: %d: ·Ù¹ð: `%s' ¤Ï¥×¥ê¥×¥í¥»¥¹¤«¤é½ü³°¤µ¤ì¤Æ¤¤¤Þ¤¹\n" + + #: protoize.c:4070 + #, c-format + msgid "%s: function definition not converted\n" + msgstr "%s: ´Ø¿ô¤ÎÄêµÁ¤¬ÊÑ´¹¤µ¤ì¤Æ¤¤¤Þ¤»¤ó\n" + + #: protoize.c:4129 + #, c-format + msgid "%s: `%s' not converted\n" + msgstr "%s: `%s' ¤ÏÊÑ´¹¤µ¤ì¤Æ¤¤¤Þ¤»¤ó\n" + + #: protoize.c:4137 + #, c-format + msgid "%s: would convert file `%s'\n" + msgstr "%s: `%s' ¤òÊÑ´¹¤·¤Þ¤¹\n" + + #: protoize.c:4140 + #, c-format + msgid "%s: converting file `%s'\n" + msgstr "%s: ¥Õ¥¡¥¤¥ë `%s' ¤òÊÑ´¹Ãæ\n" + + #: protoize.c:4150 + #, c-format + msgid "%s: can't get status for file `%s': %s\n" + msgstr "%s: ¥Õ¥¡¥¤¥ë `%s' ¤Î¾õÂÖ¤ò¼èÆÀ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó: %s\n" + + #: protoize.c:4192 + #, c-format + msgid "%s: can't open file `%s' for reading: %s\n" + msgstr "%s: ÆÉ¤ß¹þ¤ßÍѤ˥ե¡¥¤¥ë `%s' ¤ò³«¤¯¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó: %s\n" + + #: protoize.c:4207 + #, c-format + msgid "\n%s: error reading input file `%s': %s\n" + msgstr "\n%s: ÆþÎÏ¥Õ¥¡¥¤¥ë `%s' ¤òÆÉ¤ß¹þ¤ßÃæ¤Ë¥¨¥é¡¼: %s\n" + + #: protoize.c:4241 + #, c-format + msgid "%s: can't create/open clean file `%s': %s\n" + msgstr "%s: ¤­¤ì¤¤¤Ê¥Õ¥¡¥¤¥ë `%s' ¤òºîÀ®/¥ª¡¼¥×¥ó¤Ç¤­¤Þ¤»¤ó: %s\n" + + #: protoize.c:4346 + #, c-format + msgid "%s: warning: file `%s' already saved in `%s'\n" + msgstr "%s: ·Ù¹ð: ¥Õ¥¡¥¤¥ë `%s' ¤Ï´û¤Ë `%s' ¤ËÊݸ¤µ¤ì¤Æ¤¤¤Þ¤¹\n" + + #: protoize.c:4354 + #, c-format + msgid "%s: can't link file `%s' to `%s': %s\n" + msgstr "%s: ¥Õ¥¡¥¤¥ë `%s' ¤ò `%s' ¤Ë¥ê¥ó¥¯¤Ç¤­¤Þ¤»¤ó: %s\n" + + #: protoize.c:4384 + #, c-format + msgid "%s: can't create/open output file `%s': %s\n" + msgstr "%s: ½ÐÎÏ¥Õ¥¡¥¤¥ë `%s' ¤òºîÀ®¤·¤¿¤ê³«¤¤¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó: %s\n" + + #: protoize.c:4417 + #, c-format + msgid "%s: can't change mode of file `%s': %s\n" + msgstr "%s: ¥Õ¥¡¥¤¥ë `%s' ¤Î¥â¡¼¥É¤òÊѹ¹¤Ç¤­¤Þ¤»¤ó: %s\n" + + #: protoize.c:4592 + #, c-format + msgid "%s: cannot get working directory: %s\n" + msgstr "%s: ºî¶È¥Ç¥£¥ì¥¯¥È¥ê¤¬Ê¬¤«¤ê¤Þ¤»¤ó: %s\n" + + #: protoize.c:4690 + #, c-format + msgid "%s: input file names must have .c suffixes: %s\n" + msgstr "%s: ÆþÎÏ¥Õ¥¡¥¤¥ë̾¤Ë¤Ï³ÈÄ¥»Ò .c ¤¬¤Ê¤±¤ì¤Ð¤¤¤±¤Þ¤»¤ó: %s\n" + + #: real.c:816 real.c:993 + msgid "conversion from NaN to int" + msgstr "NaN ¤«¤éÀ°¿ô¤Ø¤ÎÊÑ´¹¤Ç¤¹" + + #: real.c:839 + msgid "conversion from NaN to unsigned int" + msgstr "NaN ¤«¤éÉä¹ç̵¤·À°¿ô¤Ø¤ÎÊÑ´¹¤Ç¤¹" + + #: real.c:2714 + msgid "floating point overflow" + msgstr "ÉâÆ°¾®¿ôÅÀ¤¬¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤Þ¤·¤¿" + + #: real.c:4354 real.c:6626 real.c:6707 + msgid "overflow on truncation to integer" + msgstr "À°¿ô¤Ø¤ÎÀÚ¤êµÍ¤á¤Ç¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤¬µ¯¤³¤ê¤Þ¤·¤¿" + + #: real.c:4426 + msgid "overflow on truncation to unsigned integer" + msgstr "Éä¹ç̵¤·À°¿ô¤Ø¤ÎÀÚ¤êµÍ¤á¤Ç¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤¬µ¯¤³¤ê¤Þ¤·¤¿" + + #: real.c:5767 + #, c-format + msgid "%s: argument domain error" + msgstr "%s: °ú¿ôÎΰ襨¥é¡¼¤Ç¤¹" + + #: real.c:5768 + #, c-format + msgid "%s: function singularity" + msgstr "%s: ´Ø¿ô¤Îñ°ìÀ­" + + #: real.c:5769 + #, c-format + msgid "%s: overflow range error" + msgstr "%s: ¥ª¡¼¥Ð¡¼¥Õ¥í¡¼Èϰϥ¨¥é¡¼" + + #: real.c:5770 + #, c-format + msgid "%s: underflow range error" + msgstr "%s: ¥¢¥ó¥À¡¼¥Õ¥í¡¼Èϰϥ¨¥é¡¼" + + #: real.c:5771 + #, c-format + msgid "%s: total loss of precision" + msgstr "%s: Á´ÂÎŪ¤ÊÀºÅÙ¤ÎÄã²¼" + + #: real.c:5772 + #, c-format + msgid "%s: partial loss of precision" + msgstr "%s: ÉôʬŪ¤ÊÀºÅÙ¤ÎÄã²¼" + + #: real.c:5773 + #, c-format + msgid "%s: NaN - producing operation" + msgstr "%s: NaN - Áàºî¤òÀ¸¤¸¤Þ¤¹" + + #: reg-stack.c:677 + #, fuzzy, c-format + msgid "output constraint %d must specify a single register" + msgstr "½ÐÎÏÀ©Ìó %d ¤Ï°ì¤Ä¤Î¥ì¥¸¥¹¥¿¤ò»ØÄꤷ¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: reg-stack.c:687 + #, fuzzy, c-format + msgid "output constraint %d cannot be specified together with \"%s\" clobber" + msgstr "½ÐÎÏÀ©Ìó %d ¤Ï°ì¤Ä¤Î¥ì¥¸¥¹¥¿¤ò»ØÄꤷ¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: reg-stack.c:710 + #, fuzzy + msgid "output regs must be grouped at top of stack" + msgstr "½ÐÎϥ쥸¥¹¥¿¤Ï¥¹¥¿¥Ã¥¯¤Î¥È¥Ã¥×¤Ë¥°¥ë¡¼¥×¤µ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: reg-stack.c:747 + #, fuzzy + msgid "implicitly popped regs must be grouped at top of stack" + msgstr "°ÅÌÛ¤Ë pop ¤µ¤ì¤ë¥ì¥¸¥¹¥¿¤Ï¥¹¥¿¥Ã¥¯¤Î¥È¥Ã¥×¤Ë¥°¥ë¡¼¥×¤µ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: reg-stack.c:766 + #, fuzzy, c-format + msgid "output operand %d must use `&' constraint" + msgstr "½ÐÎÏ¥ª¥Ú¥é¥ó¥É %d ¤Ï `&' À©Ìó¤ò»È¤ï¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: regclass.c:778 + #, c-format + msgid "can't use '%s' as a %s register" + msgstr "'%s' ¤ò %s ¤Î¥ì¥¸¥¹¥¿¤È¤·¤Æ»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó" + + #: regclass.c:793 config/ia64/ia64.c:3852 config/ia64/ia64.c:3859 + #, c-format + msgid "unknown register name: %s" + msgstr "ÉÔÌÀ¤Ê¥ì¥¸¥¹¥¿Ì¾¤Ç¤¹: %s" + + #: regclass.c:804 + msgid "global register variable follows a function definition" + msgstr "Âç°è register ÊÑ¿ô¤¬´Ø¿ôÄêµÁ¤Î¸å¤í¤Ë¤¢¤ê¤Þ¤¹" + + #: regclass.c:808 + msgid "register used for two global register variables" + msgstr "¥ì¥¸¥¹¥¿¤¬Æó¤Ä¤Î¥°¥í¡¼¥Ð¥ë¥ì¥¸¥¹¥¿ÊÑ¿ô¤È¤·¤Æ»È¤ï¤ì¤Þ¤·¤¿" + + #: regclass.c:813 + msgid "call-clobbered register used for global register variable" + msgstr "¸Æ¤Ó½Ð¤·¤ÇÇ˲õ¤µ¤ì¤ë¥ì¥¸¥¹¥¿¤¬¥°¥í¡¼¥Ð¥ë¥ì¥¸¥¹¥¿ÊÑ¿ô¤È¤·¤Æ»È¤ï¤ì¤Þ¤·¤¿" + + #: regrename.c:1735 + #, c-format + msgid "validate_value_data: [%u] Bad next_regno for empty chain (%u)" + msgstr "" + + #: regrename.c:1747 + #, c-format + msgid "validate_value_data: Loop in regno chain (%u)" + msgstr "" + + #: regrename.c:1750 + #, c-format + msgid "validate_value_data: [%u] Bad oldest_regno (%u)" + msgstr "" + + #: regrename.c:1762 + #, c-format + msgid "validate_value_data: [%u] Non-empty reg in chain (%s %u %i)" + msgstr "" + + #: reload.c:1207 + msgid "cannot reload integer constant operand in `asm'" + msgstr "À°¿ôÄê¿ô¥ª¥Ú¥é¥ó¥É¤ò `asm' Æâ¤ÇºÆ¥í¡¼¥É¤Ç¤­¤Þ¤»¤ó" + + #: reload.c:1229 + msgid "impossible register constraint in `asm'" + msgstr "`asm' Æâ¤Ç¤Ï¥ì¥¸¥¹¥¿À©Ìó¤ò¹Ô¤Ê¤¨¤Þ¤»¤ó" + + #: reload.c:3387 + msgid "`&' constraint used with no register class" + msgstr "`&' À©Ì󤬥쥸¥¹¥¿¥¯¥é¥¹Ìµ¤·¤Ç»È¤ï¤ì¤Þ¤·¤¿" + + #: reload.c:3555 + #, fuzzy + msgid "unable to generate reloads for:" + msgstr "¥³¡¼¥É¤¬À¸À®¤µ¤ì¤ë CPU ¤òÁªÂò¤¹¤ë" + + #: reload.c:3556 reload.c:3770 + msgid "inconsistent operand constraints in an `asm'" + msgstr "`asm' Æâ¤Ç¤Î¥ª¥Ú¥é¥ó¥ÉÀ©Ìó¤¬Ì·½â¤·¤Æ¤¤¤Þ¤¹" + + #: reload1.c:1242 + msgid "frame size too large for reliable stack checking" + msgstr "¥Õ¥ì¡¼¥à¥µ¥¤¥º¤¬Â礭¤¹¤®¤Æ¡¢¥¹¥¿¥Ã¥¯¸¡ºº¤¬¿®Íê¤Ç¤­¤Ê¤¯¤Ê¤ê¤Þ¤¹" + + #: reload1.c:1245 + msgid "try reducing the number of local variables" + msgstr "¥í¡¼¥«¥ëÊÑ¿ô¤Î¿ô¤òºï¸º¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤" + + #: reload1.c:1892 + #, fuzzy, c-format + msgid "can't find a register in class `%s' while reloading `asm'" + msgstr "¥¯¥é¥¹ `%s' Æâ¤Î¥ì¥¸¥¹¥¿¤ò `asm' ºÆ¥í¡¼¥ÉÃæ¤Ë¸«¤Ä¤±¤é¤ì¤Þ¤»¤ó" + + #: reload1.c:1896 + #, fuzzy, c-format + msgid "unable to find a register to spill in class `%s'" + msgstr "¥¯¥é¥¹ `%s' Æâ¤Ç¤Õ¤ë¤¤Íî¤È¤¹¥ì¥¸¥¹¥¿¤ò¸«¤Ä¤±¤é¤ì¤Þ¤»¤ó" + + #: reload1.c:1898 + msgid "this is the insn:" + msgstr "" + + #: reload1.c:3924 + msgid "`asm' operand requires impossible reload" + msgstr "`asm' ¥ª¥Ú¥é¥ó¥É¤ÏºÆ¥í¡¼¥É¤Ç¤­¤Ê¤¤»ö¤¬Í׵ᤵ¤ì¤Þ¤¹" + + #. It's the compiler's fault. + #: reload1.c:5040 + #, fuzzy + msgid "could not find a spill register" + msgstr "spec ¥Õ¥¡¥¤¥ë %s ¤ò¸«¤Ä¤±¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿\n" + + #: reload1.c:5045 + msgid "`asm' operand constraint incompatible with operand size" + msgstr "`asm' ¥ª¥Ú¥é¥ó¥ÉÀ©Ì󤬥ª¥Ú¥é¥ó¥É¥µ¥¤¥º¤ÈÀ°¹ç¤·¤Þ¤»¤ó" + + #. It's the compiler's fault. + #: reload1.c:6636 + #, fuzzy + msgid "VOIDmode on an output" + msgstr "½ÐÎÏÃæ¤Ë I/O ¥¨¥é¡¼¤¬È¯À¸" + + #: reload1.c:6637 + msgid "output operand is constant in `asm'" + msgstr "½ÐÎÏ¥ª¥Ú¥é¥ó¥É¤¬ `asm' Æâ¤ÇÄê¿ô¤Ç¤¹" + + #: rtl-error.c:139 + #, fuzzy + msgid "unrecognizable insn:" + msgstr "ǧ¼±ÉÔǽ¤ÊÌ¿Îá:" + + #: rtl-error.c:141 + #, fuzzy + msgid "insn does not satisfy its constraints:" + msgstr "Ì¿Î᤬¤½¤ÎÀ©Ìó¤òËþ¤¿¤·¤Þ¤»¤ó" + + #: rtl.c:707 + #, c-format + msgid "RTL check: access of elt %d of `%s' with last elt %d in %s, at %s:%d" + msgstr "RTL ¸¡ºº: elt %d(%s) ¤¬ºÇ¸å¤Î elt %d(%s Ãæ) ¤È°ì½ï¤Ë¥¢¥¯¥»¥¹¤·¤Þ¤¹ (%s:%d)" + + #: rtl.c:722 + #, c-format + msgid "RTL check: expected elt %d type '%c', have '%c' (rtx %s) in %s, at %s:%d" + msgstr "RTL ¸¡ºº: elt %d ·¿¤Ï '%c' ¤Î¤Ï¤º¤Ê¤Î¤Ë '%c' (rtx %s, %s Ãæ)¤Ç¤¹ (%s:%d)" + + #: rtl.c:738 + #, c-format + msgid "RTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s) in %s, at %s:%d" + msgstr "RTL ¸¡ºº: elt %d ·¿¤Ï '%c' ¤« '%c' ¤Î¤Ï¤º¤Ê¤Î¤Ë '%c' (rtx %s, %s Ãæ) ¤Ç¤¹ (%s:%d)" + + #: rtl.c:751 + #, c-format + msgid "RTL check: expected code `%s', have `%s' in %s, at %s:%d" + msgstr "RTL ¸¡ºº: ¥³¡¼¥É `%s' ¤Î¤Ï¤º¤Ê¤Î¤Ë `%s' (%s Ãæ)¤Ç¤¹ (%s:%d)" + + #: rtl.c:765 + #, c-format + msgid "RTL check: expected code `%s' or `%s', have `%s' in %s, at %s:%d" + msgstr "RTL ¸¡ºº: ¥³¡¼¥É `%s' ¤« `%s' ¤Î¤Ï¤º¤Ê¤Î¤Ë `%s' (%s Ãæ)¤Ç¤¹ (%s:%d)" + + #: rtl.c:780 + #, c-format + msgid "RTL check: access of elt %d of vector with last elt %d in %s, at %s:%d" + msgstr "RTL check: ¥Ù¥¯¥È¥ë¤Î elt %d ¤òºÇ¸å¤Î elt %d (%s Ãæ)¤È°ì½ï¤Ë¥¢¥¯¥»¥¹¤·¤Þ¤¹ (%s:%d)" + + #: stmt.c:924 + #, c-format + msgid "jump to `%s' invalidly jumps into binding contour" + msgstr "`%s' ¤Ø¤Î¥¸¥ã¥ó¥×¤ÏÅ»¤á¤é¤ì¤¿¥Ö¥í¥Ã¥¯Æâ¤Ø¡¢Ìµ¸ú¤Ë¥¸¥ã¥ó¥×¤·¤Æ¤¤¤Þ¤¹" + + #: stmt.c:1160 stmt.c:3816 + #, c-format + msgid "label `%s' used before containing binding contour" + msgstr "¥é¥Ù¥ë `%s' ¤¬Å»¤á¤é¤ì¤¿¥Ö¥í¥Ã¥¯¤ò¹½À®¤¹¤ëÁ°¤Ë»È¤ï¤ì¤Þ¤·¤¿" + + #: stmt.c:1345 + msgid "output operand constraint lacks `='" + msgstr "½ÐÎÏ¥ª¥Ú¥é¥ó¥ÉÀ©Ìó¤Ë `=' ¤¬·ç¤±¤Æ¤¤¤Þ¤¹" + + #: stmt.c:1360 + #, c-format + msgid "output constraint `%c' for operand %d is not at the beginning" + msgstr "½ÐÎÏÀ©Ìó `%c' (operand %d ÍÑ) ¤¬³«»ÏÉôʬ¤Ë¤¢¤ê¤Þ¤»¤ó" + + #: stmt.c:1382 + #, fuzzy + msgid "operand constraint contains incorrectly positioned '+' or '='" + msgstr "¥ª¥Ú¥é¥ó¥ÉÀ©ÌóÃæ¡¢ÉÔÀµ¤Ê°ÌÃÖ¤Ë '+' ¤ä '=' ¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹" + + #: stmt.c:1388 stmt.c:1672 + #, c-format + msgid "`%%' constraint used with last operand" + msgstr "`%%' À©Ì󤬺Ǹå¤Î¥ª¥Ú¥é¥ó¥É¤È¤È¤â¤Ë»È¤ï¤ì¤Þ¤·¤¿" + + #: stmt.c:1407 + msgid "matching constraint not valid in output operand" + msgstr "½ÐÎÏ¥ª¥Ú¥é¥ó¥ÉÆâ¤ÎÀ©Ìó¤¬Àµ¤·¤¯¤¢¤ê¤Þ¤»¤ó" + + #: stmt.c:1522 + #, c-format + msgid "unknown register name `%s' in `asm'" + msgstr "`asm' Ãæ¤ËÉÔÌÀ¤Ê¥ì¥¸¥¹¥¿Ì¾ `%s' ¤¬¤¢¤ê¤Þ¤¹" + + #: stmt.c:1580 + #, c-format + msgid "output number %d not directly addressable" + msgstr "½ÐÎÏÈÖ¹æ %d ¤ÏľÀÜ¥¢¥É¥ì¥¹»ØÄê¤Ç¤­¤Þ¤»¤ó" + + #: stmt.c:1608 + #, c-format + msgid "more than %d operands in `asm'" + msgstr "`asm' ¤ÎÃæ¤Ë %d ¤ò±Û¤¨¤ë¥ª¥Ú¥é¥ó¥É¤¬¤¢¤ê¤Þ¤¹" + + #: stmt.c:1646 + #, c-format + msgid "hard register `%s' listed as input operand to `asm'" + msgstr "¥Ï¡¼¥É¥ì¥¸¥¹¥¿ `%s' ¤¬ `asm' ¤ËÂФ·¡¢ÆþÎÏ¥ª¥Ú¥é¥ó¥É¤È¤·¤ÆÅÐÏ¿¤µ¤ì¤Þ¤·¤¿" + + #: stmt.c:1662 + #, c-format + msgid "input operand constraint contains `%c'" + msgstr "ÆþÎÏ¥ª¥Ú¥é¥ó¥ÉÀ©Ìó¤¬ `%c' ¤ò´Þ¤ó¤Ç¤¤¤Þ¤¹" + + #: stmt.c:1703 + msgid "matching constraint references invalid operand number" + msgstr "À©Ìó¤ËŬ¹ç¤µ¤»¤ë»þ¤Ë¡¢Ìµ¸ú¤Ê¥ª¥Ú¥é¥ó¥ÉÈÖ¹æ¤ò»²¾È¤·¤Þ¤·¤¿" + + #: stmt.c:1734 + #, c-format + msgid "invalid punctuation `%c' in constraint" + msgstr "̵¸ú¤Ê¶çÆÉÅÀ `%c' ¤¬À©ÌóÆâ¤Ë¤¢¤ê¤Þ¤¹" + + #. ??? Leave this only until we have experience with what + #. happens in combine and elsewhere when constraints are + #. not satisfied. + #: stmt.c:1768 stmt.c:1798 + #, c-format + msgid "asm operand %d probably doesn't match constraints" + msgstr "asm ¥ª¥Ú¥é¥ó¥É %d ¤Ï¶²¤é¤¯À©Ìó¤ËŬ¹ç¤·¤Þ¤»¤ó" + + #: stmt.c:1944 + msgid "too many alternatives in `asm'" + msgstr "`asm' Ãæ¤ÎÂåÂØ¥­¡¼¥ï¡¼¥É¤¬Â¿¤¹¤®¤Þ¤¹" + + #: stmt.c:1956 + msgid "operand constraints for `asm' differ in number of alternatives" + msgstr "`asm' ¤Î¥ª¥Ú¥é¥ó¥ÉÀ©Ìó¤¬ÂåÂØÈÖ¹æ¤È¤Ï°Û¤Ê¤ê¤Þ¤¹" + + #: stmt.c:2009 + #, fuzzy, c-format + msgid "duplicate asm operand name '%s'" + msgstr "½ÅÊ£¤·¤¿¥á¥ó¥Ð `%s'" + + #: stmt.c:2088 + msgid "missing close brace for named operand" + msgstr "" + + #: stmt.c:2108 + #, fuzzy, c-format + msgid "undefined named operand '%s'" + msgstr "ÅÐÏ¿¤µ¤ì¤Æ¤¤¤Ê¤¤±é»»»Ò %s ¤Ç¤¹" + + #: stmt.c:3753 + #, c-format + msgid "unused variable `%s'" + msgstr "ÊÑ¿ô `%s' ¤Ï»È¤ï¤ì¤Þ¤»¤ó¤Ç¤·¤¿" + + #: stmt.c:5205 + #, c-format + msgid "enumeration value `%s' not handled in switch" + msgstr "ÎóµóÃÍ `%s' ¤Ï switch Æâ¤Ç°·¤ï¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: stmt.c:5231 stmt.c:5251 + #, c-format + msgid "case value `%ld' not in enumerated type" + msgstr "case ÃÍ `%ld' ¤ÏÎóµó·¿¤Ë¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: stmt.c:5234 stmt.c:5254 + #, c-format + msgid "case value `%ld' not in enumerated type `%s'" + msgstr "case ÃÍ `%ld' ¤ÏÎóµó·¿ `%s' ¤Ë¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: stor-layout.c:172 + msgid "type size can't be explicitly evaluated" + msgstr "·¿¤ÎÂ礭¤µ¤ÏÌÀ¼¨Åª¤Ëɾ²Á¤µ¤ì¤ë¤â¤Î¤Ç¤Ï¤¢¤ê¤¨¤Þ¤»¤ó" + + #: stor-layout.c:174 + msgid "variable-size type declared outside of any function" + msgstr "ÊÑ¿ô¥µ¥¤¥º·¿¤¬´Ø¿ô¤Î³°Â¦¤ÇÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: stor-layout.c:447 + #, c-format + msgid "size of `%s' is %d bytes" + msgstr "`%s' ¤Î¥µ¥¤¥º¤¬ %d ¥Ð¥¤¥È¤Ç¤¹" + + #: stor-layout.c:449 + #, c-format + msgid "size of `%s' is larger than %d bytes" + msgstr "`%s' ¤Î¥µ¥¤¥º¤¬ %d ¥Ð¥¤¥È¤è¤êÂ礭¤¯¤Ê¤Ã¤Æ¤¤¤Þ¤¹" + + #: stor-layout.c:828 stor-layout.c:1081 + #, c-format + msgid "packed attribute causes inefficient alignment for `%s'" + msgstr "packed °À­¤Ï `%s' ¤ËÂФ·¤ÆÉÔ¸úΨ¤Ê¥¢¥é¥¤¥ó¥á¥ó¥È¤ò°ú¤­µ¯¤³¤·¤Þ¤¹" + + #: stor-layout.c:830 stor-layout.c:1083 + #, c-format + msgid "packed attribute is unnecessary for `%s'" + msgstr "packed °À­¤Ï `%s' ¤Ë¤ÏɬÍפ¢¤ê¤Þ¤»¤ó" + + #: stor-layout.c:845 + #, c-format + msgid "padding struct to align `%s'" + msgstr "`%s' ¤ò¥¢¥é¥¤¥ó¤¹¤ë¤¿¤á¤Ë¹½Â¤ÂΤò¥Ñ¥Ç¥£¥ó¥°¤·¤Þ¤¹" + + #: stor-layout.c:1045 + msgid "padding struct size to alignment boundary" + msgstr "¥¢¥é¥¤¥ó¥á¥ó¥È¶­³¦¤Î¥µ¥¤¥º¤Ë¹½Â¤ÂΤò¥Ñ¥Ç¥£¥ó¥°¤·¤Þ¤¹" + + #: stor-layout.c:1088 + msgid "packed attribute causes inefficient alignment" + msgstr "packed °À­¤ÏÉÔ¸úΨ¤Ê¥¢¥é¥¤¥ó¥á¥ó¥È¤ò°ú¤­µ¯¤³¤·¤Þ¤¹" + + #: stor-layout.c:1090 + msgid "packed attribute is unnecessary" + msgstr "packed °À­¤ÏɬÍפ¢¤ê¤Þ¤»¤ó" + + #: timevar.c:448 + msgid "\nExecution times (seconds)\n" + msgstr "\n¼Â¹Ô²ó¿ô (ÉÃ)\n" + + #. Print total time. + #: timevar.c:498 + msgid " TOTAL :" + msgstr " ¹ç·× :" + + #: timevar.c:534 + #, c-format + msgid "time in %s: %ld.%06ld (%ld%%)\n" + msgstr "%s ¤Ç¤Î»þ´Ö: %ld.%06ld (%ld%%)\n" + + #: tlink.c:428 + #, c-format + msgid "collect: reading %s\n" + msgstr "collect: %s ¤òÆÉ¤ß¹þ¤ß¤Þ¤¹\n" + + #: tlink.c:532 + #, c-format + msgid "collect: recompiling %s\n" + msgstr "collect: %s ¤òºÆ¥³¥ó¥Ñ¥¤¥ë¤·¤Þ¤¹\n" + + #: tlink.c:698 + #, c-format + msgid "collect: tweaking %s in %s\n" + msgstr "collect: %s ¤ò°ú¤ÃÄ¥¤ê¤Þ¤¹(%s Æâ)\n" + + #: tlink.c:745 + msgid "collect: relinking\n" + msgstr "collect: ºÆ¥ê¥ó¥¯¤·¤Þ¤¹\n" + + #: tlink.c:754 + #, c-format + msgid "ld returned %d exit status" + msgstr "ld ¤Ï¥¹¥Æ¡¼¥¿¥¹ %d ¤Ç½ªÎ»¤·¤Þ¤·¤¿" + + #: toplev.c:917 + msgid "Generate debugging info in default format" + msgstr "¥Ç¥Õ¥©¥ë¥È·Á¼°¤Î¥Ç¥Ð¥Ã¥°¾ðÊó¤òÀ¸À®¤¹¤ë" + + #: toplev.c:918 + msgid "Generate debugging info in default extended format" + msgstr "¥Ç¥Õ¥©¥ë¥È³ÈÄ¥·Á¼°¤Î¥Ç¥Ð¥Ã¥°¾ðÊó¤òÀ¸À®¤¹¤ë" + + #: toplev.c:920 + msgid "Generate STABS format debug info" + msgstr "STABS ·Á¼°¤Î¥Ç¥Ð¥Ã¥°¾ðÊó¤òÀ¸À®¤¹¤ë" + + #: toplev.c:921 + msgid "Generate extended STABS format debug info" + msgstr "³ÈÄ¥ STABS ·Á¼°¤Î¥Ç¥Ð¥Ã¥°¾ðÊó¤òÀ¸À®¤¹¤ë" + + #: toplev.c:924 + msgid "Generate DWARF-1 format debug info" + msgstr "DWARF-1 ·Á¼°¤Î¥Ç¥Ð¥Ã¥°¾ðÊó¤òÀ¸À®¤¹¤ë" + + #: toplev.c:926 + msgid "Generate extended DWARF-1 format debug info" + msgstr "³ÈÄ¥ DWARF-1 ·Á¼°¤Î¥Ç¥Ð¥Ã¥°¾ðÊó¤òÀ¸À®¤¹¤ë" + + #: toplev.c:929 + msgid "Generate DWARF-2 debug info" + msgstr "DWARF-2 ·Á¼°¤Î¥Ç¥Ð¥Ã¥°¾ðÊó¤òÀ¸À®¤¹¤ë" + + #: toplev.c:932 + msgid "Generate XCOFF format debug info" + msgstr "XCOFF ·Á¼°¤Î¥Ç¥Ð¥Ã¥°¾ðÊó¤òÀ¸À®¤¹¤ë" + + #: toplev.c:933 + msgid "Generate extended XCOFF format debug info" + msgstr "³ÈÄ¥ XCOFF ·Á¼°¤Î¥Ç¥Ð¥Ã¥°¾ðÊó¤òÀ¸À®¤¹¤ë" + + #: toplev.c:936 + msgid "Generate COFF format debug info" + msgstr "COFF ·Á¼°¤Î¥Ç¥Ð¥Ã¥°¾ðÊó¤òÀ¸À®¤¹¤ë" + + #: toplev.c:980 + #, fuzzy + msgid "Perform DWARF2 duplicate elimination" + msgstr "ËöÈø¸Æ¤Ó½Ð¤·ºÇŬ²½¤ò¹Ô¤¦" + + #: toplev.c:982 + msgid "Do not store floats in registers" + msgstr "¥ì¥¸¥¹¥¿¤ËÉâÆ°¾®¿ô¤ò³ÊǼ¤·¤Ê¤¤" + + #: toplev.c:984 + msgid "Consider all mem refs through pointers as volatile" + msgstr "¥Ý¥¤¥ó¥¿·Ðͳ¤Î¥á¥â¥ê»²¾È¤òÁ´¤Æ volatile ¤È¤ß¤Ê¤¹" + + #: toplev.c:986 + msgid "Consider all mem refs to global data to be volatile" + msgstr "Âç°è¥Ç¡¼¥¿¤Ø¤Î¥á¥â¥ê»²¾È¤òÁ´¤Æ volatile ¤È¤ß¤Ê¤¹" + + #: toplev.c:988 + msgid "Consider all mem refs to static data to be volatile" + msgstr "ÀÅŪ¥Ç¡¼¥¿¤Ø¤Î¥á¥â¥ê»²¾È¤òÁ´¤Æ volatile ¤È¤ß¤Ê¤¹" + + #: toplev.c:990 + msgid "Defer popping functions args from stack until later" + msgstr "´Ø¿ô°ú¿ô¤ò¥¹¥¿¥Ã¥¯¤«¤é pop ¤¹¤ë¤Î¤ò¸Æ¤Ó½Ð¤·¸å¤Þ¤ÇÃ٤餻¤ë" + + #: toplev.c:992 + msgid "When possible do not generate stack frames" + msgstr "²Äǽ¤Ê¾ì¹ç¡¢¥¹¥¿¥Ã¥¯¥Õ¥ì¡¼¥à¤òÀ¸À®¤·¤Ê¤¤" + + #: toplev.c:994 + msgid "Optimize sibling and tail recursive calls" + msgstr "sibling ¸Æ¤Ó½Ð¤·¤äËöÈøºÆµ¢¸Æ¤Ó½Ð¤·¤òºÇŬ²½¤¹¤ë" + + #: toplev.c:996 + msgid "When running CSE, follow jumps to their targets" + msgstr "CSE ¤Çưºî¤¹¤ë¤È¤­¡¢¤½¤ì¤é¤Î¥¿¡¼¥²¥Ã¥È¤Ø¤Î¥¸¥ã¥ó¥×¤ËÄɿ魯¤ë" + + #: toplev.c:998 + msgid "When running CSE, follow conditional jumps" + msgstr "CSE ¤Çưºî¤¹¤ë¤È¤­¡¢¾ò·ï¥¸¥ã¥ó¥×¤ËÄɿ魯¤ë" + + #: toplev.c:1000 + #, fuzzy + msgid "Perform a number of minor, expensive optimizations" + msgstr "ÌÜΩ¤¿¤Ê¤¤¡¢¥³¥¹¥È¤Î¤«¤«¤ëºÇŬ²½¤ò¹Ô¤Ê¤¦" + + #: toplev.c:1002 + #, fuzzy + msgid "Perform jump threading optimizations" + msgstr "¥¸¥ã¥ó¥×ʬ´ôºÇŬ²½¤ò¹Ô¤Ê¤¦" + + #: toplev.c:1004 + #, fuzzy + msgid "Perform strength reduction optimizations" + msgstr "¶¯Åٺ︺ºÇŬ²½¤ò¹Ô¤Ê¤¦" + + #: toplev.c:1006 + msgid "Perform loop unrolling when iteration count is known" + msgstr "È¿Éü²ó¿ô¤¬´ûÃΤΤȤ­¡¢¥ë¡¼¥×Ÿ³«¤ò¹Ô¤Ê¤¦" + + #: toplev.c:1008 + msgid "Perform loop unrolling for all loops" + msgstr "Á´¤Æ¤Î¥ë¡¼¥×¤Ç¥ë¡¼¥×Ÿ³«¤ò¹Ô¤Ê¤¦" + + #: toplev.c:1010 + msgid "Generate prefetch instructions, if available, for arrays in loops" + msgstr "" + + #: toplev.c:1012 + msgid "Force all loop invariant computations out of loops" + msgstr "¥ë¡¼¥×Ãæ¤ËÉÔÊѤʷ׻»¤ò¥ë¡¼¥×¤Î³°¤Ë°Üư¤¹¤ë" + + #: toplev.c:1014 + msgid "Strength reduce all loop general induction variables" + msgstr "¥ë¡¼¥×¤ÎÃæ¤ÎÁ´¤Æ¤Î°ìÈÌͶƳÊÑ¿ô¤ò¶¯Åٺ︺¤¹¤ë" + + #: toplev.c:1016 + msgid "Store strings in writable data section" + msgstr "ʸ»úÎó¤ò½ñ¤­¹þ¤ß²Äǽ¥Ç¡¼¥¿¥»¥¯¥·¥ç¥ó¤Ë³ÊǼ¤¹¤ë" + + #: toplev.c:1018 + #, fuzzy + msgid "Enable machine specific peephole optimizations" + msgstr "µ¡¼ï¸ÇÍ­¤ÎÇÁ¤­·êºÇŬ²½¤òÍ­¸ú¤Ë¤¹¤ë" + + #: toplev.c:1020 + msgid "Copy memory operands into registers before using" + msgstr "¥á¥â¥ê¥ª¥Ú¥é¥ó¥É¤òÍøÍѤ¹¤ëÁ°¤Ë¥ì¥¸¥¹¥¿¤Ø¥³¥Ô¡¼¤¹¤ë" + + #: toplev.c:1022 + msgid "Copy memory address constants into regs before using" + msgstr "¥á¥â¥ê¥¢¥É¥ì¥¹Äê¿ô¤òÍøÍѤ¹¤ëÁ°¤Ë¥ì¥¸¥¹¥¿¤Ø¥³¥Ô¡¼¤¹¤ë" + + #: toplev.c:1024 + msgid "Allow function addresses to be held in registers" + msgstr "´Ø¿ô¥¢¥É¥ì¥¹¤ò¥ì¥¸¥¹¥¿¤Ë»ý¤¿¤»¤ë»ö¤òµö²Ä¤¹¤ë" + + #: toplev.c:1026 + msgid "Integrate simple functions into their callers" + msgstr "ñ½ã¤Ê´Ø¿ô¤ò¸Æ¤Ó½Ð¤·Â¦¤ËÅý¹ç¤¹¤ë" + + #: toplev.c:1028 + msgid "Generate code for funcs even if they are fully inlined" + msgstr "Á´¤Æ¥¤¥ó¥é¥¤¥ó¤È¤µ¤ì¤¿¤È¤·¤Æ¤â´Ø¿ô¤Î¥³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: toplev.c:1030 + msgid "Pay attention to the 'inline' keyword" + msgstr "'inline' ¥­¡¼¥ï¡¼¥É¤ËÃí°Õ¤òʧ¤¦" + + #: toplev.c:1032 + msgid "Emit static const variables even if they are not used" + msgstr "»ÈÍѤµ¤ì¤Ê¤¤ÀÅŪÄê¿ôÊÑ¿ô¤Ç¤¢¤Ã¤Æ¤â½ÐÎϤ¹¤ë" + + #: toplev.c:1034 + msgid "Check for syntax errors, then stop" + msgstr "ʸˡ¥¨¥é¡¼¤ò¸¡½Ð¤·¤Æ¡¢¤½¤³¤ÇÄä»ß¤¹¤ë" + + #: toplev.c:1036 + msgid "Mark data as shared rather than private" + msgstr "¥Ç¡¼¥¿¤ò¥×¥é¥¤¥Ù¡¼¥È¤Ç¤Ï¤Ê¤¯¶¦Í­¤µ¤ì¤ë¤è¤¦¥Þ¡¼¥¯¤¹¤ë" + + #: toplev.c:1038 + msgid "Enable saving registers around function calls" + msgstr "´Ø¿ô¸Æ¤Ó½Ð¤·¤ÎÁ°¸å¤Ç¥ì¥¸¥¹¥¿¤ÎÊݸ¤òÍ­¸ú¤Ë¤¹¤ë" + + #: toplev.c:1040 + msgid "Return 'short' aggregates in memory, not registers" + msgstr "'¾®¤µ¤Ê' ½¸¹çÂΤò¥ì¥¸¥¹¥¿¤Ç¤Ï¤Ê¤¯¥á¥â¥ê¤Ë³ÊǼ¤·¤ÆÊÖ¤¹" + + #: toplev.c:1042 + msgid "Return 'short' aggregates in registers" + msgstr "'¾®¤µ¤Ê' ½¸¹çÂΤò¥ì¥¸¥¹¥¿¤Ë³ÊǼ¤·¤ÆÊÖ¤¹" + + #: toplev.c:1044 + msgid "Attempt to fill delay slots of branch instructions" + msgstr "ʬ´ôÌ¿Îá¤ÎÃٱ䥹¥í¥Ã¥È¤ò»È¤¦¤³¤È¤ò»î¤ß¤ë" + + #: toplev.c:1046 + msgid "Perform the global common subexpression elimination" + msgstr "¥°¥í¡¼¥Ð¥ë¶¦ÄÌÉôʬ¼°¤ò½üµî¤¹¤ë" + + #: toplev.c:1048 + #, fuzzy + msgid "Perform enhanced load motion during global subexpression elimination" + msgstr "¥°¥í¡¼¥Ð¥ë¶¦ÄÌÉôʬ¼°¤ò½üµî¤¹¤ë" + + #: toplev.c:1050 + #, fuzzy + msgid "Perform store motion after global subexpression elimination" + msgstr "¥°¥í¡¼¥Ð¥ë¶¦ÄÌÉôʬ¼°¤ò½üµî¤¹¤ë" + + #: toplev.c:1052 + #, fuzzy + msgid "Run CSE pass after loop optimizations" + msgstr "¥ë¡¼¥×ºÇŬ²½¸å¤Ë¶¦ÄÌÉôʬ¼°½üµî²áÄø¤ò¼Â¹Ô" + + #: toplev.c:1054 + #, fuzzy + msgid "Run the loop optimizer twice" + msgstr "¥ë¡¼¥×ºÇŬ²½¤òÆó²ó¼Â¹Ô¤¹¤ë" + + #: toplev.c:1056 + msgid "Delete useless null pointer checks" + msgstr "̵°ÕÌ£¤Ê null ¥Ý¥¤¥ó¥¿¸¡ºº¤òºï½ü¤¹¤ë" + + #: toplev.c:1058 + msgid "Pretend that host and target use the same FP format" + msgstr "¥Û¥¹¥È¤È¥¿¡¼¥²¥Ã¥È¤¬Æ±¤¸ÉâÆ°¾®¿ô·Á¼°¤ò»È¤¦¿¶¤ëÉñ¤¤¤ò¤µ¤»¤ë" + + #: toplev.c:1060 + msgid "Reschedule instructions before register allocation" + msgstr "¥ì¥¸¥¹¥¿³ÎÊݤÎÁ°¤ËÌ¿Îá¤òÊ¤Ùľ¤¹" + + #: toplev.c:1062 + msgid "Reschedule instructions after register allocation" + msgstr "¥ì¥¸¥¹¥¿³ÎÊݤθå¤ÇÌ¿Îá¤òÊ¤Ùľ¤¹" + + #: toplev.c:1064 + msgid "Enable scheduling across basic blocks" + msgstr "´ðËÜ¥Ö¥í¥Ã¥¯¤ò¸Ù¤°Ì¿ÎáÇÛÃÖ¤òÍ­¸ú¤Ë¤¹¤ë" + + #: toplev.c:1066 + msgid "Allow speculative motion of non-loads" + msgstr "Èó¥í¡¼¥É¤Ç¤ÎÉÔ³Î¼Â¤ÊÆ°ºî¤òµö²Ä¤¹¤ë" + + #: toplev.c:1068 + msgid "Allow speculative motion of some loads" + msgstr "¤¤¤¯¤Ä¤«¤Î¥í¡¼¥É¤Ç¤ÎÉÔ³Î¼Â¤ÊÆ°ºî¤òµö²Ä¤¹¤ë" + + #: toplev.c:1070 + msgid "Allow speculative motion of more loads" + msgstr "¤è¤ê¿¤¯¤Î¥í¡¼¥É¤Ç¤ÎÉÔ³Î¼Â¤ÊÆ°ºî¤òµö²Ä¤¹¤ë" + + #: toplev.c:1072 + msgid "Replace add,compare,branch with branch on count reg" + msgstr "²Ã»»¡¢Èæ³Ó¥Ö¥é¥ó¥Á¤ÎÂå¤ï¤ê¤Ë¥«¥¦¥ó¥È¥ì¥¸¥¹¥¿¤Î¥Ö¥é¥ó¥Á¤ò»È¤¦" + + #: toplev.c:1074 + msgid "Generate position independent code, if possible" + msgstr "²Äǽ¤Ç¤¢¤ì¤Ð°ÌÃÖÆÈΩ¥³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: toplev.c:1077 + msgid "Enable exception handling" + msgstr "Îã³°Ê᪤òÍ­¸ú¤Ë¤¹¤ë" + + #: toplev.c:1079 + msgid "Just generate unwind tables for exception handling" + msgstr "´¬¤­Ìᤷ¤ò¹Ô¤Ê¤¦Îã³°Êä­Íѥơ¼¥Ö¥ë¤òÀ¸À®¤¹¤ë" + + #: toplev.c:1081 + #, fuzzy + msgid "Generate unwind tables exact at each instruction boundary" + msgstr "´¬¤­Ìᤷ¤ò¹Ô¤Ê¤¦Îã³°Êä­Íѥơ¼¥Ö¥ë¤òÀ¸À®¤¹¤ë" + + #: toplev.c:1083 + msgid "Support synchronous non-call exceptions" + msgstr "Ʊ´üÈó¸Æ¤Ó½Ð¤·Îã³°¤ò¥µ¥Ý¡¼¥È¤¹¤ë" + + #: toplev.c:1085 + msgid "Insert arc based program profiling code" + msgstr "¥×¥í¥°¥é¥à¤¬¥³¡¼¥É¥×¥í¥Õ¥¡¥¤¥ë¤¹¤ë¸µ¤Ë¤Ê¤ë¸Ì¤òÁÞÆþ¤¹¤ë" + + #: toplev.c:1087 + msgid "Create data files needed by gcov" + msgstr "gcov ¤¬É¬ÍפȤ¹¤ë¥Ç¡¼¥¿¥Õ¥¡¥¤¥ë¤òºîÀ®¤¹¤ë" + + #: toplev.c:1089 + msgid "Use profiling information for branch probabilities" + msgstr "ʬ´ô·ÐÏ©¿ä¬ÍѤΥץí¥Õ¥¡¥¤¥ë¾ðÊó¤òÍøÍѤ¹¤ë" + + #: toplev.c:1091 + msgid "Reorder basic blocks to improve code placement" + msgstr "¥³¡¼¥ÉÇÛÃÖ¤ò²þÁ±¤¹¤ë¤¿¤á¤Ë´ðËÜ¥Ö¥í¥Ã¥¯¤òºÆÀ°Íý¤¹¤ë" + + #: toplev.c:1093 + msgid "Do the register renaming optimization pass" + msgstr "ºÇŬ²½²áÄø¤Î¥ì¥¸¥¹¥¿¤Ä¤±ÊѤ¨¤ò¹Ô¤Ê¤¦" + + #: toplev.c:1095 + #, fuzzy + msgid "Do the register copy-propagation optimization pass" + msgstr "ºÇŬ²½²áÄø¤Î¥ì¥¸¥¹¥¿¤Ä¤±ÊѤ¨¤ò¹Ô¤Ê¤¦" + + #: toplev.c:1097 + #, fuzzy + msgid "Do not put uninitialized globals in the common section" + msgstr "Âç°èÊÑ¿ôÅù¤ò½é´ü²½¤µ¤ì¤Ê¤¤¥³¥â¥ó¥»¥¯¥·¥ç¥ó¤ËÃÖ¤«¤Ê¤¤" + + #: toplev.c:1099 + msgid "Do not generate .size directives" + msgstr ".size µ¿»÷Ì¿Îá¤òÀ¸À®¤·¤Ê¤¤" + + #: toplev.c:1101 + msgid "place each function into its own section" + msgstr "³Æ¡¹¤Î´Ø¿ô¤ò¤½¤ì¼«¿È¤Î¥»¥¯¥·¥ç¥ó¤ËÇÛÃÖ¤¹¤ë" + + #: toplev.c:1103 + msgid "place data items into their own section" + msgstr "¥Ç¡¼¥¿¹àÌܤò¤½¤ì¤é¼«¿È¤Î¥»¥¯¥·¥ç¥ó¤ËÇÛÃÖ¤¹¤ë" + + #: toplev.c:1105 + msgid "Add extra commentry to assembler output" + msgstr ";ʬ¤Ê¥³¥á¥ó¥È¤ò¥¢¥»¥ó¥Ö¥é½ÐÎϤËÄɲ乤ë" + + #: toplev.c:1107 + #, fuzzy + msgid "Output GNU ld formatted global initializers" + msgstr "GNU ld ·Á¼°¤ÎÂç°è½é´ü²½»Ò¤ò½ÐÎϤ¹¤ë" + + #: toplev.c:1109 + #, fuzzy + msgid "Enables a register move optimization" + msgstr "°Üư̿ÎáºÇŬ²½¥ì¥¸¥¹¥¿¤òÍ­¸ú¤Ë¤¹¤ë" + + #: toplev.c:1111 + msgid "Do the full regmove optimization pass" + msgstr "ºÇŬ²½²áÄø¤ÇºÇÂç¸Â¤Î regmove ¤ò¹Ô¤Ê¤¦" + + #: toplev.c:1113 + msgid "Pack structure members together without holes" + msgstr "¹½Â¤ÂÎ¥á¥ó¥Ð¤ò·ê¤¬³«¤«¤Ê¤¤¤è¤¦¤Ë¥Ñ¥Ã¥¯¤¹¤ë" + + #: toplev.c:1115 + msgid "Insert stack checking code into the program" + msgstr "¥×¥í¥°¥é¥à¤Ë¥¹¥¿¥Ã¥¯¶­³¦¸¡½Ð¥³¡¼¥É¤òÁÞÆþ¤¹¤ë" + + #: toplev.c:1117 + msgid "Specify that arguments may alias each other & globals" + msgstr "°ú¿ô¤ÈÂç°è¥Ç¡¼¥¿¤ä¾¤Î°ú¿ô¤ÈÊÌ̾¤Ë¤Ê¤ê¤¦¤ë»ö¤ò»ØÄꤹ¤ë" + + #: toplev.c:1119 + msgid "Assume arguments may alias globals but not each other" + msgstr "°ú¿ô¤ÈÂç°è¥Ç¡¼¥¿¤ÏÊÌ̾¤Ë¤Ê¤ê¤¦¤ë¤¬Â¾¤Î°ú¿ô¤È¤ÏÊÌ̾¤Ç¤Ï¤Ê¤¤¤È¤ß¤Ê¤¹" + + #: toplev.c:1121 + msgid "Assume arguments do not alias each other or globals" + msgstr "°ú¿ô¤¬Âç°è¥Ç¡¼¥¿¤ä¾¤Î°ú¿ô¤ÈÊÌ̾¤Ë¤Ï¤Ê¤é¤Ê¤¤¤È¤ß¤Ê¤¹" + + #: toplev.c:1123 + msgid "Assume strict aliasing rules apply" + msgstr "¸·Ì©¤ÊÊÌ̾µ¬Â§¤ËŬ¹ç¤¹¤ë¤È¤ß¤Ê¤¹" + + #: toplev.c:1125 + msgid "Align the start of loops" + msgstr "¥ë¡¼¥×¤Î³«»Ï¤ò¥¢¥é¥¤¥ó¤¹¤ë" + + #: toplev.c:1127 + msgid "Align labels which are only reached by jumping" + msgstr "¥é¥Ù¥ë¤Î¤¦¤Á¥¸¥ã¥ó¥×ÅþãÀè¤È¤Ê¤ë¤â¤Î¤À¤±¤ò¥¢¥é¥¤¥ó¤¹¤ë" + + #: toplev.c:1129 + msgid "Align all labels" + msgstr "Á´¤Æ¤Î¥é¥Ù¥ë¤ò¥¢¥é¥¤¥ó¤¹¤ë" + + #: toplev.c:1131 + msgid "Align the start of functions" + msgstr "´Ø¿ô¤Î³«»Ï¤ò¥¢¥é¥¤¥ó¤¹¤ë" + + #: toplev.c:1133 + msgid "Attempt to merge identical constants accross compilation units" + msgstr "" + + #: toplev.c:1135 + msgid "Attempt to merge identical constants and constant variables" + msgstr "" + + #: toplev.c:1137 + msgid "Suppress output of instruction numbers and line number notes in debugging dumps" + msgstr "¥Ç¥Ð¥Ã¥°¥À¥ó¥×¤ÇÌ¿ÎáÈÖ¹æ¤È¹ÔÈÖ¹æ¥Î¡¼¥È¤Î½ÐÎϤòÍÞÀ©¤¹¤ë" + + #: toplev.c:1139 + msgid "Instrument function entry/exit with profiling calls" + msgstr "´Ø¿ô¤ÎÆþ¤ê¸ý/½Ð¸ý¤Ç¥×¥í¥Õ¥¡¥¤¥ë¸Æ¤Ó½Ð¤·¤òÀ¸À®¤¹¤ë" + + #: toplev.c:1141 + msgid "Enable SSA optimizations" + msgstr "SSA ºÇŬ²½¤òÍ­¸ú¤Ë¤¹¤ë" + + #: toplev.c:1143 + #, fuzzy + msgid "Enable SSA conditional constant propagation" + msgstr "¾ò·ïŪ move Ì¿Îá¤ÎÍøÍѤòÍ­¸ú¤Ë¤¹¤ë" + + #: toplev.c:1145 + #, fuzzy + msgid "Enable aggressive SSA dead code elimination" + msgstr "¥Ç¥Ã¥É¥³¡¼¥É¤Î½üµî¤ò¹Ô¤Ê¤¦" + + #: toplev.c:1147 + msgid "External symbols have a leading underscore" + msgstr "³°Éô¥·¥ó¥Ü¥ë¤ËƬʸ»ú¥¢¥ó¥À¡¼¥¹¥³¥¢¤ò»ý¤¿¤»¤ë" + + #: toplev.c:1149 + msgid "Process #ident directives" + msgstr "#ident ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò½èÍý¤¹¤ë" + + #: toplev.c:1151 + msgid "Enables an rtl peephole pass run before sched2" + msgstr "ÂèÆóÌ¿ÎáÇÛÃÖ¤ÎÁ°¤Ç rtl ÇÁ¤­·ê²áÄø¤òÍ­¸ú¤Ë¤¹¤ë" + + #: toplev.c:1153 + msgid "Enables guessing of branch probabilities" + msgstr "ʬ´ô·ÐÏ©¿ä¬¤òÍ­¸ú¤Ë¤¹¤ë" + + #: toplev.c:1155 + msgid "Set errno after built-in math functions" + msgstr "ÁȤ߹þ¤ß¿ô³Ø´Ø¿ô¤Î¸å¤Ë errno ¤ò¥»¥Ã¥È¤¹¤ë" + + #: toplev.c:1157 + #, fuzzy + msgid "Floating-point operations can trap" + msgstr "ÉâÆ°¾®¿ôÅÀ¤Î¨Ãͤò½ÐÎϤ¹¤ëºÝ¤Ë¥È¥é¥Ã¥×¤¬¤«¤«¤ê¤Þ¤·¤¿" + + #: toplev.c:1159 + msgid "Allow math optimizations that may violate IEEE or ANSI standards" + msgstr "" + + #: toplev.c:1161 + msgid "Compile pointers as triples: value, base & end" + msgstr "" + + #: toplev.c:1163 + #, fuzzy + msgid "Generate code to check bounds before dereferencing pointers and arrays" + msgstr "ÇÛÎó¤Îź»ú¤Èź»ú¶­³¦¤ò¸¡ºº¤¹¤ë¥³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: toplev.c:1165 + msgid "Convert floating point constant to single precision constant" + msgstr "ÉâÆ°¾®¿ôÅÀÄê¿ô¤òñÀºÅÙÄê¿ô¤ËÊÑ´¹¤¹¤ë" + + #: toplev.c:1167 + msgid "Report time taken by each compiler pass at end of run" + msgstr "¼Â¹Ô½ªÎ»»þ¤Ë¥³¥ó¥Ñ¥¤¥é¤Î³Æ²áÄø¤ËÍפ·¤¿»þ´Ö¤òÊó¹ð¤¹¤ë" + + #: toplev.c:1169 + msgid "Report on permanent memory allocation at end of run" + msgstr "¼Â¹Ô½ªÎ»»þ¤Ë±Ê³Ū¤Ë³ÎÊݤµ¤ì¤¿¥á¥â¥ê¤òÊó¹ð¤¹¤ë" + + #: toplev.c:1171 + #, fuzzy + msgid "Trap for signed overflow in addition / subtraction / multiplication" + msgstr "Éä¹çÉÕ¤­¤Î²Ã»»/¸º»»/¾è»»¤Ç¤Î·å¤¢¤Õ¤ì¤ò¥È¥é¥Ã¥×¤¹¤ë" + + #: toplev.c:1188 + msgid "Compile just for ISO C89" + msgstr "ISO C89 ÍѤ˥³¥ó¥Ñ¥¤¥ë¤¹¤ë" + + #: toplev.c:1190 + msgid "Do not promote floats to double if using -traditional" + msgstr "-traditional »ÈÍÑ»þ¤Ë¤Ï¡¢ÉâÆ°¾®¿ô¤Ë´Ø¤· float ¤«¤é double ¤Ë³Ê¾å¤²¤·¤Ê¤¤" + + #: toplev.c:1192 + msgid "Determine language standard" + msgstr "¸À¸ì¤Îɸ½à¤ò·èÄꤹ¤ë" + + #: toplev.c:1196 + #, fuzzy + msgid "Make bit-fields by unsigned by default" + msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤ò¥Ç¥Õ¥©¥ë¥È¤ÇÉä¹ç̵¤·¤È¤¹¤ë" + + #: toplev.c:1200 + msgid "Make 'char' be signed by default" + msgstr "'char' ¤ò¥Ç¥Õ¥©¥ë¥È¤ÇÉä¹çÉÕ¤­¤È¤¹¤ë" + + #: toplev.c:1202 + msgid "Make 'char' be unsigned by default" + msgstr "'char' ¤ò¥Ç¥Õ¥©¥ë¥È¤ÇÉä¹ç̵¤·¤È¤¹¤ë" + + #: toplev.c:1208 + msgid "Attempt to support traditional K&R style C" + msgstr "¸Å¤¤ K&R ¼°¤Î C ¤Î¥µ¥Ý¡¼¥È¤ò»î¤ß¤ë" + + #: toplev.c:1214 + #, fuzzy + msgid "Do not recognize the 'asm' keyword" + msgstr "'asm' ͽÌó¸ì¤òǧ¼±¤µ¤»¤Ê¤¤" + + #: toplev.c:1217 + #, fuzzy + msgid "Do not recognize any built in functions" + msgstr "¤¤¤¯¤Ä¤«¤ÎÁȤ߹þ¤ß´Ø¿ô¤òǧ¼±¤µ¤»¤Ê¤¤" + + #: toplev.c:1219 + msgid "Assume normal C execution environment" + msgstr "Ä̾ï¤Î C ¼Â¹Ô´Ä¶­¤òÁ°Äó¤È¤¹¤ë" + + #: toplev.c:1222 + msgid "Assume that standard libraries & main might not exist" + msgstr "ɸ½à¥é¥¤¥Ö¥é¥ê¤ä main ¤¬Â¸ºß¤·¤Ê¤¤²ÄǽÀ­¤¬¤¢¤ë¤â¤Î¤È¤¹¤ë" + + #: toplev.c:1225 + msgid "Allow different types as args of ? operator" + msgstr "? ±é»»»Ò¤Î°ú¿ô¤È¤·¤Æ°Û¤Ê¤Ã¤¿·¿¤òµöÍÆ¤¹¤ë" + + #: toplev.c:1228 + msgid "Allow the use of $ inside identifiers" + msgstr "¼±ÊÌ»ÒÃæ¤Ç¤Î $ ¤Î»ÈÍѤòµöÍÆ¤¹¤ë" + + #: toplev.c:1233 + msgid "Use the same size for double as for float" + msgstr "double ¤Î¥µ¥¤¥º¤ò float ¤ÈƱ¤¸¤È¤·¤Æ»ÈÍѤ¹¤ë" + + #: toplev.c:1236 + msgid "Use the smallest fitting integer to hold enums" + msgstr "Îóµó·¿¤¬ÊÝ»ý¤Ç¤­¤ëºÇ¾®¤ÎÀ°¿ô·¿¤ò»ÈÍѤ¹¤ë" + + #: toplev.c:1239 + msgid "Override the underlying type for wchar_t to `unsigned short'" + msgstr "wchar_t ¤Îº¬ËÜŪ¤Ê·¿¤ò `unsigned short' ¤Èʤ¤¹" + + #: toplev.c:1243 + msgid "Enable most warning messages" + msgstr "ËØ¤ó¤É¤Î·Ù¹ð¥á¥Ã¥»¡¼¥¸¤òÍ­¸ú¤Ë¤¹¤ë" + + #: toplev.c:1245 + msgid "Warn about casting functions to incompatible types" + msgstr "·¿¤Ë¸ß´¹À­¤Î¤Ê¤¤´Ø¿ô¤Î¥­¥ã¥¹¥È¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë" + + #: toplev.c:1249 + msgid "Warn about functions which might be candidates for format attributes" + msgstr "format °À­¤ò¤Î¸õÊä¤È¤Ê¤ê¤½¤¦¤Ê´Ø¿ô¤Ë¤Ä¤¤¤Æ·Ù¹ð¤¹¤ë" + + #: toplev.c:1252 + msgid "Warn about casts which discard qualifiers" + msgstr "½¤¾þ»Ò¤ò¼è¤êµî¤ë¥­¥ã¥¹¥È¤Ë¤Ä¤¤¤Æ·Ù¹ð¤¹¤ë" + + #: toplev.c:1255 + msgid "Warn about subscripts whose type is 'char'" + msgstr "ź»ú¤Î·¿¤¬ 'char' ¤Ç¤¢¤ì¤Ð·Ù¹ð¤¹¤ë" + + #: toplev.c:1258 toplev.c:1261 + msgid "Warn if nested comments are detected" + msgstr "Æþ¤ì»Ò¤Ë¤Ê¤Ã¤¿¥³¥á¥ó¥È¤ò¸¡½Ð¤·¤¿¤È¤­¤Ë·Ù¹ð¤¹¤ë" + + #: toplev.c:1264 + msgid "Warn about possibly confusing type conversions" + msgstr "·¿ÊÑ´¹¤¬º®Í𤹤ë²ÄǽÀ­¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë" + + #: toplev.c:1267 + msgid "Warn about printf/scanf/strftime/strfmon format anomalies" + msgstr "printf/scanf/strftime/strfmon ·Á¼°¤ÎÊÑ§Ū¤Ê¤â¤Î¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë" + + #: toplev.c:1271 + msgid "Don't warn about strftime formats yielding 2 digit years" + msgstr "strftime ·Á¼°¤¬Æó·å¤Çǯ¤òɽ¤·¤Æ¤¤¤ë»þ¤Î·Ù¹ð¤·¤Ê¤¤" + + #: toplev.c:1274 + msgid "Don't warn about too many arguments to format functions" + msgstr "format ´Ø¿ô¤Ø¤Î¿¤¹¤®¤ë°ú¿ô¤Ë´Ø¤¹¤ë·Ù¹ð¤·¤Ê¤¤" + + #: toplev.c:1276 + msgid "Warn about non-string-literal format strings" + msgstr "Èóʸ»úÎó¥ê¥Æ¥é¥ë¤Î format ʸ»úÎó¤Ë¤Ä¤¤¤Æ·Ù¹ð¤¹¤ë" + + #: toplev.c:1279 + msgid "Warn about possible security problems with format functions" + msgstr "¥»¥­¥å¥ê¥Æ¥£Åª¤ÊÌäÂê¤È¤Ê¤ê¤¦¤ë format ´Ø¿ô¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë" + + #: toplev.c:1282 + msgid "Warn about implicit function declarations" + msgstr "°ÅÌۤδؿôÀë¸À¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë" + + #: toplev.c:1286 + msgid "Warn when a declaration does not specify a type" + msgstr "Àë¸À¤¬·¿¤ò»ØÄꤷ¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ë·Ù¹ð¤¹¤ë" + + #: toplev.c:1291 + msgid "Warn about the use of the #import directive" + msgstr "#import ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ÎÍøÍѤ˴ؤ·¤Æ·Ù¹ð¤¹¤ë" + + #: toplev.c:1295 + msgid "Do not warn about using 'long long' when -pedantic" + msgstr "-pedantic »ØÄê»þ¤Ç¤â 'long long' ¤Î»ÈÍѤˤĤ¤¤Æ¤Ï·Ù¹ð¤·¤Ê¤¤" + + #: toplev.c:1297 + msgid "Warn about suspicious declarations of main" + msgstr "µ¿¤ï¤·¤¤ main ¤ÎÀë¸À¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë" + + #: toplev.c:1300 + #, fuzzy + msgid "Warn about possibly missing braces around initializers" + msgstr "½é´ü²½»Ò¤Î¼þ¤ê¤Ë¥Ö¥ì¡¼¥¹¤ò·ç¤¤¤Æ¤¤¤ëÍͤǤ¢¤ì¤Ð·Ù¹ð¤¹¤ë" + + #: toplev.c:1303 + msgid "Warn about global funcs without previous declarations" + msgstr "»öÁ°¤ÎÀë¸À¤Ê¤·¤ÎÂç°è´Ø¿ô¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë" + + #: toplev.c:1306 + msgid "Warn about global funcs without prototypes" + msgstr "¥×¥í¥È¥¿¥¤¥×¤Ê¤·¤ÎÂç°è´Ø¿ô¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë" + + #: toplev.c:1309 + msgid "Warn about use of multicharacter literals" + msgstr "Ê£¿ôʸ»ú¥ê¥Æ¥é¥ë¤Î»ÈÍѤ˴ؤ·¤Æ·Ù¹ð¤¹¤ë" + + #: toplev.c:1312 + msgid "Warn about externs not at file scope level" + msgstr "¥Õ¥¡¥¤¥ë¥¹¥³¡¼¥×¥ì¥Ù¥ë¤Ç¤Ê¤¤ extern ¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë" + + #: toplev.c:1315 + msgid "Warn about possible missing parentheses" + msgstr "³ç¸Ì¤ò·ç¤¤¤Æ¤¤¤ë²ÄǽÀ­¤¬¤¢¤ë¾ì¹ç¤Ë·Ù¹ð¤¹¤ë" + + #: toplev.c:1318 + msgid "Warn about possible violations of sequence point rules" + msgstr "ÉûºîÍÑ´°Î»ÅÀµ¬Â§¤òÇˤë²ÄǽÀ­¤¬¤¢¤ë¾ì¹ç¤Ë·Ù¹ð¤¹¤ë" + + #: toplev.c:1321 + msgid "Warn about function pointer arithmetic" + msgstr "´Ø¿ô¥Ý¥¤¥ó¥¿¤Î·×»»¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë" + + #: toplev.c:1324 + msgid "Warn about multiple declarations of the same object" + msgstr "Ʊ°ì¥ª¥Ö¥¸¥§¥¯¥È¤ÎÀë¸À¤¬Ê£¿ô¤¢¤ì¤Ð·Ù¹ð¤¹¤ë" + + #: toplev.c:1327 + msgid "Warn about signed/unsigned comparisons" + msgstr "Éä¹çÉÕ¤­/Éä¹ç̵¤·¤ÎÈæ³Ó¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë" + + #: toplev.c:1330 + msgid "Warn about testing equality of floating point numbers" + msgstr "ÉâÆ°¾®¿ôÅÀ¿ô¤ÎÅù²Á¥Æ¥¹¥È¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë" + + #: toplev.c:1333 + msgid "Warn about unrecognized pragmas" + msgstr "ǧ¼±¤Ç¤­¤Ê¤¤ pragma ¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë" + + #: toplev.c:1336 + msgid "Warn about non-prototyped function decls" + msgstr "¥×¥í¥È¥¿¥¤¥×¤µ¤ì¤Æ¤¤¤Ê¤¤´Ø¿ôÀë¸À¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë" + + #: toplev.c:1339 + msgid "Warn about constructs whose meaning change in ISO C" + msgstr "ISO C ¤Ç¤½¤Î°ÕÌ£¤¬Êѹ¹¤µ¤ì¤¿ÆâÍÆ¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë" + + #: toplev.c:1342 + msgid "Warn when trigraphs are encountered" + msgstr "¥È¥é¥¤¥°¥é¥Õ¤òȯ¸«¤·¤¿¤È¤­¤Ë·Ù¹ð¤¹¤ë" + + #: toplev.c:1347 + msgid "Mark strings as 'const char *'" + msgstr "ʸ»úÎó¤ò 'const char *' ¤È¤·¤Æ¥Þ¡¼¥¯¤¹¤ë" + + #: toplev.c:1472 + msgid "Warn when a function is unused" + msgstr "´Ø¿ô¤¬»È¤ï¤ì¤Ê¤¤¤È¤­¤Ë·Ù¹ð¤¹¤ë" + + #: toplev.c:1474 + msgid "Warn when a label is unused" + msgstr "¥é¥Ù¥ë¤¬»È¤ï¤ì¤Ê¤¤¤È¤­¤Ë·Ù¹ð¤¹¤ë" + + #: toplev.c:1476 + msgid "Warn when a function parameter is unused" + msgstr "´Ø¿ô¤Î²¾°ú¿ô¤¬»È¤ï¤ì¤Ê¤¤¤È¤­¤Ë·Ù¹ð¤¹¤ë" + + #: toplev.c:1478 + msgid "Warn when a variable is unused" + msgstr "ÊÑ¿ô¤¬»È¤ï¤ì¤Ê¤¤¤È¤­¤Ë·Ù¹ð¤¹¤ë" + + #: toplev.c:1480 + msgid "Warn when an expression value is unused" + msgstr "¼°¤ÎÃͤ¬»È¤ï¤ì¤Ê¤¤¤È¤­¤Ë·Ù¹ð¤¹¤ë" + + #: toplev.c:1482 + msgid "Do not suppress warnings from system headers" + msgstr "¥·¥¹¥Æ¥à¥Ø¥Ã¥À¤«¤é¤Î·Ù¹ð¤òÍÞÀ©¤·¤Ê¤¤" + + #: toplev.c:1484 + msgid "Treat all warnings as errors" + msgstr "Á´¤Æ¤Î·Ù¹ð¤ò¥¨¥é¡¼¤È¤·¤Æ¼è¤ê°·¤¦" + + #: toplev.c:1486 + msgid "Warn when one local variable shadows another" + msgstr "¤¢¤ë¥í¡¼¥«¥ëÊÑ¿ô¤¬Â¾¤Î¤â¤Î¤òʤ¤¤±£¤¹¤È¤­¤Ë·Ù¹ð¤¹¤ë" + + #: toplev.c:1488 + msgid "Warn about enumerated switches missing a specific case" + msgstr "ÎóµóÄê¿ô¤Î switch ¤Ç case »ØÄ꤬·ç¤±¤Æ¤¤¤ë¤â¤Î¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë" + + #: toplev.c:1490 + msgid "Warn about returning structures, unions or arrays" + msgstr "¹½Â¤ÂΡ¢¶¦ÍÑÂÎËô¤ÏÇÛÎó¤òÊÖ¤¹¤â¤Î¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë" + + #: toplev.c:1492 + msgid "Warn about pointer casts which increase alignment" + msgstr "¥Ý¥¤¥ó¥¿¤Î¥­¥ã¥¹¥È¤Ç¥¢¥é¥¤¥ó¥á¥ó¥È¤¬Áý²Ã¤¹¤ë¤â¤Î¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë" + + #: toplev.c:1494 + msgid "Warn about code that will never be executed" + msgstr "¼Â¹Ô¤µ¤ì¤ë¤³¤È¤¬¤Ê¤¤¥³¡¼¥É¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë" + + #: toplev.c:1496 + #, fuzzy + msgid "Warn about uninitialized automatic variables" + msgstr "½é´ü²½¤µ¤ì¤Ê¤¤¼«Æ°ÊÑ¿ô¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë" + + #: toplev.c:1498 + msgid "Warn when an inlined function cannot be inlined" + msgstr "¥¤¥ó¥é¥¤¥ó´Ø¿ô¤ò¥¤¥ó¥é¥¤¥ó²½¤Ç¤­¤Ê¤¤¾ì¹ç¤Ë·Ù¹ð¤¹¤ë" + + #: toplev.c:1500 + msgid "Warn when the packed attribute has no effect on struct layout" + msgstr "packed °À­¤¬¹½Â¤ÂÎÇÛÃ֤˱ƶÁ¤·¤Ê¤¤¾ì¹ç¤Ë·Ù¹ð¤¹¤ë" + + #: toplev.c:1502 + msgid "Warn when padding is required to align struct members" + msgstr "¹½Â¤ÂÎ¥á¥ó¥Ð¤Î¥¢¥é¥¤¥ó¤Ç¡¢¥Ñ¥Ç¥£¥ó¥°¤òÍפ¹¤ë¾ì¹ç¤Ë·Ù¹ð¤¹¤ë" + + #: toplev.c:1504 + msgid "Warn when an optimization pass is disabled" + msgstr "ºÇŬ²½²áÄø¤¬Ìµ¸ú²½¤µ¤ì¤¿¾ì¹ç¤Ë·Ù¹ð¤¹¤ë" + + #: toplev.c:1506 + msgid "Warn about functions which might be candidates for attribute noreturn" + msgstr "noreturn °À­¤Î¸õÊä¤È¤Ê¤ê¤½¤¦¤Ê´Ø¿ô¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë" + + #: toplev.c:1577 toplev.c:4317 tradcpp.c:781 + #, fuzzy, c-format + msgid "invalid option `%s'" + msgstr "̵¸ú¤Ê¥ª¥×¥·¥ç¥ó `%s'" + + #: toplev.c:1723 + #, fuzzy, c-format + msgid "internal error: %s" + msgstr "ÆâÉô¥¨¥é¡¼: %s" + + #: toplev.c:2023 + #, c-format + msgid "`%s' used but never defined" + msgstr "`%s' ¤¬»È¤ï¤ì¤Þ¤·¤¿¤¬Ì¤ÄêµÁ¤Ç¤¹" + + #: toplev.c:2026 + #, c-format + msgid "`%s' declared `static' but never defined" + msgstr "`%s' ¤¬ `static' ¤ÈÀë¸À¤µ¤ì¤Þ¤·¤¿¤¬Ì¤ÄêµÁ¤Ç¤¹" + + #: toplev.c:2048 + #, c-format + msgid "`%s' defined but not used" + msgstr "`%s' ¤¬ÄêµÁ¤µ¤ì¤Þ¤·¤¿¤¬»È¤ï¤ì¤Þ¤»¤ó¤Ç¤·¤¿" + + #: toplev.c:2279 + #, c-format + msgid "invalid register name `%s' for register variable" + msgstr "`%s' ¤Ï¥ì¥¸¥¹¥¿ÊÑ¿ô¤È¤·¤Æ¤Ï̵¸ú¤Ê¥ì¥¸¥¹¥¿Ì¾¤Ç¤¹" + + #: toplev.c:3552 + msgid " -ffixed- Mark as being unavailable to the compiler\n" + msgstr " -ffixed- ¥³¥ó¥Ñ¥¤¥é¤ËÂФ· ¤ò»ÈÍÑÉԲĤȥޡ¼¥¯¤¹¤ë\n" + + #: toplev.c:3553 + msgid " -fcall-used- Mark as being corrupted by function calls\n" + msgstr " -fcall-used- ´Ø¿ô¸Æ¤Ó½Ð¤·¤ÇÇ˲õ¤µ¤ì¤ë ¤È¤·¤Æ¥Þ¡¼¥¯¤¹¤ë\n" + + #: toplev.c:3554 + msgid " -fcall-saved- Mark as being preserved across functions\n" + msgstr " -fcall-saved- ¤¬´Ø¿ô¤òÄ̤¸¤ÆÊÝ»ý¤µ¤ì¤ë¤È¥Þ¡¼¥¯¤¹¤ë\n" + + #: toplev.c:3555 + msgid " -finline-limit= Limits the size of inlined functions to \n" + msgstr " -finline-limit= ¥¤¥ó¥é¥¤¥ó´Ø¿ô¤Î¥µ¥¤¥º¤ò ¤ËÀ©¸Â¤¹¤ë\n" + + #: toplev.c:3556 + msgid " -fmessage-length= Limits diagnostics messages lengths to characters per line. 0 suppresses line-wrapping\n" + msgstr " -fmessage-length= ¿ÇÃÇ¥á¥Ã¥»¡¼¥¸¤ÎŤµ¤ò°ì¹ÔÊÕ¤ê ʸ»ú¤ËÀ©¸Â¤¹¤ë¡£ 0 ¤À¤È²þ¹Ô¤òÍÞÀ©¤¹¤ë\n" + + #: toplev.c:3557 + msgid " -fdiagnostics-show-location=[once | every-line] Indicates how often source location information should be emitted, as prefix, at the beginning of diagnostics when line-wrapping\n" + msgstr "" + " -fdiagnostics-show-location=[once | every-line] ¿ÇÃÇ¥á¥Ã¥»¡¼¥¸¤Î²þ¹Ô¤ÎºÝ¤Ë,\n" + " ¥½¡¼¥¹°ÌÃÖ¾ðÊ󤬹Ԥκǽé¤Ëɽ¼¨¤µ¤ì¤ëÉÑÅÙ¤ò»ØÄꤹ¤ë\n" + + #: toplev.c:3568 + #, fuzzy + msgid " -O[number] Set optimization level to [number]\n" + msgstr " -O[number] ºÇŬ²½¥ì¥Ù¥ë¤ò [number] ¤ËÀßÄꤹ¤ë\n" + + #: toplev.c:3569 + #, fuzzy + msgid " -Os Optimize for space rather than speed\n" + msgstr " -Os ®ÅÙ¤è¤ê¤â¥µ¥¤¥º¤ÎºÇŬ²½¤ò¹Ô¤Ê¤¦\n" + + #: toplev.c:3581 + msgid " -pedantic Issue warnings needed by strict compliance to ISO C\n" + msgstr " -pedantic ¸·Ì©¤Ê ISO C ¤Ø¤ÎŬ¹ç¤ËÍפ¹¤ë·Ù¹ð¤òȯ¤¹¤ë\n" + + #: toplev.c:3582 + msgid " -pedantic-errors Like -pedantic except that errors are produced\n" + msgstr " -pedantic-errors -pedantic ¤ÈƱÍͤÀ¤¬¡¢¥¨¥é¡¼¤òȯÀ¸¤µ¤»¤ë\n" + + #: toplev.c:3583 + msgid " -w Suppress warnings\n" + msgstr " -w ·Ù¹ð¤òÍÞÀ©¤¹¤ë\n" + + #: toplev.c:3584 + msgid " -W Enable extra warnings\n" + msgstr " -W ÆÃÊ̤ʷٹð¤òÍ­¸ú¤Ë¤¹¤ë\n" + + #: toplev.c:3595 + msgid " -Wunused Enable unused warnings\n" + msgstr " -Wunused ̤»ÈÍѤˤĤ¤¤Æ¤Î·Ù¹ð¤òÍ­¸ú¤Ë¤¹¤ë\n" + + #: toplev.c:3596 + msgid " -Wlarger-than- Warn if an object is larger than bytes\n" + msgstr " -Wlarger-than- ¥ª¥Ö¥¸¥§¥¯¥È¤¬ ¥Ð¥¤¥È¤è¤êÂ礭¤±¤ì¤Ð·Ù¹ð¤¹¤ë\n" + + #: toplev.c:3597 + msgid " -p Enable function profiling\n" + msgstr " -p ´Ø¿ô¥×¥í¥Õ¥¡¥¤¥ë¤òÍ­¸ú¤Ë¤¹¤ë\n" + + #: toplev.c:3599 + msgid " -a Enable block profiling \n" + msgstr " -a ¥Ö¥í¥Ã¥¯¥×¥í¥Õ¥¡¥¤¥ë¤òÍ­¸ú¤Ë¤¹¤ë\n" + + #: toplev.c:3602 + msgid " -ax Enable jump profiling \n" + msgstr " -ax ¥¸¥ã¥ó¥×¥×¥í¥Õ¥¡¥¤¥ë¤òÍ­¸ú¤Ë¤¹¤ë\n" + + #: toplev.c:3604 + msgid " -o Place output into \n" + msgstr " -o ½ÐÎϤò ¤Ë½ñ¤­¹þ¤à\n" + + #: toplev.c:3605 + msgid "" + " -G Put global and static data smaller than \n" + " bytes into a special section (on some targets)\n" + msgstr "" + " -G ¥Ð¥¤¥È¤è¤ê¾®¤µ¤ÊÂç°è¤ª¤è¤ÓÀÅŪ¥Ç¡¼¥¿¤ò\n" + " ÆÃÊ̤ʥ»¥¯¥·¥ç¥ó¤ËÃÖ¤¯ (¥¿¡¼¥²¥Ã¥È¼¡Âè)\n" + + #: toplev.c:3616 + msgid " -aux-info Emit declaration info into \n" + msgstr " -aux-info Àë¸À¾ðÊó¤ò ¤ØÈ¯¹Ô¤¹¤ë\n" + + #: toplev.c:3617 + msgid " -quiet Do not display functions compiled or elapsed time\n" + msgstr " -quiet ¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤¿´Ø¿ô¤ä·Ð²á»þ´Ö¤òɽ¼¨¤·¤Ê¤¤\n" + + #: toplev.c:3618 + msgid " -version Display the compiler's version\n" + msgstr " -version ¥³¥ó¥Ñ¥¤¥é¤Î¥Ð¡¼¥¸¥ç¥ó¤òɽ¼¨¤¹¤ë\n" + + #: toplev.c:3619 + msgid " -d[letters] Enable dumps from specific passes of the compiler\n" + msgstr " -d[letters] ¥³¥ó¥Ñ¥¤¥é¤Î²áÄø¤«¤é¤Î¥À¥ó¥×¤òÍ­¸ú¤Ë¤¹¤ë\n" + + #: toplev.c:3620 + msgid " -dumpbase Base name to be used for dumps from specific passes\n" + msgstr " -dumpbase ²áÄø¤«¤é¤Î¥À¥ó¥×¤Ë»È¤ï¤ì¤ë̾Á°¤Î¥Ù¡¼¥¹¤È¤¹¤ë\n" + + #: toplev.c:3622 + msgid " -fsched-verbose= Set the verbosity level of the scheduler\n" + msgstr " -fsched-verbose= ¥¹¥±¥¸¥å¡¼¥é¤ÎñÁÀå¥ì¥Ù¥ë¤òÀßÄꤹ¤ë\n" + + #: toplev.c:3624 + msgid " --help Display this information\n" + msgstr " --help ¤³¤Î¾ðÊó¤òɽ¼¨¤¹¤ë\n" + + #: toplev.c:3639 + msgid "\nLanguage specific options:\n" + msgstr "\n¸À¸ì»ÅÍÍ¥ª¥×¥·¥ç¥ó:\n" + + #: toplev.c:3651 + #, c-format + msgid " %-23.23s [undocumented]\n" + msgstr " %-23.23s [ʸ½ñ²½¤µ¤ì¤Æ¤¤¤Ê¤¤]\n" + + #: toplev.c:3659 toplev.c:3673 + #, c-format + msgid "\nThere are undocumented %s specific options as well.\n" + msgstr "\nʸ½ñ²½¤µ¤ì¤Æ¤¤¤Ê¤¤ %s »ÅÍÍ¥ª¥×¥·¥ç¥ó¤â¤¢¤ê¤Þ¤¹¡£\n" + + #: toplev.c:3663 + #, c-format + msgid "\n Options for %s:\n" + msgstr "\n %s ÍÑ¥ª¥×¥·¥ç¥ó:\n" + + #: toplev.c:3700 + msgid "\nTarget specific options:\n" + msgstr "\n¥¿¡¼¥²¥Ã¥È»ÅÍÍ¥ª¥×¥·¥ç¥ó:\n" + + #: toplev.c:3714 toplev.c:3733 + #, c-format + msgid " -m%-23.23s [undocumented]\n" + msgstr " -m%-23.23s [ʸ½ñ²½¤µ¤ì¤Æ¤¤¤Ê¤¤]\n" + + #: toplev.c:3742 + msgid "\nThere are undocumented target specific options as well.\n" + msgstr "\nʸ½ñ²½¤µ¤ì¤Æ¤¤¤Ê¤¤¥¿¡¼¥²¥Ã¥È»ÅÍÍ¥ª¥×¥·¥ç¥ó¤â¤¢¤ê¤Þ¤¹¡£\n" + + #: toplev.c:3744 + msgid " They exist, but they are not documented.\n" + msgstr " ¤³¤ì¤é¤Ï¸ºß¤·¤Þ¤¹¤¬¡¢Ê¸½ñ²½¤µ¤ì¤Æ¤¤¤Þ¤»¤ó\n" + + #: toplev.c:3797 + #, c-format + msgid "unrecognized gcc debugging option: %c" + msgstr "ǧ¼±¤Ç¤­¤Ê¤¤ gcc ¥Ç¥Ð¥Ã¥°¥ª¥×¥·¥ç¥ó: %c" + + #: toplev.c:3867 + #, c-format + msgid "unrecognized register name `%s'" + msgstr "ǧ¼±¤Ç¤­¤Ê¤¤¥ì¥¸¥¹¥¿Ì¾ `%s'" + + #: toplev.c:3892 toplev.c:4746 + #, fuzzy, c-format + msgid "unrecognized option `%s'" + msgstr "ǧ¼±ÉÔǽ¤Ê¥ª¥×¥·¥ç¥ó `-%s'" + + #: toplev.c:3936 + #, fuzzy + msgid "-Wid-clash-LEN is no longer supported" + msgstr "-f%s ¤Ï¤â¤Ï¤ä¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó" + + #: toplev.c:4013 + #, c-format + msgid "use -gdwarf -g%d for DWARF v1, level %d" + msgstr "-gdwarf -g%d ¤ò»ÈÍÑ (DWARF v1, ¥ì¥Ù¥ë %d)" + + #: toplev.c:4016 + msgid "use -gdwarf-2 for DWARF v2" + msgstr "-gdwarf-2 ¤ò»ÈÍÑ (DWARF v2)" + + #: toplev.c:4021 + #, c-format + msgid "ignoring option `%s' due to invalid debug level specification" + msgstr "̵¸ú¤Ê¥Ç¥Ð¥Ã¥°¥ì¥Ù¥ë»ØÄê¤Ë¤è¤ê¡¢¥ª¥×¥·¥ç¥ó `%s' ¤ò̵»ë¤·¤Þ¤¹" + + #: toplev.c:4044 toplev.c:4744 + #, c-format + msgid "`%s': unknown or unsupported -g option" + msgstr "`%s': ÉÔÌÀ¤Þ¤¿¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Ê¤¤ -g ¥ª¥×¥·¥ç¥ó¤Ç¤¹" + + #: toplev.c:4051 + #, c-format + msgid "`%s' ignored, conflicts with `-g%s'" + msgstr "`%s' ¤Ï `-g%s' ¤È¶¥¹ç¤¹¤ë¤¿¤á̵»ë¤µ¤ì¤Þ¤·¤¿" + + #: toplev.c:4130 + msgid "-param option missing argument" + msgstr "-param ¥ª¥×¥·¥ç¥ó¤Ë°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó" + + #: toplev.c:4139 + #, c-format + msgid "invalid --param option: %s" + msgstr "̵¸ú¤Ê --param ¥ª¥×¥·¥ç¥ó: %s" + + #: toplev.c:4151 + #, c-format + msgid "invalid parameter value `%s'" + msgstr "̵¸ú¤Ê¥Ñ¥é¥á¥¿ÃÍ `%s'" + + #: toplev.c:4334 + #, c-format + msgid "" + "%s%s%s version %s (%s)\n" + "%s\tcompiled by GNU C version %s.\n" + "%s%s%s version %s (%s) compiled by CC.\n" + msgstr "" + "%s%s%s version %s (%s)\n" + "%s\tcompiled by GNU C version %s.\n" + "%s%s%s version %s (%s) compiled by CC.\n" + + #: toplev.c:4390 + msgid "options passed: " + msgstr "ÅϤµ¤ì¤¿¥ª¥×¥·¥ç¥ó: " + + #: toplev.c:4419 + msgid "options enabled: " + msgstr "Í­¸ú¥ª¥×¥·¥ç¥ó: " + + #: toplev.c:4478 + #, c-format + msgid "can't open %s for writing" + msgstr "%s ¤ò½ñ¤­¹þ¤ßÍѤ˳«¤±¤Þ¤»¤ó¤Ç¤·¤¿" + + #: toplev.c:4736 + #, fuzzy, c-format + msgid "ignoring command line option '%s'" + msgstr "¥³¥Þ¥ó¥É¥é¥¤¥ó¥ª¥×¥·¥ç¥ó '%s' ¤ò̵»ë¤·¤Þ¤¹" + + #: toplev.c:4739 + #, fuzzy, c-format + msgid "(it is valid for %s but not the selected language)" + msgstr "(%s ÍѤȤ·¤Æ¤ÏÀµ¾ï¤Ç¤¹¤¬¡¢ÁªÂò¤µ¤ì¤¿¸À¸ì¤È¤·¤Æ¤Ï̵¸ú¤Ç¤¹)" + + #: toplev.c:4768 + msgid "-Wuninitialized is not supported without -O" + msgstr "-Wuninitialized ¤Ï -O ̵¤·¤Ë¤Ï¼õ¤±Æþ¤ì¤é¤ì¤Þ¤»¤ó" + + #: toplev.c:4824 + msgid "instruction scheduling not supported on this target machine" + msgstr "Ì¿Î᥹¥±¥¸¥å¡¼¥ê¥ó¥°¤Ï¤³¤Î¥¿¡¼¥²¥Ã¥È¥Þ¥·¥ó¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó" + + #: toplev.c:4828 + msgid "this target machine does not have delayed branches" + msgstr "¤³¤Î¥¿¡¼¥²¥Ã¥È¥Þ¥·¥ó¤ÏÃÙ±äʬ´ô¤ò»ý¤Ã¤Æ¤¤¤Þ¤»¤ó" + + #: toplev.c:4837 + msgid "profiling does not work without a frame pointer" + msgstr "¥×¥í¥Õ¥¡¥¤¥ë¤Ï¥Õ¥ì¡¼¥à¥Ý¥¤¥ó¥¿¤Ê¤·¤Ç¤Ïưºî¤·¤Þ¤»¤ó" + + #: toplev.c:4852 + #, c-format + msgid "-f%sleading-underscore not supported on this target machine" + msgstr "-f%sleading-underscore ¤Ï¤³¤Î¥¿¡¼¥²¥Ã¥È¥Þ¥·¥ó¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó" + + #: toplev.c:4915 + #, fuzzy + msgid "-ffunction-sections not supported for this target" + msgstr "-ffunction-sections ¤Ï¤³¤Î¥¿¡¼¥²¥Ã¥È¤Ç¼õ¤±Æþ¤ì¤é¤ì¤Þ¤»¤ó" + + #: toplev.c:4920 + #, fuzzy + msgid "-fdata-sections not supported for this target" + msgstr "-fdata-sections ¤Ï¤³¤Î¥¿¡¼¥²¥Ã¥È¤Ç¼õ¤±Æþ¤ì¤é¤ì¤Þ¤»¤ó" + + #: toplev.c:4927 + #, fuzzy + msgid "-ffunction-sections disabled; it makes profiling impossible" + msgstr "-ffunction-sections ¤¬Ìµ¸ú¤Ç¤¹ -- ¥×¥í¥Õ¥¡¥¤¥ë¤ÏÉÔ²Äǽ¤Ç¤¹" + + #: toplev.c:4934 + #, fuzzy + msgid "-fprefetch-loop-arrays not supported for this target" + msgstr "-fdata-sections ¤Ï¤³¤Î¥¿¡¼¥²¥Ã¥È¤Ç¼õ¤±Æþ¤ì¤é¤ì¤Þ¤»¤ó" + + #: toplev.c:4940 + #, fuzzy + msgid "-fprefetch-loop-arrays not supported for this target (try -march switches)" + msgstr "-f%sleading-underscore ¤Ï¤³¤Î¥¿¡¼¥²¥Ã¥È¥Þ¥·¥ó¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó" + + #: toplev.c:4947 + #, fuzzy + msgid "-ffunction-sections may affect debugging on some targets" + msgstr "-ffunction-sections ¤Ï¥¿¡¼¥²¥Ã¥È¤Ë¤è¤Ã¤Æ¤Ï¥Ç¥Ð¥Ã¥°¤Ë±Æ¶Á¤¹¤ë¤«¤â¤·¤ì¤Þ¤»¤ó" + + #: toplev.c:5068 + #, c-format + msgid "error writing to %s" + msgstr "%s ¤Ø¤Î½ñ¤­¹þ¤ß¥¨¥é¡¼¤Ç¤¹" + + #: toplev.c:5070 java/jcf-parse.c:982 + #, c-format + msgid "error closing %s" + msgstr "¥¨¥é¡¼¤Ë¤è¤ê %s ¤òÊĤ¸¤Þ¤¹" + + #. It's a float since it contains a point. + #: tradcif.y:231 + msgid "floating point numbers not allowed in #if expressions" + msgstr "#if ¼°¤ÎÃæ¤Ç¤ÎÉâÆ°¾®¿ôÅÀ¿ô¤Ïµö²Ä¤µ¤ì¤Þ¤»¤ó" + + #: tradcif.y:277 + #, fuzzy + msgid "invalid number in #if expression" + msgstr "#if ¼°¤ÎÃæ¤Ë̵¸ú¤Ê¿ôÃÍ" + + #: tradcif.y:358 + #, fuzzy + msgid "invalid character constant in #if" + msgstr "̵¸ú¤Êʸ»úÄê¿ô¤¬ #if ¤Ë¤¢¤ê¤Þ¤¹" + + #: tradcif.y:395 + msgid "double quoted strings not allowed in #if expressions" + msgstr "Æó½Å¤Ë¥¯¥©¡¼¥È¤µ¤ì¤¿Ê¸»úÎó¤Ï #if ¼°Æâ¤Ç¤Ï»È¤¨¤Þ¤»¤ó" + + #: tradcif.y:408 + #, fuzzy + msgid "invalid token in expression" + msgstr "̵¸ú¤Ê¥È¡¼¥¯¥ó¤¬¼°¤Ë¤¢¤ê¤Þ¤¹" + + #: tradcif.y:499 + msgid "octal character constant does not fit in a byte" + msgstr "8 ¿Ê¿ôʸ»úÄê¿ô¤¬ 1 ¥Ð¥¤¥È¤Ë¼ý¤Þ¤ê¤Þ¤»¤ó" + + #: tradcif.y:520 + msgid "hex character constant does not fit in a byte" + msgstr "16 ¿Ê¿ôʸ»úÄê¿ô¤¬ 1 ¥Ð¥¤¥È¤Ë¼ý¤Þ¤ê¤Þ¤»¤ó" + + #: tradcif.y:551 + msgid "empty #if expression" + msgstr "¶õ¤Î #if ¼°¤Ç¤¹" + + #: tradcif.y:565 + msgid "Junk after end of expression." + msgstr "¼°¤Î½ª¤ê°Ê¹ß¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹" + + #: tradcpp.c:138 + msgid "macro or #include recursion too deep" + msgstr "¥Þ¥¯¥í¤Þ¤¿¤Ï #include ¤ÎºÆµ¢¤¬¿¼¤¹¤®¤Þ¤¹" + + #: tradcpp.c:555 + #, fuzzy, c-format + msgid "usage: %s [switches] input output" + msgstr "»È¤¤Êý: %s [¥¹¥¤¥Ã¥Á] ÆþÎÏ ½ÐÎÏ" + + #: tradcpp.c:571 + msgid "-traditional is not supported in C++" + msgstr "-traditional ¤Ï C++ ¤Ç¤Ï¼õ¤±ÉÕ¤±¤é¤ì¤Þ¤»¤ó" + + #: tradcpp.c:573 + msgid "-traditional and -ansi are mutually exclusive" + msgstr "-traditional ¤È -ansi ¤È¤ÏÁê¸ßÇÓ¾Ū¤Ç¤¹" + + #: tradcpp.c:587 + #, fuzzy + msgid "filename missing after -i option" + msgstr "-i ¥ª¥×¥·¥ç¥ó¤Î¸å¤í¤Î¥Õ¥¡¥¤¥ë̾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: tradcpp.c:605 + #, fuzzy + msgid "filename missing after -o option" + msgstr "-o ¥ª¥×¥·¥ç¥ó¤Î¸å¤í¤Î¥Õ¥¡¥¤¥ë̾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: tradcpp.c:664 + #, fuzzy, c-format + msgid "target missing after %s option" + msgstr "%s ¥ª¥×¥·¥ç¥ó¤Î¸å¤í¤Î¥¿¡¼¥²¥Ã¥È¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: tradcpp.c:678 + #, fuzzy, c-format + msgid "filename missing after %s option" + msgstr "%s ¥ª¥×¥·¥ç¥ó¤Î¸å¤í¤Î¥Õ¥¡¥¤¥ë̾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: tradcpp.c:703 + #, fuzzy, c-format + msgid "macro name missing after -%c option" + msgstr "-%c ¥ª¥×¥·¥ç¥ó¤Î¸å¤í¤Î¥Þ¥¯¥í̾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: tradcpp.c:723 + msgid "-pedantic and -traditional are mutually exclusive" + msgstr "-pedantic ¤È -traditional ¤È¤ÏÁê¸ßÇÓ¾Ū¤Ç¤¹" + + #: tradcpp.c:728 + msgid "-trigraphs and -traditional are mutually exclusive" + msgstr "-trigraphs ¤È -traditional ¤È¤ÏÁê¸ßÇÓ¾Ū¤Ç¤¹" + + #: tradcpp.c:754 + #, fuzzy + msgid "directory name missing after -I option" + msgstr "-I ¥ª¥×¥·¥ç¥ó¤Î¸å¤í¤Î¥Ç¥£¥ì¥¯¥È¥ê̾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: tradcpp.c:1434 tradcpp.c:3926 + msgid "`/*' within comment" + msgstr "`/*' ¤¬¥³¥á¥ó¥ÈÆâ¤Ë¤¢¤ê¤Þ¤¹" + + #: tradcpp.c:1810 + #, c-format + msgid "unterminated #%s conditional" + msgstr "½ªÃ¼¤Î¤Ê¤¤ #%s ¾ò·ï" + + #: tradcpp.c:2169 + msgid "not in any file?!" + msgstr "Á´¤¯¥Õ¥¡¥¤¥ë¤¬¤Ê¤¤?!" + + #: tradcpp.c:2275 + msgid "`defined' must be followed by ident or (ident)" + msgstr "`defined' ¤Î¸å¤í¤Ë ident ¤ä (ident) ¤¬¤³¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: tradcpp.c:2279 + msgid "cccp error: invalid special hash type" + msgstr "cccp ¥¨¥é¡¼: ÆÃ¼ì¥Ï¥Ã¥·¥å·¿¤¬Ìµ¸ú¤Ç¤¹" + + #: tradcpp.c:2377 tradcpp.c:2447 + msgid "#include expects \"fname\" or " + msgstr "#include ¤Î¸å¤Ë¤Ï \"fname\" ¤ä ¤¬É¬ÍפǤ¹" + + #: tradcpp.c:2532 + #, fuzzy, c-format + msgid "no include path in which to find %.*s" + msgstr "%.*s ¤¬¸«¤Ä¤«¤ë¥¤¥ó¥¯¥ë¡¼¥É¥Ñ¥¹¤¬¤¢¤ê¤Þ¤»¤ó" + + #: tradcpp.c:2710 + msgid "invalid macro name" + msgstr "̵¸ú¤Ê¥Þ¥¯¥í̾" + + #: tradcpp.c:2718 + #, c-format + msgid "invalid macro name `%s'" + msgstr "̵¸ú¤Ê¥Þ¥¯¥í̾ `%s'" + + #: tradcpp.c:2723 + msgid "\"defined\" cannot be used as a macro name" + msgstr "\"defined\" ¤ò¥Þ¥¯¥í̾¤È¤·¤Æ¤Ï»È¤¨¤Þ¤»¤ó" + + #: tradcpp.c:2750 + msgid "parameter name starts with a digit in #define" + msgstr "#define Ãæ¤Î²¾°ú¿ô̾¤¬¿ô»ú¤Ç»Ï¤Þ¤Ã¤Æ¤¤¤Þ¤¹" + + #: tradcpp.c:2760 + msgid "badly punctuated parameter list in #define" + msgstr "#define Ãæ¤Î²¾°ú¿ô¥ê¥¹¥È¤¬ÊѤ˶èÀÚ¤é¤ì¤Þ¤·¤¿" + + #: tradcpp.c:2768 + msgid "unterminated parameter list in #define" + msgstr "#define Ãæ¤Î²¾°ú¿ô¥ê¥¹¥È¤¬½ªÃ¼¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: tradcpp.c:2816 + #, c-format + msgid "\"%.*s\" redefined" + msgstr "\"%.*s\" ¤¬ºÆÄêµÁ¤µ¤ì¤Þ¤·¤¿" + + #: tradcpp.c:3073 + msgid "# operator should be followed by a macro argument name" + msgstr "# ±é»»»Ò¤Î¸å¤í¤Ë¤Ï¥Þ¥¯¥í°ú¿ô̾¤¬Â³¤¤¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: tradcpp.c:3120 tradcpp.c:3146 tradcpp.c:3160 tradcpp.c:3167 tradcpp.c:3192 + msgid "invalid format #line command" + msgstr "#line ¥³¥Þ¥ó¥É¤Î½ñ¼°¤¬Ìµ¸ú¤Ç¤¹" + + #: tradcpp.c:3218 + msgid "undefining `defined'" + msgstr "`defined' ¤ò undef ¤·¤Þ¤¹" + + #: tradcpp.c:3222 + #, c-format + msgid "undefining `%s'" + msgstr "`%s' ¤ò undef ¤·¤Þ¤¹" + + #: tradcpp.c:3278 + msgid "extra text at end of directive" + msgstr "¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î½ª¤ê¤Ë;ʬ¤Ê¥Æ¥¯¥¹¥È¤¬¤¢¤ê¤Þ¤¹" + + #: tradcpp.c:3385 + #, c-format + msgid "#error%.*s" + msgstr "#error%.*s" + + #: tradcpp.c:3395 + #, c-format + msgid "#warning%.*s" + msgstr "#warning%.*s" + + #: tradcpp.c:3551 + msgid "#elif not within a conditional" + msgstr "#elif ¤¬¾ò·ïʸ¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤ó" + + #: tradcpp.c:3808 + #, c-format + msgid "#%s not within a conditional" + msgstr "#%s ¤¬¾ò·ïʸ¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤ó" + + #: tradcpp.c:3816 + msgid "#else or #elif after #else" + msgstr "#else ¤Î¸å¤í¤Ë #else ¤ä #elif ¤¬¤¢¤ê¤Þ¤¹" + + #: tradcpp.c:3856 + msgid "#else not within a conditional" + msgstr "#else ¤¬¾ò·ïʸ¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤ó" + + #: tradcpp.c:3887 + msgid "unbalanced #endif" + msgstr "Âбþ¤·¤Æ¤¤¤Ê¤¤ #endif" + + #: tradcpp.c:3981 + msgid "unterminated string or character constant" + msgstr "½ªÃ¼¤µ¤ì¤Æ¤¤¤Ê¤¤Ê¸»úÎóÄê¿ôËô¤Ïʸ»úÄê¿ô" + + #: tradcpp.c:4139 + #, c-format + msgid "arguments given to macro `%s'" + msgstr "¥Þ¥¯¥í `%s' ¤Ë°ú¿ô¤¬Í¿¤¨¤é¤ì¤Þ¤·¤¿" + + #: tradcpp.c:4145 + #, c-format + msgid "no args to macro `%s'" + msgstr "¥Þ¥¯¥í `%s' ¤Ø¤Î°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó" + + #: tradcpp.c:4147 + #, c-format + msgid "only 1 arg to macro `%s'" + msgstr "¥Þ¥¯¥í `%s' ¤Ø¤Î°ú¿ô¤¬°ì¸Ä¤·¤«¤¢¤ê¤Þ¤»¤ó" + + #: tradcpp.c:4149 + #, c-format + msgid "only %d args to macro `%s'" + msgstr "%d ¸Ä¤Î°ú¿ô¤·¤«¥Þ¥¯¥í `%s' ¤ËÅϤ·¤Æ¤¤¤Þ¤»¤ó" + + #: tradcpp.c:4151 + #, c-format + msgid "too many (%d) args to macro `%s'" + msgstr "°ú¿ô¤Î¿ô (%d) ¤¬¥Þ¥¯¥í `%s' ¤ËÂФ·¤ÆÂ¿¤¹¤®¤Þ¤¹" + + #: tradcpp.c:4748 + #, fuzzy, c-format + msgid "" + "internal error in %s, at tradcpp.c:%d\n" + "Please submit a full bug report.\n" + "See %s for instructions." + msgstr "" + "%s ¤ÇÆâÉô¥¨¥é¡¼¡¢(tradcpp.c:%d)\n" + "´°Á´¤Ê¥Ð¥°¥ì¥Ý¡¼¥È¤òÁ÷¤Ã¤Æ¤¯¤À¤µ¤¤¡£\n" + "%s ¤Ç¤½¤Î¼ê½ç¤ò¸«¤Æ¤¯¤À¤µ¤¤" + + #: tree-dump.c:841 + #, c-format + msgid "could not open dump file `%s'" + msgstr "¥À¥ó¥×¥Õ¥¡¥¤¥ë %s ¤ò³«¤±¤Þ¤»¤ó¤Ç¤·¤¿" + + #: tree-dump.c:917 + #, fuzzy, c-format + msgid "ignoring unknown option `%.*s' in `-f%s'" + msgstr "`%s'(`-f%s' ¤Î½ª¤ê¤Ë¤¢¤ë) ¤ò̵»ë¤·¤Þ¤¹" + + #: tree.c:3841 + msgid "arrays of functions are not meaningful" + msgstr "´Ø¿ô¤ÎÇÛÎó¤Ï°ÕÌ£¤¬¤¢¤ê¤Þ¤»¤ó" + + #: tree.c:3898 + msgid "function return type cannot be function" + msgstr "´Ø¿ô¤ÎÊÖ¤¹·¿¤¬´Ø¿ô¤Ç¤¢¤Ã¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó" + + #: tree.c:4642 + msgid "invalid initializer for bit string" + msgstr "̵¸ú¤Ê¥Ó¥Ã¥ÈÎó½é´ü²½»Ò¤Ç¤¹" + + #: tree.c:4701 + #, fuzzy, c-format + msgid "tree check: expected %s, have %s in %s, at %s:%d" + msgstr "Tree ¸¡ºº: %s ¤¬¤¢¤ë¤Ù¤­½ê¤Ë %s ¤¬¤¢¤ê¤Þ¤¹(%s Æâ, %s:%d)" + + #: tree.c:4718 + #, fuzzy, c-format + msgid "tree check: expected class '%c', have '%c' (%s) in %s, at %s:%d" + msgstr "Tree ¸¡ºº: ¥¯¥é¥¹ '%c' ¤Î¤Ï¤º¤¬ '%c' (%s) ¤Ç¤¹(%s Æâ, %s:%d)" + + #: varasm.c:452 config/i386/winnt.c:522 + #, c-format + msgid "%s causes a section type conflict" + msgstr "%s ¤Ï¥»¥¯¥·¥ç¥ó¥¿¥¤¥×¤Î¶¥¹ç¤ò°ú¤­µ¯¤³¤·¤Þ¤¹" + + #: varasm.c:880 + #, c-format + msgid "register name not specified for `%s'" + msgstr "¥ì¥¸¥¹¥¿Ì¾¤¬ `%s' ÍѤ˻ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: varasm.c:882 + #, c-format + msgid "invalid register name for `%s'" + msgstr "`%s' ¤ËÂФ¹¤ë¥ì¥¸¥¹¥¿Ì¾¤È¤·¤ÆÌµ¸ú¤Ç¤¹" + + #: varasm.c:885 + #, c-format + msgid "data type of `%s' isn't suitable for a register" + msgstr "`%s' ¤Î¥Ç¡¼¥¿·¿¤Ï register ¤Ë¤Ï¤Õ¤µ¤ï¤·¤¯¤¢¤ê¤Þ¤»¤ó" + + #: varasm.c:888 + #, c-format + msgid "register specified for `%s' isn't suitable for data type" + msgstr "`%s' ¤Ë»ØÄꤵ¤ì¤¿ register ¤Ï¥Ç¡¼¥¿·¿¤Ë¤Õ¤µ¤ï¤·¤¯¤¢¤ê¤Þ¤»¤ó" + + #: varasm.c:897 + msgid "global register variable has initial value" + msgstr "Âç°è register ÊÑ¿ô¤¬½é´üÃͤò»ý¤Ã¤Æ¤¤¤Þ¤¹" + + #: varasm.c:900 + msgid "volatile register variables don't work as you might wish" + msgstr "volatile register ÊÑ¿ô¤Ï°Õ¿Þ¤·¤¿¤è¤¦¤Ë¤Ïưºî¤·¤Þ¤»¤ó" + + #: varasm.c:936 + #, c-format + msgid "register name given for non-register variable `%s'" + msgstr "¥ì¥¸¥¹¥¿Ì¾¤¬Èó register ÊÑ¿ô `%s' ¤ËÍ¿¤¨¤é¤ì¤Þ¤·¤¿" + + #: varasm.c:1543 + #, c-format + msgid "size of variable `%s' is too large" + msgstr "ÊÑ¿ô `%s' ¤Î¥µ¥¤¥º¤¬Â礭¤¹¤®¤Þ¤¹" + + #: varasm.c:1583 + #, fuzzy, c-format + msgid "alignment of `%s' is greater than maximum object file alignment. Using %d" + msgstr "`%s' ¤Î¥¢¥é¥¤¥ó¥á¥ó¥È¤Ï¥ª¥Ö¥¸¥§¥¯¥È¥Õ¥¡¥¤¥ë¤ÎºÇÂçÃͤè¤ê¤âÂ礭¤¤¤Ç¤¹¡£ %d ¤ò»È¤¤¤Þ¤¹¡£" + + #: varasm.c:1634 + #, fuzzy, c-format + msgid "requested alignment for %s is greater than implemented alignment of %d" + msgstr "%s ¤ËÍ׵ᤵ¤ì¤¿¥¢¥é¥¤¥ó¥á¥ó¥È¤Ï¼ÂÁõ¤µ¤ì¤¿¥¢¥é¥¤¥ó¥á¥ó¥È %d ¤è¤êÂ礭¤¤¤Ç¤¹" + + #: varasm.c:2120 + msgid "floating point trap outputting a constant" + msgstr "ÉâÆ°¾®¿ôÅÀ¤Î¨Ãͤò½ÐÎϤ¹¤ëºÝ¤Ë¥È¥é¥Ã¥×¤¬¤«¤«¤ê¤Þ¤·¤¿" + + #: varasm.c:4454 + msgid "initializer for integer value is too complicated" + msgstr "À°¿ô¤Î½é´üÀßÄê»Ò¤ÎÃͤ¬Ê£»¨¤¹¤®¤Þ¤¹" + + #: varasm.c:4459 + msgid "initializer for floating value is not a floating constant" + msgstr "ÉâÆ°¾®¿ôÅÀ¿ô¤Î½é´üÀßÄê»Ò¤ÎÃͤ¬¡¢ÉâÆ°¾®¿ôÅÀÄê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: varasm.c:4508 + msgid "unknown set constructor type" + msgstr "ÉÔÌÀ¤ÊÀßÄêºÑ¥³¥ó¥¹¥È¥é¥¯¥¿·¿¤Ç¤¹" + + #: varasm.c:4722 + #, c-format + msgid "invalid initial value for member `%s'" + msgstr "¥á¥ó¥Ð `%s' ¤ËÂФ¹¤ë̵¸ú¤Ê½é´üÃÍ" + + #: varasm.c:4914 + #, c-format + msgid "weak declaration of `%s' must be public" + msgstr "`%s' ¤Î weak Àë¸À¤Ï public ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: varasm.c:4916 + #, c-format + msgid "weak declaration of `%s' must precede definition" + msgstr "`%s' ¤Î weak Àë¸À¤ÏÄêµÁ¤è¤ê¤âÀè¤Ë¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: varasm.c:4920 + #, fuzzy, c-format + msgid "weak declaration of `%s' not supported" + msgstr "`%s' ¤Î weak Àë¸À¤Ï public ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: varasm.c:5016 + msgid "only weak aliases are supported in this configuration" + msgstr "¸½ºß¤ÎÀßÄê¤Ç¤Ï weak alias ¤·¤«¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó" + + #: varasm.c:5021 + msgid "alias definitions not supported in this configuration; ignored" + msgstr "¸½ºß¤ÎÀßÄê¤Ç¤Ï alias ÄêµÁ¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó -- ̵»ë¤µ¤ì¤Þ¤·¤¿" + + #: varray.c:88 + #, fuzzy, c-format + msgid "virtual array %s[%lu]: element %lu out of bounds in %s, at %s:%d" + msgstr "²¾Áۥơ¼¥Ö¥ë %s[%lu]: Í×ÁÇ %lu ¤¬Èϰϳ°¤Ç¤¹" + + #. Print an error message for unrecognized stab codes. + #: xcoffout.c:170 + #, fuzzy, c-format + msgid "no sclass for %s stab (0x%x)\n" + msgstr "%s ¥¹¥¿¥ÖÍѤΠsclass ¤¬¤¢¤ê¤Þ¤»¤ó (0x%x)\n" + + #: config/darwin-c.c:76 + msgid "too many #pragma options align=reset" + msgstr "" + + #: config/darwin-c.c:98 config/darwin-c.c:101 config/darwin-c.c:103 + #: config/darwin-c.c:105 + #, fuzzy + msgid "malformed '#pragma options', ignoring" + msgstr "¤ª¤«¤·¤Ê #pragma map¡¢Ìµ»ë¤µ¤ì¤Þ¤·¤¿" + + #: config/darwin-c.c:108 + #, fuzzy + msgid "junk at end of '#pragma options'" + msgstr "'#pragma %s' ¤ÎºÇ¸å¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹" + + #: config/darwin-c.c:118 + msgid "malformed '#pragma options align={mac68k|power|reset}', ignoring" + msgstr "" + + #: config/darwin-c.c:131 + #, fuzzy + msgid "missing '(' after '#pragma unused', ignoring" + msgstr "½Ò¸ì¤Î¸å¤í¤Î '(' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: config/darwin-c.c:149 + #, fuzzy + msgid "missing ')' after '#pragma unused', ignoring" + msgstr "½Ò¸ì¤Î¸å¤í¤Î '(' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: config/darwin-c.c:152 + #, fuzzy + msgid "junk at end of '#pragma unused'" + msgstr "'#pragma %s' ¤ÎºÇ¸å¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹" + + #: config/lynx-ng.h:97 config/lynx.h:120 config/rs6000/lynx.h:85 + msgid "-msystem-v and -p are incompatible" + msgstr "-msystem-v ¤È -p ¤Ï¸ß´¹À­¤¬¤¢¤ê¤Þ¤»¤ó" + + #: config/lynx-ng.h:99 config/lynx.h:122 config/rs6000/lynx.h:87 + msgid "-msystem-v and -mthreads are incompatible" + msgstr "-msystem-v ¤È -mthreads ¤Ï¸ß´¹À­¤¬¤¢¤ê¤Þ¤»¤ó" + + #: config/nextstep.c:68 + msgid "optimization turned on" + msgstr "ºÇŬ²½¤òÍ­¸ú¤Ë¤¹¤ë" + + #: config/nextstep.c:74 + msgid "optimization turned off" + msgstr "ºÇŬ²½¤ò̵¸ú¤Ë¤¹¤ë" + + #: config/nextstep.c:83 + msgid "optimization level restored" + msgstr "ºÇŬ²½¥ì¥Ù¥ë¤ò¸µ¤ËÌᤷ¤Þ¤·¤¿" + + #. Run-time compilation parameters selecting different hardware subsets. + #: config/1750a/1750a.h:39 + msgid "Use VAX-C alignment" + msgstr "VAX-C ¥¢¥é¥¤¥ó¥á¥ó¥È¤ò»ÈÍÑ" + + #: config/a29k/a29k.c:1028 + #, c-format + msgid "invalid %%Q value" + msgstr "̵¸ú¤Ê %%Q ÃÍ" + + #: config/a29k/a29k.c:1034 config/alpha/alpha.c:5145 + #, c-format + msgid "invalid %%C value" + msgstr "̵¸ú¤Ê %%C ÃÍ" + + #: config/a29k/a29k.c:1040 config/alpha/alpha.c:4990 + #: config/rs6000/rs6000.c:5690 + #, c-format + msgid "invalid %%N value" + msgstr "̵¸ú¤Ê %%N ÃÍ" + + #: config/a29k/a29k.c:1046 config/alpha/alpha.c:5061 + #: config/rs6000/rs6000.c:5652 + #, c-format + msgid "invalid %%M value" + msgstr "̵¸ú¤Ê %%M ÃÍ" + + #: config/a29k/a29k.c:1052 config/alpha/alpha.c:5053 + #: config/rs6000/rs6000.c:5617 + #, c-format + msgid "invalid %%m value" + msgstr "̵¸ú¤Ê %%m ÃÍ" + + #: config/a29k/a29k.c:1154 config/alpha/alpha.c:5014 config/romp/romp.c:690 + #, c-format + msgid "invalid %%L value" + msgstr "̵¸ú¤Ê %%L ÃÍ" + + #: config/a29k/a29k.c:1159 config/rs6000/rs6000.c:5698 + #, c-format + msgid "invalid %%O value" + msgstr "̵¸ú¤Ê %%O ÃÍ" + + #: config/a29k/a29k.c:1165 config/alpha/alpha.c:4998 + #: config/rs6000/rs6000.c:5718 + #, c-format + msgid "invalid %%P value" + msgstr "̵¸ú¤Ê %%P ÃÍ" + + #: config/a29k/a29k.c:1175 + #, c-format + msgid "invalid %%V value" + msgstr "̵¸ú¤Ê %%V ÃÍ" + + #: config/a29k/a29k.h:101 + msgid "Generate code assuming DW bit is set" + msgstr "DW ¥Ó¥Ã¥È¤¬¥»¥Ã¥È¤µ¤ì¤¿¤È¸«¤Ê¤·¤Æ¥³¡¼¥ÉÀ¸À®" + + #: config/a29k/a29k.h:102 + msgid "Generate code assuming DW bit is not set" + msgstr "DW ¥Ó¥Ã¥È¤¬¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¤È¸«¤Ê¤·¤Æ¥³¡¼¥ÉÀ¸À®" + + #: config/a29k/a29k.h:103 + msgid "Generate code using byte writes" + msgstr "¥Ð¥¤¥È½ñ¤­¹þ¤ß¤ò»È¤Ã¤Æ¥³¡¼¥ÉÀ¸À®" + + #: config/a29k/a29k.h:104 + msgid "Do not generate byte writes" + msgstr "¥Ð¥¤¥È½ñ¤­¹þ¤ß¤ò»È¤ï¤º¤Ë¥³¡¼¥ÉÀ¸À®" + + #: config/a29k/a29k.h:105 + msgid "Use small memory model" + msgstr "¥¹¥â¡¼¥ë¥á¥â¥ê¥â¥Ç¥ë¤òÍøÍÑ" + + #: config/a29k/a29k.h:106 + msgid "Use normal memory model" + msgstr "¥Î¡¼¥Þ¥ë¥á¥â¥ê¥â¥Ç¥ë¤òÍøÍÑ" + + #: config/a29k/a29k.h:107 + msgid "Use large memory model" + msgstr "¥é¡¼¥¸¥á¥â¥ê¥â¥Ç¥ë¤òÍøÍÑ" + + #: config/a29k/a29k.h:108 + msgid "Generate 29050 code" + msgstr "29050 ¥³¡¼¥É¤òÀ¸À®" + + #: config/a29k/a29k.h:109 + msgid "Generate 29000 code" + msgstr "29000 ¥³¡¼¥É¤òÀ¸À®" + + #: config/a29k/a29k.h:110 + msgid "Use kernel global registers" + msgstr "¥«¡¼¥Í¥ë¥°¥í¡¼¥Ð¥ë¥ì¥¸¥¹¥¿¤òÍøÍÑ" + + #: config/a29k/a29k.h:111 + msgid "Use user global registers" + msgstr "¥æ¡¼¥¶¥°¥í¡¼¥Ð¥ë¥ì¥¸¥¹¥¿¤òÍøÍÑ" + + #: config/a29k/a29k.h:112 + msgid "Emit stack checking code" + msgstr "¥¹¥¿¥Ã¥¯¥Á¥§¥Ã¥¯ÍÑ¥³¡¼¥É¤òÅǤ¯" + + #: config/a29k/a29k.h:113 + msgid "Do not emit stack checking code" + msgstr "¥¹¥¿¥Ã¥¯¥Á¥§¥Ã¥¯ÍÑ¥³¡¼¥É¤òÅǤ«¤Ê¤¤" + + #: config/a29k/a29k.h:114 + msgid "Work around storem hardware bug" + msgstr "storem ¥Ï¡¼¥É¥¦¥§¥¢¥Ð¥°¤ÎÂнè¤ò¹Ô¤Ê¤¦" + + #: config/a29k/a29k.h:115 + msgid "Do not work around storem hardware bug" + msgstr "storem ¥Ï¡¼¥É¥¦¥§¥¢¥Ð¥°¤ÎÂнè¤ò¹Ô¤Ê¤ï¤Ê¤¤" + + #: config/a29k/a29k.h:116 + msgid "Store locals in argument registers" + msgstr "°ú¿ô¥ì¥¸¥¹¥¿¤Ë¥í¡¼¥«¥ë¤Î¤â¤Î¤ò³ÊǼ¤¹¤ë" + + #: config/a29k/a29k.h:117 + msgid "Do not store locals in arg registers" + msgstr "°ú¿ô¥ì¥¸¥¹¥¿¤Ë¥í¡¼¥«¥ë¤Î¤â¤Î¤ò³ÊǼ¤·¤Ê¤¤" + + #: config/a29k/a29k.h:118 config/i960/i960.h:289 config/mips/mips.h:408 + msgid "Use software floating point" + msgstr "¥½¥Õ¥ÈÉâÆ°¾®¿ôÅÀ¤òÍøÍѤ¹¤ë" + + #: config/a29k/a29k.h:119 + msgid "Do not generate multm instructions" + msgstr "multm Ì¿Îá¤òÀ¸À®¤·¤Ê¤¤" + + #: config/alpha/alpha.c:269 + #, fuzzy, c-format + msgid "-f%s ignored for Unicos/Mk (not supported)" + msgstr "-f%s ¤Ï 68HC11/68HC12 ÍѤȤ·¤Æ¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿ (¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó)" + + #: config/alpha/alpha.c:293 + #, fuzzy + msgid "-mieee not supported on Unicos/Mk" + msgstr "-pipe ¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: config/alpha/alpha.c:304 + msgid "-mieee-with-inexact not supported on Unicos/Mk" + msgstr "" + + #: config/alpha/alpha.c:321 + #, c-format + msgid "bad value `%s' for -mtrap-precision switch" + msgstr "-mtrap-precision ¥¹¥¤¥Ã¥Á¤Ë¤È¤Ã¤Æ¤ÎÉÔÀµ¤ÊÃÍ `%s'" + + #: config/alpha/alpha.c:335 + #, c-format + msgid "bad value `%s' for -mfp-rounding-mode switch" + msgstr "-mfp-rounding-mode ¥¹¥¤¥Ã¥Á¤Ë¤È¤Ã¤Æ¤ÎÉÔÀµ¤ÊÃÍ `%s'" + + #: config/alpha/alpha.c:350 + #, c-format + msgid "bad value `%s' for -mfp-trap-mode switch" + msgstr "-mfp-trap-mode ¥¹¥¤¥Ã¥Á¤Ë¤È¤Ã¤Æ¤ÎÉÔÀµ¤ÊÃÍ `%s'" + + #: config/alpha/alpha.c:369 config/alpha/alpha.c:381 + #, c-format + msgid "bad value `%s' for -mcpu switch" + msgstr "-mcpu ¥¹¥¤¥Ã¥Á¤Ë¤È¤Ã¤Æ¤ÎÉÔÀµ¤ÊÃÍ `%s'" + + #: config/alpha/alpha.c:388 + #, fuzzy + msgid "trap mode not supported on Unicos/Mk" + msgstr "VAX ÉâÆ°¾®¿ô¤Ç¤Ï¥È¥é¥Ã¥×¥â¡¼¥É¤òÍøÍѤǤ­¤Þ¤»¤ó" + + #: config/alpha/alpha.c:395 + msgid "fp software completion requires -mtrap-precision=i" + msgstr "ÉâÆ°¾®¿ôÅÀÊä´°¤Ï -mtrap-precision=i ¤òɬÍפȤ·¤Þ¤¹" + + #: config/alpha/alpha.c:411 + msgid "rounding mode not supported for VAX floats" + msgstr "VAX ÉâÆ°¾®¿ô¤Ç¤Ï´Ý¤á¥â¡¼¥É¤òÍøÍѤǤ­¤Þ¤»¤ó" + + #: config/alpha/alpha.c:416 + msgid "trap mode not supported for VAX floats" + msgstr "VAX ÉâÆ°¾®¿ô¤Ç¤Ï¥È¥é¥Ã¥×¥â¡¼¥É¤òÍøÍѤǤ­¤Þ¤»¤ó" + + #: config/alpha/alpha.c:445 + #, c-format + msgid "L%d cache latency unknown for %s" + msgstr "L%d ¥­¥ã¥Ã¥·¥å¥ì¥¤¥Æ¥ó¥·¤Ï %s ¤Ë¤È¤Ã¤ÆÉÔÌÀ¤Ç¤¹" + + #: config/alpha/alpha.c:460 + #, c-format + msgid "bad value `%s' for -mmemory-latency" + msgstr "`%s' ¤Ï -mmemory-latency ¤Ë¤È¤Ã¤ÆÉÔÀµ¤ÊÃͤǤ¹" + + #: config/alpha/alpha.c:4964 config/romp/romp.c:746 config/romp/romp.c:753 + #, c-format + msgid "invalid %%H value" + msgstr "̵¸ú¤Ê %%H ÃÍ" + + #: config/alpha/alpha.c:4974 config/ia64/ia64.c:3521 + #, c-format + msgid "invalid %%r value" + msgstr "̵¸ú¤Ê %%r ÃÍ" + + #: config/alpha/alpha.c:4984 config/rs6000/rs6000.c:5764 + #, c-format + msgid "invalid %%R value" + msgstr "̵¸ú¤Ê %%R ÃÍ" + + #: config/alpha/alpha.c:5006 config/romp/romp.c:732 config/romp/romp.c:739 + #, c-format + msgid "invalid %%h value" + msgstr "̵¸ú¤Ê %%h ÃÍ" + + #: config/alpha/alpha.c:5096 + #, c-format + msgid "invalid %%U value" + msgstr "̵¸ú¤Ê %%U ÃÍ" + + #: config/alpha/alpha.c:5108 config/alpha/alpha.c:5122 config/romp/romp.c:698 + #: config/rs6000/rs6000.c:5772 + #, c-format + msgid "invalid %%s value" + msgstr "̵¸ú¤Ê %%s ÃÍ" + + #: config/alpha/alpha.c:5182 config/rs6000/rs6000.c:5479 + #, c-format + msgid "invalid %%E value" + msgstr "̵¸ú¤Ê %%E ÃÍ" + + #: config/alpha/alpha.c:5203 config/romp/romp.c:973 + #: config/rs6000/rs6000.c:6080 + #, c-format + msgid "invalid %%xn code" + msgstr "̵¸ú¤Ê %%xn ¥³¡¼¥É" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/alpha/alpha.h:220 config/i386/i386.h:285 config/i386/i386.h:287 + #: config/i386/i386.h:289 config/ns32k/ns32k.h:103 config/rs6000/rs6000.h:327 + #: config/s390/s390.h:51 config/sparc/sparc.h:552 config/sparc/sparc.h:557 + msgid "Use hardware fp" + msgstr "¥Ï¡¼¥É¥¦¥§¥¢ÉâÆ°¾®¿ôÅÀ¤òÍøÍÑ" + + #: config/alpha/alpha.h:221 config/i386/i386.h:286 config/i386/i386.h:288 + #: config/rs6000/rs6000.h:329 config/sparc/sparc.h:554 + #: config/sparc/sparc.h:559 + msgid "Do not use hardware fp" + msgstr "¥Ï¡¼¥É¥¦¥§¥¢ÉâÆ°¾®¿ôÅÀ¤òÍøÍѤ·¤Ê¤¤" + + #: config/alpha/alpha.h:222 + msgid "Use fp registers" + msgstr "ÉâÆ°¾®¿ôÅÀ¥ì¥¸¥¹¥¿¤òÍøÍѤ¹¤ë" + + #: config/alpha/alpha.h:224 + msgid "Do not use fp registers" + msgstr "ÉâÆ°¾®¿ôÅÀ¥ì¥¸¥¹¥¿¤òÍøÍѤ·¤Ê¤¤" + + #: config/alpha/alpha.h:225 + msgid "Do not assume GAS" + msgstr "GAS ¤ÎÍøÍѤòÁ°Äó¤È¤·¤Ê¤¤" + + #: config/alpha/alpha.h:226 + msgid "Assume GAS" + msgstr "GAS ¤ÎÍøÍѤòÁ°Äó¤È¤¹¤ë" + + #: config/alpha/alpha.h:228 + msgid "Request IEEE-conformant math library routines (OSF/1)" + msgstr "IEEE ½àµò¤Î¿ô³Ø¥é¥¤¥Ö¥é¥ê¥ë¡¼¥Á¥ó (OSF/1) ¤òÍ׵᤹¤ë" + + #: config/alpha/alpha.h:230 + msgid "Emit IEEE-conformant code, without inexact exceptions" + msgstr "ÉÔŬÀÚ¤ÊÎã³°¤ò½ü¤¤¤Æ IEEE ½àµò¤Î¥³¡¼¥É¤òȯ¹Ô¤¹¤ë" + + #: config/alpha/alpha.h:232 + msgid "Emit IEEE-conformant code, with inexact exceptions" + msgstr "ÉÔŬÀÚ¤ÊÎã³°¤ò´Þ¤á¤Æ IEEE ½àµò¤Î¥³¡¼¥É¤òȯ¹Ô¤¹¤ë" + + #: config/alpha/alpha.h:234 + msgid "Do not emit complex integer constants to read-only memory" + msgstr "Ê£ÁÇ¿ô¤ÎÀ°¿ôÄê¿ô¤òÆÉ¤ß¹þ¤ßÀìÍÑ¥á¥â¥ê¤ËŸ³«¤µ¤»¤Ê¤¤" + + #: config/alpha/alpha.h:235 + msgid "Use VAX fp" + msgstr "VAX ÉâÆ°¾®¿ôÅÀ¤òÍøÍѤ¹¤ë" + + #: config/alpha/alpha.h:236 + msgid "Do not use VAX fp" + msgstr "VAX ÉâÆ°¾®¿ôÅÀ¤òÍøÍѤ·¤Ê¤¤" + + #: config/alpha/alpha.h:237 + msgid "Emit code for the byte/word ISA extension" + msgstr "¥Ð¥¤¥È/¥ï¡¼¥É ISA ³ÈÄ¥ÍѤΥ³¡¼¥É¤òȯ¹Ô¤¹¤ë" + + #: config/alpha/alpha.h:240 + msgid "Emit code for the motion video ISA extension" + msgstr "¥â¡¼¥·¥ç¥ó¥Ó¥Ç¥ª ISA ³ÈÄ¥ÍѤΥ³¡¼¥É¤òȯ¹Ô¤¹¤ë" + + #: config/alpha/alpha.h:243 + msgid "Emit code for the fp move and sqrt ISA extension" + msgstr "ÉâÆ°¾®¿ôÅÀ move ¤È sqrt ISA ³ÈÄ¥ÍѤΥ³¡¼¥É¤òȯ¹Ô¤¹¤ë" + + #: config/alpha/alpha.h:245 + msgid "Emit code for the counting ISA extension" + msgstr "¥«¥¦¥ó¥È ISA ³ÈÄ¥ÍѤΥ³¡¼¥É¤òȯ¹Ô¤¹¤ë" + + #: config/alpha/alpha.h:248 + msgid "Emit code using explicit relocation directives" + msgstr "" + + #: config/alpha/alpha.h:251 + msgid "Emit 16-bit relocations to the small data areas" + msgstr "" + + #: config/alpha/alpha.h:253 + msgid "Emit 32-bit relocations to the small data areas" + msgstr "" + + #. This macro is similar to `TARGET_SWITCHES' but defines names of + #. command options that have values. Its definition is an initializer + #. with a subgrouping for each command option. + #. + #. Each subgrouping contains a string constant, that defines the fixed + #. part of the option name, and the address of a variable. The + #. variable, type `char *', is set to the variable part of the given + #. option if the fixed part matches. The actual option name is made + #. by appending `-m' to the specified name. + #. + #. Here is an example which defines `-mshort-data-NUMBER'. If the + #. given option is `-mshort-data-512', the variable `m88k_short_data' + #. will be set to the string `"512"'. + #. + #. extern char *m88k_short_data; + #. #define TARGET_OPTIONS { { "short-data-", &m88k_short_data } } + #. For -mcpu= + #. For -mtune= + #. For -mfp-rounding-mode=[n|m|c|d] + #. For -mfp-trap-mode=[n|u|su|sui] + #. For -mtrap-precision=[p|f|i] + #. For -mmemory-latency= + #: config/alpha/alpha.h:298 + msgid "Use features of and schedule given CPU" + msgstr "CPU ¤ËÍ¿¤¨¤é¤ì¤¿ÆÃħ¤ä¥¹¥±¥¸¥å¡¼¥ë¤òÍøÍѤ¹¤ë" + + #: config/alpha/alpha.h:300 + msgid "Schedule given CPU" + msgstr "CPU ¤ËÍ¿¤¨¤é¤ì¤¿¥¹¥±¥¸¥å¡¼¥ë¤òÍøÍѤ¹¤ë" + + #: config/alpha/alpha.h:302 + msgid "Control the generated fp rounding mode" + msgstr "À¸À®¤µ¤ì¤¿ÉâÆ°¾®¿ôÅÀ´Ý¤á¥â¡¼¥É¤òÀ©¸æ¤¹¤ë" + + #: config/alpha/alpha.h:304 + msgid "Control the IEEE trap mode" + msgstr "IEEE ¥È¥é¥Ã¥×¥â¡¼¥É¤òÀ©¸æ¤¹¤ë" + + #: config/alpha/alpha.h:306 + msgid "Control the precision given to fp exceptions" + msgstr "ÉâÆ°¾®¿ôÅÀÎã³°¤ËÍ¿¤¨¤é¤ì¤¿ÀºÅÙ¤òÀ©¸æ¤¹¤ë" + + #: config/alpha/alpha.h:308 + msgid "Tune expected memory latency" + msgstr "ͽ´ü¤µ¤ì¤ë¥á¥â¥ê¥ì¥¤¥Æ¥ó¥·¤òÄ´À°¤¹¤ë" + + #: config/arc/arc.c:132 + #, c-format + msgid "bad value (%s) for -mcpu switch" + msgstr "-mcpu ¥¹¥¤¥Ã¥Á¤ËÂФ¹¤ëÉÔÀµ¤ÊÃÍ (%s)" + + #: config/arc/arc.c:359 + #, fuzzy, c-format + msgid "argument of `%s' attribute is not a string constant" + msgstr "`asm' ¤Î°ú¿ô¤¬Äê¿ôʸ»úÎó¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó " + + #: config/arc/arc.c:366 + #, c-format + msgid "argument of `%s' attribute is not \"ilink1\" or \"ilink2\"" + msgstr "" + + #: config/arc/arc.c:1709 config/m32r/m32r.c:2272 + msgid "invalid operand to %R code" + msgstr "%R ¥³¡¼¥É¤ËÂФ¹¤ë̵¸ú¤Ê¥ª¥Ú¥é¥ó¥É" + + #: config/arc/arc.c:1741 config/m32r/m32r.c:2295 + msgid "invalid operand to %H/%L code" + msgstr "%H/%L ¥³¡¼¥É¤ËÂФ¹¤ë̵¸ú¤Ê¥ª¥Ú¥é¥ó¥É" + + #: config/arc/arc.c:1765 config/m32r/m32r.c:2372 + msgid "invalid operand to %U code" + msgstr "%U ¥³¡¼¥É¤ËÂФ¹¤ë̵¸ú¤Ê¥ª¥Ú¥é¥ó¥É" + + #: config/arc/arc.c:1776 + msgid "invalid operand to %V code" + msgstr "%V ¥³¡¼¥É¤ËÂФ¹¤ë̵¸ú¤Ê¥ª¥Ú¥é¥ó¥É" + + #. Unknown flag. + #: config/arc/arc.c:1783 config/m32r/m32r.c:2411 config/sparc/sparc.c:6007 + msgid "invalid operand output code" + msgstr "̵¸ú¤Ê¥ª¥Ú¥é¥ó¥É½ÐÎÏ¥³¡¼¥É" + + #: config/arm/arm.c:442 + #, c-format + msgid "switch -mcpu=%s conflicts with -march= switch" + msgstr "-mcpu=%s ¥¹¥¤¥Ã¥Á¤Ï -march= ¥¹¥¤¥Ã¥Á¤È¶¥¹ç¤·¤Þ¤¹" + + #: config/arm/arm.c:452 config/rs6000/rs6000.c:440 config/sparc/sparc.c:383 + #, c-format + msgid "bad value (%s) for %s switch" + msgstr "ÃÍ (%s) ¤Ï %s switch ¤Ë¤È¤Ã¤ÆÀµ¤·¤¯¤¢¤ê¤Þ¤»¤ó" + + #: config/arm/arm.c:588 + msgid "target CPU does not support APCS-32" + msgstr "¥¿¡¼¥²¥Ã¥È CPU ¤Ï APCS-32 ¤ò¥µ¥Ý¡¼¥È¤·¤Þ¤»¤ó" + + #: config/arm/arm.c:593 + msgid "target CPU does not support APCS-26" + msgstr "¥¿¡¼¥²¥Ã¥È CPU ¤Ï APCS-26 ¤ò¥µ¥Ý¡¼¥È¤·¤Þ¤»¤ó" + + #: config/arm/arm.c:599 + msgid "target CPU does not support interworking" + msgstr "¥¿¡¼¥²¥Ã¥È CPU ¤Ï interworking ¤ò¥µ¥Ý¡¼¥È¤·¤Þ¤»¤ó" + + #: config/arm/arm.c:605 + #, fuzzy + msgid "target CPU does not support THUMB instructions" + msgstr "¥¿¡¼¥²¥Ã¥È CPU ¤Ï THUMB Ì¿Îá¤ò¥µ¥Ý¡¼¥È¤·¤Þ¤»¤ó" + + #: config/arm/arm.c:619 + #, fuzzy + msgid "enabling backtrace support is only meaningful when compiling for the Thumb" + msgstr "Thumb ÍѤ˥³¥ó¥Ñ¥¤¥ë¤·¤¿¤È¤­¤Î¤ß¡¢°ÕÌ£¤Î¤¢¤ë¥Ð¥Ã¥¯¥È¥ì¡¼¥¹¤òÍ­¸ú¤Ë¤·¤Þ¤¹" + + #: config/arm/arm.c:622 + #, fuzzy + msgid "enabling callee interworking support is only meaningful when compiling for the Thumb" + msgstr "Thumb ÍѤ˥³¥ó¥Ñ¥¤¥ë¤·¤¿¤È¤­¤Î¤ß¡¢Èï¸Æ¤Ó½Ð¤·Â¦ interworking ¤òÍ­¸ú¤Ë¤·¤Þ¤¹" + + #: config/arm/arm.c:625 + #, fuzzy + msgid "enabling caller interworking support is only meaningful when compiling for the Thumb" + msgstr "Thumb ÍѤ˥³¥ó¥Ñ¥¤¥ë¤·¤¿¤È¤­¤Î¤ß¡¢¸Æ¤Ó½Ð¤·Â¦ interworking ¤òÍ­¸ú¤Ë¤·¤Þ¤¹" + + #: config/arm/arm.c:631 + msgid "interworking forces APCS-32 to be used" + msgstr "interworking ¤Ï APCS-32 ¤Î»ÈÍѤò¶¯Íפ·¤Þ¤¹" + + #: config/arm/arm.c:637 + msgid "-mapcs-stack-check incompatible with -mno-apcs-frame" + msgstr "-mapcs-stack-check ¤Ï -mno-apcs-frame ¤È¶¦Â¸¤Ç¤­¤Þ¤»¤ó" + + #: config/arm/arm.c:645 + msgid "-fpic and -mapcs-reent are incompatible" + msgstr "-fpic ¤È -mapcs-reent ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó" + + #: config/arm/arm.c:648 + msgid "APCS reentrant code not supported. Ignored" + msgstr "APCS ºÆÆþ²Äǽ¥³¡¼¥É¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó¡£Ìµ»ë¤µ¤ì¤Þ¤·¤¿" + + #: config/arm/arm.c:656 + msgid "-g with -mno-apcs-frame may not give sensible debugging" + msgstr "-g ¤Ë -mno-apcs-frame ¤ò¤Ä¤±¤ë¤È¡¢¤­¤áºÙ¤«¤Ê¥Ç¥Ð¥Ã¥°¤Ï¤Ç¤­¤Ê¤¤¤Ç¤·¤ç¤¦" + + #: config/arm/arm.c:664 + #, fuzzy + msgid "passing floating point arguments in fp regs not yet supported" + msgstr "ÉâÆ°¾®¿ôÅÀ°ú¿ô¤òÉâÆ°¾®¿ôÅÀ¥ì¥¸¥¹¥¿¤ÇÅϤ¹¤³¤È¤Ï¡¢¤Þ¤À¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó" + + #: config/arm/arm.c:693 + #, fuzzy, c-format + msgid "invalid floating point emulation option: -mfpe-%s" + msgstr "̵¸ú¤ÊÉâÆ°¾®¿ôÅÀ¥¨¥ß¥å¥ì¡¼¥È¥ª¥×¥·¥ç¥ó: -mfpe-%s" + + #: config/arm/arm.c:717 + #, fuzzy + msgid "structure size boundary can only be set to 8 or 32" + msgstr "¹½Â¤ÂΤΥµ¥¤¥º¶­³¦¤Ï 8 Ëô¤Ï 32 ¤Ë¤·¤«ÀßÄê¤Ç¤­¤Þ¤»¤ó" + + #: config/arm/arm.c:725 + msgid "-mpic-register= is useless without -fpic" + msgstr "-mpic-register= ¤Ï -fpic ¤ò¤Ä¤±¤Ê¤¤¤ÈÌò¤ËΩ¤Á¤Þ¤»¤ó" + + #: config/arm/arm.c:734 + #, fuzzy, c-format + msgid "unable to use '%s' for PIC register" + msgstr "'%s' ¤ò PIC ¤Î¥ì¥¸¥¹¥¿¤È¤·¤Æ»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó" + + #: config/arm/arm.c:1969 config/arm/arm.c:1991 config/avr/avr.c:4711 + #: config/c4x/c4x.c:4650 config/h8300/h8300.c:3179 config/i386/i386.c:1249 + #: config/i386/i386.c:1278 config/m68hc11/m68hc11.c:1160 + #: config/mcore/mcore.c:3505 config/ns32k/ns32k.c:1048 + #: config/rs6000/rs6000.c:9981 config/sh/sh.c:4703 config/sh/sh.c:4723 + #: config/sh/sh.c:4762 config/stormy16/stormy16.c:1998 config/v850/v850.c:2044 + #, fuzzy, c-format + msgid "`%s' attribute only applies to functions" + msgstr "`%s' °À­¤Ï´Ø¿ô¤ËÂФ·¤Æ¤Î¤ßŬÍѤµ¤ì¤Þ¤¹" + + #: config/arm/arm.c:9163 + #, fuzzy + msgid "unable to compute real location of stacked parameter" + msgstr "¥¹¥¿¥Ã¥¯¤ËÀѤޤ줿²¾°ú¿ô¤Î¼ÂºÝ¤ÎÎΰè¤ò·×»»¤Ç¤­¤Þ¤»¤ó" + + #: config/arm/arm.c:9839 + msgid "no low registers available for popping high registers" + msgstr "¹â°Ì¥ì¥¸¥¹¥¿¤ò pop ¤¹¤ë°Ù¤Ë»ÈÍѤǤ­¤ëÄã°Ì¥ì¥¸¥¹¥¿¤¬¤¢¤ê¤Þ¤»¤ó" + + #: config/arm/arm.c:10028 + #, fuzzy + msgid "interrupt Service Routines cannot be coded in Thumb mode" + msgstr "Thumb ¥â¡¼¥É¤Ç¤Ï³ä¤ê¹þ¤ß¥µ¡¼¥Ó¥¹¥ë¡¼¥Á¥ó¤ò¥³¡¼¥É²½¤Ç¤­¤Þ¤»¤ó" + + #: config/arm/arm.h:424 + msgid "Generate APCS conformant stack frames" + msgstr "APCS Ŭ¹ç¤·¤¿¥¹¥¿¥Ã¥¯¥Õ¥ì¡¼¥à¤òÀ¸À®¤¹¤ë" + + #: config/arm/arm.h:427 + msgid "Store function names in object code" + msgstr "¥ª¥Ö¥¸¥§¥¯¥È¥³¡¼¥É¤Ë´Ø¿ô̾¤ò³ÊǼ¤¹¤ë" + + #: config/arm/arm.h:431 + msgid "Use the 32-bit version of the APCS" + msgstr "APCS ¤Î 32 ¥Ó¥Ã¥ÈÈǤò»ÈÍѤ¹¤ë" + + #: config/arm/arm.h:433 + msgid "Use the 26-bit version of the APCS" + msgstr "APCS ¤Î 26 ¥Ó¥Ã¥ÈÈǤò»ÈÍѤ¹¤ë" + + #: config/arm/arm.h:437 + msgid "Pass FP arguments in FP registers" + msgstr "FP ¥ì¥¸¥¹¥¿¤Ç FP °ú¿ô¤òÅϤ¹" + + #: config/arm/arm.h:440 + msgid "Generate re-entrant, PIC code" + msgstr "ºÆÆþ²Äǽ¤Ê PIC ¥³¡¼¥É¤òÀ¸À®¤·¤Þ¤¹" + + #: config/arm/arm.h:443 + msgid "The MMU will trap on unaligned accesses" + msgstr "MMU ¤Ï¥¢¥é¥¤¥ó¥á¥ó¥È¤µ¤ì¤Ê¤¤¥¢¥¯¥»¥¹¤Ç¥È¥é¥Ã¥×¤òȯ¤¹¤ë¤Ç¤·¤ç¤¦" + + #: config/arm/arm.h:450 + msgid "Use library calls to perform FP operations" + msgstr "ÉâÆ°¾®¿ôÅÀ±é»»¤ò¹Ô¤¦¥é¥¤¥Ö¥é¥ê¸Æ¤Ó½Ð¤·¤òÍøÍѤ¹¤ë" + + #: config/arm/arm.h:452 config/i960/i960.h:287 + msgid "Use hardware floating point instructions" + msgstr "¥Ï¡¼¥É¥¦¥§¥¢ÉâÆ°¾®¿ôÅÀÌ¿Îá¤ò»ÈÍѤ¹¤ë" + + #: config/arm/arm.h:454 + msgid "Assume target CPU is configured as big endian" + msgstr "¥¿¡¼¥²¥Ã¥È CPU ¤¬¥Ó¥Ã¥¯¥¨¥ó¥Ç¥£¥¢¥ó¤È¤·¤ÆÀßÄꤵ¤ì¤Æ¤¤¤ë¤È¤ß¤Ê¤¹" + + #: config/arm/arm.h:456 + msgid "Assume target CPU is configured as little endian" + msgstr "¥¿¡¼¥²¥Ã¥È CPU ¤¬¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¤È¤·¤ÆÀßÄꤵ¤ì¤Æ¤¤¤ë¤È¤ß¤Ê¤¹" + + #: config/arm/arm.h:458 + msgid "Assume big endian bytes, little endian words" + msgstr "byte ¤¬¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥ó¤Ç word ¤¬¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¤È¤ß¤Ê¤¹" + + #: config/arm/arm.h:460 + msgid "Support calls between Thumb and ARM instruction sets" + msgstr "Thumb ¤È ARM Ì¿Î᥻¥Ã¥È´Ö¤Î¸Æ¤Ó½Ð¤·¤ò¥µ¥Ý¡¼¥È¤¹¤ë" + + #: config/arm/arm.h:463 + msgid "Generate a call to abort if a noreturn function returns" + msgstr "noreturn ´Ø¿ô¤¬ return ¤¹¤ë¤È¤­ abort ¤Î¸Æ¤Ó½Ð¤·¤òÀ¸À®¤¹¤ë" + + #: config/arm/arm.h:466 + msgid "Do not move instructions into a function's prologue" + msgstr "´Ø¿ô¤Î³«»ÏÉôʬ¤ËÌ¿Îá¤ò°Üư¤·¤Ê¤¤" + + #: config/arm/arm.h:469 + msgid "Do not load the PIC register in function prologues" + msgstr "´Ø¿ô¤ÎÁ°ÃÖ¤­Éôʬ¤Ë PIC ¥ì¥¸¥¹¥¿¤ò¥í¡¼¥É¤·¤Ê¤¤" + + #: config/arm/arm.h:472 + msgid "Generate call insns as indirect calls, if necessary" + msgstr "ɬÍפ¬¤¢¤ì¤Ð¡¢Ì¿Îá¸Æ¤Ó½Ð¤·¤ò´ÖÀܸƤӽФ·¤È¤·¤ÆÀ¸À®¤¹¤ë" + + #: config/arm/arm.h:475 + msgid "Compile for the Thumb not the ARM" + msgstr "ARM ¤Ç¤Ï¤Ê¤¯ Thumb ÍѤ˥³¥ó¥Ñ¥¤¥ë¤¹¤ë" + + #: config/arm/arm.h:479 + msgid "Thumb: Generate (non-leaf) stack frames even if not needed" + msgstr "Thumb: ÉÔÍפʾì¹ç¤Ç¤â(ÈóËöü)¥¹¥¿¥Ã¥¯¥Õ¥ì¡¼¥à¤òÀ¸À®¤¹¤ë" + + #: config/arm/arm.h:482 + msgid "Thumb: Generate (leaf) stack frames even if not needed" + msgstr "Thumb: ÉÔÍפʾì¹ç¤Ç¤â(Ëöü)¥¹¥¿¥Ã¥¯¥Õ¥ì¡¼¥à¤òÀ¸À®¤¹¤ë" + + #: config/arm/arm.h:485 + msgid "Thumb: Assume non-static functions may be called from ARM code" + msgstr "Thumb: ÈóÀÅŪ´Ø¿ô¤¬ ARM ¥³¡¼¥É¤«¤é¸Æ¤Ó½Ð¤µ¤ì¤ë²ÄǽÀ­¤¬¤¢¤ë¤È¤ß¤Ê¤¹" + + #: config/arm/arm.h:489 + msgid "Thumb: Assume function pointers may go to non-Thumb aware code" + msgstr "Thumb: ´Ø¿ô¥Ý¥¤¥ó¥¿¤¬Èó Thumb ¤Èǧ¼±¤¹¤ë¥³¡¼¥É¤ËÆÍÆþ¤¹¤ë²ÄǽÀ­¤¬¤¢¤ë¤È¤ß¤Ê¤¹" + + #: config/arm/arm.h:499 + msgid "Specify the name of the target CPU" + msgstr "¥¿¡¼¥²¥Ã¥È CPU ¤Î̾Á°¤ò»ØÄꤹ¤ë" + + #: config/arm/arm.h:501 + msgid "Specify the name of the target architecture" + msgstr "¥¿¡¼¥²¥Ã¥È¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤Î̾Á°¤ò»ØÄꤹ¤ë" + + #: config/arm/arm.h:505 + msgid "Specify the version of the floating point emulator" + msgstr "ÉâÆ°¾®¿ôÅÀ¥¨¥ß¥å¥ì¡¼¥¿¤Î¥Ð¡¼¥¸¥ç¥ó¤ò»ØÄꤹ¤ë" + + #: config/arm/arm.h:507 + msgid "Specify the minimum bit alignment of structures" + msgstr "¹½Â¤ÂÎ¥¢¥é¥¤¥ó¥á¥ó¥È¤ÎºÇ¾®¥Ó¥Ã¥È¿ô¤ò»ØÄꤹ¤ë" + + #: config/arm/arm.h:509 + msgid "Specify the register to be used for PIC addressing" + msgstr "PIC ¥¢¥É¥ì¥·¥ó¥°¤ËÍøÍѤµ¤ì¤ë¥ì¥¸¥¹¥¿¤ò»ØÄꤹ¤ë" + + #: config/arm/pe.c:168 config/i386/winnt.c:290 config/mcore/mcore.c:3365 + #, c-format + msgid "initialized variable `%s' is marked dllimport" + msgstr "½é´ü²½¤µ¤ì¤¿ÊÑ¿ô `%s' ¤Ï dllimport ¥Þ¡¼¥¯¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: config/arm/pe.c:177 config/i386/winnt.c:299 + #, c-format + msgid "static variable `%s' is marked dllimport" + msgstr "ÀÅŪÊÑ¿ô `%s' ¤Ï dllimport ¤È¥Þ¡¼¥¯¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: config/arm/pe.h:65 + msgid "Ignore dllimport attribute for functions" + msgstr "´Ø¿ô¤Î dllimport °À­¤ò̵»ë¤¹¤ë" + + #. None of these is actually used in cc1. If we don't define them in target + #. switches cc1 complains about them. For the sake of argument lets allocate + #. bit 31 of target flags for such options. + #: config/arm/riscix.h:84 + msgid "Do symbol renaming for BSD" + msgstr "BSD ÍѤ˥·¥ó¥Ü¥ë̾¤òÊѹ¹¤¹¤ë" + + #: config/arm/riscix.h:85 + msgid "Do symbol renaming for X/OPEN" + msgstr "X/OPEN ÍѤ˥·¥ó¥Ü¥ë̾¤òÊѹ¹¤¹¤ë" + + #: config/arm/riscix.h:86 + msgid "Don't do symbol renaming" + msgstr "¥·¥ó¥Ü¥ë̾¤ÎÊѹ¹¤ò¹Ô¤ï¤Ê¤¤" + + #: config/avr/avr.c:213 + #, c-format + msgid "MCU `%s' not supported" + msgstr "MCU `%s' ¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó" + + #: config/avr/avr.c:453 + #, c-format + msgid "large frame pointer change (%d) with -mtiny-stack" + msgstr "-mtiny-stack ¤Ë¤è¤ê¥é¡¼¥¸¥Õ¥ì¡¼¥à¥Ý¥¤¥ó¥¿¤¬Êѹ¹¤µ¤ì¤Þ¤¹(%d)" + + #: config/avr/avr.c:1048 + msgid "bad address, not (reg+disp):" + msgstr "" + + #: config/avr/avr.c:1056 + #, fuzzy + msgid "internal compiler error. Bad address:" + msgstr "ÆâÉô¥³¥ó¥Ñ¥¤¥é¥¨¥é¡¼." + + #: config/avr/avr.c:1069 + #, fuzzy + msgid "internal compiler error. Unknown mode:" + msgstr "ÆâÉô¥³¥ó¥Ñ¥¤¥é¥¨¥é¡¼." + + #: config/avr/avr.c:1777 config/avr/avr.c:2489 + #, fuzzy + msgid "invalid insn:" + msgstr "̵¸ú¤Ê #line" + + #: config/avr/avr.c:1814 config/avr/avr.c:1900 config/avr/avr.c:1949 + #: config/avr/avr.c:1958 config/avr/avr.c:2056 config/avr/avr.c:2228 + #: config/avr/avr.c:2526 config/avr/avr.c:2637 + msgid "incorrect insn:" + msgstr "" + + #: config/avr/avr.c:1977 config/avr/avr.c:2141 config/avr/avr.c:2299 + #: config/avr/avr.c:2681 + #, fuzzy + msgid "unknown move insn:" + msgstr "ÉÔÌÀ¤Ê¥ì¥¸¥¹¥¿Ì¾¤Ç¤¹: %s" + + #: config/avr/avr.c:2917 + msgid "bad shift insn:" + msgstr "" + + #: config/avr/avr.c:3033 config/avr/avr.c:3463 config/avr/avr.c:3843 + #, fuzzy + msgid "internal compiler error. Incorrect shift:" + msgstr "ÆâÉô¥³¥ó¥Ñ¥¤¥é¥¨¥é¡¼." + + #: config/avr/avr.c:4684 + #, fuzzy + msgid "only initialized variables can be placed into program memory area" + msgstr "¥×¥í¥°¥é¥à¥á¥â¥êÎΰèÆâ¤ËÇÛÃ֤Ǥ­¤ëÊÑ¿ô¤À¤±¤ò½é´ü²½¤·¤Þ¤·¤¿" + + #. `TARGET_...' + #. This series of macros is to allow compiler command arguments to + #. enable or disable the use of optional features of the target + #. machine. For example, one machine description serves both the + #. 68000 and the 68020; a command argument tells the compiler whether + #. it should use 68020-only instructions or not. This command + #. argument works by means of a macro `TARGET_68020' that tests a bit + #. in `target_flags'. + #. + #. Define a macro `TARGET_FEATURENAME' for each such option. Its + #. definition should test a bit in `target_flags'; for example: + #. + #. #define TARGET_68020 (target_flags & 1) + #. + #. One place where these macros are used is in the + #. condition-expressions of instruction patterns. Note how + #. `TARGET_68020' appears frequently in the 68000 machine description + #. file, `m68k.md'. Another place they are used is in the + #. definitions of the other macros in the `MACHINE.h' file. + #: config/avr/avr.h:99 + msgid "Assume int to be 8 bit integer" + msgstr "int ¤ò 8 ¥Ó¥Ã¥ÈÀ°¿ô¤È¤ß¤Ê¤¹" + + #: config/avr/avr.h:101 + msgid "Change the stack pointer without disabling interrupts" + msgstr "³ä¤ê¹þ¤ß¤Î̵¸ú²½¤Ê¤·¤Ç¥¹¥¿¥Ã¥¯¥Ý¥¤¥ó¥¿¤òÊѹ¹¤¹¤ë" + + #: config/avr/avr.h:103 + msgid "Use subroutines for function prologue/epilogue" + msgstr "´Ø¿ô¤ÎÁ°ÃÖ¤­/·ë¤Ó¤Î¤¿¤á¤Î¥µ¥Ö¥ë¡¼¥Á¥ó¤òÍøÍѤ¹¤ë" + + #: config/avr/avr.h:105 + msgid "Change only the low 8 bits of the stack pointer" + msgstr "¥¹¥¿¥Ã¥¯¥Ý¥¤¥ó¥¿¤Î²¼°Ì 8 ¥Ó¥Ã¥È¤À¤±¤òÊѹ¹¤¹¤ë" + + #: config/avr/avr.h:107 + msgid "Do not generate tablejump insns" + msgstr "¥Æ¡¼¥Ö¥ë¥¸¥ã¥ó¥×Ì¿Îá¤òÀ¸À®¤·¤Ê¤¤" + + #: config/avr/avr.h:110 + msgid "Output instruction sizes to the asm file" + msgstr "asm ¥Õ¥¡¥¤¥ë¤ËÌ¿Î᥵¥¤¥º¤ò½ÐÎϤ¹¤ë" + + #: config/avr/avr.h:144 + msgid "Specify the initial stack address" + msgstr "½é´ü¥¹¥¿¥Ã¥¯¥¢¥É¥ì¥¹¤ò»ØÄꤹ¤ë" + + #: config/avr/avr.h:145 + msgid "Specify the MCU name" + msgstr "MCU ̾¤ò»ØÄꤹ¤ë" + + #. `GIV_SORT_CRITERION(GIV1, GIV2)' + #. In some cases, the strength reduction optimization pass can + #. produce better code if this is defined. This macro controls the + #. order that induction variables are combined. This macro is + #. particularly useful if the target has limited addressing modes. + #. For instance, the SH target has only positive offsets in + #. addresses. Thus sorting to put the smallest address first allows + #. the most combinations to be found. + #: config/avr/avr.h:2677 + #, fuzzy + msgid "trampolines not supported" + msgstr "¥È¥é¥ó¥Ý¥ê¥ó¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó\n" + + #: config/c4x/c4x-c.c:70 + #, fuzzy, c-format + msgid "missing '(' after '#pragma %s' - ignored" + msgstr "½Ò¸ì¤Î¸å¤í¤Î '(' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: config/c4x/c4x-c.c:73 + #, fuzzy, c-format + msgid "missing function name in '#pragma %s' - ignored" + msgstr "¤ª¤«¤·¤Ê #pragma align - ̵»ë¤µ¤ì¤Þ¤·¤¿" + + #: config/c4x/c4x-c.c:78 + #, fuzzy, c-format + msgid "malformed '#pragma %s' - ignored" + msgstr "¤ª¤«¤·¤Ê #pragma align - ̵»ë¤µ¤ì¤Þ¤·¤¿" + + #: config/c4x/c4x-c.c:80 + #, c-format + msgid "missing section name in '#pragma %s' - ignored" + msgstr "" + + #: config/c4x/c4x-c.c:85 + #, fuzzy, c-format + msgid "missing ')' for '#pragma %s' - ignored" + msgstr "¤ª¤«¤·¤Ê #pragma align - ̵»ë¤µ¤ì¤Þ¤·¤¿" + + #: config/c4x/c4x-c.c:88 + #, c-format + msgid "junk at end of '#pragma %s'" + msgstr "'#pragma %s' ¤ÎºÇ¸å¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹" + + #: config/c4x/c4x.c:299 + #, fuzzy, c-format + msgid "unknown CPU version %d, using 40.\n" + msgstr "ÉÔÌÀ¤Ê CPU ¥Ð¡¼¥¸¥ç¥ó %d¡¢40 ¤ò»ÈÍѤ·¤Þ¤¹¡£\n" + + #: config/c4x/c4x.c:883 + #, fuzzy, c-format + msgid "ISR %s requires %d words of local vars, max is 32767" + msgstr "ISR %s ¤Ï %d ¥ï¡¼¥É¤Î¥í¡¼¥«¥ëÊÑ¿ô¤òÍ׵ᤷ¡¢ºÇÂç¤Ï 32767 ¤Ç¤¹¡£" + + #: config/c4x/c4x.c:1635 + msgid "using CONST_DOUBLE for address" + msgstr "" + + #: config/c4x/c4x.c:1775 + msgid "c4x_address_cost: Invalid addressing mode" + msgstr "" + + #: config/c4x/c4x.c:1917 + #, fuzzy, c-format + msgid "c4x_print_operand: %%L inconsistency" + msgstr "fr30_print_operand: ǧ¼±¤Ç¤­¤Ê¤¤ %B ¥³¡¼¥É¤Ç¤¹" + + #: config/c4x/c4x.c:1923 + #, fuzzy, c-format + msgid "c4x_print_operand: %%N inconsistency" + msgstr "fr30_print_operand: ǧ¼±¤Ç¤­¤Ê¤¤ %B ¥³¡¼¥É¤Ç¤¹" + + #: config/c4x/c4x.c:1964 + #, fuzzy, c-format + msgid "c4x_print_operand: %%O inconsistency" + msgstr "fr30_print_operand: ǧ¼±¤Ç¤­¤Ê¤¤ %B ¥³¡¼¥É¤Ç¤¹" + + #: config/c4x/c4x.c:2060 + #, fuzzy + msgid "c4x_print_operand: Bad operand case" + msgstr "fr30_print_operand: %A ¥³¡¼¥É¤ËÂФ¹¤ë̵¸ú¤Ê±é»»»Ò¤Ç¤¹" + + #: config/c4x/c4x.c:2103 + #, fuzzy + msgid "c4x_print_operand_address: Bad post_modify" + msgstr "fr30_print_operand_address: ½èÍý¤µ¤ì¤Ê¤¤¥¢¥É¥ì¥¹¤Ç¤¹" + + #: config/c4x/c4x.c:2125 + #, fuzzy + msgid "c4x_print_operand_address: Bad pre_modify" + msgstr "fr30_print_operand_address: ½èÍý¤µ¤ì¤Ê¤¤¥¢¥É¥ì¥¹¤Ç¤¹" + + #: config/c4x/c4x.c:2173 config/c4x/c4x.c:2185 config/c4x/c4x.c:2200 + #, fuzzy + msgid "c4x_print_operand_address: Bad operand case" + msgstr "fr30_print_operand_address: ½èÍý¤µ¤ì¤Ê¤¤¥¢¥É¥ì¥¹¤Ç¤¹" + + #: config/c4x/c4x.c:2456 + msgid "c4x_rptb_insert: Cannot find start label" + msgstr "" + + #: config/c4x/c4x.c:3443 config/c4x/c4x.c:3463 + msgid "mode not QImode" + msgstr "" + + #: config/c4x/c4x.c:3520 + #, fuzzy + msgid "invalid indirect memory address" + msgstr "̵¸ú¤Ê PC ¤¬¹ÔÈÖ¹æ¥Æ¡¼¥Ö¥ë¤Ë¤¢¤ê¤Þ¤¹" + + #: config/c4x/c4x.c:3609 + msgid "invalid indirect (S) memory address" + msgstr "" + + #: config/c4x/c4x.c:3950 + msgid "c4x_valid_operands: Internal error" + msgstr "" + + #: config/c4x/c4x.c:4430 + #, fuzzy + msgid "c4x_operand_subword: invalid mode" + msgstr "fr30_print_operand: ̵¸ú¤Ê %x ¥³¡¼¥É¤Ç¤¹" + + #: config/c4x/c4x.c:4433 + #, fuzzy + msgid "c4x_operand_subword: invalid operand" + msgstr "fr30_print_operand: %A ¥³¡¼¥É¤ËÂФ¹¤ë̵¸ú¤Ê±é»»»Ò¤Ç¤¹" + + #. We could handle these with some difficulty. + #. e.g., *p-- => *(p-=2); *(p+1). + #: config/c4x/c4x.c:4459 + msgid "c4x_operand_subword: invalid autoincrement" + msgstr "" + + #: config/c4x/c4x.c:4465 + msgid "c4x_operand_subword: invalid address" + msgstr "" + + #: config/c4x/c4x.c:4476 + msgid "c4x_operand_subword: address not offsettable" + msgstr "" + + #: config/c4x/c4x.c:4676 + msgid "c4x_rptb_rpts_p: Repeat block top label moved\n" + msgstr "" + + #. Name of the c4x assembler. + #. Name of the c4x linker. + #. Define assembler options. + #. Define linker options. + #. Define C preprocessor options. + #. Specify the end file to link with. + #. Target compilation option flags. + #. Small memory model. + #. Use 24-bit MPYI for C3x. + #. Fast fixing of floats. + #. Allow use of RPTS. + #. Emit C3x code. + #. Be compatible with TI assembler. + #. Be paranoid about DP reg. in ISRs. + #. Pass arguments on stack. + #. Enable features under development. + #. Enable repeat block. + #. Use BK as general register. + #. Use decrement and branch for C3x. + #. Enable debugging of GCC. + #. Force constants into registers. + #. Allow unsigned loop counters. + #. Force op0 and op1 to be same. + #. Save all 40 bits for floats. + #. Allow parallel insns. + #. Allow MPY||ADD, MPY||SUB insns. + #. Assume mem refs possibly aliased. + #. Emit C30 code. + #. Emit C31 code. + #. Emit C32 code. + #. Emit C33 code. + #. Emit C40 code. + #. Emit C44 code. + #. Run-time compilation parameters selecting different hardware subsets. + #. + #. Macro to define tables used to set the flags. + #. This is a list in braces of triplets in braces, + #. each pair being { "NAME", VALUE, "DESCRIPTION" } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/c4x/c4x.h:141 + msgid "Small memory model" + msgstr "¥¹¥â¡¼¥ë¥á¥â¥ê¥â¥Ç¥ë" + + #: config/c4x/c4x.h:143 + msgid "Big memory model" + msgstr "¥Ó¥Ã¥°¥á¥â¥ê¥â¥Ç¥ë" + + #: config/c4x/c4x.h:145 + msgid "Use MPYI instruction for C3x" + msgstr "MPYI Ì¿Îá¤ò C3x ÍѤ˻ÈÍѤ¹¤ë" + + #: config/c4x/c4x.h:147 + msgid "Do not use MPYI instruction for C3x" + msgstr "MPYI Ì¿Îá¤ò C3x ÍѤ˻ÈÍѤ·¤Ê¤¤" + + #: config/c4x/c4x.h:149 + msgid "Use fast but approximate float to integer conversion" + msgstr "¹â®¤À¤¬¶á»÷ÃͤȤʤëÉâÆ°¾®¿ô¤«¤éÀ°¿ô¤Ø¤ÎÊÑ´¹¤òÍøÍѤ¹¤ë" + + #: config/c4x/c4x.h:151 + msgid "Use slow but accurate float to integer conversion" + msgstr "Ä㮤À¤¬Àµ³Î¤ÊÉâÆ°¾®¿ô¤«¤éÀ°¿ô¤Ø¤ÎÊÑ´¹¤òÍøÍѤ¹¤ë" + + #: config/c4x/c4x.h:153 + msgid "Enable use of RTPS instruction" + msgstr "RTPS Ì¿Îá¤ÎÍøÍѤòÍ­¸ú¤Ë¤¹¤ë" + + #: config/c4x/c4x.h:155 + msgid "Disable use of RTPS instruction" + msgstr "RTPS Ì¿Îá¤ÎÍøÍѤò̵¸ú¤Ë¤¹¤ë" + + #: config/c4x/c4x.h:157 + msgid "Enable use of RTPB instruction" + msgstr "RTPB Ì¿Îá¤ÎÍøÍѤòÍ­¸ú¤Ë¤¹¤ë" + + #: config/c4x/c4x.h:159 + msgid "Disable use of RTPB instruction" + msgstr "RTPB Ì¿Îá¤ÎÍøÍѤò̵¸ú¤Ë¤¹¤ë" + + #: config/c4x/c4x.h:161 + msgid "Generate code for C30 CPU" + msgstr "C30 CPU ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/c4x/c4x.h:163 + msgid "Generate code for C31 CPU" + msgstr "C31 CPU ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/c4x/c4x.h:165 + msgid "Generate code for C32 CPU" + msgstr "C32 CPU ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/c4x/c4x.h:167 + msgid "Generate code for C33 CPU" + msgstr "C33 CPU ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/c4x/c4x.h:169 + msgid "Generate code for C40 CPU" + msgstr "C40 CPU ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/c4x/c4x.h:171 + msgid "Generate code for C44 CPU" + msgstr "C44 CPU ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/c4x/c4x.h:173 + msgid "Emit code compatible with TI tools" + msgstr "TI ¥Ä¡¼¥ë¸ß´¹¤Î¥³¡¼¥É¤òȯ¹Ô¤¹¤ë" + + #: config/c4x/c4x.h:175 + msgid "Emit code to use GAS extensions" + msgstr "GAS ³ÈÄ¥¤òÍøÍѤ¹¤ë¥³¡¼¥É¤òȯ¹Ô¤¹¤ë" + + #: config/c4x/c4x.h:177 config/c4x/c4x.h:181 + msgid "Save DP across ISR in small memory model" + msgstr "¥¹¥â¡¼¥ë¥á¥â¥ê¥â¥Ç¥ë¤Ç ISR ¤ò¸Ù¤ë DP ¤ò¥»¡¼¥Ö¤¹¤ë" + + #: config/c4x/c4x.h:179 config/c4x/c4x.h:183 + msgid "Don't save DP across ISR in small memory model" + msgstr "¥¹¥â¡¼¥ë¥â¥Ç¥ë¤Ç ISR ¤ò¸Ù¤ë DP ¤ò¥»¡¼¥Ö¤·¤Ê¤¤" + + #: config/c4x/c4x.h:185 + msgid "Pass arguments on the stack" + msgstr "°ú¿ô¤ò¥¹¥¿¥Ã¥¯ÅϤ·¤Ë¤¹¤ë" + + #: config/c4x/c4x.h:187 + msgid "Pass arguments in registers" + msgstr "°ú¿ô¤ò¥ì¥¸¥¹¥¿ÅϤ·¤Ë¤¹¤ë" + + #: config/c4x/c4x.h:189 + msgid "Enable new features under development" + msgstr "³«È¯Ãæ¤Î¿·µ¡Ç½¤òÍ­¸ú¤Ë¤¹¤ë" + + #: config/c4x/c4x.h:191 + msgid "Disable new features under development" + msgstr "³«È¯Ãæ¤Î¿·µ¡Ç½¤ò̵¸ú¤Ë¤¹¤ë" + + #: config/c4x/c4x.h:193 + msgid "Use the BK register as a general purpose register" + msgstr "BK ¥ì¥¸¥¹¥¿¤òÈÆÍѥ쥸¥¹¥¿¤È¤·¤Æ»ÈÍѤ¹¤ë" + + #: config/c4x/c4x.h:195 + msgid "Do not allocate BK register" + msgstr "BK ¥ì¥¸¥¹¥¿¤ò³ÎÊݤ·¤Ê¤¤" + + #: config/c4x/c4x.h:197 + msgid "Enable use of DB instruction" + msgstr "DB Ì¿Îá¤Î»ÈÍѤòÍ­¸ú¤Ë¤¹¤ë" + + #: config/c4x/c4x.h:199 + msgid "Disable use of DB instruction" + msgstr "DB Ì¿Îá¤Î»ÈÍѤò̵¸ú¤Ë¤¹¤ë" + + #: config/c4x/c4x.h:201 + msgid "Enable debugging" + msgstr "¥Ç¥Ð¥Ã¥°¤òÍ­¸ú¤Ë¤¹¤ë" + + #: config/c4x/c4x.h:203 + msgid "Disable debugging" + msgstr "¥Ç¥Ð¥Ã¥°¤ò̵¸ú¤Ë¤¹¤ë" + + #: config/c4x/c4x.h:205 + msgid "Force constants into registers to improve hoisting" + msgstr "´¬¤­¾å¤²(hoist)¤ò²þÁ±¤¹¤ë¤¿¤áÄê¿ô¤ò¥ì¥¸¥¹¥¿¤Ë³ä¤êÅö¤Æ¤ë¤³¤È¤ò¶¯Íפ¹¤ë" + + #: config/c4x/c4x.h:207 + msgid "Don't force constants into registers" + msgstr "Äê¿ô¤Î¥ì¥¸¥¹¥¿³ä¤êÅö¤Æ¤ò¶¯Íפ·¤Ê¤¤" + + #: config/c4x/c4x.h:209 + msgid "Force RTL generation to emit valid 3 operand insns" + msgstr "RTL À¸À®¤Ë¤Ä¤¤¤Æ¡¢Àµ¾ï¤Ê 3 ¥ª¥Ú¥é¥ó¥ÉÌ¿Îá¤ò¶¯Íפ¹¤ë" + + #: config/c4x/c4x.h:211 + msgid "Allow RTL generation to emit invalid 3 operand insns" + msgstr "RTL À¸À®¤Ë¤Ä¤¤¤Æ¡¢Ìµ¸ú¤Ê 3 ¥ª¥Ú¥é¥ó¥ÉÌ¿Îá¤òµöÍÆ¤¹¤ë" + + #: config/c4x/c4x.h:213 + msgid "Allow unsigned interation counts for RPTB/DB" + msgstr "Éä¹ç̵¤·¤Î RPTB/DB ÍѤÎÈ¿Éü¥«¥¦¥ó¥È¤òµöÍÆ¤¹¤ë" + + #: config/c4x/c4x.h:215 + msgid "Disallow unsigned iteration counts for RPTB/DB" + msgstr "Éä¹ç̵¤·¤Î RPTB/DB ÍѤÎÈ¿Éü¥«¥¦¥ó¥È¤òµöÍÆ¤·¤Ê¤¤" + + #: config/c4x/c4x.h:217 + msgid "Preserve all 40 bits of FP reg across call" + msgstr "¸Æ¤Ó½Ð¤·¤Î´Ö FP ¥ì¥¸¥¹¥¿¤Î 40 ¥Ó¥Ã¥ÈÁ´¤Æ¤òÊݸ¤¹¤ë" + + #: config/c4x/c4x.h:219 + msgid "Only preserve 32 bits of FP reg across call" + msgstr "¸Æ¤Ó½Ð¤·¤Î´Ö FP ¥ì¥¸¥¹¥¿¤Î 32 ¥Ó¥Ã¥È¤À¤±¤òÊݸ¤¹¤ë" + + #: config/c4x/c4x.h:221 + msgid "Enable parallel instructions" + msgstr "ÊÂÎóÌ¿Îá¤òÍ­¸ú¤Ë¤¹¤ë" + + #: config/c4x/c4x.h:223 + msgid "Disable parallel instructions" + msgstr "ÊÂÎóÌ¿Îá¤ò̵¸ú¤Ë¤¹¤ë" + + #: config/c4x/c4x.h:225 + msgid "Enable MPY||ADD and MPY||SUB instructions" + msgstr "MPY||ADD ¤ª¤è¤Ó MPY||SUB Ì¿Îá¤òÍ­¸ú¤Ë¤¹¤ë" + + #: config/c4x/c4x.h:227 + msgid "Disable MPY||ADD and MPY||SUB instructions" + msgstr "MPY||ADD ¤ª¤è¤Ó MPY||SUB Ì¿Îá¤ò̵¸ú¤Ë¤¹¤ë" + + #: config/c4x/c4x.h:229 + msgid "Assume that pointers may be aliased" + msgstr "¥Ý¥¤¥ó¥¿¤¬ÊÌ̾¤È¤Ê¤ê¤¦¤ë¤³¤È¤òÁ°Äó¤È¤¹¤ë" + + #: config/c4x/c4x.h:231 + msgid "Assume that pointers not aliased" + msgstr "¥Ý¥¤¥ó¥¿¤ÏÊÌ̾¤Ë¤Ê¤é¤Ê¤¤¤È¤ß¤Ê¤¹" + + #: config/c4x/c4x.h:321 + msgid "Specify maximum number of iterations for RPTS" + msgstr "RPTS ÍѤκÇÂçÈ¿Éü¿ô¤ò»ØÄꤹ¤ë" + + #: config/c4x/c4x.h:323 + msgid "Select CPU to generate code for" + msgstr "¥³¡¼¥É¤¬À¸À®¤µ¤ì¤ë CPU ¤òÁªÂò¤¹¤ë" + + #. Macros used in the machine description to test the flags. + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/clipper/clipper.h:40 + msgid "Generate code for the C400" + msgstr "C400 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/clipper/clipper.h:41 + msgid "Generate code for the C300" + msgstr "C300 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/convex/convex.h:52 + msgid "Generate code for c1" + msgstr "c1 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/convex/convex.h:53 + msgid "Generate code for c2" + msgstr "c2 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/convex/convex.h:54 + msgid "Generate code for c32" + msgstr "c32 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/convex/convex.h:55 config/convex/convex.h:56 + msgid "Generate code for c34" + msgstr "c34 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/convex/convex.h:58 + msgid "Use standard calling sequence, with arg count word" + msgstr "ɸ½àŪ¸Æ¤Ó½Ð¤·¼ê½ç¤ò»È¤¤¡¢°ú¿ô¥«¥¦¥ó¥È word ¤ò¤Ä¤±¤ë" + + #: config/convex/convex.h:60 + msgid "Place arg count in a nop instruction (faster than push)" + msgstr "nop Ì¿ÎáÆâ¤Ë°ú¿ô¥«¥¦¥ó¥È¤òÃÖ¤¯ (push ¤è¤ê¹â®)" + + #: config/convex/convex.h:62 + msgid "Don't push arg count, depend on symbol table" + msgstr "°ú¿ô¥«¥¦¥ó¥È¤ò push ¤»¤º¡¢¥·¥ó¥Ü¥ë¥Æ¡¼¥Ö¥ë¤ò¤¢¤Æ¤Ë¤¹¤ë" + + #: config/convex/convex.h:64 + msgid "Use data cache for volatile mem refs (default)" + msgstr "volatile ¥á¥â¥ê»²¾ÈÍѥǡ¼¥¿¥­¥ã¥Ã¥·¥å¤òÍøÍѤ¹¤ë(¥Ç¥Õ¥©¥ë¥È)" + + #: config/convex/convex.h:66 + msgid "Don't use data cache for volatile mem refs" + msgstr "volatile ¥á¥â¥ê»²¾ÈÍѤˤϥǡ¼¥¿¥­¥ã¥Ã¥·¥å¤ò¹Ô¤ï¤Ê¤¤" + + #: config/convex/convex.h:68 + msgid "Bypass data cache for volatile mem refs" + msgstr "volatile ¥á¥â¥ê»²¾ÈÍÑ¤Ë¤Ï cache ¤µ¤ì¤¿¥Ç¡¼¥¿¤ò²óÈò¤¹¤ë" + + #: config/convex/convex.h:69 + msgid "Use 64-bit longs" + msgstr "64 ¥Ó¥Ã¥È long ¤ò»ÈÍѤ¹¤ë" + + #: config/convex/convex.h:70 + msgid "Use cc- and libc-compatible 32-bit longs" + msgstr "cc- ¤È libc ¸ß´¹¤Î 32 ¥Ó¥Ã¥È long ¤ò»ÈÍѤ¹¤ë" + + #: config/cris/aout.h:106 + msgid "Compile for the MMU-less Etrax 100-based elinux system" + msgstr "" + + #: config/cris/aout.h:113 + msgid "For elinux, request a specified stack-size for this program" + msgstr "" + + #: config/cris/cris.c:878 + #, c-format + msgid "stackframe too big: %d bytes" + msgstr "" + + #: config/cris/cris.c:1193 + msgid "allocated but unused delay list in epilogue" + msgstr "" + + #: config/cris/cris.c:1203 + #, fuzzy + msgid "unexpected function type needing stack adjustment for __builtin_eh_return" + msgstr "´Ø¿ô¤¬ __builtin_eh_return ¤ò»È¤¤¤Þ¤¹" + + #: config/cris/cris.c:1497 + #, fuzzy, c-format + msgid "internal error: bad register: %d" + msgstr "ÆâÉô¥¨¥é¡¼: " + + #: config/cris/cris.c:1966 + msgid "internal error: sideeffect-insn affecting main effect" + msgstr "" + + #. If we get here, the caller got its initial tests wrong. + #: config/cris/cris.c:2253 + msgid "internal error: cris_side_effect_mode_ok with bad operands" + msgstr "" + + #: config/cris/cris.c:2335 config/cris/cris.c:2393 + #, fuzzy + msgid "unrecognized supposed constant" + msgstr "ǧ¼±ÉÔǽ¤Î¥¨¥¹¥±¡¼¥× \\r%c" + + #: config/cris/cris.c:2434 + msgid "unrecognized supposed constant in cris_global_pic_symbol" + msgstr "" + + #: config/cris/cris.c:2453 + #, fuzzy, c-format + msgid "-max-stackframe=%d is not usable, not between 0 and %d" + msgstr "-mregparm=%d ¤¬ 0 ¤«¤é %d ¤Î´Ö¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: config/cris/cris.c:2481 + #, c-format + msgid "unknown CRIS version specification in -march= or -mcpu= : %s" + msgstr "" + + #: config/cris/cris.c:2517 + #, c-format + msgid "unknown CRIS cpu version specification in -mtune= : %s" + msgstr "" + + #: config/cris/cris.c:2535 + #, fuzzy + msgid "-fPIC not supported in this configuration" + msgstr "%s ¤Ï¤³¤Î¥³¥ó¥Õ¥£¥®¥å¥ì¡¼¥·¥ç¥ó¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó" + + #: config/cris/cris.c:2551 + msgid "that particular -g option is invalid with -maout and -melinux" + msgstr "" + + #: config/cris/cris.c:2742 config/cris/cris.c:2787 + msgid "unexpected side-effects in address" + msgstr "" + + #: config/cris/cris.c:2888 + msgid "PIC register isn't set up" + msgstr "" + + #: config/cris/cris.c:2901 + #, fuzzy + msgid "unexpected address expression" + msgstr "']' ¤¬É¬Íפǡ¢Ìµ¸ú¤Ê·¿É½¸½¤Ç¤¹" + + #. Labels are never marked as global symbols. + #: config/cris/cris.c:2915 + msgid "unexpected PIC symbol" + msgstr "" + + #: config/cris/cris.c:2919 + msgid "emitting PIC operand, but PIC register isn't set up" + msgstr "" + + #: config/cris/cris.c:2928 + msgid "unexpected NOTE as addr_const:" + msgstr "" + + #. No "no-etrax" as it does not really imply any model. On the other hand, "etrax" implies the common (and large) subset matching all models. + #: config/cris/cris.h:333 + msgid "Compile for ETRAX 4 (CRIS v3)" + msgstr "" + + #: config/cris/cris.h:338 + msgid "Compile for ETRAX 100 (CRIS v8)" + msgstr "" + + #: config/cris/cris.h:342 + msgid "Emit verbose debug information in assembly code" + msgstr "" + + #: config/cris/cris.h:345 + #, fuzzy + msgid "Do not use condition codes from normal instructions" + msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥ÉÌ¿Îá¤ò»ÈÍѤ·¤Ê¤¤" + + #: config/cris/cris.h:349 + msgid "Do not emit addressing modes with side-effect assignment" + msgstr "" + + #: config/cris/cris.h:352 + #, fuzzy + msgid "Do not tune stack alignment" + msgstr "¥¹¥¿¥Ã¥¯¥Ð¥¤¥¢¥¹¤ò»ÈÍѤ·¤Ê¤¤" + + #: config/cris/cris.h:355 + #, fuzzy + msgid "Do not tune writable data alignment" + msgstr "ʸ»úÎó¤ò½ñ¤­¹þ¤ß²Äǽ¥Ç¡¼¥¿¥»¥¯¥·¥ç¥ó¤Ë³ÊǼ¤¹¤ë" + + #: config/cris/cris.h:358 + msgid "Do not tune code and read-only data alignment" + msgstr "" + + #: config/cris/cris.h:367 + msgid "Align code and data to 32 bits" + msgstr "" + + #: config/cris/cris.h:380 + msgid "Don't align items in code or data" + msgstr "" + + #: config/cris/cris.h:383 + #, fuzzy + msgid "Do not emit function prologue or epilogue" + msgstr "´Ø¿ô¤ÎÁ°ÃÖ¤­/·ë¤Ó¤Î¤¿¤á¤Î¥µ¥Ö¥ë¡¼¥Á¥ó¤òÍøÍѤ¹¤ë" + + #. We have to handle this m-option here since we can't wash it off in both CC1_SPEC and CC1PLUS_SPEC. + #: config/cris/cris.h:387 + msgid "Use the most feature-enabling options allowed by other options" + msgstr "" + + #. We must call it "override-" since calling it "no-" will cause gcc.c to forget it, if there's a "later" -mbest-lib-options. Kludgy, but needed for some multilibbed files. + #: config/cris/cris.h:393 + msgid "Override -mbest-lib-options" + msgstr "" + + #: config/cris/cris.h:425 + #, fuzzy + msgid "Generate code for the specified chip or CPU version" + msgstr "½êÍ¿¤Î CPU ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/cris/cris.h:427 + #, fuzzy + msgid "Tune alignment for the specified chip or CPU version" + msgstr "`%s' ¤ËÂФ·¤Æ¤Î¥¢¥é¥¤¥ó¥á¥ó¥È¤Ï»ØÄê¤Ç¤­¤Þ¤»¤ó" + + #: config/cris/cris.h:429 + msgid "Warn when a stackframe is larger than the specified size" + msgstr "" + + #. Node: Profiling + #: config/cris/cris.h:1025 + msgid "no FUNCTION_PROFILER for CRIS" + msgstr "" + + #: config/cris/linux.h:74 + msgid "Together with -fpic and -fPIC, do not use GOTPLT references" + msgstr "" + + #: config/d30v/d30v.c:209 + #, fuzzy, c-format + msgid "bad modes_tieable_p for register %s, mode1 %s, mode2 %s" + msgstr "¥ì¥¸¥¹¥¿ %s ¤Ë¤È¤Ã¤ÆÉÔÀµ¤Ê modes_tieable_p, mode1 %s, mode2 %s" + + #: config/d30v/d30v.c:2676 + msgid "bad insn to d30v_print_operand_address:" + msgstr "" + + #: config/d30v/d30v.c:2693 config/d30v/d30v.c:2754 config/d30v/d30v.c:2775 + #: config/d30v/d30v.c:2793 + msgid "bad insn to d30v_print_operand_memory_reference:" + msgstr "" + + #: config/d30v/d30v.c:2861 + msgid "bad insn to d30v_print_operand, 'f' modifier:" + msgstr "" + + #: config/d30v/d30v.c:2870 + msgid "bad insn to d30v_print_operand, 'A' modifier:" + msgstr "" + + #: config/d30v/d30v.c:2877 + msgid "bad insn to d30v_print_operand, 'M' modifier:" + msgstr "" + + #: config/d30v/d30v.c:2931 + msgid "bad insn to print_operand, 'F' or 'T' modifier:" + msgstr "" + + #: config/d30v/d30v.c:2942 + msgid "bad insn to print_operand, 'B' modifier:" + msgstr "" + + #: config/d30v/d30v.c:2949 + msgid "bad insn to print_operand, 'E' modifier:" + msgstr "" + + #: config/d30v/d30v.c:2967 + msgid "bad insn to print_operand, 'R' modifier:" + msgstr "" + + #: config/d30v/d30v.c:2976 config/d30v/d30v.c:2984 + msgid "bad insn to print_operand, 's' modifier:" + msgstr "" + + #: config/d30v/d30v.c:3013 + msgid "bad insn in d30v_print_operand, 0 case" + msgstr "" + + #: config/d30v/d30v.c:3368 + msgid "d30v_emit_comparison" + msgstr "" + + #: config/d30v/d30v.c:3412 + msgid "bad call to d30v_move_2words" + msgstr "" + + #. This macro defines names of command options to set and clear bits in + #. `target_flags'. Its definition is an initializer with a subgrouping for + #. each command option. + #. + #. Each subgrouping contains a string constant, that defines the option name, a + #. number, which contains the bits to set in `target_flags', and a second + #. string which is the description displayed by `--help'. If the number is + #. negative then the bits specified by the number are cleared instead of being + #. set. If the description string is present but empty, then no help + #. information will be displayed for that option, but it will not count as an + #. undocumented option. The actual option name is made by appending `-m' to + #. the specified name. + #. + #. One of the subgroupings should have a null string. The number in this + #. grouping is the default value for target_flags. Any target options act + #. starting with that value. + #. + #. Here is an example which defines -m68000 and -m68020 with opposite meanings, + #. and picks the latter as the default: + #. + #. #define TARGET_SWITCHES { { "68020", TARGET_MASK_68020, "" }, { "68000", -TARGET_MASK_68020, "Compile for the 68000" }, { "", TARGET_MASK_68020, "" }} + #: config/d30v/d30v.h:443 + msgid "Enable use of conditional move instructions" + msgstr "¾ò·ïŪ move Ì¿Îá¤ÎÍøÍѤòÍ­¸ú¤Ë¤¹¤ë" + + #: config/d30v/d30v.h:446 + msgid "Disable use of conditional move instructions" + msgstr "¾ò·ïŪ move Ì¿Îá¤ÎÍøÍѤò̵¸ú¤Ë¤¹¤ë" + + #: config/d30v/d30v.h:449 + msgid "Debug argument support in compiler" + msgstr "¥³¥ó¥Ñ¥¤¥éÆâ¤Î¥Ç¥Ð¥Ã¥°°ú¿ô¤ò¥µ¥Ý¡¼¥È¤¹¤ë" + + #: config/d30v/d30v.h:452 + msgid "Debug stack support in compiler" + msgstr "¥³¥ó¥Ñ¥¤¥éÆâ¤Î¥Ç¥Ð¥Ã¥°¥¹¥¿¥Ã¥¯¤ò¥µ¥Ý¡¼¥È¤¹¤ë" + + #: config/d30v/d30v.h:455 + msgid "Debug memory address support in compiler" + msgstr "¥³¥ó¥Ñ¥¤¥éÆâ¤Î¥Ç¥Ð¥Ã¥°¥á¥â¥ê¥¢¥É¥ì¥¹¤ò¥µ¥Ý¡¼¥È¤¹¤ë" + + #: config/d30v/d30v.h:458 + #, fuzzy + msgid "Make adjacent short instructions parallel if possible" + msgstr "²Äǽ¤Ê¤é¤ÐÎÙÀܤ¹¤ëû¤¤Ì¿Îá¤òÊÂÎ󲽤¹¤ë" + + #: config/d30v/d30v.h:461 + #, fuzzy + msgid "Do not make adjacent short instructions parallel" + msgstr "ÎÙÀܤ¹¤ëû¤¤Ì¿Îá¤òÊÂÎ󲽤·¤Ê¤¤" + + #: config/d30v/d30v.h:464 config/d30v/d30v.h:467 + msgid "Link programs/data to be in external memory by default" + msgstr "¥×¥í¥°¥é¥à/¥Ç¡¼¥¿¤ò¥Ç¥Õ¥©¥ë¥È¤Ç³°Éô¥á¥â¥êÆâ¤Ë¥ê¥ó¥¯¤¹¤ë" + + #: config/d30v/d30v.h:470 + msgid "Link programs/data to be in onchip memory by default" + msgstr "¥×¥í¥°¥é¥à/¥Ç¡¼¥¿¤ò¥Ç¥Õ¥©¥ë¥È¤Ç¥Á¥Ã¥×¾å¤Î¥á¥â¥êÆâ¤Ë¥ê¥ó¥¯¤¹¤ë" + + #. This macro is similar to `TARGET_SWITCHES' but defines names of command + #. options that have values. Its definition is an initializer with a + #. subgrouping for each command option. + #. + #. Each subgrouping contains a string constant, that defines the fixed part of + #. the option name, the address of a variable, and a description string. The + #. variable, type `char *', is set to the variable part of the given option if + #. the fixed part matches. The actual option name is made by appending `-m' to + #. the specified name. + #. + #. Here is an example which defines `-mshort-data-'. If the given + #. option is `-mshort-data-512', the variable `m88k_short_data' will be set to + #. the string "512". + #. + #. extern char *m88k_short_data; + #. #define TARGET_OPTIONS { { "short-data-", &m88k_short_data, "Specify the size of the short data section" } } + #: config/d30v/d30v.h:497 + msgid "Change the branch costs within the compiler" + msgstr "¥³¥ó¥Ñ¥¤¥éÆâÉô¤Ç¤Îʬ´ô¥³¥¹¥È¤òÊѹ¹¤¹¤ë" + + #: config/d30v/d30v.h:500 + msgid "Change the threshold for conversion to conditional execution" + msgstr "¾ò·ïŪ¤Ê¼Â¹Ô¤Ø¤ÎÊѹ¹¤Î¤¿¤á¤ÎïçÃͤòÊѹ¹¤¹¤ë" + + #: config/dsp16xx/dsp16xx.c:1446 config/dsp16xx/dsp16xx.c:1469 + #, fuzzy + msgid "stack size > 32k" + msgstr "¥¹¥¿¥Ã¥¯¥µ¥¤¥º > 32k" + + #: config/dsp16xx/dsp16xx.c:1678 + #, fuzzy + msgid "invalid addressing mode" + msgstr "Ê£»¨¤Ê¥¢¥É¥ì¥·¥ó¥°¥â¡¼¥É¤ò»ÈÍѤ¹¤ë" + + #: config/dsp16xx/dsp16xx.c:1857 + #, fuzzy + msgid "bad register extension code" + msgstr "ÉÔÀµ¤Ê¥ì¥¸¥¹¥¿³ÈÄ¥¥³¡¼¥É" + + #: config/dsp16xx/dsp16xx.c:1958 + #, fuzzy + msgid "invalid offset in ybase addressing" + msgstr "ybase ¥¢¥É¥ì¥·¥ó¥°¤Ë̵¸ú¤Ê¥ª¥Õ¥»¥Ã¥È" + + #: config/dsp16xx/dsp16xx.c:1961 + #, fuzzy + msgid "invalid register in ybase addressing" + msgstr "ybase ¥¢¥É¥ì¥·¥ó¥°¤Ë̵¸ú¤Ê¥ª¥Õ¥»¥Ã¥È" + + #: config/dsp16xx/dsp16xx.c:1990 config/dsp16xx/dsp16xx.c:2287 + msgid "inline float constants not supported on this host" + msgstr "¤³¤Î¥Û¥¹¥È¤Ç¤Ï¥¤¥ó¥é¥¤¥óÉâÆ°¾®¿ôÄê¿ô¤ò¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: config/dsp16xx/dsp16xx.c:2140 + #, fuzzy + msgid "invalid shift operator in emit_1600_core_shift" + msgstr "emit_1600_core_shift ¤Ç¤Î̵¸ú¤Ê¥·¥Õ¥È±é»»»Ò" + + #: config/dsp16xx/dsp16xx.c:2493 + #, fuzzy + msgid "invalid mode for gen_tst_reg" + msgstr "gen_tst_reg ¤Ë¤È¤Ã¤Æ¤Î̵¸ú¤Ê¥â¡¼¥É" + + #: config/dsp16xx/dsp16xx.c:2565 + #, fuzzy + msgid "invalid mode for integer comparison in gen_compare_reg" + msgstr "gen_compare_reg ¤Ç¤ÎÀ°¿ôÈæ³Ó¤Ë¤È¤Ã¤Æ¤Î̵¸ú¤Ê¥â¡¼¥É" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/dsp16xx/dsp16xx.h:215 + #, fuzzy + msgid "Pass parameters in registers (default)" + msgstr "°ú¿ô¤ò¥ì¥¸¥¹¥¿ÅϤ·¤Ë¤¹¤ë" + + #: config/dsp16xx/dsp16xx.h:217 + #, fuzzy + msgid "Don't pass parameters in registers" + msgstr "°ú¿ô¤ò¥ì¥¸¥¹¥¿ÅϤ·¤Ë¤¹¤ë" + + #: config/dsp16xx/dsp16xx.h:219 + #, fuzzy + msgid "Generate code for near calls" + msgstr "Intel as ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/dsp16xx/dsp16xx.h:221 + #, fuzzy + msgid "Don't generate code for near calls" + msgstr "Intel as ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/dsp16xx/dsp16xx.h:223 + #, fuzzy + msgid "Generate code for near jumps" + msgstr "Intel as ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/dsp16xx/dsp16xx.h:225 + #, fuzzy + msgid "Don't generate code for near jumps" + msgstr "Intel as ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/dsp16xx/dsp16xx.h:227 + #, fuzzy + msgid "Generate code for a bit-manipulation unit" + msgstr "¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥óÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/dsp16xx/dsp16xx.h:229 + #, fuzzy + msgid "Don't generate code for a bit-manipulation unit" + msgstr "¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥óÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/dsp16xx/dsp16xx.h:231 + #, fuzzy + msgid "Generate code for memory map1" + msgstr "Äã°Ì¥¢¥É¥ì¥¹¥á¥â¥êÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/dsp16xx/dsp16xx.h:233 + #, fuzzy + msgid "Generate code for memory map2" + msgstr "Äã°Ì¥¢¥É¥ì¥¹¥á¥â¥êÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/dsp16xx/dsp16xx.h:235 + #, fuzzy + msgid "Generate code for memory map3" + msgstr "Äã°Ì¥¢¥É¥ì¥¹¥á¥â¥êÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/dsp16xx/dsp16xx.h:237 + #, fuzzy + msgid "Generate code for memory map4" + msgstr "Äã°Ì¥¢¥É¥ì¥¹¥á¥â¥êÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/dsp16xx/dsp16xx.h:239 + msgid "Ouput extra code for initialized data" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:241 + #, fuzzy + msgid "Don't let reg. allocator use ybase registers" + msgstr "¥ì¥¸¥¹¥¿¤ËÉâÆ°¾®¿ô¤ò³ÊǼ¤·¤Ê¤¤" + + #: config/dsp16xx/dsp16xx.h:243 + msgid "Output extra debug info in Luxworks environment" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:245 + msgid "Save temp. files in Luxworks environment" + msgstr "" + + #. This macro is similar to `TARGET_SWITCHES' but defines names of + #. command options that have values. Its definition is an + #. initializer with a subgrouping for each command option. + #. + #. Each subgrouping contains a string constant, that defines the + #. fixed part of the option name, and the address of a variable. + #. The variable, type `char *', is set to the variable part of the + #. given option if the fixed part matches. The actual option name + #. is made by appending `-m' to the specified name. + #. + #. Here is an example which defines `-mshort-data-NUMBER'. If the + #. given option is `-mshort-data-512', the variable `m88k_short_data' + #. will be set to the string `"512"'. + #. + #. extern char *m88k_short_data; + #. #define TARGET_OPTIONS { { "short-data-", &m88k_short_data } } + #: config/dsp16xx/dsp16xx.h:274 + #, fuzzy + msgid "Specify alternate name for text section" + msgstr "¥¿¡¼¥²¥Ã¥È CPU ¤Î̾Á°¤ò»ØÄꤹ¤ë" + + #: config/dsp16xx/dsp16xx.h:276 + #, fuzzy + msgid "Specify alternate name for data section" + msgstr "Äê¿ôʸ»úÎóÍѤΥ¯¥é¥¹Ì¾¤ò»ØÄꤹ¤ë" + + #: config/dsp16xx/dsp16xx.h:278 + #, fuzzy + msgid "Specify alternate name for bss section" + msgstr "Äê¿ôʸ»úÎóÍѤΥ¯¥é¥¹Ì¾¤ò»ØÄꤹ¤ë" + + #: config/dsp16xx/dsp16xx.h:280 + #, fuzzy + msgid "Specify alternate name for constant section" + msgstr "Äê¿ôʸ»úÎóÍѤΥ¯¥é¥¹Ì¾¤ò»ØÄꤹ¤ë" + + #: config/dsp16xx/dsp16xx.h:282 + msgid "Specify alternate name for dsp16xx chip" + msgstr "" + + #. Output assembler code to FILE to increment profiler label # LABELNO + #. for profiling a function entry. + #: config/dsp16xx/dsp16xx.h:1236 config/dsp16xx/dsp16xx.h:1241 + #: config/dsp16xx/dsp16xx.h:1246 config/dsp16xx/dsp16xx.h:1843 + #: config/dsp16xx/dsp16xx.h:1848 + #, fuzzy + msgid "profiling not implemented yet" + msgstr "¥×¥í¥Õ¥¡¥¤¥ê¥ó¥°¤Ï¡¢¤Þ¤À¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£" + + #. Emit RTL insns to initialize the variable parts of a trampoline. + #. FNADDR is an RTX for the address of the function's pure code. + #. CXT is an RTX for the static chain value for the function. + #: config/dsp16xx/dsp16xx.h:1257 config/dsp16xx/dsp16xx.h:1269 + #, fuzzy + msgid "trampolines not yet implemented" + msgstr "Trampoline ¤Ï¡¢¤Þ¤À¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/elxsi/elxsi.h:51 + msgid "Generate code the unix assembler can handle" + msgstr "unix ¥¢¥»¥ó¥Ö¥é¤¬½èÍý¤Ç¤­¤ë¥³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/elxsi/elxsi.h:52 + msgid "Generate code an embedded assembler can handle" + msgstr "Ëä¤á¹þ¤ß¥¢¥»¥ó¥Ö¥é¤¬½èÍý¤Ç¤­¤ë¥³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/fr30/fr30.c:456 + msgid "fr30_print_operand_address: unhandled address" + msgstr "fr30_print_operand_address: ½èÍý¤µ¤ì¤Ê¤¤¥¢¥É¥ì¥¹¤Ç¤¹" + + #: config/fr30/fr30.c:483 + #, fuzzy, c-format + msgid "fr30_print_operand: unrecognized %p code" + msgstr "fr30_print_operand: ǧ¼±¤Ç¤­¤Ê¤¤ %p ¥³¡¼¥É¤Ç¤¹" + + #: config/fr30/fr30.c:503 + #, fuzzy + msgid "fr30_print_operand: unrecognized %b code" + msgstr "fr30_print_operand: ǧ¼±¤Ç¤­¤Ê¤¤ %b ¥³¡¼¥É¤Ç¤¹" + + #: config/fr30/fr30.c:524 + #, fuzzy + msgid "fr30_print_operand: unrecognized %B code" + msgstr "fr30_print_operand: ǧ¼±¤Ç¤­¤Ê¤¤ %B ¥³¡¼¥É¤Ç¤¹" + + #: config/fr30/fr30.c:532 + #, c-format + msgid "fr30_print_operand: invalid operand to %A code" + msgstr "fr30_print_operand: %A ¥³¡¼¥É¤ËÂФ¹¤ë̵¸ú¤Ê±é»»»Ò¤Ç¤¹" + + #: config/fr30/fr30.c:549 + #, c-format + msgid "fr30_print_operand: invalid %x code" + msgstr "fr30_print_operand: ̵¸ú¤Ê %x ¥³¡¼¥É¤Ç¤¹" + + #: config/fr30/fr30.c:556 + #, c-format + msgid "fr30_print_operand: invalid %F code" + msgstr "fr30_print_operand: ̵¸ú¤Ê %F ¥³¡¼¥É¤Ç¤¹" + + #: config/fr30/fr30.c:572 + msgid "fr30_print_operand: unknown code" + msgstr "fr30_print_operand: ÉÔÌÀ¤Ê¥³¡¼¥É¤Ç¤¹" + + #: config/fr30/fr30.c:601 config/fr30/fr30.c:610 config/fr30/fr30.c:621 + #: config/fr30/fr30.c:634 + msgid "fr30_print_operand: unhandled MEM" + msgstr "fr30_print_operand: ½èÍý¤µ¤ì¤Ê¤¤ MEM ¤Ç¤¹" + + #: config/fr30/fr30.h:76 + msgid "Assume small address space" + msgstr "¥¹¥â¡¼¥ë¥¢¥É¥ì¥¹¶õ´Ö¤È¤ß¤Ê¤¹" + + #: config/h8300/h8300.c:141 + #, fuzzy + msgid "-ms2600 is used without -ms" + msgstr "-ms2600 ¤¬ -ms ¤Ê¤·¤Ç»È¤ï¤ì¤Þ¤·¤¿" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/h8300/h8300.h:117 + msgid "Generate H8/S code" + msgstr "H8/S ¥³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/h8300/h8300.h:118 + msgid "Do not generate H8/S code" + msgstr "H8/S ¥³¡¼¥É¤òÀ¸À®¤·¤Ê¤¤" + + #: config/h8300/h8300.h:119 + msgid "Generate H8/S2600 code" + msgstr "H8/S2600 ¥³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/h8300/h8300.h:120 + msgid "Do not generate H8/S2600 code" + msgstr "H8/S2600 ¥³¡¼¥É¤òÀ¸À®¤·¤Ê¤¤" + + #: config/h8300/h8300.h:121 + msgid "Make integers 32 bits wide" + msgstr "À°¿ô¤ò 32 ¥Ó¥Ã¥ÈÉý¤È¤¹¤ë" + + #: config/h8300/h8300.h:124 + msgid "Use registers for argument passing" + msgstr "°ú¿ô¤ò¥ì¥¸¥¹¥¿ÅϤ·¤Ë¤¹¤ë" + + #: config/h8300/h8300.h:126 + msgid "Do not use registers for argument passing" + msgstr "°ú¿ô¤ò¥ì¥¸¥¹¥¿ÅϤ·¤Ë¤·¤Ê¤¤" + + #: config/h8300/h8300.h:128 + msgid "Consider access to byte sized memory slow" + msgstr "¥Ð¥¤¥È¥µ¥¤¥ºÃ±°Ì¤Î¥á¥â¥ê¥¢¥¯¥»¥¹¤¬ÃÙ¤¤¤³¤È¤ò¹Íθ¤¹¤ë" + + #: config/h8300/h8300.h:129 + msgid "Enable linker relaxing" + msgstr "¥ê¥ó¥«¤Î -relax ¥ª¥×¥·¥ç¥ó¤òÍ­¸ú¤Ë¤¹¤ë" + + #: config/h8300/h8300.h:131 + msgid "Generate H8/300H code" + msgstr "H8/300H ¥³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/h8300/h8300.h:132 + msgid "Do not generate H8/300H code" + msgstr "H8/300H ¥³¡¼¥É¤òÀ¸À®¤·¤Ê¤¤" + + #: config/h8300/h8300.h:133 + msgid "Use H8/300 alignment rules" + msgstr "H8/300 ¥¢¥é¥¤¥ó¥á¥ó¥Èµ¬Â§¤ò»ÈÍѤ¹¤ë" + + #: config/i370/i370-c.c:54 + msgid "junk at end of #pragma map" + msgstr "#pragma map ¤Î½ª¤ê¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹" + + #: config/i370/i370-c.c:60 + msgid "malformed #pragma map, ignored" + msgstr "¤ª¤«¤·¤Ê #pragma map¡¢Ìµ»ë¤µ¤ì¤Þ¤·¤¿" + + #: config/i370/i370.c:897 + msgid "real name is too long - alias ignored" + msgstr "ËÜÍè¤Î̾Á°¤¬Ä¹¤¹¤®¤Þ¤¹ - ÊÌ̾¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿" + + #: config/i370/i370.c:902 + msgid "alias name is too long - alias ignored" + msgstr "ÊÌ̾¤¬Ä¹¤¹¤®¤Þ¤¹ - ÊÌ̾¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿" + + #: config/i370/i370.c:1173 + msgid "internal error--no jump follows compare:" + msgstr "" + + #. Macro to define tables used to set the flags. This is a list in braces + #. of pairs in braces, each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/i370/i370.h:63 + msgid "Generate char instructions" + msgstr "ʸ»úÌ¿Îá¤òÀ¸À®¤¹¤ë" + + #: config/i370/i370.h:64 + msgid "Do not generate char instructions" + msgstr "ʸ»úÌ¿Îá¤òÀ¸À®¤·¤Ê¤¤" + + #: config/i386/cygwin.h:51 + msgid "Use the Cygwin interface" + msgstr "Cygwin ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤ò»ÈÍѤ¹¤ë" + + #: config/i386/cygwin.h:53 + msgid "Use the Mingw32 interface" + msgstr "Mingw32 ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤ò»ÈÍѤ¹¤ë" + + #: config/i386/cygwin.h:54 + msgid "Create GUI application" + msgstr "GUI ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤òºî¤ë" + + #: config/i386/cygwin.h:55 + msgid "Don't set Windows defines" + msgstr "Windows ¤Î define ¤òÀßÄꤷ¤Ê¤¤" + + #: config/i386/cygwin.h:56 + msgid "Set Windows defines" + msgstr "Windows ¤Î define ¤òÀßÄꤹ¤ë" + + #: config/i386/cygwin.h:58 + msgid "Create console application" + msgstr "¥³¥ó¥½¡¼¥ë¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤òºî¤ë" + + #: config/i386/cygwin.h:59 config/i386/win32.h:59 + msgid "Generate code for a DLL" + msgstr "DLL ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/i386/cygwin.h:61 config/i386/win32.h:61 + msgid "Ignore dllimport for functions" + msgstr "´Ø¿ô¤Ø¤Î dllimport ¤ò̵»ë¤¹¤ë" + + #: config/i386/cygwin.h:63 + msgid "Use Mingw-specific thread support" + msgstr "Mingw ¸ÇÍ­¤Î¥¹¥ì¥Ã¥É¥µ¥Ý¡¼¥È¤ò»ÈÍѤ¹¤ë" + + #: config/i386/cygwin.h:257 + #, c-format + msgid "-f%s ignored for target (all code is position independent)" + msgstr "-f%s ¤Ï¥¿¡¼¥²¥Ã¥È¤Ç̵»ë¤µ¤ì¤Þ¤¹ (Á´¤Æ¤Î¥³¡¼¥É¤Ï°ÌÃÖÈó°Í¸¤Ç¤¹)" + + #: config/i386/dgux.h:60 + msgid "Retain standard MXDB information" + msgstr "ɸ½à MXDB ¾ðÊó¤òÊÝ»ý¤¹¤ë" + + #: config/i386/dgux.h:62 + msgid "Retain legend information" + msgstr "legend ¾ðÊó¤ò°Ý»ý¤¹¤ë" + + #: config/i386/dgux.h:65 + msgid "Generate external legend information" + msgstr "³°Éô legend ¾ðÊó¤òÀ¸À®¤¹¤ë" + + #: config/i386/dgux.h:67 + msgid "Emit identifying info in .s file" + msgstr ".s ¥Õ¥¡¥¤¥ëÆâ¤Ë¼±Ê̻ҾðÊó¤òÁ÷½Ð¤¹¤ë" + + #: config/i386/dgux.h:69 + msgid "Warn when a function arg is a structure" + msgstr "´Ø¿ô¤Î°ú¿ô¤¬¹½Â¤ÂΤÀ¤Ã¤¿¤é·Ù¹ð¤¹¤ë" + + #: config/i386/dgux.h:252 + msgid "argument is a structure" + msgstr "°ú¿ô¤¬¹½Â¤ÂΤǤ¹" + + #: config/i386/djgpp.h:201 + #, fuzzy + msgid "-mbnu210 is ignored (option is obsolete)" + msgstr "-mbnu210 ¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿(ÇѤ줿¥ª¥×¥·¥ç¥ó¤Ç¤¹)" + + #: config/i386/i386.c:921 + #, fuzzy, c-format + msgid "code model %s not supported in PIC mode" + msgstr "-mcmodel= ¤Ï 32 bit ¥·¥¹¥Æ¥à¾å¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó" + + #: config/i386/i386.c:931 config/sparc/sparc.c:346 + #, c-format + msgid "bad value (%s) for -mcmodel= switch" + msgstr "-mcmodel= ¥¹¥¤¥Ã¥Á¤Ë¤È¤Ã¤ÆÉÔÀµ¤ÊÃÍ (%s)" + + #: config/i386/i386.c:946 + #, fuzzy, c-format + msgid "bad value (%s) for -masm= switch" + msgstr "-mabi= ¥¹¥¤¥Ã¥Á¤ËÂФ¹¤ëÉÔÀµ¤ÊÃÍ (%s)" + + #: config/i386/i386.c:949 + #, fuzzy, c-format + msgid "code model `%s' not supported in the %s bit mode" + msgstr "-mcmodel= ¤Ï 32 bit ¥·¥¹¥Æ¥à¾å¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó" + + #: config/i386/i386.c:952 + #, fuzzy + msgid "code model `large' not supported yet" + msgstr "`%s' ¤Ï %s ¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó" + + #: config/i386/i386.c:954 + #, c-format + msgid "%i-bit mode not compiled in" + msgstr "" + + #: config/i386/i386.c:984 config/mips/mips.c:4972 + #, c-format + msgid "bad value (%s) for -march= switch" + msgstr "-march= ¥¹¥¤¥Ã¥Á¤ËÂФ¹¤ëÉÔÀµ¤ÊÃÍ (%s)" + + #: config/i386/i386.c:995 config/mips/mips.c:4928 + #, c-format + msgid "bad value (%s) for -mcpu= switch" + msgstr "-mcpu= ¥¹¥¤¥Ã¥Á¤ËÂФ¹¤ëÉÔÀµ¤ÊÃÍ (%s)" + + #: config/i386/i386.c:1014 + #, c-format + msgid "-mregparm=%d is not between 0 and %d" + msgstr "-mregparm=%d ¤¬ 0 ¤«¤é %d ¤Î´Ö¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: config/i386/i386.c:1027 + #, fuzzy + msgid "-malign-loops is obsolete, use -falign-loops" + msgstr "-malign-loops=%d ¤¬ 0 ¤«¤é %d ¤Î´Ö¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: config/i386/i386.c:1032 config/i386/i386.c:1045 config/i386/i386.c:1058 + #, c-format + msgid "-malign-loops=%d is not between 0 and %d" + msgstr "-malign-loops=%d ¤¬ 0 ¤«¤é %d ¤Î´Ö¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: config/i386/i386.c:1040 + #, fuzzy + msgid "-malign-jumps is obsolete, use -falign-jumps" + msgstr "-malign-jumps=%d ¤¬ 0 ¤«¤é %d ¤Î´Ö¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: config/i386/i386.c:1053 + #, fuzzy + msgid "-malign-functions is obsolete, use -falign-functions" + msgstr "-malign-functions=%d ¤¬ 0 ¤«¤é %d ¤Î´Ö¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: config/i386/i386.c:1092 + #, fuzzy, c-format + msgid "-mpreferred-stack-boundary=%d is not between %d and 12" + msgstr "-mpreferred-stack-boundary=%d ¤¬ 2 ¤«¤é 31 ¤Î´Ö¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: config/i386/i386.c:1104 + #, c-format + msgid "-mbranch-cost=%d is not between 0 and 5" + msgstr "-mbranch-cost=%d ¤¬ 0 ¤«¤é 5 ¤Î´Ö¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: config/i386/i386.c:1121 + msgid "-malign-double makes no sense in the 64bit mode" + msgstr "" + + #: config/i386/i386.c:1123 + #, fuzzy + msgid "-mrtd calling convention not supported in the 64bit mode" + msgstr "PIC ¥³¡¼¥ÉÀ¸À®¤Ï²Äȼ¹Իþ¥â¥Ç¥ë¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó\n" + + #: config/i386/i386.c:1139 config/i386/i386.c:1150 + #, fuzzy + msgid "SSE instruction set disabled, using 387 arithmetics" + msgstr "´Ø¿ô¥Ý¥¤¥ó¥¿¤¬·×»»¤Ç»È¤ï¤ì¤Þ¤·¤¿" + + #: config/i386/i386.c:1155 + #, fuzzy + msgid "387 instruction set disabled, using SSE arithmetics" + msgstr "´Ø¿ô¥Ý¥¤¥ó¥¿¤¬·×»»¤Ç»È¤ï¤ì¤Þ¤·¤¿" + + #: config/i386/i386.c:1162 + #, fuzzy, c-format + msgid "bad value (%s) for -mfpmath= switch" + msgstr "-march= ¥¹¥¤¥Ã¥Á¤ËÂФ¹¤ëÉÔÀµ¤ÊÃÍ (%s)" + + #: config/i386/i386.c:1289 + #, fuzzy, c-format + msgid "`%s' attribute requires an integer constant argument" + msgstr "3 ¤Ä¤Î 'l' ÀÜÈø¼­¤¬À°¿ôÄê¿ô¤Ë¤Ä¤¤¤Æ¤¤¤Þ¤¹" + + #: config/i386/i386.c:1295 + #, fuzzy, c-format + msgid "argument to `%s' attribute larger than %d" + msgstr "ÄêµÁ¤Î¸å¤Ç `%s' °À­¤ò¥»¥Ã¥È¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó" + + #: config/i386/i386.c:5317 + msgid "invalid UNSPEC as operand" + msgstr "¥ª¥Ú¥é¥ó¥É¤È¤·¤ÆÌµ¸ú¤Ê UNSPEC" + + #: config/i386/i386.c:5518 + msgid "extended registers have no high halves" + msgstr "" + + #: config/i386/i386.c:5533 + msgid "unsupported operand size for extended register" + msgstr "" + + #: config/i386/i386.c:5778 + msgid "operand is neither a constant nor a condition code, invalid operand code 'c'" + msgstr "" + + #: config/i386/i386.c:9729 + #, fuzzy + msgid "unknown insn mode" + msgstr "ÉÔÌÀ¤Ê¥Þ¥·¥ó¥â¡¼¥É `%s'" + + #. @@@ better error message + #: config/i386/i386.c:11608 config/i386/i386.c:11641 config/i386/i386.c:11778 + msgid "selector must be an immediate" + msgstr "¥»¥ì¥¯¥¿¤Ï¨ÃͤǤʤ±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #. @@@ better error message + #: config/i386/i386.c:11809 config/i386/i386.c:11837 + msgid "mask must be an immediate" + msgstr "¥Þ¥¹¥¯¤Ï¨ÃͤǤʤ±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: config/i386/i386.h:45 config/mips/mips.h:186 + #, fuzzy + msgid "half-pic init called on systems that don't support it" + msgstr "half-pic ½é´ü²½¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Ê¤¤¥·¥¹¥Æ¥à¤Ç¸Æ¤Ó½Ð¤µ¤ì¤Þ¤·¤¿¡£" + + #. Deprecated. + #: config/i386/i386.h:297 + msgid "Alternate calling convention" + msgstr "¸Æ¤Ó½Ð¤·µ¬Ìó¤òÆþ¤ìÂØ¤¨¤ë" + + #: config/i386/i386.h:299 config/m68k/m68k.h:180 config/ns32k/ns32k.h:106 + msgid "Use normal calling convention" + msgstr "ÉáÄ̤θƤӽФ·µ¬Ìó¤ò»È¤¦" + + #: config/i386/i386.h:301 + msgid "Align some doubles on dword boundary" + msgstr "double ¤ò dword ¶­³¦¤Ë¥¢¥é¥¤¥ó¥á¥ó¥È¤¹¤ë" + + #: config/i386/i386.h:303 + msgid "Align doubles on word boundary" + msgstr "double ¤ò word ¶­³¦¤Ë¥¢¥é¥¤¥ó¥á¥ó¥È¤¹¤ë" + + #: config/i386/i386.h:305 + msgid "Uninitialized locals in .bss" + msgstr ".bss ¤Ë¤¢¤ë¥í¡¼¥«¥ë¤Ê¤â¤Î¤Ï½é´ü²½¤µ¤ì¤Ê¤¤" + + #: config/i386/i386.h:307 + msgid "Uninitialized locals in .data" + msgstr ".data ¤Ë¤¢¤ë¥í¡¼¥«¥ë¤Ê¤â¤Î¤Ï½é´ü²½¤µ¤ì¤Ê¤¤" + + #: config/i386/i386.h:309 config/m68k/linux-aout.h:45 config/m68k/linux.h:50 + msgid "Use IEEE math for fp comparisons" + msgstr "ÉâÆ°¾®¿ôÅÀÈæ³Ó¤Ë IEEE µ¬³Ê¤ò»È¤¦" + + #: config/i386/i386.h:311 + msgid "Do not use IEEE math for fp comparisons" + msgstr "ÉâÆ°¾®¿ôÅÀÈæ³Ó¤Ë IEEE µ¬³Ê¤ò»È¤ï¤Ê¤¤" + + #: config/i386/i386.h:313 + msgid "Return values of functions in FPU registers" + msgstr "FPU ¥ì¥¸¥¹¥¿Æâ¤Îµ¡Ç½¤ÎÃͤòÊÖ¤¹" + + #: config/i386/i386.h:315 + msgid "Do not return values of functions in FPU registers" + msgstr "FPU ¥ì¥¸¥¹¥¿Æâ¤Îµ¡Ç½¤ÎÃͤòÊÖ¤µ¤Ê¤¤" + + #: config/i386/i386.h:317 + msgid "Do not generate sin, cos, sqrt for FPU" + msgstr "FPU ÍѤΠsin, cos, sqrt ¤òÀ¸À®¤·¤Ê¤¤" + + #: config/i386/i386.h:319 + msgid "Generate sin, cos, sqrt for FPU" + msgstr "FPU ÍѤΠsin, cos, sqrt ¤òÀ¸À®¤¹¤ë" + + #: config/i386/i386.h:321 + msgid "Omit the frame pointer in leaf functions" + msgstr "Ëöü¤Î´Ø¿ô¤Ç¤Ï¥Õ¥ì¡¼¥à¥Ý¥¤¥ó¥¿¤ò¾Êά¤¹¤ë" + + #: config/i386/i386.h:324 + msgid "Enable stack probing" + msgstr "¥¹¥¿¥Ã¥¯Ãµº÷¤òÍ­¸ú¤Ë¤¹¤ë" + + #. undocumented + #. undocumented + #: config/i386/i386.h:329 + msgid "Align destination of the string operations" + msgstr "ʸ»úÎóÁàºî¤Î½ñ¹þ¤ßÀè¤ò¥¢¥é¥¤¥ó¥á¥ó¥È¤¹¤ë" + + #: config/i386/i386.h:331 + msgid "Do not align destination of the string operations" + msgstr "ʸ»úÎóÁàºî¤Î½ñ¹þ¤ßÀè¤ò¥¢¥é¥¤¥ó¥á¥ó¥È¤·¤Ê¤¤" + + #: config/i386/i386.h:333 + msgid "Inline all known string operations" + msgstr "´ûÃΤÎÁ´¤Æ¤Îʸ»úÎóÁàºî¤ò inline ¤Ë¤¹¤ë" + + #: config/i386/i386.h:335 + msgid "Do not inline all known string operations" + msgstr "´ûÃΤÎÁ´¤Æ¤Îʸ»úÎóÁàºî¤ò inline ¤Ë¤·¤Ê¤¤" + + #: config/i386/i386.h:337 config/i386/i386.h:342 + msgid "Use push instructions to save outgoing arguments" + msgstr "½ÐÎϤ¹¤ë°ú¿ô¤ò¥»¡¼¥Ö¤¹¤ë¤¿¤á push Ì¿Îá¤ò»È¤¦" + + #: config/i386/i386.h:339 config/i386/i386.h:344 + msgid "Do not use push instructions to save outgoing arguments" + msgstr "½ÐÎϤ¹¤ë°ú¿ô¤ò¥»¡¼¥Ö¤¹¤ë¤¿¤á¤Ë¤Ï push Ì¿Îá¤ò»È¤ï¤Ê¤¤" + + #: config/i386/i386.h:346 + #, fuzzy + msgid "Support MMX built-in functions" + msgstr "ÁȤ߹þ¤ß´Ø¿ô `%s' ¤òʤ¤¤±£¤·¤Þ¤¹" + + #: config/i386/i386.h:348 + #, fuzzy + msgid "Do not support MMX built-in functions" + msgstr "¤¤¤¯¤Ä¤«¤ÎÁȤ߹þ¤ß´Ø¿ô¤òǧ¼±¤µ¤»¤Ê¤¤" + + #: config/i386/i386.h:351 + #, fuzzy + msgid "Support 3DNow! built-in functions" + msgstr "ÁȤ߹þ¤ß´Ø¿ô `%s' ¤òʤ¤¤±£¤·¤Þ¤¹" + + #: config/i386/i386.h:354 + #, fuzzy + msgid "Do not support 3DNow! built-in functions" + msgstr "¤¤¤¯¤Ä¤«¤ÎÁȤ߹þ¤ß´Ø¿ô¤òǧ¼±¤µ¤»¤Ê¤¤" + + #: config/i386/i386.h:356 + msgid "Support MMX and SSE built-in functions and code generation" + msgstr "" + + #: config/i386/i386.h:359 + msgid "Do not support MMX and SSE built-in functions and code generation" + msgstr "" + + #: config/i386/i386.h:361 + msgid "Support MMX, SSE and SSE2 built-in functions and code generation" + msgstr "" + + #: config/i386/i386.h:364 + msgid "Do not support MMX, SSE and SSE2 built-in functions and code generation" + msgstr "" + + #: config/i386/i386.h:366 + #, fuzzy + msgid "sizeof(long double) is 16" + msgstr "sizeof(long double) ¤Ï 16 ¤È¤¹¤ë¡£" + + #: config/i386/i386.h:368 + #, fuzzy + msgid "sizeof(long double) is 12" + msgstr "sizeof(long double) ¤Ï 12 ¤È¤¹¤ë¡£" + + #: config/i386/i386.h:370 + #, fuzzy + msgid "Generate 64bit x86-64 code" + msgstr "H8/S ¥³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/i386/i386.h:372 + #, fuzzy + msgid "Generate 32bit i386 code" + msgstr "¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥ó¤Î¥³¡¼¥É¤òÀ¸À®" + + #: config/i386/i386.h:374 + msgid "Use red-zone in the x86-64 code" + msgstr "" + + #: config/i386/i386.h:376 + #, fuzzy + msgid "Do not use red-zone in the x86-64 code" + msgstr "H8/S ¥³¡¼¥É¤òÀ¸À®¤·¤Ê¤¤" + + #. This macro is similar to `TARGET_SWITCHES' but defines names of + #. command options that have values. Its definition is an + #. initializer with a subgrouping for each command option. + #. + #. Each subgrouping contains a string constant, that defines the + #. fixed part of the option name, and the address of a variable. The + #. variable, type `char *', is set to the variable part of the given + #. option if the fixed part matches. The actual option name is made + #. by appending `-m' to the specified name. + #: config/i386/i386.h:422 config/rs6000/rs6000.h:443 config/sparc/sparc.h:685 + msgid "Schedule code for given CPU" + msgstr "½êÍ¿¤Î CPU ÍѤΥ³¡¼¥É¤ò¥¹¥±¥¸¥å¡¼¥ë¤¹¤ë" + + #: config/i386/i386.h:424 + #, fuzzy + msgid "Generate floating point mathematics using given instruction set" + msgstr "¥Ï¡¼¥É¥¦¥§¥¢ÉâÆ°¾®¿ôÅÀÌ¿Îá¤ò»ÈÍѤ¹¤ë" + + #: config/i386/i386.h:426 + msgid "Generate code for given CPU" + msgstr "½êÍ¿¤Î CPU ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/i386/i386.h:428 + msgid "Number of registers used to pass integer arguments" + msgstr "¥ì¥¸¥¹¥¿¤Î¿ô¤¬À°¿ô¤ò°ú¿ô¤òÅϤ¹¤¿¤á¤Ë»È¤ï¤ì¤ë" + + #. TARGET_DEFAULT is defined in sun*.h and isi.h, etc. + #. This macro is similar to `TARGET_SWITCHES' but defines names of + #. command options that have values. Its definition is an + #. initializer with a subgrouping for each command option. + #. + #. Each subgrouping contains a string constant, that defines the + #. fixed part of the option name, and the address of a variable. The + #. variable, type `char *', is set to the variable part of the given + #. option if the fixed part matches. The actual option name is made + #. by appending `-m' to the specified name. + #: config/i386/i386.h:430 config/m68k/m68k.h:263 + msgid "Loop code aligned to this power of 2" + msgstr "¥ë¡¼¥×¥³¡¼¥É¤ò¤³¤ÎÃÍ¤ÎÆó¾è¤Ë¥¢¥é¥¤¥ó¥á¥ó¥È¤¹¤ë" + + #: config/i386/i386.h:432 config/m68k/m68k.h:265 + msgid "Jump targets are aligned to this power of 2" + msgstr "¥¸¥ã¥ó¥×Àè¤ò¤³¤ÎÃÍ¤ÎÆó¾è¤Ë¥¢¥é¥¤¥ó¥á¥ó¥È¤¹¤ë" + + #: config/i386/i386.h:434 config/m68k/m68k.h:267 + msgid "Function starts are aligned to this power of 2" + msgstr "´Ø¿ô¤Î³«»Ï°ÌÃÖ¤ò¤³¤ÎÃÍ¤ÎÆó¾è¤Ë¥¢¥é¥¤¥ó¥á¥ó¥È¤¹¤ë" + + #: config/i386/i386.h:437 + msgid "Attempt to keep stack aligned to this power of 2" + msgstr "¤Ç¤­¤ë¤À¤±¥¹¥¿¥Ã¥¯¤ò¤³¤ÎÃÍ¤ÎÆó¾è¤Ë¥¢¥é¥¤¥ó¥á¥ó¥È¤¹¤ë" + + #: config/i386/i386.h:439 + msgid "Branches are this expensive (1-5, arbitrary units)" + msgstr "¥Ö¥é¥ó¥Á¤Î¥³¥¹¥È¤ò»Ø¼¨¤¹¤ë (1-5, Ǥ°Õ¤Î¸Ä¿ô)" + + #: config/i386/i386.h:441 + #, fuzzy + msgid "Use given x86-64 code model" + msgstr "Í¿¤¨¤é¤ì¤¿ Sparc ¥³¡¼¥É¥â¥Ç¥ë¤ò»ÈÍѤ¹¤ë" + + #: config/i386/i386.h:447 + #, fuzzy + msgid "Use given assembler dialect" + msgstr "DEC ¥¢¥»¥ó¥Ö¥éʸˡ¤ò»ÈÍѤ¹¤ë" + + #: config/i386/osf1elf.h:112 + msgid "Profiling uses mcount" + msgstr "¥×¥í¥Õ¥¡¥¤¥ë¤Ç mcount ¤òÍøÍѤ¹¤ë" + + #: config/i386/osfrose.h:60 + msgid "Emit half-PIC code" + msgstr "Ⱦ PIC ¥³¡¼¥É¤òÁ÷½Ð¤¹¤ë" + + #. intentionally undoc + #. intentionally undoc + #: config/i386/osfrose.h:67 + msgid "Emit ELF object code" + msgstr "ELF ¥ª¥Ö¥¸¥§¥¯¥È¥³¡¼¥É¤òÁ÷½Ð¤¹¤ë" + + #: config/i386/osfrose.h:69 + msgid "Emit ROSE object code" + msgstr "ROSE ¥ª¥Ö¥¸¥§¥¯¥È¥³¡¼¥É¤òÁ÷½Ð¤¹¤ë" + + #: config/i386/osfrose.h:71 + msgid "Symbols have a leading underscore" + msgstr "¥·¥ó¥Ü¥ë¤ÎƬ¤Ë¥¢¥ó¥À¡¼¥¹¥³¥¢¤ò¤Ä¤±¤ë" + + #: config/i386/osfrose.h:74 + msgid "Align to >word boundaries" + msgstr "¥ï¡¼¥É¶­³¦¤è¤êÂ礭¤á¤Ë¥¢¥é¥¤¥ó¤¹¤ë" + + #: config/i386/osfrose.h:77 + msgid "Use mcount for profiling" + msgstr "¥×¥í¥Õ¥¡¥¤¥ëÍÑ¤Ë mcount ¤òÍøÍѤ¹¤ë" + + #: config/i386/osfrose.h:79 + msgid "Use mcount_ptr for profiling" + msgstr "¥×¥í¥Õ¥¡¥¤¥ë¤Î¤¿¤á¤Ë mcount_ptr ¤òÍøÍѤ¹¤ë" + + #: config/i386/sco5.h:771 + msgid "Generate ELF output" + msgstr "ELF ½ÐÎϤòÀ¸À®¤¹¤ë" + + #: config/i386/win32.h:53 + msgid "Use Mingw32 interface" + msgstr "Mingw32 ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤ò»ÈÍѤ¹¤ë" + + #: config/i386/win32.h:55 + msgid "Use Cygwin interface" + msgstr "Cygwin ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤ò»ÈÍѤ¹¤ë" + + #: config/i386/win32.h:57 + msgid "Use bare Windows interface" + msgstr "ÁǤΠWindows ¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤ò»ÈÍѤ¹¤ë" + + #: config/i386/winnt.c:94 + #, fuzzy, c-format + msgid "`%s' attribute only applies to variables" + msgstr "`%s' °À­¤Ï·¿¤Ë¤ÏŬÍѤµ¤ì¤Þ¤»¤ó" + + #: config/i386/winnt.c:262 + #, fuzzy, c-format + msgid "`%s' declared as both exported to and imported from a DLL" + msgstr "`%s' ¤¬ DLL ¤«¤é import¡¢DLL ¤Ë export ¤ÎξÊý¤È¤·¤ÆÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #. If the environment variable DJDIR is not defined, then DJGPP is not installed correctly and GCC will quickly become confused with the default prefix settings. Report the problem now so the user doesn't receive deceptive "file not found" error messages later. + #. DJDIR is automatically defined by the DJGPP environment config file pointed to by the environment variable DJGPP. Examine DJGPP to try and figure out what's wrong. + #: config/i386/xm-djgpp.h:71 + #, fuzzy + msgid "environment variable DJGPP not defined" + msgstr "´Ä¶­ÊÑ¿ô DJGPP ¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: config/i386/xm-djgpp.h:73 + #, fuzzy, c-format + msgid "environment variable DJGPP points to missing file '%s'" + msgstr "´Ä¶­ÊÑ¿ô DJGPP ¤¬¡¢¸«¤Ä¤«¤é¤Ê¤¤¥Õ¥¡¥¤¥ë '%s' ¤ò¼¨¤·¤Æ¤¤¤Þ¤¹¡£" + + #: config/i386/xm-djgpp.h:76 + #, fuzzy, c-format + msgid "environment variable DJGPP points to corrupt file '%s'" + msgstr "´Ä¶­ÊÑ¿ô DJGPP ¤¬¡¢²õ¤ì¤¿¥Õ¥¡¥¤¥ë '%s' ¤ò¼¨¤·¤Æ¤¤¤Þ¤¹¡£" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/i860/i860.h:56 config/i860/paragon.h:28 + msgid "Generate code which uses the FPU" + msgstr "ÉâÆ°¾®¿ôÅÀ¥æ¥Ë¥Ã¥È¤òÍøÍѤ¹¤ë¥³¡¼¥É¤òÀ¸À®¤·¤Ê¤¤" + + #: config/i860/i860.h:57 config/i860/i860.h:58 config/i860/paragon.h:29 + #: config/i860/paragon.h:30 config/i860/paragon.h:31 + msgid "Do not generate code which uses the FPU" + msgstr "ÉâÆ°¾®¿ôÅÀ¥æ¥Ë¥Ã¥È¤òÍøÍѤ¹¤ë¥³¡¼¥É¤òÀ¸À®¤·¤Ê¤¤" + + #: config/i960/i960-c.c:67 + msgid "sorry, not implemented: #pragma align NAME=SIZE" + msgstr "»Äǰ¡¢¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó: #pragma align NAME=SIZE" + + #: config/i960/i960-c.c:72 + msgid "malformed #pragma align - ignored" + msgstr "¤ª¤«¤·¤Ê #pragma align - ̵»ë¤µ¤ì¤Þ¤·¤¿" + + #: config/i960/i960-c.c:110 + msgid "sorry, not implemented: #pragma noalign NAME" + msgstr "»Äǰ¡¢¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó: #pragma noalign NAME" + + #: config/i960/i960.c:1405 config/m68k/m68k.c:669 config/rs6000/rs6000.c:7674 + msgid "stack limit expression is not supported" + msgstr "¥¹¥¿¥Ã¥¯À©¸Â¼°¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #. ??? Not all ten of these architecture variations actually exist, but I + #. am not sure which are real and which aren't. + #: config/i960/i960.h:246 + msgid "Generate SA code" + msgstr "SA ¥³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/i960/i960.h:249 + msgid "Generate SB code" + msgstr "SB ¥³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #. {"sc", (TARGET_FLAG_NUMERICS|TARGET_FLAG_PROTECTED| TARGET_FLAG_MC|TARGET_FLAG_COMPLEX_ADDR), N_("Generate SC code")}, + #: config/i960/i960.h:254 + msgid "Generate KA code" + msgstr "KA ¥³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/i960/i960.h:257 + msgid "Generate KB code" + msgstr "KB ¥³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #. {"kc", (TARGET_FLAG_NUMERICS|TARGET_FLAG_PROTECTED| TARGET_FLAG_MC|TARGET_FLAG_COMPLEX_ADDR), N_("Generate KC code")}, + #: config/i960/i960.h:262 + msgid "Generate JA code" + msgstr "JA ¥³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/i960/i960.h:264 + msgid "Generate JD code" + msgstr "JD ¥³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/i960/i960.h:267 + msgid "Generate JF code" + msgstr "JF ¥³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/i960/i960.h:269 + msgid "generate RP code" + msgstr "RP ¥³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/i960/i960.h:272 + msgid "Generate MC code" + msgstr "MC ¥³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/i960/i960.h:275 + msgid "Generate CA code" + msgstr "CA ¥³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #. {"cb", (TARGET_FLAG_NUMERICS|TARGET_FLAG_C_SERIES| TARGET_FLAG_BRANCH_PREDICT|TARGET_FLAG_CODE_ALIGN), N_("Generate CB code")}, {"cc", (TARGET_FLAG_NUMERICS|TARGET_FLAG_PROTECTED| TARGET_FLAG_C_SERIES|TARGET_FLAG_BRANCH_PREDICT| TARGET_FLAG_CODE_ALIGN), N_("Generate CC code")}, + #: config/i960/i960.h:285 + msgid "Generate CF code" + msgstr "CF ¥³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/i960/i960.h:291 + msgid "Use alternate leaf function entries" + msgstr "´Ø¿ô¹àÌܤÎÂå¤ï¤ê¤òÍøÍѤ¹¤ë" + + #: config/i960/i960.h:293 + msgid "Do not use alternate leaf function entries" + msgstr "´Ø¿ô¹àÌÜËöÈø¤ÎÂå¤ï¤ê¤ÏÍøÍѤ·¤Ê¤¤" + + #: config/i960/i960.h:295 + msgid "Perform tail call optimization" + msgstr "ËöÈø¸Æ¤Ó½Ð¤·ºÇŬ²½¤ò¹Ô¤¦" + + #: config/i960/i960.h:297 + msgid "Do not perform tail call optimization" + msgstr "ËöÈø¸Æ¤Ó½Ð¤·ºÇŬ²½¤ò¹Ô¤ï¤Ê¤¤" + + #: config/i960/i960.h:299 + msgid "Use complex addressing modes" + msgstr "Ê£»¨¤Ê¥¢¥É¥ì¥·¥ó¥°¥â¡¼¥É¤ò»ÈÍѤ¹¤ë" + + #: config/i960/i960.h:301 + msgid "Do not use complex addressing modes" + msgstr "Ê£»¨¤Ê¥¢¥É¥ì¥·¥ó¥°¥â¡¼¥É¤òÍøÍѤ·¤Ê¤¤" + + #: config/i960/i960.h:303 + msgid "Align code to 8 byte boundary" + msgstr "¥³¡¼¥É¤ò 8 ¥Ð¥¤¥È¶­³¦¤Ë¥¢¥é¥¤¥ó¤¹¤ë" + + #: config/i960/i960.h:305 + msgid "Do not align code to 8 byte boundary" + msgstr "¥³¡¼¥É¤ò 8 bit ¥³¡¼¥É¤Ë¥¢¥é¥¤¥ó¤·¤Ê¤¤" + + #. {"clean-linkage", (TARGET_FLAG_CLEAN_LINKAGE), N_("Force use of prototypes")}, {"no-clean-linkage", -(TARGET_FLAG_CLEAN_LINKAGE), N_("Do not force use of prototypes")}, + #: config/i960/i960.h:311 config/i960/i960.h:313 + msgid "Enable compatibility with iC960 v2.0" + msgstr "iC960 v2.0 ¤È¤Î¸ß´¹À­¤òÍ­¸ú¤Ë¤¹¤ë" + + #: config/i960/i960.h:315 + msgid "Enable compatibility with iC960 v3.0" + msgstr "iC960 v3.0 ¤È¤Î¸ß´¹À­¤òÍ­¸ú¤Ë¤¹¤ë" + + #: config/i960/i960.h:317 config/i960/i960.h:319 + msgid "Enable compatibility with ic960 assembler" + msgstr "ic960 ¥¢¥»¥ó¥Ö¥é¤È¤Î¸ß´¹À­¤òÍ­¸ú¤Ë¤¹¤ë" + + #: config/i960/i960.h:321 + msgid "Do not permit unaligned accesses" + msgstr "¥¢¥é¥¤¥ó¤µ¤ì¤Ê¤¤¥¢¥¯¥»¥¹¤òµö²Ä¤·¤Ê¤¤" + + #: config/i960/i960.h:323 + msgid "Permit unaligned accesses" + msgstr "¥¢¥é¥¤¥ó¤µ¤ì¤Ê¤¤¥¢¥¯¥»¥¹¤òµö²Ä¤¹¤ë" + + #: config/i960/i960.h:325 + msgid "Layout types like Intel's v1.3 gcc" + msgstr "Intel ¤Î v1.3 gcc ¤ÎÍͤʥ¿¥¤¥×¤ËÇÛÃÖ¤¹¤ë" + + #: config/i960/i960.h:327 + msgid "Do not layout types like Intel's v1.3 gcc" + msgstr "Intel v1.3 gcc ¤ÎÍͤʥ¿¥¤¥×¤ÎÇÛÃÖ¤ò¹Ô¤Ê¤ï¤Ê¤¤" + + #: config/i960/i960.h:329 config/sparc/freebsd.h:80 config/sparc/linux.h:85 + #: config/sparc/linux64.h:138 + msgid "Use 64 bit long doubles" + msgstr "64 ¥Ó¥Ã¥È long double ¤ò»ÈÍѤ¹¤ë" + + #: config/i960/i960.h:331 + msgid "Enable linker relaxation" + msgstr "¥ê¥ó¥«¤Î´ËϤòÍ­¸ú¤Ë¤¹¤ë" + + #: config/i960/i960.h:333 + msgid "Do not enable linker relaxation" + msgstr "¥ê¥ó¥«¤Î´ËϤòÍ­¸ú¤Ë¤·¤Ê¤¤" + + #. Override conflicting target switch options. + #. Doesn't actually detect if more than one -mARCH option is given, but + #. does handle the case of two blatantly conflicting -mARCH options. + #: config/i960/i960.h:348 config/i960/i960.h:358 + msgid "conflicting architectures defined - using C series" + msgstr "¶¥¹ç¤¹¤ë architecture ¤¬ÄêµÁ¤µ¤ì¤Þ¤·¤¿ - C ¥·¥ê¡¼¥º»ÈÍÑ" + + #: config/i960/i960.h:353 + msgid "conflicting architectures defined - using K series" + msgstr "¶¥¹ç¤¹¤ë architecture ¤¬ÄêµÁ¤µ¤ì¤Þ¤·¤¿ - K ¥·¥ê¡¼¥º»ÈÍÑ<" + + #: config/i960/i960.h:368 + msgid "iC2.0 and iC3.0 are incompatible - using iC3.0" + msgstr "iC2.0 ¤È iC3.0 ¤È¤Ï¸ß´¹À­¤¬¤¢¤ê¤Þ¤»¤ó - iC3.0 ¤ò»ÈÍѤ·¤Þ¤¹" + + #. ??? See the LONG_DOUBLE_TYPE_SIZE definition below. + #: config/i960/i960.h:379 + #, fuzzy + msgid "the -mlong-double-64 option does not work yet" + msgstr "-mlong-double-64 ¥ª¥×¥·¥ç¥ó¤Ï¤Þ¤Àưºî¤·¤Þ¤»¤ó" + + #: config/ia64/ia64.c:3566 + msgid "ia64_print_operand: unknown code" + msgstr "ia64_print_operand: ÉÔÌÀ¤Ê¥³¡¼¥É¤Ç¤¹" + + #: config/ia64/ia64.c:3840 + msgid "value of -mfixed-range must have form REG1-REG2" + msgstr "-mfixed-range ¤ÎÃÍ¤Ï REG1-REG2 ·Á¼°¤ò»ý¤¿¤Í¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: config/ia64/ia64.c:3867 + #, c-format + msgid "%s-%s is an empty range" + msgstr "%s-%s ¤¬¶õ¤ÎÈϰϤǤ¹" + + #: config/ia64/ia64.c:3932 + msgid "cannot optimize division for both latency and throughput" + msgstr "¥ì¥¤¥Æ¥ó¥·¤È¥¹¥ë¡¼¥×¥Ã¥ÈξÊý¤Îʬ³äºÇŬ²½¤Ï¹Ô¤Ê¤¨¤Þ¤»¤ó" + + #. This macro defines names of command options to set and clear bits in + #. `target_flags'. Its definition is an initializer with a subgrouping for + #. each command option. + #: config/ia64/ia64.h:112 + msgid "Generate big endian code" + msgstr "¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥ó¤Î¥³¡¼¥É¤òÀ¸À®" + + #: config/ia64/ia64.h:114 config/mcore/mcore.h:159 + msgid "Generate little endian code" + msgstr "¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¤Î¥³¡¼¥É¤òÀ¸À®" + + #: config/ia64/ia64.h:116 + msgid "Generate code for GNU as" + msgstr "GNU as ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/ia64/ia64.h:118 + msgid "Generate code for Intel as" + msgstr "Intel as ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/ia64/ia64.h:120 + msgid "Generate code for GNU ld" + msgstr "GNU ld ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/ia64/ia64.h:122 + msgid "Generate code for Intel ld" + msgstr "Intel ld ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/ia64/ia64.h:124 + msgid "Generate code without GP reg" + msgstr "GP ¥ì¥¸¥¹¥¿ÉÔ»ÈÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/ia64/ia64.h:126 + msgid "Emit stop bits before and after volatile extended asms" + msgstr "³ÈÄ¥¥¢¥»¥ó¥Ö¥ê volatile ¤ÎÁ°¸å¤Ë stop ¥Ó¥Ã¥È¤òÁ÷½Ð¤¹¤ë" + + #: config/ia64/ia64.h:128 + msgid "Don't emit stop bits before and after volatile extended asms" + msgstr "³ÈÄ¥¥¢¥»¥ó¥Ö¥ê volatile ¤ÎÁ°¸å¤Ë stop ¥Ó¥Ã¥È¤òÁ÷½Ð¤¹¤ë" + + #: config/ia64/ia64.h:130 + msgid "Emit code for Itanium (TM) processor B step" + msgstr "Itanium (TM) ¥×¥í¥»¥Ã¥µ B step ÍÑ¥³¡¼¥É¤òÁ÷½Ð¤¹¤ë" + + #: config/ia64/ia64.h:132 + msgid "Use in/loc/out register names" + msgstr "in/loc/out ¥ì¥¸¥¹¥¿Ì¾¤ò»ÈÍѤ¹¤ë" + + #: config/ia64/ia64.h:134 + msgid "Disable use of sdata/scommon/sbss" + msgstr "sdata/scommon/sbss ¤Î»ÈÍѤò̵¸ú¤Ë¤¹¤ë" + + #: config/ia64/ia64.h:136 + msgid "Enable use of sdata/scommon/sbss" + msgstr "sdata/scommon/sbss ¤Î»ÈÍѤòÍ­¸ú¤Ë¤¹¤ë" + + #: config/ia64/ia64.h:138 + msgid "gp is constant (but save/restore gp on indirect calls)" + msgstr "gp ¤òÄê¿ô¤È¤¹¤ë¡Êâ¡¢´ÖÀܸƤӽФ·¤Ç¤Ï gp ¤ò save/restore ¤¹¤ë¡Ë" + + #: config/ia64/ia64.h:140 + msgid "Generate self-relocatable code" + msgstr "¼«¸ÊºÆÇÛÃÖ²Äǽ¥³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/ia64/ia64.h:142 + msgid "Generate inline division, optimize for latency" + msgstr "¥ì¥¤¥Æ¥ó¥·¤òºÇŬ²½¤¹¤ë¥¤¥ó¥é¥¤¥ó¶èʬ¤òÀ¸À®¤¹¤ë" + + #: config/ia64/ia64.h:144 + msgid "Generate inline division, optimize for throughput" + msgstr "¥¹¥ë¡¼¥×¥Ã¥È¤òºÇŬ²½¤¹¤ë¥¤¥ó¥é¥¤¥ó¶èʬ¤òÀ¸À®¤¹¤ë" + + #: config/ia64/ia64.h:146 + msgid "Enable Dwarf 2 line debug info via GNU as" + msgstr "GNU as ¤òÄ̤¸¤¿ Dwarf2 ¤Î¹Ô¥Ç¥Ð¥Ã¥°¤òÍ­¸ú¤Ë¤¹¤ë" + + #: config/ia64/ia64.h:148 + msgid "Disable Dwarf 2 line debug info via GNU as" + msgstr "GNU as ¤òÄ̤¸¤¿ Dwarf2 ¤Î¹Ô¥Ç¥Ð¥Ã¥°¤ò̵¸ú¤Ë¤¹¤ë" + + #: config/ia64/ia64.h:176 + #, fuzzy + msgid "Specify range of registers to make fixed" + msgstr "¸ÇÄꤹ¤ë¤¿¤á¤Î¥ì¥¸¥¹¥¿¤ÎÈϰϤò»ØÄꤹ¤ë" + + #: config/m32r/m32r.c:130 + #, c-format + msgid "bad value (%s) for -mmodel switch" + msgstr "-mmodel ¥¹¥¤¥Ã¥Á¤ËÂФ¹¤ëÉÔÀµ¤ÊÃÍ (%s)" + + #: config/m32r/m32r.c:139 + #, c-format + msgid "bad value (%s) for -msdata switch" + msgstr "-msdata ¥¹¥¤¥Ã¥Á¤ËÂФ¹¤ëÉÔÀµ¤ÊÃÍ (%s)" + + #: config/m32r/m32r.c:310 + #, fuzzy, c-format + msgid "invalid argument of `%s' attribute" + msgstr "`%s' ¤Î°ú¿ô¤È¤·¤ÆÌµ¸ú¤Ê·¿" + + #: config/m32r/m32r.c:408 + msgid "const objects cannot go in .sdata/.sbss" + msgstr "const ¥ª¥Ö¥¸¥§¥¯¥È¤Ï .sdata/.sbss ¤ËÃÖ¤±¤Þ¤»¤ó" + + #: config/m32r/m32r.c:2242 + #, c-format + msgid "invalid operand to %s code" + msgstr "%s ¥³¡¼¥É¤ËÂФ¹¤ë̵¸ú¤Ê¥ª¥Ú¥é¥ó¥É" + + #: config/m32r/m32r.c:2249 + #, c-format + msgid "invalid operand to %p code" + msgstr "%p ¥³¡¼¥É¤ËÂФ¹¤ë̵¸ú¤Ê¥ª¥Ú¥é¥ó¥É" + + #: config/m32r/m32r.c:2305 + msgid "bad insn for 'A'" + msgstr "" + + #: config/m32r/m32r.c:2357 + msgid "invalid operand to %T/%B code" + msgstr "%T/%B ¥³¡¼¥É¤ËÂФ¹¤ë̵¸ú¤Ê¥ª¥Ú¥é¥ó¥É" + + #: config/m32r/m32r.c:2380 + msgid "invalid operand to %N code" + msgstr "%N ¥³¡¼¥É¤ËÂФ¹¤ë̵¸ú¤Ê¥ª¥Ú¥é¥ó¥É" + + #: config/m32r/m32r.c:2425 + #, fuzzy + msgid "pre-increment address is not a register" + msgstr "`%d' ¥ª¥Ú¥é¥ó¥É¤¬¥ì¥¸¥¹¥¿¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: config/m32r/m32r.c:2432 + #, fuzzy + msgid "pre-decrement address is not a register" + msgstr "thumb_load_double_from_address: ¥Ù¡¼¥¹¤¬¥ì¥¸¥¹¥¿¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: config/m32r/m32r.c:2439 + msgid "post-increment address is not a register" + msgstr "" + + #: config/m32r/m32r.c:2517 config/m32r/m32r.c:2533 + #: config/rs6000/rs6000.c:10281 + #, fuzzy + msgid "bad address" + msgstr "ÉÔÀµ¤Ê¥Ø¥Ã¥À¥Ð¡¼¥¸¥ç¥ó" + + #: config/m32r/m32r.c:2538 + #, fuzzy + msgid "lo_sum not of register" + msgstr "ÉâÆ°¾®¿ôÅÀ¥ì¥¸¥¹¥¿¤òÍøÍѤ·¤Ê¤¤" + + #. { "relax", TARGET_RELAX_MASK, "" }, { "no-relax", -TARGET_RELAX_MASK, "" }, + #: config/m32r/m32r.h:241 + msgid "Display compile time statistics" + msgstr "¥³¥ó¥Ñ¥¤¥ë»þ´ÖÅý·×Ãͤòɽ¼¨¤¹¤ë" + + #: config/m32r/m32r.h:243 + msgid "Align all loops to 32 byte boundary" + msgstr "Á´¤Æ¤Î¥ë¡¼¥×¤ò 32 ¥Ð¥¤¥È¶­³¦¤Ë¥¢¥é¥¤¥ó¤¹¤ë" + + #: config/m32r/m32r.h:246 + msgid "Only issue one instruction per cycle" + msgstr "¥µ¥¤¥¯¥ëËè¤Ë°ì¤Ä¤ÎÌ¿Îá¤À¤±¤òȯ¹Ô¤¹¤ë" + + #: config/m32r/m32r.h:249 + msgid "Prefer branches over conditional execution" + msgstr "¾ò·ï¤Î¼Â¹Ô¤è¤ê¤Ïʬ´ô¤ÎÀ¸À®¤òÍ¥À褹¤ë" + + #: config/m32r/m32r.h:265 + msgid "Code size: small, medium or large" + msgstr "¥³¡¼¥É¥µ¥¤¥º: small, medium Ëô¤Ï large" + + #: config/m32r/m32r.h:267 + msgid "Small data area: none, sdata, use" + msgstr "¥¹¥â¡¼¥ë¥Ç¡¼¥¿Îΰè: none, sdata, use" + + #: config/m68hc11/m68hc11.c:236 + #, c-format + msgid "-f%s ignored for 68HC11/68HC12 (not supported)" + msgstr "-f%s ¤Ï 68HC11/68HC12 ÍѤȤ·¤Æ¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿ (¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó)" + + #. !!!! SCz wrong here. + #: config/m68hc11/m68hc11.c:3031 config/m68hc11/m68hc11.c:3405 + msgid "move insn not handled" + msgstr "" + + #: config/m68hc11/m68hc11.c:3251 config/m68hc11/m68hc11.c:3335 + #: config/m68hc11/m68hc11.c:3608 + #, fuzzy + msgid "invalid register in the move instruction" + msgstr "`%s' ¤ËÂФ¹¤ë¥ì¥¸¥¹¥¿Ì¾¤È¤·¤ÆÌµ¸ú¤Ç¤¹" + + #: config/m68hc11/m68hc11.c:3285 + #, fuzzy + msgid "invalid operand in the instruction" + msgstr "%s ¥³¡¼¥É¤ËÂФ¹¤ë̵¸ú¤Ê¥ª¥Ú¥é¥ó¥É" + + #: config/m68hc11/m68hc11.c:3582 + #, fuzzy + msgid "invalid register in the instruction" + msgstr "`%s' ¤ËÂФ¹¤ë¥ì¥¸¥¹¥¿Ì¾¤È¤·¤ÆÌµ¸ú¤Ç¤¹" + + #: config/m68hc11/m68hc11.c:3615 + #, fuzzy + msgid "operand 1 must be a hard register" + msgstr "`%d' ¥ª¥Ú¥é¥ó¥É¤¬¥ì¥¸¥¹¥¿¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: config/m68hc11/m68hc11.c:3632 + #, fuzzy + msgid "invalid rotate insn" + msgstr "²¾°ú¿ô `%s' ¤Ï̵¸ú¤Ç¤¹" + + #: config/m68hc11/m68hc11.c:4052 + msgid "registers IX, IY and Z used in the same INSN" + msgstr "" + + #: config/m68hc11/m68hc11.c:4372 config/m68hc11/m68hc11.c:4677 + msgid "cannot do z-register replacement" + msgstr "" + + #: config/m68hc11/m68hc11.c:4726 + #, fuzzy + msgid "invalid Z register replacement for insn" + msgstr "`%s' ¤ËÂФ¹¤ë¥ì¥¸¥¹¥¿Ì¾¤È¤·¤ÆÌµ¸ú¤Ç¤¹" + + #. Macro to define tables used to set the flags. This is a list in braces of + #. pairs in braces, each pair being { "NAME", VALUE } where VALUE is the bits + #. to set or minus the bits to clear. An empty string NAME is used to + #. identify the default VALUE. + #: config/m68hc11/m68hc11.h:152 + msgid "Compile with 16-bit integer mode" + msgstr "16 ¥Ó¥Ã¥ÈÀ°¿ô¥â¡¼¥É¤Ç¥³¥ó¥Ñ¥¤¥ë¤¹¤ë" + + #: config/m68hc11/m68hc11.h:154 + msgid "Compile with 32-bit integer mode" + msgstr "32 ¥Ó¥Ã¥ÈÀ°¿ô¥â¡¼¥É¤Ç¥³¥ó¥Ñ¥¤¥ë¤¹¤ë" + + #: config/m68hc11/m68hc11.h:156 + msgid "Auto pre/post decrement increment allowed" + msgstr "¼«Æ° pre/post ¥Ç¥¯¥ê¥á¥ó¥È ¥¤¥ó¥¯¥ê¥á¥ó¥È¤òµöÍÆ¤¹¤ë" + + #: config/m68hc11/m68hc11.h:158 + msgid "Auto pre/post decrement increment not allowed" + msgstr "¼«Æ° pre/post ¥Ç¥¯¥ê¥á¥ó¥È ¥¤¥ó¥¯¥ê¥á¥ó¥È¤òµöÍÆ¤·¤Ê¤¤" + + #: config/m68hc11/m68hc11.h:160 config/m68hc11/m68hc11.h:164 + msgid "Compile for a 68HC11" + msgstr "68HC11 ÍѤ˥³¥ó¥Ñ¥¤¥ë¤¹¤ë" + + #: config/m68hc11/m68hc11.h:162 config/m68hc11/m68hc11.h:166 + msgid "Compile for a 68HC12" + msgstr "68HC12 ÍѤ˥³¥ó¥Ñ¥¤¥ë¤¹¤ë" + + #. This macro is similar to `TARGET_SWITCHES' but defines names of + #. command options that have values. Its definition is an + #. initializer with a subgrouping for each command option. + #. + #. Each subgrouping contains a string constant, that defines the + #. fixed part of the option name, and the address of a variable. The + #. variable, type `char *', is set to the variable part of the given + #. option if the fixed part matches. The actual option name is made + #. by appending `-m' to the specified name. + #: config/m68hc11/m68hc11.h:180 + msgid "Specify the register allocation order" + msgstr "¥ì¥¸¥¹¥¿³ÎÊݽç¤ò»ØÄꤹ¤ë" + + #: config/m68hc11/m68hc11.h:182 + msgid "Indicate the number of soft registers available" + msgstr "ÍøÍѲÄǽ¥½¥Õ¥È¥ì¥¸¥¹¥¿¤Î¿ô¤ò¼¨¤¹" + + #: config/m68k/m68k.c:150 + #, c-format + msgid "-malign-loops=%d is not between 1 and %d" + msgstr "-malign-loops=%d ¤¬ 1 ¤«¤é %d ¤Î´Ö¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤»¤ó" + + #: config/m68k/m68k.c:161 + #, c-format + msgid "-malign-jumps=%d is not between 1 and %d" + msgstr "-malign-jumps=%d ¤¬ 1 ¤«¤é %d ¤Î´Ö¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤»¤ó" + + #: config/m68k/m68k.c:172 + #, c-format + msgid "-malign-functions=%d is not between 1 and %d" + msgstr "-malign-functions=%d ¤¬ 1 ¤«¤é %d ¤Î´Ö¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤»¤ó" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/m68k/m68k.h:162 config/m68k/m68k.h:164 + #, fuzzy + msgid "Generate code for a 68020" + msgstr "c2 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/m68k/m68k.h:169 config/m68k/m68k.h:172 + #, fuzzy + msgid "Generate code for a 68000" + msgstr "DLL ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/m68k/m68k.h:174 + #, fuzzy + msgid "Use the bit-field instructions" + msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥ÉÌ¿Îá¤ò»ÈÍѤ¹¤ë" + + #: config/m68k/m68k.h:176 + #, fuzzy + msgid "Do not use the bit-field instructions" + msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥ÉÌ¿Îá¤ò»ÈÍѤ·¤Ê¤¤" + + #: config/m68k/m68k.h:178 + #, fuzzy + msgid "Use different calling convention using 'rtd'" + msgstr "ÉáÄ̤θƤӽФ·µ¬Ìó¤ò»È¤¦" + + #: config/m68k/m68k.h:182 + msgid "Consider type `int' to be 16 bits wide" + msgstr "" + + #: config/m68k/m68k.h:184 + msgid "Consider type `int' to be 32 bits wide" + msgstr "" + + #: config/m68k/m68k.h:186 + #, fuzzy + msgid "Generate code for a Sun FPA" + msgstr "DLL ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/m68k/m68k.h:189 + #, fuzzy + msgid "Do not generate code for a Sun FPA" + msgstr "ÉâÆ°¾®¿ôÅÀ¥æ¥Ë¥Ã¥È¤òÍøÍѤ¹¤ë¥³¡¼¥É¤òÀ¸À®¤·¤Ê¤¤" + + #: config/m68k/m68k.h:191 config/m68k/m68k.h:193 + #, fuzzy + msgid "Generate code for a Sun Sky board" + msgstr "DLL ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/m68k/m68k.h:195 + #, fuzzy + msgid "Do not use Sky linkage convention" + msgstr "¥ê¥ó¥«¤Î´ËϤòÍ­¸ú¤Ë¤·¤Ê¤¤" + + #: config/m68k/m68k.h:197 + #, fuzzy + msgid "Generate code for a 68881" + msgstr "c1 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/m68k/m68k.h:200 + msgid "Generate code with library calls for floating point" + msgstr "" + + #: config/m68k/m68k.h:202 + #, fuzzy + msgid "Generate code for a 68040, without any new instructions" + msgstr "update Ì¿Îá¤È°ì½ï¤Ë¥í¡¼¥É/¥¹¥È¥¢Ì¿Îá¤òÀ¸À®¤¹¤ë" + + #: config/m68k/m68k.h:205 + #, fuzzy + msgid "Generate code for a 68060, without any new instructions" + msgstr "update Ì¿Îá¤È°ì½ï¤Ë¥í¡¼¥É/¥¹¥È¥¢Ì¿Îá¤òÀ¸À®¤¹¤ë" + + #: config/m68k/m68k.h:209 + #, fuzzy + msgid "Generate code for a 68030" + msgstr "DLL ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/m68k/m68k.h:212 + #, fuzzy + msgid "Generate code for a 68040" + msgstr "11/40 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/m68k/m68k.h:216 + #, fuzzy + msgid "Generate code for a 68060" + msgstr "DLL ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/m68k/m68k.h:221 + #, fuzzy + msgid "Generate code for a 520X" + msgstr "c2 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/m68k/m68k.h:224 + #, fuzzy + msgid "Generate code for a 68851" + msgstr "c1 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/m68k/m68k.h:226 + #, fuzzy + msgid "Do no generate code for a 68851" + msgstr "c1 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/m68k/m68k.h:229 + #, fuzzy + msgid "Generate code for a 68302" + msgstr "c32 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/m68k/m68k.h:232 + #, fuzzy + msgid "Generate code for a 68332" + msgstr "c32 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/m68k/m68k.h:236 + #, fuzzy + msgid "Generate code for a cpu32" + msgstr "c32 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/m68k/m68k.h:239 + #, fuzzy + msgid "Align variables on a 32-bit boundary" + msgstr "Á´¤Æ¤Î¥ë¡¼¥×¤ò 32 ¥Ð¥¤¥È¶­³¦¤Ë¥¢¥é¥¤¥ó¤¹¤ë" + + #: config/m68k/m68k.h:241 + #, fuzzy + msgid "Align variables on a 16-bit boundary" + msgstr "double ¤ò word ¶­³¦¤Ë¥¢¥é¥¤¥ó¥á¥ó¥È¤¹¤ë" + + #: config/m68k/m68k.h:243 + #, fuzzy + msgid "Generate pc-relative code" + msgstr "¼«¸ÊºÆÇÛÃÖ²Äǽ¥³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/m68k/m68k.h:245 + #, fuzzy + msgid "Do not use unaligned memory references" + msgstr "¥¢¥é¥¤¥ó¤µ¤ì¤Ê¤¤¥¢¥¯¥»¥¹¤òµö²Ä¤·¤Ê¤¤" + + #: config/m68k/m68k.h:247 + #, fuzzy + msgid "Use unaligned memory references" + msgstr "¥é¡¼¥¸¥á¥â¥ê¥â¥Ç¥ë¤òÍøÍÑ" + + #. Sometimes certain combinations of command options do not make + #. sense on a particular target machine. You can define a macro + #. `OVERRIDE_OPTIONS' to take account of this. This macro, if + #. defined, is executed once just after all the command options have + #. been parsed. + #. + #. Don't use this macro to turn on various extra optimizations for + #. `-O'. That is what `OPTIMIZATION_OPTIONS' is for. + #: config/m68k/m68k.h:284 config/m68k/m68kelf.h:267 config/m68k/m68kv4.h:299 + msgid "-fPIC is not currently supported on the 68000 or 68010\n" + msgstr "º£¤Î¤È¤³¤í 68000 ¤ä 68010 ¤Ç¤Ï -fPIC ¤¬¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó\n" + + #: config/m88k/m88k.c:900 + #, fuzzy, c-format + msgid "internal gcc monitor: short-branch(%x)" + msgstr "ÆâÉô gcc ¥â¥Ë¥¿: ¥·¥ç¡¼¥È¥Ö¥é¥ó¥Á(%x)" + + #: config/m88k/m88k.c:2300 + #, fuzzy + msgid "internal gcc error: Can't express symbolic location" + msgstr "ÆâÉô gcc ¥¨¥é¡¼: °ÌÃÖ¤ò¥·¥ó¥Ü¥ëɽ¸½¤Ç¤­¤Þ¤»¤ó" + + #: config/m88k/m88k.c:2582 + #, c-format + msgid "argument #%d is a structure" + msgstr "°ú¿ô #%d ¤Ï¹½Â¤ÂΤǤ¹" + + #: config/m88k/m88k.c:2882 + msgid "%R not followed by %B/C/D/E" + msgstr "%R ¤Î¸å¤Ë %B/C/D/E ¤ÏÃÖ¤±¤Þ¤»¤ó" + + #: config/m88k/m88k.c:2950 + #, c-format + msgid "invalid %x/X value" + msgstr "̵¸ú¤Ê %x/X ÃͤǤ¹" + + #: config/m88k/m88k.c:2955 + msgid "invalid %H value" + msgstr "̵¸ú¤Ê %H ÃͤǤ¹" + + #: config/m88k/m88k.c:2961 + msgid "invalid %h value" + msgstr "̵¸ú¤Ê %h ÃͤǤ¹" + + #: config/m88k/m88k.c:2967 + msgid "invalid %Q value" + msgstr "̵¸ú¤Ê %Q ÃͤǤ¹" + + #: config/m88k/m88k.c:2973 + msgid "invalid %q value" + msgstr "̵¸ú¤Ê %q ÃͤǤ¹" + + #: config/m88k/m88k.c:2979 + #, c-format + msgid "invalid %o value" + msgstr "̵¸ú¤Ê %o ÃͤǤ¹" + + #: config/m88k/m88k.c:2986 + #, c-format + msgid "invalid %p value" + msgstr "̵¸ú¤Ê %p ÃͤǤ¹" + + #: config/m88k/m88k.c:2999 config/m88k/m88k.c:3004 + #, c-format + msgid "invalid %s/S value" + msgstr "̵¸ú¤Ê %s/S ÃͤǤ¹" + + #: config/m88k/m88k.c:3015 + msgid "invalid %P operand" + msgstr "̵¸ú¤Ê %P ¥ª¥Ú¥é¥ó¥É¤Ç¤¹" + + #: config/m88k/m88k.c:3046 + msgid "invalid %B value" + msgstr "̵¸ú¤Ê %B ÃͤǤ¹" + + #: config/m88k/m88k.c:3063 + #, c-format + msgid "invalid %C value" + msgstr "̵¸ú¤Ê %C ÃͤǤ¹" + + #: config/m88k/m88k.c:3076 + msgid "invalid %D value" + msgstr "̵¸ú¤Ê %D ÃͤǤ¹" + + #: config/m88k/m88k.c:3084 + #, c-format + msgid "invalid %E value" + msgstr "̵¸ú¤Ê %E ÃͤǤ¹" + + #: config/m88k/m88k.c:3089 + #, c-format + msgid "`%d' operand isn't a register" + msgstr "`%d' ¥ª¥Ú¥é¥ó¥É¤¬¥ì¥¸¥¹¥¿¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: config/m88k/m88k.c:3100 + msgid "invalid %r value" + msgstr "̵¸ú¤Ê %r ÃͤǤ¹" + + #: config/m88k/m88k.c:3107 + msgid "operand is r0" + msgstr "¥ª¥Ú¥é¥ó¥É¤Ï r0 ¤Ç¤¹" + + #: config/m88k/m88k.c:3121 + msgid "operand is const_double" + msgstr "¥ª¥Ú¥é¥ó¥É¤Ï const_double ¤Ç¤¹" + + #: config/m88k/m88k.c:3140 + msgid "invalid code" + msgstr "̵¸ú¤Ê¥³¡¼¥É¤Ç¤¹" + + #. Do any checking or such that is needed after processing the -m switches. + #: config/m88k/m88k.h:277 + msgid "-mtrap-large-shift and -mhandle-large-shift are incompatible" + msgstr "-mtrap-large-shift ¤È -mhandle-large-shift ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó" + + #: config/m88k/m88k.h:299 + #, fuzzy, c-format + msgid "invalid option `-mshort-data-%s'" + msgstr "̵¸ú¤Ê¥ª¥×¥·¥ç¥ó `-mshort-data-%s'" + + #: config/m88k/m88k.h:304 + #, c-format + msgid "-mshort-data-%s is too large " + msgstr "-mshort-data-%s ¤¬Â礭¤¹¤®¤Þ¤¹¡£" + + #: config/m88k/m88k.h:306 + #, c-format + msgid "-mshort-data-%s and PIC are incompatible" + msgstr "-mshort-data-%s ¤È PIC ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó" + + #: config/mcore/mcore.c:3083 + #, fuzzy, c-format + msgid "invalid option `-mstack-increment=%s'" + msgstr "`-mstack-increment=%s' ¤Ï̵¸ú¤Ê¥ª¥×¥·¥ç¥ó¤Ç¤¹" + + #: config/mcore/mcore.h:126 + msgid "Inline constants if it can be done in 2 insns or less" + msgstr "2 Ì¿Îá°Ê²¼¤Ç¹Ô¤Ê¤¨¤ëÉÔÊѽèÍý¤ò¥¤¥ó¥é¥¤¥ó¤Ë¤¹¤ë" + + #: config/mcore/mcore.h:128 + #, fuzzy + msgid "Inline constants if it only takes 1 instruction" + msgstr "1 Ì¿Îá¤À¤±¤ò¤È¤ëÉÔÊѽèÍý¤ò¥¤¥ó¥é¥¤¥ó¤Ë¤¹¤ë" + + #: config/mcore/mcore.h:130 + msgid "Set maximum alignment to 4" + msgstr "ºÇÂ祢¥é¥¤¥ó¥á¥ó¥È¤ò 4 ¤ËÀßÄꤹ¤ë" + + #: config/mcore/mcore.h:132 + msgid "Set maximum alignment to 8" + msgstr "ºÇÂ祢¥é¥¤¥ó¥á¥ó¥È¤ò 8 ¤ËÀßÄꤹ¤ë" + + #: config/mcore/mcore.h:136 + msgid "Do not use the divide instruction" + msgstr "ʬ³äÌ¿Îá¤ò»ÈÍѤ·¤Ê¤¤" + + #: config/mcore/mcore.h:140 + msgid "Do not arbitary sized immediates in bit operations" + msgstr "¥Ó¥Ã¥È±é»»¤Ç¤Î¨ÃÍ¥µ¥¤¥º¤òÄ´Ä䤷¤Ê¤¤" + + #: config/mcore/mcore.h:142 + #, fuzzy + msgid "Always treat bit-field as int-sized" + msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤ò¾ï¤Ë int ¤Î¥µ¥¤¥º¤È¤·¤Æ°·¤¦" + + #: config/mcore/mcore.h:146 + msgid "Force functions to be aligned to a 4 byte boundary" + msgstr "´Ø¿ô¤ò¶¯À©Åª¤Ë 4 ¥Ð¥¤¥È¶­³¦¤Ë¥¢¥é¥¤¥ó¤¹¤ë" + + #: config/mcore/mcore.h:148 + msgid "Force functions to be aligned to a 2 byte boundary" + msgstr "´Ø¿ô¤ò¶¯À©Åª¤Ë 2 ¥Ð¥¤¥È¶­³¦¤Ë¥¢¥é¥¤¥ó¤¹¤ë" + + #: config/mcore/mcore.h:150 + msgid "Emit call graph information" + msgstr "¸Æ¤Ó½Ð¤·¥°¥é¥Õ¾ðÊó¤òÁ÷½Ð¤¹¤ë" + + #: config/mcore/mcore.h:154 + msgid "Prefer word accesses over byte accesses" + msgstr "¥Ð¥¤¥È¥¢¥¯¥»¥¹¤è¤ê¥ï¡¼¥É¥¢¥¯¥»¥¹¤òÁª¤Ö" + + #: config/mcore/mcore.h:165 + msgid "Generate code for the M*Core M340" + msgstr "M*Core M340 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/mcore/mcore.h:178 + msgid "Maximum amount for a single stack increment operation" + msgstr "ñ°ì¥¹¥¿¥Ã¥¯¥¤¥ó¥¯¥ê¥á¥ó¥ÈÁàºî¤ÎºÇÂçÃÍ" + + #: config/mips/mips.c:4824 + #, c-format + msgid "-mips%d not supported" + msgstr "-mips%d ¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó" + + #: config/mips/mips.c:4831 + #, c-format + msgid "bad value (%s) for -mips switch" + msgstr "-mips ¥¹¥¤¥Ã¥Á¤ËÂФ¹¤ëÉÔÀµ¤ÊÃÍ (%s)" + + #: config/mips/mips.c:4852 + #, c-format + msgid "bad value (%s) for -mabi= switch" + msgstr "-mabi= ¥¹¥¤¥Ã¥Á¤ËÂФ¹¤ëÉÔÀµ¤ÊÃÍ (%s)" + + #: config/mips/mips.c:4890 + #, c-format + msgid "-mabi=%s does not support -mips%d" + msgstr "-mabi=%s ¤Ï -mips%d ¤ò¥µ¥Ý¡¼¥È¤·¤Þ¤»¤ó" + + #: config/mips/mips.c:4907 + #, fuzzy + msgid "this target does not support the -mabi switch" + msgstr "¤³¤Î¥¿¡¼¥²¥Ã¥È¤Ï -mabi ¥¹¥¤¥Ã¥Á¤ò¥µ¥Ý¡¼¥È¤·¤Þ¤»¤ó" + + #: config/mips/mips.c:5017 + #, fuzzy, c-format + msgid "bad value (%s) for -mtune= switch" + msgstr "-mcpu= ¥¹¥¤¥Ã¥Á¤ËÂФ¹¤ëÉÔÀµ¤ÊÃÍ (%s)" + + #: config/mips/mips.c:5033 + #, fuzzy, c-format + msgid "-march=%s does not support -mips%d" + msgstr "-mabi=%s ¤Ï -mips%d ¤ò¥µ¥Ý¡¼¥È¤·¤Þ¤»¤ó" + + #: config/mips/mips.c:5040 + #, c-format + msgid "-mips%d does not support 64 bit fp registers" + msgstr "-mips%d ¤Ï 64 bit fp ¥ì¥¸¥¹¥¿¤ò¥µ¥Ý¡¼¥È¤·¤Þ¤»¤ó" + + #: config/mips/mips.c:5046 + #, c-format + msgid "-mips%d does not support 64 bit gp registers" + msgstr "-mips%d ¤Ï 64 bit gp ¥ì¥¸¥¹¥¿¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó" + + #: config/mips/mips.c:5067 + msgid "-G is incompatible with PIC code which is the default" + msgstr "-G ¤Ï¥Ç¥Õ¥©¥ë¥È¤Î PIC ¥³¡¼¥É¤È¶¦Â¸¤Ç¤­¤Þ¤»¤ó" + + #: config/mips/mips.c:5083 + msgid "-membedded-pic and -mabicalls are incompatible" + msgstr "-membedded-pic ¤È -mabicalls ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó" + + #: config/mips/mips.c:5086 + msgid "-G and -membedded-pic are incompatible" + msgstr "-G ¤È -membedded-pic ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó" + + #: config/mips/mips.c:5137 + #, fuzzy, c-format + msgid "invalid option `entry%s'" + msgstr "̵¸ú¤Ê¥ª¥×¥·¥ç¥ó `entry%s'" + + #: config/mips/mips.c:5140 + msgid "-mentry is only meaningful with -mips-16" + msgstr "-mentry ¤Ï -mips-16 ¤ò»ØÄꤷ¤¿¤È¤­¤À¤±°ÕÌ£¤ò»ý¤Á¤Þ¤¹" + + #: config/mips/mips.c:5480 + #, c-format + msgid "internal error: %%) found without a %%( in assembler pattern" + msgstr "ÆâÉô¥¨¥é¡¼: ¥¢¥»¥ó¥Ö¥é¥Ñ¥¿¡¼¥ó¤Ç %%( ¤Ê¤·¤Î %%) ¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿" + + #: config/mips/mips.c:5494 + #, c-format + msgid "internal error: %%] found without a %%[ in assembler pattern" + msgstr "ÆâÉô¥¨¥é¡¼: ¥¢¥»¥ó¥Ö¥é¥Ñ¥¿¡¼¥ó¤Ç %%[ ¤Ê¤·¤Î %%] ¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿" + + #: config/mips/mips.c:5507 + #, c-format + msgid "internal error: %%> found without a %%< in assembler pattern" + msgstr "ÆâÉô¥¨¥é¡¼: ¥¢¥»¥ó¥Ö¥é¥Ñ¥¿¡¼¥ó¤Ç %%< ¤Ê¤·¤Î %%> ¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿" + + #: config/mips/mips.c:5520 + #, c-format + msgid "internal error: %%} found without a %%{ in assembler pattern" + msgstr "ÆâÉô¥¨¥é¡¼: ¥¢¥»¥ó¥Ö¥é¥Ñ¥¿¡¼¥ó¤Ç %%{ ¤Ê¤·¤Î %%} ¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿" + + #: config/mips/mips.c:5534 + #, fuzzy, c-format + msgid "PRINT_OPERAND: unknown punctuation '%c'" + msgstr "PRINT_OPERAND: ÉÔÌÀ¤Ê¶çÆÉÅÀ '%c'" + + #: config/mips/mips.c:5543 + msgid "PRINT_OPERAND null pointer" + msgstr "PRINT_OPERAND NULL ¥Ý¥¤¥ó¥¿" + + #: config/mips/mips.c:5676 + #, c-format + msgid "invalid use of %%d, %%x, or %%X" + msgstr "̵¸ú¤ÊÍÑË¡¤Î of %%d, %%x, Ëô¤Ï %%X" + + #: config/mips/mips.c:5719 + msgid "PRINT_OPERAND_ADDRESS, null pointer" + msgstr "PRINT_OPERAND_ADDRESS, null ¥Ý¥¤¥ó¥¿" + + #: config/mips/mips.c:5943 + msgid "MIPS ECOFF format does not allow changing filenames within functions with #line" + msgstr "MIPS ECOFF ·Á¼°¤Ç¤Ï #line ¤ò»ý¤Ä´Ø¿ô¤Ç¤Î¥Õ¥¡¥¤¥ë̾Êѹ¹¤Ïµö²Ä¤µ¤ì¤Þ¤»¤ó" + + #: config/mips/mips.c:6257 + #, fuzzy + msgid "can't rewind temp file" + msgstr "%s ¤ò rewind ¤Ç¤­¤Þ¤»¤ó" + + #: config/mips/mips.c:6261 + #, fuzzy + msgid "can't write to output file" + msgstr "%s ¤Ø½ñ¤­¹þ¤á¤Þ¤»¤ó" + + #: config/mips/mips.c:6264 + #, fuzzy + msgid "can't read from temp file" + msgstr "%s ¤«¤éÆÉ¹þ¤á¤Þ¤»¤ó" + + #: config/mips/mips.c:6267 + #, fuzzy + msgid "can't close temp file" + msgstr "ÆþÎÏ¥Õ¥¡¥¤¥ë %s ¤ò close ¤Ç¤­¤Þ¤»¤ó" + + #: config/mips/mips.c:6737 + #, fuzzy, c-format + msgid "gp_offset (%ld) or end_offset (%ld) is less than zero" + msgstr "gp_offset (%ld) Ëô¤Ï end_offset (%ld) ¤¬¥¼¥í¤è¤ê¤â¾®¤µ¤¯¤Ê¤Ã¤Æ¤¤¤Þ¤¹" + + #: config/mips/mips.c:6899 + #, fuzzy, c-format + msgid "fp_offset (%ld) or end_offset (%ld) is less than zero" + msgstr "fp_offset (%ld) Ëô¤Ï end_offset (%ld) ¤¬¥¼¥í¤è¤ê¤â¾®¤µ¤¯¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£" + + #: config/mips/mips.c:8930 + #, c-format + msgid "can not handle inconsistent calls to `%s'" + msgstr "`%s' ¤Ø¤ÎÌ·½â¤·¤¿¸Æ¤Ó½Ð¤·¤òÊ᪤Ǥ­¤Þ¤»¤ó" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/mips/mips.h:368 config/mn10300/mn10300.h:64 + msgid "No default crt0.o" + msgstr "crt0.o ¤ò¥Ç¥Õ¥©¥ë¥È¤È¤·¤Ê¤¤" + + #: config/mips/mips.h:370 + msgid "Use 64-bit int type" + msgstr "64 ¥Ó¥Ã¥È int ·¿¤ò»ÈÍѤ¹¤ë" + + #: config/mips/mips.h:372 + msgid "Use 64-bit long type" + msgstr "64 ¥Ó¥Ã¥È long ·¿¤ò»ÈÍѤ¹¤ë" + + #: config/mips/mips.h:374 + msgid "Use 32-bit long type" + msgstr "32 ¥Ó¥Ã¥È long ·¿¤ò»ÈÍѤ¹¤ë" + + #: config/mips/mips.h:376 + msgid "Optimize lui/addiu address loads" + msgstr "lui/addiu ¥¢¥É¥ì¥¹¥í¡¼¥É¤òºÇŬ²½¤¹¤ë" + + #: config/mips/mips.h:378 + msgid "Don't optimize lui/addiu address loads" + msgstr "lui/addiu ¥¢¥É¥ì¥¹¥í¡¼¥É¤òºÇŬ²½¤·¤Ê¤¤" + + #: config/mips/mips.h:380 + msgid "Use MIPS as" + msgstr "MIPS as ¤òÍøÍѤ¹¤ë" + + #: config/mips/mips.h:382 + msgid "Use GNU as" + msgstr "GNU as ¤òÍøÍѤ¹¤ë" + + #: config/mips/mips.h:384 + msgid "Use symbolic register names" + msgstr "¥·¥ó¥Ü¥ê¥Ã¥¯¥ì¥¸¥¹¥¿Ì¾¤ò»ÈÍѤ¹¤ë" + + #: config/mips/mips.h:386 + msgid "Don't use symbolic register names" + msgstr "¥·¥ó¥Ü¥ê¥Ã¥¯¥ì¥¸¥¹¥¿Ì¾¤ò»ÈÍѤ·¤Ê¤¤" + + #: config/mips/mips.h:388 config/mips/mips.h:390 + msgid "Use GP relative sdata/sbss sections" + msgstr "GP ´ØÏ¢ sdata/sbss ¥»¥¯¥·¥ç¥ó¤ò»ÈÍѤ¹¤ë" + + #: config/mips/mips.h:392 config/mips/mips.h:394 + msgid "Don't use GP relative sdata/sbss sections" + msgstr "GP ´ØÏ¢ sdata/sbss ¥»¥¯¥·¥ç¥ó¤ò»ÈÍѤ·¤Ê¤¤" + + #: config/mips/mips.h:396 + msgid "Output compiler statistics" + msgstr "¥³¥ó¥Ñ¥¤¥éÅý·×¤ò½ÐÎϤ¹¤ë" + + #: config/mips/mips.h:398 + msgid "Don't output compiler statistics" + msgstr "¥³¥ó¥Ñ¥¤¥éÅý·×¤ò½ÐÎϤ·¤Ê¤¤" + + #: config/mips/mips.h:400 + msgid "Don't optimize block moves" + msgstr "¥Ö¥í¥Ã¥¯°Üư¤òºÇŬ²½¤·¤Ê¤¤" + + #: config/mips/mips.h:402 + msgid "Optimize block moves" + msgstr "¥Ö¥í¥Ã¥¯°Üư¤òºÇŬ²½¤¹¤ë" + + #: config/mips/mips.h:404 + msgid "Use mips-tfile asm postpass" + msgstr "asm ¸å²áÄø¤Ç mips-tfile ¤òÍøÍѤ¹¤ë" + + #: config/mips/mips.h:406 + msgid "Don't use mips-tfile asm postpass" + msgstr "asm ¸å²áÄø¤Ç mips-tfile ¤òÍøÍѤ·¤Ê¤¤" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of triplets in braces, + #. each triplet being { "NAME", VALUE, DOC } + #. where VALUE is the bits to set or minus the bits to clear and DOC + #. is the documentation for --help (NULL if intentionally undocumented). + #. An empty string NAME is used to identify the default VALUE. + #: config/mips/mips.h:410 config/pdp11/pdp11.h:55 + msgid "Use hardware floating point" + msgstr "¥Ï¡¼¥É¥¦¥§¥¢ÉâÆ°¾®¿ôÅÀ¤òÍøÍѤ¹¤ë" + + #: config/mips/mips.h:412 + msgid "Use 64-bit FP registers" + msgstr "64 ¥Ó¥Ã¥È FP ¥ì¥¸¥¹¥¿¤ò»ÈÍѤ¹¤ë" + + #: config/mips/mips.h:414 + msgid "Use 32-bit FP registers" + msgstr "32 ¥Ó¥Ã¥È FP ¥ì¥¸¥¹¥¿¤ò»ÈÍѤ¹¤ë" + + #: config/mips/mips.h:416 + msgid "Use 64-bit general registers" + msgstr "64 ¥Ó¥Ã¥È°ìÈ̥쥸¥¹¥¿¤ò»ÈÍѤ¹¤ë" + + #: config/mips/mips.h:418 + msgid "Use 32-bit general registers" + msgstr "32 ¥Ó¥Ã¥È°ìÈ̥쥸¥¹¥¿¤ò»ÈÍѤ¹¤ë" + + #: config/mips/mips.h:420 + msgid "Use Irix PIC" + msgstr "Irix PIC ¤òÍøÍѤ¹¤ë" + + #: config/mips/mips.h:422 + msgid "Don't use Irix PIC" + msgstr "Irix PIC ¤òÍøÍѤ·¤Ê¤¤" + + #: config/mips/mips.h:424 + msgid "Use OSF PIC" + msgstr "OSF PIC ¤òÍøÍѤ¹¤ë" + + #: config/mips/mips.h:426 + msgid "Don't use OSF PIC" + msgstr "OSF PIC ¤òÍøÍѤ·¤Ê¤¤" + + #: config/mips/mips.h:428 + msgid "Use indirect calls" + msgstr "´ÖÀܸƤӽФ·¤ò»ÈÍѤ¹¤ë" + + #: config/mips/mips.h:430 + msgid "Don't use indirect calls" + msgstr "´ÖÀܸƤӽФ·¤ò»ÈÍѤ·¤Ê¤¤" + + #: config/mips/mips.h:432 + msgid "Use embedded PIC" + msgstr "Ëä¤á¹þ¤ß PIC ¤ò»ÈÍѤ¹¤ë" + + #: config/mips/mips.h:434 + msgid "Don't use embedded PIC" + msgstr "Ëä¤á¹þ¤ß PIC ¤ò»ÈÍѤ·¤Ê¤¤" + + #: config/mips/mips.h:436 + msgid "Use ROM instead of RAM" + msgstr "RAM ¤ÎÂå¤ï¤ê¤Ë ROM ¤òÍøÍѤ¹¤ë" + + #: config/mips/mips.h:438 + msgid "Don't use ROM instead of RAM" + msgstr "RAM ¤ÎÂå¤ï¤ê¤Ë ROM ¤òÍøÍѤ·¤Ê¤¤" + + #: config/mips/mips.h:440 + msgid "Put uninitialized constants in ROM (needs -membedded-data)" + msgstr "̤½é´ü²½Äê¿ô¤ò ROM ¤ËÃÖ¤¯(Í× -membedded-data)" + + #: config/mips/mips.h:442 + msgid "Don't put uninitialized constants in ROM" + msgstr "̤½é´ü²½Äê¿ô¤ò ROM ¤ËÃÖ¤«¤Ê¤¤" + + #: config/mips/mips.h:444 + msgid "Use big-endian byte order" + msgstr "¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥ó¤Î¥Ð¥¤¥È½ç¤ò»ÈÍѤ¹¤ë" + + #: config/mips/mips.h:446 + msgid "Use little-endian byte order" + msgstr "¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¤Î¥Ð¥¤¥È½ç¤ò»ÈÍѤ¹¤ë" + + #: config/mips/mips.h:448 + msgid "Use single (32-bit) FP only" + msgstr "ñÀºÅÙ(32bit) FP ¤Î¤ß¤òÍøÍѤ¹¤ë" + + #: config/mips/mips.h:450 + msgid "Don't use single (32-bit) FP only" + msgstr "ñÀºÅÙ(32bit) FP °Ê³°¤âÍøÍѤ¹¤ë" + + #: config/mips/mips.h:452 + msgid "Use multiply accumulate" + msgstr "¾è»»Ì¿Îá¤ò»ÈÍѤ¹¤ë" + + #: config/mips/mips.h:454 + msgid "Don't use multiply accumulate" + msgstr "¾è»»¡¦²Ã»»Ì¿Îá¤ò»ÈÍѤ·¤Ê¤¤" + + #: config/mips/mips.h:456 config/rs6000/rs6000.h:349 + msgid "Don't generate fused multiply/add instructions" + msgstr "ÉâÆ°¾®¿ô¤Î¾è»»/²Ã»»Ì¿Îá¤òÀ¸À®¤·¤Ê¤¤" + + #: config/mips/mips.h:458 config/rs6000/rs6000.h:347 + msgid "Generate fused multiply/add instructions" + msgstr "ÉâÆ°¾®¿ô¤Î¾è»»/²Ã»»Ì¿Îá¤òÀ¸À®¤¹¤ë" + + #: config/mips/mips.h:460 + msgid "Work around early 4300 hardware bug" + msgstr "½é´ü¤Î 4300 ¥Ï¡¼¥É¥¦¥§¥¢¥Ð¥°¤ÎÂнè¤ò¹Ô¤¦" + + #: config/mips/mips.h:462 + msgid "Don't work around early 4300 hardware bug" + msgstr "½é´ü¤Î 4300 ¥Ï¡¼¥É¥¦¥§¥¢¥Ð¥°¤ÎÂнè¤ò¹Ô¤ï¤Ê¤¤" + + #: config/mips/mips.h:464 + msgid "Optimize for 3900" + msgstr "3900 ÍѤ˺ÇŬ²½¤¹¤ë" + + #: config/mips/mips.h:466 + msgid "Optimize for 4650" + msgstr "4650 ÍѤ˺ÇŬ²½¤¹¤ë" + + #: config/mips/mips.h:468 + msgid "Trap on integer divide by zero" + msgstr "À°¿ô¤Î¥¼¥í½ü»»¤ò¥È¥é¥Ã¥×¤¹¤ë" + + #: config/mips/mips.h:470 + msgid "Don't trap on integer divide by zero" + msgstr "À°¿ô¤Î¥¼¥í½ü»»¤ò¥È¥é¥Ã¥×¤·¤Ê¤¤" + + #: config/mips/mips.h:472 + msgid "Trap on integer divide overflow" + msgstr "À°¿ô½ü»»¤Î¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤ò¥È¥é¥Ã¥×¤¹¤ë" + + #: config/mips/mips.h:474 + msgid "Don't trap on integer divide overflow" + msgstr "À°¿ô½ü»»¤Î¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤ò¥È¥é¥Ã¥×¤·¤Ê¤¤" + + #. This macro is similar to `TARGET_SWITCHES' but defines names of + #. command options that have values. Its definition is an + #. initializer with a subgrouping for each command option. + #. + #. Each subgrouping contains a string constant, that defines the + #. fixed part of the option name, and the address of a variable. + #. The variable, type `char *', is set to the variable part of the + #. given option if the fixed part matches. The actual option name + #. is made by appending `-m' to the specified name. + #. + #. Here is an example which defines `-mshort-data-NUMBER'. If the + #. given option is `-mshort-data-512', the variable `m88k_short_data' + #. will be set to the string `"512"'. + #. + #. extern char *m88k_short_data; + #. #define TARGET_OPTIONS { { "short-data-", &m88k_short_data } } + #: config/mips/mips.h:607 config/mips/mips.h:609 + msgid "Specify CPU for scheduling purposes" + msgstr "Ì¿Î᥹¥±¥¸¥å¡¼¥ê¥ó¥°¤Î¤¿¤á¤Ë CPU ¤ò»ØÄꤹ¤ë" + + #: config/mips/mips.h:611 + #, fuzzy + msgid "Specify CPU for code generation purposes" + msgstr "Ì¿Î᥹¥±¥¸¥å¡¼¥ê¥ó¥°¤Î¤¿¤á¤Ë CPU ¤ò»ØÄꤹ¤ë" + + #: config/mips/mips.h:613 + #, fuzzy + msgid "Specify a Standard MIPS ISA" + msgstr "MIPS ISA ¤ò»ØÄꤹ¤ë" + + #: config/mips/mips.h:615 + msgid "Use mips16 entry/exit psuedo ops" + msgstr "mips16 ¤Î entry/exit µ¿»÷¥ª¥Ú¥é¥ó¥É¤ò»ÈÍѤ¹¤ë" + + #: config/mips/mips.h:617 + msgid "Don't use MIPS16 instructions" + msgstr "MIPS16 Ì¿Îá¤ò»ÈÍѤ·¤Ê¤¤" + + #: config/mips/mips.h:621 + #, fuzzy + msgid "Don't call any cache flush functions" + msgstr "´Ø¿ô %s ¤Ë¸Æ¤Ó½Ð¤·¤¬¤¢¤ê¤Þ¤»¤ó\n" + + #: config/mips/mips.h:623 + msgid "Specify cache flush function" + msgstr "" + + #. Output assembler code to FILE to increment profiler label # LABELNO + #. for profiling a function entry. + #: config/mips/mips.h:2750 + msgid "mips16 function profiling" + msgstr "mips16 ´Ø¿ô¥×¥í¥Õ¥¡¥¤¥ë" + + #: config/mmix/mmix.c:138 + #, fuzzy, c-format + msgid "-f%s not supported: ignored" + msgstr "`%s' ¤Ï %s ¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó" + + #: config/mmix/mmix.c:569 + #, c-format + msgid "too large function value type, needs %d registers, have only %d registers for this" + msgstr "" + + #: config/mmix/mmix.c:656 + msgid "stack frame too big" + msgstr "" + + #: config/mmix/mmix.c:684 + #, c-format + msgid "stack frame not a multiple of 8 bytes: %d" + msgstr "" + + #: config/mmix/mmix.c:1041 + #, c-format + msgid "stack frame not a multiple of octabyte: %d" + msgstr "" + + #: config/mmix/mmix.c:1209 + msgid "function_profiler support for MMIX" + msgstr "" + + #: config/mmix/mmix.c:1246 + msgid "neither varargs or stdarg in mmix_setup_incoming_varargs" + msgstr "" + + #: config/mmix/mmix.c:1252 + msgid "MMIX Internal: Last named vararg would not fit in a register" + msgstr "" + + #. FIXME: Remove when I know this trigs. + #: config/mmix/mmix.c:1575 + msgid "oops, not debugged; fixing up value:" + msgstr "" + + #: config/mmix/mmix.c:2155 config/mmix/mmix.c:2289 + msgid "MMIX Internal: Expected a CONST_INT, not this" + msgstr "" + + #: config/mmix/mmix.c:2163 config/mmix/mmix.c:2187 config/mmix/mmix.c:2306 + #, c-format + msgid "MMIX Internal: Bad register: %d" + msgstr "" + + #: config/mmix/mmix.c:2234 + msgid "MMIX Internal: Bad value for 'm', not a CONST_INT" + msgstr "" + + #: config/mmix/mmix.c:2257 + msgid "MMIX Internal: Expected a register, not this" + msgstr "" + + #: config/mmix/mmix.c:2267 + msgid "MMIX Internal: Expected a constant, not this" + msgstr "" + + #. Presumably there's a missing case above if we get here. + #: config/mmix/mmix.c:2299 + #, c-format + msgid "MMIX Internal: Missing `%c' case in mmix_print_operand" + msgstr "" + + #. We need the original here. + #: config/mmix/mmix.c:2350 + msgid "MMIX Internal: Cannot decode this operand" + msgstr "" + + #: config/mmix/mmix.c:2409 + msgid "MMIX Internal: This is not a recognized address" + msgstr "" + + #: config/mmix/mmix.c:2878 config/mmix/mmix.c:2947 + #, c-format + msgid "MMIX Internal: %s is not a shiftable int" + msgstr "" + + #: config/mmix/mmix.c:3066 + msgid "MMIX Internal: Trying to output invalidly reversed condition:" + msgstr "" + + #: config/mmix/mmix.c:3073 + msgid "MMIX Internal: What's the CC of this?" + msgstr "" + + #: config/mmix/mmix.c:3077 + msgid "MMIX Internal: What is the CC of this?" + msgstr "" + + #: config/mmix/mmix.c:3148 + #, fuzzy + msgid "MMIX Internal: This is not a constant:" + msgstr "¥Õ¥£¡¼¥ë¥É½é´üÀßÄê»Ò¤¬Äê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #. For these target macros, there is no generic documentation here. You + #. should read `Using and Porting GCC' for that. Only comments specific + #. to the MMIX target are here. + #. + #. There are however references to the specific texinfo node (comments + #. with "Node:"), so there should be little or nothing amiss. Probably + #. the opposite, since we don't have to care about old littering and + #. soon outdated generic comments. + #. Node: Driver + #. When both ABI:s work, this is how we tell them apart in code. The + #. GNU abi is implied the default. Also implied in TARGET_DEFAULT. + #. User symbols are in the same name-space as built-in symbols, but we + #. don't need the built-in symbols, so remove those and instead apply + #. stricter operand checking. Don't warn when expanding insns. + #. Pass on -mset-program-start=N and -mset-data-start=M to the linker. + #. Provide default program start 0x100 unless -mno-set-program-start. + #. Link to ELF if requested. + #. Put unused option values here. + #: config/mmix/mmix.h:136 + #, fuzzy + msgid "Set start-address of the program" + msgstr "°ì»þ¥ª¥Ö¥¸¥§¥¯¥È¤Î¥¢¥É¥ì¥¹¤ò¼è¤í¤¦¤È¤·¤Æ¤¤¤Þ¤¹" + + #: config/mmix/mmix.h:138 + msgid "Set start-address of data" + msgstr "" + + #. FIXME: Provide a way to *load* the epsilon register. + #. Kill some of these; preferrably the -mint=* ones. + #: config/mmix/mmix.h:174 + msgid "For intrinsics library: pass all parameters in registers" + msgstr "" + + #: config/mmix/mmix.h:177 + #, fuzzy + msgid "Use register stack for parameters and return value" + msgstr "°ú¿ô¤ò¥ì¥¸¥¹¥¿ÅϤ·¤Ë¤¹¤ë" + + #: config/mmix/mmix.h:179 + #, fuzzy + msgid "Use call-clobbered registers for parameters and return value" + msgstr "¸Æ¤Ó½Ð¤·¤ÇÇ˲õ¤µ¤ì¤ë¥ì¥¸¥¹¥¿¤¬¥°¥í¡¼¥Ð¥ë¥ì¥¸¥¹¥¿ÊÑ¿ô¤È¤·¤Æ»È¤ï¤ì¤Þ¤·¤¿" + + #: config/mmix/mmix.h:181 + #, fuzzy + msgid "Use epsilon-respecting floating point compare instructions" + msgstr "¥Ï¡¼¥É¥¦¥§¥¢ÉâÆ°¾®¿ôÅÀÌ¿Îá¤ò»ÈÍѤ¹¤ë" + + #: config/mmix/mmix.h:184 + msgid "Use zero-extending memory loads, not sign-extending ones" + msgstr "" + + #: config/mmix/mmix.h:187 + msgid "Generate divide results with reminder having the same sign as the divisor (not the dividend)" + msgstr "" + + #: config/mmix/mmix.h:191 + msgid "Prepend global symbols with \":\" (for use with PREFIX)" + msgstr "" + + #: config/mmix/mmix.h:193 + msgid "Do not provide a default start-address 0x100 of the program" + msgstr "" + + #: config/mmix/mmix.h:195 + msgid "Link to emit program in ELF format (rather than mmo)" + msgstr "" + + #: config/mn10300/mn10300.h:59 + msgid "Work around hardware multiply bug" + msgstr "¥Ï¡¼¥É¥¦¥§¥¢¾è»»¥Ð¥°¤ËÂн褹¤ë" + + #: config/mn10300/mn10300.h:60 + msgid "Do not work around hardware multiply bug" + msgstr "¥Ï¡¼¥É¥¦¥§¥¢¾è»»¥Ð¥°¤ËÂн褷¤Ê¤¤" + + #: config/mn10300/mn10300.h:61 + msgid "Target the AM33 processor" + msgstr "AM33 ¥×¥í¥»¥Ã¥µ¤ò¥¿¡¼¥²¥Ã¥È¤È¤¹¤ë" + + #: config/mn10300/mn10300.h:65 + #, fuzzy + msgid "Enable linker relaxations" + msgstr "¥ê¥ó¥«¤Î´ËϤòÍ­¸ú¤Ë¤¹¤ë" + + #: config/ns32k/ns32k.h:104 config/s390/s390.h:52 + msgid "Don't use hardware fp" + msgstr "¥Ï¡¼¥É¥¦¥§¥¢ÉâÆ°¾®¿ôÅÀ¤ò»ÈÍѤ·¤Ê¤¤" + + #: config/ns32k/ns32k.h:105 + msgid "Alternative calling convention" + msgstr "Ê̤θƤӽФ·µ¬Ìó¤ò»ÈÍѤ¹¤ë" + + #: config/ns32k/ns32k.h:107 + msgid "Pass some arguments in registers" + msgstr "¤¤¤¯¤Ä¤«¤Î°ú¿ô¤Ï¥ì¥¸¥¹¥¿ÅϤ·¤Ë¤¹¤ë" + + #: config/ns32k/ns32k.h:108 + msgid "Pass all arguments on stack" + msgstr "Á´¤Æ¤Î°ú¿ô¤ò¥¹¥¿¥Ã¥¯ÅϤ·¤Ë¤¹¤ë" + + #: config/ns32k/ns32k.h:109 + msgid "Optimize for 32532 cpu" + msgstr "32532 cpu ÍѤ˺ÇŬ²½¤¹¤ë" + + #: config/ns32k/ns32k.h:110 + msgid "Optimize for 32332 cpu" + msgstr "32332 cpu ÍѤ˺ÇŬ²½¤¹¤ë" + + #: config/ns32k/ns32k.h:112 + msgid "Optimize for 32032" + msgstr "32032 ÍѤ˺ÇŬ²½¤¹¤ë" + + #: config/ns32k/ns32k.h:114 + msgid "Register sb is zero. Use for absolute addressing" + msgstr "sb ¥ì¥¸¥¹¥¿¤ò¥¼¥í¤È¤¹¤ë¡£ÀäÂÐ¥¢¥É¥ì¥¹¤ò»ÈÍѤ¹¤ë" + + #: config/ns32k/ns32k.h:115 + msgid "Do not use register sb" + msgstr "sb ¥ì¥¸¥¹¥¿¤ò»ÈÍѤ·¤Ê¤¤" + + #: config/ns32k/ns32k.h:116 + #, fuzzy + msgid "Do not use bit-field instructions" + msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥ÉÌ¿Îá¤ò»ÈÍѤ·¤Ê¤¤" + + #: config/ns32k/ns32k.h:117 + #, fuzzy + msgid "Use bit-field instructions" + msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥ÉÌ¿Îá¤ò»ÈÍѤ¹¤ë" + + #: config/ns32k/ns32k.h:118 + msgid "Generate code for high memory" + msgstr "¹â°Ì¥¢¥É¥ì¥¹¥á¥â¥êÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/ns32k/ns32k.h:119 + msgid "Generate code for low memory" + msgstr "Äã°Ì¥¢¥É¥ì¥¹¥á¥â¥êÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/ns32k/ns32k.h:120 + msgid "32381 fpu" + msgstr "32381 ÉâÆ°¾®¿ôÅÀ¥æ¥Ë¥Ã¥È" + + #: config/ns32k/ns32k.h:121 + msgid "Use multiply-accumulate fp instructions" + msgstr "¾è»»-²Ã»»ÉâÆ°¾®¿ôÅÀÌ¿Îá¤ò¤ò»ÈÍѤ¹¤ë" + + #: config/ns32k/ns32k.h:123 + msgid "Do not use multiply-accumulate fp instructions" + msgstr "¾è»»-²Ã»»ÉâÆ°¾®¿ôÅÀÌ¿Îá¤ò»ÈÍѤ·¤Ê¤¤" + + #: config/ns32k/ns32k.h:124 + msgid "\"Small register classes\" kludge" + msgstr "\"¥¹¥â¡¼¥ë¥ì¥¸¥¹¥¿¥¯¥é¥¹\" ¤Î¥Ä¥®¥Ï¥®(kludge)¤ò¹Ô¤Ê¤¦" + + #: config/ns32k/ns32k.h:125 + msgid "No \"Small register classes\" kludge" + msgstr "\"¥¹¥â¡¼¥ë¥ì¥¸¥¹¥¿¥¯¥é¥¹\" ¤Î¥Ä¥®¥Ï¥®(kludge)¤ò¹Ô¤Ê¤ï¤Ê¤¤" + + #: config/pa/pa.c:179 + #, fuzzy, c-format + msgid "" + "unknown -mschedule= option (%s).\n" + "Valid options are 700, 7100, 7100LC, 7200, and 8000\n" + msgstr "" + "ÉÔÌÀ¤Ê -mschedule= ¥ª¥×¥·¥ç¥ó (%s).\n" + "Àµ¾ï¤Ê¥ª¥×¥·¥ç¥ó¤Ï 700, 7100, 7100LC, 7200, µÚ¤Ó 8000 ¤Ç¤¹\n" + + #: config/pa/pa.c:204 + #, fuzzy, c-format + msgid "" + "unknown -march= option (%s).\n" + "Valid options are 1.0, 1.1, and 2.0\n" + msgstr "" + "ÉÔÌÀ¤Ê -march= ¥ª¥×¥·¥ç¥ó (%s).\n" + "Àµ¾ï¤Ê¥ª¥×¥·¥ç¥ó¤Ï 1.0, 1.1, µÚ¤Ó 2.0\n" + + #: config/pa/pa.c:209 + msgid "PIC code generation is not supported in the portable runtime model\n" + msgstr "PIC ¥³¡¼¥ÉÀ¸À®¤Ï²Äȼ¹Իþ¥â¥Ç¥ë¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó\n" + + #: config/pa/pa.c:214 + msgid "PIC code generation is not compatible with fast indirect calls\n" + msgstr "PIC ¥³¡¼¥ÉÀ¸À®¤Ï¹â®´ÖÀܸƤӽФ·¤ÈÁêÍÆ¤ì¤Þ¤»¤ó\n" + + #: config/pa/pa.c:219 + msgid "-g is only supported when using GAS on this processor," + msgstr "-g ¤Ï¤³¤Î¥×¥í¥»¥Ã¥µ¤Ç¤Ï GAS ¤ò»ÈÍѤ¹¤ë»þ¤À¤±¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤¹" + + #: config/pa/pa.c:220 + #, fuzzy + msgid "-g option disabled" + msgstr "-g ¥ª¥×¥·¥ç¥ó¤ò̵¸ú²½¤·¤Þ¤·¤¿¡£" + + #: config/pdp11/pdp11.h:56 + msgid "Do not use hardware floating point" + msgstr "¥Ï¡¼¥É¥¦¥§¥¢ÉâÆ°¾®¿ôÅÀ¤òÍøÍѤ·¤Ê¤¤" + + #. return float result in ac0 + #: config/pdp11/pdp11.h:58 + msgid "Return floating point results in ac0" + msgstr "ÉâÆ°¾®¿ôÅÀ¤Î·ë²Ì¤ò ac0 ¤ÇÊÖ¤¹" + + #: config/pdp11/pdp11.h:59 + msgid "Return floating point results in memory" + msgstr "ÉâÆ°¾®¿ôÅÀ¤Î·ë²Ì¤ò¥á¥â¥ê¤ÇÊÖ¤¹" + + #. is 11/40 + #: config/pdp11/pdp11.h:61 + msgid "Generate code for an 11/40" + msgstr "11/40 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #. is 11/45 + #: config/pdp11/pdp11.h:64 + msgid "Generate code for an 11/45" + msgstr "11/45 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #. is 11/10 + #: config/pdp11/pdp11.h:67 + msgid "Generate code for an 11/10" + msgstr "11/10 ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #. use movstrhi for bcopy + #. use 32 bit for int + #: config/pdp11/pdp11.h:72 config/pdp11/pdp11.h:73 + msgid "Use 32 bit int" + msgstr "32 ¥Ó¥Ã¥ÈÀ°¿ô¤ò»ÈÍѤ¹¤ë" + + #: config/pdp11/pdp11.h:74 config/pdp11/pdp11.h:75 + msgid "Use 16 bit int" + msgstr "16 ¥Ó¥Ã¥ÈÀ°¿ô¤ò»ÈÍѤ¹¤ë" + + #. use 32 bit for float + #: config/pdp11/pdp11.h:77 config/pdp11/pdp11.h:78 + msgid "Use 32 bit float" + msgstr "32 ¥Ó¥Ã¥ÈÉâÆ°¾®¿ô¤ò»ÈÍѤ¹¤ë" + + #: config/pdp11/pdp11.h:79 config/pdp11/pdp11.h:80 + msgid "Use 64 bit float" + msgstr "64 ¥Ó¥Ã¥ÈÉâÆ°¾®¿ô¤ò»ÈÍѤ¹¤ë" + + #. allow abshi pattern? - can trigger "optimizations" which make code SLOW! + #. is branching expensive - on a PDP, it's actually really cheap + #. this is just to play around and check what code gcc generates + #. split instruction and data memory? + #: config/pdp11/pdp11.h:89 + msgid "Target has split I&D" + msgstr "¥¿¡¼¥²¥Ã¥È¤Ï split Ì¿Îá¤È¥Ç¡¼¥¿¥á¥â¥ê¤ò»ý¤Ä" + + #: config/pdp11/pdp11.h:90 + msgid "Target does not have split I&D" + msgstr "¥¿¡¼¥²¥Ã¥È¤Ï split Ì¿Îá¤È¥Ç¡¼¥¿¥á¥â¥ê¤ò»ý¤¿¤Ê¤¤" + + #. UNIX assembler syntax? + #: config/pdp11/pdp11.h:92 + msgid "Use UNIX assembler syntax" + msgstr "UNIX ¥¢¥»¥ó¥Ö¥éʸˡ¤ò»ÈÍѤ¹¤ë" + + #: config/pdp11/pdp11.h:93 + msgid "Use DEC assembler syntax" + msgstr "DEC ¥¢¥»¥ó¥Ö¥éʸˡ¤ò»ÈÍѤ¹¤ë" + + #: config/pj/pj.h:73 + msgid "Generate little endian data" + msgstr "¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¥Ç¡¼¥¿¤òÀ¸À®¤¹¤ë" + + #: config/pj/pj.h:75 + msgid "Generate big endian data" + msgstr "¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥ó¥Ç¡¼¥¿¤òÀ¸À®¤¹¤ë" + + #: config/pj/pj.h:77 + msgid "Turn on maintainer testing code" + msgstr "¥á¥ó¥Æ¥Ê¥Æ¥¹¥È¥³¡¼¥É¤òÍ­¸ú¤Ë¤¹¤ë" + + #: config/pj/pj.h:79 + msgid "Enable Transmeta picoJava extensions" + msgstr "Transmeta picoJava ³ÈÄ¥¤òÍ­¸ú¤Ë¤¹¤ë" + + #: config/pj/pj.h:81 + msgid "Disable Transmeta picoJava extensions" + msgstr "Transmeta picoJava ³ÈÄ¥¤ò̵¸ú¤Ë¤¹¤ë" + + #: config/pj/pj.h:83 + msgid "Disable reorganization pass" + msgstr "ºÆÊÔÀ®¹©Äø¤ò̵¸ú¤Ë¤¹¤ë" + + #: config/romp/romp.c:682 + #, c-format + msgid "invalid %%B value" + msgstr "̵¸ú¤Ê %%B ÃÍ" + + #: config/romp/romp.c:709 config/rs6000/rs6000.c:5782 + #, c-format + msgid "invalid %%S value" + msgstr "̵¸ú¤Ê %%S ÃÍ" + + #: config/romp/romp.c:718 config/romp/romp.c:725 + #, c-format + msgid "invalid %%b value" + msgstr "̵¸ú¤Ê %%b ÃÍ" + + #: config/romp/romp.c:765 config/romp/romp.c:776 + #, c-format + msgid "invalid %%z value" + msgstr "̵¸ú¤Ê %%z ÃÍ" + + #: config/romp/romp.c:784 config/romp/romp.c:792 + #, c-format + msgid "invalid %%Z value" + msgstr "̵¸ú¤Ê %%Z ÃÍ" + + #: config/romp/romp.c:799 config/romp/romp.c:808 config/romp/romp.c:815 + #: config/rs6000/rs6000.c:5561 + #, c-format + msgid "invalid %%k value" + msgstr "̵¸ú¤Ê %%k ÃÍ" + + #: config/romp/romp.c:900 config/romp/romp.c:943 + #, c-format + msgid "invalid %%j value" + msgstr "̵¸ú¤Ê %%j ÃÍ" + + #. Perform any needed actions needed for a function that is receiving a + #. variable number of arguments. + #. + #. CUM is as above. + #. + #. MODE and TYPE are the mode and type of the current parameter. + #. + #. PRETEND_SIZE is a variable that should be set to the amount of stack + #. that must be pushed by the prolog to pretend that our caller pushed + #. it. + #. + #. Normally, this macro will push all remaining incoming registers on the + #. stack and set PRETEND_SIZE to the length of the registers pushed. + #: config/romp/romp.h:661 + msgid "can't have varargs with -mfp-arg-in-fp-regs" + msgstr "-mfp-arg-in-fp-regs ¤ò»È¤¦¤È²ÄÊѸİú¿ô¤ò»ý¤Æ¤Þ¤»¤ó" + + #: config/rs6000/aix.h:134 config/rs6000/beos.h:32 + msgid "Always pass floating-point arguments in memory" + msgstr "ÉâÆ°¾®¿ôÅÀ°ú¿ô¤Ï¾ï¤Ë¥á¥â¥êÅϤ·¤È¤¹¤ë" + + #: config/rs6000/aix.h:136 config/rs6000/beos.h:34 + msgid "Don't always pass floating-point arguments in memory" + msgstr "ÉâÆ°¾®¿ôÅÀ°ú¿ô¤Ï¾ï¤Ë¥á¥â¥êÅϤ·¤È¤·¤Ê¤¤" + + #: config/rs6000/aix41.h:28 config/rs6000/aix43.h:32 config/rs6000/aix51.h:32 + msgid "Support message passing with the Parallel Environment" + msgstr "ÊÂÎó´Ä¶­¤Ç¤Î¥á¥Ã¥»¡¼¥¸¥Ñ¥Ã¥·¥ó¥°¤ò¥µ¥Ý¡¼¥È¤¹¤ë" + + #: config/rs6000/aix43.h:28 config/rs6000/aix51.h:28 + msgid "Compile for 64-bit pointers" + msgstr "64 ¥Ó¥Ã¥È¥Ý¥¤¥ó¥¿ÍѤ˥³¥ó¥Ñ¥¤¥ë¤¹¤ë" + + #: config/rs6000/aix43.h:30 config/rs6000/aix51.h:30 + msgid "Compile for 32-bit pointers" + msgstr "32 ¥Ó¥Ã¥È¥Ý¥¤¥ó¥¿ÍѤ˥³¥ó¥Ñ¥¤¥ë¤¹¤ë" + + #: config/rs6000/aix43.h:49 config/rs6000/aix51.h:49 + #, fuzzy + msgid "-maix64 and POWER architecture are incompatible" + msgstr "-maix64 ¤È POWER ¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤È¤Ç¤Ï¸ß´¹À­¤¬¤¢¤ê¤Þ¤»¤ó" + + #: config/rs6000/aix43.h:54 config/rs6000/aix51.h:54 + #, fuzzy + msgid "-maix64 requires PowerPC64 architecture remain enabled" + msgstr "PowerPC64 ¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤Ç¤Ê¤¤¤È -maix64 ¤òÍ­¸ú¤Ë¤Ï¤Ç¤­¤Þ¤»¤ó" + + #: config/rs6000/aix43.h:58 config/rs6000/aix51.h:58 + #, fuzzy + msgid "-maix64 required: 64-bit computation with 32-bit addressing not yet supported" + msgstr "-maix64 Í×µá: 32 bit ¥¢¥É¥ì¥·¥ó¥°²¼¤Î 64 bit ·×»»¤Ï¤Þ¤ÀÍøÍѤǤ­¤Þ¤»¤ó" + + #: config/rs6000/rs6000.c:471 + msgid "-mmultiple is not supported on little endian systems" + msgstr "-mmultiple ¤Ï¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¥·¥¹¥Æ¥à¾å¤Ç¤Ï¼õ¤±Æþ¤ì¤é¤ì¤Þ¤»¤ó" + + #: config/rs6000/rs6000.c:478 + msgid "-mstring is not supported on little endian systems" + msgstr "-mstring ¤Ï¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¥·¥¹¥Æ¥à¾å¤Ç¤Ï¼õ¤±Æþ¤ì¤é¤ì¤Þ¤»¤ó" + + #: config/rs6000/rs6000.c:484 + #, fuzzy, c-format + msgid "-f%s ignored (all code is position independent)" + msgstr "AIX ÍÑ¤Ë -f%s ¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿¡ÊÁ´¤Æ¤Î¥³¡¼¥É¤Ï°ÌÃÖÈó°Í¸¤Ç¤¹¡Ë" + + #: config/rs6000/rs6000.c:493 + msgid "-ffunction-sections disabled on AIX when debugging" + msgstr "AIX ¤Ç¤Ï¥Ç¥Ð¥Ã¥°»þ¤Î -ffunction-sections ¤Ï̵¸ú¤È¤µ¤ì¤Þ¤¹" + + #: config/rs6000/rs6000.c:499 + msgid "-fdata-sections not supported on AIX" + msgstr "AIX ¤Ç¤Ï -fdata-sections ¤Ï¼õ¤±Æþ¤ì¤é¤ì¤Þ¤»¤ó" + + #: config/rs6000/rs6000.c:514 + #, fuzzy, c-format + msgid "unknown -mdebug-%s switch" + msgstr "ÉÔÌÀ¤Ê -mdebug-%s ¥¹¥¤¥Ã¥Á¤Ç¤¹" + + #: config/rs6000/rs6000.c:524 + #, c-format + msgid "Unknown switch -mlong-double-%s" + msgstr "" + + #: config/rs6000/rs6000.c:589 + #, fuzzy, c-format + msgid "unknown ABI specified: '%s'" + msgstr "ÉÔÌÀ¤Ê¥Þ¥·¥ó¥â¡¼¥É `%s'" + + #: config/rs6000/rs6000.c:5488 + #, c-format + msgid "invalid %%f value" + msgstr "̵¸ú¤Ê %%f ÃͤǤ¹" + + #: config/rs6000/rs6000.c:5497 + #, c-format + msgid "invalid %%F value" + msgstr "̵¸ú¤Ê %%F ÃͤǤ¹" + + #: config/rs6000/rs6000.c:5506 + #, c-format + msgid "invalid %%G value" + msgstr "̵¸ú¤Ê %%G ÃͤǤ¹" + + #: config/rs6000/rs6000.c:5541 + #, c-format + msgid "invalid %%j code" + msgstr "̵¸ú¤Ê %%j ¥³¡¼¥É¤Ç¤¹" + + #: config/rs6000/rs6000.c:5551 + #, c-format + msgid "invalid %%J code" + msgstr "̵¸ú¤Ê %%J ¥³¡¼¥É¤Ç¤¹" + + #: config/rs6000/rs6000.c:5581 + #, c-format + msgid "invalid %%K value" + msgstr "̵¸ú¤Ê %%K ÃͤǤ¹" + + #: config/rs6000/rs6000.c:5708 + #, c-format + msgid "invalid %%p value" + msgstr "̵¸ú¤Ê %%p ÃͤǤ¹" + + #: config/rs6000/rs6000.c:5745 + #, c-format + msgid "invalid %%q value" + msgstr "̵¸ú¤Ê %%q ÃͤǤ¹" + + #: config/rs6000/rs6000.c:5808 + #, c-format + msgid "%%S computed all 1's mask" + msgstr "%%S ¤ÏÁ´¤Æ¤¬ 1 ¤Î¥Þ¥¹¥¯¤ò·×»»¤·¤Þ¤·¤¿" + + #: config/rs6000/rs6000.c:5835 + #, c-format + msgid "%%S computed all 0's mask" + msgstr "%%S ¤ÏÁ´¤Æ¤¬ 0 ¤Î¥Þ¥¹¥¯¤ò·×»»¤·¤Þ¤·¤¿" + + #: config/rs6000/rs6000.c:5845 + #, c-format + msgid "invalid %%T value" + msgstr "̵¸ú¤Ê %%T ÃͤǤ¹" + + #: config/rs6000/rs6000.c:5855 + #, c-format + msgid "invalid %%u value" + msgstr "̵¸ú¤Ê %%u ÃͤǤ¹" + + #: config/rs6000/rs6000.c:5864 + #, c-format + msgid "invalid %%v value" + msgstr "̵¸ú¤Ê %%v ÃͤǤ¹" + + #. Run-time compilation parameters selecting different hardware subsets. + #. + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/rs6000/rs6000.h:275 + msgid "Use POWER instruction set" + msgstr "POWER Ì¿Î᥻¥Ã¥È¤ò»ÈÍѤ¹¤ë" + + #: config/rs6000/rs6000.h:278 + msgid "Use POWER2 instruction set" + msgstr "POWER2 Ì¿Î᥻¥Ã¥È¤ò»ÈÍѤ¹¤ë" + + #: config/rs6000/rs6000.h:280 + msgid "Do not use POWER2 instruction set" + msgstr "POWER2 Ì¿Î᥻¥Ã¥È¤ò»ÈÍѤ·¤Ê¤¤" + + #: config/rs6000/rs6000.h:283 + msgid "Do not use POWER instruction set" + msgstr "POWER Ì¿Î᥻¥Ã¥È¤ò»ÈÍѤ·¤Ê¤¤" + + #: config/rs6000/rs6000.h:285 + msgid "Use PowerPC instruction set" + msgstr "PowerPC Ì¿Î᥻¥Ã¥È¤ò»ÈÍѤ¹¤ë" + + #: config/rs6000/rs6000.h:288 + msgid "Do not use PowerPC instruction set" + msgstr "PowerPC Ì¿Î᥻¥Ã¥È¤ò»ÈÍѤ·¤Ê¤¤" + + #: config/rs6000/rs6000.h:290 + msgid "Use PowerPC General Purpose group optional instructions" + msgstr "PowerPC °ìÈÌÍÑÅÓ¥°¥ë¡¼¥×¥ª¥×¥·¥ç¥óÌ¿Îá¤ò»ÈÍѤ¹¤ë" + + #: config/rs6000/rs6000.h:292 + msgid "Don't use PowerPC General Purpose group optional instructions" + msgstr "PowerPC °ìÈÌÍÑÅÓ¥°¥ë¡¼¥×¥ª¥×¥·¥ç¥óÌ¿Îá¤ò»ÈÍѤ·¤Ê¤¤" + + #: config/rs6000/rs6000.h:294 + msgid "Use PowerPC Graphics group optional instructions" + msgstr "PowerPC ¥°¥é¥Õ¥£¥¯¥¹¥°¥ë¡¼¥×¥ª¥×¥·¥ç¥óÌ¿Îá¤ò»ÈÍѤ·¤Ê¤¤" + + #: config/rs6000/rs6000.h:296 + msgid "Don't use PowerPC Graphics group optional instructions" + msgstr "PowerPC ¥°¥é¥Õ¥£¥¯¥¹¥°¥ë¡¼¥×¥ª¥×¥·¥ç¥óÌ¿Îá¤ò»ÈÍѤ·¤Ê¤¤" + + #: config/rs6000/rs6000.h:298 + msgid "Use PowerPC-64 instruction set" + msgstr "PowerPC-64 Ì¿Î᥻¥Ã¥È¤ò»ÈÍѤ¹¤ë" + + #: config/rs6000/rs6000.h:300 + msgid "Don't use PowerPC-64 instruction set" + msgstr "PowerPC-64 Ì¿Î᥻¥Ã¥È¤ò»ÈÍѤ·¤Ê¤¤" + + #: config/rs6000/rs6000.h:302 + #, fuzzy + msgid "Use AltiVec instructions" + msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥ÉÌ¿Îá¤ò»ÈÍѤ¹¤ë" + + #: config/rs6000/rs6000.h:304 + #, fuzzy + msgid "Don't use AltiVec instructions" + msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥ÉÌ¿Îá¤ò»ÈÍѤ·¤Ê¤¤" + + #: config/rs6000/rs6000.h:306 + msgid "Use new mnemonics for PowerPC architecture" + msgstr "PowerPC ¥¢¡¼¥­¥Æ¥¯¥Á¥ãÍѤο·¤·¤¤¥Ë¡¼¥â¥Ë¥Ã¥¯¤ò»ÈÍѤ¹¤ë" + + #: config/rs6000/rs6000.h:308 + msgid "Use old mnemonics for PowerPC architecture" + msgstr "PowerPC ¥¢¡¼¥­¥Æ¥¯¥Á¥ãÍѤθŤ¤¥Ë¡¼¥â¥Ë¥Ã¥¯¤ò»ÈÍѤ¹¤ë" + + #: config/rs6000/rs6000.h:311 + msgid "Put everything in the regular TOC" + msgstr "Á´¤Æ¤òÄ̾ï TOC Æâ¤ËÇÛÃÖ¤¹¤ë" + + #: config/rs6000/rs6000.h:313 + msgid "Place floating point constants in TOC" + msgstr "ÉâÆ°¾®¿ôÅÀÄê¿ô¤ò TOC Æâ¤ËÇÛÃÖ¤¹¤ë" + + #: config/rs6000/rs6000.h:315 + msgid "Don't place floating point constants in TOC" + msgstr "ÉâÆ°¾®¿ôÅÀÄê¿ô¤ò TOC Æâ¤ËÇÛÃÖ¤·¤Ê¤¤" + + #: config/rs6000/rs6000.h:317 + msgid "Place symbol+offset constants in TOC" + msgstr "¥·¥ó¥Ü¥ë+¥ª¥Õ¥»¥Ã¥ÈÄê¿ô¤ò TOC Æâ¤ËÇÛÃÖ¤¹¤ë" + + #: config/rs6000/rs6000.h:319 + msgid "Don't place symbol+offset constants in TOC" + msgstr "¥·¥ó¥Ü¥ë+¥ª¥Õ¥»¥Ã¥ÈÄê¿ô¤ò TOC Æâ¤ËÇÛÃÖ¤·¤Ê¤¤" + + #: config/rs6000/rs6000.h:325 + msgid "Place variable addresses in the regular TOC" + msgstr "ÊÑ¿ô¥¢¥É¥ì¥¹¤òÄ̾ï TOC Æâ¤ËÇÛÃÖ¤¹¤ë" + + #: config/rs6000/rs6000.h:331 + msgid "Generate load/store multiple instructions" + msgstr "Ê£¿ôÌ¿Îá¤Î¥í¡¼¥É/¥¹¥È¥¢¤òÀ¸À®¤¹¤ë" + + #: config/rs6000/rs6000.h:333 + msgid "Do not generate load/store multiple instructions" + msgstr "Ê£¿ôÌ¿Îá¤Î¥í¡¼¥É/¥¹¥È¥¢¤òÀ¸À®¤·¤Ê¤¤" + + #: config/rs6000/rs6000.h:337 + msgid "Generate string instructions for block moves" + msgstr "¥Ö¥í¥Ã¥¯°ÜưÍѤΠstring Ì¿Îá¤òÀ¸À®¤¹¤ë" + + #: config/rs6000/rs6000.h:339 + msgid "Do not generate string instructions for block moves" + msgstr "¥Ö¥í¥Ã¥¯°ÜưÍѤΠstring Ì¿Îá¤òÀ¸À®¤·¤Ê¤¤" + + #: config/rs6000/rs6000.h:343 + msgid "Generate load/store with update instructions" + msgstr "update Ì¿Îá¤È°ì½ï¤Ë¥í¡¼¥É/¥¹¥È¥¢Ì¿Îá¤òÀ¸À®¤¹¤ë" + + #: config/rs6000/rs6000.h:345 + msgid "Do not generate load/store with update instructions" + msgstr "update Ì¿Îá¤È°ì½ï¤Ë¥í¡¼¥É/¥¹¥È¥¢Ì¿Îá¤òÀ¸À®¤·¤Ê¤¤" + + #: config/rs6000/rs6000.h:353 + msgid "Don't schedule the start and end of the procedure" + msgstr "¥×¥í¥·¡¼¥¸¥ã³«»Ï¤È½ªÎ»¤Î¥¹¥±¥¸¥å¡¼¥ë¤ò¹Ô¤Ê¤ï¤Ê¤¤" + + #: config/rs6000/rs6000.h:359 + msgid "Return all structures in memory (AIX default)" + msgstr "" + + #: config/rs6000/rs6000.h:361 + msgid "Return small structures in registers (SVR4 default)" + msgstr "" + + #. This macro is similar to `TARGET_SWITCHES' but defines names of + #. command options that have values. Its definition is an + #. initializer with a subgrouping for each command option. + #. + #. Each subgrouping contains a string constant, that defines the + #. fixed part of the option name, and the address of a variable. + #. The variable, type `char *', is set to the variable part of the + #. given option if the fixed part matches. The actual option name + #. is made by appending `-m' to the specified name. + #. + #. Here is an example which defines `-mshort-data-NUMBER'. If the + #. given option is `-mshort-data-512', the variable `m88k_short_data' + #. will be set to the string `"512"'. + #. + #. extern char *m88k_short_data; + #. #define TARGET_OPTIONS { { "short-data-", &m88k_short_data } } + #: config/rs6000/rs6000.h:441 config/sparc/sparc.h:683 + msgid "Use features of and schedule code for given CPU" + msgstr "Í¿¤¨¤é¤ì¤¿ CPU ÍѤε¡Ç½¤È¥¹¥±¥¸¥å¡¼¥ë¥³¡¼¥É¤òÍøÍѤ¹¤ë" + + #: config/rs6000/rs6000.h:444 + msgid "Enable debug output" + msgstr "¥Ç¥Ð¥Ã¥°½ÐÎϤòÍ­¸ú¤Ë¤¹¤ë" + + #: config/rs6000/rs6000.h:445 + msgid "Specify ABI to use" + msgstr "" + + #: config/rs6000/rs6000.h:447 + #, fuzzy + msgid "Specify size of long double (64 or 128 bits)" + msgstr "sizeof(long double) ¤Ï 12 ¤È¤¹¤ë¡£" + + #. Definitions for __builtin_return_address and __builtin_frame_address. + #. __builtin_return_address (0) should give link register (65), enable + #. this. + #. This should be uncommented, so that the link register is used, but + #. currently this would result in unmatched insns and spilling fixed + #. registers so we'll leave it for another day. When these problems are + #. taken care of one additional fetch will be necessary in RETURN_ADDR_RTX. + #. (mrs) + #. #define RETURN_ADDR_IN_PREVIOUS_FRAME + #. Number of bytes into the frame return addresses can be found. See + #. rs6000_stack_info in rs6000.c for more information on how the different + #. abi's store the return address. + #: config/rs6000/rs6000.h:1791 + msgid "RETURN_ADDRESS_OFFSET not supported" + msgstr "RETURN_ADDRESS_OFFSET ¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: config/rs6000/sysv4.h:88 + #, fuzzy + msgid "Select ABI calling convention" + msgstr "ABI ¸Æ¤Ó½Ð¤·µ¬Ìó¤òÁªÂò¤¹¤ë" + + #: config/rs6000/sysv4.h:89 + #, fuzzy + msgid "Select method for sdata handling" + msgstr "sdata ¼è¤ê°·¤¤¤Î¤¿¤á¤Î¥á¥½¥Ã¥É¤òÁªÂò¤¹¤ë" + + #: config/rs6000/sysv4.h:104 + #, fuzzy + msgid "Align to the base type of the bit-field" + msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤Î¥Ù¡¼¥¹¥¿¥¤¥×¤Ë¥¢¥é¥¤¥ó¤¹¤ë" + + #: config/rs6000/sysv4.h:106 + #, fuzzy + msgid "Don't align to the base type of the bit-field" + msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤Î¥Ù¡¼¥¹¥¿¥¤¥×¤Ë¥¢¥é¥¤¥ó¤·¤Ê¤¤" + + #: config/rs6000/sysv4.h:108 + msgid "Don't assume that unaligned accesses are handled by the system" + msgstr "¥¢¥é¥¤¥ó¤µ¤ì¤Ê¤¤¥¢¥¯¥»¥¹¤¬¥·¥¹¥Æ¥à¤Ë¤è¤Ã¤Æ¥Ï¥ó¥É¥ë¤µ¤ì¤ë¤È¤Ï¤ß¤Ê¤µ¤Ê¤¤" + + #: config/rs6000/sysv4.h:110 + msgid "Assume that unaligned accesses are handled by the system" + msgstr "¥¢¥é¥¤¥ó¤µ¤ì¤Ê¤¤¥¢¥¯¥»¥¹¤¬¥·¥¹¥Æ¥à¤Ë¤è¤Ã¤Æ¥Ï¥ó¥É¥ë¤µ¤ì¤ë¤È¤ß¤Ê¤¹" + + #: config/rs6000/sysv4.h:112 config/rs6000/sysv4.h:116 + #, fuzzy + msgid "Produce code relocatable at runtime" + msgstr "¼Â¹Ô»þ¤ËºÆÇÛÃÖ²Äǽ¤Ê¥³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/rs6000/sysv4.h:114 config/rs6000/sysv4.h:118 + #, fuzzy + msgid "Don't produce code relocatable at runtime" + msgstr "¼Â¹Ô»þ¤ËºÆÇÛÃÖ²Äǽ¤Ê¥³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/rs6000/sysv4.h:120 config/rs6000/sysv4.h:122 + #, fuzzy + msgid "Produce little endian code" + msgstr "¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¥³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/rs6000/sysv4.h:124 config/rs6000/sysv4.h:126 + #, fuzzy + msgid "Produce big endian code" + msgstr "¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥ó¥³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/rs6000/sysv4.h:127 config/rs6000/sysv4.h:128 + #: config/rs6000/sysv4.h:129 config/rs6000/sysv4.h:130 + #: config/rs6000/sysv4.h:131 config/rs6000/sysv4.h:132 + #: config/rs6000/sysv4.h:142 config/rs6000/sysv4.h:143 + #: config/rs6000/sysv4.h:154 config/rs6000/sysv4.h:155 + #: config/rs6000/sysv4.h:157 + msgid "no description yet" + msgstr "ÀâÌÀ¤Ï¤Þ¤À¤¢¤ê¤Þ¤»¤ó" + + #: config/rs6000/sysv4.h:133 + #, fuzzy + msgid "Use EABI" + msgstr "EABI ¤òÍøÍѤ¹¤ë¡£" + + #: config/rs6000/sysv4.h:134 + #, fuzzy + msgid "Don't use EABI" + msgstr "EABI ¤òÍøÍѤ·¤Ê¤¤¡£" + + #: config/rs6000/sysv4.h:137 + msgid "Do not allow bit-fields to cross word boundaries" + msgstr "" + + #: config/rs6000/sysv4.h:139 + #, fuzzy + msgid "Use alternate register names" + msgstr "ÂåÂØ¥ì¥¸¥¹¥¿Ì¾¤ò»ÈÍѤ¹¤ë" + + #: config/rs6000/sysv4.h:141 + #, fuzzy + msgid "Don't use alternate register names" + msgstr "ÂåÂØ¥ì¥¸¥¹¥¿Ì¾¤ò»ÈÍѤ·¤Ê¤¤" + + #: config/rs6000/sysv4.h:145 + #, fuzzy + msgid "Link with libsim.a, libc.a and sim-crt0.o" + msgstr "libsim.a, libc.a µÚ¤Ó sim-crt0.o ¤È¥ê¥ó¥¯¤¹¤ë¡£" + + #: config/rs6000/sysv4.h:147 + #, fuzzy + msgid "Link with libads.a, libc.a and crt0.o" + msgstr "libads.a, libc.a µÚ¤Ó crt0.o ¤È¥ê¥ó¥¯¤¹¤ë¡£" + + #: config/rs6000/sysv4.h:149 + #, fuzzy + msgid "Link with libyk.a, libc.a and crt0.o" + msgstr "libyk.a, libc.a µÚ¤Ó crt0.o ¤È¥ê¥ó¥¯¤¹¤ë¡£" + + #: config/rs6000/sysv4.h:151 + #, fuzzy + msgid "Link with libmvme.a, libc.a and crt0.o" + msgstr "libmvme.a, libc.a µÚ¤Ó crt0.o ¤È¥ê¥ó¥¯¤¹¤ë¡£" + + #: config/rs6000/sysv4.h:153 + msgid "Set the PPC_EMB bit in the ELF flags header" + msgstr "PPC_EMB ¥Ó¥Ã¥È¤ò ELF ¥Õ¥é¥°¥Ø¥Ã¥ÀÆâ¤Ë¥»¥Ã¥È¤¹¤ë" + + #. Sometimes certain combinations of command options do not make sense + #. on a particular target machine. You can define a macro + #. `OVERRIDE_OPTIONS' to take account of this. This macro, if + #. defined, is executed once just after all the command options have + #. been parsed. + #. + #. The macro SUBTARGET_OVERRIDE_OPTIONS is provided for subtargets, to + #. get control. + #: config/rs6000/sysv4.h:212 + #, fuzzy, c-format + msgid "bad value for -mcall-%s" + msgstr "-mcall-%s ¥¹¥¤¥Ã¥Á¤Ë¤È¤Ã¤Æ¤ÎÉÔÀµ¤ÊÃÍ" + + #: config/rs6000/sysv4.h:228 + #, fuzzy, c-format + msgid "bad value for -msdata=%s" + msgstr "-msdata=%s ¥¹¥¤¥Ã¥Á¤ËÂФ¹¤ëÉÔÀµ¤ÊÃÍ" + + #: config/rs6000/sysv4.h:245 + #, fuzzy, c-format + msgid "-mrelocatable and -msdata=%s are incompatible" + msgstr "-mrelocatable ¤È -msdata=%s ¤È¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó" + + #: config/rs6000/sysv4.h:253 + #, fuzzy, c-format + msgid "-f%s and -msdata=%s are incompatible" + msgstr "-f%s ¤È -msdata=%s ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó" + + #: config/rs6000/sysv4.h:261 + #, fuzzy, c-format + msgid "-msdata=%s and -mcall-%s are incompatible" + msgstr "-msdata=%s ¤È -mcall-%s ¤È¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó" + + #: config/rs6000/sysv4.h:268 + #, fuzzy + msgid "-mrelocatable and -mno-minimal-toc are incompatible" + msgstr "-mrelocatable ¤È -mno-minimal-toc ¤È¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó" + + #: config/rs6000/sysv4.h:274 + #, fuzzy, c-format + msgid "-mrelocatable and -mcall-%s are incompatible" + msgstr "-mrelocatable ¤È -mcall-%s ¤È¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó" + + #: config/rs6000/sysv4.h:281 + #, fuzzy, c-format + msgid "-fPIC and -mcall-%s are incompatible" + msgstr "-fPIC ¤È -mcall-%s ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó" + + #: config/rs6000/sysv4.h:288 + msgid "-mcall-aixdesc must be big endian" + msgstr "-mcall-aixdesc ¤Ï¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥ó¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: config/s390/s390.c:1757 + #, fuzzy + msgid "invalid UNSPEC as operand (1)" + msgstr "¥ª¥Ú¥é¥ó¥É¤È¤·¤ÆÌµ¸ú¤Ê UNSPEC" + + #: config/s390/s390.c:1787 + #, fuzzy + msgid "invalid UNSPEC as operand (2)" + msgstr "¥ª¥Ú¥é¥ó¥É¤È¤·¤ÆÌµ¸ú¤Ê UNSPEC" + + #: config/s390/s390.c:1793 + msgid "UNKNOWN in s390_output_symbolic_const !?" + msgstr "" + + #: config/s390/s390.c:1809 + #, fuzzy + msgid "Cannot decompose address." + msgstr "Ê£»¨¤Ê¥¢¥É¥ì¥·¥ó¥°¥â¡¼¥É¤òÍøÍѤ·¤Ê¤¤" + + #: config/s390/s390.c:1957 + msgid "UNKNOWN in print_operand !?" + msgstr "" + + #: config/s390/s390.c:2502 + #, fuzzy + msgid "no code label found" + msgstr "¥·¥ó¥Ü¥ë¥Æ¡¼¥Ö¥ë¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó" + + #: config/s390/s390.c:2648 + msgid "Total size of local variables exceeds architecture limit." + msgstr "" + + #: config/s390/s390.h:53 + msgid "Set backchain" + msgstr "" + + #: config/s390/s390.h:54 + msgid "Don't set backchain (faster, but debug harder" + msgstr "" + + #: config/s390/s390.h:55 + msgid "Use bras for execucable < 64k" + msgstr "" + + #: config/s390/s390.h:56 + #, fuzzy + msgid "Don't use bras" + msgstr "EABI ¤òÍøÍѤ·¤Ê¤¤¡£" + + #: config/s390/s390.h:57 + msgid "Additional debug prints" + msgstr "" + + #: config/s390/s390.h:58 + msgid "Don't print additional debug prints" + msgstr "" + + #: config/s390/s390.h:59 + msgid "64 bit mode" + msgstr "" + + #: config/s390/s390.h:60 + msgid "31 bit mode" + msgstr "" + + #: config/s390/s390.h:61 + msgid "mvcle use" + msgstr "" + + #: config/s390/s390.h:62 + msgid "mvc&ex" + msgstr "" + + #. The sp_switch attribute only has meaning for interrupt functions. + #: config/sh/sh.c:4730 config/sh/sh.c:4769 + #, fuzzy, c-format + msgid "`%s' attribute only applies to interrupt functions" + msgstr "`%s' °À­¤Ï´Ø¿ô¤ËÂФ·¤Æ¤Î¤ßŬÍѤµ¤ì¤Þ¤¹" + + #. The argument must be a constant string. + #: config/sh/sh.c:4737 + #, fuzzy, c-format + msgid "`%s' attribute argument not a string constant" + msgstr "asm ¥Æ¥ó¥×¥ì¡¼¥È¤¬Ê¸»úÎóÄê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #. The argument must be a constant integer. + #: config/sh/sh.c:4776 + #, fuzzy, c-format + msgid "`%s' attribute argument not an integer constant" + msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É `%s' ¤ÎÉý¤¬À°¿ôÄê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: config/sparc/freebsd.h:81 config/sparc/linux.h:86 + #: config/sparc/linux64.h:139 + msgid "Use 128 bit long doubles" + msgstr "128 ¥Ó¥Ã¥È¤Î long double ¤ò»ÈÍѤ¹¤ë" + + #: config/sparc/sp64-elf.h:82 config/sparc/splet.h:29 + msgid "Generate code for big endian" + msgstr "¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥óÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/sparc/sp64-elf.h:83 config/sparc/splet.h:30 + msgid "Generate code for little endian" + msgstr "¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥óÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: config/sparc/sp86x-aout.h:51 config/sparc/sp86x-elf.h:67 + msgid "Use little-endian byte order for data" + msgstr "¥Ç¡¼¥¿¤Î¥Ð¥¤¥È½ç¤Ë¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¤ò»ÈÍѤ¹¤ë" + + #: config/sparc/sparc.c:319 + #, c-format + msgid "%s is not supported by this configuration" + msgstr "%s ¤Ï¤³¤Î¥³¥ó¥Õ¥£¥®¥å¥ì¡¼¥·¥ç¥ó¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó" + + #: config/sparc/sparc.c:326 + msgid "-mlong-double-64 not allowed with -m64" + msgstr "-m64 »ØÄê¥â¡¼¥É¤Ç¤Ï -mlong-double-64 ¤Ïµö²Ä¤µ¤ì¤Þ¤»¤ó" + + #: config/sparc/sparc.c:351 + msgid "-mcmodel= is not supported on 32 bit systems" + msgstr "-mcmodel= ¤Ï 32 bit ¥·¥¹¥Æ¥à¾å¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó" + + #: config/sparc/sparc.c:436 + msgid "profiling does not support code models other than medlow" + msgstr "¥×¥í¥Õ¥¡¥¤¥ê¥ó¥°¤Ï medlow °Ê³°¤Î¥³¡¼¥É¥â¥Ç¥ë¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó" + + #: config/sparc/sparc.c:5831 config/sparc/sparc.c:5837 + #, fuzzy, c-format + msgid "invalid %%Y operand" + msgstr "̵¸ú¤Ê %%Y ¥ª¥Ú¥é¥ó¥É" + + #: config/sparc/sparc.c:5907 + #, fuzzy, c-format + msgid "invalid %%A operand" + msgstr "̵¸ú¤Ê %%A ¥ª¥Ú¥é¥ó¥É" + + #: config/sparc/sparc.c:5917 + #, fuzzy, c-format + msgid "invalid %%B operand" + msgstr "̵¸ú¤Ê %%B ¥ª¥Ú¥é¥ó¥É" + + #: config/sparc/sparc.c:5956 + #, fuzzy, c-format + msgid "invalid %%c operand" + msgstr "̵¸ú¤Ê %%c ¥ª¥Ú¥é¥ó¥É" + + #: config/sparc/sparc.c:5957 + #, fuzzy, c-format + msgid "invalid %%C operand" + msgstr "̵¸ú¤Ê %%C ¥ª¥Ú¥é¥ó¥É" + + #: config/sparc/sparc.c:5978 + #, fuzzy, c-format + msgid "invalid %%d operand" + msgstr "̵¸ú¤Ê %%d ¥ª¥Ú¥é¥ó¥É" + + #: config/sparc/sparc.c:5979 + #, fuzzy, c-format + msgid "invalid %%D operand" + msgstr "̵¸ú¤Ê %%D ¥ª¥Ú¥é¥ó¥É" + + #: config/sparc/sparc.c:5997 + #, fuzzy, c-format + msgid "invalid %%f operand" + msgstr "̵¸ú¤Ê %%f ¥ª¥Ú¥é¥ó¥É" + + #: config/sparc/sparc.c:6047 + msgid "long long constant not a valid immediate operand" + msgstr "long long Äê¿ô¤ÏÀµ¾ï¤Ê¨ÃÍ¥ª¥Ú¥é¥ó¥É¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: config/sparc/sparc.c:6050 + msgid "floating point constant not a valid immediate operand" + msgstr "ÉâÆ°¾®¿ôÄê¿ô¤ÏÀµ¾ï¤Ê¨ÃÍ¥ª¥Ú¥é¥ó¥É¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #. To make profiling work with -f{pic,PIC}, we need to emit the profiling + #. code into the rtl. Also, if we are profiling, we cannot eliminate + #. the frame pointer (because the return address will get smashed). + #: config/sparc/sparc.h:388 + #, c-format + msgid "%s and profiling conflict: disabling %s" + msgstr "%s ¤È¥×¥í¥Õ¥¡¥¤¥ê¥ó¥°¤Ï¶¥¹ç¤·¤Þ¤¹: %s ¤ò̵¸ú²½¤·¤Þ¤¹" + + #: config/sparc/sparc.h:562 + #, fuzzy + msgid "Use function_epilogue()" + msgstr "´Ø¿ô³«»ÏÉôʬÍѤΥ¹¥¿¥Ö¤ò»ÈÍѤ¹¤ë" + + #: config/sparc/sparc.h:564 + #, fuzzy + msgid "Do not use function_epilogue()" + msgstr "´Ø¿ô³«»ÏÉôʬÍѤΥ¹¥¿¥Ö¤ò»ÈÍѤ¹¤ë" + + #: config/sparc/sparc.h:566 + msgid "Assume possible double misalignment" + msgstr "double ¤¬¸í¤Ã¤¿¥¢¥é¥¤¥ó¥á¥ó¥È¤È¤Ê¤ë²ÄǽÀ­¤¬¤¢¤ë¤È¤ß¤Ê¤¹" + + #: config/sparc/sparc.h:568 + msgid "Assume all doubles are aligned" + msgstr "Á´¤Æ¤Î double ¤ò¥¢¥é¥¤¥ó¤µ¤ì¤¿¤â¤Î¤È¤ß¤Ê¤¹" + + #: config/sparc/sparc.h:570 + msgid "Pass -assert pure-text to linker" + msgstr "¥ê¥ó¥«¤Ë -assert pure-text ¤òÅϤ¹" + + #: config/sparc/sparc.h:572 + msgid "Do not pass -assert pure-text to linker" + msgstr "¥ê¥ó¥«¤Ë -assert pure-text ¤òÅϤµ¤Ê¤¤" + + #: config/sparc/sparc.h:574 + msgid "Use flat register window model" + msgstr "¥Õ¥é¥Ã¥È¥ì¥¸¥¹¥¿¥¦¥£¥ó¥É¥¦¥â¥Ç¥ë¤ò»ÈÍѤ¹¤ë" + + #: config/sparc/sparc.h:576 + msgid "Do not use flat register window model" + msgstr "¥Õ¥é¥Ã¥È¥ì¥¸¥¹¥¿¥¦¥£¥ó¥É¥¦¥â¥Ç¥ë¤ò»ÈÍѤ·¤Ê¤¤" + + #: config/sparc/sparc.h:578 + msgid "Use ABI reserved registers" + msgstr "ABI ͽÌó¥ì¥¸¥¹¥¿¤ò»ÈÍѤ¹¤ë" + + #: config/sparc/sparc.h:580 + msgid "Do not use ABI reserved registers" + msgstr "ABI ͽÌó¥ì¥¸¥¹¥¿¤ò»ÈÍѤ·¤Ê¤¤" + + #: config/sparc/sparc.h:582 + msgid "Use hardware quad fp instructions" + msgstr "»ÍÇÜÀºÅÙÉâÆ°¾®¿ôÅÀÌ¿Îá¤ò»ÈÍѤ¹¤ë" + + #: config/sparc/sparc.h:584 + msgid "Do not use hardware quad fp instructions" + msgstr "»ÍÇÜÀºÅÙÉâÆ°¾®¿ôÅÀÌ¿Îá¤ò»ÈÍѤ·¤Ê¤¤" + + #: config/sparc/sparc.h:586 + msgid "Compile for v8plus ABI" + msgstr "v8plus ABI ÍѤ˥³¥ó¥Ñ¥¤¥ë¤¹¤ë" + + #: config/sparc/sparc.h:588 + msgid "Do not compile for v8plus ABI" + msgstr "v8plus ABI ÍѤ˥³¥ó¥Ñ¥¤¥ë¤·¤Ê¤¤" + + #: config/sparc/sparc.h:590 + msgid "Utilize Visual Instruction Set" + msgstr "Visual Ì¿Î᥻¥Ã¥È¤òÍøÍѤ¹¤ë" + + #: config/sparc/sparc.h:592 + msgid "Do not utilize Visual Instruction Set" + msgstr "Visual Ì¿Î᥻¥Ã¥È¤òÍøÍѤ·¤Ê¤¤" + + #. ??? These are deprecated, coerced to -mcpu=. Delete in 2.9. + #: config/sparc/sparc.h:595 + msgid "Optimize for Cypress processors" + msgstr "Cypress ¥×¥í¥»¥Ã¥µÍѤ˺ÇŬ²½¤¹¤ë" + + #: config/sparc/sparc.h:597 + msgid "Optimize for SparcLite processors" + msgstr "SparcLite ¥×¥í¥»¥Ã¥µÍѤ˺ÇŬ²½¤¹¤ë" + + #: config/sparc/sparc.h:599 + msgid "Optimize for F930 processors" + msgstr "F930 ¥×¥í¥»¥Ã¥µÍѤ˺ÇŬ²½¤¹¤ë" + + #: config/sparc/sparc.h:601 + msgid "Optimize for F934 processors" + msgstr "F934 ¥×¥í¥»¥Ã¥µÍѤ˺ÇŬ²½¤¹¤ë" + + #: config/sparc/sparc.h:603 + msgid "Use V8 Sparc ISA" + msgstr "V8 Sparc ISA ¤ò»ÈÍѤ¹¤ë" + + #: config/sparc/sparc.h:605 + msgid "Optimize for SuperSparc processors" + msgstr "SuperSparc ¥×¥í¥»¥Ã¥µÍѤ˺ÇŬ²½¤¹¤ë" + + #. End of deprecated options. + #: config/sparc/sparc.h:608 + msgid "Pointers are 64-bit" + msgstr "¥Ý¥¤¥ó¥¿¤ò 64 ¥Ó¥Ã¥È¤È¤¹¤ë" + + #: config/sparc/sparc.h:610 + msgid "Pointers are 32-bit" + msgstr "¥Ý¥¤¥ó¥¿¤ò 32 ¥Ó¥Ã¥È¤È¤¹¤ë" + + #: config/sparc/sparc.h:612 + msgid "Use 32-bit ABI" + msgstr "32 ¥Ó¥Ã¥È ABI ¤ò»ÈÍѤ¹¤ë" + + #: config/sparc/sparc.h:614 + msgid "Use 64-bit ABI" + msgstr "64 ¥Ó¥Ã¥È ABI ¤ò»ÈÍѤ¹¤ë" + + #: config/sparc/sparc.h:616 + msgid "Use stack bias" + msgstr "¥¹¥¿¥Ã¥¯¥Ð¥¤¥¢¥¹¤ò»ÈÍѤ¹¤ë" + + #: config/sparc/sparc.h:618 + msgid "Do not use stack bias" + msgstr "¥¹¥¿¥Ã¥¯¥Ð¥¤¥¢¥¹¤ò»ÈÍѤ·¤Ê¤¤" + + #: config/sparc/sparc.h:620 + msgid "Use structs on stronger alignment for double-word copies" + msgstr "¥À¥Ö¥ë¥ï¡¼¥É¥³¥Ô¡¼ÍѤζ¯¤¯¥¢¥é¥¤¥ó¤µ¤ì¤¿¹½Â¤ÂΤò»ÈÍѤ¹¤ë" + + #: config/sparc/sparc.h:622 + msgid "Do not use structs on stronger alignment for double-word copies" + msgstr "¥À¥Ö¥ë¥ï¡¼¥É¥³¥Ô¡¼ÍѤζ¯¤¯¥¢¥é¥¤¥ó¤µ¤ì¤¿¹½Â¤ÂΤò»ÈÍѤ·¤Ê¤¤" + + #: config/sparc/sparc.h:624 + msgid "Optimize tail call instructions in assembler and linker" + msgstr "¥¢¥»¥ó¥Ö¥é¤È¥ê¥ó¥«¤ÇËöÈø¸Æ¤Ó½Ð¤·Ì¿Îá¤òºÇŬ²½¤¹¤ë" + + #: config/sparc/sparc.h:626 + msgid "Do not optimize tail call instructions in assembler or linker" + msgstr "¥¢¥»¥ó¥Ö¥é¤È¥ê¥ó¥«¤ÇËöÈø¸Æ¤Ó½Ð¤·Ì¿Îá¤òºÇŬ²½¤·¤Ê¤¤" + + #: config/sparc/sparc.h:687 + msgid "Use given Sparc code model" + msgstr "Í¿¤¨¤é¤ì¤¿ Sparc ¥³¡¼¥É¥â¥Ç¥ë¤ò»ÈÍѤ¹¤ë" + + #: config/stormy16/stormy16.c:1167 + #, fuzzy + msgid "cannot use va_start in interrupt function" + msgstr "¾¤Î´Ø¿ôÆâ¤Ç static ´Ø¿ô¤òÀë¸À¤Ç¤­¤Þ¤»¤ó" + + #: config/stormy16/stormy16.c:1524 + #, fuzzy + msgid "`B' operand is not constant" + msgstr "½ÐÎÏ¥ª¥Ú¥é¥ó¥É¤¬ `asm' Æâ¤ÇÄê¿ô¤Ç¤¹" + + #: config/stormy16/stormy16.c:1530 + msgid "`B' operand has multiple bits set" + msgstr "" + + #: config/stormy16/stormy16.c:1557 + #, fuzzy + msgid "`o' operand is not constant" + msgstr "½ÐÎÏ¥ª¥Ú¥é¥ó¥É¤¬ `asm' Æâ¤ÇÄê¿ô¤Ç¤¹" + + #: config/stormy16/stormy16.c:1572 + #, fuzzy + msgid "xstormy16_print_operand: unknown code" + msgstr "ia64_print_operand: ÉÔÌÀ¤Ê¥³¡¼¥É¤Ç¤¹" + + #: config/stormy16/stormy16.c:1622 + #, fuzzy, c-format + msgid "switch statement of size %lu entries too large" + msgstr "ÊÑ¿ô `%s' ¤Î¥µ¥¤¥º¤¬Â礭¤¹¤®¤Þ¤¹" + + #: config/v850/v850-c.c:68 + msgid "#pragma GHS endXXXX found without previous startXXX" + msgstr "#pragma GHS endXXXX ¤¬Á°¤Î startXXX ̵¤·¤Ç¸«¤Ä¤«¤ê¤Þ¤·¤¿" + + #: config/v850/v850-c.c:70 + msgid "#pragma GHS endXXX does not match previous startXXX" + msgstr "#pragma GHS endXXX ¤¬Á°¤Î startXXX ¤ÈŬ¹ç¤·¤Þ¤»¤ó" + + #: config/v850/v850-c.c:95 + #, fuzzy + msgid "cannot set interrupt attribute: no current function" + msgstr "interrupt °À­¤òÀßÄê¤Ç¤­¤Þ¤»¤ó: ¸½ºß¤Î´Ø¿ô¤¬¤¢¤ê¤Þ¤»¤ó" + + #: config/v850/v850-c.c:103 + #, fuzzy + msgid "cannot set interrupt attribute: no such identifier" + msgstr "interrupt °À­¤òÀßÄê¤Ç¤­¤Þ¤»¤ó: ¤½¤ÎÍͤʼ±Ê̻Ҥ¬¤¢¤ê¤Þ¤»¤ó" + + #: config/v850/v850-c.c:149 + msgid "junk at end of #pragma ghs section" + msgstr "#pragma ghs section ¤Î½ª¤ê¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹" + + #: config/v850/v850-c.c:166 + #, fuzzy, c-format + msgid "unrecognized section name \"%s\"" + msgstr "ǧ¼±¤Ç¤­¤Ê¤¤¥»¥¯¥·¥ç¥ó̾ \"%s\"" + + #: config/v850/v850-c.c:181 + msgid "malformed #pragma ghs section" + msgstr "¤ª¤«¤·¤Ê #pragma ghs section" + + #: config/v850/v850-c.c:201 + msgid "junk at end of #pragma ghs interrupt" + msgstr "#pragma ghs interrupt ¤Î½ª¤ê¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹" + + #: config/v850/v850-c.c:213 + msgid "junk at end of #pragma ghs starttda" + msgstr "#pragma ghs starttda ¤Î½ª¤ê¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹" + + #: config/v850/v850-c.c:225 + msgid "junk at end of #pragma ghs startsda" + msgstr "#pragma ghs startsda ¤Î½ª¤ê¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹" + + #: config/v850/v850-c.c:237 + msgid "junk at end of #pragma ghs startzda" + msgstr "#pragma ghs startzda ¤Î½ª¤ê¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹" + + #: config/v850/v850-c.c:249 + msgid "junk at end of #pragma ghs endtda" + msgstr "#pragma ghs endtda ¤Î½ª¤ê¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹" + + #: config/v850/v850-c.c:261 + msgid "junk at end of #pragma ghs endsda" + msgstr "#pragma ghs endsda ¤Î½ª¤ê¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹" + + #: config/v850/v850-c.c:273 + msgid "junk at end of #pragma ghs endzda" + msgstr "#pragma ghs ¤Î½ª¤ê¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹" + + #: config/v850/v850.c:122 + #, fuzzy, c-format + msgid "%s=%s is not numeric" + msgstr "%s=%s ¤Ï¿ôÃͤǤϤ¢¤ê¤Þ¤»¤ó" + + #: config/v850/v850.c:129 + #, fuzzy, c-format + msgid "%s=%s is too large" + msgstr "%s=%s ¤ÏÂ礭¤¹¤®¤Þ¤¹¡£" + + #: config/v850/v850.c:285 + msgid "const_double_split got a bad insn:" + msgstr "" + + #: config/v850/v850.c:777 + msgid "output_move_single:" + msgstr "" + + #: config/v850/v850.c:2081 + msgid "a data area attribute cannot be specified for local variables" + msgstr "¥Ç¡¼¥¿Îΰè°À­¤ò¥í¡¼¥«¥ëÊÑ¿ô¤Ë¤Ï»ØÄê¤Ç¤­¤Þ¤»¤ó" + + #: config/v850/v850.c:2092 + #, c-format + msgid "data area of '%s' conflicts with previous declaration" + msgstr "¥Ç¡¼¥¿Îΰè '%s' ¤ÏÁ°¤ÎÀë¸À¤ÈÌ·½â¤·¤Þ¤¹" + + #: config/v850/v850.c:2295 + #, fuzzy, c-format + msgid "bogus JR construction: %d\n" + msgstr "¸íËâ²½¤µ¤ì¤¿ JR ¹½Â¤: %d\n" + + #: config/v850/v850.c:2316 config/v850/v850.c:2518 + #, fuzzy, c-format + msgid "bad amount of stack space removal: %d" + msgstr "¥¹¥¿¥Ã¥¯¶õ´Öºï½üÎ̤¬ÉÔÀµ¤Ç¤¹: %d" + + #: config/v850/v850.c:2494 + #, fuzzy, c-format + msgid "bogus JARL construction: %d\n" + msgstr "¸íËâ²½¤µ¤ì¤¿ JARL ¹½Â¤: %d\n" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/v850/v850.h:119 + msgid "Support Green Hills ABI" + msgstr "Green Hill ¤Î ABI ¤ò¥µ¥Ý¡¼¥È¤¹¤ë" + + #: config/v850/v850.h:122 + msgid "Prohibit PC relative function calls" + msgstr "PC ´ØÏ¢¤Î´Ø¿ô¸Æ¤Ó½Ð¤·¤ò¶Ø¤¸¤ë" + + #: config/v850/v850.h:125 + msgid "Reuse r30 on a per function basis" + msgstr "´Ø¿ô¤Î¼çÍ×ÉôʬËè¤Ë r30 ¤òºÆÍøÍѤ¹¤ë" + + #: config/v850/v850.h:128 + msgid "Use stubs for function prologues" + msgstr "´Ø¿ô³«»ÏÉôʬÍѤΥ¹¥¿¥Ö¤ò»ÈÍѤ¹¤ë" + + #: config/v850/v850.h:131 + msgid "Same as: -mep -mprolog-function" + msgstr "-mep -mprolog-function ¤ÈƱÍÍ" + + #: config/v850/v850.h:132 + msgid "Enable backend debugging" + msgstr "¥Ð¥Ã¥¯¥¨¥ó¥É¥Ç¥Ð¥Ã¥°¤òÍ­¸ú¤Ë¤¹¤ë" + + #: config/v850/v850.h:134 + msgid "Compile for the v850 processor" + msgstr "v850 ¥×¥í¥»¥Ã¥µÍѤ˥³¥ó¥Ñ¥¤¥ë¤¹¤ë" + + #: config/v850/v850.h:137 + msgid "Use 4 byte entries in switch tables" + msgstr "switch ¥Æ¡¼¥Ö¥ë¤Ç 4 ¥Ð¥¤¥È¥¨¥ó¥È¥ê¤ò»ÈÍѤ¹¤ë" + + #. This macro is similar to `TARGET_SWITCHES' but defines names of + #. command options that have values. Its definition is an + #. initializer with a subgrouping for each command option. + #. + #. Each subgrouping contains a string constant, that defines the + #. fixed part of the option name, and the address of a variable. The + #. variable, type `char *', is set to the variable part of the given + #. option if the fixed part matches. The actual option name is made + #. by appending `-m' to the specified name. + #. + #. Here is an example which defines `-mshort-data-NUMBER'. If the + #. given option is `-mshort-data-512', the variable `m88k_short_data' + #. will be set to the string `"512"'. + #. + #. extern char *m88k_short_data; + #. #define TARGET_OPTIONS { { "short-data-", &m88k_short_data } } + #: config/v850/v850.h:181 + msgid "Set the max size of data eligible for the TDA area" + msgstr "TDA Îΰè¤Ë¤È¤Ã¤ÆË¾¤Þ¤·¤¤ºÇÂç¥Ç¡¼¥¿¥µ¥¤¥º¤òÀßÄꤹ¤ë" + + #: config/v850/v850.h:184 + msgid "Set the max size of data eligible for the SDA area" + msgstr "SDA Îΰè¤Ë¤È¤Ã¤ÆË¾¤Þ¤·¤¤ºÇÂç¥Ç¡¼¥¿¥µ¥¤¥º¤òÀßÄꤹ¤ë" + + #: config/v850/v850.h:187 + msgid "Set the max size of data eligible for the ZDA area" + msgstr "ZDA Îΰè¤Ë¤È¤Ã¤ÆË¾¤Þ¤·¤¤ºÇÂç¥Ç¡¼¥¿¥µ¥¤¥º¤òÀßÄꤹ¤ë" + + #: ada/misc.c:219 + msgid "`-gnat' misspelled as `-gant'" + msgstr "" + + #: ch/actions.c:118 + #, c-format + msgid "%d errors, %d sorries, do granting" + msgstr "" + + #: ch/actions.c:135 + msgid "GNU compiler does not support statically allocated objects" + msgstr "" + + #: ch/actions.c:138 objc/objc-act.c:885 + #, c-format + msgid "`%s' cannot be statically allocated" + msgstr "`%s' ¤òÀÅŪ¤Ë³ÎÊݤǤ­¤Þ¤»¤ó" + + #: ch/actions.c:300 + #, c-format + msgid "causing unhandled exception `%s' (this is flaged only once)" + msgstr "" + + #: ch/actions.c:438 + #, fuzzy + msgid "range failure (not inside function)" + msgstr "`%s' ¤¬¤³¤³¤Ç¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó (´Ø¿ô¤ÎÃæ¤Ç¤Ï¤Ê¤¤)" + + #: ch/actions.c:440 + msgid "possible range failure (not inside function)" + msgstr "" + + #: ch/actions.c:445 + msgid "expression will always cause RANGEFAIL" + msgstr "" + + #: ch/actions.c:492 + msgid "right hand side of assignment is a mode" + msgstr "" + + #: ch/actions.c:498 + #, fuzzy, c-format + msgid "incompatible modes in %s" + msgstr "%s ¤Ë¸ß´¹À­¤Î¤Ê¤¤·¿" + + #: ch/actions.c:523 + #, fuzzy, c-format + msgid "bad string length in %s" + msgstr "ÉÔÀµ¤Êʸ»úÎóÄê¿ô¤Ç¤¹" + + #: ch/actions.c:631 ch/actions.c:644 + #, fuzzy, c-format + msgid "mode mismatch in %s expression" + msgstr "¾ò·ï¼°¤Ç¤Î·¿¤ÎÁȹç¤ï¤»¤¬Å¬¹ç¤·¤Þ¤»¤ó" + + #: ch/actions.c:638 + #, fuzzy, c-format + msgid "%s expression must be referable" + msgstr "¥«¥ó¥Þ±é»»»Ò¤¬Ìá¤êÃͤò½é´ü²½¤¹¤ë¤¿¤á¤Ë»È¤ï¤ì¤Þ¤·¤¿" + + #: ch/actions.c:667 + #, c-format + msgid "%s not allowed outside a PROC" + msgstr "" + + #: ch/actions.c:673 + #, c-format + msgid "%s action in PROC with no declared RESULTS" + msgstr "" + + #: ch/actions.c:704 + msgid "RETURN not allowed outside PROC" + msgstr "" + + #: ch/actions.c:717 + #, fuzzy + msgid "RETURN with a value, in PROC returning void" + msgstr "Ìá¤ê·¿¤¬ void ¤Î´Ø¿ô¤Ç¡¢`return' ¤ËÃͤ¬¤¢¤ê¤Þ¤¹" + + #: ch/actions.c:726 + msgid "RETURN with no value and no RESULT action in procedure" + msgstr "" + + #: ch/actions.c:749 + #, fuzzy, c-format + msgid "no label named `%s'" + msgstr "%s ¤Ë `%s' ¤È¤¤¤¦Ì¾Á°¤Î¥á¥ó¥Ð¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: ch/actions.c:751 + #, fuzzy, c-format + msgid "cannot GOTO label `%s' outside current function" + msgstr "¥é¥Ù¥ë `%s' ¤¬´Ø¿ô¤Î³°Â¦¤Î²¿¤«¤ò»²¾È¤·¤Þ¤·¤¿" + + #: ch/actions.c:773 + #, fuzzy, c-format + msgid "no EXITable label named `%s'" + msgstr "%s ¤Ë `%s' ¤È¤¤¤¦Ì¾Á°¤Î¥á¥ó¥Ð¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: ch/actions.c:775 + #, fuzzy, c-format + msgid "cannot EXIT label `%s' outside current function" + msgstr "¥é¥Ù¥ë `%s' ¤¬´Ø¿ô¤Î³°Â¦¤Î²¿¤«¤ò»²¾È¤·¤Þ¤·¤¿" + + #: ch/actions.c:1018 + #, fuzzy + msgid "case selector not compatible with label" + msgstr "PIC ¥³¡¼¥ÉÀ¸À®¤Ï¥×¥í¥Õ¥¡¥¤¥ê¥ó¥°¤È¤ÏÁêÍÆ¤ì¤Þ¤»¤ó\n" + + #: ch/actions.c:1044 + #, fuzzy + msgid "ELSE label not within a CASE statement" + msgstr "case ¥é¥Ù¥ë¤¬ switch ʸ¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤ó" + + #: ch/actions.c:1048 + #, fuzzy + msgid "multiple default labels found in a CASE statement" + msgstr "°ì¤Ä¤Î switch ¤ËÊ£¿ô¤Î default ¥é¥Ù¥ë¤¬¤¢¤ê¤Þ¤¹" + + #: ch/actions.c:1049 + #, fuzzy + msgid "this is the first ELSE label" + msgstr "¤³¤ì¤¬ºÇ½é¤Î default ¥é¥Ù¥ë¤Ç¤¹" + + #: ch/actions.c:1070 + #, fuzzy + msgid "label found outside of CASE statement" + msgstr "¥é¥Ù¥ë¤Î¸å¤í¤Ë¤Ïʸ¤¬É¬ÍפǤ¹" + + #: ch/actions.c:1073 + #, fuzzy + msgid "duplicate CASE value" + msgstr "½ÅÊ£¤·¤¿ case ¤ÎÃÍ" + + #: ch/actions.c:1074 ch/actions.c:1127 + #, fuzzy + msgid "this is the first entry for that value" + msgstr "¤³¤ì¤¬¤½¤ÎÃͤȽÅÊ£¤·¤¿ºÇ½é¤Î¹àÌܤǤ¹" + + #: ch/actions.c:1077 ch/actions.c:1130 + #, fuzzy + msgid "CASE value out of range" + msgstr "16 ¿Ê¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹¤¬Èϰϳ°¤Ç¤¹" + + #: ch/actions.c:1079 ch/actions.c:1132 + #, fuzzy + msgid "empty range" + msgstr "¶õ¤ÎÈϰϤ¬»ØÄꤵ¤ì¤Þ¤·¤¿" + + #: ch/actions.c:1081 ch/actions.c:1134 + #, fuzzy + msgid "label within scope of cleanup or variable array" + msgstr "case ¥é¥Ù¥ë¤¬¡¢²òÂΤޤ¿¤Ï²ÄÊÑÇÛÎó¤Î¥¹¥³¡¼¥×Æâ¤Ë¤¢¤ê¤Þ¤¹" + + #: ch/actions.c:1105 ch/actions.c:1302 + msgid "mode in label is not discrete" + msgstr "" + + #: ch/actions.c:1122 + #, fuzzy + msgid "label not within a CASE statement" + msgstr "case ¥é¥Ù¥ë¤¬ switch ʸ¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤ó" + + #: ch/actions.c:1282 + msgid "lower bound of range must be a discrete literal expression" + msgstr "" + + #: ch/actions.c:1287 + msgid "upper bound of range must be a discrete literal expression" + msgstr "" + + #: ch/actions.c:1311 + msgid "CASE label is not valid" + msgstr "" + + #: ch/actions.c:1357 + msgid "number of CASE selectors does not match the number of CASE label lists" + msgstr "" + + #: ch/actions.c:1442 + #, c-format + msgid "incomplete CASE - %s not handled" + msgstr "" + + #: ch/actions.c:1461 + msgid "CASE selector with variable range" + msgstr "" + + #: ch/actions.c:1465 + msgid "too many cases to do CASE completeness testing" + msgstr "" + + #: ch/actions.c:1550 + msgid "type of tuple cannot be implicit in multiple assignent" + msgstr "" + + #: ch/actions.c:1552 + msgid "conditional expression cannot be used in multiple assignent" + msgstr "" + + #: ch/actions.c:1554 + #, fuzzy + msgid "internal error - unknown type in multiple assignment" + msgstr "ÆâÉô¥¨¥é¡¼ - interface ·¿¤¬Â¿¤¹¤®¤Þ¤¹" + + #: ch/actions.c:1558 + msgid "no operator allowed in multiple assignment," + msgstr "" + + #: ch/actions.c:1568 + msgid "location modes in multiple assignment are not equivalent" + msgstr "" + + #: ch/actions.c:1606 + msgid "you may not assign a value to a BUFFER or EVENT location" + msgstr "" + + #: ch/actions.c:1614 + #, fuzzy + msgid "can't assign value to READonly location" + msgstr "Ãͤò¥Ù¥¯¥È¥ë¤Ë¤ÏÊÑ´¹¤Ç¤­¤Þ¤»¤ó" + + #: ch/actions.c:1619 + msgid "cannot assign to location with non-value property" + msgstr "" + + #: ch/actions.c:1639 + #, fuzzy + msgid "lefthand side of assignment is not a location" + msgstr "Í׵ᤵ¤ì¤¿¥¢¥é¥¤¥ó¥á¥ó¥È¤¬Äê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: ch/actions.c:1715 ch/actions.c:1785 + msgid "bitstring slice" + msgstr "" + + #: ch/actions.c:1810 + msgid "LENGTH on left-hand-side is non-portable" + msgstr "" + + #: ch/actions.c:1814 + msgid "can only set LENGTH of array location" + msgstr "" + + #: ch/convert.c:63 + msgid "internal error: trying to make loc-identity with non-location" + msgstr "" + + #: ch/convert.c:117 + #, fuzzy + msgid "cannot convert to a boolean mode" + msgstr "¥Ý¥¤¥ó¥¿·¿¤ËÊÑ´¹¤Ç¤­¤Þ¤»¤ó" + + #: ch/convert.c:152 + #, fuzzy + msgid "cannot convert to a char mode" + msgstr "¥Ý¥¤¥ó¥¿·¿¤ËÊÑ´¹¤Ç¤­¤Þ¤»¤ó" + + #: ch/convert.c:248 + #, fuzzy + msgid "powerset tuple element out of range" + msgstr "±é»»¿ô¤¬Èϰϳ°¤Ç¤¹" + + #: ch/convert.c:284 ch/convert.c:312 + #, c-format + msgid "incompatible member of powerset tuple (at position #%d)" + msgstr "" + + #: ch/convert.c:394 + #, fuzzy, c-format + msgid "no initializer value for fixed field `%s'" + msgstr "¥á¥ó¥Ð `%s' ¤ËÂФ¹¤ë̵¸ú¤Ê½é´üÃÍ" + + #: ch/convert.c:436 + #, fuzzy, c-format + msgid "non-constant value for tag field `%s'" + msgstr "static ¥Õ¥£¡¼¥ë¥É `%s' ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: ch/convert.c:488 + #, fuzzy, c-format + msgid "field `%s' in wrong variant" + msgstr "¥Õ¥£¡¼¥ë¥É `%s' ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó" + + #: ch/convert.c:495 + #, fuzzy, c-format + msgid "missing variant fields (at least `%s')" + msgstr "static ¥Õ¥£¡¼¥ë¥É `%s' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: ch/convert.c:518 + #, fuzzy, c-format + msgid "bad initializer for field `%s'" + msgstr "̵¸ú¤Ê¥Ó¥Ã¥ÈÎó½é´ü²½»Ò¤Ç¤¹" + + #: ch/convert.c:525 + #, fuzzy, c-format + msgid "no initializer value for variant field `%s'" + msgstr "½é´ü²½»Ò¤Ï `%s' ¤Î¥µ¥¤¥º¤ÎÆÃÄê¤Ë¼ºÇÔ¤·¤Þ¤·¤¿" + + #: ch/convert.c:531 + msgid "no selected variant" + msgstr "" + + #: ch/convert.c:546 ch/convert.c:912 + msgid "mixture of labelled and unlabelled tuple elements" + msgstr "" + + #: ch/convert.c:557 + msgid "probably not a structure tuple" + msgstr "" + + #: ch/convert.c:559 + #, fuzzy, c-format + msgid "excess initializer for field `%s'" + msgstr "friend ´Ø¿ô `%s' ¤ò½é´ü²½¤Ç¤­¤Þ¤»¤ó" + + #: ch/convert.c:566 + #, fuzzy + msgid "excess unnamed initializers" + msgstr "ÇÛÎó½é´ü²½»ÒÆâ¤ÎÍ×ÁǤ¬Â¿¤¹¤®¤Þ¤¹" + + #: ch/convert.c:693 + #, fuzzy + msgid "non-constant start index for tuple" + msgstr "½é´ü²½»ÒÆâ¤ËÈóÄê¿ô¤ÎÇÛÎ󥤥ó¥Ç¥Ã¥¯¥¹¤¬¤¢¤ê¤Þ¤¹" + + #: ch/convert.c:736 + #, fuzzy + msgid "invalid array tuple label" + msgstr "̵¸ú¤Ê #pragma vtable" + + #: ch/convert.c:750 + #, fuzzy + msgid "non-constant array tuple index range" + msgstr "½é´ü²½»ÒÆâ¤ËÈóÄê¿ô¤ÎÇÛÎ󥤥ó¥Ç¥Ã¥¯¥¹¤¬¤¢¤ê¤Þ¤¹" + + #: ch/convert.c:759 + #, fuzzy, c-format + msgid "incompatible array tuple element %s" + msgstr "%s ¤Ë¸ß´¹À­¤Î¤Ê¤¤·¿" + + #: ch/convert.c:775 + msgid "multiple (*) or (ELSE) array tuple labels" + msgstr "" + + #: ch/convert.c:784 + #, fuzzy + msgid "empty range in array tuple" + msgstr "½é´ü²½»ÒÆâ¤Ë¶õ¤ÎÈϰϥ¤¥ó¥Ç¥Ã¥¯¥¹¤¬¤¢¤ê¤Þ¤¹" + + #: ch/convert.c:801 + #, c-format + msgid "array tuple has duplicate index %s" + msgstr "" + + #: ch/convert.c:809 + #, fuzzy + msgid "array tuple index out of range" + msgstr "¹ÔÈֹ椬Èϰϳ°¤Ç¤¹" + + #: ch/convert.c:811 + msgid "too many array tuple values" + msgstr "" + + #: ch/convert.c:883 + msgid "dynamic array tuple without (*) or (ELSE)" + msgstr "" + + #: ch/convert.c:885 + #, c-format + msgid "missing array tuple element %s" + msgstr "" + + #: ch/convert.c:892 + #, c-format + msgid "missing array tuple elements %s : %s" + msgstr "" + + #: ch/convert.c:1086 + #, fuzzy + msgid "initializer is not an array or string mode" + msgstr "½é´ü²½»Ò¤ÎÍ×ÁÇ¤Ï¥í¡¼¥É»þ¤Ë·×»»¤µ¤ìÆÀ¤Þ¤»¤ó" + + #: ch/convert.c:1096 + msgid "destination is too small" + msgstr "" + + #: ch/convert.c:1152 + #, fuzzy + msgid "internal error: unknown type of expression" + msgstr "ÆâÉô¥¨¥é¡¼ - ̤ÄêµÁ·¿¤Î»ÈÍѤǤ¹" + + #: ch/decl.c:1033 + #, fuzzy, c-format + msgid "`%s' must not be declared readonly" + msgstr "const `%s' ¤ò `mutable' ¤È¤·¤ÆÀë¸À¤Ç¤­¤Þ¤»¤ó" + + #: ch/decl.c:1037 + #, fuzzy + msgid "declaration of readonly variable without initialization" + msgstr "ÈóÊÑ¿ô `%s' ¤ÎÀë¸À¤¬ `for' ¥ë¡¼¥×½é´ü²½Àë¸À¤ÎÃæ¤Ë¤¢¤ê¤Þ¤¹" + + #: ch/decl.c:1059 + #, fuzzy, c-format + msgid "no initialization allowed for `%s'" + msgstr "(`%s' ¤Î½é´ü²½¤ÏÉÔ´°Á´¤Ç¤¹)" + + #: ch/decl.c:1067 + #, c-format + msgid "value for loc-identity `%s' is not a location" + msgstr "" + + #: ch/decl.c:1074 + #, c-format + msgid "location for `%s' not read-compatible" + msgstr "" + + #: ch/decl.c:1101 + #, fuzzy, c-format + msgid "nonconstant initializer for `%s'" + msgstr "friend ´Ø¿ô `%s' ¤ò½é´ü²½¤Ç¤­¤Þ¤»¤ó" + + #: ch/decl.c:1132 + msgid "do_decl: internal error: don't know what to initialize" + msgstr "" + + #: ch/decl.c:1189 + msgid "RECURSIVE PROCs" + msgstr "" + + #: ch/decl.c:1445 + #, c-format + msgid "`%s' must not be READonly" + msgstr "" + + #: ch/decl.c:1471 + #, fuzzy + msgid "POS may not be specified for a list of field declarations" + msgstr "°ì¤Ä¤Î¶õ¤ÎÀë¸ÀÃæ¤Ë¡¢Æó¤Ä¤Î·¿¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤¹" + + #: ch/decl.c:1525 + msgid "(ELSE) case label as well as ELSE variant" + msgstr "" + + #: ch/decl.c:1610 ch/decl.c:1613 + msgid "inconsistent modes between labels and tag field" + msgstr "" + + #: ch/decl.c:1618 + msgid "too few tag labels" + msgstr "" + + #: ch/decl.c:1620 + #, fuzzy + msgid "too many tag labels" + msgstr "ÆþÎÏ¥Õ¥¡¥¤¥ë¤¬Â¿¤¹¤®¤Þ¤¹" + + #: ch/decl.c:1658 + #, fuzzy + msgid "case label lower limit is not a discrete constant expression" + msgstr "case ¥é¥Ù¥ë¤òÀ°¿ôÄê¿ô¤Ë´Ô¸µ¤Ç¤­¤Þ¤»¤ó" + + #: ch/decl.c:1660 + msgid "case label upper limit is not a discrete constant expression" + msgstr "" + + #: ch/decl.c:1670 + #, fuzzy + msgid "case label must be a discrete constant expression" + msgstr "case ¥é¥Ù¥ë¤òÀ°¿ôÄê¿ô¤Ë´Ô¸µ¤Ç¤­¤Þ¤»¤ó" + + #: ch/decl.c:1697 + msgid "variant label declared here..." + msgstr "" + + #: ch/decl.c:1699 + msgid "...is duplicated here" + msgstr "" + + #: ch/decl.c:1729 + #, fuzzy, c-format + msgid "no field (yet) for tag %s" + msgstr "¥¯¥é¥¹ %s ÍѤΥե¡¥¤¥ë¤ò¸«¤Ä¤±¤é¤ì¤Þ¤»¤ó¡£" + + #: ch/decl.c:1824 + msgid "non-value mode may only returned by LOC" + msgstr "" + + #: ch/decl.c:1847 + #, fuzzy, c-format + msgid "mode of `%s' is not a mode" + msgstr "`->' ¤Î¥Ù¡¼¥¹¥ª¥Ú¥é¥ó¥É¤¬¥Ý¥¤¥ó¥¿¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: ch/decl.c:1853 + #, c-format + msgid "`%s' may only be passed by LOC" + msgstr "" + + #: ch/decl.c:2281 + #, c-format + msgid "nothing named `%s' to grant" + msgstr "" + + #: ch/decl.c:2321 + #, fuzzy, c-format + msgid "duplicate grant for `%s'" + msgstr "`%s' ¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹" + + #: ch/decl.c:2322 + #, fuzzy, c-format + msgid "previous grant for `%s'" + msgstr "`%s' ¤ÎÁ°ÊýÀë¸À¤¬¤¢¤ê¤Þ¤»¤ó" + + #: ch/decl.c:2409 + #, fuzzy, c-format + msgid "duplicate definition `%s'" + msgstr "¥¯¥é¥¹¥á¥½¥Ã¥É `%s' ¤ÎÄêµÁ¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹¡£" + + #: ch/decl.c:2410 + #, fuzzy, c-format + msgid "previous definition of `%s'" + msgstr "`%s' ¤¬ºÆÄêµÁ¤µ¤ì¤Þ¤·¤¿" + + #: ch/decl.c:3248 ch/decl.c:3258 + #, fuzzy, c-format + msgid "ambiguous choice for seize `%s' -" + msgstr "¥á¥½¥Ã¥É¥Ý¥¤¥ó¥¿ `%s' ¤Ø¤ÎÍ×µá¤¬Û£Ëæ¤Ç¤¹" + + #: ch/decl.c:3249 ch/decl.c:3259 + #, c-format + msgid " - can seize this `%s' -" + msgstr "" + + #: ch/decl.c:3250 ch/decl.c:3261 + #, c-format + msgid " - or this granted decl `%s'" + msgstr "" + + #: ch/decl.c:4430 + #, fuzzy, c-format + msgid "enumerator value for `%s' is less then 0" + msgstr "`%s' ¤ÎÎóµóÃͤ¬À°¿ôÄê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: ch/decl.c:4512 + #, c-format + msgid "enumerators `%s' and `%s' have equal values" + msgstr "" + + #: ch/decl.c:4618 + msgid "undefined value in SET mode is obsolete and deprecated" + msgstr "" + + #: ch/decl.c:4794 + #, fuzzy + msgid "BASE variable never declared" + msgstr "ÊÑ¿ô¤Þ¤¿¤Ï¥Õ¥£¡¼¥ë¥É¤¬ void ¤ÈÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: ch/decl.c:4796 + msgid "cannot BASE a variable on a PROC/PROCESS name" + msgstr "" + + #: ch/decl.c:4848 + msgid "INTERNAL ERROR: handle_one_level is broken" + msgstr "" + + #: ch/expr.c:126 + #, c-format + msgid "tuple without specified mode not allowed in %s" + msgstr "" + + #: ch/expr.c:128 + #, fuzzy, c-format + msgid "conditional expression not allowed in %s" + msgstr "¥»¥¯¥·¥ç¥ó°À­¤Ï `%s' ¤Ë¤Ï»È¤¨¤Þ¤»¤ó" + + #: ch/expr.c:130 + #, fuzzy, c-format + msgid "internal error: unknown expression mode in %s" + msgstr "ÆâÉô gcc ¥¨¥é¡¼: °ÌÃÖ¤ò¥·¥ó¥Ü¥ëɽ¸½¤Ç¤­¤Þ¤»¤ó" + + #: ch/expr.c:147 + msgid "CASE selector is not a discrete expression" + msgstr "" + + #: ch/expr.c:215 + msgid "The number of CASE selectors does not match the number of CASE label lists" + msgstr "" + + #: ch/expr.c:594 + msgid "powerset is not addressable" + msgstr "" + + #: ch/expr.c:639 + msgid "array is not addressable" + msgstr "" + + #: ch/expr.c:687 + #, fuzzy, c-format + msgid "too few arguments in call to `%s'" + msgstr "´Ø¿ô `%s' ¤Ø¤Î°ú¿ô¤¬¾¯¤Ê¤¹¤®¤Þ¤¹" + + #: ch/expr.c:689 + #, fuzzy, c-format + msgid "too many arguments in call to `%s'" + msgstr "´Ø¿ô `%s' ¤ËÂФ¹¤ë°ú¿ô¤¬Â¿¤¹¤®¤Þ¤¹" + + #: ch/expr.c:758 + #, fuzzy + msgid "cannot dereference, not a pointer" + msgstr "`void *' ¥Ý¥¤¥ó¥¿¤Ø¤Î´ÖÀÜ»²¾È¤Ç¤¹" + + #: ch/expr.c:768 + #, c-format + msgid "missing '.' operator or undefined mode name `%s'" + msgstr "" + + #: ch/expr.c:771 + msgid "you have forgotten the '.' operator which must" + msgstr "" + + #: ch/expr.c:772 + #, c-format + msgid " precede a STRUCT field reference, or `%s' is an undefined mode" + msgstr "" + + #: ch/expr.c:786 + msgid "can't dereference PTR value using unary `->'" + msgstr "" + + #: ch/expr.c:831 + #, fuzzy + msgid "invalid type argument of `->'" + msgstr "`%s' ¤Î°ú¿ô¤È¤·¤ÆÌµ¸ú¤Ê·¿" + + #: ch/expr.c:856 ch/expr.c:969 + #, fuzzy + msgid "operand of '.' is not a STRUCT" + msgstr "`->' ¤Î¥Ù¡¼¥¹¥ª¥Ú¥é¥ó¥É¤¬¥Ý¥¤¥ó¥¿¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: ch/expr.c:909 + #, fuzzy, c-format + msgid "no field named `%s'" + msgstr "`%s' ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó" + + #: ch/expr.c:1217 + msgid "ABS argument must be discrete or real mode" + msgstr "" + + #: ch/expr.c:1250 + #, c-format + msgid "argument %d to ABSTIME must be of integer type" + msgstr "" + + #: ch/expr.c:1288 ch/expr.c:1329 + #, fuzzy + msgid "parameter 1 must be referable" + msgstr "¥Þ¥¯¥í²¾°ú¿ô¤Ï¥«¥ó¥Þ¶èÀڤꤵ¤ì¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: ch/expr.c:1294 ch/expr.c:1335 ch/expr.c:1372 + #, fuzzy + msgid "mode mismatch in parameter 1" + msgstr "̵¸ú¤Ê catch ¤Î°ú¿ô" + + #: ch/expr.c:1301 ch/expr.c:1342 + #, fuzzy + msgid "parameter 2 must be a positive integer" + msgstr "#line ¤Î¸å¤í¤Î \"%s\" ¤¬Àµ¤ÎÀ°¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: ch/expr.c:1436 + msgid "CARD argument must be powerset mode" + msgstr "" + + #: ch/expr.c:1487 + msgid "expression for DESCR-built-in must be referable" + msgstr "" + + #: ch/expr.c:1535 + #, fuzzy, c-format + msgid "argument to `%s' must be of integer type" + msgstr "`%s' ¤Ø¤Î°ú¿ô¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: ch/expr.c:1568 + #, fuzzy, c-format + msgid "argument 1 to `%s' must be of floating point mode" + msgstr "ÉâÆ°¾®¿ôÅÀ¿ô¤ÎÅù²Á¥Æ¥¹¥È¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë" + + #: ch/expr.c:1602 + #, fuzzy, c-format + msgid "first argument to `%s' must be a mode" + msgstr "`%s' ¤ÎÂè°ì°ú¿ô¤Ï `int' ¤È¤¹¤Ù¤­¤Ç¤¹" + + #: ch/expr.c:1609 + #, c-format + msgid "READonly modes for %s must have a value" + msgstr "" + + #: ch/expr.c:1692 + msgid "argument to TERMINATE must be a reference primitive value" + msgstr "" + + #: ch/expr.c:1741 + msgid "argument 1 to INTTIME must be of mode TIME" + msgstr "" + + #: ch/expr.c:1888 + msgid "LENGTH argument must be string, buffer, event mode, text location or mode" + msgstr "" + + #: ch/expr.c:1917 + msgid "UPPER argument must have a mode, or be a mode" + msgstr "" + + #: ch/expr.c:1919 + msgid "LOWER argument must have a mode, or be a mode" + msgstr "" + + #: ch/expr.c:1953 + msgid "UPPER argument must be string, array, mode or integer" + msgstr "" + + #: ch/expr.c:1955 + msgid "LOWER argument must be string, array, mode or integer" + msgstr "" + + #: ch/expr.c:1991 + #, c-format + msgid "%s argument must be POWERSET mode" + msgstr "" + + #: ch/expr.c:2017 + #, c-format + msgid "%s called for empty POWERSET" + msgstr "" + + #: ch/expr.c:2098 + #, fuzzy + msgid "argument to NUM is not discrete" + msgstr "°ú¿ô¤¬¹½Â¤ÂΤǤ¹" + + #: ch/expr.c:2110 + #, fuzzy + msgid "no integer mode which matches expression's mode" + msgstr "À°¿ô¤¬¥×¥ê¥×¥í¥»¥Ã¥µ¼°Æâ¤Ç¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤Þ¤·¤¿" + + #: ch/expr.c:2119 + msgid "NUM's parameter is below its mode range" + msgstr "" + + #: ch/expr.c:2122 + msgid "NUM's parameter is above its mode range" + msgstr "" + + #: ch/expr.c:2161 + msgid "cannot take SUCC or PRED of a numbered SET" + msgstr "" + + #: ch/expr.c:2169 + msgid "SUCC or PRED must not be done on a PTR" + msgstr "" + + #: ch/expr.c:2172 + msgid "SUCC or PRED for a reference type is not standard" + msgstr "" + + #: ch/expr.c:2182 + msgid "SUCC or PRED argument must be a discrete mode" + msgstr "" + + #: ch/expr.c:2203 + #, c-format + msgid "taking the %s of a value already at its %s value" + msgstr "" + + #: ch/expr.c:2254 + #, fuzzy + msgid "size applied to a function mode" + msgstr "sizeof ¤¬´Ø¿ô·¿¤ËŬÍѤµ¤ì¤Þ¤·¤¿" + + #: ch/expr.c:2260 + #, fuzzy + msgid "sizeof applied to a void mode" + msgstr "sizeof ¤¬ void ·¿¤ËŬÍѤµ¤ì¤Þ¤·¤¿" + + #: ch/expr.c:2265 + #, fuzzy + msgid "sizeof applied to an incomplete mode" + msgstr "sizeof ¤¬ÉÔ´°Á´¤Ê·¿¤ËŬÍѤµ¤ì¤Þ¤·¤¿" + + #: ch/expr.c:2360 + msgid "cannot call a PROCESS, you START a PROCESS" + msgstr "" + + #: ch/expr.c:2422 + #, fuzzy, c-format + msgid "invalid %s" + msgstr "̵¸ú¤Ê `asm': %s" + + #: ch/expr.c:2437 + #, fuzzy, c-format + msgid "%s parameter %d must be a location" + msgstr "²¾°ú¿ô `%s' ¾¯¤·Á°Êý¤ÇÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: ch/expr.c:2445 + #, c-format + msgid "%s parameter %d is READ-only" + msgstr "" + + #: ch/expr.c:2488 + #, c-format + msgid "LOC actual parameter %d is a non-referable location" + msgstr "" + + #: ch/expr.c:2494 + #, fuzzy, c-format + msgid "mode mismatch in parameter %d" + msgstr "̵¸ú¤Ê catch ¤Î°ú¿ô" + + #: ch/expr.c:2518 + #, fuzzy, c-format + msgid "too many arguments to procedure `%s'" + msgstr "´Ø¿ô `%s' ¤ËÂФ¹¤ë°ú¿ô¤¬Â¿¤¹¤®¤Þ¤¹" + + #: ch/expr.c:2521 + #, fuzzy + msgid "too many arguments to procedure" + msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È¤Ø¤Î°ú¿ô¤¬Â¿¤¹¤®¤Þ¤¹" + + #: ch/expr.c:2527 + #, fuzzy, c-format + msgid "too few arguments to procedure `%s'" + msgstr "´Ø¿ô `%s' ¤Ø¤Î°ú¿ô¤¬¾¯¤Ê¤¹¤®¤Þ¤¹" + + #: ch/expr.c:2530 + #, fuzzy + msgid "too few arguments to procedure" + msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È¤Ø¤Î°ú¿ô¤¬¾¯¤Ê¤¹¤®¤Þ¤¹" + + #: ch/expr.c:2596 + #, fuzzy + msgid "syntax error (integer used as function)" + msgstr "'%s' ¥È¡¼¥¯¥ó¤Î½ê¤Çʸˡ¥¨¥é¡¼" + + #: ch/expr.c:2616 + msgid "syntax error - missing operator, comma, or '('?" + msgstr "" + + #: ch/expr.c:2977 + #, fuzzy, c-format + msgid "unimplemented built-in function `%s'" + msgstr "ÁȤ߹þ¤ß´Ø¿ô `%s' ¤òʤ¤¤±£¤·¤Þ¤¹" + + #: ch/expr.c:2981 + #, fuzzy, c-format + msgid "internal error - bad built-in function `%s'" + msgstr "ÁȤ߹þ¤ß´Ø¿ô `%s' ¤È·¿¤¬Ì·½â¤·¤Þ¤¹" + + #: ch/expr.c:2995 + #, fuzzy + msgid "empty expression in string index" + msgstr "%s ¤Ç¶õ¤ÎÀºÅÙ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç¤¹" + + #: ch/expr.c:3000 + msgid "only one expression allowed in string index" + msgstr "" + + #: ch/expr.c:3017 + msgid "invalid: primval ( untyped_exprlist )" + msgstr "" + + #: ch/expr.c:3081 ch/expr.c:3095 + msgid "operand is variable-size bitstring/power-set" + msgstr "" + + #: ch/expr.c:3245 + #, c-format + msgid "tree code `%s' unhandled in build_compare_set_expr" + msgstr "" + + #: ch/expr.c:3410 + #, fuzzy + msgid "incompatible modes in concat expression" + msgstr "Äê¿ô¼°¤¬¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤Þ¤·¤¿" + + #: ch/expr.c:3459 + #, fuzzy + msgid "invalid operation on array of chars" + msgstr "Æó¹à±é»»»Ò %s ¤¬ÉÔŬÀڤǤ¹" + + #: ch/expr.c:3504 + #, fuzzy + msgid "comparison of variant structures is unsafe" + msgstr "ÉâÆ°¾®¿ôÅÀ¤ÎÈæ³Ó¤Ç == ¤ä != ¤ò»È¤¦¤Î¤Ï°ÂÁ´¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: ch/expr.c:3511 + msgid "compare with variant records" + msgstr "" + + #: ch/expr.c:3688 ch/expr.c:3924 + #, fuzzy, c-format + msgid "incompatible operands to %s" + msgstr "%s ¤Ë¸ß´¹À­¤Î¤Ê¤¤·¿" + + #: ch/expr.c:3740 + #, fuzzy + msgid "relational operator not allowed for this mode" + msgstr "¥»¥¯¥·¥ç¥ó°À­¤Ï `%s' ¤Ë¤Ï»È¤¨¤Þ¤»¤ó" + + #: ch/expr.c:3794 + #, c-format + msgid "cannot use %s operator on PROC mode variable" + msgstr "" + + #: ch/expr.c:3800 + #, fuzzy, c-format + msgid "invalid left operand of %s" + msgstr "%s ¥³¡¼¥É¤ËÂФ¹¤ë̵¸ú¤Ê¥ª¥Ú¥é¥ó¥É" + + #: ch/expr.c:3805 ch/expr.c:4357 + #, fuzzy, c-format + msgid "invalid right operand of %s" + msgstr "%s ¥³¡¼¥É¤ËÂФ¹¤ë̵¸ú¤Ê¥ª¥Ú¥é¥ó¥É" + + #: ch/expr.c:3819 + #, fuzzy + msgid "repetition expression must be constant" + msgstr "`__builtin_args_info' ¤Î°ú¿ô¤ÏÄê¿ô¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: ch/expr.c:3829 + msgid "left argument to MOD/REM operator must be integral" + msgstr "" + + #: ch/expr.c:3834 + msgid "right argument to MOD/REM operator must be integral" + msgstr "" + + #: ch/expr.c:3891 + #, fuzzy + msgid "right operand of IN is not a powerset" + msgstr "`->' ¤Î¥Ù¡¼¥¹¥ª¥Ú¥é¥ó¥É¤¬¥Ý¥¤¥ó¥¿¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: ch/expr.c:3896 + #, fuzzy + msgid "left operand of IN incompatible with right operand" + msgstr "`asm' ¥ª¥Ú¥é¥ó¥ÉÀ©Ì󤬥ª¥Ú¥é¥ó¥É¥µ¥¤¥º¤ÈÀ°¹ç¤·¤Þ¤»¤ó" + + #: ch/expr.c:3987 + #, fuzzy + msgid "-> operator not allow in constant expression" + msgstr "Äê¿ô¼°¤¬¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤Þ¤·¤¿" + + #: ch/expr.c:4000 + msgid "taking the address of a string literal is non-standard" + msgstr "" + + #: ch/expr.c:4002 + msgid "taking the address of a function is non-standard" + msgstr "" + + #: ch/expr.c:4005 + msgid "ADDR requires a LOCATION argument" + msgstr "" + + #: ch/expr.c:4035 + msgid "-> expression is not addressable" + msgstr "" + + #: ch/expr.c:4062 + msgid "ADDR parameter must be a LOCATION" + msgstr "" + + #: ch/expr.c:4071 + msgid "possible internal error in build_chill_arrow_expr" + msgstr "" + + #: ch/expr.c:4076 + #, fuzzy, c-format + msgid "%s is not addressable" + msgstr "\"%s\" ¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: ch/expr.c:4175 + #, fuzzy + msgid "repetition count is not an integer constant" + msgstr "Í׵ᤵ¤ì¤¿ init_priority ¤ÏÀ°¿ô·¿¤ÎÄê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: ch/expr.c:4183 + msgid "repetition count < 0" + msgstr "" + + #: ch/expr.c:4188 + #, fuzzy + msgid "repetition value not constant" + msgstr "½¸¹çÂΤνé´ü²½»Ò¤¬Äê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: ch/expr.c:4200 + msgid "bitstring repetition of non-constant boolean" + msgstr "" + + #: ch/expr.c:4223 + #, fuzzy + msgid "string repetition operand is non-constant bitstring" + msgstr "½ÐÎÏ¥ª¥Ú¥é¥ó¥É¤¬ `asm' Æâ¤ÇÄê¿ô¤Ç¤¹" + + #: ch/expr.c:4283 + #, fuzzy + msgid "non-char, non-bit string repetition" + msgstr "´ûÃΤÎÁ´¤Æ¤Îʸ»úÎóÁàºî¤ò inline ¤Ë¤¹¤ë" + + #: ch/expr.c:4311 + #, fuzzy, c-format + msgid "invalid operand of %s" + msgstr "%s ¥³¡¼¥É¤ËÂФ¹¤ë̵¸ú¤Ê¥ª¥Ú¥é¥ó¥É" + + #: ch/expr.c:4322 + #, fuzzy, c-format + msgid "right operand of %s is not array of boolean" + msgstr "`->' ¤Î¥Ù¡¼¥¹¥ª¥Ú¥é¥ó¥É¤¬¥Ý¥¤¥ó¥¿¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: ch/expr.c:4335 + #, c-format + msgid "%s operator applied to boolean variable" + msgstr "" + + #: ch/expr.c:4406 + #, fuzzy + msgid "non-boolean mode in conditional expression" + msgstr "¾ò·ï¼°¤ËÉä¹çÉÕ¤­·¿¤ÈÉä¹ç̵¤··¿¤È¤¬¤¢¤ê¤Þ¤¹" + + #: ch/grant.c:1978 + msgid "decode_constant: invalid component_ref" + msgstr "" + + #: ch/grant.c:1986 + msgid "decode_constant: mode and value mismatch" + msgstr "" + + #: ch/grant.c:1989 + msgid "decode_constant: cannot decode this mode" + msgstr "" + + #: ch/grant.c:2214 + msgid "decode_constant_selective: mode and value mismatch" + msgstr "" + + #: ch/grant.c:2217 + msgid "decode_constant_selective: cannot decode this mode" + msgstr "" + + #: ch/grant.c:2677 + #, c-format + msgid "can't write to %s" + msgstr "%s ¤Ø½ñ¤­¹þ¤á¤Þ¤»¤ó" + + #: ch/grant.c:2764 + #, fuzzy + msgid "FORBID is not yet implemented" + msgstr "Trampoline ¤Ï¡¢¤Þ¤À¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #. this nerver should happen + #: ch/grant.c:2825 + #, fuzzy, c-format + msgid "function \"really_grant_this\" called for `%s'" + msgstr "¥»¥¯¥·¥ç¥ó°À­¤Ï `%s' ¤Ë¤Ï»È¤¨¤Þ¤»¤ó" + + #: ch/inout.c:1645 + msgid "non-integral text length" + msgstr "" + + #: ch/inout.c:1650 + msgid "non-constant text length" + msgstr "" + + #: ch/inout.c:1655 + msgid "text length must be greater then 0" + msgstr "" + + #: ch/inout.c:1755 + #, c-format + msgid "argument %d of %s must be of mode ASSOCIATION" + msgstr "" + + #: ch/inout.c:1760 ch/inout.c:2146 ch/inout.c:2516 ch/inout.c:2751 + #, fuzzy, c-format + msgid "argument %d of %s must be a location" + msgstr "`asm' ¤Î°ú¿ô¤¬Äê¿ôʸ»úÎó¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó " + + #: ch/inout.c:1795 + #, fuzzy + msgid "argument 2 of ASSOCIATE must not be an empty string" + msgstr "`asm' ¤Î°ú¿ô¤¬Äê¿ôʸ»úÎó¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó " + + #: ch/inout.c:1811 + msgid "argument 2 to ASSOCIATE must be a string" + msgstr "" + + #: ch/inout.c:1850 + msgid "argument 3 to ASSOCIATE must be a string" + msgstr "" + + #: ch/inout.c:2031 + #, fuzzy + msgid "too many arguments in call to MODIFY" + msgstr "´Ø¿ô¤ËÂФ¹¤ë°ú¿ô¤¬Â¿¤¹¤®¤Þ¤¹" + + #: ch/inout.c:2044 + #, fuzzy + msgid "argument 2 of MODIFY must not be an empty string" + msgstr "`asm' ¤Î°ú¿ô¤¬Äê¿ôʸ»úÎó¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó " + + #: ch/inout.c:2060 + #, fuzzy + msgid "argument 2 to MODIFY must be a string" + msgstr "`%s' ¤Ø¤Î°ú¿ô¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: ch/inout.c:2094 + #, fuzzy + msgid "argument 3 to MODIFY must be a string" + msgstr "`%s' ¤Ø¤Î°ú¿ô¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: ch/inout.c:2141 + #, c-format + msgid "argument %d of %s must be an ACCESS or TEXT mode" + msgstr "" + + #: ch/inout.c:2355 + msgid "argument 4 of CONNECT must be of mode WHERE" + msgstr "" + + #: ch/inout.c:2371 + msgid "index expression for ACCESS without index" + msgstr "" + + #: ch/inout.c:2376 ch/inout.c:2554 ch/inout.c:2636 ch/inout.c:4356 + #: ch/inout.c:4504 + #, fuzzy + msgid "incompatible index mode" + msgstr "%s ¤Ë¸ß´¹À­¤Î¤Ê¤¤·¿" + + #: ch/inout.c:2476 + msgid "argument 3 to CONNECT must be of mode USAGE" + msgstr "" + + #: ch/inout.c:2511 + #, c-format + msgid "argument %d of %s must be of mode ACCESS" + msgstr "" + + #: ch/inout.c:2545 + #, fuzzy + msgid "too few arguments in call to `readrecord'" + msgstr "´Ø¿ô `%s' ¤Ø¤Î°ú¿ô¤¬¾¯¤Ê¤¹¤®¤Þ¤¹" + + #: ch/inout.c:2569 ch/inout.c:2648 + #, fuzzy + msgid "incompatible record mode" + msgstr "%s ¤Ë¸ß´¹À­¤Î¤Ê¤¤·¿" + + #: ch/inout.c:2574 + msgid "store location must not be READonly" + msgstr "" + + #: ch/inout.c:2616 + #, fuzzy + msgid "too few arguments in call to `writerecord'" + msgstr "´Ø¿ô `%s' ¤Ø¤Î°ú¿ô¤¬¾¯¤Ê¤¹¤®¤Þ¤¹" + + #: ch/inout.c:2643 + msgid "transfer to ACCESS without record mode" + msgstr "" + + #: ch/inout.c:2746 + #, c-format + msgid "argument %d of %s must be of mode TEXT" + msgstr "" + + #: ch/inout.c:2803 + msgid "TEXT doesn't have a location" + msgstr "" + + #: ch/inout.c:2905 + msgid "incompatible index mode for SETETEXTACCESS" + msgstr "" + + #: ch/inout.c:2915 + msgid "incompatible record mode for SETTEXTACCESS" + msgstr "" + + #: ch/inout.c:2945 + #, fuzzy + msgid "parameter 2 must be a location" + msgstr "²¾°ú¿ô `%s' ¾¯¤·Á°Êý¤ÇÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: ch/inout.c:2955 + #, fuzzy + msgid "incompatible modes in parameter 2" + msgstr "%s ¤Ë¸ß´¹À­¤Î¤Ê¤¤·¿" + + #: ch/inout.c:3062 + #, fuzzy + msgid "conditional expression not allowed in this context" + msgstr "¥Ö¥ì¡¼¥¹¤Ç¤Þ¤È¤á¤é¤ì¤¿¼°¤Ï´Ø¿ô¤ÎÆâ¦¤Ç¤Î¤ßµö¤µ¤ì¤Þ¤¹" + + #: ch/inout.c:3064 + #, fuzzy, c-format + msgid "untyped expression as argument %d" + msgstr "¼°Ê¸¤¬Ìµ¸ú¤Ç¤¹" + + #: ch/inout.c:3141 ch/inout.c:3187 + #, c-format + msgid "cannot process %d bits integer for READTEXT argument %d" + msgstr "" + + #: ch/inout.c:3262 + #, c-format + msgid "cannot process %d bits integer WRITETEXT argument %d" + msgstr "" + + #: ch/inout.c:3283 ch/inout.c:3338 ch/inout.c:3417 ch/inout.c:3483 + #: ch/inout.c:3534 ch/inout.c:3619 ch/inout.c:3654 + #, fuzzy, c-format + msgid "argument %d is READonly" + msgstr "°ú¿ô #%d ¤Ï¹½Â¤ÂΤǤ¹" + + #: ch/inout.c:3290 ch/inout.c:3345 ch/inout.c:3424 ch/inout.c:3491 + #: ch/inout.c:3542 ch/inout.c:3627 ch/inout.c:3659 + #, fuzzy, c-format + msgid "argument %d must be referable" + msgstr "°ú¿ô #%d ¤Ï¹½Â¤ÂΤǤ¹" + + #: ch/inout.c:3578 + #, c-format + msgid "cannot process argument %d of WRITETEXT, unknown size" + msgstr "" + + #. datatype is not yet implemented, issue a warning + #: ch/inout.c:3725 + #, c-format + msgid "cannot process mode of argument %d for %sTEXT" + msgstr "" + + #: ch/inout.c:3868 + #, fuzzy + msgid "too few arguments for this format string" + msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È¤Ø¤Î°ú¿ô¤¬¾¯¤Ê¤¹¤®¤Þ¤¹" + + #: ch/inout.c:3893 ch/inout.c:3902 + #, c-format + msgid "type of argument %d invalid for conversion code at offset %d" + msgstr "" + + #: ch/inout.c:4012 + msgid "unmatched open paren" + msgstr "" + + #: ch/inout.c:4026 ch/inout.c:4221 + #, c-format + msgid "bad format specification character (offset %d)" + msgstr "" + + #: ch/inout.c:4039 + #, c-format + msgid "repetition factor overflow (offset %d)" + msgstr "" + + #: ch/inout.c:4057 ch/inout.c:4064 ch/inout.c:4071 + #, c-format + msgid "duplicate qualifier (offset %d)" + msgstr "" + + #: ch/inout.c:4093 + #, c-format + msgid "clause width overflow (offset %d)" + msgstr "" + + #: ch/inout.c:4106 + #, c-format + msgid "no fraction (offset %d)" + msgstr "" + + #: ch/inout.c:4124 + #, c-format + msgid "no fraction width (offset %d)" + msgstr "" + + #: ch/inout.c:4131 + #, c-format + msgid "fraction width overflow (offset %d)" + msgstr "" + + #: ch/inout.c:4142 + #, c-format + msgid "no exponent (offset %d)" + msgstr "" + + #: ch/inout.c:4160 + #, c-format + msgid "no exponent width (offset %d)" + msgstr "" + + #: ch/inout.c:4167 + #, c-format + msgid "exponent width overflow (offset %d)" + msgstr "" + + #: ch/inout.c:4208 + #, fuzzy + msgid "internal error in check_format_string" + msgstr "½ªÃ¼¤µ¤ì¤Æ¤¤¤Ê¤¤¥Õ¥©¡¼¥Þ¥Ã¥Èʸ»úÎó" + + #: ch/inout.c:4224 + #, c-format + msgid "no padding character (offset %d)" + msgstr "" + + #. too may arguments for format string + #: ch/inout.c:4256 + #, fuzzy + msgid "too many arguments for this format string" + msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È¤Ø¤Î°ú¿ô¤¬Â¿¤¹¤®¤Þ¤¹" + + #: ch/inout.c:4354 ch/inout.c:4502 + #, fuzzy + msgid "missing index expression" + msgstr "Äê¿ô¼°¤¬·ç¤±¤Æ¤¤¤ë¤«Ìµ¸ú¤Ç¤¹" + + #: ch/inout.c:4361 + #, fuzzy + msgid "too few arguments in call to `writetext'" + msgstr "´Ø¿ô `%s' ¤Ø¤Î°ú¿ô¤¬¾¯¤Ê¤¹¤®¤Þ¤¹" + + #: ch/inout.c:4374 + msgid "argument 1 for WRITETEXT must be a TEXT or CHARS(n) VARYING location" + msgstr "" + + #: ch/inout.c:4397 + msgid "`format string' for WRITETEXT must be a CHARACTER string" + msgstr "" + + #: ch/inout.c:4509 + #, fuzzy + msgid "too few arguments in call to `readtext'" + msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È¤Ø¤Î°ú¿ô¤¬¾¯¤Ê¤¹¤®¤Þ¤¹" + + #: ch/inout.c:4522 + msgid "argument 1 for READTEXT must be a TEXT location or CHARS(n) [ VARYING ] expression" + msgstr "" + + #: ch/inout.c:4543 + msgid "`format string' for READTEXT must be a CHARACTER string" + msgstr "" + + #: ch/lang.c:105 + #, fuzzy + msgid "non-constant expression" + msgstr "Äê¿ô¼°¤¬¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤Þ¤·¤¿" + + #: ch/lang.c:191 + #, fuzzy + msgid "ignoring case upon input and" + msgstr "¥¤¥ó¥Ç¥ó¥È¤µ¤ì¤¿ # ¤Ê¤Î¤Ç¡¢#%s ¤Ï̵»ë¤·¤Þ¤¹" + + #: ch/lang.c:192 + msgid "making special words uppercase wouldn't work" + msgstr "" + + #: ch/lang.c:203 + #, fuzzy + msgid "making special words uppercase and" + msgstr "¸À¸ìͽÌó¸ì¤Ï±ÑÂçʸ»ú¤È¤¹¤ë" + + #: ch/lang.c:204 + msgid " ignoring case upon input wouldn't work" + msgstr "" + + #: ch/lang.c:277 java/typeck.c:178 + msgid "internal error - use of undefined type" + msgstr "ÆâÉô¥¨¥é¡¼ - ̤ÄêµÁ·¿¤Î»ÈÍѤǤ¹" + + #: ch/lex.c:502 + #, fuzzy + msgid "invalid C'xx' " + msgstr "̵¸ú¤Ê %C ÃͤǤ¹" + + #: ch/lex.c:607 java/jcf-parse.c:603 java/jcf-write.c:3327 + #, c-format + msgid "can't close %s" + msgstr "%s ¤ò close ¤Ç¤­¤Þ¤»¤ó" + + #: ch/lex.c:711 + msgid "malformed exponent part of floating-point literal" + msgstr "" + + #: ch/lex.c:728 + #, fuzzy + msgid "real number exceeds range of REAL" + msgstr "ÉâÆ°¾®¿ôÅÀ¿ô¤¬ '%s' ¤ÎÈϰϤòͤ¨¤Þ¤·¤¿" + + #: ch/lex.c:747 ch/lex.c:774 + #, fuzzy + msgid "end-of-file in '<>' directive" + msgstr "̤ÄêµÁËô¤ÏÉÔÀµ¤Ê # ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç¤¹" + + #: ch/lex.c:780 + #, fuzzy + msgid "unrecognized compiler directive" + msgstr "ǧ¼±ÉÔǽ¤Î¥¨¥¹¥±¡¼¥× \\r%c" + + #: ch/lex.c:788 ch/lex.c:834 + #, fuzzy, c-format + msgid "unrecognized compiler directive `%s'" + msgstr "ǧ¼±ÉÔǽ¤Ê¥ª¥×¥·¥ç¥ó `-%s'" + + #: ch/lex.c:995 + #, fuzzy + msgid "unterminated control sequence" + msgstr "½ªÃ¼¤µ¤ì¤Æ¤¤¤Ê¤¤¥³¥á¥ó¥È" + + #: ch/lex.c:1010 ch/lex.c:1046 + #, fuzzy + msgid "invalid integer literal in control sequence" + msgstr "ʸ»úÎó¥ê¥Æ¥é¥ë¤¬Ìµ¸ú¤Ç¤¹¡¢ºÇ¸å¤Î '\\' ¤ò̵»ë¤·¤Þ¤¹" + + #: ch/lex.c:1021 ch/lex.c:1029 + msgid "control sequence overflow" + msgstr "" + + #: ch/lex.c:1023 ch/lex.c:1031 + #, fuzzy + msgid "invalid control sequence" + msgstr "̵¸ú¤ÊÀ©¸æ¼°¤Ç¤¹" + + #: ch/lex.c:1111 + #, fuzzy + msgid "invalid base in read control sequence" + msgstr "¥Ç¥¯¥ê¥á¥ó¥È¤ÎÃæ¤Ç¤Îº¸ÊÕÃͤ¬Ìµ¸ú¤Ç¤¹" + + #: ch/lex.c:1118 + #, fuzzy + msgid "invalid digit in control sequence" + msgstr "ÁȤ߹þ¤ß¥Þ¥¯¥í \"%s\" ¤Ï̵¸ú¤Ç¤¹" + + #: ch/lex.c:1145 + #, fuzzy + msgid "unterminated string literal" + msgstr "ʸ»úÎóÄê¿ô¤¬½ªÎ»¤·¤Æ¤¤¤Þ¤»¤ó" + + #: ch/lex.c:1248 ch/lex.c:1334 + #, fuzzy, c-format + msgid "invalid number format `%s'" + msgstr "̵¸ú¤Ê¥Ð¡¼¥¸¥ç¥óÈÖ¹æ·Á¼°" + + #: ch/lex.c:1266 + msgid "integer literal too big" + msgstr "" + + #: ch/lex.c:1395 + #, fuzzy, c-format + msgid "can't find %s" + msgstr "%s ¤ò rewind ¤Ç¤­¤Þ¤»¤ó" + + #: ch/lex.c:1421 + msgid "USE_SEIZE_FILE directive must be followed by string" + msgstr "" + + #: ch/lex.c:1693 f/lex.c:1190 + msgid "invalid #ident" + msgstr "̵¸ú¤Ê #ident" + + #: ch/lex.c:1711 f/lex.c:1207 + msgid "undefined or invalid # directive" + msgstr "̤ÄêµÁËô¤ÏÉÔÀµ¤Ê # ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç¤¹" + + #: ch/lex.c:1765 ch/lex.c:1774 f/lex.c:1263 + msgid "invalid #line" + msgstr "̵¸ú¤Ê #line" + + #: ch/lex.c:1843 f/lex.c:836 + msgid "#-lines for entering and leaving files don't match" + msgstr "¥Õ¥¡¥¤¥ë¤Ø¤Î½ÐÆþ¤ê¸ý¤È¤Ê¤ë #-¹Ô ¤¬À°¹ç¤·¤Þ¤»¤ó" + + #: ch/lex.c:1868 f/lex.c:1373 + msgid "invalid #-line" + msgstr "̵¸ú¤Ê #-¹Ô" + + #: ch/lex.c:1998 + #, fuzzy + msgid "missing `=' in compiler directive" + msgstr "¥Þ¥¯¥í²¾°ú¿ô¥ê¥¹¥È¤Ç¡¢')' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: ch/lex.c:2040 ch/lex.c:2050 ch/lex.c:2091 + #, fuzzy + msgid "invalid value follows `=' in compiler directive" + msgstr "\"%s\" ¤Ï line ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç¤Ï̵¸ú¤Ê¥Õ¥é¥°¤Ç¤¹" + + #: ch/lex.c:2061 + #, fuzzy, c-format + msgid "invalid `%c' character in name" + msgstr "ÉÔŬÀڤʥæ¥Ë¥Ð¡¼¥µ¥ë¥­¥ã¥é¥¯¥¿Ì¾" + + #: ch/lex.c:2074 + #, fuzzy, c-format + msgid "`%s' not integer constant synonym " + msgstr "À°¿ôÄê¿ôÃæ¤Ë 2¤Ä¤Î `u'" + + #: ch/lex.c:2097 + #, fuzzy + msgid "value out of range in compiler directive" + msgstr "\"%s\" ¤Ï line ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Ç¤Ï̵¸ú¤Ê¥Õ¥é¥°¤Ç¤¹" + + #: ch/lex.c:2214 java/jcf-parse.c:599 + #, c-format + msgid "can't reopen %s" + msgstr "%s ¤òºÆ open ¤Ç¤­¤Þ¤»¤ó" + + #: ch/lex.c:2225 + msgid "no modules seen" + msgstr "" + + #: ch/loop.c:480 + #, fuzzy + msgid "modeless tuple not allowed in this context" + msgstr "%s: %s ¥³¥ó¥Ñ¥¤¥é¤Ï¤³¤Î¥·¥¹¥Æ¥à¤Ë¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: ch/loop.c:482 + #, fuzzy + msgid "IN expression does not have a mode" + msgstr "¼°Ê¸¤¬Ìµ¸ú¤Ç¤¹" + + #: ch/loop.c:489 + msgid "location enumeration for BOOLS" + msgstr "" + + #: ch/loop.c:517 + msgid "location enumeration for bit-packed arrays" + msgstr "" + + #: ch/loop.c:526 ch/nloop.c:481 + msgid "loop's IN expression is not a composite object" + msgstr "" + + #: ch/loop.c:541 ch/nloop.c:498 + msgid "start expr must have discrete mode" + msgstr "" + + #: ch/loop.c:547 ch/nloop.c:504 + #, fuzzy + msgid "DO FOR start expression is a numbered SET" + msgstr "¥¹¥¿¥Ã¥¯À©¸Â¼°¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó" + + #: ch/loop.c:555 ch/nloop.c:510 + msgid "TO expression is a numbered SET" + msgstr "" + + #: ch/loop.c:560 ch/nloop.c:525 + msgid "TO expr must have discrete mode" + msgstr "" + + #: ch/loop.c:565 ch/nloop.c:531 + #, fuzzy + msgid "start expr and TO expr must be compatible" + msgstr "shared ¤È mdll ¤È¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó" + + #: ch/loop.c:574 ch/nloop.c:546 + msgid "BY expr must have discrete mode" + msgstr "" + + #: ch/loop.c:579 ch/nloop.c:552 + #, fuzzy + msgid "start expr and BY expr must be compatible" + msgstr "shared ¤È mdll ¤È¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó" + + #: ch/loop.c:595 ch/nloop.c:765 + #, fuzzy + msgid "loop identifier undeclared" + msgstr "¼±Ê̻Ҥ¬É¬ÍפǤ¹" + + #: ch/loop.c:606 + #, fuzzy + msgid "loop variable incompatible with start expression" + msgstr "Äê¿ô¼°¤¬¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤Þ¤·¤¿" + + #: ch/loop.c:633 ch/nloop.c:564 + #, fuzzy + msgid "body of DO FOR will never execute" + msgstr "¼Â¹Ô¤µ¤ì¤ë¤³¤È¤¬¤Ê¤¤¥³¡¼¥É¤Ë´Ø¤·¤Æ·Ù¹ð¤¹¤ë" + + #: ch/loop.c:648 ch/nloop.c:585 + msgid "BY expression is negative or zero" + msgstr "" + + #: ch/loop.c:847 ch/nloop.c:817 + msgid "can't iterate through array of BOOL" + msgstr "" + + #: ch/nloop.c:867 + msgid "Can't iterate through array of BOOL" + msgstr "" + + #: ch/parse.c:159 + #, c-format + msgid "there was no start label to match the end label '%s'" + msgstr "" + + #: ch/parse.c:162 + #, c-format + msgid "start label '%s' does not match end label '%s'" + msgstr "" + + #: ch/parse.c:192 + #, fuzzy, c-format + msgid "`%s' not declared" + msgstr "`%s' ¤ÏÁ°¤Ë¤³¤³¤ÇÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: ch/parse.c:226 + msgid "no RETURN or RESULT in procedure" + msgstr "" + + #: ch/parse.c:245 + msgid "PREFIXED clause with no prelix in unlabeled module" + msgstr "" + + #: ch/parse.c:336 + #, fuzzy, c-format + msgid "internal parser error - expected token %d" + msgstr "ÆâÉô¥¨¥é¡¼ - ̤ÄêµÁ·¿¤Î»ÈÍѤǤ¹" + + #: ch/parse.c:529 + #, fuzzy, c-format + msgid "'%s!' is not followed by an identifier" + msgstr "'#' ¤Ë¥Þ¥¯¥í²¾°ú¿ô̾¤¬Â³¤¤¤Æ¤¤¤Þ¤»¤ó" + + #: ch/parse.c:545 + msgid "expected a name here" + msgstr "" + + #: ch/parse.c:560 + msgid "expected a name string here" + msgstr "" + + #: ch/parse.c:591 + #, fuzzy, c-format + msgid "`%s' undeclared" + msgstr "`%s' ¤ÏÁ°¤Ë¤³¤³¤ÇÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: ch/parse.c:669 + msgid "action not allowed in SPEC MODULE" + msgstr "" + + #: ch/parse.c:691 + #, fuzzy + msgid "missing defining occurrence" + msgstr "%c ʸ»ú¤Ç¤Î½ªÃ¼¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: ch/parse.c:702 + msgid "bad defining occurrence following ','" + msgstr "" + + #: ch/parse.c:802 + #, fuzzy + msgid "missing '(' in exception list" + msgstr "¥Þ¥¯¥í²¾°ú¿ô¥ê¥¹¥È¤Ç¡¢')' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: ch/parse.c:827 + #, fuzzy + msgid "ON exception names must be unique" + msgstr "¥Þ¥¯¥í̾¤Ï¼±Ê̻ҤǤʤ¯¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó" + + #: ch/parse.c:837 + #, fuzzy + msgid "syntax error in exception list" + msgstr "'@' ¥È¡¼¥¯¥ó¤Çʸˡ¥¨¥é¡¼" + + #: ch/parse.c:873 + #, fuzzy + msgid "empty ON-condition" + msgstr "¶õ¤ÎÀë¸À¤Ç¤¹" + + #: ch/parse.c:938 + msgid "INIT not allowed at loc-identity declaration" + msgstr "" + + #: ch/parse.c:948 + #, fuzzy + msgid "'=' used where ':=' is required" + msgstr "¥¹¥«¥é¡¼¤¬É¬Íפʾì½ê¤ËÇÛÎ󷿤ÎÃͤ¬»È¤ï¤ì¤Þ¤·¤¿" + + #: ch/parse.c:956 + #, fuzzy + msgid "initialization is not allowed in spec module" + msgstr "²ÄÊÑÇÛÎó¥á¥ó¥Ð¤ò½é´ü²½¤·¤Æ¤¤¤Þ¤¹" + + #: ch/parse.c:964 + #, fuzzy + msgid "loc-identity declaration without initialization" + msgstr "friend Àë¸À¤¬¥¯¥é¥¹ÄêµÁ¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤ó" + + #: ch/parse.c:1008 + msgid "bad syntax following FORBID" + msgstr "" + + #: ch/parse.c:1023 + msgid "expected a postfix name here" + msgstr "" + + #: ch/parse.c:1068 + msgid "expected another rename clause" + msgstr "" + + #: ch/parse.c:1128 + #, fuzzy + msgid "syntax error in parameter name list" + msgstr "\"%s\" ¤Ï¥Þ¥¯¥í²¾°ú¿ô¥ê¥¹¥È¤Ë¸½¤ì¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó" + + #: ch/parse.c:1221 + msgid "NONREF specific without LOC in result attribute" + msgstr "" + + #: ch/parse.c:1223 + msgid "DYNAMIC specific without LOC in result attribute" + msgstr "" + + #: ch/parse.c:1245 + #, fuzzy + msgid "exception names must be unique" + msgstr "¥Þ¥¯¥í̾¤Ï¼±Ê̻ҤǤʤ¯¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó" + + #: ch/parse.c:1441 + msgid "must specify a PROCESS name" + msgstr "" + + #: ch/parse.c:1448 + msgid "SIGNAL must be in global reach" + msgstr "" + + #: ch/parse.c:1479 + #, fuzzy + msgid "syntax error while parsing signal definition statement" + msgstr "final °À­¤Î¹½Ê¸²òÀÏÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿" + + #: ch/parse.c:1593 + msgid "case range list" + msgstr "" + + #: ch/parse.c:1660 + #, fuzzy + msgid "misplaced colon in case label" + msgstr "case ¥é¥Ù¥ë¤Ë¥¸¥ã¥ó¥×¤·¤Æ¤¤¤Þ¤¹" + + #: ch/parse.c:1707 + #, fuzzy + msgid "unrecognized case label list after ','" + msgstr "ǧ¼±¤Ç¤­¤Ê¤¤¥ì¥¸¥¹¥¿Ì¾ `%s'" + + #: ch/parse.c:1971 ch/parse.c:1997 + #, fuzzy + msgid "bad ASM operand" + msgstr "̵¸ú¤Ê %%A ¥ª¥Ú¥é¥ó¥É" + + #: ch/parse.c:2067 + msgid "readonly location modified by 'asm'" + msgstr "" + + #: ch/parse.c:2198 + msgid "expected 'TO' in step enumeration" + msgstr "" + + #: ch/parse.c:2213 + msgid "expected 'IN' in FOR control here" + msgstr "" + + #: ch/parse.c:2314 + msgid "missing DELAY CASE alternative" + msgstr "" + + #. This is probably not possible + #: ch/parse.c:2348 + msgid "non-referable location in DO WITH" + msgstr "" + + #: ch/parse.c:2360 + msgid "WITH element must be of STRUCT mode" + msgstr "" + + #: ch/parse.c:2467 + msgid "missing ')' in signal/buffer receive alternative" + msgstr "" + + #: ch/parse.c:2481 + msgid "misplaced 'IN' in signal/buffer receive alternative" + msgstr "" + + #: ch/parse.c:2529 + #, fuzzy + msgid "missing RECEIVE alternative" + msgstr "Code °À­¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: ch/parse.c:2655 + #, fuzzy + msgid "PROCESS copy number must be integer" + msgstr "¥Þ¥¯¥í̾¤Ï¼±Ê̻ҤǤʤ¯¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó" + + #: ch/parse.c:2882 + msgid "missing parenthesis for procedure call" + msgstr "" + + #: ch/parse.c:2884 + msgid "expression is not an action" + msgstr "" + + #: ch/parse.c:2918 + #, fuzzy + msgid "syntax error in action" + msgstr "'@' ¥È¡¼¥¯¥ó¤Çʸˡ¥¨¥é¡¼" + + #: ch/parse.c:2945 + msgid "no handler is permitted on this action" + msgstr "" + + #: ch/parse.c:2966 + msgid "definition follows action" + msgstr "" + + #: ch/parse.c:3042 + msgid "bad tuple field name list" + msgstr "" + + #: ch/parse.c:3088 + msgid "invalid syntax for label in tuple" + msgstr "" + + #: ch/parse.c:3133 + msgid "bad syntax in tuple" + msgstr "" + + #: ch/parse.c:3160 + msgid "non-mode name before tuple" + msgstr "" + + #: ch/parse.c:3205 + #, fuzzy + msgid "invalid expression/location syntax" + msgstr "¼°Ê¸¤¬Ìµ¸ú¤Ç¤¹" + + #: ch/parse.c:3262 + msgid "RECEIVE expression" + msgstr "" + + #: ch/parse.c:3457 + msgid "there should not be a ';' here" + msgstr "" + + #: ch/parse.c:3496 + #, fuzzy + msgid "missing ELSE/ELSIF in IF expression" + msgstr "Äê¿ô¼°¤¬·ç¤±¤Æ¤¤¤ë¤«Ìµ¸ú¤Ç¤¹" + + #: ch/parse.c:3547 + #, fuzzy + msgid "conditional expression not allowed inside parentheses" + msgstr "¥Ö¥ì¡¼¥¹¤Ç¤Þ¤È¤á¤é¤ì¤¿¼°¤Ï´Ø¿ô¤ÎÆâ¦¤Ç¤Î¤ßµö¤µ¤ì¤Þ¤¹" + + #: ch/parse.c:3551 + msgid "mode-less tuple not allowed inside parentheses" + msgstr "" + + #. Z.200 doesn't allow mixed numbered and unnumbered set elements, + #. but we can do it. Print a warning + #: ch/parse.c:3664 + msgid "mixed numbered and unnumbered set elements is not standard" + msgstr "" + + #: ch/parse.c:3667 + msgid "SET mode must define at least one named value" + msgstr "" + + #: ch/parse.c:3766 + msgid "POS not allowed for ARRAY" + msgstr "" + + #: ch/parse.c:3776 + msgid "STEP not allowed in field definition" + msgstr "" + + #: ch/parse.c:3792 + #, fuzzy + msgid "missing field name" + msgstr "̾Á°¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: ch/parse.c:3801 + msgid "bad field name following ','" + msgstr "" + + #: ch/parse.c:3861 + msgid "expected ':' in structure variant alternative" + msgstr "" + + #: ch/parse.c:3912 + #, fuzzy + msgid "missing field" + msgstr "static ¥Õ¥£¡¼¥ë¥É `%s' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: ch/parse.c:4060 + #, fuzzy + msgid "VARYING bit-strings not implemented" + msgstr "ret Ì¿Îá¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: ch/parse.c:4121 + msgid "strings must be composed of chars" + msgstr "" + + #: ch/parse.c:4171 + msgid "BUFFER modes may not be readonly" + msgstr "" + + #: ch/parse.c:4178 + msgid "EVENT modes may not be readonly" + msgstr "" + + #: ch/parse.c:4198 + #, fuzzy + msgid "SIGNAL is not a valid mode" + msgstr "\"%s\" ¤ÏÀµ¾ï¤Ê¥Õ¥¡¥¤¥ë̾¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: ch/parse.c:4235 + #, fuzzy + msgid "syntax error - missing mode" + msgstr "'%s' ¥È¡¼¥¯¥ó¤Î½ê¤Çʸˡ¥¨¥é¡¼" + + #: ch/parse.c:4282 + msgid "syntax error - expected a module or end of file" + msgstr "" + + #: ch/satisfy.c:58 + #, c-format + msgid " `%s', which depends on ..." + msgstr "" + + #: ch/satisfy.c:90 + #, c-format + msgid "cycle: `%s' depends on ..." + msgstr "" + + #: ch/satisfy.c:92 + #, fuzzy, c-format + msgid " `%s'" + msgstr "%s Æâ¤Î `%s':" + + #: ch/satisfy.c:151 + msgid "SYN of this mode not allowed" + msgstr "" + + #: ch/satisfy.c:156 + #, fuzzy + msgid "mode of SYN incompatible with value" + msgstr "TI ¥Ä¡¼¥ë¸ß´¹¤Î¥³¡¼¥É¤òȯ¹Ô¤¹¤ë" + + #: ch/satisfy.c:167 + msgid "SYN value outside range of its mode" + msgstr "" + + #: ch/satisfy.c:176 + msgid "INIT string too large for mode" + msgstr "" + + #: ch/satisfy.c:195 + #, fuzzy, c-format + msgid "value of %s is not a valid constant" + msgstr "`asm' ¤Î°ú¿ô¤¬Äê¿ôʸ»úÎó¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó " + + #: ch/satisfy.c:226 + msgid "mode with non-value property in signal definition" + msgstr "" + + #: ch/satisfy.c:403 + #, fuzzy, c-format + msgid "undeclared identifier `%s'" + msgstr "̵¸ú¤Ê¼±ÊÌ»Ò `%s'" + + #: ch/satisfy.c:456 + #, fuzzy + msgid "RETURNS spec with invalid mode" + msgstr "̵¸ú¤Ê°ú¿ô¤ò»ý¤Ã¤¿ #%s" + + #: ch/satisfy.c:520 + #, fuzzy + msgid "operand to REF is not a mode" + msgstr "`->' ¤Î¥Ù¡¼¥¹¥ª¥Ú¥é¥ó¥É¤¬¥Ý¥¤¥ó¥¿¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: ch/satisfy.c:554 + msgid "field with non-value mode in variant structure not allowed" + msgstr "" + + #: ch/satisfy.c:593 + msgid "buffer element mode must not have non-value property" + msgstr "" + + #: ch/satisfy.c:602 + msgid "recordmode must not have the non-value property" + msgstr "" + + #: ch/tasking.c:170 ch/tasking.c:218 + #, c-format + msgid "tasking code %ld out of range for `%s'" + msgstr "" + + #: ch/tasking.c:284 + #, c-format + msgid "invalid attribute for argument `%s' (only IN or LOC allowed)" + msgstr "" + + #: ch/tasking.c:325 + msgid "PROCESS may only be declared at module level" + msgstr "" + + #: ch/tasking.c:549 + #, c-format + msgid "process name %s never declared" + msgstr "" + + #: ch/tasking.c:554 + msgid "you may only START a process, not a proc" + msgstr "" + + #: ch/tasking.c:590 + msgid "SET expression not a location" + msgstr "" + + #: ch/tasking.c:595 + msgid "SET location must be INSTANCE mode" + msgstr "" + + #: ch/tasking.c:632 + #, fuzzy, c-format + msgid "too many arguments to process `%s'" + msgstr "´Ø¿ô `%s' ¤ËÂФ¹¤ë°ú¿ô¤¬Â¿¤¹¤®¤Þ¤¹" + + #: ch/tasking.c:635 + #, fuzzy + msgid "too many arguments to process" + msgstr "´Ø¿ô¤ËÂФ¹¤ë°ú¿ô¤¬Â¿¤¹¤®¤Þ¤¹" + + #: ch/tasking.c:640 + #, fuzzy, c-format + msgid "too few arguments to process `%s'" + msgstr "´Ø¿ô `%s' ¤Ø¤Î°ú¿ô¤¬¾¯¤Ê¤¹¤®¤Þ¤¹" + + #: ch/tasking.c:643 + #, fuzzy + msgid "too few arguments to process" + msgstr "´Ø¿ô¤Ø¤Î°ú¿ô¤¬¾¯¤Ê¤¹¤®¤Þ¤¹" + + #: ch/tasking.c:983 + msgid "COPY_NUMBER argument must be INSTANCE expression" + msgstr "" + + #: ch/tasking.c:1007 + msgid "GEN_CODE argument must be a process or signal name" + msgstr "" + + #: ch/tasking.c:1029 + msgid "GEN_INST parameter 2 must be an integer mode" + msgstr "" + + #: ch/tasking.c:1050 + msgid "GEN_INST parameter 1 must be a PROCESS or an integer expression" + msgstr "" + + #: ch/tasking.c:1076 + #, fuzzy, c-format + msgid "%s is not a declared process" + msgstr "\"%s\" ¤Ï¥×¥ê¥×¥í¥»¥Ã¥µ¤ËÂФ¹¤ëÀµ¾ï¤Ê¥ª¥×¥·¥ç¥ó¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: ch/tasking.c:1097 + msgid "PROC_TYPE argument must be INSTANCE expression" + msgstr "" + + #: ch/tasking.c:1139 + msgid "QUEUE_LENGTH argument must be a BUFFER/EVENT location" + msgstr "" + + #: ch/tasking.c:1289 + #, c-format + msgid "SEND requires a SIGNAL; %s is not a SIGNAL name" + msgstr "" + + #: ch/tasking.c:1314 + #, fuzzy, c-format + msgid "too many values for SIGNAL `%s'" + msgstr "´Ø¿ô `%s' ¤ËÂФ¹¤ë°ú¿ô¤¬Â¿¤¹¤®¤Þ¤¹" + + #: ch/tasking.c:1320 + #, fuzzy, c-format + msgid "too few values for SIGNAL `%s'" + msgstr "´Ø¿ô `%s' ¤Ø¤Î°ú¿ô¤¬¾¯¤Ê¤¹¤®¤Þ¤¹" + + #: ch/tasking.c:1398 + #, fuzzy + msgid "signal sent without priority" + msgstr "½Ò¸ì¤Î¤Ê¤¤¥¢¥µ¡¼¥·¥ç¥ó¤Ç¤¹" + + #: ch/tasking.c:1399 ch/tasking.c:2927 + msgid " and no default priority was set." + msgstr "" + + #: ch/tasking.c:1400 ch/tasking.c:2777 ch/tasking.c:2928 + msgid " PRIORITY defaulted to 0" + msgstr "" + + #: ch/tasking.c:1415 + msgid "SEND without a destination instance" + msgstr "" + + #: ch/tasking.c:1416 + #, fuzzy + msgid " and no destination process specified" + msgstr "ÆþÎÏ¥Õ¥¡¥¤¥ë¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: ch/tasking.c:1417 + msgid " for the signal" + msgstr "" + + #. as our system doesn't allow that and Z.200 specifies it, + #. we issue a warning + #: ch/tasking.c:1436 + #, c-format + msgid "SEND to ANY copy of process `%s'" + msgstr "" + + #: ch/tasking.c:1441 + msgid "SEND TO must be an INSTANCE mode" + msgstr "" + + #: ch/tasking.c:1455 + msgid "SEND WITH must have a mode" + msgstr "" + + #: ch/tasking.c:1724 + #, fuzzy + msgid "internal error: RECEIVE CASE stack invalid" + msgstr "ÆâÉô¥¨¥é¡¼ - ̵¸ú¤Ê Utf8 ̾¤Ç¤¹" + + #: ch/tasking.c:1764 ch/tasking.c:2492 + msgid "SET requires INSTANCE location" + msgstr "" + + #: ch/tasking.c:1843 + msgid "SIGNAL in RECEIVE CASE alternative follows" + msgstr "" + + #: ch/tasking.c:1844 + #, c-format + msgid " a BUFFER name on line %d" + msgstr "" + + #: ch/tasking.c:1852 + #, c-format + msgid "SIGNAL `%s' has no data fields" + msgstr "" + + #: ch/tasking.c:1857 + #, c-format + msgid "SIGNAL `%s' requires data fields" + msgstr "" + + #: ch/tasking.c:1921 + #, c-format + msgid "too few data fields provided for `%s'" + msgstr "" + + #: ch/tasking.c:1924 + #, fuzzy, c-format + msgid "too many data fields provided for `%s'" + msgstr "`asm' Ãæ¤ÎÂåÂØ¥­¡¼¥ï¡¼¥É¤¬Â¿¤¹¤®¤Þ¤¹" + + #: ch/tasking.c:1947 + msgid "BUFFER in RECEIVE CASE alternative follows" + msgstr "" + + #: ch/tasking.c:1948 + #, c-format + msgid " a SIGNAL name on line %d" + msgstr "" + + #: ch/tasking.c:1956 + msgid "BUFFER in RECEIVE CASE alternative must be a location" + msgstr "" + + #: ch/tasking.c:1962 + msgid "buffer receive alternative requires only 1 defining occurrence" + msgstr "" + + #: ch/tasking.c:2043 + #, fuzzy + msgid "incompatible modes in receive buffer alternative" + msgstr "f2c ¸ß´¹¥³¡¼¥É¤òÀ¸À®¤¹¤ëɬÍפ¬¤Ê¤¤" + + #: ch/tasking.c:2049 + msgid "defining occurrence in receive buffer alternative must be a location" + msgstr "" + + #: ch/tasking.c:2086 + msgid "buffer receive alternative without `IN location'" + msgstr "" + + #: ch/tasking.c:2092 + msgid "RECEIVE CASE alternative must specify a SIGNAL name or BUFFER location" + msgstr "" + + #: ch/tasking.c:2331 + msgid "RECEIVE CASE without alternatives" + msgstr "" + + #: ch/tasking.c:2369 + msgid "CONTINUE requires an event location" + msgstr "" + + #: ch/tasking.c:2503 ch/tasking.c:2939 + msgid "PRIORITY must be of integer type" + msgstr "" + + #: ch/tasking.c:2581 + msgid "delay alternative must be an EVENT location" + msgstr "" + + #: ch/tasking.c:2636 + msgid "DELAY CASE without alternatives" + msgstr "" + + #: ch/tasking.c:2756 + #, fuzzy + msgid "DELAY action requires an event location" + msgstr "-ifile ¥ª¥×¥·¥ç¥ó¤Ë¤Ï -map ¥ª¥×¥·¥ç¥ó¤¬É¬ÍפǤ¹" + + #: ch/tasking.c:2767 + msgid "PRIORITY in DELAY action must be of integer type" + msgstr "" + + #: ch/tasking.c:2776 + #, fuzzy + msgid "DELAY action without priority." + msgstr "½Ò¸ì¤Î¤Ê¤¤¥¢¥µ¡¼¥·¥ç¥ó¤Ç¤¹" + + #: ch/tasking.c:2867 + #, fuzzy + msgid "send buffer action requires a BUFFER location" + msgstr "-ifile ¥ª¥×¥·¥ç¥ó¤Ë¤Ï -map ¥ª¥×¥·¥ç¥ó¤¬É¬ÍפǤ¹" + + #: ch/tasking.c:2884 + msgid "there must be only 1 value for send buffer action" + msgstr "" + + #: ch/tasking.c:2905 + msgid "convert failed for send buffer action" + msgstr "" + + #: ch/tasking.c:2911 + #, fuzzy + msgid "incompatible modes in send buffer action" + msgstr "%s ¤Ë¸ß´¹À­¤Î¤Ê¤¤·¿" + + #: ch/tasking.c:2926 + msgid "buffer sent without priority" + msgstr "" + + #: ch/tasking.c:2945 + msgid "WITH not allowed for send buffer action" + msgstr "" + + #: ch/tasking.c:2950 + msgid "TO not allowed for send buffer action" + msgstr "" + + #: ch/tasking.c:3093 + #, c-format + msgid "SEND requires a BUFFER; `%s' is not a BUFFER name" + msgstr "" + + #: ch/tasking.c:3234 + msgid "non-integral max queue size for EVENT/BUFFER mode" + msgstr "" + + #: ch/tasking.c:3239 + msgid "non-constant max queue size for EVENT/BUFFER mode" + msgstr "" + + #: ch/tasking.c:3246 + msgid "max queue_size for EVENT/BUFFER is not positive" + msgstr "" + + #: ch/timing.c:224 + msgid "absolute time value must be of mode TIME" + msgstr "" + + #: ch/timing.c:281 ch/timing.c:364 + msgid "duration primitive value must be of mode DURATION" + msgstr "" + + #: ch/tree.c:58 + msgid "string length > UPPER (UINT)" + msgstr "" + + #: ch/tree.c:112 + msgid "can only build a powerset from a discrete mode" + msgstr "" + + #: ch/tree.c:124 + #, fuzzy + msgid "non-constant bitstring size invalid" + msgstr "½é´ü²½»ÒÆâ¤ËÈóÄê¿ô¤ÎÇÛÎ󥤥ó¥Ç¥Ã¥¯¥¹¤¬¤¢¤ê¤Þ¤¹" + + #: ch/tree.c:126 + #, fuzzy + msgid "non-constant powerset size invalid" + msgstr "½é´ü²½»ÒÆâ¤ËÈóÄê¿ô¤ÎÇÛÎ󥤥ó¥Ç¥Ã¥¯¥¹¤¬¤¢¤ê¤Þ¤¹" + + #: ch/typeck.c:83 + msgid "array or string index is a mode (instead of a value)" + msgstr "" + + #: ch/typeck.c:114 + #, fuzzy + msgid "index is not an integer expression" + msgstr "void ¼°¤ÎÉÔŬÀڤʻÈÍÑ" + + #: ch/typeck.c:122 + #, fuzzy + msgid "index not compatible with index mode" + msgstr "TI ¥Ä¡¼¥ë¸ß´¹¤Î¥³¡¼¥É¤òȯ¹Ô¤¹¤ë" + + #. should never happen + #: ch/typeck.c:132 + #, fuzzy + msgid "index is not discrete" + msgstr "-pipe ¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: ch/typeck.c:196 + msgid "possible internal error - slice argument is neither referable nor constant" + msgstr "" + + #: ch/typeck.c:285 + msgid "bit array slice with non-constant length" + msgstr "" + + #: ch/typeck.c:325 + msgid "bitstring slice with non-constant length" + msgstr "" + + #: ch/typeck.c:338 + msgid "slice operation on non-array, non-bitstring value not supported" + msgstr "" + + #: ch/typeck.c:390 ch/typeck.c:441 + msgid "can only take slice of array or string" + msgstr "" + + #: ch/typeck.c:455 + #, fuzzy + msgid "slice length is not an integer" + msgstr "switch ¤ÎÆâÍÆ¤¬À°¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: ch/typeck.c:488 + #, fuzzy + msgid "slice length out-of-range" + msgstr "¹ÔÈֹ椬Èϰϳ°¤Ç¤¹" + + #: ch/typeck.c:543 + #, fuzzy + msgid "too many index expressions" + msgstr "¶õ¤Î #if ¼°¤Ç¤¹" + + #: ch/typeck.c:595 + #, fuzzy + msgid "array index is not discrete" + msgstr "ÈóÇÛÎó¤Î½é´ü²½»Ò¤ËÇÛÎ󥤥ó¥Ç¥Ã¥¯¥¹¤¬»È¤ï¤ì¤Þ¤·¤¿" + + #: ch/typeck.c:675 + #, fuzzy + msgid "invalid compound index for bitstring mode" + msgstr "̵¸ú¤Ê¥Ó¥Ã¥ÈÎó½é´ü²½»Ò¤Ç¤¹" + + #: ch/typeck.c:1079 + msgid "conversions from variable_size value" + msgstr "" + + #: ch/typeck.c:1084 + #, fuzzy + msgid "conversions to variable_size mode" + msgstr "ÉÔ´°Á´·¿¤Ø¤ÎÊÑ´¹¤Ç¤¹" + + #: ch/typeck.c:1098 + #, fuzzy + msgid "cannot convert to float" + msgstr "¥Ý¥¤¥ó¥¿·¿¤ËÊÑ´¹¤Ç¤­¤Þ¤»¤ó" + + #: ch/typeck.c:1103 + #, fuzzy + msgid "cannot convert float to this mode" + msgstr "¥Ý¥¤¥ó¥¿·¿¤ËÊÑ´¹¤Ç¤­¤Þ¤»¤ó" + + #: ch/typeck.c:1130 + msgid "OVERFLOW in expression conversion" + msgstr "" + + #: ch/typeck.c:1159 + #, fuzzy + msgid "overflow (not inside function)" + msgstr "À°¿ô¤Ø¤ÎÀÚ¤êµÍ¤á¤Ç¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤¬µ¯¤³¤ê¤Þ¤·¤¿" + + #: ch/typeck.c:1161 + #, fuzzy + msgid "possible overflow (not inside function)" + msgstr "`%s' ¤¬¤³¤³¤Ç¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó (´Ø¿ô¤ÎÃæ¤Ç¤Ï¤Ê¤¤)" + + #: ch/typeck.c:1166 + msgid "expression will always cause OVERFLOW" + msgstr "" + + #: ch/typeck.c:1199 + msgid "not implemented: constant conversion from that kind of expression" + msgstr "" + + #: ch/typeck.c:1205 + msgid "not implemented: constant conversion to that kind of mode" + msgstr "" + + #: ch/typeck.c:1216 + msgid "non-standard, non-portable value conversion" + msgstr "" + + #: ch/typeck.c:1222 + #, fuzzy + msgid "location conversion between differently-sized modes" + msgstr "Â礭¤µ¤Î°Û¤Ê¤ë¥Ù¥¯¥È¥ëÃÍÆ±»Î¤ÎÊÑ´¹¤Ï¤Ç¤­¤Þ¤»¤ó" + + #: ch/typeck.c:1224 + #, fuzzy + msgid "unsupported value conversion" + msgstr "¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¥Ð¡¼¥¸¥ç¥ó¤Ç¤¹" + + #: ch/typeck.c:1272 + msgid "operand to bin must be a non-negative integer literal" + msgstr "" + + #: ch/typeck.c:1288 + #, c-format + msgid "size %d of BIN too big - no such integer mode" + msgstr "" + + #: ch/typeck.c:1302 + msgid "BIN in pass 2" + msgstr "" + + #: ch/typeck.c:1335 + msgid "mode of tuple is neither ARRAY, STRUCT, nor POWERSET" + msgstr "" + + #: ch/typeck.c:2108 + msgid "internal error in chill_root_resulting_mode" + msgstr "" + + #: ch/typeck.c:2367 + msgid "string lengths not equal" + msgstr "" + + #: ch/typeck.c:2382 + #, fuzzy + msgid "can't do ARRAY assignment - too large" + msgstr "Í׵ᤵ¤ì¤¿¥¢¥é¥¤¥ó¥á¥ó¥È¤¬Â礭¤¹¤®¤Þ¤¹" + + #: ch/typeck.c:2400 + msgid "rhs of array assignment is not addressable" + msgstr "" + + #: ch/typeck.c:2577 + #, fuzzy + msgid "non-constant expression for BIN" + msgstr "Äê¿ô¼°¤¬¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤Þ¤·¤¿" + + #: ch/typeck.c:2582 + msgid "expression for BIN must not be negative" + msgstr "" + + #: ch/typeck.c:2587 + msgid "cannot process BIN (>32)" + msgstr "" + + #: ch/typeck.c:2603 + #, fuzzy + msgid "bounds of range are not compatible" + msgstr "shared ¤È mdll ¤È¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó" + + #: ch/typeck.c:2612 + #, fuzzy + msgid "negative string length" + msgstr "ʸ»úÎóÄê¿ô¤¬½ªÎ»¤·¤Æ¤¤¤Þ¤»¤ó" + + #: ch/typeck.c:2649 + #, fuzzy + msgid "range's lower bound and parent mode don't match" + msgstr "`%s' ¤Î¥×¥í¥È¥¿¥¤¥×¤¬¸å¤í¤Ë¤¢¤ê¡¢°ú¿ô %d ¤¬°ìÃפ·¤Þ¤»¤ó" + + #: ch/typeck.c:2654 + msgid "range's upper bound and parent mode don't match" + msgstr "" + + #: ch/typeck.c:2663 + msgid "making range from non-mode" + msgstr "" + + #: ch/typeck.c:2669 + #, fuzzy + msgid "floating point ranges" + msgstr "ÉâÆ°¾®¿ôÅÀ¤¬¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤Þ¤·¤¿" + + #: ch/typeck.c:2677 + msgid "range mode has non-constant limits" + msgstr "" + + #: ch/typeck.c:2686 + msgid "range's high bound < mode's low bound" + msgstr "" + + #: ch/typeck.c:2691 + msgid "range's high bound > mode's high bound" + msgstr "" + + #: ch/typeck.c:2696 + msgid "range mode high bound < range mode low bound" + msgstr "" + + #: ch/typeck.c:2701 + msgid "range's low bound < mode's low bound" + msgstr "" + + #: ch/typeck.c:2706 + msgid "range's low bound > mode's high bound" + msgstr "" + + #: ch/typeck.c:2814 + #, fuzzy + msgid "stepsize in STEP must be an integer constant" + msgstr "À°¿ôÄê¿ôÃæ¤Ë 2¤Ä¤Î `u'" + + #: ch/typeck.c:2818 + msgid "stepsize in STEP must be > 0" + msgstr "" + + #: ch/typeck.c:2824 + msgid "stepsize in STEP must be the natural width of the array element mode" + msgstr "" + + #: ch/typeck.c:2830 ch/typeck.c:3131 + #, fuzzy + msgid "starting word in POS must be an integer constant" + msgstr "À°¿ôÄê¿ôÃæ¤Ë 2¤Ä¤Î `u'" + + #: ch/typeck.c:2834 ch/typeck.c:3138 + msgid "starting word in POS must be >= 0" + msgstr "" + + #: ch/typeck.c:2836 + msgid "starting word in POS within STEP must be 0" + msgstr "" + + #: ch/typeck.c:2848 ch/typeck.c:3155 + #, fuzzy + msgid "starting bit in POS must be an integer constant" + msgstr "Í׵ᤵ¤ì¤¿ init_priority ¤ÏÀ°¿ô·¿¤ÎÄê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: ch/typeck.c:2854 + msgid "starting bit in POS within STEP must be 0" + msgstr "" + + #: ch/typeck.c:2858 ch/typeck.c:3163 + msgid "starting bit in POS must be >= 0" + msgstr "" + + #: ch/typeck.c:2866 ch/typeck.c:3171 + msgid "starting bit in POS must be < the width of a word" + msgstr "" + + #: ch/typeck.c:2880 ch/typeck.c:3185 + #, fuzzy + msgid "length in POS must be an integer constant" + msgstr "À°¿ôÄê¿ôÃæ¤Ë 2¤Ä¤Î `u'" + + #: ch/typeck.c:2887 ch/typeck.c:3192 + msgid "length in POS must be > 0" + msgstr "" + + #: ch/typeck.c:2894 ch/typeck.c:3205 + #, fuzzy + msgid "end bit in POS must be an integer constant" + msgstr "À°¿ôÄê¿ôÃæ¤Ë 2¤Ä¤Î `u'" + + #: ch/typeck.c:2903 ch/typeck.c:3214 + msgid "end bit in POS must be >= the start bit" + msgstr "" + + #: ch/typeck.c:2909 ch/typeck.c:3219 + msgid "end bit in POS must be < the width of a word" + msgstr "" + + #: ch/typeck.c:2921 + msgid "the length specified on POS within STEP must be the natural length of the array element type" + msgstr "" + + #: ch/typeck.c:2926 + msgid "step size in STEP must be >= the length in POS" + msgstr "" + + #: ch/typeck.c:2952 + #, fuzzy + msgid "array index must be a range, not a single integer" + msgstr "ÇÛÎó¤Îź»ú¤¬À°¿ô·¿¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: ch/typeck.c:2958 + #, fuzzy + msgid "array index is not a discrete mode" + msgstr "ÇÛÎó¤Îź»ú¤¬À°¿ô·¿¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: ch/typeck.c:3229 + msgid "the length specified on POS must be the natural length of the field type" + msgstr "" + + #: ch/typeck.c:3238 + msgid "STRUCT fields must be layed out in monotonically increasing order" + msgstr "" + + #: ch/typeck.c:3301 + msgid "if one field has a POS layout, then all fields must have a POS layout" + msgstr "" + + #: ch/typeck.c:3444 + #, fuzzy + msgid "parameterized structures not implemented" + msgstr "ret Ì¿Îá¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: ch/typeck.c:3449 + #, fuzzy + msgid "invalid parameterized type" + msgstr "²¾°ú¿ô `%s' ¤Ï̵¸ú¤Ç¤¹" + + #: cp/call.c:268 cp/init.c:1637 + msgid "qualified type `%T' does not match destructor name `~%T'" + msgstr "" + + #: cp/call.c:277 + msgid "type of `%E' does not match destructor type `%T' (type was `%T')" + msgstr "" + + #: cp/call.c:286 + msgid "`%D' is a namespace" + msgstr "" + + #: cp/call.c:294 + msgid "base object `%E' of scoped method call is of non-aggregate type `%T'" + msgstr "" + + #: cp/call.c:392 + msgid "unable to call pointer to member function here" + msgstr "¤³¤³¤Ç¤Ï¥á¥ó¥Ð´Ø¿ô¥Ý¥¤¥ó¥¿¸Æ¤Ó½Ð¤·¤¬¤Ç¤­¤Þ¤»¤ó" + + #: cp/call.c:522 + msgid "destructors take no parameters" + msgstr "¥Ç¥¹¥È¥é¥¯¥¿¤Ï²¾°ú¿ô¤ò¼è¤ê¤Þ¤»¤ó" + + #: cp/call.c:529 + msgid "destructor name `~%T' does not match type `%T' of expression" + msgstr "" + + #: cp/call.c:2338 + msgid "%s %D(%T, %T, %T) " + msgstr "" + + #: cp/call.c:2343 + msgid "%s %D(%T, %T) " + msgstr "" + + #: cp/call.c:2347 + #, fuzzy + msgid "%s %D(%T) " + msgstr "<ÁȤ߹þ¤ß>" + + #: cp/call.c:2351 + msgid "%s %T " + msgstr "" + + #: cp/call.c:2353 + #, fuzzy + msgid "%s %+#D%s" + msgstr "%s: %s" + + #: cp/call.c:2511 + msgid "no viable candidates" + msgstr "" + + #: cp/call.c:2525 + #, fuzzy + msgid "conversion from `%T' to `%T' is ambiguous" + msgstr "%s: ¥ª¥×¥·¥ç¥ó `%s' ¤Ï¤¢¤¤¤Þ¤¤¤Ç¤¹\n" + + #: cp/call.c:2642 + msgid "no matching function for call to `%D(%A)'" + msgstr "" + + #: cp/call.c:2653 cp/call.c:4639 + msgid "call of overloaded `%D(%A)' is ambiguous" + msgstr "" + + #. It's no good looking for an overloaded operator() on a + #. pointer-to-member-function. + #: cp/call.c:2680 + #, c-format + msgid "pointer-to-member function %E cannot be called without an object; consider using .* or ->*" + msgstr "" + + #: cp/call.c:2749 + msgid "no match for call to `(%T) (%A)'" + msgstr "" + + #: cp/call.c:2759 + #, fuzzy + msgid "call of `(%T) (%A)' is ambiguous" + msgstr "%s: ¥ª¥×¥·¥ç¥ó `-W %s' ¤Ï¤¢¤¤¤Þ¤¤¤Ç¤¹\n" + + #: cp/call.c:2794 + msgid "%s for `%T ? %T : %T' operator" + msgstr "" + + #: cp/call.c:2799 + #, fuzzy + msgid "%s for `%T %s' operator" + msgstr "%s ¤¬ `%s' ¥È¡¼¥¯¥ó¤ÎÁ°¤Ë¤¢¤ê¤Þ¤¹" + + #: cp/call.c:2802 + msgid "%s for `%T [%T]' operator" + msgstr "" + + #: cp/call.c:2807 + #, fuzzy + msgid "%s for `%T %s %T' operator" + msgstr "%s ¤¬ `%s' ¥È¡¼¥¯¥ó¤ÎÁ°¤Ë¤¢¤ê¤Þ¤¹" + + #: cp/call.c:2810 + #, fuzzy + msgid "%s for `%s %T' operator" + msgstr "%s ¤¬ `%s' ¥È¡¼¥¯¥ó¤ÎÁ°¤Ë¤¢¤ê¤Þ¤¹" + + #: cp/call.c:2902 + msgid "ISO C++ forbids omitting the middle term of a ?: expression" + msgstr "ISO C++ ¤ÏÃæ´Ö¹à¤¬¾Êά¤µ¤ì¤¿ ?: ¼°¤ò¶Ø¤¸¤Þ¤¹" + + #: cp/call.c:2961 + #, c-format + msgid "`%E' has type `void' and is not a throw-expression" + msgstr "" + + #: cp/call.c:2994 cp/call.c:3194 + msgid "operands to ?: have different types" + msgstr "" + + #: cp/call.c:3147 + #, fuzzy + msgid "enumeral mismatch in conditional expression: `%T' vs `%T'" + msgstr "¾ò·ï¼°¤Ç¤Î·¿¤ÎÁȹç¤ï¤»¤¬Å¬¹ç¤·¤Þ¤»¤ó" + + #: cp/call.c:3154 + #, fuzzy + msgid "enumeral and non-enumeral type in conditional expression" + msgstr "¾ò·ï¼°¤ËÉä¹çÉÕ¤­·¿¤ÈÉä¹ç̵¤··¿¤È¤¬¤¢¤ê¤Þ¤¹" + + #: cp/call.c:3235 + #, fuzzy + msgid "`%D' must be declared before use" + msgstr "`%s' ¤ÏÁ°¤Ë¤³¤³¤ÇÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: cp/call.c:3399 + msgid "no `%D(int)' declared for postfix `%s', trying prefix operator instead" + msgstr "" + + #: cp/call.c:3446 + msgid "using synthesized `%#D' for copy assignment" + msgstr "" + + #: cp/call.c:3448 + msgid " where cfront would use `%#D'" + msgstr "" + + #: cp/call.c:3475 + #, fuzzy + msgid "comparison between `%#T' and `%#T'" + msgstr "Éä¹çÉÕ¤­¤ÈÉä¹ç̵¤·¤È¤ÎÈæ³Ó¤Ç¤¹" + + #: cp/call.c:3708 + #, fuzzy + msgid "no suitable `operator delete' for `%T'" + msgstr "¤¢¤ê¤¨¤Ê¤¤±é»»»Ò '%s'" + + #: cp/call.c:3727 + msgid "`%+#D' is private" + msgstr "" + + #: cp/call.c:3729 + msgid "`%+#D' is protected" + msgstr "" + + #: cp/call.c:3731 + msgid "`%+#D' is inaccessible" + msgstr "" + + #: cp/call.c:3732 + msgid "within this context" + msgstr "" + + #: cp/call.c:3774 + #, fuzzy + msgid "invalid conversion from `%T' to `%T'" + msgstr "NaN ¤«¤éÀ°¿ô¤Ø¤ÎÊÑ´¹¤Ç¤¹" + + #: cp/call.c:3776 cp/call.c:3915 cp/call.c:3917 + #, fuzzy + msgid " initializing argument %P of `%D'" + msgstr "`%s' ¤Î°ú¿ô¤È¤·¤ÆÌµ¸ú¤Ê·¿" + + #: cp/call.c:3839 cp/call.c:3843 + msgid " initializing argument %P of `%D' from result of `%D'" + msgstr "" + + #: cp/call.c:3849 cp/call.c:3852 + msgid " initializing temporary from result of `%D'" + msgstr "" + + #. Undefined behaviour [expr.call] 5.2.2/7. + #: cp/call.c:3986 + msgid "cannot pass objects of non-POD type `%#T' through `...'" + msgstr "" + + #. Undefined behaviour [expr.call] 5.2.2/7. + #: cp/call.c:4011 + msgid "cannot receive objects of non-POD type `%#T' through `...'" + msgstr "" + + #: cp/call.c:4153 + msgid "passing `%T' as `this' argument of `%#D' discards qualifiers" + msgstr "" + + #: cp/call.c:4401 + #, fuzzy + msgid "could not find class$ field in java interface type `%T'" + msgstr "`%s' ¤Ø¤Î¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤Ë´ðÄ쥯¥é¥¹¤¬Àë¸À¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: cp/call.c:4502 cp/typeck.c:2079 + msgid "request for member `%D' in `%E', which is of non-aggregate type `%T'" + msgstr "" + + #: cp/call.c:4628 + msgid "no matching function for call to `%T::%D(%A)%#V'" + msgstr "" + + #: cp/call.c:4658 + msgid "cannot call member function `%D' without object" + msgstr "" + + #: cp/call.c:5271 + msgid "passing `%T' chooses `%T' over `%T'" + msgstr "" + + #: cp/call.c:5273 cp/decl2.c:4489 + #, fuzzy + msgid " in call to `%D'" + msgstr "`%s' ¤Ø¤Î¸Æ¤Ó½Ð¤·¤Ï¥¤¥ó¥é¥¤¥ó²½¤Ç¤­¤Þ¤»¤ó" + + #: cp/call.c:5322 cp/call.c:5447 + msgid "choosing `%D' over `%D'" + msgstr "" + + #: cp/call.c:5323 + #, fuzzy + msgid " for conversion from `%T' to `%T'" + msgstr "NaN ¤«¤éÀ°¿ô¤Ø¤ÎÊÑ´¹¤Ç¤¹" + + #: cp/call.c:5325 + msgid " because conversion sequence for the argument is better" + msgstr "" + + #: cp/call.c:5449 + msgid " because worst conversion for the former is better than worst conversion for the latter" + msgstr "" + + #: cp/call.c:5565 cp/call.c:5586 + #, fuzzy + msgid "could not convert `%E' to `%T'" + msgstr "0x%l.8x ¤òÎΰè¤ËÊÑ´¹¤Ç¤­¤Þ¤»¤ó" + + #: cp/class.c:284 + msgid "cannot convert from base `%T' to derived type `%T' via virtual base `%T'" + msgstr "" + + #: cp/class.c:1010 + msgid "`%#D' and `%#D' cannot be overloaded" + msgstr "" + + #. There has already been a declaration of this method + #. or member template. + #: cp/class.c:1021 + msgid "`%D' has already been declared in `%T'" + msgstr "" + + #: cp/class.c:1102 + #, fuzzy + msgid "duplicate enum value `%D'" + msgstr "½ÅÊ£¤·¤¿ case ¤ÎÃÍ" + + #: cp/class.c:1105 + msgid "duplicate field `%D' (as enum and non-enum)" + msgstr "" + + #: cp/class.c:1112 + #, fuzzy + msgid "duplicate nested type `%D'" + msgstr "½ÅÊ£¤·¤¿¥á¥ó¥Ð `%s'" + + #: cp/class.c:1123 + msgid "duplicate field `%D' (as type and non-type)" + msgstr "" + + #: cp/class.c:1127 + #, fuzzy + msgid "duplicate member `%D'" + msgstr "½ÅÊ£¤·¤¿¥á¥ó¥Ð `%s'" + + #: cp/class.c:1170 + #, fuzzy + msgid "conflicting access specifications for method `%D', ignored" + msgstr "¥Õ¥£¡¼¥ë¥É `%s' ¤ËÂФ¹¤ë¥¢¥¯¥»¥¹»ØÄê»Ò¤¬¶¥¹ç¤·¤¿¤¿¤á¡¢Ìµ»ë¤µ¤ì¤Þ¤·¤¿" + + #: cp/class.c:1172 + #, c-format + msgid "conflicting access specifications for field `%s', ignored" + msgstr "¥Õ¥£¡¼¥ë¥É `%s' ¤ËÂФ¹¤ë¥¢¥¯¥»¥¹»ØÄê»Ò¤¬¶¥¹ç¤·¤¿¤¿¤á¡¢Ìµ»ë¤µ¤ì¤Þ¤·¤¿" + + #: cp/class.c:1215 + msgid "`%D' names constructor" + msgstr "" + + #: cp/class.c:1221 + #, fuzzy + msgid "`%D' invalid in `%T'" + msgstr "̵¸ú¤Ê¥ª¥×¥·¥ç¥ó `%s'" + + #: cp/class.c:1229 + msgid "no members matching `%D' in `%#T'" + msgstr "" + + #: cp/class.c:1261 cp/class.c:1269 + #, fuzzy + msgid "`%D' invalid in `%#T'" + msgstr "̵¸ú¤Ê¥ª¥×¥·¥ç¥ó `%s'" + + #: cp/class.c:1262 + msgid " because of local method `%#D' with same name" + msgstr "" + + #: cp/class.c:1270 + msgid " because of local member `%#D' with same name" + msgstr "" + + #: cp/class.c:1342 + #, fuzzy + msgid "base class `%#T' has a non-virtual destructor" + msgstr "Èó²¾Áۥǥ¹¥È¥é¥¯¥¿¤Ë¤Ä¤¤¤Æ·Ù¹ð¤¹¤ë" + + #: cp/class.c:1362 + msgid "base `%T' with only non-default constructor in class without a constructor" + msgstr "" + + #: cp/class.c:1948 + msgid "all member functions in class `%T' are private" + msgstr "" + + #: cp/class.c:1962 + msgid "`%#T' only defines a private destructor and has no friends" + msgstr "" + + #: cp/class.c:2005 + msgid "`%#T' only defines private constructors and has no friends" + msgstr "" + + #: cp/class.c:2126 cp/class.c:5030 + #, fuzzy + msgid "redefinition of `%#T'" + msgstr "`%s' ¤¬ºÆÄêµÁ¤µ¤ì¤Þ¤·¤¿" + + #: cp/class.c:2127 + #, fuzzy + msgid "previous definition of `%#T'" + msgstr "`%s' ¤¬ºÆÄêµÁ¤µ¤ì¤Þ¤·¤¿" + + #: cp/class.c:2457 + msgid "no unique final overrider for `%D' in `%T'" + msgstr "" + + #. Here we know it is a hider, and no overrider exists. + #: cp/class.c:2830 + msgid "`%D' was hidden" + msgstr "" + + #: cp/class.c:2831 + msgid " by `%D'" + msgstr "" + + #: cp/class.c:2873 + msgid "ISO C++ forbids member `%D' with same name as enclosing class" + msgstr "" + + #: cp/class.c:2878 cp/decl2.c:1898 + msgid "`%#D' invalid; an anonymous union can only have non-static data members" + msgstr "" + + #: cp/class.c:2884 cp/decl2.c:1904 + msgid "private member `%#D' in anonymous union" + msgstr "" + + #: cp/class.c:2887 cp/decl2.c:1906 + msgid "protected member `%#D' in anonymous union" + msgstr "" + + #: cp/class.c:3035 + #, fuzzy + msgid "bit-field `%#D' with non-integral type" + msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É `%s' ¤ÎÉý¤¬À°¿ôÄê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: cp/class.c:3055 + #, fuzzy + msgid "bit-field `%D' width not an integer constant" + msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É `%s' ¤ÎÉý¤¬À°¿ôÄê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: cp/class.c:3061 + #, fuzzy + msgid "negative width in bit-field `%D'" + msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É `%s' ¤ÎÉý¤¬Éé¤Î¿ô¤Ç¤¹" + + #: cp/class.c:3066 + #, fuzzy + msgid "zero width for bit-field `%D'" + msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É `%s' ¤ÎÉý¤¬ 0 ¤Ç¤¹" + + #: cp/class.c:3072 + #, fuzzy + msgid "width of `%D' exceeds its type" + msgstr "`%s' ¤ÎÉý¤Ï¤½¤Î·¿¤Î¥µ¥¤¥º¤òͤ¨¤Æ¤¤¤Þ¤¹" + + #: cp/class.c:3081 + msgid "`%D' is too small to hold all values of `%#T'" + msgstr "" + + #: cp/class.c:3164 + msgid "member `%#D' with constructor not allowed in union" + msgstr "" + + #: cp/class.c:3167 + msgid "member `%#D' with destructor not allowed in union" + msgstr "" + + #: cp/class.c:3170 + msgid "member `%#D' with copy assignment operator not allowed in union" + msgstr "" + + #: cp/class.c:3197 + #, fuzzy + msgid "multiple fields in union `%T' initialized" + msgstr "¶¦ÍÑÂνé´ü²½»ÒÆâ¤ÎÍ×ÁǤ¬Â¿¤¹¤®¤Þ¤¹" + + #: cp/class.c:3318 + msgid "field `%D' in local class cannot be static" + msgstr "" + + #: cp/class.c:3324 + #, fuzzy + msgid "field `%D' invalidly declared function type" + msgstr "Îΰè `%s' ¤Ï´Ø¿ô¤È¤·¤ÆÀë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: cp/class.c:3331 + #, fuzzy + msgid "field `%D' invalidly declared method type" + msgstr "¥Ñ¥é¥á¥¿¤Ï¥á¥½¥Ã¥É¤Î·¿¤òÉÔÀµ¤ËÀë¸À¤·¤Þ¤·¤¿" + + #: cp/class.c:3337 + #, fuzzy + msgid "field `%D' invalidly declared offset type" + msgstr "¥Ñ¥é¥á¥¿¤¬¥ª¥Õ¥»¥Ã¥È¤Î·¿¤òÉÔÀµ¤ËÀë¸À¤·¤Þ¤·¤¿" + + #. Unions cannot have static members. + #: cp/class.c:3355 + #, fuzzy + msgid "field `%D' declared static in union" + msgstr "Îΰè `%s' ¤Ï´Ø¿ô¤È¤·¤ÆÀë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: cp/class.c:3381 + msgid "non-static reference `%#D' in class without a constructor" + msgstr "" + + #: cp/class.c:3412 + msgid "non-static const member `%#D' in class without a constructor" + msgstr "" + + #: cp/class.c:3427 + msgid "field `%#D' with same name as class" + msgstr "" + + #: cp/class.c:3445 + #, fuzzy + msgid "`%#T' has pointer data members" + msgstr "¥á¥ó¥Ð¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤Î̵¸ú¤Ê `%s' ¤Î»ÈÍÑ" + + #: cp/class.c:3449 + msgid " but does not override `%T(const %T&)'" + msgstr "" + + #: cp/class.c:3451 + msgid " or `operator=(const %T&)'" + msgstr "" + + #: cp/class.c:3454 + msgid " but does not override `operator=(const %T&)'" + msgstr "" + + #: cp/class.c:3922 + #, fuzzy + msgid "initializer specified for non-virtual method `%D'" + msgstr "Èó´Ø¿ô `%s' ¤Î°ú¿ô¤Ë format °À­¤¬»ØÄꤵ¤ì¤Þ¤·¤¿" + + #: cp/class.c:4706 + msgid "virtual base `%T' inaccessible in `%T' due to ambiguity" + msgstr "" + + #: cp/class.c:4776 + msgid "direct base `%T' inaccessible in `%T' due to ambiguity" + msgstr "" + + #: cp/class.c:5193 + #, fuzzy + msgid "`%#T' has virtual functions but non-virtual destructor" + msgstr "Èó²¾Áۥǥ¹¥È¥é¥¯¥¿¤Ë¤Ä¤¤¤Æ·Ù¹ð¤¹¤ë" + + #: cp/class.c:5277 + #, fuzzy + msgid "trying to finish struct, but kicked out due to previous parse errors" + msgstr "¹½Ê¸²òÀϤ¬¹½Â¤ÂΤνª¤ê¤Ëº¹¤·³Ý¤«¤ê¤Þ¤·¤¿¤¬¡¢Á°¤Î¥¨¥é¡¼¤Î¤»¤¤¤Çʸ̮¤ò¸«¼º¤¤¤Þ¤·¤¿" + + #: cp/class.c:5734 + #, c-format + msgid "language string `\"%s\"' not recognized" + msgstr "¸À¸ìʸ»úÎó `\"%s\"' ¤Ïǧ¼±¤µ¤ì¤Þ¤»¤ó" + + #: cp/class.c:5830 + msgid "cannot resolve overloaded function `%D' based on conversion to type `%T'" + msgstr "" + + #: cp/class.c:5951 + msgid "no matches converting function `%D' to type `%#T'" + msgstr "" + + #: cp/class.c:5974 + msgid "converting overloaded function `%D' to type `%#T' is ambiguous" + msgstr "" + + #: cp/class.c:6000 + #, fuzzy + msgid "assuming pointer to member `%D'" + msgstr " ¥Ý¥¤¥ó¥¿¤«¤é¥á¥ó¥Ð¤Ø¤ÎÊÑ´¹¤Ç" + + #: cp/class.c:6003 + #, c-format + msgid "(a pointer to member can only be formed with `&%E')" + msgstr "" + + #: cp/class.c:6047 cp/class.c:6215 cp/class.c:6222 + msgid "not enough type information" + msgstr "ÉÔ½½Ê¬¤Ê·¿¾ðÊó" + + #: cp/class.c:6056 + #, fuzzy + msgid "argument of type `%T' does not match `%T'" + msgstr "²¾°ú¿ô `%s' ¤Ï¥×¥í¥È¥¿¥¤¥×¤Ë°ìÃפ·¤Þ¤»¤ó" + + #: cp/class.c:6199 + msgid "invalid operation on uninstantiated type" + msgstr "¥¤¥ó¥¹¥¿¥ó¥¹²½¤µ¤ì¤Ê¤¤·¿¤ËÂФ¹¤ë̵¸ú¤ÊÁàºî¤Ç¤¹" + + #. [basic.scope.class] + #. + #. A name N used in a class S shall refer to the same declaration + #. in its context and when re-evaluated in the completed scope of + #. S. + #: cp/class.c:6450 cp/decl.c:1011 cp/decl.c:3159 cp/pt.c:1839 + #, fuzzy + msgid "declaration of `%#D'" + msgstr "`%s' ¤¬ºÆÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: cp/class.c:6451 + msgid "changes meaning of `%D' from `%+#D'" + msgstr "" + + #. XXX Not i18n clean. + #: cp/cp-tree.h:3790 + #, c-format + msgid "%s is deprecated, please see the documentation for details" + msgstr "" + + #: cp/cvt.c:88 + #, fuzzy + msgid "can't convert from incomplete type `%T' to `%T'" + msgstr "ÉÔ´°Á´·¿¤Ø¤ÎÊÑ´¹¤Ç¤¹" + + #: cp/cvt.c:97 + msgid "conversion of `%E' from `%T' to `%T' is ambiguous" + msgstr "" + + #: cp/cvt.c:126 + #, fuzzy + msgid "converting from `%T' to `%T'" + msgstr "NaN ¤«¤éÀ°¿ô¤Ø¤ÎÊÑ´¹¤Ç¤¹" + + #: cp/cvt.c:198 cp/cvt.c:202 + msgid "pointer to member cast from `%T' to `%T' is via virtual base" + msgstr "" + + #: cp/cvt.c:220 cp/cvt.c:233 cp/cvt.c:272 + #, fuzzy + msgid "cannot convert `%E' from type `%T' to type `%T'" + msgstr "¥Ý¥¤¥ó¥¿·¿¤ËÊÑ´¹¤Ç¤­¤Þ¤»¤ó" + + #: cp/cvt.c:526 + msgid "conversion from `%T' to `%T' discards qualifiers" + msgstr "" + + #: cp/cvt.c:544 + msgid "casting `%T' to `%T' does not dereference pointer" + msgstr "" + + #: cp/cvt.c:573 + #, fuzzy + msgid "cannot convert type `%T' to type `%T'" + msgstr "¥Ý¥¤¥ó¥¿·¿¤ËÊÑ´¹¤Ç¤­¤Þ¤»¤ó" + + #: cp/cvt.c:690 + #, fuzzy + msgid "conversion from `%#T' to `%#T'" + msgstr "NaN ¤«¤éÀ°¿ô¤Ø¤ÎÊÑ´¹¤Ç¤¹" + + #: cp/cvt.c:702 + #, fuzzy + msgid "`%#T' used where a `%T' was expected" + msgstr "Ê£ÁÇ¿ô·¿¤¬¤¢¤ë¤Ù¤­²Õ½ê¤Ç¡¢¥Ý¥¤¥ó¥¿Ãͤ¬»È¤ï¤ì¤Þ¤·¤¿" + + #: cp/cvt.c:719 + msgid "the address of `%D', will always be `true'" + msgstr "" + + #: cp/cvt.c:739 + #, fuzzy + msgid "`%#T' used where a floating point value was expected" + msgstr "ÉâÆ°¾®¿ôÅÀ¿ô¤¬¤¢¤ë¤Ù¤­²Õ½ê¤Ç¡¢¥Ý¥¤¥ó¥¿Ãͤ¬»È¤ï¤ì¤Þ¤·¤¿" + + #: cp/cvt.c:794 + #, fuzzy + msgid "conversion from `%T' to non-scalar type `%T' requested" + msgstr "Èó¥¹¥«¥é¡¼·¿¤Ø¤ÎÊÑ´¹¤¬Í׵ᤵ¤ì¤Þ¤¹" + + #: cp/cvt.c:879 + msgid "object of incomplete type `%T' will not be accessed in %s" + msgstr "" + + #: cp/cvt.c:882 + msgid "object of type `%T' will not be accessed in %s" + msgstr "" + + #: cp/cvt.c:898 + msgid "object `%E' of incomplete type `%T' will not be accessed in %s" + msgstr "" + + #. [over.over] enumerates the places where we can take the address + #. of an overloaded function, and this is not one of them. + #: cp/cvt.c:918 + #, fuzzy, c-format + msgid "%s cannot resolve address of overloaded function" + msgstr "À©¸æ¤¬Èó void ´Ø¿ô¤Î½ª¤ê¤ËÅþ㤷¤Þ¤·¤¿" + + #. Only warn when there is no &. + #: cp/cvt.c:923 + #, c-format + msgid "%s is a reference, not call, to function `%E'" + msgstr "" + + #: cp/cvt.c:1061 + #, fuzzy + msgid "converting NULL to non-pointer type" + msgstr "ÉÔ´°Á´·¿¤Ø¤ÎÊÑ´¹¤Ç¤¹" + + #: cp/cvt.c:1137 + msgid "ambiguous default type conversion from `%T'" + msgstr "" + + #: cp/cvt.c:1139 + msgid " candidate conversions include `%D' and `%D'" + msgstr "" + + #: cp/decl.c:1012 cp/decl.c:3259 + #, fuzzy + msgid "conflicts with previous declaration `%#D'" + msgstr "`%s' ¤Î¥»¥¯¥·¥ç¥ó¤ÏÁ°Êý¤Ç¤ËÀë¸À¤µ¤ì¤¿¤â¤Î¤È¾×ÆÍ¤·¤Þ¤¹" + + #: cp/decl.c:1201 + #, fuzzy + msgid "label `%D' used but not defined" + msgstr "¥é¥Ù¥ë `%s' ¤¬»È¤ï¤ì¤Þ¤·¤¿¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: cp/decl.c:1206 + #, fuzzy + msgid "label `%D' defined but not used" + msgstr "¥é¥Ù¥ë `%s' ¤¬ÄêµÁ¤µ¤ì¤Þ¤·¤¿¤¬»È¤ï¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: cp/decl.c:2286 + msgid "namespace alias `%D' not allowed here, assuming `%D'" + msgstr "" + + #: cp/decl.c:3069 cp/decl.c:3457 + #, fuzzy + msgid "previous declaration of `%D'" + msgstr "Á°Êý¤Ç¤Î `%s' ¤ÎÀë¸À" + + #: cp/decl.c:3146 cp/decl.c:3181 + #, fuzzy + msgid "shadowing %s function `%#D'" + msgstr "¥é¥¤¥Ö¥é¥ê´Ø¿ô `%s' ¤òʤ¤¤±£¤·¤Þ¤¹" + + #: cp/decl.c:3155 + #, fuzzy + msgid "library function `%#D' redeclared as non-function `%#D'" + msgstr "¥é¥¤¥Ö¥é¥ê´Ø¿ô `%s' ¤ÏÈó´Ø¿ô¤È¤·¤ÆÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: cp/decl.c:3160 + #, fuzzy + msgid "conflicts with built-in declaration `%#D'" + msgstr "`%s' ¤ÎÀë¸À¤¬Ì·½â¤·¤Æ¤¤¤Þ¤¹" + + #: cp/decl.c:3176 cp/decl.c:3269 cp/decl.c:3285 + #, fuzzy + msgid "new declaration `%#D'" + msgstr "`%s' ¤¬ºÆÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: cp/decl.c:3177 + #, fuzzy + msgid "ambiguates built-in declaration `%#D'" + msgstr "¥é¥Ù¥ë¤ÎÀë¸À `%s' ¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹" + + #: cp/decl.c:3233 + #, fuzzy + msgid "`%#D' redeclared as different kind of symbol" + msgstr "`%s' ¤¬Ê̤Υ·¥ó¥Ü¥ë¼ï¤È¤·¤ÆºÆÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: cp/decl.c:3236 + #, fuzzy + msgid "previous declaration of `%#D'" + msgstr "Á°Êý¤Ç¤Î `%s' ¤ÎÀë¸À" + + #: cp/decl.c:3258 + #, fuzzy + msgid "declaration of template `%#D'" + msgstr "`enum %s' ¤ÎºÆÀë¸À" + + #: cp/decl.c:3270 cp/decl.c:3286 + #, fuzzy + msgid "ambiguates old declaration `%#D'" + msgstr "¥é¥Ù¥ë¤ÎÀë¸À `%s' ¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹" + + #: cp/decl.c:3278 + #, fuzzy + msgid "declaration of C function `%#D' conflicts with" + msgstr "%s: ´Ø¿ô `%s' ¤ÎÀë¸À¤¬ÊÑ´¹¤µ¤ì¤Æ¤¤¤Þ¤»¤ó\n" + + #: cp/decl.c:3280 + #, fuzzy + msgid "previous declaration `%#D' here" + msgstr "Á°Êý¤Ç¤Î `%s' ¤ÎÀë¸À" + + #: cp/decl.c:3296 + #, fuzzy + msgid "conflicting types for `%#D'" + msgstr "`%s' ¤È·¿¤¬Ì·½â¤·¤Þ¤¹" + + #: cp/decl.c:3297 + #, fuzzy + msgid "previous declaration as `%#D'" + msgstr "Á°Êý¤Ç¤Î `%s' ¤ÎÀë¸À" + + #: cp/decl.c:3340 + #, fuzzy + msgid "`%#D' previously defined here" + msgstr "`%s' ¤ÏÁ°¤Ë¤³¤³¤ÇÄêµÁ¤µ¤ì¤Þ¤·¤¿" + + #: cp/decl.c:3341 + #, fuzzy + msgid "`%#D' previously declared here" + msgstr "`%s' ¤ÏÁ°¤Ë¤³¤³¤ÇÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #. Prototype decl follows defn w/o prototype. + #: cp/decl.c:3349 + #, fuzzy + msgid "prototype for `%#D'" + msgstr "`%s' ¤Î¥×¥í¥È¥¿¥¤¥×¤¬¸å¤í¤Ë¤¢¤ê¤Þ¤¹" + + #: cp/decl.c:3350 + #, fuzzy + msgid "follows non-prototype definition here" + msgstr "Èó¥×¥í¥È¥¿¥¤¥×ÄêµÁ¤¬¤³¤³¤Ë¤¢¤ê¤Þ¤¹" + + #: cp/decl.c:3362 + #, fuzzy + msgid "previous declaration of `%#D' with %L linkage" + msgstr "Á°Êý¤Ç¤Î `%s' ¤ÎÀë¸À" + + #: cp/decl.c:3364 + #, fuzzy + msgid "conflicts with new declaration with %L linkage" + msgstr "`%s' ¤ÎÀë¸À¤¬Ì·½â¤·¤Æ¤¤¤Þ¤¹" + + #: cp/decl.c:3389 cp/decl.c:3397 + #, fuzzy + msgid "default argument given for parameter %d of `%#D'" + msgstr "¥Þ¥¯¥í `%s' ¤Ë°ú¿ô¤¬Í¿¤¨¤é¤ì¤Þ¤·¤¿" + + #: cp/decl.c:3391 cp/decl.c:3399 + #, fuzzy + msgid "after previous specification in `%#D'" + msgstr "Á°Êý¤Ç¤Î `%s' ¤ÎÀë¸À" + + #: cp/decl.c:3408 + #, fuzzy + msgid "`%#D' was used before it was declared inline" + msgstr "`%s' ¤Ï¤½¤ÎÄêµÁ¤ÎÁ°¤Ë¥×¥í¥È¥¿¥¤¥×¤Ê¤·¤Ç»È¤ï¤ì¤Þ¤·¤¿" + + #: cp/decl.c:3410 + #, fuzzy + msgid "previous non-inline declaration here" + msgstr "Á°Êý¤Ç¤Î `%s' ¤Î°ÅÌÛŪ¤ÊÀë¸À" + + #: cp/decl.c:3456 + #, fuzzy + msgid "redundant redeclaration of `%D' in same scope" + msgstr "`%s' ¤Î¾éĹ¤ÊºÆÀë¸À¤¬Æ±°ì¥¹¥³¡¼¥×Æâ¤Ë¤¢¤ê¤Þ¤¹" + + #: cp/decl.c:3539 + #, fuzzy, c-format + msgid "declaration of `%F' throws different exceptions" + msgstr "`%s' ¤ÎÀë¸À¤Ï´Ø¿ô¤ÎÇÛÎó" + + #: cp/decl.c:3541 + #, fuzzy, c-format + msgid "than previous declaration `%F'" + msgstr "`%s' ¤ÎÁ°ÊýÀë¸À¤¬¤¢¤ê¤Þ¤»¤ó" + + #. From [temp.expl.spec]: + #. + #. If a template, a member template or the member of a class + #. template is explicitly specialized then that + #. specialization shall be declared before the first use of + #. that specialization that would cause an implicit + #. instantiation to take place, in every translation unit in + #. which such a use occurs. + #: cp/decl.c:3666 + msgid "explicit specialization of %D after first use" + msgstr "" + + #: cp/decl.c:3911 + #, fuzzy + msgid "`%#D' used prior to declaration" + msgstr "`%s' ¤ÏÀë¸À¤è¤ê¤âÀè¤Ë»ÈÍѤµ¤ì¤Þ¤·¤¿" + + #: cp/decl.c:3942 + #, fuzzy + msgid "redeclaration of `wchar_t' as `%T'" + msgstr "`%s' ¤¬ºÆÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #. A redeclaration of main, but not a duplicate of the + #. previous one. + #. + #. [basic.start.main] + #. + #. This function shall not be overloaded. + #: cp/decl.c:3970 + #, fuzzy + msgid "invalid redeclaration of `%D'" + msgstr "`%s' ¤¬ºÆÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: cp/decl.c:3971 + msgid "as `%D'" + msgstr "" + + #: cp/decl.c:4061 + #, fuzzy + msgid "previous external decl of `%#D'" + msgstr "Á°Êý¤Î `%s' ¤Î³°ÉôÀë¸À" + + #: cp/decl.c:4102 + #, fuzzy + msgid "`%D' was previously implicitly declared to return `int'" + msgstr "`%s' ¤ÏÁ°Êý¤Ç°ÅÌÛŪ¤Ë `int' ¤òÊÖ¤¹¤ÈÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: cp/decl.c:4162 + #, fuzzy + msgid "extern declaration of `%#D' doesn't match" + msgstr "`%s' ¤Îextern Àë¸À¤Ï¥°¥í¡¼¥Ð¥ë¤Î¤½¤ì¤È°ìÃפ·¤Þ¤»¤ó" + + #: cp/decl.c:4163 + #, fuzzy + msgid "global declaration `%#D'" + msgstr "¥é¥Ù¥ë¤ÎÀë¸À `%s' ¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹" + + #: cp/decl.c:4197 + #, fuzzy + msgid "declaration of `%#D' shadows a parameter" + msgstr "`%s' ¤ÎÀë¸À¤Ï²¾°ú¿ô¤òʤ¤¤±£¤·¤Þ¤¹" + + #: cp/decl.c:4217 + #, c-format + msgid "declaration of `%s' shadows a member of `this'" + msgstr "`%s' ¤ÎÀë¸À¤Ë¤è¤ê `this' ¤Î¥á¥ó¥Ð¤¬Ê¤¤¤±£¤µ¤ì¤Þ¤¹" + + #: cp/decl.c:4582 + #, fuzzy + msgid "`%#D' hides constructor for `%#T'" + msgstr "`%#D' ¤Î¤¿¤á¤Î¥Ç¥¹¥È¥é¥¯¥¿¤¬É¬ÍפǤ¹" + + #: cp/decl.c:4597 + #, fuzzy + msgid "`%#D' conflicts with previous using declaration `%#D'" + msgstr "`%s' ¤Î¥»¥¯¥·¥ç¥ó¤ÏÁ°Êý¤Ç¤ËÀë¸À¤µ¤ì¤¿¤â¤Î¤È¾×ÆÍ¤·¤Þ¤¹" + + #: cp/decl.c:4609 + #, fuzzy + msgid "previous non-function declaration `%#D'" + msgstr "Á°Êý¤Ç¤Î `%s' ¤ÎÀë¸À" + + #: cp/decl.c:4610 + #, fuzzy + msgid "conflicts with function declaration `%#D'" + msgstr "`%s' ¤ÎÀë¸À¤¬Ì·½â¤·¤Æ¤¤¤Þ¤¹" + + #: cp/decl.c:4700 + #, fuzzy + msgid "implicit declaration of function `%#D'" + msgstr "´Ø¿ô `%s' ¤Î°ÅÌÛ¤ÎÀë¸À" + + #: cp/decl.c:4858 + #, c-format + msgid "label `%s' referenced outside of any function" + msgstr "¥é¥Ù¥ë `%s' ¤¬´Ø¿ô¤Î³°Â¦¤Î²¿¤«¤ò»²¾È¤·¤Þ¤·¤¿" + + #: cp/decl.c:4961 cp/decl.c:4985 cp/decl.c:5078 + #, fuzzy + msgid "jump to label `%D'" + msgstr "case ¥é¥Ù¥ë¤Ë¥¸¥ã¥ó¥×¤·¤Æ¤¤¤Þ¤¹" + + #: cp/decl.c:4963 cp/decl.c:4987 + msgid "jump to case label" + msgstr "case ¥é¥Ù¥ë¤Ë¥¸¥ã¥ó¥×¤·¤Æ¤¤¤Þ¤¹" + + #: cp/decl.c:4971 + #, fuzzy + msgid " crosses initialization of `%#D'" + msgstr "(`%s' ¤Î½é´ü²½¤ÏÉÔ´°Á´¤Ç¤¹)" + + #: cp/decl.c:4974 cp/decl.c:5094 + msgid " enters scope of non-POD `%#D'" + msgstr "" + + #: cp/decl.c:4994 cp/decl.c:5098 + msgid " enters try block" + msgstr " try ¥Ö¥í¥Ã¥¯¤ËÆþ¤ê¤Þ¤¹" + + #. Can't skip init of __exception_info. + #: cp/decl.c:4996 cp/decl.c:5090 cp/decl.c:5100 + msgid " enters catch block" + msgstr " catch ¥Ö¥í¥Ã¥¯¤ËÆþ¤ê¤Þ¤¹" + + #: cp/decl.c:5079 + msgid " from here" + msgstr " ¤³¤³¤«¤é" + + #: cp/decl.c:5092 + #, fuzzy + msgid " skips initialization of `%#D'" + msgstr "(`%s' ¤Î½é´ü²½¤ÏÉÔ´°Á´¤Ç¤¹)" + + #: cp/decl.c:5127 + msgid "label named wchar_t" + msgstr "" + + #: cp/decl.c:5131 + #, fuzzy + msgid "duplicate label `%D'" + msgstr "½ÅÊ£¤·¤¿¥á¥ó¥Ð `%s'" + + #: cp/decl.c:5216 + #, fuzzy, c-format + msgid "case label `%E' not within a switch statement" + msgstr "case ¥é¥Ù¥ë¤¬ switch ʸ¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤ó" + + #. Definition isn't the kind we were looking for. + #: cp/decl.c:5349 cp/decl.c:5369 + msgid "`%#D' redeclared as %C" + msgstr "" + + #. This happens for A::B where B is a template, and there are no + #. template arguments. + #: cp/decl.c:5458 + #, fuzzy + msgid "invalid use of `%D'" + msgstr "`restrict' ¤ÎÍÑË¡¤¬ÉÔŬÀڤǤ¹" + + #: cp/decl.c:5499 + #, fuzzy + msgid "`%D::%D' is not a template" + msgstr "¥Æ¥ó¥×¥ì¡¼¥ÈÆâ¤Ç `%s' ¤ò»ÈÍѤ·¤Æ¤¤¤Þ¤¹" + + #: cp/decl.c:5511 + msgid "`%D' undeclared in namespace `%D'" + msgstr "" + + #: cp/decl.c:5645 + msgid "`%D' used without template parameters" + msgstr "" + + #: cp/decl.c:5656 cp/decl.c:5672 cp/decl.c:5743 + msgid "no class template named `%#T' in `%#T'" + msgstr "" + + #: cp/decl.c:5690 cp/decl.c:5705 + #, fuzzy + msgid "no type named `%#T' in `%#T'" + msgstr "`asm' Ãæ¤ËÉÔÌÀ¤Ê¥ì¥¸¥¹¥¿Ì¾ `%s' ¤¬¤¢¤ê¤Þ¤¹" + + #: cp/decl.c:5922 + #, fuzzy + msgid "lookup of `%D' finds `%#D'" + msgstr "`%s' ¤Î̾Á°°ú¤­¤ÏÊѹ¹¤µ¤ì¤Þ¤·¤¿" + + #: cp/decl.c:5924 + msgid " instead of `%D' from dependent base class" + msgstr "" + + #: cp/decl.c:5926 + msgid " (use `typename %T::%D' if that's what you meant)" + msgstr "" + + #: cp/decl.c:6099 + msgid "lookup of `%D' in the scope of `%#T' (`%#D') does not match lookup in the current scope (`%#D')" + msgstr "" + + #: cp/decl.c:6922 + #, fuzzy + msgid "an anonymous union cannot have function members" + msgstr "̵̾¶¦ÍÑÂΤ˥á¥ó¥Ð¤¬¤¢¤ê¤Þ¤»¤ó" + + #: cp/decl.c:6939 + msgid "member %#D' with constructor not allowed in anonymous aggregate" + msgstr "" + + #: cp/decl.c:6942 + msgid "member %#D' with destructor not allowed in anonymous aggregate" + msgstr "" + + #: cp/decl.c:6945 + msgid "member %#D' with copy assignment operator not allowed in anonymous aggregate" + msgstr "" + + #: cp/decl.c:6983 + #, fuzzy + msgid "redeclaration of C++ built-in type `%T'" + msgstr "`%s' ¤¬ºÆÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: cp/decl.c:7018 + msgid "multiple types in one declaration" + msgstr "°ì¤Ä¤ÎÀë¸À¤ËÊ£¿ô¤Î·¿¤¬¤¢¤ê¤Þ¤¹" + + #: cp/decl.c:7021 + msgid "declaration does not declare anything" + msgstr "Àë¸À¤¬²¿¤âÀë¸À¤·¤Æ¤¤¤Þ¤»¤ó" + + #: cp/decl.c:7045 + #, fuzzy + msgid "missing type-name in typedef-declaration" + msgstr "typdef Àë¸À¤Ç·¿Ì¾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: cp/decl.c:7052 + msgid "ISO C++ prohibits anonymous structs" + msgstr "ISO C++ ¤Ï̵̾¹½Â¤ÂΤò¶Ø»ß¤·¤Æ¤¤¤Þ¤¹" + + #: cp/decl.c:7059 + #, fuzzy + msgid "`%D' can only be specified for functions" + msgstr "Èó´Ø¿ô `%s' ¤Î°ú¿ô¤Ë format °À­¤¬»ØÄꤵ¤ì¤Þ¤·¤¿" + + #: cp/decl.c:7061 + msgid "`%D' can only be specified inside a class" + msgstr "" + + #: cp/decl.c:7063 + #, fuzzy + msgid "`%D' can only be specified for constructors" + msgstr "¥³¥ó¥¹¥È¥é¥¯¥¿¤ËÂФ¹¤ëÌá¤êÃͤη¿»ØÄê¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿" + + #: cp/decl.c:7066 + #, fuzzy + msgid "`%D' can only be specified for objects and functions" + msgstr "Èó´Ø¿ô `%s' ¤Î°ú¿ô¤Ë format °À­¤¬»ØÄꤵ¤ì¤Þ¤·¤¿" + + #: cp/decl.c:7203 + #, fuzzy + msgid "typedef `%D' is initialized" + msgstr "typedef `%s' ¤¬½é´ü²½¤µ¤ì¤Þ¤·¤¿" + + #: cp/decl.c:7209 + #, fuzzy + msgid "function `%#D' is initialized like a variable" + msgstr "´Ø¿ô `%s' ¤¬ÊÑ¿ô¤Ç¤¢¤ë¤«¤Î¤è¤¦¤Ë½é´ü²½¤µ¤ì¤Þ¤·¤¿" + + #: cp/decl.c:7221 + #, fuzzy + msgid "declaration of `%#D' has `extern' and is initialized" + msgstr "`%s' ¤ÎÀë¸À¤Ë `extern' ¤¬¤Ä¤¤¤Æ¤ª¤ê¡¢½é´ü²½¤â¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: cp/decl.c:7251 + #, fuzzy + msgid "`%#D' is not a static member of `%#T'" + msgstr "static ¥Õ¥£¡¼¥ë¥É `%s' ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: cp/decl.c:7256 + #, fuzzy + msgid "ISO C++ does not permit `%T::%D' to be defined as `%T::%D'" + msgstr "ISO C++ ¤Ï #if Æâ¤Î \"%s\" ¤òµö¤·¤Þ¤»¤ó" + + #: cp/decl.c:7267 + #, fuzzy + msgid "duplicate initialization of %D" + msgstr "½ÅÊ£¤·¤¿½é´ü²½»Ò" + + #: cp/decl.c:7296 + #, fuzzy + msgid "declaration of `%#D' outside of class is not definition" + msgstr "`%s' ¤Î weak Àë¸À¤ÏÄêµÁ¤è¤ê¤âÀè¤Ë¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: cp/decl.c:7344 + #, fuzzy + msgid "variable `%#D' has initializer but incomplete type" + msgstr "ÊÑ¿ô `%s' ¤Ë¤Ï½é´ü²½»Ò¤¬¤¢¤ê¤Þ¤¹¤¬¡¢ÉÔ´°Á´·¿¤Ç¤¹" + + #: cp/decl.c:7352 cp/decl.c:7703 + #, fuzzy + msgid "elements of array `%#D' have incomplete type" + msgstr "ÇÛÎó `%s' ¤ÎÍ×ÁǤËÉÔ´°Á´·¿¤¬¤¢¤ê¤Þ¤¹" + + #: cp/decl.c:7368 + #, fuzzy + msgid "aggregate `%#D' has incomplete type and cannot be initialized" + msgstr "½¸¹çÂΤ¬ÉôʬŪ¤Ë¥Ö¥é¥±¥Ã¥È¤Î½é´ü²½»Ò¤ò»ý¤Á¤Þ¤¹" + + #: cp/decl.c:7407 + #, fuzzy + msgid "`%D' declared as reference but not initialized" + msgstr "`%s' ¤¬Ê̤Υ·¥ó¥Ü¥ë¼ï¤È¤·¤ÆºÆÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: cp/decl.c:7416 + #, fuzzy + msgid "ISO C++ forbids use of initializer list to initialize reference `%D'" + msgstr "ISO C++ ¤Ï new ¤Ø¤Î½¸¹çÂνé´ü²½»Ò¤ò¶Ø¤¸¤Þ¤¹" + + #: cp/decl.c:7449 + #, fuzzy + msgid "cannot initialize `%T' from `%T'" + msgstr "friend ´Ø¿ô `%s' ¤ò½é´ü²½¤Ç¤­¤Þ¤»¤ó" + + #: cp/decl.c:7510 + #, fuzzy + msgid "initializer fails to determine size of `%D'" + msgstr "½é´ü²½»Ò¤Ï `%s' ¤Î¥µ¥¤¥º¤ÎÆÃÄê¤Ë¼ºÇÔ¤·¤Þ¤·¤¿" + + #: cp/decl.c:7515 + #, fuzzy + msgid "array size missing in `%D'" + msgstr "`%s' ¤Ç¤ÎÇÛÎó¥µ¥¤¥º¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: cp/decl.c:7527 + #, fuzzy + msgid "zero-size array `%D'" + msgstr "ISO C ¤Ï ¥µ¥¤¥º 0 ¤ÎÇÛÎó `%s' ¤ò¶Ø¤¸¤Þ¤¹" + + #. An automatic variable with an incomplete type: that is an error. + #. Don't talk about array types here, since we took care of that + #. message in grokdeclarator. + #: cp/decl.c:7560 + #, fuzzy + msgid "storage size of `%D' isn't known" + msgstr "`%s' ¤ÎÎΰ襵¥¤¥º¤¬¤ï¤«¤ê¤Þ¤»¤ó" + + #: cp/decl.c:7582 + #, fuzzy + msgid "storage size of `%D' isn't constant" + msgstr "`%s' ¤ÎÎΰ襵¥¤¥º¤¬°ìÄê¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: cp/decl.c:7633 + msgid "sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)" + msgstr "" + + #: cp/decl.c:7634 + msgid " you can work around this by removing the initializer" + msgstr "" + + #: cp/decl.c:7662 + #, fuzzy + msgid "uninitialized const `%D'" + msgstr "friend ´Ø¿ô `%s' ¤ò½é´ü²½¤Ç¤­¤Þ¤»¤ó" + + #: cp/decl.c:7697 + #, fuzzy + msgid "variable-sized object `%D' may not be initialized" + msgstr "²ÄÊÑĹ¥ª¥Ö¥¸¥§¥¯¥È¤Ï½é´ü²½¤µ¤ì¤Ê¤¤¤³¤È¤Ë¤Ê¤ë¤Ç¤·¤ç¤¦" + + #: cp/decl.c:7708 cp/typeck2.c:201 + #, fuzzy + msgid "`%D' has incomplete type" + msgstr "`%s' ¤ÏÉÔ´°Á´·¿¤Ç¤¹" + + #: cp/decl.c:7740 + msgid "`%D' must be initialized by constructor, not by `{...}'" + msgstr "" + + #: cp/decl.c:7770 + msgid "structure `%D' with uninitialized const members" + msgstr "" + + #: cp/decl.c:7772 + msgid "structure `%D' with uninitialized reference members" + msgstr "" + + #: cp/decl.c:8037 + msgid "assignment (not initialization) in declaration" + msgstr "Àë¸À¤ÎÃæ¤ËÂåÆþ(½é´ü²½¤Ç¤Ï¤Ê¤¯)¤¬¤¢¤ê¤Þ¤¹" + + #: cp/decl.c:8047 + #, fuzzy + msgid "cannot initialize `%D' to namespace `%D'" + msgstr "friend ´Ø¿ô `%s' ¤ò½é´ü²½¤Ç¤­¤Þ¤»¤ó" + + #: cp/decl.c:8104 + #, fuzzy + msgid "shadowing previous type declaration of `%#D'" + msgstr "Á°Êý¤Ç¤Î `%s' ¤ÎÀë¸À" + + #: cp/decl.c:8503 + #, fuzzy + msgid "multiple initializations given for `%D'" + msgstr "(`%s' ¤Î½é´ü²½¤ÏÉÔ´°Á´¤Ç¤¹)" + + #: cp/decl.c:8603 + msgid "invalid catch parameter" + msgstr "̵¸ú¤Ê catch ¤Î°ú¿ô" + + #: cp/decl.c:8721 + #, fuzzy + msgid "destructor for alien class `%T' cannot be a member" + msgstr "¾¤Î¥¯¥é¥¹ `%s' ¤Î¥Ç¥¹¥È¥é¥¯¥¿¤ò¡¢¥á¥ó¥Ð¤Ë¤Ï¤Ç¤­¤Þ¤»¤ó" + + #: cp/decl.c:8724 + #, fuzzy + msgid "constructor for alien class `%T' cannot be a member" + msgstr "¾¤Î¥¯¥é¥¹ `%s' ¤Î¥Ç¥¹¥È¥é¥¯¥¿¤ò¡¢¥á¥ó¥Ð¤Ë¤Ï¤Ç¤­¤Þ¤»¤ó" + + #: cp/decl.c:8743 + msgid "`%D' declared as a `virtual' %s" + msgstr "" + + #: cp/decl.c:8745 + #, fuzzy + msgid "`%D' declared as an `inline' %s" + msgstr "ÊÑ¿ô `%s' ¤¬ `inline' ¤ÈÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: cp/decl.c:8747 + #, fuzzy + msgid "`const' and `volatile' function specifiers on `%D' invalid in %s declaration" + msgstr "²¾°ú¿ôÀë¸À¤ÎÃæ¤Îµ­²±¥¯¥é¥¹»ØÄê»Ò¤Ï̵¸ú¤Ç¤¹" + + #: cp/decl.c:8750 + #, fuzzy + msgid "`%D' declared as a friend" + msgstr "Îΰè `%s' ¤Ï´Ø¿ô¤È¤·¤ÆÀë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: cp/decl.c:8756 + #, fuzzy + msgid "`%D' declared with an exception specification" + msgstr "Îã³°»ÅÍͤθ¡ºº¤ò¤¹¤ë¥³¡¼¥É¤òÀ¸À®¤·¤Ê¤¤" + + #: cp/decl.c:8831 + msgid "cannot declare `::main' to be a template" + msgstr "`::main' ¤ò template ¤È¤·¤Æ¤ÏÀë¸À¤Ç¤­¤Þ¤»¤ó" + + #: cp/decl.c:8833 + msgid "cannot declare `::main' to be inline" + msgstr "`::main' ¤ò inline ¤È¤·¤Æ¤ÏÀë¸À¤Ç¤­¤Þ¤»¤ó" + + #: cp/decl.c:8835 + msgid "cannot declare `::main' to be static" + msgstr "`::main' ¤ò static ¤È¤·¤Æ¤ÏÀë¸À¤Ç¤­¤Þ¤»¤ó" + + #: cp/decl.c:8838 + msgid "`main' must return `int'" + msgstr "`main' ¤Ï `int' ¤òÊÖ¤µ¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: cp/decl.c:8866 + msgid "non-local function `%#D' uses anonymous type" + msgstr "" + + #: cp/decl.c:8869 + msgid "`%#D' does not refer to the unqualified type, so it is not used for linkage" + msgstr "" + + #: cp/decl.c:8875 + msgid "non-local function `%#D' uses local type `%T'" + msgstr "" + + #: cp/decl.c:8898 + msgid "%smember function `%D' cannot have `%T' method qualifier" + msgstr "" + + #: cp/decl.c:8922 + #, fuzzy + msgid "defining explicit specialization `%D' in friend declaration" + msgstr "Àë¸À¤ÎÃæ¤ËÂåÆþ(½é´ü²½¤Ç¤Ï¤Ê¤¯)¤¬¤¢¤ê¤Þ¤¹" + + #. Something like `template friend void f()'. + #: cp/decl.c:8932 + msgid "invalid use of template-id `%D' in declaration of primary template" + msgstr "" + + #: cp/decl.c:8960 + msgid "default arguments are not allowed in declaration of friend template specialization `%D'" + msgstr "" + + #: cp/decl.c:8967 + msgid "`inline' is not allowed in declaration of friend template specialization `%D'" + msgstr "" + + #: cp/decl.c:9029 + #, fuzzy + msgid "definition of implicitly-declared `%D'" + msgstr "´Ø¿ô¤ÎÄêµÁ¤¬ `auto' ¤ÈÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: cp/decl.c:9041 cp/decl2.c:1384 + #, fuzzy + msgid "no `%#D' member function declared in class `%T'" + msgstr "¥á¥ó¥Ð´Ø¿ô¤Ø¤Î¥Ý¥¤¥ó¥¿¤¬¸Æ¤Ð¤ì¤Þ¤·¤¿¤¬¡¢¥¯¥é¥¹¥¹¥³¡¼¥×Æâ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: cp/decl.c:9160 + msgid "non-local variable `%#D' uses local type `%T'" + msgstr "" + + #: cp/decl.c:9250 + msgid "invalid in-class initialization of static data member of non-integral type `%T'" + msgstr "" + + #: cp/decl.c:9259 + #, fuzzy + msgid "ISO C++ forbids in-class initialization of non-const static member `%D'" + msgstr "ISO C++ ¤Ï new ¼°¤Î½é´ü²½¤Ç¤Î `=' ¤ò¶Ø¤¸¤Þ¤¹" + + #: cp/decl.c:9262 + #, fuzzy + msgid "ISO C++ forbids initialization of member constant `%D' of non-integral type `%T'" + msgstr "ISO C++ ¤Ï new ¼°¤Î½é´ü²½¤Ç¤Î `=' ¤ò¶Ø¤¸¤Þ¤¹" + + #: cp/decl.c:9312 + #, fuzzy + msgid "size of array `%D' has non-integer type" + msgstr "ÇÛÎó `%s' ¤ÎÂ礭¤µ¤ÏÈóÀ°¿ô·¿" + + #: cp/decl.c:9314 + #, fuzzy + msgid "size of array has non-integer type" + msgstr "ÇÛÎó `%s' ¤ÎÂ礭¤µ¤ÏÈóÀ°¿ô·¿" + + #: cp/decl.c:9334 + #, fuzzy + msgid "size of array `%D' is negative" + msgstr "ÇÛÎó `%s' ¤ÎÂ礭¤µ¤¬Éé¤Ç¤¹" + + #: cp/decl.c:9336 + #, fuzzy + msgid "size of array is negative" + msgstr "ÇÛÎó `%s' ¤ÎÂ礭¤µ¤¬Éé¤Ç¤¹" + + #: cp/decl.c:9345 + #, fuzzy + msgid "ISO C++ forbids zero-size array `%D'" + msgstr "ISO C ¤Ï ¥µ¥¤¥º 0 ¤ÎÇÛÎó `%s' ¤ò¶Ø¤¸¤Þ¤¹" + + #: cp/decl.c:9347 + #, fuzzy + msgid "ISO C++ forbids zero-size array" + msgstr "ISO C ¤Ï ¥µ¥¤¥º 0 ¤ÎÇÛÎó `%s' ¤ò¶Ø¤¸¤Þ¤¹" + + #: cp/decl.c:9354 + #, fuzzy + msgid "size of array `%D' is not an integral constant-expression" + msgstr "ÇÛÎó `%s' ¤ÎÂ礭¤µ¤ÏÈóÀ°¿ô·¿" + + #: cp/decl.c:9357 + #, fuzzy + msgid "size of array is not an integral constant-expression" + msgstr "Äê¿ô¼°¤¬·ç¤±¤Æ¤¤¤ë¤«Ìµ¸ú¤Ç¤¹" + + #: cp/decl.c:9375 + #, fuzzy + msgid "ISO C++ forbids variable-size array `%D'" + msgstr "ISO C89 ¤Ï²ÄÊÑĹ¥µ¥¤¥º¤ÎÇÛÎó `%s' ¤ò¶Ø¤¸¤Þ¤¹" + + #: cp/decl.c:9378 + #, fuzzy + msgid "ISO C++ forbids variable-size array" + msgstr "ISO C89 ¤Ï²ÄÊÑĹ¥µ¥¤¥º¤ÎÇÛÎó `%s' ¤ò¶Ø¤¸¤Þ¤¹" + + #: cp/decl.c:9389 + msgid "overflow in array dimension" + msgstr "ÇÛÎó¤Î¼¡¸µ¤¬¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤Þ¤·¤¿" + + #: cp/decl.c:9448 + #, fuzzy + msgid "declaration of `%D' as %s" + msgstr "`%s' ¤¬ºÆÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: cp/decl.c:9450 + #, fuzzy, c-format + msgid "creating %s" + msgstr "%s ¤òºîÀ®Ãæ.\n" + + #: cp/decl.c:9462 + msgid "declaration of `%D' as multidimensional array must have bounds for all dimensions except the first" + msgstr "" + + #: cp/decl.c:9465 + msgid "multidimensional array must have bounds for all dimensions except the first" + msgstr "" + + #: cp/decl.c:9494 + #, fuzzy + msgid "return type specification for constructor invalid" + msgstr "¥³¥ó¥¹¥È¥é¥¯¥¿¤ËÂФ¹¤ëÌá¤êÃͤη¿»ØÄê¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿" + + #: cp/decl.c:9501 + #, fuzzy + msgid "return type specification for destructor invalid" + msgstr "¥³¥ó¥¹¥È¥é¥¯¥¿¤ËÂФ¹¤ëÌá¤êÃͤη¿»ØÄê¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿" + + #: cp/decl.c:9507 + #, fuzzy + msgid "operator `%T' declared to return `%T'" + msgstr "`operator delete' ¤ÎÌá¤ê·¿¤Ï `void' ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: cp/decl.c:9509 + #, fuzzy + msgid "return type specified for `operator %T'" + msgstr "¥³¥ó¥¹¥È¥é¥¯¥¿¤ËÂФ¹¤ëÌá¤êÃͤη¿»ØÄê¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿" + + #: cp/decl.c:9679 + msgid "destructors must be member functions" + msgstr "¥Ç¥¹¥È¥é¥¯¥¿¤Ï¥á¥ó¥Ð´Ø¿ô¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: cp/decl.c:9698 + msgid "destructor `%T' must match class name `%T'" + msgstr "" + + #: cp/decl.c:9748 + #, fuzzy + msgid "invalid declarator" + msgstr "̵¸ú¤ÊÀë¸À¤Ç¤¹" + + #: cp/decl.c:9801 + msgid "declarator-id missing; using reserved word `%D'" + msgstr "" + + #: cp/decl.c:9845 + #, fuzzy + msgid "`%T::%D' is not a valid declarator" + msgstr "`%s' ¤ÏÀë¸À¤Î»Ï¤Þ¤ê¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: cp/decl.c:9847 + msgid " perhaps you want `typename %T::%D' to make it a type" + msgstr "" + + #: cp/decl.c:9859 + #, fuzzy + msgid "type `%T' is not derived from type `%T'" + msgstr "È¿Éü»Ò `%s' ¤ÏÇÉÀ¸·¿¤Ç¤¹" + + #. Parse error puts this typespec where + #. a declarator should go. + #: cp/decl.c:9905 + msgid "`%T' specified as declarator-id" + msgstr "" + + #: cp/decl.c:9907 + msgid " perhaps you want `%T' for a constructor" + msgstr "" + + #: cp/decl.c:9921 + #, fuzzy + msgid "`%D' as declarator" + msgstr "`%s' ¤ÏÀë¸À¤è¤ê¤âÀè¤Ë»ÈÍѤµ¤ì¤Þ¤·¤¿" + + #: cp/decl.c:9936 + #, fuzzy + msgid "declaration of `%D' as non-function" + msgstr "`%s' ¤ÎÀë¸À¤Ï´Ø¿ô¤ÎÇÛÎó" + + #: cp/decl.c:10005 + msgid "`bool' is now a keyword" + msgstr "`bool' ¤Ïº£¤ä¥­¡¼¥ï¡¼¥É¤Ç¤¹" + + #: cp/decl.c:10007 + msgid "extraneous `%T' ignored" + msgstr "" + + #: cp/decl.c:10023 cp/decl.c:10057 + #, fuzzy + msgid "multiple declarations `%T' and `%T'" + msgstr "¥á¥½¥Ã¥É `%s' ¤ÎÀë¸À¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹¡£" + + #: cp/decl.c:10036 + msgid "ISO C++ does not support `long long'" + msgstr "ISO C++ ¤Ï `long long' ¤ò¼õ¤±Æþ¤ì¤Þ¤»¤ó" + + #: cp/decl.c:10128 cp/decl.c:10131 + #, fuzzy, c-format + msgid "ISO C++ forbids declaration of `%s' with no type" + msgstr "ISO C ¤Ï¥á¥ó¥Ð¤Î¤Ê¤¤¥á¥ó¥ÐÀë¸À¤ò¶Ø¤¸¤Þ¤¹" + + #. The implicit typename extension is deprecated and will be + #. removed. Warn about its use now. + #: cp/decl.c:10141 + msgid "`%T' is implicitly a typename" + msgstr "" + + #: cp/decl.c:10177 + #, c-format + msgid "short, signed or unsigned invalid for `%s'" + msgstr "short, Éä¹ç¤Ä¤­¤Þ¤¿¤ÏÉä¹ç¤Ê¤·¤Ï `%s' ¤Ë¤È¤Ã¤ÆÌµ¸ú¤Ç¤¹" + + #: cp/decl.c:10182 + #, c-format + msgid "long and short specified together for `%s'" + msgstr "long ¤È short ¤¬ `%s' ¤ËÂФ·¤Æ°ì½ï¤Ë»ØÄꤵ¤ì¤Æ¤¤¤Þ¤¹" + + #: cp/decl.c:10193 + #, c-format + msgid "signed and unsigned given together for `%s'" + msgstr "Éä¹çÉÕ¤­¤ÈÉä¹ç̵¤·¤¬ `%s' ¤ËÂФ·¤Æ°ì½ï¤ËÍ¿¤¨¤é¤ì¤Æ¤¤¤Þ¤¹" + + #: cp/decl.c:10298 + #, fuzzy + msgid "qualifiers are not allowed on declaration of `operator %T'" + msgstr "`operator delete' ¤ÎÀë¸ÀÆâ¤Ë¿¤¹¤®¤ë°ú¿ô" + + #: cp/decl.c:10326 + #, fuzzy + msgid "member `%D' cannot be declared both virtual and static" + msgstr "Èó¥á¥ó¥Ð `%s' ¤ò `mutable' ¤È¤ÏÀë¸À¤Ç¤­¤Þ¤»¤ó" + + #: cp/decl.c:10340 + msgid "storage class specifiers invalid in parameter declarations" + msgstr "²¾°ú¿ôÀë¸À¤ÎÃæ¤Îµ­²±¥¯¥é¥¹»ØÄê»Ò¤Ï̵¸ú¤Ç¤¹" + + #: cp/decl.c:10344 + msgid "typedef declaration invalid in parameter declaration" + msgstr "²¾°ú¿ôÀë¸À¤ÎÃæ¤Î typedef Àë¸À¤Ï̵¸ú¤Ç¤¹" + + #: cp/decl.c:10357 + msgid "virtual outside class declaration" + msgstr "¥¯¥é¥¹Àë¸À¤Î³°Â¦¤Ç virtual »ØÄꤷ¤Æ¤¤¤Þ¤¹" + + #: cp/decl.c:10411 + #, c-format + msgid "storage class specified for %s `%s'" + msgstr "%s ¤ËÂФ¹¤ëµ­²±¥¯¥é¥¹»ØÄê»Ò `%s'" + + #: cp/decl.c:10449 + msgid "storage class specifiers invalid in friend function declarations" + msgstr "friend ´Ø¿ôÀë¸ÀÆâ¤Îµ­²±¥¯¥é¥¹»ØÄê»Ò¤Ï̵¸ú¤Ç¤¹" + + #: cp/decl.c:10553 + #, fuzzy + msgid "size of member `%D' is not constant" + msgstr "`%s' ¤ÎÎΰ襵¥¤¥º¤¬°ìÄê¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: cp/decl.c:10632 + msgid "destructor cannot be static member function" + msgstr "¥Ç¥¹¥È¥é¥¯¥¿¤òÀÅŪ¥á¥ó¥Ð´Ø¿ô¤È¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó" + + #: cp/decl.c:10635 + #, fuzzy, c-format + msgid "destructors may not be `%s'" + msgstr "¥Ç¥¹¥È¥é¥¯¥¿¤Ï²¾°ú¿ô¤ò¼è¤ê¤Þ¤»¤ó" + + #: cp/decl.c:10656 + msgid "constructor cannot be static member function" + msgstr "¥³¥ó¥¹¥È¥é¥¯¥¿¤òÀÅŪ¥á¥ó¥Ð´Ø¿ô¤È¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó" + + #: cp/decl.c:10659 + msgid "constructors cannot be declared virtual" + msgstr "¥³¥ó¥¹¥È¥é¥¯¥¿¤Ï virtual Àë¸À¤Ç¤­¤Þ¤»¤ó" + + #: cp/decl.c:10664 + #, fuzzy, c-format + msgid "constructors may not be `%s'" + msgstr "¥³¥ó¥¹¥È¥é¥¯¥¿¤Ï virtual Àë¸À¤Ç¤­¤Þ¤»¤ó" + + #: cp/decl.c:10674 + msgid "return value type specifier for constructor ignored" + msgstr "¥³¥ó¥¹¥È¥é¥¯¥¿¤ËÂФ¹¤ëÌá¤êÃͤη¿»ØÄê¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿" + + #: cp/decl.c:10693 + #, c-format + msgid "can't initialize friend function `%s'" + msgstr "friend ´Ø¿ô `%s' ¤ò½é´ü²½¤Ç¤­¤Þ¤»¤ó" + + #. Cannot be both friend and virtual. + #: cp/decl.c:10697 + msgid "virtual functions cannot be friends" + msgstr "²¾ÁÛ´Ø¿ô¤Ï friend ¤Ë¤Ç¤­¤Þ¤»¤ó" + + #: cp/decl.c:10702 + msgid "friend declaration not in class definition" + msgstr "friend Àë¸À¤¬¥¯¥é¥¹ÄêµÁ¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤ó" + + #: cp/decl.c:10704 + #, fuzzy, c-format + msgid "can't define friend function `%s' in a local class definition" + msgstr "friend Àë¸À¤¬¥¯¥é¥¹ÄêµÁ¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤ó" + + #: cp/decl.c:10728 + #, fuzzy + msgid "destructors may not have parameters" + msgstr "¥Ç¥¹¥È¥é¥¯¥¿¤Ï²¾°ú¿ô¤ò¼è¤ê¤Þ¤»¤ó" + + #: cp/decl.c:10758 + #, c-format + msgid "cannot declare %s to references" + msgstr "%s ¤ò»²¾È¤È¤·¤ÆÀë¸À¤Ç¤­¤Þ¤»¤ó" + + #: cp/decl.c:10769 + #, fuzzy + msgid "cannot declare pointer to `%#T' member" + msgstr "¥Ý¥¤¥ó¥¿¤ò»²¾È¤È¤·¤ÆÀë¸À¤Ç¤­¤Þ¤»¤ó" + + #: cp/decl.c:10784 + msgid "invalid type: `void &'" + msgstr "̵¸ú¤Ê·¿: `void &'" + + #: cp/decl.c:10835 + msgid "discarding `const' applied to a reference" + msgstr "»²¾È¤ËÍѤ¤¤é¤ì¤¿ `const' ¤Ï¼Î¤Æ¤é¤ì¤Þ¤¹" + + #: cp/decl.c:10837 + msgid "discarding `volatile' applied to a reference" + msgstr "»²¾È¤ËÍѤ¤¤é¤ì¤¿ `volatile' ¤Ï¼Î¤Æ¤é¤ì¤Þ¤¹" + + #: cp/decl.c:10948 + msgid "extra qualification `%T::' on member `%s' ignored" + msgstr "" + + #: cp/decl.c:10958 + msgid "cannot declare member function `%T::%s' within `%T'" + msgstr "" + + #: cp/decl.c:10973 + msgid "cannot declare member `%T::%s' within `%T'" + msgstr "" + + #. [dcl.fct.spec] The explicit specifier shall only be used in + #. declarations of constructors within a class definition. + #: cp/decl.c:11053 + msgid "only declarations of constructors can be `explicit'" + msgstr "`explicit' ¤Ë¤Ç¤­¤ë¤Î¤Ï¡¢¥³¥ó¥¹¥È¥é¥¯¥¿¤À¤±¤Ç¤¹" + + #: cp/decl.c:11061 + #, c-format + msgid "non-member `%s' cannot be declared `mutable'" + msgstr "Èó¥á¥ó¥Ð `%s' ¤ò `mutable' ¤È¤ÏÀë¸À¤Ç¤­¤Þ¤»¤ó" + + #: cp/decl.c:11066 + #, c-format + msgid "non-object member `%s' cannot be declared `mutable'" + msgstr "È󥪥֥¸¥§¥¯¥È¥á¥ó¥Ð `%s' ¤ò `mutable' ¤È¤ÏÀë¸À¤Ç¤­¤Þ¤»¤ó" + + #: cp/decl.c:11072 + #, c-format + msgid "function `%s' cannot be declared `mutable'" + msgstr "´Ø¿ô `%s' ¤ò `mutable' ¤È¤·¤Æ¤ÏÀë¸À¤Ç¤­¤Þ¤»¤ó" + + #: cp/decl.c:11077 + #, c-format + msgid "static `%s' cannot be declared `mutable'" + msgstr "static `%s' ¤ò mutable ¤È¤·¤ÆÀë¸À¤Ç¤­¤Þ¤»¤ó" + + #: cp/decl.c:11082 + #, c-format + msgid "const `%s' cannot be declared `mutable'" + msgstr "const `%s' ¤ò `mutable' ¤È¤·¤ÆÀë¸À¤Ç¤­¤Þ¤»¤ó" + + #: cp/decl.c:11095 + #, fuzzy + msgid "template-id `%D' used as a declarator" + msgstr "²¾°ú¿ô `%s' ¾¯¤·Á°Êý¤ÇÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: cp/decl.c:11116 + msgid "ISO C++ forbids nested type `%D' with same name as enclosing class" + msgstr "" + + #: cp/decl.c:11163 + msgid "typedef name may not be class-qualified" + msgstr "" + + #: cp/decl.c:11171 + #, fuzzy + msgid "invalid type qualifier for non-member function type" + msgstr "Èó¥á¥ó¥Ð´Ø¿ô¤Ç¤Î `this' ¤Î»ÈÍѤÏ̵¸ú¤Ç¤¹" + + #: cp/decl.c:11187 + msgid "typedef declaration includes an initializer" + msgstr "typedef Àë¸À¤¬½é´üÀßÄê»Ò¤ò´Þ¤ó¤Ç¤¤¤Þ¤¹" + + #: cp/decl.c:11240 + #, fuzzy + msgid "type qualifiers specified for friend class declaration" + msgstr "°ì¤Ä¤Î¶õ¤ÎÀë¸ÀÃæ¤Ë¡¢Æó¤Ä¤Î·¿¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤¹" + + #: cp/decl.c:11245 + #, fuzzy + msgid "`inline' specified for friend class declaration" + msgstr "¥¯¥é¥¹Àë¸À¤Î³°Â¦¤Ç virtual »ØÄꤷ¤Æ¤¤¤Þ¤¹" + + #: cp/decl.c:11255 + #, fuzzy + msgid "template parameters cannot be friends" + msgstr "Ê£»¨¤Ê¥Ñ¥é¥á¥¿¤ò¤â¤Ä´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤ó" + + #: cp/decl.c:11257 + msgid "friend declaration requires class-key, i.e. `friend class %T::%T'" + msgstr "" + + #: cp/decl.c:11262 + #, fuzzy + msgid "friend declaration requires class-key, i.e. `friend %#T'" + msgstr "friend Àë¸À¤¬¥¯¥é¥¹ÄêµÁ¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤ó" + + #: cp/decl.c:11278 + #, fuzzy + msgid "trying to make class `%T' a friend of global scope" + msgstr "¥¯¥é¥¹ `%s' ¤òÂç°è¥¹¥³¡¼¥×¤Î friend ¤Ë¤·¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹" + + #: cp/decl.c:11289 + #, fuzzy + msgid "invalid qualifiers on non-member function type" + msgstr "Èó¥á¥ó¥Ð´Ø¿ô¤Ç¤Î `this' ¤Î»ÈÍѤÏ̵¸ú¤Ç¤¹" + + #: cp/decl.c:11308 + #, fuzzy + msgid "abstract declarator `%T' used as declaration" + msgstr "`%s' ¤ÎÀë¸À¤Ï¥°¥í¡¼¥Ð¥ëÀë¸À¤òʤ¤¤±£¤·¤Þ¤¹" + + #: cp/decl.c:11320 + msgid "unnamed variable or field declared void" + msgstr "̵̾ÊÑ¿ô¤ä¥Õ¥£¡¼¥ë¥É¤¬ void ¤ÈÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: cp/decl.c:11329 + msgid "variable or field declared void" + msgstr "ÊÑ¿ô¤Þ¤¿¤Ï¥Õ¥£¡¼¥ë¥É¤¬ void ¤ÈÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: cp/decl.c:11339 + msgid "cannot use `::' in parameter declaration" + msgstr "²¾°ú¿ôÀë¸À¤ÎÃæ¤Ç `::' ¤ò»È¤¨¤Þ¤»¤ó" + + #. Something like struct S { int N::j; }; + #: cp/decl.c:11385 + #, fuzzy + msgid "invalid use of `::'" + msgstr "`restrict' ¤ÎÍÑË¡¤¬ÉÔŬÀڤǤ¹" + + #: cp/decl.c:11397 + #, fuzzy + msgid "function `%D' cannot be declared friend" + msgstr "´Ø¿ô `%s' ¤ò `mutable' ¤È¤·¤Æ¤ÏÀë¸À¤Ç¤­¤Þ¤»¤ó" + + #: cp/decl.c:11409 + msgid "can't make `%D' into a method -- not in a class" + msgstr "" + + #: cp/decl.c:11418 + #, fuzzy + msgid "function `%D' declared virtual inside a union" + msgstr "Îΰè `%s' ¤Ï´Ø¿ô¤È¤·¤ÆÀë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: cp/decl.c:11430 + msgid "`%D' cannot be declared virtual, since it is always static" + msgstr "" + + #: cp/decl.c:11503 + #, fuzzy + msgid "field `%D' has incomplete type" + msgstr "Îΰè `%s' ¤ÏÉÔ´°Á´¤Ê·¿¤Ç¤¹" + + #: cp/decl.c:11505 + #, fuzzy + msgid "name `%T' has incomplete type" + msgstr "²¾°ú¿ô `%s' ¤ÏÉÔ´°Á´·¿¤Ç¤¹" + + #: cp/decl.c:11514 + #, fuzzy + msgid " in instantiation of template `%T'" + msgstr "%s: `%s' ¤Î½é´ü²½:\n" + + #: cp/decl.c:11524 + #, c-format + msgid "`%s' is neither function nor member function; cannot be declared friend" + msgstr "`%s' ¤Ï´Ø¿ô¤Ç¤â¥á¥ó¥Ð´Ø¿ô¤Ç¤â¤¢¤ê¤Þ¤»¤ó -- friend ¤È¤ÏÀë¸À¤Ç¤­¤Þ¤»¤ó" + + #: cp/decl.c:11541 + msgid "member functions are implicitly friends of their class" + msgstr "¥á¥ó¥Ð´Ø¿ô¤Ï°ÅÌÛŪ¤Ë¤½¤Î¥¯¥é¥¹¤Î friend ¤Ç¤¹" + + #. An attempt is being made to initialize a non-static + #. member. But, from [class.mem]: + #. + #. 4 A member-declarator can contain a + #. constant-initializer only if it declares a static + #. member (_class.static_) of integral or enumeration + #. type, see _class.static.data_. + #. + #. This used to be relatively common practice, but + #. the rest of the compiler does not correctly + #. handle the initialization unless the member is + #. static so we make it static below. + #: cp/decl.c:11583 + #, fuzzy + msgid "ISO C++ forbids initialization of member `%D'" + msgstr "ISO C++ ¤Ï new ¼°¤Î½é´ü²½¤Ç¤Î `=' ¤ò¶Ø¤¸¤Þ¤¹" + + #: cp/decl.c:11585 + msgid "making `%D' static" + msgstr "" + + #: cp/decl.c:11609 + msgid "ISO C++ forbids static data member `%D' with same name as enclosing class" + msgstr "" + + #: cp/decl.c:11650 + #, c-format + msgid "storage class `auto' invalid for function `%s'" + msgstr "´Ø¿ô `%s' ¤ËÂФ¹¤ëµ­²±¥¯¥é¥¹ `auto' ¤Ï̵¸ú¤Ç¤¹" + + #: cp/decl.c:11652 + #, c-format + msgid "storage class `register' invalid for function `%s'" + msgstr "´Ø¿ô `%s' ¤ËÂФ¹¤ëµ­²±¥¯¥é¥¹ `register' ¤Ï̵¸ú¤Ç¤¹" + + #: cp/decl.c:11663 + #, c-format + msgid "storage class `static' invalid for function `%s' declared out of global scope" + msgstr "Âç°è¥¹¥³¡¼¥×³°¤Î´Ø¿ô `%s' ¤ËÂФ¹¤ëµ­²±¥¯¥é¥¹ `static' ¤Ï̵¸ú¤Ç¤¹" + + #: cp/decl.c:11665 + #, c-format + msgid "storage class `inline' invalid for function `%s' declared out of global scope" + msgstr "Âç°è¥¹¥³¡¼¥×³°¤Î´Ø¿ô `%s' ¤ËÂФ¹¤ëµ­²±¥¯¥é¥¹ `inline' ¤Ï̵¸ú¤Ç¤¹" + + #: cp/decl.c:11672 + #, c-format + msgid "virtual non-class function `%s'" + msgstr "virtual ¤ÊÈ󥯥饹´Ø¿ô `%s'" + + #: cp/decl.c:11701 + #, fuzzy + msgid "cannot declare member function `%D' to have static linkage" + msgstr "`::main' ¤ò static ¤È¤·¤Æ¤ÏÀë¸À¤Ç¤­¤Þ¤»¤ó" + + #. FIXME need arm citation + #: cp/decl.c:11707 + msgid "cannot declare static function inside another function" + msgstr "¾¤Î´Ø¿ôÆâ¤Ç static ´Ø¿ô¤òÀë¸À¤Ç¤­¤Þ¤»¤ó" + + #: cp/decl.c:11735 + msgid "`static' may not be used when defining (as opposed to declaring) a static data member" + msgstr "" + + #: cp/decl.c:11741 + #, fuzzy + msgid "static member `%D' declared `register'" + msgstr "`register' ¤ÈÀë¸À¤µ¤ì¤¿ÇÛÎó¤Ëź»ú¤ò¤Ä¤±¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹" + + #: cp/decl.c:11746 + msgid "cannot explicitly declare member `%#D' to have extern linkage" + msgstr "" + + #: cp/decl.c:11918 + #, fuzzy + msgid "default argument for `%#D' has type `%T'" + msgstr "`%s' ¤ÎÂè°ì°ú¿ô¤Ï `int' ¤È¤¹¤Ù¤­¤Ç¤¹" + + #: cp/decl.c:11921 + msgid "default argument for parameter of type `%T' has type `%T'" + msgstr "" + + #: cp/decl.c:11938 + msgid "default argument `%E' uses local variable `%D'" + msgstr "" + + #: cp/decl.c:11982 + #, fuzzy, c-format + msgid "invalid string constant `%E'" + msgstr "ÉÔÀµ¤Êʸ»úÎóÄê¿ô¤Ç¤¹" + + #: cp/decl.c:11984 + msgid "invalid integer constant in parameter list, did you forget to give parameter name?" + msgstr "²¾°ú¿ô¥ê¥¹¥È¤Ë̵¸ú¤ÊÀ°¿ôÄê¿ô¤¬¤¢¤ê¤Þ¤¹¡£²¾°ú¿ô̾¤òÍ¿¤¨Ëº¤ì¤¿¤Î¤Ç¤Ï¡©" + + #: cp/decl.c:12018 + #, fuzzy + msgid "parameter `%D' invalidly declared method type" + msgstr "¥Ñ¥é¥á¥¿¤Ï¥á¥½¥Ã¥É¤Î·¿¤òÉÔÀµ¤ËÀë¸À¤·¤Þ¤·¤¿" + + #: cp/decl.c:12024 + #, fuzzy + msgid "parameter `%D' invalidly declared offset type" + msgstr "¥Ñ¥é¥á¥¿¤¬¥ª¥Õ¥»¥Ã¥È¤Î·¿¤òÉÔÀµ¤ËÀë¸À¤·¤Þ¤·¤¿" + + #: cp/decl.c:12048 + msgid "parameter `%D' includes %s to array of unknown bound `%T'" + msgstr "" + + #. [class.copy] + #. + #. A declaration of a constructor for a class X is ill-formed if + #. its first parameter is of type (optionally cv-qualified) X + #. and either there are no other parameters or else all other + #. parameters have default arguments. + #. + #. We *don't* complain about member template instantiations that + #. have this form, though; they can occur as we try to decide + #. what constructor to use during overload resolution. Since + #. overload resolution will never prefer such a constructor to + #. the non-template copy constructor (which is either explicitly + #. or implicitly defined), there's no need to worry about their + #. existence. Theoretically, they should never even be + #. instantiated, but that's hard to forestall. + #: cp/decl.c:12215 + msgid "invalid constructor; you probably meant `%T (const %T&)'" + msgstr "" + + #: cp/decl.c:12366 + #, fuzzy + msgid "`%D' must be a nonstatic member function" + msgstr "`this' ¤ÏÀÅŪ¥á¥ó¥Ð´Ø¿ô¤«¤é»ÈÍѤǤ­¤Þ¤»¤ó" + + #: cp/decl.c:12372 + msgid "`%D' must be either a non-static member function or a non-member function" + msgstr "" + + #: cp/decl.c:12389 + msgid "`%D' must have an argument of class or enumerated type" + msgstr "" + + #: cp/decl.c:12421 + #, c-format + msgid "conversion to %s%s will never use a type conversion operator" + msgstr "%s%s ¤Ø¤ÎÊÑ´¹¤Ç·¿ÊÑ´¹±é»»»Ò¤¬ÍøÍѤµ¤ì¤ë¤³¤È¤Ï·è¤·¤Æ¤¢¤ê¤Þ¤»¤ó" + + #. 13.4.0.3 + #: cp/decl.c:12428 + #, fuzzy + msgid "ISO C++ prohibits overloading operator ?:" + msgstr "ISO C++ ¤Ï̵̾¹½Â¤ÂΤò¶Ø»ß¤·¤Æ¤¤¤Þ¤¹" + + #: cp/decl.c:12478 + msgid "postfix `%D' must take `int' as its argument" + msgstr "" + + #: cp/decl.c:12482 + msgid "postfix `%D' must take `int' as its second argument" + msgstr "" + + #: cp/decl.c:12489 + #, fuzzy + msgid "`%D' must take either zero or one argument" + msgstr "`%s' ¤Ï 0 ¤« 2 ¸Ä¤Î°ú¿ô¤·¤«¤È¤ê¤Þ¤»¤ó" + + #: cp/decl.c:12491 + #, fuzzy + msgid "`%D' must take either one or two arguments" + msgstr "`%s' ¤Ï 0 ¤« 2 ¸Ä¤Î°ú¿ô¤·¤«¤È¤ê¤Þ¤»¤ó" + + #: cp/decl.c:12512 + msgid "prefix `%D' should return `%T'" + msgstr "" + + #: cp/decl.c:12518 + msgid "postfix `%D' should return `%T'" + msgstr "" + + #: cp/decl.c:12527 + msgid "`%D' must take `void'" + msgstr "" + + #: cp/decl.c:12529 cp/decl.c:12537 + #, fuzzy + msgid "`%D' must take exactly one argument" + msgstr "`%s' ¤Ï 0 ¤« 2 ¸Ä¤Î°ú¿ô¤·¤«¤È¤ê¤Þ¤»¤ó" + + #: cp/decl.c:12539 + #, fuzzy + msgid "`%D' must take exactly two arguments" + msgstr "`%s' ¤Ï 0 ¤« 2 ¸Ä¤Î°ú¿ô¤·¤«¤È¤ê¤Þ¤»¤ó" + + #: cp/decl.c:12547 + msgid "user-defined `%D' always evaluates both arguments" + msgstr "" + + #: cp/decl.c:12559 + msgid "`%D' should return by value" + msgstr "" + + #: cp/decl.c:12571 cp/decl.c:12574 + msgid "`%D' cannot have default arguments" + msgstr "" + + #: cp/decl.c:12667 + #, fuzzy + msgid "`%s %T' declares a new type at namespace scope" + msgstr "`%s %s' ¤Ï²¾°ú¿ô¥ê¥¹¥ÈÆâ¤ÇÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: cp/decl.c:12670 + msgid " names from dependent base classes are not visible to unqualified name lookup - to refer to the inherited type, say `%s %T::%T'" + msgstr "" + + #: cp/decl.c:12706 + msgid "using typedef-name `%D' after `%s'" + msgstr "" + + #: cp/decl.c:12709 + #, fuzzy + msgid "using template type parameter `%T' after `%s'" + msgstr "%d ÈÖÌܤΰú¿ô¤¬ `%s' ¤Î·¿¤È¸ß´¹À­¤¬¤¢¤ê¤Þ¤»¤ó" + + #: cp/decl.c:12791 + #, fuzzy + msgid "use of enum `%#D' without previous declaration" + msgstr "`%s' ¤Î¥»¥¯¥·¥ç¥ó¤ÏÁ°Êý¤Ç¤ËÀë¸À¤µ¤ì¤¿¤â¤Î¤È¾×ÆÍ¤·¤Þ¤¹" + + #: cp/decl.c:12901 + msgid "derived union `%T' invalid" + msgstr "" + + #: cp/decl.c:12945 + #, fuzzy + msgid "base type `%T' fails to be a struct or class type" + msgstr "`%s' ¤ò typedef ¤Þ¤¿¤ÏÁȤ߹þ¤ß·¿¤Ë¤Ç¤­¤Þ¤»¤ó" + + #: cp/decl.c:12957 + #, fuzzy + msgid "base class `%T' has incomplete type" + msgstr "Îΰè `%s' ¤ÏÉÔ´°Á´¤Ê·¿¤Ç¤¹" + + #: cp/decl.c:12965 + msgid "recursive type `%T' undefined" + msgstr "" + + #: cp/decl.c:12967 + #, fuzzy + msgid "duplicate base type `%T' invalid" + msgstr "½ÅÊ£¤·¤¿ case ¤ÎÃÍ" + + #: cp/decl.c:13078 + #, fuzzy + msgid "multiple definition of `%#T'" + msgstr "`%s' ¤¬ºÆÄêµÁ¤µ¤ì¤Þ¤·¤¿" + + #: cp/decl.c:13079 + #, fuzzy + msgid "previous definition here" + msgstr "`%s' ¤ÏÁ°¤Ë¤³¤³¤ÇÄêµÁ¤µ¤ì¤Þ¤·¤¿" + + #: cp/decl.c:13254 + #, fuzzy + msgid "enumerator value for `%D' not integer constant" + msgstr "`%s' ¤ÎÎóµóÃͤ¬À°¿ôÄê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: cp/decl.c:13274 + #, fuzzy + msgid "overflow in enumeration values at `%D'" + msgstr "ÎóµóÃͤ¬¥ª¡¼¥Ð¡¼¥Õ¥í¡¼" + + #: cp/decl.c:13363 + #, fuzzy + msgid "return type `%#T' is incomplete" + msgstr "Ìá¤êÃͤη¿¤¬ÉÔ´°Á´·¿¤Ç¤¹" + + #: cp/decl.c:13472 + #, fuzzy + msgid "semicolon missing after declaration of `%#T'" + msgstr "%s Àë¸À¤Î¸å¤í¤Î¥»¥ß¥³¥í¥ó¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: cp/decl.c:13493 + msgid "return type for `main' changed to `int'" + msgstr "`main' ¤Î return ·¿¤Ï `int' ¤ËÊѤ¨¤Þ¤·¤¿" + + #: cp/decl.c:13524 + #, fuzzy + msgid "`%D' implicitly declared before its definition" + msgstr "`%s' ¤Ï¤½¤ÎÄêµÁ¤è¤ê¤â¸å¤Ç inline Àë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: cp/decl.c:13546 cp/typeck.c:6663 + msgid "`operator=' should return a reference to `*this'" + msgstr "" + + #: cp/decl.c:13827 + #, fuzzy + msgid "parameter `%D' declared void" + msgstr "²¾°ú¿ô `%s' ¤¬ void ¤ÈÀë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: cp/decl.c:14190 + msgid "`%D' is already defined in class `%T'" + msgstr "" + + #: cp/decl.c:14341 + #, fuzzy + msgid "parser lost in parsing declaration of `%D'" + msgstr "`%s' ¤ÎÀë¸À¤Ç·¿¤¬¥Ç¥Õ¥©¥ë¥È¤Î `int' ¤È¤µ¤ì¤Þ¤·¤¿" + + #: cp/decl.c:14426 + #, fuzzy + msgid "static member function `%#D' declared with type qualifiers" + msgstr "¥Í¥¹¥È¤·¤¿´Ø¿ô `%s' ¤Ï `extern' ¤ËÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: cp/decl2.c:529 + #, c-format + msgid "-f%s is no longer supported" + msgstr "-f%s ¤Ï¤â¤Ï¤ä¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó" + + #: cp/decl2.c:535 + msgid "-fhandle-exceptions has been renamed to -fexceptions (and is now on by default)" + msgstr "-fhandle-exceptions ¤Ï -fexception ¤ËÊѹ¹¤µ¤ì¤Þ¤·¤¿(¤µ¤é¤Ë¥Ç¥Õ¥©¥ë¥È¤ÇÍ­¸ú¤Ç¤¹)" + + #: cp/decl2.c:561 + msgid "-fname-mangling-version is no longer supported" + msgstr "-fname-mangling-version ¤Ï¤â¤Ï¤ä¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó" + + #: cp/decl2.c:624 + msgid "-Wno-strict-prototypes is not supported in C++" + msgstr "-Wno-strict-prototypes ¤Ï C++ ¤Ç¤Ï¼õ¤±ÉÕ¤±¤é¤ì¤Þ¤»¤ó" + + #: cp/decl2.c:761 + #, fuzzy, c-format + msgid "duplicate type qualifiers in %s declaration" + msgstr "°ì¤Ä¤ÎÀë¸À¤ËÊ£¿ô¤Î·¿¤¬¤¢¤ê¤Þ¤¹" + + #: cp/decl2.c:800 + msgid "template `%#D' instantiated in file without #pragma interface" + msgstr "" + + #: cp/decl2.c:806 + msgid "template `%#D' defined in file without #pragma interface" + msgstr "" + + #: cp/decl2.c:963 + msgid "name missing for member function" + msgstr "¥á¥ó¥Ð´Ø¿ô¤Î̾Á°¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #. Something has gone very wrong. Assume we are mistakenly reducing + #. an expression instead of a declaration. + #: cp/decl2.c:1030 + msgid "parser may be lost: is there a '{' missing somewhere?" + msgstr "¹½Ê¸²òÀϴ郎Ì»Ҥˤʤ俤褦¤Ç¤¹: ¤É¤³¤«¤Ç '{' ¤ò˺¤ì¤Æ¤¤¤ë¤Î¤Ç¤Ï¡©" + + #: cp/decl2.c:1061 cp/decl2.c:1075 + msgid "ambiguous conversion for array subscript" + msgstr "ÇÛÎó¤Îź»ú¤ËÂФ¹¤ëÛ£Ëæ¤ÊÊÑ´¹" + + #: cp/decl2.c:1069 + #, fuzzy + msgid "invalid types `%T[%T]' for array subscript" + msgstr "ÇÛÎó¤Îź»ú¤ËÂФ¹¤ëÛ£Ëæ¤ÊÊÑ´¹" + + #: cp/decl2.c:1117 + msgid "type `%#T' argument given to `delete', expected pointer" + msgstr "" + + #: cp/decl2.c:1125 + msgid "anachronistic use of array size in vector delete" + msgstr "¥Ù¥¯¥È¥ë¤Î delete ¤ÇÇÛÎó¥µ¥¤¥º¤ò»È¤¦¤Î¤ÏÁ°»þÂåŪ¤Ç¤¹" + + #: cp/decl2.c:1135 + msgid "cannot delete a function. Only pointer-to-objects are valid arguments to `delete'" + msgstr "´Ø¿ô¤Ï delete ¤Ç¤­¤Þ¤»¤ó¡£ ¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¤À¤±¤¬ `delete' °ú¿ô¤È¤·¤ÆÍ­¸ú¤Ç¤¹" + + #: cp/decl2.c:1142 + #, fuzzy + msgid "deleting `%T' is undefined" + msgstr "`%s' ¤Ç¤Î±é»»¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤¤¤È»×¤ï¤ì¤Þ¤¹" + + #: cp/decl2.c:1150 + msgid "deleting array `%#D'" + msgstr "" + + #. 14.5.2.2 [temp.mem] + #. + #. A local class shall not have member templates. + #: cp/decl2.c:1197 + msgid "invalid declaration of member template `%#D' in local class" + msgstr "" + + #: cp/decl2.c:1206 + #, fuzzy + msgid "invalid use of `virtual' in template declaration of `%#D'" + msgstr "ÉÔ´°Á´¤Ê typedef `%s' ¤Î»ÈÍѤÏÉÔŬÀڤǤ¹" + + #: cp/decl2.c:1216 cp/pt.c:2558 + #, fuzzy + msgid "template declaration of `%#D'" + msgstr "`%s' ¤¬ºÆÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: cp/decl2.c:1266 + msgid "Java method '%D' has non-Java return type `%T'" + msgstr "" + + #: cp/decl2.c:1275 + msgid "Java method '%D' has non-Java parameter type `%T'" + msgstr "" + + #: cp/decl2.c:1371 + msgid "prototype for `%#D' does not match any in class `%T'" + msgstr "" + + #: cp/decl2.c:1373 + msgid "candidate%s: %+#D" + msgstr "" + + #: cp/decl2.c:1376 + #, fuzzy + msgid " %#D" + msgstr " ¹ç·× :" + + #: cp/decl2.c:1432 + msgid "initializer invalid for static member with constructor" + msgstr "¥³¥ó¥¹¥È¥é¥¯¥¿¤ÎÀÅŪ¥á¥ó¥Ð½é´ü²½»Ò¤Ï̵¸ú¤Ç¤¹" + + #: cp/decl2.c:1435 + msgid "(an out of class initialization is required)" + msgstr "(¥¯¥é¥¹³°¤Ç¤Î½é´ü²½¤òɬÍפȤ·¤Þ¤¹)" + + #: cp/decl2.c:1494 + #, fuzzy + msgid "invalid data member initialization" + msgstr "̵¸ú¤Ê `#pragma implementation'" + + #: cp/decl2.c:1497 + msgid "(use `=' to initialize static data members)" + msgstr "" + + #: cp/decl2.c:1537 + msgid "member `%D' conflicts with virtual function table field name" + msgstr "" + + #: cp/decl2.c:1557 + msgid "`%D' is already defined in `%T'" + msgstr "" + + #: cp/decl2.c:1608 + msgid "field initializer is not constant" + msgstr "¥Õ¥£¡¼¥ë¥É½é´üÀßÄê»Ò¤¬Äê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: cp/decl2.c:1631 + msgid "`asm' specifiers are not permitted on non-static data members" + msgstr "" + + #: cp/decl2.c:1683 + #, fuzzy + msgid "cannot declare `%D' to be a bit-field type" + msgstr "`::main' ¤ò template ¤È¤·¤Æ¤ÏÀë¸À¤Ç¤­¤Þ¤»¤ó" + + #: cp/decl2.c:1693 + #, fuzzy + msgid "cannot declare bit-field `%D' with function type" + msgstr "´Ø¿ô·¿¤ËÂФ·¤Æ new ¤òŬÍѤǤ­¤Þ¤»¤ó" + + #: cp/decl2.c:1700 + msgid "`%D' is already defined in the class %T" + msgstr "" + + #: cp/decl2.c:1709 + #, fuzzy + msgid "static member `%D' cannot be a bit-field" + msgstr "static `%s' ¤ò mutable ¤È¤·¤ÆÀë¸À¤Ç¤­¤Þ¤»¤ó" + + #: cp/decl2.c:1778 + #, fuzzy + msgid "initializer specified for non-member function `%D'" + msgstr "½é´ü²½»Ò¥ê¥¹¥È¤ÏÈó¥á¥ó¥Ð´Ø¿ô¤Ç¤Ï»È¤¨¤Þ¤»¤ó" + + #: cp/decl2.c:1782 + #, fuzzy + msgid "invalid initializer for virtual method `%D'" + msgstr "̵¸ú¤Ê¥Ó¥Ã¥ÈÎó½é´ü²½»Ò¤Ç¤¹" + + #: cp/decl2.c:1886 + msgid "anonymous struct not inside named type" + msgstr "̵̾¹½Â¤ÂΤ¬Ì¾Á°¤Ä¤­·¿¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤ó" + + #: cp/decl2.c:1982 + msgid "namespace-scope anonymous aggregates must be static" + msgstr "anonumous ̾Á°¶õ´Ö¤Î½¸¹çÂÎ¤Ï static ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: cp/decl2.c:1992 + msgid "anonymous aggregate with no members" + msgstr "̵̾¶¦ÍÑÂΤ˥á¥ó¥Ð¤¬¤¢¤ê¤Þ¤»¤ó" + + #: cp/decl2.c:2059 + #, fuzzy + msgid "`operator new' must return type `%T'" + msgstr "`operator delete' ¤ÎÌá¤ê·¿¤Ï `void' ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: cp/decl2.c:2067 + #, fuzzy + msgid "`operator new' takes type `size_t' (`%T') as first parameter" + msgstr "`operator new' ¤ÏÂè°ì°ú¿ô¤È¤·¤Æ `size_t' ¤ò¤È¤ê¤Þ¤¹" + + #: cp/decl2.c:2094 + #, fuzzy + msgid "`operator delete' must return type `%T'" + msgstr "`operator delete' ¤ÎÌá¤ê·¿¤Ï `void' ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: cp/decl2.c:2102 + #, fuzzy + msgid "`operator delete' takes type `%T' as first parameter" + msgstr "`operator delete' ¤ÏÂè°ì°ú¿ô¤È¤·¤Æ `void *' ·¿¤ò¤È¤ê¤Þ¤¹" + + #. Overflow occurred. That means there are at least 4 billion + #. initialization functions. + #: cp/decl2.c:2839 + msgid "too many initialization functions required" + msgstr "ɬÍפȤµ¤ì¤ë½é´ü²½´Ø¿ô¤Î¿ô¤¬Â¿¤¹¤®¤Þ¤¹" + + #: cp/decl2.c:3643 + msgid "use of old-style cast" + msgstr "¸Å¤¤¥¹¥¿¥¤¥ë¤Î¥­¥ã¥¹¥È¤ò»ÈÍѤ·¤Æ¤¤¤Þ¤¹" + + #: cp/decl2.c:4201 + #, fuzzy + msgid "use of `%D' is ambiguous" + msgstr "%s: ¥ª¥×¥·¥ç¥ó `%s' ¤Ï¤¢¤¤¤Þ¤¤¤Ç¤¹\n" + + #: cp/decl2.c:4202 + msgid " first declared as `%#D' here" + msgstr "" + + #: cp/decl2.c:4205 + msgid " also declared as `%#D' here" + msgstr "" + + #: cp/decl2.c:4220 + msgid "`%D' denotes an ambiguous type" + msgstr "" + + #: cp/decl2.c:4221 + #, fuzzy + msgid " first type here" + msgstr " ¤³¤³¤«¤é" + + #: cp/decl2.c:4222 + msgid " other type here" + msgstr "" + + #: cp/decl2.c:4319 + #, fuzzy + msgid "declaration of `%D' not in a namespace surrounding `%D'" + msgstr "`%s' ¤ÎÀë¸À¤Ë¤è¤ê `this' ¤Î¥á¥ó¥Ð¤¬Ê¤¤¤±£¤µ¤ì¤Þ¤¹" + + #: cp/decl2.c:4353 + msgid "`%D' should have been declared inside `%D'" + msgstr "" + + #: cp/decl2.c:4487 + #, fuzzy + msgid "`%D' is not a function," + msgstr "`%s' ¤ÏÄ̾ï¤Ï´Ø¿ô¤Ç¤¹" + + #: cp/decl2.c:4488 + #, fuzzy + msgid " conflict with `%D'" + msgstr "`%s' ¤Ï `-g%s' ¤È¶¥¹ç¤¹¤ë¤¿¤á̵»ë¤µ¤ì¤Þ¤·¤¿" + + #. The parser did not find it, so it's not there. + #: cp/decl2.c:4802 + #, fuzzy + msgid "unknown namespace `%D'" + msgstr "ÉÔÌÀ¤Ê #pragma namespace %s ¤Ç¤¹" + + #: cp/decl2.c:4836 cp/decl2.c:5097 + msgid "`%T' is not a namespace" + msgstr "" + + #: cp/decl2.c:4838 + msgid "`%D' is not a namespace" + msgstr "" + + #: cp/decl2.c:4847 + msgid "a using-declaration cannot specify a template-id. Try `using %D'" + msgstr "" + + #: cp/decl2.c:4861 + #, fuzzy + msgid "namespace `%D' not allowed in using-declaration" + msgstr "`%s' ¤ÏÀë¸À¤Î»Ï¤Þ¤ê¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: cp/decl2.c:4890 + #, fuzzy + msgid "`%D' not declared" + msgstr "`%s' ¤ÏÁ°¤Ë¤³¤³¤ÇÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: cp/decl2.c:4932 + msgid "`%D' is already declared in this scope" + msgstr "" + + #: cp/decl2.c:4959 + msgid "using declaration `%D' introduced ambiguous type `%T'" + msgstr "" + + #: cp/decl2.c:5050 + msgid "using-declaration for non-member at class scope" + msgstr "" + + #: cp/decl2.c:5056 + #, fuzzy + msgid "using-declaration for destructor" + msgstr "¥á¥½¥Ã¥É `%s' ¤ÎÀë¸À¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹¡£" + + #: cp/decl2.c:5062 + msgid "a using-declaration cannot specify a template-id. Try `using %T::%D'" + msgstr "" + + #: cp/decl2.c:5091 + #, fuzzy + msgid "namespace `%T' undeclared" + msgstr "²¾°ú¿ô `%s' ¤¬ void ¤ÈÀë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: cp/decl2.c:5120 + #, fuzzy + msgid "default argument missing for parameter %P of `%+#D'" + msgstr "²¾°ú¿ô¥ê¥¹¥È¤«¤é¤Î²¾°ú¿ô̾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: cp/decl2.c:5201 + msgid "extra qualification `%T::' on member `%D' ignored" + msgstr "" + + #: cp/decl2.c:5205 + #, fuzzy + msgid "`%T' does not have a nested type named `%D'" + msgstr "`%s' ¤Ï `%s' ¤Ë±þÅú¤·¤Þ¤»¤ó" + + #: cp/decl2.c:5207 + msgid "no file-scope type named `%D'" + msgstr "" + + #: cp/error.c:35 + #, c-format + msgid "`%s' not supported by %s" + msgstr "`%s' ¤Ï %s ¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó" + + #: cp/error.c:572 + #, c-format + msgid "" + msgstr "<̵̾ %s>" + + #: cp/error.c:833 + #, c-format + msgid "(static %s for %s)" + msgstr "(ÀÅŪ%s: %s ÍÑ)" + + #: cp/error.c:2457 + #, c-format + msgid "In %s `%s':" + msgstr "%s Æâ¤Î `%s':" + + #: cp/error.c:2512 + #, c-format + msgid "%s: In instantiation of `%s':\n" + msgstr "%s: `%s' ¤Î½é´ü²½:\n" + + #: cp/error.c:2536 + #, c-format + msgid "%s:%d: instantiated from `%s'\n" + msgstr "%s:%d: `%s' ¤«¤é¼ÂÂ⽤µ¤ì¤Þ¤·¤¿\n" + + #: cp/error.c:2541 + #, c-format + msgid "%s:%d: instantiated from here\n" + msgstr "%s:%d: ¤³¤³¤Ç¼ÂÂ⽤µ¤ì¤Þ¤·¤¿\n" + + #. damn ICE suppression + #: cp/error.c:2694 + #, c-format + msgid "unexpected letter `%c' in locate_error\n" + msgstr "" + + #. Can't throw a reference. + #: cp/except.c:245 + msgid "type `%T' is disallowed in Java `throw' or `catch'" + msgstr "" + + #: cp/except.c:256 + msgid "call to Java `catch' or `throw' with `jthrowable' undefined" + msgstr "Java `catch' ¤ä `throw' ¤¬¸Æ¤Ð¤ì¤Þ¤·¤¿¤¬¡¢`jthrowable' ¤Ï̤ÄêµÁ¤Ç¤¹" + + #. Thrown object must be a Throwable. + #: cp/except.c:263 + msgid "type `%T' is not derived from `java::lang::Throwable'" + msgstr "" + + #: cp/except.c:327 + msgid "mixing C++ and Java catches in a single translation unit" + msgstr "C++ ¤È Java ¤Î `catch' ¤ò°ì¤Ä¤ÎËÝÌõ¥æ¥Ë¥Ã¥È¤Ë¤Þ¤È¤á¤Þ¤¹" + + #: cp/except.c:558 + msgid "throwing NULL, which has integral, not pointer type" + msgstr "" + + #: cp/except.c:663 + msgid " in thrown expression" + msgstr " throw ¤µ¤ì¤¿¼°¤ÎÃæ" + + #: cp/except.c:775 + msgid "expression '%E' of abstract class type '%T' cannot be used in throw-expression" + msgstr "" + + #: cp/except.c:863 + msgid "exception of type `%T' will be caught" + msgstr "" + + #: cp/except.c:866 + msgid " by earlier handler for `%T'" + msgstr "" + + #: cp/except.c:887 + msgid "`...' handler must be the last handler for its try block" + msgstr "" + + #: cp/friend.c:155 + #, fuzzy + msgid "`%D' is already a friend of class `%T'" + msgstr "'%s' ¥¯¥é¥¹¤ò¸«¤Ä¤±¤ë¤Î¤Ë¼ºÇÔ¤·¤Þ¤·¤¿" + + #: cp/friend.c:157 + #, fuzzy + msgid "previous friend declaration of `%D'" + msgstr "Á°Êý¤Ç¤Î `%s' ¤ÎÀë¸À" + + #: cp/friend.c:197 + #, fuzzy + msgid "invalid type `%T' declared `friend'" + msgstr "ÊÑ¿ô `%s' ¤¬ `inline' ¤ÈÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #. [temp.friend] + #. + #. Friend declarations shall not declare partial + #. specializations. + #: cp/friend.c:209 + #, fuzzy + msgid "partial specialization `%T' declared `friend'" + msgstr "ÊÑ¿ô `%s' ¤¬ `inline' ¤ÈÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: cp/friend.c:221 + msgid "class `%T' is implicitly friends with itself" + msgstr "" + + #. template friend typename S::X; + #: cp/friend.c:239 + #, fuzzy + msgid "typename type `%#T' declared `friend'" + msgstr "²¾°ú¿ô `%s' ¤¬ void ¤ÈÀë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #. template friend class T; + #: cp/friend.c:245 + #, fuzzy + msgid "template parameter type `%T' declared `friend'" + msgstr "²¾°ú¿ô `%s' ¤¬ void ¤ÈÀë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #. template friend class A; where A is not a template + #: cp/friend.c:251 + #, fuzzy + msgid "`%#T' is not a template" + msgstr "¥Æ¥ó¥×¥ì¡¼¥ÈÆâ¤Ç `%s' ¤ò»ÈÍѤ·¤Æ¤¤¤Þ¤¹" + + #: cp/friend.c:268 + msgid "`%T' is already a friend of `%T'" + msgstr "" + + #: cp/friend.c:364 + msgid "member `%D' declared as friend before type `%T' defined" + msgstr "" + + #: cp/friend.c:419 + #, fuzzy + msgid "friend declaration `%#D' declares a non-template function" + msgstr "ÁȤ߹þ¤ß´Ø¿ô `%s' ¤ÏÈó´Ø¿ô¤È¤·¤ÆÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: cp/friend.c:422 + #, fuzzy + msgid "(if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) -Wno-non-template-friend disables this warning" + msgstr "¡Ê¤â¤·¤³¤ì¤¬¤¢¤Ê¤¿¤Î°Õ¿Þ¤·¤¿¤â¤Î¤Ç¤Ê¤±¤ì¤Ð¡¢´Ø¿ô¥Æ¥ó¥×¥ì¡¼¥È¤Ï´û¤ËÀë¸ÀºÑ¤Ç¤¢¤ë»ö¤ò³Îǧ¤·¡¢¤³¤³¤Î´Ø¿ô̾¤Î¸å¤í¤Ë <> ¤òÉÕ¤±Â­¤·¤Æ¤¯¤À¤µ¤¤¡Ë -Wno-non-template-friend ¤Ç¤³¤Î·Ù¹ðɽ¼¨¤ò̵¸ú¤Ë¤·¤Þ¤¹" + + #: cp/g++spec.c:198 java/jvspec.c:381 + #, c-format + msgid "argument to `%s' missing\n" + msgstr "`%s' ¤Ø¤Î°ú¿ô¤ò·ç¤¤¤Æ¤¤¤Þ¤¹\n" + + #: cp/init.c:285 + msgid "default-initialization of `%#D', which has reference type" + msgstr "" + + #: cp/init.c:290 + #, fuzzy + msgid "uninitialized reference member `%D'" + msgstr "¥á¥ó¥Ð `%s' ¤ËÂФ¹¤ë̵¸ú¤Ê½é´üÃÍ" + + #: cp/init.c:298 + msgid "initializer list treated as compound expression" + msgstr "½é´ü²½»Ò¥ê¥¹¥È¤ÏÊ£¹ç¼°¤È¤·¤Æ¼è¤ê°·¤ï¤ì¤Þ¤·¤¿" + + #: cp/init.c:410 + #, fuzzy + msgid "member initializers for `%#D'" + msgstr "(`%s' ¤Î½é´ü²½¤ÏÉÔ´°Á´¤Ç¤¹)" + + #: cp/init.c:412 + msgid " and `%#D'" + msgstr "" + + #: cp/init.c:413 + msgid " will be re-ordered to match declaration order" + msgstr " Àë¸À½ç¤È°ìÃפ¹¤ë¤è¤¦¤ËʤÓÂØ¤¨¤é¤ì¤Þ¤¹" + + #: cp/init.c:428 + #, fuzzy + msgid "multiple initializations given for member `%D'" + msgstr "¥á¥ó¥Ð `%s' ¤ËÂФ¹¤ë̵¸ú¤Ê½é´üÃÍ" + + #: cp/init.c:500 + #, fuzzy + msgid "initializations for multiple members of `%T'" + msgstr "²ÄÊÑÇÛÎó¥á¥ó¥Ð¤ò½é´ü²½¤·¤Æ¤¤¤Þ¤¹" + + #: cp/init.c:617 + #, fuzzy + msgid "base initializers for `%#T'" + msgstr "(`%s' ¤Î½é´ü²½¤ÏÉÔ´°Á´¤Ç¤¹)" + + #: cp/init.c:618 + msgid " and `%#T'" + msgstr "" + + #: cp/init.c:619 + msgid " will be re-ordered to match inheritance order" + msgstr " ÇÉÀ¸½ç¤È°ìÃפ¹¤ë¤è¤¦¤ËʤÙÂØ¤¨¤é¤ì¤Þ¤¹" + + #: cp/init.c:631 + #, fuzzy + msgid "base class `%T' already initialized" + msgstr "½é´ü²½¤¹¤Ù¤­´ðÄ쥯¥é¥¹¤¬¤¢¤ê¤Þ¤»¤ó" + + #: cp/init.c:702 + msgid "base class `%#T' should be explicitly initialized in the copy constructor" + msgstr "" + + #: cp/init.c:745 + msgid "`%D' should be initialized in the member initialization list" + msgstr "" + + #: cp/init.c:987 + msgid "class `%T' does not have any field named `%D'" + msgstr "" + + #: cp/init.c:993 + msgid "field `%#D' is static; the only point of initialization is its definition" + msgstr "" + + #: cp/init.c:1032 + #, fuzzy + msgid "unnamed initializer for `%T', which has no base classes" + msgstr "´ðÄ쥯¥é¥¹¤ò»ý¤Ä¥¯¥é¥¹¤Î¥ª¥Ö¥¸¥§¥¯¥ÈÍѤνé´ü²½»Ò¥ê¥¹¥È¤Ç¤¹" + + #: cp/init.c:1039 + msgid "unnamed initializer for `%T', which uses multiple inheritance" + msgstr "" + + #: cp/init.c:1068 + msgid "type `%D' is not a direct or virtual base of `%T'" + msgstr "" + + #: cp/init.c:1071 + msgid "type `%D' is not a direct base of `%T'" + msgstr "" + + #. Handle bad initializers like: + #. class COMPLEX { + #. public: + #. double re, im; + #. COMPLEX(double r = 0.0, double i = 0.0) {re = r; im = i;}; + #. ~COMPLEX() {}; + #. }; + #. + #. int main(int argc, char **argv) { + #. COMPLEX zees(1.0, 0.0)[10]; + #. } + #. + #: cp/init.c:1165 + msgid "bad array initializer" + msgstr "ÇÛÎó¤ÎÉÔÀµ¤Ê½é´ü²½" + + #: cp/init.c:1357 + #, fuzzy + msgid "`%T' is not an aggregate type" + msgstr "È󽸹çÂη¿¤ËÂФ·¤ÆÅ¬ÍѤµ¤ì¤¿ `sigof'" + + #: cp/init.c:1380 + #, fuzzy + msgid "`%T' fails to be an aggregate typedef" + msgstr "È󽸹çÂη¿¤ËÂФ·¤ÆÅ¬ÍѤµ¤ì¤¿ `sigof'" + + #: cp/init.c:1389 + #, fuzzy + msgid "type `%T' is of non-aggregate type" + msgstr "È󽸹çÂη¿¤ËÂФ·¤ÆÅ¬ÍѤµ¤ì¤¿ `sigof'" + + #: cp/init.c:1491 + msgid "cannot call destructor `%T::~%T' without object" + msgstr "" + + #: cp/init.c:1533 + #, fuzzy + msgid "invalid use of non-static field `%D'" + msgstr "ÉÔ´°Á´¤Ê typedef `%s' ¤Î»ÈÍѤÏÉÔŬÀڤǤ¹" + + #. We can get here when processing a bad default + #. argument, like: + #. struct S { int a; void f(int i = a); } + #: cp/init.c:1542 cp/method.c:194 + #, fuzzy + msgid "invalid use of member `%D'" + msgstr "¥á¥ó¥Ð `%s' ¤ËÂФ¹¤ë̵¸ú¤Ê½é´üÃÍ" + + #: cp/init.c:1552 + #, fuzzy + msgid "no method `%T::%D'" + msgstr "¥á¥½¥Ã¥É `%s' Æâ:" + + #: cp/init.c:1645 + msgid "incomplete type `%T' does not have member `%D'" + msgstr "" + + #: cp/init.c:1714 + #, fuzzy + msgid "`%D' is not a member of type `%T'" + msgstr "%s ¤Ë `%s' ¤È¤¤¤¦Ì¾Á°¤Î¥á¥ó¥Ð¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: cp/init.c:1733 + #, fuzzy + msgid "illegal pointer to bit-field `%D'" + msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É `%s' ¤ÎÉý¤¬Éé¤Î¿ô¤Ç¤¹" + + #: cp/init.c:1772 + msgid "object missing in use of pointer-to-member construct" + msgstr "¥á¥ó¥Ð¤Ø¤Î¥Ý¥¤¥ó¥¿¹½ÃۤλÈÍѤǥª¥Ö¥¸¥§¥¯¥È¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: cp/init.c:1812 + msgid "member `%D' is non-static but referenced as a static member" + msgstr "" + + #: cp/init.c:1814 cp/typeck.c:3154 cp/typeck.c:3262 + msgid "at this point in file" + msgstr "¥Õ¥¡¥¤¥ë¤Î¤³¤Î°ÌÃÖ" + + #: cp/init.c:1862 cp/typeck.c:2949 + #, fuzzy, c-format + msgid "object missing in `%E'" + msgstr "`%s' ¤Ç¤ÎÇÛÎó¥µ¥¤¥º¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: cp/init.c:1994 + msgid "new of array type fails to specify size" + msgstr "ÇÛÎ󷿤Πnew ¤Ï¥µ¥¤¥º¤Î»ØÄê¤Ë¼ºÇÔ¤·¤Þ¤¹" + + #: cp/init.c:2005 + msgid "size in array new must have integral type" + msgstr "ÇÛÎó new ¤Ç¤Î¥µ¥¤¥º¤Ï´°Á´¤Ê·¿¤ò»ý¤¿¤Í¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: cp/init.c:2011 + msgid "zero size array reserves no space" + msgstr "¥µ¥¤¥º¥¼¥í¤ÎÇÛÎó¤Ï¶õ´Ö¤ò³ÎÊݤ·¤Þ¤»¤ó" + + #: cp/init.c:2076 + msgid "new cannot be applied to a reference type" + msgstr "»²¾È·¿¤ËÂФ·¤Æ new ¤òŬÍѤǤ­¤Þ¤»¤ó" + + #: cp/init.c:2082 + msgid "new cannot be applied to a function type" + msgstr "´Ø¿ô·¿¤ËÂФ·¤Æ new ¤òŬÍѤǤ­¤Þ¤»¤ó" + + #: cp/init.c:2129 + msgid "call to Java constructor, while `jclass' undefined" + msgstr "Java ¥³¥ó¥¹¥È¥é¥¯¥¿¤¬¸Æ¤Ð¤ì¤Þ¤·¤¿¤¬¡¢`jclass' ¤Ï̤ÄêµÁ¤Ç¤¹" + + #: cp/init.c:2145 + #, fuzzy + msgid "can't find class$" + msgstr "class$ ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó" + + #: cp/init.c:2258 + msgid "invalid type `void' for new" + msgstr "new ¤ËÂФ·¤ÆÌµ¸ú¤Ê·¿¤Ç¤¢¤ë `void'" + + #: cp/init.c:2310 + #, c-format + msgid "call to Java constructor with `%s' undefined" + msgstr "Java ¥³¥ó¥¹¥È¥é¥¯¥¿¤¬¸Æ¤Ð¤ì¤Þ¤·¤¿¤¬¡¢`%s' ¤Ï̤ÄêµÁ¤Ç¤¹" + + #: cp/init.c:2419 + #, fuzzy + msgid "ISO C++ forbids initialization in array new" + msgstr "ISO C++ ¤Ï new ¼°¤Î½é´ü²½¤Ç¤Î `=' ¤ò¶Ø¤¸¤Þ¤¹" + + #: cp/init.c:2437 cp/typeck2.c:383 cp/typeck2.c:1227 + msgid "initializer list being treated as compound expression" + msgstr "½é´ü²½»Ò¥ê¥¹¥È¤¬Ê£¹ç¼°¤È¤·¤Æ¼è¤ê°·¤ï¤ì¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹" + + #: cp/init.c:2443 + msgid "ISO C++ forbids aggregate initializer to new" + msgstr "ISO C++ ¤Ï new ¤Ø¤Î½¸¹çÂνé´ü²½»Ò¤ò¶Ø¤¸¤Þ¤¹" + + #: cp/init.c:2518 + #, fuzzy + msgid "uninitialized const in `new' of `%#T'" + msgstr "½é´ü²½»Ò¤Ï `%s' ¤Î¥µ¥¤¥º¤ÎÆÃÄê¤Ë¼ºÇÔ¤·¤Þ¤·¤¿" + + #: cp/init.c:2882 + msgid "initializer ends prematurely" + msgstr "½é´üÀßÄê»Ò¤ÎËöÈø¤¬ËÜÍè¤è¤êÁ᤯½Ð¸½¤·¤Þ¤·¤¿" + + #: cp/init.c:2952 + msgid "cannot initialize multi-dimensional array with initializer" + msgstr "¿¼¡¸µÇÛÎó¤Ï½é´ü²½»Ò¤Ç½é´ü²½¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó" + + #: cp/init.c:3127 + msgid "unknown array size in delete" + msgstr "delete ¤Ç¤ÎÇÛÎó¥µ¥¤¥º¤¬ÉÔÌÀ¤Ç¤¹" + + #: cp/init.c:3392 + msgid "type to vector delete is neither pointer or array type" + msgstr "¥Ù¥¯¥È¥ë·¿¤Î delete ¤Ç¤¹¤¬¡¢¥Ý¥¤¥ó¥¿¤Ç¤âÇÛÎ󷿤Ǥ⤢¤ê¤Þ¤»¤ó" + + #: cp/lang-options.h:29 + msgid "Do not obey access control semantics" + msgstr "¥¢¥¯¥»¥¹À©¸æ¤Î°ÕÌ£¤Ë½¾¤ï¤Ê¤¤" + + #: cp/lang-options.h:31 + msgid "Change when template instances are emitted" + msgstr "¥Æ¥ó¥×¥ì¡¼¥È¥¤¥ó¥¹¥¿¥ó¥¹¤¬Á÷½Ð¤µ¤ì¤¿»þ¤ËÊѹ¹¤¹¤ë" + + #: cp/lang-options.h:36 + msgid "Check the return value of new" + msgstr "new ¤ÎÌá¤êÃͤò¸¡ºº¤¹¤ë" + + #: cp/lang-options.h:39 + msgid "Reduce size of object files" + msgstr "¥ª¥Ö¥¸¥§¥¯¥È¥Õ¥¡¥¤¥ë¤Î¥µ¥¤¥º¤ò¾®¤µ¤¯¤¹¤ë" + + #: cp/lang-options.h:43 + msgid "Make string literals `char[]' instead of `const char[]'" + msgstr "ʸ»úÎó¥ê¥Æ¥é¥ë¤ò `const char[]' ¤ÎÂå¤ï¤ê¤Ë `char[]' ¤È¤¹¤ë" + + #: cp/lang-options.h:46 + msgid "Dump the entire translation unit to a file" + msgstr "ËÝÌõñ°ÌÁ´ÂΤò¥Õ¥¡¥¤¥ë¤Ë¥À¥ó¥×¤¹¤ë" + + #: cp/lang-options.h:48 + msgid "Do not inline member functions by default" + msgstr "¥á¥ó¥Ð´Ø¿ô¤ò¥Ç¥Õ¥©¥ë¥È¤Ç¥¤¥ó¥é¥¤¥ó¤È¤·¤Ê¤¤" + + #: cp/lang-options.h:51 + msgid "Do not generate run time type descriptor information" + msgstr "¼Â¹Ô»þ·¿µ­½Ò¾ðÊó¤òÀ¸À®¤·¤Ê¤¤" + + #: cp/lang-options.h:56 + msgid "Do not generate code to check exception specifications" + msgstr "Îã³°»ÅÍͤθ¡ºº¤ò¤¹¤ë¥³¡¼¥É¤òÀ¸À®¤·¤Ê¤¤" + + #: cp/lang-options.h:61 + msgid "Scope of for-init-statement vars extends outside" + msgstr "for ½é´ü²½Ê¸¤ÎÊÑ¿ô¤ò¥¹¥³¡¼¥×³°¤Ë³ÈÂ礹¤ë" + + #: cp/lang-options.h:64 + #, fuzzy + msgid "Do not recognize GNU defined keywords" + msgstr "GNU ÄêµÁ¤ÎͽÌó¸ì¤òǧ¼±¤µ¤»¤Ê¤¤" + + #: cp/lang-options.h:68 + msgid "Enable support for huge objects" + msgstr "Â礭¤Ê¥ª¥Ö¥¸¥§¥¯¥È¤Î¥µ¥Ý¡¼¥È" + + #: cp/lang-options.h:72 + msgid "Export functions even if they can be inlined" + msgstr "¥¤¥ó¥é¥¤¥ó¤Ë¤Ç¤­¤ë´Ø¿ô¤Ç¤â export ¤¹¤ë" + + #: cp/lang-options.h:75 + msgid "Only emit explicit template instatiations" + msgstr "ÌÀ¼¨Åª¤Ê¥Æ¥ó¥×¥ì¡¼¥È¼ÂÂβ½¤Î¤ß¤òÀ¸À®¤¹¤ë" + + #: cp/lang-options.h:78 + msgid "Only emit explicit instatiations of inline templates" + msgstr "¥¤¥ó¥é¥¤¥ó¥Æ¥ó¥×¥ì¡¼¥È¤ÎÌÀ¼¨Åª¤Ê¼ÂÂβ½¤Î¤ß¤òÀ¸À®¤¹¤ë" + + #: cp/lang-options.h:84 + msgid "Don't pedwarn about uses of Microsoft extensions" + msgstr "Microsoft ³ÈÄ¥¤ÎÍøÍѤ˴ؤ·¤Æ pedantic ·Ù¹ð¤ò¹Ô¤ï¤Ê¤¤" + + #: cp/lang-options.h:87 + #, fuzzy + msgid "Recognize and/bitand/bitor/compl/not/or/xor" + msgstr "and/bitand/bitor/compl/not/or/xor ¤òǧ¼±¤¹¤ë" + + #: cp/lang-options.h:91 + msgid "Disable optional diagnostics" + msgstr "¥ª¥×¥·¥ç¥ó¤Î¿ÇÃÇ¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤·¤Ê¤¤" + + #: cp/lang-options.h:93 + msgid "Downgrade conformance errors to warnings" + msgstr "µ¬³ÊŬ¹çÀ­¥¨¥é¡¼¤ò·Ù¹ð¤Ë³Ê²¼¤²¤¹¤ë" + + #: cp/lang-options.h:96 + msgid "Enable automatic template instantiation" + msgstr "¼«Æ°¥Æ¥ó¥×¥ì¡¼¥È¼ÂÂ⽤òÍ­¸ú¤Ë¤¹¤ë" + + #: cp/lang-options.h:101 + msgid "Display statistics accumulated during compilation" + msgstr "¥³¥ó¥Ñ¥¤¥ëÃæ¤ËÃßÀѤµ¤ì¤¿Åý·×¾ðÊó¤òɽ¼¨¤¹¤ë" + + #: cp/lang-options.h:104 + msgid "Specify maximum template instantiation depth" + msgstr "¥Æ¥ó¥×¥ì¡¼¥È¼ÂÂβ½¤Î¿¼¤µ¤ÎºÇÂçÃͤò»ØÄꤹ¤ë" + + #: cp/lang-options.h:106 + #, fuzzy + msgid "Use __cxa_atexit to register destructors" + msgstr "¥Ç¥¹¥È¥é¥¯¥¿¤ÎÅÐÏ¿¤Ë __cxa_atexit ¤òÍøÍѤ¹¤ë" + + #: cp/lang-options.h:109 + msgid "Discard unused virtual functions" + msgstr "»È¤ï¤ì¤Ê¤¤²¾ÁÛ´Ø¿ô¤òÀÚ¤ê¼Î¤Æ¤ë" + + #: cp/lang-options.h:112 + msgid "Implement vtables using thunks" + msgstr "thunk ¤ò»È¤Ã¤Æ vtable ¤ò¼ÂÁõ¤¹¤ë" + + #: cp/lang-options.h:115 + msgid "Emit common-like symbols as weak symbols" + msgstr "¥³¥â¥ó¥·¥ó¥Ü¥ë¤ò¥¦¥£¡¼¥¯¥·¥ó¥Ü¥ë¤ÎÍͤËÀ¸À®¤¹¤ë" + + #: cp/lang-options.h:118 + msgid "Emit cross referencing information" + msgstr "Áê¸ß»²¾È¾ðÊó¤òÀ¸À®¤¹¤ë" + + #: cp/lang-options.h:122 + msgid "Warn about inconsistent return types" + msgstr "Ìá¤êÃͤη¿¤È°ìÃפ·¤Ê¤¤¤â¤Î¤Ë¤Ä¤¤¤Æ·Ù¹ð¤¹¤ë" + + #: cp/lang-options.h:125 + msgid "Warn about overloaded virtual function names" + msgstr "¥ª¡¼¥Ð¡¼¥í¡¼¥É¤µ¤ì¤¿²¾ÁÛ´Ø¿ô̾¤Ë¤Ä¤¤¤Æ·Ù¹ð¤¹¤ë" + + #: cp/lang-options.h:129 + msgid "Don't warn when all ctors/dtors are private" + msgstr "Á´¤Æ¤Î¥³¥ó¥¹¥È¥é¥¯¥¿/¥Ç¥¹¥È¥é¥¯¥¿¤¬ private ¤Ç¤â·Ù¹ð¤·¤Ê¤¤" + + #: cp/lang-options.h:131 + msgid "Warn about non virtual destructors" + msgstr "Èó²¾Áۥǥ¹¥È¥é¥¯¥¿¤Ë¤Ä¤¤¤Æ·Ù¹ð¤¹¤ë" + + #: cp/lang-options.h:134 + msgid "Warn when a function is declared extern, then inline" + msgstr "´Ø¿ô¤¬ extern Àë¸À¤µ¤ì¤¿¸å¡¢inline ¤È¤µ¤ì¤¿¾ì¹ç¤Ë·Ù¹ð¤¹¤ë" + + #: cp/lang-options.h:137 + msgid "Warn when the compiler reorders code" + msgstr "¥³¥ó¥Ñ¥¤¥é¤¬¥³¡¼¥É¤òʤÙÂØ¤¨¤ë¤È¤­¤Ë·Ù¹ð¤¹¤ë" + + #: cp/lang-options.h:140 + #, fuzzy + msgid "Warn when synthesis behavior differs from Cfront" + msgstr "¹çÀ®¤Î¿¶¤ëÉñ¤¤¤¬ Cfront ¤È°Û¤Ê¤ë¾ì¹ç¤Ë·Ù¹ð¤¹¤ë" + + #: cp/lang-options.h:144 + msgid "Don't warn when type converting pointers to member functions" + msgstr "¥Ý¥¤¥ó¥¿¤«¤é¥á¥ó¥Ð´Ø¿ô¤Ø¤Î·¿ÊÑ´¹¤Î¾ì¹ç¤Ç¤â·Ù¹ð¤·¤Ê¤¤" + + #: cp/lang-options.h:146 + msgid "Warn about violations of Effective C++ style rules" + msgstr "Effective C++ ¼°¤Î»Ø¿Ë¤«¤é¤Ï¤º¤ì¤ë¤â¤Î¤Ë¤Ä¤¤¤Æ·Ù¹ð¤¹¤ë" + + #: cp/lang-options.h:149 + msgid "Warn when overload promotes from unsigned to signed" + msgstr "¥ª¡¼¥Ð¡¼¥í¡¼¥É¤¬Éä¹ç̵¤·¤«¤éÉä¹çÉÕ¤­¤Ë³Ê¾å¤²¤È¤Ê¤ë¾ì¹ç¤Ë·Ù¹ð¤¹¤ë" + + #: cp/lang-options.h:152 + msgid "Warn if a C style cast is used in a program" + msgstr "C ¼°¤Î¥­¥ã¥¹¥È¤¬¥×¥í¥°¥é¥à¤Ç»È¤ï¤ì¤¿¤é·Ù¹ð¤¹¤ë" + + #: cp/lang-options.h:156 + msgid "Don't warn when non-templatized friend functions are declared within a template" + msgstr "template Æâ¤ÇÈó template ¤Î friend ´Ø¿ô¤¬Àë¸À¤µ¤ì¤¿¾ì¹ç¤Ç¤â·Ù¹ð¤·¤Ê¤¤" + + #: cp/lang-options.h:159 + msgid "Don't announce deprecation of compiler features" + msgstr "¿ä¾©¤µ¤ì¤Ê¤¤¥³¥ó¥Ñ¥¤¥é¤Îµ¡Ç½¤ò¹ðÃΤ·¤Ê¤¤" + + #: cp/lex.c:144 + msgid "type name expected before `*'" + msgstr "`*' ¤ÎÁ°¤Ë·¿¤Î̾Á°¤¬¤¢¤ë¤Ù¤­¤Ç¤¹" + + #: cp/lex.c:166 + msgid "cannot declare references to references" + msgstr "»²¾È¤ò»²¾È¤È¤·¤ÆÀë¸À¤Ç¤­¤Þ¤»¤ó" + + #: cp/lex.c:171 + msgid "cannot declare pointers to references" + msgstr "¥Ý¥¤¥ó¥¿¤ò»²¾È¤È¤·¤ÆÀë¸À¤Ç¤­¤Þ¤»¤ó" + + #: cp/lex.c:175 + msgid "type name expected before `&'" + msgstr "`&' ¤ÎÁ°¤Ë·¿¤Î̾Á°¤¬¤¢¤ë¤Ù¤­¤Ç¤¹" + + #: cp/lex.c:1000 + #, c-format + msgid "semicolon missing after %s declaration" + msgstr "%s Àë¸À¤Î¸å¤í¤Î¥»¥ß¥³¥í¥ó¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: cp/lex.c:1003 + #, fuzzy + msgid "semicolon missing after declaration of `%T'" + msgstr "%s Àë¸À¤Î¸å¤í¤Î¥»¥ß¥³¥í¥ó¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: cp/lex.c:1051 + #, c-format + msgid "junk at end of #pragma %s" + msgstr "#pragma %s ¤ÎËöÈø¤Ë¥´¥ß" + + #: cp/lex.c:1058 + #, c-format + msgid "invalid #pragma %s" + msgstr "̵¸ú¤Ê #pragma %s ¤Ç¤¹" + + #: cp/lex.c:1067 + #, fuzzy + msgid "#pragma vtable no longer supported" + msgstr "--driver ¤ÏºÇÁ᥵¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó" + + #: cp/lex.c:1144 + #, c-format + msgid "#pragma implementation for %s appears after file is included" + msgstr "%s ¤Ø¤Î #pragma implementation ¤Ï¥Õ¥¡¥¤¥ë¤¬ include ¤µ¤ì¤¿¸å¤Ç½Ð¸½¤·¤Þ¤·¤¿" + + #: cp/lex.c:1169 + msgid "junk at end of #pragma GCC java_exceptions" + msgstr "#pragma GCC java_exceptions ¤ÎËöÈø¤Ë¥´¥ß" + + #: cp/lex.c:1251 + #, fuzzy + msgid "`%D' not defined" + msgstr "\"%s\" ¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: cp/lex.c:1256 + #, fuzzy + msgid "`%D' was not declared in this scope" + msgstr "`%s' ¤¬Àë¸À¤µ¤ì¤Æ¤¤¤Þ¤»¤ó (¤³¤Î´Ø¿ôÆâ¤ÇºÇ½é¤ËÍøÍÑ)" + + #: cp/lex.c:1266 + #, fuzzy + msgid "`%D' undeclared (first use this function)" + msgstr "`%s' ¤¬Àë¸À¤µ¤ì¤Æ¤¤¤Þ¤»¤ó (¤³¤Î´Ø¿ôÆâ¤ÇºÇ½é¤ËÍøÍÑ)" + + #: cp/lex.c:1270 + msgid "(Each undeclared identifier is reported only once for each function it appears in.)" + msgstr "(̤Àë¸ÀÊÑ¿ô¤Ë¤Ä¤¤¤Æ¤Ï¡¢¤½¤ì¤¬´Ø¿ôÆâ¤ÇºÇ½é¤Ë¸½¤ï¤ì¤¿»þ¤À¤±Êó¹ð¤µ¤ì¤Þ¤¹¡£)" + + #: cp/lex.c:1293 + #, c-format + msgid "name lookup of `%s' changed" + msgstr "`%s' ¤Î̾Á°°ú¤­¤ÏÊѹ¹¤µ¤ì¤Þ¤·¤¿" + + #: cp/lex.c:1295 + msgid " matches this `%D' under ISO standard rules" + msgstr "" + + #: cp/lex.c:1297 + msgid " matches this `%D' under old rules" + msgstr "" + + #: cp/lex.c:1307 cp/lex.c:1314 + #, c-format + msgid "name lookup of `%s' changed for new ISO `for' scoping" + msgstr "`%s' ¤Î̾Á°°ú¤­¤Ï¿·¤¿¤Ê ISO `for' ¥¹¥³¡¼¥×¤ËÊѤï¤ê¤Þ¤·¤¿" + + #: cp/lex.c:1309 + msgid " cannot use obsolete binding at `%D' because it has a destructor" + msgstr "" + + #: cp/lex.c:1316 + msgid " using obsolete binding at `%D'" + msgstr "" + + #: cp/lex.c:1381 + #, fuzzy + msgid "`::%D' undeclared (first use here)" + msgstr "`%s' ¤¬Àë¸À¤µ¤ì¤Æ¤¤¤Þ¤»¤ó (¤³¤Î´Ø¿ôÆâ¤ÇºÇ½é¤ËÍøÍÑ)" + + #: cp/mangle.c:1892 + msgid "real-valued template parameters when cross-compiling" + msgstr "¥¯¥í¥¹¥³¥ó¥Ñ¥¤¥ë»þ¤Î¼Â¿ôÃͥƥó¥×¥ì¡¼¥È²¾°ú¿ô" + + #: cp/method.c:166 + msgid "methods cannot be converted to function pointers" + msgstr "¥á¥½¥Ã¥É¤Ï´Ø¿ô¥Ý¥¤¥ó¥¿¤ËÊÑ´¹¤Ç¤­¤Þ¤»¤ó" + + #: cp/method.c:171 + #, c-format + msgid "ambiguous request for method pointer `%s'" + msgstr "¥á¥½¥Ã¥É¥Ý¥¤¥ó¥¿ `%s' ¤Ø¤ÎÍ×µá¤¬Û£Ëæ¤Ç¤¹" + + #: cp/method.c:188 + #, fuzzy + msgid "invalid use of member `%D' in static member function" + msgstr "Èó¥á¥ó¥Ð´Ø¿ô¤Ç¤Î `this' ¤Î»ÈÍѤÏ̵¸ú¤Ç¤¹" + + #: cp/method.c:236 + msgid "use of namespace `%D' as expression" + msgstr "" + + #: cp/method.c:241 + msgid "use of class template `%T' as expression" + msgstr "" + + #: cp/method.c:254 + #, c-format + msgid "use of %s from containing function" + msgstr "" + + #: cp/method.c:257 + #, fuzzy + msgid " `%#D' declared here" + msgstr "`%s' ¤ÏÁ°¤Ë¤³¤³¤ÇÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: cp/method.c:275 + #, fuzzy + msgid "request for member `%D' is ambiguous in multiple inheritance lattice" + msgstr "Í׵ᤵ¤ì¤¿¥á¥ó¥Ð `%s' ¤Ï¿½Å·Ñ¾µ¥°¥é¥Õ¤ÎÃæ¤ÇÛ£Ëæ¤Ç¤¹" + + #: cp/method.c:328 + msgid "implementation-reserved name `%D' used" + msgstr "" + + #: cp/method.c:448 + msgid "generic thunk code fails for method `%#D' which uses `...'" + msgstr "" + + #: cp/method.c:678 + msgid "non-static const member `%#D', can't use default assignment operator" + msgstr "" + + #: cp/method.c:683 + msgid "non-static reference member `%#D', can't use default assignment operator" + msgstr "" + + #: parse.y:501 + msgid "keyword `export' not implemented, and will be ignored" + msgstr "" + + #: parse.y:605 + msgid "use of linkage spec `%D' is different from previous spec `%D'" + msgstr "" + + #: parse.y:677 + msgid "invalid default template argument" + msgstr "̵¸ú¤Ê¥Ç¥Õ¥©¥ë¥È¥Æ¥ó¥×¥ì¡¼¥È°ú¿ô" + + #: parse.y:901 + msgid "only constructors take base initializers" + msgstr "¥³¥ó¥¹¥È¥é¥¯¥¿¤·¤«´ðÄì½é´ü²½»Ò¥ê¥¹¥È¤ò¤È¤ê¤Þ¤»¤ó" + + #: parse.y:903 + msgid "no base or member initializers given following ':'" + msgstr "´ðÄì¤ä¥á¥ó¥Ð½é´ü²½»Ò¥ê¥¹¥È¤¬ ':' ¤Î¸å¤Ë³¤¤¤Æ¤¤¤Þ¤»¤ó" + + #: parse.y:945 parse.y:951 + msgid "anachronistic old style base class initializer" + msgstr "Á°»þÂåŪ¤Ê¸Å¤¤¥¹¥¿¥¤¥ë¤Î´ðÄ쥯¥é¥¹½é´ü²½»Ò¤Ç¤¹" + + #. Handle `Class>' without space in the `>>' + #: parse.y:1073 + msgid "`>>' should be `> >' in template class name" + msgstr "`>>' ¤Ï¥Æ¥ó¥×¥ì¡¼¥È¥¯¥é¥¹Ì¾¤Ï `> >' ¤È¤¹¤Ù¤­¤Ç¤¹" + + #: parse.y:1111 + msgid "use of template qualifier outside template" + msgstr "" + + #: parse.y:1140 parse.y:1149 + #, c-format + msgid "ISO C++ forbids an empty condition for `%s'" + msgstr "ISO C++ ¤Ï `%s' ¤ËÂФ¹¤ë¶õ¤Î¾ò·ï¤ò¶Ø¤¸¤Þ¤¹" + + #: parse.y:1172 + #, fuzzy + msgid "definition of class `%T' in condition" + msgstr "%s: ´Ø¿ô `%s' ¤ÎÄêµÁ¤¬ÊÑ´¹¤µ¤ì¤Æ¤¤¤Þ¤»¤ó\n" + + #: parse.y:1174 + #, fuzzy + msgid "definition of enum `%T' in condition" + msgstr "%s: ´Ø¿ô `%s' ¤ÎÄêµÁ¤¬ÊÑ´¹¤µ¤ì¤Æ¤¤¤Þ¤»¤ó\n" + + #: parse.y:1185 + #, fuzzy + msgid "definition of array `%#D' in condition" + msgstr "`%c%s' ¤Î¥á¥½¥Ã¥ÉÄêµÁ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó" + + #: parse.y:1294 + msgid "old style placement syntax, use () instead" + msgstr "" + + #: parse.y:1305 + #, fuzzy + msgid "`%T' is not a valid expression" + msgstr "\"%s\" ¤ÏÀµ¾ï¤Ê¥Õ¥¡¥¤¥ë̾¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: parse.y:1316 + msgid "ISO C++ forbids initialization of new expression with `='" + msgstr "ISO C++ ¤Ï new ¼°¤Î½é´ü²½¤Ç¤Î `=' ¤ò¶Ø¤¸¤Þ¤¹" + + #: parse.y:1347 + msgid "ISO C++ forbids compound literals" + msgstr "ISO C++ ¤ÏÊ£¹ç¥ê¥Æ¥é¥ë¤ò¶Ø¤¸¤Þ¤¹" + + #: parse.y:1588 + msgid "ISO C++ forbids braced-groups within expressions" + msgstr "ISO C++ ¤Ï¥Ö¥ì¡¼¥¹¤Ç¤Þ¤È¤á¤é¤ì¤¿¼°¤ò¶Ø¤¸¤Þ¤¹" + + #: parse.y:1994 parse.y:2009 + msgid "sigof type specifier" + msgstr "·¿»ØÄê»Ò¤Î sigof ¤Ç¤¹" + + #: parse.y:1999 + msgid "`sigof' applied to non-aggregate expression" + msgstr "È󽸹çÂμ°¤ËÂФ·¤ÆÅ¬ÍѤµ¤ì¤¿ `sigof'" + + #: parse.y:2014 + msgid "`sigof' applied to non-aggregate type" + msgstr "È󽸹çÂη¿¤ËÂФ·¤ÆÅ¬ÍѤµ¤ì¤¿ `sigof'" + + #: parse.y:2278 + msgid "using `typename' outside of template" + msgstr "" + + #: parse.y:2322 + #, fuzzy + msgid "%T is not a class type" + msgstr "¥¯¥é¥¹¥¿¥¤¥×¹à¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: parse.y:2333 + msgid "base clause without member specification for `%#T'" + msgstr "" + + #: parse.y:2354 + #, c-format + msgid "storage class specifier `%s' not allowed after struct or class" + msgstr "µ­²±¥¯¥é¥¹»ØÄê»Ò `%s' ¤Ï struct ¤ä class ¤Î¸å¤Ë¤Ï»È¤¨¤Þ¤»¤ó" + + #: parse.y:2356 + #, c-format + msgid "type specifier `%s' not allowed after struct or class" + msgstr "·¿»ØÄê»Ò `%s' ¤Ï struct ¤ä class ¤Î¸å¤Ë¤Ï»È¤¨¤Þ¤»¤ó" + + #: parse.y:2358 + #, c-format + msgid "type qualifier `%s' not allowed after struct or class" + msgstr "·¿½¤¾þ»Ò `%s' ¤Ï struct ¤ä class ¤Î¸å¤Ë¤Ï»È¤¨¤Þ¤»¤ó" + + #: parse.y:2360 + msgid "no body nor ';' separates two class, struct or union declarations" + msgstr "ËÜÂΤ¬¤Ê¤¯¡¢class, struct °¿¤¤¤Ï union Àë¸À¤ò¶èÀÚ¤ë ';' ¤â¤¢¤ê¤Þ¤»¤ó" + + #: parse.y:2452 + #, fuzzy + msgid "`union' tag used in declaring `%#T'" + msgstr "`%s' ¤ÎÀë¸À¤Ë¤ª¤¤¤ÆÊ£¿ô¤ÎÊݸ¥¯¥é¥¹" + + #: parse.y:2453 + msgid "non-`union' tag used in declaring `%#T'" + msgstr "" + + #: parse.y:2527 parse.y:2542 + msgid "`%D' access" + msgstr "" + + #: parse.y:2532 + msgid "multiple access specifiers" + msgstr "½ÅÊ£¤¹¤ë¥¢¥¯¥»¥¹»ØÄê»Ò" + + #: parse.y:2550 + msgid "multiple `virtual' specifiers" + msgstr "½ÅÊ£¤¹¤ë `virtual' »ØÄê»Ò" + + #: parse.y:2587 + msgid "missing ';' before right brace" + msgstr "±¦Â¦¥Ö¥ì¡¼¥¹¤ÎÁ°¤Î ';' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: parse.y:2807 + msgid "ISO C++ forbids array dimensions with parenthesized type in new" + msgstr "ISO C++ ¤Ï new Ãæ¤Ç¤Ï¡¢³ç¸Ì¤Î¤Ä¤¤¤¿ÇÛÎ󼡸µ¤ò¶Ø¤¸¤Þ¤¹" + + #: parse.y:3088 parse.y:3108 parse.y:3117 parse.y:3146 + msgid "`%T' is not a class or namespace" + msgstr "" + + #: parse.y:3313 + msgid "ISO C++ forbids label declarations" + msgstr "ISO C++ ¤Ï¥é¥Ù¥ëÀë¸À¤ò¶Ø¤¸¤Æ¤¤¤Þ¤¹" + + #: parse.y:3468 + msgid "ISO C++ forbids computed gotos" + msgstr "ISO C++ ¤Ï·×»»·¿ goto ¤ò¶Ø¤¸¤Þ¤¹" + + #: parse.y:3476 + msgid "label must be followed by statement" + msgstr "¥é¥Ù¥ë¤Î¸å¤í¤Ë¤Ïʸ¤¬É¬ÍפǤ¹" + + #: parse.y:3572 + msgid "ISO C++ forbids compound statements inside for initializations" + msgstr "ISO C++ ½é´ü²½»Ò¤ÎÆâÉô¤Ç¤Ïʣʸ¤¬¶Ø¤¸¤é¤ì¤Æ¤¤¤Þ¤¹" + + #. This helps us recover from really nasty + #. parse errors, for example, a missing right + #. parenthesis. + #: parse.y:3657 parse.y:3667 + msgid "possibly missing ')'" + msgstr "¤ª¤½¤é¤¯ ')' ¤ò˺¤ì¤Æ¤¤¤Þ¤¹" + + #: parse.y:3764 parse.y:3769 + msgid "type specifier omitted for parameter" + msgstr "·¿»ØÄê»Ò¤Ï²¾°ú¿ôÍѤ˾Êά¤µ¤ì¤Þ¤·¤¿" + + #: parse.y:3773 + #, c-format + msgid " perhaps you want `typename %E' to make it a type" + msgstr "" + + #: parse.y:3781 + msgid "'%D' is used as a type, but is not defined as a type." + msgstr "" + + #: cp/pt.c:208 + #, fuzzy + msgid "data member `%D' cannot be a member template" + msgstr "Èó¥á¥ó¥Ð `%s' ¤ò `mutable' ¤È¤ÏÀë¸À¤Ç¤­¤Þ¤»¤ó" + + #: cp/pt.c:220 + #, fuzzy + msgid "invalid member template declaration `%D'" + msgstr "¥é¥Ù¥ë¤ÎÀë¸À `%s' ¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹" + + #: cp/pt.c:615 + msgid "explicit specialization in non-namespace scope `%D'" + msgstr "" + + #: cp/pt.c:627 + msgid "enclosing class templates are not explicitly specialized" + msgstr "" + + #: cp/pt.c:702 + msgid "specializing `%#T' in different namespace" + msgstr "" + + #: cp/pt.c:703 + #, fuzzy + msgid " from definition of `%#D'" + msgstr "`%s' ¤¬ºÆÄêµÁ¤µ¤ì¤Þ¤·¤¿" + + #: cp/pt.c:711 + #, fuzzy + msgid "specialization of `%T' after instantiation" + msgstr "`%s' ¤ÎÀë¸À¤Ë `extern' ¤¬¤Ä¤¤¤Æ¤ª¤ê¡¢½é´ü²½¤â¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: cp/pt.c:714 + #, fuzzy + msgid "explicit specialization of non-template `%T'" + msgstr "¥¤¥ó¥é¥¤¥ó¥Æ¥ó¥×¥ì¡¼¥È¤ÎÌÀ¼¨Åª¤Ê¼ÂÂβ½¤Î¤ß¤òÀ¸À®¤¹¤ë" + + #: cp/pt.c:846 + msgid "specialization of %D after instantiation" + msgstr "" + + #: cp/pt.c:949 + #, fuzzy + msgid "%s %+#D" + msgstr "%s: %s" + + #: cp/pt.c:1000 + #, fuzzy + msgid "`%D' is not a function template" + msgstr "¥­¥ã¥¹¥È¤Ë¤è¤ë´Ø¿ô¤Î·¿¤¬Å¬¹ç¤·¤Þ¤»¤ó" + + #: cp/pt.c:1123 + msgid "template-id `%D' for `%+D' does not match any template declaration" + msgstr "" + + #: cp/pt.c:1131 + msgid "ambiguous template specialization `%D' for `%+D'" + msgstr "" + + #. This case handles bogus declarations like template <> + #. template void f(); + #: cp/pt.c:1358 cp/pt.c:1432 + #, fuzzy + msgid "template-id `%D' in declaration of primary template" + msgstr "`operator delete' ¤ÎÀë¸ÀÆâ¤Ë¿¤¹¤®¤ë°ú¿ô" + + #: cp/pt.c:1371 + #, fuzzy + msgid "template parameter list used in explicit instantiation" + msgstr "#define Ãæ¤Î²¾°ú¿ô¥ê¥¹¥È¤¬½ªÃ¼¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: cp/pt.c:1377 + msgid "definition provided for explicit instantiation" + msgstr "" + + #: cp/pt.c:1383 + #, fuzzy + msgid "too many template parameter lists in declaration of `%D'" + msgstr "%s: ·Ù¹ð: `%s' ¤ÎÀë¸À¤Ç¤Î²¾°ú¿ô¥ê¥¹¥È¤¬Â¿¤¹¤®¤Þ¤¹\n" + + #: cp/pt.c:1399 + #, fuzzy + msgid "too few template parameter lists in declaration of `%D'" + msgstr "\n%s: ·Ù¹ð: `%s' ¤ÎÀë¸À¤Ç¤Î²¾°ú¿ô¥ê¥¹¥È¤¬¾¯¤Ê¤¹¤®¤Þ¤¹\n" + + #: cp/pt.c:1416 + msgid "explicit specialization not preceded by `template <>'" + msgstr "" + + #: cp/pt.c:1429 + msgid "partial specialization `%D' of function template" + msgstr "" + + #: cp/pt.c:1461 + msgid "default argument specified in explicit specialization" + msgstr "" + + #: cp/pt.c:1465 + msgid "template specialization with C linkage" + msgstr "" + + #. From [temp.expl.spec]: + #. + #. If such an explicit specialization for the member + #. of a class template names an implicitly-declared + #. special member function (clause _special_), the + #. program is ill-formed. + #. + #. Similar language is found in [temp.explicit]. + #: cp/pt.c:1553 + msgid "specialization of implicitly-declared special member function" + msgstr "" + + #: cp/pt.c:1596 + #, fuzzy + msgid "no member function `%D' declared in `%T'" + msgstr "¥Í¥¹¥È¤·¤¿´Ø¿ô `%s' ¤Ï `extern' ¤ËÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #. There are two many template parameter lists. + #: cp/pt.c:1744 + #, fuzzy + msgid "too many template parameter lists in declaration of `%T'" + msgstr "%s: ·Ù¹ð: `%s' ¤ÎÀë¸À¤Ç¤Î²¾°ú¿ô¥ê¥¹¥È¤¬Â¿¤¹¤®¤Þ¤¹\n" + + #: cp/pt.c:1840 + msgid " shadows template parm `%#D'" + msgstr "" + + #: cp/pt.c:2243 + msgid "template parameters not used in partial specialization:" + msgstr "" + + #: cp/pt.c:2247 + msgid " `%D'" + msgstr "" + + #: cp/pt.c:2259 + msgid "partial specialization `%T' does not specialize any template arguments" + msgstr "" + + #: cp/pt.c:2284 + #, c-format + msgid "template argument `%E' involves template parameter(s)" + msgstr "" + + #: cp/pt.c:2327 + msgid "type `%T' of template argument `%E' depends on template parameter(s)" + msgstr "" + + #: cp/pt.c:2415 + #, fuzzy + msgid "no default argument for `%D'" + msgstr "`%s' ¤Î°ú¿ô¤È¤·¤ÆÌµ¸ú¤Ê·¿" + + #: cp/pt.c:2548 + msgid "template with C linkage" + msgstr "" + + #: cp/pt.c:2551 + msgid "template class without a name" + msgstr "" + + #: cp/pt.c:2626 + msgid "`%D' does not declare a template type" + msgstr "" + + #: cp/pt.c:2632 + #, fuzzy + msgid "template definition of non-template `%#D'" + msgstr "¥¤¥ó¥¹¥¿¥ó¥¹¥á¥½¥Ã¥É `%s' ¤ÎÄêµÁ¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹¡£" + + #: cp/pt.c:2673 + msgid "expected %d levels of template parms for `%#D', got %d" + msgstr "" + + #: cp/pt.c:2685 + #, fuzzy + msgid "got %d template parameters for `%#D'" + msgstr "½ÅÊ£¤·¤¿²¾°ú¿ô̾ `%s'" + + #: cp/pt.c:2688 + #, fuzzy + msgid "got %d template parameters for `%#T'" + msgstr "½ÅÊ£¤·¤¿²¾°ú¿ô̾ `%s'" + + #: cp/pt.c:2690 + #, c-format + msgid " but %d required" + msgstr "" + + #: cp/pt.c:2758 + #, fuzzy + msgid "`%T' is not a template type" + msgstr "`%s' ¤ÏÉÔ´°Á´·¿¤Ç¤¹" + + #: cp/pt.c:2774 + #, fuzzy + msgid "previous declaration `%D'" + msgstr "Á°Êý¤Ç¤Î `%s' ¤ÎÀë¸À" + + #: cp/pt.c:2775 + #, fuzzy, c-format + msgid "used %d template parameter%s instead of %d" + msgstr "½ÅÊ£¤·¤¿²¾°ú¿ô̾ `%s'" + + #: cp/pt.c:2791 + #, fuzzy + msgid "template parameter `%#D'" + msgstr "°ú¿ô `%s' ¤¬Ì¤»ÈÍѤǤ¹" + + #: cp/pt.c:2792 + msgid "redeclared here as `%#D'" + msgstr "" + + #. We have in [temp.param]: + #. + #. A template-parameter may not be given default arguments + #. by two different declarations in the same scope. + #: cp/pt.c:2802 + #, fuzzy + msgid "redefinition of default argument for `%#D'" + msgstr "`%s' ¤¬ºÆÄêµÁ¤µ¤ì¤Þ¤·¤¿" + + #: cp/pt.c:2803 + #, fuzzy + msgid " original definition appeared here" + msgstr "´Ø¿ô¤ÎÄêµÁ¤¬ `typedef' ¤ÈÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: cp/pt.c:2896 + #, fuzzy, c-format + msgid "`%E' is not a valid template argument" + msgstr "̵¸ú¤Ê¥Ç¥Õ¥©¥ë¥È¥Æ¥ó¥×¥ì¡¼¥È°ú¿ô" + + #: cp/pt.c:2900 + msgid "it must be the address of a function with external linkage" + msgstr "" + + #: cp/pt.c:2902 + msgid "it must be the address of an object with external linkage" + msgstr "" + + #: cp/pt.c:2906 + msgid "it must be a pointer-to-member of the form `&X::Y'" + msgstr "" + + #: cp/pt.c:2917 + #, c-format + msgid "string literal %E is not a valid template argument because it is the address of an object with static linkage" + msgstr "" + + #: cp/pt.c:2929 + #, c-format + msgid "address of non-extern `%E' cannot be used as template argument" + msgstr "" + + #: cp/pt.c:2940 + #, fuzzy, c-format + msgid "non-constant `%E' cannot be used as template argument" + msgstr "const `%s' ¤ò `mutable' ¤È¤·¤ÆÀë¸À¤Ç¤­¤Þ¤»¤ó" + + #: cp/pt.c:2947 + #, fuzzy, c-format + msgid "object `%E' cannot be used as template argument" + msgstr "\"%s\" ¤Ï¥Þ¥¯¥í̾¤È¤·¤Æ¤Ï»È¤¨¤Þ¤»¤ó" + + #: cp/pt.c:3323 + #, c-format + msgid "to refer to a type member of a template parameter, use `typename %E'" + msgstr "" + + #: cp/pt.c:3336 cp/pt.c:3352 cp/pt.c:3391 + msgid "type/value mismatch at argument %d in template parameter list for `%D'" + msgstr "" + + #: cp/pt.c:3339 + msgid " expected a constant of type `%T', got `%T'" + msgstr "" + + #: cp/pt.c:3343 + #, fuzzy, c-format + msgid " expected a type, got `%E'" + msgstr "ͽ´ü¤·¤Ê¤¤·¿¤¬ `id' (%s) ¤Ë»ØÄꤵ¤ì¤Þ¤·¤¿" + + #: cp/pt.c:3355 + #, fuzzy + msgid " expected a type, got `%T'" + msgstr "ͽ´ü¤·¤Ê¤¤·¿¤¬ `id' (%s) ¤Ë»ØÄꤵ¤ì¤Þ¤·¤¿" + + #: cp/pt.c:3357 + msgid " expected a class template, got `%T'" + msgstr "" + + #: cp/pt.c:3393 + msgid " expected a template of type `%D', got `%D'" + msgstr "" + + #: cp/pt.c:3415 + msgid "template-argument `%T' uses anonymous type" + msgstr "" + + #: cp/pt.c:3418 + msgid "template-argument `%T' uses local type `%T'" + msgstr "" + + #: cp/pt.c:3453 + msgid "could not convert template argument `%E' to `%T'" + msgstr "" + + #: cp/pt.c:3497 + #, c-format + msgid "wrong number of template arguments (%d, should be %d)" + msgstr "" + + #: cp/pt.c:3501 + #, fuzzy + msgid "provided for `%D'" + msgstr "`%#D' ¤Î¤¿¤á¤Î¥Ç¥¹¥È¥é¥¯¥¿¤¬É¬ÍפǤ¹" + + #: cp/pt.c:3548 + #, fuzzy, c-format + msgid "template argument %d is invalid" + msgstr "¥Þ¥¯¥í°ú¿ô \"%s\" ¤Ïʸ»úÎ󲽤µ¤ì¤Þ¤¹" + + #: cp/pt.c:3780 + msgid "non-template used as template" + msgstr "" + + #: cp/pt.c:3898 + #, fuzzy + msgid "`%T' is not a template" + msgstr "¥Æ¥ó¥×¥ì¡¼¥ÈÆâ¤Ç `%s' ¤ò»ÈÍѤ·¤Æ¤¤¤Þ¤¹" + + #: cp/pt.c:3911 + msgid "non-template type `%T' used as a template" + msgstr "" + + #: cp/pt.c:3913 + #, fuzzy + msgid "for template declaration `%D'" + msgstr "¶õ¤ÎÀë¸À¤Ç¤¹" + + #: cp/pt.c:4476 + msgid "template instantiation depth exceeds maximum of %d (use -ftemplate-depth-NN to increase the maximum) instantiating `%D'" + msgstr "" + + #: cp/pt.c:4911 + #, fuzzy + msgid "ambiguous class template instantiation for `%#T'" + msgstr "¼«Æ°¥Æ¥ó¥×¥ì¡¼¥È¼ÂÂ⽤òÍ­¸ú¤Ë¤¹¤ë" + + #: cp/pt.c:4918 + #, fuzzy + msgid "%s %+#T" + msgstr "%s: %s" + + #: cp/pt.c:5940 cp/pt.c:6054 + #, fuzzy + msgid "instantiation of `%D' as type `%T'" + msgstr "%s: `%s' ¤Î½é´ü²½:\n" + + #: cp/pt.c:6096 + #, fuzzy + msgid "invalid parameter type `%T'" + msgstr "²¾°ú¿ô `%s' ¤Ï̵¸ú¤Ç¤¹" + + #: cp/pt.c:6098 + #, fuzzy + msgid "in declaration `%D'" + msgstr "`%s' ¤¬ºÆÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: cp/pt.c:6173 + #, fuzzy + msgid "creating pointer to member function of non-class type `%T'" + msgstr "¥á¥ó¥Ð´Ø¿ô¤Ø¤Î¥Ý¥¤¥ó¥¿¤¬¸Æ¤Ð¤ì¤Þ¤·¤¿¤¬¡¢¥¯¥é¥¹¥¹¥³¡¼¥×Æâ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: cp/pt.c:6336 + msgid "creating array with size zero" + msgstr "Â礭¤µ¥¼¥í¤ÎÇÛÎó¤òºî¤í¤¦¤È¤·¤Æ¤¤¤Þ¤¹" + + #: cp/pt.c:6350 + #, fuzzy, c-format + msgid "creating array with size zero (`%E')" + msgstr "Â礭¤µ¥¼¥í¤ÎÇÛÎó¤òºî¤í¤¦¤È¤·¤Æ¤¤¤Þ¤¹" + + #: cp/pt.c:6588 + #, fuzzy + msgid "forming reference to void" + msgstr "°ì»þ¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î»²¾È¤òÊÖ¤½¤¦¤È¤·¤Æ¤¤¤Þ¤¹" + + #: cp/pt.c:6590 + msgid "forming %s to reference type `%T'" + msgstr "" + + #: cp/pt.c:6624 + #, fuzzy + msgid "creating pointer to member of non-class type `%T'" + msgstr " ¥Ý¥¤¥ó¥¿¤«¤é¥á¥ó¥Ð¤Ø¤ÎÊÑ´¹¤Ç" + + #: cp/pt.c:6686 + #, fuzzy + msgid "creating array of `%T'" + msgstr "°ú¿ô %d ¸Ä¤Î `%s' ¤òÅϤ·¤Þ¤¹" + + #: cp/pt.c:6732 + msgid "`%T' is not a class, struct, or union type" + msgstr "" + + #: cp/pt.c:6844 + #, c-format + msgid "use of `%s' in template" + msgstr "¥Æ¥ó¥×¥ì¡¼¥ÈÆâ¤Ç `%s' ¤ò»ÈÍѤ·¤Æ¤¤¤Þ¤¹" + + #: cp/pt.c:7601 + msgid "type `%T' composed from a local class is not a valid template-argument" + msgstr "" + + #: cp/pt.c:7602 + #, fuzzy + msgid " trying to instantiate `%D'" + msgstr "%s:%d: `%s' ¤«¤é¼ÂÂ⽤µ¤ì¤Þ¤·¤¿\n" + + #: cp/pt.c:8032 + msgid "incomplete type unification" + msgstr "ÉÔ´°Á´¤Ê·¿¤Îñ°ì²½" + + #: cp/pt.c:8987 + #, c-format + msgid "use of `%s' in template type unification" + msgstr "¥Æ¥ó¥×¥ì¡¼¥È·¿Åý°ìÃæ `%s' ¤¬»ÈÍѤµ¤ì¤Þ¤·¤¿" + + #: cp/pt.c:9409 cp/pt.c:9477 + #, fuzzy + msgid "explicit instantiation of non-template `%#D'" + msgstr "¥¤¥ó¥é¥¤¥ó¥Æ¥ó¥×¥ì¡¼¥È¤ÎÌÀ¼¨Åª¤Ê¼ÂÂβ½¤Î¤ß¤òÀ¸À®¤¹¤ë" + + #: cp/pt.c:9425 cp/pt.c:9472 + msgid "no matching template for `%D' found" + msgstr "" + + #: cp/pt.c:9431 + #, fuzzy + msgid "explicit instantiation of `%#D'" + msgstr "%s: `%s' ¤Î½é´ü²½:\n" + + #. [temp.spec] + #. + #. No program shall both explicitly instantiate and explicitly + #. specialize a template. + #: cp/pt.c:9448 + #, fuzzy + msgid "explicit instantiation of `%#D' after" + msgstr "¥¤¥ó¥é¥¤¥ó¥Æ¥ó¥×¥ì¡¼¥È¤ÎÌÀ¼¨Åª¤Ê¼ÂÂβ½¤Î¤ß¤òÀ¸À®¤¹¤ë" + + #: cp/pt.c:9449 cp/pt.c:9586 + #, fuzzy + msgid "explicit specialization here" + msgstr "½é´ü²½" + + #: cp/pt.c:9464 + #, fuzzy + msgid "duplicate explicit instantiation of `%#D'" + msgstr "¥é¥Ù¥ë¤ÎÀë¸À `%s' ¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹" + + #: cp/pt.c:9489 + #, fuzzy + msgid "ISO C++ forbids the use of `extern' on explicit instantiations" + msgstr "ISO C++ ¤Ï¸º»»¤Ë¥á¥½¥Ã¥É¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò»È¤¦¤³¤È¤ò¶Ø¤¸¤Þ¤¹" + + #: cp/pt.c:9493 cp/pt.c:9571 + #, fuzzy + msgid "storage class `%D' applied to template instantiation" + msgstr "¼«Æ°¥Æ¥ó¥×¥ì¡¼¥È¼ÂÂ⽤òÍ­¸ú¤Ë¤¹¤ë" + + #: cp/pt.c:9538 + #, fuzzy + msgid "explicit instantiation of non-template type `%T'" + msgstr "¥¤¥ó¥é¥¤¥ó¥Æ¥ó¥×¥ì¡¼¥È¤ÎÌÀ¼¨Åª¤Ê¼ÂÂβ½¤Î¤ß¤òÀ¸À®¤¹¤ë" + + #: cp/pt.c:9552 + #, fuzzy + msgid "explicit instantiation of `%#T' before definition of template" + msgstr "¥¤¥ó¥é¥¤¥ó¥Æ¥ó¥×¥ì¡¼¥È¤ÎÌÀ¼¨Åª¤Ê¼ÂÂβ½¤Î¤ß¤òÀ¸À®¤¹¤ë" + + #: cp/pt.c:9560 + #, fuzzy, c-format + msgid "ISO C++ forbids the use of `%s' on explicit instantiations" + msgstr "ISO C++ ¤Ï¸º»»¤Ë´Ø¿ô¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò»È¤¦¤³¤È¤ò¶Ø¤¸¤Þ¤¹" + + #: cp/pt.c:9585 + #, fuzzy + msgid "explicit instantiation of `%#T' after" + msgstr "¥¤¥ó¥é¥¤¥ó¥Æ¥ó¥×¥ì¡¼¥È¤ÎÌÀ¼¨Åª¤Ê¼ÂÂβ½¤Î¤ß¤òÀ¸À®¤¹¤ë" + + #: cp/pt.c:9603 + #, fuzzy + msgid "duplicate explicit instantiation of `%#T'" + msgstr "¥é¥Ù¥ë¤ÎÀë¸À `%s' ¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹" + + #: cp/pt.c:9944 + #, fuzzy + msgid "explicit instantiation of `%D' but no definition available" + msgstr "¥¤¥ó¥é¥¤¥ó¥Æ¥ó¥×¥ì¡¼¥È¤ÎÌÀ¼¨Åª¤Ê¼ÂÂβ½¤Î¤ß¤òÀ¸À®¤¹¤ë" + + #: cp/pt.c:10316 + #, fuzzy + msgid "`%#T' is not a valid type for a template constant parameter" + msgstr "'#' ¤Ë¥Þ¥¯¥í²¾°ú¿ô̾¤¬Â³¤¤¤Æ¤¤¤Þ¤»¤ó" + + #: cp/repo.c:272 + msgid "-frepo must be used with -c" + msgstr "-frepo ¤Ï -c ÉÕ¤­¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: cp/repo.c:366 + #, c-format + msgid "mysterious repository information in %s" + msgstr "%s ¤ËÉԲIJò¤Ê¥ê¥Ý¥¸¥È¥ê¾ðÊ󤬤¢¤ê¤Þ¤¹" + + #: cp/repo.c:381 + #, c-format + msgid "can't create repository information file `%s'" + msgstr "¥Õ¥¡¥¤¥ë `%s' ¤Ë¥ê¥Ý¥¸¥È¥ê¾ðÊó¤òºîÀ®¤Ç¤­¤Þ¤»¤ó" + + #: cp/rtti.c:200 + msgid "cannot use typeid with -fno-rtti" + msgstr "-fno-rtti ¤¬»ØÄꤵ¤ì¤ë¤È typeid ¤ò»È¤¨¤Þ¤»¤ó" + + #: cp/rtti.c:206 + msgid "must #include before using typeid" + msgstr "typeid ¤ò»È¤¦Á°¤Ë #include ¤È¤·¤Ê¤¤¤È¤¤¤±¤Þ¤»¤ó" + + #: cp/rtti.c:280 + msgid "cannot create type information for type `%T' because its size is variable" + msgstr "" + + #: cp/rtti.c:525 cp/rtti.c:539 + msgid "dynamic_cast of `%#D' to `%#T' can never succeed" + msgstr "" + + #: cp/rtti.c:614 + msgid "cannot dynamic_cast `%E' (of type `%#T') to type `%#T' (%s)" + msgstr "" + + #: cp/search.c:340 + msgid "`%T' is an inaccessible base of `%T'" + msgstr "" + + #: cp/search.c:350 + msgid "`%T' is an ambiguous base of `%T'" + msgstr "" + + #: cp/search.c:1826 + msgid "adjusting pointers for covariant returns" + msgstr "¶¦ÊÑ(covariant)Ìá¤êÃͤؤΥݥ¤¥ó¥¿¤òÄ´À°¤·¤Þ¤¹" + + #: cp/search.c:1830 cp/search.c:1837 + #, fuzzy + msgid "invalid covariant return type for `%#D'" + msgstr "`%s' ¤ËÂФ¹¤ë¥ì¥¸¥¹¥¿Ì¾¤È¤·¤ÆÌµ¸ú¤Ç¤¹" + + #: cp/search.c:1831 + msgid " overriding `%#D' (must be pointer or reference to class)" + msgstr "" + + #: cp/search.c:1838 + msgid " overriding `%#D' (must use pointer or reference)" + msgstr "" + + #: cp/search.c:1843 + #, fuzzy + msgid "conflicting return type specified for `%#D'" + msgstr "`%s' ¤È·¿¤¬Ì·½â¤·¤Þ¤¹" + + #: cp/search.c:1844 + msgid " overriding `%#D'" + msgstr "" + + #: cp/search.c:1853 + #, fuzzy, c-format + msgid "looser throw specifier for `%#F'" + msgstr "`%s' ¤ËÂФ·¤Æ char ¤È¤È¤â¤Ë long ¤Þ¤¿¤Ï short ¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤¹" + + #: cp/search.c:1854 + #, c-format + msgid " overriding `%#F'" + msgstr "" + + #. A static member function cannot match an inherited + #. virtual member function. + #: cp/search.c:1944 + #, fuzzy + msgid "`%#D' cannot be declared" + msgstr "const `%s' ¤ò `mutable' ¤È¤·¤ÆÀë¸À¤Ç¤­¤Þ¤»¤ó" + + #: cp/search.c:1945 + msgid " since `%#D' declared in base class" + msgstr "" + + #: cp/search.c:2130 + msgid "`%#D' needs a final overrider" + msgstr "" + + #: cp/semantics.c:903 + #, fuzzy, c-format + msgid "type of asm operand `%E' could not be determined" + msgstr "²¾°ú¿ô `%s' ¤Î·¿¤¬Àë¸À¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: cp/semantics.c:1045 + msgid "ISO C++ does not permit named return values" + msgstr "ISO C++ ¤Ï̾Á°¤Ä¤­Ìá¤êÃͤòµö²Ä¤·¤Þ¤»¤ó" + + #: cp/semantics.c:1054 + msgid "return identifier `%D' already in place" + msgstr "" + + #: cp/semantics.c:1062 + msgid "can't redefine default return value for constructors" + msgstr "¥³¥ó¥¹¥È¥é¥¯¥¿ÍѤΥǥե©¥ë¥ÈÌá¤êÃͤòºÆÄêµÁ¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó" + + #: cp/semantics.c:1129 + #, fuzzy + msgid "base initializer for `%T'" + msgstr "(`%s' ¤Î½é´ü²½¤ÏÉÔ´°Á´¤Ç¤¹)" + + #: cp/semantics.c:1131 + msgid " will be re-ordered to precede member initializations" + msgstr " Àè¤Ë¤¢¤ë¥á¥ó¥Ð½é´ü²½»Ò¤ÈʤÓÂØ¤¨¤é¤ì¤Þ¤¹" + + #: cp/semantics.c:1401 + msgid "`this' is unavailable for static member functions" + msgstr "`this' ¤ÏÀÅŪ¥á¥ó¥Ð´Ø¿ô¤«¤é»ÈÍѤǤ­¤Þ¤»¤ó" + + #: cp/semantics.c:1407 + msgid "invalid use of `this' in non-member function" + msgstr "Èó¥á¥ó¥Ð´Ø¿ô¤Ç¤Î `this' ¤Î»ÈÍѤÏ̵¸ú¤Ç¤¹" + + #: cp/semantics.c:1409 + msgid "invalid use of `this' at top level" + msgstr "¥È¥Ã¥×¥ì¥Ù¥ë¤Ç¤Î `this' ¤Î»ÈÍѤÏ̵¸ú¤Ç¤¹" + + #: cp/semantics.c:1447 + msgid "calling type `%T' like a method" + msgstr "" + + #: cp/semantics.c:1483 + msgid "destructor specifier `%T::~%T()' must have matching names" + msgstr "" + + #: cp/semantics.c:1489 + #, fuzzy + msgid "`%E' is not of type `%T'" + msgstr "`%s' ¤Ï `%s' ¤Ë±þÅú¤·¤Þ¤»¤ó" + + #: cp/semantics.c:1701 + msgid "template type parameters must use the keyword `class' or `typename'" + msgstr "¥Æ¥ó¥×¥ì¡¼¥È·¿²¾°ú¿ô¤Ë¤Ï `class' ¤ä `typename' ͽÌó¸ì¤ò»È¤ï¤Í¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: cp/semantics.c:1760 + #, fuzzy + msgid "definition of `%#T' inside template parameter list" + msgstr "`%s' ¤ÎÀë¸À¤Ï²¾°ú¿ô¥ê¥¹¥È¤Î¥·¥ó¥Ü¥ë¤òʤ¤¤±£¤·¤Þ¤¹" + + #: cp/semantics.c:1776 + #, fuzzy + msgid "invalid definition of qualified type `%T'" + msgstr "̤ÄêµÁ¤Î·¿ `%s %s' ¤Î»ÈÍѤÏÉÔŬÀڤǤ¹" + + #: cp/semantics.c:2128 + msgid "base class `%T' has cv qualifiers" + msgstr "" + + #: cp/semantics.c:2161 + #, fuzzy + msgid "multiple declarators in template declaration" + msgstr "°ì¤Ä¤ÎÀë¸À¤ËÊ£¿ô¤Î·¿¤¬¤¢¤ê¤Þ¤¹" + + #: cp/spew.c:245 + #, c-format + msgid "identifier name `%s' conflicts with GNU C++ internal naming strategy" + msgstr "¼±ÊÌ»Ò̾ `%s' ¤Ï GNU C++ ÆâÉô¤Î¥Í¡¼¥ß¥ó¥°Àïά¤È¶¥¹ç¤·¤Þ¤¹" + + #: cp/spew.c:1020 cp/spew.c:1292 + msgid "parse error at end of saved function text" + msgstr "ÊݸºÑ¤ß´Ø¿ô¥Æ¥­¥¹¥È¤ÎËöÈø¤Ç¹½Ê¸²òÀÏ¥¨¥é¡¼" + + #: cp/spew.c:1062 + msgid "parse error in method specification" + msgstr "¥á¥½¥Ã¥É»ÅÍÍÆâ¤Ç¤Î¹½Ê¸²òÀÏ¥¨¥é¡¼" + + #: cp/spew.c:1104 + msgid "function body for constructor missing" + msgstr "¥³¥ó¥¹¥È¥é¥¯¥¿¤Î´Ø¿ôËÜÂΤò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: cp/spew.c:1371 + msgid "circular dependency in default args of `%#D'" + msgstr "" + + #: cp/spew.c:1435 + #, fuzzy + msgid "invalid type `%T' for default argument to `%T'" + msgstr "`%s' ¤Î°ú¿ô¤È¤·¤ÆÌµ¸ú¤Ê·¿" + + #: cp/spew.c:1495 + #, c-format + msgid "%s before `%s'" + msgstr "%s ¤¬ `%s' ¤ÎÁ°¤Ë¤¢¤ê¤Þ¤¹" + + #: cp/spew.c:1497 + #, c-format + msgid "%s before `%c'" + msgstr "%s ¤¬ `%c' ¤ÎÁ°¤Ë¤¢¤ê¤Þ¤¹" + + #: cp/spew.c:1499 + #, c-format + msgid "%s before `\\%o'" + msgstr "%s ¤¬ `\\%o' ¤ÎÁ°¤Ë¤¢¤ê¤Þ¤¹" + + #: cp/spew.c:1502 + #, c-format + msgid "%s before `%s' token" + msgstr "%s ¤¬ `%s' ¥È¡¼¥¯¥ó¤ÎÁ°¤Ë¤¢¤ê¤Þ¤¹" + + #: cp/tree.c:224 + #, c-format + msgid "non-lvalue in %s" + msgstr "%s ¤Ëº¸ÊÕÃͤǤϤʤ¤ÃÍ" + + #: cp/tree.c:536 + #, fuzzy + msgid "`%T' cannot be `restrict'-qualified" + msgstr "`%s' ¤òÀÅŪ¤Ë³ÎÊݤǤ­¤Þ¤»¤ó" + + #: cp/tree.c:547 + msgid "`%T' cannot be `const'-, `volatile'-, or `restrict'-qualified" + msgstr "" + + #: cp/tree.c:1888 + #, fuzzy, c-format + msgid "`%s' attribute can only be applied to Java class definitions" + msgstr "`java_interface' °À­¤Ï Java ¥¯¥é¥¹ÄêµÁ¤ËÂФ·¤Æ¤Î¤ßÍѤ¤¤ë»ö¤¬¤Ç¤­¤Þ¤¹" + + #: cp/tree.c:1918 + #, fuzzy, c-format + msgid "`%s' attribute can only be applied to class definitions" + msgstr "`com_interface' °À­¤Ï¥¯¥é¥¹ÄêµÁ¤Ë¤Î¤ßÍѤ¤¤ë»ö¤¬¤Ç¤­¤Þ¤¹" + + #: cp/tree.c:1924 + #, c-format + msgid "`%s' is obsolete; g++ vtables are now COM-compatible by default" + msgstr "" + + #: cp/tree.c:1949 + msgid "requested init_priority is not an integer constant" + msgstr "Í׵ᤵ¤ì¤¿ init_priority ¤ÏÀ°¿ô·¿¤ÎÄê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: cp/tree.c:1970 + #, fuzzy, c-format + msgid "can only use `%s' attribute on file-scope definitions of objects of class type" + msgstr "init_priority °À­¤Ï¥¯¥é¥¹·¿¥ª¥Ö¥¸¥§¥¯¥È¤Î¥Õ¥¡¥¤¥ë¥¹¥³¡¼¥×ÄêµÁ¤Ç¤Î¤ß»È¤¨¤Þ¤¹" + + #: cp/tree.c:1978 + msgid "requested init_priority is out of range" + msgstr "Í׵ᤵ¤ì¤¿ init_priority ¤¬Èϰϳ°¤Ç¤¹" + + #: cp/tree.c:1988 + msgid "requested init_priority is reserved for internal use" + msgstr "Í׵ᤵ¤ì¤¿ init_priority ¤ÏÆâÉô¤Ç»ÈÍѤ¹¤ë¤¿¤á¤ËͽÌó¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: cp/tree.c:1998 + #, fuzzy, c-format + msgid "`%s' attribute is not supported on this platform" + msgstr "init_priority °À­¤Ï¤³¤Î¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: cp/typeck.c:488 + #, c-format + msgid "ISO C++ forbids %s between pointer of type `void *' and pointer-to-function" + msgstr "ISO C++ ¤Ï `void *' ·¿¥Ý¥¤¥ó¥¿¤È´Ø¿ô¥Ý¥¤¥ó¥¿¤È¤Î %s ¤ò¶Ø¤¸¤Þ¤¹" + + #: cp/typeck.c:509 + #, fuzzy + msgid "%s between distinct pointer types `%T' and `%T' lacks a cast" + msgstr "·¿¤¬Á´¤¯°Û¤Ê¤ë¥Ý¥¤¥ó¥¿¤ÎÈæ³Ó¤Ç¥­¥ã¥¹¥È¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: cp/typeck.c:1493 + #, fuzzy + msgid "ISO C++ prohibits conversion from `%#T' to `(...)'" + msgstr "ISO C ¤Ç¤Ï°ú¿ô¤«¤é¶¦ÍÑÂΤؤÎÊÑ´¹¤ò¶Ø»ß¤·¤Æ¤¤¤Þ¤¹" + + #: cp/typeck.c:1563 + msgid "ISO C++ forbids applying `sizeof' to a function type" + msgstr "ISO C++ ¤Ï´Ø¿ô·¿¤Ø¤Î `sizeof' ¤ÎŬÍѤò¶Ø¤¸¤Þ¤¹" + + #: cp/typeck.c:1569 + msgid "ISO C++ forbids applying `sizeof' to a member function" + msgstr "ISO C++ ¤Ï¥á¥ó¥Ð´Ø¿ô¤Ø¤Î `sizeof' ¤ÎŬÍѤò¶Ø¤¸¤Þ¤¹" + + #: cp/typeck.c:1575 + msgid "ISO C++ forbids applying `sizeof' to type `void' which is an incomplete type" + msgstr "ISO C++ ¤ÏÉÔ´°Á´·¿¤Ç¤¢¤ë `void' ·¿¤Ø¤Î `sizeof' ¤ÎŬÍѤò¶Ø¤¸¤Þ¤¹" + + #: cp/typeck.c:1589 + #, fuzzy + msgid "`sizeof' applied to non-static member" + msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤ËŬÍѤµ¤ì¤¿ `sizeof'" + + #: cp/typeck.c:1594 + #, fuzzy + msgid "`sizeof' applied to incomplete type `%T'" + msgstr "sizeof ¤¬ÉÔ´°Á´¤Ê·¿¤ËŬÍѤµ¤ì¤Þ¤·¤¿" + + #: cp/typeck.c:1624 + msgid "sizeof applied to a bit-field" + msgstr "sizeof ¤¬¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤ËŬÍѤµ¤ì¤Þ¤·¤¿" + + #: cp/typeck.c:1627 + msgid "ISO C++ forbids applying `sizeof' to an expression of function type" + msgstr "ISO C++ ¤Ï´Ø¿ô·¿¤Î¼°¤Ø¤Î `sizeof' ¤ÎŬÍѤò¶Ø¤¸¤Þ¤¹" + + #: cp/typeck.c:1774 + msgid "invalid use of non-lvalue array" + msgstr "Èóº¸ÊÕÃÍÇÛÎó¤Î̵¸ú¤ÊÍøÍÑ" + + #: cp/typeck.c:1880 + #, fuzzy + msgid "deprecated conversion from string constant to `%T'" + msgstr "ʸ»úÎóÄê¿ôÃæ¤Î \\r ¥¨¥¹¥±¡¼¥×" + + #: cp/typeck.c:1898 + msgid "request for member `%T::%D' in expression of non-aggregate type `%T'" + msgstr "" + + #: cp/typeck.c:2041 + #, fuzzy + msgid "invalid use of %D" + msgstr "`restrict' ¤ÎÍÑË¡¤¬ÉÔŬÀڤǤ¹" + + #: cp/typeck.c:2091 + msgid "destructor specifier `%T::~%T' must have matching names" + msgstr "" + + #: cp/typeck.c:2097 + msgid "type `%T' has no destructor" + msgstr "" + + #: cp/typeck.c:2114 cp/typeck.c:2187 + #, fuzzy + msgid "invalid use of type decl `%#D' as expression" + msgstr "void ¼°¤ÎÉÔŬÀڤʻÈÍÑ" + + #: cp/typeck.c:2119 + #, fuzzy + msgid "invalid use of template `%#D' as expression" + msgstr "void ¼°¤ÎÉÔŬÀڤʻÈÍÑ" + + #: cp/typeck.c:2178 + #, fuzzy + msgid "`%#T' has no member named `%D'" + msgstr "%s ¤Ë `%s' ¤È¤¤¤¦Ì¾Á°¤Î¥á¥ó¥Ð¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: cp/typeck.c:2219 + msgid "invalid reference to NULL ptr, use ptr-to-member instead" + msgstr "NULL ¥Ý¥¤¥ó¥¿¤Ø¤Î̵¸ú¤Ê»²¾È¡¢Âå¤ï¤ê¤Ë¥á¥ó¥Ð¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò»È¤¤¤Þ¤·¤ç¤¦" + + #. A pointer to incomplete type (other than cv void) can be + #. dereferenced [expr.unary.op]/1 + #: cp/typeck.c:2345 + msgid "`%T' is not a pointer-to-object type" + msgstr "" + + #: cp/typeck.c:2372 + #, c-format + msgid "invalid use of `%s' on pointer to member" + msgstr "¥á¥ó¥Ð¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤Î̵¸ú¤Ê `%s' ¤Î»ÈÍÑ" + + #: cp/typeck.c:2378 + msgid "invalid type argument" + msgstr "̵¸ú¤Ê·¿°ú¿ô¤Ç¤¹" + + #: cp/typeck.c:2481 + msgid "ISO C++ forbids subscripting non-lvalue array" + msgstr "ISO C++ ¤Ïº¸ÊÕÃͤǤϤʤ¤ÇÛÎó¤Îź»ú¤ò¶Ø¤¸¤Þ¤¹" + + #: cp/typeck.c:2492 + msgid "subscripting array declared `register'" + msgstr "`register' ¤ÈÀë¸À¤µ¤ì¤¿ÇÛÎó¤Ëź»ú¤ò¤Ä¤±¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹" + + #: cp/typeck.c:2667 cp/typeck.c:2807 + msgid "pointer to member function called, but not in class scope" + msgstr "¥á¥ó¥Ð´Ø¿ô¤Ø¤Î¥Ý¥¤¥ó¥¿¤¬¸Æ¤Ð¤ì¤Þ¤·¤¿¤¬¡¢¥¯¥é¥¹¥¹¥³¡¼¥×Æâ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: cp/typeck.c:2691 + #, fuzzy + msgid "object missing in call to method `%D'" + msgstr "`%s' ¤Ø¤Î¸Æ¤Ó½Ð¤·¤Ï¥¤¥ó¥é¥¤¥ó²½¤Ç¤­¤Þ¤»¤ó" + + #: cp/typeck.c:2725 + msgid "function `%D' declared overloaded, but no definitions appear with which to resolve it?!?" + msgstr "" + + #: cp/typeck.c:2805 + msgid "invalid call to member function needing `this' in static member function scope" + msgstr "ÀÅŪ¥á¥ó¥Ð´Ø¿ô¥¹¥³¡¼¥×Æâ¤Ç¤Ï `this' ¤òÍפ¹¤ë¥á¥ó¥Ð´Ø¿ô¤Î¸Æ¤Ó½Ð¤·¤Ï̵¸ú¤Ç¤¹" + + #: cp/typeck.c:2989 + msgid "ISO C++ forbids calling `::main' from within program" + msgstr "ISO C++ ¤Ï¥×¥í¥°¥é¥à¤ÎÃæ¤«¤é `::main' ¤ò¸Æ¤Ó½Ð¤¹¤³¤È¤ò¶Ø¤¸¤Þ¤¹" + + #: cp/typeck.c:3014 + #, fuzzy, c-format + msgid "must use .* or ->* to call pointer-to-member function in `%E (...)'" + msgstr "¤³¤³¤Ç¤Ï¥á¥ó¥Ð´Ø¿ô¥Ý¥¤¥ó¥¿¸Æ¤Ó½Ð¤·¤¬¤Ç¤­¤Þ¤»¤ó" + + #: cp/typeck.c:3027 + #, fuzzy, c-format + msgid "`%E' cannot be used as a function" + msgstr "\"%s\" ¤Ï¥Þ¥¯¥í̾¤È¤·¤Æ¤Ï»È¤¨¤Þ¤»¤ó" + + #: cp/typeck.c:3152 + #, fuzzy + msgid "too many arguments to %s `%+#D'" + msgstr "´Ø¿ô `%s' ¤ËÂФ¹¤ë°ú¿ô¤¬Â¿¤¹¤®¤Þ¤¹" + + #: cp/typeck.c:3193 + msgid "parameter type of called function is incomplete" + msgstr "¸Æ¤Ð¤ì¤¿´Ø¿ô¤Î²¾°ú¿ô¤Î·¿¤¬ÉÔ´°Á´¤Ç¤¹" + + #: cp/typeck.c:3260 + #, fuzzy + msgid "too few arguments to %s `%+#D'" + msgstr "´Ø¿ô `%s' ¤Ø¤Î°ú¿ô¤¬¾¯¤Ê¤¹¤®¤Þ¤¹" + + #: cp/typeck.c:3388 cp/typeck.c:3398 + msgid "assuming cast to type `%T' from overloaded function" + msgstr "" + + #: cp/typeck.c:3458 + #, fuzzy, c-format + msgid "division by zero in `%E / 0'" + msgstr "#if ¤Ç¥¼¥í½ü»»¤¬È¯À¸¤·¤Þ¤·¤¿" + + #: cp/typeck.c:3460 + #, fuzzy, c-format + msgid "division by zero in `%E / 0.'" + msgstr "#if ¤Ç¥¼¥í½ü»»¤¬È¯À¸¤·¤Þ¤·¤¿" + + #: cp/typeck.c:3515 + #, fuzzy, c-format + msgid "division by zero in `%E %% 0'" + msgstr "#if ¤Ç¥¼¥í½ü»»¤¬È¯À¸¤·¤Þ¤·¤¿" + + #: cp/typeck.c:3517 + #, fuzzy, c-format + msgid "division by zero in `%E %% 0.'" + msgstr "#if ¤Ç¥¼¥í½ü»»¤¬È¯À¸¤·¤Þ¤·¤¿" + + #: cp/typeck.c:3597 + #, c-format + msgid "%s rotate count is negative" + msgstr "%s ¥í¡¼¥Æ¡¼¥È²ó¿ô¤¬Éé¤ÎÃͤǤ¹" + + #: cp/typeck.c:3600 + #, c-format + msgid "%s rotate count >= width of type" + msgstr "%s ¥í¡¼¥Æ¡¼¥È²ó¿ô >= ·¿¤ÎÉý¤Ç¤¹" + + #: cp/typeck.c:3631 cp/typeck.c:3636 cp/typeck.c:3727 cp/typeck.c:3732 + msgid "ISO C++ forbids comparison between pointer and integer" + msgstr "ISO C++ ¤Ï¥Ý¥¤¥ó¥¿¤ÈÀ°¿ô¤È¤ÎÈæ³Ó¤ò¶Ø¤¸¤Þ¤¹" + + #: cp/typeck.c:3912 + #, fuzzy + msgid "comparison between types `%#T' and `%#T'" + msgstr "¥Ý¥¤¥ó¥¿¤ÈÀ°¿ô¤È¤ÎÈæ³Ó¤ò¹Ô¤Ê¤Ã¤Æ¤¤¤Þ¤¹" + + #: cp/typeck.c:3948 + msgid "comparison between signed and unsigned integer expressions" + msgstr "Éä¹çÉÕ¤­¤ÈÉä¹ç̵¤·¤ÎÀ°¿ô¼°Æ±»Î¤ÎÈæ³Ó¤Ç¤¹" + + #: cp/typeck.c:4013 + #, fuzzy + msgid "invalid operands of types `%T' and `%T' to binary `%O'" + msgstr "Æó¹à±é»»»Ò %s ¤¬ÉÔŬÀڤǤ¹" + + #. Some sort of arithmetic operation involving NULL was + #. performed. Note that pointer-difference and pointer-addition + #. have already been handled above, and so we don't end up here in + #. that case. + #: cp/typeck.c:4035 + #, fuzzy + msgid "NULL used in arithmetic" + msgstr "´Ø¿ô¥Ý¥¤¥ó¥¿¤¬·×»»¤Ç»È¤ï¤ì¤Þ¤·¤¿" + + #: cp/typeck.c:4087 + msgid "ISO C++ forbids using pointer of type `void *' in pointer arithmetic" + msgstr "ISO C++ ¤Ï¥Ý¥¤¥ó¥¿·×»»¤Ë `void *' ·¿¤Î¥Ý¥¤¥ó¥¿¤ò»È¤¦¤³¤È¤ò¶Ø¤¸¤Þ¤¹" + + #: cp/typeck.c:4093 + msgid "ISO C++ forbids using a pointer-to-function in pointer arithmetic" + msgstr "ISO C++ ¤Ï¥Ý¥¤¥ó¥¿·×»»¤Ë´Ø¿ô¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò»È¤¦¤³¤È¤ò¶Ø¤¸¤Þ¤¹" + + #: cp/typeck.c:4099 + msgid "ISO C++ forbids using a pointer to member function in pointer arithmetic" + msgstr "ISO C++ ¤Ï¥Ý¥¤¥ó¥¿·×»»¤Ë¥á¥ó¥Ð´Ø¿ô¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò»È¤¦¤³¤È¤ò¶Ø¤¸¤Þ¤¹" + + #: cp/typeck.c:4105 + msgid "ISO C++ forbids using pointer to a member in pointer arithmetic" + msgstr "ISO C++ ¤Ï¥Ý¥¤¥ó¥¿·×»»¤Ë¥á¥ó¥Ð¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò»È¤¦¤³¤È¤ò¶Ø¤¸¤Þ¤¹" + + #: cp/typeck.c:4176 + msgid "ISO C++ forbids using pointer of type `void *' in subtraction" + msgstr "ISO C++ ¤Ï¸º»»¤Ë `void *' ·¿¤Î¥Ý¥¤¥ó¥¿¤ò»È¤¦¤³¤È¤ò¶Ø¤¸¤Þ¤¹" + + #: cp/typeck.c:4178 + msgid "ISO C++ forbids using pointer to a function in subtraction" + msgstr "ISO C++ ¤Ï¸º»»¤Ë´Ø¿ô¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò»È¤¦¤³¤È¤ò¶Ø¤¸¤Þ¤¹" + + #: cp/typeck.c:4180 + msgid "ISO C++ forbids using pointer to a method in subtraction" + msgstr "ISO C++ ¤Ï¸º»»¤Ë¥á¥½¥Ã¥É¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò»È¤¦¤³¤È¤ò¶Ø¤¸¤Þ¤¹" + + #: cp/typeck.c:4182 + msgid "ISO C++ forbids using pointer to a member in subtraction" + msgstr "ISO C++ ¤Ï¸º»»¤Ë¥á¥ó¥Ð¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò»È¤¦¤³¤È¤ò¶Ø¤¸¤Þ¤¹" + + #: cp/typeck.c:4194 + msgid "invalid use of a pointer to an incomplete type in pointer arithmetic" + msgstr "¥Ý¥¤¥ó¥¿±é»»¤ÇÉÔ´°Á´·¿¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò»È¤¦¤³¤È¤Ï̵¸ú¤Ç¤¹" + + #: cp/typeck.c:4231 + #, fuzzy + msgid "attempt to take address of bit-field structure member `%D'" + msgstr "¹½Â¤ÂÎ¥á¥ó¥Ð `%s' ¤Î¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤Î¥¢¥É¥ì¥¹¤ò¼èÆÀ¤·¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹" + + #: cp/typeck.c:4302 + msgid "taking address of temporary" + msgstr "°ì»þ¥ª¥Ö¥¸¥§¥¯¥È¤Î¥¢¥É¥ì¥¹¤ò¼è¤í¤¦¤È¤·¤Æ¤¤¤Þ¤¹" + + #: cp/typeck.c:4504 + #, c-format + msgid "ISO C++ forbids %sing an enum" + msgstr "ISO C++ ¤Ï enum ¤Î %s ¤ò¶Ø¤¸¤Þ¤¹" + + #: cp/typeck.c:4516 + #, fuzzy + msgid "cannot %s a pointer to incomplete type `%T'" + msgstr "²¾°ú¿ô `%s' ¤ÏÉÔ´°Á´·¿¤ò»Ø¤·¤Æ¤¤¤Þ¤¹" + + #: cp/typeck.c:4523 + #, fuzzy + msgid "ISO C++ forbids %sing a pointer of type `%T'" + msgstr "ISO C++ ¤Ï¸º»»¤Ë `void *' ·¿¤Î¥Ý¥¤¥ó¥¿¤ò»È¤¦¤³¤È¤ò¶Ø¤¸¤Þ¤¹" + + #: cp/typeck.c:4548 + msgid "cast to non-reference type used as lvalue" + msgstr "º¸ÊÕÃͤȤ·¤Æ»È¤ï¤ì¤ëÈ󻲾ȷ¿¤Ø¤Î¥­¥ã¥¹¥È¤Ç¤¹" + + #: cp/typeck.c:4582 + #, fuzzy + msgid "invalid use of `--' on bool variable `%D'" + msgstr "¥á¥ó¥Ð¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤Î̵¸ú¤Ê `%s' ¤Î»ÈÍÑ" + + #. ARM $3.4 + #: cp/typeck.c:4615 + msgid "ISO C++ forbids taking address of function `::main'" + msgstr "ISO C++ ¤Ï `::main' ´Ø¿ô¤Î¥¢¥É¥ì¥¹¤ò¼è¤ë¤³¤È¤ò¶Ø¤¸¤Þ¤¹" + + #. An expression like &memfn. + #: cp/typeck.c:4682 + msgid "ISO C++ forbids taking the address of an unqualified non-static member function to form a pointer to member function. Say `&%T::%D'" + msgstr "" + + #: cp/typeck.c:4684 + #, fuzzy + msgid "ISO C++ forbids taking the address of a bound member function to form a pointer to member function. Say `&%T::%D'" + msgstr "ISO C++ ¤ÏÈóº¸ÊÕÃͼ°¤Ø¤Î¥­¥ã¥¹¥È¤Î¥¢¥É¥ì¥¹¤ò¼è¤ë¤³¤È¤ò¶Ø¤¸¤Þ¤¹" + + #: cp/typeck.c:4708 + msgid "ISO C++ forbids taking the address of a cast to a non-lvalue expression" + msgstr "ISO C++ ¤ÏÈóº¸ÊÕÃͼ°¤Ø¤Î¥­¥ã¥¹¥È¤Î¥¢¥É¥ì¥¹¤ò¼è¤ë¤³¤È¤ò¶Ø¤¸¤Þ¤¹" + + #: cp/typeck.c:4724 + msgid "unary `&'" + msgstr "ñ¹à¤Î `&'" + + #: cp/typeck.c:4844 + #, fuzzy + msgid "taking address of destructor" + msgstr "°ì»þ¥ª¥Ö¥¸¥§¥¯¥È¤Î¥¢¥É¥ì¥¹¤ò¼è¤í¤¦¤È¤·¤Æ¤¤¤Þ¤¹" + + #: cp/typeck.c:4857 + #, fuzzy + msgid "taking address of bound pointer-to-member expression" + msgstr " ¥Ý¥¤¥ó¥¿¤«¤é¥á¥ó¥Ð¤Ø¤ÎÊÑ´¹¤Ç" + + #: cp/typeck.c:4925 + msgid "cannot take the address of `this', which is an rvalue expression" + msgstr "`this' ¤Ï±¦ÊÕÃͼ°¤Ç¤¢¤ê¡¢¤½¤Î¥¢¥É¥ì¥¹¤ò¼è¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó" + + #: cp/typeck.c:4941 + msgid "address requested for `%D', which is declared `register'" + msgstr "" + + #: cp/typeck.c:5145 + msgid "static_cast from type `%T' to type `%T' casts away constness" + msgstr "" + + #: cp/typeck.c:5153 + msgid "invalid static_cast from type `%T' to type `%T'" + msgstr "" + + #: cp/typeck.c:5192 + msgid "invalid reinterpret_cast of an rvalue expression of type `%T' to type `%T'" + msgstr "" + + #: cp/typeck.c:5212 + msgid "reinterpret_cast from `%T' to `%T' loses precision" + msgstr "" + + #: cp/typeck.c:5225 + msgid "reinterpret_cast from `%T' to `%T' casts away const (or volatile)" + msgstr "" + + #: cp/typeck.c:5234 + msgid "ISO C++ forbids casting between pointer-to-function and pointer-to-object" + msgstr "ISO C++ ¤Ï´Ø¿ô¥Ý¥¤¥ó¥¿¤È¥ª¥Ö¥¸¥§¥¯¥È¥Ý¥¤¥ó¥¿¤Î´Ö¤Ç¤Î¥­¥ã¥¹¥È¤ò¶Ø¤¸¤Þ¤¹" + + #: cp/typeck.c:5240 + msgid "invalid reinterpret_cast from type `%T' to type `%T'" + msgstr "" + + #: cp/typeck.c:5267 + msgid "invalid use of const_cast with type `%T', which is not a pointer, reference, nor a pointer-to-data-member type" + msgstr "" + + #: cp/typeck.c:5270 + msgid "invalid use of const_cast with type `%T', which is a pointer or reference to a function type" + msgstr "" + + #: cp/typeck.c:5293 + msgid "invalid const_cast of an rvalue of type `%T' to type `%T'" + msgstr "" + + #: cp/typeck.c:5309 + msgid "invalid const_cast from type `%T' to type `%T'" + msgstr "" + + #: cp/typeck.c:5351 cp/typeck.c:5356 + #, fuzzy + msgid "ISO C++ forbids casting to an array type `%T'" + msgstr "ISO C ¤Ï¶¦ÍÑÂη¿¤Ø¤Î¥­¥ã¥¹¥È¤ò¶Ø¤¸¤Þ¤¹" + + #: cp/typeck.c:5364 + #, fuzzy + msgid "invalid cast to function type `%T'" + msgstr "´Ø¿ô `%s' ¤ËÂФ·¤ÆÉÔŬÀÚ¤ÊÊݸ¥¯¥é¥¹" + + #: cp/typeck.c:5416 + #, fuzzy + msgid "cast from `%T' to `%T' discards qualifiers from pointer target type" + msgstr "¥­¥ã¥¹¥È¤Ë¤è¤Ã¤Æ¥Ý¥¤¥ó¥¿¤¬¼¨¤¹·¿¤«¤é½¤¾þ»Ò¤¬ÀÚ¤ê¼Î¤Æ¤é¤ì¤Þ¤¹" + + #: cp/typeck.c:5462 + #, fuzzy + msgid "cast from `%T' to `%T' increases required alignment of target type" + msgstr "¥­¥ã¥¹¥È¤Ë¤è¤Ã¤Æ¥Ý¥¤¥ó¥¿¤¬¼¨¤¹·¿¤ÎÍ׵ᥢ¥é¥¤¥ó¥á¥ó¥È¤¬Áý²Ã¤·¤Þ¤¹" + + #: cp/typeck.c:5650 + msgid " in evaluation of `%Q(%#T, %#T)'" + msgstr "" + + #: cp/typeck.c:5684 + msgid "ISO C++ forbids cast to non-reference type used as lvalue" + msgstr "ISO C++ ¤Ïº¸ÊÕÃͤȤ·¤Æ»È¤ï¤ì¤ëÈ󻲾ȷ¿¤Ø¤Î¥­¥ã¥¹¥È¤ò¶Ø¤¸¤Þ¤¹" + + #: cp/typeck.c:5783 + #, fuzzy + msgid "incompatible types in assignment of `%T' to `%T'" + msgstr "%d ÈÖÌܤΰú¿ô¤¬ `%s' ¤Î·¿¤È¸ß´¹À­¤¬¤¢¤ê¤Þ¤»¤ó" + + #: cp/typeck.c:5790 + msgid "ISO C++ forbids assignment of arrays" + msgstr "ISO C++ ¤ÏÇÛÎó¤ÎÂåÆþ¤ò¶Ø¤¸¤Þ¤¹" + + #: cp/typeck.c:5805 + msgid "return value from function receives multiple initializations" + msgstr "´Ø¿ô¤«¤é¤ÎÌá¤êÃͤ¬Ê£¿ô¤Î½é´ü²½¤ò¼õ¤±¼è¤ê¤Þ¤·¤¿" + + #: cp/typeck.c:5942 + msgid " in pointer to member function conversion" + msgstr " ¥Ý¥¤¥ó¥¿¤«¤é¥á¥ó¥Ð´Ø¿ô¤Ø¤ÎÊÑ´¹¤Ç" + + #: cp/typeck.c:5950 + msgid " in pointer to member conversion" + msgstr " ¥Ý¥¤¥ó¥¿¤«¤é¥á¥ó¥Ð¤Ø¤ÎÊÑ´¹¤Ç" + + #. This is a reinterpret cast, we choose to do nothing. + #: cp/typeck.c:5961 cp/typeck.c:5980 + msgid "pointer to member cast via virtual base `%T' of `%T'" + msgstr "" + + #: cp/typeck.c:5984 + #, fuzzy + msgid "pointer to member conversion via virtual base `%T' of `%T'" + msgstr " ¥Ý¥¤¥ó¥¿¤«¤é¥á¥ó¥Ð¤Ø¤ÎÊÑ´¹¤Ç" + + #: cp/typeck.c:6054 + #, fuzzy + msgid "invalid conversion to type `%T' from type `%T'" + msgstr "¥ì¥·¡¼¥Ð·¿ `%s' ¤¬Ìµ¸ú¤Ç¤¹" + + #: cp/typeck.c:6219 + msgid "passing NULL used for non-pointer %s %P of `%D'" + msgstr "" + + #: cp/typeck.c:6222 + msgid "%s to non-pointer type `%T' from NULL" + msgstr "" + + #: cp/typeck.c:6230 + #, fuzzy + msgid "passing `%T' for %s %P of `%D'" + msgstr "°ú¿ô %d ¸Ä¤Î `%s' ¤òÅϤ·¤Þ¤¹" + + #: cp/typeck.c:6233 + msgid "%s to `%T' from `%T'" + msgstr "" + + #: cp/typeck.c:6243 + msgid "passing negative value `%E' for %s %P of `%D'" + msgstr "" + + #: cp/typeck.c:6246 + msgid "%s of negative value `%E' to `%T'" + msgstr "" + + #: cp/typeck.c:6333 + msgid "cannot convert `%T' to `%T' for argument `%P' to `%D'" + msgstr "" + + #: cp/typeck.c:6336 + #, fuzzy + msgid "cannot convert `%T' to `%T' in %s" + msgstr "¥Ý¥¤¥ó¥¿·¿¤ËÊÑ´¹¤Ç¤­¤Þ¤»¤ó" + + #: cp/typeck.c:6423 cp/typeck.c:6425 + #, fuzzy + msgid "in passing argument %P of `%+D'" + msgstr "°ú¿ô %d ¸Ä¤Î `%s' ¤òÅϤ·¤Þ¤¹" + + #: cp/typeck.c:6539 + msgid "returning reference to temporary" + msgstr "°ì»þ¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î»²¾È¤òÊÖ¤½¤¦¤È¤·¤Æ¤¤¤Þ¤¹" + + #: cp/typeck.c:6546 + msgid "reference to non-lvalue returned" + msgstr "Èóº¸ÊÕÃͤؤλ²¾È¤¬ÊÖ¤µ¤ì¤Þ¤·¤¿" + + #: cp/typeck.c:6558 + #, fuzzy + msgid "reference to local variable `%D' returned" + msgstr "Èóº¸ÊÕÃͤؤλ²¾È¤¬ÊÖ¤µ¤ì¤Þ¤·¤¿" + + #: cp/typeck.c:6561 + #, fuzzy + msgid "address of local variable `%D' returned" + msgstr "Í׵ᤵ¤ì¤¿Âç°è¥ì¥¸¥¹¥¿ÊÑ¿ô `%s' ¤Î¥¢¥É¥ì¥¹" + + #: cp/typeck.c:6592 + msgid "returning a value from a destructor" + msgstr "¥Ç¥¹¥È¥é¥¯¥¿¤«¤éÃͤòÊÖ¤½¤¦¤È¤·¤Æ¤¤¤Þ¤¹" + + #. If a return statement appears in a handler of the + #. function-try-block of a constructor, the program is ill-formed. + #: cp/typeck.c:6600 + msgid "cannot return from a handler of a function-try-block of a constructor" + msgstr "¥³¥ó¥¹¥È¥é¥¯¥¿¤Î´Ø¿ô try ¥Ö¥í¥Ã¥¯¤Î¥Ï¥ó¥É¥é¤«¤é¤Ï return ¤Ç¤­¤Þ¤»¤ó" + + #. You can't return a value from a constructor. + #: cp/typeck.c:6603 + msgid "returning a value from a constructor" + msgstr "¥³¥ó¥¹¥È¥é¥¯¥¿¤«¤éÃͤòÊÖ¤½¤¦¤È¤·¤Æ¤¤¤Þ¤¹" + + #: cp/typeck.c:6620 + msgid "return-statement with no value, in function declared with a non-void return type" + msgstr "return ʸ¤¬Ãͤò»ý¤Á¤Þ¤»¤ó¡£´Ø¿ôÀë¸À¤Ç¤ÏÈó void ¤ÎÌá¤êÃͤò»ý¤Á¤Þ¤¹" + + #: cp/typeck.c:6636 + msgid "return-statement with a value, in function declared with a void return type" + msgstr "return ʸ¤¬Ãͤò»ý¤Á¤Þ¤¹¡£´Ø¿ôÀë¸À¤Ç¤ÏÌá¤ê·¿¤¬ void ¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹" + + #: cp/typeck.c:6657 + msgid "`operator new' must not return NULL unless it is declared `throw()' (or -fcheck-new is in effect)" + msgstr "" + + #: cp/typeck2.c:54 + msgid "type `%T' is not a base type for type `%T'" + msgstr "" + + #: cp/typeck2.c:151 + #, fuzzy + msgid "cannot declare variable `%D' to be of type `%T'" + msgstr "`::main' ¤ò template ¤È¤·¤Æ¤ÏÀë¸À¤Ç¤­¤Þ¤»¤ó" + + #: cp/typeck2.c:154 + #, fuzzy + msgid "cannot declare parameter `%D' to be of type `%T'" + msgstr "`::main' ¤ò template ¤È¤·¤Æ¤ÏÀë¸À¤Ç¤­¤Þ¤»¤ó" + + #: cp/typeck2.c:157 + #, fuzzy + msgid "cannot declare field `%D' to be of type `%T'" + msgstr "`::main' ¤ò template ¤È¤·¤Æ¤ÏÀë¸À¤Ç¤­¤Þ¤»¤ó" + + #: cp/typeck2.c:161 + #, fuzzy + msgid "invalid return type for member function `%#D'" + msgstr "´Ø¿ô¤ÎÊÖ¤¹·¿¤¬´Ø¿ô¤Ç¤¢¤Ã¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó" + + #: cp/typeck2.c:163 + #, fuzzy + msgid "invalid return type for function `%#D'" + msgstr "´Ø¿ô `%s' ¤ËÂФ·¤ÆÉÔŬÀÚ¤ÊÊݸ¥¯¥é¥¹" + + #: cp/typeck2.c:166 + #, fuzzy + msgid "cannot allocate an object of type `%T'" + msgstr "`id' ·¿¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ËÂΤ¹¤ëÀÅŪ¥¢¥¯¥»¥¹¤Ç¤¹" + + #: cp/typeck2.c:173 + msgid " because the following virtual functions are abstract:" + msgstr " °Ê²¼¤Î²¾ÁÛ´Ø¿ô¤¬Ãê¾Ý¤Ç¤¢¤ë¤¿¤á¤Ç¤¹:" + + #: cp/typeck2.c:175 + msgid "\t%#D" + msgstr "" + + #: cp/typeck2.c:178 + msgid " since type `%T' has abstract virtual functions" + msgstr "" + + #: cp/typeck2.c:213 + #, fuzzy + msgid "invalid use of undefined type `%#T'" + msgstr "̤ÄêµÁ¤Î·¿ `%s %s' ¤Î»ÈÍѤÏÉÔŬÀڤǤ¹" + + #: cp/typeck2.c:214 + #, fuzzy + msgid "forward declaration of `%#T'" + msgstr "`%s' ¤¬ºÆÀë¸À¤µ¤ì¤Þ¤·¤¿" + + #: cp/typeck2.c:218 + #, fuzzy + msgid "invalid use of `%T'" + msgstr "`restrict' ¤ÎÍÑË¡¤¬ÉÔŬÀڤǤ¹" + + #: cp/typeck2.c:232 + msgid "invalid use of member (did you forget the `&' ?)" + msgstr "" + + #: cp/typeck2.c:236 + #, fuzzy + msgid "invalid use of template type parameter" + msgstr "̵¸ú¤Ê¥Ç¥Õ¥©¥ë¥È¥Æ¥ó¥×¥ì¡¼¥È°ú¿ô" + + #: cp/typeck2.c:243 + msgid "address of overloaded function with no contextual type information" + msgstr "" + + #: cp/typeck2.c:245 + msgid "overloaded function with no contextual type information" + msgstr "" + + #: cp/typeck2.c:247 + msgid "insufficient contextual information to determine type" + msgstr "" + + #: cp/typeck2.c:270 + #, fuzzy, c-format + msgid "internal error #%d" + msgstr "ÆâÉô¥¨¥é¡¼: #%d¡£" + + #: cp/typeck2.c:325 + msgid "constructor syntax used, but no constructor declared for type `%T'" + msgstr "" + + #: cp/typeck2.c:335 + msgid "initializer list construction invalid for derived class object `%D'" + msgstr "" + + #: cp/typeck2.c:337 + msgid "initializer list construction invalid for polymorphic class object `%D'" + msgstr "" + + #: cp/typeck2.c:340 cp/typeck2.c:346 cp/typeck2.c:352 + #, fuzzy + msgid "initializer list construction invalid for `%D'" + msgstr "½é´ü²½»Ò¤Ï `%s' ¤Î¥µ¥¤¥º¤ÎÆÃÄê¤Ë¼ºÇÔ¤·¤Þ¤·¤¿" + + #: cp/typeck2.c:341 + msgid "due to the presence of a constructor" + msgstr "¥³¥ó¥¹¥È¥é¥¯¥¿¤¬¤¢¤ë¤³¤È¤Ë¤è¤ë" + + #: cp/typeck2.c:347 cp/typeck2.c:353 + #, fuzzy + msgid "due to non-public access of member `%D'" + msgstr "½ÅÊ£¤·¤¿¥á¥ó¥Ð `%s'" + + #: cp/typeck2.c:365 + msgid "comma expression used to initialize return value" + msgstr "¥«¥ó¥Þ±é»»»Ò¤¬Ìá¤êÃͤò½é´ü²½¤¹¤ë¤¿¤á¤Ë»È¤ï¤ì¤Þ¤·¤¿" + + #: cp/typeck2.c:374 + msgid "cannot initialize arrays using this syntax" + msgstr "¤³¤Îʸˡ¤ò»È¤Ã¤ÆÇÛÎó¤ò½é´ü²½¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó" + + #: cp/typeck2.c:436 + #, fuzzy + msgid "ISO C++ forbids non-constant aggregate initializer expressions" + msgstr "ANSI C++ ¤ÏÄê¿ô¤Ç¤Ê¤¤½¸¹çÂΤνé´ü²½»Ò¼°¤ò¶Ø¤¸¤Þ¤¹" + + #: cp/typeck2.c:516 + msgid "initializing array with parameter list" + msgstr "ÇÛÎó¤ò²¾°ú¿ô¥ê¥¹¥È¤Ë¤è¤Ã¤Æ½é´ü²½¤·¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹" + + #: cp/typeck2.c:572 + msgid "initializer for scalar variable requires one element" + msgstr "¥¹¥«¥é¡¼ÊÑ¿ô¤Î½é´ü²½»Ò¤Ï°ì¤Ä¤ÎÍ×ÁǤòÍ׵ᤷ¤Þ¤¹" + + #: cp/typeck2.c:579 + #, fuzzy + msgid "braces around scalar initializer for `%T'" + msgstr "¥¹¥«¥é¡¼½é´ü²½»Ò¤¬¥Ö¥ì¡¼¥¹¤Ç°Ï¤Þ¤ì¤Æ¤¤¤Þ¤¹" + + #: cp/typeck2.c:582 + #, fuzzy + msgid "ignoring extra initializers for `%T'" + msgstr "(`%s' ¤Î½é´ü²½¤ÏÉÔ´°Á´¤Ç¤¹)" + + #: cp/typeck2.c:594 + #, fuzzy + msgid "variable-sized object of type `%T' may not be initialized" + msgstr "²ÄÊÑĹ¥ª¥Ö¥¸¥§¥¯¥È¤Ï½é´ü²½¤µ¤ì¤Ê¤¤¤³¤È¤Ë¤Ê¤ë¤Ç¤·¤ç¤¦" + + #: cp/typeck2.c:604 + msgid "subobject of type `%T' must be initialized by constructor, not by `%E'" + msgstr "" + + #: cp/typeck2.c:670 + msgid "aggregate has a partly bracketed initializer" + msgstr "½¸¹çÂΤ¬ÉôʬŪ¤Ë¥Ö¥é¥±¥Ã¥È¤Î½é´ü²½»Ò¤ò»ý¤Á¤Þ¤¹" + + #: cp/typeck2.c:700 cp/typeck2.c:801 + msgid "non-trivial labeled initializers" + msgstr "¼«ÌÀ¤Ç¤Ê¤¤¥é¥Ù¥ë¤Î¤Ä¤¤¤¿½é´ü²½»Ò¤Ç¤¹" + + #: cp/typeck2.c:717 + msgid "non-empty initializer for array of empty elements" + msgstr "Í×ÁǤΤʤ¤ÇÛÎó¤ËÂФ¹¤ë¡¢¶õ¤Ç¤Ï¤Ê¤¤½é´ü²½»Ò¤Ç¤¹" + + #: cp/typeck2.c:767 + msgid "initializer list for object of class with virtual base classes" + msgstr "²¾ÁÛ´ðÄ쥯¥é¥¹¤ò»ý¤Ä¥¯¥é¥¹¤Î¥ª¥Ö¥¸¥§¥¯¥ÈÍѤνé´ü²½»Ò¥ê¥¹¥È¤Ç¤¹" + + #: cp/typeck2.c:773 + msgid "initializer list for object of class with base classes" + msgstr "´ðÄ쥯¥é¥¹¤ò»ý¤Ä¥¯¥é¥¹¤Î¥ª¥Ö¥¸¥§¥¯¥ÈÍѤνé´ü²½»Ò¥ê¥¹¥È¤Ç¤¹" + + #: cp/typeck2.c:779 + msgid "initializer list for object using virtual functions" + msgstr "²¾ÁÛ´Ø¿ô¤ò»ÈÍѤ¹¤ë¥ª¥Ö¥¸¥§¥¯¥ÈÍѤνé´ü²½»Ò¥ê¥¹¥È¤Ç¤¹" + + #: cp/typeck2.c:842 cp/typeck2.c:859 + #, fuzzy + msgid "missing initializer for member `%D'" + msgstr "¥á¥ó¥Ð `%s' ¤ËÂФ¹¤ë̵¸ú¤Ê½é´üÃÍ" + + #: cp/typeck2.c:847 + #, fuzzy + msgid "uninitialized const member `%D'" + msgstr "¥á¥ó¥Ð `%s' ¤ËÂФ¹¤ë̵¸ú¤Ê½é´üÃÍ" + + #: cp/typeck2.c:850 + #, fuzzy + msgid "member `%D' with uninitialized const fields" + msgstr "̤½é´ü²½Äê¿ô¤ò ROM ¤ËÃÖ¤«¤Ê¤¤" + + #: cp/typeck2.c:853 + #, fuzzy + msgid "member `%D' is uninitialized reference" + msgstr "²¾°ú¿ô `%s' ¤¬½é´ü²½¤µ¤ì¤Þ¤·¤¿" + + #: cp/typeck2.c:896 + msgid "index value instead of field name in union initializer" + msgstr "union ½é´ü²½»Ò¤¬¥Õ¥£¡¼¥ë¥É̾¤Ç¤Ï¤Ê¤¯¥¤¥ó¥Ç¥Ã¥¯¥¹ÃͤˤʤäƤ¤¤Þ¤¹" + + #: cp/typeck2.c:908 + #, fuzzy + msgid "no field `%D' in union being initialized" + msgstr "ÉÔÌÀ¤Ê¥Õ¥£¡¼¥ë¥É `%s' ¤¬½é´ü²½»Ò¤Ç»ØÄꤵ¤ì¤Þ¤·¤¿" + + #: cp/typeck2.c:916 + #, fuzzy + msgid "union `%T' with no named members cannot be initialized" + msgstr "Ê£»¨¤Ê¥Ñ¥é¥á¥¿¤ò¤â¤Ä´Ø¿ô¤Ï inline ¤Ë¤Ç¤­¤Þ¤»¤ó" + + #: cp/typeck2.c:952 + msgid "excess elements in aggregate initializer" + msgstr "½¸¹çÂνé´ü²½»ÒÆâ¤Ç¤½¤ÎÍ×ÁǤ¬°î¤ì¤Þ¤·¤¿" + + #: cp/typeck2.c:1057 + msgid "circular pointer delegation detected" + msgstr "½Û´Ä¥Ý¥¤¥ó¥¿¤ÎÂåɽ¤ò¸¡½Ð¤·¤Þ¤·¤¿" + + #: cp/typeck2.c:1070 + #, fuzzy + msgid "base operand of `->' has non-pointer type `%T'" + msgstr "`->' ¤Î¥Ù¡¼¥¹¥ª¥Ú¥é¥ó¥É¤¬¥Ý¥¤¥ó¥¿¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: cp/typeck2.c:1084 + msgid "result of `operator->()' yields non-pointer result" + msgstr "`operator->()'¤Î·ë²Ì¤¬Èó¥Ý¥¤¥ó¥¿¤Î·ë²Ì¤ò¤â¤¿¤é¤·¤Þ¤¹" + + #: cp/typeck2.c:1086 + msgid "base operand of `->' is not a pointer" + msgstr "`->' ¤Î¥Ù¡¼¥¹¥ª¥Ú¥é¥ó¥É¤¬¥Ý¥¤¥ó¥¿¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: cp/typeck2.c:1152 + #, fuzzy + msgid "`%E' cannot be used as a member pointer, since it is of type `%T'" + msgstr "\"%s\" ¤Ï C++ ¤Î±é»»»Ò¤Ç¤¢¤ê¡¢¥Þ¥¯¥í̾¤È¤·¤Æ»ÈÍѤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó" + + #: cp/typeck2.c:1159 + msgid "cannot apply member pointer `%E' to `%E', which is of non-aggregate type `%T'" + msgstr "" + + #: cp/typeck2.c:1168 + msgid "member type `%T::' incompatible with object type `%T'" + msgstr "" + + #: cp/typeck2.c:1205 + #, fuzzy + msgid "`%T' fails to be a typedef or built-in type" + msgstr "`%s' ¤ò typedef ¤Þ¤¿¤ÏÁȤ߹þ¤ß·¿¤Ë¤Ç¤­¤Þ¤»¤ó" + + #: cp/typeck2.c:1278 + #, c-format + msgid "ISO C++ forbids defining types within %s" + msgstr "ISO C++ ¤Ï %s Ãæ¤Î·¿ÄêµÁ¤ò¶Ø¤¸¤Þ¤¹" + + #: cp/xref.c:826 + #, fuzzy, c-format + msgid "can't create cross-reference file `%s'" + msgstr "Áê¸ß»²¾È¥Õ¥¡¥¤¥ë `%s' ¤òºî¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó" + + #: f/com.c:11595 + msgid "no INTEGER type can hold a pointer on this configuration" + msgstr "¸½ºß¤ÎÀßÄê¤Ç¤ÏÈó INTEGER ·¿¤¬¥Ý¥¤¥ó¥¿¤òÊÝ»ý¤Ç¤­¤Þ¤¹" + + #: f/com.c:11820 + #, c-format + msgid "configuration: REAL, INTEGER, and LOGICAL are %d bits wide," + msgstr "ÀßÄê: REAL, INTEGER µÚ¤Ó LOGICAL ¤Ï %d ¥Ó¥Ã¥ÈÉý¤Ç¡¢" + + #: f/com.c:11822 + #, c-format + msgid "and pointers are %d bits wide, but g77 doesn't yet work" + msgstr "¥Ý¥¤¥ó¥¿¤Ï %d ¥Ó¥Ã¥ÈÉý¤Ç¤¹¤¬¡¢¤½¤ì¤éÁ´¤Æ¤¬ 32 ¥Ó¥Ã¥ÈÉý" + + #: f/com.c:11824 + #, fuzzy + msgid "properly unless they all are 32 bits wide" + msgstr "¤Ç¤Ê¤¤¤È g77 ¤ÏÀµ¾ï¤Ëưºî¤·¤Þ¤»¤ó¡£" + + #: f/com.c:11825 + msgid "Please keep this in mind before you report bugs. g77 should" + msgstr "¥Ð¥°¥ì¥Ý¡¼¥È¤òÁ÷¤ëÁ°¤Ë¤³¤Î»ö¤ò¿´¤Ëα¤á¤ÆÃÖ¤¤¤Æ¤¯¤À¤µ¤¤¡£" + + #: f/com.c:11826 + #, fuzzy + msgid "support non-32-bit machines better as of version 0.6" + msgstr "g77 ¤Ï¤¤¤º¤ì version 0.6 ƱÍͤËÈó 32 ¥Ó¥Ã¥Èµ¡¤Ç¤â¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤¹" + + #. I/O will probably crash. + #: f/com.c:11834 + #, c-format + msgid "configuration: char * holds %d bits, but ftnlen only %d" + msgstr "ÀßÄê: char * ¤Ï %d ¥Ó¥Ã¥È³ÎÊݤ·¤Þ¤¹¤¬¡¢ftnlen ¤¬¤¿¤Ã¤¿ %d ¥Ó¥Ã¥È¤Ç¤¹" + + #. ASSIGN 10 TO I will crash. + #: f/com.c:11843 + #, c-format + msgid "" + "configuration: char * holds %d bits, but INTEGER only %d --\n" + " ASSIGN statement might fail" + msgstr "" + "ÀßÄê: char * ¤Ï %d ¥Ó¥Ã¥È³ÎÊݤ·¤Þ¤¹¤¬¡¢INTEGER ¤¬¤¿¤Ã¤¿ %d ¥Ó¥Ã¥È¤Ç¤¹ --\n" + " ¶²¤é¤¯ ASSIGN ʸ¤¬¼ºÇÔ¤·¤Þ¤¹" + + #: f/com.c:15573 + #, fuzzy + msgid "directory name must immediately follow -I" + msgstr "¥Ç¥¤¥ì¥¯¥È¥ê̾¤Ï -I ¤Î¤¹¤°¸å¤í¤Ë¤Ä¤±¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: f/g77spec.c:254 + #, c-format + msgid "overflowed output arg list for `%s'" + msgstr "`%s' ÍѤνÐÎϰú¿ô¥ê¥¹¥È¤¬¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤Þ¤·¤¿" + + #: f/g77spec.c:393 + msgid "--driver no longer supported" + msgstr "--driver ¤ÏºÇÁ᥵¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó" + + #: f/g77spec.c:406 + #, c-format + msgid "argument to `%s' missing" + msgstr "`%s' ¤Ø¤Î°ú¿ô¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: f/g77spec.c:410 + #, fuzzy + msgid "no input files; unwilling to write output files" + msgstr "ÆþÎÏ¥Õ¥¡¥¤¥ë¤¬¤¢¤ê¤Þ¤»¤ó -- ÉÔËܰդʽÐÎÏ¥Õ¥¡¥¤¥ë¤Ø¤Î½ñ¤­¹þ¤ß" + + #: f/lang-options.h:33 + msgid "Print g77-specific compiler version info, run internal tests" + msgstr "g77 ¸ÇÍ­¤Î¥³¥ó¥Ñ¥¤¥é¥Ð¡¼¥¸¥ç¥ó¾ðÊó¤òɽ¼¨¡¢ÆâÉô¥Æ¥¹¥È¤Î¼Â¹Ô" + + #: f/lang-options.h:37 + msgid "Program is written in typical FORTRAN 66 dialect" + msgstr "¥×¥í¥°¥é¥à¤¬Åµ·¿Åª¤Ê FORTRAN 66 Êý¸À¤Ç½ñ¤«¤ì¤Æ¤¤¤ë" + + #: f/lang-options.h:40 + msgid "Program is written in typical Unix f77 dialect" + msgstr "¥×¥í¥°¥é¥à¤¬Åµ·¿Åª¤Ê Unix f77 Êý¸À¤Ç½ñ¤«¤ì¤Æ¤¤¤ë" + + #: f/lang-options.h:42 + msgid "Program does not use Unix-f77 dialectal features" + msgstr "¥×¥í¥°¥é¥à¤¬ Unix-f77 Êý¸À¤Îµ¡Ç½¤ò»È¤Ã¤Æ¤¤¤Ê¤¤" + + #: f/lang-options.h:44 + msgid "Program is written in Fortran-90-ish dialect" + msgstr "¥×¥í¥°¥é¥à¤¬ Fortran-90 ŪÊý¸À¤Ç½ñ¤«¤ì¤Æ¤¤¤ë" + + #: f/lang-options.h:48 + msgid "Treat local vars and COMMON blocks as if they were named in SAVE statements" + msgstr "¥í¡¼¥«¥ëÊÑ¿ô¤È COMMON ¥Ö¥í¥Ã¥¯¤ò SAVE ʸ¤Ç̾Á°ÉÕ¤±¤é¤ì¤¿¤è¤¦¤Ë¼è¤ê°·¤¦" + + #: f/lang-options.h:50 + msgid "Allow $ in symbol names" + msgstr "$ ¤ò¥·¥ó¥Ü¥ë̾¤È¤·¤Æ»È¤¨¤ë¤è¤¦¤Ë¤¹¤ë" + + #: f/lang-options.h:54 + msgid "f2c-compatible code need not be generated" + msgstr "f2c ¸ß´¹¥³¡¼¥É¤òÀ¸À®¤¹¤ëɬÍפ¬¤Ê¤¤" + + #: f/lang-options.h:57 + msgid "Unsupported; do not generate libf2c-calling code" + msgstr "¥µ¥Ý¡¼¥È¤µ¤ì¤Ê¤¤ -- libf2c-calling ¥³¡¼¥É¤òÀ¸À®¤·¤Ê¤¤" + + #: f/lang-options.h:59 + msgid "Unsupported; affects code-generation of arrays" + msgstr "¥µ¥Ý¡¼¥È¤µ¤ì¤Ê¤¤ -- ÇÛÎó¤Î¥³¡¼¥ÉÀ¸À®¤Ë±Æ¶Á¤¹¤ë" + + #: f/lang-options.h:62 + msgid "Program is written in Fortran-90-ish free form" + msgstr "¥×¥í¥°¥é¥à¤Ï Fortran-90 Ū¥Õ¥ê¡¼¥Õ¥©¡¼¥à¤Ç½ñ¤«¤ì¤Æ¤¤¤ë" + + #: f/lang-options.h:67 + msgid "Warn about use of (only a few for now) Fortran extensions" + msgstr "Fortran ³ÈÄ¥(º£¤Ï¾¯¤Ê¤¤¤¬)¤Î»ÈÍѤˤĤ¤¤Æ·Ù¹ð¤¹¤ë" + + #: f/lang-options.h:70 + msgid "Program is written in VXT (Digital-like) FORTRAN" + msgstr "¥×¥í¥°¥é¥à¤Ï VXT (Digital) FORTRAN ¤Ç½ñ¤«¤ì¤Æ¤¤¤ë" + + #: f/lang-options.h:73 + msgid "Disallow all ugly features" + msgstr "Á´¤Æ¤Î½¹¤¤µ¡Ç½¤òµö²Ä¤·¤Ê¤¤" + + #: f/lang-options.h:76 + msgid "Hollerith and typeless constants not passed as arguments" + msgstr "Hollerith ¤ä·¿¤Ê¤·Äê¿ô¤ò°ú¿ô¤È¤·¤ÆÅϤµ¤Ê¤¤" + + #: f/lang-options.h:78 + msgid "Allow ordinary copying of ASSIGN'ed vars" + msgstr "ASSIGN ¤µ¤ì¤¿ÊÑ¿ô¤ÎÄ̾ï¤Î¥³¥Ô¡¼¤òµö²Ä¤¹¤ë" + + #: f/lang-options.h:81 + msgid "Dummy array dimensioned to (1) is assumed-size" + msgstr "¥À¥ß¡¼ÇÛÎó¤Î¼¡¸µ¤ò (1) ¤È¤ß¤Ê¤¹" + + #: f/lang-options.h:84 + msgid "Trailing comma in procedure call denotes null argument" + msgstr "¥×¥í¥·¡¼¥¸¥ã¸Æ¤Ó½Ð¤·Ãæ¤ÎϢ³¥«¥ó¥Þ¤Ç null °ú¿ô¤òɽ¸½¤¹¤ë" + + #: f/lang-options.h:87 + msgid "Allow REAL(Z) and AIMAG(Z) given DOUBLE COMPLEX Z" + msgstr "DOUBLE COMPLEX Z ¤Ç¤Î REAL(Z) ¤È AIMAG(Z) ¤òµö²Ä¤¹¤ë" + + #: f/lang-options.h:91 + msgid "Initialization via DATA and PARAMETER is type-compatible" + msgstr "DATA ¤ä PARAMETER ·Ðͳ¤Î½é´ü²½¤Ï·¿¸ß´¹¤Ç¤¢¤ë" + + #: f/lang-options.h:93 + msgid "Allow INTEGER and LOGICAL interchangeability" + msgstr "INTEGER ¤È LOGICAL ¤ÏÁê¸ß¤ËÊѹ¹²Äǽ¤Ç¤¢¤ë¤È¤¹¤ë" + + #: f/lang-options.h:96 + msgid "Print internal debugging-related info" + msgstr "ÆâÉô¥Ç¥Ð¥Ã¥°´ØÏ¢¾ðÊó¤òɽ¼¨¤¹¤ë" + + #: f/lang-options.h:99 + msgid "Initialize local vars and arrays to zero" + msgstr "¥í¡¼¥«¥ëÊÑ¿ô¤äÇÛÎó¤ò¥¼¥í¤Ë½é´ü²½¤¹¤ë" + + #: f/lang-options.h:103 + msgid "Backslashes in character/hollerith constants not special (C-style)" + msgstr "ʸ»ú/hollerith Äê¿ô¤Ç¤Î¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥å¤òÆÃ¼ì¤Ê¤â¤Î¤È¤·¤Ê¤¤ (C ¼°)" + + #: f/lang-options.h:105 + msgid "Have front end emulate COMPLEX arithmetic to avoid bugs" + msgstr "COMPLEX ·×»»¤Î¥Ð¥°¤ò²óÈò¤ò¥¨¥ß¥å¥ì¡¼¥È¤¹¤ë¥Õ¥í¥ó¥È¥¨¥ó¥É¤ò»ý¤Ä" + + #: f/lang-options.h:109 + msgid "Disable the appending of underscores to externals" + msgstr "³°ÉôÊÑ¿ô¤Ë¥¢¥ó¥À¡¼¥¹¥³¥¢¤òÉÕ¤±Â­¤µ¤Ê¤¤" + + #: f/lang-options.h:112 + msgid "Never append a second underscore to externals" + msgstr "³°ÉôÊÑ¿ô¤ËÆó¤ÄÌܤΥ¢¥ó¥À¡¼¥¹¥³¥¢¤òÉÕ¤±Â­¤µ¤Ê¤¤" + + #: f/lang-options.h:114 + msgid "Intrinsics spelled as e.g. SqRt" + msgstr "intrinsic ¤¬Î㤨¤Ð SqRt ¤ÎÍѤËÄÖ¤é¤ì¤ë" + + #: f/lang-options.h:116 + msgid "Intrinsics in uppercase" + msgstr "intrinsic ¤ò±ÑÂçʸ»ú¤È¤¹¤ë" + + #: f/lang-options.h:119 + msgid "Intrinsics letters in arbitrary cases" + msgstr "intrinsic ʸ»ú¤ÏǤ°Õ¤Î¥±¡¼¥¹¤È¤¹¤ë" + + #: f/lang-options.h:121 + msgid "Language keywords spelled as e.g. IOStat" + msgstr "¸À¸ìͽÌó¸ì¤¬Î㤨¤Ð IOStat ¤ÎÍѤËÄÖ¤é¤ì¤ë" + + #: f/lang-options.h:123 + msgid "Language keywords in uppercase" + msgstr "¸À¸ìͽÌó¸ì¤Ï±ÑÂçʸ»ú¤È¤¹¤ë" + + #: f/lang-options.h:126 + msgid "Language keyword letters in arbitrary cases" + msgstr "¸À¸ìͽÌó¸ìʸ»ú¤ÏǤ°Õ¤Î¥±¡¼¥¹¤È¤¹¤ë" + + #: f/lang-options.h:128 + msgid "Internally convert most source to uppercase" + msgstr "ÆâÉôŪ¤ÊÊÑ´¹¤Ç¤Ï¥½¡¼¥¹¤ÎËØ¤ó¤É¤ò±ÑÂçʸ»ú¤È¤¹¤ë" + + #: f/lang-options.h:131 + msgid "Internally preserve source case" + msgstr "ÆâÉôŪ¤Ë¥½¡¼¥¹¤Î¥±¡¼¥¹¤òÊÝ»ý¤¹¤ë" + + #: f/lang-options.h:133 + msgid "Symbol names spelled in mixed case" + msgstr "¥·¥ó¥Ü¥ë̾¤Ï¥±¡¼¥¹º®ºß¤ÇÄÖ¤é¤ì¤ë" + + #: f/lang-options.h:135 + msgid "Symbol names in uppercase" + msgstr "¥·¥ó¥Ü¥ë̾¤òÂçʸ»ú¤È¤¹¤ë" + + #: f/lang-options.h:137 + msgid "Symbol names in lowercase" + msgstr "¥·¥ó¥Ü¥ë̾¤ò¾®Ê¸»ú¤È¤¹¤ë" + + #: f/lang-options.h:140 + msgid "Program written in uppercase" + msgstr "¥×¥í¥°¥é¥à¤¬±ÑÂçʸ»ú¤Ç½ñ¤«¤ì¤Æ¤¤¤ë" + + #: f/lang-options.h:142 + msgid "Program written in lowercase" + msgstr "¥×¥í¥°¥é¥à¤¬±Ñ¾®Ê¸»ú¤Ç½ñ¤«¤ì¤Æ¤¤¤ë" + + #: f/lang-options.h:144 + msgid "Program written in strict mixed-case" + msgstr "¥×¥í¥°¥é¥à¤¬¸·Ì©¤Ë¥±¡¼¥¹º®ºß¤Ç½ñ¤«¤ì¤Æ¤¤¤ë" + + #: f/lang-options.h:146 + msgid "Compile as if program written in uppercase" + msgstr "¥×¥í¥°¥é¥à¤¬±ÑÂçʸ»ú¤Ç½ñ¤«¤ì¤¿Íͤ˥³¥ó¥Ñ¥¤¥ë¤¹¤ë" + + #: f/lang-options.h:148 + msgid "Compile as if program written in lowercase" + msgstr "¥×¥í¥°¥é¥à¤¬±Ñ¾®Ê¸»ú¤Ç½ñ¤«¤ì¤¿Íͤ˥³¥ó¥Ñ¥¤¥ë¤¹¤ë" + + #: f/lang-options.h:150 + msgid "Preserve all spelling (case) used in program" + msgstr "¥×¥í¥°¥é¥à¤Ç»È¤ï¤ì¤¿ÄÖ¤ê(¤Î¥±¡¼¥¹)¤òÁ´¤ÆÊÝ»ý¤¹¤ë" + + #: f/lang-options.h:152 + msgid "Delete libU77 intrinsics with bad interfaces" + msgstr "libU77 intrinsic ¤òÉÔÀµ¤Ê interface ¤È¶¦¤Ëºï½ü¤¹¤ë" + + #: f/lang-options.h:154 + msgid "Disable libU77 intrinsics with bad interfaces" + msgstr "libU77 intrinsic ¤òÉÔÀµ¤Ê interface ¤È¶¦¤Ë̵¸ú²½¤¹¤ë" + + #: f/lang-options.h:157 + msgid "Hide libU77 intrinsics with bad interfaces" + msgstr "libU77 intrinsic ¤òÉÔÀµ¤Ê interface ¤È¶¦¤Ë±£¤¹" + + #: f/lang-options.h:159 + msgid "Delete non-FORTRAN-77 intrinsics f2c supports" + msgstr "f2c ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤òºï½ü¤¹¤ë" + + #: f/lang-options.h:161 + msgid "Disable non-FORTRAN-77 intrinsics f2c supports" + msgstr "f2c ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤ò̵¸ú²½¤¹¤ë" + + #: f/lang-options.h:164 + msgid "Hide non-FORTRAN-77 intrinsics f2c supports" + msgstr "f2c ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤ò±£¤¹" + + #: f/lang-options.h:166 + msgid "Delete non-FORTRAN-77 intrinsics F90 supports" + msgstr "F90 ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤òºï½ü¤¹¤ë" + + #: f/lang-options.h:168 + msgid "Disable non-FORTRAN-77 intrinsics F90 supports" + msgstr "F90 ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤ò̵¸ú²½¤¹¤ë" + + #: f/lang-options.h:171 + msgid "Hide non-FORTRAN-77 intrinsics F90 supports" + msgstr "F90 ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤ò±£¤¹" + + #: f/lang-options.h:173 + msgid "Delete non-FORTRAN-77 intrinsics g77 supports" + msgstr "g77 ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤òºï½ü¤¹¤ë" + + #: f/lang-options.h:175 + msgid "Disable non-FORTRAN 77 intrinsics F90 supports" + msgstr "g77 ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤ò̵¸ú²½¤¹¤ë" + + #: f/lang-options.h:178 + msgid "Hide non-FORTRAN 77 intrinsics F90 supports" + msgstr "g77 ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤ò±£¤¹" + + #: f/lang-options.h:180 + msgid "Delete MIL-STD 1753 intrinsics" + msgstr "MIL-STD 1753 intrinsic ¤òºï½ü¤¹¤ë" + + #: f/lang-options.h:182 + msgid "Disable MIL-STD 1753 intrinsics" + msgstr "MIL-STD 1753 intrinsic ¤ò̵¸ú²½¤¹¤ë" + + #: f/lang-options.h:185 + msgid "Hide MIL-STD 1753 intrinsics" + msgstr "MIL-STD 1753 intrinsic ¤ò±£¤¹" + + #: f/lang-options.h:187 + msgid "Delete libU77 intrinsics" + msgstr "libU77 intrinsic ¤òºï½ü¤¹¤ë" + + #: f/lang-options.h:189 + msgid "Disable libU77 intrinsics" + msgstr "libU77 intrinsic ¤ò̵¸ú²½¤¹¤ë" + + #: f/lang-options.h:192 + msgid "Hide libU77 intrinsics" + msgstr "libU77 intrinsic ¤ò±£¤¹" + + #: f/lang-options.h:194 + msgid "Delete non-FORTRAN-77 intrinsics VXT FORTRAN supports" + msgstr "VXT FORTRAN ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤òºï½ü¤¹¤ë" + + #: f/lang-options.h:196 + msgid "Disable non-FORTRAN-77 intrinsics VXT FORTRAN supports" + msgstr "VXT FORTRAN ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤ò̵¸ú²½¤¹¤ë" + + #: f/lang-options.h:199 + msgid "Hide non-FORTRAN-77 intrinsics VXT FORTRAN supports" + msgstr "VXT FORTRAN ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÈó FORTRAN-77 intrinsics ¤ò±£¤¹" + + #: f/lang-options.h:201 + msgid "Treat initial values of 0 like non-zero values" + msgstr "0 ¤Î½é´ü²½ÃͤòÈó¥¼¥íÃͤȤ·¤Æ¼è¤ê°·¤¦" + + #: f/lang-options.h:204 + msgid "Emit special debugging information for COMMON and EQUIVALENCE (disabled)" + msgstr "COMMON ¤ä EQUIVALENCE ÍÑ¤ÎÆÃÊ̤ʥǥХå°¾ðÊó¤òȯ¹Ô¤¹¤ë¡Ê̵¸ú²½¤µ¤ì¤Æ¤¤¤ë¡Ë" + + #: f/lang-options.h:207 + msgid "Take at least one trip through each iterative DO loop" + msgstr "ºÇÄã¤Ç¤â°ì²ó¤Ï³ÆÈ¿Éü DO ¥ë¡¼¥×¤¬½èÍý¤µ¤ì¤ë¤È¤¹¤ë" + + #: f/lang-options.h:211 + msgid "Print names of program units as they are compiled" + msgstr "¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤¿¥×¥í¥°¥é¥àñ°Ì¤Î̾Á°¤òɽ¼¨¤¹¤ë" + + #: f/lang-options.h:214 + msgid "Disable fatal diagnostics about inter-procedural problems" + msgstr "inter-procedural ÌäÂê¤Ë¤Ä¤¤¤Æ¤ÎÃ×̿Ū¤Ê¿ÇÃÇɽ¼¨¤òɽ¼¨¤·¤Ê¤¤" + + #: f/lang-options.h:216 + msgid "Make prefix-radix non-decimal constants be typeless" + msgstr "ÈóÀ°¿ôÄê¿ô¤ÎÀÜÈø´ð¿ô¤¬·¿¤Ê¤·¤Ç¤¢¤ë¤È¤¹¤ë" + + #: f/lang-options.h:219 + msgid "Generate code to check subscript and substring bounds" + msgstr "ÇÛÎó¤Îź»ú¤Èź»ú¶­³¦¤ò¸¡ºº¤¹¤ë¥³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: f/lang-options.h:222 + msgid "Fortran-specific form of -fbounds-check" + msgstr "Fortran ¸ÇÍ­¤Î -fbounds-check ¤Î·Á¼°" + + #: f/lang-options.h:226 + msgid "Disable warnings about inter-procedural problems" + msgstr "inter-procedural ÌäÂê¤Ë¤Ä¤¤¤Æ¤Î·Ù¹ðɽ¼¨¤òɽ¼¨¤·¤Ê¤¤" + + #: f/lang-options.h:230 + msgid "Warn about constructs with surprising meanings" + msgstr "²ò¼á¤Ë¸í²ò¤ò¾·¤¯¤â¤Î¤Ë¤Ä¤¤¤Æ·Ù¹ð¤¹¤ë" + + #: f/lang-options.h:235 + msgid "Add a directory for INCLUDE searching" + msgstr "INCLUDE õº÷ÍѤΥǥ£¥ì¥¯¥È¥ê¤òÄɲ乤ë" + + #: f/lang-options.h:237 + msgid "Set the maximum line length" + msgstr "¹Ô¤ÎŤµ¤ÎºÇÂçÃͤòÀßÄꤹ¤ë" + + #: f/lex.c:583 + msgid "the meaning of `\\x' varies with -traditional" + msgstr "`\\x' ¤Î°ÕÌ£¤Ï -traditional ¤ò¤Ä¤±¤¿¾ì¹ç¤È°Û¤Ê¤ê¤Þ¤¹" + + #: f/lex.c:620 + msgid "hex escape out of range" + msgstr "16 ¿Ê¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹¤¬Èϰϳ°¤Ç¤¹" + + #: f/lex.c:666 + msgid "the meaning of `\\a' varies with -traditional" + msgstr "-traditional ¤Ç¤Ï `\\a' ¤Î°ÕÌ£¤¬°Û¤Ê¤ê¤Þ¤¹" + + #: f/lex.c:682 + #, c-format + msgid "non-ANSI-standard escape sequence, `\\%c'" + msgstr "Èó ANSI ɸ½à¤Î¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹¡¢`\\%c'" + + #: f/lex.c:695 + #, fuzzy, c-format + msgid "non-ISO escape sequence `\\%c'" + msgstr "Èó ANSI ¤Î¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹¡¢`\\%c'" + + #: f/lex.c:699 + #, c-format + msgid "unknown escape sequence `\\%c'" + msgstr "ÉÔÌÀ¤Ê¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹ `\\%c'" + + #: f/lex.c:701 + #, c-format + msgid "unknown escape sequence: `\\' followed by char code 0x%x" + msgstr "ÉÔÌÀ¤Ê¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹: `\\' ¤Î¸å¤Ëʸ»ú¥³¡¼¥É 0x%x" + + #: f/lex.c:778 + #, fuzzy + msgid "badly formed directive -- no closing quote" + msgstr "ÉÔÀµ¤Ê·Á¤Î¥Ç¥£¥ì¥¯¥Æ¥£¥Ö -- ÊĤ¸¥¯¥©¡¼¥È¤¬¤¢¤ê¤Þ¤»¤ó" + + #: f/lex.c:998 + #, fuzzy + msgid "bad directive -- missing close-quote" + msgstr "ÉÔÀµ¤Ê¥Ç¥£¥ì¥¯¥Æ¥£¥Ö -- ÊĤ¸¥¯¥©¡¼¥È¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: f/lex.c:1112 + #, c-format + msgid "ignoring pragma: %s" + msgstr "pragma ¤ò̵»ë¤·¤Þ¤¹: %s" + + #: f/lex.c:1319 f/lex.c:1363 + #, fuzzy + msgid "use `#line ...' instead of `# ...' in first line" + msgstr "ºÇ½é¤Î¹Ô¤Ç¤Ï `# ...' ¤ÎÂå¤ê¤Ë `#line ...' ¤ò»È¤¤¤Þ¤·¤ç¤¦" + + #: f/ste.c:1404 f/ste.c:1755 + msgid "ASSIGNed FORMAT specifier is too small" + msgstr "ASSIGN ¤µ¤ì¤¿ FORMAT »ØÄê»Ò¤¬¾®¤µ¤¹¤®¤Þ¤¹" + + #: f/ste.c:2964 + msgid "ASSIGN to variable that is too small" + msgstr "ASSIGN Àè¤ÎÊÑ¿ô¤¬¾®¤µ¤¹¤®¤Þ¤¹" + + #: f/ste.c:2992 + msgid "ASSIGNed GOTO target variable is too small" + msgstr "ASSIGN ¤µ¤ì¤¿ GOTO ÀèÊÑ¿ô¤¬¾®¤µ¤¹¤®¤Þ¤¹" + + #: f/top.c:238 + #, c-format + msgid "%s no longer supported -- try -fvxt" + msgstr "%s ¤ÏºÇÁ᥵¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó -- -fvxt ¤È¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤" + + #: f/top.c:240 + #, c-format + msgid "%s no longer supported -- try -fno-vxt -ff90" + msgstr "%s ¤ÏºÇÁ᥵¥Ý¡¼¥È¤µ¤ì¤Þ¤»¤ó -- -fno-vxt -ff90 ¤È¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤" + + #: f/top.c:308 f/top.c:310 + #, c-format + msgid "%s disabled, use normal debugging flags" + msgstr "%s ¤¬Ìµ¸ú¤Ç¤¹¡£Ä̾ï¥Ç¥Ð¥Ã¥°¥Õ¥é¥°¤ò»È¤¤¤Þ¤·¤ç¤¦" + + #: java/check-init.c:915 + #, c-format + msgid "internal error in check-init: tree code not implemented: %s" + msgstr "check-init ¤ÇÆâÉô¥¨¥é¡¼: ¥Ä¥ê¡¼¥³¡¼¥É¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó: %s" + + #: java/check-init.c:988 + #, fuzzy, c-format + msgid "final field '%s' may not have been initialized" + msgstr "²ÄÊÑĹ¥ª¥Ö¥¸¥§¥¯¥È¤Ï½é´ü²½¤µ¤ì¤Ê¤¤¤³¤È¤Ë¤Ê¤ë¤Ç¤·¤ç¤¦" + + #: java/class.c:567 java/class.c:592 + msgid "internal error - too many interface type" + msgstr "ÆâÉô¥¨¥é¡¼ - interface ·¿¤¬Â¿¤¹¤®¤Þ¤¹" + + #: java/class.c:742 + msgid "bad method signature" + msgstr "ÉÔÀµ¤Ê¥á¥½¥Ã¥É¥·¥°¥Í¥¤¥Á¥ã¤Ç¤¹" + + #: java/class.c:787 + msgid "misplaced ConstantValue attribute (not in any field)" + msgstr "ConstantValue °À­¤Î¾ì½ê¤ò´Ö°ã¤¨¤Æ¤¤¤Þ¤¹¡Ê¤É¤Î¥Õ¥£¡¼¥ë¥É¤Ç¤â¤¢¤ê¤Þ¤»¤ó¡Ë" + + #: java/class.c:789 + #, fuzzy, c-format + msgid "duplicate ConstantValue attribute for field '%s'" + msgstr "¥Õ¥£¡¼¥ë¥É '%s' ¤Î ConstantValue °À­¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹" + + #: java/class.c:800 + #, fuzzy, c-format + msgid "ConstantValue attribute of field '%s' has wrong type" + msgstr "¥Õ¥£¡¼¥ë¥É '%s' ¤Î ConstantValue °À­¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹" + + #: java/class.c:1145 + #, c-format + msgid "field '%s' not found in class" + msgstr "¥Õ¥£¡¼¥ë¥É '%s' ¤¬¥¯¥é¥¹Æâ¤Ë¸«¤Ä¤«¤ê¤Þ¤»¤ó" + + #: java/class.c:1403 + msgid "abstract method in non-abstract class" + msgstr "abstract ¥á¥½¥Ã¥É¤¬ÈóÃê¾Ý¥¯¥é¥¹¤Ë¤¢¤ê¤Þ¤¹" + + #: java/class.c:2088 + #, c-format + msgid "non-static method '%s' overrides static method" + msgstr "ÈóÀÅŪ¥á¥½¥Ã¥É '%s' ¤¬ÀÅŪ¥á¥½¥Ã¥É¤ò¥ª¡¼¥Ð¡¼¥é¥¤¥É¤·¤Æ¤¤¤Þ¤¹" + + #: java/decl.c:1521 + #, c-format + msgid "In %s: overlapped variable and exception ranges at %d" + msgstr "%s Æâ: ÊÑ¿ô¤ÈÎã³°ÈϰϤ¬ %d ¤Ç½Å¤Ê¤Ã¤Æ¤¤¤Þ¤¹" + + #: java/decl.c:1609 + msgid "bad type in parameter debug info" + msgstr "²¾°ú¿ô¥Ç¥Ð¥Ã¥°¾ðÊó¤ËÉÔÀµ¤Ê·¿¤¬¤¢¤ê¤Þ¤¹" + + #: java/decl.c:1619 + #, c-format + msgid "bad PC range for debug info for local `%s'" + msgstr "¥í¡¼¥«¥ë¤Î `%s' ÍѥǥХå°¾ðÊó¤Î¤¿¤á¤Î PC ÈϰϤ¬ÉÔÀµ¤Ç¤¹" + + #: java/expr.c:550 + msgid "stack underflow - dup* operation" + msgstr "¥¹¥¿¥Ã¥¯¥¢¥ó¥À¡¼¥Õ¥í¡¼ - dup* Áàºî" + + #: java/expr.c:1503 + #, c-format + msgid "reference `%s' is ambiguous: appears in interface `%s' and interface `%s'" + msgstr "»²¾È `%s' ¤ÏÛ£Ëæ¤Ç¤¹: interface `%s' ¤È interface `%s' ¤Ë¸½¤ì¤Þ¤·¤¿" + + #: java/expr.c:1532 + #, c-format + msgid "field `%s' not found" + msgstr "¥Õ¥£¡¼¥ë¥É `%s' ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó" + + #: java/expr.c:1683 + msgid "ret instruction not implemented" + msgstr "ret Ì¿Îá¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: java/expr.c:1819 + #, c-format + msgid "method '%s' not found in class" + msgstr "¥á¥½¥Ã¥É '%s' ¤Ï¥¯¥é¥¹Æâ¤Ë¸«¤Ä¤«¤ê¤Þ¤»¤ó" + + #: java/expr.c:2023 + #, c-format + msgid "failed to find class '%s'" + msgstr "'%s' ¥¯¥é¥¹¤ò¸«¤Ä¤±¤ë¤Î¤Ë¼ºÇÔ¤·¤Þ¤·¤¿" + + #: java/expr.c:2035 + #, fuzzy, c-format + msgid "class '%s' has no method named '%s' matching signature '%s'" + msgstr "¥¯¥é¥¹ '%s' ¤Ï̾Á°¤¬ '%s' ¤Ç¥·¥°¥Í¥¤¥Á¥ã '%s' ¤È°ìÃפ¹¤ë¥á¥½¥Ã¥É¤ò»ý¤Ã¤Æ¤¤¤Þ¤»¤ó" + + #: java/expr.c:2045 + msgid "invokestatic on non static method" + msgstr "ÈóÀÅŪ¥á¥½¥Ã¥É¤Ë invokestatic ¤·¤Þ¤·¤¿" + + #: java/expr.c:2050 + msgid "invokestatic on abstract method" + msgstr "Ãê¾Ý¥á¥½¥Ã¥É¤Ë invokestatic ¤·¤Þ¤·¤¿" + + #: java/expr.c:2058 + msgid "invoke[non-static] on static method" + msgstr "ÀÅŪ¥á¥½¥Ã¥É¤Ë invoke[Èó static] ¤·¤Þ¤·¤¿" + + #: java/expr.c:2335 + #, fuzzy, c-format + msgid "missing field '%s' in '%s'" + msgstr "¥Õ¥£¡¼¥ë¥É '%s'('%s' Æâ) ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: java/expr.c:2341 + #, fuzzy, c-format + msgid "mismatching signature for field '%s' in '%s'" + msgstr "¥Õ¥£¡¼¥ë¥É '%s'('%s' Æâ) ¤Î¥·¥°¥Í¥¤¥Á¥ã¤¬°ìÃפ·¤Þ¤»¤ó" + + #: java/expr.c:2364 + #, c-format + msgid "assignment to final field `%s' not in field's class" + msgstr "final ¥Õ¥£¡¼¥ë¥É `%s' ¤Ø¤ÎÂåÆþ¤Ç¤¹¤¬¡¢¤½¤Î¥Õ¥£¡¼¥ë¥É¤Î¥¯¥é¥¹Æâ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: java/expr.c:2369 + #, c-format + msgid "assignment to final static field `%s' not in class initializer" + msgstr "final static ¥Õ¥£¡¼¥ë¥É `%s' ¤Ø¤ÎÂåÆþ¤Ç¤¹¤¬¡¢¤½¤Î¥Õ¥£¡¼¥ë¥É¤Î¥¯¥é¥¹Æâ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: java/expr.c:2376 + #, c-format + msgid "assignment to final field `%s' not in constructor" + msgstr "final ¥Õ¥£¡¼¥ë¥É `%s' ¤Ø¤ÎÂåÆþ¤Ç¤¹¤¬¡¢¥³¥ó¥¹¥È¥é¥¯¥¿Æâ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: java/expr.c:2614 + #, fuzzy, c-format + msgid "can't expand %s" + msgstr "%s ¤òŸ³«¤Ç¤­¤Þ¤»¤ó" + + #: java/expr.c:2790 + msgid "invalid PC in line number table" + msgstr "̵¸ú¤Ê PC ¤¬¹ÔÈÖ¹æ¥Æ¡¼¥Ö¥ë¤Ë¤¢¤ê¤Þ¤¹" + + #. We've just reached the end of a region of dead code. + #: java/expr.c:2835 + #, fuzzy, c-format + msgid "unreachable bytecode from %d to before %d" + msgstr "%d ¤«¤é %d ¤ÎÁ°¤Þ¤Ç¤Î¥Ð¥¤¥È¥³¡¼¥É¤Ë¤ÏÅþã¤Ç¤­¤Þ¤»¤ó" + + #. We've just reached the end of a region of dead code. + #: java/expr.c:2872 + #, fuzzy, c-format + msgid "unreachable bytecode from %d to the end of the method" + msgstr "%d ¤«¤é¥á¥½¥Ã¥É¤Î½ª¤ê¤Þ¤Ç¤Î¥Ð¥¤¥È¥³¡¼¥É¤Ë¤ÏÅþã¤Ç¤­¤Þ¤»¤ó" + + #. duplicate code from LOAD macro + #: java/expr.c:3191 + msgid "unrecogized wide sub-instruction" + msgstr "ǧ¼±¤Ç¤­¤Ê¤¤ wide sub Ì¿Îá¤Ç¤¹" + + #: java/jcf-io.c:410 + #, fuzzy, c-format + msgid "source file for class `%s' is newer than its matching class file. Source file `%s' used instead" + msgstr "¥¯¥é¥¹ `%s' ¤Î¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤Ï¡¢°ìÃפ¹¤ë¥¯¥é¥¹¥Õ¥¡¥¤¥ë¤è¤ê¿·¤·¤¤¤Ç¤¹¡£¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤òÂå¤ê¤Ë»È¤¤¤Þ¤¹" + + #: java/jcf-parse.c:371 + msgid "bad string constant" + msgstr "ÉÔÀµ¤Êʸ»úÎóÄê¿ô¤Ç¤¹" + + #: java/jcf-parse.c:427 + #, c-format + msgid "bad value constant type %d, index %d" + msgstr "ÉÔÀµ¤ÊÄê¿ôÃÍ·¿ %d, ¥¤¥ó¥Ç¥Ã¥¯¥¹ %d" + + #: java/jcf-parse.c:685 + #, fuzzy, c-format + msgid "cannot find file for class %s" + msgstr "¥¯¥é¥¹ %s ÍѤΥե¡¥¤¥ë¤ò¸«¤Ä¤±¤é¤ì¤Þ¤»¤ó¡£" + + #: java/jcf-parse.c:697 + msgid "not a valid Java .class file" + msgstr "Àµ¾ï¤Ê Java .class ¥Õ¥¡¥¤¥ë¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: java/jcf-parse.c:700 + msgid "error while parsing constant pool" + msgstr "constant ¥×¡¼¥ë¤Î¹½Ê¸²òÀÏÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿" + + #: java/jcf-parse.c:703 + #, c-format + msgid "error in constant pool entry #%d\n" + msgstr "constant ¥×¡¼¥ë¹àÌÜ #%d Æâ¤Ç¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿\n" + + #. FIXME - where was first time + #: java/jcf-parse.c:715 + #, c-format + msgid "reading class %s for the second time from %s" + msgstr "class %s ¤òÆÉ¹þ¤à¤Î¤Ï %s ¤«¤éÆó²óÌܤˤʤê¤Þ¤¹" + + #: java/jcf-parse.c:733 + msgid "error while parsing fields" + msgstr "¥Õ¥£¡¼¥ë¥É¤Î¹½Ê¸²òÀÏÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿" + + #: java/jcf-parse.c:736 + msgid "error while parsing methods" + msgstr "¥á¥½¥Ã¥É¤Î¹½Ê¸²òÀÏÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿" + + #: java/jcf-parse.c:739 + msgid "error while parsing final attributes" + msgstr "final °À­¤Î¹½Ê¸²òÀÏÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿" + + #: java/jcf-parse.c:753 + #, fuzzy, c-format + msgid "the `java.lang.Object' that was found in `%s' didn't have the special zero-length `gnu.gcj.gcj-compiled' attribute. This generally means that your classpath is incorrectly set. Use `info gcj \"Input Options\"' to see the info page describing how to set the classpath" + msgstr "`%s' Æâ¤Ç¸«¤Ä¤«¤Ã¤¿ `java.lang.Object' ¤Ï¡¢Ä¹¤µ¥¼¥í¤ÎÆÃÊÌ¤Ê `gnu.gcj.gcj-compiled' °À­¤ò»ý¤Ã¤Æ¤¤¤Þ¤»¤ó¡£¤³¤ì¤ÏÉáÄ̤¢¤Ê¤¿¤Î¥¯¥é¥¹¥Ñ¥¹¤¬Àµ¤·¤¯ÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤»ö¤ò°ÕÌ£¤·¤Þ¤¹¡£`info gcj \"Input Options\"' ¤ò»È¤Ã¤Æ¡¢¥¯¥é¥¹¥Ñ¥¹¤ÎÀßÄêÊýË¡¤òÀâÌÀ¤·¤Æ¤¢¤ë info ¥Ú¡¼¥¸¤ò¸«¤Æ²¼¤µ¤¤" + + #: java/jcf-parse.c:838 + msgid "missing Code attribute" + msgstr "Code °À­¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: java/jcf-parse.c:1063 + #, fuzzy + msgid "source file seen twice on command line and will be compiled only once" + msgstr "¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤¬¥³¥Þ¥ó¥É¥é¥¤¥ó¤ËºÆ¤Ó¸½¤ì¤Þ¤·¤¿¤¬¡¢¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤ë¤Î¤Ï°ìÅÙ¤À¤±¤Ç¤¹" + + #: java/jcf-parse.c:1079 + msgid "no input file specified" + msgstr "ÆþÎÏ¥Õ¥¡¥¤¥ë¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: java/jcf-parse.c:1111 + #, c-format + msgid "can't close input file %s" + msgstr "ÆþÎÏ¥Õ¥¡¥¤¥ë %s ¤ò close ¤Ç¤­¤Þ¤»¤ó" + + #: java/jcf-parse.c:1148 + #, c-format + msgid "bad zip/jar file %s" + msgstr "zip/jar ¥Õ¥¡¥¤¥ë %s ¤ÏÉÔÀµ¤Ç¤¹" + + #: java/jcf-write.c:2577 + #, c-format + msgid "internal error in generate_bytecode_insn - tree code not implemented: %s" + msgstr "generate_bytecode_insn ¤ÇÆâÉô¥¨¥é¡¼ - ¥Ä¥ê¡¼¥³¡¼¥É¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó: %s" + + #: java/jcf-write.c:2884 + #, fuzzy + msgid "field initializer type mismatch" + msgstr "¥Õ¥£¡¼¥ë¥É½é´üÀßÄê»Ò¤¬Äê¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: java/jcf-write.c:3293 + #, c-format + msgid "can't create directory %s" + msgstr "¥Ç¥£¥ì¥¯¥È¥ê %s ¤òºîÀ®¤Ç¤­¤Þ¤»¤ó" + + #: java/jcf-write.c:3320 + #, c-format + msgid "can't to open %s" + msgstr "%s ¤ò open ¤Ç¤­¤Þ¤»¤ó" + + #: java/jv-scan.c:183 + #, fuzzy + msgid "only one of `--print-main', `--list-class', and `--complexity' allowed" + msgstr "`--print-main', `--list-class', `--complexity' ¤«¤é¤Ï°ì¤Ä¤·¤«Áª¤Ù¤Þ¤»¤ó" + + #: java/jv-scan.c:186 + #, fuzzy, c-format + msgid "can't open output file `%s'" + msgstr "½ÐÎÏ¥Õ¥¡¥¤¥ë `%s' ¤ò open ¤Ç¤­¤Þ¤»¤ó" + + #: java/jv-scan.c:222 + #, fuzzy, c-format + msgid "file not found `%s'" + msgstr "¥Õ¥¡¥¤¥ë `%s' ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó" + + #: java/jvspec.c:384 + msgid "can't specify `-D' without `--main'\n" + msgstr "`--main' ̵¤·¤Ç¤Ï `-D' ¤ò»ØÄê¤Ç¤­¤Þ¤»¤ó\n" + + #: java/jvspec.c:390 + msgid "-R requires -o" + msgstr "" + + #: java/jvspec.c:397 + #, fuzzy + msgid "warning: already-compiled .class files ignored with -C" + msgstr "·Ù¹ð: ¥³¥ó¥Ñ¥¤¥ëºÑ .class ¥Õ¥¡¥¤¥ë¤Ï -C ¤Ë¤è¤ê̵»ë¤µ¤ì¤Þ¤·¤¿" + + #: java/jvspec.c:404 + msgid "cannot specify both -C and -o" + msgstr "-C ¤È -o ¤ÏξÊý¤ò°ì½ï¤Ë»ØÄê¤Ç¤­¤Þ¤»¤ó" + + #: java/jvspec.c:416 + msgid "cannot create temporary file" + msgstr "°ì»þ¥Õ¥¡¥¤¥ë¤òºîÀ®¤Ç¤­¤Þ¤»¤ó" + + #: java/jvspec.c:444 + msgid "using both @FILE with multiple files not implemented" + msgstr "@FILE ¤Ç¤ÎÊ£¿ô¥Õ¥¡¥¤¥ë¤Î»ÈÍѤϼÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: java/jvspec.c:501 + msgid "cannot specify `main' class when not linking" + msgstr "¥ê¥ó¥¯»þ°Ê³°¤Ë¤Ï `main' ¥¯¥é¥¹¤ò»ØÄê¤Ç¤­¤Þ¤»¤ó" + + #: java/lang-options.h:32 + msgid "Disable automatic array bounds checking" + msgstr "¼«Æ°Åª¤ÊÇÛÎó¶­³¦¸¡ºº¤ò¹Ô¤ï¤Ê¤¤" + + #: java/lang-options.h:34 + msgid "Assume native functions are implemented using JNI" + msgstr "native ´Ø¿ô¤¬ JNI ¤òÍøÍѤ·¤Æ¼ÂÁõ¤·¤Æ¤¤¤ë¤â¤Î¤È¤ß¤Ê¤¹" + + #: java/lang-options.h:36 + msgid "Set class path and suppress system path" + msgstr "¥¯¥é¥¹¥Ñ¥¹¤òÀßÄꤷ¤Æ¥·¥¹¥Æ¥à¥Ñ¥¹¤ò±£¤¹" + + #: java/lang-options.h:38 + msgid "Set class path" + msgstr "¥¯¥é¥¹¥Ñ¥¹¤òÀßÄꤹ¤ë" + + #: java/lang-options.h:40 + msgid "Choose class whose main method should be used" + msgstr "main ¥á¥½¥Ã¥É¤¬»È¤ï¤ì¤ë¤Ù¤­¥¯¥é¥¹¤òÁªÂò¤¹¤ë" + + #: java/lang-options.h:42 + #, fuzzy + msgid "Choose input encoding (default comes from locale)" + msgstr "ÆþÎÏ¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤òÁªÂò¤¹¤ë(¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï UTF-8)" + + #: java/lang-options.h:44 + msgid "Add directory to class path" + msgstr "¥¯¥é¥¹¥Ñ¥¹¤Ë¥Ç¥£¥ì¥¯¥È¥ê¤òÄɲ乤ë" + + #: java/lang-options.h:46 + msgid "Directory where class files should be written" + msgstr "¥¯¥é¥¹¥Õ¥¡¥¤¥ë¤¬½ñ¤­¹þ¤Þ¤ì¤ë¥Ç¥£¥ì¥¯¥È¥ê" + + #: java/lang-options.h:48 + msgid "Warn if modifiers are specified when not necessary" + msgstr "»ØÄꤵ¤ì¤¿½¤¾þ»Ò¤¬ÉÔÍפʤâ¤Î¤Ç¤¢¤ì¤Ð·Ù¹ð¤¹¤ë" + + #: java/lang-options.h:50 + msgid "Warn if deprecated empty statements are found" + msgstr "¿ä¾©¤µ¤ì¤Ê¤¤¶õʸ¤¬¸«¤Ä¤«¤ì¤Ð·Ù¹ð¤¹¤ë" + + #: java/lang-options.h:52 + msgid "Warn if .class files are out of date" + msgstr ".class ¥Õ¥¡¥¤¥ë¤¬¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤è¤ê¸Å¤±¤ì¤Ð·Ù¹ð¤¹¤ë" + + #: java/lang-options.h:54 + msgid "Always check for non gcj generated classes archives" + msgstr "gcj ¤¬À¸À®¤·¤Æ¤¤¤Ê¤¤¥¯¥é¥¹¥¢¡¼¥«¥¤¥Ö¤ò¾ï¤Ë¸¡ºº¤¹¤ë" + + #: java/lang-options.h:56 + msgid "Never optimize static class initialization code" + msgstr "" + + #: java/lang.c:431 + msgid "can't do dependency tracking with input from stdin" + msgstr "ɸ½àÆþÎϤ«¤é¤ÎÆþÎϤǤϰ͸´Ø·¸¤ÎÄÉÀפ¬¤Ç¤­¤Þ¤»¤ó" + + #: java/lang.c:447 + msgid "couldn't determine target name for dependency tracking" + msgstr "°Í¸´Ø·¸¤ÎÄÉÀפΤ¿¤á¤Î¥¿¡¼¥²¥Ã¥È̾¤¬ÆÃÄê¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿" + + #: java/lex.c:303 + #, fuzzy, c-format + msgid "" + "unknown encoding: `%s'\n" + "This might mean that your locale's encoding is not supported\n" + "by your system's iconv(3) implementation. If you aren't trying\n" + "to use a particular encoding for your input file, try the\n" + "`--encoding=UTF-8' option" + msgstr "" + "ÉÔÌÀ¤Ê¥¨¥ó¥³¡¼¥É: `%s'\n" + "¤³¤ì¤Ï¤¢¤Ê¤¿¤Î¥í¥±¡¼¥ë¤Î¥¨¥ó¥³¡¼¥É¤¬¥·¥¹¥Æ¥à¤Î iconv(3) ¼ÂÁõ¤¬\n" + "¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Ê¤¤¤È±¾¤¦»ö¤ò°ÕÌ£¤·¤Þ¤¹¡£¤â¤·¤¢¤Ê¤¿¤¬ÆþÎÏ¥Õ¥¡¥¤¥ë\n" + "¤ÎÆÃÄꥨ¥ó¥³¡¼¥É¤ò»È¤¦¤Î¤Ç¤Ê¤±¤ì¤Ð¡¢`--encoding=UTF-8' ¥ª¥×¥·¥ç¥ó\n" + "¤ò»È¤Ã¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£" + + #: java/mangle.c:85 + #, fuzzy, c-format + msgid "can't mangle %s" + msgstr "%s ¤Î̾Á°ÊÑ´¹(mangle) ¤Ç¤­¤Þ¤»¤ó" + + #: java/mangle_name.c:150 java/mangle_name.c:226 + msgid "internal error - invalid Utf8 name" + msgstr "ÆâÉô¥¨¥é¡¼ - ̵¸ú¤Ê Utf8 ̾¤Ç¤¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:747 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:785 + msgid "Missing name" + msgstr "̾Á°¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:749 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:787 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:812 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:996 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1343 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1554 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1556 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1785 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1811 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1822 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1833 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1845 + msgid "';' expected" + msgstr "';' ¤¬É¬ÍפǤ¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:810 + msgid "'*' expected" + msgstr "'*' ¤¬É¬ÍפǤ¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:824 + msgid "Class or interface declaration expected" + msgstr "¥¯¥é¥¹¤ä¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹Àë¸À¤¬É¬ÍפǤ¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:859 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:861 + msgid "Missing class name" + msgstr "¥¯¥é¥¹Ì¾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:864 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:868 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:876 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1041 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1289 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1291 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1620 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1856 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1888 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1940 + msgid "'{' expected" + msgstr "'{' ¤¬É¬ÍפǤ¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:878 + msgid "Missing super class name" + msgstr "¥¹¡¼¥Ñ¡¼¥¯¥é¥¹Ì¾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:888 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:904 + msgid "Missing interface name" + msgstr "¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹Ì¾¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:975 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1308 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1369 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1578 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1800 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1809 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1820 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1831 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1843 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1860 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1862 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1933 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2104 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2166 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2318 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2330 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2337 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2344 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2355 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2357 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2395 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2397 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2399 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2420 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2422 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2424 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2440 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2442 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2463 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2465 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2467 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2495 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2497 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2499 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2501 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2519 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2521 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2532 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2543 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2554 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2565 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2576 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2589 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2593 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2595 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2608 + msgid "Missing term" + msgstr "¹à¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:990 + msgid "Missing variable initializer" + msgstr "ÊÑ¿ô½é´ü²½»Ò¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1007 + msgid "Invalid declaration" + msgstr "̵¸ú¤ÊÀë¸À¤Ç¤¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1013 + msgid "Can't specify array dimension in a declaration" + msgstr "ÇÛÎó¤Î¼¡¸µ¤òÀë¸À¤Ç»ØÄꤹ¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1015 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1091 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2141 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2163 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2167 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2202 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2279 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2289 + msgid "']' expected" + msgstr "']' ¤¬É¬ÍפǤ¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1019 + msgid "Unbalanced ']'" + msgstr "Âбþ¤Î¤Ê¤¤ ']' ¤Ç¤¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1055 + msgid "Invalid method declaration, method name required" + msgstr "̵¸ú¤Ê¥á¥½¥Ã¥ÉÀë¸À¤Ç¤¹¡£¥á¥½¥Ã¥É̾¤¬É¬ÍפǤ¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1061 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1063 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2024 + msgid "Identifier expected" + msgstr "¼±Ê̻Ҥ¬É¬ÍפǤ¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1066 + msgid "Invalid method declaration, return type required" + msgstr "̵¸ú¤Ê¥á¥½¥Ã¥ÉÀë¸À¤Ç¤¹¡£¥á¥½¥Ã¥É̾¤¬É¬ÍפǤ¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1089 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1534 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1541 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1550 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1552 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1580 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1688 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1969 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2022 + msgid "')' expected" + msgstr "')' ¤¬É¬ÍפǤ¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1105 + msgid "Missing formal parameter term" + msgstr "Àµ¼°¤Ê²¾°ú¿ô¹à¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1120 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1125 + msgid "Missing identifier" + msgstr "¼±Ê̻Ҥò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1145 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1154 + msgid "Missing class type term" + msgstr "¥¯¥é¥¹¥¿¥¤¥×¹à¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1306 + msgid "Invalid interface type" + msgstr "¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹·¿¤¬Ìµ¸ú¤Ç¤¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1498 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1667 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1669 + msgid "':' expected" + msgstr "':' ¤¬É¬ÍפǤ¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1520 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1525 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1530 + msgid "Invalid expression statement" + msgstr "¼°Ê¸¤¬Ìµ¸ú¤Ç¤¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1548 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1576 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1616 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1684 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1752 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1858 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1926 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2016 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2018 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2026 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2262 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2264 + msgid "'(' expected" + msgstr "'(' ¤¬É¬ÍפǤ¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1618 + msgid "Missing term or ')'" + msgstr "¹à¤Þ¤¿¤Ï ')' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1665 + msgid "Missing or invalid constant expression" + msgstr "Äê¿ô¼°¤¬·ç¤±¤Æ¤¤¤ë¤«Ìµ¸ú¤Ç¤¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1686 + msgid "Missing term and ')' expected" + msgstr "¹à¤Èɬ¿Ü¤Î ')' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1725 + msgid "Invalid control expression" + msgstr "̵¸ú¤ÊÀ©¸æ¼°¤Ç¤¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1727 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1729 + msgid "Invalid update expression" + msgstr "̵¸ú¤Ê¹¹¿·¼°¤Ç¤¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1754 + msgid "Invalid init statement" + msgstr "̵¸ú¤Ê½é´ü²½¼°¤Ç¤¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1929 + msgid "Missing term or ')' expected" + msgstr "¹à¤Þ¤¿¤Ïɬ¿Ü¤Î ')' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1971 + msgid "'class' or 'this' expected" + msgstr "'class' ¤Þ¤¿¤Ï 'this' ¤¬É¬ÍפǤ¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1973 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:1975 + msgid "'class' expected" + msgstr "'class' ¤¬É¬ÍפǤ¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2020 + msgid "')' or term expected" + msgstr "')' ¤Þ¤¿¤Ï¹à¤¬É¬ÍפǤ¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2139 + msgid "'[' expected" + msgstr "'[' ¤¬É¬ÍפǤ¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2217 + msgid "Field expected" + msgstr "¥Õ¥£¡¼¥ë¥É¤¬É¬ÍפǤ¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2274 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2284 + msgid "Missing term and ']' expected" + msgstr "¹à¤Èɬ¿Ü¤Î ']' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2388 + msgid "']' expected, invalid type expression" + msgstr "']' ¤¬É¬Íפǡ¢Ìµ¸ú¤Ê·¿É½¸½¤Ç¤¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2391 + msgid "Invalid type expression" + msgstr "̵¸ú¤Ê·¿É½¸½¤Ç¤¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2503 + msgid "Invalid reference type" + msgstr "̵¸ú¤Ê»²¾È·¿¤Ç¤¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2981 + msgid "Constructor invocation must be first thing in a constructor" + msgstr "¥³¥ó¥¹¥È¥é¥¯¥¿¤Îµ¯Æ°¤Ï¥³¥ó¥¹¥È¥é¥¯¥¿Æâ¤ÇºÇ½é¤Ë¹Ô¤Ê¤ï¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2983 + msgid "Only constructors can invoke constructors" + msgstr "¥³¥ó¥¹¥È¥é¥¯¥¿¤À¤±¤¬¥³¥ó¥¹¥È¥é¥¯¥¿¤òµ¯Æ°¤Ç¤­¤Þ¤¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:2992 + #, c-format + msgid ": `%s' JDK1.1(TM) feature" + msgstr ": `%s' ¤Ï JDK1.1(TM) ¤Îµ¡Ç½¤Ç¤¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:3052 + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:3054 + #, c-format + msgid "" + "%s.\n" + "%s" + msgstr "" + "%s.\n" + "%s" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:3517 + msgid "Can't use '$' as a separator for inner classes" + msgstr "'$' ¤ÏÆâÉô¥¯¥é¥¹¤Î¶èÀÚ¤ê»Ò¤È¤·¤Æ»ÈÍѤǤ­¤Þ¤»¤ó" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:6791 + #, c-format + msgid "malformed .zip archive in CLASSPATH: %s" + msgstr "CLASSPATH Æâ¤ËÊÑ¤Ê .zip ¥¢¡¼¥«¥¤¥Ö¤¬¤¢¤ê¤Þ¤¹: %s" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:6862 + #, fuzzy, c-format + msgid "Can't find default package `%s'. Check the CLASSPATH environment variable and the access to the archives" + msgstr "¥Ç¥Õ¥©¥ë¥È¥Ñ¥Ã¥±¡¼¥¸ `%s' ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£CLASSPATH ´Ä¶­ÊÑ¿ô¤È¥¢¡¼¥«¥¤¥Ö¤Ø¤Î¥¢¥¯¥»¥¹¤ò³Î¤«¤á¤Æ¤¯¤À¤µ¤¤¡£" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:12159 + #, c-format + msgid "missing static field `%s'" + msgstr "static ¥Õ¥£¡¼¥ë¥É `%s' ¤ò·ç¤¤¤Æ¤¤¤Þ¤¹" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:12164 + #, c-format + msgid "not a static field `%s'" + msgstr "static ¥Õ¥£¡¼¥ë¥É `%s' ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:12207 + #, c-format + msgid "No case for %s" + msgstr "%s ¤Î¤¿¤á¤Î case ¤¬¤¢¤ê¤Þ¤»¤ó" + + #: /u/loewisma/gcc-20011219/gcc/java/parse.y:13093 + #, c-format + msgid "unregistered operator %s" + msgstr "ÅÐÏ¿¤µ¤ì¤Æ¤¤¤Ê¤¤±é»»»Ò %s ¤Ç¤¹" + + #: java/typeck.c:566 + msgid "junk at end of signature string" + msgstr "¥·¥°¥Í¥¤¥Á¥ãʸ»úÎó¤Î½ª¤ê¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹" + + #: java/verify.c:480 + msgid "bad pc in exception_table" + msgstr "exception_table ¤ËÉÔÀµ¤Ê pc ¤¬¤¢¤ê¤Þ¤¹" + + #: java/verify.c:1392 + #, c-format + msgid "unknown opcode %d@pc=%d during verification" + msgstr "ÉÔÌÀ¤Ê opcode %d@pc=%d ¤ò¸¡¾ÚÃæ¤Ëȯ¸«¤·¤Þ¤·¤¿" + + #: java/verify.c:1462 java/verify.c:1475 java/verify.c:1479 + #, c-format + msgid "verification error at PC=%d" + msgstr "¸¡¾Ú¥¨¥é¡¼ (PC=%d)" + + #: objc/lang-options.h:27 + msgid "Dump decls to a .decl file" + msgstr "Àë¸À¤ò .decl ¥Õ¥¡¥¤¥ë¤Ë¥À¥ó¥×¤¹¤ë" + + #: objc/lang-options.h:29 + msgid "Generate code for GNU runtime environment" + msgstr "GNU ¼Â¹Ô´Ä¶­ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: objc/lang-options.h:32 + msgid "Generate code for NeXT runtime environment" + msgstr "NeXT ¼Â¹Ô´Ä¶­ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #: objc/lang-options.h:35 + msgid "Warn if a selector has multiple methods" + msgstr "¥»¥ì¥¯¥¿¤¬Ê£¿ô¤Î¥á¥½¥Ã¥É¤ò»ý¤Ã¤Æ¤¤¤ì¤Ð·Ù¹ð¤¹¤ë" + + #: objc/lang-options.h:39 + msgid "Do not warn if inherited methods are unimplemented" + msgstr "ÇÉÀ¸¥á¥½¥Ã¥É¤¬Ì¤¼ÂÁõ¤Î¾ì¹ç¤Ç¤â·Ù¹ð¤·¤Ê¤¤" + + #: objc/lang-options.h:41 + msgid "Generate C header of platform specific features" + msgstr "¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¸ÇÍ­¤Îµ¡Ç½¤Î C ¥Ø¥Ã¥À¤òÀ¸À®¤¹¤ë" + + #: objc/lang-options.h:43 + msgid "Specify the name of the class for constant strings" + msgstr "Äê¿ôʸ»úÎóÍѤΥ¯¥é¥¹Ì¾¤ò»ØÄꤹ¤ë" + + #: objc/objc-act.c:609 + msgid "no class name specified as argument to -fconstant-string-class" + msgstr "-fconstant-string-class ¤Ë°ú¿ô¤È¤·¤Æ»ØÄꤵ¤ì¤¿¥¯¥é¥¹¤¬¤¢¤ê¤Þ¤»¤ó" + + #: objc/objc-act.c:760 + #, c-format + msgid "object does not conform to the `%s' protocol" + msgstr "¥ª¥Ö¥¸¥§¥¯¥È¤¬ `%s' ¥×¥í¥È¥³¥ë¤ËŬ¹ç¤·¤Þ¤»¤ó" + + #: objc/objc-act.c:804 + #, c-format + msgid "class `%s' does not implement the `%s' protocol" + msgstr "¥¯¥é¥¹ `%s' ¤Ï `%s' ¥×¥í¥È¥³¥ë¤ò¼ÂÁõ¤·¤Æ¤¤¤Þ¤»¤ó" + + #: objc/objc-act.c:942 + #, fuzzy, c-format + msgid "unexpected type for `id' (%s)" + msgstr "ͽ´ü¤·¤Ê¤¤·¿¤¬ `id' (%s) ¤Ë»ØÄꤵ¤ì¤Þ¤·¤¿" + + #: objc/objc-act.c:947 + #, fuzzy + msgid "undefined type `id', please import " + msgstr "`id' ·¿¤¬Ì¤ÄêµÁ¤Ç¤¹¡£ ¤ò import ¤·¤Æ²¼¤µ¤¤" + + #: objc/objc-act.c:999 + #, c-format + msgid "protocol `%s' has circular dependency" + msgstr "" + + #: objc/objc-act.c:1021 objc/objc-act.c:5222 + #, fuzzy, c-format + msgid "cannot find protocol declaration for `%s'" + msgstr "`%s' ¤ËÂФ¹¤ë¥×¥í¥È¥³¥ëÀë¸À¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó" + + #: objc/objc-act.c:1282 objc/objc-act.c:5740 objc/objc-act.c:6069 + #: objc/objc-act.c:6118 objc/objc-act.c:6154 objc-parse.y:1748 + #, fuzzy, c-format + msgid "cannot find interface declaration for `%s'" + msgstr "`%s' ¤ËÂФ¹¤ë¥¤¥ó¥¿¥Õ¥§¡¼¥¹Àë¸À¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó" + + #: objc/objc-act.c:1307 + #, fuzzy, c-format + msgid "cannot find reference tag for class `%s'" + msgstr "¥¯¥é¥¹ %s ÍѤΥե¡¥¤¥ë¤ò¸«¤Ä¤±¤é¤ì¤Þ¤»¤ó¡£" + + #: objc/objc-act.c:2314 + #, fuzzy, c-format + msgid "cannot find class `%s'" + msgstr "¥¯¥é¥¹ `%s' ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó" + + #: objc/objc-act.c:2316 + #, fuzzy, c-format + msgid "class `%s' already exists" + msgstr "¥¯¥é¥¹ `%s' ¤Ï´û¤Ë¸ºß¤·¤Þ¤¹" + + #. fatal did not work with 2 args...should fix + #: objc/objc-act.c:2440 + #, fuzzy, c-format + msgid "cannot find interface declaration for `%s', superclass of `%s'" + msgstr "`%s' ¤Î¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹Àë¸À¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¡Ê`%s' ¤Î´ðÄ쥯¥é¥¹¤Ç¤¹¡Ë" + + #: objc/objc-act.c:2447 + #, fuzzy, c-format + msgid "circular inheritance in interface declaration for `%s'" + msgstr "`%s' ¤Ø¤Î¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹Àë¸À¤¬½Û´ÄŪ¤Ê·Ñ¾µ¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹" + + #: objc/objc-act.c:3498 objc/objc-act.c:3515 + msgid "inconsistent instance variable specification" + msgstr "¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô¤Î»ÅÍͤ¬°ì´Ó¤·¤Æ¤¤¤Þ¤»¤ó" + + #: objc/objc-act.c:4703 + #, c-format + msgid "multiple declarations for method `%s'" + msgstr "¥á¥½¥Ã¥É `%s' ¤ÎÀë¸À¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹¡£" + + #: objc/objc-act.c:4869 + #, c-format + msgid "invalid receiver type `%s'" + msgstr "¥ì¥·¡¼¥Ð·¿ `%s' ¤¬Ìµ¸ú¤Ç¤¹" + + #: objc/objc-act.c:4900 objc/objc-act.c:4926 objc/objc-act.c:4974 + #, c-format + msgid "`%s' does not respond to `%s'" + msgstr "`%s' ¤Ï `%s' ¤Ë±þÅú¤·¤Þ¤»¤ó" + + #: objc/objc-act.c:4906 objc/objc-act.c:7191 + #, c-format + msgid "no super class declared in interface for `%s'" + msgstr "`%s' ¤Ø¤Î¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤Ë´ðÄ쥯¥é¥¹¤¬Àë¸À¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: objc/objc-act.c:5004 + #, fuzzy + msgid "cannot find class (factory) method" + msgstr "¥¯¥é¥¹ (factory) ¥á¥½¥Ã¥É¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó" + + #: objc/objc-act.c:5005 objc/objc-act.c:5049 + #, c-format + msgid "return type for `%s' defaults to id" + msgstr "`%s' ¤ÎÌá¤êÃͤη¿¤Ï¥Ç¥Õ¥©¥ë¥È¤Î id ¤È¤·¤Þ¤¹" + + #: objc/objc-act.c:5022 + #, fuzzy, c-format + msgid "method `%s' not implemented by protocol" + msgstr "¥á¥½¥Ã¥É `%s' ¤Ï¥×¥í¥È¥³¥ë¤Ë¤è¤Ã¤Æ¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: objc/objc-act.c:5031 + msgid "return type defaults to id" + msgstr "Ìá¤êÃͤη¿¤ò¥Ç¥Õ¥©¥ë¥È¤Î id ¤È¤·¤Þ¤¹" + + #: objc/objc-act.c:5048 + #, fuzzy + msgid "cannot find method" + msgstr "¥á¥½¥Ã¥É¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£" + + #. Historically, a class method that produced objects (factory + #. method) would assign `self' to the instance that it + #. allocated. This would effectively turn the class method into + #. an instance method. Following this assignment, the instance + #. variables could be accessed. That practice, while safe, + #. violates the simple rule that a class method should not refer + #. to an instance variable. It's better to catch the cases + #. where this is done unknowingly than to support the above + #. paradigm. + #: objc/objc-act.c:5291 + #, c-format + msgid "instance variable `%s' accessed in class method" + msgstr "¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô `%s' ¤¬¥¯¥é¥¹¥á¥½¥Ã¥É¤«¤é¥¢¥¯¥»¥¹¤µ¤ì¤Þ¤·¤¿" + + #: objc/objc-act.c:5541 + #, fuzzy, c-format + msgid "duplicate definition of class method `%s'" + msgstr "¥¯¥é¥¹¥á¥½¥Ã¥É `%s' ¤ÎÄêµÁ¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹¡£" + + #: objc/objc-act.c:5547 + #, fuzzy, c-format + msgid "duplicate declaration of class method `%s'" + msgstr "¥¯¥é¥¹¥á¥½¥Ã¥É `%s' ¤ÎÀë¸À¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹¡£" + + #: objc/objc-act.c:5583 + #, fuzzy, c-format + msgid "duplicate definition of instance method `%s'" + msgstr "¥¤¥ó¥¹¥¿¥ó¥¹¥á¥½¥Ã¥É `%s' ¤ÎÄêµÁ¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹¡£" + + #: objc/objc-act.c:5589 + #, fuzzy, c-format + msgid "duplicate declaration of instance method `%s'" + msgstr "¥¤¥ó¥¹¥¿¥ó¥¹¥á¥½¥Ã¥É `%s' ¤ÎÀë¸À¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹¡£" + + #: objc/objc-act.c:5629 + #, c-format + msgid "duplicate interface declaration for category `%s(%s)'" + msgstr "¥«¥Æ¥´¥ê `%s(%s)' ¤Ø¤Î¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹Àë¸À¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹" + + #: objc/objc-act.c:5715 + #, c-format + msgid "instance variable `%s' is declared private" + msgstr "¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô `%s' ¤Ï private ¤ÈÀë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: objc/objc-act.c:5762 + #, c-format + msgid "instance variable `%s' is declared %s" + msgstr "¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô `%s' ¤Ï %s ¤ÈÀë¸À¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #: objc/objc-act.c:5772 + msgid "static access to object of type `id'" + msgstr "`id' ·¿¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ËÂΤ¹¤ëÀÅŪ¥¢¥¯¥»¥¹¤Ç¤¹" + + #: objc/objc-act.c:5809 objc/objc-act.c:5902 + #, c-format + msgid "incomplete implementation of class `%s'" + msgstr "¥¯¥é¥¹ `%s' ¤Î¼ÂÁõ¤¬ÉÔ´°Á´¤Ç¤¹" + + #: objc/objc-act.c:5813 objc/objc-act.c:5907 + #, c-format + msgid "incomplete implementation of category `%s'" + msgstr "¥«¥Æ¥´¥ê `%s' ¤Î¼ÂÁõ¤¬ÉÔ´°Á´¤Ç¤¹" + + #: objc/objc-act.c:5818 objc/objc-act.c:5912 + #, c-format + msgid "method definition for `%c%s' not found" + msgstr "`%c%s' ¤Î¥á¥½¥Ã¥ÉÄêµÁ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó" + + #: objc/objc-act.c:5956 + #, c-format + msgid "%s `%s' does not fully implement the `%s' protocol" + msgstr "%s `%s' ¤Ï `%s' ¥×¥í¥È¥³¥ë¤ò´°Á´¤Ë¤Ï¼ÂÁõ¤·¤Æ¤¤¤Þ¤»¤ó" + + #: objc/objc-act.c:6013 objc/objc-act.c:8112 + #, fuzzy + msgid "`@end' missing in implementation context" + msgstr "`@end' ¤Ï¼ÂÁõ¥³¥ó¥Æ¥¯¥¹¥È¤Ë¸½¤ì¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: objc/objc-act.c:6041 + #, c-format + msgid "reimplementation of class `%s'" + msgstr "¥¯¥é¥¹ `%s' ¤ÎºÆ¼ÂÁõ¤Ç¤¹" + + #: objc/objc-act.c:6083 + #, c-format + msgid "conflicting super class name `%s'" + msgstr "´ðÄ쥯¥é¥¹Ì¾ `%s' ¤¬¾×ÆÍ¤·¤Æ¤¤¤Þ¤¹" + + #: objc/objc-act.c:6098 + #, c-format + msgid "duplicate interface declaration for class `%s'" + msgstr "¥¯¥é¥¹ `%s' ¤Î¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹Àë¸À¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹" + + #: objc/objc-act.c:6382 + #, c-format + msgid "duplicate declaration for protocol `%s'" + msgstr "¥×¥í¥È¥³¥ë '%s' ¤ÎÀë¸À¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹" + + #: objc/objc-act.c:7232 + msgid "[super ...] must appear in a method context" + msgstr "[super ...] ¤Ï¥á¥½¥Ã¥É¥³¥ó¥Æ¥­¥¹¥È¤Ë¸½¤ì¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: objc/objc-act.c:8214 objc/objc-act.c:8230 + #, c-format + msgid "potential selector conflict for method `%s'" + msgstr "²ÄǽÀ­¤Î¤¢¤ë¥»¥ì¥¯¥¿¤¬¥á¥½¥Ã¥É `%s' ¤È¶¥¹ç¤·¤Þ¤¹" + + #: objc-parse.y:2577 + msgid "`@end' must appear in an implementation context" + msgstr "`@end' ¤Ï¼ÂÁõ¥³¥ó¥Æ¥¯¥¹¥È¤Ë¸½¤ì¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #: objc-parse.y:2851 + msgid "method definition not in class context" + msgstr "¥á¥½¥Ã¥ÉÄêµÁ¤¬¥¯¥é¥¹¥³¥ó¥Æ¥­¥¹¥ÈÆâ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #: config/sparc/freebsd.h:31 config/alpha/freebsd.h:36 + #: config/i386/freebsd-aout.h:227 config/ia64/freebsd.h:24 + msgid "`-p' not supported; use `-pg' and gprof(1)" + msgstr "`-p' ¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó. `-pg' ¤È gprof(1) ¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤" + + #: ada/lang-specs.h:39 gcc.c:698 java/jvspec.c:74 + msgid "-pg and -fomit-frame-pointer are incompatible" + msgstr "-pg ¤È -fomit-frame-pointer ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó" + + #: ada/lang-specs.h:42 + msgid "-c or -S required for Ada" + msgstr "" + + #: config/vax/vax.h:42 config/vax/vax.h:43 + msgid "profiling not supported with -mg\n" + msgstr "-mg ¤Ç¤Î¥×¥í¥Õ¥¡¥¤¥ë¤ÏÄ󶡤µ¤ì¤Þ¤»¤ó\n" + + #: gcc.c:677 f/lang-specs.h:35 + msgid "GNU C does not support -C without using -E" + msgstr "GNU C ¤Ï -E ¤òȼ¤ï¤Ê¤¤ -C ¤ò¼ÂÁõ¤·¤Æ¤¤¤Þ¤»¤ó" + + #: gcc.c:846 + msgid "-E required when input is from standard input" + msgstr "ÆþÎϤ¬É¸½àÆþÎϤξì¹ç¤Ï -E ¤¬É¬ÍפǤ¹" + + #: gcc.c:850 + #, fuzzy + msgid "compilation of header file requested" + msgstr "¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤Î¥³¥ó¥Ñ¥¤¥ë¤¬Í׵ᤵ¤ì¤Þ¤·¤¿" + + #: config/arm/riscix.h:73 config/arm/riscix.h:133 + msgid "-mbsd and -pedantic incompatible" + msgstr "-mbsd ¤È -pedantic ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó" + + #: config/arm/riscix.h:74 config/arm/riscix.h:134 + msgid "-mbsd and -mxopen incompatible" + msgstr "-mbsd ¤È -mxopen ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó" + + #: config/arm/riscix.h:75 config/arm/riscix.h:135 + msgid "-mxopen and -pedantic incompatible" + msgstr "-mxopen ¤È -pedantic ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó" + + #: config/nextstep.h:161 config/nextstep.h:164 + #, fuzzy + msgid "-p profiling is no longer supported. Use -pg instead" + msgstr "-p ¤Ç¤Î¥×¥í¥Õ¥¡¥¤¥ë¤Ï¤â¤¦Ä󶡤µ¤ì¤Þ¤»¤ó¡£Âå¤ï¤ê¤Ë -pg ¤ò»È¤¤¤Þ¤·¤ç¤¦¡£" + + #: config/i386/mingw32.h:69 config/i386/cygwin.h:169 + msgid "shared and mdll are not compatible" + msgstr "shared ¤È mdll ¤È¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó" + + #: config/dsp16xx/dsp16xx.h:103 config/dsp16xx/dsp16xx.h:112 + #, fuzzy + msgid "a -ifile option requires a -map option" + msgstr "-ifile ¥ª¥×¥·¥ç¥ó¤Ë¤Ï -map ¥ª¥×¥·¥ç¥ó¤¬É¬ÍפǤ¹" + + #: config/i386/sco5.h:662 config/i386/sco5.h:737 + msgid "-static not valid with -mcoff" + msgstr "-static ¤¬ -mcoff ¤È¤È¤â¤Ë»È¤ï¤ì¤ë¤Î¤ÏÀµ¤·¤¯¤¢¤ê¤Þ¤»¤ó" + + #: config/i386/sco5.h:663 config/i386/sco5.h:738 + msgid "-shared not valid with -mcoff" + msgstr "-shared ¤¬ -mcoff ¤È¤È¤â¤Ë»È¤ï¤ì¤ë¤Î¤ÏÀµ¤·¤¯¤¢¤ê¤Þ¤»¤ó" + + #: config/i386/sco5.h:664 config/i386/sco5.h:739 + msgid "-symbolic not valid with -mcoff" + msgstr "-symbolic ¤¬ -mcoff ¤È¤È¤â¤Ë»È¤ï¤ì¤ë¤Î¤ÏÀµ¤·¤¯¤¢¤ê¤Þ¤»¤ó" + + #: config/i386/sco5.h:702 + msgid "-fpic is not valid with -mcoff" + msgstr "-fpic ¤¬ -mcoff ¤È¤È¤â¤Ë»È¤ï¤ì¤ë¤Î¤ÏÀµ¤·¤¯¤¢¤ê¤Þ¤»¤ó" + + #: config/i386/sco5.h:703 + msgid "-fPIC is not valid with -mcoff" + msgstr "-fPIC ¤¬ -mcoff ¤È¤È¤â¤Ë»È¤ï¤ì¤ë¤Î¤ÏÀµ¤·¤¯¤¢¤ê¤Þ¤»¤ó" + + #: config/i386/sco5.h:740 + msgid "-fpic not valid with -mcoff" + msgstr "-fpic -mcoff ¤È¤È¤â¤Ë»È¤ï¤ì¤ë¤Î¤ÏÀµ¤·¤¯¤¢¤ê¤Þ¤»¤ó" + + #: config/i386/sco5.h:741 + msgid "-fPIC not valid with -mcoff" + msgstr "-fPIC ¤¬ -mcoff ¤È¤È¤â¤Ë»È¤ï¤ì¤ë¤Î¤ÏÀµ¤·¤¯¤¢¤ê¤Þ¤»¤ó" + + #: config/arc/arc.h:59 config/mips/mips.h:1057 + msgid "may not use both -EB and -EL" + msgstr "-EB ¤È -EL ¤ÎξÊý¤ò»È¤¦¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó" + + #: config/i386/cygwin.h:114 + msgid "mno-cygwin and mno-win32 are not compatible" + msgstr "mno-cygwin ¤È mno-win32 ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó" + + #: config/mips/mips.h:854 + #, fuzzy + msgid "-pipe is not supported" + msgstr "-pipe ¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #: config/mips/mips.h:1053 + msgid "may not use both -mfp64 and -msingle-float" + msgstr "-mfp64 ¤È -msingle-float ¤ÎξÊý¤ò»È¤¦¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó" + + #: config/mips/mips.h:1054 + msgid "may not use both -mfp64 and -m4650" + msgstr "-mfp64 ¤È -m4650 ¤ÎξÊý¤ò»È¤¦¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó" + + #: config/mips/mips.h:1056 + #, fuzzy + msgid "may not use both -mgp32 and -mfp64" + msgstr "-mfp64 ¤È -m4650 ¤ÎξÊý¤ò»È¤¦¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó" + + #: config/mips/isa3264.h:123 config/mips/isa3264.h:128 + #: config/mips/isa3264.h:140 config/mips/isa3264.h:145 + #, fuzzy + msgid "-mlong32 and -mlong64 can not both be specified" + msgstr "-msingle-float ¤È -msoft-float ¤ò°ìÅ٤˻ØÄꤹ¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£" + + #: config/arm/arm.h:213 + msgid "-mapcs-26 and -mapcs-32 may not be used together" + msgstr "-mapcs-26 ¤È -mapcs-32 ¤ÏƱ»þ¤Ë»È¤¨¤Þ¤»¤ó" + + #: config/arm/arm.h:225 + msgid "-msoft-float and -mhard_float may not be used together" + msgstr "-msoft-float ¤È -mhard_float ¤ÏƱ»þ¤Ë»È¤¨¤Þ¤»¤ó" + + #: config/arm/arm.h:236 + msgid "-mbig-endian and -mlittle-endian may not be used together" + msgstr "-mbig-endian ¤È -mlittle-endian ¤ÏƱ»þ¤Ë»È¤¨¤Þ¤»¤ó" + + #: config/arm/arm.h:254 + #, fuzzy + msgid "incompatible interworking options" + msgstr "¸ß´¹À­¤Î¤Ê¤¤ interworking ¥ª¥×¥·¥ç¥ó" + + #: config/i860/fx2800.h:299 + msgid "-p option not supported: use -pg instead" + msgstr "-p ¥ª¥×¥·¥ç¥ó¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó. Âå¤ï¤ê¤Ë -pg ¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤" + + #: config/mips/r3900.h:28 config/mips/r3900.h:42 + #, fuzzy + msgid "-mhard-float not supported" + msgstr "-mhard-float ¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó." + + #: config/mips/r3900.h:30 config/mips/r3900.h:44 + #, fuzzy + msgid "-msingle-float and -msoft-float can not both be specified" + msgstr "-msingle-float ¤È -msoft-float ¤ò°ìÅ٤˻ØÄꤹ¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£" + + #: config/mmix/mmix.h:113 + #, fuzzy + msgid "options -mabi=mmixware and -mabi=gnu are mutually exclusive" + msgstr "-traditional ¤È -ansi ¤È¤ÏÁê¸ßÇÓ¾Ū¤Ç¤¹" + + #: java/lang-specs.h:33 + msgid "-fjni and -femit-class-files are incompatible" + msgstr "-fjni ¤È -femit-class-files ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó" + + #: java/lang-specs.h:34 + msgid "-fjni and -femit-class-file are incompatible" + msgstr "-fjini ¤È -femit-class-file ¤Ï¶¦Â¸¤Ç¤­¤Þ¤»¤ó" + + #: java/lang-specs.h:35 java/lang-specs.h:36 + msgid "-femit-class-file should used along with -fsyntax-only" + msgstr "" + + #: config/mcore/mcore.h:60 + msgid "choose either big or little endian, not both" + msgstr "¥Ó¥Ã¥°¤Þ¤¿¤Ï¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥óξÊý¤Ç¤Ï¤Ê¤¯¡¢¤É¤Á¤é¤«¤òÁª¤ó¤Ç¤¯¤À¤µ¤¤" + + #: config/mcore/mcore.h:63 + msgid "choose either m340 or m210 not both" + msgstr "m340 ¤Þ¤¿¤Ï m210 ¤ÎξÊý¤Ç¤Ï¤Ê¤¯¡¢¤É¤Á¤é¤«¤òÁª¤ó¤Ç¤¯¤À¤µ¤¤" + + #: config/mcore/mcore.h:64 + msgid "the m210 does not have little endian support" + msgstr "m210 ¤Ï¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¥µ¥Ý¡¼¥È¤ò¹Ô¤Ê¤¨¤Þ¤»¤ó" + + #~ msgid "type with more precision than %s" + #~ msgstr "%s ¤è¤ê¤âÀºÌ©¤Ê·¿" + + #~ msgid "declaration of `%s' shadows previous local" + #~ msgstr "`%s' ¤ÎÀë¸À¤ÏÁ°Êý¤Î¥í¡¼¥«¥ë¥·¥ó¥Ü¥ë¤òʤ¤¤±£¤·¤Þ¤¹" + + #~ msgid "ANSI C forbids const or volatile function types" + #~ msgstr "ANSI C ¤Ï const ¤ä volatile ´Ø¿ô·¿¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó" + + #~ msgid "leaving more files than we entered" + #~ msgstr "Æþ¤Ã¤¿¥Õ¥¡¥¤¥ë¤è¤ê¤â½Ð¤¿¥Õ¥¡¥¤¥ë¤ÎÊý¤¬Â¿¤¯¤Ê¤ê¤Þ¤·¤¿" + + #~ msgid "universal-character-name used for '%c'" + #~ msgstr "`%c' ¤Ë¥æ¥Ë¥Ð¡¼¥µ¥ë¥­¥ã¥é¥¯¥¿Ì¾¤¬»È¤ï¤ì¤Þ¤·¤¿" + + #~ msgid "unknown escape sequence: '\\' followed by char 0x%x" + #~ msgstr "ÉÔÌÀ¤Ê¥¨¥¹¥±¡¼¥×¥·¡¼¥±¥ó¥¹: ʸ»ú 0x%x ¤¬¸å¤Ë³¤¯ '\\'" + + #~ msgid "ISO C forbids `&&'" + #~ msgstr "ISO C ¤Ï `&&' ¤ò¶Ø¤¸¤Þ¤¹" + + #~ msgid "`[*]' in parameter declaration only allowed in ISO C 99" + #~ msgstr "²¾°ú¿ôÀë¸ÀÃæ¤Î `[*]' ¤Ï ISO C 99 ¤Ç¤Î¤ßµö¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #~ msgid "wrong type argument to %s" + #~ msgstr "%s ¤Ø¤Î°ú¿ô¤Î·¿¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹" + + #~ msgid "invalid lvalue in increment" + #~ msgstr "¥¤¥ó¥¯¥ê¥á¥ó¥È¤ÎÃæ¤Ç¤Îº¸ÊÕÃͤ¬Ìµ¸ú¤Ç¤¹" + + #~ msgid "deprecated initialization of zero-length array" + #~ msgstr "Ťµ 0 ¤Î½é´ü²½¤Ï¿ä¾©¤µ¤ì¤Þ¤»¤ó" + + #~ msgid "initialization of zero-length array before end of structure" + #~ msgstr "¹½Â¤ÂΤκǸå¤è¤êÁ°¤ÇŤµ 0 ¤ÎÇÛÎó¤ò½é´ü²½¤·¤Æ¤¤¤Þ¤¹" + + #~ msgid "initialization of zero-length array inside a nested context" + #~ msgstr "¥Í¥¹¥È¤·¤¿Ê¸Ì®¤ÎÆâ¦¤ÇŤµ 0 ¤ÎÇÛÎó¤ò½é´ü²½¤·¤Æ¤¤¤Þ¤¹" + + #~ msgid "Unable to find a temporary location for static chain register" + #~ msgstr "ÀÅŪ¥Á¥§¥¤¥ó¥ì¥¸¥¹¥¿ÍѤΰì»þÎΰè¤ò¸«¤Ä¤±¤é¤ì¤Þ¤»¤ó" + + #~ msgid "Only initialized variables can be placed into the 8-bit area." + #~ msgstr "8 ¥Ó¥Ã¥ÈÎΰèÆâ¤ËÇÛÃ֤Ǥ­¤ëÊÑ¿ô¤À¤±¤¬½é´ü²½¤µ¤ì¤Þ¤·¤¿" + + #~ msgid "Internal gcc abort from %s:%d" + #~ msgstr "gcc ÆâÉô¤ÇÃæÃÇ %s:%d" + + #~ msgid "The local variable `insn' has the value:" + #~ msgstr "¤½¤Î¥í¡¼¥«¥ëÊÑ¿ô `insn' ¤¬Ãͤò»ý¤Ã¤Æ¤¤¤Þ¤¹:" + + #~ msgid "Register '%c' is unknown" + #~ msgstr "¥ì¥¸¥¹¥¿ '%c' ¤¬ÉÔÌÀ¤Ç¤¹" + + #~ msgid "Register '%c' already specified in allocation order" + #~ msgstr "¥ì¥¸¥¹¥¿ '%c' ¤Ï´û¤Ë³ÎÊݽç¤Ç»ØÄꤵ¤ì¤Æ¤¤¤Þ¤¹" + + #~ msgid "Same as -mcpu=i386" + #~ msgstr "-mcpu=i386 ¤ÈƱ¤¸" + + #~ msgid "Same as -mcpu=i486" + #~ msgstr "-mcpu=i486 ¤ÈƱ¤¸" + + #~ msgid "Same as -mcpu=pentium" + #~ msgstr "-mcpu=pentium ¤ÈƱ¤¸" + + #~ msgid "Same as -mcpu=pentiumpro" + #~ msgstr "-mcpu=pentiumpro ¤ÈƱ¤¸" + + #~ msgid "Emit Intel syntax assembler opcodes" + #~ msgstr "Intel ¥·¥ó¥¿¥Ã¥¯¥¹¤Î¥¢¥»¥ó¥Ö¥éÌ¿Îá¤òÅǤ­½Ð¤¹" + + #~ msgid "Control allocation order of integer registers" + #~ msgstr "À°¿ô¥ì¥¸¥¹¥¿¤Î³ÎÊݽç¤òÀ©¸æ¤¹¤ë" + + #~ msgid "The -mabi=32 support does not work yet." + #~ msgstr "-mabi=32 ¥µ¥Ý¡¼¥È¤Ï¤Þ¤Àưºî¤·¤Þ¤»¤ó" + + #~ msgid "-mcpu=%s does not support -mips%d" + #~ msgstr "-mcpu=%s ¤Ï -mips%d ¤ò¥µ¥Ý¡¼¥È¤·¤Þ¤»¤ó" + + #~ msgid "invalid %%W value" + #~ msgstr "̵¸ú¤Ê %%W ÃͤǤ¹" + + #~ msgid "Use FUNCTION_EPILOGUE" + #~ msgstr "FUNCTION_EPILOGUE ¤ò»ÈÍѤ¹¤ë" + + #~ msgid "Do not use FUNCTION_EPILOGUE" + #~ msgstr "FUNCTION_EPILOGUE ¤ò»ÈÍѤ·¤Ê¤¤" + + #~ msgid "object size exceeds built-in limit for virtual function table implementation" + #~ msgstr "¥ª¥Ö¥¸¥§¥¯¥È¥µ¥¤¥º¤¬¡¢²¾ÁÛ´Ø¿ô¥Æ¡¼¥Ö¥ë¼ÂÁõ¤ËÁȤ߹þ¤³¤Þ¤ì¤¿¥µ¥¤¥º¤òĶ²á¤·¤Þ¤·¤¿" + + #~ msgid "object size exceeds normal limit for virtual function table implementation, recompile all source and use -fhuge-objects" + #~ msgstr "¥ª¥Ö¥¸¥§¥¯¥È¥µ¥¤¥º¤¬¡¢²¾ÁÛ´Ø¿ô¥Æ¡¼¥Ö¥ë¼ÂÁõ¤ÎÄ̾ï¤ÎÀ©¸Â¤òĶ²á¤·¤¿¤¿¤á¡¢Á´¤Æ¤Î¥½¡¼¥¹¤ò -fhuge-objects ¤ò»È¤Ã¤ÆºÆ¥³¥ó¥Ñ¥¤¥ë¤·¤Æ¤¯¤À¤µ¤¤" + + #~ msgid "the ABI requires vtable thunks" + #~ msgstr "ABI ¤Ï²¾ÁÛ´Ø¿ô¥Æ¡¼¥Ö¥ë¥µ¥ó¥¯¤òÍ׵ᤷ¤Þ¤¹" + + #~ msgid "`__alignof__' applied to a bit-field" + #~ msgstr "¥Ó¥Ã¥È¥Õ¥£¡¼¥ë¥É¤ËÂФ·¤ÆÅ¬ÍѤµ¤ì¤¿ `__alignof__'" + + #~ msgid "base class initializer specified, but no base class to initialize" + #~ msgstr "´ðÄ쥯¥é¥¹½é´üÀßÄê»Ò¤¬»ØÄꤵ¤ì¤Þ¤·¤¿¤¬¡¢½é´ü²½¤¹¤Ù¤­´ðÄ쥯¥é¥¹¤¬¤¢¤ê¤Þ¤»¤ó" + + #~ msgid "initializer for unnamed base class ambiguous" + #~ msgstr "̵̾´ðÄ쥯¥é¥¹¤Î½é´üÀßÄê»Ò¤¬Û£Ëæ¤Ç¤¹" + + #~ msgid "Do not treat the namespace `std' as a normal namespace" + #~ msgstr "̾Á°¶õ´Ö `std' ¤òÄ̾ï¤Î̾Á°¶õ´Ö¤È¤·¤Æ¼è¤ê°·¤ï¤Ê¤¤" + + #~ msgid "ISO C++ forbids `&&'" + #~ msgstr "ISO C++ ¤Ï `&&' ¤ò¶Ø¤¸¤Þ¤¹" + + #~ msgid "taking dynamic typeid of object with -fno-rtti" + #~ msgstr "-fno-rtti ¤Î»ØÄê¤È°ì½ï¤Ë¥ª¥Ö¥¸¥§¥¯¥È¤ÎưŪ typeid ¤ò¼è¤í¤¦¤È¤·¤Æ¤¤¤Þ¤¹" + + #~ msgid "recoverable compiler error, fixups for virtual function" + #~ msgstr "²óÉü²Äǽ¤Ê¥³¥ó¥Ñ¥¤¥é¤Î¥¨¥é¡¼¡¢²¾ÁÛ´Ø¿ô¤Î½¤Àµ" + + #~ msgid "`com_interface' only supported with -fvtable-thunks" + #~ msgstr "`com_interface' ¤Ï -fvtable-thunks ¤ò»ØÄꤷ¤¿¤È¤­¤À¤±¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤¹" + + #~ msgid "\"defined\" operator appears during macro expansion" + #~ msgstr "\"defined\" ±é»»»Ò¤¬¥Þ¥¯¥íŸ³«Ãæ¤Ë¸½¤ì¤Þ¤·¤¿" + + #~ msgid "-include and -imacros cannot be used with -fpreprocessed" + #~ msgstr "-include ¤ä -imacros ¤Ï -fpreprocessed ¤È°ì½ï¤Ë»È¤¦¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó" + + #~ msgid "buffers still stacked in cpp_finish" + #~ msgstr "cpp_finish ¤Ç¥Ð¥Ã¥Õ¥¡¤¬¤Þ¤À¥¹¥¿¥Ã¥¯¤µ¤ì¤Æ¤¤¤Þ¤¹" + + #~ msgid "# followed by integer" + #~ msgstr "À°¿ô¤¬ # ¤Ë³¤¤¤Æ¤¤¤Þ¤¹" + + #~ msgid "attempt to push file buffer with contexts stacked" + #~ msgstr "¥¹¥¿¥Ã¥¯¤µ¤ì¤¿¥³¥ó¥Æ¥¯¥¹¥È¤È°ì½ï¤Ë¥Õ¥¡¥¤¥ë¥Ð¥Ã¥Õ¥¡¤ò push ¤·¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹" + + #~ msgid "file \"%s\" left but not entered" + #~ msgstr "¥Õ¥¡¥¤¥ë \"%s\" ¤«¤é½Ð¤Þ¤·¤¿¤¬Æþ¤Ã¤Æ¤¤¤Þ¤»¤ó" + + #~ msgid "expected to return to file \"%s\"" + #~ msgstr "¥Õ¥¡¥¤¥ë \"%s\" ¤ËÌá¤ë¤Ï¤º¤Ç¤·¤¿" + + #~ msgid "expected to return to line number %u" + #~ msgstr "¹ÔÈÖ¹æ %u ¤ËÌá¤ë¤Ï¤º¤Ç¤·¤¿" + + #~ msgid "header flags for \"%s\" have changed" + #~ msgstr "\"%s\" ¤Î¥Ø¥Ã¥À¥Õ¥é¥°¤¬Êѹ¹¤µ¤ì¤Þ¤·¤¿" + + #~ msgid "file \"%s\" entered but not left" + #~ msgstr "¥Õ¥¡¥¤¥ë \"%s\" ¤ËÆþ¤ê¤Þ¤·¤¿¤¬½Ð¤Þ¤»¤ó¤Ç¤·¤¿" + + #~ msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d\n" + #~ msgstr "NOTE_INSN_BASIC_BLOCK ¤¬¥Ö¥í¥Ã¥¯ %d ¤Ë¤¢¤ê¤Þ¤»¤ó\n" + + #~ msgid "gcov [-b] [-v] [-n] [-l] [-f] [-o OBJDIR] file\n" + #~ msgstr "gcov [-b] [-v] [-n] [-l] [-f] [-o OBJDIR] ¥Õ¥¡¥¤¥ë\n" + + #~ msgid "Premature end of input file %s" + #~ msgstr "ÆþÎÏ¥Õ¥¡¥¤¥ë %s ¤Î½ª¤ê¤Ë㤹¤ë¤Î¤¬Á᤹¤®¤Þ¤¹" + + #~ msgid "Make is_compiled_class return 1" + #~ msgstr "is_compiled_class ¤¬ 1 ¤òÊÖ¤¹¤è¤¦¤Ë¤¹¤ë" + + #~ msgid "Dump class files to .class" + #~ msgstr "¥¯¥é¥¹¤ò .class ¥Õ¥¡¥¤¥ë¤Ø¥À¥ó¥×¤¹¤ë" + + #~ msgid "input file is list of file names to compile" + #~ msgstr "ÆþÎÏ¥Õ¥¡¥¤¥ë¤ò¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¥Õ¥¡¥¤¥ë̾¤Î¥ê¥¹¥È¤È¤¹¤ë" + + #~ msgid "Generate code for Boehm GC" + #~ msgstr "Boehm GC ÍѤΥ³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #~ msgid "Don't put synchronization structure in each object" + #~ msgstr "Ʊ´ü¹½Â¤ÂΤò³Æ¥ª¥Ö¥¸¥§¥¯¥È¤ËÁÈ¤ßÆþ¤ì¤Ê¤¤" + + #~ msgid "Use built-in instructions for division" + #~ msgstr "ÁȤ߹þ¤ß¤Î½ü»»Ì¿Îá¤ò»ÈÍѤ¹¤ë" + + #~ msgid "Arc profiling: some edge counts were bad." + #~ msgstr "¸Ì(arc)¥×¥í¥Õ¥¡¥¤¥ê¥ó¥°: ´ö¤Ä¤«¤Î edge ¥«¥¦¥ó¥È¤ÏÉÔÀµ¤Ç¤¹¡£" + + #~ msgid "`asm' cannot be used in function where memory usage is checked" + #~ msgstr "`asm' ¤Ï´Ø¿ô¤Ç¥á¥â¥êÍøÍѤòÄ´¤Ù¤ë½ê¤Ç¤Ï»È¤¨¤Þ¤»¤ó" + + #~ msgid "`asm' cannot be used with `-fcheck-memory-usage'" + #~ msgstr "`asm' ¤Ï `-fcheck-memory-usage' ¤È°ì½ï¤Ë»È¤¨¤Þ¤»¤ó" + + #~ msgid "output operand constraint %d contains `+'" + #~ msgstr "½ÐÎÏ¥ª¥Ú¥é¥ó¥ÉÀ©Ìó %d ¤Ï `+' ¤ò´Þ¤ó¤Ç¤¤¤Þ¤¹" + + #~ msgid "\"%s\" and \"%s\" identical in first %d characters" + #~ msgstr "\"%s\" ¤È \"%s\" ¤ÏºÇ½é¤Î %d ʸ»ú¤¬Á´¤¯Æ±¤¸¤Ç¤¹" + + #~ msgid "Improve FP speed by violating ANSI & IEEE rules" + #~ msgstr "ANSI & IEEE µ¬Â§¤òÇˤäÆÉâÆ°¾®¿ô¤Î®ÅÙ¤ò²þÁ±¤¹¤ë" + + #~ msgid "Generate code to check every memory access" + #~ msgstr "³Æ¥á¥â¥ê¥¢¥¯¥»¥¹¤ò¸¡½Ð¤¹¤ë¥³¡¼¥É¤òÀ¸À®¤¹¤ë" + + #~ msgid "Add a prefix to all function names" + #~ msgstr "Á´¤Æ¤Î´Ø¿ô̾¤ËÀÜÆ¬¼­¤òÄɲ乤ë" + + #~ msgid "Errors detected in input file (your bison.simple is out of date)\n" + #~ msgstr "ÆþÎÏ¥Õ¥¡¥¤¥ëÃæ¤Ë¥¨¥é¡¼ (¤¢¤Ê¤¿¤Î bison.simple ¤Ï¸Å¤¹¤®¤Þ¤¹)\n" + + #~ msgid " -Wid-clash- Warn if 2 identifiers have the same first chars\n" + #~ msgstr " -Wid-clash- Æó¤Ä¤Î¼±Ê̻Ҥ¬ ʸ»úʬ°ìÃפ·¤Æ¤¤¤ì¤Ð·Ù¹ð¤¹¤ë\n" + + #~ msgid "Unrecognized option `%s'" + #~ msgstr "ǧ¼±ÉÔǽ¤Ê¥ª¥×¥·¥ç¥ó `%s'" + + #~ msgid "`-a' option (basic block profile) not supported" + #~ msgstr "`-a' ¥ª¥×¥·¥ç¥ó(´ðËÜ¥Ö¥í¥Ã¥¯¥×¥í¥Õ¥¡¥¤¥ë)¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #~ msgid "`-ax' option (jump profiling) not supported" + #~ msgstr "`-ax' ¥ª¥×¥·¥ç¥ó(¥¸¥ã¥ó¥×¥×¥í¥Õ¥¡¥¤¥ë)¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #~ msgid "`-ax' and `-a' are conflicting options. `-a' ignored." + #~ msgstr "`-ax' ¤È `-a' ¤ÏÌ·½â¤¹¤ë¥ª¥×¥·¥ç¥ó¤Ç¤¹¡£`-a' ¤ò̵»ë¤·¤Þ¤·¤¿¡£" + + #~ msgid "Data size %ld.\n" + #~ msgstr "¥Ç¡¼¥¿¥µ¥¤¥º %ld.\n" + + #~ msgid "bx]" + #~ msgstr "bx]" + + #~ msgid "bx" + #~ msgstr "bx" + + #~ msgid "cx" + #~ msgstr "cx" + + #~ msgid "%s before character constant" + #~ msgstr "ʸ»úÄê¿ô¤ÎÁ°¤Ë %s" + + #~ msgid "%s before character 0%o" + #~ msgstr "ʸ»ú 0%2$o ¤ÎÁ°¤Ë %1$s" + + #~ msgid "more than one `f' in numeric constant" + #~ msgstr "¿ôÄê¿ô¤Ë 1¤Ä°Ê¾å¤Î `f'" + + #~ msgid "more than one `l' in numeric constant" + #~ msgstr "¿ôÄê¿ô¤Ë 1¤Ä°Ê¾å¤Î `l'" + + #~ msgid "parse error at `..'" + #~ msgstr "`..' ¤Ç¹½Ê¸²òÀÏ¥¨¥é¡¼" + + #~ msgid "nondigits in number and not hexadecimal" + #~ msgstr "¿ôÃͤ˥¢¥é¥Ó¥¢¿ô»ú¤Ç¤Ê¤¯¡¢16 ¿Ê¤Ç¤â¤Ê¤¤Ê¸»ú" + + #~ msgid "invalid `for (ITERATOR)' syntax" + #~ msgstr "̵¸ú¤Ê `for (È¿Éü»Ò)' ¹½Ê¸¤Ç¤¹" + + #~ msgid "`for (%s)' inside expansion of same iterator" + #~ msgstr "Ʊ¤¸È¿Éü»Ò¤ÎÆâ¦¤Ë¤¢¤ë `for (%s)'" + + #~ msgid "duplicate array index in initializer" + #~ msgstr "½é´ü²½»ÒÆâ¤Ë½ÅÊ£¤·¤¿ÇÛÎ󥤥ó¥Ç¥Ã¥¯¥¹" + + #~ msgid "thumb_load_double_from_address: destination is not a register" + #~ msgstr "thumb_load_double_from_address: Âоݤ¬¥ì¥¸¥¹¥¿¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #~ msgid "thumb_load_double_from_address: source is not a computed memory address" + #~ msgstr "thumb_load_double_from_address: ¸µ¤¬·×»»ºÑ¤ß¥á¥â¥ê¥¢¥É¥ì¥¹¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #~ msgid "thumb_load_double_from_address: Unhandled address calculation" + #~ msgstr "thumb_load_double_from_address: °·¤ï¤ì¤Ê¤¤¥¢¥É¥ì¥¹·×»»" + + #~ msgid "ACCUM_HIGH_REGS class in limit_reload_class" + #~ msgstr "limit_reload_class ¤Ë ACCUM_HIGH_REGS ¥¯¥é¥¹" + + #~ msgid "YH_OR_ACCUM_HIGH_REGS found in limit_reload_class" + #~ msgstr "limit_reload_class ¤Ç YH_OR_ACCUM_HIGH_REGS ¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿" + + #~ msgid "YL found in limit_reload_class" + #~ msgstr "limit_reload_class ¤Ç YL ¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿" + + #~ msgid "Invalid register for compare" + #~ msgstr "̵¸ú¤ÊÈæ³ÓÍѥ쥸¥¹¥¿" + + #~ msgid "PRINT_OPERAND: letter %c was found & insn was not CONST_INT" + #~ msgstr "PRINT_OPERAND: ʸ»ú %c ¤¬¸«¤Ä¤«¤ê¡¢Ì¿Îá¤Ï CONST_INT ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #~ msgid "-mptr%d not allowed on -m%d" + #~ msgstr "-mptr%d ¤Ï -m%d ¤Î¾å¤Ç¤Ï»È¤¨¤Þ¤»¤ó" + + #~ msgid "parse errors have confused me too much" + #~ msgstr "¹½Ê¸²òÀÏ¥¨¥é¡¼¤Ç¡¢¤«¤Ê¤êº®Í𤷤Ƥ·¤Þ¤¤¤Þ¤·¤¿" + + #~ msgid "virtual memory exhausted" + #~ msgstr "²¾ÁÛ¥á¥â¥ê¤ò»È¤¤²Ì¤¿¤·¤Þ¤·¤¿" + + #~ msgid "`void' in parameter list must be entire list" + #~ msgstr "¥Ñ¥é¥á¥¿¥ê¥¹¥ÈÆâ¤Î `void' ¤Ï¥ê¥¹¥ÈÁ´ÂΤǤʤ±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" + + #~ msgid "no file specified with -fdump-translation-unit" + #~ msgstr "-fdump-translation-unit ¤Ç»ØÄꤵ¤ì¤¿¥Õ¥¡¥¤¥ë¤¬¤¢¤ê¤Þ¤»¤ó" + + #~ msgid "(you really want to initialize it separately)" + #~ msgstr "(ËÜÅö¤Ë¤½¤¦¤·¤¿¤¤¤Î¤Ç¤¢¤ì¤Ð¡¢Ê¬³ä¤·¤Æ½é´ü²½¤·¤Æ¤¯¤À¤µ¤¤)" + + #~ msgid "`operator new' takes type `size_t' parameter" + #~ msgstr "`operator new' ¤Ï `size_t' ¥Ñ¥é¥á¥¿¤ò¤È¤ê¤Þ¤¹" + + #~ msgid "`...' invalid in specification of `operator delete'" + #~ msgstr "`...' `operator delete' ¤Î»ÅÍÍÆâ¤Ç̵¸ú¤Ç¤¹" + + #~ msgid "`default' label within scope of cleanup or variable array" + #~ msgstr "`default' ¥é¥Ù¥ë¤¬¡¢²òÂΤޤ¿¤Ï²ÄÊÑÇÛÎó¤Î¥¹¥³¡¼¥×Æâ¤Ë¤¢¤ê¤Þ¤¹" + + #~ msgid "end of file encountered inside string constant" + #~ msgstr "ʸ»úÎóÄê¿ô¤ÎÃæ¤Ç¥Õ¥¡¥¤¥ë¤Î½ªÃ¼¤ò¸¡½Ð¤·¤Þ¤·¤¿" + + #~ msgid "end of file encountered inside character constant" + #~ msgstr "ʸ»úÄê¿ô¤ÎÃæ¤Ç¥Õ¥¡¥¤¥ë¤Î½ªÃ¼¤ò¸¡½Ð¤·¤Þ¤·¤¿" + + #~ msgid "universal-character-name designates `%c', part of the basic source character set" + #~ msgstr "universal-character-name ¤Ï `%c' ¤ò»Ø¼¨¤·¤Þ¤·¤¿¤¬¡¢´ðËÜŪ¤Êʸ»ú½¸¹ç¤Î°ìÉô¤Ç¤¹" + + #~ msgid "%s at end of saved text" + #~ msgstr "ÊݸºÑ¤ß¥Æ¥­¥¹¥È¤ÎËöÈø¤Ç%s" + + #~ msgid "Please submit a full bug report." + #~ msgstr "¾Ü¤·¤¤¾õ¶·¤ò¥Ð¥°¥ì¥Ý¡¼¥È¤È¤·¤ÆÁ÷¤Ã¤Æ¤¯¤À¤µ¤¤¡£" + + #~ msgid "duplicate label `%s' in switch statement" + #~ msgstr "switch ʸ¤ÎÃæ¤Ç¥é¥Ù¥ë `%s' ¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹" + + #~ msgid "duplicate label (%d) in switch statement" + #~ msgstr "switch ʸ¤ÎÃæ¤Ç¥é¥Ù¥ë (%d) ¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹" + + #~ msgid "range values `%s' and `%s' reversed" + #~ msgstr "ÈϰϤÎÃÍ `%s' ¤È `%s' ¤¬µÕ¤Ç¤¹" + + #~ msgid "range values reversed" + #~ msgstr "ÈϰϤÎÃͤ¬µÕ¤Ç¤¹" + + #~ msgid "bad is_error(%d) in v_message" + #~ msgstr "v_message Ãæ ÉÔÀµ¤Ê is_error(%d)" + + #~ msgid "'defined' without an identifier" + #~ msgstr "¼±Ê̻ҤΤʤ¤ 'defined'" + + #~ msgid "included file `%s' exists but is not readable" + #~ msgstr "include ¤µ¤ì¤¿¥Õ¥¡¥¤¥ë `%s' ¤Ï¡¢Â¸ºß¤·¤Þ¤¹¤¬ÆÉ¤á¤Þ¤»¤ó" + + #~ msgid "%s is a directory" + #~ msgstr "%s ¤Ï¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤¹" + + #~ msgid "`##' at start of macro definition" + #~ msgstr "`##' ¤¬¥Þ¥¯¥íÄêµÁ¤Î»Ï¤á¤Ë¤¢¤ê¤Þ¤¹" + + #~ msgid "`##' at end of macro definition" + #~ msgstr "`##' ¤¬¥Þ¥¯¥íÄêµÁ¤Î½ª¤ê¤Ë¤¢¤ê¤Þ¤¹" + + #~ msgid "empty object-like macro went through full #define" + #~ msgstr "¶õ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Î¤è¤¦¤Ê¥Þ¥¯¥í¤Ï #define Á´¤Æ¤òÄ̤êÈ´¤±¤Þ¤·¤¿" + + #~ msgid "first token = %d not %d in collect_formal_parameters" + #~ msgstr "collect_formal_parameters ÃæºÇ½é¤Î¥È¡¼¥¯¥ó = %d (%d ¤Ç¤Ï¤Ê¤¤)" + + #~ msgid "impossible token in macro argument list" + #~ msgstr "¥Þ¥¯¥í°ú¿ô¥ê¥¹¥È¤Ë¤¢¤êÆÀ¤Ê¤¤¥È¡¼¥¯¥ó" + + #~ msgid "illegal token in macro argument list" + #~ msgstr "¥Þ¥¯¥í°ú¿ô¥ê¥¹¥È¤ËÉÔÀµ¤Ê¥È¡¼¥¯¥ó" + + #~ msgid "another parameter follows \"...\"" + #~ msgstr "\"...\" ¤Î¸å¡¢¤µ¤é¤Ë¥Ñ¥é¥á¥¿¤¬Â³¤¤¤Æ¤¤¤Þ¤¹" + + #~ msgid "collect_params: argc=%d argslen=0" + #~ msgstr "collect_params: argc=%d argslen=0" + + #~ msgid "C99 does not permit use of __VA_ARGS__ as a macro argument name" + #~ msgstr "C99 ¤Ï¥Þ¥¯¥í°ú¿ô̾¤È¤·¤Æ __VA_ARGS__ ¤Î»ÈÍѤÏǧ¤á¤é¤ì¤Æ¤¤¤Þ¤»¤ó" + + #~ msgid "C89 does not permit varargs macros" + #~ msgstr "C89 ¤Ç¤Ï varargs ¥Þ¥¯¥í¤Ïǧ¤á¤é¤ì¤Æ¤¤¤Þ¤»¤ó" + + #~ msgid "collect_params: impossible token type %d" + #~ msgstr "collect_params: ¤¢¤êÆÀ¤Ê¤¤¥È¡¼¥¯¥ó·¿ %d" + + #~ msgid "attempt to use poisoned `%s'." + #~ msgstr "±øÀ÷¤µ¤ì¤¿ `%s' ¤ÎÍøÍѤò»î¤·¤Þ¤¹¡£" + + #~ msgid "macroexpand: unexpected token %d (wanted LPAREN)" + #~ msgstr "macroexpand: ͽ´ü¤·¤Ê¤¤¥È¡¼¥¯¥ó %d (LPAREN ¤Î¤Ï¤º)" + + #~ msgid "unterminated macro call" + #~ msgstr "½ªÃ¼¤·¤Æ¤¤¤Ê¤¤¥Þ¥¯¥í¸Æ¤Ó½Ð¤·" + + #~ msgid "macro `%s' used with just one arg" + #~ msgstr "¥Þ¥¯¥í `%s' ¤Î°ú¿ô¤¬°ì¤Ä¤·¤«¤¢¤ê¤Þ¤»¤ó" + + #~ msgid "macro `%s' used with only %d args" + #~ msgstr "¥Þ¥¯¥í `%s' ¤Î°ú¿ô(%d ¸Ä)¤¬¾¯¤Ê¤¹¤®¤Þ¤¹" + + #~ msgid "macro `%s' used with too many (%d) args" + #~ msgstr "¥Þ¥¯¥í `%s' ¤Î°ú¿ô(%d ¸Ä)¤¬Â¿¤¹¤®¤Þ¤¹" + + #~ msgid "" + #~ "Switches:\n" + #~ " -include Include the contents of before other files\n" + #~ " -imacros Accept definition of macros in \n" + #~ " -iprefix Specify as a prefix for next two options\n" + #~ " -iwithprefix Add to the end of the system include path\n" + #~ " -iwithprefixbefore Add to the end of the main include path\n" + #~ " -isystem Add to the start of the system include path\n" + #~ " -idirafter Add to the end of the system include path\n" + #~ " -I Add to the end of the main include path\n" + #~ " -I- Fine-grained include path control; see info docs\n" + #~ " -nostdinc Do not search system include directories\n" + #~ " (dirs specified with -isystem will still be used)\n" + #~ " -nostdinc++ Do not search system include directories for C++\n" + #~ " -o Put output into \n" + #~ " -pedantic Issue all warnings demanded by strict ANSI C\n" + #~ " -pedantic-errors Issue -pedantic warnings as errors instead\n" + #~ " -traditional Follow K&R pre-processor behaviour\n" + #~ " -trigraphs Support ANSI C trigraphs\n" + #~ " -lang-c Assume that the input sources are in C\n" + #~ " -lang-c89 Assume that the input sources are in C89\n" + #~ " -lang-c++ Assume that the input sources are in C++\n" + #~ " -lang-objc Assume that the input sources are in ObjectiveC\n" + #~ " -lang-objc++ Assume that the input sources are in ObjectiveC++\n" + #~ " -lang-asm Assume that the input sources are in assembler\n" + #~ " -lang-fortran\t\t Assume that the input sources are in Fortran\n" + #~ " -lang-chill Assume that the input sources are in Chill\n" + #~ " -std= Specify the conformance standard; one of:\n" + #~ " gnu89, gnu99, c89, c99, iso9899:1990,\n" + #~ " iso9899:199409, iso9899:1999\n" + #~ " -+ Allow parsing of C++ style features\n" + #~ " -w Inhibit warning messages\n" + #~ " -Wtrigraphs Warn if trigraphs are encountered\n" + #~ " -Wno-trigraphs Do not warn about trigraphs\n" + #~ " -Wcomment{s} Warn if one comment starts inside another\n" + #~ " -Wno-comment{s} Do not warn about comments\n" + #~ " -Wtraditional Warn if a macro argument is/would be turned into\n" + #~ " a string if -traditional is specified\n" + #~ " -Wno-traditional Do not warn about stringification\n" + #~ " -Wundef Warn if an undefined macro is used by #if\n" + #~ " -Wno-undef Do not warn about testing undefined macros\n" + #~ " -Wimport Warn about the use of the #import directive\n" + #~ " -Wno-import Do not warn about the use of #import\n" + #~ " -Werror Treat all warnings as errors\n" + #~ " -Wno-error Do not treat warnings as errors\n" + #~ " -Wall Enable all preprocessor warnings\n" + #~ " -M Generate make dependencies\n" + #~ " -MM As -M, but ignore system header files\n" + #~ " -MD As -M, but put output in a .d file\n" + #~ " -MMD As -MD, but ignore system header files\n" + #~ " -MG Treat missing header file as generated files\n" + #~ " -g3 Include #define and #undef directives in the output\n" + #~ " -D Define a with string '1' as its value\n" + #~ " -D= Define a with as its value\n" + #~ " -A () Assert the to \n" + #~ " -A- () Disable the to \n" + #~ " -U Undefine \n" + #~ " -v Display the version number\n" + #~ " -H Print the name of header files as they are used\n" + #~ " -C Do not discard comments\n" + #~ " -dM Display a list of macro definitions active at end\n" + #~ " -dD Preserve macro definitions in output\n" + #~ " -dN As -dD except that only the names are preserved\n" + #~ " -dI Include #include directives in the output\n" + #~ " -ftabstop= Distance between tab stops for column reporting\n" + #~ " -P Do not generate #line directives\n" + #~ " -$ Do not allow '$' in identifiers\n" + #~ " -remap Remap file names when including files.\n" + #~ " --version Display version information\n" + #~ " -h or --help Display this information\n" + #~ msgstr "" + #~ "¥¹¥¤¥Ã¥Á:\n" + #~ " -include ¾¤Î¥Õ¥¡¥¤¥ë°ÊÁ°¤Ë ¤ÎÆâÍÆ¤ò include\n" + #~ " -imacros Ãæ¥Þ¥¯¥í¤ÎÄêµÁ¤ò¼õÍý¤¹¤ë\n" + #~ " -iprefix °Ê¹ß¤ÎÆó¤Ä¤Î¥ª¥×¥·¥ç¥ó¤Ë ÀÜÆ¬¼­¤ò¤Ä¤±¤ë\n" + #~ " -iwithprefix ¥·¥¹¥Æ¥à¥¤¥ó¥¯¥ë¡¼¥É¥Ñ¥¹¤ÎËöÈø¤Ë ¤òÄɲÃ\n" + #~ " -iwithprefixbefore ¼ç¥¤¥ó¥¯¥ë¡¼¥É¥Ñ¥¹¤ÎËöÈø¤Ë ¤òÄɲÃ\n" + #~ " -isystem ¥·¥¹¥Æ¥à¥¤¥ó¥¯¥ë¡¼¥É¥Ñ¥¹¤ÎºÇ½é¤Ë ¤òÄɲÃ\n" + #~ " -idirafter ¥·¥¹¥Æ¥à¥¤¥ó¥¯¥ë¡¼¥É¥Ñ¥¹¤ÎËöÈø¤Ë ¤òÄɲÃ\n" + #~ " -I ¼ç¥¤¥ó¥¯¥ë¡¼¥É¥Ñ¥¹¤ÎËöÈø¤Ë ¤òÄɲÃ\n" + #~ " -I- ¤­¤áºÙ¤«¤Ê¥¤¥ó¥¯¥ë¡¼¥É¥Ñ¥¹À©¸æ; info ¤ò¸«¤è\n" + #~ " -nostdinc ¥·¥¹¥Æ¥à¥¤¥ó¥¯¥ë¡¼¥É¥Ç¥£¥ì¥¯¥È¥ê¤òõ¤µ¤Ê¤¤\n" + #~ " (-isystem ¤Ç»ØÄꤵ¤ì¤¿¤é»ÈÍѤµ¤ì¤Þ¤¹)\n" + #~ " -nostdinc++ C++ ÍÑ¥·¥¹¥Æ¥à¥¤¥ó¥¯¥ë¡¼¥É¥Ç¥£¥ì¥¯¥È¥ê¤òõ¤µ¤Ê¤¤\n" + #~ " -o ¤ËÂФ·¤Æ½ÐÎϤ¹¤ë\n" + #~ " -pedantic ¸·Ì©¤Ê ANSI C ¤ÎÍ׵᤹¤ë·Ù¹ð¤òȯ¹Ô\n" + #~ " -pedantic-errors -pedantic ¤Î·Ù¹ð¤ò¥¨¥é¡¼¤È¤·¤ÆÈ¯¹Ô\n" + #~ " -traditional K&R ¥×¥ê¥×¥í¥»¥Ã¥µ¤Î¿¶¤ëÉñ¤¤¤ËÄÉ¿ï\n" + #~ " -trigraphs ANSI C ¥È¥é¥¤¥°¥é¥Õ¤ò¥µ¥Ý¡¼¥È\n" + #~ " -lang-c ÆþÎϤò C ¤À¤È²¾Äꤹ¤ë\n" + #~ " -lang-c89 ÆþÎϤò C89 ¤À¤È²¾Äꤹ¤ë\n" + #~ " -lang-c++ ÆþÎϤò C++ ¤À¤È²¾Äꤹ¤ë\n" + #~ " -lang-objc ÆþÎϤò ObjectiveC ¤À¤È²¾Äꤹ¤ë\n" + #~ " -lang-objc++ ÆþÎϤò ObjectiveC++ ¤À¤È²¾Äꤹ¤ë\n" + #~ " -lang-asm ÆþÎϤò assembler ¤À¤È²¾Äꤹ¤ë\n" + #~ " -lang-fortran ÆþÎϤò Fortran ¤À¤È²¾Äꤹ¤ë\n" + #~ " -lang-chill ÆþÎϤò Chill ¤À¤È²¾Äꤹ¤ë\n" + #~ " -std= Ŭ¹ç¤¹¤ëɸ½à¤ò°Ê²¼¤«¤é°ì¤Ä»ØÄê;\n" + #~ " gnu89, gnu99, c89, c99, iso9899:1990,\n" + #~ " iso9899:199409, iso9899:1999\n" + #~ " -+ C++ ¥¹¥¿¥¤¥ë¤Î¥Ñ¡¼¥¸¥ó¥°¤òµö²Ä\n" + #~ " -w ·Ù¹ð¥á¥Ã¥»¡¼¥¸¤òÍÞÀ©¤¹¤ë\n" + #~ " -Wtrigraphs ¥È¥é¥¤¥°¥é¥Õ¤ò¸«¤Ä¤±¤¿¤é·Ù¹ð¤¹¤ë\n" + #~ " -Wno-trigraphs ¥È¥é¥¤¥°¥é¥Õ¤ò¸«¤Ä¤±¤Æ¤â·Ù¹ð¤·¤Ê¤¤\n" + #~ " -Wcomment{s} ¥³¥á¥ó¥È¤ÎÃæ¤Ë¥³¥á¥ó¥È¤¬¤¢¤ì¤Ð·Ù¹ð¤¹¤ë\n" + #~ " -Wno-comment{s} ¥³¥á¥ó¥È¤Ë´Ø¤¹¤ë·Ù¹ð¤ò¤·¤Ê¤¤\n" + #~ " -Wtraditional -traditional ¤¬»ØÄꤵ¤ì¤¿¾ì¹ç¡¢¥Þ¥¯¥í°ú¿ô¤¬\n" + #~ " ʸ»úÎó¤ËÊѹ¹¤µ¤ì¤ë¤è¤¦¤Ê¤é·Ù¹ð¤¹¤ë\n" + #~ " -Wno-traditional ʸ»úÎó»ØÄê¤Ë´Ø¤·¤Æ·Ù¹ð¤·¤Ê¤¤\n" + #~ " -Wundef #if ¤Ç̤ÄêµÁ¤Î¥Þ¥¯¥í¤¬»È¤ï¤ì¤Æ¤¤¤¿¤é·Ù¹ð¤¹¤ë\n" + #~ " -Wno-undef ̤ÄêµÁ¥Þ¥¯¥í¤Î¥Æ¥¹¥È¤Ë¤Ä¤¤¤Æ·Ù¹ð¤·¤Ê¤¤\n" + #~ " -Wimport #import ¤Î»ÈÍѤˤĤ¤¤Æ·Ù¹ð¤¹¤ë\n" + #~ " -Wno-import #import ¤Î»ÈÍѤˤĤ¤¤Æ·Ù¹ð¤·¤Ê¤¤\n" + #~ " -Werror Á´¤Æ¤Î·Ù¹ð¤ò¥¨¥é¡¼¤È¤·¤Æ°·¤¦\n" + #~ " -Wno-error ·Ù¹ð¤ò¥¨¥é¡¼¤È¤·¤Æ°·¤ï¤Ê¤¤\n" + #~ " -Wall Á´¤Æ¤Î¥×¥ê¥×¥í¥»¥Ã¥µ¤Î·Ù¹ð¤òÍ­¸ú¤Ë¤¹¤ë\n" + #~ " -M make ¤Î°Í¸´Ø·¸¤òÀ¸À®¤¹¤ë\n" + #~ " -MM -M ¤ÈƱ¤¸¤À¤¬¡¢¥·¥¹¥Æ¥à¥Ø¥Ã¥À¤Ï̵»ë¤¹¤ë\n" + #~ " -MD -M ¤ÈƱ¤¸¤À¤¬¡¢.d ¥Õ¥¡¥¤¥ë¤Ë½ÐÎϤ¹¤ë\n" + #~ " -MMD -MD ¤ÈƱ¤¸¤À¤¬¡¢¥·¥¹¥Æ¥à¥Ø¥Ã¥À¤Ï̵»ë¤¹¤ë\n" + #~ " -MG ¸«¤Ä¤«¤é¤Ê¤¤¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤ÏÀ¸À®¤µ¤ì¤ë¤â¤Î¤È¤¹¤ë\n" + #~ " -g3 #define ¤È #undef µ¿»÷Ì¿Îá¤ò½ÐÎϤ˴ޤá¤ë\n" + #~ " -D ¤òÄêµÁ¤·¡¢Ê¸»úÎó '1' ¤ò¤½¤ÎÃͤȤ¹¤ë\n" + #~ " -D= ¤òÄêµÁ¤·¡¢ ¤ò¤½¤ÎÃͤȤ¹¤ë\n" + #~ " -A () ¤Ï ¤À¤ÈÃǸÀ¤¹¤ë\n" + #~ " -A- () ¤Ï ¤À¤È¤·¤Ê¤¤\n" + #~ " -U ÄêµÁ¤ò¤ä¤á¤ë\n" + #~ " -v ¥Ð¡¼¥¸¥ç¥óÈÖ¹æ¤òɽ¼¨¤¹¤ë\n" + #~ " -H ÍøÍѤµ¤ì¤ë¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤Î̾Á°¤òɽ¼¨¤¹¤ë\n" + #~ " -C ¥³¥á¥ó¥È¤òÇË´þ¤·¤Ê¤¤\n" + #~ " -dM ËöÈø¤ÇÍ­¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤ë¥Þ¥¯¥íÄêµÁ¥ê¥¹¥È¤òɽ¼¨¤¹¤ë\n" + #~ " -dD ½ÐÎϤ˥ޥ¯¥íÄêµÁ¤ò»Ä¤·¤Æ¤ª¤¯\n" + #~ " -dN -dD ¤ÈƱ¤¸¤À¤¬¡¢Ì¾Á°¤À¤±¤ò»Ä¤·¤Æ¤ª¤¯\n" + #~ " -dI #include µ¿»÷Ì¿Îá¤ò½ÐÎϤ˴ޤá¤ë\n" + #~ " -ftabstop= Êó¹ð¥«¥é¥à¤Î¥¿¥Ö´Ö³Ö¤ò»ØÄꤹ¤ë\n" + #~ " -P #line µ¿»÷Ì¿Îá¤òÀ¸À®¤·¤Ê¤¤\n" + #~ " -$ ¼±ÊÌ»Ò¤Ë '$' ¤òµö¤µ¤Ê¤¤\n" + #~ " -remap ¥Õ¥¡¥¤¥ë¤ò include ¤¹¤ë¤È¤­¥Õ¥¡¥¤¥ë̾¤òºÆ¥Þ¥Ã¥×\n" + #~ " --version ¥Ð¡¼¥¸¥ç¥ó¾ðÊó¤òɽ¼¨¤¹¤ë\n" + #~ " -h or --help ¤³¤Î¾ðÊó¤òɽ¼¨¤¹¤ë\n" + + #~ msgid "mark active in cpp_pop_buffer" + #~ msgstr "cpp_pop_buffer ¤Ç¥Þ¡¼¥¯¤¬¥¢¥¯¥Æ¥£¥Ö" + + #~ msgid "length < 0 in cpp_expand_to_buffer" + #~ msgstr "cpp_expand_to_buffer Ãæ¤Ç length < 0" + + #~ msgid "backslash-newline within line comment" + #~ msgstr "¹Ô¥³¥á¥ó¥ÈÆâ¤Ë¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥å²þ¹Ô" + + #~ msgid "C++ style comments are not allowed in traditional C" + #~ msgstr "C++ ¥¹¥¿¥¤¥ë¤Î¥³¥á¥ó¥È¤ÏÅÁÅýŪ C ¤Ç¤Ïµö¤µ¤ì¤Þ¤»¤ó" + + #~ msgid "embedded null character ignored" + #~ msgstr "Ëä¤á¹þ¤Þ¤ì¤¿ null ʸ»ú¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿" + + #~ msgid "string constant runs past end of line" + #~ msgstr "ʸ»úÎóÄê¿ô¤¬¹Ô¤Î½ª¤ï¤ê¤Ç½ªÃ¼¤·¤Æ¤¤¤Þ¤»¤ó" + + #~ msgid "null characters in string or character constant" + #~ msgstr "ʸ»úÎóËô¤Ïʸ»úÄê¿ôÃæ¤Ë null ʸ»ú" + + #~ msgid "missing '>' in `#include '" + #~ msgstr "`#include <¥Õ¥¡¥¤¥ë̾>' ¤Ë '>' ¤¬¤¢¤ê¤Þ¤»¤ó" + + #~ msgid "vertical tab in preprocessing directive" + #~ msgstr "¥×¥ê¥×¥í¥»¥¹¥Ç¥£¥ì¥¯¥Æ¥£¥ô¤Ë¿âľ¥¿¥Öʸ»ú" + + #~ msgid "form feed in preprocessing directive" + #~ msgstr "¥×¥ê¥×¥í¥»¥¹¥Ç¥£¥ì¥¯¥Æ¥£¥ô¤Ë¥Õ¥©¡¼¥à¥Õ¥£¡¼¥É" + + #~ msgid "null character preserved" + #~ msgstr "¥Ì¥ëʸ»ú¤¬Êݤ¿¤ì¤Þ¤·¤¿" + + #~ msgid "comment start split across lines" + #~ msgstr "¥³¥á¥ó¥È³«»Ï¤¬¹Ô¤ò¤Þ¤¿¤¤¤Ç¤¤¤Þ¤¹" + + #~ msgid "comment start '/*' split across lines" + #~ msgstr "¥³¥á¥ó¥È³«»Ï '/*' ¤¬¹Ô¤ò¤Þ¤¿¤¤¤Ç¤¤¤Þ¤¹" + + #~ msgid "comment end '*/' split across lines" + #~ msgstr "¥³¥á¥ó¥È½ªÃ¼ '*/' ¤¬¹Ô¤ò¤Þ¤¿¤¤¤Ç¤¤¤Þ¤¹" + + #~ msgid "handle_directive called on macro buffer" + #~ msgstr "¥Þ¥¯¥í¥Ð¥Ã¥Õ¥¡¤Ç handle_directive ¤¬¸Æ¤Ð¤ì¤Þ¤·¤¿" + + #~ msgid "ISO C does not allow #%s" + #~ msgstr "ISO C ¤Ï #%s ¤òµö²Ä¤·¤Þ¤»¤ó" + + #~ msgid "redefining poisoned `%.*s'" + #~ msgstr "±øÀ÷¤µ¤ì¤¿ `%.*s' ¤òºÆÄêµÁ" + + #~ msgid "garbage at end of #line" + #~ msgstr "#line ¥³¥Þ¥ó¥É¤ÎºÇ¸å¤Ë¥´¥ß" + + #~ msgid "second token after #line is not a string" + #~ msgstr "#line ¤Î¸å¤ÎÆó¤ÄÌܤΥȡ¼¥¯¥ó¤¬Ê¸»úÎó¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + + #~ msgid "junk on line after #undef" + #~ msgstr "#undef ¤Î¸å¤Î¹Ô¤Ë¥´¥ß" + + #~ msgid "cannot undefine poisoned \"%s\"" + #~ msgstr "±øÀ÷¤µ¤ì¤¿ \"%s\" ¤ò undefine ¤Ç¤­¤Þ¤»¤ó" + + #~ msgid "malformed #pragma implementation" + #~ msgstr "¤ª¤«¤·¤Ê #pragma implementation" + + #~ msgid "#%s with no argument" + #~ msgstr "#%s ¤Ë°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó" + + #~ msgid "Cannot duplicate non-existant exception region." + #~ msgstr "¸ºß¤·¤Ê¤¤Îã³°Îΰè¤òÊ£À½¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£" + + #~ msgid "Never issued previous false_label" + #~ msgstr "Á°¤Î false_label ¤Ï·è¤·¤ÆÈ¯¹Ô¤µ¤ì¤Þ¤»¤ó" + + #~ msgid "file path prefix `%s%s' never used" + #~ msgstr "¥Õ¥¡¥¤¥ë¥Ñ¥¹¤Î¥×¥ì¥Õ¥£¥Ã¥¯¥¹ `%s%s' ¤ÏÁ´¤¯»È¤ï¤ì¤Þ¤»¤ó" + + #~ msgid "file path prefix `%s' never used" + #~ msgstr "¥Õ¥¡¥¤¥ë¥Ñ¥¹¤Î¥×¥ì¥Õ¥£¥Ã¥¯¥¹ `%s' ¤ÏÁ´¤¯»È¤ï¤ì¤Þ¤»¤ó" + + #~ msgid "%s: option `--%s' doesn't allow an argument\n" + #~ msgstr "%s: ¥ª¥×¥·¥ç¥ó `--%s' ¤Ë°ú¿ô¤Ï¤¢¤ê¤Þ¤»¤ó\n" + + #~ msgid "%s: option `%c%s' doesn't allow an argument\n" + #~ msgstr "%s: ¥ª¥×¥·¥ç¥ó `%c%s' ¤Ë°ú¿ô¤Ï¤¢¤ê¤Þ¤»¤ó\n" + + #~ msgid "%s: option `%s' requires an argument\n" + #~ msgstr "%s: ¥ª¥×¥·¥ç¥ó `%s' ¤Ë¤Ï°ú¿ô¤¬É¬ÍפǤ¹\n" + + #~ msgid "%s: unrecognized option `--%s'\n" + #~ msgstr "%s: ǧ¼±ÉÔǽ¤Ê¥ª¥×¥·¥ç¥ó `--%s'\n" + + #~ msgid "%s: unrecognized option `%c%s'\n" + #~ msgstr "%s: ǧ¼±ÉÔǽ¤Ê¥ª¥×¥·¥ç¥ó `%c%s'\n" + + #~ msgid "%s: illegal option -- %c\n" + #~ msgstr "%s: ÉÔÀµ¤Ê¥ª¥×¥·¥ç¥ó -- %c\n" + + #~ msgid "%s: invalid option -- %c\n" + #~ msgstr "%s: ̵¸ú¤Ê¥ª¥×¥·¥ç¥ó -- %c\n" + + #~ msgid "%s: option requires an argument -- %c\n" + #~ msgstr "%s: ¥ª¥×¥·¥ç¥ó¤Ë¤Ï°ú¿ô¤¬É¬ÍפǤ¹ -- %c\n" + + #~ msgid "%s: option `-W %s' doesn't allow an argument\n" + #~ msgstr "%s: ¥ª¥×¥·¥ç¥ó `-W %s' ¤Ë°ú¿ô¤Ï¤¢¤ê¤Þ¤»¤ó\n" + + #~ msgid "Objective-C text in C source file" + #~ msgstr "C ¤Î¥½¡¼¥¹¥Õ¥¡¥¤¥ëÃæ¤Ë Objective-C ¤Îʸ»úÎó" + + #~ msgid "statically allocated objects not supported" + #~ msgstr "¥ª¥Ö¥¸¥§¥¯¥È¤ÎÀÅŪ¤Ê³äÅö¤Æ¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + + #~ msgid "output pipe has been closed" + #~ msgstr "½ÐÎϤΥѥ¤¥×¤¬ÊĤ¸¤é¤ì¤Þ¤·¤¿" + + #~ msgid "Unknown stab %s: : 0x%x\n" + #~ msgstr "ÉÔÌÀ¤Ê¥¹¥¿¥Ö %s: : 0x%x\n" diff -Nrc3pad gcc-3.0.4/gcc/po/nl.gmo gcc-3.1/gcc/po/nl.gmo *** gcc-3.0.4/gcc/po/nl.gmo Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/po/nl.gmo Wed May 15 02:41:46 2002 *************** *** 0 **** --- 1,98 ---- + Þ•NŒiü4 F^¡F:G%;G+aG0G2¾G#ñG#HH9HN‚HÑHíHI"IBI*[I3†I3ºI3îI3"J3VJŠJ¨JÈJÛJêJ/K4KTK!oK/‘KÁK,×K,L41LfL„LL¹L"×LúL(M,>MkMˆM1œMÎM.íM-NJN,^N,‹N*¸N%ãN3 O+=O;iO¥OÄO'àOP'P,CP(pP(™P(ÂP0ëP4Q9QQ'‹Q³Q ÒQ$óQ6R"OR(rR-›RÉRçRS-%SbSS+¶S$âST!$TFT&^T…T;šT*ÖT:Uéc'(dbPd³dÏdçd$e3*e0^e%e%µe%Ûe2f.4f*cfŽf®f+Ìf&øf$g4Dgyg”g!´gÖg&õg.h&Kh%rh + ˜h1£h:Õh0iAiTisi„i¢i¹iÍiåi j!#j#Ejij ‰jªj!Êj!ìjk,.k([k#„k*¨kÓk,ók& l+Gl=sl ±l)Òl/ül.,m)[m,…m²mÃmãm)ým/'n/Wn%‡n­n¾nÐnán3ÿn13o<eo1¢o(Ôo<ýo':p1bp!”p.¶p0åpq0q.Mq1|q;®q%êq'r8rTr]rfrzr&šr&Ár<èr;%s.as1s.Âs.ñs5 t5Vt?ŒtÌtiåt(Ou2xu «uÌu,çu,v'Av$iv(Žv&·v'Þv'w,.w/[w0‹w4¼w)ñw%x3Axux'”x<¼x ùx)y-y(Lyuy†y žy%¨yÎyãyòyzz.zCz]z vz—z­zÄz+äz{({H{a{ s{ ”{ µ{Á{Ü{ò{ |2%|.X|*‡|$²|%×|%ý|$#}!H}j}†} }(™}&Â}3é}'~$E~,j~—~±~ ¸~Â~!É~ë~ +  &@0g˜*·(â( €4€N€%m€“€!œ€)¾€6è€2#R2v©,²"ß0‚43‚!h‚&Š‚5±‚#ç‚' ƒ&3ƒ$Zƒ=ƒ'½ƒ*åƒ/„@„5P„6†„*½„è„ …-!…O…%c…7‰…#Á…å…ý…'†!>†`†|†)•†;¿†û† ‡ 5‡)?‡ i‡Ї-™‡2LJ#ú‡+ˆ9Jˆ0„ˆ/µˆ;åˆ*!‰1L‰1~‰°‰;Љ* Š17Š0iŠšŠ¸Š+׊‹&‹%9‹._‹+Ž‹&º‹á‹ð‹ ÿ‹ ŒŒ1ŒCŒUŒgŒyŒ‹ŒŒ¯ŒÁŒÓŒåŒ÷Œ ->O`q‚•¦·ÈÙ + êõŽŽ*ŽJŽ(dŽ)Ž·ŽÑŽ%ïŽ")Lg„ ¼Øë;VqªÅàû‘8‘4T‘'‰‘3±‘å‘’"’/@’p’"Š’,­’&Ú’“%!“G“&f““+­“Ù“ù“%”!?”/a”‘”3¬”à”!û”•3:•-n•.œ•)Ë•*õ•3 –0T–7…– + ½–È–"å–*—3—);—!e—‡— —´—Ò—ñ—˜*˜@˜"I˜1l˜%ž˜Ę/㘠™6™ T™!u™&—™¾™Ú™8÷™ 0š=š]šrš)š+·šãš ÷š›&7›^›>t›(³›*Ü›$œ,œ"Dœ%gœœ.«œ.Úœ& 0Q + it+‡1³å"ž((žQž5ež›ž%£ž"Éžìžþž/Ÿ?Ÿ_Ÿ(~Ÿ§ŸÆŸ"ãŸ- 4 (R { *™ Ä 7Û #¡07¡ h¡)t¡ž¡´¡%Ë¡ñ¡+ö¡,"¢*O¢(z¢)£¢/Í¢7ý¢)5£,_£Œ£#¨£Ì£0é£=¤X¤t¤“¤%«¤Ѥ!æ¤.¥7¥8R¥@‹¥#Ì¥ð¥% ¦2¦:¦P¦k¦€¦œ¦·¦-Φ2ü¦$/§.T§-ƒ§+±§ݧ=û§%9¨'_¨ ‡¨¨¨ ¯¨'Ш"ø¨©*9©3d©5˜©+Ω6ú©91ª&kª4’ª3Ǫûª «4«T«q«‰«'©«Ñ«ð«(¬"9¬!\¬~¬œ¬$º¬$߬ ­.%­0T­(…­*®­0Ù­$ + ®#/® S®\t®3Ñ®¯¯/#¯ S¯]¯$w¯.œ¯'˯1ó¯.%°5T°5а9À°5ú°50±5f±œ±#»±#ß±(²,,²,Y²+†²4²²3ç²0³L³k³ˆ³&¨³.ϳ2þ³1´(N´w´"•´¸´#×´û´)µCµ#bµ)†µ°µ$е.õµ$¶.8¶&g¶-޶,¼¶-é¶'·)?·0i·š·#¹·)Ý·4¸<¸X¸w¸&¸·¸и é¸ + ¹¹ ¹.A¹p¹0ˆ¹0¹¹ê¹7º+@ºlº†º.£ºAÒº.»C»,a»-Ž»¼»лå»)¼!*¼1L¼~¼1ž¼$м,õ¼("½8K½„½ ½'—½0¿½ð½3¾GC¾‹¾%”¾º¾6Ó¾ + ¿%%¿"K¿ n¿ ¿-°¿"Þ¿!À$#À HÀiÀ‡À@¡ÀfâÁ@IÂ.ŠÂ/¹Â0éÂIÃ+dÃ+ÃO¼ÃW ÄdĂĞÄ,¹ÄæÄ-ÅC2ÅIvÅIÀÅI + ÆITÆ'žÆ)ÆÆðÆ ÇÇ2-Ç#`Ç%„ǪÇ-ÊÇøÇ,È,?ÈDlÈ%±È×ÈóÈ"É%3ÉYÉ/uÉ1¥É$×ÉüÉ/Ê"BÊ;eÊ6¡ÊØÊ-ðÊ-Ë+LË&xË4ŸË0ÔËAÌGÌgÌ*‡Ì²ÌÒÌ-òÌ) Í)JÍ)tÍ7žÍ9ÖÍ@Î(QÎ%zÎ' Î%ÈÎ=îÎ),Ï/VÏ0†Ï!·Ï!ÙÏ#ûÏ<Ðk\Ð6ÈÐ)ÿÐ!)Ñ!KÑmÑ%‡Ñ­ÑOÉÑ8Ò?RÒ’ÒM¦ÒEôÒ4:Ó0oÓG Ó6èÓ6Ô\VÔ'³ÔÛÔ%øÔAÕ%`Õ2†Õ7¹ÕMñÕ?ÖTÖ6iÖ, Ö3ÍÖ<×:>×:y×P´×Ø6#Ø'ZØ2‚Ø"µØ,ØØ;Ù)AÙ<kÙ:¨Ù(ãÙ. Ú8;Ú&tÚ›Ú-ºÚ7èÚ( Û)IÛ)sÛ0Û,ÎÛHûÛDÜ.`Ü2ÜÂÜáÜ,Ý,-Ý?ZÝ4šÝÏÝ9íÝC'ÞCkÞ8¯Þ6èÞ6ß Vßwß Žß/¯ß/ßß$à4à/Sà6ƒàIºà!á1&á3Xá0Œá3½á;ñá-â DâiRâ¼â1Ïâ)ã'+ã6SãŠãH¨ã0ñãq"ä”ä²ä"Îä(ñä2å/Må*}å*¨å-Óå;æ1=æ/oæ"Ÿæ!Âæ)äæ3ç)Bç;lç¨ç&Èçïç#è&3è8Zè*“è$¾è + ãè2îèC!é6eéœé$¸éÝé$òé!ê9êQê!lê%Žê)´ê(Þê$ë),ë$Vë&{ë&¢ë$Éë1îë- ì(Nì/wì$§ì1Ìì,þì1+í?]í#í)Áí5ëí>!î.`î3îÃî!Úî%üî6"ï>YïJ˜ï5ãïð,ðBð$WðJ|ð:Çð>ñ5Añ'wñ>Ÿñ'Þñ4ò*;ò0fò6—òÎòçò0óE3óRyó+Ìó,øó%ô?ôHôQô(dô&ô&´ôLÛôL(õ2uõ?¨õ6èõ5ö8Uö9ŽöEÈö÷x+÷1¤÷9Ö÷#ø4ø1Sø:…ø?Àø"ù?#ù1cù)•ù(¿ù-èù4ú2Kú;~ú2ºú/íú;û"Yû-|ûAªû ìû1úû$,ü-Qüüü ¨ü'²üÚüðüÿüý&ý;ýQýjý„ý¤ý¶ý&Ðý3÷ý+þFþfþ}þþ¬þ ÌþØþøþÿ!(ÿBJÿ6ÿ,Äÿ.ñÿ0 /Q.&°#×û )*8Gc.«'Ú,/K R\&c#Š®"Æ2é2!O+q83Ö* + &5$\1Š.¼?ë3+$_<„Á:Ê'3-5a)—$ÁAæ)(-R+€$¬EÑ7.O5~´:Ã7þ+6 (b *‹ 9¶ ð & + <2 + #o + “ + ­ + &Æ + "í +  / +J Ev ¼ %×  ý 1 "=  ` 8n >§ $æ + G7 0 3° Bä )'2Q;„'À@è0).Z0‰ºÙ*÷ "//#_.ƒ'².Ú +;Uo‰£½×ñ %?Ys§ÁÚó %>WqŠ£¼Õ îû1&Ah0…1¶è&(O%e‹«"Ê"í0D"]!€¢Á!à!@_,~ « ÌCí(1BZº Ö1÷)-I7w-¯-Ý8 'D(l$•.º*é*(? h4‰¾5Ó 1%"W4z)¯5Ù70G=x:¶Fñ + 8+C1o9¡Û,á$3Oe'…+­Ùö + 6A %x 'ž -Æ  ô 8þ (7!#`!1„!¶!'Ô!Eü!B" R"s""%«"'Ñ"ù"!#:#4Z##Hª#)ó#/$)M$w$%$'¶$Þ$8ü$05%)f%$%µ%Î%Ý%0ó%1$&"V&$y&1ž&Ð&<ï&,' 4'/U'…'œ'6°'ç'(.%(!T($v((›(5Ä(!ú(-)#J)*n)™)2²)(å):* + I*3T*ˆ*"¡*2Ä*÷*.ü*0++2\+)++¹+<å+G",.j,+™,&Å,(ì,-.1->`-Ÿ-#º-Þ-&ö-.=3.:q.¬.:Æ.@/!B/#d/'ˆ/°/¸/Ï/ë/00*:02e07˜0%Ð02ö04)1*^1"‰1:¬1$ç1& 232R26Y2'23¸2$ì203?B3A‚36Ä3Hû3AD4*†4<±4=î4,5'E5'm5+•5Á5#Þ556"86![60}6®6$É6"î6!7)37']7!…78§71à728*E8/p8$ 8'Å8"í8Y99j9¤9¼99Ã9 ý9 :'(:8P:(‰:7²:3ê:=;=\;Iš;Aä;A&<Ah<ª<!È<!ê<& =Q3=Q…=,×=@>DE>0Š>»>Ù>ö>+?/B?,r?!Ÿ?,Á?î?&@#5@(Y@‚@)¡@Ë@#ê@)A 8A%YA9A¹A0ËA*üA1'B+YB;…B5ÁB,÷B/$CTC,tC/¡CGÑCD#9D]D*{D¦DÃD%áDE!E)'E8QEŠE/¥E/ÕEF=%F+cFF%¬F5ÒFNG4WGŒG8ªG9ãGH6HQH,nH%›H5ÁH&÷H:I,YI8†I*¿I<êI'J/J/8J>hJ'§J7ÏJOKWK.`K"K<²K#ïK.L*BL-mL-›L6ÉL*M++M+WM-ƒM±MÎM0˜IM„òIccÈ¿ÚúÐCe¾jöñ²¸L“3íBŸM‹‡)B›¼Žiß¿(™’Õ EhDúLp&C8žîVu»ÝÜ€x¶Ù?ÃM\®û!XMÙ²-Ëȶ”ëè,"t54jrÕH*V#$mÿàãÓ;Q + ªÊÝÞ.hYAáJ?¯VKJ”wµ° Σæ{’:5S?`<AZÇÅøÅŠ2<̱ ß<>ÚÖ¡D[©tNíƒ'³ç_öGF~qìDuý9{»™$ßå[!ê½Üêc*J,¤Ì…—S¬–kdÞŠÇ6®ž{‰ek¨zH% Y¦xˆ”¡0±¦¢Ûš^ï’ N1…(øR›»9ñ'‚Öl¥E7ÂÊ:Ð2f Æ8šo&†¤Um÷àü] ˜áŒ^B + =2¨IaÑ;¸¤@¡=isÎn2ŽI‡‰Ñf‹«>uäзò¼ð63¹ä¯´+#U[à¦gÏ qZBÿ w°õüO,­/ù® Œv>T/¾‘TÁÔÃ@œþ£ÍÕ=É|@K·ìåx vA·ðsïD~\ 7s$R¹§PzÒ¢¼ + !Kçý}Íô‘5¯PÞ)L"€ÇF,b­iÆ*Uˆë3%e4ÉTþ¬Òb齃z]Ûk“HO÷)´j˜ÀÑXZ#*ìF–Øû´Ý¬ú-ƒ:)‚èÖÁ"³†³/8‰_ó£ãË`t?p×áµÚ• }G‘óºè‚ yçâתÓÓ~6­ÔþØmœÈw_b(— Á^nN²ö¥Ïhn¨4©©Ä؇=Ë%pQ„§:Æ5.1°W¿Ü`Cð‹««+dJr›4"ñôHæ A„å|š|ù W SFâ0o.yÀdõ+†¢æü3¸ª1œ/û éòÅE&ãäÌ-Êë“ù+Š0½q]€ïfaõ69\•ÿîÀ%KŒC¥oÉÏXL7ÄÒ÷gg§Û&ŽWG…lR !¶Ía<Yžvýl7>ôó9 OÎ;í E¾'- + õé×18r'™Q#â•ÙŸ¹êº–@ÄPN—y;º$}G(.ˆøÔ± + ;; Combiner totals: %d attempts, %d substitutions (%d requiring new space), + ;; %d successes. + + Processing symbol table #%d, offset = 0x%.8lx, kind = %s + + Updating header and load commands. + + + ldd output with constructors/destructors. + + write_c_file - output name is %s, prefix is %s + #-lines for entering and leaving files don't match#include "..." search starts here: + #include <...> search starts here: + #pragma pack (pop) encountered without matching #pragma pack (push, )#pragma pack(pop, %s) encountered without matching #pragma pack(push, %s, )%R not followed by %B/C/D/E%d constructor(s) found + %d destructor(s) found + %d errors, %d sorries, do granting%d frame table(s) found + %s action in PROC with no declared RESULTS%s as `float' rather than `double' due to prototype%s as complex rather than floating due to prototype%s as floating rather than complex due to prototype%s as floating rather than integer due to prototype%s as integer rather than floating due to prototype%s as signed due to prototype%s as unsigned due to prototype%s at end of input%s before `%s'%s before string constant%s discards qualifiers from pointer target type%s expression must be referable%s format, %s arg (arg %d)%s from incompatible pointer type%s function, region %d, offset = %ld (0x%.8lx) + %s is not addressable%s makes integer from pointer without a cast%s makes pointer from integer without a cast%s makes qualified function pointer from unqualified%s not allowed outside a PROC%s of read-only location%s of read-only member `%s'%s of read-only variable `%s'%s parameter %d must be a location%s returned %d exit status%s with different width due to prototype%s: %s compiler not installed on this system%s: cannot open as COFF file%s: not a COFF file(Each undeclared identifier is reported only once(near initialization for `%s')(so you should pass `%s' not `%s' to `va_arg')-E required when input is from standard input-I- specified twice-Wformat-extra-args ignored without -Wformat-Wformat-nonliteral ignored without -Wformat-Wformat-security ignored without -Wformat-Wformat-y2k ignored without -Wformat-Wmissing-format-attribute ignored without -Wformat-Wuninitialized is not supported without -O-f%sleading-underscore not supported on this target machine-fPIC is not valid with -mcoff-fPIC not valid with -mcoff-fpic and -mapcs-reent are incompatible-fpic is not valid with -mcoff-fpic not valid with -mcoff-malign-functions=%d is not between 1 and %d-malign-jumps=%d is not between 1 and %d-malign-loops=%d is not between 0 and %d-malign-loops=%d is not between 1 and %d-mapcs-26 and -mapcs-32 may not be used together-mapcs-stack-check incompatible with -mno-apcs-frame-mbig-endian and -mlittle-endian may not be used together-mbranch-cost=%d is not between 0 and 5-mbsd and -mxopen incompatible-mbsd and -pedantic incompatible-mregparm=%d is not between 0 and %d-msoft-float and -mhard_float may not be used together-mxopen and -pedantic incompatible-p option not supported: use -pg instead-pg and -fomit-frame-pointer are incompatible-shared not valid with -mcoff-static not valid with -mcoff-symbolic not valid with -mcoff-traditional is deprecated and may be removed;; Combiner statistics: %d attempts, %d substitutions (%d requiring new space), + ;; %d successes. + + APCS reentrant code not supported. IgnoredASSIGN to variable that is too smallBASE variable never declaredCASE selector with variable rangeCASE value out of rangeELSE label not within a CASE statementEnd of search list. + GCC does not yet properly implement `[*]' array declaratorsGNU C does not support -C without using -EGNU compiler does not support statically allocated objectsI/O error on outputISO C does not support plain `complex' meaning `double complex'ISO C forbids range expressions in switch statementsISO C forbids taking the address of a labelISO C forbids the address of a cast expressionISO C++ forbids range expressions in switch statementsISO C++ forbids taking the address of a labelISO C89 does not support `[*]' array declaratorsISO C89 does not support `static' or type qualifiers in parameter array declaratorsISO C89 does not support complex typesJunk after end of expression.L%d cache latency unknown for %sPOS may not be specified for a list of field declarationsRETURN not allowed outside PROCRETURN with a value, in PROC returning voidRETURN with no value and no RESULT action in procedureThe number of CASE selectors does not match the number of CASE label lists[Leaving %s] + [cannot find %s]\x used with no following hex digits__alignof__ applied to an incomplete type__builtin_longjmp second argument must be 1__builtin_saveregs not supported by this target__builtin_trap not supported by this target`%%%c' yields only last 2 digits of year`%%%c' yields only last 2 digits of year in some locales`%d' operand isn't a register`%s' attribute applies only to functions`%s' attribute directive ignored`%s' attribute does not apply to types`%s' attribute ignored`%s' attribute ignored for `%s'`%s' attribute only applies to function types`%s' cannot be statically allocated`%s' declared as function returning a function`%s' declared as function returning an array`%s' declared inline after being called`%s' declared inline after its definition`%s' defined both normally and as an alias`%s' fails to be a typedef or built in type`%s' has an incomplete type`%s' has both `extern' and initializer`%s' initialized and declared `extern'`%s' is an unrecognized format function type`%s' is narrower than values of its type`%s' is normally a non-static function`%s' is not at beginning of declaration`%s' is not defined outside of function scope`%s' is promoted to `%s' when passed through `...'`%s' is usually a function`%s' locally external but globally static`%s' must not be declared readonly`%s' previously declared here`%s' previously defined here`%s' redeclared as different kind of symbol`%s' takes only zero or two arguments`%s' undeclared (first use in this function)`%s' undeclared here (not in a function)`%s' used prior to declaration`%s' was declared `extern' and later `static'`%s' was declared implicitly `extern' and later `static'`%s' was previously implicitly declared to return `int'`%s' was used with no declaration before its definition`%s' was used with no prototype before its definition`-p' not supported; use `-pg' and gprof(1)`...' in old-style identifier list`/*' within comment`__alignof' applied to a bit-field`__builtin_next_arg' called without an argument`enum %s' incomplete in scope ending here`long long long' is too long for GCC`noreturn' function does return`noreturn' function returns non-void value`return' with a value, in function returning void`return' with no value, in function returning non-void`sizeof' applied to a bit-field`struct %s' incomplete in scope ending here`this' is unavailable for static member functions`union %s' incomplete in scope ending here`va_start' used in function with fixed args`void' in parameter list must be the entire lista global declarationa parametera parameter list with an ellipsis can't match an empty parameter name list declarationa previous localaddress of global register variable `%s' requestedaddress of register variable `%s' requestedaggregate initializer is not constantaggregate initializer uses complicated arithmeticalias arg not a stringalias definitions not supported in this configuration; ignoredalignment may not be specified for `%s'an argument type that has a default promotion can't match an empty parameter name list declarationargument #%d is a structureargument %d is READonlyargument %d must be referableargument %d of %s must be a locationargument 2 of ASSOCIATE must not be an empty stringargument 2 of MODIFY must not be an empty stringargument 2 to MODIFY must be a stringargument 3 to MODIFY must be a stringargument `%s' doesn't match prototypeargument of `__builtin_args_info' must be constantargument of `__builtin_args_info' out of rangeargument of `asm' is not a constant stringargument to NUM is not discretearguments given to macro `%s'arithmetic on pointer to an incomplete typearray `%s' assumed to have one elementarray index in non-array initializerarray initialized from non-constant array expressionarray size missing in `%s'array subscript has type `char'array subscript is not an integerarray tuple index out of rangearray type has incomplete element typearray type value used where scalar is requiredarrays of functions are not meaningfulasm template is not a string constantassignmentassignment to final field `%s' not in constructorattempt to take address of bit-field structure member `%s'attributes in parameter array declarator ignoredbad header versionbad initializer for field `%s'bad magic numberbad magic number in file '%s'bad raw header versionbad string constantbad string length in %sbad value (%s) for %s switchbad value (%s) for -mabi= switchbad value (%s) for -march= switchbad value (%s) for -mcmodel= switchbad value (%s) for -mcpu switchbad value (%s) for -mcpu= switchbad value (%s) for -mips switchbad value (%s) for -mmodel switchbad value (%s) for -msdata switchbad value `%s' for -mcpu switchbad value `%s' for -mfp-rounding-mode switchbad value `%s' for -mfp-trap-mode switchbad value `%s' for -mmemory-latencybad value `%s' for -mtrap-precision switchbit-field `%s' has invalid typebit-field `%s' width not an integer constantboth long and short specified for `%s'both signed and unsigned specified for `%s'braced-group within expression allowed only inside a functionbraces around scalar initializerbreak statement not within loop or switchbuilt-in function `%s' declared as non-functionbuilt-in function `%s' not currently supportedc4x_address_cost: Invalid addressing modec4x_operand_subword: address not offsettablecalled from herecalled object is not a functioncan't inline call to `%s'can't set `%s' attribute after definitioncannot EXIT label `%s' outside current functioncannot GOTO label `%s' outside current functioncannot disable built-in function `%s'cannot find `%s'cannot find `ldd'cannot find `nm'cannot inline function `main'cannot put object with volatile field into registercase label does not reduce to an integer constantcase label lower limit is not a discrete constant expressioncase label must be a discrete constant expressioncase label not within a switch statementcase label upper limit is not a discrete constant expressioncase selector not compatible with labelcast discards qualifiers from pointer target typecast does not match function typecast from pointer to integer of different sizecast increases required alignment of target typecast specifies array typecast specifies function typecast to pointer from integer of different sizecast to union type from type not present in unioncausing unhandled exception `%s' (this is flaged only once)cccp error: invalid special hash typechar-array initialized from wide stringcharacter constant too longclose %dclose %scollect2 version %scomma at end of enumerator listcomparison between pointer and integercomparison between signed and unsignedcomparison is always false due to limited range of data typecomparison is always true due to limited range of data typecomparison of complete and incomplete pointerscomparison of distinct pointer types lacks a castcomparison of promoted ~unsigned with constantcomparison of promoted ~unsigned with unsignedcomparison of unsigned expression < 0 is always falsecomparison of unsigned expression >= 0 is always truecomparisons like X<=Y<=Z do not have their mathematical meaningcomplex invalid for `%s'concatenation of string literals with __FUNCTION__ is deprecated. This feature will be removed in futureconditional expression not allowed in %sconditional expression not allowed in this contextconflicting declarations of `%s'conflicting types for `%s'conflicting types for built-in function `%s'const declaration for `%s' follows non-constconst objects cannot go in .sdata/.sbsscontinue statement not within a loopcontrol reaches end of non-void functionconversion lacks type at end of formatconversion to non-scalar type requestedcould not convert 0x%l.8x into a regiondata definition has no type or storage classdata type of `%s' isn't suitable for a registerdecimal constant is so large that it is unsigneddeclaration for parameter `%s' but no such parameterdeclaration of `%s' as array of functionsdeclaration of `%s' as array of voidsdeclaration of `%s' has `extern' and is initializeddeclaration of `%s' shadows %sdeclaration of `%s' shadows a parameterdeclaration of `%s' shadows a symbol from the parameter listdecrementdecrement of pointer to unknown structuredereferencing `void *' pointerdereferencing pointer to incomplete typedivision by zerodivision by zero in #ifdup2 %d 1duplicate (or overlapping) case valueduplicate CASE valueduplicate `%s'duplicate `const'duplicate `restrict'duplicate `volatile'duplicate case valueduplicate definition `%s'duplicate grant for `%s'duplicate label declaration `%s'duplicate member `%s'dynamic dependencies. + dynamic dependency %s not foundelements of array `%s' have incomplete typeembedded `\0' in formatempty body in an else-statementempty character constantempty declarationempty expression in string indexempty index range in initializerempty rangeempty range in array tupleempty range specifiedempty scalar initializerenum defined inside parmsenumeration values exceed range of largest integerenumerator value for `%s' not integer constantescape sequence out of range for characterexcess elements in array initializerexcess elements in scalar initializerexcess elements in struct initializerexcess elements in union initializerexcess initializer for field `%s'excess unnamed initializersexecv %sexecvp %sexpression statement has incomplete typeexpression will always cause RANGEFAILextern declaration of `%s' doesn't match global oneextra brace group at end of initializerextra elements in scalar initializerextra semicolon in struct or union specifiedfailed to find class '%s'fclosefclose %sfdopenfield `%s' declared as a functionfield `%s' has incomplete typefield `%s' not foundfini function found in object %sfirst argument of `%s' should be `int'first argument to `va_arg' not of type `va_list'flexible array member in unionflexible array member not at end of structfloating constant exponent has no digitsfloating constant may not be in radix 16floating constant misusedfloating constant out of rangefloating point overflow in expressionfopen %sfor each function it appears in.)format argument is not a pointer (arg %d)format argument is not a pointer to a pointer (arg %d)format string arg follows the args to be formattedformat string arg not a string typefp software completion requires -mtrap-precision=ifstat %sfunction `%s' is initialized like a variablefunction `%s' redeclared as inlinefunction `%s' redeclared with attribute noinlinefunction `%s' was previously declared within a blockfunction call has aggregate valuefunction declaration isn't a prototypefunction declared `noreturn' has a `return' statementfunction definition declared `auto'function definition declared `register'function definition declared `typedef'function does not return string typefunction might be possible candidate for attribute `noreturn'function return type cannot be functionfunction returns address of local variablegcc driver version %s executing gcc version %s + gcc version %s + global register variable `%s' used in nested functionglobal register variable follows a function definitionglobal register variable has initial valuehex escape out of rangehex escape sequence out of rangehexadecimal floating constant has no exponentignoring pragma: %simplicit declaration of function `%s'incompatibilities between object file & expected valuesincompatible array tuple element %sincompatible index modeincompatible modes in %sincompatible modes in concat expressionincompatible modes in parameter 2incompatible operands to %sincompatible record modeincompatible type for argument %d of `%s'incompatible type for argument %d of indirect function callincompatible types in %sincomplete CASE - %s not handledincrementincrement of pointer to unknown structureinit function found in object %sinitializationinitialized variable `%s' is marked dllimportinitializer element is not computable at load timeinitializer element is not constantinitializer fails to determine size of `%s'initializer for floating value is not a floating constantinitializer for integer value is too complicatedinitializer for static variable is not constantinitializer for static variable uses complicated arithmeticinitializer is not an array or string modeinitializer-string for array of chars is too longinline float constants not supported on this hostinlining failed in call to `%s'instruction scheduling not supported on this target machineint-array initialized from non-wide stringinteger constant contains digits beyond the radixinteger constant is so large that it is unsignedinteger constant out of rangeinteger overflow in expressioninteger overflow in preprocessor expressioninternal errorinternal error - use of undefined typeinternal error in check_format_stringinternal error: unknown expression mode in %sinternal error: unknown type of expressioninterworking forces APCS-32 to be usedinvalid #-lineinvalid #identinvalid #lineinvalid %%C valueinvalid %%E valueinvalid %%L valueinvalid %%M valueinvalid %%N valueinvalid %%O valueinvalid %%P valueinvalid %%Q valueinvalid %%R valueinvalid %%U valueinvalid %%V valueinvalid %%h valueinvalid %%m valueinvalid %%r valueinvalid %%s valueinvalid %%xn codeinvalid %B valueinvalid %C valueinvalid %D valueinvalid %E valueinvalid %H valueinvalid %P operandinvalid %Q valueinvalid %h valueinvalid %o valueinvalid %p valueinvalid %q valueinvalid %sinvalid %s/S valueinvalid %x/X valueinvalid C'xx' invalid PC in line number tableinvalid UNSPEC as operandinvalid arg to `__builtin_frame_address'invalid arg to `__builtin_return_address'invalid array tuple labelinvalid expression as operandinvalid initial value for member `%s'invalid initializerinvalid initializer for bit stringinvalid left operand of %sinvalid lvalue in assignmentinvalid lvalue in decrementinvalid lvalue in incrementinvalid lvalue in unary `&'invalid macro nameinvalid operand of %sinvalid operand output codeinvalid operand to %H/%L codeinvalid operand to %N codeinvalid operand to %R codeinvalid operand to %T/%B codeinvalid operand to %U codeinvalid operand to %V codeinvalid operand to %p codeinvalid operand to %s codeinvalid operands to binary %sinvalid register name for `%s'invalid right operand of %sinvalid second arg to __builtin_prefetch; using zeroinvalid storage class for function `%s'invalid third arg to __builtin_prefetch; using zeroinvalid truth-value expressioninvalid type argument of `%s'invalid type argument of `->'invalid type modifier within pointer declaratorinvalid use of `restrict'invalid use of `this' at top levelinvalid use of array with unspecified boundsinvalid use of incomplete typedef `%s'invalid use of non-lvalue arrayinvalid use of undefined type `%s %s'invalid use of void expressioninvalid vector type for attribute `%s'junk at end of signature stringlabel %s referenced outside of any functionlabel `%s' defined but not usedlabel `%s' used but not definedlabel found outside of CASE statementlabel not within a CASE statementlabel within scope of cleanup or variable arraylanguage %s not recognizedlarge integer implicitly truncated to unsigned typeld returned %d exit statusleft shift count >= width of typeleft shift count is negativeleft-hand operand of comma expression has no effectlefthand side of assignment is not a locationlibrary function `%s' declared as non-functionload command map, %d cmds, new size %ld. + long or short specified with char for `%s'long or short specified with floating type for `%s'long, short, signed or unsigned invalid for `%s'long, short, signed or unsigned used invalidly for `%s'lseek %s 0may not use both -EB and -ELmay not use both -mfp64 and -m4650may not use both -mfp64 and -msingle-floatmembersmissing argument in `__builtin_args_info'missing braces around initializermissing index expressionmissing initializermode in label is not discretemode mismatch in %s expressionmode mismatch in parameter %dmode of `%s' is not a modemodification by `asm'msync %smulti-character character constantmultiple default labels found in a CASE statementmultiple default labels in one switchmultiple parameters named `%s'multiple storage classes in declaration of `%s'munmap %snegative integer implicitly converted to unsigned typenegative width in bit-field `%s'nested extern declaration of `%s'nested function `%s' declared `extern'nested redefinition of `%s'no EXITable label named `%s'no INTEGER type can hold a pointer on this configurationno argumentsno closing `]' for `%%[' formatno cmd_strings foundno data type for mode `%s'no initializer value for fixed field `%s'no initializer value for variant field `%s'no label named `%s'no previous declaration for `%s'no previous prototype for `%s'no semicolon at end of struct or unionno symbol table foundno vector mode with the size and type specified could be foundnon-ANSI-standard escape sequence, `\%c'non-boolean mode in conditional expressionnon-constant array tuple index rangenon-constant expressionnon-constant start index for tuplenon-constant value for tag field `%s'non-prototype definition herenon-static declaration for `%s' follows staticnon-static method '%s' overrides static methodnonconstant array index in initializernonconstant initializer for `%s'not a static field `%s'not found + null format stringnumber of arguments doesn't match prototypenumeric constant contains digits beyond the radixnumeric constant with no digitsoctal escape sequence out of rangeoffset outside bounds of constant stringold raw header fileonly weak aliases are supported in this configurationopen %soperand number out of range in formatoperation on `%s' may be undefinedoptions enabled: options passed: ordered comparison of pointer with integer zerooverflow in constant expressionoverflow in enumeration valuesoverflow in implicit constant conversionparameter 2 must be a locationparameter `%s' declared voidparameter `%s' has incomplete typeparameter `%s' has just a forward declarationparameter `%s' is initializedparameter `%s' points to incomplete typeparameter has incomplete typeparameter name missing from parameter listparameter name omittedparameter names (without types) in function declarationparameter points to incomplete typeparm types given both in parmlist and separatelyparse errorparse error; also virtual memory exceededparser stack overflowpassing arg %d of `%s'passing arg %d of pointer to functionpipepointer of type `void *' used in arithmeticpointer of type `void *' used in subtractionpointer targets in %s differ in signednesspointer to a function used in arithmeticpointer to a function used in subtractionpointer type mismatch in conditional expressionpointer/integer type mismatch in conditional expressionpointers are not permitted as case valuespossible range failure (not inside function)powerset is not addressablepowerset tuple element out of rangeprevious declaration of `%s'previous declaration of function `%s' was inlineprevious declaration of function `%s' with attribute noinlineprevious definition of `%s'previous external decl of `%s'previous grant for `%s'previous implicit declaration of `%s'previously used hereprofiling not supported with -mg + promoted argument `%s' doesn't match prototypeprototype for `%s' followsprototype for `%s' follows and argument %d doesn't matchprototype for `%s' follows and number of arguments doesn't matchrange failure (not inside function)raw header buffer too smallread %ld bytes, expected %ld, from %sread %sredeclaration of `%s'redeclaration of `enum %s'redefinition of `%s'redefinition of `struct %s'redefinition of `union %s'redirecting stdout: %sredundant redeclaration of `%s' in same scoperegister name given for non-register variable `%s'register name not specified for `%s'register variable `%s' used in nested functionrelational operator not allowed for this moderepetition count is not an integer constantrepetition value not constantrequest for member `%s' in something not a structure or unionrequested alignment is not a constantrequested alignment is not a power of 2requested alignment is too largereturnreturn type of `%s' is not `int'right hand side of assignment is a moderight shift count >= width of typeright shift count is negativerounding mode not supported for VAX floatssecond arg to `__builtin_expect' must be a constantsecond arg to `__builtin_prefetch' must be a constantsecond argument of `%s' should be `char **'second parameter of `va_start' not last named argumentsection attribute cannot be specified for local variablessection attribute not allowed for `%s'section attributes are not supported for this targetsection of `%s' conflicts with previous declarationsection pointer missingshadowing built-in function `%s'shadowing library function `%s'shift count >= width of typeshift count is negativesize applied to a function modesize of array `%s' has non-integer typesize of array `%s' is negativesize of array `%s' is too largesize of return value of `%s' is %u bytessize of variable `%s' is too largesizeof applied to a function typesizeof applied to a void modesizeof applied to a void typesizeof applied to an incomplete modesizeof applied to an incomplete typespurious trailing `%%' in formatstatic declaration for `%s' follows non-staticstatic or type qualifiers in abstract declaratorstatic variable `%s' is marked dllimportstorage class specified for parameter `%s'storage class specified for structure field `%s'storage class specified for typenamestorage size of `%s' isn't constantstorage size of `%s' isn't knownstring length `%d' is greater than the length `%d' ISO C%d compilers are required to supportstring repetition operand is non-constant bitstringstring section missingstructstruct type value used where scalar is requiredstructuresubscript has type `char'subscript missing in array referencesubscripted value is neither array nor pointersuggest parentheses around && within ||suggest parentheses around + or - in operand of &suggest parentheses around + or - inside shiftsuggest parentheses around arithmetic in operand of ^suggest parentheses around arithmetic in operand of |suggest parentheses around assignment used as truth valuesuggest parentheses around comparison in operand of &suggest parentheses around comparison in operand of ^suggest parentheses around comparison in operand of |switch quantity not an integertarget CPU does not support APCS-26target CPU does not support APCS-32target CPU does not support interworkingthe meaning of `\a' varies with -traditionalthe meaning of `\x' varies with -traditionalthe only valid combination is `long double'third arg to `__builtin_prefetch' must be a constantthird argument of `%s' should probably be `char **'this function may return with or without a valuethis is a previous declarationthis is the first ELSE labelthis is the first default labelthis is the first entry for that valuethis is the first entry overlapping that valuethis target machine does not have delayed branchestoo few arguments for formattoo few arguments for this format stringtoo few arguments to functiontoo few arguments to function `%s'too few arguments to proceduretoo few arguments to procedure `%s'too many arguments for formattoo many arguments for this format stringtoo many arguments to functiontoo many arguments to function `%s'too many arguments to function `va_start'too many arguments to proceduretoo many arguments to procedure `%s'too many cases to do CASE completeness testingtoo many tag labelstop-level declaration of `%s' specifies `auto'trap mode not supported for VAX floatstwo or more data types in declaration of `%s'two types specified in one empty declarationtype defaults to `int' in declaration of `%s'type mismatch in conditional expressiontype mismatch with previous external decltype mismatch with previous implicit declarationtype of `%s' defaults to `int'type of external `%s' is not globaltype of formal parameter %d is incompletetype qualifiers for `%s' conflict with previous decltypedef `%s' is initializedtypes are not quite compatibleunable to mmap file '%s'unable to open dynamic dependency '%s'unable to open file '%s'unable to stat file '%s'undefined or invalid # directiveundefining `%s'unionunion cannot be made transparentunion type value used where scalar is requiredunknown C standard `%s'unknown conversion type character 0x%x in formatunknown conversion type character `%c' in formatunknown escape sequence `\%c'unknown escape sequence: `\' followed by char code 0x%xunknown field `%s' specified in initializerunknown machine mode `%s'unknown set constructor typeunknown {de,en}code_mach_o_hdr return value %dunnamed fields of type other than struct or union are not allowedunnamed struct/union that defines no instancesunrecognized format specifierunsupported arg to `__builtin_frame_address'unsupported arg to `__builtin_return_address'unsupported versionunterminated commentunterminated format stringunterminated string or character constantuntyped expression as argument %duseless keyword or type name in empty declarationvariable `%s' declared `inline'variable `%s' has initializer but incomplete typevariable or field `%s' declared voidvariable-sized object may not be initializedvoid value not ignored as it ought to bevolatile register variables don't work as you might wishwarning:warning: weak declaration of `%s' must be publicweak declaration of `%s' must precede definitionwidth of `%s' exceeds its typewidth of integer constant changes with -traditionalwidth of integer constant may change on other systems with -traditionalwrite %swriting into constant object (arg %d)writing load commands. + + wrong number of arguments specified for `%s' attributewrong type argument to abswrong type argument to bit-complementwrong type argument to conjugationwrong type argument to decrementwrong type argument to incrementwrong type argument to unary exclamation markwrong type argument to unary minuswrong type argument to unary pluswrote %ld bytes, expected %ld, to %szero or negative size array `%s'zero width for bit-field `%s'zero-length format stringProject-Id-Version: gcc 3.1-b20020128 + POT-Creation-Date: 2002-01-22 19:38-0800 + PO-Revision-Date: 2002-02-04 18:04+0000 + Last-Translator: Tim Van Holder + Language-Team: Dutch + MIME-Version: 1.0 + Content-Type: text/plain; charset=iso-8859-1 + Content-Transfer-Encoding: 8bit + + ;; Combiner-totalen: %d pogingen, %d vervangingen (%d hadden nieuwe ruimte + ;; nodig), %d successen. + + Symbooltabel #%d wordt verwerkt (offset = 0x%.8lx, soort = %s) + + Hoofding en laadcommandos worden aangepast. + + + uitvoer van ldd met constructors/destructors. + + write_c_file - uitvoernaam is %s, prefix is %s + #-lijnen voor het binnengaan en verlaten van bestanden komen niet overeenZoektocht voor #include "..." begint hier: + Zoektocht voor #include <...> begint hier: + #pragma pack (pop) tegengekomen zonder overeenkomstige #pragma pack (push, )#pragma pack (pop, %s) tegengekomen zonder overeenkomstige #pragma pack (push, %s, )%E niet gevolgd door %B/C/D/E%d constructor(s) gevonden + %d destructor(s) gevonden + %d fouten, %d sorries, granting wordt gedaan%d frame-tabel(len) gevonden + %s-actie in PROC zonder gedeclareerde RESULTS%s als `float' in plaats van `double' ten gevolge van een prototype%s als complex in plaats van floating-point ten gevolge van een prototype%s als floating-point in plaats van complex ten gevolge van een prototype%s als floating-point in plaats van integer ten gevolge van een prototype%s als integer in plaats van floating-point ten gevolge van een prototype%s als signed ten gevolge van prototype%s als unsigned ten gevolge van prototype%s aan einde van invoer%s voor `%s'%s voor stringconstante%s laat qualifiers van doeltype van pointer vallen%s expressie moet refereerbaar zijn%s formaat, %s argument (argument %d)%s van incompatibel pointertype%s-functie, regio %d, offset = %ld (0x%.8lx) + %s is niet addresseerbaar%s maakt integer van pointer zonder een cast%s maakt pointer van integer zonder een cast%s maakt gekwalificeerde functiepointer van een niet gekwalificeerde%s is niet toegestaan buiten een PROC%s van alleen-lezen locatie%s van alleen-lezen lid `%s'%s van alleen-lezen variabele `%s'%s parameter %d moet een locatie zijn%s gaf exit-status %d terug%s met andere breedte ten gevolge van prototype%s: %s compiler niet geïnstalleerd op dit systeem%s: kan niet openen als COFF-bestand%s: geen COFF-bestand(Elke niet-gedeclareerde naam wordt slechts één(dicht bij initialisatie van `%s')(dus U zou `%s' en niet `%s' moeten doorgeven aan `va_arg')-E is nodig wanneer de invoer van standaardinvoer komt-I- twee keer opgegeven-Wformat-extra-args genegeerd zonder -Wformat-Wformat-nonliteral genegeerd zonder -Wformat-Wformat-security genegeerd zonder -Wformat-Wformat-y2k genegeerd zonder -Wformat-Wmissing-format-attribute genegeerd zonder -Wformat-Wuninitialized wordt niet ondersteund zonder -O-f%sleading-underscore wordt niet ondersteund op deze doelmachine-fPIC is niet geldig met -mcoff-fPIC is niet geldig met -mcoff-fpic en -mapcs-reent zijn niet compatibel-fpic is niet geldig met -mcoff-fpic is niet geldig met -mcoff-malign-functions=%d ligt niet tussen 1 en %d-malign-jumps=%d ligt niet tussen 1 en %d-malign-loops=%d ligt niet tussen 0 en %d-malign-loops=%d ligt niet tussen 1 en %d-mapcs-26 en -mapcs-32 mogen niet samen gebruikt worden-mapcs-stack-check is niet compatibel met -mno-apcs-frame-mbig-endian en -mlittle-endian mogen niet samen gebruikt worden-mbranch-cost=%d ligt niet tussen 0 en 5-mbsd en -mxopen zijn niet compatibel-mbsd en -pedantic zijn niet compatibel-mregparm=%d ligt niet tussen 0 en %d-msoft-float en -mhard_float mogen niet samen gebruikt worden-mxopen en -pedantic zijn niet compatibelde -p optie wordt niet ondersteund: gebruik -pg-pg en -fomit-frame-pointer zijn niet compatibel-shared is niet geldig met -mcoff-static is niet geldig met -mcoff-symbolic is niet geldig met -mcoff-traditional is verouderd en zal misschien verwijderd worden;; Combiner-statistieken: %d pogingen, %d vervangingen (%d hadden nieuwe ruimte + ;; nodig), %d successen. + + APCS reentrant code wordt niet ondersteund. GenegeerdASSIGN naar een variabele die te klein isBASE-variabele nooit gedeclareerdCASE-selector met variabel bereikCASE-waarde buiten bereikELSE-label niet in een CASE-statementEinde van opzoekingslijst. + GCC heeft nog geen fatsoenlijke implementatie van `[*]' declaratoren van arraysGNU C ondersteunt -C niet wanneer -E niet gebruikt wordtde GNU compiler ondersteunt geen statisch gealloceerde objectenI/O-fout op uitvoerISO C ondersteunt simpele `complex' niet in de betekenis van `double complex'ISO C verbiedt het gebruik van bereik-expressies in switch statementsISO C verbiedt het nemen van het adres van een labelANSI C verbiedt het adres van een cast-expressieISO C++ verbiedt het gebruik van bereik-expressies in switch statementsISO C++ verbiedt het nemen van het adres van een labelISO C89 ondersteunt geen `[*]' declaratoren van arraysISO C89 ondersteunt geen `static' of type-qualificaties in declaratoren van parameter arraysISO C89 ondersteunt geen complexe typesBrol na einde van expressie.L%d cache-latency niet gekend voor %sPOS mag niet opgegeven worden voor een lijst van veld-declaratiesRETURN is niet toegestaan buiten PROCRETURN met waarde, in een PROC die void teruggeeftRETURN zonder waarde en geen RESULTS-actie in procedureHet aantal CASE-selectors komt niet overeen met het aantal CASE-label lijsten[%s wordt verlaten] + [kan %s niet vinden]\x gebruikt zonder daaropvolgende hexadecimale cijfers__alignof__ toegepast op een onvolledig typetweede argument van `__builtin_longjmp' moet 1 zijn__builtin_saveregs wordt niet ondersteund op dit doelsysteem`__builtin_trap' wordt niet ondersteund op dit doelsysteem`%%%c' geeft enkel de laatste twee cijfers van het jaartal`%%%c' geeft enkel de laatste twee cijfers van het jaartal in sommige omgevingenoperand `%d' is geen registerhet `%s' attribuut heeft enkel betekenis voor functiesattribuut-commando `%s' wordt genegeerdhet `%s' attribuut heeft geen betekenis voor typeshet `%s' attribuut wordt genegeerdhet `%s' attribuut wordt genegeerd voor `%s'het `%s' attribuut heeft enkel betekenis voor functie-types`%s' kan niet statisch gealloceerd worden`%s' gedeclareerd als een functie die een functie teruggeeft`%s' gedeclareerd als een functie die een array teruggeeft`%s' als 'inline' gedeclareerd na oproep`%s' als 'inline' gedeclareerd na de definitie`%s' is zowel als alias en als normale naam gedefinieerd`%s' is geen typedef of ingebouwd type`%s' heeft een onvolledig type`%s' heeft zowel `extern' als een beginwaarde`%s' krijgt beginwaarde en is als `extern' gedeclareerd`%s' is een onbekend type formaatfunctie`%s' is smaller dan waarden van zijn type`%s' is gewoonlijk een niet-static funtie`%s' staat niet aan het begin van een declaratie`%s' is niet gedefinieerd buiten een functie`%s' wordt naar `%s' gepromoveerd indien het via `...' wordt doorgegeven`%s' is meestal een functie`%s' is locaal `extern', maar globaal `static'`%s' mag niet als alleen-lezen gedeclareerd worden`%s' tevoren hier gedeclareerd`%s' tevoren hier gedefinieerd`%s' als ander soort symbool geherdeclareerd`%s' neemt ofwel geen, ofwel twee argumenten`%s' is hier niet gedeclareerd (eerste gebruik in deze functie)`%s' is hier niet gedeclareerd (niet in een functie)`%s' gebruikt vóór declaratie`%s' was als `extern' gedeclareerd en daarna als `static'`%s' was impliciet als `extern' gedeclareerd en daarna als `static'`%s' was tevoren impliciet gedeclareerd om een `int' terug te geven`%s' werd voor haar definitie gebruikt zonder declaratie`%s' werd voor haar definitie gebruikt zonder protoype`-p' wordt niet ondersteund; gebruik `-pg' en gprof(1)`...' in naamlijst in oude stijl`/*' binnen commentaar`__alignof' toegepast op bitveld`__builtin_next_arg' opgeroepen zonder argument`enum %s' onvolledig in bereik dat hier eindigt`long long long' is te lang voor GCC`noreturn' functie keert terug`noreturn' functie geeft niet-void waarde terug`return' met waarde in een functie die void teruggeeft`return' zonder waarde in een functie die een niet-void waarde teruggeeft`sizeof' toegepast op een bitveld`struct %s' onvolledig in bereik dat hier eindigt`this' is niet beschikbaar in static member-funties`union %s' onvolledig in bereik dat hier eindigt`va_start' gebruikt in functie met vaste argumenten`void' in parameterlijst moet de gehele parameterlijst zijneen globale declaratieeen parametereen parameterlijst met een beletselteken kan niet overeenkomen met een declaratie met lege parameterlijsteen eerdere localeadres van globale registervariabele `%s' gevraagdadres van registervariabele `%s' gevraagdaggregaat-beginwaarde is geen constanteaggregaat-beginwaarde gebruikt ingewikkelde berekeningalias-argument is geen stringalias-definities worden niet ondersteund in deze configuratie; genegeerder kan geen alignment opgegeven worden voor `%s'een argumenttype dat een standaardpromotie heeft kan niet overeenkomen met een declaratie met lege parameterlijstargument #%d is een structureargument %d is alleen-lezenargument %d moet refereerbaar zijnargument %d van %s moet een locatie zijnargument 2 van ASSOCIATE mag geen lege string zijnargument 2 van MODIFY mag geen lege string zijnargument 2 van MODIFY moet een string zijnargument 3 van MODIFY moet een string zijnargument `%s' komt niet overeen met prototypeargument voor `__builtin_args_info' moet een constante zijnargument voor `__builtin_args_info' buiten bereikhet argument van `asm' is geen constante stringargument voor NUM is niet discreetargumenten aan macro `%s' gegevenrekensom met pointer naar onvolledig typearray `%s' wordt aangenomen één element te bevattenarray-index in beginwaarde van niet-arrayarray krijgt niet-constante array-expressie als beginwaardearray-grootte ontbreekt in `%s'array subscript is van het type `char'array subscript is geen integerindex van array-tupel buiten bereikarraytype heeft onvolledig elementtypewaarde van array-type gebruikt waar een scalair nodig isarrays van functies zijn niet betekenisvolasm-template is geen stringconstantetoewijzingtoekenning aan final-veld `%s' niet in constructorpoging om het adres te nemen van lid `%s' van een bitveld-structureattributen genegeerd in declarator van parameter-arrayslechte versie van hoofdingongeldige beginwaarde voor veld `%s'slecht magisch getalslecht magisch getal in bestand '%s'slechte versie van rauwe hoofdingslechte stringconstanteslechte stringlengte in %sslechte waarde (%s) foor optie %sslechte waarde (%s) voor optie -mabi=slechte waarde (%s) voor de -march= optieslechte waarde (%s) voor optie -mcmodel=slechte waarde (%s) voor optie -mcpuslechte waarde (%s) voor de -march= optieslechte waarde (%s) voor optie -mipsslechte waarde (%s) voor optie -mmodelslechte waarde (%s) voor optie -msdataslechte waarde `%s' voor optie -mcpuslechte waarde `%s' voor optie -mfp-rounding-modeslechte waarde `%s' voor optie -mfp-trap-modeslechte waarde `%s' voor -mmeroy-latencyslechte waarde `%s' voor optie -mtrap-precisionbitveld `%s' heeft een ongeldig typebreedte van bitveld `%s' is geen integerconstantezowel 'long' als 'short' opgegeven voor `%s'zowel 'signed' als 'unsigned' opgegeven voor `%s'accolade-groep in expressie enkel toegestaan binnen een functieaccolades rond scalaire beginwaardebreak-statement niet in een lus of switchingebouwde functie `%s' gedeclareerd als niet-functieingebouwde functie `%s' wordt op het ogenblik niet ondersteundc4x_address_cost: Ongeldige addresseringsmodusc4x_operand_subword: adres kan niet geoffset wordenvan hieruit opgeroepenopgeroepen object is geen functiekan oproep van `%s' niet inline makenkan het `%s' attribuut niet instellen na een definitiekan geen EXIT uitvoeren voor label `%s' buiten huidige functiekan geen GOTO uitvoeren naar label `%s' dat buiten de huidige functie ligtingebouwde functie `%s' kan niet uitgeschakeld wordenkan %s niet vindenkan `ldd' niet vindenkan `nm' niet vindenkan functie `main' niet inline makeneen object met een volatile veld kan niet in een register geplaatst wordencase-label valt niet te herleiden tot een integerconstanteondergrens van case-label is geen discrete constante expressiecase-label moet een discrete constante expressie zijncase-label niet in een switch-statementbovengrens van case-label is geen discrete constante expressiecase-selector niet compatibel met labelcast laat qualifiers van doeltype van pointer vallencast komt niet overeen met het functietypecast van pointer naar integer met andere groottecast verhoogt het benodigde alignment van het doeltypecast geeft array-type opcast geeft functie-type opcast naar pointer van integer met andere groottecast naar union-type van een type dat geen deel uitmaakt van de unionniet-opgevangen exception `%s' wordt veroorzaakt (dit wordt maar één keer vermeld)cccp fout: ongeldig soort van speciale hashchar-array heeft wide string als beginwaardekarakterconstante te langclose %dclose %scollect2 versie %skomma aan het einde van enumerator-lijstvergelijking tussen pointer en integervergelijking tussen signed en unsignedvergelijking is altijd vals omwille van het beperkte bereik van het datatypevergelijking is altijd waar omwille van het beperkte bereik van het datatypevergelijking van volledige en onvolledige pointerseen cast ontbreekt bij vergelijking van ongelijke pointer-typesvergelijking van gepromoveerde ~unsigned met constantevergelijking van gepromoveerde ~unsigned met unsignedvergelijking van 'unsigned' expressie < 0 is altijd valsvergelijking van 'unsigned' expressie >= 0 is altijd waarvergelijkingen als 'X <= Y <= Z' hebben niet hun wiskundige betekenis'complex' ongeldig voor `%s'concatenatie van stringconstantes met __FUNCTION__ is verouderd. Deze mogelijkheid zal in de toekomst verwijderd wordenvoorwaardelijke expressie niet toegestaan in `%s'voorwaardelijke expressie niet toegestaan in deze contextconflicterende declaraties van `%s'conflicterende types voor `%s'conflicterende types voor ingebouwde functie `%s''const' declaratie voor `%s' volgt niet-'const' declaratieconstante objecten kunnen niet in .sdata/.sbbs geplaatst wordencontinue-statement niet in een luseinde van niet-void functie werd bereikt zonder teruggeefwaardeconversie mist type aan het einde van het formaatconversie naar niet-scalair type gevraagdkon 0x%l.8x niet naar een regio omzettendatadefinitie heeft geen type of opslagklassedatatype van `%s' is niet geschikt voor een registerdecimale constante is zo groot dat hij unsigned isdeclaratie voor parameter `%s' maar er is zo geen parameter`%s' wordt gedeclareerd als een array van functies`%s' wordt gedeclareerd als een array van voidsde declaratie van `%s' is `extern' en heeft een beginwaardede declaratie van `%s' verbergt %sde declaratie van `%s' verbergt een parameterde declaratie van `%s' verbergt een symbool uit de parameterlijstdecrementerendecrementeren van pointer naar onbekend structure`void *' pointer wordt gederefereerddereferentie van pointer naar onvolledig typedeling door nuldeling door nul in `#if'dup2 %d 1herhaalde (of overlappende) case-waardeherhaalde CASE-waardeherhaalde `%s'herhaalde `const'herhaalde `restrict'herhaalde `volatile'herhaalde case-waardeherhaalde definitie `%s'herhaalde grant voor `%s'herhaalde label-declaratie `%s'herhaald lid `%s'dynamische dependencies. + dynamische dependency %s niet gevondenelementen van array `%s' hebben een onvolledig typeingesloten `\0' in formaatleeg body in een else-statementlege karakterconstantelege declaratielege expressie in string-indexleeg indexbereik in beginwaardeleeg bereikleeg indexbereik in array-tupelleeg bereik opgegevenlege scalaire beginwaardeenum gedinieerd binnen parametersenumeratiewaarden overschrijden het bereik van de grootste integerenumeratiewaarde voor `%s' is geen integrale constanteescape-sequentie buiten bereik voor karakterovertollige elementen in beginwaarde van arrayovertollige elementen in beginwaarde van scalairovertollige elementen in beginwaarde van structovertollige elementen in beginwaarde van unionovertollige beginwaarde voor veld `%s'overtollige onbenoemde beginwaardenexecv %sexecvp %sexpressie-statement heeft onvolledig typeexpressie zal altijd RANGEFAIL veroorzakenexterne declaratie van `%s' komt niet overeen met de globale declaratieextra accolade-groep aan einde van beginwaardeextra elementen in scalaire beginwaardeextra puntkomma opgegeven in struct of unionkan klasse '%s' niet vindenfclosefclose %sfdopenveld `%s' als een functie gedeclareerdveld `%s' heeft een onvolledig typeveld `%s' niet gevondenfini-functie gevonden in object %seerste argument van `%s' zou een `int' moeten zijnhet eerste argument van `va_arg' is geen `va_list'flexibele array als lid van unionflexibele array niet laatste lid van structexponent van floating-point constante heeft geen cijfersfloating-point constante mag niet in basis 16 staanfloating-point constante verkeerd gebruiktfloating-point constante buiten bereikfloating-point overflow in expressiefopen %skeer vermeld voor elke functie waarin hij staat.)formaat-argument is geen pointer (argument %d)formaat-argument is geen pointer naar een pointer (argument %d)de formaatstring volgt de te formatteren argumentende formaatstring is geen string-typefp vervollediging in software heeft -mtrap-precision=i nodigfstat %stypedef `%s' krijgt beginwaarde alsof het een variabele isfunctie `%s' geherdeclareerd als inlinefunctie `%s' geherdeclareerd met noinline attribuutfunctie `%s' was tevoren binnen een blok gedeclareerdfunctie-oproep heeft geaggregeerde waardefunctie-declaratie is geen prototypeals `noreturn' gedeclareerde functie bevat een `return' statementfunctie-definitie als `auto' gedeclareerdfunctie-definitie als `register' gedeclareerdfunctie-definitie als `typdef' gedeclareerdfunctie geeft geen string-type terugdeze functie is een mogelijke kandidaat voor het `noreturn' attribuutde terugkeerwaarde van een functie kan geen funtie zijnfunctie geeft adres van lokale variabele teruggcc stuurprogramma versie %s voert gcc versie %s uit + gcc versie %s + globale registervariabele `%s' gebruikt in geneste functieglobale registervariabele volgt op een functiedefinitieglobale registervariabele heeft beginwaardehexadecimale escape-waarde buiten bereikhexadecimale escape sequence buiten bereikhexadecimale floating-point constante heeft geen exponentpragma wordt genegeerd: %simpliciete declaratie van functie `%s'incompatibiliteiten tussen objectbestand & verwachte waardenincompatibel array-tupel element %sincompatibele index-modusincompatibele modi in %sincompatibele modi in concat-expressieincompatibele modes in parameter 2incompatibele operands voor %sincompatibele record-modusincompatibel type voor argument %d van `%s'incompatibel type voor argument %d van onrechtstreekse functie-oproepincompatibele types bij %sonvolledige CASE - %s niet opgevangenincrementerenincrementeren van pointer naar onbekend structureinit-functie gevonden in object %sinitialisatievariable met beginwaarde `%s' is als dllimport aangeduidbeginwaarde-element kan niet berekend worden tijdens het ladenbeginwaarde-element is niet constantbeginwaarde legt grootte van `%s' niet vastinitializer voor floating-point waarde is geen floating-point constanteinitializer voor integerwaarde is te ingewikkeldbeginwaarde voor static variabele is geen constantebeginwaarde voor static variabele gebruikt ingewikkelde berekeningbeginwaarde is geen array of string-modusbeginwaarde-string voor array van chars is te langinline floatconstantes worden op deze host niet ondersteundinline maken mislukt in oproep van `%s'instructie-scheduling wordt niet ondersteund op deze doelmachineint-array heeft niet-wide string als beginwaardeintegerconstante bevat cijfers buiten de basisintegerconstante is zo groot dat hij unsigned isintegerconstante buiten bereikinteger overflow in expressieinteger-overflow in preprocessor-expressieinterne foutinterne fout -- niet gedefinieerd type gebruiktinterne fout in check_format_stringinterne fout: onbekende expressie-modus in %sinterne fout: onbekende expressie-soortinterworking forceert het gebruikt van APCS-32ongeldige #-lijnongeldige #identongeldige #lineongeldige waarde voor %%Congeldige waarde voor %%Eongeldige waarde voor %%Longeldige waarde voor %%Mongeldige waarde voor %%Nongeldige waarde voor %%Oongeldige waarde voor %%Pongeldige waarde voor %%Qongeldige waarde voor %%Rongeldige waarde voor %%Uongeldige waarde voor %%Vongeldige waarde voor %%hongeldige waarde voor %%mongeldige waarde voor %%rongeldige waarde voor %%songeldige code voor %%xnongeldige waarde voor %Bongeldige waarde voor %Congeldige waarde voor %Dongeldige waarde voor %Eongeldige waarde voor %Hongeldige operand voor %Pongeldige waarde voor %Qongeldige waarde voor %hongeldige waarde voor %oongeldige waarde voor %pongeldige waarde voor %qongeldige %songeldige waarde voor %s/Songeldige waarde voor %x/Xongeldige C'xx'ongeldige PC in tabel met regelnummersongeldige UNSPEC als operandongeldig argument voor `__builtin_frame_address'ongeldig argument voor `__builtin_return_address'ongeldig label voor array-tupelongeldige expressie als operandongeldige beginwaarde voor member `%s'ongeldige beginwaardeongeldige beginwaarde voor bit-stringongeldige linker operand van %songeldige lvalue in toewijzingongeldige lvalue bij decrementerenongeldige lvalue bij incrementerenongeldige lvalue bij unaire `&'ongeldige macronaamongeldige operand van %songeldige operand voor uitvoercodeongeldige operand voor %H/%L-codeongeldige operand voor %N-codeongeldige operand voor %R-codeongeldige operand voor %T/%B-codeongeldige operand voor %U-codeongeldige operand voor %V-codeongeldige operand voor %p-codeongeldige operand voor %s-codeongeldige operanden voor binaire %s-operatorongeldige registernaam voor `%s'ongeldige rechter operand van %songeldig tweede argument voor __builtin_prefetch; zal nul gebruikenongeldige opslagklasse voor functie `%s'ongeldig derde argument voor __builtin_prefetch; zal nul gebruikenongeldige waarheidsexpressieongeldig type-argument `%s'ongeldig type-argument voor `->'ongeldige type-modifier binnen pointer-declaratorongeldig gebruik van `restrict'ongeldig gebruik van `this' op hoogste niveauongeldig gebruik van een array zonder opgegeven grenzenongeldig gebruik van onvolledige typedef `%s'ongeldig gebruik van array die geen lvalue isongeldig gebruik van het niet gedefinieerde type `%s %s'ongeldig gebruik van een void-expressieongeldig vector-type voor attribuut `%s'Brol aan einde van signature-string.naar label %s gerefereerd buiten enige functielabel `%s' gedefinieerd maar niet gebruiktlabel `%s' gebruikt maar niet gedefinieerdlabel gevonden buiten een CASE-statementlabel niet in een CASE-statementlabel binnen bereik van opruiming of variabele arraytaal %s niet herkendgrote integer impliciet afgekapt naar 'unsigned' typeld gaf exit-status %d terugteller van links shift is >= breedte van het typeteller van links shift is negatieflinker operand van comma-expressie heeft geen effectlinkerkant van toewijzing is geen locatiebibliotheekfunctie `%s' gedeclareerd als niet-functielaadcommando-kaart, %d commando's, nieuwe grootte %ld. + 'long' of 'short' opgegeven bij 'char' voor `%s''long' of 'short' opgegeven bij floating-point type voor `%s''long', 'short', 'signed' of 'unsigned' ongeldig voor `%s'ongeldig gebruik van 'long', 'short', 'signed' of 'unsigned' voor `%s'lseek %s 0-EB en -EL mogen niet samen gebruikt worden-mfp64 en -m4650 mogen niet samen gebruikt worden-mfp64 en -msingle-float mogen niet samen gebruikt wordenledenontbrekend argument in `__builtin_args_info'accolades ontbreken rond beginwaardeontbrekende index-expressiebeginwaarde ontbreektmodus in label is niet discreetmodi in %s expressie komen niet overeengeen overeenkomst van modus in parameter %dmodus van `%s' is geen modusaanpassing door `asm'msync %skarakterconstante met meer dan één karaktermeerdere default-labels gevonden in één CASE-statementmeerdere default-labels in één switchmeerdere parameters hebben de naam `%s'meerdere opslagklassen in declaratie van `%s'munmap %snegatieve integer impliciet omgezet naar 'unsigned' typebitveld `%s' heeft een negatieve breedtegeneste externe declaratie van `%s'geneste functie `%s' is als `extern' gedeclareerdgeneste herdefinitie van `%s'er is geen EXITable label dat `%s' heetgeen enkel INTEGER-type kan een pointer bevatten in deze configuratiegeen argumentengeen eind-`]' voor `%%[' formaatgeen cmd_strings gevondengeen datatype voor modus `%s'geen beginwaarde voor fixed veld `%s'geen beginwaarde voor variant-veld `%s'er is geen label dat `%s' heetgeen eerdere declaratie voor `%s'geen eerder prototype voor `%s'geen puntkomma aan het einde van een struct of uniongeen symbooltabel gevondener kon geen vectormodus gevonden worden met de opgegeven grootte en typeniet-ANSI-standaard escape sequence `\%c'niet-boolean modus in voorwaardelijke expressieniet-constant indexbereik van array-tupelniet-constante expressieniet-constante start-index voor tupelniet-constante waarde voor tagveld `%s'niet-prototype definitie hierniet-static declaratie voor `%s' volgt static declaratieniet-static methode '%s' vervangt static methodeniet-constante array-index in beginwaardeniet-constante beginwaarde voor `%s'`%s' is geen static veldniet gevonden + formaatstring is NULLaantal argumenten kom niet overeen met prototypenumerieke constante bevat cijfers buiten de basisnumerieke constante zonder cijfersoctale escape sequence buiten bereikoffset buiten de grenzen van een constante stringoud bestand met rauwe hoofdingenkel zwakke aliasen worden in deze configuratie ondersteundopen %soperand buiten bereik in formaatbewerking op `%s' is mogelijk niet gedefinieerdingeschakelde opties: meegegeven opties: geordende vergelijking van een pointer met integer nuloverflow in constante expressieoverflow in enumeratiewaardenoverflow in impliciete omzetting van constanteparameter 2 moet een locatie zijnparameter `%s' als void gedeclareerdparameter `%s' heeft een onvolledig typeparameter `%s' heeft enkel een voorwaartse declaratieparameter `%s' krijgt beginwaardeparameter `%s' wijst naar een onvolledig typeparameter heeft een onvolledig typeparameternaam ontbreekt uit parameterlijstparameternaam weggelatenparameternamen (zonder types) in functiedeclaratieparameter wijst naar een onvolledig typeparametertypes zowel in parameterlijst als apart opgegevenparse-foutparse-fout; ook is het virtueel geheugen opgebruiktstack overflow in parserdoorgeven van argument %d van `%s'doorgeven van argument %d van pointer naar functiepipepointer van type `void *' gebruikt in rekensompointer van type `void *' gebruikt in aftrekkingdoelen van pointer in %s verschillen in signednesspointer naar functie gebruikt in rekensompointer naar functie gebruikt in aftrekkingpointertypes in voorwaardelijke expressie komen niet overeentypes in voorwaardelijke expressie komen niet overeen (pointer/integer)pointers zijn niet toegestaan als case-waardenmogelijke bereik-fout (niet in een functie)powerset kan niet geaddresseerd wordenelement van powerset-tupel buiten bereikeerdere declaratie van `%s'eerdere declaratie van functie `%s' was inlineeerdere declaratie van functie `%s' had het noinline attribuuteerdere definitie van `%s'eerdere externe declaratie van `%s'eerdere grant voor `%s'eerdere impliciete declaratie van `%s'tevoren hier gebruiktprofileren wordt niet ondersteund wanneer -mg gebruikt wordt + gepromoveerd argument `%s' komt niet overeen met prototypeprototype voor `%s' volgtprototype voor `%s' volgt en argument %d komt niet overeenprototype voor `%s' volgt en aantal argumenten komt niet overeenbereik-fout (niet in een functie)buffer voor rauwe hoofding te klein%ld bytes gelezen (%ld verwacht) van %sread %sherdeclaratie van `%s'herdeclaratie van `enum %s'herdefinitie van `%s'herdefinitie van `struct %s'herdefinitie van `union %s'bij het herleiden van standaarduitvoer: %soverbodige herdeclaratie van `%s' in zelfde bereikregisternaam opgegeven voor niet-registervariabele `%s'registernaam niet opgegeven voor `%s'registervariabele `%s' gebruikt in geneste functierelationele operator niet toegestaan voor deze modusherhalings-aantal is geen integerconstanteherhalings-aantal is niet constantvraag naar lid `%s' in iets dat geen structure of union isgevraagd alignment is geen constantegevraagd alignment is geen macht van 2gevraagd alignment is te grootreturnhet type van de teruggeefwaarde van `%s' is niet `int'rechterkant van toewijzing is een modusteller van rechtse shift is >= breedte van het typeteller van rechtse shift is negatiefafrondingsmodus niet ondersteund voor VAX-floatstweede argument voor `__builtin_expect' moet een constante zijntweede argument voor `__builtin_prefetch' moet een constante zijntweede argument van `%s' zou een `char **' moeten zijnde tweede parameter van `va_start' is niet het laatste benoemde argumentsectie-attribuut kan niet opgegeven worden voor lokale variabelensectie-attribuut niet toegestaan voor `%s'sectie-attributen worden niet ondersteund op dit doelsysteemsectie van `%s' geeft een conflict met een eerdere declaratiesectie-pointer ontbreektingebouwde functie `%s' wordt verborgenbibliotheekfunctie `%s' wordt verborgenteller van shift is >= breedte van het typeteller van shift is negatiefsize toegepast op een functie-modusgrootte van array `%s' is van een niet-integraal typegrootte van array `%s' is negatiefomvang van array `%s' is te grootgrootte van teruggeefwaarde van `%s' is %u bytesvariabele `%s' is te grootsizeof toegepast op een functie-typesizeof toegepast op een void-modussizeof toegepast op een void-typesizeof toegepast op een onvolledige modussizeof toegepast op een onvolledig typeoverbodige `%%' achteraan formaatstatic declaratie voor `%s' volgt niet-static declaratie`static' of type-modifier in abstracte declaratorstatische variable `%s' is als dllimport aangeduidopslagklasse opgegeven voor parameter `%s'opslagklasse opgegeven voor structure-veld `%s'opslagklasse opgegeven voor typenaamopslaggrootte van `%s' is niet constantopslaggrootte van `%s' is onbekendstringlengte `%d' is groter dan `%d', de lengte die ISO C%d compilers moeten ondersteunenstring herhalings-operand is een niet-constante bitstringstring-sectie ontbreektstructwaarde van struct-type gebruikt waar een scalair nodig isstructuursubscript is van het type `char'subscript ontbreekt in array-referentiewaarde met subscript is noch een array, noch een pointergebruik liefst haakjes rond && binnen ||gebruik liefst haakjes rond + of - in een operand van &gebruik liefst haakjes rond + of - binnen een shiftgebruik liefst haakjes rond een rekensom in een operand van ^gebruik liefst haakjes rond een rekensom in een operand van |gebruik liefst haakjes rond toewijzingen die als waarheid gebruikt wordengebruik liefst haakjes rond een vergelijking in een operand van &gebruik liefst haakjes rond een vergelijking in een operand van ^gebruik liefst haakjes rond een vergelijking in een operand van |switch-waarde is geen integerdoel-CPU ondersteunt APCS-26 nietdoel-CPU ondersteunt APCS-32 nietdoel-CPU ondersteunt geen interworkingde betekenis van `\a' varieert naargelang -traditional al dan niet gebruikt wordtde betekenis van `\x' varieert naargelang -traditional al dan niet gebruikt wordtde enige geldige combinatie is `long double'derde argument voor `__builtin_prefetch' moet een constante zijnderde argument van `%s' zou waarschijnlijk een `char **' moeten zijndeze functie kan met of zonder waarde tergukerendit is een eerdere declaratiedit is het eerste ELSE-labeldit is het eerste default-labeldit is de eerste vermelding van deze waardedit is de eerste waarde die die waarde overlaptdeze doelmachine heeft geen delayed brancheste weinig argumenten voor formaatte weinig argumenten voor deze formaatstringte weinig argument voor functiete weinig argumenten voor functie `%s'te weinig argumenten voor procedurete weinig argumenten voor procedure `%s'teveel argumenten voor formaatteveel argumenten voor deze formaatstringteveel argumenten voor functieteveel argumenten voor functie `%s'teveel argumenten voor functie `va_start'teveel argumenten voor procedureteveel argumenten voor procedure `%s'teveel gevallen om CASE-volledigheidstesten uit te voerenteveel tag-labelstop-level declaratie van `%s' specifieert `auto'trapmodus niet ondersteund voor VAX-floatstwee of meer data types in de declaratie van `%s'twee types opgegeven in één lege declaratietype krijgt standaardwaarde `int' in de declaratie van `%s'types in voorwaardelijke expressie komen niet overeentype-conflict met eerdere externe declaratietype-conflict met eerdere impliciete declaratie`%s' krijgt standaardtype `int'type van extern symbool `%s' is niet globaalhet type van formele parameter %d is onvolledigtype-qualifiers voor `%s' geven een conflict met een eerdere declaratietypedef `%s' krijgt beginwaardetypes zijn niet helemaal compatibelkan bestand '%s' niet mmap'enkan dynamische dependency '%s' niet openenkan bestand '%s' niet openenkan bestand '%s' niet stat'enongedefinieerd of ongeldig #-commando`%s' wordt geondefinieerdunionunion kan niet transparant gemaakt wordenwaarde van union-type gebruikt waar een scalair nodig isonbekende C standaard `%s'onbekend typeconversie-karakter 0x%x in formaatonbekend typeconversie-karakter `%c' in formaatonbekende escape sequence `\%c'onbekende escape sequence: `\' gevolgd door karaktercode 0x%xonbekend veld `%s' opgegeven in beginwaardeonbekende machine-modus `%s'onbekend type verzameling-constructoronbekende returnwaarde %d voor {de,en}code_mach_o_hdronbenoemde velden van een type anders dan struct of union zijn niet toegestaannaamloze struct/union die geen instanties definieertonbekende formaatspecificatieniet-ondersteund argument voor `__builtin_frame_address'niet-ondersteund argument voor `__builtin_return_address'niet-ondersteunde versieniet-beëindigde commentaarformaatstring niet beëindigdniet-beëindigde string- of karakterconstanteexpressie zonder type als argument %dnutteloos sleutelwoord of typenaam in lege declaratievariabele `%s' als inline gedeclareerdvariabele `%s' heeft beginwaarde, maar een onvolledig typevariabele of veld `%s' als void gedeclareerdobject van variabele lengte mag geen beginwaarde krijgenvoid-waarde niet genegeerd zoals het hoort'volatile' registervariabelen werken niet zoals U zou willenlet op:let op: de zwakke declaratie van `%s' moet publiek zijnde zwakke declaratie van `%s' moet aan de definitie voorafgaanbreedte van `%s' overschrijdt zijn typebreedte van integerconstante verandert met -traditionalbreedte van integerconstante kan veranderen op andere systemen met -traditionalwrite %sconstant object wordt beschreven (argument %d)laadcommandos worden geschreven. + + verkeerd aantal argumenten opgegeven voor het `%s' attribuutargument van verkeerd type voor absargument van verkeerd type voor bit-complementargument van verkeerd type voor vervoegingargument van verkeerd type voor decrementerenargument van verkeerd type voor incrementerenargument van verkeerd type voor unair uitroepingstekenargument van verkeerd type voor unaire minargument van verkeerd type voor unaire plus%ld bytes geschreven (%ld verwacht) naar %sarray `%s' heeft grootte die negatief of 0 isbitveld `%s' heeft breedte 0formaatstring van lengte 0 \ No newline at end of file diff -Nrc3pad gcc-3.0.4/gcc/po/nl.po gcc-3.1/gcc/po/nl.po *** gcc-3.0.4/gcc/po/nl.po Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/po/nl.po Mon Feb 18 11:20:09 2002 *************** *** 0 **** --- 1,23999 ---- + # Dutch messages for gcc 3.x. + # Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc. + # Tim Van Holder , 1999, 2000, 2002. + # + # Currently still a lot of fuzzies, since this started out life + # as a .po file for gcc 2.95.2. + # + msgid "" + msgstr "" + "Project-Id-Version: gcc 3.1-b20020128\n" + "POT-Creation-Date: 2002-01-22 19:38-0800\n" + "PO-Revision-Date: 2002-02-04 18:04+0000\n" + "Last-Translator: Tim Van Holder \n" + "Language-Team: Dutch \n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=iso-8859-1\n" + "Content-Transfer-Encoding: 8bit\n" + + #: attribs.c:310 + #, c-format + msgid "`%s' attribute directive ignored" + msgstr "attribuut-commando `%s' wordt genegeerd" + + #: attribs.c:318 + #, c-format + msgid "wrong number of arguments specified for `%s' attribute" + msgstr "verkeerd aantal argumenten opgegeven voor het `%s' attribuut" + + #: attribs.c:335 + #, c-format + msgid "`%s' attribute does not apply to types" + msgstr "het `%s' attribuut heeft geen betekenis voor types" + + #: attribs.c:372 + #, c-format + msgid "`%s' attribute only applies to function types" + msgstr "het `%s' attribuut heeft enkel betekenis voor functie-types" + + #: attribs.c:462 attribs.c:484 attribs.c:506 attribs.c:537 attribs.c:559 + #: attribs.c:582 attribs.c:612 attribs.c:650 attribs.c:697 attribs.c:727 + #: attribs.c:757 attribs.c:780 attribs.c:1026 attribs.c:1082 attribs.c:1138 + #: attribs.c:1199 attribs.c:1225 attribs.c:1427 config/arm/arm.c:2012 + #: config/arm/arm.c:2039 config/avr/avr.c:4683 config/h8300/h8300.c:3045 + #: config/h8300/h8300.c:3070 config/i386/i386.c:1261 config/i386/winnt.c:74 + #, c-format + msgid "`%s' attribute ignored" + msgstr "het `%s' attribuut wordt genegeerd" + + #: attribs.c:813 + #, c-format + msgid "unknown machine mode `%s'" + msgstr "onbekende machine-modus `%s'" + + #: attribs.c:816 + #, c-format + msgid "no data type for mode `%s'" + msgstr "geen datatype voor modus `%s'" + + #: attribs.c:849 + msgid "section attribute cannot be specified for local variables" + msgstr "sectie-attribuut kan niet opgegeven worden voor lokale variabelen" + + #: attribs.c:860 + #, c-format + msgid "section of `%s' conflicts with previous declaration" + msgstr "sectie van `%s' geeft een conflict met een eerdere declaratie" + + #: attribs.c:869 + #, c-format + msgid "section attribute not allowed for `%s'" + msgstr "sectie-attribuut niet toegestaan voor `%s'" + + #: attribs.c:876 + msgid "section attributes are not supported for this target" + msgstr "sectie-attributen worden niet ondersteund op dit doelsysteem" + + #: attribs.c:918 + msgid "requested alignment is not a constant" + msgstr "gevraagd alignment is geen constante" + + #: attribs.c:923 + msgid "requested alignment is not a power of 2" + msgstr "gevraagd alignment is geen macht van 2" + + #: attribs.c:928 + msgid "requested alignment is too large" + msgstr "gevraagd alignment is te groot" + + #: attribs.c:955 + #, c-format + msgid "alignment may not be specified for `%s'" + msgstr "er kan geen alignment opgegeven worden voor `%s'" + + #: attribs.c:1000 + #, c-format + msgid "`%s' defined both normally and as an alias" + msgstr "`%s' is zowel als alias en als normale naam gedefinieerd" + + #: attribs.c:1010 + msgid "alias arg not a string" + msgstr "alias-argument is geen string" + + #: attribs.c:1049 attribs.c:1105 + #, c-format + msgid "`%s' attribute applies only to functions" + msgstr "het `%s' attribuut heeft enkel betekenis voor functies" + + #: attribs.c:1056 attribs.c:1112 + #, c-format + msgid "can't set `%s' attribute after definition" + msgstr "kan het `%s' attribuut niet instellen na een definitie" + + #: attribs.c:1196 + #, c-format + msgid "`%s' attribute ignored for `%s'" + msgstr "het `%s' attribuut wordt genegeerd voor `%s'" + + # Is the %s the argument, or is it 'of' the argument? + #: attribs.c:1253 + #, c-format + msgid "invalid vector type for attribute `%s'" + msgstr "ongeldig vector-type voor attribuut `%s'" + + #: attribs.c:1276 attribs.c:1281 + msgid "no vector mode with the size and type specified could be found" + msgstr "er kon geen vectormodus gevonden worden met de opgegeven grootte en type" + + #: builtins.c:282 + msgid "offset outside bounds of constant string" + msgstr "offset buiten de grenzen van een constante string" + + #: builtins.c:759 + msgid "second arg to `__builtin_prefetch' must be a constant" + msgstr "tweede argument voor `__builtin_prefetch' moet een constante zijn" + + #: builtins.c:766 + msgid "invalid second arg to __builtin_prefetch; using zero" + msgstr "ongeldig tweede argument voor __builtin_prefetch; zal nul gebruiken" + + #: builtins.c:773 + msgid "third arg to `__builtin_prefetch' must be a constant" + msgstr "derde argument voor `__builtin_prefetch' moet een constante zijn" + + #: builtins.c:780 + msgid "invalid third arg to __builtin_prefetch; using zero" + msgstr "ongeldig derde argument voor __builtin_prefetch; zal nul gebruiken" + + #. ??? We used to try and build up a call to the out of line function, + #. guessing about what registers needed saving etc. This became much + #. harder with __builtin_va_start, since we don't have a tree for a + #. call to __builtin_saveregs to fall back on. There was exactly one + #. port (i860) that used this code, and I'm unconvinced it could actually + #. handle the general case. So we no longer try to handle anything + #. weird and make the backend absorb the evil. + #: builtins.c:2759 + msgid "__builtin_saveregs not supported by this target" + msgstr "__builtin_saveregs wordt niet ondersteund op dit doelsysteem" + + #: builtins.c:2801 + msgid "argument of `__builtin_args_info' must be constant" + msgstr "argument voor `__builtin_args_info' moet een constante zijn" + + #: builtins.c:2807 + msgid "argument of `__builtin_args_info' out of range" + msgstr "argument voor `__builtin_args_info' buiten bereik" + + #: builtins.c:2813 + msgid "missing argument in `__builtin_args_info'" + msgstr "ontbrekend argument in `__builtin_args_info'" + + #: builtins.c:2845 + msgid "`va_start' used in function with fixed args" + msgstr "`va_start' gebruikt in functie met vaste argumenten" + + #: builtins.c:2864 + msgid "second parameter of `va_start' not last named argument" + msgstr "de tweede parameter van `va_start' is niet het laatste benoemde argument" + + #. Evidently an out of date version of ; can't validate + #. va_start's second argument, but can still work as intended. + #: builtins.c:2869 + msgid "`__builtin_next_arg' called without an argument" + msgstr "`__builtin_next_arg' opgeroepen zonder argument" + + #: builtins.c:2973 + msgid "too many arguments to function `va_start'" + msgstr "teveel argumenten voor functie `va_start'" + + # Of misschien beter "... niet van het `va_list' type"? + #: builtins.c:3057 + msgid "first argument to `va_arg' not of type `va_list'" + msgstr "het eerste argument van `va_arg' is geen `va_list'" + + #: builtins.c:3085 + #, c-format + msgid "`%s' is promoted to `%s' when passed through `...'" + msgstr "`%s' wordt naar `%s' gepromoveerd indien het via `...' wordt doorgegeven" + + #: builtins.c:3089 + #, c-format + msgid "(so you should pass `%s' not `%s' to `va_arg')" + msgstr "(dus U zou `%s' en niet `%s' moeten doorgeven aan `va_arg')" + + #: builtins.c:3213 + msgid "invalid arg to `__builtin_frame_address'" + msgstr "ongeldig argument voor `__builtin_frame_address'" + + #: builtins.c:3215 + msgid "invalid arg to `__builtin_return_address'" + msgstr "ongeldig argument voor `__builtin_return_address'" + + #: builtins.c:3229 + msgid "unsupported arg to `__builtin_frame_address'" + msgstr "niet-ondersteund argument voor `__builtin_frame_address'" + + #: builtins.c:3231 + msgid "unsupported arg to `__builtin_return_address'" + msgstr "niet-ondersteund argument voor `__builtin_return_address'" + + #: builtins.c:3399 + msgid "second arg to `__builtin_expect' must be a constant" + msgstr "tweede argument voor `__builtin_expect' moet een constante zijn" + + #: builtins.c:3868 + msgid "__builtin_longjmp second argument must be 1" + msgstr "tweede argument van `__builtin_longjmp' moet 1 zijn" + + #: builtins.c:3882 + msgid "__builtin_trap not supported by this target" + msgstr "`__builtin_trap' wordt niet ondersteund op dit doelsysteem" + + #. just do library call, if unknown builtin + #: builtins.c:3947 c-common.c:3685 + #, c-format + msgid "built-in function `%s' not currently supported" + msgstr "ingebouwde functie `%s' wordt op het ogenblik niet ondersteund" + + # betere vertaling voor 'function scope'? + #: c-common.c:550 + #, c-format + msgid "`%s' is not defined outside of function scope" + msgstr "`%s' is niet gedefinieerd buiten een functie" + + #: c-common.c:590 + msgid "concatenation of string literals with __FUNCTION__ is deprecated. This feature will be removed in future" + msgstr "concatenatie van stringconstantes met __FUNCTION__ is verouderd. Deze mogelijkheid zal in de toekomst verwijderd worden" + + #: c-common.c:659 + #, c-format + msgid "string length `%d' is greater than the length `%d' ISO C%d compilers are required to support" + msgstr "stringlengte `%d' is groter dan `%d', de lengte die ISO C%d compilers moeten ondersteunen" + + #: c-common.c:707 ch/decl.c:4100 + msgid "overflow in constant expression" + msgstr "overflow in constante expressie" + + #: c-common.c:728 + msgid "integer overflow in expression" + msgstr "integer overflow in expressie" + + #: c-common.c:737 + msgid "floating point overflow in expression" + msgstr "floating-point overflow in expressie" + + #. This detects cases like converting -129 or 256 to unsigned char. + #: c-common.c:758 + msgid "large integer implicitly truncated to unsigned type" + msgstr "grote integer impliciet afgekapt naar 'unsigned' type" + + #: c-common.c:760 + msgid "negative integer implicitly converted to unsigned type" + msgstr "negatieve integer impliciet omgezet naar 'unsigned' type" + + #: c-common.c:807 + msgid "overflow in implicit constant conversion" + msgstr "overflow in impliciete omzetting van constante" + + #: c-common.c:955 + #, c-format + msgid "operation on `%s' may be undefined" + msgstr "bewerking op `%s' is mogelijk niet gedefinieerd" + + # vertaling voor 'statement'? + #: c-common.c:1246 + msgid "expression statement has incomplete type" + msgstr "expressie-statement heeft onvolledig type" + + #: c-common.c:1279 ch/actions.c:1027 + msgid "case label does not reduce to an integer constant" + msgstr "case-label valt niet te herleiden tot een integerconstante" + + #: c-common.c:1577 + msgid "invalid truth-value expression" + msgstr "ongeldige waarheidsexpressie" + + #: c-common.c:1628 + #, c-format + msgid "invalid operands to binary %s" + msgstr "ongeldige operanden voor binaire %s-operator" + + #: c-common.c:1863 c-common.c:1872 + msgid "comparison is always false due to limited range of data type" + msgstr "vergelijking is altijd vals omwille van het beperkte bereik van het datatype" + + #: c-common.c:1865 c-common.c:1874 + msgid "comparison is always true due to limited range of data type" + msgstr "vergelijking is altijd waar omwille van het beperkte bereik van het datatype" + + #: c-common.c:1940 + msgid "comparison of unsigned expression >= 0 is always true" + msgstr "vergelijking van 'unsigned' expressie >= 0 is altijd waar" + + #: c-common.c:1949 + msgid "comparison of unsigned expression < 0 is always false" + msgstr "vergelijking van 'unsigned' expressie < 0 is altijd vals" + + #: c-common.c:2000 f/com.c:14814 + msgid "struct type value used where scalar is required" + msgstr "waarde van struct-type gebruikt waar een scalair nodig is" + + #: c-common.c:2004 f/com.c:14818 + msgid "union type value used where scalar is required" + msgstr "waarde van union-type gebruikt waar een scalair nodig is" + + #: c-common.c:2008 f/com.c:14822 + msgid "array type value used where scalar is required" + msgstr "waarde van array-type gebruikt waar een scalair nodig is" + + #: c-common.c:2123 f/com.c:14948 + msgid "suggest parentheses around assignment used as truth value" + msgstr "gebruik liefst haakjes rond toewijzingen die als waarheid gebruikt worden" + + #: c-common.c:2167 c-common.c:2199 + msgid "invalid use of `restrict'" + msgstr "ongeldig gebruik van `restrict'" + + #: c-common.c:2315 + msgid "__alignof__ applied to an incomplete type" + msgstr "__alignof__ toegepast op een onvolledig type" + + #: c-common.c:2341 + msgid "`__alignof' applied to a bit-field" + msgstr "`__alignof' toegepast op bitveld" + + #: c-common.c:2783 + #, c-format + msgid "cannot disable built-in function `%s'" + msgstr "ingebouwde functie `%s' kan niet uitgeschakeld worden" + + #: c-common.c:3064 c-typeck.c:1774 + #, c-format + msgid "too few arguments to function `%s'" + msgstr "te weinig argumenten voor functie `%s'" + + #: c-common.c:3070 c-typeck.c:1627 + #, c-format + msgid "too many arguments to function `%s'" + msgstr "teveel argumenten voor functie `%s'" + + #: c-common.c:3258 + msgid "pointers are not permitted as case values" + msgstr "pointers zijn niet toegestaan als case-waarden" + + # betere vertaling voor 'range expressions'? + #: c-common.c:3264 + msgid "ISO C++ forbids range expressions in switch statements" + msgstr "ISO C++ verbiedt het gebruik van bereik-expressies in switch statements" + + #: c-common.c:3266 + msgid "ISO C forbids range expressions in switch statements" + msgstr "ISO C verbiedt het gebruik van bereik-expressies in switch statements" + + #: c-common.c:3296 + msgid "empty range specified" + msgstr "leeg bereik opgegeven" + + #: c-common.c:3347 + msgid "duplicate (or overlapping) case value" + msgstr "herhaalde (of overlappende) case-waarde" + + #: c-common.c:3349 + msgid "this is the first entry overlapping that value" + msgstr "dit is de eerste waarde die die waarde overlapt" + + #: c-common.c:3353 ch/actions.c:1125 + msgid "duplicate case value" + msgstr "herhaalde case-waarde" + + #: c-common.c:3354 + msgid "previously used here" + msgstr "tevoren hier gebruikt" + + #: c-common.c:3358 + msgid "multiple default labels in one switch" + msgstr "meerdere default-labels in één switch" + + #: c-common.c:3359 + msgid "this is the first default label" + msgstr "dit is het eerste default-label" + + #: c-common.c:3387 + msgid "ISO C++ forbids taking the address of a label" + msgstr "ISO C++ verbiedt het nemen van het adres van een label" + + #: c-common.c:3389 + msgid "ISO C forbids taking the address of a label" + msgstr "ISO C verbiedt het nemen van het adres van een label" + + #: c-common.c:4023 + msgid "-Wformat-y2k ignored without -Wformat" + msgstr "-Wformat-y2k genegeerd zonder -Wformat" + + #: c-common.c:4025 + msgid "-Wformat-extra-args ignored without -Wformat" + msgstr "-Wformat-extra-args genegeerd zonder -Wformat" + + #: c-common.c:4027 + msgid "-Wformat-nonliteral ignored without -Wformat" + msgstr "-Wformat-nonliteral genegeerd zonder -Wformat" + + #: c-common.c:4029 + msgid "-Wformat-security ignored without -Wformat" + msgstr "-Wformat-security genegeerd zonder -Wformat" + + #: c-common.c:4031 + msgid "-Wmissing-format-attribute ignored without -Wformat" + msgstr "-Wmissing-format-attribute genegeerd zonder -Wformat" + + #: c-common.c:4122 + #, c-format + msgid "declaration of `%s' shadows %s" + msgstr "de declaratie van `%s' verbergt %s" + + #: c-convert.c:78 c-typeck.c:1031 c-typeck.c:4139 ch/convert.c:1164 + #: cp/typeck.c:1728 cp/typeck.c:6288 + msgid "void value not ignored as it ought to be" + msgstr "void-waarde niet genegeerd zoals het hoort" + + #: c-convert.c:110 java/typeck.c:150 + msgid "conversion to non-scalar type requested" + msgstr "conversie naar niet-scalair type gevraagd" + + #: c-decl.c:470 + msgid "-traditional is deprecated and may be removed" + msgstr "-traditional is verouderd en zal misschien verwijderd worden" + + #: c-decl.c:560 + #, c-format + msgid "unknown C standard `%s'" + msgstr "onbekende C standaard `%s'" + + #: c-decl.c:842 + #, c-format + msgid "array `%s' assumed to have one element" + msgstr "array `%s' wordt aangenomen één element te bevatten" + + #: c-decl.c:1018 + #, c-format + msgid "`struct %s' incomplete in scope ending here" + msgstr "`struct %s' onvolledig in bereik dat hier eindigt" + + #: c-decl.c:1021 + #, c-format + msgid "`union %s' incomplete in scope ending here" + msgstr "`union %s' onvolledig in bereik dat hier eindigt" + + #: c-decl.c:1024 + #, c-format + msgid "`enum %s' incomplete in scope ending here" + msgstr "`enum %s' onvolledig in bereik dat hier eindigt" + + #: c-decl.c:1138 c-decl.c:1279 ch/decl.c:2920 java/decl.c:1373 + #, c-format + msgid "label `%s' used but not defined" + msgstr "label `%s' gebruikt maar niet gedefinieerd" + + #: c-decl.c:1144 c-decl.c:1286 ch/decl.c:2926 java/decl.c:1379 + #, c-format + msgid "label `%s' defined but not used" + msgstr "label `%s' gedefinieerd maar niet gebruikt" + + #: c-decl.c:1403 cp/decl.c:3138 + #, c-format + msgid "function `%s' redeclared as inline" + msgstr "functie `%s' geherdeclareerd als inline" + + #: c-decl.c:1405 cp/decl.c:3140 + #, c-format + msgid "previous declaration of function `%s' with attribute noinline" + msgstr "eerdere declaratie van functie `%s' had het noinline attribuut" + + #: c-decl.c:1412 cp/decl.c:3147 + #, c-format + msgid "function `%s' redeclared with attribute noinline" + msgstr "functie `%s' geherdeclareerd met noinline attribuut" + + #: c-decl.c:1414 cp/decl.c:3149 + #, c-format + msgid "previous declaration of function `%s' was inline" + msgstr "eerdere declaratie van functie `%s' was inline" + + #: c-decl.c:1443 c-decl.c:1496 + #, c-format + msgid "shadowing built-in function `%s'" + msgstr "ingebouwde functie `%s' wordt verborgen" + + #: c-decl.c:1445 + #, c-format + msgid "shadowing library function `%s'" + msgstr "bibliotheekfunctie `%s' wordt verborgen" + + #: c-decl.c:1451 + #, c-format + msgid "library function `%s' declared as non-function" + msgstr "bibliotheekfunctie `%s' gedeclareerd als niet-functie" + + #: c-decl.c:1455 c-decl.c:1458 + #, c-format + msgid "built-in function `%s' declared as non-function" + msgstr "ingebouwde functie `%s' gedeclareerd als niet-functie" + + #: c-decl.c:1462 objc/objc-act.c:2334 objc/objc-act.c:6036 + #, c-format + msgid "`%s' redeclared as different kind of symbol" + msgstr "`%s' als ander soort symbool geherdeclareerd" + + #: c-decl.c:1463 c-decl.c:1645 c-decl.c:1794 objc/objc-act.c:2336 + #: objc/objc-act.c:6038 objc/objc-act.c:6093 + #, c-format + msgid "previous declaration of `%s'" + msgstr "eerdere declaratie van `%s'" + + #. If types don't match for a built-in, throw away the built-in. + #: c-decl.c:1549 + #, c-format + msgid "conflicting types for built-in function `%s'" + msgstr "conflicterende types voor ingebouwde functie `%s'" + + #: c-decl.c:1592 c-decl.c:1611 + #, c-format + msgid "conflicting types for `%s'" + msgstr "conflicterende types voor `%s'" + + #: c-decl.c:1634 + msgid "a parameter list with an ellipsis can't match an empty parameter name list declaration" + msgstr "een parameterlijst met een beletselteken kan niet overeenkomen met een declaratie met lege parameterlijst" + + #: c-decl.c:1640 + msgid "an argument type that has a default promotion can't match an empty parameter name list declaration" + msgstr "een argumenttype dat een standaardpromotie heeft kan niet overeenkomen met een declaratie met lege parameterlijst" + + #: c-decl.c:1655 c-decl.c:1677 + #, c-format + msgid "redefinition of `%s'" + msgstr "herdefinitie van `%s'" + + #: c-decl.c:1658 + #, c-format + msgid "redeclaration of `%s'" + msgstr "herdeclaratie van `%s'" + + #: c-decl.c:1661 + #, c-format + msgid "conflicting declarations of `%s'" + msgstr "conflicterende declaraties van `%s'" + + #: c-decl.c:1670 c-decl.c:1682 + #, c-format + msgid "`%s' previously defined here" + msgstr "`%s' tevoren hier gedefinieerd" + + #: c-decl.c:1671 c-decl.c:1683 + #, c-format + msgid "`%s' previously declared here" + msgstr "`%s' tevoren hier gedeclareerd" + + #: c-decl.c:1704 + #, c-format + msgid "prototype for `%s' follows" + msgstr "prototype voor `%s' volgt" + + #: c-decl.c:1705 c-decl.c:1713 c-decl.c:1729 + msgid "non-prototype definition here" + msgstr "niet-prototype definitie hier" + + #: c-decl.c:1712 + #, c-format + msgid "prototype for `%s' follows and number of arguments doesn't match" + msgstr "prototype voor `%s' volgt en aantal argumenten komt niet overeen" + + #: c-decl.c:1727 + #, c-format + msgid "prototype for `%s' follows and argument %d doesn't match" + msgstr "prototype voor `%s' volgt en argument %d komt niet overeen" + + #: c-decl.c:1745 + #, c-format + msgid "`%s' declared inline after being called" + msgstr "`%s' als 'inline' gedeclareerd na oproep" + + #: c-decl.c:1751 + #, c-format + msgid "`%s' declared inline after its definition" + msgstr "`%s' als 'inline' gedeclareerd na de definitie" + + #: c-decl.c:1758 + #, c-format + msgid "static declaration for `%s' follows non-static" + msgstr "static declaratie voor `%s' volgt niet-static declaratie" + + #: c-decl.c:1766 + #, c-format + msgid "non-static declaration for `%s' follows static" + msgstr "niet-static declaratie voor `%s' volgt static declaratie" + + #: c-decl.c:1773 + #, c-format + msgid "const declaration for `%s' follows non-const" + msgstr "'const' declaratie voor `%s' volgt niet-'const' declaratie" + + #: c-decl.c:1780 + #, c-format + msgid "type qualifiers for `%s' conflict with previous decl" + msgstr "type-qualifiers voor `%s' geven een conflict met een eerdere declaratie" + + #: c-decl.c:1793 + #, c-format + msgid "redundant redeclaration of `%s' in same scope" + msgstr "overbodige herdeclaratie van `%s' in zelfde bereik" + + #: c-decl.c:2097 java/decl.c:1072 + #, c-format + msgid "declaration of `%s' shadows a parameter" + msgstr "de declaratie van `%s' verbergt een parameter" + + #: c-decl.c:2100 java/decl.c:1075 + #, c-format + msgid "declaration of `%s' shadows a symbol from the parameter list" + msgstr "de declaratie van `%s' verbergt een symbool uit de parameterlijst" + + #: c-decl.c:2121 cp/decl.c:4220 + msgid "a parameter" + msgstr "een parameter" + + #: c-decl.c:2123 cp/decl.c:4237 + msgid "a previous local" + msgstr "een eerdere locale" + + #. XXX shadow warnings in outer-more namespaces + #: c-decl.c:2127 cp/decl.c:4241 + msgid "a global declaration" + msgstr "een globale declaratie" + + #: c-decl.c:2171 + #, c-format + msgid "nested extern declaration of `%s'" + msgstr "geneste externe declaratie van `%s'" + + #: c-decl.c:2191 java/decl.c:1025 + #, c-format + msgid "`%s' used prior to declaration" + msgstr "`%s' gebruikt vóór declaratie" + + #: c-decl.c:2206 c-decl.c:2421 + #, c-format + msgid "`%s' was declared implicitly `extern' and later `static'" + msgstr "`%s' was impliciet als `extern' gedeclareerd en daarna als `static'" + + #: c-decl.c:2316 cp/decl.c:4079 + msgid "type mismatch with previous external decl" + msgstr "type-conflict met eerdere externe declaratie" + + #: c-decl.c:2317 + #, c-format + msgid "previous external decl of `%s'" + msgstr "eerdere externe declaratie van `%s'" + + #: c-decl.c:2330 + msgid "type mismatch with previous implicit declaration" + msgstr "type-conflict met eerdere impliciete declaratie" + + #: c-decl.c:2332 + #, c-format + msgid "previous implicit declaration of `%s'" + msgstr "eerdere impliciete declaratie van `%s'" + + #: c-decl.c:2349 + #, c-format + msgid "type of external `%s' is not global" + msgstr "type van extern symbool `%s' is niet globaal" + + #: c-decl.c:2400 + #, c-format + msgid "`%s' was previously implicitly declared to return `int'" + msgstr "`%s' was tevoren impliciet gedeclareerd om een `int' terug te geven" + + #: c-decl.c:2425 + #, c-format + msgid "`%s' was declared `extern' and later `static'" + msgstr "`%s' was als `extern' gedeclareerd en daarna als `static'" + + #: c-decl.c:2449 + #, c-format + msgid "extern declaration of `%s' doesn't match global one" + msgstr "externe declaratie van `%s' komt niet overeen met de globale declaratie" + + #: c-decl.c:2491 + #, c-format + msgid "`%s' locally external but globally static" + msgstr "`%s' is locaal `extern', maar globaal `static'" + + #: c-decl.c:2613 + #, c-format + msgid "function `%s' was previously declared within a block" + msgstr "functie `%s' was tevoren binnen een blok gedeclareerd" + + #: c-decl.c:2633 c-decl.c:2635 + #, c-format + msgid "implicit declaration of function `%s'" + msgstr "impliciete declaratie van functie `%s'" + + #: c-decl.c:2723 + #, c-format + msgid "label %s referenced outside of any function" + msgstr "naar label %s gerefereerd buiten enige functie" + + #: c-decl.c:2780 + #, c-format + msgid "duplicate label declaration `%s'" + msgstr "herhaalde label-declaratie `%s'" + + #: c-decl.c:2783 + msgid "this is a previous declaration" + msgstr "dit is een eerdere declaratie" + + #: c-decl.c:3291 + msgid "unnamed struct/union that defines no instances" + msgstr "naamloze struct/union die geen instanties definieert" + + #: c-decl.c:3310 + msgid "useless keyword or type name in empty declaration" + msgstr "nutteloos sleutelwoord of typenaam in lege declaratie" + + #: c-decl.c:3317 + msgid "two types specified in one empty declaration" + msgstr "twee types opgegeven in één lege declaratie" + + #: c-decl.c:3322 c-parse.y:725 c-parse.y:727 objc-parse.y:761 objc-parse.y:763 + #: objc-parse.y:2987 parse.y:728 parse.y:1808 + msgid "empty declaration" + msgstr "lege declaratie" + + #: c-decl.c:3352 + msgid "ISO C89 does not support `static' or type qualifiers in parameter array declarators" + msgstr "ISO C89 ondersteunt geen `static' of type-qualificaties in declaratoren van parameter arrays" + + #: c-decl.c:3354 + msgid "ISO C89 does not support `[*]' array declarators" + msgstr "ISO C89 ondersteunt geen `[*]' declaratoren van arrays" + + #: c-decl.c:3357 + msgid "GCC does not yet properly implement `[*]' array declarators" + msgstr "GCC heeft nog geen fatsoenlijke implementatie van `[*]' declaratoren van arrays" + + #: c-decl.c:3376 + msgid "static or type qualifiers in abstract declarator" + msgstr "`static' of type-modifier in abstracte declarator" + + #: c-decl.c:3450 + #, c-format + msgid "`%s' is usually a function" + msgstr "`%s' is meestal een functie" + + #: c-decl.c:3464 + #, c-format + msgid "typedef `%s' is initialized" + msgstr "typedef `%s' krijgt beginwaarde" + + #: c-decl.c:3471 + #, c-format + msgid "function `%s' is initialized like a variable" + msgstr "typedef `%s' krijgt beginwaarde alsof het een variabele is" + + #. DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE. + #: c-decl.c:3478 + #, c-format + msgid "parameter `%s' is initialized" + msgstr "parameter `%s' krijgt beginwaarde" + + #: c-decl.c:3498 c-typeck.c:4907 + msgid "variable-sized object may not be initialized" + msgstr "object van variabele lengte mag geen beginwaarde krijgen" + + #: c-decl.c:3504 + #, c-format + msgid "variable `%s' has initializer but incomplete type" + msgstr "variabele `%s' heeft beginwaarde, maar een onvolledig type" + + #: c-decl.c:3510 + #, c-format + msgid "elements of array `%s' have incomplete type" + msgstr "elementen van array `%s' hebben een onvolledig type" + + #: c-decl.c:3523 + #, c-format + msgid "declaration of `%s' has `extern' and is initialized" + msgstr "de declaratie van `%s' is `extern' en heeft een beginwaarde" + + #: c-decl.c:3558 c-decl.c:6198 cp/decl.c:7264 cp/decl.c:13533 + #, fuzzy, c-format + msgid "inline function `%s' given attribute noinline" + msgstr "ingebouwde functie `%s' als niet-functie gedeclareerd" + + #: c-decl.c:3639 + #, c-format + msgid "initializer fails to determine size of `%s'" + msgstr "beginwaarde legt grootte van `%s' niet vast" + + #: c-decl.c:3644 + #, c-format + msgid "array size missing in `%s'" + msgstr "array-grootte ontbreekt in `%s'" + + #: c-decl.c:3660 + #, c-format + msgid "zero or negative size array `%s'" + msgstr "array `%s' heeft grootte die negatief of 0 is" + + #: c-decl.c:3688 ch/decl.c:4133 + #, c-format + msgid "storage size of `%s' isn't known" + msgstr "opslaggrootte van `%s' is onbekend" + + #: c-decl.c:3698 + #, c-format + msgid "storage size of `%s' isn't constant" + msgstr "opslaggrootte van `%s' is niet constant" + + #: c-decl.c:3757 + #, fuzzy, c-format + msgid "ignoring asm-specifier for non-static local variable `%s'" + msgstr "registernaam opgegeven voor niet-registervariabele `%s'" + + #: c-decl.c:3832 + #, fuzzy, c-format + msgid "ISO C forbids parameter `%s' shadowing typedef" + msgstr "ANSI C verbiedt het verbergen van een typedef door parameter `%s'" + + #: c-decl.c:4136 cp/decl.c:10069 + msgid "`long long long' is too long for GCC" + msgstr "`long long long' is te lang voor GCC" + + #: c-decl.c:4141 + #, fuzzy + msgid "ISO C89 does not support `long long'" + msgstr "ANSI C ondersteunt `long long' niet" + + #: c-decl.c:4146 cp/decl.c:10074 + #, c-format + msgid "duplicate `%s'" + msgstr "herhaalde `%s'" + + #: c-decl.c:4152 cp/decl.c:10098 + #, c-format + msgid "two or more data types in declaration of `%s'" + msgstr "twee of meer data types in de declaratie van `%s'" + + #: c-decl.c:4167 cp/decl.c:10103 + #, c-format + msgid "`%s' fails to be a typedef or built in type" + msgstr "`%s' is geen typedef of ingebouwd type" + + #: c-decl.c:4206 + #, c-format + msgid "type defaults to `int' in declaration of `%s'" + msgstr "type krijgt standaardwaarde `int' in de declaratie van `%s'" + + #: c-decl.c:4235 + #, c-format + msgid "both long and short specified for `%s'" + msgstr "zowel 'long' als 'short' opgegeven voor `%s'" + + #: c-decl.c:4239 cp/decl.c:10217 + #, c-format + msgid "long or short specified with char for `%s'" + msgstr "'long' of 'short' opgegeven bij 'char' voor `%s'" + + #: c-decl.c:4246 cp/decl.c:10221 + #, c-format + msgid "long or short specified with floating type for `%s'" + msgstr "'long' of 'short' opgegeven bij floating-point type voor `%s'" + + #: c-decl.c:4249 + msgid "the only valid combination is `long double'" + msgstr "de enige geldige combinatie is `long double'" + + #: c-decl.c:4255 + #, c-format + msgid "both signed and unsigned specified for `%s'" + msgstr "zowel 'signed' als 'unsigned' opgegeven voor `%s'" + + #: c-decl.c:4257 cp/decl.c:10210 + #, c-format + msgid "long, short, signed or unsigned invalid for `%s'" + msgstr "'long', 'short', 'signed' of 'unsigned' ongeldig voor `%s'" + + #: c-decl.c:4263 cp/decl.c:10230 + #, c-format + msgid "long, short, signed or unsigned used invalidly for `%s'" + msgstr "ongeldig gebruik van 'long', 'short', 'signed' of 'unsigned' voor `%s'" + + #: c-decl.c:4282 cp/decl.c:10251 + #, c-format + msgid "complex invalid for `%s'" + msgstr "'complex' ongeldig voor `%s'" + + #: c-decl.c:4327 + msgid "ISO C89 does not support complex types" + msgstr "ISO C89 ondersteunt geen complexe types" + + #: c-decl.c:4339 + msgid "ISO C does not support plain `complex' meaning `double complex'" + msgstr "ISO C ondersteunt simpele `complex' niet in de betekenis van `double complex'" + + #: c-decl.c:4345 c-decl.c:4357 + #, fuzzy + msgid "ISO C does not support complex integer types" + msgstr "ANSI C ondersteunt `long long' niet" + + #: c-decl.c:4372 c-decl.c:4811 cp/decl.c:10853 + msgid "duplicate `const'" + msgstr "herhaalde `const'" + + #: c-decl.c:4374 c-decl.c:4815 cp/decl.c:10857 + msgid "duplicate `restrict'" + msgstr "herhaalde `restrict'" + + #: c-decl.c:4376 c-decl.c:4813 cp/decl.c:10855 + msgid "duplicate `volatile'" + msgstr "herhaalde `volatile'" + + #: c-decl.c:4398 cp/decl.c:10402 + #, c-format + msgid "multiple storage classes in declaration of `%s'" + msgstr "meerdere opslagklassen in declaratie van `%s'" + + #: c-decl.c:4407 + msgid "function definition declared `auto'" + msgstr "functie-definitie als `auto' gedeclareerd" + + #: c-decl.c:4409 + msgid "function definition declared `register'" + msgstr "functie-definitie als `register' gedeclareerd" + + #: c-decl.c:4411 + msgid "function definition declared `typedef'" + msgstr "functie-definitie als `typdef' gedeclareerd" + + #: c-decl.c:4424 + #, c-format + msgid "storage class specified for structure field `%s'" + msgstr "opslagklasse opgegeven voor structure-veld `%s'" + + #: c-decl.c:4428 cp/decl.c:10449 + #, c-format + msgid "storage class specified for parameter `%s'" + msgstr "opslagklasse opgegeven voor parameter `%s'" + + #: c-decl.c:4431 cp/decl.c:10451 + msgid "storage class specified for typename" + msgstr "opslagklasse opgegeven voor typenaam" + + #: c-decl.c:4443 cp/decl.c:10465 + #, c-format + msgid "`%s' initialized and declared `extern'" + msgstr "`%s' krijgt beginwaarde en is als `extern' gedeclareerd" + + #: c-decl.c:4445 cp/decl.c:10468 + #, c-format + msgid "`%s' has both `extern' and initializer" + msgstr "`%s' heeft zowel `extern' als een beginwaarde" + + #: c-decl.c:4449 cp/decl.c:10472 + #, c-format + msgid "nested function `%s' declared `extern'" + msgstr "geneste functie `%s' is als `extern' gedeclareerd" + + #: c-decl.c:4452 cp/decl.c:10476 + #, c-format + msgid "top-level declaration of `%s' specifies `auto'" + msgstr "top-level declaratie van `%s' specifieert `auto'" + + #. Only the innermost declarator (making a parameter be of + #. array type which is converted to pointer type) + #. may have static or type qualifiers. + #: c-decl.c:4487 c-decl.c:4676 + #, fuzzy + msgid "static or type qualifiers in non-parameter array declarator" + msgstr "ongeldige type-modifier binnen pointer-declarator" + + #: c-decl.c:4531 + #, c-format + msgid "declaration of `%s' as array of voids" + msgstr "`%s' wordt gedeclareerd als een array van voids" + + #: c-decl.c:4537 + #, c-format + msgid "declaration of `%s' as array of functions" + msgstr "`%s' wordt gedeclareerd als een array van functies" + + #: c-decl.c:4558 + #, c-format + msgid "size of array `%s' has non-integer type" + msgstr "grootte van array `%s' is van een niet-integraal type" + + #: c-decl.c:4563 + #, fuzzy, c-format + msgid "ISO C forbids zero-size array `%s'" + msgstr "ANSI C verbiedt array `%s' met lengte 0" + + #: c-decl.c:4570 + #, c-format + msgid "size of array `%s' is negative" + msgstr "grootte van array `%s' is negatief" + + #: c-decl.c:4583 + #, fuzzy, c-format + msgid "ISO C89 forbids array `%s' whose size can't be evaluated" + msgstr "ANSI C verbiedt array `%s', wiens grootte niet geëvalueerd kan worden" + + #: c-decl.c:4586 + #, fuzzy, c-format + msgid "ISO C89 forbids variable-size array `%s'" + msgstr "ANSI C verbiedt array `%s' van variabele lengte" + + #: c-decl.c:4616 c-decl.c:4837 cp/decl.c:11074 + #, c-format + msgid "size of array `%s' is too large" + msgstr "omvang van array `%s' is te groot" + + #: c-decl.c:4633 + #, fuzzy + msgid "ISO C89 does not support flexible array members" + msgstr "ANSI C ondersteun geen formaatbreedte voor strftime" + + #: c-decl.c:4643 + msgid "array type has incomplete element type" + msgstr "arraytype heeft onvolledig elementtype" + + #: c-decl.c:4650 c-decl.c:4887 + #, fuzzy + msgid "ISO C forbids const or volatile function types" + msgstr "ANSI C verbiedt 'const' of 'volatile' functietypes" + + #: c-decl.c:4696 cp/decl.c:10613 + #, c-format + msgid "`%s' declared as function returning a function" + msgstr "`%s' gedeclareerd als een functie die een functie teruggeeft" + + #: c-decl.c:4701 cp/decl.c:10618 + #, c-format + msgid "`%s' declared as function returning an array" + msgstr "`%s' gedeclareerd als een functie die een array teruggeeft" + + #: c-decl.c:4736 + #, fuzzy + msgid "ISO C forbids qualified void function return type" + msgstr "ANSI C verbiedt een gekwalificeerde void als teruggeefwaarde voor een functie" + + #: c-decl.c:4740 + #, fuzzy + msgid "type qualifiers ignored on function return type" + msgstr "ANSI C verbiedt een gekwalificeerde void als teruggeefwaarde voor een functie" + + #: c-decl.c:4769 c-decl.c:4852 c-decl.c:4976 c-decl.c:5070 + #, fuzzy + msgid "ISO C forbids qualified function types" + msgstr "ANSI C verbiedt een gekwalificeerd functietype" + + #: c-decl.c:4809 cp/decl.c:10849 + msgid "invalid type modifier within pointer declarator" + msgstr "ongeldige type-modifier binnen pointer-declarator" + + #: c-decl.c:4907 cp/decl.c:11357 + #, c-format + msgid "variable or field `%s' declared void" + msgstr "variabele of veld `%s' als void gedeclareerd" + + #: c-decl.c:4940 + msgid "attributes in parameter array declarator ignored" + msgstr "attributen genegeerd in declarator van parameter-array" + + #: c-decl.c:4965 + #, fuzzy + msgid "invalid type modifier within array declarator" + msgstr "ongeldige type-modifier binnen pointer-declarator" + + #: c-decl.c:5014 + #, c-format + msgid "field `%s' declared as a function" + msgstr "veld `%s' als een functie gedeclareerd" + + #: c-decl.c:5020 + #, c-format + msgid "field `%s' has incomplete type" + msgstr "veld `%s' heeft een onvolledig type" + + #: c-decl.c:5052 c-decl.c:5054 c-decl.c:5061 + #, c-format + msgid "invalid storage class for function `%s'" + msgstr "ongeldige opslagklasse voor functie `%s'" + + #: c-decl.c:5076 + msgid "`noreturn' function returns non-void value" + msgstr "`noreturn' functie geeft niet-void waarde terug" + + #: c-decl.c:5088 + msgid "cannot inline function `main'" + msgstr "kan functie `main' niet inline maken" + + #: c-decl.c:5141 + #, c-format + msgid "variable `%s' declared `inline'" + msgstr "variabele `%s' als inline gedeclareerd" + + #: c-decl.c:5214 c-decl.c:6250 + msgid "function declaration isn't a prototype" + msgstr "functie-declaratie is geen prototype" + + #: c-decl.c:5220 + msgid "parameter names (without types) in function declaration" + msgstr "parameternamen (zonder types) in functiedeclaratie" + + #: c-decl.c:5252 c-decl.c:6641 + #, c-format + msgid "parameter `%s' has incomplete type" + msgstr "parameter `%s' heeft een onvolledig type" + + #: c-decl.c:5255 + msgid "parameter has incomplete type" + msgstr "parameter heeft een onvolledig type" + + #: c-decl.c:5276 + #, c-format + msgid "parameter `%s' points to incomplete type" + msgstr "parameter `%s' wijst naar een onvolledig type" + + #: c-decl.c:5279 + msgid "parameter points to incomplete type" + msgstr "parameter wijst naar een onvolledig type" + + #: c-decl.c:5344 + #, c-format + msgid "parameter `%s' has just a forward declaration" + msgstr "parameter `%s' heeft enkel een voorwaartse declaratie" + + #: c-decl.c:5385 + msgid "`void' in parameter list must be the entire list" + msgstr "`void' in parameterlijst moet de gehele parameterlijst zijn" + + #: c-decl.c:5416 + #, fuzzy, c-format + msgid "`struct %s' declared inside parameter list" + msgstr "`%s %s' binnen parameterlijst gedeclareerd" + + #: c-decl.c:5419 + #, fuzzy, c-format + msgid "`union %s' declared inside parameter list" + msgstr "`%s %s' binnen parameterlijst gedeclareerd" + + #: c-decl.c:5422 + #, fuzzy, c-format + msgid "`enum %s' declared inside parameter list" + msgstr "`%s %s' binnen parameterlijst gedeclareerd" + + #: c-decl.c:5429 + #, fuzzy + msgid "anonymous struct declared inside parameter list" + msgstr "anonieme %s gedeclareerd binnen parameterlijst" + + #: c-decl.c:5431 + #, fuzzy + msgid "anonymous union declared inside parameter list" + msgstr "anonieme %s gedeclareerd binnen parameterlijst" + + #: c-decl.c:5433 + #, fuzzy + msgid "anonymous enum declared inside parameter list" + msgstr "anonieme %s gedeclareerd binnen parameterlijst" + + #: c-decl.c:5437 + #, fuzzy + msgid "its scope is only this definition or declaration, which is probably not what you want" + msgstr "het bereik ervan is enkel deze definitie of declaratie, wat waarschijnlijk niet de bedoeling is" + + #: c-decl.c:5516 + #, c-format + msgid "redefinition of `union %s'" + msgstr "herdefinitie van `union %s'" + + #: c-decl.c:5519 + #, c-format + msgid "redefinition of `struct %s'" + msgstr "herdefinitie van `struct %s'" + + #: c-decl.c:5558 + msgid "unnamed fields of type other than struct or union are not allowed" + msgstr "onbenoemde velden van een type anders dan struct of union zijn niet toegestaan" + + #: c-decl.c:5599 c-decl.c:5602 + #, fuzzy, c-format + msgid "%s defined inside parms" + msgstr "enum gedinieerd binnen parameters" + + #: c-decl.c:5600 c-decl.c:5603 c-decl.c:5614 + msgid "union" + msgstr "union" + + # Of beter onvertaald laten? + #: c-decl.c:5600 c-decl.c:5603 + msgid "structure" + msgstr "structuur" + + #: c-decl.c:5613 + #, fuzzy, c-format + msgid "%s has no %s" + msgstr "%s heeft geen leden" + + #: c-decl.c:5614 + msgid "struct" + msgstr "struct" + + #: c-decl.c:5615 + #, fuzzy + msgid "named members" + msgstr "%s heeft geen benoemde leden" + + #: c-decl.c:5615 + msgid "members" + msgstr "leden" + + #: c-decl.c:5654 + #, c-format + msgid "nested redefinition of `%s'" + msgstr "geneste herdefinitie van `%s'" + + #: c-decl.c:5667 + #, c-format + msgid "bit-field `%s' width not an integer constant" + msgstr "breedte van bitveld `%s' is geen integerconstante" + + #: c-decl.c:5678 + #, c-format + msgid "bit-field `%s' has invalid type" + msgstr "bitveld `%s' heeft een ongeldig type" + + #: c-decl.c:5690 + #, fuzzy, c-format + msgid "bit-field `%s' type invalid in ISO C" + msgstr "type van bitveld `%s' is ongeldig in ANSI C" + + #: c-decl.c:5702 + #, c-format + msgid "negative width in bit-field `%s'" + msgstr "bitveld `%s' heeft een negatieve breedte" + + #: c-decl.c:5704 + #, c-format + msgid "width of `%s' exceeds its type" + msgstr "breedte van `%s' overschrijdt zijn type" + + #: c-decl.c:5706 + #, c-format + msgid "zero width for bit-field `%s'" + msgstr "bitveld `%s' heeft breedte 0" + + #: c-decl.c:5720 + #, c-format + msgid "`%s' is narrower than values of its type" + msgstr "`%s' is smaller dan waarden van zijn type" + + #: c-decl.c:5765 + msgid "flexible array member in union" + msgstr "flexibele array als lid van union" + + #: c-decl.c:5767 + msgid "flexible array member not at end of struct" + msgstr "flexibele array niet laatste lid van struct" + + #: c-decl.c:5769 + msgid "flexible array member in otherwise empty struct" + msgstr "" + + #: c-decl.c:5794 ch/typeck.c:3060 + #, c-format + msgid "duplicate member `%s'" + msgstr "herhaald lid `%s'" + + #: c-decl.c:5838 + msgid "union cannot be made transparent" + msgstr "union kan niet transparant gemaakt worden" + + #. This enum is a named one that has been declared already. + #: c-decl.c:5932 + #, c-format + msgid "redeclaration of `enum %s'" + msgstr "herdeclaratie van `enum %s'" + + #: c-decl.c:5966 + msgid "enum defined inside parms" + msgstr "enum gedinieerd binnen parameters" + + #: c-decl.c:5999 + msgid "enumeration values exceed range of largest integer" + msgstr "enumeratiewaarden overschrijden het bereik van de grootste integer" + + #: c-decl.c:6108 ch/decl.c:4437 + #, c-format + msgid "enumerator value for `%s' not integer constant" + msgstr "enumeratiewaarde voor `%s' is geen integrale constante" + + #: c-decl.c:6121 ch/decl.c:4449 + msgid "overflow in enumeration values" + msgstr "overflow in enumeratiewaarden" + + #: c-decl.c:6126 + #, fuzzy + msgid "ISO C restricts enumerator values to range of `int'" + msgstr "ANSI C beperkt enumeratiewaarden tot het bereik van het `int' type" + + #: c-decl.c:6204 + #, fuzzy + msgid "return type is an incomplete type" + msgstr "type van teruggeefwaarde is onvolledig" + + #: c-decl.c:6212 + #, fuzzy + msgid "return type defaults to `int'" + msgstr "teruggeefwaarde krijgt standaardtype `int'" + + #: c-decl.c:6259 + #, c-format + msgid "no previous prototype for `%s'" + msgstr "geen eerder prototype voor `%s'" + + #: c-decl.c:6266 + #, c-format + msgid "`%s' was used with no prototype before its definition" + msgstr "`%s' werd voor haar definitie gebruikt zonder protoype" + + #: c-decl.c:6272 + #, c-format + msgid "no previous declaration for `%s'" + msgstr "geen eerdere declaratie voor `%s'" + + #: c-decl.c:6279 + #, c-format + msgid "`%s' was used with no declaration before its definition" + msgstr "`%s' werd voor haar definitie gebruikt zonder declaratie" + + #: c-decl.c:6303 c-decl.c:6884 + #, c-format + msgid "return type of `%s' is not `int'" + msgstr "het type van de teruggeefwaarde van `%s' is niet `int'" + + #: c-decl.c:6319 + #, c-format + msgid "first argument of `%s' should be `int'" + msgstr "eerste argument van `%s' zou een `int' moeten zijn" + + #: c-decl.c:6328 + #, c-format + msgid "second argument of `%s' should be `char **'" + msgstr "tweede argument van `%s' zou een `char **' moeten zijn" + + #: c-decl.c:6337 + #, c-format + msgid "third argument of `%s' should probably be `char **'" + msgstr "derde argument van `%s' zou waarschijnlijk een `char **' moeten zijn" + + #: c-decl.c:6346 + #, c-format + msgid "`%s' takes only zero or two arguments" + msgstr "`%s' neemt ofwel geen, ofwel twee argumenten" + + #: c-decl.c:6349 + #, c-format + msgid "`%s' is normally a non-static function" + msgstr "`%s' is gewoonlijk een niet-static funtie" + + #: c-decl.c:6459 + msgid "parm types given both in parmlist and separately" + msgstr "parametertypes zowel in parameterlijst als apart opgegeven" + + #: c-decl.c:6480 + msgid "parameter name omitted" + msgstr "parameternaam weggelaten" + + #: c-decl.c:6484 c-decl.c:6586 + #, c-format + msgid "parameter `%s' declared void" + msgstr "parameter `%s' als void gedeclareerd" + + #: c-decl.c:6560 + msgid "parameter name missing from parameter list" + msgstr "parameternaam ontbreekt uit parameterlijst" + + #: c-decl.c:6579 + #, c-format + msgid "multiple parameters named `%s'" + msgstr "meerdere parameters hebben de naam `%s'" + + #: c-decl.c:6610 c-decl.c:6612 + #, c-format + msgid "type of `%s' defaults to `int'" + msgstr "`%s' krijgt standaardtype `int'" + + #: c-decl.c:6648 + #, c-format + msgid "declaration for parameter `%s' but no such parameter" + msgstr "declaratie voor parameter `%s' maar er is zo geen parameter" + + #: c-decl.c:6696 + msgid "number of arguments doesn't match prototype" + msgstr "aantal argumenten kom niet overeen met prototype" + + #: c-decl.c:6726 + #, c-format + msgid "promoted argument `%s' doesn't match prototype" + msgstr "gepromoveerd argument `%s' komt niet overeen met prototype" + + #: c-decl.c:6740 + #, c-format + msgid "argument `%s' doesn't match prototype" + msgstr "argument `%s' komt niet overeen met prototype" + + #: c-decl.c:7054 + msgid "this function may return with or without a value" + msgstr "deze functie kan met of zonder waarde tergukeren" + + #: c-decl.c:7074 + #, c-format + msgid "size of return value of `%s' is %u bytes" + msgstr "grootte van teruggeefwaarde van `%s' is %u bytes" + + #: c-decl.c:7078 + #, fuzzy, c-format + msgid "size of return value of `%s' is larger than %d bytes" + msgstr "grootte van teruggeefwaarde van `%s' is %u bytes" + + #. If we get here, declarations have been used in a for loop without + #. the C99 for loop scope. This doesn't make much sense, so don't + #. allow it. + #: c-decl.c:7133 + msgid "`for' loop initial declaration used outside C99 mode" + msgstr "" + + #: c-decl.c:7157 + #, fuzzy, c-format + msgid "`struct %s' declared in `for' loop initial declaration" + msgstr "`%s' als 'inline' gedeclareerd na de definitie" + + #: c-decl.c:7160 + #, fuzzy, c-format + msgid "`union %s' declared in `for' loop initial declaration" + msgstr "`%s' als 'inline' gedeclareerd na de definitie" + + #: c-decl.c:7163 + #, fuzzy, c-format + msgid "`enum %s' declared in `for' loop initial declaration" + msgstr "`%s' als 'inline' gedeclareerd na de definitie" + + #: c-decl.c:7171 + #, fuzzy, c-format + msgid "declaration of non-variable `%s' in `for' loop initial declaration" + msgstr "de declaratie van `%s' verbergt een globale declaratie" + + #: c-decl.c:7173 + #, fuzzy, c-format + msgid "declaration of static variable `%s' in `for' loop initial declaration" + msgstr "de declaratie van `%s' verbergt een globale declaratie" + + #: c-decl.c:7175 + #, fuzzy, c-format + msgid "declaration of `extern' variable `%s' in `for' loop initial declaration" + msgstr "de declaratie van `%s' verbergt een globale declaratie" + + #: c-format.c:128 c-format.c:210 + msgid "format string arg not a string type" + msgstr "de formaatstring is geen string-type" + + #: c-format.c:143 + #, fuzzy + msgid "args to be formatted is not '...'" + msgstr "de te formatteren argumenten zijn niet ..." + + #: c-format.c:152 + msgid "strftime formats cannot format arguments" + msgstr "" + + #: c-format.c:187 c-format.c:289 + #, fuzzy + msgid "format string has invalid operand number" + msgstr "de formaatstring heeft een niet-constant operand-nummer" + + #: c-format.c:221 + msgid "function does not return string type" + msgstr "functie geeft geen string-type terug" + + #: c-format.c:252 + msgid "unrecognized format specifier" + msgstr "onbekende formaatspecificatie" + + #: c-format.c:265 + #, c-format + msgid "`%s' is an unrecognized format function type" + msgstr "`%s' is een onbekend type formaatfunctie" + + #: c-format.c:299 + msgid "format string arg follows the args to be formatted" + msgstr "de formaatstring volgt de te formatteren argumenten" + + #: c-format.c:620 + msgid "` ' flag" + msgstr "" + + #: c-format.c:620 + msgid "the ` ' printf flag" + msgstr "" + + #: c-format.c:621 c-format.c:692 + msgid "`+' flag" + msgstr "" + + #: c-format.c:621 + msgid "the `+' printf flag" + msgstr "" + + #: c-format.c:622 c-format.c:668 + msgid "`#' flag" + msgstr "" + + #: c-format.c:622 + msgid "the `#' printf flag" + msgstr "" + + #: c-format.c:623 c-format.c:666 + msgid "`0' flag" + msgstr "" + + #: c-format.c:623 + msgid "the `0' printf flag" + msgstr "" + + #: c-format.c:624 c-format.c:665 c-format.c:695 + msgid "`-' flag" + msgstr "" + + #: c-format.c:624 + msgid "the `-' printf flag" + msgstr "" + + #: c-format.c:625 c-format.c:649 + msgid "`'' flag" + msgstr "" + + #: c-format.c:625 + msgid "the `'' printf flag" + msgstr "" + + #: c-format.c:626 c-format.c:650 + msgid "`I' flag" + msgstr "" + + #: c-format.c:626 + msgid "the `I' printf flag" + msgstr "" + + #: c-format.c:627 c-format.c:647 c-format.c:669 c-format.c:696 c-format.c:1791 + msgid "field width" + msgstr "" + + #: c-format.c:627 + #, fuzzy + msgid "field width in printf format" + msgstr "veldbreedte is niet van het type 'int' (argument %d)" + + #: c-format.c:628 + msgid "precision" + msgstr "" + + #: c-format.c:628 + #, fuzzy + msgid "precision in printf format" + msgstr "precisie gebruikt bij `%c' formaat" + + #: c-format.c:629 c-format.c:648 c-format.c:699 + msgid "length modifier" + msgstr "" + + #: c-format.c:629 + #, fuzzy + msgid "length modifier in printf format" + msgstr "meerdere E/O opties in formaat" + + #: c-format.c:645 + #, fuzzy + msgid "assignment suppression" + msgstr "ontbrekende index-expressie" + + #: c-format.c:645 + msgid "the assignment suppression scanf feature" + msgstr "" + + #: c-format.c:646 + msgid "`a' flag" + msgstr "" + + #: c-format.c:646 + msgid "the `a' scanf flag" + msgstr "" + + #: c-format.c:647 + #, fuzzy + msgid "field width in scanf format" + msgstr "breedte gebruikt bij `%c' formaat" + + #: c-format.c:648 + #, fuzzy + msgid "length modifier in scanf format" + msgstr "meerdere E/O opties in formaat" + + #: c-format.c:649 + msgid "the `'' scanf flag" + msgstr "" + + #: c-format.c:650 + msgid "the `I' scanf flag" + msgstr "" + + #: c-format.c:664 + msgid "`_' flag" + msgstr "" + + #: c-format.c:664 + msgid "the `_' strftime flag" + msgstr "" + + #: c-format.c:665 + msgid "the `-' strftime flag" + msgstr "" + + #: c-format.c:666 + msgid "the `0' strftime flag" + msgstr "" + + #: c-format.c:667 c-format.c:691 + msgid "`^' flag" + msgstr "" + + #: c-format.c:667 + msgid "the `^' strftime flag" + msgstr "" + + #: c-format.c:668 + msgid "the `#' strftime flag" + msgstr "" + + #: c-format.c:669 + msgid "field width in strftime format" + msgstr "" + + # Wat is een correcte vertaling voor 'identifier'? Ik kies voor 'naam'. + #: c-format.c:670 + #, fuzzy + msgid "`E' modifier" + msgstr "`$' in naam" + + #: c-format.c:670 + msgid "the `E' strftime modifier" + msgstr "" + + # Wat is een correcte vertaling voor 'identifier'? Ik kies voor 'naam'. + #: c-format.c:671 + #, fuzzy + msgid "`O' modifier" + msgstr "`$' in naam" + + #: c-format.c:671 + msgid "the `O' strftime modifier" + msgstr "" + + #: c-format.c:672 + msgid "the `O' modifier" + msgstr "" + + #: c-format.c:690 + #, fuzzy + msgid "fill character" + msgstr "%s bij nulkarakter" + + #: c-format.c:690 + #, fuzzy + msgid "fill character in strfmon format" + msgstr "ongeldig karakter in naam van macro-parameter" + + #: c-format.c:691 + msgid "the `^' strfmon flag" + msgstr "" + + #: c-format.c:692 + msgid "the `+' strfmon flag" + msgstr "" + + #: c-format.c:693 + msgid "`(' flag" + msgstr "" + + #: c-format.c:693 + msgid "the `(' strfmon flag" + msgstr "" + + #: c-format.c:694 + msgid "`!' flag" + msgstr "" + + #: c-format.c:694 + msgid "the `!' strfmon flag" + msgstr "" + + #: c-format.c:695 + msgid "the `-' strfmon flag" + msgstr "" + + #: c-format.c:696 + msgid "field width in strfmon format" + msgstr "" + + #: c-format.c:697 + msgid "left precision" + msgstr "" + + #: c-format.c:697 + #, fuzzy + msgid "left precision in strfmon format" + msgstr "precisie gebruikt bij `%c' formaat" + + #: c-format.c:698 + msgid "right precision" + msgstr "" + + #: c-format.c:698 + msgid "right precision in strfmon format" + msgstr "" + + #: c-format.c:699 + #, fuzzy + msgid "length modifier in strfmon format" + msgstr "meerdere E/O opties in formaat" + + #: c-format.c:998 + #, fuzzy, c-format + msgid "function might be possible candidate for `%s' format attribute" + msgstr "deze functie is een mogelijke kandidaat voor het `noreturn' attribuut" + + #: c-format.c:1122 c-format.c:1143 c-format.c:2201 + #, fuzzy + msgid "missing $ operand number in format" + msgstr "operand buiten bereik in formaat" + + #: c-format.c:1153 + #, fuzzy, c-format + msgid "%s does not support %%n$ operand number formats" + msgstr "ANSI C ondersteunt het `%c' formaat niet" + + #: c-format.c:1160 + msgid "operand number out of range in format" + msgstr "operand buiten bereik in formaat" + + #: c-format.c:1183 + #, fuzzy, c-format + msgid "format argument %d used more than once in %s format" + msgstr "formaat-argument is geen pointer (argument %d)" + + #: c-format.c:1233 + #, c-format + msgid "format argument %d unused before used argument %d in $-style format" + msgstr "" + + #: c-format.c:1330 + #, fuzzy + msgid "format not a string literal, format string not checked" + msgstr "de formaatstring is geen string-type" + + #: c-format.c:1344 + msgid "format not a string literal and no format arguments" + msgstr "" + + #: c-format.c:1346 + msgid "format not a string literal, argument types not checked" + msgstr "" + + #: c-format.c:1359 + msgid "too many arguments for format" + msgstr "teveel argumenten voor formaat" + + #: c-format.c:1362 + #, fuzzy + msgid "unused arguments in $-style format" + msgstr "te weinig argumenten voor formaat" + + #: c-format.c:1365 + msgid "zero-length format string" + msgstr "formaatstring van lengte 0" + + #: c-format.c:1368 + #, fuzzy + msgid "format is a wide character string" + msgstr "karakterconstante in slecht formaat" + + #: c-format.c:1371 + msgid "unterminated format string" + msgstr "formaatstring niet beëindigd" + + #. FIXME: this warning should go away once Marc Espie's + #. __attribute__((nonnull)) patch is in. Instead, checking for + #. nonnull attributes should probably change this function to act + #. specially if info == NULL and add a res->number_null entry for + #. that case, or maybe add a function pointer to be called at + #. the end instead of hardcoding check_format_info_main. + #: c-format.c:1478 + msgid "null format string" + msgstr "formaatstring is NULL" + + #: c-format.c:1670 + msgid "embedded `\\0' in format" + msgstr "ingesloten `\\0' in formaat" + + #: c-format.c:1685 + #, c-format + msgid "spurious trailing `%%' in format" + msgstr "overbodige `%%' achteraan formaat" + + #: c-format.c:1724 c-format.c:1961 + #, fuzzy, c-format + msgid "repeated %s in format" + msgstr "herhaalde `%c' optie in formaat" + + #: c-format.c:1737 + #, fuzzy + msgid "missing fill character at end of strfmon format" + msgstr "conversie mist type aan het einde van het formaat" + + #: c-format.c:1757 c-format.c:1875 c-format.c:2155 c-format.c:2208 + msgid "too few arguments for format" + msgstr "te weinig argumenten voor formaat" + + #: c-format.c:1817 + #, fuzzy, c-format + msgid "zero width in %s format" + msgstr "breedte gebruikt bij `%c' formaat" + + #: c-format.c:1836 + #, fuzzy, c-format + msgid "empty left precision in %s format" + msgstr "precisie gebruikt bij `%c' formaat" + + #: c-format.c:1890 + msgid "field precision" + msgstr "" + + #: c-format.c:1905 + #, fuzzy, c-format + msgid "empty precision in %s format" + msgstr "precisie gebruikt bij `%c' formaat" + + #: c-format.c:1945 + #, fuzzy, c-format + msgid "%s does not support the `%s' %s length modifier" + msgstr "ANSI C ondersteunt de `%c' lengte-optie niet" + + #: c-format.c:1995 + msgid "conversion lacks type at end of format" + msgstr "conversie mist type aan het einde van het formaat" + + #: c-format.c:2006 + #, c-format + msgid "unknown conversion type character `%c' in format" + msgstr "onbekend typeconversie-karakter `%c' in formaat" + + #: c-format.c:2009 + #, c-format + msgid "unknown conversion type character 0x%x in format" + msgstr "onbekend typeconversie-karakter 0x%x in formaat" + + #: c-format.c:2016 + #, fuzzy, c-format + msgid "%s does not support the `%%%c' %s format" + msgstr "ANSI C ondersteunt het `%c' formaat niet" + + #: c-format.c:2032 + #, fuzzy, c-format + msgid "%s used with `%%%c' %s format" + msgstr "breedte gebruikt bij `%c' formaat" + + #: c-format.c:2041 + #, fuzzy, c-format + msgid "%s does not support %s" + msgstr "-mcpu=%s ondersteunt -march=%s niet" + + #: c-format.c:2050 + #, fuzzy, c-format + msgid "%s does not support %s with the `%%%c' %s format" + msgstr "ANSI C ondersteunt het `%c' formaat niet" + + #: c-format.c:2083 + #, fuzzy, c-format + msgid "%s ignored with %s and `%%%c' %s format" + msgstr "`0' optie wordt genegeerd bij precisiespecificatie en `%c' formaat" + + #: c-format.c:2087 + #, fuzzy, c-format + msgid "%s ignored with %s in %s format" + msgstr "`0' optie wordt genegeerd bij precisiespecificatie en `%c' formaat" + + #: c-format.c:2093 + #, fuzzy, c-format + msgid "use of %s and %s together with `%%%c' %s format" + msgstr "zowel de `*' optie alse de `%c' optie in formaat gebruikt" + + #: c-format.c:2097 + #, fuzzy, c-format + msgid "use of %s and %s together in %s format" + msgstr "zowel de `*' optie alse de `%c' optie in formaat gebruikt" + + #: c-format.c:2116 + #, c-format + msgid "`%%%c' yields only last 2 digits of year in some locales" + msgstr "`%%%c' geeft enkel de laatste twee cijfers van het jaartal in sommige omgevingen" + + #: c-format.c:2119 + #, c-format + msgid "`%%%c' yields only last 2 digits of year" + msgstr "`%%%c' geeft enkel de laatste twee cijfers van het jaartal" + + #. The end of the format string was reached. + #: c-format.c:2135 + #, c-format + msgid "no closing `]' for `%%[' format" + msgstr "geen eind-`]' voor `%%[' formaat" + + #: c-format.c:2148 + #, fuzzy, c-format + msgid "use of `%s' length modifier with `%c' type character" + msgstr "lengtekarakter `%c' samen met typekarakter `%c' gebruikt" + + #: c-format.c:2169 + #, fuzzy, c-format + msgid "%s does not support the `%%%s%c' %s format" + msgstr "ANSI C ondersteunt het `%c' formaat niet" + + #: c-format.c:2184 + msgid "operand number specified with suppressed assignment" + msgstr "" + + #: c-format.c:2186 + #, fuzzy + msgid "operand number specified for format taking no argument" + msgstr "operand buiten bereik in formaat" + + #: c-format.c:2305 + #, fuzzy, c-format + msgid "writing through null pointer (arg %d)" + msgstr "constant object wordt beschreven (argument %d)" + + #: c-format.c:2314 + #, fuzzy, c-format + msgid "reading through null pointer (arg %d)" + msgstr "formaat-argument is geen pointer (argument %d)" + + #: c-format.c:2334 + #, c-format + msgid "writing into constant object (arg %d)" + msgstr "constant object wordt beschreven (argument %d)" + + #: c-format.c:2344 + #, c-format + msgid "extra type qualifiers in format argument (arg %d)" + msgstr "" + + #: c-format.c:2351 + #, c-format + msgid "format argument is not a pointer (arg %d)" + msgstr "formaat-argument is geen pointer (argument %d)" + + #: c-format.c:2353 + #, c-format + msgid "format argument is not a pointer to a pointer (arg %d)" + msgstr "formaat-argument is geen pointer naar een pointer (argument %d)" + + #: c-format.c:2424 + msgid "pointer" + msgstr "" + + #: c-format.c:2426 + #, fuzzy + msgid "different type" + msgstr "Ongeldige modus voor gen_tst_reg" + + #: c-format.c:2447 + #, fuzzy, c-format + msgid "%s is not type %s (arg %d)" + msgstr "veldbreedte is niet van het type 'int' (argument %d)" + + #: c-format.c:2450 + #, c-format + msgid "%s format, %s arg (arg %d)" + msgstr "%s formaat, %s argument (argument %d)" + + #: c-lex.c:292 + msgid "badly nested C headers from preprocessor" + msgstr "" + + #: c-lex.c:342 + #, fuzzy, c-format + msgid "ignoring #pragma %s %s" + msgstr "pragma wordt genegeerd: %s" + + #: c-lex.c:344 + #, fuzzy, c-format + msgid "ignoring #pragma %s" + msgstr "pragma wordt genegeerd: %s" + + #: c-lex.c:394 + #, c-format + msgid "universal-character-name '\\U%08x' not valid in identifier" + msgstr "" + + #: c-lex.c:640 + #, c-format + msgid "universal-character-name '\\u%04x' not valid in identifier" + msgstr "" + + # Moet 'floating(-point)' ook vertaald worden? + #: c-lex.c:730 + #, fuzzy + msgid "both 'f' and 'l' suffixes on floating constant" + msgstr "zowel `f' als `l' in floating-point constante" + + #: c-lex.c:757 + #, fuzzy, c-format + msgid "floating point number exceeds range of '%s'" + msgstr "floating-point getal overschrijdt het bereik van een `float'" + + #: c-lex.c:787 + #, fuzzy, c-format + msgid "stray '%c' in program" + msgstr "misplaatste '\\' in programma" + + #: c-lex.c:789 + #, fuzzy, c-format + msgid "stray '\\%o' in program" + msgstr "misplaatste '\\' in programma" + + #: c-lex.c:887 + #, fuzzy + msgid "too many decimal points in floating constant" + msgstr "teveel `l'en in integerconstante" + + #: c-lex.c:889 + msgid "decimal point in exponent - impossible!" + msgstr "" + + #. Possible future extension: silently ignore _ in numbers, + #. permitting cosmetic grouping - e.g. 0x8000_0000 == 0x80000000 + #. but somewhat easier to read. Ada has this? + #: c-lex.c:900 + msgid "underscore in number" + msgstr "" + + #: c-lex.c:962 + msgid "numeric constant with no digits" + msgstr "numerieke constante zonder cijfers" + + #: c-lex.c:965 + msgid "numeric constant contains digits beyond the radix" + msgstr "numerieke constante bevat cijfers buiten de basis" + + # Ik denk dat 'radix' -> 'basis' correct is. + # Mag 'radix' ook 'radix' blijven? + #: c-lex.c:976 + msgid "floating constant may not be in radix 16" + msgstr "floating-point constante mag niet in basis 16 staan" + + #: c-lex.c:979 + msgid "hexadecimal floating constant has no exponent" + msgstr "hexadecimale floating-point constante heeft geen exponent" + + #: c-lex.c:991 + msgid "floating constant exponent has no digits" + msgstr "exponent van floating-point constante heeft geen cijfers" + + #: c-lex.c:1011 + #, fuzzy + msgid "more than one 'f' suffix on floating constant" + msgstr "meer dan één `f' in numerieke constante" + + #: c-lex.c:1014 + msgid "traditional C rejects the 'f' suffix" + msgstr "" + + #: c-lex.c:1021 + #, fuzzy + msgid "more than one 'l' suffix on floating constant" + msgstr "meer dan één `l' in numerieke constante" + + #: c-lex.c:1024 + msgid "traditional C rejects the 'l' suffix" + msgstr "" + + #: c-lex.c:1032 + #, fuzzy + msgid "more than one 'i' or 'j' suffix on floating constant" + msgstr "meer dan één `i' of `j' in numerieke constante" + + #: c-lex.c:1034 c-lex.c:1128 + #, fuzzy + msgid "ISO C forbids imaginary numeric constants" + msgstr "ANSI C verbiedt imaginaire numerieke constantes" + + #: c-lex.c:1039 + #, fuzzy + msgid "invalid suffix on floating constant" + msgstr "misvormde floating-point constante" + + #. We got an exception from parse_float() + #: c-lex.c:1056 + msgid "floating constant out of range" + msgstr "floating-point constante buiten bereik" + + #: c-lex.c:1068 + #, fuzzy + msgid "floating point number exceeds range of 'double'" + msgstr "floating-point getal overschrijdt het bereik van een `double'" + + #: c-lex.c:1097 + #, fuzzy + msgid "two 'u' suffixes on integer constant" + msgstr "twee `u's in integerconstante" + + #: c-lex.c:1100 + msgid "traditional C rejects the 'u' suffix" + msgstr "" + + # `l'en of `l's? + #: c-lex.c:1111 + #, fuzzy + msgid "three 'l' suffixes on integer constant" + msgstr "drie `l'en in integerconstante" + + #: c-lex.c:1113 + msgid "'lul' is not a valid integer suffix" + msgstr "" + + #: c-lex.c:1115 + msgid "'Ll' and 'lL' are not valid integer suffixes" + msgstr "" + + #: c-lex.c:1118 + #, fuzzy + msgid "ISO C89 forbids long long integer constants" + msgstr "ANSI C verbiedt long long integerconstantes" + + #: c-lex.c:1126 + #, fuzzy + msgid "more than one 'i' or 'j' suffix on integer constant" + msgstr "meer dan één `i' of `j' in numerieke constante" + + #: c-lex.c:1133 + #, fuzzy + msgid "invalid suffix on integer constant" + msgstr "twee `u's in integerconstante" + + #: c-lex.c:1141 + #, c-format + msgid "integer constant is too large for this configuration of the compiler - truncated to %d bits" + msgstr "" + + # 'width' -> 'wijdte' of 'breedte'? + # Best 'breedte'; zo wordt 'too wide' 'te breed'. + #: c-lex.c:1231 + msgid "width of integer constant changes with -traditional" + msgstr "breedte van integerconstante verandert met -traditional" + + #: c-lex.c:1233 + #, fuzzy + msgid "integer constant is unsigned in ISO C, signed with -traditional" + msgstr "integerconstante is unsigned in ANSI C, signed met -traditional" + + #: c-lex.c:1235 + msgid "width of integer constant may change on other systems with -traditional" + msgstr "breedte van integerconstante kan veranderen op andere systemen met -traditional" + + #: c-lex.c:1245 + #, fuzzy, c-format + msgid "integer constant larger than the maximum value of %s" + msgstr "integerconstante is zo groot dat hij unsigned is" + + #: c-lex.c:1248 + msgid "an unsigned long long int" + msgstr "" + + #: c-lex.c:1249 + msgid "a long long int" + msgstr "" + + #: c-lex.c:1250 + msgid "an unsigned long int" + msgstr "" + + #: c-lex.c:1254 + msgid "decimal constant is so large that it is unsigned" + msgstr "decimale constante is zo groot dat hij unsigned is" + + #: c-lex.c:1263 + #, fuzzy + msgid "complex integer constant is too wide for 'complex int'" + msgstr "complexe integerconstante is te breed voor `complex int'" + + #: c-lex.c:1283 + #, fuzzy + msgid "integer constant is larger than the maximum value for its type" + msgstr "integerconstante is zo groot dat hij unsigned is" + + #: c-lex.c:1287 + #, fuzzy, c-format + msgid "missing white space after number '%.*s'" + msgstr "ontbrekende witruimte na getal `%.*s'" + + #: c-lex.c:1323 cpplex.c:1866 + #, fuzzy + msgid "ignoring invalid multibyte character" + msgstr "Ongeldig multibyte-karakter wordt genegeerd" + + #. Like YYERROR but do call yyerror. + #: c-parse.y:56 objc-parse.y:57 parse.y:51 + msgid "syntax error" + msgstr "" + + #: /usr/share/bison/bison.simple:107 /usr/share/bison/bison.simple:110 + #: /usr/share/bison/bison.simple:172 + msgid "syntax error: cannot back up" + msgstr "" + + # 'parser' en 'stack overflow' vertalen? + #: /usr/share/bison/bison.simple:358 /usr/share/bison/bison.simple:410 + #: /usr/share/bison/bison.simple:946 + msgid "parser stack overflow" + msgstr "stack overflow in parser" + + #: c-parse.y:288 objc-parse.y:310 + #, fuzzy + msgid "ISO C forbids an empty source file" + msgstr "ANSI C verbiedt een leeg bronbestand" + + #: c-parse.y:321 c-typeck.c:6909 ch/parse.c:2113 objc-parse.y:343 + msgid "argument of `asm' is not a constant string" + msgstr "het argument van `asm' is geen constante string" + + #: c-parse.y:329 objc-parse.y:351 + #, fuzzy + msgid "ISO C forbids data definition with no type or storage class" + msgstr "ANSI C verbiedt een datadefinitie zonder type of opslagklasse" + + #: c-parse.y:331 objc-parse.y:353 + msgid "data definition has no type or storage class" + msgstr "datadefinitie heeft geen type of opslagklasse" + + #: c-parse.y:344 objc-parse.y:366 + #, fuzzy + msgid "ISO C does not allow extra `;' outside of a function" + msgstr "ANSI C staat geen extra `;' buiten een functie toe" + + #: c-parse.y:404 cppexp.c:691 + msgid "traditional C rejects the unary plus operator" + msgstr "" + + #: c-parse.y:466 objc-parse.y:488 + msgid "`sizeof' applied to a bit-field" + msgstr "`sizeof' toegepast op een bitveld" + + #: c-parse.y:546 objc-parse.y:568 + #, fuzzy + msgid "ISO C forbids omitting the middle term of a ?: expression" + msgstr "ANSI C verbiedt het weglaten van de middelste term van een ?: expresie" + + #: c-parse.y:593 objc-parse.y:615 + #, fuzzy + msgid "ISO C89 forbids compound literals" + msgstr "ANSI C verbiedt het gebruik van samengestelde expressies als lvalues" + + #: c-parse.y:607 objc-parse.y:629 + #, fuzzy + msgid "ISO C forbids braced-groups within expressions" + msgstr "ANSI C verbiedt accolade-groepen in expressies" + + #: c-parse.y:638 objc-parse.y:660 + #, fuzzy + msgid "first argument to __builtin_choose_expr not a constant" + msgstr "gevraagd alignment is geen constante" + + #: c-parse.y:681 + msgid "traditional C rejects string concatenation" + msgstr "" + + #: c-parse.y:696 objc-parse.y:732 + #, fuzzy + msgid "ISO C does not permit use of `varargs.h'" + msgstr "ANSI C staat het gebruik van `varargs.h' niet toe" + + #: c-parse.y:957 c-parse.y:963 c-parse.y:969 c-parse.y:975 c-parse.y:996 + #: c-parse.y:1002 c-parse.y:1008 c-parse.y:1014 c-parse.y:1047 c-parse.y:1053 + #: c-parse.y:1059 c-parse.y:1065 c-parse.y:1110 c-parse.y:1116 c-parse.y:1122 + #: c-parse.y:1128 objc-parse.y:993 objc-parse.y:999 objc-parse.y:1005 + #: objc-parse.y:1011 objc-parse.y:1032 objc-parse.y:1038 objc-parse.y:1044 + #: objc-parse.y:1050 objc-parse.y:1083 objc-parse.y:1089 objc-parse.y:1095 + #: objc-parse.y:1101 objc-parse.y:1146 objc-parse.y:1152 objc-parse.y:1158 + #: objc-parse.y:1164 parse.y:1888 parse.y:1895 parse.y:1934 + #, c-format + msgid "`%s' is not at beginning of declaration" + msgstr "`%s' staat niet aan het begin van een declaratie" + + #: c-parse.y:1410 objc-parse.y:1455 + #, fuzzy + msgid "ISO C forbids empty initializer braces" + msgstr "ANSI C verbiedt lege initialisatie-accolades" + + #: c-parse.y:1424 objc-parse.y:1469 + #, fuzzy + msgid "ISO C89 forbids specifying subobject to initialize" + msgstr "ANSI C verbiedt het opgeven van het te initialiseren element" + + #: c-parse.y:1427 objc-parse.y:1472 + msgid "obsolete use of designated initializer without `='" + msgstr "" + + #: c-parse.y:1431 objc-parse.y:1476 + msgid "obsolete use of designated initializer with `:'" + msgstr "" + + #: c-parse.y:1460 + #, fuzzy + msgid "ISO C forbids specifying range of elements to initialize" + msgstr "ANSI C verbiedt het opgeven van het te initialiseren element" + + #: c-parse.y:1468 c-parse.y:1498 objc-parse.y:1507 objc-parse.y:1537 + #, fuzzy + msgid "ISO C forbids nested functions" + msgstr "ANSI C verbiedt geneste functies" + + #: c-parse.y:1672 objc-parse.y:1713 + #, fuzzy + msgid "ISO C forbids forward references to `enum' types" + msgstr "ANSI C verbiedt voorwaartse referenties naar `enum' types" + + #: c-parse.y:1684 objc-parse.y:1725 parse.y:2346 + msgid "comma at end of enumerator list" + msgstr "komma aan het einde van enumerator-lijst" + + #: c-parse.y:1692 objc-parse.y:1733 + msgid "no semicolon at end of struct or union" + msgstr "geen puntkomma aan het einde van een struct of union" + + #: c-parse.y:1701 objc-parse.y:1742 objc-parse.y:2809 + msgid "extra semicolon in struct or union specified" + msgstr "extra puntkomma opgegeven in struct of union" + + #: c-parse.y:1714 objc-parse.y:1769 + msgid "ISO C doesn't support unnamed structs/unions" + msgstr "" + + #: c-parse.y:1723 objc-parse.y:1778 + #, fuzzy + msgid "ISO C forbids member declarations with no members" + msgstr "ANSI C verbiedt lid-declaraties zonder leden" + + #: c-parse.y:1872 c-parse.y:1876 c-parse.y:1880 objc-parse.y:1927 + #: objc-parse.y:1931 objc-parse.y:1935 + #, fuzzy + msgid "storage class specifier in array declarator" + msgstr "opslagklasse opgegeven voor parameter `%s'" + + #: c-parse.y:1895 objc-parse.y:1950 + #, fuzzy + msgid "deprecated use of label at end of compound statement" + msgstr "ANSI C verbiedt een label aan het einde van een samengesteld statement" + + #: c-parse.y:1912 objc-parse.y:1967 + #, fuzzy + msgid "ISO C89 forbids mixed declarations and code" + msgstr "ANSI C verbiedt labeldeclaraties" + + #: c-parse.y:1986 objc-parse.y:2045 + #, fuzzy + msgid "ISO C forbids label declarations" + msgstr "ANSI C verbiedt labeldeclaraties" + + # 'braced-group'? Wie schrijft verdorie die foutmeldingen? + #: c-parse.y:2035 objc-parse.y:2094 parse.y:1588 + msgid "braced-group within expression allowed only inside a function" + msgstr "accolade-groep in expressie enkel toegestaan binnen een functie" + + #: c-parse.y:2160 objc-parse.y:2219 + msgid "empty body in an else-statement" + msgstr "leeg body in een else-statement" + + #: c-parse.y:2280 objc-parse.y:2339 + #, fuzzy + msgid "ISO C forbids `goto *expr;'" + msgstr "ANSI C verbiedt `goto *expr;'" + + # Of is 'verbiedt parameterdeclaraties op voorhand' beter? + #: c-parse.y:2378 objc-parse.y:2437 + #, fuzzy + msgid "ISO C forbids forward parameter declarations" + msgstr "ANSI C verbiedt voorwaartse declaraties van parameters" + + #. Gcc used to allow this as an extension. However, it does + #. not work for all targets, and thus has been disabled. + #. Also, since func (...) and func () are indistinguishable, + #. it caused problems with the code in expand_builtin which + #. tries to verify that BUILT_IN_NEXT_ARG is being used + #. correctly. + #: c-parse.y:2404 objc-parse.y:2463 + #, fuzzy + msgid "ISO C requires a named argument before `...'" + msgstr "ANSI C heeft een benoemd argument nodig vóór `...'" + + #: c-parse.y:2498 objc-parse.y:2557 + msgid "`...' in old-style identifier list" + msgstr "`...' in naamlijst in oude stijl" + + #: /usr/share/bison/bison.simple:639 /usr/share/bison/bison.simple:699 + msgid "parse error; also virtual memory exceeded" + msgstr "parse-fout; ook is het virtueel geheugen opgebruikt" + + #: /usr/share/bison/bison.simple:643 /usr/share/bison/bison.simple:703 + #: /usr/share/bison/bison.simple:821 cp/spew.c:349 + msgid "parse error" + msgstr "parse-fout" + + #: c-parse.y:2814 cp/spew.c:1477 objc-parse.y:3501 + #, c-format + msgid "%s at end of input" + msgstr "%s aan einde van invoer" + + #: c-parse.y:2820 cp/spew.c:1483 objc-parse.y:3507 + #, fuzzy, c-format + msgid "%s before %s'%c'" + msgstr "%s voor `%s'" + + #: c-parse.y:2822 cp/spew.c:1485 objc-parse.y:3509 + #, fuzzy, c-format + msgid "%s before %s'\\x%x'" + msgstr "%s voor `%s'" + + #: c-parse.y:2826 cp/spew.c:1489 objc-parse.y:3513 + #, c-format + msgid "%s before string constant" + msgstr "%s voor stringconstante" + + #: c-parse.y:2828 cp/spew.c:1491 objc-parse.y:3515 + #, fuzzy, c-format + msgid "%s before numeric constant" + msgstr "%s voor stringconstante" + + #: c-parse.y:2830 objc-parse.y:3517 + #, fuzzy, c-format + msgid "%s before \"%s\"" + msgstr "%s voor `%s'" + + #: c-parse.y:2832 objc-parse.y:3519 + #, fuzzy, c-format + msgid "%s before '%s' token" + msgstr "%s voor `%s'" + + #: c-parse.y:2968 objc-parse.y:3698 + #, c-format + msgid "syntax error at '%s' token" + msgstr "" + + #: c-parse.y:2998 ch/parse.c:4329 cp/lex.c:910 objc-parse.y:3728 + #, fuzzy + msgid "YYDEBUG not defined" + msgstr "YYDEBUG niet gedefinieerd" + + #: c-pragma.c:109 + msgid "#pragma pack (pop) encountered without matching #pragma pack (push, )" + msgstr "#pragma pack (pop) tegengekomen zonder overeenkomstige #pragma pack (push, )" + + #: c-pragma.c:127 + #, c-format + msgid "#pragma pack(pop, %s) encountered without matching #pragma pack(push, %s, )" + msgstr "#pragma pack (pop, %s) tegengekomen zonder overeenkomstige #pragma pack (push, %s, )" + + #: c-pragma.c:162 + #, fuzzy + msgid "#pragma pack(push[, id], ) is not supported on this target" + msgstr "sectie-attributen worden niet ondersteund op dit doelsysteem" + + #: c-pragma.c:164 + #, fuzzy + msgid "#pragma pack(pop[, id], ) is not supported on this target" + msgstr "sectie-attributen worden niet ondersteund op dit doelsysteem" + + #: c-pragma.c:184 + msgid "missing '(' after '#pragma pack' - ignored" + msgstr "" + + #: c-pragma.c:197 c-pragma.c:247 + #, fuzzy + msgid "malformed '#pragma pack' - ignored" + msgstr "misvormde #pragma pack" + + #: c-pragma.c:202 + #, fuzzy + msgid "malformed '#pragma pack(push[, id], )' - ignored" + msgstr "misvormde #pragma pack(push[,id],)" + + #: c-pragma.c:204 + #, fuzzy + msgid "malformed '#pragma pack(pop[, id])' - ignored" + msgstr "misvormde #pragma pack(pop[,id])" + + #: c-pragma.c:213 + #, c-format + msgid "unknown action '%s' for '#pragma pack' - ignored" + msgstr "" + + #: c-pragma.c:250 + #, fuzzy + msgid "junk at end of '#pragma pack'" + msgstr "misvormde #pragma pack" + + #: c-pragma.c:264 + #, fuzzy, c-format + msgid "alignment must be a small power of two, not %d" + msgstr "Alignment moet een kleine macht van twee zijn, en niet %d, in #pragma pack" + + #: c-pragma.c:290 c-pragma.c:295 + #, fuzzy + msgid "malformed #pragma weak, ignored" + msgstr "misvormde #pragma weak" + + #: c-pragma.c:299 + #, fuzzy + msgid "junk at end of #pragma weak" + msgstr "misvormde #pragma weak" + + #: c-semantics.c:563 + msgid "break statement not within loop or switch" + msgstr "break-statement niet in een lus of switch" + + #: c-semantics.c:581 + msgid "continue statement not within a loop" + msgstr "continue-statement niet in een lus" + + #: c-semantics.c:676 + msgid "destructor needed for `%#D'" + msgstr "" + + #: c-semantics.c:677 + msgid "where case label appears here" + msgstr "" + + #: c-semantics.c:680 + msgid "(enclose actions of previous case statements requiring destructors in their own scope.)" + msgstr "" + + #: c-semantics.c:723 c-typeck.c:6937 cp/semantics.c:881 + #, c-format + msgid "%s qualifier ignored on asm" + msgstr "" + + #: c-typeck.c:124 + #, c-format + msgid "`%s' has an incomplete type" + msgstr "`%s' heeft een onvolledig type" + + #: c-typeck.c:146 cp/call.c:2590 + msgid "invalid use of void expression" + msgstr "ongeldig gebruik van een void-expressie" + + #: c-typeck.c:155 cp/typeck2.c:227 + msgid "invalid use of array with unspecified bounds" + msgstr "ongeldig gebruik van een array zonder opgegeven grenzen" + + #: c-typeck.c:163 + #, c-format + msgid "invalid use of undefined type `%s %s'" + msgstr "ongeldig gebruik van het niet gedefinieerde type `%s %s'" + + #. If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. + #: c-typeck.c:167 + #, c-format + msgid "invalid use of incomplete typedef `%s'" + msgstr "ongeldig gebruik van onvolledige typedef `%s'" + + #: c-typeck.c:398 c-typeck.c:412 + #, fuzzy + msgid "function types not truly compatible in ISO C" + msgstr "functie-types zijn niet echt compatibel in ANSI C" + + #: c-typeck.c:572 + msgid "types are not quite compatible" + msgstr "types zijn niet helemaal compatibel" + + #: c-typeck.c:725 + msgid "sizeof applied to a function type" + msgstr "sizeof toegepast op een functie-type" + + #: c-typeck.c:731 + msgid "sizeof applied to a void type" + msgstr "sizeof toegepast op een void-type" + + #: c-typeck.c:738 + msgid "sizeof applied to an incomplete type" + msgstr "sizeof toegepast op een onvolledig type" + + # 'Arithmetic'?? 'rekensom' is wel correct, maar het klinkt zo stom. + #: c-typeck.c:791 c-typeck.c:2809 + msgid "arithmetic on pointer to an incomplete type" + msgstr "rekensom met pointer naar onvolledig type" + + #: c-typeck.c:1179 + #, fuzzy, c-format + msgid "%s has no member named `%s'" + msgstr "union heeft geen lid dat `%s' heet" + + #: c-typeck.c:1212 + #, c-format + msgid "request for member `%s' in something not a structure or union" + msgstr "vraag naar lid `%s' in iets dat geen structure of union is" + + #: c-typeck.c:1244 ch/expr.c:810 + msgid "dereferencing pointer to incomplete type" + msgstr "dereferentie van pointer naar onvolledig type" + + #: c-typeck.c:1248 ch/expr.c:814 + msgid "dereferencing `void *' pointer" + msgstr "`void *' pointer wordt gederefereerd" + + # Is the %s the argument, or is it 'of' the argument? + #: c-typeck.c:1265 cp/typeck.c:2380 + #, c-format + msgid "invalid type argument of `%s'" + msgstr "ongeldig type-argument `%s'" + + #: c-typeck.c:1284 cp/typeck.c:2406 + msgid "subscript missing in array reference" + msgstr "subscript ontbreekt in array-referentie" + + #: c-typeck.c:1305 cp/typeck.c:2448 + msgid "array subscript has type `char'" + msgstr "array subscript is van het type `char'" + + #: c-typeck.c:1313 c-typeck.c:1402 cp/typeck.c:2455 cp/typeck.c:2534 + msgid "array subscript is not an integer" + msgstr "array subscript is geen integer" + + #: c-typeck.c:1346 + #, fuzzy + msgid "ISO C forbids subscripting `register' array" + msgstr "ANSI C verbiedt het gebruik van subscripts bij een `register' array" + + #: c-typeck.c:1348 + #, fuzzy + msgid "ISO C89 forbids subscripting non-lvalue array" + msgstr "ANSI C verbiedt het gebruik van subscripts bij een array die geen lvalue is" + + #: c-typeck.c:1381 + msgid "subscript has type `char'" + msgstr "subscript is van het type `char'" + + #: c-typeck.c:1397 cp/typeck.c:2529 + msgid "subscripted value is neither array nor pointer" + msgstr "waarde met subscript is noch een array, noch een pointer" + + #: c-typeck.c:1451 + #, c-format + msgid "`%s' undeclared here (not in a function)" + msgstr "`%s' is hier niet gedeclareerd (niet in een functie)" + + #: c-typeck.c:1458 + #, c-format + msgid "`%s' undeclared (first use in this function)" + msgstr "`%s' is hier niet gedeclareerd (eerste gebruik in deze functie)" + + #: c-typeck.c:1463 + msgid "(Each undeclared identifier is reported only once" + msgstr "(Elke niet-gedeclareerde naam wordt slechts één" + + #: c-typeck.c:1464 + msgid "for each function it appears in.)" + msgstr "keer vermeld voor elke functie waarin hij staat.)" + + #: c-typeck.c:1481 + #, c-format + msgid "local declaration of `%s' hides instance variable" + msgstr "" + + #: c-typeck.c:1546 + msgid "called object is not a function" + msgstr "opgeroepen object is geen functie" + + #: c-typeck.c:1630 cp/typeck.c:3171 + msgid "too many arguments to function" + msgstr "teveel argumenten voor functie" + + #: c-typeck.c:1651 + #, c-format + msgid "type of formal parameter %d is incomplete" + msgstr "het type van formele parameter %d is onvolledig" + + #: c-typeck.c:1664 + #, c-format + msgid "%s as integer rather than floating due to prototype" + msgstr "%s als integer in plaats van floating-point ten gevolge van een prototype" + + #: c-typeck.c:1667 + #, fuzzy, c-format + msgid "%s as integer rather than complex due to prototype" + msgstr "%s als floating-point in plaats van complex ten gevolge van een prototype" + + #: c-typeck.c:1670 + #, c-format + msgid "%s as complex rather than floating due to prototype" + msgstr "%s als complex in plaats van floating-point ten gevolge van een prototype" + + #: c-typeck.c:1673 + #, c-format + msgid "%s as floating rather than integer due to prototype" + msgstr "%s als floating-point in plaats van integer ten gevolge van een prototype" + + #: c-typeck.c:1676 + #, fuzzy, c-format + msgid "%s as complex rather than integer due to prototype" + msgstr "%s als complex in plaats van floating-point ten gevolge van een prototype" + + #: c-typeck.c:1679 + #, c-format + msgid "%s as floating rather than complex due to prototype" + msgstr "%s als floating-point in plaats van complex ten gevolge van een prototype" + + #: c-typeck.c:1689 + #, c-format + msgid "%s as `float' rather than `double' due to prototype" + msgstr "%s als `float' in plaats van `double' ten gevolge van een prototype" + + #: c-typeck.c:1707 + #, c-format + msgid "%s with different width due to prototype" + msgstr "%s met andere breedte ten gevolge van prototype" + + #: c-typeck.c:1741 + #, c-format + msgid "%s as unsigned due to prototype" + msgstr "%s als unsigned ten gevolge van prototype" + + #: c-typeck.c:1743 + #, c-format + msgid "%s as signed due to prototype" + msgstr "%s als signed ten gevolge van prototype" + + #: c-typeck.c:1777 cp/typeck.c:3279 + msgid "too few arguments to function" + msgstr "te weinig argument voor functie" + + #: c-typeck.c:1819 + msgid "suggest parentheses around + or - inside shift" + msgstr "gebruik liefst haakjes rond + of - binnen een shift" + + #: c-typeck.c:1826 + msgid "suggest parentheses around && within ||" + msgstr "gebruik liefst haakjes rond && binnen ||" + + #: c-typeck.c:1835 + msgid "suggest parentheses around arithmetic in operand of |" + msgstr "gebruik liefst haakjes rond een rekensom in een operand van |" + + #: c-typeck.c:1838 + msgid "suggest parentheses around comparison in operand of |" + msgstr "gebruik liefst haakjes rond een vergelijking in een operand van |" + + #: c-typeck.c:1847 + msgid "suggest parentheses around arithmetic in operand of ^" + msgstr "gebruik liefst haakjes rond een rekensom in een operand van ^" + + #: c-typeck.c:1850 + msgid "suggest parentheses around comparison in operand of ^" + msgstr "gebruik liefst haakjes rond een vergelijking in een operand van ^" + + #: c-typeck.c:1857 + msgid "suggest parentheses around + or - in operand of &" + msgstr "gebruik liefst haakjes rond + of - in een operand van &" + + #: c-typeck.c:1860 + msgid "suggest parentheses around comparison in operand of &" + msgstr "gebruik liefst haakjes rond een vergelijking in een operand van &" + + #: c-typeck.c:1867 + msgid "comparisons like X<=Y<=Z do not have their mathematical meaning" + msgstr "vergelijkingen als 'X <= Y <= Z' hebben niet hun wiskundige betekenis" + + #: c-typeck.c:2027 c-typeck.c:2083 ch/expr.c:3951 + msgid "division by zero" + msgstr "deling door nul" + + #: c-typeck.c:2128 cp/typeck.c:3565 + msgid "right shift count is negative" + msgstr "teller van rechtse shift is negatief" + + #: c-typeck.c:2135 cp/typeck.c:3571 + msgid "right shift count >= width of type" + msgstr "teller van rechtse shift is >= breedte van het type" + + #: c-typeck.c:2160 cp/typeck.c:3590 + msgid "left shift count is negative" + msgstr "teller van links shift is negatief" + + #: c-typeck.c:2163 cp/typeck.c:3592 + msgid "left shift count >= width of type" + msgstr "teller van links shift is >= breedte van het type" + + #: c-typeck.c:2188 + msgid "shift count is negative" + msgstr "teller van shift is negatief" + + #: c-typeck.c:2190 + msgid "shift count >= width of type" + msgstr "teller van shift is >= breedte van het type" + + #: c-typeck.c:2211 cp/typeck.c:3627 + msgid "comparing floating point with == or != is unsafe" + msgstr "" + + #: c-typeck.c:2235 c-typeck.c:2241 + #, fuzzy + msgid "ISO C forbids comparison of `void *' with function pointer" + msgstr "ANSI C verbiedt een vergelijking van `void *' met een functie-pointer" + + #: c-typeck.c:2244 c-typeck.c:2286 c-typeck.c:2314 + msgid "comparison of distinct pointer types lacks a cast" + msgstr "een cast ontbreekt bij vergelijking van ongelijke pointer-types" + + #: c-typeck.c:2259 c-typeck.c:2265 c-typeck.c:2335 c-typeck.c:2341 + msgid "comparison between pointer and integer" + msgstr "vergelijking tussen pointer en integer" + + # 'ordered' -> 'bevolen' of 'geordend'? Waarschijnlijk het laatste. + #: c-typeck.c:2281 c-typeck.c:2309 + #, fuzzy + msgid "ISO C forbids ordered comparisons of pointers to functions" + msgstr "ANSI C verbiedt geordende vergelijkingen tussen pointers naar functies" + + #: c-typeck.c:2306 + msgid "comparison of complete and incomplete pointers" + msgstr "vergelijking van volledige en onvolledige pointers" + + #: c-typeck.c:2322 c-typeck.c:2329 + msgid "ordered comparison of pointer with integer zero" + msgstr "geordende vergelijking van een pointer met integer nul" + + #: c-typeck.c:2355 cp/typeck.c:3760 + #, fuzzy + msgid "unordered comparison on non-floating point argument" + msgstr "geordende vergelijking van een pointer met integer nul" + + #: c-typeck.c:2559 + msgid "comparison between signed and unsigned" + msgstr "vergelijking tussen signed en unsigned" + + #: c-typeck.c:2605 cp/typeck.c:4006 + msgid "comparison of promoted ~unsigned with constant" + msgstr "vergelijking van gepromoveerde ~unsigned met constante" + + #: c-typeck.c:2613 cp/typeck.c:4014 + msgid "comparison of promoted ~unsigned with unsigned" + msgstr "vergelijking van gepromoveerde ~unsigned met unsigned" + + #: c-typeck.c:2675 + msgid "pointer of type `void *' used in arithmetic" + msgstr "pointer van type `void *' gebruikt in rekensom" + + #: c-typeck.c:2681 + msgid "pointer to a function used in arithmetic" + msgstr "pointer naar functie gebruikt in rekensom" + + #: c-typeck.c:2761 + msgid "pointer of type `void *' used in subtraction" + msgstr "pointer van type `void *' gebruikt in aftrekking" + + #: c-typeck.c:2763 + msgid "pointer to a function used in subtraction" + msgstr "pointer naar functie gebruikt in aftrekking" + + # 'unary' = 'unair'? + #: c-typeck.c:2860 + msgid "wrong type argument to unary plus" + msgstr "argument van verkeerd type voor unaire plus" + + #: c-typeck.c:2871 + msgid "wrong type argument to unary minus" + msgstr "argument van verkeerd type voor unaire min" + + #: c-typeck.c:2883 + #, fuzzy + msgid "ISO C does not support `~' for complex conjugation" + msgstr "ANSI C ondersteunt het `%c' formaat niet" + + #: c-typeck.c:2889 + msgid "wrong type argument to bit-complement" + msgstr "argument van verkeerd type voor bit-complement" + + #: c-typeck.c:2900 + msgid "wrong type argument to abs" + msgstr "argument van verkeerd type voor abs" + + # OK, ik geef het op: wat is hier een goede vertaling voor 'conjugation'? + #: c-typeck.c:2912 + msgid "wrong type argument to conjugation" + msgstr "argument van verkeerd type voor vervoeging" + + #: c-typeck.c:2926 + msgid "wrong type argument to unary exclamation mark" + msgstr "argument van verkeerd type voor unair uitroepingsteken" + + #: c-typeck.c:2969 + #, fuzzy + msgid "ISO C does not support `++' and `--' on complex types" + msgstr "ANSI C ondersteunt het `%c' formaat niet" + + # Wat is beter: 'incrementeren', 'incrementering', of 'increment'? + #: c-typeck.c:2984 c-typeck.c:3016 + msgid "wrong type argument to increment" + msgstr "argument van verkeerd type voor incrementeren" + + #: c-typeck.c:2986 c-typeck.c:3018 + msgid "wrong type argument to decrement" + msgstr "argument van verkeerd type voor decrementeren" + + #: c-typeck.c:3007 + msgid "increment of pointer to unknown structure" + msgstr "incrementeren van pointer naar onbekend structure" + + #: c-typeck.c:3009 + msgid "decrement of pointer to unknown structure" + msgstr "decrementeren van pointer naar onbekend structure" + + #: c-typeck.c:3082 + msgid "invalid lvalue in increment" + msgstr "ongeldige lvalue bij incrementeren" + + #: c-typeck.c:3083 + msgid "invalid lvalue in decrement" + msgstr "ongeldige lvalue bij decrementeren" + + #: c-typeck.c:3091 cp/typeck.c:4594 + msgid "increment" + msgstr "incrementeren" + + #: c-typeck.c:3091 cp/typeck.c:4594 + msgid "decrement" + msgstr "decrementeren" + + #: c-typeck.c:3146 + msgid "ISO C forbids the address of a cast expression" + msgstr "ANSI C verbiedt het adres van een cast-expressie" + + #: c-typeck.c:3156 + msgid "invalid lvalue in unary `&'" + msgstr "ongeldige lvalue bij unaire `&'" + + #: c-typeck.c:3188 + #, c-format + msgid "attempt to take address of bit-field structure member `%s'" + msgstr "poging om het adres te nemen van lid `%s' van een bitveld-structure" + + #. condition met at compile time + #: c-typeck.c:3297 c-typeck.c:4686 c-typeck.c:4702 c-typeck.c:4718 + #: ch/expr.c:1782 ch/parse.c:361 ch/typeck.c:160 cp/typeck.c:4787 gcc.c:4467 + #: java/expr.c:387 java/verify.c:1464 java/verify.c:1465 java/verify.c:1480 + #: rtl-error.c:121 tradcif.y:533 tradcpp.c:4123 + #, c-format + msgid "%s" + msgstr "" + + #: c-typeck.c:3358 + #, fuzzy + msgid "ISO C forbids use of conditional expressions as lvalues" + msgstr "ANSI C verbiedt het gebruikt van voorwaardelijke expressies als lvalues" + + #: c-typeck.c:3361 + #, fuzzy + msgid "ISO C forbids use of compound expressions as lvalues" + msgstr "ANSI C verbiedt het gebruik van samengestelde expressies als lvalues" + + #: c-typeck.c:3364 + #, fuzzy + msgid "ISO C forbids use of cast expressions as lvalues" + msgstr "ANSI C verbiedt het gebruik van cast-expressies als lvalues" + + #: c-typeck.c:3381 + #, c-format + msgid "%s of read-only member `%s'" + msgstr "%s van alleen-lezen lid `%s'" + + #: c-typeck.c:3385 + #, c-format + msgid "%s of read-only variable `%s'" + msgstr "%s van alleen-lezen variabele `%s'" + + #: c-typeck.c:3388 + #, c-format + msgid "%s of read-only location" + msgstr "%s van alleen-lezen locatie" + + #: c-typeck.c:3406 + #, fuzzy, c-format + msgid "cannot take address of bit-field `%s'" + msgstr "kan adres van bitveld `%s' niet nemen" + + #: c-typeck.c:3434 ch/typeck.c:3676 ch/xtypeck.c:62 + #, c-format + msgid "global register variable `%s' used in nested function" + msgstr "globale registervariabele `%s' gebruikt in geneste functie" + + #: c-typeck.c:3438 ch/typeck.c:3680 ch/xtypeck.c:66 + #, c-format + msgid "register variable `%s' used in nested function" + msgstr "registervariabele `%s' gebruikt in geneste functie" + + #: c-typeck.c:3445 ch/typeck.c:3687 ch/xtypeck.c:73 + #, c-format + msgid "address of global register variable `%s' requested" + msgstr "adres van globale registervariabele `%s' gevraagd" + + #: c-typeck.c:3457 ch/typeck.c:3699 ch/xtypeck.c:85 + msgid "cannot put object with volatile field into register" + msgstr "een object met een volatile veld kan niet in een register geplaatst worden" + + #: c-typeck.c:3461 ch/typeck.c:3703 ch/xtypeck.c:89 + #, c-format + msgid "address of register variable `%s' requested" + msgstr "adres van registervariabele `%s' gevraagd" + + # Of moet/mag 'boolean' hier vertaald worden? + #: c-typeck.c:3569 + #, fuzzy + msgid "signed and unsigned type in conditional expression" + msgstr "niet-boolean modus in voorwaardelijke expressie" + + #: c-typeck.c:3576 + #, fuzzy + msgid "ISO C forbids conditional expr with only one void side" + msgstr "ANSI C verbiedt voorwaardelijke expressies met maar één void-zijde" + + #: c-typeck.c:3592 c-typeck.c:3599 + #, fuzzy + msgid "ISO C forbids conditional expr between `void *' and function pointer" + msgstr "ANSI C verbiedt voorwaardelijke expressies tussen `void *' en een functiepointer" + + #: c-typeck.c:3605 + msgid "pointer type mismatch in conditional expression" + msgstr "pointertypes in voorwaardelijke expressie komen niet overeen" + + #: c-typeck.c:3612 c-typeck.c:3622 + msgid "pointer/integer type mismatch in conditional expression" + msgstr "types in voorwaardelijke expressie komen niet overeen (pointer/integer)" + + #: c-typeck.c:3636 + msgid "type mismatch in conditional expression" + msgstr "types in voorwaardelijke expressie komen niet overeen" + + #: c-typeck.c:3707 cp/typeck.c:5044 + msgid "left-hand operand of comma expression has no effect" + msgstr "linker operand van comma-expressie heeft geen effect" + + #: c-typeck.c:3746 + msgid "cast specifies array type" + msgstr "cast geeft array-type op" + + #: c-typeck.c:3752 + msgid "cast specifies function type" + msgstr "cast geeft functie-type op" + + #: c-typeck.c:3762 + #, fuzzy + msgid "ISO C forbids casting nonscalar to the same type" + msgstr "ANSI C verbiedt het casten van een niet-scalair naar hetzelfde type" + + #: c-typeck.c:3781 + #, fuzzy + msgid "ISO C forbids casts to union type" + msgstr "ANSI C verbiedt casts naar een union-type" + + #: c-typeck.c:3797 + msgid "cast to union type from type not present in union" + msgstr "cast naar union-type van een type dat geen deel uitmaakt van de union" + + #. There are qualifiers present in IN_OTYPE that are not + #. present in IN_TYPE. + #: c-typeck.c:3840 + msgid "cast discards qualifiers from pointer target type" + msgstr "cast laat qualifiers van doeltype van pointer vallen" + + #: c-typeck.c:3855 + msgid "cast increases required alignment of target type" + msgstr "cast verhoogt het benodigde alignment van het doeltype" + + #: c-typeck.c:3861 cp/typeck.c:5458 + msgid "cast from pointer to integer of different size" + msgstr "cast van pointer naar integer met andere grootte" + + # 'A function type' of 'THE function type'? + #: c-typeck.c:3866 + msgid "cast does not match function type" + msgstr "cast komt niet overeen met het functietype" + + #: c-typeck.c:3873 cp/typeck.c:5465 + msgid "cast to pointer from integer of different size" + msgstr "cast naar pointer van integer met andere grootte" + + #. Now we have handled acceptable kinds of LHS that are not truly lvalues. + #. Reject anything strange now. + #: c-typeck.c:4031 + msgid "invalid lvalue in assignment" + msgstr "ongeldige lvalue in toewijzing" + + #. Convert new value to destination type. + #: c-typeck.c:4040 c-typeck.c:4065 c-typeck.c:4082 ch/typeck.c:2334 + #: cp/typeck.c:5575 cp/typeck.c:5726 + msgid "assignment" + msgstr "toewijzing" + + #: c-typeck.c:4249 c-typeck.c:4316 + #, c-format + msgid "%s makes qualified function pointer from unqualified" + msgstr "%s maakt gekwalificeerde functiepointer van een niet gekwalificeerde" + + #: c-typeck.c:4253 c-typeck.c:4296 + #, c-format + msgid "%s discards qualifiers from pointer target type" + msgstr "%s laat qualifiers van doeltype van pointer vallen" + + #: c-typeck.c:4259 + #, fuzzy + msgid "ISO C prohibits argument conversion to union type" + msgstr "ANSI C verbiedt conversie van argumenten naar union type" + + #: c-typeck.c:4288 + #, fuzzy, c-format + msgid "ISO C forbids %s between function pointer and `void *'" + msgstr "ANSI C verbiedt %s tussen functiepointer en `void *'" + + # 'signedness' = 'signed-heid'? + #: c-typeck.c:4305 + #, c-format + msgid "pointer targets in %s differ in signedness" + msgstr "doelen van pointer in %s verschillen in signedness" + + #: c-typeck.c:4321 + #, c-format + msgid "%s from incompatible pointer type" + msgstr "%s van incompatibel pointertype" + + #: c-typeck.c:4337 + #, c-format + msgid "%s makes pointer from integer without a cast" + msgstr "%s maakt pointer van integer zonder een cast" + + #: c-typeck.c:4345 + #, c-format + msgid "%s makes integer from pointer without a cast" + msgstr "%s maakt integer van pointer zonder een cast" + + #: c-typeck.c:4359 c-typeck.c:4362 + #, c-format + msgid "incompatible type for argument %d of `%s'" + msgstr "incompatibel type voor argument %d van `%s'" + + #: c-typeck.c:4366 + #, c-format + msgid "incompatible type for argument %d of indirect function call" + msgstr "incompatibel type voor argument %d van onrechtstreekse functie-oproep" + + #: c-typeck.c:4370 + #, c-format + msgid "incompatible types in %s" + msgstr "incompatibele types bij %s" + + #. Function name is known; supply it. + #: c-typeck.c:4401 + #, c-format + msgid "passing arg %d of `%s'" + msgstr "doorgeven van argument %d van `%s'" + + #. Function name unknown (call through ptr); just give arg number. + #: c-typeck.c:4411 + #, c-format + msgid "passing arg %d of pointer to function" + msgstr "doorgeven van argument %d van pointer naar functie" + + #: c-typeck.c:4478 + msgid "initializer for static variable is not constant" + msgstr "beginwaarde voor static variabele is geen constante" + + #: c-typeck.c:4484 + msgid "initializer for static variable uses complicated arithmetic" + msgstr "beginwaarde voor static variabele gebruikt ingewikkelde berekening" + + #: c-typeck.c:4492 + msgid "aggregate initializer is not constant" + msgstr "aggregaat-beginwaarde is geen constante" + + #: c-typeck.c:4494 + msgid "aggregate initializer uses complicated arithmetic" + msgstr "aggregaat-beginwaarde gebruikt ingewikkelde berekening" + + #: c-typeck.c:4501 + msgid "traditional C rejects automatic aggregate initialization" + msgstr "" + + #: c-typeck.c:4689 c-typeck.c:4705 c-typeck.c:4721 + #, c-format + msgid "(near initialization for `%s')" + msgstr "(dicht bij initialisatie van `%s')" + + #: c-typeck.c:4773 cp/typeck2.c:531 + msgid "char-array initialized from wide string" + msgstr "char-array heeft wide string als beginwaarde" + + #: c-typeck.c:4780 cp/typeck2.c:538 + msgid "int-array initialized from non-wide string" + msgstr "int-array heeft niet-wide string als beginwaarde" + + #: c-typeck.c:4798 cp/typeck2.c:554 + msgid "initializer-string for array of chars is too long" + msgstr "beginwaarde-string voor array van chars is te lang" + + #: c-typeck.c:4834 + msgid "array initialized from non-constant array expression" + msgstr "array krijgt niet-constante array-expressie als beginwaarde" + + #: c-typeck.c:4851 c-typeck.c:4853 c-typeck.c:4869 c-typeck.c:4890 + #: c-typeck.c:6311 + msgid "initializer element is not constant" + msgstr "beginwaarde-element is niet constant" + + #: c-typeck.c:4885 + msgid "initialization" + msgstr "initialisatie" + + #: c-typeck.c:4896 c-typeck.c:6316 + msgid "initializer element is not computable at load time" + msgstr "beginwaarde-element kan niet berekend worden tijdens het laden" + + #: c-typeck.c:4933 c-typeck.c:4949 cp/typeck2.c:631 + msgid "invalid initializer" + msgstr "ongeldige beginwaarde" + + #: c-typeck.c:5434 + msgid "extra brace group at end of initializer" + msgstr "extra accolade-groep aan einde van beginwaarde" + + #: c-typeck.c:5454 + msgid "missing braces around initializer" + msgstr "accolades ontbreken rond beginwaarde" + + #: c-typeck.c:5506 + msgid "braces around scalar initializer" + msgstr "accolades rond scalaire beginwaarde" + + #: c-typeck.c:5554 + msgid "initialization of flexible array member in a nested context" + msgstr "" + + #: c-typeck.c:5556 + msgid "initialization of a flexible array member" + msgstr "" + + #: c-typeck.c:5587 + msgid "missing initializer" + msgstr "beginwaarde ontbreekt" + + #: c-typeck.c:5612 + msgid "empty scalar initializer" + msgstr "lege scalaire beginwaarde" + + #: c-typeck.c:5617 + msgid "extra elements in scalar initializer" + msgstr "extra elementen in scalaire beginwaarde" + + #: c-typeck.c:5703 + msgid "initialization designators may not nest" + msgstr "" + + #: c-typeck.c:5724 c-typeck.c:5795 + msgid "array index in non-array initializer" + msgstr "array-index in beginwaarde van niet-array" + + #: c-typeck.c:5729 c-typeck.c:5847 + #, fuzzy + msgid "field name not in record or union initializer" + msgstr "overtollige elementen in beginwaarde van union" + + #: c-typeck.c:5791 c-typeck.c:5793 + msgid "nonconstant array index in initializer" + msgstr "niet-constante array-index in beginwaarde" + + #: c-typeck.c:5798 + #, fuzzy + msgid "array index in initializer exceeds array bounds" + msgstr "array-index in beginwaarde van niet-array" + + #: c-typeck.c:5809 + msgid "empty index range in initializer" + msgstr "leeg indexbereik in beginwaarde" + + #: c-typeck.c:5818 + #, fuzzy + msgid "array index range in initializer exceeds array bounds" + msgstr "leeg indexbereik in beginwaarde" + + #: c-typeck.c:5859 + #, c-format + msgid "unknown field `%s' specified in initializer" + msgstr "onbekend veld `%s' opgegeven in beginwaarde" + + #: c-typeck.c:5896 c-typeck.c:5917 c-typeck.c:6379 + msgid "initialized field with side-effects overwritten" + msgstr "" + + #: c-typeck.c:6589 + #, fuzzy + msgid "excess elements in char array initializer" + msgstr "overtollige elementen in beginwaarde van array" + + #: c-typeck.c:6596 c-typeck.c:6642 + msgid "excess elements in struct initializer" + msgstr "overtollige elementen in beginwaarde van struct" + + #: c-typeck.c:6709 + msgid "excess elements in union initializer" + msgstr "overtollige elementen in beginwaarde van union" + + #: c-typeck.c:6730 + msgid "traditional C rejects initialization of unions" + msgstr "" + + #: c-typeck.c:6793 + msgid "excess elements in array initializer" + msgstr "overtollige elementen in beginwaarde van array" + + #: c-typeck.c:6819 + msgid "excess elements in scalar initializer" + msgstr "overtollige elementen in beginwaarde van scalair" + + #: c-typeck.c:6930 ch/parse.c:2026 + msgid "asm template is not a string constant" + msgstr "asm-template is geen stringconstante" + + #: c-typeck.c:6962 + #, fuzzy + msgid "invalid lvalue in asm statement" + msgstr "ongeldige lvalue in toewijzing" + + #: c-typeck.c:7033 + msgid "modification by `asm'" + msgstr "aanpassing door `asm'" + + #: c-typeck.c:7052 cp/typeck.c:6576 + msgid "function declared `noreturn' has a `return' statement" + msgstr "als `noreturn' gedeclareerde functie bevat een `return' statement" + + #: c-typeck.c:7059 + msgid "`return' with no value, in function returning non-void" + msgstr "`return' zonder waarde in een functie die een niet-void waarde teruggeeft" + + #: c-typeck.c:7065 + msgid "`return' with a value, in function returning void" + msgstr "`return' met waarde in een functie die void teruggeeft" + + #: c-typeck.c:7069 + msgid "return" + msgstr "return" + + #: c-typeck.c:7120 + msgid "function returns address of local variable" + msgstr "functie geeft adres van lokale variabele terug" + + #: c-typeck.c:7177 cp/semantics.c:525 + msgid "switch quantity not an integer" + msgstr "switch-waarde is geen integer" + + #: c-typeck.c:7187 + #, fuzzy + msgid "`long' switch expression not converted to `int' in ISO C" + msgstr "`long' switch-expressie wordt in ANSI C niet naar `int' geconverteerd" + + #: c-typeck.c:7222 cp/decl.c:5230 + msgid "case label not within a switch statement" + msgstr "case-label niet in een switch-statement" + + #: c-typeck.c:7224 cp/decl.c:5235 + #, fuzzy + msgid "`default' label not within a switch statement" + msgstr "default-label niet in een switch-statement" + + #: calls.c:1901 + #, c-format + msgid "inlining failed in call to `%s'" + msgstr "inline maken mislukt in oproep van `%s'" + + #: calls.c:1902 calls.c:2208 + msgid "called from here" + msgstr "van hieruit opgeroepen" + + #: calls.c:2207 + #, c-format + msgid "can't inline call to `%s'" + msgstr "kan oproep van `%s' niet inline maken" + + # dit klinkt niet al te best + #: calls.c:2237 + msgid "function call has aggregate value" + msgstr "functie-oproep heeft geaggregeerde waarde" + + #: calls.c:4539 + msgid "variable offset is passed partially in stack and in reg" + msgstr "" + + #: calls.c:4541 + msgid "variable size is passed partially in stack and in reg" + msgstr "" + + #: cfgrtl.c:1578 + #, c-format + msgid "end insn %d for block %d not found in the insn stream" + msgstr "" + + #: cfgrtl.c:1592 + #, c-format + msgid "insn %d is in multiple basic blocks (%d and %d)" + msgstr "" + + #: cfgrtl.c:1604 + #, c-format + msgid "head insn %d for block %d not found in the insn stream" + msgstr "" + + #: cfgrtl.c:1623 + #, c-format + msgid "verify_flow_info: Duplicate edge %i->%i" + msgstr "" + + #: cfgrtl.c:1642 + #, c-format + msgid "verify_flow_info: Incorrect blocks for fallthru %i->%i" + msgstr "" + + #: cfgrtl.c:1657 + #, c-format + msgid "verify_flow_info: Incorrect fallthru %i->%i" + msgstr "" + + #: cfgrtl.c:1659 + msgid "wrong insn in the fallthru edge" + msgstr "" + + #: cfgrtl.c:1666 + #, c-format + msgid "verify_flow_info: Basic block %d succ edge is corrupted" + msgstr "" + + #: cfgrtl.c:1690 + #, c-format + msgid "missing barrier after block %i" + msgstr "" + + #: cfgrtl.c:1700 + #, c-format + msgid "basic block %d pred edge is corrupted" + msgstr "" + + #: cfgrtl.c:1717 + #, c-format + msgid "insn %d inside basic block %d but block_for_insn is NULL" + msgstr "" + + #: cfgrtl.c:1721 + #, c-format + msgid "insn %d inside basic block %d but block_for_insn is %i" + msgstr "" + + #: cfgrtl.c:1735 cfgrtl.c:1745 + #, c-format + msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d" + msgstr "" + + #: cfgrtl.c:1758 + #, c-format + msgid "NOTE_INSN_BASIC_BLOCK %d in middle of basic block %d" + msgstr "" + + #: cfgrtl.c:1770 + #, c-format + msgid "in basic block %d:" + msgstr "" + + #: cfgrtl.c:1771 + msgid "flow control insn inside a basic block" + msgstr "" + + #: cfgrtl.c:1790 + #, c-format + msgid "basic block %i edge lists are corrupted" + msgstr "" + + #: cfgrtl.c:1804 + msgid "basic blocks not numbered consecutively" + msgstr "" + + #: cfgrtl.c:1829 + msgid "insn outside basic block" + msgstr "" + + #: cfgrtl.c:1837 + #, fuzzy + msgid "return not followed by barrier" + msgstr "`#' gevolgd door een integer" + + #: cfgrtl.c:1842 + #, c-format + msgid "number of bb notes in insn chain (%d) != n_basic_blocks (%d)" + msgstr "" + + #: cfgrtl.c:1846 + msgid "verify_flow_info failed" + msgstr "" + + #: collect2.c:439 + msgid "internal error" + msgstr "interne fout" + + #: collect2.c:940 + msgid "no arguments" + msgstr "geen argumenten" + + #: collect2.c:1269 collect2.c:1417 collect2.c:1450 + #, c-format + msgid "fopen %s" + msgstr "fopen %s" + + #: collect2.c:1272 collect2.c:1422 collect2.c:1453 + #, c-format + msgid "fclose %s" + msgstr "fclose %s" + + #: collect2.c:1281 + #, c-format + msgid "collect2 version %s" + msgstr "collect2 versie %s" + + #: collect2.c:1371 + #, c-format + msgid "%d constructor(s) found\n" + msgstr "%d constructor(s) gevonden\n" + + #: collect2.c:1372 + #, c-format + msgid "%d destructor(s) found\n" + msgstr "%d destructor(s) gevonden\n" + + #: collect2.c:1373 + #, c-format + msgid "%d frame table(s) found\n" + msgstr "%d frame-tabel(len) gevonden\n" + + #: collect2.c:1514 + #, fuzzy, c-format + msgid "%s terminated with signal %d [%s]%s" + msgstr "%s beëindigd met signaal %d [%s]" + + #: collect2.c:1533 + #, c-format + msgid "%s returned %d exit status" + msgstr "%s gaf exit-status %d terug" + + #: collect2.c:1561 + #, c-format + msgid "[cannot find %s]" + msgstr "[kan %s niet vinden]" + + #: collect2.c:1576 + #, c-format + msgid "cannot find `%s'" + msgstr "kan %s niet vinden" + + #: collect2.c:1587 collect2.c:1590 + #, c-format + msgid "redirecting stdout: %s" + msgstr "bij het herleiden van standaarduitvoer: %s" + + #: collect2.c:1633 + #, c-format + msgid "[Leaving %s]\n" + msgstr "[%s wordt verlaten]\n" + + #: collect2.c:1876 + #, c-format + msgid "\nwrite_c_file - output name is %s, prefix is %s\n" + msgstr "\nwrite_c_file - uitvoernaam is %s, prefix is %s\n" + + #: collect2.c:2089 + msgid "cannot find `nm'" + msgstr "kan `nm' niet vinden" + + #: collect2.c:2099 collect2.c:2541 + msgid "pipe" + msgstr "pipe" + + #: collect2.c:2103 collect2.c:2545 + msgid "fdopen" + msgstr "fdopen" + + #: collect2.c:2129 collect2.c:2571 + #, c-format + msgid "dup2 %d 1" + msgstr "dup2 %d 1" + + #: collect2.c:2132 collect2.c:2135 collect2.c:2148 collect2.c:2574 + #: collect2.c:2577 collect2.c:2590 + #, c-format + msgid "close %d" + msgstr "close %d" + + #: collect2.c:2138 + #, c-format + msgid "execvp %s" + msgstr "execvp %s" + + #: collect2.c:2192 + #, c-format + msgid "init function found in object %s" + msgstr "init-functie gevonden in object %s" + + #: collect2.c:2200 + #, c-format + msgid "fini function found in object %s" + msgstr "fini-functie gevonden in object %s" + + #: collect2.c:2223 collect2.c:2629 + msgid "fclose" + msgstr "fclose" + + #: collect2.c:2268 + #, c-format + msgid "unable to open file '%s'" + msgstr "kan bestand '%s' niet openen" + + #: collect2.c:2270 + #, c-format + msgid "unable to stat file '%s'" + msgstr "kan bestand '%s' niet stat'en" + + #: collect2.c:2276 + #, c-format + msgid "unable to mmap file '%s'" + msgstr "kan bestand '%s' niet mmap'en" + + #: collect2.c:2429 + msgid "not found\n" + msgstr "niet gevonden\n" + + # 'dependency'? 'afhankelijkheid' klinkt niet echt goed... + #: collect2.c:2431 collect2.c:2608 + #, c-format + msgid "dynamic dependency %s not found" + msgstr "dynamische dependency %s niet gevonden" + + #: collect2.c:2451 + #, c-format + msgid "bad magic number in file '%s'" + msgstr "slecht magisch getal in bestand '%s'" + + #: collect2.c:2473 + msgid "dynamic dependencies.\n" + msgstr "dynamische dependencies.\n" + + #: collect2.c:2532 + msgid "cannot find `ldd'" + msgstr "kan `ldd' niet vinden" + + #: collect2.c:2580 + #, c-format + msgid "execv %s" + msgstr "execv %s" + + #: collect2.c:2593 + msgid "\nldd output with constructors/destructors.\n" + msgstr "\nuitvoer van ldd met constructors/destructors.\n" + + #: collect2.c:2620 + #, c-format + msgid "unable to open dynamic dependency '%s'" + msgstr "kan dynamische dependency '%s' niet openen" + + #: collect2.c:2734 + #, c-format + msgid "%s: not a COFF file" + msgstr "%s: geen COFF-bestand" + + #: collect2.c:2853 + #, c-format + msgid "%s: cannot open as COFF file" + msgstr "%s: kan niet openen als COFF-bestand" + + # Ik zou 'library' kunnen vertalen, maar ik heb in compiler-manuals nog niet + # dikwijls 'bibliotheek' zien gebruiken. + # De vertaalde boodschappen voor make gebruiken dat op het ogenblik wél, maar + # ik ben van plan daar verandering in te brengen. + #: collect2.c:2909 + #, fuzzy, c-format + msgid "library lib%s not found" + msgstr "Library lib%s niet gevonden" + + #: collect2.c:3038 + #, c-format + msgid "open %s" + msgstr "open %s" + + #: collect2.c:3061 + msgid "incompatibilities between object file & expected values" + msgstr "incompatibiliteiten tussen objectbestand & verwachte waarden" + + #: collect2.c:3134 + #, c-format + msgid "\nProcessing symbol table #%d, offset = 0x%.8lx, kind = %s\n" + msgstr "\nSymbooltabel #%d wordt verwerkt (offset = 0x%.8lx, soort = %s)\n" + + #: collect2.c:3143 + msgid "string section missing" + msgstr "string-sectie ontbreekt" + + #: collect2.c:3146 + msgid "section pointer missing" + msgstr "sectie-pointer ontbreekt" + + #: collect2.c:3194 + msgid "no symbol table found" + msgstr "geen symbooltabel gevonden" + + #: collect2.c:3207 + msgid "no cmd_strings found" + msgstr "geen cmd_strings gevonden" + + #: collect2.c:3219 + msgid "\nUpdating header and load commands.\n\n" + msgstr "\nHoofding en laadcommandos worden aangepast.\n\n" + + #: collect2.c:3226 + #, c-format + msgid "load command map, %d cmds, new size %ld.\n" + msgstr "laadcommando-kaart, %d commando's, nieuwe grootte %ld.\n" + + #: collect2.c:3257 + msgid "writing load commands.\n\n" + msgstr "laadcommandos worden geschreven.\n\n" + + #: collect2.c:3277 + #, c-format + msgid "close %s" + msgstr "close %s" + + # 'regio' klinkt niet echt, maar 'streek' lijkt me nog slechter + #: collect2.c:3351 + msgid "could not convert 0x%l.8x into a region" + msgstr "kon 0x%l.8x niet naar een regio omzetten" + + #: collect2.c:3355 + #, c-format + msgid "%s function, region %d, offset = %ld (0x%.8lx)\n" + msgstr "%s-functie, regio %d, offset = %ld (0x%.8lx)\n" + + #: collect2.c:3482 + msgid "bad magic number" + msgstr "slecht magisch getal" + + #: collect2.c:3483 + msgid "bad header version" + msgstr "slechte versie van hoofding" + + # trekt op nie veel + #: collect2.c:3484 + msgid "bad raw header version" + msgstr "slechte versie van rauwe hoofding" + + #: collect2.c:3485 + msgid "raw header buffer too small" + msgstr "buffer voor rauwe hoofding te klein" + + #: collect2.c:3486 + msgid "old raw header file" + msgstr "oud bestand met rauwe hoofding" + + #: collect2.c:3487 + msgid "unsupported version" + msgstr "niet-ondersteunde versie" + + #: collect2.c:3489 + #, c-format + msgid "unknown {de,en}code_mach_o_hdr return value %d" + msgstr "onbekende returnwaarde %d voor {de,en}code_mach_o_hdr" + + #: collect2.c:3509 + #, c-format + msgid "fstat %s" + msgstr "fstat %s" + + #: collect2.c:3546 collect2.c:3594 + #, c-format + msgid "lseek %s 0" + msgstr "lseek %s 0" + + #: collect2.c:3550 + #, c-format + msgid "read %s" + msgstr "read %s" + + #: collect2.c:3553 + #, c-format + msgid "read %ld bytes, expected %ld, from %s" + msgstr "%ld bytes gelezen (%ld verwacht) van %s" + + #: collect2.c:3574 + #, c-format + msgid "msync %s" + msgstr "msync %s" + + #: collect2.c:3581 + #, c-format + msgid "munmap %s" + msgstr "munmap %s" + + #: collect2.c:3598 + #, c-format + msgid "write %s" + msgstr "write %s" + + #: collect2.c:3601 + #, c-format + msgid "wrote %ld bytes, expected %ld, to %s" + msgstr "%ld bytes geschreven (%ld verwacht) naar %s" + + #: combine.c:12639 + #, c-format + msgid "" + ";; Combiner statistics: %d attempts, %d substitutions (%d requiring new space),\n" + ";; %d successes.\n" + "\n" + msgstr "" + ";; Combiner-statistieken: %d pogingen, %d vervangingen (%d hadden nieuwe ruimte\n" + ";; nodig), %d successen.\n" + "\n" + + #: combine.c:12649 + #, c-format + msgid "" + "\n" + ";; Combiner totals: %d attempts, %d substitutions (%d requiring new space),\n" + ";; %d successes.\n" + msgstr "" + "\n" + ";; Combiner-totalen: %d pogingen, %d vervangingen (%d hadden nieuwe ruimte\n" + ";; nodig), %d successen.\n" + + #: convert.c:67 + msgid "cannot convert to a pointer type" + msgstr "" + + #: convert.c:100 + msgid "pointer value used where a floating point value was expected" + msgstr "" + + #: convert.c:104 + msgid "aggregate value used where a float was expected" + msgstr "" + + #: convert.c:130 + msgid "conversion to incomplete type" + msgstr "" + + #: convert.c:390 convert.c:470 + #, fuzzy + msgid "can't convert between vector values of different size" + msgstr "cast van pointer naar integer met andere grootte" + + #: convert.c:396 + msgid "aggregate value used where an integer was expected" + msgstr "" + + #: convert.c:448 f/com.c:1073 + msgid "pointer value used where a complex was expected" + msgstr "" + + #: convert.c:452 f/com.c:1075 + msgid "aggregate value used where a complex was expected" + msgstr "" + + # 'regio' klinkt niet echt, maar 'streek' lijkt me nog slechter + #: convert.c:476 + #, fuzzy + msgid "can't convert value to a vector" + msgstr "kon 0x%l.8x niet naar een regio omzetten" + + #: cpperror.c:125 + #, fuzzy + msgid "internal error: " + msgstr "interne fout" + + # Dit zou misschien beter 'warning' blijven + #: cpperror.c:132 tradcpp.c:4679 + msgid "warning: " + msgstr "let op: " + + #: cpperror.c:209 cpperror.c:299 cppfiles.c:691 gcc.c:6318 tradcpp.c:4717 + #, c-format + msgid "%s: %s" + msgstr "" + + #: cppexp.c:154 + #, fuzzy + msgid "floating point numbers are not valid in #if" + msgstr "Floating-point getallen zijn niet toegestaan in #if-expressies" + + #: cppexp.c:176 + msgid "traditional C rejects the `U' suffix" + msgstr "" + + #: cppexp.c:179 + #, fuzzy + msgid "too many 'l' suffixes in integer constant" + msgstr "teveel `l'en in integerconstante" + + #: cppexp.c:183 + msgid "integer constant contains digits beyond the radix" + msgstr "integerconstante bevat cijfers buiten de basis" + + #: cppexp.c:186 + msgid "integer constant out of range" + msgstr "integerconstante buiten bereik" + + #: cppexp.c:192 + msgid "integer constant is so large that it is unsigned" + msgstr "integerconstante is zo groot dat hij unsigned is" + + #: cppexp.c:201 + #, fuzzy, c-format + msgid "invalid suffix '%.*s' on integer constant" + msgstr "twee `u's in integerconstante" + + #: cppexp.c:234 + #, fuzzy + msgid "missing ')' after \"defined\"" + msgstr "witruimte ontbreekt na `#define %.*s'" + + #: cppexp.c:240 + #, fuzzy + msgid "operator \"defined\" requires an identifier" + msgstr "`defined' zonder een naam" + + #: cppexp.c:248 + #, c-format + msgid "(\"%s\" is an alternative token for \"%s\" in C++)" + msgstr "" + + #: cppexp.c:259 + msgid "this use of \"defined\" may not be portable" + msgstr "" + + #: cppexp.c:305 + #, fuzzy + msgid "string constants are not valid in #if" + msgstr "stringconstantes zijn niet toegestaan in #if-expressies" + + #: cppexp.c:309 + #, fuzzy, c-format + msgid "invalid character '%c' in #if" + msgstr "ongeldig karakter in naam van macro-parameter" + + #: cppexp.c:311 + #, fuzzy, c-format + msgid "invalid character '\\%03o' in #if" + msgstr "ongeldig karakter in naam van macro-parameter" + + #: cppexp.c:328 + #, fuzzy, c-format + msgid "ISO C++ does not permit \"%s\" in #if" + msgstr "ANSI C staat het gebruik van `varargs.h' niet toe" + + #: cppexp.c:339 + #, fuzzy, c-format + msgid "\"%s\" is not defined" + msgstr "`%.*s' is niet gedefinieerd" + + #: cppexp.c:365 + #, fuzzy, c-format + msgid "\"%s\" is not valid in #if expressions" + msgstr "stringconstantes zijn niet toegestaan in #if-expressies" + + #: cppexp.c:380 + msgid "integer overflow in preprocessor expression" + msgstr "integer-overflow in preprocessor-expressie" + + #: cppexp.c:610 + #, fuzzy + msgid "missing binary operator" + msgstr "beginwaarde ontbreekt" + + #: cppexp.c:645 + #, fuzzy + msgid "void expression between '(' and ')'" + msgstr "ongeldige expressie als operand" + + #: cppexp.c:647 + #, fuzzy, c-format + msgid "operator '%s' has no right operand" + msgstr "iterator `%s' is van een niet-integraal type" + + #: cppexp.c:659 + #, fuzzy, c-format + msgid "impossible operator '%s'" + msgstr "incompatibele operands voor %s" + + #: cppexp.c:735 tradcif.y:111 tradcif.y:122 + msgid "division by zero in #if" + msgstr "deling door nul in `#if'" + + #: cppexp.c:769 + #, fuzzy + msgid "comma operator in operand of #if" + msgstr "comma-operator in operand van `#if'" + + #: cppexp.c:774 + msgid "syntax error '?' without following ':'" + msgstr "" + + #: cppexp.c:777 + msgid "syntax error ':' without preceding '?'" + msgstr "" + + #: cppexp.c:785 + #, fuzzy + msgid "missing ')' in expression" + msgstr "ontbrekende index-expressie" + + #: cppexp.c:792 + #, fuzzy + msgid "missing '(' in expression" + msgstr "ontbrekende index-expressie" + + # 'whitespace' -> 'witruimte'? + #: cppexp.c:818 + #, fuzzy, c-format + msgid "missing binary operator before '%s'" + msgstr "ontbrekende witruimte na getal `%s'" + + #: cppexp.c:824 + #, fuzzy, c-format + msgid "operator '%s' has no left operand" + msgstr "parameter `%s' heeft een onvolledig type" + + #: cppexp.c:862 + #, fuzzy + msgid "unbalanced stack in #if" + msgstr "niet-gebalanceerde `#endif'" + + #: cppexp.c:865 + #, fuzzy + msgid "#if with no expression" + msgstr "modi in %s expressie komen niet overeen" + + #: cppfiles.c:395 + #, fuzzy, c-format + msgid "%s is too large" + msgstr "bestand `%s' is te groot" + + #: cppfiles.c:426 + #, c-format + msgid "%s is shorter than expected" + msgstr "" + + #: cppfiles.c:440 + #, c-format + msgid "%s is a block device" + msgstr "" + + #: cppfiles.c:566 + #, fuzzy, c-format + msgid "no include path in which to find %s" + msgstr "Geen include-pad waarin %s kan gevonden worden" + + #: cppfiles.c:639 + msgid "Multiple include guards may be useful for:\n" + msgstr "" + + #: cppfiles.c:1029 + msgid "absolute file name in remap_filename" + msgstr "" + + #: cppinit.c:230 + #, fuzzy, c-format + msgid "ignoring nonexistent directory \"%s\"\n" + msgstr "dubbele folder `%s' wordt genegeerd\n" + + #: cppinit.c:237 + #, fuzzy, c-format + msgid "%s: Not a directory" + msgstr "%s: %s: Is geen folder" + + #: cppinit.c:284 + #, fuzzy, c-format + msgid "ignoring duplicate directory \"%s\"\n" + msgstr "dubbele folder `%s' wordt genegeerd\n" + + #: cppinit.c:312 + #, c-format + msgid "changing search order for system directory \"%s\"" + msgstr "" + + #: cppinit.c:316 + #, c-format + msgid " as it is the same as non-system directory \"%s\"" + msgstr "" + + #: cppinit.c:320 + msgid " as it has already been specified as a non-system directory" + msgstr "" + + #: cppinit.c:927 + msgid "#include \"...\" search starts here:\n" + msgstr "Zoektocht voor #include \"...\" begint hier:\n" + + #: cppinit.c:931 + msgid "#include <...> search starts here:\n" + msgstr "Zoektocht voor #include <...> begint hier:\n" + + #: cppinit.c:934 + msgid "End of search list.\n" + msgstr "Einde van opzoekingslijst.\n" + + #: cppinit.c:1001 + msgid "" + msgstr "" + + #: cppinit.c:1003 + msgid "" + msgstr "" + + #: cppinit.c:1099 tradcpp.c:968 tradcpp.c:978 tradcpp.c:1069 + msgid "I/O error on output" + msgstr "I/O-fout op uitvoer" + + #. Irix6 "cc -n32" and OSF4 cc have problems with char foo[] = ("string"); + #. I.e. a const string initializer with parens around it. That is + #. what N_("string") resolves to, so we make no_* be macros instead. + #: cppinit.c:1147 + #, fuzzy, c-format + msgid "argument missing after %s" + msgstr "Bestandsnaam ontbreekt na %s optie" + + # Assertie? Dat moet beter kunnen! + #: cppinit.c:1148 + #, fuzzy, c-format + msgid "assertion missing after %s" + msgstr "Assertie ontbreekt na -A optie" + + #: cppinit.c:1149 + #, fuzzy, c-format + msgid "directory name missing after %s" + msgstr "Foldernaam ontbreekt na `%s' optie" + + #: cppinit.c:1150 + #, fuzzy, c-format + msgid "file name missing after %s" + msgstr "Bestandsnaam ontbreekt na %s optie" + + #: cppinit.c:1151 + #, fuzzy, c-format + msgid "macro name missing after %s" + msgstr "Macro-naam ontbreekt na -U optie" + + #: cppinit.c:1152 + #, fuzzy, c-format + msgid "path name missing after %s" + msgstr "Bestandsnaam ontbreekt na %s optie" + + #: cppinit.c:1153 + #, fuzzy, c-format + msgid "number missing after %s" + msgstr "Bestandsnaam ontbreekt na %s optie" + + #: cppinit.c:1154 + #, fuzzy, c-format + msgid "target missing after %s" + msgstr "Bestandsnaam ontbreekt na %s optie" + + #: cppinit.c:1338 + #, c-format + msgid "too many filenames. Type %s --help for usage info" + msgstr "" + + #: cppinit.c:1522 tradcpp.c:603 + #, fuzzy + msgid "output filename specified twice" + msgstr "Bestandsnaam voor uitvoer twee keer opgegeven" + + #: cppinit.c:1634 + msgid "-I- specified twice" + msgstr "-I- twee keer opgegeven" + + #: cppinit.c:1773 + #, fuzzy, c-format + msgid "GNU CPP version %s (cpplib)" + msgstr "GNU CPP versie %s" + + #: cppinit.c:1814 tradcpp.c:792 + #, fuzzy + msgid "you must additionally specify either -M or -MM" + msgstr "-MG moet samen met ofwel -M, ofwel -MM gebruikt worden" + + #: cppinit.c:1877 + #, c-format + msgid "Usage: %s [switches] input output\n" + msgstr "" + + #. To keep the lines from getting too long for some compilers, limit + #. to about 500 characters (6 lines) per chunk. + #: cppinit.c:1880 + msgid "" + "Switches:\n" + " -include Include the contents of before other files\n" + " -imacros Accept definition of macros in \n" + " -iprefix Specify as a prefix for next two options\n" + " -iwithprefix Add to the end of the system include path\n" + " -iwithprefixbefore Add to the end of the main include path\n" + " -isystem Add to the start of the system include path\n" + msgstr "" + + #: cppinit.c:1889 + msgid "" + " -idirafter Add to the end of the system include path\n" + " -I Add to the end of the main include path\n" + " -I- Fine-grained include path control; see info docs\n" + " -nostdinc Do not search system include directories\n" + " (dirs specified with -isystem will still be used)\n" + " -nostdinc++ Do not search system include directories for C++\n" + " -o Put output into \n" + msgstr "" + + #: cppinit.c:1898 + msgid "" + " -pedantic Issue all warnings demanded by strict ISO C\n" + " -pedantic-errors Issue -pedantic warnings as errors instead\n" + " -trigraphs Support ISO C trigraphs\n" + " -lang-c Assume that the input sources are in C\n" + " -lang-c89 Assume that the input sources are in C89\n" + msgstr "" + + #: cppinit.c:1905 + msgid "" + " -lang-c++ Assume that the input sources are in C++\n" + " -lang-objc Assume that the input sources are in ObjectiveC\n" + " -lang-objc++ Assume that the input sources are in ObjectiveC++\n" + " -lang-asm Assume that the input sources are in assembler\n" + msgstr "" + + #: cppinit.c:1911 + msgid "" + " -std= Specify the conformance standard; one of:\n" + " gnu89, gnu99, c89, c99, iso9899:1990,\n" + " iso9899:199409, iso9899:1999\n" + " -+ Allow parsing of C++ style features\n" + " -w Inhibit warning messages\n" + " -Wtrigraphs Warn if trigraphs are encountered\n" + " -Wno-trigraphs Do not warn about trigraphs\n" + " -Wcomment{s} Warn if one comment starts inside another\n" + msgstr "" + + #: cppinit.c:1921 + msgid "" + " -Wno-comment{s} Do not warn about comments\n" + " -Wtraditional Warn about features not present in traditional C\n" + " -Wno-traditional Do not warn about traditional C\n" + " -Wundef Warn if an undefined macro is used by #if\n" + " -Wno-undef Do not warn about testing undefined macros\n" + " -Wimport Warn about the use of the #import directive\n" + msgstr "" + + #: cppinit.c:1929 + msgid "" + " -Wno-import Do not warn about the use of #import\n" + " -Werror Treat all warnings as errors\n" + " -Wno-error Do not treat warnings as errors\n" + " -Wsystem-headers Do not suppress warnings from system headers\n" + " -Wno-system-headers Suppress warnings from system headers\n" + " -Wall Enable all preprocessor warnings\n" + msgstr "" + + #: cppinit.c:1937 + msgid "" + " -M Generate make dependencies\n" + " -MM As -M, but ignore system header files\n" + " -MF Write dependency output to the given file\n" + " -MG Treat missing header file as generated files\n" + msgstr "" + + #: cppinit.c:1943 + msgid "" + " -MP\t\t\t Generate phony targets for all headers\n" + " -MQ Add a MAKE-quoted target\n" + " -MT Add an unquoted target\n" + msgstr "" + + #: cppinit.c:1948 + msgid "" + " -D Define a with string '1' as its value\n" + " -D= Define a with as its value\n" + " -A () Assert the to \n" + " -A- () Disable the to \n" + " -U Undefine \n" + " -v Display the version number\n" + msgstr "" + + #: cppinit.c:1956 + msgid "" + " -H Print the name of header files as they are used\n" + " -C Do not discard comments\n" + " -dM Display a list of macro definitions active at end\n" + " -dD Preserve macro definitions in output\n" + " -dN As -dD except that only the names are preserved\n" + " -dI Include #include directives in the output\n" + msgstr "" + + #: cppinit.c:1964 + msgid "" + " -fpreprocessed Treat the input file as already preprocessed\n" + " -ftabstop= Distance between tab stops for column reporting\n" + " -P Do not generate #line directives\n" + " -$ Do not allow '$' in identifiers\n" + " -remap Remap file names when including files.\n" + " --version Display version information\n" + " -h or --help Display this information\n" + msgstr "" + + #: cpplex.c:154 + #, c-format + msgid "trigraph ??%c converted to %c" + msgstr "" + + #: cpplex.c:162 + #, c-format + msgid "trigraph ??%c ignored" + msgstr "" + + #: cpplex.c:218 + msgid "backslash and newline separated by space" + msgstr "" + + #: cpplex.c:224 + msgid "backslash-newline at end of file" + msgstr "" + + #: cpplex.c:290 + #, fuzzy + msgid "\"/*\" within comment" + msgstr "`/*' binnen commentaar" + + #: cpplex.c:373 + #, fuzzy + msgid "null character(s) ignored" + msgstr "%s bij nulkarakter" + + #: cpplex.c:380 + #, c-format + msgid "%s in preprocessing directive" + msgstr "" + + #: cpplex.c:447 + #, c-format + msgid "attempt to use poisoned \"%s\"" + msgstr "" + + #: cpplex.c:455 + msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro" + msgstr "" + + # Wat is een correcte vertaling voor 'identifier'? Ik kies voor 'naam'. + #: cpplex.c:508 + #, fuzzy + msgid "'$' character(s) in identifier" + msgstr "`$' in naam" + + #: cpplex.c:589 + #, fuzzy, c-format + msgid "missing terminating %c character" + msgstr "niet-beëindigde string- of karakterconstante" + + #: cpplex.c:594 + #, fuzzy + msgid "possible start of unterminated string literal" + msgstr "mogelijk echte begin van niet-beëindigde constante" + + #: cpplex.c:689 + msgid "multi-line string literals are deprecated" + msgstr "" + + #: cpplex.c:712 + msgid "null character(s) preserved in literal" + msgstr "" + + #: cpplex.c:914 + #, fuzzy + msgid "no newline at end of file" + msgstr "niet-herkende tekst op einde van #line" + + #: cpplex.c:1034 tradcpp.c:1456 + msgid "unterminated comment" + msgstr "niet-beëindigde commentaar" + + #: cpplex.c:1045 + msgid "C++ style comments are not allowed in ISO C89" + msgstr "" + + #: cpplex.c:1047 + msgid "(this will be reported only once per input file)" + msgstr "" + + #: cpplex.c:1052 + #, fuzzy + msgid "multi-line comment" + msgstr "'//'-commentaar op meerdere lijnen" + + #: cpplex.c:1367 + #, fuzzy, c-format + msgid "unknown string token %s\n" + msgstr "onbekende machine-modus `%s'" + + #: cpplex.c:1379 + #, fuzzy, c-format + msgid "unspellable token %s" + msgstr "kan bestand '%s' niet openen" + + #: cpplex.c:1635 + #, fuzzy, c-format + msgid "the meaning of '\\%c' varies with -traditional" + msgstr "de betekenis van `\\a' varieert naargelang -traditional al dan niet gebruikt wordt" + + #: cpplex.c:1641 + msgid "incomplete universal-character-name" + msgstr "" + + #: cpplex.c:1655 + #, c-format + msgid "non-hex digit '%c' in universal-character-name" + msgstr "" + + #: cpplex.c:1663 + msgid "universal-character-name on EBCDIC target" + msgstr "" + + #: cpplex.c:1677 + #, fuzzy + msgid "universal-character-name out of range" + msgstr "case-waarde buiten bereik" + + #: cpplex.c:1722 + #, fuzzy + msgid "the meaning of '\\a' varies with -traditional" + msgstr "de betekenis van `\\a' varieert naargelang -traditional al dan niet gebruikt wordt" + + #: cpplex.c:1729 + #, fuzzy, c-format + msgid "non-ISO-standard escape sequence, '\\%c'" + msgstr "niet-ANSI-standaard escape sequence `\\%c'" + + #: cpplex.c:1739 + #, fuzzy + msgid "the meaning of '\\x' varies with -traditional" + msgstr "de betekenis van `\\x' varieert naargelang -traditional al dan niet gebruikt wordt" + + #: cpplex.c:1758 f/lex.c:610 + msgid "\\x used with no following hex digits" + msgstr "\\x gebruikt zonder daaropvolgende hexadecimale cijfers" + + #: cpplex.c:1762 + msgid "hex escape sequence out of range" + msgstr "hexadecimale escape sequence buiten bereik" + + #: cpplex.c:1786 + msgid "octal escape sequence out of range" + msgstr "octale escape sequence buiten bereik" + + #: cpplex.c:1801 + #, fuzzy, c-format + msgid "unknown escape sequence '\\%c'" + msgstr "onbekende escape sequence `\\%c'" + + #: cpplex.c:1803 + #, fuzzy, c-format + msgid "unknown escape sequence: '\\%03o'" + msgstr "onbekende escape sequence `\\%c'" + + # "escape-sequentie"?! Maar wat is er beter? + #: cpplex.c:1807 + msgid "escape sequence out of range for character" + msgstr "escape-sequentie buiten bereik voor karakter" + + #: cpplex.c:1897 + msgid "empty character constant" + msgstr "lege karakterconstante" + + #: cpplex.c:1901 + msgid "character constant too long" + msgstr "karakterconstante te lang" + + #: cpplex.c:1904 + msgid "multi-character character constant" + msgstr "karakterconstante met meer dan één karakter" + + # OK, OK... Dit hoort thuis in lang nl@be, niet nl + #: cpplib.c:221 + #, fuzzy, c-format + msgid "extra tokens at end of #%s directive" + msgstr "brol aan einde van `#line'-commando" + + #: cpplib.c:275 + msgid "style of line directive is a GCC extension" + msgstr "" + + #: cpplib.c:283 + #, c-format + msgid "#%s is a GCC extension" + msgstr "" + + #: cpplib.c:294 + msgid "suggest not using #elif in traditional C" + msgstr "" + + #: cpplib.c:297 + #, c-format + msgid "traditional C ignores #%s with the # indented" + msgstr "" + + #: cpplib.c:301 + #, c-format + msgid "suggest hiding #%s from traditional C with an indented #" + msgstr "" + + #: cpplib.c:383 + #, fuzzy, c-format + msgid "invalid preprocessing directive #%s" + msgstr "ongeldig preprocessing-commando" + + #: cpplib.c:438 + #, c-format + msgid "no macro name given in #%s directive" + msgstr "" + + #: cpplib.c:442 + #, c-format + msgid "\"%s\" cannot be used as a macro name as it is an operator in C++" + msgstr "" + + #: cpplib.c:445 + msgid "macro names must be identifiers" + msgstr "" + + #: cpplib.c:456 + #, fuzzy, c-format + msgid "\"%s\" cannot be used as a macro name" + msgstr "`%s' kan niet statisch gealloceerd worden" + + # is ongedefinieerd beter? ik denk van nie + #: cpplib.c:494 + #, fuzzy, c-format + msgid "undefining \"%s\"" + msgstr "`%s' wordt geondefinieerd" + + #: cpplib.c:540 + #, fuzzy + msgid "missing terminating > character" + msgstr "niet-beëindigde string- of karakterconstante" + + #: cpplib.c:575 + #, fuzzy, c-format + msgid "#%s expects \"FILENAME\" or " + msgstr "`#%s' verwacht \"BESTAND\" of " + + #: cpplib.c:586 + #, fuzzy, c-format + msgid "empty file name in #%s" + msgstr "lege bestandsnaam in `#%s'" + + #: cpplib.c:605 + msgid "#include_next in primary source file" + msgstr "" + + #: cpplib.c:612 + msgid "#import is obsolete, use an #ifndef wrapper in the header file" + msgstr "" + + #: cpplib.c:620 + msgid "#include nested too deeply" + msgstr "" + + #: cpplib.c:677 + #, fuzzy, c-format + msgid "invalid flag \"%s\" in line directive" + msgstr "`#line'-commando in slecht formaat" + + #: cpplib.c:732 + #, fuzzy, c-format + msgid "\"%s\" after #line is not a positive integer" + msgstr "switch-waarde is geen integer" + + #: cpplib.c:739 + #, fuzzy + msgid "line number out of range" + msgstr "case-waarde buiten bereik" + + #: cpplib.c:777 + #, fuzzy, c-format + msgid "\"%s\" is not a valid filename" + msgstr "-fPIC is niet geldig met -mcoff" + + #: cpplib.c:846 + #, fuzzy + msgid "invalid #ident directive" + msgstr "`#line'-commando in slecht formaat" + + #: cpplib.c:934 + #, c-format + msgid "registering \"%s\" as both a pragma and a pragma namespace" + msgstr "" + + #: cpplib.c:937 + #, c-format + msgid "#pragma %s %s is already registered" + msgstr "" + + #: cpplib.c:939 + #, c-format + msgid "#pragma %s is already registered" + msgstr "" + + #: cpplib.c:1014 + #, fuzzy + msgid "#pragma once is obsolete" + msgstr "`#pragma once' is verouderd" + + #: cpplib.c:1017 + #, fuzzy + msgid "#pragma once in main file" + msgstr "`#pragma once' is verouderd" + + #: cpplib.c:1041 + #, fuzzy + msgid "invalid #pragma GCC poison directive" + msgstr "ongeldig preprocessing-commando" + + #: cpplib.c:1050 + #, c-format + msgid "poisoning existing macro \"%s\"" + msgstr "" + + #: cpplib.c:1070 + msgid "#pragma system_header ignored outside include file" + msgstr "" + + #: cpplib.c:1095 + #, fuzzy, c-format + msgid "cannot find source %s" + msgstr "[kan %s niet vinden]" + + #: cpplib.c:1099 + #, c-format + msgid "current file is older than %s" + msgstr "" + + #: cpplib.c:1174 + #, fuzzy + msgid "_Pragma takes a parenthesized string literal" + msgstr "Onbeëindigde stringconstante" + + #: cpplib.c:1273 + msgid "#else without #if" + msgstr "" + + #: cpplib.c:1278 tradcpp.c:3860 + #, fuzzy + msgid "#else after #else" + msgstr "`#else' na `#else'" + + #: cpplib.c:1280 cpplib.c:1314 + msgid "the conditional began here" + msgstr "" + + #: cpplib.c:1307 + msgid "#elif without #if" + msgstr "" + + #: cpplib.c:1312 tradcpp.c:3555 + #, fuzzy + msgid "#elif after #else" + msgstr "`#elif' na `#else'" + + #: cpplib.c:1343 + msgid "#endif without #if" + msgstr "" + + #: cpplib.c:1426 tradcpp.c:3252 + msgid "missing '(' after predicate" + msgstr "" + + #: cpplib.c:1441 tradcpp.c:3266 + msgid "missing ')' to complete answer" + msgstr "" + + #: cpplib.c:1461 tradcpp.c:3272 + msgid "predicate's answer is empty" + msgstr "" + + #: cpplib.c:1491 tradcpp.c:3320 + msgid "assertion without predicate" + msgstr "" + + #: cpplib.c:1493 tradcpp.c:3322 + #, fuzzy + msgid "predicate must be an identifier" + msgstr "`defined' zonder een naam" + + #: cpplib.c:1575 tradcpp.c:3419 + #, c-format + msgid "\"%s\" re-asserted" + msgstr "" + + #: cpplib.c:1805 + #, fuzzy, c-format + msgid "unterminated #%s" + msgstr "niet-beëindigde commentaar" + + #: cppmacro.c:148 + #, fuzzy, c-format + msgid "invalid built-in macro \"%s\"" + msgstr "ongeldige macronaam" + + #: cppmacro.c:348 + msgid "invalid string literal, ignoring final '\\'" + msgstr "" + + #: cppmacro.c:440 + #, c-format + msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token" + msgstr "" + + #: cppmacro.c:566 + msgid "directives may not be used inside a macro argument" + msgstr "" + + #: cppmacro.c:578 + #, fuzzy, c-format + msgid "unterminated argument list invoking macro \"%s\"" + msgstr "niet-beëindigde parameterlijst in `#define'" + + #: cppmacro.c:595 + #, fuzzy + msgid "ISO C99 requires rest arguments to be used" + msgstr "ANSI C heeft een benoemd argument nodig vóór `...'" + + #: cppmacro.c:600 + #, c-format + msgid "macro \"%s\" requires %u arguments, but only %u given" + msgstr "" + + #: cppmacro.c:611 + #, c-format + msgid "macro \"%s\" passed %u arguments, but takes just %u" + msgstr "" + + #: cppmacro.c:694 + #, c-format + msgid "function-like macro \"%s\" must be used with arguments in traditional C" + msgstr "" + + #: cppmacro.c:1190 + #, fuzzy, c-format + msgid "duplicate macro parameter \"%s\"" + msgstr "herhaald lid `%s'" + + #: cppmacro.c:1218 + #, fuzzy, c-format + msgid "\"%s\" may not appear in macro parameter list" + msgstr "ongeldig karakter in naam van macro-parameter" + + #: cppmacro.c:1225 + #, fuzzy + msgid "macro parameters must be comma-separated" + msgstr "parameter 2 moet een locatie zijn" + + #: cppmacro.c:1242 + #, fuzzy + msgid "parameter name missing" + msgstr "parameternaam weggelaten" + + #: cppmacro.c:1256 + msgid "anonymous variadic macros were introduced in C99" + msgstr "" + + #: cppmacro.c:1259 + #, fuzzy + msgid "ISO C does not permit named variadic macros" + msgstr "ANSI C staat het gebruik van `varargs.h' niet toe" + + #: cppmacro.c:1268 + #, fuzzy + msgid "missing ')' in macro parameter list" + msgstr "parameternaam ontbreekt uit parameterlijst" + + #: cppmacro.c:1346 + msgid "ISO C requires whitespace after the macro name" + msgstr "" + + #: cppmacro.c:1376 + #, fuzzy + msgid "'#' is not followed by a macro parameter" + msgstr "`#' operator wordt niet gevolgd door een naam van een macro-argument" + + #: cppmacro.c:1396 + msgid "'##' cannot appear at either end of a macro expansion" + msgstr "" + + #: cppmacro.c:1432 + #, fuzzy, c-format + msgid "\"%s\" redefined" + msgstr "`%.*s' opnieuw gedefinieerd" + + #: cppmacro.c:1436 + #, fuzzy + msgid "this is the location of the previous definition" + msgstr "dit is een eerdere declaratie" + + #: cppmacro.c:1500 + #, fuzzy, c-format + msgid "macro argument \"%s\" would be stringified with -traditional" + msgstr "macro-argument `%.*s' zou met -traditional string gemaakt worden." + + #: cppmacro.c:1524 + #, c-format + msgid "invalid hash type %d in cpp_macro_definition" + msgstr "" + + #: cppmain.c:121 + #, fuzzy, c-format + msgid "invalid option %s" + msgstr "Ongeldige optie `%s'" + + #: cppspec.c:131 + #, c-format + msgid "\"%s\" is not a valid option to the preprocessor" + msgstr "" + + #: cppspec.c:155 + #, fuzzy + msgid "too many input files" + msgstr "Geen invoerbestanden" + + #: cse.c:7092 + #, c-format + msgid ";; Processing block from %d to %d, %d sets.\n" + msgstr "" + + # Dit zou misschien beter 'warning' blijven + #: diagnostic.c:784 + #, fuzzy, c-format + msgid "%s:%d: warning: " + msgstr "let op: " + + # Dit zou misschien beter 'warning' blijven + #: diagnostic.c:791 + #, fuzzy, c-format + msgid "%s: warning: " + msgstr "let op: " + + #: diagnostic.c:871 + msgid "((anonymous))" + msgstr "" + + #: diagnostic.c:941 + #, c-format + msgid "%s: warnings being treated as errors\n" + msgstr "" + + #: diagnostic.c:978 + #, c-format + msgid "%s: %s: " + msgstr "" + + #: diagnostic.c:1057 + msgid "sorry, not implemented: " + msgstr "" + + #: diagnostic.c:1076 + #, c-format + msgid "%s " + msgstr "" + + #: diagnostic.c:1078 + #, fuzzy, c-format + msgid " %s" + msgstr "%s voor `%s'" + + #: diagnostic.c:1102 + msgid "At top level:" + msgstr "" + + #: diagnostic.c:1107 + #, fuzzy, c-format + msgid "In member function `%s':" + msgstr "bibliotheekfunctie `%s' wordt verborgen" + + #: diagnostic.c:1111 + #, fuzzy, c-format + msgid "In function `%s':" + msgstr "Ongeldige optie `%s'" + + #: diagnostic.c:1195 + msgid "compilation terminated.\n" + msgstr "" + + #: diagnostic.c:1226 + #, c-format + msgid "%s:%d: confused by earlier errors, bailing out\n" + msgstr "" + + #: diagnostic.c:1240 diagnostic.c:1390 + #, c-format + msgid "" + "Please submit a full bug report,\n" + "with preprocessed source if appropriate.\n" + "See %s for instructions.\n" + msgstr "" + + #: diagnostic.c:1388 + #, fuzzy + msgid "Internal compiler error: Error reporting routines re-entered.\n" + msgstr "Interne compilerfout: programma %s kreeg fataal signaal %d" + + #: diagnostic.c:1450 + #, fuzzy, c-format + msgid "Internal compiler error in %s, at %s:%d" + msgstr "Interne compilerfout %d." + + #: diagnostic.c:1495 + #, c-format + msgid "In file included from %s:%d" + msgstr "" + + #: diagnostic.c:1498 + #, c-format + msgid "" + ",\n" + " from %s:%d" + msgstr "" + + #: diagnostic.c:1499 + msgid ":\n" + msgstr "" + + #: diagnostic.c:1532 diagnostic.c:1549 + #, c-format + msgid "`%s' is deprecated (declared at %s:%d)" + msgstr "" + + #: diagnostic.c:1552 + #, fuzzy, c-format + msgid "`%s' is deprecated" + msgstr "`%.*s' is niet gedefinieerd" + + #: diagnostic.c:1555 + #, c-format + msgid "type is deprecated (declared at %s:%d)" + msgstr "" + + #: diagnostic.c:1558 + msgid "type is deprecated" + msgstr "" + + #: dwarf2out.c:3034 + #, c-format + msgid "DW_LOC_OP %s not implemented\n" + msgstr "" + + #: dwarfout.c:2089 + #, c-format + msgid "internal regno botch: regno = %d\n" + msgstr "" + + #: dwarfout.c:6291 + msgid "can't get current directory" + msgstr "" + + #: emit-rtl.c:1091 + msgid "can't access real part of complex value in hard register" + msgstr "" + + #: emit-rtl.c:1113 + msgid "can't access imaginary part of complex value in hard register" + msgstr "" + + #: emit-rtl.c:3140 + msgid "ICE: emit_insn used where emit_jump_insn needed:\n" + msgstr "" + + #: errors.c:136 + #, c-format + msgid "abort in %s, at %s:%d" + msgstr "" + + #: except.c:360 + msgid "exception handling disabled, use -fexceptions to enable" + msgstr "" + + #: except.c:3062 + msgid "argument of `__builtin_eh_return_regno' must be constant" + msgstr "" + + #: except.c:3173 except.c:3195 + #, fuzzy + msgid "__builtin_eh_return not supported on this target" + msgstr "instructie-scheduling wordt niet ondersteund op deze doelmachine" + + #: explow.c:1357 + #, fuzzy + msgid "stack limits not supported on this target" + msgstr "sectie-attributen worden niet ondersteund op dit doelsysteem" + + #: expr.c:2926 + #, fuzzy + msgid "function using short complex types cannot be inline" + msgstr "de terugkeerwaarde van een functie kan geen funtie zijn" + + #: expr.c:5766 expr.c:5775 expr.c:5784 expr.c:5789 expr.c:6075 expr.c:6091 + msgid "unsupported wide integer operation" + msgstr "" + + #: expr.c:6140 + #, c-format + msgid "prior parameter's size depends on `%s'" + msgstr "" + + #: expr.c:6474 + msgid "returned value in block_exit_expr" + msgstr "" + + #: final.c:1209 + #, fuzzy + msgid "negative insn length" + msgstr "Onbeëindigde stringconstante" + + #: final.c:2627 + msgid "could not split insn" + msgstr "" + + #: final.c:2971 + #, c-format + msgid "invalid `asm': %s" + msgstr "" + + #: final.c:2973 + #, c-format + msgid "output_operand: %s" + msgstr "" + + #: final.c:3146 + msgid "nested assembly dialect alternatives" + msgstr "" + + #: final.c:3163 final.c:3175 + #, fuzzy + msgid "unterminated assembly dialect alternative" + msgstr "Onbeëindigde stringconstante" + + #: final.c:3219 + #, c-format + msgid "operand number missing after %-letter" + msgstr "" + + #: final.c:3222 final.c:3261 + msgid "operand number out of range" + msgstr "" + + #: final.c:3280 + #, c-format + msgid "invalid %%-code" + msgstr "" + + #: final.c:3311 + msgid "`%l' operand isn't a label" + msgstr "" + + #. We can't handle floating point constants; + #. PRINT_OPERAND must handle them. + #: config/i386/i386.c:5280 config/pdp11/pdp11.c:1570 final.c:3418 + #: vmsdbgout.c:478 + msgid "floating constant misused" + msgstr "floating-point constante verkeerd gebruikt" + + #: config/i386/i386.c:5334 config/pdp11/pdp11.c:1617 final.c:3473 + #: vmsdbgout.c:535 + msgid "invalid expression as operand" + msgstr "ongeldige expressie als operand" + + #: flow.c:360 + msgid "function might be possible candidate for attribute `noreturn'" + msgstr "deze functie is een mogelijke kandidaat voor het `noreturn' attribuut" + + #: flow.c:365 + msgid "`noreturn' function does return" + msgstr "`noreturn' functie keert terug" + + #: flow.c:384 + msgid "control reaches end of non-void function" + msgstr "einde van niet-void functie werd bereikt zonder teruggeefwaarde" + + #: flow.c:1569 + msgid "Attempt to delete prologue/epilogue insn:" + msgstr "" + + #: fold-const.c:3114 fold-const.c:3127 + #, fuzzy, c-format + msgid "comparison is always %d due to width of bit-field" + msgstr "vergelijking is altijd waar omwille van het beperkte bereik van het datatype" + + #: fold-const.c:4169 fold-const.c:4186 + #, c-format + msgid "comparison is always %d" + msgstr "" + + #: fold-const.c:4317 + msgid "`or' of unmatched not-equal tests is always 1" + msgstr "" + + #: fold-const.c:4322 + msgid "`and' of mutually exclusive equal-tests is always 0" + msgstr "" + + #: function.c:5378 + #, c-format + msgid "`%s' might be used uninitialized in this function" + msgstr "" + + #: function.c:5385 + #, c-format + msgid "variable `%s' might be clobbered by `longjmp' or `vfork'" + msgstr "" + + #: function.c:5404 + #, c-format + msgid "argument `%s' might be clobbered by `longjmp' or `vfork'" + msgstr "" + + #: function.c:6270 + msgid "function returns an aggregate" + msgstr "" + + #: function.c:6789 + #, c-format + msgid "unused parameter `%s'" + msgstr "" + + #: gcc.c:1100 + #, c-format + msgid "ambiguous abbreviation %s" + msgstr "" + + #: gcc.c:1127 + #, fuzzy, c-format + msgid "incomplete `%s' option" + msgstr "Bestandsnaam ontbreekt na `%s' optie" + + #: gcc.c:1138 + #, fuzzy, c-format + msgid "missing argument to `%s' option" + msgstr "Bestandsnaam ontbreekt na `%s' optie" + + #: gcc.c:1151 + #, fuzzy, c-format + msgid "extraneous argument to `%s' option" + msgstr "teveel argumenten voor functie" + + #: gcc.c:1465 + msgid "Using built-in specs.\n" + msgstr "" + + #: gcc.c:1639 + #, c-format + msgid "Setting spec %s to '%s'\n\n" + msgstr "" + + #: gcc.c:1737 + #, c-format + msgid "Reading specs from %s\n" + msgstr "" + + #: gcc.c:1835 gcc.c:1854 + #, c-format + msgid "specs %%include syntax malformed after %ld characters" + msgstr "" + + #: gcc.c:1862 + #, c-format + msgid "could not find specs file %s\n" + msgstr "" + + #: gcc.c:1878 gcc.c:1886 gcc.c:1895 gcc.c:1904 + #, c-format + msgid "specs %%rename syntax malformed after %ld characters" + msgstr "" + + #: gcc.c:1913 + #, c-format + msgid "specs %s spec was not found to be renamed" + msgstr "" + + #: gcc.c:1920 + #, c-format + msgid "rename spec %s to %s\n" + msgstr "" + + #: gcc.c:1922 + #, c-format + msgid "spec is '%s'\n\n" + msgstr "" + + #: gcc.c:1935 + #, c-format + msgid "specs unknown %% command after %ld characters" + msgstr "" + + #: gcc.c:1946 gcc.c:1959 + #, c-format + msgid "specs file malformed after %ld characters" + msgstr "" + + #: gcc.c:2013 + msgid "spec file has no spec for linking" + msgstr "" + + #: gcc.c:2725 + msgid "-pipe not supported" + msgstr "" + + #: gcc.c:2779 + msgid "\nGo ahead? (y or n) " + msgstr "" + + #: gcc.c:2878 + #, c-format + msgid "" + "Internal error: %s (program %s)\n" + "Please submit a full bug report.\n" + "See %s for instructions." + msgstr "" + + #: gcc.c:2896 + #, c-format + msgid "# %s %.2f %.2f\n" + msgstr "" + + #: gcc.c:3029 + #, c-format + msgid "Usage: %s [options] file...\n" + msgstr "" + + #: gcc.c:3030 + msgid "Options:\n" + msgstr "" + + #: gcc.c:3032 + msgid " -pass-exit-codes Exit with highest error code from a phase\n" + msgstr "" + + #: gcc.c:3033 + msgid " --help Display this information\n" + msgstr "" + + #: gcc.c:3034 + msgid " --target-help Display target specific command line options\n" + msgstr "" + + #: gcc.c:3036 + msgid " (Use '-v --help' to display command line options of sub-processes)\n" + msgstr "" + + #: gcc.c:3037 + msgid " -dumpspecs Display all of the built in spec strings\n" + msgstr "" + + #: gcc.c:3038 + msgid " -dumpversion Display the version of the compiler\n" + msgstr "" + + #: gcc.c:3039 + msgid " -dumpmachine Display the compiler's target processor\n" + msgstr "" + + #: gcc.c:3040 + msgid " -print-search-dirs Display the directories in the compiler's search path\n" + msgstr "" + + #: gcc.c:3041 + msgid " -print-libgcc-file-name Display the name of the compiler's companion library\n" + msgstr "" + + #: gcc.c:3042 + msgid " -print-file-name= Display the full path to library \n" + msgstr "" + + #: gcc.c:3043 + msgid " -print-prog-name= Display the full path to compiler component \n" + msgstr "" + + #: gcc.c:3044 + msgid " -print-multi-directory Display the root directory for versions of libgcc\n" + msgstr "" + + #: gcc.c:3045 + msgid "" + " -print-multi-lib Display the mapping between command line options and\n" + " multiple library search directories\n" + msgstr "" + + #: gcc.c:3048 + msgid " -Wa, Pass comma-separated on to the assembler\n" + msgstr "" + + #: gcc.c:3049 + msgid " -Wp, Pass comma-separated on to the preprocessor\n" + msgstr "" + + #: gcc.c:3050 + msgid " -Wl, Pass comma-separated on to the linker\n" + msgstr "" + + #: gcc.c:3051 + msgid " -Xlinker Pass on to the linker\n" + msgstr "" + + #: gcc.c:3052 + msgid " -save-temps Do not delete intermediate files\n" + msgstr "" + + #: gcc.c:3053 + msgid " -pipe Use pipes rather than intermediate files\n" + msgstr "" + + #: gcc.c:3054 + msgid " -time Time the execution of each subprocess\n" + msgstr "" + + #: gcc.c:3055 + msgid " -specs= Override built-in specs with the contents of \n" + msgstr "" + + #: gcc.c:3056 + msgid " -std= Assume that the input sources are for \n" + msgstr "" + + #: gcc.c:3057 + msgid " -B Add to the compiler's search paths\n" + msgstr "" + + #: gcc.c:3058 + msgid " -b Run gcc for target , if installed\n" + msgstr "" + + #: gcc.c:3059 + msgid " -V Run gcc version number , if installed\n" + msgstr "" + + #: gcc.c:3060 + msgid " -v Display the programs invoked by the compiler\n" + msgstr "" + + #: gcc.c:3061 + msgid " -### Like -v but options quoted and commands not executed\n" + msgstr "" + + #: gcc.c:3062 + msgid " -E Preprocess only; do not compile, assemble or link\n" + msgstr "" + + #: gcc.c:3063 + msgid " -S Compile only; do not assemble or link\n" + msgstr "" + + #: gcc.c:3064 + msgid " -c Compile and assemble, but do not link\n" + msgstr "" + + #: gcc.c:3065 + msgid " -o Place the output into \n" + msgstr "" + + #: gcc.c:3066 + msgid "" + " -x Specify the language of the following input files\n" + " Permissable languages include: c c++ assembler none\n" + " 'none' means revert to the default behavior of\n" + " guessing the language based on the file's extension\n" + msgstr "" + + #: gcc.c:3073 + #, c-format + msgid "" + "\n" + "Options starting with -g, -f, -m, -O, -W, or --param are automatically\n" + " passed on to the various sub-processes invoked by %s. In order to pass\n" + " other options on to these processes the -W options must be used.\n" + msgstr "" + + #. translate_options () has turned --version into -fversion. + #: gcc.c:3353 + #, c-format + msgid "%s (GCC) %s\n" + msgstr "" + + #: gcc.c:3354 + msgid "Copyright (C) 2002 Free Software Foundation, Inc.\n" + msgstr "" + + #: gcc.c:3356 gcov.c:320 + msgid "" + "This is free software; see the source for copying conditions. There is NO\n" + "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" + "\n" + msgstr "" + + #: gcc.c:3455 + msgid "argument to `-Xlinker' is missing" + msgstr "" + + #: gcc.c:3463 + #, fuzzy + msgid "argument to `-l' is missing" + msgstr "het argument van `asm' is geen constante string" + + #: gcc.c:3480 + msgid "argument to `-specs' is missing" + msgstr "" + + #: gcc.c:3495 + msgid "argument to `-specs=' is missing" + msgstr "" + + #: gcc.c:3526 + msgid "argument to `-b' is missing" + msgstr "" + + #: gcc.c:3541 + msgid "argument to `-B' is missing" + msgstr "" + + #: gcc.c:3611 + msgid "argument to `-V' is missing" + msgstr "" + + #: gcc.c:3632 gcc.c:3639 gcc.c:3646 + msgid "invalid version number format" + msgstr "" + + #: gcc.c:3757 + msgid "cannot specify -o with -c or -S and multiple compilations" + msgstr "" + + #: gcc.c:3928 + msgid "warning: -pipe ignored because -save-temps specified" + msgstr "" + + #: gcc.c:3932 + msgid "warning: -pipe ignored because -time specified" + msgstr "" + + #: gcc.c:3944 + msgid "argument to `-x' is missing" + msgstr "" + + #: gcc.c:3972 + #, c-format + msgid "argument to `-%s' is missing" + msgstr "" + + #: gcc.c:4033 + #, c-format + msgid "warning: `-x %s' after last input file has no effect" + msgstr "" + + #: gcc.c:4332 + msgid "invalid specification! Bug in cc" + msgstr "" + + #: gcc.c:4481 + #, c-format + msgid "%s\n" + msgstr "" + + #. Catch the case where a spec string contains something like + #. '%{foo:%*}'. ie there is no * in the pattern on the left + #. hand side of the :. + #: gcc.c:5040 + #, c-format + msgid "spec failure: '%%*' has not been initialized by pattern match" + msgstr "" + + #: gcc.c:5049 + #, fuzzy, c-format + msgid "warning: use of obsolete %%[ operator in specs" + msgstr "Let Op: verouderde operator %%[ gebruikt in specs" + + #: gcc.c:5067 + #, c-format + msgid "Processing spec %c%s%c, which is '%s'\n" + msgstr "" + + #: gcc.c:5192 + #, c-format + msgid "spec failure: unrecognized spec option '%c'" + msgstr "" + + #: gcc.c:5302 + msgid "mismatched braces in specs" + msgstr "" + + #: gcc.c:5980 + #, c-format + msgid "unrecognized option `-%s'" + msgstr "" + + #: gcc.c:5986 + #, c-format + msgid "install: %s%s\n" + msgstr "" + + #: gcc.c:5987 + #, c-format + msgid "programs: %s\n" + msgstr "" + + #: gcc.c:5988 + #, c-format + msgid "libraries: %s\n" + msgstr "" + + #: gcc.c:6036 + msgid "\nFor bug reporting instructions, please see:\n" + msgstr "" + + #: gcc.c:6052 + #, c-format + msgid "Configured with: %s\n" + msgstr "" + + #: gcc.c:6066 + #, c-format + msgid "Thread model: %s\n" + msgstr "" + + #: gcc.c:6077 + #, c-format + msgid "gcc version %s\n" + msgstr "gcc versie %s\n" + + #: gcc.c:6079 + #, c-format + msgid "gcc driver version %s executing gcc version %s\n" + msgstr "gcc stuurprogramma versie %s voert gcc versie %s uit\n" + + #: gcc.c:6087 + #, fuzzy + msgid "no input files" + msgstr "Geen invoerbestanden" + + #: gcc.c:6125 + #, c-format + msgid "%s: %s compiler not installed on this system" + msgstr "%s: %s compiler niet geïnstalleerd op dit systeem" + + #: gcc.c:6200 + #, c-format + msgid "%s: linker input file unused because linking not done" + msgstr "" + + #: gcc.c:6243 + #, c-format + msgid "language %s not recognized" + msgstr "taal %s niet herkend" + + #: gcc.c:6346 + msgid "internal gcc abort" + msgstr "" + + #: gcov.c:282 + #, fuzzy + msgid "Internal gcov abort.\n" + msgstr "Interne abort van gcc." + + #: gcov.c:295 + msgid "Usage: gcov [OPTION]... SOURCEFILE\n\n" + msgstr "" + + #: gcov.c:296 + msgid "Print code coverage information.\n\n" + msgstr "" + + #: gcov.c:297 + msgid " -h, --help Print this help, then exit\n" + msgstr "" + + #: gcov.c:298 + msgid " -v, --version Print version number, then exit\n" + msgstr "" + + #: gcov.c:299 + msgid " -b, --branch-probabilities Include branch probabilities in output\n" + msgstr "" + + #: gcov.c:300 + msgid "" + " -c, --branch-counts Given counts of branches taken\n" + " rather than percentages\n" + msgstr "" + + #: gcov.c:302 + msgid " -n, --no-output Do not create an output file\n" + msgstr "" + + #: gcov.c:303 + msgid "" + " -l, --long-file-names Use long output file names for included\n" + " source files\n" + msgstr "" + + #: gcov.c:305 + msgid " -f, --function-summaries Output summaries for each function\n" + msgstr "" + + #: gcov.c:306 + msgid " -o, --object-directory OBJDIR Search for object files in OBJDIR\n" + msgstr "" + + #: gcov.c:307 + #, c-format + msgid "" + "\n" + "For bug reporting instructions, please see:\n" + "%s.\n" + msgstr "" + + #: gcov.c:317 + #, c-format + msgid "gcov (GCC) %s\n" + msgstr "" + + #: gcov.c:318 + msgid "Copyright (C) 2001 Free Software Foundation, Inc.\n" + msgstr "" + + #: gcov.c:462 + #, c-format + msgid "Could not open basic block file %s.\n" + msgstr "" + + #: gcov.c:471 + #, c-format + msgid "Could not open data file %s.\n" + msgstr "" + + #: gcov.c:472 + msgid "Assuming that all execution counts are zero.\n" + msgstr "" + + #: gcov.c:478 + #, c-format + msgid "Could not open program flow graph file %s.\n" + msgstr "" + + #: gcov.c:489 + #, c-format + msgid "No executable code associated with file %s.\n" + msgstr "" + + #: gcov.c:789 + msgid ".da file contents exhausted too early\n" + msgstr "" + + #: gcov.c:792 + msgid ".da file contents not exhausted\n" + msgstr "" + + #: gcov.c:973 + #, c-format + msgid "%6.2f%% of %d source lines executed in function %s\n" + msgstr "" + + #: gcov.c:977 + #, c-format + msgid "No executable source lines in function %s\n" + msgstr "" + + #: gcov.c:984 + #, c-format + msgid "%6.2f%% of %d branches executed in function %s\n" + msgstr "" + + #: gcov.c:988 + #, c-format + msgid "%6.2f%% of %d branches taken at least once in function %s\n" + msgstr "" + + #: gcov.c:993 + #, c-format + msgid "No branches in function %s\n" + msgstr "" + + #: gcov.c:995 + #, c-format + msgid "%6.2f%% of %d calls executed in function %s\n" + msgstr "" + + #: gcov.c:999 + #, c-format + msgid "No calls in function %s\n" + msgstr "" + + #: gcov.c:1126 + #, c-format + msgid "didn't use all bb entries of graph, function %s\n" + msgstr "" + + #: gcov.c:1128 + #, c-format + msgid "block_num = %ld, num_blocks = %d\n" + msgstr "" + + #: gcov.c:1166 + #, c-format + msgid "ERROR: too many basic blocks in .bb file %s\n" + msgstr "" + + #: gcov.c:1243 + #, c-format + msgid "%6.2f%% of %d source lines executed in file %s\n" + msgstr "" + + #: gcov.c:1247 + #, c-format + msgid "No executable source lines in file %s\n" + msgstr "" + + #: gcov.c:1254 + #, c-format + msgid "%6.2f%% of %d branches executed in file %s\n" + msgstr "" + + #: gcov.c:1258 + #, c-format + msgid "%6.2f%% of %d branches taken at least once in file %s\n" + msgstr "" + + #: gcov.c:1263 + #, c-format + msgid "No branches in file %s\n" + msgstr "" + + #: gcov.c:1265 + #, c-format + msgid "%6.2f%% of %d calls executed in file %s\n" + msgstr "" + + #: gcov.c:1269 + #, c-format + msgid "No calls in file %s\n" + msgstr "" + + #: gcov.c:1281 + #, c-format + msgid "Could not open source file %s.\n" + msgstr "" + + #: gcov.c:1331 + #, c-format + msgid "Could not open output file %s.\n" + msgstr "" + + #: gcov.c:1339 + #, c-format + msgid "Creating %s.\n" + msgstr "" + + #: gcov.c:1387 + #, c-format + msgid "call %d never executed\n" + msgstr "" + + #: gcov.c:1396 + #, c-format + msgid "call %d returns = %s\n" + msgstr "" + + #: gcov.c:1406 + #, c-format + msgid "call %d returns = %s%%\n" + msgstr "" + + #: gcov.c:1413 + #, c-format + msgid "branch %d never executed\n" + msgstr "" + + #: gcov.c:1423 + #, c-format + msgid "branch %d taken = %s\n" + msgstr "" + + #: gcov.c:1433 + #, c-format + msgid "branch %d taken = %s%%\n" + msgstr "" + + #: gcov.c:1444 + #, c-format + msgid "Unexpected EOF while reading source file %s.\n" + msgstr "" + + #: gcse.c:757 + #, c-format + msgid "GCSE disabled: %d > 1000 basic blocks and %d >= 20 edges/basic block" + msgstr "" + + #: gcse.c:769 + #, c-format + msgid "GCSE disabled: %d basic blocks and %d registers" + msgstr "" + + #: ch/grant.c:2652 ch/lex.c:212 ch/lex.c:2189 f/com.c:14249 graph.c:421 + #: java/jcf-parse.c:981 java/jcf-parse.c:1133 java/lex.c:1782 + #: objc/objc-act.c:529 profile.c:950 profile.c:958 toplev.c:1845 toplev.c:4954 + #, fuzzy, c-format + msgid "can't open %s" + msgstr "open %s" + + #: haifa-sched.c:190 + #, c-format + msgid "fix_sched_param: unknown param: %s" + msgstr "" + + #: integrate.c:185 + #, fuzzy + msgid "function cannot be inline" + msgstr "de terugkeerwaarde van een functie kan geen funtie zijn" + + #: integrate.c:190 + msgid "varargs function cannot be inline" + msgstr "" + + #: integrate.c:193 + msgid "function using alloca cannot be inline" + msgstr "" + + #: integrate.c:196 + #, fuzzy + msgid "function using setjmp cannot be inline" + msgstr "de terugkeerwaarde van een functie kan geen funtie zijn" + + #: integrate.c:199 + msgid "function uses __builtin_eh_return" + msgstr "" + + #: integrate.c:202 + msgid "function with nested functions cannot be inline" + msgstr "" + + #: integrate.c:206 + msgid "function with label addresses used in initializers cannot inline" + msgstr "" + + #: integrate.c:213 integrate.c:257 + msgid "function too large to be inline" + msgstr "" + + #: integrate.c:223 + msgid "no prototype, and parameter address used; cannot be inline" + msgstr "" + + #: integrate.c:230 integrate.c:275 + msgid "inline functions not supported for this return value type" + msgstr "" + + #: integrate.c:235 + msgid "function with varying-size return value cannot be inline" + msgstr "" + + #: integrate.c:242 + msgid "function with varying-size parameter cannot be inline" + msgstr "" + + #: integrate.c:245 + msgid "function with transparent unit parameter cannot be inline" + msgstr "" + + #: integrate.c:264 + msgid "function with computed jump cannot inline" + msgstr "" + + #: integrate.c:268 + msgid "function with nonlocal goto cannot be inline" + msgstr "" + + #: integrate.c:282 + msgid "function with target specific attribute(s) cannot be inlined" + msgstr "" + + #: line-map.c:198 + #, fuzzy, c-format + msgid "In file included from %s:%u" + msgstr "In bestand ingevoegd door " + + #. Translators note: this message is used in conjunction + #. with "In file included from %s:%ld" and some other + #. tricks. We want something like this: + #. + #. | In file included from sys/select.h:123, + #. | from sys/types.h:234, + #. | from userfile.c:31: + #. | bits/select.h:45: + #. + #. with all the "from"s lined up. + #. The trailing comma is at the beginning of this message, + #. and the trailing colon is not translated. + #: line-map.c:216 + #, fuzzy, c-format + msgid "" + ",\n" + " from %s:%u" + msgstr "" + ",\n" + " door " + + #. If we didn't find this parameter, issue an error message. + #: params.c:80 + #, fuzzy, c-format + msgid "invalid parameter `%s'" + msgstr "ongeldige macronaam `%.*s'" + + #: profile.c:429 + #, c-format + msgid "corrupted profile info: prob for %d-%d thought to be %d" + msgstr "" + + #: profile.c:975 + #, c-format + msgid "file %s not found, execution counts assumed to be zero" + msgstr "" + + #: profile.c:1022 + msgid ".da file contents exhausted too early" + msgstr "" + + #: profile.c:1025 + msgid ".da file contents not exhausted" + msgstr "" + + #: protoize.c:593 + #, c-format + msgid "%s: internal abort\n" + msgstr "" + + #: protoize.c:684 + #, c-format + msgid "%s: error writing file `%s': %s\n" + msgstr "" + + #: protoize.c:729 + #, c-format + msgid "%s: usage '%s [ -VqfnkN ] [ -i ] [ filename ... ]'\n" + msgstr "" + + #: protoize.c:732 + #, c-format + msgid "%s: usage '%s [ -VqfnkNlgC ] [ -B ] [ filename ... ]'\n" + msgstr "" + + #: protoize.c:839 + #, c-format + msgid "%s: warning: no read access for file `%s'\n" + msgstr "" + + #: protoize.c:847 + #, c-format + msgid "%s: warning: no write access for file `%s'\n" + msgstr "" + + #: protoize.c:855 + #, c-format + msgid "%s: warning: no write access for dir containing `%s'\n" + msgstr "" + + #. Catch cases like /.. where we try to backup to a + #. point above the absolute root of the logical file + #. system. + #: protoize.c:1273 + #, c-format + msgid "%s: invalid file name: %s\n" + msgstr "" + + #: protoize.c:1425 + #, c-format + msgid "%s: %s: can't get status: %s\n" + msgstr "" + + #: protoize.c:1446 + #, c-format + msgid "\n%s: fatal error: aux info file corrupted at line %d\n" + msgstr "" + + #: protoize.c:1782 + #, c-format + msgid "%s:%d: declaration of function `%s' takes different forms\n" + msgstr "" + + #: protoize.c:2040 + #, c-format + msgid "%s: compiling `%s'\n" + msgstr "" + + #: protoize.c:2063 + #, c-format + msgid "%s: wait: %s\n" + msgstr "" + + #: protoize.c:2068 + #, c-format + msgid "%s: subprocess got fatal signal %d\n" + msgstr "" + + #: protoize.c:2076 + #, c-format + msgid "%s: %s exited with status %d\n" + msgstr "" + + #: protoize.c:2128 + #, c-format + msgid "%s: warning: missing SYSCALLS file `%s'\n" + msgstr "" + + #: protoize.c:2137 protoize.c:2166 + #, c-format + msgid "%s: can't read aux info file `%s': %s\n" + msgstr "" + + #: protoize.c:2182 protoize.c:2210 + #, c-format + msgid "%s: can't get status of aux info file `%s': %s\n" + msgstr "" + + #: protoize.c:2238 + #, c-format + msgid "%s: can't open aux info file `%s' for reading: %s\n" + msgstr "" + + #: protoize.c:2256 + #, c-format + msgid "%s: error reading aux info file `%s': %s\n" + msgstr "" + + #: protoize.c:2269 + #, c-format + msgid "%s: error closing aux info file `%s': %s\n" + msgstr "" + + #: protoize.c:2285 + #, c-format + msgid "%s: can't delete aux info file `%s': %s\n" + msgstr "" + + #: protoize.c:2367 protoize.c:4369 + #, c-format + msgid "%s: can't delete file `%s': %s\n" + msgstr "" + + #: protoize.c:2446 + #, c-format + msgid "%s: warning: can't rename file `%s' to `%s': %s\n" + msgstr "" + + #: protoize.c:2571 + #, c-format + msgid "%s: conflicting extern definitions of '%s'\n" + msgstr "" + + #: protoize.c:2575 + #, c-format + msgid "%s: declarations of '%s' will not be converted\n" + msgstr "" + + #: protoize.c:2577 + #, c-format + msgid "%s: conflict list for '%s' follows:\n" + msgstr "" + + #: protoize.c:2610 + #, c-format + msgid "%s: warning: using formals list from %s(%d) for function `%s'\n" + msgstr "" + + #: protoize.c:2650 + #, c-format + msgid "%s: %d: `%s' used but missing from SYSCALLS\n" + msgstr "" + + #: protoize.c:2656 + #, c-format + msgid "%s: %d: warning: no extern definition for `%s'\n" + msgstr "" + + #: protoize.c:2687 + #, c-format + msgid "%s: warning: no static definition for `%s' in file `%s'\n" + msgstr "" + + #: protoize.c:2693 + #, c-format + msgid "%s: multiple static defs of `%s' in file `%s'\n" + msgstr "" + + #: protoize.c:2866 protoize.c:2869 + #, c-format + msgid "%s: %d: warning: source too confusing\n" + msgstr "" + + #: protoize.c:3075 + #, c-format + msgid "%s: %d: warning: varargs function declaration not converted\n" + msgstr "" + + #: protoize.c:3090 + #, c-format + msgid "%s: declaration of function `%s' not converted\n" + msgstr "" + + #: protoize.c:3213 + #, c-format + msgid "%s: warning: too many parameter lists in declaration of `%s'\n" + msgstr "" + + #: protoize.c:3234 + #, c-format + msgid "\n%s: warning: too few parameter lists in declaration of `%s'\n" + msgstr "" + + #: protoize.c:3332 + #, c-format + msgid "%s: %d: warning: found `%s' but expected `%s'\n" + msgstr "" + + #: protoize.c:3510 + #, c-format + msgid "%s: local declaration for function `%s' not inserted\n" + msgstr "" + + #: protoize.c:3537 + #, c-format + msgid "\n%s: %d: warning: can't add declaration of `%s' into macro call\n" + msgstr "" + + #: protoize.c:3611 + #, c-format + msgid "%s: global declarations for file `%s' not inserted\n" + msgstr "" + + #: protoize.c:3702 protoize.c:3732 + #, c-format + msgid "%s: definition of function `%s' not converted\n" + msgstr "" + + #: protoize.c:3721 + #, c-format + msgid "%s: %d: warning: definition of %s not converted\n" + msgstr "" + + #: protoize.c:4051 + #, c-format + msgid "%s: found definition of `%s' at %s(%d)\n" + msgstr "" + + #. If we make it here, then we did not know about this + #. function definition. + #: protoize.c:4067 + #, c-format + msgid "%s: %d: warning: `%s' excluded by preprocessing\n" + msgstr "" + + #: protoize.c:4070 + #, c-format + msgid "%s: function definition not converted\n" + msgstr "" + + #: protoize.c:4129 + #, c-format + msgid "%s: `%s' not converted\n" + msgstr "" + + #: protoize.c:4137 + #, c-format + msgid "%s: would convert file `%s'\n" + msgstr "" + + #: protoize.c:4140 + #, c-format + msgid "%s: converting file `%s'\n" + msgstr "" + + #: protoize.c:4150 + #, c-format + msgid "%s: can't get status for file `%s': %s\n" + msgstr "" + + #: protoize.c:4192 + #, c-format + msgid "%s: can't open file `%s' for reading: %s\n" + msgstr "" + + #: protoize.c:4207 + #, c-format + msgid "\n%s: error reading input file `%s': %s\n" + msgstr "" + + #: protoize.c:4241 + #, c-format + msgid "%s: can't create/open clean file `%s': %s\n" + msgstr "" + + #: protoize.c:4346 + #, c-format + msgid "%s: warning: file `%s' already saved in `%s'\n" + msgstr "" + + #: protoize.c:4354 + #, fuzzy, c-format + msgid "%s: can't link file `%s' to `%s': %s\n" + msgstr "kan oproep van `%s' niet inline maken" + + #: protoize.c:4384 + #, c-format + msgid "%s: can't create/open output file `%s': %s\n" + msgstr "" + + #: protoize.c:4417 + #, c-format + msgid "%s: can't change mode of file `%s': %s\n" + msgstr "" + + #: protoize.c:4592 + #, c-format + msgid "%s: cannot get working directory: %s\n" + msgstr "" + + #: protoize.c:4690 + #, c-format + msgid "%s: input file names must have .c suffixes: %s\n" + msgstr "" + + #: real.c:824 real.c:1001 + msgid "conversion from NaN to int" + msgstr "" + + #: real.c:847 + msgid "conversion from NaN to unsigned int" + msgstr "" + + #: real.c:2730 + msgid "floating point overflow" + msgstr "" + + #: real.c:4395 real.c:6675 real.c:6756 + msgid "overflow on truncation to integer" + msgstr "" + + #: real.c:4467 + msgid "overflow on truncation to unsigned integer" + msgstr "" + + #: real.c:5812 + #, c-format + msgid "%s: argument domain error" + msgstr "" + + #: real.c:5813 + #, c-format + msgid "%s: function singularity" + msgstr "" + + #: real.c:5814 + #, c-format + msgid "%s: overflow range error" + msgstr "" + + #: real.c:5815 + #, c-format + msgid "%s: underflow range error" + msgstr "" + + #: real.c:5816 + #, c-format + msgid "%s: total loss of precision" + msgstr "" + + #: real.c:5817 + #, c-format + msgid "%s: partial loss of precision" + msgstr "" + + #: real.c:5818 + #, c-format + msgid "%s: NaN - producing operation" + msgstr "" + + #: reg-stack.c:677 + #, c-format + msgid "output constraint %d must specify a single register" + msgstr "" + + #: reg-stack.c:687 + #, c-format + msgid "output constraint %d cannot be specified together with \"%s\" clobber" + msgstr "" + + #: reg-stack.c:710 + msgid "output regs must be grouped at top of stack" + msgstr "" + + #: reg-stack.c:747 + msgid "implicitly popped regs must be grouped at top of stack" + msgstr "" + + #: reg-stack.c:766 + #, c-format + msgid "output operand %d must use `&' constraint" + msgstr "" + + #: regclass.c:778 + #, c-format + msgid "can't use '%s' as a %s register" + msgstr "" + + #: config/ia64/ia64.c:3856 config/ia64/ia64.c:3863 regclass.c:793 + #, c-format + msgid "unknown register name: %s" + msgstr "" + + #: regclass.c:804 + msgid "global register variable follows a function definition" + msgstr "globale registervariabele volgt op een functiedefinitie" + + #: regclass.c:808 + msgid "register used for two global register variables" + msgstr "" + + #: regclass.c:813 + msgid "call-clobbered register used for global register variable" + msgstr "" + + #: regrename.c:1821 + #, c-format + msgid "validate_value_data: [%u] Bad next_regno for empty chain (%u)" + msgstr "" + + #: regrename.c:1833 + #, c-format + msgid "validate_value_data: Loop in regno chain (%u)" + msgstr "" + + #: regrename.c:1836 + #, c-format + msgid "validate_value_data: [%u] Bad oldest_regno (%u)" + msgstr "" + + #: regrename.c:1848 + #, c-format + msgid "validate_value_data: [%u] Non-empty reg in chain (%s %u %i)" + msgstr "" + + #: reload.c:1207 + msgid "cannot reload integer constant operand in `asm'" + msgstr "" + + #: reload.c:1229 + msgid "impossible register constraint in `asm'" + msgstr "" + + #: reload.c:3387 + msgid "`&' constraint used with no register class" + msgstr "" + + #: reload.c:3555 + msgid "unable to generate reloads for:" + msgstr "" + + #: reload.c:3556 reload.c:3770 + msgid "inconsistent operand constraints in an `asm'" + msgstr "" + + #: reload1.c:1242 + msgid "frame size too large for reliable stack checking" + msgstr "" + + #: reload1.c:1245 + msgid "try reducing the number of local variables" + msgstr "" + + #: reload1.c:1892 + #, c-format + msgid "can't find a register in class `%s' while reloading `asm'" + msgstr "" + + #: reload1.c:1896 + #, c-format + msgid "unable to find a register to spill in class `%s'" + msgstr "" + + #: reload1.c:1898 + #, fuzzy + msgid "this is the insn:" + msgstr "dit is het eerste ELSE-label" + + #: reload1.c:3917 + msgid "`asm' operand requires impossible reload" + msgstr "" + + #. It's the compiler's fault. + #: reload1.c:5033 + msgid "could not find a spill register" + msgstr "" + + #: reload1.c:5038 + msgid "`asm' operand constraint incompatible with operand size" + msgstr "" + + #. It's the compiler's fault. + #: reload1.c:6629 + msgid "VOIDmode on an output" + msgstr "" + + #: reload1.c:6630 + msgid "output operand is constant in `asm'" + msgstr "" + + #: rtl-error.c:139 + #, fuzzy + msgid "unrecognizable insn:" + msgstr "signature-string niet herkend" + + #: rtl-error.c:141 + msgid "insn does not satisfy its constraints:" + msgstr "" + + #: rtl.c:707 + #, c-format + msgid "RTL check: access of elt %d of `%s' with last elt %d in %s, at %s:%d" + msgstr "" + + #: rtl.c:722 + #, c-format + msgid "RTL check: expected elt %d type '%c', have '%c' (rtx %s) in %s, at %s:%d" + msgstr "" + + #: rtl.c:738 + #, c-format + msgid "RTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s) in %s, at %s:%d" + msgstr "" + + #: rtl.c:751 + #, c-format + msgid "RTL check: expected code `%s', have `%s' in %s, at %s:%d" + msgstr "" + + #: rtl.c:765 + #, c-format + msgid "RTL check: expected code `%s' or `%s', have `%s' in %s, at %s:%d" + msgstr "" + + #: rtl.c:780 + #, c-format + msgid "RTL check: access of elt %d of vector with last elt %d in %s, at %s:%d" + msgstr "" + + #: stmt.c:927 + #, c-format + msgid "jump to `%s' invalidly jumps into binding contour" + msgstr "" + + #: stmt.c:1163 stmt.c:3895 + #, c-format + msgid "label `%s' used before containing binding contour" + msgstr "" + + #: stmt.c:1343 + msgid "output operand constraint lacks `='" + msgstr "" + + #: stmt.c:1358 + #, c-format + msgid "output constraint `%c' for operand %d is not at the beginning" + msgstr "" + + #: stmt.c:1380 + msgid "operand constraint contains incorrectly positioned '+' or '='" + msgstr "" + + #: stmt.c:1386 stmt.c:1486 + #, c-format + msgid "`%%' constraint used with last operand" + msgstr "" + + #: stmt.c:1405 + msgid "matching constraint not valid in output operand" + msgstr "" + + #: stmt.c:1477 + #, c-format + msgid "input operand constraint contains `%c'" + msgstr "" + + #: stmt.c:1517 + msgid "matching constraint references invalid operand number" + msgstr "" + + #: stmt.c:1549 + #, c-format + msgid "invalid punctuation `%c' in constraint" + msgstr "" + + #: stmt.c:1645 + #, c-format + msgid "unknown register name `%s' in `asm'" + msgstr "" + + #: stmt.c:1689 + #, c-format + msgid "more than %d operands in `asm'" + msgstr "" + + #: stmt.c:1748 + #, c-format + msgid "output number %d not directly addressable" + msgstr "" + + #. ??? Leave this only until we have experience with what + #. happens in combine and elsewhere when constraints are + #. not satisfied. + #: stmt.c:1817 stmt.c:1846 + #, c-format + msgid "asm operand %d probably doesn't match constraints" + msgstr "" + + #: stmt.c:1992 + msgid "too many alternatives in `asm'" + msgstr "" + + #: stmt.c:2004 + msgid "operand constraints for `asm' differ in number of alternatives" + msgstr "" + + #: stmt.c:2057 + #, fuzzy, c-format + msgid "duplicate asm operand name '%s'" + msgstr "herhaald lid `%s'" + + #: stmt.c:2144 + msgid "missing close brace for named operand" + msgstr "" + + #: stmt.c:2164 + #, fuzzy, c-format + msgid "undefined named operand '%s'" + msgstr "ongeldige operand van %s" + + #: stmt.c:3832 + #, c-format + msgid "unused variable `%s'" + msgstr "" + + #: stmt.c:5284 + #, c-format + msgid "enumeration value `%s' not handled in switch" + msgstr "" + + #: stmt.c:5310 stmt.c:5330 + #, c-format + msgid "case value `%ld' not in enumerated type" + msgstr "" + + #: stmt.c:5313 stmt.c:5333 + #, c-format + msgid "case value `%ld' not in enumerated type `%s'" + msgstr "" + + #: stor-layout.c:172 + msgid "type size can't be explicitly evaluated" + msgstr "" + + #: stor-layout.c:174 + msgid "variable-size type declared outside of any function" + msgstr "" + + #: stor-layout.c:455 + #, fuzzy, c-format + msgid "size of `%s' is %d bytes" + msgstr "grootte van `%s' is %u bytes" + + #: stor-layout.c:457 + #, fuzzy, c-format + msgid "size of `%s' is larger than %d bytes" + msgstr "grootte van `%s' is %u bytes" + + #: stor-layout.c:836 stor-layout.c:1089 + #, c-format + msgid "packed attribute causes inefficient alignment for `%s'" + msgstr "" + + #: stor-layout.c:838 stor-layout.c:1091 + #, c-format + msgid "packed attribute is unnecessary for `%s'" + msgstr "" + + #: stor-layout.c:853 + #, c-format + msgid "padding struct to align `%s'" + msgstr "" + + #: stor-layout.c:1053 + msgid "padding struct size to alignment boundary" + msgstr "" + + #: stor-layout.c:1096 + msgid "packed attribute causes inefficient alignment" + msgstr "" + + #: stor-layout.c:1098 + msgid "packed attribute is unnecessary" + msgstr "" + + #: timevar.c:448 + msgid "\nExecution times (seconds)\n" + msgstr "" + + #. Print total time. + #: timevar.c:498 + #, fuzzy + msgid " TOTAL :" + msgstr "" + ",\n" + " door " + + #: timevar.c:534 + #, c-format + msgid "time in %s: %ld.%06ld (%ld%%)\n" + msgstr "" + + #: tlink.c:428 + #, fuzzy, c-format + msgid "collect: reading %s\n" + msgstr "collect2 versie %s" + + #: tlink.c:532 + #, fuzzy, c-format + msgid "collect: recompiling %s\n" + msgstr "collect2 versie %s" + + #: tlink.c:698 + #, fuzzy, c-format + msgid "collect: tweaking %s in %s\n" + msgstr "collect2 versie %s" + + #: tlink.c:745 + msgid "collect: relinking\n" + msgstr "" + + #: tlink.c:754 + #, c-format + msgid "ld returned %d exit status" + msgstr "ld gaf exit-status %d terug" + + #: toplev.c:913 + msgid "Generate debugging info in default format" + msgstr "" + + #: toplev.c:914 + msgid "Generate debugging info in default extended format" + msgstr "" + + #: toplev.c:916 + msgid "Generate STABS format debug info" + msgstr "" + + #: toplev.c:917 + msgid "Generate extended STABS format debug info" + msgstr "" + + #: toplev.c:920 + msgid "Generate DWARF-1 format debug info" + msgstr "" + + #: toplev.c:922 + msgid "Generate extended DWARF-1 format debug info" + msgstr "" + + #: toplev.c:925 + msgid "Generate DWARF-2 debug info" + msgstr "" + + #: toplev.c:928 + msgid "Generate XCOFF format debug info" + msgstr "" + + #: toplev.c:929 + msgid "Generate extended XCOFF format debug info" + msgstr "" + + #: toplev.c:932 + msgid "Generate COFF format debug info" + msgstr "" + + #: toplev.c:976 + msgid "Perform DWARF2 duplicate elimination" + msgstr "" + + #: toplev.c:978 + msgid "Do not store floats in registers" + msgstr "" + + #: toplev.c:980 + msgid "Consider all mem refs through pointers as volatile" + msgstr "" + + #: toplev.c:982 + msgid "Consider all mem refs to global data to be volatile" + msgstr "" + + #: toplev.c:984 + msgid "Consider all mem refs to static data to be volatile" + msgstr "" + + #: toplev.c:986 + msgid "Defer popping functions args from stack until later" + msgstr "" + + #: toplev.c:988 + msgid "When possible do not generate stack frames" + msgstr "" + + #: toplev.c:990 + msgid "Optimize sibling and tail recursive calls" + msgstr "" + + #: toplev.c:992 + msgid "When running CSE, follow jumps to their targets" + msgstr "" + + #: toplev.c:994 + msgid "When running CSE, follow conditional jumps" + msgstr "" + + #: toplev.c:996 + msgid "Perform a number of minor, expensive optimizations" + msgstr "" + + #: toplev.c:998 + msgid "Perform jump threading optimizations" + msgstr "" + + #: toplev.c:1000 + msgid "Perform strength reduction optimizations" + msgstr "" + + #: toplev.c:1002 + msgid "Perform loop unrolling when iteration count is known" + msgstr "" + + #: toplev.c:1004 + msgid "Perform loop unrolling for all loops" + msgstr "" + + #: toplev.c:1006 + msgid "Generate prefetch instructions, if available, for arrays in loops" + msgstr "" + + #: toplev.c:1008 + msgid "Force all loop invariant computations out of loops" + msgstr "" + + #: toplev.c:1010 + msgid "Strength reduce all loop general induction variables" + msgstr "" + + #: toplev.c:1012 + msgid "Store strings in writable data section" + msgstr "" + + #: toplev.c:1014 + msgid "Enable machine specific peephole optimizations" + msgstr "" + + #: toplev.c:1016 + msgid "Copy memory operands into registers before using" + msgstr "" + + #: toplev.c:1018 + msgid "Copy memory address constants into regs before using" + msgstr "" + + #: toplev.c:1020 + msgid "Allow function addresses to be held in registers" + msgstr "" + + #: toplev.c:1022 + msgid "Integrate simple functions into their callers" + msgstr "" + + #: toplev.c:1024 + msgid "Generate code for funcs even if they are fully inlined" + msgstr "" + + #: toplev.c:1026 + msgid "Pay attention to the 'inline' keyword" + msgstr "" + + #: toplev.c:1028 + msgid "Emit static const variables even if they are not used" + msgstr "" + + #: toplev.c:1030 + msgid "Check for syntax errors, then stop" + msgstr "" + + #: toplev.c:1032 + msgid "Mark data as shared rather than private" + msgstr "" + + #: toplev.c:1034 + msgid "Enable saving registers around function calls" + msgstr "" + + #: toplev.c:1036 + msgid "Return 'short' aggregates in memory, not registers" + msgstr "" + + #: toplev.c:1038 + msgid "Return 'short' aggregates in registers" + msgstr "" + + #: toplev.c:1040 + msgid "Attempt to fill delay slots of branch instructions" + msgstr "" + + #: toplev.c:1042 + msgid "Perform the global common subexpression elimination" + msgstr "" + + #: toplev.c:1044 + msgid "Perform enhanced load motion during global subexpression elimination" + msgstr "" + + #: toplev.c:1046 + msgid "Perform store motion after global subexpression elimination" + msgstr "" + + #: toplev.c:1048 + msgid "Run CSE pass after loop optimizations" + msgstr "" + + #: toplev.c:1050 + msgid "Run the loop optimizer twice" + msgstr "" + + #: toplev.c:1052 + msgid "Delete useless null pointer checks" + msgstr "" + + #: toplev.c:1054 + msgid "Pretend that host and target use the same FP format" + msgstr "" + + #: toplev.c:1056 + msgid "Reschedule instructions before register allocation" + msgstr "" + + #: toplev.c:1058 + msgid "Reschedule instructions after register allocation" + msgstr "" + + #: toplev.c:1060 + msgid "Enable scheduling across basic blocks" + msgstr "" + + #: toplev.c:1062 + msgid "Allow speculative motion of non-loads" + msgstr "" + + #: toplev.c:1064 + msgid "Allow speculative motion of some loads" + msgstr "" + + #: toplev.c:1066 + msgid "Allow speculative motion of more loads" + msgstr "" + + #: toplev.c:1068 + msgid "Replace add,compare,branch with branch on count reg" + msgstr "" + + #: toplev.c:1070 + #, fuzzy + msgid "Generate position independent code, if possible" + msgstr "Positie-onafhankelijke code wordt niet ondersteund. Genegeerd" + + #: toplev.c:1073 + msgid "Enable exception handling" + msgstr "" + + #: toplev.c:1075 + msgid "Just generate unwind tables for exception handling" + msgstr "" + + #: toplev.c:1077 + msgid "Generate unwind tables exact at each instruction boundary" + msgstr "" + + #: toplev.c:1079 + msgid "Support synchronous non-call exceptions" + msgstr "" + + #: toplev.c:1081 + msgid "Insert arc based program profiling code" + msgstr "" + + #: toplev.c:1083 + msgid "Create data files needed by gcov" + msgstr "" + + #: toplev.c:1085 + msgid "Use profiling information for branch probabilities" + msgstr "" + + #: toplev.c:1087 + msgid "Reorder basic blocks to improve code placement" + msgstr "" + + #: toplev.c:1089 + msgid "Do the register renaming optimization pass" + msgstr "" + + #: toplev.c:1091 + msgid "Do the register copy-propagation optimization pass" + msgstr "" + + #: toplev.c:1093 + msgid "Do not put uninitialized globals in the common section" + msgstr "" + + #: toplev.c:1095 + msgid "Do not generate .size directives" + msgstr "" + + #: toplev.c:1097 + #, fuzzy + msgid "place each function into its own section" + msgstr "keer vermeld voor elke functie waarin hij staat.)" + + #: toplev.c:1099 + msgid "place data items into their own section" + msgstr "" + + #: toplev.c:1101 + msgid "Add extra commentry to assembler output" + msgstr "" + + #: toplev.c:1103 + msgid "Output GNU ld formatted global initializers" + msgstr "" + + #: toplev.c:1105 + msgid "Enables a register move optimization" + msgstr "" + + #: toplev.c:1107 + msgid "Do the full regmove optimization pass" + msgstr "" + + #: toplev.c:1109 + msgid "Pack structure members together without holes" + msgstr "" + + #: toplev.c:1111 + msgid "Insert stack checking code into the program" + msgstr "" + + #: toplev.c:1113 + msgid "Specify that arguments may alias each other & globals" + msgstr "" + + #: toplev.c:1115 + msgid "Assume arguments may alias globals but not each other" + msgstr "" + + #: toplev.c:1117 + msgid "Assume arguments do not alias each other or globals" + msgstr "" + + #: toplev.c:1119 + msgid "Assume strict aliasing rules apply" + msgstr "" + + #: toplev.c:1121 + msgid "Align the start of loops" + msgstr "" + + #: toplev.c:1123 + msgid "Align labels which are only reached by jumping" + msgstr "" + + #: toplev.c:1125 + msgid "Align all labels" + msgstr "" + + #: toplev.c:1127 + #, fuzzy + msgid "Align the start of functions" + msgstr "impliciete declaratie van functie `%s'" + + #: toplev.c:1129 + msgid "Attempt to merge identical constants accross compilation units" + msgstr "" + + #: toplev.c:1131 + msgid "Attempt to merge identical constants and constant variables" + msgstr "" + + #: toplev.c:1133 + msgid "Suppress output of instruction numbers and line number notes in debugging dumps" + msgstr "" + + #: toplev.c:1135 + msgid "Instrument function entry/exit with profiling calls" + msgstr "" + + #: toplev.c:1137 + msgid "Enable SSA optimizations" + msgstr "" + + #: toplev.c:1139 + msgid "Enable SSA conditional constant propagation" + msgstr "" + + #: toplev.c:1141 + msgid "Enable aggressive SSA dead code elimination" + msgstr "" + + #: toplev.c:1143 + msgid "External symbols have a leading underscore" + msgstr "" + + #: toplev.c:1145 + #, fuzzy + msgid "Process #ident directives" + msgstr "ongeldig preprocessing-commando" + + #: toplev.c:1147 + msgid "Enables an rtl peephole pass run before sched2" + msgstr "" + + #: toplev.c:1149 + msgid "Enables guessing of branch probabilities" + msgstr "" + + #: toplev.c:1151 + #, fuzzy + msgid "Set errno after built-in math functions" + msgstr "interne fout - slechte ingebouwde functie `%s'" + + #: toplev.c:1153 + #, fuzzy + msgid "Floating-point operations can trap" + msgstr "floating-point constante buiten bereik" + + #: toplev.c:1155 + msgid "Allow math optimizations that may violate IEEE or ANSI standards" + msgstr "" + + #: toplev.c:1157 + msgid "Compile pointers as triples: value, base & end" + msgstr "" + + #: toplev.c:1159 + msgid "Generate code to check bounds before dereferencing pointers and arrays" + msgstr "" + + #: toplev.c:1161 + #, fuzzy + msgid "Convert floating point constant to single precision constant" + msgstr "floating-point fout bij het uitschrijven van een constante" + + #: toplev.c:1163 + msgid "Report time taken by each compiler pass at end of run" + msgstr "" + + #: toplev.c:1165 + msgid "Report on permanent memory allocation at end of run" + msgstr "" + + #: toplev.c:1167 + msgid "Trap for signed overflow in addition / subtraction / multiplication" + msgstr "" + + #: toplev.c:1184 + msgid "Compile just for ISO C89" + msgstr "" + + #: toplev.c:1186 + msgid "Do not promote floats to double if using -traditional" + msgstr "" + + #: toplev.c:1188 + msgid "Determine language standard" + msgstr "" + + #: toplev.c:1192 + msgid "Make bit-fields by unsigned by default" + msgstr "" + + #: toplev.c:1196 + msgid "Make 'char' be signed by default" + msgstr "" + + #: toplev.c:1198 + msgid "Make 'char' be unsigned by default" + msgstr "" + + #: toplev.c:1204 + msgid "Attempt to support traditional K&R style C" + msgstr "" + + #: toplev.c:1210 + msgid "Do not recognize the 'asm' keyword" + msgstr "" + + #: toplev.c:1213 + #, fuzzy + msgid "Do not recognize any built in functions" + msgstr "interne fout - slechte ingebouwde functie `%s'" + + #: toplev.c:1215 + msgid "Assume normal C execution environment" + msgstr "" + + #: toplev.c:1218 + msgid "Assume that standard libraries & main might not exist" + msgstr "" + + #: toplev.c:1221 + msgid "Allow different types as args of ? operator" + msgstr "" + + #: toplev.c:1224 + msgid "Allow the use of $ inside identifiers" + msgstr "" + + #: toplev.c:1229 + msgid "Use the same size for double as for float" + msgstr "" + + #: toplev.c:1232 + msgid "Use the smallest fitting integer to hold enums" + msgstr "" + + #: toplev.c:1235 + msgid "Override the underlying type for wchar_t to `unsigned short'" + msgstr "" + + #: toplev.c:1239 + msgid "Enable most warning messages" + msgstr "" + + #: toplev.c:1241 + #, fuzzy + msgid "Warn about casting functions to incompatible types" + msgstr "parameter wijst naar een onvolledig type" + + #: toplev.c:1245 + #, fuzzy + msgid "Warn about functions which might be candidates for format attributes" + msgstr "deze functie is een mogelijke kandidaat voor het `noreturn' attribuut" + + #: toplev.c:1248 + msgid "Warn about casts which discard qualifiers" + msgstr "" + + #: toplev.c:1251 + #, fuzzy + msgid "Warn about subscripts whose type is 'char'" + msgstr "array subscript is van het type `char'" + + #: toplev.c:1254 toplev.c:1257 + msgid "Warn if nested comments are detected" + msgstr "" + + #: toplev.c:1260 + msgid "Warn about possibly confusing type conversions" + msgstr "" + + #: toplev.c:1263 + msgid "Warn about printf/scanf/strftime/strfmon format anomalies" + msgstr "" + + #: toplev.c:1267 + msgid "Don't warn about strftime formats yielding 2 digit years" + msgstr "" + + #: toplev.c:1270 + #, fuzzy + msgid "Don't warn about too many arguments to format functions" + msgstr "teveel argumenten voor functie" + + #: toplev.c:1272 + #, fuzzy + msgid "Warn about non-string-literal format strings" + msgstr "formaatstring niet beëindigd" + + #: toplev.c:1275 + msgid "Warn about possible security problems with format functions" + msgstr "" + + #: toplev.c:1278 + #, fuzzy + msgid "Warn about implicit function declarations" + msgstr "parameternamen (zonder types) in functiedeclaratie" + + #: toplev.c:1282 + msgid "Warn when a declaration does not specify a type" + msgstr "" + + #: toplev.c:1287 + #, fuzzy + msgid "Warn about the use of the #import directive" + msgstr "lijnnummer buiten bereik in `#line'-commando" + + #: toplev.c:1291 + msgid "Do not warn about using 'long long' when -pedantic" + msgstr "" + + #: toplev.c:1293 + #, fuzzy + msgid "Warn about suspicious declarations of main" + msgstr "geen eerdere declaratie voor `%s'" + + #: toplev.c:1296 + #, fuzzy + msgid "Warn about possibly missing braces around initializers" + msgstr "accolades ontbreken rond beginwaarde" + + #: toplev.c:1299 + #, fuzzy + msgid "Warn about global funcs without previous declarations" + msgstr "sectie van `%s' geeft een conflict met een eerdere declaratie" + + #: toplev.c:1302 + msgid "Warn about global funcs without prototypes" + msgstr "" + + #: toplev.c:1305 + msgid "Warn about use of multicharacter literals" + msgstr "" + + #: toplev.c:1308 + msgid "Warn about externs not at file scope level" + msgstr "" + + #: toplev.c:1311 + msgid "Warn about possible missing parentheses" + msgstr "" + + #: toplev.c:1314 + msgid "Warn about possible violations of sequence point rules" + msgstr "" + + #: toplev.c:1317 + #, fuzzy + msgid "Warn about function pointer arithmetic" + msgstr "pointer naar functie gebruikt in rekensom" + + #: toplev.c:1320 + #, fuzzy + msgid "Warn about multiple declarations of the same object" + msgstr "overbodige herdeclaratie van `%s' in zelfde bereik" + + #: toplev.c:1323 + msgid "Warn about signed/unsigned comparisons" + msgstr "" + + #: toplev.c:1326 + msgid "Warn about testing equality of floating point numbers" + msgstr "" + + #: toplev.c:1329 + msgid "Warn about unrecognized pragmas" + msgstr "" + + #: toplev.c:1332 + #, fuzzy + msgid "Warn about non-prototyped function decls" + msgstr "niet-prototype definitie hier" + + #: toplev.c:1335 + msgid "Warn about constructs whose meaning change in ISO C" + msgstr "" + + #: toplev.c:1338 + #, fuzzy + msgid "Warn when trigraphs are encountered" + msgstr "%lu trigraph(s) tegengekomen" + + #: toplev.c:1343 + #, fuzzy + msgid "Mark strings as 'const char *'" + msgstr "slechte stringconstante" + + #: toplev.c:1473 + msgid "Warn when a function is unused" + msgstr "" + + #: toplev.c:1475 + msgid "Warn when a label is unused" + msgstr "" + + #: toplev.c:1477 + msgid "Warn when a function parameter is unused" + msgstr "" + + #: toplev.c:1479 + msgid "Warn when a variable is unused" + msgstr "" + + #: toplev.c:1481 + msgid "Warn when an expression value is unused" + msgstr "" + + #: toplev.c:1483 + msgid "Do not suppress warnings from system headers" + msgstr "" + + #: toplev.c:1485 + msgid "Treat all warnings as errors" + msgstr "" + + #: toplev.c:1487 + #, fuzzy + msgid "Warn when one local variable shadows another" + msgstr "De locale variabele `insn' heeft de waarde:" + + #: toplev.c:1489 + msgid "Warn about enumerated switches missing a specific case" + msgstr "" + + #: toplev.c:1491 + msgid "Warn about returning structures, unions or arrays" + msgstr "" + + #: toplev.c:1493 + msgid "Warn about pointer casts which increase alignment" + msgstr "" + + #: toplev.c:1495 + msgid "Warn about code that will never be executed" + msgstr "" + + #: toplev.c:1497 + msgid "Warn about uninitialized automatic variables" + msgstr "" + + #: toplev.c:1499 + #, fuzzy + msgid "Warn when an inlined function cannot be inlined" + msgstr "kan functie `main' niet inline maken" + + #: toplev.c:1501 + msgid "Warn when the packed attribute has no effect on struct layout" + msgstr "" + + #: toplev.c:1503 + msgid "Warn when padding is required to align struct members" + msgstr "" + + #: toplev.c:1505 + msgid "Warn when an optimization pass is disabled" + msgstr "" + + #: toplev.c:1507 + msgid "Warn about uses of __attribute__((deprecated)) declarations" + msgstr "" + + #: toplev.c:1509 + #, fuzzy + msgid "Warn about functions which might be candidates for attribute noreturn" + msgstr "deze functie is een mogelijke kandidaat voor het `noreturn' attribuut" + + #: toplev.c:1580 toplev.c:4363 tradcpp.c:781 + #, fuzzy, c-format + msgid "invalid option `%s'" + msgstr "Ongeldige optie `%s'" + + #: toplev.c:1726 + #, fuzzy, c-format + msgid "internal error: %s" + msgstr "interne fout" + + #: toplev.c:2026 + #, c-format + msgid "`%s' used but never defined" + msgstr "" + + #: toplev.c:2029 + #, c-format + msgid "`%s' declared `static' but never defined" + msgstr "" + + #: toplev.c:2051 + #, c-format + msgid "`%s' defined but not used" + msgstr "" + + #: toplev.c:2282 + #, c-format + msgid "invalid register name `%s' for register variable" + msgstr "" + + #: toplev.c:3574 + msgid " -ffixed- Mark as being unavailable to the compiler\n" + msgstr "" + + #: toplev.c:3575 + msgid " -fcall-used- Mark as being corrupted by function calls\n" + msgstr "" + + #: toplev.c:3576 + msgid " -fcall-saved- Mark as being preserved across functions\n" + msgstr "" + + #: toplev.c:3577 + msgid " -finline-limit= Limits the size of inlined functions to \n" + msgstr "" + + #: toplev.c:3578 + msgid " -fmessage-length= Limits diagnostics messages lengths to characters per line. 0 suppresses line-wrapping\n" + msgstr "" + + #: toplev.c:3579 + msgid " -fdiagnostics-show-location=[once | every-line] Indicates how often source location information should be emitted, as prefix, at the beginning of diagnostics when line-wrapping\n" + msgstr "" + + #: toplev.c:3590 + msgid " -O[number] Set optimization level to [number]\n" + msgstr "" + + #: toplev.c:3591 + msgid " -Os Optimize for space rather than speed\n" + msgstr "" + + #: toplev.c:3603 + msgid " -pedantic Issue warnings needed by strict compliance to ISO C\n" + msgstr "" + + #: toplev.c:3604 + msgid " -pedantic-errors Like -pedantic except that errors are produced\n" + msgstr "" + + #: toplev.c:3605 + msgid " -w Suppress warnings\n" + msgstr "" + + #: toplev.c:3606 + msgid " -W Enable extra warnings\n" + msgstr "" + + #: toplev.c:3617 + msgid " -Wunused Enable unused warnings\n" + msgstr "" + + #: toplev.c:3618 + msgid " -Wlarger-than- Warn if an object is larger than bytes\n" + msgstr "" + + #: toplev.c:3619 + msgid " -p Enable function profiling\n" + msgstr "" + + #: toplev.c:3621 + msgid " -a Enable block profiling \n" + msgstr "" + + #: toplev.c:3624 + msgid " -ax Enable jump profiling \n" + msgstr "" + + #: toplev.c:3626 + msgid " -o Place output into \n" + msgstr "" + + #: toplev.c:3627 + msgid "" + " -G Put global and static data smaller than \n" + " bytes into a special section (on some targets)\n" + msgstr "" + + #: toplev.c:3638 + msgid " -aux-info Emit declaration info into \n" + msgstr "" + + #: toplev.c:3639 + msgid " -quiet Do not display functions compiled or elapsed time\n" + msgstr "" + + #: toplev.c:3640 + msgid " -version Display the compiler's version\n" + msgstr "" + + #: toplev.c:3641 + msgid " -d[letters] Enable dumps from specific passes of the compiler\n" + msgstr "" + + #: toplev.c:3642 + msgid " -dumpbase Base name to be used for dumps from specific passes\n" + msgstr "" + + #: toplev.c:3644 + msgid " -fsched-verbose= Set the verbosity level of the scheduler\n" + msgstr "" + + #: toplev.c:3646 + msgid " --help Display this information\n" + msgstr "" + + #: toplev.c:3661 + msgid "\nLanguage specific options:\n" + msgstr "" + + #: toplev.c:3673 + #, c-format + msgid " %-23.23s [undocumented]\n" + msgstr "" + + #: toplev.c:3681 toplev.c:3695 + #, c-format + msgid "\nThere are undocumented %s specific options as well.\n" + msgstr "" + + #: toplev.c:3685 + #, c-format + msgid "\n Options for %s:\n" + msgstr "" + + #: toplev.c:3722 + msgid "\nTarget specific options:\n" + msgstr "" + + #: toplev.c:3736 toplev.c:3755 + #, c-format + msgid " -m%-23.23s [undocumented]\n" + msgstr "" + + #: toplev.c:3764 + msgid "\nThere are undocumented target specific options as well.\n" + msgstr "" + + #: toplev.c:3766 + msgid " They exist, but they are not documented.\n" + msgstr "" + + #: toplev.c:3819 + #, c-format + msgid "unrecognized gcc debugging option: %c" + msgstr "" + + #: toplev.c:3889 + #, fuzzy, c-format + msgid "unrecognized register name `%s'" + msgstr "geen argumenten" + + #: toplev.c:3914 toplev.c:4792 + #, fuzzy, c-format + msgid "unrecognized option `%s'" + msgstr "onbekende formaatspecificatie" + + #: toplev.c:3958 + #, fuzzy + msgid "-Wid-clash-LEN is no longer supported" + msgstr "-pipe wordt niet ondersteund" + + #: toplev.c:4035 + #, c-format + msgid "use -gdwarf -g%d for DWARF v1, level %d" + msgstr "" + + #: toplev.c:4038 + msgid "use -gdwarf-2 for DWARF v2" + msgstr "" + + #: toplev.c:4043 + #, c-format + msgid "ignoring option `%s' due to invalid debug level specification" + msgstr "" + + #: toplev.c:4066 toplev.c:4790 + #, c-format + msgid "`%s': unknown or unsupported -g option" + msgstr "" + + #: toplev.c:4073 + #, c-format + msgid "`%s' ignored, conflicts with `-g%s'" + msgstr "" + + #: toplev.c:4152 + msgid "-param option missing argument" + msgstr "" + + #: toplev.c:4161 + #, fuzzy, c-format + msgid "invalid --param option: %s" + msgstr "Ongeldige optie `%s'" + + #: toplev.c:4173 + #, fuzzy, c-format + msgid "invalid parameter value `%s'" + msgstr "ongeldige registernaam voor `%s'" + + #: toplev.c:4380 + #, fuzzy, c-format + msgid "" + "%s%s%s version %s (%s)\n" + "%s\tcompiled by GNU C version %s.\n" + "%s%s%s version %s (%s) compiled by CC.\n" + msgstr "" + "%s%s%s versie %s (%s) gecompileerd door GNU C versie %s.\n" + "%s%s%s versie %s (%s) gecompileerd door CC.\n" + + #: toplev.c:4436 + msgid "options passed: " + msgstr "meegegeven opties: " + + #: toplev.c:4465 + msgid "options enabled: " + msgstr "ingeschakelde opties: " + + #: toplev.c:4524 + #, fuzzy, c-format + msgid "can't open %s for writing" + msgstr "open %s" + + # Moet 'command line' vertaald worden? + #: toplev.c:4782 + #, fuzzy, c-format + msgid "ignoring command line option '%s'" + msgstr "Foldernaam ontbreekt na command-line optie" + + #: toplev.c:4785 + #, c-format + msgid "(it is valid for %s but not the selected language)" + msgstr "" + + #: toplev.c:4814 + msgid "-Wuninitialized is not supported without -O" + msgstr "-Wuninitialized wordt niet ondersteund zonder -O" + + #: toplev.c:4870 + msgid "instruction scheduling not supported on this target machine" + msgstr "instructie-scheduling wordt niet ondersteund op deze doelmachine" + + #: toplev.c:4874 + msgid "this target machine does not have delayed branches" + msgstr "deze doelmachine heeft geen delayed branches" + + #: toplev.c:4883 + msgid "profiling does not work without a frame pointer" + msgstr "" + + #: toplev.c:4898 + #, c-format + msgid "-f%sleading-underscore not supported on this target machine" + msgstr "-f%sleading-underscore wordt niet ondersteund op deze doelmachine" + + #: toplev.c:4961 + #, fuzzy + msgid "-ffunction-sections not supported for this target" + msgstr "sectie-attributen worden niet ondersteund op dit doelsysteem" + + #: toplev.c:4966 + #, fuzzy + msgid "-fdata-sections not supported for this target" + msgstr "sectie-attributen worden niet ondersteund op dit doelsysteem" + + #: toplev.c:4973 + msgid "-ffunction-sections disabled; it makes profiling impossible" + msgstr "" + + #: toplev.c:4980 + #, fuzzy + msgid "-fprefetch-loop-arrays not supported for this target" + msgstr "sectie-attributen worden niet ondersteund op dit doelsysteem" + + #: toplev.c:4986 + #, fuzzy + msgid "-fprefetch-loop-arrays not supported for this target (try -march switches)" + msgstr "-f%sleading-underscore wordt niet ondersteund op deze doelmachine" + + #: toplev.c:4993 + msgid "-ffunction-sections may affect debugging on some targets" + msgstr "" + + #: toplev.c:5114 + #, c-format + msgid "error writing to %s" + msgstr "" + + #: java/jcf-parse.c:1000 toplev.c:5116 + #, fuzzy, c-format + msgid "error closing %s" + msgstr "#error %s" + + #. It's a float since it contains a point. + #: tradcif.y:231 + #, fuzzy + msgid "floating point numbers not allowed in #if expressions" + msgstr "Floating-point getallen zijn niet toegestaan in #if-expressies" + + #: tradcif.y:277 + msgid "invalid number in #if expression" + msgstr "" + + #: tradcif.y:358 + #, fuzzy + msgid "invalid character constant in #if" + msgstr "niet-beëindigde karakterconstante" + + #: tradcif.y:395 + #, fuzzy + msgid "double quoted strings not allowed in #if expressions" + msgstr "stringconstantes zijn niet toegestaan in #if-expressies" + + #: tradcif.y:408 + #, fuzzy + msgid "invalid token in expression" + msgstr "Ongeldig token in expressie" + + #: tradcif.y:499 + #, fuzzy + msgid "octal character constant does not fit in a byte" + msgstr "karakterconstante te lang" + + #: tradcif.y:520 + #, fuzzy + msgid "hex character constant does not fit in a byte" + msgstr "karakterconstante te lang" + + #: tradcif.y:551 + #, fuzzy + msgid "empty #if expression" + msgstr "Ongeldig token in expressie" + + #: tradcif.y:565 + msgid "Junk after end of expression." + msgstr "Brol na einde van expressie." + + #: tradcpp.c:138 + msgid "macro or #include recursion too deep" + msgstr "" + + #: tradcpp.c:555 + #, c-format + msgid "usage: %s [switches] input output" + msgstr "" + + #: tradcpp.c:571 + #, fuzzy + msgid "-traditional is not supported in C++" + msgstr "-Wuninitialized wordt niet ondersteund zonder -O" + + #: tradcpp.c:573 + msgid "-traditional and -ansi are mutually exclusive" + msgstr "" + + #: tradcpp.c:587 + #, fuzzy + msgid "filename missing after -i option" + msgstr "Bestandsnaam ontbreekt na -o optie" + + #: tradcpp.c:605 + #, fuzzy + msgid "filename missing after -o option" + msgstr "Bestandsnaam ontbreekt na -o optie" + + #: tradcpp.c:664 + #, fuzzy, c-format + msgid "target missing after %s option" + msgstr "Bestandsnaam ontbreekt na %s optie" + + #: tradcpp.c:678 + #, fuzzy, c-format + msgid "filename missing after %s option" + msgstr "Bestandsnaam ontbreekt na %s optie" + + #: tradcpp.c:703 + #, fuzzy, c-format + msgid "macro name missing after -%c option" + msgstr "Macro-naam ontbreekt na -D optie" + + #: tradcpp.c:723 + msgid "-pedantic and -traditional are mutually exclusive" + msgstr "" + + #: tradcpp.c:728 + msgid "-trigraphs and -traditional are mutually exclusive" + msgstr "" + + #: tradcpp.c:754 + #, fuzzy + msgid "directory name missing after -I option" + msgstr "Foldernaam ontbreekt na `%s' optie" + + #: tradcpp.c:1434 tradcpp.c:3926 + msgid "`/*' within comment" + msgstr "`/*' binnen commentaar" + + # 'Voorwaarde' is niet echt een vertaling van 'conditional'. + # Is er een betere manier? + #: tradcpp.c:1810 + #, fuzzy, c-format + msgid "unterminated #%s conditional" + msgstr "niet-beëindigde `#%s' voorwaarde" + + #: tradcpp.c:2169 + #, fuzzy + msgid "not in any file?!" + msgstr "cccp fout: in geen enkel bestand?!" + + #: tradcpp.c:2275 + msgid "`defined' must be followed by ident or (ident)" + msgstr "" + + #: tradcpp.c:2279 + msgid "cccp error: invalid special hash type" + msgstr "cccp fout: ongeldig soort van speciale hash" + + #: tradcpp.c:2377 tradcpp.c:2447 + msgid "#include expects \"fname\" or " + msgstr "" + + #: tradcpp.c:2532 + #, fuzzy, c-format + msgid "no include path in which to find %.*s" + msgstr "Geen include-pad waarin %s kan gevonden worden" + + #: tradcpp.c:2710 + msgid "invalid macro name" + msgstr "ongeldige macronaam" + + #: tradcpp.c:2718 + #, c-format + msgid "invalid macro name `%s'" + msgstr "" + + #: tradcpp.c:2723 + msgid "\"defined\" cannot be used as a macro name" + msgstr "" + + #: tradcpp.c:2750 + #, fuzzy + msgid "parameter name starts with a digit in #define" + msgstr "argument voor `#%s' begint met cijfer" + + # Is 'interpunctie' hier een goede vertaling voor 'punctuation' + #: tradcpp.c:2760 + #, fuzzy + msgid "badly punctuated parameter list in #define" + msgstr "slechte interpunctie van parameterlijst in `#define'" + + #: tradcpp.c:2768 + #, fuzzy + msgid "unterminated parameter list in #define" + msgstr "niet-beëindigde parameterlijst in `#define'" + + #: tradcpp.c:2816 + #, fuzzy, c-format + msgid "\"%.*s\" redefined" + msgstr "`%.*s' opnieuw gedefinieerd" + + #: tradcpp.c:3073 + #, fuzzy + msgid "# operator should be followed by a macro argument name" + msgstr "de `#' operator zou door een naam van een macro-argument gevolgd moeten worden" + + #: tradcpp.c:3120 tradcpp.c:3146 tradcpp.c:3160 tradcpp.c:3167 tradcpp.c:3192 + #, fuzzy + msgid "invalid format #line command" + msgstr "`#line'-commando in slecht formaat" + + # is ongedefinieerd beter? ik denk van nie + #: tradcpp.c:3218 + #, fuzzy + msgid "undefining `defined'" + msgstr "`%s' wordt geondefinieerd" + + # is ongedefinieerd beter? ik denk van nie + #: tradcpp.c:3222 + #, c-format + msgid "undefining `%s'" + msgstr "`%s' wordt geondefinieerd" + + # OK, OK... Dit hoort thuis in lang nl@be, niet nl + #: tradcpp.c:3278 + #, fuzzy + msgid "extra text at end of directive" + msgstr "brol aan einde van `#line'-commando" + + #: tradcpp.c:3385 + #, fuzzy, c-format + msgid "#error%.*s" + msgstr "#error %s" + + #: tradcpp.c:3395 + #, fuzzy, c-format + msgid "#warning%.*s" + msgstr "#warning %s" + + #: tradcpp.c:3551 + #, fuzzy + msgid "#elif not within a conditional" + msgstr "`#elif' niet binnen een voorwaarde" + + #: tradcpp.c:3808 + #, fuzzy, c-format + msgid "#%s not within a conditional" + msgstr "`#%s' niet binnen een voorwaarde" + + #: tradcpp.c:3816 + #, fuzzy + msgid "#else or #elif after #else" + msgstr "`#else' of `#elif' na `#else'" + + #: tradcpp.c:3856 + #, fuzzy + msgid "#else not within a conditional" + msgstr "`#else' niet binnen een voorwaarde" + + #: tradcpp.c:3887 + #, fuzzy + msgid "unbalanced #endif" + msgstr "niet-gebalanceerde `#endif'" + + #: tradcpp.c:3981 + msgid "unterminated string or character constant" + msgstr "niet-beëindigde string- of karakterconstante" + + #: tradcpp.c:4139 + #, c-format + msgid "arguments given to macro `%s'" + msgstr "argumenten aan macro `%s' gegeven" + + #: tradcpp.c:4145 + #, fuzzy, c-format + msgid "no args to macro `%s'" + msgstr "argumenten aan macro `%s' gegeven" + + #: tradcpp.c:4147 + #, fuzzy, c-format + msgid "only 1 arg to macro `%s'" + msgstr "argumenten aan macro `%s' gegeven" + + #: tradcpp.c:4149 + #, fuzzy, c-format + msgid "only %d args to macro `%s'" + msgstr "argumenten aan macro `%s' gegeven" + + #: tradcpp.c:4151 + #, fuzzy, c-format + msgid "too many (%d) args to macro `%s'" + msgstr "teveel argumenten voor functie `%s'" + + #: tradcpp.c:4748 + #, c-format + msgid "" + "internal error in %s, at tradcpp.c:%d\n" + "Please submit a full bug report.\n" + "See %s for instructions." + msgstr "" + + #: tree-dump.c:841 + #, fuzzy, c-format + msgid "could not open dump file `%s'" + msgstr "kan bestand '%s' niet openen" + + #: tree-dump.c:917 + #, c-format + msgid "ignoring unknown option `%.*s' in `-f%s'" + msgstr "" + + #: tree.c:3841 + msgid "arrays of functions are not meaningful" + msgstr "arrays van functies zijn niet betekenisvol" + + #: tree.c:3898 + msgid "function return type cannot be function" + msgstr "de terugkeerwaarde van een functie kan geen funtie zijn" + + #: tree.c:4645 + msgid "invalid initializer for bit string" + msgstr "ongeldige beginwaarde voor bit-string" + + #: tree.c:4704 + #, c-format + msgid "tree check: expected %s, have %s in %s, at %s:%d" + msgstr "" + + #: tree.c:4721 + #, c-format + msgid "tree check: expected class '%c', have '%c' (%s) in %s, at %s:%d" + msgstr "" + + #: config/i386/winnt.c:522 varasm.c:451 + #, c-format + msgid "%s causes a section type conflict" + msgstr "" + + #: varasm.c:877 + #, c-format + msgid "register name not specified for `%s'" + msgstr "registernaam niet opgegeven voor `%s'" + + #: varasm.c:879 + #, c-format + msgid "invalid register name for `%s'" + msgstr "ongeldige registernaam voor `%s'" + + #: varasm.c:882 + #, c-format + msgid "data type of `%s' isn't suitable for a register" + msgstr "datatype van `%s' is niet geschikt voor een register" + + #: varasm.c:885 + #, fuzzy, c-format + msgid "register specified for `%s' isn't suitable for data type" + msgstr "het registernummer voor `%s' is niet geschikt voor dat datatype" + + #: varasm.c:894 + msgid "global register variable has initial value" + msgstr "globale registervariabele heeft beginwaarde" + + #: varasm.c:897 + msgid "volatile register variables don't work as you might wish" + msgstr "'volatile' registervariabelen werken niet zoals U zou willen" + + #: varasm.c:930 + #, c-format + msgid "register name given for non-register variable `%s'" + msgstr "registernaam opgegeven voor niet-registervariabele `%s'" + + #: varasm.c:1537 + #, c-format + msgid "size of variable `%s' is too large" + msgstr "variabele `%s' is te groot" + + #: varasm.c:1577 + #, fuzzy, c-format + msgid "alignment of `%s' is greater than maximum object file alignment. Using %d" + msgstr "alignment van `%s' is groter dan het maximale alignment van het objectbestand. %d wordt gebruikt." + + #: varasm.c:1628 + #, fuzzy, c-format + msgid "requested alignment for %s is greater than implemented alignment of %d" + msgstr "het gevraagde alignment voor %s is groter dan het geïmplementeerde aligment van %d." + + #: varasm.c:4449 + msgid "initializer for integer value is too complicated" + msgstr "initializer voor integerwaarde is te ingewikkeld" + + #: varasm.c:4454 + msgid "initializer for floating value is not a floating constant" + msgstr "initializer voor floating-point waarde is geen floating-point constante" + + #: varasm.c:4503 + msgid "unknown set constructor type" + msgstr "onbekend type verzameling-constructor" + + #: varasm.c:4717 + #, c-format + msgid "invalid initial value for member `%s'" + msgstr "ongeldige beginwaarde voor member `%s'" + + #: varasm.c:4909 + #, c-format + msgid "weak declaration of `%s' must be public" + msgstr "de zwakke declaratie van `%s' moet publiek zijn" + + #: varasm.c:4911 + #, c-format + msgid "weak declaration of `%s' must precede definition" + msgstr "de zwakke declaratie van `%s' moet aan de definitie voorafgaan" + + #: varasm.c:4915 + #, fuzzy, c-format + msgid "weak declaration of `%s' not supported" + msgstr "de zwakke declaratie van `%s' moet publiek zijn" + + #: varasm.c:5011 + msgid "only weak aliases are supported in this configuration" + msgstr "enkel zwakke aliasen worden in deze configuratie ondersteund" + + #: varasm.c:5016 + msgid "alias definitions not supported in this configuration; ignored" + msgstr "alias-definities worden niet ondersteund in deze configuratie; genegeerd" + + #: varray.c:88 + #, c-format + msgid "virtual array %s[%lu]: element %lu out of bounds in %s, at %s:%d" + msgstr "" + + #. Print an error message for unrecognized stab codes. + #: xcoffout.c:174 + #, c-format + msgid "no sclass for %s stab (0x%x)\n" + msgstr "" + + #: params.def:46 + msgid "The maximum number of instructions in a function that is eligible for inlining" + msgstr "" + + #: params.def:57 + msgid "The maximum number of instructions to consider to fill a delay slot" + msgstr "" + + #: params.def:68 + msgid "The maximum number of instructions to consider to find accurate live register information" + msgstr "" + + #: params.def:78 + msgid "The maximum length of scheduling's pending operations list" + msgstr "" + + #: params.def:85 + msgid "The maximum amount of memory to be allocated by GCSE" + msgstr "" + + #: params.def:90 + msgid "The maximum number of passes to make when doing GCSE" + msgstr "" + + #: config/darwin-c.c:76 + msgid "too many #pragma options align=reset" + msgstr "" + + #: config/darwin-c.c:98 config/darwin-c.c:101 config/darwin-c.c:103 + #: config/darwin-c.c:105 + #, fuzzy + msgid "malformed '#pragma options', ignoring" + msgstr "misvormde #pragma pack" + + # Moet 'signature-string' vertaald worden? + #: config/darwin-c.c:108 + #, fuzzy + msgid "junk at end of '#pragma options'" + msgstr "Brol aan einde van signature-string." + + #: config/darwin-c.c:118 + msgid "malformed '#pragma options align={mac68k|power|reset}', ignoring" + msgstr "" + + #: config/darwin-c.c:131 + msgid "missing '(' after '#pragma unused', ignoring" + msgstr "" + + #: config/darwin-c.c:149 + msgid "missing ')' after '#pragma unused', ignoring" + msgstr "" + + # Moet 'signature-string' vertaald worden? + #: config/darwin-c.c:152 + #, fuzzy + msgid "junk at end of '#pragma unused'" + msgstr "Brol aan einde van signature-string." + + #: config/nextstep.c:68 + msgid "optimization turned on" + msgstr "" + + #: config/nextstep.c:74 + msgid "optimization turned off" + msgstr "" + + #: config/nextstep.c:83 + msgid "optimization level restored" + msgstr "" + + #: config/lynx-ng.h:97 config/lynx.h:120 config/rs6000/lynx.h:85 + #, fuzzy + msgid "-msystem-v and -p are incompatible" + msgstr "-mbsd en -mxopen zijn niet compatibel" + + #: config/lynx-ng.h:99 config/lynx.h:122 config/rs6000/lynx.h:87 + #, fuzzy + msgid "-msystem-v and -mthreads are incompatible" + msgstr "-mbsd en -pedantic zijn niet compatibel" + + #. Run-time compilation parameters selecting different hardware subsets. + #: config/1750a/1750a.h:39 + msgid "Use VAX-C alignment" + msgstr "" + + #: config/a29k/a29k.c:1028 + #, c-format + msgid "invalid %%Q value" + msgstr "ongeldige waarde voor %%Q" + + #: config/a29k/a29k.c:1034 config/alpha/alpha.c:5355 + #, c-format + msgid "invalid %%C value" + msgstr "ongeldige waarde voor %%C" + + #: config/a29k/a29k.c:1040 config/alpha/alpha.c:5200 + #: config/rs6000/rs6000.c:6110 + #, c-format + msgid "invalid %%N value" + msgstr "ongeldige waarde voor %%N" + + #: config/a29k/a29k.c:1046 config/alpha/alpha.c:5271 + #: config/rs6000/rs6000.c:6072 + #, c-format + msgid "invalid %%M value" + msgstr "ongeldige waarde voor %%M" + + #: config/a29k/a29k.c:1052 config/alpha/alpha.c:5263 + #: config/rs6000/rs6000.c:6037 + #, c-format + msgid "invalid %%m value" + msgstr "ongeldige waarde voor %%m" + + #: config/a29k/a29k.c:1154 config/alpha/alpha.c:5224 config/romp/romp.c:690 + #, c-format + msgid "invalid %%L value" + msgstr "ongeldige waarde voor %%L" + + #: config/a29k/a29k.c:1159 config/rs6000/rs6000.c:6118 + #, c-format + msgid "invalid %%O value" + msgstr "ongeldige waarde voor %%O" + + #: config/a29k/a29k.c:1165 config/alpha/alpha.c:5208 + #: config/rs6000/rs6000.c:6138 + #, c-format + msgid "invalid %%P value" + msgstr "ongeldige waarde voor %%P" + + #: config/a29k/a29k.c:1175 + #, c-format + msgid "invalid %%V value" + msgstr "ongeldige waarde voor %%V" + + #: config/a29k/a29k.h:101 + msgid "Generate code assuming DW bit is set" + msgstr "" + + #: config/a29k/a29k.h:102 + msgid "Generate code assuming DW bit is not set" + msgstr "" + + #: config/a29k/a29k.h:103 + msgid "Generate code using byte writes" + msgstr "" + + #: config/a29k/a29k.h:104 + msgid "Do not generate byte writes" + msgstr "" + + #: config/a29k/a29k.h:105 + msgid "Use small memory model" + msgstr "" + + #: config/a29k/a29k.h:106 + msgid "Use normal memory model" + msgstr "" + + #: config/a29k/a29k.h:107 + msgid "Use large memory model" + msgstr "" + + #: config/a29k/a29k.h:108 + msgid "Generate 29050 code" + msgstr "" + + #: config/a29k/a29k.h:109 + msgid "Generate 29000 code" + msgstr "" + + #: config/a29k/a29k.h:110 + msgid "Use kernel global registers" + msgstr "" + + #: config/a29k/a29k.h:111 + msgid "Use user global registers" + msgstr "" + + #: config/a29k/a29k.h:112 + msgid "Emit stack checking code" + msgstr "" + + #: config/a29k/a29k.h:113 + msgid "Do not emit stack checking code" + msgstr "" + + #: config/a29k/a29k.h:114 + msgid "Work around storem hardware bug" + msgstr "" + + #: config/a29k/a29k.h:115 + msgid "Do not work around storem hardware bug" + msgstr "" + + #: config/a29k/a29k.h:116 + #, fuzzy + msgid "Store locals in argument registers" + msgstr "teveel argumenten voor functie" + + #: config/a29k/a29k.h:117 + msgid "Do not store locals in arg registers" + msgstr "" + + #: config/a29k/a29k.h:118 config/i960/i960.h:289 config/mips/mips.h:408 + msgid "Use software floating point" + msgstr "" + + #: config/a29k/a29k.h:119 + msgid "Do not generate multm instructions" + msgstr "" + + #: config/alpha/alpha.c:273 + #, fuzzy, c-format + msgid "-f%s ignored for Unicos/Mk (not supported)" + msgstr "-pipe wordt niet ondersteund" + + #: config/alpha/alpha.c:297 + #, fuzzy + msgid "-mieee not supported on Unicos/Mk" + msgstr "-pipe wordt niet ondersteund" + + #: config/alpha/alpha.c:308 + msgid "-mieee-with-inexact not supported on Unicos/Mk" + msgstr "" + + #: config/alpha/alpha.c:325 + #, c-format + msgid "bad value `%s' for -mtrap-precision switch" + msgstr "slechte waarde `%s' voor optie -mtrap-precision" + + #: config/alpha/alpha.c:339 + #, c-format + msgid "bad value `%s' for -mfp-rounding-mode switch" + msgstr "slechte waarde `%s' voor optie -mfp-rounding-mode" + + #: config/alpha/alpha.c:354 + #, c-format + msgid "bad value `%s' for -mfp-trap-mode switch" + msgstr "slechte waarde `%s' voor optie -mfp-trap-mode" + + #: config/alpha/alpha.c:373 config/alpha/alpha.c:385 + #, c-format + msgid "bad value `%s' for -mcpu switch" + msgstr "slechte waarde `%s' voor optie -mcpu" + + #: config/alpha/alpha.c:392 + #, fuzzy + msgid "trap mode not supported on Unicos/Mk" + msgstr "trapmodus niet ondersteund voor VAX-floats" + + #: config/alpha/alpha.c:399 + msgid "fp software completion requires -mtrap-precision=i" + msgstr "fp vervollediging in software heeft -mtrap-precision=i nodig" + + #: config/alpha/alpha.c:415 + msgid "rounding mode not supported for VAX floats" + msgstr "afrondingsmodus niet ondersteund voor VAX-floats" + + #: config/alpha/alpha.c:420 + msgid "trap mode not supported for VAX floats" + msgstr "trapmodus niet ondersteund voor VAX-floats" + + # goed Nederlands voor 'latency' + #: config/alpha/alpha.c:449 + #, c-format + msgid "L%d cache latency unknown for %s" + msgstr "L%d cache-latency niet gekend voor %s" + + #: config/alpha/alpha.c:464 + #, c-format + msgid "bad value `%s' for -mmemory-latency" + msgstr "slechte waarde `%s' voor -mmeroy-latency" + + #: config/alpha/alpha.c:5164 config/romp/romp.c:746 config/romp/romp.c:753 + #, c-format + msgid "invalid %%H value" + msgstr "" + + #: config/alpha/alpha.c:5174 + #, fuzzy, c-format + msgid "invalid %%J value" + msgstr "ongeldige waarde voor %%E" + + #: config/alpha/alpha.c:5184 config/ia64/ia64.c:3525 + #, c-format + msgid "invalid %%r value" + msgstr "ongeldige waarde voor %%r" + + #: config/alpha/alpha.c:5194 config/rs6000/rs6000.c:6184 + #, c-format + msgid "invalid %%R value" + msgstr "ongeldige waarde voor %%R" + + #: config/alpha/alpha.c:5216 config/romp/romp.c:732 config/romp/romp.c:739 + #, c-format + msgid "invalid %%h value" + msgstr "ongeldige waarde voor %%h" + + #: config/alpha/alpha.c:5306 + #, c-format + msgid "invalid %%U value" + msgstr "ongeldige waarde voor %%U" + + #: config/alpha/alpha.c:5318 config/alpha/alpha.c:5332 config/romp/romp.c:698 + #: config/rs6000/rs6000.c:6192 + #, c-format + msgid "invalid %%s value" + msgstr "ongeldige waarde voor %%s" + + #: config/alpha/alpha.c:5392 config/rs6000/rs6000.c:5899 + #, c-format + msgid "invalid %%E value" + msgstr "ongeldige waarde voor %%E" + + #: config/alpha/alpha.c:5413 config/romp/romp.c:973 + #: config/rs6000/rs6000.c:6500 + #, c-format + msgid "invalid %%xn code" + msgstr "ongeldige code voor %%xn" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/alpha/alpha.h:220 config/i386/i386.h:285 config/i386/i386.h:287 + #: config/i386/i386.h:289 config/ns32k/ns32k.h:103 config/rs6000/rs6000.h:329 + #: config/s390/s390.h:51 config/sparc/sparc.h:552 config/sparc/sparc.h:557 + msgid "Use hardware fp" + msgstr "" + + #: config/alpha/alpha.h:221 config/i386/i386.h:286 config/i386/i386.h:288 + #: config/rs6000/rs6000.h:331 config/sparc/sparc.h:554 + #: config/sparc/sparc.h:559 + msgid "Do not use hardware fp" + msgstr "" + + #: config/alpha/alpha.h:222 + msgid "Use fp registers" + msgstr "" + + #: config/alpha/alpha.h:224 + msgid "Do not use fp registers" + msgstr "" + + #: config/alpha/alpha.h:225 + msgid "Do not assume GAS" + msgstr "" + + #: config/alpha/alpha.h:226 + msgid "Assume GAS" + msgstr "" + + #: config/alpha/alpha.h:228 + msgid "Request IEEE-conformant math library routines (OSF/1)" + msgstr "" + + #: config/alpha/alpha.h:230 + msgid "Emit IEEE-conformant code, without inexact exceptions" + msgstr "" + + #: config/alpha/alpha.h:232 + msgid "Emit IEEE-conformant code, with inexact exceptions" + msgstr "" + + #: config/alpha/alpha.h:234 + #, fuzzy + msgid "Do not emit complex integer constants to read-only memory" + msgstr "complexe integerconstante is te breed voor `complex int'" + + #: config/alpha/alpha.h:235 + msgid "Use VAX fp" + msgstr "" + + #: config/alpha/alpha.h:236 + msgid "Do not use VAX fp" + msgstr "" + + #: config/alpha/alpha.h:237 + msgid "Emit code for the byte/word ISA extension" + msgstr "" + + #: config/alpha/alpha.h:240 + msgid "Emit code for the motion video ISA extension" + msgstr "" + + #: config/alpha/alpha.h:243 + msgid "Emit code for the fp move and sqrt ISA extension" + msgstr "" + + #: config/alpha/alpha.h:245 + msgid "Emit code for the counting ISA extension" + msgstr "" + + #: config/alpha/alpha.h:248 + msgid "Emit code using explicit relocation directives" + msgstr "" + + #: config/alpha/alpha.h:251 + msgid "Emit 16-bit relocations to the small data areas" + msgstr "" + + #: config/alpha/alpha.h:253 + msgid "Emit 32-bit relocations to the small data areas" + msgstr "" + + #. For -mcpu= + #. For -mtune= + #. For -mfp-rounding-mode=[n|m|c|d] + #. For -mfp-trap-mode=[n|u|su|sui] + #. For -mtrap-precision=[p|f|i] + #. For -mmemory-latency= + #: config/alpha/alpha.h:281 + msgid "Use features of and schedule given CPU" + msgstr "" + + #: config/alpha/alpha.h:283 + msgid "Schedule given CPU" + msgstr "" + + #: config/alpha/alpha.h:285 + msgid "Control the generated fp rounding mode" + msgstr "" + + #: config/alpha/alpha.h:287 + msgid "Control the IEEE trap mode" + msgstr "" + + #: config/alpha/alpha.h:289 + msgid "Control the precision given to fp exceptions" + msgstr "" + + #: config/alpha/alpha.h:291 + msgid "Tune expected memory latency" + msgstr "" + + #: config/arc/arc.c:132 + #, c-format + msgid "bad value (%s) for -mcpu switch" + msgstr "slechte waarde (%s) voor optie -mcpu" + + #: config/arc/arc.c:359 + #, fuzzy, c-format + msgid "argument of `%s' attribute is not a string constant" + msgstr "het argument van `asm' is geen constante string" + + #: config/arc/arc.c:366 + #, c-format + msgid "argument of `%s' attribute is not \"ilink1\" or \"ilink2\"" + msgstr "" + + #: config/arc/arc.c:1709 config/m32r/m32r.c:2278 + msgid "invalid operand to %R code" + msgstr "ongeldige operand voor %R-code" + + #: config/arc/arc.c:1741 config/m32r/m32r.c:2301 + msgid "invalid operand to %H/%L code" + msgstr "ongeldige operand voor %H/%L-code" + + #: config/arc/arc.c:1765 config/m32r/m32r.c:2378 + msgid "invalid operand to %U code" + msgstr "ongeldige operand voor %U-code" + + #: config/arc/arc.c:1776 + msgid "invalid operand to %V code" + msgstr "ongeldige operand voor %V-code" + + # Hoe moet dit exact geïnterpreteerd worden? + # Zowel 'operand van uitvoercode' als 'code voor operanduitvoer' is mogelijk. + #. Unknown flag. + #: config/arc/arc.c:1783 config/m32r/m32r.c:2417 config/sparc/sparc.c:6010 + msgid "invalid operand output code" + msgstr "ongeldige operand voor uitvoercode" + + #: config/arm/arm.c:439 + #, fuzzy, c-format + msgid "switch -mcpu=%s conflicts with -march= switch" + msgstr "optie -mcpu=%s geeft conflicten met optie -mtune=" + + #: config/arm/arm.c:449 config/rs6000/rs6000.c:441 config/sparc/sparc.c:383 + #, c-format + msgid "bad value (%s) for %s switch" + msgstr "slechte waarde (%s) foor optie %s" + + #: config/arm/arm.c:585 + msgid "target CPU does not support APCS-32" + msgstr "doel-CPU ondersteunt APCS-32 niet" + + #: config/arm/arm.c:590 + msgid "target CPU does not support APCS-26" + msgstr "doel-CPU ondersteunt APCS-26 niet" + + #: config/arm/arm.c:596 + msgid "target CPU does not support interworking" + msgstr "doel-CPU ondersteunt geen interworking" + + #: config/arm/arm.c:602 + #, fuzzy + msgid "target CPU does not support THUMB instructions" + msgstr "doel-CPU ondersteunt geen interworking" + + #: config/arm/arm.c:616 + msgid "enabling backtrace support is only meaningful when compiling for the Thumb" + msgstr "" + + #: config/arm/arm.c:619 + msgid "enabling callee interworking support is only meaningful when compiling for the Thumb" + msgstr "" + + #: config/arm/arm.c:622 + msgid "enabling caller interworking support is only meaningful when compiling for the Thumb" + msgstr "" + + #: config/arm/arm.c:628 + msgid "interworking forces APCS-32 to be used" + msgstr "interworking forceert het gebruikt van APCS-32" + + #: config/arm/arm.c:634 + msgid "-mapcs-stack-check incompatible with -mno-apcs-frame" + msgstr "-mapcs-stack-check is niet compatibel met -mno-apcs-frame" + + #: config/arm/arm.c:642 + msgid "-fpic and -mapcs-reent are incompatible" + msgstr "-fpic en -mapcs-reent zijn niet compatibel" + + #: config/arm/arm.c:645 + msgid "APCS reentrant code not supported. Ignored" + msgstr "APCS reentrant code wordt niet ondersteund. Genegeerd" + + #: config/arm/arm.c:653 + #, fuzzy + msgid "-g with -mno-apcs-frame may not give sensible debugging" + msgstr "-g met -fomit-frame-pointer geeft mogelijk geen fatsoenlijke debug-mogelijkheden" + + #: config/arm/arm.c:661 + #, fuzzy + msgid "passing floating point arguments in fp regs not yet supported" + msgstr "Het doorgeven van floating-point argumenten in fp registers wordt nog niet ondersteund" + + #: config/arm/arm.c:690 + #, fuzzy, c-format + msgid "invalid floating point emulation option: -mfpe-%s" + msgstr "Ongeldige optie voor floating-point emulatie: -mfpe-%s" + + #: config/arm/arm.c:714 + #, fuzzy + msgid "structure size boundary can only be set to 8 or 32" + msgstr "Grens voor structure-grootte kan enkel op 8 of 32 insgesteld worden" + + #: config/arm/arm.c:722 + msgid "-mpic-register= is useless without -fpic" + msgstr "" + + #: config/arm/arm.c:731 + #, c-format + msgid "unable to use '%s' for PIC register" + msgstr "" + + #: config/arm/arm.c:1975 config/arm/arm.c:1998 config/avr/avr.c:4703 + #: config/c4x/c4x.c:4650 config/h8300/h8300.c:3019 config/i386/i386.c:1254 + #: config/i386/i386.c:1283 config/m68hc11/m68hc11.c:1160 + #: config/mcore/mcore.c:3505 config/ns32k/ns32k.c:1044 + #: config/rs6000/rs6000.c:10412 config/sh/sh.c:4703 config/sh/sh.c:4723 + #: config/sh/sh.c:4762 config/stormy16/stormy16.c:1999 config/v850/v850.c:2044 + #, fuzzy, c-format + msgid "`%s' attribute only applies to functions" + msgstr "het `%s' attribuut heeft enkel betekenis voor functies" + + #: config/arm/arm.c:9265 + msgid "unable to compute real location of stacked parameter" + msgstr "" + + #: config/arm/arm.c:9945 + msgid "no low registers available for popping high registers" + msgstr "" + + #: config/arm/arm.c:10137 + msgid "interrupt Service Routines cannot be coded in Thumb mode" + msgstr "" + + #: config/arm/pe.c:168 config/i386/winnt.c:290 config/mcore/mcore.c:3365 + #, c-format + msgid "initialized variable `%s' is marked dllimport" + msgstr "variable met beginwaarde `%s' is als dllimport aangeduid" + + #: config/arm/pe.c:177 config/i386/winnt.c:299 + #, c-format + msgid "static variable `%s' is marked dllimport" + msgstr "statische variable `%s' is als dllimport aangeduid" + + #: config/arm/arm.h:424 + msgid "Generate APCS conformant stack frames" + msgstr "" + + #: config/arm/arm.h:427 + #, fuzzy + msgid "Store function names in object code" + msgstr "init-functie gevonden in object %s" + + #: config/arm/arm.h:431 + msgid "Use the 32-bit version of the APCS" + msgstr "" + + #: config/arm/arm.h:433 + msgid "Use the 26-bit version of the APCS" + msgstr "" + + #: config/arm/arm.h:437 + msgid "Pass FP arguments in FP registers" + msgstr "" + + #: config/arm/arm.h:440 + msgid "Generate re-entrant, PIC code" + msgstr "" + + #: config/arm/arm.h:443 + msgid "The MMU will trap on unaligned accesses" + msgstr "" + + #: config/arm/arm.h:450 + msgid "Use library calls to perform FP operations" + msgstr "" + + #: config/arm/arm.h:452 config/i960/i960.h:287 + msgid "Use hardware floating point instructions" + msgstr "" + + #: config/arm/arm.h:454 + msgid "Assume target CPU is configured as big endian" + msgstr "" + + #: config/arm/arm.h:456 + msgid "Assume target CPU is configured as little endian" + msgstr "" + + #: config/arm/arm.h:458 + msgid "Assume big endian bytes, little endian words" + msgstr "" + + #: config/arm/arm.h:460 + msgid "Support calls between Thumb and ARM instruction sets" + msgstr "" + + #: config/arm/arm.h:463 + msgid "Generate a call to abort if a noreturn function returns" + msgstr "" + + #: config/arm/arm.h:466 + msgid "Do not move instructions into a function's prologue" + msgstr "" + + #: config/arm/arm.h:469 + msgid "Do not load the PIC register in function prologues" + msgstr "" + + #: config/arm/arm.h:472 + msgid "Generate call insns as indirect calls, if necessary" + msgstr "" + + #: config/arm/arm.h:475 + msgid "Compile for the Thumb not the ARM" + msgstr "" + + #: config/arm/arm.h:479 + msgid "Thumb: Generate (non-leaf) stack frames even if not needed" + msgstr "" + + #: config/arm/arm.h:482 + msgid "Thumb: Generate (leaf) stack frames even if not needed" + msgstr "" + + #: config/arm/arm.h:485 + msgid "Thumb: Assume non-static functions may be called from ARM code" + msgstr "" + + #: config/arm/arm.h:489 + msgid "Thumb: Assume function pointers may go to non-Thumb aware code" + msgstr "" + + #: config/arm/arm.h:499 + msgid "Specify the name of the target CPU" + msgstr "" + + #: config/arm/arm.h:501 + msgid "Specify the name of the target architecture" + msgstr "" + + #: config/arm/arm.h:505 + msgid "Specify the version of the floating point emulator" + msgstr "" + + #: config/arm/arm.h:507 + msgid "Specify the minimum bit alignment of structures" + msgstr "" + + #: config/arm/arm.h:509 + #, fuzzy + msgid "Specify the register to be used for PIC addressing" + msgstr "Ongeldig register in ybase-addressering" + + #: config/arm/pe.h:65 + msgid "Ignore dllimport attribute for functions" + msgstr "" + + #. None of these is actually used in cc1. If we don't define them in target + #. switches cc1 complains about them. For the sake of argument lets allocate + #. bit 31 of target flags for such options. + #: config/arm/riscix.h:84 + msgid "Do symbol renaming for BSD" + msgstr "" + + #: config/arm/riscix.h:85 + msgid "Do symbol renaming for X/OPEN" + msgstr "" + + #: config/arm/riscix.h:86 + msgid "Don't do symbol renaming" + msgstr "" + + #: config/avr/avr.c:221 + #, fuzzy, c-format + msgid "MCU `%s' not supported" + msgstr "-pipe wordt niet ondersteund" + + #: config/avr/avr.c:461 + #, c-format + msgid "large frame pointer change (%d) with -mtiny-stack" + msgstr "" + + #: config/avr/avr.c:1056 + msgid "bad address, not (reg+disp):" + msgstr "" + + #: config/avr/avr.c:1064 + #, fuzzy + msgid "internal compiler error. Bad address:" + msgstr "Interne compilerfout." + + #: config/avr/avr.c:1077 + #, fuzzy + msgid "internal compiler error. Unknown mode:" + msgstr "Interne compilerfout." + + # (%s = 'parameter ') + #: config/avr/avr.c:1785 config/avr/avr.c:2497 + #, fuzzy + msgid "invalid insn:" + msgstr "ongeldige %s" + + #: config/avr/avr.c:1822 config/avr/avr.c:1908 config/avr/avr.c:1957 + #: config/avr/avr.c:1966 config/avr/avr.c:2064 config/avr/avr.c:2236 + #: config/avr/avr.c:2534 config/avr/avr.c:2645 + msgid "incorrect insn:" + msgstr "" + + #: config/avr/avr.c:1985 config/avr/avr.c:2149 config/avr/avr.c:2307 + #: config/avr/avr.c:2689 + #, fuzzy + msgid "unknown move insn:" + msgstr "onbekende machine-modus `%s'" + + #: config/avr/avr.c:2925 + msgid "bad shift insn:" + msgstr "" + + #: config/avr/avr.c:3041 config/avr/avr.c:3471 config/avr/avr.c:3851 + #, fuzzy + msgid "internal compiler error. Incorrect shift:" + msgstr "Interne compilerfout." + + #: config/avr/avr.c:4676 + #, fuzzy + msgid "only initialized variables can be placed into program memory area" + msgstr "Enkel variabelen met beginwaarde kunnen in het 8-bit gebied geplaatst worden." + + #: config/avr/avr.h:63 + msgid "Assume int to be 8 bit integer" + msgstr "" + + #: config/avr/avr.h:65 + msgid "Change the stack pointer without disabling interrupts" + msgstr "" + + #: config/avr/avr.h:67 + msgid "Use subroutines for function prologue/epilogue" + msgstr "" + + #: config/avr/avr.h:69 + msgid "Change only the low 8 bits of the stack pointer" + msgstr "" + + #: config/avr/avr.h:71 + msgid "Do not generate tablejump insns" + msgstr "" + + #: config/avr/avr.h:74 + msgid "Output instruction sizes to the asm file" + msgstr "" + + #: config/avr/avr.h:87 + msgid "Specify the initial stack address" + msgstr "" + + #: config/avr/avr.h:88 + msgid "Specify the MCU name" + msgstr "" + + #. `GIV_SORT_CRITERION(GIV1, GIV2)' + #. In some cases, the strength reduction optimization pass can + #. produce better code if this is defined. This macro controls the + #. order that induction variables are combined. This macro is + #. particularly useful if the target has limited addressing modes. + #. For instance, the SH target has only positive offsets in + #. addresses. Thus sorting to put the smallest address first allows + #. the most combinations to be found. + #: config/avr/avr.h:2566 + #, fuzzy + msgid "trampolines not supported" + msgstr "-pipe wordt niet ondersteund" + + #: config/c4x/c4x-c.c:70 + #, c-format + msgid "missing '(' after '#pragma %s' - ignored" + msgstr "" + + #: config/c4x/c4x-c.c:73 + #, c-format + msgid "missing function name in '#pragma %s' - ignored" + msgstr "" + + #: config/c4x/c4x-c.c:78 + #, fuzzy, c-format + msgid "malformed '#pragma %s' - ignored" + msgstr "misvormde #pragma pack" + + #: config/c4x/c4x-c.c:80 + #, c-format + msgid "missing section name in '#pragma %s' - ignored" + msgstr "" + + #: config/c4x/c4x-c.c:85 + #, c-format + msgid "missing ')' for '#pragma %s' - ignored" + msgstr "" + + # Moet 'signature-string' vertaald worden? + #: config/c4x/c4x-c.c:88 + #, fuzzy, c-format + msgid "junk at end of '#pragma %s'" + msgstr "Brol aan einde van signature-string." + + #: config/c4x/c4x.c:299 + #, c-format + msgid "unknown CPU version %d, using 40.\n" + msgstr "" + + #: config/c4x/c4x.c:883 + #, c-format + msgid "ISR %s requires %d words of local vars, max is 32767" + msgstr "" + + #: config/c4x/c4x.c:1635 + msgid "using CONST_DOUBLE for address" + msgstr "" + + #: config/c4x/c4x.c:1775 + msgid "c4x_address_cost: Invalid addressing mode" + msgstr "c4x_address_cost: Ongeldige addresseringsmodus" + + #: config/c4x/c4x.c:1917 + #, c-format + msgid "c4x_print_operand: %%L inconsistency" + msgstr "" + + #: config/c4x/c4x.c:1923 + #, c-format + msgid "c4x_print_operand: %%N inconsistency" + msgstr "" + + #: config/c4x/c4x.c:1964 + #, c-format + msgid "c4x_print_operand: %%O inconsistency" + msgstr "" + + #: config/c4x/c4x.c:2060 + msgid "c4x_print_operand: Bad operand case" + msgstr "" + + #: config/c4x/c4x.c:2103 + msgid "c4x_print_operand_address: Bad post_modify" + msgstr "" + + #: config/c4x/c4x.c:2125 + msgid "c4x_print_operand_address: Bad pre_modify" + msgstr "" + + #: config/c4x/c4x.c:2173 config/c4x/c4x.c:2185 config/c4x/c4x.c:2200 + msgid "c4x_print_operand_address: Bad operand case" + msgstr "" + + #: config/c4x/c4x.c:2456 + msgid "c4x_rptb_insert: Cannot find start label" + msgstr "" + + #: config/c4x/c4x.c:3443 config/c4x/c4x.c:3463 + #, fuzzy + msgid "mode not QImode" + msgstr "modus van `%s' is geen modus" + + #: config/c4x/c4x.c:3520 + #, fuzzy + msgid "invalid indirect memory address" + msgstr "Ongeldig indirect geheugenadres" + + #: config/c4x/c4x.c:3609 + #, fuzzy + msgid "invalid indirect (S) memory address" + msgstr "Ongeldig indirect (S) geheugenadres" + + #: config/c4x/c4x.c:3950 + msgid "c4x_valid_operands: Internal error" + msgstr "" + + #: config/c4x/c4x.c:4430 + msgid "c4x_operand_subword: invalid mode" + msgstr "" + + #: config/c4x/c4x.c:4433 + msgid "c4x_operand_subword: invalid operand" + msgstr "" + + #. We could handle these with some difficulty. + #. e.g., *p-- => *(p-=2); *(p+1). + #: config/c4x/c4x.c:4459 + msgid "c4x_operand_subword: invalid autoincrement" + msgstr "" + + #: config/c4x/c4x.c:4465 + msgid "c4x_operand_subword: invalid address" + msgstr "" + + # klinkt niet + #: config/c4x/c4x.c:4476 + msgid "c4x_operand_subword: address not offsettable" + msgstr "c4x_operand_subword: adres kan niet geoffset worden" + + #: config/c4x/c4x.c:4676 + msgid "c4x_rptb_rpts_p: Repeat block top label moved\n" + msgstr "" + + #. Name of the c4x assembler. + #. Name of the c4x linker. + #. Define assembler options. + #. Define linker options. + #. Define C preprocessor options. + #. Specify the end file to link with. + #. Target compilation option flags. + #. Small memory model. + #. Use 24-bit MPYI for C3x. + #. Fast fixing of floats. + #. Allow use of RPTS. + #. Emit C3x code. + #. Be compatible with TI assembler. + #. Be paranoid about DP reg. in ISRs. + #. Pass arguments on stack. + #. Enable features under development. + #. Enable repeat block. + #. Use BK as general register. + #. Use decrement and branch for C3x. + #. Enable debugging of GCC. + #. Force constants into registers. + #. Allow unsigned loop counters. + #. Force op0 and op1 to be same. + #. Save all 40 bits for floats. + #. Allow parallel insns. + #. Allow MPY||ADD, MPY||SUB insns. + #. Assume mem refs possibly aliased. + #. Emit C30 code. + #. Emit C31 code. + #. Emit C32 code. + #. Emit C33 code. + #. Emit C40 code. + #. Emit C44 code. + #. Run-time compilation parameters selecting different hardware subsets. + #. + #. Macro to define tables used to set the flags. + #. This is a list in braces of triplets in braces, + #. each pair being { "NAME", VALUE, "DESCRIPTION" } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/c4x/c4x.h:141 + msgid "Small memory model" + msgstr "" + + #: config/c4x/c4x.h:143 + msgid "Big memory model" + msgstr "" + + #: config/c4x/c4x.h:145 + msgid "Use MPYI instruction for C3x" + msgstr "" + + #: config/c4x/c4x.h:147 + msgid "Do not use MPYI instruction for C3x" + msgstr "" + + #: config/c4x/c4x.h:149 + msgid "Use fast but approximate float to integer conversion" + msgstr "" + + #: config/c4x/c4x.h:151 + msgid "Use slow but accurate float to integer conversion" + msgstr "" + + #: config/c4x/c4x.h:153 + msgid "Enable use of RTPS instruction" + msgstr "" + + #: config/c4x/c4x.h:155 + msgid "Disable use of RTPS instruction" + msgstr "" + + #: config/c4x/c4x.h:157 + msgid "Enable use of RTPB instruction" + msgstr "" + + #: config/c4x/c4x.h:159 + msgid "Disable use of RTPB instruction" + msgstr "" + + #: config/c4x/c4x.h:161 + msgid "Generate code for C30 CPU" + msgstr "" + + #: config/c4x/c4x.h:163 + msgid "Generate code for C31 CPU" + msgstr "" + + #: config/c4x/c4x.h:165 + msgid "Generate code for C32 CPU" + msgstr "" + + #: config/c4x/c4x.h:167 + msgid "Generate code for C33 CPU" + msgstr "" + + #: config/c4x/c4x.h:169 + msgid "Generate code for C40 CPU" + msgstr "" + + #: config/c4x/c4x.h:171 + msgid "Generate code for C44 CPU" + msgstr "" + + #: config/c4x/c4x.h:173 + #, fuzzy + msgid "Emit code compatible with TI tools" + msgstr "incompatibele types bij %s" + + #: config/c4x/c4x.h:175 + msgid "Emit code to use GAS extensions" + msgstr "" + + #: config/c4x/c4x.h:177 config/c4x/c4x.h:181 + msgid "Save DP across ISR in small memory model" + msgstr "" + + #: config/c4x/c4x.h:179 config/c4x/c4x.h:183 + msgid "Don't save DP across ISR in small memory model" + msgstr "" + + #: config/c4x/c4x.h:185 + msgid "Pass arguments on the stack" + msgstr "" + + #: config/c4x/c4x.h:187 + #, fuzzy + msgid "Pass arguments in registers" + msgstr "teveel argumenten voor functie" + + #: config/c4x/c4x.h:189 + msgid "Enable new features under development" + msgstr "" + + #: config/c4x/c4x.h:191 + msgid "Disable new features under development" + msgstr "" + + #: config/c4x/c4x.h:193 + msgid "Use the BK register as a general purpose register" + msgstr "" + + #: config/c4x/c4x.h:195 + msgid "Do not allocate BK register" + msgstr "" + + #: config/c4x/c4x.h:197 + #, fuzzy + msgid "Enable use of DB instruction" + msgstr "ongeldig gebruik van `restrict'" + + #: config/c4x/c4x.h:199 + msgid "Disable use of DB instruction" + msgstr "" + + #: config/c4x/c4x.h:201 + msgid "Enable debugging" + msgstr "" + + #: config/c4x/c4x.h:203 + msgid "Disable debugging" + msgstr "" + + #: config/c4x/c4x.h:205 + msgid "Force constants into registers to improve hoisting" + msgstr "" + + #: config/c4x/c4x.h:207 + #, fuzzy + msgid "Don't force constants into registers" + msgstr "numerieke constante zonder cijfers" + + #: config/c4x/c4x.h:209 + msgid "Force RTL generation to emit valid 3 operand insns" + msgstr "" + + #: config/c4x/c4x.h:211 + msgid "Allow RTL generation to emit invalid 3 operand insns" + msgstr "" + + #: config/c4x/c4x.h:213 + msgid "Allow unsigned interation counts for RPTB/DB" + msgstr "" + + #: config/c4x/c4x.h:215 + msgid "Disallow unsigned iteration counts for RPTB/DB" + msgstr "" + + #: config/c4x/c4x.h:217 + msgid "Preserve all 40 bits of FP reg across call" + msgstr "" + + #: config/c4x/c4x.h:219 + msgid "Only preserve 32 bits of FP reg across call" + msgstr "" + + #: config/c4x/c4x.h:221 + msgid "Enable parallel instructions" + msgstr "" + + #: config/c4x/c4x.h:223 + msgid "Disable parallel instructions" + msgstr "" + + #: config/c4x/c4x.h:225 + msgid "Enable MPY||ADD and MPY||SUB instructions" + msgstr "" + + #: config/c4x/c4x.h:227 + msgid "Disable MPY||ADD and MPY||SUB instructions" + msgstr "" + + #: config/c4x/c4x.h:229 + msgid "Assume that pointers may be aliased" + msgstr "" + + #: config/c4x/c4x.h:231 + msgid "Assume that pointers not aliased" + msgstr "" + + #: config/c4x/c4x.h:304 + msgid "Specify maximum number of iterations for RPTS" + msgstr "" + + #: config/c4x/c4x.h:306 + msgid "Select CPU to generate code for" + msgstr "" + + #. Macros used in the machine description to test the flags. + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/clipper/clipper.h:40 + msgid "Generate code for the C400" + msgstr "" + + #: config/clipper/clipper.h:41 + msgid "Generate code for the C300" + msgstr "" + + #: config/convex/convex.h:53 + msgid "Generate code for c1" + msgstr "" + + #: config/convex/convex.h:54 + msgid "Generate code for c2" + msgstr "" + + #: config/convex/convex.h:55 + msgid "Generate code for c32" + msgstr "" + + #: config/convex/convex.h:56 config/convex/convex.h:57 + msgid "Generate code for c34" + msgstr "" + + #: config/convex/convex.h:59 + msgid "Use standard calling sequence, with arg count word" + msgstr "" + + #: config/convex/convex.h:61 + msgid "Place arg count in a nop instruction (faster than push)" + msgstr "" + + #: config/convex/convex.h:63 + msgid "Don't push arg count, depend on symbol table" + msgstr "" + + #: config/convex/convex.h:65 + msgid "Use data cache for volatile mem refs (default)" + msgstr "" + + #: config/convex/convex.h:67 + msgid "Don't use data cache for volatile mem refs" + msgstr "" + + #: config/convex/convex.h:69 + msgid "Bypass data cache for volatile mem refs" + msgstr "" + + #: config/convex/convex.h:70 + msgid "Use 64-bit longs" + msgstr "" + + #: config/convex/convex.h:71 + msgid "Use cc- and libc-compatible 32-bit longs" + msgstr "" + + #: config/cris/cris.c:878 + #, c-format + msgid "stackframe too big: %d bytes" + msgstr "" + + #: config/cris/cris.c:1193 + msgid "allocated but unused delay list in epilogue" + msgstr "" + + #: config/cris/cris.c:1203 + msgid "unexpected function type needing stack adjustment for __builtin_eh_return" + msgstr "" + + #: config/cris/cris.c:1497 + #, fuzzy, c-format + msgid "internal error: bad register: %d" + msgstr "formaatstring niet beëindigd" + + #: config/cris/cris.c:1966 + msgid "internal error: sideeffect-insn affecting main effect" + msgstr "" + + #. If we get here, the caller got its initial tests wrong. + #: config/cris/cris.c:2253 + msgid "internal error: cris_side_effect_mode_ok with bad operands" + msgstr "" + + #: config/cris/cris.c:2335 config/cris/cris.c:2393 + #, fuzzy + msgid "unrecognized supposed constant" + msgstr "signature-string niet herkend" + + #: config/cris/cris.c:2434 + msgid "unrecognized supposed constant in cris_global_pic_symbol" + msgstr "" + + #: config/cris/cris.c:2453 + #, fuzzy, c-format + msgid "-max-stackframe=%d is not usable, not between 0 and %d" + msgstr "-mregparm=%d ligt niet tussen 0 en %d" + + #: config/cris/cris.c:2481 + #, c-format + msgid "unknown CRIS version specification in -march= or -mcpu= : %s" + msgstr "" + + #: config/cris/cris.c:2517 + #, c-format + msgid "unknown CRIS cpu version specification in -mtune= : %s" + msgstr "" + + #: config/cris/cris.c:2535 + #, fuzzy + msgid "-fPIC not supported in this configuration" + msgstr "alias-definities worden niet ondersteund in deze configuratie; genegeerd" + + #: config/cris/cris.c:2551 + msgid "that particular -g option is invalid with -maout and -melinux" + msgstr "" + + #: config/cris/cris.c:2742 config/cris/cris.c:2787 + msgid "unexpected side-effects in address" + msgstr "" + + #: config/cris/cris.c:2888 + msgid "PIC register isn't set up" + msgstr "" + + #: config/cris/cris.c:2901 + #, fuzzy + msgid "unexpected address expression" + msgstr "ongeldige waarheidsexpressie" + + #. Labels are never marked as global symbols. + #: config/cris/cris.c:2915 + msgid "unexpected PIC symbol" + msgstr "" + + #: config/cris/cris.c:2919 + msgid "emitting PIC operand, but PIC register isn't set up" + msgstr "" + + #: config/cris/cris.c:2928 + msgid "unexpected NOTE as addr_const:" + msgstr "" + + #: config/cris/aout.h:106 + msgid "Compile for the MMU-less Etrax 100-based elinux system" + msgstr "" + + #: config/cris/aout.h:113 + msgid "For elinux, request a specified stack-size for this program" + msgstr "" + + #. No "no-etrax" as it does not really imply any model. On the other hand, "etrax" implies the common (and large) subset matching all models. + #: config/cris/cris.h:333 + msgid "Compile for ETRAX 4 (CRIS v3)" + msgstr "" + + #: config/cris/cris.h:338 + msgid "Compile for ETRAX 100 (CRIS v8)" + msgstr "" + + #: config/cris/cris.h:342 + msgid "Emit verbose debug information in assembly code" + msgstr "" + + #: config/cris/cris.h:345 + msgid "Do not use condition codes from normal instructions" + msgstr "" + + #: config/cris/cris.h:349 + msgid "Do not emit addressing modes with side-effect assignment" + msgstr "" + + #: config/cris/cris.h:352 + msgid "Do not tune stack alignment" + msgstr "" + + #: config/cris/cris.h:355 + msgid "Do not tune writable data alignment" + msgstr "" + + #: config/cris/cris.h:358 + msgid "Do not tune code and read-only data alignment" + msgstr "" + + #: config/cris/cris.h:367 + msgid "Align code and data to 32 bits" + msgstr "" + + #: config/cris/cris.h:380 + msgid "Don't align items in code or data" + msgstr "" + + #: config/cris/cris.h:383 + msgid "Do not emit function prologue or epilogue" + msgstr "" + + #. We have to handle this m-option here since we can't wash it off in both CC1_SPEC and CC1PLUS_SPEC. + #: config/cris/cris.h:387 + msgid "Use the most feature-enabling options allowed by other options" + msgstr "" + + #. We must call it "override-" since calling it "no-" will cause gcc.c to forget it, if there's a "later" -mbest-lib-options. Kludgy, but needed for some multilibbed files. + #: config/cris/cris.h:393 + msgid "Override -mbest-lib-options" + msgstr "" + + #: config/cris/cris.h:425 + msgid "Generate code for the specified chip or CPU version" + msgstr "" + + #: config/cris/cris.h:427 + #, fuzzy + msgid "Tune alignment for the specified chip or CPU version" + msgstr "er kan geen alignment opgegeven worden voor `%s'" + + #: config/cris/cris.h:429 + msgid "Warn when a stackframe is larger than the specified size" + msgstr "" + + #. Node: Profiling + #: config/cris/cris.h:1025 + msgid "no FUNCTION_PROFILER for CRIS" + msgstr "" + + #: config/cris/linux.h:74 + msgid "Together with -fpic and -fPIC, do not use GOTPLT references" + msgstr "" + + #: config/d30v/d30v.c:209 + #, c-format + msgid "bad modes_tieable_p for register %s, mode1 %s, mode2 %s" + msgstr "" + + #: config/d30v/d30v.c:2676 + msgid "bad insn to d30v_print_operand_address:" + msgstr "" + + #: config/d30v/d30v.c:2693 config/d30v/d30v.c:2754 config/d30v/d30v.c:2775 + #: config/d30v/d30v.c:2793 + msgid "bad insn to d30v_print_operand_memory_reference:" + msgstr "" + + #: config/d30v/d30v.c:2861 + msgid "bad insn to d30v_print_operand, 'f' modifier:" + msgstr "" + + #: config/d30v/d30v.c:2870 + msgid "bad insn to d30v_print_operand, 'A' modifier:" + msgstr "" + + #: config/d30v/d30v.c:2877 + msgid "bad insn to d30v_print_operand, 'M' modifier:" + msgstr "" + + #: config/d30v/d30v.c:2931 + msgid "bad insn to print_operand, 'F' or 'T' modifier:" + msgstr "" + + #: config/d30v/d30v.c:2942 + msgid "bad insn to print_operand, 'B' modifier:" + msgstr "" + + #: config/d30v/d30v.c:2949 + msgid "bad insn to print_operand, 'E' modifier:" + msgstr "" + + #: config/d30v/d30v.c:2967 + msgid "bad insn to print_operand, 'R' modifier:" + msgstr "" + + #: config/d30v/d30v.c:2976 config/d30v/d30v.c:2984 + msgid "bad insn to print_operand, 's' modifier:" + msgstr "" + + #: config/d30v/d30v.c:3013 + msgid "bad insn in d30v_print_operand, 0 case" + msgstr "" + + #: config/d30v/d30v.c:3368 + msgid "d30v_emit_comparison" + msgstr "" + + #: config/d30v/d30v.c:3412 + msgid "bad call to d30v_move_2words" + msgstr "" + + #: config/d30v/d30v.h:108 + msgid "Enable use of conditional move instructions" + msgstr "" + + #: config/d30v/d30v.h:111 + msgid "Disable use of conditional move instructions" + msgstr "" + + #: config/d30v/d30v.h:114 + msgid "Debug argument support in compiler" + msgstr "" + + #: config/d30v/d30v.h:117 + msgid "Debug stack support in compiler" + msgstr "" + + #: config/d30v/d30v.h:120 + msgid "Debug memory address support in compiler" + msgstr "" + + #: config/d30v/d30v.h:123 + msgid "Make adjacent short instructions parallel if possible" + msgstr "" + + #: config/d30v/d30v.h:126 + msgid "Do not make adjacent short instructions parallel" + msgstr "" + + #: config/d30v/d30v.h:129 config/d30v/d30v.h:132 + msgid "Link programs/data to be in external memory by default" + msgstr "" + + #: config/d30v/d30v.h:135 + msgid "Link programs/data to be in onchip memory by default" + msgstr "" + + #: config/d30v/d30v.h:143 + msgid "Change the branch costs within the compiler" + msgstr "" + + #: config/d30v/d30v.h:146 + msgid "Change the threshold for conversion to conditional execution" + msgstr "" + + #: config/dsp16xx/dsp16xx.c:1446 config/dsp16xx/dsp16xx.c:1469 + #, fuzzy + msgid "stack size > 32k" + msgstr "Stackgrootte > 32k" + + #: config/dsp16xx/dsp16xx.c:1678 + #, fuzzy + msgid "invalid addressing mode" + msgstr "Ongeldige addresseringsmodus" + + # of is het 'slechte register-uitbreidingscode'? + #: config/dsp16xx/dsp16xx.c:1857 + #, fuzzy + msgid "bad register extension code" + msgstr "Slechte code voor registeruitbreiding" + + #: config/dsp16xx/dsp16xx.c:1958 + #, fuzzy + msgid "invalid offset in ybase addressing" + msgstr "Ongeldige offset in ybase-addressering" + + #: config/dsp16xx/dsp16xx.c:1961 + #, fuzzy + msgid "invalid register in ybase addressing" + msgstr "Ongeldig register in ybase-addressering" + + #: config/dsp16xx/dsp16xx.c:1990 + msgid "inline float constants not supported on this host" + msgstr "inline floatconstantes worden op deze host niet ondersteund" + + #: config/dsp16xx/dsp16xx.c:2140 + #, fuzzy + msgid "invalid shift operator in emit_1600_core_shift" + msgstr "Ongeldige shift-operator in emit_1600_core_shift" + + #: config/dsp16xx/dsp16xx.c:2469 + #, fuzzy + msgid "invalid mode for gen_tst_reg" + msgstr "Ongeldige modus voor gen_tst_reg" + + #: config/dsp16xx/dsp16xx.c:2541 + #, fuzzy + msgid "invalid mode for integer comparison in gen_compare_reg" + msgstr "Ongeldige modus voor integervergelijking in gen_compare_reg" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/dsp16xx/dsp16xx.h:215 + msgid "Pass parameters in registers (default)" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:217 + msgid "Don't pass parameters in registers" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:219 + msgid "Generate code for near calls" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:221 + msgid "Don't generate code for near calls" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:223 + msgid "Generate code for near jumps" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:225 + msgid "Don't generate code for near jumps" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:227 + msgid "Generate code for a bit-manipulation unit" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:229 + msgid "Don't generate code for a bit-manipulation unit" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:231 + msgid "Generate code for memory map1" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:233 + msgid "Generate code for memory map2" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:235 + msgid "Generate code for memory map3" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:237 + msgid "Generate code for memory map4" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:239 + msgid "Ouput extra code for initialized data" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:241 + msgid "Don't let reg. allocator use ybase registers" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:243 + msgid "Output extra debug info in Luxworks environment" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:245 + msgid "Save temp. files in Luxworks environment" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:257 + msgid "Specify alternate name for text section" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:259 + msgid "Specify alternate name for data section" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:261 + msgid "Specify alternate name for bss section" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:263 + msgid "Specify alternate name for constant section" + msgstr "" + + #: config/dsp16xx/dsp16xx.h:265 + msgid "Specify alternate name for dsp16xx chip" + msgstr "" + + #. Output assembler code to FILE to increment profiler label # LABELNO + #. for profiling a function entry. + #: config/dsp16xx/dsp16xx.h:1219 config/dsp16xx/dsp16xx.h:1224 + #: config/dsp16xx/dsp16xx.h:1229 config/dsp16xx/dsp16xx.h:1809 + #: config/dsp16xx/dsp16xx.h:1814 + #, fuzzy + msgid "profiling not implemented yet" + msgstr "profileren wordt niet ondersteund wanneer -mg gebruikt wordt\n" + + #. Emit RTL insns to initialize the variable parts of a trampoline. + #. FNADDR is an RTX for the address of the function's pure code. + #. CXT is an RTX for the static chain value for the function. + #: config/dsp16xx/dsp16xx.h:1240 config/dsp16xx/dsp16xx.h:1252 + #, fuzzy + msgid "trampolines not yet implemented" + msgstr "parameter wijst naar een onvolledig type" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/elxsi/elxsi.h:51 + msgid "Generate code the unix assembler can handle" + msgstr "" + + #: config/elxsi/elxsi.h:52 + msgid "Generate code an embedded assembler can handle" + msgstr "" + + #: config/fr30/fr30.c:456 + msgid "fr30_print_operand_address: unhandled address" + msgstr "" + + #: config/fr30/fr30.c:483 + #, c-format + msgid "fr30_print_operand: unrecognized %p code" + msgstr "" + + #: config/fr30/fr30.c:503 + msgid "fr30_print_operand: unrecognized %b code" + msgstr "" + + #: config/fr30/fr30.c:524 + msgid "fr30_print_operand: unrecognized %B code" + msgstr "" + + #: config/fr30/fr30.c:532 + #, fuzzy + msgid "fr30_print_operand: invalid operand to %A code" + msgstr "ongeldige operand voor %N-code" + + #: config/fr30/fr30.c:549 + #, c-format + msgid "fr30_print_operand: invalid %x code" + msgstr "" + + #: config/fr30/fr30.c:556 + msgid "fr30_print_operand: invalid %F code" + msgstr "" + + #: config/fr30/fr30.c:572 + msgid "fr30_print_operand: unknown code" + msgstr "" + + #: config/fr30/fr30.c:601 config/fr30/fr30.c:610 config/fr30/fr30.c:621 + #: config/fr30/fr30.c:634 + msgid "fr30_print_operand: unhandled MEM" + msgstr "" + + #: config/fr30/fr30.h:57 + msgid "Assume small address space" + msgstr "" + + #: config/h8300/h8300.c:141 + #, fuzzy + msgid "-ms2600 is used without -ms" + msgstr "macro `%s' gebruikt zonder argumenten" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/h8300/h8300.h:117 + msgid "Generate H8/S code" + msgstr "" + + #: config/h8300/h8300.h:118 + msgid "Do not generate H8/S code" + msgstr "" + + #: config/h8300/h8300.h:119 + msgid "Generate H8/S2600 code" + msgstr "" + + #: config/h8300/h8300.h:120 + msgid "Do not generate H8/S2600 code" + msgstr "" + + #: config/h8300/h8300.h:121 + msgid "Make integers 32 bits wide" + msgstr "" + + #: config/h8300/h8300.h:124 + msgid "Use registers for argument passing" + msgstr "" + + #: config/h8300/h8300.h:126 + msgid "Do not use registers for argument passing" + msgstr "" + + #: config/h8300/h8300.h:128 + msgid "Consider access to byte sized memory slow" + msgstr "" + + #: config/h8300/h8300.h:129 + msgid "Enable linker relaxing" + msgstr "" + + #: config/h8300/h8300.h:131 + msgid "Generate H8/300H code" + msgstr "" + + #: config/h8300/h8300.h:132 + msgid "Do not generate H8/300H code" + msgstr "" + + #: config/h8300/h8300.h:133 + msgid "Use H8/300 alignment rules" + msgstr "" + + # Moet 'signature-string' vertaald worden? + #: config/i370/i370-c.c:54 + #, fuzzy + msgid "junk at end of #pragma map" + msgstr "Brol aan einde van signature-string." + + #: config/i370/i370-c.c:60 + #, fuzzy + msgid "malformed #pragma map, ignored" + msgstr "misvormde #pragma pack(pop[,id])" + + #: config/i370/i370.c:897 + msgid "real name is too long - alias ignored" + msgstr "" + + #: config/i370/i370.c:902 + msgid "alias name is too long - alias ignored" + msgstr "" + + #: config/i370/i370.c:1173 + #, fuzzy + msgid "internal error--no jump follows compare:" + msgstr "interne fout - dup-operatie" + + #. Macro to define tables used to set the flags. This is a list in braces + #. of pairs in braces, each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/i370/i370.h:63 + msgid "Generate char instructions" + msgstr "" + + #: config/i370/i370.h:64 + msgid "Do not generate char instructions" + msgstr "" + + #: config/i386/i386.c:924 + #, fuzzy, c-format + msgid "code model %s not supported in PIC mode" + msgstr "afrondingsmodus niet ondersteund voor VAX-floats" + + #: config/i386/i386.c:934 config/sparc/sparc.c:346 + #, c-format + msgid "bad value (%s) for -mcmodel= switch" + msgstr "slechte waarde (%s) voor optie -mcmodel=" + + #: config/i386/i386.c:949 + #, fuzzy, c-format + msgid "bad value (%s) for -masm= switch" + msgstr "slechte waarde (%s) voor optie -mabi=" + + #: config/i386/i386.c:952 + #, fuzzy, c-format + msgid "code model `%s' not supported in the %s bit mode" + msgstr "ANSI C ondersteunt de `%c' lengte-optie niet" + + #: config/i386/i386.c:955 + msgid "code model `large' not supported yet" + msgstr "" + + #: config/i386/i386.c:957 + #, c-format + msgid "%i-bit mode not compiled in" + msgstr "" + + #: config/i386/i386.c:987 config/mips/mips.c:4972 + #, c-format + msgid "bad value (%s) for -march= switch" + msgstr "slechte waarde (%s) voor de -march= optie" + + #: config/i386/i386.c:998 config/mips/mips.c:4928 + #, c-format + msgid "bad value (%s) for -mcpu= switch" + msgstr "slechte waarde (%s) voor de -march= optie" + + #: config/i386/i386.c:1017 + #, c-format + msgid "-mregparm=%d is not between 0 and %d" + msgstr "-mregparm=%d ligt niet tussen 0 en %d" + + #: config/i386/i386.c:1030 + #, fuzzy + msgid "-malign-loops is obsolete, use -falign-loops" + msgstr "-malign-loops=%d ligt niet tussen 0 en %d" + + #: config/i386/i386.c:1035 config/i386/i386.c:1048 config/i386/i386.c:1061 + #, c-format + msgid "-malign-loops=%d is not between 0 and %d" + msgstr "-malign-loops=%d ligt niet tussen 0 en %d" + + #: config/i386/i386.c:1043 + #, fuzzy + msgid "-malign-jumps is obsolete, use -falign-jumps" + msgstr "-malign-jumps=%d ligt niet tussen 0 en %d" + + #: config/i386/i386.c:1056 + #, fuzzy + msgid "-malign-functions is obsolete, use -falign-functions" + msgstr "-malign-functions=%d ligt niet tussen 0 en %d" + + #: config/i386/i386.c:1094 + #, fuzzy, c-format + msgid "-mpreferred-stack-boundary=%d is not between %d and 12" + msgstr "-mpreferred_stack_boundary=%d ligt niet tussen 2 en 31" + + #: config/i386/i386.c:1106 + #, c-format + msgid "-mbranch-cost=%d is not between 0 and 5" + msgstr "-mbranch-cost=%d ligt niet tussen 0 en 5" + + #: config/i386/i386.c:1123 + msgid "-malign-double makes no sense in the 64bit mode" + msgstr "" + + #: config/i386/i386.c:1125 + #, fuzzy + msgid "-mrtd calling convention not supported in the 64bit mode" + msgstr "alias-definities worden niet ondersteund in deze configuratie; genegeerd" + + #: config/i386/i386.c:1141 config/i386/i386.c:1152 + #, fuzzy + msgid "SSE instruction set disabled, using 387 arithmetics" + msgstr "pointer naar functie gebruikt in rekensom" + + #: config/i386/i386.c:1157 + #, fuzzy + msgid "387 instruction set disabled, using SSE arithmetics" + msgstr "pointer naar functie gebruikt in rekensom" + + #: config/i386/i386.c:1164 + #, fuzzy, c-format + msgid "bad value (%s) for -mfpmath= switch" + msgstr "slechte waarde (%s) voor de -march= optie" + + #: config/i386/i386.c:1294 + #, c-format + msgid "`%s' attribute requires an integer constant argument" + msgstr "" + + #: config/i386/i386.c:1300 + #, fuzzy, c-format + msgid "argument to `%s' attribute larger than %d" + msgstr "kan het `%s' attribuut niet instellen na een definitie" + + #: config/i386/i386.c:5328 + msgid "invalid UNSPEC as operand" + msgstr "ongeldige UNSPEC als operand" + + #: config/i386/i386.c:5529 + msgid "extended registers have no high halves" + msgstr "" + + #: config/i386/i386.c:5544 + msgid "unsupported operand size for extended register" + msgstr "" + + #: config/i386/i386.c:5791 + msgid "operand is neither a constant nor a condition code, invalid operand code 'c'" + msgstr "" + + #: config/i386/i386.c:9774 + #, fuzzy + msgid "unknown insn mode" + msgstr "onbekende machine-modus `%s'" + + #. @@@ better error message + #: config/i386/i386.c:11617 config/i386/i386.c:11650 + msgid "selector must be an immediate" + msgstr "" + + #. @@@ better error message + #: config/i386/i386.c:11808 config/i386/i386.c:11836 + msgid "mask must be an immediate" + msgstr "" + + #: config/i386/winnt.c:94 + #, fuzzy, c-format + msgid "`%s' attribute only applies to variables" + msgstr "het `%s' attribuut heeft geen betekenis voor types" + + #: config/i386/winnt.c:262 + #, fuzzy, c-format + msgid "`%s' declared as both exported to and imported from a DLL" + msgstr "`%s' gedeclareerd als geëxporteerd naar én geïmporteerd uit een DLL." + + #: config/i386/cygwin.h:51 + msgid "Use the Cygwin interface" + msgstr "" + + #: config/i386/cygwin.h:53 + msgid "Use the Mingw32 interface" + msgstr "" + + #: config/i386/cygwin.h:54 + msgid "Create GUI application" + msgstr "" + + #: config/i386/cygwin.h:55 + msgid "Don't set Windows defines" + msgstr "" + + #: config/i386/cygwin.h:56 + msgid "Set Windows defines" + msgstr "" + + #: config/i386/cygwin.h:58 + msgid "Create console application" + msgstr "" + + #: config/i386/cygwin.h:59 config/i386/win32.h:59 + msgid "Generate code for a DLL" + msgstr "" + + #: config/i386/cygwin.h:61 config/i386/win32.h:61 + msgid "Ignore dllimport for functions" + msgstr "" + + #: config/i386/cygwin.h:63 + msgid "Use Mingw-specific thread support" + msgstr "" + + #: config/i386/cygwin.h:257 + #, c-format + msgid "-f%s ignored for target (all code is position independent)" + msgstr "" + + #: config/i386/dgux.h:60 + msgid "Retain standard MXDB information" + msgstr "" + + #: config/i386/dgux.h:62 + msgid "Retain legend information" + msgstr "" + + #: config/i386/dgux.h:65 + msgid "Generate external legend information" + msgstr "" + + #: config/i386/dgux.h:67 + msgid "Emit identifying info in .s file" + msgstr "" + + #: config/i386/dgux.h:69 + #, fuzzy + msgid "Warn when a function arg is a structure" + msgstr "argument #%d is een structure" + + #: config/i386/dgux.h:252 + #, fuzzy + msgid "argument is a structure" + msgstr "argument #%d is een structure" + + #: config/i386/djgpp.h:201 + msgid "-mbnu210 is ignored (option is obsolete)" + msgstr "" + + #: config/i386/i386.h:45 config/mips/mips.h:186 + msgid "half-pic init called on systems that don't support it" + msgstr "" + + #. Deprecated. + #: config/i386/i386.h:297 + #, fuzzy + msgid "Alternate calling convention" + msgstr "Onbeëindigde stringconstante" + + #: config/i386/i386.h:299 config/m68k/m68k.h:180 config/ns32k/ns32k.h:106 + msgid "Use normal calling convention" + msgstr "" + + #: config/i386/i386.h:301 + msgid "Align some doubles on dword boundary" + msgstr "" + + #: config/i386/i386.h:303 + msgid "Align doubles on word boundary" + msgstr "" + + #: config/i386/i386.h:305 + msgid "Uninitialized locals in .bss" + msgstr "" + + #: config/i386/i386.h:307 + msgid "Uninitialized locals in .data" + msgstr "" + + #: config/i386/i386.h:309 config/m68k/linux-aout.h:45 config/m68k/linux.h:50 + msgid "Use IEEE math for fp comparisons" + msgstr "" + + #: config/i386/i386.h:311 + msgid "Do not use IEEE math for fp comparisons" + msgstr "" + + #: config/i386/i386.h:313 + msgid "Return values of functions in FPU registers" + msgstr "" + + #: config/i386/i386.h:315 + #, fuzzy + msgid "Do not return values of functions in FPU registers" + msgstr "grootte van teruggeefwaarde van `%s' is %u bytes" + + #: config/i386/i386.h:317 + msgid "Do not generate sin, cos, sqrt for FPU" + msgstr "" + + #: config/i386/i386.h:319 + msgid "Generate sin, cos, sqrt for FPU" + msgstr "" + + #: config/i386/i386.h:321 + msgid "Omit the frame pointer in leaf functions" + msgstr "" + + #: config/i386/i386.h:324 + msgid "Enable stack probing" + msgstr "" + + #. undocumented + #. undocumented + #: config/i386/i386.h:329 + #, fuzzy + msgid "Align destination of the string operations" + msgstr "ANSI C staat het testen van asserties niet toe" + + #: config/i386/i386.h:331 + msgid "Do not align destination of the string operations" + msgstr "" + + #: config/i386/i386.h:333 + msgid "Inline all known string operations" + msgstr "" + + #: config/i386/i386.h:335 + #, fuzzy + msgid "Do not inline all known string operations" + msgstr "ANSI C staat het testen van asserties niet toe" + + #: config/i386/i386.h:337 config/i386/i386.h:342 + msgid "Use push instructions to save outgoing arguments" + msgstr "" + + #: config/i386/i386.h:339 config/i386/i386.h:344 + msgid "Do not use push instructions to save outgoing arguments" + msgstr "" + + #: config/i386/i386.h:346 + #, fuzzy + msgid "Support MMX built-in functions" + msgstr "ingebouwde functie `%s' is niet geïmplementeerd" + + #: config/i386/i386.h:348 + #, fuzzy + msgid "Do not support MMX built-in functions" + msgstr "conflicterende types voor ingebouwde functie `%s'" + + #: config/i386/i386.h:351 + #, fuzzy + msgid "Support 3DNow! built-in functions" + msgstr "ingebouwde functie `%s' wordt verborgen" + + #: config/i386/i386.h:354 + #, fuzzy + msgid "Do not support 3DNow! built-in functions" + msgstr "conflicterende types voor ingebouwde functie `%s'" + + #: config/i386/i386.h:356 + msgid "Support MMX and SSE built-in functions and code generation" + msgstr "" + + #: config/i386/i386.h:359 + msgid "Do not support MMX and SSE built-in functions and code generation" + msgstr "" + + #: config/i386/i386.h:361 + msgid "Support MMX, SSE and SSE2 built-in functions and code generation" + msgstr "" + + #: config/i386/i386.h:364 + msgid "Do not support MMX, SSE and SSE2 built-in functions and code generation" + msgstr "" + + #: config/i386/i386.h:366 + msgid "sizeof(long double) is 16" + msgstr "" + + #: config/i386/i386.h:368 + msgid "sizeof(long double) is 12" + msgstr "" + + #: config/i386/i386.h:370 + msgid "Generate 64bit x86-64 code" + msgstr "" + + #: config/i386/i386.h:372 + msgid "Generate 32bit i386 code" + msgstr "" + + #: config/i386/i386.h:374 + msgid "Use red-zone in the x86-64 code" + msgstr "" + + #: config/i386/i386.h:376 + msgid "Do not use red-zone in the x86-64 code" + msgstr "" + + #. This macro is similar to `TARGET_SWITCHES' but defines names of + #. command options that have values. Its definition is an + #. initializer with a subgrouping for each command option. + #. + #. Each subgrouping contains a string constant, that defines the + #. fixed part of the option name, and the address of a variable. The + #. variable, type `char *', is set to the variable part of the given + #. option if the fixed part matches. The actual option name is made + #. by appending `-m' to the specified name. + #: config/i386/i386.h:422 config/rs6000/rs6000.h:428 config/sparc/sparc.h:668 + msgid "Schedule code for given CPU" + msgstr "" + + #: config/i386/i386.h:424 + msgid "Generate floating point mathematics using given instruction set" + msgstr "" + + #: config/i386/i386.h:426 + msgid "Generate code for given CPU" + msgstr "" + + #: config/i386/i386.h:428 + msgid "Number of registers used to pass integer arguments" + msgstr "" + + #. TARGET_DEFAULT is defined in sun*.h and isi.h, etc. + #. This macro is similar to `TARGET_SWITCHES' but defines names of + #. command options that have values. Its definition is an + #. initializer with a subgrouping for each command option. + #. + #. Each subgrouping contains a string constant, that defines the + #. fixed part of the option name, and the address of a variable. The + #. variable, type `char *', is set to the variable part of the given + #. option if the fixed part matches. The actual option name is made + #. by appending `-m' to the specified name. + #: config/i386/i386.h:430 config/m68k/m68k.h:263 + #, fuzzy + msgid "Loop code aligned to this power of 2" + msgstr "gevraagd alignment is geen macht van 2" + + #: config/i386/i386.h:432 config/m68k/m68k.h:265 + #, fuzzy + msgid "Jump targets are aligned to this power of 2" + msgstr "gevraagd alignment is geen macht van 2" + + #: config/i386/i386.h:434 config/m68k/m68k.h:267 + #, fuzzy + msgid "Function starts are aligned to this power of 2" + msgstr "gevraagd alignment is geen macht van 2" + + #: config/i386/i386.h:437 + msgid "Attempt to keep stack aligned to this power of 2" + msgstr "" + + #: config/i386/i386.h:439 + msgid "Branches are this expensive (1-5, arbitrary units)" + msgstr "" + + #: config/i386/i386.h:441 + msgid "Use given x86-64 code model" + msgstr "" + + #: config/i386/i386.h:447 + msgid "Use given assembler dialect" + msgstr "" + + #: config/i386/osf1elf.h:112 + msgid "Profiling uses mcount" + msgstr "" + + #: config/i386/osfrose.h:60 + msgid "Emit half-PIC code" + msgstr "" + + #. intentionally undoc + #. intentionally undoc + #: config/i386/osfrose.h:67 + msgid "Emit ELF object code" + msgstr "" + + #: config/i386/osfrose.h:69 + msgid "Emit ROSE object code" + msgstr "" + + #: config/i386/osfrose.h:71 + msgid "Symbols have a leading underscore" + msgstr "" + + #: config/i386/osfrose.h:74 + msgid "Align to >word boundaries" + msgstr "" + + #: config/i386/osfrose.h:77 + msgid "Use mcount for profiling" + msgstr "" + + #: config/i386/osfrose.h:79 + msgid "Use mcount_ptr for profiling" + msgstr "" + + #: config/i386/sco5.h:771 + msgid "Generate ELF output" + msgstr "" + + #: config/i386/win32.h:53 + msgid "Use Mingw32 interface" + msgstr "" + + #: config/i386/win32.h:55 + msgid "Use Cygwin interface" + msgstr "" + + #: config/i386/win32.h:57 + msgid "Use bare Windows interface" + msgstr "" + + #. If the environment variable DJDIR is not defined, then DJGPP is not installed correctly and GCC will quickly become confused with the default prefix settings. Report the problem now so the user doesn't receive deceptive "file not found" error messages later. + #. DJDIR is automatically defined by the DJGPP environment config file pointed to by the environment variable DJGPP. Examine DJGPP to try and figure out what's wrong. + #: config/i386/xm-djgpp.h:71 + msgid "environment variable DJGPP not defined" + msgstr "" + + #: config/i386/xm-djgpp.h:73 + #, c-format + msgid "environment variable DJGPP points to missing file '%s'" + msgstr "" + + #: config/i386/xm-djgpp.h:76 + #, c-format + msgid "environment variable DJGPP points to corrupt file '%s'" + msgstr "" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/i860/i860.h:56 config/i860/paragon.h:28 + msgid "Generate code which uses the FPU" + msgstr "" + + #: config/i860/i860.h:57 config/i860/i860.h:58 config/i860/paragon.h:29 + #: config/i860/paragon.h:30 config/i860/paragon.h:31 + msgid "Do not generate code which uses the FPU" + msgstr "" + + #: config/i960/i960-c.c:67 + msgid "sorry, not implemented: #pragma align NAME=SIZE" + msgstr "" + + #: config/i960/i960-c.c:72 + #, fuzzy + msgid "malformed #pragma align - ignored" + msgstr "misvormde #pragma weak" + + #: config/i960/i960-c.c:110 + msgid "sorry, not implemented: #pragma noalign NAME" + msgstr "" + + #: config/i960/i960.c:1405 config/m68k/m68k.c:665 config/rs6000/rs6000.c:8094 + #, fuzzy + msgid "stack limit expression is not supported" + msgstr "-pipe wordt niet ondersteund" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #. ??? Not all ten of these architecture variations actually exist, but I + #. am not sure which are real and which aren't. + #: config/i960/i960.h:246 + msgid "Generate SA code" + msgstr "" + + #: config/i960/i960.h:249 + msgid "Generate SB code" + msgstr "" + + #. {"sc", (TARGET_FLAG_NUMERICS|TARGET_FLAG_PROTECTED| TARGET_FLAG_MC|TARGET_FLAG_COMPLEX_ADDR), N_("Generate SC code")}, + #: config/i960/i960.h:254 + msgid "Generate KA code" + msgstr "" + + #: config/i960/i960.h:257 + msgid "Generate KB code" + msgstr "" + + #. {"kc", (TARGET_FLAG_NUMERICS|TARGET_FLAG_PROTECTED| TARGET_FLAG_MC|TARGET_FLAG_COMPLEX_ADDR), N_("Generate KC code")}, + #: config/i960/i960.h:262 + msgid "Generate JA code" + msgstr "" + + #: config/i960/i960.h:264 + msgid "Generate JD code" + msgstr "" + + #: config/i960/i960.h:267 + msgid "Generate JF code" + msgstr "" + + #: config/i960/i960.h:269 + msgid "generate RP code" + msgstr "" + + #: config/i960/i960.h:272 + msgid "Generate MC code" + msgstr "" + + #: config/i960/i960.h:275 + msgid "Generate CA code" + msgstr "" + + #. {"cb", (TARGET_FLAG_NUMERICS|TARGET_FLAG_C_SERIES| TARGET_FLAG_BRANCH_PREDICT|TARGET_FLAG_CODE_ALIGN), N_("Generate CB code")}, {"cc", (TARGET_FLAG_NUMERICS|TARGET_FLAG_PROTECTED| TARGET_FLAG_C_SERIES|TARGET_FLAG_BRANCH_PREDICT| TARGET_FLAG_CODE_ALIGN), N_("Generate CC code")}, + #: config/i960/i960.h:285 + msgid "Generate CF code" + msgstr "" + + #: config/i960/i960.h:291 + #, fuzzy + msgid "Use alternate leaf function entries" + msgstr "sizeof toegepast op een functie-type" + + #: config/i960/i960.h:293 + msgid "Do not use alternate leaf function entries" + msgstr "" + + #: config/i960/i960.h:295 + msgid "Perform tail call optimization" + msgstr "" + + #: config/i960/i960.h:297 + msgid "Do not perform tail call optimization" + msgstr "" + + #: config/i960/i960.h:299 + #, fuzzy + msgid "Use complex addressing modes" + msgstr "Ongeldige addresseringsmodus" + + #: config/i960/i960.h:301 + #, fuzzy + msgid "Do not use complex addressing modes" + msgstr "Ongeldige addresseringsmodus" + + #: config/i960/i960.h:303 + msgid "Align code to 8 byte boundary" + msgstr "" + + #: config/i960/i960.h:305 + msgid "Do not align code to 8 byte boundary" + msgstr "" + + #. {"clean-linkage", (TARGET_FLAG_CLEAN_LINKAGE), N_("Force use of prototypes")}, {"no-clean-linkage", -(TARGET_FLAG_CLEAN_LINKAGE), N_("Do not force use of prototypes")}, + #: config/i960/i960.h:311 config/i960/i960.h:313 + msgid "Enable compatibility with iC960 v2.0" + msgstr "" + + #: config/i960/i960.h:315 + msgid "Enable compatibility with iC960 v3.0" + msgstr "" + + #: config/i960/i960.h:317 config/i960/i960.h:319 + msgid "Enable compatibility with ic960 assembler" + msgstr "" + + #: config/i960/i960.h:321 + msgid "Do not permit unaligned accesses" + msgstr "" + + #: config/i960/i960.h:323 + msgid "Permit unaligned accesses" + msgstr "" + + #: config/i960/i960.h:325 + msgid "Layout types like Intel's v1.3 gcc" + msgstr "" + + #: config/i960/i960.h:327 + msgid "Do not layout types like Intel's v1.3 gcc" + msgstr "" + + #: config/i960/i960.h:329 config/sparc/freebsd.h:80 config/sparc/linux.h:85 + #: config/sparc/linux64.h:138 + msgid "Use 64 bit long doubles" + msgstr "" + + #: config/i960/i960.h:331 + #, fuzzy + msgid "Enable linker relaxation" + msgstr "lege declaratie" + + #: config/i960/i960.h:333 + msgid "Do not enable linker relaxation" + msgstr "" + + #. Override conflicting target switch options. + #. Doesn't actually detect if more than one -mARCH option is given, but + #. does handle the case of two blatantly conflicting -mARCH options. + #: config/i960/i960.h:348 config/i960/i960.h:358 + msgid "conflicting architectures defined - using C series" + msgstr "" + + #: config/i960/i960.h:353 + msgid "conflicting architectures defined - using K series" + msgstr "" + + #: config/i960/i960.h:368 + msgid "iC2.0 and iC3.0 are incompatible - using iC3.0" + msgstr "" + + #. ??? See the LONG_DOUBLE_TYPE_SIZE definition below. + #: config/i960/i960.h:379 + msgid "the -mlong-double-64 option does not work yet" + msgstr "" + + #: config/ia64/ia64.c:3570 + msgid "ia64_print_operand: unknown code" + msgstr "" + + #: config/ia64/ia64.c:3844 + msgid "value of -mfixed-range must have form REG1-REG2" + msgstr "" + + #: config/ia64/ia64.c:3871 + #, fuzzy, c-format + msgid "%s-%s is an empty range" + msgstr "leeg bereik" + + #: config/ia64/ia64.c:3936 + msgid "cannot optimize division for both latency and throughput" + msgstr "" + + #. This macro defines names of command options to set and clear bits in + #. `target_flags'. Its definition is an initializer with a subgrouping for + #. each command option. + #: config/ia64/ia64.h:112 + msgid "Generate big endian code" + msgstr "" + + #: config/ia64/ia64.h:114 config/mcore/mcore.h:159 + msgid "Generate little endian code" + msgstr "" + + #: config/ia64/ia64.h:116 + msgid "Generate code for GNU as" + msgstr "" + + #: config/ia64/ia64.h:118 + msgid "Generate code for Intel as" + msgstr "" + + #: config/ia64/ia64.h:120 + msgid "Generate code for GNU ld" + msgstr "" + + #: config/ia64/ia64.h:122 + msgid "Generate code for Intel ld" + msgstr "" + + #: config/ia64/ia64.h:124 + msgid "Generate code without GP reg" + msgstr "" + + #: config/ia64/ia64.h:126 + msgid "Emit stop bits before and after volatile extended asms" + msgstr "" + + #: config/ia64/ia64.h:128 + msgid "Don't emit stop bits before and after volatile extended asms" + msgstr "" + + #: config/ia64/ia64.h:130 + msgid "Emit code for Itanium (TM) processor B step" + msgstr "" + + #: config/ia64/ia64.h:132 + #, fuzzy + msgid "Use in/loc/out register names" + msgstr "ongeldige registernaam voor `%s'" + + #: config/ia64/ia64.h:134 + msgid "Disable use of sdata/scommon/sbss" + msgstr "" + + #: config/ia64/ia64.h:136 + msgid "Enable use of sdata/scommon/sbss" + msgstr "" + + #: config/ia64/ia64.h:138 + msgid "gp is constant (but save/restore gp on indirect calls)" + msgstr "" + + #: config/ia64/ia64.h:140 + msgid "Generate self-relocatable code" + msgstr "" + + #: config/ia64/ia64.h:142 + msgid "Generate inline division, optimize for latency" + msgstr "" + + #: config/ia64/ia64.h:144 + msgid "Generate inline division, optimize for throughput" + msgstr "" + + #: config/ia64/ia64.h:146 + msgid "Enable Dwarf 2 line debug info via GNU as" + msgstr "" + + #: config/ia64/ia64.h:148 + msgid "Disable Dwarf 2 line debug info via GNU as" + msgstr "" + + #: config/ia64/ia64.h:176 + msgid "Specify range of registers to make fixed" + msgstr "" + + #: config/m32r/m32r.c:130 + #, c-format + msgid "bad value (%s) for -mmodel switch" + msgstr "slechte waarde (%s) voor optie -mmodel" + + #: config/m32r/m32r.c:139 + #, c-format + msgid "bad value (%s) for -msdata switch" + msgstr "slechte waarde (%s) voor optie -msdata" + + # Is the %s the argument, or is it 'of' the argument? + #: config/m32r/m32r.c:310 + #, fuzzy, c-format + msgid "invalid argument of `%s' attribute" + msgstr "ongeldig type-argument `%s'" + + #: config/m32r/m32r.c:408 + msgid "const objects cannot go in .sdata/.sbss" + msgstr "constante objecten kunnen niet in .sdata/.sbbs geplaatst worden" + + #: config/m32r/m32r.c:2248 + #, c-format + msgid "invalid operand to %s code" + msgstr "ongeldige operand voor %s-code" + + #: config/m32r/m32r.c:2255 + #, c-format + msgid "invalid operand to %p code" + msgstr "ongeldige operand voor %p-code" + + #: config/m32r/m32r.c:2311 + msgid "bad insn for 'A'" + msgstr "" + + #: config/m32r/m32r.c:2363 + msgid "invalid operand to %T/%B code" + msgstr "ongeldige operand voor %T/%B-code" + + #: config/m32r/m32r.c:2386 + msgid "invalid operand to %N code" + msgstr "ongeldige operand voor %N-code" + + #: config/m32r/m32r.c:2431 + #, fuzzy + msgid "pre-increment address is not a register" + msgstr "operand `%d' is geen register" + + #: config/m32r/m32r.c:2438 + #, fuzzy + msgid "pre-decrement address is not a register" + msgstr "operand `%d' is geen register" + + #: config/m32r/m32r.c:2445 + #, fuzzy + msgid "post-increment address is not a register" + msgstr "switch-waarde is geen integer" + + #: config/m32r/m32r.c:2523 config/m32r/m32r.c:2539 + #: config/rs6000/rs6000.c:10712 + msgid "bad address" + msgstr "" + + #: config/m32r/m32r.c:2544 + msgid "lo_sum not of register" + msgstr "" + + #. { "relax", TARGET_RELAX_MASK, "" }, { "no-relax", -TARGET_RELAX_MASK, "" }, + #: config/m32r/m32r.h:241 + msgid "Display compile time statistics" + msgstr "" + + #: config/m32r/m32r.h:243 + msgid "Align all loops to 32 byte boundary" + msgstr "" + + #: config/m32r/m32r.h:246 + msgid "Only issue one instruction per cycle" + msgstr "" + + #: config/m32r/m32r.h:249 + #, fuzzy + msgid "Prefer branches over conditional execution" + msgstr "types in voorwaardelijke expressie komen niet overeen" + + #: config/m32r/m32r.h:265 + msgid "Code size: small, medium or large" + msgstr "" + + #: config/m32r/m32r.h:267 + msgid "Small data area: none, sdata, use" + msgstr "" + + #: config/m68hc11/m68hc11.c:236 + #, c-format + msgid "-f%s ignored for 68HC11/68HC12 (not supported)" + msgstr "" + + #. !!!! SCz wrong here. + #: config/m68hc11/m68hc11.c:3032 config/m68hc11/m68hc11.c:3406 + #, fuzzy + msgid "move insn not handled" + msgstr "onvolledige CASE - %s niet opgevangen" + + #: config/m68hc11/m68hc11.c:3252 config/m68hc11/m68hc11.c:3336 + #: config/m68hc11/m68hc11.c:3609 + #, fuzzy + msgid "invalid register in the move instruction" + msgstr "Ongeldig register in ybase-addressering" + + #: config/m68hc11/m68hc11.c:3286 + #, fuzzy + msgid "invalid operand in the instruction" + msgstr "ongeldige operand voor %s-code" + + #: config/m68hc11/m68hc11.c:3583 + #, fuzzy + msgid "invalid register in the instruction" + msgstr "Ongeldig register in ybase-addressering" + + #: config/m68hc11/m68hc11.c:3616 + #, fuzzy + msgid "operand 1 must be a hard register" + msgstr "operand `%d' is geen register" + + #: config/m68hc11/m68hc11.c:3633 + #, fuzzy + msgid "invalid rotate insn" + msgstr "ongeldig karakter in naam van macro-parameter" + + #: config/m68hc11/m68hc11.c:4053 + msgid "registers IX, IY and Z used in the same INSN" + msgstr "" + + #: config/m68hc11/m68hc11.c:4373 config/m68hc11/m68hc11.c:4678 + msgid "cannot do z-register replacement" + msgstr "" + + #: config/m68hc11/m68hc11.c:4727 + #, fuzzy + msgid "invalid Z register replacement for insn" + msgstr "ongeldige registernaam voor `%s'" + + #. Macro to define tables used to set the flags. This is a list in braces of + #. pairs in braces, each pair being { "NAME", VALUE } where VALUE is the bits + #. to set or minus the bits to clear. An empty string NAME is used to + #. identify the default VALUE. + #: config/m68hc11/m68hc11.h:152 + msgid "Compile with 16-bit integer mode" + msgstr "" + + #: config/m68hc11/m68hc11.h:154 + msgid "Compile with 32-bit integer mode" + msgstr "" + + #: config/m68hc11/m68hc11.h:156 + msgid "Auto pre/post decrement increment allowed" + msgstr "" + + #: config/m68hc11/m68hc11.h:158 + msgid "Auto pre/post decrement increment not allowed" + msgstr "" + + #: config/m68hc11/m68hc11.h:160 config/m68hc11/m68hc11.h:164 + msgid "Compile for a 68HC11" + msgstr "" + + #: config/m68hc11/m68hc11.h:162 config/m68hc11/m68hc11.h:166 + msgid "Compile for a 68HC12" + msgstr "" + + #. This macro is similar to `TARGET_SWITCHES' but defines names of + #. command options that have values. Its definition is an + #. initializer with a subgrouping for each command option. + #. + #. Each subgrouping contains a string constant, that defines the + #. fixed part of the option name, and the address of a variable. The + #. variable, type `char *', is set to the variable part of the given + #. option if the fixed part matches. The actual option name is made + #. by appending `-m' to the specified name. + #: config/m68hc11/m68hc11.h:180 + msgid "Specify the register allocation order" + msgstr "" + + #: config/m68hc11/m68hc11.h:182 + msgid "Indicate the number of soft registers available" + msgstr "" + + #: config/m68k/m68k.c:150 + #, c-format + msgid "-malign-loops=%d is not between 1 and %d" + msgstr "-malign-loops=%d ligt niet tussen 1 en %d" + + #: config/m68k/m68k.c:161 + #, c-format + msgid "-malign-jumps=%d is not between 1 and %d" + msgstr "-malign-jumps=%d ligt niet tussen 1 en %d" + + #: config/m68k/m68k.c:172 + #, c-format + msgid "-malign-functions=%d is not between 1 and %d" + msgstr "-malign-functions=%d ligt niet tussen 1 en %d" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/m68k/m68k.h:162 config/m68k/m68k.h:164 + msgid "Generate code for a 68020" + msgstr "" + + #: config/m68k/m68k.h:169 config/m68k/m68k.h:172 + msgid "Generate code for a 68000" + msgstr "" + + #: config/m68k/m68k.h:174 + msgid "Use the bit-field instructions" + msgstr "" + + #: config/m68k/m68k.h:176 + msgid "Do not use the bit-field instructions" + msgstr "" + + #: config/m68k/m68k.h:178 + msgid "Use different calling convention using 'rtd'" + msgstr "" + + #: config/m68k/m68k.h:182 + msgid "Consider type `int' to be 16 bits wide" + msgstr "" + + #: config/m68k/m68k.h:184 + msgid "Consider type `int' to be 32 bits wide" + msgstr "" + + #: config/m68k/m68k.h:186 + msgid "Generate code for a Sun FPA" + msgstr "" + + #: config/m68k/m68k.h:189 + msgid "Do not generate code for a Sun FPA" + msgstr "" + + #: config/m68k/m68k.h:191 config/m68k/m68k.h:193 + msgid "Generate code for a Sun Sky board" + msgstr "" + + #: config/m68k/m68k.h:195 + msgid "Do not use Sky linkage convention" + msgstr "" + + #: config/m68k/m68k.h:197 + msgid "Generate code for a 68881" + msgstr "" + + #: config/m68k/m68k.h:200 + msgid "Generate code with library calls for floating point" + msgstr "" + + #: config/m68k/m68k.h:202 + msgid "Generate code for a 68040, without any new instructions" + msgstr "" + + #: config/m68k/m68k.h:205 + msgid "Generate code for a 68060, without any new instructions" + msgstr "" + + #: config/m68k/m68k.h:209 + msgid "Generate code for a 68030" + msgstr "" + + #: config/m68k/m68k.h:212 + msgid "Generate code for a 68040" + msgstr "" + + #: config/m68k/m68k.h:216 + msgid "Generate code for a 68060" + msgstr "" + + #: config/m68k/m68k.h:221 + msgid "Generate code for a 520X" + msgstr "" + + #: config/m68k/m68k.h:224 + msgid "Generate code for a 68851" + msgstr "" + + #: config/m68k/m68k.h:226 + msgid "Do no generate code for a 68851" + msgstr "" + + #: config/m68k/m68k.h:229 + msgid "Generate code for a 68302" + msgstr "" + + #: config/m68k/m68k.h:232 + msgid "Generate code for a 68332" + msgstr "" + + #: config/m68k/m68k.h:236 + msgid "Generate code for a cpu32" + msgstr "" + + #: config/m68k/m68k.h:239 + msgid "Align variables on a 32-bit boundary" + msgstr "" + + #: config/m68k/m68k.h:241 + msgid "Align variables on a 16-bit boundary" + msgstr "" + + #: config/m68k/m68k.h:243 + msgid "Generate pc-relative code" + msgstr "" + + #: config/m68k/m68k.h:245 + msgid "Do not use unaligned memory references" + msgstr "" + + #: config/m68k/m68k.h:247 + msgid "Use unaligned memory references" + msgstr "" + + #. Sometimes certain combinations of command options do not make + #. sense on a particular target machine. You can define a macro + #. `OVERRIDE_OPTIONS' to take account of this. This macro, if + #. defined, is executed once just after all the command options have + #. been parsed. + #. + #. Don't use this macro to turn on various extra optimizations for + #. `-O'. That is what `OPTIMIZATION_OPTIONS' is for. + #: config/m68k/m68k.h:284 config/m68k/m68kelf.h:267 config/m68k/m68kv4.h:299 + msgid "-fPIC is not currently supported on the 68000 or 68010\n" + msgstr "" + + # Ik ben niet zeker of short-branch vertaald moet worden. + #: config/m88k/m88k.c:900 + #, fuzzy, c-format + msgid "internal gcc monitor: short-branch(%x)" + msgstr "Interne monitor van gcc: short-branch(%x)" + + #: config/m88k/m88k.c:2300 + #, fuzzy + msgid "internal gcc error: Can't express symbolic location" + msgstr "Interne fout van gcc: Kan symbolische locatie niet uitdrukken" + + #: config/m88k/m88k.c:2582 + #, c-format + msgid "argument #%d is a structure" + msgstr "argument #%d is een structure" + + #: config/m88k/m88k.c:2882 + msgid "%R not followed by %B/C/D/E" + msgstr "%E niet gevolgd door %B/C/D/E" + + #: config/m88k/m88k.c:2950 + #, c-format + msgid "invalid %x/X value" + msgstr "ongeldige waarde voor %x/X" + + #: config/m88k/m88k.c:2955 + msgid "invalid %H value" + msgstr "ongeldige waarde voor %H" + + #: config/m88k/m88k.c:2961 + msgid "invalid %h value" + msgstr "ongeldige waarde voor %h" + + #: config/m88k/m88k.c:2967 + msgid "invalid %Q value" + msgstr "ongeldige waarde voor %Q" + + #: config/m88k/m88k.c:2973 + msgid "invalid %q value" + msgstr "ongeldige waarde voor %q" + + #: config/m88k/m88k.c:2979 + #, c-format + msgid "invalid %o value" + msgstr "ongeldige waarde voor %o" + + #: config/m88k/m88k.c:2986 + #, c-format + msgid "invalid %p value" + msgstr "ongeldige waarde voor %p" + + #: config/m88k/m88k.c:2999 config/m88k/m88k.c:3004 + #, c-format + msgid "invalid %s/S value" + msgstr "ongeldige waarde voor %s/S" + + #: config/m88k/m88k.c:3015 + msgid "invalid %P operand" + msgstr "ongeldige operand voor %P" + + #: config/m88k/m88k.c:3046 + msgid "invalid %B value" + msgstr "ongeldige waarde voor %B" + + #: config/m88k/m88k.c:3063 + msgid "invalid %C value" + msgstr "ongeldige waarde voor %C" + + #: config/m88k/m88k.c:3076 + msgid "invalid %D value" + msgstr "ongeldige waarde voor %D" + + #: config/m88k/m88k.c:3084 + #, c-format + msgid "invalid %E value" + msgstr "ongeldige waarde voor %E" + + #: config/m88k/m88k.c:3089 + #, c-format + msgid "`%d' operand isn't a register" + msgstr "operand `%d' is geen register" + + #: config/m88k/m88k.c:3100 + msgid "invalid %r value" + msgstr "" + + #: config/m88k/m88k.c:3107 + msgid "operand is r0" + msgstr "" + + #: config/m88k/m88k.c:3121 + msgid "operand is const_double" + msgstr "" + + #: config/m88k/m88k.c:3140 + msgid "invalid code" + msgstr "" + + #. Do any checking or such that is needed after processing the -m switches. + #: config/m88k/m88k.h:277 + #, fuzzy + msgid "-mtrap-large-shift and -mhandle-large-shift are incompatible" + msgstr "-fpic en -mapcs-reent zijn niet compatibel" + + #: config/m88k/m88k.h:299 + #, fuzzy, c-format + msgid "invalid option `-mshort-data-%s'" + msgstr "Pngeldige optie `-%s'" + + #: config/m88k/m88k.h:304 + #, fuzzy, c-format + msgid "-mshort-data-%s is too large " + msgstr "omvang van array `%s' is te groot" + + #: config/m88k/m88k.h:306 + #, fuzzy, c-format + msgid "-mshort-data-%s and PIC are incompatible" + msgstr "-mbsd en -mxopen zijn niet compatibel" + + #: config/mcore/mcore.c:3083 + #, fuzzy, c-format + msgid "invalid option `-mstack-increment=%s'" + msgstr "Pngeldige optie `-%s'" + + #: config/mcore/mcore.h:126 + msgid "Inline constants if it can be done in 2 insns or less" + msgstr "" + + #: config/mcore/mcore.h:128 + msgid "Inline constants if it only takes 1 instruction" + msgstr "" + + #: config/mcore/mcore.h:130 + msgid "Set maximum alignment to 4" + msgstr "" + + #: config/mcore/mcore.h:132 + msgid "Set maximum alignment to 8" + msgstr "" + + #: config/mcore/mcore.h:136 + msgid "Do not use the divide instruction" + msgstr "" + + #: config/mcore/mcore.h:140 + msgid "Do not arbitary sized immediates in bit operations" + msgstr "" + + #: config/mcore/mcore.h:142 + msgid "Always treat bit-field as int-sized" + msgstr "" + + #: config/mcore/mcore.h:146 + msgid "Force functions to be aligned to a 4 byte boundary" + msgstr "" + + #: config/mcore/mcore.h:148 + msgid "Force functions to be aligned to a 2 byte boundary" + msgstr "" + + #: config/mcore/mcore.h:150 + msgid "Emit call graph information" + msgstr "" + + #: config/mcore/mcore.h:154 + msgid "Prefer word accesses over byte accesses" + msgstr "" + + #: config/mcore/mcore.h:165 + msgid "Generate code for the M*Core M340" + msgstr "" + + #: config/mcore/mcore.h:178 + msgid "Maximum amount for a single stack increment operation" + msgstr "" + + #: config/mips/mips.c:4824 + #, c-format + msgid "-mips%d not supported" + msgstr "" + + #: config/mips/mips.c:4831 + #, c-format + msgid "bad value (%s) for -mips switch" + msgstr "slechte waarde (%s) voor optie -mips" + + #: config/mips/mips.c:4852 + #, c-format + msgid "bad value (%s) for -mabi= switch" + msgstr "slechte waarde (%s) voor optie -mabi=" + + #: config/mips/mips.c:4890 + #, c-format + msgid "-mabi=%s does not support -mips%d" + msgstr "" + + #: config/mips/mips.c:4907 + #, fuzzy + msgid "this target does not support the -mabi switch" + msgstr "doel-CPU ondersteunt geen interworking" + + #: config/mips/mips.c:5017 + #, fuzzy, c-format + msgid "bad value (%s) for -mtune= switch" + msgstr "slechte waarde (%s) voor de -march= optie" + + #: config/mips/mips.c:5033 + #, fuzzy, c-format + msgid "-march=%s does not support -mips%d" + msgstr "-mcpu=%s ondersteunt -march=%s niet" + + #: config/mips/mips.c:5040 + #, fuzzy, c-format + msgid "-mips%d does not support 64 bit fp registers" + msgstr "-mcpu=%s ondersteunt -march=%s niet" + + #: config/mips/mips.c:5046 + #, fuzzy, c-format + msgid "-mips%d does not support 64 bit gp registers" + msgstr "-mcpu=%s ondersteunt -march=%s niet" + + #: config/mips/mips.c:5067 + msgid "-G is incompatible with PIC code which is the default" + msgstr "" + + #: config/mips/mips.c:5083 + msgid "-membedded-pic and -mabicalls are incompatible" + msgstr "" + + #: config/mips/mips.c:5086 + msgid "-G and -membedded-pic are incompatible" + msgstr "" + + #: config/mips/mips.c:5137 + #, fuzzy, c-format + msgid "invalid option `entry%s'" + msgstr "Ongeldige optie `%s'" + + #: config/mips/mips.c:5140 + msgid "-mentry is only meaningful with -mips-16" + msgstr "" + + #: config/mips/mips.c:5480 + #, c-format + msgid "internal error: %%) found without a %%( in assembler pattern" + msgstr "" + + #: config/mips/mips.c:5494 + #, c-format + msgid "internal error: %%] found without a %%[ in assembler pattern" + msgstr "" + + #: config/mips/mips.c:5507 + #, c-format + msgid "internal error: %%> found without a %%< in assembler pattern" + msgstr "" + + #: config/mips/mips.c:5520 + #, c-format + msgid "internal error: %%} found without a %%{ in assembler pattern" + msgstr "" + + #: config/mips/mips.c:5534 + #, c-format + msgid "PRINT_OPERAND: unknown punctuation '%c'" + msgstr "" + + #: config/mips/mips.c:5543 + msgid "PRINT_OPERAND null pointer" + msgstr "" + + #: config/mips/mips.c:5676 + #, fuzzy, c-format + msgid "invalid use of %%d, %%x, or %%X" + msgstr "ongeldig gebruik van een void-expressie" + + #: config/mips/mips.c:5719 + msgid "PRINT_OPERAND_ADDRESS, null pointer" + msgstr "" + + #: config/mips/mips.c:5943 + msgid "MIPS ECOFF format does not allow changing filenames within functions with #line" + msgstr "" + + #: config/mips/mips.c:6257 + #, fuzzy + msgid "can't rewind temp file" + msgstr "kan bestand '%s' niet openen" + + #: config/mips/mips.c:6261 + #, fuzzy + msgid "can't write to output file" + msgstr "kan bestand '%s' niet openen" + + #: config/mips/mips.c:6264 + msgid "can't read from temp file" + msgstr "" + + #: config/mips/mips.c:6267 + #, fuzzy + msgid "can't close temp file" + msgstr "close %s" + + #: config/mips/mips.c:6700 + #, c-format + msgid "gp_offset (%ld) or end_offset (%ld) is less than zero" + msgstr "" + + #: config/mips/mips.c:6862 + #, c-format + msgid "fp_offset (%ld) or end_offset (%ld) is less than zero" + msgstr "" + + #: config/mips/mips.c:8893 + #, c-format + msgid "can not handle inconsistent calls to `%s'" + msgstr "" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/mips/mips.h:368 config/mn10300/mn10300.h:64 + msgid "No default crt0.o" + msgstr "" + + #: config/mips/mips.h:370 + msgid "Use 64-bit int type" + msgstr "" + + #: config/mips/mips.h:372 + msgid "Use 64-bit long type" + msgstr "" + + #: config/mips/mips.h:374 + msgid "Use 32-bit long type" + msgstr "" + + #: config/mips/mips.h:376 + msgid "Optimize lui/addiu address loads" + msgstr "" + + #: config/mips/mips.h:378 + msgid "Don't optimize lui/addiu address loads" + msgstr "" + + #: config/mips/mips.h:380 + msgid "Use MIPS as" + msgstr "" + + #: config/mips/mips.h:382 + msgid "Use GNU as" + msgstr "" + + #: config/mips/mips.h:384 + msgid "Use symbolic register names" + msgstr "" + + #: config/mips/mips.h:386 + msgid "Don't use symbolic register names" + msgstr "" + + #: config/mips/mips.h:388 config/mips/mips.h:390 + msgid "Use GP relative sdata/sbss sections" + msgstr "" + + #: config/mips/mips.h:392 config/mips/mips.h:394 + msgid "Don't use GP relative sdata/sbss sections" + msgstr "" + + #: config/mips/mips.h:396 + msgid "Output compiler statistics" + msgstr "" + + #: config/mips/mips.h:398 + msgid "Don't output compiler statistics" + msgstr "" + + #: config/mips/mips.h:400 + msgid "Don't optimize block moves" + msgstr "" + + #: config/mips/mips.h:402 + msgid "Optimize block moves" + msgstr "" + + #: config/mips/mips.h:404 + msgid "Use mips-tfile asm postpass" + msgstr "" + + #: config/mips/mips.h:406 + msgid "Don't use mips-tfile asm postpass" + msgstr "" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of triplets in braces, + #. each triplet being { "NAME", VALUE, DOC } + #. where VALUE is the bits to set or minus the bits to clear and DOC + #. is the documentation for --help (NULL if intentionally undocumented). + #. An empty string NAME is used to identify the default VALUE. + #: config/mips/mips.h:410 config/pdp11/pdp11.h:55 + msgid "Use hardware floating point" + msgstr "" + + #: config/mips/mips.h:412 + msgid "Use 64-bit FP registers" + msgstr "" + + #: config/mips/mips.h:414 + msgid "Use 32-bit FP registers" + msgstr "" + + #: config/mips/mips.h:416 + msgid "Use 64-bit general registers" + msgstr "" + + #: config/mips/mips.h:418 + msgid "Use 32-bit general registers" + msgstr "" + + #: config/mips/mips.h:420 + msgid "Use Irix PIC" + msgstr "" + + #: config/mips/mips.h:422 + msgid "Don't use Irix PIC" + msgstr "" + + #: config/mips/mips.h:424 + msgid "Use OSF PIC" + msgstr "" + + #: config/mips/mips.h:426 + msgid "Don't use OSF PIC" + msgstr "" + + #: config/mips/mips.h:428 + msgid "Use indirect calls" + msgstr "" + + #: config/mips/mips.h:430 + msgid "Don't use indirect calls" + msgstr "" + + #: config/mips/mips.h:432 + msgid "Use embedded PIC" + msgstr "" + + #: config/mips/mips.h:434 + msgid "Don't use embedded PIC" + msgstr "" + + #: config/mips/mips.h:436 + msgid "Use ROM instead of RAM" + msgstr "" + + #: config/mips/mips.h:438 + msgid "Don't use ROM instead of RAM" + msgstr "" + + #: config/mips/mips.h:440 + msgid "Put uninitialized constants in ROM (needs -membedded-data)" + msgstr "" + + #: config/mips/mips.h:442 + msgid "Don't put uninitialized constants in ROM" + msgstr "" + + #: config/mips/mips.h:444 + msgid "Use big-endian byte order" + msgstr "" + + #: config/mips/mips.h:446 + msgid "Use little-endian byte order" + msgstr "" + + #: config/mips/mips.h:448 + msgid "Use single (32-bit) FP only" + msgstr "" + + #: config/mips/mips.h:450 + msgid "Don't use single (32-bit) FP only" + msgstr "" + + #: config/mips/mips.h:452 + msgid "Use multiply accumulate" + msgstr "" + + #: config/mips/mips.h:454 + msgid "Don't use multiply accumulate" + msgstr "" + + #: config/mips/mips.h:456 config/rs6000/rs6000.h:351 + msgid "Don't generate fused multiply/add instructions" + msgstr "" + + #: config/mips/mips.h:458 config/rs6000/rs6000.h:349 + msgid "Generate fused multiply/add instructions" + msgstr "" + + #: config/mips/mips.h:460 + msgid "Work around early 4300 hardware bug" + msgstr "" + + #: config/mips/mips.h:462 + msgid "Don't work around early 4300 hardware bug" + msgstr "" + + #: config/mips/mips.h:464 + msgid "Optimize for 3900" + msgstr "" + + #: config/mips/mips.h:466 + msgid "Optimize for 4650" + msgstr "" + + #: config/mips/mips.h:468 + msgid "Trap on integer divide by zero" + msgstr "" + + #: config/mips/mips.h:470 + msgid "Don't trap on integer divide by zero" + msgstr "" + + #: config/mips/mips.h:472 + msgid "Trap on integer divide overflow" + msgstr "" + + #: config/mips/mips.h:474 + msgid "Don't trap on integer divide overflow" + msgstr "" + + #: config/mips/mips.h:590 config/mips/mips.h:592 + msgid "Specify CPU for scheduling purposes" + msgstr "" + + #: config/mips/mips.h:594 + msgid "Specify CPU for code generation purposes" + msgstr "" + + #: config/mips/mips.h:596 + msgid "Specify a Standard MIPS ISA" + msgstr "" + + #: config/mips/mips.h:598 + msgid "Use mips16 entry/exit psuedo ops" + msgstr "" + + #: config/mips/mips.h:600 + msgid "Don't use MIPS16 instructions" + msgstr "" + + #: config/mips/mips.h:604 + msgid "Don't call any cache flush functions" + msgstr "" + + #: config/mips/mips.h:606 + msgid "Specify cache flush function" + msgstr "" + + #. Output assembler code to FILE to increment profiler label # LABELNO + #. for profiling a function entry. + #: config/mips/mips.h:2869 + msgid "mips16 function profiling" + msgstr "" + + #: config/mmix/mmix.c:138 + #, fuzzy, c-format + msgid "-f%s not supported: ignored" + msgstr "-pipe wordt niet ondersteund" + + #: config/mmix/mmix.c:564 + #, c-format + msgid "too large function value type, needs %d registers, have only %d registers for this" + msgstr "" + + #: config/mmix/mmix.c:651 + msgid "stack frame too big" + msgstr "" + + #: config/mmix/mmix.c:679 + #, c-format + msgid "stack frame not a multiple of 8 bytes: %d" + msgstr "" + + #: config/mmix/mmix.c:1022 + #, c-format + msgid "stack frame not a multiple of octabyte: %d" + msgstr "" + + #: config/mmix/mmix.c:1190 + msgid "function_profiler support for MMIX" + msgstr "" + + #: config/mmix/mmix.c:1227 + msgid "neither varargs or stdarg in mmix_setup_incoming_varargs" + msgstr "" + + #: config/mmix/mmix.c:1233 + msgid "MMIX Internal: Last named vararg would not fit in a register" + msgstr "" + + #. FIXME: Remove when I know this trigs. + #: config/mmix/mmix.c:1556 + msgid "oops, not debugged; fixing up value:" + msgstr "" + + #: config/mmix/mmix.c:2100 config/mmix/mmix.c:2234 + msgid "MMIX Internal: Expected a CONST_INT, not this" + msgstr "" + + #: config/mmix/mmix.c:2108 config/mmix/mmix.c:2132 config/mmix/mmix.c:2251 + #, c-format + msgid "MMIX Internal: Bad register: %d" + msgstr "" + + #: config/mmix/mmix.c:2179 + msgid "MMIX Internal: Bad value for 'm', not a CONST_INT" + msgstr "" + + #: config/mmix/mmix.c:2202 + msgid "MMIX Internal: Expected a register, not this" + msgstr "" + + #: config/mmix/mmix.c:2212 + msgid "MMIX Internal: Expected a constant, not this" + msgstr "" + + #. Presumably there's a missing case above if we get here. + #: config/mmix/mmix.c:2244 + #, c-format + msgid "MMIX Internal: Missing `%c' case in mmix_print_operand" + msgstr "" + + #. We need the original here. + #: config/mmix/mmix.c:2295 + msgid "MMIX Internal: Cannot decode this operand" + msgstr "" + + #: config/mmix/mmix.c:2354 + msgid "MMIX Internal: This is not a recognized address" + msgstr "" + + #: config/mmix/mmix.c:2823 config/mmix/mmix.c:2892 + #, c-format + msgid "MMIX Internal: %s is not a shiftable int" + msgstr "" + + #: config/mmix/mmix.c:3011 + msgid "MMIX Internal: Trying to output invalidly reversed condition:" + msgstr "" + + #: config/mmix/mmix.c:3018 + msgid "MMIX Internal: What's the CC of this?" + msgstr "" + + #: config/mmix/mmix.c:3022 + msgid "MMIX Internal: What is the CC of this?" + msgstr "" + + #: config/mmix/mmix.c:3093 + #, fuzzy + msgid "MMIX Internal: This is not a constant:" + msgstr "gevraagd alignment is geen constante" + + #. For these target macros, there is no generic documentation here. You + #. should read `Using and Porting GCC' for that. Only comments specific + #. to the MMIX target are here. + #. + #. There are however references to the specific texinfo node (comments + #. with "Node:"), so there should be little or nothing amiss. Probably + #. the opposite, since we don't have to care about old littering and + #. soon outdated generic comments. + #. Node: Driver + #. When both ABI:s work, this is how we tell them apart in code. The + #. GNU abi is implied the default. Also implied in TARGET_DEFAULT. + #. User symbols are in the same name-space as built-in symbols, but we + #. don't need the built-in symbols, so remove those and instead apply + #. stricter operand checking. Don't warn when expanding insns. + #. Pass on -mset-program-start=N and -mset-data-start=M to the linker. + #. Provide default program start 0x100 unless -mno-set-program-start. + #. Link to ELF if requested. + #. Put unused option values here. + #: config/mmix/mmix.h:135 + msgid "Set start-address of the program" + msgstr "" + + #: config/mmix/mmix.h:137 + msgid "Set start-address of data" + msgstr "" + + #. FIXME: Provide a way to *load* the epsilon register. + #: config/mmix/mmix.h:175 + msgid "For intrinsics library: pass all parameters in registers" + msgstr "" + + #: config/mmix/mmix.h:178 + msgid "Use register stack for parameters and return value" + msgstr "" + + #: config/mmix/mmix.h:180 + msgid "Use call-clobbered registers for parameters and return value" + msgstr "" + + #: config/mmix/mmix.h:182 + msgid "Use epsilon-respecting floating point compare instructions" + msgstr "" + + #: config/mmix/mmix.h:185 + msgid "Use zero-extending memory loads, not sign-extending ones" + msgstr "" + + #: config/mmix/mmix.h:188 + msgid "Generate divide results with reminder having the same sign as the divisor (not the dividend)" + msgstr "" + + #: config/mmix/mmix.h:192 + msgid "Prepend global symbols with \":\" (for use with PREFIX)" + msgstr "" + + #: config/mmix/mmix.h:194 + msgid "Do not provide a default start-address 0x100 of the program" + msgstr "" + + #: config/mmix/mmix.h:196 + msgid "Link to emit program in ELF format (rather than mmo)" + msgstr "" + + #: config/mmix/mmix.h:198 + msgid "Use P-mnemonics for branches statically predicted as taken" + msgstr "" + + #: config/mmix/mmix.h:200 + msgid "Don't use P-mnemonics for branches" + msgstr "" + + #: config/mn10300/mn10300.h:59 + msgid "Work around hardware multiply bug" + msgstr "" + + #: config/mn10300/mn10300.h:60 + msgid "Do not work around hardware multiply bug" + msgstr "" + + #: config/mn10300/mn10300.h:61 + msgid "Target the AM33 processor" + msgstr "" + + #: config/mn10300/mn10300.h:65 + msgid "Enable linker relaxations" + msgstr "" + + #: config/ns32k/ns32k.h:104 config/s390/s390.h:52 + msgid "Don't use hardware fp" + msgstr "" + + #: config/ns32k/ns32k.h:105 + msgid "Alternative calling convention" + msgstr "" + + #: config/ns32k/ns32k.h:107 + #, fuzzy + msgid "Pass some arguments in registers" + msgstr "te weinig argument voor functie" + + #: config/ns32k/ns32k.h:108 + msgid "Pass all arguments on stack" + msgstr "" + + #: config/ns32k/ns32k.h:109 + msgid "Optimize for 32532 cpu" + msgstr "" + + #: config/ns32k/ns32k.h:110 + msgid "Optimize for 32332 cpu" + msgstr "" + + #: config/ns32k/ns32k.h:112 + msgid "Optimize for 32032" + msgstr "" + + #: config/ns32k/ns32k.h:114 + msgid "Register sb is zero. Use for absolute addressing" + msgstr "" + + #: config/ns32k/ns32k.h:115 + msgid "Do not use register sb" + msgstr "" + + #: config/ns32k/ns32k.h:116 + msgid "Do not use bit-field instructions" + msgstr "" + + #: config/ns32k/ns32k.h:117 + msgid "Use bit-field instructions" + msgstr "" + + #: config/ns32k/ns32k.h:118 + msgid "Generate code for high memory" + msgstr "" + + #: config/ns32k/ns32k.h:119 + msgid "Generate code for low memory" + msgstr "" + + #: config/ns32k/ns32k.h:120 + msgid "32381 fpu" + msgstr "" + + #: config/ns32k/ns32k.h:121 + msgid "Use multiply-accumulate fp instructions" + msgstr "" + + #: config/ns32k/ns32k.h:123 + msgid "Do not use multiply-accumulate fp instructions" + msgstr "" + + #: config/ns32k/ns32k.h:124 + #, fuzzy + msgid "\"Small register classes\" kludge" + msgstr "Ongeldige registerklasse-letter %c" + + #: config/ns32k/ns32k.h:125 + #, fuzzy + msgid "No \"Small register classes\" kludge" + msgstr "Ongeldige registerklasse-letter %c" + + #: config/pa/pa.c:188 + #, c-format + msgid "" + "unknown -mschedule= option (%s).\n" + "Valid options are 700, 7100, 7100LC, 7200, and 8000\n" + msgstr "" + + #: config/pa/pa.c:213 + #, c-format + msgid "" + "unknown -march= option (%s).\n" + "Valid options are 1.0, 1.1, and 2.0\n" + msgstr "" + + #: config/pa/pa.c:218 + msgid "PIC code generation is not supported in the portable runtime model\n" + msgstr "" + + #: config/pa/pa.c:223 + msgid "PIC code generation is not compatible with fast indirect calls\n" + msgstr "" + + #: config/pa/pa.c:228 + msgid "-g is only supported when using GAS on this processor," + msgstr "" + + #: config/pa/pa.c:229 + #, fuzzy + msgid "-g option disabled" + msgstr "ingeschakelde opties: " + + #: config/pdp11/pdp11.h:56 + msgid "Do not use hardware floating point" + msgstr "" + + #. return float result in ac0 + #: config/pdp11/pdp11.h:58 + #, fuzzy + msgid "Return floating point results in ac0" + msgstr "floating-point constante buiten bereik" + + #: config/pdp11/pdp11.h:59 + #, fuzzy + msgid "Return floating point results in memory" + msgstr "Ongeldige optie voor floating-point emulatie: -mfpe-%s" + + #. is 11/40 + #: config/pdp11/pdp11.h:61 + msgid "Generate code for an 11/40" + msgstr "" + + #. is 11/45 + #: config/pdp11/pdp11.h:64 + msgid "Generate code for an 11/45" + msgstr "" + + #. is 11/10 + #: config/pdp11/pdp11.h:67 + msgid "Generate code for an 11/10" + msgstr "" + + #. use movstrhi for bcopy + #. use 32 bit for int + #: config/pdp11/pdp11.h:72 config/pdp11/pdp11.h:73 + msgid "Use 32 bit int" + msgstr "" + + #: config/pdp11/pdp11.h:74 config/pdp11/pdp11.h:75 + msgid "Use 16 bit int" + msgstr "" + + #. use 32 bit for float + #: config/pdp11/pdp11.h:77 config/pdp11/pdp11.h:78 + msgid "Use 32 bit float" + msgstr "" + + #: config/pdp11/pdp11.h:79 config/pdp11/pdp11.h:80 + msgid "Use 64 bit float" + msgstr "" + + #. allow abshi pattern? - can trigger "optimizations" which make code SLOW! + #. is branching expensive - on a PDP, it's actually really cheap + #. this is just to play around and check what code gcc generates + #. split instruction and data memory? + #: config/pdp11/pdp11.h:89 + msgid "Target has split I&D" + msgstr "" + + #: config/pdp11/pdp11.h:90 + msgid "Target does not have split I&D" + msgstr "" + + #. UNIX assembler syntax? + #: config/pdp11/pdp11.h:92 + msgid "Use UNIX assembler syntax" + msgstr "" + + #: config/pdp11/pdp11.h:93 + msgid "Use DEC assembler syntax" + msgstr "" + + #: config/pj/pj.h:73 + msgid "Generate little endian data" + msgstr "" + + #: config/pj/pj.h:75 + msgid "Generate big endian data" + msgstr "" + + #: config/pj/pj.h:77 + msgid "Turn on maintainer testing code" + msgstr "" + + #: config/pj/pj.h:79 + msgid "Enable Transmeta picoJava extensions" + msgstr "" + + #: config/pj/pj.h:81 + msgid "Disable Transmeta picoJava extensions" + msgstr "" + + #: config/pj/pj.h:83 + msgid "Disable reorganization pass" + msgstr "" + + #: config/romp/romp.c:682 + #, c-format + msgid "invalid %%B value" + msgstr "" + + #: config/romp/romp.c:709 config/rs6000/rs6000.c:6202 + #, c-format + msgid "invalid %%S value" + msgstr "" + + #: config/romp/romp.c:718 config/romp/romp.c:725 + #, c-format + msgid "invalid %%b value" + msgstr "" + + #: config/romp/romp.c:765 config/romp/romp.c:776 + #, c-format + msgid "invalid %%z value" + msgstr "" + + #: config/romp/romp.c:784 config/romp/romp.c:792 + #, c-format + msgid "invalid %%Z value" + msgstr "" + + #: config/romp/romp.c:799 config/romp/romp.c:808 config/romp/romp.c:815 + #: config/rs6000/rs6000.c:5981 + #, c-format + msgid "invalid %%k value" + msgstr "" + + #: config/romp/romp.c:900 config/romp/romp.c:943 + #, c-format + msgid "invalid %%j value" + msgstr "" + + #. Perform any needed actions needed for a function that is receiving a + #. variable number of arguments. + #. + #. CUM is as above. + #. + #. MODE and TYPE are the mode and type of the current parameter. + #. + #. PRETEND_SIZE is a variable that should be set to the amount of stack + #. that must be pushed by the prolog to pretend that our caller pushed + #. it. + #. + #. Normally, this macro will push all remaining incoming registers on the + #. stack and set PRETEND_SIZE to the length of the registers pushed. + #: config/romp/romp.h:661 + msgid "can't have varargs with -mfp-arg-in-fp-regs" + msgstr "" + + #: config/rs6000/rs6000.c:472 + msgid "-mmultiple is not supported on little endian systems" + msgstr "" + + #: config/rs6000/rs6000.c:479 + msgid "-mstring is not supported on little endian systems" + msgstr "" + + #: config/rs6000/rs6000.c:485 + #, c-format + msgid "-f%s ignored (all code is position independent)" + msgstr "" + + #: config/rs6000/rs6000.c:494 + msgid "-ffunction-sections disabled on AIX when debugging" + msgstr "" + + #: config/rs6000/rs6000.c:500 + #, fuzzy + msgid "-fdata-sections not supported on AIX" + msgstr "-pipe wordt niet ondersteund" + + #: config/rs6000/rs6000.c:515 + #, c-format + msgid "unknown -mdebug-%s switch" + msgstr "" + + #: config/rs6000/rs6000.c:525 + #, c-format + msgid "Unknown switch -mlong-double-%s" + msgstr "" + + #: config/rs6000/rs6000.c:590 + #, fuzzy, c-format + msgid "unknown ABI specified: '%s'" + msgstr "onbekende machine-modus `%s'" + + #: config/rs6000/rs6000.c:3810 + #, fuzzy, c-format + msgid "argument 3 of `%s' must be a 2-bit literal" + msgstr "argument van `%s' moet van een integraal type zijn." + + #: config/rs6000/rs6000.c:5908 + #, c-format + msgid "invalid %%f value" + msgstr "" + + #: config/rs6000/rs6000.c:5917 + #, c-format + msgid "invalid %%F value" + msgstr "" + + #: config/rs6000/rs6000.c:5926 + #, c-format + msgid "invalid %%G value" + msgstr "" + + #: config/rs6000/rs6000.c:5961 + #, c-format + msgid "invalid %%j code" + msgstr "" + + #: config/rs6000/rs6000.c:5971 + #, c-format + msgid "invalid %%J code" + msgstr "" + + #: config/rs6000/rs6000.c:6001 + #, fuzzy, c-format + msgid "invalid %%K value" + msgstr "ongeldige waarde voor %%E" + + #: config/rs6000/rs6000.c:6128 + #, c-format + msgid "invalid %%p value" + msgstr "" + + #: config/rs6000/rs6000.c:6165 + #, fuzzy, c-format + msgid "invalid %%q value" + msgstr "ongeldige waarde voor %q" + + #: config/rs6000/rs6000.c:6228 + #, c-format + msgid "%%S computed all 1's mask" + msgstr "" + + #: config/rs6000/rs6000.c:6255 + #, c-format + msgid "%%S computed all 0's mask" + msgstr "" + + #: config/rs6000/rs6000.c:6265 + #, c-format + msgid "invalid %%T value" + msgstr "" + + #: config/rs6000/rs6000.c:6275 + #, c-format + msgid "invalid %%u value" + msgstr "" + + #: config/rs6000/rs6000.c:6284 + #, c-format + msgid "invalid %%v value" + msgstr "" + + #: config/rs6000/aix.h:134 config/rs6000/beos.h:32 + #, fuzzy + msgid "Always pass floating-point arguments in memory" + msgstr "Het doorgeven van floating-point argumenten in fp registers wordt nog niet ondersteund" + + #: config/rs6000/aix.h:136 config/rs6000/beos.h:34 + #, fuzzy + msgid "Don't always pass floating-point arguments in memory" + msgstr "Het doorgeven van floating-point argumenten in fp registers wordt nog niet ondersteund" + + #: config/rs6000/aix41.h:28 config/rs6000/aix43.h:32 config/rs6000/aix51.h:32 + msgid "Support message passing with the Parallel Environment" + msgstr "" + + #: config/rs6000/aix43.h:28 config/rs6000/aix51.h:28 + msgid "Compile for 64-bit pointers" + msgstr "" + + #: config/rs6000/aix43.h:30 config/rs6000/aix51.h:30 + msgid "Compile for 32-bit pointers" + msgstr "" + + #: config/rs6000/aix43.h:49 config/rs6000/aix51.h:49 + #, fuzzy + msgid "-maix64 and POWER architecture are incompatible" + msgstr "-fpic en -mapcs-reent zijn niet compatibel" + + #: config/rs6000/aix43.h:54 config/rs6000/aix51.h:54 + msgid "-maix64 requires PowerPC64 architecture remain enabled" + msgstr "" + + #: config/rs6000/aix43.h:58 config/rs6000/aix51.h:58 + msgid "-maix64 required: 64-bit computation with 32-bit addressing not yet supported" + msgstr "" + + #. Run-time compilation parameters selecting different hardware subsets. + #. + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/rs6000/rs6000.h:277 + msgid "Use POWER instruction set" + msgstr "" + + #: config/rs6000/rs6000.h:280 + msgid "Use POWER2 instruction set" + msgstr "" + + #: config/rs6000/rs6000.h:282 + msgid "Do not use POWER2 instruction set" + msgstr "" + + #: config/rs6000/rs6000.h:285 + msgid "Do not use POWER instruction set" + msgstr "" + + #: config/rs6000/rs6000.h:287 + msgid "Use PowerPC instruction set" + msgstr "" + + #: config/rs6000/rs6000.h:290 + msgid "Do not use PowerPC instruction set" + msgstr "" + + #: config/rs6000/rs6000.h:292 + msgid "Use PowerPC General Purpose group optional instructions" + msgstr "" + + #: config/rs6000/rs6000.h:294 + msgid "Don't use PowerPC General Purpose group optional instructions" + msgstr "" + + #: config/rs6000/rs6000.h:296 + msgid "Use PowerPC Graphics group optional instructions" + msgstr "" + + #: config/rs6000/rs6000.h:298 + msgid "Don't use PowerPC Graphics group optional instructions" + msgstr "" + + #: config/rs6000/rs6000.h:300 + msgid "Use PowerPC-64 instruction set" + msgstr "" + + #: config/rs6000/rs6000.h:302 + msgid "Don't use PowerPC-64 instruction set" + msgstr "" + + #: config/rs6000/rs6000.h:304 + msgid "Use AltiVec instructions" + msgstr "" + + #: config/rs6000/rs6000.h:306 + msgid "Don't use AltiVec instructions" + msgstr "" + + #: config/rs6000/rs6000.h:308 + msgid "Use new mnemonics for PowerPC architecture" + msgstr "" + + #: config/rs6000/rs6000.h:310 + msgid "Use old mnemonics for PowerPC architecture" + msgstr "" + + #: config/rs6000/rs6000.h:313 + msgid "Put everything in the regular TOC" + msgstr "" + + #: config/rs6000/rs6000.h:315 + #, fuzzy + msgid "Place floating point constants in TOC" + msgstr "misvormde floating-point constante" + + #: config/rs6000/rs6000.h:317 + msgid "Don't place floating point constants in TOC" + msgstr "" + + #: config/rs6000/rs6000.h:319 + msgid "Place symbol+offset constants in TOC" + msgstr "" + + #: config/rs6000/rs6000.h:321 + msgid "Don't place symbol+offset constants in TOC" + msgstr "" + + #: config/rs6000/rs6000.h:327 + msgid "Place variable addresses in the regular TOC" + msgstr "" + + #: config/rs6000/rs6000.h:333 + msgid "Generate load/store multiple instructions" + msgstr "" + + #: config/rs6000/rs6000.h:335 + msgid "Do not generate load/store multiple instructions" + msgstr "" + + #: config/rs6000/rs6000.h:339 + msgid "Generate string instructions for block moves" + msgstr "" + + #: config/rs6000/rs6000.h:341 + msgid "Do not generate string instructions for block moves" + msgstr "" + + #: config/rs6000/rs6000.h:345 + msgid "Generate load/store with update instructions" + msgstr "" + + #: config/rs6000/rs6000.h:347 + msgid "Do not generate load/store with update instructions" + msgstr "" + + #: config/rs6000/rs6000.h:355 + msgid "Don't schedule the start and end of the procedure" + msgstr "" + + #: config/rs6000/rs6000.h:361 + msgid "Return all structures in memory (AIX default)" + msgstr "" + + #: config/rs6000/rs6000.h:363 + msgid "Return small structures in registers (SVR4 default)" + msgstr "" + + #: config/rs6000/rs6000.h:426 config/sparc/sparc.h:666 + msgid "Use features of and schedule code for given CPU" + msgstr "" + + #: config/rs6000/rs6000.h:429 + msgid "Enable debug output" + msgstr "" + + #: config/rs6000/rs6000.h:430 + msgid "Specify ABI to use" + msgstr "" + + #: config/rs6000/rs6000.h:432 + msgid "Specify size of long double (64 or 128 bits)" + msgstr "" + + #. Definitions for __builtin_return_address and __builtin_frame_address. + #. __builtin_return_address (0) should give link register (65), enable + #. this. + #. This should be uncommented, so that the link register is used, but + #. currently this would result in unmatched insns and spilling fixed + #. registers so we'll leave it for another day. When these problems are + #. taken care of one additional fetch will be necessary in RETURN_ADDR_RTX. + #. (mrs) + #. #define RETURN_ADDR_IN_PREVIOUS_FRAME + #. Number of bytes into the frame return addresses can be found. See + #. rs6000_stack_info in rs6000.c for more information on how the different + #. abi's store the return address. + #: config/rs6000/rs6000.h:1776 + msgid "RETURN_ADDRESS_OFFSET not supported" + msgstr "" + + #: config/rs6000/sysv4.h:88 + msgid "Select ABI calling convention" + msgstr "" + + #: config/rs6000/sysv4.h:89 + msgid "Select method for sdata handling" + msgstr "" + + #: config/rs6000/sysv4.h:104 + #, fuzzy + msgid "Align to the base type of the bit-field" + msgstr "`__alignof' toegepast op bitveld" + + #: config/rs6000/sysv4.h:106 + msgid "Don't align to the base type of the bit-field" + msgstr "" + + #: config/rs6000/sysv4.h:108 + msgid "Don't assume that unaligned accesses are handled by the system" + msgstr "" + + #: config/rs6000/sysv4.h:110 + msgid "Assume that unaligned accesses are handled by the system" + msgstr "" + + #: config/rs6000/sysv4.h:112 config/rs6000/sysv4.h:116 + msgid "Produce code relocatable at runtime" + msgstr "" + + #: config/rs6000/sysv4.h:114 config/rs6000/sysv4.h:118 + msgid "Don't produce code relocatable at runtime" + msgstr "" + + #: config/rs6000/sysv4.h:120 config/rs6000/sysv4.h:122 + msgid "Produce little endian code" + msgstr "" + + #: config/rs6000/sysv4.h:124 config/rs6000/sysv4.h:126 + msgid "Produce big endian code" + msgstr "" + + #: config/rs6000/sysv4.h:127 config/rs6000/sysv4.h:128 + #: config/rs6000/sysv4.h:129 config/rs6000/sysv4.h:130 + #: config/rs6000/sysv4.h:131 config/rs6000/sysv4.h:132 + #: config/rs6000/sysv4.h:142 config/rs6000/sysv4.h:143 + #: config/rs6000/sysv4.h:154 config/rs6000/sysv4.h:155 + #: config/rs6000/sysv4.h:157 + msgid "no description yet" + msgstr "" + + #: config/rs6000/sysv4.h:133 + msgid "Use EABI" + msgstr "" + + #: config/rs6000/sysv4.h:134 + msgid "Don't use EABI" + msgstr "" + + #: config/rs6000/sysv4.h:137 + msgid "Do not allow bit-fields to cross word boundaries" + msgstr "" + + #: config/rs6000/sysv4.h:139 + msgid "Use alternate register names" + msgstr "" + + #: config/rs6000/sysv4.h:141 + msgid "Don't use alternate register names" + msgstr "" + + #: config/rs6000/sysv4.h:145 + msgid "Link with libsim.a, libc.a and sim-crt0.o" + msgstr "" + + #: config/rs6000/sysv4.h:147 + msgid "Link with libads.a, libc.a and crt0.o" + msgstr "" + + #: config/rs6000/sysv4.h:149 + msgid "Link with libyk.a, libc.a and crt0.o" + msgstr "" + + #: config/rs6000/sysv4.h:151 + msgid "Link with libmvme.a, libc.a and crt0.o" + msgstr "" + + #: config/rs6000/sysv4.h:153 + msgid "Set the PPC_EMB bit in the ELF flags header" + msgstr "" + + #. Sometimes certain combinations of command options do not make sense + #. on a particular target machine. You can define a macro + #. `OVERRIDE_OPTIONS' to take account of this. This macro, if + #. defined, is executed once just after all the command options have + #. been parsed. + #. + #. The macro SUBTARGET_OVERRIDE_OPTIONS is provided for subtargets, to + #. get control. + #: config/rs6000/sysv4.h:212 + #, fuzzy, c-format + msgid "bad value for -mcall-%s" + msgstr "slechte waarde (%s) voor optie -mcpu" + + #: config/rs6000/sysv4.h:228 + #, fuzzy, c-format + msgid "bad value for -msdata=%s" + msgstr "slechte waarde (%s) voor optie -msdata" + + #: config/rs6000/sysv4.h:245 + #, fuzzy, c-format + msgid "-mrelocatable and -msdata=%s are incompatible" + msgstr "-fpic en -mapcs-reent zijn niet compatibel" + + #: config/rs6000/sysv4.h:253 + #, fuzzy, c-format + msgid "-f%s and -msdata=%s are incompatible" + msgstr "-fpic en -mapcs-reent zijn niet compatibel" + + #: config/rs6000/sysv4.h:261 + #, fuzzy, c-format + msgid "-msdata=%s and -mcall-%s are incompatible" + msgstr "-mbsd en -mxopen zijn niet compatibel" + + #: config/rs6000/sysv4.h:268 + #, fuzzy + msgid "-mrelocatable and -mno-minimal-toc are incompatible" + msgstr "-fpic en -mapcs-reent zijn niet compatibel" + + #: config/rs6000/sysv4.h:274 + #, fuzzy, c-format + msgid "-mrelocatable and -mcall-%s are incompatible" + msgstr "-fpic en -mapcs-reent zijn niet compatibel" + + #: config/rs6000/sysv4.h:281 + #, fuzzy, c-format + msgid "-fPIC and -mcall-%s are incompatible" + msgstr "-fpic en -mapcs-reent zijn niet compatibel" + + #: config/rs6000/sysv4.h:288 + msgid "-mcall-aixdesc must be big endian" + msgstr "" + + #: config/s390/s390.c:1762 + #, fuzzy + msgid "invalid UNSPEC as operand (1)" + msgstr "ongeldige UNSPEC als operand" + + #: config/s390/s390.c:1792 + #, fuzzy + msgid "invalid UNSPEC as operand (2)" + msgstr "ongeldige UNSPEC als operand" + + #: config/s390/s390.c:1798 + msgid "UNKNOWN in s390_output_symbolic_const !?" + msgstr "" + + #: config/s390/s390.c:1814 + msgid "Cannot decompose address." + msgstr "" + + #: config/s390/s390.c:1962 + msgid "UNKNOWN in print_operand !?" + msgstr "" + + #: config/s390/s390.c:2507 + #, fuzzy + msgid "no code label found" + msgstr "geen symbooltabel gevonden" + + #: config/s390/s390.c:2653 + msgid "Total size of local variables exceeds architecture limit." + msgstr "" + + #: config/s390/s390.h:53 + msgid "Set backchain" + msgstr "" + + #: config/s390/s390.h:54 + msgid "Don't set backchain (faster, but debug harder" + msgstr "" + + #: config/s390/s390.h:55 + msgid "Use bras for execucable < 64k" + msgstr "" + + #: config/s390/s390.h:56 + msgid "Don't use bras" + msgstr "" + + #: config/s390/s390.h:57 + msgid "Additional debug prints" + msgstr "" + + #: config/s390/s390.h:58 + msgid "Don't print additional debug prints" + msgstr "" + + #: config/s390/s390.h:59 + msgid "64 bit mode" + msgstr "" + + #: config/s390/s390.h:60 + msgid "31 bit mode" + msgstr "" + + #: config/s390/s390.h:61 + msgid "mvcle use" + msgstr "" + + #: config/s390/s390.h:62 + msgid "mvc&ex" + msgstr "" + + #. The sp_switch attribute only has meaning for interrupt functions. + #: config/sh/sh.c:4730 config/sh/sh.c:4769 + #, fuzzy, c-format + msgid "`%s' attribute only applies to interrupt functions" + msgstr "het `%s' attribuut heeft enkel betekenis voor functies" + + #. The argument must be a constant string. + #: config/sh/sh.c:4737 + #, fuzzy, c-format + msgid "`%s' attribute argument not a string constant" + msgstr "asm-template is geen stringconstante" + + #. The argument must be a constant integer. + #: config/sh/sh.c:4776 + #, fuzzy, c-format + msgid "`%s' attribute argument not an integer constant" + msgstr "herhalings-aantal is geen integerconstante" + + #: config/sparc/sparc.c:319 + #, c-format + msgid "%s is not supported by this configuration" + msgstr "" + + #: config/sparc/sparc.c:326 + msgid "-mlong-double-64 not allowed with -m64" + msgstr "" + + #: config/sparc/sparc.c:351 + msgid "-mcmodel= is not supported on 32 bit systems" + msgstr "" + + #: config/sparc/sparc.c:439 + msgid "profiling does not support code models other than medlow" + msgstr "" + + #: config/sparc/sparc.c:5834 config/sparc/sparc.c:5840 + #, fuzzy, c-format + msgid "invalid %%Y operand" + msgstr "ongeldige operand voor %P" + + #: config/sparc/sparc.c:5910 + #, fuzzy, c-format + msgid "invalid %%A operand" + msgstr "ongeldige operand voor %P" + + #: config/sparc/sparc.c:5920 + #, fuzzy, c-format + msgid "invalid %%B operand" + msgstr "ongeldige operand voor %P" + + #: config/sparc/sparc.c:5959 + #, fuzzy, c-format + msgid "invalid %%c operand" + msgstr "ongeldige operand voor %P" + + #: config/sparc/sparc.c:5960 + #, fuzzy, c-format + msgid "invalid %%C operand" + msgstr "Ongeldige operand voor %%C" + + #: config/sparc/sparc.c:5981 + #, fuzzy, c-format + msgid "invalid %%d operand" + msgstr "ongeldige operand voor %P" + + #: config/sparc/sparc.c:5982 + #, fuzzy, c-format + msgid "invalid %%D operand" + msgstr "ongeldige operand voor %P" + + #: config/sparc/sparc.c:6000 + #, fuzzy, c-format + msgid "invalid %%f operand" + msgstr "ongeldige operand voor %P" + + #: config/sparc/sparc.c:6050 + msgid "long long constant not a valid immediate operand" + msgstr "" + + #: config/sparc/sparc.c:6053 + msgid "floating point constant not a valid immediate operand" + msgstr "" + + #: config/sparc/freebsd.h:81 config/sparc/linux.h:86 + #: config/sparc/linux64.h:139 + msgid "Use 128 bit long doubles" + msgstr "" + + #: config/sparc/sp64-elf.h:82 config/sparc/splet.h:29 + msgid "Generate code for big endian" + msgstr "" + + #: config/sparc/sp64-elf.h:83 config/sparc/splet.h:30 + msgid "Generate code for little endian" + msgstr "" + + #: config/sparc/sp86x-aout.h:51 config/sparc/sp86x-elf.h:67 + msgid "Use little-endian byte order for data" + msgstr "" + + #. To make profiling work with -f{pic,PIC}, we need to emit the profiling + #. code into the rtl. Also, if we are profiling, we cannot eliminate + #. the frame pointer (because the return address will get smashed). + #: config/sparc/sparc.h:388 + #, c-format + msgid "%s and profiling conflict: disabling %s" + msgstr "" + + #: config/sparc/sparc.h:562 + msgid "Use function_epilogue()" + msgstr "" + + #: config/sparc/sparc.h:564 + msgid "Do not use function_epilogue()" + msgstr "" + + #: config/sparc/sparc.h:566 + msgid "Assume possible double misalignment" + msgstr "" + + #: config/sparc/sparc.h:568 + msgid "Assume all doubles are aligned" + msgstr "" + + #: config/sparc/sparc.h:570 + msgid "Pass -assert pure-text to linker" + msgstr "" + + #: config/sparc/sparc.h:572 + msgid "Do not pass -assert pure-text to linker" + msgstr "" + + #: config/sparc/sparc.h:574 + msgid "Use flat register window model" + msgstr "" + + #: config/sparc/sparc.h:576 + msgid "Do not use flat register window model" + msgstr "" + + #: config/sparc/sparc.h:578 + msgid "Use ABI reserved registers" + msgstr "" + + #: config/sparc/sparc.h:580 + msgid "Do not use ABI reserved registers" + msgstr "" + + #: config/sparc/sparc.h:582 + msgid "Use hardware quad fp instructions" + msgstr "" + + #: config/sparc/sparc.h:584 + msgid "Do not use hardware quad fp instructions" + msgstr "" + + #: config/sparc/sparc.h:586 + msgid "Compile for v8plus ABI" + msgstr "" + + #: config/sparc/sparc.h:588 + msgid "Do not compile for v8plus ABI" + msgstr "" + + #: config/sparc/sparc.h:590 + msgid "Utilize Visual Instruction Set" + msgstr "" + + #: config/sparc/sparc.h:592 + msgid "Do not utilize Visual Instruction Set" + msgstr "" + + #. ??? These are deprecated, coerced to -mcpu=. Delete in 2.9. + #: config/sparc/sparc.h:595 + msgid "Optimize for Cypress processors" + msgstr "" + + #: config/sparc/sparc.h:597 + msgid "Optimize for SparcLite processors" + msgstr "" + + #: config/sparc/sparc.h:599 + msgid "Optimize for F930 processors" + msgstr "" + + #: config/sparc/sparc.h:601 + msgid "Optimize for F934 processors" + msgstr "" + + #: config/sparc/sparc.h:603 + msgid "Use V8 Sparc ISA" + msgstr "" + + #: config/sparc/sparc.h:605 + msgid "Optimize for SuperSparc processors" + msgstr "" + + #. End of deprecated options. + #: config/sparc/sparc.h:608 + msgid "Pointers are 64-bit" + msgstr "" + + #: config/sparc/sparc.h:610 + msgid "Pointers are 32-bit" + msgstr "" + + #: config/sparc/sparc.h:612 + msgid "Use 32-bit ABI" + msgstr "" + + #: config/sparc/sparc.h:614 + msgid "Use 64-bit ABI" + msgstr "" + + #: config/sparc/sparc.h:616 + msgid "Use stack bias" + msgstr "" + + #: config/sparc/sparc.h:618 + msgid "Do not use stack bias" + msgstr "" + + #: config/sparc/sparc.h:620 + msgid "Use structs on stronger alignment for double-word copies" + msgstr "" + + #: config/sparc/sparc.h:622 + msgid "Do not use structs on stronger alignment for double-word copies" + msgstr "" + + #: config/sparc/sparc.h:624 + msgid "Optimize tail call instructions in assembler and linker" + msgstr "" + + #: config/sparc/sparc.h:626 + msgid "Do not optimize tail call instructions in assembler or linker" + msgstr "" + + #: config/sparc/sparc.h:670 + msgid "Use given Sparc code model" + msgstr "" + + #: config/stormy16/stormy16.c:1168 + #, fuzzy + msgid "cannot use va_start in interrupt function" + msgstr "kan functie `main' niet inline maken" + + #: config/stormy16/stormy16.c:1525 + #, fuzzy + msgid "`B' operand is not constant" + msgstr "operand `%d' is geen register" + + #: config/stormy16/stormy16.c:1531 + msgid "`B' operand has multiple bits set" + msgstr "" + + #: config/stormy16/stormy16.c:1558 + #, fuzzy + msgid "`o' operand is not constant" + msgstr "operand `%d' is geen register" + + #: config/stormy16/stormy16.c:1573 + msgid "xstormy16_print_operand: unknown code" + msgstr "" + + #: config/stormy16/stormy16.c:1623 + #, fuzzy, c-format + msgid "switch statement of size %lu entries too large" + msgstr "variabele `%s' is te groot" + + #: config/v850/v850-c.c:68 + msgid "#pragma GHS endXXXX found without previous startXXX" + msgstr "" + + #: config/v850/v850-c.c:70 + msgid "#pragma GHS endXXX does not match previous startXXX" + msgstr "" + + #: config/v850/v850-c.c:95 + #, fuzzy + msgid "cannot set interrupt attribute: no current function" + msgstr "kan geen GOTO uitvoeren naar label `%s' dat buiten de huidige functie ligt" + + #: config/v850/v850-c.c:103 + msgid "cannot set interrupt attribute: no such identifier" + msgstr "" + + # Moet 'signature-string' vertaald worden? + #: config/v850/v850-c.c:149 + #, fuzzy + msgid "junk at end of #pragma ghs section" + msgstr "Brol aan einde van signature-string." + + #: config/v850/v850-c.c:166 + #, fuzzy, c-format + msgid "unrecognized section name \"%s\"" + msgstr "signature-string niet herkend" + + #: config/v850/v850-c.c:181 + #, fuzzy + msgid "malformed #pragma ghs section" + msgstr "misvormde #pragma weak" + + # Moet 'signature-string' vertaald worden? + #: config/v850/v850-c.c:201 + #, fuzzy + msgid "junk at end of #pragma ghs interrupt" + msgstr "Brol aan einde van signature-string." + + # Moet 'signature-string' vertaald worden? + #: config/v850/v850-c.c:213 + #, fuzzy + msgid "junk at end of #pragma ghs starttda" + msgstr "Brol aan einde van signature-string." + + # Moet 'signature-string' vertaald worden? + #: config/v850/v850-c.c:225 + #, fuzzy + msgid "junk at end of #pragma ghs startsda" + msgstr "Brol aan einde van signature-string." + + # Moet 'signature-string' vertaald worden? + #: config/v850/v850-c.c:237 + #, fuzzy + msgid "junk at end of #pragma ghs startzda" + msgstr "Brol aan einde van signature-string." + + # Moet 'signature-string' vertaald worden? + #: config/v850/v850-c.c:249 + #, fuzzy + msgid "junk at end of #pragma ghs endtda" + msgstr "Brol aan einde van signature-string." + + # Moet 'signature-string' vertaald worden? + #: config/v850/v850-c.c:261 + #, fuzzy + msgid "junk at end of #pragma ghs endsda" + msgstr "Brol aan einde van signature-string." + + # Moet 'signature-string' vertaald worden? + #: config/v850/v850-c.c:273 + #, fuzzy + msgid "junk at end of #pragma ghs endzda" + msgstr "Brol aan einde van signature-string." + + #: config/v850/v850.c:122 + #, fuzzy, c-format + msgid "%s=%s is not numeric" + msgstr "`%s' is geen iterator" + + #: config/v850/v850.c:129 + #, fuzzy, c-format + msgid "%s=%s is too large" + msgstr "bestand `%s' is te groot" + + #: config/v850/v850.c:285 + msgid "const_double_split got a bad insn:" + msgstr "" + + #: config/v850/v850.c:777 + msgid "output_move_single:" + msgstr "" + + #: config/v850/v850.c:2081 + msgid "a data area attribute cannot be specified for local variables" + msgstr "" + + #: config/v850/v850.c:2092 + #, c-format + msgid "data area of '%s' conflicts with previous declaration" + msgstr "" + + #: config/v850/v850.c:2295 + #, c-format + msgid "bogus JR construction: %d\n" + msgstr "" + + #: config/v850/v850.c:2316 config/v850/v850.c:2518 + #, c-format + msgid "bad amount of stack space removal: %d" + msgstr "" + + #: config/v850/v850.c:2494 + #, c-format + msgid "bogus JARL construction: %d\n" + msgstr "" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/v850/v850.h:120 + msgid "Support Green Hills ABI" + msgstr "" + + #: config/v850/v850.h:123 + msgid "Prohibit PC relative function calls" + msgstr "" + + #: config/v850/v850.h:126 + msgid "Reuse r30 on a per function basis" + msgstr "" + + #: config/v850/v850.h:129 + msgid "Use stubs for function prologues" + msgstr "" + + #: config/v850/v850.h:132 + msgid "Same as: -mep -mprolog-function" + msgstr "" + + #: config/v850/v850.h:133 + msgid "Enable backend debugging" + msgstr "" + + #: config/v850/v850.h:135 + msgid "Compile for the v850 processor" + msgstr "" + + #: config/v850/v850.h:138 + msgid "Use 4 byte entries in switch tables" + msgstr "" + + #: config/v850/v850.h:164 + msgid "Set the max size of data eligible for the TDA area" + msgstr "" + + #: config/v850/v850.h:167 + msgid "Set the max size of data eligible for the SDA area" + msgstr "" + + #: config/v850/v850.h:170 + msgid "Set the max size of data eligible for the ZDA area" + msgstr "" + + #: ada/misc.c:219 + msgid "`-gnat' misspelled as `-gant'" + msgstr "" + + #: ch/actions.c:118 + #, c-format + msgid "%d errors, %d sorries, do granting" + msgstr "%d fouten, %d sorries, granting wordt gedaan" + + #: ch/actions.c:135 + msgid "GNU compiler does not support statically allocated objects" + msgstr "de GNU compiler ondersteunt geen statisch gealloceerde objecten" + + #: ch/actions.c:138 objc/objc-act.c:882 + #, c-format + msgid "`%s' cannot be statically allocated" + msgstr "`%s' kan niet statisch gealloceerd worden" + + #: ch/actions.c:300 + #, c-format + msgid "causing unhandled exception `%s' (this is flaged only once)" + msgstr "niet-opgevangen exception `%s' wordt veroorzaakt (dit wordt maar één keer vermeld)" + + #: ch/actions.c:438 + msgid "range failure (not inside function)" + msgstr "bereik-fout (niet in een functie)" + + #: ch/actions.c:440 + msgid "possible range failure (not inside function)" + msgstr "mogelijke bereik-fout (niet in een functie)" + + #: ch/actions.c:445 + msgid "expression will always cause RANGEFAIL" + msgstr "expressie zal altijd RANGEFAIL veroorzaken" + + #: ch/actions.c:492 + msgid "right hand side of assignment is a mode" + msgstr "rechterkant van toewijzing is een modus" + + #: ch/actions.c:498 + #, c-format + msgid "incompatible modes in %s" + msgstr "incompatibele modi in %s" + + #: ch/actions.c:523 + #, c-format + msgid "bad string length in %s" + msgstr "slechte stringlengte in %s" + + #: ch/actions.c:631 ch/actions.c:644 + #, c-format + msgid "mode mismatch in %s expression" + msgstr "modi in %s expressie komen niet overeen" + + #: ch/actions.c:638 + #, c-format + msgid "%s expression must be referable" + msgstr "%s expressie moet refereerbaar zijn" + + #: ch/actions.c:667 + #, c-format + msgid "%s not allowed outside a PROC" + msgstr "%s is niet toegestaan buiten een PROC" + + #: ch/actions.c:673 + #, c-format + msgid "%s action in PROC with no declared RESULTS" + msgstr "%s-actie in PROC zonder gedeclareerde RESULTS" + + #: ch/actions.c:704 + msgid "RETURN not allowed outside PROC" + msgstr "RETURN is niet toegestaan buiten PROC" + + #: ch/actions.c:717 + msgid "RETURN with a value, in PROC returning void" + msgstr "RETURN met waarde, in een PROC die void teruggeeft" + + #: ch/actions.c:726 + msgid "RETURN with no value and no RESULT action in procedure" + msgstr "RETURN zonder waarde en geen RESULTS-actie in procedure" + + #: ch/actions.c:749 + #, c-format + msgid "no label named `%s'" + msgstr "er is geen label dat `%s' heet" + + #: ch/actions.c:751 + #, c-format + msgid "cannot GOTO label `%s' outside current function" + msgstr "kan geen GOTO uitvoeren naar label `%s' dat buiten de huidige functie ligt" + + # Misschien beter 'EXIT-baar'? + #: ch/actions.c:773 + #, c-format + msgid "no EXITable label named `%s'" + msgstr "er is geen EXITable label dat `%s' heet" + + # Is dit de juiste vertaling? + #: ch/actions.c:775 + #, c-format + msgid "cannot EXIT label `%s' outside current function" + msgstr "kan geen EXIT uitvoeren voor label `%s' buiten huidige functie" + + #: ch/actions.c:1018 + msgid "case selector not compatible with label" + msgstr "case-selector niet compatibel met label" + + #: ch/actions.c:1044 + msgid "ELSE label not within a CASE statement" + msgstr "ELSE-label niet in een CASE-statement" + + #: ch/actions.c:1048 + msgid "multiple default labels found in a CASE statement" + msgstr "meerdere default-labels gevonden in één CASE-statement" + + #: ch/actions.c:1049 + msgid "this is the first ELSE label" + msgstr "dit is het eerste ELSE-label" + + #: ch/actions.c:1070 + msgid "label found outside of CASE statement" + msgstr "label gevonden buiten een CASE-statement" + + #: ch/actions.c:1073 + msgid "duplicate CASE value" + msgstr "herhaalde CASE-waarde" + + # 'vermelding' lijkt me beter dat het letterlijke 'ingang' + #: ch/actions.c:1074 ch/actions.c:1127 + msgid "this is the first entry for that value" + msgstr "dit is de eerste vermelding van deze waarde" + + #: ch/actions.c:1077 ch/actions.c:1130 + msgid "CASE value out of range" + msgstr "CASE-waarde buiten bereik" + + #: ch/actions.c:1079 ch/actions.c:1132 + msgid "empty range" + msgstr "leeg bereik" + + # klinkt niet echt goed + #: ch/actions.c:1081 ch/actions.c:1134 + msgid "label within scope of cleanup or variable array" + msgstr "label binnen bereik van opruiming of variabele array" + + # Hoe vertaal je 'discrete' best? Discreet is waarschijnlijk wel correct, maar ik + # vermoed/hoop dat er een betere oplossing is. + #: ch/actions.c:1105 ch/actions.c:1302 + msgid "mode in label is not discrete" + msgstr "modus in label is niet discreet" + + #: ch/actions.c:1122 + msgid "label not within a CASE statement" + msgstr "label niet in een CASE-statement" + + # Letterlijk is hoogstwaarschijnlijk geen goede vertaling. + # Misschien beter gewoon 'moet een discrete literal zijn' vertalen? + #: ch/actions.c:1282 + #, fuzzy + msgid "lower bound of range must be a discrete literal expression" + msgstr "Ondergrens van bereik moet een letterlijke discrete expressie zijn" + + #: ch/actions.c:1287 + #, fuzzy + msgid "upper bound of range must be a discrete literal expression" + msgstr "Bovengrens van bereik moet een letterlijke discrete expressie zijn" + + #: ch/actions.c:1311 + #, fuzzy + msgid "CASE label is not valid" + msgstr "Het CASE-label in niet geldig" + + #: ch/actions.c:1357 + #, fuzzy + msgid "number of CASE selectors does not match the number of CASE label lists" + msgstr "Het aantal CASE-selectors komt niet overeen met het aantal CASE-label lijsten" + + #: ch/actions.c:1442 + #, c-format + msgid "incomplete CASE - %s not handled" + msgstr "onvolledige CASE - %s niet opgevangen" + + #: ch/actions.c:1461 + msgid "CASE selector with variable range" + msgstr "CASE-selector met variabel bereik" + + #: ch/actions.c:1465 + msgid "too many cases to do CASE completeness testing" + msgstr "teveel gevallen om CASE-volledigheidstesten uit te voeren" + + #: ch/actions.c:1550 + msgid "type of tuple cannot be implicit in multiple assignent" + msgstr "" + + #: ch/actions.c:1552 + msgid "conditional expression cannot be used in multiple assignent" + msgstr "" + + #: ch/actions.c:1554 + msgid "internal error - unknown type in multiple assignment" + msgstr "" + + #: ch/actions.c:1558 + msgid "no operator allowed in multiple assignment," + msgstr "" + + #: ch/actions.c:1568 + msgid "location modes in multiple assignment are not equivalent" + msgstr "" + + #: ch/actions.c:1606 + msgid "you may not assign a value to a BUFFER or EVENT location" + msgstr "" + + #: ch/actions.c:1614 + msgid "can't assign value to READonly location" + msgstr "" + + #: ch/actions.c:1619 + msgid "cannot assign to location with non-value property" + msgstr "" + + #: ch/actions.c:1639 + msgid "lefthand side of assignment is not a location" + msgstr "linkerkant van toewijzing is geen locatie" + + #: ch/actions.c:1715 ch/actions.c:1785 + msgid "bitstring slice" + msgstr "" + + #: ch/actions.c:1810 + msgid "LENGTH on left-hand-side is non-portable" + msgstr "" + + #: ch/actions.c:1814 + msgid "can only set LENGTH of array location" + msgstr "" + + #: ch/convert.c:63 + msgid "internal error: trying to make loc-identity with non-location" + msgstr "" + + #: ch/convert.c:117 + msgid "cannot convert to a boolean mode" + msgstr "" + + #: ch/convert.c:152 + msgid "cannot convert to a char mode" + msgstr "" + + # Of 'tupel van machtsverzameling'? + #: ch/convert.c:248 + msgid "powerset tuple element out of range" + msgstr "element van powerset-tupel buiten bereik" + + #: ch/convert.c:284 ch/convert.c:312 + #, c-format + msgid "incompatible member of powerset tuple (at position #%d)" + msgstr "" + + # 'fixed' -> 'vast'? + #: ch/convert.c:394 + #, c-format + msgid "no initializer value for fixed field `%s'" + msgstr "geen beginwaarde voor fixed veld `%s'" + + #: ch/convert.c:436 + #, c-format + msgid "non-constant value for tag field `%s'" + msgstr "niet-constante waarde voor tagveld `%s'" + + #: ch/convert.c:488 + #, c-format + msgid "field `%s' in wrong variant" + msgstr "" + + #: ch/convert.c:495 + #, c-format + msgid "missing variant fields (at least `%s')" + msgstr "" + + #: ch/convert.c:518 + #, c-format + msgid "bad initializer for field `%s'" + msgstr "ongeldige beginwaarde voor veld `%s'" + + #: ch/convert.c:525 + #, c-format + msgid "no initializer value for variant field `%s'" + msgstr "geen beginwaarde voor variant-veld `%s'" + + #: ch/convert.c:531 + msgid "no selected variant" + msgstr "" + + #: ch/convert.c:546 ch/convert.c:912 + msgid "mixture of labelled and unlabelled tuple elements" + msgstr "" + + #: ch/convert.c:557 + msgid "probably not a structure tuple" + msgstr "" + + #: ch/convert.c:559 + #, c-format + msgid "excess initializer for field `%s'" + msgstr "overtollige beginwaarde voor veld `%s'" + + #: ch/convert.c:566 + msgid "excess unnamed initializers" + msgstr "overtollige onbenoemde beginwaarden" + + #: ch/convert.c:693 + msgid "non-constant start index for tuple" + msgstr "niet-constante start-index voor tupel" + + #: ch/convert.c:736 + msgid "invalid array tuple label" + msgstr "ongeldig label voor array-tupel" + + #: ch/convert.c:750 + msgid "non-constant array tuple index range" + msgstr "niet-constant indexbereik van array-tupel" + + #: ch/convert.c:759 + #, c-format + msgid "incompatible array tuple element %s" + msgstr "incompatibel array-tupel element %s" + + #: ch/convert.c:775 + msgid "multiple (*) or (ELSE) array tuple labels" + msgstr "" + + #: ch/convert.c:784 + msgid "empty range in array tuple" + msgstr "leeg indexbereik in array-tupel" + + #: ch/convert.c:801 + #, c-format + msgid "array tuple has duplicate index %s" + msgstr "" + + #: ch/convert.c:809 + msgid "array tuple index out of range" + msgstr "index van array-tupel buiten bereik" + + #: ch/convert.c:811 + msgid "too many array tuple values" + msgstr "" + + #: ch/convert.c:883 + msgid "dynamic array tuple without (*) or (ELSE)" + msgstr "" + + #: ch/convert.c:885 + #, c-format + msgid "missing array tuple element %s" + msgstr "" + + #: ch/convert.c:892 + #, c-format + msgid "missing array tuple elements %s : %s" + msgstr "" + + # Is 'mode' enkel van toepassing op 'string', of ook op 'array'? + #: ch/convert.c:1086 + msgid "initializer is not an array or string mode" + msgstr "beginwaarde is geen array of string-modus" + + #: ch/convert.c:1096 + msgid "destination is too small" + msgstr "" + + #: ch/convert.c:1152 + msgid "internal error: unknown type of expression" + msgstr "interne fout: onbekende expressie-soort" + + #: ch/decl.c:1033 + #, c-format + msgid "`%s' must not be declared readonly" + msgstr "`%s' mag niet als alleen-lezen gedeclareerd worden" + + #: ch/decl.c:1037 + msgid "declaration of readonly variable without initialization" + msgstr "" + + #: ch/decl.c:1059 + #, fuzzy, c-format + msgid "no initialization allowed for `%s'" + msgstr "geen initialisatie toegestaan voor `%s'" + + #: ch/decl.c:1067 + #, c-format + msgid "value for loc-identity `%s' is not a location" + msgstr "" + + #: ch/decl.c:1074 + #, c-format + msgid "location for `%s' not read-compatible" + msgstr "" + + #: ch/decl.c:1101 + #, c-format + msgid "nonconstant initializer for `%s'" + msgstr "niet-constante beginwaarde voor `%s'" + + #: ch/decl.c:1132 + msgid "do_decl: internal error: don't know what to initialize" + msgstr "" + + #: ch/decl.c:1189 + msgid "RECURSIVE PROCs" + msgstr "" + + #: ch/decl.c:1445 + #, c-format + msgid "`%s' must not be READonly" + msgstr "" + + #: ch/decl.c:1471 + msgid "POS may not be specified for a list of field declarations" + msgstr "POS mag niet opgegeven worden voor een lijst van veld-declaraties" + + #: ch/decl.c:1525 + msgid "(ELSE) case label as well as ELSE variant" + msgstr "" + + #: ch/decl.c:1610 ch/decl.c:1613 + msgid "inconsistent modes between labels and tag field" + msgstr "" + + #: ch/decl.c:1618 + msgid "too few tag labels" + msgstr "" + + #: ch/decl.c:1620 + msgid "too many tag labels" + msgstr "teveel tag-labels" + + #: ch/decl.c:1658 + msgid "case label lower limit is not a discrete constant expression" + msgstr "ondergrens van case-label is geen discrete constante expressie" + + #: ch/decl.c:1660 + msgid "case label upper limit is not a discrete constant expression" + msgstr "bovengrens van case-label is geen discrete constante expressie" + + #: ch/decl.c:1670 + msgid "case label must be a discrete constant expression" + msgstr "case-label moet een discrete constante expressie zijn" + + #: ch/decl.c:1697 + msgid "variant label declared here..." + msgstr "" + + #: ch/decl.c:1699 + msgid "...is duplicated here" + msgstr "" + + #: ch/decl.c:1729 + #, c-format + msgid "no field (yet) for tag %s" + msgstr "" + + #: ch/decl.c:1824 + msgid "non-value mode may only returned by LOC" + msgstr "" + + #: ch/decl.c:1847 + #, c-format + msgid "mode of `%s' is not a mode" + msgstr "modus van `%s' is geen modus" + + #: ch/decl.c:1853 + #, c-format + msgid "`%s' may only be passed by LOC" + msgstr "" + + #: ch/decl.c:2281 + #, c-format + msgid "nothing named `%s' to grant" + msgstr "" + + #: ch/decl.c:2321 + #, c-format + msgid "duplicate grant for `%s'" + msgstr "herhaalde grant voor `%s'" + + #: ch/decl.c:2322 + #, c-format + msgid "previous grant for `%s'" + msgstr "eerdere grant voor `%s'" + + #: ch/decl.c:2409 + #, c-format + msgid "duplicate definition `%s'" + msgstr "herhaalde definitie `%s'" + + #: ch/decl.c:2410 + #, c-format + msgid "previous definition of `%s'" + msgstr "eerdere definitie van `%s'" + + #: ch/decl.c:3248 ch/decl.c:3258 + #, c-format + msgid "ambiguous choice for seize `%s' -" + msgstr "" + + #: ch/decl.c:3249 ch/decl.c:3259 + #, c-format + msgid " - can seize this `%s' -" + msgstr "" + + #: ch/decl.c:3250 ch/decl.c:3261 + #, c-format + msgid " - or this granted decl `%s'" + msgstr "" + + #: ch/decl.c:4430 + #, fuzzy, c-format + msgid "enumerator value for `%s' is less than 0" + msgstr "enumeratiewaarde voor `%s' is kleiner dan 0" + + #: ch/decl.c:4512 + #, c-format + msgid "enumerators `%s' and `%s' have equal values" + msgstr "" + + #: ch/decl.c:4618 + msgid "undefined value in SET mode is obsolete and deprecated" + msgstr "" + + #: ch/decl.c:4794 + msgid "BASE variable never declared" + msgstr "BASE-variabele nooit gedeclareerd" + + #: ch/decl.c:4796 + msgid "cannot BASE a variable on a PROC/PROCESS name" + msgstr "" + + #: ch/decl.c:4848 + msgid "INTERNAL ERROR: handle_one_level is broken" + msgstr "" + + #: ch/expr.c:126 + #, c-format + msgid "tuple without specified mode not allowed in %s" + msgstr "" + + #: ch/expr.c:128 + #, c-format + msgid "conditional expression not allowed in %s" + msgstr "voorwaardelijke expressie niet toegestaan in `%s'" + + #: ch/expr.c:130 + #, c-format + msgid "internal error: unknown expression mode in %s" + msgstr "interne fout: onbekende expressie-modus in %s" + + #: ch/expr.c:147 + msgid "CASE selector is not a discrete expression" + msgstr "" + + #: ch/expr.c:215 + msgid "The number of CASE selectors does not match the number of CASE label lists" + msgstr "Het aantal CASE-selectors komt niet overeen met het aantal CASE-label lijsten" + + # klinkt niet + #: ch/expr.c:594 + msgid "powerset is not addressable" + msgstr "powerset kan niet geaddresseerd worden" + + #: ch/expr.c:639 + msgid "array is not addressable" + msgstr "" + + #: ch/expr.c:687 + #, fuzzy, c-format + msgid "too few arguments in call to `%s'" + msgstr "Te weinig argumenten in oproep van `%s'" + + #: ch/expr.c:689 + #, fuzzy, c-format + msgid "too many arguments in call to `%s'" + msgstr "Teveel argumenten in oproep van `%s'" + + #: ch/expr.c:758 + #, fuzzy + msgid "cannot dereference, not a pointer" + msgstr "kan niet derefereren, is geen pointer." + + #: ch/expr.c:768 + #, c-format + msgid "missing '.' operator or undefined mode name `%s'" + msgstr "" + + #: ch/expr.c:771 + msgid "you have forgotten the '.' operator which must" + msgstr "" + + #: ch/expr.c:772 + #, c-format + msgid " precede a STRUCT field reference, or `%s' is an undefined mode" + msgstr "" + + #: ch/expr.c:786 + msgid "can't dereference PTR value using unary `->'" + msgstr "" + + # Is the %s the argument, or is it 'of' the argument? + #: ch/expr.c:831 + msgid "invalid type argument of `->'" + msgstr "ongeldig type-argument voor `->'" + + #: ch/expr.c:856 ch/expr.c:969 + msgid "operand of '.' is not a STRUCT" + msgstr "" + + #: ch/expr.c:909 + #, fuzzy, c-format + msgid "no field named `%s'" + msgstr "Geen veld dat `%s' heet" + + #: ch/expr.c:1217 + msgid "ABS argument must be discrete or real mode" + msgstr "" + + #: ch/expr.c:1250 + #, fuzzy, c-format + msgid "argument %d to ABSTIME must be of integer type" + msgstr "argument van `%s' moet van een integraal type zijn." + + #: ch/expr.c:1288 ch/expr.c:1329 + #, fuzzy + msgid "parameter 1 must be referable" + msgstr "argument %d moet refereerbaar zijn" + + # Hoe vertaal je in godsnaam 'mismatch' op KORTE manier in het Nederlands??? + #: ch/expr.c:1294 ch/expr.c:1335 ch/expr.c:1372 + #, fuzzy + msgid "mode mismatch in parameter 1" + msgstr "geen overeenkomst van modus in parameter %d" + + #: ch/expr.c:1301 ch/expr.c:1342 + #, fuzzy + msgid "parameter 2 must be a positive integer" + msgstr "parameter 2 moet een locatie zijn" + + #: ch/expr.c:1436 + msgid "CARD argument must be powerset mode" + msgstr "" + + #: ch/expr.c:1487 + #, fuzzy + msgid "expression for DESCR-built-in must be referable" + msgstr "%s expressie moet refereerbaar zijn" + + #: ch/expr.c:1535 + #, fuzzy, c-format + msgid "argument to `%s' must be of integer type" + msgstr "argument van `%s' moet van een integraal type zijn." + + #: ch/expr.c:1568 + #, c-format + msgid "argument 1 to `%s' must be of floating point mode" + msgstr "" + + #: ch/expr.c:1602 + #, fuzzy, c-format + msgid "first argument to `%s' must be a mode" + msgstr "Eerste argument van `%s' moet een modus zijn" + + #: ch/expr.c:1609 + #, c-format + msgid "READonly modes for %s must have a value" + msgstr "" + + #: ch/expr.c:1692 + msgid "argument to TERMINATE must be a reference primitive value" + msgstr "" + + #: ch/expr.c:1741 + #, fuzzy + msgid "argument 1 to INTTIME must be of mode TIME" + msgstr "Eerste argument van `%s' moet een modus zijn" + + #: ch/expr.c:1888 + msgid "LENGTH argument must be string, buffer, event mode, text location or mode" + msgstr "" + + #: ch/expr.c:1917 + msgid "UPPER argument must have a mode, or be a mode" + msgstr "" + + #: ch/expr.c:1919 + msgid "LOWER argument must have a mode, or be a mode" + msgstr "" + + #: ch/expr.c:1953 + msgid "UPPER argument must be string, array, mode or integer" + msgstr "" + + #: ch/expr.c:1955 + msgid "LOWER argument must be string, array, mode or integer" + msgstr "" + + #: ch/expr.c:1991 + #, c-format + msgid "%s argument must be POWERSET mode" + msgstr "" + + #: ch/expr.c:2017 + #, c-format + msgid "%s called for empty POWERSET" + msgstr "" + + #: ch/expr.c:2098 + msgid "argument to NUM is not discrete" + msgstr "argument voor NUM is niet discreet" + + #: ch/expr.c:2110 + #, fuzzy + msgid "no integer mode which matches expression's mode" + msgstr "Geen integer-modus die met expressie overeen komt" + + #: ch/expr.c:2119 + msgid "NUM's parameter is below its mode range" + msgstr "" + + #: ch/expr.c:2122 + msgid "NUM's parameter is above its mode range" + msgstr "" + + #: ch/expr.c:2161 + msgid "cannot take SUCC or PRED of a numbered SET" + msgstr "" + + #: ch/expr.c:2169 + msgid "SUCC or PRED must not be done on a PTR" + msgstr "" + + #: ch/expr.c:2172 + msgid "SUCC or PRED for a reference type is not standard" + msgstr "" + + #: ch/expr.c:2182 + msgid "SUCC or PRED argument must be a discrete mode" + msgstr "" + + #: ch/expr.c:2203 + #, c-format + msgid "taking the %s of a value already at its %s value" + msgstr "" + + #: ch/expr.c:2254 + msgid "size applied to a function mode" + msgstr "size toegepast op een functie-modus" + + #: ch/expr.c:2260 + msgid "sizeof applied to a void mode" + msgstr "sizeof toegepast op een void-modus" + + #: ch/expr.c:2265 + msgid "sizeof applied to an incomplete mode" + msgstr "sizeof toegepast op een onvolledige modus" + + #: ch/expr.c:2360 + msgid "cannot call a PROCESS, you START a PROCESS" + msgstr "" + + # (%s = 'parameter ') + #: ch/expr.c:2422 + #, c-format + msgid "invalid %s" + msgstr "ongeldige %s" + + #: ch/expr.c:2437 + #, c-format + msgid "%s parameter %d must be a location" + msgstr "%s parameter %d moet een locatie zijn" + + #: ch/expr.c:2445 + #, c-format + msgid "%s parameter %d is READ-only" + msgstr "" + + #: ch/expr.c:2488 + #, c-format + msgid "LOC actual parameter %d is a non-referable location" + msgstr "" + + # Hoe vertaal je in godsnaam 'mismatch' op KORTE manier in het Nederlands??? + #: ch/expr.c:2494 + #, c-format + msgid "mode mismatch in parameter %d" + msgstr "geen overeenkomst van modus in parameter %d" + + #: ch/expr.c:2518 + #, c-format + msgid "too many arguments to procedure `%s'" + msgstr "teveel argumenten voor procedure `%s'" + + #: ch/expr.c:2521 + msgid "too many arguments to procedure" + msgstr "teveel argumenten voor procedure" + + #: ch/expr.c:2527 + #, c-format + msgid "too few arguments to procedure `%s'" + msgstr "te weinig argumenten voor procedure `%s'" + + #: ch/expr.c:2530 + msgid "too few arguments to procedure" + msgstr "te weinig argumenten voor procedure" + + #: ch/expr.c:2596 + msgid "syntax error (integer used as function)" + msgstr "" + + #: ch/expr.c:2616 + msgid "syntax error - missing operator, comma, or '('?" + msgstr "" + + #: ch/expr.c:2977 + #, fuzzy, c-format + msgid "unimplemented built-in function `%s'" + msgstr "ingebouwde functie `%s' is niet geïmplementeerd" + + #: ch/expr.c:2981 + #, fuzzy, c-format + msgid "internal error - bad built-in function `%s'" + msgstr "interne fout - slechte ingebouwde functie `%s'" + + #: ch/expr.c:2995 + msgid "empty expression in string index" + msgstr "lege expressie in string-index" + + #: ch/expr.c:3000 + msgid "only one expression allowed in string index" + msgstr "" + + #: ch/expr.c:3017 + msgid "invalid: primval ( untyped_exprlist )" + msgstr "" + + #: ch/expr.c:3081 ch/expr.c:3095 + msgid "operand is variable-size bitstring/power-set" + msgstr "" + + #: ch/expr.c:3245 + #, c-format + msgid "tree code `%s' unhandled in build_compare_set_expr" + msgstr "" + + #: ch/expr.c:3410 + msgid "incompatible modes in concat expression" + msgstr "incompatibele modi in concat-expressie" + + #: ch/expr.c:3459 + #, fuzzy + msgid "invalid operation on array of chars" + msgstr "Ongeldige operatie op array van chars" + + #: ch/expr.c:3504 + msgid "comparison of variant structures is unsafe" + msgstr "" + + #: ch/expr.c:3511 + msgid "compare with variant records" + msgstr "" + + #: ch/expr.c:3688 ch/expr.c:3924 + #, c-format + msgid "incompatible operands to %s" + msgstr "incompatibele operands voor %s" + + #: ch/expr.c:3740 + msgid "relational operator not allowed for this mode" + msgstr "relationele operator niet toegestaan voor deze modus" + + #: ch/expr.c:3794 + #, c-format + msgid "cannot use %s operator on PROC mode variable" + msgstr "" + + #: ch/expr.c:3800 + #, c-format + msgid "invalid left operand of %s" + msgstr "ongeldige linker operand van %s" + + #: ch/expr.c:3805 ch/expr.c:4357 + #, c-format + msgid "invalid right operand of %s" + msgstr "ongeldige rechter operand van %s" + + #: ch/expr.c:3819 + msgid "repetition expression must be constant" + msgstr "" + + #: ch/expr.c:3829 + msgid "left argument to MOD/REM operator must be integral" + msgstr "" + + #: ch/expr.c:3834 + msgid "right argument to MOD/REM operator must be integral" + msgstr "" + + #: ch/expr.c:3891 + msgid "right operand of IN is not a powerset" + msgstr "" + + #: ch/expr.c:3896 + msgid "left operand of IN incompatible with right operand" + msgstr "" + + #: ch/expr.c:3987 + #, fuzzy + msgid "-> operator not allow in constant expression" + msgstr "-> operator niet toegestaan in constante expressie" + + #: ch/expr.c:4000 + msgid "taking the address of a string literal is non-standard" + msgstr "" + + #: ch/expr.c:4002 + msgid "taking the address of a function is non-standard" + msgstr "" + + #: ch/expr.c:4005 + msgid "ADDR requires a LOCATION argument" + msgstr "" + + #: ch/expr.c:4035 + msgid "-> expression is not addressable" + msgstr "" + + #: ch/expr.c:4062 + msgid "ADDR parameter must be a LOCATION" + msgstr "" + + #: ch/expr.c:4071 + msgid "possible internal error in build_chill_arrow_expr" + msgstr "" + + #: ch/expr.c:4076 + #, c-format + msgid "%s is not addressable" + msgstr "%s is niet addresseerbaar" + + #: ch/expr.c:4175 + msgid "repetition count is not an integer constant" + msgstr "herhalings-aantal is geen integerconstante" + + #: ch/expr.c:4183 + msgid "repetition count < 0" + msgstr "" + + #: ch/expr.c:4188 + msgid "repetition value not constant" + msgstr "herhalings-aantal is niet constant" + + #: ch/expr.c:4200 + msgid "bitstring repetition of non-constant boolean" + msgstr "" + + #: ch/expr.c:4223 + msgid "string repetition operand is non-constant bitstring" + msgstr "string herhalings-operand is een niet-constante bitstring" + + #: ch/expr.c:4283 + msgid "non-char, non-bit string repetition" + msgstr "" + + #: ch/expr.c:4311 + #, c-format + msgid "invalid operand of %s" + msgstr "ongeldige operand van %s" + + #: ch/expr.c:4322 + #, c-format + msgid "right operand of %s is not array of boolean" + msgstr "" + + #: ch/expr.c:4335 + #, c-format + msgid "%s operator applied to boolean variable" + msgstr "" + + # Of moet/mag 'boolean' hier vertaald worden? + #: ch/expr.c:4406 + msgid "non-boolean mode in conditional expression" + msgstr "niet-boolean modus in voorwaardelijke expressie" + + #: ch/grant.c:1978 + msgid "decode_constant: invalid component_ref" + msgstr "" + + #: ch/grant.c:1986 + msgid "decode_constant: mode and value mismatch" + msgstr "" + + #: ch/grant.c:1989 + msgid "decode_constant: cannot decode this mode" + msgstr "" + + #: ch/grant.c:2214 + msgid "decode_constant_selective: mode and value mismatch" + msgstr "" + + #: ch/grant.c:2217 + msgid "decode_constant_selective: cannot decode this mode" + msgstr "" + + #: ch/grant.c:2677 + #, fuzzy, c-format + msgid "can't write to %s" + msgstr "open %s" + + #: ch/grant.c:2764 + msgid "FORBID is not yet implemented" + msgstr "" + + #. this nerver should happen + #: ch/grant.c:2825 + #, fuzzy, c-format + msgid "function \"really_grant_this\" called for `%s'" + msgstr "functie \"really_grant_this\" opgeroepen voor `%s'" + + #: ch/inout.c:1645 + msgid "non-integral text length" + msgstr "" + + #: ch/inout.c:1650 + msgid "non-constant text length" + msgstr "" + + #: ch/inout.c:1655 + msgid "text length must be greater than 0" + msgstr "" + + #: ch/inout.c:1755 + #, c-format + msgid "argument %d of %s must be of mode ASSOCIATION" + msgstr "" + + #: ch/inout.c:1760 ch/inout.c:2146 ch/inout.c:2516 ch/inout.c:2751 + #, c-format + msgid "argument %d of %s must be a location" + msgstr "argument %d van %s moet een locatie zijn" + + #: ch/inout.c:1795 + msgid "argument 2 of ASSOCIATE must not be an empty string" + msgstr "argument 2 van ASSOCIATE mag geen lege string zijn" + + #: ch/inout.c:1811 + msgid "argument 2 to ASSOCIATE must be a string" + msgstr "" + + #: ch/inout.c:1850 + msgid "argument 3 to ASSOCIATE must be a string" + msgstr "" + + #: ch/inout.c:2031 + #, fuzzy + msgid "too many arguments in call to MODIFY" + msgstr "Teveel argumenten in oproep van MODIFY" + + #: ch/inout.c:2044 + msgid "argument 2 of MODIFY must not be an empty string" + msgstr "argument 2 van MODIFY mag geen lege string zijn" + + #: ch/inout.c:2060 + msgid "argument 2 to MODIFY must be a string" + msgstr "argument 2 van MODIFY moet een string zijn" + + #: ch/inout.c:2094 + msgid "argument 3 to MODIFY must be a string" + msgstr "argument 3 van MODIFY moet een string zijn" + + #: ch/inout.c:2141 + #, c-format + msgid "argument %d of %s must be an ACCESS or TEXT mode" + msgstr "" + + #: ch/inout.c:2355 + msgid "argument 4 of CONNECT must be of mode WHERE" + msgstr "" + + #: ch/inout.c:2371 + msgid "index expression for ACCESS without index" + msgstr "" + + #: ch/inout.c:2376 ch/inout.c:2554 ch/inout.c:2636 ch/inout.c:4356 + #: ch/inout.c:4504 + msgid "incompatible index mode" + msgstr "incompatibele index-modus" + + #: ch/inout.c:2476 + msgid "argument 3 to CONNECT must be of mode USAGE" + msgstr "" + + #: ch/inout.c:2511 + #, c-format + msgid "argument %d of %s must be of mode ACCESS" + msgstr "" + + #: ch/inout.c:2545 + #, fuzzy + msgid "too few arguments in call to `readrecord'" + msgstr "Te weinig argumenten in oproep van `readrecord'" + + #: ch/inout.c:2569 ch/inout.c:2648 + msgid "incompatible record mode" + msgstr "incompatibele record-modus" + + #: ch/inout.c:2574 + msgid "store location must not be READonly" + msgstr "" + + #: ch/inout.c:2616 + #, fuzzy + msgid "too few arguments in call to `writerecord'" + msgstr "Te weinig argumenten in oproep van `writerecord'" + + #: ch/inout.c:2643 + msgid "transfer to ACCESS without record mode" + msgstr "" + + #: ch/inout.c:2746 + #, c-format + msgid "argument %d of %s must be of mode TEXT" + msgstr "" + + #: ch/inout.c:2803 + msgid "TEXT doesn't have a location" + msgstr "" + + #: ch/inout.c:2905 + msgid "incompatible index mode for SETETEXTACCESS" + msgstr "" + + #: ch/inout.c:2915 + msgid "incompatible record mode for SETTEXTACCESS" + msgstr "" + + #: ch/inout.c:2945 + msgid "parameter 2 must be a location" + msgstr "parameter 2 moet een locatie zijn" + + #: ch/inout.c:2955 + msgid "incompatible modes in parameter 2" + msgstr "incompatibele modes in parameter 2" + + # 'braced-group'? Wie schrijft verdorie die foutmeldingen? + #: ch/inout.c:3062 + msgid "conditional expression not allowed in this context" + msgstr "voorwaardelijke expressie niet toegestaan in deze context" + + # Betere vertaling voor 'untyped'? + #: ch/inout.c:3064 + #, c-format + msgid "untyped expression as argument %d" + msgstr "expressie zonder type als argument %d" + + #: ch/inout.c:3141 ch/inout.c:3187 + #, c-format + msgid "cannot process %d bits integer for READTEXT argument %d" + msgstr "" + + #: ch/inout.c:3262 + #, c-format + msgid "cannot process %d bits integer WRITETEXT argument %d" + msgstr "" + + # Ik weet het, 'alleen-lezen' is lelijk, maar het is de min of meer geijkte vertaling. + #: ch/inout.c:3283 ch/inout.c:3338 ch/inout.c:3417 ch/inout.c:3483 + #: ch/inout.c:3534 ch/inout.c:3619 ch/inout.c:3654 + #, c-format + msgid "argument %d is READonly" + msgstr "argument %d is alleen-lezen" + + #: ch/inout.c:3290 ch/inout.c:3345 ch/inout.c:3424 ch/inout.c:3491 + #: ch/inout.c:3542 ch/inout.c:3627 ch/inout.c:3659 + #, c-format + msgid "argument %d must be referable" + msgstr "argument %d moet refereerbaar zijn" + + #: ch/inout.c:3578 + #, c-format + msgid "cannot process argument %d of WRITETEXT, unknown size" + msgstr "" + + #. datatype is not yet implemented, issue a warning + #: ch/inout.c:3725 + #, c-format + msgid "cannot process mode of argument %d for %sTEXT" + msgstr "" + + #: ch/inout.c:3868 + msgid "too few arguments for this format string" + msgstr "te weinig argumenten voor deze formaatstring" + + #: ch/inout.c:3893 ch/inout.c:3902 + #, c-format + msgid "type of argument %d invalid for conversion code at offset %d" + msgstr "" + + #: ch/inout.c:4012 + msgid "unmatched open paren" + msgstr "" + + #: ch/inout.c:4026 ch/inout.c:4221 + #, c-format + msgid "bad format specification character (offset %d)" + msgstr "" + + #: ch/inout.c:4039 + #, c-format + msgid "repetition factor overflow (offset %d)" + msgstr "" + + #: ch/inout.c:4057 ch/inout.c:4064 ch/inout.c:4071 + #, c-format + msgid "duplicate qualifier (offset %d)" + msgstr "" + + #: ch/inout.c:4093 + #, c-format + msgid "clause width overflow (offset %d)" + msgstr "" + + #: ch/inout.c:4106 + #, c-format + msgid "no fraction (offset %d)" + msgstr "" + + #: ch/inout.c:4124 + #, c-format + msgid "no fraction width (offset %d)" + msgstr "" + + #: ch/inout.c:4131 + #, c-format + msgid "fraction width overflow (offset %d)" + msgstr "" + + #: ch/inout.c:4142 + #, c-format + msgid "no exponent (offset %d)" + msgstr "" + + #: ch/inout.c:4160 + #, c-format + msgid "no exponent width (offset %d)" + msgstr "" + + #: ch/inout.c:4167 + #, c-format + msgid "exponent width overflow (offset %d)" + msgstr "" + + #: ch/inout.c:4208 + msgid "internal error in check_format_string" + msgstr "interne fout in check_format_string" + + #: ch/inout.c:4224 + #, c-format + msgid "no padding character (offset %d)" + msgstr "" + + #. too may arguments for format string + #: ch/inout.c:4256 + msgid "too many arguments for this format string" + msgstr "teveel argumenten voor deze formaatstring" + + #: ch/inout.c:4354 ch/inout.c:4502 + msgid "missing index expression" + msgstr "ontbrekende index-expressie" + + #: ch/inout.c:4361 + #, fuzzy + msgid "too few arguments in call to `writetext'" + msgstr "Te weinig argumenten in oproep van `writetext'" + + #: ch/inout.c:4374 + msgid "argument 1 for WRITETEXT must be a TEXT or CHARS(n) VARYING location" + msgstr "" + + #: ch/inout.c:4397 + msgid "`format string' for WRITETEXT must be a CHARACTER string" + msgstr "" + + #: ch/inout.c:4509 + #, fuzzy + msgid "too few arguments in call to `readtext'" + msgstr "Te weinig argumenten in oproep van `readtext'" + + #: ch/inout.c:4522 + msgid "argument 1 for READTEXT must be a TEXT location or CHARS(n) [ VARYING ] expression" + msgstr "" + + #: ch/inout.c:4543 + msgid "`format string' for READTEXT must be a CHARACTER string" + msgstr "" + + #: ch/lang.c:105 + msgid "non-constant expression" + msgstr "niet-constante expressie" + + #: ch/lang.c:191 + msgid "ignoring case upon input and" + msgstr "" + + #: ch/lang.c:192 + msgid "making special words uppercase wouldn't work" + msgstr "" + + #: ch/lang.c:203 + msgid "making special words uppercase and" + msgstr "" + + #: ch/lang.c:204 + msgid " ignoring case upon input wouldn't work" + msgstr "" + + #: ch/lang.c:277 java/typeck.c:178 + msgid "internal error - use of undefined type" + msgstr "interne fout -- niet gedefinieerd type gebruikt" + + #: ch/lex.c:502 + msgid "invalid C'xx' " + msgstr "ongeldige C'xx'" + + #: ch/lex.c:607 java/jcf-parse.c:611 java/jcf-write.c:3376 + #, fuzzy, c-format + msgid "can't close %s" + msgstr "close %s" + + #: ch/lex.c:711 + msgid "malformed exponent part of floating-point literal" + msgstr "" + + #: ch/lex.c:728 + #, fuzzy + msgid "real number exceeds range of REAL" + msgstr "floating-point getal overschrijdt het bereik van een `float'" + + #: ch/lex.c:747 ch/lex.c:774 + #, fuzzy + msgid "end-of-file in '<>' directive" + msgstr "ongedefinieerd of ongeldig #-commando" + + #: ch/lex.c:780 + #, fuzzy + msgid "unrecognized compiler directive" + msgstr "onbekende formaatspecificatie" + + #: ch/lex.c:788 ch/lex.c:834 + #, fuzzy, c-format + msgid "unrecognized compiler directive `%s'" + msgstr "onbekende formaatspecificatie" + + #: ch/lex.c:995 + #, fuzzy + msgid "unterminated control sequence" + msgstr "niet-beëindigde commentaar" + + #: ch/lex.c:1010 ch/lex.c:1046 + msgid "invalid integer literal in control sequence" + msgstr "" + + #: ch/lex.c:1021 ch/lex.c:1029 + msgid "control sequence overflow" + msgstr "" + + #: ch/lex.c:1023 ch/lex.c:1031 + #, fuzzy + msgid "invalid control sequence" + msgstr "ongeldige macronaam" + + #: ch/lex.c:1111 + #, fuzzy + msgid "invalid base in read control sequence" + msgstr "ongeldige lvalue bij decrementeren" + + #: ch/lex.c:1118 + msgid "invalid digit in control sequence" + msgstr "" + + #: ch/lex.c:1145 + #, fuzzy + msgid "unterminated string literal" + msgstr "Onbeëindigde stringconstante" + + #: ch/lex.c:1248 ch/lex.c:1334 + #, fuzzy, c-format + msgid "invalid number format `%s'" + msgstr "ongeldige registernaam voor `%s'" + + #: ch/lex.c:1266 + msgid "integer literal too big" + msgstr "" + + #: ch/lex.c:1395 + #, fuzzy, c-format + msgid "can't find %s" + msgstr "kan %s niet vinden" + + #: ch/lex.c:1421 + msgid "USE_SEIZE_FILE directive must be followed by string" + msgstr "" + + #: ch/lex.c:1693 f/lex.c:1190 + msgid "invalid #ident" + msgstr "ongeldige #ident" + + #: ch/lex.c:1711 f/lex.c:1207 + msgid "undefined or invalid # directive" + msgstr "ongedefinieerd of ongeldig #-commando" + + #: ch/lex.c:1765 ch/lex.c:1774 f/lex.c:1263 + msgid "invalid #line" + msgstr "ongeldige #line" + + #: ch/lex.c:1843 f/lex.c:836 + msgid "#-lines for entering and leaving files don't match" + msgstr "#-lijnen voor het binnengaan en verlaten van bestanden komen niet overeen" + + #: ch/lex.c:1868 f/lex.c:1373 + msgid "invalid #-line" + msgstr "ongeldige #-lijn" + + #: ch/lex.c:1998 + msgid "missing `=' in compiler directive" + msgstr "" + + #: ch/lex.c:2040 ch/lex.c:2050 ch/lex.c:2091 + #, fuzzy + msgid "invalid value follows `=' in compiler directive" + msgstr "`#line'-commando in slecht formaat" + + #: ch/lex.c:2061 + #, fuzzy, c-format + msgid "invalid `%c' character in name" + msgstr "ongeldig karakter in naam van macro-parameter" + + #: ch/lex.c:2074 + #, fuzzy, c-format + msgid "`%s' not integer constant synonym " + msgstr "twee `u's in integerconstante" + + #: ch/lex.c:2097 + #, fuzzy + msgid "value out of range in compiler directive" + msgstr "lijnnummer buiten bereik in `#line'-commando" + + #: ch/lex.c:2214 java/jcf-parse.c:607 + #, fuzzy, c-format + msgid "can't reopen %s" + msgstr "open %s" + + #: ch/lex.c:2225 + msgid "no modules seen" + msgstr "" + + #: ch/loop.c:480 + #, fuzzy + msgid "modeless tuple not allowed in this context" + msgstr "%s: %s compiler niet geïnstalleerd op dit systeem" + + #: ch/loop.c:482 + msgid "IN expression does not have a mode" + msgstr "" + + #: ch/loop.c:489 + msgid "location enumeration for BOOLS" + msgstr "" + + #: ch/loop.c:517 + msgid "location enumeration for bit-packed arrays" + msgstr "" + + #: ch/loop.c:526 ch/nloop.c:481 + #, fuzzy + msgid "loop's IN expression is not a composite object" + msgstr "`%s' is geen iterator" + + #: ch/loop.c:541 ch/nloop.c:498 + msgid "start expr must have discrete mode" + msgstr "" + + #: ch/loop.c:547 ch/nloop.c:504 + msgid "DO FOR start expression is a numbered SET" + msgstr "" + + #: ch/loop.c:555 ch/nloop.c:510 + msgid "TO expression is a numbered SET" + msgstr "" + + #: ch/loop.c:560 ch/nloop.c:525 + msgid "TO expr must have discrete mode" + msgstr "" + + #: ch/loop.c:565 ch/nloop.c:531 + msgid "start expr and TO expr must be compatible" + msgstr "" + + #: ch/loop.c:574 ch/nloop.c:546 + msgid "BY expr must have discrete mode" + msgstr "" + + #: ch/loop.c:579 ch/nloop.c:552 + msgid "start expr and BY expr must be compatible" + msgstr "" + + #: ch/loop.c:595 ch/nloop.c:765 + msgid "loop identifier undeclared" + msgstr "" + + #: ch/loop.c:606 + #, fuzzy + msgid "loop variable incompatible with start expression" + msgstr "overflow in constante expressie" + + #: ch/loop.c:633 ch/nloop.c:564 + msgid "body of DO FOR will never execute" + msgstr "" + + #: ch/loop.c:648 ch/nloop.c:585 + msgid "BY expression is negative or zero" + msgstr "" + + #: ch/loop.c:847 ch/nloop.c:817 + msgid "can't iterate through array of BOOL" + msgstr "" + + #: ch/nloop.c:867 + msgid "Can't iterate through array of BOOL" + msgstr "" + + #: ch/parse.c:159 + #, c-format + msgid "there was no start label to match the end label '%s'" + msgstr "" + + #: ch/parse.c:162 + #, c-format + msgid "start label '%s' does not match end label '%s'" + msgstr "" + + #: ch/parse.c:192 + #, fuzzy, c-format + msgid "`%s' not declared" + msgstr "`%.*s' is niet gedefinieerd" + + #: ch/parse.c:226 + #, fuzzy + msgid "no RETURN or RESULT in procedure" + msgstr "RETURN zonder waarde en geen RESULTS-actie in procedure" + + #: ch/parse.c:245 + msgid "PREFIXED clause with no prelix in unlabeled module" + msgstr "" + + #: ch/parse.c:336 + #, fuzzy, c-format + msgid "internal parser error - expected token %d" + msgstr "interne fout - dup-operatie" + + #: ch/parse.c:529 + #, fuzzy, c-format + msgid "'%s!' is not followed by an identifier" + msgstr "`#' gevolgd door een integer" + + #: ch/parse.c:545 + msgid "expected a name here" + msgstr "" + + #: ch/parse.c:560 + msgid "expected a name string here" + msgstr "" + + #: ch/parse.c:591 + #, fuzzy, c-format + msgid "`%s' undeclared" + msgstr "`%s' tevoren hier gedeclareerd" + + #: ch/parse.c:669 + msgid "action not allowed in SPEC MODULE" + msgstr "" + + #: ch/parse.c:691 + msgid "missing defining occurrence" + msgstr "" + + #: ch/parse.c:702 + msgid "bad defining occurrence following ','" + msgstr "" + + #: ch/parse.c:802 + msgid "missing '(' in exception list" + msgstr "" + + #: ch/parse.c:827 + msgid "ON exception names must be unique" + msgstr "" + + #: ch/parse.c:837 + msgid "syntax error in exception list" + msgstr "" + + #: ch/parse.c:873 + #, fuzzy + msgid "empty ON-condition" + msgstr "lege declaratie" + + #: ch/parse.c:938 + msgid "INIT not allowed at loc-identity declaration" + msgstr "" + + #: ch/parse.c:948 + #, fuzzy + msgid "'=' used where ':=' is required" + msgstr "waarde van union-type gebruikt waar een scalair nodig is" + + #: ch/parse.c:956 + msgid "initialization is not allowed in spec module" + msgstr "" + + #: ch/parse.c:964 + msgid "loc-identity declaration without initialization" + msgstr "" + + #: ch/parse.c:1008 + msgid "bad syntax following FORBID" + msgstr "" + + #: ch/parse.c:1023 + msgid "expected a postfix name here" + msgstr "" + + #: ch/parse.c:1068 + msgid "expected another rename clause" + msgstr "" + + #: ch/parse.c:1128 + #, fuzzy + msgid "syntax error in parameter name list" + msgstr "ongeldig karakter in naam van macro-parameter" + + #: ch/parse.c:1221 + msgid "NONREF specific without LOC in result attribute" + msgstr "" + + #: ch/parse.c:1223 + msgid "DYNAMIC specific without LOC in result attribute" + msgstr "" + + #: ch/parse.c:1245 + msgid "exception names must be unique" + msgstr "" + + #: ch/parse.c:1441 + msgid "must specify a PROCESS name" + msgstr "" + + #: ch/parse.c:1448 + msgid "SIGNAL must be in global reach" + msgstr "" + + #: ch/parse.c:1479 + msgid "syntax error while parsing signal definition statement" + msgstr "" + + #: ch/parse.c:1593 + #, fuzzy + msgid "case range list" + msgstr "leeg case-bereik" + + #: ch/parse.c:1660 + msgid "misplaced colon in case label" + msgstr "" + + #: ch/parse.c:1707 + msgid "unrecognized case label list after ','" + msgstr "" + + #: ch/parse.c:1971 ch/parse.c:1997 + #, fuzzy + msgid "bad ASM operand" + msgstr "ongeldige operand voor %P" + + #: ch/parse.c:2067 + msgid "readonly location modified by 'asm'" + msgstr "" + + #: ch/parse.c:2198 + msgid "expected 'TO' in step enumeration" + msgstr "" + + #: ch/parse.c:2213 + msgid "expected 'IN' in FOR control here" + msgstr "" + + #: ch/parse.c:2314 + msgid "missing DELAY CASE alternative" + msgstr "" + + #. This is probably not possible + #: ch/parse.c:2348 + msgid "non-referable location in DO WITH" + msgstr "" + + #: ch/parse.c:2360 + msgid "WITH element must be of STRUCT mode" + msgstr "" + + #: ch/parse.c:2467 + msgid "missing ')' in signal/buffer receive alternative" + msgstr "" + + #: ch/parse.c:2481 + msgid "misplaced 'IN' in signal/buffer receive alternative" + msgstr "" + + #: ch/parse.c:2529 + msgid "missing RECEIVE alternative" + msgstr "" + + #: ch/parse.c:2655 + msgid "PROCESS copy number must be integer" + msgstr "" + + #: ch/parse.c:2882 + msgid "missing parenthesis for procedure call" + msgstr "" + + #: ch/parse.c:2884 + #, fuzzy + msgid "expression is not an action" + msgstr "`%s' is geen iterator" + + #: ch/parse.c:2918 + msgid "syntax error in action" + msgstr "" + + #: ch/parse.c:2945 + msgid "no handler is permitted on this action" + msgstr "" + + #: ch/parse.c:2966 + #, fuzzy + msgid "definition follows action" + msgstr "herdefinitie van `union %s'" + + #: ch/parse.c:3042 + msgid "bad tuple field name list" + msgstr "" + + #: ch/parse.c:3088 + msgid "invalid syntax for label in tuple" + msgstr "" + + #: ch/parse.c:3133 + msgid "bad syntax in tuple" + msgstr "" + + #: ch/parse.c:3160 + msgid "non-mode name before tuple" + msgstr "" + + #: ch/parse.c:3205 + #, fuzzy + msgid "invalid expression/location syntax" + msgstr "ongeldige expressie als operand" + + #: ch/parse.c:3262 + msgid "RECEIVE expression" + msgstr "" + + #: ch/parse.c:3457 + msgid "there should not be a ';' here" + msgstr "" + + #: ch/parse.c:3496 + msgid "missing ELSE/ELSIF in IF expression" + msgstr "" + + # 'braced-group'? Wie schrijft verdorie die foutmeldingen? + #: ch/parse.c:3547 + #, fuzzy + msgid "conditional expression not allowed inside parentheses" + msgstr "accolade-groep in expressie enkel toegestaan binnen een functie" + + #: ch/parse.c:3551 + msgid "mode-less tuple not allowed inside parentheses" + msgstr "" + + #. Z.200 doesn't allow mixed numbered and unnumbered set elements, + #. but we can do it. Print a warning + #: ch/parse.c:3664 + msgid "mixed numbered and unnumbered set elements is not standard" + msgstr "" + + #: ch/parse.c:3667 + msgid "SET mode must define at least one named value" + msgstr "" + + #: ch/parse.c:3766 + msgid "POS not allowed for ARRAY" + msgstr "" + + #: ch/parse.c:3776 + msgid "STEP not allowed in field definition" + msgstr "" + + #: ch/parse.c:3792 + #, fuzzy + msgid "missing field name" + msgstr "beginwaarde ontbreekt" + + #: ch/parse.c:3801 + msgid "bad field name following ','" + msgstr "" + + #: ch/parse.c:3861 + msgid "expected ':' in structure variant alternative" + msgstr "" + + #: ch/parse.c:3912 + #, fuzzy + msgid "missing field" + msgstr "beginwaarde ontbreekt" + + #: ch/parse.c:4060 + msgid "VARYING bit-strings not implemented" + msgstr "" + + #: ch/parse.c:4121 + msgid "strings must be composed of chars" + msgstr "" + + #: ch/parse.c:4171 + msgid "BUFFER modes may not be readonly" + msgstr "" + + #: ch/parse.c:4178 + msgid "EVENT modes may not be readonly" + msgstr "" + + #: ch/parse.c:4198 + #, fuzzy + msgid "SIGNAL is not a valid mode" + msgstr "-fPIC is niet geldig met -mcoff" + + #: ch/parse.c:4235 + msgid "syntax error - missing mode" + msgstr "" + + #: ch/parse.c:4282 + msgid "syntax error - expected a module or end of file" + msgstr "" + + #: ch/satisfy.c:58 + #, c-format + msgid " `%s', which depends on ..." + msgstr "" + + #: ch/satisfy.c:90 + #, c-format + msgid "cycle: `%s' depends on ..." + msgstr "" + + #: ch/satisfy.c:92 + #, fuzzy, c-format + msgid " `%s'" + msgstr "%s voor `%s'" + + #: ch/satisfy.c:151 + msgid "SYN of this mode not allowed" + msgstr "" + + #: ch/satisfy.c:156 + msgid "mode of SYN incompatible with value" + msgstr "" + + #: ch/satisfy.c:167 + msgid "SYN value outside range of its mode" + msgstr "" + + #: ch/satisfy.c:176 + msgid "INIT string too large for mode" + msgstr "" + + #: ch/satisfy.c:195 + #, fuzzy, c-format + msgid "value of %s is not a valid constant" + msgstr "het argument van `asm' is geen constante string" + + #: ch/satisfy.c:226 + msgid "mode with non-value property in signal definition" + msgstr "" + + #: ch/satisfy.c:403 + #, fuzzy, c-format + msgid "undeclared identifier `%s'" + msgstr "ongeldige naam `%s'" + + #: ch/satisfy.c:456 + msgid "RETURNS spec with invalid mode" + msgstr "" + + #: ch/satisfy.c:520 + msgid "operand to REF is not a mode" + msgstr "" + + #: ch/satisfy.c:554 + msgid "field with non-value mode in variant structure not allowed" + msgstr "" + + #: ch/satisfy.c:593 + msgid "buffer element mode must not have non-value property" + msgstr "" + + #: ch/satisfy.c:602 + msgid "recordmode must not have the non-value property" + msgstr "" + + #: ch/tasking.c:170 ch/tasking.c:218 + #, c-format + msgid "tasking code %ld out of range for `%s'" + msgstr "" + + #: ch/tasking.c:284 + #, c-format + msgid "invalid attribute for argument `%s' (only IN or LOC allowed)" + msgstr "" + + #: ch/tasking.c:325 + msgid "PROCESS may only be declared at module level" + msgstr "" + + #: ch/tasking.c:549 + #, c-format + msgid "process name %s never declared" + msgstr "" + + #: ch/tasking.c:554 + msgid "you may only START a process, not a proc" + msgstr "" + + #: ch/tasking.c:590 + #, fuzzy + msgid "SET expression not a location" + msgstr "`%s' is geen iterator" + + #: ch/tasking.c:595 + msgid "SET location must be INSTANCE mode" + msgstr "" + + #: ch/tasking.c:632 + #, fuzzy, c-format + msgid "too many arguments to process `%s'" + msgstr "teveel argumenten voor functie `%s'" + + #: ch/tasking.c:635 + #, fuzzy + msgid "too many arguments to process" + msgstr "teveel argumenten voor functie" + + #: ch/tasking.c:640 + #, fuzzy, c-format + msgid "too few arguments to process `%s'" + msgstr "te weinig argumenten voor functie `%s'" + + #: ch/tasking.c:643 + #, fuzzy + msgid "too few arguments to process" + msgstr "te weinig argument voor functie" + + #: ch/tasking.c:983 + msgid "COPY_NUMBER argument must be INSTANCE expression" + msgstr "" + + #: ch/tasking.c:1007 + msgid "GEN_CODE argument must be a process or signal name" + msgstr "" + + #: ch/tasking.c:1029 + msgid "GEN_INST parameter 2 must be an integer mode" + msgstr "" + + #: ch/tasking.c:1050 + msgid "GEN_INST parameter 1 must be a PROCESS or an integer expression" + msgstr "" + + #: ch/tasking.c:1076 + #, c-format + msgid "%s is not a declared process" + msgstr "" + + #: ch/tasking.c:1097 + msgid "PROC_TYPE argument must be INSTANCE expression" + msgstr "" + + #: ch/tasking.c:1139 + #, fuzzy + msgid "QUEUE_LENGTH argument must be a BUFFER/EVENT location" + msgstr "argument %d van %s moet een locatie zijn" + + #: ch/tasking.c:1289 + #, c-format + msgid "SEND requires a SIGNAL; %s is not a SIGNAL name" + msgstr "" + + #: ch/tasking.c:1314 + #, fuzzy, c-format + msgid "too many values for SIGNAL `%s'" + msgstr "teveel argumenten voor functie `%s'" + + #: ch/tasking.c:1320 + #, fuzzy, c-format + msgid "too few values for SIGNAL `%s'" + msgstr "te weinig argumenten voor functie `%s'" + + #: ch/tasking.c:1398 + msgid "signal sent without priority" + msgstr "" + + #: ch/tasking.c:1399 ch/tasking.c:2927 + msgid " and no default priority was set." + msgstr "" + + #: ch/tasking.c:1400 ch/tasking.c:2777 ch/tasking.c:2928 + msgid " PRIORITY defaulted to 0" + msgstr "" + + #: ch/tasking.c:1415 + msgid "SEND without a destination instance" + msgstr "" + + #: ch/tasking.c:1416 + msgid " and no destination process specified" + msgstr "" + + #: ch/tasking.c:1417 + msgid " for the signal" + msgstr "" + + #. as our system doesn't allow that and Z.200 specifies it, + #. we issue a warning + #: ch/tasking.c:1436 + #, c-format + msgid "SEND to ANY copy of process `%s'" + msgstr "" + + #: ch/tasking.c:1441 + msgid "SEND TO must be an INSTANCE mode" + msgstr "" + + #: ch/tasking.c:1455 + msgid "SEND WITH must have a mode" + msgstr "" + + #: ch/tasking.c:1724 + #, fuzzy + msgid "internal error: RECEIVE CASE stack invalid" + msgstr "interne fout" + + #: ch/tasking.c:1764 ch/tasking.c:2492 + msgid "SET requires INSTANCE location" + msgstr "" + + #: ch/tasking.c:1843 + msgid "SIGNAL in RECEIVE CASE alternative follows" + msgstr "" + + #: ch/tasking.c:1844 + #, c-format + msgid " a BUFFER name on line %d" + msgstr "" + + #: ch/tasking.c:1852 + #, c-format + msgid "SIGNAL `%s' has no data fields" + msgstr "" + + #: ch/tasking.c:1857 + #, c-format + msgid "SIGNAL `%s' requires data fields" + msgstr "" + + #: ch/tasking.c:1921 + #, c-format + msgid "too few data fields provided for `%s'" + msgstr "" + + #: ch/tasking.c:1924 + #, fuzzy, c-format + msgid "too many data fields provided for `%s'" + msgstr "teveel argumenten voor functie `%s'" + + #: ch/tasking.c:1947 + msgid "BUFFER in RECEIVE CASE alternative follows" + msgstr "" + + #: ch/tasking.c:1948 + #, c-format + msgid " a SIGNAL name on line %d" + msgstr "" + + #: ch/tasking.c:1956 + msgid "BUFFER in RECEIVE CASE alternative must be a location" + msgstr "" + + #: ch/tasking.c:1962 + msgid "buffer receive alternative requires only 1 defining occurrence" + msgstr "" + + #: ch/tasking.c:2043 + #, fuzzy + msgid "incompatible modes in receive buffer alternative" + msgstr "incompatibele types bij %s" + + #: ch/tasking.c:2049 + msgid "defining occurrence in receive buffer alternative must be a location" + msgstr "" + + #: ch/tasking.c:2086 + msgid "buffer receive alternative without `IN location'" + msgstr "" + + #: ch/tasking.c:2092 + msgid "RECEIVE CASE alternative must specify a SIGNAL name or BUFFER location" + msgstr "" + + #: ch/tasking.c:2331 + msgid "RECEIVE CASE without alternatives" + msgstr "" + + #: ch/tasking.c:2369 + #, fuzzy + msgid "CONTINUE requires an event location" + msgstr "Een -ifile optie heeft een -map optie nodig" + + #: ch/tasking.c:2503 ch/tasking.c:2939 + #, fuzzy + msgid "PRIORITY must be of integer type" + msgstr "argument van `%s' moet van een integraal type zijn." + + #: ch/tasking.c:2581 + #, fuzzy + msgid "delay alternative must be an EVENT location" + msgstr "parameter 2 moet een locatie zijn" + + #: ch/tasking.c:2636 + msgid "DELAY CASE without alternatives" + msgstr "" + + #: ch/tasking.c:2756 + #, fuzzy + msgid "DELAY action requires an event location" + msgstr "Een -ifile optie heeft een -map optie nodig" + + #: ch/tasking.c:2767 + #, fuzzy + msgid "PRIORITY in DELAY action must be of integer type" + msgstr "argument van `%s' moet van een integraal type zijn." + + #: ch/tasking.c:2776 + msgid "DELAY action without priority." + msgstr "" + + #: ch/tasking.c:2867 + #, fuzzy + msgid "send buffer action requires a BUFFER location" + msgstr "Een -ifile optie heeft een -map optie nodig" + + #: ch/tasking.c:2884 + #, fuzzy + msgid "there must be only 1 value for send buffer action" + msgstr "incompatibele types bij %s" + + #: ch/tasking.c:2905 + #, fuzzy + msgid "convert failed for send buffer action" + msgstr "incompatibele types bij %s" + + #: ch/tasking.c:2911 + #, fuzzy + msgid "incompatible modes in send buffer action" + msgstr "incompatibele types bij %s" + + #: ch/tasking.c:2926 + msgid "buffer sent without priority" + msgstr "" + + #: ch/tasking.c:2945 + #, fuzzy + msgid "WITH not allowed for send buffer action" + msgstr "incompatibele types bij %s" + + #: ch/tasking.c:2950 + #, fuzzy + msgid "TO not allowed for send buffer action" + msgstr "incompatibele types bij %s" + + #: ch/tasking.c:3093 + #, c-format + msgid "SEND requires a BUFFER; `%s' is not a BUFFER name" + msgstr "" + + #: ch/tasking.c:3234 + msgid "non-integral max queue size for EVENT/BUFFER mode" + msgstr "" + + #: ch/tasking.c:3239 + msgid "non-constant max queue size for EVENT/BUFFER mode" + msgstr "" + + #: ch/tasking.c:3246 + msgid "max queue_size for EVENT/BUFFER is not positive" + msgstr "" + + #: ch/timing.c:224 + msgid "absolute time value must be of mode TIME" + msgstr "" + + #: ch/timing.c:281 ch/timing.c:364 + msgid "duration primitive value must be of mode DURATION" + msgstr "" + + #: ch/tree.c:58 + msgid "string length > UPPER (UINT)" + msgstr "" + + #: ch/tree.c:112 + #, fuzzy + msgid "can only build a powerset from a discrete mode" + msgstr "array subscript is geen integer" + + #: ch/tree.c:124 + #, fuzzy + msgid "non-constant bitstring size invalid" + msgstr "niet-constante array-index in beginwaarde" + + #: ch/tree.c:126 + #, fuzzy + msgid "non-constant powerset size invalid" + msgstr "niet-constante array-index in beginwaarde" + + #: ch/typeck.c:83 + msgid "array or string index is a mode (instead of a value)" + msgstr "" + + #: ch/typeck.c:114 + #, fuzzy + msgid "index is not an integer expression" + msgstr "ongeldig gebruik van een void-expressie" + + #: ch/typeck.c:122 + #, fuzzy + msgid "index not compatible with index mode" + msgstr "incompatibele types bij %s" + + #. should never happen + #: ch/typeck.c:132 + #, fuzzy + msgid "index is not discrete" + msgstr "-pipe wordt niet ondersteund" + + #: ch/typeck.c:196 + msgid "possible internal error - slice argument is neither referable nor constant" + msgstr "" + + #: ch/typeck.c:285 + msgid "bit array slice with non-constant length" + msgstr "" + + #: ch/typeck.c:325 + msgid "bitstring slice with non-constant length" + msgstr "" + + #: ch/typeck.c:338 + msgid "slice operation on non-array, non-bitstring value not supported" + msgstr "" + + #: ch/typeck.c:390 ch/typeck.c:441 + msgid "can only take slice of array or string" + msgstr "" + + #: ch/typeck.c:455 + #, fuzzy + msgid "slice length is not an integer" + msgstr "switch-waarde is geen integer" + + #: ch/typeck.c:488 + #, fuzzy + msgid "slice length out-of-range" + msgstr "case-waarde buiten bereik" + + #: ch/typeck.c:543 + #, fuzzy + msgid "too many index expressions" + msgstr "Ongeldig token in expressie" + + #: ch/typeck.c:595 + #, fuzzy + msgid "array index is not discrete" + msgstr "array-index in beginwaarde van niet-array" + + #: ch/typeck.c:675 + #, fuzzy + msgid "invalid compound index for bitstring mode" + msgstr "ongeldige beginwaarde voor bit-string" + + #: ch/typeck.c:1079 + msgid "conversions from variable_size value" + msgstr "" + + #: ch/typeck.c:1084 + msgid "conversions to variable_size mode" + msgstr "" + + #: ch/typeck.c:1098 + msgid "cannot convert to float" + msgstr "" + + #: ch/typeck.c:1103 + msgid "cannot convert float to this mode" + msgstr "" + + #: ch/typeck.c:1130 + msgid "OVERFLOW in expression conversion" + msgstr "" + + #: ch/typeck.c:1159 + msgid "overflow (not inside function)" + msgstr "" + + #: ch/typeck.c:1161 + #, fuzzy + msgid "possible overflow (not inside function)" + msgstr "`%s' is hier niet gedeclareerd (niet in een functie)" + + #: ch/typeck.c:1166 + msgid "expression will always cause OVERFLOW" + msgstr "" + + #: ch/typeck.c:1199 + msgid "not implemented: constant conversion from that kind of expression" + msgstr "" + + #: ch/typeck.c:1205 + msgid "not implemented: constant conversion to that kind of mode" + msgstr "" + + #: ch/typeck.c:1216 + msgid "non-standard, non-portable value conversion" + msgstr "" + + #: ch/typeck.c:1222 + msgid "location conversion between differently-sized modes" + msgstr "" + + #: ch/typeck.c:1224 + #, fuzzy + msgid "unsupported value conversion" + msgstr "niet-ondersteunde versie" + + #: ch/typeck.c:1272 + msgid "operand to bin must be a non-negative integer literal" + msgstr "" + + #: ch/typeck.c:1288 + #, c-format + msgid "size %d of BIN too big - no such integer mode" + msgstr "" + + #: ch/typeck.c:1302 + msgid "BIN in pass 2" + msgstr "" + + #: ch/typeck.c:1335 + msgid "mode of tuple is neither ARRAY, STRUCT, nor POWERSET" + msgstr "" + + #: ch/typeck.c:2108 + msgid "internal error in chill_root_resulting_mode" + msgstr "" + + #: ch/typeck.c:2367 + msgid "string lengths not equal" + msgstr "" + + #: ch/typeck.c:2382 + msgid "can't do ARRAY assignment - too large" + msgstr "" + + #: ch/typeck.c:2400 + msgid "rhs of array assignment is not addressable" + msgstr "" + + #: ch/typeck.c:2577 + #, fuzzy + msgid "non-constant expression for BIN" + msgstr "overflow in constante expressie" + + #: ch/typeck.c:2582 + msgid "expression for BIN must not be negative" + msgstr "" + + #: ch/typeck.c:2587 + msgid "cannot process BIN (>32)" + msgstr "" + + #: ch/typeck.c:2603 + #, fuzzy + msgid "bounds of range are not compatible" + msgstr "-pg en -fomit-frame-pointer zijn niet compatibel" + + #: ch/typeck.c:2612 + #, fuzzy + msgid "negative string length" + msgstr "Onbeëindigde stringconstante" + + #: ch/typeck.c:2649 + #, fuzzy + msgid "range's lower bound and parent mode don't match" + msgstr "prototype voor `%s' volgt en argument %d komt niet overeen" + + #: ch/typeck.c:2654 + msgid "range's upper bound and parent mode don't match" + msgstr "" + + #: ch/typeck.c:2663 + msgid "making range from non-mode" + msgstr "" + + #: ch/typeck.c:2669 + #, fuzzy + msgid "floating point ranges" + msgstr "floating-point constante buiten bereik" + + #: ch/typeck.c:2677 + msgid "range mode has non-constant limits" + msgstr "" + + #: ch/typeck.c:2686 + msgid "range's high bound < mode's low bound" + msgstr "" + + #: ch/typeck.c:2691 + msgid "range's high bound > mode's high bound" + msgstr "" + + #: ch/typeck.c:2696 + msgid "range mode high bound < range mode low bound" + msgstr "" + + #: ch/typeck.c:2701 + msgid "range's low bound < mode's low bound" + msgstr "" + + #: ch/typeck.c:2706 + msgid "range's low bound > mode's high bound" + msgstr "" + + # `l'en of `l's? + #: ch/typeck.c:2814 + #, fuzzy + msgid "stepsize in STEP must be an integer constant" + msgstr "drie `l'en in integerconstante" + + # `l'en of `l's? + #: ch/typeck.c:2818 + #, fuzzy + msgid "stepsize in STEP must be > 0" + msgstr "drie `l'en in integerconstante" + + # `l'en of `l's? + #: ch/typeck.c:2824 + #, fuzzy + msgid "stepsize in STEP must be the natural width of the array element mode" + msgstr "drie `l'en in integerconstante" + + #: ch/typeck.c:2830 ch/typeck.c:3131 + #, fuzzy + msgid "starting word in POS must be an integer constant" + msgstr "twee `u's in integerconstante" + + #: ch/typeck.c:2834 ch/typeck.c:3138 + #, fuzzy + msgid "starting word in POS must be >= 0" + msgstr "twee `u's in integerconstante" + + #: ch/typeck.c:2836 + #, fuzzy + msgid "starting word in POS within STEP must be 0" + msgstr "twee `u's in integerconstante" + + #: ch/typeck.c:2848 ch/typeck.c:3155 + #, fuzzy + msgid "starting bit in POS must be an integer constant" + msgstr "breedte van bitveld `%s' is geen integerconstante" + + #: ch/typeck.c:2854 + #, fuzzy + msgid "starting bit in POS within STEP must be 0" + msgstr "breedte van bitveld `%s' is geen integerconstante" + + #: ch/typeck.c:2858 ch/typeck.c:3163 + #, fuzzy + msgid "starting bit in POS must be >= 0" + msgstr "breedte van bitveld `%s' is geen integerconstante" + + #: ch/typeck.c:2866 ch/typeck.c:3171 + #, fuzzy + msgid "starting bit in POS must be < the width of a word" + msgstr "breedte van bitveld `%s' is geen integerconstante" + + #: ch/typeck.c:2880 ch/typeck.c:3185 + #, fuzzy + msgid "length in POS must be an integer constant" + msgstr "twee `u's in integerconstante" + + #: ch/typeck.c:2887 ch/typeck.c:3192 + #, fuzzy + msgid "length in POS must be > 0" + msgstr "twee `u's in integerconstante" + + #: ch/typeck.c:2894 ch/typeck.c:3205 + #, fuzzy + msgid "end bit in POS must be an integer constant" + msgstr "twee `u's in integerconstante" + + #: ch/typeck.c:2903 ch/typeck.c:3214 + #, fuzzy + msgid "end bit in POS must be >= the start bit" + msgstr "twee `u's in integerconstante" + + #: ch/typeck.c:2909 ch/typeck.c:3219 + #, fuzzy + msgid "end bit in POS must be < the width of a word" + msgstr "twee `u's in integerconstante" + + #: ch/typeck.c:2921 + msgid "the length specified on POS within STEP must be the natural length of the array element type" + msgstr "" + + # `l'en of `l's? + #: ch/typeck.c:2926 + #, fuzzy + msgid "step size in STEP must be >= the length in POS" + msgstr "drie `l'en in integerconstante" + + #: ch/typeck.c:2952 + #, fuzzy + msgid "array index must be a range, not a single integer" + msgstr "array subscript is geen integer" + + #: ch/typeck.c:2958 + #, fuzzy + msgid "array index is not a discrete mode" + msgstr "array subscript is geen integer" + + #: ch/typeck.c:3229 + msgid "the length specified on POS must be the natural length of the field type" + msgstr "" + + #: ch/typeck.c:3238 + msgid "STRUCT fields must be layed out in monotonically increasing order" + msgstr "" + + #: ch/typeck.c:3301 + msgid "if one field has a POS layout, then all fields must have a POS layout" + msgstr "" + + #: ch/typeck.c:3444 + #, fuzzy + msgid "parameterized structures not implemented" + msgstr "parameter wijst naar een onvolledig type" + + #: ch/typeck.c:3449 + #, fuzzy + msgid "invalid parameterized type" + msgstr "ongeldige operand voor %p-code" + + #: cp/call.c:270 cp/init.c:1637 + msgid "qualified type `%T' does not match destructor name `~%T'" + msgstr "" + + #: cp/call.c:279 + msgid "type of `%E' does not match destructor type `%T' (type was `%T')" + msgstr "" + + #: cp/call.c:288 + msgid "`%D' is a namespace" + msgstr "" + + #: cp/call.c:296 + msgid "base object `%E' of scoped method call is of non-aggregate type `%T'" + msgstr "" + + #: cp/call.c:394 + msgid "unable to call pointer to member function here" + msgstr "" + + #: cp/call.c:527 + msgid "destructors take no parameters" + msgstr "" + + #: cp/call.c:534 + msgid "destructor name `~%T' does not match type `%T' of expression" + msgstr "" + + #: cp/call.c:2343 + msgid "%s %D(%T, %T, %T) " + msgstr "" + + #: cp/call.c:2348 + msgid "%s %D(%T, %T) " + msgstr "" + + #: cp/call.c:2352 + msgid "%s %D(%T) " + msgstr "" + + #: cp/call.c:2356 + msgid "%s %T " + msgstr "" + + #: cp/call.c:2358 + msgid "%s %+#D%s" + msgstr "" + + #: cp/call.c:2515 + msgid "no viable candidates" + msgstr "" + + #: cp/call.c:2529 + msgid "conversion from `%T' to `%T' is ambiguous" + msgstr "" + + #: cp/call.c:2646 + #, fuzzy + msgid "no matching function for call to `%D(%A)'" + msgstr "Teveel argumenten in oproep van `%s'" + + #: cp/call.c:2657 cp/call.c:4642 + msgid "call of overloaded `%D(%A)' is ambiguous" + msgstr "" + + #. It's no good looking for an overloaded operator() on a + #. pointer-to-member-function. + #: cp/call.c:2684 + #, c-format + msgid "pointer-to-member function %E cannot be called without an object; consider using .* or ->*" + msgstr "" + + #: cp/call.c:2753 + msgid "no match for call to `(%T) (%A)'" + msgstr "" + + #: cp/call.c:2763 + msgid "call of `(%T) (%A)' is ambiguous" + msgstr "" + + #: cp/call.c:2798 + msgid "%s for `%T ? %T : %T' operator" + msgstr "" + + #: cp/call.c:2803 + msgid "%s for `%T %s' operator" + msgstr "" + + #: cp/call.c:2806 + msgid "%s for `%T [%T]' operator" + msgstr "" + + #: cp/call.c:2811 + msgid "%s for `%T %s %T' operator" + msgstr "" + + #: cp/call.c:2814 + msgid "%s for `%s %T' operator" + msgstr "" + + #: cp/call.c:2906 + #, fuzzy + msgid "ISO C++ forbids omitting the middle term of a ?: expression" + msgstr "ANSI C verbiedt het weglaten van de middelste term van een ?: expresie" + + #: cp/call.c:2965 + #, c-format + msgid "`%E' has type `void' and is not a throw-expression" + msgstr "" + + #: cp/call.c:2998 cp/call.c:3198 + msgid "operands to ?: have different types" + msgstr "" + + #: cp/call.c:3151 + #, fuzzy + msgid "enumeral mismatch in conditional expression: `%T' vs `%T'" + msgstr "types in voorwaardelijke expressie komen niet overeen" + + #: cp/call.c:3158 + msgid "enumeral and non-enumeral type in conditional expression" + msgstr "" + + #: cp/call.c:3239 + #, fuzzy + msgid "`%D' must be declared before use" + msgstr "`%s' mag niet als alleen-lezen gedeclareerd worden" + + #: cp/call.c:3402 + msgid "no `%D(int)' declared for postfix `%s', trying prefix operator instead" + msgstr "" + + #: cp/call.c:3449 + msgid "using synthesized `%#D' for copy assignment" + msgstr "" + + #: cp/call.c:3451 + msgid " where cfront would use `%#D'" + msgstr "" + + #: cp/call.c:3478 + #, fuzzy + msgid "comparison between `%#T' and `%#T'" + msgstr "vergelijking tussen signed en unsigned" + + #: cp/call.c:3711 + msgid "no suitable `operator delete' for `%T'" + msgstr "" + + #: cp/call.c:3730 + msgid "`%+#D' is private" + msgstr "" + + #: cp/call.c:3732 + #, fuzzy + msgid "`%+#D' is protected" + msgstr "`%.*s' is niet gedefinieerd" + + #: cp/call.c:3734 + #, fuzzy + msgid "`%+#D' is inaccessible" + msgstr "%s is niet addresseerbaar" + + #: cp/call.c:3735 + msgid "within this context" + msgstr "" + + #: cp/call.c:3777 + #, fuzzy + msgid "invalid conversion from `%T' to `%T'" + msgstr "ongeldige registernaam voor `%s'" + + # Is the %s the argument, or is it 'of' the argument? + #: cp/call.c:3779 cp/call.c:3918 cp/call.c:3920 + #, fuzzy + msgid " initializing argument %P of `%D'" + msgstr "ongeldig type-argument `%s'" + + #: cp/call.c:3842 cp/call.c:3846 + msgid " initializing argument %P of `%D' from result of `%D'" + msgstr "" + + #: cp/call.c:3852 cp/call.c:3855 + msgid " initializing temporary from result of `%D'" + msgstr "" + + #. Undefined behaviour [expr.call] 5.2.2/7. + #: cp/call.c:3989 + msgid "cannot pass objects of non-POD type `%#T' through `...'" + msgstr "" + + #. Undefined behaviour [expr.call] 5.2.2/7. + #: cp/call.c:4014 + msgid "cannot receive objects of non-POD type `%#T' through `...'" + msgstr "" + + #: cp/call.c:4156 + msgid "passing `%T' as `this' argument of `%#D' discards qualifiers" + msgstr "" + + #: cp/call.c:4404 + msgid "could not find class$ field in java interface type `%T'" + msgstr "" + + #: cp/call.c:4505 cp/typeck.c:2071 + msgid "request for member `%D' in `%E', which is of non-aggregate type `%T'" + msgstr "" + + #: cp/call.c:4631 + msgid "no matching function for call to `%T::%D(%A)%#V'" + msgstr "" + + #: cp/call.c:4655 + msgid "abstract virtual `%#D' called from constructor" + msgstr "" + + #: cp/call.c:4656 + msgid "abstract virtual `%#D' called from destructor" + msgstr "" + + #: cp/call.c:4661 + msgid "cannot call member function `%D' without object" + msgstr "" + + #: cp/call.c:5274 + msgid "passing `%T' chooses `%T' over `%T'" + msgstr "" + + #: cp/call.c:5276 cp/decl2.c:4496 + #, fuzzy + msgid " in call to `%D'" + msgstr "kan oproep van `%s' niet inline maken" + + #: cp/call.c:5325 cp/call.c:5450 + msgid "choosing `%D' over `%D'" + msgstr "" + + #: cp/call.c:5326 + msgid " for conversion from `%T' to `%T'" + msgstr "" + + #: cp/call.c:5328 + msgid " because conversion sequence for the argument is better" + msgstr "" + + #: cp/call.c:5452 + msgid " because worst conversion for the former is better than worst conversion for the latter" + msgstr "" + + # 'regio' klinkt niet echt, maar 'streek' lijkt me nog slechter + #: cp/call.c:5568 cp/call.c:5589 + #, fuzzy + msgid "could not convert `%E' to `%T'" + msgstr "kon 0x%l.8x niet naar een regio omzetten" + + #: cp/class.c:286 + msgid "cannot convert from base `%T' to derived type `%T' via virtual base `%T'" + msgstr "" + + #: cp/class.c:1012 + msgid "`%#D' and `%#D' cannot be overloaded" + msgstr "" + + #. There has already been a declaration of this method + #. or member template. + #: cp/class.c:1023 + msgid "`%D' has already been declared in `%T'" + msgstr "" + + #: cp/class.c:1104 + #, fuzzy + msgid "duplicate enum value `%D'" + msgstr "herhaalde case-waarde" + + #: cp/class.c:1107 + msgid "duplicate field `%D' (as enum and non-enum)" + msgstr "" + + #: cp/class.c:1114 + #, fuzzy + msgid "duplicate nested type `%D'" + msgstr "herhaald lid `%s'" + + #: cp/class.c:1125 + msgid "duplicate field `%D' (as type and non-type)" + msgstr "" + + #: cp/class.c:1129 + #, fuzzy + msgid "duplicate member `%D'" + msgstr "herhaald lid `%s'" + + #: cp/class.c:1172 + msgid "conflicting access specifications for method `%D', ignored" + msgstr "" + + #: cp/class.c:1174 + #, c-format + msgid "conflicting access specifications for field `%s', ignored" + msgstr "" + + #: cp/class.c:1217 + msgid "`%D' names constructor" + msgstr "" + + #: cp/class.c:1223 + #, fuzzy + msgid "`%D' invalid in `%T'" + msgstr "Ongeldige optie `%s'" + + #: cp/class.c:1231 + msgid "no members matching `%D' in `%#T'" + msgstr "" + + #: cp/class.c:1263 cp/class.c:1271 + #, fuzzy + msgid "`%D' invalid in `%#T'" + msgstr "Ongeldige optie `%s'" + + #: cp/class.c:1264 + msgid " because of local method `%#D' with same name" + msgstr "" + + #: cp/class.c:1272 + msgid " because of local member `%#D' with same name" + msgstr "" + + #: cp/class.c:1344 + msgid "base class `%#T' has a non-virtual destructor" + msgstr "" + + #: cp/class.c:1364 + msgid "base `%T' with only non-default constructor in class without a constructor" + msgstr "" + + #: cp/class.c:1950 + msgid "all member functions in class `%T' are private" + msgstr "" + + #: cp/class.c:1964 + msgid "`%#T' only defines a private destructor and has no friends" + msgstr "" + + #: cp/class.c:2007 + msgid "`%#T' only defines private constructors and has no friends" + msgstr "" + + #: cp/class.c:2128 cp/class.c:5045 + #, fuzzy + msgid "redefinition of `%#T'" + msgstr "herdefinitie van `%s'" + + #: cp/class.c:2129 + #, fuzzy + msgid "previous definition of `%#T'" + msgstr "eerdere definitie van `%s'" + + #: cp/class.c:2459 + msgid "no unique final overrider for `%D' in `%T'" + msgstr "" + + #. Here we know it is a hider, and no overrider exists. + #: cp/class.c:2841 + msgid "`%D' was hidden" + msgstr "" + + #: cp/class.c:2842 + #, fuzzy + msgid " by `%D'" + msgstr "%s voor `%s'" + + #: cp/class.c:2884 + msgid "ISO C++ forbids member `%D' with same name as enclosing class" + msgstr "" + + #: cp/class.c:2889 cp/decl2.c:1898 + msgid "`%#D' invalid; an anonymous union can only have non-static data members" + msgstr "" + + #: cp/class.c:2895 cp/decl2.c:1904 + msgid "private member `%#D' in anonymous union" + msgstr "" + + #: cp/class.c:2898 cp/decl2.c:1906 + msgid "protected member `%#D' in anonymous union" + msgstr "" + + #: cp/class.c:3050 + #, fuzzy + msgid "bit-field `%#D' with non-integral type" + msgstr "breedte van bitveld `%s' is geen integerconstante" + + #: cp/class.c:3070 + #, fuzzy + msgid "bit-field `%D' width not an integer constant" + msgstr "breedte van bitveld `%s' is geen integerconstante" + + #: cp/class.c:3076 + #, fuzzy + msgid "negative width in bit-field `%D'" + msgstr "bitveld `%s' heeft een negatieve breedte" + + #: cp/class.c:3081 + #, fuzzy + msgid "zero width for bit-field `%D'" + msgstr "bitveld `%s' heeft breedte 0" + + #: cp/class.c:3087 + #, fuzzy + msgid "width of `%D' exceeds its type" + msgstr "breedte van `%s' overschrijdt zijn type" + + #: cp/class.c:3096 + msgid "`%D' is too small to hold all values of `%#T'" + msgstr "" + + #: cp/class.c:3179 + msgid "member `%#D' with constructor not allowed in union" + msgstr "" + + #: cp/class.c:3182 + msgid "member `%#D' with destructor not allowed in union" + msgstr "" + + #: cp/class.c:3185 + msgid "member `%#D' with copy assignment operator not allowed in union" + msgstr "" + + #: cp/class.c:3212 + #, fuzzy + msgid "multiple fields in union `%T' initialized" + msgstr "overtollige elementen in beginwaarde van union" + + #: cp/class.c:3333 + msgid "field `%D' in local class cannot be static" + msgstr "" + + #: cp/class.c:3339 + #, fuzzy + msgid "field `%D' invalidly declared function type" + msgstr "veld `%s' als een functie gedeclareerd" + + #: cp/class.c:3346 + #, fuzzy + msgid "field `%D' invalidly declared method type" + msgstr "bitveld `%s' heeft een ongeldig type" + + #: cp/class.c:3352 + #, fuzzy + msgid "field `%D' invalidly declared offset type" + msgstr "bitveld `%s' heeft een ongeldig type" + + #. Unions cannot have static members. + #: cp/class.c:3370 + #, fuzzy + msgid "field `%D' declared static in union" + msgstr "veld `%s' als een functie gedeclareerd" + + #: cp/class.c:3396 + msgid "non-static reference `%#D' in class without a constructor" + msgstr "" + + #: cp/class.c:3427 + msgid "non-static const member `%#D' in class without a constructor" + msgstr "" + + #: cp/class.c:3442 + msgid "field `%#D' with same name as class" + msgstr "" + + #: cp/class.c:3460 + #, fuzzy + msgid "`%#T' has pointer data members" + msgstr "%s heeft geen benoemde leden" + + #: cp/class.c:3464 + msgid " but does not override `%T(const %T&)'" + msgstr "" + + #: cp/class.c:3466 + msgid " or `operator=(const %T&)'" + msgstr "" + + #: cp/class.c:3469 + msgid " but does not override `operator=(const %T&)'" + msgstr "" + + #: cp/class.c:3937 + #, fuzzy + msgid "initializer specified for non-virtual method `%D'" + msgstr "geen beginwaarde voor variant-veld `%s'" + + #: cp/class.c:4721 + msgid "virtual base `%T' inaccessible in `%T' due to ambiguity" + msgstr "" + + #: cp/class.c:4791 + msgid "direct base `%T' inaccessible in `%T' due to ambiguity" + msgstr "" + + #: cp/class.c:5208 + msgid "`%#T' has virtual functions but non-virtual destructor" + msgstr "" + + #: cp/class.c:5292 + msgid "trying to finish struct, but kicked out due to previous parse errors" + msgstr "" + + #: cp/class.c:5749 + #, c-format + msgid "language string `\"%s\"' not recognized" + msgstr "" + + #: cp/class.c:5845 + msgid "cannot resolve overloaded function `%D' based on conversion to type `%T'" + msgstr "" + + #: cp/class.c:5966 + msgid "no matches converting function `%D' to type `%#T'" + msgstr "" + + #: cp/class.c:5989 + msgid "converting overloaded function `%D' to type `%#T' is ambiguous" + msgstr "" + + #: cp/class.c:6015 + #, fuzzy + msgid "assuming pointer to member `%D'" + msgstr "herhaald lid `%s'" + + #: cp/class.c:6018 + #, c-format + msgid "(a pointer to member can only be formed with `&%E')" + msgstr "" + + #: cp/class.c:6062 cp/class.c:6230 cp/class.c:6237 + msgid "not enough type information" + msgstr "" + + #: cp/class.c:6071 + #, fuzzy + msgid "argument of type `%T' does not match `%T'" + msgstr "argument `%s' komt niet overeen met prototype" + + #: cp/class.c:6214 + msgid "invalid operation on uninstantiated type" + msgstr "" + + #. [basic.scope.class] + #. + #. A name N used in a class S shall refer to the same declaration + #. in its context and when re-evaluated in the completed scope of + #. S. + #: cp/class.c:6465 cp/decl.c:1030 cp/decl.c:3178 cp/pt.c:1839 + #, fuzzy + msgid "declaration of `%#D'" + msgstr "herdeclaratie van `%s'" + + #: cp/class.c:6466 + msgid "changes meaning of `%D' from `%+#D'" + msgstr "" + + #: cp/cvt.c:88 + msgid "can't convert from incomplete type `%T' to `%T'" + msgstr "" + + #: cp/cvt.c:97 + msgid "conversion of `%E' from `%T' to `%T' is ambiguous" + msgstr "" + + #: cp/cvt.c:126 + msgid "converting from `%T' to `%T'" + msgstr "" + + #: cp/cvt.c:198 cp/cvt.c:202 + msgid "pointer to member cast from `%T' to `%T' is via virtual base" + msgstr "" + + #: cp/cvt.c:220 cp/cvt.c:233 cp/cvt.c:272 + msgid "cannot convert `%E' from type `%T' to type `%T'" + msgstr "" + + #: cp/cvt.c:525 + msgid "conversion from `%T' to `%T' discards qualifiers" + msgstr "" + + #: cp/cvt.c:543 + #, fuzzy + msgid "casting `%T' to `%T' does not dereference pointer" + msgstr "kan niet derefereren, is geen pointer." + + #: cp/cvt.c:572 + msgid "cannot convert type `%T' to type `%T'" + msgstr "" + + #: cp/cvt.c:689 + msgid "conversion from `%#T' to `%#T'" + msgstr "" + + #: cp/cvt.c:701 + msgid "`%#T' used where a `%T' was expected" + msgstr "" + + #: cp/cvt.c:718 + msgid "the address of `%D', will always be `true'" + msgstr "" + + #: cp/cvt.c:738 + msgid "`%#T' used where a floating point value was expected" + msgstr "" + + #: cp/cvt.c:793 + #, fuzzy + msgid "conversion from `%T' to non-scalar type `%T' requested" + msgstr "conversie naar niet-scalair type gevraagd" + + #: cp/cvt.c:878 + msgid "object of incomplete type `%T' will not be accessed in %s" + msgstr "" + + #: cp/cvt.c:881 + msgid "object of type `%T' will not be accessed in %s" + msgstr "" + + #: cp/cvt.c:897 + msgid "object `%E' of incomplete type `%T' will not be accessed in %s" + msgstr "" + + #. [over.over] enumerates the places where we can take the address + #. of an overloaded function, and this is not one of them. + #: cp/cvt.c:917 + #, fuzzy, c-format + msgid "%s cannot resolve address of overloaded function" + msgstr "einde van niet-void functie werd bereikt zonder teruggeefwaarde" + + #. Only warn when there is no &. + #: cp/cvt.c:922 + #, c-format + msgid "%s is a reference, not call, to function `%E'" + msgstr "" + + #: cp/cvt.c:1060 + msgid "converting NULL to non-pointer type" + msgstr "" + + #: cp/cvt.c:1136 + msgid "ambiguous default type conversion from `%T'" + msgstr "" + + #: cp/cvt.c:1138 + msgid " candidate conversions include `%D' and `%D'" + msgstr "" + + #: cp/decl.c:1031 cp/decl.c:3278 + #, fuzzy + msgid "conflicts with previous declaration `%#D'" + msgstr "sectie van `%s' geeft een conflict met een eerdere declaratie" + + #: cp/decl.c:1220 + #, fuzzy + msgid "label `%D' used but not defined" + msgstr "label `%s' gebruikt maar niet gedefinieerd" + + #: cp/decl.c:1225 + #, fuzzy + msgid "label `%D' defined but not used" + msgstr "label `%s' gedefinieerd maar niet gebruikt" + + #: cp/decl.c:2305 + msgid "namespace alias `%D' not allowed here, assuming `%D'" + msgstr "" + + #: cp/decl.c:3088 cp/decl.c:3476 + #, fuzzy + msgid "previous declaration of `%D'" + msgstr "eerdere declaratie van `%s'" + + #: cp/decl.c:3165 cp/decl.c:3200 + #, fuzzy + msgid "shadowing %s function `%#D'" + msgstr "bibliotheekfunctie `%s' wordt verborgen" + + #: cp/decl.c:3174 + #, fuzzy + msgid "library function `%#D' redeclared as non-function `%#D'" + msgstr "bibliotheekfunctie `%s' als niet-functie gedeclareerd" + + #: cp/decl.c:3179 + #, fuzzy + msgid "conflicts with built-in declaration `%#D'" + msgstr "conflicterende declaraties van `%s'" + + #: cp/decl.c:3195 cp/decl.c:3288 cp/decl.c:3304 + #, fuzzy + msgid "new declaration `%#D'" + msgstr "herdeclaratie van `%s'" + + #: cp/decl.c:3196 + #, fuzzy + msgid "ambiguates built-in declaration `%#D'" + msgstr "herhaalde label-declaratie `%s'" + + #: cp/decl.c:3252 + #, fuzzy + msgid "`%#D' redeclared as different kind of symbol" + msgstr "`%s' als ander soort symbool geherdeclareerd" + + #: cp/decl.c:3255 + #, fuzzy + msgid "previous declaration of `%#D'" + msgstr "eerdere declaratie van `%s'" + + #: cp/decl.c:3277 + #, fuzzy + msgid "declaration of template `%#D'" + msgstr "herdeclaratie van `enum %s'" + + #: cp/decl.c:3289 cp/decl.c:3305 + #, fuzzy + msgid "ambiguates old declaration `%#D'" + msgstr "herhaalde label-declaratie `%s'" + + #: cp/decl.c:3297 + #, fuzzy + msgid "declaration of C function `%#D' conflicts with" + msgstr "impliciete declaratie van functie `%s'" + + #: cp/decl.c:3299 + #, fuzzy + msgid "previous declaration `%#D' here" + msgstr "eerdere declaratie van `%s'" + + #: cp/decl.c:3315 + #, fuzzy + msgid "conflicting types for `%#D'" + msgstr "conflicterende types voor `%s'" + + #: cp/decl.c:3316 + #, fuzzy + msgid "previous declaration as `%#D'" + msgstr "eerdere declaratie van `%s'" + + #: cp/decl.c:3359 + #, fuzzy + msgid "`%#D' previously defined here" + msgstr "`%s' tevoren hier gedefinieerd" + + #: cp/decl.c:3360 + #, fuzzy + msgid "`%#D' previously declared here" + msgstr "`%s' tevoren hier gedeclareerd" + + #. Prototype decl follows defn w/o prototype. + #: cp/decl.c:3368 + #, fuzzy + msgid "prototype for `%#D'" + msgstr "prototype voor `%s' volgt" + + #: cp/decl.c:3369 + #, fuzzy + msgid "follows non-prototype definition here" + msgstr "niet-prototype definitie hier" + + #: cp/decl.c:3381 + #, fuzzy + msgid "previous declaration of `%#D' with %L linkage" + msgstr "eerdere declaratie van `%s'" + + #: cp/decl.c:3383 + #, fuzzy + msgid "conflicts with new declaration with %L linkage" + msgstr "conflicterende declaraties van `%s'" + + #: cp/decl.c:3408 cp/decl.c:3416 + #, fuzzy + msgid "default argument given for parameter %d of `%#D'" + msgstr "argumenten aan macro `%s' gegeven" + + #: cp/decl.c:3410 cp/decl.c:3418 + #, fuzzy + msgid "after previous specification in `%#D'" + msgstr "eerdere definitie van `%s'" + + #: cp/decl.c:3427 + #, fuzzy + msgid "`%#D' was used before it was declared inline" + msgstr "`%s' werd voor haar definitie gebruikt zonder protoype" + + #: cp/decl.c:3429 + #, fuzzy + msgid "previous non-inline declaration here" + msgstr "eerdere impliciete declaratie van `%s'" + + #: cp/decl.c:3475 + #, fuzzy + msgid "redundant redeclaration of `%D' in same scope" + msgstr "overbodige herdeclaratie van `%s' in zelfde bereik" + + #: cp/decl.c:3558 + #, fuzzy + msgid "declaration of `%F' throws different exceptions" + msgstr "`%s' wordt gedeclareerd als een array van functies" + + #: cp/decl.c:3560 + #, fuzzy + msgid "than previous declaration `%F'" + msgstr "geen eerdere declaratie voor `%s'" + + #. From [temp.expl.spec]: + #. + #. If a template, a member template or the member of a class + #. template is explicitly specialized then that + #. specialization shall be declared before the first use of + #. that specialization that would cause an implicit + #. instantiation to take place, in every translation unit in + #. which such a use occurs. + #: cp/decl.c:3685 + msgid "explicit specialization of %D after first use" + msgstr "" + + #: cp/decl.c:3930 + #, fuzzy + msgid "`%#D' used prior to declaration" + msgstr "`%s' gebruikt vóór declaratie" + + #: cp/decl.c:3961 + #, fuzzy + msgid "redeclaration of `wchar_t' as `%T'" + msgstr "herdeclaratie van `%s'" + + #. A redeclaration of main, but not a duplicate of the + #. previous one. + #. + #. [basic.start.main] + #. + #. This function shall not be overloaded. + #: cp/decl.c:3989 + #, fuzzy + msgid "invalid redeclaration of `%D'" + msgstr "herdeclaratie van `%s'" + + #: cp/decl.c:3990 + #, fuzzy + msgid "as `%D'" + msgstr "%s voor `%s'" + + #: cp/decl.c:4080 + #, fuzzy + msgid "previous external decl of `%#D'" + msgstr "eerdere externe declaratie van `%s'" + + #: cp/decl.c:4121 + #, fuzzy + msgid "`%D' was previously implicitly declared to return `int'" + msgstr "`%s' was tevoren impliciet gedeclareerd om een `int' terug te geven" + + #: cp/decl.c:4181 + #, fuzzy + msgid "extern declaration of `%#D' doesn't match" + msgstr "externe declaratie van `%s' komt niet overeen met de globale declaratie" + + #: cp/decl.c:4182 + #, fuzzy + msgid "global declaration `%#D'" + msgstr "herhaalde label-declaratie `%s'" + + #: cp/decl.c:4213 + #, fuzzy + msgid "declaration of `%#D' shadows a parameter" + msgstr "de declaratie van `%s' verbergt een parameter" + + #: cp/decl.c:4233 + #, fuzzy, c-format + msgid "declaration of `%s' shadows a member of `this'" + msgstr "de declaratie van `%s' verbergt een parameter" + + #: cp/decl.c:4598 + msgid "`%#D' hides constructor for `%#T'" + msgstr "" + + #: cp/decl.c:4613 + #, fuzzy + msgid "`%#D' conflicts with previous using declaration `%#D'" + msgstr "sectie van `%s' geeft een conflict met een eerdere declaratie" + + #: cp/decl.c:4625 + #, fuzzy + msgid "previous non-function declaration `%#D'" + msgstr "eerdere declaratie van `%s'" + + #: cp/decl.c:4626 + #, fuzzy + msgid "conflicts with function declaration `%#D'" + msgstr "conflicterende declaraties van `%s'" + + #: cp/decl.c:4716 + #, fuzzy + msgid "implicit declaration of function `%#D'" + msgstr "impliciete declaratie van functie `%s'" + + #: cp/decl.c:4874 + #, c-format + msgid "label `%s' referenced outside of any function" + msgstr "" + + #: cp/decl.c:4977 cp/decl.c:5001 cp/decl.c:5094 + #, fuzzy + msgid "jump to label `%D'" + msgstr "herhaald label `%s'" + + #: cp/decl.c:4979 cp/decl.c:5003 + msgid "jump to case label" + msgstr "" + + #: cp/decl.c:4987 + #, fuzzy + msgid " crosses initialization of `%#D'" + msgstr "(dicht bij initialisatie van `%s')" + + #: cp/decl.c:4990 cp/decl.c:5110 + msgid " enters scope of non-POD `%#D'" + msgstr "" + + #: cp/decl.c:5010 cp/decl.c:5114 + msgid " enters try block" + msgstr "" + + #. Can't skip init of __exception_info. + #: cp/decl.c:5012 cp/decl.c:5106 cp/decl.c:5116 + msgid " enters catch block" + msgstr "" + + #: cp/decl.c:5095 + #, fuzzy + msgid " from here" + msgstr "van hieruit opgeroepen" + + #: cp/decl.c:5108 + #, fuzzy + msgid " skips initialization of `%#D'" + msgstr "(dicht bij initialisatie van `%s')" + + #: cp/decl.c:5143 + #, fuzzy + msgid "label named wchar_t" + msgstr "er is geen label dat `%s' heet" + + #: cp/decl.c:5147 + #, fuzzy + msgid "duplicate label `%D'" + msgstr "herhaald label `%s'" + + #: cp/decl.c:5232 + #, fuzzy, c-format + msgid "case label `%E' not within a switch statement" + msgstr "case-label niet in een switch-statement" + + #. Definition isn't the kind we were looking for. + #: cp/decl.c:5365 cp/decl.c:5385 + #, fuzzy + msgid "`%#D' redeclared as %C" + msgstr "`%s' tevoren hier gedeclareerd" + + #. This happens for A::B where B is a template, and there are no + #. template arguments. + #: cp/decl.c:5474 cp/typeck.c:2033 + #, fuzzy + msgid "invalid use of `%D'" + msgstr "ongeldig gebruik van `restrict'" + + #: cp/decl.c:5515 + #, fuzzy + msgid "`%D::%D' is not a template" + msgstr "`%s' is geen iterator" + + #: cp/decl.c:5527 + #, fuzzy + msgid "`%D' undeclared in namespace `%D'" + msgstr "ongeldige naam `%s'" + + #: cp/decl.c:5661 + #, fuzzy + msgid "`%D' used without template parameters" + msgstr "macro `%s' gebruikt zonder argumenten" + + #: cp/decl.c:5672 cp/decl.c:5688 cp/decl.c:5759 + msgid "no class template named `%#T' in `%#T'" + msgstr "" + + #: cp/decl.c:5706 cp/decl.c:5721 + msgid "no type named `%#T' in `%#T'" + msgstr "" + + #: cp/decl.c:5938 + msgid "lookup of `%D' finds `%#D'" + msgstr "" + + #: cp/decl.c:5940 + msgid " instead of `%D' from dependent base class" + msgstr "" + + #: cp/decl.c:5942 + msgid " (use `typename %T::%D' if that's what you meant)" + msgstr "" + + #: cp/decl.c:6115 + msgid "lookup of `%D' in the scope of `%#T' (`%#D') does not match lookup in the current scope (`%#D')" + msgstr "" + + #: cp/decl.c:6938 + msgid "an anonymous union cannot have function members" + msgstr "" + + #: cp/decl.c:6955 + msgid "member %#D' with constructor not allowed in anonymous aggregate" + msgstr "" + + #: cp/decl.c:6958 + msgid "member %#D' with destructor not allowed in anonymous aggregate" + msgstr "" + + #: cp/decl.c:6961 + msgid "member %#D' with copy assignment operator not allowed in anonymous aggregate" + msgstr "" + + #: cp/decl.c:6999 + #, fuzzy + msgid "redeclaration of C++ built-in type `%T'" + msgstr "herdeclaratie van `%s'" + + #: cp/decl.c:7034 + msgid "multiple types in one declaration" + msgstr "" + + #: cp/decl.c:7037 + msgid "declaration does not declare anything" + msgstr "" + + #: cp/decl.c:7061 + #, fuzzy + msgid "missing type-name in typedef-declaration" + msgstr "nutteloos sleutelwoord of typenaam in lege declaratie" + + #: cp/decl.c:7068 + msgid "ISO C++ prohibits anonymous structs" + msgstr "" + + #: cp/decl.c:7075 + #, fuzzy + msgid "`%D' can only be specified for functions" + msgstr "argument-formaat opgegeven voor niet-functie `%s'" + + #: cp/decl.c:7077 + msgid "`%D' can only be specified inside a class" + msgstr "" + + #: cp/decl.c:7079 + msgid "`%D' can only be specified for constructors" + msgstr "" + + #: cp/decl.c:7082 + #, fuzzy + msgid "`%D' can only be specified for objects and functions" + msgstr "argument-formaat opgegeven voor niet-functie `%s'" + + #: cp/decl.c:7226 + #, fuzzy + msgid "typedef `%D' is initialized" + msgstr "typedef `%s' krijgt beginwaarde" + + #: cp/decl.c:7232 + #, fuzzy + msgid "function `%#D' is initialized like a variable" + msgstr "typedef `%s' krijgt beginwaarde alsof het een variabele is" + + #: cp/decl.c:7244 + #, fuzzy + msgid "declaration of `%#D' has `extern' and is initialized" + msgstr "de declaratie van `%s' is `extern' en heeft een beginwaarde" + + #: cp/decl.c:7274 + #, fuzzy + msgid "`%#D' is not a static member of `%#T'" + msgstr "`%s' is geen static veld" + + #: cp/decl.c:7279 + msgid "ISO C++ does not permit `%T::%D' to be defined as `%T::%D'" + msgstr "" + + #: cp/decl.c:7290 + #, fuzzy + msgid "duplicate initialization of %D" + msgstr "dubbele beginwaarde" + + #: cp/decl.c:7319 + #, fuzzy + msgid "declaration of `%#D' outside of class is not definition" + msgstr "de zwakke declaratie van `%s' moet aan de definitie voorafgaan" + + #: cp/decl.c:7367 + #, fuzzy + msgid "variable `%#D' has initializer but incomplete type" + msgstr "variabele `%s' heeft beginwaarde, maar een onvolledig type" + + #: cp/decl.c:7375 cp/decl.c:7726 + #, fuzzy + msgid "elements of array `%#D' have incomplete type" + msgstr "elementen van array `%s' hebben een onvolledig type" + + #: cp/decl.c:7391 + #, fuzzy + msgid "aggregate `%#D' has incomplete type and cannot be initialized" + msgstr "parameter `%s' heeft een onvolledig type" + + #: cp/decl.c:7430 + #, fuzzy + msgid "`%D' declared as reference but not initialized" + msgstr "`%s' als ander soort symbool geherdeclareerd" + + #: cp/decl.c:7439 + msgid "ISO C++ forbids use of initializer list to initialize reference `%D'" + msgstr "" + + #: cp/decl.c:7472 + #, fuzzy + msgid "cannot initialize `%T' from `%T'" + msgstr "niet-constante beginwaarde voor `%s'" + + #: cp/decl.c:7533 + #, fuzzy + msgid "initializer fails to determine size of `%D'" + msgstr "beginwaarde legt grootte van `%s' niet vast" + + #: cp/decl.c:7538 + #, fuzzy + msgid "array size missing in `%D'" + msgstr "array-grootte ontbreekt in `%s'" + + #: cp/decl.c:7550 + #, fuzzy + msgid "zero-size array `%D'" + msgstr "array `%s' heeft grootte die negatief of 0 is" + + #. An automatic variable with an incomplete type: that is an error. + #. Don't talk about array types here, since we took care of that + #. message in grokdeclarator. + #: cp/decl.c:7583 + #, fuzzy + msgid "storage size of `%D' isn't known" + msgstr "opslaggrootte van `%s' is onbekend" + + #: cp/decl.c:7605 + #, fuzzy + msgid "storage size of `%D' isn't constant" + msgstr "opslaggrootte van `%s' is niet constant" + + #: cp/decl.c:7656 + msgid "sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)" + msgstr "" + + #: cp/decl.c:7657 + msgid " you can work around this by removing the initializer" + msgstr "" + + #: cp/decl.c:7685 + #, fuzzy + msgid "uninitialized const `%D'" + msgstr "niet-constante beginwaarde voor `%s'" + + #: cp/decl.c:7720 + #, fuzzy + msgid "variable-sized object `%D' may not be initialized" + msgstr "object van variabele lengte mag geen beginwaarde krijgen" + + #: cp/decl.c:7731 cp/typeck2.c:201 + #, fuzzy + msgid "`%D' has incomplete type" + msgstr "`%s' heeft een onvolledig type" + + #: cp/decl.c:7763 + msgid "`%D' must be initialized by constructor, not by `{...}'" + msgstr "" + + #: cp/decl.c:7793 + msgid "structure `%D' with uninitialized const members" + msgstr "" + + #: cp/decl.c:7795 + msgid "structure `%D' with uninitialized reference members" + msgstr "" + + #: cp/decl.c:8060 + msgid "assignment (not initialization) in declaration" + msgstr "" + + #: cp/decl.c:8070 + msgid "cannot initialize `%D' to namespace `%D'" + msgstr "" + + #: cp/decl.c:8127 + #, fuzzy + msgid "shadowing previous type declaration of `%#D'" + msgstr "eerdere declaratie van `%s'" + + #: cp/decl.c:8526 + #, fuzzy + msgid "multiple initializations given for `%D'" + msgstr "(dicht bij initialisatie van `%s')" + + #: cp/decl.c:8626 + msgid "invalid catch parameter" + msgstr "" + + #: cp/decl.c:8744 + msgid "destructor for alien class `%T' cannot be a member" + msgstr "" + + #: cp/decl.c:8747 + msgid "constructor for alien class `%T' cannot be a member" + msgstr "" + + #: cp/decl.c:8766 + msgid "`%D' declared as a `virtual' %s" + msgstr "" + + #: cp/decl.c:8768 + #, fuzzy + msgid "`%D' declared as an `inline' %s" + msgstr "variabele `%s' als inline gedeclareerd" + + #: cp/decl.c:8770 + msgid "`const' and `volatile' function specifiers on `%D' invalid in %s declaration" + msgstr "" + + #: cp/decl.c:8773 + #, fuzzy + msgid "`%D' declared as a friend" + msgstr "veld `%s' als een functie gedeclareerd" + + #: cp/decl.c:8779 + #, fuzzy + msgid "`%D' declared with an exception specification" + msgstr "`%s' gedeclareerd als een functie die een functie teruggeeft" + + #: cp/decl.c:8854 + msgid "cannot declare `::main' to be a template" + msgstr "" + + #: cp/decl.c:8856 + msgid "cannot declare `::main' to be inline" + msgstr "" + + #: cp/decl.c:8858 + msgid "cannot declare `::main' to be static" + msgstr "" + + #: cp/decl.c:8861 + msgid "`main' must return `int'" + msgstr "" + + #: cp/decl.c:8889 + msgid "non-local function `%#D' uses anonymous type" + msgstr "" + + #: cp/decl.c:8892 + msgid "`%#D' does not refer to the unqualified type, so it is not used for linkage" + msgstr "" + + #: cp/decl.c:8898 + msgid "non-local function `%#D' uses local type `%T'" + msgstr "" + + #: cp/decl.c:8921 + msgid "%smember function `%D' cannot have `%T' method qualifier" + msgstr "" + + #: cp/decl.c:8945 + msgid "defining explicit specialization `%D' in friend declaration" + msgstr "" + + #. Something like `template friend void f()'. + #: cp/decl.c:8955 + msgid "invalid use of template-id `%D' in declaration of primary template" + msgstr "" + + #: cp/decl.c:8983 + msgid "default arguments are not allowed in declaration of friend template specialization `%D'" + msgstr "" + + #: cp/decl.c:8990 + msgid "`inline' is not allowed in declaration of friend template specialization `%D'" + msgstr "" + + #: cp/decl.c:9052 + #, fuzzy + msgid "definition of implicitly-declared `%D'" + msgstr "functie-definitie als `auto' gedeclareerd" + + #: cp/decl.c:9064 cp/decl2.c:1384 + msgid "no `%#D' member function declared in class `%T'" + msgstr "" + + #: cp/decl.c:9183 + msgid "non-local variable `%#D' uses local type `%T'" + msgstr "" + + #: cp/decl.c:9273 + msgid "invalid in-class initialization of static data member of non-integral type `%T'" + msgstr "" + + #: cp/decl.c:9282 + msgid "ISO C++ forbids in-class initialization of non-const static member `%D'" + msgstr "" + + #: cp/decl.c:9285 + msgid "ISO C++ forbids initialization of member constant `%D' of non-integral type `%T'" + msgstr "" + + #: cp/decl.c:9335 + #, fuzzy + msgid "size of array `%D' has non-integer type" + msgstr "grootte van array `%s' is van een niet-integraal type" + + #: cp/decl.c:9337 + #, fuzzy + msgid "size of array has non-integer type" + msgstr "grootte van array `%s' is van een niet-integraal type" + + #: cp/decl.c:9357 + #, fuzzy + msgid "size of array `%D' is negative" + msgstr "grootte van array `%s' is negatief" + + #: cp/decl.c:9359 + #, fuzzy + msgid "size of array is negative" + msgstr "grootte van array `%s' is negatief" + + #: cp/decl.c:9368 + #, fuzzy + msgid "ISO C++ forbids zero-size array `%D'" + msgstr "ANSI C verbiedt array `%s' met lengte 0" + + #: cp/decl.c:9370 + #, fuzzy + msgid "ISO C++ forbids zero-size array" + msgstr "ANSI C verbiedt array `%s' met lengte 0" + + #: cp/decl.c:9377 + #, fuzzy + msgid "size of array `%D' is not an integral constant-expression" + msgstr "grootte van array `%s' is van een niet-integraal type" + + #: cp/decl.c:9380 + #, fuzzy + msgid "size of array is not an integral constant-expression" + msgstr "ongeldig gebruik van een void-expressie" + + #: cp/decl.c:9398 + #, fuzzy + msgid "ISO C++ forbids variable-size array `%D'" + msgstr "ANSI C verbiedt array `%s' van variabele lengte" + + #: cp/decl.c:9401 + #, fuzzy + msgid "ISO C++ forbids variable-size array" + msgstr "ANSI C verbiedt array `%s' van variabele lengte" + + #: cp/decl.c:9412 + msgid "overflow in array dimension" + msgstr "" + + #: cp/decl.c:9471 + #, fuzzy + msgid "declaration of `%D' as %s" + msgstr "herdeclaratie van `%s'" + + #: cp/decl.c:9473 + #, fuzzy, c-format + msgid "creating %s" + msgstr "read %s" + + #: cp/decl.c:9485 + msgid "declaration of `%D' as multidimensional array must have bounds for all dimensions except the first" + msgstr "" + + #: cp/decl.c:9488 + msgid "multidimensional array must have bounds for all dimensions except the first" + msgstr "" + + #: cp/decl.c:9517 + msgid "return type specification for constructor invalid" + msgstr "" + + #: cp/decl.c:9524 + msgid "return type specification for destructor invalid" + msgstr "" + + #: cp/decl.c:9530 + #, fuzzy + msgid "operator `%T' declared to return `%T'" + msgstr "parameter `%s' als void gedeclareerd" + + #: cp/decl.c:9532 + #, fuzzy + msgid "return type specified for `operator %T'" + msgstr "registernaam niet opgegeven voor `%s'" + + #: cp/decl.c:9702 + msgid "destructors must be member functions" + msgstr "" + + #: cp/decl.c:9721 + msgid "destructor `%T' must match class name `%T'" + msgstr "" + + #: cp/decl.c:9771 + #, fuzzy + msgid "invalid declarator" + msgstr "lege declaratie" + + #: cp/decl.c:9824 + msgid "declarator-id missing; using reserved word `%D'" + msgstr "" + + #: cp/decl.c:9868 + #, fuzzy + msgid "`%T::%D' is not a valid declarator" + msgstr "`%s' is geen iterator" + + #: cp/decl.c:9870 + msgid " perhaps you want `typename %T::%D' to make it a type" + msgstr "" + + #: cp/decl.c:9882 + #, fuzzy + msgid "type `%T' is not derived from type `%T'" + msgstr "iterator `%s' is van een afgeleid type" + + #. Parse error puts this typespec where + #. a declarator should go. + #: cp/decl.c:9928 + msgid "`%T' specified as declarator-id" + msgstr "" + + #: cp/decl.c:9930 + msgid " perhaps you want `%T' for a constructor" + msgstr "" + + #: cp/decl.c:9944 + #, fuzzy + msgid "`%D' as declarator" + msgstr "`%.*s' is niet gedefinieerd" + + #: cp/decl.c:9959 + #, fuzzy + msgid "declaration of `%D' as non-function" + msgstr "`%s' wordt gedeclareerd als een array van functies" + + #: cp/decl.c:10036 + msgid "`bool' is now a keyword" + msgstr "" + + #: cp/decl.c:10038 + msgid "extraneous `%T' ignored" + msgstr "" + + #: cp/decl.c:10054 cp/decl.c:10088 + #, fuzzy + msgid "multiple declarations `%T' and `%T'" + msgstr "meerdere parameters hebben de naam `%s'" + + #: cp/decl.c:10067 + #, fuzzy + msgid "ISO C++ does not support `long long'" + msgstr "ANSI C ondersteunt `long long' niet" + + #: cp/decl.c:10159 cp/decl.c:10162 + #, fuzzy, c-format + msgid "ISO C++ forbids declaration of `%s' with no type" + msgstr "ANSI C verbiedt lid-declaraties zonder leden" + + #. The implicit typename extension is deprecated and will be + #. removed. Warn about its use now. + #: cp/decl.c:10172 + msgid "`%T' is implicitly a typename" + msgstr "" + + #: cp/decl.c:10208 + #, c-format + msgid "short, signed or unsigned invalid for `%s'" + msgstr "" + + #: cp/decl.c:10213 + #, c-format + msgid "long and short specified together for `%s'" + msgstr "" + + #: cp/decl.c:10224 + #, c-format + msgid "signed and unsigned given together for `%s'" + msgstr "" + + #: cp/decl.c:10329 + msgid "qualifiers are not allowed on declaration of `operator %T'" + msgstr "" + + #: cp/decl.c:10357 + msgid "member `%D' cannot be declared both virtual and static" + msgstr "" + + #: cp/decl.c:10371 + msgid "storage class specifiers invalid in parameter declarations" + msgstr "" + + #: cp/decl.c:10375 + msgid "typedef declaration invalid in parameter declaration" + msgstr "" + + #: cp/decl.c:10388 + msgid "virtual outside class declaration" + msgstr "" + + #: cp/decl.c:10442 + #, c-format + msgid "storage class specified for %s `%s'" + msgstr "" + + #: cp/decl.c:10480 + msgid "storage class specifiers invalid in friend function declarations" + msgstr "" + + #: cp/decl.c:10584 + #, fuzzy + msgid "size of member `%D' is not constant" + msgstr "opslaggrootte van `%s' is niet constant" + + #: cp/decl.c:10663 + msgid "destructor cannot be static member function" + msgstr "" + + #: cp/decl.c:10666 + #, fuzzy, c-format + msgid "destructors may not be `%s'" + msgstr "structure heeft geen lid dat `%s' heet" + + #: cp/decl.c:10687 + msgid "constructor cannot be static member function" + msgstr "" + + #: cp/decl.c:10690 + msgid "constructors cannot be declared virtual" + msgstr "" + + #: cp/decl.c:10695 + #, fuzzy, c-format + msgid "constructors may not be `%s'" + msgstr "structure heeft geen lid dat `%s' heet" + + #: cp/decl.c:10705 + msgid "return value type specifier for constructor ignored" + msgstr "" + + #: cp/decl.c:10724 + #, c-format + msgid "can't initialize friend function `%s'" + msgstr "" + + #. Cannot be both friend and virtual. + #: cp/decl.c:10728 + msgid "virtual functions cannot be friends" + msgstr "" + + #: cp/decl.c:10733 + msgid "friend declaration not in class definition" + msgstr "" + + #: cp/decl.c:10735 + #, c-format + msgid "can't define friend function `%s' in a local class definition" + msgstr "" + + #: cp/decl.c:10759 + msgid "destructors may not have parameters" + msgstr "" + + #: cp/decl.c:10789 + #, c-format + msgid "cannot declare %s to references" + msgstr "" + + #: cp/decl.c:10800 + msgid "cannot declare pointer to `%#T' member" + msgstr "" + + #: cp/decl.c:10815 + msgid "invalid type: `void &'" + msgstr "" + + #: cp/decl.c:10866 + msgid "discarding `const' applied to a reference" + msgstr "" + + #: cp/decl.c:10868 + msgid "discarding `volatile' applied to a reference" + msgstr "" + + #: cp/decl.c:10979 + msgid "extra qualification `%T::' on member `%s' ignored" + msgstr "" + + #: cp/decl.c:10989 + msgid "cannot declare member function `%T::%s' within `%T'" + msgstr "" + + #: cp/decl.c:11004 + msgid "cannot declare member `%T::%s' within `%T'" + msgstr "" + + #. [dcl.fct.spec] The explicit specifier shall only be used in + #. declarations of constructors within a class definition. + #: cp/decl.c:11084 + msgid "only declarations of constructors can be `explicit'" + msgstr "" + + #: cp/decl.c:11092 + #, c-format + msgid "non-member `%s' cannot be declared `mutable'" + msgstr "" + + #: cp/decl.c:11097 + #, c-format + msgid "non-object member `%s' cannot be declared `mutable'" + msgstr "" + + #: cp/decl.c:11103 + #, fuzzy, c-format + msgid "function `%s' cannot be declared `mutable'" + msgstr "geneste functie `%s' is als `extern' gedeclareerd" + + #: cp/decl.c:11108 + #, c-format + msgid "static `%s' cannot be declared `mutable'" + msgstr "" + + #: cp/decl.c:11113 + #, c-format + msgid "const `%s' cannot be declared `mutable'" + msgstr "" + + #: cp/decl.c:11126 + #, fuzzy + msgid "template-id `%D' used as a declarator" + msgstr "parameter `%s' heeft enkel een voorwaartse declaratie" + + #: cp/decl.c:11147 + msgid "ISO C++ forbids nested type `%D' with same name as enclosing class" + msgstr "" + + #: cp/decl.c:11194 + msgid "typedef name may not be class-qualified" + msgstr "" + + #: cp/decl.c:11202 + msgid "invalid type qualifier for non-member function type" + msgstr "" + + #: cp/decl.c:11218 + msgid "typedef declaration includes an initializer" + msgstr "" + + #: cp/decl.c:11271 + #, fuzzy + msgid "type qualifiers specified for friend class declaration" + msgstr "twee types opgegeven in één lege declaratie" + + #: cp/decl.c:11276 + #, fuzzy + msgid "`inline' specified for friend class declaration" + msgstr "POS mag niet opgegeven worden voor een lijst van veld-declaraties" + + #: cp/decl.c:11286 + #, fuzzy + msgid "template parameters cannot be friends" + msgstr "niet-beëindigde parameterlijst in `#define'" + + #: cp/decl.c:11288 + msgid "friend declaration requires class-key, i.e. `friend class %T::%T'" + msgstr "" + + #: cp/decl.c:11293 + msgid "friend declaration requires class-key, i.e. `friend %#T'" + msgstr "" + + #: cp/decl.c:11309 + msgid "trying to make class `%T' a friend of global scope" + msgstr "" + + #: cp/decl.c:11320 + #, fuzzy + msgid "invalid qualifiers on non-member function type" + msgstr "%s laat qualifiers van doeltype van pointer vallen" + + #: cp/decl.c:11339 + #, fuzzy + msgid "abstract declarator `%T' used as declaration" + msgstr "de declaratie van `%s' verbergt een globale declaratie" + + #: cp/decl.c:11351 + msgid "unnamed variable or field declared void" + msgstr "" + + #: cp/decl.c:11360 + msgid "variable or field declared void" + msgstr "" + + #: cp/decl.c:11370 + msgid "cannot use `::' in parameter declaration" + msgstr "" + + #. Something like struct S { int N::j; }; + #: cp/decl.c:11416 + #, fuzzy + msgid "invalid use of `::'" + msgstr "ongeldig gebruik van `restrict'" + + #: cp/decl.c:11428 + #, fuzzy + msgid "function `%D' cannot be declared friend" + msgstr "`%s' mag niet als alleen-lezen gedeclareerd worden" + + #: cp/decl.c:11440 + msgid "can't make `%D' into a method -- not in a class" + msgstr "" + + #: cp/decl.c:11449 + #, fuzzy + msgid "function `%D' declared virtual inside a union" + msgstr "veld `%s' als een functie gedeclareerd" + + #: cp/decl.c:11461 + msgid "`%D' cannot be declared virtual, since it is always static" + msgstr "" + + #: cp/decl.c:11534 + #, fuzzy + msgid "field `%D' has incomplete type" + msgstr "veld `%s' heeft een onvolledig type" + + #: cp/decl.c:11536 + #, fuzzy + msgid "name `%T' has incomplete type" + msgstr "parameter `%s' heeft een onvolledig type" + + #: cp/decl.c:11545 + msgid " in instantiation of template `%T'" + msgstr "" + + #: cp/decl.c:11555 + #, c-format + msgid "`%s' is neither function nor member function; cannot be declared friend" + msgstr "" + + #: cp/decl.c:11572 + msgid "member functions are implicitly friends of their class" + msgstr "" + + #. An attempt is being made to initialize a non-static + #. member. But, from [class.mem]: + #. + #. 4 A member-declarator can contain a + #. constant-initializer only if it declares a static + #. member (_class.static_) of integral or enumeration + #. type, see _class.static.data_. + #. + #. This used to be relatively common practice, but + #. the rest of the compiler does not correctly + #. handle the initialization unless the member is + #. static so we make it static below. + #: cp/decl.c:11614 + #, fuzzy + msgid "ISO C++ forbids initialization of member `%D'" + msgstr "(dicht bij initialisatie van `%s')" + + #: cp/decl.c:11616 + msgid "making `%D' static" + msgstr "" + + #: cp/decl.c:11640 + msgid "ISO C++ forbids static data member `%D' with same name as enclosing class" + msgstr "" + + #: cp/decl.c:11681 + #, c-format + msgid "storage class `auto' invalid for function `%s'" + msgstr "" + + #: cp/decl.c:11683 + #, c-format + msgid "storage class `register' invalid for function `%s'" + msgstr "" + + #: cp/decl.c:11694 + #, c-format + msgid "storage class `static' invalid for function `%s' declared out of global scope" + msgstr "" + + #: cp/decl.c:11696 + #, c-format + msgid "storage class `inline' invalid for function `%s' declared out of global scope" + msgstr "" + + #: cp/decl.c:11703 + #, c-format + msgid "virtual non-class function `%s'" + msgstr "" + + #: cp/decl.c:11732 + msgid "cannot declare member function `%D' to have static linkage" + msgstr "" + + #. FIXME need arm citation + #: cp/decl.c:11738 + msgid "cannot declare static function inside another function" + msgstr "" + + #: cp/decl.c:11766 + msgid "`static' may not be used when defining (as opposed to declaring) a static data member" + msgstr "" + + #: cp/decl.c:11772 + #, fuzzy + msgid "static member `%D' declared `register'" + msgstr "variabele `%s' als inline gedeclareerd" + + #: cp/decl.c:11777 + msgid "cannot explicitly declare member `%#D' to have extern linkage" + msgstr "" + + #: cp/decl.c:11949 + #, fuzzy + msgid "default argument for `%#D' has type `%T'" + msgstr "eerste argument van `%s' zou een `int' moeten zijn" + + #: cp/decl.c:11952 + msgid "default argument for parameter of type `%T' has type `%T'" + msgstr "" + + #: cp/decl.c:11969 + msgid "default argument `%E' uses local variable `%D'" + msgstr "" + + #: cp/decl.c:12013 + #, fuzzy, c-format + msgid "invalid string constant `%E'" + msgstr "slechte stringconstante" + + #: cp/decl.c:12015 + msgid "invalid integer constant in parameter list, did you forget to give parameter name?" + msgstr "" + + #: cp/decl.c:12049 + #, fuzzy + msgid "parameter `%D' invalidly declared method type" + msgstr "parameter `%s' als void gedeclareerd" + + #: cp/decl.c:12055 + #, fuzzy + msgid "parameter `%D' invalidly declared offset type" + msgstr "parameter `%s' als void gedeclareerd" + + #: cp/decl.c:12079 + msgid "parameter `%D' includes %s to array of unknown bound `%T'" + msgstr "" + + #. [class.copy] + #. + #. A declaration of a constructor for a class X is ill-formed if + #. its first parameter is of type (optionally cv-qualified) X + #. and either there are no other parameters or else all other + #. parameters have default arguments. + #. + #. We *don't* complain about member template instantiations that + #. have this form, though; they can occur as we try to decide + #. what constructor to use during overload resolution. Since + #. overload resolution will never prefer such a constructor to + #. the non-template copy constructor (which is either explicitly + #. or implicitly defined), there's no need to worry about their + #. existence. Theoretically, they should never even be + #. instantiated, but that's hard to forestall. + #: cp/decl.c:12246 + msgid "invalid constructor; you probably meant `%T (const %T&)'" + msgstr "" + + #: cp/decl.c:12397 + #, fuzzy + msgid "`%D' must be a nonstatic member function" + msgstr "`this' is niet beschikbaar in static member-funties" + + #: cp/decl.c:12403 + msgid "`%D' must be either a non-static member function or a non-member function" + msgstr "" + + #: cp/decl.c:12420 + msgid "`%D' must have an argument of class or enumerated type" + msgstr "" + + #: cp/decl.c:12452 + #, c-format + msgid "conversion to %s%s will never use a type conversion operator" + msgstr "" + + #. 13.4.0.3 + #: cp/decl.c:12459 + msgid "ISO C++ prohibits overloading operator ?:" + msgstr "" + + #: cp/decl.c:12509 + msgid "postfix `%D' must take `int' as its argument" + msgstr "" + + #: cp/decl.c:12513 + msgid "postfix `%D' must take `int' as its second argument" + msgstr "" + + #: cp/decl.c:12520 + #, fuzzy + msgid "`%D' must take either zero or one argument" + msgstr "`%s' neemt ofwel geen, ofwel twee argumenten" + + #: cp/decl.c:12522 + #, fuzzy + msgid "`%D' must take either one or two arguments" + msgstr "`%s' neemt ofwel geen, ofwel twee argumenten" + + #: cp/decl.c:12543 + msgid "prefix `%D' should return `%T'" + msgstr "" + + #: cp/decl.c:12549 + msgid "postfix `%D' should return `%T'" + msgstr "" + + #: cp/decl.c:12558 + msgid "`%D' must take `void'" + msgstr "" + + #: cp/decl.c:12560 cp/decl.c:12568 + #, fuzzy + msgid "`%D' must take exactly one argument" + msgstr "`%s' neemt ofwel geen, ofwel twee argumenten" + + #: cp/decl.c:12570 + #, fuzzy + msgid "`%D' must take exactly two arguments" + msgstr "`%s' neemt ofwel geen, ofwel twee argumenten" + + #: cp/decl.c:12578 + msgid "user-defined `%D' always evaluates both arguments" + msgstr "" + + #: cp/decl.c:12590 + msgid "`%D' should return by value" + msgstr "" + + #: cp/decl.c:12602 cp/decl.c:12605 + msgid "`%D' cannot have default arguments" + msgstr "" + + #: cp/decl.c:12698 + #, fuzzy + msgid "`%s %T' declares a new type at namespace scope" + msgstr "`%s %s' binnen parameterlijst gedeclareerd" + + #: cp/decl.c:12701 + msgid " names from dependent base classes are not visible to unqualified name lookup - to refer to the inherited type, say `%s %T::%T'" + msgstr "" + + #: cp/decl.c:12737 + msgid "using typedef-name `%D' after `%s'" + msgstr "" + + #: cp/decl.c:12740 + #, fuzzy + msgid "using template type parameter `%T' after `%s'" + msgstr "incompatibel type voor argument %d van `%s'" + + #: cp/decl.c:12822 + #, fuzzy + msgid "use of enum `%#D' without previous declaration" + msgstr "sectie van `%s' geeft een conflict met een eerdere declaratie" + + #: cp/decl.c:12932 + msgid "derived union `%T' invalid" + msgstr "" + + #: cp/decl.c:12976 + #, fuzzy + msgid "base type `%T' fails to be a struct or class type" + msgstr "`%s' is geen typedef of ingebouwd type" + + #: cp/decl.c:12988 + #, fuzzy + msgid "base class `%T' has incomplete type" + msgstr "veld `%s' heeft een onvolledig type" + + #: cp/decl.c:12996 + msgid "recursive type `%T' undefined" + msgstr "" + + #: cp/decl.c:12998 + #, fuzzy + msgid "duplicate base type `%T' invalid" + msgstr "herhaalde case-waarde" + + #: cp/decl.c:13109 + #, fuzzy + msgid "multiple definition of `%#T'" + msgstr "herdefinitie van `%s'" + + #: cp/decl.c:13110 + #, fuzzy + msgid "previous definition here" + msgstr "eerdere definitie van `%s'" + + #: cp/decl.c:13285 + #, fuzzy + msgid "enumerator value for `%D' not integer constant" + msgstr "enumeratiewaarde voor `%s' is geen integrale constante" + + #: cp/decl.c:13305 + #, fuzzy + msgid "overflow in enumeration values at `%D'" + msgstr "overflow in enumeratiewaarden" + + #: cp/decl.c:13394 + #, fuzzy + msgid "return type `%#T' is incomplete" + msgstr "type van teruggeefwaarde is onvolledig" + + #: cp/decl.c:13503 + #, fuzzy + msgid "semicolon missing after declaration of `%#T'" + msgstr "conflicterende declaraties van `%s'" + + #: cp/decl.c:13524 + msgid "return type for `main' changed to `int'" + msgstr "" + + #: cp/decl.c:13555 + #, fuzzy + msgid "`%D' implicitly declared before its definition" + msgstr "`%s' impliciet als functie gedeclareerd" + + #: cp/decl.c:13577 cp/typeck.c:6653 + msgid "`operator=' should return a reference to `*this'" + msgstr "" + + #: cp/decl.c:13858 + #, fuzzy + msgid "parameter `%D' declared void" + msgstr "parameter `%s' als void gedeclareerd" + + #: cp/decl.c:14302 + msgid "`%D' is already defined in class `%T'" + msgstr "" + + #: cp/decl.c:14453 + #, fuzzy + msgid "parser lost in parsing declaration of `%D'" + msgstr "type krijgt standaardwaarde `int' in de declaratie van `%s'" + + #: cp/decl.c:14538 + #, fuzzy + msgid "static member function `%#D' declared with type qualifiers" + msgstr "geneste functie `%s' is als `extern' gedeclareerd" + + #: cp/decl2.c:529 + #, c-format + msgid "-f%s is no longer supported" + msgstr "" + + #: cp/decl2.c:535 + msgid "-fhandle-exceptions has been renamed to -fexceptions (and is now on by default)" + msgstr "" + + #: cp/decl2.c:561 + msgid "-fname-mangling-version is no longer supported" + msgstr "" + + #: cp/decl2.c:624 + #, fuzzy + msgid "-Wno-strict-prototypes is not supported in C++" + msgstr "-pipe wordt niet ondersteund" + + #: cp/decl2.c:761 + #, fuzzy, c-format + msgid "duplicate type qualifiers in %s declaration" + msgstr "herhaalde label-declaratie `%s'" + + #: cp/decl2.c:800 + msgid "template `%#D' instantiated in file without #pragma interface" + msgstr "" + + #: cp/decl2.c:806 + msgid "template `%#D' defined in file without #pragma interface" + msgstr "" + + #: cp/decl2.c:963 + msgid "name missing for member function" + msgstr "" + + #. Something has gone very wrong. Assume we are mistakenly reducing + #. an expression instead of a declaration. + #: cp/decl2.c:1030 + msgid "parser may be lost: is there a '{' missing somewhere?" + msgstr "" + + #: cp/decl2.c:1061 cp/decl2.c:1075 + msgid "ambiguous conversion for array subscript" + msgstr "" + + #: cp/decl2.c:1069 + msgid "invalid types `%T[%T]' for array subscript" + msgstr "" + + #: cp/decl2.c:1117 + msgid "type `%#T' argument given to `delete', expected pointer" + msgstr "" + + #: cp/decl2.c:1125 + msgid "anachronistic use of array size in vector delete" + msgstr "" + + #: cp/decl2.c:1135 + msgid "cannot delete a function. Only pointer-to-objects are valid arguments to `delete'" + msgstr "" + + #: cp/decl2.c:1142 + #, fuzzy + msgid "deleting `%T' is undefined" + msgstr "`%.*s' is niet gedefinieerd" + + #: cp/decl2.c:1150 + msgid "deleting array `%#D'" + msgstr "" + + #. 14.5.2.2 [temp.mem] + #. + #. A local class shall not have member templates. + #: cp/decl2.c:1197 + msgid "invalid declaration of member template `%#D' in local class" + msgstr "" + + #: cp/decl2.c:1206 + #, fuzzy + msgid "invalid use of `virtual' in template declaration of `%#D'" + msgstr "ongeldig gebruik van onvolledige typedef `%s'" + + #: cp/decl2.c:1216 cp/pt.c:2559 + #, fuzzy + msgid "template declaration of `%#D'" + msgstr "herdeclaratie van `%s'" + + #: cp/decl2.c:1266 + msgid "Java method '%D' has non-Java return type `%T'" + msgstr "" + + #: cp/decl2.c:1275 + msgid "Java method '%D' has non-Java parameter type `%T'" + msgstr "" + + #: cp/decl2.c:1371 + msgid "prototype for `%#D' does not match any in class `%T'" + msgstr "" + + #: cp/decl2.c:1373 + msgid "candidate%s: %+#D" + msgstr "" + + #: cp/decl2.c:1376 + #, fuzzy + msgid " %#D" + msgstr "" + ",\n" + " door " + + #: cp/decl2.c:1432 + msgid "initializer invalid for static member with constructor" + msgstr "" + + #: cp/decl2.c:1435 + msgid "(an out of class initialization is required)" + msgstr "" + + #: cp/decl2.c:1494 + #, fuzzy + msgid "invalid data member initialization" + msgstr "ongeldige beginwaarde" + + #: cp/decl2.c:1497 + msgid "(use `=' to initialize static data members)" + msgstr "" + + #: cp/decl2.c:1537 + msgid "member `%D' conflicts with virtual function table field name" + msgstr "" + + #: cp/decl2.c:1557 + msgid "`%D' is already defined in `%T'" + msgstr "" + + #: cp/decl2.c:1608 + msgid "field initializer is not constant" + msgstr "" + + #: cp/decl2.c:1631 + msgid "`asm' specifiers are not permitted on non-static data members" + msgstr "" + + #: cp/decl2.c:1683 + msgid "cannot declare `%D' to be a bit-field type" + msgstr "" + + #: cp/decl2.c:1693 + #, fuzzy + msgid "cannot declare bit-field `%D' with function type" + msgstr "cast geeft functie-type op" + + #: cp/decl2.c:1700 + msgid "`%D' is already defined in the class %T" + msgstr "" + + #: cp/decl2.c:1709 + msgid "static member `%D' cannot be a bit-field" + msgstr "" + + #: cp/decl2.c:1778 + #, fuzzy + msgid "initializer specified for non-member function `%D'" + msgstr "argument-formaat opgegeven voor niet-functie `%s'" + + #: cp/decl2.c:1782 + #, fuzzy + msgid "invalid initializer for virtual method `%D'" + msgstr "ongeldige beginwaarde voor bit-string" + + #: cp/decl2.c:1886 + #, fuzzy + msgid "anonymous struct not inside named type" + msgstr "anonieme %s gedeclareerd binnen parameterlijst" + + #: cp/decl2.c:1982 + msgid "namespace-scope anonymous aggregates must be static" + msgstr "" + + #: cp/decl2.c:1992 + msgid "anonymous aggregate with no members" + msgstr "" + + #: cp/decl2.c:2059 + msgid "`operator new' must return type `%T'" + msgstr "" + + #: cp/decl2.c:2067 + msgid "`operator new' takes type `size_t' (`%T') as first parameter" + msgstr "" + + #: cp/decl2.c:2094 + msgid "`operator delete' must return type `%T'" + msgstr "" + + #: cp/decl2.c:2102 + msgid "`operator delete' takes type `%T' as first parameter" + msgstr "" + + #. Overflow occurred. That means there are at least 4 billion + #. initialization functions. + #: cp/decl2.c:2839 + msgid "too many initialization functions required" + msgstr "" + + #: cp/decl2.c:3650 + msgid "use of old-style cast" + msgstr "" + + #: cp/decl2.c:4208 + #, fuzzy + msgid "use of `%D' is ambiguous" + msgstr "grootte van `%s' is %u bytes" + + #: cp/decl2.c:4209 + msgid " first declared as `%#D' here" + msgstr "" + + #: cp/decl2.c:4212 + msgid " also declared as `%#D' here" + msgstr "" + + #: cp/decl2.c:4227 + msgid "`%D' denotes an ambiguous type" + msgstr "" + + #: cp/decl2.c:4228 + msgid " first type here" + msgstr "" + + #: cp/decl2.c:4229 + msgid " other type here" + msgstr "" + + #: cp/decl2.c:4326 + #, fuzzy + msgid "declaration of `%D' not in a namespace surrounding `%D'" + msgstr "`%s' wordt gedeclareerd als een array van functies" + + #: cp/decl2.c:4360 + msgid "`%D' should have been declared inside `%D'" + msgstr "" + + #: cp/decl2.c:4494 + #, fuzzy + msgid "`%D' is not a function," + msgstr "`%s' is meestal een functie" + + #: cp/decl2.c:4495 + #, fuzzy + msgid " conflict with `%D'" + msgstr "conflicterende types voor `%s'" + + #. The parser did not find it, so it's not there. + #: cp/decl2.c:4809 + #, fuzzy + msgid "unknown namespace `%D'" + msgstr "onbekende machine-modus `%s'" + + #: cp/decl2.c:4843 cp/decl2.c:5104 + #, fuzzy + msgid "`%T' is not a namespace" + msgstr "`%s' is geen iterator" + + #: cp/decl2.c:4845 + #, fuzzy + msgid "`%D' is not a namespace" + msgstr "`%s' is geen iterator" + + #: cp/decl2.c:4854 + msgid "a using-declaration cannot specify a template-id. Try `using %D'" + msgstr "" + + #: cp/decl2.c:4868 + #, fuzzy + msgid "namespace `%D' not allowed in using-declaration" + msgstr "`%s' staat niet aan het begin van een declaratie" + + #: cp/decl2.c:4897 + #, fuzzy + msgid "`%D' not declared" + msgstr "`%.*s' is niet gedefinieerd" + + #: cp/decl2.c:4939 + msgid "`%D' is already declared in this scope" + msgstr "" + + #: cp/decl2.c:4966 + msgid "using declaration `%D' introduced ambiguous type `%T'" + msgstr "" + + #: cp/decl2.c:5057 + msgid "using-declaration for non-member at class scope" + msgstr "" + + #: cp/decl2.c:5063 + msgid "using-declaration for destructor" + msgstr "" + + #: cp/decl2.c:5069 + msgid "a using-declaration cannot specify a template-id. Try `using %T::%D'" + msgstr "" + + #: cp/decl2.c:5098 + #, fuzzy + msgid "namespace `%T' undeclared" + msgstr "`%s' tevoren hier gedeclareerd" + + #: cp/decl2.c:5127 + #, fuzzy + msgid "default argument missing for parameter %P of `%+#D'" + msgstr "parameternaam ontbreekt uit parameterlijst" + + #: cp/decl2.c:5217 + msgid "extra qualification `%T::' on member `%D' ignored" + msgstr "" + + #: cp/decl2.c:5221 + msgid "`%T' does not have a class or union named `%D'" + msgstr "" + + #: cp/decl2.c:5234 + #, fuzzy + msgid "`%T' is not a class or union type" + msgstr "`%s' is smaller dan waarden van zijn type" + + #: cp/error.c:35 + #, fuzzy, c-format + msgid "`%s' not supported by %s" + msgstr "-pipe wordt niet ondersteund" + + #: cp/error.c:571 + #, c-format + msgid "" + msgstr "" + + #: cp/error.c:808 + #, c-format + msgid "(static %s for %s)" + msgstr "" + + #: cp/error.c:2432 + #, fuzzy, c-format + msgid "In %s `%s':" + msgstr "%s voor `%s'" + + #: cp/error.c:2487 + #, fuzzy, c-format + msgid "%s: In instantiation of `%s':\n" + msgstr "(dicht bij initialisatie van `%s')" + + #: cp/error.c:2511 + #, c-format + msgid "%s:%d: instantiated from `%s'\n" + msgstr "" + + #: cp/error.c:2516 + #, c-format + msgid "%s:%d: instantiated from here\n" + msgstr "" + + #. damn ICE suppression + #: cp/error.c:2669 + #, c-format + msgid "unexpected letter `%c' in locate_error\n" + msgstr "" + + #. Can't throw a reference. + #: cp/except.c:245 + msgid "type `%T' is disallowed in Java `throw' or `catch'" + msgstr "" + + #: cp/except.c:256 + msgid "call to Java `catch' or `throw' with `jthrowable' undefined" + msgstr "" + + #. Thrown object must be a Throwable. + #: cp/except.c:263 + msgid "type `%T' is not derived from `java::lang::Throwable'" + msgstr "" + + #: cp/except.c:327 + msgid "mixing C++ and Java catches in a single translation unit" + msgstr "" + + #: cp/except.c:558 + msgid "throwing NULL, which has integral, not pointer type" + msgstr "" + + #: cp/except.c:663 + msgid " in thrown expression" + msgstr "" + + #: cp/except.c:775 + msgid "expression '%E' of abstract class type '%T' cannot be used in throw-expression" + msgstr "" + + #: cp/except.c:863 + msgid "exception of type `%T' will be caught" + msgstr "" + + #: cp/except.c:866 + msgid " by earlier handler for `%T'" + msgstr "" + + #: cp/except.c:887 + msgid "`...' handler must be the last handler for its try block" + msgstr "" + + #: cp/friend.c:155 + #, fuzzy + msgid "`%D' is already a friend of class `%T'" + msgstr "kan klasse '%s' niet vinden" + + #: cp/friend.c:157 + #, fuzzy + msgid "previous friend declaration of `%D'" + msgstr "eerdere declaratie van `%s'" + + #: cp/friend.c:197 + #, fuzzy + msgid "invalid type `%T' declared `friend'" + msgstr "variabele `%s' als inline gedeclareerd" + + #. [temp.friend] + #. + #. Friend declarations shall not declare partial + #. specializations. + #: cp/friend.c:209 + #, fuzzy + msgid "partial specialization `%T' declared `friend'" + msgstr "variabele `%s' als inline gedeclareerd" + + #: cp/friend.c:221 + msgid "class `%T' is implicitly friends with itself" + msgstr "" + + #. template friend typename S::X; + #: cp/friend.c:239 + #, fuzzy + msgid "typename type `%#T' declared `friend'" + msgstr "parameter `%s' als void gedeclareerd" + + #. template friend class T; + #: cp/friend.c:245 + #, fuzzy + msgid "template parameter type `%T' declared `friend'" + msgstr "parameter `%s' als void gedeclareerd" + + #. template friend class A; where A is not a template + #: cp/friend.c:251 + #, fuzzy + msgid "`%#T' is not a template" + msgstr "`%s' is geen iterator" + + #: cp/friend.c:268 + msgid "`%T' is already a friend of `%T'" + msgstr "" + + #: cp/friend.c:364 + msgid "member `%D' declared as friend before type `%T' defined" + msgstr "" + + #: cp/friend.c:419 + #, fuzzy + msgid "friend declaration `%#D' declares a non-template function" + msgstr "ingebouwde functie `%s' als niet-functie gedeclareerd" + + #: cp/friend.c:422 + msgid "(if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) -Wno-non-template-friend disables this warning" + msgstr "" + + #: cp/g++spec.c:198 java/jvspec.c:381 + #, fuzzy, c-format + msgid "argument to `%s' missing\n" + msgstr "argument van `%s' moet van een integraal type zijn." + + #: cp/init.c:285 + msgid "default-initialization of `%#D', which has reference type" + msgstr "" + + #: cp/init.c:290 + #, fuzzy + msgid "uninitialized reference member `%D'" + msgstr "ongeldige beginwaarde voor member `%s'" + + #: cp/init.c:298 + msgid "initializer list treated as compound expression" + msgstr "" + + #: cp/init.c:410 + #, fuzzy + msgid "member initializers for `%#D'" + msgstr "ongeldige beginwaarde voor veld `%s'" + + #: cp/init.c:412 + msgid " and `%#D'" + msgstr "" + + #: cp/init.c:413 + msgid " will be re-ordered to match declaration order" + msgstr "" + + #: cp/init.c:428 + #, fuzzy + msgid "multiple initializations given for member `%D'" + msgstr "ongeldige beginwaarde voor member `%s'" + + #: cp/init.c:500 + #, fuzzy + msgid "initializations for multiple members of `%T'" + msgstr "beginwaarde legt grootte van `%s' niet vast" + + #: cp/init.c:617 + #, fuzzy + msgid "base initializers for `%#T'" + msgstr "ongeldige beginwaarde voor veld `%s'" + + #: cp/init.c:618 + msgid " and `%#T'" + msgstr "" + + #: cp/init.c:619 + msgid " will be re-ordered to match inheritance order" + msgstr "" + + #: cp/init.c:631 + #, fuzzy + msgid "base class `%T' already initialized" + msgstr "veld `%s' heeft al een beginwaarde gekregen" + + #: cp/init.c:702 + msgid "base class `%#T' should be explicitly initialized in the copy constructor" + msgstr "" + + #: cp/init.c:745 + msgid "`%D' should be initialized in the member initialization list" + msgstr "" + + #: cp/init.c:987 + msgid "class `%T' does not have any field named `%D'" + msgstr "" + + #: cp/init.c:993 + msgid "field `%#D' is static; the only point of initialization is its definition" + msgstr "" + + #: cp/init.c:1032 + msgid "unnamed initializer for `%T', which has no base classes" + msgstr "" + + #: cp/init.c:1039 + msgid "unnamed initializer for `%T', which uses multiple inheritance" + msgstr "" + + #: cp/init.c:1068 + msgid "type `%D' is not a direct or virtual base of `%T'" + msgstr "" + + #: cp/init.c:1071 + msgid "type `%D' is not a direct base of `%T'" + msgstr "" + + #. Handle bad initializers like: + #. class COMPLEX { + #. public: + #. double re, im; + #. COMPLEX(double r = 0.0, double i = 0.0) {re = r; im = i;}; + #. ~COMPLEX() {}; + #. }; + #. + #. int main(int argc, char **argv) { + #. COMPLEX zees(1.0, 0.0)[10]; + #. } + #. + #: cp/init.c:1165 + msgid "bad array initializer" + msgstr "" + + #: cp/init.c:1357 + #, fuzzy + msgid "`%T' is not an aggregate type" + msgstr "`%s' is geen iterator" + + #: cp/init.c:1380 + #, fuzzy + msgid "`%T' fails to be an aggregate typedef" + msgstr "`%s' is geen typedef of ingebouwd type" + + #: cp/init.c:1389 + msgid "type `%T' is of non-aggregate type" + msgstr "" + + #: cp/init.c:1491 + msgid "cannot call destructor `%T::~%T' without object" + msgstr "" + + #: cp/init.c:1533 + #, fuzzy + msgid "invalid use of non-static field `%D'" + msgstr "ongeldig gebruik van onvolledige typedef `%s'" + + #. We can get here when processing a bad default + #. argument, like: + #. struct S { int a; void f(int i = a); } + #: cp/init.c:1542 cp/method.c:194 + #, fuzzy + msgid "invalid use of member `%D'" + msgstr "ongeldige beginwaarde voor member `%s'" + + #: cp/init.c:1552 + msgid "no method `%T::%D'" + msgstr "" + + #: cp/init.c:1645 + msgid "incomplete type `%T' does not have member `%D'" + msgstr "" + + #: cp/init.c:1714 + #, fuzzy + msgid "`%D' is not a member of type `%T'" + msgstr "`%s' is geen bestand, pipe of tty" + + #: cp/init.c:1733 + #, fuzzy + msgid "illegal pointer to bit-field `%D'" + msgstr "bitveld `%s' heeft een negatieve breedte" + + #: cp/init.c:1772 + msgid "object missing in use of pointer-to-member construct" + msgstr "" + + #: cp/init.c:1812 + msgid "member `%D' is non-static but referenced as a static member" + msgstr "" + + #: cp/init.c:1814 cp/typeck.c:3168 cp/typeck.c:3276 + msgid "at this point in file" + msgstr "" + + #: cp/init.c:1872 cp/typeck.c:2963 + #, fuzzy, c-format + msgid "object missing in `%E'" + msgstr "array-grootte ontbreekt in `%s'" + + #: cp/init.c:2004 + msgid "new of array type fails to specify size" + msgstr "" + + #: cp/init.c:2015 + msgid "size in array new must have integral type" + msgstr "" + + #: cp/init.c:2021 + msgid "zero size array reserves no space" + msgstr "" + + #: cp/init.c:2086 + msgid "new cannot be applied to a reference type" + msgstr "" + + #: cp/init.c:2092 + msgid "new cannot be applied to a function type" + msgstr "" + + #: cp/init.c:2139 + msgid "call to Java constructor, while `jclass' undefined" + msgstr "" + + #: cp/init.c:2155 + #, fuzzy + msgid "can't find class$" + msgstr "kan %s niet vinden" + + #: cp/init.c:2268 + msgid "invalid type `void' for new" + msgstr "" + + #: cp/init.c:2320 + #, c-format + msgid "call to Java constructor with `%s' undefined" + msgstr "" + + #: cp/init.c:2429 + #, fuzzy + msgid "ISO C++ forbids initialization in array new" + msgstr "ANSI C verbiedt lege initialisatie-accolades" + + #: cp/init.c:2447 cp/typeck2.c:383 cp/typeck2.c:1227 + msgid "initializer list being treated as compound expression" + msgstr "" + + #: cp/init.c:2453 + #, fuzzy + msgid "ISO C++ forbids aggregate initializer to new" + msgstr "ANSI C verbiedt lege initialisatie-accolades" + + #: cp/init.c:2528 + #, fuzzy + msgid "uninitialized const in `new' of `%#T'" + msgstr "beginwaarde legt grootte van `%s' niet vast" + + #: cp/init.c:2892 + msgid "initializer ends prematurely" + msgstr "" + + #: cp/init.c:2962 + msgid "cannot initialize multi-dimensional array with initializer" + msgstr "" + + #: cp/init.c:3137 + msgid "unknown array size in delete" + msgstr "" + + #: cp/init.c:3402 + msgid "type to vector delete is neither pointer or array type" + msgstr "" + + #: cp/lex.c:144 + msgid "type name expected before `*'" + msgstr "" + + #: cp/lex.c:166 + msgid "cannot declare references to references" + msgstr "" + + #: cp/lex.c:171 + msgid "cannot declare pointers to references" + msgstr "" + + #: cp/lex.c:175 + msgid "type name expected before `&'" + msgstr "" + + #: cp/lex.c:1000 + #, c-format + msgid "semicolon missing after %s declaration" + msgstr "" + + #: cp/lex.c:1003 + #, fuzzy + msgid "semicolon missing after declaration of `%T'" + msgstr "conflicterende declaraties van `%s'" + + # Moet 'signature-string' vertaald worden? + #: cp/lex.c:1051 + #, fuzzy, c-format + msgid "junk at end of #pragma %s" + msgstr "Brol aan einde van signature-string." + + #: cp/lex.c:1058 + #, fuzzy, c-format + msgid "invalid #pragma %s" + msgstr "ongeldige operand van %s" + + #: cp/lex.c:1067 + msgid "#pragma vtable no longer supported" + msgstr "" + + #: cp/lex.c:1144 + #, fuzzy, c-format + msgid "#pragma implementation for %s appears after file is included" + msgstr "`#pragma implementation' voor \"%s\" staat na diens #include" + + #: cp/lex.c:1169 + msgid "junk at end of #pragma GCC java_exceptions" + msgstr "" + + #: cp/lex.c:1254 + #, fuzzy + msgid "`%D' not defined" + msgstr "`%.*s' is niet gedefinieerd" + + #: cp/lex.c:1259 + #, fuzzy + msgid "`%D' was not declared in this scope" + msgstr "`%.*s' is niet gedefinieerd" + + #: cp/lex.c:1269 + #, fuzzy + msgid "`%D' undeclared (first use this function)" + msgstr "`%s' is hier niet gedeclareerd (eerste gebruik in deze functie)" + + #: cp/lex.c:1273 + #, fuzzy + msgid "(Each undeclared identifier is reported only once for each function it appears in.)" + msgstr "(Elke niet-gedeclareerde naam wordt slechts één" + + #: cp/lex.c:1296 + #, c-format + msgid "name lookup of `%s' changed" + msgstr "" + + #: cp/lex.c:1298 + msgid " matches this `%D' under ISO standard rules" + msgstr "" + + #: cp/lex.c:1300 + msgid " matches this `%D' under old rules" + msgstr "" + + #: cp/lex.c:1310 cp/lex.c:1317 + #, c-format + msgid "name lookup of `%s' changed for new ISO `for' scoping" + msgstr "" + + #: cp/lex.c:1312 + msgid " cannot use obsolete binding at `%D' because it has a destructor" + msgstr "" + + #: cp/lex.c:1319 + msgid " using obsolete binding at `%D'" + msgstr "" + + #: cp/lex.c:1384 + #, fuzzy + msgid "`::%D' undeclared (first use here)" + msgstr "`%s' is hier niet gedeclareerd (eerste gebruik in deze functie)" + + #: cp/mangle.c:1892 + msgid "real-valued template parameters when cross-compiling" + msgstr "" + + #: cp/method.c:166 + msgid "methods cannot be converted to function pointers" + msgstr "" + + #: cp/method.c:171 + #, c-format + msgid "ambiguous request for method pointer `%s'" + msgstr "" + + #: cp/method.c:188 + #, fuzzy + msgid "invalid use of member `%D' in static member function" + msgstr "`this' is niet beschikbaar in static member-funties" + + #: cp/method.c:236 + #, fuzzy + msgid "use of namespace `%D' as expression" + msgstr "modi in %s expressie komen niet overeen" + + #: cp/method.c:241 + msgid "use of class template `%T' as expression" + msgstr "" + + #: cp/method.c:254 + #, c-format + msgid "use of %s from containing function" + msgstr "" + + #: cp/method.c:257 + #, fuzzy + msgid " `%#D' declared here" + msgstr "`%s' tevoren hier gedeclareerd" + + #: cp/method.c:275 + msgid "request for member `%D' is ambiguous in multiple inheritance lattice" + msgstr "" + + #: cp/method.c:328 + msgid "implementation-reserved name `%D' used" + msgstr "" + + #: cp/method.c:453 + msgid "generic thunk code fails for method `%#D' which uses `...'" + msgstr "" + + #: cp/method.c:683 + msgid "non-static const member `%#D', can't use default assignment operator" + msgstr "" + + #: cp/method.c:688 + msgid "non-static reference member `%#D', can't use default assignment operator" + msgstr "" + + #: parse.y:498 + msgid "keyword `export' not implemented, and will be ignored" + msgstr "" + + #: parse.y:602 + msgid "use of linkage spec `%D' is different from previous spec `%D'" + msgstr "" + + #: parse.y:674 + msgid "invalid default template argument" + msgstr "" + + #: parse.y:905 + msgid "only constructors take base initializers" + msgstr "" + + #: parse.y:907 + msgid "no base or member initializers given following ':'" + msgstr "" + + #: parse.y:949 parse.y:955 + msgid "anachronistic old style base class initializer" + msgstr "" + + #. Handle `Class>' without space in the `>>' + #: parse.y:1077 + msgid "`>>' should be `> >' in template class name" + msgstr "" + + #: parse.y:1115 + msgid "use of template qualifier outside template" + msgstr "" + + #: parse.y:1144 parse.y:1153 + #, fuzzy, c-format + msgid "ISO C++ forbids an empty condition for `%s'" + msgstr "ANSI C verbiedt een leeg bronbestand" + + #: parse.y:1176 + #, fuzzy + msgid "definition of class `%T' in condition" + msgstr "herdefinitie van `union %s'" + + #: parse.y:1178 + #, fuzzy + msgid "definition of enum `%T' in condition" + msgstr "herdefinitie van `union %s'" + + #: parse.y:1189 + #, fuzzy + msgid "definition of array `%#D' in condition" + msgstr "herdefinitie van `union %s'" + + #: parse.y:1298 + msgid "old style placement syntax, use () instead" + msgstr "" + + #: parse.y:1309 + #, fuzzy + msgid "`%T' is not a valid expression" + msgstr "ongeldig gebruik van een void-expressie" + + #: parse.y:1320 + msgid "ISO C++ forbids initialization of new expression with `='" + msgstr "" + + #: parse.y:1351 + #, fuzzy + msgid "ISO C++ forbids compound literals" + msgstr "ANSI C verbiedt het gebruik van samengestelde expressies als lvalues" + + #: parse.y:1592 + #, fuzzy + msgid "ISO C++ forbids braced-groups within expressions" + msgstr "ANSI C verbiedt accolade-groepen in expressies" + + #: parse.y:1999 parse.y:2014 + msgid "sigof type specifier" + msgstr "" + + #: parse.y:2004 + msgid "`sigof' applied to non-aggregate expression" + msgstr "" + + #: parse.y:2019 + msgid "`sigof' applied to non-aggregate type" + msgstr "" + + #: parse.y:2283 + msgid "using `typename' outside of template" + msgstr "" + + #: parse.y:2352 + #, c-format + msgid "storage class specifier `%s' not allowed after struct or class" + msgstr "" + + #: parse.y:2354 + #, c-format + msgid "type specifier `%s' not allowed after struct or class" + msgstr "" + + #: parse.y:2356 + #, c-format + msgid "type qualifier `%s' not allowed after struct or class" + msgstr "" + + #: parse.y:2358 + msgid "no body nor ';' separates two class, struct or union declarations" + msgstr "" + + #: parse.y:2490 + msgid "no bases given following `:'" + msgstr "" + + #: parse.y:2521 parse.y:2536 + msgid "`%D' access" + msgstr "" + + #: parse.y:2526 + msgid "multiple access specifiers" + msgstr "" + + #: parse.y:2544 + msgid "multiple `virtual' specifiers" + msgstr "" + + #: parse.y:2581 + msgid "missing ';' before right brace" + msgstr "" + + #: parse.y:2801 + msgid "ISO C++ forbids array dimensions with parenthesized type in new" + msgstr "" + + #: parse.y:3082 parse.y:3102 parse.y:3111 parse.y:3140 + msgid "`%T' is not a class or namespace" + msgstr "" + + #: parse.y:3307 + #, fuzzy + msgid "ISO C++ forbids label declarations" + msgstr "ANSI C verbiedt labeldeclaraties" + + #: parse.y:3462 + #, fuzzy + msgid "ISO C++ forbids computed gotos" + msgstr "ANSI C verbiedt geneste functies" + + #: parse.y:3470 + msgid "label must be followed by statement" + msgstr "" + + #: parse.y:3566 + msgid "ISO C++ forbids compound statements inside for initializations" + msgstr "" + + #. This helps us recover from really nasty + #. parse errors, for example, a missing right + #. parenthesis. + #: parse.y:3651 parse.y:3661 + msgid "possibly missing ')'" + msgstr "" + + #: parse.y:3758 + msgid "type specifier omitted for parameter" + msgstr "" + + #: parse.y:3767 + #, c-format + msgid "`%E' is not a type, use `typename %E' to make it one" + msgstr "" + + #: parse.y:3769 + #, fuzzy + msgid "no type `%D' in `%T'" + msgstr "het type van de teruggeefwaarde van `%s' is niet `int'" + + #: parse.y:3772 + #, fuzzy, c-format + msgid "type specifier omitted for parameter `%E'" + msgstr "opslagklasse opgegeven voor parameter `%s'" + + #: parse.y:3780 + msgid "'%D' is used as a type, but is not defined as a type." + msgstr "" + + #: /usr/share/bison/bison.simple:817 + #, fuzzy + msgid "parse error; also virtual memory exhausted" + msgstr "parse-fout; ook is het virtueel geheugen opgebruikt" + + #: cp/pt.c:208 + msgid "data member `%D' cannot be a member template" + msgstr "" + + #: cp/pt.c:220 + #, fuzzy + msgid "invalid member template declaration `%D'" + msgstr "herhaalde label-declaratie `%s'" + + #: cp/pt.c:615 + msgid "explicit specialization in non-namespace scope `%D'" + msgstr "" + + #: cp/pt.c:627 + msgid "enclosing class templates are not explicitly specialized" + msgstr "" + + #: cp/pt.c:702 + msgid "specializing `%#T' in different namespace" + msgstr "" + + #: cp/pt.c:703 + #, fuzzy + msgid " from definition of `%#D'" + msgstr "herdefinitie van `%s'" + + #: cp/pt.c:711 + #, fuzzy + msgid "specialization of `%T' after instantiation" + msgstr "de declaratie van `%s' is `extern' en heeft een beginwaarde" + + #: cp/pt.c:714 + #, fuzzy + msgid "explicit specialization of non-template `%T'" + msgstr "impliciete declaratie van functie `%s'" + + #: cp/pt.c:846 + msgid "specialization of %D after instantiation" + msgstr "" + + #: cp/pt.c:949 + msgid "%s %+#D" + msgstr "" + + #: cp/pt.c:1000 + #, fuzzy + msgid "`%D' is not a function template" + msgstr "`%s' is geen iterator" + + #: cp/pt.c:1123 + msgid "template-id `%D' for `%+D' does not match any template declaration" + msgstr "" + + #: cp/pt.c:1131 + msgid "ambiguous template specialization `%D' for `%+D'" + msgstr "" + + #. This case handles bogus declarations like template <> + #. template void f(); + #: cp/pt.c:1358 cp/pt.c:1432 + msgid "template-id `%D' in declaration of primary template" + msgstr "" + + #: cp/pt.c:1371 + msgid "template parameter list used in explicit instantiation" + msgstr "" + + #: cp/pt.c:1377 + msgid "definition provided for explicit instantiation" + msgstr "" + + #: cp/pt.c:1383 + #, fuzzy + msgid "too many template parameter lists in declaration of `%D'" + msgstr "meerdere opslagklassen in declaratie van `%s'" + + #: cp/pt.c:1399 + #, fuzzy + msgid "too few template parameter lists in declaration of `%D'" + msgstr "twee of meer data types in de declaratie van `%s'" + + #: cp/pt.c:1416 + msgid "explicit specialization not preceded by `template <>'" + msgstr "" + + #: cp/pt.c:1429 + msgid "partial specialization `%D' of function template" + msgstr "" + + #: cp/pt.c:1461 + msgid "default argument specified in explicit specialization" + msgstr "" + + #: cp/pt.c:1465 + msgid "template specialization with C linkage" + msgstr "" + + #. From [temp.expl.spec]: + #. + #. If such an explicit specialization for the member + #. of a class template names an implicitly-declared + #. special member function (clause _special_), the + #. program is ill-formed. + #. + #. Similar language is found in [temp.explicit]. + #: cp/pt.c:1553 + #, fuzzy + msgid "specialization of implicitly-declared special member function" + msgstr "`%s' impliciet als functie gedeclareerd" + + #: cp/pt.c:1596 + #, fuzzy + msgid "no member function `%D' declared in `%T'" + msgstr "geneste functie `%s' is als `extern' gedeclareerd" + + #. There are two many template parameter lists. + #: cp/pt.c:1744 + #, fuzzy + msgid "too many template parameter lists in declaration of `%T'" + msgstr "meerdere opslagklassen in declaratie van `%s'" + + #: cp/pt.c:1840 + msgid " shadows template parm `%#D'" + msgstr "" + + #: cp/pt.c:2244 + msgid "template parameters not used in partial specialization:" + msgstr "" + + #: cp/pt.c:2248 + msgid " `%D'" + msgstr "" + + #: cp/pt.c:2260 + msgid "partial specialization `%T' does not specialize any template arguments" + msgstr "" + + #: cp/pt.c:2285 + #, c-format + msgid "template argument `%E' involves template parameter(s)" + msgstr "" + + #: cp/pt.c:2328 + msgid "type `%T' of template argument `%E' depends on template parameter(s)" + msgstr "" + + # Is the %s the argument, or is it 'of' the argument? + #: cp/pt.c:2416 + #, fuzzy + msgid "no default argument for `%D'" + msgstr "ongeldig type-argument `%s'" + + #: cp/pt.c:2549 + msgid "template with C linkage" + msgstr "" + + #: cp/pt.c:2552 + msgid "template class without a name" + msgstr "" + + #: cp/pt.c:2627 + msgid "`%D' does not declare a template type" + msgstr "" + + #: cp/pt.c:2633 + #, fuzzy + msgid "template definition of non-template `%#D'" + msgstr "herdefinitie van `union %s'" + + #: cp/pt.c:2674 + msgid "expected %d levels of template parms for `%#D', got %d" + msgstr "" + + #: cp/pt.c:2686 + #, fuzzy + msgid "got %d template parameters for `%#D'" + msgstr "meerdere parameters hebben de naam `%s'" + + #: cp/pt.c:2689 + #, fuzzy + msgid "got %d template parameters for `%#T'" + msgstr "meerdere parameters hebben de naam `%s'" + + #: cp/pt.c:2691 + #, c-format + msgid " but %d required" + msgstr "" + + #: cp/pt.c:2759 + #, fuzzy + msgid "`%T' is not a template type" + msgstr "`%s' is geen iterator" + + #: cp/pt.c:2775 + #, fuzzy + msgid "previous declaration `%D'" + msgstr "eerdere declaratie van `%s'" + + #: cp/pt.c:2776 + #, fuzzy, c-format + msgid "used %d template parameter%s instead of %d" + msgstr "meerdere parameters hebben de naam `%s'" + + #: cp/pt.c:2792 + #, fuzzy + msgid "template parameter `%#D'" + msgstr "meerdere parameters hebben de naam `%s'" + + #: cp/pt.c:2793 + #, fuzzy + msgid "redeclared here as `%#D'" + msgstr "ongeldige naam `%s'" + + #. We have in [temp.param]: + #. + #. A template-parameter may not be given default arguments + #. by two different declarations in the same scope. + #: cp/pt.c:2803 + #, fuzzy + msgid "redefinition of default argument for `%#D'" + msgstr "herdefinitie van `struct %s'" + + #: cp/pt.c:2804 + #, fuzzy + msgid " original definition appeared here" + msgstr "functie-definitie als `typdef' gedeclareerd" + + #: cp/pt.c:2897 + #, fuzzy, c-format + msgid "`%E' is not a valid template argument" + msgstr "`%s' is geen iterator" + + #: cp/pt.c:2901 + msgid "it must be the address of a function with external linkage" + msgstr "" + + #: cp/pt.c:2903 + msgid "it must be the address of an object with external linkage" + msgstr "" + + #: cp/pt.c:2907 + msgid "it must be a pointer-to-member of the form `&X::Y'" + msgstr "" + + #: cp/pt.c:2918 + #, c-format + msgid "string literal %E is not a valid template argument because it is the address of an object with static linkage" + msgstr "" + + #: cp/pt.c:2930 + #, c-format + msgid "address of non-extern `%E' cannot be used as template argument" + msgstr "" + + #: cp/pt.c:2941 + #, c-format + msgid "non-constant `%E' cannot be used as template argument" + msgstr "" + + #: cp/pt.c:2948 + #, c-format + msgid "object `%E' cannot be used as template argument" + msgstr "" + + #: cp/pt.c:3328 + #, c-format + msgid "to refer to a type member of a template parameter, use `typename %E'" + msgstr "" + + #: cp/pt.c:3341 cp/pt.c:3357 cp/pt.c:3396 + msgid "type/value mismatch at argument %d in template parameter list for `%D'" + msgstr "" + + #: cp/pt.c:3344 + msgid " expected a constant of type `%T', got `%T'" + msgstr "" + + #: cp/pt.c:3348 + #, c-format + msgid " expected a type, got `%E'" + msgstr "" + + #: cp/pt.c:3360 + msgid " expected a type, got `%T'" + msgstr "" + + #: cp/pt.c:3362 + msgid " expected a class template, got `%T'" + msgstr "" + + #: cp/pt.c:3398 + msgid " expected a template of type `%D', got `%D'" + msgstr "" + + #: cp/pt.c:3420 + msgid "template-argument `%T' uses anonymous type" + msgstr "" + + #: cp/pt.c:3423 + msgid "template-argument `%T' uses local type `%T'" + msgstr "" + + #: cp/pt.c:3458 + msgid "could not convert template argument `%E' to `%T'" + msgstr "" + + #: cp/pt.c:3502 + #, c-format + msgid "wrong number of template arguments (%d, should be %d)" + msgstr "" + + #: cp/pt.c:3506 + #, fuzzy + msgid "provided for `%D'" + msgstr "eerdere grant voor `%s'" + + # Ik weet het, 'alleen-lezen' is lelijk, maar het is de min of meer geijkte vertaling. + #: cp/pt.c:3553 + #, fuzzy, c-format + msgid "template argument %d is invalid" + msgstr "argument %d is alleen-lezen" + + #: cp/pt.c:3785 + msgid "non-template used as template" + msgstr "" + + #: cp/pt.c:3903 + #, fuzzy + msgid "`%T' is not a template" + msgstr "`%s' is geen iterator" + + #: cp/pt.c:3916 + msgid "non-template type `%T' used as a template" + msgstr "" + + #: cp/pt.c:3918 + #, fuzzy + msgid "for template declaration `%D'" + msgstr "lege declaratie" + + #: cp/pt.c:4481 + msgid "template instantiation depth exceeds maximum of %d (use -ftemplate-depth-NN to increase the maximum) instantiating `%D'" + msgstr "" + + #: cp/pt.c:4916 + msgid "ambiguous class template instantiation for `%#T'" + msgstr "" + + #: cp/pt.c:4923 + msgid "%s %+#T" + msgstr "" + + #: cp/pt.c:5942 cp/pt.c:6056 + msgid "instantiation of `%D' as type `%T'" + msgstr "" + + #: cp/pt.c:6098 + #, fuzzy + msgid "invalid parameter type `%T'" + msgstr "ongeldige operand voor %p-code" + + #: cp/pt.c:6100 + #, fuzzy + msgid "in declaration `%D'" + msgstr "herdeclaratie van `%s'" + + #: cp/pt.c:6175 + msgid "creating pointer to member function of non-class type `%T'" + msgstr "" + + #: cp/pt.c:6338 + msgid "creating array with size zero" + msgstr "" + + #: cp/pt.c:6352 + #, c-format + msgid "creating array with size zero (`%E')" + msgstr "" + + #: cp/pt.c:6590 + msgid "forming reference to void" + msgstr "" + + #: cp/pt.c:6592 + msgid "forming %s to reference type `%T'" + msgstr "" + + #: cp/pt.c:6630 + msgid "creating pointer to member of non-class type `%T'" + msgstr "" + + #: cp/pt.c:6637 + msgid "creating pointer to member reference type `%T'" + msgstr "" + + #: cp/pt.c:6715 + #, fuzzy + msgid "creating array of `%T'" + msgstr "doorgeven van argument %d van `%s'" + + #: cp/pt.c:6761 + #, fuzzy + msgid "`%T' is not a class, struct, or union type" + msgstr "`%s' is geen bestand, pipe of tty" + + #: cp/pt.c:6873 + #, c-format + msgid "use of `%s' in template" + msgstr "" + + #: cp/pt.c:7630 + msgid "type `%T' composed from a local class is not a valid template-argument" + msgstr "" + + #: cp/pt.c:7631 + msgid " trying to instantiate `%D'" + msgstr "" + + #: cp/pt.c:8061 + msgid "incomplete type unification" + msgstr "" + + #: cp/pt.c:9016 + #, c-format + msgid "use of `%s' in template type unification" + msgstr "" + + #: cp/pt.c:9438 cp/pt.c:9506 + msgid "explicit instantiation of non-template `%#D'" + msgstr "" + + #: cp/pt.c:9454 cp/pt.c:9501 + msgid "no matching template for `%D' found" + msgstr "" + + #: cp/pt.c:9460 + #, fuzzy + msgid "explicit instantiation of `%#D'" + msgstr "eerdere impliciete declaratie van `%s'" + + #. [temp.spec] + #. + #. No program shall both explicitly instantiate and explicitly + #. specialize a template. + #: cp/pt.c:9477 + msgid "explicit instantiation of `%#D' after" + msgstr "" + + #: cp/pt.c:9478 cp/pt.c:9615 + #, fuzzy + msgid "explicit specialization here" + msgstr "initialisatie" + + #: cp/pt.c:9493 + #, fuzzy + msgid "duplicate explicit instantiation of `%#D'" + msgstr "herhaalde definitie `%s'" + + #: cp/pt.c:9518 + msgid "ISO C++ forbids the use of `extern' on explicit instantiations" + msgstr "" + + #: cp/pt.c:9522 cp/pt.c:9600 + msgid "storage class `%D' applied to template instantiation" + msgstr "" + + #: cp/pt.c:9567 + msgid "explicit instantiation of non-template type `%T'" + msgstr "" + + #: cp/pt.c:9581 + msgid "explicit instantiation of `%#T' before definition of template" + msgstr "" + + #: cp/pt.c:9589 + #, c-format + msgid "ISO C++ forbids the use of `%s' on explicit instantiations" + msgstr "" + + #: cp/pt.c:9614 + msgid "explicit instantiation of `%#T' after" + msgstr "" + + #: cp/pt.c:9632 + #, fuzzy + msgid "duplicate explicit instantiation of `%#T'" + msgstr "herhaalde definitie `%s'" + + #: cp/pt.c:9973 + msgid "explicit instantiation of `%D' but no definition available" + msgstr "" + + #: cp/pt.c:10345 + msgid "`%#T' is not a valid type for a template constant parameter" + msgstr "" + + #: cp/repo.c:272 + msgid "-frepo must be used with -c" + msgstr "" + + #: cp/repo.c:366 + #, c-format + msgid "mysterious repository information in %s" + msgstr "" + + #: cp/repo.c:381 + #, c-format + msgid "can't create repository information file `%s'" + msgstr "" + + #: cp/rtti.c:200 + msgid "cannot use typeid with -fno-rtti" + msgstr "" + + #: cp/rtti.c:206 + msgid "must #include before using typeid" + msgstr "" + + #: cp/rtti.c:280 + msgid "cannot create type information for type `%T' because its size is variable" + msgstr "" + + #: cp/rtti.c:525 cp/rtti.c:539 + msgid "dynamic_cast of `%#D' to `%#T' can never succeed" + msgstr "" + + #: cp/rtti.c:614 + msgid "cannot dynamic_cast `%E' (of type `%#T') to type `%#T' (%s)" + msgstr "" + + #: cp/search.c:340 + msgid "`%T' is an inaccessible base of `%T'" + msgstr "" + + #: cp/search.c:350 + msgid "`%T' is an ambiguous base of `%T'" + msgstr "" + + #: cp/search.c:1826 + msgid "adjusting pointers for covariant returns" + msgstr "" + + #: cp/search.c:1830 cp/search.c:1837 + #, fuzzy + msgid "invalid covariant return type for `%#D'" + msgstr "ongeldige registernaam voor `%s'" + + #: cp/search.c:1831 + msgid " overriding `%#D' (must be pointer or reference to class)" + msgstr "" + + #: cp/search.c:1838 + msgid " overriding `%#D' (must use pointer or reference)" + msgstr "" + + #: cp/search.c:1843 + #, fuzzy + msgid "conflicting return type specified for `%#D'" + msgstr "conflicterende types voor `%s'" + + #: cp/search.c:1844 + msgid " overriding `%#D'" + msgstr "" + + #: cp/search.c:1853 + #, fuzzy + msgid "looser throw specifier for `%#F'" + msgstr "'long' of 'short' opgegeven bij 'char' voor `%s'" + + #: cp/search.c:1854 + msgid " overriding `%#F'" + msgstr "" + + #. A static member function cannot match an inherited + #. virtual member function. + #: cp/search.c:1944 + #, fuzzy + msgid "`%#D' cannot be declared" + msgstr "`%.*s' is niet gedefinieerd" + + #: cp/search.c:1945 + msgid " since `%#D' declared in base class" + msgstr "" + + #: cp/search.c:2130 + msgid "`%#D' needs a final overrider" + msgstr "" + + #: cp/semantics.c:903 + #, fuzzy, c-format + msgid "type of asm operand `%E' could not be determined" + msgstr "type van parameter `%s' is niet gedeclareerd" + + #: cp/semantics.c:1045 + #, fuzzy + msgid "ISO C++ does not permit named return values" + msgstr "ANSI C staat het gebruik van `varargs.h' niet toe" + + #: cp/semantics.c:1054 + msgid "return identifier `%D' already in place" + msgstr "" + + #: cp/semantics.c:1062 + msgid "can't redefine default return value for constructors" + msgstr "" + + #: cp/semantics.c:1129 + #, fuzzy + msgid "base initializer for `%T'" + msgstr "ongeldige beginwaarde voor veld `%s'" + + #: cp/semantics.c:1131 + msgid " will be re-ordered to precede member initializations" + msgstr "" + + #: cp/semantics.c:1319 + msgid "`this' is unavailable for static member functions" + msgstr "`this' is niet beschikbaar in static member-funties" + + #: cp/semantics.c:1325 + msgid "invalid use of `this' in non-member function" + msgstr "" + + #: cp/semantics.c:1327 + msgid "invalid use of `this' at top level" + msgstr "ongeldig gebruik van `this' op hoogste niveau" + + #: cp/semantics.c:1365 + msgid "calling type `%T' like a method" + msgstr "" + + #: cp/semantics.c:1401 + msgid "destructor specifier `%T::~%T()' must have matching names" + msgstr "" + + #: cp/semantics.c:1407 + #, fuzzy + msgid "`%E' is not of type `%T'" + msgstr "`%c' optie gebruikt bij type `%c'" + + #: cp/semantics.c:1619 + msgid "template type parameters must use the keyword `class' or `typename'" + msgstr "" + + #: cp/semantics.c:1678 + #, fuzzy + msgid "definition of `%#T' inside template parameter list" + msgstr "de declaratie van `%s' verbergt een symbool uit de parameterlijst" + + #: cp/semantics.c:1694 + #, fuzzy + msgid "invalid definition of qualified type `%T'" + msgstr "ongeldig gebruik van het niet gedefinieerde type `%s %s'" + + #: cp/semantics.c:2046 + msgid "base class `%T' has cv qualifiers" + msgstr "" + + #: cp/semantics.c:2079 + #, fuzzy + msgid "multiple declarators in template declaration" + msgstr "meerdere opslagklassen in declaratie van `%s'" + + #: cp/spew.c:245 + #, c-format + msgid "identifier name `%s' conflicts with GNU C++ internal naming strategy" + msgstr "" + + #: cp/spew.c:1020 cp/spew.c:1292 + msgid "parse error at end of saved function text" + msgstr "" + + #: cp/spew.c:1062 + msgid "parse error in method specification" + msgstr "" + + #: cp/spew.c:1104 + msgid "function body for constructor missing" + msgstr "" + + #: cp/spew.c:1371 + msgid "circular dependency in default args of `%#D'" + msgstr "" + + # Is the %s the argument, or is it 'of' the argument? + #: cp/spew.c:1435 + #, fuzzy + msgid "invalid type `%T' for default argument to `%T'" + msgstr "ongeldig type-argument `%s'" + + #: cp/spew.c:1495 + #, c-format + msgid "%s before `%s'" + msgstr "%s voor `%s'" + + #: cp/spew.c:1497 + #, fuzzy, c-format + msgid "%s before `%c'" + msgstr "%s voor `%s'" + + #: cp/spew.c:1499 + #, fuzzy, c-format + msgid "%s before `\\%o'" + msgstr "%s voor `%s'" + + #: cp/spew.c:1502 + #, fuzzy, c-format + msgid "%s before `%s' token" + msgstr "%s voor `%s'" + + #: cp/tree.c:224 + #, c-format + msgid "non-lvalue in %s" + msgstr "" + + #: cp/tree.c:536 + #, fuzzy + msgid "`%T' cannot be `restrict'-qualified" + msgstr "`%s' kan niet statisch gealloceerd worden" + + #: cp/tree.c:547 + msgid "`%T' cannot be `const'-, `volatile'-, or `restrict'-qualified" + msgstr "" + + #: cp/tree.c:1888 + #, fuzzy, c-format + msgid "`%s' attribute can only be applied to Java class definitions" + msgstr "het `%s' attribuut heeft enkel betekenis voor functies" + + #: cp/tree.c:1918 + #, fuzzy, c-format + msgid "`%s' attribute can only be applied to class definitions" + msgstr "het `%s' attribuut heeft enkel betekenis voor functies" + + #: cp/tree.c:1924 + #, c-format + msgid "`%s' is obsolete; g++ vtables are now COM-compatible by default" + msgstr "" + + #: cp/tree.c:1949 + msgid "requested init_priority is not an integer constant" + msgstr "" + + #: cp/tree.c:1970 + #, c-format + msgid "can only use `%s' attribute on file-scope definitions of objects of class type" + msgstr "" + + #: cp/tree.c:1978 + msgid "requested init_priority is out of range" + msgstr "" + + #: cp/tree.c:1988 + msgid "requested init_priority is reserved for internal use" + msgstr "" + + #: cp/tree.c:1998 + #, fuzzy, c-format + msgid "`%s' attribute is not supported on this platform" + msgstr "sectie-attributen worden niet ondersteund op dit doelsysteem" + + #: cp/typeck.c:480 + #, fuzzy, c-format + msgid "ISO C++ forbids %s between pointer of type `void *' and pointer-to-function" + msgstr "pointer van type `void *' gebruikt in aftrekking" + + #: cp/typeck.c:501 + #, fuzzy + msgid "%s between distinct pointer types `%T' and `%T' lacks a cast" + msgstr "een cast ontbreekt bij vergelijking van ongelijke pointer-types" + + #: cp/typeck.c:1485 + msgid "ISO C++ prohibits conversion from `%#T' to `(...)'" + msgstr "" + + #: cp/typeck.c:1555 + #, fuzzy + msgid "ISO C++ forbids applying `sizeof' to a function type" + msgstr "ANSI C verbiedt een gekwalificeerd functietype" + + #: cp/typeck.c:1561 + msgid "ISO C++ forbids applying `sizeof' to a member function" + msgstr "" + + #: cp/typeck.c:1567 + msgid "ISO C++ forbids applying `sizeof' to type `void' which is an incomplete type" + msgstr "" + + #: cp/typeck.c:1581 + #, fuzzy + msgid "`sizeof' applied to non-static member" + msgstr "`sizeof' toegepast op een bitveld" + + #: cp/typeck.c:1586 + #, fuzzy + msgid "`sizeof' applied to incomplete type `%T'" + msgstr "sizeof toegepast op een onvolledig type" + + #: cp/typeck.c:1616 + msgid "sizeof applied to a bit-field" + msgstr "" + + #: cp/typeck.c:1619 + msgid "ISO C++ forbids applying `sizeof' to an expression of function type" + msgstr "" + + #: cp/typeck.c:1766 + msgid "invalid use of non-lvalue array" + msgstr "ongeldig gebruik van array die geen lvalue is" + + #: cp/typeck.c:1872 + msgid "deprecated conversion from string constant to `%T'" + msgstr "" + + #: cp/typeck.c:1890 + msgid "request for member `%T::%D' in expression of non-aggregate type `%T'" + msgstr "" + + #: cp/typeck.c:2083 + msgid "destructor specifier `%T::~%T' must have matching names" + msgstr "" + + #: cp/typeck.c:2089 + msgid "type `%T' has no destructor" + msgstr "" + + #: cp/typeck.c:2106 cp/typeck.c:2188 + #, fuzzy + msgid "invalid use of type decl `%#D' as expression" + msgstr "ongeldig gebruik van een void-expressie" + + #: cp/typeck.c:2111 + #, fuzzy + msgid "invalid use of template `%#D' as expression" + msgstr "ongeldig gebruik van een void-expressie" + + #: cp/typeck.c:2179 + #, fuzzy + msgid "`%#T' has no member named `%D'" + msgstr "union heeft geen lid dat `%s' heet" + + #: cp/typeck.c:2223 + msgid "invalid reference to NULL ptr, use ptr-to-member instead" + msgstr "" + + #. A pointer to incomplete type (other than cv void) can be + #. dereferenced [expr.unary.op]/1 + #: cp/typeck.c:2349 + #, fuzzy + msgid "`%T' is not a pointer-to-object type" + msgstr "`%s' is geen iterator" + + #: cp/typeck.c:2376 + #, c-format + msgid "invalid use of `%s' on pointer to member" + msgstr "" + + #: cp/typeck.c:2382 + msgid "invalid type argument" + msgstr "" + + #: cp/typeck.c:2485 + #, fuzzy + msgid "ISO C++ forbids subscripting non-lvalue array" + msgstr "ANSI C verbiedt het gebruik van subscripts bij een array die geen lvalue is" + + #: cp/typeck.c:2496 + msgid "subscripting array declared `register'" + msgstr "" + + #: cp/typeck.c:2671 cp/typeck.c:2821 + msgid "pointer to member function called, but not in class scope" + msgstr "" + + #: cp/typeck.c:2695 + #, fuzzy + msgid "object missing in call to method `%D'" + msgstr "kan oproep van `%s' niet inline maken" + + #: cp/typeck.c:2739 + msgid "function `%D' declared overloaded, but no definitions appear with which to resolve it?!?" + msgstr "" + + #: cp/typeck.c:2819 + msgid "invalid call to member function needing `this' in static member function scope" + msgstr "" + + #: cp/typeck.c:3003 + msgid "ISO C++ forbids calling `::main' from within program" + msgstr "" + + #: cp/typeck.c:3028 + #, c-format + msgid "must use .* or ->* to call pointer-to-member function in `%E (...)'" + msgstr "" + + #: cp/typeck.c:3041 + #, fuzzy, c-format + msgid "`%E' cannot be used as a function" + msgstr "veld `%s' als een functie gedeclareerd" + + #: cp/typeck.c:3166 + #, fuzzy + msgid "too many arguments to %s `%+#D'" + msgstr "teveel argumenten voor functie `%s'" + + #: cp/typeck.c:3207 + msgid "parameter type of called function is incomplete" + msgstr "" + + #: cp/typeck.c:3274 + #, fuzzy + msgid "too few arguments to %s `%+#D'" + msgstr "te weinig argumenten voor functie `%s'" + + #: cp/typeck.c:3402 cp/typeck.c:3412 + msgid "assuming cast to type `%T' from overloaded function" + msgstr "" + + #: cp/typeck.c:3472 + #, fuzzy, c-format + msgid "division by zero in `%E / 0'" + msgstr "deling door nul in `#if'" + + #: cp/typeck.c:3474 + #, fuzzy, c-format + msgid "division by zero in `%E / 0.'" + msgstr "deling door nul in `#if'" + + #: cp/typeck.c:3529 + #, fuzzy, c-format + msgid "division by zero in `%E %% 0'" + msgstr "deling door nul in `#if'" + + #: cp/typeck.c:3531 + #, fuzzy, c-format + msgid "division by zero in `%E %% 0.'" + msgstr "deling door nul in `#if'" + + #: cp/typeck.c:3611 + #, c-format + msgid "%s rotate count is negative" + msgstr "" + + #: cp/typeck.c:3614 + #, c-format + msgid "%s rotate count >= width of type" + msgstr "" + + #: cp/typeck.c:3645 cp/typeck.c:3650 cp/typeck.c:3741 cp/typeck.c:3746 + #, fuzzy + msgid "ISO C++ forbids comparison between pointer and integer" + msgstr "vergelijking tussen pointer en integer" + + #: cp/typeck.c:3926 + #, fuzzy + msgid "comparison between types `%#T' and `%#T'" + msgstr "vergelijking tussen pointer en integer" + + #: cp/typeck.c:3962 + #, fuzzy + msgid "comparison between signed and unsigned integer expressions" + msgstr "vergelijking tussen signed en unsigned" + + #: cp/typeck.c:4027 + #, fuzzy + msgid "invalid operands of types `%T' and `%T' to binary `%O'" + msgstr "ongeldige operanden voor binaire %s-operator" + + #. Some sort of arithmetic operation involving NULL was + #. performed. Note that pointer-difference and pointer-addition + #. have already been handled above, and so we don't end up here in + #. that case. + #: cp/typeck.c:4049 + #, fuzzy + msgid "NULL used in arithmetic" + msgstr "pointer naar functie gebruikt in rekensom" + + #: cp/typeck.c:4101 + #, fuzzy + msgid "ISO C++ forbids using pointer of type `void *' in pointer arithmetic" + msgstr "pointer van type `void *' gebruikt in rekensom" + + #: cp/typeck.c:4107 + #, fuzzy + msgid "ISO C++ forbids using a pointer-to-function in pointer arithmetic" + msgstr "pointer naar functie gebruikt in rekensom" + + #: cp/typeck.c:4113 + #, fuzzy + msgid "ISO C++ forbids using a pointer to member function in pointer arithmetic" + msgstr "pointer naar functie gebruikt in rekensom" + + #: cp/typeck.c:4119 + msgid "ISO C++ forbids using pointer to a member in pointer arithmetic" + msgstr "" + + #: cp/typeck.c:4190 + #, fuzzy + msgid "ISO C++ forbids using pointer of type `void *' in subtraction" + msgstr "pointer van type `void *' gebruikt in aftrekking" + + #: cp/typeck.c:4192 + #, fuzzy + msgid "ISO C++ forbids using pointer to a function in subtraction" + msgstr "pointer naar functie gebruikt in aftrekking" + + #: cp/typeck.c:4194 + #, fuzzy + msgid "ISO C++ forbids using pointer to a method in subtraction" + msgstr "pointer naar functie gebruikt in aftrekking" + + #: cp/typeck.c:4196 + msgid "ISO C++ forbids using pointer to a member in subtraction" + msgstr "" + + # 'Arithmetic'?? 'rekensom' is wel correct, maar het klinkt zo stom. + #: cp/typeck.c:4208 + #, fuzzy + msgid "invalid use of a pointer to an incomplete type in pointer arithmetic" + msgstr "rekensom met pointer naar onvolledig type" + + #: cp/typeck.c:4245 + #, fuzzy + msgid "attempt to take address of bit-field structure member `%D'" + msgstr "poging om het adres te nemen van lid `%s' van een bitveld-structure" + + #: cp/typeck.c:4322 + msgid "taking address of temporary" + msgstr "" + + #: cp/typeck.c:4524 + #, fuzzy, c-format + msgid "ISO C++ forbids %sing an enum" + msgstr "ANSI C verbiedt case-bereiken" + + #: cp/typeck.c:4536 + #, fuzzy + msgid "cannot %s a pointer to incomplete type `%T'" + msgstr "parameter `%s' wijst naar een onvolledig type" + + #: cp/typeck.c:4543 + #, fuzzy + msgid "ISO C++ forbids %sing a pointer of type `%T'" + msgstr "ANSI C verbiedt het casten van een niet-scalair naar hetzelfde type" + + #: cp/typeck.c:4568 + msgid "cast to non-reference type used as lvalue" + msgstr "" + + #: cp/typeck.c:4602 + #, fuzzy + msgid "invalid use of `--' on bool variable `%D'" + msgstr "ongeldig gebruik van array die geen lvalue is" + + #. ARM $3.4 + #: cp/typeck.c:4635 + #, fuzzy + msgid "ISO C++ forbids taking address of function `::main'" + msgstr "ANSI C verbiedt het adres van een gecaste expressie" + + #. An expression like &memfn. + #: cp/typeck.c:4702 + msgid "ISO C++ forbids taking the address of an unqualified non-static member function to form a pointer to member function. Say `&%T::%D'" + msgstr "" + + #: cp/typeck.c:4704 + msgid "ISO C++ forbids taking the address of a bound member function to form a pointer to member function. Say `&%T::%D'" + msgstr "" + + #: cp/typeck.c:4728 + #, fuzzy + msgid "ISO C++ forbids taking the address of a cast to a non-lvalue expression" + msgstr "ANSI C verbiedt het adres van een gecaste expressie" + + #: cp/typeck.c:4744 + msgid "unary `&'" + msgstr "" + + #: cp/typeck.c:4864 + msgid "taking address of destructor" + msgstr "" + + #: cp/typeck.c:4877 + #, fuzzy + msgid "taking address of bound pointer-to-member expression" + msgstr "ongeldig gebruik van een void-expressie" + + #: cp/typeck.c:4893 + msgid "cannot create pointer to reference member `%D'" + msgstr "" + + #: cp/typeck.c:4961 + msgid "cannot take the address of `this', which is an rvalue expression" + msgstr "" + + #: cp/typeck.c:4977 + msgid "address requested for `%D', which is declared `register'" + msgstr "" + + #: cp/typeck.c:5181 + msgid "static_cast from type `%T' to type `%T' casts away constness" + msgstr "" + + #: cp/typeck.c:5189 + msgid "invalid static_cast from type `%T' to type `%T'" + msgstr "" + + #: cp/typeck.c:5228 + msgid "invalid reinterpret_cast of an rvalue expression of type `%T' to type `%T'" + msgstr "" + + #: cp/typeck.c:5248 + msgid "reinterpret_cast from `%T' to `%T' loses precision" + msgstr "" + + #: cp/typeck.c:5261 + msgid "reinterpret_cast from `%T' to `%T' casts away const (or volatile)" + msgstr "" + + #: cp/typeck.c:5270 + #, fuzzy + msgid "ISO C++ forbids casting between pointer-to-function and pointer-to-object" + msgstr "ANSI C verbiedt voorwaardelijke expressies tussen 0 en een functiepointer" + + #: cp/typeck.c:5276 + msgid "invalid reinterpret_cast from type `%T' to type `%T'" + msgstr "" + + #: cp/typeck.c:5303 + msgid "invalid use of const_cast with type `%T', which is not a pointer, reference, nor a pointer-to-data-member type" + msgstr "" + + #: cp/typeck.c:5306 + msgid "invalid use of const_cast with type `%T', which is a pointer or reference to a function type" + msgstr "" + + #: cp/typeck.c:5329 + msgid "invalid const_cast of an rvalue of type `%T' to type `%T'" + msgstr "" + + #: cp/typeck.c:5345 + msgid "invalid const_cast from type `%T' to type `%T'" + msgstr "" + + #: cp/typeck.c:5387 cp/typeck.c:5392 + #, fuzzy + msgid "ISO C++ forbids casting to an array type `%T'" + msgstr "ANSI C verbiedt casts naar een union-type" + + #: cp/typeck.c:5400 + #, fuzzy + msgid "invalid cast to function type `%T'" + msgstr "ongeldige opslagklasse voor functie `%s'" + + #: cp/typeck.c:5452 + #, fuzzy + msgid "cast from `%T' to `%T' discards qualifiers from pointer target type" + msgstr "cast laat qualifiers van doeltype van pointer vallen" + + #: cp/typeck.c:5498 + #, fuzzy + msgid "cast from `%T' to `%T' increases required alignment of target type" + msgstr "cast verhoogt het benodigde alignment van het doeltype" + + #: cp/typeck.c:5667 + msgid " in evaluation of `%Q(%#T, %#T)'" + msgstr "" + + #: cp/typeck.c:5709 + #, fuzzy + msgid "ISO C++ forbids cast to non-reference type used as lvalue" + msgstr "ANSI C verbiedt casts naar een union-type" + + #: cp/typeck.c:5782 + #, fuzzy + msgid "incompatible types in assignment of `%T' to `%T'" + msgstr "incompatibel type voor argument %d van `%s'" + + #: cp/typeck.c:5789 + #, fuzzy + msgid "ISO C++ forbids assignment of arrays" + msgstr "ANSI C verbiedt array `%s' met lengte 0" + + #: cp/typeck.c:5932 + msgid " in pointer to member function conversion" + msgstr "" + + #: cp/typeck.c:5940 + msgid " in pointer to member conversion" + msgstr "" + + #. This is a reinterpret cast, we choose to do nothing. + #: cp/typeck.c:5951 cp/typeck.c:5970 + msgid "pointer to member cast via virtual base `%T' of `%T'" + msgstr "" + + #: cp/typeck.c:5974 + msgid "pointer to member conversion via virtual base `%T' of `%T'" + msgstr "" + + #: cp/typeck.c:6044 + msgid "invalid conversion to type `%T' from type `%T'" + msgstr "" + + #: cp/typeck.c:6209 + msgid "passing NULL used for non-pointer %s %P of `%D'" + msgstr "" + + #: cp/typeck.c:6212 + msgid "%s to non-pointer type `%T' from NULL" + msgstr "" + + #: cp/typeck.c:6220 + #, fuzzy + msgid "passing `%T' for %s %P of `%D'" + msgstr "doorgeven van argument %d van `%s'" + + #: cp/typeck.c:6223 + msgid "%s to `%T' from `%T'" + msgstr "" + + #: cp/typeck.c:6233 + msgid "passing negative value `%E' for %s %P of `%D'" + msgstr "" + + #: cp/typeck.c:6236 + msgid "%s of negative value `%E' to `%T'" + msgstr "" + + #: cp/typeck.c:6323 + msgid "cannot convert `%T' to `%T' for argument `%P' to `%D'" + msgstr "" + + #: cp/typeck.c:6326 + msgid "cannot convert `%T' to `%T' in %s" + msgstr "" + + #: cp/typeck.c:6413 cp/typeck.c:6415 + #, fuzzy + msgid "in passing argument %P of `%+D'" + msgstr "doorgeven van argument %d van `%s'" + + #: cp/typeck.c:6529 + msgid "returning reference to temporary" + msgstr "" + + #: cp/typeck.c:6536 + msgid "reference to non-lvalue returned" + msgstr "" + + #: cp/typeck.c:6548 + #, fuzzy + msgid "reference to local variable `%D' returned" + msgstr "adres van globale registervariabele `%s' gevraagd" + + #: cp/typeck.c:6551 + #, fuzzy + msgid "address of local variable `%D' returned" + msgstr "adres van globale registervariabele `%s' gevraagd" + + #: cp/typeck.c:6582 + msgid "returning a value from a destructor" + msgstr "" + + #. If a return statement appears in a handler of the + #. function-try-block of a constructor, the program is ill-formed. + #: cp/typeck.c:6590 + msgid "cannot return from a handler of a function-try-block of a constructor" + msgstr "" + + #. You can't return a value from a constructor. + #: cp/typeck.c:6593 + msgid "returning a value from a constructor" + msgstr "" + + #: cp/typeck.c:6610 + #, fuzzy + msgid "return-statement with no value, in function declared with a non-void return type" + msgstr "`return' zonder waarde in een functie die een niet-void waarde teruggeeft" + + #: cp/typeck.c:6626 + #, fuzzy + msgid "return-statement with a value, in function declared with a void return type" + msgstr "`return' met waarde in een functie die void teruggeeft" + + #: cp/typeck.c:6647 + msgid "`operator new' must not return NULL unless it is declared `throw()' (or -fcheck-new is in effect)" + msgstr "" + + #: cp/typeck2.c:54 + #, fuzzy + msgid "type `%T' is not a base type for type `%T'" + msgstr "`%s' is geen bestand, pipe of tty" + + #: cp/typeck2.c:151 + msgid "cannot declare variable `%D' to be of type `%T'" + msgstr "" + + #: cp/typeck2.c:154 + msgid "cannot declare parameter `%D' to be of type `%T'" + msgstr "" + + #: cp/typeck2.c:157 + msgid "cannot declare field `%D' to be of type `%T'" + msgstr "" + + #: cp/typeck2.c:161 + #, fuzzy + msgid "invalid return type for member function `%#D'" + msgstr "de terugkeerwaarde van een functie kan geen funtie zijn" + + #: cp/typeck2.c:163 + #, fuzzy + msgid "invalid return type for function `%#D'" + msgstr "ongeldige opslagklasse voor functie `%s'" + + #: cp/typeck2.c:166 + msgid "cannot allocate an object of type `%T'" + msgstr "" + + #: cp/typeck2.c:173 + msgid " because the following virtual functions are abstract:" + msgstr "" + + #: cp/typeck2.c:175 + msgid "\t%#D" + msgstr "" + + #: cp/typeck2.c:178 + msgid " since type `%T' has abstract virtual functions" + msgstr "" + + #: cp/typeck2.c:213 + #, fuzzy + msgid "invalid use of undefined type `%#T'" + msgstr "ongeldig gebruik van het niet gedefinieerde type `%s %s'" + + #: cp/typeck2.c:214 + #, fuzzy + msgid "forward declaration of `%#T'" + msgstr "herdeclaratie van `%s'" + + #: cp/typeck2.c:218 + #, fuzzy + msgid "invalid use of `%T'" + msgstr "ongeldig gebruik van `restrict'" + + #: cp/typeck2.c:232 + msgid "invalid use of member (did you forget the `&' ?)" + msgstr "" + + #: cp/typeck2.c:236 + #, fuzzy + msgid "invalid use of template type parameter" + msgstr "ongeldig gebruik van onvolledige typedef `%s'" + + #: cp/typeck2.c:243 + msgid "address of overloaded function with no contextual type information" + msgstr "" + + #: cp/typeck2.c:245 + msgid "overloaded function with no contextual type information" + msgstr "" + + #: cp/typeck2.c:247 + msgid "insufficient contextual information to determine type" + msgstr "" + + #: cp/typeck2.c:270 + #, fuzzy, c-format + msgid "internal error #%d" + msgstr "interne fout" + + #: cp/typeck2.c:325 + msgid "constructor syntax used, but no constructor declared for type `%T'" + msgstr "" + + #: cp/typeck2.c:335 + msgid "initializer list construction invalid for derived class object `%D'" + msgstr "" + + #: cp/typeck2.c:337 + msgid "initializer list construction invalid for polymorphic class object `%D'" + msgstr "" + + #: cp/typeck2.c:340 cp/typeck2.c:346 cp/typeck2.c:352 + #, fuzzy + msgid "initializer list construction invalid for `%D'" + msgstr "beginwaarde legt grootte van `%s' niet vast" + + #: cp/typeck2.c:341 + msgid "due to the presence of a constructor" + msgstr "" + + #: cp/typeck2.c:347 cp/typeck2.c:353 + #, fuzzy + msgid "due to non-public access of member `%D'" + msgstr "herhaald lid `%s'" + + #: cp/typeck2.c:365 + msgid "comma expression used to initialize return value" + msgstr "" + + #: cp/typeck2.c:374 + msgid "cannot initialize arrays using this syntax" + msgstr "" + + #: cp/typeck2.c:436 + #, fuzzy + msgid "ISO C++ forbids non-constant aggregate initializer expressions" + msgstr "ANSI C verbiedt constructor-expressies" + + #: cp/typeck2.c:516 + msgid "initializing array with parameter list" + msgstr "" + + #: cp/typeck2.c:572 + msgid "initializer for scalar variable requires one element" + msgstr "" + + #: cp/typeck2.c:579 + #, fuzzy + msgid "braces around scalar initializer for `%T'" + msgstr "accolades rond scalaire beginwaarde" + + #: cp/typeck2.c:582 + #, fuzzy + msgid "ignoring extra initializers for `%T'" + msgstr "niet-constante beginwaarde voor `%s'" + + #: cp/typeck2.c:594 + #, fuzzy + msgid "variable-sized object of type `%T' may not be initialized" + msgstr "object van variabele lengte mag geen beginwaarde krijgen" + + #: cp/typeck2.c:604 + msgid "subobject of type `%T' must be initialized by constructor, not by `%E'" + msgstr "" + + #: cp/typeck2.c:670 + msgid "aggregate has a partly bracketed initializer" + msgstr "" + + #: cp/typeck2.c:700 cp/typeck2.c:801 + msgid "non-trivial labeled initializers" + msgstr "" + + #: cp/typeck2.c:717 + msgid "non-empty initializer for array of empty elements" + msgstr "" + + #: cp/typeck2.c:767 + msgid "initializer list for object of class with virtual base classes" + msgstr "" + + #: cp/typeck2.c:773 + msgid "initializer list for object of class with base classes" + msgstr "" + + #: cp/typeck2.c:779 + msgid "initializer list for object using virtual functions" + msgstr "" + + #: cp/typeck2.c:842 cp/typeck2.c:859 + #, fuzzy + msgid "missing initializer for member `%D'" + msgstr "ongeldige beginwaarde voor member `%s'" + + #: cp/typeck2.c:847 + #, fuzzy + msgid "uninitialized const member `%D'" + msgstr "ongeldige beginwaarde voor member `%s'" + + #: cp/typeck2.c:850 + #, fuzzy + msgid "member `%D' with uninitialized const fields" + msgstr "parameter `%s' krijgt beginwaarde" + + #: cp/typeck2.c:853 + #, fuzzy + msgid "member `%D' is uninitialized reference" + msgstr "parameter `%s' krijgt beginwaarde" + + #: cp/typeck2.c:896 + msgid "index value instead of field name in union initializer" + msgstr "" + + #: cp/typeck2.c:908 + #, fuzzy + msgid "no field `%D' in union being initialized" + msgstr "onbekend veld `%s' opgegeven in beginwaarde" + + #: cp/typeck2.c:916 + msgid "union `%T' with no named members cannot be initialized" + msgstr "" + + #: cp/typeck2.c:952 + msgid "excess elements in aggregate initializer" + msgstr "" + + #: cp/typeck2.c:1057 + msgid "circular pointer delegation detected" + msgstr "" + + #: cp/typeck2.c:1070 + #, fuzzy + msgid "base operand of `->' has non-pointer type `%T'" + msgstr "grootte van array `%s' is van een niet-integraal type" + + #: cp/typeck2.c:1084 + msgid "result of `operator->()' yields non-pointer result" + msgstr "" + + #: cp/typeck2.c:1086 + msgid "base operand of `->' is not a pointer" + msgstr "" + + #: cp/typeck2.c:1152 + msgid "`%E' cannot be used as a member pointer, since it is of type `%T'" + msgstr "" + + #: cp/typeck2.c:1159 + msgid "cannot apply member pointer `%E' to `%E', which is of non-aggregate type `%T'" + msgstr "" + + #: cp/typeck2.c:1168 + msgid "member type `%T::' incompatible with object type `%T'" + msgstr "" + + #: cp/typeck2.c:1205 + #, fuzzy + msgid "`%T' fails to be a typedef or built-in type" + msgstr "`%s' is geen typedef of ingebouwd type" + + #: cp/typeck2.c:1278 + #, c-format + msgid "ISO C++ forbids defining types within %s" + msgstr "" + + #: cp/xref.c:826 + #, c-format + msgid "can't create cross-reference file `%s'" + msgstr "" + + #. XXX Not i18n clean. + #: cp/cp-tree.h:3847 + #, c-format + msgid "%s is deprecated, please see the documentation for details" + msgstr "" + + #: cp/lang-options.h:29 + msgid "Do not obey access control semantics" + msgstr "" + + #: cp/lang-options.h:31 + msgid "Change when template instances are emitted" + msgstr "" + + #: cp/lang-options.h:36 + msgid "Check the return value of new" + msgstr "" + + #: cp/lang-options.h:39 + msgid "Reduce size of object files" + msgstr "" + + #: cp/lang-options.h:43 + msgid "Make string literals `char[]' instead of `const char[]'" + msgstr "" + + #: cp/lang-options.h:46 + msgid "Dump the entire translation unit to a file" + msgstr "" + + #: cp/lang-options.h:48 + #, fuzzy + msgid "Do not inline member functions by default" + msgstr "kan functie `main' niet inline maken" + + #: cp/lang-options.h:51 + msgid "Do not generate run time type descriptor information" + msgstr "" + + #: cp/lang-options.h:56 + msgid "Do not generate code to check exception specifications" + msgstr "" + + #: cp/lang-options.h:61 + msgid "Scope of for-init-statement vars extends outside" + msgstr "" + + #: cp/lang-options.h:64 + msgid "Do not recognize GNU defined keywords" + msgstr "" + + #: cp/lang-options.h:68 + msgid "Enable support for huge objects" + msgstr "" + + #: cp/lang-options.h:72 + #, fuzzy + msgid "Export functions even if they can be inlined" + msgstr "de terugkeerwaarde van een functie kan geen funtie zijn" + + #: cp/lang-options.h:75 + msgid "Only emit explicit template instatiations" + msgstr "" + + #: cp/lang-options.h:78 + msgid "Only emit explicit instatiations of inline templates" + msgstr "" + + #: cp/lang-options.h:84 + msgid "Don't pedwarn about uses of Microsoft extensions" + msgstr "" + + #: cp/lang-options.h:87 + msgid "Recognize and/bitand/bitor/compl/not/or/xor" + msgstr "" + + #: cp/lang-options.h:91 + msgid "Disable optional diagnostics" + msgstr "" + + #: cp/lang-options.h:93 + msgid "Downgrade conformance errors to warnings" + msgstr "" + + #: cp/lang-options.h:96 + msgid "Enable automatic template instantiation" + msgstr "" + + #: cp/lang-options.h:101 + msgid "Display statistics accumulated during compilation" + msgstr "" + + #: cp/lang-options.h:104 + msgid "Specify maximum template instantiation depth" + msgstr "" + + #: cp/lang-options.h:106 + msgid "Use __cxa_atexit to register destructors" + msgstr "" + + #: cp/lang-options.h:109 + msgid "Discard unused virtual functions" + msgstr "" + + #: cp/lang-options.h:112 + msgid "Implement vtables using thunks" + msgstr "" + + #: cp/lang-options.h:115 + msgid "Emit common-like symbols as weak symbols" + msgstr "" + + #: cp/lang-options.h:118 + msgid "Emit cross referencing information" + msgstr "" + + #: cp/lang-options.h:122 + msgid "Warn about inconsistent return types" + msgstr "" + + #: cp/lang-options.h:125 + msgid "Warn about overloaded virtual function names" + msgstr "" + + #: cp/lang-options.h:129 + msgid "Don't warn when all ctors/dtors are private" + msgstr "" + + #: cp/lang-options.h:131 + msgid "Warn about non virtual destructors" + msgstr "" + + #: cp/lang-options.h:134 + #, fuzzy + msgid "Warn when a function is declared extern, then inline" + msgstr "geneste functie `%s' is als `extern' gedeclareerd" + + #: cp/lang-options.h:137 + #, fuzzy + msgid "Warn when the compiler reorders code" + msgstr "incompatibele record-modus" + + #: cp/lang-options.h:140 + msgid "Warn when synthesis behavior differs from Cfront" + msgstr "" + + #: cp/lang-options.h:144 + msgid "Don't warn when type converting pointers to member functions" + msgstr "" + + #: cp/lang-options.h:146 + msgid "Warn about violations of Effective C++ style rules" + msgstr "" + + #: cp/lang-options.h:149 + #, fuzzy + msgid "Warn when overload promotes from unsigned to signed" + msgstr "vergelijking van gepromoveerde ~unsigned met unsigned" + + #: cp/lang-options.h:152 + msgid "Warn if a C style cast is used in a program" + msgstr "" + + #: cp/lang-options.h:156 + msgid "Don't warn when non-templatized friend functions are declared within a template" + msgstr "" + + #: cp/lang-options.h:159 + msgid "Don't announce deprecation of compiler features" + msgstr "" + + #: f/bad.c:386 + msgid "note:" + msgstr "" + + # Dit zou misschien beter 'warning' blijven + #: f/bad.c:390 + msgid "warning:" + msgstr "let op:" + + #: f/bad.c:394 + msgid "fatal:" + msgstr "" + + #: f/bad.c:436 + msgid "(continued):" + msgstr "" + + #: f/bad.c:486 f/bad.c:504 + #, c-format + msgid "[REPORT BUG!!] %" + msgstr "" + + #: f/bad.c:493 f/bad.c:525 + msgid "[REPORT BUG!!]" + msgstr "" + + #: f/com.c:3116 + msgid "ASSIGN'ed label cannot fit into `%A' at %0 -- using wider sibling" + msgstr "" + + #: f/com.c:11596 + msgid "no INTEGER type can hold a pointer on this configuration" + msgstr "geen enkel INTEGER-type kan een pointer bevatten in deze configuratie" + + #: f/com.c:11821 + #, c-format + msgid "configuration: REAL, INTEGER, and LOGICAL are %d bits wide," + msgstr "" + + #: f/com.c:11823 + #, c-format + msgid "and pointers are %d bits wide, but g77 doesn't yet work" + msgstr "" + + #: f/com.c:11825 + msgid "properly unless they all are 32 bits wide" + msgstr "" + + #: f/com.c:11826 + msgid "Please keep this in mind before you report bugs. g77 should" + msgstr "" + + #: f/com.c:11827 + msgid "support non-32-bit machines better as of version 0.6" + msgstr "" + + #. I/O will probably crash. + #: f/com.c:11835 + #, c-format + msgid "configuration: char * holds %d bits, but ftnlen only %d" + msgstr "" + + #. ASSIGN 10 TO I will crash. + #: f/com.c:11844 + #, c-format + msgid "" + "configuration: char * holds %d bits, but INTEGER only %d --\n" + " ASSIGN statement might fail" + msgstr "" + + #: f/com.c:13678 + #, fuzzy + msgid "In statement function" + msgstr "teveel argumenten voor functie" + + #: f/com.c:13688 + msgid "Outside of any program unit:\n" + msgstr "" + + #: f/com.c:15376 + msgid "%A from %B at %0%C" + msgstr "" + + #: f/com.c:15553 + msgid "directory name must immediately follow -I" + msgstr "" + + #: f/com.c:15695 + msgid "At %0, INCLUDE file %A exists, but is not readable" + msgstr "" + + #: f/com.c:15729 + msgid "At %0, INCLUDE nesting too deep" + msgstr "" + + #: f/expr.c:9611 + msgid "Two arithmetic operators in a row at %0 and %1 -- use parentheses" + msgstr "" + + #: f/expr.c:9660 + msgid "Operator at %0 has lower precedence than that at %1 -- use parentheses" + msgstr "" + + #: f/expr.c:10520 + msgid "Use .EQV./.NEQV. instead of .EQ./.NE. at %0 for LOGICAL operands at %1 and %2" + msgstr "" + + #: f/expr.c:10890 + msgid "Unsupported operand for ** at %1 -- converting to default INTEGER" + msgstr "" + + #: f/g77spec.c:256 + #, c-format + msgid "overflowed output arg list for `%s'" + msgstr "" + + #: f/g77spec.c:395 + #, fuzzy + msgid "--driver no longer supported" + msgstr "-pipe wordt niet ondersteund" + + #: f/g77spec.c:408 + #, fuzzy, c-format + msgid "argument to `%s' missing" + msgstr "argument van `%s' moet van een integraal type zijn." + + #: f/g77spec.c:412 + msgid "no input files; unwilling to write output files" + msgstr "" + + #: f/implic.c:202 + #, fuzzy + msgid "Implicit declaration of `%A' at %0" + msgstr "eerdere impliciete declaratie van `%s'" + + #: f/lex.c:272 + #, fuzzy + msgid "The meaning of `\\x' (at %0) varies with -traditional" + msgstr "de betekenis van `\\x' varieert naargelang -traditional al dan niet gebruikt wordt" + + #: f/lex.c:322 + #, fuzzy + msgid "The meaning of `\\a' (at %0) varies with -traditional" + msgstr "de betekenis van `\\a' varieert naargelang -traditional al dan niet gebruikt wordt" + + #: f/lex.c:351 + #, fuzzy + msgid "Non-ISO-C-standard escape sequence `\\%A' at %0" + msgstr "niet-ANSI-standaard escape sequence `\\%c'" + + #: f/lex.c:369 + #, fuzzy + msgid "Unknown escape sequence `\\%A' at %0" + msgstr "onbekende escape sequence `\\%c'" + + #: f/lex.c:377 + #, fuzzy, c-format + msgid "Unterminated escape sequence `\\' at %0" + msgstr "onbekende escape sequence `\\%c'" + + #: f/lex.c:387 + #, fuzzy + msgid "Unknown escape sequence `\\' followed by char code 0x%A at %0" + msgstr "onbekende escape sequence: `\\' gevolgd door karaktercode 0x%x" + + #: f/lex.c:414 + #, fuzzy + msgid "\\x used at %0 with no following hex digits" + msgstr "\\x gebruikt zonder daaropvolgende hexadecimale cijfers" + + #: f/lex.c:427 + #, fuzzy + msgid "Hex escape at %0 out of range" + msgstr "hexadecimale escape-waarde buiten bereik" + + # "escape-sequentie"?! Maar wat is er beter? + #: f/lex.c:460 + #, fuzzy + msgid "Escape sequence at %0 out of range for character" + msgstr "escape-sequentie buiten bereik voor karakter" + + #: f/lex.c:583 + msgid "the meaning of `\\x' varies with -traditional" + msgstr "de betekenis van `\\x' varieert naargelang -traditional al dan niet gebruikt wordt" + + #: f/lex.c:620 + msgid "hex escape out of range" + msgstr "hexadecimale escape-waarde buiten bereik" + + #: f/lex.c:666 + msgid "the meaning of `\\a' varies with -traditional" + msgstr "de betekenis van `\\a' varieert naargelang -traditional al dan niet gebruikt wordt" + + #: f/lex.c:682 + #, c-format + msgid "non-ANSI-standard escape sequence, `\\%c'" + msgstr "niet-ANSI-standaard escape sequence `\\%c'" + + #: f/lex.c:695 + #, fuzzy, c-format + msgid "non-ISO escape sequence `\\%c'" + msgstr "niet-ANSI escape sequence `\\%c'" + + #: f/lex.c:699 + #, c-format + msgid "unknown escape sequence `\\%c'" + msgstr "onbekende escape sequence `\\%c'" + + #: f/lex.c:701 + #, c-format + msgid "unknown escape sequence: `\\' followed by char code 0x%x" + msgstr "onbekende escape sequence: `\\' gevolgd door karaktercode 0x%x" + + #: f/lex.c:778 + msgid "badly formed directive -- no closing quote" + msgstr "" + + #: f/lex.c:998 + msgid "bad directive -- missing close-quote" + msgstr "" + + #: f/lex.c:1112 + #, c-format + msgid "ignoring pragma: %s" + msgstr "pragma wordt genegeerd: %s" + + #: f/lex.c:1319 f/lex.c:1363 + msgid "use `#line ...' instead of `# ...' in first line" + msgstr "" + + #: f/lex.c:1465 + #, c-format + msgid "Null character at %0 -- line ignored" + msgstr "" + + #: f/stb.c:12077 + #, c-format + msgid "INCLUDE at %0 not the only statement on the source line" + msgstr "" + + #: f/ste.c:1404 f/ste.c:1755 + msgid "ASSIGNed FORMAT specifier is too small" + msgstr "" + + #. ~~~Someday handle CHARACTER*1, CHARACTER*N + #: f/ste.c:2635 + msgid "SELECT CASE on CHARACTER type (at %0) not supported -- sorry" + msgstr "" + + #: f/ste.c:2964 + msgid "ASSIGN to variable that is too small" + msgstr "ASSIGN naar een variabele die te klein is" + + #: f/ste.c:2992 + msgid "ASSIGNed GOTO target variable is too small" + msgstr "" + + #: f/stu.c:304 + msgid "Local adjustable symbol `%A' at %0" + msgstr "" + + #: f/top.c:238 + #, c-format + msgid "%s no longer supported -- try -fvxt" + msgstr "" + + #: f/top.c:240 + #, c-format + msgid "%s no longer supported -- try -fno-vxt -ff90" + msgstr "" + + #: f/top.c:308 f/top.c:310 + #, c-format + msgid "%s disabled, use normal debugging flags" + msgstr "" + + #: f/lang-options.h:33 + msgid "Print g77-specific compiler version info, run internal tests" + msgstr "" + + #: f/lang-options.h:37 + msgid "Program is written in typical FORTRAN 66 dialect" + msgstr "" + + #: f/lang-options.h:40 + msgid "Program is written in typical Unix f77 dialect" + msgstr "" + + #: f/lang-options.h:42 + msgid "Program does not use Unix-f77 dialectal features" + msgstr "" + + #: f/lang-options.h:44 + msgid "Program is written in Fortran-90-ish dialect" + msgstr "" + + #: f/lang-options.h:48 + msgid "Treat local vars and COMMON blocks as if they were named in SAVE statements" + msgstr "" + + #: f/lang-options.h:50 + msgid "Allow $ in symbol names" + msgstr "" + + #: f/lang-options.h:54 + msgid "f2c-compatible code need not be generated" + msgstr "" + + #: f/lang-options.h:57 + msgid "Unsupported; do not generate libf2c-calling code" + msgstr "" + + #: f/lang-options.h:59 + msgid "Unsupported; affects code-generation of arrays" + msgstr "" + + #: f/lang-options.h:62 + msgid "Program is written in Fortran-90-ish free form" + msgstr "" + + #: f/lang-options.h:67 + msgid "Warn about use of (only a few for now) Fortran extensions" + msgstr "" + + #: f/lang-options.h:70 + msgid "Program is written in VXT (Digital-like) FORTRAN" + msgstr "" + + #: f/lang-options.h:73 + msgid "Disallow all ugly features" + msgstr "" + + #: f/lang-options.h:76 + msgid "Hollerith and typeless constants not passed as arguments" + msgstr "" + + #: f/lang-options.h:78 + msgid "Allow ordinary copying of ASSIGN'ed vars" + msgstr "" + + #: f/lang-options.h:81 + msgid "Dummy array dimensioned to (1) is assumed-size" + msgstr "" + + #: f/lang-options.h:84 + msgid "Trailing comma in procedure call denotes null argument" + msgstr "" + + #: f/lang-options.h:87 + msgid "Allow REAL(Z) and AIMAG(Z) given DOUBLE COMPLEX Z" + msgstr "" + + #: f/lang-options.h:91 + msgid "Initialization via DATA and PARAMETER is type-compatible" + msgstr "" + + #: f/lang-options.h:93 + msgid "Allow INTEGER and LOGICAL interchangeability" + msgstr "" + + #: f/lang-options.h:96 + msgid "Print internal debugging-related info" + msgstr "" + + # Is 'mode' enkel van toepassing op 'string', of ook op 'array'? + #: f/lang-options.h:99 + #, fuzzy + msgid "Initialize local vars and arrays to zero" + msgstr "beginwaarde is geen array of string-modus" + + #: f/lang-options.h:103 + msgid "Backslashes in character/hollerith constants not special (C-style)" + msgstr "" + + #: f/lang-options.h:105 + msgid "Have front end emulate COMPLEX arithmetic to avoid bugs" + msgstr "" + + #: f/lang-options.h:109 + msgid "Disable the appending of underscores to externals" + msgstr "" + + #: f/lang-options.h:112 + msgid "Never append a second underscore to externals" + msgstr "" + + #: f/lang-options.h:114 + msgid "Intrinsics spelled as e.g. SqRt" + msgstr "" + + #: f/lang-options.h:116 + msgid "Intrinsics in uppercase" + msgstr "" + + #: f/lang-options.h:119 + msgid "Intrinsics letters in arbitrary cases" + msgstr "" + + #: f/lang-options.h:121 + msgid "Language keywords spelled as e.g. IOStat" + msgstr "" + + #: f/lang-options.h:123 + msgid "Language keywords in uppercase" + msgstr "" + + #: f/lang-options.h:126 + msgid "Language keyword letters in arbitrary cases" + msgstr "" + + #: f/lang-options.h:128 + msgid "Internally convert most source to uppercase" + msgstr "" + + #: f/lang-options.h:131 + msgid "Internally preserve source case" + msgstr "" + + #: f/lang-options.h:133 + msgid "Symbol names spelled in mixed case" + msgstr "" + + #: f/lang-options.h:135 + msgid "Symbol names in uppercase" + msgstr "" + + #: f/lang-options.h:137 + msgid "Symbol names in lowercase" + msgstr "" + + #: f/lang-options.h:140 + msgid "Program written in uppercase" + msgstr "" + + #: f/lang-options.h:142 + msgid "Program written in lowercase" + msgstr "" + + #: f/lang-options.h:144 + msgid "Program written in strict mixed-case" + msgstr "" + + #: f/lang-options.h:146 + msgid "Compile as if program written in uppercase" + msgstr "" + + #: f/lang-options.h:148 + msgid "Compile as if program written in lowercase" + msgstr "" + + #: f/lang-options.h:150 + msgid "Preserve all spelling (case) used in program" + msgstr "" + + #: f/lang-options.h:152 + msgid "Delete libU77 intrinsics with bad interfaces" + msgstr "" + + #: f/lang-options.h:154 + msgid "Disable libU77 intrinsics with bad interfaces" + msgstr "" + + #: f/lang-options.h:157 + msgid "Hide libU77 intrinsics with bad interfaces" + msgstr "" + + #: f/lang-options.h:159 + msgid "Delete non-FORTRAN-77 intrinsics f2c supports" + msgstr "" + + #: f/lang-options.h:161 + msgid "Disable non-FORTRAN-77 intrinsics f2c supports" + msgstr "" + + #: f/lang-options.h:164 + msgid "Hide non-FORTRAN-77 intrinsics f2c supports" + msgstr "" + + #: f/lang-options.h:166 + msgid "Delete non-FORTRAN-77 intrinsics F90 supports" + msgstr "" + + #: f/lang-options.h:168 + msgid "Disable non-FORTRAN-77 intrinsics F90 supports" + msgstr "" + + #: f/lang-options.h:171 + msgid "Hide non-FORTRAN-77 intrinsics F90 supports" + msgstr "" + + #: f/lang-options.h:173 + msgid "Delete non-FORTRAN-77 intrinsics g77 supports" + msgstr "" + + #: f/lang-options.h:175 + msgid "Disable non-FORTRAN 77 intrinsics F90 supports" + msgstr "" + + #: f/lang-options.h:178 + msgid "Hide non-FORTRAN 77 intrinsics F90 supports" + msgstr "" + + #: f/lang-options.h:180 + msgid "Delete MIL-STD 1753 intrinsics" + msgstr "" + + #: f/lang-options.h:182 + msgid "Disable MIL-STD 1753 intrinsics" + msgstr "" + + #: f/lang-options.h:185 + msgid "Hide MIL-STD 1753 intrinsics" + msgstr "" + + #: f/lang-options.h:187 + msgid "Delete libU77 intrinsics" + msgstr "" + + #: f/lang-options.h:189 + msgid "Disable libU77 intrinsics" + msgstr "" + + #: f/lang-options.h:192 + msgid "Hide libU77 intrinsics" + msgstr "" + + #: f/lang-options.h:194 + msgid "Delete non-FORTRAN-77 intrinsics VXT FORTRAN supports" + msgstr "" + + #: f/lang-options.h:196 + msgid "Disable non-FORTRAN-77 intrinsics VXT FORTRAN supports" + msgstr "" + + #: f/lang-options.h:199 + msgid "Hide non-FORTRAN-77 intrinsics VXT FORTRAN supports" + msgstr "" + + #: f/lang-options.h:201 + msgid "Treat initial values of 0 like non-zero values" + msgstr "" + + #: f/lang-options.h:204 + msgid "Emit special debugging information for COMMON and EQUIVALENCE (disabled)" + msgstr "" + + #: f/lang-options.h:207 + msgid "Take at least one trip through each iterative DO loop" + msgstr "" + + #: f/lang-options.h:211 + msgid "Print names of program units as they are compiled" + msgstr "" + + #: f/lang-options.h:214 + msgid "Disable fatal diagnostics about inter-procedural problems" + msgstr "" + + #: f/lang-options.h:216 + msgid "Make prefix-radix non-decimal constants be typeless" + msgstr "" + + #: f/lang-options.h:219 + msgid "Generate code to check subscript and substring bounds" + msgstr "" + + #: f/lang-options.h:222 + msgid "Fortran-specific form of -fbounds-check" + msgstr "" + + #: f/lang-options.h:226 + msgid "Disable warnings about inter-procedural problems" + msgstr "" + + #: f/lang-options.h:230 + msgid "Warn about constructs with surprising meanings" + msgstr "" + + #: f/lang-options.h:235 + msgid "Add a directory for INCLUDE searching" + msgstr "" + + #: f/lang-options.h:237 + msgid "Set the maximum line length" + msgstr "" + + #: f/bad.def:38 + #, c-format + msgid "Missing first operand for binary operator at %0" + msgstr "" + + #: f/bad.def:40 + #, fuzzy, c-format + msgid "Zero-length character constant at %0" + msgstr "lege karakterconstante" + + #: f/bad.def:42 + #, fuzzy, c-format + msgid "Invalid token at %0 in expression or subexpression at %1" + msgstr "Ongeldig token in expressie" + + #: f/bad.def:44 + msgid "Missing operand for operator at %1 at end of expression at %0" + msgstr "" + + #: f/bad.def:46 + msgid "Label %A already defined at %1 when redefined at %0" + msgstr "" + + #: f/bad.def:48 + msgid "Unrecognized character at %0 [info -f g77 M LEX]" + msgstr "" + + #: f/bad.def:50 + msgid "Label definition %A at %0 on empty statement (as of %1)" + msgstr "" + + #: f/bad.def:52 + msgid "Extra label definition %A at %0 -- perhaps previous label definition %B at %1 should have CONTINUE statement?" + msgstr "" + + #: f/bad.def:53 + msgid "Extra label definition %A at %0 following label definition %B at %1" + msgstr "" + + #: f/bad.def:55 + msgid "Invalid first character at %0 [info -f g77 M LEX]" + msgstr "" + + #: f/bad.def:57 + msgid "Line too long as of %0 [info -f g77 M LEX]" + msgstr "" + + #: f/bad.def:59 + #, c-format + msgid "Non-numeric character at %0 in label field [info -f g77 M LEX]" + msgstr "" + + #: f/bad.def:61 + #, c-format + msgid "Label number at %0 not in range 1-99999" + msgstr "" + + #: f/bad.def:63 + msgid "At %0, '!' and '/*' are not valid comment delimiters" + msgstr "" + + #: f/bad.def:65 + #, c-format + msgid "Continuation indicator at %0 must appear in column 6 [info -f g77 M LEX]" + msgstr "" + + #: f/bad.def:67 + msgid "Label at %0 invalid with continuation line indicator at %1 [info -f g77 M LEX]" + msgstr "" + + #: f/bad.def:69 + #, c-format + msgid "Continuation indicator at %0 invalid on first non-comment line of file or following END or INCLUDE [info -f g77 M LEX]" + msgstr "" + + #: f/bad.def:70 + #, c-format + msgid "Continuation indicator at %0 invalid here [info -f g77 M LEX]" + msgstr "" + + #: f/bad.def:72 + #, fuzzy + msgid "Character constant at %0 has no closing apostrophe at %1" + msgstr "karakterconstante te lang" + + #: f/bad.def:74 + msgid "Hollerith constant at %0 specified %A more characters than are present as of %1" + msgstr "" + + #: f/bad.def:76 + #, c-format + msgid "Missing close parenthese at %0 needed to match open parenthese at %1" + msgstr "" + + #: f/bad.def:78 + #, fuzzy + msgid "Integer at %0 too large" + msgstr "integerconstante buiten bereik" + + #: f/bad.def:80 + msgid "Integer at %0 too large except as negative number (preceded by unary minus sign)" + msgstr "" + + #: f/bad.def:81 + msgid "Non-negative integer at %0 too large" + msgstr "" + + #: f/bad.def:83 + msgid "Integer at %0 too large; even though preceded by unary minus sign at %1, subsequent operator at %2 has precedence over unary minus -- enclose unary minus sign and integer in parentheses to force precedence" + msgstr "" + + #: f/bad.def:84 + msgid "Integer at %0 too large (%2 has precedence over %1)" + msgstr "" + + #: f/bad.def:86 + msgid "Integer at %0 too large; even though preceded by minus sign at %1, because minus sign is a binary, not unary, operator -- insert plus sign before minus sign to change it to a unary minus sign" + msgstr "" + + #: f/bad.def:87 + msgid "Integer at %0 too large (needs unary, not binary, minus at %1)" + msgstr "" + + #: f/bad.def:89 + msgid "Integer at %0 too large; even though preceded by minus sign at %1, subsequent operator at %2 has precedence over minus, and that minus sign should be a unary minus rather than a binary minus -- insert plus sign before minus sign to change it to a unary minus sign, and enclose unary minus sign and integer in parentheses to force precedence" + msgstr "" + + #: f/bad.def:90 + msgid "Integer at %0 too large (%2 has precedence over %1, which needs to be unary, not binary, minus)" + msgstr "" + + #: f/bad.def:92 + #, c-format + msgid "Period at %0 not followed by digits for floating-point number or by `NOT.', `TRUE.', or `FALSE.'" + msgstr "" + + #: f/bad.def:94 + msgid "Missing close-period between `.%A' at %0 and %1" + msgstr "" + + #: f/bad.def:96 + msgid "Invalid exponent at %0 for real constant at %1; nondigit `%A' in exponent field" + msgstr "" + + #: f/bad.def:98 + msgid "Missing value at %1 for real-number exponent at %0" + msgstr "" + + #: f/bad.def:100 + msgid "Expected binary operator between expressions at %0 and at %1" + msgstr "" + + #: f/bad.def:102 + msgid "Period at %0 not followed by valid keyword forming a valid binary operator; `.%A.' is not a valid binary operator" + msgstr "" + + #: f/bad.def:103 + #, fuzzy + msgid "`.%A.' at %0 not a binary operator" + msgstr "`%s' is geen iterator" + + #: f/bad.def:105 + #, c-format + msgid "Double-quote at %0 not followed by a string of valid octal digits at %1" + msgstr "" + + #: f/bad.def:106 f/bad.def:115 f/bad.def:124 + #, fuzzy, c-format + msgid "Invalid octal constant at %0" + msgstr "ongeldige beginwaarde" + + #: f/bad.def:108 f/bad.def:120 + #, c-format + msgid "Invalid binary digit(s) found in string of digits at %0" + msgstr "" + + #: f/bad.def:109 f/bad.def:121 + #, fuzzy, c-format + msgid "Invalid binary constant at %0" + msgstr "ongeldige beginwaarde" + + #: f/bad.def:111 f/bad.def:126 + #, c-format + msgid "Invalid hexadecimal digit(s) found in string of digits at %0" + msgstr "" + + #: f/bad.def:112 f/bad.def:127 + #, fuzzy, c-format + msgid "Invalid hexadecimal constant at %0" + msgstr "ongeldige expressie als operand" + + #: f/bad.def:114 f/bad.def:123 + #, c-format + msgid "Invalid octal digit(s) found in string of digits at %0" + msgstr "" + + #: f/bad.def:117 + msgid "Invalid radix specifier `%A' at %0 for typeless constant at %1" + msgstr "" + + #: f/bad.def:118 + #, fuzzy, c-format + msgid "Invalid typeless constant at %1" + msgstr "ongeldige expressie als operand" + + #: f/bad.def:129 + msgid "%A part of complex constant at %0 must be a real or integer constant -- otherwise use CMPLX() or COMPLEX() in place of ()" + msgstr "" + + #: f/bad.def:130 + msgid "%A part of complex constant at %0 not a real or integer constant" + msgstr "" + + #: f/bad.def:132 + msgid "Invalid keyword `%%%A' at %0 in this context" + msgstr "" + + #: f/bad.def:133 + msgid "Invalid keyword `%%%A' at %0" + msgstr "" + + # 'braced-group'? Wie schrijft verdorie die foutmeldingen? + #: f/bad.def:135 + #, fuzzy + msgid "Null expression between %0 and %1 invalid in this context" + msgstr "voorwaardelijke expressie niet toegestaan in deze context" + + #: f/bad.def:136 + #, fuzzy + msgid "Invalid null expression between %0 and %1" + msgstr "ongeldige expressie als operand" + + #: f/bad.def:138 + msgid "Concatenation operator at %0 must operate on two subexpressions of character type, but neither subexpression at %1 or %2 is of character type" + msgstr "" + + #: f/bad.def:139 + msgid "Invalid operands at %1 and %2 for concatenation operator at %0" + msgstr "" + + #: f/bad.def:141 + msgid "Concatenation operator at %0 must operate on two subexpressions of character type, but the subexpression at %1 is not of character type" + msgstr "" + + #: f/bad.def:142 + msgid "Invalid operand at %1 for concatenation operator at %0" + msgstr "" + + #: f/bad.def:144 + msgid "Concatenation operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning character scalars, or a combination of both -- but the subexpression at %1 is %A" + msgstr "" + + #: f/bad.def:145 + msgid "Invalid operand (is %A) at %1 for concatenation operator at %0" + msgstr "" + + #: f/bad.def:147 + msgid "Arithmetic operator at %0 must operate on two subexpressions of arithmetic type, but neither subexpression at %1 or %2 is of arithmetic type" + msgstr "" + + #: f/bad.def:148 + msgid "Invalid operands at %1 and %2 for arithmetic operator at %0" + msgstr "" + + #: f/bad.def:150 + msgid "Arithmetic operator at %0 must operate on two subexpressions of arithmetic type, but the subexpression at %1 is not of arithmetic type" + msgstr "" + + #: f/bad.def:151 + msgid "Invalid operand at %1 for arithmetic operator at %0" + msgstr "" + + #: f/bad.def:153 + msgid "Arithmetic operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning arithmetic scalars, or a combination of both -- but the subexpression at %1 is %A" + msgstr "" + + #: f/bad.def:154 + msgid "Invalid operand (is %A) at %1 for arithmetic operator at %0" + msgstr "" + + #: f/bad.def:156 + msgid "Character constant at %0 has no closing quote at %1 [info -f g77 M LEX]" + msgstr "" + + #: f/bad.def:157 + #, fuzzy + msgid "Unterminated character constant at %0 [info -f g77 M LEX]" + msgstr "niet-beëindigde karakterconstante" + + #: f/bad.def:159 + #, c-format + msgid "Continuation line at %0 must have initial `&' since it continues a character context [info -f g77 M LEX]" + msgstr "" + + #: f/bad.def:160 f/bad.def:163 + msgid "Missing initial `&' on continuation line at %0 [info -f g77 M LEX]" + msgstr "" + + #: f/bad.def:162 + #, c-format + msgid "Continuation line at %0 must have initial `&' since it continues a split lexical token [info -f g77 M LEX]" + msgstr "" + + #: f/bad.def:165 + #, c-format + msgid "Continuation line at %0 invalid because it consists only of a single `&' as the only nonblank character" + msgstr "" + + #: f/bad.def:166 + #, fuzzy, c-format + msgid "Invalid continuation line at %0" + msgstr "Ongeldige optie `%s'" + + #: f/bad.def:168 + msgid "Statement at %0 begins with invalid token [info -f g77 M LEX]" + msgstr "" + + #: f/bad.def:169 + msgid "Invalid statement at %0 [info -f g77 M LEX]" + msgstr "" + + #: f/bad.def:171 + #, c-format + msgid "Semicolon at %0 is an invalid token" + msgstr "" + + #: f/bad.def:173 + msgid "Unrecognized statement name at %0 and invalid form for assignment or statement-function definition at %1" + msgstr "" + + #: f/bad.def:174 + #, fuzzy, c-format + msgid "Invalid statement at %0" + msgstr "ongeldige beginwaarde" + + #: f/bad.def:176 + #, fuzzy + msgid "Invalid form for %A statement at %0" + msgstr "ongeldige expressie als operand" + + #: f/bad.def:177 + #, fuzzy + msgid "Invalid %A statement at %0" + msgstr "ongeldige beginwaarde" + + #: f/bad.def:179 + #, c-format + msgid "Invalid use of hollerith constant in statement at %0 -- enclose the constant in parentheses (for example, change BACKSPACE 2HAB to BACKSPACE (2HAB))" + msgstr "" + + #: f/bad.def:180 + #, c-format + msgid "Enclose hollerith constant in statement at %0 in parentheses" + msgstr "" + + #: f/bad.def:182 + #, c-format + msgid "Extraneous comma in FORMAT statement at %0" + msgstr "" + + #: f/bad.def:184 + #, c-format + msgid "Missing comma in FORMAT statement at %0" + msgstr "" + + #: f/bad.def:186 + #, c-format + msgid "Spurious sign in FORMAT statement at %0" + msgstr "" + + #: f/bad.def:188 + #, c-format + msgid "Spurious number in FORMAT statement at %0" + msgstr "" + + #: f/bad.def:190 + #, c-format + msgid "Spurious text trailing number in FORMAT statement at %0" + msgstr "" + + #: f/bad.def:192 + #, c-format + msgid "nP control edit descriptor not followed by comma but followed by edit descriptor at %0 other than D, E, EN, F, or G" + msgstr "" + + #: f/bad.def:193 + #, c-format + msgid "Invalid edit descriptor at %0 following nP control edit descriptor" + msgstr "" + + #: f/bad.def:195 + #, fuzzy, c-format + msgid "Unrecognized FORMAT specifier at %0" + msgstr "onbekende formaatspecificatie" + + #: f/bad.def:197 + #, c-format + msgid "Invalid I specifier in FORMAT statement at %0 -- correct form: [r]Iw.[m]" + msgstr "" + + #: f/bad.def:198 + #, fuzzy, c-format + msgid "Invalid I specifier in FORMAT statement at %0" + msgstr "ongeldige expressie als operand" + + #: f/bad.def:200 + #, c-format + msgid "Invalid B specifier in FORMAT statement at %0 -- correct form: [r]Bw.[m]" + msgstr "" + + #: f/bad.def:201 + #, fuzzy, c-format + msgid "Invalid B specifier in FORMAT statement at %0" + msgstr "ongeldige expressie als operand" + + #: f/bad.def:203 + #, c-format + msgid "Invalid O specifier in FORMAT statement at %0 -- correct form: [r]Ow.[m]" + msgstr "" + + #: f/bad.def:204 + #, fuzzy, c-format + msgid "Invalid O specifier in FORMAT statement at %0" + msgstr "ongeldige expressie als operand" + + #: f/bad.def:206 + #, c-format + msgid "Invalid Z specifier in FORMAT statement at %0 -- correct form: [r]Zw.[m]" + msgstr "" + + #: f/bad.def:207 + #, fuzzy, c-format + msgid "Invalid Z specifier in FORMAT statement at %0" + msgstr "ongeldige expressie als operand" + + #: f/bad.def:209 + #, c-format + msgid "Invalid F specifier in FORMAT statement at %0 -- correct form: [r]Fw.d" + msgstr "" + + #: f/bad.def:210 + #, fuzzy, c-format + msgid "Invalid F specifier in FORMAT statement at %0" + msgstr "ongeldige expressie als operand" + + #: f/bad.def:212 + #, c-format + msgid "Invalid E specifier in FORMAT statement at %0 -- correct form: [r]Ew.d[Ee]" + msgstr "" + + #: f/bad.def:213 + #, fuzzy, c-format + msgid "Invalid E specifier in FORMAT statement at %0" + msgstr "ongeldige expressie als operand" + + #: f/bad.def:215 + #, c-format + msgid "Invalid EN specifier in FORMAT statement at %0 -- correct form: [r]ENw.d[Ee]" + msgstr "" + + #: f/bad.def:216 + #, c-format + msgid "Invalid EN specifier in FORMAT statement at %0" + msgstr "" + + #: f/bad.def:218 + #, c-format + msgid "Invalid G specifier in FORMAT statement at %0 -- correct form: [r]Gw.d[Ee]" + msgstr "" + + #: f/bad.def:219 + #, fuzzy, c-format + msgid "Invalid G specifier in FORMAT statement at %0" + msgstr "ongeldige expressie als operand" + + #: f/bad.def:221 + #, c-format + msgid "Invalid L specifier in FORMAT statement at %0 -- correct form: [r]Lw" + msgstr "" + + #: f/bad.def:222 + #, fuzzy, c-format + msgid "Invalid L specifier in FORMAT statement at %0" + msgstr "ongeldige expressie als operand" + + #: f/bad.def:224 + #, c-format + msgid "Invalid A specifier in FORMAT statement at %0 -- correct form: [r]A[w]" + msgstr "" + + #: f/bad.def:225 + #, fuzzy, c-format + msgid "Invalid A specifier in FORMAT statement at %0" + msgstr "ongeldige expressie als operand" + + #: f/bad.def:227 + #, c-format + msgid "Invalid D specifier in FORMAT statement at %0 -- correct form: [r]Dw.d" + msgstr "" + + #: f/bad.def:228 + #, fuzzy, c-format + msgid "Invalid D specifier in FORMAT statement at %0" + msgstr "ongeldige expressie als operand" + + #: f/bad.def:230 + #, c-format + msgid "Invalid Q specifier in FORMAT statement at %0 -- correct form: Q" + msgstr "" + + #: f/bad.def:231 + #, fuzzy, c-format + msgid "Invalid Q specifier in FORMAT statement at %0" + msgstr "ongeldige expressie als operand" + + #: f/bad.def:233 + #, c-format + msgid "Invalid $ specifier in FORMAT statement at %0 -- correct form: $" + msgstr "" + + #: f/bad.def:234 + #, fuzzy, c-format + msgid "Invalid $ specifier in FORMAT statement at %0" + msgstr "ongeldige expressie als operand" + + #: f/bad.def:236 + #, c-format + msgid "Invalid P specifier in FORMAT statement at %0 -- correct form: kP" + msgstr "" + + #: f/bad.def:237 + #, fuzzy, c-format + msgid "Invalid P specifier in FORMAT statement at %0" + msgstr "ongeldige expressie als operand" + + #: f/bad.def:239 + #, c-format + msgid "Invalid T specifier in FORMAT statement at %0 -- correct form: Tn" + msgstr "" + + #: f/bad.def:240 + #, fuzzy, c-format + msgid "Invalid T specifier in FORMAT statement at %0" + msgstr "ongeldige expressie als operand" + + #: f/bad.def:242 + #, c-format + msgid "Invalid TL specifier in FORMAT statement at %0 -- correct form: TLn" + msgstr "" + + #: f/bad.def:243 + #, c-format + msgid "Invalid TL specifier in FORMAT statement at %0" + msgstr "" + + #: f/bad.def:245 + #, c-format + msgid "Invalid TR specifier in FORMAT statement at %0 -- correct form: TRn" + msgstr "" + + #: f/bad.def:246 + #, c-format + msgid "Invalid TR specifier in FORMAT statement at %0" + msgstr "" + + #: f/bad.def:248 + #, c-format + msgid "Invalid X specifier in FORMAT statement at %0 -- correct form: nX" + msgstr "" + + #: f/bad.def:249 + #, fuzzy, c-format + msgid "Invalid X specifier in FORMAT statement at %0" + msgstr "ongeldige expressie als operand" + + #: f/bad.def:251 + #, c-format + msgid "Invalid S specifier in FORMAT statement at %0 -- correct form: S" + msgstr "" + + #: f/bad.def:252 + #, fuzzy, c-format + msgid "Invalid S specifier in FORMAT statement at %0" + msgstr "ongeldige expressie als operand" + + #: f/bad.def:254 + #, c-format + msgid "Invalid SP specifier in FORMAT statement at %0 -- correct form: SP" + msgstr "" + + #: f/bad.def:255 + #, c-format + msgid "Invalid SP specifier in FORMAT statement at %0" + msgstr "" + + #: f/bad.def:257 + #, c-format + msgid "Invalid SS specifier in FORMAT statement at %0 -- correct form: SS" + msgstr "" + + #: f/bad.def:258 + #, c-format + msgid "Invalid SS specifier in FORMAT statement at %0" + msgstr "" + + #: f/bad.def:260 + #, c-format + msgid "Invalid BN specifier in FORMAT statement at %0 -- correct form: BN" + msgstr "" + + #: f/bad.def:261 + #, c-format + msgid "Invalid BN specifier in FORMAT statement at %0" + msgstr "" + + #: f/bad.def:263 + #, c-format + msgid "Invalid BZ specifier in FORMAT statement at %0 -- correct form: BZ" + msgstr "" + + #: f/bad.def:264 + #, c-format + msgid "Invalid BZ specifier in FORMAT statement at %0" + msgstr "" + + #: f/bad.def:266 + #, c-format + msgid "Invalid : specifier in FORMAT statement at %0 -- correct form: :" + msgstr "" + + #: f/bad.def:267 + #, fuzzy, c-format + msgid "Invalid : specifier in FORMAT statement at %0" + msgstr "ongeldige expressie als operand" + + #: f/bad.def:269 + #, c-format + msgid "Invalid H specifier in FORMAT statement at %0 -- correct form: nHcharacters !where n is an unsigned decimal constant, and characters !contains exactly n characters (including spaces)" + msgstr "" + + #: f/bad.def:270 + #, fuzzy, c-format + msgid "Invalid H specifier in FORMAT statement at %0" + msgstr "ongeldige expressie als operand" + + #: f/bad.def:272 + #, c-format + msgid "Missing close-parenthese(s) in FORMAT statement at %0" + msgstr "" + + #: f/bad.def:274 + #, c-format + msgid "Missing number following period in FORMAT statement at %0" + msgstr "" + + #: f/bad.def:276 + #, c-format + msgid "Missing number following `E' in FORMAT statement at %0" + msgstr "" + + #: f/bad.def:278 + #, c-format + msgid "Invalid token with FORMAT run-time expression at %0 -- use the traditional operators .LT., .LE., .GT., .GE., .EQ., and .NE. in place of the newer tokens <, <=, >, >=, ==, and !=, because > ends an expression within a FORMAT statement" + msgstr "" + + #: f/bad.def:279 + #, fuzzy, c-format + msgid "Invalid token with FORMAT run-time expression at %0" + msgstr "Ongeldig token in expressie" + + #: f/bad.def:281 + #, fuzzy, c-format + msgid "Spurious trailing comma preceding terminator at %0" + msgstr "overbodige `%%' achteraan formaat" + + #: f/bad.def:283 + msgid "At %0, specify OPERATOR instead of ASSIGNMENT for INTERFACE statement not specifying the assignment operator (=)" + msgstr "" + + #: f/bad.def:285 + msgid "At %0, specify ASSIGNMENT instead of OPERATOR for INTERFACE statement specifying the assignment operator (=)" + msgstr "" + + #: f/bad.def:287 + #, c-format + msgid "Defined operator at %0 contains a nonletter -- must contain only letters A-Z (or a-z)" + msgstr "" + + #: f/bad.def:288 + #, c-format + msgid "Nonletter in defined operator at %0" + msgstr "" + + #: f/bad.def:290 + #, c-format + msgid "Invalid type-declaration attribute at %0 -- must be one of: DIMENSION(array-spec), EXTERNAL, INTRINSIC, PARAMETER, or SAVE" + msgstr "" + + #: f/bad.def:291 + #, fuzzy, c-format + msgid "Invalid type-declaration attribute at %0" + msgstr "lege declaratie" + + #: f/bad.def:293 + #, c-format + msgid "Cannot specify =initialization-expr at %0 unless `::' appears before list of objects" + msgstr "" + + #: f/bad.def:295 + msgid "Reference to label at %1 inconsistent with its definition at %0" + msgstr "" + + #: f/bad.def:297 + msgid "Reference to label at %1 inconsistent with earlier reference at %0" + msgstr "" + + #: f/bad.def:299 + msgid "DO-statement reference to label at %1 follows its definition at %0" + msgstr "" + + #: f/bad.def:301 + msgid "Reference to label at %1 is outside block containing definition at %0" + msgstr "" + + #: f/bad.def:303 + msgid "DO-statement references to label at %0 and %2 separated by unterminated block starting at %1" + msgstr "" + + #: f/bad.def:305 + msgid "DO-statement reference to label at %0 and label definition at %2 separated by unterminated block starting at %1" + msgstr "" + + #: f/bad.def:307 + #, fuzzy, c-format + msgid "Label definition at %0 invalid on this kind of statement" + msgstr "label gevonden buiten een CASE-statement" + + #: f/bad.def:309 + #, fuzzy, c-format + msgid "Statement at %0 invalid in this context" + msgstr "%s: %s compiler niet geïnstalleerd op dit systeem" + + #: f/bad.def:311 + #, c-format + msgid "Statement at %0 invalid in context established by statement at %1" + msgstr "" + + #: f/bad.def:313 + #, c-format + msgid "Statement at %0 must specify construct name specified at %1" + msgstr "" + + #: f/bad.def:315 + #, c-format + msgid "Construct name at %0 superfluous, no construct name specified at %1" + msgstr "" + + #: f/bad.def:317 + #, c-format + msgid "Construct name at %0 not the same as construct name at %1" + msgstr "" + + #: f/bad.def:319 + #, c-format + msgid "Construct name at %0 does not match construct name for any containing DO constructs" + msgstr "" + + #: f/bad.def:321 + #, c-format + msgid "Label definition missing at %0 for DO construct specifying label at %1" + msgstr "" + + #: f/bad.def:323 + #, c-format + msgid "Statement at %0 follows ELSE block for IF construct at %1" + msgstr "" + + #: f/bad.def:325 + #, fuzzy, c-format + msgid "No label definition for FORMAT statement at %0" + msgstr "label niet in een CASE-statement" + + #: f/bad.def:327 + msgid "Second occurrence of ELSE WHERE at %0 within WHERE at %1" + msgstr "" + + #: f/bad.def:329 + msgid "END statement at %0 missing `%A' keyword required for internal or module procedure(s) bounded by %1" + msgstr "" + + #: f/bad.def:331 + msgid "MODULE PROCEDURE statement at %0 disallowed because INTERFACE at %1 specifies no generic name, operator, or assignment" + msgstr "" + + #: f/bad.def:333 + #, c-format + msgid "BLOCK DATA name at %0 superfluous, no name specified at %1" + msgstr "" + + #: f/bad.def:335 + #, c-format + msgid "Program name at %0 superfluous, no PROGRAM statement specified at %1" + msgstr "" + + #: f/bad.def:337 + #, c-format + msgid "Program unit name at %0 not the same as name at %1" + msgstr "" + + #: f/bad.def:339 + #, c-format + msgid "Type name at %0 not the same as name at %1" + msgstr "" + + #: f/bad.def:341 + #, c-format + msgid "End of source file before end of block started at %0" + msgstr "" + + #: f/bad.def:343 + #, c-format + msgid "Undefined label, first referenced at %0" + msgstr "" + + #: f/bad.def:345 + msgid "SAVE statement or attribute at %1 cannot be specified along with SAVE statement or attribute at %0" + msgstr "" + + #: f/bad.def:347 + msgid "PUBLIC or PRIVATE statement at %1 cannot be specified along with PUBLIC or PRIVATE statement at %0" + msgstr "" + + #: f/bad.def:349 + #, c-format + msgid "RETURN statement at %0 invalid within a main program unit" + msgstr "" + + #: f/bad.def:351 + #, c-format + msgid "Alternate return specifier at %0 invalid within a main program unit" + msgstr "" + + #: f/bad.def:353 + #, c-format + msgid "Alternate return specifier at %0 invalid within a function" + msgstr "" + + #: f/bad.def:355 + #, c-format + msgid "Access specifier or PRIVATE statement at %0 invalid for derived-type definition within other than the specification part of a module" + msgstr "" + + #: f/bad.def:357 + msgid "Access specifier at %0 must immediately follow derived-type statement at %1 with no intervening statements" + msgstr "" + + #: f/bad.def:359 + #, c-format + msgid "No components specified as of %0 for derived-type definition beginning at %1" + msgstr "" + + #: f/bad.def:361 + #, c-format + msgid "No components specified as of %0 for structure definition beginning at %1" + msgstr "" + + #: f/bad.def:363 + #, c-format + msgid "Missing structure name for outer structure definition at %0" + msgstr "" + + #: f/bad.def:365 + #, c-format + msgid "Field names at %0 for outer structure definition -- specify them in a subsequent RECORD statement instead" + msgstr "" + + #: f/bad.def:367 + msgid "Missing field name(s) for structure definition at %0 within structure definition at %1" + msgstr "" + + #: f/bad.def:369 + #, c-format + msgid "No components specified as of %0 for map beginning at %1" + msgstr "" + + #: f/bad.def:371 + msgid "Zero or one maps specified as of %0 for union beginning at %1 -- at least two are required" + msgstr "" + + #: f/bad.def:373 + msgid "Missing %A specifier in statement at %0" + msgstr "" + + #: f/bad.def:375 + #, c-format + msgid "Items in I/O list starting at %0 invalid for namelist-directed I/O" + msgstr "" + + #: f/bad.def:377 + msgid "Conflicting I/O control specifications at %0 and %1" + msgstr "" + + #: f/bad.def:379 + #, c-format + msgid "No UNIT= specifier in I/O control list at %0" + msgstr "" + + #: f/bad.def:381 + msgid "Specification at %0 requires ADVANCE=`NO' specification in same I/O control list" + msgstr "" + + #: f/bad.def:383 + msgid "Specification at %0 requires explicit FMT= specification in same I/O control list" + msgstr "" + + #: f/bad.def:385 + msgid "Unrecognized value for character constant at %0 -- expecting %A" + msgstr "" + + #: f/bad.def:386 + #, fuzzy, c-format + msgid "Unrecognized value for character constant at %0" + msgstr "%s voor karakterconstante" + + #: f/bad.def:388 + msgid "Second occurrence of CASE DEFAULT at %0 within SELECT CASE at %1" + msgstr "" + + #: f/bad.def:390 + msgid "Duplicate or overlapping case values/ranges at %0 and %1" + msgstr "" + + #: f/bad.def:392 + msgid "Type and/or kind-type parameter disagreement between CASE value or value within range at %0 and SELECT CASE at %1" + msgstr "" + + #: f/bad.def:394 + #, c-format + msgid "Range specification at %0 invalid for CASE statement within logical-type SELECT CASE statement" + msgstr "" + + #: f/bad.def:396 + #, c-format + msgid "Range specification at %0 invalid -- at least one expression must be specified, or use CASE DEFAULT" + msgstr "" + + #: f/bad.def:397 + #, c-format + msgid "Range specification at %0 invalid" + msgstr "" + + #: f/bad.def:399 + #, c-format + msgid "Range specification at %0 useless; first expression greater than second expression in range, so range can never be matched by any selection expression" + msgstr "" + + #: f/bad.def:400 + #, c-format + msgid "Useless range at %0" + msgstr "" + + #: f/bad.def:402 + #, c-format + msgid "Fortran 90 feature at %0 unsupported" + msgstr "" + + #: f/bad.def:404 + msgid "Invalid kind at %0 for type at %1 -- unsupported or not permitted" + msgstr "" + + #: f/bad.def:405 + #, fuzzy, c-format + msgid "Invalid kind at %0 for type at %1" + msgstr "Ongeldig register voor vergelijking" + + #: f/bad.def:407 + msgid "Cannot establish implicit type for initial letter `%A' at %0 -- already explicitly established or used to set implicit type of some name, or backwards order of letters in letter range" + msgstr "" + + #: f/bad.def:408 + msgid "Cannot establish implicit type for initial letter `%A' at %0" + msgstr "" + + #: f/bad.def:410 + msgid "Invalid declaration of or reference to symbol `%A' at %0 [initially seen at %1]" + msgstr "" + + #: f/bad.def:412 + msgid "Label definition %A (at %0) invalid -- must be in columns 1-5" + msgstr "" + + #: f/bad.def:413 + msgid "Invalid label definition %A (at %0)" + msgstr "" + + #: f/bad.def:415 + #, c-format + msgid "Null element at %0 for array reference at %1" + msgstr "" + + #: f/bad.def:417 + msgid "Too few elements (%A missing) as of %0 for array reference at %1" + msgstr "" + + #: f/bad.def:419 + #, fuzzy, c-format + msgid "Too many elements as of %0 for array reference at %1" + msgstr "array-grootte op een niet-array-referentie" + + #: f/bad.def:421 + #, c-format + msgid "Missing colon as of %0 in substring reference for %1" + msgstr "" + + #: f/bad.def:423 + #, c-format + msgid "Invalid use at %0 of substring operator on %1" + msgstr "" + + #: f/bad.def:425 + #, c-format + msgid "Substring begin/end point at %0 out of defined range" + msgstr "" + + #: f/bad.def:427 + #, fuzzy, c-format + msgid "Array element value at %0 out of defined range" + msgstr "case-waarde buiten bereik" + + #: f/bad.def:429 + msgid "Expression at %0 has incorrect data type or rank for its context" + msgstr "" + + #: f/bad.def:431 + msgid "Division by 0 (zero) at %0 (IEEE not yet supported)" + msgstr "" + + #: f/bad.def:433 + msgid "%A step count known to be 0 (zero) at %0" + msgstr "" + + #: f/bad.def:435 + msgid "%A end value plus step count known to overflow at %0" + msgstr "" + + #: f/bad.def:437 + msgid "%A begin, end, and step-count values known to result in implementation-dependent behavior due to overflow(s) in intermediate calculations at %0" + msgstr "" + + #: f/bad.def:439 + msgid "%A begin, end, and step-count values known to result in no iterations at %0" + msgstr "" + + #: f/bad.def:441 + msgid "Type disagreement between expressions at %0 and %1" + msgstr "" + + #: f/bad.def:443 + #, c-format + msgid "Run-time expression at %0 in FORMAT statement that does not follow the first executable statement in the program unit -- move the statement" + msgstr "" + + #: f/bad.def:444 + msgid "FORMAT at %0 with run-time expression must follow first executable statement" + msgstr "" + + #: f/bad.def:446 + msgid "Unexpected token at %0 in implied-DO construct at %1 -- form of implied-DO is `(item-list,do-var=start,end[,incr])'" + msgstr "" + + #: f/bad.def:447 + #, c-format + msgid "Unexpected token at %0 in implied-DO construct at %1" + msgstr "" + + #: f/bad.def:449 + msgid "No specification for implied-DO iterator `%A' at %0" + msgstr "" + + #: f/bad.def:451 + #, c-format + msgid "Gratuitous parentheses surround implied-DO construct at %0" + msgstr "" + + #: f/bad.def:453 + #, c-format + msgid "Zero-size specification invalid at %0" + msgstr "" + + #: f/bad.def:455 + #, c-format + msgid "Zero-size array at %0" + msgstr "" + + #: f/bad.def:457 + #, c-format + msgid "Target machine does not support complex entity of kind specified at %0" + msgstr "" + + #: f/bad.def:459 + #, c-format + msgid "Target machine does not support DOUBLE COMPLEX, specified at %0" + msgstr "" + + #: f/bad.def:461 + #, c-format + msgid "Attempt to raise constant zero to a power at %0" + msgstr "" + + #: f/bad.def:463 + msgid "Boolean/logical operator at %0 must operate on two subexpressions of logical type, but neither subexpression at %1 or %2 is of logical type" + msgstr "" + + #: f/bad.def:464 + msgid "Invalid operands at %1 and %2 for boolean operator at %0" + msgstr "" + + #: f/bad.def:466 + msgid "Boolean/logical operator at %0 must operate on two subexpressions of logical type, but the subexpression at %1 is not of logical type" + msgstr "" + + #: f/bad.def:467 + #, fuzzy + msgid "Invalid operand at %1 for boolean operator at %0" + msgstr "ongeldige operanden voor binaire %s-operator" + + #: f/bad.def:469 + msgid "Boolean/logical operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning logical scalars, or a combination of both -- but the subexpression at %1 is %A" + msgstr "" + + #: f/bad.def:470 + msgid "Invalid operand (is %A) at %1 for boolean operator at %0" + msgstr "" + + #: f/bad.def:472 + msgid ".NOT. operator at %0 must operate on subexpression of logical type, but the subexpression at %1 is not of logical type" + msgstr "" + + #: f/bad.def:473 + #, fuzzy + msgid "Invalid operand at %1 for .NOT. operator at %0" + msgstr "ongeldige operand voor %N-code" + + #: f/bad.def:475 + msgid ".NOT. operator at %0 must operate on scalar subexpressions -- but the subexpression at %1 is %A" + msgstr "" + + #: f/bad.def:476 + msgid "Invalid operand (is %A) at %1 for .NOT. operator at %0" + msgstr "" + + #: f/bad.def:478 + msgid "Equality operator at %0 must operate on two subexpressions of arithmetic or character type, but neither subexpression at %1 or %2 is of arithmetic or character type" + msgstr "" + + #: f/bad.def:479 + msgid "Invalid operands at %1 and %2 for equality operator at %0" + msgstr "" + + #: f/bad.def:481 + msgid "Equality operator at %0 must operate on two subexpressions of arithmetic or character type, but the subexpression at %1 is not of arithmetic or character type" + msgstr "" + + #: f/bad.def:482 + msgid "Invalid operand at %1 for equality operator at %0" + msgstr "" + + #: f/bad.def:484 + msgid "Equality operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning arithmetic or character scalars, or a combination of both -- but the subexpression at %1 is %A" + msgstr "" + + #: f/bad.def:485 + msgid "Invalid operand (is %A) at %1 for equality operator at %0" + msgstr "" + + #: f/bad.def:487 + msgid "Relational operator at %0 must operate on two subexpressions of integer, real, or character type, but neither subexpression at %1 or %2 is of integer, real, or character type" + msgstr "" + + #: f/bad.def:488 + msgid "Invalid operands at %1 and %2 for relational operator at %0" + msgstr "" + + #: f/bad.def:490 + msgid "Relational operator at %0 must operate on two subexpressions of integer, real, or character type, but the subexpression at %1 is not of integer, real, or character type" + msgstr "" + + #: f/bad.def:491 + #, fuzzy + msgid "Invalid operand at %1 for relational operator at %0" + msgstr "ongeldige operanden voor binaire %s-operator" + + #: f/bad.def:493 + msgid "Relational operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning integer, real, or character scalars, or a combination of both -- but the subexpression at %1 is %A" + msgstr "" + + #: f/bad.def:494 + msgid "Invalid operand (is %A) at %1 for relational operator at %0" + msgstr "" + + #: f/bad.def:496 + msgid "Reference to intrinsic `%A' at %0 invalid -- one or more arguments have incorrect type" + msgstr "" + + #: f/bad.def:497 + #, fuzzy + msgid "Invalid reference to intrinsic `%A' at %0" + msgstr "Ongeldige modus voor gen_tst_reg" + + #: f/bad.def:499 + #, fuzzy + msgid "Too few arguments passed to intrinsic `%A' at %0" + msgstr "te weinig argumenten voor functie `%s'" + + #: f/bad.def:500 + #, fuzzy + msgid "Too few arguments for intrinsic `%A' at %0" + msgstr "te weinig argumenten voor functie `%s'" + + #: f/bad.def:502 + #, fuzzy + msgid "Too many arguments passed to intrinsic `%A' at %0" + msgstr "teveel argumenten voor functie `%s'" + + #: f/bad.def:503 + #, fuzzy + msgid "Too many arguments for intrinsic `%A' at %0" + msgstr "teveel argumenten voor functie `%s'" + + #: f/bad.def:505 + msgid "Reference to disabled intrinsic `%A' at %0" + msgstr "" + + #: f/bad.def:506 + msgid "Disabled intrinsic `%A' at %0" + msgstr "" + + #: f/bad.def:508 + msgid "Reference to intrinsic subroutine `%A' as if it were a function at %0" + msgstr "" + + #: f/bad.def:509 + msgid "Function reference to intrinsic subroutine `%A' at %0" + msgstr "" + + #: f/bad.def:511 + msgid "Reference to intrinsic function `%A' as if it were a subroutine at %0" + msgstr "" + + #: f/bad.def:512 + msgid "Subroutine reference to intrinsic function `%A' at %0" + msgstr "" + + #: f/bad.def:514 + msgid "Reference to unimplemented intrinsic `%A' at %0 -- use EXTERNAL to reference user-written procedure with this name" + msgstr "" + + #: f/bad.def:515 + #, fuzzy + msgid "Unimplemented intrinsic `%A' at %0" + msgstr "ingebouwde functie `%s' is niet geïmplementeerd" + + #: f/bad.def:517 + msgid "Reference to unimplemented intrinsic `%A' at %0 (assumed EXTERNAL)" + msgstr "" + + #: f/bad.def:518 + msgid "Unimplemented intrinsic `%A' at %0 (assumed EXTERNAL)" + msgstr "" + + #: f/bad.def:520 + msgid "Reference to generic intrinsic `%A' at %0 could be to form %B or %C" + msgstr "" + + #: f/bad.def:522 + msgid "Ambiguous use of intrinsic `%A' at %0 [info -f g77 M CMPAMBIG]" + msgstr "" + + #: f/bad.def:524 + msgid "Intrinsic `%A' referenced %Bly at %0, %Cly at %1 [info -f g77 M EXPIMP]" + msgstr "" + + #: f/bad.def:526 + msgid "Same name `%A' used for %B at %0 and %C at %1 [info -f g77 M INTGLOB]" + msgstr "" + + #: f/bad.def:528 + msgid "Explicit type declaration for intrinsic `%A' disagrees with invocation at %0" + msgstr "" + + #: f/bad.def:530 + #, fuzzy + msgid "Unable to open INCLUDE file `%A' at %0" + msgstr "kan bestand '%s' niet openen" + + #: f/bad.def:532 + msgid "Attempt to modify variable `%A' at %0 while it serves as DO-loop iterator at %1" + msgstr "" + + #: f/bad.def:533 f/bad.def:536 + msgid "Modification of DO-loop iterator `%A' at %0" + msgstr "" + + #: f/bad.def:535 + msgid "Attempt to modify variable `%A' via item #%B in list at %0 while it serves as implied-DO iterator at %1" + msgstr "" + + #: f/bad.def:538 + #, c-format + msgid "Array has too many dimensions, as of dimension specifier at %0" + msgstr "" + + #: f/bad.def:539 + #, fuzzy, c-format + msgid "Too many dimensions at %0" + msgstr "Teveel argumenten in oproep van `%s'" + + #: f/bad.def:541 + #, c-format + msgid "Null argument at %0 for statement function reference at %1" + msgstr "" + + #: f/bad.def:543 + #, c-format + msgid "Null argument at %0 for procedure invocation at %1" + msgstr "" + + #: f/bad.def:545 + msgid "%A too few arguments (starting with dummy argument `%B') as of %0 for statement function reference at %1" + msgstr "" + + #: f/bad.def:547 + msgid "%A too many arguments as of %0 for statement function reference at %1" + msgstr "" + + #: f/bad.def:549 + msgid "Array supplied at %1 for dummy argument `%A' in statement function reference at %0" + msgstr "" + + #: f/bad.def:551 + #, c-format + msgid "Unsupported FORMAT specifier at %0" + msgstr "" + + #: f/bad.def:553 + #, c-format + msgid "Variable-expression FORMAT specifier at %0 -- unsupported" + msgstr "" + + #: f/bad.def:555 + msgid "Unsupported OPEN control item at %0 -- ACTION=, ASSOCIATEVARIABLE=, BLOCKSIZE=, BUFFERCOUNT=, CARRIAGECONTROL=, DEFAULTFILE=, DELIM=, DISPOSE=, EXTENDSIZE=, INITIALSIZE=, KEY=, MAXREC=, NOSPANBLOCKS, ORGANIZATION=, PAD=, POSITION=, READONLY=, RECORDTYPE=, SHARED=, and USEROPEN= are not supported" + msgstr "" + + #: f/bad.def:556 + #, c-format + msgid "Unsupported OPEN control item at %0" + msgstr "" + + #: f/bad.def:558 + msgid "Unsupported INQUIRE control item at %0 -- ACTION=, CARRIAGECONTROL=, DEFAULTFILE=, DELIM=, KEYED=, ORGANIZATION=, PAD=, POSITION=, READ=, READWRITE=, RECORDTYPE=, and WRITE= are not supported" + msgstr "" + + #: f/bad.def:559 + #, c-format + msgid "Unsupported INQUIRE control item at %0" + msgstr "" + + #: f/bad.def:561 + msgid "Unsupported READ control item at %0 -- ADVANCE=, EOR=, KEYEQ=, KEYGE=, KEYGT=, KEYID=, NULLS=, and SIZE= are not supported" + msgstr "" + + #: f/bad.def:562 + #, c-format + msgid "Unsupported READ control item at %0" + msgstr "" + + #: f/bad.def:564 + msgid "Unsupported WRITE control item at %0 -- ADVANCE= and EOR= are not supported" + msgstr "" + + #: f/bad.def:565 + #, c-format + msgid "Unsupported WRITE control item at %0" + msgstr "" + + #: f/bad.def:567 + #, c-format + msgid "Unsupported VXT statement at %0" + msgstr "" + + #: f/bad.def:569 + msgid "Attempt to specify second initial value for `%A' at %0" + msgstr "" + + #: f/bad.def:571 + msgid "Too few initial values in list of initializers for `%A' at %0" + msgstr "" + + #: f/bad.def:573 + #, c-format + msgid "Too many initial values in list of initializers starting at %0" + msgstr "" + + #: f/bad.def:575 + msgid "Array or substring specification for `%A' out of range in statement at %0" + msgstr "" + + #: f/bad.def:577 + msgid "Array subscript #%B out of range for initialization of `%A' in statement at %0" + msgstr "" + + #: f/bad.def:579 + msgid "Implied do-loop step count of 0 (zero) for iteration variable `%A' in statement at %0" + msgstr "" + + #: f/bad.def:581 + msgid "Implied do-loop iteration count of 0 (zero) for iteration variable `%A' in statement at %0" + msgstr "" + + #: f/bad.def:583 + #, c-format + msgid "Not an integer constant expression in implied do-loop in statement at %0" + msgstr "" + + #: f/bad.def:585 + msgid "Attempt to specify second initial value for element of `%A' at %0" + msgstr "" + + #: f/bad.def:587 + msgid "Attempt to EQUIVALENCE common areas `%A' and `%B' at %0" + msgstr "" + + #: f/bad.def:589 + msgid "Can't place `%A' as directed by EQUIVALENCE due to alignment restrictions" + msgstr "" + + #: f/bad.def:591 + msgid "Mismatched EQUIVALENCE requirements for placement of `%A' at both %C and %D bytes offset from `%B'" + msgstr "" + + #: f/bad.def:593 + msgid "Array or substring specification for `%A' out of range in EQUIVALENCE statement" + msgstr "" + + #: f/bad.def:595 + msgid "Substring of non-CHARACTER entity `%A' in EQUIVALENCE statement" + msgstr "" + + #: f/bad.def:597 + msgid "Array reference to scalar variable `%A' in EQUIVALENCE statement" + msgstr "" + + #: f/bad.def:599 + msgid "Array subscript #%B out of range for EQUIVALENCE of `%A'" + msgstr "" + + #: f/bad.def:601 + msgid "Padding of %A %D required before `%B' in common block `%C' at %0 -- consider reordering members, largest-type-size first" + msgstr "" + + #: f/bad.def:602 + msgid "Padding of %A %D required before `%B' in common block `%C' at %0" + msgstr "" + + #: f/bad.def:604 + msgid "Attempt to extend COMMON area beyond its starting point via EQUIVALENCE of `%A'" + msgstr "" + + #: f/bad.def:606 + msgid "Too few elements in reference to array `%A' in EQUIVALENCE statement" + msgstr "" + + #: f/bad.def:608 + msgid "Too many elements in reference to array `%A' in EQUIVALENCE statement" + msgstr "" + + #: f/bad.def:610 + msgid "Mixed CHARACTER and non-CHARACTER types via COMMON/EQUIVALENCE -- for example, `%A' and `%B'" + msgstr "" + + #: f/bad.def:612 + #, c-format + msgid "Invalid length specification at %0 for IMPLICIT statement -- must be integer constant expression" + msgstr "" + + #: f/bad.def:613 + #, fuzzy, c-format + msgid "Invalid length specification at %0" + msgstr "ongeldige linker operand van %s" + + #: f/bad.def:615 + msgid "Type of ENTRY point at %0 to function conflicts with type(s) of previous entrypoint(s) -- must all be identical-length CHARACTER or none be CHARACTER type" + msgstr "" + + #: f/bad.def:616 + msgid "Type of ENTRY point at %0 to function conflicts with type(s) of previous entrypoint(s)" + msgstr "" + + #: f/bad.def:618 + msgid "Return value `%A' for FUNCTION at %0 not referenced in subprogram" + msgstr "" + + #: f/bad.def:620 + msgid "Common block `%A' initialized at %0 already initialized at %1 -- only one program unit may specify initial values for a particular common block" + msgstr "" + + #: f/bad.def:621 + msgid "Common block `%A' initialized at %0 already initialized at %1" + msgstr "" + + #: f/bad.def:623 + msgid "Initial padding for common block `%A' is %B %C at %0 -- consider reordering members, largest-type-size first" + msgstr "" + + #: f/bad.def:624 + msgid "Initial padding for common block `%A' is %B %C at %0" + msgstr "" + + #: f/bad.def:626 + msgid "Initial padding for common block `%A' is %B %D at %0 but %C %E at %1 -- consider reordering members, largest-type-size first" + msgstr "" + + #: f/bad.def:627 + msgid "Initial padding for common block `%A' is %B %D at %0 but %C %E at %1" + msgstr "" + + #: f/bad.def:629 + msgid "Common block `%A' is SAVEd, explicitly or implicitly, at %0 but not SAVEd at %1" + msgstr "" + + #: f/bad.def:631 + msgid "Common block `%A' is %B %D in length at %0 but %C %E at %1" + msgstr "" + + #: f/bad.def:633 + msgid "Common block `%A' is initialized to %B %D long at %0 but enlarged to %C %E at %1 -- use consistent definitions or reorder program units in source file" + msgstr "" + + #: f/bad.def:634 + msgid "Common block `%A' is initialized to %B %D long at %0 but enlarged to %C %E at %1" + msgstr "" + + #: f/bad.def:636 + #, c-format + msgid "Blank common initialized at %0" + msgstr "" + + #: f/bad.def:638 + msgid "Intrinsic `%A' is passed as actual argument at %0 but not explicitly declared INTRINSIC" + msgstr "" + + #: f/bad.def:640 + msgid "External procedure `%A' is passed as actual argument at %0 but not explicitly declared EXTERNAL" + msgstr "" + + #: f/bad.def:642 + msgid "Character `%A' (for example) is upper-case in symbol name at %0" + msgstr "" + + #: f/bad.def:644 + msgid "Character `%A' (for example) is lower-case in symbol name at %0" + msgstr "" + + #: f/bad.def:646 + msgid "Character `%A' not followed at some point by lower-case character in symbol name at %0" + msgstr "" + + #: f/bad.def:648 + msgid "Initial character `%A' is lower-case in symbol name at %0" + msgstr "" + + #: f/bad.def:650 + msgid "DO-variable `%A' is type REAL or DOUBLE PRECISION at %0 -- unexpected behavior likely" + msgstr "" + + #: f/bad.def:651 + msgid "DO-variable `%A' is type REAL or DOUBLE PRECISION at %0" + msgstr "" + + #: f/bad.def:653 + msgid "NAMELIST not adequately supported by run-time library for source files with case preserved" + msgstr "" + + #: f/bad.def:655 + #, c-format + msgid "Nested %% construct (%%VAL, %%REF, or %%DESCR) at %0" + msgstr "" + + #: f/bad.def:657 + msgid "Invalid actual argument at %0 -- replace hollerith constants with %%REF('string') and typeless constants with INTEGER constant equivalents, or use -fugly-args or -fugly" + msgstr "" + + # Is the %s the argument, or is it 'of' the argument? + #: f/bad.def:658 + #, fuzzy, c-format + msgid "Invalid actual argument at %0" + msgstr "ongeldig type-argument `%s'" + + #: f/bad.def:660 + msgid "Quadruple-precision floating-point unsupported -- treating constant at %0 as double-precision" + msgstr "" + + #: f/bad.def:661 + msgid "Quadruple-precision floating-point unsupported" + msgstr "" + + #: f/bad.def:663 + msgid "Initialization of large (%B-unit) aggregate area `%A' at %0 currently very slow and takes lots of memory during g77 compile -- to be improved in 0.6" + msgstr "" + + #: f/bad.def:664 + msgid "This could take a while (initializing `%A' at %0)..." + msgstr "" + + #: f/bad.def:666 + #, c-format + msgid "Statement at %0 invalid in BLOCK DATA program unit at %1" + msgstr "" + + #: f/bad.def:668 + #, fuzzy, c-format + msgid "Truncating characters on right side of character constant at %0" + msgstr "karakterconstante met meer dan één karakter" + + #: f/bad.def:670 + #, c-format + msgid "Truncating characters on right side of hollerith constant at %0" + msgstr "" + + #: f/bad.def:672 + #, c-format + msgid "Truncating non-zero data on left side of numeric constant at %0" + msgstr "" + + #: f/bad.def:674 + #, c-format + msgid "Truncating non-zero data on left side of typeless constant at %0" + msgstr "" + + #: f/bad.def:676 + #, fuzzy + msgid "Typeless constant at %0 too large" + msgstr "integerconstante buiten bereik" + + #: f/bad.def:678 + #, c-format + msgid "First-column ampersand continuation at %0" + msgstr "" + + #: f/bad.def:680 f/bad.def:682 + msgid "Global name `%A' defined at %0 already defined at %1 [info -f g77 M GLOBALS]" + msgstr "" + + #: f/bad.def:684 f/bad.def:686 + msgid "Global name `%A' is %B at %0 but is %C at %1 [info -f g77 M GLOBALS]" + msgstr "" + + #: f/bad.def:688 f/bad.def:690 + msgid "Global name `%A' at %0 has different type at %1 [info -f g77 M GLOBALS]" + msgstr "" + + #: f/bad.def:692 + msgid "Too %B arguments passed to `%A' at %0 versus definition at %1 [info -f g77 M GLOBALS]" + msgstr "" + + #: f/bad.def:694 + msgid "Too %B arguments for `%A' at %0 versus invocation at %1 [info -f g77 M GLOBALS]" + msgstr "" + + #: f/bad.def:696 f/bad.def:698 + msgid "Argument #%B of `%A' is %C at %0 but is %D at %1 [info -f g77 M GLOBALS]" + msgstr "" + + #: f/bad.def:700 + #, fuzzy + msgid "Array `%A' at %0 is too large to handle" + msgstr "omvang van array `%s' is te groot" + + #: f/bad.def:702 + #, fuzzy + msgid "Statement function `%A' defined at %0 is not used" + msgstr "label `%s' gedefinieerd maar niet gebruikt" + + #: f/bad.def:704 + msgid "Intrinsic `%A', invoked at %0, known to be non-Y2K-compliant [info -f g77 M Y2KBAD]" + msgstr "" + + #: f/bad.def:706 + #, fuzzy + msgid "Internal compiler error -- cannot perform operation" + msgstr "interne fout - dup-operatie" + + #. Kind messages are used in diagnostic location reports of the + #. form ": In function `foo': ". + #: f/info-k.def:32 + msgid "In unknown kind" + msgstr "" + + #: f/info-k.def:33 + msgid "In entity" + msgstr "" + + #: f/info-k.def:34 + msgid "In function" + msgstr "" + + #: f/info-k.def:35 + msgid "In subroutine" + msgstr "" + + #: f/info-k.def:36 + #, fuzzy + msgid "In program" + msgstr "misplaatste '\\' in programma" + + #: f/info-k.def:37 + msgid "In block-data unit" + msgstr "" + + #: f/info-k.def:38 + msgid "In common block" + msgstr "" + + #: f/info-k.def:39 + msgid "In construct" + msgstr "" + + #: f/info-k.def:40 + msgid "In namelist" + msgstr "" + + #: f/info-k.def:41 + msgid "In anything" + msgstr "" + + #: java/check-init.c:915 + #, c-format + msgid "internal error in check-init: tree code not implemented: %s" + msgstr "" + + #: java/check-init.c:988 + #, fuzzy, c-format + msgid "final field '%s' may not have been initialized" + msgstr "object van variabele lengte mag geen beginwaarde krijgen" + + #: java/class.c:567 java/class.c:592 + msgid "internal error - too many interface type" + msgstr "" + + #: java/class.c:742 + msgid "bad method signature" + msgstr "" + + #: java/class.c:787 + msgid "misplaced ConstantValue attribute (not in any field)" + msgstr "" + + #: java/class.c:789 + #, fuzzy, c-format + msgid "duplicate ConstantValue attribute for field '%s'" + msgstr "niet-constante waarde voor tagveld `%s'" + + #: java/class.c:800 + #, c-format + msgid "ConstantValue attribute of field '%s' has wrong type" + msgstr "" + + #: java/class.c:1149 + #, c-format + msgid "field '%s' not found in class" + msgstr "" + + #: java/class.c:1407 + msgid "abstract method in non-abstract class" + msgstr "" + + # goede vertaling voor 'overrides'? + #: java/class.c:2092 + #, c-format + msgid "non-static method '%s' overrides static method" + msgstr "niet-static methode '%s' vervangt static methode" + + #: java/decl.c:1511 + #, c-format + msgid "In %s: overlapped variable and exception ranges at %d" + msgstr "" + + #: java/decl.c:1599 + msgid "bad type in parameter debug info" + msgstr "" + + #: java/decl.c:1609 + #, c-format + msgid "bad PC range for debug info for local `%s'" + msgstr "" + + #: java/expr.c:550 + msgid "stack underflow - dup* operation" + msgstr "" + + #: java/expr.c:1504 + #, c-format + msgid "reference `%s' is ambiguous: appears in interface `%s' and interface `%s'" + msgstr "" + + # Ik zou 'library' kunnen vertalen, maar ik heb in compiler-manuals nog niet + # dikwijls 'bibliotheek' zien gebruiken. + # De vertaalde boodschappen voor make gebruiken dat op het ogenblik wél, maar + # ik ben van plan daar verandering in te brengen. + #: java/expr.c:1533 + #, c-format + msgid "field `%s' not found" + msgstr "veld `%s' niet gevonden" + + #: java/expr.c:1684 + msgid "ret instruction not implemented" + msgstr "" + + #: java/expr.c:1821 + #, c-format + msgid "method '%s' not found in class" + msgstr "" + + #: java/expr.c:2025 + #, c-format + msgid "failed to find class '%s'" + msgstr "kan klasse '%s' niet vinden" + + #: java/expr.c:2037 + #, c-format + msgid "class '%s' has no method named '%s' matching signature '%s'" + msgstr "" + + #: java/expr.c:2047 + msgid "invokestatic on non static method" + msgstr "" + + #: java/expr.c:2052 + msgid "invokestatic on abstract method" + msgstr "" + + #: java/expr.c:2060 + msgid "invoke[non-static] on static method" + msgstr "" + + #: java/expr.c:2337 + #, fuzzy, c-format + msgid "missing field '%s' in '%s'" + msgstr "beginwaarde ontbreekt" + + #: java/expr.c:2343 + #, c-format + msgid "mismatching signature for field '%s' in '%s'" + msgstr "" + + #: java/expr.c:2366 + #, c-format + msgid "assignment to final field `%s' not in field's class" + msgstr "" + + #: java/expr.c:2371 + #, c-format + msgid "assignment to final static field `%s' not in class initializer" + msgstr "" + + #: java/expr.c:2378 + #, c-format + msgid "assignment to final field `%s' not in constructor" + msgstr "toekenning aan final-veld `%s' niet in constructor" + + #: java/expr.c:2616 + #, fuzzy, c-format + msgid "can't expand %s" + msgstr "open %s" + + #: java/expr.c:2792 + msgid "invalid PC in line number table" + msgstr "ongeldige PC in tabel met regelnummers" + + #. We've just reached the end of a region of dead code. + #: java/expr.c:2837 + #, c-format + msgid "unreachable bytecode from %d to before %d" + msgstr "" + + #. We've just reached the end of a region of dead code. + #: java/expr.c:2874 + #, c-format + msgid "unreachable bytecode from %d to the end of the method" + msgstr "" + + #. duplicate code from LOAD macro + #: java/expr.c:3193 + #, fuzzy + msgid "unrecogized wide sub-instruction" + msgstr "signature-string niet herkend" + + #: java/jcf-io.c:410 + #, c-format + msgid "source file for class `%s' is newer than its matching class file. Source file `%s' used instead" + msgstr "" + + #: java/jcf-parse.c:379 + msgid "bad string constant" + msgstr "slechte stringconstante" + + #: java/jcf-parse.c:435 + #, c-format + msgid "bad value constant type %d, index %d" + msgstr "" + + #: java/jcf-parse.c:693 + #, fuzzy, c-format + msgid "cannot find file for class %s" + msgstr "[kan %s niet vinden]" + + #: java/jcf-parse.c:705 + #, fuzzy + msgid "not a valid Java .class file" + msgstr "ongeldige basisklasse" + + #: java/jcf-parse.c:708 + #, fuzzy + msgid "error while parsing constant pool" + msgstr "%s voor stringconstante" + + #: java/jcf-parse.c:711 + #, fuzzy, c-format + msgid "error in constant pool entry #%d\n" + msgstr "constant object wordt beschreven (argument %d)" + + #. FIXME - where was first time + #: java/jcf-parse.c:723 + #, c-format + msgid "reading class %s for the second time from %s" + msgstr "" + + #: java/jcf-parse.c:741 + msgid "error while parsing fields" + msgstr "" + + #: java/jcf-parse.c:744 + msgid "error while parsing methods" + msgstr "" + + #: java/jcf-parse.c:747 + msgid "error while parsing final attributes" + msgstr "" + + #: java/jcf-parse.c:761 + #, c-format + msgid "the `java.lang.Object' that was found in `%s' didn't have the special zero-length `gnu.gcj.gcj-compiled' attribute. This generally means that your classpath is incorrectly set. Use `info gcj \"Input Options\"' to see the info page describing how to set the classpath" + msgstr "" + + #: java/jcf-parse.c:846 + msgid "missing Code attribute" + msgstr "" + + #: java/jcf-parse.c:1081 + msgid "source file seen twice on command line and will be compiled only once" + msgstr "" + + #: java/jcf-parse.c:1097 + #, fuzzy + msgid "no input file specified" + msgstr "Geen invoerbestanden" + + #: java/jcf-parse.c:1129 + #, fuzzy, c-format + msgid "can't close input file %s" + msgstr "kan bestand '%s' niet openen" + + #: java/jcf-parse.c:1166 + #, c-format + msgid "bad zip/jar file %s" + msgstr "" + + #: java/jcf-write.c:2626 + #, c-format + msgid "internal error in generate_bytecode_insn - tree code not implemented: %s" + msgstr "" + + #: java/jcf-write.c:2933 + #, fuzzy + msgid "field initializer type mismatch" + msgstr "ongeldige beginwaarde voor bit-string" + + #: java/jcf-write.c:3342 + #, fuzzy, c-format + msgid "can't create directory %s" + msgstr "dubbele folder `%s' wordt genegeerd\n" + + #: java/jcf-write.c:3369 + #, fuzzy, c-format + msgid "can't to open %s" + msgstr "open %s" + + #: java/jv-scan.c:183 + msgid "only one of `--print-main', `--list-class', and `--complexity' allowed" + msgstr "" + + #: java/jv-scan.c:186 + #, fuzzy, c-format + msgid "can't open output file `%s'" + msgstr "kan bestand '%s' niet openen" + + #: java/jv-scan.c:222 + #, fuzzy, c-format + msgid "file not found `%s'" + msgstr "kan %s niet vinden" + + #: java/jvspec.c:384 + msgid "can't specify `-D' without `--main'\n" + msgstr "" + + #: java/jvspec.c:390 + msgid "-R requires -o" + msgstr "" + + #: java/jvspec.c:397 + msgid "warning: already-compiled .class files ignored with -C" + msgstr "" + + #: java/jvspec.c:404 + #, fuzzy + msgid "cannot specify both -C and -o" + msgstr "-EB en -EL mogen niet samen gebruikt worden" + + #: java/jvspec.c:416 + msgid "cannot create temporary file" + msgstr "" + + #: java/jvspec.c:444 + msgid "using both @FILE with multiple files not implemented" + msgstr "" + + #: java/jvspec.c:501 + msgid "cannot specify `main' class when not linking" + msgstr "" + + #: java/lang.c:433 + msgid "can't do dependency tracking with input from stdin" + msgstr "" + + #: java/lang.c:449 + msgid "couldn't determine target name for dependency tracking" + msgstr "" + + #: java/lex.c:303 + #, c-format + msgid "" + "unknown encoding: `%s'\n" + "This might mean that your locale's encoding is not supported\n" + "by your system's iconv(3) implementation. If you aren't trying\n" + "to use a particular encoding for your input file, try the\n" + "`--encoding=UTF-8' option" + msgstr "" + + #: java/mangle.c:85 + #, fuzzy, c-format + msgid "can't mangle %s" + msgstr "close %s" + + #: java/mangle_name.c:145 java/mangle_name.c:217 + msgid "internal error - invalid Utf8 name" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:748 + #: ../../../gcc/vanilla/gcc/java/parse.y:786 + #, fuzzy + msgid "Missing name" + msgstr "beginwaarde ontbreekt" + + #: ../../../gcc/vanilla/gcc/java/parse.y:750 + #: ../../../gcc/vanilla/gcc/java/parse.y:788 + #: ../../../gcc/vanilla/gcc/java/parse.y:813 + #: ../../../gcc/vanilla/gcc/java/parse.y:997 + #: ../../../gcc/vanilla/gcc/java/parse.y:1344 + #: ../../../gcc/vanilla/gcc/java/parse.y:1555 + #: ../../../gcc/vanilla/gcc/java/parse.y:1557 + #: ../../../gcc/vanilla/gcc/java/parse.y:1786 + #: ../../../gcc/vanilla/gcc/java/parse.y:1812 + #: ../../../gcc/vanilla/gcc/java/parse.y:1823 + #: ../../../gcc/vanilla/gcc/java/parse.y:1834 + #: ../../../gcc/vanilla/gcc/java/parse.y:1846 + msgid "';' expected" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:811 + msgid "'*' expected" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:825 + msgid "Class or interface declaration expected" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:860 + #: ../../../gcc/vanilla/gcc/java/parse.y:862 + msgid "Missing class name" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:865 + #: ../../../gcc/vanilla/gcc/java/parse.y:869 + #: ../../../gcc/vanilla/gcc/java/parse.y:877 + #: ../../../gcc/vanilla/gcc/java/parse.y:1042 + #: ../../../gcc/vanilla/gcc/java/parse.y:1290 + #: ../../../gcc/vanilla/gcc/java/parse.y:1292 + #: ../../../gcc/vanilla/gcc/java/parse.y:1621 + #: ../../../gcc/vanilla/gcc/java/parse.y:1857 + #: ../../../gcc/vanilla/gcc/java/parse.y:1889 + #: ../../../gcc/vanilla/gcc/java/parse.y:1941 + msgid "'{' expected" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:879 + msgid "Missing super class name" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:889 + #: ../../../gcc/vanilla/gcc/java/parse.y:905 + msgid "Missing interface name" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:976 + #: ../../../gcc/vanilla/gcc/java/parse.y:1309 + #: ../../../gcc/vanilla/gcc/java/parse.y:1370 + #: ../../../gcc/vanilla/gcc/java/parse.y:1579 + #: ../../../gcc/vanilla/gcc/java/parse.y:1801 + #: ../../../gcc/vanilla/gcc/java/parse.y:1810 + #: ../../../gcc/vanilla/gcc/java/parse.y:1821 + #: ../../../gcc/vanilla/gcc/java/parse.y:1832 + #: ../../../gcc/vanilla/gcc/java/parse.y:1844 + #: ../../../gcc/vanilla/gcc/java/parse.y:1861 + #: ../../../gcc/vanilla/gcc/java/parse.y:1863 + #: ../../../gcc/vanilla/gcc/java/parse.y:1934 + #: ../../../gcc/vanilla/gcc/java/parse.y:2105 + #: ../../../gcc/vanilla/gcc/java/parse.y:2167 + #: ../../../gcc/vanilla/gcc/java/parse.y:2319 + #: ../../../gcc/vanilla/gcc/java/parse.y:2331 + #: ../../../gcc/vanilla/gcc/java/parse.y:2338 + #: ../../../gcc/vanilla/gcc/java/parse.y:2345 + #: ../../../gcc/vanilla/gcc/java/parse.y:2356 + #: ../../../gcc/vanilla/gcc/java/parse.y:2358 + #: ../../../gcc/vanilla/gcc/java/parse.y:2396 + #: ../../../gcc/vanilla/gcc/java/parse.y:2398 + #: ../../../gcc/vanilla/gcc/java/parse.y:2400 + #: ../../../gcc/vanilla/gcc/java/parse.y:2421 + #: ../../../gcc/vanilla/gcc/java/parse.y:2423 + #: ../../../gcc/vanilla/gcc/java/parse.y:2425 + #: ../../../gcc/vanilla/gcc/java/parse.y:2441 + #: ../../../gcc/vanilla/gcc/java/parse.y:2443 + #: ../../../gcc/vanilla/gcc/java/parse.y:2464 + #: ../../../gcc/vanilla/gcc/java/parse.y:2466 + #: ../../../gcc/vanilla/gcc/java/parse.y:2468 + #: ../../../gcc/vanilla/gcc/java/parse.y:2496 + #: ../../../gcc/vanilla/gcc/java/parse.y:2498 + #: ../../../gcc/vanilla/gcc/java/parse.y:2500 + #: ../../../gcc/vanilla/gcc/java/parse.y:2502 + #: ../../../gcc/vanilla/gcc/java/parse.y:2520 + #: ../../../gcc/vanilla/gcc/java/parse.y:2522 + #: ../../../gcc/vanilla/gcc/java/parse.y:2533 + #: ../../../gcc/vanilla/gcc/java/parse.y:2544 + #: ../../../gcc/vanilla/gcc/java/parse.y:2555 + #: ../../../gcc/vanilla/gcc/java/parse.y:2566 + #: ../../../gcc/vanilla/gcc/java/parse.y:2577 + #: ../../../gcc/vanilla/gcc/java/parse.y:2590 + #: ../../../gcc/vanilla/gcc/java/parse.y:2594 + #: ../../../gcc/vanilla/gcc/java/parse.y:2596 + #: ../../../gcc/vanilla/gcc/java/parse.y:2609 + #, fuzzy + msgid "Missing term" + msgstr "beginwaarde ontbreekt" + + #: ../../../gcc/vanilla/gcc/java/parse.y:991 + #, fuzzy + msgid "Missing variable initializer" + msgstr "beginwaarde ontbreekt" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1008 + #, fuzzy + msgid "Invalid declaration" + msgstr "lege declaratie" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1014 + #, fuzzy + msgid "Can't specify array dimension in a declaration" + msgstr "POS mag niet opgegeven worden voor een lijst van veld-declaraties" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1016 + #: ../../../gcc/vanilla/gcc/java/parse.y:1092 + #: ../../../gcc/vanilla/gcc/java/parse.y:2142 + #: ../../../gcc/vanilla/gcc/java/parse.y:2164 + #: ../../../gcc/vanilla/gcc/java/parse.y:2168 + #: ../../../gcc/vanilla/gcc/java/parse.y:2203 + #: ../../../gcc/vanilla/gcc/java/parse.y:2280 + #: ../../../gcc/vanilla/gcc/java/parse.y:2290 + msgid "']' expected" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1020 + #, fuzzy + msgid "Unbalanced ']'" + msgstr "niet-gebalanceerde `#endif'" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1056 + msgid "Invalid method declaration, method name required" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1062 + #: ../../../gcc/vanilla/gcc/java/parse.y:1064 + #: ../../../gcc/vanilla/gcc/java/parse.y:2025 + msgid "Identifier expected" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1067 + msgid "Invalid method declaration, return type required" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1090 + #: ../../../gcc/vanilla/gcc/java/parse.y:1535 + #: ../../../gcc/vanilla/gcc/java/parse.y:1542 + #: ../../../gcc/vanilla/gcc/java/parse.y:1551 + #: ../../../gcc/vanilla/gcc/java/parse.y:1553 + #: ../../../gcc/vanilla/gcc/java/parse.y:1581 + #: ../../../gcc/vanilla/gcc/java/parse.y:1689 + #: ../../../gcc/vanilla/gcc/java/parse.y:1970 + #: ../../../gcc/vanilla/gcc/java/parse.y:2023 + msgid "')' expected" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1106 + #, fuzzy + msgid "Missing formal parameter term" + msgstr "parameternaam ontbreekt uit parameterlijst" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1121 + #: ../../../gcc/vanilla/gcc/java/parse.y:1126 + #, fuzzy + msgid "Missing identifier" + msgstr "beginwaarde ontbreekt" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1146 + #: ../../../gcc/vanilla/gcc/java/parse.y:1155 + msgid "Missing class type term" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1307 + #, fuzzy + msgid "Invalid interface type" + msgstr "Ongeldig register voor vergelijking" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1499 + #: ../../../gcc/vanilla/gcc/java/parse.y:1668 + #: ../../../gcc/vanilla/gcc/java/parse.y:1670 + msgid "':' expected" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1521 + #: ../../../gcc/vanilla/gcc/java/parse.y:1526 + #: ../../../gcc/vanilla/gcc/java/parse.y:1531 + #, fuzzy + msgid "Invalid expression statement" + msgstr "ongeldige expressie als operand" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1549 + #: ../../../gcc/vanilla/gcc/java/parse.y:1577 + #: ../../../gcc/vanilla/gcc/java/parse.y:1617 + #: ../../../gcc/vanilla/gcc/java/parse.y:1685 + #: ../../../gcc/vanilla/gcc/java/parse.y:1753 + #: ../../../gcc/vanilla/gcc/java/parse.y:1859 + #: ../../../gcc/vanilla/gcc/java/parse.y:1927 + #: ../../../gcc/vanilla/gcc/java/parse.y:2017 + #: ../../../gcc/vanilla/gcc/java/parse.y:2019 + #: ../../../gcc/vanilla/gcc/java/parse.y:2027 + #: ../../../gcc/vanilla/gcc/java/parse.y:2263 + #: ../../../gcc/vanilla/gcc/java/parse.y:2265 + msgid "'(' expected" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1619 + msgid "Missing term or ')'" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1666 + #, fuzzy + msgid "Missing or invalid constant expression" + msgstr "overflow in constante expressie" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1687 + msgid "Missing term and ')' expected" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1726 + #, fuzzy + msgid "Invalid control expression" + msgstr "Ongeldig token in expressie" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1728 + #: ../../../gcc/vanilla/gcc/java/parse.y:1730 + #, fuzzy + msgid "Invalid update expression" + msgstr "Ongeldig token in expressie" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1755 + #, fuzzy + msgid "Invalid init statement" + msgstr "ongeldige beginwaarde" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1930 + msgid "Missing term or ')' expected" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1972 + msgid "'class' or 'this' expected" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:1974 + #: ../../../gcc/vanilla/gcc/java/parse.y:1976 + msgid "'class' expected" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:2021 + msgid "')' or term expected" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:2140 + msgid "'[' expected" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:2218 + msgid "Field expected" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:2275 + #: ../../../gcc/vanilla/gcc/java/parse.y:2285 + msgid "Missing term and ']' expected" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:2389 + #, fuzzy + msgid "']' expected, invalid type expression" + msgstr "ongeldige waarheidsexpressie" + + #: ../../../gcc/vanilla/gcc/java/parse.y:2392 + #, fuzzy + msgid "Invalid type expression" + msgstr "Ongeldig token in expressie" + + #: ../../../gcc/vanilla/gcc/java/parse.y:2504 + #, fuzzy + msgid "Invalid reference type" + msgstr "Ongeldige modus voor gen_tst_reg" + + #: ../../../gcc/vanilla/gcc/java/parse.y:2982 + msgid "Constructor invocation must be first thing in a constructor" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:2984 + msgid "Only constructors can invoke constructors" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:2993 + #, c-format + msgid ": `%s' JDK1.1(TM) feature" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:3053 + #: ../../../gcc/vanilla/gcc/java/parse.y:3055 + #, c-format + msgid "" + "%s.\n" + "%s" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:6789 + #, c-format + msgid "malformed .zip archive in CLASSPATH: %s" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:6860 + #, c-format + msgid "Can't find default package `%s'. Check the CLASSPATH environment variable and the access to the archives" + msgstr "" + + # 'whitespace' -> 'witruimte'? + #: ../../../gcc/vanilla/gcc/java/parse.y:12191 + #, fuzzy, c-format + msgid "missing static field `%s'" + msgstr "ontbrekende witruimte na getal `%s'" + + #: ../../../gcc/vanilla/gcc/java/parse.y:12196 + #, c-format + msgid "not a static field `%s'" + msgstr "`%s' is geen static veld" + + #: ../../../gcc/vanilla/gcc/java/parse.y:12239 + #, c-format + msgid "No case for %s" + msgstr "" + + #: ../../../gcc/vanilla/gcc/java/parse.y:13140 + #, fuzzy, c-format + msgid "unregistered operator %s" + msgstr "registernaam niet opgegeven voor `%s'" + + # Moet 'signature-string' vertaald worden? + #: java/typeck.c:566 + msgid "junk at end of signature string" + msgstr "Brol aan einde van signature-string." + + #: java/verify.c:480 + msgid "bad pc in exception_table" + msgstr "" + + #: java/verify.c:1392 + #, c-format + msgid "unknown opcode %d@pc=%d during verification" + msgstr "" + + #: java/verify.c:1462 java/verify.c:1475 java/verify.c:1479 + #, c-format + msgid "verification error at PC=%d" + msgstr "" + + #: java/lang-options.h:32 + msgid "Disable automatic array bounds checking" + msgstr "" + + #: java/lang-options.h:34 + msgid "Assume native functions are implemented using JNI" + msgstr "" + + #: java/lang-options.h:36 + msgid "Set class path and suppress system path" + msgstr "" + + #: java/lang-options.h:38 + msgid "Set class path" + msgstr "" + + #: java/lang-options.h:40 + msgid "Choose class whose main method should be used" + msgstr "" + + #: java/lang-options.h:42 + msgid "Choose input encoding (default comes from locale)" + msgstr "" + + #: java/lang-options.h:44 + msgid "Add directory to class path" + msgstr "" + + #: java/lang-options.h:46 + msgid "Directory where class files should be written" + msgstr "" + + #: java/lang-options.h:48 + msgid "Warn if modifiers are specified when not necessary" + msgstr "" + + #: java/lang-options.h:50 + msgid "Warn if deprecated empty statements are found" + msgstr "" + + #: java/lang-options.h:52 + msgid "Warn if .class files are out of date" + msgstr "" + + #: java/lang-options.h:54 + msgid "Always check for non gcj generated classes archives" + msgstr "" + + #: java/lang-options.h:56 + msgid "Never optimize static class initialization code" + msgstr "" + + #: objc/objc-act.c:606 + msgid "no class name specified as argument to -fconstant-string-class" + msgstr "" + + #: objc/objc-act.c:757 + #, c-format + msgid "object does not conform to the `%s' protocol" + msgstr "" + + #: objc/objc-act.c:801 + #, c-format + msgid "class `%s' does not implement the `%s' protocol" + msgstr "" + + #: objc/objc-act.c:939 + #, c-format + msgid "unexpected type for `id' (%s)" + msgstr "" + + #: objc/objc-act.c:944 + msgid "undefined type `id', please import " + msgstr "" + + #: objc/objc-act.c:996 + #, c-format + msgid "protocol `%s' has circular dependency" + msgstr "" + + #: objc/objc-act.c:1018 objc/objc-act.c:5229 + #, fuzzy, c-format + msgid "cannot find protocol declaration for `%s'" + msgstr "geen eerdere declaratie voor `%s'" + + #: objc-parse.y:1752 objc/objc-act.c:1279 objc/objc-act.c:5747 + #: objc/objc-act.c:6077 objc/objc-act.c:6126 objc/objc-act.c:6162 + #, fuzzy, c-format + msgid "cannot find interface declaration for `%s'" + msgstr "geen eerdere declaratie voor `%s'" + + #: objc/objc-act.c:1304 + #, fuzzy, c-format + msgid "cannot find reference tag for class `%s'" + msgstr "kan niet derefereren, is geen pointer." + + #: objc/objc-act.c:2314 + #, fuzzy, c-format + msgid "cannot find class `%s'" + msgstr "kan %s niet vinden" + + #: objc/objc-act.c:2316 + #, fuzzy, c-format + msgid "class `%s' already exists" + msgstr "veld `%s' heeft al een beginwaarde gekregen" + + #. fatal did not work with 2 args...should fix + #: objc/objc-act.c:2440 + #, c-format + msgid "cannot find interface declaration for `%s', superclass of `%s'" + msgstr "" + + #: objc/objc-act.c:2447 + #, fuzzy, c-format + msgid "circular inheritance in interface declaration for `%s'" + msgstr "geneste externe declaratie van `%s'" + + #: objc/objc-act.c:3500 objc/objc-act.c:3517 + msgid "inconsistent instance variable specification" + msgstr "" + + #: objc/objc-act.c:4710 + #, c-format + msgid "multiple declarations for method `%s'" + msgstr "" + + #: objc/objc-act.c:4876 + #, c-format + msgid "invalid receiver type `%s'" + msgstr "" + + #: objc/objc-act.c:4907 objc/objc-act.c:4933 objc/objc-act.c:4981 + #, c-format + msgid "`%s' does not respond to `%s'" + msgstr "" + + #: objc/objc-act.c:4913 objc/objc-act.c:7197 + #, c-format + msgid "no super class declared in interface for `%s'" + msgstr "" + + #: objc/objc-act.c:5011 + msgid "cannot find class (factory) method" + msgstr "" + + #: objc/objc-act.c:5012 objc/objc-act.c:5056 + #, c-format + msgid "return type for `%s' defaults to id" + msgstr "" + + #: objc/objc-act.c:5029 + #, c-format + msgid "method `%s' not implemented by protocol" + msgstr "" + + #: objc/objc-act.c:5038 + msgid "return type defaults to id" + msgstr "" + + #: objc/objc-act.c:5055 + #, fuzzy + msgid "cannot find method" + msgstr "kan `nm' niet vinden" + + #. Historically, a class method that produced objects (factory + #. method) would assign `self' to the instance that it + #. allocated. This would effectively turn the class method into + #. an instance method. Following this assignment, the instance + #. variables could be accessed. That practice, while safe, + #. violates the simple rule that a class method should not refer + #. to an instance variable. It's better to catch the cases + #. where this is done unknowingly than to support the above + #. paradigm. + #: objc/objc-act.c:5298 + #, c-format + msgid "instance variable `%s' accessed in class method" + msgstr "" + + #: objc/objc-act.c:5548 + #, fuzzy, c-format + msgid "duplicate definition of class method `%s'" + msgstr "herhaalde definitie `%s'" + + #: objc/objc-act.c:5554 + #, fuzzy, c-format + msgid "duplicate declaration of class method `%s'" + msgstr "impliciete declaratie van functie `%s'" + + #: objc/objc-act.c:5590 + #, fuzzy, c-format + msgid "duplicate definition of instance method `%s'" + msgstr "herhaalde definitie `%s'" + + #: objc/objc-act.c:5596 + #, fuzzy, c-format + msgid "duplicate declaration of instance method `%s'" + msgstr "impliciete declaratie van functie `%s'" + + #: objc/objc-act.c:5636 + #, c-format + msgid "duplicate interface declaration for category `%s(%s)'" + msgstr "" + + #: objc/objc-act.c:5722 + #, c-format + msgid "instance variable `%s' is declared private" + msgstr "" + + #: objc/objc-act.c:5769 + #, c-format + msgid "instance variable `%s' is declared %s" + msgstr "" + + #: objc/objc-act.c:5779 + msgid "static access to object of type `id'" + msgstr "" + + #: objc/objc-act.c:5816 objc/objc-act.c:5909 + #, c-format + msgid "incomplete implementation of class `%s'" + msgstr "" + + #: objc/objc-act.c:5820 objc/objc-act.c:5914 + #, c-format + msgid "incomplete implementation of category `%s'" + msgstr "" + + #: objc/objc-act.c:5825 objc/objc-act.c:5919 + #, c-format + msgid "method definition for `%c%s' not found" + msgstr "" + + #: objc/objc-act.c:5963 + #, c-format + msgid "%s `%s' does not fully implement the `%s' protocol" + msgstr "" + + #: objc/objc-act.c:6021 objc/objc-act.c:8118 + msgid "`@end' missing in implementation context" + msgstr "" + + #: objc/objc-act.c:6049 + #, c-format + msgid "reimplementation of class `%s'" + msgstr "" + + #: objc/objc-act.c:6091 + #, c-format + msgid "conflicting super class name `%s'" + msgstr "" + + #: objc/objc-act.c:6106 + #, c-format + msgid "duplicate interface declaration for class `%s'" + msgstr "" + + #: objc/objc-act.c:6388 + #, c-format + msgid "duplicate declaration for protocol `%s'" + msgstr "" + + #: objc/objc-act.c:7238 + msgid "[super ...] must appear in a method context" + msgstr "" + + #: objc/objc-act.c:8220 objc/objc-act.c:8236 + #, c-format + msgid "potential selector conflict for method `%s'" + msgstr "" + + #: objc-parse.y:2602 + msgid "`@end' must appear in an implementation context" + msgstr "" + + #: objc-parse.y:2876 + msgid "method definition not in class context" + msgstr "" + + #: objc/lang-options.h:27 + msgid "Dump decls to a .decl file" + msgstr "" + + #: objc/lang-options.h:29 + msgid "Generate code for GNU runtime environment" + msgstr "" + + #: objc/lang-options.h:32 + msgid "Generate code for NeXT runtime environment" + msgstr "" + + #: objc/lang-options.h:35 + msgid "Warn if a selector has multiple methods" + msgstr "" + + #: objc/lang-options.h:39 + msgid "Do not warn if inherited methods are unimplemented" + msgstr "" + + #: objc/lang-options.h:41 + msgid "Generate C header of platform specific features" + msgstr "" + + #: objc/lang-options.h:43 + #, fuzzy + msgid "Specify the name of the class for constant strings" + msgstr "het argument van `asm' is geen constante string" + + #: config/mmix/mmix.h:112 + msgid "options -mabi=mmixware and -mabi=gnu are mutually exclusive" + msgstr "" + + #: f/lang-specs.h:35 gcc.c:677 + msgid "GNU C does not support -C without using -E" + msgstr "GNU C ondersteunt -C niet wanneer -E niet gebruikt wordt" + + #: java/lang-specs.h:33 + #, fuzzy + msgid "-fjni and -femit-class-files are incompatible" + msgstr "-fpic en -mapcs-reent zijn niet compatibel" + + #: java/lang-specs.h:34 + #, fuzzy + msgid "-fjni and -femit-class-file are incompatible" + msgstr "-fpic en -mapcs-reent zijn niet compatibel" + + #: java/lang-specs.h:35 java/lang-specs.h:36 + msgid "-femit-class-file should used along with -fsyntax-only" + msgstr "" + + #: config/mcore/mcore.h:60 + msgid "choose either big or little endian, not both" + msgstr "" + + #: config/mcore/mcore.h:63 + msgid "choose either m340 or m210 not both" + msgstr "" + + #: config/mcore/mcore.h:64 + msgid "the m210 does not have little endian support" + msgstr "" + + #: config/alpha/freebsd.h:36 config/i386/freebsd-aout.h:227 + #: config/ia64/freebsd.h:24 config/sparc/freebsd.h:31 + msgid "`-p' not supported; use `-pg' and gprof(1)" + msgstr "`-p' wordt niet ondersteund; gebruik `-pg' en gprof(1)" + + #: ada/lang-specs.h:39 gcc.c:698 java/jvspec.c:74 + msgid "-pg and -fomit-frame-pointer are incompatible" + msgstr "-pg en -fomit-frame-pointer zijn niet compatibel" + + #: ada/lang-specs.h:42 + msgid "-c or -S required for Ada" + msgstr "" + + #: config/arm/arm.h:213 + msgid "-mapcs-26 and -mapcs-32 may not be used together" + msgstr "-mapcs-26 en -mapcs-32 mogen niet samen gebruikt worden" + + #: config/arm/arm.h:225 + msgid "-msoft-float and -mhard_float may not be used together" + msgstr "-msoft-float en -mhard_float mogen niet samen gebruikt worden" + + #: config/arm/arm.h:236 + msgid "-mbig-endian and -mlittle-endian may not be used together" + msgstr "-mbig-endian en -mlittle-endian mogen niet samen gebruikt worden" + + #: config/arm/arm.h:254 + #, fuzzy + msgid "incompatible interworking options" + msgstr "incompatibele operands voor %s" + + #: config/arm/riscix.h:73 config/arm/riscix.h:133 + msgid "-mbsd and -pedantic incompatible" + msgstr "-mbsd en -pedantic zijn niet compatibel" + + #: config/arm/riscix.h:74 config/arm/riscix.h:134 + msgid "-mbsd and -mxopen incompatible" + msgstr "-mbsd en -mxopen zijn niet compatibel" + + #: config/arm/riscix.h:75 config/arm/riscix.h:135 + msgid "-mxopen and -pedantic incompatible" + msgstr "-mxopen en -pedantic zijn niet compatibel" + + #: config/nextstep.h:161 config/nextstep.h:164 + #, fuzzy + msgid "-p profiling is no longer supported. Use -pg instead" + msgstr "profileren met -p wordt niet meer ondersteund. Gebruik -pg." + + #: gcc.c:846 + msgid "-E required when input is from standard input" + msgstr "-E is nodig wanneer de invoer van standaardinvoer komt" + + #: gcc.c:850 + msgid "compilation of header file requested" + msgstr "" + + #: config/i386/cygwin.h:169 config/i386/mingw32.h:69 + #, fuzzy + msgid "shared and mdll are not compatible" + msgstr "-pg en -fomit-frame-pointer zijn niet compatibel" + + #: config/i386/sco5.h:662 config/i386/sco5.h:737 + msgid "-static not valid with -mcoff" + msgstr "-static is niet geldig met -mcoff" + + #: config/i386/sco5.h:663 config/i386/sco5.h:738 + msgid "-shared not valid with -mcoff" + msgstr "-shared is niet geldig met -mcoff" + + #: config/i386/sco5.h:664 config/i386/sco5.h:739 + msgid "-symbolic not valid with -mcoff" + msgstr "-symbolic is niet geldig met -mcoff" + + #: config/i386/sco5.h:702 + msgid "-fpic is not valid with -mcoff" + msgstr "-fpic is niet geldig met -mcoff" + + #: config/i386/sco5.h:703 + msgid "-fPIC is not valid with -mcoff" + msgstr "-fPIC is niet geldig met -mcoff" + + #: config/i386/sco5.h:740 + msgid "-fpic not valid with -mcoff" + msgstr "-fpic is niet geldig met -mcoff" + + #: config/i386/sco5.h:741 + msgid "-fPIC not valid with -mcoff" + msgstr "-fPIC is niet geldig met -mcoff" + + #: config/dsp16xx/dsp16xx.h:103 config/dsp16xx/dsp16xx.h:112 + #, fuzzy + msgid "a -ifile option requires a -map option" + msgstr "Een -ifile optie heeft een -map optie nodig" + + #: config/arc/arc.h:59 config/mips/mips.h:1007 + msgid "may not use both -EB and -EL" + msgstr "-EB en -EL mogen niet samen gebruikt worden" + + #: config/i860/fx2800.h:290 + msgid "-p option not supported: use -pg instead" + msgstr "de -p optie wordt niet ondersteund: gebruik -pg" + + #: config/mips/mips.h:837 + #, fuzzy + msgid "-pipe is not supported" + msgstr "-pipe wordt niet ondersteund" + + #: config/mips/mips.h:1003 + msgid "may not use both -mfp64 and -msingle-float" + msgstr "-mfp64 en -msingle-float mogen niet samen gebruikt worden" + + #: config/mips/mips.h:1004 + msgid "may not use both -mfp64 and -m4650" + msgstr "-mfp64 en -m4650 mogen niet samen gebruikt worden" + + #: config/mips/mips.h:1006 + #, fuzzy + msgid "may not use both -mgp32 and -mfp64" + msgstr "-mfp64 en -m4650 mogen niet samen gebruikt worden" + + #: config/mips/r3900.h:36 config/mips/r3900.h:42 + #, fuzzy + msgid "-mhard-float not supported" + msgstr "-mhard-float wordt niet ondersteund" + + #: config/mips/r3900.h:38 config/mips/r3900.h:44 + #, fuzzy + msgid "-msingle-float and -msoft-float can not both be specified" + msgstr "-msingle-float en -msoft-float kunnen niet samen gebruikt worden." + + #: config/i386/cygwin.h:114 + #, fuzzy + msgid "mno-cygwin and mno-win32 are not compatible" + msgstr "-pg en -fomit-frame-pointer zijn niet compatibel" + + #: config/vax/vax.h:42 config/vax/vax.h:43 + msgid "profiling not supported with -mg\n" + msgstr "profileren wordt niet ondersteund wanneer -mg gebruikt wordt\n" diff -Nrc3pad gcc-3.0.4/gcc/po/stamp-cat-id gcc-3.1/gcc/po/stamp-cat-id *** gcc-3.0.4/gcc/po/stamp-cat-id Wed May 31 17:46:30 2000 --- gcc-3.1/gcc/po/stamp-cat-id Thu Jan 1 00:00:00 1970 *************** *** 1 **** - timestamp --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/po/sv.gmo gcc-3.1/gcc/po/sv.gmo *** gcc-3.0.4/gcc/po/sv.gmo Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/po/sv.gmo Wed May 15 02:41:46 2002 *************** *** 0 **** --- 1,466 ---- + Þ•­„%=ìJàcácôc-d>dÛSd:/eje5…e9»eõeEf4Vf3‹fH¿fJgqSgMÅh”i¡¨iJk›Sl=ïl?-mAmmJ¯m0úmN+nKznJÆn•o~§pQ&r1xr7ªr2âr<s1RsF„sAËsL tCZtDžt?ãtN#uOru³ÂuOvvKÆv}w÷w*ˆy³z8Ðz4 {4>{Es{K¹{N}IT}Dž}Bã}P&~Mw~Å~NUQ¤Lö<C€N€€LÏ€òAƒHQƒ9šƒ,Ôƒ6„+8…d…k…€… “…Ÿ…£…*¼…ç…††'†;†K†b†t†††˜†³†ņ + ؆>ã†#"‡#F‡j‡…‡Ÿ‡H¸‡Nˆ Pˆ/]ˆ:ˆ,Ȉ/õˆ3%‰Y‰r‰‹‰މ’‰2–‰ɉ牊Š)Š:ŠMŠbŠqЀЕХŠÀŠ ÚŠçŠ‹!‹6‹R‹,b‹,‹#¼‹à‹#û‹Œ7Œ;ŒBŒ,IŒvŒ”ŒŒ»ŒÚŒîŒ%)4^{/¿Óç#Ž)Ž=EŽ@ƒŽ ÄŽ ÒŽ0àŽ*+<hy,¬#Ù ý1 .=l»-Ø‘,‘,G‘*t‘%Ÿ‘3Å‘.ù‘(’D’c’$’.¤’'Ó’û’“6“6R“‰“8“0Ö“9”A” `”!”£”4¿”(ô”•::•6u•2¬•"ß•(–6+–1b–-”––Ú–î– —2,— _—i—l— {—…—&—W´—/ ˜/<˜l˜†˜ +  ˜,«˜-ؘ0™ 7™0E™v™Ž™§™2¸™-뙚+šGš^š"}š6 šך!ñš$›8›W›u›•›µ›Ì› ç›õ›œ&4œ)[œ…œ—œ ·œØœõœ'-&U%|'¢Êæ'ž+ž =ž^ž)už!Ÿž&Áž$èž% Ÿ3Ÿ#CŸ7gŸŸŸ#´ŸØŸîŸ ' B 'W 7 7· *ï ¡5¡ I¡ j¡ ‹¡.¬¡*Û¡¢"¢3¢D¢X¢n¢¢˜¢©¢º¢Ë¢Ü¢í¢þ¢£ £9£.R££œ£¶£У꣤¤8¤Q¤j¤…¤ ¤¸¤Ó¤î¤ ¥&¥;¥P¥f¥|¥˜¥¸¥Ó¥!î¥+¦ <¦]¦y¦•¦µ¦4ɦ(þ¦5'§2]§,§?½§,ý§6*¨a¨"}¨! ¨:¨;ý¨)9©1c©•©9´©:î©4)ª+^ª"Šª,­ª3Úª#«$2«4W«6Œ«CëL¬$T¬4y¬6®¬å¬9­;>­6z­3±­-å­H®A\®Dž®?ã®$#¯&H¯/o¯8Ÿ¯+د+°20°(c°(Œ°µ°!Ô°$ö°±7±S±e±u±'Œ±>´±ó±_²g²Yz²Ô²&è²³!³%5³+[³‡³&Ÿ³'Ƴ*î³%´$?´d´{´#—´»´Ö´õ´µ-µIµ^µ*wµ¢µ±µ2ɵ=üµ$:¶_¶r¶‰¶ ¶²¶ Ķζ#î¶!·4·P·l·‡·c¦· + ¸¸*2¸]¸w¸¸¬¸˸+Ḡ¹ ¹3¹I¹b¹~¹‘¹'±¹+Ù¹!º'º,:º"gº+Šº¶º2ǺúºÊ»!Ú¼ü¼1½M½l½Œ½ª½Ľݽ"ú½¾6¾E¾V¾e¾t¾…¾¾¬¾½¾ Ö¾ྠ+ ö¾ ¿ "¿.¿ + H¿S¿q¿‹¿(¥¿οÞ¿*õ¿ À%=ÀcÀ"{ÀžÀµÀ"ÑÀ"ôÀ&ÁE>Á3„Á'¸Á&àÁ*Â*2Â$]Â'‚ªÂ(ÉÂòÂÃ'-Ã4UÃ.ŠÃ¹ÃÙà îÃüÃ+ Ä09Ä+jÄ/–Ä+ÆÄ(òÄ8Å2TÅ&‡Å(®Å ×Å&øÅÆ#6Æ(ZÆ:ƒÆ.¾Æ,íÆ'Ç)BÇ*lǗDZÇÏÇ&ëÇ#È&6È,]È&ŠÈ'±È2ÙÈ É)'ÉQÉcÉ|ÉšÉ+·É%ãÉ Ê,Ê(FÊoÊ‹Ê-ªÊ8ØÊ7Ë7IË5Ë&·Ë/ÞË+Ì*:Ì"ëÌ/œÌÌÌ-äÌ)Í$<ÍaÍzÍ*šÍ1ÅÍ÷Í+Î*CÎ+nÎ0šÎ$ËÎ2ðÎ+#ÏOÏ'fÏ(ŽÏ-·Ï/åÏ.Ð!DÐ%fÐ/ŒÐ2¼Ð.ïÐ8Ñ*WтћѵÑÒÑîÑ! + Ò,ÒHÒ hÒ‰Ò+¥Ò&ÑÒøÒÓ!3Ó&UÓ.|Ó + «Ó.¶ÓåÓÔ Ô=Ô#]Ô%Ô§Ô$ÇÔ.ìÔ&Õ+BÕ)nÕ/˜Õ.ÈÕ÷ÕÖ Ö@ÖOÖ iÖwÖ ‘ÖŸÖ¹ÖÌÖ)ÜÖ×× )×(J×$s×%˜×'¾×6æ×Ø.Ø@Ø#QØu؉؟ؽØ$ÛØ@Ù AÙ1bÙ(”Ù!½Ù.ßÙ.Ú1=ÚoÚ/‹Ú»ÚÄÚ0äÚ&Û&<ÛcÛ<{Û;¸Û.ôÛ5#Ü5YÜ?ÜÏÜèÜ Ý"Ý,=Ý'jÝ,’Ý,¿Ý$ìÝ(Þ:Þ#UÞ'yÞ¡Þ¿ÞÝÞ,ûÞ0(ß4Yß)Žß%¸ß3Þß'à<:à.wà*¦àÑà(ðà+áEá$aá †á%á¶áÅá×áìáâ+â*Bâ mâŽâ¤â+»âçâã ã2ãIã._ãŽãŸã*³ãÞã çã(ñã3ä,Nä{äšä´ä »äÅä!Ìäîä! å/å&Nå0uå"¦å+Éå/õå%æ%=æcæ!læ2Žæ#Áæ(åæç*ç,Bç4oç%¤çÊç&äç# è'/è&Wè=~è*¼è,çè!é6é/Févé5‡é*½é.èéê+ê9Bê$|ê¡ê%µêÛê*ôê'ëGëcë-rë+ ëÌë%ìë*ì>=ì[|ì?Øì4íMíkíŠí"™í¼íÍíÜí ëíùí$ î1îAîSîeîwî‰î›î­î¿îÑîãîõîïï+ï=ïOïaï|ï(Žï)·ï áï#îïð/ðGðeð€ð›ð¶ð(Ôðýðñ'5ñ]ñ|ñ˜ñ®ñÌñãñòò<òVZò±òÄòàòüò+óFófó†ó%¡ó3Çó!ûóô:ô.Iôxô)‘ô*»ô*æô3õ0Eõ7võ + ®õ¹õ"Öõ*ùõ$ö,ö(Kö&tö0›ö"Ìöïö ÷'÷F÷)e÷÷'¯÷+×÷3ø7ø"@ø%cø%‰ø¯ø/Îø þø,ù 5ù Vù6dù ›ù!¼ù&Þùú!ú 7úDúYútú‡ú›ú µúÖú&õú-ûJû`ûqû.û¾û + Úûåû+øû/$ü2Tü(‡ü°üËüäü"ìüý'ý>ý^ý(}ý¦ý"Ãýæý(þ-þKþ*bþþ#¤þ ÈþÔþ(Ùþ+ÿ,.ÿ([ÿ)„ÿ)®ÿØÿöÿ +Gd%ƒ©&¾!å 80@i%ªÐØî-2.`=®%ì' :[b€#›'¿!ç #* N"o’3°+ä69G&4¨3Ý )J"jª*Â+í2L$e'вÑ(ñ4"Or!²$Ðõ + /D ,t !¡ $à .è ( + 2@ + *s + 0ž + $Ï + #ô +   \9 – ­ /´  ä î ' 10 .b 5‘ 5Ç 9ý 57 5m 5£ -Ù  &3N#j#Ž/²â-ý,+,X,…+²3Þ0Cb.‚/±&á'D"b…#¤)È ò1#P)tž$¾ã.ø-'*U$€$¥$Ê-ï$-B,p')Å0ï >#]&4¨ Ýþ9R ku‡.¼Ùñ7-e.™Èç%+E,e-’ÀÔé/G1]1¯$á,(3 \f…6ŽÅß$ú. No¥>¿þ(/X×q8I&‚9©Jã.JJ8•7ÎF JM ‰˜ m""˜"€)#ª$ ®%=O&F&EÔ&L'1g'O™'Jé'F4(•{(ˆ*Oš+4ê+=,2],C,0Ô,K-DQ-L–-:ã-<.5[.D‘.IÖ.— /Q¸/N + 0rY0Ì0 + Î2Ù32÷30*46[4M’4=à4L6=k6C©6Gí6M57Kƒ7†Ï7QV8B¨8Vë87B9Pz9GË9è:Lü;FI<4<+Å</ñ<'!>I>P>g> + |>‡>‹>,¤> Ñ>ò> + ??-?=?V?h?w?‰?§?¶? + Æ?<Ñ?$@$3@X@s@‹@D£@Jè@ 3A)@A5jA( A+ÉA0õA&BAB\B_BcB4gB"œB$¿BäB ýB + CC*C @C MCZC pC~C˜C¯C!¿CáCûCD*D19D.kD%šD#ÀD#äDE$E(E/E66EmEE–E¶EÖE!êE* F,7FdF„F+™FÅF×F!ïF%G7GAVGH˜GáG ðG5þG-4H/bH’H£H¶H+ÕH'I + )I14I9fI I³IÑIïI+ J7J+NJ+zJ)¦J$ÐJ2õJ*(KSK+kK+—K"ÃK)æK&L+7L+cL(L6¸LïL:M5BM>xM!·M#ÙM&ýM$N/=N(mN–N4°N;åN-!O%OO+uO6¡O4ØO, P:PLP-]P/‹P5»P ñPûP þP + QQ&QHCQ9ŒQ2ÆQùQR *R74R4lR7¡R ÙR0æRS5STS'fS'ŽS¶SÌSêS"T"'T-JTxT&T!¶TØTöTU!4UVUlU …U#‘UµU#ÑU'õUV#,VPVmV‡VžV!½V$ßV(W(-W%VW|W1šWÌW!ßWX*X"DXgX#…X$©XÎX%àX7Y>Y(RY{YY£Y#ÂYæY,úY8'Z5`Z.–ZÅZÝZ÷Z[7[,W[„[¢[¾[Î[Þ[ò[\\3\C\S\c\s\ƒ\“\£\³\Î\0í\]8]Q]j]ƒ]œ]µ]Î]æ]þ]^2^J^a^x^^­^Á^Õ^ê^ÿ^ _>_S_i_.…_´_Ò_!ð_`2`0H`,y`1¦`,Ø`'a<-a2ja6aÔa#òa0b>Gb;†b.Âb3ñb#%cDIc<Žc0Ëc4üc*1d-\d>Šd Éd êd6 e;BeG~eMÆe%f6:f5qf §f3ÈfBüf2?g?rg6²gLégF6hG}hCÅh! i!+i*Mi:xi.³i0âi?j0Sj,„j!±j!Ój"õjk4kPk akok%†k:¬kçkcøk\l]llÊl$ãlmm%.m$Tmym&–m'½m*åm%n%6n\npn"Šn­n#Çn!ën o!o~Z~ v~ƒ~$—~5¼~4ò~4'0\-H»/€'4€+\€ˆ€-¢€Ѐ%ê€5GF=Ž:Ì6‚+>‚1j‚"œ‚¿‚Ø‚$ó‚%ƒ&>ƒ#eƒ(‰ƒ&²ƒ4Ùƒ„(-„V„n„„„¤„+Ä%ï„…8+…)d…"Ž…$±….Ö…7†7=†9u†6¯†/æ†*‡(A‡+j‡'–‡¾‡*Ó‡þ‡*ˆ5Hˆ%~ˆ¤ˆ#Áˆ2åˆ1‰"J‰7m‰6¥‰:܉/Š GŠ2hŠ,›Š!ÈŠ'êŠ#‹16‹+h‹(”‹-½‹%ë‹-Œ9?Œ=yŒ?·Œ0÷Œ(B]x’¬ÌæŽ#Ž'=ŽeŽ„ŽžŽ¹Ž!ÖŽ"øŽ ,'!T#v"š%½(ã( $51Z+Œ$¸.Ý- ‘2:‘/m‘‘µ‘"Æ‘é‘ü‘’!(’J’#\’€’–’1±’ã’õ’$ “'2“&Z“)“-«“:Ù“”(”=”"Q”t”Š”!¤”Æ”&ã”; + •%F•3l•% •,Æ•8ó•9,–>f–¥–.½–ì–"õ–*—#C—&g—Ž—I§—Hñ—.:˜4i˜3ž˜7Ò˜ + ™!™":™]™*w™(¢™/Ë™6û™#2š1Všˆš(§š(Кùš ›9›0T›,…›A²›/ô›)$œ-Nœ'|œ5¤œ-Úœ,5&Q4x­(Ê ó&ý + $ž/žEž^žwž(‹ž'´ž"ÜžÿžŸ-.Ÿ\ŸrŸ…Ÿ•Ÿ¨Ÿ4¿ŸôŸ  #& J  S ] 3} .± !à ¡ ¡ '¡1¡$8¡]¡}¡#›¡,¿¡:ì¡ '¢$H¢6m¢ ¤¢²¢Ê¢(Ó¢;ü¢.8£-g£•£/ž£*Σ1ù£)+¤/U¤(…¤)®¤-ؤ,¥:3¥3n¥.¢¥%Ñ¥÷¥.¦6¦6F¦&}¦0¤¦Õ¦ê¦1§&4§[§%q§—§*¯§'Ú§¨ + ¨1&¨6X¨%¨)µ¨-ߨ8 ©ZF©E¡©2ç©&ªAª Xª dª …ª “ª¡ª ±ª¿ª$Óªøª««-«@«S«f«y«Œ«Ÿ«²«Å«Ø«ë«þ«¬$¬7¬W¬0i¬1š¬ ̬$جý¬­3­M­d­{­ ’­&³­Ú­÷­'®8®V®q®†®¥®(»®!ä®"¯!)¯dK¯°¯ ǯ è¯" °0,°']°'…°­°"ư1é°+± G±h±4w±#¬±6б$²*,²1W²3‰²;½² + ù²!³'&³/N³ ~³$ˆ³+­³*Ù³1´(6´_´y´!”´¶´*Ò´ý´$µ(=µ3fµšµ£µ"¾µ#áµ¶+$¶ P¶4Z¶¶®¶6¶ù¶"·,;·h·…· £·±·Ê·æ·ü·&¸"?¸ b¸2ƒ¸0¶¸ç¸¹¹20¹c¹ƒ¹’¹(©¹(Ò¹(û¹8$º ]º~ºžº&¦ºͺáºõº»&,»"S»$v»›»&·»Þ»þ»%¼9¼!P¼ r¼¼)ƒ¼-­¼+Û¼)½)1½#[½ ½ ½$·½ܽõ½ ¾%3¾Y¾,m¾+š¾ ƾÓ¾5ì¾:"¿(]¿†¿Ž¿¤¿¼¿Ò¿-é¿1ÀIÀBhÀ,«À1ØÀ' + Á2Á9ÁSÁ$oÁ'”Á¼Á ÜÁ'ýÁ$%Â)JÂtÂ?“Â/ÓÂHÃ8LÃ.…Ã7´Ã5ìÃ"Ä8ÄUÄtÄ$”ĹÄ1ÓÄ)Å)/ÅYÅ'wÅ*ŸÅ ÊÅëÅ.Æ83Æ&lÆ!“Æ$µÆÚÆ&úÆ!Ç<ÇWÇ6tÇ0«Ç%ÜÇ&È2)È/\È2ŒÈ(¿È+èÈ!É(6É _É_€ÉàÉ÷É$þÉ#Ê,Ê$CÊ9hÊ.¢Ê9ÑÊ9 ËBEË;ˆË:ÄË:ÿË2:Ì"mÌ ÌšÌ³Ì"ÓÌ"öÌ.ÍHÍ.cÍ.’Í-ÁÍ-ïÍ/Î9MÎ5‡Î ½Î%ÞÎ4Ï.9Ï!hÏŠÏ%¥ÏËÏ$éÏÐ$,Ð&QÐ'xÐ' Ð ÈÐ'éÐ-Ñ ?Ñ'`шÑ(žÑ8ÇÑ1Ò(2Ò([Ò(„Ò1­Ò!ßÒ.Ó&0ÓWÓ0pÓ2¡ÓÔÓïÓ#Ô*2Ô6]Ô”Ô²Ô"ÌÔïÔÕ &Õ0ÕCÕ#IÕmÕˆÕžÕ¹Õ.ÔÕÖÖ/0Ö"`ÖƒÖ)ÖÇÖ"àÖ6×7:×r׃י׶×Í×ã×(ý×5&Ø!\Ø5~Ø,´Ø.áØ4Ù EÙ&OÙvÙ-Ù­ÙÉÙ(æÙ,Ú'<ÚdÚƒÚ¡Úƒ”PþCddÙ¨·¹[Áip‰xGzñNj3BŠÎ`Ù£tšíœî-Þ];$oYìE–]üoë5“ÞD"L½Â  ˜[h½Ø¬&=L?=Ì_•1n2‚ÕM,Rlšì„ú[ÿ&ïh#“Š0ta Z¬¡TôÂþÿâ`ÃÊ‚u½>–`mnKŽó —¸b^? è‰Z_1±¦ã'UÝpSkÜû$Y¦Ú'äcdHˆk‘¹JgµÂ;×®Œ°4ñk‚§ø’ϲB³DÏ­öæ–¼P¬Æ«Ö¢FÔIžÐbÂ2 Z>1Øs&އ8^„¤Î@s”¥£tà+u¨SèHÓ\7,°7Ï ¿<™l)Îc* œõ!#öÓjzïvé'›N³xˆa :âB’„‹²²êZÈÓe5¸€4šëËûOÃ)D!C·Çœ + ÑéG + Þ•_™öR1“Ä}"ÆE©®©5–­-~'…§+˜òqÑ/šÄ„òÙc%üˆÒçn•¶øÀ±r vê§>›Û¿ÍÑî)¤”c + ‹‰´f…0ކÜ+i¬¶lÉ¡f÷‘\Ó_/=yÀ8Ãh]:á}ò«O¼4ÈõL@ˆ.eæ%ÔÛ±Pƒ¤Ÿ9ÖÜ/“|^HJW—û§ð(Å8ºG ÉQFj.Ooq×3lwïørOÛ!ì¯y{wss»Ø¥T´ºV’…,3V¦ç|:­ª*X*`±(e®WK” è‘Áq•M.&|½qm¤fŠB§Šét?T ì dr¾XYŒH;E<.—ùhÐÝ:€kD b3K?ÿ¥Èôýfwe + ËÇ;|·µ‚b¨Y57[­´~µäù€£($·÷« ÚIQü‰ÙUg›Sý#¼ƒÊ2ç3€%yžósúK'â<6@à‡ÃË)ÒöÞpEqW¬4YRL†Z<Òñ,APŸÖzM«çuFÿx?†ñ+<iÔ‘$AŠLˆÌg]9+‹Ú‡GÌ¡õ(5Oʇ¸>šIã\cH¿â@¥ªWæòŒ_¶ú[ VðÚ¾9•ø7 XªC¡^ŸÏ¹ pX†˜£ÉíáfÅaÀ\„÷«–þ#ó6DUA²¯í/¼{8ëbÎF CAoJÍX©{Øù6vÈÜ…°!S»‹lMí=m  œ:ÛiÄáwžÊJkgã›z!îà) }-"NzŽ ðÅ^»Ußr¢¿ô‘¶({ îÕxaCПJä-÷ùFƺ0,‚y“ž¢}%ÝßxàêB2RƒÉI€¢;¾T2—¯éóI~ѰN™Aýõú¡ãäSn”ÕRK‡æ×¤†uopÇ…PV™M*h¥Á©`›®Ÿ8þTŽmº‹Œ + ¹9rÒuy-¨˜>ªïÍ ý# Vµ$™ÖÕ|a˘Ì"v0wÁGªê¸¨Q£4­åôÇ}©eÝ* U³]Qj¯’~’{Ä0/ûÐ~nÅ åå‰ð"7ß\ŒvüÀœWQNß.»³%á×iÆåg¢1j96¦=EëÔd´è¦¾žmÍ &ƒ6—t@ + Options for %s: + + Execution times (seconds) + + For bug reporting instructions, please see: + + Go ahead? (y or n) + Options starting with -g, -f, -m, -O, -W, or --param are automatically + passed on to the various sub-processes invoked by %s. In order to pass + other options on to these processes the -W options must be used. + + Processing symbol table #%d, offset = 0x%.8lx, kind = %s + + Target specific options: + + There are undocumented %s specific options as well. + + There are undocumented target specific options as well. + %-23.23s [undocumented] + (Use '-v --help' to display command line options of sub-processes) + --help Display this information + --help Display this information + --target-help Display target specific command line options + -B Add to the compiler's search paths + -D Define a with string '1' as its value + -D= Define a with as its value + -A () Assert the to + -A- () Disable the to + -U Undefine + -v Display the version number + -E Preprocess only; do not compile, assemble or link + -G Put global and static data smaller than + bytes into a special section (on some targets) + -H Print the name of header files as they are used + -C Do not discard comments + -dM Display a list of macro definitions active at end + -dD Preserve macro definitions in output + -dN As -dD except that only the names are preserved + -dI Include #include directives in the output + -M Generate make dependencies + -MM As -M, but ignore system header files + -MF Write dependency output to the given file + -MG Treat missing header file as generated files + -MP Generate phony targets for all headers + -MQ Add a MAKE-quoted target + -MT Add an unquoted target + -O[number] Set optimisation level to [number] + -Os Optimise for space rather than speed + -S Compile only; do not assemble or link + -V Run gcc version number , if installed + -W Enable extra warnings + -Wa, Pass comma-separated on to the assembler + -Wl, Pass comma-separated on to the linker + -Wlarger-than- Warn if an object is larger than bytes + -Wno-comment{s} Do not warn about comments + -Wtraditional Warn about features not present in traditional C + -Wno-traditional Do not warn about traditional C + -Wundef Warn if an undefined macro is used by #if + -Wno-undef Do not warn about testing undefined macros + -Wimport Warn about the use of the #import directive + -Wno-import Do not warn about the use of #import + -Werror Treat all warnings as errors + -Wno-error Do not treat warnings as errors + -Wsystem-headers Do not suppress warnings from system headers + -Wno-system-headers Suppress warnings from system headers + -Wall Enable all preprocessor warnings + -Wp, Pass comma-separated on to the preprocessor + -Wunused Enable unused warnings + -Xlinker Pass on to the linker + -a Enable block profiling + -aux-info Emit declaration info into + -ax Enable jump profiling + -b Run gcc for target , if installed + -c Compile and assemble, but do not link + -d[letters] Enable dumps from specific passes of the compiler + -dumpmachine Display the compiler's target processor + -dumpspecs Display all of the built in spec strings + -dumpversion Display the version of the compiler + -fcall-saved- Mark as being preserved across functions + -fcall-used- Mark as being corrupted by function calls + -fdiagnostics-show-location=[once | every-line] Indicates how often source location information should be emitted, as prefix, at the beginning of diagnostics when line-wrapping + -ffixed- Mark as being unavailable to the compiler + -finline-limit= Limits the size of inlined functions to + -fmessage-length= Limits diagnostics messages lengths to characters per line. 0 suppresses line-wrapping + -idirafter Add to the end of the system include path + -I Add to the end of the main include path + -I- Fine-grained include path control; see info docs + -nostdinc Do not search system include directories + (dirs specified with -isystem will still be used) + -nostdinc++ Do not search system include directories for C++ + -o Put output into + -lang-c++ Assume that the input sources are in C++ + -lang-objc Assume that the input sources are in ObjectiveC + -lang-objc++ Assume that the input sources are in ObjectiveC++ + -lang-asm Assume that the input sources are in assembler + -m%-23.23s [undocumented] + -o Place the output into + -o Place output into + -p Enable function profiling + -pass-exit-codes Exit with highest error code from a phase + -pedantic Issue all warnings demanded by strict ISO C + -pedantic-errors Issue -pedantic warnings as errors instead + -trigraphs Support ISO C trigraphs + -lang-c Assume that the input sources are in C + -lang-c89 Assume that the input sources are in C89 + -pedantic Issue warnings needed by strict compliance to ISO C + -pedantic-errors Like -pedantic except that errors are produced + -pipe Use pipes rather than intermediate files + -print-file-name= Display the full path to library + -print-libgcc-file-name Display the name of the compiler's companion library + -print-multi-directory Display the root directory for versions of libgcc + -print-multi-lib Display the mapping between command line options and + multiple library search directories + -print-prog-name= Display the full path to compiler component + -print-search-dirs Display the directories in the compiler's search path + -quiet Do not display functions compiled or elapsed time + -save-temps Do not delete intermediate files + -specs= Override builtin specs with the contents of + -std= Assume that the input sources are for + -std= Specify the conformance standard; one of: + gnu89, gnu99, c89, c99, iso9899:1990, + iso9899:199409, iso9899:1999 + -+ Allow parsing of C++ style features + -w Inhibit warning messages + -Wtrigraphs Warn if trigraphs are encountered + -Wno-trigraphs Do not warn about trigraphs + -Wcomment{s} Warn if one comment starts inside another + -time Time the execution of each subprocess + -v Display the programs invoked by the compiler + -version Display the compiler's version + -w Suppress warnings + -x Specify the language of the following input files + Permissable languages include: c c++ assembler none + 'none' means revert to the default behaviour of + guessing the language based on the file's extension + They exist, but they are not documented. + `%s' enters catch block enters try block from here %s TOTAL :"%s" after #line is not a positive integer"%s" is not a valid filename"%s" is not defined"%s" redefined"/*" within comment# %s %.2f %.2f + #%s is a GCC extension#elif after #else#elif without #if#else after #else#else or #elif after #else#else without #if#endif without #if#error%.*s#import is obsolete, use an #ifndef wrapper in the header file#include "..." search starts here: + #include <...> search starts here: + #include nested too deeply#pragma once in main file#pragma once is obsolete#pragma pack (pop) encountered without matching #pragma pack (push, )#pragma pack(pop, %s) encountered without matching #pragma pack(push, %s, )#warning%.*s%6.2f%% of %d branches executed in function %s + %6.2f%% of %d branches taken at least once in function %s + %6.2f%% of %d calls executed in function %s + %6.2f%% of %d source lines executed in file %s + %6.2f%% of %d source lines executed in function %s + %d constructor(s) found + %d destructor(s) found + %s%s + %s %s as complex rather than integer due to prototype%s as signed due to prototype%s as unsigned due to prototype%s at end of input%s before "%s"%s before %s'%c'%s before %s'\x%x'%s before '%s' token%s before `%c'%s before `%s'%s before `%s' token%s before `\%o'%s before numeric constant%s before string constant%s has no %s%s has no member named `%s'%s in preprocessing directive%s is a block device%s is shorter than expected%s is too large%s makes pointer from integer without a cast%s no longer supported -- try -fno-vxt -ff90%s no longer supported -- try -fvxt%s returned %d exit status%s terminated with signal %d [%s]%s%s-%s is an empty range%s.%s. + %s%s: %s%s: %s compiler not installed on this system%s: %s exited with status %d + %s: %s: %s: %s: can't get status: %s + %s: In instantiation of `%s': + %s: Not a directory%s: can't delete file `%s': %s + %s: can't link file `%s' to `%s': %s + %s: can't open file `%s' for reading: %s + %s: cannot open as COFF file%s: compiling `%s' + %s: input file names must have .c suffixes: %s + %s: internal abort + %s: not a COFF file%s: partial loss of precision%s: subprocess got fatal signal %d + %s: total loss of precision%s: usage '%s [ -VqfnkN ] [ -i ] [ filename ... ]' + %s: usage '%s [ -VqfnkNlgC ] [ -B ] [ filename ... ]' + %s: wait: %s + %s: warning: %s: warning: can't rename file `%s' to `%s': %s + %s: warning: no read access for file `%s' + %s: warning: no write access for file `%s' + %s:%d: warning: %s=%s is too large.'$' character(s) in identifier'Ll' and 'lL' are not valid integer suffixes'lul' is not a valid integer suffix((anonymous))(Each undeclared identifier is reported only once(so you should pass `%s' not `%s' to `va_arg')(static %s for %s), + from %s:%d, + from %s:%u--driver no longer supported-E required when input is from standard input-I- specified twice-Wformat-extra-args ignored without -Wformat-Wformat-nonliteral ignored without -Wformat-Wformat-security ignored without -Wformat-Wformat-y2k ignored without -Wformat-Wmissing-format-attribute ignored without -Wformat-Wno-strict-prototypes is not supported in C++-f%s is no longer supported-fPIC is not valid with -mcoff-fPIC not valid with -mcoff-fdata-sections not supported on AIX-fname-mangling-version is no longer supported-fpic and -mapcs-reent are incompatible-fpic is not valid with -mcoff-fpic not valid with -mcoff-frepo must be used with -c-g is only supported when using GAS on this processor,-g option disabled.-include and -imacros cannot be used with -fpreprocessed-mapcs-26 and -mapcs-32 may not be used together-mbig-endian and -mlittle-endian may not be used together-mbsd and -mxopen incompatible-mbsd and -pedantic incompatible-mcall-aixdesc must be big endian-mhard-float not supported.-mmultiple is not supported on little endian systems-mpic-register= is useless without -fpic-ms2600 is used without -ms.-msingle-float and -msoft-float can not both be specified.-msoft-float and -mhard_float may not be used together-mstring is not supported on little endian systems-mxopen and -pedantic incompatible-p option not supported: use -pg instead-p profiling is no longer supported. Use -pg instead.-pedantic and -traditional are mutually exclusive-pg and -fomit-frame-pointer are incompatible-pipe is not supported.-pipe not supported-shared not valid with -mcoff-symbolic not valid with -mcoff-trigraphs and -traditional are mutually exclusive32381 fpu: + A -ifile option requires a -map optionA parameter list with an ellipsis can't match an empty parameter name list declaration.ANSI C forbids const or volatile function typesANSI C forbids parameter `%s' shadowing typedefAmbiguous abbreviation %sArgument missing after %sAssume GASAssume big endian bytes, little endian wordsAssume target CPU is configured as big endianAssume target CPU is configured as little endianAt top level:Attempt to keep stack aligned to this power of 2Bad value for -mcall-%sBad value for -msdata=%sBig memory modelBranches are this expensive (1-5, arbitrary units)C++ style comments are not allowed in ISO C89Can't find class$Can't open output file `%s'Cannot find class `%s'Cannot find file for class %s.Check for syntax errors, then stopCircular inheritance in interface declaration for `%s'Class `%s' already existsCode size: small, medium or largeCompilation of header file requestedCompile for the v850 processorCould not open data file %s. + Could not open output file %s. + Could not open source file %s. + Create GUI applicationCreate console applicationCreating %s. + DW_LOC_OP %s not implememnted + Directory name missing after %sDirectory name missing after -I optionDirectory name must immediately follow -IDo not assume GASDo not emit stack checking codeDo not generate .size directivesDo not generate H8/300H codeDo not generate H8/S codeDo not generate H8/S2600 codeDo not generate code which uses the FPUDo not generate sin, cos, sqrt for FPUDo not perform tail call optimizationDo not recognise any built in functionsDo not support MMX builtinsDo not use FUNCTION_EPILOGUEDo not use IEEE math for fp comparisonsDo not use VAX fpDo not use bitfield instructionsDo not use hardware fpDo not use registers for argument passingDo not use the divide instructionDo not work around storem hardware bugDon't trap on integer divide by zeroDon't trap on integer divide overflowDon't use EABI.Don't use alternate register names.Don't warn about too many arguments to format functionsEmit ELF object codeEmit Intel syntax assembler opcodesEmit ROSE object codeEmit half-PIC codeEmit stack checking codeEnable automatic template instantiationEnd of search list. + Environment variable DJGPP not defined.Environment variable DJGPP points to corrupt file '%s'.Environment variable DJGPP points to missing file '%s'.External symbols have a leading underscoreFile name missing after %sFile not found `%s'Filename missing after %s optionFilename missing after -i optionFilename missing after -o optionFunction starts are aligned to this power of 2GNU C does not support -C without using -EGNU CPP version %s (cpplib)Generate CA codeGenerate CF codeGenerate ELF outputGenerate H8/300H codeGenerate H8/S codeGenerate H8/S2600 codeGenerate JA codeGenerate JD codeGenerate JF codeGenerate KA codeGenerate KB codeGenerate MC codeGenerate SA codeGenerate SB codeGenerate big endian codeGenerate big endian dataGenerate code an embedded assembler can handleGenerate code for Boehm GCGenerate code for C30 CPUGenerate code for C31 CPUGenerate code for C32 CPUGenerate code for C33 CPUGenerate code for C40 CPUGenerate code for C44 CPUGenerate code for GNU asGenerate code for GNU ldGenerate code for Intel asGenerate code for Intel ldGenerate code for a DLLGenerate code for an 11/10Generate code for an 11/40Generate code for an 11/45Generate code for big endianGenerate code for c1Generate code for c2Generate code for c32Generate code for c34Generate code for given CPUGenerate code for little endianGenerate code for the C300Generate code for the C400Generate code for the M*Core M340Generate code the unix assembler can handleGenerate code which uses the FPUGenerate little endian codeGenerate little endian dataGenerate sin, cos, sqrt for FPUI/O error on outputISO C does not allow extra `;' outside of a functionISO C does not permit use of `varargs.h'ISO C does not support `++' and `--' on complex typesISO C does not support `~' for complex conjugationISO C does not support complex integer typesISO C does not support plain `complex' meaning `double complex'ISO C doesn't support unnamed structs/unionsISO C forbids %s between function pointer and `void *'ISO C forbids `goto *expr;'ISO C forbids an empty source fileISO C forbids casts to union typeISO C forbids comparison of `void *' with function pointerISO C forbids data definition with no type or storage classISO C forbids imaginary numeric constantsISO C forbids member declarations with no membersISO C forbids nested functionsISO C forbids omitting the middle term of a ?: expressionISO C forbids ordered comparisons of pointers to functionsISO C forbids range expressions in switch statementsISO C forbids taking the address of a labelISO C forbids zero-size array `%s'ISO C requires a named argument before `...'ISO C restricts enumerator values to range of `int'ISO C++ does not permit "%s" in #ifISO C++ does not support `long long'ISO C++ forbids applying `sizeof' to a function typeISO C++ forbids applying `sizeof' to a member functionISO C++ forbids applying `sizeof' to an expression of function typeISO C++ forbids applying `sizeof' to type `void' which is an incomplete typeISO C++ forbids assignment of arraysISO C++ forbids calling `::main' from within programISO C++ forbids comparison between pointer and integerISO C++ forbids computed gotosISO C++ forbids initialization of new expression with `='ISO C++ forbids omitting the middle term of a ?: expressionISO C++ forbids range expressions in switch statementsISO C++ forbids taking address of function `::main'ISO C++ forbids taking the address of a labelISO C++ forbids using a pointer to member function in pointer arithmeticISO C++ forbids using a pointer-to-function in pointer arithmeticISO C++ forbids using pointer of type `void *' in pointer arithmeticISO C++ forbids using pointer to a member in pointer arithmeticISO C89 does not support `long long'ISO C89 does not support complex typesISO C89 does not support flexible array membersISO C89 forbids array `%s' whose size can't be evaluatedISO C89 forbids long long integer constantsISO C89 forbids mixed declarations and codeISO C89 forbids specifying subobject to initializeISO C89 forbids variable-size array `%s'Ignore dllimport attribute for functionsIgnore dllimport for functionsIgnoring command line option '%s'Ignoring invalid multibyte characterIn file included from %s:%dIn file included from %s:%uIn function `%s':In method `%s':Incomplete `%s' optionInternal compiler error in %s, at %s:%dInternal compiler error: Error reporting routines re-entered. + Internal error #%d.Internal error in %s, at tradcpp.c:%d + Please submit a full bug report. + See %s for instructions.Internal error: %sInternal error: %s (program %s) + Please submit a full bug report. + See %s for instructions.Internal gcc abort.Internal gcc monitor: short-branch(%x)Invalid option %sInvalid option `%s'Invalid option `-mstack-increment=%s'Jump targets are aligned to this power of 2Library lib%s not foundLink with libads.a, libc.a and crt0.o.Link with libmvme.a, libc.a and crt0.o.Link with libsim.a, libc.a and sim-crt0.o.Link with libyk.a, libc.a and crt0.o.Loop code aligned to this power of 2MCU `%s' not supportedMacro name missing after %sMacro name missing after -%c optionMake integers 32 bits wideMark strings as 'const char *'Missing argument to `%s' optionNo branches in file %s + No branches in function %s + No calls in file %s + No calls in function %s + No executable source lines in function %s + No input filesNumber missing after %sNumber of registers used to pass integer argumentsOnly initialized variables can be placed into the 8-bit area.Only issue one instruction per cycleOptimize for 32032Optimize for 32332 cpuOptimize for 32532 cpuOptimize for 3900Optimize for 4650Options: + Output filename specified twicePRINT_OPERAND_ADDRESS, null pointerPass FP arguments in FP registersPass arguments in registersPass arguments on the stackPath name missing after %sPerform tail call optimizationPlease submit a full bug report, + with preprocessed source if appropriate. + See %s for instructions. + Pointers are 32-bitPointers are 64-bitPrefer branches over conditional executionProcess #ident directivesProduce big endian code.Produce little endian code.Profiling not implemented yet.Profiling uses mcountRecognise and/bitand/bitor/compl/not/or/xorSame as -mcpu=i386Same as -mcpu=i486Same as -mcpu=pentiumSame as -mcpu=pentiumproSchedule code for given CPUSchedule given CPUSelect CPU to generate code forSet errno after built-in math functionsSet the PPC_EMB bit in the ELF flags headerSmall data area: none, sdata, useSmall memory modelSpecify maximum template instantiation depthSpecify the name of the target CPUSpecify the name of the target architectureStack size > 32kStructure size boundary can only be set to 8 or 32Support MMX builtinsSwitches: + -include Include the contents of before other files + -imacros Accept definition of macros in + -iprefix Specify as a prefix for next two options + -iwithprefix Add to the end of the system include path + -iwithprefixbefore Add to the end of the main include path + -isystem Add to the start of the system include path + Symbols have a leading underscoreTarget missing after %s optionToo many filenames. Type %s --help for usage infoTrap on integer divide by zeroTrap on integer divide overflowUnexpected type for `id' (%s)Unknown -mdebug-%s switchUnrecognized option `%s'Usage: %s [options] file... + Usage: %s [switches] input output + Use 128 bit long doublesUse 16 bit intUse 32 bit floatUse 32 bit intUse 32-bit ABIUse 64 bit floatUse 64 bit long doublesUse 64-bit ABIUse 64-bit longsUse DEC assembler syntaxUse EABI.Use FUNCTION_EPILOGUEUse GNU asUse IEEE math for fp comparisonsUse MIPS asUse UNIX assembler syntaxUse VAX fpUse alternate register names.Use big-endian byte orderUse bitfield instructionsUse hardware floating point instructionsUse hardware fpUse large memory modelUse library calls to perform FP operationsUse little-endian byte orderUse little-endian byte order for dataUse normal memory modelUse registers for argument passingUse small memory modelUse software floating pointUse the 26-bit version of the APCSUse the 32-bit version of the APCSWarn about function pointer arithmeticWarn about functions which might be candidates for attribute noreturnWarn about multiple declarations of the same objectWarn about possible missing parenthesesWarn about signed/unsigned comparisonsWarn about subscripts whose type is 'char'Warn about suspicious declarations of mainWarn if nested comments are detectedWarn when a function arg is a structureWarn when a function is unusedWarn when a function parameter is unusedWarn when a label is unusedWarn when a variable is unusedWarn when an expression value is unusedWarning: -pipe ignored because -save-temps specifiedWarning: -pipe ignored because -time specifiedWork around storem hardware bugYYDEBUG not defined.[Leaving %s] + [cannot find %s][super ...] must appear in a method context__builtin_eh_return not supported on this target__builtin_longjmp second argument must be 1__builtin_saveregs not supported by this target__builtin_trap not supported by this target`%%%c' yields only last 2 digits of year`%%%c' yields only last 2 digits of year in some locales`%s %s' declared in `for' loop initial declaration`%s %s' declared inside parameter list`%s' attribute applies only to functions`%s' attribute directive ignored`%s' attribute does not apply to types`%s' attribute ignored`%s' cannot be statically allocated`%s' declared `static' but never defined`%s' declared as both exported to and imported from a DLL.`%s' declared as function returning a function`%s' declared as function returning an array`%s' declared inline after being called`%s' declared inline after its definition`%s' defined both normally and as an alias`%s' defined but not used`%s' does not respond to `%s'`%s' has an incomplete type`%s' has both `extern' and initializer`%s' ignored, conflicts with `-g%s'`%s' initialized and declared `extern'`%s' is an unrecognized format function type`%s' is normally a non-static function`%s' is not at beginning of declaration`%s' is promoted to `%s' when passed through `...'`%s' is usually a function`%s' locally external but globally static`%s' not declared`%s' not supported by %s`%s' previously declared here`%s' previously defined here`%s' redeclared as different kind of symbol`%s' takes only zero or two arguments`%s' undeclared`%s' undeclared (first use in this function)`%s' undeclared here (not in a function)`%s' used but never defined`%s' used prior to declaration`%s' was declared `extern' and later `static'`%s' was declared implicitly `extern' and later `static'`%s' was previously implicitly declared to return `int'`%s' was used with no declaration before its definition`%s' was used with no prototype before its definition`%s': unknown or unsupported -g option`-a' option (basic block profile) not supported`-ax' option (jump profiling) not supported`-p' not supported; use `-pg' and gprof(1)`...' in old-style identifier list`/*' within comment`__builtin_next_arg' called without an argument`bool' is now a keyword`default' label not within a switch statement`enum %s' incomplete in scope ending here`long long long' is too long for GCC`main' must return `int'`noreturn' function does return`noreturn' function returns non-void value`return' with a value, in function returning void`sizeof' applied to a bit-field`struct %s' incomplete in scope ending here`union %s' incomplete in scope ending here`va_start' used in function with fixed args`void' in parameter list must be the entire listabsolute file name in remap_filenameaddress of global register variable `%s' requestedaddress of register variable `%s' requestedalias arg not a stringalignment may not be specified for `%s'ambiguous conversion for array subscriptanonymous enum declared inside parameter listanonymous struct declared inside parameter listanonymous union declared inside parameter listargs to be formatted is not '...'argument `%s' doesn't match prototypeargument format specified for non-function `%s'argument of `__builtin_args_info' must be constantargument of `__builtin_args_info' out of rangeargument of `__builtin_eh_return_regno' must be constantargument of `asm' is not a constant stringargument to `%s' missingargument to `%s' missing + argument to `-%s' is missingargument to `-B' is missingargument to `-V' is missingargument to `-Xlinker' is missingargument to `-b' is missingargument to `-specs' is missingargument to `-specs=' is missingargument to `-x' is missingarithmetic on pointer to an incomplete typearray `%s' assumed to have one elementarray size missing in `%s'array subscript has type `char'array subscript is not an integerarray type has incomplete element typearray type value used where scalar is requiredassignmentassignment (not initialization) in declarationattempt to use poisoned "%s"bad magic number in file '%s'bad value (%s) for %s switchbad value (%s) for -mcpu switchbad value `%s' for -mmemory-latencybase operand of `->' is not a pointerbit-field `%s' has invalid typebit-field `%s' type invalid in ISO Cboth 'f' and 'l' suffixes on floating constantboth long and short specified for `%s'both signed and unsigned specified for `%s'break statement not within loop or switchbuilt-in function `%s' declared as non-functionbuilt-in function `%s' not currently supportedcall %d never executed + called from herecalled object is not a functioncan't close %scan't create directory %scan't find %scan't inline call to `%s'can't open %scan't open %s for writingcan't read from %scan't rewind %scan't set `%s' attribute after definitioncan't to open %scan't write to %scannot convert to a pointer typecannot declare `::main' to be a templatecannot declare `::main' to be staticcannot declare pointers to referencescannot declare references to referencescannot declare static function inside another functioncannot find `%s'cannot find `ldd'cannot find `nm'cannot find class (factory) method.cannot find method.cannot find source %scannot inline function `main'cannot specify both -C and -ocannot take address of bitfield `%s'cannot take the address of `this', which is an rvalue expressioncannot use typeid with -fno-rtticase label does not reduce to an integer constantcase label not within a switch statementcast does not match function typecast from pointer to integer of different sizecast to pointer from integer of different sizecast to union type from type not present in unioncharacter constant too longclass `%s' does not implement the `%s' protocolclose %dcomma at end of enumerator listcomparing floating point with == or != is unsafecomparison between pointer and integercomparison between signed and unsignedcomparison is always %dcomparison is always false due to limited range of data typecomparison is always true due to limited range of data typecomparison of complete and incomplete pointerscomparison of unsigned expression < 0 is always falsecomparison of unsigned expression >= 0 is always truecomparisons like X<=Y<=Z do not have their mathematical meaningcompilation terminated. + complex invalid for `%s'conflicting declarations of `%s'conflicting types for `%s'conflicting types for built-in function `%s'const `%s' cannot be declared `mutable'const declaration for `%s' follows non-constconstructor cannot be static member functioncontinue statement not within a loopcontrol reaches end of non-void functionconversion from NaN to intconversion from NaN to unsigned intconversion to non-scalar type requestedcould not open dump file `%s'creating array with size zerocurrent file is older than %sdata definition has no type or storage classdecimal constant is so large that it is unsigneddeclaration for parameter `%s' but no such parameterdeclaration of `%s' as array of functionsdeclaration of `%s' as array of voidsdeclaration of `%s' has `extern' and is initializeddeclaration of `%s' shadows a parameterdeclaration of `%s' shadows a symbol from the parameter listdeclaration of `%s' shadows global declarationdeclaration of `%s' shadows previous localdereferencing `void *' pointerdereferencing pointer to incomplete typedestructor cannot be static member functiondestructor needed for `%#D'destructors must be member functionsdup2 %d 1duplicate (or overlapping) case valueduplicate `%s'duplicate `const'duplicate `restrict'duplicate `volatile'duplicate case valueduplicate declaration of class method `%s'.duplicate definition of class method `%s'.duplicate label declaration `%s'duplicate member `%s'dynamic dependencies. + elements of array `%s' have incomplete typeempty body in an else-statementempty character constantempty declarationempty file name in #%sempty range specifiedenumerator value for `%s' not integer constanterror closing %serror writing to %sescape sequence out of range for characterexecv %sexecvp %sexpression statement has incomplete typeextern declaration of `%s' doesn't match global oneextra semicolon in struct or union specifiedextra text at end of directivefailed to find class '%s'fclosefclose %sfdopenfield `%s' declared as a functionfield `%s' has incomplete typefield initializer is not constantfile "%s" entered but not leftfirst argument of `%s' should be `int'first argument to `va_arg' not of type `va_list'fix_sched_param: unknown param: %sfloating point number exceeds range of '%s'floating point number exceeds range of 'double'floating point overflowfloating point overflow in expressionfopen %sfor each function it appears in.)format string arg follows the args to be formattedformat string arg not a string typeformat string has invalid operand numberfstat %sfunction `%s' cannot be declared `mutable'function `%s' is initialized like a variablefunction `%s' was previously declared within a blockfunction body for constructor missingfunction cannot be inlinefunction declaration isn't a prototypefunction definition declared `auto'function definition declared `register'function definition declared `typedef'function might be possible candidate for attribute `noreturn'function returns address of local variablefunction types not truly compatible in ISO Cfunction uses __builtin_eh_returngcc version %s + gcov [-b] [-v] [-n] [-l] [-f] [-o OBJDIR] file + generate RP codeglobal register variable `%s' used in nested functionglobal register variable has initial valueiC2.0 and iC3.0 are incompatible - using iC3.0ignoring #pragma %signoring #pragma %s %signoring asm-specifier for non-static local variable `%s'ignoring nonexistent directory "%s" + ignoring pragma: %simplicit declaration of function `%s'incompatible types in %sincomplete implementation of category `%s'incomplete implementation of class `%s'incomplete type unificationinitializationinitialized variable `%s' is marked dllimportinitializer fails to determine size of `%s'inlining failed in call to `%s'instance variable `%s' is declared %sinstance variable `%s' is declared privateinteger constant is larger than the maximum value for its typeinteger constant is too large for this configuration of the compiler - truncated to %d bitsinteger constant is unsigned in ISO C, signed with -traditionalinteger constant larger than the maximum value of %sinteger constant out of rangeinteger overflow in expressioninternal errorinternal error - invalid Utf8 nameinternal error: invalid #-lineinvalid #identinvalid #lineinvalid #pragma %sinvalid #pragma GCC poison directiveinvalid %%-codeinvalid %%B valueinvalid %%C valueinvalid %%E valueinvalid %%L valueinvalid %%M valueinvalid %%N valueinvalid %%O valueinvalid %%P valueinvalid %%Q valueinvalid %%R valueinvalid %%U valueinvalid %%V valueinvalid %%h valueinvalid %%m valueinvalid %%r valueinvalid %%s valueinvalid --param option: %sinvalid `asm': %sinvalid arg to `__builtin_frame_address'invalid arg to `__builtin_return_address'invalid codeinvalid flag "%s" in line directiveinvalid lvalue in assignmentinvalid macro name `%s'invalid operand to %H/%L codeinvalid operand to %R codeinvalid operand to %U codeinvalid operand to %V codeinvalid operands to binary %sinvalid operation on uninstantiated typeinvalid parameter value `%s'invalid receiver type `%s'invalid storage class for function `%s'invalid truth-value expressioninvalid type `void' for newinvalid type argumentinvalid type argument of `%s'invalid type: `void &'invalid use of %%d, %%x, or %%Xinvalid use of `restrict'invalid use of void expressioninvalid version number formatits scope is only this definition or declaration, which is probably not what you want.jump to case labeljunk at end of #pragma weakjunk at end of '#pragma %s'junk at end of '#pragma pack'label %s referenced outside of any functionlabel `%s' defined but not usedlabel `%s' used but not definedlanguage %s not recognizedlanguage string `"%s"' not recognizedlarge integer implicitly truncated to unsigned typeleft shift count >= width of typeleft shift count is negativelibraries: %s + library function `%s' declared as non-functionline number out of rangeload command map, %d cmds, new size %ld. + long and short specified together for `%s'long or short specified with char for `%s'long or short specified with floating type for `%s'long, short, signed or unsigned invalid for `%s'long, short, signed or unsigned used invalidly for `%s'lseek %s 0may not use both -EB and -ELmay not use both -mfp64 and -m4650may not use both -mfp64 and -msingle-floatmembersmethod '%s' not found in classmethod `%s' not implemented by protocol.method definition for `%c%s' not foundmethods cannot be converted to function pointersmissing $ operand number in formatmissing '(' after predicatemissing ')' after "defined"missing ')' to complete answermissing ';' before right bracemissing argument in `__builtin_args_info'missing terminating > charactermissing white space after number '%.*s'mno-cygwin and mno-win32 are not compatiblemore than one 'i' or 'j' suffix on integer constantmsync %smulti-character character constantmultiple declarations for method `%s'multiple default labels in one switchmultiple parameters named `%s'multiple storage classes in declaration of `%s'munmap %smust #include before using typeidname missing for member functionnamed membersnegative integer implicitly converted to unsigned typenegative width in bit-field `%s'nested extern declaration of `%s'nested function `%s' declared `extern'nested redefinition of `%s'no args to macro `%s'no argumentsno cmd_strings foundno data type for mode `%s'no description yetno label named `%s'no newline at end of fileno previous declaration for `%s'no previous prototype for `%s'no semicolon at end of struct or unionno super class declared in interface for `%s'no symbol table foundnon-lvalue in %snon-prototype definition herenon-static declaration for `%s' follows staticnot enough type informationnot found + null format stringnumber of arguments doesn't match prototypeobsolete use of designated initializer with `:'obsolete use of designated initializer without `='offset outside bounds of constant stringonly %d args to macro `%s'only 1 arg to macro `%s'open %soperation on `%s' may be undefinedoptimization turned offoptimization turned onoverflow in constant expressionoverflow in enumeration valuesoverflow in implicit constant conversionparameter `%s' declared voidparameter `%s' has incomplete typeparameter `%s' is initializedparameter `%s' points to incomplete typeparameter has incomplete typeparameter name missingparameter name missing from parameter listparameter name omittedparameter points to incomplete typeparse errorpipeplace each function into its own sectionpointer of type `void *' used in arithmeticpointer of type `void *' used in subtractionpointer to a function used in arithmeticpointer to a function used in subtractionpointers are not permitted as case valuespoisoning existing macro "%s"possibly missing ')'predicate must be an identifierpredicate's answer is emptyprevious declaration of `%s'previous external decl of `%s'previous implicit declaration of `%s'previously used hereprior parameter's size depends on `%s'profiling not supported with -mg + programs: %s + prototype for `%s' followsprototype for `%s' follows and argument %d doesn't matchprototype for `%s' follows and number of arguments doesn't matchread %ld bytes, expected %ld, from %sread %sredeclaration of `%s'redefinition of `%s %s'redefinition of `%s'redirecting stdout: %sredundant redeclaration of `%s' in same scoperegister variable `%s' used in nested functionreimplementation of class `%s'request for member `%s' in something not a structure or unionrequested alignment is not a constantrequested alignment is not a power of 2requested alignment is too largereturnreturn type defaults to `int'return type defaults to idreturn type for `%s' defaults to idreturn type for `main' changed to `int'return type is an incomplete typereturn type of `%s' is not `int'returning a value from a destructorreturning reference to temporaryright shift count >= width of typeright shift count is negativesecond arg to `__builtin_expect' must be a constantsecond argument of `%s' should be `char **'second parameter of `va_start' not last named argumentsection attribute cannot be specified for local variablessection attribute not allowed for `%s'section attributes are not supported for this targetsection of `%s' conflicts with previous declarationsection pointer missingshadowing built-in function `%s'shadowing library function `%s'shared and mdll are not compatibleshift count >= width of typeshift count is negativeshort, signed or unsigned invalid for `%s'signed and unsigned given together for `%s'signed and unsigned type in conditional expressionsize of `%s' is %d bytessize of `%s' is larger than %d bytessize of array `%s' has non-integer typesize of array `%s' is negativesize of array `%s' is too largesize of return value of `%s' is %u bytessize of return value of `%s' is larger than %d bytessize of variable `%s' is too largesizeof applied to a bit-fieldsizeof applied to a function typesizeof applied to a void typesizeof applied to an incomplete typesizeof(long double) is 12.sizeof(long double) is 16.sorry, not implemented: sorry, not implemented: #pragma align NAME=SIZEsorry, not implemented: #pragma noalign NAMEspec file has no spec for linkingstatic access to object of type `id'static declaration for `%s' follows non-staticstatic variable `%s' is marked dllimportstorage class `register' invalid for function `%s'storage class specified for parameter `%s'storage class specified for structure field `%s'storage class specified for typenamestorage size of `%s' isn't constantstorage size of `%s' isn't knownstring length `%d' is greater than the length `%d' ISO C%d compilers are required to supportstring section missingstructstruct type value used where scalar is requiredstructuresubscript has type `char'suggest parentheses around && within ||suggest parentheses around + or - in operand of &suggest parentheses around + or - inside shiftsuggest parentheses around arithmetic in operand of ^suggest parentheses around arithmetic in operand of |suggest parentheses around assignment used as truth valuesuggest parentheses around comparison in operand of &suggest parentheses around comparison in operand of ^suggest parentheses around comparison in operand of |switch -mcpu=%s conflicts with -march= switchswitch quantity not an integersyntax errorsyntax error at '%s' tokentaking address of temporarytarget CPU does not support APCS-26target CPU does not support APCS-32target CPU does not support THUMB instructions.the conditional began herethe meaning of '\%c' varies with -traditionalthe meaning of '\a' varies with -traditionalthe meaning of `\a' varies with -traditionalthe meaning of `\x' varies with -traditionalthe only valid combination is `long double'third argument of `%s' should probably be `char **'this function may return with or without a valuethis is a previous declarationthis is the first default labelthis is the first entry overlapping that valuethis is the location of the previous definitionthree 'l' suffixes on integer constanttime in %s: %ld.%06ld (%ld%%) + too few arguments for formattoo few arguments to functiontoo few arguments to function `%s'too few arguments to proceduretoo few arguments to procedure `%s'too many 'l' suffixes in integer constanttoo many (%d) args to macro `%s'too many arguments for formattoo many arguments to functiontoo many arguments to function `%s'too many arguments to function `va_start'too many arguments to proceduretoo many arguments to procedure `%s'too many input filestop-level declaration of `%s' specifies `auto'traditional C ignores #%s with the # indentedtraditional C rejects string concatenationtraditional C rejects the 'f' suffixtraditional C rejects the 'l' suffixtraditional C rejects the 'u' suffixtraditional C rejects the unary plus operatortwo 'u' suffixes on integer constanttwo or more data types in declaration of `%s'two types specified in one empty declarationtype mismatch in conditional expressiontype mismatch with previous external decltype mismatch with previous implicit declarationtype name expected before `*'type of `%s' defaults to `int'type of external `%s' is not globaltype of parameter `%s' is not declaredtype qualifiers for `%s' conflict with previous decltype with more precision than %stypedef `%s' is initializedtypes are not quite compatibleunable to mmap file '%s'unable to open file '%s'unary `&'unbalanced #endifunionunion type value used where scalar is requiredunknown #pragma namespace %sunknown C standard `%s'unknown escape sequence '\%c'unknown escape sequence `\%c'unknown escape sequence: `\' followed by char code 0x%xunknown machine mode `%s'unknown register name: %sunnamed struct/union that defines no instancesunrecognised section name "%s"unrecognized format specifierunrecognized gcc debugging option: %cunrecognized option `-%s'unrecognized register name `%s'unsupported arg to `__builtin_frame_address'unsupported arg to `__builtin_return_address'unsupported versionunterminated commentunterminated format stringunused parameter `%s'unused variable `%s'use of `%s' in templateuse of old-style castuseless keyword or type name in empty declarationvariable `%s' declared `inline'variable `%s' has initializer but incomplete typevariable or field `%s' declared voidvariable-sized object may not be initializedvoid value not ignored as it ought to bewarning: width of `%s' exceeds its typewrite %swrong number of arguments specified for `%s' attributewrong type argument to %swrong type argument to abswrote %ld bytes, expected %ld, to %syou must additionally specify either -M or -MMzero or negative size array `%s'zero width for bit-field `%s'zero width in %s formatzero-length format stringProject-Id-Version: gcc 2.97 20001112 (experimental) + POT-Creation-Date: 2001-06-13 09:06+0200 + PO-Revision-Date: 2001-06-13 09:18+02:00 + Last-Translator: Dennis Björklund + Language-Team: Swedish + MIME-Version: 1.0 + Content-Type: text/plain; charset=iso-8859-1 + Content-Transfer-Encoding: 8-bit + + Flaggor för %s: + + Exekveringstider (sekunder) + + Instruktioner för bugrapportering, se: + + Fortsätta? (y eller n) + Flaggor som börjar med -g, -f, -m, -O, -W eller --param skickas automatiskt + vidare till de barnprocesser som startas av %s. För att skicka med andra + flaggor till dessa processer måste flaggan -W användas. + + Processar symboltabell #%d, index = 0x%.8lx, sort = %s + + Speciella flaggor för målarkitektur: + + Det finns dessutom odokumenterade %s-specifika flaggor. + + Det finns dessutom odokumenterade flaggor speciellt för målarkitekturen. + %-23.23s [odokumenterad] + (Använd '-v --help' för att visa kommandoradsflaggor för barnprocesser) + --help Visa den här informatationen + --help Visa den här informatationen + --target-help Visa specifika kommandoradsflaggor för mål + -B Lägg till till kompilatorns sökvägar + -D Definiera med strängen "1" som sitt värde + -D= Definiera with som sitt värde + -A () Ange svaret på frågan + -A- () Slå av svaret på frågan + -U Gör till icke definierat + -v Visa versionsnummer + -E Preprocessa bara; kompilera, assemblera och + länka inte + -G Placera global and statisk data mindre än + bytes i en speciell sektion (vissa arkitekturer) + -H Skriv namnet på include-filer när de används + -C Släng inte bort kommentarer + -dM Visa en lista med aktiva makron i slutet + -dD Bevara mokrodefinitioner i utdata + -dN Som -dD men bara namnet bevaras + -dI Ta med #include-direktives i utdata + -M Generera make beroenden + -MM Som -M, men ignorera system-include-filer + -MF Skriv beroenden till den givna filen + -MG Behandla saknade filer som genererade filer + -MP Generera phony-mål för alla include-filer + -MQ Lägg till MAKE-citerat mål + -MT Lägg till ociterat mål + -O[nummer] Sätt optimeringsnivå till [nummer] + -Os Optimera för storlek istället för hastighet + -S Kompilera bara; assemblera och länka inte + -V Kör gcc version , om den är installerad + -W Slå på extra varningar + -Wa, Skicka kommaseparerade till assembleraren + -Wl, Skicka kommaseparerade till länkaren + -Wlarger-than- Varna om objekt är större än bytes + -Wno-comment{s} Varna inte om kommentarer + -Wtraditional Varna om finesser som inte finns i traditionell C + -Wno-traditional Varna inte om traditionell C + -Wundef Varna om ett odefinierat makro används av #if + -Wno-undef Varna inte om att testa odefinierade makron + -Wimport Varna om användande av direktivet #import + -Wno-import Varna inte om användande av #import + -Werror Behandla alla varningar som fel + -Wno-error Behandla inte varningar som fel + -Wsystem-headers Dölj inte varningar från system-include-filer + -Wno-system-headers Dölj varningar från system-include-filer + -Wall Aktivera alla preprocessor-varningar + -Wp, Skicka kommaseparerade till preprocessorn + -Wunused Slå på oanvända varningar + -Xlinker Skicka vidare till länkaren + -a Slå på blockprofilering + -aux-info Generera deklarationsinfo till fil + -ax Slå på hopprofilering + -b Kör gcc för mål , om det är installerat + -c Kompilera och assemblera, men länka inte + -d[bokstäver] Slå på dumpning från angivna delar av kompilatorn + -dumpmachine Visa kompilatorns målprocessor + -dumpspecs Visa de inbyggda spec-strängarna + -dumpversion Visa kompilatorns version + -fcall-saved- Ange att bevaras av funktioner + -fcall-used- Ange att förstörs av funktionsanrop + -fdiagnostics-show-location=[once | every-line] Anger hur ofta källkodspositioner skall skrivas ut, som prefix, i början av utskrift vid radbrytning + -ffixed- Markera som ej tillgängligt för kompilatorn + -finline-limit= Begränsa storlek på inline-funktioner till + -fmessage-length= Begränsa felmeddelandens längd till tecken per rad. 0 stänger av radbrytning + -idirafter Sätt i slutet på systemets include-sökväg + -I Sätt i slutet på huvud-include-sökvägen + -I- Detaljerad include-sökväg kontroll; se info-hjälp + -nostdinc Använd inte systemets include-sökväg (kataloger + satta med -isystem kommer fortfarande användas) + -nostdinc++ Använd inte systemets include-sökväg för C++ + -o Skriv utdata till + -lang-c++ Antag att indatakällkoden är C++ + -lang-objc Antag att indatakällkoden är ObjectiveC + -lang-objc++ Antag att indatakällkoden är ObjectiveC++ + -lang-asm Antag att indatakällkoden är assembler + -m%-23.23s [odokumenterad] + -o Placera utdata i + -o Skriv utdata i + -p Slå på funktionsprofilering + -pass-exit-codes Avsluta med högsta felkoden från någon av faserna + -pedantic Utfärda alla varningar som strikt ISO C kräver + -pedantic-errors Utfärda -pedantic varningar som fel istället + -trigraphs Stöd ISO C trigraphs + -lang-c Antag att indatakällkoden är C + -lang-c89 Antag att indatakällkoden är C89 + -pedantic Ge varningar som krävs för att strikt följa ISO C + -pedantic-errors Som -pedantic men ger fel istället + -pipe Använd rör istället för temporära filer + -print-file-name= Visa hela sökvägen till länkbibliotek + -print-libgcc-file-name Visa namnet på kompilatorns medföljande bibliotek + -print-multi-directory Visa rotkatalogen för olika versioner av libgcc + -print-multi-lib Visa mappningen mellan kommandoradsflaggor och + multipla biblioteks sökkataloger + -print-prog-name= Visa fulla sökvägen till kompilatorkomponenten + -print-search-dirs Visa katalogerna i kompilatorns sökväg + -quiet Visa inte kompilerade funktioner eller tiden som förbrukats + -save-temps Radera inte temporära filer + -specs= Använd innehållet i istället för inbyggda spec + -std= Antag att källkodsfilerna är för + -std= Ange standard att följa; en av: + gnu89, gnu99, c89, c99, iso9899:1990, + iso9899:199409, iso9899:1999 + -+ Tillåt användning av C++ finesser + -w Stoppa varningsmeddelande + -Wtrigraphs Varna om trigrapher påträffas + -Wno-trigraphs Varna inte om trigrapher + -Wcomment{s} Varna om en kommentar börjar i en annan kommentar + -time Mät tiden det tar att exekvera varje barnprocess + -v Visa vilka program som körs av kompilatorn + -version Visa kompilatorns version + -w Stoppa varningar + -x Specificera språk för de följande källkodsfilerna + Tillåtna språk är bland annat: c c++ assembler none + 'none' innebär att man använder standardmetoden, + att man gissar språk beroende på filändelse + De finns, men är inte dokumenterade. + `%s' går in i catch-block går in i try-block från här %s TOTALT :"%s" efter #line är inte ett positivt heltal"%s" är inte ett giltigt filnamn"%s" är inte definierad"%s" omdefinierad"/*" i kommentar# %s %.2f %.2f + #%s är en GCC-utvidgning#elif efter #else#elif utan #if#else efter #else#else eller #elif efter #else#else utan #if#endif utan #if#error%.*s#import är obsolet, använd #ifndef-omslutning i includefilen#include "..." sökning startar här: + #include <...> sökning startar här: + #include nästlad för djupt#pragma once i huvudfil#pragma once är obsolet#pragma pack (pop) påträffat utan matchande #pragma pack (push, )#pragma pack(pop, %s) påträffat utan matchande #pragma pack(push, %s, )#warning%.*s%6.2f%% av %d hopp utförda i funktion %s + %6.2f%% av %d hopp tagna minst en gång i funktion %s + %6.2f%% av %d anrop tagna i funktion %s + %6.2f%% av %d källkodsrader körda i fil %s + %6.2f%% av %d källkodsrader körda i funktion %s + %d konstruerare hittad(e) + %d destruerare hittad(e) + %s%s + %s %s som complex istället för heltal grund av prototyp%s som signed på grund av prototyp%s som unsigned på grund av prototyp%s vid slutet av indatan%s före "%s"%s före %s'%c'%s före %s'\x%x'%s före symbolen '%s'%s före "%c"%s före "%s"%s före symbolen "%s"%s före "\%o"%s före numerisk konstant%s före strängkonstant%s har ingen %s%s har ingen medlem med namn "%s"%s i preprocessordirektiv%s är en blockenhet%s är kortare än förväntat%s är för stor%s skapar pekare från heltal utan typkonvertering%s stödjs inte längre -- försök -fno-vxt -ff90%s stödjs inte längre -- försök -fvxt%s returnerade avslutningsstatus %d%s terminerade med signal %d [%s]%s%s-%s är ett tomt intervall%s.%s. + %s%s: %s%s: kompilatorn %s är inte installerad på detta system%s: %s avslutade med status %d + %s: %s: %s: %s: kan inte få status: %s + %s: Vid instansiering av "%s": + %s: Inte en katalog%s: kan inte radera fil "%s": %s + %s: kan inte länka fil "%s" till "%s": %s + %s: kan inte öppna fil `%s' för läsning: %s + %s: kan inte öppna som COFF-fil%s: kompilerar `%s' + %s: indatafilnamn måste ha ändelsen .c: %s + %s: intern abort + %s: är inte en COFF-fil%s: partiell förlust av precision%s: subprocess fick dödlig signal %d + %s: total förlust av precision%s: användning '%s [ -VqfnkN ] [ -i ] [ filnamn ... ]' + %s: användning '%s [ -VqfnkNlgC ] [ -B ] [ filnamn ... ]' + %s: vänta: %s + %s: varning: %s: varning: kan inte döpa om fil "%s" till "%s": %s + %s: varning: ingen läsrättighet för fil "%s" + %s: varning: ingen skrivrättighet för fil "%s" + %s:%d: varning: %s=%s är för stor.tecknet '$' i en identifierare"Ll" och "lL" är inte giltiga heltalssuffix"lul" är inte ett giltigt heltalssuffix((anonym))(Varje odeklarerad identifierare rapporteras bara(alltså skall du skicka "%s" och inte "%s" till "va_arg")(static %s för %s), + från %s:%d, + från %s:%u--driver stödjs inte längre-E krävs när indata tas från standard input-I- angiven två gånger-Wformat-extra-args ignorerad utan -Wformat-Wformat-nonliteral ignorerad utan -Wformat-Wformat-security ignorerad utan -Wformat-Wformat-y2k ignorerad utan -Wformat-Wmissing-format-attribute ignorerad utan -Wformat-Wno-strict-prototypes stödjs inte för C++-f%s stödjs inte längre-fPIC är inte giltig tillsammans med -mcoff-fPIC är inte giltig tillsammans med -mcoff-fdata-sections stöds inte för AIX-fname-mangling-version stöds inte längre-fpic och -mapcs-reent är inkompatibla-fpic är inte giltig tillsammans med -mcoff-fpic är inte giltig tillsammans med -mcoff-frepo måste användas tillsammans med -c-g stöds bara när man använder GAS på denna processor,flaggan -g är avslagen.-include och -imacros kan inte användas med -fpreprocessed-mapcs-26 och -mapcs-32 får inte användas tillsammans-mbig-endian och -mlittle-endian får inte användas tillsammans-mbsd och -mxopen är inkompatibla-mbsd och -pedantic är inkompatibla-mcall-aixdesc måste vara "big endian"-mhard-float stöds inte.-mmultiple stöds inte på "little endian"-system-mpic-register= är oanvändbar utan -fpic-ms2600 används utan -ms.-msingle-float och -msoft-float kan inte båda anges.-msoft-float och -mhard_float får inte användas tillsammans-mstring stöds inte på "little endian"-system-mxopen och -pedantic är inkompatibleflaggan -p stödjs inte: använd -pg istället-p profilering stöds inte längre. Använd -pg istället.-pedantic och -traditional är ömsesidigt uteslutande-pg och -fomit-frame-pointer är inkompatibla-pipe stöds inte.-pipe stöds inte-shared är inte giltig tillsammans med -mcoff-symbolic är inte giltig tillsammans med -mcoff-trigraphs och -traditional är ömsesidigt uteslutandefpu 32381: + Flaggan -ifil kräver även flaggan -mapEn parameterlista med ellips kan inte matcha en tom namnlistdeklaration.ANSI C förbjuder funktionertyper med const eller volatileANSI C förbjuder att parameter "%s" döljer typedefTvetydig förkortning %sArgument saknas efter %sAntag GASAntag att bytes är "big endian", ord är "little endian"Antag att mål-CPU:n är konfigurerad som "big endian"Antag att mål-CPU:n är konfigurerad som "little endian"På toppnivå:Försök håll stacken justerad till denna 2-potensFelaktigt värde för -mcall-%sFelaktigt värde för -msdata-%sStor minnesmodellHopp är dyra (1-5, godtyckliga enheter)C++ kommentarer tillåts inte av ISO C89Kan inte hitta class$Kan inte öppna utdatafil "%s"Kan inte hitta klass "%s"Kan inte hitta filen med klass %s.Leta efter syntaxfel, stoppa sedanCirkulärt arv i interfacedeklaration för "%s"Klass "%s" finns redanKodstorlek: small, medium, eller largeKompilering av include-fil begärdKompilera för processorn v850Kunde inte öppna datafil %s. + Kunde inte öppna utdatafil %s. + Kunde inte öppna källkodsfil %s. + Skapa GUI-applikationSkapa konsollapplikationSkapar %s. + DW_LOC_OP %s är inte implementerad + Katalognamn saknas efter %sKatalognamn saknas efter flaggan -IKatalognamn måste komma direkt efter -IAntag inte GASGenerera inte kod för stackkontrollGenerera inte .size-direktivGenerera inte H8/300H-kodGenerera inte H8/S-kodGenerera inte kod för H8/S2600Genrera inte kod som använder FPUGenerera inte sin, cos, sqrt för FPUUtför inte optimering för svansrekursionKänn inte igen några inbyggda funktionerStöd inte inbyggda funktioner med MMXAnvänd inte FUNCTION_EPILOGUEAnvänd inte IEEE matematik för flyttaljämförelserAnvänd inte VAX fpAnvänd inte bitfältsinstruktionerAnvänd inte hårdvaru-fpAnvänd inte register för argumentskickningAnvänd inte divisionsinstruktionenFixa inte storem hårdvarubuggFånga inte heltalsdivision med nollFånga inte spill vid heltalsdivisionAnvänd inte EABI.Använd inte alternativa registernamn.Varna inte om för många argument till format-funktionerSkapa ELF-objektkodSkapa assembler-opkoder med Intel-syntaxSkapa ROSE-objektkodSkapa half-PIC-kodGenerera kod för stackkontrollSlå på automatisk mallinstansieringSlut på söklistan. + Omgivningsvariabel DJGPP är inte definierad.Omgivningsvariabel DJGPP pekar på fil "%s" som är trasigOmgivningsvariabel DJGPP pekar på fil "%s" som saknasExterna symboler startar med en understrykningFilnamn saknas efter %sKan inte hitta filen "%s"Filnamn saknas efter flaggan %sFilnamn saknas efter flaggan -iFilnamn saknas efter flaggan -oFunktionsbörjan justeras till denna 2-potensGNU C stödjer inte -C utan -EGNU CPP version %s (cpplib)Generera CA-kodGenerera CF-kodGenerera ELF-utdataGenerera H8/300H-kodGenerera H8/S-kodGenerera kod för H8/S2600Generera JA-kodGenerera JD-kodGenerera JF-kodGenerera KA-kodGenerera KB-kodGenerera MC-kodGenerera SA-kodGenerera SB-kodGenerera "big endian"-kod.Generera data som "big endian"Generera kod en inbäddad assemblator kan hanteraGenerera kod för Boehm GCGenerera kod för CPU C30Generera kod för CPU C31Generera kod för CPU C32Generera kod för CPU C33Generera kod för CPU C40Generera kod för CPU C44Generera kod för GNU asGenerera kod för GNU ldGenerera kod för Intel asGenerera kod för Intel ldGenerera kod för en DLLGenerera kod för 11/10Generera kod för 11/40Generera kod för 11/45Generera kod för "big endian"Generera kod för c1Generera kod för c2Generera kod för c32Generera kod för c34Generera kod för en given CPUGenerera kod för "little endian"Genrera kod för C300Generera kod för C400Genrera kod för M*Core M340Genrerar kod som unix assemblatorn kan hanteraGenerera kod som använder FPUGenerera "little endian"-kod.Generera data som "little endian"Generera sin, cos, sqrt för FPUI/O-fel vid utmatningISO C tillåter inte extra ";" utanför funktionerISO C stödjer inte användning av "varargs.h"ISO C stöder inte "++" och "--" på komplexa typerISO C stödjer inte ~ för komplex konjugeringISO C stöder inte komplexa heltalstyperISO C stöder inte bara "complex" i meningen "double complex"ISO C stödjer inte ej namnsatta strukturer/unionerISO C förbjuder %s mellan funktionspekare och "void *"ISO C förbjuder "goto *expr;"ISO C förbjuder tomma källkodsfilerISO C förbjuder typkonvertering till unionstyperISO C förbjuder jämförelse mellan "void *" och funktionspekareISO C förbjuder datadefinition utan typ eller lagringsklassISO C förbjuder imaginära numeriska konstanterISO C förbjuder medlemsdeklarationer utan medlemmarISO C förbjuder nästlade funktionerISO C förbjuder uteslutande av den mittersta termen i ett ?: uttryckISO C förbjuder ordningsjämförelse på pekare till funktionerISO C förbjuder intervalluttryck i switch-satserISO C förbjuder att man tar adressen till en etikettISO C förbjuder fält "%s" med storlek nollISO C kräver ett namnsatt argument före "..."ISO C begränsar enumreringsvärden till intervallet av en "int"ISO C++ tillåter inte "%s" i #ifISO C++ stödjer inte "long long"ISO C++ förbjuder användning av "sizeof" på funktionerISO C++ förbjuder användning av "sizeof" på medlemsfunktionISO C++ förbjuder användning av "sizeof" på ett uttryck av funktionstypISO C++ förbjuder användning av "sizeof" på typ void som är en inkomplett typISO C++ förbjuder tilldelning av fältISO C++ förbjuder anrop av "::main" inifrån programmetISO C++ förbjuder jämförelse mellan pekare och heltalISO C++ förbjuder beräknade gotoISO C++ förbjuder initiering av new-uttryck med "="ISO C++ förbjuder uteslutande av mittersta termen i ett ?: uttryckISO C++ förbjuder intervalluttryck i switch-satserISO C++ förbjuder att man tar adressen till funktionen "::main"ISO C++ förbjuder att man tar adressen till en etikettISO C++ förbjuder användning av pekare till medlemsfunktion i pekararitmetikISO C++ förbjuder användning av funktionspekarepekare i pekararitmetikISO C++ förbjuder användning av pekare av typ "void *" i pekararitmetikISO C++ förbjuder användning av pekare till medlem i pekararitmetikISO C89 stödjer inte "long long"'ISO C89 stöder inte typen complexISO C89 stöder inte flexibla fältmedlemmarISO C89 förbjuder fält "%s" vars storlek inte kan beräknasISO C89 förbjuder long long integer konstanterISO C89 förbjuder blandade deklarationer och kodISO C89 förbjuder specifiering av subobjekt som skall initierasISO C89 förbjuder fält "%s" med variabel storlekIgnorera attributet dllimport för funktionerIgnorera dllimport för funktionerIgnorerar kommandoradsflagga "%s"Ignorerar ogiltigt flerbytesteckenI fil includerad från %s:%dI fil inkluderad från %s:%uI funktion `%s':I metod `%s':Inkomplett flagga "%s"Internt kompilatorfel i %s, vid %s:%dInternt kompilatorfel: Felhanteringsrutiner återanropade. + Internt fel #%d.Internt fel i %s, vid tradcpp.c:%d + Var vänlig och skicka in en felrapport. + Se %s för instruktioner.Internt fel: %sInternt fel: %s (program %s) + Var vänlig och skicka in en felrapport. + Se %s för instruktioner.Intern gcc-halt (abort).Intern gcc monitor: short-branch(%x)Ogiltig flagga %sOgiltig flagga "%s"Ogiltig flagga "-mstack-increment=%s"Hoppmål justeras till denna 2-potensHittade inte bibliotek lib%sLänka med libads.a, libc.a och crt0.o.Länka med libmvme.a, libc.a och crt0.o.Länka med libsim.a, libc.a och sim-crt0.o.Länka med libyk.a, libc.a och crt0.o.Loop-kod justeras till denna 2-potensMCU "%s" stöds inteMakronamn saknas efter %sMakronamn saknas efter flaggan -%cGör heltal 32 bitar storaMarkera strängar som "const char *"Saknar argument till flaggan "%s"Inga hopp i fil %s + Inga hopp i funktionen %s + Inga anrop i fil %s + Inga anrop i funktion %s + Inga körbara källkodsrader i funktion %s + Inga indatafilerNummer saknas efter %sAntal register för att skicka heltalsargumentInitiera bara variabler som kan placeras i 8-bits området.Lägg bara ut en instruktion per cykelOptimera för cpu 32032Optimera för cpu 32332Optimera för cpu 32532Optimera för 3900Optimera för 4650Flaggor: + Utdatafilnamn angivet två gångerPRINT_OPERAND_ADDRESS, null-pekareSkicka FP-argument i FP-registerSkicka argument i registerSkicka argument på stackenSökväg saknas efter %sUtför optimering för svansrekursionVar vänlig och skicka in en komplett felrapport, + om möjligt med preprocessad källfil. + Se %s för instruktioner. + Pekare är 32-bitarsPekare är 64-bitarsFöredra hopp framför villkorlig körningHantera #ident-direktivSkapa "big endian"-kod.Skapa "little endian"-kod.Profilering är inte implementerat ännu.Profilering använder mcountKänn igen and/bitand/bitor/compl/not/or/xorSamma som -mcpu=i386Samma som -mcpu=i486Samma som -mcpu=pentiumSamma som -mcpu=pentiumproSchemalägg kod för en given CPUSchemalägg för given CPUVälj CPU att generera kod förSätt errno efter inbyggda matematikfunktionerSätt biten PPC_EMB i ELF:s flaggfältLitet dataområde: none, sdata, useLiten minnesmodellAnge maximalt instansieringsdjup för mallarAnge namnet på målprocessornAnge namnet på målarkitekturenStackstorlek > 32kStrukturstorleksgräns kan bara sättas till 8 eller 32Stöd inbyggda funktioner med MMXFlaggor: + -include Inkludera innehållet i före andra filer + -imacros Använd makrodefinitioner i + -iprefix Sätt som prefix för följande två flaggor + -iwithprefix Sätt i slutet på systemets include-sökväg + -iwithprefixbefore Sätt i slutet på huvud-include-sökvägen + -isystem Sätt först på systemets include-sökväg + Symboler startar med en understrykningMål saknas efter flaggan %sFör många filnamn. Skriv %s --help för användningsinformationFånga heltalsdivision med nollFånga spill vid heltalsdivsionOväntad typ på "id" (%s)Okänd flagga -mdebug-%sKänner inte igen flagga "%s"Användning: %s [flaggor] fil... + Användning: %s [flaggor] infil utfil + Använd 128 bit long doubleAnvänd 16 bits intAnvänd 32 bits floatAnvänd 32 bits intAnvänd 32-bitars ABIAnvänd 64 bits floatAnvänd 64 bits long doubleAnvänd 64-bitars ABIAnvänd 64-bits longAnvänd assemblersyntax för DECAnvänd EABI.Använd FUNCTION_EPILOGUEAnvänd GNU asAnvänd IEEE matematik för flyttaljämförelserAnvänd GNU asAnvänd assemblersyntax för UNIXAnvänd VAX fpAnvänd alternativa registernamn.Använd "big endian" byteordningAnvänd bitfältsinstruktionerAnvänd flyttalsinstruktioner i hårdvaraAnvänd hårdvaru-fpAnvänd stor minnesmodellAnvänd biblioteksrutiner för FP-operationerAnvänd "little endian" byteordningAnvänd "little endian" byteordning för dataAnvänd normal minnesmodellAnvänd register för argumentskickningAnvänd liten minnesmodellAnvänd mjukvaruflytttalAnvänd 26-bit version av APCSAnvänd 32-bit version av APCSVarna om aritmetik med funktionspekareVarna om funktioner som är möjliga kandidater för attributet noreturnVarna om multipla deklarationer av samma objektVarna om eventuellt saknade parenteserVarna om jämförelser mellan signed/unsignedVarna om index har typen "char"Varna om tveksamma deklarationer av mainVarna om nästlade kommentarer upptäcksVarna när ett funktionsargument är en strukturVarna när en funktion är oanvändVarna när en funktionsparameter är oanvändVarna när en etikett är oanvändVarna när en variabel är oanvändVarna när ett uttrycksvärde är oanväntVarning: -pipe ignorerad eftersom -save-temps angivenVarning: -pipe ignorerad eftersom -time angivenFix för storem hårdvarubuggYYDEBUG är inte definierad.[Lämnar %s] + [kan inte hitta %s][super ...] måste stå i metodkontext__builtin_eh_return stöds inte på denna målarkitekturandra argumentet till __builtin_longjmp måste vara 1__builtin_saveregs stöds inte på denna målarkitektur__builtin_trap stöds inte på denna målarkitektur"%%%c" ger bara de sista två siffrorna i året"%%%c" ger bara de sista två siffrorna i året i vissa landsinställningar"%s %s" är deklarerad i en for-loops första del"%s %s" deklarerad inuti parameterlistaattributet "%s" fungerar bara på funktionerattributet "%s" ignoreratattributet "%s" är inte applicerbart på typerattributet `%s' ignorerat"%s" kan inte vara statiskt allokerad"%s" är deklarerad som "static" men definieras aldrig"%s" är deklarerad både som exporterad till och importerad från en DLL."%s" är deklarerad som en funktion som returnerar en funktion"%s" är deklarerad som en funktion som returnerar ett fält"%s" är deklarerad inline efter att den blivit anropad"%s" deklarerad inline efter sin definition"%s" är definierad både normalt och som ett alias"%s" är definierad men inte använd"%s" svarar inte på "%s""%s" har en inkomplett typ"%s" är både "extern" och initierare"%s" ignorerad, i konflikt med "-g%s"`%s' initierad och deklarerad "extern""%s" är ett ej känt funktionsformat"%s" är normalt en icke-statisk function"%s" är inte i början av deklarationen"%s" konverteras till "%s" när det skickas via "...""%s" är vanligtvis en funktion"%s" är lokalt extern men globalt static"%s" är inte deklarerad"%s" stöds inte av %s"%s" är tidigare deklarerad här"%s" definierades tidigare här"%s" omdeklarerad som en annan sorts symbol"%s" tar bara noll eller två argument"%s" är ej deklarerad"%s" odeklarerad (första förekomsten i denna funktionen)"%s" odeklarerad här (inte i en funktion)"%s" är använd men inte definierad"%s" är använd innan sin deklaration"%s" deklarerades "extern" och senare "static""%s" deklarerades implicit "extern" och senare "static""%s" deklarerades tidigare implicit att returnera "int""%s" användes utan någon deklaration innan sin definition"%s" användes utan någon prototyp innan sin definition"%s": okänd eller icke supportad flagga till -gflagga "-a" (block profilering) stöds inteflagga "-ax" (hopprofilering) stöds inte"-p" stödjs inte; använd "-pg" och gprof(1)"..." i en gammaldags identifierarlista"/*" inuti kommentar"__builtin_next_arg" anropad utan argument"bool" är numera ett nyckelord"default"-etikett är inte i en switch-sats"enum %s" är inkomplett i scope-område som slutar här"long long long" är för långt för GCC"main" måste returnera "int""noreturn"-funktion returnerar ändå"noreturn"-funktion returnerar ett icke-void värde"return" med värde i funktion som returnerar void"sizeof" applicerat på ett bitfält"struct %s" är inkomplett i scope-område som slutar här"union %s" är inkomplett i scope-område som slutar här"va_start" används i en funktion med fixt antal parametrar"void" i parameterlistan måste vara hela listanabsolut filnamn i remap_filenameadress på global registervariabel "%s" efterfrågadadress på register variabel "%s" efterfrågadaliasargumentet är inte en strängminnesjustering kan inte anges för "%s"tvetydig konveretering av fältindexanonym uppräkningstyp deklarerad i parameterlistaanonym struktur deklarerad i parameterlistaanonym union deklarerad i parameterlistaargumenten som skall formateras är inte "..."argument "%s" matchar inte prototypenargumentformat angivet för icke-funktion "%s"argumentet till "__builtin_args_info" måste vara konstantargument till "__builtin_args_info" är utanför sitt intervallargumentet till "__builtin_eh_return_regno" måste vara konstantargumentet till "asm" är inte en konstant strängargument till "%s" saknasargument till "%s" saknas + argument till "-%s" saknasargument till "-B" saknasargument till "-V" saknasargument till "-Xlinker" saknasargument till "-b" saknasargument till "-specs" saknasargument till "-specs=" saknasargument till "-x" saknasaritmetik på pekare till inkomplett typfält "%s" antas ha ett elementfältstorlek saknas i "%s"fältindex har typen "char"fältindex är inte ett heltalfälttyp har inkomplett elementtypfält-värde använd där skalär krävstilldelningtilldelning (inte initieraing) i deklarationförsök att använda förgiftad "%s"felaktigt magiskt nummer i fil "%s"ogiltigt värde (%s) till flagga %sogiltigt värde (%s) till flagga -mcpuogiltigt värde "%s" till -memory-latencybasoperanden till "->" är inte en pekarebitfält "%s" har en icke godkänd typbitfält "%s" har en icke godkänd typ enligt ISO Cbåde suffix 'f' och 'l' på flyttalskonstantbåde long och short angivet för "%s"både signed och unsigned specificerat för "%s"break-sats som inte är i en loop eller switchinbyggd funktion "%s" deklarerad som icke-funktioninbyggd funktion "%s" stöds inte för närvarandeanrop %d aldrig utfört + anropad härifrånanropat objekt är inte en funktionkan inte stänga %skan inte skapa katalog %skan inte hitta %skan inte inline:a anrop till "%s"kan inte öppna %skan inte öppna fil %s för skrivningkan inte läsa från %skan inte spola tillbaka %skan inte sätta attributet "%s" efter definitionenkan inte öppna %skan inte skriva till %skan inte konvertera till en pekartypkan inte deklarera "::main" som en mallkan inte deklarera "::main" som statickan inte deklarera pekare till referenserkan inte deklarera referenser till referenserkan inte deklarera en statisk funktion i en annan funktionkan inte hitta "%s"kan inte hitta "ldd"kan inte hitta "nm"kan inte hitta klass(fabrik)-metodkan inte hitta metod.kan inte hitta källfil %skan inte inline:a funktion "main"kan inte ange både -C och -okan inte ta adressen till bitfält "%s"Kan inte ta adressen till "this", som är ett rvalue-uttryckkan inte använda typeid med -fno-rtticase-etikett reducerar inte till en heltalskonstantcase-etikett är inte i en switch-satstypkonvertering matchar inte en funktionstyptypkonvertering från pekare till heltal av annan storlektypkonvertering till pekare från heltal med annan storlektypkonvertering till unionstyp från typ som ej finns i unionenteckenkonstant för långklass "%s" implementerar inte protokollet "%s"close %dkomma i slutet av uppräkningslistajämföra flyttal med == eller != är osäkertjämförelse mellan pekare och heltaljämföreslse mellan signed och unsignedjämförelsen är alltid %djämförelsen är alltid falsk på grund av begränsat intervall för datatypenjämförelsen är alltid sann på grund av begränsat intervall för datatypenjämförelse av kompletta och inkompletta pekarejämförelse med unsigned-uttryck < 0 är alltid falsktjämförelse med unsigned-uttryck >= 0 är alltid santjämförelser som X<=Y<=Z har inte sin matematiska meningkompilering avslutad. + complex ogiltig för "%s"motstridande deklarationer av "%s"motstridiga typer på "%s"motstridiga typer på inbyggd funktion "%s"const "%s" kan inte deklareras "mutable"const-deklaration för "%s" följer på icke-constkonstruerare kan inte vara en statisk medlemsfunktion"continue-sats som inte är i en loopProgramflödet når slutet på en icke-void-funktionkonvertering från NaN till intkonveretering från NaN till unsigned intkonvertering till icke-skalär typ begärdkunde inte öppna dump-fil "%s"skapar ett fält med storlek nollaktuell fil är äldre än %sdatadefinition har ingen typ eller lagringsklassdecimal konstant så stor att den är unsigneddeklaration av parameter "%s" med det finns ingen sådan parameterdeklaration av "%s" som ett fält med funktionerdeklaration av "%s" som ett fält med voiddeklaration av "%s" är "extern" och initieraddeklaration av "%s" döljer en parameterdeklaration av "%s" döljer symbol från parameterlistadeklaration av "%s" döljer global deklarationdeklaration av "%s" döljer en tidigare lokalderefererar "void *"-pekarederefererar pekare till inkomplett typdestruerare kan inte vara en statisk medlemsfunktiondestruerare behövs för "%#D"destruerare måste vara medlemsfunktionerdup2 %d 1dubbla (eller överlappand) case-värdenflera "%s"upprepning av "const"upprepning av "restrict"upprepning av "volatile"upprepat case-värdeupprepad deklaration av klassmetod "%s".upprepad definition av klassmetod "%s".dubbel deklaration av etikett "%s"upprepning av medlem "%s"dynamiskt beroende. + elementen i fält "%s" har en ofullständig typtom kropp i else-satstom teckenkonstanttom deklarationtomt filnamn i #%stomt intervall angivetuppräkningsvärde för "%s" är inte en heltalskonstantfel vid stängning av %sfel vid skrivning till %sescape-sekvens ryms ej i ett teckenexecv %sexecvp %suttryckssats har inkomplett typextern deklaration av "%s" matchar inte den globalaextra semikolon i struktur eller union angivetextra text vid slutet av direktivkunde inte hitta klassen "%s"fclosefclose %sfdopenfält "%s" deklarerad som en funktionfält "%s" har en inkomplett typfältinitierare är ej konstantfilen "%s" påbörjad men ej avslutadförsta argumentet till "%s" skall vara "int"första argumentet till "va_arg" är inte av typen "va_list"fix_sched_param: okänd param: %sflyttal utanför intervallet för "%s"flyttalsnummer överskrider intervallet för en "double"flyttalsspillflyttalsspill i uttryckfopen %sen gång för varje funktion den finns i.)formatsträngen kommer efter argumenten som skall formaterasargument för formatsträng är inte av strängtypformatsträng har ett ogiltigt antal operanderfstat %sfunktion "%s" kan inte deklareras som "mutable"funktion "%s" är initierad som en variabelfunktionen "%s" deklarerades tidigare i ett blockfunktionskroppen för konstrueraren saknasfunktion "%s" kan inte deklareras som "mutable"funktionsdeklaration är inte en prototypfunktionsdefinition deklarerad som "auto"funktionsdefinition deklarerad som "register"funktionsdefinition deklarerad som "typedef"funktionen är en möjlig kandidat för attributet "noreturn"funktionen returnerar adress till en lokal variabelfunktionstyper inte riktigt kompatibla i ISO Cfunktion använder __builtin_eh_returngcc version %s + gcov [-b] [-v] [-n] [-l] [-f] [-o OBJKAT] fil + Generera RP-kodglobal registervariabel "%s" använd i nästlad funktionglobal registervariabel har startvärdeiC2.0 och iC3.0 är imkompatible - använder iC3.0ignorerar #pragma %signorerar #pragma %s %signorerar asm för ickestatisk lokal variabel "%s"ignorerar ej existerande katalog "%s" + ignorerar #pragma: %simplicit deklaration av funktion "%s"inkompatibla typer i %sinkomplett implementation av kategori "%s"inkomplett implementation av klass "%s"inkomplett typunifieringinitieringinitierad variabel "%s" är markerad som dllimportinitierare misslyckas med att bestämma storlek på "%s"inlining misslyckades i anrop av "%s"instansvariabel "%s" är deklarerad som %sinstansvariabel "%s" är deklarerad som privatheltalskonstant är större än maximala värdet för sin typheltalskonstant för stor för denna konfigurering av kompilatorn - kortar ner till %d bitarheltalskonstanter är utan tecken i ISO C, med tecken med -traditionalheltalskonstant är större än maximala värdet på %sheltalskonstant utanför sitt intervallheltalsspill i uttryckinternt felinternt fel - ogiltigt Utf8-namninternt fel: ogiltig #-radogiltig #indentogiltig #lineogiltigt #pragma %sogiltigt GCC-direktiv #pragma poisonogiltig %%-kodogiltigt värde %%Bogiltigt %%C-värdeogiltigt %%E-värdeogiltigt %%L-värdeogiltigt %%M-värdeogiltigt %%N-värdeogiltigt %%O-värdeogiltigt %%P-värdeogiltigt %%Q-värdeogiltigt %%R-värdeogiltigt %%U-värdeogiltigt %%V-värdeogiltigt %%h-värdeogiltigt %%m-värdeogiltigt %%r-värdeogiltigt %%s-värdeogiltig flagga till --param: %sogiltig "asm": %sogiltigt argument till "__builtin_frame_address"ogiltigt argument till "__builtin_return_address"ogiltig kodogiltigt flagga "%s" i line-direktivogiltigt lvalue i tilldelningogiltigt makronamn "%s"ogiltig operand för %H/%Logiltig operand för %Rogiltig operand för %Uogiltig operand för %Vogiltiga operander till binär %sogiltig operation på oinstansierad typogiltigt parametervärde "%s"ogiltig mottagartyp "%s"ogiltig lagringsklass för funktion "%s"ogiltigt sanningsvärdeuttryckogiltig typ "void" för newogiltigt typargumentogiltigt typargument till "%s"ogiltig typ: "void &"ogiltig användning av %%d, %%x eller %%xogiltigt användande av "restrict"ogiltig användning av void-uttryckogiltigt format på versionsnummerdess scope-område är endast denna definition eller deklaration, vilket troligen inte är vad du vill.hopp till case-etikettskräp vid slutet av #pragma weakskräp vid slutet av "#pragma %s"skräp vid slutet av "#pragma pack"etikett %s är refererad till utanför en funktionetikett "%s" definierad men inte användetikett "%s" använd men inte definieradspråk %s känns inte igenspråksträng `"%s"' känns inte igenstort heltal implicit trunkerat till unsigned typvänstershiftoperanden >= storleken på typenvänstershiftoperanden är negativbibliotek: %s + biblioteksfunktion "%s" deklarerad som icke-funktionradnummer utanför möjligt intervallladda kommandomappning, %d kommandon, ny storlek %ld. + både long och short angivet för "%s"long eller short angiven med char för "%s"long eller short angiven med flyttalstyp för "%s"long, short, signed eller unsigned ogiltig för "%s"long, short, signed eller unsigned använd felaktigt på "%s"lseek %s 0får inte använda både -EB och -ELfår inte använda både -mfp64 och -m4650får inte använda både -mfp64 och -msingle-floatmedlemmarmetod "%s" kan inte hittas i klassenmetod "%s" implementeras inte av protokoll.metoddefinition för "%c%s" kan inte hittasmetoder kan inte konverteras till funktionspekaresaknar numerisk $-operand i formatsträngsaknas '(' efter predikatsaknar ')' efter "defined"saknas ')' för att avsluta svaretsaknar ';' före slutklammerargument saknas till "__builtin_args_info"saknar avslutande tecken >saknar mellanrum efter nummer "%.*s"mno-cygwin och mno-win32 är inkompatiblamer än ett "i"- eller "j"-suffix på heltalskonstantmsync %sflerteckens teckenkonstantmultiple deklaration av metod "%s"flera default-etiketter i en switchflera parametrar med namn "%s"flera lagringsklasser i deklaration av "%s"munmap %småste ha#include för användande av typeidnamn saknas på medlemsfunktionnamngivna medlemmarnegativt heltal implicit konverterat till unsigned typnegativ storlek i bitfält "%s"nästlad extern deklaration av "%s"nästlad funktion "%s" är deklarerad "extern"nästlad omdefinition av "%s"inga argument till makro "%s"inga argumenthittar ingen cmd_stringsingen datatyp för läge `%s'ingen beskriving ännuingen etikett med namn "%s"inget nyradstecken vid slutet av fileningen tidigare deklaration av "%s"ingen tidigare prototyp för `%s'inget semikolon vid slutet av struktur eller unioningen superklass deklarerad i interface för "%s"hittade ingen symboltabellicke-lvalue i %sicke-prototypdefinition hereicke-statisk deklaration av "%s" följer på statiskinte tillräcklig typinformationhittades inte + formatsträngen är nullantalet argument matchar inte prototypenobsolet användning av initierare med ":"obsolet angivelse av initierare utan "="index till en konstant sträng pekar utanför dess gränserbara %d argument till makro "%s"bara 1 argument till makro "%s"open %soperation på "%s" kan vara odefinieradoptimering avslagenoptimering påslagenspill i konstant uttrycköverspill i uppräkningsvärdenspill i implicit constant konverteringparameter "%s" deklarerad som voidparameter "%s" har en inkomplett typparameter "%s" är initieradparameter "%s" pekar på inkomplett typparameter har en inkomplett typparameternamn saknasparameternamn saknas i parameterlistaparameternamn utlämnatparameter pekar på inkomplett typparsningsfelrörplacera varje funktion i sin egen sektionpekare av typen "void *" använd med aritmetikpekare av typ "void *" använd i subtraktionpekare till funktion använd med aritmetikpekare till funktion använd i subtraktionpekare är inte tillåtna case-värdenförgiftar existerande makro "%s"saknas troligen en ')'predikat måste vara en identifierarepredikatets svar är tomttidigare deklaration av "%s"föregående externa dekl. av "%s"tidigare implicit deklaration av "%s"tidigare använd härföregående parameterns storlek beror på "%s"profilering stöds inte tillsammans med -mg + program: %s + prototyp för "%s" följerprototyp för `%s' följer och argument %d matchar inteprototyp för "%s" följer och antalet argument matchar inteläste %ld bytes, förväntade %ld, från %sread %somdeklaration av "%s"redefinition av "%s %s"omdefiniering av "%s"omdirigerar stdout: %sredundant omdeklaration av "%s" i samma scoperegistervariabel \"%s\" använd i nästlad funktionomimplementation av klass "%s"begäran av medlem "%s" i något som inte är en struktur eller unionefterfrågad minnesjustering är inte konstantefterrågad minnesjustering är inte en potens av 2efterfrågad minnesjustering är för storreturnreturtyp sätts till "int"returtyp är som standard idreturtyp för "%s" är som standard idreturtypen för "main" ändrad till "int"returtypen är en inkomplett typreturtypen på "%s" är inte "int"returnerar ett värde från en destruktorreturnerar referens till en temporärhögershiftoperanden >= storleken på typenhögershiftoperanden är negativandra argumentet till "__builtin_expect" måste vara en konstantandra argumentet till "%s" skall vara "char **"andra parametern till "va_start" var inte det sista namngivna argumentetattributet "section" kan inte anges för lokala variablerattributet "section" är inte tillåten för "%s"attributet "section" stöds inte för denna målarkitektursektion "%s" står i konflikt med tidigare deklarationsektionspekare saknasdöljer inbyggd funktion "%s"döljer biblioteksfunktion "%s"shared och mdll är inkompatiblashiftoperanden >= storleken på typenshiftoperanden är negativshort, signed eller unsigned är ogiltigt för "%s"både signed och unsigned angivet för "%s"typ signed och unsigned i villkorsuttryckstorleken på "%s" är %d bytesstorleken på "%s" är större än %d bytesstorlek på fält "%s" är inte av heltalstypstorlek på fält "%s" är negativtfältet "%s" är för stortstorleken på returvärdet från "%s" är %u bytesstorleken på returvärdet från "%s" är större än %d bytesstorleken på variabel "%s" är för storsizeof applicerat på ett bit-fältsizeof applicerad på en funktionstypsizeof applicerat på typen voidsizeof applicerat på en inkomplett typsizeof(long double) är 12.sizeof(long double) är 16.ledsen, inte implementerat: ledsen, inte implementerat: #pragma align NAMN=STORLEKledsen, inte implementerat: #pragma noalign NAMNspecfilen har ingen spec för länkningstatisk access till objekt av typ "id"statisk deklaration av "%s" följer på icke-statiskstatisk variabel "%s" är markerad som dllimportlagringsklass "register" ogiltig för funktion "%s"lagringsklass angiven för parameter "%s"lagringsklass angiven för strukturfält "%s"lagringsklass angiven för typnamnlagringsstorlek på "%s" är inte konstantlagringsstorlek på "%s" är okändstränglängden "%d" är större än den minsta längden "%d" som ISO C%d kompilatorer behöver stödjasträngsektionen saknasstructstruct-värde använt där skalär krävsstrukturindex har typen "char"föreslår parenteser runt && inuti ||föreslår parenteser runt + eller - inuti operanden till &föreslår parenteser runt + eller - inuti skiftföreslår parenteser runt aritmetik inuti operanden till ^föreslår parenteser runt aritmetik inuti operanden till |föreslår parenteser runt tilldelning som används som sanningsvärdeföreslår parenteser runt jämförelser inuti operanden till &föreslår parenteser runt jämförelse inuti operanden till ^föreslår parenteser runt jämförelse inuti operanden till |flagga -mcpu=%s står i konflikt med flagga -march=switch-argument är inte ett heltalsyntaxfelsyntaxfel vid token "%s"tar adress till något temporärtmålprocessorn stödjer inte APCS-26målprocessorn stödjer inte APCS-32målprocessorn stödjer inte THUMB-instruktionervillkorssatsen började härsemantiken för "\%c" varierar med -traditionalsemantiken för "\a" varierar med -traditionalsemantiken för "\a" varierar med -traditionalsemantiken för "\x" varierar med -traditionalden enda giltiga kombinationen är "long double"tredje argumentet till "%s2 skall troligen vara "char **"denna funktion kan returnera med eller utan ett värdedetta är en tidigare deklarationdetta är den första default-etikettendetta är det första fallet som överlappar det värdetdetta är platsen för den tidigare definitionentre "l"-suffix på heltalskonstanttid %s: %ld.%06ld (%ld%%) + för få argument enligt formatsträngenför få argument till funktionför få argument till funktionen "%s"för få argument till procedurför få argument till proceduren "%s"för många "l"-suffix i heltalskonstantför många (%d) argument till makro "%s"för många argument för för formatsträngför många argument till funktionför många argument till funktionen "%s"För många argument till funktionen "va_start"för många argument till procedurför många argument till proceduren "%s"för många indatafilertoppnivådeklaration av "%s" anger "auto"traditionell C ignorerar #%s dör tecknet # är indenterattraditionell C stödjer inte sträng-sammanslagningtraditionell C stödjer inte suffixet 'f'traditionell C stödjer inte suffixet 'l'traditionell C stödjer inte suffixet 'u'traditionell C hanterar inte operatorn unärt plustvå "u"-suffix på heltalskonstanttvå eller fler datatyper i deklaration av "%s"två typer angivna i en tom deklarationtypfel i villkorsuttrycktyp skiljer sig från tidigare extern deklarationtyp skiljer sig från tidigare implicit deklarationtypnamn förväntat före "*"typen på "%s" sätts till "int"typen på extern "%s" är inte globaltypen på parameter "%s" är inte deklareradtypkvalificerare för "%s" i konflikt med tidigare dekltyp med högre precision än %stypedef "%s" är initieradtyperna är inte riktigt kompatiblakan inte göra mmap på fil "%s"kan inte öppna fil "%s"unärt "&"obalanserad #endifunionunion-värde använt där skalär krävsokänt #pragma namespace %sokänd C-standard "%s"okänd escape-sekvens "\%c"okänd escape-sekvens "\%c"okänd escape-sekvens: '\' följd av tecken 0x%xokänt maskinläge `%s'okänt registernamn: %sodöpt struktur/union som inte har någon instansKänner inte igen sektionsnamn "%s"oigenkänd formatangivelseej igenkänd debuggningsflagga för gcc: %cej igenkänd flagga `-%s'Känner inte igen registernamn "%s"Icke supportat argument till "__builtin_frame_address"Icke supportat argument till "__builtin_return_address"ej stödd versionej avslutad kommentaricke terminerad formatsträngoanvänd parameter "%s"oanvänd variabel "%s"användning ab `%s' i mallanvändning av gammaldags typkonverteringoanvändbart nyckelord eller typnamn i tom deklarationvariabel "%s" deklarerad "inline"variabel "%s" har initierare men är av inkomplett typvariabel eller fält "%s" deklarerad som voidobjekt med variabel storlek kan inte initierasvärdet av typen void ignoreras inte vilket bör görasvarning: storleken på "%s" är större än sin typwrite %sfel antal argument angett för attributet `%s'fel typ på argument till %sfel typ på argument till absskrev %ld bytes, förväntade %ld, till %sdu måste dessutom ange antingen -M eller -MMnoll eller negativ storlek på fält "%s"Storleken noll på bitfält "%s"nollstorlek i %s formatsträngformatsträng med längden noll \ No newline at end of file diff -Nrc3pad gcc-3.0.4/gcc/po/sv.po gcc-3.1/gcc/po/sv.po *** gcc-3.0.4/gcc/po/sv.po Sat Nov 25 17:50:02 2000 --- gcc-3.1/gcc/po/sv.po Fri Jun 15 22:13:00 2001 *************** *** 5,19 **** msgid "" msgstr "" "Project-Id-Version: gcc 2.97 20001112 (experimental)\n" ! "POT-Creation-Date: 2000-09-12 04:07+0200\n" ! "PO-Revision-Date: 2000-11-22 10:49+01:00\n" "Last-Translator: Dennis Björklund \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8-bit\n" ! #: builtins.c:239 msgid "offset outside bounds of constant string" msgstr "index till en konstant sträng pekar utanför dess gränser" --- 5,19 ---- msgid "" msgstr "" "Project-Id-Version: gcc 2.97 20001112 (experimental)\n" ! "POT-Creation-Date: 2001-06-13 09:06+0200\n" ! "PO-Revision-Date: 2001-06-13 09:18+02:00\n" "Last-Translator: Dennis Björklund \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8-bit\n" ! #: builtins.c:275 msgid "offset outside bounds of constant string" msgstr "index till en konstant sträng pekar utanför dess gränser" *************** msgstr "index till en konstant sträng pe *** 24,1873 **** #. port (i860) that used this code, and I'm unconvinced it could actually #. handle the general case. So we no longer try to handle anything #. weird and make the backend absorb the evil. ! #: builtins.c:1803 msgid "__builtin_saveregs not supported by this target" msgstr "__builtin_saveregs stöds inte på denna målarkitektur" ! #: builtins.c:1846 msgid "argument of `__builtin_args_info' must be constant" msgstr "argumentet till \"__builtin_args_info\" måste vara konstant" ! #: builtins.c:1852 msgid "argument of `__builtin_args_info' out of range" msgstr "argument till \"__builtin_args_info\" är utanför sitt intervall" ! #: builtins.c:1858 msgid "missing argument in `__builtin_args_info'" msgstr "argument saknas till \"__builtin_args_info\"" ! #: builtins.c:1889 msgid "`va_start' used in function with fixed args" msgstr "\"va_start\" används i en funktion med fixt antal parametrar" ! #: builtins.c:1908 msgid "second parameter of `va_start' not last named argument" msgstr "" "andra parametern till \"va_start\" var inte det sista namngivna argumentet" #. Evidently an out of date version of ; can't validate #. va_start's second argument, but can still work as intended. ! #: builtins.c:1913 msgid "`__builtin_next_arg' called without an argument" msgstr "\"__builtin_next_arg\" anropad utan argument" ! #: builtins.c:2006 msgid "too many arguments to function `va_start'" msgstr "För många argument till funktionen \"va_start\"" ! #: builtins.c:2092 msgid "first argument to `va_arg' not of type `va_list'" msgstr "första argumentet till \"va_arg\" är inte av typen \"va_list\"" ! #: builtins.c:2120 #, c-format msgid "`%s' is promoted to `%s' when passed through `...'" msgstr "\"%s\" konverteras till \"%s\" när det skickas via \"...\"" ! #: builtins.c:2124 #, c-format msgid "(so you should pass `%s' not `%s' to `va_arg')" msgstr "(alltså skall du skicka \"%s\" och inte \"%s\" till \"va_arg\")" ! #: builtins.c:2233 msgid "invalid arg to `__builtin_frame_address'" msgstr "ogiltigt argument till \"__builtin_frame_address\"" ! #: builtins.c:2235 msgid "invalid arg to `__builtin_return_address'" msgstr "ogiltigt argument till \"__builtin_return_address\"" ! #: builtins.c:2248 msgid "unsupported arg to `__builtin_frame_address'" msgstr "Icke supportat argument till \"__builtin_frame_address\"" ! #: builtins.c:2250 msgid "unsupported arg to `__builtin_return_address'" msgstr "Icke supportat argument till \"__builtin_return_address\"" ! #: builtins.c:2332 msgid "second arg to `__builtin_expect' must be a constant" msgstr "andra argumentet till \"__builtin_expect\" måste vara en konstant" ! #: builtins.c:2581 msgid "__builtin_longjmp second argument must be 1" msgstr "andra argumentet till __builtin_longjmp måste vara 1" ! #: builtins.c:2595 msgid "__builtin_trap not supported by this target" msgstr "__builtin_trap stöds inte på denna målarkitektur" #. just do library call, if unknown builtin ! #: builtins.c:2633 #, c-format msgid "built-in function `%s' not currently supported" msgstr "inbyggd funktion \"%s\" stöds inte för närvarande" ! #: c-common.c:387 #, c-format msgid "" ! "string length `%d' is greater than the minimum length `%d' ISO C%d is " "required to support" msgstr "" "stränglängden \"%d\" är större än den minsta längden \"%d\" som ISO C%d " ! "behöver stödja" ! #: c-common.c:552 #, c-format msgid "`%s' attribute directive ignored" msgstr "attributet \"%s\" ignorerat" ! #: c-common.c:560 #, c-format msgid "`%s' attribute does not apply to types" msgstr "attributet \"%s\" är inte applicerbart på typer" ! #: c-common.c:567 #, c-format msgid "wrong number of arguments specified for `%s' attribute" msgstr "fel antal argument angett för attributet `%s'" ! #: c-common.c:583 c-common.c:590 c-common.c:597 c-common.c:610 c-common.c:618 ! #: c-common.c:633 c-common.c:646 c-common.c:654 c-common.c:670 c-common.c:682 ! #: c-common.c:694 c-common.c:699 c-common.c:1033 c-common.c:1185 #, c-format msgid "`%s' attribute ignored" msgstr "attributet `%s' ignorerat" ! #: c-common.c:732 #, c-format msgid "unknown machine mode `%s'" msgstr "okänt maskinläge `%s'" ! #: c-common.c:735 #, c-format msgid "no data type for mode `%s'" msgstr "ingen datatyp för läge `%s'" ! #: c-common.c:755 msgid "section attribute cannot be specified for local variables" ! msgstr "" ! #: c-common.c:762 #, c-format msgid "section of `%s' conflicts with previous declaration" ! msgstr "" ! #: c-common.c:768 #, c-format msgid "section attribute not allowed for `%s'" ! msgstr "" ! #: c-common.c:771 msgid "section attributes are not supported for this target" ! msgstr "" ! #: c-common.c:790 msgid "requested alignment is not a constant" msgstr "efterfrågad minnesjustering är inte konstant" ! #: c-common.c:795 msgid "requested alignment is not a power of 2" msgstr "efterrågad minnesjustering är inte en potens av 2" ! #: c-common.c:797 msgid "requested alignment is too large" msgstr "efterfrågad minnesjustering är för stor" ! #: c-common.c:820 #, c-format msgid "alignment may not be specified for `%s'" msgstr "minnesjustering kan inte anges för \"%s\"" ! #: c-common.c:843 c-common.c:949 ! #, c-format ! msgid "argument format specified for non-function `%s'" ! msgstr "" ! ! #: c-common.c:849 ! msgid "unrecognized format specifier" ! msgstr "" ! ! #: c-common.c:865 ! #, c-format ! msgid "`%s' is an unrecognized format function type" ! msgstr "" ! ! #: c-common.c:887 c-common.c:963 ! msgid "format string has invalid operand number" ! msgstr "" ! ! #: c-common.c:895 ! msgid "format string arg follows the args to be formatted" ! msgstr "" ! ! #: c-common.c:914 c-common.c:984 ! msgid "format string arg not a string type" ! msgstr "" ! ! #: c-common.c:927 ! msgid "args to be formatted is not '...'" ! msgstr "" ! ! #: c-common.c:993 ! msgid "function does not return string type" ! msgstr "" ! ! #: c-common.c:1011 #, c-format msgid "`%s' defined both normally and as an alias" ! msgstr "" ! #: c-common.c:1019 msgid "alias arg not a string" ! msgstr "" ! #: c-common.c:1040 c-common.c:1057 c-common.c:1074 #, c-format msgid "`%s' attribute applies only to functions" ! msgstr "" ! #: c-common.c:1046 c-common.c:1063 c-common.c:1080 #, c-format msgid "can't set `%s' attribute after definition" ! msgstr "" ! ! #: c-common.c:1632 ! msgid "too few arguments for format" ! msgstr "" ! ! #: c-common.c:1730 c-common.c:1751 ! msgid "missing $ operand number in format" ! msgstr "" ! ! #: c-common.c:1760 ! msgid "ISO C does not support %%n$ operand number formats" ! msgstr "" ! ! #: c-common.c:1766 ! msgid "operand number out of range in format" ! msgstr "" ! ! #: c-common.c:1818 ! #, c-format ! msgid "format argument %d unused before used argument %d in $-style format" ! msgstr "" ! ! #: c-common.c:1822 ! msgid "unused arguments in $-style format" ! msgstr "" ! ! #: c-common.c:1912 ! msgid "null format string" ! msgstr "" ! ! #: c-common.c:1923 c-common.c:1935 ! msgid "format not a string literal, argument types not checked" ! msgstr "" ! ! #: c-common.c:1941 ! msgid "zero-length format string" ! msgstr "" ! ! #: c-common.c:1944 ! msgid "unterminated format string" ! msgstr "" ! ! #: c-common.c:1967 ! msgid "embedded `\\0' in format" ! msgstr "" ! ! #: c-common.c:1970 ! msgid "too many arguments for format" ! msgstr "" ! ! #: c-common.c:1979 ! msgid "spurious trailing `%%' in format" ! msgstr "" ! ! #: c-common.c:2019 ! msgid "zero width in scanf format" ! msgstr "" ! ! #: c-common.c:2026 ! #, c-format ! msgid "ISO C does not support the strftime `%c' flag" ! msgstr "" ! ! #: c-common.c:2030 c-common.c:2083 ! #, c-format ! msgid "repeated `%c' flag in format" ! msgstr "" ! ! #: c-common.c:2047 ! msgid "ISO C does not support strftime format width" ! msgstr "" ! ! #: c-common.c:2055 ! msgid "multiple E/O modifiers in format" ! msgstr "" ! ! #: c-common.c:2095 ! msgid "use of both ` ' and `+' flags in format" ! msgstr "" ! ! #: c-common.c:2100 ! msgid "use of both `0' and `-' flags in format" ! msgstr "" ! ! #: c-common.c:2102 ! msgid "ISO C does not support the `'' format flag" ! msgstr "" ! ! #: c-common.c:2104 ! msgid "ISO C does not support the `I' format flag" ! msgstr "" ! ! #: c-common.c:2144 ! #, c-format ! msgid "field width is not type int (arg %d)" ! msgstr "" ! ! #: c-common.c:2193 ! #, c-format ! msgid "field precision is not type int (arg %d)" ! msgstr "" ! ! #: c-common.c:2239 ! #, c-format ! msgid "ISO C does not support the `%s' %s length modifier" ! msgstr "" ! ! #: c-common.c:2243 ! #, c-format ! msgid "ISO C89 does not support the `%s' %s length modifier" ! msgstr "" ! ! #: c-common.c:2258 ! #, c-format ! msgid "use of `*' and `%s' together in format" ! msgstr "" ! ! #: c-common.c:2264 ! msgid "conversion lacks type at end of format" ! msgstr "" ! ! #: c-common.c:2275 ! #, c-format ! msgid "unknown conversion type character `%c' in format" ! msgstr "" ! ! #: c-common.c:2278 ! #, c-format ! msgid "unknown conversion type character 0x%x in format" ! msgstr "" ! ! #: c-common.c:2285 ! msgid "ISO C does not support the `%%%c' %s format" ! msgstr "" ! ! #: c-common.c:2289 ! msgid "ISO C89 does not support the `%%%c' %s format" ! msgstr "" ! ! #: c-common.c:2294 ! msgid "ISO C does not support `%%O%c'" ! msgstr "" ! ! #: c-common.c:2296 ! msgid "ISO C89 does not support `%%O%c'" ! msgstr "" ! ! #: c-common.c:2299 ! msgid "ISO C89 does not support `%%E%c'" ! msgstr "" ! ! #: c-common.c:2302 ! #, c-format ! msgid "width used with `%c' format" ! msgstr "" ! ! #: c-common.c:2305 ! msgid "`%%%c' yields only last 2 digits of year in some locales" ! msgstr "" ! ! #: c-common.c:2308 ! msgid "`%%%c' yields only last 2 digits of year" ! msgstr "" ! ! #: c-common.c:2310 ! #, c-format ! msgid "precision used with `%c' format" ! msgstr "" ! ! #: c-common.c:2313 ! #, c-format ! msgid "`a' flag used with `%c' format" ! msgstr "" ! ! #: c-common.c:2319 ! msgid "ISO C does not support the `a' flag" ! msgstr "" ! ! #. The end of the format string was reached. ! #: c-common.c:2333 ! msgid "no closing `]' for `%%[' format" ! msgstr "" ! ! #: c-common.c:2338 ! #, c-format ! msgid "suppression of `%c' conversion in format" ! msgstr "" ! ! #: c-common.c:2344 ! #, c-format ! msgid "flag `%c' used with type `%c'" ! msgstr "" ! ! #: c-common.c:2353 ! #, c-format ! msgid "`0' flag ignored with precision specifier and `%c' format" ! msgstr "" ! ! #: c-common.c:2360 ! #, c-format ! msgid "use of `%s' length modifier with `%c' type character" ! msgstr "" ! ! #: c-common.c:2370 ! msgid "ISO C does not support the `%%%s%c' %s format" ! msgstr "" ! ! #: c-common.c:2374 ! msgid "ISO C89 does not support the `%%%s%c' %s format" ! msgstr "" ! ! #: c-common.c:2428 ! #, c-format ! msgid "writing into constant object (arg %d)" ! msgstr "" ! ! #: c-common.c:2439 ! #, c-format ! msgid "extra type qualifiers in format argument (arg %d)" ! msgstr "" ! ! #: c-common.c:2447 ! #, c-format ! msgid "format argument is not a pointer (arg %d)" ! msgstr "" ! ! #: c-common.c:2449 ! #, c-format ! msgid "format argument is not a pointer to a pointer (arg %d)" ! msgstr "" ! ! #: c-common.c:2539 ! #, c-format ! msgid "%s format, %s arg (arg %d)" ! msgstr "" ! #: c-common.c:2558 msgid "overflow in constant expression" ! msgstr "" ! #: c-common.c:2579 msgid "integer overflow in expression" ! msgstr "" ! #: c-common.c:2588 msgid "floating point overflow in expression" ! msgstr "" #. This detects cases like converting -129 or 256 to unsigned char. ! #: c-common.c:2609 msgid "large integer implicitly truncated to unsigned type" ! msgstr "" ! #: c-common.c:2611 msgid "negative integer implicitly converted to unsigned type" ! msgstr "" ! #: c-common.c:2644 msgid "overflow in implicit constant conversion" ! msgstr "" ! #: c-common.c:2665 msgid "expression statement has incomplete type" ! msgstr "" ! #: c-common.c:2697 msgid "case label does not reduce to an integer constant" ! msgstr "" ! #: c-common.c:2967 msgid "invalid truth-value expression" ! msgstr "" ! #: c-common.c:3018 #, c-format msgid "invalid operands to binary %s" ! msgstr "" ! #: c-common.c:3253 c-common.c:3262 msgid "comparison is always false due to limited range of data type" msgstr "" ! #: c-common.c:3255 c-common.c:3264 msgid "comparison is always true due to limited range of data type" msgstr "" ! #: c-common.c:3330 msgid "comparison of unsigned expression >= 0 is always true" ! msgstr "" ! #: c-common.c:3339 msgid "comparison of unsigned expression < 0 is always false" ! msgstr "" ! #: c-common.c:3390 msgid "struct type value used where scalar is required" ! msgstr "" ! #: c-common.c:3394 msgid "union type value used where scalar is required" ! msgstr "" ! #: c-common.c:3398 msgid "array type value used where scalar is required" ! msgstr "" ! #: c-common.c:3513 msgid "suggest parentheses around assignment used as truth value" ! msgstr "" ! #: c-common.c:3638 c-common.c:3670 msgid "invalid use of `restrict'" msgstr "ogiltigt användande av \"restrict\"" ! #: c-common.c:4372 c-typeck.c:1741 #, c-format msgid "too few arguments to function `%s'" msgstr "för få argument till funktionen \"%s\"" ! #: c-common.c:4378 c-typeck.c:1600 #, c-format msgid "too many arguments to function `%s'" msgstr "för många argument till funktionen \"%s\"" ! #: c-convert.c:78 c-typeck.c:940 c-typeck.c:4037 cp/typeck.c:1729 ! #: cp/typeck.c:6431 msgid "void value not ignored as it ought to be" ! msgstr "" ! #: c-convert.c:100 msgid "conversion to non-scalar type requested" ! msgstr "" ! #: c-decl.c:606 #, c-format msgid "unknown C standard `%s'" msgstr "okänd C-standard \"%s\"" ! #: c-decl.c:875 #, c-format msgid "array `%s' assumed to have one element" ! msgstr "" ! #: c-decl.c:1051 #, c-format msgid "`struct %s' incomplete in scope ending here" ! msgstr "" ! #: c-decl.c:1054 #, c-format msgid "`union %s' incomplete in scope ending here" ! msgstr "" ! #: c-decl.c:1057 #, c-format msgid "`enum %s' incomplete in scope ending here" ! msgstr "" ! #: c-decl.c:1171 c-decl.c:1331 #, c-format msgid "label `%s' used but not defined" ! msgstr "" ! #: c-decl.c:1177 c-decl.c:1338 #, c-format msgid "label `%s' defined but not used" ! msgstr "" ! #: c-decl.c:1460 c-decl.c:1513 #, c-format msgid "shadowing built-in function `%s'" ! msgstr "" ! #: c-decl.c:1462 #, c-format msgid "shadowing library function `%s'" ! msgstr "" ! #: c-decl.c:1468 #, c-format msgid "library function `%s' declared as non-function" ! msgstr "" ! #: c-decl.c:1472 c-decl.c:1475 #, c-format msgid "built-in function `%s' declared as non-function" ! msgstr "" ! #: c-decl.c:1479 objc/objc-act.c:2490 objc/objc-act.c:6161 #, c-format msgid "`%s' redeclared as different kind of symbol" ! msgstr "" ! #: c-decl.c:1480 c-decl.c:1658 c-decl.c:1805 objc/objc-act.c:2492 ! #: objc/objc-act.c:6163 objc/objc-act.c:6218 #, c-format msgid "previous declaration of `%s'" ! msgstr "" #. If types don't match for a built-in, throw away the built-in. ! #: c-decl.c:1562 #, c-format msgid "conflicting types for built-in function `%s'" ! msgstr "" ! #: c-decl.c:1605 c-decl.c:1624 #, c-format msgid "conflicting types for `%s'" ! msgstr "" ! #: c-decl.c:1647 msgid "" "A parameter list with an ellipsis can't match an empty parameter name list " "declaration." msgstr "" ! #: c-decl.c:1653 msgid "" "An argument type that has a default promotion can't match an empty parameter " "name list declaration." msgstr "" ! #: c-decl.c:1668 c-decl.c:1690 #, c-format msgid "redefinition of `%s'" ! msgstr "" ! #: c-decl.c:1671 #, c-format msgid "redeclaration of `%s'" ! msgstr "" ! #: c-decl.c:1674 #, c-format msgid "conflicting declarations of `%s'" ! msgstr "" ! #: c-decl.c:1683 c-decl.c:1695 #, c-format msgid "`%s' previously defined here" ! msgstr "" ! #: c-decl.c:1684 c-decl.c:1696 #, c-format msgid "`%s' previously declared here" ! msgstr "" ! #: c-decl.c:1717 #, c-format msgid "prototype for `%s' follows" ! msgstr "" ! #: c-decl.c:1718 c-decl.c:1726 c-decl.c:1742 msgid "non-prototype definition here" ! msgstr "" ! #: c-decl.c:1725 #, c-format msgid "prototype for `%s' follows and number of arguments doesn't match" ! msgstr "" ! #: c-decl.c:1740 #, c-format msgid "prototype for `%s' follows and argument %d doesn't match" ! msgstr "" ! #: c-decl.c:1757 #, c-format msgid "`%s' declared inline after being called" ! msgstr "" ! #: c-decl.c:1762 #, c-format msgid "`%s' declared inline after its definition" ! msgstr "" ! #: c-decl.c:1769 #, c-format msgid "static declaration for `%s' follows non-static" ! msgstr "" ! #: c-decl.c:1777 #, c-format msgid "non-static declaration for `%s' follows static" ! msgstr "" ! #: c-decl.c:1784 #, c-format msgid "const declaration for `%s' follows non-const" ! msgstr "" ! #: c-decl.c:1791 #, c-format msgid "type qualifiers for `%s' conflict with previous decl" ! msgstr "" ! #: c-decl.c:1804 #, c-format msgid "redundant redeclaration of `%s' in same scope" ! msgstr "" ! #: c-decl.c:2074 #, c-format msgid "nested extern declaration of `%s'" ! msgstr "" ! #: c-decl.c:2099 #, c-format msgid "`%s' used prior to declaration" ! msgstr "" ! #: c-decl.c:2120 c-decl.c:2335 #, c-format msgid "`%s' was declared implicitly `extern' and later `static'" ! msgstr "" ! #: c-decl.c:2230 msgid "type mismatch with previous external decl" ! msgstr "" ! #: c-decl.c:2231 #, c-format msgid "previous external decl of `%s'" ! msgstr "" ! #: c-decl.c:2244 msgid "type mismatch with previous implicit declaration" ! msgstr "" ! #: c-decl.c:2246 #, c-format msgid "previous implicit declaration of `%s'" ! msgstr "" ! #: c-decl.c:2263 #, c-format msgid "type of external `%s' is not global" ! msgstr "" ! #: c-decl.c:2314 #, c-format msgid "`%s' was previously implicitly declared to return `int'" ! msgstr "" ! #: c-decl.c:2339 #, c-format msgid "`%s' was declared `extern' and later `static'" ! msgstr "" ! #: c-decl.c:2362 #, c-format msgid "extern declaration of `%s' doesn't match global one" ! msgstr "" ! #: c-decl.c:2402 #, c-format msgid "`%s' locally external but globally static" ! msgstr "" ! #: c-decl.c:2438 c-decl.c:2463 cp/decl.c:4231 #, c-format msgid "declaration of `%s' shadows a parameter" ! msgstr "" ! #: c-decl.c:2441 #, c-format msgid "declaration of `%s' shadows a symbol from the parameter list" ! msgstr "" ! #: c-decl.c:2465 cp/decl.c:4239 #, c-format msgid "declaration of `%s' shadows previous local" ! msgstr "" #. XXX shadow warnings in outer-more namespaces ! #: c-decl.c:2468 cp/decl.c:4243 #, c-format msgid "declaration of `%s' shadows global declaration" ! msgstr "" ! #: c-decl.c:2558 #, c-format msgid "function `%s' was previously declared within a block" ! msgstr "" ! #: c-decl.c:2575 c-decl.c:2577 #, c-format msgid "implicit declaration of function `%s'" ! msgstr "" ! #: c-decl.c:2664 #, c-format msgid "label %s referenced outside of any function" ! msgstr "" ! #: c-decl.c:2724 #, c-format msgid "duplicate label declaration `%s'" ! msgstr "" ! #: c-decl.c:2727 msgid "this is a previous declaration" ! msgstr "" ! #: c-decl.c:3357 msgid "unnamed struct/union that defines no instances" ! msgstr "" ! #: c-decl.c:3376 msgid "useless keyword or type name in empty declaration" ! msgstr "" ! #: c-decl.c:3383 msgid "two types specified in one empty declaration" ! msgstr "" ! #: c-decl.c:3388 c-parse.y:300 c-parse.y:720 c-parse.y:722 c-parse.y:779 ! #: objc-parse.y:329 objc-parse.y:772 objc-parse.y:774 objc-parse.y:831 ! #: objc-parse.y:2510 parse.y:701 parse.y:1760 msgid "empty declaration" msgstr "tom deklaration" ! #: c-decl.c:3445 #, c-format msgid "`%s' is usually a function" msgstr "\"%s\" är vanligtvis en funktion" ! #: c-decl.c:3459 #, c-format msgid "typedef `%s' is initialized" ! msgstr "" ! #: c-decl.c:3466 #, c-format msgid "function `%s' is initialized like a variable" ! msgstr "" #. DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE. ! #: c-decl.c:3473 #, c-format msgid "parameter `%s' is initialized" ! msgstr "" ! #: c-decl.c:3488 c-typeck.c:4758 msgid "variable-sized object may not be initialized" ! msgstr "" ! #: c-decl.c:3494 #, c-format msgid "variable `%s' has initializer but incomplete type" ! msgstr "" ! #: c-decl.c:3500 #, c-format msgid "elements of array `%s' have incomplete type" ! msgstr "" ! #: c-decl.c:3513 #, c-format msgid "declaration of `%s' has `extern' and is initialized" ! msgstr "" ! #: c-decl.c:3625 #, c-format msgid "initializer fails to determine size of `%s'" ! msgstr "" ! #: c-decl.c:3630 #, c-format msgid "array size missing in `%s'" ! msgstr "" ! #: c-decl.c:3646 #, c-format msgid "zero or negative size array `%s'" ! msgstr "" ! #: c-decl.c:3671 #, c-format msgid "storage size of `%s' isn't known" ! msgstr "" ! #: c-decl.c:3681 #, c-format msgid "storage size of `%s' isn't constant" ! msgstr "" ! #: c-decl.c:3781 #, c-format msgid "ANSI C forbids parameter `%s' shadowing typedef" ! msgstr "" ! #: c-decl.c:4015 cp/decl.c:10230 msgid "`long long long' is too long for GCC" msgstr "\"long long long\" är för långt för GCC" ! #: c-decl.c:4020 msgid "ISO C89 does not support `long long'" msgstr "ISO C89 stödjer inte \"long long\"'" ! #: c-decl.c:4025 cp/decl.c:10235 #, c-format msgid "duplicate `%s'" ! msgstr "" ! #: c-decl.c:4031 cp/decl.c:10255 #, c-format msgid "two or more data types in declaration of `%s'" ! msgstr "" ! #: c-decl.c:4046 cp/decl.c:10260 #, c-format msgid "`%s' fails to be a typedef or built in type" msgstr "" ! #: c-decl.c:4112 #, c-format ! msgid "both long and short specified for `%s'" msgstr "" ! #: c-decl.c:4116 cp/decl.c:10360 #, c-format msgid "long or short specified with char for `%s'" ! msgstr "" ! #: c-decl.c:4123 cp/decl.c:10364 #, c-format msgid "long or short specified with floating type for `%s'" ! msgstr "" ! #: c-decl.c:4126 msgid "the only valid combination is `long double'" msgstr "den enda giltiga kombinationen är \"long double\"" ! #: c-decl.c:4132 #, c-format msgid "both signed and unsigned specified for `%s'" msgstr "både signed och unsigned specificerat för \"%s\"" ! #: c-decl.c:4134 cp/decl.c:10353 #, c-format msgid "long, short, signed or unsigned invalid for `%s'" ! msgstr "" ! #: c-decl.c:4140 cp/decl.c:10373 #, c-format msgid "long, short, signed or unsigned used invalidly for `%s'" ! msgstr "" ! #: c-decl.c:4159 cp/decl.c:10394 #, c-format msgid "complex invalid for `%s'" ! msgstr "" ! #: c-decl.c:4235 c-decl.c:4591 cp/decl.c:10993 msgid "duplicate `const'" ! msgstr "" ! #: c-decl.c:4237 c-decl.c:4595 cp/decl.c:10997 msgid "duplicate `restrict'" ! msgstr "" ! #: c-decl.c:4239 c-decl.c:4593 cp/decl.c:10995 msgid "duplicate `volatile'" ! msgstr "" ! #: c-decl.c:4261 cp/decl.c:10543 #, c-format msgid "multiple storage classes in declaration of `%s'" ! msgstr "" ! #: c-decl.c:4270 msgid "function definition declared `auto'" ! msgstr "" ! #: c-decl.c:4272 msgid "function definition declared `register'" ! msgstr "" ! #: c-decl.c:4274 msgid "function definition declared `typedef'" ! msgstr "" ! #: c-decl.c:4287 #, c-format msgid "storage class specified for structure field `%s'" ! msgstr "" ! #: c-decl.c:4291 cp/decl.c:10590 #, c-format msgid "storage class specified for parameter `%s'" ! msgstr "" ! #: c-decl.c:4294 cp/decl.c:10592 msgid "storage class specified for typename" ! msgstr "" ! #: c-decl.c:4306 cp/decl.c:10606 #, c-format msgid "`%s' initialized and declared `extern'" ! msgstr "" ! #: c-decl.c:4308 cp/decl.c:10609 #, c-format msgid "`%s' has both `extern' and initializer" ! msgstr "" ! #: c-decl.c:4312 cp/decl.c:10613 #, c-format msgid "nested function `%s' declared `extern'" ! msgstr "" ! #: c-decl.c:4315 cp/decl.c:10617 #, c-format msgid "top-level declaration of `%s' specifies `auto'" msgstr "" ! #: c-decl.c:4357 #, c-format msgid "declaration of `%s' as array of voids" ! msgstr "" ! #: c-decl.c:4363 #, c-format msgid "declaration of `%s' as array of functions" ! msgstr "" ! #: c-decl.c:4385 #, c-format msgid "size of array `%s' has non-integer type" ! msgstr "" ! #: c-decl.c:4390 #, c-format msgid "ISO C forbids zero-size array `%s'" ! msgstr "" ! #: c-decl.c:4397 #, c-format msgid "size of array `%s' is negative" ! msgstr "" ! #: c-decl.c:4410 #, c-format msgid "ISO C89 forbids array `%s' whose size can't be evaluated" ! msgstr "" ! #: c-decl.c:4413 #, c-format msgid "ISO C89 forbids variable-size array `%s'" ! msgstr "" ! #: c-decl.c:4431 c-decl.c:4616 #, c-format msgid "size of array `%s' is too large" msgstr "fältet \"%s\" är för stort" ! #: c-decl.c:4451 msgid "array type has incomplete element type" ! msgstr "" ! #: c-decl.c:4459 msgid "ANSI C forbids const or volatile function types" ! msgstr "" ! #: c-decl.c:4495 cp/decl.c:10753 #, c-format msgid "`%s' declared as function returning a function" ! msgstr "" ! #: c-decl.c:4500 cp/decl.c:10758 #, c-format msgid "`%s' declared as function returning an array" msgstr "" ! #: c-decl.c:4549 c-decl.c:4627 c-decl.c:4711 c-decl.c:4798 msgid "ISO C forbids qualified function types" msgstr "" ! #: c-decl.c:4589 cp/decl.c:10989 msgid "invalid type modifier within pointer declarator" msgstr "" ! #: c-decl.c:4661 msgid "ISO C forbids const or volatile function types" msgstr "" ! #: c-decl.c:4680 cp/decl.c:11476 #, c-format msgid "variable or field `%s' declared void" msgstr "" ! #: c-decl.c:4745 #, c-format msgid "field `%s' declared as a function" ! msgstr "" ! #: c-decl.c:4751 #, c-format msgid "field `%s' has incomplete type" ! msgstr "" ! #: c-decl.c:4783 c-decl.c:4785 c-decl.c:4792 #, c-format msgid "invalid storage class for function `%s'" ! msgstr "" ! ! #: c-decl.c:4804 ! msgid "ISO C forbids qualified void function return type" ! msgstr "" ! #: c-decl.c:4810 msgid "`noreturn' function returns non-void value" ! msgstr "" ! #: c-decl.c:4822 msgid "cannot inline function `main'" ! msgstr "" ! #: c-decl.c:4853 #, c-format msgid "variable `%s' declared `inline'" ! msgstr "" ! #: c-decl.c:4924 c-decl.c:5878 msgid "function declaration isn't a prototype" ! msgstr "" ! #: c-decl.c:4930 cp/decl.c:12167 msgid "parameter names (without types) in function declaration" msgstr "" ! #: c-decl.c:4960 c-decl.c:6263 c-decl.c:6552 cp/decl.c:11986 #, c-format msgid "parameter `%s' has incomplete type" ! msgstr "" ! #: c-decl.c:4963 cp/decl.c:11989 msgid "parameter has incomplete type" ! msgstr "" ! #: c-decl.c:4984 #, c-format msgid "parameter `%s' points to incomplete type" ! msgstr "" ! #: c-decl.c:4987 msgid "parameter points to incomplete type" ! msgstr "" ! #: c-decl.c:5052 #, c-format msgid "parameter `%s' has just a forward declaration" msgstr "" ! #: c-decl.c:5094 msgid "`void' in parameter list must be the entire list" ! msgstr "" ! #: c-decl.c:5123 #, c-format msgid "`%s %s' declared inside parameter list" ! msgstr "" ! #: c-decl.c:5132 msgid "anonymous struct declared inside parameter list" ! msgstr "" ! #: c-decl.c:5134 msgid "anonymous union declared inside parameter list" ! msgstr "" ! #: c-decl.c:5136 msgid "anonymous enum declared inside parameter list" ! msgstr "" ! #: c-decl.c:5140 msgid "" "its scope is only this definition or declaration, which is probably not what " "you want." msgstr "" ! #: c-decl.c:5175 ! msgid "ISO C forbids forward references to `enum' types" ! msgstr "" ! ! #: c-decl.c:5213 #, c-format msgid "redefinition of `%s %s'" ! msgstr "" ! #: c-decl.c:5280 c-decl.c:5283 #, c-format msgid "%s defined inside parms" msgstr "" ! #: c-decl.c:5281 c-decl.c:5284 c-decl.c:5295 msgid "union" ! msgstr "" ! #: c-decl.c:5281 c-decl.c:5284 msgid "structure" ! msgstr "" ! #: c-decl.c:5294 #, c-format msgid "%s has no %s" ! msgstr "" ! #: c-decl.c:5295 msgid "struct" ! msgstr "" ! #: c-decl.c:5296 msgid "named members" ! msgstr "" ! #: c-decl.c:5296 msgid "members" ! msgstr "" ! #: c-decl.c:5334 #, c-format msgid "nested redefinition of `%s'" ! msgstr "" ! #: c-decl.c:5347 #, c-format msgid "bit-field `%s' width not an integer constant" msgstr "" ! #: c-decl.c:5357 #, c-format msgid "bit-field `%s' has invalid type" ! msgstr "" ! #: c-decl.c:5368 #, c-format msgid "bit-field `%s' type invalid in ISO C" ! msgstr "" ! #: c-decl.c:5375 #, c-format msgid "negative width in bit-field `%s'" ! msgstr "" ! #: c-decl.c:5378 #, c-format msgid "width of `%s' exceeds its type" ! msgstr "" ! #: c-decl.c:5380 #, c-format msgid "zero width for bit-field `%s'" ! msgstr "" ! #: c-decl.c:5394 #, c-format msgid "`%s' is narrower than values of its type" msgstr "" ! #: c-decl.c:5451 #, c-format msgid "duplicate member `%s'" ! msgstr "" ! #: c-decl.c:5495 msgid "union cannot be made transparent" msgstr "" #. This enum is a named one that has been declared already. ! #: c-decl.c:5576 #, c-format msgid "redeclaration of `enum %s'" msgstr "" ! #: c-decl.c:5610 msgid "enum defined inside parms" msgstr "" ! #: c-decl.c:5642 msgid "enumeration values exceed range of largest integer" msgstr "" ! #: c-decl.c:5746 #, c-format msgid "enumerator value for `%s' not integer constant" ! msgstr "" ! #: c-decl.c:5759 msgid "overflow in enumeration values" ! msgstr "" ! #: c-decl.c:5764 msgid "ISO C restricts enumerator values to range of `int'" ! msgstr "" ! #: c-decl.c:5835 msgid "return type is an incomplete type" ! msgstr "" ! #: c-decl.c:5884 #, c-format msgid "no previous prototype for `%s'" ! msgstr "" ! #: c-decl.c:5891 #, c-format msgid "`%s' was used with no prototype before its definition" ! msgstr "" ! #: c-decl.c:5897 #, c-format msgid "no previous declaration for `%s'" ! msgstr "" ! #: c-decl.c:5904 #, c-format msgid "`%s' was used with no declaration before its definition" ! msgstr "" ! #: c-decl.c:5932 c-decl.c:6639 #, c-format msgid "return type of `%s' is not `int'" ! msgstr "" ! #: c-decl.c:5948 #, c-format msgid "first argument of `%s' should be `int'" ! msgstr "" ! #: c-decl.c:5957 #, c-format msgid "second argument of `%s' should be `char **'" ! msgstr "" ! #: c-decl.c:5966 #, c-format msgid "third argument of `%s' should probably be `char **'" ! msgstr "" ! #: c-decl.c:5975 #, c-format msgid "`%s' takes only zero or two arguments" ! msgstr "" ! ! #: c-decl.c:5978 ! #, c-format ! msgid "third argument of `%s' is deprecated" ! msgstr "" ! #: c-decl.c:5981 #, c-format msgid "`%s' is normally a non-static function" ! msgstr "" ! #: c-decl.c:6081 msgid "parm types given both in parmlist and separately" msgstr "" ! #: c-decl.c:6102 msgid "parameter name omitted" ! msgstr "" ! #: c-decl.c:6106 c-decl.c:6208 c-decl.c:6509 #, c-format msgid "parameter `%s' declared void" ! msgstr "" ! #: c-decl.c:6182 msgid "parameter name missing from parameter list" ! msgstr "" ! #: c-decl.c:6201 c-decl.c:6502 #, c-format msgid "multiple parameters named `%s'" ! msgstr "" ! #: c-decl.c:6232 c-decl.c:6234 #, c-format msgid "type of `%s' defaults to `int'" ! msgstr "" ! #: c-decl.c:6270 c-decl.c:6559 #, c-format msgid "declaration for parameter `%s' but no such parameter" ! msgstr "" ! #: c-decl.c:6318 msgid "number of arguments doesn't match prototype" ! msgstr "" ! #: c-decl.c:6347 #, c-format msgid "promoted argument `%s' doesn't match prototype" msgstr "" ! #: c-decl.c:6361 #, c-format msgid "argument `%s' doesn't match prototype" ! msgstr "" ! #: c-decl.c:6532 #, c-format msgid "type of parameter `%s' is not declared" msgstr "" ! #: c-decl.c:6677 ! msgid "function might be possible candidate for attribute `noreturn'" msgstr "" ! #: c-decl.c:6680 cp/decl.c:14665 ! msgid "`noreturn' function does return" msgstr "" ! #. If this function returns non-void and control can drop through, ! #. complain. ! #: c-decl.c:6685 cp/decl.c:14675 ! msgid "control reaches end of non-void function" ! msgstr "Programflödet når slutet på en icke-void funktion" ! #: c-decl.c:6690 ! msgid "this function may return with or without a value" msgstr "" ! #: c-decl.c:6709 #, c-format ! msgid "size of return value of `%s' is %u bytes" msgstr "" ! #: c-decl.c:6713 #, c-format ! msgid "size of return value of `%s' is larger than %d bytes" msgstr "" ! #: c-decl.c:6954 ! msgid "ISO C forbids case ranges" msgstr "" ! #: c-decl.c:6963 ! msgid "label must have integral type in ISO C" msgstr "" ! #: c-decl.c:6976 ! msgid "default label not within a switch statement" msgstr "" ! #: c-decl.c:6978 cp/decl.c:5249 ! msgid "case label not within a switch statement" msgstr "" ! #: c-decl.c:6984 cp/decl.c:5372 ! msgid "multiple default labels in one switch" msgstr "" ! #: c-decl.c:6985 ! msgid "this is the first default label" msgstr "" ! #: c-decl.c:6988 ! msgid "duplicate case value" msgstr "" ! #: c-decl.c:6991 ! msgid "this is the first entry for that value" msgstr "" ! #: c-decl.c:6996 ! msgid "case value out of range" msgstr "" ! #: c-decl.c:6998 ! msgid "case label within scope of cleanup or variable array" msgstr "" ! #: c-lex.c:333 ! msgid "stray '\\' in program" msgstr "" ! #: c-lex.c:395 c-lex.c:514 ! msgid "invalid #-line" msgstr "" ! #: c-lex.c:499 #, c-format ! msgid "undefined or invalid # directive `%s'" msgstr "" ! #: c-lex.c:550 ! msgid "invalid #line" msgstr "" ! #: c-lex.c:627 c-lex.c:743 ! msgid "badly nested C headers from preprocessor" msgstr "" ! #: c-lex.c:645 ! msgid "#-lines for entering and leaving files don't match" msgstr "" ! #: c-lex.c:786 c-pragma.c:425 #, c-format ! msgid "ignoring #pragma %s %s" msgstr "" ! #: c-lex.c:788 c-pragma.c:427 #, c-format ! msgid "ignoring #pragma %s" msgstr "" ! #: c-lex.c:821 ! msgid "incomplete universal-character-name" msgstr "" ! #: c-lex.c:828 #, c-format ! msgid "non hex digit '%c' in universal-character-name" msgstr "" ! #: c-lex.c:843 ! msgid "universal-character-name on EBCDIC target" msgstr "" ! #: c-lex.c:856 #, c-format ! msgid "universal-character-name used for '%c'" msgstr "" ! #: c-lex.c:859 ! msgid "invalid universal-character-name" msgstr "" ! #: c-lex.c:893 ! msgid "the meaning of `\\x' varies with -traditional" msgstr "" ! #: c-lex.c:929 cppexp.c:522 ! msgid "\\x used with no following hex digits" msgstr "" ! #: c-lex.c:942 ! msgid "hex escape out of range" msgstr "" ! #: c-lex.c:980 ! msgid "the meaning of '\\a' varies with -traditional" msgstr "" ! #: c-lex.c:990 #, c-format ! msgid "the meaning of '\\%c' varies with -traditional" msgstr "" ! #: c-lex.c:996 cppexp.c:470 #, c-format ! msgid "non-ISO-standard escape sequence, '\\%c'" msgstr "" ! #: c-lex.c:1003 c-lex.c:1009 #, c-format ! msgid "unknown escape sequence '\\%c'" msgstr "" ! #: c-lex.c:1011 #, c-format ! msgid "unknown escape sequence: '\\' followed by char 0x%.2x" msgstr "" ! #: c-lex.c:1041 #, c-format ! msgid "universal-character-name '\\U%08x' not valid in identifier" msgstr "" ! #: c-lex.c:1287 #, c-format ! msgid "universal-character-name '\\u%04x' not valid in identifier" msgstr "" ! #: c-lex.c:1377 ! msgid "both 'f' and 'l' suffixes on floating constant" msgstr "" ! #: c-lex.c:1404 #, c-format ! msgid "floating point number exceeds range of '%s'" msgstr "" ! #: c-lex.c:1442 c-lex.c:1853 #, c-format ! msgid "stray '%c' in program" msgstr "" ! #: c-lex.c:1444 c-lex.c:1855 #, c-format ! msgid "stray '\\%#o' in program" msgstr "" ! #: c-lex.c:1578 c-lex.c:1580 ! msgid "'$' in identifier" ! msgstr "'$' i en identifierare" ! #: c-lex.c:1612 ! msgid "parse error at '..'" msgstr "" ! #: c-lex.c:1927 msgid "floating constant may not be in radix 16" msgstr "" ! #: c-lex.c:2059 msgid "traditional C rejects the 'f' suffix" ! msgstr "" ! #: c-lex.c:2068 msgid "traditional C rejects the 'l' suffix" ! msgstr "" ! #: c-lex.c:2078 c-lex.c:2171 msgid "ISO C forbids imaginary numeric constants" ! msgstr "" ! #: c-lex.c:2112 msgid "floating point number exceeds range of 'double'" ! msgstr "" ! #: c-lex.c:2141 msgid "two 'u' suffixes on integer constant" ! msgstr "" ! #: c-lex.c:2143 msgid "traditional C rejects the 'u' suffix" ! msgstr "" ! #: c-lex.c:2154 msgid "three 'l' suffixes on integer constant" ! msgstr "" ! #: c-lex.c:2156 msgid "'lul' is not a valid integer suffix" ! msgstr "" ! #: c-lex.c:2158 msgid "'Ll' and 'lL' are not valid integer suffixes" ! msgstr "" ! #: c-lex.c:2161 msgid "ISO C89 forbids long long integer constants" msgstr "ISO C89 förbjuder long long integer konstanter" ! #: c-lex.c:2169 msgid "more than one 'i' or 'j' suffix on integer constant" ! msgstr "" ! #: c-lex.c:2184 #, c-format msgid "" "integer constant is too large for this configuration of the compiler - " "truncated to %d bits" msgstr "" ! #: c-lex.c:2274 msgid "width of integer constant changes with -traditional" msgstr "" ! #: c-lex.c:2276 msgid "integer constant is unsigned in ISO C, signed with -traditional" ! msgstr "" ! #: c-lex.c:2278 msgid "width of integer constant may change on other systems with -traditional" msgstr "" ! #: c-lex.c:2285 ! msgid "integer constant larger than the maximum value of an unsigned long int" ! msgstr "" ! #: c-lex.c:2289 msgid "decimal constant is so large that it is unsigned" ! msgstr "" ! #: c-lex.c:2318 msgid "integer constant is larger than the maximum value for its type" ! msgstr "" ! #: c-lex.c:2322 #, c-format msgid "missing white space after number '%.*s'" ! msgstr "" ! #: c-lex.c:2358 c-lex.c:2462 msgid "Ignoring invalid multibyte character" ! msgstr "" ! ! #: c-lex.c:2376 c-lex.c:2481 cppexp.c:271 ! msgid "escape sequence out of range for character" ! msgstr "" ! ! #: c-lex.c:2500 ! msgid "empty character constant" ! msgstr "" ! ! #: c-lex.c:2504 ! msgid "character constant too long" ! msgstr "" ! ! #: c-lex.c:2507 cppexp.c:289 ! msgid "multi-character character constant" ! msgstr "" #. Like YYERROR but do call yyerror. ! #: c-parse.y:64 objc-parse.y:65 parse.y:55 msgid "syntax error" ! msgstr "" ! ! #: /usr/share/bison.simple:107 ! msgid "syntax error: cannot back up" ! msgstr "" ! ! #: /usr/share/bison.simple:362 ! msgid "parser stack overflow" ! msgstr "" ! #: c-parse.y:244 objc-parse.y:272 msgid "ISO C forbids an empty source file" ! msgstr "" ! #: c-parse.y:276 c-parse.y:1758 objc-parse.y:305 objc-parse.y:1822 msgid "argument of `asm' is not a constant string" ! msgstr "" ! #: c-parse.y:284 objc-parse.y:313 msgid "ISO C forbids data definition with no type or storage class" ! msgstr "" ! #: c-parse.y:286 objc-parse.y:315 msgid "data definition has no type or storage class" ! msgstr "" ! #: c-parse.y:307 objc-parse.y:336 msgid "ISO C does not allow extra `;' outside of a function" ! msgstr "" ! #: c-parse.y:373 cppexp.c:842 msgid "traditional C rejects the unary plus operator" ! msgstr "" ! ! #: c-parse.y:417 objc-parse.y:446 ! msgid "ISO C forbids `&&'" ! msgstr "" ! #: c-parse.y:446 objc-parse.y:475 msgid "`sizeof' applied to a bit-field" ! msgstr "" ! ! #: c-parse.y:496 objc-parse.y:525 ! msgid "ISO C89 forbids constructor expressions" ! msgstr "" ! #: c-parse.y:565 objc-parse.y:594 msgid "ISO C forbids omitting the middle term of a ?: expression" msgstr "" ! #: c-parse.y:613 objc-parse.y:642 msgid "ISO C forbids braced-groups within expressions" msgstr "" ! #: c-parse.y:672 msgid "traditional C rejects string concatenation" ! msgstr "" ! #: c-parse.y:687 objc-parse.y:739 msgid "ISO C does not permit use of `varargs.h'" ! msgstr "" ! #: c-parse.y:802 c-parse.y:823 c-parse.y:855 objc-parse.y:854 objc-parse.y:875 ! #: objc-parse.y:907 parse.y:1840 parse.y:1847 parse.y:1886 #, c-format msgid "`%s' is not at beginning of declaration" ! msgstr "" ! #: c-parse.y:1019 objc-parse.y:1080 msgid "ISO C forbids empty initializer braces" msgstr "" ! #: c-parse.y:1069 c-parse.y:1095 objc-parse.y:1126 objc-parse.y:1152 ! msgid "ISO C forbids nested functions" msgstr "" ! #: c-parse.y:1166 c-parse.y:1200 ! msgid "`[*]' in parameter declaration only allowed in ISO C 99" msgstr "" ! #: c-parse.y:1283 objc-parse.y:1331 parse.y:2300 msgid "comma at end of enumerator list" ! msgstr "" ! #: c-parse.y:1291 objc-parse.y:1339 msgid "no semicolon at end of struct or union" ! msgstr "" ! #: c-parse.y:1300 objc-parse.y:1348 objc-parse.y:2295 msgid "extra semicolon in struct or union specified" ! msgstr "" ! #: c-parse.y:1324 objc-parse.y:1386 msgid "ISO C doesn't support unnamed structs/unions" ! msgstr "" ! #: c-parse.y:1338 objc-parse.y:1400 msgid "ISO C forbids member declarations with no members" msgstr "" ! #: c-parse.y:1452 objc-parse.y:1514 ! msgid "ISO C forbids label at end of compound statement" msgstr "" ! #: c-parse.y:1486 objc-parse.y:1550 msgid "ISO C forbids label declarations" msgstr "" ! #: c-parse.y:1536 objc-parse.y:1600 parse.y:1542 msgid "braced-group within expression allowed only inside a function" msgstr "" ! #: c-parse.y:1650 objc-parse.y:1714 msgid "empty body in an else-statement" ! msgstr "" ! #: c-parse.y:1794 objc-parse.y:1858 msgid "ISO C forbids `goto *expr;'" ! msgstr "" ! #: c-parse.y:1884 objc-parse.y:1948 msgid "ISO C forbids forward parameter declarations" msgstr "" --- 24,2178 ---- #. port (i860) that used this code, and I'm unconvinced it could actually #. handle the general case. So we no longer try to handle anything #. weird and make the backend absorb the evil. ! #: builtins.c:2635 msgid "__builtin_saveregs not supported by this target" msgstr "__builtin_saveregs stöds inte på denna målarkitektur" ! #: builtins.c:2678 msgid "argument of `__builtin_args_info' must be constant" msgstr "argumentet till \"__builtin_args_info\" måste vara konstant" ! #: builtins.c:2684 msgid "argument of `__builtin_args_info' out of range" msgstr "argument till \"__builtin_args_info\" är utanför sitt intervall" ! #: builtins.c:2690 msgid "missing argument in `__builtin_args_info'" msgstr "argument saknas till \"__builtin_args_info\"" ! #: builtins.c:2721 msgid "`va_start' used in function with fixed args" msgstr "\"va_start\" används i en funktion med fixt antal parametrar" ! #: builtins.c:2740 msgid "second parameter of `va_start' not last named argument" msgstr "" "andra parametern till \"va_start\" var inte det sista namngivna argumentet" #. Evidently an out of date version of ; can't validate #. va_start's second argument, but can still work as intended. ! #: builtins.c:2745 msgid "`__builtin_next_arg' called without an argument" msgstr "\"__builtin_next_arg\" anropad utan argument" ! #: builtins.c:2847 msgid "too many arguments to function `va_start'" msgstr "För många argument till funktionen \"va_start\"" ! #: builtins.c:2933 msgid "first argument to `va_arg' not of type `va_list'" msgstr "första argumentet till \"va_arg\" är inte av typen \"va_list\"" ! #: builtins.c:2961 #, c-format msgid "`%s' is promoted to `%s' when passed through `...'" msgstr "\"%s\" konverteras till \"%s\" när det skickas via \"...\"" ! #: builtins.c:2965 #, c-format msgid "(so you should pass `%s' not `%s' to `va_arg')" msgstr "(alltså skall du skicka \"%s\" och inte \"%s\" till \"va_arg\")" ! #: builtins.c:3074 msgid "invalid arg to `__builtin_frame_address'" msgstr "ogiltigt argument till \"__builtin_frame_address\"" ! #: builtins.c:3076 msgid "invalid arg to `__builtin_return_address'" msgstr "ogiltigt argument till \"__builtin_return_address\"" ! #: builtins.c:3089 msgid "unsupported arg to `__builtin_frame_address'" msgstr "Icke supportat argument till \"__builtin_frame_address\"" ! #: builtins.c:3091 msgid "unsupported arg to `__builtin_return_address'" msgstr "Icke supportat argument till \"__builtin_return_address\"" ! #: builtins.c:3254 msgid "second arg to `__builtin_expect' must be a constant" msgstr "andra argumentet till \"__builtin_expect\" måste vara en konstant" ! #: builtins.c:3584 msgid "__builtin_longjmp second argument must be 1" msgstr "andra argumentet till __builtin_longjmp måste vara 1" ! #: builtins.c:3598 msgid "__builtin_trap not supported by this target" msgstr "__builtin_trap stöds inte på denna målarkitektur" #. just do library call, if unknown builtin ! #: builtins.c:3650 c-common.c:4044 #, c-format msgid "built-in function `%s' not currently supported" msgstr "inbyggd funktion \"%s\" stöds inte för närvarande" ! #: c-common.c:509 ! #, c-format ! msgid "`%s' is not defined outside of function scope" ! msgstr "" ! ! #: c-common.c:614 #, c-format msgid "" ! "string length `%d' is greater than the length `%d' ISO C%d compilers are " "required to support" msgstr "" "stränglängden \"%d\" är större än den minsta längden \"%d\" som ISO C%d " ! "kompilatorer behöver stödja" ! #: c-common.c:779 #, c-format msgid "`%s' attribute directive ignored" msgstr "attributet \"%s\" ignorerat" ! #: c-common.c:787 #, c-format msgid "`%s' attribute does not apply to types" msgstr "attributet \"%s\" är inte applicerbart på typer" ! #: c-common.c:794 #, c-format msgid "wrong number of arguments specified for `%s' attribute" msgstr "fel antal argument angett för attributet `%s'" ! #: c-common.c:810 c-common.c:817 c-common.c:824 c-common.c:837 c-common.c:845 ! #: c-common.c:860 c-common.c:873 c-common.c:881 c-common.c:897 c-common.c:909 ! #: c-common.c:921 c-common.c:926 c-common.c:1100 c-common.c:1252 #, c-format msgid "`%s' attribute ignored" msgstr "attributet `%s' ignorerat" ! #: c-common.c:959 #, c-format msgid "unknown machine mode `%s'" msgstr "okänt maskinläge `%s'" ! #: c-common.c:962 #, c-format msgid "no data type for mode `%s'" msgstr "ingen datatyp för läge `%s'" ! #: c-common.c:969 ! #, c-format ! msgid "type with more precision than %s" ! msgstr "typ med högre precision än %s" ! ! #: c-common.c:988 msgid "section attribute cannot be specified for local variables" ! msgstr "attributet \"section\" kan inte anges för lokala variabler" ! #: c-common.c:995 #, c-format msgid "section of `%s' conflicts with previous declaration" ! msgstr "sektion \"%s\" står i konflikt med tidigare deklaration" ! #: c-common.c:1001 #, c-format msgid "section attribute not allowed for `%s'" ! msgstr "attributet \"section\" är inte tillåten för \"%s\"" ! #: c-common.c:1004 msgid "section attributes are not supported for this target" ! msgstr "attributet \"section\" stöds inte för denna målarkitektur" ! #: c-common.c:1023 msgid "requested alignment is not a constant" msgstr "efterfrågad minnesjustering är inte konstant" ! #: c-common.c:1028 msgid "requested alignment is not a power of 2" msgstr "efterrågad minnesjustering är inte en potens av 2" ! #: c-common.c:1030 msgid "requested alignment is too large" msgstr "efterfrågad minnesjustering är för stor" ! #: c-common.c:1053 #, c-format msgid "alignment may not be specified for `%s'" msgstr "minnesjustering kan inte anges för \"%s\"" ! #: c-common.c:1078 #, c-format msgid "`%s' defined both normally and as an alias" ! msgstr "\"%s\" är definierad både normalt och som ett alias" ! #: c-common.c:1086 msgid "alias arg not a string" ! msgstr "aliasargumentet är inte en sträng" ! #: c-common.c:1107 c-common.c:1124 c-common.c:1141 #, c-format msgid "`%s' attribute applies only to functions" ! msgstr "attributet \"%s\" fungerar bara på funktioner" ! #: c-common.c:1113 c-common.c:1130 c-common.c:1147 #, c-format msgid "can't set `%s' attribute after definition" ! msgstr "kan inte sätta attributet \"%s\" efter definitionen" ! #: c-common.c:1280 ch/decl.c:4100 msgid "overflow in constant expression" ! msgstr "spill i konstant uttryck" ! #: c-common.c:1301 msgid "integer overflow in expression" ! msgstr "heltalsspill i uttryck" ! #: c-common.c:1310 msgid "floating point overflow in expression" ! msgstr "flyttalsspill i uttryck" #. This detects cases like converting -129 or 256 to unsigned char. ! #: c-common.c:1331 msgid "large integer implicitly truncated to unsigned type" ! msgstr "stort heltal implicit trunkerat till unsigned typ" ! #: c-common.c:1333 msgid "negative integer implicitly converted to unsigned type" ! msgstr "negativt heltal implicit konverterat till unsigned typ" ! #: c-common.c:1380 msgid "overflow in implicit constant conversion" ! msgstr "spill i implicit constant konvertering" ! #: c-common.c:1528 ! #, c-format ! msgid "operation on `%s' may be undefined" ! msgstr "operation på \"%s\" kan vara odefinierad" ! ! #: c-common.c:1813 msgid "expression statement has incomplete type" ! msgstr "uttryckssats har inkomplett typ" ! #: c-common.c:1846 ch/actions.c:1027 msgid "case label does not reduce to an integer constant" ! msgstr "case-etikett reducerar inte till en heltalskonstant" ! #: c-common.c:2116 msgid "invalid truth-value expression" ! msgstr "ogiltigt sanningsvärdeuttryck" ! #: c-common.c:2167 #, c-format msgid "invalid operands to binary %s" ! msgstr "ogiltiga operander till binär %s" ! #: c-common.c:2402 c-common.c:2411 msgid "comparison is always false due to limited range of data type" msgstr "" + "jämförelsen är alltid falsk på grund av begränsat intervall för datatypen" ! #: c-common.c:2404 c-common.c:2413 msgid "comparison is always true due to limited range of data type" msgstr "" + "jämförelsen är alltid sann på grund av begränsat intervall för datatypen" ! #: c-common.c:2479 msgid "comparison of unsigned expression >= 0 is always true" ! msgstr "jämförelse med unsigned-uttryck >= 0 är alltid sant" ! #: c-common.c:2488 msgid "comparison of unsigned expression < 0 is always false" ! msgstr "jämförelse med unsigned-uttryck < 0 är alltid falskt" ! #: c-common.c:2539 f/com.c:15229 msgid "struct type value used where scalar is required" ! msgstr "struct-värde använt där skalär krävs" ! #: c-common.c:2543 f/com.c:15233 msgid "union type value used where scalar is required" ! msgstr "union-värde använt där skalär krävs" ! #: c-common.c:2547 f/com.c:15237 msgid "array type value used where scalar is required" ! msgstr "fält-värde använd där skalär krävs" ! #: c-common.c:2662 f/com.c:15363 msgid "suggest parentheses around assignment used as truth value" ! msgstr "föreslår parenteser runt tilldelning som används som sanningsvärde" ! #: c-common.c:2706 c-common.c:2738 msgid "invalid use of `restrict'" msgstr "ogiltigt användande av \"restrict\"" ! #: c-common.c:3479 c-typeck.c:1792 #, c-format msgid "too few arguments to function `%s'" msgstr "för få argument till funktionen \"%s\"" ! #: c-common.c:3485 c-typeck.c:1644 #, c-format msgid "too many arguments to function `%s'" msgstr "för många argument till funktionen \"%s\"" ! #: c-common.c:3672 ! msgid "pointers are not permitted as case values" ! msgstr "pekare är inte tillåtna case-värden" ! ! #: c-common.c:3678 ! msgid "ISO C++ forbids range expressions in switch statements" ! msgstr "ISO C++ förbjuder intervalluttryck i switch-satser" ! ! #: c-common.c:3680 ! msgid "ISO C forbids range expressions in switch statements" ! msgstr "ISO C förbjuder intervalluttryck i switch-satser" ! ! #: c-common.c:3710 ! msgid "empty range specified" ! msgstr "tomt intervall angivet" ! ! #: c-common.c:3761 ! msgid "duplicate (or overlapping) case value" ! msgstr "dubbla (eller överlappand) case-värden" ! ! #: c-common.c:3763 ! msgid "this is the first entry overlapping that value" ! msgstr "detta är det första fallet som överlappar det värdet" ! ! #: c-common.c:3767 ch/actions.c:1125 ! msgid "duplicate case value" ! msgstr "upprepat case-värde" ! ! #: c-common.c:3768 ! msgid "previously used here" ! msgstr "tidigare använd här" ! ! #: c-common.c:3772 ! msgid "multiple default labels in one switch" ! msgstr "flera default-etiketter i en switch" ! ! #: c-common.c:3773 ! msgid "this is the first default label" ! msgstr "detta är den första default-etiketten" ! ! #: c-common.c:3801 ! msgid "ISO C++ forbids taking the address of a label" ! msgstr "ISO C++ förbjuder att man tar adressen till en etikett" ! ! #: c-common.c:3803 ! msgid "ISO C forbids taking the address of a label" ! msgstr "ISO C förbjuder att man tar adressen till en etikett" ! ! #: c-common.c:4314 ! msgid "-Wformat-y2k ignored without -Wformat" ! msgstr "-Wformat-y2k ignorerad utan -Wformat" ! ! #: c-common.c:4316 ! msgid "-Wformat-extra-args ignored without -Wformat" ! msgstr "-Wformat-extra-args ignorerad utan -Wformat" ! ! #: c-common.c:4318 ! msgid "-Wformat-nonliteral ignored without -Wformat" ! msgstr "-Wformat-nonliteral ignorerad utan -Wformat" ! ! #: c-common.c:4320 ! msgid "-Wformat-security ignored without -Wformat" ! msgstr "-Wformat-security ignorerad utan -Wformat" ! ! #: c-common.c:4322 ! msgid "-Wmissing-format-attribute ignored without -Wformat" ! msgstr "-Wmissing-format-attribute ignorerad utan -Wformat" ! ! #: c-convert.c:78 c-typeck.c:983 c-typeck.c:4112 ch/convert.c:1166 ! #: cp/typeck.c:1755 cp/typeck.c:6319 msgid "void value not ignored as it ought to be" ! msgstr "värdet av typen void ignoreras inte vilket bör göras" ! #: c-convert.c:110 java/typeck.c:150 msgid "conversion to non-scalar type requested" ! msgstr "konvertering till icke-skalär typ begärd" ! #: c-decl.c:545 #, c-format msgid "unknown C standard `%s'" msgstr "okänd C-standard \"%s\"" ! #: c-decl.c:839 #, c-format msgid "array `%s' assumed to have one element" ! msgstr "fält \"%s\" antas ha ett element" ! #: c-decl.c:1015 #, c-format msgid "`struct %s' incomplete in scope ending here" ! msgstr "\"struct %s\" är inkomplett i scope-område som slutar här" ! #: c-decl.c:1018 #, c-format msgid "`union %s' incomplete in scope ending here" ! msgstr "\"union %s\" är inkomplett i scope-område som slutar här" ! #: c-decl.c:1021 #, c-format msgid "`enum %s' incomplete in scope ending here" ! msgstr "\"enum %s\" är inkomplett i scope-område som slutar här" ! #: c-decl.c:1135 c-decl.c:1300 ch/decl.c:2920 java/decl.c:1334 #, c-format msgid "label `%s' used but not defined" ! msgstr "etikett \"%s\" använd men inte definierad" ! #: c-decl.c:1141 c-decl.c:1307 ch/decl.c:2926 java/decl.c:1340 #, c-format msgid "label `%s' defined but not used" ! msgstr "etikett \"%s\" definierad men inte använd" ! #: c-decl.c:1429 c-decl.c:1482 #, c-format msgid "shadowing built-in function `%s'" ! msgstr "döljer inbyggd funktion \"%s\"" ! #: c-decl.c:1431 #, c-format msgid "shadowing library function `%s'" ! msgstr "döljer biblioteksfunktion \"%s\"" ! #: c-decl.c:1437 #, c-format msgid "library function `%s' declared as non-function" ! msgstr "biblioteksfunktion \"%s\" deklarerad som icke-funktion" ! #: c-decl.c:1441 c-decl.c:1444 #, c-format msgid "built-in function `%s' declared as non-function" ! msgstr "inbyggd funktion \"%s\" deklarerad som icke-funktion" ! #: c-decl.c:1448 objc/objc-act.c:2488 objc/objc-act.c:6153 #, c-format msgid "`%s' redeclared as different kind of symbol" ! msgstr "\"%s\" omdeklarerad som en annan sorts symbol" ! #: c-decl.c:1449 c-decl.c:1627 c-decl.c:1774 objc/objc-act.c:2490 ! #: objc/objc-act.c:6155 objc/objc-act.c:6213 #, c-format msgid "previous declaration of `%s'" ! msgstr "tidigare deklaration av \"%s\"" #. If types don't match for a built-in, throw away the built-in. ! #: c-decl.c:1531 #, c-format msgid "conflicting types for built-in function `%s'" ! msgstr "motstridiga typer på inbyggd funktion \"%s\"" ! #: c-decl.c:1574 c-decl.c:1593 #, c-format msgid "conflicting types for `%s'" ! msgstr "motstridiga typer på \"%s\"" ! #: c-decl.c:1616 msgid "" "A parameter list with an ellipsis can't match an empty parameter name list " "declaration." msgstr "" + "En parameterlista med ellips kan inte matcha en tom namnlistdeklaration." ! #: c-decl.c:1622 msgid "" "An argument type that has a default promotion can't match an empty parameter " "name list declaration." msgstr "" ! #: c-decl.c:1637 c-decl.c:1659 #, c-format msgid "redefinition of `%s'" ! msgstr "omdefiniering av \"%s\"" ! #: c-decl.c:1640 #, c-format msgid "redeclaration of `%s'" ! msgstr "omdeklaration av \"%s\"" ! #: c-decl.c:1643 #, c-format msgid "conflicting declarations of `%s'" ! msgstr "motstridande deklarationer av \"%s\"" ! #: c-decl.c:1652 c-decl.c:1664 #, c-format msgid "`%s' previously defined here" ! msgstr "\"%s\" definierades tidigare här" ! #: c-decl.c:1653 c-decl.c:1665 #, c-format msgid "`%s' previously declared here" ! msgstr "\"%s\" är tidigare deklarerad här" ! #: c-decl.c:1686 #, c-format msgid "prototype for `%s' follows" ! msgstr "prototyp för \"%s\" följer" ! #: c-decl.c:1687 c-decl.c:1695 c-decl.c:1711 msgid "non-prototype definition here" ! msgstr "icke-prototypdefinition here" ! #: c-decl.c:1694 #, c-format msgid "prototype for `%s' follows and number of arguments doesn't match" ! msgstr "prototyp för \"%s\" följer och antalet argument matchar inte" ! #: c-decl.c:1709 #, c-format msgid "prototype for `%s' follows and argument %d doesn't match" ! msgstr "prototyp för `%s' följer och argument %d matchar inte" ! #: c-decl.c:1726 #, c-format msgid "`%s' declared inline after being called" ! msgstr "\"%s\" är deklarerad inline efter att den blivit anropad" ! #: c-decl.c:1731 #, c-format msgid "`%s' declared inline after its definition" ! msgstr "\"%s\" deklarerad inline efter sin definition" ! #: c-decl.c:1738 #, c-format msgid "static declaration for `%s' follows non-static" ! msgstr "statisk deklaration av \"%s\" följer på icke-statisk" ! #: c-decl.c:1746 #, c-format msgid "non-static declaration for `%s' follows static" ! msgstr "icke-statisk deklaration av \"%s\" följer på statisk" ! #: c-decl.c:1753 #, c-format msgid "const declaration for `%s' follows non-const" ! msgstr "const-deklaration för \"%s\" följer på icke-const" ! #: c-decl.c:1760 #, c-format msgid "type qualifiers for `%s' conflict with previous decl" ! msgstr "typkvalificerare för \"%s\" i konflikt med tidigare dekl" ! #: c-decl.c:1773 #, c-format msgid "redundant redeclaration of `%s' in same scope" ! msgstr "redundant omdeklaration av \"%s\" i samma scope" ! #: c-decl.c:2064 #, c-format msgid "nested extern declaration of `%s'" ! msgstr "nästlad extern deklaration av \"%s\"" ! #: c-decl.c:2089 java/decl.c:986 #, c-format msgid "`%s' used prior to declaration" ! msgstr "\"%s\" är använd innan sin deklaration" ! #: c-decl.c:2110 c-decl.c:2325 #, c-format msgid "`%s' was declared implicitly `extern' and later `static'" ! msgstr "\"%s\" deklarerades implicit \"extern\" och senare \"static\"" ! #: c-decl.c:2220 msgid "type mismatch with previous external decl" ! msgstr "typ skiljer sig från tidigare extern deklaration" ! #: c-decl.c:2221 #, c-format msgid "previous external decl of `%s'" ! msgstr "föregående externa dekl. av \"%s\"" ! #: c-decl.c:2234 msgid "type mismatch with previous implicit declaration" ! msgstr "typ skiljer sig från tidigare implicit deklaration" ! #: c-decl.c:2236 #, c-format msgid "previous implicit declaration of `%s'" ! msgstr "tidigare implicit deklaration av \"%s\"" ! #: c-decl.c:2253 #, c-format msgid "type of external `%s' is not global" ! msgstr "typen på extern \"%s\" är inte global" ! #: c-decl.c:2304 #, c-format msgid "`%s' was previously implicitly declared to return `int'" ! msgstr "\"%s\" deklarerades tidigare implicit att returnera \"int\"" ! #: c-decl.c:2329 #, c-format msgid "`%s' was declared `extern' and later `static'" ! msgstr "\"%s\" deklarerades \"extern\" och senare \"static\"" ! #: c-decl.c:2352 #, c-format msgid "extern declaration of `%s' doesn't match global one" ! msgstr "extern deklaration av \"%s\" matchar inte den globala" ! #: c-decl.c:2392 #, c-format msgid "`%s' locally external but globally static" ! msgstr "\"%s\" är lokalt extern men globalt static" ! #: c-decl.c:2428 c-decl.c:2453 cp/decl.c:4221 java/decl.c:1033 #, c-format msgid "declaration of `%s' shadows a parameter" ! msgstr "deklaration av \"%s\" döljer en parameter" ! #: c-decl.c:2431 java/decl.c:1036 #, c-format msgid "declaration of `%s' shadows a symbol from the parameter list" ! msgstr "deklaration av \"%s\" döljer symbol från parameterlista" ! # local, det kan troligen vara både lokal variabel och lokal funktion?? ! #: c-decl.c:2455 cp/decl.c:4229 #, c-format msgid "declaration of `%s' shadows previous local" ! msgstr "deklaration av \"%s\" döljer en tidigare lokal" #. XXX shadow warnings in outer-more namespaces ! #: c-decl.c:2458 cp/decl.c:4233 #, c-format msgid "declaration of `%s' shadows global declaration" ! msgstr "deklaration av \"%s\" döljer global deklaration" ! #: c-decl.c:2548 #, c-format msgid "function `%s' was previously declared within a block" ! msgstr "funktionen \"%s\" deklarerades tidigare i ett block" ! #: c-decl.c:2565 c-decl.c:2567 #, c-format msgid "implicit declaration of function `%s'" ! msgstr "implicit deklaration av funktion \"%s\"" ! #: c-decl.c:2654 #, c-format msgid "label %s referenced outside of any function" ! msgstr "etikett %s är refererad till utanför en funktion" ! #: c-decl.c:2711 #, c-format msgid "duplicate label declaration `%s'" ! msgstr "dubbel deklaration av etikett \"%s\"" ! #: c-decl.c:2714 msgid "this is a previous declaration" ! msgstr "detta är en tidigare deklaration" ! #: c-decl.c:3207 msgid "unnamed struct/union that defines no instances" ! msgstr "odöpt struktur/union som inte har någon instans" ! #: c-decl.c:3226 msgid "useless keyword or type name in empty declaration" ! msgstr "oanvändbart nyckelord eller typnamn i tom deklaration" ! #: c-decl.c:3233 msgid "two types specified in one empty declaration" ! msgstr "två typer angivna i en tom deklaration" ! #: c-decl.c:3238 c-parse.y:724 c-parse.y:726 cp/parse.y:728 cp/parse.y:1797 ! #: objc/objc-parse.y:766 objc/objc-parse.y:768 objc/objc-parse.y:3034 msgid "empty declaration" msgstr "tom deklaration" ! #: c-decl.c:3268 ! msgid "" ! "ISO C89 does not support `static' or type qualifiers in parameter array " ! "declarators" ! msgstr "" ! ! #: c-decl.c:3270 ! msgid "ISO C89 does not support `[*]' array declarators" ! msgstr "" ! ! #: c-decl.c:3273 ! msgid "GCC does not yet properly implement `[*]' array declarators" ! msgstr "" ! ! #: c-decl.c:3292 ! msgid "static or type qualifiers in abstract declarator" ! msgstr "" ! ! #: c-decl.c:3349 #, c-format msgid "`%s' is usually a function" msgstr "\"%s\" är vanligtvis en funktion" ! #: c-decl.c:3363 #, c-format msgid "typedef `%s' is initialized" ! msgstr "typedef \"%s\" är initierad" ! #: c-decl.c:3370 #, c-format msgid "function `%s' is initialized like a variable" ! msgstr "funktion \"%s\" är initierad som en variabel" #. DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE. ! #: c-decl.c:3377 #, c-format msgid "parameter `%s' is initialized" ! msgstr "parameter \"%s\" är initierad" ! #: c-decl.c:3397 c-typeck.c:4843 msgid "variable-sized object may not be initialized" ! msgstr "objekt med variabel storlek kan inte initieras" ! #: c-decl.c:3403 #, c-format msgid "variable `%s' has initializer but incomplete type" ! msgstr "variabel \"%s\" har initierare men är av inkomplett typ" ! #: c-decl.c:3409 #, c-format msgid "elements of array `%s' have incomplete type" ! msgstr "elementen i fält \"%s\" har en ofullständig typ" ! #: c-decl.c:3422 #, c-format msgid "declaration of `%s' has `extern' and is initialized" ! msgstr "deklaration av \"%s\" är \"extern\" och initierad" ! #: c-decl.c:3535 #, c-format msgid "initializer fails to determine size of `%s'" ! msgstr "initierare misslyckas med att bestämma storlek på \"%s\"" ! #: c-decl.c:3540 #, c-format msgid "array size missing in `%s'" ! msgstr "fältstorlek saknas i \"%s\"" ! #: c-decl.c:3556 #, c-format msgid "zero or negative size array `%s'" ! msgstr "noll eller negativ storlek på fält \"%s\"" ! #: c-decl.c:3584 ch/decl.c:4133 #, c-format msgid "storage size of `%s' isn't known" ! msgstr "lagringsstorlek på \"%s\" är okänd" ! #: c-decl.c:3594 #, c-format msgid "storage size of `%s' isn't constant" ! msgstr "lagringsstorlek på \"%s\" är inte konstant" ! #: c-decl.c:3653 ! #, c-format ! msgid "ignoring asm-specifier for non-static local variable `%s'" ! msgstr "ignorerar asm för ickestatisk lokal variabel \"%s\"" ! ! #: c-decl.c:3728 #, c-format msgid "ANSI C forbids parameter `%s' shadowing typedef" ! msgstr "ANSI C förbjuder att parameter \"%s\" döljer typedef" ! #: c-decl.c:3964 cp/decl.c:10028 msgid "`long long long' is too long for GCC" msgstr "\"long long long\" är för långt för GCC" ! #: c-decl.c:3969 msgid "ISO C89 does not support `long long'" msgstr "ISO C89 stödjer inte \"long long\"'" ! #: c-decl.c:3974 cp/decl.c:10033 #, c-format msgid "duplicate `%s'" ! msgstr "flera \"%s\"" ! #: c-decl.c:3980 cp/decl.c:10053 #, c-format msgid "two or more data types in declaration of `%s'" ! msgstr "två eller fler datatyper i deklaration av \"%s\"" ! #: c-decl.c:3995 cp/decl.c:10058 #, c-format msgid "`%s' fails to be a typedef or built in type" msgstr "" ! #: c-decl.c:4034 #, c-format ! msgid "type defaults to `int' in declaration of `%s'" msgstr "" ! #: c-decl.c:4063 ! #, c-format ! msgid "both long and short specified for `%s'" ! msgstr "både long och short angivet för \"%s\"" ! ! #: c-decl.c:4067 cp/decl.c:10157 #, c-format msgid "long or short specified with char for `%s'" ! msgstr "long eller short angiven med char för \"%s\"" ! #: c-decl.c:4074 cp/decl.c:10161 #, c-format msgid "long or short specified with floating type for `%s'" ! msgstr "long eller short angiven med flyttalstyp för \"%s\"" ! #: c-decl.c:4077 msgid "the only valid combination is `long double'" msgstr "den enda giltiga kombinationen är \"long double\"" ! #: c-decl.c:4083 #, c-format msgid "both signed and unsigned specified for `%s'" msgstr "både signed och unsigned specificerat för \"%s\"" ! #: c-decl.c:4085 cp/decl.c:10150 #, c-format msgid "long, short, signed or unsigned invalid for `%s'" ! msgstr "long, short, signed eller unsigned ogiltig för \"%s\"" ! #: c-decl.c:4091 cp/decl.c:10170 #, c-format msgid "long, short, signed or unsigned used invalidly for `%s'" ! msgstr "long, short, signed eller unsigned använd felaktigt på \"%s\"" ! #: c-decl.c:4110 cp/decl.c:10191 #, c-format msgid "complex invalid for `%s'" ! msgstr "complex ogiltig för \"%s\"" ! #: c-decl.c:4155 ! msgid "ISO C89 does not support complex types" ! msgstr "ISO C89 stöder inte typen complex" ! ! #: c-decl.c:4167 ! msgid "ISO C does not support plain `complex' meaning `double complex'" ! msgstr "ISO C stöder inte bara \"complex\" i meningen \"double complex\"" ! ! #: c-decl.c:4173 c-decl.c:4185 ! msgid "ISO C does not support complex integer types" ! msgstr "ISO C stöder inte komplexa heltalstyper" ! ! #: c-decl.c:4200 c-decl.c:4615 cp/decl.c:10790 msgid "duplicate `const'" ! msgstr "upprepning av \"const\"" ! #: c-decl.c:4202 c-decl.c:4619 cp/decl.c:10794 msgid "duplicate `restrict'" ! msgstr "upprepning av \"restrict\"" ! #: c-decl.c:4204 c-decl.c:4617 cp/decl.c:10792 msgid "duplicate `volatile'" ! msgstr "upprepning av \"volatile\"" ! #: c-decl.c:4226 cp/decl.c:10340 #, c-format msgid "multiple storage classes in declaration of `%s'" ! msgstr "flera lagringsklasser i deklaration av \"%s\"" ! #: c-decl.c:4235 msgid "function definition declared `auto'" ! msgstr "funktionsdefinition deklarerad som \"auto\"" ! #: c-decl.c:4237 msgid "function definition declared `register'" ! msgstr "funktionsdefinition deklarerad som \"register\"" ! #: c-decl.c:4239 msgid "function definition declared `typedef'" ! msgstr "funktionsdefinition deklarerad som \"typedef\"" ! #: c-decl.c:4252 #, c-format msgid "storage class specified for structure field `%s'" ! msgstr "lagringsklass angiven för strukturfält \"%s\"" ! #: c-decl.c:4256 cp/decl.c:10387 #, c-format msgid "storage class specified for parameter `%s'" ! msgstr "lagringsklass angiven för parameter \"%s\"" ! #: c-decl.c:4259 cp/decl.c:10389 msgid "storage class specified for typename" ! msgstr "lagringsklass angiven för typnamn" ! #: c-decl.c:4271 cp/decl.c:10403 #, c-format msgid "`%s' initialized and declared `extern'" ! msgstr "`%s' initierad och deklarerad \"extern\"" ! #: c-decl.c:4273 cp/decl.c:10406 #, c-format msgid "`%s' has both `extern' and initializer" ! msgstr "\"%s\" är både \"extern\" och initierare" ! #: c-decl.c:4277 cp/decl.c:10410 #, c-format msgid "nested function `%s' declared `extern'" ! msgstr "nästlad funktion \"%s\" är deklarerad \"extern\"" ! #: c-decl.c:4280 cp/decl.c:10414 #, c-format msgid "top-level declaration of `%s' specifies `auto'" + msgstr "toppnivådeklaration av \"%s\" anger \"auto\"" + + #. Only the innermost declarator (making a parameter be of + #. array type which is converted to pointer type) + #. may have static or type qualifiers. + #: c-decl.c:4314 c-decl.c:4480 + msgid "static or type qualifiers in non-parameter array declarator" msgstr "" ! #: c-decl.c:4335 #, c-format msgid "declaration of `%s' as array of voids" ! msgstr "deklaration av \"%s\" som ett fält med void" ! #: c-decl.c:4341 #, c-format msgid "declaration of `%s' as array of functions" ! msgstr "deklaration av \"%s\" som ett fält med funktioner" ! #: c-decl.c:4362 #, c-format msgid "size of array `%s' has non-integer type" ! msgstr "storlek på fält \"%s\" är inte av heltalstyp" ! #: c-decl.c:4367 #, c-format msgid "ISO C forbids zero-size array `%s'" ! msgstr "ISO C förbjuder fält \"%s\" med storlek noll" ! #: c-decl.c:4374 #, c-format msgid "size of array `%s' is negative" ! msgstr "storlek på fält \"%s\" är negativt" ! #: c-decl.c:4387 #, c-format msgid "ISO C89 forbids array `%s' whose size can't be evaluated" ! msgstr "ISO C89 förbjuder fält \"%s\" vars storlek inte kan beräknas" ! #: c-decl.c:4390 #, c-format msgid "ISO C89 forbids variable-size array `%s'" ! msgstr "ISO C89 förbjuder fält \"%s\" med variabel storlek" ! #: c-decl.c:4420 c-decl.c:4641 #, c-format msgid "size of array `%s' is too large" msgstr "fältet \"%s\" är för stort" ! #: c-decl.c:4437 ! msgid "ISO C89 does not support flexible array members" ! msgstr "ISO C89 stöder inte flexibla fältmedlemmar" ! ! #: c-decl.c:4447 msgid "array type has incomplete element type" ! msgstr "fälttyp har inkomplett elementtyp" ! #: c-decl.c:4454 msgid "ANSI C forbids const or volatile function types" ! msgstr "ANSI C förbjuder funktionertyper med const eller volatile" ! #: c-decl.c:4500 cp/decl.c:10550 #, c-format msgid "`%s' declared as function returning a function" ! msgstr "\"%s\" är deklarerad som en funktion som returnerar en funktion" ! #: c-decl.c:4505 cp/decl.c:10555 #, c-format msgid "`%s' declared as function returning an array" + msgstr "\"%s\" är deklarerad som en funktion som returnerar ett fält" + + #: c-decl.c:4540 + msgid "ISO C forbids qualified void function return type" msgstr "" ! #: c-decl.c:4544 ! msgid "type qualifiers ignored on function return type" ! msgstr "" ! ! #: c-decl.c:4573 c-decl.c:4656 c-decl.c:4778 c-decl.c:4869 msgid "ISO C forbids qualified function types" msgstr "" ! #: c-decl.c:4613 cp/decl.c:10786 msgid "invalid type modifier within pointer declarator" msgstr "" ! #: c-decl.c:4690 msgid "ISO C forbids const or volatile function types" msgstr "" ! #: c-decl.c:4709 cp/decl.c:11264 #, c-format msgid "variable or field `%s' declared void" + msgstr "variabel eller fält \"%s\" deklarerad som void" + + #: c-decl.c:4742 + msgid "attributes in parameter array declarator ignored" msgstr "" ! #: c-decl.c:4767 ! msgid "invalid type modifier within array declarator" ! msgstr "" ! ! #: c-decl.c:4816 #, c-format msgid "field `%s' declared as a function" ! msgstr "fält \"%s\" deklarerad som en funktion" ! #: c-decl.c:4822 #, c-format msgid "field `%s' has incomplete type" ! msgstr "fält \"%s\" har en inkomplett typ" ! #: c-decl.c:4854 c-decl.c:4856 c-decl.c:4863 #, c-format msgid "invalid storage class for function `%s'" ! msgstr "ogiltig lagringsklass för funktion \"%s\"" ! #: c-decl.c:4875 msgid "`noreturn' function returns non-void value" ! msgstr "\"noreturn\"-funktion returnerar ett icke-void värde" ! #: c-decl.c:4887 msgid "cannot inline function `main'" ! msgstr "kan inte inline:a funktion \"main\"" ! #: c-decl.c:4922 #, c-format msgid "variable `%s' declared `inline'" ! msgstr "variabel \"%s\" deklarerad \"inline\"" ! #: c-decl.c:4993 c-decl.c:5987 msgid "function declaration isn't a prototype" ! msgstr "funktionsdeklaration är inte en prototyp" ! #: c-decl.c:4999 msgid "parameter names (without types) in function declaration" msgstr "" ! #: c-decl.c:5031 c-decl.c:6377 c-decl.c:6676 #, c-format msgid "parameter `%s' has incomplete type" ! msgstr "parameter \"%s\" har en inkomplett typ" ! #: c-decl.c:5034 msgid "parameter has incomplete type" ! msgstr "parameter har en inkomplett typ" ! #: c-decl.c:5055 #, c-format msgid "parameter `%s' points to incomplete type" ! msgstr "parameter \"%s\" pekar på inkomplett typ" ! #: c-decl.c:5058 msgid "parameter points to incomplete type" ! msgstr "parameter pekar på inkomplett typ" ! #: c-decl.c:5123 #, c-format msgid "parameter `%s' has just a forward declaration" msgstr "" ! #: c-decl.c:5164 msgid "`void' in parameter list must be the entire list" ! msgstr "\"void\" i parameterlistan måste vara hela listan" ! #: c-decl.c:5193 #, c-format msgid "`%s %s' declared inside parameter list" ! msgstr "\"%s %s\" deklarerad inuti parameterlista" ! #: c-decl.c:5202 msgid "anonymous struct declared inside parameter list" ! msgstr "anonym struktur deklarerad i parameterlista" ! #: c-decl.c:5204 msgid "anonymous union declared inside parameter list" ! msgstr "anonym union deklarerad i parameterlista" ! #: c-decl.c:5206 msgid "anonymous enum declared inside parameter list" ! msgstr "anonym uppräkningstyp deklarerad i parameterlista" ! #: c-decl.c:5210 msgid "" "its scope is only this definition or declaration, which is probably not what " "you want." msgstr "" + "dess scope-område är endast denna definition eller deklaration, vilket " + "troligen inte är vad du vill." ! #: c-decl.c:5287 #, c-format msgid "redefinition of `%s %s'" ! msgstr "redefinition av \"%s %s\"" ! #: c-decl.c:5355 c-decl.c:5358 #, c-format msgid "%s defined inside parms" msgstr "" ! #: c-decl.c:5356 c-decl.c:5359 c-decl.c:5370 msgid "union" ! msgstr "union" ! #: c-decl.c:5356 c-decl.c:5359 msgid "structure" ! msgstr "struktur" ! #: c-decl.c:5369 #, c-format msgid "%s has no %s" ! msgstr "%s har ingen %s" ! #: c-decl.c:5370 msgid "struct" ! msgstr "struct" ! #: c-decl.c:5371 msgid "named members" ! msgstr "namngivna medlemmar" ! #: c-decl.c:5371 msgid "members" ! msgstr "medlemmar" ! #: c-decl.c:5410 #, c-format msgid "nested redefinition of `%s'" ! msgstr "nästlad omdefinition av \"%s\"" ! #: c-decl.c:5423 #, c-format msgid "bit-field `%s' width not an integer constant" msgstr "" ! #: c-decl.c:5434 #, c-format msgid "bit-field `%s' has invalid type" ! msgstr "bitfält \"%s\" har en icke godkänd typ" ! #: c-decl.c:5446 #, c-format msgid "bit-field `%s' type invalid in ISO C" ! msgstr "bitfält \"%s\" har en icke godkänd typ enligt ISO C" ! #: c-decl.c:5458 #, c-format msgid "negative width in bit-field `%s'" ! msgstr "negativ storlek i bitfält \"%s\"" ! #: c-decl.c:5460 #, c-format msgid "width of `%s' exceeds its type" ! msgstr "storleken på \"%s\" är större än sin typ" ! #: c-decl.c:5462 #, c-format msgid "zero width for bit-field `%s'" ! msgstr "Storleken noll på bitfält \"%s\"" ! #: c-decl.c:5476 #, c-format msgid "`%s' is narrower than values of its type" msgstr "" ! #: c-decl.c:5521 ! msgid "flexible array member in union" ! msgstr "" ! ! #: c-decl.c:5523 ! msgid "flexible array member not at end of struct" ! msgstr "" ! ! #: c-decl.c:5525 ! msgid "flexible array member in otherwise empty struct" ! msgstr "" ! ! #: c-decl.c:5550 ch/typeck.c:3063 #, c-format msgid "duplicate member `%s'" ! msgstr "upprepning av medlem \"%s\"" ! #: c-decl.c:5594 msgid "union cannot be made transparent" msgstr "" #. This enum is a named one that has been declared already. ! #: c-decl.c:5675 #, c-format msgid "redeclaration of `enum %s'" msgstr "" ! #: c-decl.c:5709 msgid "enum defined inside parms" msgstr "" ! #: c-decl.c:5742 msgid "enumeration values exceed range of largest integer" msgstr "" ! #: c-decl.c:5851 ch/decl.c:4437 #, c-format msgid "enumerator value for `%s' not integer constant" ! msgstr "uppräkningsvärde för \"%s\" är inte en heltalskonstant" ! #: c-decl.c:5864 ch/decl.c:4449 msgid "overflow in enumeration values" ! msgstr "överspill i uppräkningsvärden" ! #: c-decl.c:5869 msgid "ISO C restricts enumerator values to range of `int'" ! msgstr "ISO C begränsar enumreringsvärden till intervallet av en \"int\"" ! #: c-decl.c:5941 msgid "return type is an incomplete type" ! msgstr "returtypen är en inkomplett typ" ! #: c-decl.c:5949 ! msgid "return type defaults to `int'" ! msgstr "returtyp sätts till \"int\"" ! ! #: c-decl.c:5996 #, c-format msgid "no previous prototype for `%s'" ! msgstr "ingen tidigare prototyp för `%s'" ! #: c-decl.c:6003 #, c-format msgid "`%s' was used with no prototype before its definition" ! msgstr "\"%s\" användes utan någon prototyp innan sin definition" ! #: c-decl.c:6009 #, c-format msgid "no previous declaration for `%s'" ! msgstr "ingen tidigare deklaration av \"%s\"" ! #: c-decl.c:6016 #, c-format msgid "`%s' was used with no declaration before its definition" ! msgstr "\"%s\" användes utan någon deklaration innan sin definition" ! #: c-decl.c:6044 c-decl.c:6763 #, c-format msgid "return type of `%s' is not `int'" ! msgstr "returtypen på \"%s\" är inte \"int\"" ! #: c-decl.c:6060 #, c-format msgid "first argument of `%s' should be `int'" ! msgstr "första argumentet till \"%s\" skall vara \"int\"" ! #: c-decl.c:6069 #, c-format msgid "second argument of `%s' should be `char **'" ! msgstr "andra argumentet till \"%s\" skall vara \"char **\"" ! #: c-decl.c:6078 #, c-format msgid "third argument of `%s' should probably be `char **'" ! msgstr "tredje argumentet till \"%s2 skall troligen vara \"char **\"" ! #: c-decl.c:6087 #, c-format msgid "`%s' takes only zero or two arguments" ! msgstr "\"%s\" tar bara noll eller två argument" ! #: c-decl.c:6090 #, c-format msgid "`%s' is normally a non-static function" ! msgstr "\"%s\" är normalt en icke-statisk function" ! #: c-decl.c:6195 msgid "parm types given both in parmlist and separately" msgstr "" ! #: c-decl.c:6216 msgid "parameter name omitted" ! msgstr "parameternamn utlämnat" ! #: c-decl.c:6220 c-decl.c:6322 c-decl.c:6633 #, c-format msgid "parameter `%s' declared void" ! msgstr "parameter \"%s\" deklarerad som void" ! #: c-decl.c:6296 msgid "parameter name missing from parameter list" ! msgstr "parameternamn saknas i parameterlista" ! #: c-decl.c:6315 c-decl.c:6626 #, c-format msgid "multiple parameters named `%s'" ! msgstr "flera parametrar med namn \"%s\"" ! #: c-decl.c:6346 c-decl.c:6348 #, c-format msgid "type of `%s' defaults to `int'" ! msgstr "typen på \"%s\" sätts till \"int\"" ! #: c-decl.c:6384 c-decl.c:6683 #, c-format msgid "declaration for parameter `%s' but no such parameter" ! msgstr "deklaration av parameter \"%s\" med det finns ingen sådan parameter" ! #: c-decl.c:6432 msgid "number of arguments doesn't match prototype" ! msgstr "antalet argument matchar inte prototypen" ! #: c-decl.c:6462 #, c-format msgid "promoted argument `%s' doesn't match prototype" msgstr "" ! #: c-decl.c:6476 #, c-format msgid "argument `%s' doesn't match prototype" ! msgstr "argument \"%s\" matchar inte prototypen" ! #: c-decl.c:6656 #, c-format msgid "type of parameter `%s' is not declared" + msgstr "typen på parameter \"%s\" är inte deklarerad" + + #: c-decl.c:6885 + msgid "this function may return with or without a value" + msgstr "denna funktion kan returnera med eller utan ett värde" + + #: c-decl.c:6905 + #, c-format + msgid "size of return value of `%s' is %u bytes" + msgstr "storleken på returvärdet från \"%s\" är %u bytes" + + #: c-decl.c:6909 + #, c-format + msgid "size of return value of `%s' is larger than %d bytes" + msgstr "storleken på returvärdet från \"%s\" är större än %d bytes" + + #. If we get here, declarations have been used in a for loop without + #. the C99 for loop scope. This doesn't make much sense, so don't + #. allow it. + #: c-decl.c:6964 + msgid "`for' loop initial declaration used outside C99 mode" msgstr "" ! #: c-decl.c:6984 ! #, c-format ! msgid "`%s %s' declared in `for' loop initial declaration" ! msgstr "\"%s %s\" är deklarerad i en for-loops första del" ! ! #: c-decl.c:6993 ! #, c-format ! msgid "declaration of non-variable `%s' in `for' loop initial declaration" msgstr "" ! #: c-decl.c:6995 ! #, c-format ! msgid "declaration of static variable `%s' in `for' loop initial declaration" msgstr "" ! #: c-decl.c:6997 ! #, c-format ! msgid "declaration of `extern' variable `%s' in `for' loop initial declaration" ! msgstr "" ! #: c-dump.c:826 ! #, c-format ! msgid "could not open dump file `%s'" ! msgstr "kunde inte öppna dump-fil \"%s\"" ! ! #: c-dump.c:871 ! #, c-format ! msgid "ignoring `%s' at end of `-f%s'" msgstr "" ! #: c-format.c:106 c-format.c:219 #, c-format ! msgid "argument format specified for non-function `%s'" ! msgstr "argumentformat angivet för icke-funktion \"%s\"" ! ! #: c-format.c:112 ! msgid "unrecognized format specifier" ! msgstr "oigenkänd formatangivelse" ! ! #: c-format.c:123 ! #, c-format ! msgid "`%s' is an unrecognized format function type" ! msgstr "\"%s\" är ett ej känt funktionsformat" ! ! #: c-format.c:145 c-format.c:233 ! msgid "format string has invalid operand number" ! msgstr "formatsträng har ett ogiltigt antal operander" ! ! #: c-format.c:153 ! msgid "format string arg follows the args to be formatted" ! msgstr "formatsträngen kommer efter argumenten som skall formateras" ! ! #: c-format.c:172 c-format.c:254 ! msgid "format string arg not a string type" ! msgstr "argument för formatsträng är inte av strängtyp" ! ! #: c-format.c:185 ! msgid "args to be formatted is not '...'" ! msgstr "argumenten som skall formateras är inte \"...\"" ! ! #: c-format.c:193 ! msgid "strftime formats cannot format arguments" msgstr "" ! #: c-format.c:263 ! msgid "function does not return string type" ! msgstr "" ! ! #: c-format.c:757 ! msgid "` ' flag" ! msgstr "" ! ! #: c-format.c:757 ! msgid "the ` ' printf flag" ! msgstr "" ! ! #: c-format.c:758 c-format.c:829 ! msgid "`+' flag" ! msgstr "" ! ! #: c-format.c:758 ! msgid "the `+' printf flag" ! msgstr "" ! ! #: c-format.c:759 c-format.c:805 ! msgid "`#' flag" ! msgstr "" ! ! #: c-format.c:759 ! msgid "the `#' printf flag" ! msgstr "" ! ! #: c-format.c:760 c-format.c:803 ! msgid "`0' flag" ! msgstr "" ! ! #: c-format.c:760 ! msgid "the `0' printf flag" ! msgstr "" ! ! #: c-format.c:761 c-format.c:802 c-format.c:832 ! msgid "`-' flag" ! msgstr "" ! ! #: c-format.c:761 ! msgid "the `-' printf flag" ! msgstr "" ! ! #: c-format.c:762 c-format.c:786 ! msgid "`'' flag" ! msgstr "" ! ! #: c-format.c:762 ! msgid "the `'' printf flag" ! msgstr "" ! ! #: c-format.c:763 c-format.c:787 ! msgid "`I' flag" ! msgstr "" ! ! #: c-format.c:763 ! msgid "the `I' printf flag" ! msgstr "" ! ! #: c-format.c:764 c-format.c:784 c-format.c:806 c-format.c:833 c-format.c:1886 ! msgid "field width" ! msgstr "" ! ! #: c-format.c:764 ! msgid "field width in printf format" ! msgstr "" ! ! #: c-format.c:765 ! msgid "precision" ! msgstr "" ! ! #: c-format.c:765 ! msgid "precision in printf format" ! msgstr "" ! ! #: c-format.c:766 c-format.c:785 c-format.c:836 ! msgid "length modifier" ! msgstr "" ! ! #: c-format.c:766 ! msgid "length modifier in printf format" ! msgstr "" ! ! #: c-format.c:782 ! msgid "assignment suppression" ! msgstr "" ! ! #: c-format.c:783 ! msgid "`a' flag" ! msgstr "" ! ! #: c-format.c:783 ! msgid "the `a' scanf flag" ! msgstr "" ! ! #: c-format.c:784 ! msgid "field width in scanf format" ! msgstr "" ! ! #: c-format.c:785 ! msgid "length modifier in scanf format" ! msgstr "" ! ! #: c-format.c:786 ! msgid "the `'' scanf flag" ! msgstr "" ! ! #: c-format.c:787 ! msgid "the `I' scanf flag" ! msgstr "" ! ! #: c-format.c:801 ! msgid "`_' flag" ! msgstr "" ! ! #: c-format.c:801 ! msgid "the `_' strftime flag" ! msgstr "" ! ! #: c-format.c:802 ! msgid "the `-' strftime flag" ! msgstr "" ! ! #: c-format.c:803 ! msgid "the `0' strftime flag" ! msgstr "" ! ! #: c-format.c:804 c-format.c:828 ! msgid "`^' flag" ! msgstr "" ! ! #: c-format.c:804 ! msgid "the `^' strftime flag" ! msgstr "" ! ! #: c-format.c:805 ! msgid "the `#' strftime flag" ! msgstr "" ! ! #: c-format.c:806 ! msgid "field width in strftime format" ! msgstr "" ! ! #: c-format.c:807 ! msgid "`E' modifier" ! msgstr "" ! ! #: c-format.c:807 ! msgid "the `E' strftime modifier" ! msgstr "" ! ! #: c-format.c:808 ! msgid "`O' modifier" ! msgstr "" ! ! #: c-format.c:808 ! msgid "the `O' strftime modifier" ! msgstr "" ! ! #: c-format.c:809 ! msgid "the `O' modifier" ! msgstr "" ! ! #: c-format.c:827 ! msgid "fill character" ! msgstr "" ! ! #: c-format.c:827 ! msgid "fill character in strfmon format" ! msgstr "" ! ! #: c-format.c:828 ! msgid "the `^' strfmon flag" ! msgstr "" ! ! #: c-format.c:829 ! msgid "the `+' strfmon flag" ! msgstr "" ! ! #: c-format.c:830 ! msgid "`(' flag" ! msgstr "" ! ! #: c-format.c:830 ! msgid "the `(' strfmon flag" ! msgstr "" ! ! #: c-format.c:831 ! msgid "`!' flag" ! msgstr "" ! ! #: c-format.c:831 ! msgid "the `!' strfmon flag" ! msgstr "" ! ! #: c-format.c:832 ! msgid "the `-' strfmon flag" ! msgstr "" ! ! #: c-format.c:833 ! msgid "field width in strfmon format" ! msgstr "" ! ! #: c-format.c:834 ! msgid "left precision" ! msgstr "" ! ! #: c-format.c:834 ! msgid "left precision in strfmon format" ! msgstr "" ! ! #: c-format.c:835 ! msgid "right precision" ! msgstr "" ! ! #: c-format.c:835 ! msgid "right precision in strfmon format" ! msgstr "" ! ! #: c-format.c:836 ! msgid "length modifier in strfmon format" ! msgstr "" ! ! #: c-format.c:1135 ! #, fuzzy, c-format ! msgid "function might be possible candidate for `%s' format attribute" ! msgstr "funktionen är en möjlig kandidat för formatattributet \"%s\"" ! ! #: c-format.c:1248 c-format.c:1269 c-format.c:2296 ! msgid "missing $ operand number in format" ! msgstr "saknar numerisk $-operand i formatsträng" ! ! #: c-format.c:1279 #, c-format ! msgid "%s does not support %%n$ operand number formats" msgstr "" ! #: c-format.c:1286 ! msgid "operand number out of range in format" msgstr "" ! #: c-format.c:1307 ! #, c-format ! msgid "format argument %d used more than once in %s format" msgstr "" ! #: c-format.c:1349 ! #, c-format ! msgid "format argument %d unused before used argument %d in $-style format" msgstr "" ! #: c-format.c:1443 ! msgid "format not a string literal, format string not checked" msgstr "" ! #: c-format.c:1457 ! msgid "format not a string literal and no format arguments" msgstr "" ! #: c-format.c:1459 ! msgid "format not a string literal, argument types not checked" msgstr "" ! #: c-format.c:1472 ! msgid "too many arguments for format" ! msgstr "för många argument för för formatsträng" ! ! #: c-format.c:1475 ! msgid "unused arguments in $-style format" msgstr "" ! #: c-format.c:1478 ! msgid "zero-length format string" ! msgstr "formatsträng med längden noll" ! ! #: c-format.c:1481 ! msgid "format is a wide character string" msgstr "" ! #: c-format.c:1484 ! msgid "unterminated format string" ! msgstr "icke terminerad formatsträng" ! ! #. FIXME: this warning should go away once Marc Espie's ! #. __attribute__((nonnull)) patch is in. Instead, checking for ! #. nonnull attributes should probably change this function to act ! #. specially if info == NULL and add a res->number_null entry for ! #. that case, or maybe add a function pointer to be called at ! #. the end instead of hardcoding check_format_info_main. ! #: c-format.c:1573 ! msgid "null format string" ! msgstr "formatsträngen är null" ! ! #: c-format.c:1765 ! msgid "embedded `\\0' in format" msgstr "" ! #: c-format.c:1780 ! #, c-format ! msgid "spurious trailing `%%' in format" msgstr "" ! #: c-format.c:1819 c-format.c:2056 ! #, c-format ! msgid "repeated %s in format" msgstr "" ! #: c-format.c:1832 ! msgid "missing fill character at end of strfmon format" msgstr "" ! #: c-format.c:1852 c-format.c:1970 c-format.c:2250 c-format.c:2303 ! msgid "too few arguments for format" ! msgstr "för få argument enligt formatsträngen" ! ! #: c-format.c:1912 #, c-format ! msgid "zero width in %s format" ! msgstr "nollstorlek i %s formatsträng" ! ! #: c-format.c:1931 ! #, c-format ! msgid "empty left precision in %s format" msgstr "" ! #: c-format.c:1985 ! msgid "field precision" msgstr "" ! #: c-format.c:2000 ! #, c-format ! msgid "empty precision in %s format" msgstr "" ! #: c-format.c:2040 ! #, c-format ! msgid "%s does not support the `%s' %s length modifier" msgstr "" ! #: c-format.c:2090 ! msgid "conversion lacks type at end of format" ! msgstr "" ! ! #: c-format.c:2101 #, c-format ! msgid "unknown conversion type character `%c' in format" msgstr "" ! #: c-format.c:2104 #, c-format ! msgid "unknown conversion type character 0x%x in format" msgstr "" ! #: c-format.c:2111 ! #, c-format ! msgid "%s does not support the `%%%c' %s format" msgstr "" ! #: c-format.c:2127 #, c-format ! msgid "%s used with `%%%c' %s format" msgstr "" ! #: c-format.c:2136 ! #, c-format ! msgid "%s does not support %s" msgstr "" ! #: c-format.c:2145 #, c-format ! msgid "%s does not support %s with the `%%%c' %s format" msgstr "" ! #: c-format.c:2178 ! #, c-format ! msgid "%s ignored with %s and `%%%c' %s format" msgstr "" ! #: c-format.c:2182 ! #, c-format ! msgid "%s ignored with %s in %s format" msgstr "" ! #: c-format.c:2188 ! #, c-format ! msgid "use of %s and %s together with `%%%c' %s format" msgstr "" ! #: c-format.c:2192 ! #, c-format ! msgid "use of %s and %s together in %s format" msgstr "" ! # fixme: ordet locale borde standardiseras ! #: c-format.c:2211 ! #, c-format ! msgid "`%%%c' yields only last 2 digits of year in some locales" msgstr "" + "\"%%%c\" ger bara de sista två siffrorna i året i vissa landsinställningar" ! #: c-format.c:2214 #, c-format ! msgid "`%%%c' yields only last 2 digits of year" ! msgstr "\"%%%c\" ger bara de sista två siffrorna i året" ! ! #. The end of the format string was reached. ! #: c-format.c:2230 ! #, c-format ! msgid "no closing `]' for `%%[' format" msgstr "" ! #: c-format.c:2243 #, c-format ! msgid "use of `%s' length modifier with `%c' type character" msgstr "" ! #: c-format.c:2264 #, c-format ! msgid "%s does not support the `%%%s%c' %s format" msgstr "" ! #: c-format.c:2279 ! msgid "operand number specified with suppressed assignment" ! msgstr "" ! ! #: c-format.c:2281 ! msgid "operand number specified for format taking no argument" ! msgstr "" ! ! #: c-format.c:2400 #, c-format ! msgid "writing through null pointer (arg %d)" msgstr "" ! #: c-format.c:2409 #, c-format ! msgid "reading through null pointer (arg %d)" msgstr "" ! #: c-format.c:2429 #, c-format ! msgid "writing into constant object (arg %d)" msgstr "" ! #: c-format.c:2439 ! #, c-format ! msgid "extra type qualifiers in format argument (arg %d)" msgstr "" ! #: c-format.c:2446 #, c-format ! msgid "format argument is not a pointer (arg %d)" msgstr "" ! #: c-format.c:2448 #, c-format ! msgid "format argument is not a pointer to a pointer (arg %d)" msgstr "" ! #: c-format.c:2542 #, c-format ! msgid "%s is not type %s (arg %d)" msgstr "" ! #: c-format.c:2545 ! #, c-format ! msgid "%s format, %s arg (arg %d)" ! msgstr "" ! #: c-lex.c:275 ! msgid "badly nested C headers from preprocessor" msgstr "" ! #: c-lex.c:293 ! msgid "leaving more files than we entered" ! msgstr "" ! ! #: c-lex.c:325 ! #, c-format ! msgid "ignoring #pragma %s %s" ! msgstr "ignorerar #pragma %s %s" ! ! #: c-lex.c:327 ! #, c-format ! msgid "ignoring #pragma %s" ! msgstr "ignorerar #pragma %s" ! ! #: c-lex.c:373 ! #, c-format ! msgid "universal-character-name '\\U%08x' not valid in identifier" ! msgstr "" ! ! #: c-lex.c:619 ! #, c-format ! msgid "universal-character-name '\\u%04x' not valid in identifier" ! msgstr "" ! ! #: c-lex.c:709 ! msgid "both 'f' and 'l' suffixes on floating constant" ! msgstr "både suffix 'f' och 'l' på flyttalskonstant" ! ! #: c-lex.c:736 ! #, c-format ! msgid "floating point number exceeds range of '%s'" ! msgstr "flyttal utanför intervallet för \"%s\"" ! ! #: c-lex.c:766 ! #, c-format ! msgid "stray '%c' in program" ! msgstr "" ! ! #: c-lex.c:768 ! #, c-format ! msgid "stray '\\%o' in program" ! msgstr "" ! ! #: c-lex.c:964 msgid "floating constant may not be in radix 16" msgstr "" ! #: c-lex.c:1002 msgid "traditional C rejects the 'f' suffix" ! msgstr "traditionell C stödjer inte suffixet 'f'" ! #: c-lex.c:1012 msgid "traditional C rejects the 'l' suffix" ! msgstr "traditionell C stödjer inte suffixet 'l'" ! #: c-lex.c:1022 c-lex.c:1116 msgid "ISO C forbids imaginary numeric constants" ! msgstr "ISO C förbjuder imaginära numeriska konstanter" ! #: c-lex.c:1056 msgid "floating point number exceeds range of 'double'" ! msgstr "flyttalsnummer överskrider intervallet för en \"double\"" ! #: c-lex.c:1085 msgid "two 'u' suffixes on integer constant" ! msgstr "två \"u\"-suffix på heltalskonstant" ! #: c-lex.c:1088 msgid "traditional C rejects the 'u' suffix" ! msgstr "traditionell C stödjer inte suffixet 'u'" ! #: c-lex.c:1099 msgid "three 'l' suffixes on integer constant" ! msgstr "tre \"l\"-suffix på heltalskonstant" ! #: c-lex.c:1101 msgid "'lul' is not a valid integer suffix" ! msgstr "\"lul\" är inte ett giltigt heltalssuffix" ! #: c-lex.c:1103 msgid "'Ll' and 'lL' are not valid integer suffixes" ! msgstr "\"Ll\" och \"lL\" är inte giltiga heltalssuffix" ! #: c-lex.c:1106 msgid "ISO C89 forbids long long integer constants" msgstr "ISO C89 förbjuder long long integer konstanter" ! #: c-lex.c:1114 msgid "more than one 'i' or 'j' suffix on integer constant" ! msgstr "mer än ett \"i\"- eller \"j\"-suffix på heltalskonstant" ! #: c-lex.c:1129 #, c-format msgid "" "integer constant is too large for this configuration of the compiler - " "truncated to %d bits" msgstr "" + "heltalskonstant för stor för denna konfigurering av kompilatorn - kortar ner " + "till %d bitar" ! #: c-lex.c:1219 msgid "width of integer constant changes with -traditional" msgstr "" ! #: c-lex.c:1221 msgid "integer constant is unsigned in ISO C, signed with -traditional" ! msgstr "heltalskonstanter är utan tecken i ISO C, med tecken med -traditional" ! #: c-lex.c:1223 msgid "width of integer constant may change on other systems with -traditional" msgstr "" ! #: c-lex.c:1233 ! #, c-format ! msgid "integer constant larger than the maximum value of %s" ! msgstr "heltalskonstant är större än maximala värdet på %s" ! #: c-lex.c:1242 msgid "decimal constant is so large that it is unsigned" ! msgstr "decimal konstant så stor att den är unsigned" ! #: c-lex.c:1271 msgid "integer constant is larger than the maximum value for its type" ! msgstr "heltalskonstant är större än maximala värdet för sin typ" ! #: c-lex.c:1275 #, c-format msgid "missing white space after number '%.*s'" ! msgstr "saknar mellanrum efter nummer \"%.*s\"" ! #: c-lex.c:1311 msgid "Ignoring invalid multibyte character" ! msgstr "Ignorerar ogiltigt flerbytestecken" #. Like YYERROR but do call yyerror. ! #: c-parse.y:62 cp/parse.y:55 objc/objc-parse.y:63 msgid "syntax error" ! msgstr "syntaxfel" ! #: c-parse.y:267 objc/objc-parse.y:296 msgid "ISO C forbids an empty source file" ! msgstr "ISO C förbjuder tomma källkodsfiler" ! #: c-parse.y:300 c-typeck.c:6813 ch/parse.c:2113 objc/objc-parse.y:329 msgid "argument of `asm' is not a constant string" ! msgstr "argumentet till \"asm\" är inte en konstant sträng" ! #: c-parse.y:308 objc/objc-parse.y:337 msgid "ISO C forbids data definition with no type or storage class" ! msgstr "ISO C förbjuder datadefinition utan typ eller lagringsklass" ! #: c-parse.y:310 objc/objc-parse.y:339 msgid "data definition has no type or storage class" ! msgstr "datadefinition har ingen typ eller lagringsklass" ! #: c-parse.y:329 objc/objc-parse.y:358 msgid "ISO C does not allow extra `;' outside of a function" ! msgstr "ISO C tillåter inte extra \";\" utanför funktioner" ! #: c-parse.y:401 cppexp.c:709 msgid "traditional C rejects the unary plus operator" ! msgstr "traditionell C hanterar inte operatorn unärt plus" ! #: c-parse.y:463 objc/objc-parse.y:492 msgid "`sizeof' applied to a bit-field" ! msgstr "\"sizeof\" applicerat på ett bitfält" ! #: c-parse.y:543 objc/objc-parse.y:572 msgid "ISO C forbids omitting the middle term of a ?: expression" + msgstr "ISO C förbjuder uteslutande av den mittersta termen i ett ?: uttryck" + + #: c-parse.y:593 objc/objc-parse.y:622 + msgid "ISO C89 forbids compound literals" msgstr "" ! #: c-parse.y:623 objc/objc-parse.y:652 msgid "ISO C forbids braced-groups within expressions" msgstr "" ! #: c-parse.y:676 msgid "traditional C rejects string concatenation" ! msgstr "traditionell C stödjer inte sträng-sammanslagning" ! #: c-parse.y:691 objc/objc-parse.y:733 msgid "ISO C does not permit use of `varargs.h'" ! msgstr "ISO C stödjer inte användning av \"varargs.h\"" ! #: c-parse.y:976 c-parse.y:982 c-parse.y:988 c-parse.y:994 c-parse.y:1015 ! #: c-parse.y:1021 c-parse.y:1027 c-parse.y:1033 c-parse.y:1066 c-parse.y:1072 ! #: c-parse.y:1078 c-parse.y:1084 c-parse.y:1129 c-parse.y:1135 c-parse.y:1141 ! #: c-parse.y:1147 cp/parse.y:1877 cp/parse.y:1884 cp/parse.y:1923 ! #: objc/objc-parse.y:1018 objc/objc-parse.y:1024 objc/objc-parse.y:1030 ! #: objc/objc-parse.y:1036 objc/objc-parse.y:1057 objc/objc-parse.y:1063 ! #: objc/objc-parse.y:1069 objc/objc-parse.y:1075 objc/objc-parse.y:1108 ! #: objc/objc-parse.y:1114 objc/objc-parse.y:1120 objc/objc-parse.y:1126 ! #: objc/objc-parse.y:1171 objc/objc-parse.y:1177 objc/objc-parse.y:1183 ! #: objc/objc-parse.y:1189 #, c-format msgid "`%s' is not at beginning of declaration" ! msgstr "\"%s\" är inte i början av deklarationen" ! #: c-parse.y:1434 objc/objc-parse.y:1485 msgid "ISO C forbids empty initializer braces" msgstr "" ! #: c-parse.y:1448 objc/objc-parse.y:1499 ! msgid "ISO C89 forbids specifying subobject to initialize" ! msgstr "ISO C89 förbjuder specifiering av subobjekt som skall initieras" ! ! #: c-parse.y:1451 objc/objc-parse.y:1502 ! msgid "obsolete use of designated initializer without `='" ! msgstr "obsolet angivelse av initierare utan \"=\"" ! ! #: c-parse.y:1455 objc/objc-parse.y:1506 ! msgid "obsolete use of designated initializer with `:'" ! msgstr "obsolet användning av initierare med \":\"" ! ! #: c-parse.y:1484 ! msgid "ISO C forbids specifying range of elements to initialize" msgstr "" ! #: c-parse.y:1492 c-parse.y:1522 objc/objc-parse.y:1537 objc/objc-parse.y:1567 ! msgid "ISO C forbids nested functions" ! msgstr "ISO C förbjuder nästlade funktioner" ! ! #: c-parse.y:1696 objc/objc-parse.y:1742 ! msgid "ISO C forbids forward references to `enum' types" msgstr "" ! #: c-parse.y:1708 cp/parse.y:2342 objc/objc-parse.y:1754 msgid "comma at end of enumerator list" ! msgstr "komma i slutet av uppräkningslista" ! #: c-parse.y:1716 objc/objc-parse.y:1762 msgid "no semicolon at end of struct or union" ! msgstr "inget semikolon vid slutet av struktur eller union" ! #: c-parse.y:1725 objc/objc-parse.y:1771 objc/objc-parse.y:2848 msgid "extra semicolon in struct or union specified" ! msgstr "extra semikolon i struktur eller union angivet" ! #: c-parse.y:1740 objc/objc-parse.y:1800 msgid "ISO C doesn't support unnamed structs/unions" ! msgstr "ISO C stödjer inte ej namnsatta strukturer/unioner" ! #: c-parse.y:1754 objc/objc-parse.y:1814 msgid "ISO C forbids member declarations with no members" + msgstr "ISO C förbjuder medlemsdeklarationer utan medlemmar" + + #: c-parse.y:1833 objc/objc-parse.y:1893 + msgid "attributes on type name ignored" msgstr "" ! #: c-parse.y:1911 c-parse.y:1915 c-parse.y:1919 objc/objc-parse.y:1971 ! #: objc/objc-parse.y:1975 objc/objc-parse.y:1979 ! msgid "storage class specifier in array declarator" msgstr "" ! #: c-parse.y:1934 objc/objc-parse.y:1994 ! msgid "deprecated use of label at end of compound statement" ! msgstr "" ! ! #: c-parse.y:1951 objc/objc-parse.y:2011 ! msgid "ISO C89 forbids mixed declarations and code" ! msgstr "ISO C89 förbjuder blandade deklarationer och kod" ! ! #: c-parse.y:2025 objc/objc-parse.y:2089 msgid "ISO C forbids label declarations" msgstr "" ! #: c-parse.y:2074 cp/parse.y:1578 objc/objc-parse.y:2138 msgid "braced-group within expression allowed only inside a function" msgstr "" ! #: c-parse.y:2189 objc/objc-parse.y:2253 msgid "empty body in an else-statement" ! msgstr "tom kropp i else-sats" ! #: c-parse.y:2299 objc/objc-parse.y:2363 msgid "ISO C forbids `goto *expr;'" ! msgstr "ISO C förbjuder \"goto *expr;\"" ! #: c-parse.y:2395 objc/objc-parse.y:2459 msgid "ISO C forbids forward parameter declarations" msgstr "" *************** msgstr "" *** 1877,3098 **** #. it caused problems with the code in expand_builtin which #. tries to verify that BUILT_IN_NEXT_ARG is being used #. correctly. ! #: c-parse.y:1907 objc-parse.y:1971 msgid "ISO C requires a named argument before `...'" ! msgstr "" ! #: c-parse.y:1987 objc-parse.y:2051 msgid "`...' in old-style identifier list" ! msgstr "" ! ! #: /usr/share/bison.simple:639 ! msgid "parse error; also virtual memory exceeded" ! msgstr "" ! ! #: /usr/share/bison.simple:643 ! msgid "parse error" ! msgstr "" ! #: c-parse.y:2331 cp/spew.c:1423 objc-parse.y:3051 #, c-format msgid "%s at end of input" ! msgstr "" ! #: c-parse.y:2337 cp/spew.c:1429 objc-parse.y:3057 #, c-format msgid "%s before %s'%c'" ! msgstr "" ! #: c-parse.y:2339 cp/spew.c:1431 objc-parse.y:3059 #, c-format msgid "%s before %s'\\x%x'" ! msgstr "" ! #: c-parse.y:2344 cp/spew.c:1436 objc-parse.y:3064 #, c-format msgid "%s before string constant" ! msgstr "" ! #: c-parse.y:2348 cp/spew.c:1440 objc-parse.y:3068 #, c-format msgid "%s before numeric constant" ! msgstr "" ! #: c-parse.y:2350 cp/spew.c:1443 objc-parse.y:3070 #, c-format msgid "%s before \"%s\"" ! msgstr "" ! #: c-parse.y:2352 cp/spew.c:1445 objc-parse.y:3072 #, c-format msgid "%s before '%s' token" ! msgstr "" ! ! #: c-parse.y:2433 objc-parse.y:3153 ! #, c-format ! msgid "invalid identifier `%s'" ! msgstr "" ! #: c-parse.y:2505 objc-parse.y:3225 #, c-format ! msgid "syntax error before '%s' token" ! msgstr "" ! #: c-parse.y:2536 cp/lex.c:951 objc-parse.y:3256 msgid "YYDEBUG not defined." ! msgstr "" ! #: c-pragma.c:119 msgid "" "#pragma pack (pop) encountered without matching #pragma pack (push, )" ! msgstr "" ! #: c-pragma.c:137 #, c-format msgid "" "#pragma pack(pop, %s) encountered without matching #pragma pack(push, %s, " ")" msgstr "" ! #: c-pragma.c:243 msgid "junk at end of '#pragma pack'" ! msgstr "" ! #: c-pragma.c:291 msgid "junk at end of #pragma weak" ! msgstr "" ! ! #: c-pragma.c:394 cpplib.c:753 ! msgid "malformed #pragma directive" ! msgstr "" ! #: c-semantics.c:505 msgid "break statement not within loop or switch" ! msgstr "" ! #: c-semantics.c:523 msgid "continue statement not within a loop" msgstr "" ! #: c-semantics.c:630 #, c-format msgid "%s qualifier ignored on asm" msgstr "" ! #: c-typeck.c:119 #, c-format msgid "`%s' has an incomplete type" ! msgstr "" ! #: c-typeck.c:141 cp/call.c:2525 msgid "invalid use of void expression" ! msgstr "" ! #: c-typeck.c:150 msgid "invalid use of array with unspecified bounds" msgstr "" ! #: c-typeck.c:158 #, c-format msgid "invalid use of undefined type `%s %s'" msgstr "" #. If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. ! #: c-typeck.c:162 #, c-format msgid "invalid use of incomplete typedef `%s'" msgstr "" ! #: c-typeck.c:390 c-typeck.c:404 msgid "function types not truly compatible in ISO C" ! msgstr "" ! #: c-typeck.c:553 msgid "types are not quite compatible" ! msgstr "" ! #: c-typeck.c:704 msgid "sizeof applied to a function type" ! msgstr "" ! #: c-typeck.c:710 msgid "sizeof applied to a void type" ! msgstr "" ! #: c-typeck.c:719 msgid "sizeof applied to an incomplete type" ! msgstr "" ! #: c-typeck.c:760 c-typeck.c:2742 msgid "arithmetic on pointer to an incomplete type" ! msgstr "" ! #: c-typeck.c:787 msgid "__alignof__ applied to an incomplete type" msgstr "" ! #: c-typeck.c:809 msgid "`__alignof' applied to a bit-field" msgstr "" ! #: c-typeck.c:982 cp/typeck.c:1767 msgid "invalid use of non-lvalue array" msgstr "" ! #: c-typeck.c:1157 #, c-format msgid "%s has no member named `%s'" ! msgstr "" ! #: c-typeck.c:1188 #, c-format msgid "request for member `%s' in something not a structure or union" ! msgstr "" ! #: c-typeck.c:1221 msgid "dereferencing pointer to incomplete type" ! msgstr "" ! #: c-typeck.c:1225 msgid "dereferencing `void *' pointer" ! msgstr "" ! #: c-typeck.c:1242 cp/typeck.c:2373 #, c-format msgid "invalid type argument of `%s'" ! msgstr "" ! #: c-typeck.c:1261 cp/typeck.c:2399 msgid "subscript missing in array reference" msgstr "" ! #: c-typeck.c:1282 cp/typeck.c:2420 msgid "array subscript has type `char'" ! msgstr "" ! #: c-typeck.c:1290 c-typeck.c:1379 cp/typeck.c:2427 cp/typeck.c:2505 msgid "array subscript is not an integer" ! msgstr "" ! #: c-typeck.c:1323 msgid "ISO C forbids subscripting `register' array" msgstr "" ! #: c-typeck.c:1325 msgid "ISO C89 forbids subscripting non-lvalue array" msgstr "" ! #: c-typeck.c:1358 msgid "subscript has type `char'" ! msgstr "" ! #: c-typeck.c:1374 cp/typeck.c:2500 msgid "subscripted value is neither array nor pointer" msgstr "" ! #: c-typeck.c:1425 #, c-format msgid "`%s' undeclared here (not in a function)" ! msgstr "" ! #: c-typeck.c:1432 #, c-format msgid "`%s' undeclared (first use in this function)" ! msgstr "" ! #: c-typeck.c:1437 msgid "(Each undeclared identifier is reported only once" ! msgstr "" ! #: c-typeck.c:1438 msgid "for each function it appears in.)" ! msgstr "" ! #: c-typeck.c:1455 #, c-format msgid "local declaration of `%s' hides instance variable" msgstr "" ! #: c-typeck.c:1520 msgid "called object is not a function" ! msgstr "" ! #: c-typeck.c:1603 cp/typeck.c:3133 msgid "too many arguments to function" ! msgstr "" ! #: c-typeck.c:1626 #, c-format msgid "type of formal parameter %d is incomplete" msgstr "" ! #: c-typeck.c:1639 #, c-format msgid "%s as integer rather than floating due to prototype" msgstr "" ! #: c-typeck.c:1642 #, c-format msgid "%s as complex rather than floating due to prototype" msgstr "" ! #: c-typeck.c:1645 #, c-format msgid "%s as floating rather than integer due to prototype" msgstr "" ! #: c-typeck.c:1648 #, c-format msgid "%s as floating rather than complex due to prototype" msgstr "" ! #: c-typeck.c:1658 #, c-format msgid "%s as `float' rather than `double' due to prototype" msgstr "" ! #: c-typeck.c:1673 #, c-format msgid "%s with different width due to prototype" msgstr "" ! #: c-typeck.c:1707 #, c-format msgid "%s as unsigned due to prototype" ! msgstr "" ! #: c-typeck.c:1709 #, c-format msgid "%s as signed due to prototype" ! msgstr "" ! #: c-typeck.c:1744 cp/typeck.c:3235 msgid "too few arguments to function" ! msgstr "" ! #: c-typeck.c:1785 msgid "suggest parentheses around + or - inside shift" ! msgstr "" ! #: c-typeck.c:1792 msgid "suggest parentheses around && within ||" ! msgstr "" ! #: c-typeck.c:1801 msgid "suggest parentheses around arithmetic in operand of |" ! msgstr "" ! #: c-typeck.c:1804 msgid "suggest parentheses around comparison in operand of |" ! msgstr "" ! #: c-typeck.c:1813 msgid "suggest parentheses around arithmetic in operand of ^" ! msgstr "" ! #: c-typeck.c:1816 msgid "suggest parentheses around comparison in operand of ^" ! msgstr "" ! #: c-typeck.c:1823 msgid "suggest parentheses around + or - in operand of &" ! msgstr "" ! #: c-typeck.c:1826 msgid "suggest parentheses around comparison in operand of &" ! msgstr "" ! #: c-typeck.c:1833 msgid "comparisons like X<=Y<=Z do not have their mathematical meaning" ! msgstr "" ! #: c-typeck.c:2087 cp/typeck.c:3514 msgid "right shift count is negative" ! msgstr "" ! #: c-typeck.c:2094 cp/typeck.c:3520 msgid "right shift count >= width of type" ! msgstr "" ! #: c-typeck.c:2119 cp/typeck.c:3539 msgid "left shift count is negative" ! msgstr "" ! #: c-typeck.c:2122 cp/typeck.c:3541 msgid "left shift count >= width of type" ! msgstr "" ! #: c-typeck.c:2147 msgid "shift count is negative" ! msgstr "" ! #: c-typeck.c:2149 msgid "shift count >= width of type" ! msgstr "" ! #: c-typeck.c:2170 cp/typeck.c:3576 msgid "comparing floating point with == or != is unsafe" ! msgstr "" ! #: c-typeck.c:2194 c-typeck.c:2200 msgid "ISO C forbids comparison of `void *' with function pointer" ! msgstr "" ! #: c-typeck.c:2203 c-typeck.c:2245 c-typeck.c:2273 msgid "comparison of distinct pointer types lacks a cast" msgstr "" ! #: c-typeck.c:2218 c-typeck.c:2224 c-typeck.c:2294 c-typeck.c:2300 msgid "comparison between pointer and integer" ! msgstr "" ! #: c-typeck.c:2240 c-typeck.c:2268 msgid "ISO C forbids ordered comparisons of pointers to functions" ! msgstr "" ! #: c-typeck.c:2265 msgid "comparison of complete and incomplete pointers" ! msgstr "" ! #: c-typeck.c:2281 c-typeck.c:2288 msgid "ordered comparison of pointer with integer zero" msgstr "" ! #: c-typeck.c:2314 cp/typeck.c:3748 msgid "unordered comparison on non-floating point argument" msgstr "" ! #: c-typeck.c:2528 msgid "comparison between signed and unsigned" ! msgstr "" ! #: c-typeck.c:2574 cp/typeck.c:3993 msgid "comparison of promoted ~unsigned with constant" msgstr "" ! #: c-typeck.c:2582 cp/typeck.c:4001 msgid "comparison of promoted ~unsigned with unsigned" msgstr "" ! #: c-typeck.c:2644 msgid "pointer of type `void *' used in arithmetic" ! msgstr "" ! #: c-typeck.c:2650 msgid "pointer to a function used in arithmetic" ! msgstr "" ! #: c-typeck.c:2728 msgid "pointer of type `void *' used in subtraction" ! msgstr "" ! #: c-typeck.c:2730 msgid "pointer to a function used in subtraction" ! msgstr "" ! #: c-typeck.c:2788 msgid "wrong type argument to unary plus" msgstr "" ! #: c-typeck.c:2799 msgid "wrong type argument to unary minus" msgstr "" ! #: c-typeck.c:2815 msgid "wrong type argument to bit-complement" msgstr "" ! #: c-typeck.c:2826 msgid "wrong type argument to abs" ! msgstr "" ! #: c-typeck.c:2838 msgid "wrong type argument to conjugation" msgstr "" ! #: c-typeck.c:2852 msgid "wrong type argument to unary exclamation mark" msgstr "" ! #: c-typeck.c:2906 c-typeck.c:2932 #, c-format msgid "wrong type argument to %s" ! msgstr "" ! #: c-typeck.c:2926 #, c-format msgid "%s of pointer to unknown structure" msgstr "" ! #: c-typeck.c:2991 msgid "invalid lvalue in increment" msgstr "" ! #: c-typeck.c:2992 msgid "invalid lvalue in decrement" msgstr "" ! #: c-typeck.c:3000 cp/typeck.c:4556 msgid "increment" msgstr "" ! #: c-typeck.c:3000 cp/typeck.c:4556 msgid "decrement" msgstr "" ! #: c-typeck.c:3053 msgid "ISO C forbids the address of a cast expression" msgstr "" ! #: c-typeck.c:3067 msgid "invalid lvalue in unary `&'" msgstr "" ! #: c-typeck.c:3099 #, c-format msgid "attempt to take address of bit-field structure member `%s'" msgstr "" ! #: c-typeck.c:3207 c-typeck.c:4553 c-typeck.c:4569 c-typeck.c:4585 ! #: cp/typeck.c:4744 diagnostic.c:1408 gcc.c:3934 #, c-format msgid "%s" ! msgstr "" ! #: c-typeck.c:3264 msgid "ISO C forbids use of conditional expressions as lvalues" msgstr "" ! #: c-typeck.c:3267 msgid "ISO C forbids use of compound expressions as lvalues" msgstr "" ! #: c-typeck.c:3270 msgid "ISO C forbids use of cast expressions as lvalues" msgstr "" ! #: c-typeck.c:3287 #, c-format msgid "%s of read-only member `%s'" msgstr "" ! #: c-typeck.c:3291 #, c-format msgid "%s of read-only variable `%s'" msgstr "" ! #: c-typeck.c:3294 #, c-format msgid "%s of read-only location" msgstr "" ! #: c-typeck.c:3312 #, c-format msgid "cannot take address of bitfield `%s'" ! msgstr "" ! #: c-typeck.c:3339 #, c-format msgid "global register variable `%s' used in nested function" ! msgstr "" ! #: c-typeck.c:3343 #, c-format msgid "register variable `%s' used in nested function" ! msgstr "" ! #: c-typeck.c:3350 #, c-format msgid "address of global register variable `%s' requested" ! msgstr "" ! #: c-typeck.c:3362 msgid "cannot put object with volatile field into register" msgstr "" ! #: c-typeck.c:3366 #, c-format msgid "address of register variable `%s' requested" ! msgstr "" ! #: c-typeck.c:3474 msgid "signed and unsigned type in conditional expression" ! msgstr "" ! #: c-typeck.c:3481 msgid "ISO C forbids conditional expr with only one void side" msgstr "" ! #: c-typeck.c:3497 c-typeck.c:3503 msgid "ISO C forbids conditional expr between `void *' and function pointer" msgstr "" ! #: c-typeck.c:3508 msgid "pointer type mismatch in conditional expression" msgstr "" ! #: c-typeck.c:3515 c-typeck.c:3529 msgid "pointer/integer type mismatch in conditional expression" msgstr "" ! #: c-typeck.c:3521 c-typeck.c:3535 ! msgid "ANSI C forbids conditional expr between 0 and function pointer" ! msgstr "" ! ! #: c-typeck.c:3547 msgid "type mismatch in conditional expression" msgstr "typfel i villkorsuttryck" ! #: c-typeck.c:3620 cp/typeck.c:5007 msgid "left-hand operand of comma expression has no effect" msgstr "" ! #: c-typeck.c:3659 msgid "cast specifies array type" msgstr "" ! #: c-typeck.c:3665 msgid "cast specifies function type" msgstr "" ! #: c-typeck.c:3675 msgid "ISO C forbids casting nonscalar to the same type" msgstr "" ! #: c-typeck.c:3696 msgid "ISO C forbids casts to union type" msgstr "ISO C förbjuder typkonvertering till unionstyper" ! #: c-typeck.c:3712 msgid "cast to union type from type not present in union" msgstr "typkonvertering till unionstyp från typ som ej finns i unionen" #. There are qualifiers present in IN_OTYPE that are not #. present in IN_TYPE. ! #: c-typeck.c:3757 msgid "cast discards qualifiers from pointer target type" msgstr "" ! #: c-typeck.c:3772 msgid "cast increases required alignment of target type" msgstr "" ! #: c-typeck.c:3778 cp/typeck.c:5422 msgid "cast from pointer to integer of different size" ! msgstr "" ! #: c-typeck.c:3783 msgid "cast does not match function type" ! msgstr "" ! #: c-typeck.c:3790 cp/typeck.c:5429 msgid "cast to pointer from integer of different size" ! msgstr "" #. Now we have handled acceptable kinds of LHS that are not truly lvalues. #. Reject anything strange now. ! #: c-typeck.c:3932 msgid "invalid lvalue in assignment" ! msgstr "" #. Convert new value to destination type. ! #: c-typeck.c:3941 c-typeck.c:3965 c-typeck.c:3980 cp/typeck.c:5544 ! #: cp/typeck.c:5693 msgid "assignment" ! msgstr "" ! #: c-typeck.c:4145 c-typeck.c:4212 #, c-format msgid "%s makes qualified function pointer from unqualified" msgstr "" ! #: c-typeck.c:4149 c-typeck.c:4192 #, c-format msgid "%s discards qualifiers from pointer target type" msgstr "" ! #: c-typeck.c:4155 msgid "ISO C prohibits argument conversion to union type" msgstr "" ! #: c-typeck.c:4184 #, c-format msgid "ISO C forbids %s between function pointer and `void *'" msgstr "ISO C förbjuder %s mellan funktionspekare och \"void *\"" ! #: c-typeck.c:4201 #, c-format msgid "pointer targets in %s differ in signedness" msgstr "" ! #: c-typeck.c:4217 #, c-format msgid "%s from incompatible pointer type" msgstr "" ! #: c-typeck.c:4233 #, c-format msgid "%s makes pointer from integer without a cast" ! msgstr "" ! #: c-typeck.c:4241 #, c-format msgid "%s makes integer from pointer without a cast" msgstr "" ! #: c-typeck.c:4253 c-typeck.c:4256 #, c-format msgid "incompatible type for argument %d of `%s'" msgstr "" ! #: c-typeck.c:4260 #, c-format msgid "incompatible type for argument %d of indirect function call" msgstr "" ! #: c-typeck.c:4264 #, c-format msgid "incompatible types in %s" msgstr "inkompatibla typer i %s" #. Function name is known; supply it. ! #: c-typeck.c:4295 #, c-format msgid "passing arg %d of `%s'" msgstr "" #. Function name unknown (call through ptr); just give arg number. ! #: c-typeck.c:4305 #, c-format msgid "passing arg %d of pointer to function" msgstr "" ! #: c-typeck.c:4372 msgid "initializer for static variable is not constant" msgstr "" ! #: c-typeck.c:4378 msgid "initializer for static variable uses complicated arithmetic" msgstr "" ! #: c-typeck.c:4386 msgid "aggregate initializer is not constant" msgstr "" ! #: c-typeck.c:4388 msgid "aggregate initializer uses complicated arithmetic" msgstr "" ! #: c-typeck.c:4395 msgid "traditional C rejects automatic aggregate initialization" msgstr "" ! #: c-typeck.c:4556 c-typeck.c:4572 c-typeck.c:4588 #, c-format msgid "(near initialization for `%s')" msgstr "" ! #: c-typeck.c:4638 cp/typeck2.c:506 msgid "char-array initialized from wide string" msgstr "" ! #: c-typeck.c:4645 cp/typeck2.c:513 msgid "int-array initialized from non-wide string" msgstr "" ! #: c-typeck.c:4662 cp/typeck2.c:529 msgid "initializer-string for array of chars is too long" msgstr "" ! #: c-typeck.c:4689 msgid "array initialized from non-constant array expression" msgstr "" ! #: c-typeck.c:4706 c-typeck.c:4708 c-typeck.c:4714 c-typeck.c:4741 ! #: c-typeck.c:5927 msgid "initializer element is not constant" msgstr "" ! #: c-typeck.c:4720 c-typeck.c:4747 c-typeck.c:5933 ! msgid "initializer element is not computable at load time" ! msgstr "" ! ! #: c-typeck.c:4736 msgid "initialization" msgstr "" ! #: c-typeck.c:4784 c-typeck.c:4800 cp/typeck2.c:605 msgid "invalid initializer" msgstr "" ! #: c-typeck.c:5264 msgid "extra brace group at end of initializer" msgstr "" ! #: c-typeck.c:5276 msgid "missing braces around initializer" msgstr "" ! #: c-typeck.c:5310 msgid "braces around scalar initializer" msgstr "" ! #: c-typeck.c:5391 ! msgid "missing initializer" msgstr "" ! #: c-typeck.c:5404 ! msgid "empty braces in initializer" msgstr "" ! #: c-typeck.c:5454 ! msgid "empty scalar initializer" msgstr "" ! #: c-typeck.c:5459 ! msgid "extra elements in scalar initializer" msgstr "" ! #: c-typeck.c:5511 ! #, c-format ! msgid "zero or negative array size `%s'" msgstr "" ! #: c-typeck.c:5584 c-typeck.c:5586 ! msgid "nonconstant array index in initializer" msgstr "" ! #: c-typeck.c:5588 msgid "array index in non-array initializer" msgstr "" ! #: c-typeck.c:5590 ! msgid "duplicate array index in initializer" msgstr "" ! #: c-typeck.c:5596 ! msgid "empty index range in initializer" msgstr "" ! #: c-typeck.c:5600 ! msgid "ISO C89 forbids specifying element to initialize" msgstr "" ! #: c-typeck.c:5631 ! #, c-format ! msgid "unknown field `%s' specified in initializer" msgstr "" ! #: c-typeck.c:5634 ! #, c-format ! msgid "field `%s' already initialized" msgstr "" ! #: c-typeck.c:5640 ! msgid "ISO C89 forbids specifying structure member to initialize" msgstr "" ! #: c-typeck.c:5949 ! msgid "duplicate initializer" msgstr "" ! #: c-typeck.c:6273 msgid "excess elements in char array initializer" msgstr "" ! #: c-typeck.c:6280 c-typeck.c:6315 msgid "excess elements in struct initializer" msgstr "" ! #: c-typeck.c:6382 msgid "excess elements in union initializer" msgstr "" ! #: c-typeck.c:6398 msgid "traditional C rejects initialization of unions" msgstr "" ! #: c-typeck.c:6461 c-typeck.c:6472 msgid "excess elements in array initializer" msgstr "" ! #: c-typeck.c:6511 msgid "excess elements in scalar initializer" msgstr "" ! #: c-typeck.c:6545 msgid "asm template is not a string constant" msgstr "" ! #: c-typeck.c:6569 msgid "invalid lvalue in asm statement" msgstr "" ! #: c-typeck.c:6604 msgid "modification by `asm'" msgstr "" ! #: c-typeck.c:6623 cp/typeck.c:6716 msgid "function declared `noreturn' has a `return' statement" msgstr "" ! #: c-typeck.c:6636 ! msgid "`return' with a value, in function returning void" msgstr "" ! #: c-typeck.c:6640 msgid "return" ! msgstr "" ! #: c-typeck.c:6691 msgid "function returns address of local variable" ! msgstr "" ! #: c-typeck.c:6726 msgid "switch quantity not an integer" ! msgstr "" ! #: c-typeck.c:6737 msgid "`long' switch expression not converted to `int' in ISO C" msgstr "" #: calls.c:1882 #, c-format msgid "inlining failed in call to `%s'" ! msgstr "" #: calls.c:1883 calls.c:2196 msgid "called from here" ! msgstr "" #: calls.c:2195 #, c-format msgid "can't inline call to `%s'" ! msgstr "" #: calls.c:2233 msgid "function call has aggregate value" msgstr "" ! #: collect2.c:448 msgid "internal error" msgstr "internt fel" ! #: collect2.c:929 msgid "no arguments" msgstr "inga argument" ! #: collect2.c:1267 collect2.c:1415 collect2.c:1459 #, c-format msgid "fopen %s" msgstr "fopen %s" ! #: collect2.c:1270 collect2.c:1420 collect2.c:1462 #, c-format msgid "fclose %s" msgstr "fclose %s" ! #: collect2.c:1279 #, c-format msgid "collect2 version %s" msgstr "" ! #: collect2.c:1369 #, c-format msgid "%d constructor(s) found\n" ! msgstr "" ! #: collect2.c:1370 #, c-format msgid "%d destructor(s) found\n" ! msgstr "" ! #: collect2.c:1371 #, c-format msgid "%d frame table(s) found\n" msgstr "" ! #: collect2.c:1523 #, c-format msgid "%s terminated with signal %d [%s]%s" ! msgstr "" ! #: collect2.c:1542 #, c-format msgid "%s returned %d exit status" ! msgstr "" ! #: collect2.c:1570 #, c-format msgid "[cannot find %s]" ! msgstr "" ! #: collect2.c:1585 #, c-format msgid "cannot find `%s'" ! msgstr "" ! #: collect2.c:1596 collect2.c:1599 #, c-format msgid "redirecting stdout: %s" ! msgstr "" ! #: collect2.c:1642 #, c-format msgid "[Leaving %s]\n" ! msgstr "" ! #: collect2.c:1865 #, c-format msgid "" "\n" "write_c_file - output name is %s, prefix is %s\n" msgstr "" ! #: collect2.c:2083 msgid "cannot find `nm'" ! msgstr "" ! #: collect2.c:2093 collect2.c:2535 msgid "pipe" ! msgstr "" ! #: collect2.c:2097 collect2.c:2539 msgid "fdopen" ! msgstr "" ! #: collect2.c:2123 collect2.c:2565 #, c-format msgid "dup2 %d 1" ! msgstr "" ! #: collect2.c:2126 collect2.c:2129 collect2.c:2142 collect2.c:2568 ! #: collect2.c:2571 collect2.c:2584 #, c-format msgid "close %d" ! msgstr "" ! #: collect2.c:2132 #, c-format msgid "execvp %s" ! msgstr "" ! #: collect2.c:2186 #, c-format msgid "init function found in object %s" msgstr "" ! #: collect2.c:2194 #, c-format msgid "fini function found in object %s" msgstr "" ! #: collect2.c:2217 collect2.c:2623 msgid "fclose" ! msgstr "" ! #: collect2.c:2262 #, c-format msgid "unable to open file '%s'" ! msgstr "" ! #: collect2.c:2264 #, c-format msgid "unable to stat file '%s'" msgstr "" ! #: collect2.c:2270 #, c-format msgid "unable to mmap file '%s'" ! msgstr "" ! #: collect2.c:2423 msgid "not found\n" ! msgstr "" ! #: collect2.c:2425 collect2.c:2602 #, c-format msgid "dynamic dependency %s not found" msgstr "" ! #: collect2.c:2445 #, c-format msgid "bad magic number in file '%s'" ! msgstr "" ! #: collect2.c:2467 msgid "dynamic dependencies.\n" ! msgstr "" ! #: collect2.c:2526 msgid "cannot find `ldd'" ! msgstr "" ! #: collect2.c:2574 #, c-format msgid "execv %s" ! msgstr "" ! #: collect2.c:2587 msgid "" "\n" "ldd output with constructors/destructors.\n" msgstr "" ! #: collect2.c:2614 #, c-format msgid "unable to open dynamic dependency '%s'" msgstr "" ! #: collect2.c:2716 #, c-format msgid "%s: not a COFF file" ! msgstr "" ! #: collect2.c:2835 #, c-format msgid "%s: cannot open as COFF file" ! msgstr "" ! #: collect2.c:2891 #, c-format msgid "Library lib%s not found" ! msgstr "" ! #: collect2.c:3014 #, c-format msgid "open %s" ! msgstr "" ! #: collect2.c:3037 msgid "incompatibilities between object file & expected values" msgstr "" ! #: collect2.c:3110 #, c-format msgid "" "\n" "Processing symbol table #%d, offset = 0x%.8lx, kind = %s\n" msgstr "" ! #: collect2.c:3119 msgid "string section missing" ! msgstr "" ! #: collect2.c:3122 msgid "section pointer missing" ! msgstr "" ! #: collect2.c:3170 msgid "no symbol table found" ! msgstr "" ! #: collect2.c:3183 msgid "no cmd_strings found" ! msgstr "" ! #: collect2.c:3195 msgid "" "\n" "Updating header and load commands.\n" "\n" msgstr "" ! #: collect2.c:3202 #, c-format msgid "load command map, %d cmds, new size %ld.\n" ! msgstr "" ! #: collect2.c:3233 msgid "" "writing load commands.\n" "\n" msgstr "" ! #: collect2.c:3253 #, c-format msgid "close %s" msgstr "" ! #: collect2.c:3327 msgid "could not convert 0x%l.8x into a region" msgstr "" ! #: collect2.c:3331 #, c-format msgid "%s function, region %d, offset = %ld (0x%.8lx)\n" msgstr "" ! #: collect2.c:3458 msgid "bad magic number" msgstr "" ! #: collect2.c:3459 msgid "bad header version" msgstr "" ! #: collect2.c:3460 msgid "bad raw header version" msgstr "" ! #: collect2.c:3461 msgid "raw header buffer too small" msgstr "" ! #: collect2.c:3462 msgid "old raw header file" msgstr "" ! #: collect2.c:3463 msgid "unsupported version" ! msgstr "" ! #: collect2.c:3465 #, c-format msgid "unknown {de,en}code_mach_o_hdr return value %d" msgstr "" ! #: collect2.c:3485 #, c-format msgid "fstat %s" ! msgstr "" ! #: collect2.c:3522 collect2.c:3570 #, c-format msgid "lseek %s 0" ! msgstr "" ! #: collect2.c:3526 #, c-format msgid "read %s" ! msgstr "" ! #: collect2.c:3529 #, c-format msgid "read %ld bytes, expected %ld, from %s" ! msgstr "" ! #: collect2.c:3550 #, c-format msgid "msync %s" ! msgstr "" ! #: collect2.c:3557 #, c-format msgid "munmap %s" ! msgstr "" ! #: collect2.c:3574 #, c-format msgid "write %s" ! msgstr "" ! #: collect2.c:3577 #, c-format msgid "wrote %ld bytes, expected %ld, to %s" ! msgstr "" ! #: combine.c:12664 #, c-format msgid "" ";; Combiner statistics: %d attempts, %d substitutions (%d requiring new " --- 2182,5935 ---- #. it caused problems with the code in expand_builtin which #. tries to verify that BUILT_IN_NEXT_ARG is being used #. correctly. ! #: c-parse.y:2421 objc/objc-parse.y:2485 msgid "ISO C requires a named argument before `...'" ! msgstr "ISO C kräver ett namnsatt argument före \"...\"" ! #: c-parse.y:2540 objc/objc-parse.y:2604 msgid "`...' in old-style identifier list" ! msgstr "\"...\" i en gammaldags identifierarlista" ! #: c-parse.y:2875 cp/spew.c:1480 objc/objc-parse.y:3574 #, c-format msgid "%s at end of input" ! msgstr "%s vid slutet av indatan" ! #: c-parse.y:2881 cp/spew.c:1486 objc/objc-parse.y:3580 #, c-format msgid "%s before %s'%c'" ! msgstr "%s före %s'%c'" ! #: c-parse.y:2883 cp/spew.c:1488 objc/objc-parse.y:3582 #, c-format msgid "%s before %s'\\x%x'" ! msgstr "%s före %s'\\x%x'" ! #: c-parse.y:2887 cp/spew.c:1492 objc/objc-parse.y:3586 #, c-format msgid "%s before string constant" ! msgstr "%s före strängkonstant" ! #: c-parse.y:2891 cp/spew.c:1496 objc/objc-parse.y:3590 #, c-format msgid "%s before numeric constant" ! msgstr "%s före numerisk konstant" ! #: c-parse.y:2893 objc/objc-parse.y:3592 #, c-format msgid "%s before \"%s\"" ! msgstr "%s före \"%s\"" ! #: c-parse.y:2895 objc/objc-parse.y:3594 #, c-format msgid "%s before '%s' token" ! msgstr "%s före symbolen '%s'" ! #: c-parse.y:3029 objc/objc-parse.y:3757 #, c-format ! msgid "syntax error at '%s' token" ! msgstr "syntaxfel vid token \"%s\"" ! #: c-parse.y:3059 ch/parse.c:4329 cp/lex.c:936 objc/objc-parse.y:3787 msgid "YYDEBUG not defined." ! msgstr "YYDEBUG är inte definierad." ! #: c-pragma.c:108 msgid "" "#pragma pack (pop) encountered without matching #pragma pack (push, )" ! msgstr "#pragma pack (pop) påträffat utan matchande #pragma pack (push, )" ! #: c-pragma.c:126 #, c-format msgid "" "#pragma pack(pop, %s) encountered without matching #pragma pack(push, %s, " ")" msgstr "" + "#pragma pack(pop, %s) påträffat utan matchande #pragma pack(push, %s, )" ! #: c-pragma.c:249 msgid "junk at end of '#pragma pack'" ! msgstr "skräp vid slutet av \"#pragma pack\"" ! #: c-pragma.c:298 msgid "junk at end of #pragma weak" ! msgstr "skräp vid slutet av #pragma weak" ! #: c-semantics.c:537 msgid "break statement not within loop or switch" ! msgstr "break-sats som inte är i en loop eller switch" ! #: c-semantics.c:555 msgid "continue statement not within a loop" + msgstr "continue-sats som inte är i en loop" + + #: c-semantics.c:650 + msgid "destructor needed for `%#D'" + msgstr "destruerare behövs för \"%#D\"" + + #: c-semantics.c:651 + msgid "where case label appears here" msgstr "" ! #: c-semantics.c:654 ! msgid "" ! "(enclose actions of previous case statements requiring destructors in their " ! "own scope.)" ! msgstr "" ! ! #: c-semantics.c:697 c-typeck.c:6841 #, c-format msgid "%s qualifier ignored on asm" msgstr "" ! #: c-typeck.c:122 #, c-format msgid "`%s' has an incomplete type" ! msgstr "\"%s\" har en inkomplett typ" ! #: c-typeck.c:144 cp/call.c:2563 msgid "invalid use of void expression" ! msgstr "ogiltig användning av void-uttryck" ! #: c-typeck.c:153 msgid "invalid use of array with unspecified bounds" msgstr "" ! #: c-typeck.c:161 #, c-format msgid "invalid use of undefined type `%s %s'" msgstr "" #. If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. ! #: c-typeck.c:165 #, c-format msgid "invalid use of incomplete typedef `%s'" msgstr "" ! #: c-typeck.c:396 c-typeck.c:410 msgid "function types not truly compatible in ISO C" ! msgstr "funktionstyper inte riktigt kompatibla i ISO C" ! #: c-typeck.c:561 msgid "types are not quite compatible" ! msgstr "typerna är inte riktigt kompatibla" ! #: c-typeck.c:714 msgid "sizeof applied to a function type" ! msgstr "sizeof applicerad på en funktionstyp" ! #: c-typeck.c:720 msgid "sizeof applied to a void type" ! msgstr "sizeof applicerat på typen void" ! #: c-typeck.c:727 msgid "sizeof applied to an incomplete type" ! msgstr "sizeof applicerat på en inkomplett typ" ! #: c-typeck.c:780 c-typeck.c:2793 msgid "arithmetic on pointer to an incomplete type" ! msgstr "aritmetik på pekare till inkomplett typ" ! #: c-typeck.c:808 msgid "__alignof__ applied to an incomplete type" msgstr "" ! #: c-typeck.c:834 msgid "`__alignof' applied to a bit-field" msgstr "" ! #: c-typeck.c:1025 cp/typeck.c:1793 msgid "invalid use of non-lvalue array" msgstr "" ! #: c-typeck.c:1200 #, c-format msgid "%s has no member named `%s'" ! msgstr "%s har ingen medlem med namn \"%s\"" ! #: c-typeck.c:1231 #, c-format msgid "request for member `%s' in something not a structure or union" ! msgstr "begäran av medlem \"%s\" i något som inte är en struktur eller union" ! #: c-typeck.c:1264 ch/expr.c:810 msgid "dereferencing pointer to incomplete type" ! msgstr "derefererar pekare till inkomplett typ" ! #: c-typeck.c:1268 ch/expr.c:814 msgid "dereferencing `void *' pointer" ! msgstr "derefererar \"void *\"-pekare" ! #: c-typeck.c:1285 cp/typeck.c:2403 #, c-format msgid "invalid type argument of `%s'" ! msgstr "ogiltigt typargument till \"%s\"" ! #: c-typeck.c:1304 cp/typeck.c:2429 msgid "subscript missing in array reference" msgstr "" ! #: c-typeck.c:1325 cp/typeck.c:2471 msgid "array subscript has type `char'" ! msgstr "fältindex har typen \"char\"" ! #: c-typeck.c:1333 c-typeck.c:1422 cp/typeck.c:2478 cp/typeck.c:2557 msgid "array subscript is not an integer" ! msgstr "fältindex är inte ett heltal" ! #: c-typeck.c:1366 msgid "ISO C forbids subscripting `register' array" msgstr "" ! #: c-typeck.c:1368 msgid "ISO C89 forbids subscripting non-lvalue array" msgstr "" ! #: c-typeck.c:1401 msgid "subscript has type `char'" ! msgstr "index har typen \"char\"" ! #: c-typeck.c:1417 cp/typeck.c:2552 msgid "subscripted value is neither array nor pointer" msgstr "" ! #: c-typeck.c:1468 #, c-format msgid "`%s' undeclared here (not in a function)" ! msgstr "\"%s\" odeklarerad här (inte i en funktion)" ! #: c-typeck.c:1475 #, c-format msgid "`%s' undeclared (first use in this function)" ! msgstr "\"%s\" odeklarerad (första förekomsten i denna funktionen)" ! #: c-typeck.c:1480 msgid "(Each undeclared identifier is reported only once" ! msgstr "(Varje odeklarerad identifierare rapporteras bara" ! #: c-typeck.c:1481 msgid "for each function it appears in.)" ! msgstr "en gång för varje funktion den finns i.)" ! #: c-typeck.c:1498 #, c-format msgid "local declaration of `%s' hides instance variable" msgstr "" ! #: c-typeck.c:1563 msgid "called object is not a function" ! msgstr "anropat objekt är inte en funktion" ! #: c-typeck.c:1647 cp/typeck.c:3190 msgid "too many arguments to function" ! msgstr "för många argument till funktion" ! #: c-typeck.c:1670 #, c-format msgid "type of formal parameter %d is incomplete" msgstr "" ! #: c-typeck.c:1683 #, c-format msgid "%s as integer rather than floating due to prototype" msgstr "" ! #: c-typeck.c:1686 ! #, c-format ! msgid "%s as integer rather than complex due to prototype" ! msgstr "" ! ! #: c-typeck.c:1689 #, c-format msgid "%s as complex rather than floating due to prototype" msgstr "" ! #: c-typeck.c:1692 #, c-format msgid "%s as floating rather than integer due to prototype" msgstr "" ! #: c-typeck.c:1695 ! #, c-format ! msgid "%s as complex rather than integer due to prototype" ! msgstr "%s som complex istället för heltal grund av prototyp" ! ! #: c-typeck.c:1698 #, c-format msgid "%s as floating rather than complex due to prototype" msgstr "" ! #: c-typeck.c:1708 #, c-format msgid "%s as `float' rather than `double' due to prototype" msgstr "" ! #: c-typeck.c:1725 #, c-format msgid "%s with different width due to prototype" msgstr "" ! #: c-typeck.c:1759 #, c-format msgid "%s as unsigned due to prototype" ! msgstr "%s som unsigned på grund av prototyp" ! #: c-typeck.c:1761 #, c-format msgid "%s as signed due to prototype" ! msgstr "%s som signed på grund av prototyp" ! #: c-typeck.c:1795 cp/typeck.c:3298 msgid "too few arguments to function" ! msgstr "för få argument till funktion" ! #: c-typeck.c:1836 msgid "suggest parentheses around + or - inside shift" ! msgstr "föreslår parenteser runt + eller - inuti skift" ! #: c-typeck.c:1843 msgid "suggest parentheses around && within ||" ! msgstr "föreslår parenteser runt && inuti ||" ! #: c-typeck.c:1852 msgid "suggest parentheses around arithmetic in operand of |" ! msgstr "föreslår parenteser runt aritmetik inuti operanden till |" ! #: c-typeck.c:1855 msgid "suggest parentheses around comparison in operand of |" ! msgstr "föreslår parenteser runt jämförelse inuti operanden till |" ! #: c-typeck.c:1864 msgid "suggest parentheses around arithmetic in operand of ^" ! msgstr "föreslår parenteser runt aritmetik inuti operanden till ^" ! #: c-typeck.c:1867 msgid "suggest parentheses around comparison in operand of ^" ! msgstr "föreslår parenteser runt jämförelse inuti operanden till ^" ! #: c-typeck.c:1874 msgid "suggest parentheses around + or - in operand of &" ! msgstr "föreslår parenteser runt + eller - inuti operanden till &" ! #: c-typeck.c:1877 msgid "suggest parentheses around comparison in operand of &" ! msgstr "föreslår parenteser runt jämförelser inuti operanden till &" ! #: c-typeck.c:1884 msgid "comparisons like X<=Y<=Z do not have their mathematical meaning" ! msgstr "jämförelser som X<=Y<=Z har inte sin matematiska mening" ! #: c-typeck.c:2138 cp/typeck.c:3577 msgid "right shift count is negative" ! msgstr "högershiftoperanden är negativ" ! #: c-typeck.c:2145 cp/typeck.c:3583 msgid "right shift count >= width of type" ! msgstr "högershiftoperanden >= storleken på typen" ! #: c-typeck.c:2170 cp/typeck.c:3602 msgid "left shift count is negative" ! msgstr "vänstershiftoperanden är negativ" ! #: c-typeck.c:2173 cp/typeck.c:3604 msgid "left shift count >= width of type" ! msgstr "vänstershiftoperanden >= storleken på typen" ! #: c-typeck.c:2198 msgid "shift count is negative" ! msgstr "shiftoperanden är negativ" ! #: c-typeck.c:2200 msgid "shift count >= width of type" ! msgstr "shiftoperanden >= storleken på typen" ! #: c-typeck.c:2221 cp/typeck.c:3639 msgid "comparing floating point with == or != is unsafe" ! msgstr "jämföra flyttal med == eller != är osäkert" ! #: c-typeck.c:2245 c-typeck.c:2251 msgid "ISO C forbids comparison of `void *' with function pointer" ! msgstr "ISO C förbjuder jämförelse mellan \"void *\" och funktionspekare" ! #: c-typeck.c:2254 c-typeck.c:2296 c-typeck.c:2324 msgid "comparison of distinct pointer types lacks a cast" msgstr "" ! #: c-typeck.c:2269 c-typeck.c:2275 c-typeck.c:2345 c-typeck.c:2351 msgid "comparison between pointer and integer" ! msgstr "jämförelse mellan pekare och heltal" ! #: c-typeck.c:2291 c-typeck.c:2319 msgid "ISO C forbids ordered comparisons of pointers to functions" ! msgstr "ISO C förbjuder ordningsjämförelse på pekare till funktioner" ! #: c-typeck.c:2316 msgid "comparison of complete and incomplete pointers" ! msgstr "jämförelse av kompletta och inkompletta pekare" ! #: c-typeck.c:2332 c-typeck.c:2339 msgid "ordered comparison of pointer with integer zero" msgstr "" ! #: c-typeck.c:2365 cp/typeck.c:3772 msgid "unordered comparison on non-floating point argument" msgstr "" ! #: c-typeck.c:2579 msgid "comparison between signed and unsigned" ! msgstr "jämföreslse mellan signed och unsigned" ! #: c-typeck.c:2625 cp/typeck.c:4018 msgid "comparison of promoted ~unsigned with constant" msgstr "" ! #: c-typeck.c:2633 cp/typeck.c:4026 msgid "comparison of promoted ~unsigned with unsigned" msgstr "" ! #: c-typeck.c:2695 msgid "pointer of type `void *' used in arithmetic" ! msgstr "pekare av typen \"void *\" använd med aritmetik" ! #: c-typeck.c:2701 msgid "pointer to a function used in arithmetic" ! msgstr "pekare till funktion använd med aritmetik" ! #: c-typeck.c:2779 msgid "pointer of type `void *' used in subtraction" ! msgstr "pekare av typ \"void *\" använd i subtraktion" ! #: c-typeck.c:2781 msgid "pointer to a function used in subtraction" ! msgstr "pekare till funktion använd i subtraktion" ! #: c-typeck.c:2839 msgid "wrong type argument to unary plus" msgstr "" ! #: c-typeck.c:2850 msgid "wrong type argument to unary minus" msgstr "" ! #: c-typeck.c:2862 ! msgid "ISO C does not support `~' for complex conjugation" ! msgstr "ISO C stödjer inte ~ för komplex konjugering" ! ! #: c-typeck.c:2868 msgid "wrong type argument to bit-complement" msgstr "" ! #: c-typeck.c:2879 msgid "wrong type argument to abs" ! msgstr "fel typ på argument till abs" ! #: c-typeck.c:2891 msgid "wrong type argument to conjugation" msgstr "" ! #: c-typeck.c:2905 msgid "wrong type argument to unary exclamation mark" msgstr "" ! #: c-typeck.c:2948 ! msgid "ISO C does not support `++' and `--' on complex types" ! msgstr "ISO C stöder inte \"++\" och \"--\" på komplexa typer" ! ! #: c-typeck.c:2962 c-typeck.c:2988 #, c-format msgid "wrong type argument to %s" ! msgstr "fel typ på argument till %s" ! #: c-typeck.c:2982 #, c-format msgid "%s of pointer to unknown structure" msgstr "" ! #: c-typeck.c:3052 msgid "invalid lvalue in increment" msgstr "" ! #: c-typeck.c:3053 msgid "invalid lvalue in decrement" msgstr "" ! #: c-typeck.c:3061 cp/typeck.c:4595 msgid "increment" msgstr "" ! #: c-typeck.c:3061 cp/typeck.c:4595 msgid "decrement" msgstr "" ! #: c-typeck.c:3117 msgid "ISO C forbids the address of a cast expression" msgstr "" ! #: c-typeck.c:3131 msgid "invalid lvalue in unary `&'" msgstr "" ! #: c-typeck.c:3163 #, c-format msgid "attempt to take address of bit-field structure member `%s'" msgstr "" ! #. condition met at compile time ! #: c-typeck.c:3271 c-typeck.c:4632 c-typeck.c:4648 c-typeck.c:4664 ! #: ch/parse.c:361 ch/typeck.c:160 cp/typeck.c:4788 diagnostic.c:1471 ! #: gcc.c:4214 java/expr.c:383 java/verify.c:1448 java/verify.c:1449 ! #: java/verify.c:1464 tradcif.y:540 tradcpp.c:4113 #, c-format msgid "%s" ! msgstr "%s" ! #: c-typeck.c:3328 msgid "ISO C forbids use of conditional expressions as lvalues" msgstr "" ! #: c-typeck.c:3331 msgid "ISO C forbids use of compound expressions as lvalues" msgstr "" ! #: c-typeck.c:3334 msgid "ISO C forbids use of cast expressions as lvalues" msgstr "" ! #: c-typeck.c:3351 #, c-format msgid "%s of read-only member `%s'" msgstr "" ! #: c-typeck.c:3355 #, c-format msgid "%s of read-only variable `%s'" msgstr "" ! #: c-typeck.c:3358 #, c-format msgid "%s of read-only location" msgstr "" ! #: c-typeck.c:3376 #, c-format msgid "cannot take address of bitfield `%s'" ! msgstr "kan inte ta adressen till bitfält \"%s\"" ! #: c-typeck.c:3403 ch/typeck.c:3679 ch/xtypeck.c:62 #, c-format msgid "global register variable `%s' used in nested function" ! msgstr "global registervariabel \"%s\" använd i nästlad funktion" ! #: c-typeck.c:3407 ch/typeck.c:3683 ch/xtypeck.c:66 #, c-format msgid "register variable `%s' used in nested function" ! msgstr "registervariabel \\\"%s\\\" använd i nästlad funktion" ! #: c-typeck.c:3414 ch/typeck.c:3690 ch/xtypeck.c:73 #, c-format msgid "address of global register variable `%s' requested" ! msgstr "adress på global registervariabel \"%s\" efterfrågad" ! #: c-typeck.c:3426 ch/typeck.c:3702 ch/xtypeck.c:85 msgid "cannot put object with volatile field into register" msgstr "" ! #: c-typeck.c:3430 ch/typeck.c:3706 ch/xtypeck.c:89 #, c-format msgid "address of register variable `%s' requested" ! msgstr "adress på register variabel \"%s\" efterfrågad" ! #: c-typeck.c:3538 msgid "signed and unsigned type in conditional expression" ! msgstr "typ signed och unsigned i villkorsuttryck" ! #: c-typeck.c:3545 msgid "ISO C forbids conditional expr with only one void side" msgstr "" ! #: c-typeck.c:3561 c-typeck.c:3568 msgid "ISO C forbids conditional expr between `void *' and function pointer" msgstr "" ! #: c-typeck.c:3574 msgid "pointer type mismatch in conditional expression" msgstr "" ! #: c-typeck.c:3581 c-typeck.c:3591 msgid "pointer/integer type mismatch in conditional expression" msgstr "" ! #: c-typeck.c:3605 msgid "type mismatch in conditional expression" msgstr "typfel i villkorsuttryck" ! #: c-typeck.c:3674 cp/typeck.c:5020 msgid "left-hand operand of comma expression has no effect" msgstr "" ! #: c-typeck.c:3713 msgid "cast specifies array type" msgstr "" ! #: c-typeck.c:3719 msgid "cast specifies function type" msgstr "" ! #: c-typeck.c:3729 msgid "ISO C forbids casting nonscalar to the same type" msgstr "" ! #: c-typeck.c:3750 msgid "ISO C forbids casts to union type" msgstr "ISO C förbjuder typkonvertering till unionstyper" ! #: c-typeck.c:3766 msgid "cast to union type from type not present in union" msgstr "typkonvertering till unionstyp från typ som ej finns i unionen" #. There are qualifiers present in IN_OTYPE that are not #. present in IN_TYPE. ! #: c-typeck.c:3811 msgid "cast discards qualifiers from pointer target type" msgstr "" ! #: c-typeck.c:3826 msgid "cast increases required alignment of target type" msgstr "" ! #: c-typeck.c:3832 cp/typeck.c:5435 msgid "cast from pointer to integer of different size" ! msgstr "typkonvertering från pekare till heltal av annan storlek" ! #: c-typeck.c:3837 msgid "cast does not match function type" ! msgstr "typkonvertering matchar inte en funktionstyp" ! #: c-typeck.c:3844 cp/typeck.c:5442 msgid "cast to pointer from integer of different size" ! msgstr "typkonvertering till pekare från heltal med annan storlek" #. Now we have handled acceptable kinds of LHS that are not truly lvalues. #. Reject anything strange now. ! #: c-typeck.c:4004 msgid "invalid lvalue in assignment" ! msgstr "ogiltigt lvalue i tilldelning" #. Convert new value to destination type. ! #: c-typeck.c:4013 c-typeck.c:4038 c-typeck.c:4055 ch/typeck.c:2337 ! #: cp/typeck.c:5557 cp/typeck.c:5714 msgid "assignment" ! msgstr "tilldelning" ! #: c-typeck.c:4222 c-typeck.c:4289 #, c-format msgid "%s makes qualified function pointer from unqualified" msgstr "" ! #: c-typeck.c:4226 c-typeck.c:4269 #, c-format msgid "%s discards qualifiers from pointer target type" msgstr "" ! #: c-typeck.c:4232 msgid "ISO C prohibits argument conversion to union type" msgstr "" ! #: c-typeck.c:4261 #, c-format msgid "ISO C forbids %s between function pointer and `void *'" msgstr "ISO C förbjuder %s mellan funktionspekare och \"void *\"" ! #: c-typeck.c:4278 #, c-format msgid "pointer targets in %s differ in signedness" msgstr "" ! #: c-typeck.c:4294 #, c-format msgid "%s from incompatible pointer type" msgstr "" ! # fixme: vad är %s ! #: c-typeck.c:4310 #, c-format msgid "%s makes pointer from integer without a cast" ! msgstr "%s skapar pekare från heltal utan typkonvertering" ! #: c-typeck.c:4318 #, c-format msgid "%s makes integer from pointer without a cast" msgstr "" ! #: c-typeck.c:4332 c-typeck.c:4335 #, c-format msgid "incompatible type for argument %d of `%s'" msgstr "" ! #: c-typeck.c:4339 #, c-format msgid "incompatible type for argument %d of indirect function call" msgstr "" ! #: c-typeck.c:4343 #, c-format msgid "incompatible types in %s" msgstr "inkompatibla typer i %s" #. Function name is known; supply it. ! #: c-typeck.c:4374 #, c-format msgid "passing arg %d of `%s'" msgstr "" #. Function name unknown (call through ptr); just give arg number. ! #: c-typeck.c:4384 #, c-format msgid "passing arg %d of pointer to function" msgstr "" ! #: c-typeck.c:4451 msgid "initializer for static variable is not constant" msgstr "" ! #: c-typeck.c:4457 msgid "initializer for static variable uses complicated arithmetic" msgstr "" ! #: c-typeck.c:4465 msgid "aggregate initializer is not constant" msgstr "" ! #: c-typeck.c:4467 msgid "aggregate initializer uses complicated arithmetic" msgstr "" ! #: c-typeck.c:4474 msgid "traditional C rejects automatic aggregate initialization" msgstr "" ! #: c-typeck.c:4635 c-typeck.c:4651 c-typeck.c:4667 #, c-format msgid "(near initialization for `%s')" msgstr "" ! #: c-typeck.c:4719 cp/typeck2.c:524 msgid "char-array initialized from wide string" msgstr "" ! #: c-typeck.c:4726 cp/typeck2.c:531 msgid "int-array initialized from non-wide string" msgstr "" ! #: c-typeck.c:4743 cp/typeck2.c:547 msgid "initializer-string for array of chars is too long" msgstr "" ! #: c-typeck.c:4770 msgid "array initialized from non-constant array expression" msgstr "" ! #: c-typeck.c:4787 c-typeck.c:4789 c-typeck.c:4805 c-typeck.c:4826 ! #: c-typeck.c:6221 msgid "initializer element is not constant" msgstr "" ! #: c-typeck.c:4821 msgid "initialization" + msgstr "initiering" + + #: c-typeck.c:4832 c-typeck.c:6226 + msgid "initializer element is not computable at load time" msgstr "" ! #: c-typeck.c:4869 c-typeck.c:4885 cp/typeck2.c:624 msgid "invalid initializer" msgstr "" ! #: c-typeck.c:5353 msgid "extra brace group at end of initializer" msgstr "" ! #: c-typeck.c:5373 msgid "missing braces around initializer" msgstr "" ! #: c-typeck.c:5417 msgid "braces around scalar initializer" msgstr "" ! #: c-typeck.c:5469 ! msgid "initialization of flexible array member in a nested context" msgstr "" ! #: c-typeck.c:5471 ! msgid "initialization of a flexible array member" msgstr "" ! #: c-typeck.c:5481 ! msgid "deprecated initialization of zero-length array" msgstr "" ! #: c-typeck.c:5486 ! msgid "initialization of zero-length array before end of structure" msgstr "" ! #: c-typeck.c:5491 ! msgid "initialization of zero-length array inside a nested context" msgstr "" ! #: c-typeck.c:5510 ! msgid "missing initializer" msgstr "" ! #: c-typeck.c:5535 ! msgid "empty scalar initializer" ! msgstr "" ! ! #: c-typeck.c:5540 ! msgid "extra elements in scalar initializer" ! msgstr "" ! ! #: c-typeck.c:5624 ! msgid "initialization designators may not nest" ! msgstr "" ! ! #: c-typeck.c:5645 c-typeck.c:5715 msgid "array index in non-array initializer" msgstr "" ! #: c-typeck.c:5650 c-typeck.c:5767 ! msgid "field name not in record or union initializer" msgstr "" ! #: c-typeck.c:5711 c-typeck.c:5713 ! msgid "nonconstant array index in initializer" msgstr "" ! #: c-typeck.c:5718 ! msgid "array index in initializer exceeds array bounds" msgstr "" ! #: c-typeck.c:5729 ! msgid "empty index range in initializer" msgstr "" ! #: c-typeck.c:5738 ! msgid "array index range in initializer exceeds array bounds" msgstr "" ! #: c-typeck.c:5779 ! #, c-format ! msgid "unknown field `%s' specified in initializer" msgstr "" ! #: c-typeck.c:5816 c-typeck.c:5837 c-typeck.c:6291 ! msgid "initialized field with side-effects overwritten" msgstr "" ! #: c-typeck.c:6504 msgid "excess elements in char array initializer" msgstr "" ! #: c-typeck.c:6511 c-typeck.c:6550 msgid "excess elements in struct initializer" msgstr "" ! #: c-typeck.c:6617 msgid "excess elements in union initializer" msgstr "" ! #: c-typeck.c:6634 msgid "traditional C rejects initialization of unions" msgstr "" ! #: c-typeck.c:6697 msgid "excess elements in array initializer" msgstr "" ! #: c-typeck.c:6723 msgid "excess elements in scalar initializer" msgstr "" ! #: c-typeck.c:6834 ch/parse.c:2026 msgid "asm template is not a string constant" msgstr "" ! #: c-typeck.c:6866 msgid "invalid lvalue in asm statement" msgstr "" ! #: c-typeck.c:6939 msgid "modification by `asm'" msgstr "" ! #: c-typeck.c:6958 cp/typeck.c:6603 msgid "function declared `noreturn' has a `return' statement" msgstr "" ! #: c-typeck.c:6965 ! msgid "`return' with no value, in function returning non-void" msgstr "" ! #: c-typeck.c:6971 ! msgid "`return' with a value, in function returning void" ! msgstr "\"return\" med värde i funktion som returnerar void" ! ! #: c-typeck.c:6975 msgid "return" ! msgstr "return" ! #: c-typeck.c:7026 msgid "function returns address of local variable" ! msgstr "funktionen returnerar adress till en lokal variabel" ! #: c-typeck.c:7083 cp/semantics.c:533 msgid "switch quantity not an integer" ! msgstr "switch-argument är inte ett heltal" ! #: c-typeck.c:7094 msgid "`long' switch expression not converted to `int' in ISO C" msgstr "" + #: c-typeck.c:7137 cp/decl.c:5224 + msgid "case label not within a switch statement" + msgstr "case-etikett är inte i en switch-sats" + + #: c-typeck.c:7139 cp/decl.c:5229 + msgid "`default' label not within a switch statement" + msgstr "\"default\"-etikett är inte i en switch-sats" + #: calls.c:1882 #, c-format msgid "inlining failed in call to `%s'" ! msgstr "inlining misslyckades i anrop av \"%s\"" #: calls.c:1883 calls.c:2196 msgid "called from here" ! msgstr "anropad härifrån" #: calls.c:2195 #, c-format msgid "can't inline call to `%s'" ! msgstr "kan inte inline:a anrop till \"%s\"" #: calls.c:2233 msgid "function call has aggregate value" msgstr "" ! #: calls.c:4625 ! msgid "variable offset is passed paritially in stack and in reg" ! msgstr "" ! ! #: calls.c:4627 ! msgid "variable size is passed partially in stack and in reg" ! msgstr "" ! ! #: ch/actions.c:118 ! #, c-format ! msgid "%d errors, %d sorries, do granting" ! msgstr "" ! ! #: ch/actions.c:135 ! msgid "GNU compiler does not support statically allocated objects" ! msgstr "" ! ! #: ch/actions.c:138 objc/objc-act.c:1109 ! #, c-format ! msgid "`%s' cannot be statically allocated" ! msgstr "\"%s\" kan inte vara statiskt allokerad" ! ! #: ch/actions.c:300 ! #, c-format ! msgid "causing unhandled exception `%s' (this is flaged only once)" ! msgstr "" ! ! #: ch/actions.c:438 ! msgid "range failure (not inside function)" ! msgstr "" ! ! #: ch/actions.c:440 ! msgid "possible range failure (not inside function)" ! msgstr "" ! ! #: ch/actions.c:445 ! msgid "expression will always cause RANGEFAIL" ! msgstr "" ! ! #: ch/actions.c:492 ! msgid "right hand side of assignment is a mode" ! msgstr "" ! ! #: ch/actions.c:498 ! #, c-format ! msgid "incompatible modes in %s" ! msgstr "" ! ! #: ch/actions.c:523 ! #, c-format ! msgid "bad string length in %s" ! msgstr "" ! ! #: ch/actions.c:631 ch/actions.c:644 ! #, c-format ! msgid "mode mismatch in %s expression" ! msgstr "" ! ! #: ch/actions.c:638 ! #, c-format ! msgid "%s expression must be referable" ! msgstr "" ! ! #: ch/actions.c:667 ! #, c-format ! msgid "%s not allowed outside a PROC" ! msgstr "" ! ! #: ch/actions.c:673 ! #, c-format ! msgid "%s action in PROC with no declared RESULTS" ! msgstr "" ! ! #: ch/actions.c:704 ! msgid "RETURN not allowed outside PROC" ! msgstr "" ! ! #: ch/actions.c:717 ! msgid "RETURN with a value, in PROC returning void" ! msgstr "" ! ! #: ch/actions.c:726 ! msgid "RETURN with no value and no RESULT action in procedure" ! msgstr "" ! ! #: ch/actions.c:749 ! #, c-format ! msgid "no label named `%s'" ! msgstr "ingen etikett med namn \"%s\"" ! ! #: ch/actions.c:751 ! #, c-format ! msgid "cannot GOTO label `%s' outside current function" ! msgstr "" ! ! #: ch/actions.c:773 ! #, c-format ! msgid "no EXITable label named `%s'" ! msgstr "" ! ! #: ch/actions.c:775 ! #, c-format ! msgid "cannot EXIT label `%s' outside current function" ! msgstr "" ! ! #: ch/actions.c:1018 ! msgid "case selector not compatible with label" ! msgstr "" ! ! #: ch/actions.c:1044 ! msgid "ELSE label not within a CASE statement" ! msgstr "" ! ! #: ch/actions.c:1048 ! msgid "multiple default labels found in a CASE statement" ! msgstr "" ! ! #: ch/actions.c:1049 ! msgid "this is the first ELSE label" ! msgstr "" ! ! #: ch/actions.c:1070 ! msgid "label found outside of CASE statement" ! msgstr "" ! ! #: ch/actions.c:1073 ! msgid "duplicate CASE value" ! msgstr "" ! ! #: ch/actions.c:1074 ch/actions.c:1127 ! msgid "this is the first entry for that value" ! msgstr "" ! ! #: ch/actions.c:1077 ch/actions.c:1130 ! msgid "CASE value out of range" ! msgstr "" ! ! #: ch/actions.c:1079 ch/actions.c:1132 ! msgid "empty range" ! msgstr "" ! ! #: ch/actions.c:1081 ch/actions.c:1134 ! msgid "label within scope of cleanup or variable array" ! msgstr "" ! ! #: ch/actions.c:1105 ch/actions.c:1302 ! msgid "mode in label is not discrete" ! msgstr "" ! ! #: ch/actions.c:1122 ! msgid "label not within a CASE statement" ! msgstr "" ! ! #: ch/actions.c:1282 ! msgid "Lower bound of range must be a discrete literal expression" ! msgstr "" ! ! #: ch/actions.c:1287 ! msgid "Upper bound of range must be a discrete literal expression" ! msgstr "" ! ! #: ch/actions.c:1311 ! msgid "The CASE label is not valid" ! msgstr "" ! ! #: ch/actions.c:1357 ch/expr.c:215 ! msgid "" ! "The number of CASE selectors does not match the number of CASE label lists" ! msgstr "" ! ! #: ch/actions.c:1442 ! #, c-format ! msgid "incomplete CASE - %s not handled" ! msgstr "" ! ! #: ch/actions.c:1461 ! msgid "CASE selector with variable range" ! msgstr "" ! ! #: ch/actions.c:1465 ! msgid "too many cases to do CASE completeness testing" ! msgstr "" ! ! #: ch/actions.c:1550 ! msgid "type of tuple cannot be implicit in multiple assignent" ! msgstr "" ! ! #: ch/actions.c:1552 ! msgid "conditional expression cannot be used in multiple assignent" ! msgstr "" ! ! #: ch/actions.c:1554 ! msgid "internal error - unknown type in multiple assignment" ! msgstr "" ! ! #: ch/actions.c:1558 ! msgid "no operator allowed in multiple assignment," ! msgstr "" ! ! #: ch/actions.c:1568 ! msgid "location modes in multiple assignment are not equivalent" ! msgstr "" ! ! #: ch/actions.c:1606 ! msgid "You may not assign a value to a BUFFER or EVENT location" ! msgstr "" ! ! #: ch/actions.c:1614 ! msgid "can't assign value to READonly location" ! msgstr "" ! ! #: ch/actions.c:1619 ! msgid "cannot assign to location with non-value property" ! msgstr "" ! ! #: ch/actions.c:1639 ! msgid "lefthand side of assignment is not a location" ! msgstr "" ! ! #: ch/actions.c:1715 ch/actions.c:1785 ! msgid "bitstring slice" ! msgstr "" ! ! #: ch/actions.c:1810 ! msgid "LENGTH on left-hand-side is non-portable" ! msgstr "" ! ! #: ch/actions.c:1814 ! msgid "Can only set LENGTH of array location" ! msgstr "" ! ! #: ch/convert.c:63 ! msgid "internal error: trying to make loc-identity with non-location" ! msgstr "" ! ! #: ch/convert.c:117 ! msgid "cannot convert to a boolean mode" ! msgstr "" ! ! #: ch/convert.c:152 ! msgid "cannot convert to a char mode" ! msgstr "" ! ! #: ch/convert.c:248 ! msgid "powerset tuple element out of range" ! msgstr "" ! ! #: ch/convert.c:284 ch/convert.c:312 ! #, c-format ! msgid "incompatible member of powerset tuple (at position #%d)" ! msgstr "" ! ! #: ch/convert.c:394 ! #, c-format ! msgid "no initializer value for fixed field `%s'" ! msgstr "" ! ! #: ch/convert.c:436 ! #, c-format ! msgid "non-constant value for tag field `%s'" ! msgstr "" ! ! #: ch/convert.c:488 ! #, c-format ! msgid "field `%s' in wrong variant" ! msgstr "" ! ! #: ch/convert.c:495 ! #, c-format ! msgid "missing variant fields (at least `%s')" ! msgstr "" ! ! #: ch/convert.c:518 ! #, c-format ! msgid "bad initializer for field `%s'" ! msgstr "" ! ! #: ch/convert.c:525 ! #, c-format ! msgid "no initializer value for variant field `%s'" ! msgstr "" ! ! #: ch/convert.c:531 ! msgid "no selected variant" ! msgstr "" ! ! #: ch/convert.c:546 ch/convert.c:912 ! msgid "mixture of labelled and unlabelled tuple elements" ! msgstr "" ! ! #: ch/convert.c:557 ! msgid "probably not a structure tuple" ! msgstr "" ! ! #: ch/convert.c:559 ! #, c-format ! msgid "excess initializer for field `%s'" ! msgstr "" ! ! #: ch/convert.c:566 ! msgid "excess unnamed initializers" ! msgstr "" ! ! #: ch/convert.c:693 ! msgid "non-constant start index for tuple" ! msgstr "" ! ! #: ch/convert.c:736 ! msgid "invalid array tuple label" ! msgstr "" ! ! #: ch/convert.c:750 ! msgid "non-constant array tuple index range" ! msgstr "" ! ! #: ch/convert.c:759 ! #, c-format ! msgid "incompatible array tuple element %s" ! msgstr "" ! ! #: ch/convert.c:775 ! msgid "multiple (*) or (ELSE) array tuple labels" ! msgstr "" ! ! #: ch/convert.c:784 ! msgid "empty range in array tuple" ! msgstr "" ! ! #: ch/convert.c:801 ! #, c-format ! msgid "array tuple has duplicate index %s" ! msgstr "" ! ! #: ch/convert.c:809 ! msgid "array tuple index out of range" ! msgstr "" ! ! #: ch/convert.c:811 ! msgid "too many array tuple values" ! msgstr "" ! ! #: ch/convert.c:883 ! msgid "dynamic array tuple without (*) or (ELSE)" ! msgstr "" ! ! #: ch/convert.c:885 ! #, c-format ! msgid "missing array tuple element %s" ! msgstr "" ! ! #: ch/convert.c:892 ! #, c-format ! msgid "missing array tuple elements %s : %s" ! msgstr "" ! ! #: ch/convert.c:1086 ! msgid "initializer is not an array or string mode" ! msgstr "" ! ! #: ch/convert.c:1098 ! msgid "destination is too small" ! msgstr "" ! ! #: ch/convert.c:1154 ! msgid "internal error: unknown type of expression" ! msgstr "" ! ! #: ch/decl.c:1033 ! #, c-format ! msgid "`%s' must not be declared readonly" ! msgstr "" ! ! #: ch/decl.c:1037 ! msgid "declaration of readonly variable without initialization" ! msgstr "" ! ! #: ch/decl.c:1059 ! #, c-format ! msgid "no initialisation allowed for `%s'" ! msgstr "" ! ! #: ch/decl.c:1067 ! #, c-format ! msgid "value for loc-identity `%s' is not a location" ! msgstr "" ! ! #: ch/decl.c:1074 ! #, c-format ! msgid "location for `%s' not read-compatible" ! msgstr "" ! ! #: ch/decl.c:1101 ! #, c-format ! msgid "nonconstant initializer for `%s'" ! msgstr "" ! ! #: ch/decl.c:1132 ! msgid "do_decl: internal error: don't know what to initialize" ! msgstr "" ! ! #: ch/decl.c:1189 ! msgid "RECURSIVE PROCs" ! msgstr "" ! ! #: ch/decl.c:1445 ! #, c-format ! msgid "`%s' must not be READonly" ! msgstr "" ! ! #: ch/decl.c:1471 ! msgid "POS may not be specified for a list of field declarations" ! msgstr "" ! ! #: ch/decl.c:1525 ! msgid "(ELSE) case label as well as ELSE variant" ! msgstr "" ! ! #: ch/decl.c:1610 ch/decl.c:1613 ! msgid "inconsistent modes between labels and tag field" ! msgstr "" ! ! #: ch/decl.c:1618 ! msgid "too few tag labels" ! msgstr "" ! ! #: ch/decl.c:1620 ! msgid "too many tag labels" ! msgstr "" ! ! #: ch/decl.c:1658 ! msgid "case label lower limit is not a discrete constant expression" ! msgstr "" ! ! #: ch/decl.c:1660 ! msgid "case label upper limit is not a discrete constant expression" ! msgstr "" ! ! #: ch/decl.c:1670 ! msgid "case label must be a discrete constant expression" ! msgstr "" ! ! #: ch/decl.c:1697 ! msgid "variant label declared here..." ! msgstr "" ! ! #: ch/decl.c:1699 ! msgid "...is duplicated here" ! msgstr "" ! ! #: ch/decl.c:1729 ! #, c-format ! msgid "no field (yet) for tag %s" ! msgstr "" ! ! #: ch/decl.c:1824 ! msgid "non-value mode may only returned by LOC" ! msgstr "" ! ! #: ch/decl.c:1847 ! #, c-format ! msgid "mode of `%s' is not a mode" ! msgstr "" ! ! #: ch/decl.c:1853 ! #, c-format ! msgid "`%s' may only be passed by LOC" ! msgstr "" ! ! #: ch/decl.c:2281 ! #, c-format ! msgid "Nothing named `%s' to grant." ! msgstr "" ! ! #: ch/decl.c:2321 ! #, c-format ! msgid "duplicate grant for `%s'" ! msgstr "" ! ! #: ch/decl.c:2322 ! #, c-format ! msgid "previous grant for `%s'" ! msgstr "" ! ! #: ch/decl.c:2409 ! #, c-format ! msgid "duplicate definition `%s'" ! msgstr "" ! ! #: ch/decl.c:2410 ! #, c-format ! msgid "previous definition of `%s'" ! msgstr "" ! ! #: ch/decl.c:3248 ch/decl.c:3258 ! #, c-format ! msgid "ambiguous choice for seize `%s' -" ! msgstr "" ! ! #: ch/decl.c:3249 ch/decl.c:3259 ! #, c-format ! msgid " - can seize this `%s' -" ! msgstr "" ! ! #: ch/decl.c:3250 ch/decl.c:3261 ! #, c-format ! msgid " - or this granted decl `%s'" ! msgstr "" ! ! #: ch/decl.c:4430 ! #, c-format ! msgid "enumerator value for `%s' is less then 0" ! msgstr "" ! ! #: ch/decl.c:4512 ! #, c-format ! msgid "enumerators `%s' and `%s' have equal values" ! msgstr "" ! ! #: ch/decl.c:4618 ! msgid "undefined value in SET mode is obsolete and deprecated." ! msgstr "" ! ! #: ch/decl.c:4794 ! msgid "BASE variable never declared" ! msgstr "" ! ! #: ch/decl.c:4796 ! msgid "cannot BASE a variable on a PROC/PROCESS name" ! msgstr "" ! ! #: ch/decl.c:4848 ! msgid "INTERNAL ERROR: handle_one_level is broken" ! msgstr "" ! ! #: ch/expr.c:126 ! #, c-format ! msgid "tuple without specified mode not allowed in %s" ! msgstr "" ! ! #: ch/expr.c:128 ! #, c-format ! msgid "conditional expression not allowed in %s" ! msgstr "" ! ! #: ch/expr.c:130 ! #, c-format ! msgid "internal error: unknown expression mode in %s" ! msgstr "" ! ! #: ch/expr.c:147 ! msgid "CASE selector is not a discrete expression" ! msgstr "" ! ! #: ch/expr.c:594 ! msgid "powerset is not addressable" ! msgstr "" ! ! #: ch/expr.c:639 ! msgid "array is not addressable" ! msgstr "" ! ! #: ch/expr.c:687 ! #, c-format ! msgid "Too few arguments in call to `%s'" ! msgstr "" ! ! #: ch/expr.c:689 ! #, c-format ! msgid "Too many arguments in call to `%s'" ! msgstr "" ! ! #: ch/expr.c:758 ! msgid "cannot dereference, not a pointer." ! msgstr "" ! ! #: ch/expr.c:768 ! #, c-format ! msgid "missing '.' operator or undefined mode name `%s'." ! msgstr "" ! ! #: ch/expr.c:771 ! msgid "You have forgotten the '.' operator which must" ! msgstr "" ! ! #: ch/expr.c:772 ! #, c-format ! msgid " precede a STRUCT field reference, or `%s' is an undefined mode" ! msgstr "" ! ! #: ch/expr.c:786 ! msgid "Can't dereference PTR value using unary `->'." ! msgstr "" ! ! #: ch/expr.c:831 ! msgid "invalid type argument of `->'" ! msgstr "" ! ! #: ch/expr.c:856 ch/expr.c:969 ! msgid "operand of '.' is not a STRUCT" ! msgstr "" ! ! #: ch/expr.c:909 ! #, c-format ! msgid "No field named `%s'" ! msgstr "" ! ! #: ch/expr.c:1217 ! msgid "ABS argument must be discrete or real mode" ! msgstr "" ! ! #: ch/expr.c:1250 ! #, c-format ! msgid "argument %d to ABSTIME must be of integer type." ! msgstr "" ! ! #: ch/expr.c:1288 ch/expr.c:1329 ! msgid "parameter 1 must be referable." ! msgstr "" ! ! #: ch/expr.c:1294 ch/expr.c:1335 ch/expr.c:1372 ! msgid "mode mismatch in parameter 1." ! msgstr "" ! ! #: ch/expr.c:1301 ch/expr.c:1342 ! msgid "parameter 2 must be a positive integer." ! msgstr "" ! ! #: ch/expr.c:1436 ! msgid "CARD argument must be powerset mode" ! msgstr "" ! ! #: ch/expr.c:1487 ! msgid "expression for DESCR-builtin must be referable." ! msgstr "" ! ! #: ch/expr.c:1535 ! #, c-format ! msgid "argument to `%s' must be of integer type." ! msgstr "" ! ! #: ch/expr.c:1568 ! #, c-format ! msgid "argument 1 to `%s' must be of floating point mode" ! msgstr "" ! ! #: ch/expr.c:1602 ! #, c-format ! msgid "First argument to `%s' must be a mode" ! msgstr "" ! ! #: ch/expr.c:1609 ! #, c-format ! msgid "READonly modes for %s must have a value" ! msgstr "" ! ! #: ch/expr.c:1692 ! msgid "argument to TERMINATE must be a reference primitive value" ! msgstr "" ! ! #: ch/expr.c:1741 ! msgid "argument 1 to INTTIME must be of mode TIME." ! msgstr "" ! ! #: ch/expr.c:1782 ! #, c-format ! msgid "%s." ! msgstr "%s." ! ! #: ch/expr.c:1888 ! msgid "" ! "LENGTH argument must be string, buffer, event mode, text location or mode" ! msgstr "" ! ! #: ch/expr.c:1917 ! msgid "UPPER argument must have a mode, or be a mode" ! msgstr "" ! ! #: ch/expr.c:1919 ! msgid "LOWER argument must have a mode, or be a mode" ! msgstr "" ! ! #: ch/expr.c:1953 ! msgid "UPPER argument must be string, array, mode or integer" ! msgstr "" ! ! #: ch/expr.c:1955 ! msgid "LOWER argument must be string, array, mode or integer" ! msgstr "" ! ! #: ch/expr.c:1991 ! #, c-format ! msgid "%s argument must be POWERSET mode" ! msgstr "" ! ! #: ch/expr.c:2017 ! #, c-format ! msgid "%s called for empty POWERSET" ! msgstr "" ! ! #: ch/expr.c:2098 ! msgid "argument to NUM is not discrete" ! msgstr "" ! ! #: ch/expr.c:2110 ! msgid "No integer mode which matches expression's mode" ! msgstr "" ! ! #: ch/expr.c:2119 ! msgid "NUM's parameter is below its mode range" ! msgstr "" ! ! #: ch/expr.c:2122 ! msgid "NUM's parameter is above its mode range" ! msgstr "" ! ! #: ch/expr.c:2161 ! msgid "Cannot take SUCC or PRED of a numbered SET" ! msgstr "" ! ! #: ch/expr.c:2169 ! msgid "SUCC or PRED must not be done on a PTR." ! msgstr "" ! ! #: ch/expr.c:2172 ! msgid "SUCC or PRED for a reference type is not standard." ! msgstr "" ! ! #: ch/expr.c:2182 ! msgid "SUCC or PRED argument must be a discrete mode" ! msgstr "" ! ! #: ch/expr.c:2203 ! #, c-format ! msgid "Taking the %s of a value already at its %s value" ! msgstr "" ! ! #: ch/expr.c:2254 ! msgid "size applied to a function mode" ! msgstr "" ! ! #: ch/expr.c:2260 ! msgid "sizeof applied to a void mode" ! msgstr "" ! ! #: ch/expr.c:2265 ! msgid "sizeof applied to an incomplete mode" ! msgstr "" ! ! #: ch/expr.c:2360 ! msgid "cannot call a PROCESS, you START a PROCESS" ! msgstr "" ! ! #: ch/expr.c:2422 ! #, c-format ! msgid "invalid %s" ! msgstr "" ! ! #: ch/expr.c:2437 ! #, c-format ! msgid "%s parameter %d must be a location" ! msgstr "" ! ! #: ch/expr.c:2445 ! #, c-format ! msgid "%s parameter %d is READ-only" ! msgstr "" ! ! #: ch/expr.c:2488 ! #, c-format ! msgid "LOC actual parameter %d is a non-referable location" ! msgstr "" ! ! #: ch/expr.c:2494 ! #, c-format ! msgid "mode mismatch in parameter %d" ! msgstr "" ! ! #: ch/expr.c:2518 ! #, c-format ! msgid "too many arguments to procedure `%s'" ! msgstr "för många argument till proceduren \"%s\"" ! ! #: ch/expr.c:2521 ! msgid "too many arguments to procedure" ! msgstr "för många argument till procedur" ! ! #: ch/expr.c:2527 ! #, c-format ! msgid "too few arguments to procedure `%s'" ! msgstr "för få argument till proceduren \"%s\"" ! ! #: ch/expr.c:2530 ! msgid "too few arguments to procedure" ! msgstr "för få argument till procedur" ! ! #: ch/expr.c:2596 ! msgid "syntax error (integer used as function)" ! msgstr "" ! ! #: ch/expr.c:2616 ! msgid "syntax error - missing operator, comma, or '('?" ! msgstr "" ! ! #: ch/expr.c:2977 ! #, c-format ! msgid "unimplemented builtin function `%s'" ! msgstr "" ! ! #: ch/expr.c:2981 ! #, c-format ! msgid "internal error - bad builtin function `%s'" ! msgstr "" ! ! #: ch/expr.c:2995 ! msgid "empty expression in string index" ! msgstr "" ! ! #: ch/expr.c:3000 ! msgid "only one expression allowed in string index" ! msgstr "" ! ! #: ch/expr.c:3017 ! msgid "invalid: primval ( untyped_exprlist )" ! msgstr "" ! ! #: ch/expr.c:3081 ch/expr.c:3095 ! msgid "operand is variable-size bitstring/power-set" ! msgstr "" ! ! #: ch/expr.c:3245 ! #, c-format ! msgid "tree code `%s' unhandled in build_compare_set_expr" ! msgstr "" ! ! #: ch/expr.c:3410 ! msgid "incompatible modes in concat expression" ! msgstr "" ! ! #: ch/expr.c:3459 ! msgid "Invalid operation on array of chars" ! msgstr "" ! ! #: ch/expr.c:3504 ! msgid "comparison of variant structures is unsafe" ! msgstr "" ! ! #: ch/expr.c:3511 ! msgid "compare with variant records" ! msgstr "" ! ! #: ch/expr.c:3688 ch/expr.c:3924 ! #, c-format ! msgid "incompatible operands to %s" ! msgstr "" ! ! #: ch/expr.c:3740 ! msgid "relational operator not allowed for this mode" ! msgstr "" ! ! #: ch/expr.c:3794 ! #, c-format ! msgid "Cannot use %s operator on PROC mode variable" ! msgstr "" ! ! #: ch/expr.c:3800 ! #, c-format ! msgid "invalid left operand of %s" ! msgstr "" ! ! #: ch/expr.c:3805 ch/expr.c:4357 ! #, c-format ! msgid "invalid right operand of %s" ! msgstr "" ! ! #: ch/expr.c:3819 ! msgid "repetition expression must be constant" ! msgstr "" ! ! #: ch/expr.c:3829 ! msgid "left argument to MOD/REM operator must be integral" ! msgstr "" ! ! #: ch/expr.c:3834 ! msgid "right argument to MOD/REM operator must be integral" ! msgstr "" ! ! #: ch/expr.c:3891 ! msgid "right operand of IN is not a powerset" ! msgstr "" ! ! #: ch/expr.c:3896 ! msgid "left operand of IN incompatible with right operand" ! msgstr "" ! ! #: ch/expr.c:3951 ! msgid "division by zero" ! msgstr "" ! ! #: ch/expr.c:3987 ! msgid "-> operator not allow in constant expression" ! msgstr "" ! ! #: ch/expr.c:4000 ! msgid "taking the address of a string literal is non-standard" ! msgstr "" ! ! #: ch/expr.c:4002 ! msgid "taking the address of a function is non-standard" ! msgstr "" ! ! #: ch/expr.c:4005 ! msgid "ADDR requires a LOCATION argument" ! msgstr "" ! ! #: ch/expr.c:4035 ! msgid "-> expression is not addressable" ! msgstr "" ! ! #: ch/expr.c:4062 ! msgid "ADDR parameter must be a LOCATION" ! msgstr "" ! ! #: ch/expr.c:4071 ! msgid "possible internal error in build_chill_arrow_expr" ! msgstr "" ! ! #: ch/expr.c:4076 ! #, c-format ! msgid "%s is not addressable" ! msgstr "" ! ! #: ch/expr.c:4175 ! msgid "repetition count is not an integer constant" ! msgstr "" ! ! #: ch/expr.c:4183 ! msgid "repetition count < 0" ! msgstr "" ! ! #: ch/expr.c:4188 ! msgid "repetition value not constant" ! msgstr "" ! ! #: ch/expr.c:4200 ! msgid "bitstring repetition of non-constant boolean" ! msgstr "" ! ! #: ch/expr.c:4223 ! msgid "string repetition operand is non-constant bitstring" ! msgstr "" ! ! #: ch/expr.c:4283 ! msgid "non-char, non-bit string repetition" ! msgstr "" ! ! #: ch/expr.c:4311 ! #, c-format ! msgid "invalid operand of %s" ! msgstr "" ! ! #: ch/expr.c:4322 ! #, c-format ! msgid "right operand of %s is not array of boolean" ! msgstr "" ! ! #: ch/expr.c:4335 ! #, c-format ! msgid "%s operator applied to boolean variable" ! msgstr "" ! ! #: ch/expr.c:4406 ! msgid "non-boolean mode in conditional expression" ! msgstr "" ! ! #: ch/grant.c:1977 ! msgid "decode_constant: invalid component_ref" ! msgstr "" ! ! #: ch/grant.c:1985 ! msgid "decode_constant: mode and value mismatch" ! msgstr "" ! ! #: ch/grant.c:1988 ! msgid "decode_constant: cannot decode this mode" ! msgstr "" ! ! #: ch/grant.c:2213 ! msgid "decode_constant_selective: mode and value mismatch" ! msgstr "" ! ! #: ch/grant.c:2216 ! msgid "decode_constant_selective: cannot decode this mode" ! msgstr "" ! ! #: ch/grant.c:2651 ch/lex.c:217 ch/lex.c:2194 config/mips/mips.c:5801 ! #: f/com.c:14549 graph.c:421 java/jcf-parse.c:929 java/jcf-parse.c:1065 ! #: java/lex.c:1724 objc/objc-act.c:751 profile.c:906 profile.c:914 ! #: toplev.c:1842 toplev.c:2226 ! #, c-format ! msgid "can't open %s" ! msgstr "kan inte öppna %s" ! ! #: ch/grant.c:2676 config/mips/mips.c:6127 ! #, c-format ! msgid "can't write to %s" ! msgstr "kan inte skriva till %s" ! ! #: ch/grant.c:2763 ! msgid "FORBID is not yet implemented" ! msgstr "" ! ! #. this nerver should happen ! #: ch/grant.c:2824 ! #, c-format ! msgid "function \"really_grant_this\" called for `%s'." ! msgstr "" ! ! #: ch/inout.c:1645 ! msgid "non-integral text length" ! msgstr "" ! ! #: ch/inout.c:1650 ! msgid "non-constant text length" ! msgstr "" ! ! #: ch/inout.c:1655 ! msgid "text length must be greater then 0" ! msgstr "" ! ! #: ch/inout.c:1755 ! #, c-format ! msgid "argument %d of %s must be of mode ASSOCIATION" ! msgstr "" ! ! #: ch/inout.c:1760 ch/inout.c:2146 ch/inout.c:2516 ch/inout.c:2751 ! #, c-format ! msgid "argument %d of %s must be a location" ! msgstr "" ! ! #: ch/inout.c:1795 ! msgid "argument 2 of ASSOCIATE must not be an empty string" ! msgstr "" ! ! #: ch/inout.c:1811 ! msgid "argument 2 to ASSOCIATE must be a string" ! msgstr "" ! ! #: ch/inout.c:1850 ! msgid "argument 3 to ASSOCIATE must be a string" ! msgstr "" ! ! #: ch/inout.c:2031 ! msgid "Too many arguments in call to MODIFY" ! msgstr "" ! ! #: ch/inout.c:2044 ! msgid "argument 2 of MODIFY must not be an empty string" ! msgstr "" ! ! #: ch/inout.c:2060 ! msgid "argument 2 to MODIFY must be a string" ! msgstr "" ! ! #: ch/inout.c:2094 ! msgid "argument 3 to MODIFY must be a string" ! msgstr "" ! ! #: ch/inout.c:2141 ! #, c-format ! msgid "argument %d of %s must be an ACCESS or TEXT mode" ! msgstr "" ! ! #: ch/inout.c:2355 ! msgid "argument 4 of CONNECT must be of mode WHERE" ! msgstr "" ! ! #: ch/inout.c:2371 ! msgid "index expression for ACCESS without index" ! msgstr "" ! ! #: ch/inout.c:2376 ch/inout.c:2554 ch/inout.c:2636 ch/inout.c:4356 ! #: ch/inout.c:4504 ! msgid "incompatible index mode" ! msgstr "" ! ! #: ch/inout.c:2476 ! msgid "argument 3 to CONNECT must be of mode USAGE" ! msgstr "" ! ! #: ch/inout.c:2511 ! #, c-format ! msgid "argument %d of %s must be of mode ACCESS" ! msgstr "" ! ! #: ch/inout.c:2545 ! msgid "Too few arguments in call to `readrecord'" ! msgstr "" ! ! #: ch/inout.c:2569 ch/inout.c:2648 ! msgid "incompatible record mode" ! msgstr "" ! ! #: ch/inout.c:2574 ! msgid "store location must not be READonly" ! msgstr "" ! ! #: ch/inout.c:2616 ! msgid "Too few arguments in call to `writerecord'" ! msgstr "" ! ! #: ch/inout.c:2643 ! msgid "transfer to ACCESS without record mode" ! msgstr "" ! ! #: ch/inout.c:2746 ! #, c-format ! msgid "argument %d of %s must be of mode TEXT" ! msgstr "" ! ! #: ch/inout.c:2803 ! msgid "TEXT doesn't have a location" ! msgstr "" ! ! #: ch/inout.c:2905 ! msgid "incompatible index mode for SETETEXTACCESS" ! msgstr "" ! ! #: ch/inout.c:2915 ! msgid "incompatible record mode for SETTEXTACCESS" ! msgstr "" ! ! #: ch/inout.c:2945 ! msgid "parameter 2 must be a location" ! msgstr "" ! ! #: ch/inout.c:2955 ! msgid "incompatible modes in parameter 2" ! msgstr "" ! ! #: ch/inout.c:3062 ! msgid "conditional expression not allowed in this context" ! msgstr "" ! ! #: ch/inout.c:3064 ! #, c-format ! msgid "untyped expression as argument %d" ! msgstr "" ! ! #: ch/inout.c:3141 ch/inout.c:3187 ! #, c-format ! msgid "Cannot process %d bits integer for READTEXT argument %d." ! msgstr "" ! ! #: ch/inout.c:3262 ! #, c-format ! msgid "Cannot process %d bits integer WRITETEXT argument %d." ! msgstr "" ! ! #: ch/inout.c:3283 ch/inout.c:3338 ch/inout.c:3417 ch/inout.c:3483 ! #: ch/inout.c:3534 ch/inout.c:3619 ch/inout.c:3654 ! #, c-format ! msgid "argument %d is READonly" ! msgstr "" ! ! #: ch/inout.c:3290 ch/inout.c:3345 ch/inout.c:3424 ch/inout.c:3491 ! #: ch/inout.c:3542 ch/inout.c:3627 ch/inout.c:3659 ! #, c-format ! msgid "argument %d must be referable" ! msgstr "" ! ! #: ch/inout.c:3578 ! #, c-format ! msgid "cannot process argument %d of WRITETEXT, unknown size" ! msgstr "" ! ! #. datatype is not yet implemented, issue a warning ! #: ch/inout.c:3725 ! #, c-format ! msgid "cannot process mode of argument %d for %sTEXT." ! msgstr "" ! ! #: ch/inout.c:3868 ! msgid "too few arguments for this format string" ! msgstr "" ! ! #: ch/inout.c:3893 ch/inout.c:3902 ! #, c-format ! msgid "type of argument %d invalid for conversion code at offset %d" ! msgstr "" ! ! #: ch/inout.c:4012 ! msgid "unmatched open paren" ! msgstr "" ! ! #: ch/inout.c:4026 ch/inout.c:4221 ! #, c-format ! msgid "bad format specification character (offset %d)" ! msgstr "" ! ! #: ch/inout.c:4039 ! #, c-format ! msgid "repetition factor overflow (offset %d)" ! msgstr "" ! ! #: ch/inout.c:4057 ch/inout.c:4064 ch/inout.c:4071 ! #, c-format ! msgid "duplicate qualifier (offset %d)" ! msgstr "" ! ! #: ch/inout.c:4093 ! #, c-format ! msgid "clause width overflow (offset %d)" ! msgstr "" ! ! #: ch/inout.c:4106 ! #, c-format ! msgid "no fraction (offset %d)" ! msgstr "" ! ! #: ch/inout.c:4124 ! #, c-format ! msgid "no fraction width (offset %d)" ! msgstr "" ! ! #: ch/inout.c:4131 ! #, c-format ! msgid "fraction width overflow (offset %d)" ! msgstr "" ! ! #: ch/inout.c:4142 ! #, c-format ! msgid "no exponent (offset %d)" ! msgstr "" ! ! #: ch/inout.c:4160 ! #, c-format ! msgid "no exponent width (offset %d)" ! msgstr "" ! ! #: ch/inout.c:4167 ! #, c-format ! msgid "exponent width overflow (offset %d)" ! msgstr "" ! ! #: ch/inout.c:4208 ! msgid "internal error in check_format_string" ! msgstr "" ! ! #: ch/inout.c:4224 ! #, c-format ! msgid "no padding character (offset %d)" ! msgstr "" ! ! #. too may arguments for format string ! #: ch/inout.c:4256 ! msgid "too many arguments for this format string" ! msgstr "" ! ! #: ch/inout.c:4354 ch/inout.c:4502 ! msgid "missing index expression" ! msgstr "" ! ! #: ch/inout.c:4361 ! msgid "Too few arguments in call to `writetext'" ! msgstr "" ! ! #: ch/inout.c:4374 ! msgid "argument 1 for WRITETEXT must be a TEXT or CHARS(n) VARYING location" ! msgstr "" ! ! #: ch/inout.c:4397 ! msgid "`format string' for WRITETEXT must be a CHARACTER string" ! msgstr "" ! ! #: ch/inout.c:4509 ! msgid "Too few arguments in call to `readtext'" ! msgstr "" ! ! #: ch/inout.c:4522 ! msgid "" ! "argument 1 for READTEXT must be a TEXT location or CHARS(n) [ VARYING ] " ! "expression" ! msgstr "" ! ! #: ch/inout.c:4543 ! msgid "`format string' for READTEXT must be a CHARACTER string" ! msgstr "" ! ! #: ch/lang.c:103 ! msgid "non-constant expression" ! msgstr "" ! ! #: ch/lang.c:189 ! msgid "Ignoring case upon input and" ! msgstr "" ! ! #: ch/lang.c:190 ! msgid "making special words uppercase wouldn't work." ! msgstr "" ! ! #: ch/lang.c:201 ! msgid "Making special words uppercase and" ! msgstr "" ! ! #: ch/lang.c:202 ! msgid " ignoring case upon input wouldn't work." ! msgstr "" ! ! #: ch/lang.c:274 java/typeck.c:178 ! msgid "internal error - use of undefined type" ! msgstr "" ! ! #: ch/lex.c:507 ! msgid "invalid C'xx' " ! msgstr "" ! ! #: ch/lex.c:612 config/mips/mips.c:6133 java/jcf-parse.c:605 ! #: java/jcf-write.c:3341 ! #, c-format ! msgid "can't close %s" ! msgstr "kan inte stänga %s" ! ! #: ch/lex.c:716 ! msgid "malformed exponent part of floating-point literal" ! msgstr "" ! ! #: ch/lex.c:733 ! msgid "real number exceeds range of REAL" ! msgstr "" ! ! #: ch/lex.c:752 ch/lex.c:779 ! msgid "end-of-file in '<>' directive" ! msgstr "" ! ! #: ch/lex.c:785 ! msgid "unrecognized compiler directive" ! msgstr "" ! ! #: ch/lex.c:793 ch/lex.c:839 ! #, c-format ! msgid "unrecognized compiler directive `%s'" ! msgstr "" ! ! #: ch/lex.c:1000 ! msgid "unterminated control sequence" ! msgstr "" ! ! #: ch/lex.c:1015 ch/lex.c:1051 ! msgid "invalid integer literal in control sequence" ! msgstr "" ! ! #: ch/lex.c:1026 ch/lex.c:1034 ! msgid "control sequence overflow" ! msgstr "" ! ! #: ch/lex.c:1028 ch/lex.c:1036 ! msgid "invalid control sequence" ! msgstr "" ! ! #: ch/lex.c:1116 ! msgid "invalid base in read control sequence" ! msgstr "" ! ! #: ch/lex.c:1123 ! msgid "invalid digit in control sequence" ! msgstr "" ! ! #: ch/lex.c:1150 ! msgid "unterminated string literal" ! msgstr "" ! ! #: ch/lex.c:1253 ch/lex.c:1339 ! #, c-format ! msgid "invalid number format `%s'" ! msgstr "" ! ! #: ch/lex.c:1271 ! msgid "integer literal too big" ! msgstr "" ! ! # fixme: spola tillbaka är inte perfekt ! #: ch/lex.c:1400 ! #, c-format ! msgid "can't find %s" ! msgstr "kan inte hitta %s" ! ! #: ch/lex.c:1426 ! msgid "USE_SEIZE_FILE directive must be followed by string" ! msgstr "" ! ! #: ch/lex.c:1698 cpplib.c:920 f/lex.c:1240 ! msgid "invalid #ident" ! msgstr "ogiltig #indent" ! ! #: ch/lex.c:1716 f/lex.c:1257 ! msgid "undefined or invalid # directive" ! msgstr "" ! ! #: ch/lex.c:1770 ch/lex.c:1779 f/lex.c:1313 ! msgid "invalid #line" ! msgstr "ogiltig #line" ! ! #: ch/lex.c:1848 f/lex.c:870 ! msgid "#-lines for entering and leaving files don't match" ! msgstr "" ! ! #: ch/lex.c:1873 f/lex.c:1423 ! msgid "invalid #-line" ! msgstr "ogiltig #-rad" ! ! #: ch/lex.c:2003 ! msgid "missing `=' in compiler directive" ! msgstr "" ! ! #: ch/lex.c:2045 ch/lex.c:2055 ch/lex.c:2096 ! msgid "invalid value follows `=' in compiler directive" ! msgstr "" ! ! #: ch/lex.c:2066 ! #, c-format ! msgid "invalid `%c' character in name" ! msgstr "" ! ! #: ch/lex.c:2079 ! #, c-format ! msgid "`%s' not integer constant synonym " ! msgstr "" ! ! #: ch/lex.c:2102 ! msgid "value out of range in compiler directive" ! msgstr "" ! ! #: ch/lex.c:2219 java/jcf-parse.c:601 ! #, c-format ! msgid "can't reopen %s" ! msgstr "" ! ! #: ch/lex.c:2230 ! msgid "no modules seen" ! msgstr "" ! ! #: ch/loop.c:480 ! msgid "modeless tuple not allowed in this context" ! msgstr "" ! ! #: ch/loop.c:482 ! msgid "IN expression does not have a mode" ! msgstr "" ! ! #: ch/loop.c:489 ! msgid "location enumeration for BOOLS" ! msgstr "" ! ! #: ch/loop.c:517 ! msgid "location enumeration for bit-packed arrays" ! msgstr "" ! ! #: ch/loop.c:526 ch/nloop.c:481 ! msgid "Loop's IN expression is not a composite object" ! msgstr "" ! ! #: ch/loop.c:541 ch/nloop.c:498 ! msgid "start expr must have discrete mode" ! msgstr "" ! ! #: ch/loop.c:547 ch/nloop.c:504 ! msgid "DO FOR start expression is a numbered SET" ! msgstr "" ! ! #: ch/loop.c:555 ch/nloop.c:510 ! msgid "TO expression is a numbered SET" ! msgstr "" ! ! #: ch/loop.c:560 ch/nloop.c:525 ! msgid "TO expr must have discrete mode" ! msgstr "" ! ! #: ch/loop.c:565 ch/nloop.c:531 ! msgid "start expr and TO expr must be compatible" ! msgstr "" ! ! #: ch/loop.c:574 ch/nloop.c:546 ! msgid "BY expr must have discrete mode" ! msgstr "" ! ! #: ch/loop.c:579 ch/nloop.c:552 ! msgid "start expr and BY expr must be compatible" ! msgstr "" ! ! #: ch/loop.c:595 ch/nloop.c:765 ! msgid "loop identifier undeclared" ! msgstr "" ! ! #: ch/loop.c:606 ! msgid "loop variable incompatible with start expression" ! msgstr "" ! ! #: ch/loop.c:633 ch/nloop.c:564 ! msgid "body of DO FOR will never execute" ! msgstr "" ! ! #: ch/loop.c:648 ch/nloop.c:585 ! msgid "BY expression is negative or zero" ! msgstr "" ! ! #: ch/loop.c:847 ch/nloop.c:817 ch/nloop.c:867 ! msgid "Can't iterate through array of BOOL" ! msgstr "" ! ! #: ch/parse.c:159 ! #, c-format ! msgid "there was no start label to match the end label '%s'" ! msgstr "" ! ! #: ch/parse.c:162 ! #, c-format ! msgid "start label '%s' does not match end label '%s'" ! msgstr "" ! ! #: ch/parse.c:192 ! #, c-format ! msgid "`%s' not declared" ! msgstr "\"%s\" är inte deklarerad" ! ! #: ch/parse.c:226 ! msgid "No RETURN or RESULT in procedure" ! msgstr "" ! ! #: ch/parse.c:245 ! msgid "PREFIXED clause with no prelix in unlabeled module" ! msgstr "" ! ! #: ch/parse.c:336 ! #, c-format ! msgid "internal parser error - expected token %d" ! msgstr "" ! ! #: ch/parse.c:529 ! #, c-format ! msgid "'%s!' is not followed by an identifier" ! msgstr "" ! ! #: ch/parse.c:545 ! msgid "expected a name here" ! msgstr "" ! ! #: ch/parse.c:560 ! msgid "expected a name string here" ! msgstr "" ! ! #: ch/parse.c:591 ! #, c-format ! msgid "`%s' undeclared" ! msgstr "\"%s\" är ej deklarerad" ! ! #: ch/parse.c:669 ! msgid "action not allowed in SPEC MODULE" ! msgstr "" ! ! #: ch/parse.c:691 ! msgid "missing defining occurrence" ! msgstr "" ! ! #: ch/parse.c:702 ! msgid "bad defining occurrence following ','" ! msgstr "" ! ! #: ch/parse.c:802 ! msgid "missing '(' in exception list" ! msgstr "" ! ! #: ch/parse.c:827 ! msgid "ON exception names must be unique" ! msgstr "" ! ! #: ch/parse.c:837 ! msgid "syntax error in exception list" ! msgstr "" ! ! #: ch/parse.c:873 ! msgid "empty ON-condition" ! msgstr "" ! ! #: ch/parse.c:938 ! msgid "INIT not allowed at loc-identity declaration" ! msgstr "" ! ! #: ch/parse.c:948 ! msgid "'=' used where ':=' is required" ! msgstr "" ! ! #: ch/parse.c:956 ! msgid "initialization is not allowed in spec module" ! msgstr "" ! ! #: ch/parse.c:964 ! msgid "loc-identity declaration without initialisation" ! msgstr "" ! ! #: ch/parse.c:1008 ! msgid "bad syntax following FORBID" ! msgstr "" ! ! #: ch/parse.c:1023 ! msgid "expected a postfix name here" ! msgstr "" ! ! #: ch/parse.c:1068 ! msgid "expected another rename clause" ! msgstr "" ! ! #: ch/parse.c:1128 ! msgid "syntax error in parameter name list" ! msgstr "" ! ! #: ch/parse.c:1221 ! msgid "NONREF specific without LOC in result attribute" ! msgstr "" ! ! #: ch/parse.c:1223 ! msgid "DYNAMIC specific without LOC in result attribute" ! msgstr "" ! ! #: ch/parse.c:1245 ! msgid "exception names must be unique" ! msgstr "" ! ! #: ch/parse.c:1441 ! msgid "must specify a PROCESS name" ! msgstr "" ! ! #: ch/parse.c:1448 ! msgid "SIGNAL must be in global reach" ! msgstr "" ! ! #: ch/parse.c:1479 ! msgid "syntax error while parsing signal definition statement" ! msgstr "" ! ! #: ch/parse.c:1593 ! msgid "case range list" ! msgstr "" ! ! #: ch/parse.c:1660 ! msgid "misplaced colon in case label" ! msgstr "" ! ! #: ch/parse.c:1707 ! msgid "unrecognized case label list after ','" ! msgstr "" ! ! #: ch/parse.c:1971 ch/parse.c:1997 ! msgid "bad ASM operand" ! msgstr "" ! ! #: ch/parse.c:2067 ! msgid "readonly location modified by 'asm'" ! msgstr "" ! ! #: ch/parse.c:2198 ! msgid "expected 'TO' in step enumeration" ! msgstr "" ! ! #: ch/parse.c:2213 ! msgid "expected 'IN' in FOR control here" ! msgstr "" ! ! #: ch/parse.c:2314 ! msgid "missing DELAY CASE alternative" ! msgstr "" ! ! #. This is probably not possible ! #: ch/parse.c:2348 ! msgid "non-referable location in DO WITH" ! msgstr "" ! ! #: ch/parse.c:2360 ! msgid "WITH element must be of STRUCT mode" ! msgstr "" ! ! #: ch/parse.c:2467 ! msgid "missing ')' in signal/buffer receive alternative" ! msgstr "" ! ! #: ch/parse.c:2481 ! msgid "misplaced 'IN' in signal/buffer receive alternative" ! msgstr "" ! ! #: ch/parse.c:2529 ! msgid "missing RECEIVE alternative" ! msgstr "" ! ! #: ch/parse.c:2655 ! msgid "PROCESS copy number must be integer" ! msgstr "" ! ! #: ch/parse.c:2882 ! msgid "missing parenthesis for procedure call" ! msgstr "" ! ! #: ch/parse.c:2884 ! msgid "expression is not an action" ! msgstr "" ! ! #: ch/parse.c:2918 ! msgid "syntax error in action" ! msgstr "" ! ! #: ch/parse.c:2945 ! msgid "no handler is permitted on this action." ! msgstr "" ! ! #: ch/parse.c:2966 ! msgid "definition follows action" ! msgstr "" ! ! #: ch/parse.c:3042 ! msgid "bad tuple field name list" ! msgstr "" ! ! #: ch/parse.c:3088 ! msgid "invalid syntax for label in tuple" ! msgstr "" ! ! #: ch/parse.c:3133 ! msgid "bad syntax in tuple" ! msgstr "" ! ! #: ch/parse.c:3160 ! msgid "non-mode name before tuple" ! msgstr "" ! ! #: ch/parse.c:3205 ! msgid "invalid expression/location syntax" ! msgstr "" ! ! #: ch/parse.c:3262 ! msgid "RECEIVE expression" ! msgstr "" ! ! #: ch/parse.c:3457 ! msgid "there should not be a ';' here" ! msgstr "" ! ! #: ch/parse.c:3496 ! msgid "missing ELSE/ELSIF in IF expression" ! msgstr "" ! ! #: ch/parse.c:3547 ! msgid "conditional expression not allowed inside parentheses" ! msgstr "" ! ! #: ch/parse.c:3551 ! msgid "mode-less tuple not allowed inside parentheses" ! msgstr "" ! ! #. Z.200 doesn't allow mixed numbered and unnumbered set elements, ! #. but we can do it. Print a warning ! #: ch/parse.c:3664 ! msgid "mixed numbered and unnumbered set elements is not standard" ! msgstr "" ! ! #: ch/parse.c:3667 ! msgid "SET mode must define at least one named value" ! msgstr "" ! ! #: ch/parse.c:3766 ! msgid "POS not allowed for ARRAY" ! msgstr "" ! ! #: ch/parse.c:3776 ! msgid "STEP not allowed in field definition" ! msgstr "" ! ! #: ch/parse.c:3792 ! msgid "missing field name" ! msgstr "" ! ! #: ch/parse.c:3801 ! msgid "bad field name following ','" ! msgstr "" ! ! #: ch/parse.c:3861 ! msgid "expected ':' in structure variant alternative" ! msgstr "" ! ! #: ch/parse.c:3912 ! msgid "missing field" ! msgstr "" ! ! #: ch/parse.c:4060 ! msgid "VARYING bit-strings not implemented" ! msgstr "" ! ! #: ch/parse.c:4121 ! msgid "strings must be composed of chars" ! msgstr "" ! ! #: ch/parse.c:4171 ! msgid "BUFFER modes may not be readonly" ! msgstr "" ! ! #: ch/parse.c:4178 ! msgid "EVENT modes may not be readonly" ! msgstr "" ! ! #: ch/parse.c:4198 ! msgid "SIGNAL is not a valid mode" ! msgstr "" ! ! #: ch/parse.c:4235 ! msgid "syntax error - missing mode" ! msgstr "" ! ! #: ch/parse.c:4282 ! msgid "syntax error - expected a module or end of file" ! msgstr "" ! ! #: ch/satisfy.c:58 ! #, c-format ! msgid " `%s', which depends on ..." ! msgstr "" ! ! #: ch/satisfy.c:90 ! #, c-format ! msgid "Cycle: `%s' depends on ..." ! msgstr "" ! ! #: ch/satisfy.c:92 ! #, c-format ! msgid " `%s'" ! msgstr " `%s'" ! ! #: ch/satisfy.c:151 ! msgid "SYN of this mode not allowed" ! msgstr "" ! ! #: ch/satisfy.c:156 ! msgid "mode of SYN incompatible with value" ! msgstr "" ! ! #: ch/satisfy.c:167 ! msgid "SYN value outside range of its mode" ! msgstr "" ! ! #: ch/satisfy.c:176 ! msgid "INIT string too large for mode" ! msgstr "" ! ! #: ch/satisfy.c:195 ! #, c-format ! msgid "value of %s is not a valid constant" ! msgstr "" ! ! #: ch/satisfy.c:226 ! msgid "mode with non-value property in signal definition" ! msgstr "" ! ! #: ch/satisfy.c:403 ! #, c-format ! msgid "undeclared identifier `%s'" ! msgstr "" ! ! #: ch/satisfy.c:456 ! msgid "RETURNS spec with invalid mode" ! msgstr "" ! ! #: ch/satisfy.c:520 ! msgid "operand to REF is not a mode" ! msgstr "" ! ! #: ch/satisfy.c:554 ! msgid "field with non-value mode in variant structure not allowed" ! msgstr "" ! ! #: ch/satisfy.c:593 ! msgid "buffer element mode must not have non-value property" ! msgstr "" ! ! #: ch/satisfy.c:602 ! msgid "recordmode must not have the non-value property" ! msgstr "" ! ! #: ch/tasking.c:170 ch/tasking.c:218 ! #, c-format ! msgid "Tasking code %ld out of range for `%s'." ! msgstr "" ! ! #: ch/tasking.c:284 ! #, c-format ! msgid "invalid attribute for argument `%s' (only IN or LOC allowed)." ! msgstr "" ! ! #: ch/tasking.c:325 ! msgid "PROCESS may only be declared at module level" ! msgstr "" ! ! #: ch/tasking.c:549 ! #, c-format ! msgid "process name %s never declared" ! msgstr "" ! ! #: ch/tasking.c:554 ! msgid "You may only START a process, not a proc" ! msgstr "" ! ! #: ch/tasking.c:590 ! msgid "SET expression not a location." ! msgstr "" ! ! #: ch/tasking.c:595 ! msgid "SET location must be INSTANCE mode" ! msgstr "" ! ! #: ch/tasking.c:632 ! #, c-format ! msgid "too many arguments to process `%s'" ! msgstr "" ! ! #: ch/tasking.c:635 ! msgid "too many arguments to process" ! msgstr "" ! ! #: ch/tasking.c:640 ! #, c-format ! msgid "too few arguments to process `%s'" ! msgstr "" ! ! #: ch/tasking.c:643 ! msgid "too few arguments to process" ! msgstr "" ! ! #: ch/tasking.c:983 ! msgid "COPY_NUMBER argument must be INSTANCE expression" ! msgstr "" ! ! #: ch/tasking.c:1007 ! msgid "GEN_CODE argument must be a process or signal name." ! msgstr "" ! ! #: ch/tasking.c:1029 ! msgid "GEN_INST parameter 2 must be an integer mode" ! msgstr "" ! ! #: ch/tasking.c:1050 ! msgid "GEN_INST parameter 1 must be a PROCESS or an integer expression" ! msgstr "" ! ! #: ch/tasking.c:1076 ! #, c-format ! msgid "%s is not a declared process" ! msgstr "" ! ! #: ch/tasking.c:1097 ! msgid "PROC_TYPE argument must be INSTANCE expression" ! msgstr "" ! ! #: ch/tasking.c:1139 ! msgid "QUEUE_LENGTH argument must be a BUFFER/EVENT location." ! msgstr "" ! ! #: ch/tasking.c:1289 ! #, c-format ! msgid "SEND requires a SIGNAL; %s is not a SIGNAL name" ! msgstr "" ! ! #: ch/tasking.c:1314 ! #, c-format ! msgid "too many values for SIGNAL `%s'" ! msgstr "" ! ! #: ch/tasking.c:1320 ! #, c-format ! msgid "too few values for SIGNAL `%s'" ! msgstr "" ! ! #: ch/tasking.c:1398 ! msgid "Signal sent without priority" ! msgstr "" ! ! #: ch/tasking.c:1399 ch/tasking.c:2928 ! msgid " and no default priority was set." ! msgstr "" ! ! #: ch/tasking.c:1400 ! msgid " PRIORITY defaulted to 0" ! msgstr "" ! ! #: ch/tasking.c:1415 ! msgid "SEND without a destination instance" ! msgstr "" ! ! #: ch/tasking.c:1416 ! msgid " and no destination process specified" ! msgstr "" ! ! #: ch/tasking.c:1417 ! msgid " for the signal" ! msgstr "" ! ! #. as our system doesn't allow that and Z.200 specifies it, ! #. we issue a warning ! #: ch/tasking.c:1436 ! #, c-format ! msgid "SEND to ANY copy of process `%s'." ! msgstr "" ! ! #: ch/tasking.c:1441 ! msgid "SEND TO must be an INSTANCE mode" ! msgstr "" ! ! #: ch/tasking.c:1455 ! msgid "SEND WITH must have a mode" ! msgstr "" ! ! #: ch/tasking.c:1724 ! msgid "internal error: RECEIVE CASE stack invalid." ! msgstr "" ! ! #: ch/tasking.c:1764 ch/tasking.c:2492 ! msgid "SET requires INSTANCE location" ! msgstr "" ! ! #: ch/tasking.c:1843 ! msgid "SIGNAL in RECEIVE CASE alternative follows" ! msgstr "" ! ! #: ch/tasking.c:1844 ! #, c-format ! msgid " a BUFFER name on line %d" ! msgstr "" ! ! #: ch/tasking.c:1852 ! #, c-format ! msgid "SIGNAL `%s' has no data fields" ! msgstr "" ! ! #: ch/tasking.c:1857 ! #, c-format ! msgid "SIGNAL `%s' requires data fields" ! msgstr "" ! ! #: ch/tasking.c:1921 ! #, c-format ! msgid "too few data fields provided for `%s'" ! msgstr "" ! ! #: ch/tasking.c:1924 ! #, c-format ! msgid "too many data fields provided for `%s'" ! msgstr "" ! ! #: ch/tasking.c:1947 ! msgid "BUFFER in RECEIVE CASE alternative follows" ! msgstr "" ! ! #: ch/tasking.c:1948 ! #, c-format ! msgid " a SIGNAL name on line %d" ! msgstr "" ! ! #: ch/tasking.c:1956 ! msgid "BUFFER in RECEIVE CASE alternative must be a location." ! msgstr "" ! ! #: ch/tasking.c:1962 ! msgid "buffer receive alternative requires only 1 defining occurence." ! msgstr "" ! ! #: ch/tasking.c:2043 ! msgid "incompatible modes in receive buffer alternative." ! msgstr "" ! ! #: ch/tasking.c:2049 ! msgid "defining occurence in receive buffer alternative must be a location." ! msgstr "" ! ! #: ch/tasking.c:2086 ! msgid "buffer receive alternative without `IN location'." ! msgstr "" ! ! #: ch/tasking.c:2092 ! msgid "RECEIVE CASE alternative must specify a SIGNAL name or BUFFER location." ! msgstr "" ! ! #: ch/tasking.c:2331 ! msgid "RECEIVE CASE without alternatives" ! msgstr "" ! ! #: ch/tasking.c:2369 ! msgid "CONTINUE requires an event location." ! msgstr "" ! ! #: ch/tasking.c:2503 ch/tasking.c:2940 ! msgid "PRIORITY must be of integer type." ! msgstr "" ! ! #: ch/tasking.c:2581 ! msgid "delay alternative must be an EVENT location." ! msgstr "" ! ! #: ch/tasking.c:2636 ! msgid "DELAY CASE without alternatives" ! msgstr "" ! ! #: ch/tasking.c:2757 ! msgid "DELAY action requires an event location." ! msgstr "" ! ! #: ch/tasking.c:2768 ! msgid "PRIORITY in DELAY action must be of integer type." ! msgstr "" ! ! #: ch/tasking.c:2777 ! msgid "DELAY action without priority." ! msgstr "" ! ! #: ch/tasking.c:2778 ch/tasking.c:2929 ! msgid " PRIORITY defaulted to 0." ! msgstr "" ! ! #: ch/tasking.c:2868 ! msgid "send buffer action requires a BUFFER location." ! msgstr "" ! ! #: ch/tasking.c:2885 ! msgid "there must be only 1 value for send buffer action." ! msgstr "" ! ! #: ch/tasking.c:2906 ! msgid "convert failed for send buffer action." ! msgstr "" ! ! #: ch/tasking.c:2912 ! msgid "incompatible modes in send buffer action." ! msgstr "" ! ! #: ch/tasking.c:2927 ! msgid "Buffer sent without priority" ! msgstr "" ! ! #: ch/tasking.c:2946 ! msgid "WITH not allowed for send buffer action." ! msgstr "" ! ! #: ch/tasking.c:2951 ! msgid "TO not allowed for send buffer action." ! msgstr "" ! ! #: ch/tasking.c:3094 ! #, c-format ! msgid "SEND requires a BUFFER; `%s' is not a BUFFER name" ! msgstr "" ! ! #: ch/tasking.c:3235 ! msgid "non-integral max queue size for EVENT/BUFFER mode" ! msgstr "" ! ! #: ch/tasking.c:3240 ! msgid "non-constant max queue size for EVENT/BUFFER mode" ! msgstr "" ! ! #: ch/tasking.c:3247 ! msgid "max queue_size for EVENT/BUFFER is not positive" ! msgstr "" ! ! #: ch/timing.c:224 ! msgid "absolute time value must be of mode TIME." ! msgstr "" ! ! #: ch/timing.c:281 ch/timing.c:364 ! msgid "duration primitive value must be of mode DURATION." ! msgstr "" ! ! #: ch/tree.c:62 ! msgid "string length > UPPER (UINT)" ! msgstr "" ! ! #: ch/tree.c:116 ! msgid "Can only build a powerset from a discrete mode" ! msgstr "" ! ! #: ch/tree.c:128 ! msgid "non-constant bitstring size invalid" ! msgstr "" ! ! #: ch/tree.c:130 ! msgid "non-constant powerset size invalid" ! msgstr "" ! ! #: ch/typeck.c:83 ! msgid "array or string index is a mode (instead of a value)" ! msgstr "" ! ! #: ch/typeck.c:114 ! msgid "index is not an integer expression" ! msgstr "" ! ! #: ch/typeck.c:122 ! msgid "index not compatible with index mode" ! msgstr "" ! ! #. should never happen ! #: ch/typeck.c:132 ! msgid "index is not discrete" ! msgstr "" ! ! #: ch/typeck.c:196 ! msgid "" ! "possible internal error - slice argument is neither referable nor constant" ! msgstr "" ! ! #: ch/typeck.c:285 ! msgid "bit array slice with non-constant length" ! msgstr "" ! ! #: ch/typeck.c:325 ! msgid "bitstring slice with non-constant length" ! msgstr "" ! ! #: ch/typeck.c:338 ! msgid "slice operation on non-array, non-bitstring value not supported" ! msgstr "" ! ! #: ch/typeck.c:390 ch/typeck.c:441 ! msgid "can only take slice of array or string" ! msgstr "" ! ! #: ch/typeck.c:455 ! msgid "slice length is not an integer" ! msgstr "" ! ! #: ch/typeck.c:488 ! msgid "slice length out-of-range" ! msgstr "" ! ! #: ch/typeck.c:543 ! msgid "too many index expressions" ! msgstr "" ! ! #: ch/typeck.c:595 ! msgid "array index is not discrete" ! msgstr "" ! ! #: ch/typeck.c:675 ! msgid "invalid compound index for bitstring mode" ! msgstr "" ! ! #: ch/typeck.c:1079 ! msgid "conversions from variable_size value" ! msgstr "" ! ! #: ch/typeck.c:1084 ! msgid "conversions to variable_size mode" ! msgstr "" ! ! #: ch/typeck.c:1098 ! msgid "cannot convert to float" ! msgstr "" ! ! #: ch/typeck.c:1103 ! msgid "cannot convert float to this mode" ! msgstr "" ! ! #: ch/typeck.c:1130 ! msgid "OVERFLOW in expression conversion" ! msgstr "" ! ! #: ch/typeck.c:1159 ! msgid "overflow (not inside function)" ! msgstr "" ! ! #: ch/typeck.c:1161 ! msgid "possible overflow (not inside function)" ! msgstr "" ! ! #: ch/typeck.c:1166 ! msgid "expression will always cause OVERFLOW" ! msgstr "" ! ! #: ch/typeck.c:1199 ! msgid "not implemented: constant conversion from that kind of expression" ! msgstr "" ! ! #: ch/typeck.c:1205 ! msgid "not implemented: constant conversion to that kind of mode" ! msgstr "" ! ! #: ch/typeck.c:1216 ! msgid "non-standard, non-portable value conversion" ! msgstr "" ! ! #: ch/typeck.c:1222 ! msgid "location conversion between differently-sized modes" ! msgstr "" ! ! #: ch/typeck.c:1224 ! msgid "unsupported value conversion" ! msgstr "" ! ! #: ch/typeck.c:1272 ! msgid "operand to bin must be a non-negative integer literal" ! msgstr "" ! ! #: ch/typeck.c:1288 ! #, c-format ! msgid "size %d of BIN too big - no such integer mode" ! msgstr "" ! ! #: ch/typeck.c:1302 ! msgid "BIN in pass 2" ! msgstr "" ! ! #: ch/typeck.c:1335 ! msgid "mode of tuple is neither ARRAY, STRUCT, nor POWERSET" ! msgstr "" ! ! #: ch/typeck.c:2111 ! msgid "internal error in chill_root_resulting_mode" ! msgstr "" ! ! #: ch/typeck.c:2370 ! msgid "string lengths not equal" ! msgstr "" ! ! #: ch/typeck.c:2385 ! msgid "can't do ARRAY assignment - too large" ! msgstr "" ! ! #: ch/typeck.c:2403 ! msgid "rhs of array assignment is not addressable" ! msgstr "" ! ! #: ch/typeck.c:2580 ! msgid "non-constant expression for BIN" ! msgstr "" ! ! #: ch/typeck.c:2585 ! msgid "expression for BIN must not be negative" ! msgstr "" ! ! #: ch/typeck.c:2590 ! msgid "cannot process BIN (>32)" ! msgstr "" ! ! #: ch/typeck.c:2606 ! msgid "bounds of range are not compatible" ! msgstr "" ! ! #: ch/typeck.c:2615 ! msgid "negative string length" ! msgstr "" ! ! #: ch/typeck.c:2652 ! msgid "range's lower bound and parent mode don't match" ! msgstr "" ! ! #: ch/typeck.c:2657 ! msgid "range's upper bound and parent mode don't match" ! msgstr "" ! ! #: ch/typeck.c:2666 ! msgid "making range from non-mode" ! msgstr "" ! ! #: ch/typeck.c:2672 ! msgid "floating point ranges" ! msgstr "" ! ! #: ch/typeck.c:2680 ! msgid "range mode has non-constant limits" ! msgstr "" ! ! #: ch/typeck.c:2689 ! msgid "range's high bound < mode's low bound" ! msgstr "" ! ! #: ch/typeck.c:2694 ! msgid "range's high bound > mode's high bound" ! msgstr "" ! ! #: ch/typeck.c:2699 ! msgid "range mode high bound < range mode low bound" ! msgstr "" ! ! #: ch/typeck.c:2704 ! msgid "range's low bound < mode's low bound" ! msgstr "" ! ! #: ch/typeck.c:2709 ! msgid "range's low bound > mode's high bound" ! msgstr "" ! ! #: ch/typeck.c:2817 ! msgid "Stepsize in STEP must be an integer constant" ! msgstr "" ! ! #: ch/typeck.c:2821 ! msgid "Stepsize in STEP must be > 0" ! msgstr "" ! ! #: ch/typeck.c:2827 ! msgid "Stepsize in STEP must be the natural width of the array element mode" ! msgstr "" ! ! #: ch/typeck.c:2833 ch/typeck.c:3134 ! msgid "Starting word in POS must be an integer constant" ! msgstr "" ! ! #: ch/typeck.c:2837 ch/typeck.c:3141 ! msgid "Starting word in POS must be >= 0" ! msgstr "" ! ! #: ch/typeck.c:2839 ! msgid "Starting word in POS within STEP must be 0" ! msgstr "" ! ! #: ch/typeck.c:2851 ch/typeck.c:3158 ! msgid "Starting bit in POS must be an integer constant" ! msgstr "" ! ! #: ch/typeck.c:2857 ! msgid "Starting bit in POS within STEP must be 0" ! msgstr "" ! ! #: ch/typeck.c:2861 ch/typeck.c:3166 ! msgid "Starting bit in POS must be >= 0" ! msgstr "" ! ! #: ch/typeck.c:2869 ch/typeck.c:3174 ! msgid "Starting bit in POS must be < the width of a word" ! msgstr "" ! ! #: ch/typeck.c:2883 ch/typeck.c:3188 ! msgid "Length in POS must be an integer constant" ! msgstr "" ! ! #: ch/typeck.c:2890 ch/typeck.c:3195 ! msgid "Length in POS must be > 0" ! msgstr "" ! ! #: ch/typeck.c:2897 ch/typeck.c:3208 ! msgid "End bit in POS must be an integer constant" ! msgstr "" ! ! #: ch/typeck.c:2906 ch/typeck.c:3217 ! msgid "End bit in POS must be >= the start bit" ! msgstr "" ! ! #: ch/typeck.c:2912 ch/typeck.c:3222 ! msgid "End bit in POS must be < the width of a word" ! msgstr "" ! ! #: ch/typeck.c:2924 ! msgid "" ! "The length specified on POS within STEP must be the natural length of the " ! "array element type" ! msgstr "" ! ! #: ch/typeck.c:2929 ! msgid "Step size in STEP must be >= the length in POS" ! msgstr "" ! ! #: ch/typeck.c:2955 ! msgid "array index must be a range, not a single integer" ! msgstr "" ! ! #: ch/typeck.c:2961 ! msgid "array index is not a discrete mode" ! msgstr "" ! ! #: ch/typeck.c:3232 ! msgid "" ! "The length specified on POS must be the natural length of the field type" ! msgstr "" ! ! #: ch/typeck.c:3241 ! msgid "STRUCT fields must be layed out in monotonically increasing order" ! msgstr "" ! ! #: ch/typeck.c:3304 ! msgid "If one field has a POS layout, then all fields must have a POS layout" ! msgstr "" ! ! #: ch/typeck.c:3447 ! msgid "parameterised structures not implemented" ! msgstr "" ! ! #: ch/typeck.c:3452 ! msgid "invalid parameterised type" ! msgstr "" ! ! #: collect2.c:454 msgid "internal error" msgstr "internt fel" ! #: collect2.c:935 msgid "no arguments" msgstr "inga argument" ! #: collect2.c:1289 collect2.c:1437 collect2.c:1470 #, c-format msgid "fopen %s" msgstr "fopen %s" ! #: collect2.c:1292 collect2.c:1442 collect2.c:1473 #, c-format msgid "fclose %s" msgstr "fclose %s" ! #: collect2.c:1301 #, c-format msgid "collect2 version %s" msgstr "" ! #: collect2.c:1391 #, c-format msgid "%d constructor(s) found\n" ! msgstr "%d konstruerare hittad(e)\n" ! #: collect2.c:1392 #, c-format msgid "%d destructor(s) found\n" ! msgstr "%d destruerare hittad(e)\n" ! #: collect2.c:1393 #, c-format msgid "%d frame table(s) found\n" msgstr "" ! #: collect2.c:1534 #, c-format msgid "%s terminated with signal %d [%s]%s" ! msgstr "%s terminerade med signal %d [%s]%s" ! #: collect2.c:1553 #, c-format msgid "%s returned %d exit status" ! msgstr "%s returnerade avslutningsstatus %d" ! #: collect2.c:1581 #, c-format msgid "[cannot find %s]" ! msgstr "[kan inte hitta %s]" ! #: collect2.c:1596 #, c-format msgid "cannot find `%s'" ! msgstr "kan inte hitta \"%s\"" ! #: collect2.c:1607 collect2.c:1610 #, c-format msgid "redirecting stdout: %s" ! msgstr "omdirigerar stdout: %s" ! #: collect2.c:1653 #, c-format msgid "[Leaving %s]\n" ! msgstr "[Lämnar %s]\n" ! #: collect2.c:1894 #, c-format msgid "" "\n" "write_c_file - output name is %s, prefix is %s\n" msgstr "" ! #: collect2.c:2107 msgid "cannot find `nm'" ! msgstr "kan inte hitta \"nm\"" ! #: collect2.c:2117 collect2.c:2559 msgid "pipe" ! msgstr "rör" ! #: collect2.c:2121 collect2.c:2563 msgid "fdopen" ! msgstr "fdopen" ! #: collect2.c:2147 collect2.c:2589 #, c-format msgid "dup2 %d 1" ! msgstr "dup2 %d 1" ! #: collect2.c:2150 collect2.c:2153 collect2.c:2166 collect2.c:2592 ! #: collect2.c:2595 collect2.c:2608 #, c-format msgid "close %d" ! msgstr "close %d" ! #: collect2.c:2156 #, c-format msgid "execvp %s" ! msgstr "execvp %s" ! #: collect2.c:2210 #, c-format msgid "init function found in object %s" msgstr "" ! #: collect2.c:2218 #, c-format msgid "fini function found in object %s" msgstr "" ! #: collect2.c:2241 collect2.c:2647 msgid "fclose" ! msgstr "fclose" ! #: collect2.c:2286 #, c-format msgid "unable to open file '%s'" ! msgstr "kan inte öppna fil \"%s\"" ! #: collect2.c:2288 #, c-format msgid "unable to stat file '%s'" msgstr "" ! #: collect2.c:2294 #, c-format msgid "unable to mmap file '%s'" ! msgstr "kan inte göra mmap på fil \"%s\"" ! #: collect2.c:2447 msgid "not found\n" ! msgstr "hittades inte\n" ! #: collect2.c:2449 collect2.c:2626 #, c-format msgid "dynamic dependency %s not found" msgstr "" ! #: collect2.c:2469 #, c-format msgid "bad magic number in file '%s'" ! msgstr "felaktigt magiskt nummer i fil \"%s\"" ! #: collect2.c:2491 msgid "dynamic dependencies.\n" ! msgstr "dynamiskt beroende.\n" ! #: collect2.c:2550 msgid "cannot find `ldd'" ! msgstr "kan inte hitta \"ldd\"" ! #: collect2.c:2598 #, c-format msgid "execv %s" ! msgstr "execv %s" ! #: collect2.c:2611 msgid "" "\n" "ldd output with constructors/destructors.\n" msgstr "" ! #: collect2.c:2638 #, c-format msgid "unable to open dynamic dependency '%s'" msgstr "" ! #: collect2.c:2752 #, c-format msgid "%s: not a COFF file" ! msgstr "%s: är inte en COFF-fil" ! #: collect2.c:2871 #, c-format msgid "%s: cannot open as COFF file" ! msgstr "%s: kan inte öppna som COFF-fil" ! #: collect2.c:2927 #, c-format msgid "Library lib%s not found" ! msgstr "Hittade inte bibliotek lib%s" ! #: collect2.c:3056 #, c-format msgid "open %s" ! msgstr "open %s" ! #: collect2.c:3079 msgid "incompatibilities between object file & expected values" msgstr "" ! #: collect2.c:3152 #, c-format msgid "" "\n" "Processing symbol table #%d, offset = 0x%.8lx, kind = %s\n" msgstr "" + "\n" + "Processar symboltabell #%d, index = 0x%.8lx, sort = %s\n" ! #: collect2.c:3161 msgid "string section missing" ! msgstr "strängsektionen saknas" ! #: collect2.c:3164 msgid "section pointer missing" ! msgstr "sektionspekare saknas" ! #: collect2.c:3212 msgid "no symbol table found" ! msgstr "hittade ingen symboltabell" ! #: collect2.c:3225 msgid "no cmd_strings found" ! msgstr "hittar ingen cmd_strings" ! #: collect2.c:3237 msgid "" "\n" "Updating header and load commands.\n" "\n" msgstr "" ! #: collect2.c:3244 #, c-format msgid "load command map, %d cmds, new size %ld.\n" ! msgstr "ladda kommandomappning, %d kommandon, ny storlek %ld.\n" ! #: collect2.c:3275 msgid "" "writing load commands.\n" "\n" msgstr "" ! #: collect2.c:3295 #, c-format msgid "close %s" msgstr "" ! #: collect2.c:3369 msgid "could not convert 0x%l.8x into a region" msgstr "" ! #: collect2.c:3373 #, c-format msgid "%s function, region %d, offset = %ld (0x%.8lx)\n" msgstr "" ! #: collect2.c:3500 msgid "bad magic number" msgstr "" ! #: collect2.c:3501 msgid "bad header version" msgstr "" ! #: collect2.c:3502 msgid "bad raw header version" msgstr "" ! #: collect2.c:3503 msgid "raw header buffer too small" msgstr "" ! #: collect2.c:3504 msgid "old raw header file" msgstr "" ! #: collect2.c:3505 msgid "unsupported version" ! msgstr "ej stödd version" ! #: collect2.c:3507 #, c-format msgid "unknown {de,en}code_mach_o_hdr return value %d" msgstr "" ! #: collect2.c:3527 #, c-format msgid "fstat %s" ! msgstr "fstat %s" ! #: collect2.c:3564 collect2.c:3612 #, c-format msgid "lseek %s 0" ! msgstr "lseek %s 0" ! #: collect2.c:3568 #, c-format msgid "read %s" ! msgstr "read %s" ! #: collect2.c:3571 #, c-format msgid "read %ld bytes, expected %ld, from %s" ! msgstr "läste %ld bytes, förväntade %ld, från %s" ! #: collect2.c:3592 #, c-format msgid "msync %s" ! msgstr "msync %s" ! #: collect2.c:3599 #, c-format msgid "munmap %s" ! msgstr "munmap %s" ! #: collect2.c:3616 #, c-format msgid "write %s" ! msgstr "write %s" ! #: collect2.c:3619 #, c-format msgid "wrote %ld bytes, expected %ld, to %s" ! msgstr "skrev %ld bytes, förväntade %ld, till %s" ! #: combine.c:12577 #, c-format msgid "" ";; Combiner statistics: %d attempts, %d substitutions (%d requiring new " *************** msgid "" *** 3101,3107 **** "\n" msgstr "" ! #: combine.c:12674 #, c-format msgid "" "\n" --- 5938,5944 ---- "\n" msgstr "" ! #: combine.c:12587 #, c-format msgid "" "\n" *************** msgid "" *** 3109,3153 **** ";; %d successes.\n" msgstr "" #: config/a29k/a29k.c:1007 msgid "invalid %%Q value" ! msgstr "" ! #: config/a29k/a29k.c:1013 config/alpha/alpha.c:3646 msgid "invalid %%C value" ! msgstr "" ! #: config/a29k/a29k.c:1019 config/alpha/alpha.c:3510 ! #: config/rs6000/rs6000.c:3986 msgid "invalid %%N value" ! msgstr "" ! #: config/a29k/a29k.c:1025 config/alpha/alpha.c:3581 ! #: config/rs6000/rs6000.c:3948 msgid "invalid %%M value" ! msgstr "" ! #: config/a29k/a29k.c:1031 config/alpha/alpha.c:3573 ! #: config/rs6000/rs6000.c:3913 msgid "invalid %%m value" ! msgstr "" ! #: config/a29k/a29k.c:1131 config/alpha/alpha.c:3534 config/romp/romp.c:683 msgid "invalid %%L value" ! msgstr "" ! #: config/a29k/a29k.c:1136 config/rs6000/rs6000.c:3994 msgid "invalid %%O value" ! msgstr "" ! #: config/a29k/a29k.c:1142 config/alpha/alpha.c:3518 ! #: config/rs6000/rs6000.c:4013 msgid "invalid %%P value" ! msgstr "" ! #: config/a29k/a29k.c:1152 msgid "invalid %%V value" ! msgstr "" #: config/a29k/a29k.h:101 msgid "Generate code assuming DW bit is set" --- 5946,6004 ---- ";; %d successes.\n" msgstr "" + #. Run-time compilation parameters selecting different hardware subsets. + #: config/1750a/1750a.h:39 + msgid "Use VAX-C alignment" + msgstr "" + #: config/a29k/a29k.c:1007 + #, c-format msgid "invalid %%Q value" ! msgstr "ogiltigt %%Q-värde" ! #: config/a29k/a29k.c:1013 config/alpha/alpha.c:4055 ! #, c-format msgid "invalid %%C value" ! msgstr "ogiltigt %%C-värde" ! #: config/a29k/a29k.c:1019 config/alpha/alpha.c:3919 ! #: config/rs6000/rs6000.c:4084 ! #, c-format msgid "invalid %%N value" ! msgstr "ogiltigt %%N-värde" ! #: config/a29k/a29k.c:1025 config/alpha/alpha.c:3990 ! #: config/rs6000/rs6000.c:4046 ! #, c-format msgid "invalid %%M value" ! msgstr "ogiltigt %%M-värde" ! #: config/a29k/a29k.c:1031 config/alpha/alpha.c:3982 ! #: config/rs6000/rs6000.c:4011 ! #, c-format msgid "invalid %%m value" ! msgstr "ogiltigt %%m-värde" ! #: config/a29k/a29k.c:1133 config/alpha/alpha.c:3943 config/romp/romp.c:677 ! #, c-format msgid "invalid %%L value" ! msgstr "ogiltigt %%L-värde" ! #: config/a29k/a29k.c:1138 config/rs6000/rs6000.c:4092 ! #, c-format msgid "invalid %%O value" ! msgstr "ogiltigt %%O-värde" ! #: config/a29k/a29k.c:1144 config/alpha/alpha.c:3927 ! #: config/rs6000/rs6000.c:4111 ! #, c-format msgid "invalid %%P value" ! msgstr "ogiltigt %%P-värde" ! #: config/a29k/a29k.c:1154 ! #, c-format msgid "invalid %%V value" ! msgstr "ogiltigt %%V-värde" #: config/a29k/a29k.h:101 msgid "Generate code assuming DW bit is set" *************** msgstr "" *** 3167,3181 **** #: config/a29k/a29k.h:105 msgid "Use small memory model" ! msgstr "" #: config/a29k/a29k.h:106 msgid "Use normal memory model" ! msgstr "" #: config/a29k/a29k.h:107 msgid "Use large memory model" ! msgstr "" #: config/a29k/a29k.h:108 msgid "Generate 29050 code" --- 6018,6032 ---- #: config/a29k/a29k.h:105 msgid "Use small memory model" ! msgstr "Använd liten minnesmodell" #: config/a29k/a29k.h:106 msgid "Use normal memory model" ! msgstr "Använd normal minnesmodell" #: config/a29k/a29k.h:107 msgid "Use large memory model" ! msgstr "Använd stor minnesmodell" #: config/a29k/a29k.h:108 msgid "Generate 29050 code" *************** msgstr "" *** 3195,3213 **** #: config/a29k/a29k.h:112 msgid "Emit stack checking code" ! msgstr "" #: config/a29k/a29k.h:113 msgid "Do not emit stack checking code" ! msgstr "" #: config/a29k/a29k.h:114 msgid "Work around storem hardware bug" ! msgstr "" #: config/a29k/a29k.h:115 msgid "Do not work around storem hardware bug" ! msgstr "" #: config/a29k/a29k.h:116 msgid "Store locals in argument registers" --- 6046,6064 ---- #: config/a29k/a29k.h:112 msgid "Emit stack checking code" ! msgstr "Generera kod för stackkontroll" #: config/a29k/a29k.h:113 msgid "Do not emit stack checking code" ! msgstr "Generera inte kod för stackkontroll" #: config/a29k/a29k.h:114 msgid "Work around storem hardware bug" ! msgstr "Fix för storem hårdvarubugg" #: config/a29k/a29k.h:115 msgid "Do not work around storem hardware bug" ! msgstr "Fixa inte storem hårdvarubugg" #: config/a29k/a29k.h:116 msgid "Store locals in argument registers" *************** msgstr "" *** 3217,3372 **** msgid "Do not store locals in arg registers" msgstr "" ! #: config/a29k/a29k.h:118 config/i960/i960.h:284 config/mips/mips.h:375 msgid "Use software floating point" ! msgstr "" #: config/a29k/a29k.h:119 msgid "Do not generate multm instructions" msgstr "" ! #: config/alpha/alpha.c:174 #, c-format msgid "bad value `%s' for -mtrap-precision switch" msgstr "" ! #: config/alpha/alpha.c:188 #, c-format msgid "bad value `%s' for -mfp-rounding-mode switch" msgstr "" ! #: config/alpha/alpha.c:203 #, c-format msgid "bad value `%s' for -mfp-trap-mode switch" msgstr "" ! #: config/alpha/alpha.c:254 #, c-format msgid "bad value `%s' for -mcpu switch" msgstr "" ! #: config/alpha/alpha.c:262 msgid "fp software completion requires -mtrap-precision=i" msgstr "" ! #: config/alpha/alpha.c:278 msgid "rounding mode not supported for VAX floats" msgstr "" ! #: config/alpha/alpha.c:283 msgid "trap mode not supported for VAX floats" msgstr "" ! #: config/alpha/alpha.c:312 #, c-format msgid "L%d cache latency unknown for %s" msgstr "" ! #: config/alpha/alpha.c:327 #, c-format msgid "bad value `%s' for -mmemory-latency" ! msgstr "" ! #: config/alpha/alpha.c:3492 msgid "invalid %%r value" ! msgstr "" ! #: config/alpha/alpha.c:3503 config/rs6000/rs6000.c:4059 msgid "invalid %%R value" ! msgstr "" ! #: config/alpha/alpha.c:3526 config/romp/romp.c:725 config/romp/romp.c:732 msgid "invalid %%h value" ! msgstr "" ! #: config/alpha/alpha.c:3616 msgid "invalid %%U value" ! msgstr "" ! #: config/alpha/alpha.c:3624 config/alpha/alpha.c:3635 config/romp/romp.c:691 ! #: config/rs6000/rs6000.c:4067 msgid "invalid %%s value" ! msgstr "" ! #: config/alpha/alpha.c:3683 config/rs6000/rs6000.c:3777 msgid "invalid %%E value" ! msgstr "" ! #: config/alpha/alpha.c:3704 config/romp/romp.c:966 ! #: config/rs6000/rs6000.c:4359 msgid "invalid %%xn code" msgstr "" #. Macro to define tables used to set the flags. #. This is a list in braces of pairs in braces, #. each pair being { "NAME", VALUE } #. where VALUE is the bits to set or minus the bits to clear. #. An empty string NAME is used to identify the default VALUE. ! #: config/alpha/alpha.h:199 config/i386/i386.h:227 config/i386/i386.h:229 ! #: config/i386/i386.h:231 config/ns32k/ns32k.h:103 config/rs6000/rs6000.h:304 ! #: config/sparc/sparc.h:578 config/sparc/sparc.h:583 msgid "Use hardware fp" ! msgstr "" ! #: config/alpha/alpha.h:200 config/i386/i386.h:228 config/i386/i386.h:230 ! #: config/rs6000/rs6000.h:306 config/sparc/sparc.h:580 ! #: config/sparc/sparc.h:585 msgid "Do not use hardware fp" ! msgstr "" ! #: config/alpha/alpha.h:201 msgid "Use fp registers" msgstr "" ! #: config/alpha/alpha.h:203 msgid "Do not use fp registers" msgstr "" ! #: config/alpha/alpha.h:204 msgid "Do not assume GAS" ! msgstr "" ! #: config/alpha/alpha.h:205 msgid "Assume GAS" ! msgstr "" ! #: config/alpha/alpha.h:207 msgid "Request IEEE-conformant math library routines (OSF/1)" msgstr "" ! #: config/alpha/alpha.h:209 msgid "Emit IEEE-conformant code, without inexact exceptions" msgstr "" ! #: config/alpha/alpha.h:211 msgid "Emit IEEE-conformant code, with inexact exceptions" msgstr "" ! #: config/alpha/alpha.h:213 msgid "Do not emit complex integer constants to read-only memory" msgstr "" ! #: config/alpha/alpha.h:214 msgid "Use VAX fp" ! msgstr "" ! #: config/alpha/alpha.h:215 msgid "Do not use VAX fp" ! msgstr "" ! #: config/alpha/alpha.h:216 msgid "Emit code for the byte/word ISA extension" msgstr "" ! #: config/alpha/alpha.h:219 msgid "Emit code for the motion video ISA extension" msgstr "" ! #: config/alpha/alpha.h:222 msgid "Emit code for the fp move and sqrt ISA extension" msgstr "" ! #: config/alpha/alpha.h:224 msgid "Emit code for the counting ISA extension" msgstr "" --- 6068,6231 ---- msgid "Do not store locals in arg registers" msgstr "" ! #: config/a29k/a29k.h:118 config/i960/i960.h:288 config/mips/mips.h:382 msgid "Use software floating point" ! msgstr "Använd mjukvaruflytttal" #: config/a29k/a29k.h:119 msgid "Do not generate multm instructions" msgstr "" ! #: config/alpha/alpha.c:201 #, c-format msgid "bad value `%s' for -mtrap-precision switch" msgstr "" ! #: config/alpha/alpha.c:215 #, c-format msgid "bad value `%s' for -mfp-rounding-mode switch" msgstr "" ! #: config/alpha/alpha.c:230 #, c-format msgid "bad value `%s' for -mfp-trap-mode switch" msgstr "" ! #: config/alpha/alpha.c:249 config/alpha/alpha.c:261 #, c-format msgid "bad value `%s' for -mcpu switch" msgstr "" ! #: config/alpha/alpha.c:269 msgid "fp software completion requires -mtrap-precision=i" msgstr "" ! #: config/alpha/alpha.c:285 msgid "rounding mode not supported for VAX floats" msgstr "" ! #: config/alpha/alpha.c:290 msgid "trap mode not supported for VAX floats" msgstr "" ! #: config/alpha/alpha.c:319 #, c-format msgid "L%d cache latency unknown for %s" msgstr "" ! #: config/alpha/alpha.c:334 #, c-format msgid "bad value `%s' for -mmemory-latency" ! msgstr "ogiltigt värde \"%s\" till -memory-latency" ! #: config/alpha/alpha.c:3901 config/ia64/ia64.c:3368 ! #, c-format msgid "invalid %%r value" ! msgstr "ogiltigt %%r-värde" ! #: config/alpha/alpha.c:3912 config/rs6000/rs6000.c:4157 ! #, c-format msgid "invalid %%R value" ! msgstr "ogiltigt %%R-värde" ! #: config/alpha/alpha.c:3935 config/romp/romp.c:719 config/romp/romp.c:726 ! #, c-format msgid "invalid %%h value" ! msgstr "ogiltigt %%h-värde" ! #: config/alpha/alpha.c:4025 ! #, c-format msgid "invalid %%U value" ! msgstr "ogiltigt %%U-värde" ! #: config/alpha/alpha.c:4033 config/alpha/alpha.c:4044 config/romp/romp.c:685 ! #: config/rs6000/rs6000.c:4165 ! #, c-format msgid "invalid %%s value" ! msgstr "ogiltigt %%s-värde" ! #: config/alpha/alpha.c:4092 config/rs6000/rs6000.c:3875 ! #, c-format msgid "invalid %%E value" ! msgstr "ogiltigt %%E-värde" ! #: config/alpha/alpha.c:4113 config/romp/romp.c:960 ! #: config/rs6000/rs6000.c:4458 ! #, c-format msgid "invalid %%xn code" msgstr "" + # fixme: fp = flyttal, men hur skall man skriva det. Förkortat eller FPU? #. Macro to define tables used to set the flags. #. This is a list in braces of pairs in braces, #. each pair being { "NAME", VALUE } #. where VALUE is the bits to set or minus the bits to clear. #. An empty string NAME is used to identify the default VALUE. ! #: config/alpha/alpha.h:206 config/i386/i386.h:266 config/i386/i386.h:268 ! #: config/i386/i386.h:270 config/ns32k/ns32k.h:103 config/rs6000/rs6000.h:303 ! #: config/sparc/sparc.h:577 config/sparc/sparc.h:582 msgid "Use hardware fp" ! msgstr "Använd hårdvaru-fp" ! #: config/alpha/alpha.h:207 config/i386/i386.h:267 config/i386/i386.h:269 ! #: config/rs6000/rs6000.h:305 config/sparc/sparc.h:579 ! #: config/sparc/sparc.h:584 msgid "Do not use hardware fp" ! msgstr "Använd inte hårdvaru-fp" ! #: config/alpha/alpha.h:208 msgid "Use fp registers" msgstr "" ! #: config/alpha/alpha.h:210 msgid "Do not use fp registers" msgstr "" ! #: config/alpha/alpha.h:211 msgid "Do not assume GAS" ! msgstr "Antag inte GAS" ! #: config/alpha/alpha.h:212 msgid "Assume GAS" ! msgstr "Antag GAS" ! #: config/alpha/alpha.h:214 msgid "Request IEEE-conformant math library routines (OSF/1)" msgstr "" ! #: config/alpha/alpha.h:216 msgid "Emit IEEE-conformant code, without inexact exceptions" msgstr "" ! #: config/alpha/alpha.h:218 msgid "Emit IEEE-conformant code, with inexact exceptions" msgstr "" ! #: config/alpha/alpha.h:220 msgid "Do not emit complex integer constants to read-only memory" msgstr "" ! #: config/alpha/alpha.h:221 msgid "Use VAX fp" ! msgstr "Använd VAX fp" ! #: config/alpha/alpha.h:222 msgid "Do not use VAX fp" ! msgstr "Använd inte VAX fp" ! #: config/alpha/alpha.h:223 msgid "Emit code for the byte/word ISA extension" msgstr "" ! #: config/alpha/alpha.h:226 msgid "Emit code for the motion video ISA extension" msgstr "" ! #: config/alpha/alpha.h:229 msgid "Emit code for the fp move and sqrt ISA extension" msgstr "" ! #: config/alpha/alpha.h:231 msgid "Emit code for the counting ISA extension" msgstr "" *************** msgstr "" *** 3387,3661 **** #. extern char *m88k_short_data; #. #define TARGET_OPTIONS { { "short-data-", &m88k_short_data } } #. For -mcpu= #. For -mfp-rounding-mode=[n|m|c|d] #. For -mfp-trap-mode=[n|u|su|sui] #. For -mtrap-precision=[p|f|i] #. For -mmemory-latency= ! #: config/alpha/alpha.h:260 ! msgid "Generate code for a given CPU" msgstr "" ! #: config/alpha/alpha.h:262 msgid "Control the generated fp rounding mode" msgstr "" ! #: config/alpha/alpha.h:264 msgid "Control the IEEE trap mode" msgstr "" ! #: config/alpha/alpha.h:266 msgid "Control the precision given to fp exceptions" msgstr "" ! #: config/alpha/alpha.h:268 msgid "Tune expected memory latency" msgstr "" ! #: config/arc/arc.c:109 #, c-format ! msgid "bad value (%s) for -mcpu switch" msgstr "" ! #: config/arc/arc.c:1667 config/m32r/m32r.c:2218 msgid "invalid operand to %R code" ! msgstr "" ! #: config/arc/arc.c:1699 config/m32r/m32r.c:2241 msgid "invalid operand to %H/%L code" ! msgstr "" ! #: config/arc/arc.c:1723 config/m32r/m32r.c:2318 msgid "invalid operand to %U code" ! msgstr "" ! #: config/arc/arc.c:1734 msgid "invalid operand to %V code" ! msgstr "" #. Unknown flag. ! #: config/arc/arc.c:1741 config/m32r/m32r.c:2357 config/sparc/sparc.c:5859 msgid "invalid operand output code" msgstr "" ! #: config/arm/arm.c:340 #, c-format msgid "switch -mcpu=%s conflicts with -march= switch" ! msgstr "" ! #: config/arm/arm.c:350 config/rs6000/rs6000.c:310 config/sparc/sparc.c:332 #, c-format msgid "bad value (%s) for %s switch" ! msgstr "" ! #: config/arm/arm.c:485 msgid "target CPU does not support APCS-32" ! msgstr "" ! #: config/arm/arm.c:490 msgid "target CPU does not support APCS-26" ! msgstr "" ! #: config/arm/arm.c:496 msgid "target CPU does not support interworking" msgstr "" ! #: config/arm/arm.c:502 ! msgid "target CPU does not supoport THUMB instructions." ! msgstr "" ! #: config/arm/arm.c:516 msgid "" "enabling backtrace support is only meaningful when compiling for the Thumb." msgstr "" ! #: config/arm/arm.c:519 msgid "" "enabling callee interworking support is only meaningful when compiling for " "the Thumb." msgstr "" ! #: config/arm/arm.c:522 msgid "" "enabling caller interworking support is only meaningful when compiling for " "the Thumb." msgstr "" ! #: config/arm/arm.c:528 msgid "interworking forces APCS-32 to be used" msgstr "" ! #: config/arm/arm.c:534 msgid "-mapcs-stack-check incompatible with -mno-apcs-frame" msgstr "" ! #: config/arm/arm.c:542 msgid "-fpic and -mapcs-reent are incompatible" ! msgstr "" ! #: config/arm/arm.c:545 msgid "APCS reentrant code not supported. Ignored" msgstr "" ! #: config/arm/arm.c:553 msgid "-g with -mno-apcs-frame may not give sensible debugging" msgstr "" ! #: config/arm/arm.c:561 msgid "Passing floating point arguments in fp regs not yet supported" msgstr "" ! #: config/arm/arm.c:588 #, c-format msgid "Invalid floating point emulation option: -mfpe-%s" msgstr "" ! #: config/arm/arm.c:612 msgid "Structure size boundary can only be set to 8 or 32" ! msgstr "" ! #: config/arm/arm.c:620 msgid "-mpic-register= is useless without -fpic" ! msgstr "" ! #: config/arm/arm.c:629 #, c-format msgid "Unable to use '%s' for PIC register" msgstr "" ! #: config/arm/arm.c:8246 ! msgid "Unable to compute real location of stacked parameter" ! msgstr "" ! ! #. Oh dear! We have no low registers into which we can pop ! #. high registers! ! #: config/arm/arm.c:8844 ! msgid "No low registers available for popping high registers" ! msgstr "" ! ! #: config/arm/arm.c:9406 ! msgid "thumb_load_double_from_address: destination is not a register" msgstr "" ! #: config/arm/arm.c:9411 ! msgid "thumb_load_double_from_address: source is not a computed memory address" msgstr "" ! #: config/arm/arm.c:9455 ! msgid "thumb_load_double_from_address: base is not a register" msgstr "" ! #: config/arm/arm.c:9513 ! msgid "thumb_load_double_from_address: Unhandled address calculation" msgstr "" ! #: config/arm/arm.h:410 msgid "Generate APCS conformant stack frames" msgstr "" ! #: config/arm/arm.h:413 msgid "Store function names in object code" msgstr "" ! #: config/arm/arm.h:417 ! msgid "Use the 32bit version of the APCS" ! msgstr "" ! #: config/arm/arm.h:419 ! msgid "Use the 26bit version of the APCS" ! msgstr "" ! #: config/arm/arm.h:423 msgid "Pass FP arguments in FP registers" ! msgstr "" ! #: config/arm/arm.h:426 msgid "Generate re-entrant, PIC code" msgstr "" ! #: config/arm/arm.h:429 msgid "The MMU will trap on unaligned accesses" msgstr "" ! #: config/arm/arm.h:436 msgid "Use library calls to perform FP operations" ! msgstr "" ! #: config/arm/arm.h:438 config/i960/i960.h:282 msgid "Use hardware floating point instructions" ! msgstr "" ! #: config/arm/arm.h:440 msgid "Assume target CPU is configured as big endian" ! msgstr "" ! #: config/arm/arm.h:442 msgid "Assume target CPU is configured as little endian" ! msgstr "" ! #: config/arm/arm.h:444 msgid "Assume big endian bytes, little endian words" ! msgstr "" ! #: config/arm/arm.h:446 ! msgid "Support calls between THUMB and ARM instructions sets" msgstr "" ! #: config/arm/arm.h:449 msgid "Generate a call to abort if a noreturn function returns" msgstr "" ! #: config/arm/arm.h:452 msgid "Do not move instructions into a function's prologue" msgstr "" ! #: config/arm/arm.h:455 msgid "Do not load the PIC register in function prologues" msgstr "" ! #: config/arm/arm.h:458 msgid "Generate call insns as indirect calls, if necessary" msgstr "" ! #: config/arm/arm.h:461 msgid "Compile for the Thumb not the ARM" msgstr "" ! #: config/arm/arm.h:465 msgid "Thumb: Generate (non-leaf) stack frames even if not needed" msgstr "" ! #: config/arm/arm.h:468 msgid "Thumb: Generate (leaf) stack frames even if not needed" msgstr "" ! #: config/arm/arm.h:471 msgid "Thumb: Assume non-static functions may be called from ARM code" msgstr "" ! #: config/arm/arm.h:475 msgid "Thumb: Assume function pointers may go to non-Thumb aware code" msgstr "" ! #: config/arm/arm.h:485 msgid "Specify the name of the target CPU" ! msgstr "" ! #: config/arm/arm.h:487 msgid "Specify the name of the target architecture" ! msgstr "" ! #: config/arm/arm.h:491 msgid "Specify the version of the floating point emulator" msgstr "" ! #: config/arm/arm.h:493 msgid "Specify the minimum bit alignment of structures" msgstr "" ! #: config/arm/arm.h:495 msgid "Specify the register to be used for PIC addressing" msgstr "" #. None of these is actually used in cc1. If we don't define them in target #. switches cc1 complains about them. For the sake of argument lets allocate #. bit 31 of target flags for such options. --- 6246,6543 ---- #. extern char *m88k_short_data; #. #define TARGET_OPTIONS { { "short-data-", &m88k_short_data } } #. For -mcpu= + #. For -mtune= #. For -mfp-rounding-mode=[n|m|c|d] #. For -mfp-trap-mode=[n|u|su|sui] #. For -mtrap-precision=[p|f|i] #. For -mmemory-latency= ! #: config/alpha/alpha.h:268 ! msgid "Use features of and schedule given CPU" msgstr "" ! #: config/alpha/alpha.h:270 ! msgid "Schedule given CPU" ! msgstr "Schemalägg för given CPU" ! ! #: config/alpha/alpha.h:272 msgid "Control the generated fp rounding mode" msgstr "" ! #: config/alpha/alpha.h:274 msgid "Control the IEEE trap mode" msgstr "" ! #: config/alpha/alpha.h:276 msgid "Control the precision given to fp exceptions" msgstr "" ! #: config/alpha/alpha.h:278 msgid "Tune expected memory latency" msgstr "" ! #. The names we put in the hashtable will always be the unique versions gived to us by the stringtable, so we can just use their addresses as the keys. ! #. See if we already have an entry for this section. ! #: config/alpha/elf.h:354 config/elfos.h:466 config/i386/sco5.h:492 ! #: config/pa/pa64-hpux.h:246 config/rs6000/sysv4.h:971 #, c-format ! msgid "%s causes a section type conflict" msgstr "" ! #: config/arc/arc.c:108 ! #, c-format ! msgid "bad value (%s) for -mcpu switch" ! msgstr "ogiltigt värde (%s) till flagga -mcpu" ! ! #: config/arc/arc.c:1666 config/m32r/m32r.c:2221 msgid "invalid operand to %R code" ! msgstr "ogiltig operand för %R" ! #: config/arc/arc.c:1698 config/m32r/m32r.c:2244 msgid "invalid operand to %H/%L code" ! msgstr "ogiltig operand för %H/%L" ! #: config/arc/arc.c:1722 config/m32r/m32r.c:2321 msgid "invalid operand to %U code" ! msgstr "ogiltig operand för %U" ! #: config/arc/arc.c:1733 msgid "invalid operand to %V code" ! msgstr "ogiltig operand för %V" #. Unknown flag. ! #: config/arc/arc.c:1740 config/m32r/m32r.c:2360 config/sparc/sparc.c:5888 msgid "invalid operand output code" msgstr "" ! #: config/arm/arm.c:372 #, c-format msgid "switch -mcpu=%s conflicts with -march= switch" ! msgstr "flagga -mcpu=%s står i konflikt med flagga -march=" ! #: config/arm/arm.c:382 config/rs6000/rs6000.c:311 config/sparc/sparc.c:317 #, c-format msgid "bad value (%s) for %s switch" ! msgstr "ogiltigt värde (%s) till flagga %s" ! #: config/arm/arm.c:518 msgid "target CPU does not support APCS-32" ! msgstr "målprocessorn stödjer inte APCS-32" ! #: config/arm/arm.c:523 msgid "target CPU does not support APCS-26" ! msgstr "målprocessorn stödjer inte APCS-26" ! #: config/arm/arm.c:529 msgid "target CPU does not support interworking" msgstr "" ! #: config/arm/arm.c:535 ! msgid "target CPU does not support THUMB instructions." ! msgstr "målprocessorn stödjer inte THUMB-instruktioner" ! #: config/arm/arm.c:549 msgid "" "enabling backtrace support is only meaningful when compiling for the Thumb." msgstr "" ! #: config/arm/arm.c:552 msgid "" "enabling callee interworking support is only meaningful when compiling for " "the Thumb." msgstr "" ! #: config/arm/arm.c:555 msgid "" "enabling caller interworking support is only meaningful when compiling for " "the Thumb." msgstr "" ! #: config/arm/arm.c:561 msgid "interworking forces APCS-32 to be used" msgstr "" ! #: config/arm/arm.c:567 msgid "-mapcs-stack-check incompatible with -mno-apcs-frame" msgstr "" ! #: config/arm/arm.c:575 msgid "-fpic and -mapcs-reent are incompatible" ! msgstr "-fpic och -mapcs-reent är inkompatibla" ! #: config/arm/arm.c:578 msgid "APCS reentrant code not supported. Ignored" msgstr "" ! #: config/arm/arm.c:586 msgid "-g with -mno-apcs-frame may not give sensible debugging" msgstr "" ! #: config/arm/arm.c:594 msgid "Passing floating point arguments in fp regs not yet supported" msgstr "" ! #: config/arm/arm.c:623 #, c-format msgid "Invalid floating point emulation option: -mfpe-%s" msgstr "" ! #: config/arm/arm.c:647 msgid "Structure size boundary can only be set to 8 or 32" ! msgstr "Strukturstorleksgräns kan bara sättas till 8 eller 32" ! #: config/arm/arm.c:655 msgid "-mpic-register= is useless without -fpic" ! msgstr "-mpic-register= är oanvändbar utan -fpic" ! #: config/arm/arm.c:664 #, c-format msgid "Unable to use '%s' for PIC register" msgstr "" ! #. FIXME - the way to handle this situation is to allow ! #. the pretend args to be dumped onto the stack, then ! #. reuse r3 to save IP. This would involve moving the ! #. copying of SP into IP until after the pretend args ! #. have been dumped, but this is not too hard. ! #. [See e.g. gcc.c-torture/execute/nest-stdar-1.c.] ! #: config/arm/arm.c:7836 ! msgid "Unable to find a temporary location for static chain register" msgstr "" ! #: config/arm/arm.c:8798 ! msgid "Unable to compute real location of stacked parameter" msgstr "" ! #: config/arm/arm.c:9492 ! msgid "no low registers available for popping high registers" msgstr "" ! #: config/arm/arm.c:9704 ! msgid "Interrupt Service Routines cannot be coded in Thumb mode." msgstr "" ! #: config/arm/arm.h:421 msgid "Generate APCS conformant stack frames" msgstr "" ! #: config/arm/arm.h:424 msgid "Store function names in object code" msgstr "" ! #: config/arm/arm.h:428 ! msgid "Use the 32-bit version of the APCS" ! msgstr "Använd 32-bit version av APCS" ! #: config/arm/arm.h:430 ! msgid "Use the 26-bit version of the APCS" ! msgstr "Använd 26-bit version av APCS" ! #: config/arm/arm.h:434 msgid "Pass FP arguments in FP registers" ! msgstr "Skicka FP-argument i FP-register" ! #: config/arm/arm.h:437 msgid "Generate re-entrant, PIC code" msgstr "" ! #: config/arm/arm.h:440 msgid "The MMU will trap on unaligned accesses" msgstr "" ! #: config/arm/arm.h:447 msgid "Use library calls to perform FP operations" ! msgstr "Använd biblioteksrutiner för FP-operationer" ! #: config/arm/arm.h:449 config/i960/i960.h:286 msgid "Use hardware floating point instructions" ! msgstr "Använd flyttalsinstruktioner i hårdvara" ! #: config/arm/arm.h:451 msgid "Assume target CPU is configured as big endian" ! msgstr "Antag att mål-CPU:n är konfigurerad som \"big endian\"" ! #: config/arm/arm.h:453 msgid "Assume target CPU is configured as little endian" ! msgstr "Antag att mål-CPU:n är konfigurerad som \"little endian\"" ! #: config/arm/arm.h:455 msgid "Assume big endian bytes, little endian words" ! msgstr "Antag att bytes är \"big endian\", ord är \"little endian\"" ! #: config/arm/arm.h:457 ! msgid "Support calls between Thumb and ARM instruction sets" msgstr "" ! #: config/arm/arm.h:460 msgid "Generate a call to abort if a noreturn function returns" msgstr "" ! #: config/arm/arm.h:463 msgid "Do not move instructions into a function's prologue" msgstr "" ! #: config/arm/arm.h:466 msgid "Do not load the PIC register in function prologues" msgstr "" ! #: config/arm/arm.h:469 msgid "Generate call insns as indirect calls, if necessary" msgstr "" ! #: config/arm/arm.h:472 msgid "Compile for the Thumb not the ARM" msgstr "" ! #: config/arm/arm.h:476 msgid "Thumb: Generate (non-leaf) stack frames even if not needed" msgstr "" ! #: config/arm/arm.h:479 msgid "Thumb: Generate (leaf) stack frames even if not needed" msgstr "" ! #: config/arm/arm.h:482 msgid "Thumb: Assume non-static functions may be called from ARM code" msgstr "" ! #: config/arm/arm.h:486 msgid "Thumb: Assume function pointers may go to non-Thumb aware code" msgstr "" ! #: config/arm/arm.h:496 msgid "Specify the name of the target CPU" ! msgstr "Ange namnet på målprocessorn" ! #: config/arm/arm.h:498 msgid "Specify the name of the target architecture" ! msgstr "Ange namnet på målarkitekturen" ! #: config/arm/arm.h:502 msgid "Specify the version of the floating point emulator" msgstr "" ! #: config/arm/arm.h:504 msgid "Specify the minimum bit alignment of structures" msgstr "" ! #: config/arm/arm.h:506 msgid "Specify the register to be used for PIC addressing" msgstr "" + #: config/arm/pe.c:255 config/i386/winnt.c:339 config/mcore/mcore.c:3399 + #, c-format + msgid "initialized variable `%s' is marked dllimport" + msgstr "initierad variabel \"%s\" är markerad som dllimport" + + #: config/arm/pe.c:264 config/i386/winnt.c:348 + #, c-format + msgid "static variable `%s' is marked dllimport" + msgstr "statisk variabel \"%s\" är markerad som dllimport" + + #: config/arm/pe.h:62 + msgid "Ignore dllimport attribute for functions" + msgstr "Ignorera attributet dllimport för funktioner" + #. None of these is actually used in cc1. If we don't define them in target #. switches cc1 complains about them. For the sake of argument lets allocate #. bit 31 of target flags for such options. *************** msgstr "" *** 3671,3676 **** --- 6553,6866 ---- msgid "Don't do symbol renaming" msgstr "" + #: config/avr/avr.c:190 + #, c-format + msgid "MCU `%s' not supported" + msgstr "MCU \"%s\" stöds inte" + + #: config/avr/avr.c:430 + #, c-format + msgid "large frame pointer change (%d) with -mtiny-stack" + msgstr "" + + #: config/avr/avr.c:4704 + msgid "Only initialized variables can be placed into program memory area." + msgstr "" + + #. `TARGET_...' + #. This series of macros is to allow compiler command arguments to + #. enable or disable the use of optional features of the target + #. machine. For example, one machine description serves both the + #. 68000 and the 68020; a command argument tells the compiler whether + #. it should use 68020-only instructions or not. This command + #. argument works by means of a macro `TARGET_68020' that tests a bit + #. in `target_flags'. + #. + #. Define a macro `TARGET_FEATURENAME' for each such option. Its + #. definition should test a bit in `target_flags'; for example: + #. + #. #define TARGET_68020 (target_flags & 1) + #. + #. One place where these macros are used is in the + #. condition-expressions of instruction patterns. Note how + #. `TARGET_68020' appears frequently in the 68000 machine description + #. file, `m68k.md'. Another place they are used is in the + #. definitions of the other macros in the `MACHINE.h' file. + #: config/avr/avr.h:99 + msgid "Assume int to be 8 bit integer" + msgstr "" + + #: config/avr/avr.h:101 + msgid "Change the stack pointer without disabling interrupts" + msgstr "" + + #: config/avr/avr.h:103 + msgid "Use subroutines for function prologue/epilogue" + msgstr "" + + #: config/avr/avr.h:105 + msgid "Change only the low 8 bits of the stack pointer" + msgstr "" + + #: config/avr/avr.h:107 + msgid "Do not generate tablejump insns" + msgstr "" + + #: config/avr/avr.h:110 + msgid "Output instruction sizes to the asm file" + msgstr "" + + #: config/avr/avr.h:144 + msgid "Specify the initial stack address" + msgstr "" + + #: config/avr/avr.h:145 + msgid "Specify the MCU name" + msgstr "" + + #: config/avr/avr.h:2899 + msgid "Trampolines not supported\n" + msgstr "" + + #: config/c4x/c4x.c:268 + #, c-format + msgid "Unknown CPU version %d, using 40.\n" + msgstr "" + + #: config/c4x/c4x.c:859 + #, c-format + msgid "ISR %s requires %d words of local vars, max is 32767." + msgstr "" + + #: config/c4x/c4x.c:4525 + #, c-format + msgid "junk at end of '#pragma %s'" + msgstr "skräp vid slutet av \"#pragma %s\"" + + #. Name of the c4x assembler. + #. Name of the c4x linker. + #. Define assembler options. + #. Define linker options. + #. Define C preprocessor options. + #. Specify the end file to link with. + #. Target compilation option flags. + #. Small memory model. + #. Use 24-bit MPYI for C3x. + #. Fast fixing of floats. + #. Allow use of RPTS. + #. Emit C3x code. + #. Be compatible with TI assembler. + #. Be paranoid about DP reg. in ISRs. + #. Pass arguments on stack. + #. Enable features under development. + #. Enable repeat block. + #. Use BK as general register. + #. Use decrement and branch for C3x. + #. Enable debugging of GCC. + #. Force constants into registers. + #. Allow unsigned loop counters. + #. Force op0 and op1 to be same. + #. Save all 40 bits for floats. + #. Allow parallel insns. + #. Allow MPY||ADD, MPY||SUB insns. + #. Assume mem refs possibly aliased. + #. Emit C30 code. + #. Emit C31 code. + #. Emit C32 code. + #. Emit C33 code. + #. Emit C40 code. + #. Emit C44 code. + #. Run-time compilation parameters selecting different hardware subsets. + #. + #. Macro to define tables used to set the flags. + #. This is a list in braces of triplets in braces, + #. each pair being { "NAME", VALUE, "DESCRIPTION" } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/c4x/c4x.h:141 + msgid "Small memory model" + msgstr "Liten minnesmodell" + + #: config/c4x/c4x.h:143 + msgid "Big memory model" + msgstr "Stor minnesmodell" + + #: config/c4x/c4x.h:145 + msgid "Use MPYI instruction for C3x" + msgstr "" + + #: config/c4x/c4x.h:147 + msgid "Do not use MPYI instruction for C3x" + msgstr "" + + #: config/c4x/c4x.h:149 + msgid "Use fast but approximate float to integer conversion" + msgstr "" + + #: config/c4x/c4x.h:151 + msgid "Use slow but accurate float to integer conversion" + msgstr "" + + #: config/c4x/c4x.h:153 + msgid "Enable use of RTPS instruction" + msgstr "" + + #: config/c4x/c4x.h:155 + msgid "Disable use of RTPS instruction" + msgstr "" + + #: config/c4x/c4x.h:157 + msgid "Enable use of RTPB instruction" + msgstr "" + + #: config/c4x/c4x.h:159 + msgid "Disable use of RTPB instruction" + msgstr "" + + #: config/c4x/c4x.h:161 + msgid "Generate code for C30 CPU" + msgstr "Generera kod för CPU C30" + + #: config/c4x/c4x.h:163 + msgid "Generate code for C31 CPU" + msgstr "Generera kod för CPU C31" + + #: config/c4x/c4x.h:165 + msgid "Generate code for C32 CPU" + msgstr "Generera kod för CPU C32" + + #: config/c4x/c4x.h:167 + msgid "Generate code for C33 CPU" + msgstr "Generera kod för CPU C33" + + #: config/c4x/c4x.h:169 + msgid "Generate code for C40 CPU" + msgstr "Generera kod för CPU C40" + + #: config/c4x/c4x.h:171 + msgid "Generate code for C44 CPU" + msgstr "Generera kod för CPU C44" + + #: config/c4x/c4x.h:173 + msgid "Emit code compatible with TI tools" + msgstr "" + + #: config/c4x/c4x.h:175 + msgid "Emit code to use GAS extensions" + msgstr "" + + #: config/c4x/c4x.h:177 config/c4x/c4x.h:181 + msgid "Save DP across ISR in small memory model" + msgstr "" + + #: config/c4x/c4x.h:179 config/c4x/c4x.h:183 + msgid "Don't save DP across ISR in small memory model" + msgstr "" + + #: config/c4x/c4x.h:185 + msgid "Pass arguments on the stack" + msgstr "Skicka argument på stacken" + + #: config/c4x/c4x.h:187 + msgid "Pass arguments in registers" + msgstr "Skicka argument i register" + + #: config/c4x/c4x.h:189 + msgid "Enable new features under development" + msgstr "" + + #: config/c4x/c4x.h:191 + msgid "Disable new features under development" + msgstr "" + + #: config/c4x/c4x.h:193 + msgid "Use the BK register as a general purpose register" + msgstr "" + + #: config/c4x/c4x.h:195 + msgid "Do not allocate BK register" + msgstr "" + + #: config/c4x/c4x.h:197 + msgid "Enable use of DB instruction" + msgstr "" + + #: config/c4x/c4x.h:199 + msgid "Disable use of DB instruction" + msgstr "" + + #: config/c4x/c4x.h:201 + msgid "Enable debugging" + msgstr "" + + #: config/c4x/c4x.h:203 + msgid "Disable debugging" + msgstr "" + + #: config/c4x/c4x.h:205 + msgid "Force constants into registers to improve hoisting" + msgstr "" + + #: config/c4x/c4x.h:207 + msgid "Don't force constants into registers" + msgstr "" + + #: config/c4x/c4x.h:209 + msgid "Force RTL generation to emit valid 3 operand insns" + msgstr "" + + #: config/c4x/c4x.h:211 + msgid "Allow RTL generation to emit invalid 3 operand insns" + msgstr "" + + #: config/c4x/c4x.h:213 + msgid "Allow unsigned interation counts for RPTB/DB" + msgstr "" + + #: config/c4x/c4x.h:215 + msgid "Disallow unsigned iteration counts for RPTB/DB" + msgstr "" + + #: config/c4x/c4x.h:217 + msgid "Preserve all 40 bits of FP reg across call" + msgstr "" + + #: config/c4x/c4x.h:219 + msgid "Only preserve 32 bits of FP reg across call" + msgstr "" + + #: config/c4x/c4x.h:221 + msgid "Enable parallel instructions" + msgstr "" + + #: config/c4x/c4x.h:223 + msgid "Disable parallel instructions" + msgstr "" + + #: config/c4x/c4x.h:225 + msgid "Enable MPY||ADD and MPY||SUB instructions" + msgstr "" + + #: config/c4x/c4x.h:227 + msgid "Disable MPY||ADD and MPY||SUB instructions" + msgstr "" + + #: config/c4x/c4x.h:229 + msgid "Assume that pointers may be aliased" + msgstr "" + + #: config/c4x/c4x.h:231 + msgid "Assume that pointers not aliased" + msgstr "" + + #: config/c4x/c4x.h:321 + msgid "Specify maximum number of iterations for RPTS" + msgstr "" + + #: config/c4x/c4x.h:323 + msgid "Select CPU to generate code for" + msgstr "Välj CPU att generera kod för" + #. Macros used in the machine description to test the flags. #. Macro to define tables used to set the flags. #. This is a list in braces of pairs in braces, *************** msgstr "" *** 3679,3705 **** #. An empty string NAME is used to identify the default VALUE. #: config/clipper/clipper.h:40 msgid "Generate code for the C400" ! msgstr "" #: config/clipper/clipper.h:41 msgid "Generate code for the C300" ! msgstr "" #: config/convex/convex.h:52 msgid "Generate code for c1" ! msgstr "" #: config/convex/convex.h:53 msgid "Generate code for c2" ! msgstr "" #: config/convex/convex.h:54 msgid "Generate code for c32" ! msgstr "" #: config/convex/convex.h:55 config/convex/convex.h:56 msgid "Generate code for c34" ! msgstr "" #: config/convex/convex.h:58 msgid "Use standard calling sequence, with arg count word" --- 6869,6895 ---- #. An empty string NAME is used to identify the default VALUE. #: config/clipper/clipper.h:40 msgid "Generate code for the C400" ! msgstr "Generera kod för C400" #: config/clipper/clipper.h:41 msgid "Generate code for the C300" ! msgstr "Genrera kod för C300" #: config/convex/convex.h:52 msgid "Generate code for c1" ! msgstr "Generera kod för c1" #: config/convex/convex.h:53 msgid "Generate code for c2" ! msgstr "Generera kod för c2" #: config/convex/convex.h:54 msgid "Generate code for c32" ! msgstr "Generera kod för c32" #: config/convex/convex.h:55 config/convex/convex.h:56 msgid "Generate code for c34" ! msgstr "Generera kod för c34" #: config/convex/convex.h:58 msgid "Use standard calling sequence, with arg count word" *************** msgstr "" *** 3727,3809 **** #: config/convex/convex.h:69 msgid "Use 64-bit longs" ! msgstr "" #: config/convex/convex.h:70 msgid "Use cc- and libc-compatible 32-bit longs" msgstr "" ! #: config/dsp16xx/dsp16xx.c:271 #, c-format ! msgid "Invalid register class letter %c" msgstr "" ! #: config/dsp16xx/dsp16xx.c:374 ! msgid "ACCUM_HIGH_REGS class in limit_reload_class" msgstr "" ! #: config/dsp16xx/dsp16xx.c:401 ! msgid "YH_OR_ACCUM_HIGH_REGS found in limit_reload_class" msgstr "" ! #. Register 'yl' is invalid for QImode, so we should never ! #. see it. ! #: config/dsp16xx/dsp16xx.c:410 ! msgid "YL found in limit_reload_class" msgstr "" ! #: config/dsp16xx/dsp16xx.c:1228 config/dsp16xx/dsp16xx.c:1255 ! msgid "Stack size > 32k" msgstr "" ! #: config/dsp16xx/dsp16xx.c:1485 ! msgid "Invalid addressing mode" msgstr "" ! #: config/dsp16xx/dsp16xx.c:1671 ! msgid "Bad register extension code" msgstr "" ! #: config/dsp16xx/dsp16xx.c:1729 ! msgid "Invalid offset in ybase addressing" msgstr "" ! #: config/dsp16xx/dsp16xx.c:1732 ! msgid "Invalid register in ybase addressing" msgstr "" ! #: config/dsp16xx/dsp16xx.c:1761 config/dsp16xx/dsp16xx.c:1999 ! msgid "inline float constants not supported on this host" msgstr "" ! #: config/dsp16xx/dsp16xx.c:1905 ! msgid "Invalid shift operator in emit_1600_core_shift" msgstr "" ! #: config/dsp16xx/dsp16xx.c:2184 ! msgid "Invalid mode for gen_tst_reg" msgstr "" ! #: config/dsp16xx/dsp16xx.c:2265 ! msgid "Invalid mode for integer comparison in gen_compare_reg" ! msgstr "" ! #: config/dsp16xx/dsp16xx.c:2293 ! msgid "Invalid register for compare" msgstr "" #. Output assembler code to FILE to increment profiler label # LABELNO #. for profiling a function entry. ! #: config/dsp16xx/dsp16xx.h:1187 config/dsp16xx/dsp16xx.h:1191 ! #: config/dsp16xx/dsp16xx.h:1195 config/dsp16xx/dsp16xx.h:1838 ! #: config/dsp16xx/dsp16xx.h:1842 msgid "Profiling not implemented yet." ! msgstr "" #. Emit RTL insns to initialize the variable parts of a trampoline. #. FNADDR is an RTX for the address of the function's pure code. #. CXT is an RTX for the static chain value for the function. ! #: config/dsp16xx/dsp16xx.h:1205 config/dsp16xx/dsp16xx.h:1217 msgid "Trampolines not yet implemented" msgstr "" --- 6917,7034 ---- #: config/convex/convex.h:69 msgid "Use 64-bit longs" ! msgstr "Använd 64-bits long" #: config/convex/convex.h:70 msgid "Use cc- and libc-compatible 32-bit longs" msgstr "" ! #: config/d30v/d30v.c:186 #, c-format ! msgid "Bad modes_tieable_p for register %s, mode1 %s, mode2 %s" msgstr "" ! #. This macro defines names of command options to set and clear bits in ! #. `target_flags'. Its definition is an initializer with a subgrouping for ! #. each command option. ! #. ! #. Each subgrouping contains a string constant, that defines the option name, a ! #. number, which contains the bits to set in `target_flags', and a second ! #. string which is the description displayed by `--help'. If the number is ! #. negative then the bits specified by the number are cleared instead of being ! #. set. If the description string is present but empty, then no help ! #. information will be displayed for that option, but it will not count as an ! #. undocumented option. The actual option name is made by appending `-m' to ! #. the specified name. ! #. ! #. One of the subgroupings should have a null string. The number in this ! #. grouping is the default value for target_flags. Any target options act ! #. starting with that value. ! #. ! #. Here is an example which defines -m68000 and -m68020 with opposite meanings, ! #. and picks the latter as the default: ! #. ! #. #define TARGET_SWITCHES { { "68020", TARGET_MASK_68020, "" }, { "68000", -TARGET_MASK_68020, "Compile for the 68000" }, { "", TARGET_MASK_68020, "" }} ! #: config/d30v/d30v.h:447 ! msgid "Enable use of conditional move instructions" msgstr "" ! #: config/d30v/d30v.h:450 ! msgid "Disable use of conditional move instructions" msgstr "" ! #: config/d30v/d30v.h:453 ! msgid "Debug argument support in compiler" msgstr "" ! #: config/d30v/d30v.h:456 ! msgid "Debug stack support in compiler" msgstr "" ! #: config/d30v/d30v.h:459 ! msgid "Debug memory address support in compiler" msgstr "" ! #: config/d30v/d30v.h:462 ! msgid "Make adjacent short instructions parallel if possible." msgstr "" ! #: config/d30v/d30v.h:465 ! msgid "Do not make adjacent short instructions parallel." msgstr "" ! #: config/d30v/d30v.h:468 config/d30v/d30v.h:471 ! msgid "Link programs/data to be in external memory by default" msgstr "" ! #: config/d30v/d30v.h:474 ! msgid "Link programs/data to be in onchip memory by default" msgstr "" ! #. This macro is similar to `TARGET_SWITCHES' but defines names of command ! #. options that have values. Its definition is an initializer with a ! #. subgrouping for each command option. ! #. ! #. Each subgrouping contains a string constant, that defines the fixed part of ! #. the option name, the address of a variable, and a description string. The ! #. variable, type `char *', is set to the variable part of the given option if ! #. the fixed part matches. The actual option name is made by appending `-m' to ! #. the specified name. ! #. ! #. Here is an example which defines `-mshort-data-'. If the given ! #. option is `-mshort-data-512', the variable `m88k_short_data' will be set to ! #. the string "512". ! #. ! #. extern char *m88k_short_data; ! #. #define TARGET_OPTIONS { { "short-data-", &m88k_short_data, "Specify the size of the short data section" } } ! #: config/d30v/d30v.h:501 ! msgid "Change the branch costs within the compiler" msgstr "" ! #: config/d30v/d30v.h:504 ! msgid "Change the threshold for conversion to conditional execution" msgstr "" ! #: config/dsp16xx/dsp16xx.c:1225 config/dsp16xx/dsp16xx.c:1250 ! msgid "Stack size > 32k" ! msgstr "Stackstorlek > 32k" ! #: config/dsp16xx/dsp16xx.c:1759 config/dsp16xx/dsp16xx.c:1999 ! msgid "inline float constants not supported on this host" msgstr "" #. Output assembler code to FILE to increment profiler label # LABELNO #. for profiling a function entry. ! #: config/dsp16xx/dsp16xx.h:1188 config/dsp16xx/dsp16xx.h:1193 ! #: config/dsp16xx/dsp16xx.h:1198 config/dsp16xx/dsp16xx.h:1840 ! #: config/dsp16xx/dsp16xx.h:1845 msgid "Profiling not implemented yet." ! msgstr "Profilering är inte implementerat ännu." #. Emit RTL insns to initialize the variable parts of a trampoline. #. FNADDR is an RTX for the address of the function's pure code. #. CXT is an RTX for the static chain value for the function. ! #: config/dsp16xx/dsp16xx.h:1209 config/dsp16xx/dsp16xx.h:1221 msgid "Trampolines not yet implemented" msgstr "" *************** msgstr "" *** 3812,3975 **** #. each pair being { "NAME", VALUE } #. where VALUE is the bits to set or minus the bits to clear. #. An empty string NAME is used to identify the default VALUE. ! #: config/elxsi/elxsi.h:50 msgid "Generate code the unix assembler can handle" ! msgstr "" ! #: config/elxsi/elxsi.h:51 msgid "Generate code an embedded assembler can handle" ! msgstr "" ! ! #. Macro to define tables used to set the flags. ! #. This is a list in braces of pairs in braces, ! #. each pair being { "NAME", VALUE } ! #. where VALUE is the bits to set or minus the bits to clear. ! #. An empty string NAME is used to identify the default VALUE. ! #: config/fx80/fx80.h:113 config/fx80/fx80.h:114 ! msgid "Generate code for a mc68020" ! msgstr "" ! ! #. Since we don't define PCC_BITFIELD_TYPE_MATTERS or use a large ! #. STRUCTURE_SIZE_BOUNDARY, we must have bitfield instructions. ! #: config/fx80/fx80.h:115 config/gmicro/gmicro.h:101 config/ns32k/ns32k.h:117 ! msgid "Use bitfield instructions" ! msgstr "" ! ! #: config/fx80/fx80.h:116 config/fx80/fx80.h:117 ! msgid "Generate code for a mc68000" ! msgstr "" ! ! #: config/fx80/fx80.h:118 ! msgid "Generate software FP code" ! msgstr "" ! ! #: config/fx80/fx80.h:119 ! msgid "Do not generate bitfield insns" ! msgstr "" ! ! #: config/fx80/fx80.h:120 ! msgid "Use 16bit integers" ! msgstr "" ! ! #: config/fx80/fx80.h:121 ! msgid "Use 32bit integers" ! msgstr "" ! ! #. Macro to define tables used to set the flags. ! #. This is a list in braces of pairs in braces, ! #. each pair being { "NAME", VALUE } ! #. where VALUE is the bits to set or minus the bits to clear. ! #. An empty string NAME is used to identify the default VALUE. ! #: config/gmicro/gmicro.h:89 ! msgid "Compile for Gmicro/300" ! msgstr "" ! #: config/gmicro/gmicro.h:90 ! msgid "Compile for Gmicro/200" msgstr "" ! #: config/gmicro/gmicro.h:91 ! msgid "Compile for Gmicro/100" msgstr "" ! #: config/gmicro/gmicro.h:92 ! msgid "Use floating point co-processor" msgstr "" ! #: config/gmicro/gmicro.h:94 ! msgid "Do not use floating point co-processor" msgstr "" ! #: config/gmicro/gmicro.h:95 config/i386/i386.h:237 ! msgid "Alternate calling convention" msgstr "" ! #: config/gmicro/gmicro.h:96 config/i386/i386.h:239 config/ns32k/ns32k.h:106 ! msgid "Use normal calling convention" msgstr "" ! #: config/gmicro/gmicro.h:103 config/ns32k/ns32k.h:116 ! msgid "Do not use bitfield instructions" msgstr "" ! #: config/gmicro/gmicro.h:105 ! msgid "Use alternative return sequence" msgstr "" ! #: config/gmicro/gmicro.h:106 ! msgid "Use normal return sequence" msgstr "" ! #: config/gmicro/gmicro.h:107 ! msgid "Always use string instruction" msgstr "" ! #: config/gmicro/gmicro.h:109 ! msgid "Use string instruction when appropriate" ! msgstr "" ! #: config/h8300/h8300.c:3023 config/h8300/h8300.c:3035 msgid "Only initialized variables can be placed into the 8-bit area." ! msgstr "" #. Macro to define tables used to set the flags. #. This is a list in braces of pairs in braces, #. each pair being { "NAME", VALUE } #. where VALUE is the bits to set or minus the bits to clear. #. An empty string NAME is used to identify the default VALUE. ! #: config/h8300/h8300.h:105 msgid "Generate H8/S code" ! msgstr "" ! #: config/h8300/h8300.h:106 msgid "Do not generate H8/S code" ! msgstr "" ! #: config/h8300/h8300.h:107 msgid "Make integers 32 bits wide" ! msgstr "" ! #: config/h8300/h8300.h:110 msgid "Use registers for argument passing" ! msgstr "" ! #: config/h8300/h8300.h:112 msgid "Do not use registers for argument passing" ! msgstr "" ! #: config/h8300/h8300.h:114 msgid "Consider access to byte sized memory slow" msgstr "" ! #: config/h8300/h8300.h:115 msgid "Enable linker relaxing" msgstr "" ! #: config/h8300/h8300.h:117 msgid "Generate H8/300H code" ! msgstr "" ! #: config/h8300/h8300.h:118 msgid "Do not generate H8/300H code" ! msgstr "" ! #: config/h8300/h8300.h:119 msgid "Use H8/300 alignment rules" msgstr "" ! #: config/i370/i370.c:870 msgid "real name is too long - alias ignored" msgstr "" ! #: config/i370/i370.c:875 msgid "alias name is too long - alias ignored" msgstr "" ! #: config/i370/i370.c:1040 msgid "junk at end of #pragma map" msgstr "" ! #: config/i370/i370.c:1046 msgid "malformed #pragma map, ignored" msgstr "" --- 7037,7167 ---- #. each pair being { "NAME", VALUE } #. where VALUE is the bits to set or minus the bits to clear. #. An empty string NAME is used to identify the default VALUE. ! #: config/elxsi/elxsi.h:51 msgid "Generate code the unix assembler can handle" ! msgstr "Genrerar kod som unix assemblatorn kan hantera" ! #: config/elxsi/elxsi.h:52 msgid "Generate code an embedded assembler can handle" ! msgstr "Generera kod en inbäddad assemblator kan hantera" ! #: config/fr30/fr30.c:445 ! msgid "fr30_print_operand_address: unhandled address" msgstr "" ! #: config/fr30/fr30.c:472 ! #, c-format ! msgid "fr30_print_operand: unrecognised %p code" msgstr "" ! #: config/fr30/fr30.c:492 ! msgid "fr30_print_operand: unrecognised %b code" msgstr "" ! #: config/fr30/fr30.c:513 ! msgid "fr30_print_operand: unrecognised %B code" msgstr "" ! #: config/fr30/fr30.c:521 ! msgid "fr30_print_operand: invalid operand to %A code" msgstr "" ! #: config/fr30/fr30.c:538 ! #, c-format ! msgid "fr30_print_operand: invalid %x code" msgstr "" ! #: config/fr30/fr30.c:545 ! msgid "fr30_print_operand: invalid %F code" msgstr "" ! #: config/fr30/fr30.c:561 ! msgid "fr30_print_operand: unknown code" msgstr "" ! #: config/fr30/fr30.c:590 config/fr30/fr30.c:599 config/fr30/fr30.c:610 ! #: config/fr30/fr30.c:623 ! msgid "fr30_print_operand: unhandled MEM" msgstr "" ! #: config/fr30/fr30.h:82 ! msgid "Assume small address space" msgstr "" ! #: config/h8300/h8300.c:116 ! msgid "-ms2600 is used without -ms." ! msgstr "-ms2600 används utan -ms." ! #: config/h8300/h8300.c:3047 config/h8300/h8300.c:3059 msgid "Only initialized variables can be placed into the 8-bit area." ! msgstr "Initiera bara variabler som kan placeras i 8-bits området." #. Macro to define tables used to set the flags. #. This is a list in braces of pairs in braces, #. each pair being { "NAME", VALUE } #. where VALUE is the bits to set or minus the bits to clear. #. An empty string NAME is used to identify the default VALUE. ! #: config/h8300/h8300.h:108 msgid "Generate H8/S code" ! msgstr "Generera H8/S-kod" ! #: config/h8300/h8300.h:109 msgid "Do not generate H8/S code" ! msgstr "Generera inte H8/S-kod" ! #: config/h8300/h8300.h:110 ! msgid "Generate H8/S2600 code" ! msgstr "Generera kod för H8/S2600" ! ! #: config/h8300/h8300.h:111 ! msgid "Do not generate H8/S2600 code" ! msgstr "Generera inte kod för H8/S2600" ! ! #: config/h8300/h8300.h:112 msgid "Make integers 32 bits wide" ! msgstr "Gör heltal 32 bitar stora" ! #: config/h8300/h8300.h:115 msgid "Use registers for argument passing" ! msgstr "Använd register för argumentskickning" ! #: config/h8300/h8300.h:117 msgid "Do not use registers for argument passing" ! msgstr "Använd inte register för argumentskickning" ! #: config/h8300/h8300.h:119 msgid "Consider access to byte sized memory slow" msgstr "" ! #: config/h8300/h8300.h:120 msgid "Enable linker relaxing" msgstr "" ! #: config/h8300/h8300.h:122 msgid "Generate H8/300H code" ! msgstr "Generera H8/300H-kod" ! #: config/h8300/h8300.h:123 msgid "Do not generate H8/300H code" ! msgstr "Generera inte H8/300H-kod" ! #: config/h8300/h8300.h:124 msgid "Use H8/300 alignment rules" msgstr "" ! #: config/i370/i370.c:869 msgid "real name is too long - alias ignored" msgstr "" ! #: config/i370/i370.c:874 msgid "alias name is too long - alias ignored" msgstr "" ! #: config/i370/i370.c:1039 msgid "junk at end of #pragma map" msgstr "" ! #: config/i370/i370.c:1045 msgid "malformed #pragma map, ignored" msgstr "" *************** msgstr "" *** 3985,4019 **** msgid "Do not generate char instructions" msgstr "" ! #: config/i386/cygwin.h:50 msgid "Use the Cygwin interface" msgstr "" ! #: config/i386/cygwin.h:52 msgid "Use the Mingw32 interface" msgstr "" ! #: config/i386/cygwin.h:53 msgid "Create GUI application" ! msgstr "" #: config/i386/cygwin.h:55 ! msgid "Create console application" msgstr "" #: config/i386/cygwin.h:56 ! msgid "Generate code for a DLL" msgstr "" #: config/i386/cygwin.h:58 msgid "Ignore dllimport for functions" ! msgstr "" ! #: config/i386/cygwin.h:60 msgid "Use Mingw-specific thread support" msgstr "" ! #: config/i386/cygwin.h:265 #, c-format msgid "-f%s ignored for target (all code is position independent)" msgstr "" --- 7177,7219 ---- msgid "Do not generate char instructions" msgstr "" ! #: config/i386/cygwin.h:51 msgid "Use the Cygwin interface" msgstr "" ! #: config/i386/cygwin.h:53 msgid "Use the Mingw32 interface" msgstr "" ! #: config/i386/cygwin.h:54 msgid "Create GUI application" ! msgstr "Skapa GUI-applikation" #: config/i386/cygwin.h:55 ! msgid "Don't set Windows defines" msgstr "" #: config/i386/cygwin.h:56 ! msgid "Set Windows defines" msgstr "" #: config/i386/cygwin.h:58 + msgid "Create console application" + msgstr "Skapa konsollapplikation" + + #: config/i386/cygwin.h:59 config/i386/win32.h:59 + msgid "Generate code for a DLL" + msgstr "Generera kod för en DLL" + + #: config/i386/cygwin.h:61 config/i386/win32.h:61 msgid "Ignore dllimport for functions" ! msgstr "Ignorera dllimport för funktioner" ! #: config/i386/cygwin.h:63 msgid "Use Mingw-specific thread support" msgstr "" ! #: config/i386/cygwin.h:315 #, c-format msgid "-f%s ignored for target (all code is position independent)" msgstr "" *************** msgstr "" *** 4045,4183 **** #: config/i386/dgux.h:71 msgid "Warn when a function arg is a structure" ! msgstr "" #: config/i386/dgux.h:249 msgid "argument is a structure" msgstr "" ! #: config/i386/i386.c:503 #, c-format ! msgid "bad value (%s) for -march= switch" msgstr "" ! #: config/i386/i386.c:516 config/mips/mips.c:4865 #, c-format ! msgid "bad value (%s) for -mcpu= switch" msgstr "" ! #: config/i386/i386.c:545 #, c-format ! msgid "Register '%c' is unknown" msgstr "" ! #: config/i386/i386.c:549 #, c-format ! msgid "Register '%c' already specified in allocation order" msgstr "" ! #: config/i386/i386.c:560 #, c-format ! msgid "-mregparm=%d is not between 0 and %d" msgstr "" ! #: config/i386/i386.c:570 #, c-format ! msgid "-malign-loops=%d is not between 0 and %d" msgstr "" ! #: config/i386/i386.c:580 #, c-format ! msgid "-malign-jumps=%d is not between 0 and %d" msgstr "" ! #: config/i386/i386.c:590 #, c-format ! msgid "-malign-functions=%d is not between 0 and %d" msgstr "" ! #: config/i386/i386.c:601 #, c-format ! msgid "-mpreferred-stack-boundary=%d is not between 2 and 31" msgstr "" ! #: config/i386/i386.c:611 #, c-format msgid "-mbranch-cost=%d is not between 0 and 5" msgstr "" #. We can't handle floating point constants; #. PRINT_OPERAND must handle them. ! #: config/i386/i386.c:2973 config/pdp11/pdp11.c:1477 config/sh/sh.c:5397 ! #: final.c:3731 msgid "floating constant misused" msgstr "" ! #: config/i386/i386.c:3018 config/sh/sh.c:5451 msgid "invalid UNSPEC as operand" msgstr "" ! #: config/i386/i386.c:3024 config/pdp11/pdp11.c:1524 config/sh/sh.c:5457 ! #: final.c:3778 msgid "invalid expression as operand" msgstr "" #: config/i386/i386.h:45 config/mips/mips.h:176 msgid "half-pic init called on systems that don't support it." msgstr "" ! #: config/i386/i386.h:232 msgid "Same as -mcpu=i386" ! msgstr "" ! #: config/i386/i386.h:233 msgid "Same as -mcpu=i486" ! msgstr "" ! #: config/i386/i386.h:234 msgid "Same as -mcpu=pentium" ! msgstr "" ! #: config/i386/i386.h:235 msgid "Same as -mcpu=pentiumpro" msgstr "" ! #: config/i386/i386.h:241 msgid "Align some doubles on dword boundary" msgstr "" ! #: config/i386/i386.h:243 msgid "Align doubles on word boundary" msgstr "" ! #: config/i386/i386.h:245 msgid "Uninitialized locals in .bss" msgstr "" ! #: config/i386/i386.h:247 msgid "Uninitialized locals in .data" msgstr "" ! #: config/i386/i386.h:249 msgid "Use IEEE math for fp comparisons" ! msgstr "" ! #: config/i386/i386.h:251 msgid "Do not use IEEE math for fp comparisons" ! msgstr "" ! #: config/i386/i386.h:253 msgid "Return values of functions in FPU registers" msgstr "" ! #: config/i386/i386.h:255 msgid "Do not return values of functions in FPU registers" msgstr "" ! #: config/i386/i386.h:257 msgid "Do not generate sin, cos, sqrt for FPU" ! msgstr "" ! #: config/i386/i386.h:259 msgid "Generate sin, cos, sqrt for FPU" ! msgstr "" ! #: config/i386/i386.h:261 msgid "Omit the frame pointer in leaf functions" msgstr "" --- 7245,7427 ---- #: config/i386/dgux.h:71 msgid "Warn when a function arg is a structure" ! msgstr "Varna när ett funktionsargument är en struktur" #: config/i386/dgux.h:249 msgid "argument is a structure" msgstr "" ! #: config/i386/djgpp.h:281 ! msgid "-mbnu210 is ignored (option is obsolete)." ! msgstr "" ! ! #: config/i386/i386.c:674 #, c-format ! msgid "Code model %s not supported in PIC mode" msgstr "" ! #: config/i386/i386.c:684 config/sparc/sparc.c:280 #, c-format ! msgid "bad value (%s) for -mcmodel= switch" msgstr "" ! #: config/i386/i386.c:693 #, c-format ! msgid "Code model `%s' not supported in the %s bit mode." msgstr "" ! #: config/i386/i386.c:696 ! msgid "Code model `large' not supported yet." ! msgstr "" ! ! #: config/i386/i386.c:698 #, c-format ! msgid "%i-bit mode not compiled in." msgstr "" ! #: config/i386/i386.c:713 #, c-format ! msgid "bad value (%s) for -march= switch" msgstr "" ! #: config/i386/i386.c:725 config/mips/mips.c:4942 #, c-format ! msgid "bad value (%s) for -mcpu= switch" msgstr "" ! #: config/i386/i386.c:742 #, c-format ! msgid "-mregparm=%d is not between 0 and %d" msgstr "" ! #: config/i386/i386.c:755 ! msgid "-malign-loops is obsolete, use -falign-loops" ! msgstr "" ! ! #: config/i386/i386.c:760 config/i386/i386.c:773 config/i386/i386.c:786 #, c-format ! msgid "-malign-loops=%d is not between 0 and %d" msgstr "" ! #: config/i386/i386.c:768 ! msgid "-malign-jumps is obsolete, use -falign-jumps" ! msgstr "" ! ! #: config/i386/i386.c:781 ! msgid "-malign-functions is obsolete, use -falign-functions" ! msgstr "" ! ! #: config/i386/i386.c:808 #, c-format ! msgid "-mpreferred-stack-boundary=%d is not between %d and 31" msgstr "" ! #: config/i386/i386.c:820 #, c-format msgid "-mbranch-cost=%d is not between 0 and 5" msgstr "" #. We can't handle floating point constants; #. PRINT_OPERAND must handle them. ! #: config/i386/i386.c:3563 config/pdp11/pdp11.c:1477 final.c:3623 msgid "floating constant misused" msgstr "" ! #: config/i386/i386.c:3608 msgid "invalid UNSPEC as operand" msgstr "" ! #: config/i386/i386.c:3614 config/pdp11/pdp11.c:1524 final.c:3678 msgid "invalid expression as operand" msgstr "" + #: config/i386/i386.c:3794 + msgid "Extended registers have no high halves\n" + msgstr "" + + #: config/i386/i386.c:3809 + msgid "Unsupported operand size for extended register.\n" + msgstr "" + + #. @@@ better error message + #: config/i386/i386.c:9895 config/i386/i386.c:9928 config/i386/i386.c:10065 + msgid "selector must be an immediate" + msgstr "" + + #. @@@ better error message + #: config/i386/i386.c:10096 config/i386/i386.c:10124 + msgid "mask must be an immediate" + msgstr "" + #: config/i386/i386.h:45 config/mips/mips.h:176 msgid "half-pic init called on systems that don't support it." msgstr "" ! #: config/i386/i386.h:271 msgid "Same as -mcpu=i386" ! msgstr "Samma som -mcpu=i386" ! #: config/i386/i386.h:272 msgid "Same as -mcpu=i486" ! msgstr "Samma som -mcpu=i486" ! #: config/i386/i386.h:273 msgid "Same as -mcpu=pentium" ! msgstr "Samma som -mcpu=pentium" ! #: config/i386/i386.h:274 msgid "Same as -mcpu=pentiumpro" + msgstr "Samma som -mcpu=pentiumpro" + + #: config/i386/i386.h:276 + msgid "Alternate calling convention" msgstr "" ! #: config/i386/i386.h:278 config/ns32k/ns32k.h:106 ! msgid "Use normal calling convention" ! msgstr "" ! ! #: config/i386/i386.h:280 msgid "Align some doubles on dword boundary" msgstr "" ! #: config/i386/i386.h:282 msgid "Align doubles on word boundary" msgstr "" ! #: config/i386/i386.h:284 msgid "Uninitialized locals in .bss" msgstr "" ! #: config/i386/i386.h:286 msgid "Uninitialized locals in .data" msgstr "" ! #: config/i386/i386.h:288 msgid "Use IEEE math for fp comparisons" ! msgstr "Använd IEEE matematik för flyttaljämförelser" ! #: config/i386/i386.h:290 msgid "Do not use IEEE math for fp comparisons" ! msgstr "Använd inte IEEE matematik för flyttaljämförelser" ! #: config/i386/i386.h:292 msgid "Return values of functions in FPU registers" msgstr "" ! #: config/i386/i386.h:294 msgid "Do not return values of functions in FPU registers" msgstr "" ! #: config/i386/i386.h:296 msgid "Do not generate sin, cos, sqrt for FPU" ! msgstr "Generera inte sin, cos, sqrt för FPU" ! #: config/i386/i386.h:298 msgid "Generate sin, cos, sqrt for FPU" ! msgstr "Generera sin, cos, sqrt för FPU" ! #: config/i386/i386.h:300 msgid "Omit the frame pointer in leaf functions" msgstr "" *************** msgstr "" *** 4185,4238 **** #. undocumented #. undocumented #. undocumented ! #: config/i386/i386.h:268 msgid "Enable stack probing" msgstr "" #. undocumented #. undocumented ! #: config/i386/i386.h:273 msgid "Emit Intel syntax assembler opcodes" ! msgstr "" ! #: config/i386/i386.h:276 msgid "Align destination of the string operations" msgstr "" ! #: config/i386/i386.h:278 msgid "Do not align destination of the string operations" msgstr "" ! #: config/i386/i386.h:280 msgid "Inline all known string operations" msgstr "" ! #: config/i386/i386.h:282 msgid "Do not inline all known string operations" msgstr "" ! #: config/i386/i386.h:284 config/i386/i386.h:288 msgid "Use push instructions to save outgoing arguments" msgstr "" ! #: config/i386/i386.h:286 config/i386/i386.h:290 msgid "Do not use push instructions to save outgoing arguments" msgstr "" ! #: config/i386/i386.h:291 msgid "Support MMX builtins" ! msgstr "" ! #: config/i386/i386.h:293 msgid "Do not support MMX builtins" msgstr "" ! #: config/i386/i386.h:295 ! msgid "Support MMX and SSE builtins" msgstr "" ! #: config/i386/i386.h:297 ! msgid "Do not support MMX and SSE builtins" msgstr "" #. This macro is similar to `TARGET_SWITCHES' but defines names of --- 7429,7518 ---- #. undocumented #. undocumented #. undocumented ! #: config/i386/i386.h:307 msgid "Enable stack probing" msgstr "" #. undocumented #. undocumented ! #: config/i386/i386.h:312 msgid "Emit Intel syntax assembler opcodes" ! msgstr "Skapa assembler-opkoder med Intel-syntax" ! #: config/i386/i386.h:315 msgid "Align destination of the string operations" msgstr "" ! #: config/i386/i386.h:317 msgid "Do not align destination of the string operations" msgstr "" ! #: config/i386/i386.h:319 msgid "Inline all known string operations" msgstr "" ! #: config/i386/i386.h:321 msgid "Do not inline all known string operations" msgstr "" ! #: config/i386/i386.h:323 config/i386/i386.h:327 msgid "Use push instructions to save outgoing arguments" msgstr "" ! #: config/i386/i386.h:325 config/i386/i386.h:329 msgid "Do not use push instructions to save outgoing arguments" msgstr "" ! #: config/i386/i386.h:330 msgid "Support MMX builtins" ! msgstr "Stöd inbyggda funktioner med MMX" ! #: config/i386/i386.h:332 msgid "Do not support MMX builtins" + msgstr "Stöd inte inbyggda funktioner med MMX" + + #: config/i386/i386.h:334 + msgid "Support MMX and SSE builtins and code generation" msgstr "" ! #: config/i386/i386.h:336 ! msgid "Do not support MMX and SSE builtins and code generation" msgstr "" ! #: config/i386/i386.h:338 ! msgid "Support MMX, SSE and SSE2 builtins and code generation" ! msgstr "" ! ! #: config/i386/i386.h:340 ! msgid "Do not support MMX, SSE and SSE2 builtins and code generation" ! msgstr "" ! ! #: config/i386/i386.h:342 config/i386/i386.h:344 ! msgid "Use both SSE and i387 instruction sets for floating point arithmetics" ! msgstr "" ! ! #: config/i386/i386.h:346 ! msgid "sizeof(long double) is 16." ! msgstr "sizeof(long double) är 16." ! ! #: config/i386/i386.h:348 ! msgid "sizeof(long double) is 12." ! msgstr "sizeof(long double) är 12." ! ! #: config/i386/i386.h:350 ! msgid "Generate 64bit x86-64 code" ! msgstr "" ! ! #: config/i386/i386.h:352 ! msgid "Generate 32bit i386 code" ! msgstr "" ! ! #: config/i386/i386.h:354 ! msgid "Use red-zone in the x86-64 code" ! msgstr "" ! ! #: config/i386/i386.h:356 ! msgid "do not use red-zone in the x86-64 code" msgstr "" #. This macro is similar to `TARGET_SWITCHES' but defines names of *************** msgstr "" *** 4244,4362 **** #. variable, type `char *', is set to the variable part of the given #. option if the fixed part matches. The actual option name is made #. by appending `-m' to the specified name. ! #: config/i386/i386.h:330 config/rs6000/rs6000.h:405 config/sparc/sparc.h:711 msgid "Schedule code for given CPU" ! msgstr "" ! #: config/i386/i386.h:332 msgid "Generate code for given CPU" ! msgstr "" ! ! #: config/i386/i386.h:334 ! msgid "Control allocation order of integer registers" ! msgstr "" ! #: config/i386/i386.h:336 msgid "Number of registers used to pass integer arguments" ! msgstr "" ! #: config/i386/i386.h:338 msgid "Loop code aligned to this power of 2" ! msgstr "" ! #: config/i386/i386.h:340 msgid "Jump targets are aligned to this power of 2" ! msgstr "" ! #: config/i386/i386.h:342 msgid "Function starts are aligned to this power of 2" ! msgstr "" ! #: config/i386/i386.h:345 msgid "Attempt to keep stack aligned to this power of 2" ! msgstr "" ! #: config/i386/i386.h:347 msgid "Branches are this expensive (1-5, arbitrary units)" msgstr "" ! #: config/i386/osf1elf.h:126 msgid "Profiling uses mcount" ! msgstr "" ! #: config/i386/osfrose.h:63 msgid "Emit half-PIC code" ! msgstr "" #. intentionally undoc #. intentionally undoc ! #: config/i386/osfrose.h:70 msgid "Emit ELF object code" ! msgstr "" ! #: config/i386/osfrose.h:72 msgid "Emit ROSE object code" ! msgstr "" ! #: config/i386/osfrose.h:74 msgid "Symbols have a leading underscore" ! msgstr "" ! #: config/i386/osfrose.h:77 msgid "Align to >word boundaries" msgstr "" ! #: config/i386/osfrose.h:80 msgid "Use mcount for profiling" msgstr "" ! #: config/i386/osfrose.h:82 msgid "Use mcount_ptr for profiling" msgstr "" ! #: config/i386/sco5.h:503 config/rs6000/sysv4.h:997 ! #, c-format ! msgid "%s causes a section type conflict" ! msgstr "" ! ! #: config/i386/sco5.h:898 ! msgid "Generate COFF output" ! msgstr "" ! ! #: config/i386/sco5.h:899 msgid "Generate ELF output" msgstr "" ! #: config/i386/winnt.c:300 ! #, c-format ! msgid "`%s' declared as both exported to and imported from a DLL." msgstr "" ! #: config/i386/winnt.c:328 ! #, c-format ! msgid "initialized variable `%s' is marked dllimport" msgstr "" ! #: config/i386/winnt.c:337 #, c-format ! msgid "static variable `%s' is marked dllimport" msgstr "" #. If the environment variable DJDIR is not defined, then DJGPP is not installed correctly and GCC will quickly become confused with the default prefix settings. Report the problem now so the user doesn't receive deceptive "file not found" error messages later. #. DJDIR is automatically defined by the DJGPP environment config file pointed to by the environment variable DJGPP. Examine DJGPP to try and figure out what's wrong. ! #: config/i386/xm-djgpp.h:75 msgid "Environment variable DJGPP not defined." ! msgstr "" ! #: config/i386/xm-djgpp.h:77 #, c-format msgid "Environment variable DJGPP points to missing file '%s'." ! msgstr "" ! #: config/i386/xm-djgpp.h:80 #, c-format msgid "Environment variable DJGPP points to corrupt file '%s'." ! msgstr "" #. Macro to define tables used to set the flags. #. This is a list in braces of pairs in braces, --- 7524,7636 ---- #. variable, type `char *', is set to the variable part of the given #. option if the fixed part matches. The actual option name is made #. by appending `-m' to the specified name. ! #: config/i386/i386.h:396 config/rs6000/rs6000.h:404 config/sparc/sparc.h:710 msgid "Schedule code for given CPU" ! msgstr "Schemalägg kod för en given CPU" ! #: config/i386/i386.h:398 msgid "Generate code for given CPU" ! msgstr "Generera kod för en given CPU" ! #: config/i386/i386.h:400 msgid "Number of registers used to pass integer arguments" ! msgstr "Antal register för att skicka heltalsargument" ! #: config/i386/i386.h:402 msgid "Loop code aligned to this power of 2" ! msgstr "Loop-kod justeras till denna 2-potens" ! #: config/i386/i386.h:404 msgid "Jump targets are aligned to this power of 2" ! msgstr "Hoppmål justeras till denna 2-potens" ! #: config/i386/i386.h:406 msgid "Function starts are aligned to this power of 2" ! msgstr "Funktionsbörjan justeras till denna 2-potens" ! #: config/i386/i386.h:409 msgid "Attempt to keep stack aligned to this power of 2" ! msgstr "Försök håll stacken justerad till denna 2-potens" ! #: config/i386/i386.h:411 msgid "Branches are this expensive (1-5, arbitrary units)" + msgstr "Hopp är dyra (1-5, godtyckliga enheter)" + + #: config/i386/i386.h:413 + msgid "Use given x86-64 code model" msgstr "" ! #: config/i386/osf1elf.h:111 msgid "Profiling uses mcount" ! msgstr "Profilering använder mcount" ! #: config/i386/osfrose.h:60 msgid "Emit half-PIC code" ! msgstr "Skapa half-PIC-kod" #. intentionally undoc #. intentionally undoc ! #: config/i386/osfrose.h:67 msgid "Emit ELF object code" ! msgstr "Skapa ELF-objektkod" ! #: config/i386/osfrose.h:69 msgid "Emit ROSE object code" ! msgstr "Skapa ROSE-objektkod" ! #: config/i386/osfrose.h:71 msgid "Symbols have a leading underscore" ! msgstr "Symboler startar med en understrykning" ! #: config/i386/osfrose.h:74 msgid "Align to >word boundaries" msgstr "" ! #: config/i386/osfrose.h:77 msgid "Use mcount for profiling" msgstr "" ! #: config/i386/osfrose.h:79 msgid "Use mcount_ptr for profiling" msgstr "" ! #: config/i386/sco5.h:887 msgid "Generate ELF output" + msgstr "Generera ELF-utdata" + + #: config/i386/win32.h:53 + msgid "Use Mingw32 interface" msgstr "" ! #: config/i386/win32.h:55 ! msgid "Use Cygwin interface" msgstr "" ! #: config/i386/win32.h:57 ! msgid "Use bare Windows interface" msgstr "" ! #: config/i386/winnt.c:311 #, c-format ! msgid "`%s' declared as both exported to and imported from a DLL." msgstr "" + "\"%s\" är deklarerad både som exporterad till och importerad från en DLL." #. If the environment variable DJDIR is not defined, then DJGPP is not installed correctly and GCC will quickly become confused with the default prefix settings. Report the problem now so the user doesn't receive deceptive "file not found" error messages later. #. DJDIR is automatically defined by the DJGPP environment config file pointed to by the environment variable DJGPP. Examine DJGPP to try and figure out what's wrong. ! #: config/i386/xm-djgpp.h:71 msgid "Environment variable DJGPP not defined." ! msgstr "Omgivningsvariabel DJGPP är inte definierad." ! #: config/i386/xm-djgpp.h:73 #, c-format msgid "Environment variable DJGPP points to missing file '%s'." ! msgstr "Omgivningsvariabel DJGPP pekar på fil \"%s\" som saknas" ! #: config/i386/xm-djgpp.h:76 #, c-format msgid "Environment variable DJGPP points to corrupt file '%s'." ! msgstr "Omgivningsvariabel DJGPP pekar på fil \"%s\" som är trasig" #. Macro to define tables used to set the flags. #. This is a list in braces of pairs in braces, *************** msgstr "" *** 4365,4390 **** #. An empty string NAME is used to identify the default VALUE. #: config/i860/i860.h:56 config/i860/paragon.h:28 msgid "Generate code which uses the FPU" ! msgstr "" #: config/i860/i860.h:57 config/i860/i860.h:58 config/i860/paragon.h:29 #: config/i860/paragon.h:30 config/i860/paragon.h:31 msgid "Do not generate code which uses the FPU" ! msgstr "" ! #: config/i960/i960.c:124 msgid "sorry, not implemented: #pragma align NAME=SIZE" ! msgstr "" ! #: config/i960/i960.c:129 msgid "malformed #pragma align - ignored" msgstr "" ! #: config/i960/i960.c:167 msgid "sorry, not implemented: #pragma noalign NAME" ! msgstr "" ! #: config/i960/i960.c:1515 config/m68k/m68k.c:406 config/rs6000/rs6000.c:5410 msgid "stack limit expression is not supported" msgstr "" --- 7639,7664 ---- #. An empty string NAME is used to identify the default VALUE. #: config/i860/i860.h:56 config/i860/paragon.h:28 msgid "Generate code which uses the FPU" ! msgstr "Generera kod som använder FPU" #: config/i860/i860.h:57 config/i860/i860.h:58 config/i860/paragon.h:29 #: config/i860/paragon.h:30 config/i860/paragon.h:31 msgid "Do not generate code which uses the FPU" ! msgstr "Genrera inte kod som använder FPU" ! #: config/i960/i960-c.c:67 msgid "sorry, not implemented: #pragma align NAME=SIZE" ! msgstr "ledsen, inte implementerat: #pragma align NAMN=STORLEK" ! #: config/i960/i960-c.c:72 msgid "malformed #pragma align - ignored" msgstr "" ! #: config/i960/i960-c.c:110 msgid "sorry, not implemented: #pragma noalign NAME" ! msgstr "ledsen, inte implementerat: #pragma noalign NAMN" ! #: config/i960/i960.c:1384 config/m68k/m68k.c:407 config/rs6000/rs6000.c:5792 msgid "stack limit expression is not supported" msgstr "" *************** msgstr "" *** 4395,4541 **** #. An empty string NAME is used to identify the default VALUE. #. ??? Not all ten of these architecture variations actually exist, but I #. am not sure which are real and which aren't. ! #: config/i960/i960.h:241 msgid "Generate SA code" ! msgstr "" ! #: config/i960/i960.h:244 msgid "Generate SB code" ! msgstr "" #. {"sc", (TARGET_FLAG_NUMERICS|TARGET_FLAG_PROTECTED| TARGET_FLAG_MC|TARGET_FLAG_COMPLEX_ADDR), N_("Generate SC code")}, ! #: config/i960/i960.h:249 msgid "Generate KA code" ! msgstr "" ! #: config/i960/i960.h:252 msgid "Generate KB code" ! msgstr "" #. {"kc", (TARGET_FLAG_NUMERICS|TARGET_FLAG_PROTECTED| TARGET_FLAG_MC|TARGET_FLAG_COMPLEX_ADDR), N_("Generate KC code")}, ! #: config/i960/i960.h:257 msgid "Generate JA code" ! msgstr "" ! #: config/i960/i960.h:259 msgid "Generate JD code" ! msgstr "" ! #: config/i960/i960.h:262 msgid "Generate JF code" ! msgstr "" ! #: config/i960/i960.h:264 msgid "generate RP code" ! msgstr "" ! #: config/i960/i960.h:267 msgid "Generate MC code" ! msgstr "" ! #: config/i960/i960.h:270 msgid "Generate CA code" ! msgstr "" #. {"cb", (TARGET_FLAG_NUMERICS|TARGET_FLAG_C_SERIES| TARGET_FLAG_BRANCH_PREDICT|TARGET_FLAG_CODE_ALIGN), N_("Generate CB code")}, {"cc", (TARGET_FLAG_NUMERICS|TARGET_FLAG_PROTECTED| TARGET_FLAG_C_SERIES|TARGET_FLAG_BRANCH_PREDICT| TARGET_FLAG_CODE_ALIGN), N_("Generate CC code")}, ! #: config/i960/i960.h:280 msgid "Generate CF code" ! msgstr "" ! #: config/i960/i960.h:286 msgid "Use alternate leaf function entries" msgstr "" ! #: config/i960/i960.h:288 msgid "Do not use alternate leaf function entries" msgstr "" ! #: config/i960/i960.h:290 msgid "Perform tail call optimization" ! msgstr "" ! #: config/i960/i960.h:292 msgid "Do not perform tail call optimization" ! msgstr "" ! #: config/i960/i960.h:294 msgid "Use complex addressing modes" msgstr "" ! #: config/i960/i960.h:296 msgid "Do not use complex addressing modes" msgstr "" ! #: config/i960/i960.h:298 msgid "Align code to 8 byte boundary" msgstr "" ! #: config/i960/i960.h:300 msgid "Do not align code to 8 byte boundary" msgstr "" #. {"clean-linkage", (TARGET_FLAG_CLEAN_LINKAGE), N_("Force use of prototypes")}, {"no-clean-linkage", -(TARGET_FLAG_CLEAN_LINKAGE), N_("Do not force use of prototypes")}, ! #: config/i960/i960.h:306 config/i960/i960.h:308 msgid "Enable compatibility with iC960 v2.0" msgstr "" ! #: config/i960/i960.h:310 msgid "Enable compatibility with iC960 v3.0" msgstr "" ! #: config/i960/i960.h:312 config/i960/i960.h:314 msgid "Enable compatibility with ic960 assembler" msgstr "" ! #: config/i960/i960.h:316 msgid "Do not permit unaligned accesses" msgstr "" ! #: config/i960/i960.h:318 msgid "Permit unaligned accesses" msgstr "" ! #: config/i960/i960.h:320 msgid "Layout types like Intel's v1.3 gcc" msgstr "" ! #: config/i960/i960.h:322 msgid "Do not layout types like Intel's v1.3 gcc" msgstr "" ! #: config/i960/i960.h:324 config/rs6000/sysv4.h:132 config/sparc/linux.h:92 ! #: config/sparc/linux64.h:148 msgid "Use 64 bit long doubles" ! msgstr "" ! #: config/i960/i960.h:326 msgid "Enable linker relaxation" msgstr "" ! #: config/i960/i960.h:328 msgid "Do not enable linker relaxation" msgstr "" #. Override conflicting target switch options. #. Doesn't actually detect if more than one -mARCH option is given, but #. does handle the case of two blatantly conflicting -mARCH options. ! #: config/i960/i960.h:343 config/i960/i960.h:353 msgid "conflicting architectures defined - using C series" msgstr "" ! #: config/i960/i960.h:348 msgid "conflicting architectures defined - using K series" msgstr "" ! #: config/i960/i960.h:363 msgid "iC2.0 and iC3.0 are incompatible - using iC3.0" ! msgstr "" #. ??? See the LONG_DOUBLE_TYPE_SIZE definition below. ! #: config/i960/i960.h:374 msgid "The -mlong-double-64 option does not work yet." msgstr "" #: config/lynx-ng.h:97 config/lynx.h:120 config/rs6000/lynx.h:88 msgid "-msystem-v and -p are incompatible" msgstr "" --- 7669,7920 ---- #. An empty string NAME is used to identify the default VALUE. #. ??? Not all ten of these architecture variations actually exist, but I #. am not sure which are real and which aren't. ! #: config/i960/i960.h:245 msgid "Generate SA code" ! msgstr "Generera SA-kod" ! #: config/i960/i960.h:248 msgid "Generate SB code" ! msgstr "Generera SB-kod" #. {"sc", (TARGET_FLAG_NUMERICS|TARGET_FLAG_PROTECTED| TARGET_FLAG_MC|TARGET_FLAG_COMPLEX_ADDR), N_("Generate SC code")}, ! #: config/i960/i960.h:253 msgid "Generate KA code" ! msgstr "Generera KA-kod" ! #: config/i960/i960.h:256 msgid "Generate KB code" ! msgstr "Generera KB-kod" #. {"kc", (TARGET_FLAG_NUMERICS|TARGET_FLAG_PROTECTED| TARGET_FLAG_MC|TARGET_FLAG_COMPLEX_ADDR), N_("Generate KC code")}, ! #: config/i960/i960.h:261 msgid "Generate JA code" ! msgstr "Generera JA-kod" ! #: config/i960/i960.h:263 msgid "Generate JD code" ! msgstr "Generera JD-kod" ! #: config/i960/i960.h:266 msgid "Generate JF code" ! msgstr "Generera JF-kod" ! #: config/i960/i960.h:268 msgid "generate RP code" ! msgstr "Generera RP-kod" ! #: config/i960/i960.h:271 msgid "Generate MC code" ! msgstr "Generera MC-kod" ! #: config/i960/i960.h:274 msgid "Generate CA code" ! msgstr "Generera CA-kod" #. {"cb", (TARGET_FLAG_NUMERICS|TARGET_FLAG_C_SERIES| TARGET_FLAG_BRANCH_PREDICT|TARGET_FLAG_CODE_ALIGN), N_("Generate CB code")}, {"cc", (TARGET_FLAG_NUMERICS|TARGET_FLAG_PROTECTED| TARGET_FLAG_C_SERIES|TARGET_FLAG_BRANCH_PREDICT| TARGET_FLAG_CODE_ALIGN), N_("Generate CC code")}, ! #: config/i960/i960.h:284 msgid "Generate CF code" ! msgstr "Generera CF-kod" ! #: config/i960/i960.h:290 msgid "Use alternate leaf function entries" msgstr "" ! #: config/i960/i960.h:292 msgid "Do not use alternate leaf function entries" msgstr "" ! #: config/i960/i960.h:294 msgid "Perform tail call optimization" ! msgstr "Utför optimering för svansrekursion" ! #: config/i960/i960.h:296 msgid "Do not perform tail call optimization" ! msgstr "Utför inte optimering för svansrekursion" ! #: config/i960/i960.h:298 msgid "Use complex addressing modes" msgstr "" ! #: config/i960/i960.h:300 msgid "Do not use complex addressing modes" msgstr "" ! #: config/i960/i960.h:302 msgid "Align code to 8 byte boundary" msgstr "" ! #: config/i960/i960.h:304 msgid "Do not align code to 8 byte boundary" msgstr "" #. {"clean-linkage", (TARGET_FLAG_CLEAN_LINKAGE), N_("Force use of prototypes")}, {"no-clean-linkage", -(TARGET_FLAG_CLEAN_LINKAGE), N_("Do not force use of prototypes")}, ! #: config/i960/i960.h:310 config/i960/i960.h:312 msgid "Enable compatibility with iC960 v2.0" msgstr "" ! #: config/i960/i960.h:314 msgid "Enable compatibility with iC960 v3.0" msgstr "" ! #: config/i960/i960.h:316 config/i960/i960.h:318 msgid "Enable compatibility with ic960 assembler" msgstr "" ! #: config/i960/i960.h:320 msgid "Do not permit unaligned accesses" msgstr "" ! #: config/i960/i960.h:322 msgid "Permit unaligned accesses" msgstr "" ! #: config/i960/i960.h:324 msgid "Layout types like Intel's v1.3 gcc" msgstr "" ! #: config/i960/i960.h:326 msgid "Do not layout types like Intel's v1.3 gcc" msgstr "" ! #: config/i960/i960.h:328 config/rs6000/sysv4.h:130 config/sparc/linux.h:83 ! #: config/sparc/linux64.h:139 msgid "Use 64 bit long doubles" ! msgstr "Använd 64 bits long double" ! #: config/i960/i960.h:330 msgid "Enable linker relaxation" msgstr "" ! #: config/i960/i960.h:332 msgid "Do not enable linker relaxation" msgstr "" #. Override conflicting target switch options. #. Doesn't actually detect if more than one -mARCH option is given, but #. does handle the case of two blatantly conflicting -mARCH options. ! #: config/i960/i960.h:347 config/i960/i960.h:357 msgid "conflicting architectures defined - using C series" msgstr "" ! #: config/i960/i960.h:352 msgid "conflicting architectures defined - using K series" msgstr "" ! #: config/i960/i960.h:367 msgid "iC2.0 and iC3.0 are incompatible - using iC3.0" ! msgstr "iC2.0 och iC3.0 är imkompatible - använder iC3.0" #. ??? See the LONG_DOUBLE_TYPE_SIZE definition below. ! #: config/i960/i960.h:378 msgid "The -mlong-double-64 option does not work yet." msgstr "" + #: config/ia64/ia64.c:3413 + msgid "ia64_print_operand: unknown code" + msgstr "" + + #: config/ia64/ia64.c:3651 + msgid "value of -mfixed-range must have form REG1-REG2" + msgstr "" + + #: config/ia64/ia64.c:3663 config/ia64/ia64.c:3670 regclass.c:715 + #, c-format + msgid "unknown register name: %s" + msgstr "okänt registernamn: %s" + + #: config/ia64/ia64.c:3678 + #, c-format + msgid "%s-%s is an empty range" + msgstr "%s-%s är ett tomt intervall" + + #: config/ia64/ia64.c:3743 + msgid "cannot optimize division for both latency and throughput" + msgstr "" + + #. This macro defines names of command options to set and clear bits in + #. `target_flags'. Its definition is an initializer with a subgrouping for + #. each command option. + #: config/ia64/ia64.h:110 + msgid "Generate big endian code" + msgstr "Generera \"big endian\"-kod." + + #: config/ia64/ia64.h:112 config/mcore/mcore.h:164 + msgid "Generate little endian code" + msgstr "Generera \"little endian\"-kod." + + #: config/ia64/ia64.h:114 + msgid "Generate code for GNU as" + msgstr "Generera kod för GNU as" + + #: config/ia64/ia64.h:116 + msgid "Generate code for Intel as" + msgstr "Generera kod för Intel as" + + #: config/ia64/ia64.h:118 + msgid "Generate code for GNU ld" + msgstr "Generera kod för GNU ld" + + #: config/ia64/ia64.h:120 + msgid "Generate code for Intel ld" + msgstr "Generera kod för Intel ld" + + #: config/ia64/ia64.h:122 + msgid "Generate code without GP reg" + msgstr "" + + #: config/ia64/ia64.h:124 + msgid "Emit stop bits before and after volatile extended asms" + msgstr "" + + #: config/ia64/ia64.h:126 + msgid "Don't emit stop bits before and after volatile extended asms" + msgstr "" + + #: config/ia64/ia64.h:128 + msgid "Emit code for Itanium (TM) processor B step" + msgstr "" + + #: config/ia64/ia64.h:130 + msgid "Use in/loc/out register names" + msgstr "" + + #: config/ia64/ia64.h:132 + msgid "Disable use of sdata/scommon/sbss" + msgstr "" + + #: config/ia64/ia64.h:134 + msgid "Enable use of sdata/scommon/sbss" + msgstr "" + + #: config/ia64/ia64.h:136 + msgid "gp is constant (but save/restore gp on indirect calls)" + msgstr "" + + #: config/ia64/ia64.h:138 + msgid "Generate self-relocatable code" + msgstr "" + + #: config/ia64/ia64.h:140 + msgid "Generate inline division, optimize for latency" + msgstr "" + + #: config/ia64/ia64.h:142 + msgid "Generate inline division, optimize for throughput" + msgstr "" + + #: config/ia64/ia64.h:144 + msgid "Enable Dwarf 2 line debug info via GNU as" + msgstr "" + + #: config/ia64/ia64.h:146 + msgid "Disable Dwarf 2 line debug info via GNU as" + msgstr "" + + #: config/ia64/ia64.h:169 + msgid "Specify range of registers to make fixed." + msgstr "" + #: config/lynx-ng.h:97 config/lynx.h:120 config/rs6000/lynx.h:88 msgid "-msystem-v and -p are incompatible" msgstr "" *************** msgstr "" *** 4544,4617 **** msgid "-msystem-v and -mthreads are incompatible" msgstr "" ! #: config/m32r/m32r.c:84 #, c-format msgid "bad value (%s) for -mmodel switch" msgstr "" ! #: config/m32r/m32r.c:93 #, c-format msgid "bad value (%s) for -msdata switch" msgstr "" ! #: config/m32r/m32r.c:381 msgid "const objects cannot go in .sdata/.sbss" msgstr "" ! #: config/m32r/m32r.c:2188 #, c-format msgid "invalid operand to %s code" msgstr "" ! #: config/m32r/m32r.c:2195 #, c-format msgid "invalid operand to %p code" msgstr "" ! #: config/m32r/m32r.c:2303 msgid "invalid operand to %T/%B code" msgstr "" ! #: config/m32r/m32r.c:2326 msgid "invalid operand to %N code" msgstr "" #. { "relax", TARGET_RELAX_MASK, "" }, { "no-relax", -TARGET_RELAX_MASK, "" }, ! #: config/m32r/m32r.h:185 msgid "Display compile time statistics" msgstr "" ! #: config/m32r/m32r.h:187 msgid "Align all loops to 32 byte boundary" msgstr "" ! #: config/m32r/m32r.h:190 msgid "Only issue one instruction per cycle" ! msgstr "" ! #: config/m32r/m32r.h:193 msgid "Prefer branches over conditional execution" ! msgstr "" ! #: config/m32r/m32r.h:209 msgid "Code size: small, medium or large" ! msgstr "" ! #: config/m32r/m32r.h:211 msgid "Small data area: none, sdata, use" msgstr "" ! #: config/m68k/m68k.c:101 #, c-format msgid "-malign-loops=%d is not between 1 and %d" msgstr "" ! #: config/m68k/m68k.c:112 #, c-format msgid "-malign-jumps=%d is not between 1 and %d" msgstr "" ! #: config/m68k/m68k.c:123 #, c-format msgid "-malign-functions=%d is not between 1 and %d" msgstr "" --- 7923,8046 ---- msgid "-msystem-v and -mthreads are incompatible" msgstr "" ! #: config/m32r/m32r.c:86 #, c-format msgid "bad value (%s) for -mmodel switch" msgstr "" ! #: config/m32r/m32r.c:95 #, c-format msgid "bad value (%s) for -msdata switch" msgstr "" ! #: config/m32r/m32r.c:383 msgid "const objects cannot go in .sdata/.sbss" msgstr "" ! #: config/m32r/m32r.c:2191 #, c-format msgid "invalid operand to %s code" msgstr "" ! #: config/m32r/m32r.c:2198 #, c-format msgid "invalid operand to %p code" msgstr "" ! #: config/m32r/m32r.c:2306 msgid "invalid operand to %T/%B code" msgstr "" ! #: config/m32r/m32r.c:2329 msgid "invalid operand to %N code" msgstr "" #. { "relax", TARGET_RELAX_MASK, "" }, { "no-relax", -TARGET_RELAX_MASK, "" }, ! #: config/m32r/m32r.h:186 msgid "Display compile time statistics" msgstr "" ! #: config/m32r/m32r.h:188 msgid "Align all loops to 32 byte boundary" msgstr "" ! #: config/m32r/m32r.h:191 msgid "Only issue one instruction per cycle" ! msgstr "Lägg bara ut en instruktion per cykel" ! #: config/m32r/m32r.h:194 msgid "Prefer branches over conditional execution" ! msgstr "Föredra hopp framför villkorlig körning" ! #: config/m32r/m32r.h:210 msgid "Code size: small, medium or large" ! msgstr "Kodstorlek: small, medium, eller large" ! #: config/m32r/m32r.h:212 msgid "Small data area: none, sdata, use" + msgstr "Litet dataområde: none, sdata, use" + + #: config/m68hc11/m68hc11.c:217 + #, c-format + msgid "-f%s ignored for 68HC11/68HC12 (not supported)" msgstr "" ! #. Macro to define tables used to set the flags. This is a list in braces of ! #. pairs in braces, each pair being { "NAME", VALUE } where VALUE is the bits ! #. to set or minus the bits to clear. An empty string NAME is used to ! #. identify the default VALUE. ! #: config/m68hc11/m68hc11.h:152 ! msgid "Compile with 16-bit integer mode" ! msgstr "" ! ! #: config/m68hc11/m68hc11.h:154 ! msgid "Compile with 32-bit integer mode" ! msgstr "" ! ! #: config/m68hc11/m68hc11.h:156 ! msgid "Auto pre/post decrement increment allowed" ! msgstr "" ! ! #: config/m68hc11/m68hc11.h:158 ! msgid "Auto pre/post decrement increment not allowed" ! msgstr "" ! ! #: config/m68hc11/m68hc11.h:160 config/m68hc11/m68hc11.h:164 ! msgid "Compile for a 68HC11" ! msgstr "" ! ! #: config/m68hc11/m68hc11.h:162 config/m68hc11/m68hc11.h:166 ! msgid "Compile for a 68HC12" ! msgstr "" ! ! #. This macro is similar to `TARGET_SWITCHES' but defines names of ! #. command options that have values. Its definition is an ! #. initializer with a subgrouping for each command option. ! #. ! #. Each subgrouping contains a string constant, that defines the ! #. fixed part of the option name, and the address of a variable. The ! #. variable, type `char *', is set to the variable part of the given ! #. option if the fixed part matches. The actual option name is made ! #. by appending `-m' to the specified name. ! #: config/m68hc11/m68hc11.h:180 ! msgid "Specify the register allocation order" ! msgstr "" ! ! #: config/m68hc11/m68hc11.h:182 ! msgid "Indicate the number of soft registers available" ! msgstr "" ! ! #: config/m68k/m68k.c:102 #, c-format msgid "-malign-loops=%d is not between 1 and %d" msgstr "" ! #: config/m68k/m68k.c:113 #, c-format msgid "-malign-jumps=%d is not between 1 and %d" msgstr "" ! #: config/m68k/m68k.c:124 #, c-format msgid "-malign-functions=%d is not between 1 and %d" msgstr "" *************** msgstr "" *** 4624,4728 **** #. #. Don't use this macro to turn on various extra optimizations for #. `-O'. That is what `OPTIMIZATION_OPTIONS' is for. ! #: config/m68k/m68k.h:237 config/m68k/m68kv4.h:312 msgid "-fPIC is not currently supported on the 68000 or 68010\n" msgstr "" ! #: config/m88k/m88k.c:861 #, c-format msgid "Internal gcc monitor: short-branch(%x)" ! msgstr "" ! #: config/m88k/m88k.c:2268 msgid "Internal gcc error: Can't express symbolic location" msgstr "" ! #: config/m88k/m88k.c:2549 #, c-format msgid "argument #%d is a structure" msgstr "" ! #: config/m88k/m88k.c:2864 msgid "%R not followed by %B/C/D/E" msgstr "" ! #: config/m88k/m88k.c:2932 #, c-format msgid "invalid %x/X value" msgstr "" ! #: config/m88k/m88k.c:2937 msgid "invalid %H value" msgstr "" ! #: config/m88k/m88k.c:2943 msgid "invalid %h value" msgstr "" ! #: config/m88k/m88k.c:2949 msgid "invalid %Q value" msgstr "" ! #: config/m88k/m88k.c:2955 msgid "invalid %q value" msgstr "" ! #: config/m88k/m88k.c:2961 #, c-format msgid "invalid %o value" msgstr "" ! #: config/m88k/m88k.c:2968 #, c-format msgid "invalid %p value" msgstr "" ! #: config/m88k/m88k.c:2981 config/m88k/m88k.c:2986 #, c-format msgid "invalid %s/S value" msgstr "" ! #: config/m88k/m88k.c:2997 msgid "invalid %P operand" msgstr "" ! #: config/m88k/m88k.c:3028 msgid "invalid %B value" msgstr "" ! #: config/m88k/m88k.c:3045 msgid "invalid %C value" msgstr "" ! #: config/m88k/m88k.c:3058 msgid "invalid %D value" msgstr "" ! #: config/m88k/m88k.c:3066 #, c-format msgid "invalid %E value" msgstr "" ! #: config/m88k/m88k.c:3071 #, c-format msgid "`%d' operand isn't a register" msgstr "" ! #: config/m88k/m88k.c:3082 msgid "invalid %r value" msgstr "" ! #: config/m88k/m88k.c:3089 msgid "operand is r0" msgstr "" ! #: config/m88k/m88k.c:3103 msgid "operand is const_double" msgstr "" ! #: config/m88k/m88k.c:3122 msgid "invalid code" ! msgstr "" #. Do any checking or such that is needed after processing the -m switches. #: config/m88k/m88k.h:277 --- 8053,8157 ---- #. #. Don't use this macro to turn on various extra optimizations for #. `-O'. That is what `OPTIMIZATION_OPTIONS' is for. ! #: config/m68k/m68k.h:238 config/m68k/m68kelf.h:265 config/m68k/m68kv4.h:295 msgid "-fPIC is not currently supported on the 68000 or 68010\n" msgstr "" ! #: config/m88k/m88k.c:860 #, c-format msgid "Internal gcc monitor: short-branch(%x)" ! msgstr "Intern gcc monitor: short-branch(%x)" ! #: config/m88k/m88k.c:2266 msgid "Internal gcc error: Can't express symbolic location" msgstr "" ! #: config/m88k/m88k.c:2547 #, c-format msgid "argument #%d is a structure" msgstr "" ! #: config/m88k/m88k.c:2862 msgid "%R not followed by %B/C/D/E" msgstr "" ! #: config/m88k/m88k.c:2930 #, c-format msgid "invalid %x/X value" msgstr "" ! #: config/m88k/m88k.c:2935 msgid "invalid %H value" msgstr "" ! #: config/m88k/m88k.c:2941 msgid "invalid %h value" msgstr "" ! #: config/m88k/m88k.c:2947 msgid "invalid %Q value" msgstr "" ! #: config/m88k/m88k.c:2953 msgid "invalid %q value" msgstr "" ! #: config/m88k/m88k.c:2959 #, c-format msgid "invalid %o value" msgstr "" ! #: config/m88k/m88k.c:2966 #, c-format msgid "invalid %p value" msgstr "" ! #: config/m88k/m88k.c:2979 config/m88k/m88k.c:2984 #, c-format msgid "invalid %s/S value" msgstr "" ! #: config/m88k/m88k.c:2995 msgid "invalid %P operand" msgstr "" ! #: config/m88k/m88k.c:3026 msgid "invalid %B value" msgstr "" ! #: config/m88k/m88k.c:3043 msgid "invalid %C value" msgstr "" ! #: config/m88k/m88k.c:3056 msgid "invalid %D value" msgstr "" ! #: config/m88k/m88k.c:3064 #, c-format msgid "invalid %E value" msgstr "" ! #: config/m88k/m88k.c:3069 #, c-format msgid "`%d' operand isn't a register" msgstr "" ! #: config/m88k/m88k.c:3080 msgid "invalid %r value" msgstr "" ! #: config/m88k/m88k.c:3087 msgid "operand is r0" msgstr "" ! #: config/m88k/m88k.c:3101 msgid "operand is const_double" msgstr "" ! #: config/m88k/m88k.c:3120 msgid "invalid code" ! msgstr "ogiltig kod" #. Do any checking or such that is needed after processing the -m switches. #: config/m88k/m88k.h:277 *************** msgstr "" *** 4744,4864 **** msgid "-mshort-data-%s and PIC are incompatible" msgstr "" ! #: config/mips/mips.c:4667 #, c-format msgid "-mips%d not supported" msgstr "" ! #: config/mips/mips.c:4674 #, c-format msgid "bad value (%s) for -mips switch" msgstr "" ! #: config/mips/mips.c:4693 #, c-format msgid "bad value (%s) for -mabi= switch" msgstr "" ! #: config/mips/mips.c:4723 #, c-format msgid "-mabi=%s does not support -mips%d" msgstr "" ! #: config/mips/mips.c:4740 msgid "The -mabi=32 support does not work yet." msgstr "" ! #: config/mips/mips.c:4744 msgid "This target does not support the -mabi switch." msgstr "" ! #: config/mips/mips.c:4878 #, c-format msgid "-mcpu=%s does not support -mips%d" msgstr "" ! #: config/mips/mips.c:4884 #, c-format msgid "-mips%d does not support 64 bit fp registers" msgstr "" ! #: config/mips/mips.c:4887 #, c-format msgid "-mips%d does not support 64 bit gp registers" msgstr "" ! #: config/mips/mips.c:4906 msgid "-G is incompatible with PIC code which is the default" msgstr "" ! #: config/mips/mips.c:4922 msgid "-membedded-pic and -mabicalls are incompatible" msgstr "" ! #: config/mips/mips.c:4925 msgid "-G and -membedded-pic are incompatible" msgstr "" ! #: config/mips/mips.c:4977 #, c-format msgid "Invalid option `entry%s'" msgstr "" ! #: config/mips/mips.c:4980 msgid "-mentry is only meaningful with -mips-16" msgstr "" ! #: config/mips/mips.c:5313 msgid "internal error: %%) found without a %%( in assembler pattern" msgstr "" ! #: config/mips/mips.c:5327 msgid "internal error: %%] found without a %%[ in assembler pattern" msgstr "" ! #: config/mips/mips.c:5340 msgid "internal error: %%> found without a %%< in assembler pattern" msgstr "" ! #: config/mips/mips.c:5353 msgid "internal error: %%} found without a %%{ in assembler pattern" msgstr "" ! #: config/mips/mips.c:5367 #, c-format msgid "PRINT_OPERAND: Unknown punctuation '%c'" msgstr "" ! #: config/mips/mips.c:5376 msgid "PRINT_OPERAND null pointer" msgstr "" ! #: config/mips/mips.c:5504 #, c-format ! msgid "PRINT_OPERAND: letter %c was found & insn was not CONST_INT" ! msgstr "" ! #: config/mips/mips.c:5548 msgid "PRINT_OPERAND_ADDRESS, null pointer" ! msgstr "" ! #: config/mips/mips.c:5803 msgid "" "MIPS ECOFF format does not allow changing filenames within functions with " "#line" msgstr "" ! #: config/mips/mips.c:6366 #, c-format msgid "gp_offset (%ld) or end_offset (%ld) is less than zero." msgstr "" ! #: config/mips/mips.c:6583 #, c-format msgid "fp_offset (%ld) or end_offset (%ld) is less than zero." msgstr "" ! #: config/mips/mips.c:8631 #, c-format msgid "can not handle inconsistent calls to `%s'" msgstr "" --- 8173,8365 ---- msgid "-mshort-data-%s and PIC are incompatible" msgstr "" ! #: config/mcore/mcore.c:3117 ! #, c-format ! msgid "Invalid option `-mstack-increment=%s'" ! msgstr "Ogiltig flagga \"-mstack-increment=%s\"" ! ! #: config/mcore/mcore.h:131 ! msgid "Inline constants if it can be done in 2 insns or less" ! msgstr "" ! ! #: config/mcore/mcore.h:133 ! msgid "inline constants if it only takes 1 instruction" ! msgstr "" ! ! #: config/mcore/mcore.h:135 ! msgid "Set maximum alignment to 4" ! msgstr "" ! ! #: config/mcore/mcore.h:137 ! msgid "Set maximum alignment to 8" ! msgstr "" ! ! #: config/mcore/mcore.h:141 ! msgid "Do not use the divide instruction" ! msgstr "Använd inte divisionsinstruktionen" ! ! #: config/mcore/mcore.h:145 ! msgid "Do not arbitary sized immediates in bit operations" ! msgstr "" ! ! #: config/mcore/mcore.h:147 ! msgid "Always treat bitfield as int-sized" ! msgstr "" ! ! #: config/mcore/mcore.h:151 ! msgid "Force functions to be aligned to a 4 byte boundary" ! msgstr "" ! ! #: config/mcore/mcore.h:153 ! msgid "Force functions to be aligned to a 2 byte boundary" ! msgstr "" ! ! #: config/mcore/mcore.h:155 ! msgid "Emit call graph information" ! msgstr "" ! ! #: config/mcore/mcore.h:159 ! msgid "Prefer word accesses over byte accesses" ! msgstr "" ! ! #: config/mcore/mcore.h:170 ! msgid "Generate code for the M*Core M340" ! msgstr "Genrera kod för M*Core M340" ! ! #: config/mcore/mcore.h:183 ! msgid "Maximum amount for a single stack increment operation" ! msgstr "" ! ! #: config/mips/mips.c:4744 #, c-format msgid "-mips%d not supported" msgstr "" ! #: config/mips/mips.c:4751 #, c-format msgid "bad value (%s) for -mips switch" msgstr "" ! #: config/mips/mips.c:4770 #, c-format msgid "bad value (%s) for -mabi= switch" msgstr "" ! #: config/mips/mips.c:4800 #, c-format msgid "-mabi=%s does not support -mips%d" msgstr "" ! #: config/mips/mips.c:4817 msgid "The -mabi=32 support does not work yet." msgstr "" ! #: config/mips/mips.c:4821 msgid "This target does not support the -mabi switch." msgstr "" ! #: config/mips/mips.c:4955 #, c-format msgid "-mcpu=%s does not support -mips%d" msgstr "" ! #: config/mips/mips.c:4962 #, c-format msgid "-mips%d does not support 64 bit fp registers" msgstr "" ! #: config/mips/mips.c:4968 #, c-format msgid "-mips%d does not support 64 bit gp registers" msgstr "" ! #: config/mips/mips.c:4989 msgid "-G is incompatible with PIC code which is the default" msgstr "" ! #: config/mips/mips.c:5005 msgid "-membedded-pic and -mabicalls are incompatible" msgstr "" ! #: config/mips/mips.c:5008 msgid "-G and -membedded-pic are incompatible" msgstr "" ! #: config/mips/mips.c:5059 #, c-format msgid "Invalid option `entry%s'" msgstr "" ! #: config/mips/mips.c:5062 msgid "-mentry is only meaningful with -mips-16" msgstr "" ! #: config/mips/mips.c:5395 ! #, c-format msgid "internal error: %%) found without a %%( in assembler pattern" msgstr "" ! #: config/mips/mips.c:5409 ! #, c-format msgid "internal error: %%] found without a %%[ in assembler pattern" msgstr "" ! #: config/mips/mips.c:5422 ! #, c-format msgid "internal error: %%> found without a %%< in assembler pattern" msgstr "" ! #: config/mips/mips.c:5435 ! #, c-format msgid "internal error: %%} found without a %%{ in assembler pattern" msgstr "" ! #: config/mips/mips.c:5449 #, c-format msgid "PRINT_OPERAND: Unknown punctuation '%c'" msgstr "" ! #: config/mips/mips.c:5458 msgid "PRINT_OPERAND null pointer" msgstr "" ! #: config/mips/mips.c:5586 #, c-format ! msgid "invalid use of %%d, %%x, or %%X" ! msgstr "ogiltig användning av %%d, %%x eller %%x" ! #: config/mips/mips.c:5629 msgid "PRINT_OPERAND_ADDRESS, null pointer" ! msgstr "PRINT_OPERAND_ADDRESS, null-pekare" ! #: config/mips/mips.c:5845 msgid "" "MIPS ECOFF format does not allow changing filenames within functions with " "#line" msgstr "" ! # fixme: spola tillbaka är inte perfekt ! #: config/mips/mips.c:6123 ! #, c-format ! msgid "can't rewind %s" ! msgstr "kan inte spola tillbaka %s" ! ! #: config/mips/mips.c:6130 ! #, c-format ! msgid "can't read from %s" ! msgstr "kan inte läsa från %s" ! ! #: config/mips/mips.c:6501 #, c-format msgid "gp_offset (%ld) or end_offset (%ld) is less than zero." msgstr "" ! #: config/mips/mips.c:6720 #, c-format msgid "fp_offset (%ld) or end_offset (%ld) is less than zero." msgstr "" ! #: config/mips/mips.c:8796 #, c-format msgid "can not handle inconsistent calls to `%s'" msgstr "" *************** msgstr "" *** 4868,4942 **** #. each pair being { "NAME", VALUE } #. where VALUE is the bits to set or minus the bits to clear. #. An empty string NAME is used to identify the default VALUE. ! #: config/mips/mips.h:335 config/mn10300/mn10300.h:62 msgid "No default crt0.o" msgstr "" ! #: config/mips/mips.h:337 msgid "Use 64-bit int type" msgstr "" ! #: config/mips/mips.h:339 msgid "Use 64-bit long type" msgstr "" ! #: config/mips/mips.h:341 msgid "Use 32-bit long type" msgstr "" ! #: config/mips/mips.h:343 msgid "Optimize lui/addiu address loads" msgstr "" ! #: config/mips/mips.h:345 msgid "Don't optimize lui/addiu address loads" msgstr "" ! #: config/mips/mips.h:347 msgid "Use MIPS as" ! msgstr "" ! #: config/mips/mips.h:349 msgid "Use GNU as" ! msgstr "" ! #: config/mips/mips.h:351 msgid "Use symbolic register names" msgstr "" ! #: config/mips/mips.h:353 msgid "Don't use symbolic register names" msgstr "" ! #: config/mips/mips.h:355 config/mips/mips.h:357 msgid "Use GP relative sdata/sbss sections" msgstr "" ! #: config/mips/mips.h:359 config/mips/mips.h:361 msgid "Don't use GP relative sdata/sbss sections" msgstr "" ! #: config/mips/mips.h:363 msgid "Output compiler statistics" msgstr "" ! #: config/mips/mips.h:365 msgid "Don't output compiler statistics" msgstr "" ! #: config/mips/mips.h:367 msgid "Don't optimize block moves" msgstr "" ! #: config/mips/mips.h:369 msgid "Optimize block moves" msgstr "" ! #: config/mips/mips.h:371 msgid "Use mips-tfile asm postpass" msgstr "" ! #: config/mips/mips.h:373 msgid "Don't use mips-tfile asm postpass" msgstr "" --- 8369,8443 ---- #. each pair being { "NAME", VALUE } #. where VALUE is the bits to set or minus the bits to clear. #. An empty string NAME is used to identify the default VALUE. ! #: config/mips/mips.h:342 config/mn10300/mn10300.h:65 msgid "No default crt0.o" msgstr "" ! #: config/mips/mips.h:344 msgid "Use 64-bit int type" msgstr "" ! #: config/mips/mips.h:346 msgid "Use 64-bit long type" msgstr "" ! #: config/mips/mips.h:348 msgid "Use 32-bit long type" msgstr "" ! #: config/mips/mips.h:350 msgid "Optimize lui/addiu address loads" msgstr "" ! #: config/mips/mips.h:352 msgid "Don't optimize lui/addiu address loads" msgstr "" ! #: config/mips/mips.h:354 msgid "Use MIPS as" ! msgstr "Använd GNU as" ! #: config/mips/mips.h:356 msgid "Use GNU as" ! msgstr "Använd GNU as" ! #: config/mips/mips.h:358 msgid "Use symbolic register names" msgstr "" ! #: config/mips/mips.h:360 msgid "Don't use symbolic register names" msgstr "" ! #: config/mips/mips.h:362 config/mips/mips.h:364 msgid "Use GP relative sdata/sbss sections" msgstr "" ! #: config/mips/mips.h:366 config/mips/mips.h:368 msgid "Don't use GP relative sdata/sbss sections" msgstr "" ! #: config/mips/mips.h:370 msgid "Output compiler statistics" msgstr "" ! #: config/mips/mips.h:372 msgid "Don't output compiler statistics" msgstr "" ! #: config/mips/mips.h:374 msgid "Don't optimize block moves" msgstr "" ! #: config/mips/mips.h:376 msgid "Optimize block moves" msgstr "" ! #: config/mips/mips.h:378 msgid "Use mips-tfile asm postpass" msgstr "" ! #: config/mips/mips.h:380 msgid "Don't use mips-tfile asm postpass" msgstr "" *************** msgstr "" *** 4946,5074 **** #. where VALUE is the bits to set or minus the bits to clear and DOC #. is the documentation for --help (NULL if intentionally undocumented). #. An empty string NAME is used to identify the default VALUE. ! #: config/mips/mips.h:377 config/pdp11/pdp11.h:54 msgid "Use hardware floating point" msgstr "" ! #: config/mips/mips.h:379 msgid "Use 64-bit FP registers" msgstr "" ! #: config/mips/mips.h:381 msgid "Use 32-bit FP registers" msgstr "" ! #: config/mips/mips.h:383 msgid "Use 64-bit general registers" msgstr "" ! #: config/mips/mips.h:385 msgid "Use 32-bit general registers" msgstr "" ! #: config/mips/mips.h:387 msgid "Use Irix PIC" msgstr "" ! #: config/mips/mips.h:389 msgid "Don't use Irix PIC" msgstr "" ! #: config/mips/mips.h:391 msgid "Use OSF PIC" msgstr "" ! #: config/mips/mips.h:393 msgid "Don't use OSF PIC" msgstr "" ! #: config/mips/mips.h:395 msgid "Use indirect calls" msgstr "" ! #: config/mips/mips.h:397 msgid "Don't use indirect calls" msgstr "" ! #: config/mips/mips.h:399 msgid "Use embedded PIC" msgstr "" ! #: config/mips/mips.h:401 msgid "Don't use embedded PIC" msgstr "" ! #: config/mips/mips.h:403 msgid "Use ROM instead of RAM" msgstr "" ! #: config/mips/mips.h:405 msgid "Don't use ROM instead of RAM" msgstr "" ! #: config/mips/mips.h:407 msgid "Put uninitialized constants in ROM (needs -membedded-data)" msgstr "" ! #: config/mips/mips.h:409 msgid "Don't put uninitialized constants in ROM" msgstr "" ! #: config/mips/mips.h:411 msgid "Use big-endian byte order" ! msgstr "" ! #: config/mips/mips.h:413 msgid "Use little-endian byte order" ! msgstr "" ! #: config/mips/mips.h:415 msgid "Use single (32-bit) FP only" msgstr "" ! #: config/mips/mips.h:417 msgid "Don't use single (32-bit) FP only" msgstr "" ! #: config/mips/mips.h:419 msgid "Use multiply accumulate" msgstr "" ! #: config/mips/mips.h:421 msgid "Don't use multiply accumulate" msgstr "" ! #: config/mips/mips.h:423 msgid "Work around early 4300 hardware bug" msgstr "" ! #: config/mips/mips.h:425 msgid "Don't work around early 4300 hardware bug" msgstr "" ! #: config/mips/mips.h:427 msgid "Optimize for 4650" ! msgstr "" ! #: config/mips/mips.h:429 msgid "Optimize for 3900" ! msgstr "" ! #: config/mips/mips.h:431 msgid "Trap on integer divide by zero" ! msgstr "" ! #: config/mips/mips.h:433 msgid "Don't trap on integer divide by zero" ! msgstr "" ! #: config/mips/mips.h:435 msgid "Trap on integer divide overflow" ! msgstr "" ! #: config/mips/mips.h:437 msgid "Don't trap on integer divide overflow" ! msgstr "" #. This macro is similar to `TARGET_SWITCHES' but defines names of #. command options that have values. Its definition is an --- 8447,8575 ---- #. where VALUE is the bits to set or minus the bits to clear and DOC #. is the documentation for --help (NULL if intentionally undocumented). #. An empty string NAME is used to identify the default VALUE. ! #: config/mips/mips.h:384 config/pdp11/pdp11.h:55 msgid "Use hardware floating point" msgstr "" ! #: config/mips/mips.h:386 msgid "Use 64-bit FP registers" msgstr "" ! #: config/mips/mips.h:388 msgid "Use 32-bit FP registers" msgstr "" ! #: config/mips/mips.h:390 msgid "Use 64-bit general registers" msgstr "" ! #: config/mips/mips.h:392 msgid "Use 32-bit general registers" msgstr "" ! #: config/mips/mips.h:394 msgid "Use Irix PIC" msgstr "" ! #: config/mips/mips.h:396 msgid "Don't use Irix PIC" msgstr "" ! #: config/mips/mips.h:398 msgid "Use OSF PIC" msgstr "" ! #: config/mips/mips.h:400 msgid "Don't use OSF PIC" msgstr "" ! #: config/mips/mips.h:402 msgid "Use indirect calls" msgstr "" ! #: config/mips/mips.h:404 msgid "Don't use indirect calls" msgstr "" ! #: config/mips/mips.h:406 msgid "Use embedded PIC" msgstr "" ! #: config/mips/mips.h:408 msgid "Don't use embedded PIC" msgstr "" ! #: config/mips/mips.h:410 msgid "Use ROM instead of RAM" msgstr "" ! #: config/mips/mips.h:412 msgid "Don't use ROM instead of RAM" msgstr "" ! #: config/mips/mips.h:414 msgid "Put uninitialized constants in ROM (needs -membedded-data)" msgstr "" ! #: config/mips/mips.h:416 msgid "Don't put uninitialized constants in ROM" msgstr "" ! #: config/mips/mips.h:418 msgid "Use big-endian byte order" ! msgstr "Använd \"big endian\" byteordning" ! #: config/mips/mips.h:420 msgid "Use little-endian byte order" ! msgstr "Använd \"little endian\" byteordning" ! #: config/mips/mips.h:422 msgid "Use single (32-bit) FP only" msgstr "" ! #: config/mips/mips.h:424 msgid "Don't use single (32-bit) FP only" msgstr "" ! #: config/mips/mips.h:426 msgid "Use multiply accumulate" msgstr "" ! #: config/mips/mips.h:428 msgid "Don't use multiply accumulate" msgstr "" ! #: config/mips/mips.h:430 msgid "Work around early 4300 hardware bug" msgstr "" ! #: config/mips/mips.h:432 msgid "Don't work around early 4300 hardware bug" msgstr "" ! #: config/mips/mips.h:434 msgid "Optimize for 4650" ! msgstr "Optimera för 4650" ! #: config/mips/mips.h:436 msgid "Optimize for 3900" ! msgstr "Optimera för 3900" ! #: config/mips/mips.h:438 msgid "Trap on integer divide by zero" ! msgstr "Fånga heltalsdivision med noll" ! #: config/mips/mips.h:440 msgid "Don't trap on integer divide by zero" ! msgstr "Fånga inte heltalsdivision med noll" ! #: config/mips/mips.h:442 msgid "Trap on integer divide overflow" ! msgstr "Fånga spill vid heltalsdivsion" ! #: config/mips/mips.h:444 msgid "Don't trap on integer divide overflow" ! msgstr "Fånga inte spill vid heltalsdivision" #. This macro is similar to `TARGET_SWITCHES' but defines names of #. command options that have values. Its definition is an *************** msgstr "" *** 5086,5132 **** #. #. extern char *m88k_short_data; #. #define TARGET_OPTIONS { { "short-data-", &m88k_short_data } } ! #: config/mips/mips.h:556 msgid "Specify CPU for scheduling purposes" msgstr "" ! #: config/mips/mips.h:558 msgid "Specify MIPS ISA" msgstr "" ! #: config/mips/mips.h:560 msgid "Use mips16 entry/exit psuedo ops" msgstr "" ! #: config/mips/mips.h:562 msgid "Don't use MIPS16 instructions" msgstr "" #. Output assembler code to FILE to increment profiler label # LABELNO #. for profiling a function entry. ! #: config/mips/mips.h:2579 msgid "mips16 function profiling" msgstr "" ! #: config/mn10300/mn10300.h:57 msgid "Work around hardware multiply bug" msgstr "" ! #: config/mn10300/mn10300.h:58 msgid "Do not work around hardware multiply bug" msgstr "" ! #: config/mn10300/mn10300.h:59 msgid "Target the AM33 processor" msgstr "" #: config/nextstep.c:65 msgid "optimization turned on" ! msgstr "" #: config/nextstep.c:71 msgid "optimization turned off" ! msgstr "" #: config/nextstep.c:80 msgid "optimization level restored" --- 8587,8637 ---- #. #. extern char *m88k_short_data; #. #define TARGET_OPTIONS { { "short-data-", &m88k_short_data } } ! #: config/mips/mips.h:569 msgid "Specify CPU for scheduling purposes" msgstr "" ! #: config/mips/mips.h:571 msgid "Specify MIPS ISA" msgstr "" ! #: config/mips/mips.h:573 msgid "Use mips16 entry/exit psuedo ops" msgstr "" ! #: config/mips/mips.h:575 msgid "Don't use MIPS16 instructions" msgstr "" #. Output assembler code to FILE to increment profiler label # LABELNO #. for profiling a function entry. ! #: config/mips/mips.h:2606 msgid "mips16 function profiling" msgstr "" ! #: config/mn10300/mn10300.h:60 msgid "Work around hardware multiply bug" msgstr "" ! #: config/mn10300/mn10300.h:61 msgid "Do not work around hardware multiply bug" msgstr "" ! #: config/mn10300/mn10300.h:62 msgid "Target the AM33 processor" msgstr "" + #: config/mn10300/mn10300.h:66 + msgid "Enable linker relaxations" + msgstr "" + #: config/nextstep.c:65 msgid "optimization turned on" ! msgstr "optimering påslagen" #: config/nextstep.c:71 msgid "optimization turned off" ! msgstr "optimering avslagen" #: config/nextstep.c:80 msgid "optimization level restored" *************** msgstr "" *** 5150,5164 **** #: config/ns32k/ns32k.h:109 msgid "Optimize for 32532 cpu" ! msgstr "" #: config/ns32k/ns32k.h:110 msgid "Optimize for 32332 cpu" ! msgstr "" #: config/ns32k/ns32k.h:112 msgid "Optimize for 32032" ! msgstr "" #: config/ns32k/ns32k.h:114 msgid "Register sb is zero. Use for absolute addressing" --- 8655,8669 ---- #: config/ns32k/ns32k.h:109 msgid "Optimize for 32532 cpu" ! msgstr "Optimera för cpu 32532" #: config/ns32k/ns32k.h:110 msgid "Optimize for 32332 cpu" ! msgstr "Optimera för cpu 32332" #: config/ns32k/ns32k.h:112 msgid "Optimize for 32032" ! msgstr "Optimera för cpu 32032" #: config/ns32k/ns32k.h:114 msgid "Register sb is zero. Use for absolute addressing" *************** msgstr "" *** 5168,5173 **** --- 8673,8686 ---- msgid "Do not use register sb" msgstr "" + #: config/ns32k/ns32k.h:116 + msgid "Do not use bitfield instructions" + msgstr "Använd inte bitfältsinstruktioner" + + #: config/ns32k/ns32k.h:117 + msgid "Use bitfield instructions" + msgstr "Använd bitfältsinstruktioner" + #: config/ns32k/ns32k.h:118 msgid "Generate code for high memory" msgstr "" *************** msgstr "" *** 5178,5184 **** #: config/ns32k/ns32k.h:120 msgid "32381 fpu" ! msgstr "" #: config/ns32k/ns32k.h:121 msgid "Use multiply-accumulate fp instructions" --- 8691,8697 ---- #: config/ns32k/ns32k.h:120 msgid "32381 fpu" ! msgstr "fpu 32381" #: config/ns32k/ns32k.h:121 msgid "Use multiply-accumulate fp instructions" *************** msgstr "" *** 5196,5333 **** msgid "No \"Small register classes\" kludge" msgstr "" ! #: config/pa/pa.c:142 #, c-format msgid "" "Unknown -mschedule= option (%s).\n" "Valid options are 700, 7100, 7100LC, 7200, and 8000\n" msgstr "" ! #: config/pa/pa.c:167 #, c-format msgid "" "Unknown -march= option (%s).\n" "Valid options are 1.0, 1.1, and 2.0\n" msgstr "" ! #: config/pa/pa.c:172 msgid "PIC code generation is not supported in the portable runtime model\n" msgstr "" ! #: config/pa/pa.c:177 msgid "PIC code generation is not compatible with fast indirect calls\n" msgstr "" ! #: config/pa/pa.c:182 ! msgid "PIC code generation is not compatible with profiling\n" ! msgstr "" ! ! #: config/pa/pa.c:187 msgid "-g is only supported when using GAS on this processor," ! msgstr "" ! #: config/pa/pa.c:188 msgid "-g option disabled." ! msgstr "" ! #: config/pdp11/pdp11.h:55 msgid "Do not use hardware floating point" msgstr "" #. return float result in ac0 ! #: config/pdp11/pdp11.h:57 msgid "Return floating point results in ac0" msgstr "" ! #: config/pdp11/pdp11.h:58 msgid "Return floating point results in memory" msgstr "" #. is 11/40 ! #: config/pdp11/pdp11.h:60 msgid "Generate code for an 11/40" ! msgstr "" #. is 11/45 ! #: config/pdp11/pdp11.h:63 msgid "Generate code for an 11/45" ! msgstr "" #. is 11/10 ! #: config/pdp11/pdp11.h:66 msgid "Generate code for an 11/10" ! msgstr "" #. use movstrhi for bcopy #. use 32 bit for int ! #: config/pdp11/pdp11.h:71 config/pdp11/pdp11.h:72 msgid "Use 32 bit int" ! msgstr "" ! #: config/pdp11/pdp11.h:73 config/pdp11/pdp11.h:74 msgid "Use 16 bit int" ! msgstr "" #. use 32 bit for float ! #: config/pdp11/pdp11.h:76 config/pdp11/pdp11.h:77 msgid "Use 32 bit float" ! msgstr "" ! #: config/pdp11/pdp11.h:78 config/pdp11/pdp11.h:79 msgid "Use 64 bit float" ! msgstr "" #. allow abshi pattern? - can trigger "optimizations" which make code SLOW! #. is branching expensive - on a PDP, it's actually really cheap #. this is just to play around and check what code gcc generates #. split instruction and data memory? ! #: config/pdp11/pdp11.h:88 msgid "Target has split I&D" msgstr "" ! #: config/pdp11/pdp11.h:89 msgid "Target does not have split I&D" msgstr "" #. UNIX assembler syntax? ! #: config/pdp11/pdp11.h:91 msgid "Use UNIX assembler syntax" ! msgstr "" ! #: config/pdp11/pdp11.h:92 msgid "Use DEC assembler syntax" msgstr "" ! #: config/romp/romp.c:675 ! msgid "invalid %%B value" msgstr "" ! #: config/romp/romp.c:702 config/rs6000/rs6000.c:4077 msgid "invalid %%S value" msgstr "" ! #: config/romp/romp.c:711 config/romp/romp.c:718 msgid "invalid %%b value" msgstr "" ! #: config/romp/romp.c:739 config/romp/romp.c:746 msgid "invalid %%H value" msgstr "" ! #: config/romp/romp.c:758 config/romp/romp.c:769 msgid "invalid %%z value" msgstr "" ! #: config/romp/romp.c:777 config/romp/romp.c:785 msgid "invalid %%Z value" msgstr "" ! #: config/romp/romp.c:792 config/romp/romp.c:801 config/romp/romp.c:808 ! #: config/rs6000/rs6000.c:3859 msgid "invalid %%k value" msgstr "" ! #: config/romp/romp.c:893 config/romp/romp.c:936 msgid "invalid %%j value" msgstr "" --- 8709,8874 ---- msgid "No \"Small register classes\" kludge" msgstr "" ! #: config/pa/pa.c:141 #, c-format msgid "" "Unknown -mschedule= option (%s).\n" "Valid options are 700, 7100, 7100LC, 7200, and 8000\n" msgstr "" ! #: config/pa/pa.c:166 #, c-format msgid "" "Unknown -march= option (%s).\n" "Valid options are 1.0, 1.1, and 2.0\n" msgstr "" ! #: config/pa/pa.c:171 msgid "PIC code generation is not supported in the portable runtime model\n" msgstr "" ! #: config/pa/pa.c:176 msgid "PIC code generation is not compatible with fast indirect calls\n" msgstr "" ! #: config/pa/pa.c:181 msgid "-g is only supported when using GAS on this processor," ! msgstr "-g stöds bara när man använder GAS på denna processor," ! #: config/pa/pa.c:182 msgid "-g option disabled." ! msgstr "flaggan -g är avslagen." ! #: config/pdp11/pdp11.h:56 msgid "Do not use hardware floating point" msgstr "" #. return float result in ac0 ! #: config/pdp11/pdp11.h:58 msgid "Return floating point results in ac0" msgstr "" ! #: config/pdp11/pdp11.h:59 msgid "Return floating point results in memory" msgstr "" #. is 11/40 ! #: config/pdp11/pdp11.h:61 msgid "Generate code for an 11/40" ! msgstr "Generera kod för 11/40" #. is 11/45 ! #: config/pdp11/pdp11.h:64 msgid "Generate code for an 11/45" ! msgstr "Generera kod för 11/45" #. is 11/10 ! #: config/pdp11/pdp11.h:67 msgid "Generate code for an 11/10" ! msgstr "Generera kod för 11/10" #. use movstrhi for bcopy #. use 32 bit for int ! #: config/pdp11/pdp11.h:72 config/pdp11/pdp11.h:73 msgid "Use 32 bit int" ! msgstr "Använd 32 bits int" ! #: config/pdp11/pdp11.h:74 config/pdp11/pdp11.h:75 msgid "Use 16 bit int" ! msgstr "Använd 16 bits int" #. use 32 bit for float ! #: config/pdp11/pdp11.h:77 config/pdp11/pdp11.h:78 msgid "Use 32 bit float" ! msgstr "Använd 32 bits float" ! #: config/pdp11/pdp11.h:79 config/pdp11/pdp11.h:80 msgid "Use 64 bit float" ! msgstr "Använd 64 bits float" #. allow abshi pattern? - can trigger "optimizations" which make code SLOW! #. is branching expensive - on a PDP, it's actually really cheap #. this is just to play around and check what code gcc generates #. split instruction and data memory? ! #: config/pdp11/pdp11.h:89 msgid "Target has split I&D" msgstr "" ! #: config/pdp11/pdp11.h:90 msgid "Target does not have split I&D" msgstr "" #. UNIX assembler syntax? ! #: config/pdp11/pdp11.h:92 msgid "Use UNIX assembler syntax" ! msgstr "Använd assemblersyntax för UNIX" ! #: config/pdp11/pdp11.h:93 msgid "Use DEC assembler syntax" + msgstr "Använd assemblersyntax för DEC" + + #: config/pj/pj.h:73 + msgid "Generate little endian data" + msgstr "Generera data som \"little endian\"" + + #: config/pj/pj.h:75 + msgid "Generate big endian data" + msgstr "Generera data som \"big endian\"" + + #: config/pj/pj.h:77 + msgid "Turn on maintainer testing code" msgstr "" ! #: config/pj/pj.h:79 ! msgid "Enable Transmeta picoJava extensions" msgstr "" ! #: config/pj/pj.h:81 ! msgid "Disable Transmeta picoJava extensions" ! msgstr "" ! ! #: config/pj/pj.h:83 ! msgid "Disable reorganization pass" ! msgstr "" ! ! #: config/romp/romp.c:669 ! #, c-format ! msgid "invalid %%B value" ! msgstr "ogiltigt värde %%B" ! ! #: config/romp/romp.c:696 config/rs6000/rs6000.c:4175 ! #, c-format msgid "invalid %%S value" msgstr "" ! #: config/romp/romp.c:705 config/romp/romp.c:712 ! #, c-format msgid "invalid %%b value" msgstr "" ! #: config/romp/romp.c:733 config/romp/romp.c:740 ! #, c-format msgid "invalid %%H value" msgstr "" ! #: config/romp/romp.c:752 config/romp/romp.c:763 ! #, c-format msgid "invalid %%z value" msgstr "" ! #: config/romp/romp.c:771 config/romp/romp.c:779 ! #, c-format msgid "invalid %%Z value" msgstr "" ! #: config/romp/romp.c:786 config/romp/romp.c:795 config/romp/romp.c:802 ! #: config/rs6000/rs6000.c:3957 ! #, c-format msgid "invalid %%k value" msgstr "" ! #: config/romp/romp.c:887 config/romp/romp.c:930 ! #, c-format msgid "invalid %%j value" msgstr "" *************** msgstr "" *** 5344,5466 **** #. #. Normally, this macro will push all remaining incoming registers on the #. stack and set PRETEND_SIZE to the length of the registers pushed. ! #: config/romp/romp.h:660 msgid "can't have varargs with -mfp-arg-in-fp-regs" msgstr "" ! #: config/rs6000/aix.h:254 config/rs6000/beos.h:33 msgid "Always pass floating-point arguments in memory" msgstr "" ! #: config/rs6000/aix.h:256 config/rs6000/beos.h:35 msgid "Don't always pass floating-point arguments in memory" msgstr "" ! #: config/rs6000/aix41.h:31 config/rs6000/aix43.h:35 msgid "Support message passing with the Parallel Environment" msgstr "" ! #: config/rs6000/aix43.h:31 msgid "Compile for 64-bit pointers" msgstr "" ! #: config/rs6000/aix43.h:33 msgid "Compile for 32-bit pointers" msgstr "" ! #: config/rs6000/aix43.h:52 msgid "-maix64 and POWER architecture are incompatible." msgstr "" ! #: config/rs6000/aix43.h:57 msgid "-maix64 requires PowerPC64 architecture remain enabled." msgstr "" ! #: config/rs6000/aix43.h:61 msgid "" "-maix64 required: 64-bit computation with 32-bit addressing not yet " "supported." msgstr "" ! #: config/rs6000/rs6000.c:340 msgid "-mmultiple is not supported on little endian systems" ! msgstr "" ! #: config/rs6000/rs6000.c:347 msgid "-mstring is not supported on little endian systems" ! msgstr "" ! #: config/rs6000/rs6000.c:353 #, c-format msgid "-f%s ignored for AIX (all code is position independent)" msgstr "" ! #: config/rs6000/rs6000.c:361 msgid "-ffunction-sections disabled on AIX when debugging" msgstr "" ! #: config/rs6000/rs6000.c:367 msgid "-fdata-sections not supported on AIX" ! msgstr "" ! #: config/rs6000/rs6000.c:381 #, c-format msgid "Unknown -mdebug-%s switch" ! msgstr "" ! #: config/rs6000/rs6000.c:3786 msgid "invalid %%f value" msgstr "" ! #: config/rs6000/rs6000.c:3795 msgid "invalid %%F value" msgstr "" ! #: config/rs6000/rs6000.c:3804 msgid "invalid %%G value" msgstr "" ! #: config/rs6000/rs6000.c:3839 msgid "invalid %%j code" msgstr "" ! #: config/rs6000/rs6000.c:3849 msgid "invalid %%J code" msgstr "" ! #: config/rs6000/rs6000.c:3879 msgid "invalid %%K value" msgstr "" ! #: config/rs6000/rs6000.c:4003 msgid "invalid %%p value" msgstr "" ! #: config/rs6000/rs6000.c:4040 msgid "invalid %%q value" msgstr "" ! #: config/rs6000/rs6000.c:4103 msgid "%%S computed all 1's mask" msgstr "" ! #: config/rs6000/rs6000.c:4130 msgid "%%S computed all 0's mask" msgstr "" ! #: config/rs6000/rs6000.c:4140 msgid "invalid %%T value" msgstr "" ! #: config/rs6000/rs6000.c:4150 msgid "invalid %%u value" msgstr "" ! #: config/rs6000/rs6000.c:4159 msgid "invalid %%v value" msgstr "" ! #: config/rs6000/rs6000.c:4232 msgid "invalid %%W value" msgstr "" --- 8885,9021 ---- #. #. Normally, this macro will push all remaining incoming registers on the #. stack and set PRETEND_SIZE to the length of the registers pushed. ! #: config/romp/romp.h:661 msgid "can't have varargs with -mfp-arg-in-fp-regs" msgstr "" ! #: config/rs6000/aix.h:306 config/rs6000/beos.h:30 msgid "Always pass floating-point arguments in memory" msgstr "" ! #: config/rs6000/aix.h:308 config/rs6000/beos.h:32 msgid "Don't always pass floating-point arguments in memory" msgstr "" ! #: config/rs6000/aix41.h:28 config/rs6000/aix43.h:32 config/rs6000/aix51.h:32 msgid "Support message passing with the Parallel Environment" msgstr "" ! #: config/rs6000/aix43.h:28 config/rs6000/aix51.h:28 msgid "Compile for 64-bit pointers" msgstr "" ! #: config/rs6000/aix43.h:30 config/rs6000/aix51.h:30 msgid "Compile for 32-bit pointers" msgstr "" ! #: config/rs6000/aix43.h:49 config/rs6000/aix51.h:49 msgid "-maix64 and POWER architecture are incompatible." msgstr "" ! #: config/rs6000/aix43.h:54 config/rs6000/aix51.h:54 msgid "-maix64 requires PowerPC64 architecture remain enabled." msgstr "" ! #: config/rs6000/aix43.h:58 config/rs6000/aix51.h:58 msgid "" "-maix64 required: 64-bit computation with 32-bit addressing not yet " "supported." msgstr "" ! #: config/rs6000/rs6000.c:341 msgid "-mmultiple is not supported on little endian systems" ! msgstr "-mmultiple stöds inte på \"little endian\"-system" ! #: config/rs6000/rs6000.c:348 msgid "-mstring is not supported on little endian systems" ! msgstr "-mstring stöds inte på \"little endian\"-system" ! #: config/rs6000/rs6000.c:354 #, c-format msgid "-f%s ignored for AIX (all code is position independent)" msgstr "" ! #: config/rs6000/rs6000.c:362 msgid "-ffunction-sections disabled on AIX when debugging" msgstr "" ! #: config/rs6000/rs6000.c:368 msgid "-fdata-sections not supported on AIX" ! msgstr "-fdata-sections stöds inte för AIX" ! #: config/rs6000/rs6000.c:382 #, c-format msgid "Unknown -mdebug-%s switch" ! msgstr "Okänd flagga -mdebug-%s" ! #: config/rs6000/rs6000.c:3884 ! #, c-format msgid "invalid %%f value" msgstr "" ! #: config/rs6000/rs6000.c:3893 ! #, c-format msgid "invalid %%F value" msgstr "" ! #: config/rs6000/rs6000.c:3902 ! #, c-format msgid "invalid %%G value" msgstr "" ! #: config/rs6000/rs6000.c:3937 ! #, c-format msgid "invalid %%j code" msgstr "" ! #: config/rs6000/rs6000.c:3947 ! #, c-format msgid "invalid %%J code" msgstr "" ! #: config/rs6000/rs6000.c:3977 ! #, c-format msgid "invalid %%K value" msgstr "" ! #: config/rs6000/rs6000.c:4101 ! #, c-format msgid "invalid %%p value" msgstr "" ! #: config/rs6000/rs6000.c:4138 ! #, c-format msgid "invalid %%q value" msgstr "" ! #: config/rs6000/rs6000.c:4201 ! #, c-format msgid "%%S computed all 1's mask" msgstr "" ! #: config/rs6000/rs6000.c:4228 ! #, c-format msgid "%%S computed all 0's mask" msgstr "" ! #: config/rs6000/rs6000.c:4238 ! #, c-format msgid "invalid %%T value" msgstr "" ! #: config/rs6000/rs6000.c:4248 ! #, c-format msgid "invalid %%u value" msgstr "" ! #: config/rs6000/rs6000.c:4257 ! #, c-format msgid "invalid %%v value" msgstr "" ! #: config/rs6000/rs6000.c:4330 ! #, c-format msgid "invalid %%W value" msgstr "" *************** msgstr "" *** 5471,5589 **** #. each pair being { "NAME", VALUE } #. where VALUE is the bits to set or minus the bits to clear. #. An empty string NAME is used to identify the default VALUE. ! #: config/rs6000/rs6000.h:256 msgid "Use POWER instruction set" msgstr "" ! #: config/rs6000/rs6000.h:259 msgid "Use POWER2 instruction set" msgstr "" ! #: config/rs6000/rs6000.h:261 msgid "Do not use POWER2 instruction set" msgstr "" ! #: config/rs6000/rs6000.h:264 msgid "Do not use POWER instruction set" msgstr "" ! #: config/rs6000/rs6000.h:266 msgid "Use PowerPC instruction set" msgstr "" ! #: config/rs6000/rs6000.h:269 msgid "Do not use PowerPC instruction set" msgstr "" ! #: config/rs6000/rs6000.h:271 msgid "Use PowerPC General Purpose group optional instructions" msgstr "" ! #: config/rs6000/rs6000.h:273 msgid "Don't use PowerPC General Purpose group optional instructions" msgstr "" ! #: config/rs6000/rs6000.h:275 msgid "Use PowerPC Graphics group optional instructions" msgstr "" ! #: config/rs6000/rs6000.h:277 msgid "Don't use PowerPC Graphics group optional instructions" msgstr "" ! #: config/rs6000/rs6000.h:279 msgid "Use PowerPC-64 instruction set" msgstr "" ! #: config/rs6000/rs6000.h:281 msgid "Don't use PowerPC-64 instruction set" msgstr "" ! #: config/rs6000/rs6000.h:283 msgid "Use new mnemonics for PowerPC architecture" msgstr "" ! #: config/rs6000/rs6000.h:285 msgid "Use old mnemonics for PowerPC architecture" msgstr "" ! #: config/rs6000/rs6000.h:288 msgid "Put everything in the regular TOC" msgstr "" ! #: config/rs6000/rs6000.h:290 msgid "Place floating point constants in TOC" msgstr "" ! #: config/rs6000/rs6000.h:292 msgid "Don't place floating point constants in TOC" msgstr "" ! #: config/rs6000/rs6000.h:294 msgid "Place symbol+offset constants in TOC" msgstr "" ! #: config/rs6000/rs6000.h:296 msgid "Don't place symbol+offset constants in TOC" msgstr "" ! #: config/rs6000/rs6000.h:302 msgid "Place variable addresses in the regular TOC" msgstr "" ! #: config/rs6000/rs6000.h:308 msgid "Generate load/store multiple instructions" msgstr "" ! #: config/rs6000/rs6000.h:310 msgid "Do not generate load/store multiple instructions" msgstr "" ! #: config/rs6000/rs6000.h:314 msgid "Generate string instructions for block moves" msgstr "" ! #: config/rs6000/rs6000.h:316 msgid "Do not generate string instructions for block moves" msgstr "" ! #: config/rs6000/rs6000.h:320 msgid "Generate load/store with update instructions" msgstr "" ! #: config/rs6000/rs6000.h:322 msgid "Do not generate load/store with update instructions" msgstr "" ! #: config/rs6000/rs6000.h:324 msgid "Generate fused multiply/add instructions" msgstr "" ! #: config/rs6000/rs6000.h:326 msgid "Don't generate fused multiply/add instructions" msgstr "" ! #: config/rs6000/rs6000.h:330 msgid "Don't schedule the start and end of the procedure" msgstr "" --- 9026,9144 ---- #. each pair being { "NAME", VALUE } #. where VALUE is the bits to set or minus the bits to clear. #. An empty string NAME is used to identify the default VALUE. ! #: config/rs6000/rs6000.h:255 msgid "Use POWER instruction set" msgstr "" ! #: config/rs6000/rs6000.h:258 msgid "Use POWER2 instruction set" msgstr "" ! #: config/rs6000/rs6000.h:260 msgid "Do not use POWER2 instruction set" msgstr "" ! #: config/rs6000/rs6000.h:263 msgid "Do not use POWER instruction set" msgstr "" ! #: config/rs6000/rs6000.h:265 msgid "Use PowerPC instruction set" msgstr "" ! #: config/rs6000/rs6000.h:268 msgid "Do not use PowerPC instruction set" msgstr "" ! #: config/rs6000/rs6000.h:270 msgid "Use PowerPC General Purpose group optional instructions" msgstr "" ! #: config/rs6000/rs6000.h:272 msgid "Don't use PowerPC General Purpose group optional instructions" msgstr "" ! #: config/rs6000/rs6000.h:274 msgid "Use PowerPC Graphics group optional instructions" msgstr "" ! #: config/rs6000/rs6000.h:276 msgid "Don't use PowerPC Graphics group optional instructions" msgstr "" ! #: config/rs6000/rs6000.h:278 msgid "Use PowerPC-64 instruction set" msgstr "" ! #: config/rs6000/rs6000.h:280 msgid "Don't use PowerPC-64 instruction set" msgstr "" ! #: config/rs6000/rs6000.h:282 msgid "Use new mnemonics for PowerPC architecture" msgstr "" ! #: config/rs6000/rs6000.h:284 msgid "Use old mnemonics for PowerPC architecture" msgstr "" ! #: config/rs6000/rs6000.h:287 msgid "Put everything in the regular TOC" msgstr "" ! #: config/rs6000/rs6000.h:289 msgid "Place floating point constants in TOC" msgstr "" ! #: config/rs6000/rs6000.h:291 msgid "Don't place floating point constants in TOC" msgstr "" ! #: config/rs6000/rs6000.h:293 msgid "Place symbol+offset constants in TOC" msgstr "" ! #: config/rs6000/rs6000.h:295 msgid "Don't place symbol+offset constants in TOC" msgstr "" ! #: config/rs6000/rs6000.h:301 msgid "Place variable addresses in the regular TOC" msgstr "" ! #: config/rs6000/rs6000.h:307 msgid "Generate load/store multiple instructions" msgstr "" ! #: config/rs6000/rs6000.h:309 msgid "Do not generate load/store multiple instructions" msgstr "" ! #: config/rs6000/rs6000.h:313 msgid "Generate string instructions for block moves" msgstr "" ! #: config/rs6000/rs6000.h:315 msgid "Do not generate string instructions for block moves" msgstr "" ! #: config/rs6000/rs6000.h:319 msgid "Generate load/store with update instructions" msgstr "" ! #: config/rs6000/rs6000.h:321 msgid "Do not generate load/store with update instructions" msgstr "" ! #: config/rs6000/rs6000.h:323 msgid "Generate fused multiply/add instructions" msgstr "" ! #: config/rs6000/rs6000.h:325 msgid "Don't generate fused multiply/add instructions" msgstr "" ! #: config/rs6000/rs6000.h:329 msgid "Don't schedule the start and end of the procedure" msgstr "" *************** msgstr "" *** 5603,5613 **** #. #. extern char *m88k_short_data; #. #define TARGET_OPTIONS { { "short-data-", &m88k_short_data } } ! #: config/rs6000/rs6000.h:403 config/sparc/sparc.h:709 msgid "Use features of and schedule code for given CPU" msgstr "" ! #: config/rs6000/rs6000.h:406 msgid "Enable debug output" msgstr "" --- 9158,9168 ---- #. #. extern char *m88k_short_data; #. #define TARGET_OPTIONS { { "short-data-", &m88k_short_data } } ! #: config/rs6000/rs6000.h:402 config/sparc/sparc.h:708 msgid "Use features of and schedule code for given CPU" msgstr "" ! #: config/rs6000/rs6000.h:405 msgid "Enable debug output" msgstr "" *************** msgstr "" *** 5623,5721 **** #. Number of bytes into the frame return addresses can be found. See #. rs6000_stack_info in rs6000.c for more information on how the different #. abi's store the return address. ! #: config/rs6000/rs6000.h:1637 msgid "RETURN_ADDRESS_OFFSET not supported" msgstr "" ! #: config/rs6000/sysv4.h:92 msgid "Select ABI calling convention." msgstr "" ! #: config/rs6000/sysv4.h:93 msgid "Select method for sdata handling." msgstr "" ! #: config/rs6000/sysv4.h:108 msgid "Align to the base type of the bitfield." msgstr "" ! #: config/rs6000/sysv4.h:110 msgid "Don't align to the base type of the bitfield." msgstr "" ! #: config/rs6000/sysv4.h:112 msgid "Don't assume that unaligned accesses are handled by the system" msgstr "" ! #: config/rs6000/sysv4.h:114 msgid "Assume that unaligned accesses are handled by the system" msgstr "" ! #: config/rs6000/sysv4.h:116 config/rs6000/sysv4.h:120 msgid "Produce code relocatable at runtime." msgstr "" ! #: config/rs6000/sysv4.h:118 config/rs6000/sysv4.h:122 msgid "Don't produce code relocatable at runtime." msgstr "" ! #: config/rs6000/sysv4.h:124 config/rs6000/sysv4.h:126 msgid "Produce little endian code." ! msgstr "" ! #: config/rs6000/sysv4.h:128 config/rs6000/sysv4.h:130 msgid "Produce big endian code." ! msgstr "" ! #: config/rs6000/sysv4.h:134 config/sparc/linux.h:93 ! #: config/sparc/linux64.h:149 msgid "Use 128 bit long doubles" ! msgstr "" #: config/rs6000/sysv4.h:135 config/rs6000/sysv4.h:136 #: config/rs6000/sysv4.h:137 config/rs6000/sysv4.h:138 ! #: config/rs6000/sysv4.h:139 config/rs6000/sysv4.h:140 ! #: config/rs6000/sysv4.h:147 config/rs6000/sysv4.h:148 ! #: config/rs6000/sysv4.h:159 config/rs6000/sysv4.h:160 ! #: config/rs6000/sysv4.h:161 config/rs6000/sysv4.h:163 msgid "no description yet" ! msgstr "" ! #: config/rs6000/sysv4.h:141 msgid "Use EABI." ! msgstr "" ! #: config/rs6000/sysv4.h:142 msgid "Don't use EABI." msgstr "" ! #: config/rs6000/sysv4.h:144 msgid "Use alternate register names." ! msgstr "" ! #: config/rs6000/sysv4.h:146 msgid "Don't use alternate register names." ! msgstr "" ! #: config/rs6000/sysv4.h:150 msgid "Link with libsim.a, libc.a and sim-crt0.o." ! msgstr "" ! #: config/rs6000/sysv4.h:152 msgid "Link with libads.a, libc.a and crt0.o." ! msgstr "" ! #: config/rs6000/sysv4.h:154 msgid "Link with libyk.a, libc.a and crt0.o." ! msgstr "" ! #: config/rs6000/sysv4.h:156 msgid "Link with libmvme.a, libc.a and crt0.o." ! msgstr "" ! #: config/rs6000/sysv4.h:158 msgid "Set the PPC_EMB bit in the ELF flags header" ! msgstr "" #. Sometimes certain combinations of command options do not make sense #. on a particular target machine. You can define a macro --- 9178,9280 ---- #. Number of bytes into the frame return addresses can be found. See #. rs6000_stack_info in rs6000.c for more information on how the different #. abi's store the return address. ! #: config/rs6000/rs6000.h:1664 msgid "RETURN_ADDRESS_OFFSET not supported" msgstr "" ! #: config/rs6000/sysv4.h:90 msgid "Select ABI calling convention." msgstr "" ! #: config/rs6000/sysv4.h:91 msgid "Select method for sdata handling." msgstr "" ! #: config/rs6000/sysv4.h:106 msgid "Align to the base type of the bitfield." msgstr "" ! #: config/rs6000/sysv4.h:108 msgid "Don't align to the base type of the bitfield." msgstr "" ! #: config/rs6000/sysv4.h:110 msgid "Don't assume that unaligned accesses are handled by the system" msgstr "" ! #: config/rs6000/sysv4.h:112 msgid "Assume that unaligned accesses are handled by the system" msgstr "" ! #: config/rs6000/sysv4.h:114 config/rs6000/sysv4.h:118 msgid "Produce code relocatable at runtime." msgstr "" ! #: config/rs6000/sysv4.h:116 config/rs6000/sysv4.h:120 msgid "Don't produce code relocatable at runtime." msgstr "" ! #: config/rs6000/sysv4.h:122 config/rs6000/sysv4.h:124 msgid "Produce little endian code." ! msgstr "Skapa \"little endian\"-kod." ! #: config/rs6000/sysv4.h:126 config/rs6000/sysv4.h:128 msgid "Produce big endian code." ! msgstr "Skapa \"big endian\"-kod." ! #: config/rs6000/sysv4.h:132 config/sparc/linux.h:84 ! #: config/sparc/linux64.h:140 msgid "Use 128 bit long doubles" ! msgstr "Använd 128 bit long double" + #: config/rs6000/sysv4.h:133 config/rs6000/sysv4.h:134 #: config/rs6000/sysv4.h:135 config/rs6000/sysv4.h:136 #: config/rs6000/sysv4.h:137 config/rs6000/sysv4.h:138 ! #: config/rs6000/sysv4.h:148 config/rs6000/sysv4.h:149 ! #: config/rs6000/sysv4.h:160 config/rs6000/sysv4.h:161 ! #: config/rs6000/sysv4.h:162 config/rs6000/sysv4.h:164 msgid "no description yet" ! msgstr "ingen beskriving ännu" ! #: config/rs6000/sysv4.h:139 msgid "Use EABI." ! msgstr "Använd EABI." ! #: config/rs6000/sysv4.h:140 msgid "Don't use EABI." + msgstr "Använd inte EABI." + + #: config/rs6000/sysv4.h:143 + msgid "Do not allow bitfields to cross word boundaries" msgstr "" ! #: config/rs6000/sysv4.h:145 msgid "Use alternate register names." ! msgstr "Använd alternativa registernamn." ! #: config/rs6000/sysv4.h:147 msgid "Don't use alternate register names." ! msgstr "Använd inte alternativa registernamn." ! #: config/rs6000/sysv4.h:151 msgid "Link with libsim.a, libc.a and sim-crt0.o." ! msgstr "Länka med libsim.a, libc.a och sim-crt0.o." ! #: config/rs6000/sysv4.h:153 msgid "Link with libads.a, libc.a and crt0.o." ! msgstr "Länka med libads.a, libc.a och crt0.o." ! #: config/rs6000/sysv4.h:155 msgid "Link with libyk.a, libc.a and crt0.o." ! msgstr "Länka med libyk.a, libc.a och crt0.o." ! #: config/rs6000/sysv4.h:157 msgid "Link with libmvme.a, libc.a and crt0.o." ! msgstr "Länka med libmvme.a, libc.a och crt0.o." ! #: config/rs6000/sysv4.h:159 msgid "Set the PPC_EMB bit in the ELF flags header" ! msgstr "Sätt biten PPC_EMB i ELF:s flaggfält" #. Sometimes certain combinations of command options do not make sense #. on a particular target machine. You can define a macro *************** msgstr "" *** 5725,5845 **** #. #. The macro SUBTARGET_OVERRIDE_OPTIONS is provided for subtargets, to #. get control. ! #: config/rs6000/sysv4.h:209 #, c-format msgid "Bad value for -mcall-%s" ! msgstr "" ! #: config/rs6000/sysv4.h:225 #, c-format msgid "Bad value for -msdata=%s" ! msgstr "" ! #: config/rs6000/sysv4.h:242 #, c-format msgid "-mrelocatable and -msdata=%s are incompatible." msgstr "" ! #: config/rs6000/sysv4.h:250 #, c-format msgid "-f%s and -msdata=%s are incompatible." msgstr "" ! #: config/rs6000/sysv4.h:259 #, c-format msgid "-msdata=%s and -mcall-%s are incompatible." msgstr "" ! #: config/rs6000/sysv4.h:266 msgid "-mrelocatable and -mno-minimal-toc are incompatible." msgstr "" ! #: config/rs6000/sysv4.h:272 #, c-format msgid "-mrelocatable and -mcall-%s are incompatible." msgstr "" ! #: config/rs6000/sysv4.h:279 #, c-format msgid "-fPIC and -mcall-%s are incompatible." msgstr "" ! #: config/rs6000/sysv4.h:286 msgid "-mcall-aixdesc must be big endian" ! msgstr "" #: config/sparc/sp64-elf.h:84 config/sparc/splet.h:29 msgid "Generate code for big endian" ! msgstr "" #: config/sparc/sp64-elf.h:85 config/sparc/splet.h:30 msgid "Generate code for little endian" ! msgstr "" ! #: config/sparc/sparc.c:256 ! #, c-format ! msgid "%s is not supported by this configuration" ! msgstr "" ! #: config/sparc/sparc.c:264 #, c-format ! msgid "-mptr%d not allowed on -m%d" msgstr "" ! #: config/sparc/sparc.c:275 msgid "-mlong-double-64 not allowed with -m64" msgstr "" ! #: config/sparc/sparc.c:295 ! #, c-format ! msgid "bad value (%s) for -mcmodel= switch" ! msgstr "" ! ! #: config/sparc/sparc.c:300 msgid "-mcmodel= is not supported on 32 bit systems" msgstr "" ! #: config/sparc/sparc.c:381 msgid "profiling does not support code models other than medlow" msgstr "" ! #: config/sparc/sparc.c:5683 config/sparc/sparc.c:5689 msgid "Invalid %%Y operand" msgstr "" ! #: config/sparc/sparc.c:5759 msgid "Invalid %%A operand" msgstr "" ! #: config/sparc/sparc.c:5769 msgid "Invalid %%B operand" msgstr "" ! #: config/sparc/sparc.c:5808 msgid "Invalid %%c operand" msgstr "" ! #: config/sparc/sparc.c:5809 msgid "Invalid %%C operand" msgstr "" ! #: config/sparc/sparc.c:5830 msgid "Invalid %%d operand" msgstr "" ! #: config/sparc/sparc.c:5831 msgid "Invalid %%D operand" msgstr "" ! #: config/sparc/sparc.c:5849 msgid "Invalid %%f operand" msgstr "" ! #: config/sparc/sparc.c:5899 msgid "long long constant not a valid immediate operand" msgstr "" ! #: config/sparc/sparc.c:5902 msgid "floating point constant not a valid immediate operand" msgstr "" --- 9284,9406 ---- #. #. The macro SUBTARGET_OVERRIDE_OPTIONS is provided for subtargets, to #. get control. ! #: config/rs6000/sysv4.h:217 #, c-format msgid "Bad value for -mcall-%s" ! msgstr "Felaktigt värde för -mcall-%s" ! #: config/rs6000/sysv4.h:233 #, c-format msgid "Bad value for -msdata=%s" ! msgstr "Felaktigt värde för -msdata-%s" ! #: config/rs6000/sysv4.h:250 #, c-format msgid "-mrelocatable and -msdata=%s are incompatible." msgstr "" ! #: config/rs6000/sysv4.h:258 #, c-format msgid "-f%s and -msdata=%s are incompatible." msgstr "" ! #: config/rs6000/sysv4.h:267 #, c-format msgid "-msdata=%s and -mcall-%s are incompatible." msgstr "" ! #: config/rs6000/sysv4.h:274 msgid "-mrelocatable and -mno-minimal-toc are incompatible." msgstr "" ! #: config/rs6000/sysv4.h:280 #, c-format msgid "-mrelocatable and -mcall-%s are incompatible." msgstr "" ! #: config/rs6000/sysv4.h:287 #, c-format msgid "-fPIC and -mcall-%s are incompatible." msgstr "" ! #: config/rs6000/sysv4.h:294 msgid "-mcall-aixdesc must be big endian" ! msgstr "-mcall-aixdesc måste vara \"big endian\"" #: config/sparc/sp64-elf.h:84 config/sparc/splet.h:29 msgid "Generate code for big endian" ! msgstr "Generera kod för \"big endian\"" #: config/sparc/sp64-elf.h:85 config/sparc/splet.h:30 msgid "Generate code for little endian" ! msgstr "Generera kod för \"little endian\"" ! #: config/sparc/sp86x-aout.h:53 config/sparc/sp86x-elf.h:66 ! msgid "Use little-endian byte order for data" ! msgstr "Använd \"little endian\" byteordning för data" ! #: config/sparc/sparc.c:253 #, c-format ! msgid "%s is not supported by this configuration" msgstr "" ! #: config/sparc/sparc.c:260 msgid "-mlong-double-64 not allowed with -m64" msgstr "" ! #: config/sparc/sparc.c:285 msgid "-mcmodel= is not supported on 32 bit systems" msgstr "" ! #: config/sparc/sparc.c:366 msgid "profiling does not support code models other than medlow" msgstr "" ! #: config/sparc/sparc.c:5712 config/sparc/sparc.c:5718 ! #, c-format msgid "Invalid %%Y operand" msgstr "" ! #: config/sparc/sparc.c:5788 ! #, c-format msgid "Invalid %%A operand" msgstr "" ! #: config/sparc/sparc.c:5798 ! #, c-format msgid "Invalid %%B operand" msgstr "" ! #: config/sparc/sparc.c:5837 ! #, c-format msgid "Invalid %%c operand" msgstr "" ! #: config/sparc/sparc.c:5838 ! #, c-format msgid "Invalid %%C operand" msgstr "" ! #: config/sparc/sparc.c:5859 ! #, c-format msgid "Invalid %%d operand" msgstr "" ! #: config/sparc/sparc.c:5860 ! #, c-format msgid "Invalid %%D operand" msgstr "" ! #: config/sparc/sparc.c:5878 ! #, c-format msgid "Invalid %%f operand" msgstr "" ! #: config/sparc/sparc.c:5928 msgid "long long constant not a valid immediate operand" msgstr "" ! #: config/sparc/sparc.c:5931 msgid "floating point constant not a valid immediate operand" msgstr "" *************** msgstr "" *** 5851,6081 **** msgid "%s and profiling conflict: disabling %s" msgstr "" ! #: config/sparc/sparc.h:588 msgid "Use FUNCTION_EPILOGUE" ! msgstr "" ! #: config/sparc/sparc.h:590 msgid "Do not use FUNCTION_EPILOGUE" ! msgstr "" ! #: config/sparc/sparc.h:592 msgid "Assume possible double misalignment" msgstr "" ! #: config/sparc/sparc.h:594 msgid "Assume all doubles are aligned" msgstr "" ! #: config/sparc/sparc.h:596 msgid "Pass -assert pure-text to linker" msgstr "" ! #: config/sparc/sparc.h:598 msgid "Do not pass -assert pure-text to linker" msgstr "" ! #: config/sparc/sparc.h:600 msgid "Use flat register window model" msgstr "" ! #: config/sparc/sparc.h:602 msgid "Do not use flat register window model" msgstr "" ! #: config/sparc/sparc.h:604 msgid "Use ABI reserved registers" msgstr "" ! #: config/sparc/sparc.h:606 msgid "Do not use ABI reserved registers" msgstr "" ! #: config/sparc/sparc.h:608 msgid "Use hardware quad fp instructions" msgstr "" ! #: config/sparc/sparc.h:610 msgid "Do not use hardware quad fp instructions" msgstr "" ! #: config/sparc/sparc.h:612 msgid "Compile for v8plus ABI" msgstr "" ! #: config/sparc/sparc.h:614 msgid "Do not compile for v8plus ABI" msgstr "" ! #: config/sparc/sparc.h:616 msgid "Utilize Visual Instruction Set" msgstr "" ! #: config/sparc/sparc.h:618 msgid "Do not utilize Visual Instruction Set" msgstr "" #. ??? These are deprecated, coerced to -mcpu=. Delete in 2.9. ! #: config/sparc/sparc.h:621 msgid "Optimize for Cypress processors" msgstr "" ! #: config/sparc/sparc.h:623 msgid "Optimize for SparcLite processors" msgstr "" ! #: config/sparc/sparc.h:625 msgid "Optimize for F930 processors" msgstr "" ! #: config/sparc/sparc.h:627 msgid "Optimize for F934 processors" msgstr "" ! #: config/sparc/sparc.h:629 msgid "Use V8 Sparc ISA" msgstr "" ! #: config/sparc/sparc.h:631 msgid "Optimize for SuperSparc processors" msgstr "" #. End of deprecated options. ! #: config/sparc/sparc.h:634 msgid "Pointers are 64-bit" msgstr "Pekare är 64-bitars" ! #: config/sparc/sparc.h:636 msgid "Pointers are 32-bit" msgstr "Pekare är 32-bitars" ! #: config/sparc/sparc.h:638 msgid "Use 32-bit ABI" msgstr "Använd 32-bitars ABI" ! #: config/sparc/sparc.h:640 msgid "Use 64-bit ABI" msgstr "Använd 64-bitars ABI" ! #: config/sparc/sparc.h:642 msgid "Use stack bias" msgstr "" ! #: config/sparc/sparc.h:644 msgid "Do not use stack bias" msgstr "" ! #: config/sparc/sparc.h:646 msgid "Use structs on stronger alignment for double-word copies" msgstr "" ! #: config/sparc/sparc.h:648 msgid "Do not use structs on stronger alignment for double-word copies" msgstr "" ! #: config/sparc/sparc.h:650 msgid "Optimize tail call instructions in assembler and linker" msgstr "" ! #: config/sparc/sparc.h:652 msgid "Do not optimize tail call instructions in assembler or linker" msgstr "" ! #: config/sparc/sparc.h:713 msgid "Use given Sparc code model" msgstr "" ! #: config/v850/v850.c:101 ! #, c-format ! msgid "%s=%s is not numeric." ! msgstr "" ! ! #: config/v850/v850.c:108 ! #, c-format ! msgid "%s=%s is too large." ! msgstr "" ! ! #: config/v850/v850.c:2033 ! msgid "a data area attribute cannot be specified for local variables" ! msgstr "" ! ! #: config/v850/v850.c:2041 ! #, c-format ! msgid "data area of '%s' conflicts with previous declaration" ! msgstr "" ! ! #: config/v850/v850.c:2245 ! #, c-format ! msgid "Bogus JR construction: %d\n" ! msgstr "" ! ! #: config/v850/v850.c:2266 config/v850/v850.c:2468 ! #, c-format ! msgid "Bad amount of stack space removal: %d" ! msgstr "" ! ! #: config/v850/v850.c:2444 ! #, c-format ! msgid "Bogus JARL construction: %d\n" ! msgstr "" ! ! #: config/v850/v850.c:2689 msgid "#pragma GHS endXXXX found without previous startXXX" msgstr "" ! #: config/v850/v850.c:2691 msgid "#pragma GHS endXXX does not match previous startXXX" msgstr "" ! #: config/v850/v850.c:2715 msgid "Cannot set interrupt attribute: no current function" msgstr "" ! #: config/v850/v850.c:2723 msgid "Cannot set interrupt attribute: no such identifier" msgstr "" ! #: config/v850/v850.c:2765 msgid "junk at end of #pragma ghs section" msgstr "" ! #: config/v850/v850.c:2782 #, c-format msgid "unrecognised section name \"%s\"" ! msgstr "" ! #: config/v850/v850.c:2796 msgid "malformed #pragma ghs section" msgstr "" ! #: config/v850/v850.c:2814 msgid "junk at end of #pragma ghs interrupt" msgstr "" ! #: config/v850/v850.c:2824 msgid "junk at end of #pragma ghs starttda" msgstr "" ! #: config/v850/v850.c:2834 msgid "junk at end of #pragma ghs startsda" msgstr "" ! #: config/v850/v850.c:2844 msgid "junk at end of #pragma ghs startzda" msgstr "" ! #: config/v850/v850.c:2854 msgid "junk at end of #pragma ghs endtda" msgstr "" ! #: config/v850/v850.c:2864 msgid "junk at end of #pragma ghs endsda" msgstr "" ! #: config/v850/v850.c:2874 msgid "junk at end of #pragma ghs endzda" msgstr "" #. Macro to define tables used to set the flags. #. This is a list in braces of pairs in braces, #. each pair being { "NAME", VALUE } --- 9412,9642 ---- msgid "%s and profiling conflict: disabling %s" msgstr "" ! #: config/sparc/sparc.h:587 msgid "Use FUNCTION_EPILOGUE" ! msgstr "Använd FUNCTION_EPILOGUE" ! #: config/sparc/sparc.h:589 msgid "Do not use FUNCTION_EPILOGUE" ! msgstr "Använd inte FUNCTION_EPILOGUE" ! #: config/sparc/sparc.h:591 msgid "Assume possible double misalignment" msgstr "" ! #: config/sparc/sparc.h:593 msgid "Assume all doubles are aligned" msgstr "" ! #: config/sparc/sparc.h:595 msgid "Pass -assert pure-text to linker" msgstr "" ! #: config/sparc/sparc.h:597 msgid "Do not pass -assert pure-text to linker" msgstr "" ! #: config/sparc/sparc.h:599 msgid "Use flat register window model" msgstr "" ! #: config/sparc/sparc.h:601 msgid "Do not use flat register window model" msgstr "" ! #: config/sparc/sparc.h:603 msgid "Use ABI reserved registers" msgstr "" ! #: config/sparc/sparc.h:605 msgid "Do not use ABI reserved registers" msgstr "" ! #: config/sparc/sparc.h:607 msgid "Use hardware quad fp instructions" msgstr "" ! #: config/sparc/sparc.h:609 msgid "Do not use hardware quad fp instructions" msgstr "" ! #: config/sparc/sparc.h:611 msgid "Compile for v8plus ABI" msgstr "" ! #: config/sparc/sparc.h:613 msgid "Do not compile for v8plus ABI" msgstr "" ! #: config/sparc/sparc.h:615 msgid "Utilize Visual Instruction Set" msgstr "" ! #: config/sparc/sparc.h:617 msgid "Do not utilize Visual Instruction Set" msgstr "" #. ??? These are deprecated, coerced to -mcpu=. Delete in 2.9. ! #: config/sparc/sparc.h:620 msgid "Optimize for Cypress processors" msgstr "" ! #: config/sparc/sparc.h:622 msgid "Optimize for SparcLite processors" msgstr "" ! #: config/sparc/sparc.h:624 msgid "Optimize for F930 processors" msgstr "" ! #: config/sparc/sparc.h:626 msgid "Optimize for F934 processors" msgstr "" ! #: config/sparc/sparc.h:628 msgid "Use V8 Sparc ISA" msgstr "" ! #: config/sparc/sparc.h:630 msgid "Optimize for SuperSparc processors" msgstr "" #. End of deprecated options. ! #: config/sparc/sparc.h:633 msgid "Pointers are 64-bit" msgstr "Pekare är 64-bitars" ! #: config/sparc/sparc.h:635 msgid "Pointers are 32-bit" msgstr "Pekare är 32-bitars" ! #: config/sparc/sparc.h:637 msgid "Use 32-bit ABI" msgstr "Använd 32-bitars ABI" ! #: config/sparc/sparc.h:639 msgid "Use 64-bit ABI" msgstr "Använd 64-bitars ABI" ! #: config/sparc/sparc.h:641 msgid "Use stack bias" msgstr "" ! #: config/sparc/sparc.h:643 msgid "Do not use stack bias" msgstr "" ! #: config/sparc/sparc.h:645 msgid "Use structs on stronger alignment for double-word copies" msgstr "" ! #: config/sparc/sparc.h:647 msgid "Do not use structs on stronger alignment for double-word copies" msgstr "" ! #: config/sparc/sparc.h:649 msgid "Optimize tail call instructions in assembler and linker" msgstr "" ! #: config/sparc/sparc.h:651 msgid "Do not optimize tail call instructions in assembler or linker" msgstr "" ! #: config/sparc/sparc.h:712 msgid "Use given Sparc code model" msgstr "" ! #: config/v850/v850-c.c:68 msgid "#pragma GHS endXXXX found without previous startXXX" msgstr "" ! #: config/v850/v850-c.c:70 msgid "#pragma GHS endXXX does not match previous startXXX" msgstr "" ! #: config/v850/v850-c.c:95 msgid "Cannot set interrupt attribute: no current function" msgstr "" ! #: config/v850/v850-c.c:103 msgid "Cannot set interrupt attribute: no such identifier" msgstr "" ! #: config/v850/v850-c.c:149 msgid "junk at end of #pragma ghs section" msgstr "" ! #: config/v850/v850-c.c:166 #, c-format msgid "unrecognised section name \"%s\"" ! msgstr "Känner inte igen sektionsnamn \"%s\"" ! #: config/v850/v850-c.c:181 msgid "malformed #pragma ghs section" msgstr "" ! #: config/v850/v850-c.c:201 msgid "junk at end of #pragma ghs interrupt" msgstr "" ! #: config/v850/v850-c.c:213 msgid "junk at end of #pragma ghs starttda" msgstr "" ! #: config/v850/v850-c.c:225 msgid "junk at end of #pragma ghs startsda" msgstr "" ! #: config/v850/v850-c.c:237 msgid "junk at end of #pragma ghs startzda" msgstr "" ! #: config/v850/v850-c.c:249 msgid "junk at end of #pragma ghs endtda" msgstr "" ! #: config/v850/v850-c.c:261 msgid "junk at end of #pragma ghs endsda" msgstr "" ! #: config/v850/v850-c.c:273 msgid "junk at end of #pragma ghs endzda" msgstr "" + #: config/v850/v850.c:107 + #, c-format + msgid "%s=%s is not numeric." + msgstr "" + + #: config/v850/v850.c:114 + #, c-format + msgid "%s=%s is too large." + msgstr "%s=%s är för stor." + + #: config/v850/v850.c:2039 + msgid "a data area attribute cannot be specified for local variables" + msgstr "" + + #: config/v850/v850.c:2047 + #, c-format + msgid "data area of '%s' conflicts with previous declaration" + msgstr "" + + #: config/v850/v850.c:2249 + #, c-format + msgid "Bogus JR construction: %d\n" + msgstr "" + + #: config/v850/v850.c:2270 config/v850/v850.c:2472 + #, c-format + msgid "Bad amount of stack space removal: %d" + msgstr "" + + #: config/v850/v850.c:2448 + #, c-format + msgid "Bogus JARL construction: %d\n" + msgstr "" + #. Macro to define tables used to set the flags. #. This is a list in braces of pairs in braces, #. each pair being { "NAME", VALUE } *************** msgstr "" *** 6107,6113 **** #: config/v850/v850.h:136 msgid "Compile for the v850 processor" ! msgstr "" #: config/v850/v850.h:139 msgid "Use 4 byte entries in switch tables" --- 9668,9674 ---- #: config/v850/v850.h:136 msgid "Compile for the v850 processor" ! msgstr "Kompilera för processorn v850" #: config/v850/v850.h:139 msgid "Use 4 byte entries in switch tables" *************** msgstr "" *** 6165,6175 **** msgid "aggregate value used where an integer was expected" msgstr "" ! #: convert.c:448 msgid "pointer value used where a complex was expected" msgstr "" ! #: convert.c:452 msgid "aggregate value used where a complex was expected" msgstr "" --- 9726,9736 ---- msgid "aggregate value used where an integer was expected" msgstr "" ! #: convert.c:448 f/com.c:1070 msgid "pointer value used where a complex was expected" msgstr "" ! #: convert.c:452 f/com.c:1072 msgid "aggregate value used where a complex was expected" msgstr "" *************** msgstr "" *** 6177,7442 **** msgid "can't convert value to a vector" msgstr "" ! #: cp/call.c:383 msgid "unable to call pointer to member function here" msgstr "" ! #: cp/call.c:513 msgid "destructors take no parameters" msgstr "" ! #: cp/call.c:2835 msgid "ISO C++ forbids omitting the middle term of a ?: expression" msgstr "ISO C++ förbjuder uteslutande av mittersta termen i ett ?: uttryck" ! #: cp/class.c:892 ! msgid "internal inconsistency: binfo offset error for rtti" ! msgstr "" ! ! #: cp/class.c:1481 #, c-format msgid "conflicting access specifications for field `%s', ignored" msgstr "" ! #: cp/class.c:5262 msgid "trying to finish struct, but kicked out due to previous parse errors." msgstr "" ! #: cp/class.c:5712 #, c-format msgid "language string `\"%s\"' not recognized" ! msgstr "" ! #: cp/class.c:6024 cp/class.c:6192 cp/class.c:6199 msgid "not enough type information" ! msgstr "" ! #: cp/class.c:6176 msgid "invalid operation on uninstantiated type" ! msgstr "" ! #: cp/class.c:7633 msgid "" "object size exceeds built-in limit for virtual function table implementation" msgstr "" ! #: cp/class.c:7635 msgid "" "object size exceeds normal limit for virtual function table implementation, " "recompile all source and use -fhuge-objects" msgstr "" ! #: cp/decl.c:1411 ! msgid "internal compiler error: debugging info corrupted" ! msgstr "" ! ! #: cp/decl.c:3938 ! msgid "parse errors have confused me too much" ! msgstr "" ! ! #: cp/decl.c:4236 #, c-format msgid "declaration of `%s' shadows a member of `this'" msgstr "" ! #: cp/decl.c:4878 #, c-format msgid "label `%s' referenced outside of any function" msgstr "" ! #: cp/decl.c:4983 cp/decl.c:5010 msgid "jump to case label" ! msgstr "" ! #: cp/decl.c:5016 cp/decl.c:5117 msgid " enters try block" ! msgstr "" ! ! #: cp/decl.c:5098 ! msgid " from here" ! msgstr "" ! ! #: cp/decl.c:5254 ! msgid "`default' label not within a switch statement" ! msgstr "" ! ! #: cp/decl.c:5282 ! msgid "pointers are not permitted as case values" ! msgstr "" ! ! #: cp/decl.c:5286 ! msgid "ISO C++ forbids range expressions in switch statement" ! msgstr "" ! ! #: cp/decl.c:5310 ! msgid "empty range specified" ! msgstr "" ! ! #: cp/decl.c:5361 ! msgid "duplicate (or overlapping) case value" ! msgstr "" ! ! #: cp/decl.c:5383 ! msgid "where case label appears here" ! msgstr "" ! ! #: cp/decl.c:5386 ! msgid "" ! "(enclose actions of previous case statements requiring destructors in their " ! "own scope.)" ! msgstr "" ! #: ../libiberty/cplus-dem.c:5007 ../libiberty/cplus-dem.c:5018 cp/decl.c:5738 ! msgid "virtual memory exhausted" ! msgstr "" ! #: cp/decl.c:6489 ! msgid "the new ABI requires vtable thunks" ! msgstr "" ! #: cp/decl.c:7139 ! msgid "an anonymous union cannot have function members" msgstr "" ! #: cp/decl.c:7196 msgid "multiple types in one declaration" msgstr "" ! #: cp/decl.c:7199 msgid "declaration does not declare anything" msgstr "" ! #: cp/decl.c:7212 msgid "ISO C++ prohibits anonymous structs" msgstr "" ! #: cp/decl.c:8216 msgid "assignment (not initialization) in declaration" ! msgstr "" ! #: cp/decl.c:8778 msgid "invalid catch parameter" msgstr "" ! #: cp/decl.c:9010 msgid "cannot declare `::main' to be a template" ! msgstr "" ! #: cp/decl.c:9012 msgid "cannot declare `::main' to be inline" msgstr "" ! #: cp/decl.c:9014 msgid "cannot declare `::main' to be static" ! msgstr "" ! #: cp/decl.c:9017 msgid "`main' must return `int'" ! msgstr "" ! #: cp/decl.c:9579 msgid "overflow in array dimension" msgstr "" ! #: cp/decl.c:9868 msgid "destructors must be member functions" ! msgstr "" ! #: cp/decl.c:10197 msgid "`bool' is now a keyword" msgstr "\"bool\" är numera ett nyckelord" ! #: cp/decl.c:10228 msgid "ISO C++ does not support `long long'" msgstr "ISO C++ stödjer inte \"long long\"" ! #: cp/decl.c:10351 #, c-format msgid "short, signed or unsigned invalid for `%s'" ! msgstr "" ! #: cp/decl.c:10356 #, c-format msgid "long and short specified together for `%s'" ! msgstr "" ! #: cp/decl.c:10367 #, c-format msgid "signed and unsigned given together for `%s'" ! msgstr "" ! #: cp/decl.c:10514 msgid "storage class specifiers invalid in parameter declarations" msgstr "" ! #: cp/decl.c:10518 msgid "typedef declaration invalid in parameter declaration" msgstr "" ! #: cp/decl.c:10529 msgid "virtual outside class declaration" msgstr "" ! #: cp/decl.c:10583 #, c-format msgid "storage class specified for %s `%s'" msgstr "" ! #: cp/decl.c:10621 msgid "storage class specifiers invalid in friend function declarations" msgstr "" ! #: cp/decl.c:10803 msgid "destructor cannot be static member function" ! msgstr "" ! #: cp/decl.c:10827 msgid "constructor cannot be static member function" ! msgstr "" ! #: cp/decl.c:10830 msgid "constructors cannot be declared virtual" msgstr "" ! #: cp/decl.c:10845 msgid "return value type specifier for constructor ignored" msgstr "" ! #: cp/decl.c:10864 #, c-format msgid "can't initialize friend function `%s'" msgstr "" #. Cannot be both friend and virtual. ! #: cp/decl.c:10868 msgid "virtual functions cannot be friends" msgstr "" ! #: cp/decl.c:10873 msgid "friend declaration not in class definition" msgstr "" ! #: cp/decl.c:10929 #, c-format msgid "cannot declare %s to references" msgstr "" ! #: cp/decl.c:10955 msgid "invalid type: `void &'" ! msgstr "" ! #: cp/decl.c:11006 msgid "discarding `const' applied to a reference" msgstr "" ! #: cp/decl.c:11008 msgid "discarding `volatile' applied to a reference" msgstr "" #. [dcl.fct.spec] The explicit specifier shall only be used in #. declarations of constructors within a class definition. ! #: cp/decl.c:11225 msgid "only declarations of constructors can be `explicit'" msgstr "" ! #: cp/decl.c:11233 #, c-format msgid "non-member `%s' cannot be declared `mutable'" msgstr "" ! #: cp/decl.c:11238 #, c-format msgid "non-object member `%s' cannot be declared `mutable'" msgstr "" ! #: cp/decl.c:11244 #, c-format msgid "function `%s' cannot be declared `mutable'" ! msgstr "" ! #: cp/decl.c:11249 #, c-format msgid "static `%s' cannot be declared `mutable'" msgstr "" ! #: cp/decl.c:11254 #, c-format msgid "const `%s' cannot be declared `mutable'" ! msgstr "" ! #: cp/decl.c:11374 msgid "typedef declaration includes an initializer" msgstr "" ! #: cp/decl.c:11470 msgid "unnamed variable or field declared void" msgstr "" ! #: cp/decl.c:11479 msgid "variable or field declared void" msgstr "" ! #: cp/decl.c:11489 msgid "cannot use `::' in parameter declaration" msgstr "" ! #: cp/decl.c:11507 ! #, c-format ! msgid "declaration of `%s' as void" ! msgstr "" ! ! #: cp/decl.c:11686 #, c-format msgid "`%s' is neither function nor member function; cannot be declared friend" msgstr "" ! #: cp/decl.c:11697 msgid "member functions are implicitly friends of their class" msgstr "" ! #: cp/decl.c:11811 #, c-format msgid "storage class `auto' invalid for function `%s'" msgstr "" ! #: cp/decl.c:11813 #, c-format msgid "storage class `register' invalid for function `%s'" ! msgstr "" ! #: cp/decl.c:11824 #, c-format msgid "" "storage class `static' invalid for function `%s' declared out of global scope" msgstr "" ! #: cp/decl.c:11826 #, c-format msgid "" "storage class `inline' invalid for function `%s' declared out of global scope" msgstr "" ! #: cp/decl.c:11833 #, c-format msgid "virtual non-class function `%s'" msgstr "" #. FIXME need arm citation ! #: cp/decl.c:11868 msgid "cannot declare static function inside another function" ! msgstr "" ! #: cp/decl.c:12202 msgid "" "invalid integer constant in parameter list, did you forget to give parameter " "name?" msgstr "" ! #: cp/decl.c:12229 ! msgid "parameter invalidly declared method type" ! msgstr "" ! ! #: cp/decl.c:12239 ! msgid "parameter invalidly declared offset type" ! msgstr "" ! ! #: cp/decl.c:12273 ! msgid "`void' in parameter list must be entire list" ! msgstr "" ! ! #: cp/decl.c:12659 #, c-format msgid "conversion to %s%s will never use a type conversion operator" msgstr "" ! #: cp/decl.c:13739 msgid "return type for `main' changed to `int'" ! msgstr "" ! ! #: cp/decl.c:14671 ! msgid "no return statement in function returning non-void" ! msgstr "" ! #: cp/decl2.c:631 #, c-format msgid "-f%s is no longer supported" ! msgstr "" ! #: cp/decl2.c:637 msgid "" "-fhandle-exceptions has been renamed to -fexceptions (and is now on by " "default)" msgstr "" ! #: cp/decl2.c:679 ! msgid "no file specified with -fdump-translation-unit" ! msgstr "" ! #: cp/decl2.c:741 msgid "-Wno-strict-prototypes is not supported in C++" ! msgstr "" ! #: cp/decl2.c:1055 msgid "name missing for member function" ! msgstr "" ! #: cp/decl2.c:1121 msgid "`__alignof__' applied to a bit-field" msgstr "" #. Something has gone very wrong. Assume we are mistakenly reducing #. an expression instead of a declaration. ! #: cp/decl2.c:1163 msgid "parser may be lost: is there a '{' missing somewhere?" msgstr "" ! #: cp/decl2.c:1194 cp/decl2.c:1208 msgid "ambiguous conversion for array subscript" ! msgstr "" ! #: cp/decl2.c:1258 msgid "anachronistic use of array size in vector delete" msgstr "" ! #: cp/decl2.c:1268 msgid "" "cannot delete a function. Only pointer-to-objects are valid arguments to " "`delete'" msgstr "" ! #: cp/decl2.c:1592 msgid "initializer invalid for static member with constructor" msgstr "" ! #: cp/decl2.c:1595 msgid "(an out of class initialization is required)" msgstr "" ! #: cp/decl2.c:1780 msgid "field initializer is not constant" ! msgstr "" ! #: cp/decl2.c:2144 msgid "anonymous struct not inside named type" msgstr "" ! #: cp/decl2.c:2240 msgid "namespace-scope anonymous aggregates must be static" msgstr "" ! #: cp/decl2.c:2250 msgid "anonymous aggregate with no members" msgstr "" - #: cp/decl2.c:2316 - msgid "`operator new' must return type `void *'" - msgstr "" - - #: cp/decl2.c:2321 - msgid "`operator new' takes type `size_t' parameter" - msgstr "" - - #: cp/decl2.c:2323 - msgid "`operator new' takes type `size_t' as first parameter" - msgstr "" - - #: cp/decl2.c:2348 - msgid "`operator delete' must return type `void'" - msgstr "" - - #: cp/decl2.c:2352 - msgid "`operator delete' takes type `void *' as first parameter" - msgstr "" - - #: cp/decl2.c:2363 - msgid "second argument to `operator delete' must be of type `size_t'" - msgstr "" - - #: cp/decl2.c:2368 - msgid "too many arguments in declaration of `operator delete'" - msgstr "" - - #: cp/decl2.c:2370 - msgid "`...' invalid in specification of `operator delete'" - msgstr "" - #. Overflow occurred. That means there are at least 4 billion #. initialization functions. ! #: cp/decl2.c:3135 msgid "too many initialization functions required" msgstr "" ! #: cp/decl2.c:3947 msgid "use of old-style cast" ! msgstr "" ! #: cp/error.c:517 #, c-format ! msgid "`%s' not supported by dump_type" ! msgstr "" ! #: cp/error.c:737 #, c-format ! msgid "`%s' not supported by dump_type_prefix" ! msgstr "" ! #: cp/error.c:829 #, c-format ! msgid "`%s' not supported by dump_type_suffix" ! msgstr "" ! #: cp/error.c:1095 #, c-format ! msgid "`%s' not supported by dump_decl" msgstr "" ! #: cp/error.c:2122 #, c-format ! msgid "`%s' not supported by dump_expr" msgstr "" ! #: cp/error.c:2538 #, c-format ! msgid "In %s `%s':" msgstr "" ! #: cp/except.c:503 ! msgid "call to Java `catch' or `throw', while `jthrowable' undefined" msgstr "" ! #: cp/except.c:568 ! msgid "mixing C++ and Java `catch'es in single translation unit" msgstr "" ! #: cp/except.c:949 msgid " in thrown expression" msgstr "" ! #: cp/friend.c:405 msgid "" "(if this is not what you intended, make sure the function template has " ! "already been declared and add <> after the function name here) " ! "-Wno-non-template-friend disables this warning." msgstr "" ! #: cp/g++spec.c:194 #, c-format msgid "argument to `%s' missing\n" ! msgstr "" ! #: cp/init.c:278 msgid "initializer list treated as compound expression" msgstr "" ! #: cp/init.c:393 msgid " will be re-ordered to match declaration order" msgstr "" ! #: cp/init.c:627 msgid " will be re-ordered to match inheritance order" msgstr "" ! #: cp/init.c:1061 msgid "base class initializer specified, but no base class to initialize" msgstr "" ! #: cp/init.c:1067 msgid "initializer for unnamed base class ambiguous" msgstr "" ! #: cp/init.c:1092 msgid "no base class to initialize" msgstr "" ! #: cp/init.c:1816 msgid "object missing in use of pointer-to-member construct" msgstr "" ! #: cp/init.c:1858 cp/typeck.c:3130 cp/typeck.c:3232 msgid "at this point in file" msgstr "" ! #: cp/init.c:2040 msgid "new of array type fails to specify size" msgstr "" ! #: cp/init.c:2051 msgid "size in array new must have integral type" msgstr "" ! #: cp/init.c:2057 msgid "zero size array reserves no space" msgstr "" ! #: cp/init.c:2122 msgid "new cannot be applied to a reference type" msgstr "" ! #: cp/init.c:2128 msgid "new cannot be applied to a function type" msgstr "" ! #: cp/init.c:2175 msgid "call to Java constructor, while `jclass' undefined" msgstr "" ! #: cp/init.c:2292 msgid "invalid type `void' for new" ! msgstr "" ! #: cp/init.c:2348 #, c-format ! msgid "call to Java constructor, while `%s' undefined" msgstr "" ! #: cp/init.c:2484 cp/typeck2.c:369 cp/typeck2.c:1172 msgid "initializer list being treated as compound expression" msgstr "" ! #: cp/init.c:2487 ! msgid "initializer list appears where operand should be used" ! msgstr "" ! ! #: cp/init.c:2934 ! msgid "initialization of array from dissimilar array type" msgstr "" ! #: cp/init.c:2948 msgid "initializer ends prematurely" msgstr "" ! #: cp/init.c:3017 msgid "cannot initialize multi-dimensional array with initializer" msgstr "" ! #: cp/init.c:3211 msgid "unknown array size in delete" msgstr "" ! #: cp/init.c:3430 msgid "type to vector delete is neither pointer or array type" msgstr "" ! #: cp/lex.c:160 ! msgid "type name expected before `*'" msgstr "" ! #: cp/lex.c:182 ! msgid "cannot declare references to references" msgstr "" ! #: cp/lex.c:187 ! msgid "cannot declare pointers to references" msgstr "" ! #: cp/lex.c:191 msgid "type name expected before `&'" msgstr "" ! #: cp/lex.c:1058 #, c-format msgid "semicolon missing after %s declaration" msgstr "" ! #: cp/lex.c:1109 #, c-format msgid "junk at end of #pragma %s" msgstr "" ! #: cp/lex.c:1116 #, c-format msgid "invalid #pragma %s" msgstr "" ! #: cp/lex.c:1208 cppmain.c:269 #, c-format msgid "#pragma implementation for %s appears after file is included" msgstr "" ! #: cp/lex.c:1323 msgid "" "(Each undeclared identifier is reported only once for each function it " "appears in.)" msgstr "" ! #: cp/lex.c:1346 #, c-format msgid "name lookup of `%s' changed" msgstr "" ! #: cp/lex.c:1360 cp/lex.c:1367 #, c-format msgid "name lookup of `%s' changed for new ISO `for' scoping" msgstr "" ! #: cp/method.c:907 ! #, c-format ! msgid "conversion of %s as template parameter" msgstr "" ! #: cp/method.c:1933 msgid "methods cannot be converted to function pointers" ! msgstr "" ! #: cp/method.c:1938 #, c-format msgid "ambiguous request for method pointer `%s'" msgstr "" ! #: cp/method.c:2046 ! #, c-format ! msgid "request for member `%s' is ambiguous in multiple inheritance lattice" ! msgstr "" ! ! #: parse.y:652 msgid "invalid default template argument" msgstr "" ! #: parse.y:857 msgid "no base or member initializers given following ':'" msgstr "" ! #: parse.y:873 msgid "base initializers not allowed for non-member functions" msgstr "" ! #: parse.y:875 msgid "only constructors take base initializers" msgstr "" ! #: parse.y:908 parse.y:914 msgid "anachronistic old style base class initializer" msgstr "" #. Handle `Class>' without space in the `>>' ! #: parse.y:1036 msgid "`>>' should be `> >' in template class name" msgstr "" ! #: parse.y:1093 parse.y:1102 #, c-format msgid "ISO C++ forbids an empty condition for `%s'" msgstr "" ! #: parse.y:1196 ! msgid "ISO C++ forbids `&&'" ! msgstr "" ! ! #: parse.y:1281 msgid "ISO C++ forbids initialization of new expression with `='" ! msgstr "" ! #: parse.y:1311 ! msgid "ISO C++ forbids constructor-expressions" msgstr "" ! #: parse.y:1546 msgid "ISO C++ forbids braced-groups within expressions" msgstr "" ! #: parse.y:1951 parse.y:1966 msgid "sigof type specifier" msgstr "" ! #: parse.y:1956 msgid "`sigof' applied to non-aggregate expression" msgstr "" ! #: parse.y:1971 msgid "`sigof' applied to non-aggregate type" msgstr "" ! #: parse.y:2306 #, c-format msgid "storage class specifier `%s' not allowed after struct or class" msgstr "" ! #: parse.y:2308 #, c-format msgid "type specifier `%s' not allowed after struct or class" msgstr "" ! #: parse.y:2310 #, c-format msgid "type qualifier `%s' not allowed after struct or class" msgstr "" ! #: parse.y:2312 msgid "no body nor ';' separates two class, struct or union declarations" msgstr "" ! #: parse.y:2480 msgid "multiple access specifiers" msgstr "" ! #: parse.y:2498 msgid "multiple `virtual' specifiers" msgstr "" ! #: parse.y:2533 msgid "missing ';' before right brace" ! msgstr "" ! #: parse.y:2754 msgid "ISO C++ forbids array dimensions with parenthesized type in new" msgstr "" ! #: parse.y:3259 msgid "ISO C++ forbids label declarations" msgstr "" ! #: parse.y:3412 msgid "ISO C++ forbids computed gotos" ! msgstr "" ! #: parse.y:3419 msgid "label must be followed by statement" msgstr "" ! #: parse.y:3512 msgid "ISO C++ forbids compound statements inside for initializations" msgstr "" #. This helps us recover from really nasty #. parse errors, for example, a missing right #. parenthesis. ! #: parse.y:3595 parse.y:3605 msgid "possibly missing ')'" ! msgstr "" ! #: parse.y:3702 parse.y:3707 msgid "type specifier omitted for parameter" msgstr "" ! #: cp/pt.c:1829 ! msgid " a template type parameter must begin with `class' or `typename'" ! msgstr "" ! ! #: cp/pt.c:6202 msgid "creating array with size zero" ! msgstr "" ! #: cp/pt.c:6710 #, c-format msgid "use of `%s' in template" ! msgstr "" ! #: cp/pt.c:7851 msgid "incomplete type unification" ! msgstr "" ! #: cp/pt.c:8702 #, c-format msgid "use of `%s' in template type unification" msgstr "" ! #: cp/repo.c:285 msgid "-frepo must be used with -c" ! msgstr "" ! #: cp/repo.c:378 #, c-format msgid "mysterious repository information in %s" msgstr "" ! #: cp/repo.c:393 #, c-format msgid "can't create repository information file `%s'" msgstr "" ! #: cp/rtti.c:247 msgid "taking dynamic typeid of object with -fno-rtti" msgstr "" ! #: cp/rtti.c:289 msgid "cannot use typeid with -fno-rtti" ! msgstr "" ! #: cp/rtti.c:295 cp/rtti.c:496 msgid "must #include before using typeid" ! msgstr "" ! #: cp/search.c:2027 msgid "adjusting pointers for covariant returns" msgstr "" #. This shouldn't happen, I don't want errors! ! #: cp/search.c:2545 msgid "recoverable compiler error, fixups for virtual function" msgstr "" ! #: cp/spew.c:245 ! #, c-format ! msgid "identifier name `%s' conflicts with GNU C++ internal naming strategy" msgstr "" ! #: cp/spew.c:360 ! msgid "syntax error before '#' token" msgstr "" ! #: cp/spew.c:364 ! msgid "syntax error before '\\' token" msgstr "" ! #: cp/spew.c:847 ! msgid "keyword 'export' not implemented and will be ignored" msgstr "" ! #: cp/spew.c:1055 cp/spew.c:1324 msgid "parse error at end of saved function text" msgstr "" ! #: cp/spew.c:1097 msgid "parse error in method specification" msgstr "" ! #: cp/spew.c:1139 msgid "function body for constructor missing" ! msgstr "" ! #: cp/tree.c:217 #, c-format msgid "non-lvalue in %s" ! msgstr "" ! #: cp/tree.c:2290 ! msgid "`com_interface' only supported with -fvtable-thunks" msgstr "" ! #: cp/tree.c:2299 msgid "`com_interface' attribute can only be applied to class definitions" msgstr "" ! #: cp/tree.c:2316 msgid "requested init_priority is not an integer constant" msgstr "" ! #: cp/tree.c:2337 msgid "" "can only use init_priority attribute on file-scope definitions of objects of " "class type" msgstr "" ! #: cp/tree.c:2343 msgid "requested init_priority is out of range" msgstr "" ! #: cp/tree.c:2352 msgid "requested init_priority is reserved for internal use" msgstr "" ! #: cp/typeck.c:482 cp/typeck.c:488 #, c-format msgid "" "ISO C++ forbids %s between pointer of type `void *' and pointer-to-function" msgstr "" ! #: cp/typeck.c:1557 msgid "ISO C++ forbids applying `sizeof' to a function type" ! msgstr "" ! #: cp/typeck.c:1563 msgid "ISO C++ forbids applying `sizeof' to a member function" ! msgstr "" ! #: cp/typeck.c:1569 msgid "" "ISO C++ forbids applying `sizeof' to type `void' which is an incomplete type" msgstr "" ! #: cp/typeck.c:1607 msgid "sizeof applied to a bit-field" msgstr "sizeof applicerat på ett bit-fält" ! #: cp/typeck.c:1610 msgid "ISO C++ forbids applying `sizeof' to an expression of function type" msgstr "" ! #: cp/typeck.c:2205 msgid "invalid reference to NULL ptr, use ptr-to-member instead" msgstr "" ! #: cp/typeck.c:2369 #, c-format msgid "invalid use of `%s' on pointer to member" msgstr "" ! #: cp/typeck.c:2375 msgid "invalid type argument" ! msgstr "" ! #: cp/typeck.c:2456 msgid "ISO C++ forbids subscripting non-lvalue array" msgstr "" ! #: cp/typeck.c:2467 msgid "subscripting array declared `register'" msgstr "" ! #: cp/typeck.c:2642 cp/typeck.c:2782 msgid "pointer to member function called, but not in class scope" msgstr "" ! #: cp/typeck.c:2780 msgid "" "invalid call to member function needing `this' in static member function " "scope" msgstr "" ! #: cp/typeck.c:2966 msgid "ISO C++ forbids calling `::main' from within program" ! msgstr "" ! #: cp/typeck.c:3169 msgid "parameter type of called function is incomplete" msgstr "" ! #: cp/typeck.c:3560 #, c-format msgid "%s rotate count is negative" msgstr "" ! #: cp/typeck.c:3563 #, c-format msgid "%s rotate count >= width of type" msgstr "" ! #: cp/typeck.c:3594 cp/typeck.c:3599 cp/typeck.c:3729 cp/typeck.c:3734 msgid "ISO C++ forbids comparison between pointer and integer" ! msgstr "" ! #: cp/typeck.c:3949 msgid "comparison between signed and unsigned integer expressions" msgstr "" ! #: cp/typeck.c:4088 msgid "ISO C++ forbids using pointer of type `void *' in pointer arithmetic" msgstr "" ! #: cp/typeck.c:4094 msgid "ISO C++ forbids using a pointer-to-function in pointer arithmetic" ! msgstr "" ! #: cp/typeck.c:4100 msgid "" "ISO C++ forbids using a pointer to member function in pointer arithmetic" msgstr "" ! #: cp/typeck.c:4106 msgid "ISO C++ forbids using pointer to a member in pointer arithmetic" ! msgstr "" ! #: cp/typeck.c:4177 msgid "ISO C++ forbids using pointer of type `void *' in subtraction" msgstr "" ! #: cp/typeck.c:4179 msgid "ISO C++ forbids using pointer to a function in subtraction" msgstr "" ! #: cp/typeck.c:4181 msgid "ISO C++ forbids using pointer to a method in subtraction" msgstr "" ! #: cp/typeck.c:4183 msgid "ISO C++ forbids using pointer to a member in subtraction" msgstr "" ! #: cp/typeck.c:4195 msgid "invalid use of a pointer to an incomplete type in pointer arithmetic" msgstr "" ! #: cp/typeck.c:4300 msgid "taking address of temporary" msgstr "tar adress till något temporärt" ! #: cp/typeck.c:4486 #, c-format msgid "ISO C++ forbids %sing an enum" msgstr "" ! #: cp/typeck.c:4530 msgid "cast to non-reference type used as lvalue" msgstr "" #. ARM $3.4 ! #: cp/typeck.c:4608 msgid "ISO C++ forbids taking address of function `::main'" ! msgstr "" ! #: cp/typeck.c:4685 msgid "ISO C++ forbids taking the address of a cast to a non-lvalue expression" msgstr "" ! #: cp/typeck.c:4701 msgid "unary `&'" ! msgstr "" ! #: cp/typeck.c:4923 ! msgid "cannot take the address of `this', which is an ravlue expression" ! msgstr "" ! #: cp/typeck.c:5233 msgid "" "ISO C++ forbids casting between pointer-to-function and pointer-to-object" msgstr "" ! #: cp/typeck.c:5344 cp/typeck.c:5349 ! msgid "ISO C++ forbids casting to an array type" ! msgstr "" ! ! #: cp/typeck.c:5676 msgid "ISO C++ forbids cast to non-reference type used as lvalue" msgstr "" ! #: cp/typeck.c:5782 msgid "ISO C++ forbids assignment of arrays" msgstr "ISO C++ förbjuder tilldelning av fält" ! #: cp/typeck.c:5799 msgid "return value from function receives multiple initializations" msgstr "" ! #: cp/typeck.c:5941 msgid " in pointer to member function conversion" msgstr "" ! #: cp/typeck.c:5949 msgid " in pointer to member conversion" msgstr "" ! #: cp/typeck.c:6669 msgid "returning reference to temporary" ! msgstr "" ! #: cp/typeck.c:6676 msgid "reference to non-lvalue returned" msgstr "" ! #: cp/typeck.c:6722 msgid "returning a value from a destructor" ! msgstr "" #. If a return statement appears in a handler of the #. function-try-block of a constructor, the program is ill-formed. ! #: cp/typeck.c:6730 msgid "cannot return from a handler of a function-try-block of a constructor" msgstr "" #. You can't return a value from a constructor. ! #: cp/typeck.c:6733 msgid "returning a value from a constructor" msgstr "" ! #: cp/typeck.c:6755 msgid "" "return-statement with no value, in function declared with a non-void return " "type" msgstr "" ! #: cp/typeck.c:6771 msgid "" "return-statement with a value, in function declared with a void return type" msgstr "" ! #: cp/typeck2.c:171 ! msgid " since the following virtual functions are abstract:" msgstr "" ! #: cp/typeck2.c:260 #, c-format msgid "Internal error #%d." msgstr "Internt fel #%d." ! #: cp/typeck2.c:327 msgid "due to the presence of a constructor" msgstr "" ! #: cp/typeck2.c:351 msgid "comma expression used to initialize return value" msgstr "" ! #: cp/typeck2.c:360 msgid "cannot initialize arrays using this syntax" msgstr "" ! #: cp/typeck2.c:416 msgid "ANSI C++ forbids non-constant aggregate initializer expressions" msgstr "" ! #: cp/typeck2.c:491 msgid "initializing array with parameter list" msgstr "" ! #: cp/typeck2.c:547 msgid "initializer for scalar variable requires one element" msgstr "" ! #: cp/typeck2.c:644 msgid "aggregate has a partly bracketed initializer" msgstr "" ! #: cp/typeck2.c:674 cp/typeck2.c:775 msgid "non-trivial labeled initializers" msgstr "" ! #: cp/typeck2.c:691 msgid "non-empty initializer for array of empty elements" msgstr "" ! #: cp/typeck2.c:741 msgid "initializer list for object of class with virtual base classes" msgstr "" ! #: cp/typeck2.c:747 msgid "initializer list for object of class with base classes" msgstr "" ! #: cp/typeck2.c:753 msgid "initializer list for object using virtual functions" msgstr "" ! #: cp/typeck2.c:863 msgid "index value instead of field name in union initializer" msgstr "" ! #: cp/typeck2.c:919 msgid "excess elements in aggregate initializer" msgstr "" ! #: cp/typeck2.c:1022 msgid "circular pointer delegation detected" msgstr "" ! #: cp/typeck2.c:1049 msgid "result of `operator->()' yields non-pointer result" msgstr "" ! #: cp/typeck2.c:1051 msgid "base operand of `->' is not a pointer" ! msgstr "" ! #: cp/typeck2.c:1223 #, c-format msgid "ISO C++ forbids defining types within %s" msgstr "" ! #: cp/xref.c:833 #, c-format msgid "Can't create cross-reference file `%s'" msgstr "" ! #: ../libiberty/cplus-dem.c:4788 gcc.c:5681 ! msgid "Internal gcc abort." ! msgstr "" ! ! #. N.B. The current line in each outer source file is one ! #. greater than the line of the #include, so we must ! #. subtract one to correct for that. ! #: cpperror.c:63 #, c-format msgid "In file included from %s:%u" ! msgstr "" #. Translators note: this message is used in conjunction #. with "In file included from %s:%ld" and some other --- 9738,11119 ---- msgid "can't convert value to a vector" msgstr "" ! #: cp/call.c:389 msgid "unable to call pointer to member function here" msgstr "" ! #: cp/call.c:519 msgid "destructors take no parameters" msgstr "" ! #: cp/call.c:2877 msgid "ISO C++ forbids omitting the middle term of a ?: expression" msgstr "ISO C++ förbjuder uteslutande av mittersta termen i ett ?: uttryck" ! #: cp/class.c:1435 #, c-format msgid "conflicting access specifications for field `%s', ignored" msgstr "" ! #: cp/class.c:5559 msgid "trying to finish struct, but kicked out due to previous parse errors." msgstr "" ! #: cp/class.c:6014 #, c-format msgid "language string `\"%s\"' not recognized" ! msgstr "språksträng `\"%s\"' känns inte igen" ! #: cp/class.c:6327 cp/class.c:6495 cp/class.c:6502 msgid "not enough type information" ! msgstr "inte tillräcklig typinformation" ! #: cp/class.c:6479 msgid "invalid operation on uninstantiated type" ! msgstr "ogiltig operation på oinstansierad typ" ! #: cp/class.c:8361 msgid "" "object size exceeds built-in limit for virtual function table implementation" msgstr "" ! #: cp/class.c:8363 msgid "" "object size exceeds normal limit for virtual function table implementation, " "recompile all source and use -fhuge-objects" msgstr "" ! #: cp/decl.c:4226 #, c-format msgid "declaration of `%s' shadows a member of `this'" msgstr "" ! #: cp/decl.c:4867 #, c-format msgid "label `%s' referenced outside of any function" msgstr "" ! #: cp/decl.c:4972 cp/decl.c:4996 msgid "jump to case label" ! msgstr "hopp till case-etikett" ! #: cp/decl.c:5003 cp/decl.c:5107 msgid " enters try block" ! msgstr " går in i try-block" ! #: cp/decl.c:5005 cp/decl.c:5109 ! msgid " enters catch block" ! msgstr " går in i catch-block" ! #: cp/decl.c:5088 ! msgid " from here" ! msgstr " från här" ! #: cp/decl.c:6353 ! msgid "the ABI requires vtable thunks" msgstr "" ! #: cp/decl.c:7013 msgid "multiple types in one declaration" msgstr "" ! #: cp/decl.c:7016 msgid "declaration does not declare anything" msgstr "" ! #: cp/decl.c:7040 ! msgid "Missing type-name in typedef-declaration." ! msgstr "" ! ! #: cp/decl.c:7047 msgid "ISO C++ prohibits anonymous structs" msgstr "" ! #: cp/decl.c:8033 msgid "assignment (not initialization) in declaration" ! msgstr "tilldelning (inte initieraing) i deklaration" ! #: cp/decl.c:8595 msgid "invalid catch parameter" msgstr "" ! #: cp/decl.c:8822 msgid "cannot declare `::main' to be a template" ! msgstr "kan inte deklarera \"::main\" som en mall" ! #: cp/decl.c:8824 msgid "cannot declare `::main' to be inline" msgstr "" ! #: cp/decl.c:8826 msgid "cannot declare `::main' to be static" ! msgstr "kan inte deklarera \"::main\" som static" ! #: cp/decl.c:8829 msgid "`main' must return `int'" ! msgstr "\"main\" måste returnera \"int\"" ! #: cp/decl.c:9380 msgid "overflow in array dimension" msgstr "" ! #: cp/decl.c:9666 msgid "destructors must be member functions" ! msgstr "destruerare måste vara medlemsfunktioner" ! #: cp/decl.c:9995 msgid "`bool' is now a keyword" msgstr "\"bool\" är numera ett nyckelord" ! #: cp/decl.c:10026 msgid "ISO C++ does not support `long long'" msgstr "ISO C++ stödjer inte \"long long\"" ! #: cp/decl.c:10148 #, c-format msgid "short, signed or unsigned invalid for `%s'" ! msgstr "short, signed eller unsigned är ogiltigt för \"%s\"" ! #: cp/decl.c:10153 #, c-format msgid "long and short specified together for `%s'" ! msgstr "både long och short angivet för \"%s\"" ! #: cp/decl.c:10164 #, c-format msgid "signed and unsigned given together for `%s'" ! msgstr "både signed och unsigned angivet för \"%s\"" ! #: cp/decl.c:10311 msgid "storage class specifiers invalid in parameter declarations" msgstr "" ! #: cp/decl.c:10315 msgid "typedef declaration invalid in parameter declaration" msgstr "" ! #: cp/decl.c:10326 msgid "virtual outside class declaration" msgstr "" ! #: cp/decl.c:10380 #, c-format msgid "storage class specified for %s `%s'" msgstr "" ! #: cp/decl.c:10418 msgid "storage class specifiers invalid in friend function declarations" msgstr "" ! #: cp/decl.c:10600 msgid "destructor cannot be static member function" ! msgstr "destruerare kan inte vara en statisk medlemsfunktion" ! #: cp/decl.c:10624 msgid "constructor cannot be static member function" ! msgstr "konstruerare kan inte vara en statisk medlemsfunktion\"" ! #: cp/decl.c:10627 msgid "constructors cannot be declared virtual" msgstr "" ! #: cp/decl.c:10642 msgid "return value type specifier for constructor ignored" msgstr "" ! #: cp/decl.c:10661 #, c-format msgid "can't initialize friend function `%s'" msgstr "" #. Cannot be both friend and virtual. ! #: cp/decl.c:10665 msgid "virtual functions cannot be friends" msgstr "" ! #: cp/decl.c:10670 msgid "friend declaration not in class definition" msgstr "" ! #: cp/decl.c:10726 #, c-format msgid "cannot declare %s to references" msgstr "" ! #: cp/decl.c:10752 msgid "invalid type: `void &'" ! msgstr "ogiltig typ: \"void &\"" ! #: cp/decl.c:10803 msgid "discarding `const' applied to a reference" msgstr "" ! #: cp/decl.c:10805 msgid "discarding `volatile' applied to a reference" msgstr "" #. [dcl.fct.spec] The explicit specifier shall only be used in #. declarations of constructors within a class definition. ! #: cp/decl.c:11012 msgid "only declarations of constructors can be `explicit'" msgstr "" ! #: cp/decl.c:11020 #, c-format msgid "non-member `%s' cannot be declared `mutable'" msgstr "" ! #: cp/decl.c:11025 #, c-format msgid "non-object member `%s' cannot be declared `mutable'" msgstr "" ! #: cp/decl.c:11031 #, c-format msgid "function `%s' cannot be declared `mutable'" ! msgstr "funktion \"%s\" kan inte deklareras som \"mutable\"" ! #: cp/decl.c:11036 #, c-format msgid "static `%s' cannot be declared `mutable'" msgstr "" ! #: cp/decl.c:11041 #, c-format msgid "const `%s' cannot be declared `mutable'" ! msgstr "const \"%s\" kan inte deklareras \"mutable\"" ! #: cp/decl.c:11146 msgid "typedef declaration includes an initializer" msgstr "" ! #: cp/decl.c:11258 msgid "unnamed variable or field declared void" msgstr "" ! #: cp/decl.c:11267 msgid "variable or field declared void" msgstr "" ! #: cp/decl.c:11277 msgid "cannot use `::' in parameter declaration" msgstr "" ! #: cp/decl.c:11462 #, c-format msgid "`%s' is neither function nor member function; cannot be declared friend" msgstr "" ! #: cp/decl.c:11479 msgid "member functions are implicitly friends of their class" msgstr "" ! #: cp/decl.c:11588 #, c-format msgid "storage class `auto' invalid for function `%s'" msgstr "" ! #: cp/decl.c:11590 #, c-format msgid "storage class `register' invalid for function `%s'" ! msgstr "lagringsklass \"register\" ogiltig för funktion \"%s\"" ! #: cp/decl.c:11601 #, c-format msgid "" "storage class `static' invalid for function `%s' declared out of global scope" msgstr "" ! #: cp/decl.c:11603 #, c-format msgid "" "storage class `inline' invalid for function `%s' declared out of global scope" msgstr "" ! #: cp/decl.c:11610 #, c-format msgid "virtual non-class function `%s'" msgstr "" #. FIXME need arm citation ! #: cp/decl.c:11645 msgid "cannot declare static function inside another function" ! msgstr "kan inte deklarera en statisk funktion i en annan funktion" ! #: cp/decl.c:11922 msgid "" "invalid integer constant in parameter list, did you forget to give parameter " "name?" msgstr "" ! #: cp/decl.c:12299 #, c-format msgid "conversion to %s%s will never use a type conversion operator" msgstr "" ! #: cp/decl.c:13393 msgid "return type for `main' changed to `int'" ! msgstr "returtypen för \"main\" ändrad till \"int\"" ! #: cp/decl2.c:554 #, c-format msgid "-f%s is no longer supported" ! msgstr "-f%s stödjs inte längre" ! #: cp/decl2.c:560 msgid "" "-fhandle-exceptions has been renamed to -fexceptions (and is now on by " "default)" msgstr "" ! #: cp/decl2.c:586 ! msgid "-fname-mangling-version is no longer supported" ! msgstr "-fname-mangling-version stöds inte längre" ! #: cp/decl2.c:649 msgid "-Wno-strict-prototypes is not supported in C++" ! msgstr "-Wno-strict-prototypes stödjs inte för C++" ! #: cp/decl2.c:988 msgid "name missing for member function" ! msgstr "namn saknas på medlemsfunktion" ! #: cp/decl2.c:1049 msgid "`__alignof__' applied to a bit-field" msgstr "" #. Something has gone very wrong. Assume we are mistakenly reducing #. an expression instead of a declaration. ! #: cp/decl2.c:1091 msgid "parser may be lost: is there a '{' missing somewhere?" msgstr "" ! #: cp/decl2.c:1122 cp/decl2.c:1136 msgid "ambiguous conversion for array subscript" ! msgstr "tvetydig konveretering av fältindex" ! #: cp/decl2.c:1186 msgid "anachronistic use of array size in vector delete" msgstr "" ! #: cp/decl2.c:1196 msgid "" "cannot delete a function. Only pointer-to-objects are valid arguments to " "`delete'" msgstr "" ! #: cp/decl2.c:1493 msgid "initializer invalid for static member with constructor" msgstr "" ! #: cp/decl2.c:1496 msgid "(an out of class initialization is required)" msgstr "" ! #: cp/decl2.c:1669 msgid "field initializer is not constant" ! msgstr "fältinitierare är ej konstant" ! #: cp/decl2.c:2008 msgid "anonymous struct not inside named type" msgstr "" ! #: cp/decl2.c:2104 msgid "namespace-scope anonymous aggregates must be static" msgstr "" ! #: cp/decl2.c:2114 msgid "anonymous aggregate with no members" msgstr "" #. Overflow occurred. That means there are at least 4 billion #. initialization functions. ! #: cp/decl2.c:2986 msgid "too many initialization functions required" msgstr "" ! #: cp/decl2.c:3796 msgid "use of old-style cast" ! msgstr "användning av gammaldags typkonvertering" ! #: cp/error.c:46 #, c-format ! msgid "`%s' not supported by %s" ! msgstr "\"%s\" stöds inte av %s" ! #: cp/error.c:631 #, c-format ! msgid "" ! msgstr "" ! #: cp/error.c:892 #, c-format ! msgid "(static %s for %s)" ! msgstr "(static %s för %s)" ! #: cp/error.c:2529 #, c-format ! msgid "In %s `%s':" msgstr "" ! #: cp/error.c:2584 #, c-format ! msgid "%s: In instantiation of `%s':\n" ! msgstr "%s: Vid instansiering av \"%s\":\n" ! ! #: cp/error.c:2608 ! #, c-format ! msgid "%s:%d: instantiated from `%s'\n" msgstr "" ! #: cp/error.c:2613 #, c-format ! msgid "%s:%d: instantiated from here\n" msgstr "" ! #: cp/except.c:258 ! msgid "call to Java `catch' or `throw' with `jthrowable' undefined" msgstr "" ! #: cp/except.c:329 ! msgid "mixing C++ and Java catches in a single translation unit" msgstr "" ! #: cp/except.c:665 msgid " in thrown expression" msgstr "" ! #: cp/friend.c:423 msgid "" "(if this is not what you intended, make sure the function template has " ! "already been declared and add <> after the function name here) -Wno-non-" ! "template-friend disables this warning." msgstr "" ! #: cp/g++spec.c:197 java/jvspec.c:358 #, c-format msgid "argument to `%s' missing\n" ! msgstr "argument till \"%s\" saknas\n" ! #: cp/init.c:313 msgid "initializer list treated as compound expression" msgstr "" ! #: cp/init.c:428 msgid " will be re-ordered to match declaration order" msgstr "" ! #: cp/init.c:662 msgid " will be re-ordered to match inheritance order" msgstr "" ! #: cp/init.c:1105 msgid "base class initializer specified, but no base class to initialize" msgstr "" ! #: cp/init.c:1111 msgid "initializer for unnamed base class ambiguous" msgstr "" ! #: cp/init.c:1136 msgid "no base class to initialize" msgstr "" ! #: cp/init.c:1860 msgid "object missing in use of pointer-to-member construct" msgstr "" ! #: cp/init.c:1902 cp/typeck.c:3187 cp/typeck.c:3295 msgid "at this point in file" msgstr "" ! #: cp/init.c:2076 msgid "new of array type fails to specify size" msgstr "" ! #: cp/init.c:2087 msgid "size in array new must have integral type" msgstr "" ! #: cp/init.c:2093 msgid "zero size array reserves no space" msgstr "" ! #: cp/init.c:2158 msgid "new cannot be applied to a reference type" msgstr "" ! #: cp/init.c:2164 msgid "new cannot be applied to a function type" msgstr "" ! #: cp/init.c:2211 msgid "call to Java constructor, while `jclass' undefined" msgstr "" ! #: cp/init.c:2227 ! msgid "Can't find class$" ! msgstr "Kan inte hitta class$" ! ! #: cp/init.c:2340 msgid "invalid type `void' for new" ! msgstr "ogiltig typ \"void\" för new" ! #: cp/init.c:2394 #, c-format ! msgid "call to Java constructor with `%s' undefined" msgstr "" ! #: cp/init.c:2522 cp/typeck2.c:382 cp/typeck2.c:1211 msgid "initializer list being treated as compound expression" msgstr "" ! #: cp/init.c:2528 ! msgid "ISO C++ forbids aggregate initializer to new" msgstr "" ! #: cp/init.c:2967 msgid "initializer ends prematurely" msgstr "" ! #: cp/init.c:3037 msgid "cannot initialize multi-dimensional array with initializer" msgstr "" ! #: cp/init.c:3215 msgid "unknown array size in delete" msgstr "" ! #: cp/init.c:3440 msgid "type to vector delete is neither pointer or array type" msgstr "" ! #: cp/lang-options.h:29 ! msgid "Do not obey access control semantics" msgstr "" ! #: cp/lang-options.h:31 ! msgid "Change when template instances are emitted" msgstr "" ! #: cp/lang-options.h:36 ! msgid "Check the return value of new" msgstr "" ! #: cp/lang-options.h:39 ! msgid "Reduce size of object files" ! msgstr "" ! ! #: cp/lang-options.h:43 ! msgid "Make string literals `char[]' instead of `const char[]'" ! msgstr "" ! ! #: cp/lang-options.h:46 ! msgid "Dump the entire translation unit to a file" ! msgstr "" ! ! #: cp/lang-options.h:48 ! msgid "Do not inline member functions by default" ! msgstr "" ! ! #: cp/lang-options.h:51 ! msgid "Do not generate run time type descriptor information" ! msgstr "" ! ! #: cp/lang-options.h:56 ! msgid "Do not generate code to check exception specifications" ! msgstr "" ! ! #: cp/lang-options.h:61 ! msgid "Scope of for-init-statement vars extends outside" ! msgstr "" ! ! #: cp/lang-options.h:64 ! msgid "Do not recognise GNU defined keywords" ! msgstr "" ! ! #: cp/lang-options.h:69 ! msgid "Do not treat the namespace `std' as a normal namespace" ! msgstr "" ! ! #: cp/lang-options.h:71 ! msgid "Enable support for huge objects" ! msgstr "" ! ! #: cp/lang-options.h:75 ! msgid "Export functions even if they can be inlined" ! msgstr "" ! ! #: cp/lang-options.h:78 ! msgid "Only emit explicit template instatiations" ! msgstr "" ! ! #: cp/lang-options.h:81 ! msgid "Only emit explicit instatiations of inline templates" ! msgstr "" ! ! #: cp/lang-options.h:87 ! msgid "Don't pedwarn about uses of Microsoft extensions" ! msgstr "" ! ! #: cp/lang-options.h:90 ! msgid "Recognise and/bitand/bitor/compl/not/or/xor" ! msgstr "Känn igen and/bitand/bitor/compl/not/or/xor" ! ! #: cp/lang-options.h:94 ! msgid "Disable optional diagnostics" ! msgstr "" ! ! #: cp/lang-options.h:96 ! msgid "Downgrade conformance errors to warnings" ! msgstr "" ! ! #: cp/lang-options.h:99 ! msgid "Enable automatic template instantiation" ! msgstr "Slå på automatisk mallinstansiering" ! ! #: cp/lang-options.h:104 ! msgid "Display statistics accumulated during compilation" ! msgstr "" ! ! #: cp/lang-options.h:107 ! msgid "Specify maximum template instantiation depth" ! msgstr "Ange maximalt instansieringsdjup för mallar" ! ! #: cp/lang-options.h:109 ! msgid "Use __cxa_atexit to register destructors." ! msgstr "" ! ! #: cp/lang-options.h:112 ! msgid "Discard unused virtual functions" ! msgstr "" ! ! #: cp/lang-options.h:115 ! msgid "Implement vtables using thunks" ! msgstr "" ! ! #: cp/lang-options.h:118 ! msgid "Emit common-like symbols as weak symbols" ! msgstr "" ! ! #: cp/lang-options.h:121 ! msgid "Emit cross referencing information" ! msgstr "" ! ! #: cp/lang-options.h:125 ! msgid "Warn about inconsistent return types" ! msgstr "" ! ! #: cp/lang-options.h:128 ! msgid "Warn about overloaded virtual function names" ! msgstr "" ! ! #: cp/lang-options.h:132 ! msgid "Don't warn when all ctors/dtors are private" ! msgstr "" ! ! #: cp/lang-options.h:134 ! msgid "Warn about non virtual destructors" ! msgstr "" ! ! #: cp/lang-options.h:137 ! msgid "Warn when a function is declared extern, then inline" ! msgstr "" ! ! #: cp/lang-options.h:140 ! msgid "Warn when the compiler reorders code" ! msgstr "" ! ! #: cp/lang-options.h:143 ! msgid "Warn when synthesis behaviour differs from Cfront" ! msgstr "" ! ! #: cp/lang-options.h:147 ! msgid "Don't warn when type converting pointers to member functions" ! msgstr "" ! ! #: cp/lang-options.h:149 ! msgid "Warn about violations of Effective C++ style rules" ! msgstr "" ! ! #: cp/lang-options.h:152 ! msgid "Warn when overload promotes from unsigned to signed" ! msgstr "" ! ! #: cp/lang-options.h:155 ! msgid "Warn if a C style cast is used in a program" ! msgstr "" ! ! #: cp/lang-options.h:159 ! msgid "" ! "Don't warn when non-templatized friend functions are declared within a " ! "template" ! msgstr "" ! ! #: cp/lang-options.h:162 ! msgid "Don't announce deprecation of compiler features" ! msgstr "" ! ! #: cp/lex.c:148 ! msgid "type name expected before `*'" ! msgstr "typnamn förväntat före \"*\"" ! ! #: cp/lex.c:170 ! msgid "cannot declare references to references" ! msgstr "kan inte deklarera referenser till referenser" ! ! #: cp/lex.c:175 ! msgid "cannot declare pointers to references" ! msgstr "kan inte deklarera pekare till referenser" ! ! #: cp/lex.c:179 msgid "type name expected before `&'" msgstr "" ! #: cp/lex.c:1026 #, c-format msgid "semicolon missing after %s declaration" msgstr "" ! #: cp/lex.c:1077 #, c-format msgid "junk at end of #pragma %s" msgstr "" ! #: cp/lex.c:1084 #, c-format msgid "invalid #pragma %s" + msgstr "ogiltigt #pragma %s" + + #: cp/lex.c:1093 + msgid "#pragma vtable no longer supported" msgstr "" ! #: cp/lex.c:1170 #, c-format msgid "#pragma implementation for %s appears after file is included" msgstr "" ! #: cp/lex.c:1195 ! msgid "junk at end of #pragma GCC java_exceptions" ! msgstr "" ! ! #: cp/lex.c:1296 msgid "" "(Each undeclared identifier is reported only once for each function it " "appears in.)" msgstr "" ! #: cp/lex.c:1319 #, c-format msgid "name lookup of `%s' changed" msgstr "" ! #: cp/lex.c:1333 cp/lex.c:1340 #, c-format msgid "name lookup of `%s' changed for new ISO `for' scoping" msgstr "" ! #: cp/mangle.c:1877 ! msgid "real-valued template parameters when cross-compiling" msgstr "" ! #: cp/method.c:170 msgid "methods cannot be converted to function pointers" ! msgstr "metoder kan inte konverteras till funktionspekare" ! #: cp/method.c:175 #, c-format msgid "ambiguous request for method pointer `%s'" msgstr "" ! #: cp/parse.y:674 msgid "invalid default template argument" msgstr "" ! #: cp/parse.y:891 msgid "no base or member initializers given following ':'" msgstr "" ! #: cp/parse.y:904 msgid "base initializers not allowed for non-member functions" msgstr "" ! #: cp/parse.y:906 msgid "only constructors take base initializers" msgstr "" ! #: cp/parse.y:939 cp/parse.y:945 msgid "anachronistic old style base class initializer" msgstr "" #. Handle `Class>' without space in the `>>' ! #: cp/parse.y:1067 msgid "`>>' should be `> >' in template class name" msgstr "" ! #: cp/parse.y:1124 cp/parse.y:1133 #, c-format msgid "ISO C++ forbids an empty condition for `%s'" msgstr "" ! #: cp/parse.y:1310 msgid "ISO C++ forbids initialization of new expression with `='" ! msgstr "ISO C++ förbjuder initiering av new-uttryck med \"=\"" ! #: cp/parse.y:1341 ! msgid "ISO C++ forbids compound literals" msgstr "" ! #: cp/parse.y:1582 msgid "ISO C++ forbids braced-groups within expressions" msgstr "" ! #: cp/parse.y:1988 cp/parse.y:2003 msgid "sigof type specifier" msgstr "" ! #: cp/parse.y:1993 msgid "`sigof' applied to non-aggregate expression" msgstr "" ! #: cp/parse.y:2008 msgid "`sigof' applied to non-aggregate type" msgstr "" ! #: cp/parse.y:2348 #, c-format msgid "storage class specifier `%s' not allowed after struct or class" msgstr "" ! #: cp/parse.y:2350 #, c-format msgid "type specifier `%s' not allowed after struct or class" msgstr "" ! #: cp/parse.y:2352 #, c-format msgid "type qualifier `%s' not allowed after struct or class" msgstr "" ! #: cp/parse.y:2354 msgid "no body nor ';' separates two class, struct or union declarations" msgstr "" ! #: cp/parse.y:2519 msgid "multiple access specifiers" msgstr "" ! #: cp/parse.y:2537 msgid "multiple `virtual' specifiers" msgstr "" ! #: cp/parse.y:2574 msgid "missing ';' before right brace" ! msgstr "saknar ';' före slutklammer" ! #: cp/parse.y:2797 msgid "ISO C++ forbids array dimensions with parenthesized type in new" msgstr "" ! #: cp/parse.y:3306 msgid "ISO C++ forbids label declarations" msgstr "" ! #: cp/parse.y:3468 msgid "ISO C++ forbids computed gotos" ! msgstr "ISO C++ förbjuder beräknade goto" ! #: cp/parse.y:3476 msgid "label must be followed by statement" msgstr "" ! #: cp/parse.y:3575 msgid "ISO C++ forbids compound statements inside for initializations" msgstr "" #. This helps us recover from really nasty #. parse errors, for example, a missing right #. parenthesis. ! #: cp/parse.y:3658 cp/parse.y:3668 msgid "possibly missing ')'" ! msgstr "saknas troligen en ')'" ! #: cp/parse.y:3765 cp/parse.y:3770 msgid "type specifier omitted for parameter" msgstr "" ! #: cp/pt.c:6303 msgid "creating array with size zero" ! msgstr "skapar ett fält med storlek noll" ! #: cp/pt.c:6799 #, c-format msgid "use of `%s' in template" ! msgstr "användning ab `%s' i mall" ! #: cp/pt.c:8004 msgid "incomplete type unification" ! msgstr "inkomplett typunifiering" ! #: cp/pt.c:8934 #, c-format msgid "use of `%s' in template type unification" msgstr "" ! #: cp/repo.c:272 msgid "-frepo must be used with -c" ! msgstr "-frepo måste användas tillsammans med -c" ! #: cp/repo.c:366 #, c-format msgid "mysterious repository information in %s" msgstr "" ! #: cp/repo.c:381 #, c-format msgid "can't create repository information file `%s'" msgstr "" ! #: cp/rtti.c:219 msgid "taking dynamic typeid of object with -fno-rtti" msgstr "" ! #: cp/rtti.c:250 msgid "cannot use typeid with -fno-rtti" ! msgstr "kan inte använda typeid med -fno-rtti" ! #: cp/rtti.c:256 cp/rtti.c:405 msgid "must #include before using typeid" ! msgstr "måste ha#include för användande av typeid" ! #: cp/search.c:1963 msgid "adjusting pointers for covariant returns" msgstr "" #. This shouldn't happen, I don't want errors! ! #: cp/search.c:2471 msgid "recoverable compiler error, fixups for virtual function" msgstr "" ! #: cp/semantics.c:1012 ! msgid "ISO C++ does not permit named return values" msgstr "" ! #: cp/semantics.c:1029 ! msgid "can't redefine default return value for constructors" msgstr "" ! #: cp/semantics.c:1098 ! msgid " will be re-ordered to precede member initializations" msgstr "" ! #: cp/semantics.c:1365 ! msgid "`this' is unavailable for static member functions" msgstr "" ! #: cp/semantics.c:1371 ! msgid "invalid use of `this' in non-member function" ! msgstr "" ! ! #: cp/semantics.c:1373 ! msgid "invalid use of `this' at top level" ! msgstr "" ! ! #: cp/semantics.c:1665 ! msgid "template type parameters must use the keyword `class' or `typename'" ! msgstr "" ! ! #: cp/spew.c:249 ! #, c-format ! msgid "identifier name `%s' conflicts with GNU C++ internal naming strategy" ! msgstr "" ! ! #: cp/spew.c:357 ! msgid "parse error" ! msgstr "parsningsfel" ! ! #: cp/spew.c:1023 cp/spew.c:1295 msgid "parse error at end of saved function text" msgstr "" ! #: cp/spew.c:1065 msgid "parse error in method specification" msgstr "" ! #: cp/spew.c:1107 msgid "function body for constructor missing" ! msgstr "funktionskroppen för konstrueraren saknas" ! #: cp/spew.c:1500 ! #, c-format ! msgid "%s before `%s'" ! msgstr "%s före \"%s\"" ! ! #: cp/spew.c:1502 ! #, c-format ! msgid "%s before `%c'" ! msgstr "%s före \"%c\"" ! ! #: cp/spew.c:1504 ! #, c-format ! msgid "%s before `\\%o'" ! msgstr "%s före \"\\%o\"" ! ! #: cp/spew.c:1507 ! #, c-format ! msgid "%s before `%s' token" ! msgstr "%s före symbolen \"%s\"" ! ! #: cp/tree.c:216 #, c-format msgid "non-lvalue in %s" ! msgstr "icke-lvalue i %s" ! #: cp/tree.c:2231 ! msgid "" ! "`java_interface' attribute can only be applied to Java class definitions" msgstr "" ! #: cp/tree.c:2245 msgid "`com_interface' attribute can only be applied to class definitions" msgstr "" ! #: cp/tree.c:2250 ! msgid "" ! "`com_interface' is obsolete; g++ vtables are now COM-compatible by default" ! msgstr "" ! ! #: cp/tree.c:2264 msgid "requested init_priority is not an integer constant" msgstr "" ! #: cp/tree.c:2284 msgid "" "can only use init_priority attribute on file-scope definitions of objects of " "class type" msgstr "" ! #: cp/tree.c:2290 msgid "requested init_priority is out of range" msgstr "" ! #: cp/tree.c:2299 msgid "requested init_priority is reserved for internal use" msgstr "" ! #: cp/tree.c:2309 ! msgid "init_priority attribute is not supported on this platform" ! msgstr "" ! ! #: cp/typeck.c:484 #, c-format msgid "" "ISO C++ forbids %s between pointer of type `void *' and pointer-to-function" msgstr "" ! #: cp/typeck.c:1559 msgid "ISO C++ forbids applying `sizeof' to a function type" ! msgstr "ISO C++ förbjuder användning av \"sizeof\" på funktioner" ! #: cp/typeck.c:1565 msgid "ISO C++ forbids applying `sizeof' to a member function" ! msgstr "ISO C++ förbjuder användning av \"sizeof\" på medlemsfunktion" ! #: cp/typeck.c:1571 msgid "" "ISO C++ forbids applying `sizeof' to type `void' which is an incomplete type" msgstr "" + "ISO C++ förbjuder användning av \"sizeof\" på typ void som är en inkomplett " + "typ" ! #: cp/typeck.c:1620 msgid "sizeof applied to a bit-field" msgstr "sizeof applicerat på ett bit-fält" ! #: cp/typeck.c:1623 msgid "ISO C++ forbids applying `sizeof' to an expression of function type" msgstr "" + "ISO C++ förbjuder användning av \"sizeof\" på ett uttryck av funktionstyp" ! #: cp/typeck.c:2236 msgid "invalid reference to NULL ptr, use ptr-to-member instead" msgstr "" ! #: cp/typeck.c:2399 #, c-format msgid "invalid use of `%s' on pointer to member" msgstr "" ! #: cp/typeck.c:2405 msgid "invalid type argument" ! msgstr "ogiltigt typargument" ! #: cp/typeck.c:2508 msgid "ISO C++ forbids subscripting non-lvalue array" msgstr "" ! #: cp/typeck.c:2519 msgid "subscripting array declared `register'" msgstr "" ! #: cp/typeck.c:2694 cp/typeck.c:2834 msgid "pointer to member function called, but not in class scope" msgstr "" ! #: cp/typeck.c:2832 msgid "" "invalid call to member function needing `this' in static member function " "scope" msgstr "" ! #: cp/typeck.c:3022 msgid "ISO C++ forbids calling `::main' from within program" ! msgstr "ISO C++ förbjuder anrop av \"::main\" inifrån programmet" ! #: cp/typeck.c:3226 msgid "parameter type of called function is incomplete" msgstr "" ! #: cp/typeck.c:3623 #, c-format msgid "%s rotate count is negative" msgstr "" ! #: cp/typeck.c:3626 #, c-format msgid "%s rotate count >= width of type" msgstr "" ! #: cp/typeck.c:3657 cp/typeck.c:3662 cp/typeck.c:3753 cp/typeck.c:3758 msgid "ISO C++ forbids comparison between pointer and integer" ! msgstr "ISO C++ förbjuder jämförelse mellan pekare och heltal" ! #: cp/typeck.c:3974 msgid "comparison between signed and unsigned integer expressions" msgstr "" ! #: cp/typeck.c:4113 msgid "ISO C++ forbids using pointer of type `void *' in pointer arithmetic" msgstr "" + "ISO C++ förbjuder användning av pekare av typ \"void *\" i pekararitmetik" ! #: cp/typeck.c:4119 msgid "ISO C++ forbids using a pointer-to-function in pointer arithmetic" ! msgstr "ISO C++ förbjuder användning av funktionspekarepekare i pekararitmetik" ! #: cp/typeck.c:4125 msgid "" "ISO C++ forbids using a pointer to member function in pointer arithmetic" msgstr "" + "ISO C++ förbjuder användning av pekare till medlemsfunktion i pekararitmetik" ! #: cp/typeck.c:4131 msgid "ISO C++ forbids using pointer to a member in pointer arithmetic" ! msgstr "ISO C++ förbjuder användning av pekare till medlem i pekararitmetik" ! #: cp/typeck.c:4202 msgid "ISO C++ forbids using pointer of type `void *' in subtraction" msgstr "" ! #: cp/typeck.c:4204 msgid "ISO C++ forbids using pointer to a function in subtraction" msgstr "" ! #: cp/typeck.c:4206 msgid "ISO C++ forbids using pointer to a method in subtraction" msgstr "" ! #: cp/typeck.c:4208 msgid "ISO C++ forbids using pointer to a member in subtraction" msgstr "" ! #: cp/typeck.c:4220 msgid "invalid use of a pointer to an incomplete type in pointer arithmetic" msgstr "" ! #: cp/typeck.c:4325 msgid "taking address of temporary" msgstr "tar adress till något temporärt" ! #: cp/typeck.c:4525 #, c-format msgid "ISO C++ forbids %sing an enum" msgstr "" ! #: cp/typeck.c:4569 msgid "cast to non-reference type used as lvalue" msgstr "" #. ARM $3.4 ! #: cp/typeck.c:4636 msgid "ISO C++ forbids taking address of function `::main'" ! msgstr "ISO C++ förbjuder att man tar adressen till funktionen \"::main\"" ! #: cp/typeck.c:4729 msgid "ISO C++ forbids taking the address of a cast to a non-lvalue expression" msgstr "" ! #: cp/typeck.c:4745 msgid "unary `&'" ! msgstr "unärt \"&\"" ! #: cp/typeck.c:4937 ! msgid "cannot take the address of `this', which is an rvalue expression" ! msgstr "Kan inte ta adressen till \"this\", som är ett rvalue-uttryck" ! #: cp/typeck.c:5247 msgid "" "ISO C++ forbids casting between pointer-to-function and pointer-to-object" msgstr "" ! #: cp/typeck.c:5697 msgid "ISO C++ forbids cast to non-reference type used as lvalue" msgstr "" ! #: cp/typeck.c:5803 msgid "ISO C++ forbids assignment of arrays" msgstr "ISO C++ förbjuder tilldelning av fält" ! #: cp/typeck.c:5818 msgid "return value from function receives multiple initializations" msgstr "" ! #: cp/typeck.c:5961 msgid " in pointer to member function conversion" msgstr "" ! #: cp/typeck.c:5969 msgid " in pointer to member conversion" msgstr "" ! #: cp/typeck.c:6556 msgid "returning reference to temporary" ! msgstr "returnerar referens till en temporär" ! #: cp/typeck.c:6563 msgid "reference to non-lvalue returned" msgstr "" ! #: cp/typeck.c:6609 msgid "returning a value from a destructor" ! msgstr "returnerar ett värde från en destruktor" #. If a return statement appears in a handler of the #. function-try-block of a constructor, the program is ill-formed. ! #: cp/typeck.c:6617 msgid "cannot return from a handler of a function-try-block of a constructor" msgstr "" #. You can't return a value from a constructor. ! #: cp/typeck.c:6620 msgid "returning a value from a constructor" msgstr "" ! #: cp/typeck.c:6637 msgid "" "return-statement with no value, in function declared with a non-void return " "type" msgstr "" ! #: cp/typeck.c:6653 msgid "" "return-statement with a value, in function declared with a void return type" msgstr "" ! #: cp/typeck2.c:172 ! msgid " because the following virtual functions are abstract:" msgstr "" ! #: cp/typeck2.c:269 #, c-format msgid "Internal error #%d." msgstr "Internt fel #%d." ! #: cp/typeck2.c:340 msgid "due to the presence of a constructor" msgstr "" ! #: cp/typeck2.c:364 msgid "comma expression used to initialize return value" msgstr "" ! #: cp/typeck2.c:373 msgid "cannot initialize arrays using this syntax" msgstr "" ! #: cp/typeck2.c:429 msgid "ANSI C++ forbids non-constant aggregate initializer expressions" msgstr "" ! #: cp/typeck2.c:509 msgid "initializing array with parameter list" msgstr "" ! #: cp/typeck2.c:565 msgid "initializer for scalar variable requires one element" msgstr "" ! #: cp/typeck2.c:663 msgid "aggregate has a partly bracketed initializer" msgstr "" ! #: cp/typeck2.c:693 cp/typeck2.c:794 msgid "non-trivial labeled initializers" msgstr "" ! #: cp/typeck2.c:710 msgid "non-empty initializer for array of empty elements" msgstr "" ! #: cp/typeck2.c:760 msgid "initializer list for object of class with virtual base classes" msgstr "" ! #: cp/typeck2.c:766 msgid "initializer list for object of class with base classes" msgstr "" ! #: cp/typeck2.c:772 msgid "initializer list for object using virtual functions" msgstr "" ! #: cp/typeck2.c:889 msgid "index value instead of field name in union initializer" msgstr "" ! #: cp/typeck2.c:945 msgid "excess elements in aggregate initializer" msgstr "" ! #: cp/typeck2.c:1043 msgid "circular pointer delegation detected" msgstr "" ! #: cp/typeck2.c:1070 msgid "result of `operator->()' yields non-pointer result" msgstr "" ! #: cp/typeck2.c:1072 msgid "base operand of `->' is not a pointer" ! msgstr "basoperanden till \"->\" är inte en pekare" ! #: cp/typeck2.c:1262 #, c-format msgid "ISO C++ forbids defining types within %s" msgstr "" ! #: cp/xref.c:826 #, c-format msgid "Can't create cross-reference file `%s'" msgstr "" ! #. The current line in each outer source file is now the ! #. same as the line of the #include. ! #: cpperror.c:58 #, c-format msgid "In file included from %s:%u" ! msgstr "I fil inkluderad från %s:%u" #. Translators note: this message is used in conjunction #. with "In file included from %s:%ld" and some other *************** msgstr "" *** 7450,7673 **** #. with all the "from"s lined up. #. The trailing comma is at the beginning of this message, #. and the trailing colon is not translated. ! #: cpperror.c:79 #, c-format msgid "" ",\n" " from %s:%u" msgstr "" ! #: cpperror.c:165 msgid "internal error: " msgstr "internt fel: " ! #: cpperror.c:184 msgid "warning: " msgstr "varning: " ! #: cpperror.c:295 cpperror.c:457 gcc.c:5653 tradcpp.c:4206 #, c-format msgid "%s: %s" ! msgstr "" ! #: cppexp.c:207 msgid "traditional C rejects the `U' suffix" msgstr "" ! #: cppexp.c:213 msgid "integer constant contains digits beyond the radix" msgstr "" ! #: cppexp.c:216 msgid "integer constant out of range" ! msgstr "" ! #: cppexp.c:222 msgid "integer constant is so large that it is unsigned" msgstr "" ! #: cppexp.c:231 #, c-format msgid "invalid suffix '%.*s' on integer constant" msgstr "" ! #: cppexp.c:418 ! #, c-format ! msgid "\"%s\" is not defined" ! msgstr "" ! ! #: cppexp.c:493 ! msgid "octal escape sequence out of range" ! msgstr "" ! ! #: cppexp.c:526 ! msgid "hex escape sequence out of range" ! msgstr "" ! #: cppexp.c:541 ! msgid "integer overflow in preprocessor expression" msgstr "" ! #: cppexp.c:811 #, c-format ! msgid "impossible operator type %s" ! msgstr "" ! ! #: cppexp.c:920 ! msgid "comma operator in operand of #if" msgstr "" ! #: cppfiles.c:195 ! #, c-format ! msgid "included file \"%s\" exists but is not readable" msgstr "" ! #: cppfiles.c:218 #, c-format ! msgid "node for '%s' exists, open failed, error '%s', value %lx\n" ! msgstr "" ! #: cppfiles.c:366 #, c-format ! msgid "cpp_make_system_header: bad flag %d\n" ! msgstr "" ! #: cppfiles.c:368 ! msgid "cpp_make_system_header called on non-file buffer" msgstr "" ! #: cppfiles.c:410 ! msgid "Multiple include guards may be useful for:\n" msgstr "" ! #: cppfiles.c:444 cppfiles.c:521 ! #, c-format ! msgid "No include path in which to find %s" msgstr "" ! #: cppfiles.c:649 #, c-format msgid "%s is too large" ! msgstr "" ! #: cppfiles.c:657 #, c-format ! msgid "%s is shorter than expected\n" ! msgstr "%s är kortare än förväntat\n" ! #: cppfiles.c:661 #, c-format msgid "%s is a block device" ! msgstr "" ! #: cppfiles.c:666 #, c-format ! msgid "%s is a directory" ! msgstr "%s är en katalog" ! #: cppinit.c:258 #, c-format msgid "ignoring nonexistent directory \"%s\"\n" ! msgstr "" ! #: cppinit.c:264 #, c-format msgid "%s: Not a directory" msgstr "%s: Inte en katalog" ! #: cppinit.c:305 #, c-format msgid "ignoring duplicate directory \"%s\"\n" msgstr "" ! #: cppinit.c:816 ! msgid "-MG must be specified with one of -M or -MM" ! msgstr "" ! #: cppinit.c:855 msgid "#include \"...\" search starts here:\n" ! msgstr "" ! #: cppinit.c:859 msgid "#include <...> search starts here:\n" ! msgstr "" ! #: cppinit.c:862 msgid "End of search list.\n" ! msgstr "" ! ! #: cppinit.c:943 ! msgid "buffers still stacked in cpp_finish" ! msgstr "" ! #: cppinit.c:969 tradcpp.c:945 tradcpp.c:954 tradcpp.c:959 msgid "I/O error on output" msgstr "" #. Irix6 "cc -n32" and OSF4 cc have problems with char foo[] = ("string"); #. I.e. a const string initializer with parens around it. That is #. what N_("string") resolves to, so we make no_* be macros instead. ! #: cppinit.c:1006 #, c-format msgid "Argument missing after %s" ! msgstr "" ! #: cppinit.c:1007 #, c-format msgid "Assertion missing after %s" msgstr "" ! #: cppinit.c:1008 #, c-format msgid "Directory name missing after %s" ! msgstr "" ! #: cppinit.c:1009 #, c-format msgid "File name missing after %s" msgstr "Filnamn saknas efter %s" ! #: cppinit.c:1010 #, c-format msgid "Macro name missing after %s" ! msgstr "" ! #: cppinit.c:1011 #, c-format msgid "Path name missing after %s" ! msgstr "" ! #: cppinit.c:1012 #, c-format msgid "Number missing after %s" ! msgstr "" ! #: cppinit.c:1186 #, c-format ! msgid "Too many arguments. Type %s --help for usage info" msgstr "" ! #: cppinit.c:1268 cppinit.c:1406 #, c-format ! msgid "GNU CPP version %s (cpplib)\n" ! msgstr "" ! #: cppinit.c:1398 tradcpp.c:565 msgid "Output filename specified twice" ! msgstr "" ! #: cppinit.c:1531 msgid "-I- specified twice" ! msgstr "" ! #: cppinit.c:1682 #, c-format msgid "Usage: %s [switches] input output\n" ! msgstr "" #. To keep the lines from getting too long for some compilers, limit #. to about 500 characters (6 lines) per chunk. ! #: cppinit.c:1685 msgid "" "Switches:\n" " -include Include the contents of before other " --- 11127,11359 ---- #. with all the "from"s lined up. #. The trailing comma is at the beginning of this message, #. and the trailing colon is not translated. ! #: cpperror.c:74 #, c-format msgid "" ",\n" " from %s:%u" msgstr "" + ",\n" + " från %s:%u" ! #: cpperror.c:191 msgid "internal error: " msgstr "internt fel: " ! #: cpperror.c:198 msgid "warning: " msgstr "varning: " ! #: cpperror.c:312 cpperror.c:483 cppfiles.c:661 gcc.c:6083 tradcpp.c:4722 #, c-format msgid "%s: %s" ! msgstr "%s: %s" ! #: cppexp.c:180 msgid "traditional C rejects the `U' suffix" msgstr "" ! #: cppexp.c:183 ! msgid "too many 'l' suffixes in integer constant" ! msgstr "för många \"l\"-suffix i heltalskonstant" ! ! #: cppexp.c:187 msgid "integer constant contains digits beyond the radix" msgstr "" ! #: cppexp.c:190 msgid "integer constant out of range" ! msgstr "heltalskonstant utanför sitt intervall" ! #: cppexp.c:196 msgid "integer constant is so large that it is unsigned" msgstr "" ! #: cppexp.c:205 #, c-format msgid "invalid suffix '%.*s' on integer constant" msgstr "" ! #: cppexp.c:239 ! msgid "missing ')' after \"defined\"" ! msgstr "saknar ')' efter \"defined\"" ! #: cppexp.c:246 ! msgid "operator \"defined\" requires an identifier" msgstr "" ! #: cppexp.c:254 #, c-format ! msgid "(\"%s\" is an alternative token for \"%s\" in C++)" msgstr "" ! #: cppexp.c:331 ! msgid "\"defined\" operator appears during macro expansion" msgstr "" ! #: cppexp.c:347 #, c-format ! msgid "ISO C++ does not permit \"%s\" in #if" ! msgstr "ISO C++ tillåter inte \"%s\" i #if" ! #: cppexp.c:362 #, c-format ! msgid "\"%s\" is not defined" ! msgstr "\"%s\" är inte definierad" ! #: cppexp.c:407 ! msgid "integer overflow in preprocessor expression" msgstr "" ! #: cppexp.c:677 ! #, c-format ! msgid "impossible operator '%s'" msgstr "" ! #: cppexp.c:787 ! msgid "comma operator in operand of #if" msgstr "" ! #: cppfiles.c:383 #, c-format msgid "%s is too large" ! msgstr "%s är för stor" ! #: cppfiles.c:412 #, c-format ! msgid "%s is shorter than expected" ! msgstr "%s är kortare än förväntat" ! #: cppfiles.c:421 #, c-format msgid "%s is a block device" ! msgstr "%s är en blockenhet" ! #: cppfiles.c:541 #, c-format ! msgid "No include path in which to find %s" ! msgstr "" ! #: cppfiles.c:609 ! msgid "Multiple include guards may be useful for:\n" ! msgstr "" ! ! #: cppfiles.c:999 ! msgid "absolute file name in remap_filename" ! msgstr "absolut filnamn i remap_filename" ! ! #: cppinit.c:223 #, c-format msgid "ignoring nonexistent directory \"%s\"\n" ! msgstr "ignorerar ej existerande katalog \"%s\"\n" ! #: cppinit.c:229 #, c-format msgid "%s: Not a directory" msgstr "%s: Inte en katalog" ! #: cppinit.c:275 #, c-format msgid "ignoring duplicate directory \"%s\"\n" msgstr "" ! #: cppinit.c:894 ! msgid "-include and -imacros cannot be used with -fpreprocessed" ! msgstr "-include och -imacros kan inte användas med -fpreprocessed" ! #: cppinit.c:930 msgid "#include \"...\" search starts here:\n" ! msgstr "#include \"...\" sökning startar här:\n" ! #: cppinit.c:934 msgid "#include <...> search starts here:\n" ! msgstr "#include <...> sökning startar här:\n" ! #: cppinit.c:937 msgid "End of search list.\n" ! msgstr "Slut på söklistan.\n" ! #: cppinit.c:1009 tradcpp.c:963 tradcpp.c:973 tradcpp.c:1064 msgid "I/O error on output" + msgstr "I/O-fel vid utmatning" + + #: cppinit.c:1023 + msgid "buffers still stacked in cpp_finish" msgstr "" #. Irix6 "cc -n32" and OSF4 cc have problems with char foo[] = ("string"); #. I.e. a const string initializer with parens around it. That is #. what N_("string") resolves to, so we make no_* be macros instead. ! #: cppinit.c:1055 #, c-format msgid "Argument missing after %s" ! msgstr "Argument saknas efter %s" ! #: cppinit.c:1056 #, c-format msgid "Assertion missing after %s" msgstr "" ! #: cppinit.c:1057 #, c-format msgid "Directory name missing after %s" ! msgstr "Katalognamn saknas efter %s" ! #: cppinit.c:1058 #, c-format msgid "File name missing after %s" msgstr "Filnamn saknas efter %s" ! #: cppinit.c:1059 #, c-format msgid "Macro name missing after %s" ! msgstr "Makronamn saknas efter %s" ! #: cppinit.c:1060 #, c-format msgid "Path name missing after %s" ! msgstr "Sökväg saknas efter %s" ! #: cppinit.c:1061 #, c-format msgid "Number missing after %s" ! msgstr "Nummer saknas efter %s" ! #: cppinit.c:1062 #, c-format ! msgid "Target missing after %s" msgstr "" ! #: cppinit.c:1247 #, c-format ! msgid "Too many filenames. Type %s --help for usage info" ! msgstr "För många filnamn. Skriv %s --help för användningsinformation" ! #: cppinit.c:1431 tradcpp.c:598 msgid "Output filename specified twice" ! msgstr "Utdatafilnamn angivet två gånger" ! #: cppinit.c:1551 msgid "-I- specified twice" ! msgstr "-I- angiven två gånger" ! #: cppinit.c:1699 ! #, c-format ! msgid "GNU CPP version %s (cpplib)" ! msgstr "GNU CPP version %s (cpplib)" ! ! #: cppinit.c:1740 tradcpp.c:787 ! msgid "you must additionally specify either -M or -MM" ! msgstr "du måste dessutom ange antingen -M eller -MM" ! ! #: cppinit.c:1800 #, c-format msgid "Usage: %s [switches] input output\n" ! msgstr "Användning: %s [flaggor] infil utfil\n" #. To keep the lines from getting too long for some compilers, limit #. to about 500 characters (6 lines) per chunk. ! #: cppinit.c:1803 msgid "" "Switches:\n" " -include Include the contents of before other " *************** msgid "" *** 7679,7686 **** " -isystem Add to the start of the system include " "path\n" msgstr "" ! #: cppinit.c:1694 msgid "" " -idirafter Add to the end of the system include path\n" " -I Add to the end of the main include path\n" --- 11365,11382 ---- " -isystem Add to the start of the system include " "path\n" msgstr "" + "Flaggor:\n" + " -include Inkludera innehållet i före andra filer\n" + " -imacros Använd makrodefinitioner i \n" + " -iprefix Sätt som prefix för följande två " + "flaggor\n" + " -iwithprefix Sätt i slutet på systemets include-" + "sökväg\n" + " -iwithprefixbefore Sätt i slutet på huvud-include-sökvägen\n" + " -isystem Sätt först på systemets include-" + "sökväg\n" ! #: cppinit.c:1812 msgid "" " -idirafter Add to the end of the system include path\n" " -I Add to the end of the main include path\n" *************** msgid "" *** 7689,7700 **** " -nostdinc Do not search system include directories\n" " (dirs specified with -isystem will still be " "used)\n" ! " -nostdinc++ Do not search system include directories for " ! "C++\n" " -o Put output into \n" msgstr "" ! #: cppinit.c:1703 msgid "" " -pedantic Issue all warnings demanded by strict ISO C\n" " -pedantic-errors Issue -pedantic warnings as errors instead\n" --- 11385,11406 ---- " -nostdinc Do not search system include directories\n" " (dirs specified with -isystem will still be " "used)\n" ! " -nostdinc++ Do not search system include directories for C+" ! "+\n" " -o Put output into \n" msgstr "" + " -idirafter Sätt i slutet på systemets include-" + "sökväg\n" + " -I Sätt i slutet på huvud-include-" + "sökvägen\n" + " -I- Detaljerad include-sökväg kontroll; se info-" + "hjälp\n" + " -nostdinc Använd inte systemets include-sökväg (kataloger\n" + " satta med -isystem kommer fortfarande användas)\n" + " -nostdinc++ Använd inte systemets include-sökväg för C++\n" + " -o Skriv utdata till \n" ! #: cppinit.c:1821 msgid "" " -pedantic Issue all warnings demanded by strict ISO C\n" " -pedantic-errors Issue -pedantic warnings as errors instead\n" *************** msgid "" *** 7702,7718 **** " -lang-c Assume that the input sources are in C\n" " -lang-c89 Assume that the input sources are in C89\n" msgstr "" ! #: cppinit.c:1710 msgid "" " -lang-c++ Assume that the input sources are in C++\n" " -lang-objc Assume that the input sources are in ObjectiveC\n" ! " -lang-objc++ Assume that the input sources are in " ! "ObjectiveC++\n" " -lang-asm Assume that the input sources are in assembler\n" msgstr "" ! #: cppinit.c:1716 msgid "" " -std= Specify the conformance standard; one of:\n" " gnu89, gnu99, c89, c99, iso9899:1990,\n" --- 11408,11433 ---- " -lang-c Assume that the input sources are in C\n" " -lang-c89 Assume that the input sources are in C89\n" msgstr "" + " -pedantic Utfärda alla varningar som strikt ISO C kräver\n" + " -pedantic-errors Utfärda -pedantic varningar som fel istället\n" + " -trigraphs Stöd ISO C trigraphs\n" + " -lang-c Antag att indatakällkoden är C\n" + " -lang-c89 Antag att indatakällkoden är C89\n" ! #: cppinit.c:1828 msgid "" " -lang-c++ Assume that the input sources are in C++\n" " -lang-objc Assume that the input sources are in ObjectiveC\n" ! " -lang-objc++ Assume that the input sources are in ObjectiveC+" ! "+\n" " -lang-asm Assume that the input sources are in assembler\n" msgstr "" + " -lang-c++ Antag att indatakällkoden är C++\n" + " -lang-objc Antag att indatakällkoden är ObjectiveC\n" + " -lang-objc++ Antag att indatakällkoden är ObjectiveC++\n" + " -lang-asm Antag att indatakällkoden är assembler\n" ! #: cppinit.c:1834 msgid "" " -std= Specify the conformance standard; one of:\n" " gnu89, gnu99, c89, c99, iso9899:1990,\n" *************** msgid "" *** 7723,7730 **** " -Wno-trigraphs Do not warn about trigraphs\n" " -Wcomment{s} Warn if one comment starts inside another\n" msgstr "" ! #: cppinit.c:1726 msgid "" " -Wno-comment{s} Do not warn about comments\n" " -Wtraditional Warn about features not present in traditional " --- 11438,11454 ---- " -Wno-trigraphs Do not warn about trigraphs\n" " -Wcomment{s} Warn if one comment starts inside another\n" msgstr "" + " -std= Ange standard att följa; en av:\n" + " gnu89, gnu99, c89, c99, iso9899:1990,\n" + " iso9899:199409, iso9899:1999\n" + " -+ Tillåt användning av C++ finesser\n" + " -w Stoppa varningsmeddelande\n" + " -Wtrigraphs Varna om trigrapher påträffas\n" + " -Wno-trigraphs Varna inte om trigrapher\n" + " -Wcomment{s} Varna om en kommentar börjar i en annan " + "kommentar\n" ! #: cppinit.c:1844 msgid "" " -Wno-comment{s} Do not warn about comments\n" " -Wtraditional Warn about features not present in traditional " *************** msgid "" *** 7734,8425 **** " -Wno-undef Do not warn about testing undefined macros\n" " -Wimport Warn about the use of the #import directive\n" msgstr "" ! #: cppinit.c:1734 msgid "" " -Wno-import Do not warn about the use of #import\n" " -Werror Treat all warnings as errors\n" " -Wno-error Do not treat warnings as errors\n" " -Wall Enable all preprocessor warnings\n" " -M Generate make dependencies\n" " -MM As -M, but ignore system header files\n" msgstr "" ! #: cppinit.c:1742 msgid "" ! " -MD As -M, but put output in a .d file\n" ! " -MMD As -MD, but ignore system header files\n" ! " -MG Treat missing header file as generated files\n" ! " -g3 Include #define and #undef directives in the " ! "output\n" ! " -D Define a with string '1' as its value\n" ! " -D= Define a with as its value\n" msgstr "" ! #: cppinit.c:1750 msgid "" " -A () Assert the to \n" " -A- () Disable the to \n" " -U Undefine \n" " -v Display the version number\n" - " -H Print the name of header files as they are used\n" - " -C Do not discard comments\n" msgstr "" ! #: cppinit.c:1758 msgid "" " -dM Display a list of macro definitions active at " "end\n" " -dD Preserve macro definitions in output\n" " -dN As -dD except that only the names are preserved\n" " -dI Include #include directives in the output\n" - " -ftabstop= Distance between tab stops for column reporting\n" - " -P Do not generate #line directives\n" - " -$ Do not allow '$' in identifiers\n" msgstr "" ! #: cppinit.c:1767 msgid "" " -remap Remap file names when including files.\n" " --version Display version information\n" " -h or --help Display this information\n" msgstr "" ! #: cpplex.c:425 ! msgid "missing terminating > character" ! msgstr "" ! ! #: cpplex.c:724 #, c-format msgid "trigraph ??%c converted to %c" msgstr "" ! #: cpplex.c:728 #, c-format msgid "trigraph ??%c ignored" msgstr "" ! #: cpplex.c:841 ! msgid "'/*' within comment" msgstr "" ! #: cpplex.c:941 ! msgid "embedded null character ignored" msgstr "" ! #: cpplex.c:947 #, c-format msgid "%s in preprocessing directive" ! msgstr "" ! #: cpplex.c:977 ! msgid "'$' character in identifier" ! msgstr "" ! #: cpplex.c:1139 ! msgid "multi-line string constant" msgstr "" ! #: cpplex.c:1177 #, c-format msgid "missing terminating %c character" msgstr "" ! #: cpplex.c:1184 msgid "possible start of unterminated string literal" msgstr "" ! #: cpplex.c:1194 ! msgid "null characters preserved" msgstr "" ! #: cpplex.c:1195 ! msgid "null character preserved" msgstr "" ! #: cpplex.c:1436 msgid "C++ style comments are not allowed in ISO C89" ! msgstr "" ! #: cpplex.c:1438 msgid "(this will be reported only once per input file)" msgstr "" ! #: cpplex.c:1446 ! msgid "comment start split across lines" msgstr "" ! #: cpplex.c:1449 ! msgid "multi-line comment" msgstr "" ! #: cpplex.c:1479 ! msgid "comment start '/*' split across lines" msgstr "" ! #: cpplex.c:1483 tradcpp.c:1348 ! msgid "unterminated comment" msgstr "" ! #: cpplex.c:1487 ! msgid "comment end '*/' split across lines" msgstr "" ! #: cpplex.c:1528 ! msgid "backslash-newline at end of file" msgstr "" ! #: cpplex.c:1548 ! msgid "backslash and newline separated by space" msgstr "" ! #: cpplex.c:1561 ! msgid "K+R C ignores #\\n with the # indented" msgstr "" ! #: cpplex.c:1781 ! msgid "no newline at end of file" msgstr "" ! #: cpplex.c:1797 ! #, c-format ! msgid "invalid preprocessing directive #%s" msgstr "" ! #: cpplex.c:1800 ! msgid "invalid preprocessing directive" msgstr "" ! #: cpplex.c:2035 #, c-format ! msgid "Unspellable token %s" msgstr "" ! #: cpplex.c:2284 #, c-format ! msgid "function macro %s must be used with arguments in traditional C" msgstr "" ! #: cpplex.c:2418 #, c-format ! msgid "unterminated argument list for macro \"%s\"" msgstr "" ! #: cpplex.c:2439 ! msgid "ISO C99 requires rest arguments to be used" msgstr "" ! #: cpplex.c:2445 #, c-format ! msgid "not enough arguments for macro \"%s\"" msgstr "" ! #: cpplex.c:2453 #, c-format ! msgid "too many arguments for macro \"%s\"" msgstr "" ! #: cpplex.c:2780 ! msgid "pasting would not give a valid preprocessing token" msgstr "" ! #: cpplex.c:2910 ! msgid "invalid string literal, ignoring final '\\'" msgstr "" ! #: cpplex.c:3060 ! msgid "two tokens pushed in a row" msgstr "" ! #: cpplex.c:3082 #, c-format ! msgid "directive begins with %s?!" msgstr "" ! #: cpplex.c:3192 #, c-format ! msgid "macros nested too deep invoking '%s'" msgstr "" ! #: cpplex.c:3314 #, c-format ! msgid "#%s may not be used inside a macro argument" msgstr "" ! #: cpplex.c:3501 cpplib.c:260 cpplib.c:1466 #, c-format ! msgid "attempt to use poisoned \"%s\"" msgstr "" ! #: cpplex.c:3505 ! msgid "invalid special hash type" msgstr "" ! #: cpplex.c:3582 ! msgid "" msgstr "" ! #: cpplib.c:165 cpplib.c:210 #, c-format ! msgid "traditional C ignores #%s with the # indented" msgstr "" ! #: cpplib.c:170 #, c-format ! msgid "suggest hiding #%s from traditional C with an indented #" msgstr "" ! #: cpplib.c:181 #, c-format ! msgid "ISO C does not allow #%s" msgstr "" ! #: cpplib.c:205 ! msgid "# followed by integer" msgstr "" ! #: cpplib.c:235 ! msgid "\"defined\" cannot be used as a macro name" msgstr "" ! #: cpplib.c:238 #, c-format ! msgid "\"%s\" cannot be used as a macro name in C++" msgstr "" ! #: cpplib.c:242 ! msgid "macro names must be identifiers" msgstr "" ! #: cpplib.c:251 #, c-format ! msgid "\"%s\" cannot be used as a macro name" msgstr "" ! #: cpplib.c:289 ! msgid "junk on line after #undef" msgstr "" ! #: cpplib.c:299 #, c-format ! msgid "undefining \"%s\"" msgstr "" ! #: cpplib.c:325 #, c-format ! msgid "#%s expects \"FILENAME\" or " msgstr "" ! #: cpplib.c:331 #, c-format ! msgid "empty file name in #%s" msgstr "" ! #: cpplib.c:336 #, c-format ! msgid "junk at end of #%s" msgstr "" ! #: cpplib.c:374 ! msgid "#import is obsolete, use an #ifndef wrapper in the header file" msgstr "" ! #: cpplib.c:411 ! msgid "#include_next in primary source file" msgstr "" ! #: cpplib.c:439 ! msgid "invalid format #line" msgstr "" ! #: cpplib.c:494 ! msgid "token after #line is not a positive integer" msgstr "" ! #: cpplib.c:499 ! msgid "line number out of range" msgstr "" ! #: cpplib.c:512 ! msgid "second token after #line is not a string" msgstr "" ! #: cpplib.c:534 ! msgid "garbage at end of #line" msgstr "" ! #: cpplib.c:618 ! msgid "invalid #ident" msgstr "" ! #: cpplib.c:670 #, c-format ! msgid "unknown #pragma namespace %s" msgstr "" ! #: cpplib.c:791 ! msgid "#pragma once is obsolete" msgstr "" ! #: cpplib.c:794 ! msgid "#pragma once outside include file" msgstr "" ! #: cpplib.c:815 ! msgid "invalid #pragma poison directive" msgstr "" ! #: cpplib.c:825 #, c-format ! msgid "poisoning existing macro \"%s\"" msgstr "" ! #: cpplib.c:847 ! msgid "#pragma system_header outside include file" msgstr "" ! #: cpplib.c:872 #, c-format ! msgid "cannot find source %c%s%c" msgstr "" ! #: cpplib.c:877 #, c-format ! msgid "current file is older than %c%.*s%c" msgstr "" ! #: cpplib.c:959 #, c-format ! msgid "#%s with no argument" msgstr "" ! #: cpplib.c:961 #, c-format ! msgid "#%s with invalid argument" msgstr "" ! #: cpplib.c:963 #, c-format ! msgid "garbage at end of #%s" msgstr "" ! #: cpplib.c:969 #, c-format ! msgid "attempt to use poisoned identifier \"%s\"" msgstr "" ! #: cpplib.c:1043 ! msgid "#else without #if" msgstr "" ! #: cpplib.c:1048 tradcpp.c:3335 ! msgid "#else after #else" msgstr "" ! #: cpplib.c:1050 cpplib.c:1086 ! msgid "the conditional began here" msgstr "" ! #: cpplib.c:1079 ! msgid "#elif without #if" msgstr "" ! #: cpplib.c:1084 tradcpp.c:3043 ! msgid "#elif after #else" msgstr "" ! #: cpplib.c:1113 ! msgid "#endif without #if" msgstr "" ! #: cpplib.c:1159 #, c-format ! msgid "ISO C forbids text after #%s" msgstr "" ! #: cpplib.c:1174 #, c-format ! msgid "unterminated #%s" msgstr "" ! #: cpplib.c:1203 ! msgid "assertion without predicate" msgstr "" ! #: cpplib.c:1208 ! msgid "predicate must be an identifier" msgstr "" ! #: cpplib.c:1226 ! msgid "missing '(' after predicate" msgstr "" ! #: cpplib.c:1243 ! msgid "missing ')' to complete answer" msgstr "" ! #: cpplib.c:1266 ! msgid "predicate's answer is empty" msgstr "" ! #: cpplib.c:1276 ! msgid "junk at end of assertion" msgstr "" ! #: cpplib.c:1337 ! #, c-format ! msgid "\"%s\" re-asserted" msgstr "" ! #: cpplib.c:1426 ! msgid "" msgstr "" ! #: cpplib.c:1487 ! msgid "#include nested too deep" msgstr "" ! #: cpplib.c:1492 ! msgid "buffer pushed with contexts stacked" msgstr "" ! #: cppmain.c:79 ! #, c-format ! msgid "Invalid option %s" msgstr "" ! #: cppmain.c:258 ! msgid "malformed #pragma implementation" msgstr "" ! #: cppspec.c:127 ! #, c-format ! msgid "\"%s\" is not a valid option to the preprocessor" msgstr "" ! #: cppspec.c:151 ! msgid "too many input files" msgstr "" ! #: cse.c:7039 ! #, c-format ! msgid ";; Processing block from %d to %d, %d sets.\n" msgstr "" ! #: diagnostic.c:820 ! #, c-format ! msgid "%s:%d: warning: " msgstr "" ! #: diagnostic.c:822 ! #, c-format ! msgid "%s:%d: " msgstr "" ! #: diagnostic.c:827 ! #, c-format ! msgid "%s: warning: " ! msgstr "%s: varning: " ! #: diagnostic.c:829 diagnostic.c:838 diagnostic.c:1235 ! #, c-format ! msgid "%s: " msgstr "" ! #: diagnostic.c:923 ! msgid "((anonymous))" msgstr "" ! #: diagnostic.c:1198 ! msgid "sorry, not implemented: " msgstr "" ! #: diagnostic.c:1247 ! #, c-format ! msgid "In method `%s':" msgstr "" ! #: diagnostic.c:1251 ! #, c-format ! msgid "In function `%s':" msgstr "" ! #: diagnostic.c:1421 ! msgid "Unrecognizable insn:" msgstr "" ! #: diagnostic.c:1423 ! msgid "Insn does not satisfy its constraints:" msgstr "" ! #: diagnostic.c:1658 ! #, c-format ! msgid "" ! "Internal compiler error in %s, at %s:%d\n" ! "Please submit a full bug report.\n" ! "See %s for instructions." msgstr "" ! #: dwarf2out.c:2946 ! #, c-format ! msgid "DW_LOC_OP %s not implememnted yet.\n" msgstr "" ! #: dwarf2out.c:7115 dwarfout.c:1590 ! #, c-format ! msgid "internal regno botch: regno = %d\n" msgstr "" ! #: dwarfout.c:5743 ! msgid "getpwd" msgstr "" ! #: emit-rtl.c:1001 ! msgid "" ! "Unable to access real part of complex value in a hard register on this target" msgstr "" ! #: emit-rtl.c:1024 msgid "" ! "Unable to access imaginary part of complex value in a hard register on this " ! "target" msgstr "" ! #: emit-rtl.c:2512 ! msgid "ICE: emit_insn used where emit_jump_insn needed:\n" msgstr "" ! #: except.c:776 ! msgid "additional handler after ..." msgstr "" ! #: except.c:954 ! msgid "Cannot duplicate non-existant exception region." msgstr "" ! #: except.c:1068 ! msgid "exception handling disabled, use -fexceptions to enable" msgstr "" ! #: except.c:1751 ! msgid "Never issued previous false_label" msgstr "" ! #: except.c:2532 ! #, c-format ! msgid "Counted %d copies of EH region %d in list.\n" msgstr "" ! #: except.c:3074 ! msgid "Duplicate call to __builtin_eh_return" msgstr "" ! #: except.c:3094 ! msgid "function uses __builtin_eh_return" msgstr "" ! #: explow.c:1461 ! msgid "stack limits not supported on this target" msgstr "" ! #: expr.c:2696 ! msgid "function using short complex types cannot be inline" msgstr "" ! #: expr.c:5684 expr.c:5693 expr.c:5702 expr.c:5707 expr.c:5885 expr.c:5900 ! msgid "unsupported wide integer operation" msgstr "" ! #: expr.c:5953 #, c-format ! msgid "prior parameter's size depends on `%s'" msgstr "" ! #: expr.c:6351 ! msgid "returned value in block_exit_expr" msgstr "" ! #: final.c:3406 #, c-format ! msgid "invalid `asm': %s" msgstr "" ! #: final.c:3409 #, c-format msgid "output_operand: %s" msgstr "" ! #: final.c:3549 #, c-format msgid "operand number missing after %-letter" msgstr "" ! #: final.c:3551 final.c:3586 msgid "operand number out of range" msgstr "" ! #: final.c:3600 msgid "invalid %%-code" ! msgstr "" ! #: final.c:3627 msgid "`%l' operand isn't a label" msgstr "" ! #: flow.c:3575 ! msgid "ICE: would have deleted prologue/epilogue insn" ! msgstr "" ! #: flow.c:6620 #, c-format msgid "End insn %d for block %d not found in the insn stream." msgstr "" ! #: flow.c:6634 #, c-format msgid "Insn %d is in multiple basic blocks (%d and %d)" msgstr "" ! #: flow.c:6645 #, c-format msgid "Head insn %d for block %d not found in the insn stream." msgstr "" ! #: flow.c:6682 flow.c:6709 #, c-format msgid "Basic block %i edge lists are corrupted" msgstr "" ! #: flow.c:6694 #, c-format msgid "Basic block %d pred edge is corrupted" msgstr "" ! #: flow.c:6724 #, c-format msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d" msgstr "" ! #: flow.c:6732 #, c-format msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d\n" msgstr "" ! #: flow.c:6748 #, c-format msgid "NOTE_INSN_BASIC_BLOCK %d in the middle of basic block %d" msgstr "" ! #: flow.c:6760 #, c-format msgid "In basic block %d:" msgstr "" ! #: flow.c:6779 ! msgid "Basic blocks not numbered consecutively" ! msgstr "" ! ! #: flow.c:6819 #, c-format msgid "number of bb notes in insn chain (%d) != n_basic_blocks (%d)" msgstr "" --- 11458,12782 ---- " -Wno-undef Do not warn about testing undefined macros\n" " -Wimport Warn about the use of the #import directive\n" msgstr "" + " -Wno-comment{s} Varna inte om kommentarer\n" + " -Wtraditional Varna om finesser som inte finns i traditionell " + "C\n" + " -Wno-traditional Varna inte om traditionell C\n" + " -Wundef Varna om ett odefinierat makro används av #if\n" + " -Wno-undef Varna inte om att testa odefinierade makron\n" + " -Wimport Varna om användande av direktivet #import\n" ! #: cppinit.c:1852 msgid "" " -Wno-import Do not warn about the use of #import\n" " -Werror Treat all warnings as errors\n" " -Wno-error Do not treat warnings as errors\n" + " -Wsystem-headers Do not suppress warnings from system headers\n" + " -Wno-system-headers Suppress warnings from system headers\n" " -Wall Enable all preprocessor warnings\n" + msgstr "" + " -Wno-import Varna inte om användande av #import\n" + " -Werror Behandla alla varningar som fel\n" + " -Wno-error Behandla inte varningar som fel\n" + " -Wsystem-headers Dölj inte varningar från system-include-filer\n" + " -Wno-system-headers Dölj varningar från system-include-filer\n" + " -Wall Aktivera alla preprocessor-varningar\n" + + #: cppinit.c:1860 + msgid "" " -M Generate make dependencies\n" " -MM As -M, but ignore system header files\n" + " -MF Write dependency output to the given file\n" + " -MG Treat missing header file as generated files\n" msgstr "" + " -M Generera make beroenden\n" + " -MM Som -M, men ignorera system-include-filer\n" + " -MF Skriv beroenden till den givna filen\n" + " -MG Behandla saknade filer som genererade filer\n" ! # fixme: vad menas med unquoted ! #: cppinit.c:1866 msgid "" ! " -MP\t\t\t Generate phony targets for all headers\n" ! " -MQ Add a MAKE-quoted target\n" ! " -MT Add an unquoted target\n" msgstr "" + " -MP\t\t\t Generera phony-mål för alla include-filer\n" + " -MQ Lägg till MAKE-citerat mål\n" + " -MT Lägg till ociterat mål\n" ! #: cppinit.c:1871 msgid "" + " -D Define a with string '1' as its value\n" + " -D= Define a with as its value\n" " -A () Assert the to \n" " -A- () Disable the to \n" " -U Undefine \n" " -v Display the version number\n" msgstr "" + " -D Definiera med strängen \"1\" som sitt " + "värde\n" + " -D= Definiera with som sitt värde\n" + " -A () Ange svaret på frågan \n" + " -A- () Slå av svaret på frågan \n" + " -U Gör till icke definierat\n" + " -v Visa versionsnummer\n" ! #: cppinit.c:1879 msgid "" + " -H Print the name of header files as they are used\n" + " -C Do not discard comments\n" " -dM Display a list of macro definitions active at " "end\n" " -dD Preserve macro definitions in output\n" " -dN As -dD except that only the names are preserved\n" " -dI Include #include directives in the output\n" msgstr "" + " -H Skriv namnet på include-filer när de används\n" + " -C Släng inte bort kommentarer\n" + " -dM Visa en lista med aktiva makron i slutet\n" + " -dD Bevara mokrodefinitioner i utdata\n" + " -dN Som -dD men bara namnet bevaras\n" + " -dI Ta med #include-direktives i utdata\n" ! #: cppinit.c:1887 msgid "" + " -fpreprocessed Treat the input file as already preprocessed\n" + " -ftabstop= Distance between tab stops for column reporting\n" + " -P Do not generate #line directives\n" + " -$ Do not allow '$' in identifiers\n" " -remap Remap file names when including files.\n" " --version Display version information\n" " -h or --help Display this information\n" msgstr "" ! #: cpplex.c:173 #, c-format msgid "trigraph ??%c converted to %c" msgstr "" ! #: cpplex.c:181 #, c-format msgid "trigraph ??%c ignored" msgstr "" ! #: cpplex.c:265 ! msgid "backslash and newline separated by space" msgstr "" ! #: cpplex.c:269 ! msgid "backslash-newline at end of file" msgstr "" ! #: cpplex.c:344 ! msgid "\"/*\" within comment" ! msgstr "\"/*\" i kommentar" ! ! #: cpplex.c:430 ! msgid "null character(s) ignored" ! msgstr "" ! ! #: cpplex.c:437 #, c-format msgid "%s in preprocessing directive" ! msgstr "%s i preprocessordirektiv" ! #: cpplex.c:513 ! msgid "'$' character(s) in identifier" ! msgstr "tecknet '$' i en identifierare" ! #: cpplex.c:528 ! #, c-format ! msgid "attempt to use poisoned \"%s\"" ! msgstr "försök att använda förgiftad \"%s\"" ! ! #: cpplex.c:535 ! msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro" msgstr "" ! #: cpplex.c:605 #, c-format msgid "missing terminating %c character" msgstr "" ! #: cpplex.c:612 msgid "possible start of unterminated string literal" msgstr "" ! #: cpplex.c:705 ! msgid "multi-line string literals are deprecated" msgstr "" ! #: cpplex.c:716 ! msgid "null character(s) preserved in literal" msgstr "" ! #: cpplex.c:889 ! msgid "no newline at end of file" ! msgstr "inget nyradstecken vid slutet av filen" ! ! #: cpplex.c:1010 tradcpp.c:1447 ! msgid "unterminated comment" ! msgstr "ej avslutad kommentar" ! ! #: cpplex.c:1024 msgid "C++ style comments are not allowed in ISO C89" ! msgstr "C++ kommentarer tillåts inte av ISO C89" ! #: cpplex.c:1026 msgid "(this will be reported only once per input file)" msgstr "" ! #: cpplex.c:1034 ! msgid "multi-line comment" msgstr "" ! #: cpplex.c:1196 ! msgid "directives may not be used inside a macro argument" msgstr "" ! #: cpplex.c:1351 ! #, c-format ! msgid "Unspellable token %s" msgstr "" ! #: cpplex.c:1706 ! #, c-format ! msgid "the meaning of '\\%c' varies with -traditional" ! msgstr "semantiken för \"\\%c\" varierar med -traditional" ! ! #: cpplex.c:1712 ! msgid "incomplete universal-character-name" msgstr "" ! #: cpplex.c:1726 ! #, c-format ! msgid "non-hex digit '%c' in universal-character-name" msgstr "" ! #: cpplex.c:1734 ! msgid "universal-character-name on EBCDIC target" msgstr "" ! #: cpplex.c:1748 ! msgid "universal-character-name out of range" msgstr "" ! #: cpplex.c:1794 ! msgid "the meaning of '\\a' varies with -traditional" ! msgstr "semantiken för \"\\a\" varierar med -traditional" ! ! #: cpplex.c:1801 ! #, c-format ! msgid "non-ISO-standard escape sequence, '\\%c'" msgstr "" ! #: cpplex.c:1811 ! msgid "the meaning of '\\x' varies with -traditional" msgstr "" ! #: cpplex.c:1830 f/lex.c:636 ! msgid "\\x used with no following hex digits" msgstr "" ! #: cpplex.c:1834 ! msgid "hex escape sequence out of range" msgstr "" ! #: cpplex.c:1858 ! msgid "octal escape sequence out of range" ! msgstr "" ! ! #: cpplex.c:1873 #, c-format ! msgid "unknown escape sequence '\\%c'" ! msgstr "okänd escape-sekvens \"\\%c\"" ! ! #: cpplex.c:1875 ! #, c-format ! msgid "unknown escape sequence: '\\%03o'" msgstr "" ! #: cpplex.c:1879 ! msgid "escape sequence out of range for character" ! msgstr "escape-sekvens ryms ej i ett tecken" ! ! #: cpplex.c:1938 ! msgid "ignoring invalid multibyte character" ! msgstr "" ! ! #: cpplex.c:1969 ! msgid "empty character constant" ! msgstr "tom teckenkonstant" ! ! #: cpplex.c:1973 ! msgid "character constant too long" ! msgstr "teckenkonstant för lång" ! ! #: cpplex.c:1976 ! msgid "multi-character character constant" ! msgstr "flerteckens teckenkonstant" ! ! #: cpplib.c:213 #, c-format ! msgid "extra tokens at end of #%s directive" msgstr "" ! #: cpplib.c:302 ! msgid "# followed by integer" ! msgstr "" ! ! #: cpplib.c:351 ! msgid "suggest not using #elif in traditional C" ! msgstr "" ! ! #: cpplib.c:354 #, c-format ! msgid "traditional C ignores #%s with the # indented" ! msgstr "traditionell C ignorerar #%s dör tecknet # är indenterat" ! ! #: cpplib.c:358 ! #, c-format ! msgid "suggest hiding #%s from traditional C with an indented #" msgstr "" ! #: cpplib.c:368 ! #, c-format ! msgid "#%s is a GCC extension" ! msgstr "#%s är en GCC-utvidgning" ! ! #: cpplib.c:392 ! #, c-format ! msgid "invalid preprocessing directive #%s" msgstr "" ! #: cpplib.c:453 #, c-format ! msgid "no macro name given in #%s directive" msgstr "" ! #: cpplib.c:457 #, c-format ! msgid "\"%s\" cannot be used as a macro name as it is an operator in C++" msgstr "" ! #: cpplib.c:460 ! msgid "macro names must be identifiers" msgstr "" ! #: cpplib.c:469 ! #, c-format ! msgid "\"%s\" cannot be used as a macro name" msgstr "" ! #: cpplib.c:508 ! #, c-format ! msgid "undefining \"%s\"" msgstr "" ! #: cpplib.c:552 ! msgid "missing terminating > character" ! msgstr "saknar avslutande tecken >" ! ! #: cpplib.c:590 #, c-format ! msgid "#%s expects \"FILENAME\" or " msgstr "" ! #: cpplib.c:599 #, c-format ! msgid "empty file name in #%s" ! msgstr "tomt filnamn i #%s" ! ! #: cpplib.c:627 ! msgid "#include nested too deeply" ! msgstr "#include nästlad för djupt" ! ! #: cpplib.c:629 ! msgid "attempt to push file buffer with contexts stacked" msgstr "" ! #: cpplib.c:636 ! msgid "#include_next in primary source file" ! msgstr "" ! ! #: cpplib.c:660 ! msgid "#import is obsolete, use an #ifndef wrapper in the header file" ! msgstr "#import är obsolet, använd #ifndef-omslutning i includefilen" ! ! #: cpplib.c:696 #, c-format ! msgid "invalid flag \"%s\" in line directive" ! msgstr "ogiltigt flagga \"%s\" i line-direktiv" ! ! #: cpplib.c:748 ! #, c-format ! msgid "\"%s\" after #line is not a positive integer" ! msgstr "\"%s\" efter #line är inte ett positivt heltal" ! ! #: cpplib.c:754 ! msgid "line number out of range" ! msgstr "radnummer utanför möjligt intervall" ! ! #: cpplib.c:798 ! #, c-format ! msgid "file \"%s\" left but not entered" msgstr "" ! #: cpplib.c:806 #, c-format ! msgid "expected to return to file \"%s\"" msgstr "" ! #: cpplib.c:809 ! #, c-format ! msgid "expected to return to line number %u" msgstr "" ! #: cpplib.c:812 ! #, c-format ! msgid "header flags for \"%s\" have changed" msgstr "" ! #: cpplib.c:823 #, c-format ! msgid "\"%s\" is not a valid filename" ! msgstr "\"%s\" är inte ett giltigt filnamn" ! ! #: cpplib.c:971 ! #, c-format ! msgid "unknown #pragma namespace %s" ! msgstr "okänt #pragma namespace %s" ! ! #: cpplib.c:1081 ! msgid "#pragma once is obsolete" ! msgstr "#pragma once är obsolet" ! ! #: cpplib.c:1084 ! msgid "#pragma once in main file" ! msgstr "#pragma once i huvudfil" ! ! #: cpplib.c:1108 ! msgid "invalid #pragma GCC poison directive" ! msgstr "ogiltigt GCC-direktiv #pragma poison" ! ! #: cpplib.c:1117 ! #, c-format ! msgid "poisoning existing macro \"%s\"" ! msgstr "förgiftar existerande makro \"%s\"" ! ! #: cpplib.c:1142 ! msgid "#pragma system_header ignored outside include file" msgstr "" ! #: cpplib.c:1164 #, c-format ! msgid "cannot find source %s" ! msgstr "kan inte hitta källfil %s" ! ! #: cpplib.c:1168 ! #, c-format ! msgid "current file is older than %s" ! msgstr "aktuell fil är äldre än %s" ! ! #: cpplib.c:1231 ! msgid "_Pragma takes a parenthesized string literal" msgstr "" ! #: cpplib.c:1324 ! msgid "#else without #if" ! msgstr "#else utan #if" ! ! #: cpplib.c:1329 tradcpp.c:3850 ! msgid "#else after #else" ! msgstr "#else efter #else" ! ! #: cpplib.c:1331 cpplib.c:1365 ! msgid "the conditional began here" ! msgstr "villkorssatsen började här" ! ! #: cpplib.c:1358 ! msgid "#elif without #if" ! msgstr "#elif utan #if" ! ! #: cpplib.c:1363 tradcpp.c:3545 ! msgid "#elif after #else" ! msgstr "#elif efter #else" ! ! #: cpplib.c:1395 ! msgid "#endif without #if" ! msgstr "#endif utan #if" ! ! #: cpplib.c:1480 tradcpp.c:3242 ! msgid "missing '(' after predicate" ! msgstr "saknas '(' efter predikat" ! ! #: cpplib.c:1501 tradcpp.c:3256 ! msgid "missing ')' to complete answer" ! msgstr "saknas ')' för att avsluta svaret" ! ! #: cpplib.c:1509 tradcpp.c:3262 ! msgid "predicate's answer is empty" ! msgstr "predikatets svar är tomt" ! ! #: cpplib.c:1540 tradcpp.c:3310 ! msgid "assertion without predicate" ! msgstr "" ! ! #: cpplib.c:1542 tradcpp.c:3312 ! msgid "predicate must be an identifier" ! msgstr "predikat måste vara en identifierare" ! ! #: cpplib.c:1623 tradcpp.c:3409 #, c-format ! msgid "\"%s\" re-asserted" msgstr "" ! #: cpplib.c:1819 ! msgid "" ! msgstr "" ! ! #: cpplib.c:1821 ! msgid "" msgstr "" ! #: cpplib.c:1844 ! msgid "" ! msgstr "" ! ! #: cpplib.c:1877 ! #, c-format ! msgid "unterminated #%s" msgstr "" ! #: cpplib.c:1905 #, c-format ! msgid "file \"%s\" entered but not left" ! msgstr "filen \"%s\" påbörjad men ej avslutad" ! ! #: cppmacro.c:213 ! #, c-format ! msgid "invalid builtin macro \"%s\"" msgstr "" ! #: cppmacro.c:333 ! msgid "invalid string literal, ignoring final '\\'" msgstr "" ! #: cppmacro.c:367 #, c-format ! msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token" msgstr "" ! #: cppmacro.c:539 ! #, c-format ! msgid "unterminated argument list invoking macro \"%s\"" msgstr "" ! #: cppmacro.c:556 ! msgid "ISO C99 requires rest arguments to be used" ! msgstr "" ! ! #: cppmacro.c:561 #, c-format ! msgid "macro \"%s\" requires %u arguments, but only %u given" msgstr "" ! #: cppmacro.c:572 #, c-format ! msgid "macro \"%s\" passed %u arguments, but takes just %u" msgstr "" ! #: cppmacro.c:612 #, c-format ! msgid "function-like macro \"%s\" must be used with arguments in traditional C" msgstr "" ! #: cppmacro.c:1236 #, c-format ! msgid "duplicate macro parameter \"%s\"" msgstr "" ! #: cppmacro.c:1271 ! #, c-format ! msgid "\"%s\" may not appear in macro parameter list" msgstr "" ! #: cppmacro.c:1278 ! msgid "macro parameters must be comma-separated" msgstr "" ! #: cppmacro.c:1295 ! msgid "parameter name missing" ! msgstr "parameternamn saknas" ! ! #: cppmacro.c:1309 ! msgid "anonymous variadic macros were introduced in C99" msgstr "" ! #: cppmacro.c:1312 ! msgid "ISO C does not permit named variadic macros" msgstr "" ! #: cppmacro.c:1321 ! msgid "missing ')' in macro parameter list" msgstr "" ! #: cppmacro.c:1400 ! msgid "ISO C requires whitespace after the macro name" msgstr "" ! #: cppmacro.c:1423 ! msgid "'#' is not followed by a macro parameter" msgstr "" ! #: cppmacro.c:1443 ! msgid "'##' cannot appear at either end of a macro expansion" msgstr "" ! #: cppmacro.c:1478 #, c-format ! msgid "\"%s\" redefined" ! msgstr "\"%s\" omdefinierad" ! ! #: cppmacro.c:1484 ! msgid "this is the location of the previous definition" ! msgstr "detta är platsen för den tidigare definitionen" ! ! #: cppmacro.c:1543 ! #, c-format ! msgid "macro argument \"%s\" would be stringified with -traditional." msgstr "" ! #: cppmacro.c:1567 ! #, c-format ! msgid "invalid hash type %d in dump_definition" msgstr "" ! #: cppmain.c:128 ! #, c-format ! msgid "Invalid option %s" ! msgstr "Ogiltig flagga %s" ! ! #: cppspec.c:128 ! #, c-format ! msgid "\"%s\" is not a valid option to the preprocessor" msgstr "" ! #: cppspec.c:152 ! msgid "too many input files" ! msgstr "för många indatafiler" ! ! #: cse.c:7137 ! #, c-format ! msgid ";; Processing block from %d to %d, %d sets.\n" msgstr "" ! #: diagnostic.c:842 #, c-format ! msgid "%s:%d: warning: " ! msgstr "%s:%d: varning: " ! ! #: diagnostic.c:849 ! #, c-format ! msgid "%s: warning: " ! msgstr "%s: varning: " ! ! #: diagnostic.c:935 ! msgid "((anonymous))" ! msgstr "((anonym))" ! ! #: diagnostic.c:1060 ! #, c-format ! msgid "%s: warnings being treated as errors\n" msgstr "" ! #: diagnostic.c:1112 ! #, c-format ! msgid "%s: %s: " ! msgstr "%s: %s: " ! ! #: diagnostic.c:1220 ! msgid "sorry, not implemented: " ! msgstr "ledsen, inte implementerat: " ! ! #: diagnostic.c:1239 ! #, c-format ! msgid "%s " ! msgstr "%s " ! ! #: diagnostic.c:1241 ! #, c-format ! msgid " %s" ! msgstr " %s" ! ! #: diagnostic.c:1264 ! msgid "At top level:" ! msgstr "På toppnivå:" ! ! #: diagnostic.c:1269 ! #, c-format ! msgid "In method `%s':" ! msgstr "I metod `%s':" ! ! #: diagnostic.c:1273 ! #, c-format ! msgid "In function `%s':" ! msgstr "I funktion `%s':" ! ! #: diagnostic.c:1408 ! msgid "compilation terminated.\n" ! msgstr "kompilering avslutad.\n" ! ! #: diagnostic.c:1443 ! #, c-format ! msgid "%s:%d: confused by earlier errors, bailing out\n" msgstr "" ! #: diagnostic.c:1457 diagnostic.c:1696 #, c-format ! msgid "" ! "Please submit a full bug report,\n" ! "with preprocessed source if appropriate.\n" ! "See %s for instructions.\n" msgstr "" + "Var vänlig och skicka in en komplett felrapport,\n" + "om möjligt med preprocessad källfil.\n" + "Se %s för instruktioner.\n" ! #: diagnostic.c:1489 ! msgid "Unrecognizable insn:" ! msgstr "" ! ! #: diagnostic.c:1491 ! msgid "Insn does not satisfy its constraints:" ! msgstr "" ! ! #: diagnostic.c:1694 ! msgid "Internal compiler error: Error reporting routines re-entered.\n" ! msgstr "Internt kompilatorfel: Felhanteringsrutiner återanropade.\n" ! ! #: diagnostic.c:1756 #, c-format ! msgid "Internal compiler error in %s, at %s:%d" ! msgstr "Internt kompilatorfel i %s, vid %s:%d" ! ! #: diagnostic.c:1801 ! #, c-format ! msgid "In file included from %s:%d" ! msgstr "I fil includerad från %s:%d" ! ! #: diagnostic.c:1804 ! #, c-format ! msgid "" ! ",\n" ! " from %s:%d" msgstr "" + ",\n" + " från %s:%d" ! #: diagnostic.c:1805 ! msgid ":\n" ! msgstr ":\n" ! ! #: dwarf2out.c:3043 #, c-format ! msgid "DW_LOC_OP %s not implememnted\n" ! msgstr "DW_LOC_OP %s är inte implementerad\n" ! ! #: dwarf2out.c:7242 dwarfout.c:2135 ! #, c-format ! msgid "internal regno botch: regno = %d\n" msgstr "" ! #: dwarfout.c:6269 ! msgid "can't get current directory" ! msgstr "" ! ! #: emit-rtl.c:1028 ! msgid "Can't access real part of complex value in hard register" ! msgstr "" ! ! #: emit-rtl.c:1050 ! msgid "can't access imaginary part of complex value in hard register" ! msgstr "" ! ! #: emit-rtl.c:2508 ! msgid "ICE: emit_insn used where emit_jump_insn needed:\n" ! msgstr "" ! ! #: errors.c:168 #, c-format ! msgid "abort in %s, at %s:%d" msgstr "" ! #: except.c:357 ! msgid "exception handling disabled, use -fexceptions to enable" ! msgstr "" ! ! #: except.c:2927 ! msgid "argument of `__builtin_eh_return_regno' must be constant" ! msgstr "argumentet till \"__builtin_eh_return_regno\" måste vara konstant" ! ! #: except.c:3034 except.c:3056 ! msgid "__builtin_eh_return not supported on this target" ! msgstr "__builtin_eh_return stöds inte på denna målarkitektur" ! ! #: explow.c:1447 ! msgid "stack limits not supported on this target" ! msgstr "" ! ! #: expr.c:2915 ! msgid "function using short complex types cannot be inline" ! msgstr "" ! ! #: expr.c:5994 expr.c:6003 expr.c:6012 expr.c:6017 expr.c:6181 expr.c:6197 ! msgid "unsupported wide integer operation" ! msgstr "" ! ! #: expr.c:6244 #, c-format ! msgid "prior parameter's size depends on `%s'" ! msgstr "föregående parameterns storlek beror på \"%s\"" ! ! #: expr.c:6645 ! msgid "returned value in block_exit_expr" msgstr "" ! #: f/com.c:11798 ! msgid "no INTEGER type can hold a pointer on this configuration" ! msgstr "" ! ! #: f/com.c:12025 #, c-format ! msgid "configuration: REAL, INTEGER, and LOGICAL are %d bits wide," msgstr "" ! #: f/com.c:12027 ! #, c-format ! msgid "and pointers are %d bits wide, but g77 doesn't yet work" msgstr "" ! #: f/com.c:12029 ! msgid "properly unless they all are 32 bits wide." msgstr "" ! #: f/com.c:12030 ! msgid "Please keep this in mind before you report bugs. g77 should" msgstr "" ! #: f/com.c:12031 ! msgid "support non-32-bit machines better as of version 0.6." msgstr "" ! #. I/O will probably crash. ! #: f/com.c:12039 ! #, c-format ! msgid "configuration: char * holds %d bits, but ftnlen only %d" msgstr "" ! #. ASSIGN 10 TO I will crash. ! #: f/com.c:12048 ! #, c-format ! msgid "" ! "configuration: char * holds %d bits, but INTEGER only %d --\n" ! " ASSIGN statement might fail" msgstr "" ! #: f/com.c:16025 ! msgid "Directory name must immediately follow -I" ! msgstr "Katalognamn måste komma direkt efter -I" ! ! #: f/g77spec.c:250 #, c-format ! msgid "overflowed output arg list for `%s'" msgstr "" ! #: f/g77spec.c:436 ! msgid "--driver no longer supported" ! msgstr "--driver stödjs inte längre" ! ! #: f/g77spec.c:450 #, c-format ! msgid "argument to `%s' missing" ! msgstr "argument till \"%s\" saknas" ! ! #: f/g77spec.c:454 ! msgid "No input files; unwilling to write output files" msgstr "" ! #: f/lang-options.h:33 ! msgid "Print g77-specific compiler version info, run internal tests" msgstr "" ! #: f/lang-options.h:38 ! msgid "Program is written in typical FORTRAN 66 dialect" msgstr "" ! #: f/lang-options.h:41 ! msgid "Program is written in typical Unix f77 dialect" msgstr "" ! #: f/lang-options.h:43 ! msgid "Program does not use Unix-f77 dialectal features" msgstr "" ! #: f/lang-options.h:45 ! msgid "Program is written in Fortran-90-ish dialect" msgstr "" ! #: f/lang-options.h:49 ! msgid "" ! "Treat local vars and COMMON blocks as if they were named in SAVE statements" msgstr "" ! #: f/lang-options.h:51 ! msgid "Allow $ in symbol names" msgstr "" ! #: f/lang-options.h:55 ! msgid "f2c-compatible code need not be generated" msgstr "" ! #: f/lang-options.h:58 ! msgid "Unsupported; do not generate libf2c-calling code" msgstr "" ! #: f/lang-options.h:60 ! msgid "Unsupported; affects code-generation of arrays" msgstr "" ! #: f/lang-options.h:63 ! msgid "Program is written in Fortran-90-ish free form" msgstr "" ! #: f/lang-options.h:68 ! msgid "Warn about use of (only a few for now) Fortran extensions" msgstr "" ! #: f/lang-options.h:71 ! msgid "Program is written in VXT (Digital-like) FORTRAN" msgstr "" ! #: f/lang-options.h:74 ! msgid "Disallow all ugly features" msgstr "" ! #: f/lang-options.h:77 ! msgid "Hollerith and typeless constants not passed as arguments" msgstr "" ! #: f/lang-options.h:79 ! msgid "Allow ordinary copying of ASSIGN'ed vars" msgstr "" ! #: f/lang-options.h:82 ! msgid "Dummy array dimensioned to (1) is assumed-size" msgstr "" ! #: f/lang-options.h:85 ! msgid "Trailing comma in procedure call denotes null argument" ! msgstr "" ! #: f/lang-options.h:88 ! msgid "Allow REAL(Z) and AIMAG(Z) given DOUBLE COMPLEX Z" msgstr "" ! #: f/lang-options.h:92 ! msgid "Initialization via DATA and PARAMETER is type-compatible" msgstr "" ! #: f/lang-options.h:94 ! msgid "Allow INTEGER and LOGICAL interchangeability" msgstr "" ! #: f/lang-options.h:97 ! msgid "Print internal debugging-related info" msgstr "" ! #: f/lang-options.h:100 ! msgid "Initialize local vars and arrays to zero" msgstr "" ! #: f/lang-options.h:104 ! msgid "Backslashes in character/hollerith constants not special (C-style)" msgstr "" ! #: f/lang-options.h:106 ! msgid "Have front end emulate COMPLEX arithmetic to avoid bugs" msgstr "" ! #: f/lang-options.h:110 ! msgid "Disable the appending of underscores to externals" msgstr "" ! #: f/lang-options.h:113 ! msgid "Never append a second underscore to externals" msgstr "" ! #: f/lang-options.h:115 ! msgid "Intrinsics spelled as e.g. SqRt" msgstr "" ! #: f/lang-options.h:117 ! msgid "Intrinsics in uppercase" msgstr "" ! #: f/lang-options.h:120 ! msgid "Intrinsics letters in arbitrary cases" msgstr "" ! #: f/lang-options.h:122 ! msgid "Language keywords spelled as e.g. IOStat" ! msgstr "" ! ! #: f/lang-options.h:124 ! msgid "Language keywords in uppercase" ! msgstr "" ! ! #: f/lang-options.h:127 ! msgid "Language keyword letters in arbitrary cases" ! msgstr "" ! ! #: f/lang-options.h:129 ! msgid "Internally convert most source to uppercase" ! msgstr "" ! ! #: f/lang-options.h:132 ! msgid "Internally preserve source case" ! msgstr "" ! ! #: f/lang-options.h:134 ! msgid "Symbol names spelled in mixed case" ! msgstr "" ! ! #: f/lang-options.h:136 ! msgid "Symbol names in uppercase" ! msgstr "" ! ! #: f/lang-options.h:138 ! msgid "Symbol names in lowercase" ! msgstr "" ! ! #: f/lang-options.h:141 ! msgid "Program written in uppercase" ! msgstr "" ! ! #: f/lang-options.h:143 ! msgid "Program written in lowercase" ! msgstr "" ! ! #: f/lang-options.h:145 ! msgid "Program written in strict mixed-case" ! msgstr "" ! ! #: f/lang-options.h:147 ! msgid "Compile as if program written in uppercase" ! msgstr "" ! ! #: f/lang-options.h:149 ! msgid "Compile as if program written in lowercase" ! msgstr "" ! ! #: f/lang-options.h:151 ! msgid "Preserve all spelling (case) used in program" ! msgstr "" ! ! #: f/lang-options.h:153 ! msgid "Delete libU77 intrinsics with bad interfaces" ! msgstr "" ! ! #: f/lang-options.h:155 ! msgid "Disable libU77 intrinsics with bad interfaces" ! msgstr "" ! ! #: f/lang-options.h:158 ! msgid "Hide libU77 intrinsics with bad interfaces" ! msgstr "" ! ! #: f/lang-options.h:160 ! msgid "Delete non-FORTRAN-77 intrinsics f2c supports" ! msgstr "" ! ! #: f/lang-options.h:162 ! msgid "Disable non-FORTRAN-77 intrinsics f2c supports" ! msgstr "" ! ! #: f/lang-options.h:165 ! msgid "Hide non-FORTRAN-77 intrinsics f2c supports" ! msgstr "" ! ! #: f/lang-options.h:167 ! msgid "Delete non-FORTRAN-77 intrinsics F90 supports" ! msgstr "" ! ! #: f/lang-options.h:169 ! msgid "Disable non-FORTRAN-77 intrinsics F90 supports" ! msgstr "" ! ! #: f/lang-options.h:172 ! msgid "Hide non-FORTRAN-77 intrinsics F90 supports" ! msgstr "" ! ! #: f/lang-options.h:174 ! msgid "Delete non-FORTRAN-77 intrinsics g77 supports" ! msgstr "" ! ! #: f/lang-options.h:176 ! msgid "Disable non-FORTRAN 77 intrinsics F90 supports" ! msgstr "" ! ! #: f/lang-options.h:179 ! msgid "Hide non-FORTRAN 77 intrinsics F90 supports" ! msgstr "" ! ! #: f/lang-options.h:181 ! msgid "Delete MIL-STD 1753 intrinsics" ! msgstr "" ! ! #: f/lang-options.h:183 ! msgid "Disable MIL-STD 1753 intrinsics" ! msgstr "" ! ! #: f/lang-options.h:186 ! msgid "Hide MIL-STD 1753 intrinsics" ! msgstr "" ! ! #: f/lang-options.h:188 ! msgid "Delete libU77 intrinsics" ! msgstr "" ! ! #: f/lang-options.h:190 ! msgid "Disable libU77 intrinsics" ! msgstr "" ! ! #: f/lang-options.h:193 ! msgid "Hide libU77 intrinsics" ! msgstr "" ! ! #: f/lang-options.h:195 ! msgid "Delete non-FORTRAN-77 intrinsics VXT FORTRAN supports" ! msgstr "" ! ! #: f/lang-options.h:197 ! msgid "Disable non-FORTRAN-77 intrinsics VXT FORTRAN supports" ! msgstr "" ! ! #: f/lang-options.h:200 ! msgid "Hide non-FORTRAN-77 intrinsics VXT FORTRAN supports" ! msgstr "" ! ! #: f/lang-options.h:202 ! msgid "Treat initial values of 0 like non-zero values" ! msgstr "" ! ! #: f/lang-options.h:205 msgid "" ! "Emit special debugging information for COMMON and EQUIVALENCE (disabled)" msgstr "" ! #: f/lang-options.h:208 ! msgid "Take at least one trip through each iterative DO loop" msgstr "" ! #: f/lang-options.h:212 ! msgid "Print names of program units as they are compiled" msgstr "" ! #: f/lang-options.h:215 ! msgid "Disable fatal diagnostics about inter-procedural problems" msgstr "" ! #: f/lang-options.h:217 ! msgid "Make prefix-radix non-decimal constants be typeless" msgstr "" ! #: f/lang-options.h:220 ! msgid "Generate code to check subscript and substring bounds" msgstr "" ! #: f/lang-options.h:223 ! msgid "Fortran-specific form of -fbounds-check" msgstr "" ! #: f/lang-options.h:227 ! msgid "Disable warnings about inter-procedural problems" msgstr "" ! #: f/lang-options.h:231 ! msgid "Warn about constructs with surprising meanings" msgstr "" ! #: f/lang-options.h:236 ! msgid "Add a directory for INCLUDE searching" msgstr "" ! #: f/lang-options.h:238 ! msgid "Set the maximum line length" msgstr "" ! #: f/lex.c:601 ! msgid "the meaning of `\\x' varies with -traditional" ! msgstr "semantiken för \"\\x\" varierar med -traditional" ! ! #: f/lex.c:646 ! msgid "hex escape out of range" msgstr "" ! #: f/lex.c:692 ! msgid "the meaning of `\\a' varies with -traditional" ! msgstr "semantiken för \"\\a\" varierar med -traditional" ! ! #: f/lex.c:708 #, c-format ! msgid "non-ANSI-standard escape sequence, `\\%c'" msgstr "" ! #: f/lex.c:721 ! #, c-format ! msgid "non-ANSI escape sequence `\\%c'" msgstr "" ! #: f/lex.c:725 #, c-format ! msgid "unknown escape sequence `\\%c'" ! msgstr "okänd escape-sekvens \"\\%c\"" ! ! #: f/lex.c:727 ! #, c-format ! msgid "unknown escape sequence: `\\' followed by char code 0x%x" ! msgstr "okänd escape-sekvens: '\\' följd av tecken 0x%x" ! ! #: f/lex.c:806 ! msgid "Badly formed directive -- no closing quote" msgstr "" ! #: f/lex.c:1039 ! msgid "Bad directive -- missing close-quote" ! msgstr "" ! ! #: f/lex.c:1156 ! #, c-format ! msgid "ignoring pragma: %s" ! msgstr "ignorerar #pragma: %s" ! ! #: f/lex.c:1369 f/lex.c:1413 ! msgid "Use `#line ...' instead of `# ...' in first line" ! msgstr "" ! ! #: f/ste.c:1436 f/ste.c:1791 ! msgid "ASSIGNed FORMAT specifier is too small" ! msgstr "" ! ! #: f/ste.c:3259 ! msgid "ASSIGN to variable that is too small" ! msgstr "" ! ! #: f/ste.c:3297 ! msgid "ASSIGNed GOTO target variable is too small" ! msgstr "" ! ! #: f/top.c:240 ! #, c-format ! msgid "%s no longer supported -- try -fvxt" ! msgstr "%s stödjs inte längre -- försök -fvxt" ! ! #: f/top.c:242 ! #, c-format ! msgid "%s no longer supported -- try -fno-vxt -ff90" ! msgstr "%s stödjs inte längre -- försök -fno-vxt -ff90" ! ! #: f/top.c:310 f/top.c:312 ! #, c-format ! msgid "%s disabled, use normal debugging flags" ! msgstr "" ! ! #: final.c:3299 ! #, c-format ! msgid "invalid `asm': %s" ! msgstr "ogiltig \"asm\": %s" ! ! #: final.c:3301 #, c-format msgid "output_operand: %s" msgstr "" ! #: final.c:3439 #, c-format msgid "operand number missing after %-letter" msgstr "" ! #: final.c:3441 final.c:3476 msgid "operand number out of range" msgstr "" ! #: final.c:3490 ! #, c-format msgid "invalid %%-code" ! msgstr "ogiltig %%-kod" ! #: final.c:3517 msgid "`%l' operand isn't a label" msgstr "" ! #: flow.c:554 ! msgid "function might be possible candidate for attribute `noreturn'" ! msgstr "funktionen är en möjlig kandidat för attributet \"noreturn\"" ! #: flow.c:559 ! msgid "`noreturn' function does return" ! msgstr "\"noreturn\"-funktion returnerar ändå" ! ! #: flow.c:580 ! msgid "control reaches end of non-void function" ! msgstr "Programflödet når slutet på en icke-void-funktion" ! ! #: flow.c:6797 #, c-format msgid "End insn %d for block %d not found in the insn stream." msgstr "" ! #: flow.c:6811 #, c-format msgid "Insn %d is in multiple basic blocks (%d and %d)" msgstr "" ! #: flow.c:6822 #, c-format msgid "Head insn %d for block %d not found in the insn stream." msgstr "" ! #: flow.c:6859 flow.c:6886 #, c-format msgid "Basic block %i edge lists are corrupted" msgstr "" ! #: flow.c:6871 #, c-format msgid "Basic block %d pred edge is corrupted" msgstr "" ! #: flow.c:6901 #, c-format msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d" msgstr "" ! #: flow.c:6909 #, c-format msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d\n" msgstr "" ! #: flow.c:6925 #, c-format msgid "NOTE_INSN_BASIC_BLOCK %d in the middle of basic block %d" msgstr "" ! #: flow.c:6937 #, c-format msgid "In basic block %d:" msgstr "" ! #: flow.c:6999 #, c-format msgid "number of bb notes in insn chain (%d) != n_basic_blocks (%d)" msgstr "" *************** msgstr "" *** 8429,8555 **** msgid "comparison is always %d due to width of bitfield" msgstr "" ! #: fold-const.c:4071 fold-const.c:4088 #, c-format msgid "comparison is always %d" ! msgstr "" ! #: fold-const.c:4219 msgid "`or' of unmatched not-equal tests is always 1" msgstr "" ! #: fold-const.c:4224 msgid "`and' of mutually exclusive equal-tests is always 0" msgstr "" ! #: function.c:5223 #, c-format msgid "`%s' might be used uninitialized in this function" msgstr "" ! #: function.c:5230 #, c-format msgid "variable `%s' might be clobbered by `longjmp' or `vfork'" msgstr "" ! #: function.c:5249 #, c-format msgid "argument `%s' might be clobbered by `longjmp' or `vfork'" msgstr "" ! #: function.c:6009 msgid "function returns an aggregate" msgstr "" ! #: function.c:6518 #, c-format msgid "unused parameter `%s'" ! msgstr "" ! #: gcc.c:901 #, c-format msgid "Ambiguous abbreviation %s" msgstr "Tvetydig förkortning %s" ! #: gcc.c:928 #, c-format msgid "Incomplete `%s' option" ! msgstr "" ! #: gcc.c:939 #, c-format msgid "Missing argument to `%s' option" ! msgstr "" ! #: gcc.c:952 #, c-format msgid "Extraneous argument to `%s' option" msgstr "" ! #: gcc.c:1123 msgid "Using builtin specs.\n" msgstr "" ! #: gcc.c:1203 #, c-format msgid "" "Setting spec %s to '%s'\n" "\n" msgstr "" ! #: gcc.c:1394 #, c-format msgid "Reading specs from %s\n" msgstr "" ! #: gcc.c:1491 gcc.c:1509 msgid "specs %%include syntax malformed after %ld characters" msgstr "" ! #: gcc.c:1517 #, c-format msgid "Could not find specs file %s\n" msgstr "" ! #: gcc.c:1533 gcc.c:1541 gcc.c:1550 gcc.c:1559 msgid "specs %%rename syntax malformed after %ld characters" msgstr "" ! #: gcc.c:1568 #, c-format msgid "specs %s spec was not found to be renamed" msgstr "" ! #: gcc.c:1575 #, c-format msgid "rename spec %s to %s\n" msgstr "" ! #: gcc.c:1577 #, c-format msgid "" "spec is '%s'\n" "\n" msgstr "" ! #: gcc.c:1590 msgid "specs unknown %% command after %ld characters" msgstr "" ! #: gcc.c:1601 gcc.c:1614 #, c-format msgid "specs file malformed after %ld characters" msgstr "" ! #: gcc.c:1668 msgid "spec file has no spec for linking" msgstr "specfilen har ingen spec för länkning" ! #: gcc.c:2436 msgid "-pipe not supported" msgstr "-pipe stöds inte" ! #: gcc.c:2472 msgid "" "\n" "Go ahead? (y or n) " --- 12786,12915 ---- msgid "comparison is always %d due to width of bitfield" msgstr "" ! #: fold-const.c:4072 fold-const.c:4089 #, c-format msgid "comparison is always %d" ! msgstr "jämförelsen är alltid %d" ! #: fold-const.c:4220 msgid "`or' of unmatched not-equal tests is always 1" msgstr "" ! #: fold-const.c:4225 msgid "`and' of mutually exclusive equal-tests is always 0" msgstr "" ! #: function.c:5401 #, c-format msgid "`%s' might be used uninitialized in this function" msgstr "" ! #: function.c:5408 #, c-format msgid "variable `%s' might be clobbered by `longjmp' or `vfork'" msgstr "" ! #: function.c:5427 #, c-format msgid "argument `%s' might be clobbered by `longjmp' or `vfork'" msgstr "" ! #: function.c:6227 msgid "function returns an aggregate" msgstr "" ! #: function.c:6724 #, c-format msgid "unused parameter `%s'" ! msgstr "oanvänd parameter \"%s\"" ! #: gcc.c:1002 #, c-format msgid "Ambiguous abbreviation %s" msgstr "Tvetydig förkortning %s" ! #: gcc.c:1029 #, c-format msgid "Incomplete `%s' option" ! msgstr "Inkomplett flagga \"%s\"" ! #: gcc.c:1040 #, c-format msgid "Missing argument to `%s' option" ! msgstr "Saknar argument till flaggan \"%s\"" ! #: gcc.c:1053 #, c-format msgid "Extraneous argument to `%s' option" msgstr "" ! #: gcc.c:1356 msgid "Using builtin specs.\n" msgstr "" ! #: gcc.c:1522 #, c-format msgid "" "Setting spec %s to '%s'\n" "\n" msgstr "" ! #: gcc.c:1620 #, c-format msgid "Reading specs from %s\n" msgstr "" ! #: gcc.c:1718 gcc.c:1737 ! #, c-format msgid "specs %%include syntax malformed after %ld characters" msgstr "" ! #: gcc.c:1745 #, c-format msgid "Could not find specs file %s\n" msgstr "" ! #: gcc.c:1761 gcc.c:1769 gcc.c:1778 gcc.c:1787 ! #, c-format msgid "specs %%rename syntax malformed after %ld characters" msgstr "" ! #: gcc.c:1796 #, c-format msgid "specs %s spec was not found to be renamed" msgstr "" ! #: gcc.c:1803 #, c-format msgid "rename spec %s to %s\n" msgstr "" ! #: gcc.c:1805 #, c-format msgid "" "spec is '%s'\n" "\n" msgstr "" ! #: gcc.c:1818 ! #, c-format msgid "specs unknown %% command after %ld characters" msgstr "" ! #: gcc.c:1829 gcc.c:1842 #, c-format msgid "specs file malformed after %ld characters" msgstr "" ! #: gcc.c:1896 msgid "spec file has no spec for linking" msgstr "specfilen har ingen spec för länkning" ! #: gcc.c:2603 msgid "-pipe not supported" msgstr "-pipe stöds inte" ! #: gcc.c:2639 msgid "" "\n" "Go ahead? (y or n) " *************** msgstr "" *** 8557,8563 **** "\n" "Fortsätta? (y eller n) " ! #: gcc.c:2571 #, c-format msgid "" "Internal error: %s (program %s)\n" --- 12917,12923 ---- "\n" "Fortsätta? (y eller n) " ! #: gcc.c:2738 #, c-format msgid "" "Internal error: %s (program %s)\n" *************** msgstr "" *** 8568,8621 **** "Var vänlig och skicka in en felrapport.\n" "Se %s för instruktioner." ! #: gcc.c:2589 #, c-format msgid "# %s %.2f %.2f\n" ! msgstr "" ! #: gcc.c:2716 #, c-format msgid "Usage: %s [options] file...\n" msgstr "Användning: %s [flaggor] fil...\n" ! #: gcc.c:2717 msgid "Options:\n" msgstr "Flaggor:\n" ! #: gcc.c:2719 msgid " -pass-exit-codes Exit with highest error code from a phase\n" msgstr "" " -pass-exit-codes Avsluta med högsta felkoden från någon av " "faserna\n" ! #: gcc.c:2720 msgid " --help Display this information\n" msgstr " --help Visa den här informatationen\n" ! #: gcc.c:2722 msgid " (Use '-v --help' to display command line options of sub-processes)\n" msgstr "" " (Använd '-v --help' för att visa kommandoradsflaggor för barnprocesser)\n" ! #: gcc.c:2723 msgid " -dumpspecs Display all of the built in spec strings\n" msgstr " -dumpspecs Visa de inbyggda spec-strängarna\n" ! #: gcc.c:2724 msgid " -dumpversion Display the version of the compiler\n" msgstr " -dumpversion Visa kompilatorns version\n" ! #: gcc.c:2725 msgid " -dumpmachine Display the compiler's target processor\n" msgstr " -dumpmachine Visa kompilatorns målprocessor\n" ! #: gcc.c:2726 msgid "" " -print-search-dirs Display the directories in the compiler's search " "path\n" msgstr " -print-search-dirs Visa katalogerna i kompilatorns sökväg\n" ! #: gcc.c:2727 msgid "" " -print-libgcc-file-name Display the name of the compiler's companion " "library\n" --- 12928,12987 ---- "Var vänlig och skicka in en felrapport.\n" "Se %s för instruktioner." ! #: gcc.c:2756 #, c-format msgid "# %s %.2f %.2f\n" ! msgstr "# %s %.2f %.2f\n" ! #: gcc.c:2885 #, c-format msgid "Usage: %s [options] file...\n" msgstr "Användning: %s [flaggor] fil...\n" ! #: gcc.c:2886 msgid "Options:\n" msgstr "Flaggor:\n" ! #: gcc.c:2888 msgid " -pass-exit-codes Exit with highest error code from a phase\n" msgstr "" " -pass-exit-codes Avsluta med högsta felkoden från någon av " "faserna\n" ! #: gcc.c:2889 msgid " --help Display this information\n" msgstr " --help Visa den här informatationen\n" ! #: gcc.c:2890 ! msgid "" ! " --target-help Display target specific command line options\n" ! msgstr "" ! " --target-help Visa specifika kommandoradsflaggor för mål\n" ! ! #: gcc.c:2892 msgid " (Use '-v --help' to display command line options of sub-processes)\n" msgstr "" " (Använd '-v --help' för att visa kommandoradsflaggor för barnprocesser)\n" ! #: gcc.c:2893 msgid " -dumpspecs Display all of the built in spec strings\n" msgstr " -dumpspecs Visa de inbyggda spec-strängarna\n" ! #: gcc.c:2894 msgid " -dumpversion Display the version of the compiler\n" msgstr " -dumpversion Visa kompilatorns version\n" ! #: gcc.c:2895 msgid " -dumpmachine Display the compiler's target processor\n" msgstr " -dumpmachine Visa kompilatorns målprocessor\n" ! #: gcc.c:2896 msgid "" " -print-search-dirs Display the directories in the compiler's search " "path\n" msgstr " -print-search-dirs Visa katalogerna i kompilatorns sökväg\n" ! #: gcc.c:2897 msgid "" " -print-libgcc-file-name Display the name of the compiler's companion " "library\n" *************** msgstr "" *** 8623,8634 **** " -print-libgcc-file-name Visa namnet på kompilatorns medföljande " "bibliotek\n" ! #: gcc.c:2728 msgid " -print-file-name= Display the full path to library \n" msgstr "" " -print-file-name= Visa hela sökvägen till länkbibliotek \n" ! #: gcc.c:2729 msgid "" " -print-prog-name= Display the full path to compiler component " "\n" --- 12989,13000 ---- " -print-libgcc-file-name Visa namnet på kompilatorns medföljande " "bibliotek\n" ! #: gcc.c:2898 msgid " -print-file-name= Display the full path to library \n" msgstr "" " -print-file-name= Visa hela sökvägen till länkbibliotek \n" ! #: gcc.c:2899 msgid "" " -print-prog-name= Display the full path to compiler component " "\n" *************** msgstr "" *** 8636,8649 **** " -print-prog-name= Visa fulla sökvägen till kompilatorkomponenten " "\n" ! #: gcc.c:2730 msgid "" " -print-multi-directory Display the root directory for versions of " "libgcc\n" msgstr "" " -print-multi-directory Visa rotkatalogen för olika versioner av libgcc\n" ! #: gcc.c:2731 msgid "" " -print-multi-lib Display the mapping between command line options " "and\n" --- 13002,13015 ---- " -print-prog-name= Visa fulla sökvägen till kompilatorkomponenten " "\n" ! #: gcc.c:2900 msgid "" " -print-multi-directory Display the root directory for versions of " "libgcc\n" msgstr "" " -print-multi-directory Visa rotkatalogen för olika versioner av libgcc\n" ! #: gcc.c:2901 msgid "" " -print-multi-lib Display the mapping between command line options " "and\n" *************** msgstr "" *** 8652,8658 **** " -print-multi-lib Visa mappningen mellan kommandoradsflaggor och\n" " multipla biblioteks sökkataloger\n" ! #: gcc.c:2734 msgid "" " -Wa, Pass comma-separated on to the " "assembler\n" --- 13018,13024 ---- " -print-multi-lib Visa mappningen mellan kommandoradsflaggor och\n" " multipla biblioteks sökkataloger\n" ! #: gcc.c:2904 msgid "" " -Wa, Pass comma-separated on to the " "assembler\n" *************** msgstr "" *** 8660,8666 **** " -Wa, Skicka kommaseparerade till " "assembleraren\n" ! #: gcc.c:2735 msgid "" " -Wp, Pass comma-separated on to the " "preprocessor\n" --- 13026,13032 ---- " -Wa, Skicka kommaseparerade till " "assembleraren\n" ! #: gcc.c:2905 msgid "" " -Wp, Pass comma-separated on to the " "preprocessor\n" *************** msgstr "" *** 8668,8697 **** " -Wp, Skicka kommaseparerade till " "preprocessorn\n" ! #: gcc.c:2736 msgid "" " -Wl, Pass comma-separated on to the linker\n" msgstr "" " -Wl, Skicka kommaseparerade till länkaren\n" ! #: gcc.c:2737 msgid " -Xlinker Pass on to the linker\n" msgstr " -Xlinker Skicka vidare till länkaren\n" ! #: gcc.c:2738 msgid " -save-temps Do not delete intermediate files\n" msgstr " -save-temps Radera inte temporära filer\n" ! #: gcc.c:2739 msgid " -pipe Use pipes rather than intermediate files\n" msgstr " -pipe Använd rör istället för temporära filer\n" ! #: gcc.c:2740 msgid " -time Time the execution of each subprocess\n" msgstr "" " -time Mät tiden det tar att exekvera varje barnprocess\n" ! #: gcc.c:2741 msgid "" " -specs= Override builtin specs with the contents of " "\n" --- 13034,13063 ---- " -Wp, Skicka kommaseparerade till " "preprocessorn\n" ! #: gcc.c:2906 msgid "" " -Wl, Pass comma-separated on to the linker\n" msgstr "" " -Wl, Skicka kommaseparerade till länkaren\n" ! #: gcc.c:2907 msgid " -Xlinker Pass on to the linker\n" msgstr " -Xlinker Skicka vidare till länkaren\n" ! #: gcc.c:2908 msgid " -save-temps Do not delete intermediate files\n" msgstr " -save-temps Radera inte temporära filer\n" ! #: gcc.c:2909 msgid " -pipe Use pipes rather than intermediate files\n" msgstr " -pipe Använd rör istället för temporära filer\n" ! #: gcc.c:2910 msgid " -time Time the execution of each subprocess\n" msgstr "" " -time Mät tiden det tar att exekvera varje barnprocess\n" ! #: gcc.c:2911 msgid "" " -specs= Override builtin specs with the contents of " "\n" *************** msgstr "" *** 8699,8734 **** " -specs= Använd innehållet i istället för inbyggda " "spec\n" ! #: gcc.c:2742 msgid "" " -std= Assume that the input sources are for \n" msgstr "" " -std= Antag att källkodsfilerna är för \n" ! #: gcc.c:2743 msgid "" " -B Add to the compiler's search paths\n" msgstr "" " -B Lägg till till kompilatorns sökvägar\n" ! #: gcc.c:2744 msgid " -b Run gcc for target , if installed\n" msgstr "" " -b Kör gcc för mål , om det är installerat\n" ! #: gcc.c:2745 msgid "" " -V Run gcc version number , if installed\n" msgstr "" " -V Kör gcc version , om den är installerad\n" ! #: gcc.c:2746 msgid "" " -v Display the programs invoked by the compiler\n" msgstr "" " -v Visa vilka program som körs av kompilatorn\n" ! #: gcc.c:2747 msgid "" " -E Preprocess only; do not compile, assemble or " "link\n" --- 13065,13100 ---- " -specs= Använd innehållet i istället för inbyggda " "spec\n" ! #: gcc.c:2912 msgid "" " -std= Assume that the input sources are for \n" msgstr "" " -std= Antag att källkodsfilerna är för \n" ! #: gcc.c:2913 msgid "" " -B Add to the compiler's search paths\n" msgstr "" " -B Lägg till till kompilatorns sökvägar\n" ! #: gcc.c:2914 msgid " -b Run gcc for target , if installed\n" msgstr "" " -b Kör gcc för mål , om det är installerat\n" ! #: gcc.c:2915 msgid "" " -V Run gcc version number , if installed\n" msgstr "" " -V Kör gcc version , om den är installerad\n" ! #: gcc.c:2916 msgid "" " -v Display the programs invoked by the compiler\n" msgstr "" " -v Visa vilka program som körs av kompilatorn\n" ! #: gcc.c:2917 msgid "" " -E Preprocess only; do not compile, assemble or " "link\n" *************** msgstr "" *** 8736,8754 **** " -E Preprocessa bara; kompilera, assemblera och\n" " länka inte\n" ! #: gcc.c:2748 msgid " -S Compile only; do not assemble or link\n" msgstr " -S Kompilera bara; assemblera och länka inte\n" ! #: gcc.c:2749 msgid " -c Compile and assemble, but do not link\n" msgstr " -c Kompilera och assemblera, men länka inte\n" ! #: gcc.c:2750 msgid " -o Place the output into \n" msgstr " -o Placera utdata i \n" ! #: gcc.c:2751 msgid "" " -x Specify the language of the following input " "files\n" --- 13102,13120 ---- " -E Preprocessa bara; kompilera, assemblera och\n" " länka inte\n" ! #: gcc.c:2918 msgid " -S Compile only; do not assemble or link\n" msgstr " -S Kompilera bara; assemblera och länka inte\n" ! #: gcc.c:2919 msgid " -c Compile and assemble, but do not link\n" msgstr " -c Kompilera och assemblera, men länka inte\n" ! #: gcc.c:2920 msgid " -o Place the output into \n" msgstr " -o Placera utdata i \n" ! #: gcc.c:2921 msgid "" " -x Specify the language of the following input " "files\n" *************** msgstr "" *** 8765,8883 **** " 'none' innebär att man använder standardmetoden,\n" " att man gissar språk beroende på filändelse\n" ! #: gcc.c:2758 #, c-format msgid "" "\n" ! "Options starting with -g, -f, -m, -O or -W are automatically passed on to\n" ! "the various sub-processes invoked by %s. In order to pass other options\n" ! "on to these processes the -W options must be used.\n" msgstr "" "\n" ! "Flaggor som startar med -g, -f, -m, -O eller -W skickas automatiskt\n" "vidare till de barnprocesser som startas av %s. För att skicka med andra\n" "flaggor till dessa processer måste flaggan -W användas.\n" ! #: gcc.c:3106 msgid "argument to `-Xlinker' is missing" msgstr "" ! #: gcc.c:3123 msgid "argument to `-specs' is missing" ! msgstr "" ! #: gcc.c:3138 msgid "argument to `-specs=' is missing" ! msgstr "" ! #: gcc.c:3160 msgid "argument to `-b' is missing" ! msgstr "" ! #: gcc.c:3173 msgid "argument to `-B' is missing" ! msgstr "" ! #: gcc.c:3226 msgid "argument to `-V' is missing" ! msgstr "" ! #: gcc.c:3247 gcc.c:3254 gcc.c:3261 msgid "invalid version number format" ! msgstr "" ! #: gcc.c:3332 msgid "cannot specify -o with -c or -S and multiple compilations" msgstr "" ! #: gcc.c:3501 ! msgid "Warning: -pipe ignored since -save-temps specified" ! msgstr "" ! #: gcc.c:3505 ! msgid "Warning: -pipe ignored since -time specified" ! msgstr "" ! #: gcc.c:3515 msgid "argument to `-x' is missing" ! msgstr "" ! #: gcc.c:3543 #, c-format msgid "argument to `-%s' is missing" ! msgstr "" ! #: gcc.c:3603 #, c-format msgid "Warning: `-x %s' after last input file has no effect" msgstr "" ! #: gcc.c:3800 msgid "Invalid specification! Bug in cc." msgstr "" #. Catch the case where a spec string contains something like #. '%{foo:%*}'. ie there is no * in the pattern on the left #. hand side of the :. ! #: gcc.c:4409 msgid "Spec failure: '%%*' has not been initialised by pattern match" msgstr "" ! #: gcc.c:4418 msgid "Warning: use of obsolete %%[ operator in specs" msgstr "" ! #: gcc.c:4436 #, c-format msgid "Processing spec %c%s%c, which is '%s'\n" msgstr "" ! #: gcc.c:4560 #, c-format msgid "Spec failure: Unrecognised spec option '%c'" msgstr "" ! #: gcc.c:5348 #, c-format msgid "unrecognized option `-%s'" ! msgstr "" ! #: gcc.c:5354 #, c-format msgid "install: %s%s\n" msgstr "" ! #: gcc.c:5355 #, c-format msgid "programs: %s\n" ! msgstr "" ! #: gcc.c:5356 #, c-format msgid "libraries: %s\n" ! msgstr "" ! #: gcc.c:5394 msgid "" "\n" "For bug reporting instructions, please see:\n" --- 13131,13260 ---- " 'none' innebär att man använder standardmetoden,\n" " att man gissar språk beroende på filändelse\n" ! #: gcc.c:2928 #, c-format msgid "" "\n" ! "Options starting with -g, -f, -m, -O, -W, or --param are automatically\n" ! " passed on to the various sub-processes invoked by %s. In order to pass\n" ! " other options on to these processes the -W options must be used.\n" msgstr "" "\n" ! "Flaggor som börjar med -g, -f, -m, -O, -W eller --param skickas automatiskt\n" "vidare till de barnprocesser som startas av %s. För att skicka med andra\n" "flaggor till dessa processer måste flaggan -W användas.\n" ! #: gcc.c:3295 msgid "argument to `-Xlinker' is missing" + msgstr "argument till \"-Xlinker\" saknas" + + #: gcc.c:3303 + msgid "argument to `-l' is missing" msgstr "" ! #: gcc.c:3320 msgid "argument to `-specs' is missing" ! msgstr "argument till \"-specs\" saknas" ! #: gcc.c:3335 msgid "argument to `-specs=' is missing" ! msgstr "argument till \"-specs=\" saknas" ! #: gcc.c:3357 msgid "argument to `-b' is missing" ! msgstr "argument till \"-b\" saknas" ! #: gcc.c:3370 msgid "argument to `-B' is missing" ! msgstr "argument till \"-B\" saknas" ! #: gcc.c:3421 msgid "argument to `-V' is missing" ! msgstr "argument till \"-V\" saknas" ! #: gcc.c:3442 gcc.c:3449 gcc.c:3456 msgid "invalid version number format" ! msgstr "ogiltigt format på versionsnummer" ! #: gcc.c:3567 msgid "cannot specify -o with -c or -S and multiple compilations" msgstr "" ! #: gcc.c:3769 ! msgid "Warning: -pipe ignored because -save-temps specified" ! msgstr "Varning: -pipe ignorerad eftersom -save-temps angiven" ! #: gcc.c:3773 ! msgid "Warning: -pipe ignored because -time specified" ! msgstr "Varning: -pipe ignorerad eftersom -time angiven" ! #: gcc.c:3783 msgid "argument to `-x' is missing" ! msgstr "argument till \"-x\" saknas" ! #: gcc.c:3811 #, c-format msgid "argument to `-%s' is missing" ! msgstr "argument till \"-%s\" saknas" ! #: gcc.c:3874 #, c-format msgid "Warning: `-x %s' after last input file has no effect" msgstr "" ! #: gcc.c:4079 msgid "Invalid specification! Bug in cc." msgstr "" + #: gcc.c:4228 + #, c-format + msgid "%s\n" + msgstr "%s\n" + #. Catch the case where a spec string contains something like #. '%{foo:%*}'. ie there is no * in the pattern on the left #. hand side of the :. ! #: gcc.c:4745 ! #, c-format msgid "Spec failure: '%%*' has not been initialised by pattern match" msgstr "" ! #: gcc.c:4754 ! #, c-format msgid "Warning: use of obsolete %%[ operator in specs" msgstr "" ! #: gcc.c:4772 #, c-format msgid "Processing spec %c%s%c, which is '%s'\n" msgstr "" ! #: gcc.c:4897 #, c-format msgid "Spec failure: Unrecognised spec option '%c'" msgstr "" ! #: gcc.c:5751 #, c-format msgid "unrecognized option `-%s'" ! msgstr "ej igenkänd flagga `-%s'" ! #: gcc.c:5757 #, c-format msgid "install: %s%s\n" msgstr "" ! #: gcc.c:5758 #, c-format msgid "programs: %s\n" ! msgstr "program: %s\n" ! #: gcc.c:5759 #, c-format msgid "libraries: %s\n" ! msgstr "bibliotek: %s\n" ! #: gcc.c:5807 msgid "" "\n" "For bug reporting instructions, please see:\n" *************** msgstr "" *** 8885,9325 **** "\n" "Instruktioner för bugrapportering, se:\n" ! #: gcc.c:5418 #, c-format ! msgid "gcc version %s\n" msgstr "" ! #: gcc.c:5420 #, c-format msgid "gcc driver version %s executing gcc version %s\n" msgstr "" ! #: gcc.c:5428 msgid "No input files" msgstr "Inga indatafiler" ! #: gcc.c:5465 #, c-format msgid "%s: %s compiler not installed on this system" ! msgstr "" ! #: gcc.c:5535 #, c-format ! msgid "%s: linker input file unused since linking not done" msgstr "" ! #: gcc.c:5578 #, c-format msgid "language %s not recognized" ! msgstr "" ! #: gcov.c:292 msgid "Internal gcov abort.\n" msgstr "" ! #: gcov.c:301 msgid "gcov [-b] [-v] [-n] [-l] [-f] [-o OBJDIR] file\n" ! msgstr "" ! #: gcov.c:421 #, c-format msgid "Could not open basic block file %s.\n" msgstr "" ! #: gcov.c:430 #, c-format msgid "Could not open data file %s.\n" ! msgstr "" ! #: gcov.c:431 msgid "Assuming that all execution counts are zero.\n" msgstr "" ! #: gcov.c:437 #, c-format msgid "Could not open program flow graph file %s.\n" msgstr "" ! #: gcov.c:448 #, c-format msgid "No executable code associated with file %s.\n" msgstr "" ! #: gcov.c:747 profile.c:978 msgid ".da file contents exhausted too early\n" msgstr "" ! #: gcov.c:750 profile.c:981 msgid ".da file contents not exhausted\n" msgstr "" ! #: gcov.c:931 msgid "%6.2f%% of %d source lines executed in function %s\n" ! msgstr "" ! #: gcov.c:935 #, c-format msgid "No executable source lines in function %s\n" ! msgstr "" ! #: gcov.c:942 msgid "%6.2f%% of %d branches executed in function %s\n" ! msgstr "" ! #: gcov.c:946 msgid "%6.2f%% of %d branches taken at least once in function %s\n" ! msgstr "" ! #: gcov.c:951 #, c-format msgid "No branches in function %s\n" ! msgstr "" ! #: gcov.c:953 msgid "%6.2f%% of %d calls executed in function %s\n" ! msgstr "" ! #: gcov.c:957 #, c-format msgid "No calls in function %s\n" ! msgstr "" ! #: gcov.c:1089 #, c-format msgid "didn't use all bb entries of graph, function %s\n" msgstr "" ! #: gcov.c:1091 #, c-format msgid "block_num = %ld, num_blocks = %d\n" msgstr "" ! #: gcov.c:1129 #, c-format msgid "ERROR: too many basic blocks in .bb file %s\n" msgstr "" ! #: gcov.c:1206 msgid "%6.2f%% of %d source lines executed in file %s\n" ! msgstr "" ! #: gcov.c:1210 #, c-format msgid "No executable source lines in file %s\n" msgstr "" ! #: gcov.c:1217 msgid "%6.2f%% of %d branches executed in file %s\n" msgstr "" ! #: gcov.c:1221 msgid "%6.2f%% of %d branches taken at least once in file %s\n" msgstr "" ! #: gcov.c:1226 #, c-format msgid "No branches in file %s\n" ! msgstr "" ! #: gcov.c:1228 msgid "%6.2f%% of %d calls executed in file %s\n" msgstr "" ! #: gcov.c:1232 #, c-format msgid "No calls in file %s\n" ! msgstr "" ! #: gcov.c:1244 #, c-format msgid "Could not open source file %s.\n" ! msgstr "" ! #: gcov.c:1294 #, c-format msgid "Could not open output file %s.\n" ! msgstr "" ! #: gcov.c:1302 #, c-format msgid "Creating %s.\n" ! msgstr "" ! #: gcov.c:1346 #, c-format msgid "call %d never executed\n" ! msgstr "" ! #: gcov.c:1351 #, c-format msgid "call %d returns = %d\n" msgstr "" ! #: gcov.c:1355 msgid "call %d returns = %d%%\n" msgstr "" ! #: gcov.c:1363 #, c-format msgid "branch %d never executed\n" msgstr "" ! #: gcov.c:1369 #, c-format msgid "branch %d taken = %d\n" msgstr "" ! #: gcov.c:1373 msgid "branch %d taken = %d%%\n" msgstr "" ! #: gcov.c:1387 #, c-format msgid "Unexpected EOF while reading source file %s.\n" msgstr "" ! #: ../libiberty/getopt.c:682 #, c-format ! msgid "%s: option `%s' is ambiguous\n" msgstr "" ! #: ../libiberty/getopt.c:707 #, c-format ! msgid "%s: option `--%s' doesn't allow an argument\n" msgstr "" ! #: ../libiberty/getopt.c:712 #, c-format ! msgid "%s: option `%c%s' doesn't allow an argument\n" msgstr "" ! #: ../libiberty/getopt.c:730 ../libiberty/getopt.c:903 #, c-format ! msgid "%s: option `%s' requires an argument\n" msgstr "" ! #. --option ! #: ../libiberty/getopt.c:759 #, c-format ! msgid "%s: unrecognized option `--%s'\n" msgstr "" ! #. +option or -option ! #: ../libiberty/getopt.c:763 #, c-format ! msgid "%s: unrecognized option `%c%s'\n" msgstr "" ! #. 1003.2 specifies the format of this message. ! #: ../libiberty/getopt.c:789 #, c-format ! msgid "%s: illegal option -- %c\n" msgstr "" ! #: ../libiberty/getopt.c:792 #, c-format ! msgid "%s: invalid option -- %c\n" msgstr "" ! #. 1003.2 specifies the format of this message. ! #: ../libiberty/getopt.c:822 ../libiberty/getopt.c:952 #, c-format ! msgid "%s: option requires an argument -- %c\n" msgstr "" ! #: ../libiberty/getopt.c:869 #, c-format ! msgid "%s: option `-W %s' is ambiguous\n" msgstr "" ! #: ../libiberty/getopt.c:887 #, c-format ! msgid "%s: option `-W %s' doesn't allow an argument\n" msgstr "" ! #: haifa-sched.c:232 #, c-format ! msgid "fix_sched_param: unknown param: %s" msgstr "" ! #: hash.c:52 hash.c:59 hash.c:162 hash.c:239 ! msgid "no memory" msgstr "" ! #: integrate.c:153 ! msgid "varargs function cannot be inline" msgstr "" ! #: integrate.c:156 ! msgid "function using alloca cannot be inline" msgstr "" ! #: integrate.c:159 ! msgid "function using setjmp cannot be inline" msgstr "" ! #: integrate.c:162 ! msgid "function with nested functions cannot be inline" msgstr "" ! #: integrate.c:166 ! msgid "function with label addresses used in initializers cannot inline" msgstr "" ! #: integrate.c:173 integrate.c:217 ! msgid "function too large to be inline" msgstr "" ! #: integrate.c:183 ! msgid "no prototype, and parameter address used; cannot be inline" msgstr "" ! #: integrate.c:190 integrate.c:246 ! msgid "inline functions not supported for this return value type" msgstr "" ! #: integrate.c:195 ! msgid "function with varying-size return value cannot be inline" msgstr "" ! #: integrate.c:202 ! msgid "function with varying-size parameter cannot be inline" msgstr "" ! #: integrate.c:205 ! msgid "function with transparent unit parameter cannot be inline" msgstr "" ! #: integrate.c:224 ! msgid "function with computed jump cannot inline" msgstr "" ! #: integrate.c:228 ! msgid "function with nonlocal goto cannot be inline" msgstr "" ! #: integrate.c:240 ! msgid "function with complex parameters cannot be inline" msgstr "" ! #: integrate.c:253 ! msgid "function with target specific attribute(s) cannot be inlined" msgstr "" ! #: objc/objc-act.c:760 ! msgid "Objective-C text in C source file" msgstr "" ! #: objc/objc-act.c:814 ! msgid "no class name specified as argument to -fconstant-string-class" msgstr "" ! #: objc/objc-act.c:977 #, c-format ! msgid "object does not conform to the `%s' protocol" msgstr "" ! #: objc/objc-act.c:1015 #, c-format ! msgid "class `%s' does not implement the `%s' protocol" msgstr "" ! #: objc/objc-act.c:1097 #, c-format ! msgid "`%s' cannot be statically allocated" msgstr "" ! #: objc/objc-act.c:1098 ! msgid "statically allocated objects not supported" msgstr "" ! #: objc/objc-act.c:1156 #, c-format ! msgid "Unexpected type for `id' (%s)" msgstr "" ! #: objc/objc-act.c:1160 msgid "Undefined type `id', please import " msgstr "" ! #: objc/objc-act.c:1206 objc/objc-act.c:5375 #, c-format msgid "Cannot find protocol declaration for `%s'" msgstr "" ! #: objc-parse.y:1358 objc/objc-act.c:1431 objc/objc-act.c:5901 ! #: objc/objc-act.c:6202 objc/objc-act.c:6251 objc/objc-act.c:6287 #, c-format msgid "Cannot find interface declaration for `%s'" msgstr "" ! #: objc/objc-act.c:2467 #, c-format ! msgid "Cannot find class `%s'" msgstr "" ! #: objc/objc-act.c:2469 #, c-format msgid "Class `%s' already exists" ! msgstr "" #. fatal did not work with 2 args...should fix ! #: objc/objc-act.c:2596 #, c-format msgid "Cannot find interface declaration for `%s', superclass of `%s'" msgstr "" ! #: objc/objc-act.c:2604 #, c-format msgid "Circular inheritance in interface declaration for `%s'" ! msgstr "" ! #: objc/objc-act.c:3652 objc/objc-act.c:3669 msgid "inconsistent instance variable specification" msgstr "" ! #: objc/objc-act.c:4862 #, c-format msgid "multiple declarations for method `%s'" ! msgstr "" ! #: objc/objc-act.c:4979 #, c-format msgid "invalid receiver type `%s'" ! msgstr "" ! #: objc/objc-act.c:5047 objc/objc-act.c:5073 objc/objc-act.c:5121 #, c-format msgid "`%s' does not respond to `%s'" ! msgstr "" ! #: objc/objc-act.c:5053 objc/objc-act.c:7311 #, c-format msgid "no super class declared in interface for `%s'" ! msgstr "" ! #: objc/objc-act.c:5151 msgid "cannot find class (factory) method." ! msgstr "" ! #: objc/objc-act.c:5152 objc/objc-act.c:5196 #, c-format msgid "return type for `%s' defaults to id" ! msgstr "" ! #: objc/objc-act.c:5169 #, c-format msgid "method `%s' not implemented by protocol." ! msgstr "" ! #: objc/objc-act.c:5178 msgid "return type defaults to id" ! msgstr "" ! #: objc/objc-act.c:5195 msgid "cannot find method." ! msgstr "" #. Historically, a class method that produced objects (factory #. method) would assign `self' to the instance that it --- 13262,14356 ---- "\n" "Instruktioner för bugrapportering, se:\n" ! #: gcc.c:5823 #, c-format ! msgid "Configured with: %s\n" msgstr "" ! #: gcc.c:5837 ! #, c-format ! msgid "Thread model: %s\n" ! msgstr "" ! ! #: gcc.c:5848 ! #, c-format ! msgid "gcc version %s\n" ! msgstr "gcc version %s\n" ! ! #: gcc.c:5850 #, c-format msgid "gcc driver version %s executing gcc version %s\n" msgstr "" ! #: gcc.c:5858 msgid "No input files" msgstr "Inga indatafiler" ! #: gcc.c:5895 #, c-format msgid "%s: %s compiler not installed on this system" ! msgstr "%s: kompilatorn %s är inte installerad på detta system" ! #: gcc.c:5965 #, c-format ! msgid "%s: linker input file unused because linking not done" msgstr "" ! #: gcc.c:6008 #, c-format msgid "language %s not recognized" ! msgstr "språk %s känns inte igen" ! #: gcc.c:6111 ! msgid "Internal gcc abort." ! msgstr "Intern gcc-halt (abort)." ! ! #: gcov.c:299 msgid "Internal gcov abort.\n" msgstr "" ! #: gcov.c:308 msgid "gcov [-b] [-v] [-n] [-l] [-f] [-o OBJDIR] file\n" ! msgstr "gcov [-b] [-v] [-n] [-l] [-f] [-o OBJKAT] fil\n" ! #: gcov.c:428 #, c-format msgid "Could not open basic block file %s.\n" msgstr "" ! #: gcov.c:437 #, c-format msgid "Could not open data file %s.\n" ! msgstr "Kunde inte öppna datafil %s.\n" ! #: gcov.c:438 msgid "Assuming that all execution counts are zero.\n" msgstr "" ! #: gcov.c:444 #, c-format msgid "Could not open program flow graph file %s.\n" msgstr "" ! #: gcov.c:455 #, c-format msgid "No executable code associated with file %s.\n" msgstr "" ! #: gcov.c:754 profile.c:977 msgid ".da file contents exhausted too early\n" msgstr "" ! #: gcov.c:757 profile.c:980 msgid ".da file contents not exhausted\n" msgstr "" ! #: gcov.c:938 ! #, c-format msgid "%6.2f%% of %d source lines executed in function %s\n" ! msgstr "%6.2f%% av %d källkodsrader körda i funktion %s\n" ! #: gcov.c:942 #, c-format msgid "No executable source lines in function %s\n" ! msgstr "Inga körbara källkodsrader i funktion %s\n" ! #: gcov.c:949 ! #, c-format msgid "%6.2f%% of %d branches executed in function %s\n" ! msgstr "%6.2f%% av %d hopp utförda i funktion %s\n" ! #: gcov.c:953 ! #, c-format msgid "%6.2f%% of %d branches taken at least once in function %s\n" ! msgstr "%6.2f%% av %d hopp tagna minst en gång i funktion %s\n" ! #: gcov.c:958 #, c-format msgid "No branches in function %s\n" ! msgstr "Inga hopp i funktionen %s\n" ! #: gcov.c:960 ! #, c-format msgid "%6.2f%% of %d calls executed in function %s\n" ! msgstr "%6.2f%% av %d anrop tagna i funktion %s\n" ! #: gcov.c:964 #, c-format msgid "No calls in function %s\n" ! msgstr "Inga anrop i funktion %s\n" ! #: gcov.c:1096 #, c-format msgid "didn't use all bb entries of graph, function %s\n" msgstr "" ! #: gcov.c:1098 #, c-format msgid "block_num = %ld, num_blocks = %d\n" msgstr "" ! #: gcov.c:1136 #, c-format msgid "ERROR: too many basic blocks in .bb file %s\n" msgstr "" ! #: gcov.c:1213 ! #, c-format msgid "%6.2f%% of %d source lines executed in file %s\n" ! msgstr "%6.2f%% av %d källkodsrader körda i fil %s\n" ! #: gcov.c:1217 #, c-format msgid "No executable source lines in file %s\n" msgstr "" ! #: gcov.c:1224 ! #, c-format msgid "%6.2f%% of %d branches executed in file %s\n" msgstr "" ! #: gcov.c:1228 ! #, c-format msgid "%6.2f%% of %d branches taken at least once in file %s\n" msgstr "" ! #: gcov.c:1233 #, c-format msgid "No branches in file %s\n" ! msgstr "Inga hopp i fil %s\n" ! #: gcov.c:1235 ! #, c-format msgid "%6.2f%% of %d calls executed in file %s\n" msgstr "" ! #: gcov.c:1239 #, c-format msgid "No calls in file %s\n" ! msgstr "Inga anrop i fil %s\n" ! #: gcov.c:1251 #, c-format msgid "Could not open source file %s.\n" ! msgstr "Kunde inte öppna källkodsfil %s.\n" ! #: gcov.c:1301 #, c-format msgid "Could not open output file %s.\n" ! msgstr "Kunde inte öppna utdatafil %s.\n" ! #: gcov.c:1309 #, c-format msgid "Creating %s.\n" ! msgstr "Skapar %s.\n" ! #: gcov.c:1353 #, c-format msgid "call %d never executed\n" ! msgstr "anrop %d aldrig utfört\n" ! #: gcov.c:1358 #, c-format msgid "call %d returns = %d\n" msgstr "" ! #: gcov.c:1362 ! #, c-format msgid "call %d returns = %d%%\n" msgstr "" ! #: gcov.c:1370 #, c-format msgid "branch %d never executed\n" msgstr "" ! #: gcov.c:1376 #, c-format msgid "branch %d taken = %d\n" msgstr "" ! #: gcov.c:1380 ! #, c-format msgid "branch %d taken = %d%%\n" msgstr "" ! #: gcov.c:1394 #, c-format msgid "Unexpected EOF while reading source file %s.\n" msgstr "" ! #: gcse.c:766 #, c-format ! msgid "GCSE disabled: %d > 1000 basic blocks and %d >= 20 edges/basic block" msgstr "" ! #: gcse.c:778 #, c-format ! msgid "GCSE disabled: %d basic blocks and %d registers" msgstr "" ! #: haifa-sched.c:193 #, c-format ! msgid "fix_sched_param: unknown param: %s" ! msgstr "fix_sched_param: okänd param: %s" ! ! #: integrate.c:142 ! msgid "function cannot be inline" ! msgstr "funktion \"%s\" kan inte deklareras som \"mutable\"" ! ! #: integrate.c:147 ! msgid "varargs function cannot be inline" msgstr "" ! #: integrate.c:150 ! msgid "function using alloca cannot be inline" ! msgstr "" ! ! #: integrate.c:153 ! msgid "function using setjmp cannot be inline" ! msgstr "" ! ! #: integrate.c:156 ! msgid "function uses __builtin_eh_return" ! msgstr "funktion använder __builtin_eh_return" ! ! #: integrate.c:159 ! msgid "function with nested functions cannot be inline" ! msgstr "" ! ! #: integrate.c:163 ! msgid "function with label addresses used in initializers cannot inline" ! msgstr "" ! ! #: integrate.c:170 integrate.c:214 ! msgid "function too large to be inline" ! msgstr "" ! ! #: integrate.c:180 ! msgid "no prototype, and parameter address used; cannot be inline" ! msgstr "" ! ! #: integrate.c:187 integrate.c:232 ! msgid "inline functions not supported for this return value type" ! msgstr "" ! ! #: integrate.c:192 ! msgid "function with varying-size return value cannot be inline" ! msgstr "" ! ! #: integrate.c:199 ! msgid "function with varying-size parameter cannot be inline" ! msgstr "" ! ! #: integrate.c:202 ! msgid "function with transparent unit parameter cannot be inline" ! msgstr "" ! ! #: integrate.c:221 ! msgid "function with computed jump cannot inline" ! msgstr "" ! ! #: integrate.c:225 ! msgid "function with nonlocal goto cannot be inline" ! msgstr "" ! ! #: integrate.c:240 ! msgid "function with target specific attribute(s) cannot be inlined" ! msgstr "" ! ! #: java/check-init.c:731 #, c-format ! msgid "internal error in check-init: tree code not implemented: %s" msgstr "" ! #: java/class.c:543 java/class.c:568 ! msgid "internal error - too many interface type" ! msgstr "" ! ! #: java/class.c:702 ! msgid "bad method signature" ! msgstr "" ! ! #: java/class.c:747 ! msgid "misplaced ConstantValue attribute (not in any field)" ! msgstr "" ! ! #: java/class.c:749 #, c-format ! msgid "duplicate ConstanValue atribute for field '%s'" msgstr "" ! #: java/class.c:995 #, c-format ! msgid "field '%s' not found in class" msgstr "" ! #: java/class.c:1203 ! msgid "abstract method in non-abstract class" ! msgstr "" ! ! #: java/class.c:1821 #, c-format ! msgid "non-static method '%s' overrides static method" msgstr "" ! #: java/decl.c:1472 #, c-format ! msgid "In %s: overlapped variable and exception ranges at %d" msgstr "" ! #: java/decl.c:1560 ! msgid "bad type in parameter debug info" ! msgstr "" ! ! #: java/decl.c:1570 #, c-format ! msgid "bad PC range for debug info for local `%s'" msgstr "" ! #: java/expr.c:546 ! msgid "stack underflow - dup* operation" ! msgstr "" ! ! #: java/expr.c:1448 #, c-format ! msgid "" ! "reference `%s' is ambiguous: appears in interface `%s' and interface `%s'" msgstr "" ! #: java/expr.c:1477 #, c-format ! msgid "field `%s' not found" msgstr "" ! #: java/expr.c:1628 ! msgid "ret instruction not implemented" ! msgstr "" ! ! #: java/expr.c:1754 #, c-format ! msgid "method '%s' not found in class" ! msgstr "metod \"%s\" kan inte hittas i klassen" ! ! #: java/expr.c:1890 ! #, c-format ! msgid "failed to find class '%s'" ! msgstr "kunde inte hitta klassen \"%s\"" ! ! #: java/expr.c:1902 ! #, c-format ! msgid "Class '%s' has no method named '%s' matching signature '%s'" msgstr "" ! #: java/expr.c:1912 ! msgid "invokestatic on non static method" msgstr "" ! #: java/expr.c:1917 ! msgid "invokestatic on abstract method" msgstr "" ! #: java/expr.c:1925 ! msgid "invoke[non-static] on static method" msgstr "" ! #: java/expr.c:2202 ! #, c-format ! msgid "Missing field '%s' in '%s'" msgstr "" ! #: java/expr.c:2208 ! #, c-format ! msgid "Mismatching signature for field '%s' in '%s'" msgstr "" ! #: java/expr.c:2247 ! #, c-format ! msgid "assignment to final field `%s' not in field's class" msgstr "" ! #: java/expr.c:2252 ! #, c-format ! msgid "assignment to final static field `%s' not in class initializer" msgstr "" ! #: java/expr.c:2259 ! #, c-format ! msgid "assignment to final field `%s' not in constructor" msgstr "" ! # fixme: spola tillbaka är inte perfekt ! #: java/expr.c:2514 ! #, c-format ! msgid "Can't expand %s" msgstr "" ! #: java/expr.c:2690 ! msgid "invalid PC in line number table" msgstr "" ! #. We've just reached the end of a region of dead code. ! #: java/expr.c:2735 ! #, c-format ! msgid "Unreachable bytecode from %d to before %d." msgstr "" ! #. We've just reached the end of a region of dead code. ! #: java/expr.c:2772 ! #, c-format ! msgid "Unreachable bytecode from %d to the end of the method." msgstr "" ! #. duplicate code from LOAD macro ! #: java/expr.c:3091 ! msgid "unrecogized wide sub-instruction" msgstr "" ! #: java/jcf-io.c:416 ! #, c-format ! msgid "" ! "Source file for class `%s' is newer than its matching class file. Source " ! "file used instead" msgstr "" ! #: java/jcf-parse.c:375 ! msgid "bad string constant" msgstr "" ! #: java/jcf-parse.c:431 ! #, c-format ! msgid "bad value constant type %d, index %d" msgstr "" ! #: java/jcf-parse.c:663 ! #, c-format ! msgid "Cannot find file for class %s." ! msgstr "Kan inte hitta filen med klass %s." ! ! #: java/jcf-parse.c:675 ! msgid "not a valid Java .class file" msgstr "" ! #: java/jcf-parse.c:678 ! msgid "error while parsing constant pool" msgstr "" ! #: java/jcf-parse.c:681 #, c-format ! msgid "error in constant pool entry #%d\n" msgstr "" ! #. FIXME - where was first time ! #: java/jcf-parse.c:693 #, c-format ! msgid "reading class %s for the second time from %s" msgstr "" ! #: java/jcf-parse.c:711 ! msgid "error while parsing fields" ! msgstr "" ! ! #: java/jcf-parse.c:714 ! msgid "error while parsing methods" ! msgstr "" ! ! #: java/jcf-parse.c:717 ! msgid "error while parsing final attributes" ! msgstr "" ! ! #: java/jcf-parse.c:731 #, c-format ! msgid "" ! "The `java.lang.Object' that was found in `%s' didn't have the special zero-" ! "length `gnu.gcj.gcj-compiled' attribute. This generally means that your " ! "classpath is incorrect set. Use `info gcj \"Input Options\"' to see the info " ! "page describing how to set the classpath." msgstr "" ! #: java/jcf-parse.c:804 ! msgid "missing Code attribute" msgstr "" ! #: java/jcf-parse.c:948 toplev.c:2478 #, c-format ! msgid "error closing %s" ! msgstr "fel vid stängning av %s" ! ! #: java/jcf-parse.c:1029 ! msgid "source file seen twice on command line and will be compiled only once." msgstr "" ! #: java/jcf-parse.c:1045 ! msgid "no input file specified" ! msgstr "" ! ! #: java/jcf-parse.c:1061 ! #, c-format ! msgid "can't close input file %s" ! msgstr "" ! ! #: java/jcf-parse.c:1075 ! #, c-format ! msgid "Premature end of input file %s" ! msgstr "" ! ! #: java/jcf-parse.c:1098 ! #, c-format ! msgid "bad zip/jar file %s" ! msgstr "" ! ! #: java/jcf-write.c:2597 ! #, c-format ! msgid "" ! "internal error in generate_bytecode_insn - tree code not implemented: %s" ! msgstr "" ! ! #: java/jcf-write.c:3307 ! #, c-format ! msgid "can't create directory %s" ! msgstr "kan inte skapa katalog %s" ! ! #: java/jcf-write.c:3334 ! #, c-format ! msgid "can't to open %s" ! msgstr "kan inte öppna %s" ! ! #: java/jv-scan.c:183 ! msgid "Only one of `--print-main', `--list-class', and `--complexity' allowed" ! msgstr "" ! ! #: java/jv-scan.c:186 ! #, c-format ! msgid "Can't open output file `%s'" ! msgstr "Kan inte öppna utdatafil \"%s\"" ! ! #: java/jv-scan.c:222 ! #, c-format ! msgid "File not found `%s'" ! msgstr "Kan inte hitta filen \"%s\"" ! ! #: java/jvspec.c:361 ! msgid "can't specify `-D' without `--main'\n" ! msgstr "" ! ! #: java/jvspec.c:369 ! msgid "Warning: already-compiled .class files ignored with -C" ! msgstr "" ! ! #: java/jvspec.c:376 ! msgid "cannot specify both -C and -o" ! msgstr "kan inte ange både -C och -o" ! ! #: java/jvspec.c:388 ! msgid "cannot create temporary file" ! msgstr "" ! ! #: java/jvspec.c:416 ! msgid "using both @FILE with multiple files not implemented" ! msgstr "" ! ! #: java/jvspec.c:457 ! msgid "cannot specify `main' class when not linking" ! msgstr "" ! ! #: java/lang-options.h:32 ! msgid "Disable automatic array bounds checking" ! msgstr "" ! ! #: java/lang-options.h:34 ! msgid "Make is_compiled_class return 1" ! msgstr "" ! ! #: java/lang-options.h:38 ! msgid "Dump class files to .class" ! msgstr "" ! ! #: java/lang-options.h:40 ! msgid "input file is list of file names to compile" ! msgstr "" ! ! #: java/lang-options.h:42 ! msgid "Generate code for Boehm GC" ! msgstr "Generera kod för Boehm GC" ! ! #: java/lang-options.h:44 ! msgid "Don't put synchronization structure in each object" ! msgstr "" ! ! #: java/lang-options.h:46 ! msgid "Assume native functions are implemented using JNI" ! msgstr "" ! ! #: java/lang-options.h:48 ! msgid "Set class path and suppress system path" ! msgstr "" ! ! #: java/lang-options.h:50 ! msgid "Set class path" ! msgstr "" ! ! #: java/lang-options.h:52 ! msgid "Choose class whose main method should be used" ! msgstr "" ! ! #: java/lang-options.h:54 ! msgid "Choose input encoding (default is UTF-8)" ! msgstr "" ! ! #: java/lang-options.h:56 ! msgid "Add directory to class path" ! msgstr "" ! ! #: java/lang-options.h:58 ! msgid "Directory where class files should be written" ! msgstr "" ! ! #: java/lang-options.h:61 ! msgid "Use built-in instructions for division" ! msgstr "" ! ! #: java/lang-options.h:63 ! msgid "Generate null pointer checks inline" ! msgstr "" ! ! #: java/lang-options.h:65 ! msgid "Warn if modifiers are specified when not necessary" ! msgstr "" ! ! #: java/lang-options.h:67 ! msgid "Warn if deprecated empty statements are found" ! msgstr "" ! ! #: java/lang-options.h:69 ! msgid "Warn if .class files are out of date" ! msgstr "" ! ! #: java/lang-options.h:71 ! msgid "Always check for non gcj generated classes archives" ! msgstr "" ! ! #: java/lang.c:391 ! msgid "can't do dependency tracking with input from stdin" ! msgstr "" ! ! #: java/lang.c:407 ! msgid "couldn't determine target name for dependency tracking" ! msgstr "" ! ! #: java/lex.c:297 ! #, c-format ! msgid "" ! "unknown encoding: `%s'\n" ! "This might mean that your locale's encoding is not supported\n" ! "by your system's iconv(3) implementation. If you aren't trying\n" ! "to use a particular encoding for your input file, try the\n" ! "`--encoding=UTF-8' option." ! msgstr "" ! ! #: java/mangle.c:85 ! #, c-format ! msgid "Can't mangle %s" ! msgstr "" ! ! #: java/mangle_name.c:151 java/mangle_name.c:228 ! msgid "internal error - invalid Utf8 name" ! msgstr "internt fel - ogiltigt Utf8-namn" ! ! #: java/parse.y:737 java/parse.y:775 ! msgid "Missing name" ! msgstr "" ! ! #: java/parse.y:739 java/parse.y:777 java/parse.y:796 java/parse.y:977 ! #: java/parse.y:1324 java/parse.y:1527 java/parse.y:1529 java/parse.y:1758 ! #: java/parse.y:1784 java/parse.y:1795 java/parse.y:1806 java/parse.y:1818 ! msgid "';' expected" ! msgstr "" ! ! #: java/parse.y:794 ! msgid "'*' expected" ! msgstr "" ! ! #: java/parse.y:808 ! msgid "Class or interface declaration expected" ! msgstr "" ! ! #: java/parse.y:843 java/parse.y:845 ! msgid "Missing class name" ! msgstr "" ! ! #: java/parse.y:848 java/parse.y:852 java/parse.y:860 java/parse.y:1022 ! #: java/parse.y:1270 java/parse.y:1272 java/parse.y:1593 java/parse.y:1829 ! #: java/parse.y:1861 java/parse.y:1913 ! msgid "'{' expected" ! msgstr "" ! ! #: java/parse.y:862 ! msgid "Missing super class name" ! msgstr "" ! ! #: java/parse.y:872 java/parse.y:888 ! msgid "Missing interface name" ! msgstr "" ! ! #. That's for () ! #: java/parse.y:956 java/parse.y:1289 java/parse.y:1348 java/parse.y:1551 ! #: java/parse.y:1773 java/parse.y:1782 java/parse.y:1793 java/parse.y:1804 ! #: java/parse.y:1816 java/parse.y:1833 java/parse.y:1835 java/parse.y:1906 ! #: java/parse.y:2077 java/parse.y:2138 java/parse.y:2292 java/parse.y:2294 ! #: java/parse.y:2301 java/parse.y:2308 java/parse.y:2319 java/parse.y:2321 ! #: java/parse.y:2358 java/parse.y:2360 java/parse.y:2362 java/parse.y:2383 ! #: java/parse.y:2385 java/parse.y:2387 java/parse.y:2403 java/parse.y:2405 ! #: java/parse.y:2426 java/parse.y:2428 java/parse.y:2430 java/parse.y:2458 ! #: java/parse.y:2460 java/parse.y:2462 java/parse.y:2464 java/parse.y:2482 ! #: java/parse.y:2484 java/parse.y:2495 java/parse.y:2506 java/parse.y:2517 ! #: java/parse.y:2528 java/parse.y:2539 java/parse.y:2552 java/parse.y:2556 ! #: java/parse.y:2558 java/parse.y:2571 ! msgid "Missing term" ! msgstr "" ! ! #: java/parse.y:971 ! msgid "Missing variable initializer" ! msgstr "" ! ! #: java/parse.y:988 ! msgid "Invalid declaration" ! msgstr "" ! ! #: java/parse.y:994 ! msgid "Can't specify array dimension in a declaration" ! msgstr "" ! ! #: java/parse.y:996 java/parse.y:1072 java/parse.y:2113 java/parse.y:2135 ! #: java/parse.y:2139 java/parse.y:2174 java/parse.y:2251 java/parse.y:2261 ! msgid "']' expected" ! msgstr "" ! ! #: java/parse.y:1000 ! msgid "Unbalanced ']'" ! msgstr "" ! ! #: java/parse.y:1036 ! msgid "Invalid method declaration, method name required" ! msgstr "" ! ! #: java/parse.y:1042 java/parse.y:1044 java/parse.y:1997 ! msgid "Identifier expected" ! msgstr "" ! ! #: java/parse.y:1047 ! msgid "Invalid method declaration, return type required" ! msgstr "" ! ! #: java/parse.y:1070 java/parse.y:1507 java/parse.y:1514 java/parse.y:1523 ! #: java/parse.y:1525 java/parse.y:1553 java/parse.y:1661 java/parse.y:1942 ! #: java/parse.y:1995 ! msgid "')' expected" ! msgstr "" ! ! #: java/parse.y:1086 ! msgid "Missing formal parameter term" ! msgstr "" ! ! #: java/parse.y:1101 java/parse.y:1106 ! msgid "Missing identifier" ! msgstr "" ! ! #: java/parse.y:1126 java/parse.y:1135 ! msgid "Missing class type term" ! msgstr "" ! ! #: java/parse.y:1287 ! msgid "Invalid interface type" ! msgstr "" ! ! #: java/parse.y:1471 java/parse.y:1640 java/parse.y:1642 ! msgid "':' expected" ! msgstr "" ! ! #: java/parse.y:1493 java/parse.y:1498 java/parse.y:1503 ! msgid "Invalid expression statement" ! msgstr "" ! ! #: java/parse.y:1521 java/parse.y:1549 java/parse.y:1589 java/parse.y:1657 ! #: java/parse.y:1725 java/parse.y:1831 java/parse.y:1899 java/parse.y:1989 ! #: java/parse.y:1991 java/parse.y:1999 java/parse.y:2234 java/parse.y:2236 ! msgid "'(' expected" ! msgstr "" ! ! #: java/parse.y:1591 ! msgid "Missing term or ')'" ! msgstr "" ! ! #: java/parse.y:1638 ! msgid "Missing or invalid constant expression" ! msgstr "" ! ! #: java/parse.y:1659 ! msgid "Missing term and ')' expected" ! msgstr "" ! ! #: java/parse.y:1698 ! msgid "Invalid control expression" ! msgstr "" ! ! #: java/parse.y:1700 java/parse.y:1702 ! msgid "Invalid update expression" ! msgstr "" ! ! #: java/parse.y:1727 ! msgid "Invalid init statement" ! msgstr "" ! ! #: java/parse.y:1902 ! msgid "Missing term or ')' expected" ! msgstr "" ! ! #: java/parse.y:1944 ! msgid "'class' or 'this' expected" ! msgstr "" ! ! #: java/parse.y:1946 java/parse.y:1948 ! msgid "'class' expected" ! msgstr "" ! ! #: java/parse.y:1993 ! msgid "')' or term expected" ! msgstr "" ! ! #: java/parse.y:2111 ! msgid "'[' expected" ! msgstr "" ! ! #: java/parse.y:2189 ! msgid "Field expected" ! msgstr "" ! ! #: java/parse.y:2246 java/parse.y:2256 ! msgid "Missing term and ']' expected" ! msgstr "" ! ! #: java/parse.y:2351 ! msgid "']' expected, invalid type expression" ! msgstr "" ! ! #: java/parse.y:2354 ! msgid "Invalid type expression" ! msgstr "" ! ! #: java/parse.y:2466 ! msgid "Invalid reference type" ! msgstr "" ! ! #: java/parse.y:2944 ! msgid "Constructor invocation must be first thing in a constructor" ! msgstr "" ! ! #: java/parse.y:2946 ! msgid "Only constructors can invoke constructors" ! msgstr "" ! ! #: java/parse.y:2955 ! #, c-format ! msgid ": `%s' JDK1.1(TM) feature" ! msgstr "" ! ! #: java/parse.y:3015 java/parse.y:3017 ! #, c-format ! msgid "" ! "%s.\n" ! "%s" ! msgstr "" ! "%s.\n" ! "%s" ! ! #: java/parse.y:3480 ! msgid "Can't use '$' as a separator for inner classes" ! msgstr "" ! ! #: java/parse.y:6577 ! #, c-format ! msgid "malformed .zip archive in CLASSPATH: %s" ! msgstr "" ! ! #: java/parse.y:6648 ! #, c-format ! msgid "" ! "Can't find default package `%s'. Check the CLASSPATH environment variable " ! "and the access to the archives." ! msgstr "" ! ! #: java/parse.y:11777 ! #, c-format ! msgid "missing static field `%s'" ! msgstr "" ! ! #: java/parse.y:11782 ! #, c-format ! msgid "not a static field `%s'" ! msgstr "" ! ! #: java/parse.y:11835 ! #, c-format ! msgid "No case for %s" ! msgstr "" ! ! #: java/parse.y:13023 ! #, c-format ! msgid "unregistered operator %s" ! msgstr "" ! ! #: java/typeck.c:557 ! msgid "junk at end of signature string" ! msgstr "" ! ! #: java/verify.c:464 ! msgid "bad pc in exception_table" ! msgstr "" ! ! #: java/verify.c:1376 ! #, c-format ! msgid "unknown opcode %d@pc=%d during verification" ! msgstr "" ! ! #: java/verify.c:1446 java/verify.c:1459 java/verify.c:1463 ! #, c-format ! msgid "verification error at PC=%d" ! msgstr "" ! ! #: objc/lang-options.h:27 ! msgid "Dump decls to a .decl file" ! msgstr "" ! ! #: objc/lang-options.h:29 ! msgid "Generate code for GNU runtime environment" ! msgstr "" ! ! #: objc/lang-options.h:32 ! msgid "Generate code for NeXT runtime environment" ! msgstr "" ! ! #: objc/lang-options.h:35 ! msgid "Warn if a selector has multiple methods" ! msgstr "" ! ! #: objc/lang-options.h:39 ! msgid "Do not warn if inherited methods are unimplemented" ! msgstr "" ! ! #: objc/lang-options.h:41 ! msgid "Generate C header of platform specific features" ! msgstr "" ! ! #: objc/lang-options.h:43 ! msgid "Specify the name of the class for constant strings" ! msgstr "" ! ! #: objc/objc-act.c:829 ! msgid "no class name specified as argument to -fconstant-string-class" ! msgstr "" ! ! #: objc/objc-act.c:990 ! #, c-format ! msgid "object does not conform to the `%s' protocol" ! msgstr "" ! ! #: objc/objc-act.c:1028 ! #, c-format ! msgid "class `%s' does not implement the `%s' protocol" ! msgstr "klass \"%s\" implementerar inte protokollet \"%s\"" ! ! #: objc/objc-act.c:1166 ! #, c-format ! msgid "Unexpected type for `id' (%s)" ! msgstr "Oväntad typ på \"id\" (%s)" ! ! #: objc/objc-act.c:1171 msgid "Undefined type `id', please import " msgstr "" ! #: objc/objc-act.c:1219 objc/objc-act.c:5363 #, c-format msgid "Cannot find protocol declaration for `%s'" msgstr "" ! #: objc/objc-act.c:1449 objc/objc-act.c:5888 objc/objc-act.c:6197 ! #: objc/objc-act.c:6246 objc/objc-act.c:6282 objc/objc-parse.y:1781 #, c-format msgid "Cannot find interface declaration for `%s'" msgstr "" ! #: objc/objc-act.c:1469 #, c-format ! msgid "Cannot find reference tag for class `%s'" msgstr "" ! #: objc/objc-act.c:2468 ! #, c-format ! msgid "Cannot find class `%s'" ! msgstr "Kan inte hitta klass \"%s\"" ! ! #: objc/objc-act.c:2470 #, c-format msgid "Class `%s' already exists" ! msgstr "Klass \"%s\" finns redan" #. fatal did not work with 2 args...should fix ! #: objc/objc-act.c:2594 #, c-format msgid "Cannot find interface declaration for `%s', superclass of `%s'" msgstr "" ! #: objc/objc-act.c:2601 #, c-format msgid "Circular inheritance in interface declaration for `%s'" ! msgstr "Cirkulärt arv i interfacedeklaration för \"%s\"" ! #: objc/objc-act.c:3654 objc/objc-act.c:3671 msgid "inconsistent instance variable specification" msgstr "" ! #: objc/objc-act.c:4859 #, c-format msgid "multiple declarations for method `%s'" ! msgstr "multiple deklaration av metod \"%s\"" ! #: objc/objc-act.c:4972 #, c-format msgid "invalid receiver type `%s'" ! msgstr "ogiltig mottagartyp \"%s\"" ! #: objc/objc-act.c:5040 objc/objc-act.c:5066 objc/objc-act.c:5114 #, c-format msgid "`%s' does not respond to `%s'" ! msgstr "\"%s\" svarar inte på \"%s\"" ! #: objc/objc-act.c:5046 objc/objc-act.c:7285 #, c-format msgid "no super class declared in interface for `%s'" ! msgstr "ingen superklass deklarerad i interface för \"%s\"" ! #: objc/objc-act.c:5144 msgid "cannot find class (factory) method." ! msgstr "kan inte hitta klass(fabrik)-metod" ! #: objc/objc-act.c:5145 objc/objc-act.c:5189 #, c-format msgid "return type for `%s' defaults to id" ! msgstr "returtyp för \"%s\" är som standard id" ! #: objc/objc-act.c:5162 #, c-format msgid "method `%s' not implemented by protocol." ! msgstr "metod \"%s\" implementeras inte av protokoll." ! #: objc/objc-act.c:5171 msgid "return type defaults to id" ! msgstr "returtyp är som standard id" ! #: objc/objc-act.c:5188 msgid "cannot find method." ! msgstr "kan inte hitta metod." #. Historically, a class method that produced objects (factory #. method) would assign `self' to the instance that it *************** msgstr "" *** 9330,9476 **** #. to an instance variable. It's better to catch the cases #. where this is done unknowingly than to support the above #. paradigm. ! #: objc/objc-act.c:5450 #, c-format msgid "instance variable `%s' accessed in class method" msgstr "" ! #: objc/objc-act.c:5702 #, c-format msgid "duplicate definition of class method `%s'." ! msgstr "" ! #: objc/objc-act.c:5708 #, c-format msgid "duplicate declaration of class method `%s'." ! msgstr "" ! #: objc/objc-act.c:5744 #, c-format msgid "duplicate definition of instance method `%s'." msgstr "" ! #: objc/objc-act.c:5750 #, c-format msgid "duplicate declaration of instance method `%s'." msgstr "" ! #: objc/objc-act.c:5790 #, c-format msgid "duplicate interface declaration for category `%s(%s)'" msgstr "" ! #: objc/objc-act.c:5876 #, c-format msgid "instance variable `%s' is declared private" ! msgstr "" ! #: objc/objc-act.c:5923 #, c-format msgid "instance variable `%s' is declared %s" ! msgstr "" ! #: objc/objc-act.c:5933 msgid "static access to object of type `id'" ! msgstr "" ! #: objc/objc-act.c:5970 objc/objc-act.c:6064 #, c-format msgid "incomplete implementation of class `%s'" ! msgstr "" ! #: objc/objc-act.c:5974 objc/objc-act.c:6069 #, c-format msgid "incomplete implementation of category `%s'" ! msgstr "" ! #: objc/objc-act.c:5979 objc/objc-act.c:6074 #, c-format msgid "method definition for `%c%s' not found" ! msgstr "" ! #: objc/objc-act.c:6115 #, c-format msgid "%s `%s' does not fully implement the `%s' protocol" msgstr "" ! #: objc/objc-act.c:6174 #, c-format msgid "reimplementation of class `%s'" ! msgstr "" ! #: objc/objc-act.c:6216 #, c-format msgid "conflicting super class name `%s'" msgstr "" ! #: objc/objc-act.c:6231 #, c-format msgid "duplicate interface declaration for class `%s'" msgstr "" ! #: objc/objc-act.c:6477 #, c-format msgid "duplicate declaration for protocol `%s'" msgstr "" ! #: objc/objc-act.c:7352 msgid "[super ...] must appear in a method context" ! msgstr "" ! #: objc/objc-act.c:8304 objc/objc-act.c:8320 #, c-format msgid "potential selector conflict for method `%s'" msgstr "" ! #: objc-parse.y:2095 msgid "`@end' must appear in an implementation context" msgstr "" ! #: objc-parse.y:2361 objc-parse.y:2386 msgid "method definition not in class context" msgstr "" ! #: profile.c:491 msgid "Arc profiling: some edge counts were bad." msgstr "" ! #: profile.c:932 #, c-format msgid "file %s not found, execution counts assumed to be zero." msgstr "" ! #: protoize.c:598 #, c-format msgid "%s: internal abort\n" ! msgstr "" ! #: protoize.c:689 #, c-format msgid "%s: error writing file `%s': %s\n" msgstr "" ! #: protoize.c:734 #, c-format msgid "%s: usage '%s [ -VqfnkN ] [ -i ] [ filename ... ]'\n" ! msgstr "" ! #: protoize.c:737 #, c-format msgid "%s: usage '%s [ -VqfnkNlgC ] [ -B ] [ filename ... ]'\n" msgstr "" ! #: protoize.c:844 #, c-format msgid "%s: warning: no read access for file `%s'\n" ! msgstr "" ! #: protoize.c:852 #, c-format msgid "%s: warning: no write access for file `%s'\n" ! msgstr "" ! #: protoize.c:860 #, c-format msgid "%s: warning: no write access for dir containing `%s'\n" msgstr "" --- 14361,14522 ---- #. to an instance variable. It's better to catch the cases #. where this is done unknowingly than to support the above #. paradigm. ! #: objc/objc-act.c:5432 #, c-format msgid "instance variable `%s' accessed in class method" msgstr "" ! #: objc/objc-act.c:5689 #, c-format msgid "duplicate definition of class method `%s'." ! msgstr "upprepad definition av klassmetod \"%s\"." ! #: objc/objc-act.c:5695 #, c-format msgid "duplicate declaration of class method `%s'." ! msgstr "upprepad deklaration av klassmetod \"%s\"." ! #: objc/objc-act.c:5731 #, c-format msgid "duplicate definition of instance method `%s'." msgstr "" ! #: objc/objc-act.c:5737 #, c-format msgid "duplicate declaration of instance method `%s'." msgstr "" ! #: objc/objc-act.c:5777 #, c-format msgid "duplicate interface declaration for category `%s(%s)'" msgstr "" ! #: objc/objc-act.c:5863 #, c-format msgid "instance variable `%s' is declared private" ! msgstr "instansvariabel \"%s\" är deklarerad som privat" ! #: objc/objc-act.c:5910 #, c-format msgid "instance variable `%s' is declared %s" ! msgstr "instansvariabel \"%s\" är deklarerad som %s" ! #: objc/objc-act.c:5920 msgid "static access to object of type `id'" ! msgstr "statisk access till objekt av typ \"id\"" ! #: objc/objc-act.c:5957 objc/objc-act.c:6051 #, c-format msgid "incomplete implementation of class `%s'" ! msgstr "inkomplett implementation av klass \"%s\"" ! #: objc/objc-act.c:5961 objc/objc-act.c:6056 #, c-format msgid "incomplete implementation of category `%s'" ! msgstr "inkomplett implementation av kategori \"%s\"" ! #: objc/objc-act.c:5966 objc/objc-act.c:6061 #, c-format msgid "method definition for `%c%s' not found" ! msgstr "metoddefinition för \"%c%s\" kan inte hittas" ! #: objc/objc-act.c:6102 #, c-format msgid "%s `%s' does not fully implement the `%s' protocol" msgstr "" ! #: objc/objc-act.c:6138 objc/objc-act.c:8212 ! msgid "`@end' missing in implementation context" ! msgstr "" ! ! #: objc/objc-act.c:6169 #, c-format msgid "reimplementation of class `%s'" ! msgstr "omimplementation av klass \"%s\"" ! #: objc/objc-act.c:6211 #, c-format msgid "conflicting super class name `%s'" msgstr "" ! #: objc/objc-act.c:6226 #, c-format msgid "duplicate interface declaration for class `%s'" msgstr "" ! #: objc/objc-act.c:6469 #, c-format msgid "duplicate declaration for protocol `%s'" msgstr "" ! #: objc/objc-act.c:7326 msgid "[super ...] must appear in a method context" ! msgstr "[super ...] måste stå i metodkontext" ! #: objc/objc-act.c:8314 objc/objc-act.c:8330 #, c-format msgid "potential selector conflict for method `%s'" msgstr "" ! #: objc/objc-parse.y:2648 msgid "`@end' must appear in an implementation context" msgstr "" ! #: objc/objc-parse.y:2919 msgid "method definition not in class context" msgstr "" ! #: objc/objc-parse.y:3743 ! msgid "syntax error at '@' token" ! msgstr "" ! ! #. If we didn't find this parameter, issue an error message. ! #: params.c:80 ! #, c-format ! msgid "invalid parameter `%s'" ! msgstr "" ! ! #: profile.c:490 msgid "Arc profiling: some edge counts were bad." msgstr "" ! #: profile.c:931 #, c-format msgid "file %s not found, execution counts assumed to be zero." msgstr "" ! #: protoize.c:601 #, c-format msgid "%s: internal abort\n" ! msgstr "%s: intern abort\n" ! #: protoize.c:692 #, c-format msgid "%s: error writing file `%s': %s\n" msgstr "" ! #: protoize.c:737 #, c-format msgid "%s: usage '%s [ -VqfnkN ] [ -i ] [ filename ... ]'\n" ! msgstr "%s: användning '%s [ -VqfnkN ] [ -i ] [ filnamn ... ]'\n" ! #: protoize.c:740 #, c-format msgid "%s: usage '%s [ -VqfnkNlgC ] [ -B ] [ filename ... ]'\n" msgstr "" + "%s: användning '%s [ -VqfnkNlgC ] [ -B ] [ filnamn ... ]'\n" ! #: protoize.c:847 #, c-format msgid "%s: warning: no read access for file `%s'\n" ! msgstr "%s: varning: ingen läsrättighet för fil \"%s\"\n" ! #: protoize.c:855 #, c-format msgid "%s: warning: no write access for file `%s'\n" ! msgstr "%s: varning: ingen skrivrättighet för fil \"%s\"\n" ! #: protoize.c:863 #, c-format msgid "%s: warning: no write access for dir containing `%s'\n" msgstr "" *************** msgstr "" *** 9478,10097 **** #. Catch cases like /.. where we try to backup to a #. point above the absolute root of the logical file #. system. ! #: protoize.c:1278 #, c-format msgid "%s: invalid file name: %s\n" msgstr "" ! #: protoize.c:1430 #, c-format msgid "%s: %s: can't get status: %s\n" ! msgstr "" ! #: protoize.c:1451 #, c-format msgid "" "\n" "%s: fatal error: aux info file corrupted at line %d\n" msgstr "" ! #: protoize.c:1787 #, c-format msgid "%s:%d: declaration of function `%s' takes different forms\n" msgstr "" ! #: protoize.c:2045 #, c-format msgid "%s: compiling `%s'\n" ! msgstr "" ! #: protoize.c:2068 #, c-format msgid "%s: wait: %s\n" ! msgstr "" ! #: protoize.c:2073 #, c-format msgid "%s: subprocess got fatal signal %d\n" ! msgstr "" ! #: protoize.c:2081 #, c-format msgid "%s: %s exited with status %d\n" ! msgstr "" ! #: protoize.c:2133 #, c-format msgid "%s: warning: missing SYSCALLS file `%s'\n" msgstr "" ! #: protoize.c:2142 protoize.c:2171 #, c-format msgid "%s: can't read aux info file `%s': %s\n" msgstr "" ! #: protoize.c:2187 protoize.c:2215 #, c-format msgid "%s: can't get status of aux info file `%s': %s\n" msgstr "" ! #: protoize.c:2243 #, c-format msgid "%s: can't open aux info file `%s' for reading: %s\n" msgstr "" ! #: protoize.c:2261 #, c-format msgid "%s: error reading aux info file `%s': %s\n" msgstr "" ! #: protoize.c:2274 #, c-format msgid "%s: error closing aux info file `%s': %s\n" msgstr "" ! #: protoize.c:2290 #, c-format msgid "%s: can't delete aux info file `%s': %s\n" msgstr "" ! #: protoize.c:2372 protoize.c:4374 #, c-format msgid "%s: can't delete file `%s': %s\n" ! msgstr "" ! #: protoize.c:2451 #, c-format msgid "%s: warning: can't rename file `%s' to `%s': %s\n" ! msgstr "" ! #: protoize.c:2576 #, c-format msgid "%s: conflicting extern definitions of '%s'\n" msgstr "" ! #: protoize.c:2580 #, c-format msgid "%s: declarations of '%s' will not be converted\n" msgstr "" ! #: protoize.c:2582 #, c-format msgid "%s: conflict list for '%s' follows:\n" msgstr "" ! #: protoize.c:2615 #, c-format msgid "%s: warning: using formals list from %s(%d) for function `%s'\n" msgstr "" ! #: protoize.c:2655 #, c-format msgid "%s: %d: `%s' used but missing from SYSCALLS\n" msgstr "" ! #: protoize.c:2661 #, c-format msgid "%s: %d: warning: no extern definition for `%s'\n" msgstr "" ! #: protoize.c:2692 #, c-format msgid "%s: warning: no static definition for `%s' in file `%s'\n" msgstr "" ! #: protoize.c:2698 #, c-format msgid "%s: multiple static defs of `%s' in file `%s'\n" msgstr "" ! #: protoize.c:2871 protoize.c:2874 #, c-format msgid "%s: %d: warning: source too confusing\n" msgstr "" ! #: protoize.c:3080 #, c-format msgid "%s: %d: warning: varargs function declaration not converted\n" msgstr "" ! #: protoize.c:3095 #, c-format msgid "%s: declaration of function `%s' not converted\n" msgstr "" ! #: protoize.c:3218 #, c-format msgid "%s: warning: too many parameter lists in declaration of `%s'\n" msgstr "" ! #: protoize.c:3239 #, c-format msgid "" "\n" "%s: warning: too few parameter lists in declaration of `%s'\n" msgstr "" ! #: protoize.c:3337 #, c-format msgid "%s: %d: warning: found `%s' but expected `%s'\n" msgstr "" ! #: protoize.c:3515 #, c-format msgid "%s: local declaration for function `%s' not inserted\n" msgstr "" ! #: protoize.c:3542 #, c-format msgid "" "\n" "%s: %d: warning: can't add declaration of `%s' into macro call\n" msgstr "" ! #: protoize.c:3616 #, c-format msgid "%s: global declarations for file `%s' not inserted\n" msgstr "" ! #: protoize.c:3707 protoize.c:3737 #, c-format msgid "%s: definition of function `%s' not converted\n" msgstr "" ! #: protoize.c:3726 #, c-format msgid "%s: %d: warning: definition of %s not converted\n" msgstr "" ! #: protoize.c:4056 #, c-format msgid "%s: found definition of `%s' at %s(%d)\n" msgstr "" #. If we make it here, then we did not know about this #. function definition. ! #: protoize.c:4072 #, c-format msgid "%s: %d: warning: `%s' excluded by preprocessing\n" msgstr "" ! #: protoize.c:4075 #, c-format msgid "%s: function definition not converted\n" msgstr "" ! #: protoize.c:4134 #, c-format msgid "%s: `%s' not converted\n" msgstr "" ! #: protoize.c:4142 #, c-format msgid "%s: would convert file `%s'\n" msgstr "" ! #: protoize.c:4145 #, c-format msgid "%s: converting file `%s'\n" msgstr "" ! #: protoize.c:4155 #, c-format msgid "%s: can't get status for file `%s': %s\n" msgstr "" ! #: protoize.c:4197 #, c-format msgid "%s: can't open file `%s' for reading: %s\n" ! msgstr "" ! #: protoize.c:4212 #, c-format msgid "" "\n" "%s: error reading input file `%s': %s\n" msgstr "" ! #: protoize.c:4246 #, c-format msgid "%s: can't create/open clean file `%s': %s\n" msgstr "" ! #: protoize.c:4351 #, c-format msgid "%s: warning: file `%s' already saved in `%s'\n" msgstr "" ! #: protoize.c:4359 #, c-format msgid "%s: can't link file `%s' to `%s': %s\n" ! msgstr "" ! #: protoize.c:4389 #, c-format msgid "%s: can't create/open output file `%s': %s\n" msgstr "" ! #: protoize.c:4422 #, c-format msgid "%s: can't change mode of file `%s': %s\n" msgstr "" ! #: protoize.c:4595 #, c-format msgid "%s: cannot get working directory: %s\n" msgstr "" ! #: protoize.c:4693 #, c-format msgid "%s: input file names must have .c suffixes: %s\n" ! msgstr "" ! #: real.c:798 real.c:975 msgid "conversion from NaN to int" msgstr "konvertering från NaN till int" ! #: real.c:821 msgid "conversion from NaN to unsigned int" msgstr "konveretering från NaN till unsigned int" ! #: real.c:2696 msgid "floating point overflow" ! msgstr "" ! #: real.c:4334 real.c:6611 real.c:6692 msgid "overflow on truncation to integer" msgstr "" ! #: real.c:4406 msgid "overflow on truncation to unsigned integer" msgstr "" ! #: real.c:5752 #, c-format msgid "%s: argument domain error" msgstr "" ! #: real.c:5753 #, c-format msgid "%s: function singularity" msgstr "" ! #: real.c:5754 #, c-format msgid "%s: overflow range error" msgstr "" ! #: real.c:5755 #, c-format msgid "%s: underflow range error" msgstr "" ! #: real.c:5756 #, c-format msgid "%s: total loss of precision" ! msgstr "" ! #: real.c:5757 #, c-format msgid "%s: partial loss of precision" ! msgstr "" ! #: real.c:5758 #, c-format msgid "%s: NaN - producing operation" msgstr "" ! #: reg-stack.c:660 #, c-format msgid "Output constraint %d must specify a single register" msgstr "" ! #: reg-stack.c:680 msgid "Output regs must be grouped at top of stack" msgstr "" ! #: reg-stack.c:717 msgid "Implicitly popped regs must be grouped at top of stack" msgstr "" ! #: reg-stack.c:736 #, c-format msgid "Output operand %d must use `&' constraint" msgstr "" ! #: regclass.c:660 #, c-format msgid "can't use '%s' as a %s register" msgstr "" ! #: regclass.c:671 ! #, c-format ! msgid "unknown register name: %s" ! msgstr "" ! ! #: regclass.c:682 msgid "global register variable follows a function definition" msgstr "" ! #: regclass.c:686 msgid "register used for two global register variables" msgstr "" ! #: regclass.c:691 msgid "call-clobbered register used for global register variable" msgstr "" ! #: reload.c:1198 msgid "cannot reload integer constant operand in `asm'" msgstr "" ! #: reload.c:1220 msgid "impossible register constraint in `asm'" msgstr "" ! #: reload.c:3319 msgid "`&' constraint used with no register class" msgstr "" ! #: reload.c:3471 reload.c:3682 msgid "inconsistent operand constraints in an `asm'" msgstr "" ! #: reload1.c:1159 msgid "frame size too large for reliable stack checking" msgstr "" ! #: reload1.c:1162 msgid "try reducing the number of local variables" msgstr "" ! #: reload1.c:1806 #, c-format msgid "Can't find a register in class `%s' while reloading `asm'." msgstr "" ! #: reload1.c:1810 #, c-format msgid "Unable to find a register to spill in class `%s'." msgstr "" ! #: reload1.c:3825 msgid "`asm' operand requires impossible reload" msgstr "" ! #: reload1.c:4877 msgid "`asm' operand constraint incompatible with operand size" msgstr "" ! #: reload1.c:6443 msgid "output operand is constant in `asm'" msgstr "" ! #: rtl.c:1147 #, c-format ! msgid "RTL check: access of elt %d of `%s' with last elt %d" msgstr "" ! #: rtl.c:1161 #, c-format ! msgid "RTL check: expected elt %d type '%c', have '%c' (rtx %s)" msgstr "" ! #: rtl.c:1176 #, c-format ! msgid "RTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s)" msgstr "" ! #: rtl.c:1190 #, c-format ! msgid "RTL check: expected code `%s', have `%s'" msgstr "" ! #: rtl.c:1203 #, c-format ! msgid "RTL check: expected code `%s' or `%s', have `%s'" msgstr "" ! #: rtl.c:1218 #, c-format ! msgid "RTL check: access of elt %d of vector with last elt %d" msgstr "" ! #: stmt.c:914 #, c-format msgid "jump to `%s' invalidly jumps into binding contour" msgstr "" ! #: stmt.c:1150 stmt.c:3649 #, c-format msgid "label `%s' used before containing binding contour" msgstr "" ! #: stmt.c:1280 stmt.c:1352 msgid "`asm' cannot be used in function where memory usage is checked" msgstr "" ! #: stmt.c:1338 msgid "`asm' cannot be used with `-fcheck-memory-usage'" msgstr "" ! #: stmt.c:1367 #, c-format msgid "unknown register name `%s' in `asm'" msgstr "" ! #: stmt.c:1382 msgid "too many alternatives in `asm'" msgstr "" ! #: stmt.c:1393 msgid "operand constraints for `asm' differ in number of alternatives" msgstr "" ! #: stmt.c:1440 msgid "output operand constraint lacks `='" msgstr "" ! #: stmt.c:1450 #, c-format msgid "output constraint `%c' for operand %d is not at the beginning" msgstr "" ! #: stmt.c:1459 #, c-format msgid "output operand constraint %d contains `+'" msgstr "" ! #: stmt.c:1468 msgid "operand constraint contains '+' or '=' at illegal position." msgstr "" ! #: stmt.c:1474 stmt.c:1651 msgid "`%%' constraint used with last operand" msgstr "" ! #: stmt.c:1488 msgid "matching constraint not valid in output operand" msgstr "" ! #: stmt.c:1514 stmt.c:1711 #, c-format msgid "invalid punctuation `%c' in constraint" msgstr "" ! #: stmt.c:1558 #, c-format msgid "output number %d not directly addressable" msgstr "" ! #: stmt.c:1586 #, c-format msgid "more than %d operands in `asm'" msgstr "" ! #: stmt.c:1624 #, c-format msgid "hard register `%s' listed as input operand to `asm'" msgstr "" ! #: stmt.c:1641 #, c-format msgid "input operand constraint contains `%c'" msgstr "" ! #: stmt.c:1678 msgid "matching constraint references invalid operand number" msgstr "" #. ??? Leave this only until we have experience with what #. happens in combine and elsewhere when constraints are #. not satisfied. ! #: stmt.c:1745 stmt.c:1770 #, c-format msgid "asm operand %d probably doesn't match constraints" msgstr "" ! #: stmt.c:3567 #, c-format msgid "unused variable `%s'" ! msgstr "" ! #: stmt.c:5160 #, c-format msgid "enumeration value `%s' not handled in switch" msgstr "" ! #: stmt.c:5186 stmt.c:5206 #, c-format msgid "case value `%ld' not in enumerated type" msgstr "" ! #: stmt.c:5189 stmt.c:5209 #, c-format msgid "case value `%ld' not in enumerated type `%s'" msgstr "" ! #: stor-layout.c:126 msgid "type size can't be explicitly evaluated" msgstr "" ! #: stor-layout.c:128 msgid "variable-size type declared outside of any function" msgstr "" ! #: stor-layout.c:399 #, c-format msgid "size of `%s' is %d bytes" ! msgstr "" ! #: stor-layout.c:401 #, c-format msgid "size of `%s' is larger than %d bytes" ! msgstr "" ! #: stor-layout.c:751 stor-layout.c:1002 #, c-format msgid "packed attribute causes inefficient alignment for `%s'" msgstr "" ! #: stor-layout.c:753 stor-layout.c:1004 #, c-format msgid "packed attribute is unnecessary for `%s'" msgstr "" ! #: stor-layout.c:768 #, c-format msgid "padding struct to align `%s'" msgstr "" ! #: stor-layout.c:966 msgid "padding struct size to alignment boundary" msgstr "" ! #: stor-layout.c:1009 msgid "packed attribute causes inefficient alignment" msgstr "" ! #: stor-layout.c:1011 msgid "packed attribute is unnecessary" msgstr "" ! #: timevar.c:428 msgid "" "\n" "Execution times (seconds)\n" msgstr "" #. Print total time. ! #: timevar.c:476 msgid " TOTAL :" ! msgstr "" ! #: timevar.c:515 msgid "time in %s: %ld.%06ld (%ld%%)\n" ! msgstr "" #: tlink.c:428 #, c-format --- 14524,15150 ---- #. Catch cases like /.. where we try to backup to a #. point above the absolute root of the logical file #. system. ! #: protoize.c:1281 #, c-format msgid "%s: invalid file name: %s\n" msgstr "" ! #: protoize.c:1433 #, c-format msgid "%s: %s: can't get status: %s\n" ! msgstr "%s: %s: kan inte få status: %s\n" ! #: protoize.c:1454 #, c-format msgid "" "\n" "%s: fatal error: aux info file corrupted at line %d\n" msgstr "" ! #: protoize.c:1790 #, c-format msgid "%s:%d: declaration of function `%s' takes different forms\n" msgstr "" ! #: protoize.c:2048 #, c-format msgid "%s: compiling `%s'\n" ! msgstr "%s: kompilerar `%s'\n" ! #: protoize.c:2071 #, c-format msgid "%s: wait: %s\n" ! msgstr "%s: vänta: %s\n" ! #: protoize.c:2076 #, c-format msgid "%s: subprocess got fatal signal %d\n" ! msgstr "%s: subprocess fick dödlig signal %d\n" ! #: protoize.c:2084 #, c-format msgid "%s: %s exited with status %d\n" ! msgstr "%s: %s avslutade med status %d\n" ! #: protoize.c:2136 #, c-format msgid "%s: warning: missing SYSCALLS file `%s'\n" msgstr "" ! #: protoize.c:2145 protoize.c:2174 #, c-format msgid "%s: can't read aux info file `%s': %s\n" msgstr "" ! #: protoize.c:2190 protoize.c:2218 #, c-format msgid "%s: can't get status of aux info file `%s': %s\n" msgstr "" ! #: protoize.c:2246 #, c-format msgid "%s: can't open aux info file `%s' for reading: %s\n" msgstr "" ! #: protoize.c:2264 #, c-format msgid "%s: error reading aux info file `%s': %s\n" msgstr "" ! #: protoize.c:2277 #, c-format msgid "%s: error closing aux info file `%s': %s\n" msgstr "" ! #: protoize.c:2293 #, c-format msgid "%s: can't delete aux info file `%s': %s\n" msgstr "" ! #: protoize.c:2375 protoize.c:4377 #, c-format msgid "%s: can't delete file `%s': %s\n" ! msgstr "%s: kan inte radera fil \"%s\": %s\n" ! #: protoize.c:2454 #, c-format msgid "%s: warning: can't rename file `%s' to `%s': %s\n" ! msgstr "%s: varning: kan inte döpa om fil \"%s\" till \"%s\": %s\n" ! #: protoize.c:2579 #, c-format msgid "%s: conflicting extern definitions of '%s'\n" msgstr "" ! #: protoize.c:2583 #, c-format msgid "%s: declarations of '%s' will not be converted\n" msgstr "" ! #: protoize.c:2585 #, c-format msgid "%s: conflict list for '%s' follows:\n" msgstr "" ! #: protoize.c:2618 #, c-format msgid "%s: warning: using formals list from %s(%d) for function `%s'\n" msgstr "" ! #: protoize.c:2658 #, c-format msgid "%s: %d: `%s' used but missing from SYSCALLS\n" msgstr "" ! #: protoize.c:2664 #, c-format msgid "%s: %d: warning: no extern definition for `%s'\n" msgstr "" ! #: protoize.c:2695 #, c-format msgid "%s: warning: no static definition for `%s' in file `%s'\n" msgstr "" ! #: protoize.c:2701 #, c-format msgid "%s: multiple static defs of `%s' in file `%s'\n" msgstr "" ! #: protoize.c:2874 protoize.c:2877 #, c-format msgid "%s: %d: warning: source too confusing\n" msgstr "" ! #: protoize.c:3083 #, c-format msgid "%s: %d: warning: varargs function declaration not converted\n" msgstr "" ! #: protoize.c:3098 #, c-format msgid "%s: declaration of function `%s' not converted\n" msgstr "" ! #: protoize.c:3221 #, c-format msgid "%s: warning: too many parameter lists in declaration of `%s'\n" msgstr "" ! #: protoize.c:3242 #, c-format msgid "" "\n" "%s: warning: too few parameter lists in declaration of `%s'\n" msgstr "" ! #: protoize.c:3340 #, c-format msgid "%s: %d: warning: found `%s' but expected `%s'\n" msgstr "" ! #: protoize.c:3518 #, c-format msgid "%s: local declaration for function `%s' not inserted\n" msgstr "" ! #: protoize.c:3545 #, c-format msgid "" "\n" "%s: %d: warning: can't add declaration of `%s' into macro call\n" msgstr "" ! #: protoize.c:3619 #, c-format msgid "%s: global declarations for file `%s' not inserted\n" msgstr "" ! #: protoize.c:3710 protoize.c:3740 #, c-format msgid "%s: definition of function `%s' not converted\n" msgstr "" ! #: protoize.c:3729 #, c-format msgid "%s: %d: warning: definition of %s not converted\n" msgstr "" ! #: protoize.c:4059 #, c-format msgid "%s: found definition of `%s' at %s(%d)\n" msgstr "" #. If we make it here, then we did not know about this #. function definition. ! #: protoize.c:4075 #, c-format msgid "%s: %d: warning: `%s' excluded by preprocessing\n" msgstr "" ! #: protoize.c:4078 #, c-format msgid "%s: function definition not converted\n" msgstr "" ! #: protoize.c:4137 #, c-format msgid "%s: `%s' not converted\n" msgstr "" ! #: protoize.c:4145 #, c-format msgid "%s: would convert file `%s'\n" msgstr "" ! #: protoize.c:4148 #, c-format msgid "%s: converting file `%s'\n" msgstr "" ! #: protoize.c:4158 #, c-format msgid "%s: can't get status for file `%s': %s\n" msgstr "" ! #: protoize.c:4200 #, c-format msgid "%s: can't open file `%s' for reading: %s\n" ! msgstr "%s: kan inte öppna fil `%s' för läsning: %s\n" ! #: protoize.c:4215 #, c-format msgid "" "\n" "%s: error reading input file `%s': %s\n" msgstr "" ! #: protoize.c:4249 #, c-format msgid "%s: can't create/open clean file `%s': %s\n" msgstr "" ! #: protoize.c:4354 #, c-format msgid "%s: warning: file `%s' already saved in `%s'\n" msgstr "" ! #: protoize.c:4362 #, c-format msgid "%s: can't link file `%s' to `%s': %s\n" ! msgstr "%s: kan inte länka fil \"%s\" till \"%s\": %s\n" ! #: protoize.c:4392 #, c-format msgid "%s: can't create/open output file `%s': %s\n" msgstr "" ! #: protoize.c:4425 #, c-format msgid "%s: can't change mode of file `%s': %s\n" msgstr "" ! #: protoize.c:4611 #, c-format msgid "%s: cannot get working directory: %s\n" msgstr "" ! #: protoize.c:4709 #, c-format msgid "%s: input file names must have .c suffixes: %s\n" ! msgstr "%s: indatafilnamn måste ha ändelsen .c: %s\n" ! #: real.c:802 real.c:979 msgid "conversion from NaN to int" msgstr "konvertering från NaN till int" ! #: real.c:825 msgid "conversion from NaN to unsigned int" msgstr "konveretering från NaN till unsigned int" ! #: real.c:2700 msgid "floating point overflow" ! msgstr "flyttalsspill" ! #: real.c:4340 real.c:6619 real.c:6700 msgid "overflow on truncation to integer" msgstr "" ! #: real.c:4412 msgid "overflow on truncation to unsigned integer" msgstr "" ! #: real.c:5760 #, c-format msgid "%s: argument domain error" msgstr "" ! #: real.c:5761 #, c-format msgid "%s: function singularity" msgstr "" ! #: real.c:5762 #, c-format msgid "%s: overflow range error" msgstr "" ! #: real.c:5763 #, c-format msgid "%s: underflow range error" msgstr "" ! #: real.c:5764 #, c-format msgid "%s: total loss of precision" ! msgstr "%s: total förlust av precision" ! #: real.c:5765 #, c-format msgid "%s: partial loss of precision" ! msgstr "%s: partiell förlust av precision" ! #: real.c:5766 #, c-format msgid "%s: NaN - producing operation" msgstr "" ! #: reg-stack.c:661 #, c-format msgid "Output constraint %d must specify a single register" msgstr "" ! #: reg-stack.c:671 ! #, c-format ! msgid "Output constraint %d cannot be specified together with \"%s\" clobber" ! msgstr "" ! ! #: reg-stack.c:694 msgid "Output regs must be grouped at top of stack" msgstr "" ! #: reg-stack.c:731 msgid "Implicitly popped regs must be grouped at top of stack" msgstr "" ! #: reg-stack.c:750 #, c-format msgid "Output operand %d must use `&' constraint" msgstr "" ! #: regclass.c:704 #, c-format msgid "can't use '%s' as a %s register" msgstr "" ! #: regclass.c:726 msgid "global register variable follows a function definition" msgstr "" ! #: regclass.c:730 msgid "register used for two global register variables" msgstr "" ! #: regclass.c:735 msgid "call-clobbered register used for global register variable" msgstr "" ! #: reload.c:1206 msgid "cannot reload integer constant operand in `asm'" msgstr "" ! #: reload.c:1228 msgid "impossible register constraint in `asm'" msgstr "" ! #: reload.c:3375 msgid "`&' constraint used with no register class" msgstr "" ! #: reload.c:3532 reload.c:3746 msgid "inconsistent operand constraints in an `asm'" msgstr "" ! #: reload1.c:1235 msgid "frame size too large for reliable stack checking" msgstr "" ! #: reload1.c:1238 msgid "try reducing the number of local variables" msgstr "" ! #: reload1.c:1893 #, c-format msgid "Can't find a register in class `%s' while reloading `asm'." msgstr "" ! #: reload1.c:1897 #, c-format msgid "Unable to find a register to spill in class `%s'." msgstr "" ! #: reload1.c:3918 msgid "`asm' operand requires impossible reload" msgstr "" ! #: reload1.c:5033 msgid "`asm' operand constraint incompatible with operand size" msgstr "" ! #: reload1.c:6619 msgid "output operand is constant in `asm'" msgstr "" ! #: rtl.c:1296 #, c-format ! msgid "RTL check: access of elt %d of `%s' with last elt %d in %s, at %s:%d" msgstr "" ! #: rtl.c:1311 #, c-format ! msgid "" ! "RTL check: expected elt %d type '%c', have '%c' (rtx %s) in %s, at %s:%d" msgstr "" ! #: rtl.c:1327 #, c-format ! msgid "" ! "RTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s) in %s, at %" ! "s:%d" msgstr "" ! #: rtl.c:1340 #, c-format ! msgid "RTL check: expected code `%s', have `%s' in %s, at %s:%d" msgstr "" ! #: rtl.c:1354 #, c-format ! msgid "RTL check: expected code `%s' or `%s', have `%s' in %s, at %s:%d" msgstr "" ! #: rtl.c:1369 #, c-format ! msgid "RTL check: access of elt %d of vector with last elt %d in %s, at %s:%d" msgstr "" ! #: stmt.c:917 #, c-format msgid "jump to `%s' invalidly jumps into binding contour" msgstr "" ! #: stmt.c:1153 stmt.c:3651 #, c-format msgid "label `%s' used before containing binding contour" msgstr "" ! #: stmt.c:1283 stmt.c:1357 msgid "`asm' cannot be used in function where memory usage is checked" msgstr "" ! #: stmt.c:1343 msgid "`asm' cannot be used with `-fcheck-memory-usage'" msgstr "" ! #: stmt.c:1372 #, c-format msgid "unknown register name `%s' in `asm'" msgstr "" ! #: stmt.c:1387 msgid "too many alternatives in `asm'" msgstr "" ! #: stmt.c:1398 msgid "operand constraints for `asm' differ in number of alternatives" msgstr "" ! #: stmt.c:1446 msgid "output operand constraint lacks `='" msgstr "" ! #: stmt.c:1465 #, c-format msgid "output constraint `%c' for operand %d is not at the beginning" msgstr "" ! #: stmt.c:1472 #, c-format msgid "output operand constraint %d contains `+'" msgstr "" ! #: stmt.c:1481 msgid "operand constraint contains '+' or '=' at illegal position." msgstr "" ! #: stmt.c:1487 stmt.c:1664 ! #, c-format msgid "`%%' constraint used with last operand" msgstr "" ! #: stmt.c:1501 msgid "matching constraint not valid in output operand" msgstr "" ! #: stmt.c:1527 stmt.c:1724 #, c-format msgid "invalid punctuation `%c' in constraint" msgstr "" ! #: stmt.c:1571 #, c-format msgid "output number %d not directly addressable" msgstr "" ! #: stmt.c:1599 #, c-format msgid "more than %d operands in `asm'" msgstr "" ! #: stmt.c:1637 #, c-format msgid "hard register `%s' listed as input operand to `asm'" msgstr "" ! #: stmt.c:1654 #, c-format msgid "input operand constraint contains `%c'" msgstr "" ! #: stmt.c:1691 msgid "matching constraint references invalid operand number" msgstr "" #. ??? Leave this only until we have experience with what #. happens in combine and elsewhere when constraints are #. not satisfied. ! #: stmt.c:1758 stmt.c:1787 #, c-format msgid "asm operand %d probably doesn't match constraints" msgstr "" ! #: stmt.c:3588 #, c-format msgid "unused variable `%s'" ! msgstr "oanvänd variabel \"%s\"" ! #: stmt.c:5047 #, c-format msgid "enumeration value `%s' not handled in switch" msgstr "" ! #: stmt.c:5073 stmt.c:5093 #, c-format msgid "case value `%ld' not in enumerated type" msgstr "" ! #: stmt.c:5076 stmt.c:5096 #, c-format msgid "case value `%ld' not in enumerated type `%s'" msgstr "" ! #: stor-layout.c:164 msgid "type size can't be explicitly evaluated" msgstr "" ! #: stor-layout.c:166 msgid "variable-size type declared outside of any function" msgstr "" ! #: stor-layout.c:439 #, c-format msgid "size of `%s' is %d bytes" ! msgstr "storleken på \"%s\" är %d bytes" ! #: stor-layout.c:441 #, c-format msgid "size of `%s' is larger than %d bytes" ! msgstr "storleken på \"%s\" är större än %d bytes" ! #: stor-layout.c:814 stor-layout.c:1066 #, c-format msgid "packed attribute causes inefficient alignment for `%s'" msgstr "" ! #: stor-layout.c:816 stor-layout.c:1068 #, c-format msgid "packed attribute is unnecessary for `%s'" msgstr "" ! #: stor-layout.c:831 #, c-format msgid "padding struct to align `%s'" msgstr "" ! #: stor-layout.c:1030 msgid "padding struct size to alignment boundary" msgstr "" ! #: stor-layout.c:1073 msgid "packed attribute causes inefficient alignment" msgstr "" ! #: stor-layout.c:1075 msgid "packed attribute is unnecessary" msgstr "" ! #: timevar.c:442 msgid "" "\n" "Execution times (seconds)\n" msgstr "" + "\n" + "Exekveringstider (sekunder)\n" #. Print total time. ! #: timevar.c:490 msgid " TOTAL :" ! msgstr " TOTALT :" ! #: timevar.c:529 ! #, c-format msgid "time in %s: %ld.%06ld (%ld%%)\n" ! msgstr "tid %s: %ld.%06ld (%ld%%)\n" #: tlink.c:428 #, c-format *************** msgstr "" *** 10117,10637 **** msgid "ld returned %d exit status" msgstr "" ! #: toplev.c:1456 toplev.c:4878 tradcpp.c:699 ! #, c-format ! msgid "Invalid option `%s'" msgstr "" ! #: toplev.c:1656 ! #, c-format msgid "" ! "Internal error: %s.\n" ! "Please submit a full bug report.\n" ! "See %s for instructions." msgstr "" - "Internt fel: %s.\n" - "Var vänlig och skicka in en felrapport.\n" - "Se %s för instruktioner." ! #: toplev.c:1988 #, c-format msgid "`%s' used but never defined" ! msgstr "" ! #: toplev.c:1991 #, c-format msgid "`%s' declared `static' but never defined" ! msgstr "" ! #: toplev.c:2013 #, c-format msgid "`%s' defined but not used" ! msgstr "" ! #: toplev.c:2255 msgid "-ffunction-sections not supported for this target." msgstr "" ! #: toplev.c:2260 msgid "-fdata-sections not supported for this target." msgstr "" ! #: toplev.c:2268 msgid "-ffunction-sections disabled; it makes profiling impossible." msgstr "" ! #: toplev.c:2274 msgid "-ffunction-sections may affect debugging on some targets." msgstr "" ! #: toplev.c:2334 msgid "Errors detected in input file (your bison.simple is out of date)\n" msgstr "" ! #: toplev.c:2565 #, c-format ! msgid "invalid register name `%s' for register variable" ! msgstr "" ! #: toplev.c:3773 #, c-format ! msgid "Usage: %s input [switches]\n" ! msgstr "" ! ! #: toplev.c:3774 ! msgid "Switches:\n" msgstr "" ! #: toplev.c:3776 msgid "" " -ffixed- Mark as being unavailable to the " "compiler\n" msgstr "" ! #: toplev.c:3777 msgid "" " -fcall-used- Mark as being corrupted by function " "calls\n" msgstr "" ! #: toplev.c:3778 msgid "" " -fcall-saved- Mark as being preserved across " "functions\n" ! msgstr "" ! #: toplev.c:3779 msgid "" " -finline-limit= Limits the size of inlined functions to \n" msgstr "" ! #: toplev.c:3780 msgid "" " -fmessage-length= Limits diagnostics messages lengths to " "characters per line. 0 suppresses line-wrapping\n" msgstr "" ! #: toplev.c:3781 msgid "" " -fdiagnostics-show-location=[once | every-line] Indicates how often source " "location information should be emitted, as prefix, at the beginning of " "diagnostics when line-wrapping\n" msgstr "" ! #: toplev.c:3792 msgid " -O[number] Set optimisation level to [number]\n" ! msgstr "" ! #: toplev.c:3793 msgid " -Os Optimise for space rather than speed\n" msgstr "" ! #: toplev.c:3794 msgid "" " -pedantic Issue warnings needed by strict compliance to ISO " "C\n" msgstr "" ! #: toplev.c:3795 msgid "" " -pedantic-errors Like -pedantic except that errors are produced\n" ! msgstr "" ! #: toplev.c:3796 msgid " -w Suppress warnings\n" ! msgstr "" ! #: toplev.c:3797 msgid " -W Enable extra warnings\n" ! msgstr "" ! #: toplev.c:3808 msgid " -Wunused Enable unused warnings\n" ! msgstr "" ! ! #: toplev.c:3809 ! msgid "" ! " -Wid-clash- Warn if 2 identifiers have the same first " ! "chars\n" ! msgstr "" ! #: toplev.c:3810 msgid "" " -Wlarger-than- Warn if an object is larger than bytes\n" msgstr "" ! #: toplev.c:3811 msgid " -p Enable function profiling\n" ! msgstr "" ! #: toplev.c:3813 msgid " -a Enable block profiling \n" ! msgstr "" ! #: toplev.c:3816 msgid " -ax Enable jump profiling \n" ! msgstr "" ! #: toplev.c:3818 msgid " -o Place output into \n" ! msgstr "" ! #: toplev.c:3819 msgid "" " -G Put global and static data smaller than \n" " bytes into a special section (on some targets)\n" msgstr "" ! #: toplev.c:3830 ! msgid " -aux-info Emit declaration info into .X\n" ! msgstr "" ! #: toplev.c:3831 msgid "" " -quiet Do not display functions compiled or elapsed time\n" msgstr "" ! #: toplev.c:3832 msgid " -version Display the compiler's version\n" ! msgstr "" ! #: toplev.c:3833 msgid "" " -d[letters] Enable dumps from specific passes of the compiler\n" msgstr "" ! #: toplev.c:3834 msgid "" " -dumpbase Base name to be used for dumps from specific " "passes\n" msgstr "" ! #: toplev.c:3836 msgid " -fsched-verbose= Set the verbosity level of the scheduler\n" msgstr "" ! #: toplev.c:3838 msgid " --help Display this information\n" ! msgstr "" ! #: toplev.c:3853 msgid "" "\n" "Language specific options:\n" msgstr "" ! #: toplev.c:3865 #, c-format msgid " %-23.23s [undocumented]\n" ! msgstr "" ! #: toplev.c:3873 toplev.c:3887 #, c-format msgid "" "\n" "There are undocumented %s specific options as well.\n" msgstr "" ! #: toplev.c:3877 #, c-format msgid "" "\n" " Options for %s:\n" msgstr "" ! #: toplev.c:3900 msgid "" "\n" "Target specific options:\n" msgstr "" ! #: toplev.c:3914 toplev.c:3933 #, c-format ! msgid " -m%-21.21s [undocumented]\n" ! msgstr "" ! #: toplev.c:3942 msgid "" "\n" "There are undocumented target specific options as well.\n" msgstr "" ! #: toplev.c:3944 msgid " They exist, but they are not documented.\n" ! msgstr "" ! #: toplev.c:3996 #, c-format msgid "unrecognized gcc debugging option: %c" ! msgstr "" ! #: toplev.c:4058 #, c-format msgid "unrecognized register name `%s'" ! msgstr "" ! #: toplev.c:4085 toplev.c:4699 #, c-format msgid "Unrecognized option `%s'" msgstr "" ! #: toplev.c:4212 #, c-format msgid "use -gdwarf -g%d for DWARF v1, level %d" msgstr "" ! #: toplev.c:4215 msgid "use -gdwarf-2 for DWARF v2" msgstr "" ! #: toplev.c:4220 #, c-format msgid "ignoring option `%s' due to invalid debug level specification" msgstr "" ! #: toplev.c:4243 toplev.c:4697 #, c-format msgid "`%s': unknown or unsupported -g option" ! msgstr "" ! #: toplev.c:4250 #, c-format msgid "`%s' ignored, conflicts with `-g%s'" msgstr "" ! #: toplev.c:4395 msgid "`-a' option (basic block profile) not supported" ! msgstr "" ! #: toplev.c:4403 msgid "`-ax' option (jump profiling) not supported" ! msgstr "" ! #: toplev.c:4689 #, c-format msgid "Ignoring command line option '%s'" ! msgstr "" ! #: toplev.c:4692 #, c-format msgid "(It is valid for %s but not the selected language)" msgstr "" ! #: toplev.c:4723 msgid "-Wuninitialized is not supported without -O" msgstr "" ! #: toplev.c:4765 msgid "`-ax' and `-a' are conflicting options. `-a' ignored." msgstr "" ! #: toplev.c:4786 msgid "instruction scheduling not supported on this target machine" msgstr "" ! #: toplev.c:4790 msgid "this target machine does not have delayed branches" msgstr "" ! #: toplev.c:4804 ! #, c-format ! msgid "-f%sleading-underscore not supported on this target machine" msgstr "" ! #: toplev.c:4824 #, c-format ! msgid "Data size %ld.\n" msgstr "" ! #: toplev.c:4895 #, c-format msgid "" ! "%s%s%s version %s (%s) compiled by GNU C version %s.\n" "%s%s%s version %s (%s) compiled by CC.\n" msgstr "" ! #: toplev.c:4950 msgid "options passed: " msgstr "" ! #: toplev.c:4979 msgid "options enabled: " msgstr "" ! #: tradcpp.c:112 msgid "macro or #include recursion too deep" msgstr "" ! #: tradcpp.c:517 #, c-format msgid "Usage: %s [switches] input output" msgstr "" ! #: tradcpp.c:533 msgid "-traditional is not supported in C++" msgstr "" ! #: tradcpp.c:535 msgid "-traditional and -ansi are mutually exclusive" msgstr "" ! #: tradcpp.c:549 msgid "Filename missing after -i option" ! msgstr "" ! #: tradcpp.c:567 msgid "Filename missing after -o option" ! msgstr "" ! #: tradcpp.c:618 ! msgid "Macro name missing after -D option" ! msgstr "" ! #: tradcpp.c:630 ! msgid "Macro name missing after -U option" ! msgstr "" ! #: tradcpp.c:641 msgid "-pedantic and -traditional are mutually exclusive" ! msgstr "" ! #: tradcpp.c:646 msgid "-trigraphs and -traditional are mutually exclusive" ! msgstr "" ! #: tradcpp.c:672 msgid "Directory name missing after -I option" ! msgstr "" ! #: tradcpp.c:1326 tradcpp.c:3402 msgid "`/*' within comment" ! msgstr "" ! #: tradcpp.c:1701 #, c-format msgid "unterminated #%s conditional" msgstr "" ! #: tradcpp.c:2060 msgid "not in any file?!" msgstr "" ! #: tradcpp.c:2148 msgid "`defined' must be followed by ident or (ident)" msgstr "" ! #: tradcpp.c:2152 msgid "cccp error: invalid special hash type" msgstr "" ! #: tradcpp.c:2256 msgid "#include expects \"fname\" or " msgstr "" ! #: tradcpp.c:2305 #, c-format ! msgid "nonexistent file <%.*s> omitted from dependency output" msgstr "" ! #: tradcpp.c:2485 msgid "invalid macro name" msgstr "" ! #: tradcpp.c:2491 #, c-format msgid "invalid macro name `%s'" ! msgstr "" ! #: tradcpp.c:2494 ! msgid "defining `defined' as a macro" msgstr "" ! #: tradcpp.c:2519 msgid "parameter name starts with a digit in #define" msgstr "" ! #: tradcpp.c:2529 msgid "badly punctuated parameter list in #define" msgstr "" ! #: tradcpp.c:2537 msgid "unterminated parameter list in #define" msgstr "" ! #: tradcpp.c:2582 #, c-format msgid "\"%.*s\" redefined" msgstr "" ! #: tradcpp.c:2838 msgid "# operator should be followed by a macro argument name" msgstr "" ! #: tradcpp.c:2886 tradcpp.c:2901 tradcpp.c:2919 tradcpp.c:2933 tradcpp.c:2940 ! #: tradcpp.c:2965 msgid "invalid format #line command" msgstr "" ! #: tradcpp.c:2991 msgid "undefining `defined'" msgstr "" ! #: tradcpp.c:2995 #, c-format msgid "undefining `%s'" msgstr "" ! #: tradcpp.c:3039 msgid "#elif not within a conditional" msgstr "" ! #: tradcpp.c:3282 #, c-format msgid "#%s not within a conditional" msgstr "" ! #: tradcpp.c:3290 msgid "#else or #elif after #else" ! msgstr "" ! #: tradcpp.c:3331 msgid "#else not within a conditional" msgstr "" ! #: tradcpp.c:3363 msgid "unbalanced #endif" ! msgstr "" ! #: tradcpp.c:3457 msgid "unterminated string or character constant" msgstr "" ! #: tradcpp.c:3613 #, c-format msgid "arguments given to macro `%s'" msgstr "" ! #: tradcpp.c:3619 #, c-format msgid "no args to macro `%s'" ! msgstr "" ! #: tradcpp.c:3621 #, c-format msgid "only 1 arg to macro `%s'" ! msgstr "" ! #: tradcpp.c:3623 #, c-format msgid "only %d args to macro `%s'" ! msgstr "" ! #: tradcpp.c:3625 #, c-format msgid "too many (%d) args to macro `%s'" ! msgstr "" ! #: tradcpp.c:4251 #, c-format msgid "" "Internal error in %s, at tradcpp.c:%d\n" --- 15170,16463 ---- msgid "ld returned %d exit status" msgstr "" ! #: toplev.c:925 ! msgid "Generate debugging info in default format" msgstr "" ! #: toplev.c:926 ! msgid "Generate debugging info in default extended format" ! msgstr "" ! ! #: toplev.c:928 ! msgid "Generate STABS format debug info" ! msgstr "" ! ! #: toplev.c:929 ! msgid "Generate extended STABS format debug info" ! msgstr "" ! ! #: toplev.c:932 ! msgid "Generate DWARF-1 format debug info" ! msgstr "" ! ! #: toplev.c:934 ! msgid "Generate extended DWARF-1 format debug info" ! msgstr "" ! ! #: toplev.c:937 ! msgid "Generate DWARF-2 debug info" ! msgstr "" ! ! #: toplev.c:940 ! msgid "Generate XCOFF format debug info" ! msgstr "" ! ! #: toplev.c:941 ! msgid "Generate extended XCOFF format debug info" ! msgstr "" ! ! #: toplev.c:944 ! msgid "Generate COFF format debug info" ! msgstr "" ! ! #: toplev.c:988 ! msgid "Perform DWARF2 duplicate elimination" ! msgstr "" ! ! #: toplev.c:990 ! msgid "Do not store floats in registers" ! msgstr "" ! ! #: toplev.c:992 ! msgid "Consider all mem refs through pointers as volatile" ! msgstr "" ! ! #: toplev.c:994 ! msgid "Consider all mem refs to global data to be volatile" ! msgstr "" ! ! #: toplev.c:996 ! msgid "Consider all mem refs to static data to be volatile" ! msgstr "" ! ! #: toplev.c:998 ! msgid "Defer popping functions args from stack until later" ! msgstr "" ! ! #: toplev.c:1000 ! msgid "When possible do not generate stack frames" ! msgstr "" ! ! #: toplev.c:1002 ! msgid "Optimize sibling and tail recursive calls" ! msgstr "" ! ! #: toplev.c:1004 ! msgid "When running CSE, follow jumps to their targets" ! msgstr "" ! ! #: toplev.c:1006 ! msgid "When running CSE, follow conditional jumps" ! msgstr "" ! ! #: toplev.c:1008 ! msgid "Perform a number of minor, expensive optimisations" ! msgstr "" ! ! #: toplev.c:1010 ! msgid "Perform jump threading optimisations" ! msgstr "" ! ! #: toplev.c:1012 ! msgid "Perform strength reduction optimisations" ! msgstr "" ! ! #: toplev.c:1014 ! msgid "Perform loop unrolling when iteration count is known" ! msgstr "" ! ! #: toplev.c:1016 ! msgid "Perform loop unrolling for all loops" ! msgstr "" ! ! #: toplev.c:1018 ! msgid "Force all loop invariant computations out of loops" ! msgstr "" ! ! #: toplev.c:1020 ! msgid "Strength reduce all loop general induction variables" ! msgstr "" ! ! #: toplev.c:1022 ! msgid "Store strings in writable data section" ! msgstr "" ! ! #: toplev.c:1024 ! msgid "Enable machine specific peephole optimisations" ! msgstr "" ! ! #: toplev.c:1026 ! msgid "Copy memory operands into registers before using" ! msgstr "" ! ! #: toplev.c:1028 ! msgid "Copy memory address constants into regs before using" ! msgstr "" ! ! #: toplev.c:1030 ! msgid "Allow function addresses to be held in registers" ! msgstr "" ! ! #: toplev.c:1032 ! msgid "Integrate simple functions into their callers" ! msgstr "" ! ! #: toplev.c:1034 ! msgid "Generate code for funcs even if they are fully inlined" ! msgstr "" ! ! #: toplev.c:1036 ! msgid "Pay attention to the 'inline' keyword" ! msgstr "" ! ! #: toplev.c:1038 ! msgid "Emit static const variables even if they are not used" ! msgstr "" ! ! #: toplev.c:1040 ! msgid "Check for syntax errors, then stop" ! msgstr "Leta efter syntaxfel, stoppa sedan" ! ! #: toplev.c:1042 ! msgid "Mark data as shared rather than private" ! msgstr "" ! ! #: toplev.c:1044 ! msgid "Enable saving registers around function calls" ! msgstr "" ! ! #: toplev.c:1046 ! msgid "Return 'short' aggregates in memory, not registers" ! msgstr "" ! ! #: toplev.c:1048 ! msgid "Return 'short' aggregates in registers" ! msgstr "" ! ! #: toplev.c:1050 ! msgid "Attempt to fill delay slots of branch instructions" ! msgstr "" ! ! #: toplev.c:1052 ! msgid "Perform the global common subexpression elimination" ! msgstr "" ! ! #: toplev.c:1054 ! msgid "Perform enhanced load motion during global subexpression elimination" ! msgstr "" ! ! #: toplev.c:1056 ! msgid "Perform store motion after global subexpression elimination" ! msgstr "" ! ! #: toplev.c:1058 ! msgid "Run CSE pass after loop optimisations" ! msgstr "" ! ! #: toplev.c:1060 ! msgid "Run the loop optimiser twice" ! msgstr "" ! ! #: toplev.c:1062 ! msgid "Delete useless null pointer checks" ! msgstr "" ! ! #: toplev.c:1064 ! msgid "Pretend that host and target use the same FP format" ! msgstr "" ! ! #: toplev.c:1066 ! msgid "Reschedule instructions before register allocation" ! msgstr "" ! ! #: toplev.c:1068 ! msgid "Reschedule instructions after register allocation" ! msgstr "" ! ! #: toplev.c:1070 ! msgid "Enable scheduling across basic blocks" ! msgstr "" ! ! #: toplev.c:1072 ! msgid "Allow speculative motion of non-loads" ! msgstr "" ! ! #: toplev.c:1074 ! msgid "Allow speculative motion of some loads" ! msgstr "" ! ! #: toplev.c:1076 ! msgid "Allow speculative motion of more loads" ! msgstr "" ! ! #: toplev.c:1078 ! msgid "Replace add,compare,branch with branch on count reg" ! msgstr "" ! ! #: toplev.c:1080 ! msgid "Generate position independent code, if possible" ! msgstr "" ! ! #: toplev.c:1083 ! msgid "Enable exception handling" ! msgstr "" ! ! #: toplev.c:1085 ! msgid "Just generate unwind tables for exception handling" ! msgstr "" ! ! #: toplev.c:1087 ! msgid "Support synchronous non-call exceptions" ! msgstr "" ! ! #: toplev.c:1089 ! msgid "Insert arc based program profiling code" ! msgstr "" ! ! #: toplev.c:1091 ! msgid "Create data files needed by gcov" ! msgstr "" ! ! #: toplev.c:1093 ! msgid "Use profiling information for branch probabilities" ! msgstr "" ! ! #: toplev.c:1095 ! msgid "Reorder basic blocks to improve code placement" ! msgstr "" ! ! #: toplev.c:1097 ! msgid "Do the register renaming optimization pass" ! msgstr "" ! ! #: toplev.c:1099 ! msgid "Do not put unitialised globals in the common section" ! msgstr "" ! ! #: toplev.c:1101 ! msgid "Do not generate .size directives" ! msgstr "Generera inte .size-direktiv" ! ! #: toplev.c:1103 ! msgid "place each function into its own section" ! msgstr "placera varje funktion i sin egen sektion" ! ! #: toplev.c:1105 ! msgid "place data items into their own section" ! msgstr "" ! ! #: toplev.c:1107 ! msgid "Add extra commentry to assembler output" ! msgstr "" ! ! #: toplev.c:1109 ! msgid "Output GNU ld formatted global initialisers" ! msgstr "" ! ! #: toplev.c:1111 ! msgid "Enables a register move optimisation" ! msgstr "" ! ! #: toplev.c:1113 ! msgid "Do the full regmove optimization pass" ! msgstr "" ! ! #: toplev.c:1115 ! msgid "Pack structure members together without holes" ! msgstr "" ! ! #: toplev.c:1117 ! msgid "Insert stack checking code into the program" ! msgstr "" ! ! #: toplev.c:1119 ! msgid "Specify that arguments may alias each other & globals" ! msgstr "" ! ! #: toplev.c:1121 ! msgid "Assume arguments may alias globals but not each other" ! msgstr "" ! ! #: toplev.c:1123 ! msgid "Assume arguments do not alias each other or globals" ! msgstr "" ! ! #: toplev.c:1125 ! msgid "Assume strict aliasing rules apply" ! msgstr "" ! ! #: toplev.c:1127 ! msgid "Align the start of loops" ! msgstr "" ! ! #: toplev.c:1129 ! msgid "Align labels which are only reached by jumping" ! msgstr "" ! ! #: toplev.c:1131 ! msgid "Align all labels" ! msgstr "" ! ! #: toplev.c:1133 ! msgid "Align the start of functions" ! msgstr "" ! ! #: toplev.c:1135 ! msgid "Generate code to check every memory access" ! msgstr "" ! ! #: toplev.c:1137 ! msgid "Add a prefix to all function names" ! msgstr "" ! ! #: toplev.c:1139 msgid "" ! "Suppress output of instruction numbers and line number notes in debugging " ! "dumps" msgstr "" ! #: toplev.c:1141 ! msgid "Instrument function entry/exit with profiling calls" ! msgstr "" ! ! #: toplev.c:1143 ! msgid "Enable SSA optimizations" ! msgstr "" ! ! #: toplev.c:1145 ! msgid "Enable dead code elimination" ! msgstr "" ! ! #: toplev.c:1147 ! msgid "External symbols have a leading underscore" ! msgstr "Externa symboler startar med en understrykning" ! ! #: toplev.c:1149 ! msgid "Process #ident directives" ! msgstr "Hantera #ident-direktiv" ! ! #: toplev.c:1151 ! msgid "Enables an rtl peephole pass run before sched2" ! msgstr "" ! ! #: toplev.c:1153 ! msgid "Enables guessing of branch probabilities" ! msgstr "" ! ! #: toplev.c:1155 ! msgid "Set errno after built-in math functions" ! msgstr "Sätt errno efter inbyggda matematikfunktioner" ! ! #: toplev.c:1157 ! msgid "Floating-point operations can trap" ! msgstr "" ! ! #: toplev.c:1159 ! msgid "Allow math optimizations that may violate IEEE or ANSI standards" ! msgstr "" ! ! #: toplev.c:1161 ! msgid "Compile pointers as triples: value, base & end" ! msgstr "" ! ! #: toplev.c:1163 ! msgid "Generate code to check bounds before dereferencing pointers and arrays" ! msgstr "" ! ! #: toplev.c:1165 ! msgid "Convert floating point constant to single precision constant" ! msgstr "" ! ! #: toplev.c:1167 ! msgid "Report time taken by each compiler pass at end of run" ! msgstr "" ! ! #: toplev.c:1169 ! msgid "Report on permanent memory allocation at end of run" ! msgstr "" ! ! #: toplev.c:1171 ! msgid "Trap for signed overflow in addition / subtraction / multiplication." ! msgstr "" ! ! #: toplev.c:1188 ! msgid "Compile just for ISO C89" ! msgstr "" ! ! #: toplev.c:1190 ! msgid "Do not promote floats to double if using -traditional" ! msgstr "" ! ! #: toplev.c:1192 ! msgid "Determine language standard" ! msgstr "" ! ! #: toplev.c:1196 ! msgid "Make bitfields by unsigned by default" ! msgstr "" ! ! #: toplev.c:1200 ! msgid "Make 'char' be signed by default" ! msgstr "" ! ! #: toplev.c:1202 ! msgid "Make 'char' be unsigned by default" ! msgstr "" ! ! #: toplev.c:1208 ! msgid "Attempt to support traditional K&R style C" ! msgstr "" ! ! #: toplev.c:1214 ! msgid "Do not recognise the 'asm' keyword" ! msgstr "" ! ! #: toplev.c:1217 ! msgid "Do not recognise any built in functions" ! msgstr "Känn inte igen några inbyggda funktioner" ! ! #: toplev.c:1219 ! msgid "Assume normal C execution environment" ! msgstr "" ! ! #: toplev.c:1222 ! msgid "Assume that standard libraries & main might not exist" ! msgstr "" ! ! #: toplev.c:1225 ! msgid "Allow different types as args of ? operator" ! msgstr "" ! ! #: toplev.c:1228 ! msgid "Allow the use of $ inside identifiers" ! msgstr "" ! ! #: toplev.c:1233 ! msgid "Use the same size for double as for float" ! msgstr "" ! ! #: toplev.c:1236 ! msgid "Use the smallest fitting integer to hold enums" ! msgstr "" ! ! #: toplev.c:1239 ! msgid "Override the underlying type for wchar_t to `unsigned short'" ! msgstr "" ! ! #: toplev.c:1243 ! msgid "Enable most warning messages" ! msgstr "" ! ! #: toplev.c:1245 ! msgid "Warn about casting functions to incompatible types" ! msgstr "" ! ! #: toplev.c:1249 ! msgid "Warn about functions which might be candidates for format attributes" ! msgstr "" ! ! #: toplev.c:1252 ! msgid "Warn about casts which discard qualifiers" ! msgstr "" ! ! #: toplev.c:1255 ! msgid "Warn about subscripts whose type is 'char'" ! msgstr "Varna om index har typen \"char\"" ! ! #: toplev.c:1258 toplev.c:1261 ! msgid "Warn if nested comments are detected" ! msgstr "Varna om nästlade kommentarer upptäcks" ! ! #: toplev.c:1264 ! msgid "Warn about possibly confusing type conversions" ! msgstr "" ! ! #: toplev.c:1267 ! msgid "Warn about printf/scanf/strftime/strfmon format anomalies" ! msgstr "" ! ! #: toplev.c:1271 ! msgid "Don't warn about strftime formats yielding 2 digit years" ! msgstr "" ! ! #: toplev.c:1274 ! msgid "Don't warn about too many arguments to format functions" ! msgstr "Varna inte om för många argument till format-funktioner" ! ! #: toplev.c:1276 ! msgid "Warn about non-string-literal format strings" ! msgstr "" ! ! #: toplev.c:1279 ! msgid "Warn about possible security problems with format functions" ! msgstr "" ! ! #: toplev.c:1282 ! msgid "Warn about implicit function declarations" ! msgstr "" ! ! #: toplev.c:1286 ! msgid "Warn when a declaration does not specify a type" ! msgstr "" ! ! #: toplev.c:1291 ! msgid "Warn about the use of the #import directive" ! msgstr "" ! ! #: toplev.c:1295 ! msgid "Do not warn about using 'long long' when -pedantic" ! msgstr "" ! ! #: toplev.c:1297 ! msgid "Warn about suspicious declarations of main" ! msgstr "Varna om tveksamma deklarationer av main" ! ! #: toplev.c:1300 ! msgid "Warn about possibly missing braces around initialisers" ! msgstr "" ! ! #: toplev.c:1303 ! msgid "Warn about global funcs without previous declarations" ! msgstr "" ! ! #: toplev.c:1306 ! msgid "Warn about global funcs without prototypes" ! msgstr "" ! ! #: toplev.c:1309 ! msgid "Warn about use of multicharacter literals" ! msgstr "" ! ! #: toplev.c:1312 ! msgid "Warn about externs not at file scope level" ! msgstr "" ! ! #: toplev.c:1315 ! msgid "Warn about possible missing parentheses" ! msgstr "Varna om eventuellt saknade parenteser" ! ! #: toplev.c:1318 ! msgid "Warn about possible violations of sequence point rules" ! msgstr "" ! ! #: toplev.c:1321 ! msgid "Warn about function pointer arithmetic" ! msgstr "Varna om aritmetik med funktionspekare" ! ! #: toplev.c:1324 ! msgid "Warn about multiple declarations of the same object" ! msgstr "Varna om multipla deklarationer av samma objekt" ! ! #: toplev.c:1327 ! msgid "Warn about signed/unsigned comparisons" ! msgstr "Varna om jämförelser mellan signed/unsigned" ! ! #: toplev.c:1330 ! msgid "Warn about testing equality of floating point numbers" ! msgstr "" ! ! #: toplev.c:1333 ! msgid "Warn about unrecognized pragmas" ! msgstr "" ! ! #: toplev.c:1336 ! msgid "Warn about non-prototyped function decls" ! msgstr "" ! ! #: toplev.c:1339 ! msgid "Warn about constructs whose meaning change in ISO C" ! msgstr "" ! ! #: toplev.c:1342 ! msgid "Warn when trigraphs are encountered" ! msgstr "" ! ! #: toplev.c:1347 ! msgid "Mark strings as 'const char *'" ! msgstr "Markera strängar som \"const char *\"" ! ! #: toplev.c:1489 ! msgid "Warn when a function is unused" ! msgstr "Varna när en funktion är oanvänd" ! ! #: toplev.c:1491 ! msgid "Warn when a label is unused" ! msgstr "Varna när en etikett är oanvänd" ! ! #: toplev.c:1493 ! msgid "Warn when a function parameter is unused" ! msgstr "Varna när en funktionsparameter är oanvänd" ! ! #: toplev.c:1495 ! msgid "Warn when a variable is unused" ! msgstr "Varna när en variabel är oanvänd" ! ! #: toplev.c:1497 ! msgid "Warn when an expression value is unused" ! msgstr "Varna när ett uttrycksvärde är oanvänt" ! ! #: toplev.c:1499 ! msgid "Do not suppress warnings from system headers" ! msgstr "" ! ! #: toplev.c:1501 ! msgid "Treat all warnings as errors" ! msgstr "" ! ! #: toplev.c:1503 ! msgid "Warn when one local variable shadows another" ! msgstr "" ! ! #: toplev.c:1505 ! msgid "Warn about enumerated switches missing a specific case" ! msgstr "" ! ! #: toplev.c:1507 ! msgid "Warn about returning structures, unions or arrays" ! msgstr "" ! ! #: toplev.c:1509 ! msgid "Warn about pointer casts which increase alignment" ! msgstr "" ! ! #: toplev.c:1511 ! msgid "Warn about code that will never be executed" ! msgstr "" ! ! #: toplev.c:1513 ! msgid "Warn about unitialized automatic variables" ! msgstr "" ! ! #: toplev.c:1515 ! msgid "Warn when an inlined function cannot be inlined" ! msgstr "" ! ! #: toplev.c:1517 ! msgid "Warn when the packed attribute has no effect on struct layout" ! msgstr "" ! ! #: toplev.c:1519 ! msgid "Warn when padding is required to align struct members" ! msgstr "" ! ! #: toplev.c:1521 ! msgid "Warn when an optimization pass is disabled" ! msgstr "" ! ! #: toplev.c:1523 ! msgid "Warn about functions which might be candidates for attribute noreturn" ! msgstr "Varna om funktioner som är möjliga kandidater för attributet noreturn" ! ! #: toplev.c:1577 toplev.c:5031 tradcpp.c:776 ! #, c-format ! msgid "Invalid option `%s'" ! msgstr "Ogiltig flagga \"%s\"" ! ! #: toplev.c:1723 ! #, c-format ! msgid "Internal error: %s" ! msgstr "Internt fel: %s" ! ! #: toplev.c:2023 #, c-format msgid "`%s' used but never defined" ! msgstr "\"%s\" är använd men inte definierad" ! #: toplev.c:2026 #, c-format msgid "`%s' declared `static' but never defined" ! msgstr "\"%s\" är deklarerad som \"static\" men definieras aldrig" ! #: toplev.c:2048 #, c-format msgid "`%s' defined but not used" ! msgstr "\"%s\" är definierad men inte använd" ! #: toplev.c:2186 ! #, c-format ! msgid "can't open %s for writing" ! msgstr "kan inte öppna fil %s för skrivning" ! ! #: toplev.c:2279 msgid "-ffunction-sections not supported for this target." msgstr "" ! #: toplev.c:2284 msgid "-fdata-sections not supported for this target." msgstr "" ! #: toplev.c:2292 msgid "-ffunction-sections disabled; it makes profiling impossible." msgstr "" ! #: toplev.c:2298 msgid "-ffunction-sections may affect debugging on some targets." msgstr "" ! #: toplev.c:2339 msgid "Errors detected in input file (your bison.simple is out of date)\n" msgstr "" ! #: toplev.c:2476 #, c-format ! msgid "error writing to %s" ! msgstr "fel vid skrivning till %s" ! #: toplev.c:2572 #, c-format ! msgid "invalid register name `%s' for register variable" msgstr "" ! #: toplev.c:3855 msgid "" " -ffixed- Mark as being unavailable to the " "compiler\n" msgstr "" + " -ffixed- Markera som ej tillgängligt för " + "kompilatorn\n" ! #: toplev.c:3856 msgid "" " -fcall-used- Mark as being corrupted by function " "calls\n" msgstr "" + " -fcall-used- Ange att förstörs av funktionsanrop\n" ! #: toplev.c:3857 msgid "" " -fcall-saved- Mark as being preserved across " "functions\n" ! msgstr " -fcall-saved- Ange att bevaras av funktioner\n" ! #: toplev.c:3858 msgid "" " -finline-limit= Limits the size of inlined functions to \n" msgstr "" + " -finline-limit= Begränsa storlek på inline-funktioner till " + "\n" ! #: toplev.c:3859 msgid "" " -fmessage-length= Limits diagnostics messages lengths to " "characters per line. 0 suppresses line-wrapping\n" msgstr "" + " -fmessage-length= Begränsa felmeddelandens längd till " + "tecken per rad. 0 stänger av radbrytning\n" ! #: toplev.c:3860 msgid "" " -fdiagnostics-show-location=[once | every-line] Indicates how often source " "location information should be emitted, as prefix, at the beginning of " "diagnostics when line-wrapping\n" msgstr "" + " -fdiagnostics-show-location=[once | every-line] Anger hur ofta " + "källkodspositioner skall skrivas ut, som prefix, i början av utskrift vid " + "radbrytning\n" ! #: toplev.c:3871 msgid " -O[number] Set optimisation level to [number]\n" ! msgstr " -O[nummer] Sätt optimeringsnivå till [nummer]\n" ! #: toplev.c:3872 msgid " -Os Optimise for space rather than speed\n" msgstr "" + " -Os Optimera för storlek istället för hastighet\n" ! #: toplev.c:3884 msgid "" " -pedantic Issue warnings needed by strict compliance to ISO " "C\n" msgstr "" + " -pedantic Ge varningar som krävs för att strikt följa ISO C\n" ! #: toplev.c:3885 msgid "" " -pedantic-errors Like -pedantic except that errors are produced\n" ! msgstr " -pedantic-errors Som -pedantic men ger fel istället\n" ! #: toplev.c:3886 msgid " -w Suppress warnings\n" ! msgstr " -w Stoppa varningar\n" ! #: toplev.c:3887 msgid " -W Enable extra warnings\n" ! msgstr " -W Slå på extra varningar\n" ! #: toplev.c:3898 msgid " -Wunused Enable unused warnings\n" ! msgstr " -Wunused Slå på oanvända varningar\n" ! #: toplev.c:3899 msgid "" " -Wlarger-than- Warn if an object is larger than bytes\n" msgstr "" + " -Wlarger-than- Varna om objekt är större än bytes\n" ! #: toplev.c:3900 msgid " -p Enable function profiling\n" ! msgstr " -p Slå på funktionsprofilering\n" ! #: toplev.c:3902 msgid " -a Enable block profiling \n" ! msgstr " -a Slå på blockprofilering\n" ! #: toplev.c:3905 msgid " -ax Enable jump profiling \n" ! msgstr " -ax Slå på hopprofilering\n" ! #: toplev.c:3907 msgid " -o Place output into \n" ! msgstr " -o Skriv utdata i \n" ! #: toplev.c:3908 msgid "" " -G Put global and static data smaller than \n" " bytes into a special section (on some targets)\n" msgstr "" + " -G Placera global and statisk data mindre än " + "\n" + " bytes i en speciell sektion (vissa arkitekturer)\n" ! #: toplev.c:3919 ! msgid " -aux-info Emit declaration info into \n" ! msgstr " -aux-info Generera deklarationsinfo till fil \n" ! #: toplev.c:3920 msgid "" " -quiet Do not display functions compiled or elapsed time\n" msgstr "" + " -quiet Visa inte kompilerade funktioner eller tiden som " + "förbrukats\n" ! #: toplev.c:3921 msgid " -version Display the compiler's version\n" ! msgstr " -version Visa kompilatorns version\n" ! #: toplev.c:3922 msgid "" " -d[letters] Enable dumps from specific passes of the compiler\n" msgstr "" + " -d[bokstäver] Slå på dumpning från angivna delar av kompilatorn\n" ! #: toplev.c:3923 msgid "" " -dumpbase Base name to be used for dumps from specific " "passes\n" msgstr "" ! #: toplev.c:3925 msgid " -fsched-verbose= Set the verbosity level of the scheduler\n" msgstr "" ! #: toplev.c:3927 msgid " --help Display this information\n" ! msgstr " --help Visa den här informatationen\n" ! #: toplev.c:3942 msgid "" "\n" "Language specific options:\n" msgstr "" ! #: toplev.c:3954 #, c-format msgid " %-23.23s [undocumented]\n" ! msgstr " %-23.23s [odokumenterad]\n" ! #: toplev.c:3962 toplev.c:3976 #, c-format msgid "" "\n" "There are undocumented %s specific options as well.\n" msgstr "" + "\n" + "Det finns dessutom odokumenterade %s-specifika flaggor.\n" ! #: toplev.c:3966 #, c-format msgid "" "\n" " Options for %s:\n" msgstr "" + "\n" + " Flaggor för %s:\n" ! #: toplev.c:3997 msgid "" "\n" "Target specific options:\n" msgstr "" + "\n" + "Speciella flaggor för målarkitektur:\n" ! #: toplev.c:4011 toplev.c:4030 #, c-format ! msgid " -m%-23.23s [undocumented]\n" ! msgstr " -m%-23.23s [odokumenterad]\n" ! #: toplev.c:4039 msgid "" "\n" "There are undocumented target specific options as well.\n" msgstr "" + "\n" + "Det finns dessutom odokumenterade flaggor speciellt för målarkitekturen.\n" ! #: toplev.c:4041 msgid " They exist, but they are not documented.\n" ! msgstr " De finns, men är inte dokumenterade.\n" ! #: toplev.c:4094 #, c-format msgid "unrecognized gcc debugging option: %c" ! msgstr "ej igenkänd debuggningsflagga för gcc: %c" ! #: toplev.c:4164 #, c-format msgid "unrecognized register name `%s'" ! msgstr "Känner inte igen registernamn \"%s\"" ! #: toplev.c:4188 toplev.c:4868 #, c-format msgid "Unrecognized option `%s'" + msgstr "Känner inte igen flagga \"%s\"" + + #: toplev.c:4232 + msgid "-Wid-clash-LEN is no longer supported" msgstr "" ! #: toplev.c:4309 #, c-format msgid "use -gdwarf -g%d for DWARF v1, level %d" msgstr "" ! #: toplev.c:4312 msgid "use -gdwarf-2 for DWARF v2" msgstr "" ! #: toplev.c:4317 #, c-format msgid "ignoring option `%s' due to invalid debug level specification" msgstr "" ! #: toplev.c:4340 toplev.c:4866 #, c-format msgid "`%s': unknown or unsupported -g option" ! msgstr "\"%s\": okänd eller icke supportad flagga till -g" ! #: toplev.c:4347 #, c-format msgid "`%s' ignored, conflicts with `-g%s'" + msgstr "\"%s\" ignorerad, i konflikt med \"-g%s\"" + + #: toplev.c:4426 + msgid "-param option missing argument" msgstr "" ! #: toplev.c:4435 ! #, c-format ! msgid "invalid --param option: %s" ! msgstr "ogiltig flagga till --param: %s" ! ! #: toplev.c:4447 ! #, c-format ! msgid "invalid parameter value `%s'" ! msgstr "ogiltigt parametervärde \"%s\"" ! ! #: toplev.c:4538 msgid "`-a' option (basic block profile) not supported" ! msgstr "flagga \"-a\" (block profilering) stöds inte" ! #: toplev.c:4546 msgid "`-ax' option (jump profiling) not supported" ! msgstr "flagga \"-ax\" (hopprofilering) stöds inte" ! #: toplev.c:4858 #, c-format msgid "Ignoring command line option '%s'" ! msgstr "Ignorerar kommandoradsflagga \"%s\"" ! #: toplev.c:4861 #, c-format msgid "(It is valid for %s but not the selected language)" msgstr "" ! #: toplev.c:4899 msgid "-Wuninitialized is not supported without -O" msgstr "" ! #: toplev.c:4926 msgid "`-ax' and `-a' are conflicting options. `-a' ignored." msgstr "" ! #: toplev.c:4947 msgid "instruction scheduling not supported on this target machine" msgstr "" ! #: toplev.c:4951 msgid "this target machine does not have delayed branches" msgstr "" ! #: toplev.c:4960 ! msgid "profiling does not work without a frame pointer" msgstr "" ! #: toplev.c:4975 #, c-format ! msgid "-f%sleading-underscore not supported on this target machine" msgstr "" ! #: toplev.c:5048 #, c-format msgid "" ! "%s%s%s version %s (%s)\n" ! "%s\tcompiled by GNU C version %s.\n" "%s%s%s version %s (%s) compiled by CC.\n" msgstr "" ! #: toplev.c:5104 msgid "options passed: " msgstr "" ! #: toplev.c:5133 msgid "options enabled: " msgstr "" ! #: tradcif.y:110 tradcif.y:121 ! msgid "division by zero in #if" ! msgstr "" ! ! #. It's a float since it contains a point. ! #: tradcif.y:230 ! msgid "floating point numbers not allowed in #if expressions" ! msgstr "" ! ! #: tradcif.y:276 ! msgid "Invalid number in #if expression" ! msgstr "" ! ! #: tradcif.y:361 ! msgid "Invalid character constant in #if" ! msgstr "" ! ! #: tradcif.y:398 ! msgid "double quoted strings not allowed in #if expressions" ! msgstr "" ! ! #: tradcif.y:411 ! msgid "Invalid token in expression" ! msgstr "" ! ! #: tradcif.y:502 ! msgid "octal character constant does not fit in a byte" ! msgstr "" ! ! #: tradcif.y:527 ! msgid "hex character constant does not fit in a byte" ! msgstr "" ! ! #: tradcif.y:558 ! msgid "empty #if expression" ! msgstr "" ! ! #: tradcif.y:572 ! msgid "Junk after end of expression." ! msgstr "" ! ! #: tradcpp.c:137 msgid "macro or #include recursion too deep" msgstr "" ! #: tradcpp.c:550 #, c-format msgid "Usage: %s [switches] input output" msgstr "" ! #: tradcpp.c:566 msgid "-traditional is not supported in C++" msgstr "" ! #: tradcpp.c:568 msgid "-traditional and -ansi are mutually exclusive" msgstr "" ! #: tradcpp.c:582 msgid "Filename missing after -i option" ! msgstr "Filnamn saknas efter flaggan -i" ! #: tradcpp.c:600 msgid "Filename missing after -o option" ! msgstr "Filnamn saknas efter flaggan -o" ! #: tradcpp.c:659 ! #, c-format ! msgid "Target missing after %s option" ! msgstr "Mål saknas efter flaggan %s" ! #: tradcpp.c:673 ! #, c-format ! msgid "Filename missing after %s option" ! msgstr "Filnamn saknas efter flaggan %s" ! #: tradcpp.c:698 ! #, c-format ! msgid "Macro name missing after -%c option" ! msgstr "Makronamn saknas efter flaggan -%c" ! ! #: tradcpp.c:718 msgid "-pedantic and -traditional are mutually exclusive" ! msgstr "-pedantic och -traditional är ömsesidigt uteslutande" ! #: tradcpp.c:723 msgid "-trigraphs and -traditional are mutually exclusive" ! msgstr "-trigraphs och -traditional är ömsesidigt uteslutande" ! #: tradcpp.c:749 msgid "Directory name missing after -I option" ! msgstr "Katalognamn saknas efter flaggan -I" ! #: tradcpp.c:1425 tradcpp.c:3916 msgid "`/*' within comment" ! msgstr "\"/*\" inuti kommentar" ! #: tradcpp.c:1800 #, c-format msgid "unterminated #%s conditional" msgstr "" ! #: tradcpp.c:2159 msgid "not in any file?!" msgstr "" ! #: tradcpp.c:2265 msgid "`defined' must be followed by ident or (ident)" msgstr "" ! #: tradcpp.c:2269 msgid "cccp error: invalid special hash type" msgstr "" ! #: tradcpp.c:2367 tradcpp.c:2437 msgid "#include expects \"fname\" or " msgstr "" ! #: tradcpp.c:2522 #, c-format ! msgid "No include path in which to find %.*s" msgstr "" ! #: tradcpp.c:2700 msgid "invalid macro name" msgstr "" ! #: tradcpp.c:2708 #, c-format msgid "invalid macro name `%s'" ! msgstr "ogiltigt makronamn \"%s\"" ! #: tradcpp.c:2713 ! msgid "\"defined\" cannot be used as a macro name" msgstr "" ! #: tradcpp.c:2740 msgid "parameter name starts with a digit in #define" msgstr "" ! #: tradcpp.c:2750 msgid "badly punctuated parameter list in #define" msgstr "" ! #: tradcpp.c:2758 msgid "unterminated parameter list in #define" msgstr "" ! #: tradcpp.c:2806 #, c-format msgid "\"%.*s\" redefined" msgstr "" ! #: tradcpp.c:3063 msgid "# operator should be followed by a macro argument name" msgstr "" ! #: tradcpp.c:3110 tradcpp.c:3136 tradcpp.c:3150 tradcpp.c:3157 tradcpp.c:3182 msgid "invalid format #line command" msgstr "" ! #: tradcpp.c:3208 msgid "undefining `defined'" msgstr "" ! #: tradcpp.c:3212 #, c-format msgid "undefining `%s'" msgstr "" ! #: tradcpp.c:3268 ! msgid "extra text at end of directive" ! msgstr "extra text vid slutet av direktiv" ! ! #: tradcpp.c:3375 ! #, c-format ! msgid "#error%.*s" ! msgstr "#error%.*s" ! ! #: tradcpp.c:3385 ! #, c-format ! msgid "#warning%.*s" ! msgstr "#warning%.*s" ! ! #: tradcpp.c:3541 msgid "#elif not within a conditional" msgstr "" ! #: tradcpp.c:3798 #, c-format msgid "#%s not within a conditional" msgstr "" ! #: tradcpp.c:3806 msgid "#else or #elif after #else" ! msgstr "#else eller #elif efter #else" ! #: tradcpp.c:3846 msgid "#else not within a conditional" msgstr "" ! #: tradcpp.c:3877 msgid "unbalanced #endif" ! msgstr "obalanserad #endif" ! #: tradcpp.c:3971 msgid "unterminated string or character constant" msgstr "" ! #: tradcpp.c:4129 #, c-format msgid "arguments given to macro `%s'" msgstr "" ! #: tradcpp.c:4135 #, c-format msgid "no args to macro `%s'" ! msgstr "inga argument till makro \"%s\"" ! #: tradcpp.c:4137 #, c-format msgid "only 1 arg to macro `%s'" ! msgstr "bara 1 argument till makro \"%s\"" ! #: tradcpp.c:4139 #, c-format msgid "only %d args to macro `%s'" ! msgstr "bara %d argument till makro \"%s\"" ! #: tradcpp.c:4141 #, c-format msgid "too many (%d) args to macro `%s'" ! msgstr "för många (%d) argument till makro \"%s\"" ! #: tradcpp.c:4767 #, c-format msgid "" "Internal error in %s, at tradcpp.c:%d\n" *************** msgstr "" *** 10642,10759 **** "Var vänlig och skicka in en felrapport.\n" "Se %s för instruktioner." ! #: tree.c:1295 ! #, c-format ! msgid "`%s' and `%s' identical in first %d characters" ! msgstr "" ! ! #: tree.c:4749 msgid "arrays of functions are not meaningful" msgstr "" ! #: tree.c:4806 msgid "function return type cannot be function" msgstr "" ! #: tree.c:5541 msgid "invalid initializer for bit string" msgstr "" ! #: tree.c:5600 #, c-format ! msgid "Tree check: expected %s, have %s" msgstr "" ! #: tree.c:5616 #, c-format ! msgid "Tree check: expected class '%c', have '%c' (%s)" msgstr "" ! #: varasm.c:726 #, c-format msgid "register name not specified for `%s'" msgstr "" ! #: varasm.c:728 #, c-format msgid "invalid register name for `%s'" msgstr "" ! #: varasm.c:731 #, c-format msgid "data type of `%s' isn't suitable for a register" msgstr "" ! #: varasm.c:734 #, c-format msgid "register specified for `%s' isn't suitable for data type" msgstr "" ! #: varasm.c:743 msgid "global register variable has initial value" ! msgstr "" ! #: varasm.c:746 msgid "volatile register variables don't work as you might wish" msgstr "" ! #: varasm.c:781 #, c-format msgid "register name given for non-register variable `%s'" msgstr "" ! #: varasm.c:1417 #, c-format msgid "size of variable `%s' is too large" ! msgstr "" ! #: varasm.c:1457 #, c-format msgid "" "alignment of `%s' is greater than maximum object file alignment. Using %d." msgstr "" ! #: varasm.c:1504 #, c-format msgid "requested alignment for %s is greater than implemented alignment of %d." msgstr "" ! #: varasm.c:1976 msgid "floating point trap outputting a constant" msgstr "" ! #: varasm.c:4286 msgid "initializer for integer value is too complicated" msgstr "" ! #: varasm.c:4292 msgid "initializer for floating value is not a floating constant" msgstr "" ! #: varasm.c:4349 msgid "unknown set constructor type" msgstr "" ! #: varasm.c:4494 #, c-format msgid "invalid initial value for member `%s'" msgstr "" ! #: varasm.c:4676 #, c-format msgid "weak declaration of `%s' must be public" msgstr "" ! #: varasm.c:4678 #, c-format msgid "weak declaration of `%s' must precede definition" msgstr "" ! #: varasm.c:4771 msgid "only weak aliases are supported in this configuration" msgstr "" ! #: varasm.c:4776 msgid "alias definitions not supported in this configuration; ignored" msgstr "" --- 16468,16580 ---- "Var vänlig och skicka in en felrapport.\n" "Se %s för instruktioner." ! #: tree.c:3866 msgid "arrays of functions are not meaningful" msgstr "" ! #: tree.c:3923 msgid "function return type cannot be function" msgstr "" ! #: tree.c:4660 msgid "invalid initializer for bit string" msgstr "" ! #: tree.c:4719 #, c-format ! msgid "Tree check: expected %s, have %s in %s, at %s:%d" msgstr "" ! #: tree.c:4736 #, c-format ! msgid "Tree check: expected class '%c', have '%c' (%s) in %s, at %s:%d" msgstr "" ! #: varasm.c:639 #, c-format msgid "register name not specified for `%s'" msgstr "" ! #: varasm.c:641 #, c-format msgid "invalid register name for `%s'" msgstr "" ! #: varasm.c:644 #, c-format msgid "data type of `%s' isn't suitable for a register" msgstr "" ! #: varasm.c:647 #, c-format msgid "register specified for `%s' isn't suitable for data type" msgstr "" ! #: varasm.c:656 msgid "global register variable has initial value" ! msgstr "global registervariabel har startvärde" ! #: varasm.c:659 msgid "volatile register variables don't work as you might wish" msgstr "" ! #: varasm.c:695 #, c-format msgid "register name given for non-register variable `%s'" msgstr "" ! #: varasm.c:1333 #, c-format msgid "size of variable `%s' is too large" ! msgstr "storleken på variabel \"%s\" är för stor" ! #: varasm.c:1373 #, c-format msgid "" "alignment of `%s' is greater than maximum object file alignment. Using %d." msgstr "" ! #: varasm.c:1420 #, c-format msgid "requested alignment for %s is greater than implemented alignment of %d." msgstr "" ! #: varasm.c:1899 msgid "floating point trap outputting a constant" msgstr "" ! #: varasm.c:4300 msgid "initializer for integer value is too complicated" msgstr "" ! #: varasm.c:4306 msgid "initializer for floating value is not a floating constant" msgstr "" ! #: varasm.c:4363 msgid "unknown set constructor type" msgstr "" ! #: varasm.c:4568 #, c-format msgid "invalid initial value for member `%s'" msgstr "" ! #: varasm.c:4750 #, c-format msgid "weak declaration of `%s' must be public" msgstr "" ! #: varasm.c:4752 #, c-format msgid "weak declaration of `%s' must precede definition" msgstr "" ! #: varasm.c:4848 msgid "only weak aliases are supported in this configuration" msgstr "" ! #: varasm.c:4853 msgid "alias definitions not supported in this configuration; ignored" msgstr "" *************** msgid "Virtual array %s[%lu]: element %l *** 10763,10886 **** msgstr "" #. Print an error message for unrecognized stab codes. ! #: xcoffout.c:182 #, c-format ! msgid "Unknown stab %s: : 0x%x\n" msgstr "" ! #: config/arc/arc.h:60 config/mips/mips.h:910 msgid "may not use both -EB and -EL" ! msgstr "" ! #: config/arm/arm.h:205 msgid "-mapcs-26 and -mapcs-32 may not be used together" ! msgstr "" ! #: config/arm/arm.h:217 msgid "-msoft-float and -mhard_float may not be used together" ! msgstr "" ! #: config/arm/arm.h:228 msgid "-mbig-endian and -mlittle-endian may not be used together" ! msgstr "" ! #: config/arm/arm.h:246 msgid "Incompatible interworking options" msgstr "" #: config/arm/riscix.h:73 config/arm/riscix.h:135 msgid "-mbsd and -pedantic incompatible" ! msgstr "" #: config/arm/riscix.h:74 config/arm/riscix.h:136 msgid "-mbsd and -mxopen incompatible" ! msgstr "" #: config/arm/riscix.h:75 config/arm/riscix.h:137 msgid "-mxopen and -pedantic incompatible" ! msgstr "" #: config/dsp16xx/dsp16xx.h:101 config/dsp16xx/dsp16xx.h:110 msgid "A -ifile option requires a -map option" ! msgstr "" ! #: config/i386/freebsd-aout.h:236 ! msgid "`-p' not supported; use `-pg' and gprof(1)" ! msgstr "" ! #: config/i386/sco5.h:788 config/i386/sco5.h:863 msgid "-static not valid with -mcoff" msgstr "" ! #: config/i386/sco5.h:789 config/i386/sco5.h:864 msgid "-shared not valid with -mcoff" ! msgstr "" ! #: config/i386/sco5.h:790 config/i386/sco5.h:865 msgid "-symbolic not valid with -mcoff" ! msgstr "" ! #: config/i386/sco5.h:828 msgid "-fpic is not valid with -mcoff" ! msgstr "" ! #: config/i386/sco5.h:829 msgid "-fPIC is not valid with -mcoff" ! msgstr "" ! #: config/i386/sco5.h:866 msgid "-fpic not valid with -mcoff" ! msgstr "" ! #: config/i386/sco5.h:867 msgid "-fPIC not valid with -mcoff" msgstr "" ! #: config/i860/fx2800.h:305 msgid "-p option not supported: use -pg instead" msgstr "" ! #: config/mips/mips.h:766 ! msgid "-pipe is not supported." msgstr "" ! #: config/mips/mips.h:905 ! msgid "may not use both -mfp64 and -msingle-float" msgstr "" ! #: config/mips/mips.h:906 msgid "may not use both -mfp64 and -m4650" ! msgstr "" #: config/mips/r3900.h:28 config/mips/r3900.h:42 msgid "-mhard-float not supported." ! msgstr "" #: config/mips/r3900.h:30 config/mips/r3900.h:44 msgid "-msingle-float and -msoft-float can not both be specified." ! msgstr "" #: config/nextstep.h:163 config/nextstep.h:166 msgid "-p profiling is no longer supported. Use -pg instead." ! msgstr "" #: config/vax/vax.h:41 config/vax/vax.h:42 msgid "profiling not supported with -mg\n" ! msgstr "" ! #: gcc.c:558 msgid "GNU C does not support -C without using -E" ! msgstr "" ! #: gcc.c:573 msgid "-pg and -fomit-frame-pointer are incompatible" ! msgstr "" ! #: gcc.c:707 msgid "-E required when input is from standard input" ! msgstr "" ! #: gcc.c:711 msgid "Compilation of header file requested" msgstr "" --- 16584,16914 ---- msgstr "" #. Print an error message for unrecognized stab codes. ! #: xcoffout.c:170 #, c-format ! msgid "No sclass for %s stab (0x%x)\n" msgstr "" ! #: config/alpha/freebsd.h:35 config/i386/freebsd-aout.h:236 ! msgid "`-p' not supported; use `-pg' and gprof(1)" ! msgstr "\"-p\" stödjs inte; använd \"-pg\" och gprof(1)" ! ! #: config/arc/arc.h:61 config/mips/mips.h:925 msgid "may not use both -EB and -EL" ! msgstr "får inte använda både -EB och -EL" ! #: config/arm/arm.h:216 msgid "-mapcs-26 and -mapcs-32 may not be used together" ! msgstr "-mapcs-26 och -mapcs-32 får inte användas tillsammans" ! #: config/arm/arm.h:228 msgid "-msoft-float and -mhard_float may not be used together" ! msgstr "-msoft-float och -mhard_float får inte användas tillsammans" ! #: config/arm/arm.h:239 msgid "-mbig-endian and -mlittle-endian may not be used together" ! msgstr "-mbig-endian och -mlittle-endian får inte användas tillsammans" ! #: config/arm/arm.h:257 msgid "Incompatible interworking options" msgstr "" #: config/arm/riscix.h:73 config/arm/riscix.h:135 msgid "-mbsd and -pedantic incompatible" ! msgstr "-mbsd och -pedantic är inkompatibla" #: config/arm/riscix.h:74 config/arm/riscix.h:136 msgid "-mbsd and -mxopen incompatible" ! msgstr "-mbsd och -mxopen är inkompatibla" #: config/arm/riscix.h:75 config/arm/riscix.h:137 msgid "-mxopen and -pedantic incompatible" ! msgstr "-mxopen och -pedantic är inkompatible" #: config/dsp16xx/dsp16xx.h:101 config/dsp16xx/dsp16xx.h:110 msgid "A -ifile option requires a -map option" ! msgstr "Flaggan -ifil kräver även flaggan -map" ! #: config/i386/cygwin.h:105 ! msgid "mno-cygwin and mno-win32 are not compatible" ! msgstr "mno-cygwin och mno-win32 är inkompatibla" ! #: config/i386/cygwin.h:160 config/i386/mingw32.h:63 ! msgid "shared and mdll are not compatible" ! msgstr "shared och mdll är inkompatibla" ! ! #: config/i386/sco5.h:777 config/i386/sco5.h:852 msgid "-static not valid with -mcoff" msgstr "" ! #: config/i386/sco5.h:778 config/i386/sco5.h:853 msgid "-shared not valid with -mcoff" ! msgstr "-shared är inte giltig tillsammans med -mcoff" ! #: config/i386/sco5.h:779 config/i386/sco5.h:854 msgid "-symbolic not valid with -mcoff" ! msgstr "-symbolic är inte giltig tillsammans med -mcoff" ! #: config/i386/sco5.h:817 msgid "-fpic is not valid with -mcoff" ! msgstr "-fpic är inte giltig tillsammans med -mcoff" ! #: config/i386/sco5.h:818 msgid "-fPIC is not valid with -mcoff" ! msgstr "-fPIC är inte giltig tillsammans med -mcoff" ! #: config/i386/sco5.h:855 msgid "-fpic not valid with -mcoff" ! msgstr "-fpic är inte giltig tillsammans med -mcoff" ! #: config/i386/sco5.h:856 msgid "-fPIC not valid with -mcoff" + msgstr "-fPIC är inte giltig tillsammans med -mcoff" + + #: config/i386/unix.h:122 + msgid "bx]" msgstr "" ! #: config/i386/unix.h:124 ! msgid "bx" ! msgstr "" ! ! #: config/i386/unix.h:125 ! msgid "cx" ! msgstr "" ! ! #: config/i860/fx2800.h:297 msgid "-p option not supported: use -pg instead" + msgstr "flaggan -p stödjs inte: använd -pg istället" + + #: config/mcore/mcore.h:65 + msgid "choose either big or little endian, not both" msgstr "" ! #: config/mcore/mcore.h:68 ! msgid "choose either m340 or m210 not both" msgstr "" ! #: config/mcore/mcore.h:69 ! msgid "the m210 does not have little endian support" msgstr "" ! #: config/mips/mips.h:781 ! msgid "-pipe is not supported." ! msgstr "-pipe stöds inte." ! ! #: config/mips/mips.h:920 ! msgid "may not use both -mfp64 and -msingle-float" ! msgstr "får inte använda både -mfp64 och -msingle-float" ! ! #: config/mips/mips.h:921 msgid "may not use both -mfp64 and -m4650" ! msgstr "får inte använda både -mfp64 och -m4650" #: config/mips/r3900.h:28 config/mips/r3900.h:42 msgid "-mhard-float not supported." ! msgstr "-mhard-float stöds inte." #: config/mips/r3900.h:30 config/mips/r3900.h:44 msgid "-msingle-float and -msoft-float can not both be specified." ! msgstr "-msingle-float och -msoft-float kan inte båda anges." #: config/nextstep.h:163 config/nextstep.h:166 msgid "-p profiling is no longer supported. Use -pg instead." ! msgstr "-p profilering stöds inte längre. Använd -pg istället." #: config/vax/vax.h:41 config/vax/vax.h:42 msgid "profiling not supported with -mg\n" ! msgstr "profilering stöds inte tillsammans med -mg\n" ! #: f/lang-specs.h:35 gcc.c:641 msgid "GNU C does not support -C without using -E" ! msgstr "GNU C stödjer inte -C utan -E" ! #: gcc.c:662 java/jvspec.c:69 msgid "-pg and -fomit-frame-pointer are incompatible" ! msgstr "-pg och -fomit-frame-pointer är inkompatibla" ! #: gcc.c:810 msgid "-E required when input is from standard input" ! msgstr "-E krävs när indata tas från standard input" ! #: gcc.c:814 msgid "Compilation of header file requested" + msgstr "Kompilering av include-fil begärd" + + #: java/lang-specs.h:33 + msgid "-fjni and -femit-class-files are incompatible" msgstr "" + #: java/lang-specs.h:34 + msgid "-fjni and -femit-class-file are incompatible" + msgstr "" + + #~ msgid "unknown escape sequence: '\\' followed by char 0x%x" + #~ msgstr "okänd escape-sekvens:: '\\' följd av tecken 0x%x" + + #~ msgid "ISO C forbids `&&'" + #~ msgstr "ISO C förbjuder \"&&\"" + + #~ msgid "`[*]' in parameter declaration only allowed in ISO C 99" + #~ msgstr "\"[*]\" i parameterdeklaration är bara tillåten i ISO C 99" + + #~ msgid "Register '%c' is unknown" + #~ msgstr "Register '%c' är okänt" + + #~ msgid "Control allocation order of integer registers" + #~ msgstr "Kontrollera allokeringsordning för heltalsregister" + + #~ msgid "ISO C++ forbids `&&'" + #~ msgstr "ISO C++ förbjuder \"&&\"" + + #~ msgid "`com_interface' only supported with -fvtable-thunks" + #~ msgstr "\"com_interface\" stöds bara med -fvtable-thunks" + + #~ msgid "" + #~ " -Wid-clash- Warn if 2 identifiers have the same first " + #~ "chars\n" + #~ msgstr "" + #~ " -Wid-clash- Varna om två identifierare har samma första " + #~ " tecken\n" + + #~ msgid "syntax error: cannot back up" + #~ msgstr "syntaxfel: kan inte backa tillbaka" + + #~ msgid "parser stack overflow" + #~ msgstr "parsestack överfull" + + #~ msgid "parse error; also virtual memory exceeded" + #~ msgstr "parsningsfel; och det virtuella minnet tog slut" + + #~ msgid "%s: option `%s' is ambiguous\n" + #~ msgstr "%s: flaggan \"%s\" är tvetydig\n" + + #~ msgid "no file specified with -fdump-translation-unit" + #~ msgstr "ingen fil angiven med -fdump-translation-unit" + + #~ msgid "%s is a directory" + #~ msgstr "%s är en katalog" + + #~ msgid "%s:%d: " + #~ msgstr "%s:%d: " + + #~ msgid "additional handler after ..." + #~ msgstr "ytterligare avbrottshanterare efter ..." + + #~ msgid "Counted %d copies of EH region %d in list.\n" + #~ msgstr "Räknade till %d kopior av EH-region %d i lista.\n" + + #~ msgid "Duplicate call to __builtin_eh_return" + #~ msgstr "Multipelt anrop till __builtin_eh_return" + + #~ msgid "Unknown stab %s: : 0x%x\n" + #~ msgstr "Okänd stab %s: : 0x%x\n" + + #~ msgid "ISO C does not support the strftime `%c' flag" + #~ msgstr "ISO C stöder inte flaggan \"%c\" till strftime" + + #~ msgid "ISO C does not support strftime format width" + #~ msgstr "ISO C stöder inte formatstorlek i strftime" + + #~ msgid "ISO C89 does not support the `%%%c' %s format" + #~ msgstr "ISO C89 stöder inte \\\"%%%c\\\" i %s formatsträng" + + #~ msgid "ISO C does not support `%%O%c'" + #~ msgstr "ISO C stöder inte \"%%O%c#" + + #~ msgid "ISO C89 does not support `%%E%c'" + #~ msgstr "ISO C89 stöder inte \"%%E%c\"" + + #~ msgid "`a' flag used with `%c' format" + #~ msgstr "flaggan \"a\" använd med format \"%c\"" + + #~ msgid "ISO C does not support the `a' flag" + #~ msgstr "ISO C stödjer inte \"a\"-flaggan" + + #~ msgid "flag `%c' used with type `%c'" + #~ msgstr "flaggan \"%c\" använd med typen \"%c\"" + + #~ msgid "third argument of `%s' is deprecated" + #~ msgstr "tredje argumentet till \"%s\" är inte länge rekommenderat" + + #~ msgid "parse error at '..'" + #~ msgstr "tolkningsfel vid \"..\"" + + #~ msgid "ISO C89 forbids constructor expressions" + #~ msgstr "ISO C89 förbjuder konstruktor-uttryck" + + #~ msgid "field `%s' already initialized" + #~ msgstr "fält \"%s\" är redan initierat" + + #~ msgid "Generate code for a given CPU" + #~ msgstr "Generera kod för en given CPU" + + #~ msgid "Compile for Gmicro/300" + #~ msgstr "Kompilera för Gmicro/300" + + #~ msgid "parse errors have confused me too much" + #~ msgstr "tolkningsfel har gjort mig helt förvirrad" + + #~ msgid "no return statement in function returning non-void" + #~ msgstr "ingen return i funktion som returnerar icke-void" + + #~ msgid "`operator new' must return type `void *'" + #~ msgstr "\"operator new\" måste returnera typ \"void *\"" + + #~ msgid "`operator new' takes type `size_t' parameter" + #~ msgstr "\"operator new\" tar parameter av typ \"size_t\"" + + #~ msgid "syntax error before '\\' token" + #~ msgstr "syntaxfel före symbolen '\\'" + + #~ msgid "keyword 'export' not implemented and will be ignored" + #~ msgstr "nyckelordet \"export\" är inte implementerat och kommer ignorerads" + + #~ msgid "" + #~ " -MD As -M, but put output in a .d file\n" + #~ " -MMD As -MD, but ignore system header files\n" + #~ " -MG Treat missing header file as generated files\n" + #~ " -g3 Include #define and #undef directives in the " + #~ "output\n" + #~ " -D Define a with string '1' as its " + #~ "value\n" + #~ " -D= Define a with as its value\n" + #~ msgstr "" + #~ " -MD Som -M, men skriva utdata till en .d-fil\n" + #~ " -MMD Som -MD, men ignorera system-include-filer\n" + #~ " -MG Behandla saknade include-filer som genererade " + #~ "filer\n" + #~ " -g3 Inkludera direktiven #define och #undef i " + #~ "utdatan\n" + #~ " -D Definiera ett med strängen '1' som " + #~ "värde\n" + #~ " -D= Definiera ett med som värde\n" + + #~ msgid "ISO C does not allow #%s" + #~ msgstr "ISO C tillåter inte #%s" + + #~ msgid "second token after #line is not a string" + #~ msgstr "Andra symbolen efter #line är inte en sträng" + + #~ msgid "#%s with no argument" + #~ msgstr "#%s utan argument" + + #~ msgid "ISO C forbids text after #%s" + #~ msgstr "ISO C förbjuder text efter #%s" + + #~ msgid "no memory" + #~ msgstr "inget minne" + + #~ msgid "Objective-C text in C source file" + #~ msgstr "Objective-C text i C-källkodsfil" + + #~ msgid "statically allocated objects not supported" + #~ msgstr "statiskt allokerade objekt stöds inte" + + #~ msgid " -m%-21.21s [undocumented]\n" + #~ msgstr " -m%-21.21s [odokumenterat]\n" + + #~ msgid "Macro name missing after -U option" + #~ msgstr "Makronamn saknas efter flaggan -U" diff -Nrc3pad gcc-3.0.4/gcc/po/tr.gmo gcc-3.1/gcc/po/tr.gmo *** gcc-3.0.4/gcc/po/tr.gmo Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/po/tr.gmo Wed May 15 02:41:47 2002 *************** *** 0 **** --- 1,1271 ---- + Þ•r¬‹]<°t±t¶t@Ét' + u52u=hu^¦uv-!v1Ovv–vÛ³v:wÊw5åw9x%Ux+{x0§xØx ìxùx"y+;y7gyŸyEºy2zP3z4„z3¹zHízJ6{q{Mó|”A}¡Ö}Žx›=£?áA!‚Jc‚0®‚Nß‚K.ƒJzƒ•Ń~[…QÚ†1,‡7^‡2–‡<ɇ1ˆF8ˆIˆAɈ} ‰L‰‰NÖ‰C%ŠDiŠ?®ŠEîŠN4‹Oƒ‹³Ó‹O‡ŒK׌}#½¡D_=¤÷â{Ú‘*V’“?ž“8Þ“4”DL”4‘”EÆ”K •NX–I§–Dñ–B6—Py—MÊ—˜N¨˜Q÷˜LI™<–™OÓ™L#šòpšAcœH¥œBîœ91,k5˜+ΞúžŸ .Ÿ :Ÿ<FŸ0ƒŸ8´Ÿ.íŸ. 7K Xƒ Ü 'î .¡ E¡-O¡A}¡¿¡!Ô¡ö¡ ¢+¢%>¢,d¢,‘¢¾¢Ú¢ö¢£"'£J£ e£q£!ƒ£#¥£É£"à£6¤,:¤+g¤,“¤#À¤€ä¤e¥#¥¥¥·¥:Ê¥2¦8¦)K¦$u¦0š¦˦ë¦ §)§/H§/x§6¨§ß§ã§ü§¨&*¨*Q¨#|¨? ¨à¨.ý¨,©$@©+e©‘©¢©±©Å©(婪6ª$Uªzª‘ª2®ªáªóª«$«6«U«p«‚« + •« «>·«#ö«#¬#>¬b¬$}¬#¢¬ Ƭ3ç¬3­<O­Œ­¦­H¿­N®<W®=”®3Ò®2¯"9¯ \¯i¯‡¯¡¯+»¯/ç¯6°:N°(‰°,²°/ß°3±C±KÓ±4²T²(g²h²Eù²?³X³q³г¦³©³­³±³ ¹³ó˳à³ù³´ )´26´3i´3´2Ñ´3µ38µ2lµ3ŸµÓµñµ¶$¶3¶D¶W¶l¶{¶жŸ¶¯¶ʶ<ä¶0!·!R·t·'Œ·/´·/ä·¸0+¸(\¸*…¸/°¸à¸û¸¹2¹L¹d¹!¹/¡¹ ѹÞ¹'ú¹"ºBº`º-uº:£º)Þº»#»?»,O»,|»4©»,Þ»# ¼!/¼Q¼j¼†¼¤¼À¼ Û¼ü¼#½<½%Q½w½(•½_¾½¾6¾,=¾0j¾0›¾.̾/û¾&+¿<R¿¿,–¿ÿá¿ê¿À'ÀEÀYÀqÀ'‹À*³À+ÞÀ( + Á3Á'SÁ/{Á%«Á2ÑÁ)Â&.Â%UÂ{˜Â$¬Â+ÑÂýÂ/Ã/GÃ.wÃ)¦Ã)Ðà úÃ'Ä&CÄjÄ3ƒÄ/·ÄçÄûÄ5Å5LÅ.‚űÅÅÅÞÅ#üÅ Æ<Æ=VÆ@”Æ ÕÆ ãÆ0ñÆ-"Ç(PÇ*yÇ8¤Ç5ÝÇ+È=?È>}È%¼ÈâÈ ÿÈ É/AÉ:qɬɽÉÒÉ8åÉ5Ê(TÊ}Ê5œÊ ÒÊ ßÊìÊ Ë Ë Ë,(Ë UË bË%o˕˦Ë#ÁË åË.òË !Ì1/ÌSaÌ3µÌ,éÌ ÍW#Í´{Í20ÎcÎ.‚αÎ0ÄÎ+õÎ!Ï?Ï]Ï-zÏ&¨Ï5ÏÏÐÐ,(Ð,UÐ*‚Ð%­Ð%ÓÐ3ùÐ.-Ñ+\шÑ$¢Ñ/ÇÑ.÷Ñ*&Ò:QҌҨÒ;ÄÒ7Ó$8Ó7]Ó•Ó´Ó-ÐÓ$þÓ6#Ô2ZÔ;Ô8ÉÔ1ÕO4Õ,„Õ-±Õ.ßÕ'Ö6ÖUÖ0qÖ4¢ÖJ×Ö"×6>×u×7ˆ×!À×/â×MØ6`Ø/—Ø4ÇØ,üØ,)Ù(VÙ,Ù(¬Ù(ÕÙ0þÙ4/Ú6dÚ9›Ú(ÕÚ'þÚ&Û EÛ!fÛ,ˆÛ.µÛ(äÛ Ü!(Ü.JÜ,yÜ,¦ÜÓÜ&éÜ4Ý(EÝ6nÝ$¥Ý,ÊÝ3÷Ý-+Þ8YÞ’Þ)®Þ(ØÞß9ß6Yß2ß)Ãß"íß<à"Mà(pà5™àÏà1îà- áNáeáyá—áµá-Õá-â$1â2Vâ%‰â&¯âÖâ öâ ã #ã3-ã aãmãpãbŠã,íãä + )ä4ä+Cä$oäA”ä&Öä*ýäj(å„“å%æ>æ'Zæ‚æšæ#«æÏæîæ* ç7ç.Vç$…çªçÇçàç'úç$"è$Gèlè,„è1±è4ãè+é0Dé@ué(¶é&ßé%ê&,ê%Sê,yê¦ê:ÃêCþêBë3aë.•ë#Äë>èëH'ì'pì.˜ìOÇìIí@aí8¢íNÛíR*î + }îˆî3§î5Ûî,ï>ï1]ï%ï#µïÙï"ôï-ð0Eð#vð šð5»ð8ñð-*ñ4Xñ2ñÀñlàñpMò ¾ò7Ìò)óO.ó2~ó0±ó>âó;!ô/]ô6ôAÄô*õ)1õ-[õ=‰õ:ÇõBöEöVö2uö'¨ö-ÐöhþöIg÷.±÷à÷Tú÷/Oø+ø5«ø<áø*ù?Iù?‰ùVÉù8 ú"Yú|ú-šú1Èú'úú!"û:DûOû*Ïû*úû%üAü]ü}ü›ü°ü6Åü!üüý=ýTý.mý œý ½ýÞý3óý)'þ2Qþ3„þ3¸þ&ìþ&ÿ4:ÿSoÿ9ÃÿCýÿ;AH}Æ&á,<54r0§2Ø2 $>c+¡Íí  @oNB¾\^"|(ŸÈ3è;,T-5¯-å-"Ad-€*®Ù*ù%$:J'…­9¿@ù:-T&‚.©.Ø6 .> m Š ¨ 1Ä ö  + 4 + ,T + ! + 0£ + Ô + .ï +   ? 1_ 3‘ Å $å 1 + < 0X 2‰ ¼ )Î ø 8 9O )‰ ³ Ó  ó 1Ki!…"§6Ê'0)3Z"Ž4±&æ3 A)a)‹)µ2ß03C$w=œ'Ú% (5I;6»%ò'"@2cB– Ù$ú(AH%ŠG°,ø-%S#o!“'µ#Ý !""D!g‰3›*Ï!ú#3@4t%©Ï"ç + (!.J7y&±Ø)ï?/"o$’"·"Ú ý!-@)n)˜%Â!è& + %12W2Š(½&æ (%F2l*Ÿ!Ê-ì4/O>$¾ã<ü$9/^"Ž"±.Ô,0&K r"“0¶+ç* #> )b ,Œ (¹ .â 1!C!-]!$‹!%°!Ö!õ!)"."A"_""q"=”"6Ò"$ #.#"K#n#*}#¨#¿#Õ#!î#$!.$!P$8r$7«$+ã$O%<_%)œ%(Æ%.ï%&*9&8d&c&,'/.'/^'Ž'2£'5Ö' ("(">(+a()((·(0à(,)>).^)()"¶)Ù) ì)H *V*5o*6¥*/Ü*) +)6++`+Œ+$¥++Ê+'ö+,$7,$\,),«,¿,Ð,?ê,*-C-]-.t-£-%À-æ--.%1.W.l.Œ.©.È.+ç. /$4/.Y/(ˆ/±/4Æ/0û/<,0Li0,¶0@ã0_$1*„1*¯1Ú1ié1)S2"}2; 28Ü2232H32{32®32á3$4'94.a4;4DÌ4/5*A5l5ˆ5œ5°5É5%ä5/ + 6:6K6\6"|6Ÿ6»6Ï6å6ø67 717B7S7d7u7†7 —7¸7 ×77ø708I83b8–8.±8(à8$ 9.9H9b9|9–9°9Ê9ã9)ü9&:A:*\:‡: :º:Ô:î:7;@;7Z;’;¬;Æ;à;ú;<!.<)P<z<”<¯<Ê<å<==,=B=6X==«=É=é=>$>B>`>~>›>¸>Ó>!î>3?+D?Fp?5·?í? @3.@b@2@)²@\Ü@+9A)eA)A$¹A?ÞA(B.GB1vB¨BÄB)àB, + C7C/QCACÃCáCD, D9MDG‡DLÏDDE:aE7œEÔEòEF*&F+QF+}F3©F+ÝF8 GOBG’G1¦G7ØG4H+EH(qH5šH2ÐH,I?0I,pI6IÔI"ðI.J0BJ!sJ:•JDÐJ6K.LK;{K&·K,ÞK0 L)ÀTÿT0U(OUGxU+ÀU-ìUPV9kV"¥V=ÈVBW>IW;ˆW6ÄWIûW-EX3sXr§XGY-bY„Y:Z>PZDZ=ÔZ:[8M[8†[#¿[(ã[ \$,\#Q\2u\)¨\0Ò\$]S(]&|]/£]8Ó]! ^+.^+Z^2†^-¹^(ç^*_4;_p_(„_­_Ì_"ë_Z`Ui` ¿`5Ë` a a a 0a =aGaca a‹aa ¶a + ÂaÍa ãaña/b91b8kb(¤b"Íb5ðb/&c'Vc+~c3ªcÞc-öc3$d'Xd>€dY¿de+/e[e7{eW³eG fSSf§f%¿fåfg gO4gO„gÔg1ñg#h:h0Qh0‚h³h8Êhii-5iBci1¦i.Øi+j3j2Qj „j3¥jNÙj7(k8`kF™k'àk+l4l(Sl"|l*Ÿl6Êl4m46m%km&‘m)¸m$âm"n$*nOnOfn(¶nßn1ÿn)1o-[o,‰o,¶o<ão6 p&Wp/~p=®p&ìp%qv9q °q"Ñq5ôq&*rQr3lr7 r'Ørs5sbUs'¸sàsósD t5Pt/†t4¶t'ëtVu/jušu¸uËu âu6ïu9&v=`v&žv;Åvw w'wEwcwww2”wÇw\äw+AxZmx4Èx-ýx+y4Cy-xy/¦y"Öy,ùy&z>zZzozˆzL—z8äzI{g{,y{&¦{*Í{.ø{3'|.[|>Š|HÉ|2}:E}$€},¥}2Ò}(~).~4X~)~$·~+Ü~FOdwŽ¥·Éé€!#€"E€ h€)‰€7³€ ë€%õ€+G/b(’»Ù<õ?2‚Cr‚¶‚Ђ'ë‚#ƒb7ƒ-šƒ ȃ!éƒ „'„C„&_„ †„%§„$Í„2ò„D%…$j…$…4´…;é…(%†N†3m†`¡†‡7‡%T‡$z‡+Ÿ‡0ˇcü‡`ˆtˆ*ˆˆ'³ˆ5Ûˆ*‰,<‰3i‰"‰<À‰%ý‰1#ŠUŠ&oŠ–Š#®ŠÒŠ*튋0.‹,_‹.Œ‹0»‹0ì‹.ŒDLŒ2‘ŒÄŒ$áŒ##!G/i:™9Ô#ŽD2ŽFwŽ@¾Ž8ÿŽP8H‰^Ò1+HtCBÔ?‘EW‘0‘.Α3ý‘1’3E’5y’5¯’1å’2“J“ d“2…“&¸“-ß“$ ”'2”3Z”AŽ”+Д!ü”%•D•ba•<Ä•3–5–EU–(›–(Ä–í– —0—@M—8Ž—Ç—å— ˜#&˜;J˜†˜ š˜¨˜4·˜'옙/™J™ d™+…™2±™2ä™2šJšfš!€š¢šPµšQ›X›(k›#”›¸›&Ô›+û›''œ'Oœ'wœŸœ-¼œ,êœ(,@5m£!¸/Ú2 + ž"=ž+`ž%Œž2²ž2åž)Ÿ'BŸ7jŸ2¢Ÿ9ÕŸ8 AH 'Š ;² 1î # ¡"D¡&g¡4Ž¡4á?ø¡!8¢Z¢:r¢­¢@Ì¢4 £5B£'x£O £Ê𣻥ե"ï¥!¦54¦j¦‰¦?ž¦FÞ¦%§B?§'‚§4ª§:ß§N¨Ci¨Y­¨4©4<©4q©˜¦©?ª>Qª>ª6Ϫ:«;A«O}«UÍ«@#¬Dd¬=©¬4ç¬E­>b­9¡­6Û­C®V®u®•®.²®Ká®?-¯?m¯?­¯@í¯4.°c°€°A °qâ°2T±*‡±!²±Ô±(ð±&²@²'O²-w²¥²²#à²<³A³#a³0…³"¶³Ù³Aù³.;´0j´&›´´$ß´MµRµkµzµ‹µšµ©µÁµÞµ#óµ¶(¶@¶O¶g¶„¶˜¶­¶¾¶Ù¶ò¶· · + )·#4·X· s· ”· ¡·­·!Ê·ì· ¸:¸I¸c¸7~¸0¶¸ç¸¹"¹9¹S¹ + d¹o¹(ƒ¹,¬¹#Ù¹ý¹º5ºOºjº<ˆº(źîº. »,:»,g»”»:¥»4à»/¼&E¼l¼‹¼œ¼·¼Ó¼ï¼( ½4½!D½f½3„½¸½˽ç½*þ½)¾%F¾l¾…¾¢¾ ¾¾ß¾'÷¾*¿J¿h¿*€¿*«¿2Ö¿0 À:À2ZÀ"À°À1ÌÀþÀÁ1Á2@Á8sÁ ¬Á.ÍÁüÁ"Â";Â1^©ÂÃÂßÂýÂÃ5ÃOÃ&jÃ"‘Ã"´Ã×Ã>öÃ)5Ä._ÄŽÄ®Ä8ÈÄÅÅ7Å9MÅ2‡Å)ºÅ+äÅ3Æ.DÆ6sÆ*ªÆ&ÕÆEüÆDBÇ5‡Ç*½Ç)èÇ$È37È"kÈ(ŽÈ,·È,äÈ1É'CÉ;kÉ6§É.ÞÉ6 Ê9DÊ1~Ê&°Ê*×Ê*Ë5-Ë+cË,˼Ë9ÜË)Ì;@Ì2|Ì$¯Ì+ÔÌ'Í-(Í2VÍ$‰Í/®Í'ÞÍ4Î;Î(Z΃Î8ŸÎØÎ'÷Î/Ï*OÏ,zÏ3§Ï5ÛÏ0Ð$BÐ=gÐ#¥Ð*ÉÐ*ôÐ/Ñ#OÑ!sѕѵÑZÉÑ$$ÒIÒ%_Ò …Ò“Ò¢Ò³Ò+ÄÒ*ðÒ$Ó,@ÓDmÓ)²Ó0ÜÓ+ Ô29Ô/lԜԥԮÔ$·ÔÜÔ5õÔK+Õ!wÕG™Õ%áÕÖ%ÖDÖbÖ,yÖ¦Ö,ÆÖóÖ×61×h×;€×:¼×:÷×$2Ø4WØ(ŒØ8µØ&îØÙ4ÙPÙgÙyÙ Ù™Ù+¬Ù(ØÙ4Ú)6Ú:`Ú"›Ú¾ÚÞÚøÚ.Û-GÛuÛ%”Û&ºÛáÛ.úÛ)Ü?ÜTÜ&hÜ&ܶÜ%ÖÜ'üÜ$ÝDÝ!\Ý~Ý-–Ý(ÄÝ íÝIÞ7XÞ6ÞÇÞ*ÝÞ*ß#3ß$Wß|ߓߥß<¶ß*óßà):à!dà%†à¬à#¼à7ààá!3áAUá2—á4Êá%ÿá%â.>â+mâ%™â ¿â!àâ$ã'ã Eã!fã*ˆã³ã$Ëãðãä#äBä`ä"€ä)£ä.Íä(üä-%å/Så<ƒå7Àå øå&æ@æWæ0wæ-¨æ(Öæ2ÿæ(2ç4[ç#ç(´ç9Ýç.è,Fè'sè)›è*Åèðè + é+(éTé&pé#—é&»é,âéê&"ê(IêGrê&ºêáê'ë-(ë?Vë2–ëÉë)äë1ì@ì+Yì…ì%£ì,Éì(öìí;í-Zí8ˆí7Áí7ùí51î&gî*Žî¹îÂîËîÔîÝî*ûî8&ï"_ï‚ï–ï"Ÿï+Âï(îï/ð!Gðið …ð’ð ›ð¨ð±ð"ºð/Ýð ñ3ñ7Jñ(‚ñ=«ñéñLò-Nò.|ò4«ò(àò) ó43óMhó/¶ó$æó8 ôDô]ô*}ô¨ô'Äô4ìôa!õ$ƒõ<¨õ0åõ-ö1Dö6vö+­ö%Ùöÿö(÷%H÷Un÷6Ä÷*û÷+&ø1Rø5„ø)ºø*äø+ù0;ù=lùªù¿ù ÏùVÛù2úFCúAŠúÌú$âú,û%4û2Zû'û>µûBôû+7ücü8ü(ºü%ãü9 ý,Cý%pý1–ý1Èý/úý2*þ]þ>tþ&³þ'Úþ.ÿI1ÿ.{ÿ+ªÿ%Öÿ üÿ07(h+‘0½/îb–.°0ß7#H-l/š&Ê.ñ0 !Qs9<É*%18W¨6Â3ù2-.`8*È)ó)G`z—³!Ïñ ) Ij†+¤&Ð/÷$'5L4‚·Òí! &/ .V &… ¬ -´ 1â % + : + U +  + q + .| + « + 1 + 3ô + >( 3g › » :Ñ : G 0d (•  ¾ *ß  +  %3 Y o $Œ ± Ä &Õ -ü -*-X'†0®(ß(/1(a(гÄâ7÷/I `m‰™­ ¶× ô! 7#X| œ#½á!!#!Eg,‡(´#Ý*$,Qi‚*–(Á*êJ-`IŽ#Ø!ü#B\Dx.½%ì1%D'j'’&º,á$.,S!€¢¿8Ú.&B+i=• Ó)ô8N)f/.À)ï,$F*k!–$¸$Ý$$'#L+p*œ)Ç(ñ."Il„š ²(Ó;ü,82e9˜Òã)#NM=œ8Ú"<5R/ˆ¸Ø-ò= 2^ ‘ 9¡ Û í + !%5![!/u!¥! µ!Ã!Ý!ù!4"H"X")o"$™"¾"Þ"ù"+ #&7#M^#/¬#/Ü#/ $5<$!r$H”$ Ý$%þ$.$%S%Ip%º%*Ú%(&$.&$S&0x&,©&*Ö&:'3<'0p'&¡'%È''î'6(/M(R}(%Ð( ö(;)=S)‘)¢)´)"Å)è)ÿ)**>H*‡*)š*(Ä*í*(+ ,+*M+:x+³+8Ñ+7 + ,3B,:v,/±,Há,E*-3p-2¤-9×-,.>.%\.@‚.(Ã. ì.) /-7/1e/(—/'À/,è/)01?0!q0C“0B×0.10I1z1”1)±1.Û11 + 21<2%n2#”2/¸2'è23,,3#Y3}3,•36Â3$ù3;4-Z4,ˆ4µ4/Ï4ÿ45'5095$j55£5¸5Ñ5å560!6 R60s6"¤6&Ç6&î6:7(P7y71‘7<Ã7;8.<81k8.8.Ì85û8519?g9$§9Ì96å9:i5:;Ÿ:XÛ:74;9l;:¦;2á;2< G<+h<!”<¶<Ò<,í<)=)D=.n=)='Ç=,ï='>"D>,g>3”>BÈ>' ?3?$P?(u?ž?#¹?Ý?0ü?)-@6W@&Ž@1µ@<ç@$A'BA#jAŽA>«A7êA'"BJB0iBšB7ºBòBC.C6CC zC†CC$»C:àC1D.MDI|DÆDäD5ùD,/E2\E,E/¼E0ìE'F%EF4kF. FÏF4äF7G(QGzGb”G#÷G7H/SH)ƒH%­H3ÓHI.&I'UI<}IGºIBJEEJ‹J/©J)ÙJ.K(2K9[K0•K3ÆK5úKW0L9ˆL;ÂL2þL&1M%XM$~M&£M.ÊMùMN2)N4\N‘N(°NÙN*ôN+O2KO<~O»O7×O9PIP#eP$‰P®P0ÍPþP6 Q2DQwQ&—Q)¾QèQùQR/RNRkR4‰R'¾R$æR S%S0;SlS{SS¢S·S ×SøS' T*5T-`T)ŽT,¸TåT)ÿT))U+SU+U«U5ÊU.V/V DVeV„VšV°V+ËV÷VW0.W,_W+ŒW¸W3ÐWXX9XRXdX {X!œX¾XÛXñXJ + YTUYTªY8ÿY58ZnZ8ˆZ9ÁZ,ûZ2([.[[.Š[&¹[6à[6\N\!_\!\£\$¾\ã\ÿ\*]7>]%v](œ]$Å])ê]%^%:^$`^%…^«^ ´^6¾^õ^%_%;_=a_:Ÿ_,Ú_0`8`3U`5‰`-¿`,í`Na(ia&’a)¹a3ãa'b$?b1db1–b,Èbõb$c19ckc"ƒc)¦cÐcêcñc øcd dI'd#qd#•d¹d*Ød+e)/e)Ye!ƒe¥eÄe!Ùeûe-fIf Yfef‚fžf¼f6Ûfg-g Ag bg ƒg¤g ³g.Ôg h&$h6Kh0‚h"³h/Öhi*%i(Pi(yi¢i¼i5Ûi+j/=j+mj5™jÏj%çj& k%4kZk!ck…kC£k3çk)l6El!|l3žl7Òl6 + m2Am#tm(˜m!Ámãmým2n5Mn$ƒn$¨n/Ín!ýn o)@o)jo)”o-¾o0ìo9p*Wp8‚pA»pýp-q'4qX\q-µq*ãq,r";r0^r4r%Är!êr s&&s5Ms#ƒs'§s&Ïs$ös>t=Zt'˜t*Àtët u,)u!Vu&xu&Ÿu3Æu)úu@$v/ev,•v<Âv9ÿv59w8owE¨w"îw/xAxQx`x:qx¬x5Åx6ûx*2y$]y$‚y6§y5Þy5z6Jz-z¯z Çz-èz.{ E{Df{«{¿{ Ö{9÷{!1|"S|$v|$›|$À|=å|#}(7}!`}&‚}&©}%Ð}6ö}-~'F~n~~•~7µ~!í~);9u0Ž¿*Ö'€.)€X€#t€,˜€,Å€ò€)6, c„'“)»;å,!‚/N‚-~‚2¬‚#ß‚ƒ+ ƒ+Lƒ9xƒ0²ƒ4ãƒ/„;H„6„„5»„.ñ„C …Gd…6¬…>ã…3"†/V†2††1¹†1ë†&‡1D‡-v‡9¤‡Þ‡&þ‡6%ˆ8\ˆ/•ˆ&ň숉/‰%D‰*j‰"•‰;¸‰5ô‰**Š1UŠ>‡Š0ÆŠ[÷Š?S‹4“‹È‹æ‹+Œ&1Œ*XŒ'ƒŒ«Œ"ºŒ(ÝŒ&_-;HÉ(Ž;Ž<LŽ<‰Ž<ÆŽ<@ S:t5¯å3ø&,!S8u&®Õäó ‘‘$-‘R‘b‘v‘Š‘œ‘°‘‘Ö‘è‘ú‘ ’’0’A’S’e’w’‰’›’­’Á’Ó’å’÷’ ““-“?“S“e“w“‹“Ÿ“³“Å“דè“ú“ ””0”B”T”f”x”Œ”ž”°”Ĕ֔蔕#•=•[•'y•¡•±•Á•(Ù•)–",–O–Nk–"º–Ý–õ– —!4— V—.c—9’—8Ì—$˜.*˜'Y˜"˜;¤˜à˜!ó˜)™?™#]™1™³™,ЙOý™#Mšqš%‘š·š"Ëš+îš ›R(›{›››¸›Ô›ç› ÿ›( œ5œ6Rœ ‰œ"ªœGÍœ / P q ’ ³ Ô õ ž 7ž Xž yž"šž½žÝžùžŸ5ŸQŸqŸŸ©ŸÅŸ6០(6 _ q  … %¦ Ì å ü ¡#5¡&Y¡.€¡¯¡Ê¡#è¡( ¢$5¢0Z¢‹¢4ª¢Jߢ&*£-Q££4“£.È£!÷£/¤'I¤q¤*ޤ)¹¤#ã¤"¥3*¥^¥z¥#™¥.½¥ì¥¦¦-<¦/j¦3š¦Φ*妧0§D§(X§)§«§¿§"Ù§,ü§9)¨Dc¨,¨¨\Õ¨n2©$¡©&Æ©0í©ª49ªnª$Žª+³ª&ߪB«,I«#v«%š«À«&ß«¬#$¬H¬!h¬2Ь:½¬9ø¬U2­1ˆ­º­Í­à­*ú­$%®!J®!l®!Ž®$°®"Õ®#ø®#¯#@¯d¯'¯§¯ï ߯°°>°5^°+”°À°à°±- ±1N±€±# ±ıر%ó±1²3K²²š² ©²!ʲì²3 ³=³ M³n³!޳°³7¿³.÷³&´>´W´)n´9˜´1Ò´*µ0/µ*`µ3‹µ0¿µ7ðµ(¶_C¶ £¶ + Ķ1϶3·:5·p·#Œ·°·$з(õ·¸!1¸(S¸|¸š¸+¹¸å¸ ¹@&¹%g¹"¹-°¹3Þ¹'º:º/Tº5„ººº"׺*úº"%»?H»Lˆ»>Õ»2¼?G¼1‡¼6¹¼<ð¼7-½;e½&¡½+Ƚ6ô½+¾5I¾¾‡¾'¦¾&ξ&õ¾¿6¿,Q¿4~¿"³¿(Ö¿*ÿ¿,*ÀWÀsÀÀ,©À&ÖÀýÀ#Á;ÁZÁyÁ)ÁºÁÚÁùÁ#Â!5Â%WÂ}Â/˜Â/ÈÂøÂ# Ã.0Ã_à yÚÃ(ºÃ'ãÃ8 Ä+DÄpĀĖÄ-µÄ4ãÄ3Å-LÅzÅÅ"™Å¼Å)ÏÅKùÅEÆcÆ#~Æ%¢Æ,ÈÆ%õÆÇ)8Ç'bÇ.ŠÇ¹Ç/ØÇ!È *È,4È*aÈCŒÈÐÈ ×È'áÈ É'É5CÉ yÉ šÉ/¨ÉØÉ4òÉ3'Ê[Ê6pÊ §Ê ÈÊ8éÊ$"Ë!GË&iËË(¬Ë)ÕËÿË'Ì=Ì8[Ì/”ÌFÄÌ Í !Í2.ÍaÍA~Í>ÀÍ&ÿÍ&ÎFÎ[ÎvΓÎ(¦Î%ÏÎ#õÎÏ1Ï/@Ï5pÏ$¦Ï ËÏ1ìÏ)Ð0HÐ#yÐ(Ð!ÆÐèÐûÐ Ñ6Ñ:UÑÑ2§ÑÚÑ&øÑ&Ò-FÒtÒŠÒŸÒ*¼Ò>çÒ&Ó(;ÓdÓ'‚Ó5ªÓ1àÓ.Ô,AÔ-nÔ-œÔÊÔ,ÛÔ3Õ<Õ<ZÕD—Õ.ÜÕ4 Ö.@Ö9oÖH©Ö)òÖ× :×&[×‚×š×·× + Ó×Þ×ð×ö×&Ø7ØJØ+bØ<ŽØ1ËØýØ/Ù>MÙ,ŒÙ¹Ù%ÐÙ4öÙ9+Ú.eÚ/”Ú2ÄÚ/÷Ú"'Û(JÛsÛ*‡Û²ÛÍÛ(æÛ3ÜACÜF…Ü5ÌÜ$Ý'Ý!/Ý=QÝ>ÝÎÝLæÝ 3Þ&AÞhÞ%„Þ6ªÞ3áÞ#ß"9ß)\ß!†ß"¨ß%Ëßñß à%à;<àxàŠà/›àCËà3á=Cáá)¡á)Ëá#õá#â+=âiâ}â™â¹â&Øâ(ÿâ!(ã*Jã#uã7™ã-Ñã6ÿã6ä(Vä)ä©äÆä9ãä-å-Kåyå"–å-¹åçå(æ.æLæ*cæŽæ-¥æ7Óæ# ç//ç0_ç ç)œç#Æç)êç*è5?èuè0‹è-¼èFêè/1é<aé#žéÂéáé%øé=ê-\ê?ŠêÊêåê'êê(ë;ë+Cë,oë*œë(Çë)ðë&ì<Aì4~ì:³ì9îì-(í/Ví/†í<¶íZóí7Nî)†î°î-Îîüî(ï,:ï3gï›ï+»ï'çï'ð 7ðAð\ð|ð˜ð·ð×ðñðñ--ñ[ñxñ0•ñ=Æñòò:òZò#yò%ò'Ãò$ëòó&%ó'Ló/tó¤ó!Âó äó.òó)!ô)Kô%uô›ô4¯ôäô8ÿô@8õyõ8‹õ:Äõÿõ%öAö,Iö%vö%œö4Âö÷ö'÷=÷S÷"n÷‘÷ª÷À÷Õ÷ñ÷* ø7ø-Nø-|øIªø)ôø ù2?ù$rù8—ù/Ðù.ú8/ú,hú•úA´ú2öú)û?ûDUûDšûDßû=$üFbü%©ü'Ïü ÷ü2ý'Ký4sý2¨ýÛýûý'þ*þIþiþ‡þ#¢þ'Æþ!îþ ÿ11ÿ0cÿ'”ÿ3¼ÿKðÿP<!$¯#Ô ø!)"Kn*Œ3·5ë+!6M9„&¾4å3Nf&„,«+Ø A,a"ޱÎ*æ+2=p)…¯$È'í94'n–µ"Õø4#G(k4”"Éì! + ,$Jo‰£/¼,ìe ` Eà =& + +d + ! + ² + (Á + *ê + = )S 5} 4³ )è ) -<  j )‹ *µ à 'ô ) F  W x (• $¾ .ã (&;:b0;Î( + <34p.¥MÔ2"MU#£*Ç0ò$#>H+‡@³:ô#/ S#t ˜¹Ï(æ%\5m’/ N/X3ˆ2¼*ïFa${. &Ï8ö(/'X1€.²5á59M5‡5½5ó-)W.v ¥&²&Ù48mŠ#¦#Ê.î(F^8}=¶ô5Jh)†w°(6A.x%§7Í&C,p*ˆ+³Bß3"%V|=›-Ù0DZn–ª¿Óèþ ( B V i z ” © ¿ Õ  + è *ó!("G",b"-",½",ê",#,D#+q#4#3Ò#0$7$V$.v$¥$/·$-ç$2%)H%&r%3™%Í%Dì%1&N&m&"‹&7®&Ræ&$9')^' ˆ'©'È'æ'(#%()I(,s(1 (*Ò(ý(8)8K).„)-³)8á).**I*$t*$™*$¾*$ã*-+6+P+&p+$—+0¼+?í+-,K,*a,DŒ,2Ñ,$--)-,W-7„-&¼-1ã-F.\.2x.*«.5Ö.' /"4/DW/-œ/Ê/&Ý/'0),00V0‡0¥0@Ã010#1#T1)x15¢14Ø1/ 26=2't25œ2$Ò2)÷26!3FX3Ÿ3»3+×344'84%`4†4.¥44Ô40 5:5Z5&s5š5³5#Ì5 ð5ú5 6$6 A60b6“6£6³6È6Ý6ü67'07IX7)¢7'Ì7!ô78")8L8j8%ƒ8©8#É8í86ó8 *9.K99z99´9)î9%:A>:€:Uš:ð: ;"$;6G;<~;0»;ì;0 <0:<çk<S=q= =7°=+è=>&>@>S>+j>#–>º>Ô>ñ>. + ?A9?7{?=³?.ñ?' @3H@)|@5¦@ Ü@ý@A'A%EAkA„AžA¾AÝA8üA5BNB,cB-B.¾BíB"C$C5C.RC)C«CÀC&ÛC)D",DODeD!zD'œDÄD0áD&E/9E"iEŒE¥E(½E4æE(F.DF=sF#±FÕF*ëF*G1AG1sG¥G$ÄG4éG5H+TH-€H"®H ÑH/òH-"I=PI/ŽI;¾I/úI!*J2LJJ1ŸJ8ÑJ7 + K$BKgK5‡K3½K1ñK,#L9PLŠL¨LÄL7ÜL'M6P&oP–P´PÓP3òPG&QnQ‚Q%‹Q±Q%ÊQðQ6R5GR}R%˜R"¾R áR S-#S"QS!tS$–S%»S.áS T!1TSTqTT§TÁT`ÖT7VHkA‡k@ÉkS + lS^l>²lKñlT=mK’mGÞmH&n?onE¯nTõn|JoÇoPãpS4qœˆqÏ%rGõsL=tBŠt”Ív%bwˆxC§x5ëx5!yGWyAŸyHáyW*zI‚{FÌ{P|Md|Q²|H}”M}Râ}N5~J„~4Ï~OqT)ÆJðS;‚K‚EÛ‚/!ƒ&Qƒ$x„„-¹„&ç„&…S5…L‰…6Ö…, †/:†5j†I †ê†*ÿ†1*‡\‡.x‡W§‡ÿ‡%ˆ<ˆ'Sˆ{ˆ.—ˆ2ƈ4ùˆ$.‰"S‰*v‰¡‰&³‰Ú‰ ð‰ú‰!Š2ŠRŠ-kŠ<™Š3ÖŠ) + ‹<4‹,q‹ž‹/Œ$NŒsŒˆŒD¡Œ;æŒ"/;)k4•Ê&é6Ž0GŽExŽ@¾Ž2ÿŽ26(Ox.–2Å(øE!#g3‹¿"Õ0ø)‘B‘^‘*w‘)¢‘Ì‘,Ü‘$ ’.’I’8i’¢’!¸’Ú’é’!ÿ’!!“ C“Q“ + `“ k“_x“,Ø“,”F2”!y”(›”Ä”ã”4ÿ”+4•@`•¡•Á•FÕ•P–6m–7¤–1Ü–I—$X— }— Š—3«—.ß—@˜AO˜E‘˜FטJ™Ii™H³™Gü™œDšbášFD›‹›;Ÿ›lÛ›IHœ’œ¥œÜ.ᜠ#-5Keƒ —5¤;ÚEž@\žEž=ãž@!Ÿ=bŸ Ÿ¾ŸÞŸòŸ    ; \ r  ˆ © À Û Ló 7@¡.x¡(§¡;С: ¢1G¢y¢*‘¢$¼¢&á¢2£;£[£(x£¡£À£Ý£ú£-¤H¤ Y¤+z¤%¦¤!̤î¤1¥I9¥'ƒ¥ «¥Ì¥æ¥;ö¥;2¦7n¦9¦¦0à¦)§;§"R§(u§#ž§'§'ꧨ).¨X¨*m¨'˜¨*À¨që¨]©s©5z©7°©0è©.ª/Hª'xª= ªÞª)媫-«6« V«w«’«§«Å«2á«9¬?N¬3ެ¬8ܬ@­.V­B…­'È­3ð­'$®*L®w®"Œ®(¯®Ø®2÷®-*¯0X¯9‰¯8ï(ü¯$%°(J°s°6а9Á°û°±P/±6€±=·±õ±$²7²,R²²#—²A»²Aý²?³ Q³:^³0™³*ʳ3õ³<)´;f´3¢´IÖ´V µ)wµ(¡µ!ʵ ìµ< ¶;J¶†¶ –¶·¶=ʶ/·08·)i·D“· Ø· ä·ð· ¸ ¸ ¸/,¸ \¸ h¸%t¸š¸ª¸)Ǹ ñ¸3ý¸ + 1¹;<¹cx¹<ܹ)ºCºZLºçº(k»”»6°»ç»8¼99¼ s¼ }¼‡¼1¦¼ؼ)ö¼ ½:½/M½/}½-­½(Û½)¾6.¾,e¾9’¾̾ê¾.¿66¿2m¿> ¿ß¿"ú¿7À4UÀŠÀ3§À!ÛÀ!ýÀ)Á%IÁ;oÁ@«ÁCìÁD0Â-uÂj£Â"Ã#1Ã-UÃÃ!¡Ã!ÃÃ.åÃ0ÄREĘÄD¶ÄûÄLÅcÅ"ÅO¤ÅEôÅ(:ÆLcÆ.°Æ5߯*ÇC@Ç*„Ç*¯Ç3ÚÇ.ÈD=È<‚È7¿È)÷È!É:É%UÉ,{É%¨É(ÎÉ÷É)Ê6=Ê-tÊ-¢ÊÐÊ0çÊPË2iË8œË&ÕË$üË+!Ì%MÌ8sÌ(¬Ì!ÕÌ÷ÌÍ53Í9iÍN£Í òÍÎ2-Î`Î2}Î=°Î#îÎ0Ï#CÏgÏ}Ï#’Ï#¶Ï%ÚÏ,Ð;-Ð"iÐ1ŒÐ.¾Ð/íÐ%Ñ&CÑ jÑ xÑ>‚Ñ ÁÑÏÑßÑaüÑ4^Ò “Ò ŸÒ«Ò6¼Ò óÒUÓ)jÓ/”ÓuÄÓ‚:Ô$½Ô!âÔ1Õ'6Õ6^Õ-•Õ ÃÕ äÕ"Ö)(ÖaRÖ*´Ö%ßÖ8×$>×,c×+×+¼×/è×4ØbMØ?°Ø[ðØ4LÙkÙXíÙ/FÚ8vÚ/¯Ú3ßÚCÛWÛDvÛP»Û ÜX,Ü7…Ü%½ÜBãÜG&Ý.nÝ7ÝQÕÝN'ÞBvÞ8¹ÞUòÞZHߣß$´ßiÙßeCà;©à2åà8á-Qá4á"´á6×á<â=Kâ2‰â1¼â^îâCMã>‘ãBÐã4ä'Hä^päaÏä1å@@å1ås³å]'æ=…æiÃæc-ç?‘ç@ÑçTè3gè6›è7ÒèO + éHZéa£éê#ê+?ê:kê2¦êjÙêmDë1²ëäëPúë6Kì*‚ìB­ì@ðì:1íClíB°íAóí=5î*sî*žî(Éî7òî(*ï$Sï6xïH¯ï6øï5/ð+eð+‘ð+½ð)éðñ2ñ6Qñ$ˆñ'­ñ"Õñ&øñ@ò*`ò*‹ò'¶ò5Þò9ó_Nód®ódô*xô*£ô:ÎôC õ*MõAxõ=ºõ=øõ6ö1TöG†ö_ÎöY.÷Vˆ÷5ß÷5ø%Køqø#‘ø5µø!ëø ù(ù/HùxùƒŒù@úqQúÃú,âú1û,Aû9nû"¨ûËû/èûRüZküRÆüRý1lýžý'·ýIßý')þ+Qþ,}þgªþ'ÿ:ÿ`UÿG¶ÿ!þÿ4 2UWˆWà_8W˜ð ,0 ]$~&£'Ê8ò++8W"D³+ø'$6L3ƒ·"Ò"õA2?t´(Å"î.9@,z §(Èñ'<Un‰W¦*þ-)/W‡6£#Ú2þ1 *Q /| -¬ .Ú 5 + -? + %m + `“ + -ô + &" %I Xo ;È 3 +8 (d # X± 2 + '= 2e (˜ YÁ %^A: .Û + (+)TY~"Ø û!">'a‰43Ò"))/S;ƒ(¿è-*3/^*Ž`¹"=1VˆG¦$î&$:$_"„#§2Ë.þ+-"Y|.—"Æ7é-!+O*{)¦,Ð0ý5.5d#š,¾7ë*#CN0’ÃFã*+J1v2¨/Û1 #=(a'Š'²hÚ%C%i"=²7ð$(/M0}®?Ì. $;`€.’Á×ö( ?48t%­Ó(ï>*i-„!²!Ôö  &6 Z] [¸ :!jO!5º!5ð!*&"&Q")x"2¢"BÕ"‡#= #AÞ#A $b$8~$;·$ó$!%$2%3W%,‹%(¸%2á%(&)=&Cg&5«&%á&'%$'pJ'»'YÛ'F5(?|(G¼(0)-5) c)0„)-µ)/ã),*'@*'h*,**½*è*6+F?+(†+1¯+)á+; ,-G,7u,%­,cÓ,27-$j-*-)º-+ä-+.=<./z.1ª.nÜ./K/{/:/7Ë/?0KC020SÂ0b1,y1)¦1 Ð1vÝ1(T2$}2?¢2Mâ2903qj3>Ü3747S4,‹4&¸46ß465]M5G«5,ó5 6>6S6h6‚6*ž67É677-&7.T7.ƒ7²7É7à7ô7 8 828D8V8h8z8Œ8,ž8,Ë8,ø8S%9y9•9E²9ø99:"L:"o:’:¯:Ì:é:;#;@;[;*v;¡;¾;+Û;< <:<T<n<9ˆ<Â<9Ü<=0=J=d=~=š="¶=&Ù=>><>Z>x>”>«>Â>Ú>Zò>M?+m?™?'¶?"Þ?"@"$@"G@0j@1›@Í@ë@ A4)A0^AkA+ûA'B)BB?lB¬BYÉB4#CXXC9±C7ëC7#D[DaxD.ÚDk EtuEêEF,%F.RFF.›F`ÊF!+G3MG"G1¤GiÖGD@HO…H>ÕH>IXSI)¬I#ÖIúI0JSIJSJ[ñJSMKU¡KI÷KAL<YL6–L8ÍLKM+RM;~MEºM.N=/N+mNK™N-åN*O4>O9sO'­OHÕOMPClP9°PKêP16Q:hQB£Q'æQ'R-6R%dR;ŠRPÆR:S+RS:~S9¹SFóS4:T8oT+¨T@ÔT@U@VU,—U4ÄU3ùU--VG[V2£VAÖV,W"EWGhW;°W,ìW7X/QX8X<ºXG÷XK?Y;‹Y9ÇY@Z;BZN~ZEÍZ5[MI[,—[=Ä[+\2.\5a\S—\8ë\.$]\S];°])ì]E^P\^D­^7ò^;*_Qf_6¸_>ï_….`Q´`:a˜AaAÚaEbObbZ²bX cWfcY¾c,d1Ed)wd.¡d+Ðd3üd90e.je ™eUºe'f)8f;bf&žf-Åf5ófC)g6mg1¤g?ÖgJhah2uh'¨h1Ðhid"i_‡içiOøi HjTj + ejpjvj4|j4±jæjîjÿj kk'k >kHk9^k3˜k7Ìk8l)=lAgl0©l"Úl.ýlA,mnm7Œm-Äm>òmB1nrtnçn,o$.oBSo`–oR÷oUJp+ p*Ìp%÷pq7qMJqS˜qìq<rBrar3{r2¯râr<ür9sPs>nsY­s?t:Gt0‚t%³txÙt/Ru@‚uQÃu>v4TvH‰v5Òv6w:?w0zw,«w,ØwMxQSx:¥x(àx) y,3y'`y%ˆy*®yÙyYñy>Kz Šz>«z êz0 {,<{.i{;˜{8Ô{! |(/|TX|­|Í|ví|+d}-}f¾}4%~Z~:z~7µ~/í~&=Dy‚"ü€0€8H€2€2´€3ç€&XB,› Èéû ‚0‚1J‚<|‚#¹‚9Ý‚ƒ 1ƒ=ƒXƒsƒ‰ƒ5§ƒ݃hûƒHd„‚­„60…*g…"’…;µ…(ñ…X†.s†3¢†Ö†î† + ‡'‡C‡[_‡G»‡MˆQˆ-iˆ7—ˆ8ψ/‰68‰:o‰Hª‰Kó‰4?Š9tŠ/®Š-ÞŠ_ ‹7l‹)¤‹s΋\BŒŸŒ2¿ŒRòŒEa##¥Éè-Ž*5Ž*`Ž/‹Ž0»Ž'ìŽ6BK Ž4œ2Ñ'?,.l"›¾SÜC0‘Kt‘À‘!Ü‘+þ‘**’CU’+™’,Å’1ò’)$“&N“$u“6š“,Ñ“,þ“%+”.Q”f€”*ç”)•;<•Wx•$Е&õ•%–RB–$•–Dº–$ÿ–$$—'I—Aq—x³—,˜C˜3Z˜1Ž˜@À˜2™54™ij™&Ô™bû™)^šUˆšÞš*ûš&›=F› „›%¥›Ë›4ç›0œ2Mœ4€œ0µœ.æœ@4V*‹1¶)è+ž>ž1Zž@ŒžEÍž$Ÿb8Ÿb›ŸZþŸMY q§ e¡e¡å¡+¢ .¢NO¢;ž¢4Ú¢D£:T£Z£kê£$V¤`{¤hܤ>E¥5„¥5º¥ð¥¦W%¦/}¦A­¦(ï¦*§IC§J§Xا)1¨=[¨/™¨Gɨ=©>O© Ž©W¯©-ª/5ª eª†ªw¡ªC«E]«!£«Å«#䫬1¬P¬n¬ƒ¬d¡¬U­"\­"­&¢­)É­=ó­71®7i®7¡®&Ù® ¯&!¯H¯Y_¯W¹¯°%.°*T° °. °0ϰ/±.0±0_±&±1·±ré±.\²5‹²nÁ²0³D³2d³,—³!ijæ³#´2*´1]´'´(·´0à´0µ;BµA~µHÀµ* ¶64¶0k¶(œ¶2Ŷ1ø¶b*·L·AÚ·'¸D¸X`¸$¹¸]Þ¸<<¹2y¹:¬¹…ç¹Õmº2C¼1v¼:¨¼ã¼5½19½0k½=œ½GÚ½"¾?;¾'{¾j£¾r¿l¿nî¿°]ÀvÁ8…Á6¾ÁËõÁÁÂS×ÂM+Ã=yÃF·Ã@þÃZ?Ä_šÄ=úÄ=8ÅTvÅ5ËÅ@ÆSBÆO–Æ;æÆ:"Ç.]Ç$ŒÇ+±ÇfÝÇ~DÈ>ÃÈEÉLHÉL•É2âÉ#Ê(9ÊFbʈ©Ê52Ë*hË!“Ë µË,ÖË)Ì-Ì/AÌ8qÌ.ªÌ/ÙÌ. ÍE8Í&~Í%¥Í1ËÍ%ýÍ#ÎYCÎ0Î/ÎÎ3þÎ'2Ï/ZÏTŠÏ$ßÏÐ$ÐAÐaÐ&yÐ' ÐÈÐ5æÐÑ#9Ñ]Ñ&uÑ'œÑÄÑáÑÿÑ)ÒIÒiÒ%‡Ò­Ò¿Ò.ÓÒ'ÓY*Ó„ÓšÓ"¯Ó2ÒÓÔ$Ôe9Ô ŸÔ!ÀÔ?âÔ8"Õ"[Õ%~Õ¤Õ&ÀÕçÕÖÖ/4Ö4dÖ3™Ö(ÍÖ%öÖ,×"I×Al×Q®×1Ø)2Ø>\Ø;›ØAרÙG4Ù`|Ù<ÝÙ>Ú(YÚ‚Ú(ŸÚ&ÈÚ&ïÚ-Û,DÛ*qÛ/œÛ(ÌÛ@õÛ!6Ü)XÜ!‚ÜE¤Ü-êÜ5Ý$NÝ(sÝ!œÝ3¾ÝòÝ*Þ2<Þ(oÞ!˜Þ\ºÞ2ßZJß`¥ß"àC)à1mà ŸàYÀà#á'>áfáB„áGÇá)â:9â&tâ)›â)Åâ@ïâ0ãNã$mã&’ã$¹ã$Þã"ä#&ä2Jä.}ä+¬ä"Øäbûä9^åb˜å0ûå+,æ3Xæ&Œæ"³æÖæ;îæ6*ç7aç*™ç6Äç7ûçr3è[¦è1éb4éa—é9ùé-3ê-aê,ê/¼ê,ìê*ëTDë8™ëXÒë*+ìgVì`¾ìBí7bí^ší4ùí1.î3`î,”î7Áî3ùî;-ï-iïl—ï:ð4?ð9tð*®ð8Ùð.ñ,Añ3nñ/¢ñ,Òñ-ÿñ_-ò%ò1³ò%åòB ó)Nó,xó4¥ó2Úó8 ô^FôW¥ô5ýô*3õ8^õ/—õ5ÇõZýõfXö4¿ö*ôö)÷I÷kb÷,Î÷û÷,øEøZøpøˆø0šø0Ëø;üø)8ùrbù2Õù-ú16ú:hú6£ú Úú èú öú&û+û<>ûU{ûÑû[ñû+Mü(yü!¢ü#Äü$èü< ý%Jý'pý&˜ý'¿ý7çýþF8þBþ>Âþ(ÿ8*ÿ%cÿ6‰ÿ)Àÿêÿ + )EX n|*’*½6è.0N+)«$Õ/ú7*6b"™#¼!à4MlŠ$Ÿ$Ä!é) '5]}#•¹;Õ/+AGm6µHì5&I:p$«$Ðõ + 94&n•1µ)ç6H MCn²$ÎJó4> ?s +³ ß >û 3: + -n + œ + '¹ + ,á +  )- -W 3… ¹ (Õ þ  5 T +q & %Ä 9ê ,$ 1Q 4ƒ B¸ =û %9*_Š'§+Ï1û.-?\2œ8Ï 0)LZ<§<ä1!1S6…#¼à:û6>R3‘9Å%ÿ%>B2=´'ò%'@0hQ™<ë(2E8x#±;Õ/+A1m6Ÿ"Ö$ù2AQ3“0Ç4ø3-.a  ž ¬ º%È0î?&_† ž.¬1Û! +/)[… ¯½ Ï Ý)ë0 FBT0—4ÈAý%?Qe2·+êD0[0ŒQ½I5Y$8´í($M)e7bÇ&* >Q . C¿ :!?>!*~!(©!$Ò!-÷!-%"ZS"F®"5õ"2+#+^#EŠ#1Ð#1$<4$8q$Aª$ì$ÿ$ %]% }%K‹%G×%J&(j&5“&+É&2õ&+('ET'@š'*Û'(7%(;]()™(0Ã(8ô(%-)5S);‰)8Å)4þ)!3*IU**Ÿ*,Ê*5÷*X-+4†+;»+*÷+%",H,3^,)’,/¼,3ì,8 -rY-Ì-â-.ý-4,.Ka.­.5Â.6ø.*//@Z/L›/+è/0;+0?g02§04Ú0I1Y1l1AŠ1)Ì19ö11024b2'—2*¿2+ê2303#K3"o3"’3(µ3"Þ3"4&$4'K4"s4$–42»4&î4>5'T5F|5GÃ5 6%6B6"b6,…6<²6ï6'7977#q7"•7¸7Ô7é7+ï781+8?]8H8Mæ8$49Y9En9E´9+ú98&:;_:&›:PÂ: ;!!;.C;r;$Œ;)±;Û;ö;1<:@<:{<:¶</ñ<8!=5Z=5=?Æ=5>5<>r>&ˆ>¯>:Ç>$? '?H?W?t?Ž? ¢?2¯?'â?) + @*4@)_@,‰@*¶@)á@, A(8A*aA*ŒA*·A+âA8B4GB*|B6§B*ÞB C(CHC:dC3ŸC<ÓCID7ZDK’D(ÞD-E#5EYEwEd}E;âE+F<JF&‡F!®F0ÐF+G9-G(gG-G5¾G#ôGH4H;NH2ŠH-½H2ëHNI*mI5˜I"ÎIñI J01J2bJ+•J*ÁJ0ìJ$K1BK"tK$—K#¼K#àK#L%(L-NL.|L-«L2ÙL6 MCM'aM$‰M&®M ÕM.öMA%N+gN5“NIÉNO#)O.MO,|Og©ODPHVPŸP!²PÔPCòP66Q'mQ•Q/°Q@àQ<!R^ROuRÅR ÙR&úR%!S GS=hS¦SÀSÑS$ïSTB.TqT‰T8¥T(ÞT,U!4U VU2cU(–US¿U*V1>V#pV@”V-ÕV^W*bW-W3»WïWLX\X.yX(¨X#ÑX&õX*Y%GY'mY8•Y.ÎY*ýY#(Z#LZ"pZ6“Z+ÊZ[öZ0R['ƒ[D«[Jð[;\M\`\r\\#ª\*Î\Cù\=]*R]0}]®],Å]ò]3^6D^ {^9œ^DÖ^(_AD_:†_WÁ_L`Af`I¨`3ò`8&a_a'}a3¥a)Ùa#b''b2Ob,‚b-¯b1Ýb;c4Kc@€cÁcQàcK2d/~d8®d$çd& e=3e1qe9£e?Ýe1f*Of'zfD¢fçf=g0>gog>g5Îg/hD4h0yh(ªhÓh/êhi#i(,i1Ui*‡i²iÈiÞi*þi4)j,^j@‹jÌjCåj+)k2Uk/ˆkE¸k4þk!3lAUl^—l[öl>RmK‘m6ÝmGn%\n"‚nE¥n#ëno:*o"eoWˆoMào_.p?Žp@ÎpBq9Rq9ŒqÆq1åq$r±w.ðw'x4Gx |x<x!Úx"üxy65yly~y%šy*ÀyFëy?2z9rzI¬zöz{/){5Y{G{)×{9|*;|%f|!Œ|@®|ï| }=%}8c}1œ}Î}dê}(O~>x~9·~)ñ~(.Ds.“*Â=íQ+€P}€Q΀ C8(|?¥0åD‚=[‚;™‚CÕ‚Xƒ3rƒB¦ƒ+éƒ"„"8„![„!}„.Ÿ„΄è„3ý„?1…(q…-š…!È…0ê…%†6A†:x†%³†;Ù†=‡S‡q‡'އ¶‡:Ó‡ ˆMˆ9iˆ£ˆ(Áˆ'ꈉ#‰@‰^‰}‰š‰9¸‰1ò‰+$Š PŠ6ZŠ4‘ŠÆŠ׊늋‹'5‹]‹)v‹/ ‹3Ћ,Œ01ŒbŒ)€Œ)ªŒ.ÔŒ. 2:S4ŽÃ&Ú"Ž$Ž:ŽPŽ,oŽœŽ ¸Ž<ÙŽ,<C€6žÕæ &%F)l–³ÍjæuQ‘uÇ‘C=’;’*½’3è’6“AS“P•“9æ“' ”#H”:l”<§”ä”!û”"•@•+^• Š•«•/¾•Yî•7H–,€–+­–6Ù–-—->—,l—.™—È— Ñ—XÛ—"4˜(W˜(€˜<©˜8æ˜2™6R™‰™9©™@ã™=$š-bšMš+Þš' + ›#2›2V›0‰›'º›;â›9œ$Xœ}œ.œ:Ìœ$#(Hq Š– §®AÆ#ž6,žcž/€ž7°ž8èž>!Ÿ*`Ÿ"‹Ÿ ®Ÿ¼Ÿ%ÛŸ? A S  b !ƒ #¥ $É <î +¡I¡(R¡({¡(¤¡Í¡"Ý¡)¢"*¢)M¢Hw¢6À¢)÷¢)!£,K£&x£-Ÿ£3Í£%¤!'¤>I¤'ˆ¤+°¤)ܤ0¥7¥O¥/o¥'Ÿ¥Ç¥%Ð¥ö¥N¦?b¦0¢¦?Ó¦"§96§=p§:®§Cé§6-¨0d¨$•¨º¨Ù¨7ö¨:.©&i©&©.·©%æ©" ª'/ª'Wª'ª,§ª@Ôª=«-S«D«JÆ«¬0¬'K¬es¬CÙ¬)­,G­0t­)¥­2Ï­ ®*#®N®$c®?ˆ®(È®,ñ®+¯'J¯9r¯8¬¯+å¯.°@°'_°+‡°&³°&Ú°&±<(±2e±Q˜±0ê±2²:N²1‰²6»²<ò²J/³%z³D ³å³÷³´8´Q´Cg´8«´-ä´-µ-@µOnµ:¾µ9ùµ93¶.m¶#œ¶+À¶.ì¶-·"I·Kl·¸·Ò·)ì·G¸*^¸-‰¸4·¸.ì¸$¹N@¹¹7©¹(á¹, + º"7º!ZºE|ºº/Ûº »#»-5»?c»(£».Ì»Aû»=¼/X¼ˆ¼¨¼ż+â¼!½&0½.W½-†½´½)ĽBî½"1¾ T¾.`¾¾7¯¾-ç¾5¿.K¿?z¿#º¿Þ¿,ý¿5*À6`À#—À5»À5ñÀE'Á1mÁ2ŸÁ0ÒÁMÂKQÂ:Â@ØÂ9Ã9SÃ8Ã:ÆÃ2Ä*4ÄF_Ä;¦ÄBâÄ+%Å%QÅ8wÅ:°Å6ëÅ1"ÆTÆsÆ;‚Æ3¾Æ8òÆ!+Ç8MÇ.†ÇLµÇ/È92È/lÈWœÈAôÈ46ÉkɈÉ)£É&ÍÉ+ôÉ' ÊHÊQÊ$pÊ'•ʽÊ3=ËFqË6¸Ë + ïË?úË?:Ì?zÌ?ºÌ úÌÍ2%Í3XÍŒÍ0£Í$ÔÍ/ùÍ:)Î<dΡζÎÇÎãÎóÎ' + Ï2ÏDÏYÏnτϙϯÏÄÏÚÏðÏÐÐ2ÐEÐ[ÐqЇÐгÐÉÐÞÐôÐ + Ñ Ñ6ÑLÑbÑxÑѣѹÑÎÑãÑøÑÒ$Ò7ÒMÒcÒyÒÒ¥Ò»ÒÑÒçÒÿÒÓ+ÓCÓZÓ pÓ:‘Ó$ÌÓ!ñÓ!Ô15ÔgÔyÔ‰Ô8¢Ô9ÛÔ)Õ?ÕP^Õ'¯Õ×Õ&öÕ'Ö(EÖ nÖ/|ÖD¬ÖBñÖ&4×.[×5Š×#À×Aä×&Ø)9Ø&cØ#ŠØ.®Ø8ÝØÙ?6Ù\vÙ$ÓÙ øÙ#Ú=Ú&TÚ/{Ú«ÚU¼Ú!Û!4Û#VÛzÛÛ©Û&¸ÛßÛKÿÛ KÜ+lÜP˜ÜéÜ'Ý'+Ý'SÝ'{Ý'£Ý'ËÝ'óÝ'Þ'CÞ'kÞ'“Þ»Þ#ÕÞ+ùÞ"%ßHßgß"†ß©ßÈßçßà@%à'fà2ŽàÁàÙà&óà+áFáeá~á žá"¿á(âá- â9âUâ\â"xâ%›â5Áâ!÷â5ãIOã1™ã6ËãäFä<bä,Ÿä0Ìä.ýä,å-Gå'uå&å"ÄåFçå.æ#Iæ'mæ9•æ!Ïæñæ$ ç30ç9dç7žçÖç/ïç)èIèdè-è9­èçè é*#é2Né:éN¼é7 ê`Cêf¤ê* ë36ë/jëšë?ºë(úë.#ì5Rì.ˆìI·ì7í19í/kí$›í&Àí#çí# î/î&Oî0vî0§î0ØîU ïO_ï¯ïÃï Üï/ýï.-ð(\ð(…ð(®ð+×ð/ñ*3ñ*^ñ*‰ñ$´ñ+Ùñ!ò$'ò(Lò!uò'—ò$¿òCäò%(ó/Nó)~ó+¨ó/Ôó=ô&Bôiô€ô–ôªôBÊô9 õ"Gõjõ)õ6«õâõ&ö)ö'?ö&gö(Žö·öFÉö3÷D÷c÷ƒ÷3›÷7Ï÷7ø2?ø0rø>£ø@âø7#ùH[ù¤ùfÀù('ú + PúB[úDžú9ãúû);û(eû-Žû4¼ûñû$ ü).üXü!vü8˜ü.Ñü!ýD"ý)gý#‘ý.µý4äý(þ!Bþ4dþ@™þ'Úþ-ÿ50ÿ-fÿ9”ÿGÎÿ=(T6},´8á8AS@•(Ö)ÿ6)`0f — ¤7Å!ý,L,e3’=Æ'/,1\3ŽÂÝï3 +Am$¤ÄÜ&ô#!?a*}*¨(Ó ü05N„"•6¸ï&$Ej<†Ããõ& 1; ;m 2© 1Ü  + , + 5 + U + .o + Xž + ÷ +   3 )T (~ .§ Ö ;ï .+ 0Z "‹ 5® ,ä   ; :W W’ ê ñ "&%A7gŸ¼1ÐA=aŸA·+ù%%?K'‹"³5Ö#  0"Qt0ˆ ¹>ÚAJ[#¦ Ê5× V+I‚/Ì#ü #7$[€7š)Ò'ü$@?S;“(Ï+ø?$1d4–$Ë7ð*(S*qœº;Ú5* `-*¯9Ú&,/S8ƒ+¼è0ÿ00/a:‘4Ì;2=6p9§á0ü1-#_=ƒHÁ4 + 2?7r;ªMæ74-l*š)Åï( 4JOgn,Ž»Ï*èL 5` – 2¶ Eé #/!S!,l!4™!@Î!6"JF"J‘"+Ü"(#81#j#6‡#/¾#*î#-$4G$O|$^Ì$;+%.g%–%&ž%8Å%<þ%;&BV&™&)ª&Ô&.ò&:!'3\'$'+µ'1á'!("5(*X(*ƒ(®(Å(BÕ(),)DE)>Š).É)?ø)08*5i*/Ÿ*$Ï*)ô*@+_+s+‰++¡+3Í+%,',(E,,n,9›,*Õ,5-6-&R-1y-*«-'Ö-=þ-><.D{.À.'ß.,/4/+Q/ }/ž/'³/Û/?ó/@30&t03›0=Ï0 17$1-\15Š15À1Bö1#920]2.Ž2L½2[ + 3Mf32´3Cç30+42\4Y4Sé4>=5"|5 Ÿ51©5+Û5 6768I6,‚6-¯6.Ý6+ 7E87C~7EÂ7B82K84~8?³8Bó8F695}9.³9â97ÿ97:/H:(x:1¡:Ó:-ð:';*F; q;{;"—;º;Õ;1ò;$<;<Y<#s<—<°<.É<1ø<*=D=`=#=£= Â=%ã=6 >@>0\>'>=µ>"ó>"?9?1I?{?)“?1½?ï?B@G@:e@? @à@7ø@70A$hA9AÇA*ÏA,úA.'B8VB"B0²BãBüB+C(GCpCC!«C ÍC<îC$+D3PD1„D@¶D1÷D#)E<ME&ŠEF±E:øE=3F=qF5¯F#åFR G8\G•G²GPÐG;!HL]H<ªH@çH!(I%JIpI/ŽI#¾I9âI/JLJgJ%nJ!”J(¶JßJÿJ)K/HK#xK#œK4ÀK7õK0-L6^LF•LCÜL! M$BM!gM‰M¦M*¾M6éM N3AN@uN8¶N0ïN; O?\O,œO1ÉO,ûO(P#@PdPP P¿P'ÞP&Q*-QXQ1oQ¡Q6¼Q4óQ+(RTR6iR R%½R%ãR S8'S%`S†S"¤SÇSãS.÷S!&T*HT9sT­T"ÊT'íT"U-8UfU€UšU2­U(àUj VztVWïV@GW<ˆW6ÅWüW( X*5X5`X0–X6ÇX5þX(4Y1]Y1YÁY0ÛY0 Z=Z+]Z/‰Z¹Z(ÒZ'ûZ)#[(M[4v[3«[/ß[:\5J\D€\%Å\Bë\;.]5j][ ]9ü]X6^,^3¼^2ð^3#_KW_1£_JÕ_E `)f`%`%¶`#Ü`aa//a'_aU‡akÝaIb]b=cb¡b,§b/Ôb@c1Ec^wcÖcñc-d/?dSod2Ãd1öd;(e;de< e<ÝeQfDlfD±fDöf4;g)pg,šgÇg(Úg(h%,h"Rh5uh«hÊh çh i+)i.Ui„i%Ÿi<Åi<j?j@_j" jÃj+Ûj–kžkF¸k:ÿk':l>bl)¡lRËlm/5m3emM™m3çm9nUn;rn2®nánön o!o8oMoaowoŒo¢o·oÍoäoùop+p@pTpfpp—p®pÅpjÙp$Dr!ir ‹r5¬r+âr+s):s+ds)s&ºs8ás?t;Zt–t¬t$Ètítüt(u3Du5xu ®u.ÏuþuZv'xv# v(Äv&ív5wZJw+¥w7Ñw5 x3?x)sx&x+Äx)ðx2y2MyH€y&Éy"ðy8z8Lz2…z0¸z6éz+ {6L{#ƒ{#§{#Ë{"ï{-|@|"[|/~|0®|Hß|W(}/€}°}4Ð}X~B^~¡~3Á~0õ~?&/f<–LÓ" €9C€+}€6©€(à€ Z#*~©>Æ(‚..‚-]‚‹‚«‚BË‚%ƒ&4ƒ![ƒ2}ƒD°ƒ=õƒ93„?m„(­„>Ö„+…0A…8r…R«…þ…†,4†;a†+†3Ɇý†-‡8E‡;~‡8º‡ó‡,ˆ=ˆYˆ(wˆ  ˆªˆ'Áˆ"éˆ( ‰75‰m‰†‰¤‰º‰"Ó‰ö‰Š0)ŠRZŠ/­Š*ÝŠ‹$‹6‹V‹v‹1“‹#Å‹&鋌0 ŒQŒGpŒC¸ŒCüŒ%@%fKŒ Ø_ù!YŽ%{Ž1¡ŽLÓŽV :w'²7Ú7üJ"G‘#j‘%Ž‘E´‘2ú‘-’C’^’z’0–’,Ç’ô’!“2“3R“;†“7“6ú“(1”5Z”M”4Þ”8• L•m•„•••-µ•ã•þ•–7–T–8n–§–Á–=ß–>—,\—‰—$ —Å— Þ—;ÿ—0;˜l˜#Œ˜<°˜0í˜.™M™ m™,Ž™8»™%ô™1š+Lš2xš «šÌšæš.›B0›2s›1¦›HØ›-!œOœ6nœM¥œ?óœP3'„)¬:Ö7ž4Iž8~ž/·žçž7Ÿ7?ŸCwŸ3»ŸHïŸ>8 w 6• %Ì @ò K3¡P¡6С.¢B6¢=y¢;·¢2ó¢F&£m£‡£££8Á£*ú£=%¤)c¤X¤Iæ¤%0¥!V¥x¥”¥4´¥@é¥*¦2¦8;¦2t¦6§¦CÞ¦7"§&Z§0§$²§×§&é§$¨75¨Lm¨ º¨Ǩ"Шó¨,©?©:^©>™©,Ø©*ª20ª#cª%‡ª.­ª.ܪ/ «<;«'x«) «+Ê«(ö«'¬'G¬o¬ ¬®¬¤ å">±ÐKú? \lj ¥ + ¤Þ #¦ + ߤ¨çtôím$>4N + Ï ¢ ñ! 8c Ï » tg~ + gÉ Ï@ÄDÝÔ è + Z åß bv F ¸Àx; †ý45g7 ãQÆy0  Y×HÈ |Ÿ + – 'R + ¸ É ² + i„ª/I¿ © î ¯o ô]"ã OlØ ¤´¡ ":ä ì ­ÇÌ <GÓB  + ü‚ ´ò¢È 0§ +   ±  " A  : + H + \ –uÀ ýTÌòó ¹_—Ãð‘ÖÒûg ¿ Pê Þ\$ð + ¬ÏŸ} + gT¸ ´ ð /ü ð§Ù‡cŽ «¹2 ¦V ” E ö ³<.  ¯ + À'ªº + ß:¡+ ÂP •Ó3 ÔïSƒ–›Ö 4m«  Phû VÚ;‚™ ’!®è^_9mU” Ð] ÀS + à8ù uJ¨wAA: rvÌÖÃ/ݳR + > + N° £ d Å ²= ‘€ "mÍÛ{` + HÑ + ãg~º ×ÒÍ”’–:>à’ uü # Ç + ͦ … + ú 1ø + / ÒÄ¥ã | + { Ä + [ OÆG'i ¬ Ë + w @¿ )å + pO½  2Ð`'›¼òæ¯ —… ó& èqXJ n×… ‡ãy ` t­L SÏI Ç[Õ$ + ü+ä 0 %gÃb ¥Î=_ÊLå óW + &YT¼ ¢ñ ¾VÂ'Y ¢ + |_’"]B ³ø v;gúÒÏá;\´õ + ù× &Éö˜îÜÖ © ( + . + q$ f : x \ + m = Ðzééq ÝïCM âþô ò %.š<X + ôý$ + =Î .ZVo– Çöžn ¼)Ù`¹ ? + Ò + ÐX ý + 8 €J ÷ ° + × + 1*Ô­¶ W O_ jS˜E@à ÔCà + /ˆ3 ™HG + <?€¸ Yá¾ ] h*a^Ò Âœ¨' Ù)3^ëòUP  — + Ïôt + ‚Ú±È&O• ¡ À÷ û ŸWÐ + •h8  =g‡ ëb  UtÅHK{iw õ V‚Nõ†a ´0×:ŸZU`Mþ‹ # + µ Ë çÁ L ›Ô + ã¾ ‰6 ÿǸ& + R Žç“ > 6Mà + ñºÆ7½ + pxy ª@ + =  + €*² ‘Ó › 웿º6Üšü¦ôŸ×™ + E» Ë + Æè´ N*~d B¡åÑ]U ¡ƒ ¬ + -„ + 5 ¡9 ‡ Á ­¬ Nmê 7 + % §ƒà  + ñåè¿á÷ªSoû¹q;iû5! + Ál´+Y K ,@õn3 Ô ’ Ö ‚%튙h`‰ + aѳ²` Vq …É + œ õ  ƒ ï|Ì o ASÆVõF \ û ]ó­¬ .O áy~Ûl+°0‹ ® »¥ Z?%­ Ù D€Pm  + GøÝ ¹ãyn}”¸3 +  ²e + +Þþ$ ¸Þ …° À‰=¢å Oä¶ÇI,ÄjF ¬U d³»÷ Û Õú + È ±IذÞdå ãå ¦–Ç  + " ú N¢& 7½Q§Ó (ù#f ½ Àw·ÉÌE´ / + 4. xuÎ2ñ + ^œÓLÙˆ + óã ž/boÊ 2Žš`Ñ · mG + t H- + ·QF¥]íúƒÆ g Ôk‡ÈcFÃ1åà ¢{¨DÿŒ H Ðq • á + ÈE ´ + ¹ ÏŠT } õ7 fÆ Íí{6ÆÙò + £ÏÞ  S sV #XÕƒ Þ  + Ê Á‰s TâEšF7 0 + øG ×ïN¯¸r‘Ù r z Cç} M >1”3sùè oz$Î + ” y öî + RøúÒ Ìs ÿj + - šËq ÀQiÐ D¹Á + u=£Ú +  k , §¸›Å«" 8Ÿ©¹r ª ©©†°ÎÏ ºu o3 ^=Ð ß o:’Ô: Í ñëà + º,‚óÿa†S  Ém©®ÞpäÅeòVë Nb + …ªêK x„…\)'œ@œÚ ˆ jÑIB„ˆ6;ͲFk¸0Z' «é  t “™1¯x  ˜ —’ ¨ÈJÏ + î ÷¿ËûµìõÞpÊ¢2 „Ķ ­l· îÒ Í ùR !\Z + ¤M¸pò $ß”mtâÜ Áeu%›¥p ˆ êCe x.û >v- ³’ + )D X Tl ߨ ŠPt – DD x ‡ + DrÂw7‹ öZ WC ¬@1â _ > ç !? ~ ã)ùpóX˶ „- ˜ + ìÔ0n§¼ ýMdý * ½ùCEâa_H”ê (o • 9[ÞÛ + a + pbjp + <4K ¶¦ \ + ʯ®[vh [ + E ¥ + w< ”Þ + ¦òÄÝÿ — *ãØ/ iJþ cPa§»Y‰Þ÷ô ¬Ÿ<ª + òŒ -ÿ + bö€&iÝ¥ X ª5k6v« + É˜Ž ˆMo + ]‡f±9Ü- È 3à§?£Ï¢ þ üì + {±ä‡*‰÷ ¹ÔJÿk£ dv ü Ù €þ ; + Û_2h ±½\¥Ž + š@ú< + é  _ + °ç ² è5R_øèæ¡ ûÙìØâ&-˜}Úñ°Òb¿Î + ÿ ‡ÿô¢” ‘ ­Fké _š TS 2>nÿÓpBÑѼ M vŠIXÖ :_ ^20?!ô­ + ÛÃAÔ€ 6 Ç Ó + ^ + ý&WÕ|F t ©½vC Š igð vµ/ K? ‚õ} aKŒg ÚïD š ”9  Í + •8î Þ + ä À 8 ïÕ|@Â÷ + ¹ï + n‹Ì߃ù± Î  œ5yì mXà ‹7í + ®)ž ê  Ç'Y´ì + < cáìÎWÝs!‚· Ë‹ò© î„ê– êáé + Q"00 ± [/3'ë¬ó Å Cz#ÓÁ â3. l(· ³ °[¡Ò Zö¥w.Œ6 + 7ê â( H ج&‰˜ ± ¯ p Ò žIÖ 5rš "ë[ôQ  *z p ‰ ç éQ ÕÚ9Ë   Ž' Jô ‹ ;<– +  kP Ø¥ Ý + ž’œ(‘ KN ¿.Ç ” Ú 'žzL‘óµ© + Àúè EzMû}ßç‰ Rþó Á y‹Õ ÕxÜ AÁ Ûî½þÐ Oí u‚a \/¢Jê> š + < †úç9 + $i …  ø -¹ +X ºµè Þ-àýà ² sþlÆ + Ÿ 9Rs0 ë N3Ç~ …%¬ XwË + + üÖZ ¥o˜›ƒL ¨ qß >¸ + ײc¡® i0Ý ª + jkš•ã ­Â@(‹A /— ÿå±í{úeWòrëä à D1 ½¾* W>HŸ× • + HX~÷={ÜJöà ½RùY›˜l(ù . _âUþ  &ÚÎ b5 + ç#ÛIp” +  û —µ U  »Î«… %» Z~Üi{?ùñ@R |ÖAÁz "Á²' + øñ : â  ”ú­ ¾Ì ¯ ÖQûT ¢)eó ™ É “M ) Ä‹¹ -k SÏåmý\9;™ 1 †œ Šl + * § 2V À $ ×sŠ –ò ‹<ã› v + þº + Bâ + ¿“ +  ¨ 6ÄP `¶O + ³ëS¿“™sE + 5ìÝõ| }•aE!^  ʵÂ5 `eó + XJ E*NÈ£ ß`¸îyo  + SR  + >  ßY + ëñ¼ + €eÞA± + }nöÍ Eº W Ä + ) ¶ßÝ + àIfЖ-b ¶O +Å÷P + žû¤w«+ ŠQDÉ + Æ §  ®³(OOÿ + Ÿ [ ýh“" ) IÃê ]Ç ¿ + #bü¡ yGöØ F ­ “ “ æd + ¶ÐÀŽ«] ,æ–†,ìf¯ nš]O –äÑ k [Æ—‹OQ 6 Z 1 ø’ý v Õ + ` D B’êŒ_— ØFQ i A + h :WÅÚ˜|  + /! ñ — aZ®»8 , Ÿ¾¢ L® Î.—ü‡e%†~ ˜ ÒÄ Ö/k‡» + Ù™Ì xÏü WB­äÚèî2hŽz + ¹ £| Û c *ÑÙ† ® + Õ# + ͆ã`Ì JdB×e žƒ + )r f + ¨W{ ‘$ ¨zÛ s R¿ÊC  ÖbM´A ÜÊŸ Õ; YÛ2 ‘3æ¨ÃW ¹|KÜá ¦C + wïí³ + ú ]Ñxˆ›Žf©¸LgqK } ¤?ìeÑú ¯û + ÇxÃÛR [ö ¹ + ÅZ ¾• ç® ° 2 Ö + ¡è{*°“D J + ì #ŠW ‚ºów=OH2 mÒf÷ í !?á + 媠 xU(ë^ IʈH nvï 9¹È¾$~ ¾ GT†v "nJ™b”œj £¬Ì¼ØsR- »ç ’ðî F*+u + ô^"d sMŽ µ¥Ä&Cÿ  a]ð + ª P£ + ?¾Èq + 2 + Š3 \ Ì7g¡qyŒ eÁå + ¸ ²¦UŸõä!Ø + -ZI ç! Q„ ¤µü† p¯³  &) ØM U + ö pž¶§¦0O #‰ ½Ñ.’ Ù + K>" + ˜ jk¾ R Ä ^&, æ + 8Ÿ¬.ïGÔE| ×™Tpø m • tþh~1 +  u{zô 5Ûã»9 ¾QG @ æ% + ÚðÒ ) + Ñ  ² —… “U ¤ë £÷5+ n ^ Íð ÓˇE H b I + # ] ½}ÛeÝ  ^W ð Ášˆ4 €Å}Š + waRNï šr‹&$+||Iì1^ -T + ½• ž*  •1 åó„ ÆŒäL2p N~ Q˜ ñO!C h, qfÇ  + ^Ñ Ü† M¨wŽ@ Q + r cKþBG‘‚ Òqìµ + h¡i= œ¦1Éd¶° ö Dö ˾ ¸ s + ­:3Éi¨‹ üfeÆg °« »éðÙè X‡Kç ጠ+ âÀ + ? ùu“~N ™ Uþ + ; e Š ð¯^º  + á TÁm <¤ + * + ¦ •Åä + åÐ õcÎ > +%“ c Yž —{ )¾ + € ì ë6¶ Q·û~B ,Œ F WZ 4ZÏ ( ÐY 'âƒó õj ú¿ ñÓ-{. j¦ ! ÜÌú vˆ†Ò¥éôK5; (Ú ù ž æ ƒŽ øÃ.}hð –òk‰µžcÜ + x +  a + ñ ¯± Økó™L¼& 8 yèö + ˆ 9y7Uß + y + õ µ4Ê c’ E«Š + œ ¦DÅ $ æî(à>–â æ8 ^8Á¥À× ÜÝ7µ Ô¢ × ç + «>Pé¦\Ó 8 + Õ§ írõT ê@ âï ¼Ì»Lí±Éñ5 “ 6 + í ŠÆ MŒ ±C´4"@7f7žÎ) VM + J + A ¨Ó& e + ª„Ø 9 + —$Ù ËG æÝj M ›í¶œ¢ …é¾l„'´× ó Ó ý= + È¡ƒíþäá yöL„ „Ê $„¯ » ß qt$ [ !   : µÍ ¬r &: u·J4G{f w + ðú ÉA- ¢'‘ + } + [CZŒ l|èrSaÁ3ï Ôã®à N…í LÞÊ7 ¯Û #8Å}§Öç#w A­ e + iD³, + £[É%› 1²OÐ 9 §Ö a k + ªˆ‹5§v „ €Øº·ð3"w ?¼ ,j+ý] + ' Pe4. N y =ç½ r + Ý;±ˆS“ ‚(4 ÐÑñ7‚T g + s6} ¡+Û›µH† … m + ·Ú† *Ký i + ­!Í ˆ, ™Ö¤» ‡  Dqt+Ó Y ]÷V % Âë Vº?‰ BŸt£f¶ + x aŽ I + kL+ + b…1ŒÕ Ž:„< ¦Õ òBŒ[ 4Ü` · + ƒk ½ _¿@ ÿz N‚ 3ë¿Fo €  Cq|/ ª ï6 F £ ‰ŒuŽ fÆæÊr I ˆÒCŸ I ÅÉb~%*È<ïêß TB³ Ýo5¤ VÚy`‡j©;;   hT? rtù + V + ÿ ²á˜ˆ + Bl Ü S?‘ % o: éGžÏ› Ú l Õ ‚ @ààÖd° ‘G Ä5Æ j « oàGGÍ €´’„o‰µíhÿa Î` ,VK<G p;œæ § ì – Œ¬­ + Ê:®³ ,fÔ [ü2ŠÃœ + »0i %>( sÕ–‰« dâ Íßñ Z¤ ¥ Y% Û d è© §ø•À þàd + QS Ì +  Å÷ 6XMP + ÂV_‘ x —› + c + û—”9¿#\ S½µ  z < + l ä(?n œghijŠ · 0·¨ šÈ6ÇË Kò ÷ù•¤ FdÎË ïº°n + æ Ùøu#(  + zýÀ, JWm‘·R0ql{ + ä.$ö + 4 + úõ z,¥ ×Q‘rƒü 4JjáªÐ¾û¼é¼6 ™Ëcôîs ³!U˜_2Uô¸ 0©ÊÊ + •bd ŒŸ E³ðh ¾Ä ¼ + %'L7“# â9)”Ü  † + ·ü + á- + L8z š n Î@¡ ¤ ¦ ¬u þRÔ ¯ÓkH/=H º… € + n¯Ä›·ËC(= æ ýã + ¼ [ ÿÍW‰ + 1P é Ëêl w´ u »/‰Š©«£=P4 K + øL + è + ˆ ¶ ÌAB + íÍ£Båßc j `ƒ + <Ýê + € L ït^ A6©îCcdPä™—2r ÈJîYðõP¨ + ®d`¶·®÷ÏÀ éÉ ˜ô + n{ « áb ë E£1² °šAB ¼³ äë + Ñf5 ø Å\é ]Ç´ƒŒg + T[ø + Ä!]È /’)m á7Î ¤ Ùà ª€ØYÜÆØ ‘ü ²\ž +  + ¿n¤lœÄcÅ Y¶ V¬ é÷sœ T‹¢¼ž ¡ + «ÓÉ ~± Óî ©ý îf Á_ 984 UÊ + øF + tù~ª}ÑX ;8oºÚ‹ + êæh + ½D + ®£  + Y + Å + q + N | « ÞXSz c XŽÇò\®3˜ ¼H;© ‚ + ‡ “Ž“‡ æIù ° ²4 vAx¨9u Ô" F ÕU8 =Ì…Ù¹Ø ’, ™ È + # ´ƒ 1 %#D + Options for %s: + + %s: %d: warning: can't add declaration of `%s' into macro call + + %s: error reading input file `%s': %s + + %s: fatal error: aux info file corrupted at line %d + + %s: warning: too few parameter lists in declaration of `%s' + + ;; Combiner totals: %d attempts, %d substitutions (%d requiring new space), + ;; %d successes. + + Execution times (seconds) + + For bug reporting instructions, please see: + + For bug reporting instructions, please see: + %s. + + Go ahead? (y or n) + Language specific options: + + Options starting with -g, -f, -m, -O, -W, or --param are automatically + passed on to the various sub-processes invoked by %s. In order to pass + other options on to these processes the -W options must be used. + + Processing symbol table #%d, offset = 0x%.8lx, kind = %s + + Target specific options: + + There are undocumented %s specific options as well. + + There are undocumented target specific options as well. + + Updating header and load commands. + + + ldd output with constructors/destructors. + + write_c_file - output name is %s, prefix is %s + %#D `%D' by earlier handler for `%T' in pointer to member conversion in pointer to member function conversion will be re-ordered to precede member initializations %-23.23s [undocumented] + (Use '-v --help' to display command line options of sub-processes) + (use `typename %T::%D' if that's what you meant) -### Like -v but options quoted and commands not executed + --help Display this information + --help Display this information + --target-help Display target specific command line options + -B Add to the compiler's search paths + -D Define a with string '1' as its value + -D= Define a with as its value + -A= Assert the to + -A-= Disable the to + -U Undefine + -v Display the version number + -E Preprocess only; do not compile, assemble or link + -G Put global and static data smaller than + bytes into a special section (on some targets) + -H Print the name of header files as they are used + -C Do not discard comments + -dM Display a list of macro definitions active at end + -dD Preserve macro definitions in output + -dN As -dD except that only the names are preserved + -dI Include #include directives in the output + -M Generate make dependencies + -MM As -M, but ignore system header files + -MD Generate make dependencies and compile + -MMD As -MD, but ignore system header files + -MF Write dependency output to the given file + -MG Treat missing header file as generated files + -MP Generate phony targets for all headers + -MQ Add a MAKE-quoted target + -MT Add an unquoted target + -O[number] Set optimization level to [number] + -Os Optimize for space rather than speed + -S Compile only; do not assemble or link + -V Run gcc version number , if installed + -W Enable extra warnings + -Wa, Pass comma-separated on to the assembler + -Wl, Pass comma-separated on to the linker + -Wlarger-than- Warn if an object is larger than bytes + -Wno-comment{s} Do not warn about comments + -Wtraditional Warn about features not present in traditional C + -Wno-traditional Do not warn about traditional C + -Wundef Warn if an undefined macro is used by #if + -Wno-undef Do not warn about testing undefined macros + -Wimport Warn about the use of the #import directive + -Wno-import Do not warn about the use of #import + -Werror Treat all warnings as errors + -Wno-error Do not treat warnings as errors + -Wsystem-headers Do not suppress warnings from system headers + -Wno-system-headers Suppress warnings from system headers + -Wall Enable all preprocessor warnings + -Wp, Pass comma-separated on to the preprocessor + -Wunused Enable unused warnings + -Xlinker Pass on to the linker + -a Enable block profiling + -aux-info Emit declaration info into + -ax Enable jump profiling + -b Run gcc for target , if installed + -b, --branch-probabilities Include branch probabilities in output + -c Compile and assemble, but do not link + -c, --branch-counts Given counts of branches taken + rather than percentages + -d[letters] Enable dumps from specific passes of the compiler + -dumpbase Base name to be used for dumps from specific passes + -dumpmachine Display the compiler's target processor + -dumpspecs Display all of the built in spec strings + -dumpversion Display the version of the compiler + -f, --function-summaries Output summaries for each function + -fcall-saved- Mark as being preserved across functions + -fcall-used- Mark as being corrupted by function calls + -fdiagnostics-show-location=[once | every-line] Indicates how often source location information should be emitted, as prefix, at the beginning of diagnostics when line-wrapping + -ffixed- Mark as being unavailable to the compiler + -finline-limit= Limits the size of inlined functions to + -fmessage-length= Limits diagnostics messages lengths to characters per line. 0 suppresses line-wrapping + -fpreprocessed Treat the input file as already preprocessed + -ftabstop= Distance between tab stops for column reporting + -P Do not generate #line directives + -$ Do not allow '$' in identifiers + -remap Remap file names when including files + --version Display version information + -h or --help Display this information + -fsched-verbose= Set the verbosity level of the scheduler + -h, --help Print this help, then exit + -idirafter Add to the end of the system include path + -I Add to the end of the main include path + -I- Fine-grained include path control; see info docs + -nostdinc Do not search system include directories + (dirs specified with -isystem will still be used) + -nostdinc++ Do not search system include directories for C++ + -o Put output into + -l, --long-file-names Use long output file names for included + source files + -lang-c++ Assume that the input sources are in C++ + -lang-objc Assume that the input sources are in ObjectiveC + -lang-objc++ Assume that the input sources are in ObjectiveC++ + -lang-asm Assume that the input sources are in assembler + -m%-23.23s [undocumented] + -n, --no-output Do not create an output file + -o Place the output into + -o Place output into + -o, --object-directory OBJDIR Search for object files in OBJDIR + -p Enable function profiling + -pass-exit-codes Exit with highest error code from a phase + -pedantic Issue all warnings demanded by strict ISO C + -pedantic-errors Issue -pedantic warnings as errors instead + -trigraphs Support ISO C trigraphs + -lang-c Assume that the input sources are in C + -lang-c89 Assume that the input sources are in C89 + -pedantic Issue warnings needed by strict compliance to ISO C + -pedantic-errors Like -pedantic except that errors are produced + -pipe Use pipes rather than intermediate files + -print-file-name= Display the full path to library + -print-libgcc-file-name Display the name of the compiler's companion library + -print-multi-directory Display the root directory for versions of libgcc + -print-multi-lib Display the mapping between command line options and + multiple library search directories + -print-prog-name= Display the full path to compiler component + -print-search-dirs Display the directories in the compiler's search path + -quiet Do not display functions compiled or elapsed time + -save-temps Do not delete intermediate files + -specs= Override built-in specs with the contents of + -std= Assume that the input sources are for + -std= Specify the conformance standard; one of: + gnu89, gnu99, c89, c99, iso9899:1990, + iso9899:199409, iso9899:1999 + -+ Allow parsing of C++ style features + -w Inhibit warning messages + -Wtrigraphs Warn if trigraphs are encountered + -Wno-trigraphs Do not warn about trigraphs + -Wcomment{s} Warn if one comment starts inside another + -time Time the execution of each subprocess + -v Display the programs invoked by the compiler + -v, --version Print version number, then exit + -version Display the compiler's version + -w Suppress warnings + -x Specify the language of the following input files + Permissable languages include: c c++ assembler none + 'none' means revert to the default behavior of + guessing the language based on the file's extension + They exist, but they are not documented. + `%#D' declared here also declared as `%#D' here and `%#D' and `%#T' as it has already been specified as a non-system directory as it is the same as non-system directory "%s" because conversion sequence for the argument is better because of local member `%#D' with same name because of local method `%#D' with same name because the following virtual functions are abstract: because worst conversion for the former is better than worst conversion for the latter but %d required but does not override `%T(const %T&)' but does not override `operator=(const %T&)' by `%D' candidate conversions include `%D' and `%D' cannot use obsolete binding at `%D' because it has a destructor conflict with `%D' crosses initialization of `%#D' enters catch block enters scope of non-POD `%#D' enters try block expected a class template, got `%T' expected a constant of type `%T', got `%T' expected a template of type `%D', got `%D' expected a type, got `%E' expected a type, got `%T' first declared as `%#D' here first type here for conversion from `%T' to `%T' from definition of `%#D' from here in call to `%D' in evaluation of `%Q(%#T, %#T)' in instantiation of template `%T' in thrown expression initializing argument %P of `%D' initializing argument %P of `%D' from result of `%D' initializing temporary from result of `%D' instead of `%D' from dependent base class matches this `%D' under ISO standard rules matches this `%D' under old rules names from dependent base classes are not visible to unqualified name lookup - to refer to the inherited type, say `%s %T::%T' or `operator=(const %T&)' original definition appeared here other type here overriding `%#D' overriding `%#D' (must be pointer or reference to class) overriding `%#D' (must use pointer or reference) overriding `%#F' perhaps you want `%T' for a constructor since `%#D' declared in base class since type `%T' has abstract virtual functions skips initialization of `%#D' trying to instantiate `%D' using obsolete binding at `%D' where cfront would use `%#D' will be re-ordered to match declaration order will be re-ordered to match inheritance order you can work around this by removing the initializer %s TOTAL : shadows template parm `%#D'"%.*s" redefined"%s" after # is not a positive integer"%s" after #line is not a positive integer"%s" cannot be used as a macro name"%s" cannot be used as a macro name as it is an operator in C++"%s" is not a valid filename"%s" is not a valid option to the preprocessor"%s" is not defined"%s" is not valid in #if expressions"%s" may not appear in macro parameter list"%s" re-asserted"%s" redefined"/*" within comment"Small register classes" kludge"defined" cannot be used as a macro name# %s %.2f %.2f + # operator should be followed by a macro argument name#%s expects "FILENAME" or #%s is a GCC extension#%s not within a conditional#-lines for entering and leaving files don't match#elif after #else#elif not within a conditional#elif without #if#else after #else#else not within a conditional#else or #elif after #else#else without #if#endif without #if#error%.*s#if with no expression#import is obsolete, use an #ifndef wrapper in the header file#include "..." search starts here: + #include <...> search starts here: + #include expects "fname" or #include nested too deeply#include_next in primary source file#pragma %s %s is already registered#pragma %s is already registered#pragma GHS endXXX does not match previous startXXX#pragma GHS endXXXX found without previous startXXX#pragma implementation for %s appears after file is included#pragma once in main file#pragma once is obsolete#pragma pack (pop) encountered without matching #pragma pack (push, )#pragma pack(pop, %s) encountered without matching #pragma pack(push, %s, )#pragma pack(pop[, id], ) is not supported on this target#pragma pack(push[, id], ) is not supported on this target#pragma redefine_extname conflicts with declaration#pragma system_header ignored outside include file#pragma vtable no longer supported#warning%.*s%%R not followed by %%B/C/D/E%%S computed all 0's mask%%S computed all 1's mask%6.2f%% of %d branches executed in file %s + %6.2f%% of %d branches executed in function %s + %6.2f%% of %d branches taken at least once in file %s + %6.2f%% of %d branches taken at least once in function %s + %6.2f%% of %d calls executed in file %s + %6.2f%% of %d calls executed in function %s + %6.2f%% of %d source lines executed in file %s + %6.2f%% of %d source lines executed in function %s + %A begin, end, and step-count values known to result in implementation-dependent behavior due to overflow(s) in intermediate calculations at %0%A begin, end, and step-count values known to result in no iterations at %0%A end value plus step count known to overflow at %0%A from %B at %0%C%A step count known to be 0 (zero) at %0%A too few arguments (starting with dummy argument `%B') as of %0 for statement function reference at %1%A too many arguments as of %0 for statement function reference at %1%d constructor(s) found + %d destructor(s) found + %d frame table(s) found + %i-bit mode not compiled in%s%s + %s %s %+#D%s %+#D%s%s %+#T%s %D(%T) %s %D(%T, %T) %s %D(%T, %T, %T) %s %T %s (GCC) %s + %s `%s' does not fully implement the `%s' protocol%s as `float' rather than `double' due to prototype%s as complex rather than floating due to prototype%s as complex rather than integer due to prototype%s as floating rather than complex due to prototype%s as floating rather than integer due to prototype%s as integer rather than complex due to prototype%s as integer rather than floating due to prototype%s as signed due to prototype%s as unsigned due to prototype%s at end of input%s before "%s"%s before %s'%c'%s before %s'\x%x'%s before '%s' token%s before `%c'%s before `%s'%s before `%s' token%s before `\%o'%s before numeric constant%s before string constant%s between distinct pointer types `%T' and `%T' lacks a cast%s cannot resolve address of overloaded function%s causes a section type conflict%s defined inside parms%s disabled, use normal debugging flags%s discards qualifiers from pointer target type%s does not support %%n$ operand number formats%s does not support %s%s does not support %s with the `%%%c' %s format%s does not support the `%%%c' %s format%s does not support the `%%%s%c' %s format%s does not support the `%s' %s length modifier%s for `%T %s %T' operator%s for `%T %s' operator%s for `%T ? %T : %T' operator%s for `%T [%T]' operator%s for `%s %T' operator%s format, %s arg (arg %d)%s from incompatible pointer type%s function, region %d, offset = %ld (0x%.8lx) + %s has no %s%s has no member named `%s'%s ignored with %s and `%%%c' %s format%s ignored with %s in %s format%s in preprocessing directive%s is a block device%s is a reference, not call, to function `%E'%s is deprecated, please see the documentation for details%s is not supported by this configuration%s is not type %s (arg %d)%s is shorter than expected%s is too large%s makes integer from pointer without a cast%s makes pointer from integer without a cast%s makes qualified function pointer from unqualified%s no longer supported -- try -fno-vxt -ff90%s no longer supported -- try -fvxt%s of negative value `%E' to `%T'%s of read-only location%s of read-only member `%s'%s of read-only variable `%s'%s qualifier ignored on asm%s returned %d exit status%s rotate count >= width of type%s rotate count is negative%s terminated with signal %d [%s]%s%s to `%T' from `%T'%s to non-pointer type `%T' from NULL%s used with `%%%c' %s format%s with different width due to prototype%s%s%s version %s (%s) + %s compiled by GNU C version %s. + %s%s%s version %s (%s) compiled by CC. + %s-%s is an empty range%s. + %s%s: %d: `%s' used but missing from SYSCALLS + %s: %d: warning: `%s' excluded by preprocessing + %s: %d: warning: definition of %s not converted + %s: %d: warning: found `%s' but expected `%s' + %s: %d: warning: no extern definition for `%s' + %s: %d: warning: source too confusing + %s: %d: warning: varargs function declaration not converted + %s: %s%s: %s compiler not installed on this system%s: %s exited with status %d + %s: %s: %s: %s: can't get status: %s + %s: In instantiation of `%s': + %s: NaN - producing operation%s: Not a directory%s: `%s' not converted + %s: argument domain error%s: can't change mode of file `%s': %s + %s: can't create/open clean file `%s': %s + %s: can't create/open output file `%s': %s + %s: can't delete aux info file `%s': %s + %s: can't delete file `%s': %s + %s: can't get status for file `%s': %s + %s: can't get status of aux info file `%s': %s + %s: can't link file `%s' to `%s': %s + %s: can't open aux info file `%s' for reading: %s + %s: can't open file `%s' for reading: %s + %s: can't read aux info file `%s': %s + %s: cannot get working directory: %s + %s: cannot open as COFF file%s: compiling `%s' + %s: conflict list for '%s' follows: + %s: conflicting extern definitions of '%s' + %s: converting file `%s' + %s: declaration of function `%s' not converted + %s: declarations of '%s' will not be converted + %s: definition of function `%s' not converted + %s: error closing aux info file `%s': %s + %s: error reading aux info file `%s': %s + %s: error writing file `%s': %s + %s: found definition of `%s' at %s(%d) + %s: function definition not converted + %s: function singularity%s: global declarations for file `%s' not inserted + %s: input file names must have .c suffixes: %s + %s: internal abort + %s: invalid file name: %s + %s: linker input file unused because linking not done%s: local declaration for function `%s' not inserted + %s: multiple static defs of `%s' in file `%s' + %s: not a COFF file%s: overflow range error%s: partial loss of precision%s: subprocess got fatal signal %d + %s: total loss of precision%s: underflow range error%s: usage '%s [ -VqfnkN ] [ -i ] [ filename ... ]' + %s: usage '%s [ -VqfnkNlgC ] [ -B ] [ filename ... ]' + %s: wait: %s + %s: warning: %s: warning: can't rename file `%s' to `%s': %s + %s: warning: file `%s' already saved in `%s' + %s: warning: missing SYSCALLS file `%s' + %s: warning: no read access for file `%s' + %s: warning: no static definition for `%s' in file `%s' + %s: warning: no write access for dir containing `%s' + %s: warning: no write access for file `%s' + %s: warning: too many parameter lists in declaration of `%s' + %s: warning: using formals list from %s(%d) for function `%s' + %s: warnings being treated as errors + %s: would convert file `%s' + %s:%d: instantiated from `%s' + %s:%d: instantiated from here + %s:%d: confused by earlier errors, bailing out + %s:%d: declaration of function `%s' takes different forms + %s:%d: warning: %s=%s is not numeric%s=%s is too large%smember function `%D' cannot have `%T' method qualifier'##' cannot appear at either end of a macro expansion'#' is not followed by a macro parameter'$' character(s) in identifier'%D' is used as a type, but is not defined as a type.'(' expected')' expected')' or term expected'*' expected':' expected';' expected'Ll' and 'lL' are not valid integer suffixes'[' expected']' expected']' expected, invalid type expression'class' expected'class' or 'this' expected'lul' is not a valid integer suffix'{' expected("%s" is an alternative token for "%s" in C++)((anonymous))(Each undeclared identifier is reported only once(Each undeclared identifier is reported only once for each function it appears in.)(a pointer to member can only be formed with `&%E')(an out of class initialization is required)(continued):(enclose actions of previous case statements requiring destructors in their own scope.)(if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) -Wno-non-template-friend disables this warning(it is valid for %s but not the selected language)(near initialization for `%s')(so you should pass `%s' not `%s' to `va_arg')(static %s for %s)(this will be reported only once per input file)(use `=' to initialize static data members), + from %s:%d, + from %s:%u--driver no longer supported-E required when input is from standard input-G and -membedded-pic are incompatible-G is incompatible with PIC code which is the default-I- specified twice-R requires -o-Wformat-extra-args ignored without -Wformat-Wformat-nonliteral ignored without -Wformat-Wformat-security ignored without -Wformat-Wformat-y2k ignored without -Wformat-Wid-clash-LEN is no longer supported-Wmissing-format-attribute ignored without -Wformat-Wno-strict-prototypes is not supported in C++-Wuninitialized is not supported without -O-c or -S required for Ada-f%s and -msdata=%s are incompatible-f%s ignored (all code is position independent)-f%s ignored for 68HC11/68HC12 (not supported)-f%s ignored for Unicos/Mk (not supported)-f%s ignored for target (all code is position independent)-f%s is no longer supported-f%s not supported: ignored-f%sleading-underscore not supported on this target machine-fPIC and -fpic are not supported in this configuration-fPIC and -mcall-%s are incompatible-fPIC is not currently supported on the 68000 or 68010 + -fPIC is not valid with -mcoff-fPIC not valid with -mcoff-fdata-sections not supported for this target-fdata-sections not supported on AIX-femit-class-file should used along with -fsyntax-only-ffunction-sections disabled on AIX when debugging-ffunction-sections disabled; it makes profiling impossible-ffunction-sections may affect debugging on some targets-ffunction-sections not supported for this target-fhandle-exceptions has been renamed to -fexceptions (and is now on by default)-fjni and -femit-class-file are incompatible-fjni and -femit-class-files are incompatible-fname-mangling-version is no longer supported-fpic and -mapcs-reent are incompatible-fpic is not valid with -mcoff-fpic not valid with -mcoff-fprefetch-loop-arrays is not supported with -Os-fprefetch-loop-arrays not supported for this target-fprefetch-loop-arrays not supported for this target (try -march switches)-frepo must be used with -c-g is only supported when using GAS on this processor,-g option disabled-g with -mno-apcs-frame may not give sensible debugging-mabi=%s does not support -mips%d-maix64 and POWER architecture are incompatible-maix64 required: 64-bit computation with 32-bit addressing not yet supported-maix64 requires PowerPC64 architecture remain enabled-malign-double makes no sense in the 64bit mode-malign-functions is obsolete, use -falign-functions-malign-functions=%d is not between 1 and %d-malign-jumps is obsolete, use -falign-jumps-malign-jumps=%d is not between 1 and %d-malign-loops is obsolete, use -falign-loops-malign-loops=%d is not between 0 and %d-malign-loops=%d is not between 1 and %d-mapcs-26 and -mapcs-32 may not be used together-mapcs-stack-check incompatible with -mno-apcs-frame-max-stackframe=%d is not usable, not between 0 and %d-mbig-endian and -mlittle-endian may not be used together-mbnu210 is ignored (option is obsolete)-mbranch-cost=%d is not between 0 and 5-mbsd and -mxopen incompatible-mbsd and -pedantic incompatible-mcall-aixdesc must be big endian-mcmodel= is not supported on 32 bit systems-membedded-pic and -mabicalls are incompatible-mentry is only meaningful with -mips-16-mhard-float not supported-mieee not supported on Unicos/Mk-mieee-with-inexact not supported on Unicos/Mk-mips%d does not support 64 bit fp registers-mips%d does not support 64 bit gp registers-mips%d not supported-mlong-double-64 not allowed with -m64-mmultiple is not supported on little endian systems-mpic-register= is useless without -fpic-mpreferred-stack-boundary=%d is not between %d and 12-mregparm=%d is not between 0 and %d-mrelocatable and -mcall-%s are incompatible-mrelocatable and -mno-minimal-toc are incompatible-mrelocatable and -msdata=%s are incompatible-mrtd calling convention not supported in the 64bit mode-ms2600 is used without -ms-msdata=%s and -mcall-%s are incompatible-mshort-data-%s and PIC are incompatible-mshort-data-%s is too large -msingle-float and -msoft-float can not both be specified-msoft-float and -mhard_float may not be used together-mstring is not supported on little endian systems-msystem-v and -mthreads are incompatible-msystem-v and -p are incompatible-mtrap-large-shift and -mhandle-large-shift are incompatible-mxopen and -pedantic incompatible-p option not supported: use -pg instead-p profiling is no longer supported. Use -pg instead-param option missing argument-pedantic and -traditional are mutually exclusive-pg and -fomit-frame-pointer are incompatible-pipe is not supported-pipe not supported-shared not valid with -mcoff-static not valid with -mcoff-symbolic not valid with -mcoff-traditional and -ansi are mutually exclusive-traditional is deprecated and may be removed-traditional is not supported in C++-trigraphs and -traditional are mutually exclusive.da file contents exhausted too early.da file contents exhausted too early + .da file contents not exhausted.da file contents not exhausted + 31 bit mode32381 fpu387 instruction set disabled, using SSE arithmetics64 bit mode: + : `%s' JDK1.1(TM) feature;; Combiner statistics: %d attempts, %d substitutions (%d requiring new space), + ;; %d successes. + + ;; Processing block from %d to %d, %d sets. + APCS reentrant code not supported. IgnoredASSIGN to variable that is too smallASSIGN'ed label cannot fit into `%A' at %0 -- using wider siblingASSIGNed FORMAT specifier is too smallASSIGNed GOTO target variable is too smallAccess specifier at %0 must immediately follow derived-type statement at %1 with no intervening statementsAccess specifier or PRIVATE statement at %0 invalid for derived-type definition within other than the specification part of a moduleAdd a directory for INCLUDE searchingAdd directory to class pathAdd extra commentry to assembler outputAdditional debug printsAlign all labelsAlign all loops to 32 byte boundaryAlign code and data to 32 bitsAlign code to 8 byte boundaryAlign destination of the string operationsAlign doubles on word boundaryAlign labels which are only reached by jumpingAlign some doubles on dword boundaryAlign the start of functionsAlign the start of loopsAlign to >word boundariesAlign to the base type of the bit-fieldAlign variables on a 16-bit boundaryAlign variables on a 32-bit boundaryAllow $ in symbol namesAllow INTEGER and LOGICAL interchangeabilityAllow REAL(Z) and AIMAG(Z) given DOUBLE COMPLEX ZAllow RTL generation to emit invalid 3 operand insnsAllow different types as args of ? operatorAllow function addresses to be held in registersAllow math optimizations that may violate IEEE or ANSI standardsAllow ordinary copying of ASSIGN'ed varsAllow speculative motion of more loadsAllow speculative motion of non-loadsAllow speculative motion of some loadsAllow the use of $ inside identifiersAllow unsigned interation counts for RPTB/DBAlternate calling conventionAlternate return specifier at %0 invalid within a functionAlternate return specifier at %0 invalid within a main program unitAlternative calling conventionAlways check for non gcj generated classes archivesAlways pass floating-point arguments in memoryAlways treat bit-field as int-sizedAmbiguous use of intrinsic `%A' at %0 [info -f g77 M CMPAMBIG]Argument #%B of `%A' is %C at %0 but is %D at %1 [info -f g77 M GLOBALS]Array `%A' at %0 is too large to handleArray element value at %0 out of defined rangeArray or substring specification for `%A' out of range in EQUIVALENCE statementArray or substring specification for `%A' out of range in statement at %0Array reference to scalar variable `%A' in EQUIVALENCE statementArray subscript #%B out of range for EQUIVALENCE of `%A'Array subscript #%B out of range for initialization of `%A' in statement at %0Array supplied at %1 for dummy argument `%A' in statement function reference at %0Assume GASAssume all doubles are alignedAssume arguments do not alias each other or globalsAssume arguments may alias globals but not each otherAssume big endian bytes, little endian wordsAssume int to be 8 bit integerAssume native functions are implemented using JNIAssume normal C execution environmentAssume possible double misalignmentAssume small address spaceAssume strict aliasing rules applyAssume target CPU is configured as big endianAssume target CPU is configured as little endianAssume that pointers may be aliasedAssume that pointers not aliasedAssume that standard libraries & main might not existAssume that unaligned accesses are handled by the systemAssuming that all execution counts are zero. + At %0, '!' and '/*' are not valid comment delimitersAt %0, INCLUDE file %A exists, but is not readableAt %0, INCLUDE nesting too deepAt %0, specify ASSIGNMENT instead of OPERATOR for INTERFACE statement specifying the assignment operator (=)At %0, specify OPERATOR instead of ASSIGNMENT for INTERFACE statement not specifying the assignment operator (=)At top level:Attempt to EQUIVALENCE common areas `%A' and `%B' at %0Attempt to delete prologue/epilogue insn:Attempt to extend COMMON area beyond its starting point via EQUIVALENCE of `%A'Attempt to fill delay slots of branch instructionsAttempt to keep stack aligned to this power of 2Attempt to merge identical constants accross compilation unitsAttempt to merge identical constants and constant variablesAttempt to raise constant zero to a power at %0Attempt to specify second initial value for `%A' at %0Attempt to specify second initial value for element of `%A' at %0Attempt to support traditional K&R style CAuto pre/post decrement increment allowedAuto pre/post decrement increment not allowedAutomatically align branch targets to reduce branch penaltiesBLOCK DATA name at %0 superfluous, no name specified at %1Backslashes in character/hollerith constants not special (C-style)Big memory modelBlank common initialized at %0Branches are this expensive (1-5, arbitrary units)Bypass data cache for volatile mem refsC++ style comments are not allowed in ISO C89Can't find default package `%s'. Check the CLASSPATH environment variable and the access to the archivesCan't place `%A' as directed by EQUIVALENCE due to alignment restrictionsCan't specify array dimension in a declarationCannot decompose address.Cannot specify =initialization-expr at %0 unless `::' appears before list of objectsChange only the low 8 bits of the stack pointerChange the branch costs within the compilerChange the stack pointer without disabling interruptsChange the threshold for conversion to conditional executionChange when template instances are emittedCharacter `%A' (for example) is lower-case in symbol name at %0Character `%A' (for example) is upper-case in symbol name at %0Character `%A' not followed at some point by lower-case character in symbol name at %0Character constant at %0 has no closing apostrophe at %1Check for syntax errors, then stopCheck the return value of newChoose class whose main method should be usedChoose input encoding (default comes from locale)Class or interface declaration expectedCode size: small, medium or largeCommon block `%A' is %B %D in length at %0 but %C %E at %1Common block `%A' is SAVEd, explicitly or implicitly, at %0 but not SAVEd at %1Compile as if program written in lowercaseCompile as if program written in uppercaseCompile for 32-bit pointersCompile for 64-bit pointersCompile for ETRAX 100 (CRIS v8)Compile for ETRAX 4 (CRIS v3)Compile for a 68HC11Compile for a 68HC12Compile for the MMU-less Etrax 100-based elinux systemCompile for the Thumb not the ARMCompile for the v850 processorCompile for v8plus ABICompile just for ISO C89Compile pointers as triples: value, base & endCompile with 16-bit integer modeCompile with 32-bit integer modeConfigured with: %s + Conflicting I/O control specifications at %0 and %1Consider access to byte sized memory slowConsider all mem refs through pointers as volatileConsider all mem refs to global data to be volatileConsider all mem refs to static data to be volatileConsider type `int' to be 16 bits wideConsider type `int' to be 32 bits wideConstantValue attribute of field '%s' has wrong typeConstruct name at %0 does not match construct name for any containing DO constructsConstruct name at %0 not the same as construct name at %1Construct name at %0 superfluous, no construct name specified at %1Constructor invocation must be first thing in a constructorContinuation indicator at %0 must appear in column 6 [info -f g77 M LEX]Control the IEEE trap modeControl the generated fp rounding modeControl the precision given to fp exceptionsConvert floating point constant to single precision constantCopy memory address constants into regs before usingCopy memory operands into registers before usingCopyright (C) 2001 Free Software Foundation, Inc. + Copyright (C) 2002 Free Software Foundation, Inc. + Could not open basic block file %s. + Could not open data file %s. + Could not open output file %s. + Could not open program flow graph file %s. + Could not open source file %s. + Create GUI applicationCreate console applicationCreate data files needed by gcovCreating %s. + DO-statement reference to label at %0 and label definition at %2 separated by unterminated block starting at %1DO-statement reference to label at %1 follows its definition at %0DO-statement references to label at %0 and %2 separated by unterminated block starting at %1DW_LOC_OP %s not implemented + Debug argument support in compilerDebug memory address support in compilerDebug stack support in compilerDefer popping functions args from stack until laterDelete MIL-STD 1753 intrinsicsDelete libU77 intrinsicsDelete libU77 intrinsics with bad interfacesDelete non-FORTRAN-77 intrinsics F90 supportsDelete non-FORTRAN-77 intrinsics VXT FORTRAN supportsDelete non-FORTRAN-77 intrinsics f2c supportsDelete non-FORTRAN-77 intrinsics g77 supportsDelete useless null pointer checksDetermine language standardDirectory where class files should be writtenDisable Dwarf 2 line debug info via GNU asDisable MIL-STD 1753 intrinsicsDisable MPY||ADD and MPY||SUB instructionsDisable Transmeta picoJava extensionsDisable assignability checks for stores into object arraysDisable automatic array bounds checkingDisable debuggingDisable fatal diagnostics about inter-procedural problemsDisable fused multiply/add and multiply/subtract FP instructionsDisable libU77 intrinsicsDisable libU77 intrinsics with bad interfacesDisable new features under developmentDisable non-FORTRAN 77 intrinsics F90 supportsDisable non-FORTRAN-77 intrinsics F90 supportsDisable non-FORTRAN-77 intrinsics VXT FORTRAN supportsDisable non-FORTRAN-77 intrinsics f2c supportsDisable optional diagnosticsDisable parallel instructionsDisable reorganization passDisable the appending of underscores to externalsDisable use of DB instructionDisable use of RTPB instructionDisable use of RTPS instructionDisable use of conditional move instructionsDisable use of sdata/scommon/sbssDisable warnings about inter-procedural problemsDisallow all ugly featuresDisallow unsigned iteration counts for RPTB/DBDiscard unused virtual functionsDisplay compile time statisticsDisplay statistics accumulated during compilationDivision by 0 (zero) at %0 (IEEE not yet supported)Do no generate code for a 68851Do not align code to 8 byte boundaryDo not align destination of the string operationsDo not allocate BK registerDo not allow bit-fields to cross word boundariesDo not arbitary sized immediates in bit operationsDo not assume GASDo not automatically align branch targetsDo not compile for v8plus ABIDo not emit addressing modes with side-effect assignmentDo not emit complex integer constants to read-only memoryDo not emit function prologue or epilogueDo not emit stack checking codeDo not enable linker relaxationDo not generate .size directivesDo not generate H8/300H codeDo not generate H8/S codeDo not generate H8/S2600 codeDo not generate byte writesDo not generate char instructionsDo not generate code for a Sun FPADo not generate code to check exception specificationsDo not generate code which uses the FPUDo not generate load/store multiple instructionsDo not generate load/store with update instructionsDo not generate multm instructionsDo not generate run time type descriptor informationDo not generate sin, cos, sqrt for FPUDo not generate string instructions for block movesDo not generate tablejump insnsDo not inline all known string operationsDo not inline member functions by defaultDo not layout types like Intel's v1.3 gccDo not load the PIC register in function prologuesDo not make adjacent short instructions parallelDo not move instructions into a function's prologueDo not obey access control semanticsDo not optimize tail call instructions in assembler or linkerDo not pass -assert pure-text to linkerDo not perform tail call optimizationDo not permit unaligned accessesDo not promote floats to double if using -traditionalDo not provide a default start-address 0x100 of the programDo not put uninitialized globals in the common sectionDo not recognize GNU defined keywordsDo not recognize any built in functionsDo not recognize the 'asm' keywordDo not return values of functions in FPU registersDo not serialize volatile memory references with MEMW instructionsDo not store floats in registersDo not store locals in arg registersDo not support 3DNow! built-in functionsDo not support MMX and SSE built-in functions and code generationDo not support MMX built-in functionsDo not support MMX, SSE and SSE2 built-in functions and code generationDo not suppress warnings from system headersDo not tune code and read-only data alignmentDo not tune stack alignmentDo not tune writable data alignmentDo not use ABI reserved registersDo not use IEEE math for fp comparisonsDo not use MPYI instruction for C3xDo not use POWER instruction setDo not use POWER2 instruction setDo not use PowerPC instruction setDo not use Sky linkage conventionDo not use VAX fpDo not use addresses that allocate global registersDo not use alternate leaf function entriesDo not use bit-field instructionsDo not use complex addressing modesDo not use condition codes from normal instructionsDo not use direct addressing mode for soft registersDo not use flat register window modelDo not use fp registersDo not use hardware floating pointDo not use hardware fpDo not use hardware quad fp instructionsDo not use multiply-accumulate fp instructionsDo not use push instructions to save outgoing argumentsDo not use red-zone in the x86-64 codeDo not use register sbDo not use registers for argument passingDo not use stack biasDo not use structs on stronger alignment for double-word copiesDo not use the Xtensa MAC16 optionDo not use the Xtensa MIN/MAX optionDo not use the Xtensa MUL16 optionDo not use the Xtensa MUL32 optionDo not use the Xtensa NSA optionDo not use the Xtensa SEXT optionDo not use the Xtensa boolean register optionDo not use the Xtensa code density optionDo not use the Xtensa floating-point unitDo not use the bit-field instructionsDo not use the divide instructionDo not use unaligned memory referencesDo not utilize Visual Instruction SetDo not warn about using 'long long' when -pedanticDo not warn if inherited methods are unimplementedDo not work around hardware multiply bugDo not work around storem hardware bugDo symbol renaming for BSDDo symbol renaming for X/OPENDo the full regmove optimization passDo the register copy-propagation optimization passDo the register renaming optimization passDon't align items in code or dataDon't align to the base type of the bit-fieldDon't always pass floating-point arguments in memoryDon't announce deprecation of compiler featuresDon't assume that unaligned accesses are handled by the systemDon't call any cache flush functionsDon't do symbol renamingDon't emit stop bits before and after volatile extended asmsDon't force constants into registersDon't generate code for a bit-manipulation unitDon't generate code for near callsDon't generate code for near jumpsDon't generate fused multiply/add instructionsDon't let reg. allocator use ybase registersDon't optimize block movesDon't optimize lui/addiu address loadsDon't output compiler statisticsDon't pass parameters in registersDon't pedwarn about uses of Microsoft extensionsDon't place floating point constants in TOCDon't place symbol+offset constants in TOCDon't print additional debug printsDon't produce code relocatable at runtimeDon't push arg count, depend on symbol tableDon't put uninitialized constants in ROMDon't save DP across ISR in small memory modelDon't schedule the start and end of the procedureDon't set Windows definesDon't set backchain (faster, but debug harderDon't trap on integer divide by zeroDon't trap on integer divide overflowDon't use AltiVec instructionsDon't use EABIDon't use GP relative sdata/sbss sectionsDon't use Irix PICDon't use MIPS16 instructionsDon't use OSF PICDon't use P-mnemonics for branchesDon't use PowerPC General Purpose group optional instructionsDon't use PowerPC Graphics group optional instructionsDon't use PowerPC-64 instruction setDon't use ROM instead of RAMDon't use alternate register namesDon't use brasDon't use data cache for volatile mem refsDon't use embedded PICDon't use hardware fpDon't use indirect callsDon't use mips-tfile asm postpassDon't use multiply accumulateDon't use single (32-bit) FP onlyDon't use symbolic register namesDon't warn about strftime formats yielding 2 digit yearsDon't warn about too many arguments to format functionsDon't warn when all ctors/dtors are privateDon't warn when non-templatized friend functions are declared within a templateDon't warn when type converting pointers to member functionsDon't work around early 4300 hardware bugDowngrade conformance errors to warningsDummy array dimensioned to (1) is assumed-sizeDump decls to a .decl fileDump the entire translation unit to a fileDuplicate or overlapping case values/ranges at %0 and %1END statement at %0 missing `%A' keyword required for internal or module procedure(s) bounded by %1ERROR: too many basic blocks in .bb file %s + Emit 16-bit relocations to the small data areasEmit 32-bit relocations to the small data areasEmit ELF object codeEmit IEEE-conformant code, with inexact exceptionsEmit IEEE-conformant code, without inexact exceptionsEmit ROSE object codeEmit call graph informationEmit code compatible with TI toolsEmit code for Itanium (TM) processor B stepEmit code for the byte/word ISA extensionEmit code for the counting ISA extensionEmit code for the fp move and sqrt ISA extensionEmit code for the motion video ISA extensionEmit code to use GAS extensionsEmit code using explicit relocation directivesEmit common-like symbols as weak symbolsEmit cross referencing informationEmit half-PIC codeEmit identifying info in .s fileEmit special debugging information for COMMON and EQUIVALENCE (disabled)Emit stack checking codeEmit static const variables even if they are not usedEmit stop bits before and after volatile extended asmsEmit verbose debug information in assembly codeEnable Dwarf 2 line debug info via GNU asEnable MPY||ADD and MPY||SUB instructionsEnable SSA conditional constant propagationEnable SSA optimizationsEnable Transmeta picoJava extensionsEnable aggressive SSA dead code eliminationEnable automatic template instantiationEnable backend debuggingEnable compatibility with iC960 v2.0Enable compatibility with iC960 v3.0Enable compatibility with ic960 assemblerEnable debug outputEnable debuggingEnable exception handlingEnable fused multiply/add and multiply/subtract FP instructionsEnable linker relaxationEnable linker relaxationsEnable linker relaxingEnable machine specific peephole optimizationsEnable most warning messagesEnable new features under developmentEnable parallel instructionsEnable saving registers around function callsEnable scheduling across basic blocksEnable stack probingEnable support for huge objectsEnable use of DB instructionEnable use of RTPB instructionEnable use of RTPS instructionEnable use of conditional move instructionsEnable use of sdata/scommon/sbssEnables a register move optimizationEnables an rtl peephole pass run before sched2Enables guessing of branch probabilitiesEnd of search list. + End of source file before end of block started at %0Escape sequence at %0 out of range for characterExpected binary operator between expressions at %0 and at %1Explicit type declaration for intrinsic `%A' disagrees with invocation at %0Export functions even if they can be inlinedExpression at %0 has incorrect data type or rank for its contextExternal procedure `%A' is passed as actual argument at %0 but not explicitly declared EXTERNALExternal symbols have a leading underscoreExtraneous comma in FORMAT statement at %0Field expectedField names at %0 for outer structure definition -- specify them in a subsequent RECORD statement insteadFirst-column ampersand continuation at %0Floating-point operations can trapFor elinux, request a specified stack-size for this programFor intrinsics library: pass all parameters in registersForce RTL generation to emit valid 3 operand insnsForce all loop invariant computations out of loopsForce constants into registers to improve hoistingForce functions to be aligned to a 2 byte boundaryForce functions to be aligned to a 4 byte boundaryFortran 90 feature at %0 unsupportedFortran-specific form of -fbounds-checkFunction starts are aligned to this power of 2GCC does not yet properly implement `[*]' array declaratorsGCSE disabled: %d > 1000 basic blocks and %d >= 20 edges/basic blockGCSE disabled: %d basic blocks and %d registersGNU C does not support -C without using -EGNU CPP version %s (cpplib)Generate 29000 codeGenerate 29050 codeGenerate 32bit i386 codeGenerate 64bit x86-64 codeGenerate APCS conformant stack framesGenerate C header of platform specific featuresGenerate CA codeGenerate CF codeGenerate COFF format debug infoGenerate DWARF-1 format debug infoGenerate DWARF-2 debug infoGenerate ELF outputGenerate H8/300H codeGenerate H8/S codeGenerate H8/S2600 codeGenerate JA codeGenerate JD codeGenerate JF codeGenerate KA codeGenerate KB codeGenerate MC codeGenerate SA codeGenerate SB codeGenerate STABS format debug infoGenerate VMS format debug infoGenerate XCOFF format debug infoGenerate a call to abort if a noreturn function returnsGenerate big endian codeGenerate big endian dataGenerate call insns as indirect calls, if necessaryGenerate char instructionsGenerate code an embedded assembler can handleGenerate code assuming DW bit is not setGenerate code assuming DW bit is setGenerate code for C30 CPUGenerate code for C31 CPUGenerate code for C32 CPUGenerate code for C33 CPUGenerate code for C40 CPUGenerate code for C44 CPUGenerate code for GNU asGenerate code for GNU ldGenerate code for GNU runtime environmentGenerate code for Intel asGenerate code for Intel ldGenerate code for NeXT runtime environmentGenerate code for a 520XGenerate code for a 68000Generate code for a 68020Generate code for a 68030Generate code for a 68040Generate code for a 68040, without any new instructionsGenerate code for a 68060Generate code for a 68060, without any new instructionsGenerate code for a 68302Generate code for a 68332Generate code for a 68851Generate code for a 68881Generate code for a DLLGenerate code for a Sun FPAGenerate code for a Sun Sky boardGenerate code for a bit-manipulation unitGenerate code for a cpu32Generate code for an 11/10Generate code for an 11/40Generate code for an 11/45Generate code for big endianGenerate code for c1Generate code for c2Generate code for c32Generate code for c34Generate code for funcs even if they are fully inlinedGenerate code for given CPUGenerate code for high memoryGenerate code for little endianGenerate code for low memoryGenerate code for memory map1Generate code for memory map2Generate code for memory map3Generate code for memory map4Generate code for near callsGenerate code for near jumpsGenerate code for the C300Generate code for the C400Generate code for the M*Core M340Generate code for the specified chip or CPU versionGenerate code the unix assembler can handleGenerate code to check bounds before dereferencing pointers and arraysGenerate code to check subscript and substring boundsGenerate code using byte writesGenerate code which uses the FPUGenerate code with library calls for floating pointGenerate code without GP regGenerate debugging info in default extended formatGenerate debugging info in default formatGenerate divide results with reminder having the same sign as the divisor (not the dividend)Generate extended DWARF-1 format debug infoGenerate extended STABS format debug infoGenerate extended XCOFF format debug infoGenerate external legend informationGenerate floating point mathematics using given instruction setGenerate fused multiply/add instructionsGenerate inline division, optimize for latencyGenerate inline division, optimize for throughputGenerate little endian codeGenerate little endian dataGenerate load/store multiple instructionsGenerate load/store with update instructionsGenerate pc-relative codeGenerate position independent code, if possibleGenerate prefetch instructions, if available, for arrays in loopsGenerate re-entrant, PIC codeGenerate self-relocatable codeGenerate sin, cos, sqrt for FPUGenerate string instructions for block movesGenerate unwind tables exact at each instruction boundaryGlobal name `%A' at %0 has different type at %1 [info -f g77 M GLOBALS]Global name `%A' defined at %0 already defined at %1 [info -f g77 M GLOBALS]Global name `%A' is %B at %0 but is %C at %1 [info -f g77 M GLOBALS]Gratuitous parentheses surround implied-DO construct at %0Have front end emulate COMPLEX arithmetic to avoid bugsHex escape at %0 out of rangeHide MIL-STD 1753 intrinsicsHide libU77 intrinsicsHide libU77 intrinsics with bad interfacesHide non-FORTRAN 77 intrinsics F90 supportsHide non-FORTRAN-77 intrinsics F90 supportsHide non-FORTRAN-77 intrinsics VXT FORTRAN supportsHide non-FORTRAN-77 intrinsics f2c supportsHollerith and typeless constants not passed as argumentsHollerith constant at %0 specified %A more characters than are present as of %1I/O error on outputICE: emit_insn used where emit_jump_insn needed: + INCLUDE at %0 not the only statement on the source lineISO C does not allow extra `;' outside of a functionISO C does not permit named variadic macrosISO C does not permit use of `varargs.h'ISO C does not support `++' and `--' on complex typesISO C does not support `~' for complex conjugationISO C does not support complex integer typesISO C does not support plain `complex' meaning `double complex'ISO C doesn't support unnamed structs/unionsISO C forbids %s between function pointer and `void *'ISO C forbids `goto *expr;'ISO C forbids an empty source fileISO C forbids braced-groups within expressionsISO C forbids casting nonscalar to the same typeISO C forbids casts to union typeISO C forbids comparison of `void *' with function pointerISO C forbids conditional expr between `void *' and function pointerISO C forbids conditional expr with only one void sideISO C forbids const or volatile function typesISO C forbids data definition with no type or storage classISO C forbids empty initializer bracesISO C forbids forward parameter declarationsISO C forbids forward references to `enum' typesISO C forbids imaginary numeric constantsISO C forbids label declarationsISO C forbids member declarations with no membersISO C forbids nested functionsISO C forbids omitting the middle term of a ?: expressionISO C forbids ordered comparisons of pointers to functionsISO C forbids parameter `%s' shadowing typedefISO C forbids qualified function typesISO C forbids qualified void function return typeISO C forbids range expressions in switch statementsISO C forbids specifying range of elements to initializeISO C forbids subscripting `register' arrayISO C forbids taking the address of a labelISO C forbids the address of a cast expressionISO C forbids use of cast expressions as lvaluesISO C forbids use of compound expressions as lvaluesISO C forbids use of conditional expressions as lvaluesISO C forbids zero-size array `%s'ISO C prohibits argument conversion to union typeISO C requires a named argument before `...'ISO C requires whitespace after the macro nameISO C restricts enumerator values to range of `int'ISO C++ does not permit "%s" in #ifISO C++ does not permit `%T::%D' to be defined as `%T::%D'ISO C++ does not permit named return valuesISO C++ does not support `long long'ISO C++ forbids %s between pointer of type `void *' and pointer-to-functionISO C++ forbids %sing a pointer of type `%T'ISO C++ forbids %sing an enumISO C++ forbids aggregate initializer to newISO C++ forbids an empty condition for `%s'ISO C++ forbids applying `sizeof' to a function typeISO C++ forbids applying `sizeof' to a member functionISO C++ forbids applying `sizeof' to an expression of function typeISO C++ forbids applying `sizeof' to type `void' which is an incomplete typeISO C++ forbids array dimensions with parenthesized type in newISO C++ forbids assignment of arraysISO C++ forbids braced-groups within expressionsISO C++ forbids calling `::main' from within programISO C++ forbids cast to non-reference type used as lvalueISO C++ forbids casting between pointer-to-function and pointer-to-objectISO C++ forbids casting to an array type `%T'ISO C++ forbids comparison between pointer and integerISO C++ forbids compound literalsISO C++ forbids compound statements inside for initializationsISO C++ forbids computed gotosISO C++ forbids declaration of `%s' with no typeISO C++ forbids defining types within %sISO C++ forbids in-class initialization of non-const static member `%D'ISO C++ forbids initialization in array newISO C++ forbids initialization of member `%D'ISO C++ forbids initialization of member constant `%D' of non-integral type `%T'ISO C++ forbids initialization of new expression with `='ISO C++ forbids label declarationsISO C++ forbids member `%D' with same name as enclosing classISO C++ forbids nested type `%D' with same name as enclosing classISO C++ forbids non-constant aggregate initializer expressionsISO C++ forbids omitting the middle term of a ?: expressionISO C++ forbids range expressions in switch statementsISO C++ forbids static data member `%D' with same name as enclosing classISO C++ forbids subscripting non-lvalue arrayISO C++ forbids taking address of function `::main'ISO C++ forbids taking the address of a bound member function to form a pointer to member function. Say `&%T::%D'ISO C++ forbids taking the address of a cast to a non-lvalue expressionISO C++ forbids taking the address of a labelISO C++ forbids taking the address of an unqualified non-static member function to form a pointer to member function. Say `&%T::%D'ISO C++ forbids the use of `%s' on explicit instantiationsISO C++ forbids the use of `extern' on explicit instantiationsISO C++ forbids use of initializer list to initialize reference `%D'ISO C++ forbids using pointer of type `void *' in subtractionISO C++ forbids using pointer to a function in subtractionISO C++ forbids using pointer to a member in subtractionISO C++ forbids using pointer to a method in subtractionISO C++ forbids variable-size arrayISO C++ forbids variable-size array `%D'ISO C++ forbids zero-size arrayISO C++ forbids zero-size array `%D'ISO C++ prohibits anonymous structsISO C++ prohibits conversion from `%#T' to `(...)'ISO C++ prohibits overloading operator ?:ISO C89 does not support `[*]' array declaratorsISO C89 does not support `long long'ISO C89 does not support `static' or type qualifiers in parameter array declaratorsISO C89 does not support complex typesISO C89 does not support flexible array membersISO C89 forbids array `%s' whose size can't be evaluatedISO C89 forbids compound literalsISO C89 forbids long long integer constantsISO C89 forbids mixed declarations and codeISO C89 forbids specifying subobject to initializeISO C89 forbids subscripting non-lvalue arrayISO C89 forbids variable-size array `%s'ISO C99 requires rest arguments to be usedISR %s requires %d words of local vars, max is 32767Identifier expectedIgnore dllimport attribute for functionsIgnore dllimport for functionsImplement vtables using thunksImplicit declaration of `%A' at %0Implied do-loop iteration count of 0 (zero) for iteration variable `%A' in statement at %0Implied do-loop step count of 0 (zero) for iteration variable `%A' in statement at %0In %s `%s':In %s: overlapped variable and exception ranges at %dIn anythingIn block-data unitIn common blockIn constructIn entityIn file included from %s:%dIn file included from %s:%uIn functionIn function `%s':In member function `%s':In namelistIn programIn statement functionIn subroutineIn unknown kindIndicate the number of soft registers availableInitial character `%A' is lower-case in symbol name at %0Initialization via DATA and PARAMETER is type-compatibleInitialize local vars and arrays to zeroInline all known string operationsInline constants if it can be done in 2 insns or lessInline constants if it only takes 1 instructionInsert arc based program profiling codeInsert stack checking code into the programInstrument function entry/exit with profiling callsInteger at %0 too largeIntegrate simple functions into their callersInternal compiler error -- cannot perform operationInternal compiler error in %s, at %s:%dInternal compiler error: Error reporting routines re-entered. + Internal error: %s (program %s) + Please submit a full bug report. + See %s for instructions.Internal gcov abort. + Internally convert most source to uppercaseInternally preserve source caseIntersperse literal pools with code in the text sectionIntrinsic `%A' is passed as actual argument at %0 but not explicitly declared INTRINSICIntrinsic `%A' referenced %Bly at %0, %Cly at %1 [info -f g77 M EXPIMP]Intrinsic `%A', invoked at %0, known to be non-Y2K-compliant [info -f g77 M Y2KBAD]Intrinsics in uppercaseIntrinsics letters in arbitrary casesIntrinsics spelled as e.g. SqRtInvalid control expressionInvalid declarationInvalid declaration of or reference to symbol `%A' at %0 [initially seen at %1]Invalid exponent at %0 for real constant at %1; nondigit `%A' in exponent fieldInvalid expression statementInvalid first character at %0 [info -f g77 M LEX]Invalid init statementInvalid interface typeInvalid method declaration, method name requiredInvalid method declaration, return type requiredInvalid reference typeInvalid token at %0 in expression or subexpression at %1Invalid type expressionInvalid update expressionInvalid use at %0 of substring operator on %1Items in I/O list starting at %0 invalid for namelist-directed I/OJava method '%D' has non-Java parameter type `%T'Java method '%D' has non-Java return type `%T'Jump targets are aligned to this power of 2Junk after end of expression.Just generate unwind tables for exception handlingL%d cache latency unknown for %sLabel %A already defined at %1 when redefined at %0Label at %0 invalid with continuation line indicator at %1 [info -f g77 M LEX]Label definition %A at %0 on empty statement (as of %1)Label definition at %0 invalid on this kind of statementLabel definition missing at %0 for DO construct specifying label at %1Label number at %0 not in range 1-99999Language keyword letters in arbitrary casesLanguage keywords in uppercaseLanguage keywords spelled as e.g. IOStatLayout types like Intel's v1.3 gccLine too long as of %0 [info -f g77 M LEX]Link programs/data to be in external memory by defaultLink programs/data to be in onchip memory by defaultLink to emit program in ELF format (rather than mmo)Link with libads.a, libc.a and crt0.oLink with libmvme.a, libc.a and crt0.oLink with libsim.a, libc.a and sim-crt0.oLink with libyk.a, libc.a and crt0.oLocal adjustable symbol `%A' at %0Loop code aligned to this power of 2MCU `%s' not supportedMIPS ECOFF format does not allow changing filenames within functions with #lineMMIX Internal: %s is not a shiftable intMMIX Internal: Bad register: %dMMIX Internal: Bad value for 'm', not a CONST_INTMMIX Internal: Cannot decode this operandMMIX Internal: Expected a CONST_INT, not thisMMIX Internal: Expected a constant, not thisMMIX Internal: Expected a register, not thisMMIX Internal: Last named vararg would not fit in a registerMMIX Internal: Missing `%c' case in mmix_print_operandMMIX Internal: This is not a constant:MMIX Internal: This is not a recognized addressMMIX Internal: Trying to output invalidly reversed condition:MMIX Internal: What is the CC of this?MMIX Internal: What's the CC of this?MODULE PROCEDURE statement at %0 disallowed because INTERFACE at %1 specifies no generic name, operator, or assignmentMake 'char' be signed by defaultMake 'char' be unsigned by defaultMake adjacent short instructions parallel if possibleMake bit-fields by unsigned by defaultMake integers 32 bits wideMake prefix-radix non-decimal constants be typelessMake string literals `char[]' instead of `const char[]'Mark data as shared rather than privateMark strings as 'const char *'Maximum amount for a single stack increment operationMismatched EQUIVALENCE requirements for placement of `%A' at both %C and %D bytes offset from `%B'Missing %A specifier in statement at %0Missing class nameMissing class type termMissing close parenthese at %0 needed to match open parenthese at %1Missing close-parenthese(s) in FORMAT statement at %0Missing close-period between `.%A' at %0 and %1Missing colon as of %0 in substring reference for %1Missing comma in FORMAT statement at %0Missing field name(s) for structure definition at %0 within structure definition at %1Missing first operand for binary operator at %0Missing formal parameter termMissing identifierMissing interface nameMissing nameMissing number following `E' in FORMAT statement at %0Missing number following period in FORMAT statement at %0Missing operand for operator at %1 at end of expression at %0Missing or invalid constant expressionMissing structure name for outer structure definition at %0Missing super class nameMissing termMissing term and ')' expectedMissing term and ']' expectedMissing term or ')'Missing term or ')' expectedMissing value at %1 for real-number exponent at %0Missing variable initializerMixed CHARACTER and non-CHARACTER types via COMMON/EQUIVALENCE -- for example, `%A' and `%B'Multiple include guards may be useful for: + NAMELIST not adequately supported by run-time library for source files with case preservedNOTE_INSN_BASIC_BLOCK %d in middle of basic block %dNOTE_INSN_BASIC_BLOCK is missing for block %dNULL used in arithmeticNested %% construct (%%VAL, %%REF, or %%DESCR) at %0Never append a second underscore to externalsNever optimize static class initialization codeNo "Small register classes" kludgeNo UNIT= specifier in I/O control list at %0No branches in file %s + No branches in function %s + No calls in file %s + No calls in function %s + No case for %sNo components specified as of %0 for derived-type definition beginning at %1No components specified as of %0 for map beginning at %1No components specified as of %0 for structure definition beginning at %1No default crt0.oNo executable code associated with file %s. + No executable source lines in file %s + No executable source lines in function %s + No label definition for FORMAT statement at %0No specification for implied-DO iterator `%A' at %0Non-ISO-C-standard escape sequence `\%A' at %0Non-numeric character at %0 in label field [info -f g77 M LEX]Not an integer constant expression in implied do-loop in statement at %0Null argument at %0 for procedure invocation at %1Null argument at %0 for statement function reference at %1Null character at %0 -- line ignoredNull element at %0 for array reference at %1Number of registers used to pass integer argumentsOmit the frame pointer in leaf functionsOnly constructors can invoke constructorsOnly emit explicit instatiations of inline templatesOnly emit explicit template instatiationsOnly issue one instruction per cycleOnly preserve 32 bits of FP reg across callOperator at %0 has lower precedence than that at %1 -- use parenthesesOptimize block movesOptimize for 32032Optimize for 32332 cpuOptimize for 32532 cpuOptimize for 3900Optimize for 4650Optimize for Cypress processorsOptimize for F930 processorsOptimize for F934 processorsOptimize for SparcLite processorsOptimize for SuperSparc processorsOptimize lui/addiu address loadsOptimize sibling and tail recursive callsOptimize tail call instructions in assembler and linkerOptions: + Ouput extra code for initialized dataOutput GNU ld formatted global initializersOutput compiler statisticsOutput extra debug info in Luxworks environmentOutput instruction sizes to the asm fileOutside of any program unit: + Override -mbest-lib-optionsOverride the underlying type for wchar_t to `unsigned short'PIC code generation is not compatible with fast indirect calls + PIC code generation is not supported in the portable runtime model + PIC register isn't set upPRINT_OPERAND null pointerPRINT_OPERAND: unknown punctuation '%c'PRINT_OPERAND_ADDRESS, null pointerPUBLIC or PRIVATE statement at %1 cannot be specified along with PUBLIC or PRIVATE statement at %0Pack structure members together without holesPass -assert pure-text to linkerPass FP arguments in FP registersPass all arguments on stackPass arguments in registersPass arguments on the stackPass parameters in registers (default)Pass some arguments in registersPay attention to the 'inline' keywordPerform DWARF2 duplicate eliminationPerform a number of minor, expensive optimizationsPerform enhanced load motion during global subexpression eliminationPerform jump threading optimizationsPerform loop unrolling for all loopsPerform loop unrolling when iteration count is knownPerform store motion after global subexpression eliminationPerform strength reduction optimizationsPerform tail call optimizationPerform the global common subexpression eliminationPeriod at %0 not followed by digits for floating-point number or by `NOT.', `TRUE.', or `FALSE.'Permit unaligned accessesPlace arg count in a nop instruction (faster than push)Place floating point constants in TOCPlace symbol+offset constants in TOCPlace variable addresses in the regular TOCPlease keep this in mind before you report bugs.Please submit a full bug report, + with preprocessed source if appropriate. + See %s for instructions. + Pointers are 32-bitPointers are 64-bitPrefer branches over conditional executionPrefer word accesses over byte accessesPrepend global symbols with ":" (for use with PREFIX)Preserve all 40 bits of FP reg across callPreserve all spelling (case) used in programPretend that host and target use the same FP formatPrint code coverage information. + + Print g77-specific compiler version info, run internal testsPrint internal debugging-related infoPrint names of program units as they are compiledProcess #ident directivesProcessing spec %c%s%c, which is '%s' + Produce big endian codeProduce code relocatable at runtimeProduce little endian codeProfiling is not supported on this target.Profiling uses mcountProgram does not use Unix-f77 dialectal featuresProgram is written in Fortran-90-ish dialectProgram is written in Fortran-90-ish free formProgram is written in VXT (Digital-like) FORTRANProgram is written in typical FORTRAN 66 dialectProgram is written in typical Unix f77 dialectProgram name at %0 superfluous, no PROGRAM statement specified at %1Program unit name at %0 not the same as name at %1Program written in lowercaseProgram written in strict mixed-caseProgram written in uppercaseProhibit PC relative function callsPut everything in the regular TOCPut literal pools in a separate literal sectionPut uninitialized constants in ROM (needs -membedded-data)RETURN statement at %0 invalid within a main program unitRETURN_ADDRESS_OFFSET not supportedRTL check: access of elt %d of `%s' with last elt %d in %s, at %s:%dRTL check: access of elt %d of vector with last elt %d in %s, at %s:%dRTL check: expected code `%s' or `%s', have `%s' in %s, at %s:%dRTL check: expected code `%s', have `%s' in %s, at %s:%dRTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s) in %s, at %s:%dRTL check: expected elt %d type '%c', have '%c' (rtx %s) in %s, at %s:%dRange specification at %0 invalid for CASE statement within logical-type SELECT CASE statementReading specs from %s + Recognize and/bitand/bitor/compl/not/or/xorReduce size of object filesReference to generic intrinsic `%A' at %0 could be to form %B or %CReference to label at %1 inconsistent with earlier reference at %0Reference to label at %1 inconsistent with its definition at %0Reference to label at %1 is outside block containing definition at %0Register sb is zero. Use for absolute addressingReorder basic blocks to improve code placementReplace add,compare,branch with branch on count regReplace system pathReport on permanent memory allocation at end of runReport time taken by each compiler pass at end of runRequest IEEE-conformant math library routines (OSF/1)Reschedule instructions after register allocationReschedule instructions before register allocationRetain legend informationRetain standard MXDB informationReturn 'short' aggregates in memory, not registersReturn 'short' aggregates in registersReturn all structures in memory (AIX default)Return floating point results in ac0Return floating point results in memoryReturn small structures in registers (SVR4 default)Return value `%A' for FUNCTION at %0 not referenced in subprogramReturn values of functions in FPU registersReuse r30 on a per function basisRun CSE pass after loop optimizationsRun the loop optimizer twiceSAVE statement or attribute at %1 cannot be specified along with SAVE statement or attribute at %0SELECT CASE on CHARACTER type (at %0) not supported -- sorrySSE instruction set disabled, using 387 arithmeticsSame as: -mep -mprolog-functionSame name `%A' used for %B at %0 and %C at %1 [info -f g77 M INTGLOB]Save DP across ISR in small memory modelSave temp. files in Luxworks environmentSchedule code for given CPUSchedule given CPUScope of for-init-statement vars extends outsideSecond occurrence of CASE DEFAULT at %0 within SELECT CASE at %1Second occurrence of ELSE WHERE at %0 within WHERE at %1Select ABI calling conventionSelect CPU to generate code forSelect method for sdata handlingSemicolon at %0 is an invalid tokenSerialize volatile memory references with MEMW instructionsSet Windows definesSet backchainSet class pathSet class path (deprecated: use --classpath instead)Set errno after built-in math functionsSet maximum alignment to 4Set maximum alignment to 8Set start-address of dataSet start-address of the programSet the PPC_EMB bit in the ELF flags headerSet the max size of data eligible for the SDA areaSet the max size of data eligible for the TDA areaSet the max size of data eligible for the ZDA areaSet the maximum line lengthSetting spec %s to '%s' + + Small data area: none, sdata, useSmall memory modelSpecification at %0 requires ADVANCE=`NO' specification in same I/O control listSpecification at %0 requires explicit FMT= specification in same I/O control listSpecify ABI to useSpecify CPU for code generation purposesSpecify CPU for scheduling purposesSpecify a Standard MIPS ISASpecify alternate name for bss sectionSpecify alternate name for constant sectionSpecify alternate name for data sectionSpecify alternate name for dsp16xx chipSpecify alternate name for text sectionSpecify cache flush functionSpecify maximum number of iterations for RPTSSpecify maximum template instantiation depthSpecify range of registers to make fixedSpecify size of long double (64 or 128 bits)Specify that arguments may alias each other & globalsSpecify the MCU nameSpecify the initial stack addressSpecify the minimum bit alignment of structuresSpecify the name of the class for constant stringsSpecify the name of the target CPUSpecify the name of the target architectureSpecify the register allocation orderSpecify the register to be used for PIC addressingSpecify the version of the floating point emulatorSpurious number in FORMAT statement at %0Spurious sign in FORMAT statement at %0Spurious text trailing number in FORMAT statement at %0Spurious trailing comma preceding terminator at %0Statement at %0 follows ELSE block for IF construct at %1Statement at %0 invalid in BLOCK DATA program unit at %1Statement at %0 invalid in context established by statement at %1Statement at %0 invalid in this contextStatement at %0 must specify construct name specified at %1Statement function `%A' defined at %0 is not usedStore function names in object codeStore locals in argument registersStore strings in writable data sectionStrength reduce all loop general induction variablesSubstring begin/end point at %0 out of defined rangeSubstring of non-CHARACTER entity `%A' in EQUIVALENCE statementSupport 3DNow! built-in functionsSupport Green Hills ABISupport MMX and SSE built-in functions and code generationSupport MMX built-in functionsSupport MMX, SSE and SSE2 built-in functions and code generationSupport calls between Thumb and ARM instruction setsSupport message passing with the Parallel EnvironmentSupport synchronous non-call exceptionsSuppress output of instruction numbers and line number notes in debugging dumpsSwitches: + -include Include the contents of before other files + -imacros Accept definition of macros in + -iprefix Specify as a prefix for next two options + -iwithprefix Add to the end of the system include path + -iwithprefixbefore Add to the end of the main include path + -isystem Add to the start of the system include path + Symbol names in lowercaseSymbol names in uppercaseSymbol names spelled in mixed caseSymbols have a leading underscoreTake at least one trip through each iterative DO loopTarget does not have split I&DTarget has split I&DTarget machine does not support DOUBLE COMPLEX, specified at %0Target machine does not support complex entity of kind specified at %0Target the AM33 processorThe -march option is incompatible to -mipsN and therefore ignored.The MMU will trap on unaligned accessesThe maximum amount of memory to be allocated by GCSEThe maximum length of scheduling's pending operations listThe maximum number of instructions in a function that is eligible for inliningThe maximum number of instructions to consider to fill a delay slotThe maximum number of instructions to consider to find accurate live register informationThe maximum number of passes to make when doing GCSEThe meaning of `\a' (at %0) varies with -traditionalThe meaning of `\x' (at %0) varies with -traditionalThis is free software; see the source for copying conditions. There is NO + warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + Thread model: %s + Thumb: Assume function pointers may go to non-Thumb aware codeThumb: Assume non-static functions may be called from ARM codeThumb: Generate (leaf) stack frames even if not neededThumb: Generate (non-leaf) stack frames even if not neededTogether with -fpic and -fPIC, do not use GOTPLT referencesToo %B arguments for `%A' at %0 versus invocation at %1 [info -f g77 M GLOBALS]Too %B arguments passed to `%A' at %0 versus definition at %1 [info -f g77 M GLOBALS]Too few elements (%A missing) as of %0 for array reference at %1Too few elements in reference to array `%A' in EQUIVALENCE statementToo few initial values in list of initializers for `%A' at %0Too many elements as of %0 for array reference at %1Too many elements in reference to array `%A' in EQUIVALENCE statementToo many initial values in list of initializers starting at %0Total size of local variables exceeds architecture limit.Trailing comma in procedure call denotes null argumentTrap for signed overflow in addition / subtraction / multiplicationTrap on integer divide by zeroTrap on integer divide overflowTreat all warnings as errorsTreat initial values of 0 like non-zero valuesTreat local vars and COMMON blocks as if they were named in SAVE statementsTruncating characters on right side of character constant at %0Truncating characters on right side of hollerith constant at %0Truncating non-zero data on left side of numeric constant at %0Truncating non-zero data on left side of typeless constant at %0Tune alignment for the specified chip or CPU versionTune expected memory latencyTurn on maintainer testing codeTwo arithmetic operators in a row at %0 and %1 -- use parenthesesType and/or kind-type parameter disagreement between CASE value or value within range at %0 and SELECT CASE at %1Type disagreement between expressions at %0 and %1Type name at %0 not the same as name at %1Typeless constant at %0 too largeUNKNOWN in print_operand !?UNKNOWN in s390_output_symbolic_const !?Unable to open INCLUDE file `%A' at %0Unbalanced ']'Undefined label, first referenced at %0Unexpected EOF while reading source file %s. + Uninitialized locals in .bssUninitialized locals in .dataUnknown escape sequence `\%A' at %0Unknown escape sequence `\' followed by char code 0x%A at %0Unknown switch -mlong-double-%sUnrecognized FORMAT specifier at %0Unrecognized character at %0 [info -f g77 M LEX]Unsupported FORMAT specifier at %0Unsupported VXT statement at %0Unsupported operand for ** at %1 -- converting to default INTEGERUnsupported; affects code-generation of arraysUnsupported; do not generate libf2c-calling codeUnterminated escape sequence `\' at %0Usage: %s [options] file... + Usage: gcov [OPTION]... SOURCEFILE + + Use .EQV./.NEQV. instead of .EQ./.NE. at %0 for LOGICAL operands at %1 and %2Use 128 bit long doublesUse 16 bit intUse 32 bit floatUse 32 bit intUse 32-bit ABIUse 32-bit FP registersUse 32-bit general registersUse 32-bit long typeUse 4 byte entries in switch tablesUse 64 bit floatUse 64 bit long doublesUse 64-bit ABIUse 64-bit FP registersUse 64-bit general registersUse 64-bit int typeUse 64-bit long typeUse 64-bit longsUse ABI reserved registersUse AltiVec instructionsUse Cygwin interfaceUse DEC assembler syntaxUse EABIUse GNU asUse GP relative sdata/sbss sectionsUse H8/300 alignment rulesUse IEEE math for fp comparisonsUse Irix PICUse MIPS asUse MPYI instruction for C3xUse Mingw-specific thread supportUse Mingw32 interfaceUse OSF PICUse P-mnemonics for branches statically predicted as takenUse POWER instruction setUse POWER2 instruction setUse PowerPC General Purpose group optional instructionsUse PowerPC Graphics group optional instructionsUse PowerPC instruction setUse PowerPC-64 instruction setUse ROM instead of RAMUse UNIX assembler syntaxUse V8 Sparc ISAUse VAX fpUse VAX-C alignmentUse __cxa_atexit to register destructorsUse addresses that allocate global registersUse alternate leaf function entriesUse alternate register namesUse bare Windows interfaceUse big-endian byte orderUse bit-field instructionsUse bras for execucable < 64kUse call-clobbered registers for parameters and return valueUse cc- and libc-compatible 32-bit longsUse complex addressing modesUse data cache for volatile mem refs (default)Use different calling convention using 'rtd'Use direct CALLn instructions for fast callsUse embedded PICUse epsilon-respecting floating point compare instructionsUse fast but approximate float to integer conversionUse features of and schedule code for given CPUUse features of and schedule given CPUUse flat register window modelUse fp registersUse given Sparc code modelUse given assembler dialectUse given x86-64 code modelUse hardware floating pointUse hardware floating point instructionsUse hardware fpUse hardware quad fp instructionsUse in/loc/out register namesUse indirect CALLXn instructions for large programsUse indirect callsUse kernel global registersUse large memory modelUse library calls to perform FP operationsUse little-endian byte orderUse little-endian byte order for dataUse mcount for profilingUse mcount_ptr for profilingUse mips-tfile asm postpassUse mips16 entry/exit psuedo opsUse multiply accumulateUse multiply-accumulate fp instructionsUse new mnemonics for PowerPC architectureUse normal calling conventionUse normal memory modelUse offset tables for virtual method callsUse old mnemonics for PowerPC architectureUse profiling information for branch probabilitiesUse push instructions to save outgoing argumentsUse red-zone in the x86-64 codeUse register stack for parameters and return valueUse registers for argument passingUse single (32-bit) FP onlyUse slow but accurate float to integer conversionUse small memory modelUse software floating pointUse stack biasUse standard calling sequence, with arg count wordUse structs on stronger alignment for double-word copiesUse stubs for function prologuesUse subroutines for function prologue/epilogueUse symbolic register namesUse the 26-bit version of the APCSUse the 32-bit version of the APCSUse the BK register as a general purpose registerUse the Cygwin interfaceUse the Mingw32 interfaceUse the Xtensa MAC16 optionUse the Xtensa MIN/MAX optionUse the Xtensa MUL16 optionUse the Xtensa MUL32 optionUse the Xtensa NSA optionUse the Xtensa SEXT optionUse the Xtensa boolean register optionUse the Xtensa code density optionUse the Xtensa floating-point unitUse the bit-field instructionsUse the most feature-enabling options allowed by other optionsUse the same size for double as for floatUse the smallest fitting integer to hold enumsUse unaligned memory referencesUse user global registersUse zero-extending memory loads, not sign-extending onesUsing built-in specs. + Utilize Visual Instruction SetVOIDmode on an outputVariable-expression FORMAT specifier at %0 -- unsupportedWarn about casting functions to incompatible typesWarn about casts which discard qualifiersWarn about code that will never be executedWarn about constructs whose meaning change in ISO CWarn about constructs with surprising meaningsWarn about enumerated switches missing a specific caseWarn about externs not at file scope levelWarn about function pointer arithmeticWarn about functions which might be candidates for attribute noreturnWarn about functions which might be candidates for format attributesWarn about global funcs without previous declarationsWarn about global funcs without prototypesWarn about implicit function declarationsWarn about inconsistent return typesWarn about multiple declarations of the same objectWarn about non virtual destructorsWarn about non-prototyped function declsWarn about non-string-literal format stringsWarn about overloaded virtual function namesWarn about pointer casts which increase alignmentWarn about possible missing parenthesesWarn about possible security problems with format functionsWarn about possible violations of sequence point rulesWarn about possibly confusing type conversionsWarn about possibly missing braces around initializersWarn about printf/scanf/strftime/strfmon format anomaliesWarn about returning structures, unions or arraysWarn about signed/unsigned comparisonsWarn about subscripts whose type is 'char'Warn about suspicious declarations of mainWarn about testing equality of floating point numbersWarn about the use of the #import directiveWarn about uninitialized automatic variablesWarn about unrecognized pragmasWarn about use of (only a few for now) Fortran extensionsWarn about use of multicharacter literalsWarn about uses of __attribute__((deprecated)) declarationsWarn about violations of Effective C++ style rulesWarn if .class files are out of dateWarn if a C style cast is used in a programWarn if a selector has multiple methodsWarn if deprecated empty statements are foundWarn if modifiers are specified when not necessaryWarn if nested comments are detectedWarn when a declaration does not specify a typeWarn when a function arg is a structureWarn when a function is declared extern, then inlineWarn when a function is unusedWarn when a function parameter is unusedWarn when a label is unusedWarn when a stackframe is larger than the specified sizeWarn when a variable is unusedWarn when an expression value is unusedWarn when an inlined function cannot be inlinedWarn when an optimization pass is disabledWarn when one local variable shadows anotherWarn when overload promotes from unsigned to signedWarn when padding is required to align struct membersWarn when synthesis behavior differs from CfrontWarn when the compiler reorders codeWarn when the packed attribute has no effect on struct layoutWarn when trigraphs are encounteredWhen possible do not generate stack framesWhen running CSE, follow conditional jumpsWhen running CSE, follow jumps to their targetsWork around early 4300 hardware bugWork around hardware multiply bugWork around storem hardware bugYYDEBUG not definedZero or one maps specified as of %0 for union beginning at %1 -- at least two are requiredZero-length character constant at %0Zero-size array at %0Zero-size specification invalid at %0[Leaving %s] + [REPORT BUG!!][REPORT BUG!!] %[cannot find %s][super ...] must appear in a method context\x used at %0 with no following hex digits\x used with no following hex digits_Pragma takes a parenthesized string literal__VA_ARGS__ can only appear in the expansion of a C99 variadic macro__alignof__ applied to an incomplete type__builtin_eh_return not supported on this target__builtin_longjmp second argument must be 1__builtin_saveregs not supported by this subtarget__builtin_saveregs not supported by this target` ' flag`!' flag`#' flag`%#D' and `%#D' cannot be overloaded`%#D' cannot be declared`%#D' conflicts with previous using declaration `%#D'`%#D' does not refer to the unqualified type, so it is not used for linkage`%#D' hides constructor for `%#T'`%#D' invalid; an anonymous union can only have non-static data members`%#D' is not a static member of `%#T'`%#D' needs a final overrider`%#D' previously declared here`%#D' previously defined here`%#D' redeclared as %C`%#D' redeclared as different kind of symbol`%#D' used prior to declaration`%#D' was used before it was declared inline`%#T' has no member named `%D'`%#T' has pointer data members`%#T' has virtual functions but non-virtual destructor`%#T' is not a template`%#T' is not a valid type for a template constant parameter`%#T' only defines a private destructor and has no friends`%#T' only defines private constructors and has no friends`%#T' used where a `%T' was expected`%#T' used where a floating point value was expected`%%%c' yields only last 2 digits of year`%%%c' yields only last 2 digits of year in some locales`%%' constraint used with last operand`%%d' operand isn't a register`%%l' operand isn't a label`%+#D' is inaccessible`%+#D' is private`%+#D' is protected`%D' access`%D' as declarator`%D' can only be specified for constructors`%D' can only be specified for functions`%D' can only be specified for objects and functions`%D' can only be specified inside a class`%D' cannot be declared virtual, since it is always static`%D' cannot have default arguments`%D' declared as a `virtual' %s`%D' declared as a friend`%D' declared as an `inline' %s`%D' declared as reference but not initialized`%D' declared with an exception specification`%D' denotes an ambiguous type`%D' does not declare a template type`%D' has already been declared in `%T'`%D' has incomplete type`%D' implicitly declared before its definition`%D' invalid in `%#T'`%D' invalid in `%T'`%D' is a namespace`%D' is already a friend of class `%T'`%D' is already declared in this scope`%D' is already defined in `%T'`%D' is already defined in class `%T'`%D' is already defined in the class %T`%D' is not a function template`%D' is not a function,`%D' is not a member of type `%T'`%D' is not a namespace`%D' is too small to hold all values of `%#T'`%D' must be a nonstatic member function`%D' must be declared before use`%D' must be either a non-static member function or a non-member function`%D' must be initialized by constructor, not by `{...}'`%D' must have an argument of class or enumerated type`%D' must take `void'`%D' must take either one or two arguments`%D' must take either zero or one argument`%D' must take exactly one argument`%D' must take exactly two arguments`%D' names constructor`%D' not declared`%D' not defined`%D' should be initialized in the member initialization list`%D' should have been declared inside `%D'`%D' should return by value`%D' undeclared (first use this function)`%D' undeclared in namespace `%D'`%D' used without template parameters`%D' was hidden`%D' was not declared in this scope`%D' was previously implicitly declared to return `int'`%D::%D' is not a template`%E' cannot be used as a function`%E' cannot be used as a member pointer, since it is of type `%T'`%E' has type `void' and is not a throw-expression`%E' is not a type, use `typename %E' to make it one`%E' is not a valid template argument`%E' is not of type `%T'`%T' does not have a class or union named `%D'`%T' fails to be a typedef or built-in type`%T' fails to be an aggregate typedef`%T' is already a friend of `%T'`%T' is an ambiguous base of `%T'`%T' is an inaccessible base of `%T'`%T' is implicitly a typename`%T' is not a class or namespace`%T' is not a class or union type`%T' is not a class, struct, or union type`%T' is not a namespace`%T' is not a pointer-to-object type`%T' is not a template`%T' is not a template type`%T' is not a valid expression`%T' is not an aggregate type`%T' specified as declarator-id`%T::%D' is not a valid declarator`%V' qualifiers cannot be applied to `%T'`%s %T' declares a new type at namespace scope`%s' attribute applies only to functions`%s' attribute argument not a string constant`%s' attribute argument not an integer constant`%s' attribute can only be applied to Java class definitions`%s' attribute can only be applied to class definitions`%s' attribute directive ignored`%s' attribute does not apply to types`%s' attribute ignored`%s' attribute ignored for `%s'`%s' attribute is not supported on this platform`%s' attribute only applies to function types`%s' attribute only applies to functions`%s' attribute only applies to interrupt functions`%s' attribute only applies to variables`%s' attribute requires an integer constant argument`%s' cannot be statically allocated`%s' declared `static' but never defined`%s' declared as both exported to and imported from a DLL`%s' declared as function returning a function`%s' declared as function returning an array`%s' declared inline after being called`%s' declared inline after its definition`%s' defined both normally and as an alias`%s' defined but not used`%s' does not respond to `%s'`%s' fails to be a typedef or built in type`%s' has an incomplete type`%s' has both `extern' and initializer`%s' ignored, conflicts with `-g%s'`%s' initialized and declared `extern'`%s' is an unrecognized format function type`%s' is deprecated`%s' is deprecated (declared at %s:%d)`%s' is narrower than values of its type`%s' is neither function nor member function; cannot be declared friend`%s' is normally a non-static function`%s' is not a valid class name`%s' is not at beginning of declaration`%s' is not defined outside of function scope`%s' is obsolete; g++ vtables are now COM-compatible by default`%s' is promoted to `%s' when passed through `...'`%s' is usually a function`%s' locally external but globally static`%s' might be used uninitialized in this function`%s' not supported by %s`%s' redeclared as different kind of symbol`%s' tag used in naming `%#T'`%s' takes only zero or two arguments`%s' undeclared (first use in this function)`%s' undeclared here (not in a function)`%s' used but never defined`%s' used prior to declaration`%s' was declared `extern' and later `static'`%s' was declared implicitly `extern' and later `static'`%s' was previously implicitly declared to return `int'`%s' was used with no declaration before its definition`%s' was used with no prototype before its definition`%s': unknown or unsupported -g option`&' constraint used with no register class`'' flag`(' flag`+' flag`-' flag`-gnat' misspelled as `-gant'`-p' not supported; use `-pg' and gprof(1)`...' handler must be the last handler for its try block`...' in old-style identifier list`/*' within comment`0' flag`::%D' undeclared (first use here)`>>' should be `> >' in template class name`@end' missing in implementation context`@end' must appear in an implementation context`B' operand has multiple bits set`B' operand is not constant`E' modifier`I' flag`O' modifier`^' flag`_' flag`__alignof' applied to a bit-field`__builtin_next_arg' called without an argument`a' flag`and' of mutually exclusive equal-tests is always 0`asm' operand constraint incompatible with operand size`asm' operand requires impossible reload`asm' specifiers are not permitted on non-static data members`bool' is now a keyword`const' and `volatile' function specifiers on `%D' invalid in %s declaration`default' label not within a switch statement`defined' must be followed by ident or (ident)`enum %s' declared in `for' loop initial declaration`enum %s' declared inside parameter list`enum %s' incomplete in scope ending here`for' loop initial declaration used outside C99 mode`inline' is not allowed in declaration of friend template specialization `%D'`inline' specified for friend class declaration`long long long' is too long for GCC`long' switch expression not converted to `int' in ISO C`main' must return `int'`noreturn' function does return`noreturn' function returns non-void value`o' operand is not constant`operator delete' must return type `%T'`operator delete' takes type `%T' as first parameter`operator new' must not return NULL unless it is declared `throw()' (or -fcheck-new is in effect)`operator new' must return type `%T'`operator new' takes type `size_t' (`%T') as first parameter`operator=' should return a reference to `*this'`or' of unmatched not-equal tests is always 1`return' with a value, in function returning void`return' with no value, in function returning non-void`sigof' applied to non-aggregate expression`sigof' applied to non-aggregate type`sizeof' applied to a bit-field`sizeof' applied to incomplete type `%T'`sizeof' applied to non-static member`static' may not be used when defining (as opposed to declaring) a static data member`struct %s' declared in `for' loop initial declaration`struct %s' declared inside parameter list`struct %s' incomplete in scope ending here`this' is unavailable for static member functions`union %s' declared in `for' loop initial declaration`union %s' declared inside parameter list`union %s' incomplete in scope ending here`va_start' used in function with fixed args`void' in parameter list must be the entire lista data area attribute cannot be specified for local variablesa global declarationa long long inta parametera parameter list with an ellipsis can't match an empty parameter name list declarationa previous locala using-declaration cannot specify a template-id. Try `using %T::%D'a using-declaration cannot specify a template-id. Try `using %D'abort in %s, at %s:%dabsolute file name in remap_filenameabstract declarator `%T' used as declarationabstract method in non-abstract classaddress of global register variable `%s' requestedaddress of local variable `%D' returnedaddress of non-extern `%E' cannot be used as template argumentaddress of overloaded function with no contextual type informationaddress of register variable `%s' requestedaddress offset not a constantaddress requested for `%D', which is declared `register'adjusting pointers for covariant returnsafter previous specification in `%#D'aggregate `%#D' has incomplete type and cannot be definedaggregate has a partly bracketed initializeraggregate initializer is not constantaggregate initializer uses complicated arithmeticaggregate value used where a complex was expectedaggregate value used where a float was expectedaggregate value used where an integer was expectedalias arg not a stringalias definitions not supported in this configuration; ignoredalias name is too long - alias ignoredalignment may not be specified for `%s'alignment must be a small power of two, not %dalignment of `%s' is greater than maximum object file alignment. Using %dall member functions in class `%T' are privateallocated but unused delay list in epilogueambiguates built-in declaration `%#D'ambiguates old declaration `%#D'ambiguous abbreviation %sambiguous class template instantiation for `%#T'ambiguous conversion for array subscriptambiguous default type conversion from `%T'ambiguous template specialization `%D' for `%+D'an anonymous union cannot have function membersan argument type that has a default promotion can't match an empty parameter name list declarationan unsigned long intan unsigned long long intanachronistic old style base class initializeranachronistic use of array size in vector deleteand pointers are %d bits wide, but g77 doesn't yet workanonymous aggregate with no membersanonymous enum declared inside parameter listanonymous struct declared inside parameter listanonymous struct not inside named typeanonymous union declared inside parameter listanonymous variadic macros were introduced in C99args to be formatted is not '...'argument #%d is a structureargument 1 of __builtin_altivec_predicate is out of rangeargument 1 of __builtin_altivec_predicate must be a constantargument 3 of `%s' must be a 2-bit literalargument `%s' doesn't match prototypeargument `%s' might be clobbered by `longjmp' or `vfork'argument is a structureargument missing after %sargument of `%s' attribute is not "ilink1" or "ilink2"argument of `%s' attribute is not a string constantargument of `__builtin_args_info' must be constantargument of `__builtin_args_info' out of rangeargument of `__builtin_eh_return_regno' must be constantargument of `asm' is not a constant stringargument of type `%T' does not match `%T'argument to `%s' attribute larger than %dargument to `%s' missingargument to `%s' missing + argument to `-%s' is missingargument to `-B' is missingargument to `-V' is missingargument to `-Xlinker' is missingargument to `-b' is missingargument to `-l' is missingargument to `-specs' is missingargument to `-specs=' is missingargument to `-x' is missingarguments given to macro `%s'arithmetic on pointer to an incomplete typearray `%s' assumed to have one elementarray index in initializer exceeds array boundsarray index in non-array initializerarray index range in initializer exceeds array boundsarray initialized from non-constant array expressionarray size missing in `%D'array size missing in `%s'array subscript has type `char'array subscript is not an integerarray type has incomplete element typearray type value used where scalar is requiredarrays of functions are not meaningfulas `%D'asm declaration conficts with previous renameasm operand %d probably doesn't match constraintsasm template is not a string constantassertion missing after %sassertion without predicateassignmentassignment (not initialization) in declarationassignment suppressionassignment to final field `%s' not in constructorassignment to final field `%s' not in field's classassignment to final static field `%s' not in class initializerassuming cast to type `%T' from overloaded functionassuming pointer to member `%D'at this point in fileattempt to take address of bit-field structure member `%D'attempt to take address of bit-field structure member `%s'attempt to use poisoned "%s"attributes in parameter array declarator ignoredbackslash and newline separated by spacebackslash-newline at end of filebad PC range for debug info for local `%s'bad addressbad address, not (reg+disp):bad amount of stack space removal: %dbad array initializerbad call to d30v_move_2wordsbad directive -- missing close-quotebad header versionbad insn for 'A'bad insn in d30v_print_operand, 0 casebad insn to d30v_print_operand, 'A' modifier:bad insn to d30v_print_operand, 'M' modifier:bad insn to d30v_print_operand, 'f' modifier:bad insn to d30v_print_operand_address:bad insn to d30v_print_operand_memory_reference:bad insn to print_operand, 'B' modifier:bad insn to print_operand, 'E' modifier:bad insn to print_operand, 'F' or 'T' modifier:bad insn to print_operand, 'R' modifier:bad insn to print_operand, 's' modifier:bad magic numberbad magic number in file '%s'bad method signaturebad modes_tieable_p for register %s, mode1 %s, mode2 %sbad pc in exception_tablebad raw header versionbad registerbad register extension codebad shift insn:bad string constantbad testbad type in parameter debug infobad value (%s) for %s switchbad value (%s) for -mabi= switchbad value (%s) for -march= switchbad value (%s) for -masm= switchbad value (%s) for -mcmodel= switchbad value (%s) for -mcpu switchbad value (%s) for -mcpu= switchbad value (%s) for -mfpmath= switchbad value (%s) for -mips switchbad value (%s) for -mmodel switchbad value (%s) for -msdata switchbad value (%s) for -mtune= switchbad value `%s' for -mcpu switchbad value `%s' for -mfp-rounding-mode switchbad value `%s' for -mfp-trap-mode switchbad value `%s' for -mmemory-latencybad value `%s' for -mtrap-precision switchbad value constant type %d, index %dbad value for -mcall-%sbad value for -msdata=%sbad zip/jar file %sbadly formed directive -- no closing quotebadly nested C headers from preprocessorbadly punctuated parameter list in #definebase `%T' with only non-default constructor in class without a constructorbase class `%#T' has a non-virtual destructorbase class `%#T' should be explicitly initialized in the copy constructorbase class `%T' already initializedbase class `%T' has cv qualifiersbase class `%T' has incomplete typebase initializer for `%T'base initializers for `%#T'base object `%E' of scoped method call is of non-aggregate type `%T'base operand of `->' has non-pointer type `%T'base operand of `->' is not a pointerbase type `%T' fails to be a struct or class typebasic block %d pred edge is corruptedbasic block %i edge lists are corruptedbasic blocks not numbered consecutivelybit-field `%#D' with non-integral typebit-field `%D' width not an integer constantbit-field `%s' has invalid typebit-field `%s' type invalid in ISO Cbit-field `%s' width not an integer constantblock_num = %ld, num_blocks = %d + bogus JARL construction: %d + bogus JR construction: %d + boolean registers required for the floating-point optionboth 'f' and 'l' suffixes on floating constantboth long and short specified for `%s'both signed and unsigned specified for `%s'braced-group within expression allowed only inside a functionbraces around scalar initializerbraces around scalar initializer for `%T'branch %d never executed + branch %d taken = %s + branch %d taken = %s%% + break statement not within loop or switchbuilt-in function `%s' declared as non-functionbuilt-in function `%s' not currently supportedc4x_address_cost: Invalid addressing modec4x_operand_subword: address not offsettablec4x_operand_subword: invalid addressc4x_operand_subword: invalid autoincrementc4x_operand_subword: invalid modec4x_operand_subword: invalid operandc4x_print_operand: %%L inconsistencyc4x_print_operand: %%N inconsistencyc4x_print_operand: %%O inconsistencyc4x_print_operand: Bad operand casec4x_print_operand_address: Bad operand casec4x_print_operand_address: Bad post_modifyc4x_print_operand_address: Bad pre_modifyc4x_rptb_insert: Cannot find start labelc4x_rptb_rpts_p: Repeat block top label moved + c4x_valid_operands: Internal errorcall %d never executed + call %d returns = %s + call %d returns = %s%% + call of `(%T) (%A)' is ambiguouscall of overloaded `%D(%A)' is ambiguouscall to Java `catch' or `throw' with `jthrowable' undefinedcall to Java constructor with `%s' undefinedcall to Java constructor, while `jclass' undefinedcall-clobbered register used for global register variablecalled from herecalled object is not a functioncalling type `%T' like a methodcan not handle inconsistent calls to `%s'can only use `%s' attribute on file-scope definitions of objects of class typecan't access imaginary part of complex value in hard registercan't access real part of complex value in hard registercan't close %scan't close input file %scan't close temp filecan't convert between vector values of different sizecan't convert from incomplete type `%T' to `%T'can't convert value to a vectorcan't create directory %scan't create repository information file `%s'can't define friend function `%s' in a local class definitioncan't do dependency tracking with input from stdincan't expand %scan't find a register in class `%s' while reloading `asm'can't find class$can't get current directorycan't have varargs with -mfp-arg-in-fp-regscan't initialize friend function `%s'can't inline call to `%s'can't make `%D' into a method -- not in a classcan't mangle %scan't open %scan't open %s for writingcan't open output file `%s'can't read from temp filecan't redefine default return value for constructorscan't reopen %scan't rewind temp filecan't set `%s' attribute after definitioncan't specify `-D' without `--main' + can't use '%s' as a %s registercan't write to output filecandidate%s: %+#Dcannot %s a pointer to incomplete type `%T'cannot allocate an object of type `%T'cannot apply member pointer `%E' to `%E', which is of non-aggregate type `%T'cannot call destructor `%T::~%T' without objectcannot call member function `%D' without objectcannot convert `%E' from type `%T' to type `%T'cannot convert `%T' to `%T' for argument `%P' to `%D'cannot convert `%T' to `%T' in %scannot convert from base `%T' to derived type `%T' via virtual base `%T'cannot convert to a pointer typecannot convert type `%T' to type `%T'cannot create pointer to reference member `%D'cannot create temporary filecannot create type information for type `%T' because its size is variablecannot declare %s to referencescannot declare `%D' to be a bit-field typecannot declare `::main' to be a templatecannot declare `::main' to be inlinecannot declare `::main' to be staticcannot declare bit-field `%D' with function typecannot declare field `%D' to be of type `%T'cannot declare member `%T::%s' within `%T'cannot declare member function `%D' to have static linkagecannot declare member function `%T::%s' within `%T'cannot declare parameter `%D' to be of type `%T'cannot declare pointer to `%#T' membercannot declare pointers to referencescannot declare references to referencescannot declare static function inside another functioncannot declare variable `%D' to be of type `%T'cannot delete a function. Only pointer-to-objects are valid arguments to `delete'cannot disable built-in function `%s'cannot do z-register replacementcannot dynamic_cast `%E' (of type `%#T') to type `%#T' (%s)cannot explicitly declare member `%#D' to have extern linkagecannot find `%s'cannot find `ldd'cannot find `nm'cannot find class (factory) methodcannot find class `%s'cannot find file for class %scannot find interface declaration for `%s'cannot find interface declaration for `%s', superclass of `%s'cannot find methodcannot find protocol declaration for `%s'cannot find reference tag for class `%s'cannot find source %scannot initialize `%D' to namespace `%D'cannot initialize `%T' from `%T'cannot initialize arrays using this syntaxcannot initialize multi-dimensional array with initializercannot inline function `main'cannot optimize division for both latency and throughputcannot pass objects of non-POD type `%#T' through `...'cannot put object with volatile field into registercannot receive objects of non-POD type `%#T' through `...'cannot reload integer constant operand in `asm'cannot resolve overloaded function `%D' based on conversion to type `%T'cannot return from a handler of a function-try-block of a constructorcannot set interrupt attribute: no current functioncannot set interrupt attribute: no such identifiercannot specify -o with -c or -S and multiple compilationscannot specify `main' class when not linkingcannot specify both -C and -ocannot take address of bit-field `%s'cannot take the address of `this', which is an rvalue expressioncannot use `::' in parameter declarationcannot use typeid with -fno-rtticannot use va_start in interrupt functioncase label `%E' not within a switch statementcase label does not reduce to an integer constantcase label not within a switch statementcase value `%ld' not in enumerated typecase value `%ld' not in enumerated type `%s'cast adds new qualifiers to function typecast discards qualifiers from pointer target typecast does not match function typecast from `%T' to `%T' discards qualifiers from pointer target typecast from `%T' to `%T' increases required alignment of target typecast from pointer to integer of different sizecast increases required alignment of target typecast specifies array typecast specifies function typecast to non-reference type used as lvaluecast to pointer from integer of different sizecast to union type from type not present in unioncasting `%T' to `%T' does not dereference pointercccp error: invalid special hash typechanges meaning of `%D' from `%+#D'changing search order for system directory "%s"char-array initialized from wide stringcharacter constant too longchoose either big or little endian, not bothchoose either m340 or m210 not bothchoosing `%D' over `%D'circular dependency in default args of `%#D'circular inheritance in interface declaration for `%s'circular pointer delegation detectedclass '%s' has no method named '%s' matching signature '%s'class `%T' does not have any field named `%D'class `%T' is implicitly friends with itselfclass `%s' already existsclass `%s' does not implement the `%s' protocolclose %dclose %scode model %s not supported in PIC modecode model `%s' not supported in the %s bit modecode model `large' not supported yetcollect2 version %scollect: reading %s + collect: recompiling %s + collect: relinking + collect: tweaking %s in %s + comma at end of enumerator listcomma expression used to initialize return valuecomma operator in operand of #ifcomparing floating point with == or != is unsafecomparison between `%#T' and `%#T'comparison between pointer and integercomparison between signed and unsignedcomparison between signed and unsigned integer expressionscomparison between types `%#T' and `%#T'comparison is always %dcomparison is always %d due to width of bit-fieldcomparison is always false due to limited range of data typecomparison is always true due to limited range of data typecomparison of complete and incomplete pointerscomparison of distinct pointer types lacks a castcomparison of promoted ~unsigned with constantcomparison of promoted ~unsigned with unsignedcomparison of unsigned expression < 0 is always falsecomparison of unsigned expression >= 0 is always truecomparisons like X<=Y<=Z do not have their mathematical meaningcompilation of header file requestedcompilation terminated. + complex integer constant is too wide for 'complex int'complex invalid for `%s'concatenation of string literals with __FUNCTION__ is deprecated. This feature will be removed in futureconfiguration: REAL, INTEGER, and LOGICAL are %d bits wide,configuration: char * holds %d bits, but INTEGER only %d -- + ASSIGN statement might failconfiguration: char * holds %d bits, but ftnlen only %dconflicting access specifications for field `%s', ignoredconflicting access specifications for method `%D', ignoredconflicting architectures defined - using C seriesconflicting architectures defined - using K seriesconflicting declarations of `%s'conflicting return type specified for `%#D'conflicting super class name `%s'conflicting types for `%#D'conflicting types for `%s'conflicting types for built-in function `%s'conflicts with built-in declaration `%#D'conflicts with function declaration `%#D'conflicts with new declaration with %L linkageconflicts with previous declaration `%#D'const `%s' cannot be declared `mutable'const declaration for `%s' follows non-constconst objects cannot go in .sdata/.sbssconst_double_split got a bad insn:constructor cannot be static member functionconstructor for alien class `%T' cannot be a memberconstructor syntax used, but no constructor declared for type `%T'constructors cannot be declared virtualconstructors may not be `%s'continue statement not within a loopcontrol reaches end of non-void functionconversion from NaN to intconversion from NaN to unsigned intconversion from `%#T' to `%#T'conversion from `%T' to `%T' discards qualifiersconversion from `%T' to `%T' is ambiguousconversion from `%T' to non-scalar type `%T' requestedconversion lacks type at end of formatconversion of `%E' from `%T' to `%T' is ambiguousconversion to %s%s will never use a type conversion operatorconversion to incomplete typeconversion to non-scalar type requestedconverting NULL to non-pointer typeconverting from `%T' to `%T'converting overloaded function `%D' to type `%#T' is ambiguouscorrupted profile info: prob for %d-%d thought to be %dcould not convert 0x%l.8x into a regioncould not convert `%E' to `%T'could not convert template argument `%E' to `%T'could not find a spill registercould not find class$ field in java interface type `%T'could not find specs file %s + could not open dump file `%s'could not split insncouldn't determine target name for dependency trackingcreating %screating array of `%T'creating array with size zerocreating array with size zero (`%E')creating pointer to member function of non-class type `%T'creating pointer to member of non-class type `%T'creating pointer to member reference type `%T'crossjump disabled: %d > 1000 basic blocks and %d >= 20 edges/basic blockcurrent file is older than %sd30v_emit_comparisondata area of '%s' conflicts with previous declarationdata definition has no type or storage classdata initializer on host with different endiannessdata member `%D' cannot be a member templatedata type of `%s' isn't suitable for a registerdecimal constant is so large that it is unsigneddecimal point in exponent - impossible!declaration does not declare anythingdeclaration for parameter `%s' but no such parameterdeclaration of C function `%#D' conflicts withdeclaration of `%#D'declaration of `%#D' has `extern' and is initializeddeclaration of `%#D' outside of class is not definitiondeclaration of `%#D' shadows a parameterdeclaration of `%D' as %sdeclaration of `%D' as multidimensional array must have bounds for all dimensions except the firstdeclaration of `%D' as non-functiondeclaration of `%D' not in a namespace surrounding `%D'declaration of `%F' throws different exceptionsdeclaration of `%s' as array of functionsdeclaration of `%s' as array of voidsdeclaration of `%s' has `extern' and is initializeddeclaration of `%s' shadows %sdeclaration of `%s' shadows a member of `this'declaration of `%s' shadows a parameterdeclaration of `%s' shadows a symbol from the parameter listdeclaration of `extern' variable `%s' in `for' loop initial declarationdeclaration of non-variable `%s' in `for' loop initial declarationdeclaration of static variable `%s' in `for' loop initial declarationdeclaration of template `%#D'declarator-id missing; using reserved word `%D'decrement of pointer to unknown structuredefault argument `%E' uses local variable `%D'default argument for `%#D' has type `%T'default argument for parameter of type `%T' has type `%T'default argument given for parameter %d of `%#D'default argument missing for parameter %P of `%+#D'default argument specified in explicit specializationdefault arguments are not allowed in declaration of friend template specialization `%D'default-initialization of `%#D', which has reference typedefining explicit specialization `%D' in friend declarationdefinition of `%#T' inside template parameter listdefinition of array `%#D' in conditiondefinition of class `%T' in conditiondefinition of enum `%T' in conditiondefinition of implicitly-declared `%D'definition provided for explicit instantiationdeleting `%T' is undefineddeleting array `%#D'deprecated conversion from string constant to `%T'deprecated use of label at end of compound statementdereferencing `void *' pointerdereferencing pointer to incomplete typederived union `%T' invaliddestructor `%T' must match class name `%T'destructor cannot be static member functiondestructor for alien class `%T' cannot be a memberdestructor name `~%T' does not match type `%T' of expressiondestructor needed for `%#D'destructor specifier `%T::~%T' must have matching namesdestructor specifier `%T::~%T()' must have matching namesdestructors may not be `%s'destructors may not have parametersdestructors must be member functionsdestructors take no parametersdidn't use all bb entries of graph, function %s + different typedirect base `%T' inaccessible in `%T' due to ambiguitydirectives may not be used inside a macro argumentdirectory name missing after %sdirectory name missing after -I optiondirectory name must immediately follow -Idivision by zerodivision by zero in #ifdivision by zero in `%E %% 0'division by zero in `%E %% 0.'division by zero in `%E / 0'division by zero in `%E / 0.'double quoted strings not allowed in #if expressionsdue to non-public access of member `%D'due to the presence of a constructordup2 %d 1duplicate (or overlapping) case valueduplicate ConstantValue attribute for field '%s'duplicate `%s'duplicate `const'duplicate `restrict'duplicate `volatile'duplicate asm operand name '%s'duplicate base type `%T' invalidduplicate case valueduplicate declaration for protocol `%s'duplicate declaration of class method `%s'duplicate declaration of instance method `%s'duplicate definition of class method `%s'duplicate definition of instance method `%s'duplicate enum value `%D'duplicate explicit instantiation of `%#D'duplicate explicit instantiation of `%#T'duplicate field `%D' (as enum and non-enum)duplicate field `%D' (as type and non-type)duplicate initialization of %Dduplicate interface declaration for category `%s(%s)'duplicate interface declaration for class `%s'duplicate label `%D'duplicate label declaration `%s'duplicate macro parameter "%s"duplicate member `%D'duplicate member `%s'duplicate nested type `%D'duplicate type qualifiers in %s declarationdynamic dependencies. + dynamic dependency %s not founddynamic_cast of `%#D' to `%#T' can never succeedelements of array `%#D' have incomplete typeelements of array `%s' have incomplete typeembedded `\0' in formatemitting PIC operand, but PIC register isn't set upempty #if expressionempty body in an else-statementempty character constantempty declarationempty file name in #%sempty index range in initializerempty left precision in %s formatempty precision in %s formatempty range specifiedempty scalar initializerenabling backtrace support is only meaningful when compiling for the Thumbenabling callee interworking support is only meaningful when compiling for the Thumbenabling caller interworking support is only meaningful when compiling for the Thumbenclosing class templates are not explicitly specializedend insn %d for block %d not found in the insn streamenum defined inside parmsenumeral and non-enumeral type in conditional expressionenumeral mismatch in conditional expression: `%T' vs `%T'enumeration value `%s' not handled in switchenumeration values exceed range of largest integerenumerator value for `%D' not integer constantenumerator value for `%s' not integer constantenvironment variable DJGPP not definedenvironment variable DJGPP points to corrupt file '%s'environment variable DJGPP points to missing file '%s'error closing %serror in constant pool entry #%d + error while parsing constant poolerror while parsing fieldserror while parsing final attributeserror while parsing methodserror writing to %sescape sequence out of range for characterexception handling disabled, use -fexceptions to enableexception of type `%T' will be caughtexcess elements in aggregate initializerexcess elements in array initializerexcess elements in char array initializerexcess elements in scalar initializerexcess elements in struct initializerexcess elements in union initializerexcess elements in vector initializerexecv %sexecvp %sexpected %d levels of template parms for `%#D', got %dexplicit instantiation of `%#D'explicit instantiation of `%#D' afterexplicit instantiation of `%#T' afterexplicit instantiation of `%#T' before definition of templateexplicit instantiation of `%D' but no definition availableexplicit instantiation of non-template `%#D'explicit instantiation of non-template type `%T'explicit specialization hereexplicit specialization in non-namespace scope `%D'explicit specialization not preceded by `template <>'explicit specialization of %D after first useexplicit specialization of non-template `%T'expression '%E' of abstract class type '%T' cannot be used in throw-expressionexpression statement has incomplete typeextended registers have no high halvesextern declaration of `%#D' doesn't matchextern declaration of `%s' doesn't match global oneextra brace group at end of initializerextra elements in scalar initializerextra qualification `%T::' on member `%D' ignoredextra qualification `%T::' on member `%s' ignoredextra semicolon in struct or union specifiedextra text at end of directiveextra tokens at end of #%s directiveextra type qualifiers in format argument (arg %d)extraneous `%T' ignoredextraneous argument to `%s' optionf2c-compatible code need not be generatedfailed to find class '%s'fatal:fclosefclose %sfdopenfield '%s' not found in classfield `%#D' is static; the only point of initialization is its definitionfield `%#D' with same name as classfield `%D' declared static in unionfield `%D' has incomplete typefield `%D' in local class cannot be staticfield `%D' invalidly declared function typefield `%D' invalidly declared method typefield `%D' invalidly declared offset typefield `%s' declared as a functionfield `%s' has incomplete typefield `%s' not foundfield initializer is not constantfield initializer type mismatchfield name not in record or union initializerfield precisionfield widthfield width in printf formatfield width in scanf formatfield width in strfmon formatfield width in strftime formatfile %s not found, execution counts assumed to be zerofile name missing after %sfile not found `%s'filename missing after %s optionfilename missing after -i optionfilename missing after -o optionfill characterfill character in strfmon formatfinal field '%s' may not have been initializedfini function found in object %sfirst argument of `%s' should be `int'first argument to __builtin_choose_expr not a constantfirst argument to `va_arg' not of type `va_list'fix_sched_param: unknown param: %sflexible array member in otherwise empty structflexible array member in unionflexible array member not at end of structfloating constant exponent has no digitsfloating constant may not be in radix 16floating constant misusedfloating constant out of rangefloating point constant not a valid immediate operandfloating point number exceeds range of '%s'floating point number exceeds range of 'double'floating point numbers are not valid in #iffloating point numbers not allowed in #if expressionsfloating point overflowfloating point overflow in expressionflow control insn inside a basic blockfollows non-prototype definition herefopen %sfor each function it appears in.)for template declaration `%D'format argument %d unused before used argument %d in $-style formatformat argument %d used more than once in %s formatformat argument is not a pointer (arg %d)format argument is not a pointer to a pointer (arg %d)format is a wide character stringformat not a string literal and no format argumentsformat not a string literal, argument types not checkedformat not a string literal, format string not checkedformat string arg follows the args to be formattedformat string arg not a string typeformat string has invalid operand numberforming %s to reference type `%T'forming reference to voidforward declaration of `%#T'fp software completion requires -mtrap-precision=ifp_offset (%ld) or end_offset (%ld) is less than zerofr30_print_operand: invalid %%F codefr30_print_operand: invalid %%x codefr30_print_operand: invalid operand to %%A codefr30_print_operand: unhandled MEMfr30_print_operand: unknown codefr30_print_operand: unrecognized %%B codefr30_print_operand: unrecognized %%b codefr30_print_operand: unrecognized %%p codefr30_print_operand_address: unhandled addressframe size too large for reliable stack checkingfriend declaration `%#D' declares a non-template functionfriend declaration not in class definitionfriend declaration requires class-key, i.e. `friend %#T'friend declaration requires class-key, i.e. `friend class %T::%T'fstat %sfunction `%#D' is initialized like a variablefunction `%D' cannot be declared friendfunction `%D' declared overloaded, but no definitions appear with which to resolve it?!?function `%D' declared virtual inside a unionfunction `%s' cannot be declared `mutable'function `%s' is initialized like a variablefunction `%s' redeclared as inlinefunction `%s' redeclared with attribute noinlinefunction `%s' was previously declared within a blockfunction body for constructor missingfunction call has aggregate valuefunction cannot be inlinefunction declaration isn't a prototypefunction declared `noreturn' has a `return' statementfunction definition declared `auto'function definition declared `register'function definition declared `typedef'function does not return string typefunction might be possible candidate for `%s' format attributefunction might be possible candidate for attribute `noreturn'function return type cannot be functionfunction returns address of local variablefunction returns an aggregatefunction too large to be inlinefunction types not truly compatible in ISO Cfunction uses __builtin_eh_returnfunction using alloca cannot be inlinefunction using setjmp cannot be inlinefunction using short complex types cannot be inlinefunction with computed jump cannot inlinefunction with label addresses used in initializers cannot inlinefunction with nested functions cannot be inlinefunction with nonlocal goto cannot be inlinefunction with target specific attribute(s) cannot be inlinedfunction with transparent unit parameter cannot be inlinefunction with varying-size parameter cannot be inlinefunction with varying-size return value cannot be inlinefunction-like macro "%s" must be used with arguments in traditional Cfunction_profiler support for MMIXgcc driver version %s executing gcc version %s + gcc version %s + gcov (GCC) %s + generate RP codegeneric thunk code fails for method `%#D' which uses `...'global declaration `%#D'global register variable `%s' used in nested functionglobal register variable follows a function definitionglobal register variable has initial valuegot %d template parameters for `%#D'got %d template parameters for `%#T'gp is constant (but save/restore gp on indirect calls)gp_offset (%ld) or end_offset (%ld) is less than zerohalf-pic init called on systems that don't support ithead insn %d for block %d not found in the insn streamhex character constant does not fit in a bytehex escape out of rangehex escape sequence out of rangehexadecimal floating constant has no exponentiC2.0 and iC3.0 are incompatible - using iC3.0ia64_print_operand: unknown codeidentifier name `%s' conflicts with GNU C++ internal naming strategyignoring #pragma %signoring #pragma %s %signoring `%V' qualifiers on `%T'ignoring asm-specifier for non-static local variable `%s'ignoring command line option '%s'ignoring duplicate directory "%s" + ignoring extra initializers for `%T'ignoring invalid multibyte characterignoring nonexistent directory "%s" + ignoring option `%s' due to invalid debug level specificationignoring pragma: %signoring unknown option `%.*s' in `-f%s'illegal pointer to bit-field `%D'implementation-reserved name `%D' usedimplicit declaration of function `%#D'implicit declaration of function `%s'implicitly popped regs must be grouped at top of stackimpossible operator '%s'impossible register constraint in `asm'in basic block %d:in declaration `%D'in passing argument %P of `%+D'incompatibilities between object file & expected valuesincompatible interworking optionsincompatible type for argument %d of `%s'incompatible type for argument %d of indirect function callincompatible types in %sincompatible types in assignment of `%T' to `%T'incomplete `%s' optionincomplete implementation of category `%s'incomplete implementation of class `%s'incomplete type `%T' does not have member `%D'incomplete type unificationincomplete universal-character-nameinconsistent instance variable specificationinconsistent operand constraints in an `asm'incorrect insn:increment of pointer to unknown structureindex value instead of field name in union initializerinit function found in object %sinitializationinitialization designators may not nestinitialization of a flexible array memberinitialization of flexible array member in a nested contextinitializations for multiple members of `%T'initialized field with side-effects overwritteninitialized variable `%s' is marked dllimportinitializer element is not computable at load timeinitializer element is not constantinitializer ends prematurelyinitializer fails to determine size of `%D'initializer fails to determine size of `%s'initializer for floating value is not a floating constantinitializer for integer value is too complicatedinitializer for scalar variable requires one elementinitializer for static variable is not constantinitializer for static variable uses complicated arithmeticinitializer invalid for static member with constructorinitializer list being treated as compound expressioninitializer list construction invalid for `%D'initializer list construction invalid for derived class object `%D'initializer list construction invalid for polymorphic class object `%D'initializer list for object of class with base classesinitializer list for object of class with virtual base classesinitializer list for object using virtual functionsinitializer list treated as compound expressioninitializer specified for non-member function `%D'initializer specified for non-virtual method `%D'initializer-string for array of chars is too longinitializing array with parameter listinline float constants not supported on this hostinline function `%s' given attribute noinlineinline functions not supported for this return value typeinlining failed in call to `%s'input operand constraint contains `%c'insn %d inside basic block %d but block_for_insn is %iinsn %d inside basic block %d but block_for_insn is NULLinsn %d is in multiple basic blocks (%d and %d)insn does not satisfy its constraints:insn outside basic blockinstall: %s%s + instance variable `%s' accessed in class methodinstance variable `%s' is declared %sinstance variable `%s' is declared privateinstantiation of `%D' as type `%T'instruction scheduling not supported on this target machineinsufficient contextual information to determine typeint-array initialized from non-wide stringinteger constant contains digits beyond the radixinteger constant is larger than the maximum value for its typeinteger constant is so large that it is unsignedinteger constant is too large for this configuration of the compiler - truncated to %d bitsinteger constant is unsigned in ISO C, signed with -traditionalinteger constant larger than the maximum value of %sinteger constant out of rangeinteger overflow in expressioninteger overflow in preprocessor expressioninternal compiler error. Bad address:internal compiler error. Incorrect shift:internal compiler error. Unknown mode:internal errorinternal error - invalid Utf8 nameinternal error - too many interface typeinternal error - use of undefined typeinternal error in %s, at tradcpp.c:%d + Please submit a full bug report. + See %s for instructions.internal error in check-init: tree code not implemented: %sinternal error in generate_bytecode_insn - tree code not implemented: %sinternal error--no jump follows compare:internal error: internal error: %%) found without a %%( in assembler patterninternal error: %%> found without a %%< in assembler patterninternal error: %%] found without a %%[ in assembler patterninternal error: %%} found without a %%{ in assembler patterninternal error: %sinternal error: bad register: %dinternal error: cris_side_effect_mode_ok with bad operandsinternal error: sideeffect-insn affecting main effectinternal gcc abortinternal gcc error: Can't express symbolic locationinternal gcc monitor: short-branch(%x)internal regno botch: regno = %d + interrupt Service Routines cannot be coded in Thumb modeinterworking forces APCS-32 to be usedinvalid #-lineinvalid #identinvalid #ident directiveinvalid #lineinvalid #pragma %sinvalid #pragma GCC poison directiveinvalid %%-codeinvalid %%A operandinvalid %%B operandinvalid %%B valueinvalid %%C operandinvalid %%C valueinvalid %%D operandinvalid %%D valueinvalid %%E valueinvalid %%F valueinvalid %%G valueinvalid %%H valueinvalid %%J codeinvalid %%J valueinvalid %%K valueinvalid %%L valueinvalid %%M valueinvalid %%N valueinvalid %%O valueinvalid %%P operandinvalid %%P valueinvalid %%Q valueinvalid %%R valueinvalid %%S valueinvalid %%T valueinvalid %%U valueinvalid %%V valueinvalid %%Y operandinvalid %%Z valueinvalid %%b valueinvalid %%c operandinvalid %%d operandinvalid %%f operandinvalid %%f valueinvalid %%h valueinvalid %%j codeinvalid %%j valueinvalid %%k valueinvalid %%m valueinvalid %%o valueinvalid %%p valueinvalid %%q valueinvalid %%r valueinvalid %%s valueinvalid %%s/S valueinvalid %%u valueinvalid %%v valueinvalid %%x/X valueinvalid %%xn codeinvalid %%z valueinvalid --param option: %sinvalid PC in line number tableinvalid UNSPEC as operandinvalid UNSPEC as operand (1)invalid UNSPEC as operand (2)invalid Z register replacement for insninvalid `asm': invalid addressinvalid addressing modeinvalid arg to `__builtin_frame_address'invalid arg to `__builtin_return_address'invalid argument of `%s' attributeinvalid built-in macro "%s"invalid call to member function needing `this' in static member function scopeinvalid cast to function type `%T'invalid catch parameterinvalid character '%c' in #ifinvalid character '\%03o' in #ifinvalid character constant in #ifinvalid codeinvalid const_cast from type `%T' to type `%T'invalid const_cast of an rvalue of type `%T' to type `%T'invalid constructor; you probably meant `%T (const %T&)'invalid conversion from `%T' to `%T'invalid conversion to type `%T' from type `%T'invalid covariant return type for `%#D'invalid data member initializationinvalid declaration of member template `%#D' in local classinvalid declaratorinvalid default template argumentinvalid definition of qualified type `%T'invalid expression as operandinvalid flag "%s" in line directiveinvalid floating point emulation option: -mfpe-%sinvalid format #line commandinvalid hash type %d in cpp_macro_definitioninvalid in-class initialization of static data member of non-integral type `%T'invalid indirect (S) memory addressinvalid indirect memory addressinvalid initial value for member `%s'invalid initializerinvalid initializer for bit stringinvalid initializer for virtual method `%D'invalid insn:invalid integer constant in parameter list, did you forget to give parameter name?invalid lvalue in asm statementinvalid lvalue in assignmentinvalid lvalue in unary `&'invalid macro nameinvalid macro name `%s'invalid maskinvalid member template declaration `%D'invalid mode for gen_tst_reginvalid mode for integer comparison in gen_compare_reginvalid number in #if expressioninvalid offset in ybase addressinginvalid offsetof from non-POD type `%#T'; use pointer to member insteadinvalid operand code `%c'invalid operand for 'A' modifierinvalid operand for 'D' modifierinvalid operand for 'H' modifierinvalid operand for 'P' modifierinvalid operand for 'T' modifierinvalid operand for 'b' modifierinvalid operand for 'e' modifierinvalid operand for 'm' modifierinvalid operand for 'p' modifierinvalid operand for 'v' modifierinvalid operand for 'z' modifierinvalid operand in the instructioninvalid operand modifier letterinvalid operand output codeinvalid operand to %%H/%%L codeinvalid operand to %%N codeinvalid operand to %%R codeinvalid operand to %%T/%%B codeinvalid operand to %%U codeinvalid operand to %%V codeinvalid operand to %%p codeinvalid operand to %%s codeinvalid operands of types `%T' and `%T' to binary `%O'invalid operands to binary %sinvalid operation on uninstantiated typeinvalid option %sinvalid option `%s'invalid option `-mshort-data-%s'invalid option `-mstack-increment=%s'invalid option `entry%s'invalid parameter `%s'invalid parameter type `%T'invalid parameter value `%s'invalid preprocessing directive #%sinvalid punctuation `%c' in constraintinvalid qualifiers on non-member function typeinvalid receiver type `%s'invalid redeclaration of `%D'invalid register in the instructioninvalid register in the move instructioninvalid register in ybase addressinginvalid register name `%s' for register variableinvalid register name for `%s'invalid reinterpret_cast from type `%T' to type `%T'invalid reinterpret_cast of an rvalue expression of type `%T' to type `%T'invalid return type for function `%#D'invalid return type for member function `%#D'invalid rotate insninvalid second arg to __builtin_prefetch; using zeroinvalid shift operator in emit_1600_core_shiftinvalid specification! Bug in ccinvalid static_cast from type `%T' to type `%T'invalid storage class for function `%s'invalid string constant `%E'invalid string literal, ignoring final '\'invalid suffix '%.*s' on integer constantinvalid suffix on floating constantinvalid suffix on integer constantinvalid third arg to __builtin_prefetch; using zeroinvalid token in expressioninvalid truth-value expressioninvalid type `%T' declared `friend'invalid type `%T' for default argument to `%T'invalid type `void' for newinvalid type argumentinvalid type argument of `%s'invalid type modifier within array declaratorinvalid type modifier within pointer declaratorinvalid type qualifier for non-member function typeinvalid type: `void &'invalid types `%T[%T]' for array subscriptinvalid use of %%d, %%x, or %%Xinvalid use of `%D'invalid use of `%T'invalid use of `%s' on pointer to memberinvalid use of `--' on bool variable `%D'invalid use of `::'invalid use of `restrict'invalid use of `this' at top levelinvalid use of `this' in non-member functioninvalid use of `virtual' in template declaration of `%#D'invalid use of a pointer to an incomplete type in pointer arithmeticinvalid use of array with unspecified boundsinvalid use of const_cast with type `%T', which is a pointer or reference to a function typeinvalid use of const_cast with type `%T', which is not a pointer, reference, nor a pointer-to-data-member typeinvalid use of flexible array memberinvalid use of incomplete typedef `%s'invalid use of member (did you forget the `&' ?)invalid use of member `%D'invalid use of member `%D' in static member functioninvalid use of non-lvalue arrayinvalid use of non-static field `%D'invalid use of template `%#D' as expressioninvalid use of template type parameterinvalid use of template-id `%D' in declaration of primary templateinvalid use of type decl `%#D' as expressioninvalid use of undefined type `%#T'invalid use of undefined type `%s %s'invalid use of void expressioninvalid vector type for attribute `%s'invalid version number formatinvoke[non-static] on static methodinvokestatic on abstract methodinvokestatic on non static methodit must be a pointer-to-member of the form `&X::Y'it must be the address of a function with external linkageit must be the address of an object with external linkageits scope is only this definition or declaration, which is probably not what you wantjump to `%s' invalidly jumps into binding contourjump to case labeljump to label `%D'junk at end of #pragma %sjunk at end of #pragma GCC java_exceptionsjunk at end of #pragma extern_prefixjunk at end of #pragma ghs endsdajunk at end of #pragma ghs endtdajunk at end of #pragma ghs endzdajunk at end of #pragma ghs interruptjunk at end of #pragma ghs sectionjunk at end of #pragma ghs startsdajunk at end of #pragma ghs starttdajunk at end of #pragma ghs startzdajunk at end of #pragma mapjunk at end of #pragma redefine_extnamejunk at end of #pragma weakjunk at end of '#pragma %s'junk at end of '#pragma options'junk at end of '#pragma pack'junk at end of '#pragma unused'junk at end of signature stringkeyword `export' not implemented, and will be ignoredlabel %s referenced outside of any functionlabel `%D' defined but not usedlabel `%D' used but not definedlabel `%s' defined but not usedlabel `%s' referenced outside of any functionlabel `%s' used before containing binding contourlabel `%s' used but not definedlabel must be followed by statementlabel named wchar_tlanguage %s not recognizedlanguage string `"%s"' not recognizedlarge frame pointer change (%d) with -mtiny-stacklarge integer implicitly truncated to unsigned typeld returned %d exit statusleft precisionleft precision in strfmon formatleft shift count >= width of typeleft shift count is negativeleft-hand operand of comma expression has no effectlength modifierlength modifier in printf formatlength modifier in scanf formatlength modifier in strfmon formatlibraries: %s + library function `%#D' redeclared as non-function `%#D'library function `%s' declared as non-functionlibrary lib%s not foundline number out of rangelo_sum not of registerload command map, %d cmds, new size %ld. + local class `%#T' shall not have static data member `%#D'local declaration of `%s' hides instance variablelong and short specified together for `%s'long long constant not a valid immediate operandlong or short specified with char for `%s'long or short specified with floating type for `%s'long, short, signed or unsigned invalid for `%s'long, short, signed or unsigned used invalidly for `%s'lookup of `%D' finds `%#D'lookup of `%D' in the scope of `%#T' (`%#D') does not match lookup in the current scope (`%#D')looser throw specifier for `%#F'lseek %s 0macro "%s" passed %u arguments, but takes just %umacro "%s" requires %u arguments, but only %u givenmacro argument "%s" would be stringified with -traditionalmacro name missing after %smacro name missing after -%c optionmacro names must be identifiersmacro or #include recursion too deepmacro parameters must be comma-separatedmaking `%D' staticmalformed #pragma align - ignoredmalformed #pragma extern_prefix, ignoredmalformed #pragma ghs sectionmalformed #pragma map, ignoredmalformed #pragma redefine_extname, ignoredmalformed #pragma weak, ignoredmalformed '#pragma %s' - ignoredmalformed '#pragma options align={mac68k|power|reset}', ignoringmalformed '#pragma options', ignoringmalformed '#pragma pack' - ignoredmalformed '#pragma pack(pop[, id])' - ignoredmalformed '#pragma pack(push[, id], )' - ignoredmalformed .zip archive in CLASSPATH: %smask must be an immediatematching constraint not valid in output operandmatching constraint references invalid operand numbermay not use both -EB and -ELmay not use both -mfp64 and -m4650may not use both -mfp64 and -msingle-floatmay not use both -mgp32 and -mfp64member %#D' with constructor not allowed in anonymous aggregatemember %#D' with copy assignment operator not allowed in anonymous aggregatemember %#D' with destructor not allowed in anonymous aggregatemember `%#D' with constructor not allowed in unionmember `%#D' with copy assignment operator not allowed in unionmember `%#D' with destructor not allowed in unionmember `%D' cannot be declared both virtual and staticmember `%D' conflicts with virtual function table field namemember `%D' declared as friend before type `%T' definedmember `%D' is non-static but referenced as a static membermember `%D' is uninitialized referencemember `%D' with uninitialized const fieldsmember functions are implicitly friends of their classmember initializers for `%#D'member type `%T::' incompatible with object type `%T'membersmethod '%s' not found in classmethod `%s' not implemented by protocolmethod definition for `%c%s' not foundmethod definition not in class contextmips16 function profilingmismatched braces in specsmismatching signature for field '%s' in '%s'misplaced ConstantValue attribute (not in any field)missing $ operand number in formatmissing '(' after '#pragma %s' - ignoredmissing '(' after '#pragma pack' - ignoredmissing '(' after '#pragma unused', ignoringmissing '(' after predicatemissing '(' in expressionmissing ')' after "defined"missing ')' after '#pragma unused', ignoringmissing ')' for '#pragma %s' - ignoredmissing ')' in expressionmissing ')' in macro parameter listmissing ')' to complete answermissing ';' before right bracemissing Code attributemissing argument in `__builtin_args_info'missing argument to `%s' optionmissing barrier after block %imissing binary operatormissing binary operator before '%s'missing braces around initializermissing close brace for named operandmissing field '%s' in '%s'missing fill character at end of strfmon formatmissing function name in '#pragma %s' - ignoredmissing initializermissing initializer for member `%D'missing section name in '#pragma %s' - ignoredmissing static field `%s'missing terminating %c charactermissing terminating > charactermissing type-name in typedef-declarationmissing white space after number '%.*s'mixing C++ and Java catches in a single translation unitmno-cygwin and mno-win32 are not compatiblemode not QImodemodification by `asm'more than %d operands in `asm'more than one 'f' suffix on floating constantmore than one 'i' or 'j' suffix on floating constantmore than one 'i' or 'j' suffix on integer constantmore than one 'l' suffix on floating constantmove insn not handledmsync %smulti-character character constantmulti-line commentmulti-line string literals are deprecatedmultidimensional array must have bounds for all dimensions except the firstmultiple `virtual' specifiersmultiple access specifiersmultiple declarations `%T' and `%T'multiple declarations for method `%s'multiple declarators in template declarationmultiple default labels in one switchmultiple definition of `%#T'multiple fields in union `%T' initializedmultiple initializations given for `%D'multiple initializations given for member `%D'multiple parameters named `%s'multiple storage classes in declaration of `%s'multiple types in one declarationmunmap %smust #include before using typeidmust have at least one catch per try blockmust use .* or ->* to call pointer-to-member function in `%E (...)'mvc&exmvcle usemysterious repository information in %sname `%T' has incomplete typename lookup of `%s' changedname lookup of `%s' changed for new ISO `for' scopingname missing for member functionnamed membersnamespace `%D' not allowed in using-declarationnamespace `%T' undeclarednamespace alias `%D' not allowed here, assuming `%D'namespace-scope anonymous aggregates must be staticnegative insn lengthnegative integer implicitly converted to unsigned typenegative width in bit-field `%D'negative width in bit-field `%s'neither varargs or stdarg in mmix_setup_incoming_varargsnested assembly dialect alternativesnested extern declaration of `%s'nested function `%s' declared `extern'nested redefinition of `%s'new cannot be applied to a function typenew cannot be applied to a reference typenew declaration `%#D'new of array type fails to specify sizeno FUNCTION_PROFILER for CRISno INTEGER type can hold a pointer on this configurationno `%#D' member function declared in class `%T'no `%D(int)' declared for postfix `%s', trying prefix operator insteadno args to macro `%s'no argumentsno base or member initializers given following ':'no bases given following `:'no body nor ';' separates two class, struct or union declarationsno class name specified as argument to -fconstant-string-classno class template named `%#T' in `%#T'no closing `]' for `%%[' formatno cmd_strings foundno data type for mode `%s'no default argument for `%D'no description yetno field `%D' in union being initializedno include path in which to find %.*sno include path in which to find %sno input file specifiedno input filesno input files; unwilling to write output filesno low registers available for popping high registersno macro name given in #%s directiveno match for call to `(%T) (%A)'no matches converting function `%D' to type `%#T'no matching function for call to `%D(%A)'no matching function for call to `%T::%D(%A)%#V'no matching template for `%D' foundno member function `%D' declared in `%T'no members matching `%D' in `%#T'no method `%T::%D'no newline at end of fileno previous declaration for `%s'no previous prototype for `%s'no prototype, and parameter address used; cannot be inlineno register in addressno return statement in function returning non-voidno sclass for %s stab (0x%x) + no semicolon at end of struct or unionno suitable `operator delete' for `%T'no super class declared in interface for `%s'no symbol table foundno type `%D' in `%T'no type named `%#T' in `%#T'no unique final overrider for `%D' in `%T'no vector mode with the size and type specified could be foundno viable candidatesnon-ANSI-standard escape sequence, `\%c'non-ISO escape sequence `\%c'non-ISO-standard escape sequence, '\%c'non-constant `%E' cannot be used as template argumentnon-empty initializer for array of empty elementsnon-hex digit '%c' in universal-character-namenon-local function `%#D' uses anonymous typenon-local function `%#D' uses local type `%T'non-local variable `%#D' uses local type `%T'non-lvalue in %snon-member `%s' cannot be declared `mutable'non-object member `%s' cannot be declared `mutable'non-prototype definition herenon-static const member `%#D' in class without a constructornon-static const member `%#D', can't use default assignment operatornon-static declaration for `%s' follows staticnon-static initialization of a flexible array membernon-static method '%s' overrides static methodnon-static reference `%#D' in class without a constructornon-static reference member `%#D', can't use default assignment operatornon-template type `%T' used as a templatenon-template used as templatenon-trivial labeled initializersnonconstant array index in initializernot a static field `%s'not a valid Java .class filenot enough type informationnot found + not in any file?!note:null character(s) ignorednull character(s) preserved in literalnull format stringnumber missing after %snumber of arguments doesn't match prototypenumber of bb notes in insn chain (%d) != n_basic_blocks (%d)numeric constant contains digits beyond the radixnumeric constant with no digitsobject `%E' cannot be used as template argumentobject `%E' of incomplete type `%T' will not be accessed in %sobject does not conform to the `%s' protocolobject missing in `%E'object missing in call to method `%D'object missing in use of pointer-to-member constructobject of incomplete type `%T' will not be accessed in %sobject of type `%T' will not be accessed in %sobsolete use of designated initializer with `:'obsolete use of designated initializer without `='octal character constant does not fit in a byteoctal escape sequence out of rangeoffset outside bounds of constant stringold raw header fileold style placement syntax, use () insteadonly %d args to macro `%s'only 1 arg to macro `%s'only constructors take base initializersonly declarations of constructors can be `explicit'only initialized variables can be placed into program memory areaonly one of `--print-main', `--list-class', and `--complexity' allowedonly weak aliases are supported in this configurationoops, not debugged; fixing up value:open %soperand 1 must be a hard registeroperand constraint contains incorrectly positioned '+' or '='operand constraints for `asm' differ in number of alternativesoperand is const_doubleoperand is neither a constant nor a condition code, invalid operand code 'c'operand is r0operand number missing after %%-letteroperand number out of rangeoperand number out of range in formatoperand number specified for format taking no argumentoperand number specified with suppressed assignmentoperands to ?: have different typesoperation on `%s' may be undefinedoperator "defined" requires an identifieroperator '%s' has no left operandoperator '%s' has no right operandoperator `%T' declared to return `%T'optimization level restoredoptimization turned offoptimization turned onoptions -mabi=mmixware and -mabi=gnu are mutually exclusiveoptions enabled: options passed: ordered comparison of pointer with integer zerooutput constraint %d cannot be specified together with "%s" clobberoutput constraint %d must specify a single registeroutput constraint `%c' for operand %d is not at the beginningoutput filename specified twiceoutput number %d not directly addressableoutput operand %d must use `&' constraintoutput operand constraint lacks `='output operand is constant in `asm'output regs must be grouped at top of stackoutput_move_single:overflow in array dimensionoverflow in constant expressionoverflow in enumeration valuesoverflow in enumeration values at `%D'overflow in implicit constant conversionoverflow on truncation to integeroverflow on truncation to unsigned integeroverflowed output arg list for `%s'overloaded function with no contextual type informationpacked attribute causes inefficient alignmentpacked attribute causes inefficient alignment for `%s'packed attribute is unnecessarypacked attribute is unnecessary for `%s'padding struct size to alignment boundarypadding struct to align `%s'parameter `%D' declared voidparameter `%D' includes %s to array of unknown bound `%T'parameter `%D' invalidly declared method typeparameter `%D' invalidly declared offset typeparameter `%s' declared voidparameter `%s' has incomplete typeparameter `%s' has just a forward declarationparameter `%s' is initializedparameter `%s' points to incomplete typeparameter has incomplete typeparameter name missingparameter name missing from parameter listparameter name omittedparameter name starts with a digit in #defineparameter names (without types) in function declarationparameter points to incomplete typeparameter type of called function is incompleteparm types given both in parmlist and separatelyparse errorparse error at end of saved function textparse error in method specificationparse error; also virtual memory exceededparse error; also virtual memory exhaustedparser may be lost: is there a '{' missing somewhere?parser stack overflowpartial specialization `%D' of function templatepartial specialization `%T' declared `friend'partial specialization `%T' does not specialize any template argumentspassing NULL used for non-pointer %s %P of `%D'passing `%T' as `this' argument of `%#D' discards qualifierspassing `%T' chooses `%T' over `%T'passing `%T' for %s %P of `%D'passing arg %d of `%s'passing arg %d of pointer to functionpassing floating point arguments in fp regs not yet supportedpassing negative value `%E' for %s %P of `%D'pasting "%s" and "%s" does not give a valid preprocessing tokenpath name missing after %spipeplace data items into their own sectionplace each function into its own sectionpointerpointer of type `void *' used in arithmeticpointer of type `void *' used in subtractionpointer targets in %s differ in signednesspointer to a function used in arithmeticpointer to a function used in subtractionpointer to a member used in arithmeticpointer to member cast from `%T' to `%T' is via virtual basepointer to member cast via virtual base `%T' of `%T'pointer to member conversion via virtual base `%T' of `%T'pointer to member function called, but not in class scopepointer to member function used in arithmeticpointer type mismatch in conditional expressionpointer value used where a complex was expectedpointer value used where a floating point value was expectedpointer-to-member function %E cannot be called without an object; consider using .* or ->*pointer/integer type mismatch in conditional expressionpointers are not permitted as case valuespoisoning existing macro "%s"possible start of unterminated string literalpossibly missing ')'post-increment address is not a registerpostfix `%D' must take `int' as its argumentpostfix `%D' must take `int' as its second argumentpostfix `%D' should return `%T'potential selector conflict for method `%s'pre-decrement address is not a registerpre-increment address is not a registerprecisionprecision in printf formatpredicate must be an identifierpredicate's answer is emptyprefix `%D' should return `%T'previous declaration `%#D' hereprevious declaration `%D'previous declaration as `%#D'previous declaration of `%#D'previous declaration of `%#D' with %L linkageprevious declaration of `%D'previous declaration of `%s'previous declaration of function `%s' was inlineprevious declaration of function `%s' with attribute noinlineprevious definition hereprevious definition of `%#T'previous external decl of `%#D'previous external decl of `%s'previous friend declaration of `%D'previous implicit declaration of `%s'previous non-function declaration `%#D'previous non-inline declaration herepreviously used hereprior parameter's size depends on `%s'private member `%#D' in anonymous unionprofiling does not work without a frame pointerprofiling not implemented yetprofiling not supported with -mg + programs: %s + promoted argument `%s' doesn't match prototypeproperly unless they all are 32 bits wideprotected member `%#D' in anonymous unionprotocol `%s' has circular dependencyprototype for `%#D'prototype for `%#D' does not match any in class `%T'prototype for `%s' followsprototype for `%s' follows and argument %d doesn't matchprototype for `%s' follows and number of arguments doesn't matchprovided for `%D'qualified type `%T' does not match destructor name `~%T'qualifiers are not allowed on declaration of `operator %T'raw header buffer too smallread %ld bytes, expected %ld, from %sread %sreading class %s for the second time from %sreading through null pointer (arg %d)real name is too long - alias ignoredreal-valued template parameters when cross-compilingrecursive type `%T' undefinedredeclaration of C++ built-in type `%T'redeclaration of `%s'redeclaration of `enum %s'redeclaration of `wchar_t' as `%T'redeclared here as `%#D'redefinition of `%#T'redefinition of `%s'redefinition of `struct %s'redefinition of `union %s'redefinition of default argument for `%#D'redirecting stdout: %sredundant redeclaration of `%D' in same scoperedundant redeclaration of `%s' in same scopereference `%s' is ambiguous: appears in interface `%s' and interface `%s'reference to local variable `%D' returnedreference to non-lvalue returnedregister name given for non-register variable `%s'register name not specified for `%s'register specified for `%s' isn't suitable for data typeregister used for two global register variablesregister variable `%s' used in nested functionregistering "%s" as both a pragma and a pragma namespaceregisters IX, IY and Z used in the same INSNreimplementation of class `%s'reinterpret_cast from `%T' to `%T' casts away const (or volatile)reinterpret_cast from `%T' to `%T' loses precisionrename spec %s to %s + repeated %s in formatrequest for member `%D' in `%E', which is of non-aggregate type `%T'request for member `%D' is ambiguous in multiple inheritance latticerequest for member `%T::%D' in expression of non-aggregate type `%T'request for member `%s' in something not a structure or unionrequested alignment for %s is greater than implemented alignment of %drequested alignment is not a constantrequested alignment is not a power of 2requested alignment is too largerequested init_priority is not an integer constantrequested init_priority is out of rangerequested init_priority is reserved for internal useresult of `operator->()' yields non-pointer resultret instruction not implementedreturnreturn identifier `%D' already in placereturn not followed by barrierreturn type `%#T' is incompletereturn type defaults to `int'return type defaults to idreturn type for `%s' defaults to idreturn type for `main' changed to `int'return type is an incomplete typereturn type of `%s' is not `int'return type specification for constructor invalidreturn type specification for destructor invalidreturn type specified for `operator %T'return value type specifier for constructor ignoredreturn-statement with a value, in function declared with a void return typereturn-statement with no value, in function declared with a non-void return typereturned value in block_exit_exprreturning a value from a constructorreturning a value from a destructorreturning reference to temporaryright precisionright precision in strfmon formatright shift count >= width of typeright shift count is negativerounding mode not supported for VAX floatssecond arg to `__builtin_expect' must be a constantsecond arg to `__builtin_prefetch' must be a constantsecond argument of `%s' should be `char **'second parameter of `va_start' not last named argumentsection attribute cannot be specified for local variablessection attribute not allowed for `%s'section attributes are not supported for this targetsection of `%s' conflicts with previous declarationsection pointer missingselector must be an immediatesemicolon missing after %s declarationsemicolon missing after declaration of `%#T'semicolon missing after declaration of `%T'shadowing %s function `%#D'shadowing built-in function `%s'shadowing library function `%s'shadowing previous type declaration of `%#D'shared and mdll are not compatibleshift count >= width of typeshift count is negativeshort, signed or unsigned invalid for `%s'signed and unsigned given together for `%s'signed and unsigned type in conditional expressionsigof type specifiersize in array new must have integral typesize of `%s' is %d bytessize of `%s' is larger than %d bytessize of array `%D' has non-integer typesize of array `%D' is negativesize of array `%D' is not an integral constant-expressionsize of array `%s' has non-integer typesize of array `%s' is negativesize of array `%s' is too largesize of array has non-integer typesize of array is negativesize of array is not an integral constant-expressionsize of member `%D' is not constantsize of return value of `%s' is %u bytessize of return value of `%s' is larger than %d bytessize of variable `%s' is too largesizeof applied to a bit-fieldsizeof applied to a function typesizeof applied to a void typesizeof applied to an incomplete typesizeof(long double) is 12sizeof(long double) is 16sorry, not implemented: sorry, not implemented: #pragma align NAME=SIZEsorry, not implemented: #pragma noalign NAMEsorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)source file for class `%s' is newer than its matching class file. Source file `%s' used insteadsource file seen twice on command line and will be compiled only oncespec failure: '%%*' has not been initialized by pattern matchspec failure: unrecognized spec option '%c'spec file has no spec for linkingspec is '%s' + + specialization of %D after instantiationspecialization of `%T' after instantiationspecialization of implicitly-declared special member functionspecializing `%#T' in different namespacespecs %%include syntax malformed after %ld charactersspecs %%rename syntax malformed after %ld charactersspecs %s spec was not found to be renamedspecs file malformed after %ld charactersspecs unknown %% command after %ld charactersspurious trailing `%%' in formatstack frame not a multiple of 8 bytes: %dstack frame not a multiple of octabyte: %dstack frame too bigstack limit expression is not supportedstack limits not supported on this targetstack size > 32kstack underflow - dup* operationstackframe too big: %d bytesstatic `%s' cannot be declared `mutable'static access to object of type `id'static declaration for `%s' follows non-staticstatic member `%D' cannot be a bit-fieldstatic member `%D' declared `register'static member function `%#D' declared with type qualifiersstatic or type qualifiers in abstract declaratorstatic or type qualifiers in non-parameter array declaratorstatic variable `%s' is marked dllimportstatic_cast from type `%T' to type `%T' casts away constnessstorage class `%D' applied to template instantiationstorage class `auto' invalid for function `%s'storage class `inline' invalid for function `%s' declared out of global scopestorage class `register' invalid for function `%s'storage class `static' invalid for function `%s' declared out of global scopestorage class specified for %s `%s'storage class specified for parameter `%s'storage class specified for structure field `%s'storage class specified for typenamestorage class specifier `%s' not allowed after struct or classstorage class specifier in array declaratorstorage class specifiers invalid in friend function declarationsstorage class specifiers invalid in parameter declarationsstorage size of `%D' isn't constantstorage size of `%D' isn't knownstorage size of `%s' isn't constantstorage size of `%s' isn't knownstray '%c' in programstray '\%o' in programstrftime formats cannot format argumentsstring constants are not valid in #ifstring length `%d' is greater than the length `%d' ISO C%d compilers are required to supportstring literal %E is not a valid template argument because it is the address of an object with static linkagestring section missingstructstruct type value used where scalar is requiredstructurestructure `%D' with uninitialized const membersstructure `%D' with uninitialized reference membersstructure size boundary can only be set to 8 or 32style of line directive is a GCC extensionsubobject of type `%T' must be initialized by constructor, not by `%E'subscript has type `char'subscript missing in array referencesubscripted value is neither array nor pointersubscripting array declared `register'suggest hiding #%s from traditional C with an indented #suggest not using #elif in traditional Csuggest parentheses around && within ||suggest parentheses around + or - in operand of &suggest parentheses around + or - inside shiftsuggest parentheses around arithmetic in operand of ^suggest parentheses around arithmetic in operand of |suggest parentheses around assignment used as truth valuesuggest parentheses around comparison in operand of &suggest parentheses around comparison in operand of ^suggest parentheses around comparison in operand of |switch -mcpu=%s conflicts with -march= switchswitch quantity not an integerswitch statement of size %lu entries too largesyntax errorsyntax error ':' without preceding '?'syntax error '?' without following ':'syntax error at '%s' tokensyntax error: cannot back uptaking address of bound pointer-to-member expressiontaking address of destructortaking address of temporarytarget CPU does not support APCS-26target CPU does not support APCS-32target CPU does not support THUMB instructionstarget CPU does not support interworkingtarget missing after %starget missing after %s optiontemplate `%#D' defined in file without #pragma interfacetemplate `%#D' instantiated in file without #pragma interfacetemplate argument %d is invalidtemplate argument `%E' involves template parameter(s)template class without a nametemplate declaration of `%#D'template definition of non-template `%#D'template instantiation depth exceeds maximum of %d (use -ftemplate-depth-NN to increase the maximum) instantiating `%D'template parameter `%#D'template parameter list used in explicit instantiationtemplate parameter type `%T' declared `friend'template parameters cannot be friendstemplate parameters not used in partial specialization:template specialization with C linkagetemplate type parameters must use the keyword `class' or `typename'template with C linkagetemplate-argument `%T' uses anonymous typetemplate-argument `%T' uses local type `%T'template-id `%D' for `%+D' does not match any template declarationtemplate-id `%D' in declaration of primary templatetemplate-id `%D' used as a declaratorthan previous declaration `%F'that particular -g option is invalid with -maout and -melinuxthe -mlong-double-64 option does not work yetthe ` ' printf flagthe `!' strfmon flagthe `#' printf flagthe `#' strftime flagthe `'' printf flagthe `'' scanf flagthe `(' strfmon flagthe `+' printf flagthe `+' strfmon flagthe `-' printf flagthe `-' strfmon flagthe `-' strftime flagthe `0' printf flagthe `0' strftime flagthe `E' strftime modifierthe `I' printf flagthe `I' scanf flagthe `O' modifierthe `O' strftime modifierthe `^' strfmon flagthe `^' strftime flagthe `_' strftime flagthe `a' scanf flagthe `java.lang.Object' that was found in `%s' didn't have the special zero-length `gnu.gcj.gcj-compiled' attribute. This generally means that your classpath is incorrectly set. Use `info gcj "Input Options"' to see the info page describing how to set the classpaththe address of `%D', will always be `true'the assignment suppression scanf featurethe conditional began herethe m210 does not have little endian supportthe meaning of '\%c' varies with -traditionalthe meaning of '\a' varies with -traditionalthe meaning of '\x' varies with -traditionalthe meaning of `\a' varies with -traditionalthe meaning of `\x' varies with -traditionalthe only valid combination is `long double'third arg to `__builtin_prefetch' must be a constantthird argument of `%s' should probably be `char **'this function may return with or without a valuethis is a previous declarationthis is the first default labelthis is the first entry overlapping that valuethis is the insn:this is the location of the previous definitionthis target does not support the -mabi switchthis target machine does not have delayed branchesthis use of "defined" may not be portablethree 'l' suffixes on integer constantthrowing NULL, which has integral, not pointer typetime in %s: %ld.%06ld (%ld%%) + to refer to a type member of a template parameter, use `typename %E'too few arguments for formattoo few arguments to %s `%+#D'too few arguments to functiontoo few arguments to function `%s'too few template parameter lists in declaration of `%D'too large function value type, needs %d registers, have only %d registers for thistoo many #pragma options align=resettoo many 'l' suffixes in integer constanttoo many (%d) args to macro `%s'too many alternatives in `asm'too many arguments for formattoo many arguments to %s `%+#D'too many arguments to functiontoo many arguments to function `%s'too many arguments to function `va_start'too many decimal points in floating constanttoo many filenames. Type %s --help for usage infotoo many initialization functions requiredtoo many input filestoo many template parameter lists in declaration of `%D'too many template parameter lists in declaration of `%T'top-level declaration of `%s' specifies `auto'traditional C ignores #%s with the # indentedtraditional C rejects automatic aggregate initializationtraditional C rejects initialization of unionstraditional C rejects string concatenationtraditional C rejects the 'f' suffixtraditional C rejects the 'l' suffixtraditional C rejects the 'u' suffixtraditional C rejects the `U' suffixtraditional C rejects the unary plus operatortrampolines not supportedtrampolines not yet implementedtrap mode not supported for VAX floatstrap mode not supported on Unicos/Mktree check: expected %s, have %s in %s, at %s:%dtree check: expected class '%c', have '%c' (%s) in %s, at %s:%dtrigraph ??%c converted to %ctrigraph ??%c ignoredtry reducing the number of local variablestrying to finish struct, but kicked out due to previous parse errorstrying to make class `%T' a friend of global scopetwo 'u' suffixes on integer constanttwo or more data types in declaration of `%s'two types specified in one empty declarationtype `%#T' argument given to `delete', expected pointertype `%D' is not a direct base of `%T'type `%D' is not a direct or virtual base of `%T'type `%T' composed from a local class is not a valid template-argumenttype `%T' has no destructortype `%T' is disallowed in Java `throw' or `catch'type `%T' is not a base type for type `%T'type `%T' is not derived from `java::lang::Throwable'type `%T' is not derived from type `%T'type `%T' is of non-aggregate typetype `%T' of template argument `%E' depends on template parameter(s)type defaults to `int' in declaration of `%s'type is deprecatedtype is deprecated (declared at %s:%d)type mismatch in conditional expressiontype mismatch with previous external decltype mismatch with previous implicit declarationtype name expected before `&'type name expected before `*'type of `%E' does not match destructor type `%T' (type was `%T')type of `%s' defaults to `int'type of asm operand `%E' could not be determinedtype of external `%s' is not globaltype of formal parameter %d is incompletetype qualifier `%s' not allowed after struct or classtype qualifiers for `%s' conflict with previous decltype qualifiers ignored on function return typetype qualifiers specified for friend class declarationtype size can't be explicitly evaluatedtype specifier `%s' not allowed after struct or classtype specifier omitted for parametertype specifier omitted for parameter `%E'type to vector delete is neither pointer or array typetype/value mismatch at argument %d in template parameter list for `%D'typedef `%D' is initializedtypedef `%s' is initializedtypedef declaration includes an initializertypedef declaration invalid in parameter declarationtypedef name may not be class-qualifiedtypename type `%#T' declared `friend'types are not quite compatibleunable to call pointer to member function hereunable to compute real location of stacked parameterunable to find a register to spill in class `%s'unable to generate reloads for:unable to mmap file '%s'unable to open dynamic dependency '%s'unable to open file '%s'unable to stat file '%s'unable to use '%s' for PIC registerunary `&'unbalanced #endifunbalanced stack in #ifundefined named operand '%s'undefined or invalid # directiveundefined type `id', please import undefining "%s"undefining `%s'undefining `defined'underscore in numberunexpected NOTE as addr_const:unexpected PIC symbolunexpected address expressionunexpected base-type in cris_print_baseunexpected function type needing stack adjustment for __builtin_eh_returnunexpected index-type in cris_print_indexunexpected letter `%c' in locate_error + unexpected multiplicative operandunexpected operandunexpected side-effects in addressunexpected type for `id' (%s)uninitialized const `%D'uninitialized const in `new' of `%#T'uninitialized const member `%D'uninitialized reference member `%D'unionunion `%T' with no named members cannot be initializedunion cannot be made transparentunion type value used where scalar is requireduniversal-character-name '\U%08x' not valid in identifieruniversal-character-name '\u%04x' not valid in identifieruniversal-character-name on EBCDIC targetuniversal-character-name out of rangeunknown -march= option (%s). + Valid options are 1.0, 1.1, and 2.0 + unknown -mdebug-%s switchunknown -mschedule= option (%s). + Valid options are 700, 7100, 7100LC, 7200, and 8000 + unknown ABI specified: '%s'unknown C standard `%s'unknown CPU version %d, using 40. + unknown CRIS cpu version specification in -mtune= : %sunknown CRIS version specification in -march= or -mcpu= : %sunknown action '%s' for '#pragma pack' - ignoredunknown array size in deleteunknown conversion type character 0x%x in formatunknown conversion type character `%c' in formatunknown encoding: `%s' + This might mean that your locale's encoding is not supported + by your system's iconv(3) implementation. If you aren't trying + to use a particular encoding for your input file, try the + `--encoding=UTF-8' optionunknown escape sequence '\%c'unknown escape sequence `\%c'unknown escape sequence: '\%03o'unknown escape sequence: `\' followed by char code 0x%xunknown field `%s' specified in initializerunknown insn modeunknown machine mode `%s'unknown move insn:unknown namespace `%D'unknown opcode %d@pc=%d during verificationunknown register name `%s' in `asm'unknown register name: %sunknown set constructor typeunknown string token %s + unknown {de,en}code_mach_o_hdr return value %dunnamed fields of type other than struct or union are not allowedunnamed initializer for `%T', which has no base classesunnamed initializer for `%T', which uses multiple inheritanceunnamed struct/union that defines no instancesunnamed variable or field declared voidunordered comparison on non-floating point argumentunreachable bytecode from %d to before %dunreachable bytecode from %d to the end of the methodunrecogized wide sub-instructionunrecognizable insn:unrecognized addressunrecognized format specifierunrecognized gcc debugging option: %cunrecognized option `%s'unrecognized option `-%s'unrecognized register name `%s'unrecognized section name "%s"unrecognized supposed constantunrecognized supposed constant in cris_global_pic_symbolunregistered operator %sunspellable token %sunsupported arg to `__builtin_frame_address'unsupported arg to `__builtin_return_address'unsupported operand size for extended registerunsupported versionunsupported wide integer operationunterminated #%sunterminated #%s conditionalunterminated argument list invoking macro "%s"unterminated assembly dialect alternativeunterminated commentunterminated format stringunterminated parameter list in #defineunterminated string or character constantunused arguments in $-style formatunused parameter `%s'unused variable `%s'usage: %s [switches] input outputuse -gdwarf -g%d for DWARF v1, level %duse -gdwarf-2 for DWARF v2use `#line ...' instead of `# ...' in first lineuse of %s and %s together in %s formatuse of %s and %s together with `%%%c' %s formatuse of %s from containing functionuse of `%D' is ambiguoususe of `%s' in templateuse of `%s' in template type unificationuse of `%s' length modifier with `%c' type characteruse of class template `%T' as expressionuse of enum `%#D' without previous declarationuse of linkage spec `%D' is different from previous spec `%D'use of namespace `%D' as expressionuse of old-style castuse of template qualifier outside templateused %d template parameter%s instead of %duseless keyword or type name in empty declarationuser-defined `%D' always evaluates both argumentsusing CONST_DOUBLE for addressusing `typename' outside of templateusing both @FILE with multiple files not implementedusing declaration `%D' introduced ambiguous type `%T'using synthesized `%#D' for copy assignmentusing template type parameter `%T' after `%s'using typedef-name `%D' after `%s'using-declaration for destructorusing-declaration for non-member at class scopevalidate_value_data: Loop in regno chain (%u)validate_value_data: [%u] Bad next_regno for empty chain (%u)validate_value_data: [%u] Bad oldest_regno (%u)validate_value_data: [%u] Non-empty reg in chain (%s %u %i)value of -mfixed-range must have form REG1-REG2varargs function cannot be inlinevariable `%#D' has initializer but incomplete typevariable `%s' declared `inline'variable `%s' has initializer but incomplete typevariable `%s' might be clobbered by `longjmp' or `vfork'variable offset is passed partially in stack and in regvariable or field `%s' declared voidvariable or field declared voidvariable size is passed partially in stack and in regvariable-size type declared outside of any functionvariable-sized object `%D' may not be initializedvariable-sized object may not be initializedvariable-sized object of type `%T' may not be initializedvector overflow in expressionverification error at PC=%dverify_flow_info failedverify_flow_info: Basic block %d succ edge is corruptedverify_flow_info: Duplicate edge %i->%iverify_flow_info: Incorrect blocks for fallthru %i->%iverify_flow_info: Incorrect fallthru %i->%ivirtual array %s[%lu]: element %lu out of bounds in %s, at %s:%dvirtual base `%T' inaccessible in `%T' due to ambiguityvirtual functions cannot be friendsvirtual non-class function `%s'virtual outside class declarationvoid expression between '(' and ')'void value not ignored as it ought to bevolatile register variables don't work as you might wishwarning:warning: warning: -pipe ignored because -save-temps specifiedwarning: -pipe ignored because -time specifiedwarning: `-x %s' after last input file has no effectwarning: already-compiled .class files ignored with -Cwarning: use of obsolete %%[ operator in specsweak declaration of `%s' must be publicweak declaration of `%s' must precede definitionweak declaration of `%s' not supportedwhere case label appears herewidth of `%D' exceeds its typewidth of `%s' exceeds its typewidth of integer constant changes with -traditionalwidth of integer constant may change on other systems with -traditionalwithin this contextwrite %swriting into constant object (arg %d)writing load commands. + + writing through null pointer (arg %d)wrong insn in the fallthru edgewrong number of arguments specified for `%s' attributewrong number of template arguments (%d, should be %d)wrong type argument to abswrong type argument to bit-complementwrong type argument to conjugationwrong type argument to decrementwrong type argument to incrementwrong type argument to unary exclamation markwrong type argument to unary minuswrong type argument to unary pluswrote %ld bytes, expected %ld, to %sxstormy16_print_operand: unknown codeyou must additionally specify either -M or -MMzero or negative size array `%s'zero size array reserves no spacezero width for bit-field `%D'zero width for bit-field `%s'zero width in %s formatzero-length format stringzero-size array `%D'Project-Id-Version: gcc 3.1-b20020415 + POT-Creation-Date: 2002-04-23 12:53+0200 + PO-Revision-Date: 2002-04-24 15:52+0300 + Last-Translator: Nilgün Belma Bugüner + Language-Team: Turkish + MIME-Version: 1.0 + Content-Type: text/plain; charset=UTF-8 + Content-Transfer-Encoding: 8bit + X-Generator: KBabel 0.9.6 + %#D + %s seçenekleri: + + %s: %d: uyarı: makro çaÄŸrısına `%s' bildirimi eklenemiyor + + %s: girdi dosyası `%s' okunurken hata: %s + + %s: ölümcül hata: yardımcı bilgi dosyası %d. satırda bozulmuÅŸ + + %s: uyarı: `%s' bildiriminde parametre listelerinin sayısı çok az + + ;; BirleÅŸtirici toplamları: %d deneme, %d ikame (%d yeni alan gerekir), + ;; %d baÅŸarılı. + + Çalışma süreleri (saniye) + + Hata raporlama iÅŸlemleri için: + + Hata raporlama iÅŸlemleri için: + %s. + + Haydi!? (e / h) + Dile özel seçenekler: + + -g, -f, -m, -O, -W, veya --param ile baÅŸlayan seçenekler ile belirtilen + parametreler doÄŸrudan %s tarafından çalıştırılan alt programlara gönderilir. + Seçenekler ve gönderileceÄŸi alt program -W seçeneklerinden saptanır. + + Çeviri hatalarını adresine bildiriniz. + + + İşlenen sembol tablosu #%d, göreli konumu = 0x%.8lx, cinsi = %s + + Hedefe özel seçenekler: + + Halen belgelenememiÅŸ %s seçenek daha var. + + Halen belgelenememiÅŸ hedefe özel seçenekler var. + + BaÅŸlık ve yük komutları güncelleniyor. + + + kuruculu/yıkıcılı ldd çıktısı. + + write_c_file - çıktı ismi %s, önek %s + %#D `%D' `%T'nin önceki tutamağı tarafından göstergeden üyeye dönüşümde göstergeden üye iÅŸleve dönüşümde üye ilklendirmelerinin öncesinde yeniden sıralanmış olacak %-23.23s [belgelenemeyen] + (Ast süreçlerin komut satırı seçenekleri için '-v --help' kullanın) + (eÄŸer bu anlamda kullandıysanız `typename %T::%D' kullanın) -### -v gibi ama tırnaklı ve virgüllü seçenekler kullanılmaz + --help Bu yardım iletisini gösterir + --help Bu yardım iletisi gösterilir + --target-help Hedefe özel komut satırı seçeneklerini gösterir + -B Derleyicilerin arama dosya yoluna i ekler + -D DeÄŸeri '1' dizgesi olan bir atanır + -D= DeÄŸeri olan bir atanır + -A= ya olumlanır + -A-= etkisiz kılınır + -U undef yapılır + -v Sürüm numarası gösterilir + -E Sadece öniÅŸlem; derleme, çeviri ve ilintileme yapılmaz + -G SAYI Global ve static verileri SAYI bayttan daha + küçükse (bazı hedeflerdeki) bir özel bölüme koyar + -H Kullanılan baÅŸlık dosyası isimlerini gösterir + -C Açıklamalar iptal edilmez + -dM Sonuçta etkin olan makro tanımlarını listeler + -dD Çıktıda makro tanımlarıda içerilir + -dN -dD gibi ancak sadece isimler dışında + -dI Çıktıda #include yönergeleri içerilir + -M make bağımlılıkları üretilir + -MM sistem baÅŸlık dosyaları yoksayılarak -M uygulanır + -MD make bağımlılıkları üretilir ve derleme yapılır + -MMD sistem baÅŸlık dosyaları yoksayılarak -MD uygulanır + -MF DOSYA Bağımlılıklar DOSYAya yazılır + -MG Eksik baÅŸlık dosyası üretilen dosyalar olarak + deÄŸerlendirilir + -MP Tüm baÅŸlık dosyaları için sahte hedefler üretilir + -MQ HEDEF Bir MAKE-tırnaklı HEDEF eklenir + -MT HEDEF Bir MAKE-tırnaksız HEDEF eklenir + -O[SAYI] Eniyileme seviyesi SAYI olarak ayarlanır + -Os Hızdan çok boyut eniyilemesi yapılır + -S Sadece derleme; çevirme ve baÄŸlama yapılmaz + -V gcc'nin kurulmuÅŸsa sürümü çalıştırılır + -W Fazladan uyarılar da verilir + -Wa, Virgül ayraçlı listesini çeviriciye gönderir + -Wl, Virgül ayraçlı i baÄŸlayıcıya gönderir + -Wlarger-than-SAYI Bir nesne SAYI bayttan büyükse uyarır + -Wno-comment{s} Açıklamalar hakkında uyarı verilmez + -Wtraditional Geleneksel C'de bulunmayan özellikler için uyarır + -Wno-traditional Geleneksel C hakkında uyarı verilmez + -Wundef undef'li bir makro #if ile atanmışsa uyarır + -Wno-undef undef'li makrolar hakkında uyarı verilmez + -Wimport #import yönergesi kullanımı hakkında uyarır + -Wno-import #import kullanımı hakkıda uyarı verilmez + -Werror Tüm uyarılar hata olarak deÄŸerlendirilir + -Wno-error Uyarılar hata olarak deÄŸerlendirilmez + -Wsystem-headers Sistem baÅŸlık dosyalarından kaynaklanan uyarılar + verilir + -Wno-system-headers Sistem baÅŸlık dosyalarından kaynaklanan uyarılar + engellenir + -Wall Tüm öniÅŸlemci uyarıları verilir + -Wp, Virgül ayraçlı listesini öniÅŸlemciye gönderir + -Wunused Faydasız uyarılar da verilir + -Xlinker BaÄŸlayıcıya ümanı gönderir + -a Blok ayrımlaması etkinleÅŸtirilir + -aux-info DOSYA Bildirim bilgileri DOSYAda gösterilir + -ax Atlama ayrımlaması etkinleÅŸtirilir + -b gcc kurulmuÅŸsa hedef için çalıştırılır + -b, --branch-probabilities Çıktıda dallanma olasılıkları da içerilir + -c Derler ve çevirir ancak baÄŸlamaz + -c, --branch-counts Yüzde yerine dallanma sayısı alınır + -d[HARFLER] Derleyici aÅŸamalarının dökümlenmesi etkinleÅŸtirilir + -dumpbase DOSYA Derleyici aÅŸamalarının dökümleneceÄŸi DOSYA + -dumpmachine Derleyicilerin hedef iÅŸlemcisini gösterir + -dumpspecs Bütün yerleÅŸik spec dizgelerini gösterir + -dumpversion Derleyicinin sürümünü gösterir + -f, --function-summaries Her iÅŸlev için özet çıktılar + -fcall-saved-YAZMAÇ YAZMAÇ iÅŸlevlere karşı korunmuÅŸ olan olarak imlenir + -fcall-used-YAZMAÇ YAZMAÇ iÅŸlev çaÄŸrıları tarafından bozulmuÅŸ olan + olarak imlenir + -fdiagnostics-show-location=[once | every-line] + Satır sarmalaması sırasında, önek olarak, kaynak + konumu bilgisinin ne sıklıkta gösterileceÄŸi + belirtilir. once: bir kere, every-line: her satırda + -ffixed-YAZMAÇ Derleyiciye YAZMAÇ kullanışsız olarak belirtilir + -finline-limit=SAYI Özümlenen iÅŸlevlerin uzunluÄŸu SAYI ile sınırlanır + -fmessage-length=SAYI Tanı iletilerinin uzunluÄŸu her satırda SAYI + karakterle sınırlanır. 0 satır sarmalamayı engeller + -fpreprocessed Girdi dosyası öniÅŸlenmiÅŸ olarak deÄŸerlendirilir + -ftabstop=SAYI Sütunlu raporlamada sekme uzunluÄŸu + -P #line yönergeleri üretilmez + -$ Tanımlayıcılarda '$' kullanımı engellenir + -remap Dosyalar içerilirken dosya adları yeniden eÅŸlenir + --version Sürüm bilgileri gösterilir + -h ya da --help Bu yardım iletisi gösterilir + -fsched-verbose=SAYI Zamanlama için ayrıntı düzeyi belirtilir + -h, --help Bu yardım iletisini gösterir ve çıkar + -idirafter DİZİN Sistem include dosya yolunun sonuna DİZİN eklenir + -I DİZİN Ana include dosya yolunun sonuna DİZİN eklenir + -I- İnceden inceye include dosya yolu denetimi; + Daha fazla bilgi için belgelere bakınız + -nostdinc Sistem include dizinleri için arama yapılmaz + (-isystem ile belirtilen dizinler kullanılacak) + -nostdinc++ C++ için sistem include dizinleri araması yapılmaz + -o DOSYA Çıktı DOSYAya yazılır + -l, --long-file-names İçerilen kaynak dosyaları için uzun çıktı dosyası + isimleri kullanılır + -lang-c++ Girdi kaynakları C++'da deÄŸerlendirilir + -lang-objc Girdi kaynakları ObjectiveC'de deÄŸerlendirilir + -lang-objc++ Girdi kaynakları ObjectiveC++'da deÄŸerlendirilir + -lang-asm Girdi kaynakları çeviricide deÄŸerlendirilir + -m%-23.23s [belgelenemeyen] + -n, --no-output Bir çıktı dosyası üretilmez + -o DOSYA Çıktıyı DOSYAya yazar + -o DOSYA Çıktı DOSYAya yazılır + -o, --object-directory DİZİN Nesne dosyaları DİZİNde aranır + -p İşlev ayrımlaması etkinleÅŸtirilir + -pass-exit-codes Bir safhada en yüksek hata kodu ile çıkar + -pedantic ISO C gereksinimlerine baÄŸlı tüm uyarılar verilir + -pedantic-errors -pedantic uyarıları hata olarak verilir + -trigraphs ISO C üçlü harfleri desteklenir + -lang-c Girdi kaynakları C'de deÄŸerlendirilir + -lang-c89 Girdi kaynakları C89'da deÄŸerlendirilir + -pedantic ISO C uyumu için gereken uyarılar üretilir. + -pedantic-errors Üretilen hatalar dışında -pedantic gibi + -pipe Aracı dosyalardan ziyade veri yolları kullanılır + -print-file-name= kitaplığının tam dosya yolunu gösterir + -print-libgcc-file-name Derleyiciyle eÅŸleÅŸen kitaplığın ismini gösterir + -print-multi-directory libgcc sürümünün kök dizinini gösterir + -print-multi-lib Komut satırı seçenekleri ile kitaplık arama dizinleri + arasındaki eÅŸleÅŸmeleri gösterir + -print-prog-name= Derleyici elemanı un tam dosya yolunu gösterir + -print-search-dirs Derleyicinin arama yolundaki dizinlerini gösterir + -quiet Derlenen iÅŸlevler ve geçen zaman gösterilmez + -save-temps Aracı dosyaları silmez + -specs= YerleÅŸik özellikler yerine dakilere zorlar + -std= Girdi kaynaklarının bu da olduÄŸu + varsayılır + -std= AÅŸağıdaki uyum standartlarından biri belirtilir: + gnu89, gnu99, c89, c99, iso9899:1990, + iso9899:199409, iso9899:1999 + -+ C++ tarzı özelliklerin ayrıştırılabilmesini saÄŸlar + -w Uyarı iletileri engellenir + -Wtrigraphs Üçlü harfler saptandığında uyarı verilir + -Wno-trigraphs Üçlü harfler hakkında uyarı verilmez + -Wcomment{s} İç içe açıklamalar için uyarı verilir + -time Alt iÅŸlemlerin çalıştırılma zamanlaması + -v Derleyicinin çalıştırdığı programları gösterir + -v, --version Sürüm bilgilerini gösterir ve çıkar + -version Derleyicinin sürüm bilgileri gösterilir + -w Uyarılar engellenir + -x AÅŸağıdaki girdi dosyası dilleri belirtilebilir: + c c++ assembler none + 'none' ile dilin girdi dosyasının uzantısından saptanacağı + öntanımlı durum belirtilmiÅŸ olur + Var fakat daha belgelendirilmedi. + `%#D' burada bildirilmiÅŸ ayrıca burada da `%#D' olarak bildirilmiÅŸ ve `%#D' için üye ilklendiriciler ve `%#T' için taban ilklendiricilerbelirtilmÅŸ olması gereken bir sistem dizini olmayan dizin olarak deÄŸiÅŸtiriliyorsistem dizini olmayan "%s" dizini ile aynı olacak ÅŸekilde deÄŸiÅŸtiriliyor çünkü argüman için dönüşüm süreci daha iyi çünkü yerel üye `%#D' ile aynı isimde çünkü yerel yöntem `%#D' ile aynı isimde çünkü aÅŸağıdaki sanal iÅŸlevler kuramsaldır: çünkü ilkinin en kötü dönüşümü sonuncusununkinden daha iyidir ama %d gerekiyordu ama `%T(const %T&)' ye deÄŸiÅŸtirilmiyor ama `operator=(const %T&)' ye deÄŸiÅŸtirilmiyor `%D' tarafından gizlendi aday dönüşümler `%D' ve `%D' içeriyor `%D' deki modası geçmiÅŸ baÄŸlantı bir yıkıcıya sahip olduÄŸundan kullanılamaz `%D' ile çeliÅŸiyor `%#D' ilklendirmesi çaprazlanıyor tuzak bloÄŸu giriyor POD olmayan `%#D' baÄŸlamına giriyor blok denemesine giriliyor bir sınıf ÅŸablonu umulurken `%T' alındı `%T' türünde bir sabit umulurken `%T' alındı `%D' türünde bir ÅŸablon umulurken `%D' alındı bir tür umulurken `%E' alındı bir tür umulurken `%T' alındı ilk defa burada `%#D' olarak bildirilmiÅŸ ilk tür burada (`%T' den `%T' ye dönüşüm için) `%#D' bildiriminden buradan `%D' çaÄŸrısında `%Q(%#T, %#T)' nin geliÅŸiminde ÅŸablon `%T' gerçeklemesinde düşük ifade içinde `%D' nin %P. argümanının ilklendirilmesi `%D'nin %P argümanı `%D'nin sonucundan ilklendiriliyor geçici olarak `%D'nin sonucundan ilklendiriliyor bağımlı taban sınıftan `%D' yerine bu `%D' ISO standardının kuralları altında eÅŸleÅŸiyor bu `%D' eski kurallar altında eÅŸleÅŸiyor bağımlı taban sınıflardaki isimler nitelemesiz isim aramasında görünür deÄŸil - kalıt türe baÅŸvurması için `%s %T::%T' denebilir ya da `operator=(const %T&)' özgün tanımı burada göründü diÄŸer tür burada `%#D' deÄŸiÅŸtiriliyor `%#D' deÄŸiÅŸtiriliyor (gösterge ya da sınıfa referans olmalı) `%#D' deÄŸiÅŸtiriliyor (gösterge ya da referans olmalı) `%#F' deÄŸiÅŸtiriliyor ihtimal ki bir kurucu için `%T' istiyorsunuz `%#D' taban sınıfta bildirildiÄŸinden tür `%T' mutlak sanal iÅŸlevlere sahip olduÄŸundan `%#D' ilklendirmesi atlanyor `%D' gerçeklenmeye çalışılıyor `%D' deki modası geçmiÅŸ baÄŸlantı kullanılıyor (cfront'un `%#D' kullanması gerektiÄŸi yerde) bildirim sırasının eÅŸlenmesi için yeniden sıralama yapılacak miras kalma sırasının eÅŸlenmesi için yeniden sıralanacak bunu ilklendiricileri kaldırarak aÅŸabilirsiniz %s TOPLAM : ÅŸablon parametresi `%#D' gölgeleniyor"%.*s" yeniden tanımlanmış#'dan sonraki "%s" bir pozitif tamsayı deÄŸil#line'dan sonraki "%s" bir pozitif tamsayı deÄŸil"%s" bir makro ismi olarak kullanılamaz"%s" C++'da bir iÅŸlemimi olduÄŸundan makro ismi olarak kullanılamaz"%s" geçerli bir dosya ismi deÄŸil"%s" öniÅŸlemci için geçerli bir seçenek deÄŸil"%s" tanımlı deÄŸil#if ifadelerinde "%s" geçersizdir"%s" makro parametre listesinde görünmeyebilir"%s" tekrar olumlanmış"%s" yeniden tanımlanmışaçıklama içinde "/*" "Küçük yazmaç sınıfları" uydurması"defined" makro ismi olarak kullanılamaz# %s %.2f %.2f + # iÅŸlemiminden sonra bir makro ismi olmalı#%s "DOSYA" ya da gerektirir#%s bir GCC uzantısıdır#%s bir koÅŸulun içinde deÄŸilgirme ve bırakma dosyaları için #-satırları uyumsuz#else den sonra #elif#elif bir koÅŸulun içinde deÄŸil#if siz #elif #else den sonra #else#else bir koÅŸulun içinde deÄŸil#else'den sonra #elif ya da #else#if siz #else#if siz #endif#error%.*s#if ifadesiz#import artık kullanılmıyor, yerine baÅŸlık dosyası içinde #ifndef sarmalaması kullanın#include "..." araması buradan baÅŸlıyor: + #include <...> araması buradan baÅŸlıyor: + #include "dosyaismi" ya da #include ÅŸeklinde kullanılır#include iç içeliÄŸi çok derinbirncil kaynak dosyasında #include_next#pragma %s %s zaten kayıtlı#pragma %s zaten kayıtlı#pragma GHS endXXX ile önceki startXXX eÅŸleÅŸmiyor#pragma GHS endXXXX öncesinde startXXX yok%s için #pragma oluÅŸumu dosya içerildikten sonra görünüyormain dosyasında '#pragma once'#pragma once eskidi#pragma pack (push, ) ile eÅŸleÅŸmeyen #pragma pack (pop) saptandı#pragma pack(push, %2$s, ) ile eÅŸleÅŸmeyen #pragma pack(pop, %1$s) saptandıbu hedefte #pragma pack(pop[, id], ) desteklenmiyorbu hedefte #pragma pack(push[, id], ) desteklenmiyor#pragma redefine_extname bildirimiyle çeliÅŸiyorbaÅŸlık dosyasının dışındaki '#pragma system_header' yoksayıldı#pragma vtable artık desteklenmiyor#warning%.*s%%R den sonra %%B/C/D/E gelmiyor%%S tamamı sıfırların maskı olarak hesaplandı%%S tamamı birlerin maskı olarak hesaplandı%3$s dosyasındaki %2$d daldan %%%1$6.2f dal çalıştırıldı + %3$s iÅŸlevindeki %2$d dalın %%%1$6.2f dalı çalıştırıldı + %3$s dosyasındaki %2$d daldan %%%1$6.2f dal en az bir kere alındı + %3$s iÅŸlevindeki %2$d dalın %%%1$6.2f dalı en az bir kere alındı + %3$s dosyasındaki %2$d çaÄŸrıdan %%%1$6.2f çaÄŸrı çalıştırıldı + %3$s iÅŸlevindeki %2$d çaÄŸrıdan %%%1$6.2f çaÄŸrı çalıştırıldı + %3$s dosyasındaki %2$d satırın %%%1$6.2f satırı çalıştırıldı + %3$s iÅŸlevindeki %2$d satırın %%%1$6.2f satırı çalıştırıldı + %A baÅŸlangıç, bitiÅŸ, adım-sayısı deÄŸerlerinin %0 daki aracı hesaplamalarda taÅŸma(lar)dan dolayı gerçekleme-bağımlı sonuçlanacağı biliniyor%A baÅŸlangıç, bitiÅŸ, adım-sayısı deÄŸerlerinin %0 da yinelemesiz sonuçlanacağı biliniyor%A bitiÅŸ deÄŸeri artı adım sayısının %0 da taÅŸacağı biliniyor%0%C deki %B den %A%A adım sayısının %0 da 0 (sıfır) olacağı biliniyor%1 de deyim iÅŸlev referansı için %0 sayıda olarak (kukla argüman `%B ile baÅŸlayan) çok az argüman %A%1 de deyim iÅŸlev referansı için %0 sayıda olarak çok az argüman %A%d kurucu bulundu + %d serbestleÅŸtirici bulundu + %d çerçeve tablosu bulundu + %i bitlik kip bunun içinde derlenmiÅŸ deÄŸil:%s%s + %s %s %+#D%s %+#D%s%s %+#T%s %D(%T) %s %D(%T, %T) %s %D(%T, %T, %T) %s %T %s (GCC) %s + %s `%s' `%s'protokolünü tamamen gerçekleÅŸtirmiyor%s prototipten dolayı bir «double»dan çok bir «float»%s prototipten dolayı bir gerçel sayıdan çok bir karmaşık sayı%s prototipten dolayı bir tamsayıdan çok bir karmaşık sayı%s prototipten dolayı bir karmaşık sayıdan çok bir gerçel sayı%s prototipten dolayı bir tamsayıdan çok bir gerçel sayı%s prototipten dolayı bir karmaşık sayıdan çok bir tamsayı%s prototipten dolayı bir gerçel sayıdan çok bir tamsayı%s prototipten dolayı signed%s prototipten dolayı unsigned%s girdinin sonunda"%2$s"den önce %1$s%2$s'%3$c'den önce %1$s%2$s'\x%3$x'den önce %1$s'%2$s' dizgeciÄŸinden önce %1$s`%2$c' den önce %1$s`%2$s' den önce %1$s`%2$s' dizgeciÄŸinden önce %1$s`\%2$o' den önce %1$ssayısal sabitten önce %s%s dizge sabitten önce%s farklı gösterge türleri `%T' ve `%T' arasında bir çevrimi kaldırır%s aşırı yüklü iÅŸlevin adresini çözümleyemiyor%s bir bölüm türü çeliÅŸkiye sebep oluyor%s parametrelerin içinde tanımlanmış%s iptal edildi, normal hata ayıklama seçeneÄŸi kullanın%s gösterge hedef türündeki niteleyicileri iptal ediyor%s %%n$ terim numarası biçemlerini desteklemez%s %s desteÄŸi vermiyor%s %s'i `%%%c' %s biçemiyle desteklemiyor%s `%%%c' %s biçemini desteklemiyor%s `%%%s%c' %s biçemini desteklemiyor%s `%s' %s uzunluk deÄŸiÅŸtiricisini desteklemiyor%s (`%T %s %T' iÅŸlemimi için)%s (`%T %s' iÅŸlemimi için)%s (`%T ? %T : %T' üç terimlisi için)%s (`%T [%T]' iÅŸlemimi için)%s (`%s %T' iÅŸlemimi için)%s biçemi, %s arg (%d. arg)uyumsuz gösterge türünden %s%s iÅŸlev, %d bölge, offset = %ld (0x%.8lx) + %s %s içermiyor%s'in `%s' isimli bir üyesi yok%s %s' ve `%%%c' %s biçemiyle yoksayıldı%s %s' ile %s biçeminde yoksayıldıöniÅŸlemci yönergesi içinde %s%s bir blok aygıtıdır%s iÅŸlev `%E' için çaÄŸrı deÄŸil referanstır%s artık kullanılmıyor, lütfen ayrıntılar için belgelere bakınız%s bu yapılandırma ile desteklenmiyor%s %s türünde deÄŸil (%d. arg)%s beklenenden daha kısa%s çok büyük%s bir çevirim olmaksızın göstergeden tamsayı yapıyor%s bir çevirim olmaksızın tamsayıdan gösterge yapıyor%s nitelemeyenden niteleyen iÅŸlev göstergesi yapıyor%s artık desteklenmiyor -- yerine -fno-vxt -ff90 deneyin%s artık desteklenmiyor -- yerine -fvxt deneyin%s `%E' nin `%T' için negatif deÄŸeridirsalt-okunur konumun %ssalt-okunur üye `%2$s' için %1$ssalt-okunur deÄŸiÅŸken `%2$s' için %1$sasm'de %s niteleyicisi yoksayıldı%s %d çıkış durumu ile sonuçlandı%s döngü sayısı >= tür geniÅŸliÄŸi%s döngü sayısı negatif%s %d sinyali ile sonlandırıldı [%s]%s`%T' nin `%T' den %sNULL'dan gösterge olmayan tür `%T' ye %s%s `%%%c' %s biçemi ile kullanılmışprototipten dolayı farklı geniÅŸlikle %s%s%s%s sürüm %s (%s) + %s GNU C sürüm %s tarafından derlendi. + %s%s%s sürüm %s (%s) CC tarafından derlendi. + %s-%s aralığı boÅŸ%s. + %s%s: %d: `%s' kullanıldı ama SYSCALLS dan eksik var + %s: %d: uyarı: `%s' öniÅŸlem tarafından dışlandı + %s: %d: uyarı: %s tanımı dönüştürülmedi + %s: %d: uyarı: `%s' bulundu ama `%s' gerekli + %s: %d: uyarı: `%s' için extern tanımı yok + %s: %d: uyarı: kaynak çok karışık + %s: %d: uyarı: varargs iÅŸlev bildirimi dönüştürülmedi + %s: %s%s: %s derleyici bu sitemde kurulu deÄŸil%s: %s %d durumuyla çıktı + %s: %s: %s: %s: durum alınamıyor: %s + %s: `%s' gerçeklemesi içinde: + %s: NaN - iÅŸlem üretiyor%s: Bir dizin deÄŸil%s: `%s' dönüştürülmedi + %s: argüman alanı hatası%s: `%s' dosyasının kipi deÄŸiÅŸtirilemiyor: %s + %s: temiz dosya `%s' oluÅŸturulamıyor/açılamıyor: %s + %s: çıktı dosyası `%s' oluÅŸturulamıyor/açılamıyor: %s + %s: yardımcı bilgi dosyası `%s' silinemiyor: %s + %s: `%s' silinemiyor: %s + %s: `%s' dosyası için durum bilgileri alınamadı: %s + %s: yardımcı bilgi dosyası `%s' için durum alınamıyor: %s + %s: `%s' -> `%s' bağı oluÅŸturulamıyor: %s + %s: yardımcı bilgi dosyası `%s' okumak için açılamıyor: %s + %s: `%s' okumak için açılamadı: %s + %s: yardımcı bilgi dosyası `%s' okunamıyor: %s + %s: çalışma dizini alınamıyor: %s + %s: bir COFF dosyası olarak açılamıyor%s: `%s' derleniyor + %s: '%s' için çeliÅŸki listesi: + %s: '%s' extern tanımları çeliÅŸiyor + %s: `%s' dönüştürülüyor + %s: `%s' iÅŸlevinin bildirimi dönüştürülmedi + %s: '%s' bildirimleri dönüştürülmeyecek + %s: %s' iÅŸlevinin tanımı dönüştürülmedi + %s: `%s' yardımcı bilgi dosyasında kapama hatası: %s + %s: `%s' yardımcı bilgi dosyasında okuma hatası: %s + %s: `%s' dosyası yazılırken hata: %s + %s: `%s' tanımı %s(%d) de bulundu + %s: iÅŸlev tanımı dönüştürülmedi + %s: iÅŸlev eÅŸsizliÄŸi%s: `%s' iÅŸlevi için genel bildirim araya eklenmedi + %s: girdi dosyası isimlerinin soneki .c olmalıdır: %s + %s: dahili çıkış + %s: geçersiz dosya ismi: %s + %s: birleÅŸtirme yapılmadığından birleÅŸtirici girdi dosyası kullanılmadı%s: `%s' iÅŸlevi için yerel bildirim araya eklenmedi + %s: `%s' için `%s' dosyasında çok sayıda static tanımı + %s: bir COFF dosyası deÄŸil%s: kapsamın üstten taÅŸma hatası%s: kısmi kesinlik kaybı%s: altyordam %d ölümcül sinyalini aldı + %s: tam kesinlik kaybı%s: kapsamın alttan taÅŸma hatası%s: kullanımı '%s [ -VqfnkN ] [ -i ] [ dosya ... ]' + %s: kullanımı '%s [ -VqfnkNlgC ] [ -B ] [ dosya ... ]' + %s: bekliyor: %s + %s: uyarı: %s: uyarı: `%s' dosyasının ismi `%s' yapılamıyor: %s + %s: uyarı: `%s' zaten `%s' içine kaydedilmiÅŸ + %s: uyarı: SYSCALLS dosyası `%s' kayıp + %s: uyarı: `%s' dosyası için okuma eriÅŸimi yok + %s: uyarı: `%s' için `%s' dosyasında ststic tanımı yok + %s: uyarı: `%s' dosyasını içeren dizine yazma izni yok + %s: uyarı: `%s' dosyası için yazma eriÅŸimi yok + %s: uyarı: `%s' bildiriminde parametre listelerinin sayısı çok fazla + %1$s: uyarı: `%4$s' iÅŸlevi için biçimseller listesi %2$s(%3$d) den kullanılıyor + %s: uyarılar hata olarak ele alınıyor + %s: `%s' dönüşüm dosyası olacaktı + %s:%d: `%s' den gerçeklenmiÅŸ + %s:%d: buradan gerçeklenmiÅŸ + %s:%d: önceki hatalar yüzünden bozulmuÅŸ, bırakılıyor + %s:%d: `%s' iÅŸlevinin bildirimi farklı ÅŸekiller alıyor + %s:%d: uyarı: %s=%s sayısal deÄŸerler deÄŸil.%s=%s çok büyük%smember function `%D', `%T' yöntem niteleyicisini içeremez'##' bir makronun her iki ucunda da görünemez'#' iÅŸaretinden sonra bir makro parametresi yoktanımlayıcı içinde '$' karakter(ler)i'%D' bir tür olarak kullanılmış ama tür olarak tanımlı deÄŸil'(' gerekli')' gerekli')' ya da terim gerekli'*' gerekli':' gerekli';' gerekli'Ll' ve 'lL' geçerli tamsayı sonekleri deÄŸil'[' gerekli']' gerekli']' gerekli ve tür ifadesi geçersiz'class' gerekli'class' ya da 'this' gerekli'lul' geçerli bir tamsayı soneki deÄŸil'{' gerekli(C++'da "%s" "%s" için bir alternatif dizgeciktir)((anonim))(BildirilmemiÅŸ her tanıtıcı sadece bir kez raporlanır)(her bildirimsiz tanımlayıcı sadece iÅŸlevin içinde ilk göründüğünde bir kere raporlanır)(bir üye göstergesi sadece `&%E' ile ÅŸekillendirilebilir)(bir sınıf dışı ilklendirme gerekli)(devam):(önceki case deyimlerinin zarflama eylemleri kendi içerinde yıkıcıları gerektiriyor)(eÄŸer istediÄŸiniz bu deÄŸilse, iÅŸlev ÅŸablonunun zaten bildirilmiÅŸ olduÄŸundan emin olduktan sonra burada iÅŸlev isminden sonra bir <> ekleyin)-Wno-non-template-friend bu uyarıyı iptal eder(%s için geçerli ama o dil seçilmedi)(%s için near ilklendirme)(bu durumda `va_arg'a `%s' aktarılmalı, `%s' deÄŸil)(%2$s için statik %1$s)(her girdi dosyasında sadece bir kere raporlanacaktır)(statik veri üyelerini ilklendirmek için `=' kullanın), + %s:%d, + %s:%u--driver artık desteklenmiyorStandart girdiden girdi alınırken -E gereklidir-G ile -membedded-pic uyumsuz-G öntanımlı olan PIC kodu ile uyumsuz-I- iki kere belirtilmiÅŸ -R, -o gerektirir-Wformat-extra-args -Wformat'sız yoksayıldı-Wformat-nonliteral -Wformat'sız yoksayıldı-Wformat-security -Wformat'sız yoksayıldı-Wformat-y2k -Wformat'sız yoksayıldı-Wid-clash-UZUNLUK artık desteklenmiyor.-Wmissing-format-attribute -Wformat'sız yoksayıldıC++ da -Wno-strict-prototypes desteklenmiyor-Wuninitialized seçeneÄŸi -O olmaksızın desteklenmiyorAda için -c ya da -S gerekli-f%s ile -msdata=%s uyumsuz.-f%s yoksayıldı (tüm kod konum bağımsız)68HC11/68HC12 için -f%s yoksayıldı (desteklenmiyor)Unicos/Mk için -f%s yoksayıldı (desteklenmiyor)-f%s hedef için yoksayıldı (bütün kod yerden bağımsız)-f%s artık desteklenmiyor-f%s desteklenmiyor: yoksayıldıbu hedef makinada -f%sleading-underscore desteklenmiyor-fPIC ve -fpic bu yapılandırma ile desteklenmiyor-fPIC ile -mcall-%s uyumsuz.-fPIC ÅŸu an 68000 veya 68010 için desteklenmiyor + -fPIC -mcoff ile geçerli deÄŸil-fPIC -mcoff ile geçerli deÄŸilbu hedefte -fdata-sections desteklenmiyor-fdata-sections AIX'de desteklenmiyor-femit-class-file -fsyntax-only ile birlikte kullanılmalıHata ayıklama sırasında AIX'de -ffunction-sections etkisizdir-ffunction-sections iptal edildi; ayrımlamayı mümkün kılmıyor-ffunction-sections bazı hedeflerde hata ayıklamayı etkileyebilirbu hedefte -ffunction-sections desteklenmiyor-fhandle-exceptions'ın -fexceptions olarak ismi deÄŸiÅŸtirilmiÅŸti (ve ÅŸimdi öntanımlı olarak böyle)-fjni ve -femit-class-file uyumsuz-fjni ve -femit-class-files uyumsuz-fname-mangling-version artık desteklenmiyor-fpic ve -mapcs-reent uyumsuz-fpic -mcoff ile geçerli deÄŸil-fpic -mcoff ile geçerli deÄŸil-fprefetch-loop-arrays, -Os ile desteklenmiyorbu hedefte -fprefetch-loop-arrays desteklenmiyor-fprefetch-loop-arrays bu hedef için desteklenmiyor (-march seçeneÄŸini deneyin)-frepo, -c ile kullanılmalı-g sadece bu iÅŸlemci üzerinde GAS kullanıldığında desteklenir,-g seçeneÄŸi iptal edildi-g ve -mno-apcs-frame beraberce anlamlı hata ayıklama bilgisi vermeyebilir-mabi=%s ile -mips%d uyumsuz-maix64 ile POWER mimarisi uyumsuz-maix64 gereksinimi: 32 bit adreslemeli 64 bit hesaplama henüz desteklenmiyor.-maix64 seçeneÄŸi PowerPC64 mimarisinin etkin kalmasını gerektirir-malign-double 64bitlik kipte iÅŸ yapmaz-malign-functions artık kullanılmıyor, yerine -falign-functions kullanın-malign-functions=%d 1 ile %d arasında deÄŸil-malign-jumps eskidir, yerine -falign-jumps kullanın-malign-jumps=%d 1 ile %d arasında deÄŸil-malign-loops artık kullanılmıyor yerine -falign-loops kullanın-malign-loops=%d 0 ile %d arasında deÄŸil-malign-loops=%d 1 ile %d arasında deÄŸil-mapcs-26 ve -mapcs-32 birlikte kullanılamayabilir-mapcs-stack-check ile -mno-apcs-frame uyumsuz-max-stackframe=%d 0 ile %d arasında olmadığından kullanışsız-mbig-endian ve -mlittle-endian birlikte kullanılamayabilir-mbnu210 yoksayıldı (seçenek artık kullanılmıyor)-mbranch-cost=%d 0 ile 5 arasında deÄŸil-mbsd ve -mxopen uyumsuz-mbsd ve -pedantic uyumsuz-mcall-aixdesc «big endian» olmalı`-mcmodel=' 32bit sistemlerde desteklenmiyor-membedded-pic ile -mabicalls uyumsuz-mentry sadece -mips-16 ile anlamlıdır-mhard-float desteklenmiyorUnicos/Mk üzerinde -mieee desteklenmiyor-mieee-with-inexact Unicos/Mk üzerinde desteklenmiyor-mips%d 64 bit fp yazmaçlarını desteklemez-mips%d 64 bit gp yazmaçlarını desteklemez-mips%d desteklenmiyor-mlong-double-64 ile -m64 birarada izin verilmez-mmultiple küçük ilkli bayt sıralaması kullanılan sistemlerde desteklenmez-mpic-register=, -fpic olmaksızın kullanışsız-mpreferred-stack-boundary=%d %d ile 12 arasında deÄŸil-mregparm=%d 0 ile %d arasında deÄŸil-mrelocatable ile -mcall-%s uyumsuz.-mrelocatable ile -mno-minimal-toc uyumsuz.-mrelocatable ile -msdata=%s uyumsuz.64bitlik kipte -mrtd çaÄŸrı uzlaşımı desteklenmiyor-ms2600, -ms olmaksızın kullanılmış-msdata=%s ile -mcall-%s uyumsuz.-mshort-data-%s ve PIC uyumsuz-mshort-data-%s çok büyük-msingle-float ve -msoft-float birlikte belirtilemez.-msoft-float ve -mhard_float birlikte kullanılamayabilir-mstring küçük ilkli bayt sıralaması kullanılan sistemlerde desteklenmez-msystem-v ile -mthreads uyumsuz-msystem-v ile -p uyumsuz-mtrap-large-shift ve -mhandle-large-shift uyumsuz-mxopen ve -pedantic uyumsuz-p seçeneÄŸi desteklenmiyor: yerine -pg kullanın-p ayrımsaması artık desteklenmiyor. yerine -pg kullanın.-param seçeneÄŸinde argüman eksik-pedantic ve -traditional birlikte kullanılamaz-pg ve -fomit-frame-pointer uyumsuz-pipe desteklenmiyor.-pipe desteklenmiyor-shared -mcoff ile geçerli deÄŸil-static -mcoff ile geçerli deÄŸil-symbolic -mcoff ile geçerli deÄŸil-traditional ve -ansi birlikte kullanılamaz-traditional kullanımdan kalkacak ve kalkmış da olabilir-traditional C++'da desteklenmiyor-trigraphs ve -traditional birlikte kullanılamaz.da dosyasının içeriÄŸi çok erken atıldı.da dosyasının içeriÄŸi çok erken atıldı + .da dosyasının içeriÄŸi atılmadı.da dosyasının içeriÄŸi atılmadı + 31 bitlik kip32381 fpu387 komut kümesi iptal edildi, SSE aritmetiÄŸi kullanılıyor64 bitlik kip. satırında: + : `%s' JDK1.1(TM) özelliÄŸi;; Karıştırıcı istatistikleri: %d deneme, %d ikame (%d yeni alan gerekir), + ;; %d baÅŸarı. + + ;; %d den %d ye kadar, %d kümelik blok iÅŸleniyor. + APCS yeniden giriÅŸli kod desteklenmiyor. YoksayıldıDeÄŸiÅŸkene ASSIGN çok küçükASSIGN'lı etiket %0 daki `%A' içine sığmıyor -- daha geniÅŸ çocuklama kullanınASSIGN'lı FORMAT belirteci çok küçükASSIGN'lı GOTO hedef deÄŸiÅŸkeni çok küçük%0 daki eriÅŸim belirteci arayan giren deyimler olmaksızın %1 deki türetilmiÅŸ tür deyiminden hemen sonra olmalıEriÅŸim belirteci ya da PRIVATE deyimi %0 da modülün özellikler parçası dışında türetilmiÅŸ tür tanımı için geçersizINCLUDE araması için dizin eklenirSınıf dosya yoluna dizini eklerÇevirici çıktısına fazladan açıklama eklerEk hata ayıklama iletileri çıktılarTüm dallanma hedefleri bayt sınırlarına ayarlanırTüm döngüler 32 bitlik sınıra hizalanırKod ve veri 32 bitlik hizalanırKodu 8 baytlık sınıra hizalarDizge iÅŸlemleri hedefi hizalanırdouble'lar word sınırlarına hizalanırSadece atlanarak ulaşılabilen hedefler bayt + sınırlarına ayarlanırdouble'lar dword sınırlarına hizalanırİşlevlerin baÅŸlangıcı hizalanırDöngü baÅŸlangıçları bayt sınırlarına ayarlanırHizalama >word sınırlara yapılırBit alanı taban türüne hizalama yapılırDeÄŸiÅŸkenler 16 bitlik sınıra hizalanırDeÄŸiÅŸkenler 32 bitlik sınıra hizalanırSembol isimlerinde $ kullanımına izin verilirINTEGER ve LOGICAL aradönüşümlerine izin verilirDOUBLE COMPLEX Z nin REAL(Z) ve AIMAG(Z) olarak + verilmesine izin verilirRTL üretiminde geçersiz 3 terimli komut üretimine izin verir? iÅŸlemiminin argümanları olarak farklı türlere + izin verilirYazmaçlarda tutulan iÅŸlev adreslerine izin verilirIEEE veya ANSI standartlarını bozabilen matematiksel + eniyilemelere izin verilirASSIGN'lı deÄŸiÅŸkenlerin olaÄŸan kopyalamasına izin + verilirFazla yüklerin tahmini hareketine izin verilirYük oluÅŸturmayanların tahmini hareketine izin verilirBazı yüklerin tahmini hareketine izin verilirBelirteçlerin içinde $ kullanımına izin verilirRPTB/DB için yineleme sayılarının unsigned olmasına izin verirAlmaşık çaÄŸrı uzlaşımı%0 daki alternatif return belirteci bir iÅŸlev için geçerli deÄŸil%0 daki alternatif return belirteci bir ana program birimi için geçerli deÄŸilAlternatif çaÄŸrı uzlaşımıgcj üretimi olmayan sınıfların arÅŸivleri daima + denetlenirBellekteki kayan noktalı argümanlar daima aktarılırBit alanı daima int boyutlu iÅŸlenirYerleÅŸik `%A' kullanımı %0 da belirsiz [info -f g77 M CMPAMBIG]`%A' nın %B. argümanı %0 da %C iken %1 de %D [info -f g77 M GLOBALS]Dizi`%A' %0 da elde edilemeyecek kadar büyük%0 da dizi elemanı tanımlı aralığının dışındaEQUIVALENCE deyimindeki `%A' için dizi ya da alt dizge özelliÄŸi kapsam dışı`%A' için dizi veya alt dizge özelliÄŸi %0 daki deyim içinde kapsam dışıEQUIVALENCE deyimindeki skalar deÄŸiÅŸken `%A' için dizi referans`%A' eÅŸdeÄŸeri için dizi alt indisi #%B kapsam dışı%0 da deyim içindeki `%A'nın ilklendirmesi için dizi alt indisi #%B kapsam dışı%0 da deyim iÅŸlevi referansı içindeki kukla argüman `%A' için %1 de dizi belirtilmiÅŸGAS varsayılırTüm double'lar hizalı kabul edilirArgümanların bir diÄŸerine ya da globallere takma ad + olmadığı varsayılırArgümanların globallerden baÅŸkasına takma ad + olamayacağı varsayılırBüyük ilkli baytlar, küçük ilkli word'ler varsayılırint türün 8 bitlik tamsayı olduÄŸu varsayılırYerli iÅŸlevlerin JNI kullanarak oluÅŸtuÄŸu varsayılırNormal C çalıştırma ortamı var sayılırdouble'ların hizalanmamış oldukları varsayılırKüçük adres alanı varsayılırSıkı takma ad kuralları uygulanacağı varsayılırHedef MİB büyük ilkli yapılandırmaya sahip kabul edilirHedef MİB küçük ilkli yapılandırmaya sahip kabul edilirGöstergelerin hizalı olabilecekleri varsayılırGöstergelerin hizalı olmadıkları varsayılırStandart kitaplıkların ve main iÅŸlevinin olmadığı + varsayılırHizasız eriÅŸimlerin sistem tarafından yapıldığı varsayılırTüm çalıştırılanların sayısı sıfır kabul ediliyor. + %0 daki, '!' ve '/*' geçerli açıklama sınırlayıcılar deÄŸil%0 da, INCLUDE dosyası %A var ama okunabilir deÄŸil%0 da, INCLUDE iç içeliÄŸi çok derin%0 da, INTERFACE deyimi için ASSIGNMENT yerine atama iÅŸlemimi (=) olan OPERATOR belirtilmesi%0 da, INTERFACE deyimi için ASSIGNMENT yerine atama iÅŸlemimi (=) olmayan OPERATOR belirtilmesiÜst düzeyde:%0 daki ortak alanlar `%A' ve `%B' eÅŸitlenmeye çalışılıyorÖnsöz/sonsöz komutlarını silmeye çalışırCOMMON alan, `%A' EQUIVALENCE'ı üzerinden kendi baÅŸlangıç noktasından öteye geniÅŸletilmeye çalışılıyorDallanma komutlarının gecikme yuvalarını doldurmaya + çalışırBunun 2.kuvvetine ayarlanmış yığını tutmaya çalışırÖzdeÅŸ sabitler derleme birimlerine karşın + katıştırılmaya çalışılırÖzdeÅŸ sabitler ve sabit deÄŸiÅŸkenler katıştırılmaya + çalışılır%0 daki sabit sıfır bir üsse yükseltilmeye çalışılıyor%0 da `%A' için ikinci ilk deÄŸer belirtilmeye çalışılıyor%0 daki `%A' nın elemanı için ikinci bir ilk deÄŸer belirtilmeye çalışılıyorGeleneksel K&R tarzı C desteklemeye çalışılırOtomatik önce/sonra eksiltme arttırmaya izin verilirOtomatik önce/sonra eksiltme arttırmaya izin verilmezDallanma sorunlarını azaltmak için dal hedefleri otomatik olarak hizalanır.%0 daki BLOCK DATA ismi gereksiz, %1 de ise hiç bir isim belirtilmemiÅŸTersbölüler ve karakter/hollerith sabitler özel + deÄŸildir (C-tarzı)Büyük bellek modeli%0 da boÅŸ ortak blok ilklendirildiDallanmaların bedeli (1-5, keyfi birimler)Oynak bellek referansları için veri arabelleÄŸi atlanırC++ tarzı açıklamalara ISO C89'da izin verilmezÖntanımlı `%s' paketi bulunamıyor. CLASSPATH ortam deÄŸiÅŸkenini ve arÅŸivlere eriÅŸimi kontrol edinizHizalama sınırlamalarından dolayı EQUIVALENCE tarafından yönlendirilmiÅŸ olarak `%A' yerleÅŸtirilemiyorDizi boyutları bildirim sırasında belirtilemezAdres çözümlenemez%0 da =ilklendirme-ifadesi nesne listesinden önce `::' olmadıkça belirtilemezYığın göstergesinin düşük 8 biti deÄŸiÅŸtirilirDerleyicide dal maliyetlerini deÄŸiÅŸtirirYığın göstergesi kesmeler etkisizleÅŸtirilmeden deÄŸiÅŸtirilirKoÅŸullu çalışmaya geçiÅŸ için eÅŸik deÄŸerini deÄŸiÅŸtirirÅžablon gerçeklemeleri yayınlandığında deÄŸiÅŸtirilir%0 daki sembol isminde `%A' karakteri (örnek olarak) küçük harf%0 daki sembol isminde `%A' karakteri (örnek olarak) büyük harf%0 sembol isminde `%A' karakterinden sonra küçük harf gelmiyor%0 daki karakter sabit %1 de bir tek tırnakla kapanmalıydıSözdizimi denetimi yaptıktan sonra dururnew iÅŸlemiminin dönen deÄŸeri denetlenirSınıf, ana yöntem olarak kullanılırGirdi kodlaması seçilir (öntanımlı yerelden gelir)Sınıf ya da arabirim bildirimi gerekliKod boyutu: small, medium veya largeOrtak blok `%A' %0 da %B %D uzunlukta iken %1 de %C %EOrtak blok `%A' %0 da doÄŸrudan ya da dolaylı KAYITLI iken %1 de deÄŸilProgram küçük harflerle yazılmış olarak derlenirProgram büyük harflerle yazılmış olarak derlenir32 bit göstergeler için derleme yapılır64 bit göstergeler için derleme yapılırETRAX 100 (CRIS v8) için derleme yapılırETRAX 4 (CRIS v3) için derleme yapılır68HC11 için derleme yapılır68HC12 için derleme yapılırMMU-suz Etrax 100-tabanlı elinux sistemi için derlerThumb için derler, ARM için deÄŸilv850 iÅŸlemcisi için derleme yapılırv8plus ABI için derleme yapılırSadece ISO C89 için derleme yapılırGöstergeler bu üçlüden olarak derlenir: deÄŸer, taban ve son16 bitlik tamsayı kiple derleme yapılır32 bitlik tamsayı kiple derleme yapılır%s + seçenekleriyle yapılandırıldı. + `%0 ve %1 deki G/Ç denetimi özellikleri çeliÅŸkiliBayt bayt eriÅŸilen belleÄŸin yavaÅŸ olduÄŸu varsayılırTüm göstergeli bellek referanslarının anlık + olduÄŸu varsayılırGlobal verilerin tüm bellek referanslarının anlık + olduÄŸu varsayılırStatik verilerin tüm bellek referanslarının anlık + olduÄŸu varsayılır`int' tür 16 bit geniÅŸlikte varsayılır`int' tür 32 bit geniÅŸlikte varsayılırAlan '%s' için ConstantValue özniteliÄŸi yanlış türde%0 daki yapı ismi hiçbir DO yapısının yapı ismiyle uyuÅŸmuyor%0 daki yapı ismi %1 dakiyle aynı deÄŸil%0 daki yapı ismi gereksiz, %1 de hiç yapı ismi belirtilmemiÅŸConstructor çaÄŸrısı bir kurucu içindeki ilk ÅŸey olmalı%0 daki devam belirteci 6. sütun olmalı [info -f g77 M LEX]IEEE yakalama kipi denetlenirÜretilmiÅŸ kayan nokta yuvarlama kipi denetlenirVerilen kayan nokta olaÄŸandışılıklarının duyarlığı denetlenirKayan noktalı sabitler tek duyarlıklı sabitlere + dönüştürülürKullanmadan önce bellek adres sabitlerini + yazmaçlara kopyalarKullanmadan önce bellek iÅŸlemimlerini yazmaçlara + kopyalarTelif Hakkı (C) 2001 Free Software Foundation, Inc. + Telif Hakkı (C) 2002 Free Software Foundation, Inc. + Temel blok dosyası %s açılamadı. + %s veri dosyası açılamadı. + %s çıktı dosyası açılamadı. + Program akış diyagramı dosyası %s açılamıyor. + %s kaynak dosyası açılamadı. + GKA uygulaması oluÅŸtururKonsol uygulaması oluÅŸturulurgcov için gereken veri dosyaları oluÅŸturulur%s oluÅŸturuluyor. + %0 daki etikete DO deyimi referansı ve %2 deki etiket tanımı %1 de baÅŸlayan sonlandırılmamış blok tarafından dışlanıyor%1 deki etikete DO deyimi referansı %0 daki tanımını izliyor%0 ve %2 daki etikete DO deyimi referansları %1 de baÅŸlayan sonlandırılmamış blok tarafından dışlanıyorDW_LOC_OP %s daha yazılmadı + Derleyici argüman desteÄŸinde hata ayıklarDerleyici bellek adresi desteÄŸinde hata ayıklarDerleyici yığıt desteÄŸinde hata ayıklarYığından iÅŸlev argümanlarının çekilmesini ertelerMIL-STD 1753 yerleÅŸikleri silinirlibU77 yerleÅŸikleri silinirHatalı arabirimli libU77 yerleÅŸikleri silinirFORTRAN-77 olmayan yerleÅŸiklerin F90 destekleri + silinirFORTRAN-77 olmayan yerleÅŸiklerin VXT FORTRAN + destekleri silinirFORTRAN-77 olmayan yerleÅŸiklerin f2c destekleri + silinirFORTRAN-77 olmayan yerleÅŸiklerin g77 destekleri + silinirKullanışsız null gösterge denetimlerini silerDil standartı saptanırSınıf dosyalarının bulunduÄŸu dizinGNU as yoluyla Dwarf 2 hata ayıklama satır bilgilerini etkisizleÅŸtirirMIL-STD 1753 yerleÅŸikleri iptal edilirMPY||ADD ve MPY||SUB komutları kapatılırTransmeta picoJava uzantıları kullanılmazNesne dizileri içinde saklamalar için atanabilirlik + denetimleri kapatılırDizi sınırları denetimi iptal edilirHata ayıklama kapatılırYordamlar arası sorunlar hakkındaki ölümcül tanılar + iptal edilirBirleÅŸik çarpma/toplama ve çarpma/çıkarma FP komutları üretilmezlibU77 yerleÅŸikleri iptal edilirHatalı arabirimli libU77 yerleÅŸikleri iptal edilirGeliÅŸtirilmekte olan yeni özellikler kapatılırFORTRAN-77 olmayan yerleÅŸiklerin g77 destekleri + iptal edilirFORTRAN-77 olmayan yerleÅŸiklerin F90 destekleri + iptal edilirFORTRAN-77 olmayan yerleÅŸiklerin VXT FORTRAN + destekleri iptal edilirFORTRAN-77 olmayan yerleÅŸiklerin f2c destekleri + iptal edilirSeçimlik teÅŸhisler yapılmazEÅŸzamanlı komutlar kapatılırAÅŸamaların yeniden organizasyonu yapılmazexternal'lara altçizgi eklenmezDB komutunun kullanımı kapatılırRTPB komutunun kullanımı kapatılırRTPS komutunun kullanımı kapatılırKoÅŸullu taşıma komutlarının kullanımı kapatılırsdata/scommon/sbss kullanımı iptal edilirYordamlar arası sorunlar hakkındaki uyarılar verilmezTüm salak özellikler kapatılırRPTB/DB için yineleme sayılarının unsigned olmasına izin vermezKullanılmayan sanal iÅŸlevler iptal edilirDerleme anı istatistikleri gösterilirDerleme sırasında toplanan istatistikler gösterilir%0 da sıfırla bölme (IEEE henüz desteklenmiyor)68851 için kod üretilmezKodu 8 baytlık sınıra hizalamazDizge iÅŸlemleri hedefi hizalanmazBK yazmaçları ayrılmazword sınırlarına karşı düşen bit alanlarına izin verilmezBit iÅŸlemlerinde herhangi bir boyda anlık deÄŸerler kullanmazGAS varsayılmazDal hedefleri otomatik olarak hizalanmazv8plus ABI için derleme yapılmazYan etki atamalı adresleme kipleri üretilmezSalt-okunur belleÄŸe karmaşık tamsayı sabitleri koymazİşlev önsözü ya da sonsözü üretilmezYığın denetim kodu üretilmezBaÄŸlayıcı gevÅŸemesini etkinleÅŸtirir.size yönergeleri üretilmezH8/300H kodu üretilmezH8/S kodu üretilmezH8/S2600 kodu üretilmezBayt yazımı üretilmezchar komutları üretilmezSun FPA için kod üretilmezOlaÄŸandışılık özelliklerini denetleyecek kod + üretilmezAritmetik iÅŸlemci kullanan kod üretilmezYükleme/saklama çoklu komutları üretilmezGüncelleme komutlu yükleme/saklama üretilmezmultm komutları üretilmezÇalışma anı tür tanımlayıcı bilgisi üretilmezFPU için sin, cos, sqrt üretilmezBlok taşımalar için dizge komutları üretilmezTablejump komutları üretilmezBilinen hiçbir dizge iÅŸlemi özümlenmezÖntanımlı olarak üye iÅŸlevler özümlenmezTürler Intel's v1.3 gcc gibi yerleÅŸtirilmezİşlev önbilgisine PIC yazmacını yüklemezArdışık sıralı short komutlarını eÅŸzamanlamazKomutlar bir iÅŸlevin önbilgisine taşınmazEriÅŸim denetimi kurallarına uyulmazÇevirici veya baÄŸlayıcıda kuyruk çaÄŸrı komutlarını + eniyilemezBirleÅŸtiriciye -assert salt-metin göndermezKuyruk çaÄŸrı eniyilemesi uygulanmazHizalanmamış eriÅŸime izin verilmez-traditional kullanıldığında float türler double + yapılmazPrograma bir öntanımlı baÅŸlatma adresi 0x100 saÄŸlanmazİlklendirilmemiÅŸ global'ler ortak bölüme konmazGNU tanımlı anahtar sözcükler tanınmazYerleÅŸik iÅŸlevlerin hiçbiri tanınmaz'asm' anahtar sözcüğü tanınmazFPU yazmaçlarındaki iÅŸlevlerin deÄŸerleriyle + sonuçlanmazMEMW komutlu oynak bellek baÅŸvuruları üretilmezGerçel sayılar yazmaçlarda saklanmazYerel deÄŸerler argüman yazmaçlarında saklanmaz3DNow! yerleÅŸik iÅŸlevleri desteklenmezMMX ve SSE2 yerleÅŸik iÅŸlevleri ve kod üretimi + desteklenmezMMX yerleÅŸik iÅŸlevleri desteklenmezMMX, SSE ve SSE2 yerleÅŸik iÅŸlevleri ve kod üretimi + desteklenmezSistem baÅŸlık dosyalarından gelen uyarılar engellenmezKod ve salt-okunur veri hizalaması ayarlanmazYığın hiizalaması ayarlanmazYazılabilir veri hizalaması ayarlanmazAyrılmış ABI yazmaçları kullanılmazfp karşılaÅŸtırmaları için IEEE aritmetiÄŸi + kullanılmazC3x için MPYI komutu kullanılmazPOWER komut kümesi kullanılmazPOWER2 komut kümesi kullanılmazPowerPC komut kümesi kullanılmazSky ilintileme uzlaşımı kullanılmazVAX fp kullanılmazGenel yazmaçları tahsis eden adresler kullanılmazAlternatif alt düzey iÅŸlev girdileri kullanılmazBit alanı komutları kullanılmazKarmaşık adresleme kipleri kullanılmazNormal komutlardan koÅŸul kodları kullanılmazSoft yazmaçlar için doÄŸrudan adresleme kipi kullanılmazDüz yazmaç pencere modeli kullanılmazfp yazmaçları kullanılmazDonanım kayan nokta aritmetiÄŸi kullanılmazDonanım aritmetik iÅŸlemcisi kullanılmazDonanım bazlı quad fp komutları kullanılmazÇarpma-biriktirme fp komutları kullanmazÇıkan argümanları kaydedecek basma komutları + kullanılmazx86-64 kodda red-zone kullanılmazsb yazmacı kullanılmazArgüman aktarımı için yazmaçlar kullanılmazYığıt yanlaması kullanmazÇift-word kopyalamada kuvvetli hizalama için struct (yapı) kullanmazXtensa MAC16 seçeneÄŸi kullanılmazXtensa MIN/MAX seçeneÄŸi kullanılmazXtensa MUL16 seçeneÄŸi kullanılmazXtensa MUL32 seçeneÄŸi kullanılmazXtensa NSA seçeneÄŸi kullanılmazXtensa SEXT seçeneÄŸi kullanılmazXtensa iki terimli yazmaç seçeneÄŸi kullanılmazXtensa kod yoÄŸunluÄŸu seçeneÄŸi kullanılmazXtensa kayan nokta aritmetiÄŸi kullanılmazBit alanı komutları kullanılmazBölme komutu kullanılmazHizalamasız bellek referansları kullanılmazGörsel Komut Kümesi kullanılmaz-pedantic ile 'long long' kullanımı hakkında uyarmazKalıt yöntemler oluÅŸturulmamışsa uyarırDonanım çarpma hatasının olurunu bulmazStorem donanım hatasının oluru bulunmazSembol isimlendirmesi BSD için yapılırSembol isimlendirmesi X/OPEN için yapılırBaÅŸtan baÅŸa yazmaç taşıma eniyilemesi yaparYazmaç kopya-giriÅŸim eniyileme aÅŸaması uygulanırYazmaç isimlendirme eniyilemesi aÅŸamasını uygularKod ve verideki öğeler hizalanmazBit alanı taban türüne hizalama yapılmazBellekteki kayan noktalı argümanlar daima aktarılmazDerleyici özellikleri indiriminde uyarmazHizasız eriÅŸimlerin sistem tarafından yapıldığı varsayılmazHiçbir arabellek boÅŸaltma iÅŸlevi çaÄŸrılmazSembol isimlendirmesi yapılmazDeÄŸiÅŸken uzatılmış asmlerden önce ve sonra durma bitleri üretirSabitleri yazmaçlarda saklamazBir bit-iÅŸleme birimi için kod üretilmezYakın bellek çaÄŸrıları için kodu üretilmezYakın bellek sıçramaları için kodu üretilmezBirleÅŸik çarpma/toplama komutları üretilmezybase yazmaçların ayrılma sırası denetlenmezBlok taşıma eniyilemesi yapılmazlui/addiu adres yüklemeleri eniyilenmezDerleyici istatistikleri çıktılanmazYazmaçlardaki parametreler aktarılmazMicrosoft uzantılarının kullanımı hakkındaki + gereksiz uyarılar verilmezKayan noktalı sabitleri TOC'a koymazSembol+göreli sabitleri TOC'a koymazEk hata ayıklama bilgisi verilmezÇalışma anında kod yer deÄŸiÅŸtirilebilirliÄŸi saÄŸlanmazArgüman sayısını basmaz, sembol tablosunu kullanırİlklenmemiÅŸ sabitleri ROM'a koymazDüşük bellek modelinde DP'yi ISR'da saklamazAltyordamın baÅŸlangıç ve bitiÅŸi zamanlanmazWindows atamaları ayarlanmazBackchain ayarlanmaz (daha hızlı ama hata ayıklamak daha zorSıfırla tamsayı bölme taÅŸması yakalanmazTamsayı bölme taÅŸması yakalanmazAltiVec komutları kullanılmazEABI kullanılmazGP göreli sdata/sbss bölümleri kullanılmazIrix PIC kullanılmazMIPS16 komutları kullanılmazOSF PIC kullanılmazDallar için P-mnemonikleri kullanılmazPowerPC Genel Kullanım grubu seçimlik komutları kullanılmazPowerPC Graphics grubu seçimlik komutları kullanılmazPowerPC-64 komut kümesi kullanılmazRAM yerine ROM kullanılmazAlternatif yazmaç isimleri kullanılmazbras kullanılmazOynak bellek referansları için veri arabelleÄŸi kullanılmazGömülü PIC kullanılmazDonanım kayan nokta aritmetiÄŸi kullanılmazDolaylı çaÄŸrılar kullanılmazmips-tfile asm postpass kullanmazÇarpma biriktirmesi kullanmazSadece tek (32 bit) FP kullanmazSembolik yazmaç isimleri kullanılmaz2 haneli yıllara yer veren strftime biçemler + hakkında uyarırBiçemleme iÅŸlevlerine çok fazla argüman + verildiÄŸinde uyarmazTüm kurucu/yıkıcı iÅŸlevler private olduÄŸunda uyarmazÅžablonlanmış olmayan kardeÅŸ iÅŸlevler bir ÅŸablonla + bildirildiÄŸinde uyarırÜye iÅŸlev tür dönüşüm göstergelerinde uyarmazİlk üretim 4300 donanım hatasının olurunu bulmazUyumluluk hatalarını uyarılara indirgerYapay dizi üstindisi (1) kabul edilirBildirimler .decl dosyasına dökümlenirÇeviri biriminin tamamı bir dosyaya dökümlenir%0 ve %1 de yinelenmiÅŸ (ya da birbirini kapsayan) case deÄŸerleri%0 daki END deyiminde eksik olan `%A' anahtar sözcüğü %1 tarafından sınırlanan module procedure(ler) ya da iç kod için gerekliHATA: .bb dosyası %s içinde temel blok sayısı çok fazla + Küçük veri alanlarına 16 bitlik yer deÄŸiÅŸtirmeler üretilirKüçük veri alanlarına 32 bitlik yer deÄŸiÅŸtirmeler üretilirELF nesne kodu yayınlanırKesin olmayan istisnalar içeren IEEE-uyumlu kod üretirKesin olmayan istisnalar içermeden IEEE-uyumlu kod üretirROSE nesne kodu yayınlanırÇaÄŸrı grafiÄŸi bilgisi üretirTI araçları ile uyumlu kod üretirItanium (TM) iÅŸlemcisi B adımı için kod üretirBayt/word ISA geniÅŸlemesi için kod üretirSayma ISA geniÅŸlemesi için kod üretirfp move ve sqrt ISA geniÅŸlemesi için kod üretirVideo ISA geniÅŸlemesi için kod üretirGAS geniÅŸlemelerini kullanan kod üretirKod doÄŸrudan yer deÄŸiÅŸtirme yönergeleri kullanılarak üretilirBenzer semboller zayıf semboller olarak ele alınırÇapraz referans bilgisi yayınlanırYarım PIC kodu yayınlanır.s dosyasına tanıtıcı bilgi koyarCOMMON ve EQUIVALENCE için özel hata ayıklama + bilgileri yayınlanır (iptal edildi)Yığın denetim kodu üretilirKullanılmamış bile olsa statik sabit deÄŸiÅŸkenler + içerilirDeÄŸiÅŸken uzatılmış asmlerden önce ve sonra durma bitleri üretirÇevirici kodunda ayrıntılı hata ayıklama bilgisi üretilirGNU as yoluyla Dwarf 2 hata ayıklama satır bilgilerini etkinleÅŸtirirMPY||ADD ve MPY||SUB komutları etkinleÅŸtirilirSSA koÅŸullu sabit giriÅŸimi etkinleÅŸtirilirSSA eniyilemesi etkinleÅŸtirilirTransmeta picoJava uzantıları etkinleÅŸtirilirGirgin SSA ölü kod elemesi etkinleÅŸtirilirOtomatik ÅŸablon gerçeklemesi etkinleÅŸtirilirArkayüz hata ayıklamasını etkinleÅŸtiririC960 v2.0 uyumluluÄŸu etkinleÅŸtiriliriC960 v3.0 uyumluluÄŸu etkinleÅŸtiriliriC960 çevirici uyumluluÄŸu etkinleÅŸtirilirHata ayıklamalı çıktıyı etkinleÅŸtirHata ayıklama etkinleÅŸtirilirOlaÄŸandışılıkların yakalanması etkinleÅŸtirilirBirleÅŸik çarpma/toplama ve çarpma/çıkarma FP komutları üretilirBaÄŸlayıcı gevÅŸemesini etkinleÅŸtirirİlintileyici esnekleÅŸtiriciler etkinleÅŸtirilirBaÄŸlayıcı gevÅŸetmesi etkinleÅŸtirilirMakinaya özel gözlem deliÄŸi eniyilemesi etkinleÅŸtirilirUyarı sıklığı iletileri etkinleÅŸtirilirGeliÅŸtirilmekte olan yeni özellikler etkinleÅŸtirilirEÅŸzamanlı komutlar etkinleÅŸtirilirİşlev çaÄŸrıları civarındaki yazmaçların kaydını + etkinleÅŸtirirTemel bloklar arasında zamanlama etkinleÅŸtirilirYığın sondalamayı etkinleÅŸtirirDev nesneler için destek etkinleÅŸtirilirDB komutunun kullanımı etkinleÅŸtirilirRTPB komutunun kullanımı etkinleÅŸtirilirRTPS komutunun kullanımı etkinleÅŸtirilirKoÅŸullu taşıma komutlarının kullanımı etkinleÅŸtirilirsdata/scommon/sbss kullanımı etkinleÅŸtirilirBir yazmaç taşıma eniyilemesi etkinleÅŸtirilirsched2 çalıştırılmadan önce bir rtl gözlem deliÄŸi + aÅŸaması etkinleÅŸtirilirDallanma olasılığı tahmini etkinleÅŸtirilirArama listesi sonu. + %0 da baÅŸlayan blokun sonundan önce kaynak dosyası sonu%0 daki önceleme dizgesi karakter için kapsam dışı%0 ve %1 deki ifadeler arasında iki terimli iÅŸlemimi umuluyorYerleÅŸik `%A' için doÄŸrudan tür bildirimi %0 da çaÄŸrı ile uyuÅŸmuyorÖzümlenebilir olsalar bile iÅŸlevler ihracedilir%0 daki ifade yanlış veri türü ya da içeriÄŸinin yanlış sıralamasına sahipDış iÅŸlev `%A' %0 da argüman olarak aktarılmış ama doÄŸrudan EXTERNAL olarak bildirilmemiÅŸAlt çizgi ile baÅŸlayan sembollerde uyarır%0 daki FORMAT deyiminde gereksiz virgülAlan gerekliDış veri yapısı tanımı için %0 da alan isimleri -- onları burada deÄŸil, bir izleyen RECORD deyiminde belirtin%0 da ilk-sütun ampersand sürekliliÄŸikayan nokta iÅŸlemleri yakalanabilirelinux için, bu programa belirli bir yığın boyutu isteniyorYerleÅŸikler kitaplığı için: yazmaçlardaki tüm parametreler aktarılırRTL üretiminde geçerli 3 terimli komut üretmeye zorlarDöngülerdeki döngü dışına taşınacak olan deÄŸiÅŸimsiz + hesaplama etkinleÅŸtirirKaldırmayı iyileÅŸtirmek için sabitleri yazmaçlarda saklarİşlevlerin 2 baytlık sınıra hizalanması zorlanırİşlevlerin 4 baytlık sınıra hizalanması zorlanır%0 daki Fortran 90 özelliÄŸi desteklenmiyorFortran'a özel -fbounds-check biçimiİşlev baÅŸlangıçları bunun 2.kuvvetine ayarlandıGCC `[*]' dizi bildirimlerini henüz tam desteklemiyorGenel ortak alt ifade elemesi iptal edildi: + %d > 1000 temel blok ve %d >= 20 kenar/temel blokGenel ortak alt ifade elemesi iptal edildi: %d temel blok ve %d yazmaçGNU C -E kulanılmaksızın -C desteklemiyorGNU CPP %s sürümü (cpplib)29000 kodu üretilir29050 kodu üretilir32bit i386 kodu üretilir64bit x86-64 kodu üretilirAPCS uyumlu yığıt çerçeveleri üretirPlatforma özel niteliklerin C baÅŸlıklarını üretirCA kodu üretilirCF kodu üretilirCOFF biçemi hata ayıklama bilgisi üretilirDWARF-1 biçemi hata ayıklama bilgisi üretirDWARF-2 biçemi hata ayıklama bilgisi üretirELF çıktı üretilirH8/300H kodu üretilirH8/S kodu üretilirH8/S2600 kodu üretilir JA kodu üretilirJD kodu üretilirJF kodu üretilirKA kodu üretilirKB kodu üretilirMC kodu üretilirSA kodu üretilirSB kodu üretilirSTABS biçemi hata ayıklama bilgisi üretirVMS biçemi hata ayıklama bilgisi üretilirXCOFF biçemi hata ayıklama bilgisi üretirDeÄŸer döndürmeyen iÅŸlev deÄŸer döndürürse çıkış için çaÄŸrı üretilirBüyük ilkli kod üretilirBüyük ilkli veri üretilirGerekliyse, çaÄŸrı komutları dolaylı çaÄŸrılar olarak üretilirchar komutları üretilirBir gömülü çeviricinin kullanabileceÄŸi kod üretilirKod DW biti 0 kabulüyle üretilirKod DW biti 1 kabulüyle üretilirKod C30 MİB için üretilirKod C31 MİB için üretilirKod C32 MİB için üretilirKod C33 MİB için üretilirKod C40 MİB için üretilirKod C44 MİB için üretilirKod GNU as için üretilirKod GNU ld için üretilirKod GNU çalışma ortamı için üretilirKod Intel as için üretilirKod Intel ld için üretilirKod NeXT çalışma ortamı için üretilir520X için kod üretilir68000 için kod üretilir68020 için kod üretilir68030 için kod üretilir68040 için kod üretilirHiçbir yeni komut olmaksızın 68040 için kod üretilir68060 için kod üretilirHiçbir yeni komut olmaksızın 68060 için kod üretilir68302 için kod üretilir68332 için kod üretilir68851 için kod üretilir68881 için kod üretilirBir DLL için kod üretilirSun FPA için kod üretilirSun Sky kartı için kod üretilirBit iÅŸleme birimi için kod üretilirBir cpu32 için kod üretilirKod bir 11/10 için üretilirKod bir 11/40 için üretilirKod bir 11/45 için üretilirBüyük ilkli kod üretilirKod c1 için üretilirKod c2 için üretilirKod c32 için üretilirKod c34 için üretilirTamamen özümlenmiÅŸ olsalar bile iÅŸlevler için kod + üretilirVerilen MİB için kodu üretirKod yukarı bellek bölgesi için üretilirKüçük ilkli kod üretilirKod alt bellek bölgesi için üretilirBellek eÅŸlem1 için kod üretilirBellek eÅŸlem2 için kod üretilirBellek eÅŸlem3 için kod üretilirBellek eÅŸlem4 için kod üretilirYakın bellek çaÄŸrıları için kodu üretilirYakın bellek sıçramaları için kodu üretilirKod C300 MİB için üretilirKod C400 MİB için üretilirKod M*Core M340 için üretilirVerilen MİB sürümü ya da çip için kodu üretirUnix çeviricinin kullanabileceÄŸi kod üretilirBaÅŸvuru bozan gösterge ve dizilerden önce denetim + sınırlarına kod üretilirDizi indislerini denetleyecek kod üretilirKod bayt yazarak üretilirAritmetik iÅŸlemci kullanan kod üretilirGerçel sayılar için kitaplık çaÄŸrılarıyla kod üretilirGP yazmaçsız kod üretilirÖntanımlı geliÅŸmiÅŸ biçemde hata ayıklama bilgisi + üretirÖntanımlı biçemde hata ayıklama bilgisi üretirBölen (bölünen deÄŸil) ile aynı iÅŸarete sahip kalanlı bölme sonuçları üretilirGeliÅŸmiÅŸ DWARF-1 biçemi hata ayıklama bilgisi üretirGeliÅŸmiÅŸ STABS biçemi hata ayıklama bilgisi üretirGeliÅŸmiÅŸ XCOFF biçemi hata ayıklama bilgisi üretirDış etiket bilgisi üretirBelirtilen komut kümesini kullanan kayan nokta + aritmetiÄŸi üretilirBirleÅŸik çarpma/toplama komutları üretilirÖzümleme bölümü üretir, gizlenmesi için en + elveriÅŸli ÅŸartları oluÅŸtururÖzümleme bölümü üretir, içselleÅŸtirilmesi için en + elveriÅŸli ÅŸartları oluÅŸtururKüçük ilkli kod üretilirKüçük ilkli veri üretilirYükleme/saklama çoklu komutları üretilirGüncelleme komutlu yükleme/saklama üretilirPC'ye göre kod üretilirMümkünse, konumdan bağımsız kod üretilirMümkünse, döngülerdeki diziler için önalım + komutları üretilirYeniden giriÅŸli PIC kodu üretirKendiliÄŸinden konum deÄŸiÅŸtirebilen kod üretilirFPU için sin, cos, sqrt üretilirBlok taşımalar için dizge komutları üretilirHer komut sınırında birbirlerini etkilemeyenlerin + tablosu kesin oluÅŸturulur%0 daki genel isim `%A' %1 de farklı türde [info -f g77 M GLOBALS]%0 da tanımlanan genel isim `%A' zaten %1 de tanımlı [info -f g77 M GLOBALS]Genel isim `%A' %0 da %B iken %1 de %C [info -f g77 M GLOBALS]%0 da dolaylı DO yapısını çevreleyen parantezler gereksizHatalara sebep olmamak için COMPLEX aritmetiÄŸi + emüle edilirOnaltılık öncelem %0 da kapsam dışıMIL-STD 1753 yerleÅŸikleri gizlenirlibU77 yerleÅŸikleri gizlenirHatalı arabirimli libU77 yerleÅŸikleri gizlenirFORTRAN-77 olmayan yerleÅŸiklerin g77 destekleri + gizlenirFORTRAN-77 olmayan yerleÅŸiklerin F90 destekleri + gizlenirFORTRAN-77 olmayan yerleÅŸiklerin VXT FORTRAN + destekleri gizlenirFORTRAN-77 olmayan yerleÅŸiklerin f2c destekleri + gizlenirHollerith ve türsüz sabitler argüman olarak + kullanılmaz%0 da %A karakterden fazlasıyla belirtilen hollerith sabit %1 olarak varÇıktıda G/Ç hatasıICE: emit_jump_insn gereken yerde emit_insn kullanılmış: + %0 daki INCLUDE, kaynak satırındaki tek deyim deÄŸilISO C iÅŸlevler dışında tek başına `;'e izin vermezISO C argümanlarının sayısı deÄŸiÅŸebilen isimli makrolara izin vermezISO C `varargs.h' kullanımına izin vermezISO C karmaşık sayı türlerinde `++' ve `--' desteklemezISO C karmaşık sayıların mantıksal çarpımında `~' desteklemezISO C karmaşık tamsayı türleri desteklemezISO C salt `complex'i `double complex' anlamında desteklemezISO C isimsiz struct/union'lara izin vermezISO C de iÅŸlev göstergesi ile `void *' arasındaki %s için izin verilmezISO C `goto *expr;' kullanımına izin vermezISO C boÅŸ kaynak dosyalarına izin vermezISO C ifadelerde parantezli gruplamalara izin vermezISO C skalar olmayandan aynı türe çevirime izin vermezISO C union türe çevirime izin vermezISO C `void *' ile iÅŸlev göstergesi karşılaÅŸtırmasına izin vermezISO C `void *' ve iÅŸlev göstergesi arasında koÅŸullu ifadelere izin vermezISO C tek taraflı void tür içeren koÅŸullu ifadelere izin vermezISO C 'const' ya da 'volatile' iÅŸlev türlerini yasaklarISO C tür veya saklama sınıfı belirtilmeyen veri tanımına izin vermezISO C boÅŸ ilklendirme parantezlerine izin vermezISO C ileriye dönük parametre bildirimlerine izin vermezISO C sonradan bildirilmiÅŸ `enum' türüne baÅŸvuruya izin vermezISO C sanal sayısal sabitleri yasaklarISO C etiket bildirimlerine izin vermezISO C üyesiz üye bildirimlerine izin vermezISO C iç içe iÅŸlevlere izin vermezISO C ?: ifadesinin orta teriminin atlanmasına izin vermezISO C iÅŸlev göstergelerinin düzenlenmiÅŸ karşılaÅŸtırmalarına izin vermezISO C 'typedef' gölgeleyen `%s' parametresine izin vermezISO C nitelemeli iÅŸlev türlerini yasaklarISO C nitelemeli 'void' iÅŸlev dönüş türünü yasaklarISO C switch deyimlerinde aralık ifadelerine izin vermezISO C89 öndeÄŸer olarak eleman aralığı belirtilmesine izin vermez.ISO C `register' dizisi altindislemesine izin vermezISO C de bir etiket adresinin alınmasına izin verilmezISO C çevirim ifadesi adresine izin vermezISO C çevirim ifadelerin sol tarafta kullanımına izin vermez.ISO C bileÅŸik ifadelerin sol tarafta kullanımına izin vermez.ISO C koÅŸullu ifadelerin sol tarafta kullanımına izin vermez.ISO C sıfır boyutlu `%s' dizisini yasaklarISO C union türe argüman dönüşümünü yasaklarISO C `...'dan önce bir isimli argüman gerektirirISO C makro isminden sonra boÅŸluk gerektirirISO C sembolik sabit grubunun deÄŸerlerini `int' kapsamında sınırlarISO C++ #if içinde "%s" kullanımına izin vermezISO C++ `%T::%D' nin `%T::%D' olarak tanımlanmasına izin vermezISO C++ isimli dönen deÄŸerlere izin vermezISO C++, `long long' desteklemiyorISO C++'da iÅŸlev ve `void *' tür göstergeleri arasında %s yasaktırISO C++ da bir `%T' türü gösterge %s için izin verilmezISO C++ bir enum'um %s-lenmesine izin vermezISO C++ da new için küme ilklendiriciye izin verilmezISO C++ `%s' için bir boÅŸ koÅŸula izin vermezISO C++ iÅŸlev türe `sizeof' uygulanmasına izin vermezISO C++ bir üye iÅŸleve `sizeof' uygulanmasına izin vermezISO C++ bir iÅŸlev türü ifadesine `sizeof' uygulanmasına izin vermezISO C++ bir boÅŸ tür olan `void' türe `sizeof' uygulanmasına izin vermezISO C++ new içinde parantezli dizi indislemeye izin vermezISO C++ dizilerin deÄŸer atanarak bildirimine izin vermezISO C++ da kaÅŸlı ayraçla gruplanmış ifadelere izin verilmezISO C++ program içinden `::main' çaÄŸrısına izin vermezISO C++ sol yan olarak kullanılmış referanssız türe çevirime izin vermezISO C++ iÅŸlev ve nesne göstergeleri arasında çevirime izin vermezISO C++ da `%T' dizi türüne çevirime izin verilmezISO C++ da gösterge ile tamsayı arasında karşılaÅŸtırmaya izin verilmezISO C++ da birleÅŸik sabitlere izin verilmezISO C++ bileÅŸik deyimler içeren ilklendirmelere izin vermezISO C++ hesaplanmış goto'lara izin vermezISO C++ da türsüz `%s' bildirimine izin verilmezISO C++ %s ile türlerin tanımlanmasına izin vermezISO C++ sabit olmayan statik üye `%D' nin sınıf içi ilklendirmesine izin vermezISO C++ da array new içinde ilklendirmeye izin verilmezISO C++ üye `%D' ilklendirmesine izin vermezISO C++ tümleyen olmayan `%T türündeki üye sabiti `%D' nin ilklendirilmesine izin vermezISO C++ da `=' ile yeni ifade ilklendirmesine izin verilmezISO C++ etiket bildirimlerine izin vermezISO C++ zarflayan sınıf olarak üye `%D' ile aynı isme izin vermezISO C++ zarflayan sınıf ile aynı isimde yuvalanmış tür `%D' ye izin vermezISO C++ sabit olmayan kümeleme ilklendirici ifadelerine izin vermezISO C++ bir ?: ifadesinde eksik orta terime izin vermezISO C++ switch deyimlerinde aralık ifadelerine izin vermezISO C++ zarflayan sınıf ile aynı isimde statik veri üyesi `%D' ye izin vermezISO C++ sol yan olmayan dizi indislemesine izin vermezISO C++ `::main' iÅŸlevinin adresinin alınmasına izin vermezISO C++ üye iÅŸleve bir gösterge ÅŸekillendirecek bir sınır üye iÅŸlevin adresinin alınmasına izin vermez. `&%T::%D' denebilirISO C++ bir sol yan olmayan ifadeye çevirimin adresinin alınmasına izin vermezISO C++ da bir etiket adresinin alınmasına izin verilmezISO C++ üye iÅŸleve bir gösterge ÅŸekillendirecek bir niteliksiz statik olmayan üye iÅŸlevin adresinin alınmasına izin vermez. `&%T::%D' denebilir.ISO C++ doÄŸrudan gerçeklemelerde `%s' kullanımına izin vermezISO C++ doÄŸrudan gerçeklemelerde `extern' kullanımına izin vermezISO C++ referans`%D' ilklendiren ilklendirici listesi kullanımına izin vermezISO C++ bir çıkartma iÅŸlemi içinde `void *' türde gösterge kullanımına izin vermezISO C++ bir çıkartma iÅŸlemi içindeki bir iÅŸleve gösterge kullanımına izin vermezISO C++ bir çıkartma iÅŸlemi içindeki bir üyeye gösterge kullanımına izin vermezISO C++ bir çıkartma iÅŸlemi içindeki bir yönteme gösterge kullanımına izin vermezISO C++ da deÄŸiÅŸken boyutlu dizi yasaktırISO C++ da deÄŸiÅŸken boyutlu dizi `%D' yasaktırISO C++ da sıfır boyutlu dizi yasaktırISO C++ da sıfır boyutlu dizi `%D' yasaktırISO C++ anonim yapıları (struct) yasaklarISO C++ `%#T' den `(...)' ya dönüşümü yasaklarISO C++ iÅŸlemimi ?: nın aşırı yüklenmesini yasaklarISO C89 dizi bildirimlerinde `[*]' desteklemezISO C89 `long long'u desteklemezISO C89, parametre dizisi bildirimlerinde `static' ve tür niteleyicileri desteklemezISO C89 karmaşık türleri desteklemezISO C89 esnek dizi üyelerini desteklemezISO C89 deÄŸerlendirilemeyen boyutlu `%s' dizisini yasaklarISO C89 bileÅŸik sayılara izin vermezISO C89 long long tamsayı sabitleri yasaklarISO C kod ve bildirimlerin karışımına izin vermezISO C89 öndeÄŸer olarak alt nesnelerin belirtilmesine izin vermez.ISO C sol tarafsız dizi alt indislemesine izin vermezISO C89 deÄŸiÅŸken boyutlu `%s' dizisini yasaklarISO C kalan argümanların kullanılmış olmasını gerektirirISR %s yerel deÄŸiÅŸkenlerin %d sözcüğünü gerektiriyor, en çok 32767Tanıtıcı gerekliİşlevler için dllimport özelliÄŸi yoksayılırİşlevler için dllimport yoksayılırİşlev gösterge tablosu aşılarla oluÅŸturulur`%A' %0 da örtük bildirilmiÅŸ%0 da deyim içindeki tekrar deÄŸiÅŸkeni `%A' için dolaylı do-loop tekrarlama sayısı 0 (sıfır)%0 da deyim içindeki tekrar deÄŸiÅŸkeni `%A' için dolaylı do-loop adım sayısı 0 (sıfır)%s `%s' içinde:%s içinde: %d de birbiri içinde deÄŸiÅŸken ve olaÄŸandışılık aralıklarıHiçbirindeBlok veri birimiOrtak blokYapıÖğeSırayla bir altındaki dosyada içerilerek: + %s:%dSırayla bir altındaki dosyada içerilerek: + %s:%uİşlev`%s' iÅŸlevinde:Üye iÅŸlev `%s':İsim listesiprogramDeyim iÅŸlevi içinde:AltyordamTürü anlaşılmayanMevcut olan yazılım bazlı (soft) yazmaçları bildirir%0 daki sembol isminde `%A' karakteri küçük harfDATA ve PARAMETER üzerinden ilklendirme tür uyumludurYerel deÄŸiÅŸkenler ve diziler sıfır ile ilklendirilirBilinen tüm dizge iÅŸlemleri özümlenir2 komut ya da daha azı ile yapılabiliyorsa, sabitleri özümler1 komut ile yapılabiliyorsa sabitleri özümlerDal baÄŸlantı kodunu yerleÅŸtirirPrograma yığın denetimi kodu yerleÅŸtirilirİşlevlere giriÅŸ ve çıkışta kullanım çaÄŸrıları üretir%0 daki tamsayı çok büyükBasit iÅŸlevleri onları çağıranların içine gömerDerleyici iç hatası. iÅŸlem uygulanamıyor%2$s:%3$d. satırındaki %1$s iÅŸlevinde derleyici iç hatasıDerleyici iç hatası: Hata raporlama yordamları tekrar girildi. + İç hata: %s (program %s) + Lütfen ayrıntılı bir hata raporu hazırlayın. + İşlemler için %s adresine bakın.Dahili gcov çıkışı. + Büyük harfe dönüşüm içerden yapılırİçerde harf büyüklüğü korunurSabit kümeleri metin bölümündeki kodun arasına serpiÅŸtirilirYerleÅŸik `%A' %0 da argüman olarak aktarılmış ama doÄŸrudan INTRINSIC olarak bildirilmemiÅŸYerleÅŸik `%A' %0 da %B biçiminde, %1 de ise %C biçiminde [info -f g77 M EXPIMP]yerleÅŸik `%A', %0 da çaÄŸrıldı, Y2K-uyumsuz olarak bilinir [info -f g77 M Y2KBAD]YerleÅŸikler büyük harfle yazılmıştırYerleÅŸikler geliÅŸigüzel yazılmıştırYerleÅŸikler SqRt tarzında hecelenirGeçersiz denetim ifadesiGeçersiz bildirim%0 da sembol `%A' bildirimi ya da referansı geçersiz [ilk %1 de görüldü]%0 daki üs %1 deki gerçel sabit için geçersiz; üs alanında rakam olmayan `%A'Geçersiz ifade satırı%0 daki baÅŸlangıç karakteri geçersiz [info -f g77 M LEX]Geçersiz ilklendirme satırıGeçersiz arabirim türüYöntem bildirimi geçersiz, yöntem ismi gerekiyorYöntem bildirimi geçersiz, return türü gerekliGeçersiz referans türü%0 daki dizgecik (%1 deki ifade ya da alt ifadede) geçersizGeçersiz tür ifadesiGeçersiz güncelleme ifadesi%1 üstünde altdizge iÅŸlemiminin %0 da kullanımı geçersizG/Ç listesinde %0 da baÅŸlayan öğeler isim listesi yönlendirmeli G/Ç için geçersizJava yöntemi '%D' Java olmayan parametre türü `%T' içeriyorJava yöntemi '%D' Java olmayan dönen tür `%T' içeriyorSıçrama hedefleri bunun 2.kuvvetine ayarlandıİfadeden sonrakiler anlaşılamadı.OlaÄŸandışılıkların yakalanması için birbirlerini + etkilemeyenlerin tablosu oluÅŸturulur%2$s için L%1$d arabellek gecikmesi bilinmiyor%1 de tanımlanmış olan etiket %A %0 da yeniden tanımlanıyor%0 daki etiket %1 deki devam satırı belirteci ile geçersiz [info -f g77 M LEX]%0 daki etiket tanımı %A boÅŸ deyim üzerinde (%1 de olarak)%0 daki etiket tanımı bu tür deyimlerde geçersiz%1 de belirtilen DO yapısının etiketi için %0 da etiket tanımı yok%0 daki etiket numarası 1 ile 99999 arasında deÄŸilDil anahtar sözcükleri geliÅŸigüzel yazılmıştırDil anahtar sözcükleri büyük harflerle yazılmıştırDil anahtar sözcükleri IOStat tarzı hecelenirTürler Intel's v1.3 gcc gibi yerleÅŸtirilir%0 lık satır çok uzun [info -f g77 M LEX]Öntanımlı olarak yazılım/verileri dış bellekte olacak ÅŸekilde baÄŸlarÖntanımlı olarak yazılım/verileri çip-içi bellekte olacak ÅŸekilde baÄŸlarELF biçemli program üretimine ilintiler (mmo dan baÅŸka)libads.a, libc.a ve crt0.o ile ilintilerlibmvme.a, libc.a ve crt0.o ile ilintilerlibsim.a, libc.a ve sim-crt0.o ile ilintilerlibyk.a, libc.a ve crt0.o ile ilintiler%0 da ayarlanabilir yerel sembol `%A'Çevrim kodu bunun 2. kuvvetine ayarlandıMCU `%s' desteklenmiyorMIPS ECOFF biçemi dosya isimlerinin #line'lı iÅŸlevlerde deÄŸiÅŸtirilmesine izin vermezMMIX Dahili: %s bir bit kaydırma yapılabilir tamsayı deÄŸilMMIX Dahili: Hatalı yazmaç: %dMMIX Dahili: 'm' için bu bir CONST_INT deÄŸil, hatalı deÄŸerMMIX Dahili: Bu terim iÅŸlenemezMMIX Dahili: Bu deÄŸil, bir CONST_INT bekleniyorMMIX Dahili: Bu deÄŸil, bir sabit bekleniyorMMIX Dahili: Bu deÄŸil, bir yazmaç bekleniyorMMIX Dahili: Son isimli argüman bir yazmaça sığamamalıMMIX Dahili: mmix_print_operand içideki `%c' case eksikMMIX Dahili: Bu bir sabit deÄŸil:MMIX Dahili: Bu bilinen bir adres deÄŸilMMIX Dahili: Geçersiz olarak ters çevrien koÅŸul çıktılanmaya çalışılıyor:MMIX Dahili: Bunun CC'si nedir?MMIX Dahili: Bunun CC'si nedir?%1 daki INTERFACE bir genel isim, iÅŸlemimi ya da atama belirtmediÄŸinden %0 daki MODULE PROCEDURE deyimi iptal edildiÖntanımlı olarak 'char' signed yapılırÖntanımlı olarak 'char' unsigned yapılırArdışık sıralı short komutlarını eÄŸer mümkünse, + eÅŸzamanlı iÅŸlerÖntanımlı olarak bit alanları unsigned yapılırTamsayılar 32 bitlik yapılırOndalık olmayan taban önekli sabitler türsüz yapılırDizge sabitler `const char[]' deÄŸil `char[]' yapılırVeriyi özelden çok paylaşımlı olarak imlerDizgeler 'const char *' olarak imlenirTek yığıt artış iÅŸleminde kullanılacak maksimum miktar`%B' den hem %C hem de %D baytlık göreli konumda `%A'nın yerleÅŸtirilmesi için EQUIVALENCE gereksinimleri çeliÅŸkili%A belirteci %0 daki deyimde eksikSınıf ismi yokclass tür terimi eksik%1 de açılan parantez için %0 da kapanan parantez yok%0 daki FORMAT deyiminde kapama parantezleri eksik%0 ve %1 de `.%A' arasında kapatma noktası eksik%1 için alt dizge referans içinde %0 da ':' eksik%0 daki FORMAT deyiminde virgül eksik%1 deki veri yapısı tanımı içinde %0 da yapı tanımının alan ismi/isimleri eksik%0 içindeki iki terimlinin ilk terimi eksikBiçimsel parametre terimi eksikTanıtıcı eksikArabirim ismi yokİsim eksik%0 daki FORMAT deyiminde `E' den sonra sayı yok%0 daki FORMAT deyiminde noktadan sonra sayı yok%1 deki iÅŸlemimi için %0 daki ifadenin sonunda terim eksikGeçersiz ya da eksik sabit ifadesiDış veri yapısı tanımı için %0 da yapı ismi eksikSüper sınıf ismi eksikTerim eksikTerim eksik ve ')' gerekliTerim eksik ve ']' gerekliTerim ya da ')' eksikTerim eksik ya da ')' gerekli%0 daki üstel gerçel sayı için %1 de deÄŸer eksikDeÄŸiÅŸken ilklendirici eksikCOMMON/EQUIVALENCE üzerinden karışık karakter ve karakter olmayan türler -- örneÄŸin: `%A' ve `%B'Çoklu include önlemleri aÅŸağıdakiler için kullanışlı olabilir: + NAMELIST harf büyüklüğü korunmuÅŸ kaynak dosyaları için çalışma anı kitaplığı tarafından layıkıyla desteklenmiyor%d. NOTE_INSN_BASIC_BLOCK %d. temel bloÄŸun ortasındaNOTE_INSN_BASIC_BLOCK %d. blok için eksikaritmetik içinde NULL kullanımı%0 da yuvalanmış %% yapısı (%%VAL, %%REF, veya %%DESCR)external'lara ikinci altçizgi eklenemezStatik sınıf ilklendirme koduna hiç bir eniyileme + uygulanmaz"Küçük yazmaç sınıfları" uydurması yok%0 daki G/Ç denetim listesinde UNIT= belirteci yok%s dosyasında dal yok + %s iÅŸlevinin dalları yok + %s dosyasında çaÄŸrı yok + %s iÅŸlevinde çaÄŸrı yok + %s için uygun bir case yok%1 deki türetilmiÅŸ-tür tanımı baÅŸlangıcı için %0 olarak hiç eleman belirtilmemiÅŸ%1 deki eÅŸlem baÅŸlangıcı için %0 olarak hiç eleman belirtilmemiÅŸ%1 deki yapı tanım baÅŸlangıcı için %0 olarak hiç eleman belirtilmemişÖntanımlı crt0.o yok%s dosyası ile iliÅŸkilendirilecek kod yok. + %s dosyasında çalıştırılacak kaynak satırı yok + %s iÅŸlevinin çalıştırılabilir kaynak satırı yok + %0 daki FORMAT deyimi için etiket tanımı yok%0 da dolaylı Do yineleyicisi `%A' için özellik yok%0 içinde ISO standardı olmayan önceleme dizgesi, '\%A'Etiket alanının %0 daki karakteri bir rakam deÄŸil [info -f g77 M LEX]%0 da deyim içindeki dolaylı do-loop'daki sabit ifade bir tamsayı deÄŸil%1 deki iÅŸlev çaÄŸrısı için %0 da NULL argüman%1 deki deyim iÅŸlev referansı için %0 da NULL argüman%0 da null karakter(ler) -- satır yoksayıldı%1 deki dizi referans için %0 da null elemanTamsayı argümanları aktarmada kullanılan + yazmaçların sayısıAlt düzey iÅŸlevlerde çerçeve gösterge ihmal edilirSadece kurucular birbirini çağırabilirSadece özümleme ÅŸablonlarının doÄŸrudan baÅŸka + deÄŸerlerle gerçeklenmesi saÄŸlanırSadece doÄŸrudan belirtilmiÅŸ ÅŸablon gerçeklemeleri + yayınlanırHer çevrimde bir iÅŸlem iÅŸlerÇaÄŸrıda FP yazmacının yalnız 32 bitini korur%0 daki iÅŸlemimi %1 dekinden daha düşük önceliÄŸe sahip -- parantez kullanınBlok taşımalar eniyilenir32032 için eniyileme yapılır32332 cpu için eniyileme yapılır32532 cpu için eniyileme yapılır3900 için eniyileme yapılır4650 için eniyileme yapılırCypress iÅŸlemciler için eniyileme yapılırF930 iÅŸlemciler için eniyileme yapılırF934 iÅŸlemciler için eniyileme yapılırSparcLite iÅŸlemciler için eniyileme yapılırSuperSparc iÅŸlemciler için eniyileme yapılırlui/addiu adres yüklemeleri eniyilenirKardeÅŸ ve kuyruk özyinelemeli çaÄŸrılar eniyilenirÇevirici ve baÄŸlayıcıda kuyruk çaÄŸrı komutlarını eniyilerSeçenekler: + İlklendirilmiÅŸ veri için fazladan kod çıktılarGNU ld biçemli genel ilklendiricileri çıktılarDerleyici istatistikleri çıktılanırLuxworks ortamında fazladan hata ayıklama bilgisi çıktılarKomut boyutlarını asm dosyasına çıktılarHer program biriminin dışında: + -mbest-lib-options reddedilirwchar_t için temel tür olarak `unsigned short' a + zorlarPIC kod üretimi hızlı dolaylı çaÄŸrılar ile uyumlu deÄŸildir + PIC kod üretimi uyarlanabilir çalışma anı modeli ile uyumlu deÄŸildir + PIC yazmacı ayarlı deÄŸilPRINT_OPERAND hiçlik göstergesiPRINT_OPERAND: '%c' noktalaması bilinmiyorPRINT_OPERAND_ADDRESS, hiçlik göstergesi%1 deki PUBLIC veya PRIVATE deyimi %0 dekiyle birlikte belirtilemezYapı üyelerini birlikte deliksiz paketlerBirleÅŸtiriciye -assert salt-metin gönderirFP yazmaçlarındaki FP argümanları aktarılırYığındaki tüm argümanlar aktarılırYazmaçlardaki argümanlar aktarılırYığındaki argümanlar aktarılırYazmaçlardaki parametreler aktarılır (öntanımlı)Yazmaçlardaki bazı argümanlar aktarılır'inline' anahtar sözcüğüne dikkat edilirDWARF2 yinelenmiÅŸ elemesi uygulanırMasraflı eniyilemelerden birkaçını uygularGenel alt ifade elemesi sırasında geniÅŸletilmiÅŸ yük + hareketi uygulanırAtlama kanallaması eniyilemesi uygulanırTüm döngülere ters döngüleme uygularYineleme sayısı bilindiÄŸinde ters döngüleme uygulanırGenel alt ifade elemesinden sonra saklama hareketi + uygulanırGüç azaltma eniyilemesi uygulanırKuyruk çaÄŸrı eniyilemesi uygulanırGenel ortak alt ifade elemesi uygular%0 daki noktadan sonra bir gerçel sayı, `NOT.', `TRUE.', ya da `FALSE.' gelmiyorHizalanmamış eriÅŸime izin verilirArgüman sayısını bir NOP iÅŸlemine koyar (basma'dan daha çabuk)Kayan noktalı sabitleri TOC'a koyarSembol+göreli sabitleri TOC'a koyarDeÄŸiÅŸken adresleri normal TOC'a koyarLütfen bunu gözönünde bulundurarak bir hata raporu gönderin.Mümkünse öniÅŸlemli kaynakla lütfen + ayrıntılı bir hata raporu gönderin. + İşlemler için %s adresine bakınız. + Göstergeler 32 bittirGöstergeler 64 bittirDallanmalar koÅŸullu çalıştırmaya tercih edilirWord eriÅŸimlerini bayt eriÅŸimlerine tercih ederGenel semboller ":" ile öne eklenir (ÖNEK ile kullanmak için)ÇaÄŸrıda FP yazmacının bütün 40 bitini korurProgram derlenirken harf büyüklüklerine dokunulmazAna ve hedef makina aynı kayan noktalı biçemi + kullanıyormuÅŸ gibi davranırKodu çevreleyen bilgileri gösterir + + g77 ye özel derleyici sürüm bilgisini gösterir ve + iç testleri yaparİç hata ayıklama bilgilerini gösterirProgram birimlerinin isimleri derlenmiÅŸ olarak + gösterilir#ident yönergeleri iÅŸlenir'%4$s' %1$c%2$s%3$c özelliÄŸi iÅŸleniyor + Büyüğü baÅŸta kod üretilirÇalışma anında kod yer deÄŸiÅŸtirilebilirliÄŸi saÄŸlanırKüçüğü baÅŸta kod üretilirAyrımsama bu hedefte desteklenmiyor.Ayrımlama mcount kullanırProgram Unix-f77 dilinin özelliklerini kullanmıyorProgram tipik Fortran-90 dilinde yazılmıştırProgram Fortran-90'ca serbest biçimde yazılmışProgram VXT (Digital-benzeri) FORTRAN da yazılmışProgram tipik FORTRAN 66 dilinde yazılmıştırProgram tipik Unix f77 dilinde yazılmıştır%0 da program ismi gereksiz, %1 de PROGRAM deyimi belirtilmemiÅŸ%0 daki program birimi ismi %1 deki ile aynı deÄŸilProgram küçük harflerle yazılmıştırProgram BüyükKüçük harflerle yazılmıştırProgram büyük harflerle yazılmıştırPC göreli iÅŸlev çaÄŸrılarını engellerHerÅŸeyi normal TOC'a koyarSabit kümeleri ayrı bir sabit bölümüne konurİlklenmemiÅŸ sabitleri ROM'a koyar (-membedded-data gerektirir)%0 daki RETURN belirteci bir ana program birimi için geçerli deÄŸilRETURN_ADDRESS_OFFSET desteklenmiyorRTL denetimi: %5$s:%6$d: %4$s iÅŸlevindeki son %3$d öğe ile `%2$s' nin %1$d. öğesinin eriÅŸimiRTL denetimi: %4$s:%5$d: %3$s iÅŸlevindeki son %2$d öğe ile vektörün %1$d. öğesinin eriÅŸimiRTL denetimi: %5$s:%6$d: %4$s içindeki kod için `%1$s' ya da `%2$s' umulurken `%3$s' varRTL denetimi: %4$s:%5$d: %3$s içindeki kod için `%1$s' umulurken `%2$s' varRTL denetimi: %7$s:%8$d: %6$s içinde öğe %1$d türü olarak'%2$c' ya da '%3$c' umulurken '%4$c' var (rtx %5$s)RTL denetimi: %6$s:%7$d: %5$s içinde öğe %1$d türü olarak '%2$c' umulurken '%3$c' var (rtx %4$s)Mantıksal türdeki SELECT CASE deyimi içindeki CASE deyimi için %0 da aralık özelliÄŸi geçersizÖzellikler %s'den okunuyor + and/bitand/bitor/compl/not/or/xor tanınırNesne dosyalarını küçültürGenel yerleÅŸik `%A' için %0 daki referans %B ya da %C biçiminde olmalıydı%1 deki etikete referans %0 daki önceki referansla uyumsuz%1 deki etikete referans %0 daki tanımıyla uyumsuz%1 deki etikete referans %0 daki tanımı içeren bloÄŸun dışındasb yazmacı sıfırdır. Mutlak adresleme için kullanın.Kod yerleÅŸimini iyileÅŸtirecek temel blokları + yeniden sıralarEkleme, karşılaÅŸtırma, dallanma sayaç üzerinden + dallanma ile deÄŸiÅŸtirilirSistem dosya yolu ile deÄŸiÅŸtirilirÇalıştırma sonunda ayrılan kesintisiz bellek miktarı + raporlanırÇalışma bitiminde her derleme aÅŸaması için kullanılan + zaman raporlanırIEEE-uyumlu matematik kitaplığı yordamları istenir (OSF/1)Yazmaç tahsisinden sonra komutları yeniden zamanlarYazmaç tahsisinden önce komutları yeniden zamanlarEtiket bilgisi korunurStandart MXDB bilgisini korurYazmaçlardaki deÄŸil bellekteki 'short' küme + döndürülürYazmaçlardaki 'short' kümeleri döndürülürBellekteki tüm veri yapıları döndürülür (AIX öntanımlı)ac0'daki kayan noktalı sonuçlar dönerBellekteki kayan noktalı sonuçlar dönerYazmaçlardaki küçük veri yapıları döndürülür(SVR4 öntanımlı)%0 daki İŞLEV için dönen `%A' deÄŸeri alt programda referanslı deÄŸilFPU yazmaçlarındaki iÅŸlevlerin deÄŸerleriyle + sonuçlanırHer iÅŸlev için r30 yeniden kullanılırDöngü eniyilemesinden sonra CSE geçiÅŸi çalıştırılırDöngü eniyilemesi iki kere çalıştırılır%1 deki SAVE deyimi ya da özniteliÄŸi %0 dekiyle birlikte belirtilemezCHARACTER türü SELECT CASE (%0 da) desteklenmiyor -- özürSSE komut kümesi iptal edildi, 387 aritmetiÄŸi kullanılıyor-mep -mprolog-function ile aynı%0 da %B için ve %1 de %C için aynı isim `%A' kullanılmış [info -f g77 M INTGLOB]Düşük bellek modelinde DP'yi ISR'da saklarLuxworks ortamında geçici dosyalar kaydedilirVerilen MİB için kodu zamanlarBelirtilen CPU'yu zamanlarFor döngüsü baÅŸlatma satırındaki deÄŸiÅŸkenlerin + etki alanını dışarıya geniÅŸletir%1 deki SELECT CASE içindeki %0 da CASE DEFAULT'un ikinci oluÅŸumu%1 deki WHERE deyimi için %0 da ELSE WHERE ikinci kez kullanılmışABI çaÄŸrı uzlaşımı seçilirKodu üretilecek MİB seçilirsdata eldesi için yöntem seçilir%0 daki ';' geçersizMEMW komutlu oynak bellek baÅŸvuruları üretilirWindows atamaları ayarlanırBackchain ayarlanırSınıf dosya yolu ayarlanırSınıf patikası belirtilir (eski kullanım: yerine + --classpath kullanın)YerleÅŸik matematik iÅŸlevlerinden sonra ERRNO + kullanılırEn büyük hizalama 4 e ayarlanırEn büyük hizalama 8 e ayarlanırVerinin baÅŸlangıç adresi belirlenirProgramın baÅŸlangıç adresi belirtilirELF seçenekleri baÅŸlığı içindeki PPC_EMB bitini 1 yaparSDA alanı için uygun verinin maksimum boyunu belirlerTDA alanı için uygun verinin maksimum boyunu belirlerZDA alanı için uygun verinin maksimum boyunu belirlerEn büyük satır uzunluÄŸu belirtilirÖzelik %s '%s' e ayarlanıyor + + Küçük veri alanı: none, sdata, useKüçük bellek modeli%0 daki özellik aynı G/Ç denetim listesi için ADVANCE=`NO' özelliÄŸini gerektiriyor%0 daki özellik aynı G/Ç denetim listesinde doÄŸrudan FMT= özelliÄŸini gerektiriyorKullanılacak ABI belirtilirKod üretim amacıyla MİB belirtilirZamanlama kullanımı için CPU belirtilirBir Standard MIPS ISA belirtilirbss bölümü için alternatif isim belirtilirSabit bölümü için alternatif isim belirtilirVeri bölümü için alternatif isim belirtilirdsp16xx çipi için alternatif isim belirtilirMetin bölümü için alternatif isim belirtilirArabellek boÅŸaltma iÅŸlevi belirtilirRPTS için maksimum yineleme sayısını belirtirEn büyük ÅŸablon gerçekleme derinliÄŸi seçeneÄŸe + eklenen bir sayı olarak belirtilirBelirlemek için yazmaç aralığı belirtilirlong double için boyut belirtilir (64 ya da 128 bit)Argümanların bir diÄŸerinin ya da globallerin takma + adı olabileceÄŸi varsayılırMCU ismi belirtilirİç yığın adresi belirtilirYapıların en küçük bit hizalaması belirtilirSabit dizgeler için sınıf ismi belirtilirHedef iÅŸlemcinin ismi belirtilirHedef mimarinin ismi belirtilirYazmaç ayırma sırası belirtilirPIC adresleme için kullanılan yazmaç belirtilirKayan nokta emülatörünün sürümü belirtilir%0 daki FORMAT deyimindeki numara sahte%0 daki FORMAT deyimindeki iÅŸaret sahte%0 daki FORMAT deyiminin metnindeki numara sahte%0 daki sonlandırıcı öncesinde sahte virgül%0 daki deyim %1 deki IF yapısının ELSE bloÄŸunu izliyor%0 daki deyim %1 deki BLOCK DATE program birimi içinde geçersiz%0 daki deyim %1 deki deyim tarafından oluÅŸturulan baÄŸlamda geçersiz%0 daki deyim bu baÄŸlam içinde geçersiz%0 daki deyim %1 de belirtilen yapı ismini belirtmeli%0 da atanan deyim iÅŸlevi `%A' kullanılmamışİşlev isimleri nesne kodunda saklanırYerel deÄŸerler argüman yazmaçlarında saklanırDizgeler yazılabilir veri bölümünde saklanırTüm döngülerdeki genel baÅŸlatma deÄŸiÅŸkenlerinin + gücünü azaltırAltdizge baÅŸlangıç/bitiÅŸ noktası %0 da tanımlı aralığın dışındaEQUIVALENCE deyiminde karakter olmayan öğe `%A'nın alt dizgesi3DNow! yerleÅŸik iÅŸlevleri desteklenirGreen Hills ABI desteklenirMMX ve SSE2 yerleÅŸik iÅŸlevleri ve kod üretimi + desteklenirMMX yerleÅŸik iÅŸlevleri desteklenirMMX, SSE ve SSE2 yerleÅŸik iÅŸlevleri ve kod üretimi + desteklenirThumb ve ARM komut setleri arasında çaÄŸrılar desteklenirEÅŸzamanlı Ortam ile ileti aktarımı desteklenirEÅŸzamanlı çaÄŸrısız olaÄŸandışılıklar desteklenirHata ayıklama dökümlerinde satır numarası ve komut + numarası bilgilerinın çıktılanması engellenirSeçenekler: + -include DOSYA DiÄŸer dosyalardan önce DOSYA içeriÄŸi içerilir + -imacros DOSYA DOSYAdaki makrolar kabul edilir + -iprefix DOSYAYOLU AÅŸağıdaki iki seçenek için önek olarak DOSYAYOLU + -iwithprefix DİZİN Sistem include dosya yolunun sonuna DİZİN eklenir + -iwithprefixbefore DİZİN Ana include dosya yolunun sonuna DİZİN eklenir + -isystem DİZİN Sistem include dosya yolunun başına DİZİN eklenir + Sembol isimleri küçük harflerle yazılmıştırSembol isimleri büyük harflerle yazılmıştırSembol isimlerin BüyükKüçük harflerle yazılmıştırSemboller altçizgi ile baÅŸlarHer yinelemeli DO döngüsü en azından bir tur atarHedef ayrı iÅŸlem ve veri belleÄŸine sahip olmazHedef ayrı iÅŸlem ve veri belleÄŸine sahip olurHedef makina DOUBLE COMPLEX desteklemiyor, %0 da belirtilmiÅŸHedef makina %0 da belirtilen karmaşık öğe çeÅŸidini desteklemiyorAM33 iÅŸlemci hedeflenir -march seçeneÄŸi -mipsN ile uyumsuz olduÄŸundan yoksayıldı.MMU, hizalanmamış eriÅŸimleri yakalarGenel ortak alt ifade elemesi tarafından + ayrılan en büyük bellekİşlemler listesinin tamamlanmasını + bekleyenlerin en büyük uzunluÄŸuÖzümleme için seçilebilir bir iÅŸlevde en + çok asm komutu sayısıBir gecikme yuvasını dolduracağı + varsayılan en fazla komut sayısıtam doÄŸru faal yazmaç bilgisinin + bulunmasını dikkate alacak asm + komutlarının maksimum sayısıGenel ortak alt ifade elemesi uygulanırken + yapılacak en çok geçiÅŸ sayısı`\a'nın anlamı (%0 içinde) -traditional ile deÄŸiÅŸir`\x'in anlamı (%0 içinde) -traditional ile deÄŸiÅŸirBu bir serbest yazılımdır; kopyalama koÅŸulları için kaynak koduna bakınız. + Hiçbir garantisi yoktur; hatta SATILABİLİRLİĞİ veya ÅžAHSİ KULLANIMINIZA + UYGUNLUÄžU için bile garanti verilmez. + Kanallama modeli: %s + Thumb: İşlev göstergelerinin Thumb'dan habersiz kodu imleyebileceÄŸini varsayar.Thumb: Statik olmayan iÅŸlevlerin ARM kodundan çaÄŸrılabileceÄŸini varsayarThumb: Gerekmese dahi (yaprak) yığıt çerçeveleri üretirThumb: Gerekmese dahi (yaprak olmayan) yığıt çerçeveleri üretir -fpic ve -fPIC ile birlikte GOTPLT baÅŸvurularını kullanmayın%1 deki çaÄŸrıya karşı %0 da `%A' için %B argüman çok fazla [info -f g77 M GLOBALS]%1 deki tanıma karşı %0 da `%A' ya aktarılan %B argüman çok fazla [info -f g77 M GLOBALS]%1 deki dizi referans içinde %0 da çok az eleman (%A eksik)EQUIVALENCE deyimindeki dizi `%A'ya referansta çok az eleman%0 da `%A' için ilklendiriciler listesindeki ilk deÄŸerlerlerin sayısı çok fazla%1 deki dizi referans içinde %0 da çok fazla elemanEQUIVALENCE deyimindeki dizi `%A'ya referansta çok fazla eleman%0 da baÅŸlayan ilklendiriciler listesindeki ilk deÄŸerlerlerin sayısı çok fazlaYerel deÄŸiÅŸkenlerin toplam boyutu mimarinin izin verdiÄŸi sınırı aşıyor.Yordam çaÄŸrılarında son virgül null argüman sayılırToplama, çıkartma, çarpmada signed taÅŸması yakalanırSıfırla tamsayı bölme taÅŸması yakalanırTamsayı bölme taÅŸması yakalanırTüm uyarıların hata olduÄŸu varsayılır0 deÄŸerli olanlar içerde sıfır deÄŸerli olmayanlar + gibi deÄŸerlendirilirYerel deÄŸiÅŸkenler ve COMMON blokları SAVE + deyimlerinde adlandırılmış olarak deÄŸerlendirilir.%0 daki karakter sabitin sağındaki karakterler kırpılıyor%0 daki hollerith sabitin saÄŸ tarafındaki karakterler kırpılıyor%0 daki sayısal sabitin sol tarafındaki sıfır olmayan veri kırpılıyor%0 daki türsüz sabitin sol tarafındaki sıfır olmayan veri kırpılıyorBelirtilen çip veya mib için hizalama ayarlanırBeklenen bellek gecikmesini ayarlarProgramcı denetim kodunu etkinleÅŸtirir%0 ve %1 de tek satırda iki aritmetik iÅŸlemimi -- parantez kullanın%1 deki SELECT CASE ve %0 daki aralık içindeki deÄŸer veya CASE deÄŸeri arasında tür ve/veya çeÅŸit türü parametresi uyumsuzluÄŸu%0 ve %1 deki ifadeler arasında tür uyuÅŸmazlığı%0 daki tür ismi %1 deki ile aynı deÄŸilTürsüz sabit %0 da çok büyükprint_operand da BİLİNMEYEN !?s390_output_symbolic_const da BİLİNMEYEN!?%0 da INCLUDE dosyası '%A' açılamıyorkarşılıksız ']'Tanımsız etiket, ilk olarak %0 da referanslı%s kaynak dosyası okunurken anlaşılmayan dosya sonu. + .bss içinde ilklendirilmemiÅŸ yerel deÄŸerler.data içinde ilklendirilmemiÅŸ yerel deÄŸerler%0 içinde bilinmeyen önceleme dizgesi, `\%A'0x%A karakter kodundan önceki önceleme dizgesi %0 da, `\' anlamsız-mlong-double-%s seçeneÄŸi bilinmiyor%0 da anlaşılmayan FORMAT belirteci%0 daki karakter tanınmıyor [info -f g77 M LEX]%0 da desteklenmeyen FORMAT belirteci%0 da desteklenmeyen VXT deyimi%1 deki ** için desteklenmeyen terim -- öntanımlı olan INTEGER'a dönüştürülüyorDesteklenmiyor; dizilerin kod üretimi etkilenirDesteklenmiyor; libf2c çaÄŸrı kodu üretilmez%0 içinde sonlandırılmamış denetim dizgesi `\'Kullanımı: %s [seçenekler] DOSYA... + Kullanımı: gcov [SEÇENEK]... KAYNAKDOSYASI + + %1 ve %2 deki LOGICAL terimleri için %0 da .EQ./.NE. yerine .EQV./.NEQV. kullanın128 bit long double'lar kullanılır16 bitlik tamsayı kullanılır32 bitlik float kullanılır32 bitlik tamsayı kullanılır32-bit ABI kullanılır32 bitlik FP yazmaçları kullanılır32 bitlik genel yazmaçlar kullanılır32-bit long tür kullanılırSwitch tablolarında 4 baytlık girdiler kullanılır64 bitlik float kullanılır64 bit long double'lar kullanılır64-bit ABI kullanılır64 bitlik FP yazmaçları kullanılır64 bitlik genel yazmaçlar kullanılır64-bit int tür kullanılır64-bit long tür kullanılır64 bitlik long'lar kullanılırAyrılmış ABI yazmaçları kullanılırAltiVec komutları kullanılırCygwin arayüzü kullanılırDEC çevirici sözdizimi kullanılırEABI kullanılırGNU as kullanılırGP göreli sdata/sbss bölümleri kullanılırH8/300 hizalama kuralları kullanılırfp karşılaÅŸtırmaları için IEEE aritmetiÄŸi + kullanılırIrix PIC kullanılırMIPS as kullanılırC3x için MPYI komutu kullanılırMingw'e özgü kanallama desteÄŸini etkinleÅŸtirirMingw32 arayüzü kullanılırOSF PIC kullanılırStatik olarak alınmış olduÄŸu önceden tahmin edilen dallanmalar için P-mnemonikleri kullanılırPOWER komut kümesi kullanılırPOWER2 komut kümesi kullanılırPowerPC Genel Kullanım grubu seçimlik komutları kullanılırPowerPC Graphics grubu seçimlik komutları kullanılırPowerPC komut kümesi kullanılırPowerPC-64 komut kümesi kullanılırRAM yerine ROM kullanılırUNIX çevirici sözdizimi kullanılırV8 Sparc ISA kullanılırVAX fp kullanılırVAX-C hizalaması kullanılırYazmaç yıkıcılara __cxa_atexit kullanılırGenel yazmaçları tahsis eden adresler kullanılırAlternatif alt düzey iÅŸlev girdileri kullanılırAlternatif yazmaç isimleri kullanılırYalın Windows arayüzü kullanılırBüyük ilkli bayt sıralaması kullanılırBit alanı komutları kullanılır64k dan küçük çalıştırılabilirler için bras kullanılırParametreler ve dönen deÄŸer için çaÄŸrı taşırmalı yazmaçlar kullanılırcc ve libc uyumlu 32 bitlik long'lar kullanılırKarmaşık adresleme kipleri kullanılırOynak bellek referansları için veri arabelleÄŸi kullanılır'rtd' kullanılan farklı çaÄŸrı uzlaşımı kullanılırHızlı çaÄŸrılar için doÄŸrudan CALLn komutları kullanılırGömülü PIC kullanılırEpsilona iliÅŸkin kayan nokta karşılaÅŸtırma komutları kullanılırKayan noktadan tamsayıya çevrimlerde hızlı fakat yaklaşık kesinlikte + çevrim kullanılırVerilen MİB'nin özellikleri ve zamanlama kodu kullanılırBelirtilen CPU'nun özelliklerini ve zamanlamasını kullanırDüz yazmaç pencere modeli kullanılırfp yazmaçları kullanılırBelirtilen Sparc kod modeli kullanılırVerilen çevirici aksanı kullanılırVerilen x86-64 kod modeli kullanılırDonanım kayan nokta aritmetiÄŸi kullanılırDonanım kayan nokta komutları kullanılırDonanım aritmetik iÅŸlemcisi kullanılırDonanım bazlı quad fp komutları kullanılırin/loc/out yazmaç isimleri kullanılırBüyük programlar için dolaylı CALLXn komutları kullanılırDolaylı çaÄŸrılar kullanılırÇekirdek genel yazmaçları kullanılırGeniÅŸ bellek modeli kullanılırKayan nokta iÅŸlemlerini yapmada kitaplık çaÄŸrıları kullanılırKüçük ilkli bayt sıralaması kullanılırVeri için bayt sıralaması küçük ilkli yapılırAyrımlama için mcount kullanılırAyrımlama için mcount_ptr kullanılırmips-tfile asm postpass kullanırmips16 giriÅŸ/çıkış sanal op'larını kullanırÇarpma biriktirmesi kullanırÇarpma-biriktirme fp komutları kullanırPowerPC mimarisi için yeni semboller kullanılırNormal çaÄŸrı uzlaşımı kullanılırNormal bellek modeli kullanılırSanal yöntem çaÄŸrıları için adresleme tabloları + kullanılırPowerPC mimarisi için eski semboller kullanılırDallanma olasılıkları için ayrımlama bilgileri + kullanılırÇıkan argümanları kaydedecek basma komutları + kullanılırx86-64 kodda red-zone kullanılırParametreler ve dönen deÄŸer için yazmaç yığını kullanılırArgüman aktarımı için yazmaçlar kullanılırSadece tek (32 bit) FP kullanırKayan noktadan tamsayıya çevrimlerde yavaÅŸ fakat yüksek kesinlikte + çevrim kullanırKüçük bellek modeli kullanılırYazılım kayan nokta kodu kullanılırYığıt yanlaması kullanırStandart çaÄŸrı sırasını kullnaır; argüman, sayı, word ileÇift-word kopyalamada kuvvetli hizalama için struct (yapı) kullanırİşlev önbilgisi için koçan kullanırİşlev önbilgisi/sonbilgisi için altyordamlar kullanırSembolik yazmaç isimleri kullanılırAPCS'nin 26 bitlik sürümü kullanılırAPCS'nin 32 bitlik sürümü kullanılırBK yazmaçları genel kullanım yazmaçları olarak kullanılırCygwin arayüzü kullanılırMingw32 arayüzü kullanılırXtensa MAC16 seçeneÄŸi kullanılırXtensa MIN/MAX seçeneÄŸi kullanılırXtensa MUL16 seçeneÄŸi kullanılırXtensa MUL32 seçeneÄŸi kullanılırXtensa NSA seçeneÄŸi kullanılırXtensa SEXT seçeneÄŸi kullanılırXtensa iki terimli yazmaç seçeneÄŸi kullanılırXtensa kod yoÄŸunluÄŸu seçeneÄŸi kullanılırXtensa kayan nokta aritmetiÄŸi kullanılırBit alanı komutları kullanılırDiÄŸer seçenekler tarafından izin verilen çoÄŸu özellik-etkinleÅŸtirme seçeneÄŸi kullanılırdouble türler için de float tür uzunluÄŸu kullanılırenum türünü saklamada mümkün en küçük tamsayı tür + kullanılırHizalanmamış bellek baÅŸvuruları kullanılırKullanıcı genel yazmaçları kullanılırUzunluÄŸu deÄŸiÅŸmeyen bellek yükleri kullanılırYerleÅŸik özellikler kullanılıyor. + Görsel Komut Kümesi kullanılırbir çıktıda VOIDmode%0 da deÄŸiÅŸken ifadeli FORMAT belirteci -- desteklenmiyorUyumsuz türlere çevirim iÅŸlevleri hakkında uyarırNiteleyicileri iptal eden çevirimler hakkında uyarırHiç çalışmayacak kod hakkında uyarırISO C de anlamı deÄŸiÅŸen kurucular hakkında uyarırYapılar hakkında sürpriz niteliÄŸinde uyarı verilirBir switch case'de bir sembolik sabit grubu üyesinin + bulunamadığı durumlarda uyarırDosya ÅŸemsiyesi altında bulunmayan extern'ler + hakkında uyarırİşlev göstergesi aritmetiÄŸi hakkında uyarırnoreturn özelliÄŸine aday olabilecek iÅŸlevler + hakkında uyarı verilirBiçem öznitelikleri için aday olabilecek iÅŸlevler + hakkında uyarırÖnceden bildirilmemiÅŸ genel iÅŸlevler hakkında uyarırPrototipsiz genel iÅŸlevler hakkında uyarırİşlevlerin dolaylı bildirimlerinde uyarırÇeliÅŸkili dönen türler hakkında uyarırAynı nesne birden fazla bildirilmiÅŸse uyarırSanal olmayan yıkıcılar hakkında uyarırPrototipsiz iÅŸlev bildirimlerinde uyarırDizge olmayan sabit biçemleme dizgeleri hakkında + uyarırAşırı yüklü sanal iÅŸlev isimleri hakkında uyarırHizalamayı arttıran gösterge çevirimleri hakkında + uyarırOlası eksik parantezler hakkında uyarırBiçemleme iÅŸlevleriyle ilgili olası güvenlik + sorunları hakkında uyarırArdışık nokta kurallarının olası çeliÅŸkileri + hakkında uyarırTür dönüşümlerinin olası karışıklığı hakkında uyarırİlklendiricileri çevreleyen parantezler yoksa uyarırprintf/scanf/strftime/strfmon biçem + bozuklukları hakkında uyarmazDönen yapı, birleÅŸim ve diziler hakkında uyarırsigned/unsigned karşılaÅŸtırmalarında uyarırTürü 'char' olan dizi indisleri hakkında uyarırKuÅŸkulu main bildirimleri hakkında uyarırGerçek sayıların eÅŸitlik testleri hakkında uyarır#import yönergesinin kullanımı hakkında uyarırİlklendirilmemiÅŸ otomatik deÄŸiÅŸkenler hakkında uyarırtanımlanamayan #pragma'lar hakkında uyarırFortran uzantılarının kullanımı hakkında uyarır + (ÅŸimdilik hepsinde deÄŸil)Çoklu karakter sabitlerinin kullanımı hakkında uyarır__attribute__((eskidi)) bildirimlerinde uyarı verirEffective C++ tarzı kuralların çeliÅŸkilerinde uyarmaz.class dosyaları güncel deÄŸilse uyarırBir programda C tarzı çevirim kullanılmışsa uyarırBir seçici çoklu yöntemlere sahipse uyarırEski tip boÅŸ deyimler bulunduÄŸunda uyarırDeÄŸiÅŸtiriciler gereksizken belirtilmiÅŸse uyarırİçiçe açıklamalar saptandığında uyarırBir bildirimde tür belirtilmemiÅŸse uyarırBir yapı, bir iÅŸlevin argümanıysa uyarırBir iÅŸlev önce extern sonra da inline olarak + bildirilmiÅŸse uyarırBir iÅŸlev kullanılmamışsa uyarırBir iÅŸlev parametresi kullanılmamışsa uyarırBir etiket kullanılmamışsa uyarırBir yığın baÄŸlamı belirli boyuttan büyük olduÄŸunda uyarırBir deÄŸiÅŸken kullanılmamışsa uyarırBir ifade deÄŸeri kullanılmamışsa uyarırBir özümlemeli iÅŸlev özümlenemediÄŸinde uyarırBir eniyileme aÅŸaması iptal edildiÄŸinde uyarırBir yerel deÄŸiÅŸken bir diÄŸerini gölgeliyorsa uyarırunsigned'dan signed'a yükseltmelerin aşırı + yüklemesinde uyarırYapı üyelerini hizalamak için adımlama gerekliyse + uyarırSentezleme davranışı Cfront'dan farklıysa uyarırDerleyici kodu yeniden sıralarken uyarırPaketli öznitelik yapı yerleÅŸiminde etkisizse uyarırÜçlü harfler saptandığında uyarı verilirMümkün olduÄŸunca yığın çerçeveleri üretilmezOrtak alt ifade elemesi sırasında koÅŸullu + dallanmalar izlenirOrtak alt ifade elemesi sırasında onların + hedeflerine dallanmalar izlenirİlk üretim 4300 donanım hatasının olurunu bulurDonanım çarpma hatasının olurunu bulurStorem donanım hatasının oluru bulunurYYDEBUG tanımlı deÄŸilSıfır ve bir eÅŸlemleri %1 deki union baÅŸlangıcı için %0 olarak belirtilmiÅŸ -- en azından 2 gerekli%0 içinde sıfır uzunluklu karakter sabiti%0 da sıfır uzunluklu dizi%0 daki sıfır uzunluklu özellik geçersiz[%s bırakılıyor] + [HATAYI RAPORLAYIN!!][HATAYI RAPORLAYIN!!] %[%s bulunamıyor][super ...] bir yöntem baÄŸlamında görünmeli%0 içinde \x'den sonra onaltılık rakamlar yok\x izleyen onaltılık rakamlar olmaksızın kullanılmış_Pragma bir parantezli dizge sabiti alır__VA_ARGS__ sadece argümanlarının sayısı deÄŸiÅŸebilen bir C99 makrosunun geniÅŸleme alanında görünebilir__alignof__ bir tamamlanmamış türe uygulanmış__builtin_eh_return bu hedefte desteklenmiyor__builtin_longjmp'ın ikinci argümanı 1 olmalı__builtin_saveregs bu alt hedef tarafından desteklenmiyor__builtin_saveregs bu hedef tarafından desteklenmiyor` ' bayrağı`!' bayrağı`#' bayrağı`%#D' ve `%#D' aşırı yüklü olamaz`%#D' bildirilemez`%#D' `%#D' bildiriminin önceki kullanımı ile çeliÅŸiyor`%#D' niteliksiz türe baÅŸvurmuyor, bu durumda ilintileme için kullanılmamıştır`%#D' `%#T' kurucusunu gizliyor`%#D' geçersiz; bir anonim birleÅŸik yapı sadece statik olmayan veri üyeleri içerebilir`%#D' `%#T'nin bir static üyesi deÄŸildir`%#D' bir son deÄŸiÅŸtirici gerektiriyor`%#D' evvelce burada bildirilmiÅŸ`%#D' evvelce burada tanımlanmış`%#D' %C olarak yeniden bildirilmiÅŸ`%#D' farklı bir sembol çeÅŸidi olarak tekrar bildirilmiÅŸ`%#D' bildirim öncesi kullanılmış`%#D' inline olarak bildirilmeden önce`%#T' `%D' isminde bir üye içermiyor`%#T' gösterge veri üyeleri içeriyor`%#T' sanal olmayan kurucuyla sanal iÅŸlevler içeriyor`%#T' bir ÅŸablon deÄŸil`%#T' bir ÅŸablon sabiti parametresi için geçerli bir tür deÄŸildir`%#T' sadece private bir yıkıcı tanımlıyor ve kardeÅŸleri yok`%#T' sadece private kurucular tanımlıyor ve kardeÅŸleri yok`%T' kullanılmış ama `%#T' umulmuÅŸtubir gerçel sayı deÄŸer gerekirken `%#T' kullanılmış`%%%c' yılın son iki hanesini alır`%%%c' bazı yerellerde yılın son iki hanesini alır`%%' kısıtı son terimle kullanılmış`%%d' terimi bir yazmaç deÄŸil`%%l' terimi bir etiket deÄŸil`%+#D' eriÅŸilebilir deÄŸil`%+#D' private'dir`%+#D' protected'dır`%D' eriÅŸimibildirici olarak `%D'`%D' sadece kurucular için belirtilebilir`%D' sadece iÅŸlevler için belirtilebilir`%D' sadece iÅŸlevler ve nesneler için belirtilebilir`%D' sadece bir sınıf içinde belirtilebilir`%D' daima static olduÄŸundan sanal bildirilemez`%D' öntanımlı argümanlara sahip olamaz`%D' bir `virtual' %s olarak bildirilmiÅŸ`%D' bir kardeÅŸ olarak bildirilmiÅŸ`%D' alanı bir `inline' %s olarak bildirilmiÅŸ`%D' referans olarak bildirilmiÅŸ ama ilklendirilmemiÅŸ`%D' bir olaÄŸandışılık özelliÄŸiyle bildirilmiÅŸ`%D' bir belirsiz tür gösteriyor`%D' bir ÅŸablon türü bildirmiyor`%D' zaten `%T' de bildirilmiÅŸti`%s' içi boÅŸ türde`%D' tanımından önce dolaylı olarak bildirilmiÅŸ`%#T' içindeki `%D' geçersiz`%T' içindeki `%D' geçersiz`%D' bir isim alanı`%D' zaten sınıf `%T' nin kardeÅŸi`%D' zaten bu baÄŸlamda bildirilmiÅŸ`%D' zaten `%T' içinde tanımlı`%D' zaten sınıf `%T' içinde tanımlı`%D' zaten sınıf %T içinde tanımlı`%D' bir iÅŸlev ÅŸablonu deÄŸil`%D' bir iÅŸlev deÄŸil,`%D' `%T' türünde bir üye deÄŸil`%D' bir isim alanı deÄŸil`%D' `%#T'nin tüm deÄŸerlerini tutmak için çok küçük`%D' static olmayan bir üye iÅŸlev olmalıdır`%D' kullanmadan önce bildirilmiÅŸ olmalı`%D' ya bir statik olmayan iÅŸlev ya da üye olmayan iÅŸlev olmalıdır`%D'bir kurucu ile ilklendirilmeli, `{...}' ile deÄŸil`%D' bir sınıf argümanına sahip olmalı ya da enum türünde olmalı`%D' `void' almalı`%D' ya bir ya da iki argüman almalı`%D' ya hiç argüman almamalı ya da bir argüman almalı`%D' kesinlikle bir argüman almalı`%D' kesinlikle iki argüman almalı`%D' isimleri kurucu`%D' bildirilmemiÅŸ'%D' tanımlı deÄŸil`%D' üye ilklendirici listesinde ilklendirilmiÅŸ olmalı`%D' zaten `%D' içinde bildirilmiÅŸti`%D' deÄŸeriyle döndürülmeli`%D' bildirilmemiÅŸ (bu iÅŸlevde ilk kullanımı)`%D' isim alanı `%D' içinde bildirimsiz`%D' ÅŸablon parametreleri olmaksızın kullanılmış`%D'bu kapsamda `%D' bildirilmemiÅŸ `%D' önceden dolaylı olarak dönüş deÄŸerine `int' bildirilmiÅŸ`%D::%D' bir ÅŸablon deÄŸil`%E' bir iÅŸlev olarak kullanılamaz`%E', `%T' türünde olduÄŸundan bir üye göstergesi plarak kullanılamaz`%E' `void' türünde ve bir yakalama-ifadesi deÄŸil`%E' bir tür deÄŸil, tür yapmak için `typename %E' kullanın`%E' geçerli bir ÅŸablon argümanı deÄŸil`%E' `%T' türünde deÄŸil`%T' `%D' isminde bir sınıf ya da birleÅŸik yapı içermiyor`%T' bir typedef veya yerleÅŸik tür olarak hatalıbir küme türü ataması olarak `%T' hatalı`%T' zaten `%T' nin kardeÅŸi`%T', `%T' nin bir belirsiz tabanıdır`%T', `%T' nin bir eriÅŸilemeyen tabanıdır`%T' dolaylı bir tür ismidir`%T' bir sınıf ya da isim alanı deÄŸil`%T' bir sınıf ya da birleÅŸik yapı deÄŸil`%T' bir class, struct, veya union türünde deÄŸil`%T' bir isim alanı deÄŸil`%T' bir nesneye gösterge türü deÄŸil`%T' bir ÅŸablon deÄŸil`%T' bir ÅŸablon türü deÄŸil`%T' bir geçerli ifade deÄŸil`%T' bir küme türü deÄŸil`%T' bildirici kimliÄŸi olarak belirtilmiÅŸ`%T::%D' geçerli bir bildirici deÄŸil`%V' niteleyicisi `%T' ye uygulanamazisim alanı baÄŸlamında `%s %T' bir yeni tür bildiriyor`%s' özelliÄŸi sadece iÅŸlevlere uygulanır`%s' öznitelik argümanı bir dizge sabit deÄŸil`%s' öznitelik argümanı bir tamsayı sabit deÄŸil`%s' özniteliÄŸi sadece Java sınıf tanımlarında uygulanabilir`%s' özniteliÄŸi sadece sınıf tanımlarında uygulanabilir`%s' özellik yönergesi yoksayıldı`%s' özelliÄŸi veri türlerine uygulanmaz`%s' özelliÄŸi yoksayıldı`%s' özelliÄŸi `%s' için yoksayıldıbu hedefte `%s' özniteliÄŸi desteklenmiyor`%s' özelliÄŸi sadece iÅŸlev türlere uygulanır`%s' özniteliÄŸi sadece iÅŸlevlere uygulanır`%s' özniteliÄŸi sadece sistem kesmesi iÅŸlevlerine uygulanır`%s' özniteliÄŸi sadece deÄŸiÅŸkenlere uygulanır`%s' özniteliÄŸi bir tamsayı sabit argüman gerektirir`%s' statik olarak ayrılamıyor`static' olarak bildirilen `%s' hiç atanmamış`%s' hem bir DLL'den alınan hem de bir DLL'e aktarılan olarak bildirilmiÅŸ`%s' bir iÅŸlevle sonuçlanan bir iÅŸlev olarak bildirilmiÅŸ`%s' bir dizi ile sonuçlanan bir iÅŸlev olarak bildirilmiÅŸ`%s' çaÄŸrıldıktan sonra `inline' bildirilmiÅŸ`%s' tanımlandıktan sonra `inline' bildirilmiÅŸ`%s' hem normal hem de bir rumuz olarak tanımlanmış`%s' atanmış ama kullanılmamış`%s' `%s' i yanıtlamıyor`%s' bir typedef veya yerleÅŸik veri türü olarak hatalı`%s' tamamlanmamış türde`%s' hem `extern' olarak bildirilmiÅŸ hem de öndeÄŸer almış`-g%2$s' ile çeliÅŸtiÄŸi için `%1$s' yoksayıldı`%s' ilklendirildikten sonra `extern' olarak bildirilmiÅŸ`%s' biçem iÅŸlevi türü bilinmiyor`%s' yakında kaldırılacak`%s' yakında kaldırılacak (%s:%d. satırında bildirilmiÅŸ)`%s'in uzunluÄŸu türünün deÄŸerinden daha kısa`%s' ne iÅŸlev ne de üye iÅŸlev; kardeÅŸ olarak bildirilemez`%s' normalde bir static olmayan iÅŸlev"%s" geçerli bir sınıf ismi deÄŸil`%s' bildirimin baÅŸlangıcında deÄŸil`%s' iÅŸlev baÄŸlamının dışında atanmamış`%s' artık kullanılmıyor; g++ vtables ÅŸimdi öntanımlı olarak COM-uyumludur`%s' `...' sayesinde aktarıldığında `%s'e yükseltilmiÅŸ`%s' çogu kez bir iÅŸlevdir`%s' yerel olarak external ama genel olarak static`%s' bu iÅŸlevde ilklendirilmeden kullanılmış olmalı`%s', %s tarafından desteklenmiyor`%s' farklı bir sembol çeÅŸidi olarak tekrar bildirilmiÅŸ`%s' etiketi `%#T' isimlemesinde kullanılmış`%s' ya iki argüman alır ya da hiç almaz`%s' bildirilmemiÅŸ (bu iÅŸlevde ilk kullanımı)`%s' burada bildirilmemiÅŸ (bir iÅŸlev içinde deÄŸil)`%s' tanımlanmadan kullanılmış`%s' bildirim öncesi kullanılmış`%s' önce `extern' sonra da `static' bildirilmiÅŸ`%s' önce örtük olarak `extern' sonra da `static' bildirilmiÅŸ`%s' dönen `int' ile önceden örtük bildirilmiÅŸ`%s' tanımından önce bildirimsiz kullanıldı`%s' tanımlanmadan önce prototipsiz kullanılmış`%s': -g seçeneÄŸi bilinmiyor ya da desteklenmiyor`&' ÅŸartı yazmaç sınıfsız kullanılmış`'' bayrağı`(' bayrağı`+' bayrağı`-' bayrağı`-gnat' yerine `-gant' kullanılmış`-p' desteklenmiyor; `-pg' ve gprof(1) kullanın`...' tutamağı kendi blok denemesinde son tutamak olmalıdıreski-tarz tanıtıcı listesinde `...'açıklama içinde `/*'`0' bayrağı`::%D' bildirilmemiÅŸ (burada ilk kullanımı)ÅŸablon sınıf ismindeki `>>', `> >' olmalıydıoluÅŸum baÄŸlamında `@end' eksik`@end' bir oluÅŸum baÄŸlamında görünmeli`B' terimi çoklu bit kümeleri içeriyor`B' terimi sabit deÄŸil`E' deÄŸiÅŸtirici`I' bayrağı`O' deÄŸiÅŸtirici`^' bayrağı`_' bayrağı`__alignof' bir bit-alanına uygulanmış`__builtin_next_arg' argümansız çaÄŸrılmış`a' bayrağıbaÄŸdaÅŸmayanların eÅŸitlik testlerinin `and' sonucu daima 0 dır`asm' teriminin koÅŸulu terim boyutu ile uyumsuz`asm' terimi imkansız yeniden yükleme gerektiriyor`asm' belirteçlerinde statik olmayan veri üyeleri kullanılamazbool' ÅŸimdi bir anahtar sözcüktür%s bildirimindeki `const' ve `volatile' iÅŸlev belirteçleri `%D' için geçersiz`default' etiketi bir switch deyimi içinde deÄŸil`defined' ident ya da (ident) ile izlenmeli`enum %s' `for' döngüsünün ilklendirme bildiriminde bildirilmiÅŸ`enum %s' parametre listesi içinde bildirilmiÅŸkapsam sonuna gelindiÄŸinde `enum %s' hala eksik`for' döngüsünün baÅŸlangıç bildirimi C99 kipinin dışında kullanılmışkardeÅŸ ÅŸablon özelleÅŸtirmesi `%D' bildiriminde `inline' kullanılamazhardeÅŸ sınıf bildirimi için `inline' belirtilmiÅŸ`long long long' GCC için çok uzunISO C'de `long' switch ifadesi `int'e dönüştürülmez`main', `int' döndürmeli`noreturn' iÅŸlev dönüyor`noreturn' iÅŸlevinin sonucu void deÄŸil`o' terimi sabit deÄŸil`operator delete' `%T' türünde dönmeli`operator delete' ilk parametreyi `%T'` türünde alır`operator new', `throw()' olarak bildirilmedikçe NULL dönmemeli (ya da -fcheck-new etkisindedir)`operator new' `%T' türünde dönmeli`operator new' ilk parametreyi `size_t' (`%T') türünde alır`operator=' `*this'e bir referans döndürmelieÅŸleÅŸmeyenlerin eÅŸitsizlik testlerininin `or' sonucu daima 1 dirvoid dönüşlü iÅŸlevde `return' deyimi deÄŸer içeriyorvoid olmayan dönüşlü iÅŸlevde `return' deyiminde deÄŸer yokküme olmayan ifadeye `sigof' uygulanmışküme olmayan türe `sigof' uygulanmış'sizeof' bir bit-alanına uygulandısizeof bir içi boÅŸ `%T' türüne uygulandı'sizeof' bir statik olmayan üyeye uygulandı`static' bir statik veri üyesini tanımlarken (bildirime zıt olarak) kullanılamayabilir`struct %s' `for' döngüsünün ilklendirme bildiriminde bildirilmiÅŸ`struct %s' parametre listesinin içinde bildirilmiÅŸkapsam sonuna gelindiÄŸinde `struct %s' hala eksikstatik üye iÅŸlevlerde `this' kullanılmaz`union %s' `for' döngüsünün ilklendirme bildiriminde bildirilmiÅŸ`union %s' parametre listesi içinde bildirilmiÅŸkapsam sonuna gelindiÄŸinde `union %s' hala eksik`va_start' iÅŸlev içinde sabit argümanlarla kullanılmışparametre listesindeki void listenin tamamı olmalıydıbir veri alanı özelliÄŸi yerel deÄŸiÅŸkenler için belirtilemezbir genel bildirimbir long long intbir parametreÜç noktalı bir parametre listesi bir boÅŸ parametre isim listesi bildirimi ile eÅŸleÅŸemezönceki yerelbir using bildirimi bir ÅŸablon kimliÄŸi belirtemez. `using %T::%D' deneyinbir using bildirimi bir ÅŸablon kimliÄŸi belirtemez. `using %D' deneyin%2$s dosyasının %3$d. satırındaki %1$s iÅŸlevinde programdan çıkışremap_filename içinde mutlak dosya ismimutlak bildirimci `%T' bildirim olarak kullanılmışkuramsal olmayan sınıfta kuramsal yöntem`%s' genel yazmaç deÄŸiÅŸkeninin adresi istenmiÅŸyerel deÄŸiÅŸken `%D' adresi döndürüldüextern olmayan`%E' nin adresi ÅŸablon argümanı olarak kullanılamazbaÄŸlamsal tür bilgileri olmayan aşırı yüklü iÅŸlev adresi`%s' yazmaç deÄŸiÅŸkeninin adresi istendiadres deÄŸeri bir sabit deÄŸil`register' olarak bildirilmiÅŸ `%D' için adres isteÄŸiortak deÄŸiÅŸen dönüşler için göstergeler ayarlanıyor`%#D' içindeki önceki özellikten sonraküme `%#D' içi boÅŸ türde ve tanımlı olamazküme kısmen köşeli parantezli ilklendirici içeriyorküme ilklendiricisi bir sabit deÄŸilküme ilklendiricisi karmaşık aritmetik kullanıyorkarmaşık sayı gereken yerde küme deÄŸeri kullanılmışbir gerçel sayı umulurken küme deÄŸeri kullanılmışbir tamsayı gerekirken küme deÄŸeri kullanılmışrumuz argümanı bir dizge deÄŸiltakma ad tanımlamaları bu yapılandırmada desteklenmiyor; yoksayıldıtakma ad çok uzun - takma ad yoksayıldıhizalama `%s' için belirtilmiÅŸ olmayabilirhizalama ikinin küçük bir üssü olmalı %d deÄŸil%s hizalaması en büyük nesne dosyası hizalamasından daha büyük. %d kullanılıyorsınıf `%T' içindeki tüm üye iÅŸlevler 'private'gecikme listesi son bölümde ayrıldı ama kullanılmadı `%#D' yerleÅŸik bildirimi belirsizleÅŸiyor`%#D' eski bildirimi belirsizleÅŸiyorbelirsiz kısaltma %s`%#T' için sınıf ÅŸablonu gerçeklemesi belirsizdizi altindisi için dönüşüm belirsiz%T' den öntanımlı türe dönüşüm belirsizÅŸablon özelleÅŸtirmesi `%D', `%+D' için belirsizbir anonim birleÅŸik yapı iÅŸlev üyeler barındıramazBir öntanımlı yükseltme içeren bir argüman türü, bir boÅŸ parametre isim listesi bildirimi ile eÅŸleÅŸemezbir unsigned long intbir unsigned long long inteski tarz temel sınıf ilklendirici zamansızvektör silmede dizi boyutunun zamansız kullanımı%d bit uzunluktadır, ama g77 hepsi 32 bit uzunlukta olmadığından henüzüyesiz anonim kümeanonim enum parametre listesinin içinde bildirilmiÅŸanonim yapı parametre listesinin içinde bildirilmiÅŸanonim yapı isimli türün içinde deÄŸilanonim birleÅŸik yapı parametre listesinin içinde bildirilmiÅŸargümanlarının sayısı deÄŸiÅŸebilen anonim makrolar C99 da tanıtıldıbiçemlendirilmiÅŸ argümanlar '...' deÄŸil%d. argüman bir yapı`__builtin_altivec_predicate'in 1. argümanı kapsamdışı`__builtin_altivec_predicate'in 1. argümanı bir sabit olmalı`%s' için 3. argüman 2 bitlik bir deÄŸer olmalı`%s' argümanı prototipte belirtilen türle uyumsuzargüman `%s' `longjmp' ya da `vfork' tarafından taşırılmış olmalıargüman bir yapı%s den sonraki argüman eksik`%s' özniteliÄŸinin argümanı "ilink1" ya da "ilink2" deÄŸildir`%s' in argümanı bir sabit dizge deÄŸil`__builtin_args_info'nun argümanı bir sabit olmalıdır`__builtin_args_info'nun argümanı kapsamdışı`__builtin_eh_return_regno' argümanı sabit olmalı`asm' argümanı bir sabit dizge deÄŸil`%T' türündeki argüman `%T' ile uyumsuz`%s' özniteliÄŸine argüman %d den büyük`%s' için argüman eksik`%s' için argüman eksik + `-%s' için argüman belirtilmemiÅŸ`-B' için argüman belirtilmemiÅŸ`-V' için argüman belirtilmemiÅŸ`-Xlinker' için argüman belirtilmemiÅŸ`-b' için argüman belirtilmemiÅŸ`-l' için argüman belirtilmemiÅŸ`-specs' için argüman belirtilmemiÅŸ`-specs=' için argüman belirtilmemiÅŸ`-x' için argüman belirtilmemiÅŸ`%s' makrosuna verilmiÅŸ argümanlarbir içi boÅŸ tür göstergesi üzerinde aritmetik`%s' dizisi tek elemanlı kabul edildiilklendiricideki dizi indeksi dizi sınırlarının dışındadizi-olmayan ilklendiricide dizi indisiilklendiricideki dizi indeksi aralığı dizi sınırlarını aşıyordizinin ilklendiricisi olarak sabit olmayan dizi ifadesi kullanılmış`%D' de dizi boyutu eksik`%s' içinde dizi boyu eksikdizi altindisi `char' türündedizi altindisi bir tamsayı deÄŸildizi türü içi boÅŸ öğe türü içeriyorsayısal deÄŸer gerekirken dizi türü deÄŸer kullanılmışiÅŸlev dizileri anlamlı deÄŸil`%D' olarak yeniden bildirimi geçersizasm bildirimi önceki isim deÄŸiÅŸikliÄŸi ile çeliÅŸiyorasm terimi %d belki ÅŸartlara uymazasm ÅŸablon bir dizge sabit deÄŸil%s den sonra olumlama eksikdayanaksız olumlamaatamabildirim içinde atama (ilklendirme deÄŸil)atama engellemebitiÅŸ alanı `%s' ataması kurucu içinde deÄŸilbitiÅŸ alanı `%s' ataması alanların sınıfı içinde deÄŸilbitiÅŸ statik alanı `%s' ataması sınıf ilklendiricisi içinde deÄŸilaşırı yüklü iÅŸlevden tür `%T' ye çevirim yapıldığı varsayılıyorüye `%D'ye gösterge varsayılıyordosyanın burasındabit-alanı yapının `%D' üyesinin adresi alınmaya çalışılıyorbit-alanı yapının `%s' üyesinin adresi alınmaya çalışılıyorzehirli "%s" kullanılmaya çalışılıyorparametre dizisi bildirimindeki özellikler yoksayıldıboÅŸlukla ayrılmış tersbölü ve satırsonu karakterleridosya sonunda tersbölü ve satırsonuyerel `%s' için hata ayıklama bilgisinin program sayacı (PC) kapsamı hatalıhatalı adreshatalı adres, (reg+disp) deÄŸil:Yığın alanı kaldırma miktarı hatalı: %ddizi ilklendirici hatalıd30v_move_2words çaÄŸrısı hatalıyönerge hatalı -- kapatan tırnak eksikbaÅŸlık sürümü hatalı'A' için hatalı komutd30v_print_operand, 0 case içinde hatalı komut:d30v_print_operand, 'A' deÄŸiÅŸtirici için hatalı komut:d30v_print_operand, 'M' deÄŸiÅŸtirici için hatalı komut:d30v_print_operand, 'f' deÄŸiÅŸtirici için hatalı komut:d30v_print_operand_address için hatalı komut:d30v_print_operand_memory_reference için hatalı komut:print_operand, 'B' deÄŸiÅŸtirici için hatalı komut:print_operand, 'E' deÄŸiÅŸtirici için hatalı komut:print_operand, 'F' ya da 'T' deÄŸiÅŸtirici için hatalı komut:print_operand, 'R' deÄŸiÅŸtirici için hatalı komut:print_operand, 's' deÄŸiÅŸtirici için hatalı komut:sihirli sayı hatalı'%s' dosyasında sihirli sayı hatalıyöntem imzası hatalıyazmaç %s, kip1 %s, kip2 %s için modes_tieable_p hatalıexception_table içindeki pc hatalıtemel baÅŸlık sürümü hatalıyazmaç kötühatalı yazmaç uzantı koduhatalı kaydırma komutu:dizge sabit hatalıhatalı testparametre hata ayıklama bilgisindeki tür hatalı%s seçeneÄŸi için deÄŸer (%s) hatalı-mabi= seçeneÄŸinin deÄŸeri (%s) hatalı-march= seçeneÄŸinin deÄŸeri (%s) hatalı-masm= seçeneÄŸinin deÄŸeri (%s) hatalı-mcmodel= seçeneÄŸinin deÄŸeri (%s) hatalı-mcpu seçeneÄŸi için deÄŸer (%s) hatalı-mcpu= seçeneÄŸinin deÄŸeri (%s) hatalı-mfpmath= seçeneÄŸinin deÄŸeri (%s) hatalı-mips seçeneÄŸinin deÄŸeri (%s) hatalı-mmodel seçeneÄŸinin deÄŸeri (%s) hatalı-msdata seçeneÄŸinin deÄŸeri (%s) hatalı-mtune= seçeneÄŸinin deÄŸeri (%s) hatalı-mcpu seçeneÄŸi için `%s' deÄŸeri hatalı-mfp-rounding-mode seçeneÄŸi için `%s' deÄŸeri hatalı-mfp-trap-mode seçeneÄŸi için `%s' deÄŸeri hatalı-mmemory-latency için deÄŸer `%s' hatalı-mtrap-precision seçeneÄŸi için `%s' deÄŸeri hatalıdeÄŸer sabiti türü %d, indeks %d hatalı-mcall-%s için deÄŸer hatalı-msdata=%s için deÄŸer hatalızip/jar dosyası %s hatalıhatalı ÅŸekillendirilmiÅŸ yönerge -- kapatan tırnak yoköniÅŸlemciden C baÅŸlıkları hatalı yuvalanmış#define yönergesinde kötü vurgulanmış parametre listesisadece bir kurucusuz sınıftaki öntanımlı olmayan kuruculu taban `%T'taban sınıf `%#T' bir sanal olmayan yıkıcıya sahiptaban sınıf `%#T' kopyalama kurucusunda doÄŸrudan ilklendirilmiÅŸ olmalıtaban sınıf `%T' zaten ilklendirilmiÅŸtaban sınıf `%T' cv niteleyiciler içeriyortaban sınıf `%T' içi boÅŸ türde`%T' için taban ilklendirici`%#T'amaçlı yöntem çaÄŸrısının taban nesnesi `%E' yeni sınıf oluÅŸturamayan `%T' türününkidir`->' için taban terim bir gösterge olmayan `%T' türünde`->' için taban terim bir gösterge deÄŸiltaban tür `%T' bir yapı veya sınıf türü olarak hatalı%d. temel bloÄŸun öncel kenarı bozuktemel blok %i kenar listesi bozuktemel bloklar ardışık olarak numaralı deÄŸiltümleyen olmayan tür ile bit-alanı `%#D'bit alanı `%D' için geniÅŸlik bir tamsayı sabit deÄŸil`%s' bit alanı geçersiz tür içeriyor`%s' bit alanının türü ISO C'de geçersiz`%s' bit alanı geniÅŸliÄŸi bir tamsayı sabit deÄŸilblok_num = %ld, blok_sayısı = %d + taklit JARL oluÅŸturma: %d + Taklit JR oluÅŸturma: %d + iki terimli yazmaçlar kayan nokta seçeneÄŸi için gerekligerçel sayı sabitte hem 'f' hem de 'l' sonekleri`%s' için hem long hem de short belirtilmiÅŸ`%s' için hem signed hem de unsigned belirtilmiÅŸifade içinde parantezli gruplamalara sadece bir iÅŸlevin içinde izin verilirskalar ilklendiriciyi kuÅŸatan parantezler`%T' için skalar ilklendiriciyi kuÅŸatan parantezler%d. dal hiç çalıştırılmadı + %d. dal alınma sayısı = %s + %d. dal alınma yüzdesi = %%%s + break deyimi switch ya da döngü içinde deÄŸilyerleÅŸik iÅŸlev `%s' iÅŸlev olarak bildirilmemiÅŸyerleÅŸik iÅŸlev `%s' ÅŸu an desteklenmiyorc4x_address_cost: Adresleme kipi geçersizc4x_operand_subword: adres konumlanabilir deÄŸilc4x_operand_subword: geçersiz adresc4x_operand_subword: otomatik arttırma geçersizc4x_operand_subword: geçersiz kipc4x_operand_subword: geçersiz terimc4x_print_operand: %%L uyumsuzluÄŸuc4x_print_operand: %%N uyumsuzluÄŸuc4x_print_operand: %%O uyumsuzluÄŸuc4x_print_operand: Hatalı terim casec4x_print_operand_address: Hatalı terim casec4x_print_operand_address: Hatalı post_modifyc4x_print_operand_address: Hatalı pre_modifyc4x_rptb_insert: baÅŸlangıç etiketi bulunamıyorc4x_rptb_rpts_p: Tekar bloÄŸu tepe etiketi taşındı + c4x_valid_operands: İç hata%d. çaÄŸrı hiç çalıştırılmadı + %d. çaÄŸrı dönüş sayısı = %s + %d. çaÄŸrı dönüş yüzdesi = %%%s + `(%T) (%A)' çaÄŸrısı belirsizaşırı yüklü `%D(%A)' çaÄŸrısı belirsizJava `catch' ya da `throw' a `jthrowable' ile çaÄŸrı tanımsız`%s' li Java kurucusuna çaÄŸrı tanımsız`jclass' tanımlanmamışken Java kurucusuna çaÄŸrıçaÄŸrı-taÅŸmalı yazmaç genel yazmaç deÄŸiÅŸkeni için kullanılmış buradan çaÄŸrıldıçaÄŸrılan nesne bir iÅŸlev deÄŸiltür `%T' çaÄŸrısı tıpkı bir yöntem gibiçeliÅŸkili `%s' çaÄŸrıları elde edilemez`%s' özniteliÄŸi sadece sınıf türünün nesnelerinin dosya baÄŸlamı tanımlarında kullanılabilirdonanım yazmacında karmaşık deÄŸerin sanal kısmına eriÅŸilemezdonanım yazmacındaki karmaşık deÄŸerin gerçek kısmına eriÅŸilemez%s kapatılamıyorgirdi dosyası %s kapatılamıyorgeçici dosya kapatılamıyorfarklı boydaki vektör deÄŸerleri arasında dönüşüm yapılamaziçi boÅŸ tür `%T' den `%T' ye dönüşüm yapılamazdeÄŸer bir vektöre dönüştürülemezdizin %s oluÅŸturulamıyordepo bilgisi `%s' dosyasında oluÅŸturulamıyoryerel sınıf tanımı içinde kardeÅŸ iÅŸlev `%s' tanımlanamazStandart girdiden girdili bağımlılık izlemesi yapılamaz`%s' geniÅŸletilemiyor`asm' yeniden yüklenirken sınıf `%s' içindeki bir yazmaç ismi bulunamıyorclass$ bulunamıyorçalışılan dizin alınamıyor-mfp-arg-in-fp-regs ile varargs olamazkardeÅŸ iÅŸlev `%s' ilklendirilemiyor`%s' çaÄŸrısı `inline' olamazbir yöntem içinde `%D' yapılamaz -- sınıf içinde deÄŸil%s anlamlandırılamıyor%s açılamıyor%s yazmak için açılamıyorçıktı dosyası `%s' açılamıyorgeçici dosya okunamıyorkurucular için öntanımlı dönüş deÄŸeri tekrar tanımlanamaz%s tekrar açılamıyorgeçici dosya açılamıyor`%s' özelliÄŸine tanımlandıktan sonra deÄŸer atanamaz`--main' olmaksızın `-D' belirtilemez + '%s' bir %s yazmacı olarak kullanılamıyorçıktı dosyasına yazılamıyoraday%s: %+#Diçi boÅŸ tür `%T' ye bir gösterge %s yapılamaz`%T' türünde bir nesne tahsis edilemezüye göstergesi `%E' kümeleme türü olmayan `%T' türündeki `%E' ye uygulanamazyıkıcı `%T::~%T' nesnesiz çaÄŸrılamazüye iÅŸlev `%D' nesne olmaksızın çaÄŸrılamaz`%E' `%T' den `%T' ye çevrilemiyor`%T' `%T' ye argüman `%P' den `%D' ye için dönüştürülemez `%T' `%T' ye %s içinde dönüştürülemeztaban `%T' türünden türetilmiÅŸ `%T' türü sanal taban `%T' üzerinden dönüştürülemezbir gösterge türüne dönüştürülemeztür `%T' `%T' türüne dönüştürülemiyorreferans üyesi `%D' için gösterge oluÅŸturulamazgeçici dosya oluÅŸturulamıyorboyutu deÄŸiÅŸken olduÄŸundan tür `%T' için tür bilgisi oluÅŸturulamıyor%s referanslara bildirilemez`%D' bir bit alanı türü olarak bildirilemez`::main' bir ÅŸablon olarak bildirilemez`::main' inline olarak bildirilemez::main' «static» olarak bildirilemezbir alanı `%D' iÅŸlev türle bildirilemezalan `%D' `%T' türünde bildirilemezüye `%T::%s' `%T' içinde bildirilemezüye iÅŸlev `%D' static ilintilemeli olarak bildirilemezüye iÅŸlev `%T::%s' `%T' içinde bildirilemezparametre `%D' `%T' türünde bildirilemez`%#T' üyeye gösterge bildirilemezreferanslara gösterge bildirilemezreferanslara referans bildirilemezstatik iÅŸlev diÄŸer bir iÅŸlevin içinde bildirilemezdeÄŸiÅŸken `%D' `%T' türünde bildirilemezbir iÅŸlev silinemez. Sadece nesnelerin göstergeleri `silinecek' geçerli argümanlardır.`%s' yerleÅŸik iÅŸlev olduÄŸundan iptal edilemezz-yazmaç yer deÄŸiÅŸtirmesi yapılamaz`%E' (`%#T' türünde) den `%#T' ye dinamik çevirim yapılamaz (%s)üye `%#D' dış ilintilemeye sahip olacak ÅŸekilde doÄŸrudan bildirilemez`%s' bulunamıyor`ldd' bulunamıyor`nm' bulunamıyorsınıf yöntemi bulunamıyorsınıf `%s' bulunamıyorsınıf %s için dosya bulunamıyor`%s' için arabirim bildirimi bulunamıyor`%s' için arabirim bildirimi ve `%s' süper sınıfı bulunamıyoryöntem bulunamıyor`%s' için protokol bildirimi bulunamıyorsınıf `%s' için referans etiketi bulunamıyorkaynak %s bulunamıyor`%D' isim alanı `%D' olarak ilklendirilemez`%T' `%T' den ilklendirilemezbu sözdizimi kullanılarak diziler ilklendirilemezçok boyutlu diziler ilklendiricilerle ilklendirilemez`main' özümlenen iÅŸlev olamazBölme hem iÅŸ geçiÅŸi hem de gecikme için eniyilenemezPOD olmayan `%#T' türünün nesneleri `...' üzerinden aktarılamazgelgeç alanlı nesne yazmaça konulamazPOD olmayan `%#T' türünün nesneleri `...' üzerinden alınamaz`asm' içindeki tamsayı sabit terim yeniden yüklenemiyoraşırı yüklü `%D' `%T' türünün dönüşümüne tabanlı olarak çözümlenemiyorbir kurucunun bir iÅŸlev deneme bloÄŸunun bir tutamağından döndürülemezsistem kesmesi özniteliÄŸi ayarlanamıyor: böyle bir iÅŸlev yoksistem kesmesi özniteliÄŸi ayarlanamıyor: böyle bir tanımlayıcı yok-o çoklu derlemeler, -c ya da -S ile kullanılamazilintileme yapılmayacaksa `main' sınıfı belirtilemezhem -C hem de -o belirtilemez`%s' bit-alanının adresi alınamıyorbir saÄŸ yan ifade olarak `this'in adresi alınamazparametre bildiriminde `::' kullanılamaztypeid, -fno-rtti ile kullanılamazkesme iÅŸlevinde va_start kullanılamazcase etiketi `%E' bir switch deyimi içinde deÄŸilcase etiketi bir tamsayı sabite indirgenmezcase etiketi bir switch deyimi içinde deÄŸilcase deÄŸeri `%ld' sembolik sabit grubunda deÄŸilcase deÄŸeri `%ld' sembolik sabit grubu `%s' içinde deÄŸilçevirim, iÅŸlev türüne yeni niteleyiciler ekliyorçevirim, gösterge hedef türünden niteleyicileri iptal ediyorçevirim iÅŸlev türle uyumsuz`%T' den `%T' ye çevirim, gösterge hedef türünden niteleyicileri iptal ediyor`%T' den `%T' ye çevirim hedef türün hizalama gereksinimini arttırıyorgöstergeden farklı tamsayı türlere çevirimçevirim hedef türün gerekli hizalamasını azaltıyorçevirim tür olarak dizi belirtiyorçevirim tür olarak iÅŸlev belirtiyorsol yan olarak kullanılmış referans olmayan türe çevirimfarklı türdeki tamsayıdan göstergeye çevirimunion içinde mevcut olmayan türden union türe çevirim`%T' den `%T' ye çevirim gösterge referansını kaldırmıyorcccp hatası: özel isimli-yapı türü geçersiz`%D' nin (`%+#D' deki) anlamı deÄŸiÅŸiyorsistem dizini "%s" için arama sırasıkarakter dizisinin ilklendiricisi olarak geniÅŸ dizge kullanılmışkarakter sabit çok uzunya büyük ya da küçük ilkli kullanın, ikisi birden olmazYa m340 ya da m210 kullanın, ikisi birden olmaz`%D' `%D' üzerinden seçiliyor`%#D' lik öntanımlı argümanlarda döngüsel bağımlılık`%s' için arabirim bildiriminde döngüsel kalıtımdöngüsel gösterge görevlendirmesi saptandısınıf '%1$s' '%3$s' ile eÅŸleÅŸen '%2$s' yöntem ismini içermiyorsınıf `%T' `%D' isimli hiçbir alan içermiyorsınıf `%T' kendisiyle dolaylı kardeÅŸsınıf `%s' zaten var`%s' sınıfı `%s' protokolünü desteklemiyorclose %dclose %sPIC kipinde %s kod modeli desteklenmiyor%2$s bit kipinde `%1$s' kod modeli desteklenmiyor'büyük' kod modeli henüz desteklenmiyorcollect2 %s sürümücollect: %s okunuyor + collect: %s yeniden derleniyor + collect: yeniden birleÅŸtirme yapılıyor + collect: %2$s içindeki %1$s ÅŸablon zayıflatması + sembolik sabitler listesinin sonunda virgüldönen deÄŸeri ilklendirirken virgüllü ifadeler kullanılmış#if'in teriminde virgül== veya != ile karşılaÅŸtırma gerçel sayılarda güvenli deÄŸil`%#T' ile `%#T' arasında karşılaÅŸtırmagösterge ile tamsayı arasında karşılaÅŸtırmasigned ile unsigned arasında karşılaÅŸtırmaiÅŸaretli ve iÅŸaretsiz tamsayı ifadeler arasında karşılaÅŸtırma`%#T' ile `%#T' türleri arasında karşılaÅŸtırmakarşılaÅŸtırma sonucu daima %dkarşılaÅŸtırma bit alanının geniÅŸliÄŸinden dolayı daima %dveri türünün kapsadığı sınırlardan dolayı karşılaÅŸtırma sonucu daima yanlıştırveri türünün kapsadığı sınırlardan dolayı karşılaÅŸtırma sonucu daima doÄŸrudurtamamlanmış ve içi boÅŸ göstergelerin karşılaÅŸtırmasıbelirgin gösterge türlerinin karşılaÅŸtırması bir çevirim gerektirirsabitle yükseltgenmiÅŸ ~unsigned karşılaÅŸtırmasıunsigned ile ~unsigned'a yükseltgenmiÅŸ türlerin karşılaÅŸtırmasıunsigned ifade < 0 daima yanlıştırunsigned ifade >=0 daima doÄŸrudurX<=Y<=Z gibi bir karşılaÅŸtıma matematiksel olarak anlamlı deÄŸilbaÅŸlık dosyası derlemesi istendiderleme sonlandırıldı. + karmaşık tamsayı sabit `complex int' için çok büyük`%s' için karmaşık geçersizlik__FUNCTION__ ile dizge sabitlerin birleÅŸtirilmesi yakında kullanımdan kaldırılacakyapılandırma: REAL, INTEGER, ve LOGICAL %d bit uzunlukta ve göstergeler deyapılandırma: char * %d bit tutar ama INTEGER sadece %d bittir + -- ASSIGN deyimi baÅŸarısızyapılandırma: char * %d bit tutar ama ftnlen sadece %d bittir`%s' alanı için eriÅŸim özellikleri çeliÅŸkili, yoksayıldı`%D' yöntemi için eriÅŸim özellikleri çeliÅŸkili, yoksayıldıçeliÅŸkili mimariler atanmış - C serisi kullanılıyorçeliÅŸkili mimariler atanmış - K serisi kullanılıyor`%s' bildirimlerinde çeliÅŸki`%D' için çeliÅŸen dönüş türü belirtilmiÅŸsüper sınıf ismi `%s' çeliÅŸiyor`%#D' için çeliÅŸen türler`%s' için tür çeliÅŸkisiyerleÅŸik iÅŸlev `%s' için tür çeliÅŸkisi`%#D' yerleÅŸik bildirimiyle çeliÅŸiyoriÅŸlev bildirimi `%#D' ile çeliÅŸiyor%L ilintili yeni bildirim ile çeliÅŸiyor`%#D' önceki bildirimiyle çeliÅŸiyorconst `%s' `mutable' olarak bildirilemez`%s' için 'const' bildirimi sabit olmayan izliyorconst nesneleri .sdata/.sbss içinde bulunamazconst_double_split got bir hatalı komut:kurucu, statik üye iÅŸlevi olamazyabancı sınıf `%T' için kurucu, bir üye olamazkurucu sözdizimi kullanılmış ama `%T' türü için kurucu bildirilmemiÅŸkurucular virtual olarak bildirilemezkurucular `%s' olmayabilircontinue deyimi bir döngü içinde deÄŸildenetim void olmayan iÅŸlevin sonunu aşıyorNaN'dan int'e dönüşümNaN'dan unsigned int'e dönüşüm`%#T' den `%#T' ye dönüşüm`%T' den `%T' ye dönüşüm niteleyicileri iptal ediyor`%T' den `%T' ye dönüşüm belirsiz`%T' türünden skalar olmayan `%T' türüne dönüşüm istendidönüşüm, biçem sonunda türden yoksun`%E' nin `%T' den `%T' ye dönüşümü belirsiz%s%s e dönüşüm asla bir tür dönüşüm iÅŸlemimi kullanmayacaktamamlanmamış türe dönüşümsayısal olmayan türe dönüşüm istendiNULL'dan gösterge olmayan türe dönüşüm`%T' den`%T' ye dönüşümaşırı yüklü iÅŸlev `%D'nin `%#T' türüne dönüşümü belirsizbozuk profil bilgisi: %3$d olduÄŸu halde %1$d-%2$d için sonda0x%l.8x bir bölge içine dönüştürülemedi`%E' den `%T' ye dönüşüm yapılamazÅŸablon argümanı `%E' `%T' ye dönüştürülemedibir döküm yazmacı bulunamadı`%T' türündeki java arabiriminde class$ alanı bulunamadıözellik dosyası %s bulunamadı + döküm dosyası `%s' açılamadıkomut çatallanamadıbağımlılık izlemesi için hedef isim saptanamıyor%s oluÅŸturuluyor`%T' dizisi oluÅŸturulmasıdizi sıfır uzunlukta oluÅŸturuluyorsıfır boyutlu dizi oluÅŸturuluyor (`%E')sınıf olmayan `%T' türünde üye iÅŸlev göstergesi oluÅŸturulmasısınıf olmayan `%T' türünde üye göstergesi oluÅŸturulmasıüye referans türü `%T' için gösterge oluÅŸturulmasıcrossjump iptal edildi: %d > 1000 temel blok ve %d >= 20 kenar/temel blokmevcut dosya %s den daha eskid30v_emit_comparison'%s' veri alanı önceki bildirimle çeliÅŸiyorveri tanımı tür ya da saklama sınıfı içermiyorfarklı kıymetli bayt sıralamalı makina üzerinde veri ilklendirmesiveri üyesi `%D' bir üye ÅŸablonu olamaz`%s' veri türü bir yazmaç için kullanılabilir deÄŸilondalık sabit unsigned tür için büyüküs bir ondalık sayı -- imkânsız!bildirim hiçbir ÅŸey bildirmiyor`%s' parametre bildirimi olmayan bir parametre için yapılmışC iÅŸlevi `%#D' bildirimi ile`%#D' yeniden bildirimi`%#D' hem `extern' olarak bildirilmiÅŸ hem de ilklendirilmiÅŸsınıf dışında `%#D' bildirimi bir tanımlama deÄŸil`%#D' genel bildirimi bir parametreyi gölgeliyor`%D' %s olarak bildirilmişçok boyutlu dizi olarak `%D' bildiriminde ilki dışında tüm boyutlar sınırlanmış olmalıdır`%D' nin iÅŸlev olmayan olarak bildirimi`%D' bildirimi `%D' yi kuÅŸatan isim alanının içinde deÄŸil`%F' bildirimi farklı olaÄŸandışılıkları yakalıyor`%s' iÅŸlevler dizisi olarak bildirilmiÅŸ`%s' void'ler dizisi olarak bildirilmiÅŸ`%s' bildirimi hem `extern' hem de ilkdeÄŸerli`%s' bildirimi %s'i gölgeliyor`%s' bildirimi bir `this' üyesini gölgeliyor`%s' bildirimi bir parametreyi gölgeliyor`%s' bildirimi parametre listesinden bir sembolü gölgeliyor`for' döngüsü ilklendirme bildirimi içinde `extern' deÄŸiÅŸken `%s' bildirimi`for' döngüsü ilklendirme bildirimi içinde deÄŸiÅŸken olmayan `%s' bildirimi`for' döngüsü ilklendirme bildirimi içinde `static' deÄŸiÅŸken `%s' bildirimiÅŸablon bildirimi `%#D'bildirmci kimliÄŸi eksik; saklı yedek sözcük `%D' kullanılıyorbilinmeyen yapı göstergesinde eksiltmeöntanımlı argüman `%E' yerel deÄŸiÅŸken `%D' yi kullanıyor`%#D' için öntanımlı argüman `%T' türünde`%T' türündeki parametrenin öntanımlı argümanı `%T' türünde`%#D' nin %d. parametresi için verilen öntanımlı argümanparametre %P (`%+#D' nin) için öntanımlı argüman eksikdoÄŸrudan özelleÅŸtirme içinde öntanımlı argüman belirtilmiÅŸkardeÅŸ ÅŸablon özelleÅŸtirmesi `%D' bildiriminde öntanımlı argümalar kullanılamazreferans türe sahip `%#D'nin default ilklendirmesikardeÅŸ bildirimlerde doÄŸrudan özelleÅŸtirme `%D' tanımlanıyorÅŸablon parametre listesinde `%#T' tanımıkoÅŸul içinde dizi `%#D' tanımıkoÅŸul içinde class `%T' tanımıkoÅŸul içinde enum `%T' tanımıdolaylı bildirimli `%D' tanımıtanım doÄŸrudan gerçekleme için üretilmiÅŸ`%T' silinmesi tanımsızdizi `%#D' siliniyordizge sabitten `%T' ye modası geçmiÅŸ dönüşümbileÅŸik ifadenin sonunda etiket kullanımının modası geçti`void *' gösterge baÅŸvurusu bozulmasıiçi boÅŸ türe gösterge baÅŸvuru bozulmasıtüretilmiÅŸ union `%T' geçersizyıkıcı `%T' sınıf ismi `%T' ile eÅŸleÅŸmeliyıkıcı, statik üye iÅŸlevi olamazyabancı sınıf `%T' için yıkıcı, bir üye olamazyıkıcı ismi `~%T' ifadenin türü `%T' ile eÅŸleÅŸmiyorcase etiketinin yerindeki `%#D' içinyıkıcı belirteci `%T::~%T' uyumlu isimlere sahip olmalıyıkıcı belirteci `%T::~%T()' uyumlu isimlere sahip olmalıyıkıcılar `%s' olmayabiliryıkıcılar parametre almazyıkıcılar üye iÅŸlevler olmalıdıryıkıcılar parametre almaziÅŸlev %s ve diyagramın tüm bb girdileri kullanılmadı + farklı türdoÄŸrudan taban `%T' belirsizlikten dolayı `%T' içinde eriÅŸilebilir deÄŸilyönergeler bir makro argüman içinde kullanılmayabilir%s den sonra dizin ismi eksik-I seçeneÄŸinden sonra dizin ismi eksikdizin ismi -I'ye yapışık yazılmalısıfırla bölme#if içinde sıfırla bölme`%E %% 0' da sıfırla bölme`%E %% 0.' da sıfırla bölme`%E / 0' da sıfırla bölme`%E / 0.' da sıfırla bölme#if ifadelerinde çift tırnaklı dizgelere izin verilmezüye `%D' nin public olmayan eriÅŸiminden dolayıbir kurucunun varlığından kaynaklanıyordup2 %d 1yinelenmiÅŸ (ya da birbirini kapsayan) case deÄŸerlerialan '%s' için ConstantValue özniteliÄŸi yinelendi`%s' yinelenmiÅŸ`const' yinelenmiÅŸ`restrict' yinelenmiÅŸ`volatile' yinelenmiÅŸterim ismi '%s' yinelenmiÅŸyinelenmiÅŸ taban türü `%T' geçersizyinelenmiÅŸ case deÄŸeriprotokol `%s' için birden fazla bildirimsınıf yöntemi `%s' birden fazla bildirilmiÅŸgerçekleme yöntemi `%s' birden fazla bildirilmiÅŸsınıf yöntemi `%s' birden fazla atanmışgerçekleme yöntemi `%s' birden fazla atanmışyinelenmiÅŸ enum deÄŸeri `%D'yinelenmiÅŸ doÄŸrudan `%#D' gerçeklemesiyinelenmiÅŸ doÄŸrudan `%#T' gerçeklemesiyinelenmiÅŸ alan `%D' (hem enum hem de deÄŸil)yinelenmiÅŸ alan `%D' (hem tür hem de deÄŸil)%D nin yinelenmiÅŸ ilklendirmesi`%s(%s)' kategororisi için birden fazla arayüz bildirimi`%s' sınıfı için birden fazla arabirim bildirimiyinlenmiÅŸ etiket `%D'`%s' etiketi birden fazla bildirilmiÅŸyinelenmiÅŸ makro parametresi "%s"yinelenmiÅŸ üye `%D'üye `%s' yinelenmiÅŸyinelenmiÅŸ iç içe tür `%D'%s bildirimde yinelenmiÅŸ tür niteleyicilerdinamik bağımlılıklar. + %s dinamik bağımlılığı yok`%#D' nin `%#T' ye dinamik çevirimi asla baÅŸarılı olamaz`%#D' dizisinin elemanları içi boÅŸ türde`%s' dizisinin elemanları tamamlanmayan veri türüne sahipbiçem içinde gömülü `\0'PIC terimi üretiliyor ama PIC yazmacı ayarlı deÄŸilboÅŸ #if ifadesielse ifadesinin gövdesi boÅŸkarakter sabit boÅŸboÅŸ bildirim#%s deyimindeki dosya ismi boÅŸilklendiricide indeks aralığı boÅŸ%s biçeminde sol taraf duyarlığı boÅŸ%s biçeminde boÅŸ duyarlıkboÅŸ aralık belirtilmiÅŸskalar ilklendirici boÅŸgeri izleme desteÄŸinin etkinleÅŸtirilmesi sadece Thumb komut seti için derleme yapılırken anlamlıdırçaÄŸrılan ile birlikte çalışma desteÄŸinin etkinleÅŸtirilmesi sadece Thumb için derleme sırasına anlamlıdırçaÄŸrıcı ile birlikte çalışma desteÄŸinin etkinleÅŸtirilmesi sadece Thumb için derleme sırasına anlamlıdırsınıf ÅŸablonlarının zarflanması doÄŸrudan özelleÅŸtirilmiyor%2$d. bloÄŸunun son komutu %1$d komut akışı içinde yok.enum parametrelerin içinde tanımlanmışşartlı ifade içinde enum ve enum olmayan türlerÅŸartlı ifade içinde enum uyumsuzluÄŸu: `%T' vs `%T'sembolik sabit grubu deÄŸeri `%s' switch deyiminde elde edilemedisembolik sabit grubunun deÄŸerleri en büyük tamsayının kapsamını aşıyor.`%D' için sembolik sabitin deÄŸeri tamsayı sabit deÄŸil`%s' için deÄŸer tamsayı sabit deÄŸilortam deÄŸiÅŸkeni DJGPP atanmamışortam deÄŸiÅŸkeni DJGPP bozuk '%s' dosyasını gösteriyorortam deÄŸiÅŸkeni DJGPP olmayan '%s' dosyasını gösteriyor%s kapatılırken hatasabit havuzu girdisi #%d de hata + sabit havuzu çözümlenirken hataalanlar çözümlenirken hatabitiÅŸ öznitelikleri çözümlenirken hatayöntemler çözümlenirken hata%s e yazarken hataönceleme dizgesi karakter için kapsam dışıolaÄŸandışılık yakalaması iptal edildi, etkinleÅŸtirmek için -fexceptions kullanın`%T' türündeki olaÄŸandışılık yakalanmış olacakküme ilklendiricide gereÄŸinden fazla öğedizi ilklendiricide gereÄŸinden fazla öğekarakter dizisi ilklendiricide gereÄŸinden fazla öğeskalar ilklendiricide gereÄŸinden fazla öğestruct ilklendiricide gereÄŸinden fazla öğeunion ilklendiricide gereÄŸinden fazla öğevektör ilklendiricide gereÄŸinden fazla öğeexecv %sexecvp %s%d seviye umulurken `%#D' için ÅŸablon parametresi seviyesi olarak %d seviye alındı, `%#D' nin doÄŸrudan gerçeklenmesi`%#D' nin doÄŸrudan gerçeklenmesi sonra`%#T' nin doÄŸrudan gerçeklenmesi sonraÅŸablon tanımından önce `%T' nin doÄŸrudan gerçeklenmesibir tanımlama olmadan `%D' nin doÄŸrudan gerçeklenmesiÅŸablon olmayan `%#D' nin doÄŸrudan gerçeklenmesiÅŸablon olmayan tür `%T' nin doÄŸrudan gerçeklenmesiburada doÄŸrudan özelleÅŸtirmeisim alanı olmayan `%D' içinde doÄŸrudan özelleÅŸtirmedoÄŸrudan özelleÅŸtirme `template <>' tarafından öncelenmiyorilk kullanımından sonra %D'nin doÄŸrudan özelleÅŸtirilmesiÅŸablon olmayan `%T' örtük özelleÅŸtirmesiifade '%E', '%T' mutlak sınıf türünde throw ifadesi içinde kullanılamazifade deyimi tamamlanmamış tür içeriyorek yazmaçların yüksek yarıları yok`%#D' için extern bildirim uyumsuz`%s'in extern bildirimi genel olanıyla uyuÅŸmuyorilklendiricinin sonunda fazladan parantezli grupskalar ilklendiricide fazladan öğelerfazladan `%T::' nitelemesi üye `%D' üstünde yoksayıldıfazladan niteleme `%T::' üye `%s' üzerinde yoksayıldıstruct ya da union'da fazladan ; varyönerge sonunda fazladan metin#%s yönergesinin sonunda fazladan dizgeciklerbiçem argümanında (%d. arg) fazladan tür niteleyicilerfazlalık `%T' yoksayıldı`%s' seçeneÄŸinde fazladan argümanf2c uyumlu kod, üretilmemeyi gerektirirsınıf '%s' bulunamadıölümcül:fclosefclose %sfdopenalan '%s' sınıfta yokalan `%#D' static'dir; tek ilklendirme noktası onun tanımıdıralan `%#D' sınıf ile aynı isimdealan `%D' ile birleÅŸik yapı içinde static bildirimi`%D' alanı içi boÅŸ türdeyerel sınıf içindeki alan `%D' static olamazalan `%D' ile geçersiz olarak iÅŸlev türü bildirildialan `%D' ile geçersiz olarak yöntem türü bildirildialan `%D' ile geçersiz olarak göreli konum türü bildirildi`%s' alanı bir iÅŸlev olarak bildirilmiÅŸ`%s' alanı tamamlanmamış türdealan `%s' yokalan ilklendirici sabit deÄŸilalan ilklendirici türü uyumsuzluÄŸualan ismi kayıt ya da union ilklendiricisinde kullanılmamışalan duyarlığıalan uzunluÄŸualan uzunluÄŸu printf biçemindescanf biçeminde alan geniÅŸliÄŸistrfmon biçeminde alan geniÅŸliÄŸistrftime biçeminde alan geniÅŸliÄŸi%s bulunamadı, çalıştırma sayısı sıfır kabul edildi%s den sonra dosya ismi eksik`%s' yok%s seçeneÄŸinden sonra dosya ismi eksik-i seçeneÄŸinden sonra dosya ismi eksik-o seçeneÄŸinden sonra dosya ismi eksikdolgu karakteristrfmon biçeminde dolgu karakterison alan '%s' ilklendirilmiÅŸ olmayabilirfini iÅŸlevi %s nesnesinde bulundu`%s' için ilk argüman `int' olmalıydı__builtin_choose_expr iÅŸlevine aktarılan ilk argüman bir sabit deÄŸil`va_arg'ın ilk argümanının türü `va_list' deÄŸilfix_sched_param: bilinmeyen parametre: %sesnek dizi üstelik boÅŸ yapının üyesiesnek dizi birleÅŸik yapının üyesi olamazesnek dizi yapının son üyesi deÄŸilgerçel sayı sabitin üssü rakam içermiyorgerçel sayı sabit onaltılık tabanda olmayabilirgerçel sayı sabitler desteklenmiyorgerçel sayı sabit kapsamdışıgerçel sayı sabit geçerli bir dolaysız veri öğesi deÄŸilgerçel sayı '%s' kapsamını aşıyorgerçel sayı 'double' kapsamını aşıyor#if ifadesinde gerçel sayılar geçersiz#if ifadelerinde gerçel sayılara izin verilmezgerçel sayı taÅŸmasıifadede gerçel sayı taÅŸmasıakış kontrol komutu bir temel bloÄŸun içindeburada prototip olmayan tanımdan sonrafopen %sher iÅŸlev için içinde görünür.)ÅŸablon bildirimi `%D' için%d. biçem argümanı $ tarzı biçemde %d. argümandan önce kullanılmamış%d. biçem argümanı %s biçeminde birden fazla kullanılmışbiçem argümanı bir gösterge deÄŸil (%d. arg)biçem argümanı bir göstergenin göstergesi deÄŸil (%d. arg)biçem bir geniÅŸ karakter dizgesibiçem bir dizge sabit deÄŸil ve biçem argümanları yokbiçem bir dizge sabit deÄŸil, argüman türleri denetlenmedibiçem bir dizge sabit deÄŸil, biçem dizgesi denetlenmedibiçem dizgesi argümanını biçemlendirilmiÅŸ argümanlar izliyorbiçem dizgesi argümanının veri türü dizge deÄŸilbiçem dizgesi geçersiz sayıda terim içeriyor%s tür `%T'ye referans oluÅŸturuyorvoid'e referans oluÅŸturuluyor`%#T' için ileriye bildirimfp yazılım tamamlaması -mtrap-precision=i gerektirirfp_offset (%ld) veya end_offset (%ld) sıfırdan küçük.fr30_print_operand: %%F kodu geçersizfr30_print_operand: %%x kodu geçersizfr30_print_operand: %%A koduna terim geçersizfr30_print_operand: bilinmeyen bellekfr30_print_operand: bilinmeyen kodfr30_print_operand: bilinmeyen %%B kodufr30_print_operand: bilinmeyen %%b kodufr30_print_operand: bilinmeyen %%p kodufr30_print_operand_address: bilinmeyen adresgüvenilir yığın denetimi için çerçeve boyutu çok büyükkardeÅŸ bildirimi `%#D' bir ÅŸablon olmayan iÅŸlev bildiriyorkardeÅŸ bildirimi sınıf bildiriminde deÄŸilkardeÅŸ bildirimi `friend %#T' gibi bir sınıf anahtarı gerektirirkardeÅŸ bildirimi sınıf anahtarı gerektirir, `friend class %T::%T' gibifstat %s`%D' iÅŸlevi bir deÄŸiÅŸken gibi ilklendirilmiÅŸiÅŸlev `%D' kardeÅŸ olarak bildirilemeziÅŸlev `%D' aşırı yükü bildirilmiÅŸ ama onu çözümleyecek olanla görünen bir tanımı yok!?!iÅŸlev `%D' bir birleÅŸik yapı içinde virtual olarak bildirilmiÅŸiÅŸlev `%s' `mutable' olarak bildirilemez`%s' iÅŸlevi bir deÄŸiÅŸken gibi ilkdeÄŸerliiÅŸlev `%s' 'inline' olarak yeniden bildirilmiÅŸ`%s' iÅŸlevinin bildirimi 'inline' deÄŸil`%s' iÅŸlevi evvelce bir blok içinde bildirilmiÅŸkurucu için iÅŸlev gövdesi yokiÅŸlev çaÄŸrısı küme deÄŸeri içeriyoriÅŸlev özümlenemeziÅŸlev bildirimi bir prototip deÄŸil`noreturn' olarak bildirilmiÅŸ iÅŸlev `return' deyimi içeriyoriÅŸlev tanımı `auto' olarak bildirildiiÅŸlev tanımı `register' olarak bildirildiiÅŸlev tanımı `typedef' olarak bildirildiiÅŸlev dizge veri türü ile dönmüyoriÅŸlev `%s' biçem niteliÄŸi için mümkün aday olabiliriÅŸlev `noreturn' özniteliÄŸi için olası aday olmalıiÅŸlevin dönen deÄŸer türü iÅŸlev olamaziÅŸlev yerel deÄŸiÅŸkenin adresi ile dönüyoriÅŸlev bir küme ile dönüyoriÅŸlev özümlenmek için fazla büyükiÅŸlev türleri ISO C'de tam uyumlu deÄŸiliÅŸlev __builtin_eh_return kullanıyoralloca kullanarak iÅŸlev özümlenemezsetjmp kullanarak iÅŸlev özümlenemezshort karmaşık türler kullanılan iÅŸlevler özümlenemezhesaplanmış jump bulunan iÅŸlevler özümlenemezbaÅŸlangıç deÄŸerlerinde kullanılmış etiket adresli bir iÅŸlev özümlenemeziçiçe iÅŸlevleri olan bir iÅŸlev özümlenemezyerel olmayan goto bulunan iÅŸlevler özümlenemezhedefe özel öznitelikler bulunan iÅŸlevler özümlenemezÅŸeffaf birim parametreli iÅŸlevler özümlenemezdeÄŸiÅŸken uzunluk parametreli iÅŸlevler özümlenemezdeÄŸiÅŸken uzunluklu dönen deÄŸerli iÅŸlevler özümlenemeziÅŸlev benzeri makro "%s" geleneksel C'de argümanlarla kullanılmalıdırMMIX için function_profiler desteÄŸigcc sürücüsü %s sürümü gcc %s sürümünü çalıştırıyor + gcc %s sürümü + gcov (GCC) %s + RP kodu üretilir`...' kullanan `%#D' için genel thunk kodu baÅŸarısız`%#D' genel bildirimigenel yazmaç deÄŸiÅŸkeni `%s' yuvalanmış iÅŸlevde kullanılmışgenel yazmaç deÄŸiÅŸkeni bir iÅŸlev tanımını izliyorgenel yazmaç deÄŸiÅŸkeni öndeÄŸer içeriyor%d ÅŸablon parametresi alındı (`%#D' için)%d ÅŸablon parametresi alındı (`%#T' için)gp sabittir (ancak dolaylı çaÄŸrılarda gp kaydedilmesi/alınması yapılır)gp_offset (%ld) veya end_offset (%ld) sıfırdan küçük.`half-pic init' desteklenmediÄŸi sistemlerde kullanıldı%2$d. bloÄŸun ilk komutu %1$d komut akışı içinde yok.onaltılık karakter sabiti bir bayta sığmazonaltılık öncelem kapsam dışıonaltılık önceleme dizgesi kapsamdışıonaltılık gerçel sayı sabit üs içermiyoriC2.0 ve iC3.0 uyumsuz - iC3.0 kullanılıyoria64_print_operand: bilinmeyen kodtanıtıcı ismi `%s' GNU C++ dahili adlandırma stratejisi ile çeliÅŸiyor#pragma %s yoksayılıyor#pragma %s %s yoksalıyor`%V' niteleyicileri `%T'de yoksayılıyorstatic olmayan yerel deÄŸiÅŸken `%s' için asm-belirteci yoksayılıyoryoksayılan komut satırı seçeneÄŸi `%s'tekrar belirtilen "%s" dizini yoksayılıyor + `%T' için fazladan ilklendiricilerin yoksayılmasıgeçersiz çok baytlı karakter yoksayılıyor olmayan "%s" dizini yoksayılıyor + geçersiz hata ayıklama özelliÄŸinden dolayı `%s' seçeneÄŸi yoksayılıyorpragma yoksayılıyor: %syoksayılan bilinmeyen seçenek `%.*s' (`-f%s' içinde)bit alanı `%D' göstergesi kuraldışıimplementation-saklı ismi `%D' kullanıldıiÅŸlev `%#D' nin örtük bildirimi`%s' iÅŸlevinin örtük bildirimiörtük olarak emilmiÅŸ yazmaçlar yığının üstünde gruplanmalıiÅŸlemimi '%s' imkansız`asm' içindeki yazmaç ÅŸartı mümkün deÄŸil%d. temel blok içinde:`%D' bildiriminde`%+D' nin %P. argümanının aktarılmasındanesne dosyası ile umulan deÄŸerler arasında uyumsuzluklar varuyumsuz birlikte çalışma seçenekleri`%2$s'nın %1$d. argümanı için tür uyumsuzdolaylı iÅŸlev çaÄŸrısının %d. argümanı için tür uyumsuz%s içinde uyumsuz türler`%T' den `%T' ye deÄŸer atamada uyumsuz türlertamamlanmamış `%s' seçeneÄŸi`%s' kategorisinin içi boÅŸ`%s' sınıfının içi boÅŸiçi boÅŸ tür `%T' üye `%D' yi içermiyortamamlanmamış tür birleÅŸtirmeevrensel karakter ismi tamamlanmamışçeliÅŸkili gerçekleme deÄŸiÅŸkeni özelliÄŸibir `asm' içindeki terim ÅŸartı çeliÅŸkiliyanlış komut:bilinmeyen yapı göstergesinde arttırmabirleÅŸik yapı ilklendiricideki alan isminin yerine index deÄŸeriinit iÅŸlevi %s nesnesinde bulunduilklendirmeilklendirme tasarlayıcılar yuvalanamayabiliresnek dizi üyesi ilklendirmesiiçiçe baÄŸlam içinde esnek dizi üyesi ilklendirmesi`%T' nin çoklu üyeleri için ilklendirmeleryan-etkili ilklendirilmiÅŸ alanın üzerine yazıldıilklendirilmiÅŸ deÄŸiÅŸken `%s' dllimport imlibaÅŸlangıç öğesi yükleme sırasında hesaplanabilir deÄŸililklendirici öğe bir sabit deÄŸililklendirici erken sonlanıyorilklendirici `%D' nin boyutunu saptayamıyor`%s'in uzunluÄŸunu belirlemede ilkdeÄŸer baÅŸarısızgerçel sayı öndeÄŸer bir gerçel sayı sabit deÄŸiltamsayı öndeÄŸer fazla karmaşıkskalar deÄŸiÅŸken ilklendiricisi bir öğe gerektirirstatic deÄŸiÅŸken için ilklendirici bir sabit deÄŸilstatic deÄŸiÅŸken için ilklendirici karmaşık aritmetik kullanıyorkuruculu statik üye için ilklendirici geçersizilklendirici listesi bileÅŸik ifade varsayılıyorilklendirici liste yapısı `%D' için geçersizilklendirici liste yapısı türetilmiÅŸ sınıf nesnesi `%D' için geçersizilklendirici liste yapısı polimorfik sınıf nesnesi `%D' için geçersiztaban sınıflarla sınıf nesnesi için öndeÄŸer listesisanal taban sınıflarla sınıf nesnesi için öndeÄŸer listesisanal iÅŸlevler kullanan nesne için ilklendirici listesiilklendirici listesi bileÅŸik ifade olarak ele alınıyorüye olmayan iÅŸlev `%D' için ilklendirici belirtilmiÅŸsanal olmayan yöntem `%D' için ilklendirici belirtilmiÅŸkarakter dizisi için dizge-ilklendirici çok uzundizi parametre listesi ile ilklendiriliyorgerçel sayı sabitlerin `inline' bildirimi bu makinada desteklenmiyorözümleme iÅŸlevi `%s' özümlenmeyen özellikle verilmiÅŸbu dönen deÄŸer türü için özümlenen iÅŸlevler desteklenmiyor`%s' çaÄŸrısında özümleme baÅŸarısızgirdi terimi kısıtı `%c' içeriyorkomut %d %d. temel bloÄŸun içinde ama block_for_insn %ikomut %d %d. temel bloÄŸun içinde ama block_for_insn NULLkomut %d birden fazla temel bloÄŸun içinde (%d ve %d)komut kendi kısıtlarını gözönüne almıyor:komut temel bloÄŸun dışındakurulum: %s%s + gerçekleme deÄŸiÅŸkeni `%s' sınıf yönteminden eriÅŸimligerçekleme deÄŸiÅŸkeni `%s' %s olarak bildirilmiÅŸgerçekleme deÄŸiÅŸkeni `%s' private olarak bildirilmiÅŸ`%D' gerçeklemesi `%T' türündebu hedef makina için iÅŸlem zamanlaması desteklenmiyortürü saptayacak baÄŸlamsal bilgiler yetersiztamsayı dizisinin ilklendiricisi olarak geniÅŸ-olmayan dizge kullanılmıştamsayı sabit tabanı aÅŸan rakamlar içeriyortamsayı sabit türünün izin verdiÄŸi deÄŸerden büyüktamsayı sabit unsigned olarak oldukça büyüktamsayı sabit derleyicinin bu yapılandırması için çok büyük - %d bite indirilditamsayı sabit ISO C için unsigned, -traditional ile signed'dırtamsayı sabit en büyük deÄŸer %s den daha büyüktamsayı sabit kapsamdışıifadede tamsayı taÅŸmasıöniÅŸlemci ifadesinde tamsayı taÅŸmasıDerleyici iç hatası. Hatalı adres:Derleyici iç hatası. Yanlış kaydırma:Derleyici iç hatası. Bilinmeyen kip:iç hataiç hata - Utf8 ismi geçersiziç hata - çok fazla interface türiç hata - atanmamış tür kullanımıtradcpp.c:%2$d: %1$s iÅŸlevinde iç hata + Lütfen ayrıntılı bir hapa raporu gönderin. + İşlemler için %3$s adresine bakın.check-init içinde hata: aÄŸaç kodu oluÅŸmadı: %sgenerate_bytecode_insn içinde hata - aÄŸaç kodu oluÅŸturulamadı: %siç hata -- karşılaÅŸtırmayı izleyen bir jump yok:iç hata: iç hata: üretici maskı içinde %%) için bir %%( bulunamadıiç hata: üretici maskı içinde %%> için bir %%< bulunamadıiç hata: üretici maskı içinde %%] için bir %%[ bulunamadıiç hata: üretici maskı içinde %%} için bir %%{ bulunamadıiç hata: %siç hata: hatalı yazmaç: %diç hata: hatalı terimli cris_side_effect_mode_okiç hata: yan etkili komut main etkisi oluÅŸturuyordahili gcc çıkışıgcc iç hatası: Sembolik konum ifade edilemiyorgcc iç monitörü: short-branch(%x)iç yazmaç numarası beceriksizce: regno = %d + sistem kesmesi Servis İşlemleri Thumb kipinde kodlanamazberaber çalışma, APCS-32'nin kullanılmasını gerektirir#-satırı geçersiz#ident geçersizgeçersiz #ident yönergesi#line geçersiz'#pragma %s' geçersizgeçersiz #pragma GCC poison yönergesi%% kodu geçersizgeçersiz %%A terimigeçersiz %%B terimi%%B deÄŸeri geçersizgeçersiz %%C terimi%%C deÄŸeri geçersizgeçersiz %%D terimi%%D deÄŸeri geçersiz%%E deÄŸeri geçersiz%%F deÄŸeri geçersiz%%G deÄŸeri geçersiz%%H deÄŸeri geçersiz%%J kodu geçersiz%%J deÄŸeri geçersiz%%K deÄŸeri geçersiz%%L deÄŸeri geçersiz%%M deÄŸeri geçersiz%%N deÄŸeri geçersiz%%O deÄŸeri geçersiz%%P terimi geçersiz%%P deÄŸeri geçersiz%%Q deÄŸeri geçersiz%%R deÄŸeri geçersiz%%S deÄŸeri geçersiz%%T deÄŸeri geçersiz%%U deÄŸeri geçersiz%%V deÄŸeri geçersizgeçersiz %%Y terimi%%Z deÄŸeri geçersiz%%b deÄŸeri geçersizgeçersiz %%c terimigeçersiz %%d terimigeçersiz %%f terimi%%f deÄŸeri geçersiz%%h deÄŸeri geçersiz%%j kodu geçersiz%%j deÄŸeri geçersiz%%k deÄŸeri geçersiz%%m deÄŸeri geçersiz%%o deÄŸeri geçersiz%%p deÄŸeri geçersiz%%q deÄŸeri geçersiz%%r deÄŸeri geçersiz%%s deÄŸeri geçersiz%%s/S deÄŸeri geçersiz%%u deÄŸeri geçersiz%%v deÄŸeri geçersiz%%x/X deÄŸeri geçersiz%%xn deÄŸeri geçersiz%%z deÄŸeri geçersizgeçersiz --param seçeneÄŸi: %ssatır numarası tablosunda geçersiz program sayacı (PC)veri öğesi olarak UNSPEC geçersizterim (1) olarak UNSPEC geçersizterim (2) olarak UNSPEC geçersizkomut için Z yazmaç yerdeÄŸiÅŸtirmesi geçersizgeçersiz `asm': adres geçersizgeçersiz adresleme kipi`__builtin_frame_address'e aktarılan argüman geçersiz`__builtin_return_address'e aktarılan argüman geçersiz`%s' özniteliÄŸinin argümanı geçersizgeçersiz yerleÅŸik makro "%s"statik üye iÅŸlev kapsamında `this' gerektiren üye iÅŸleve çaÄŸrı geçersiz`%T' iÅŸlev türüne çevirim geçersizyakalama parametresi geçersiz#if ifadesinde geçersiz karakter '%c'#if içinde '\%03o' karakteri geçersiz#if ifadesinde geçersiz karakter sabitigeçersiz kodtür `%T' den tür `%T' ye const_cast geçersiztür `%T' nin bir saÄŸ deÄŸerinden tür `%T' ye const_cast geçersizkurucu geçersiz; `%T (const %T&)' anlamında kullandınız galiba`%T' den `%T' ye dönüşüm geçersiztür `%T' nin `%T' den dönüşümü geçersiz`%#D' için ortak deÄŸiÅŸen dönüş türü geçersizgeçersiz veri üyesi ilklendirmesiyerel sınıf içinde üye ÅŸablonu `%#D' nin bildirimi geçersizbildirim geçersizöntanımlı ÅŸablon argümanı geçersiznitelikli tür `%T' tanımı geçersizveri öğesi olarak ifade geçersizsatır yönergesinde geçersiz "%s" seçeneÄŸiGeçersiz gerçel deÄŸer öykünüm seçeneÄŸi: -mfpe-%sgeçersiz biçemli #line komutucpp_macro_definition içindeki isimli yapı türü %d geçersiztümleyen olmayan `%T türündeki statik veri üyesinin sınıf içi ilklendirmesi geçersizdolaylı (S) bellek adresi geçersizgeçersiz dolaylı bellek adresiüye `%s' için öndeÄŸer geçersizgeçersiz ilklendiricibit dizge için ilklendirici geçersizsanal yöntem `%D' için geçersiz ilklendiricigeçersiz komut:parametre listesindeki tamsayı sabit geçersiz, parametre ismi vermeyi unuttunuz mu?asm deyiminde geçersiz sol tarafatama içinde sol taraf geçersiztekil `&' için geçersiz sol tarafgeçersiz makro ismigeçersiz makro ismi `%s'mask geçersizgeçersiz üye ÅŸablonu bildirimi `%D'gen_tst_reg için kip geçersizgen_compare_reg içindeki tamsayı karşılaÅŸtırması için kip geçersiz#if ifadesindeki sayı geçersizybase adreslemedeki göreli konum geçersizPOD olmayan tür `%T' deki offsetof geçersiz; yerine üyeye gösterge kullanınterim kodu `%c' geçersiz'A' deÄŸiÅŸtirici için terim geçersiz'D' deÄŸiÅŸtirici için terim geçersiz'H' deÄŸiÅŸtirici için terim geçersiz'P' deÄŸiÅŸtirici için terim geçersiz'T' deÄŸiÅŸtirici için terim geçersiz'b' deÄŸiÅŸtirici için terim geçersiz'e' deÄŸiÅŸtirici için terim geçersiz'm' deÄŸiÅŸtirici için terim geçersiz'p' deÄŸiÅŸtirici için terim geçersiz'v' deÄŸiÅŸtirici için terim geçersiz'z' deÄŸiÅŸtirici için terim geçersizkomuttaki terim geçersizterim deÄŸiÅŸtirici harfi geçersizçıkış kodu için geçersiz veri öğesi%%H/%%L kodu için terim geçersiz%%N kodu için terim geçersiz%%R kodu için terim geçersiz%%T/%%B kodu için terim geçersiz%%U kodu için terim geçersiz%%V kodu için terim geçersiz%%p kodu için terim geçersiz%%s kodu için terim geçersiziki terimli `%O' için `%T' ve `%T' türünde geçersiz terimleriki terimli %s için terimler geçersizgerçeklenmemiÅŸ tür üzerindeki iÅŸlem geçersizgeçersiz %s seçeneÄŸi`%s' seçeneÄŸi geçersiz`-mshort-data-%s' seçeneÄŸi geçersiz`-mstack-increment=%s' seçeneÄŸi geçersiz`entry%s' seçeneÄŸi geçersizgeçersiz parametre `%s'geçersiz parametre türü `%T'geçersiz parametre deÄŸeri `%s'öniÅŸlem yönergesi #%s geçersizkoÅŸul içindeki `%c' iÅŸareti geçersizüyesiz iÅŸlev türünde geçersiz niteleyicialıcı tür `%s' geçersiz`%D'inkomuttaki yazmaç geçersizmove komutundaki yazmaç geçersizybase adreslemedeki yazmaç geçersizyazmaç deÄŸiÅŸkeni için yazmaç ismi `%s' geçersiz`%s' için yazmaç ismi geçersiztür `%T' den tür `%T' ye reinterpret_cast geçersiztür `%T' nin bir saÄŸ deÄŸerinin tür `%T' ye reinterpret_cast geçersiziÅŸlev `%#D' için dönen deÄŸer türü geçersizüye iÅŸlev `%#D' için dönen deÄŸer türü geçersizgeçersiz döngü komutu__builtin_prefetch için 2. argüman geçersiz; sıfır kullanılıyoremit_1600_core_shift içindeki kaydırma iÅŸlemimi geçersizözellik geçersiz! cc'de yazılım hatası.tür `%T' den tür `%T' ye static_cast geçersiz`%s' iÅŸlevi için geçersiz saklama sınıfıgeçersiz dizge sabit `%E'geçersiz dizge sabit, son '\' yoksayılıyortamsayı sabitte sonek '%.*s' geçersizgerçel sayı sabitin soneki geçersiztamsayı sabitteki sonek geçersiz__builtin_prefetch için 3. argüman geçersiz; sıfır kullanılıyorifadede geçersiz dizgecikdoÄŸruluk-deÄŸeri ifadesi geçersizgeçersiz `friend' bildirimli tür `%T'`%T'ye öntanımlı argüman olarak geçersiz `%T' türünew için `void' türü geçersiztür argümanı geçersiz`%s' için tür argümanı geçersizdizi bildirimi içinde geçersiz tür deÄŸiÅŸtiricigösterge bildirgeci içinde geçersiz tür deÄŸiÅŸtiriciüyesiz iÅŸlev türleri için tür niteleyici geçersizgeçersiz tür: `void &'dizi altindisi için geçersiz türler `%T[%T]'%%d, %%x, ya da %%X kullanımı geçersiz`%D' kullanımı geçersiz`%T' kullanımı geçersizüyeye göstergede `%s' kullanımı geçersizbool deÄŸiÅŸken `%D' üstünde `--' kullanımı geçersiz`::' kullanımı geçersiz`restrict' kullanımı geçersiztepe seviyede `this' kullanımı geçersizüye olmayan iÅŸlevde `this' kullanımı geçersiz`%#D' ÅŸablon bildiriminde geçersiz `virtual' kullanımıgösterge aritmetiÄŸinde tamamlanmamış türe gösterge kullanımı geçersizsınırları belirtilmemiÅŸ dizi; kullanımı geçersizbir gösterge ya da bir iÅŸlev türüne referans tür `%T' ile const_cast kullanımı geçersizne bir gösterge ne de bir veri-üyesi-göstergesi olan tür `%T' ile const_cast kullanımı geçersizesnek dizi üyesinin kullanımı geçersiztamamlanmamış typedef `%s'; kullanımı geçersizüye kullanımı geçersiz ( `&' unutuldu mu? )geçersiz üye `%D' kullanımıstatik üye iÅŸlev kapsamında üye `%D' kullanımı geçersiz sol tarafsız dizi kullanımı geçersizgeçersiz static olmayan alan `%D' kullanımıifade olarak tür ÅŸablon `%#D' kullanımı geçersizÅŸablon türü parametre kullanımı geçersizbirincil ÅŸablon bildiriminde ÅŸablon kimliÄŸi `%D' kullanımı geçersizifade olarak tür bildirimi `%#D' kullanımı geçersiztanımsız `%#T' türünün kullanımı geçersizatanmamış tür `%s %s'; kullanımı geçersizvoid deyiminin kullanımı geçersiz`%s' özelliÄŸi vektör tür geçersizsürüm numarası biçemi geçersizstatik yöntemde invoke[non-static]kuramsal yöntemde invokestaticstattik olmayan yöntemde invokestatico `&X::Y' ÅŸeklinde bir üye göstergesi olmalıo dış ilintilemeli bir iÅŸlevin adresi olmalıo dış ilintilemeli bir nesnenin adresi olmalıO sadece bu tanımın ya da bildirimin kapsamında, sizin istediÄŸiniz bu olmayabilir`%s' e sıçrama geçersiz olarak baÄŸlama sınırları içinde gerçekleÅŸiyorcase etiketine jumpetiket `%D' ye sıçrama'#pragma %s' sonrası karışık#pragma GCC java_exceptions sonrası karışık'#pragma extern_prefix' sonunda karışıklık'#pragma ghs endsda' sonrası karışık'#pragma ghs endtda' sonrası karışık'#pragma ghs endzda' sonrası karışık'#pragma ghs interrupt' sonrası karışık'#pragma ghs' bölümünden sonrası karışık'#pragma ghs startsda' sonrası karışık'#pragma ghs starttda' sonrası karışık'#pragma ghs startzda' sonrası karışık'#pragma map' sonunda karışıklık#pragma redefine_extname sonunda döküntü'#pragma weak' sonunda döküntü'#pragma %s' den sonrası karışık'#pragma options' sonunda karışıklık'#pragma pack' sonunda döküntü'#pragma unused' sonunda karışıklıkimza dizgesinden sonrası karışık`export' anahtar sözcüğü gerçekleÅŸtirilmedi, ve yoksayılacak%s etiketi iÅŸlev dışı referanslıetiket `%D' tanımlanmış ama kullanılmamışetiket `%D' tanımlanmadan kullanılmış`%s' etiketi tanımlı ama kullanılmamış`%s' etiketi her iÅŸlevin dışına referanslı`%s' etiketi kapsanan baÄŸ sınırından önce kullanılmış`%s' etiketi tanımsız kullanılmışetiketi deyim izlemeliwchar_t isimli etiketdil %s tanınmıyordil dizgesi `"%s"' tanınmıyor-mtiny-stack ile büyük çerçeve göstergesi deÄŸiÅŸikliÄŸi (%d)büyük tamsayı örtük olarak unsigned türe indirgendild çıkış durumu %d ile döndüsol taraf duyarlığıstrfmon biçeminde sol taraf duyarlığısola kaydırma sayısı türünden büyük ya da eÅŸitsola kaydırma sayısı negatifvirgüllü ifadenin sol terimi etkisizuzunluk deÄŸiÅŸtiriciuzunluk deÄŸiÅŸtirici printf biçemindescanf biçeminde uzunluk deÄŸiÅŸtiricistrfmon biçeminde uzunluk deÄŸiÅŸtiricikitaplıklar: %s + kitaplık iÅŸlevi `%#D' iÅŸlev olmayan `%#D' olarak yeniden bildirildikitaplık iÅŸlevi `%s' iÅŸlev olarak bildirilmemiÅŸlib%s kitaplığı bulunamadısatır numarası kapsam dışılo_sum yazmacın deÄŸilyükleme komutu eÅŸlemi, %d komut, yeni boyut %ld. + yerel sınıf `%#T static veri üyesi `%#D' içermemeli`%s' yerel bildirimi gerçekleme deÄŸiÅŸkenini gizliyor`%s' için 'long' ve 'short' birlikte belirtilmiÅŸlong long sabit geçerli bir anlık terim deÄŸil`%s' için long veya short ile char türü deÄŸer belirtilmiÅŸ`%s' için long veya short ile gerçel sayı deÄŸer belirtilmiÅŸ`%s' için long, short, signed ya da unsigned geçersiz`%s' için long, short, signed ya da unsigned geçersizce kullanılmış`%D' araması `%#D' buluyor`%D' nin `%#T' (`%#D') baÄŸlamındaki araması ÅŸu anki baÄŸlam (`%#D') içindeki arama ile uyuÅŸmuyor`%#F' için throw belirteci daha gevÅŸeklseek %s 0makro "%s" için %u argüman verilmiÅŸ ama tam %u argüman alıyormakro "%s" %u argüman gerektiriyor ama sadece %u argüman verilmiÅŸmakro argümanı "%s" gelenekel C'de dizgelem olmalıydı%s den sonra makro ismi eksik-%c seçeneÄŸinden sonra makro ismi eksikmakro isimleri tanımlayıcılar olmalımakro ya da #include özyinelemesi çok derinmakro parametreleri virgüllerle ayrılmış olmalı`%D' static yapılıyor'#pragma align' bozuk - yoksayıldı#pragma extern_prefix bozuk, yoksayıldı'#pragma ghs' bölümü bozuk'#pragma map' bozuk, yoksayıldı#pragma redefine_extname yönergesi bozuk - yoksayıldı'#pragma weak' yönergesi bozuk - yoksayıldı'#pragma %s' bozuk - yoksayıldı'#pragma options align={mac68k|power|reset}' hatalı, yoksayılıyor'#pragma options' hatalı, yoksayılıyor'#pragma pack' bozuk - yoksayıldı'#pragma pack(pop[, id])' bozuk - yoksayıldıbozuk '#pragma pack(push[, id], )' - yoksayıldıCLASSPATH içinde bozuk .zip arÅŸivi: %smaske bir ÅŸimdiki deÄŸer olmalıeÅŸleÅŸen kısıt çıktı teriminde geçerli deÄŸilkısıt referansları geçersiz terim numaraları eÅŸleÅŸtiriyor-EB ve -EL birlikte kullanılamayabilir-mfp64 ve -m4650 birlikte kullanılamayabilir-mfp64 ve -msingle-float birlikte kullanılamayabilir-mfp64 ve -mgp32 birlikte kullanılamayabilirkuruculu üye %#D' anonim kümeleme içinde kullanılamazkopya atama iÅŸlemimli üye %#D' anonim kümeleme içinde kullanılamazyıkıcılı üye %#D' anonim kümeleme içinde kullanılamazunion içinde kuruculu üye `%#D' olamazunion içinde kopya atama iÅŸlemimli üye `%#D' olamazunion içinde yıkıcılı üye `%#D' olamazüye `%D', hem virtual hem de static olarak bildirilemezüye `%D' sanal iÅŸlev tablosu alan ismi ile çeliÅŸiyorüye `%D' tür `%T' tanımından önce friend olarak bildirilmişüye `%D' statik deÄŸil ama bir statik üye olarak baÅŸvurulmuşüye `%D' ilklendirilmemiÅŸ referanstırüye `%D' ilklendirilmemiÅŸ sabit alanlıüye iÅŸlevler sınıflarının örtük kardeÅŸleridir`%#D'üye türü `%T::' nesne türü `%T' ile uyumsuzüyeleri yoksınıf içinde yöntem '%s' yokyöntem `%s' protokol tarafından gerçekleÅŸtirilmiyor`%c%s' için yöntem tanımı yokyöntem tanımı sınıf baÄŸlamında deÄŸilmips16 iÅŸlev ayrımlamaözellikler içinde eÅŸleÅŸmeyen parantezler'%2$s' içindeki alan '%1$s' için imza çeliÅŸkiliConstantValue özniteliÄŸi yanlış yerde (her alanda deÄŸil)biçem içinde $ teriminde numara eksik'#pragma %s' den sonra '(' eksik - yoksayıldı'#pragma pack' den sonra '(' eksik - yoksayıldı'#pragma unused'dan sonra '(' eksik, yoksayılıyordayanaktan sonra '(' eksikifadede '(' eksik"defined" dan sonra ')' eksik'#pragma unused'dan sonra ')' eksik, yoksayılıyor'#pragma %s' için ')' eksik - yoksayıldıifadede ')' eksikmakro parametre listesinde ')' eksikyanıtı tamamlayacak ')' eksik'}' dan önce ';' eksikCode özniteliÄŸi eksik`__builtin_args_info'da argüman eksik`%s' seçeneÄŸinin argümanı eksik%i. bloktan sonraki sınır eksikiki terimli iÅŸlemimi eksik`%s' den önce iki terimli iÅŸlemimi eksikilklendiriciyi çevreleyen parantezler yokisimi terim için kapama parantezi eksik'%2$s' içinde alan '%1$s' eksikstrfmon biçeminin sonunda dolgu karakteri eksik'#pragma %s' içinde iÅŸlev ismi eksik - yoksayıldıilklendirici yoküye `%D' için ilklendirici eksik'#pragma %s' içinde bölüm ismi eksik - yoksayıldıstatik alan `%s' eksik%c sonlandırma karakteri eksiksonlandıran > karakteri eksiktypedef bildiriminde tür ismi eksik'%.*s'den sonra boÅŸluk yoktek çeviri birimi içinde karışık C++ ve Java tuzaklarımno-cygwin ve mno-win32 uyumsuzkip QImode deÄŸil`asm' tarafından deÄŸiÅŸiklik`asm' içinde %d terimden fazlası vargerçel sayı sabitte `f' soneki birden fazla vargerçel sayı sabitte `i' ya da `j' soneki birden fazla vartamsayı sabitte birden fazla 'i' ya da 'j' sonekigerçel sayı sabitte `l' soneki birden fazla vartaşıma komutu elde edilmedimsync %sçoklu-karakter karakter sabitiçok satırlı açıklamaçok satırlı dizge sabitlerin modası geçtiçok boyutlu dizi bildiriminde ilki dışında tüm boyutlar sınırlanmış olmalıdırçoklu `virtual' belirteçleriçoklu eriÅŸim belirteçleri`%T' ve `%T' çoklu bildirimleri`%s' yöntemi için çok sayıda bildirimÅŸablon bildiriminde çoklu bildiricilertek switch'te çok sayıda öntanımlı etiket`%#T' çoklu tanımlarıbirleÅŸik yapı `%T' içindeki çoklu alanlar ilklendirildi`%D' için çoklu ilklendiriciler belirtilmişüye `%D' için çoklu ilklendiriciler verilmiÅŸ`%s' isimli çok sayıda parametre`%s' bildirimi içinde çok sayıda saklama sınıfıbir bildirimde birden fazla tür bidirilmiÅŸmunmap %stypeid kullanımından önce #include olmalıher deneme bloÄŸu için en azından bir yakalama içermeli`%E (...)' içindeki üyeye gösterge iÅŸlevi çağırmada .* ya da ->* kullanılmalımvc&exmvcle kullanımı%s içinde esrarengiz depo bilgisiisim `%T' içi boÅŸ türde`%s' içi isim görünümü deÄŸiÅŸtiyeni ISO `for' kapsamında `%s' isim araması deÄŸiÅŸtiüye iÅŸlev için isim eksikisimli üyeleri yokusing bildiriminde isim alanı `%D' kullanılamazisim alanı `%T' bildirimsizburada isim alanı rumuzu `%D' kullanılamaz, `%D' varsayılıyorisim alanı baÄŸlamındaki anonim kümeler static olmalıdırnegatif komut uzunluÄŸunegatif tamsayı örtük olarak unsigned türe dönüştürüldübit alanı `%D' içindeki geniÅŸlik negatif`%s' bit alanının uzunluÄŸu negatifmmix_setup_incoming_varargs içinde ne varargs ne de stdarg variç içe çevirici aksan alternatifleri`%s'in iç içe 'extern' bildirimiyuvalanmış iÅŸlev `%s' `extern' olarak bildirilmiÅŸ`%s' içiçe yeniden tanımlanmışnew bir iÅŸlev türe uygulanamaznew bir referans türe uygulanamazyeni bildirim `%#D'dizi türünde new boyut belirtmede baÅŸarısızCRIS için FUNCTION_PROFILER yokbu yapılandırmada bir göstergeyi tutabilen INTEGER tür yoksınıf `%T' içinde bildirilmiÅŸ `%#D' diye bir üye iÅŸlev yoksonek `%s' için `%D(int)' bildirimi yok, yerine önek iÅŸlemimi deneniyor`%s' makrosuna argüman verilmemiÅŸargüman yok':' ile bir temel ya da üye ilklendirici verilmemiÅŸ':' ile bir temel verilmemiÅŸiki sınıf, yapı ya da birleÅŸik yapı bildirimlerini ne gövdesi ne de ';' ayırır-fconstant-string-class için argüman olarak sınıf ismi belirtilmemiÅŸ`%#T' isimli sınıf ÅŸablonu `%#T' içinde yok`%%[' biçemi için kapanan `]' yokhiç komut-dizgesi yok'%s' kipi için bir veri türü yok`%D' için öntanımlı argüman yokhenüz bir açıklama yokbirleÅŸik yapı ilklendirmesinde `%D' diye bir alan yok%.*s arama yolunda include dosyaları yok%s arama yolunda include dosyaları yokgirdi dosyası belirtilmedigirdi dosyası yokgirdi dosyası yok; çıktı dosyaları istemeyerek yazılıyoryüksek yazmaçları emmek için alçak yazmaç bulunamadı#%s yönergesinde makro ismi verilmemiÅŸ`(%T) (%A)' çaÄŸrısı için eÅŸleÅŸme yokiÅŸlev `%D'nin `%#T' türüne dönüşümü için eÅŸleÅŸme yok`%D(%A)' çaÄŸrısı ile eÅŸleÅŸen bir iÅŸlev yok`%T::%D(%A)%#V' çaÄŸrısı ile eÅŸleÅŸen iÅŸlev yok`%D' için eÅŸleÅŸen bir ÅŸablon yok`%T' içinde bildirilmiÅŸ `%D' diye bir üye iÅŸlev yok`%T' içindeki `%D' ile eÅŸleÅŸen üye yok`%T::%D' diye bir yöntem yokdosyanın sonunda satırsonu karakteri yok`%s' için önce bildirim yok`%s' için önceki prototip yokprototip ve kullanılan parametre adresi yok; özümlenemezadreste yazmaç yokvoid olmayan dönüşlü iÅŸlevde `return' deyimi yok%s stab (0x%x) için sclass yok + struct ya da union tanımının sonunda ; yok`%T' için uygun bir `operator delete' yokArabirim içinde `%s' için süper sınıf bildirilmemiÅŸhiç sembol tablosu yok`%T' içinde `%D' isminde bir tür yok`%#T' içindeki `%#T' ismindeki tür bilinmiyor`%D' için `%T' içinde eÅŸsiz bir son deÄŸiÅŸtirici yokbelirtilen tür ve boyutta vektör kipi yokuygulanabilir aday yokANSI standardı olmayan önceleme dizgesi, `\%c'ANSI standardı olmayan önceleme dizgesi, '\%c'ISO standardı olmayan önceleme dizgesi, '\%c'sabit olmayan `%E' ÅŸablon argümanı olarak kullanılamazboÅŸ öğeler dizisi için boÅŸ olmayan ilklendiricievrensel karakter isminde '%c' bir onaltılık rakam deÄŸilyerel olmayan iÅŸlev `%#D' anonim tür kullanıyoryerel olmayan iÅŸlev `%#D' yerel tür `%T' kullanıyoryerel olmayan deÄŸiÅŸken`%#D' yerel tür `%T' kullanıyor%s içinde olmayan sol yanüye olmayan `%s', `mutable' olarak bildirilemeznesne olmayan `%s' `mutable' olarak bildirilemezburadaki tanımlama prototip deÄŸilbir kurucusuz sınıf içinde static olmayan sabit üye `%#D'statik olmayan sabit üye `%#D', öntanımlı atama iÅŸlemimi kullanamaz`%s' için 'static' olmayan bildirimi statik izliyoresnek dizi üyesinin satatik olmayan ilklendirmesistatik olmayan yöntem '%s' statik yönteme zorlanıyorbir kurucusuz sınıf içinde static olmayan baÅŸvuru `%#D'statik olmayan referans üyesi `%#D', öntanımlı atama iÅŸlemimi kullanamazÅŸablon olarak ÅŸablon olmayan tür `%T' kullanılmışşablon olarak ÅŸablon olmayan kullanılmışanlamsız olmayan etiketli ilklendiricilerilklendiricide sabit-olmayan dizi indeksi`%s' bir statik alan deÄŸilgeçerli bir Java .class dosyası deÄŸiltür bilgisi yetersizyok + bir dosyada deÄŸil mi?!bilgi:null karakter(ler) yoksayıldınull karakter(ler) sabit içinde saklanmışnull biçem dizgesi%s den sonra sayı eksikargümanların sayısı prototiple uyumsuzkomut zinciri (%d) içindeki bb notlarının sayısı != n_basic_blocks (%d)sayısal sabit tabanından büyük rakamlar içeriyorrakam içermeyen sayısal sabitnesne `%E' ÅŸablon argümanı olarak kullanılamaziçi boÅŸ `%T' türündeki nesne `%E', %s içinde eriÅŸimli olmayacaknesne `%s'protokolüne uygun deÄŸil`%E' içinde nesne eksikyöntem `%D' ye çaÄŸrı içinde nesne eksiküyeye gösterge oluÅŸumu kullanımında nesne eksikiçi boÅŸ `%T' türündeki nesne, %s içinde eriÅŸimli olmayacak`%T' türündeki nesne, %s içinde eriÅŸimli olmayacak`:' olmaksızın tasarlanmış ilklendirici kullanımının modası geçti`=' olmaksızın tasarlanmış ilklendirici kullanımının modası geçtisekizlik karakter sabiti bir bayta sığmazsekizlik önceleme dizgesi kapsamdışıgöreli konum sabit dizgenin sınırlarının dışındaeski temel baÅŸlık dosyasıeski tarz yerleÅŸtirme sözdizimi, yerine () kullanın`%2$s' makrosuna sadece %1$d argüman verilmiÅŸ`%s' makrosuna sadece 1 argüman verilmiÅŸtemel ilklendiricileri sadece kurucular alırsadece kurucuların bildirimleri `explicit' olabilirprogram bellek alanına sadece ilklendirilmiÅŸ deÄŸiÅŸkenler yerleÅŸtirilebilir`--print-main', `--list-class' ve `--complexity' seçeneklerinden yalnız biri kullanılabilirbu yapılandırmada sadece zayıf takma adlar destekleniyoroof, hata ayıklamasız; deÄŸer düzeltiliyor:open %s1. terim bir donanım yazmacı olmalıterim kısıtı yanlış konumlu `+' ya da '=' içeriyor`asm' için terim kısıtları farklı almaşık sayısındaveri öğesi: const_doubleterim ne bir sabit ne de bir koÅŸul kodu, geçersiz terim kodu 'c'veri öğesi: r0%%-harf'ten sonraki terim numarası eksikterim numarası kapsamdışıbiçem içindeki terim numarası kapsamdışıterim numarası argüman almayan biçem için belirtilmiÅŸterim numarası engellenmiÅŸ atama ile belirtilmiÅŸ?: için iÅŸlemimleri farklı türde`%s' üstündeki iÅŸlem tanımsız olabilir"defined" iÅŸlemimi bir tanımlayıcı gerektirir`%s' iÅŸlemiminin sol tarafı yok`%s' iÅŸlemiminin saÄŸ tarafı yokiÅŸlemimi `%T' dönüş `%T' ye bildirimlieniyileme seviyesi eski durumuna getirildieniyileme etkin deÄŸileniyileme etkin-mabi=mmixware ve -mabi=gnu seçenekleri birlikte kullanılmamalıetkin seçenekler: belirtilen seçenekler: tamsayı sıfır ile göstergenin düzenlenmiÅŸ karşılaÅŸtırmasıçıktı koÅŸulu %d "%s" taşırmasıyla birlikte belirtilemezçıktı koÅŸulu %d bir tek yazmaç belirtmeli%2$d terimi için çıktı ÅŸartı `%1$c' baÅŸlangıçta deÄŸilçıktı dosyasının ismi iki kere belirtilmişçıktı numarası %d doÄŸrudan adreslenebilir deÄŸilçıktı terimi %d `&' kısıtını kullanmalıçıktı terim kısıtı eksiÄŸi `='`asm' içindeki çıktı terimi bir sabitçıktı yazmaçları yığının üstünde gruplanmış olmalıoutput_move_single:dizi boyutunda taÅŸmasabit ifadesinde taÅŸmasembolik sabit listesi deÄŸerlerinde taÅŸma`%D' de sembolik sabit listesi deÄŸerlerinde taÅŸmaörtük sabit dönüşümünde taÅŸmatamsayıya indirgemede taÅŸmaiÅŸaretsiz tamsayıya indirgemede taÅŸma`%s' için çıktı argüman listesi taÅŸtıbaÄŸlamsal tür bilgileri olmayan aşırı yüklü iÅŸlevpaketli öznitelik yetersiz hizalama yaparpaketli öznitelik `%s' için yetersiz hizalama yaparpaketli öznitelik gereksizpaketli öznitelik `%s' için gereksizyapı boyutu hizalama sınırlarına ayarlanıyoryapı hizalaması `%s' olarak ayarlanıyorparametre `%D' void olarak bildirilmiÅŸparametre `%D' bilinmeyen `%T' sınırlı diziye %s içeriyorparametre `%D' geçersiz olarak yöntem türünde bildirilmiÅŸparametre `%D' geçersiz olarak göreli konum türünde bildirilmiÅŸparametre `%s' void bildirimli`%s' parametresi tamamlanmamış türde`%s' parametresi tam bir ilerletme bildirimi`%s' parametresi ilkdeÄŸerliparametre `%s' içi boÅŸ türü gösteriyorparametre tamamlanmamış türdeparametre ismi eksikparametre ismi parametre listesinde yokparametre ismi atlandı#define yönergesindeki parametre ismi bir rakam ile baÅŸlıyoriÅŸlev bildiriminde (türleri belirtmeksizin) parametre isimleriparametre içi boÅŸ türü gösteriyorçaÄŸrılan iÅŸlevin parametre türünün içi boÅŸparametre türleri hem liste içinde hem de ayrıca verilmiÅŸayrıştırma hatası:kayıtlı iÅŸlev metninin sonunda ayrıştırma hatasıyöntem özelliklerinde ayrıştırma hatasıayrıştırma hatası; ayrıca sanal bellek aşıldıayrıştırma hatası; ayrıca sanal bellek aşıldıayrıştırıcı kayıp olabilir: bir yerlerde kayıp '{' var mı?ayrıştırıcı yığın taÅŸmasıiÅŸlev ÅŸablonunun `%D' kısmî özelleÅŸtirmesi`friend' bildirimli kısmi özelleÅŸtirme `%T'kısmî özelleÅŸtirme `%T' hiç bir ÅŸablon argümanını özelleÅŸtirmiyor`%D' iÅŸlevinin %P. argümanında göstergesiz %s için kulanılan NULL'un aktarılmasındaniteleyicileri iptal eden `%#D'nin `this' argümanı olarak `%T aktarılıyor`%T' `%T'yi `%T' üzerinden seçerek aktarılıyor`%D' iÅŸlevinin %P. argümanında %s için `%T'nin aktarılmasında`%2$s' iÅŸlevinin %1$d. argümanı aktarılıyoriÅŸlev göstergesinin %d. argümanı aktarılıyorhenüz desteklenmeyen fp yazmaçlarındaki kayan noktalı argümanların aktarılmasında`%D' iÅŸlevinin %P. argümanında %s için `%T' negatif deÄŸerinin aktarılmasında"%s" ve "%s" geçiÅŸi geçerli bir öniÅŸlem dizgeciÄŸi vermez%s den sonra dosya yolu ismi eksikveri yoluVeri öğelerini kendi bölümlerine yerleÅŸtirirHer iÅŸlev kendi bölümüne yerleÅŸtirilirgöstergearitmetikte `void *' türünde gösterge kullanılmışçıkartmada `void *' türünde gösterge kullanılmış%s gösterge hedefleri farklı signed'lıktaaritmetikte iÅŸlev göstergesi kullanılmışçıkartmada iÅŸlev göstergesi kullanılmışaritmetikte üye göstergesi kullanılmış`%T' den `%T' ye üye göstergesi çevirimi sanal taban üzerindendirsanal taban `%T' (`%T' nin) üzerinden göstergeden üyeye çevirim`%T' nin sanal tabanı `%T' üzerinden üye göstergesine dönüşümüye iÅŸleve gösterge çaÄŸrıldı ama sınıf kapsamında deÄŸilaritmetikte üye iÅŸlev göstergesi kullanılmışkoÅŸullu ifade içinde gösterge türü uyumsuzluÄŸukarmaşık sayı gereken yerde gösterge deÄŸeri kullanılmışbir gerçel sayı deÄŸer umulurken gösterge deÄŸer kullanılmışüye iÅŸlev %E nesnesiz çaÄŸrılamaz; .* or ->* kullanımı önerilirkoÅŸullu ifadede gösterge/tamsayı tür uyumsuzluÄŸucase deÄŸeri olarak göstergeler kullanılamazzehirlenen mevcut makro "%s"sonlandırılmamış dizge sabitin olası baÅŸlangıcıgaliba ')' eksiksonradan arttırımlı adres bir yazmaç deÄŸilsonek `%D' argüman olarak `int' almalısonek `%D' ikinci argümanı olarak `int' almalısonek `%D' `%T' ile dönmeliyöntem `%s' için olası seçici çeliÅŸiyorön eksiltmeli adres bir yazmaç deÄŸilön arttırımlı adres bir yazmaç deÄŸilduyarlıkduyarlık printf biçemindedayanak bir tanımlayıcı olmalıdayanakların cevabı boşönek `%D' `%T' döndürmeli`%#D'nin önceki bildirimi ile burada çeliÅŸiyor`%D' önceki bildirimiönceki bildirim `%#D' olarak`%#D'in önceki bildirimi%L ilintili `%#D' önceki bildirimi`%D'in önceki bildirimi`%s'in önceki bildirimi`%s' iÅŸlevinin önceki bildirimi 'inline' idi`%s' iÅŸlevinin önceki bildirimi 'inline' deÄŸilönceden burada tanımlı`%#T' nin önceki bildirimi`%D'in önceki dış bildirimi`%s'in önceki 'external' bildirimiönceki `%D' kardeÅŸ bildirimi`%s'in önceki örtük bildirimiönceki iÅŸlev olmayan bildirim `%#D'önceki inline olmayan bildirimi burada kullanılmışönce burada kullanılmışönceki parametrelerin uzunluÄŸu `%s' bağımlıanonim union içinde private üye `%#D'bir çerçeve göstergesi olmaksızın ayrımlama çalışmazayrımlama henüz programlanmadı.-mg ile ayrımsama desteklenmiyor + programlar: %s + yükseltgenmiÅŸ argüman `%s', prototiple uyumsuzdüzgün çalışmıyoranonim union içinde protected üye `%#D'protokol `%s' döngüsel bağımlılık içeriyor`%#D' için prototip`%#D' prototipi sınıf `%T' içindeki hiçbir ÅŸeyle eÅŸleÅŸmiyor`%s' için prototip izleniyor`%s' için prototip izleniyor ve %d. argüman eÅŸleÅŸmiyor`%s' için prototip izleniyor ve argüman sayısı eÅŸleÅŸmiyor`%D' için saÄŸlanmışyetkin tür `%T', yıkıcı ismi `~%T' ile eÅŸleÅŸmiyor`operator %T' bildiriminde niteleyicilere izin verilmeztemel baÅŸlık tamponu çok küçük%3$s'den %2$ld bayt okunması umulurken %1$ld bayt okunduread %ssınıf %s ikinci defadır %s den okunuyornull gösterge vasıtasıyla okuma (%d. arg)gerçek isim çok uzun - takma ad yoksayıldıçapraz derlemede gerçek deÄŸerli ÅŸablon parametreleriözyinelemeli tür `%T' tanımsızC++ yerleÅŸik türü `%T' için yeniden bildirim`%s'in yeniden bildirimi`enum %s' yeniden bildirilmiÅŸ`wchar_t' nin `%T' olarak yeniden bildirimiburada yeniden `%#D' olarak bildirilmiÅŸ`%#T' yeniden tanımlanmış`%s'in yeniden tanımlanması`struct %s' tekrar tanımlanmış`union %s' tekrar tanımlanmış`%#D' nin öntanımlı argümanının yeniden tanımlanmasıstandart çıktıya yönlendirme: %saynı baÄŸlamda `%D'nin yeniden bildirimi anlamsız`%s'in aynı alandaki anlamsız yeniden bildirimireferans `%s' belirsiz; `%s' ve `%s' arayüzlerinde görünüyoryerel deÄŸiÅŸken `%D' ye referansa döndürüldüsaÄŸ yansız dönüşlüye referansyazmaç olmayan deÄŸiÅŸken `%s' için yazmaç ismi verilmiÅŸ`%s' için yazmaç ismi belirtilmemiÅŸ`%s' için belirtilen yazmaç veri türü için kullanılabilir deÄŸilyazmaç iki genel yazmaç deÄŸiÅŸkeni için kullanılmışyazmaç deÄŸiÅŸkeni `%s' yuvalanmış iÅŸlevde kullanılmış"%s" hem pragma hem de pragma isim alanı olarak kaydediliyorIX, IY ve Z yazmaçları aynı KOMUTta kullanılmış`%s' sınıfının yeniden oluÅŸumu`%T' den `%T' ye reinterpret_cast const (ya da volatile) dışı çevirim yapıyor`%T' den `%T' ye reinterpret_cast doÄŸruluÄŸu kaybediyorspec %s ismi %s yapılıyor + biçem içinde %s yinelenmiÅŸbir nesne alarak oluÅŸmayan `%3$T' türündeki `%2$E'nin üyesi `%D' için isteküye `%D' için istek çoklu kalıt kafesi içinde belirsizüye `%T::%D' için kümeleme türü olmayan tür `%T' ifadesi içinde istekbir struct veya union olmayan ÅŸeyin `%s' üyesi için istek%s için istenen hizalama yerleÅŸik hizalama %d den daha büyükistenen ayarlama bir sabit deÄŸilistenen ayarlama 2 nin kuvveti deÄŸilistenen ayarlama çok büyükistenen init_priority bir tamsayı sabit deÄŸilistenen init_priority kapsamdışıistenen init_priority iç kullanım için ayrılmıştır`operator->()' gösterge olmayan sonuç veriyorret iÅŸlemi gerçeklenmedidönendönüş belirteci `%D' zaten yerindereturn'den sonra sınır gelmiyordönüş türü `%#T' bir içi boÅŸ türdönen tür `int'e öntanımlıdönen tür id ye öntanımlı`%s' için dönen tür id ye öntanımlı`main' için dönen tür `int' olarak deÄŸiÅŸtidönüş türü, bir içi boÅŸ tür`%s' için dönen tür `int' deÄŸilkurucu için dönen deÄŸer tür özelliÄŸi geçersizyıkıcı için dönen deÄŸer tür özelliÄŸi geçersiz`operator %T' için dönüş türü belirtilmiÅŸkurucu için dönen deÄŸer tür belirteci yoksayıldıvoid dönüşlü bildirilmiÅŸ iÅŸlevde return deyiminde bir deÄŸer varvoid olmayan dönen türlü iÅŸlevde return deyimi deÄŸer almamışblock_exit_expr'de deÄŸer döndükurucudan bir deÄŸer döndürülemezbir yıkıcıdan deÄŸer dönüyorgeçiciye referans dönüyorsaÄŸ taraf duyarlığıstrfmon biçeminde saÄŸ taraf duyarlığısaÄŸa kaydırma sayısı türünden büyük yada eÅŸitsaÄŸa kaydırma sayısı negatifVAX gerçelleri için yuvarlama kipi desteklenmiyor`__builtin_expect'e aktarılan ikinci argüman bir sabit olmalı`__builtin_prefetch' için 2. argüman bir sabit olmalı`%s' için ikinci argüman `char **' olmalıydı`va_start'ın ikinci parametresi isimli son argüman deÄŸilbölge özelliÄŸi yerel deÄŸiÅŸkenler için belirtilmiÅŸ olamazbölge özelliÄŸine `%s' için izin verilmezbölge özellikleri bu hedef için desteklenmiyor`%s' bölgesi önceki bildirimle çeliÅŸiyorbölüm göstergesi yokseçici bir ÅŸimdiki deÄŸer olmalı%s bildiriminden sonra ; yok`%T' bildiriminden sonra ; yok`%T' bildiriminden sonra ; yok%s iÅŸlev `%#D' yi gölgeliyoryerleÅŸik `%s' iÅŸlevinin gölgelenmesikitaplık iÅŸlevi `%s'in gölgelenmesi`%#D'in önceki gölgeleyen tür bildirimishared ve mdll uyumsuzkaydırma sayısı türünden büyük ya da eÅŸitkaydırma sayısı negatif`%s' için 'short', 'signed' veya 'unsigned' geçersiz`%s' için 'signed' ve 'unsigned' birlikte verilmiÅŸkoÅŸullu ifadede signed ve unsigned türlersigof tür belirteciarray new içindeki boyut bütünleyici türde olmalı`%s' için geniÅŸlik %d bayt`%s' için geniÅŸlik %d bayttan fazla`%D' dizisinin boyutu tamsayı deÄŸil`%D' dizisinin boyutu negatif`%D' dizisinin boyutu bir tümleyen sabitli ifade deÄŸil`%s' dizisinin boyutu tamsayı deÄŸil`%s' dizisinin boyutu negatif`%s' dizisinin boyutu çok büyükdizi boyutu tamsayı deÄŸildizi boyutu negatifdizi boyutu bir tümleyen sabitli ifade deÄŸilüye `%D' boyutu bir sabit deÄŸil`%s' dönüş deÄŸerinin uzunluÄŸu %u bayt`%s' için dönen deÄŸerin geniÅŸliÄŸi %d bayttan büyük`%s' deÄŸiÅŸkeni çok geniÅŸsizeof bir bit alanına uygulandıbir iÅŸlev türüne sizeof uygulanmışbir void türe sizeof uygulanmışsizeof bir tamamlanmamış türe uygulanmışsizeof(long double) -> 12sizeof(long double) -> 16daha kodlanmadı: Daha yazılmadı: #pragma İSİM=BOYUT hizalamasıDaha yazılmadı: #pragma noalign İSİMözür: özümleme iÅŸlevi static verisi `%#D' nin cevabı yanlış (sizi çoklu kopyalara sürükleyecek)sınıf %s için kaynak dosyası onunla eÅŸleÅŸen sınıf dosyasından daha yeni. Yerine kaynak dosyası `%s' kullanıldıkomut satırında kaynak dosyası iki kere kullanılmış ve sadece bir kere derleneceközellik aksaması: '%%*' kalıp eÅŸleÅŸtirerek ilklendirilemediÖzellik aksaması: özellik seçeneÄŸi '%c' anlaşılamadıözellik dosyası birleÅŸtirilecek özellik içermiyorözellik '%s' + + gerçeklemeden sonra %D özelleÅŸtirmesigerçeklemeden sonra `%T' özelleÅŸtirmesiörtük bildirimli özel üye iÅŸlev özelleÅŸtirmesi `%#T' farklı isim alanında özelleÅŸtiriliyorspecs %%include sözdizimi %ld karakterden sonra bozukspecs %%rename sözdizimi %ld karakterden sonra bozukismi deÄŸiÅŸecek specs %s özelliÄŸi yok%ld. karakterden sonra özellikler dosyası bozuk%ld. karakterden sonra bilinmeyen specs %% komutubiçem içinde sahte `%%'yığın baÄŸlamı 8 baytın katları deÄŸil: %dyığın baÄŸlamı 8 baytın katları deÄŸil: %dyığın baÄŸlamı çok büyükyığın sınırlama ifadesi desteklenmiyorbu hedefte yığın sınırları desteklenmiyorYığın uzunluÄŸu > 32kyığın alttan taÅŸması - dup* iÅŸlemiyığın kapsamı çok büyük: %d baytstatic `%s' `mutable' olarak bildirilemez`id' türünün nesnesine statik eriÅŸim`%s' için 'static' bildirimi statik olmayan izliyorstatic üye `%D' bir bit alanı olarak bildirilemezstatik üye `%D' `register' olarak bildirilmiÅŸstatik üye iÅŸlev `%#D' tür niteleyicilerle bildirilmiÅŸkuramsal bildirimde 'static' ya da tür niteleyicilerparametresiz dizi bildirimi içinde 'static' veya tür niteleyicilerstatik deÄŸiÅŸken `%s' dllimport imli`%T' den `%T' ye static_cast const'suz dışına çevirim yapıyorsaklama sınıfı `%D' ÅŸablon gerçeklemesine uygulanmışsaklama sınıfı `auto' `%s' iÅŸlevi için geçersiz`inline' saklama sınıfı, genel kapsam dışında bildirilen `%s' iÅŸlevi için geçersizsaklama sınıfı `register' `%s' iÅŸlevi için geçersizsaklama sınıfı `static' genel kapsam dışı bildirilmiÅŸ iÅŸlev `%s' için geçersiz%s için saklatım öbeÄŸi `%s' belirtilmiÅŸ`%s' parametresi için saklama sınıfı belirtildi`%s' yapı alan için saklama sınıfı belirtildiveri türü ismi için saklama sınıfı belirtildiyapı ya da sınıftan sonra saklama sınıfı belirteci `%s' kullanılamazdizi bildiriminde saklatım öbeÄŸi belirteçlerisaklatım öbeÄŸi belirteçleri dost iÅŸlev bildirimleri içinde geçersizsaklatım öbeÄŸi belirteçleri parametre bildirimi içinde geçersiz`%D' nin saklama geniÅŸliÄŸi sabit deÄŸil`%D' nin saklama uzunluÄŸu bilinmiyor`%s'in saklama uzunluÄŸu sabit deÄŸil`%s'in saklama uzunluÄŸu bilinmiyorprogramda serseri '%c'programda serseri '\%o'strftime biçemleri biçem argümanları olamaz#if ifadesinde dizge sabitler geçersizdizge uzunluÄŸu `%1$d' ISO C%3$d derleyiclerin desteklediÄŸi uzunluk %2$d den büyükstatik ilintilemeli bir nesnenin adresi olduÄŸundan, dizge sabiti %E geçerli bir ÅŸablon argümanı deÄŸildizge bölümü yokyapısayısal deÄŸer gerekirken yapı türü deÄŸer kullanılmışyapıilklendirmesiz sabit üyelerle `%D' yapısıilklendirmesiz referans üyelerle `%D' yapısıveri yapısı boyut sınırı sadece 8 ya da 32 ye ayarlanabilirsatır yönergesinin tarzı bir GCC özelliÄŸidir`%T' türündeki alt nesne kurucu tarafından ilklendirilmiÅŸ olmalı, `%E' tarafından deÄŸilalt indis `char' türündedizi baÅŸvurusunda altindis yokaltindisli deÄŸer ne dizi ne de bir gösterge`register' olarak bildirilmiÅŸ dizi indislemesigeleneksel C'den #%s in saklanması için bir girintili # kullanılmış farzedilirgeleneksel C'de #elif kullanılmıyor varsayılır|| içindeki && çevresinde parantezler önerilir& iÅŸlemimindeki + veya - çevresinde parantezler önerilirshift içindeki + ya da - çevresinde parantezler önerilir^ iÅŸlemimindeki aritmetik çevresinde parantezler önerilir| iÅŸlemimindeki aritmetik çevresinde parantezler öneriliratamayı çevrelemesi önerilen parantezler doÄŸruluk deÄŸeri olarak kullanıldı& iÅŸlemimindeki karşılaÅŸtırma çevresinde parantezler önerilir^ iÅŸlemimindeki karşılaÅŸtırma çevresinde parantezler önerilir| iÅŸlemimindeki karşılaÅŸtırma çevresinde parantezler önerilirswitch -mcpu=%s ile -march= seçenekleri çeliÅŸiyorswitch büyüklüğü bir tamsayı deÄŸil%lu luk switch deyimi girdileri çok büyüksözdizimi hatasısözdizimi hatası ':' den önce '?' yoksözdizimi hatası '?' dan sonra ':' yok'%s' dizgeciÄŸinde sözdizimi hatasısözdizimi hatası: yedeklenemiyorüyeye gösterge ifadesinin sınır adresi alınıyoryıkıcı adresinin alınmasıgeçicinin adresi alınıyorhedef CPU, APCS-26 desteklemiyorhedef CPU, APCS-32 desteklemiyorhedef MİB THUMB komutlarını desteklemez.hedef MİB beraber çalışmayı desteklemiyor%s den sonraki hedef eksik%s seçeneÄŸinden sonraki hedef eksikÅŸablon `%#D' dosya içinde #pragma arabirimsiz tanımlandışablon `%#D' dosya içinde #pragma arabirimsiz gerçeklendiÅŸablon argümanı %d geçersizÅŸablon argümanı `%E' ÅŸablon parametre(ler)ini içine alıyorbir ismi olmayan ÅŸablon sınıfı`%#D' ÅŸablon bildirimiÅŸablon olmayan `%#D' nin ÅŸablon bildirimi%d lik en büyük ÅŸablon gerçekleme derinliÄŸi `%D' gerçeklemesinde aşılıyor (en büyük deÄŸeri arttırmak için -ftemplate-depth-NN kullanın)ÅŸablon parametresi `%#D'ÅŸablon parametre listesi doÄŸrudan gerçekleme içinde kullanılmışşablon parametre türü `%T' `friend' olarak bildirilmiÅŸÅŸablon parametreleri kardeÅŸler olamazkısmî özelleÅŸtirmede kullanılmayan ÅŸablon parametreleri:C ilintileme ile ÅŸablon özelleÅŸtirmesiÅŸablon türü parametrelerde `class' ya da `typename' sözcükleri kullanılmalıC ilintilemeli ÅŸablonÅŸablon argümanı `%T' anonim tür kullanıyorÅŸablon argümanı `%T' yerel tür `%T' kullanıyorÅŸablon kimliÄŸi `%D', `%+D' için hiçbir ÅŸablon bildirimi ile eÅŸleÅŸmiyorbirincil ÅŸablon bildiriminde ÅŸablon kimliÄŸi `%D'ÅŸablon kimliÄŸi `%D' bir bildirici olarak kullanılmış`%F'in önceki bildirimindentek başına -g seçeneÄŸi -maout ve -melinux ile geçersiz-mlong-double-64 seçeneÄŸi henüz çalışmıyor.` ' printf bayrağı`!' strfmon bayrağı`#' printf bayrağı`#' strftime bayrağı`'' printf bayrağı`'' scanf bayrağı`(' strfmon bayrağı`+' printf bayrağı`+' strfmon bayrağı`-' printf bayrağı`-' strfmon bayrağı`-' strftime bayrağı`0' printf bayrağı`0' strftime bayrağı`E' strftime deÄŸiÅŸtirici`I' printf bayrağı`I' scanf bayrağı`O' deÄŸiÅŸtirici`O' strftime deÄŸiÅŸtirici`^' strfmon bayrağı`^' strftime bayrağı`_' strftime bayrağı`a' scanf bayrağı`gnu.gcj.gcj-compiled' özel sıfır uzunluklu `gnu.gcj.gcj-compiled' özniteliÄŸine sahip olmayan `%s' içinde bulundu. Bu durum genellikle sınıf dosyalarının yolu doÄŸru belirtilmediÄŸinde ortaya çıkar. Sınıf dosyalarının yolunun nasıl belirtileceÄŸini açıklayan info sayfasına bakmak için komut satırından `info gcj "Input Options"' yazınız`%D' nin adresi, daima `true' olacakatama engelleyen scanf özelliÄŸikoÅŸullu ifade buradan baÅŸladım210 küçük ilkli bayt sıralamasının desteklemez`\%c'nin anlamı -traditional ile deÄŸiÅŸir`\a'nın anlamı -traditional ile deÄŸiÅŸir'\x'in anlamı -traditional ile deÄŸiÅŸir`\a'nın anlamı -traditional ile deÄŸiÅŸir`\x'in anlamı -traditional ile deÄŸiÅŸirtek geçerli bileÅŸim long double'dır`__builtin_prefetch' için 3. argüman bir sabit olmalı`%s' için üçüncü argüman mümkünse `char **' olmalıydıbu iÅŸlev bir deÄŸerle dönebileceÄŸi gibi dönmeyebilir debu, önce bildirimdirbu, ilk öntanımlı etiketbu, aynı deÄŸeri kapsayan ilk girdibu o komuttur:bu önceki tanımlamanın yeribu hedef -mabi seçeneÄŸini desteklemez.bu hedef makina gecikmeli dallanmalara sahip deÄŸil"defined" bu kullanımıyla uyarlanabilir olmayabilirtamsayı sabitte üç 'l' sonekitümleyen, gösterge olmayan NULL yakalanıyor%s süresi: %ld.%06ld (%%%ld) + bir ÅŸablon parametresinin bir tür üyesine baÅŸvuru yapmak için `typename %E' kullanınbiçem için argüman sayısı yetersiz%s `%+#D' için argümanlar çok aziÅŸlev için çok az argüman belirtildi`%s' iÅŸlevi için argümanlar çok az`%D' bildiriminde ÅŸablon parametresi listesi çok aziÅŸlev deÄŸer türü çok büyük, bunun için %d yazmaç gerekirken sadece %d yazmaç varçok sayıda #pragma seçeneÄŸi align=resettamsayı sabitteki 'l' soneklerinin sayısı çok fazla`%2$s' makrosuna çok fazla (%1$d) argüman verilmiÅŸ`asm' içindeki almaşıkların sayısı çok fazlabiçem için argüman sayısı çok fazla%s `%+#D' için argümanlar çok fazlaiÅŸlev için çok fazla argüman belirtildi`%s' iÅŸlevi için argümanlar çok fazla`va_start' iÅŸlevine çok fazla argüman verilmiÅŸkayan sabitteki ondalık nokta sayısı çok fazladosya sayısı çok fazla. Kullanım bilgileri için %s --help yazınızçok fazla ilklendirme iÅŸlevi gerekligirdi dosyası sayısı çok fazla`%D' bildiriminde ÅŸablon parametresi listesi çok fazla`%T' bildiriminde ÅŸablon parametresi listesi çok fazla`%s' için tepe-seviye bildirimi `auto' belirtiyorgeleneksel C'de girintili # ile #%s yoksayılırgeleneksel C otomatik küme ilklendirmesini reddediyorgeleneksel C union ilklendirmesini reddedergeleneksel C dizgelerin birleÅŸtirilmesine izin vermezgeleneksel C 'f' sonekini kullanmazgeleneksel C 'l' sonekini kullanmazgeleneksel C 'u' sonekini kullanmazgeleneksel C `U' sonekini reddedergeleneksel C tekil artı iÅŸlemimini dışlartrampolines desteklenmiyortrampolines henüz programlanmadıVAX gerçelleri için tuzak kipi desteklenmiyorUnicos/Mk üzerinde yakalama kipi desteklenmiyorAÄŸaç denetimi: %4$s:%5$d: %3$s iÅŸlevinde '%1$s' umulurken, '%2$s' varAÄŸaç denetimi: %5$s:%6$d: %4$s iÅŸlevinde sınıf '%1$c' umulurken, '%2$c' (%3$s) var??%c üçlü harfi %c olarak dönüştürüldü??%c üçlü harfi yoksayıldıyerel deÄŸiÅŸkenlerin sayısını azaltmayı deneyinyapı tamamlanmaya çalışılırken önceki ayrıştırma hatalarından dolayı kesildisınıf `%T' genel baÄŸlamın kardeÅŸi yapılmaya çalışılıyortamsayı sabitte iki 'u' soneki`%s'in bildiriminde iki veya daha fazla veri türübir boÅŸ bildirimde iki veri türü belirtilmiÅŸtür `%#T' argümanı `delete'e verilmiÅŸ, gösterge umuluyordutür `%D' `%T'nin bir doÄŸrudan tabanı deÄŸiltür `%D' `%T' nin bir doÄŸrudan ya da sanal tabanı deÄŸilbir yerel sınıfan oluÅŸturulan `%T' geçerli bir ÅŸablon argümanı deÄŸiltür `%T' yıkıcıya sahip deÄŸiltür `%T' Java `throw' veya `catch' içinde kullanılmaztür `%T' tür `%T' için taban tür deÄŸiltür `%T' `java::lang::Throwable'dan türetilmemiÅŸtirtür `%T' `%T' türünden türetilmemiÅŸ`%T' küme olmayan türdetür `%T' (ÅŸablon argümanı `%E' nin türü) ÅŸablon parametre(ler)ine bağımlı oluyor`%s' bildiriminde tür `int'e öntanımlıtür yakında kaldırılacaktür yakında kaldırılacak (%s:%d. satırında bildirilmiÅŸ)ÅŸartlı ifade içinde tür uyumsuzluÄŸutür önceki external bildirimle çatışıyortür önceki örtük bildirimle çatışıyor`&' den önce tür ismi gerekli`*' dan önce tür ismi gerekli`%E' türü yıkıcı türü `%T' ile eÅŸleÅŸmiyor (tür `%T' idi)`%s' türü öntanımlı olarak `int'asm terimi `%E'nin türü saptanamadıexternal `%s' türü genel deÄŸil%d biçimsel parametre türü tamamlanmayan türdeyapı ya da sınıftan sonra `%s' tür niteleyicisine izin verilmez `%s' için tür niteleyicileri önceki bildirimle çeliÅŸiyortür niteleyicileri iÅŸlev dönen türünde yok sayıldıkardeÅŸ sınıf bildirimi için tür niteleyiciler belirtilmiÅŸtür boyutu doÄŸrudan deÄŸerlendirilemezyapı ya da sınıftan sonra tür belirteci `%s' kullanılamazparametre için tür belirteci ihmal edildiparametre `%E' için tür belirteci ihmal edildivektör silme iÅŸlemi için tür ne gösterge ne de diziÅŸablon parametre listesindeki %d. argümanda (`%D' için) tür/deÄŸer çeliÅŸkisitypedef `%D' ilklendirilmiÅŸtypedef `%s' ilkdeÄŸerlitypedef bildirimi bir ilklendirici içeriyor«typedef» bildirimi parametre bildirimi içinde geçersiztypedef ismi sınıf nitelemeli olmayabilirtür ismi türü `%#T' `friend' olarak bildirilmiÅŸtürler tam uyumlu deÄŸilburadan üye iÅŸlev göstergesi çaÄŸrılamazyığındaki parametrenin gerçek konumu hesaplanamıyor`%s' sınıfı içinde dökülecek bir yazmaç bulunamadı.aÅŸağıdakiler için yeniden yüklemeler üretilemiyor:'%s' dosyası mmap'lenemiyor'%s' dinamik bağımlılığı açılamıyor'%s' dosyası açılamıyor'%s' dosyası durumlanamıyorPIC yazmacı için '%s' kullanılamıyortekil `&'karşılıksız #endif#if ifadesinde karşılıksız yığıntanımlanmamış isimli terim '%s'atanmamış ya da geçersiz # yönergesiAtanmamış tür `id', lütfen dahil edintanımsız yapılan "%s"`%s' sonra #undef yapılmışundef'lenen `defined'sayı içinde alt çizgiaddr_const olarak beklenmeyen NOT:beklenmeyen PIC sembolübeklenmeyen adres ifadesicris_print_base içinde beklenmeyen taban türü__builtin_eh_return için yığın ayarı gerektiren iÅŸlev türü anlaşılamadıcris_print_index içinde umulmayan indis türülocate_error içinde umulmayan `%c' harfi + umulmayan çarpımsal terimBeklenmeyen terimadreste beklenmeyen yan etkiler`id' için umulmadık tür (%s)ilklendirilmemiÅŸ sabit `%D'`%#T' nin `new' u içinde ilklendirilmemiÅŸ sabitilklendirilmemiÅŸ sabit üyesi `%D'ilklendirilmemiÅŸ referans üyesi `%D'birleÅŸik yapıunion `%T' isimli üyeler yokken ilklendirilemezbirleÅŸik yapı ÅŸeffaf olamazsayısal deÄŸer gerekirken birleÅŸik yapı türü deÄŸer kullanılmışevrensel karakter ismi '\U%08x' tanıtıcı içinde geçerli deÄŸilevrensel karakter ismi '\U%04x' tanıtıcı içinde geçerli deÄŸilEBCDIC hedefte evrensel karakter ismievrensel karakter ismi kapsam dışıbilinmeyen -march= seçeneÄŸi (%s). + Geçerli seçenekler: 1.0, 1.1, ve 2.0 + -mdebug-%s seçeneÄŸi bilinmiyorbilinmeyen -mschedule= seçeneÄŸi (%s). + Geçerli seçenekler: 700, 7100, 7100LC, 7200, ve 8000 + bilinmeyen ABI belirtilmiÅŸ: '%s'`%s' diye bir C standardı bilinmiyorMİB sürümü %d bilinmiyor, 40 kullanılıyor. + -mtune= seçeneÄŸi ile belirtilen CRIS mib sürüm özelliÄŸi bilinmiyor: %s-march= veya -mcpu= seçenekleri ile belirtilen CRIS sürüm özelliÄŸi bilinmiyor: %s'#pragma pack' için '%s' eylemi bilinmiyor - yoksayıldıdelete içindeki dizi boyutu bilinmiyorbiçemdeki dönüşüm türü karakteri 0x%x bilinmiyorbiçemdeki dönüşüm türü karakteri `%c' bilinmiyorbilinmeyen kodlama: `%s' + Yerelinizin kodlamasının sisteminizdeki iconv(3) tarafından desteklenmediÄŸi + anlamına gelmektedir. EÄŸer girdi dosyanızda özellikle bir kodlama kullanmanız + gerekiyorsa `--encoding=UTF-8' seçeneÄŸini kullanmayı deneyin.bilinmeyen önceleme dizgesi '\%c'bilinmeyen önceleme dizgesi, `\%c'bilinmeyen önceleme dizgesi: '\%03o'bilinmeyen önceleme dizgesi, `\'den sonra 0x%x karakter kodu geliyorilklendiricide bilinmeyen `%s' alanı belirtilmiÅŸbilinmeyen komut kipi'%s makina kipi bilinmiyorbilinmeyen taşıma komutu:bilinmeyen isim alanı `%D'doÄŸrulama sırasında bilinmeyen opkod %d@pc=%d`asm' içindeki yazmaç ismi `%s' bilinmiyorbilinmeyen yazmaç ismi: %sbilinmeyen set constructor türüdizge dizgeciÄŸi %s bilinmiyor + bilinmeyen {de,en}code_mach_o_hdr sonuç deÄŸeri %disimsiz alanlara struct ve union dışında izin verilmiyortaban sınıfı olmayan `%T' için isimsiz ilklendiriciçoklu kalıt kullanan `%T' için isimsiz ilklendiriciilk tanımı olmayan adsız struct/unionadsız deÄŸiÅŸken ya da alan void olarak bildirilmiÅŸgerçel sayı olmayan argümanlar arasında düzenlenmemiÅŸ karşılaÅŸtırma%d den %d nin öncesine baytkod eriÅŸilebilir deÄŸilyöntemin sonundaki %d den baytkod ulaşılabilir deÄŸilgeniÅŸ altiÅŸlem anlaşılamadıtanımlanamayan komut:bilinmeyen adresanlaşılmayan biçem belirtecitanınmayan gcc hata ayıklama seçeneÄŸi: %c`%s' seçeneÄŸi bilinmiyor`-%s' seçeneÄŸi bilinmiyoryazmaç ismi `%s' bilinmiyorbölüm ismi "%s" bilinmiyortanınmayan tahmini sabitcris_global_pic_symbol içinde tanınmayan tahmini sabit%s iÅŸlemimi tanınmıyordizgecik %s okunabilir deÄŸil`__builtin_frame_address'e aktarılan argüman desteklenmiyor`__builtin_return_address'e aktarılan argüman desteklenmiyorek yazmaç için desteklenmeyen terim boyutudesteklenmeyen sürümdesteklenmeyen uzun tamsayı iÅŸlemisonlandırılmamış #%ssonlandırılmamış #%s koÅŸulusonlandırılmamış argüman listesi çağıran makro "%s"sonlandırılmamış çevirici aksan alternatifisonlandırılmamış açıklamasonlandırılmamış biçem dizgesi#define yönergesinde sonlandırılmamış parametre listesisonlandırılmamış dizge ya da karakter sabiti$ tarzı biçemde kullanılmamış argümanlarparametre `%s' kullanılmamışdeÄŸiÅŸken `%s' kullanılmamışkullanımı: %s [seçenekler] girdi çıktıDWARF v1, %2$d seviyesi için -gdwarf -g%1$d kullanınDWARF v2 için -gdwarf-2 kullanınilk satırda `# ...' yerine `#line ...' kullanın%s ve %s birlikte %s biçeminde kullanımı%s ve %s birlikte `%%%c' %s biçemiyle kullanımıiçeren iÅŸlevden %s kullanımı`%D' kullanımı belirsizÅŸablonda `%s' kullanımışablon türü birleÅŸtirmede `%s' kullanımı`%s' uzunluk deÄŸiÅŸtiricsinin `%c' tür karakteri ile kullanımısınıf ÅŸablonu `%T' nin ifade olarak kullanımıönceden bildirilmeksizin enum `%#D' kullanımıözellik ilintilemesi `%D' kullanımı önceki özellik `%D' den farklıisim alanı `%D' nin ifade olarak kullanımıeski tarz çevirim kullanımışablon niteleyicisinin ÅŸablon dışında kullanımı%3$d yerine %1$d ÅŸablon parametresi kullanılmış %2$sboÅŸ bildirimde kullanışsız tür ismi ya da anahtar sözcükkullanıcı tanımlı `%D' daima her iki argümanıyla birlikte deÄŸerlendiriliradres için CONST_DOUBLE kullanılıyorÅŸablon dışında `typename' kullanımıçoklu dosyalarla her iki @FILE kullanımı gerçeklenmediusing bildirimi `%D' belirsiz tür `%T' ye dahil edildikopya ataması için bireÅŸimli `%#D' kullanılıyor`%s' den sonra ÅŸablon tür parametresi `%T' kullanımıtypedef-ismi `%D' `%s' den sonra kullanılıyoryıkıcı için using bildirimisınıf baÄŸlamında üye olmayan için using bildirimivalidate_value_data: regno zinciri içinde döngü (%u)validate_value_data: [%u] BoÅŸ zincir için next_regno hatalı (%u)validate_value_data: [%u] oldest_regno hatalı (%u)validate_value_data: [%u] zincir içinde boÅŸ olmayan yazmaç (%s %u %i)-mfixed-range için deÄŸer YAZMAÇ1-YAZMAÇ2 ÅŸeklinde olmalıvarargs iÅŸlevi özümlenemez`%#D' deÄŸiÅŸkeni ilklendirilmiÅŸ ama içi boÅŸ türdedeÄŸiÅŸken `%s' `inline' bildirilmiÅŸ`%s' deÄŸiÅŸkeni, veri türü tamamlanmayan bir ilkdeÄŸere sahipdeÄŸiÅŸken `%s' `longjmp' ya da `vfork' tarafından taşırılmış olmalıdeÄŸiÅŸkenin göreli konumu kısmen yığında kısmende yazmaçta aktarılmış`%s' deÄŸiÅŸkeni ya da alanı void olarak bildirilmiÅŸdeÄŸiÅŸken ya da alan void olarak bildirilmiÅŸdeÄŸiÅŸken boyutu hem yığın hem de yazmaç içine aktarılmışdeÄŸiÅŸken boyutu türü her iÅŸlevin dışında bildirilmiÅŸdeÄŸiÅŸken-uzunluklu nesne `%D' ilklendirilmiÅŸ olmayabilirdeÄŸiÅŸken-uzunluklu nesne ilkdeÄŸerli olmayabilir`%T' türünden deÄŸiÅŸken-uzunluklu nesne ilklendirilmiÅŸ olmayabilirifadede vektör taÅŸmasıPC=%d de doÄŸrulama hatasıverify_flow_info baÅŸarısızverify_flow_info: %d. temel bloÄŸun ardıl kenarı bozukverify_flow_info: yinelenmiÅŸ kenar %i->%iverify_flow_info: ardcıl %i->%i için blok sayısı yanlışverify_flow_info: ardcıl %i->%i yanlışSanal dizi %1$s[%2$lu]: %5$s:%6$d: %4$s içindeki %3$lu öğesi sınırların dışındasanal taban `%T' belirsizlikten dolayı `%T' içinde eriÅŸilebilir deÄŸilsanal iÅŸlevler kardeÅŸ iÅŸlev olamazsanal sınıf olmayan iÅŸlev `%s'sanal dış öbek bildirimi'(' ve ')' arasında void ifadevoid deÄŸer yoksayılması gerekirken yoksayılmadıoynak yazmaç deÄŸiÅŸkenleri sizin istediÄŸiniz gibi çalışmazuyarı:uyarı: Uyarı: -save-temps belirtildiÄŸinden -pipe yoksayıldıUyarı: -time belirtildiÄŸinden -pipe yoksayıldıUyarı: son girdi dosyasından sonraki `-x %s' etkisizuyarı: zaten derlenmiÅŸ olan .class dosyaları -C ile yoksayıldıUyarı: spec'lerde %%[ iÅŸlemimi artık kullanılmıyor`%s' zayıf bildirimi 'public' olmalı`%s' zayıf bildirimi tanımından önce olmalı`%s' zayıf bildirimi desteklenmiyoryıkıcı gerekli`%D' türünün geniÅŸliÄŸini aşıyor`%s' in uzunluÄŸu türünü aşıyortamsayı sabitin geniÅŸliÄŸi -traditional ile deÄŸiÅŸirtamsayı sabitin uzunluÄŸu diÄŸer sistemlerde -traditional ile deÄŸiÅŸebilirbu baÄŸlamdawrite %ssabit nesne içine yazma (%d. arg)yük komutları yazılıyor. + + null gösterge vasıtasıyla yazma (%d. arg)ardcıl kenarda yanlış komut'%s' özelliÄŸi için belirtilen argüman sayısı hatalıyanlış sayıda ÅŸablon argümanı (%d yerine %d olmalıydı)mutlak deÄŸer için yanlış tür argümanıbit-tümler için yanlış tür argümanımantıksal çarpım için yanlış tür argümanıeksiltmede yanlış türde argümanarttırımda yanlış türde argümantekil tümleyen için yanlış tür argümanıtekil eksi iÅŸleminde yanlış tür argümanıtekil artı iÅŸleminde yanlış tür argümanı%3$s'e %2$ld bayt yazılması umulurken %1$ld bayt yazıldıxstormy16_print_operand: kod bilinmiyorek olarak ya -M ya da -MM belirtmelisiniz`%s' dizisi sıfır ya da negatif uzunluktasıfır boyutlu dizi için yer ayrılmazbit alanı `%D' için sıfır geniÅŸlikbit alanı `%s' için sıfır geniÅŸlik%s biçeminde sıfır uzunluksıfır uzunluklu biçem dizgesisıfır boyutlu dizi `%D' \ No newline at end of file diff -Nrc3pad gcc-3.0.4/gcc/po/tr.po gcc-3.1/gcc/po/tr.po *** gcc-3.0.4/gcc/po/tr.po Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/po/tr.po Fri May 10 14:51:34 2002 *************** *** 0 **** --- 1,22779 ---- + # Turkish translations for gcc messages. + # Copyright (C) 2002 Free Software Foundation, Inc. + # Nilgün Belma Bugüner , 2001, 2002. + # + msgid "" + msgstr "" + "Project-Id-Version: gcc 3.1-b20020415\n" + "POT-Creation-Date: 2002-04-23 12:53+0200\n" + "PO-Revision-Date: 2002-04-24 15:52+0300\n" + "Last-Translator: Nilgün Belma Bugüner \n" + "Language-Team: Turkish \n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" + "X-Generator: KBabel 0.9.6\n" + + #: attribs.c:314 + #, c-format + msgid "`%s' attribute directive ignored" + msgstr "`%s' özellik yönergesi yoksayıldı" + + #: attribs.c:322 + #, c-format + msgid "wrong number of arguments specified for `%s' attribute" + msgstr "'%s' özelliÄŸi için belirtilen argüman sayısı hatalı" + + #: attribs.c:339 + #, c-format + msgid "`%s' attribute does not apply to types" + msgstr "`%s' özelliÄŸi veri türlerine uygulanmaz" + + #: attribs.c:376 + #, c-format + msgid "`%s' attribute only applies to function types" + msgstr "`%s' özelliÄŸi sadece iÅŸlev türlere uygulanır" + + #: attribs.c:468 attribs.c:490 attribs.c:512 attribs.c:543 attribs.c:565 attribs.c:590 attribs.c:613 attribs.c:643 attribs.c:681 attribs.c:728 attribs.c:758 attribs.c:788 attribs.c:811 attribs.c:1057 attribs.c:1113 attribs.c:1169 attribs.c:1230 attribs.c:1256 attribs.c:1458 config/arm/arm.c:2007 config/arm/arm.c:2034 config/avr/avr.c:4683 config/h8300/h8300.c:3071 config/h8300/h8300.c:3096 config/i386/i386.c:1267 config/i386/winnt.c:74 + #, c-format + msgid "`%s' attribute ignored" + msgstr "`%s' özelliÄŸi yoksayıldı" + + #: attribs.c:844 + #, c-format + msgid "unknown machine mode `%s'" + msgstr "'%s makina kipi bilinmiyor" + + #: attribs.c:847 + #, c-format + msgid "no data type for mode `%s'" + msgstr "'%s' kipi için bir veri türü yok" + + #: attribs.c:880 + msgid "section attribute cannot be specified for local variables" + msgstr "bölge özelliÄŸi yerel deÄŸiÅŸkenler için belirtilmiÅŸ olamaz" + + #: attribs.c:891 + #, c-format + msgid "section of `%s' conflicts with previous declaration" + msgstr "`%s' bölgesi önceki bildirimle çeliÅŸiyor" + + #: attribs.c:900 + #, c-format + msgid "section attribute not allowed for `%s'" + msgstr "bölge özelliÄŸine `%s' için izin verilmez" + + #: attribs.c:907 + msgid "section attributes are not supported for this target" + msgstr "bölge özellikleri bu hedef için desteklenmiyor" + + #: attribs.c:949 + msgid "requested alignment is not a constant" + msgstr "istenen ayarlama bir sabit deÄŸil" + + #: attribs.c:954 + msgid "requested alignment is not a power of 2" + msgstr "istenen ayarlama 2 nin kuvveti deÄŸil" + + #: attribs.c:959 + msgid "requested alignment is too large" + msgstr "istenen ayarlama çok büyük" + + #: attribs.c:986 + #, c-format + msgid "alignment may not be specified for `%s'" + msgstr "hizalama `%s' için belirtilmiÅŸ olmayabilir" + + #: attribs.c:1031 + #, c-format + msgid "`%s' defined both normally and as an alias" + msgstr "`%s' hem normal hem de bir rumuz olarak tanımlanmış" + + #: attribs.c:1041 + msgid "alias arg not a string" + msgstr "rumuz argümanı bir dizge deÄŸil" + + #: attribs.c:1080 attribs.c:1136 + #, c-format + msgid "`%s' attribute applies only to functions" + msgstr "`%s' özelliÄŸi sadece iÅŸlevlere uygulanır" + + #: attribs.c:1087 attribs.c:1143 + #, c-format + msgid "can't set `%s' attribute after definition" + msgstr "`%s' özelliÄŸine tanımlandıktan sonra deÄŸer atanamaz" + + #: attribs.c:1227 + #, c-format + msgid "`%s' attribute ignored for `%s'" + msgstr "`%s' özelliÄŸi `%s' için yoksayıldı" + + #: attribs.c:1284 + #, c-format + msgid "invalid vector type for attribute `%s'" + msgstr "`%s' özelliÄŸi vektör tür geçersiz" + + #: attribs.c:1307 attribs.c:1312 + msgid "no vector mode with the size and type specified could be found" + msgstr "belirtilen tür ve boyutta vektör kipi yok" + + #: builtins.c:282 + msgid "offset outside bounds of constant string" + msgstr "göreli konum sabit dizgenin sınırlarının dışında" + + #: builtins.c:759 + msgid "second arg to `__builtin_prefetch' must be a constant" + msgstr "`__builtin_prefetch' için 2. argüman bir sabit olmalı" + + #: builtins.c:766 + msgid "invalid second arg to __builtin_prefetch; using zero" + msgstr "__builtin_prefetch için 2. argüman geçersiz; sıfır kullanılıyor" + + #: builtins.c:773 + msgid "third arg to `__builtin_prefetch' must be a constant" + msgstr "`__builtin_prefetch' için 3. argüman bir sabit olmalı" + + #: builtins.c:780 + msgid "invalid third arg to __builtin_prefetch; using zero" + msgstr "__builtin_prefetch için 3. argüman geçersiz; sıfır kullanılıyor" + + #. ??? We used to try and build up a call to the out of line function, + #. guessing about what registers needed saving etc. This became much + #. harder with __builtin_va_start, since we don't have a tree for a + #. call to __builtin_saveregs to fall back on. There was exactly one + #. port (i860) that used this code, and I'm unconvinced it could actually + #. handle the general case. So we no longer try to handle anything + #. weird and make the backend absorb the evil. + #: builtins.c:2760 + msgid "__builtin_saveregs not supported by this target" + msgstr "__builtin_saveregs bu hedef tarafından desteklenmiyor" + + #: builtins.c:2802 + msgid "argument of `__builtin_args_info' must be constant" + msgstr "`__builtin_args_info'nun argümanı bir sabit olmalıdır" + + #: builtins.c:2808 + msgid "argument of `__builtin_args_info' out of range" + msgstr "`__builtin_args_info'nun argümanı kapsamdışı" + + #: builtins.c:2814 + msgid "missing argument in `__builtin_args_info'" + msgstr "`__builtin_args_info'da argüman eksik" + + #: builtins.c:2846 + msgid "`va_start' used in function with fixed args" + msgstr "`va_start' iÅŸlev içinde sabit argümanlarla kullanılmış" + + #: builtins.c:2865 + msgid "second parameter of `va_start' not last named argument" + msgstr "`va_start'ın ikinci parametresi isimli son argüman deÄŸil" + + #. Evidently an out of date version of ; can't validate + #. va_start's second argument, but can still work as intended. + #: builtins.c:2870 + msgid "`__builtin_next_arg' called without an argument" + msgstr "`__builtin_next_arg' argümansız çaÄŸrılmış" + + #: builtins.c:2974 + msgid "too many arguments to function `va_start'" + msgstr "`va_start' iÅŸlevine çok fazla argüman verilmiÅŸ" + + #: builtins.c:3075 + msgid "first argument to `va_arg' not of type `va_list'" + msgstr "`va_arg'ın ilk argümanının türü `va_list' deÄŸil" + + #. Unfortunately, this is merely undefined, rather than a constraint + #. violation, so we cannot make this an error. If this call is never + #. executed, the program is still strictly conforming. + #: builtins.c:3106 + #, c-format + msgid "`%s' is promoted to `%s' when passed through `...'" + msgstr "`%s' `...' sayesinde aktarıldığında `%s'e yükseltilmiÅŸ" + + #: builtins.c:3111 + #, c-format + msgid "(so you should pass `%s' not `%s' to `va_arg')" + msgstr "(bu durumda `va_arg'a `%s' aktarılmalı, `%s' deÄŸil)" + + #: builtins.c:3242 + msgid "invalid arg to `__builtin_frame_address'" + msgstr "`__builtin_frame_address'e aktarılan argüman geçersiz" + + #: builtins.c:3244 + msgid "invalid arg to `__builtin_return_address'" + msgstr "`__builtin_return_address'e aktarılan argüman geçersiz" + + #: builtins.c:3258 + msgid "unsupported arg to `__builtin_frame_address'" + msgstr "`__builtin_frame_address'e aktarılan argüman desteklenmiyor" + + #: builtins.c:3260 + msgid "unsupported arg to `__builtin_return_address'" + msgstr "`__builtin_return_address'e aktarılan argüman desteklenmiyor" + + #: builtins.c:3428 + msgid "second arg to `__builtin_expect' must be a constant" + msgstr "`__builtin_expect'e aktarılan ikinci argüman bir sabit olmalı" + + #: builtins.c:3909 + msgid "__builtin_longjmp second argument must be 1" + msgstr "__builtin_longjmp'ın ikinci argümanı 1 olmalı" + + #. just do library call, if unknown builtin + #: builtins.c:3982 c-common.c:3811 + #, c-format + msgid "built-in function `%s' not currently supported" + msgstr "yerleÅŸik iÅŸlev `%s' ÅŸu an desteklenmiyor" + + #: c-common.c:550 + #, c-format + msgid "`%s' is not defined outside of function scope" + msgstr "`%s' iÅŸlev baÄŸlamının dışında atanmamış" + + #: c-common.c:590 + msgid "concatenation of string literals with __FUNCTION__ is deprecated. This feature will be removed in future" + msgstr "__FUNCTION__ ile dizge sabitlerin birleÅŸtirilmesi yakında kullanımdan kaldırılacak" + + #: c-common.c:659 + #, c-format + msgid "string length `%d' is greater than the length `%d' ISO C%d compilers are required to support" + msgstr "dizge uzunluÄŸu `%1$d' ISO C%3$d derleyiclerin desteklediÄŸi uzunluk %2$d den büyük" + + #: c-common.c:708 + msgid "overflow in constant expression" + msgstr "sabit ifadesinde taÅŸma" + + #: c-common.c:729 + msgid "integer overflow in expression" + msgstr "ifadede tamsayı taÅŸması" + + #: c-common.c:738 + msgid "floating point overflow in expression" + msgstr "ifadede gerçel sayı taÅŸması" + + #: c-common.c:744 + msgid "vector overflow in expression" + msgstr "ifadede vektör taÅŸması" + + #. This detects cases like converting -129 or 256 to unsigned char. + #: c-common.c:765 + msgid "large integer implicitly truncated to unsigned type" + msgstr "büyük tamsayı örtük olarak unsigned türe indirgendi" + + #: c-common.c:767 + msgid "negative integer implicitly converted to unsigned type" + msgstr "negatif tamsayı örtük olarak unsigned türe dönüştürüldü" + + #: c-common.c:814 + msgid "overflow in implicit constant conversion" + msgstr "örtük sabit dönüşümünde taÅŸma" + + #: c-common.c:962 + #, c-format + msgid "operation on `%s' may be undefined" + msgstr "`%s' üstündeki iÅŸlem tanımsız olabilir" + + #: c-common.c:1253 + msgid "expression statement has incomplete type" + msgstr "ifade deyimi tamamlanmamış tür içeriyor" + + #: c-common.c:1286 + msgid "case label does not reduce to an integer constant" + msgstr "case etiketi bir tamsayı sabite indirgenmez" + + #: c-common.c:1586 + msgid "invalid truth-value expression" + msgstr "doÄŸruluk-deÄŸeri ifadesi geçersiz" + + #: c-common.c:1637 + #, c-format + msgid "invalid operands to binary %s" + msgstr "iki terimli %s için terimler geçersiz" + + #: c-common.c:1872 c-common.c:1881 + msgid "comparison is always false due to limited range of data type" + msgstr "veri türünün kapsadığı sınırlardan dolayı karşılaÅŸtırma sonucu daima yanlıştır" + + #: c-common.c:1874 c-common.c:1883 + msgid "comparison is always true due to limited range of data type" + msgstr "veri türünün kapsadığı sınırlardan dolayı karşılaÅŸtırma sonucu daima doÄŸrudur" + + #: c-common.c:1949 + msgid "comparison of unsigned expression >= 0 is always true" + msgstr "unsigned ifade >=0 daima doÄŸrudur" + + #: c-common.c:1958 + msgid "comparison of unsigned expression < 0 is always false" + msgstr "unsigned ifade < 0 daima yanlıştır" + + #: c-common.c:2005 + msgid "pointer of type `void *' used in arithmetic" + msgstr "aritmetikte `void *' türünde gösterge kullanılmış" + + #: c-common.c:2011 + msgid "pointer to a function used in arithmetic" + msgstr "aritmetikte iÅŸlev göstergesi kullanılmış" + + #: c-common.c:2017 + msgid "pointer to member function used in arithmetic" + msgstr "aritmetikte üye iÅŸlev göstergesi kullanılmış" + + #: c-common.c:2023 + msgid "pointer to a member used in arithmetic" + msgstr "aritmetikte üye göstergesi kullanılmış" + + #: c-common.c:2110 f/com.c:14823 + msgid "struct type value used where scalar is required" + msgstr "sayısal deÄŸer gerekirken yapı türü deÄŸer kullanılmış" + + #: c-common.c:2114 f/com.c:14827 + msgid "union type value used where scalar is required" + msgstr "sayısal deÄŸer gerekirken birleÅŸik yapı türü deÄŸer kullanılmış" + + #: c-common.c:2118 f/com.c:14831 + msgid "array type value used where scalar is required" + msgstr "sayısal deÄŸer gerekirken dizi türü deÄŸer kullanılmış" + + #: c-common.c:2233 f/com.c:14957 + msgid "suggest parentheses around assignment used as truth value" + msgstr "atamayı çevrelemesi önerilen parantezler doÄŸruluk deÄŸeri olarak kullanıldı" + + #: c-common.c:2277 c-common.c:2309 + msgid "invalid use of `restrict'" + msgstr "`restrict' kullanımı geçersiz" + + #: c-common.c:2425 + msgid "__alignof__ applied to an incomplete type" + msgstr "__alignof__ bir tamamlanmamış türe uygulanmış" + + #: c-common.c:2451 + msgid "`__alignof' applied to a bit-field" + msgstr "`__alignof' bir bit-alanına uygulanmış" + + #: c-common.c:2893 + #, c-format + msgid "cannot disable built-in function `%s'" + msgstr "`%s' yerleÅŸik iÅŸlev olduÄŸundan iptal edilemez" + + #: c-common.c:3174 c-typeck.c:1781 + #, c-format + msgid "too few arguments to function `%s'" + msgstr "`%s' iÅŸlevi için argümanlar çok az" + + #: c-common.c:3180 c-typeck.c:1634 + #, c-format + msgid "too many arguments to function `%s'" + msgstr "`%s' iÅŸlevi için argümanlar çok fazla" + + #: c-common.c:3369 + msgid "pointers are not permitted as case values" + msgstr "case deÄŸeri olarak göstergeler kullanılamaz" + + #: c-common.c:3375 + msgid "ISO C++ forbids range expressions in switch statements" + msgstr "ISO C++ switch deyimlerinde aralık ifadelerine izin vermez" + + #: c-common.c:3377 + msgid "ISO C forbids range expressions in switch statements" + msgstr "ISO C switch deyimlerinde aralık ifadelerine izin vermez" + + #: c-common.c:3407 + msgid "empty range specified" + msgstr "boÅŸ aralık belirtilmiÅŸ" + + #: c-common.c:3458 + msgid "duplicate (or overlapping) case value" + msgstr "yinelenmiÅŸ (ya da birbirini kapsayan) case deÄŸerleri" + + #: c-common.c:3460 + msgid "this is the first entry overlapping that value" + msgstr "bu, aynı deÄŸeri kapsayan ilk girdi" + + #: c-common.c:3464 + msgid "duplicate case value" + msgstr "yinelenmiÅŸ case deÄŸeri" + + #: c-common.c:3465 + msgid "previously used here" + msgstr "önce burada kullanılmış" + + #: c-common.c:3469 + msgid "multiple default labels in one switch" + msgstr "tek switch'te çok sayıda öntanımlı etiket" + + #: c-common.c:3470 + msgid "this is the first default label" + msgstr "bu, ilk öntanımlı etiket" + + #: c-common.c:3498 + msgid "ISO C++ forbids taking the address of a label" + msgstr "ISO C++ da bir etiket adresinin alınmasına izin verilmez" + + #: c-common.c:3500 + msgid "ISO C forbids taking the address of a label" + msgstr "ISO C de bir etiket adresinin alınmasına izin verilmez" + + #: c-common.c:4148 + msgid "-Wformat-y2k ignored without -Wformat" + msgstr "-Wformat-y2k -Wformat'sız yoksayıldı" + + #: c-common.c:4150 + msgid "-Wformat-extra-args ignored without -Wformat" + msgstr "-Wformat-extra-args -Wformat'sız yoksayıldı" + + #: c-common.c:4152 + msgid "-Wformat-nonliteral ignored without -Wformat" + msgstr "-Wformat-nonliteral -Wformat'sız yoksayıldı" + + #: c-common.c:4154 + msgid "-Wformat-security ignored without -Wformat" + msgstr "-Wformat-security -Wformat'sız yoksayıldı" + + #: c-common.c:4156 + msgid "-Wmissing-format-attribute ignored without -Wformat" + msgstr "-Wmissing-format-attribute -Wformat'sız yoksayıldı" + + #: c-common.c:4247 + #, c-format + msgid "declaration of `%s' shadows %s" + msgstr "`%s' bildirimi %s'i gölgeliyor" + + #: c-convert.c:78 c-typeck.c:1035 c-typeck.c:4047 cp/typeck.c:1673 cp/typeck.c:6165 + msgid "void value not ignored as it ought to be" + msgstr "void deÄŸer yoksayılması gerekirken yoksayılmadı" + + #: c-convert.c:110 java/typeck.c:150 + msgid "conversion to non-scalar type requested" + msgstr "sayısal olmayan türe dönüşüm istendi" + + #: c-decl.c:476 + msgid "-traditional is deprecated and may be removed" + msgstr "-traditional kullanımdan kalkacak ve kalkmış da olabilir" + + #: c-decl.c:566 + #, c-format + msgid "unknown C standard `%s'" + msgstr "`%s' diye bir C standardı bilinmiyor" + + #: c-decl.c:848 + #, c-format + msgid "array `%s' assumed to have one element" + msgstr "`%s' dizisi tek elemanlı kabul edildi" + + #: c-decl.c:1024 + #, c-format + msgid "`struct %s' incomplete in scope ending here" + msgstr "kapsam sonuna gelindiÄŸinde `struct %s' hala eksik" + + #: c-decl.c:1027 + #, c-format + msgid "`union %s' incomplete in scope ending here" + msgstr "kapsam sonuna gelindiÄŸinde `union %s' hala eksik" + + #: c-decl.c:1030 + #, c-format + msgid "`enum %s' incomplete in scope ending here" + msgstr "kapsam sonuna gelindiÄŸinde `enum %s' hala eksik" + + #: c-decl.c:1144 c-decl.c:1285 java/decl.c:1377 + #, c-format + msgid "label `%s' used but not defined" + msgstr "`%s' etiketi tanımsız kullanılmış" + + #: c-decl.c:1150 c-decl.c:1292 java/decl.c:1383 + #, c-format + msgid "label `%s' defined but not used" + msgstr "`%s' etiketi tanımlı ama kullanılmamış" + + #: c-decl.c:1409 cp/decl.c:3128 + #, c-format + msgid "function `%s' redeclared as inline" + msgstr "iÅŸlev `%s' 'inline' olarak yeniden bildirilmiÅŸ" + + #: c-decl.c:1411 cp/decl.c:3130 + #, c-format + msgid "previous declaration of function `%s' with attribute noinline" + msgstr "`%s' iÅŸlevinin önceki bildirimi 'inline' deÄŸil" + + #: c-decl.c:1418 cp/decl.c:3137 + #, c-format + msgid "function `%s' redeclared with attribute noinline" + msgstr "`%s' iÅŸlevinin bildirimi 'inline' deÄŸil" + + #: c-decl.c:1420 cp/decl.c:3139 + #, c-format + msgid "previous declaration of function `%s' was inline" + msgstr "`%s' iÅŸlevinin önceki bildirimi 'inline' idi" + + #: c-decl.c:1449 c-decl.c:1502 + #, c-format + msgid "shadowing built-in function `%s'" + msgstr "yerleÅŸik `%s' iÅŸlevinin gölgelenmesi" + + #: c-decl.c:1451 + #, c-format + msgid "shadowing library function `%s'" + msgstr "kitaplık iÅŸlevi `%s'in gölgelenmesi" + + #: c-decl.c:1457 + #, c-format + msgid "library function `%s' declared as non-function" + msgstr "kitaplık iÅŸlevi `%s' iÅŸlev olarak bildirilmemiÅŸ" + + #: c-decl.c:1461 c-decl.c:1464 + #, c-format + msgid "built-in function `%s' declared as non-function" + msgstr "yerleÅŸik iÅŸlev `%s' iÅŸlev olarak bildirilmemiÅŸ" + + #: c-decl.c:1468 objc/objc-act.c:2334 objc/objc-act.c:6036 + #, c-format + msgid "`%s' redeclared as different kind of symbol" + msgstr "`%s' farklı bir sembol çeÅŸidi olarak tekrar bildirilmiÅŸ" + + #: c-decl.c:1469 c-decl.c:1667 c-decl.c:1817 objc/objc-act.c:2336 objc/objc-act.c:6038 objc/objc-act.c:6093 + #, c-format + msgid "previous declaration of `%s'" + msgstr "`%s'in önceki bildirimi" + + #. If types don't match for a built-in, throw away the built-in. + #: c-decl.c:1571 + #, c-format + msgid "conflicting types for built-in function `%s'" + msgstr "yerleÅŸik iÅŸlev `%s' için tür çeliÅŸkisi" + + #: c-decl.c:1614 c-decl.c:1633 + #, c-format + msgid "conflicting types for `%s'" + msgstr "`%s' için tür çeliÅŸkisi" + + #: c-decl.c:1656 + msgid "a parameter list with an ellipsis can't match an empty parameter name list declaration" + msgstr "Üç noktalı bir parametre listesi bir boÅŸ parametre isim listesi bildirimi ile eÅŸleÅŸemez" + + #: c-decl.c:1662 + msgid "an argument type that has a default promotion can't match an empty parameter name list declaration" + msgstr "Bir öntanımlı yükseltme içeren bir argüman türü, bir boÅŸ parametre isim listesi bildirimi ile eÅŸleÅŸemez" + + #: c-decl.c:1677 c-decl.c:1700 + #, c-format + msgid "redefinition of `%s'" + msgstr "`%s'in yeniden tanımlanması" + + #: c-decl.c:1680 + #, c-format + msgid "redeclaration of `%s'" + msgstr "`%s'in yeniden bildirimi" + + #: c-decl.c:1683 + #, c-format + msgid "conflicting declarations of `%s'" + msgstr "`%s' bildirimlerinde çeliÅŸki" + + #: c-decl.c:1727 + #, c-format + msgid "prototype for `%s' follows" + msgstr "`%s' için prototip izleniyor" + + #: c-decl.c:1728 c-decl.c:1736 c-decl.c:1752 + msgid "non-prototype definition here" + msgstr "buradaki tanımlama prototip deÄŸil" + + #: c-decl.c:1735 + #, c-format + msgid "prototype for `%s' follows and number of arguments doesn't match" + msgstr "`%s' için prototip izleniyor ve argüman sayısı eÅŸleÅŸmiyor" + + #: c-decl.c:1750 + #, c-format + msgid "prototype for `%s' follows and argument %d doesn't match" + msgstr "`%s' için prototip izleniyor ve %d. argüman eÅŸleÅŸmiyor" + + #: c-decl.c:1768 + #, c-format + msgid "`%s' declared inline after being called" + msgstr "`%s' çaÄŸrıldıktan sonra `inline' bildirilmiÅŸ" + + #: c-decl.c:1774 + #, c-format + msgid "`%s' declared inline after its definition" + msgstr "`%s' tanımlandıktan sonra `inline' bildirilmiÅŸ" + + #: c-decl.c:1781 + #, c-format + msgid "static declaration for `%s' follows non-static" + msgstr "`%s' için 'static' bildirimi statik olmayan izliyor" + + #: c-decl.c:1789 + #, c-format + msgid "non-static declaration for `%s' follows static" + msgstr "`%s' için 'static' olmayan bildirimi statik izliyor" + + #: c-decl.c:1796 + #, c-format + msgid "const declaration for `%s' follows non-const" + msgstr "`%s' için 'const' bildirimi sabit olmayan izliyor" + + #: c-decl.c:1803 + #, c-format + msgid "type qualifiers for `%s' conflict with previous decl" + msgstr "`%s' için tür niteleyicileri önceki bildirimle çeliÅŸiyor" + + #: c-decl.c:1816 + #, c-format + msgid "redundant redeclaration of `%s' in same scope" + msgstr "`%s'in aynı alandaki anlamsız yeniden bildirimi" + + #: c-decl.c:2120 java/decl.c:1076 + #, c-format + msgid "declaration of `%s' shadows a parameter" + msgstr "`%s' bildirimi bir parametreyi gölgeliyor" + + #: c-decl.c:2123 java/decl.c:1079 + #, c-format + msgid "declaration of `%s' shadows a symbol from the parameter list" + msgstr "`%s' bildirimi parametre listesinden bir sembolü gölgeliyor" + + #: c-decl.c:2144 cp/decl.c:4236 + msgid "a parameter" + msgstr "bir parametre" + + #: c-decl.c:2146 cp/decl.c:4253 + msgid "a previous local" + msgstr "önceki yerel" + + #. XXX shadow warnings in outer-more namespaces + #: c-decl.c:2150 cp/decl.c:4257 + msgid "a global declaration" + msgstr "bir genel bildirim" + + #: c-decl.c:2194 + #, c-format + msgid "nested extern declaration of `%s'" + msgstr "`%s'in iç içe 'extern' bildirimi" + + #: c-decl.c:2216 java/decl.c:1029 + #, c-format + msgid "`%s' used prior to declaration" + msgstr "`%s' bildirim öncesi kullanılmış" + + #: c-decl.c:2231 c-decl.c:2446 + #, c-format + msgid "`%s' was declared implicitly `extern' and later `static'" + msgstr "`%s' önce örtük olarak `extern' sonra da `static' bildirilmiÅŸ" + + #: c-decl.c:2341 cp/decl.c:4095 + msgid "type mismatch with previous external decl" + msgstr "tür önceki external bildirimle çatışıyor" + + #: c-decl.c:2342 + #, c-format + msgid "previous external decl of `%s'" + msgstr "`%s'in önceki 'external' bildirimi" + + #: c-decl.c:2355 + msgid "type mismatch with previous implicit declaration" + msgstr "tür önceki örtük bildirimle çatışıyor" + + #: c-decl.c:2357 + #, c-format + msgid "previous implicit declaration of `%s'" + msgstr "`%s'in önceki örtük bildirimi" + + #: c-decl.c:2374 + #, c-format + msgid "type of external `%s' is not global" + msgstr "external `%s' türü genel deÄŸil" + + #: c-decl.c:2425 + #, c-format + msgid "`%s' was previously implicitly declared to return `int'" + msgstr "`%s' dönen `int' ile önceden örtük bildirilmiÅŸ" + + #: c-decl.c:2450 + #, c-format + msgid "`%s' was declared `extern' and later `static'" + msgstr "`%s' önce `extern' sonra da `static' bildirilmiÅŸ" + + #: c-decl.c:2474 + #, c-format + msgid "extern declaration of `%s' doesn't match global one" + msgstr "`%s'in extern bildirimi genel olanıyla uyuÅŸmuyor" + + #: c-decl.c:2516 + #, c-format + msgid "`%s' locally external but globally static" + msgstr "`%s' yerel olarak external ama genel olarak static" + + #: c-decl.c:2638 + #, c-format + msgid "function `%s' was previously declared within a block" + msgstr "`%s' iÅŸlevi evvelce bir blok içinde bildirilmiÅŸ" + + #: c-decl.c:2658 c-decl.c:2660 + #, c-format + msgid "implicit declaration of function `%s'" + msgstr "`%s' iÅŸlevinin örtük bildirimi" + + #: c-decl.c:2748 + #, c-format + msgid "label %s referenced outside of any function" + msgstr "%s etiketi iÅŸlev dışı referanslı" + + #: c-decl.c:2805 + #, c-format + msgid "duplicate label declaration `%s'" + msgstr "`%s' etiketi birden fazla bildirilmiÅŸ" + + #: c-decl.c:2808 + msgid "this is a previous declaration" + msgstr "bu, önce bildirimdir" + + #: c-decl.c:3320 + msgid "unnamed struct/union that defines no instances" + msgstr "ilk tanımı olmayan adsız struct/union" + + #: c-decl.c:3339 + msgid "useless keyword or type name in empty declaration" + msgstr "boÅŸ bildirimde kullanışsız tür ismi ya da anahtar sözcük" + + #: c-decl.c:3346 + msgid "two types specified in one empty declaration" + msgstr "bir boÅŸ bildirimde iki veri türü belirtilmiÅŸ" + + #: c-decl.c:3351 c-parse.y:725 c-parse.y:727 parse.y:742 parse.y:1827 objc-parse.y:761 objc-parse.y:763 objc-parse.y:2997 + msgid "empty declaration" + msgstr "boÅŸ bildirim" + + #: c-decl.c:3381 + msgid "ISO C89 does not support `static' or type qualifiers in parameter array declarators" + msgstr "ISO C89, parametre dizisi bildirimlerinde `static' ve tür niteleyicileri desteklemez" + + #: c-decl.c:3383 + msgid "ISO C89 does not support `[*]' array declarators" + msgstr "ISO C89 dizi bildirimlerinde `[*]' desteklemez" + + #: c-decl.c:3386 + msgid "GCC does not yet properly implement `[*]' array declarators" + msgstr "GCC `[*]' dizi bildirimlerini henüz tam desteklemiyor" + + #: c-decl.c:3405 + msgid "static or type qualifiers in abstract declarator" + msgstr "kuramsal bildirimde 'static' ya da tür niteleyiciler" + + #: c-decl.c:3479 + #, c-format + msgid "`%s' is usually a function" + msgstr "`%s' çogu kez bir iÅŸlevdir" + + #: c-decl.c:3493 + #, c-format + msgid "typedef `%s' is initialized" + msgstr "typedef `%s' ilkdeÄŸerli" + + #: c-decl.c:3500 + #, c-format + msgid "function `%s' is initialized like a variable" + msgstr "`%s' iÅŸlevi bir deÄŸiÅŸken gibi ilkdeÄŸerli" + + #. DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE. + #: c-decl.c:3507 + #, c-format + msgid "parameter `%s' is initialized" + msgstr "`%s' parametresi ilkdeÄŸerli" + + #: c-decl.c:3527 c-typeck.c:4841 + msgid "variable-sized object may not be initialized" + msgstr "deÄŸiÅŸken-uzunluklu nesne ilkdeÄŸerli olmayabilir" + + #: c-decl.c:3533 + #, c-format + msgid "variable `%s' has initializer but incomplete type" + msgstr "`%s' deÄŸiÅŸkeni, veri türü tamamlanmayan bir ilkdeÄŸere sahip" + + #: c-decl.c:3539 + #, c-format + msgid "elements of array `%s' have incomplete type" + msgstr "`%s' dizisinin elemanları tamamlanmayan veri türüne sahip" + + #: c-decl.c:3552 + #, c-format + msgid "declaration of `%s' has `extern' and is initialized" + msgstr "`%s' bildirimi hem `extern' hem de ilkdeÄŸerli" + + #: c-decl.c:3591 c-decl.c:6246 cp/decl.c:7368 cp/decl.c:13623 + #, c-format + msgid "inline function `%s' given attribute noinline" + msgstr "özümleme iÅŸlevi `%s' özümlenmeyen özellikle verilmiÅŸ" + + #: c-decl.c:3674 + #, c-format + msgid "initializer fails to determine size of `%s'" + msgstr "`%s'in uzunluÄŸunu belirlemede ilkdeÄŸer baÅŸarısız" + + #: c-decl.c:3679 + #, c-format + msgid "array size missing in `%s'" + msgstr "`%s' içinde dizi boyu eksik" + + #: c-decl.c:3695 + #, c-format + msgid "zero or negative size array `%s'" + msgstr "`%s' dizisi sıfır ya da negatif uzunlukta" + + #: c-decl.c:3723 + #, c-format + msgid "storage size of `%s' isn't known" + msgstr "`%s'in saklama uzunluÄŸu bilinmiyor" + + #: c-decl.c:3733 + #, c-format + msgid "storage size of `%s' isn't constant" + msgstr "`%s'in saklama uzunluÄŸu sabit deÄŸil" + + #: c-decl.c:3792 + #, c-format + msgid "ignoring asm-specifier for non-static local variable `%s'" + msgstr "static olmayan yerel deÄŸiÅŸken `%s' için asm-belirteci yoksayılıyor" + + #: c-decl.c:3867 + #, c-format + msgid "ISO C forbids parameter `%s' shadowing typedef" + msgstr "ISO C 'typedef' gölgeleyen `%s' parametresine izin vermez" + + #: c-decl.c:4171 cp/decl.c:10171 + msgid "`long long long' is too long for GCC" + msgstr "`long long long' GCC için çok uzun" + + #: c-decl.c:4176 + msgid "ISO C89 does not support `long long'" + msgstr "ISO C89 `long long'u desteklemez" + + #: c-decl.c:4181 cp/decl.c:10176 + #, c-format + msgid "duplicate `%s'" + msgstr "`%s' yinelenmiÅŸ" + + #: c-decl.c:4187 cp/decl.c:10200 + #, c-format + msgid "two or more data types in declaration of `%s'" + msgstr "`%s'in bildiriminde iki veya daha fazla veri türü" + + #: c-decl.c:4207 cp/decl.c:10205 + #, c-format + msgid "`%s' fails to be a typedef or built in type" + msgstr "`%s' bir typedef veya yerleÅŸik veri türü olarak hatalı" + + #: c-decl.c:4246 + #, c-format + msgid "type defaults to `int' in declaration of `%s'" + msgstr "`%s' bildiriminde tür `int'e öntanımlı" + + #: c-decl.c:4275 + #, c-format + msgid "both long and short specified for `%s'" + msgstr "`%s' için hem long hem de short belirtilmiÅŸ" + + #: c-decl.c:4279 cp/decl.c:10320 + #, c-format + msgid "long or short specified with char for `%s'" + msgstr "`%s' için long veya short ile char türü deÄŸer belirtilmiÅŸ" + + #: c-decl.c:4286 cp/decl.c:10324 + #, c-format + msgid "long or short specified with floating type for `%s'" + msgstr "`%s' için long veya short ile gerçel sayı deÄŸer belirtilmiÅŸ" + + #: c-decl.c:4289 + msgid "the only valid combination is `long double'" + msgstr "tek geçerli bileÅŸim long double'dır" + + #: c-decl.c:4295 + #, c-format + msgid "both signed and unsigned specified for `%s'" + msgstr "`%s' için hem signed hem de unsigned belirtilmiÅŸ" + + #: c-decl.c:4297 cp/decl.c:10313 + #, c-format + msgid "long, short, signed or unsigned invalid for `%s'" + msgstr "`%s' için long, short, signed ya da unsigned geçersiz" + + #: c-decl.c:4303 cp/decl.c:10333 + #, c-format + msgid "long, short, signed or unsigned used invalidly for `%s'" + msgstr "`%s' için long, short, signed ya da unsigned geçersizce kullanılmış" + + #: c-decl.c:4322 cp/decl.c:10354 + #, c-format + msgid "complex invalid for `%s'" + msgstr "`%s' için karmaşık geçersizlik" + + #: c-decl.c:4367 + msgid "ISO C89 does not support complex types" + msgstr "ISO C89 karmaşık türleri desteklemez" + + #: c-decl.c:4379 + msgid "ISO C does not support plain `complex' meaning `double complex'" + msgstr "ISO C salt `complex'i `double complex' anlamında desteklemez" + + #: c-decl.c:4385 c-decl.c:4397 + msgid "ISO C does not support complex integer types" + msgstr "ISO C karmaşık tamsayı türleri desteklemez" + + #: c-decl.c:4412 c-decl.c:4851 cp/decl.c:10969 + msgid "duplicate `const'" + msgstr "`const' yinelenmiÅŸ" + + #: c-decl.c:4414 c-decl.c:4855 cp/decl.c:10973 + msgid "duplicate `restrict'" + msgstr "`restrict' yinelenmiÅŸ" + + #: c-decl.c:4416 c-decl.c:4853 cp/decl.c:10971 + msgid "duplicate `volatile'" + msgstr "`volatile' yinelenmiÅŸ" + + #: c-decl.c:4438 cp/decl.c:10509 + #, c-format + msgid "multiple storage classes in declaration of `%s'" + msgstr "`%s' bildirimi içinde çok sayıda saklama sınıfı" + + #: c-decl.c:4447 + msgid "function definition declared `auto'" + msgstr "iÅŸlev tanımı `auto' olarak bildirildi" + + #: c-decl.c:4449 + msgid "function definition declared `register'" + msgstr "iÅŸlev tanımı `register' olarak bildirildi" + + #: c-decl.c:4451 + msgid "function definition declared `typedef'" + msgstr "iÅŸlev tanımı `typedef' olarak bildirildi" + + #: c-decl.c:4464 + #, c-format + msgid "storage class specified for structure field `%s'" + msgstr "`%s' yapı alan için saklama sınıfı belirtildi" + + #: c-decl.c:4468 cp/decl.c:10556 + #, c-format + msgid "storage class specified for parameter `%s'" + msgstr "`%s' parametresi için saklama sınıfı belirtildi" + + #: c-decl.c:4471 cp/decl.c:10558 + msgid "storage class specified for typename" + msgstr "veri türü ismi için saklama sınıfı belirtildi" + + #: c-decl.c:4483 cp/decl.c:10572 + #, c-format + msgid "`%s' initialized and declared `extern'" + msgstr "`%s' ilklendirildikten sonra `extern' olarak bildirilmiÅŸ" + + #: c-decl.c:4485 cp/decl.c:10575 + #, c-format + msgid "`%s' has both `extern' and initializer" + msgstr "`%s' hem `extern' olarak bildirilmiÅŸ hem de öndeÄŸer almış" + + #: c-decl.c:4489 cp/decl.c:10579 + #, c-format + msgid "nested function `%s' declared `extern'" + msgstr "yuvalanmış iÅŸlev `%s' `extern' olarak bildirilmiÅŸ" + + #: c-decl.c:4492 cp/decl.c:10583 + #, c-format + msgid "top-level declaration of `%s' specifies `auto'" + msgstr "`%s' için tepe-seviye bildirimi `auto' belirtiyor" + + #. Only the innermost declarator (making a parameter be of + #. array type which is converted to pointer type) + #. may have static or type qualifiers. + #: c-decl.c:4527 c-decl.c:4716 + msgid "static or type qualifiers in non-parameter array declarator" + msgstr "parametresiz dizi bildirimi içinde 'static' veya tür niteleyiciler" + + #: c-decl.c:4571 + #, c-format + msgid "declaration of `%s' as array of voids" + msgstr "`%s' void'ler dizisi olarak bildirilmiÅŸ" + + #: c-decl.c:4577 + #, c-format + msgid "declaration of `%s' as array of functions" + msgstr "`%s' iÅŸlevler dizisi olarak bildirilmiÅŸ" + + #: c-decl.c:4598 + #, c-format + msgid "size of array `%s' has non-integer type" + msgstr "`%s' dizisinin boyutu tamsayı deÄŸil" + + #: c-decl.c:4603 + #, c-format + msgid "ISO C forbids zero-size array `%s'" + msgstr "ISO C sıfır boyutlu `%s' dizisini yasaklar" + + #: c-decl.c:4610 + #, c-format + msgid "size of array `%s' is negative" + msgstr "`%s' dizisinin boyutu negatif" + + #: c-decl.c:4623 + #, c-format + msgid "ISO C89 forbids array `%s' whose size can't be evaluated" + msgstr "ISO C89 deÄŸerlendirilemeyen boyutlu `%s' dizisini yasaklar" + + #: c-decl.c:4626 + #, c-format + msgid "ISO C89 forbids variable-size array `%s'" + msgstr "ISO C89 deÄŸiÅŸken boyutlu `%s' dizisini yasaklar" + + #: c-decl.c:4656 c-decl.c:4877 cp/decl.c:11179 + #, c-format + msgid "size of array `%s' is too large" + msgstr "`%s' dizisinin boyutu çok büyük" + + #: c-decl.c:4673 + msgid "ISO C89 does not support flexible array members" + msgstr "ISO C89 esnek dizi üyelerini desteklemez" + + #: c-decl.c:4683 + msgid "array type has incomplete element type" + msgstr "dizi türü içi boÅŸ öğe türü içeriyor" + + #: c-decl.c:4690 c-decl.c:4927 + msgid "ISO C forbids const or volatile function types" + msgstr "ISO C 'const' ya da 'volatile' iÅŸlev türlerini yasaklar" + + #: c-decl.c:4736 cp/decl.c:10720 + #, c-format + msgid "`%s' declared as function returning a function" + msgstr "`%s' bir iÅŸlevle sonuçlanan bir iÅŸlev olarak bildirilmiÅŸ" + + #: c-decl.c:4741 cp/decl.c:10725 + #, c-format + msgid "`%s' declared as function returning an array" + msgstr "`%s' bir dizi ile sonuçlanan bir iÅŸlev olarak bildirilmiÅŸ" + + #: c-decl.c:4776 + msgid "ISO C forbids qualified void function return type" + msgstr "ISO C nitelemeli 'void' iÅŸlev dönüş türünü yasaklar" + + #: c-decl.c:4780 + msgid "type qualifiers ignored on function return type" + msgstr "tür niteleyicileri iÅŸlev dönen türünde yok sayıldı" + + #: c-decl.c:4809 c-decl.c:4892 c-decl.c:5016 c-decl.c:5110 + msgid "ISO C forbids qualified function types" + msgstr "ISO C nitelemeli iÅŸlev türlerini yasaklar" + + #: c-decl.c:4849 cp/decl.c:10965 + msgid "invalid type modifier within pointer declarator" + msgstr "gösterge bildirgeci içinde geçersiz tür deÄŸiÅŸtirici" + + #: c-decl.c:4947 cp/decl.c:11457 + #, c-format + msgid "variable or field `%s' declared void" + msgstr "`%s' deÄŸiÅŸkeni ya da alanı void olarak bildirilmiÅŸ" + + #: c-decl.c:4980 + msgid "attributes in parameter array declarator ignored" + msgstr "parametre dizisi bildirimindeki özellikler yoksayıldı" + + #: c-decl.c:5005 + msgid "invalid type modifier within array declarator" + msgstr "dizi bildirimi içinde geçersiz tür deÄŸiÅŸtirici" + + #: c-decl.c:5054 + #, c-format + msgid "field `%s' declared as a function" + msgstr "`%s' alanı bir iÅŸlev olarak bildirilmiÅŸ" + + #: c-decl.c:5060 + #, c-format + msgid "field `%s' has incomplete type" + msgstr "`%s' alanı tamamlanmamış türde" + + #: c-decl.c:5092 c-decl.c:5094 c-decl.c:5101 + #, c-format + msgid "invalid storage class for function `%s'" + msgstr "`%s' iÅŸlevi için geçersiz saklama sınıfı" + + #: c-decl.c:5116 + msgid "`noreturn' function returns non-void value" + msgstr "`noreturn' iÅŸlevinin sonucu void deÄŸil" + + #: c-decl.c:5131 + msgid "cannot inline function `main'" + msgstr "`main' özümlenen iÅŸlev olamaz" + + #: c-decl.c:5184 + #, c-format + msgid "variable `%s' declared `inline'" + msgstr "deÄŸiÅŸken `%s' `inline' bildirilmiÅŸ" + + #: c-decl.c:5257 c-decl.c:6298 + msgid "function declaration isn't a prototype" + msgstr "iÅŸlev bildirimi bir prototip deÄŸil" + + #: c-decl.c:5263 + msgid "parameter names (without types) in function declaration" + msgstr "iÅŸlev bildiriminde (türleri belirtmeksizin) parametre isimleri" + + #: c-decl.c:5295 c-decl.c:6689 + #, c-format + msgid "parameter `%s' has incomplete type" + msgstr "`%s' parametresi tamamlanmamış türde" + + #: c-decl.c:5298 + msgid "parameter has incomplete type" + msgstr "parametre tamamlanmamış türde" + + #: c-decl.c:5319 + #, c-format + msgid "parameter `%s' points to incomplete type" + msgstr "parametre `%s' içi boÅŸ türü gösteriyor" + + #: c-decl.c:5322 + msgid "parameter points to incomplete type" + msgstr "parametre içi boÅŸ türü gösteriyor" + + #: c-decl.c:5387 + #, c-format + msgid "parameter `%s' has just a forward declaration" + msgstr "`%s' parametresi tam bir ilerletme bildirimi" + + #: c-decl.c:5428 + msgid "`void' in parameter list must be the entire list" + msgstr "parametre listesindeki void listenin tamamı olmalıydı" + + #: c-decl.c:5459 + #, c-format + msgid "`struct %s' declared inside parameter list" + msgstr "`struct %s' parametre listesinin içinde bildirilmiÅŸ" + + #: c-decl.c:5462 + #, c-format + msgid "`union %s' declared inside parameter list" + msgstr "`union %s' parametre listesi içinde bildirilmiÅŸ" + + #: c-decl.c:5465 + #, c-format + msgid "`enum %s' declared inside parameter list" + msgstr "`enum %s' parametre listesi içinde bildirilmiÅŸ" + + #: c-decl.c:5472 + msgid "anonymous struct declared inside parameter list" + msgstr "anonim yapı parametre listesinin içinde bildirilmiÅŸ" + + #: c-decl.c:5474 + msgid "anonymous union declared inside parameter list" + msgstr "anonim birleÅŸik yapı parametre listesinin içinde bildirilmiÅŸ" + + #: c-decl.c:5476 + msgid "anonymous enum declared inside parameter list" + msgstr "anonim enum parametre listesinin içinde bildirilmiÅŸ" + + #: c-decl.c:5480 + msgid "its scope is only this definition or declaration, which is probably not what you want" + msgstr "O sadece bu tanımın ya da bildirimin kapsamında, sizin istediÄŸiniz bu olmayabilir" + + #: c-decl.c:5559 + #, c-format + msgid "redefinition of `union %s'" + msgstr "`union %s' tekrar tanımlanmış" + + #: c-decl.c:5562 + #, c-format + msgid "redefinition of `struct %s'" + msgstr "`struct %s' tekrar tanımlanmış" + + #: c-decl.c:5601 + msgid "unnamed fields of type other than struct or union are not allowed" + msgstr "isimsiz alanlara struct ve union dışında izin verilmiyor" + + #: c-decl.c:5642 c-decl.c:5645 + #, c-format + msgid "%s defined inside parms" + msgstr "%s parametrelerin içinde tanımlanmış" + + #: c-decl.c:5643 c-decl.c:5646 c-decl.c:5657 + msgid "union" + msgstr "birleÅŸik yapı" + + #: c-decl.c:5643 c-decl.c:5646 + msgid "structure" + msgstr "yapı" + + #: c-decl.c:5656 + #, c-format + msgid "%s has no %s" + msgstr "%s %s içermiyor" + + #: c-decl.c:5657 + msgid "struct" + msgstr "yapı" + + #: c-decl.c:5658 + msgid "named members" + msgstr "isimli üyeleri yok" + + #: c-decl.c:5658 + msgid "members" + msgstr "üyeleri yok" + + #: c-decl.c:5697 + #, c-format + msgid "nested redefinition of `%s'" + msgstr "`%s' içiçe yeniden tanımlanmış" + + #: c-decl.c:5710 + #, c-format + msgid "bit-field `%s' width not an integer constant" + msgstr "`%s' bit alanı geniÅŸliÄŸi bir tamsayı sabit deÄŸil" + + #: c-decl.c:5721 + #, c-format + msgid "bit-field `%s' has invalid type" + msgstr "`%s' bit alanı geçersiz tür içeriyor" + + #: c-decl.c:5733 + #, c-format + msgid "bit-field `%s' type invalid in ISO C" + msgstr "`%s' bit alanının türü ISO C'de geçersiz" + + #: c-decl.c:5744 + #, c-format + msgid "negative width in bit-field `%s'" + msgstr "`%s' bit alanının uzunluÄŸu negatif" + + #: c-decl.c:5746 + #, c-format + msgid "width of `%s' exceeds its type" + msgstr "`%s' in uzunluÄŸu türünü aşıyor" + + #: c-decl.c:5748 + #, c-format + msgid "zero width for bit-field `%s'" + msgstr "bit alanı `%s' için sıfır geniÅŸlik" + + #: c-decl.c:5762 + #, c-format + msgid "`%s' is narrower than values of its type" + msgstr "`%s'in uzunluÄŸu türünün deÄŸerinden daha kısa" + + #: c-decl.c:5808 + msgid "flexible array member in union" + msgstr "esnek dizi birleÅŸik yapının üyesi olamaz" + + #: c-decl.c:5810 + msgid "flexible array member not at end of struct" + msgstr "esnek dizi yapının son üyesi deÄŸil" + + #: c-decl.c:5812 + msgid "flexible array member in otherwise empty struct" + msgstr "esnek dizi üstelik boÅŸ yapının üyesi" + + #: c-decl.c:5837 + #, c-format + msgid "duplicate member `%s'" + msgstr "üye `%s' yinelenmiÅŸ" + + #: c-decl.c:5881 + msgid "union cannot be made transparent" + msgstr "birleÅŸik yapı ÅŸeffaf olamaz" + + #. This enum is a named one that has been declared already. + #: c-decl.c:5975 + #, c-format + msgid "redeclaration of `enum %s'" + msgstr "`enum %s' yeniden bildirilmiÅŸ" + + #: c-decl.c:6009 + msgid "enum defined inside parms" + msgstr "enum parametrelerin içinde tanımlanmış" + + #: c-decl.c:6042 + msgid "enumeration values exceed range of largest integer" + msgstr "sembolik sabit grubunun deÄŸerleri en büyük tamsayının kapsamını aşıyor." + + #: c-decl.c:6151 + #, c-format + msgid "enumerator value for `%s' not integer constant" + msgstr "`%s' için deÄŸer tamsayı sabit deÄŸil" + + #: c-decl.c:6164 + msgid "overflow in enumeration values" + msgstr "sembolik sabit listesi deÄŸerlerinde taÅŸma" + + #: c-decl.c:6169 + msgid "ISO C restricts enumerator values to range of `int'" + msgstr "ISO C sembolik sabit grubunun deÄŸerlerini `int' kapsamında sınırlar" + + #: c-decl.c:6252 + msgid "return type is an incomplete type" + msgstr "dönüş türü, bir içi boÅŸ tür" + + #: c-decl.c:6260 + msgid "return type defaults to `int'" + msgstr "dönen tür `int'e öntanımlı" + + #: c-decl.c:6307 + #, c-format + msgid "no previous prototype for `%s'" + msgstr "`%s' için önceki prototip yok" + + #: c-decl.c:6314 + #, c-format + msgid "`%s' was used with no prototype before its definition" + msgstr "`%s' tanımlanmadan önce prototipsiz kullanılmış" + + #: c-decl.c:6320 + #, c-format + msgid "no previous declaration for `%s'" + msgstr "`%s' için önce bildirim yok" + + #: c-decl.c:6327 + #, c-format + msgid "`%s' was used with no declaration before its definition" + msgstr "`%s' tanımından önce bildirimsiz kullanıldı" + + #: c-decl.c:6351 c-decl.c:6936 + #, c-format + msgid "return type of `%s' is not `int'" + msgstr "`%s' için dönen tür `int' deÄŸil" + + #: c-decl.c:6367 + #, c-format + msgid "first argument of `%s' should be `int'" + msgstr "`%s' için ilk argüman `int' olmalıydı" + + #: c-decl.c:6376 + #, c-format + msgid "second argument of `%s' should be `char **'" + msgstr "`%s' için ikinci argüman `char **' olmalıydı" + + #: c-decl.c:6385 + #, c-format + msgid "third argument of `%s' should probably be `char **'" + msgstr "`%s' için üçüncü argüman mümkünse `char **' olmalıydı" + + #: c-decl.c:6394 + #, c-format + msgid "`%s' takes only zero or two arguments" + msgstr "`%s' ya iki argüman alır ya da hiç almaz" + + #: c-decl.c:6397 + #, c-format + msgid "`%s' is normally a non-static function" + msgstr "`%s' normalde bir static olmayan iÅŸlev" + + #: c-decl.c:6507 + msgid "parm types given both in parmlist and separately" + msgstr "parametre türleri hem liste içinde hem de ayrıca verilmiÅŸ" + + #: c-decl.c:6528 + msgid "parameter name omitted" + msgstr "parametre ismi atlandı" + + #: c-decl.c:6532 c-decl.c:6634 + #, c-format + msgid "parameter `%s' declared void" + msgstr "parametre `%s' void bildirimli" + + #: c-decl.c:6608 + msgid "parameter name missing from parameter list" + msgstr "parametre ismi parametre listesinde yok" + + #: c-decl.c:6627 + #, c-format + msgid "multiple parameters named `%s'" + msgstr "`%s' isimli çok sayıda parametre" + + #: c-decl.c:6658 c-decl.c:6660 + #, c-format + msgid "type of `%s' defaults to `int'" + msgstr "`%s' türü öntanımlı olarak `int'" + + #: c-decl.c:6696 + #, c-format + msgid "declaration for parameter `%s' but no such parameter" + msgstr "`%s' parametre bildirimi olmayan bir parametre için yapılmış" + + #: c-decl.c:6744 + msgid "number of arguments doesn't match prototype" + msgstr "argümanların sayısı prototiple uyumsuz" + + #: c-decl.c:6774 + #, c-format + msgid "promoted argument `%s' doesn't match prototype" + msgstr "yükseltgenmiÅŸ argüman `%s', prototiple uyumsuz" + + #: c-decl.c:6788 + #, c-format + msgid "argument `%s' doesn't match prototype" + msgstr "`%s' argümanı prototipte belirtilen türle uyumsuz" + + #: c-decl.c:6968 cp/decl.c:14327 + msgid "no return statement in function returning non-void" + msgstr "void olmayan dönüşlü iÅŸlevde `return' deyimi yok" + + #: c-decl.c:7124 + msgid "this function may return with or without a value" + msgstr "bu iÅŸlev bir deÄŸerle dönebileceÄŸi gibi dönmeyebilir de" + + #: c-decl.c:7144 + #, c-format + msgid "size of return value of `%s' is %u bytes" + msgstr "`%s' dönüş deÄŸerinin uzunluÄŸu %u bayt" + + #: c-decl.c:7148 + #, c-format + msgid "size of return value of `%s' is larger than %d bytes" + msgstr "`%s' için dönen deÄŸerin geniÅŸliÄŸi %d bayttan büyük" + + #. If we get here, declarations have been used in a for loop without + #. the C99 for loop scope. This doesn't make much sense, so don't + #. allow it. + #: c-decl.c:7203 + msgid "`for' loop initial declaration used outside C99 mode" + msgstr "`for' döngüsünün baÅŸlangıç bildirimi C99 kipinin dışında kullanılmış" + + #: c-decl.c:7227 + #, c-format + msgid "`struct %s' declared in `for' loop initial declaration" + msgstr "`struct %s' `for' döngüsünün ilklendirme bildiriminde bildirilmiÅŸ" + + #: c-decl.c:7230 + #, c-format + msgid "`union %s' declared in `for' loop initial declaration" + msgstr "`union %s' `for' döngüsünün ilklendirme bildiriminde bildirilmiÅŸ" + + #: c-decl.c:7233 + #, c-format + msgid "`enum %s' declared in `for' loop initial declaration" + msgstr "`enum %s' `for' döngüsünün ilklendirme bildiriminde bildirilmiÅŸ" + + #: c-decl.c:7241 + #, c-format + msgid "declaration of non-variable `%s' in `for' loop initial declaration" + msgstr "`for' döngüsü ilklendirme bildirimi içinde deÄŸiÅŸken olmayan `%s' bildirimi" + + #: c-decl.c:7243 + #, c-format + msgid "declaration of static variable `%s' in `for' loop initial declaration" + msgstr "`for' döngüsü ilklendirme bildirimi içinde `static' deÄŸiÅŸken `%s' bildirimi" + + #: c-decl.c:7245 + #, c-format + msgid "declaration of `extern' variable `%s' in `for' loop initial declaration" + msgstr "`for' döngüsü ilklendirme bildirimi içinde `extern' deÄŸiÅŸken `%s' bildirimi" + + #: c-format.c:128 c-format.c:210 + msgid "format string arg not a string type" + msgstr "biçem dizgesi argümanının veri türü dizge deÄŸil" + + #: c-format.c:143 + msgid "args to be formatted is not '...'" + msgstr "biçemlendirilmiÅŸ argümanlar '...' deÄŸil" + + #: c-format.c:152 + msgid "strftime formats cannot format arguments" + msgstr "strftime biçemleri biçem argümanları olamaz" + + #: c-format.c:187 c-format.c:289 + msgid "format string has invalid operand number" + msgstr "biçem dizgesi geçersiz sayıda terim içeriyor" + + #: c-format.c:221 + msgid "function does not return string type" + msgstr "iÅŸlev dizge veri türü ile dönmüyor" + + #: c-format.c:252 + msgid "unrecognized format specifier" + msgstr "anlaşılmayan biçem belirteci" + + #: c-format.c:265 + #, c-format + msgid "`%s' is an unrecognized format function type" + msgstr "`%s' biçem iÅŸlevi türü bilinmiyor" + + #: c-format.c:299 + msgid "format string arg follows the args to be formatted" + msgstr "biçem dizgesi argümanını biçemlendirilmiÅŸ argümanlar izliyor" + + #: c-format.c:620 + msgid "` ' flag" + msgstr "` ' bayrağı" + + #: c-format.c:620 + msgid "the ` ' printf flag" + msgstr "` ' printf bayrağı" + + #: c-format.c:621 c-format.c:692 + msgid "`+' flag" + msgstr "`+' bayrağı" + + #: c-format.c:621 + msgid "the `+' printf flag" + msgstr "`+' printf bayrağı" + + #: c-format.c:622 c-format.c:668 + msgid "`#' flag" + msgstr "`#' bayrağı" + + #: c-format.c:622 + msgid "the `#' printf flag" + msgstr "`#' printf bayrağı" + + #: c-format.c:623 c-format.c:666 + msgid "`0' flag" + msgstr "`0' bayrağı" + + #: c-format.c:623 + msgid "the `0' printf flag" + msgstr "`0' printf bayrağı" + + #: c-format.c:624 c-format.c:665 c-format.c:695 + msgid "`-' flag" + msgstr "`-' bayrağı" + + #: c-format.c:624 + msgid "the `-' printf flag" + msgstr "`-' printf bayrağı" + + #: c-format.c:625 c-format.c:649 + msgid "`'' flag" + msgstr "`'' bayrağı" + + #: c-format.c:625 + msgid "the `'' printf flag" + msgstr "`'' printf bayrağı" + + #: c-format.c:626 c-format.c:650 + msgid "`I' flag" + msgstr "`I' bayrağı" + + #: c-format.c:626 + msgid "the `I' printf flag" + msgstr "`I' printf bayrağı" + + #: c-format.c:627 c-format.c:647 c-format.c:669 c-format.c:696 c-format.c:1790 + msgid "field width" + msgstr "alan uzunluÄŸu" + + #: c-format.c:627 + msgid "field width in printf format" + msgstr "alan uzunluÄŸu printf biçeminde" + + #: c-format.c:628 + msgid "precision" + msgstr "duyarlık" + + #: c-format.c:628 + msgid "precision in printf format" + msgstr "duyarlık printf biçeminde" + + #: c-format.c:629 c-format.c:648 c-format.c:699 + msgid "length modifier" + msgstr "uzunluk deÄŸiÅŸtirici" + + #: c-format.c:629 + msgid "length modifier in printf format" + msgstr "uzunluk deÄŸiÅŸtirici printf biçeminde" + + #: c-format.c:645 + msgid "assignment suppression" + msgstr "atama engelleme" + + #: c-format.c:645 + msgid "the assignment suppression scanf feature" + msgstr "atama engelleyen scanf özelliÄŸi" + + #: c-format.c:646 + msgid "`a' flag" + msgstr "`a' bayrağı" + + #: c-format.c:646 + msgid "the `a' scanf flag" + msgstr "`a' scanf bayrağı" + + #: c-format.c:647 + msgid "field width in scanf format" + msgstr "scanf biçeminde alan geniÅŸliÄŸi" + + #: c-format.c:648 + msgid "length modifier in scanf format" + msgstr "scanf biçeminde uzunluk deÄŸiÅŸtirici" + + #: c-format.c:649 + msgid "the `'' scanf flag" + msgstr "`'' scanf bayrağı" + + #: c-format.c:650 + msgid "the `I' scanf flag" + msgstr "`I' scanf bayrağı" + + #: c-format.c:664 + msgid "`_' flag" + msgstr "`_' bayrağı" + + #: c-format.c:664 + msgid "the `_' strftime flag" + msgstr "`_' strftime bayrağı" + + #: c-format.c:665 + msgid "the `-' strftime flag" + msgstr "`-' strftime bayrağı" + + #: c-format.c:666 + msgid "the `0' strftime flag" + msgstr "`0' strftime bayrağı" + + #: c-format.c:667 c-format.c:691 + msgid "`^' flag" + msgstr "`^' bayrağı" + + #: c-format.c:667 + msgid "the `^' strftime flag" + msgstr "`^' strftime bayrağı" + + #: c-format.c:668 + msgid "the `#' strftime flag" + msgstr "`#' strftime bayrağı" + + #: c-format.c:669 + msgid "field width in strftime format" + msgstr "strftime biçeminde alan geniÅŸliÄŸi" + + #: c-format.c:670 + msgid "`E' modifier" + msgstr "`E' deÄŸiÅŸtirici" + + #: c-format.c:670 + msgid "the `E' strftime modifier" + msgstr "`E' strftime deÄŸiÅŸtirici" + + #: c-format.c:671 + msgid "`O' modifier" + msgstr "`O' deÄŸiÅŸtirici" + + #: c-format.c:671 + msgid "the `O' strftime modifier" + msgstr "`O' strftime deÄŸiÅŸtirici" + + #: c-format.c:672 + msgid "the `O' modifier" + msgstr "`O' deÄŸiÅŸtirici" + + #: c-format.c:690 + msgid "fill character" + msgstr "dolgu karakteri" + + #: c-format.c:690 + msgid "fill character in strfmon format" + msgstr "strfmon biçeminde dolgu karakteri" + + #: c-format.c:691 + msgid "the `^' strfmon flag" + msgstr "`^' strfmon bayrağı" + + #: c-format.c:692 + msgid "the `+' strfmon flag" + msgstr "`+' strfmon bayrağı" + + #: c-format.c:693 + msgid "`(' flag" + msgstr "`(' bayrağı" + + #: c-format.c:693 + msgid "the `(' strfmon flag" + msgstr "`(' strfmon bayrağı" + + #: c-format.c:694 + msgid "`!' flag" + msgstr "`!' bayrağı" + + #: c-format.c:694 + msgid "the `!' strfmon flag" + msgstr "`!' strfmon bayrağı" + + #: c-format.c:695 + msgid "the `-' strfmon flag" + msgstr "`-' strfmon bayrağı" + + #: c-format.c:696 + msgid "field width in strfmon format" + msgstr "strfmon biçeminde alan geniÅŸliÄŸi" + + #: c-format.c:697 + msgid "left precision" + msgstr "sol taraf duyarlığı" + + #: c-format.c:697 + msgid "left precision in strfmon format" + msgstr "strfmon biçeminde sol taraf duyarlığı" + + #: c-format.c:698 + msgid "right precision" + msgstr "saÄŸ taraf duyarlığı" + + #: c-format.c:698 + msgid "right precision in strfmon format" + msgstr "strfmon biçeminde saÄŸ taraf duyarlığı" + + #: c-format.c:699 + msgid "length modifier in strfmon format" + msgstr "strfmon biçeminde uzunluk deÄŸiÅŸtirici" + + #: c-format.c:998 + #, c-format + msgid "function might be possible candidate for `%s' format attribute" + msgstr "iÅŸlev `%s' biçem niteliÄŸi için mümkün aday olabilir" + + #: c-format.c:1122 c-format.c:1143 c-format.c:2200 + msgid "missing $ operand number in format" + msgstr "biçem içinde $ teriminde numara eksik" + + #: c-format.c:1153 + #, c-format + msgid "%s does not support %%n$ operand number formats" + msgstr "%s %%n$ terim numarası biçemlerini desteklemez" + + #: c-format.c:1160 + msgid "operand number out of range in format" + msgstr "biçem içindeki terim numarası kapsamdışı" + + #: c-format.c:1183 + #, c-format + msgid "format argument %d used more than once in %s format" + msgstr "%d. biçem argümanı %s biçeminde birden fazla kullanılmış" + + #: c-format.c:1233 + #, c-format + msgid "format argument %d unused before used argument %d in $-style format" + msgstr "%d. biçem argümanı $ tarzı biçemde %d. argümandan önce kullanılmamış" + + #: c-format.c:1330 + msgid "format not a string literal, format string not checked" + msgstr "biçem bir dizge sabit deÄŸil, biçem dizgesi denetlenmedi" + + #: c-format.c:1344 + msgid "format not a string literal and no format arguments" + msgstr "biçem bir dizge sabit deÄŸil ve biçem argümanları yok" + + #: c-format.c:1346 + msgid "format not a string literal, argument types not checked" + msgstr "biçem bir dizge sabit deÄŸil, argüman türleri denetlenmedi" + + #: c-format.c:1359 + msgid "too many arguments for format" + msgstr "biçem için argüman sayısı çok fazla" + + #: c-format.c:1362 + msgid "unused arguments in $-style format" + msgstr "$ tarzı biçemde kullanılmamış argümanlar" + + #: c-format.c:1365 + msgid "zero-length format string" + msgstr "sıfır uzunluklu biçem dizgesi" + + #: c-format.c:1368 + msgid "format is a wide character string" + msgstr "biçem bir geniÅŸ karakter dizgesi" + + #: c-format.c:1371 + msgid "unterminated format string" + msgstr "sonlandırılmamış biçem dizgesi" + + #. FIXME: this warning should go away once Marc Espie's + #. __attribute__((nonnull)) patch is in. Instead, checking for + #. nonnull attributes should probably change this function to act + #. specially if info == NULL and add a res->number_null entry for + #. that case, or maybe add a function pointer to be called at + #. the end instead of hardcoding check_format_info_main. + #: c-format.c:1478 + msgid "null format string" + msgstr "null biçem dizgesi" + + #: c-format.c:1669 + msgid "embedded `\\0' in format" + msgstr "biçem içinde gömülü `\\0'" + + #: c-format.c:1684 + #, c-format + msgid "spurious trailing `%%' in format" + msgstr "biçem içinde sahte `%%'" + + #: c-format.c:1723 c-format.c:1960 + #, c-format + msgid "repeated %s in format" + msgstr "biçem içinde %s yinelenmiÅŸ" + + #: c-format.c:1736 + msgid "missing fill character at end of strfmon format" + msgstr "strfmon biçeminin sonunda dolgu karakteri eksik" + + #: c-format.c:1756 c-format.c:1874 c-format.c:2154 c-format.c:2207 + msgid "too few arguments for format" + msgstr "biçem için argüman sayısı yetersiz" + + #: c-format.c:1816 + #, c-format + msgid "zero width in %s format" + msgstr "%s biçeminde sıfır uzunluk" + + #: c-format.c:1835 + #, c-format + msgid "empty left precision in %s format" + msgstr "%s biçeminde sol taraf duyarlığı boÅŸ" + + #: c-format.c:1889 + msgid "field precision" + msgstr "alan duyarlığı" + + #: c-format.c:1904 + #, c-format + msgid "empty precision in %s format" + msgstr "%s biçeminde boÅŸ duyarlık" + + #: c-format.c:1944 + #, c-format + msgid "%s does not support the `%s' %s length modifier" + msgstr "%s `%s' %s uzunluk deÄŸiÅŸtiricisini desteklemiyor" + + #: c-format.c:1994 + msgid "conversion lacks type at end of format" + msgstr "dönüşüm, biçem sonunda türden yoksun" + + #: c-format.c:2005 + #, c-format + msgid "unknown conversion type character `%c' in format" + msgstr "biçemdeki dönüşüm türü karakteri `%c' bilinmiyor" + + #: c-format.c:2008 + #, c-format + msgid "unknown conversion type character 0x%x in format" + msgstr "biçemdeki dönüşüm türü karakteri 0x%x bilinmiyor" + + #: c-format.c:2015 + #, c-format + msgid "%s does not support the `%%%c' %s format" + msgstr "%s `%%%c' %s biçemini desteklemiyor" + + #: c-format.c:2031 + #, c-format + msgid "%s used with `%%%c' %s format" + msgstr "%s `%%%c' %s biçemi ile kullanılmış" + + #: c-format.c:2040 + #, c-format + msgid "%s does not support %s" + msgstr "%s %s desteÄŸi vermiyor" + + #: c-format.c:2049 + #, c-format + msgid "%s does not support %s with the `%%%c' %s format" + msgstr "%s %s'i `%%%c' %s biçemiyle desteklemiyor" + + #: c-format.c:2082 + #, c-format + msgid "%s ignored with %s and `%%%c' %s format" + msgstr "%s %s' ve `%%%c' %s biçemiyle yoksayıldı" + + #: c-format.c:2086 + #, c-format + msgid "%s ignored with %s in %s format" + msgstr "%s %s' ile %s biçeminde yoksayıldı" + + #: c-format.c:2092 + #, c-format + msgid "use of %s and %s together with `%%%c' %s format" + msgstr "%s ve %s birlikte `%%%c' %s biçemiyle kullanımı" + + #: c-format.c:2096 + #, c-format + msgid "use of %s and %s together in %s format" + msgstr "%s ve %s birlikte %s biçeminde kullanımı" + + #: c-format.c:2115 + #, c-format + msgid "`%%%c' yields only last 2 digits of year in some locales" + msgstr "`%%%c' bazı yerellerde yılın son iki hanesini alır" + + #: c-format.c:2118 + #, c-format + msgid "`%%%c' yields only last 2 digits of year" + msgstr "`%%%c' yılın son iki hanesini alır" + + #. The end of the format string was reached. + #: c-format.c:2134 + #, c-format + msgid "no closing `]' for `%%[' format" + msgstr "`%%[' biçemi için kapanan `]' yok" + + #: c-format.c:2147 + #, c-format + msgid "use of `%s' length modifier with `%c' type character" + msgstr "`%s' uzunluk deÄŸiÅŸtiricsinin `%c' tür karakteri ile kullanımı" + + #: c-format.c:2168 + #, c-format + msgid "%s does not support the `%%%s%c' %s format" + msgstr "%s `%%%s%c' %s biçemini desteklemiyor" + + #: c-format.c:2183 + msgid "operand number specified with suppressed assignment" + msgstr "terim numarası engellenmiÅŸ atama ile belirtilmiÅŸ" + + #: c-format.c:2185 + msgid "operand number specified for format taking no argument" + msgstr "terim numarası argüman almayan biçem için belirtilmiÅŸ" + + #: c-format.c:2304 + #, c-format + msgid "writing through null pointer (arg %d)" + msgstr "null gösterge vasıtasıyla yazma (%d. arg)" + + #: c-format.c:2313 + #, c-format + msgid "reading through null pointer (arg %d)" + msgstr "null gösterge vasıtasıyla okuma (%d. arg)" + + #: c-format.c:2333 + #, c-format + msgid "writing into constant object (arg %d)" + msgstr "sabit nesne içine yazma (%d. arg)" + + #: c-format.c:2343 + #, c-format + msgid "extra type qualifiers in format argument (arg %d)" + msgstr "biçem argümanında (%d. arg) fazladan tür niteleyiciler" + + #: c-format.c:2350 + #, c-format + msgid "format argument is not a pointer (arg %d)" + msgstr "biçem argümanı bir gösterge deÄŸil (%d. arg)" + + #: c-format.c:2352 + #, c-format + msgid "format argument is not a pointer to a pointer (arg %d)" + msgstr "biçem argümanı bir göstergenin göstergesi deÄŸil (%d. arg)" + + #: c-format.c:2423 + msgid "pointer" + msgstr "gösterge" + + #: c-format.c:2425 + msgid "different type" + msgstr "farklı tür" + + #: c-format.c:2446 + #, c-format + msgid "%s is not type %s (arg %d)" + msgstr "%s %s türünde deÄŸil (%d. arg)" + + #: c-format.c:2449 + #, c-format + msgid "%s format, %s arg (arg %d)" + msgstr "%s biçemi, %s arg (%d. arg)" + + #: c-lex.c:298 + msgid "badly nested C headers from preprocessor" + msgstr "öniÅŸlemciden C baÅŸlıkları hatalı yuvalanmış" + + #: c-lex.c:348 + #, c-format + msgid "ignoring #pragma %s %s" + msgstr "#pragma %s %s yoksalıyor" + + #: c-lex.c:350 + #, c-format + msgid "ignoring #pragma %s" + msgstr "#pragma %s yoksayılıyor" + + #: c-lex.c:400 + #, c-format + msgid "universal-character-name '\\U%08x' not valid in identifier" + msgstr "evrensel karakter ismi '\\U%08x' tanıtıcı içinde geçerli deÄŸil" + + #: c-lex.c:646 + #, c-format + msgid "universal-character-name '\\u%04x' not valid in identifier" + msgstr "evrensel karakter ismi '\\U%04x' tanıtıcı içinde geçerli deÄŸil" + + #: c-lex.c:736 + msgid "both 'f' and 'l' suffixes on floating constant" + msgstr "gerçel sayı sabitte hem 'f' hem de 'l' sonekleri" + + #: c-lex.c:763 + #, c-format + msgid "floating point number exceeds range of '%s'" + msgstr "gerçel sayı '%s' kapsamını aşıyor" + + #: c-lex.c:793 + #, c-format + msgid "stray '%c' in program" + msgstr "programda serseri '%c'" + + #: c-lex.c:795 + #, c-format + msgid "stray '\\%o' in program" + msgstr "programda serseri '\\%o'" + + #: c-lex.c:893 + msgid "too many decimal points in floating constant" + msgstr "kayan sabitteki ondalık nokta sayısı çok fazla" + + #: c-lex.c:895 + msgid "decimal point in exponent - impossible!" + msgstr "üs bir ondalık sayı -- imkânsız!" + + #. Possible future extension: silently ignore _ in numbers, + #. permitting cosmetic grouping - e.g. 0x8000_0000 == 0x80000000 + #. but somewhat easier to read. Ada has this? + #: c-lex.c:906 + msgid "underscore in number" + msgstr "sayı içinde alt çizgi" + + #: c-lex.c:968 + msgid "numeric constant with no digits" + msgstr "rakam içermeyen sayısal sabit" + + #: c-lex.c:971 + msgid "numeric constant contains digits beyond the radix" + msgstr "sayısal sabit tabanından büyük rakamlar içeriyor" + + #: c-lex.c:982 + msgid "floating constant may not be in radix 16" + msgstr "gerçel sayı sabit onaltılık tabanda olmayabilir" + + #: c-lex.c:985 + msgid "hexadecimal floating constant has no exponent" + msgstr "onaltılık gerçel sayı sabit üs içermiyor" + + #: c-lex.c:997 + msgid "floating constant exponent has no digits" + msgstr "gerçel sayı sabitin üssü rakam içermiyor" + + #: c-lex.c:1017 + msgid "more than one 'f' suffix on floating constant" + msgstr "gerçel sayı sabitte `f' soneki birden fazla var" + + #: c-lex.c:1020 + msgid "traditional C rejects the 'f' suffix" + msgstr "geleneksel C 'f' sonekini kullanmaz" + + #: c-lex.c:1027 + msgid "more than one 'l' suffix on floating constant" + msgstr "gerçel sayı sabitte `l' soneki birden fazla var" + + #: c-lex.c:1030 + msgid "traditional C rejects the 'l' suffix" + msgstr "geleneksel C 'l' sonekini kullanmaz" + + #: c-lex.c:1038 + msgid "more than one 'i' or 'j' suffix on floating constant" + msgstr "gerçel sayı sabitte `i' ya da `j' soneki birden fazla var" + + #: c-lex.c:1040 c-lex.c:1134 + msgid "ISO C forbids imaginary numeric constants" + msgstr "ISO C sanal sayısal sabitleri yasaklar" + + #: c-lex.c:1045 + msgid "invalid suffix on floating constant" + msgstr "gerçel sayı sabitin soneki geçersiz" + + #. We got an exception from parse_float() + #: c-lex.c:1062 + msgid "floating constant out of range" + msgstr "gerçel sayı sabit kapsamdışı" + + #: c-lex.c:1074 + msgid "floating point number exceeds range of 'double'" + msgstr "gerçel sayı 'double' kapsamını aşıyor" + + #: c-lex.c:1103 + msgid "two 'u' suffixes on integer constant" + msgstr "tamsayı sabitte iki 'u' soneki" + + #: c-lex.c:1106 + msgid "traditional C rejects the 'u' suffix" + msgstr "geleneksel C 'u' sonekini kullanmaz" + + #: c-lex.c:1117 + msgid "three 'l' suffixes on integer constant" + msgstr "tamsayı sabitte üç 'l' soneki" + + #: c-lex.c:1119 + msgid "'lul' is not a valid integer suffix" + msgstr "'lul' geçerli bir tamsayı soneki deÄŸil" + + #: c-lex.c:1121 + msgid "'Ll' and 'lL' are not valid integer suffixes" + msgstr "'Ll' ve 'lL' geçerli tamsayı sonekleri deÄŸil" + + #: c-lex.c:1124 + msgid "ISO C89 forbids long long integer constants" + msgstr "ISO C89 long long tamsayı sabitleri yasaklar" + + #: c-lex.c:1132 + msgid "more than one 'i' or 'j' suffix on integer constant" + msgstr "tamsayı sabitte birden fazla 'i' ya da 'j' soneki" + + #: c-lex.c:1139 + msgid "invalid suffix on integer constant" + msgstr "tamsayı sabitteki sonek geçersiz" + + #: c-lex.c:1147 + #, c-format + msgid "integer constant is too large for this configuration of the compiler - truncated to %d bits" + msgstr "tamsayı sabit derleyicinin bu yapılandırması için çok büyük - %d bite indirildi" + + #: c-lex.c:1237 + msgid "width of integer constant changes with -traditional" + msgstr "tamsayı sabitin geniÅŸliÄŸi -traditional ile deÄŸiÅŸir" + + #: c-lex.c:1239 + msgid "integer constant is unsigned in ISO C, signed with -traditional" + msgstr "tamsayı sabit ISO C için unsigned, -traditional ile signed'dır" + + #: c-lex.c:1241 + msgid "width of integer constant may change on other systems with -traditional" + msgstr "tamsayı sabitin uzunluÄŸu diÄŸer sistemlerde -traditional ile deÄŸiÅŸebilir" + + #: c-lex.c:1251 + #, c-format + msgid "integer constant larger than the maximum value of %s" + msgstr "tamsayı sabit en büyük deÄŸer %s den daha büyük" + + #: c-lex.c:1254 + msgid "an unsigned long long int" + msgstr "bir unsigned long long int" + + #: c-lex.c:1255 + msgid "a long long int" + msgstr "bir long long int" + + #: c-lex.c:1256 + msgid "an unsigned long int" + msgstr "bir unsigned long int" + + #: c-lex.c:1260 + msgid "decimal constant is so large that it is unsigned" + msgstr "ondalık sabit unsigned tür için büyük" + + #: c-lex.c:1269 + msgid "complex integer constant is too wide for 'complex int'" + msgstr "karmaşık tamsayı sabit `complex int' için çok büyük" + + #: c-lex.c:1289 + msgid "integer constant is larger than the maximum value for its type" + msgstr "tamsayı sabit türünün izin verdiÄŸi deÄŸerden büyük" + + #: c-lex.c:1293 + #, c-format + msgid "missing white space after number '%.*s'" + msgstr "'%.*s'den sonra boÅŸluk yok" + + #: c-lex.c:1329 cpplex.c:1873 + msgid "ignoring invalid multibyte character" + msgstr "geçersiz çok baytlı karakter yoksayılıyor" + + #. Like YYERROR but do call yyerror. + #: c-parse.y:56 parse.y:51 objc-parse.y:57 + msgid "syntax error" + msgstr "sözdizimi hatası" + + #: /usr/share/bison/bison.simple:176 /usr/share/bison.simple:112 + msgid "syntax error: cannot back up" + msgstr "sözdizimi hatası: yedeklenemiyor" + + #: c-parse.y:288 objc-parse.y:310 + msgid "ISO C forbids an empty source file" + msgstr "ISO C boÅŸ kaynak dosyalarına izin vermez" + + #: c-parse.y:321 c-typeck.c:6895 objc-parse.y:343 + msgid "argument of `asm' is not a constant string" + msgstr "`asm' argümanı bir sabit dizge deÄŸil" + + #: c-parse.y:329 objc-parse.y:351 + msgid "ISO C forbids data definition with no type or storage class" + msgstr "ISO C tür veya saklama sınıfı belirtilmeyen veri tanımına izin vermez" + + #: c-parse.y:331 objc-parse.y:353 + msgid "data definition has no type or storage class" + msgstr "veri tanımı tür ya da saklama sınıfı içermiyor" + + #: c-parse.y:344 objc-parse.y:366 + msgid "ISO C does not allow extra `;' outside of a function" + msgstr "ISO C iÅŸlevler dışında tek başına `;'e izin vermez" + + #: c-parse.y:404 cppexp.c:693 + msgid "traditional C rejects the unary plus operator" + msgstr "geleneksel C tekil artı iÅŸlemimini dışlar" + + #: c-parse.y:466 objc-parse.y:488 + msgid "`sizeof' applied to a bit-field" + msgstr "'sizeof' bir bit-alanına uygulandı" + + #: c-parse.y:546 objc-parse.y:568 + msgid "ISO C forbids omitting the middle term of a ?: expression" + msgstr "ISO C ?: ifadesinin orta teriminin atlanmasına izin vermez" + + #: c-parse.y:593 objc-parse.y:615 + msgid "ISO C89 forbids compound literals" + msgstr "ISO C89 bileÅŸik sayılara izin vermez" + + #: c-parse.y:607 objc-parse.y:629 + msgid "ISO C forbids braced-groups within expressions" + msgstr "ISO C ifadelerde parantezli gruplamalara izin vermez" + + #: c-parse.y:638 objc-parse.y:660 + msgid "first argument to __builtin_choose_expr not a constant" + msgstr "__builtin_choose_expr iÅŸlevine aktarılan ilk argüman bir sabit deÄŸil" + + #: c-parse.y:681 + msgid "traditional C rejects string concatenation" + msgstr "geleneksel C dizgelerin birleÅŸtirilmesine izin vermez" + + #: c-parse.y:696 objc-parse.y:732 + msgid "ISO C does not permit use of `varargs.h'" + msgstr "ISO C `varargs.h' kullanımına izin vermez" + + #: c-parse.y:957 c-parse.y:963 c-parse.y:969 c-parse.y:975 c-parse.y:996 c-parse.y:1002 c-parse.y:1008 c-parse.y:1014 c-parse.y:1047 c-parse.y:1053 c-parse.y:1059 c-parse.y:1065 c-parse.y:1110 c-parse.y:1116 c-parse.y:1122 c-parse.y:1128 parse.y:1907 parse.y:1914 parse.y:1949 objc-parse.y:993 objc-parse.y:999 objc-parse.y:1005 objc-parse.y:1011 objc-parse.y:1032 objc-parse.y:1038 objc-parse.y:1044 objc-parse.y:1050 objc-parse.y:1083 objc-parse.y:1089 objc-parse.y:1095 objc-parse.y:1101 objc-parse.y:1146 objc-parse.y:1152 objc-parse.y:1158 objc-parse.y:1164 + #, c-format + msgid "`%s' is not at beginning of declaration" + msgstr "`%s' bildirimin baÅŸlangıcında deÄŸil" + + #: c-parse.y:1410 objc-parse.y:1455 + msgid "ISO C forbids empty initializer braces" + msgstr "ISO C boÅŸ ilklendirme parantezlerine izin vermez" + + #: c-parse.y:1424 objc-parse.y:1469 + msgid "ISO C89 forbids specifying subobject to initialize" + msgstr "ISO C89 öndeÄŸer olarak alt nesnelerin belirtilmesine izin vermez." + + #: c-parse.y:1427 objc-parse.y:1472 + msgid "obsolete use of designated initializer without `='" + msgstr "`=' olmaksızın tasarlanmış ilklendirici kullanımının modası geçti" + + #: c-parse.y:1431 objc-parse.y:1476 + msgid "obsolete use of designated initializer with `:'" + msgstr "`:' olmaksızın tasarlanmış ilklendirici kullanımının modası geçti" + + #: c-parse.y:1460 + msgid "ISO C forbids specifying range of elements to initialize" + msgstr "ISO C89 öndeÄŸer olarak eleman aralığı belirtilmesine izin vermez." + + #: c-parse.y:1468 c-parse.y:1498 objc-parse.y:1507 objc-parse.y:1537 + msgid "ISO C forbids nested functions" + msgstr "ISO C iç içe iÅŸlevlere izin vermez" + + #: c-parse.y:1672 objc-parse.y:1713 + msgid "ISO C forbids forward references to `enum' types" + msgstr "ISO C sonradan bildirilmiÅŸ `enum' türüne baÅŸvuruya izin vermez" + + #: c-parse.y:1684 parse.y:2364 objc-parse.y:1725 + msgid "comma at end of enumerator list" + msgstr "sembolik sabitler listesinin sonunda virgül" + + #: c-parse.y:1692 objc-parse.y:1733 + msgid "no semicolon at end of struct or union" + msgstr "struct ya da union tanımının sonunda ; yok" + + #: c-parse.y:1701 objc-parse.y:1742 objc-parse.y:2819 + msgid "extra semicolon in struct or union specified" + msgstr "struct ya da union'da fazladan ; var" + + #: c-parse.y:1714 objc-parse.y:1769 + msgid "ISO C doesn't support unnamed structs/unions" + msgstr "ISO C isimsiz struct/union'lara izin vermez" + + #: c-parse.y:1723 objc-parse.y:1778 + msgid "ISO C forbids member declarations with no members" + msgstr "ISO C üyesiz üye bildirimlerine izin vermez" + + #: c-parse.y:1872 c-parse.y:1876 c-parse.y:1880 objc-parse.y:1927 objc-parse.y:1931 objc-parse.y:1935 + msgid "storage class specifier in array declarator" + msgstr "dizi bildiriminde saklatım öbeÄŸi belirteçleri" + + #: c-parse.y:1895 objc-parse.y:1950 + msgid "deprecated use of label at end of compound statement" + msgstr "bileÅŸik ifadenin sonunda etiket kullanımının modası geçti" + + #: c-parse.y:1912 objc-parse.y:1967 + msgid "ISO C89 forbids mixed declarations and code" + msgstr "ISO C kod ve bildirimlerin karışımına izin vermez" + + #: c-parse.y:1986 objc-parse.y:2045 + msgid "ISO C forbids label declarations" + msgstr "ISO C etiket bildirimlerine izin vermez" + + #: c-parse.y:2035 parse.y:1607 objc-parse.y:2094 + msgid "braced-group within expression allowed only inside a function" + msgstr "ifade içinde parantezli gruplamalara sadece bir iÅŸlevin içinde izin verilir" + + #: c-parse.y:2161 objc-parse.y:2220 + msgid "empty body in an else-statement" + msgstr "else ifadesinin gövdesi boÅŸ" + + #: c-parse.y:2281 objc-parse.y:2340 + msgid "ISO C forbids `goto *expr;'" + msgstr "ISO C `goto *expr;' kullanımına izin vermez" + + #: c-parse.y:2379 objc-parse.y:2438 + msgid "ISO C forbids forward parameter declarations" + msgstr "ISO C ileriye dönük parametre bildirimlerine izin vermez" + + #. Gcc used to allow this as an extension. However, it does + #. not work for all targets, and thus has been disabled. + #. Also, since func (...) and func () are indistinguishable, + #. it caused problems with the code in expand_builtin which + #. tries to verify that BUILT_IN_NEXT_ARG is being used + #. correctly. + #: c-parse.y:2405 objc-parse.y:2464 + msgid "ISO C requires a named argument before `...'" + msgstr "ISO C `...'dan önce bir isimli argüman gerektirir" + + #: c-parse.y:2500 objc-parse.y:2559 + msgid "`...' in old-style identifier list" + msgstr "eski-tarz tanıtıcı listesinde `...'" + + #: /usr/share/bison/bison.simple:821 + msgid "parse error; also virtual memory exhausted" + msgstr "ayrıştırma hatası; ayrıca sanal bellek aşıldı" + + #: /usr/share/bison/bison.simple:825 cp/spew.c:343 /usr/share/bison.simple:654 + msgid "parse error" + msgstr "ayrıştırma hatası:" + + #: /usr/share/bison/bison.simple:950 /usr/share/bison.simple:367 + msgid "parser stack overflow" + msgstr "ayrıştırıcı yığın taÅŸması" + + #: c-parse.y:2824 cp/spew.c:1477 objc-parse.y:3511 + #, c-format + msgid "%s at end of input" + msgstr "%s girdinin sonunda" + + #: c-parse.y:2830 cp/spew.c:1483 objc-parse.y:3517 + #, c-format + msgid "%s before %s'%c'" + msgstr "%2$s'%3$c'den önce %1$s" + + #: c-parse.y:2832 cp/spew.c:1485 objc-parse.y:3519 + #, c-format + msgid "%s before %s'\\x%x'" + msgstr "%2$s'\\x%3$x'den önce %1$s" + + #: c-parse.y:2836 cp/spew.c:1489 objc-parse.y:3523 + #, c-format + msgid "%s before string constant" + msgstr "%s dizge sabitten önce" + + #: c-parse.y:2838 cp/spew.c:1491 objc-parse.y:3525 + #, c-format + msgid "%s before numeric constant" + msgstr "sayısal sabitten önce %s" + + #: c-parse.y:2840 objc-parse.y:3527 + #, c-format + msgid "%s before \"%s\"" + msgstr "\"%2$s\"den önce %1$s" + + #: c-parse.y:2842 objc-parse.y:3529 + #, c-format + msgid "%s before '%s' token" + msgstr "'%2$s' dizgeciÄŸinden önce %1$s" + + #: c-parse.y:2978 objc-parse.y:3708 + #, c-format + msgid "syntax error at '%s' token" + msgstr "'%s' dizgeciÄŸinde sözdizimi hatası" + + #: c-parse.y:3008 cp/lex.c:906 objc-parse.y:3738 + msgid "YYDEBUG not defined" + msgstr "YYDEBUG tanımlı deÄŸil" + + #: c-pragma.c:109 + msgid "#pragma pack (pop) encountered without matching #pragma pack (push, )" + msgstr "#pragma pack (push, ) ile eÅŸleÅŸmeyen #pragma pack (pop) saptandı" + + #: c-pragma.c:127 + #, c-format + msgid "#pragma pack(pop, %s) encountered without matching #pragma pack(push, %s, )" + msgstr "#pragma pack(push, %2$s, ) ile eÅŸleÅŸmeyen #pragma pack(pop, %1$s) saptandı" + + #: c-pragma.c:162 + msgid "#pragma pack(push[, id], ) is not supported on this target" + msgstr "bu hedefte #pragma pack(push[, id], ) desteklenmiyor" + + #: c-pragma.c:164 + msgid "#pragma pack(pop[, id], ) is not supported on this target" + msgstr "bu hedefte #pragma pack(pop[, id], ) desteklenmiyor" + + #: c-pragma.c:184 + msgid "missing '(' after '#pragma pack' - ignored" + msgstr "'#pragma pack' den sonra '(' eksik - yoksayıldı" + + #: c-pragma.c:197 c-pragma.c:247 + msgid "malformed '#pragma pack' - ignored" + msgstr "'#pragma pack' bozuk - yoksayıldı" + + #: c-pragma.c:202 + msgid "malformed '#pragma pack(push[, id], )' - ignored" + msgstr "bozuk '#pragma pack(push[, id], )' - yoksayıldı" + + #: c-pragma.c:204 + msgid "malformed '#pragma pack(pop[, id])' - ignored" + msgstr "'#pragma pack(pop[, id])' bozuk - yoksayıldı" + + #: c-pragma.c:213 + #, c-format + msgid "unknown action '%s' for '#pragma pack' - ignored" + msgstr "'#pragma pack' için '%s' eylemi bilinmiyor - yoksayıldı" + + #: c-pragma.c:250 + msgid "junk at end of '#pragma pack'" + msgstr "'#pragma pack' sonunda döküntü" + + #: c-pragma.c:264 + #, c-format + msgid "alignment must be a small power of two, not %d" + msgstr "hizalama ikinin küçük bir üssü olmalı %d deÄŸil" + + #: c-pragma.c:329 c-pragma.c:334 + msgid "malformed #pragma weak, ignored" + msgstr "'#pragma weak' yönergesi bozuk - yoksayıldı" + + #: c-pragma.c:338 + msgid "junk at end of #pragma weak" + msgstr "'#pragma weak' sonunda döküntü" + + #: c-pragma.c:369 c-pragma.c:374 + msgid "malformed #pragma redefine_extname, ignored" + msgstr "#pragma redefine_extname yönergesi bozuk - yoksayıldı" + + #: c-pragma.c:379 + msgid "junk at end of #pragma redefine_extname" + msgstr "#pragma redefine_extname sonunda döküntü" + + #: c-pragma.c:386 c-pragma.c:461 + msgid "#pragma redefine_extname conflicts with declaration" + msgstr "#pragma redefine_extname bildirimiyle çeliÅŸiyor" + + #: c-pragma.c:410 + msgid "malformed #pragma extern_prefix, ignored" + msgstr "#pragma extern_prefix bozuk, yoksayıldı" + + #: c-pragma.c:415 + msgid "junk at end of #pragma extern_prefix" + msgstr "'#pragma extern_prefix' sonunda karışıklık" + + #: c-pragma.c:447 + msgid "asm declaration conficts with previous rename" + msgstr "asm bildirimi önceki isim deÄŸiÅŸikliÄŸi ile çeliÅŸiyor" + + #: c-semantics.c:563 + msgid "break statement not within loop or switch" + msgstr "break deyimi switch ya da döngü içinde deÄŸil" + + #: c-semantics.c:581 + msgid "continue statement not within a loop" + msgstr "continue deyimi bir döngü içinde deÄŸil" + + #: c-semantics.c:676 + msgid "destructor needed for `%#D'" + msgstr "case etiketinin yerindeki `%#D' için" + + #: c-semantics.c:677 + msgid "where case label appears here" + msgstr "yıkıcı gerekli" + + #: c-semantics.c:680 + msgid "(enclose actions of previous case statements requiring destructors in their own scope.)" + msgstr "(önceki case deyimlerinin zarflama eylemleri kendi içerinde yıkıcıları gerektiriyor)" + + #: c-semantics.c:723 c-typeck.c:6923 cp/semantics.c:889 + #, c-format + msgid "%s qualifier ignored on asm" + msgstr "asm'de %s niteleyicisi yoksayıldı" + + #: c-typeck.c:123 + #, c-format + msgid "`%s' has an incomplete type" + msgstr "`%s' tamamlanmamış türde" + + #: c-typeck.c:145 cp/call.c:2621 + msgid "invalid use of void expression" + msgstr "void deyiminin kullanımı geçersiz" + + #: c-typeck.c:153 + msgid "invalid use of flexible array member" + msgstr "esnek dizi üyesinin kullanımı geçersiz" + + #: c-typeck.c:159 cp/typeck2.c:227 + msgid "invalid use of array with unspecified bounds" + msgstr "sınırları belirtilmemiÅŸ dizi; kullanımı geçersiz" + + #: c-typeck.c:167 + #, c-format + msgid "invalid use of undefined type `%s %s'" + msgstr "atanmamış tür `%s %s'; kullanımı geçersiz" + + #. If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. + #: c-typeck.c:171 + #, c-format + msgid "invalid use of incomplete typedef `%s'" + msgstr "tamamlanmamış typedef `%s'; kullanımı geçersiz" + + #: c-typeck.c:402 c-typeck.c:416 + msgid "function types not truly compatible in ISO C" + msgstr "iÅŸlev türleri ISO C'de tam uyumlu deÄŸil" + + #: c-typeck.c:576 + msgid "types are not quite compatible" + msgstr "türler tam uyumlu deÄŸil" + + #: c-typeck.c:729 + msgid "sizeof applied to a function type" + msgstr "bir iÅŸlev türüne sizeof uygulanmış" + + #: c-typeck.c:735 + msgid "sizeof applied to a void type" + msgstr "bir void türe sizeof uygulanmış" + + #: c-typeck.c:742 + msgid "sizeof applied to an incomplete type" + msgstr "sizeof bir tamamlanmamış türe uygulanmış" + + #: c-typeck.c:795 c-typeck.c:2704 + msgid "arithmetic on pointer to an incomplete type" + msgstr "bir içi boÅŸ tür göstergesi üzerinde aritmetik" + + #: c-typeck.c:1183 + #, c-format + msgid "%s has no member named `%s'" + msgstr "%s'in `%s' isimli bir üyesi yok" + + #: c-typeck.c:1216 + #, c-format + msgid "request for member `%s' in something not a structure or union" + msgstr "bir struct veya union olmayan ÅŸeyin `%s' üyesi için istek" + + #: c-typeck.c:1248 + msgid "dereferencing pointer to incomplete type" + msgstr "içi boÅŸ türe gösterge baÅŸvuru bozulması" + + #: c-typeck.c:1252 + msgid "dereferencing `void *' pointer" + msgstr "`void *' gösterge baÅŸvurusu bozulması" + + #: c-typeck.c:1269 cp/typeck.c:2347 + #, c-format + msgid "invalid type argument of `%s'" + msgstr "`%s' için tür argümanı geçersiz" + + #: c-typeck.c:1288 cp/typeck.c:2373 + msgid "subscript missing in array reference" + msgstr "dizi baÅŸvurusunda altindis yok" + + #: c-typeck.c:1309 cp/typeck.c:2415 + msgid "array subscript has type `char'" + msgstr "dizi altindisi `char' türünde" + + #: c-typeck.c:1317 c-typeck.c:1406 cp/typeck.c:2422 cp/typeck.c:2501 + msgid "array subscript is not an integer" + msgstr "dizi altindisi bir tamsayı deÄŸil" + + #: c-typeck.c:1350 + msgid "ISO C forbids subscripting `register' array" + msgstr "ISO C `register' dizisi altindislemesine izin vermez" + + #: c-typeck.c:1352 + msgid "ISO C89 forbids subscripting non-lvalue array" + msgstr "ISO C sol tarafsız dizi alt indislemesine izin vermez" + + #: c-typeck.c:1385 + msgid "subscript has type `char'" + msgstr "alt indis `char' türünde" + + #: c-typeck.c:1401 cp/typeck.c:2496 + msgid "subscripted value is neither array nor pointer" + msgstr "altindisli deÄŸer ne dizi ne de bir gösterge" + + #: c-typeck.c:1455 + #, c-format + msgid "`%s' undeclared here (not in a function)" + msgstr "`%s' burada bildirilmemiÅŸ (bir iÅŸlev içinde deÄŸil)" + + #: c-typeck.c:1462 + #, c-format + msgid "`%s' undeclared (first use in this function)" + msgstr "`%s' bildirilmemiÅŸ (bu iÅŸlevde ilk kullanımı)" + + #: c-typeck.c:1467 + msgid "(Each undeclared identifier is reported only once" + msgstr "(BildirilmemiÅŸ her tanıtıcı sadece bir kez raporlanır)" + + #: c-typeck.c:1468 + msgid "for each function it appears in.)" + msgstr "her iÅŸlev için içinde görünür.)" + + #: c-typeck.c:1485 + #, c-format + msgid "local declaration of `%s' hides instance variable" + msgstr "`%s' yerel bildirimi gerçekleme deÄŸiÅŸkenini gizliyor" + + #: c-typeck.c:1550 + msgid "called object is not a function" + msgstr "çaÄŸrılan nesne bir iÅŸlev deÄŸil" + + #: c-typeck.c:1637 cp/typeck.c:3133 + msgid "too many arguments to function" + msgstr "iÅŸlev için çok fazla argüman belirtildi" + + #: c-typeck.c:1658 + #, c-format + msgid "type of formal parameter %d is incomplete" + msgstr "%d biçimsel parametre türü tamamlanmayan türde" + + #: c-typeck.c:1671 + #, c-format + msgid "%s as integer rather than floating due to prototype" + msgstr "%s prototipten dolayı bir gerçel sayıdan çok bir tamsayı" + + #: c-typeck.c:1674 + #, c-format + msgid "%s as integer rather than complex due to prototype" + msgstr "%s prototipten dolayı bir karmaşık sayıdan çok bir tamsayı" + + #: c-typeck.c:1677 + #, c-format + msgid "%s as complex rather than floating due to prototype" + msgstr "%s prototipten dolayı bir gerçel sayıdan çok bir karmaşık sayı" + + #: c-typeck.c:1680 + #, c-format + msgid "%s as floating rather than integer due to prototype" + msgstr "%s prototipten dolayı bir tamsayıdan çok bir gerçel sayı" + + #: c-typeck.c:1683 + #, c-format + msgid "%s as complex rather than integer due to prototype" + msgstr "%s prototipten dolayı bir tamsayıdan çok bir karmaşık sayı" + + #: c-typeck.c:1686 + #, c-format + msgid "%s as floating rather than complex due to prototype" + msgstr "%s prototipten dolayı bir karmaşık sayıdan çok bir gerçel sayı" + + #: c-typeck.c:1696 + #, c-format + msgid "%s as `float' rather than `double' due to prototype" + msgstr "%s prototipten dolayı bir «double»dan çok bir «float»" + + #: c-typeck.c:1714 + #, c-format + msgid "%s with different width due to prototype" + msgstr "prototipten dolayı farklı geniÅŸlikle %s" + + #: c-typeck.c:1748 + #, c-format + msgid "%s as unsigned due to prototype" + msgstr "%s prototipten dolayı unsigned" + + #: c-typeck.c:1750 + #, c-format + msgid "%s as signed due to prototype" + msgstr "%s prototipten dolayı signed" + + #: c-typeck.c:1784 cp/typeck.c:3241 + msgid "too few arguments to function" + msgstr "iÅŸlev için çok az argüman belirtildi" + + #: c-typeck.c:1826 + msgid "suggest parentheses around + or - inside shift" + msgstr "shift içindeki + ya da - çevresinde parantezler önerilir" + + #: c-typeck.c:1833 + msgid "suggest parentheses around && within ||" + msgstr "|| içindeki && çevresinde parantezler önerilir" + + #: c-typeck.c:1842 + msgid "suggest parentheses around arithmetic in operand of |" + msgstr "| iÅŸlemimindeki aritmetik çevresinde parantezler önerilir" + + #: c-typeck.c:1845 + msgid "suggest parentheses around comparison in operand of |" + msgstr "| iÅŸlemimindeki karşılaÅŸtırma çevresinde parantezler önerilir" + + #: c-typeck.c:1854 + msgid "suggest parentheses around arithmetic in operand of ^" + msgstr "^ iÅŸlemimindeki aritmetik çevresinde parantezler önerilir" + + #: c-typeck.c:1857 + msgid "suggest parentheses around comparison in operand of ^" + msgstr "^ iÅŸlemimindeki karşılaÅŸtırma çevresinde parantezler önerilir" + + #: c-typeck.c:1864 + msgid "suggest parentheses around + or - in operand of &" + msgstr "& iÅŸlemimindeki + veya - çevresinde parantezler önerilir" + + #: c-typeck.c:1867 + msgid "suggest parentheses around comparison in operand of &" + msgstr "& iÅŸlemimindeki karşılaÅŸtırma çevresinde parantezler önerilir" + + #: c-typeck.c:1874 + msgid "comparisons like X<=Y<=Z do not have their mathematical meaning" + msgstr "X<=Y<=Z gibi bir karşılaÅŸtıma matematiksel olarak anlamlı deÄŸil" + + #: c-typeck.c:2034 c-typeck.c:2067 + msgid "division by zero" + msgstr "sıfırla bölme" + + #: c-typeck.c:2112 cp/typeck.c:3502 + msgid "right shift count is negative" + msgstr "saÄŸa kaydırma sayısı negatif" + + #: c-typeck.c:2119 cp/typeck.c:3508 + msgid "right shift count >= width of type" + msgstr "saÄŸa kaydırma sayısı türünden büyük yada eÅŸit" + + #: c-typeck.c:2144 cp/typeck.c:3527 + msgid "left shift count is negative" + msgstr "sola kaydırma sayısı negatif" + + #: c-typeck.c:2147 cp/typeck.c:3529 + msgid "left shift count >= width of type" + msgstr "sola kaydırma sayısı türünden büyük ya da eÅŸit" + + #: c-typeck.c:2172 + msgid "shift count is negative" + msgstr "kaydırma sayısı negatif" + + #: c-typeck.c:2174 + msgid "shift count >= width of type" + msgstr "kaydırma sayısı türünden büyük ya da eÅŸit" + + #: c-typeck.c:2195 cp/typeck.c:3564 + msgid "comparing floating point with == or != is unsafe" + msgstr "== veya != ile karşılaÅŸtırma gerçel sayılarda güvenli deÄŸil" + + #: c-typeck.c:2219 c-typeck.c:2225 + msgid "ISO C forbids comparison of `void *' with function pointer" + msgstr "ISO C `void *' ile iÅŸlev göstergesi karşılaÅŸtırmasına izin vermez" + + #: c-typeck.c:2228 c-typeck.c:2270 c-typeck.c:2298 + msgid "comparison of distinct pointer types lacks a cast" + msgstr "belirgin gösterge türlerinin karşılaÅŸtırması bir çevirim gerektirir" + + #: c-typeck.c:2243 c-typeck.c:2249 c-typeck.c:2319 c-typeck.c:2325 + msgid "comparison between pointer and integer" + msgstr "gösterge ile tamsayı arasında karşılaÅŸtırma" + + #: c-typeck.c:2265 c-typeck.c:2293 + msgid "ISO C forbids ordered comparisons of pointers to functions" + msgstr "ISO C iÅŸlev göstergelerinin düzenlenmiÅŸ karşılaÅŸtırmalarına izin vermez" + + #: c-typeck.c:2290 + msgid "comparison of complete and incomplete pointers" + msgstr "tamamlanmış ve içi boÅŸ göstergelerin karşılaÅŸtırması" + + #: c-typeck.c:2306 c-typeck.c:2313 + msgid "ordered comparison of pointer with integer zero" + msgstr "tamsayı sıfır ile göstergenin düzenlenmiÅŸ karşılaÅŸtırması" + + #: c-typeck.c:2339 cp/typeck.c:3697 + msgid "unordered comparison on non-floating point argument" + msgstr "gerçel sayı olmayan argümanlar arasında düzenlenmemiÅŸ karşılaÅŸtırma" + + #: c-typeck.c:2543 + msgid "comparison between signed and unsigned" + msgstr "signed ile unsigned arasında karşılaÅŸtırma" + + #: c-typeck.c:2589 cp/typeck.c:3943 + msgid "comparison of promoted ~unsigned with constant" + msgstr "sabitle yükseltgenmiÅŸ ~unsigned karşılaÅŸtırması" + + #: c-typeck.c:2597 cp/typeck.c:3951 + msgid "comparison of promoted ~unsigned with unsigned" + msgstr "unsigned ile ~unsigned'a yükseltgenmiÅŸ türlerin karşılaÅŸtırması" + + #: c-typeck.c:2656 + msgid "pointer of type `void *' used in subtraction" + msgstr "çıkartmada `void *' türünde gösterge kullanılmış" + + #: c-typeck.c:2658 + msgid "pointer to a function used in subtraction" + msgstr "çıkartmada iÅŸlev göstergesi kullanılmış" + + #: c-typeck.c:2755 + msgid "wrong type argument to unary plus" + msgstr "tekil artı iÅŸleminde yanlış tür argümanı" + + #: c-typeck.c:2766 + msgid "wrong type argument to unary minus" + msgstr "tekil eksi iÅŸleminde yanlış tür argümanı" + + #: c-typeck.c:2778 + msgid "ISO C does not support `~' for complex conjugation" + msgstr "ISO C karmaşık sayıların mantıksal çarpımında `~' desteklemez" + + #: c-typeck.c:2784 + msgid "wrong type argument to bit-complement" + msgstr "bit-tümler için yanlış tür argümanı" + + #: c-typeck.c:2795 + msgid "wrong type argument to abs" + msgstr "mutlak deÄŸer için yanlış tür argümanı" + + #: c-typeck.c:2807 + msgid "wrong type argument to conjugation" + msgstr "mantıksal çarpım için yanlış tür argümanı" + + #: c-typeck.c:2821 + msgid "wrong type argument to unary exclamation mark" + msgstr "tekil tümleyen için yanlış tür argümanı" + + #: c-typeck.c:2864 + msgid "ISO C does not support `++' and `--' on complex types" + msgstr "ISO C karmaşık sayı türlerinde `++' ve `--' desteklemez" + + #: c-typeck.c:2879 c-typeck.c:2911 + msgid "wrong type argument to increment" + msgstr "arttırımda yanlış türde argüman" + + #: c-typeck.c:2881 c-typeck.c:2913 + msgid "wrong type argument to decrement" + msgstr "eksiltmede yanlış türde argüman" + + #: c-typeck.c:2902 + msgid "increment of pointer to unknown structure" + msgstr "bilinmeyen yapı göstergesinde arttırma" + + #: c-typeck.c:2904 + msgid "decrement of pointer to unknown structure" + msgstr "bilinmeyen yapı göstergesinde eksiltme" + + #: c-typeck.c:3041 + msgid "ISO C forbids the address of a cast expression" + msgstr "ISO C çevirim ifadesi adresine izin vermez" + + #: c-typeck.c:3051 + msgid "invalid lvalue in unary `&'" + msgstr "tekil `&' için geçersiz sol taraf" + + #: c-typeck.c:3083 + #, c-format + msgid "attempt to take address of bit-field structure member `%s'" + msgstr "bit-alanı yapının `%s' üyesinin adresi alınmaya çalışılıyor" + + #: c-typeck.c:3192 c-typeck.c:4618 c-typeck.c:4634 c-typeck.c:4650 final.c:2981 final.c:2983 gcc.c:4462 rtl-error.c:121 tradcif.y:532 tradcpp.c:4134 config/cris/cris.c:515 cp/typeck.c:4650 java/expr.c:386 java/verify.c:1464 java/verify.c:1465 java/verify.c:1480 + #, c-format + msgid "%s" + msgstr "%s" + + #: c-typeck.c:3253 + msgid "ISO C forbids use of conditional expressions as lvalues" + msgstr "ISO C koÅŸullu ifadelerin sol tarafta kullanımına izin vermez." + + #: c-typeck.c:3256 + msgid "ISO C forbids use of compound expressions as lvalues" + msgstr "ISO C bileÅŸik ifadelerin sol tarafta kullanımına izin vermez." + + #: c-typeck.c:3259 + msgid "ISO C forbids use of cast expressions as lvalues" + msgstr "ISO C çevirim ifadelerin sol tarafta kullanımına izin vermez." + + #: c-typeck.c:3276 + #, c-format + msgid "%s of read-only member `%s'" + msgstr "salt-okunur üye `%2$s' için %1$s" + + #: c-typeck.c:3280 + #, c-format + msgid "%s of read-only variable `%s'" + msgstr "salt-okunur deÄŸiÅŸken `%2$s' için %1$s" + + #: c-typeck.c:3283 + #, c-format + msgid "%s of read-only location" + msgstr "salt-okunur konumun %s" + + #: c-typeck.c:3301 + #, c-format + msgid "cannot take address of bit-field `%s'" + msgstr "`%s' bit-alanının adresi alınamıyor" + + #: c-typeck.c:3329 + #, c-format + msgid "global register variable `%s' used in nested function" + msgstr "genel yazmaç deÄŸiÅŸkeni `%s' yuvalanmış iÅŸlevde kullanılmış" + + #: c-typeck.c:3333 + #, c-format + msgid "register variable `%s' used in nested function" + msgstr "yazmaç deÄŸiÅŸkeni `%s' yuvalanmış iÅŸlevde kullanılmış" + + #: c-typeck.c:3340 + #, c-format + msgid "address of global register variable `%s' requested" + msgstr "`%s' genel yazmaç deÄŸiÅŸkeninin adresi istenmiÅŸ" + + #: c-typeck.c:3352 + msgid "cannot put object with volatile field into register" + msgstr "gelgeç alanlı nesne yazmaça konulamaz" + + #: c-typeck.c:3356 + #, c-format + msgid "address of register variable `%s' requested" + msgstr "`%s' yazmaç deÄŸiÅŸkeninin adresi istendi" + + #: c-typeck.c:3464 + msgid "signed and unsigned type in conditional expression" + msgstr "koÅŸullu ifadede signed ve unsigned türler" + + #: c-typeck.c:3471 + msgid "ISO C forbids conditional expr with only one void side" + msgstr "ISO C tek taraflı void tür içeren koÅŸullu ifadelere izin vermez" + + #: c-typeck.c:3487 c-typeck.c:3494 + msgid "ISO C forbids conditional expr between `void *' and function pointer" + msgstr "ISO C `void *' ve iÅŸlev göstergesi arasında koÅŸullu ifadelere izin vermez" + + #: c-typeck.c:3500 + msgid "pointer type mismatch in conditional expression" + msgstr "koÅŸullu ifade içinde gösterge türü uyumsuzluÄŸu" + + #: c-typeck.c:3507 c-typeck.c:3517 + msgid "pointer/integer type mismatch in conditional expression" + msgstr "koÅŸullu ifadede gösterge/tamsayı tür uyumsuzluÄŸu" + + #: c-typeck.c:3531 + msgid "type mismatch in conditional expression" + msgstr "ÅŸartlı ifade içinde tür uyumsuzluÄŸu" + + #: c-typeck.c:3602 cp/typeck.c:4907 + msgid "left-hand operand of comma expression has no effect" + msgstr "virgüllü ifadenin sol terimi etkisiz" + + #: c-typeck.c:3641 + msgid "cast specifies array type" + msgstr "çevirim tür olarak dizi belirtiyor" + + #: c-typeck.c:3647 + msgid "cast specifies function type" + msgstr "çevirim tür olarak iÅŸlev belirtiyor" + + #: c-typeck.c:3657 + msgid "ISO C forbids casting nonscalar to the same type" + msgstr "ISO C skalar olmayandan aynı türe çevirime izin vermez" + + #: c-typeck.c:3676 + msgid "ISO C forbids casts to union type" + msgstr "ISO C union türe çevirime izin vermez" + + #: c-typeck.c:3692 + msgid "cast to union type from type not present in union" + msgstr "union içinde mevcut olmayan türden union türe çevirim" + + #: c-typeck.c:3743 + msgid "cast adds new qualifiers to function type" + msgstr "çevirim, iÅŸlev türüne yeni niteleyiciler ekliyor" + + #. There are qualifiers present in IN_OTYPE that are not + #. present in IN_TYPE. + #: c-typeck.c:3748 + msgid "cast discards qualifiers from pointer target type" + msgstr "çevirim, gösterge hedef türünden niteleyicileri iptal ediyor" + + #: c-typeck.c:3763 + msgid "cast increases required alignment of target type" + msgstr "çevirim hedef türün gerekli hizalamasını azaltıyor" + + #: c-typeck.c:3769 cp/typeck.c:5337 + msgid "cast from pointer to integer of different size" + msgstr "göstergeden farklı tamsayı türlere çevirim" + + #: c-typeck.c:3774 + msgid "cast does not match function type" + msgstr "çevirim iÅŸlev türle uyumsuz" + + #: c-typeck.c:3781 cp/typeck.c:5344 + msgid "cast to pointer from integer of different size" + msgstr "farklı türdeki tamsayıdan göstergeye çevirim" + + #. Now we have handled acceptable kinds of LHS that are not truly lvalues. + #. Reject anything strange now. + #: c-typeck.c:3939 + msgid "invalid lvalue in assignment" + msgstr "atama içinde sol taraf geçersiz" + + #. Convert new value to destination type. + #: c-typeck.c:3948 c-typeck.c:3973 c-typeck.c:3990 cp/typeck.c:5454 cp/typeck.c:5605 + msgid "assignment" + msgstr "atama" + + #: c-typeck.c:4157 c-typeck.c:4224 + #, c-format + msgid "%s makes qualified function pointer from unqualified" + msgstr "%s nitelemeyenden niteleyen iÅŸlev göstergesi yapıyor" + + #: c-typeck.c:4161 c-typeck.c:4204 + #, c-format + msgid "%s discards qualifiers from pointer target type" + msgstr "%s gösterge hedef türündeki niteleyicileri iptal ediyor" + + #: c-typeck.c:4167 + msgid "ISO C prohibits argument conversion to union type" + msgstr "ISO C union türe argüman dönüşümünü yasaklar" + + #: c-typeck.c:4196 + #, c-format + msgid "ISO C forbids %s between function pointer and `void *'" + msgstr "ISO C de iÅŸlev göstergesi ile `void *' arasındaki %s için izin verilmez" + + #: c-typeck.c:4213 + #, c-format + msgid "pointer targets in %s differ in signedness" + msgstr "%s gösterge hedefleri farklı signed'lıkta" + + #: c-typeck.c:4229 + #, c-format + msgid "%s from incompatible pointer type" + msgstr "uyumsuz gösterge türünden %s" + + #: c-typeck.c:4245 + #, c-format + msgid "%s makes pointer from integer without a cast" + msgstr "%s bir çevirim olmaksızın tamsayıdan gösterge yapıyor" + + #: c-typeck.c:4253 + #, c-format + msgid "%s makes integer from pointer without a cast" + msgstr "%s bir çevirim olmaksızın göstergeden tamsayı yapıyor" + + #: c-typeck.c:4267 c-typeck.c:4270 + #, c-format + msgid "incompatible type for argument %d of `%s'" + msgstr "`%2$s'nın %1$d. argümanı için tür uyumsuz" + + #: c-typeck.c:4274 + #, c-format + msgid "incompatible type for argument %d of indirect function call" + msgstr "dolaylı iÅŸlev çaÄŸrısının %d. argümanı için tür uyumsuz" + + #: c-typeck.c:4278 + #, c-format + msgid "incompatible types in %s" + msgstr "%s içinde uyumsuz türler" + + #. Function name is known; supply it. + #: c-typeck.c:4333 + #, c-format + msgid "passing arg %d of `%s'" + msgstr "`%2$s' iÅŸlevinin %1$d. argümanı aktarılıyor" + + #. Function name unknown (call through ptr); just give arg number. + #: c-typeck.c:4343 + #, c-format + msgid "passing arg %d of pointer to function" + msgstr "iÅŸlev göstergesinin %d. argümanı aktarılıyor" + + #: c-typeck.c:4410 + msgid "initializer for static variable is not constant" + msgstr "static deÄŸiÅŸken için ilklendirici bir sabit deÄŸil" + + #: c-typeck.c:4416 + msgid "initializer for static variable uses complicated arithmetic" + msgstr "static deÄŸiÅŸken için ilklendirici karmaşık aritmetik kullanıyor" + + #: c-typeck.c:4424 + msgid "aggregate initializer is not constant" + msgstr "küme ilklendiricisi bir sabit deÄŸil" + + #: c-typeck.c:4426 + msgid "aggregate initializer uses complicated arithmetic" + msgstr "küme ilklendiricisi karmaşık aritmetik kullanıyor" + + #: c-typeck.c:4433 + msgid "traditional C rejects automatic aggregate initialization" + msgstr "geleneksel C otomatik küme ilklendirmesini reddediyor" + + #: c-typeck.c:4621 c-typeck.c:4637 c-typeck.c:4653 + #, c-format + msgid "(near initialization for `%s')" + msgstr "(%s için near ilklendirme)" + + #: c-typeck.c:4705 cp/typeck2.c:513 + msgid "char-array initialized from wide string" + msgstr "karakter dizisinin ilklendiricisi olarak geniÅŸ dizge kullanılmış" + + #: c-typeck.c:4712 cp/typeck2.c:520 + msgid "int-array initialized from non-wide string" + msgstr "tamsayı dizisinin ilklendiricisi olarak geniÅŸ-olmayan dizge kullanılmış" + + #: c-typeck.c:4730 cp/typeck2.c:536 + msgid "initializer-string for array of chars is too long" + msgstr "karakter dizisi için dizge-ilklendirici çok uzun" + + #: c-typeck.c:4768 + msgid "array initialized from non-constant array expression" + msgstr "dizinin ilklendiricisi olarak sabit olmayan dizi ifadesi kullanılmış" + + #: c-typeck.c:4785 c-typeck.c:4787 c-typeck.c:4803 c-typeck.c:4824 c-typeck.c:6262 + msgid "initializer element is not constant" + msgstr "ilklendirici öğe bir sabit deÄŸil" + + #: c-typeck.c:4819 + msgid "initialization" + msgstr "ilklendirme" + + #: c-typeck.c:4830 c-typeck.c:6267 + msgid "initializer element is not computable at load time" + msgstr "baÅŸlangıç öğesi yükleme sırasında hesaplanabilir deÄŸil" + + #: c-typeck.c:4867 c-typeck.c:4883 cp/typeck2.c:613 + msgid "invalid initializer" + msgstr "geçersiz ilklendirici" + + #: c-typeck.c:5376 + msgid "extra brace group at end of initializer" + msgstr "ilklendiricinin sonunda fazladan parantezli grup" + + #: c-typeck.c:5396 + msgid "missing braces around initializer" + msgstr "ilklendiriciyi çevreleyen parantezler yok" + + #: c-typeck.c:5456 + msgid "braces around scalar initializer" + msgstr "skalar ilklendiriciyi kuÅŸatan parantezler" + + #: c-typeck.c:5504 + msgid "initialization of flexible array member in a nested context" + msgstr "içiçe baÄŸlam içinde esnek dizi üyesi ilklendirmesi" + + #: c-typeck.c:5506 + msgid "initialization of a flexible array member" + msgstr "esnek dizi üyesi ilklendirmesi" + + #: c-typeck.c:5537 + msgid "missing initializer" + msgstr "ilklendirici yok" + + #: c-typeck.c:5563 + msgid "empty scalar initializer" + msgstr "skalar ilklendirici boÅŸ" + + #: c-typeck.c:5568 + msgid "extra elements in scalar initializer" + msgstr "skalar ilklendiricide fazladan öğeler" + + #: c-typeck.c:5654 + msgid "initialization designators may not nest" + msgstr "ilklendirme tasarlayıcılar yuvalanamayabilir" + + #: c-typeck.c:5675 c-typeck.c:5746 + msgid "array index in non-array initializer" + msgstr "dizi-olmayan ilklendiricide dizi indisi" + + #: c-typeck.c:5680 c-typeck.c:5798 + msgid "field name not in record or union initializer" + msgstr "alan ismi kayıt ya da union ilklendiricisinde kullanılmamış" + + #: c-typeck.c:5742 c-typeck.c:5744 + msgid "nonconstant array index in initializer" + msgstr "ilklendiricide sabit-olmayan dizi indeksi" + + #: c-typeck.c:5749 + msgid "array index in initializer exceeds array bounds" + msgstr "ilklendiricideki dizi indeksi dizi sınırlarının dışında" + + #: c-typeck.c:5760 + msgid "empty index range in initializer" + msgstr "ilklendiricide indeks aralığı boÅŸ" + + #: c-typeck.c:5769 + msgid "array index range in initializer exceeds array bounds" + msgstr "ilklendiricideki dizi indeksi aralığı dizi sınırlarını aşıyor" + + #: c-typeck.c:5810 + #, c-format + msgid "unknown field `%s' specified in initializer" + msgstr "ilklendiricide bilinmeyen `%s' alanı belirtilmiÅŸ" + + #: c-typeck.c:5847 c-typeck.c:5868 c-typeck.c:6330 + msgid "initialized field with side-effects overwritten" + msgstr "yan-etkili ilklendirilmiÅŸ alanın üzerine yazıldı" + + #: c-typeck.c:6540 + msgid "excess elements in char array initializer" + msgstr "karakter dizisi ilklendiricide gereÄŸinden fazla öğe" + + #: c-typeck.c:6547 c-typeck.c:6593 + msgid "excess elements in struct initializer" + msgstr "struct ilklendiricide gereÄŸinden fazla öğe" + + #: c-typeck.c:6608 + msgid "non-static initialization of a flexible array member" + msgstr "esnek dizi üyesinin satatik olmayan ilklendirmesi" + + #: c-typeck.c:6670 + msgid "excess elements in union initializer" + msgstr "union ilklendiricide gereÄŸinden fazla öğe" + + #: c-typeck.c:6691 + msgid "traditional C rejects initialization of unions" + msgstr "geleneksel C union ilklendirmesini reddeder" + + #: c-typeck.c:6754 + msgid "excess elements in array initializer" + msgstr "dizi ilklendiricide gereÄŸinden fazla öğe" + + #: c-typeck.c:6783 + msgid "excess elements in vector initializer" + msgstr "vektör ilklendiricide gereÄŸinden fazla öğe" + + #: c-typeck.c:6805 + msgid "excess elements in scalar initializer" + msgstr "skalar ilklendiricide gereÄŸinden fazla öğe" + + #: c-typeck.c:6916 + msgid "asm template is not a string constant" + msgstr "asm ÅŸablon bir dizge sabit deÄŸil" + + #: c-typeck.c:6948 + msgid "invalid lvalue in asm statement" + msgstr "asm deyiminde geçersiz sol taraf" + + #: c-typeck.c:7019 + msgid "modification by `asm'" + msgstr "`asm' tarafından deÄŸiÅŸiklik" + + #: c-typeck.c:7038 cp/typeck.c:6453 + msgid "function declared `noreturn' has a `return' statement" + msgstr "`noreturn' olarak bildirilmiÅŸ iÅŸlev `return' deyimi içeriyor" + + #: c-typeck.c:7045 + msgid "`return' with no value, in function returning non-void" + msgstr "void olmayan dönüşlü iÅŸlevde `return' deyiminde deÄŸer yok" + + #: c-typeck.c:7051 + msgid "`return' with a value, in function returning void" + msgstr "void dönüşlü iÅŸlevde `return' deyimi deÄŸer içeriyor" + + #: c-typeck.c:7055 + msgid "return" + msgstr "dönen" + + #: c-typeck.c:7107 + msgid "function returns address of local variable" + msgstr "iÅŸlev yerel deÄŸiÅŸkenin adresi ile dönüyor" + + #: c-typeck.c:7163 cp/semantics.c:529 + msgid "switch quantity not an integer" + msgstr "switch büyüklüğü bir tamsayı deÄŸil" + + #: c-typeck.c:7173 + msgid "`long' switch expression not converted to `int' in ISO C" + msgstr "ISO C'de `long' switch ifadesi `int'e dönüştürülmez" + + #: c-typeck.c:7208 cp/decl.c:5232 + msgid "case label not within a switch statement" + msgstr "case etiketi bir switch deyimi içinde deÄŸil" + + #: c-typeck.c:7210 cp/decl.c:5237 + msgid "`default' label not within a switch statement" + msgstr "`default' etiketi bir switch deyimi içinde deÄŸil" + + #: calls.c:1902 + #, c-format + msgid "inlining failed in call to `%s'" + msgstr "`%s' çaÄŸrısında özümleme baÅŸarısız" + + #: calls.c:1903 calls.c:2209 + msgid "called from here" + msgstr " buradan çaÄŸrıldı" + + #: calls.c:2208 + #, c-format + msgid "can't inline call to `%s'" + msgstr "`%s' çaÄŸrısı `inline' olamaz" + + #: calls.c:2238 + msgid "function call has aggregate value" + msgstr "iÅŸlev çaÄŸrısı küme deÄŸeri içeriyor" + + #: calls.c:4545 + msgid "variable offset is passed partially in stack and in reg" + msgstr "deÄŸiÅŸkenin göreli konumu kısmen yığında kısmende yazmaçta aktarılmış" + + #: calls.c:4547 + msgid "variable size is passed partially in stack and in reg" + msgstr "deÄŸiÅŸken boyutu hem yığın hem de yazmaç içine aktarılmış" + + #: cfgrtl.c:1624 + #, c-format + msgid "end insn %d for block %d not found in the insn stream" + msgstr "%2$d. bloÄŸunun son komutu %1$d komut akışı içinde yok." + + #: cfgrtl.c:1638 + #, c-format + msgid "insn %d is in multiple basic blocks (%d and %d)" + msgstr "komut %d birden fazla temel bloÄŸun içinde (%d ve %d)" + + #: cfgrtl.c:1650 + #, c-format + msgid "head insn %d for block %d not found in the insn stream" + msgstr "%2$d. bloÄŸun ilk komutu %1$d komut akışı içinde yok." + + #: cfgrtl.c:1669 + #, c-format + msgid "verify_flow_info: Duplicate edge %i->%i" + msgstr "verify_flow_info: yinelenmiÅŸ kenar %i->%i" + + #: cfgrtl.c:1688 + #, c-format + msgid "verify_flow_info: Incorrect blocks for fallthru %i->%i" + msgstr "verify_flow_info: ardcıl %i->%i için blok sayısı yanlış" + + #: cfgrtl.c:1703 + #, c-format + msgid "verify_flow_info: Incorrect fallthru %i->%i" + msgstr "verify_flow_info: ardcıl %i->%i yanlış" + + #: cfgrtl.c:1705 + msgid "wrong insn in the fallthru edge" + msgstr "ardcıl kenarda yanlış komut" + + #: cfgrtl.c:1712 + #, c-format + msgid "verify_flow_info: Basic block %d succ edge is corrupted" + msgstr "verify_flow_info: %d. temel bloÄŸun ardıl kenarı bozuk" + + #: cfgrtl.c:1736 + #, c-format + msgid "missing barrier after block %i" + msgstr "%i. bloktan sonraki sınır eksik" + + #: cfgrtl.c:1746 + #, c-format + msgid "basic block %d pred edge is corrupted" + msgstr "%d. temel bloÄŸun öncel kenarı bozuk" + + #: cfgrtl.c:1763 + #, c-format + msgid "insn %d inside basic block %d but block_for_insn is NULL" + msgstr "komut %d %d. temel bloÄŸun içinde ama block_for_insn NULL" + + #: cfgrtl.c:1767 + #, c-format + msgid "insn %d inside basic block %d but block_for_insn is %i" + msgstr "komut %d %d. temel bloÄŸun içinde ama block_for_insn %i" + + #: cfgrtl.c:1781 cfgrtl.c:1791 + #, c-format + msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d" + msgstr "NOTE_INSN_BASIC_BLOCK %d. blok için eksik" + + #: cfgrtl.c:1804 + #, c-format + msgid "NOTE_INSN_BASIC_BLOCK %d in middle of basic block %d" + msgstr "%d. NOTE_INSN_BASIC_BLOCK %d. temel bloÄŸun ortasında" + + #: cfgrtl.c:1816 + #, c-format + msgid "in basic block %d:" + msgstr "%d. temel blok içinde:" + + #: cfgrtl.c:1817 + msgid "flow control insn inside a basic block" + msgstr "akış kontrol komutu bir temel bloÄŸun içinde" + + #: cfgrtl.c:1836 + #, c-format + msgid "basic block %i edge lists are corrupted" + msgstr "temel blok %i kenar listesi bozuk" + + #: cfgrtl.c:1850 + msgid "basic blocks not numbered consecutively" + msgstr "temel bloklar ardışık olarak numaralı deÄŸil" + + #: cfgrtl.c:1875 + msgid "insn outside basic block" + msgstr "komut temel bloÄŸun dışında" + + #: cfgrtl.c:1883 + msgid "return not followed by barrier" + msgstr "return'den sonra sınır gelmiyor" + + #: cfgrtl.c:1888 + #, c-format + msgid "number of bb notes in insn chain (%d) != n_basic_blocks (%d)" + msgstr "komut zinciri (%d) içindeki bb notlarının sayısı != n_basic_blocks (%d)" + + #: cfgrtl.c:1892 + msgid "verify_flow_info failed" + msgstr "verify_flow_info baÅŸarısız" + + #: collect2.c:439 + msgid "internal error" + msgstr "iç hata" + + #: collect2.c:940 + msgid "no arguments" + msgstr "argüman yok" + + #: collect2.c:1269 collect2.c:1417 collect2.c:1450 + #, c-format + msgid "fopen %s" + msgstr "fopen %s" + + #: collect2.c:1272 collect2.c:1422 collect2.c:1453 + #, c-format + msgid "fclose %s" + msgstr "fclose %s" + + #: collect2.c:1281 + #, c-format + msgid "collect2 version %s" + msgstr "collect2 %s sürümü" + + #: collect2.c:1371 + #, c-format + msgid "%d constructor(s) found\n" + msgstr "%d kurucu bulundu\n" + + #: collect2.c:1372 + #, c-format + msgid "%d destructor(s) found\n" + msgstr "%d serbestleÅŸtirici bulundu\n" + + #: collect2.c:1373 + #, c-format + msgid "%d frame table(s) found\n" + msgstr "%d çerçeve tablosu bulundu\n" + + #: collect2.c:1514 + #, c-format + msgid "%s terminated with signal %d [%s]%s" + msgstr "%s %d sinyali ile sonlandırıldı [%s]%s" + + #: collect2.c:1533 + #, c-format + msgid "%s returned %d exit status" + msgstr "%s %d çıkış durumu ile sonuçlandı" + + #: collect2.c:1561 + #, c-format + msgid "[cannot find %s]" + msgstr "[%s bulunamıyor]" + + #: collect2.c:1576 + #, c-format + msgid "cannot find `%s'" + msgstr "`%s' bulunamıyor" + + #: collect2.c:1587 collect2.c:1590 + #, c-format + msgid "redirecting stdout: %s" + msgstr "standart çıktıya yönlendirme: %s" + + #: collect2.c:1633 + #, c-format + msgid "[Leaving %s]\n" + msgstr "[%s bırakılıyor]\n" + + #: collect2.c:1876 + #, c-format + msgid "" + "\n" + "write_c_file - output name is %s, prefix is %s\n" + msgstr "" + "\n" + "write_c_file - çıktı ismi %s, önek %s\n" + + #: collect2.c:2089 + msgid "cannot find `nm'" + msgstr "`nm' bulunamıyor" + + #: collect2.c:2099 collect2.c:2541 + msgid "pipe" + msgstr "veri yolu" + + #: collect2.c:2103 collect2.c:2545 + msgid "fdopen" + msgstr "fdopen" + + #: collect2.c:2129 collect2.c:2571 + #, c-format + msgid "dup2 %d 1" + msgstr "dup2 %d 1" + + #: collect2.c:2132 collect2.c:2135 collect2.c:2148 collect2.c:2574 collect2.c:2577 collect2.c:2590 + #, c-format + msgid "close %d" + msgstr "close %d" + + #: collect2.c:2138 + #, c-format + msgid "execvp %s" + msgstr "execvp %s" + + #: collect2.c:2192 + #, c-format + msgid "init function found in object %s" + msgstr "init iÅŸlevi %s nesnesinde bulundu" + + #: collect2.c:2200 + #, c-format + msgid "fini function found in object %s" + msgstr "fini iÅŸlevi %s nesnesinde bulundu" + + #: collect2.c:2223 collect2.c:2629 + msgid "fclose" + msgstr "fclose" + + #: collect2.c:2268 + #, c-format + msgid "unable to open file '%s'" + msgstr "'%s' dosyası açılamıyor" + + #: collect2.c:2270 + #, c-format + msgid "unable to stat file '%s'" + msgstr "'%s' dosyası durumlanamıyor" + + #: collect2.c:2276 + #, c-format + msgid "unable to mmap file '%s'" + msgstr "'%s' dosyası mmap'lenemiyor" + + #: collect2.c:2429 + msgid "not found\n" + msgstr "yok\n" + + #: collect2.c:2431 collect2.c:2608 + #, c-format + msgid "dynamic dependency %s not found" + msgstr "%s dinamik bağımlılığı yok" + + #: collect2.c:2451 + #, c-format + msgid "bad magic number in file '%s'" + msgstr "'%s' dosyasında sihirli sayı hatalı" + + #: collect2.c:2473 + msgid "dynamic dependencies.\n" + msgstr "dinamik bağımlılıklar.\n" + + #: collect2.c:2532 + msgid "cannot find `ldd'" + msgstr "`ldd' bulunamıyor" + + #: collect2.c:2580 + #, c-format + msgid "execv %s" + msgstr "execv %s" + + #: collect2.c:2593 + msgid "" + "\n" + "ldd output with constructors/destructors.\n" + msgstr "" + "\n" + "kuruculu/yıkıcılı ldd çıktısı.\n" + + #: collect2.c:2620 + #, c-format + msgid "unable to open dynamic dependency '%s'" + msgstr "'%s' dinamik bağımlılığı açılamıyor" + + #: collect2.c:2734 + #, c-format + msgid "%s: not a COFF file" + msgstr "%s: bir COFF dosyası deÄŸil" + + #: collect2.c:2853 + #, c-format + msgid "%s: cannot open as COFF file" + msgstr "%s: bir COFF dosyası olarak açılamıyor" + + #: collect2.c:2909 + #, c-format + msgid "library lib%s not found" + msgstr "lib%s kitaplığı bulunamadı" + + #: collect2.c:3038 + #, c-format + msgid "open %s" + msgstr "open %s" + + #: collect2.c:3061 + msgid "incompatibilities between object file & expected values" + msgstr "nesne dosyası ile umulan deÄŸerler arasında uyumsuzluklar var" + + #: collect2.c:3134 + #, c-format + msgid "" + "\n" + "Processing symbol table #%d, offset = 0x%.8lx, kind = %s\n" + msgstr "" + "\n" + "İşlenen sembol tablosu #%d, göreli konumu = 0x%.8lx, cinsi = %s\n" + + #: collect2.c:3143 + msgid "string section missing" + msgstr "dizge bölümü yok" + + #: collect2.c:3146 + msgid "section pointer missing" + msgstr "bölüm göstergesi yok" + + #: collect2.c:3194 + msgid "no symbol table found" + msgstr "hiç sembol tablosu yok" + + #: collect2.c:3207 + msgid "no cmd_strings found" + msgstr "hiç komut-dizgesi yok" + + #: collect2.c:3219 + msgid "" + "\n" + "Updating header and load commands.\n" + "\n" + msgstr "" + "\n" + "BaÅŸlık ve yük komutları güncelleniyor.\n" + "\n" + + #: collect2.c:3226 + #, c-format + msgid "load command map, %d cmds, new size %ld.\n" + msgstr "yükleme komutu eÅŸlemi, %d komut, yeni boyut %ld.\n" + + #: collect2.c:3257 + msgid "" + "writing load commands.\n" + "\n" + msgstr "" + "yük komutları yazılıyor.\n" + "\n" + + #: collect2.c:3277 + #, c-format + msgid "close %s" + msgstr "close %s" + + #: collect2.c:3351 + msgid "could not convert 0x%l.8x into a region" + msgstr "0x%l.8x bir bölge içine dönüştürülemedi" + + #: collect2.c:3355 + #, c-format + msgid "%s function, region %d, offset = %ld (0x%.8lx)\n" + msgstr "%s iÅŸlev, %d bölge, offset = %ld (0x%.8lx)\n" + + #: collect2.c:3482 + msgid "bad magic number" + msgstr "sihirli sayı hatalı" + + #: collect2.c:3483 + msgid "bad header version" + msgstr "baÅŸlık sürümü hatalı" + + #: collect2.c:3484 + msgid "bad raw header version" + msgstr "temel baÅŸlık sürümü hatalı" + + #: collect2.c:3485 + msgid "raw header buffer too small" + msgstr "temel baÅŸlık tamponu çok küçük" + + #: collect2.c:3486 + msgid "old raw header file" + msgstr "eski temel baÅŸlık dosyası" + + #: collect2.c:3487 + msgid "unsupported version" + msgstr "desteklenmeyen sürüm" + + #: collect2.c:3489 + #, c-format + msgid "unknown {de,en}code_mach_o_hdr return value %d" + msgstr "bilinmeyen {de,en}code_mach_o_hdr sonuç deÄŸeri %d" + + #: collect2.c:3509 + #, c-format + msgid "fstat %s" + msgstr "fstat %s" + + #: collect2.c:3546 collect2.c:3594 + #, c-format + msgid "lseek %s 0" + msgstr "lseek %s 0" + + #: collect2.c:3550 + #, c-format + msgid "read %s" + msgstr "read %s" + + #: collect2.c:3553 + #, c-format + msgid "read %ld bytes, expected %ld, from %s" + msgstr "%3$s'den %2$ld bayt okunması umulurken %1$ld bayt okundu" + + #: collect2.c:3574 + #, c-format + msgid "msync %s" + msgstr "msync %s" + + #: collect2.c:3581 + #, c-format + msgid "munmap %s" + msgstr "munmap %s" + + #: collect2.c:3598 + #, c-format + msgid "write %s" + msgstr "write %s" + + #: collect2.c:3601 + #, c-format + msgid "wrote %ld bytes, expected %ld, to %s" + msgstr "%3$s'e %2$ld bayt yazılması umulurken %1$ld bayt yazıldı" + + #: combine.c:12769 + #, c-format + msgid "" + ";; Combiner statistics: %d attempts, %d substitutions (%d requiring new space),\n" + ";; %d successes.\n" + "\n" + msgstr "" + ";; Karıştırıcı istatistikleri: %d deneme, %d ikame (%d yeni alan gerekir),\n" + ";; %d baÅŸarı.\n" + "\n" + + #: combine.c:12779 + #, c-format + msgid "" + "\n" + ";; Combiner totals: %d attempts, %d substitutions (%d requiring new space),\n" + ";; %d successes.\n" + msgstr "" + "\n" + ";; BirleÅŸtirici toplamları: %d deneme, %d ikame (%d yeni alan gerekir),\n" + ";; %d baÅŸarılı.\n" + + #: convert.c:67 + msgid "cannot convert to a pointer type" + msgstr "bir gösterge türüne dönüştürülemez" + + #: convert.c:100 + msgid "pointer value used where a floating point value was expected" + msgstr "bir gerçel sayı deÄŸer umulurken gösterge deÄŸer kullanılmış" + + #: convert.c:104 + msgid "aggregate value used where a float was expected" + msgstr "bir gerçel sayı umulurken küme deÄŸeri kullanılmış" + + #: convert.c:130 + msgid "conversion to incomplete type" + msgstr "tamamlanmamış türe dönüşüm" + + #: convert.c:390 convert.c:470 + msgid "can't convert between vector values of different size" + msgstr "farklı boydaki vektör deÄŸerleri arasında dönüşüm yapılamaz" + + #: convert.c:396 + msgid "aggregate value used where an integer was expected" + msgstr "bir tamsayı gerekirken küme deÄŸeri kullanılmış" + + #: convert.c:448 f/com.c:1073 + msgid "pointer value used where a complex was expected" + msgstr "karmaşık sayı gereken yerde gösterge deÄŸeri kullanılmış" + + #: convert.c:452 f/com.c:1075 + msgid "aggregate value used where a complex was expected" + msgstr "karmaşık sayı gereken yerde küme deÄŸeri kullanılmış" + + #: convert.c:476 + msgid "can't convert value to a vector" + msgstr "deÄŸer bir vektöre dönüştürülemez" + + #: cpperror.c:125 + msgid "internal error: " + msgstr "iç hata: " + + #: cpperror.c:132 tradcpp.c:4690 + msgid "warning: " + msgstr "uyarı: " + + #: cpperror.c:209 cpperror.c:299 cppfiles.c:691 gcc.c:6307 tradcpp.c:4728 + #, c-format + msgid "%s: %s" + msgstr "%s: %s" + + #: cppexp.c:154 + msgid "floating point numbers are not valid in #if" + msgstr "#if ifadesinde gerçel sayılar geçersiz" + + #: cppexp.c:176 + msgid "traditional C rejects the `U' suffix" + msgstr "geleneksel C `U' sonekini reddeder" + + #: cppexp.c:179 + msgid "too many 'l' suffixes in integer constant" + msgstr "tamsayı sabitteki 'l' soneklerinin sayısı çok fazla" + + #: cppexp.c:183 + msgid "integer constant contains digits beyond the radix" + msgstr "tamsayı sabit tabanı aÅŸan rakamlar içeriyor" + + #: cppexp.c:186 + msgid "integer constant out of range" + msgstr "tamsayı sabit kapsamdışı" + + #: cppexp.c:192 + msgid "integer constant is so large that it is unsigned" + msgstr "tamsayı sabit unsigned olarak oldukça büyük" + + #: cppexp.c:201 + #, c-format + msgid "invalid suffix '%.*s' on integer constant" + msgstr "tamsayı sabitte sonek '%.*s' geçersiz" + + #: cppexp.c:234 + msgid "missing ')' after \"defined\"" + msgstr "\"defined\" dan sonra ')' eksik" + + #: cppexp.c:240 + msgid "operator \"defined\" requires an identifier" + msgstr "\"defined\" iÅŸlemimi bir tanımlayıcı gerektirir" + + #: cppexp.c:248 + #, c-format + msgid "(\"%s\" is an alternative token for \"%s\" in C++)" + msgstr "(C++'da \"%s\" \"%s\" için bir alternatif dizgeciktir)" + + #: cppexp.c:259 + msgid "this use of \"defined\" may not be portable" + msgstr "\"defined\" bu kullanımıyla uyarlanabilir olmayabilir" + + #: cppexp.c:307 + msgid "string constants are not valid in #if" + msgstr "#if ifadesinde dizge sabitler geçersiz" + + #: cppexp.c:311 + #, c-format + msgid "invalid character '%c' in #if" + msgstr "#if ifadesinde geçersiz karakter '%c'" + + #: cppexp.c:313 + #, c-format + msgid "invalid character '\\%03o' in #if" + msgstr "#if içinde '\\%03o' karakteri geçersiz" + + #: cppexp.c:330 + #, c-format + msgid "ISO C++ does not permit \"%s\" in #if" + msgstr "ISO C++ #if içinde \"%s\" kullanımına izin vermez" + + #: cppexp.c:341 + #, c-format + msgid "\"%s\" is not defined" + msgstr "\"%s\" tanımlı deÄŸil" + + #: cppexp.c:367 + #, c-format + msgid "\"%s\" is not valid in #if expressions" + msgstr "#if ifadelerinde \"%s\" geçersizdir" + + #: cppexp.c:382 + msgid "integer overflow in preprocessor expression" + msgstr "öniÅŸlemci ifadesinde tamsayı taÅŸması" + + #: cppexp.c:612 + msgid "missing binary operator" + msgstr "iki terimli iÅŸlemimi eksik" + + #: cppexp.c:647 + msgid "void expression between '(' and ')'" + msgstr "'(' ve ')' arasında void ifade" + + #: cppexp.c:649 + #, c-format + msgid "operator '%s' has no right operand" + msgstr "`%s' iÅŸlemiminin saÄŸ tarafı yok" + + #: cppexp.c:661 + #, c-format + msgid "impossible operator '%s'" + msgstr "iÅŸlemimi '%s' imkansız" + + #: cppexp.c:737 tradcif.y:111 tradcif.y:122 + msgid "division by zero in #if" + msgstr "#if içinde sıfırla bölme" + + #: cppexp.c:771 + msgid "comma operator in operand of #if" + msgstr "#if'in teriminde virgül" + + #: cppexp.c:776 + msgid "syntax error '?' without following ':'" + msgstr "sözdizimi hatası '?' dan sonra ':' yok" + + #: cppexp.c:779 + msgid "syntax error ':' without preceding '?'" + msgstr "sözdizimi hatası ':' den önce '?' yok" + + #: cppexp.c:787 + msgid "missing ')' in expression" + msgstr "ifadede ')' eksik" + + #: cppexp.c:794 + msgid "missing '(' in expression" + msgstr "ifadede '(' eksik" + + #: cppexp.c:820 + #, c-format + msgid "missing binary operator before '%s'" + msgstr "`%s' den önce iki terimli iÅŸlemimi eksik" + + #: cppexp.c:826 + #, c-format + msgid "operator '%s' has no left operand" + msgstr "`%s' iÅŸlemiminin sol tarafı yok" + + #: cppexp.c:864 + msgid "unbalanced stack in #if" + msgstr "#if ifadesinde karşılıksız yığın" + + #: cppexp.c:867 + msgid "#if with no expression" + msgstr "#if ifadesiz" + + #: cppfiles.c:395 + #, c-format + msgid "%s is too large" + msgstr "%s çok büyük" + + #: cppfiles.c:426 + #, c-format + msgid "%s is shorter than expected" + msgstr "%s beklenenden daha kısa" + + #: cppfiles.c:440 + #, c-format + msgid "%s is a block device" + msgstr "%s bir blok aygıtıdır" + + #: cppfiles.c:566 + #, c-format + msgid "no include path in which to find %s" + msgstr "%s arama yolunda include dosyaları yok" + + #: cppfiles.c:639 + msgid "Multiple include guards may be useful for:\n" + msgstr "Çoklu include önlemleri aÅŸağıdakiler için kullanışlı olabilir:\n" + + #: cppfiles.c:1029 + msgid "absolute file name in remap_filename" + msgstr "remap_filename içinde mutlak dosya ismi" + + #: cppinit.c:230 + #, c-format + msgid "ignoring nonexistent directory \"%s\"\n" + msgstr " olmayan \"%s\" dizini yoksayılıyor\n" + + #: cppinit.c:237 + #, c-format + msgid "%s: Not a directory" + msgstr "%s: Bir dizin deÄŸil" + + #: cppinit.c:284 + #, c-format + msgid "ignoring duplicate directory \"%s\"\n" + msgstr "tekrar belirtilen \"%s\" dizini yoksayılıyor\n" + + #: cppinit.c:312 + #, c-format + msgid "changing search order for system directory \"%s\"" + msgstr "sistem dizini \"%s\" için arama sırası" + + #: cppinit.c:316 + #, c-format + msgid " as it is the same as non-system directory \"%s\"" + msgstr "sistem dizini olmayan \"%s\" dizini ile aynı olacak ÅŸekilde deÄŸiÅŸtiriliyor" + + #: cppinit.c:320 + msgid " as it has already been specified as a non-system directory" + msgstr "belirtilmÅŸ olması gereken bir sistem dizini olmayan dizin olarak deÄŸiÅŸtiriliyor" + + #: cppinit.c:936 + msgid "#include \"...\" search starts here:\n" + msgstr "#include \"...\" araması buradan baÅŸlıyor:\n" + + #: cppinit.c:940 + msgid "#include <...> search starts here:\n" + msgstr "#include <...> araması buradan baÅŸlıyor:\n" + + #: cppinit.c:943 + msgid "End of search list.\n" + msgstr "Arama listesi sonu.\n" + + #: cppinit.c:1010 + msgid "" + msgstr "" + + #: cppinit.c:1012 + msgid "" + msgstr "" + + #: cppinit.c:1108 tradcpp.c:979 tradcpp.c:989 tradcpp.c:1080 + msgid "I/O error on output" + msgstr "Çıktıda G/Ç hatası" + + #. Irix6 "cc -n32" and OSF4 cc have problems with char foo[] = ("string"); + #. I.e. a const string initializer with parens around it. That is + #. what N_("string") resolves to, so we make no_* be macros instead. + #: cppinit.c:1156 + #, c-format + msgid "argument missing after %s" + msgstr "%s den sonraki argüman eksik" + + #: cppinit.c:1157 + #, c-format + msgid "assertion missing after %s" + msgstr "%s den sonra olumlama eksik" + + #: cppinit.c:1158 + #, c-format + msgid "directory name missing after %s" + msgstr "%s den sonra dizin ismi eksik" + + #: cppinit.c:1159 + #, c-format + msgid "file name missing after %s" + msgstr "%s den sonra dosya ismi eksik" + + #: cppinit.c:1160 + #, c-format + msgid "macro name missing after %s" + msgstr "%s den sonra makro ismi eksik" + + #: cppinit.c:1161 + #, c-format + msgid "path name missing after %s" + msgstr "%s den sonra dosya yolu ismi eksik" + + #: cppinit.c:1162 + #, c-format + msgid "number missing after %s" + msgstr "%s den sonra sayı eksik" + + #: cppinit.c:1163 + #, c-format + msgid "target missing after %s" + msgstr "%s den sonraki hedef eksik" + + #: cppinit.c:1351 + #, c-format + msgid "too many filenames. Type %s --help for usage info" + msgstr "dosya sayısı çok fazla. Kullanım bilgileri için %s --help yazınız" + + #: cppinit.c:1541 tradcpp.c:610 + msgid "output filename specified twice" + msgstr "çıktı dosyasının ismi iki kere belirtilmiÅŸ" + + #: cppinit.c:1653 + msgid "-I- specified twice" + msgstr "-I- iki kere belirtilmiÅŸ" + + #: cppinit.c:1794 + #, c-format + msgid "GNU CPP version %s (cpplib)" + msgstr "GNU CPP %s sürümü (cpplib)" + + #: cppinit.c:1835 tradcpp.c:803 + msgid "you must additionally specify either -M or -MM" + msgstr "ek olarak ya -M ya da -MM belirtmelisiniz" + + #. To keep the lines from getting too long for some compilers, limit + #. to about 500 characters (6 lines) per chunk. + #: cppinit.c:1896 + msgid "" + "Switches:\n" + " -include Include the contents of before other files\n" + " -imacros Accept definition of macros in \n" + " -iprefix Specify as a prefix for next two options\n" + " -iwithprefix Add to the end of the system include path\n" + " -iwithprefixbefore Add to the end of the main include path\n" + " -isystem Add to the start of the system include path\n" + msgstr "" + "Seçenekler:\n" + " -include DOSYA DiÄŸer dosyalardan önce DOSYA içeriÄŸi içerilir\n" + " -imacros DOSYA DOSYAdaki makrolar kabul edilir\n" + " -iprefix DOSYAYOLU AÅŸağıdaki iki seçenek için önek olarak DOSYAYOLU\n" + " -iwithprefix DİZİN Sistem include dosya yolunun sonuna DİZİN eklenir\n" + " -iwithprefixbefore DİZİN Ana include dosya yolunun sonuna DİZİN eklenir\n" + " -isystem DİZİN Sistem include dosya yolunun başına DİZİN eklenir\n" + + #: cppinit.c:1905 + msgid "" + " -idirafter Add to the end of the system include path\n" + " -I Add to the end of the main include path\n" + " -I- Fine-grained include path control; see info docs\n" + " -nostdinc Do not search system include directories\n" + " (dirs specified with -isystem will still be used)\n" + " -nostdinc++ Do not search system include directories for C++\n" + " -o Put output into \n" + msgstr "" + " -idirafter DİZİN Sistem include dosya yolunun sonuna DİZİN eklenir\n" + " -I DİZİN Ana include dosya yolunun sonuna DİZİN eklenir\n" + " -I- İnceden inceye include dosya yolu denetimi;\n" + " Daha fazla bilgi için belgelere bakınız\n" + " -nostdinc Sistem include dizinleri için arama yapılmaz\n" + " (-isystem ile belirtilen dizinler kullanılacak)\n" + " -nostdinc++ C++ için sistem include dizinleri araması yapılmaz\n" + " -o DOSYA Çıktı DOSYAya yazılır\n" + + #: cppinit.c:1914 + msgid "" + " -pedantic Issue all warnings demanded by strict ISO C\n" + " -pedantic-errors Issue -pedantic warnings as errors instead\n" + " -trigraphs Support ISO C trigraphs\n" + " -lang-c Assume that the input sources are in C\n" + " -lang-c89 Assume that the input sources are in C89\n" + msgstr "" + " -pedantic ISO C gereksinimlerine baÄŸlı tüm uyarılar verilir\n" + " -pedantic-errors -pedantic uyarıları hata olarak verilir\n" + " -trigraphs ISO C üçlü harfleri desteklenir\n" + " -lang-c Girdi kaynakları C'de deÄŸerlendirilir\n" + " -lang-c89 Girdi kaynakları C89'da deÄŸerlendirilir\n" + + #: cppinit.c:1921 + msgid "" + " -lang-c++ Assume that the input sources are in C++\n" + " -lang-objc Assume that the input sources are in ObjectiveC\n" + " -lang-objc++ Assume that the input sources are in ObjectiveC++\n" + " -lang-asm Assume that the input sources are in assembler\n" + msgstr "" + " -lang-c++ Girdi kaynakları C++'da deÄŸerlendirilir\n" + " -lang-objc Girdi kaynakları ObjectiveC'de deÄŸerlendirilir\n" + " -lang-objc++ Girdi kaynakları ObjectiveC++'da deÄŸerlendirilir\n" + " -lang-asm Girdi kaynakları çeviricide deÄŸerlendirilir\n" + + #: cppinit.c:1927 + msgid "" + " -std= Specify the conformance standard; one of:\n" + " gnu89, gnu99, c89, c99, iso9899:1990,\n" + " iso9899:199409, iso9899:1999\n" + " -+ Allow parsing of C++ style features\n" + " -w Inhibit warning messages\n" + " -Wtrigraphs Warn if trigraphs are encountered\n" + " -Wno-trigraphs Do not warn about trigraphs\n" + " -Wcomment{s} Warn if one comment starts inside another\n" + msgstr "" + " -std= AÅŸağıdaki uyum standartlarından biri belirtilir:\n" + " gnu89, gnu99, c89, c99, iso9899:1990,\n" + " iso9899:199409, iso9899:1999\n" + " -+ C++ tarzı özelliklerin ayrıştırılabilmesini saÄŸlar\n" + " -w Uyarı iletileri engellenir\n" + " -Wtrigraphs Üçlü harfler saptandığında uyarı verilir\n" + " -Wno-trigraphs Üçlü harfler hakkında uyarı verilmez\n" + " -Wcomment{s} İç içe açıklamalar için uyarı verilir\n" + + #: cppinit.c:1937 + msgid "" + " -Wno-comment{s} Do not warn about comments\n" + " -Wtraditional Warn about features not present in traditional C\n" + " -Wno-traditional Do not warn about traditional C\n" + " -Wundef Warn if an undefined macro is used by #if\n" + " -Wno-undef Do not warn about testing undefined macros\n" + " -Wimport Warn about the use of the #import directive\n" + msgstr "" + " -Wno-comment{s} Açıklamalar hakkında uyarı verilmez\n" + " -Wtraditional Geleneksel C'de bulunmayan özellikler için uyarır\n" + " -Wno-traditional Geleneksel C hakkında uyarı verilmez\n" + " -Wundef undef'li bir makro #if ile atanmışsa uyarır\n" + " -Wno-undef undef'li makrolar hakkında uyarı verilmez\n" + " -Wimport #import yönergesi kullanımı hakkında uyarır\n" + + #: cppinit.c:1945 + msgid "" + " -Wno-import Do not warn about the use of #import\n" + " -Werror Treat all warnings as errors\n" + " -Wno-error Do not treat warnings as errors\n" + " -Wsystem-headers Do not suppress warnings from system headers\n" + " -Wno-system-headers Suppress warnings from system headers\n" + " -Wall Enable all preprocessor warnings\n" + msgstr "" + " -Wno-import #import kullanımı hakkıda uyarı verilmez\n" + " -Werror Tüm uyarılar hata olarak deÄŸerlendirilir\n" + " -Wno-error Uyarılar hata olarak deÄŸerlendirilmez\n" + " -Wsystem-headers Sistem baÅŸlık dosyalarından kaynaklanan uyarılar\n" + " verilir\n" + " -Wno-system-headers Sistem baÅŸlık dosyalarından kaynaklanan uyarılar\n" + " engellenir\n" + " -Wall Tüm öniÅŸlemci uyarıları verilir\n" + + #: cppinit.c:1953 + msgid "" + " -M Generate make dependencies\n" + " -MM As -M, but ignore system header files\n" + " -MD Generate make dependencies and compile\n" + " -MMD As -MD, but ignore system header files\n" + " -MF Write dependency output to the given file\n" + " -MG Treat missing header file as generated files\n" + msgstr "" + " -M make bağımlılıkları üretilir\n" + " -MM sistem baÅŸlık dosyaları yoksayılarak -M uygulanır\n" + " -MD make bağımlılıkları üretilir ve derleme yapılır\n" + " -MMD sistem baÅŸlık dosyaları yoksayılarak -MD uygulanır\n" + " -MF DOSYA Bağımlılıklar DOSYAya yazılır\n" + " -MG Eksik baÅŸlık dosyası üretilen dosyalar olarak\n" + " deÄŸerlendirilir\n" + + #: cppinit.c:1961 + msgid "" + " -MP\t\t\t Generate phony targets for all headers\n" + " -MQ Add a MAKE-quoted target\n" + " -MT Add an unquoted target\n" + msgstr "" + " -MP Tüm baÅŸlık dosyaları için sahte hedefler üretilir\n" + " -MQ HEDEF Bir MAKE-tırnaklı HEDEF eklenir\n" + " -MT HEDEF Bir MAKE-tırnaksız HEDEF eklenir\n" + + #: cppinit.c:1966 + msgid "" + " -D Define a with string '1' as its value\n" + " -D= Define a with as its value\n" + " -A= Assert the to \n" + " -A-= Disable the to \n" + " -U Undefine \n" + " -v Display the version number\n" + msgstr "" + " -D DeÄŸeri '1' dizgesi olan bir atanır\n" + " -D= DeÄŸeri olan bir atanır\n" + " -A= ya olumlanır\n" + " -A-= etkisiz kılınır\n" + " -U undef yapılır \n" + " -v Sürüm numarası gösterilir\n" + + #: cppinit.c:1974 + msgid "" + " -H Print the name of header files as they are used\n" + " -C Do not discard comments\n" + " -dM Display a list of macro definitions active at end\n" + " -dD Preserve macro definitions in output\n" + " -dN As -dD except that only the names are preserved\n" + " -dI Include #include directives in the output\n" + msgstr "" + " -H Kullanılan baÅŸlık dosyası isimlerini gösterir\n" + " -C Açıklamalar iptal edilmez\n" + " -dM Sonuçta etkin olan makro tanımlarını listeler\n" + " -dD Çıktıda makro tanımlarıda içerilir\n" + " -dN -dD gibi ancak sadece isimler dışında\n" + " -dI Çıktıda #include yönergeleri içerilir\n" + + #: cppinit.c:1982 + msgid "" + " -fpreprocessed Treat the input file as already preprocessed\n" + " -ftabstop= Distance between tab stops for column reporting\n" + " -P Do not generate #line directives\n" + " -$ Do not allow '$' in identifiers\n" + " -remap Remap file names when including files\n" + " --version Display version information\n" + " -h or --help Display this information\n" + msgstr "" + " -fpreprocessed Girdi dosyası öniÅŸlenmiÅŸ olarak deÄŸerlendirilir\n" + " -ftabstop=SAYI Sütunlu raporlamada sekme uzunluÄŸu\n" + " -P #line yönergeleri üretilmez\n" + " -$ Tanımlayıcılarda '$' kullanımı engellenir\n" + " -remap Dosyalar içerilirken dosya adları yeniden eÅŸlenir\n" + " --version Sürüm bilgileri gösterilir\n" + " -h ya da --help Bu yardım iletisi gösterilir\n" + + #: cpplex.c:154 + #, c-format + msgid "trigraph ??%c converted to %c" + msgstr "??%c üçlü harfi %c olarak dönüştürüldü" + + #: cpplex.c:162 + #, c-format + msgid "trigraph ??%c ignored" + msgstr "??%c üçlü harfi yoksayıldı" + + #: cpplex.c:218 + msgid "backslash and newline separated by space" + msgstr "boÅŸlukla ayrılmış tersbölü ve satırsonu karakterleri" + + #: cpplex.c:224 + msgid "backslash-newline at end of file" + msgstr "dosya sonunda tersbölü ve satırsonu" + + #: cpplex.c:290 + msgid "\"/*\" within comment" + msgstr "açıklama içinde \"/*\" " + + #: cpplex.c:373 + msgid "null character(s) ignored" + msgstr "null karakter(ler) yoksayıldı" + + #: cpplex.c:380 + #, c-format + msgid "%s in preprocessing directive" + msgstr "öniÅŸlemci yönergesi içinde %s" + + #: cpplex.c:447 + #, c-format + msgid "attempt to use poisoned \"%s\"" + msgstr "zehirli \"%s\" kullanılmaya çalışılıyor" + + #: cpplex.c:455 + msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro" + msgstr "__VA_ARGS__ sadece argümanlarının sayısı deÄŸiÅŸebilen bir C99 makrosunun geniÅŸleme alanında görünebilir" + + #: cpplex.c:508 + msgid "'$' character(s) in identifier" + msgstr "tanımlayıcı içinde '$' karakter(ler)i" + + #: cpplex.c:589 + #, c-format + msgid "missing terminating %c character" + msgstr "%c sonlandırma karakteri eksik" + + #: cpplex.c:594 + msgid "possible start of unterminated string literal" + msgstr "sonlandırılmamış dizge sabitin olası baÅŸlangıcı" + + #: cpplex.c:689 + msgid "multi-line string literals are deprecated" + msgstr "çok satırlı dizge sabitlerin modası geçti" + + #: cpplex.c:712 + msgid "null character(s) preserved in literal" + msgstr "null karakter(ler) sabit içinde saklanmış" + + #: cpplex.c:914 + msgid "no newline at end of file" + msgstr "dosyanın sonunda satırsonu karakteri yok" + + #: cpplex.c:1034 tradcpp.c:1467 + msgid "unterminated comment" + msgstr "sonlandırılmamış açıklama" + + #: cpplex.c:1045 + msgid "C++ style comments are not allowed in ISO C89" + msgstr "C++ tarzı açıklamalara ISO C89'da izin verilmez" + + #: cpplex.c:1047 + msgid "(this will be reported only once per input file)" + msgstr "(her girdi dosyasında sadece bir kere raporlanacaktır)" + + #: cpplex.c:1052 + msgid "multi-line comment" + msgstr "çok satırlı açıklama" + + #: cpplex.c:1367 + #, c-format + msgid "unknown string token %s\n" + msgstr "dizge dizgeciÄŸi %s bilinmiyor\n" + + #: cpplex.c:1379 + #, c-format + msgid "unspellable token %s" + msgstr "dizgecik %s okunabilir deÄŸil" + + #: cpplex.c:1635 + #, c-format + msgid "the meaning of '\\%c' varies with -traditional" + msgstr "`\\%c'nin anlamı -traditional ile deÄŸiÅŸir" + + #: cpplex.c:1641 + msgid "incomplete universal-character-name" + msgstr "evrensel karakter ismi tamamlanmamış" + + #: cpplex.c:1655 + #, c-format + msgid "non-hex digit '%c' in universal-character-name" + msgstr "evrensel karakter isminde '%c' bir onaltılık rakam deÄŸil" + + #: cpplex.c:1663 + msgid "universal-character-name on EBCDIC target" + msgstr "EBCDIC hedefte evrensel karakter ismi" + + #: cpplex.c:1677 + msgid "universal-character-name out of range" + msgstr "evrensel karakter ismi kapsam dışı" + + #: cpplex.c:1722 + msgid "the meaning of '\\a' varies with -traditional" + msgstr "`\\a'nın anlamı -traditional ile deÄŸiÅŸir" + + #: cpplex.c:1729 + #, c-format + msgid "non-ISO-standard escape sequence, '\\%c'" + msgstr "ISO standardı olmayan önceleme dizgesi, '\\%c'" + + #: cpplex.c:1739 + msgid "the meaning of '\\x' varies with -traditional" + msgstr "'\\x'in anlamı -traditional ile deÄŸiÅŸir" + + #: cpplex.c:1758 f/lex.c:620 + msgid "\\x used with no following hex digits" + msgstr "\\x izleyen onaltılık rakamlar olmaksızın kullanılmış" + + #: cpplex.c:1762 + msgid "hex escape sequence out of range" + msgstr "onaltılık önceleme dizgesi kapsamdışı" + + #: cpplex.c:1786 + msgid "octal escape sequence out of range" + msgstr "sekizlik önceleme dizgesi kapsamdışı" + + #: cpplex.c:1801 + #, c-format + msgid "unknown escape sequence '\\%c'" + msgstr "bilinmeyen önceleme dizgesi '\\%c'" + + #: cpplex.c:1803 + #, c-format + msgid "unknown escape sequence: '\\%03o'" + msgstr "bilinmeyen önceleme dizgesi: '\\%03o'" + + #: cpplex.c:1807 + msgid "escape sequence out of range for character" + msgstr "önceleme dizgesi karakter için kapsam dışı" + + #: cpplex.c:1904 + msgid "empty character constant" + msgstr "karakter sabit boÅŸ" + + #: cpplex.c:1908 + msgid "character constant too long" + msgstr "karakter sabit çok uzun" + + #: cpplex.c:1911 + msgid "multi-character character constant" + msgstr "çoklu-karakter karakter sabiti" + + #: cpplib.c:228 + #, c-format + msgid "extra tokens at end of #%s directive" + msgstr "#%s yönergesinin sonunda fazladan dizgecikler" + + #: cpplib.c:281 + #, c-format + msgid "#%s is a GCC extension" + msgstr "#%s bir GCC uzantısıdır" + + #: cpplib.c:292 + msgid "suggest not using #elif in traditional C" + msgstr "geleneksel C'de #elif kullanılmıyor varsayılır" + + #: cpplib.c:295 + #, c-format + msgid "traditional C ignores #%s with the # indented" + msgstr "geleneksel C'de girintili # ile #%s yoksayılır" + + #: cpplib.c:299 + #, c-format + msgid "suggest hiding #%s from traditional C with an indented #" + msgstr "geleneksel C'den #%s in saklanması için bir girintili # kullanılmış farzedilir" + + #: cpplib.c:333 + msgid "style of line directive is a GCC extension" + msgstr "satır yönergesinin tarzı bir GCC özelliÄŸidir" + + #: cpplib.c:382 + #, c-format + msgid "invalid preprocessing directive #%s" + msgstr "öniÅŸlem yönergesi #%s geçersiz" + + #: cpplib.c:437 + #, c-format + msgid "no macro name given in #%s directive" + msgstr "#%s yönergesinde makro ismi verilmemiÅŸ" + + #: cpplib.c:441 + #, c-format + msgid "\"%s\" cannot be used as a macro name as it is an operator in C++" + msgstr "\"%s\" C++'da bir iÅŸlemimi olduÄŸundan makro ismi olarak kullanılamaz" + + #: cpplib.c:444 + msgid "macro names must be identifiers" + msgstr "makro isimleri tanımlayıcılar olmalı" + + #: cpplib.c:455 + #, c-format + msgid "\"%s\" cannot be used as a macro name" + msgstr "\"%s\" bir makro ismi olarak kullanılamaz" + + #: cpplib.c:493 + #, c-format + msgid "undefining \"%s\"" + msgstr "tanımsız yapılan \"%s\"" + + #: cpplib.c:536 + msgid "missing terminating > character" + msgstr "sonlandıran > karakteri eksik" + + #: cpplib.c:574 + #, c-format + msgid "#%s expects \"FILENAME\" or " + msgstr "#%s \"DOSYA\" ya da gerektirir" + + #: cpplib.c:585 + #, c-format + msgid "empty file name in #%s" + msgstr "#%s deyimindeki dosya ismi boÅŸ" + + #: cpplib.c:604 + msgid "#include_next in primary source file" + msgstr "birncil kaynak dosyasında #include_next" + + #: cpplib.c:611 + msgid "#import is obsolete, use an #ifndef wrapper in the header file" + msgstr "#import artık kullanılmıyor, yerine baÅŸlık dosyası içinde #ifndef sarmalaması kullanın" + + #: cpplib.c:619 + msgid "#include nested too deeply" + msgstr "#include iç içeliÄŸi çok derin" + + #: cpplib.c:677 + #, c-format + msgid "invalid flag \"%s\" in line directive" + msgstr "satır yönergesinde geçersiz \"%s\" seçeneÄŸi" + + #: cpplib.c:759 + #, c-format + msgid "\"%s\" after #line is not a positive integer" + msgstr "#line'dan sonraki \"%s\" bir pozitif tamsayı deÄŸil" + + #: cpplib.c:765 + msgid "line number out of range" + msgstr "satır numarası kapsam dışı" + + #: cpplib.c:776 cpplib.c:847 + #, c-format + msgid "\"%s\" is not a valid filename" + msgstr "\"%s\" geçerli bir dosya ismi deÄŸil" + + #: cpplib.c:811 + #, c-format + msgid "\"%s\" after # is not a positive integer" + msgstr "#'dan sonraki \"%s\" bir pozitif tamsayı deÄŸil" + + #: cpplib.c:916 + msgid "invalid #ident directive" + msgstr "geçersiz #ident yönergesi" + + #: cpplib.c:1004 + #, c-format + msgid "registering \"%s\" as both a pragma and a pragma namespace" + msgstr "\"%s\" hem pragma hem de pragma isim alanı olarak kaydediliyor" + + #: cpplib.c:1007 + #, c-format + msgid "#pragma %s %s is already registered" + msgstr "#pragma %s %s zaten kayıtlı" + + #: cpplib.c:1009 + #, c-format + msgid "#pragma %s is already registered" + msgstr "#pragma %s zaten kayıtlı" + + #: cpplib.c:1084 + msgid "#pragma once is obsolete" + msgstr "#pragma once eskidi" + + #: cpplib.c:1087 + msgid "#pragma once in main file" + msgstr "main dosyasında '#pragma once'" + + #: cpplib.c:1111 + msgid "invalid #pragma GCC poison directive" + msgstr "geçersiz #pragma GCC poison yönergesi" + + #: cpplib.c:1120 + #, c-format + msgid "poisoning existing macro \"%s\"" + msgstr "zehirlenen mevcut makro \"%s\"" + + #: cpplib.c:1140 + msgid "#pragma system_header ignored outside include file" + msgstr "baÅŸlık dosyasının dışındaki '#pragma system_header' yoksayıldı" + + #: cpplib.c:1165 + #, c-format + msgid "cannot find source %s" + msgstr "kaynak %s bulunamıyor" + + #: cpplib.c:1169 + #, c-format + msgid "current file is older than %s" + msgstr "mevcut dosya %s den daha eski" + + #: cpplib.c:1244 + msgid "_Pragma takes a parenthesized string literal" + msgstr "_Pragma bir parantezli dizge sabiti alır" + + #: cpplib.c:1343 + msgid "#else without #if" + msgstr "#if siz #else" + + #: cpplib.c:1348 tradcpp.c:3871 + msgid "#else after #else" + msgstr "#else den sonra #else" + + #: cpplib.c:1350 cpplib.c:1384 + msgid "the conditional began here" + msgstr "koÅŸullu ifade buradan baÅŸladı" + + #: cpplib.c:1377 + msgid "#elif without #if" + msgstr "#if siz #elif " + + #: cpplib.c:1382 tradcpp.c:3566 + msgid "#elif after #else" + msgstr "#else den sonra #elif" + + #: cpplib.c:1413 + msgid "#endif without #if" + msgstr "#if siz #endif" + + #: cpplib.c:1496 tradcpp.c:3263 + msgid "missing '(' after predicate" + msgstr "dayanaktan sonra '(' eksik" + + #: cpplib.c:1511 tradcpp.c:3277 + msgid "missing ')' to complete answer" + msgstr "yanıtı tamamlayacak ')' eksik" + + #: cpplib.c:1531 tradcpp.c:3283 + msgid "predicate's answer is empty" + msgstr "dayanakların cevabı boÅŸ" + + #: cpplib.c:1561 tradcpp.c:3331 + msgid "assertion without predicate" + msgstr "dayanaksız olumlama" + + #: cpplib.c:1563 tradcpp.c:3333 + msgid "predicate must be an identifier" + msgstr "dayanak bir tanımlayıcı olmalı" + + #: cpplib.c:1645 tradcpp.c:3430 + #, c-format + msgid "\"%s\" re-asserted" + msgstr "\"%s\" tekrar olumlanmış" + + #: cpplib.c:1875 + #, c-format + msgid "unterminated #%s" + msgstr "sonlandırılmamış #%s" + + #: cppmacro.c:145 + #, c-format + msgid "invalid built-in macro \"%s\"" + msgstr "geçersiz yerleÅŸik makro \"%s\"" + + #: cppmacro.c:346 + msgid "invalid string literal, ignoring final '\\'" + msgstr "geçersiz dizge sabit, son '\\' yoksayılıyor" + + #: cppmacro.c:438 + #, c-format + msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token" + msgstr "\"%s\" ve \"%s\" geçiÅŸi geçerli bir öniÅŸlem dizgeciÄŸi vermez" + + #: cppmacro.c:564 + msgid "directives may not be used inside a macro argument" + msgstr "yönergeler bir makro argüman içinde kullanılmayabilir" + + #: cppmacro.c:576 + #, c-format + msgid "unterminated argument list invoking macro \"%s\"" + msgstr "sonlandırılmamış argüman listesi çağıran makro \"%s\"" + + #: cppmacro.c:593 + msgid "ISO C99 requires rest arguments to be used" + msgstr "ISO C kalan argümanların kullanılmış olmasını gerektirir" + + #: cppmacro.c:598 + #, c-format + msgid "macro \"%s\" requires %u arguments, but only %u given" + msgstr "makro \"%s\" %u argüman gerektiriyor ama sadece %u argüman verilmiÅŸ" + + #: cppmacro.c:609 + #, c-format + msgid "macro \"%s\" passed %u arguments, but takes just %u" + msgstr "makro \"%s\" için %u argüman verilmiÅŸ ama tam %u argüman alıyor" + + #: cppmacro.c:692 + #, c-format + msgid "function-like macro \"%s\" must be used with arguments in traditional C" + msgstr "iÅŸlev benzeri makro \"%s\" geleneksel C'de argümanlarla kullanılmalıdır" + + #: cppmacro.c:1188 + #, c-format + msgid "duplicate macro parameter \"%s\"" + msgstr "yinelenmiÅŸ makro parametresi \"%s\"" + + #: cppmacro.c:1216 + #, c-format + msgid "\"%s\" may not appear in macro parameter list" + msgstr "\"%s\" makro parametre listesinde görünmeyebilir" + + #: cppmacro.c:1223 + msgid "macro parameters must be comma-separated" + msgstr "makro parametreleri virgüllerle ayrılmış olmalı" + + #: cppmacro.c:1240 + msgid "parameter name missing" + msgstr "parametre ismi eksik" + + #: cppmacro.c:1254 + msgid "anonymous variadic macros were introduced in C99" + msgstr "argümanlarının sayısı deÄŸiÅŸebilen anonim makrolar C99 da tanıtıldı" + + #: cppmacro.c:1257 + msgid "ISO C does not permit named variadic macros" + msgstr "ISO C argümanlarının sayısı deÄŸiÅŸebilen isimli makrolara izin vermez" + + #: cppmacro.c:1266 + msgid "missing ')' in macro parameter list" + msgstr "makro parametre listesinde ')' eksik" + + #: cppmacro.c:1344 + msgid "ISO C requires whitespace after the macro name" + msgstr "ISO C makro isminden sonra boÅŸluk gerektirir" + + #: cppmacro.c:1374 + msgid "'#' is not followed by a macro parameter" + msgstr "'#' iÅŸaretinden sonra bir makro parametresi yok" + + #: cppmacro.c:1394 + msgid "'##' cannot appear at either end of a macro expansion" + msgstr "'##' bir makronun her iki ucunda da görünemez" + + #: cppmacro.c:1430 + #, c-format + msgid "\"%s\" redefined" + msgstr "\"%s\" yeniden tanımlanmış" + + #: cppmacro.c:1434 + msgid "this is the location of the previous definition" + msgstr "bu önceki tanımlamanın yeri" + + #: cppmacro.c:1498 + #, c-format + msgid "macro argument \"%s\" would be stringified with -traditional" + msgstr "makro argümanı \"%s\" gelenekel C'de dizgelem olmalıydı" + + #: cppmacro.c:1522 + #, c-format + msgid "invalid hash type %d in cpp_macro_definition" + msgstr "cpp_macro_definition içindeki isimli yapı türü %d geçersiz" + + #: cppmain.c:121 + #, c-format + msgid "invalid option %s" + msgstr "geçersiz %s seçeneÄŸi" + + #: cppspec.c:131 + #, c-format + msgid "\"%s\" is not a valid option to the preprocessor" + msgstr "\"%s\" öniÅŸlemci için geçerli bir seçenek deÄŸil" + + #: cppspec.c:155 + msgid "too many input files" + msgstr "girdi dosyası sayısı çok fazla" + + #: cse.c:7112 + #, c-format + msgid ";; Processing block from %d to %d, %d sets.\n" + msgstr ";; %d den %d ye kadar, %d kümelik blok iÅŸleniyor.\n" + + #: diagnostic.c:784 + #, c-format + msgid "%s:%d: warning: " + msgstr "%s:%d: uyarı: " + + #: diagnostic.c:791 + #, c-format + msgid "%s: warning: " + msgstr "%s: uyarı: " + + #: diagnostic.c:871 + msgid "((anonymous))" + msgstr "((anonim))" + + #: diagnostic.c:941 + #, c-format + msgid "%s: warnings being treated as errors\n" + msgstr "%s: uyarılar hata olarak ele alınıyor\n" + + #: diagnostic.c:978 + #, c-format + msgid "%s: %s: " + msgstr "%s: %s: " + + #: diagnostic.c:1057 + msgid "sorry, not implemented: " + msgstr "daha kodlanmadı: " + + #: diagnostic.c:1076 + #, c-format + msgid "%s " + msgstr "%s " + + #: diagnostic.c:1078 + #, c-format + msgid " %s" + msgstr " %s" + + #: diagnostic.c:1102 + msgid "At top level:" + msgstr "Üst düzeyde:" + + #: diagnostic.c:1107 + #, c-format + msgid "In member function `%s':" + msgstr "Üye iÅŸlev `%s':" + + #: diagnostic.c:1111 + #, c-format + msgid "In function `%s':" + msgstr "`%s' iÅŸlevinde:" + + #: diagnostic.c:1195 + msgid "compilation terminated.\n" + msgstr "derleme sonlandırıldı.\n" + + #: diagnostic.c:1227 + #, c-format + msgid "%s:%d: confused by earlier errors, bailing out\n" + msgstr "%s:%d: önceki hatalar yüzünden bozulmuÅŸ, bırakılıyor\n" + + #: diagnostic.c:1242 diagnostic.c:1392 + #, c-format + msgid "" + "Please submit a full bug report,\n" + "with preprocessed source if appropriate.\n" + "See %s for instructions.\n" + msgstr "" + "Mümkünse öniÅŸlemli kaynakla lütfen\n" + "ayrıntılı bir hata raporu gönderin.\n" + "İşlemler için %s adresine bakınız.\n" + + #: diagnostic.c:1390 + msgid "Internal compiler error: Error reporting routines re-entered.\n" + msgstr "Derleyici iç hatası: Hata raporlama yordamları tekrar girildi.\n" + + #: diagnostic.c:1452 + #, c-format + msgid "Internal compiler error in %s, at %s:%d" + msgstr "%2$s:%3$d. satırındaki %1$s iÅŸlevinde derleyici iç hatası" + + #: diagnostic.c:1497 + #, c-format + msgid "In file included from %s:%d" + msgstr "" + "Sırayla bir altındaki dosyada içerilerek:\n" + "\t\t%s:%d" + + #: diagnostic.c:1500 + #, c-format + msgid "" + ",\n" + " from %s:%d" + msgstr "" + ",\n" + "\t\t%s:%d" + + #: diagnostic.c:1501 + msgid ":\n" + msgstr ". satırında:\n" + + #: diagnostic.c:1534 diagnostic.c:1551 + #, c-format + msgid "`%s' is deprecated (declared at %s:%d)" + msgstr "`%s' yakında kaldırılacak (%s:%d. satırında bildirilmiÅŸ)" + + #: diagnostic.c:1554 + #, c-format + msgid "`%s' is deprecated" + msgstr "`%s' yakında kaldırılacak" + + #: diagnostic.c:1557 + #, c-format + msgid "type is deprecated (declared at %s:%d)" + msgstr "tür yakında kaldırılacak (%s:%d. satırında bildirilmiÅŸ)" + + #: diagnostic.c:1560 + msgid "type is deprecated" + msgstr "tür yakında kaldırılacak" + + #: dwarf2out.c:3056 + #, c-format + msgid "DW_LOC_OP %s not implemented\n" + msgstr "DW_LOC_OP %s daha yazılmadı\n" + + #: dwarfout.c:2089 + #, c-format + msgid "internal regno botch: regno = %d\n" + msgstr "iç yazmaç numarası beceriksizce: regno = %d\n" + + #: dwarfout.c:6291 + msgid "can't get current directory" + msgstr "çalışılan dizin alınamıyor" + + #: emit-rtl.c:1098 + msgid "can't access real part of complex value in hard register" + msgstr "donanım yazmacındaki karmaşık deÄŸerin gerçek kısmına eriÅŸilemez" + + #: emit-rtl.c:1120 + msgid "can't access imaginary part of complex value in hard register" + msgstr "donanım yazmacında karmaşık deÄŸerin sanal kısmına eriÅŸilemez" + + #: emit-rtl.c:3271 + msgid "ICE: emit_insn used where emit_jump_insn needed:\n" + msgstr "ICE: emit_jump_insn gereken yerde emit_insn kullanılmış:\n" + + #: errors.c:136 + #, c-format + msgid "abort in %s, at %s:%d" + msgstr "%2$s dosyasının %3$d. satırındaki %1$s iÅŸlevinde programdan çıkış" + + #: except.c:382 + msgid "exception handling disabled, use -fexceptions to enable" + msgstr "olaÄŸandışılık yakalaması iptal edildi, etkinleÅŸtirmek için -fexceptions kullanın" + + #: except.c:3235 + msgid "argument of `__builtin_eh_return_regno' must be constant" + msgstr "`__builtin_eh_return_regno' argümanı sabit olmalı" + + #: except.c:3346 except.c:3368 + msgid "__builtin_eh_return not supported on this target" + msgstr "__builtin_eh_return bu hedefte desteklenmiyor" + + #: explow.c:1369 + msgid "stack limits not supported on this target" + msgstr "bu hedefte yığın sınırları desteklenmiyor" + + #: expr.c:2948 + msgid "function using short complex types cannot be inline" + msgstr "short karmaşık türler kullanılan iÅŸlevler özümlenemez" + + #: expr.c:5810 expr.c:5819 expr.c:5828 expr.c:5833 expr.c:6120 expr.c:6136 + msgid "unsupported wide integer operation" + msgstr "desteklenmeyen uzun tamsayı iÅŸlemi" + + #: expr.c:6185 + #, c-format + msgid "prior parameter's size depends on `%s'" + msgstr "önceki parametrelerin uzunluÄŸu `%s' bağımlı" + + #: expr.c:6531 + msgid "returned value in block_exit_expr" + msgstr "block_exit_expr'de deÄŸer döndü" + + #: final.c:1209 + msgid "negative insn length" + msgstr "negatif komut uzunluÄŸu" + + #: final.c:2628 + msgid "could not split insn" + msgstr "komut çatallanamadı" + + #: final.c:2976 + msgid "invalid `asm': " + msgstr "geçersiz `asm': " + + #: final.c:3160 + msgid "nested assembly dialect alternatives" + msgstr "iç içe çevirici aksan alternatifleri" + + #: final.c:3177 final.c:3189 + msgid "unterminated assembly dialect alternative" + msgstr "sonlandırılmamış çevirici aksan alternatifi" + + #: final.c:3233 + #, c-format + msgid "operand number missing after %%-letter" + msgstr "%%-harf'ten sonraki terim numarası eksik" + + #: final.c:3236 final.c:3275 + msgid "operand number out of range" + msgstr "terim numarası kapsamdışı" + + #: final.c:3294 + #, c-format + msgid "invalid %%-code" + msgstr "%% kodu geçersiz" + + #: final.c:3325 + #, c-format + msgid "`%%l' operand isn't a label" + msgstr "`%%l' terimi bir etiket deÄŸil" + + #. We can't handle floating point constants; + #. PRINT_OPERAND must handle them. + #: final.c:3432 vmsdbgout.c:478 config/i386/i386.c:5315 config/pdp11/pdp11.c:1570 + msgid "floating constant misused" + msgstr "gerçel sayı sabitler desteklenmiyor" + + #: final.c:3488 vmsdbgout.c:535 config/i386/i386.c:5369 config/pdp11/pdp11.c:1617 + msgid "invalid expression as operand" + msgstr "veri öğesi olarak ifade geçersiz" + + #: flow.c:354 + msgid "function might be possible candidate for attribute `noreturn'" + msgstr "iÅŸlev `noreturn' özniteliÄŸi için olası aday olmalı" + + #: flow.c:359 + msgid "`noreturn' function does return" + msgstr "`noreturn' iÅŸlev dönüyor" + + #: flow.c:378 + msgid "control reaches end of non-void function" + msgstr "denetim void olmayan iÅŸlevin sonunu aşıyor" + + #: flow.c:1600 + msgid "Attempt to delete prologue/epilogue insn:" + msgstr "Önsöz/sonsöz komutlarını silmeye çalışır" + + #: fold-const.c:3135 fold-const.c:3148 + #, c-format + msgid "comparison is always %d due to width of bit-field" + msgstr "karşılaÅŸtırma bit alanının geniÅŸliÄŸinden dolayı daima %d" + + #: fold-const.c:4190 fold-const.c:4207 + #, c-format + msgid "comparison is always %d" + msgstr "karşılaÅŸtırma sonucu daima %d" + + #: fold-const.c:4338 + msgid "`or' of unmatched not-equal tests is always 1" + msgstr "eÅŸleÅŸmeyenlerin eÅŸitsizlik testlerininin `or' sonucu daima 1 dir" + + #: fold-const.c:4343 + msgid "`and' of mutually exclusive equal-tests is always 0" + msgstr "baÄŸdaÅŸmayanların eÅŸitlik testlerinin `and' sonucu daima 0 dır" + + #: function.c:906 varasm.c:1530 + #, c-format + msgid "size of variable `%s' is too large" + msgstr "`%s' deÄŸiÅŸkeni çok geniÅŸ" + + #: function.c:5445 + #, c-format + msgid "`%s' might be used uninitialized in this function" + msgstr "`%s' bu iÅŸlevde ilklendirilmeden kullanılmış olmalı" + + #: function.c:5452 + #, c-format + msgid "variable `%s' might be clobbered by `longjmp' or `vfork'" + msgstr "deÄŸiÅŸken `%s' `longjmp' ya da `vfork' tarafından taşırılmış olmalı" + + #: function.c:5471 + #, c-format + msgid "argument `%s' might be clobbered by `longjmp' or `vfork'" + msgstr "argüman `%s' `longjmp' ya da `vfork' tarafından taşırılmış olmalı" + + #: function.c:6337 + msgid "function returns an aggregate" + msgstr "iÅŸlev bir küme ile dönüyor" + + #: function.c:6856 + #, c-format + msgid "unused parameter `%s'" + msgstr "parametre `%s' kullanılmamış" + + #: gcc.c:1102 + #, c-format + msgid "ambiguous abbreviation %s" + msgstr "belirsiz kısaltma %s" + + #: gcc.c:1129 + #, c-format + msgid "incomplete `%s' option" + msgstr "tamamlanmamış `%s' seçeneÄŸi" + + #: gcc.c:1140 + #, c-format + msgid "missing argument to `%s' option" + msgstr "`%s' seçeneÄŸinin argümanı eksik" + + #: gcc.c:1153 + #, c-format + msgid "extraneous argument to `%s' option" + msgstr "`%s' seçeneÄŸinde fazladan argüman" + + #: gcc.c:1460 + msgid "Using built-in specs.\n" + msgstr "YerleÅŸik özellikler kullanılıyor.\n" + + #: gcc.c:1634 + #, c-format + msgid "" + "Setting spec %s to '%s'\n" + "\n" + msgstr "" + "Özelik %s '%s' e ayarlanıyor\n" + "\n" + + #: gcc.c:1732 + #, c-format + msgid "Reading specs from %s\n" + msgstr "Özellikler %s'den okunuyor\n" + + #: gcc.c:1830 gcc.c:1849 + #, c-format + msgid "specs %%include syntax malformed after %ld characters" + msgstr "specs %%include sözdizimi %ld karakterden sonra bozuk" + + #: gcc.c:1857 + #, c-format + msgid "could not find specs file %s\n" + msgstr "özellik dosyası %s bulunamadı\n" + + #: gcc.c:1873 gcc.c:1881 gcc.c:1890 gcc.c:1899 + #, c-format + msgid "specs %%rename syntax malformed after %ld characters" + msgstr "specs %%rename sözdizimi %ld karakterden sonra bozuk" + + #: gcc.c:1908 + #, c-format + msgid "specs %s spec was not found to be renamed" + msgstr "ismi deÄŸiÅŸecek specs %s özelliÄŸi yok" + + #: gcc.c:1915 + #, c-format + msgid "rename spec %s to %s\n" + msgstr "spec %s ismi %s yapılıyor\n" + + #: gcc.c:1917 + #, c-format + msgid "" + "spec is '%s'\n" + "\n" + msgstr "" + "özellik '%s'\n" + "\n" + + #: gcc.c:1930 + #, c-format + msgid "specs unknown %% command after %ld characters" + msgstr "%ld. karakterden sonra bilinmeyen specs %% komutu" + + #: gcc.c:1941 gcc.c:1954 + #, c-format + msgid "specs file malformed after %ld characters" + msgstr "%ld. karakterden sonra özellikler dosyası bozuk" + + #: gcc.c:2008 + msgid "spec file has no spec for linking" + msgstr "özellik dosyası birleÅŸtirilecek özellik içermiyor" + + #: gcc.c:2720 + msgid "-pipe not supported" + msgstr "-pipe desteklenmiyor" + + #: gcc.c:2774 + msgid "" + "\n" + "Go ahead? (y or n) " + msgstr "" + "\n" + "Haydi!? (e / h) " + + #: gcc.c:2873 + #, c-format + msgid "" + "Internal error: %s (program %s)\n" + "Please submit a full bug report.\n" + "See %s for instructions." + msgstr "" + "İç hata: %s (program %s)\n" + "Lütfen ayrıntılı bir hata raporu hazırlayın.\n" + "İşlemler için %s adresine bakın." + + #: gcc.c:2891 + #, c-format + msgid "# %s %.2f %.2f\n" + msgstr "# %s %.2f %.2f\n" + + #: gcc.c:3024 + #, c-format + msgid "Usage: %s [options] file...\n" + msgstr "Kullanımı: %s [seçenekler] DOSYA...\n" + + #: gcc.c:3025 + msgid "Options:\n" + msgstr "Seçenekler:\n" + + #: gcc.c:3027 + msgid " -pass-exit-codes Exit with highest error code from a phase\n" + msgstr " -pass-exit-codes Bir safhada en yüksek hata kodu ile çıkar\n" + + #: gcc.c:3028 + msgid " --help Display this information\n" + msgstr " --help Bu yardım iletisini gösterir\n" + + #: gcc.c:3029 + msgid " --target-help Display target specific command line options\n" + msgstr " --target-help Hedefe özel komut satırı seçeneklerini gösterir\n" + + #: gcc.c:3031 + msgid " (Use '-v --help' to display command line options of sub-processes)\n" + msgstr " (Ast süreçlerin komut satırı seçenekleri için '-v --help' kullanın)\n" + + #: gcc.c:3032 + msgid " -dumpspecs Display all of the built in spec strings\n" + msgstr " -dumpspecs Bütün yerleÅŸik spec dizgelerini gösterir\n" + + #: gcc.c:3033 + msgid " -dumpversion Display the version of the compiler\n" + msgstr " -dumpversion Derleyicinin sürümünü gösterir\n" + + #: gcc.c:3034 + msgid " -dumpmachine Display the compiler's target processor\n" + msgstr " -dumpmachine Derleyicilerin hedef iÅŸlemcisini gösterir\n" + + #: gcc.c:3035 + msgid " -print-search-dirs Display the directories in the compiler's search path\n" + msgstr " -print-search-dirs Derleyicinin arama yolundaki dizinlerini gösterir\n" + + #: gcc.c:3036 + msgid " -print-libgcc-file-name Display the name of the compiler's companion library\n" + msgstr " -print-libgcc-file-name Derleyiciyle eÅŸleÅŸen kitaplığın ismini gösterir\n" + + #: gcc.c:3037 + msgid " -print-file-name= Display the full path to library \n" + msgstr " -print-file-name= kitaplığının tam dosya yolunu gösterir\n" + + #: gcc.c:3038 + msgid " -print-prog-name= Display the full path to compiler component \n" + msgstr " -print-prog-name= Derleyici elemanı un tam dosya yolunu gösterir\n" + + #: gcc.c:3039 + msgid " -print-multi-directory Display the root directory for versions of libgcc\n" + msgstr " -print-multi-directory libgcc sürümünün kök dizinini gösterir\n" + + #: gcc.c:3040 + msgid "" + " -print-multi-lib Display the mapping between command line options and\n" + " multiple library search directories\n" + msgstr "" + " -print-multi-lib Komut satırı seçenekleri ile kitaplık arama dizinleri\n" + " arasındaki eÅŸleÅŸmeleri gösterir\n" + + #: gcc.c:3043 + msgid " -Wa, Pass comma-separated on to the assembler\n" + msgstr " -Wa, Virgül ayraçlı listesini çeviriciye gönderir\n" + + #: gcc.c:3044 + msgid " -Wp, Pass comma-separated on to the preprocessor\n" + msgstr " -Wp, Virgül ayraçlı listesini öniÅŸlemciye gönderir\n" + + #: gcc.c:3045 + msgid " -Wl, Pass comma-separated on to the linker\n" + msgstr " -Wl, Virgül ayraçlı i baÄŸlayıcıya gönderir\n" + + #: gcc.c:3046 + msgid " -Xlinker Pass on to the linker\n" + msgstr " -Xlinker BaÄŸlayıcıya ümanı gönderir\n" + + #: gcc.c:3047 + msgid " -save-temps Do not delete intermediate files\n" + msgstr " -save-temps Aracı dosyaları silmez\n" + + #: gcc.c:3048 + msgid " -pipe Use pipes rather than intermediate files\n" + msgstr " -pipe Aracı dosyalardan ziyade veri yolları kullanılır\n" + + #: gcc.c:3049 + msgid " -time Time the execution of each subprocess\n" + msgstr " -time Alt iÅŸlemlerin çalıştırılma zamanlaması\n" + + #: gcc.c:3050 + msgid " -specs= Override built-in specs with the contents of \n" + msgstr " -specs= YerleÅŸik özellikler yerine dakilere zorlar\n" + + #: gcc.c:3051 + msgid " -std= Assume that the input sources are for \n" + msgstr "" + " -std= Girdi kaynaklarının bu da olduÄŸu\n" + " varsayılır\n" + + #: gcc.c:3052 + msgid " -B Add to the compiler's search paths\n" + msgstr " -B Derleyicilerin arama dosya yoluna i ekler\n" + + #: gcc.c:3053 + msgid " -b Run gcc for target , if installed\n" + msgstr " -b gcc kurulmuÅŸsa hedef için çalıştırılır\n" + + #: gcc.c:3054 + msgid " -V Run gcc version number , if installed\n" + msgstr " -V gcc'nin kurulmuÅŸsa sürümü çalıştırılır\n" + + #: gcc.c:3055 + msgid " -v Display the programs invoked by the compiler\n" + msgstr " -v Derleyicinin çalıştırdığı programları gösterir\n" + + #: gcc.c:3056 + msgid " -### Like -v but options quoted and commands not executed\n" + msgstr " -### -v gibi ama tırnaklı ve virgüllü seçenekler kullanılmaz\n" + + #: gcc.c:3057 + msgid " -E Preprocess only; do not compile, assemble or link\n" + msgstr " -E Sadece öniÅŸlem; derleme, çeviri ve ilintileme yapılmaz\n" + + #: gcc.c:3058 + msgid " -S Compile only; do not assemble or link\n" + msgstr " -S Sadece derleme; çevirme ve baÄŸlama yapılmaz\n" + + #: gcc.c:3059 + msgid " -c Compile and assemble, but do not link\n" + msgstr " -c Derler ve çevirir ancak baÄŸlamaz\n" + + #: gcc.c:3060 + msgid " -o Place the output into \n" + msgstr " -o DOSYA Çıktıyı DOSYAya yazar\n" + + #: gcc.c:3061 + msgid "" + " -x Specify the language of the following input files\n" + " Permissable languages include: c c++ assembler none\n" + " 'none' means revert to the default behavior of\n" + " guessing the language based on the file's extension\n" + msgstr "" + " -x AÅŸağıdaki girdi dosyası dilleri belirtilebilir:\n" + " c c++ assembler none\n" + " 'none' ile dilin girdi dosyasının uzantısından saptanacağı\n" + " öntanımlı durum belirtilmiÅŸ olur\n" + + #: gcc.c:3068 + #, c-format + msgid "" + "\n" + "Options starting with -g, -f, -m, -O, -W, or --param are automatically\n" + " passed on to the various sub-processes invoked by %s. In order to pass\n" + " other options on to these processes the -W options must be used.\n" + msgstr "" + "\n" + "-g, -f, -m, -O, -W, veya --param ile baÅŸlayan seçenekler ile belirtilen\n" + "parametreler doÄŸrudan %s tarafından çalıştırılan alt programlara gönderilir.\n" + "Seçenekler ve gönderileceÄŸi alt program -W seçeneklerinden saptanır.\n" + "\n" + "Çeviri hatalarını adresine bildiriniz.\n" + "\n" + + #. translate_options () has turned --version into -fversion. + #: gcc.c:3348 + #, c-format + msgid "%s (GCC) %s\n" + msgstr "%s (GCC) %s\n" + + #: gcc.c:3349 + msgid "Copyright (C) 2002 Free Software Foundation, Inc.\n" + msgstr "Telif Hakkı (C) 2002 Free Software Foundation, Inc.\n" + + #: gcc.c:3351 gcov.c:320 + msgid "" + "This is free software; see the source for copying conditions. There is NO\n" + "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" + "\n" + msgstr "" + "Bu bir serbest yazılımdır; kopyalama koÅŸulları için kaynak koduna bakınız.\n" + "Hiçbir garantisi yoktur; hatta SATILABİLİRLİĞİ veya ÅžAHSİ KULLANIMINIZA\n" + "UYGUNLUÄžU için bile garanti verilmez.\n" + + #: gcc.c:3450 + msgid "argument to `-Xlinker' is missing" + msgstr "`-Xlinker' için argüman belirtilmemiÅŸ" + + #: gcc.c:3458 + msgid "argument to `-l' is missing" + msgstr "`-l' için argüman belirtilmemiÅŸ" + + #: gcc.c:3475 + msgid "argument to `-specs' is missing" + msgstr "`-specs' için argüman belirtilmemiÅŸ" + + #: gcc.c:3490 + msgid "argument to `-specs=' is missing" + msgstr "`-specs=' için argüman belirtilmemiÅŸ" + + #: gcc.c:3521 + msgid "argument to `-b' is missing" + msgstr "`-b' için argüman belirtilmemiÅŸ" + + #: gcc.c:3536 + msgid "argument to `-B' is missing" + msgstr "`-B' için argüman belirtilmemiÅŸ" + + #: gcc.c:3606 + msgid "argument to `-V' is missing" + msgstr "`-V' için argüman belirtilmemiÅŸ" + + #: gcc.c:3627 gcc.c:3634 gcc.c:3641 + msgid "invalid version number format" + msgstr "sürüm numarası biçemi geçersiz" + + #: gcc.c:3752 + msgid "cannot specify -o with -c or -S and multiple compilations" + msgstr "-o çoklu derlemeler, -c ya da -S ile kullanılamaz" + + #: gcc.c:3923 + msgid "warning: -pipe ignored because -save-temps specified" + msgstr "Uyarı: -save-temps belirtildiÄŸinden -pipe yoksayıldı" + + #: gcc.c:3927 + msgid "warning: -pipe ignored because -time specified" + msgstr "Uyarı: -time belirtildiÄŸinden -pipe yoksayıldı" + + #: gcc.c:3939 + msgid "argument to `-x' is missing" + msgstr "`-x' için argüman belirtilmemiÅŸ" + + #: gcc.c:3967 + #, c-format + msgid "argument to `-%s' is missing" + msgstr "`-%s' için argüman belirtilmemiÅŸ" + + #: gcc.c:4028 + #, c-format + msgid "warning: `-x %s' after last input file has no effect" + msgstr "Uyarı: son girdi dosyasından sonraki `-x %s' etkisiz" + + #: gcc.c:4327 + msgid "invalid specification! Bug in cc" + msgstr "özellik geçersiz! cc'de yazılım hatası." + + #: gcc.c:4476 + #, c-format + msgid "%s\n" + msgstr "%s\n" + + #. Catch the case where a spec string contains something like + #. '%{foo:%*}'. ie there is no * in the pattern on the left + #. hand side of the :. + #: gcc.c:5029 + #, c-format + msgid "spec failure: '%%*' has not been initialized by pattern match" + msgstr "özellik aksaması: '%%*' kalıp eÅŸleÅŸtirerek ilklendirilemedi" + + #: gcc.c:5038 + #, c-format + msgid "warning: use of obsolete %%[ operator in specs" + msgstr "Uyarı: spec'lerde %%[ iÅŸlemimi artık kullanılmıyor" + + #: gcc.c:5056 + #, c-format + msgid "Processing spec %c%s%c, which is '%s'\n" + msgstr "'%4$s' %1$c%2$s%3$c özelliÄŸi iÅŸleniyor\n" + + #: gcc.c:5181 + #, c-format + msgid "spec failure: unrecognized spec option '%c'" + msgstr "Özellik aksaması: özellik seçeneÄŸi '%c' anlaşılamadı" + + #: gcc.c:5291 + msgid "mismatched braces in specs" + msgstr "özellikler içinde eÅŸleÅŸmeyen parantezler" + + #: gcc.c:5969 + #, c-format + msgid "unrecognized option `-%s'" + msgstr "`-%s' seçeneÄŸi bilinmiyor" + + #: gcc.c:5975 + #, c-format + msgid "install: %s%s\n" + msgstr "kurulum: %s%s\n" + + #: gcc.c:5976 + #, c-format + msgid "programs: %s\n" + msgstr "programlar: %s\n" + + #: gcc.c:5977 + #, c-format + msgid "libraries: %s\n" + msgstr "kitaplıklar: %s\n" + + #: gcc.c:6025 + msgid "" + "\n" + "For bug reporting instructions, please see:\n" + msgstr "" + "\n" + "Hata raporlama iÅŸlemleri için:\n" + + #: gcc.c:6041 + #, c-format + msgid "Configured with: %s\n" + msgstr "" + "%s\n" + "seçenekleriyle yapılandırıldı.\n" + + #: gcc.c:6055 + #, c-format + msgid "Thread model: %s\n" + msgstr "Kanallama modeli: %s\n" + + #: gcc.c:6066 + #, c-format + msgid "gcc version %s\n" + msgstr "gcc %s sürümü\n" + + #: gcc.c:6068 + #, c-format + msgid "gcc driver version %s executing gcc version %s\n" + msgstr "gcc sürücüsü %s sürümü gcc %s sürümünü çalıştırıyor\n" + + #: gcc.c:6076 + msgid "no input files" + msgstr "girdi dosyası yok" + + #: gcc.c:6114 + #, c-format + msgid "%s: %s compiler not installed on this system" + msgstr "%s: %s derleyici bu sitemde kurulu deÄŸil" + + #: gcc.c:6189 + #, c-format + msgid "%s: linker input file unused because linking not done" + msgstr "%s: birleÅŸtirme yapılmadığından birleÅŸtirici girdi dosyası kullanılmadı" + + #: gcc.c:6232 + #, c-format + msgid "language %s not recognized" + msgstr "dil %s tanınmıyor" + + #: gcc.c:6335 + msgid "internal gcc abort" + msgstr "dahili gcc çıkışı" + + #: gcov.c:282 + msgid "Internal gcov abort.\n" + msgstr "Dahili gcov çıkışı.\n" + + #: gcov.c:295 + msgid "" + "Usage: gcov [OPTION]... SOURCEFILE\n" + "\n" + msgstr "" + "Kullanımı: gcov [SEÇENEK]... KAYNAKDOSYASI\n" + "\n" + + #: gcov.c:296 + msgid "" + "Print code coverage information.\n" + "\n" + msgstr "" + "Kodu çevreleyen bilgileri gösterir\n" + "\n" + + #: gcov.c:297 + msgid " -h, --help Print this help, then exit\n" + msgstr " -h, --help Bu yardım iletisini gösterir ve çıkar\n" + + #: gcov.c:298 + msgid " -v, --version Print version number, then exit\n" + msgstr " -v, --version Sürüm bilgilerini gösterir ve çıkar\n" + + #: gcov.c:299 + msgid " -b, --branch-probabilities Include branch probabilities in output\n" + msgstr " -b, --branch-probabilities Çıktıda dallanma olasılıkları da içerilir\n" + + #: gcov.c:300 + msgid "" + " -c, --branch-counts Given counts of branches taken\n" + " rather than percentages\n" + msgstr " -c, --branch-counts Yüzde yerine dallanma sayısı alınır\n" + + #: gcov.c:302 + msgid " -n, --no-output Do not create an output file\n" + msgstr " -n, --no-output Bir çıktı dosyası üretilmez\n" + + #: gcov.c:303 + msgid "" + " -l, --long-file-names Use long output file names for included\n" + " source files\n" + msgstr "" + " -l, --long-file-names İçerilen kaynak dosyaları için uzun çıktı dosyası\n" + " isimleri kullanılır\n" + + #: gcov.c:305 + msgid " -f, --function-summaries Output summaries for each function\n" + msgstr " -f, --function-summaries Her iÅŸlev için özet çıktılar\n" + + #: gcov.c:306 + msgid " -o, --object-directory OBJDIR Search for object files in OBJDIR\n" + msgstr " -o, --object-directory DİZİN Nesne dosyaları DİZİNde aranır\n" + + #: gcov.c:307 + #, c-format + msgid "" + "\n" + "For bug reporting instructions, please see:\n" + "%s.\n" + msgstr "" + "\n" + "Hata raporlama iÅŸlemleri için:\n" + "%s.\n" + + #: gcov.c:317 + #, c-format + msgid "gcov (GCC) %s\n" + msgstr "gcov (GCC) %s\n" + + #: gcov.c:318 + msgid "Copyright (C) 2001 Free Software Foundation, Inc.\n" + msgstr "Telif Hakkı (C) 2001 Free Software Foundation, Inc.\n" + + #: gcov.c:462 + #, c-format + msgid "Could not open basic block file %s.\n" + msgstr "Temel blok dosyası %s açılamadı.\n" + + #: gcov.c:471 + #, c-format + msgid "Could not open data file %s.\n" + msgstr "%s veri dosyası açılamadı.\n" + + #: gcov.c:472 + msgid "Assuming that all execution counts are zero.\n" + msgstr "Tüm çalıştırılanların sayısı sıfır kabul ediliyor.\n" + + #: gcov.c:478 + #, c-format + msgid "Could not open program flow graph file %s.\n" + msgstr "Program akış diyagramı dosyası %s açılamıyor.\n" + + #: gcov.c:489 + #, c-format + msgid "No executable code associated with file %s.\n" + msgstr "%s dosyası ile iliÅŸkilendirilecek kod yok.\n" + + #: gcov.c:789 + msgid ".da file contents exhausted too early\n" + msgstr ".da dosyasının içeriÄŸi çok erken atıldı\n" + + #: gcov.c:792 + msgid ".da file contents not exhausted\n" + msgstr ".da dosyasının içeriÄŸi atılmadı\n" + + #: gcov.c:973 + #, c-format + msgid "%6.2f%% of %d source lines executed in function %s\n" + msgstr "%3$s iÅŸlevindeki %2$d satırın %%%1$6.2f satırı çalıştırıldı\n" + + #: gcov.c:977 + #, c-format + msgid "No executable source lines in function %s\n" + msgstr "%s iÅŸlevinin çalıştırılabilir kaynak satırı yok\n" + + #: gcov.c:984 + #, c-format + msgid "%6.2f%% of %d branches executed in function %s\n" + msgstr "%3$s iÅŸlevindeki %2$d dalın %%%1$6.2f dalı çalıştırıldı\n" + + #: gcov.c:988 + #, c-format + msgid "%6.2f%% of %d branches taken at least once in function %s\n" + msgstr "%3$s iÅŸlevindeki %2$d dalın %%%1$6.2f dalı en az bir kere alındı\n" + + #: gcov.c:993 + #, c-format + msgid "No branches in function %s\n" + msgstr "%s iÅŸlevinin dalları yok\n" + + #: gcov.c:995 + #, c-format + msgid "%6.2f%% of %d calls executed in function %s\n" + msgstr "%3$s iÅŸlevindeki %2$d çaÄŸrıdan %%%1$6.2f çaÄŸrı çalıştırıldı\n" + + #: gcov.c:999 + #, c-format + msgid "No calls in function %s\n" + msgstr "%s iÅŸlevinde çaÄŸrı yok\n" + + #: gcov.c:1126 + #, c-format + msgid "didn't use all bb entries of graph, function %s\n" + msgstr "iÅŸlev %s ve diyagramın tüm bb girdileri kullanılmadı\n" + + #: gcov.c:1128 + #, c-format + msgid "block_num = %ld, num_blocks = %d\n" + msgstr "blok_num = %ld, blok_sayısı = %d\n" + + #: gcov.c:1166 + #, c-format + msgid "ERROR: too many basic blocks in .bb file %s\n" + msgstr "HATA: .bb dosyası %s içinde temel blok sayısı çok fazla\n" + + #: gcov.c:1243 + #, c-format + msgid "%6.2f%% of %d source lines executed in file %s\n" + msgstr "%3$s dosyasındaki %2$d satırın %%%1$6.2f satırı çalıştırıldı\n" + + #: gcov.c:1247 + #, c-format + msgid "No executable source lines in file %s\n" + msgstr "%s dosyasında çalıştırılacak kaynak satırı yok\n" + + #: gcov.c:1254 + #, c-format + msgid "%6.2f%% of %d branches executed in file %s\n" + msgstr "%3$s dosyasındaki %2$d daldan %%%1$6.2f dal çalıştırıldı\n" + + #: gcov.c:1258 + #, c-format + msgid "%6.2f%% of %d branches taken at least once in file %s\n" + msgstr "%3$s dosyasındaki %2$d daldan %%%1$6.2f dal en az bir kere alındı\n" + + #: gcov.c:1263 + #, c-format + msgid "No branches in file %s\n" + msgstr "%s dosyasında dal yok\n" + + #: gcov.c:1265 + #, c-format + msgid "%6.2f%% of %d calls executed in file %s\n" + msgstr "%3$s dosyasındaki %2$d çaÄŸrıdan %%%1$6.2f çaÄŸrı çalıştırıldı\n" + + #: gcov.c:1269 + #, c-format + msgid "No calls in file %s\n" + msgstr "%s dosyasında çaÄŸrı yok\n" + + #: gcov.c:1281 + #, c-format + msgid "Could not open source file %s.\n" + msgstr "%s kaynak dosyası açılamadı.\n" + + #: gcov.c:1331 + #, c-format + msgid "Could not open output file %s.\n" + msgstr "%s çıktı dosyası açılamadı.\n" + + #: gcov.c:1339 + #, c-format + msgid "Creating %s.\n" + msgstr "%s oluÅŸturuluyor.\n" + + #: gcov.c:1387 + #, c-format + msgid "call %d never executed\n" + msgstr "%d. çaÄŸrı hiç çalıştırılmadı\n" + + #: gcov.c:1396 + #, c-format + msgid "call %d returns = %s\n" + msgstr "%d. çaÄŸrı dönüş sayısı = %s\n" + + #: gcov.c:1406 + #, c-format + msgid "call %d returns = %s%%\n" + msgstr "%d. çaÄŸrı dönüş yüzdesi = %%%s\n" + + #: gcov.c:1413 + #, c-format + msgid "branch %d never executed\n" + msgstr "%d. dal hiç çalıştırılmadı\n" + + #: gcov.c:1423 + #, c-format + msgid "branch %d taken = %s\n" + msgstr "%d. dal alınma sayısı = %s\n" + + #: gcov.c:1433 + #, c-format + msgid "branch %d taken = %s%%\n" + msgstr "%d. dal alınma yüzdesi = %%%s\n" + + #: gcov.c:1444 + #, c-format + msgid "Unexpected EOF while reading source file %s.\n" + msgstr "%s kaynak dosyası okunurken anlaşılmayan dosya sonu.\n" + + #: gcse.c:758 + #, c-format + msgid "GCSE disabled: %d > 1000 basic blocks and %d >= 20 edges/basic block" + msgstr "" + "Genel ortak alt ifade elemesi iptal edildi:\n" + "%d > 1000 temel blok ve %d >= 20 kenar/temel blok" + + #: gcse.c:770 + #, c-format + msgid "GCSE disabled: %d basic blocks and %d registers" + msgstr "Genel ortak alt ifade elemesi iptal edildi: %d temel blok ve %d yazmaç" + + #: graph.c:421 profile.c:950 profile.c:958 toplev.c:1835 toplev.c:4978 f/com.c:14258 java/jcf-parse.c:950 java/jcf-parse.c:1099 java/lex.c:1790 objc/objc-act.c:529 + #, c-format + msgid "can't open %s" + msgstr "%s açılamıyor" + + #: haifa-sched.c:190 + #, c-format + msgid "fix_sched_param: unknown param: %s" + msgstr "fix_sched_param: bilinmeyen parametre: %s" + + #: integrate.c:185 + msgid "function cannot be inline" + msgstr "iÅŸlev özümlenemez" + + #: integrate.c:190 + msgid "varargs function cannot be inline" + msgstr "varargs iÅŸlevi özümlenemez" + + #: integrate.c:193 + msgid "function using alloca cannot be inline" + msgstr "alloca kullanarak iÅŸlev özümlenemez" + + #: integrate.c:196 + msgid "function using setjmp cannot be inline" + msgstr "setjmp kullanarak iÅŸlev özümlenemez" + + #: integrate.c:199 + msgid "function uses __builtin_eh_return" + msgstr "iÅŸlev __builtin_eh_return kullanıyor" + + #: integrate.c:202 + msgid "function with nested functions cannot be inline" + msgstr "içiçe iÅŸlevleri olan bir iÅŸlev özümlenemez" + + #: integrate.c:206 + msgid "function with label addresses used in initializers cannot inline" + msgstr "baÅŸlangıç deÄŸerlerinde kullanılmış etiket adresli bir iÅŸlev özümlenemez" + + #: integrate.c:213 integrate.c:257 + msgid "function too large to be inline" + msgstr "iÅŸlev özümlenmek için fazla büyük" + + #: integrate.c:223 + msgid "no prototype, and parameter address used; cannot be inline" + msgstr "prototip ve kullanılan parametre adresi yok; özümlenemez" + + #: integrate.c:230 integrate.c:275 + msgid "inline functions not supported for this return value type" + msgstr "bu dönen deÄŸer türü için özümlenen iÅŸlevler desteklenmiyor" + + #: integrate.c:235 + msgid "function with varying-size return value cannot be inline" + msgstr "deÄŸiÅŸken uzunluklu dönen deÄŸerli iÅŸlevler özümlenemez" + + #: integrate.c:242 + msgid "function with varying-size parameter cannot be inline" + msgstr "deÄŸiÅŸken uzunluk parametreli iÅŸlevler özümlenemez" + + #: integrate.c:245 + msgid "function with transparent unit parameter cannot be inline" + msgstr "ÅŸeffaf birim parametreli iÅŸlevler özümlenemez" + + #: integrate.c:264 + msgid "function with computed jump cannot inline" + msgstr "hesaplanmış jump bulunan iÅŸlevler özümlenemez" + + #: integrate.c:268 + msgid "function with nonlocal goto cannot be inline" + msgstr "yerel olmayan goto bulunan iÅŸlevler özümlenemez" + + #: integrate.c:282 + msgid "function with target specific attribute(s) cannot be inlined" + msgstr "hedefe özel öznitelikler bulunan iÅŸlevler özümlenemez" + + #: line-map.c:198 + #, c-format + msgid "In file included from %s:%u" + msgstr "" + "Sırayla bir altındaki dosyada içerilerek:\n" + "\t\t%s:%u" + + #. Translators note: this message is used in conjunction + #. with "In file included from %s:%ld" and some other + #. tricks. We want something like this: + #. + #. | In file included from sys/select.h:123, + #. | from sys/types.h:234, + #. | from userfile.c:31: + #. | bits/select.h:45: + #. + #. with all the "from"s lined up. + #. The trailing comma is at the beginning of this message, + #. and the trailing colon is not translated. + #: line-map.c:216 + #, c-format + msgid "" + ",\n" + " from %s:%u" + msgstr "" + ",\n" + "\t\t%s:%u" + + #. If we didn't find this parameter, issue an error message. + #: params.c:80 + #, c-format + msgid "invalid parameter `%s'" + msgstr "geçersiz parametre `%s'" + + #: profile.c:429 + #, c-format + msgid "corrupted profile info: prob for %d-%d thought to be %d" + msgstr "bozuk profil bilgisi: %3$d olduÄŸu halde %1$d-%2$d için sonda" + + #: profile.c:975 + #, c-format + msgid "file %s not found, execution counts assumed to be zero" + msgstr "%s bulunamadı, çalıştırma sayısı sıfır kabul edildi" + + #: profile.c:1022 + msgid ".da file contents exhausted too early" + msgstr ".da dosyasının içeriÄŸi çok erken atıldı" + + #: profile.c:1025 + msgid ".da file contents not exhausted" + msgstr ".da dosyasının içeriÄŸi atılmadı" + + #: protoize.c:599 + #, c-format + msgid "%s: internal abort\n" + msgstr "%s: dahili çıkış\n" + + #: protoize.c:690 + #, c-format + msgid "%s: error writing file `%s': %s\n" + msgstr "%s: `%s' dosyası yazılırken hata: %s\n" + + #: protoize.c:735 + #, c-format + msgid "%s: usage '%s [ -VqfnkN ] [ -i ] [ filename ... ]'\n" + msgstr "%s: kullanımı '%s [ -VqfnkN ] [ -i ] [ dosya ... ]'\n" + + #: protoize.c:738 + #, c-format + msgid "%s: usage '%s [ -VqfnkNlgC ] [ -B ] [ filename ... ]'\n" + msgstr "%s: kullanımı '%s [ -VqfnkNlgC ] [ -B ] [ dosya ... ]'\n" + + #: protoize.c:845 + #, c-format + msgid "%s: warning: no read access for file `%s'\n" + msgstr "%s: uyarı: `%s' dosyası için okuma eriÅŸimi yok\n" + + #: protoize.c:853 + #, c-format + msgid "%s: warning: no write access for file `%s'\n" + msgstr "%s: uyarı: `%s' dosyası için yazma eriÅŸimi yok\n" + + #: protoize.c:861 + #, c-format + msgid "%s: warning: no write access for dir containing `%s'\n" + msgstr "%s: uyarı: `%s' dosyasını içeren dizine yazma izni yok\n" + + #. Catch cases like /.. where we try to backup to a + #. point above the absolute root of the logical file + #. system. + #: protoize.c:1279 + #, c-format + msgid "%s: invalid file name: %s\n" + msgstr "%s: geçersiz dosya ismi: %s\n" + + #: protoize.c:1431 + #, c-format + msgid "%s: %s: can't get status: %s\n" + msgstr "%s: %s: durum alınamıyor: %s\n" + + #: protoize.c:1452 + #, c-format + msgid "" + "\n" + "%s: fatal error: aux info file corrupted at line %d\n" + msgstr "" + "\n" + "%s: ölümcül hata: yardımcı bilgi dosyası %d. satırda bozulmuÅŸ\n" + + #: protoize.c:1788 + #, c-format + msgid "%s:%d: declaration of function `%s' takes different forms\n" + msgstr "%s:%d: `%s' iÅŸlevinin bildirimi farklı ÅŸekiller alıyor\n" + + #: protoize.c:2046 + #, c-format + msgid "%s: compiling `%s'\n" + msgstr "%s: `%s' derleniyor\n" + + #: protoize.c:2069 + #, c-format + msgid "%s: wait: %s\n" + msgstr "%s: bekliyor: %s\n" + + #: protoize.c:2074 + #, c-format + msgid "%s: subprocess got fatal signal %d\n" + msgstr "%s: altyordam %d ölümcül sinyalini aldı\n" + + #: protoize.c:2082 + #, c-format + msgid "%s: %s exited with status %d\n" + msgstr "%s: %s %d durumuyla çıktı\n" + + #: protoize.c:2134 + #, c-format + msgid "%s: warning: missing SYSCALLS file `%s'\n" + msgstr "%s: uyarı: SYSCALLS dosyası `%s' kayıp\n" + + #: protoize.c:2143 protoize.c:2172 + #, c-format + msgid "%s: can't read aux info file `%s': %s\n" + msgstr "%s: yardımcı bilgi dosyası `%s' okunamıyor: %s\n" + + #: protoize.c:2188 protoize.c:2216 + #, c-format + msgid "%s: can't get status of aux info file `%s': %s\n" + msgstr "%s: yardımcı bilgi dosyası `%s' için durum alınamıyor: %s\n" + + #: protoize.c:2244 + #, c-format + msgid "%s: can't open aux info file `%s' for reading: %s\n" + msgstr "%s: yardımcı bilgi dosyası `%s' okumak için açılamıyor: %s\n" + + #: protoize.c:2262 + #, c-format + msgid "%s: error reading aux info file `%s': %s\n" + msgstr "%s: `%s' yardımcı bilgi dosyasında okuma hatası: %s\n" + + #: protoize.c:2275 + #, c-format + msgid "%s: error closing aux info file `%s': %s\n" + msgstr "%s: `%s' yardımcı bilgi dosyasında kapama hatası: %s\n" + + #: protoize.c:2291 + #, c-format + msgid "%s: can't delete aux info file `%s': %s\n" + msgstr "%s: yardımcı bilgi dosyası `%s' silinemiyor: %s\n" + + #: protoize.c:2373 protoize.c:4375 + #, c-format + msgid "%s: can't delete file `%s': %s\n" + msgstr "%s: `%s' silinemiyor: %s\n" + + #: protoize.c:2452 + #, c-format + msgid "%s: warning: can't rename file `%s' to `%s': %s\n" + msgstr "%s: uyarı: `%s' dosyasının ismi `%s' yapılamıyor: %s\n" + + #: protoize.c:2577 + #, c-format + msgid "%s: conflicting extern definitions of '%s'\n" + msgstr "%s: '%s' extern tanımları çeliÅŸiyor\n" + + #: protoize.c:2581 + #, c-format + msgid "%s: declarations of '%s' will not be converted\n" + msgstr "%s: '%s' bildirimleri dönüştürülmeyecek\n" + + #: protoize.c:2583 + #, c-format + msgid "%s: conflict list for '%s' follows:\n" + msgstr "%s: '%s' için çeliÅŸki listesi:\n" + + #: protoize.c:2616 + #, c-format + msgid "%s: warning: using formals list from %s(%d) for function `%s'\n" + msgstr "%1$s: uyarı: `%4$s' iÅŸlevi için biçimseller listesi %2$s(%3$d) den kullanılıyor\n" + + #: protoize.c:2656 + #, c-format + msgid "%s: %d: `%s' used but missing from SYSCALLS\n" + msgstr "%s: %d: `%s' kullanıldı ama SYSCALLS dan eksik var\n" + + #: protoize.c:2662 + #, c-format + msgid "%s: %d: warning: no extern definition for `%s'\n" + msgstr "%s: %d: uyarı: `%s' için extern tanımı yok\n" + + #: protoize.c:2693 + #, c-format + msgid "%s: warning: no static definition for `%s' in file `%s'\n" + msgstr "%s: uyarı: `%s' için `%s' dosyasında ststic tanımı yok\n" + + #: protoize.c:2699 + #, c-format + msgid "%s: multiple static defs of `%s' in file `%s'\n" + msgstr "%s: `%s' için `%s' dosyasında çok sayıda static tanımı\n" + + #: protoize.c:2872 protoize.c:2875 + #, c-format + msgid "%s: %d: warning: source too confusing\n" + msgstr "%s: %d: uyarı: kaynak çok karışık\n" + + #: protoize.c:3081 + #, c-format + msgid "%s: %d: warning: varargs function declaration not converted\n" + msgstr "%s: %d: uyarı: varargs iÅŸlev bildirimi dönüştürülmedi\n" + + #: protoize.c:3096 + #, c-format + msgid "%s: declaration of function `%s' not converted\n" + msgstr "%s: `%s' iÅŸlevinin bildirimi dönüştürülmedi\n" + + #: protoize.c:3219 + #, c-format + msgid "%s: warning: too many parameter lists in declaration of `%s'\n" + msgstr "%s: uyarı: `%s' bildiriminde parametre listelerinin sayısı çok fazla\n" + + #: protoize.c:3240 + #, c-format + msgid "" + "\n" + "%s: warning: too few parameter lists in declaration of `%s'\n" + msgstr "" + "\n" + "%s: uyarı: `%s' bildiriminde parametre listelerinin sayısı çok az\n" + + #: protoize.c:3338 + #, c-format + msgid "%s: %d: warning: found `%s' but expected `%s'\n" + msgstr "%s: %d: uyarı: `%s' bulundu ama `%s' gerekli\n" + + #: protoize.c:3516 + #, c-format + msgid "%s: local declaration for function `%s' not inserted\n" + msgstr "%s: `%s' iÅŸlevi için yerel bildirim araya eklenmedi\n" + + #: protoize.c:3543 + #, c-format + msgid "" + "\n" + "%s: %d: warning: can't add declaration of `%s' into macro call\n" + msgstr "" + "\n" + "%s: %d: uyarı: makro çaÄŸrısına `%s' bildirimi eklenemiyor\n" + + #: protoize.c:3617 + #, c-format + msgid "%s: global declarations for file `%s' not inserted\n" + msgstr "%s: `%s' iÅŸlevi için genel bildirim araya eklenmedi\n" + + #: protoize.c:3708 protoize.c:3738 + #, c-format + msgid "%s: definition of function `%s' not converted\n" + msgstr "%s: %s' iÅŸlevinin tanımı dönüştürülmedi\n" + + #: protoize.c:3727 + #, c-format + msgid "%s: %d: warning: definition of %s not converted\n" + msgstr "%s: %d: uyarı: %s tanımı dönüştürülmedi\n" + + #: protoize.c:4057 + #, c-format + msgid "%s: found definition of `%s' at %s(%d)\n" + msgstr "%s: `%s' tanımı %s(%d) de bulundu\n" + + #. If we make it here, then we did not know about this + #. function definition. + #: protoize.c:4073 + #, c-format + msgid "%s: %d: warning: `%s' excluded by preprocessing\n" + msgstr "%s: %d: uyarı: `%s' öniÅŸlem tarafından dışlandı\n" + + #: protoize.c:4076 + #, c-format + msgid "%s: function definition not converted\n" + msgstr "%s: iÅŸlev tanımı dönüştürülmedi\n" + + #: protoize.c:4135 + #, c-format + msgid "%s: `%s' not converted\n" + msgstr "%s: `%s' dönüştürülmedi\n" + + #: protoize.c:4143 + #, c-format + msgid "%s: would convert file `%s'\n" + msgstr "%s: `%s' dönüşüm dosyası olacaktı\n" + + #: protoize.c:4146 + #, c-format + msgid "%s: converting file `%s'\n" + msgstr "%s: `%s' dönüştürülüyor\n" + + #: protoize.c:4156 + #, c-format + msgid "%s: can't get status for file `%s': %s\n" + msgstr "%s: `%s' dosyası için durum bilgileri alınamadı: %s\n" + + #: protoize.c:4198 + #, c-format + msgid "%s: can't open file `%s' for reading: %s\n" + msgstr "%s: `%s' okumak için açılamadı: %s\n" + + #: protoize.c:4213 + #, c-format + msgid "" + "\n" + "%s: error reading input file `%s': %s\n" + msgstr "" + "\n" + "%s: girdi dosyası `%s' okunurken hata: %s\n" + + #: protoize.c:4247 + #, c-format + msgid "%s: can't create/open clean file `%s': %s\n" + msgstr "%s: temiz dosya `%s' oluÅŸturulamıyor/açılamıyor: %s\n" + + #: protoize.c:4352 + #, c-format + msgid "%s: warning: file `%s' already saved in `%s'\n" + msgstr "%s: uyarı: `%s' zaten `%s' içine kaydedilmiÅŸ\n" + + #: protoize.c:4360 + #, c-format + msgid "%s: can't link file `%s' to `%s': %s\n" + msgstr "%s: `%s' -> `%s' bağı oluÅŸturulamıyor: %s\n" + + #: protoize.c:4390 + #, c-format + msgid "%s: can't create/open output file `%s': %s\n" + msgstr "%s: çıktı dosyası `%s' oluÅŸturulamıyor/açılamıyor: %s\n" + + #: protoize.c:4423 + #, c-format + msgid "%s: can't change mode of file `%s': %s\n" + msgstr "%s: `%s' dosyasının kipi deÄŸiÅŸtirilemiyor: %s\n" + + #: protoize.c:4598 + #, c-format + msgid "%s: cannot get working directory: %s\n" + msgstr "%s: çalışma dizini alınamıyor: %s\n" + + #: protoize.c:4696 + #, c-format + msgid "%s: input file names must have .c suffixes: %s\n" + msgstr "%s: girdi dosyası isimlerinin soneki .c olmalıdır: %s\n" + + #: real.c:824 real.c:1001 + msgid "conversion from NaN to int" + msgstr "NaN'dan int'e dönüşüm" + + #: real.c:847 + msgid "conversion from NaN to unsigned int" + msgstr "NaN'dan unsigned int'e dönüşüm" + + #: real.c:2730 + msgid "floating point overflow" + msgstr "gerçel sayı taÅŸması" + + #: real.c:4395 real.c:6675 real.c:6756 + msgid "overflow on truncation to integer" + msgstr "tamsayıya indirgemede taÅŸma" + + #: real.c:4467 + msgid "overflow on truncation to unsigned integer" + msgstr "iÅŸaretsiz tamsayıya indirgemede taÅŸma" + + #: real.c:5812 + #, c-format + msgid "%s: argument domain error" + msgstr "%s: argüman alanı hatası" + + #: real.c:5813 + #, c-format + msgid "%s: function singularity" + msgstr "%s: iÅŸlev eÅŸsizliÄŸi" + + #: real.c:5814 + #, c-format + msgid "%s: overflow range error" + msgstr "%s: kapsamın üstten taÅŸma hatası" + + #: real.c:5815 + #, c-format + msgid "%s: underflow range error" + msgstr "%s: kapsamın alttan taÅŸma hatası" + + #: real.c:5816 + #, c-format + msgid "%s: total loss of precision" + msgstr "%s: tam kesinlik kaybı" + + #: real.c:5817 + #, c-format + msgid "%s: partial loss of precision" + msgstr "%s: kısmi kesinlik kaybı" + + #: real.c:5818 + #, c-format + msgid "%s: NaN - producing operation" + msgstr "%s: NaN - iÅŸlem üretiyor" + + #: reg-stack.c:677 + #, c-format + msgid "output constraint %d must specify a single register" + msgstr "çıktı koÅŸulu %d bir tek yazmaç belirtmeli" + + #: reg-stack.c:687 + #, c-format + msgid "output constraint %d cannot be specified together with \"%s\" clobber" + msgstr "çıktı koÅŸulu %d \"%s\" taşırmasıyla birlikte belirtilemez" + + #: reg-stack.c:710 + msgid "output regs must be grouped at top of stack" + msgstr "çıktı yazmaçları yığının üstünde gruplanmış olmalı" + + #: reg-stack.c:747 + msgid "implicitly popped regs must be grouped at top of stack" + msgstr "örtük olarak emilmiÅŸ yazmaçlar yığının üstünde gruplanmalı" + + #: reg-stack.c:766 + #, c-format + msgid "output operand %d must use `&' constraint" + msgstr "çıktı terimi %d `&' kısıtını kullanmalı" + + #: regclass.c:778 + #, c-format + msgid "can't use '%s' as a %s register" + msgstr "'%s' bir %s yazmacı olarak kullanılamıyor" + + #: regclass.c:793 config/ia64/ia64.c:3840 config/ia64/ia64.c:3847 + #, c-format + msgid "unknown register name: %s" + msgstr "bilinmeyen yazmaç ismi: %s" + + #: regclass.c:804 + msgid "global register variable follows a function definition" + msgstr "genel yazmaç deÄŸiÅŸkeni bir iÅŸlev tanımını izliyor" + + #: regclass.c:808 + msgid "register used for two global register variables" + msgstr "yazmaç iki genel yazmaç deÄŸiÅŸkeni için kullanılmış" + + #: regclass.c:813 + msgid "call-clobbered register used for global register variable" + msgstr "çaÄŸrı-taÅŸmalı yazmaç genel yazmaç deÄŸiÅŸkeni için kullanılmış" + + #: regrename.c:1845 + #, c-format + msgid "validate_value_data: [%u] Bad next_regno for empty chain (%u)" + msgstr "validate_value_data: [%u] BoÅŸ zincir için next_regno hatalı (%u)" + + #: regrename.c:1857 + #, c-format + msgid "validate_value_data: Loop in regno chain (%u)" + msgstr "validate_value_data: regno zinciri içinde döngü (%u)" + + #: regrename.c:1860 + #, c-format + msgid "validate_value_data: [%u] Bad oldest_regno (%u)" + msgstr "validate_value_data: [%u] oldest_regno hatalı (%u)" + + #: regrename.c:1872 + #, c-format + msgid "validate_value_data: [%u] Non-empty reg in chain (%s %u %i)" + msgstr "validate_value_data: [%u] zincir içinde boÅŸ olmayan yazmaç (%s %u %i)" + + #: reload.c:1208 + msgid "cannot reload integer constant operand in `asm'" + msgstr "`asm' içindeki tamsayı sabit terim yeniden yüklenemiyor" + + #: reload.c:1230 + msgid "impossible register constraint in `asm'" + msgstr "`asm' içindeki yazmaç ÅŸartı mümkün deÄŸil" + + #: reload.c:3389 + msgid "`&' constraint used with no register class" + msgstr "`&' ÅŸartı yazmaç sınıfsız kullanılmış" + + #: reload.c:3557 + msgid "unable to generate reloads for:" + msgstr "aÅŸağıdakiler için yeniden yüklemeler üretilemiyor:" + + #: reload.c:3558 reload.c:3772 + msgid "inconsistent operand constraints in an `asm'" + msgstr "bir `asm' içindeki terim ÅŸartı çeliÅŸkili" + + #: reload1.c:1247 + msgid "frame size too large for reliable stack checking" + msgstr "güvenilir yığın denetimi için çerçeve boyutu çok büyük" + + #: reload1.c:1250 + msgid "try reducing the number of local variables" + msgstr "yerel deÄŸiÅŸkenlerin sayısını azaltmayı deneyin" + + #: reload1.c:1902 + #, c-format + msgid "can't find a register in class `%s' while reloading `asm'" + msgstr "`asm' yeniden yüklenirken sınıf `%s' içindeki bir yazmaç ismi bulunamıyor" + + #: reload1.c:1906 + #, c-format + msgid "unable to find a register to spill in class `%s'" + msgstr "`%s' sınıfı içinde dökülecek bir yazmaç bulunamadı." + + #: reload1.c:1908 + msgid "this is the insn:" + msgstr "bu o komuttur:" + + #: reload1.c:3924 + msgid "`asm' operand requires impossible reload" + msgstr "`asm' terimi imkansız yeniden yükleme gerektiriyor" + + #. It's the compiler's fault. + #: reload1.c:5040 + msgid "could not find a spill register" + msgstr "bir döküm yazmacı bulunamadı" + + #: reload1.c:5045 + msgid "`asm' operand constraint incompatible with operand size" + msgstr "`asm' teriminin koÅŸulu terim boyutu ile uyumsuz" + + #. It's the compiler's fault. + #: reload1.c:6639 + msgid "VOIDmode on an output" + msgstr "bir çıktıda VOIDmode" + + #: reload1.c:6640 + msgid "output operand is constant in `asm'" + msgstr "`asm' içindeki çıktı terimi bir sabit" + + #: rtl-error.c:139 + msgid "unrecognizable insn:" + msgstr "tanımlanamayan komut:" + + #: rtl-error.c:141 + msgid "insn does not satisfy its constraints:" + msgstr "komut kendi kısıtlarını gözönüne almıyor:" + + #: rtl.c:627 + #, c-format + msgid "RTL check: access of elt %d of `%s' with last elt %d in %s, at %s:%d" + msgstr "RTL denetimi: %5$s:%6$d: %4$s iÅŸlevindeki son %3$d öğe ile `%2$s' nin %1$d. öğesinin eriÅŸimi" + + #: rtl.c:642 + #, c-format + msgid "RTL check: expected elt %d type '%c', have '%c' (rtx %s) in %s, at %s:%d" + msgstr "RTL denetimi: %6$s:%7$d: %5$s içinde öğe %1$d türü olarak '%2$c' umulurken '%3$c' var (rtx %4$s)" + + #: rtl.c:658 + #, c-format + msgid "RTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s) in %s, at %s:%d" + msgstr "RTL denetimi: %7$s:%8$d: %6$s içinde öğe %1$d türü olarak'%2$c' ya da '%3$c' umulurken '%4$c' var (rtx %5$s)" + + #: rtl.c:671 + #, c-format + msgid "RTL check: expected code `%s', have `%s' in %s, at %s:%d" + msgstr "RTL denetimi: %4$s:%5$d: %3$s içindeki kod için `%1$s' umulurken `%2$s' var" + + #: rtl.c:685 + #, c-format + msgid "RTL check: expected code `%s' or `%s', have `%s' in %s, at %s:%d" + msgstr "RTL denetimi: %5$s:%6$d: %4$s içindeki kod için `%1$s' ya da `%2$s' umulurken `%3$s' var" + + #: rtl.c:700 + #, c-format + msgid "RTL check: access of elt %d of vector with last elt %d in %s, at %s:%d" + msgstr "RTL denetimi: %4$s:%5$d: %3$s iÅŸlevindeki son %2$d öğe ile vektörün %1$d. öğesinin eriÅŸimi" + + #: stmt.c:927 + #, c-format + msgid "jump to `%s' invalidly jumps into binding contour" + msgstr "`%s' e sıçrama geçersiz olarak baÄŸlama sınırları içinde gerçekleÅŸiyor" + + #: stmt.c:1163 stmt.c:3755 + #, c-format + msgid "label `%s' used before containing binding contour" + msgstr "`%s' etiketi kapsanan baÄŸ sınırından önce kullanılmış" + + #: stmt.c:1343 + msgid "output operand constraint lacks `='" + msgstr "çıktı terim kısıtı eksiÄŸi `='" + + #: stmt.c:1358 + #, c-format + msgid "output constraint `%c' for operand %d is not at the beginning" + msgstr "%2$d terimi için çıktı ÅŸartı `%1$c' baÅŸlangıçta deÄŸil" + + #: stmt.c:1380 + msgid "operand constraint contains incorrectly positioned '+' or '='" + msgstr "terim kısıtı yanlış konumlu `+' ya da '=' içeriyor" + + #: stmt.c:1386 stmt.c:1486 + #, c-format + msgid "`%%' constraint used with last operand" + msgstr "`%%' kısıtı son terimle kullanılmış" + + #: stmt.c:1405 + msgid "matching constraint not valid in output operand" + msgstr "eÅŸleÅŸen kısıt çıktı teriminde geçerli deÄŸil" + + #: stmt.c:1477 + #, c-format + msgid "input operand constraint contains `%c'" + msgstr "girdi terimi kısıtı `%c' içeriyor" + + #: stmt.c:1517 + msgid "matching constraint references invalid operand number" + msgstr "kısıt referansları geçersiz terim numaraları eÅŸleÅŸtiriyor" + + #: stmt.c:1549 + #, c-format + msgid "invalid punctuation `%c' in constraint" + msgstr "koÅŸul içindeki `%c' iÅŸareti geçersiz" + + #: stmt.c:1645 + #, c-format + msgid "unknown register name `%s' in `asm'" + msgstr "`asm' içindeki yazmaç ismi `%s' bilinmiyor" + + #: stmt.c:1689 + #, c-format + msgid "more than %d operands in `asm'" + msgstr "`asm' içinde %d terimden fazlası var" + + #: stmt.c:1748 + #, c-format + msgid "output number %d not directly addressable" + msgstr "çıktı numarası %d doÄŸrudan adreslenebilir deÄŸil" + + #. ??? Leave this only until we have experience with what + #. happens in combine and elsewhere when constraints are + #. not satisfied. + #: stmt.c:1817 stmt.c:1846 + #, c-format + msgid "asm operand %d probably doesn't match constraints" + msgstr "asm terimi %d belki ÅŸartlara uymaz" + + #: stmt.c:1992 + msgid "too many alternatives in `asm'" + msgstr "`asm' içindeki almaşıkların sayısı çok fazla" + + #: stmt.c:2004 + msgid "operand constraints for `asm' differ in number of alternatives" + msgstr "`asm' için terim kısıtları farklı almaşık sayısında" + + #: stmt.c:2057 + #, c-format + msgid "duplicate asm operand name '%s'" + msgstr "terim ismi '%s' yinelenmiÅŸ" + + #: stmt.c:2144 + msgid "missing close brace for named operand" + msgstr "isimi terim için kapama parantezi eksik" + + #: stmt.c:2172 + #, c-format + msgid "undefined named operand '%s'" + msgstr "tanımlanmamış isimli terim '%s'" + + #: stmt.c:3692 + #, c-format + msgid "unused variable `%s'" + msgstr "deÄŸiÅŸken `%s' kullanılmamış" + + #: stmt.c:5167 + #, c-format + msgid "enumeration value `%s' not handled in switch" + msgstr "sembolik sabit grubu deÄŸeri `%s' switch deyiminde elde edilemedi" + + #: stmt.c:5193 stmt.c:5213 + #, c-format + msgid "case value `%ld' not in enumerated type" + msgstr "case deÄŸeri `%ld' sembolik sabit grubunda deÄŸil" + + #: stmt.c:5196 stmt.c:5216 + #, c-format + msgid "case value `%ld' not in enumerated type `%s'" + msgstr "case deÄŸeri `%ld' sembolik sabit grubu `%s' içinde deÄŸil" + + #: stor-layout.c:173 + msgid "type size can't be explicitly evaluated" + msgstr "tür boyutu doÄŸrudan deÄŸerlendirilemez" + + #: stor-layout.c:175 + msgid "variable-size type declared outside of any function" + msgstr "deÄŸiÅŸken boyutu türü her iÅŸlevin dışında bildirilmiÅŸ" + + #: stor-layout.c:456 + #, c-format + msgid "size of `%s' is %d bytes" + msgstr "`%s' için geniÅŸlik %d bayt" + + #: stor-layout.c:458 + #, c-format + msgid "size of `%s' is larger than %d bytes" + msgstr "`%s' için geniÅŸlik %d bayttan fazla" + + #: stor-layout.c:856 stor-layout.c:1157 + #, c-format + msgid "packed attribute causes inefficient alignment for `%s'" + msgstr "paketli öznitelik `%s' için yetersiz hizalama yapar" + + #: stor-layout.c:858 stor-layout.c:1159 + #, c-format + msgid "packed attribute is unnecessary for `%s'" + msgstr "paketli öznitelik `%s' için gereksiz" + + #: stor-layout.c:873 + #, c-format + msgid "padding struct to align `%s'" + msgstr "yapı hizalaması `%s' olarak ayarlanıyor" + + #: stor-layout.c:1121 + msgid "padding struct size to alignment boundary" + msgstr "yapı boyutu hizalama sınırlarına ayarlanıyor" + + #: stor-layout.c:1164 + msgid "packed attribute causes inefficient alignment" + msgstr "paketli öznitelik yetersiz hizalama yapar" + + #: stor-layout.c:1166 + msgid "packed attribute is unnecessary" + msgstr "paketli öznitelik gereksiz" + + #: timevar.c:448 + msgid "" + "\n" + "Execution times (seconds)\n" + msgstr "" + "\n" + "Çalışma süreleri (saniye)\n" + + #. Print total time. + #: timevar.c:498 + msgid " TOTAL :" + msgstr " TOPLAM :" + + #: timevar.c:534 + #, c-format + msgid "time in %s: %ld.%06ld (%ld%%)\n" + msgstr "%s süresi: %ld.%06ld (%%%ld)\n" + + #: tlink.c:428 + #, c-format + msgid "collect: reading %s\n" + msgstr "collect: %s okunuyor\n" + + #: tlink.c:532 + #, c-format + msgid "collect: recompiling %s\n" + msgstr "collect: %s yeniden derleniyor\n" + + #: tlink.c:698 + #, c-format + msgid "collect: tweaking %s in %s\n" + msgstr "collect: %2$s içindeki %1$s ÅŸablon zayıflatması\n" + + #: tlink.c:745 + msgid "collect: relinking\n" + msgstr "collect: yeniden birleÅŸtirme yapılıyor\n" + + #: tlink.c:754 + #, c-format + msgid "ld returned %d exit status" + msgstr "ld çıkış durumu %d ile döndü" + + #: toplev.c:895 + msgid "Generate debugging info in default format" + msgstr "Öntanımlı biçemde hata ayıklama bilgisi üretir" + + #: toplev.c:896 + msgid "Generate debugging info in default extended format" + msgstr "" + "Öntanımlı geliÅŸmiÅŸ biçemde hata ayıklama bilgisi\n" + " üretir" + + #: toplev.c:898 + msgid "Generate STABS format debug info" + msgstr "STABS biçemi hata ayıklama bilgisi üretir" + + #: toplev.c:899 + msgid "Generate extended STABS format debug info" + msgstr "GeliÅŸmiÅŸ STABS biçemi hata ayıklama bilgisi üretir" + + #: toplev.c:902 + msgid "Generate DWARF-1 format debug info" + msgstr "DWARF-1 biçemi hata ayıklama bilgisi üretir" + + #: toplev.c:904 + msgid "Generate extended DWARF-1 format debug info" + msgstr "GeliÅŸmiÅŸ DWARF-1 biçemi hata ayıklama bilgisi üretir" + + #: toplev.c:907 + msgid "Generate DWARF-2 debug info" + msgstr "DWARF-2 biçemi hata ayıklama bilgisi üretir" + + #: toplev.c:910 + msgid "Generate XCOFF format debug info" + msgstr "XCOFF biçemi hata ayıklama bilgisi üretir" + + #: toplev.c:911 + msgid "Generate extended XCOFF format debug info" + msgstr "GeliÅŸmiÅŸ XCOFF biçemi hata ayıklama bilgisi üretir" + + #: toplev.c:914 + msgid "Generate COFF format debug info" + msgstr "COFF biçemi hata ayıklama bilgisi üretilir" + + #: toplev.c:917 + msgid "Generate VMS format debug info" + msgstr "VMS biçemi hata ayıklama bilgisi üretilir" + + #: toplev.c:961 + msgid "Perform DWARF2 duplicate elimination" + msgstr "DWARF2 yinelenmiÅŸ elemesi uygulanır" + + #: toplev.c:963 + msgid "Do not store floats in registers" + msgstr "Gerçel sayılar yazmaçlarda saklanmaz" + + #: toplev.c:965 + msgid "Consider all mem refs through pointers as volatile" + msgstr "" + "Tüm göstergeli bellek referanslarının anlık\n" + " olduÄŸu varsayılır" + + #: toplev.c:967 + msgid "Consider all mem refs to global data to be volatile" + msgstr "" + "Global verilerin tüm bellek referanslarının anlık\n" + " olduÄŸu varsayılır" + + #: toplev.c:969 + msgid "Consider all mem refs to static data to be volatile" + msgstr "" + "Statik verilerin tüm bellek referanslarının anlık\n" + " olduÄŸu varsayılır" + + #: toplev.c:971 + msgid "Defer popping functions args from stack until later" + msgstr "Yığından iÅŸlev argümanlarının çekilmesini erteler" + + #: toplev.c:973 + msgid "When possible do not generate stack frames" + msgstr "Mümkün olduÄŸunca yığın çerçeveleri üretilmez" + + #: toplev.c:975 + msgid "Optimize sibling and tail recursive calls" + msgstr "KardeÅŸ ve kuyruk özyinelemeli çaÄŸrılar eniyilenir" + + #: toplev.c:977 + msgid "When running CSE, follow jumps to their targets" + msgstr "" + "Ortak alt ifade elemesi sırasında onların\n" + " hedeflerine dallanmalar izlenir" + + #: toplev.c:979 + msgid "When running CSE, follow conditional jumps" + msgstr "" + "Ortak alt ifade elemesi sırasında koÅŸullu\n" + " dallanmalar izlenir" + + #: toplev.c:981 + msgid "Perform a number of minor, expensive optimizations" + msgstr "Masraflı eniyilemelerden birkaçını uygular" + + #: toplev.c:983 + msgid "Perform jump threading optimizations" + msgstr "Atlama kanallaması eniyilemesi uygulanır" + + #: toplev.c:985 + msgid "Perform strength reduction optimizations" + msgstr "Güç azaltma eniyilemesi uygulanır" + + #: toplev.c:987 + msgid "Perform loop unrolling when iteration count is known" + msgstr "Yineleme sayısı bilindiÄŸinde ters döngüleme uygulanır" + + #: toplev.c:989 + msgid "Perform loop unrolling for all loops" + msgstr "Tüm döngülere ters döngüleme uygular" + + #: toplev.c:991 + msgid "Generate prefetch instructions, if available, for arrays in loops" + msgstr "" + "Mümkünse, döngülerdeki diziler için önalım\n" + " komutları üretilir" + + #: toplev.c:993 + msgid "Force all loop invariant computations out of loops" + msgstr "" + "Döngülerdeki döngü dışına taşınacak olan deÄŸiÅŸimsiz\n" + " hesaplama etkinleÅŸtirir" + + #: toplev.c:995 + msgid "Strength reduce all loop general induction variables" + msgstr "" + "Tüm döngülerdeki genel baÅŸlatma deÄŸiÅŸkenlerinin\n" + " gücünü azaltır" + + #: toplev.c:997 + msgid "Store strings in writable data section" + msgstr "Dizgeler yazılabilir veri bölümünde saklanır" + + #: toplev.c:999 + msgid "Enable machine specific peephole optimizations" + msgstr "Makinaya özel gözlem deliÄŸi eniyilemesi etkinleÅŸtirilir" + + #: toplev.c:1001 + msgid "Copy memory operands into registers before using" + msgstr "" + "Kullanmadan önce bellek iÅŸlemimlerini yazmaçlara\n" + " kopyalar" + + #: toplev.c:1003 + msgid "Copy memory address constants into regs before using" + msgstr "" + "Kullanmadan önce bellek adres sabitlerini\n" + " yazmaçlara kopyalar" + + #: toplev.c:1005 + msgid "Allow function addresses to be held in registers" + msgstr "Yazmaçlarda tutulan iÅŸlev adreslerine izin verilir" + + #: toplev.c:1007 + msgid "Integrate simple functions into their callers" + msgstr "Basit iÅŸlevleri onları çağıranların içine gömer" + + #: toplev.c:1009 + msgid "Generate code for funcs even if they are fully inlined" + msgstr "" + "Tamamen özümlenmiÅŸ olsalar bile iÅŸlevler için kod\n" + " üretilir" + + #: toplev.c:1011 + msgid "Pay attention to the 'inline' keyword" + msgstr "'inline' anahtar sözcüğüne dikkat edilir" + + #: toplev.c:1013 + msgid "Emit static const variables even if they are not used" + msgstr "" + "Kullanılmamış bile olsa statik sabit deÄŸiÅŸkenler\n" + " içerilir" + + #: toplev.c:1015 + msgid "Check for syntax errors, then stop" + msgstr "Sözdizimi denetimi yaptıktan sonra durur" + + #: toplev.c:1017 + msgid "Mark data as shared rather than private" + msgstr "Veriyi özelden çok paylaşımlı olarak imler" + + #: toplev.c:1019 + msgid "Enable saving registers around function calls" + msgstr "" + "İşlev çaÄŸrıları civarındaki yazmaçların kaydını\n" + " etkinleÅŸtirir" + + #: toplev.c:1021 + msgid "Return 'short' aggregates in memory, not registers" + msgstr "" + "Yazmaçlardaki deÄŸil bellekteki 'short' küme\n" + " döndürülür" + + #: toplev.c:1023 + msgid "Return 'short' aggregates in registers" + msgstr "Yazmaçlardaki 'short' kümeleri döndürülür" + + #: toplev.c:1025 + msgid "Attempt to fill delay slots of branch instructions" + msgstr "" + "Dallanma komutlarının gecikme yuvalarını doldurmaya\n" + " çalışır" + + #: toplev.c:1027 + msgid "Perform the global common subexpression elimination" + msgstr "Genel ortak alt ifade elemesi uygular" + + #: toplev.c:1029 + msgid "Perform enhanced load motion during global subexpression elimination" + msgstr "" + "Genel alt ifade elemesi sırasında geniÅŸletilmiÅŸ yük\n" + " hareketi uygulanır" + + #: toplev.c:1031 + msgid "Perform store motion after global subexpression elimination" + msgstr "" + "Genel alt ifade elemesinden sonra saklama hareketi\n" + " uygulanır" + + #: toplev.c:1033 + msgid "Run CSE pass after loop optimizations" + msgstr "Döngü eniyilemesinden sonra CSE geçiÅŸi çalıştırılır" + + #: toplev.c:1035 + msgid "Run the loop optimizer twice" + msgstr "Döngü eniyilemesi iki kere çalıştırılır" + + #: toplev.c:1037 + msgid "Delete useless null pointer checks" + msgstr "Kullanışsız null gösterge denetimlerini siler" + + #: toplev.c:1039 + msgid "Pretend that host and target use the same FP format" + msgstr "" + "Ana ve hedef makina aynı kayan noktalı biçemi\n" + " kullanıyormuÅŸ gibi davranır" + + #: toplev.c:1041 + msgid "Reschedule instructions before register allocation" + msgstr "Yazmaç tahsisinden önce komutları yeniden zamanlar" + + #: toplev.c:1043 + msgid "Reschedule instructions after register allocation" + msgstr "Yazmaç tahsisinden sonra komutları yeniden zamanlar" + + #: toplev.c:1045 + msgid "Enable scheduling across basic blocks" + msgstr "Temel bloklar arasında zamanlama etkinleÅŸtirilir" + + #: toplev.c:1047 + msgid "Allow speculative motion of non-loads" + msgstr "Yük oluÅŸturmayanların tahmini hareketine izin verilir" + + #: toplev.c:1049 + msgid "Allow speculative motion of some loads" + msgstr "Bazı yüklerin tahmini hareketine izin verilir" + + #: toplev.c:1051 + msgid "Allow speculative motion of more loads" + msgstr "Fazla yüklerin tahmini hareketine izin verilir" + + #: toplev.c:1053 + msgid "Replace add,compare,branch with branch on count reg" + msgstr "" + "Ekleme, karşılaÅŸtırma, dallanma sayaç üzerinden\n" + " dallanma ile deÄŸiÅŸtirilir" + + #: toplev.c:1055 + msgid "Generate position independent code, if possible" + msgstr "Mümkünse, konumdan bağımsız kod üretilir" + + #: toplev.c:1058 + msgid "Enable exception handling" + msgstr "OlaÄŸandışılıkların yakalanması etkinleÅŸtirilir" + + #: toplev.c:1060 + msgid "Just generate unwind tables for exception handling" + msgstr "" + "OlaÄŸandışılıkların yakalanması için birbirlerini\n" + " etkilemeyenlerin tablosu oluÅŸturulur" + + #: toplev.c:1062 + msgid "Generate unwind tables exact at each instruction boundary" + msgstr "" + "Her komut sınırında birbirlerini etkilemeyenlerin\n" + " tablosu kesin oluÅŸturulur" + + #: toplev.c:1064 + msgid "Support synchronous non-call exceptions" + msgstr "EÅŸzamanlı çaÄŸrısız olaÄŸandışılıklar desteklenir" + + #: toplev.c:1066 + msgid "Insert arc based program profiling code" + msgstr "Dal baÄŸlantı kodunu yerleÅŸtirir" + + #: toplev.c:1068 + msgid "Create data files needed by gcov" + msgstr "gcov için gereken veri dosyaları oluÅŸturulur" + + #: toplev.c:1070 + msgid "Use profiling information for branch probabilities" + msgstr "" + "Dallanma olasılıkları için ayrımlama bilgileri\n" + " kullanılır" + + #: toplev.c:1072 + msgid "Reorder basic blocks to improve code placement" + msgstr "" + "Kod yerleÅŸimini iyileÅŸtirecek temel blokları\n" + " yeniden sıralar" + + #: toplev.c:1074 + msgid "Do the register renaming optimization pass" + msgstr "Yazmaç isimlendirme eniyilemesi aÅŸamasını uygular" + + #: toplev.c:1076 + msgid "Do the register copy-propagation optimization pass" + msgstr "Yazmaç kopya-giriÅŸim eniyileme aÅŸaması uygulanır" + + #: toplev.c:1078 + msgid "Do not put uninitialized globals in the common section" + msgstr "İlklendirilmemiÅŸ global'ler ortak bölüme konmaz" + + #: toplev.c:1080 + msgid "Do not generate .size directives" + msgstr ".size yönergeleri üretilmez" + + #: toplev.c:1082 + msgid "place each function into its own section" + msgstr "Her iÅŸlev kendi bölümüne yerleÅŸtirilir" + + #: toplev.c:1084 + msgid "place data items into their own section" + msgstr "Veri öğelerini kendi bölümlerine yerleÅŸtirir" + + #: toplev.c:1086 + msgid "Add extra commentry to assembler output" + msgstr "Çevirici çıktısına fazladan açıklama ekler" + + #: toplev.c:1088 + msgid "Output GNU ld formatted global initializers" + msgstr "GNU ld biçemli genel ilklendiricileri çıktılar" + + #: toplev.c:1090 + msgid "Enables a register move optimization" + msgstr "Bir yazmaç taşıma eniyilemesi etkinleÅŸtirilir" + + #: toplev.c:1092 + msgid "Do the full regmove optimization pass" + msgstr "BaÅŸtan baÅŸa yazmaç taşıma eniyilemesi yapar" + + #: toplev.c:1094 + msgid "Pack structure members together without holes" + msgstr "Yapı üyelerini birlikte deliksiz paketler" + + #: toplev.c:1096 + msgid "Insert stack checking code into the program" + msgstr "Programa yığın denetimi kodu yerleÅŸtirilir" + + #: toplev.c:1098 + msgid "Specify that arguments may alias each other & globals" + msgstr "" + "Argümanların bir diÄŸerinin ya da globallerin takma\n" + " adı olabileceÄŸi varsayılır" + + #: toplev.c:1100 + msgid "Assume arguments may alias globals but not each other" + msgstr "" + "Argümanların globallerden baÅŸkasına takma ad\n" + " olamayacağı varsayılır" + + #: toplev.c:1102 + msgid "Assume arguments do not alias each other or globals" + msgstr "" + "Argümanların bir diÄŸerine ya da globallere takma ad\n" + " olmadığı varsayılır" + + #: toplev.c:1104 + msgid "Assume strict aliasing rules apply" + msgstr "Sıkı takma ad kuralları uygulanacağı varsayılır" + + #: toplev.c:1106 + msgid "Align the start of loops" + msgstr "Döngü baÅŸlangıçları bayt sınırlarına ayarlanır" + + #: toplev.c:1108 + msgid "Align labels which are only reached by jumping" + msgstr "" + "Sadece atlanarak ulaşılabilen hedefler bayt\n" + " sınırlarına ayarlanır" + + #: toplev.c:1110 + msgid "Align all labels" + msgstr "Tüm dallanma hedefleri bayt sınırlarına ayarlanır" + + #: toplev.c:1112 + msgid "Align the start of functions" + msgstr "İşlevlerin baÅŸlangıcı hizalanır" + + #: toplev.c:1114 + msgid "Attempt to merge identical constants accross compilation units" + msgstr "" + "ÖzdeÅŸ sabitler derleme birimlerine karşın\n" + " katıştırılmaya çalışılır" + + #: toplev.c:1116 + msgid "Attempt to merge identical constants and constant variables" + msgstr "" + "ÖzdeÅŸ sabitler ve sabit deÄŸiÅŸkenler katıştırılmaya\n" + " çalışılır" + + #: toplev.c:1118 + msgid "Suppress output of instruction numbers and line number notes in debugging dumps" + msgstr "" + "Hata ayıklama dökümlerinde satır numarası ve komut\n" + " numarası bilgilerinın çıktılanması engellenir" + + #: toplev.c:1120 + msgid "Instrument function entry/exit with profiling calls" + msgstr "İşlevlere giriÅŸ ve çıkışta kullanım çaÄŸrıları üretir" + + #: toplev.c:1122 + msgid "Enable SSA optimizations" + msgstr "SSA eniyilemesi etkinleÅŸtirilir" + + #: toplev.c:1124 + msgid "Enable SSA conditional constant propagation" + msgstr "SSA koÅŸullu sabit giriÅŸimi etkinleÅŸtirilir" + + #: toplev.c:1126 + msgid "Enable aggressive SSA dead code elimination" + msgstr "Girgin SSA ölü kod elemesi etkinleÅŸtirilir" + + #: toplev.c:1128 + msgid "External symbols have a leading underscore" + msgstr "Alt çizgi ile baÅŸlayan sembollerde uyarır" + + #: toplev.c:1130 + msgid "Process #ident directives" + msgstr "#ident yönergeleri iÅŸlenir" + + #: toplev.c:1132 + msgid "Enables an rtl peephole pass run before sched2" + msgstr "" + "sched2 çalıştırılmadan önce bir rtl gözlem deliÄŸi\n" + " aÅŸaması etkinleÅŸtirilir" + + #: toplev.c:1134 + msgid "Enables guessing of branch probabilities" + msgstr "Dallanma olasılığı tahmini etkinleÅŸtirilir" + + #: toplev.c:1136 + msgid "Set errno after built-in math functions" + msgstr "" + "YerleÅŸik matematik iÅŸlevlerinden sonra ERRNO\n" + " kullanılır" + + #: toplev.c:1138 + msgid "Floating-point operations can trap" + msgstr "kayan nokta iÅŸlemleri yakalanabilir" + + #: toplev.c:1140 + msgid "Allow math optimizations that may violate IEEE or ANSI standards" + msgstr "" + "IEEE veya ANSI standartlarını bozabilen matematiksel\n" + " eniyilemelere izin verilir" + + #: toplev.c:1142 + msgid "Compile pointers as triples: value, base & end" + msgstr "Göstergeler bu üçlüden olarak derlenir: deÄŸer, taban ve son" + + #: toplev.c:1144 + msgid "Generate code to check bounds before dereferencing pointers and arrays" + msgstr "" + "BaÅŸvuru bozan gösterge ve dizilerden önce denetim\n" + " sınırlarına kod üretilir" + + #: toplev.c:1146 + msgid "Convert floating point constant to single precision constant" + msgstr "" + "Kayan noktalı sabitler tek duyarlıklı sabitlere\n" + " dönüştürülür" + + #: toplev.c:1148 + msgid "Report time taken by each compiler pass at end of run" + msgstr "" + "Çalışma bitiminde her derleme aÅŸaması için kullanılan\n" + " zaman raporlanır" + + #: toplev.c:1150 + msgid "Report on permanent memory allocation at end of run" + msgstr "" + "Çalıştırma sonunda ayrılan kesintisiz bellek miktarı\n" + " raporlanır" + + #: toplev.c:1152 + msgid "Trap for signed overflow in addition / subtraction / multiplication" + msgstr "Toplama, çıkartma, çarpmada signed taÅŸması yakalanır" + + #: toplev.c:1169 + msgid "Compile just for ISO C89" + msgstr "Sadece ISO C89 için derleme yapılır" + + #: toplev.c:1171 + msgid "Do not promote floats to double if using -traditional" + msgstr "" + "-traditional kullanıldığında float türler double\n" + " yapılmaz" + + #: toplev.c:1173 + msgid "Determine language standard" + msgstr "Dil standartı saptanır" + + #: toplev.c:1177 + msgid "Make bit-fields by unsigned by default" + msgstr "Öntanımlı olarak bit alanları unsigned yapılır" + + #: toplev.c:1181 + msgid "Make 'char' be signed by default" + msgstr "Öntanımlı olarak 'char' signed yapılır" + + #: toplev.c:1183 + msgid "Make 'char' be unsigned by default" + msgstr "Öntanımlı olarak 'char' unsigned yapılır" + + #: toplev.c:1189 + msgid "Attempt to support traditional K&R style C" + msgstr "Geleneksel K&R tarzı C desteklemeye çalışılır" + + #: toplev.c:1195 + msgid "Do not recognize the 'asm' keyword" + msgstr "'asm' anahtar sözcüğü tanınmaz" + + #: toplev.c:1198 + msgid "Do not recognize any built in functions" + msgstr "YerleÅŸik iÅŸlevlerin hiçbiri tanınmaz" + + #: toplev.c:1200 + msgid "Assume normal C execution environment" + msgstr "Normal C çalıştırma ortamı var sayılır" + + #: toplev.c:1203 + msgid "Assume that standard libraries & main might not exist" + msgstr "" + "Standart kitaplıkların ve main iÅŸlevinin olmadığı\n" + " varsayılır" + + #: toplev.c:1206 + msgid "Allow different types as args of ? operator" + msgstr "" + "? iÅŸlemiminin argümanları olarak farklı türlere\n" + " izin verilir" + + #: toplev.c:1209 + msgid "Allow the use of $ inside identifiers" + msgstr "Belirteçlerin içinde $ kullanımına izin verilir" + + #: toplev.c:1214 + msgid "Use the same size for double as for float" + msgstr "double türler için de float tür uzunluÄŸu kullanılır" + + #: toplev.c:1217 + msgid "Use the smallest fitting integer to hold enums" + msgstr "" + "enum türünü saklamada mümkün en küçük tamsayı tür\n" + " kullanılır" + + #: toplev.c:1220 + msgid "Override the underlying type for wchar_t to `unsigned short'" + msgstr "" + "wchar_t için temel tür olarak `unsigned short' a\n" + " zorlar" + + #: toplev.c:1224 + msgid "Enable most warning messages" + msgstr "Uyarı sıklığı iletileri etkinleÅŸtirilir" + + #: toplev.c:1226 + msgid "Warn about casting functions to incompatible types" + msgstr "Uyumsuz türlere çevirim iÅŸlevleri hakkında uyarır" + + #: toplev.c:1230 + msgid "Warn about functions which might be candidates for format attributes" + msgstr "" + "Biçem öznitelikleri için aday olabilecek iÅŸlevler\n" + " hakkında uyarır" + + #: toplev.c:1233 + msgid "Warn about casts which discard qualifiers" + msgstr "Niteleyicileri iptal eden çevirimler hakkında uyarır" + + #: toplev.c:1236 + msgid "Warn about subscripts whose type is 'char'" + msgstr "Türü 'char' olan dizi indisleri hakkında uyarır" + + #: toplev.c:1239 toplev.c:1242 + msgid "Warn if nested comments are detected" + msgstr "İçiçe açıklamalar saptandığında uyarır" + + #: toplev.c:1245 + msgid "Warn about possibly confusing type conversions" + msgstr "Tür dönüşümlerinin olası karışıklığı hakkında uyarır" + + #: toplev.c:1248 + msgid "Warn about printf/scanf/strftime/strfmon format anomalies" + msgstr "" + "printf/scanf/strftime/strfmon biçem\n" + " bozuklukları hakkında uyarmaz" + + #: toplev.c:1252 + msgid "Don't warn about strftime formats yielding 2 digit years" + msgstr "" + "2 haneli yıllara yer veren strftime biçemler\n" + " hakkında uyarır" + + #: toplev.c:1255 + msgid "Don't warn about too many arguments to format functions" + msgstr "" + "Biçemleme iÅŸlevlerine çok fazla argüman\n" + " verildiÄŸinde uyarmaz" + + #: toplev.c:1257 + msgid "Warn about non-string-literal format strings" + msgstr "" + "Dizge olmayan sabit biçemleme dizgeleri hakkında\n" + " uyarır" + + #: toplev.c:1260 + msgid "Warn about possible security problems with format functions" + msgstr "" + "Biçemleme iÅŸlevleriyle ilgili olası güvenlik\n" + " sorunları hakkında uyarır" + + #: toplev.c:1263 + msgid "Warn about implicit function declarations" + msgstr "İşlevlerin dolaylı bildirimlerinde uyarır" + + #: toplev.c:1267 + msgid "Warn when a declaration does not specify a type" + msgstr "Bir bildirimde tür belirtilmemiÅŸse uyarır" + + #: toplev.c:1272 + msgid "Warn about the use of the #import directive" + msgstr "#import yönergesinin kullanımı hakkında uyarır" + + #: toplev.c:1276 + msgid "Do not warn about using 'long long' when -pedantic" + msgstr "-pedantic ile 'long long' kullanımı hakkında uyarmaz" + + #: toplev.c:1278 + msgid "Warn about suspicious declarations of main" + msgstr "KuÅŸkulu main bildirimleri hakkında uyarır" + + #: toplev.c:1281 + msgid "Warn about possibly missing braces around initializers" + msgstr "İlklendiricileri çevreleyen parantezler yoksa uyarır" + + #: toplev.c:1284 + msgid "Warn about global funcs without previous declarations" + msgstr "Önceden bildirilmemiÅŸ genel iÅŸlevler hakkında uyarır" + + #: toplev.c:1287 + msgid "Warn about global funcs without prototypes" + msgstr "Prototipsiz genel iÅŸlevler hakkında uyarır" + + #: toplev.c:1290 + msgid "Warn about use of multicharacter literals" + msgstr "Çoklu karakter sabitlerinin kullanımı hakkında uyarır" + + #: toplev.c:1293 + msgid "Warn about externs not at file scope level" + msgstr "" + "Dosya ÅŸemsiyesi altında bulunmayan extern'ler\n" + " hakkında uyarır" + + #: toplev.c:1296 + msgid "Warn about possible missing parentheses" + msgstr "Olası eksik parantezler hakkında uyarır" + + #: toplev.c:1299 + msgid "Warn about possible violations of sequence point rules" + msgstr "" + "Ardışık nokta kurallarının olası çeliÅŸkileri\n" + " hakkında uyarır" + + #: toplev.c:1302 + msgid "Warn about function pointer arithmetic" + msgstr "İşlev göstergesi aritmetiÄŸi hakkında uyarır" + + #: toplev.c:1305 + msgid "Warn about multiple declarations of the same object" + msgstr "Aynı nesne birden fazla bildirilmiÅŸse uyarır" + + #: toplev.c:1308 + msgid "Warn about signed/unsigned comparisons" + msgstr "signed/unsigned karşılaÅŸtırmalarında uyarır" + + #: toplev.c:1311 + msgid "Warn about testing equality of floating point numbers" + msgstr "Gerçek sayıların eÅŸitlik testleri hakkında uyarır" + + #: toplev.c:1314 + msgid "Warn about unrecognized pragmas" + msgstr "tanımlanamayan #pragma'lar hakkında uyarır" + + #: toplev.c:1317 + msgid "Warn about non-prototyped function decls" + msgstr "Prototipsiz iÅŸlev bildirimlerinde uyarır" + + #: toplev.c:1320 + msgid "Warn about constructs whose meaning change in ISO C" + msgstr "ISO C de anlamı deÄŸiÅŸen kurucular hakkında uyarır" + + #: toplev.c:1323 + msgid "Warn when trigraphs are encountered" + msgstr "Üçlü harfler saptandığında uyarı verilir" + + #: toplev.c:1328 + msgid "Mark strings as 'const char *'" + msgstr "Dizgeler 'const char *' olarak imlenir" + + #: toplev.c:1458 + msgid "Warn when a function is unused" + msgstr "Bir iÅŸlev kullanılmamışsa uyarır" + + #: toplev.c:1460 + msgid "Warn when a label is unused" + msgstr "Bir etiket kullanılmamışsa uyarır" + + #: toplev.c:1462 + msgid "Warn when a function parameter is unused" + msgstr "Bir iÅŸlev parametresi kullanılmamışsa uyarır" + + #: toplev.c:1464 + msgid "Warn when a variable is unused" + msgstr "Bir deÄŸiÅŸken kullanılmamışsa uyarır" + + #: toplev.c:1466 + msgid "Warn when an expression value is unused" + msgstr "Bir ifade deÄŸeri kullanılmamışsa uyarır" + + #: toplev.c:1468 + msgid "Do not suppress warnings from system headers" + msgstr "Sistem baÅŸlık dosyalarından gelen uyarılar engellenmez" + + #: toplev.c:1470 + msgid "Treat all warnings as errors" + msgstr "Tüm uyarıların hata olduÄŸu varsayılır" + + #: toplev.c:1472 + msgid "Warn when one local variable shadows another" + msgstr "Bir yerel deÄŸiÅŸken bir diÄŸerini gölgeliyorsa uyarır" + + #: toplev.c:1474 + msgid "Warn about enumerated switches missing a specific case" + msgstr "" + "Bir switch case'de bir sembolik sabit grubu üyesinin\n" + " bulunamadığı durumlarda uyarır" + + #: toplev.c:1476 + msgid "Warn about returning structures, unions or arrays" + msgstr "Dönen yapı, birleÅŸim ve diziler hakkında uyarır" + + #: toplev.c:1478 + msgid "Warn about pointer casts which increase alignment" + msgstr "" + "Hizalamayı arttıran gösterge çevirimleri hakkında\n" + " uyarır" + + #: toplev.c:1480 + msgid "Warn about code that will never be executed" + msgstr "Hiç çalışmayacak kod hakkında uyarır" + + #: toplev.c:1482 + msgid "Warn about uninitialized automatic variables" + msgstr "İlklendirilmemiÅŸ otomatik deÄŸiÅŸkenler hakkında uyarır" + + #: toplev.c:1484 + msgid "Warn when an inlined function cannot be inlined" + msgstr "Bir özümlemeli iÅŸlev özümlenemediÄŸinde uyarır" + + #: toplev.c:1486 + msgid "Warn when the packed attribute has no effect on struct layout" + msgstr "Paketli öznitelik yapı yerleÅŸiminde etkisizse uyarır" + + #: toplev.c:1488 + msgid "Warn when padding is required to align struct members" + msgstr "" + "Yapı üyelerini hizalamak için adımlama gerekliyse\n" + " uyarır" + + #: toplev.c:1490 + msgid "Warn when an optimization pass is disabled" + msgstr "Bir eniyileme aÅŸaması iptal edildiÄŸinde uyarır" + + #: toplev.c:1492 + msgid "Warn about uses of __attribute__((deprecated)) declarations" + msgstr "__attribute__((eskidi)) bildirimlerinde uyarı verir" + + #: toplev.c:1494 + msgid "Warn about functions which might be candidates for attribute noreturn" + msgstr "" + "noreturn özelliÄŸine aday olabilecek iÅŸlevler\n" + " hakkında uyarı verilir" + + #: toplev.c:1565 toplev.c:4379 tradcpp.c:792 + #, c-format + msgid "invalid option `%s'" + msgstr "`%s' seçeneÄŸi geçersiz" + + #: toplev.c:1711 + #, c-format + msgid "internal error: %s" + msgstr "iç hata: %s" + + #: toplev.c:2024 + #, c-format + msgid "`%s' used but never defined" + msgstr "`%s' tanımlanmadan kullanılmış" + + #: toplev.c:2027 + #, c-format + msgid "`%s' declared `static' but never defined" + msgstr "`static' olarak bildirilen `%s' hiç atanmamış" + + #: toplev.c:2049 + #, c-format + msgid "`%s' defined but not used" + msgstr "`%s' atanmış ama kullanılmamış" + + #: toplev.c:2280 + #, c-format + msgid "invalid register name `%s' for register variable" + msgstr "yazmaç deÄŸiÅŸkeni için yazmaç ismi `%s' geçersiz" + + #: toplev.c:3279 + #, c-format + msgid "crossjump disabled: %d > 1000 basic blocks and %d >= 20 edges/basic block" + msgstr "crossjump iptal edildi: %d > 1000 temel blok ve %d >= 20 kenar/temel blok" + + #: toplev.c:3590 + msgid " -ffixed- Mark as being unavailable to the compiler\n" + msgstr " -ffixed-YAZMAÇ Derleyiciye YAZMAÇ kullanışsız olarak belirtilir\n" + + #: toplev.c:3591 + msgid " -fcall-used- Mark as being corrupted by function calls\n" + msgstr "" + " -fcall-used-YAZMAÇ YAZMAÇ iÅŸlev çaÄŸrıları tarafından bozulmuÅŸ olan\n" + " olarak imlenir\n" + + #: toplev.c:3592 + msgid " -fcall-saved- Mark as being preserved across functions\n" + msgstr " -fcall-saved-YAZMAÇ YAZMAÇ iÅŸlevlere karşı korunmuÅŸ olan olarak imlenir\n" + + #: toplev.c:3593 + msgid " -finline-limit= Limits the size of inlined functions to \n" + msgstr " -finline-limit=SAYI Özümlenen iÅŸlevlerin uzunluÄŸu SAYI ile sınırlanır\n" + + #: toplev.c:3594 + msgid " -fmessage-length= Limits diagnostics messages lengths to characters per line. 0 suppresses line-wrapping\n" + msgstr "" + " -fmessage-length=SAYI Tanı iletilerinin uzunluÄŸu her satırda SAYI\n" + " karakterle sınırlanır. 0 satır sarmalamayı engeller\n" + + #: toplev.c:3595 + msgid " -fdiagnostics-show-location=[once | every-line] Indicates how often source location information should be emitted, as prefix, at the beginning of diagnostics when line-wrapping\n" + msgstr "" + " -fdiagnostics-show-location=[once | every-line]\n" + " Satır sarmalaması sırasında, önek olarak, kaynak\n" + " konumu bilgisinin ne sıklıkta gösterileceÄŸi\n" + " belirtilir. once: bir kere, every-line: her satırda\n" + + #: toplev.c:3606 + msgid " -O[number] Set optimization level to [number]\n" + msgstr " -O[SAYI] Eniyileme seviyesi SAYI olarak ayarlanır\n" + + #: toplev.c:3607 + msgid " -Os Optimize for space rather than speed\n" + msgstr " -Os Hızdan çok boyut eniyilemesi yapılır\n" + + #: toplev.c:3619 + msgid " -pedantic Issue warnings needed by strict compliance to ISO C\n" + msgstr " -pedantic ISO C uyumu için gereken uyarılar üretilir.\n" + + #: toplev.c:3620 + msgid " -pedantic-errors Like -pedantic except that errors are produced\n" + msgstr " -pedantic-errors Üretilen hatalar dışında -pedantic gibi\n" + + #: toplev.c:3621 + msgid " -w Suppress warnings\n" + msgstr " -w Uyarılar engellenir\n" + + #: toplev.c:3622 + msgid " -W Enable extra warnings\n" + msgstr " -W Fazladan uyarılar da verilir\n" + + #: toplev.c:3633 + msgid " -Wunused Enable unused warnings\n" + msgstr " -Wunused Faydasız uyarılar da verilir\n" + + #: toplev.c:3634 + msgid " -Wlarger-than- Warn if an object is larger than bytes\n" + msgstr " -Wlarger-than-SAYI Bir nesne SAYI bayttan büyükse uyarır\n" + + #: toplev.c:3635 + msgid " -p Enable function profiling\n" + msgstr " -p İşlev ayrımlaması etkinleÅŸtirilir\n" + + #: toplev.c:3637 + msgid " -a Enable block profiling \n" + msgstr " -a Blok ayrımlaması etkinleÅŸtirilir\n" + + #: toplev.c:3640 + msgid " -ax Enable jump profiling \n" + msgstr " -ax Atlama ayrımlaması etkinleÅŸtirilir\n" + + #: toplev.c:3642 + msgid " -o Place output into \n" + msgstr " -o DOSYA Çıktı DOSYAya yazılır\n" + + #: toplev.c:3643 + msgid "" + " -G Put global and static data smaller than \n" + " bytes into a special section (on some targets)\n" + msgstr "" + " -G SAYI Global ve static verileri SAYI bayttan daha\n" + " küçükse (bazı hedeflerdeki) bir özel bölüme koyar\n" + + #: toplev.c:3654 + msgid " -aux-info Emit declaration info into \n" + msgstr " -aux-info DOSYA Bildirim bilgileri DOSYAda gösterilir\n" + + #: toplev.c:3655 + msgid " -quiet Do not display functions compiled or elapsed time\n" + msgstr " -quiet Derlenen iÅŸlevler ve geçen zaman gösterilmez\n" + + #: toplev.c:3656 + msgid " -version Display the compiler's version\n" + msgstr " -version Derleyicinin sürüm bilgileri gösterilir\n" + + #: toplev.c:3657 + msgid " -d[letters] Enable dumps from specific passes of the compiler\n" + msgstr " -d[HARFLER] Derleyici aÅŸamalarının dökümlenmesi etkinleÅŸtirilir\n" + + #: toplev.c:3658 + msgid " -dumpbase Base name to be used for dumps from specific passes\n" + msgstr " -dumpbase DOSYA Derleyici aÅŸamalarının dökümleneceÄŸi DOSYA\n" + + #: toplev.c:3660 + msgid " -fsched-verbose= Set the verbosity level of the scheduler\n" + msgstr " -fsched-verbose=SAYI Zamanlama için ayrıntı düzeyi belirtilir\n" + + #: toplev.c:3662 + msgid " --help Display this information\n" + msgstr " --help Bu yardım iletisi gösterilir\n" + + #: toplev.c:3677 + msgid "" + "\n" + "Language specific options:\n" + msgstr "" + "\n" + "Dile özel seçenekler:\n" + + #: toplev.c:3689 + #, c-format + msgid " %-23.23s [undocumented]\n" + msgstr " %-23.23s [belgelenemeyen]\n" + + #: toplev.c:3697 toplev.c:3711 + #, c-format + msgid "" + "\n" + "There are undocumented %s specific options as well.\n" + msgstr "" + "\n" + "Halen belgelenememiÅŸ %s seçenek daha var.\n" + + #: toplev.c:3701 + #, c-format + msgid "" + "\n" + " Options for %s:\n" + msgstr "" + "\n" + " %s seçenekleri:\n" + + #: toplev.c:3738 + msgid "" + "\n" + "Target specific options:\n" + msgstr "" + "\n" + "Hedefe özel seçenekler:\n" + + #: toplev.c:3752 toplev.c:3771 + #, c-format + msgid " -m%-23.23s [undocumented]\n" + msgstr " -m%-23.23s [belgelenemeyen]\n" + + #: toplev.c:3780 + msgid "" + "\n" + "There are undocumented target specific options as well.\n" + msgstr "" + "\n" + "Halen belgelenememiÅŸ hedefe özel seçenekler var.\n" + + #: toplev.c:3782 + msgid " They exist, but they are not documented.\n" + msgstr " Var fakat daha belgelendirilmedi.\n" + + #: toplev.c:3835 + #, c-format + msgid "unrecognized gcc debugging option: %c" + msgstr "tanınmayan gcc hata ayıklama seçeneÄŸi: %c" + + #: toplev.c:3905 + #, c-format + msgid "unrecognized register name `%s'" + msgstr "yazmaç ismi `%s' bilinmiyor" + + #: toplev.c:3930 toplev.c:4808 + #, c-format + msgid "unrecognized option `%s'" + msgstr "`%s' seçeneÄŸi bilinmiyor" + + #: toplev.c:3974 + msgid "-Wid-clash-LEN is no longer supported" + msgstr "-Wid-clash-UZUNLUK artık desteklenmiyor." + + #: toplev.c:4051 + #, c-format + msgid "use -gdwarf -g%d for DWARF v1, level %d" + msgstr "DWARF v1, %2$d seviyesi için -gdwarf -g%1$d kullanın" + + #: toplev.c:4054 + msgid "use -gdwarf-2 for DWARF v2" + msgstr "DWARF v2 için -gdwarf-2 kullanın" + + #: toplev.c:4059 + #, c-format + msgid "ignoring option `%s' due to invalid debug level specification" + msgstr "geçersiz hata ayıklama özelliÄŸinden dolayı `%s' seçeneÄŸi yoksayılıyor" + + #: toplev.c:4082 toplev.c:4806 + #, c-format + msgid "`%s': unknown or unsupported -g option" + msgstr "`%s': -g seçeneÄŸi bilinmiyor ya da desteklenmiyor" + + #: toplev.c:4089 + #, c-format + msgid "`%s' ignored, conflicts with `-g%s'" + msgstr "`-g%2$s' ile çeliÅŸtiÄŸi için `%1$s' yoksayıldı" + + #: toplev.c:4168 + msgid "-param option missing argument" + msgstr "-param seçeneÄŸinde argüman eksik" + + #: toplev.c:4177 + #, c-format + msgid "invalid --param option: %s" + msgstr "geçersiz --param seçeneÄŸi: %s" + + #: toplev.c:4189 + #, c-format + msgid "invalid parameter value `%s'" + msgstr "geçersiz parametre deÄŸeri `%s'" + + #: toplev.c:4396 + #, c-format + msgid "" + "%s%s%s version %s (%s)\n" + "%s\tcompiled by GNU C version %s.\n" + "%s%s%s version %s (%s) compiled by CC.\n" + msgstr "" + "%s%s%s sürüm %s (%s)\n" + "%s\tGNU C sürüm %s tarafından derlendi.\n" + "%s%s%s sürüm %s (%s) CC tarafından derlendi.\n" + + #: toplev.c:4452 + msgid "options passed: " + msgstr "belirtilen seçenekler: " + + #: toplev.c:4481 + msgid "options enabled: " + msgstr "etkin seçenekler: " + + #: toplev.c:4540 java/jcf-write.c:3373 + #, c-format + msgid "can't open %s for writing" + msgstr "%s yazmak için açılamıyor" + + #: toplev.c:4798 + #, c-format + msgid "ignoring command line option '%s'" + msgstr "yoksayılan komut satırı seçeneÄŸi `%s'" + + #: toplev.c:4801 + #, c-format + msgid "(it is valid for %s but not the selected language)" + msgstr "(%s için geçerli ama o dil seçilmedi)" + + #: toplev.c:4835 + msgid "-Wuninitialized is not supported without -O" + msgstr "-Wuninitialized seçeneÄŸi -O olmaksızın desteklenmiyor" + + #: toplev.c:4894 + msgid "instruction scheduling not supported on this target machine" + msgstr "bu hedef makina için iÅŸlem zamanlaması desteklenmiyor" + + #: toplev.c:4898 + msgid "this target machine does not have delayed branches" + msgstr "bu hedef makina gecikmeli dallanmalara sahip deÄŸil" + + #: toplev.c:4907 + msgid "profiling does not work without a frame pointer" + msgstr "bir çerçeve göstergesi olmaksızın ayrımlama çalışmaz" + + #: toplev.c:4922 + #, c-format + msgid "-f%sleading-underscore not supported on this target machine" + msgstr "bu hedef makinada -f%sleading-underscore desteklenmiyor" + + #: toplev.c:4985 + msgid "-ffunction-sections not supported for this target" + msgstr "bu hedefte -ffunction-sections desteklenmiyor" + + #: toplev.c:4990 + msgid "-fdata-sections not supported for this target" + msgstr "bu hedefte -fdata-sections desteklenmiyor" + + #: toplev.c:4997 + msgid "-ffunction-sections disabled; it makes profiling impossible" + msgstr "-ffunction-sections iptal edildi; ayrımlamayı mümkün kılmıyor" + + #: toplev.c:5004 + msgid "-fprefetch-loop-arrays not supported for this target" + msgstr "bu hedefte -fprefetch-loop-arrays desteklenmiyor" + + #: toplev.c:5010 + msgid "-fprefetch-loop-arrays not supported for this target (try -march switches)" + msgstr "-fprefetch-loop-arrays bu hedef için desteklenmiyor (-march seçeneÄŸini deneyin)" + + #: toplev.c:5019 + msgid "-fprefetch-loop-arrays is not supported with -Os" + msgstr "-fprefetch-loop-arrays, -Os ile desteklenmiyor" + + #: toplev.c:5025 + msgid "-ffunction-sections may affect debugging on some targets" + msgstr "-ffunction-sections bazı hedeflerde hata ayıklamayı etkileyebilir" + + #: toplev.c:5146 + #, c-format + msgid "error writing to %s" + msgstr "%s e yazarken hata" + + #: toplev.c:5148 java/jcf-parse.c:969 java/jcf-write.c:3380 + #, c-format + msgid "error closing %s" + msgstr "%s kapatılırken hata" + + #. It's a float since it contains a point. + #: tradcif.y:231 + msgid "floating point numbers not allowed in #if expressions" + msgstr "#if ifadelerinde gerçel sayılara izin verilmez" + + #: tradcif.y:277 + msgid "invalid number in #if expression" + msgstr "#if ifadesindeki sayı geçersiz" + + #: tradcif.y:357 + msgid "invalid character constant in #if" + msgstr "#if ifadesinde geçersiz karakter sabiti" + + #: tradcif.y:394 + msgid "double quoted strings not allowed in #if expressions" + msgstr "#if ifadelerinde çift tırnaklı dizgelere izin verilmez" + + #: tradcif.y:407 + msgid "invalid token in expression" + msgstr "ifadede geçersiz dizgecik" + + #: tradcif.y:498 + msgid "octal character constant does not fit in a byte" + msgstr "sekizlik karakter sabiti bir bayta sığmaz" + + #: tradcif.y:519 + msgid "hex character constant does not fit in a byte" + msgstr "onaltılık karakter sabiti bir bayta sığmaz" + + #: tradcif.y:550 + msgid "empty #if expression" + msgstr "boÅŸ #if ifadesi" + + #: tradcif.y:564 + msgid "Junk after end of expression." + msgstr "İfadeden sonrakiler anlaşılamadı." + + #: tradcpp.c:145 + msgid "macro or #include recursion too deep" + msgstr "makro ya da #include özyinelemesi çok derin" + + #: tradcpp.c:562 + #, c-format + msgid "usage: %s [switches] input output" + msgstr "kullanımı: %s [seçenekler] girdi çıktı" + + #: tradcpp.c:578 + msgid "-traditional is not supported in C++" + msgstr "-traditional C++'da desteklenmiyor" + + #: tradcpp.c:580 + msgid "-traditional and -ansi are mutually exclusive" + msgstr "-traditional ve -ansi birlikte kullanılamaz" + + #: tradcpp.c:594 + msgid "filename missing after -i option" + msgstr "-i seçeneÄŸinden sonra dosya ismi eksik" + + #: tradcpp.c:612 + msgid "filename missing after -o option" + msgstr "-o seçeneÄŸinden sonra dosya ismi eksik" + + #: tradcpp.c:675 + #, c-format + msgid "target missing after %s option" + msgstr "%s seçeneÄŸinden sonraki hedef eksik" + + #: tradcpp.c:689 + #, c-format + msgid "filename missing after %s option" + msgstr "%s seçeneÄŸinden sonra dosya ismi eksik" + + #: tradcpp.c:714 + #, c-format + msgid "macro name missing after -%c option" + msgstr "-%c seçeneÄŸinden sonra makro ismi eksik" + + #: tradcpp.c:734 + msgid "-pedantic and -traditional are mutually exclusive" + msgstr "-pedantic ve -traditional birlikte kullanılamaz" + + #: tradcpp.c:739 + msgid "-trigraphs and -traditional are mutually exclusive" + msgstr "-trigraphs ve -traditional birlikte kullanılamaz" + + #: tradcpp.c:765 + msgid "directory name missing after -I option" + msgstr "-I seçeneÄŸinden sonra dizin ismi eksik" + + #: tradcpp.c:1445 tradcpp.c:3937 + msgid "`/*' within comment" + msgstr "açıklama içinde `/*'" + + #: tradcpp.c:1821 + #, c-format + msgid "unterminated #%s conditional" + msgstr "sonlandırılmamış #%s koÅŸulu" + + #: tradcpp.c:2180 + msgid "not in any file?!" + msgstr "bir dosyada deÄŸil mi?!" + + #: tradcpp.c:2286 + msgid "`defined' must be followed by ident or (ident)" + msgstr "`defined' ident ya da (ident) ile izlenmeli" + + #: tradcpp.c:2290 + msgid "cccp error: invalid special hash type" + msgstr "cccp hatası: özel isimli-yapı türü geçersiz" + + #: tradcpp.c:2388 tradcpp.c:2458 + msgid "#include expects \"fname\" or " + msgstr "#include \"dosyaismi\" ya da #include ÅŸeklinde kullanılır" + + #: tradcpp.c:2543 + #, c-format + msgid "no include path in which to find %.*s" + msgstr "%.*s arama yolunda include dosyaları yok" + + #: tradcpp.c:2721 + msgid "invalid macro name" + msgstr "geçersiz makro ismi" + + #: tradcpp.c:2729 + #, c-format + msgid "invalid macro name `%s'" + msgstr "geçersiz makro ismi `%s'" + + #: tradcpp.c:2734 + msgid "\"defined\" cannot be used as a macro name" + msgstr "\"defined\" makro ismi olarak kullanılamaz" + + #: tradcpp.c:2761 + msgid "parameter name starts with a digit in #define" + msgstr "#define yönergesindeki parametre ismi bir rakam ile baÅŸlıyor" + + #: tradcpp.c:2771 + msgid "badly punctuated parameter list in #define" + msgstr "#define yönergesinde kötü vurgulanmış parametre listesi" + + #: tradcpp.c:2779 + msgid "unterminated parameter list in #define" + msgstr "#define yönergesinde sonlandırılmamış parametre listesi" + + #: tradcpp.c:2827 + #, c-format + msgid "\"%.*s\" redefined" + msgstr "\"%.*s\" yeniden tanımlanmış" + + #: tradcpp.c:3084 + msgid "# operator should be followed by a macro argument name" + msgstr "# iÅŸlemiminden sonra bir makro ismi olmalı" + + #: tradcpp.c:3131 tradcpp.c:3157 tradcpp.c:3171 tradcpp.c:3178 tradcpp.c:3203 + msgid "invalid format #line command" + msgstr "geçersiz biçemli #line komutu" + + #: tradcpp.c:3229 + msgid "undefining `defined'" + msgstr "undef'lenen `defined'" + + #: tradcpp.c:3233 + #, c-format + msgid "undefining `%s'" + msgstr "`%s' sonra #undef yapılmış" + + #: tradcpp.c:3289 + msgid "extra text at end of directive" + msgstr "yönerge sonunda fazladan metin" + + #: tradcpp.c:3396 + #, c-format + msgid "#error%.*s" + msgstr "#error%.*s" + + #: tradcpp.c:3406 + #, c-format + msgid "#warning%.*s" + msgstr "#warning%.*s" + + #: tradcpp.c:3562 + msgid "#elif not within a conditional" + msgstr "#elif bir koÅŸulun içinde deÄŸil" + + #: tradcpp.c:3819 + #, c-format + msgid "#%s not within a conditional" + msgstr "#%s bir koÅŸulun içinde deÄŸil" + + #: tradcpp.c:3827 + msgid "#else or #elif after #else" + msgstr "#else'den sonra #elif ya da #else" + + #: tradcpp.c:3867 + msgid "#else not within a conditional" + msgstr "#else bir koÅŸulun içinde deÄŸil" + + #: tradcpp.c:3898 + msgid "unbalanced #endif" + msgstr "karşılıksız #endif" + + #: tradcpp.c:3992 + msgid "unterminated string or character constant" + msgstr "sonlandırılmamış dizge ya da karakter sabiti" + + #: tradcpp.c:4150 + #, c-format + msgid "arguments given to macro `%s'" + msgstr "`%s' makrosuna verilmiÅŸ argümanlar" + + #: tradcpp.c:4156 + #, c-format + msgid "no args to macro `%s'" + msgstr "`%s' makrosuna argüman verilmemiÅŸ" + + #: tradcpp.c:4158 + #, c-format + msgid "only 1 arg to macro `%s'" + msgstr "`%s' makrosuna sadece 1 argüman verilmiÅŸ" + + #: tradcpp.c:4160 + #, c-format + msgid "only %d args to macro `%s'" + msgstr "`%2$s' makrosuna sadece %1$d argüman verilmiÅŸ" + + #: tradcpp.c:4162 + #, c-format + msgid "too many (%d) args to macro `%s'" + msgstr "`%2$s' makrosuna çok fazla (%1$d) argüman verilmiÅŸ" + + #: tradcpp.c:4759 + #, c-format + msgid "" + "internal error in %s, at tradcpp.c:%d\n" + "Please submit a full bug report.\n" + "See %s for instructions." + msgstr "" + "tradcpp.c:%2$d: %1$s iÅŸlevinde iç hata\n" + "Lütfen ayrıntılı bir hapa raporu gönderin.\n" + "İşlemler için %3$s adresine bakın." + + #: tree-dump.c:848 + #, c-format + msgid "could not open dump file `%s'" + msgstr "döküm dosyası `%s' açılamadı" + + #: tree-dump.c:924 + #, c-format + msgid "ignoring unknown option `%.*s' in `-f%s'" + msgstr "yoksayılan bilinmeyen seçenek `%.*s' (`-f%s' içinde)" + + #: tree.c:3888 + msgid "arrays of functions are not meaningful" + msgstr "iÅŸlev dizileri anlamlı deÄŸil" + + #: tree.c:3945 + msgid "function return type cannot be function" + msgstr "iÅŸlevin dönen deÄŸer türü iÅŸlev olamaz" + + #: tree.c:4699 + msgid "invalid initializer for bit string" + msgstr "bit dizge için ilklendirici geçersiz" + + #: tree.c:4758 + #, c-format + msgid "tree check: expected %s, have %s in %s, at %s:%d" + msgstr "AÄŸaç denetimi: %4$s:%5$d: %3$s iÅŸlevinde '%1$s' umulurken, '%2$s' var" + + #: tree.c:4775 + #, c-format + msgid "tree check: expected class '%c', have '%c' (%s) in %s, at %s:%d" + msgstr "AÄŸaç denetimi: %5$s:%6$d: %4$s iÅŸlevinde sınıf '%1$c' umulurken, '%2$c' (%3$s) var" + + #: varasm.c:454 config/i386/winnt.c:522 + #, c-format + msgid "%s causes a section type conflict" + msgstr "%s bir bölüm türü çeliÅŸkiye sebep oluyor" + + #: varasm.c:879 + #, c-format + msgid "register name not specified for `%s'" + msgstr "`%s' için yazmaç ismi belirtilmemiÅŸ" + + #: varasm.c:881 + #, c-format + msgid "invalid register name for `%s'" + msgstr "`%s' için yazmaç ismi geçersiz" + + #: varasm.c:884 + #, c-format + msgid "data type of `%s' isn't suitable for a register" + msgstr "`%s' veri türü bir yazmaç için kullanılabilir deÄŸil" + + #: varasm.c:887 + #, c-format + msgid "register specified for `%s' isn't suitable for data type" + msgstr "`%s' için belirtilen yazmaç veri türü için kullanılabilir deÄŸil" + + #: varasm.c:896 + msgid "global register variable has initial value" + msgstr "genel yazmaç deÄŸiÅŸkeni öndeÄŸer içeriyor" + + #: varasm.c:899 + msgid "volatile register variables don't work as you might wish" + msgstr "oynak yazmaç deÄŸiÅŸkenleri sizin istediÄŸiniz gibi çalışmaz" + + #: varasm.c:932 + #, c-format + msgid "register name given for non-register variable `%s'" + msgstr "yazmaç olmayan deÄŸiÅŸken `%s' için yazmaç ismi verilmiÅŸ" + + #: varasm.c:1570 + #, c-format + msgid "alignment of `%s' is greater than maximum object file alignment. Using %d" + msgstr "%s hizalaması en büyük nesne dosyası hizalamasından daha büyük. %d kullanılıyor" + + #: varasm.c:1621 + #, c-format + msgid "requested alignment for %s is greater than implemented alignment of %d" + msgstr "%s için istenen hizalama yerleÅŸik hizalama %d den daha büyük" + + #: varasm.c:4570 + msgid "initializer for integer value is too complicated" + msgstr "tamsayı öndeÄŸer fazla karmaşık" + + #: varasm.c:4575 + msgid "initializer for floating value is not a floating constant" + msgstr "gerçel sayı öndeÄŸer bir gerçel sayı sabit deÄŸil" + + #: varasm.c:4625 + msgid "unknown set constructor type" + msgstr "bilinmeyen set constructor türü" + + #: varasm.c:4839 + #, c-format + msgid "invalid initial value for member `%s'" + msgstr "üye `%s' için öndeÄŸer geçersiz" + + #: varasm.c:5000 + #, c-format + msgid "weak declaration of `%s' must be public" + msgstr "`%s' zayıf bildirimi 'public' olmalı" + + #: varasm.c:5002 + #, c-format + msgid "weak declaration of `%s' must precede definition" + msgstr "`%s' zayıf bildirimi tanımından önce olmalı" + + #: varasm.c:5009 + #, c-format + msgid "weak declaration of `%s' not supported" + msgstr "`%s' zayıf bildirimi desteklenmiyor" + + #: varasm.c:5036 varasm.c:5107 + msgid "only weak aliases are supported in this configuration" + msgstr "bu yapılandırmada sadece zayıf takma adlar destekleniyor" + + #: varasm.c:5116 + msgid "alias definitions not supported in this configuration; ignored" + msgstr "takma ad tanımlamaları bu yapılandırmada desteklenmiyor; yoksayıldı" + + #: varray.c:88 + #, c-format + msgid "virtual array %s[%lu]: element %lu out of bounds in %s, at %s:%d" + msgstr "Sanal dizi %1$s[%2$lu]: %5$s:%6$d: %4$s içindeki %3$lu öğesi sınırların dışında" + + #. Print an error message for unrecognized stab codes. + #: xcoffout.c:174 + #, c-format + msgid "no sclass for %s stab (0x%x)\n" + msgstr "%s stab (0x%x) için sclass yok\n" + + #: params.def:46 + msgid "The maximum number of instructions in a function that is eligible for inlining" + msgstr "" + "Özümleme için seçilebilir bir iÅŸlevde en\n" + " çok asm komutu sayısı" + + #: params.def:57 + msgid "The maximum number of instructions to consider to fill a delay slot" + msgstr "" + "Bir gecikme yuvasını dolduracağı\n" + " varsayılan en fazla komut sayısı" + + #: params.def:68 + msgid "The maximum number of instructions to consider to find accurate live register information" + msgstr "" + "tam doÄŸru faal yazmaç bilgisinin\n" + " bulunmasını dikkate alacak asm\n" + " komutlarının maksimum sayısı" + + #: params.def:78 + msgid "The maximum length of scheduling's pending operations list" + msgstr "" + "İşlemler listesinin tamamlanmasını\n" + " bekleyenlerin en büyük uzunluÄŸu" + + #: params.def:85 + msgid "The maximum amount of memory to be allocated by GCSE" + msgstr "" + "Genel ortak alt ifade elemesi tarafından\n" + " ayrılan en büyük bellek" + + #: params.def:90 + msgid "The maximum number of passes to make when doing GCSE" + msgstr "" + "Genel ortak alt ifade elemesi uygulanırken\n" + " yapılacak en çok geçiÅŸ sayısı" + + #: config/darwin-c.c:76 + msgid "too many #pragma options align=reset" + msgstr "çok sayıda #pragma seçeneÄŸi align=reset" + + #: config/darwin-c.c:98 config/darwin-c.c:101 config/darwin-c.c:103 config/darwin-c.c:105 + msgid "malformed '#pragma options', ignoring" + msgstr "'#pragma options' hatalı, yoksayılıyor" + + #: config/darwin-c.c:108 + msgid "junk at end of '#pragma options'" + msgstr "'#pragma options' sonunda karışıklık" + + #: config/darwin-c.c:118 + msgid "malformed '#pragma options align={mac68k|power|reset}', ignoring" + msgstr "'#pragma options align={mac68k|power|reset}' hatalı, yoksayılıyor" + + #: config/darwin-c.c:131 + msgid "missing '(' after '#pragma unused', ignoring" + msgstr "'#pragma unused'dan sonra '(' eksik, yoksayılıyor" + + #: config/darwin-c.c:149 + msgid "missing ')' after '#pragma unused', ignoring" + msgstr "'#pragma unused'dan sonra ')' eksik, yoksayılıyor" + + #: config/darwin-c.c:152 + msgid "junk at end of '#pragma unused'" + msgstr "'#pragma unused' sonunda karışıklık" + + #: config/nextstep.c:68 + msgid "optimization turned on" + msgstr "eniyileme etkin" + + #: config/nextstep.c:74 + msgid "optimization turned off" + msgstr "eniyileme etkin deÄŸil" + + #: config/nextstep.c:83 + msgid "optimization level restored" + msgstr "eniyileme seviyesi eski durumuna getirildi" + + #: config/lynx-ng.h:97 config/lynx.h:120 config/rs6000/lynx.h:85 + msgid "-msystem-v and -p are incompatible" + msgstr "-msystem-v ile -p uyumsuz" + + #: config/lynx-ng.h:99 config/lynx.h:122 config/rs6000/lynx.h:87 + msgid "-msystem-v and -mthreads are incompatible" + msgstr "-msystem-v ile -mthreads uyumsuz" + + #. Run-time compilation parameters selecting different hardware subsets. + #: config/1750a/1750a.h:39 + msgid "Use VAX-C alignment" + msgstr "VAX-C hizalaması kullanılır" + + #: config/a29k/a29k.c:1028 config/m88k/m88k.c:2967 + #, c-format + msgid "invalid %%Q value" + msgstr "%%Q deÄŸeri geçersiz" + + #: config/a29k/a29k.c:1034 config/alpha/alpha.c:5402 config/m88k/m88k.c:3063 + #, c-format + msgid "invalid %%C value" + msgstr "%%C deÄŸeri geçersiz" + + #: config/a29k/a29k.c:1040 config/alpha/alpha.c:5247 config/rs6000/rs6000.c:6454 + #, c-format + msgid "invalid %%N value" + msgstr "%%N deÄŸeri geçersiz" + + #: config/a29k/a29k.c:1046 config/alpha/alpha.c:5318 config/rs6000/rs6000.c:6416 + #, c-format + msgid "invalid %%M value" + msgstr "%%M deÄŸeri geçersiz" + + #: config/a29k/a29k.c:1052 config/alpha/alpha.c:5310 config/rs6000/rs6000.c:6381 + #, c-format + msgid "invalid %%m value" + msgstr "%%m deÄŸeri geçersiz" + + #: config/a29k/a29k.c:1154 config/alpha/alpha.c:5271 config/romp/romp.c:690 + #, c-format + msgid "invalid %%L value" + msgstr "%%L deÄŸeri geçersiz" + + #: config/a29k/a29k.c:1159 config/rs6000/rs6000.c:6462 + #, c-format + msgid "invalid %%O value" + msgstr "%%O deÄŸeri geçersiz" + + #: config/a29k/a29k.c:1165 config/alpha/alpha.c:5255 config/rs6000/rs6000.c:6482 + #, c-format + msgid "invalid %%P value" + msgstr "%%P deÄŸeri geçersiz" + + #: config/a29k/a29k.c:1175 + #, c-format + msgid "invalid %%V value" + msgstr "%%V deÄŸeri geçersiz" + + #: config/a29k/a29k.h:101 + msgid "Generate code assuming DW bit is set" + msgstr "Kod DW biti 1 kabulüyle üretilir" + + #: config/a29k/a29k.h:102 + msgid "Generate code assuming DW bit is not set" + msgstr "Kod DW biti 0 kabulüyle üretilir" + + #: config/a29k/a29k.h:103 + msgid "Generate code using byte writes" + msgstr "Kod bayt yazarak üretilir" + + #: config/a29k/a29k.h:104 + msgid "Do not generate byte writes" + msgstr "Bayt yazımı üretilmez" + + #: config/a29k/a29k.h:105 + msgid "Use small memory model" + msgstr "Küçük bellek modeli kullanılır" + + #: config/a29k/a29k.h:106 + msgid "Use normal memory model" + msgstr "Normal bellek modeli kullanılır" + + #: config/a29k/a29k.h:107 + msgid "Use large memory model" + msgstr "GeniÅŸ bellek modeli kullanılır" + + #: config/a29k/a29k.h:108 + msgid "Generate 29050 code" + msgstr "29050 kodu üretilir" + + #: config/a29k/a29k.h:109 + msgid "Generate 29000 code" + msgstr "29000 kodu üretilir" + + #: config/a29k/a29k.h:110 + msgid "Use kernel global registers" + msgstr "Çekirdek genel yazmaçları kullanılır" + + #: config/a29k/a29k.h:111 + msgid "Use user global registers" + msgstr "Kullanıcı genel yazmaçları kullanılır" + + #: config/a29k/a29k.h:112 + msgid "Emit stack checking code" + msgstr "Yığın denetim kodu üretilir" + + #: config/a29k/a29k.h:113 + msgid "Do not emit stack checking code" + msgstr "Yığın denetim kodu üretilmez" + + #: config/a29k/a29k.h:114 + msgid "Work around storem hardware bug" + msgstr "Storem donanım hatasının oluru bulunur" + + #: config/a29k/a29k.h:115 + msgid "Do not work around storem hardware bug" + msgstr "Storem donanım hatasının oluru bulunmaz" + + #: config/a29k/a29k.h:116 + msgid "Store locals in argument registers" + msgstr "Yerel deÄŸerler argüman yazmaçlarında saklanır" + + #: config/a29k/a29k.h:117 + msgid "Do not store locals in arg registers" + msgstr "Yerel deÄŸerler argüman yazmaçlarında saklanmaz" + + #: config/a29k/a29k.h:118 config/i960/i960.h:283 config/mips/mips.h:408 + msgid "Use software floating point" + msgstr "Yazılım kayan nokta kodu kullanılır" + + #: config/a29k/a29k.h:119 + msgid "Do not generate multm instructions" + msgstr "multm komutları üretilmez" + + #: config/alpha/alpha.c:271 + #, c-format + msgid "-f%s ignored for Unicos/Mk (not supported)" + msgstr "Unicos/Mk için -f%s yoksayıldı (desteklenmiyor)" + + #: config/alpha/alpha.c:295 + msgid "-mieee not supported on Unicos/Mk" + msgstr "Unicos/Mk üzerinde -mieee desteklenmiyor" + + #: config/alpha/alpha.c:306 + msgid "-mieee-with-inexact not supported on Unicos/Mk" + msgstr "-mieee-with-inexact Unicos/Mk üzerinde desteklenmiyor" + + #: config/alpha/alpha.c:323 + #, c-format + msgid "bad value `%s' for -mtrap-precision switch" + msgstr "-mtrap-precision seçeneÄŸi için `%s' deÄŸeri hatalı" + + #: config/alpha/alpha.c:337 + #, c-format + msgid "bad value `%s' for -mfp-rounding-mode switch" + msgstr "-mfp-rounding-mode seçeneÄŸi için `%s' deÄŸeri hatalı" + + #: config/alpha/alpha.c:352 + #, c-format + msgid "bad value `%s' for -mfp-trap-mode switch" + msgstr "-mfp-trap-mode seçeneÄŸi için `%s' deÄŸeri hatalı" + + #: config/alpha/alpha.c:371 config/alpha/alpha.c:383 + #, c-format + msgid "bad value `%s' for -mcpu switch" + msgstr "-mcpu seçeneÄŸi için `%s' deÄŸeri hatalı" + + #: config/alpha/alpha.c:390 + msgid "trap mode not supported on Unicos/Mk" + msgstr "Unicos/Mk üzerinde yakalama kipi desteklenmiyor" + + #: config/alpha/alpha.c:397 + msgid "fp software completion requires -mtrap-precision=i" + msgstr "fp yazılım tamamlaması -mtrap-precision=i gerektirir" + + #: config/alpha/alpha.c:413 + msgid "rounding mode not supported for VAX floats" + msgstr "VAX gerçelleri için yuvarlama kipi desteklenmiyor" + + #: config/alpha/alpha.c:418 + msgid "trap mode not supported for VAX floats" + msgstr "VAX gerçelleri için tuzak kipi desteklenmiyor" + + #: config/alpha/alpha.c:447 + #, c-format + msgid "L%d cache latency unknown for %s" + msgstr "%2$s için L%1$d arabellek gecikmesi bilinmiyor" + + #: config/alpha/alpha.c:462 + #, c-format + msgid "bad value `%s' for -mmemory-latency" + msgstr "-mmemory-latency için deÄŸer `%s' hatalı" + + #: config/alpha/alpha.c:5211 config/m88k/m88k.c:2955 config/romp/romp.c:746 config/romp/romp.c:753 + #, c-format + msgid "invalid %%H value" + msgstr "%%H deÄŸeri geçersiz" + + #: config/alpha/alpha.c:5221 + #, c-format + msgid "invalid %%J value" + msgstr "%%J deÄŸeri geçersiz" + + #: config/alpha/alpha.c:5231 config/ia64/ia64.c:3509 config/m88k/m88k.c:3100 + #, c-format + msgid "invalid %%r value" + msgstr "%%r deÄŸeri geçersiz" + + #: config/alpha/alpha.c:5241 config/rs6000/rs6000.c:6528 + #, c-format + msgid "invalid %%R value" + msgstr "%%R deÄŸeri geçersiz" + + #: config/alpha/alpha.c:5263 config/m88k/m88k.c:2961 config/romp/romp.c:732 config/romp/romp.c:739 + #, c-format + msgid "invalid %%h value" + msgstr "%%h deÄŸeri geçersiz" + + #: config/alpha/alpha.c:5353 + #, c-format + msgid "invalid %%U value" + msgstr "%%U deÄŸeri geçersiz" + + #: config/alpha/alpha.c:5365 config/alpha/alpha.c:5379 config/romp/romp.c:698 config/rs6000/rs6000.c:6536 + #, c-format + msgid "invalid %%s value" + msgstr "%%s deÄŸeri geçersiz" + + #: config/alpha/alpha.c:5439 config/m88k/m88k.c:3084 config/rs6000/rs6000.c:6243 + #, c-format + msgid "invalid %%E value" + msgstr "%%E deÄŸeri geçersiz" + + #: config/alpha/alpha.c:5460 config/romp/romp.c:973 config/rs6000/rs6000.c:6844 + #, c-format + msgid "invalid %%xn code" + msgstr "%%xn deÄŸeri geçersiz" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/alpha/alpha.h:214 config/i386/i386.h:291 config/i386/i386.h:293 config/i386/i386.h:295 config/ns32k/ns32k.h:103 config/rs6000/rs6000.h:329 config/s390/s390.h:56 config/sparc/sparc.h:529 config/sparc/sparc.h:534 + msgid "Use hardware fp" + msgstr "Donanım aritmetik iÅŸlemcisi kullanılır" + + #: config/alpha/alpha.h:215 config/i386/i386.h:292 config/i386/i386.h:294 config/rs6000/rs6000.h:331 config/sparc/sparc.h:531 config/sparc/sparc.h:536 + msgid "Do not use hardware fp" + msgstr "Donanım aritmetik iÅŸlemcisi kullanılmaz" + + #: config/alpha/alpha.h:216 + msgid "Use fp registers" + msgstr "fp yazmaçları kullanılır" + + #: config/alpha/alpha.h:218 + msgid "Do not use fp registers" + msgstr "fp yazmaçları kullanılmaz" + + #: config/alpha/alpha.h:219 + msgid "Do not assume GAS" + msgstr "GAS varsayılmaz" + + #: config/alpha/alpha.h:220 + msgid "Assume GAS" + msgstr "GAS varsayılır" + + #: config/alpha/alpha.h:222 + msgid "Request IEEE-conformant math library routines (OSF/1)" + msgstr "IEEE-uyumlu matematik kitaplığı yordamları istenir (OSF/1)" + + #: config/alpha/alpha.h:224 + msgid "Emit IEEE-conformant code, without inexact exceptions" + msgstr "Kesin olmayan istisnalar içermeden IEEE-uyumlu kod üretir" + + #: config/alpha/alpha.h:226 + msgid "Emit IEEE-conformant code, with inexact exceptions" + msgstr "Kesin olmayan istisnalar içeren IEEE-uyumlu kod üretir" + + #: config/alpha/alpha.h:228 + msgid "Do not emit complex integer constants to read-only memory" + msgstr "Salt-okunur belleÄŸe karmaşık tamsayı sabitleri koymaz" + + #: config/alpha/alpha.h:229 + msgid "Use VAX fp" + msgstr "VAX fp kullanılır" + + #: config/alpha/alpha.h:230 + msgid "Do not use VAX fp" + msgstr "VAX fp kullanılmaz" + + #: config/alpha/alpha.h:231 + msgid "Emit code for the byte/word ISA extension" + msgstr "Bayt/word ISA geniÅŸlemesi için kod üretir" + + #: config/alpha/alpha.h:234 + msgid "Emit code for the motion video ISA extension" + msgstr "Video ISA geniÅŸlemesi için kod üretir" + + #: config/alpha/alpha.h:237 + msgid "Emit code for the fp move and sqrt ISA extension" + msgstr "fp move ve sqrt ISA geniÅŸlemesi için kod üretir" + + #: config/alpha/alpha.h:239 + msgid "Emit code for the counting ISA extension" + msgstr "Sayma ISA geniÅŸlemesi için kod üretir" + + #: config/alpha/alpha.h:242 + msgid "Emit code using explicit relocation directives" + msgstr "Kod doÄŸrudan yer deÄŸiÅŸtirme yönergeleri kullanılarak üretilir" + + #: config/alpha/alpha.h:245 + msgid "Emit 16-bit relocations to the small data areas" + msgstr "Küçük veri alanlarına 16 bitlik yer deÄŸiÅŸtirmeler üretilir" + + #: config/alpha/alpha.h:247 + msgid "Emit 32-bit relocations to the small data areas" + msgstr "Küçük veri alanlarına 32 bitlik yer deÄŸiÅŸtirmeler üretilir" + + #. For -mcpu= + #. For -mtune= + #. For -mfp-rounding-mode=[n|m|c|d] + #. For -mfp-trap-mode=[n|u|su|sui] + #. For -mtrap-precision=[p|f|i] + #. For -mmemory-latency= + #: config/alpha/alpha.h:275 + msgid "Use features of and schedule given CPU" + msgstr "Belirtilen CPU'nun özelliklerini ve zamanlamasını kullanır" + + #: config/alpha/alpha.h:277 + msgid "Schedule given CPU" + msgstr "Belirtilen CPU'yu zamanlar" + + #: config/alpha/alpha.h:279 + msgid "Control the generated fp rounding mode" + msgstr "ÜretilmiÅŸ kayan nokta yuvarlama kipi denetlenir" + + #: config/alpha/alpha.h:281 + msgid "Control the IEEE trap mode" + msgstr "IEEE yakalama kipi denetlenir" + + #: config/alpha/alpha.h:283 + msgid "Control the precision given to fp exceptions" + msgstr "Verilen kayan nokta olaÄŸandışılıklarının duyarlığı denetlenir" + + #: config/alpha/alpha.h:285 + msgid "Tune expected memory latency" + msgstr "Beklenen bellek gecikmesini ayarlar" + + #: config/arc/arc.c:132 + #, c-format + msgid "bad value (%s) for -mcpu switch" + msgstr "-mcpu seçeneÄŸi için deÄŸer (%s) hatalı" + + #: config/arc/arc.c:359 + #, c-format + msgid "argument of `%s' attribute is not a string constant" + msgstr "`%s' in argümanı bir sabit dizge deÄŸil" + + #: config/arc/arc.c:366 + #, c-format + msgid "argument of `%s' attribute is not \"ilink1\" or \"ilink2\"" + msgstr "`%s' özniteliÄŸinin argümanı \"ilink1\" ya da \"ilink2\" deÄŸildir" + + #: config/arc/arc.c:1709 config/m32r/m32r.c:2278 + #, c-format + msgid "invalid operand to %%R code" + msgstr "%%R kodu için terim geçersiz" + + #: config/arc/arc.c:1741 config/m32r/m32r.c:2301 + #, c-format + msgid "invalid operand to %%H/%%L code" + msgstr "%%H/%%L kodu için terim geçersiz" + + #: config/arc/arc.c:1765 config/m32r/m32r.c:2378 + #, c-format + msgid "invalid operand to %%U code" + msgstr "%%U kodu için terim geçersiz" + + #: config/arc/arc.c:1776 + #, c-format + msgid "invalid operand to %%V code" + msgstr "%%V kodu için terim geçersiz" + + #. Unknown flag. + #: config/arc/arc.c:1783 config/m32r/m32r.c:2417 config/sparc/sparc.c:6145 + msgid "invalid operand output code" + msgstr "çıkış kodu için geçersiz veri öğesi" + + #: config/arm/arm.c:436 + #, c-format + msgid "switch -mcpu=%s conflicts with -march= switch" + msgstr "switch -mcpu=%s ile -march= seçenekleri çeliÅŸiyor" + + #: config/arm/arm.c:446 config/rs6000/rs6000.c:444 config/sparc/sparc.c:381 + #, c-format + msgid "bad value (%s) for %s switch" + msgstr "%s seçeneÄŸi için deÄŸer (%s) hatalı" + + #: config/arm/arm.c:582 + msgid "target CPU does not support APCS-32" + msgstr "hedef CPU, APCS-32 desteklemiyor" + + #: config/arm/arm.c:587 + msgid "target CPU does not support APCS-26" + msgstr "hedef CPU, APCS-26 desteklemiyor" + + #: config/arm/arm.c:593 + msgid "target CPU does not support interworking" + msgstr "hedef MİB beraber çalışmayı desteklemiyor" + + #: config/arm/arm.c:599 + msgid "target CPU does not support THUMB instructions" + msgstr "hedef MİB THUMB komutlarını desteklemez." + + #: config/arm/arm.c:613 + msgid "enabling backtrace support is only meaningful when compiling for the Thumb" + msgstr "geri izleme desteÄŸinin etkinleÅŸtirilmesi sadece Thumb komut seti için derleme yapılırken anlamlıdır" + + #: config/arm/arm.c:616 + msgid "enabling callee interworking support is only meaningful when compiling for the Thumb" + msgstr "çaÄŸrılan ile birlikte çalışma desteÄŸinin etkinleÅŸtirilmesi sadece Thumb için derleme sırasına anlamlıdır" + + #: config/arm/arm.c:619 + msgid "enabling caller interworking support is only meaningful when compiling for the Thumb" + msgstr "çaÄŸrıcı ile birlikte çalışma desteÄŸinin etkinleÅŸtirilmesi sadece Thumb için derleme sırasına anlamlıdır" + + #: config/arm/arm.c:625 + msgid "interworking forces APCS-32 to be used" + msgstr "beraber çalışma, APCS-32'nin kullanılmasını gerektirir" + + #: config/arm/arm.c:631 + msgid "-mapcs-stack-check incompatible with -mno-apcs-frame" + msgstr "-mapcs-stack-check ile -mno-apcs-frame uyumsuz" + + #: config/arm/arm.c:639 + msgid "-fpic and -mapcs-reent are incompatible" + msgstr "-fpic ve -mapcs-reent uyumsuz" + + #: config/arm/arm.c:642 + msgid "APCS reentrant code not supported. Ignored" + msgstr "APCS yeniden giriÅŸli kod desteklenmiyor. Yoksayıldı" + + #: config/arm/arm.c:650 + msgid "-g with -mno-apcs-frame may not give sensible debugging" + msgstr "-g ve -mno-apcs-frame beraberce anlamlı hata ayıklama bilgisi vermeyebilir" + + #: config/arm/arm.c:658 + msgid "passing floating point arguments in fp regs not yet supported" + msgstr "henüz desteklenmeyen fp yazmaçlarındaki kayan noktalı argümanların aktarılmasında" + + #: config/arm/arm.c:687 + #, c-format + msgid "invalid floating point emulation option: -mfpe-%s" + msgstr "Geçersiz gerçel deÄŸer öykünüm seçeneÄŸi: -mfpe-%s" + + #: config/arm/arm.c:711 + msgid "structure size boundary can only be set to 8 or 32" + msgstr "veri yapısı boyut sınırı sadece 8 ya da 32 ye ayarlanabilir" + + #: config/arm/arm.c:719 + msgid "-mpic-register= is useless without -fpic" + msgstr "-mpic-register=, -fpic olmaksızın kullanışsız" + + #: config/arm/arm.c:726 + #, c-format + msgid "unable to use '%s' for PIC register" + msgstr "PIC yazmacı için '%s' kullanılamıyor" + + #: config/arm/arm.c:1970 config/arm/arm.c:1993 config/avr/avr.c:4703 config/c4x/c4x.c:4650 config/h8300/h8300.c:3045 config/i386/i386.c:1260 config/i386/i386.c:1289 config/m68hc11/m68hc11.c:1220 config/mcore/mcore.c:3505 config/ns32k/ns32k.c:1044 config/rs6000/rs6000.c:10760 config/sh/sh.c:5583 config/sh/sh.c:5603 config/sh/sh.c:5642 config/stormy16/stormy16.c:2010 config/v850/v850.c:2047 + #, c-format + msgid "`%s' attribute only applies to functions" + msgstr "`%s' özniteliÄŸi sadece iÅŸlevlere uygulanır" + + #: config/arm/arm.c:9288 + msgid "unable to compute real location of stacked parameter" + msgstr "yığındaki parametrenin gerçek konumu hesaplanamıyor" + + #: config/arm/arm.c:9968 + msgid "no low registers available for popping high registers" + msgstr "yüksek yazmaçları emmek için alçak yazmaç bulunamadı" + + #: config/arm/arm.c:10160 + msgid "interrupt Service Routines cannot be coded in Thumb mode" + msgstr "sistem kesmesi Servis İşlemleri Thumb kipinde kodlanamaz" + + #: config/arm/pe.c:168 config/i386/winnt.c:290 config/mcore/mcore.c:3365 + #, c-format + msgid "initialized variable `%s' is marked dllimport" + msgstr "ilklendirilmiÅŸ deÄŸiÅŸken `%s' dllimport imli" + + #: config/arm/pe.c:177 config/i386/winnt.c:299 + #, c-format + msgid "static variable `%s' is marked dllimport" + msgstr "statik deÄŸiÅŸken `%s' dllimport imli" + + #: config/arm/arm.h:422 + msgid "Generate APCS conformant stack frames" + msgstr "APCS uyumlu yığıt çerçeveleri üretir" + + #: config/arm/arm.h:425 + msgid "Store function names in object code" + msgstr "İşlev isimleri nesne kodunda saklanır" + + #: config/arm/arm.h:429 + msgid "Use the 32-bit version of the APCS" + msgstr "APCS'nin 32 bitlik sürümü kullanılır" + + #: config/arm/arm.h:431 + msgid "Use the 26-bit version of the APCS" + msgstr "APCS'nin 26 bitlik sürümü kullanılır" + + #: config/arm/arm.h:435 + msgid "Pass FP arguments in FP registers" + msgstr "FP yazmaçlarındaki FP argümanları aktarılır" + + #: config/arm/arm.h:438 + msgid "Generate re-entrant, PIC code" + msgstr "Yeniden giriÅŸli PIC kodu üretir" + + #: config/arm/arm.h:441 + msgid "The MMU will trap on unaligned accesses" + msgstr "MMU, hizalanmamış eriÅŸimleri yakalar" + + #: config/arm/arm.h:448 + msgid "Use library calls to perform FP operations" + msgstr "Kayan nokta iÅŸlemlerini yapmada kitaplık çaÄŸrıları kullanılır" + + #: config/arm/arm.h:450 config/i960/i960.h:281 + msgid "Use hardware floating point instructions" + msgstr "Donanım kayan nokta komutları kullanılır" + + #: config/arm/arm.h:452 + msgid "Assume target CPU is configured as big endian" + msgstr "Hedef MİB büyük ilkli yapılandırmaya sahip kabul edilir" + + #: config/arm/arm.h:454 + msgid "Assume target CPU is configured as little endian" + msgstr "Hedef MİB küçük ilkli yapılandırmaya sahip kabul edilir" + + #: config/arm/arm.h:456 + msgid "Assume big endian bytes, little endian words" + msgstr "Büyük ilkli baytlar, küçük ilkli word'ler varsayılır" + + #: config/arm/arm.h:458 + msgid "Support calls between Thumb and ARM instruction sets" + msgstr "Thumb ve ARM komut setleri arasında çaÄŸrılar desteklenir" + + #: config/arm/arm.h:461 + msgid "Generate a call to abort if a noreturn function returns" + msgstr "DeÄŸer döndürmeyen iÅŸlev deÄŸer döndürürse çıkış için çaÄŸrı üretilir" + + #: config/arm/arm.h:464 + msgid "Do not move instructions into a function's prologue" + msgstr "Komutlar bir iÅŸlevin önbilgisine taşınmaz" + + #: config/arm/arm.h:467 + msgid "Do not load the PIC register in function prologues" + msgstr "İşlev önbilgisine PIC yazmacını yüklemez" + + #: config/arm/arm.h:470 + msgid "Generate call insns as indirect calls, if necessary" + msgstr "Gerekliyse, çaÄŸrı komutları dolaylı çaÄŸrılar olarak üretilir" + + #: config/arm/arm.h:473 + msgid "Compile for the Thumb not the ARM" + msgstr "Thumb için derler, ARM için deÄŸil" + + #: config/arm/arm.h:477 + msgid "Thumb: Generate (non-leaf) stack frames even if not needed" + msgstr "Thumb: Gerekmese dahi (yaprak olmayan) yığıt çerçeveleri üretir " + + #: config/arm/arm.h:480 + msgid "Thumb: Generate (leaf) stack frames even if not needed" + msgstr "Thumb: Gerekmese dahi (yaprak) yığıt çerçeveleri üretir" + + #: config/arm/arm.h:483 + msgid "Thumb: Assume non-static functions may be called from ARM code" + msgstr "Thumb: Statik olmayan iÅŸlevlerin ARM kodundan çaÄŸrılabileceÄŸini varsayar" + + #: config/arm/arm.h:487 + msgid "Thumb: Assume function pointers may go to non-Thumb aware code" + msgstr "Thumb: İşlev göstergelerinin Thumb'dan habersiz kodu imleyebileceÄŸini varsayar." + + #: config/arm/arm.h:497 + msgid "Specify the name of the target CPU" + msgstr "Hedef iÅŸlemcinin ismi belirtilir" + + #: config/arm/arm.h:499 + msgid "Specify the name of the target architecture" + msgstr "Hedef mimarinin ismi belirtilir" + + #: config/arm/arm.h:503 + msgid "Specify the version of the floating point emulator" + msgstr "Kayan nokta emülatörünün sürümü belirtilir" + + #: config/arm/arm.h:505 + msgid "Specify the minimum bit alignment of structures" + msgstr "Yapıların en küçük bit hizalaması belirtilir" + + #: config/arm/arm.h:507 + msgid "Specify the register to be used for PIC addressing" + msgstr "PIC adresleme için kullanılan yazmaç belirtilir" + + #: config/arm/pe.h:65 + msgid "Ignore dllimport attribute for functions" + msgstr "İşlevler için dllimport özelliÄŸi yoksayılır" + + #. None of these is actually used in cc1. If we don't define them in target + #. switches cc1 complains about them. For the sake of argument lets allocate + #. bit 31 of target flags for such options. + #: config/arm/riscix.h:84 + msgid "Do symbol renaming for BSD" + msgstr "Sembol isimlendirmesi BSD için yapılır" + + #: config/arm/riscix.h:85 + msgid "Do symbol renaming for X/OPEN" + msgstr "Sembol isimlendirmesi X/OPEN için yapılır" + + #: config/arm/riscix.h:86 + msgid "Don't do symbol renaming" + msgstr "Sembol isimlendirmesi yapılmaz" + + #: config/avr/avr.c:221 + #, c-format + msgid "MCU `%s' not supported" + msgstr "MCU `%s' desteklenmiyor" + + #: config/avr/avr.c:461 + #, c-format + msgid "large frame pointer change (%d) with -mtiny-stack" + msgstr "-mtiny-stack ile büyük çerçeve göstergesi deÄŸiÅŸikliÄŸi (%d)" + + #: config/avr/avr.c:1056 + msgid "bad address, not (reg+disp):" + msgstr "hatalı adres, (reg+disp) deÄŸil:" + + #: config/avr/avr.c:1064 + msgid "internal compiler error. Bad address:" + msgstr "Derleyici iç hatası. Hatalı adres:" + + #: config/avr/avr.c:1077 + msgid "internal compiler error. Unknown mode:" + msgstr "Derleyici iç hatası. Bilinmeyen kip:" + + #: config/avr/avr.c:1785 config/avr/avr.c:2497 + msgid "invalid insn:" + msgstr "geçersiz komut:" + + #: config/avr/avr.c:1822 config/avr/avr.c:1908 config/avr/avr.c:1957 config/avr/avr.c:1966 config/avr/avr.c:2064 config/avr/avr.c:2236 config/avr/avr.c:2534 config/avr/avr.c:2645 + msgid "incorrect insn:" + msgstr "yanlış komut:" + + #: config/avr/avr.c:1985 config/avr/avr.c:2149 config/avr/avr.c:2307 config/avr/avr.c:2689 + msgid "unknown move insn:" + msgstr "bilinmeyen taşıma komutu:" + + #: config/avr/avr.c:2925 + msgid "bad shift insn:" + msgstr "hatalı kaydırma komutu:" + + #: config/avr/avr.c:3041 config/avr/avr.c:3471 config/avr/avr.c:3851 + msgid "internal compiler error. Incorrect shift:" + msgstr "Derleyici iç hatası. Yanlış kaydırma:" + + #: config/avr/avr.c:4676 + msgid "only initialized variables can be placed into program memory area" + msgstr "program bellek alanına sadece ilklendirilmiÅŸ deÄŸiÅŸkenler yerleÅŸtirilebilir" + + #: config/avr/avr.h:63 + msgid "Assume int to be 8 bit integer" + msgstr "int türün 8 bitlik tamsayı olduÄŸu varsayılır" + + #: config/avr/avr.h:65 + msgid "Change the stack pointer without disabling interrupts" + msgstr "Yığın göstergesi kesmeler etkisizleÅŸtirilmeden deÄŸiÅŸtirilir" + + #: config/avr/avr.h:67 + msgid "Use subroutines for function prologue/epilogue" + msgstr "İşlev önbilgisi/sonbilgisi için altyordamlar kullanır" + + #: config/avr/avr.h:69 + msgid "Change only the low 8 bits of the stack pointer" + msgstr "Yığın göstergesinin düşük 8 biti deÄŸiÅŸtirilir" + + #: config/avr/avr.h:71 + msgid "Do not generate tablejump insns" + msgstr "Tablejump komutları üretilmez" + + #: config/avr/avr.h:74 + msgid "Output instruction sizes to the asm file" + msgstr "Komut boyutlarını asm dosyasına çıktılar" + + #: config/avr/avr.h:87 + msgid "Specify the initial stack address" + msgstr "İç yığın adresi belirtilir" + + #: config/avr/avr.h:88 + msgid "Specify the MCU name" + msgstr "MCU ismi belirtilir" + + #. `GIV_SORT_CRITERION(GIV1, GIV2)' + #. In some cases, the strength reduction optimization pass can + #. produce better code if this is defined. This macro controls the + #. order that induction variables are combined. This macro is + #. particularly useful if the target has limited addressing modes. + #. For instance, the SH target has only positive offsets in + #. addresses. Thus sorting to put the smallest address first allows + #. the most combinations to be found. + #: config/avr/avr.h:2566 + msgid "trampolines not supported" + msgstr "trampolines desteklenmiyor" + + #: config/c4x/c4x-c.c:70 + #, c-format + msgid "missing '(' after '#pragma %s' - ignored" + msgstr "'#pragma %s' den sonra '(' eksik - yoksayıldı" + + #: config/c4x/c4x-c.c:73 + #, c-format + msgid "missing function name in '#pragma %s' - ignored" + msgstr "'#pragma %s' içinde iÅŸlev ismi eksik - yoksayıldı" + + #: config/c4x/c4x-c.c:78 + #, c-format + msgid "malformed '#pragma %s' - ignored" + msgstr "'#pragma %s' bozuk - yoksayıldı" + + #: config/c4x/c4x-c.c:80 + #, c-format + msgid "missing section name in '#pragma %s' - ignored" + msgstr "'#pragma %s' içinde bölüm ismi eksik - yoksayıldı" + + #: config/c4x/c4x-c.c:85 + #, c-format + msgid "missing ')' for '#pragma %s' - ignored" + msgstr "'#pragma %s' için ')' eksik - yoksayıldı" + + #: config/c4x/c4x-c.c:88 + #, c-format + msgid "junk at end of '#pragma %s'" + msgstr "'#pragma %s' den sonrası karışık" + + #: config/c4x/c4x.c:299 + #, c-format + msgid "unknown CPU version %d, using 40.\n" + msgstr "MİB sürümü %d bilinmiyor, 40 kullanılıyor.\n" + + #: config/c4x/c4x.c:883 + #, c-format + msgid "ISR %s requires %d words of local vars, max is 32767" + msgstr "ISR %s yerel deÄŸiÅŸkenlerin %d sözcüğünü gerektiriyor, en çok 32767" + + #: config/c4x/c4x.c:1635 + msgid "using CONST_DOUBLE for address" + msgstr "adres için CONST_DOUBLE kullanılıyor" + + #: config/c4x/c4x.c:1775 + msgid "c4x_address_cost: Invalid addressing mode" + msgstr "c4x_address_cost: Adresleme kipi geçersiz" + + #: config/c4x/c4x.c:1917 + #, c-format + msgid "c4x_print_operand: %%L inconsistency" + msgstr "c4x_print_operand: %%L uyumsuzluÄŸu" + + #: config/c4x/c4x.c:1923 + #, c-format + msgid "c4x_print_operand: %%N inconsistency" + msgstr "c4x_print_operand: %%N uyumsuzluÄŸu" + + #: config/c4x/c4x.c:1964 + #, c-format + msgid "c4x_print_operand: %%O inconsistency" + msgstr "c4x_print_operand: %%O uyumsuzluÄŸu" + + #: config/c4x/c4x.c:2060 + msgid "c4x_print_operand: Bad operand case" + msgstr "c4x_print_operand: Hatalı terim case" + + #: config/c4x/c4x.c:2103 + msgid "c4x_print_operand_address: Bad post_modify" + msgstr "c4x_print_operand_address: Hatalı post_modify" + + #: config/c4x/c4x.c:2125 + msgid "c4x_print_operand_address: Bad pre_modify" + msgstr "c4x_print_operand_address: Hatalı pre_modify" + + #: config/c4x/c4x.c:2173 config/c4x/c4x.c:2185 config/c4x/c4x.c:2200 + msgid "c4x_print_operand_address: Bad operand case" + msgstr "c4x_print_operand_address: Hatalı terim case" + + #: config/c4x/c4x.c:2456 + msgid "c4x_rptb_insert: Cannot find start label" + msgstr "c4x_rptb_insert: baÅŸlangıç etiketi bulunamıyor" + + #: config/c4x/c4x.c:3443 config/c4x/c4x.c:3463 + msgid "mode not QImode" + msgstr "kip QImode deÄŸil" + + #: config/c4x/c4x.c:3520 + msgid "invalid indirect memory address" + msgstr "geçersiz dolaylı bellek adresi" + + #: config/c4x/c4x.c:3609 + msgid "invalid indirect (S) memory address" + msgstr "dolaylı (S) bellek adresi geçersiz" + + #: config/c4x/c4x.c:3950 + msgid "c4x_valid_operands: Internal error" + msgstr "c4x_valid_operands: İç hata" + + #: config/c4x/c4x.c:4430 + msgid "c4x_operand_subword: invalid mode" + msgstr "c4x_operand_subword: geçersiz kip" + + #: config/c4x/c4x.c:4433 + msgid "c4x_operand_subword: invalid operand" + msgstr "c4x_operand_subword: geçersiz terim" + + #. We could handle these with some difficulty. + #. e.g., *p-- => *(p-=2); *(p+1). + #: config/c4x/c4x.c:4459 + msgid "c4x_operand_subword: invalid autoincrement" + msgstr "c4x_operand_subword: otomatik arttırma geçersiz" + + #: config/c4x/c4x.c:4465 + msgid "c4x_operand_subword: invalid address" + msgstr "c4x_operand_subword: geçersiz adres" + + #: config/c4x/c4x.c:4476 + msgid "c4x_operand_subword: address not offsettable" + msgstr "c4x_operand_subword: adres konumlanabilir deÄŸil" + + #: config/c4x/c4x.c:4676 + msgid "c4x_rptb_rpts_p: Repeat block top label moved\n" + msgstr "c4x_rptb_rpts_p: Tekar bloÄŸu tepe etiketi taşındı\n" + + #. Name of the c4x assembler. + #. Name of the c4x linker. + #. Define assembler options. + #. Define linker options. + #. Define C preprocessor options. + #. Specify the end file to link with. + #. Target compilation option flags. + #. Small memory model. + #. Use 24-bit MPYI for C3x. + #. Fast fixing of floats. + #. Allow use of RPTS. + #. Emit C3x code. + #. Be compatible with TI assembler. + #. Be paranoid about DP reg. in ISRs. + #. Pass arguments on stack. + #. Enable features under development. + #. Enable repeat block. + #. Use BK as general register. + #. Use decrement and branch for C3x. + #. Enable debugging of GCC. + #. Force constants into registers. + #. Allow unsigned loop counters. + #. Force op0 and op1 to be same. + #. Save all 40 bits for floats. + #. Allow parallel insns. + #. Allow MPY||ADD, MPY||SUB insns. + #. Assume mem refs possibly aliased. + #. Emit C30 code. + #. Emit C31 code. + #. Emit C32 code. + #. Emit C33 code. + #. Emit C40 code. + #. Emit C44 code. + #. Run-time compilation parameters selecting different hardware subsets. + #. + #. Macro to define tables used to set the flags. + #. This is a list in braces of triplets in braces, + #. each pair being { "NAME", VALUE, "DESCRIPTION" } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/c4x/c4x.h:141 + msgid "Small memory model" + msgstr "Küçük bellek modeli" + + #: config/c4x/c4x.h:143 + msgid "Big memory model" + msgstr "Büyük bellek modeli" + + #: config/c4x/c4x.h:145 + msgid "Use MPYI instruction for C3x" + msgstr "C3x için MPYI komutu kullanılır" + + #: config/c4x/c4x.h:147 + msgid "Do not use MPYI instruction for C3x" + msgstr "C3x için MPYI komutu kullanılmaz" + + #: config/c4x/c4x.h:149 + msgid "Use fast but approximate float to integer conversion" + msgstr "" + "Kayan noktadan tamsayıya çevrimlerde hızlı fakat yaklaşık kesinlikte\n" + " çevrim kullanılır" + + #: config/c4x/c4x.h:151 + msgid "Use slow but accurate float to integer conversion" + msgstr "" + "Kayan noktadan tamsayıya çevrimlerde yavaÅŸ fakat yüksek kesinlikte\n" + " çevrim kullanır" + + #: config/c4x/c4x.h:153 + msgid "Enable use of RTPS instruction" + msgstr "RTPS komutunun kullanımı etkinleÅŸtirilir" + + #: config/c4x/c4x.h:155 + msgid "Disable use of RTPS instruction" + msgstr "RTPS komutunun kullanımı kapatılır" + + #: config/c4x/c4x.h:157 + msgid "Enable use of RTPB instruction" + msgstr "RTPB komutunun kullanımı etkinleÅŸtirilir" + + #: config/c4x/c4x.h:159 + msgid "Disable use of RTPB instruction" + msgstr "RTPB komutunun kullanımı kapatılır" + + #: config/c4x/c4x.h:161 + msgid "Generate code for C30 CPU" + msgstr "Kod C30 MİB için üretilir" + + #: config/c4x/c4x.h:163 + msgid "Generate code for C31 CPU" + msgstr "Kod C31 MİB için üretilir" + + #: config/c4x/c4x.h:165 + msgid "Generate code for C32 CPU" + msgstr "Kod C32 MİB için üretilir" + + #: config/c4x/c4x.h:167 + msgid "Generate code for C33 CPU" + msgstr "Kod C33 MİB için üretilir" + + #: config/c4x/c4x.h:169 + msgid "Generate code for C40 CPU" + msgstr "Kod C40 MİB için üretilir" + + #: config/c4x/c4x.h:171 + msgid "Generate code for C44 CPU" + msgstr "Kod C44 MİB için üretilir" + + #: config/c4x/c4x.h:173 + msgid "Emit code compatible with TI tools" + msgstr "TI araçları ile uyumlu kod üretir" + + #: config/c4x/c4x.h:175 + msgid "Emit code to use GAS extensions" + msgstr "GAS geniÅŸlemelerini kullanan kod üretir" + + #: config/c4x/c4x.h:177 config/c4x/c4x.h:181 + msgid "Save DP across ISR in small memory model" + msgstr "Düşük bellek modelinde DP'yi ISR'da saklar" + + #: config/c4x/c4x.h:179 config/c4x/c4x.h:183 + msgid "Don't save DP across ISR in small memory model" + msgstr "Düşük bellek modelinde DP'yi ISR'da saklamaz" + + #: config/c4x/c4x.h:185 + msgid "Pass arguments on the stack" + msgstr "Yığındaki argümanlar aktarılır" + + #: config/c4x/c4x.h:187 + msgid "Pass arguments in registers" + msgstr "Yazmaçlardaki argümanlar aktarılır" + + #: config/c4x/c4x.h:189 + msgid "Enable new features under development" + msgstr "GeliÅŸtirilmekte olan yeni özellikler etkinleÅŸtirilir" + + #: config/c4x/c4x.h:191 + msgid "Disable new features under development" + msgstr "GeliÅŸtirilmekte olan yeni özellikler kapatılır" + + #: config/c4x/c4x.h:193 + msgid "Use the BK register as a general purpose register" + msgstr "BK yazmaçları genel kullanım yazmaçları olarak kullanılır" + + #: config/c4x/c4x.h:195 + msgid "Do not allocate BK register" + msgstr "BK yazmaçları ayrılmaz" + + #: config/c4x/c4x.h:197 + msgid "Enable use of DB instruction" + msgstr "DB komutunun kullanımı etkinleÅŸtirilir" + + #: config/c4x/c4x.h:199 + msgid "Disable use of DB instruction" + msgstr "DB komutunun kullanımı kapatılır" + + #: config/c4x/c4x.h:201 + msgid "Enable debugging" + msgstr "Hata ayıklama etkinleÅŸtirilir" + + #: config/c4x/c4x.h:203 + msgid "Disable debugging" + msgstr "Hata ayıklama kapatılır" + + #: config/c4x/c4x.h:205 + msgid "Force constants into registers to improve hoisting" + msgstr "Kaldırmayı iyileÅŸtirmek için sabitleri yazmaçlarda saklar" + + #: config/c4x/c4x.h:207 + msgid "Don't force constants into registers" + msgstr "Sabitleri yazmaçlarda saklamaz" + + #: config/c4x/c4x.h:209 + msgid "Force RTL generation to emit valid 3 operand insns" + msgstr "RTL üretiminde geçerli 3 terimli komut üretmeye zorlar" + + #: config/c4x/c4x.h:211 + msgid "Allow RTL generation to emit invalid 3 operand insns" + msgstr "RTL üretiminde geçersiz 3 terimli komut üretimine izin verir" + + #: config/c4x/c4x.h:213 + msgid "Allow unsigned interation counts for RPTB/DB" + msgstr "RPTB/DB için yineleme sayılarının unsigned olmasına izin verir" + + #: config/c4x/c4x.h:215 + msgid "Disallow unsigned iteration counts for RPTB/DB" + msgstr "RPTB/DB için yineleme sayılarının unsigned olmasına izin vermez" + + #: config/c4x/c4x.h:217 + msgid "Preserve all 40 bits of FP reg across call" + msgstr "ÇaÄŸrıda FP yazmacının bütün 40 bitini korur" + + #: config/c4x/c4x.h:219 + msgid "Only preserve 32 bits of FP reg across call" + msgstr "ÇaÄŸrıda FP yazmacının yalnız 32 bitini korur" + + #: config/c4x/c4x.h:221 + msgid "Enable parallel instructions" + msgstr "EÅŸzamanlı komutlar etkinleÅŸtirilir" + + #: config/c4x/c4x.h:223 + msgid "Disable parallel instructions" + msgstr "EÅŸzamanlı komutlar kapatılır" + + #: config/c4x/c4x.h:225 + msgid "Enable MPY||ADD and MPY||SUB instructions" + msgstr "MPY||ADD ve MPY||SUB komutları etkinleÅŸtirilir" + + #: config/c4x/c4x.h:227 + msgid "Disable MPY||ADD and MPY||SUB instructions" + msgstr "MPY||ADD ve MPY||SUB komutları kapatılır" + + #: config/c4x/c4x.h:229 + msgid "Assume that pointers may be aliased" + msgstr "Göstergelerin hizalı olabilecekleri varsayılır" + + #: config/c4x/c4x.h:231 + msgid "Assume that pointers not aliased" + msgstr "Göstergelerin hizalı olmadıkları varsayılır" + + #: config/c4x/c4x.h:304 + msgid "Specify maximum number of iterations for RPTS" + msgstr "RPTS için maksimum yineleme sayısını belirtir" + + #: config/c4x/c4x.h:306 + msgid "Select CPU to generate code for" + msgstr "Kodu üretilecek MİB seçilir" + + #. Macros used in the machine description to test the flags. + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/clipper/clipper.h:40 + msgid "Generate code for the C400" + msgstr "Kod C400 MİB için üretilir" + + #: config/clipper/clipper.h:41 + msgid "Generate code for the C300" + msgstr "Kod C300 MİB için üretilir" + + #: config/convex/convex.h:53 + msgid "Generate code for c1" + msgstr "Kod c1 için üretilir" + + #: config/convex/convex.h:54 + msgid "Generate code for c2" + msgstr "Kod c2 için üretilir" + + #: config/convex/convex.h:55 + msgid "Generate code for c32" + msgstr "Kod c32 için üretilir" + + #: config/convex/convex.h:56 config/convex/convex.h:57 + msgid "Generate code for c34" + msgstr "Kod c34 için üretilir" + + #: config/convex/convex.h:59 + msgid "Use standard calling sequence, with arg count word" + msgstr "Standart çaÄŸrı sırasını kullnaır; argüman, sayı, word ile" + + #: config/convex/convex.h:61 + msgid "Place arg count in a nop instruction (faster than push)" + msgstr "Argüman sayısını bir NOP iÅŸlemine koyar (basma'dan daha çabuk)" + + #: config/convex/convex.h:63 + msgid "Don't push arg count, depend on symbol table" + msgstr "Argüman sayısını basmaz, sembol tablosunu kullanır" + + #: config/convex/convex.h:65 + msgid "Use data cache for volatile mem refs (default)" + msgstr "Oynak bellek referansları için veri arabelleÄŸi kullanılır" + + #: config/convex/convex.h:67 + msgid "Don't use data cache for volatile mem refs" + msgstr "Oynak bellek referansları için veri arabelleÄŸi kullanılmaz" + + #: config/convex/convex.h:69 + msgid "Bypass data cache for volatile mem refs" + msgstr "Oynak bellek referansları için veri arabelleÄŸi atlanır" + + #: config/convex/convex.h:70 + msgid "Use 64-bit longs" + msgstr "64 bitlik long'lar kullanılır" + + #: config/convex/convex.h:71 + msgid "Use cc- and libc-compatible 32-bit longs" + msgstr "cc ve libc uyumlu 32 bitlik long'lar kullanılır" + + #: config/cris/cris.c:569 + msgid "unexpected index-type in cris_print_index" + msgstr "cris_print_index içinde umulmayan indis türü" + + #: config/cris/cris.c:585 + msgid "unexpected base-type in cris_print_base" + msgstr "cris_print_base içinde beklenmeyen taban türü" + + #: config/cris/cris.c:878 + #, c-format + msgid "stackframe too big: %d bytes" + msgstr "yığın kapsamı çok büyük: %d bayt" + + #: config/cris/cris.c:1193 + msgid "allocated but unused delay list in epilogue" + msgstr "gecikme listesi son bölümde ayrıldı ama kullanılmadı " + + #: config/cris/cris.c:1203 + msgid "unexpected function type needing stack adjustment for __builtin_eh_return" + msgstr "__builtin_eh_return için yığın ayarı gerektiren iÅŸlev türü anlaşılamadı" + + #: config/cris/cris.c:1282 + msgid "invalid operand for 'b' modifier" + msgstr "'b' deÄŸiÅŸtirici için terim geçersiz" + + #: config/cris/cris.c:1294 + msgid "invalid operand for 'v' modifier" + msgstr "'v' deÄŸiÅŸtirici için terim geçersiz" + + #: config/cris/cris.c:1304 + msgid "invalid operand for 'P' modifier" + msgstr "'P' deÄŸiÅŸtirici için terim geçersiz" + + #: config/cris/cris.c:1311 + msgid "invalid operand for 'p' modifier" + msgstr "'p' deÄŸiÅŸtirici için terim geçersiz" + + #: config/cris/cris.c:1350 + msgid "invalid operand for 'z' modifier" + msgstr "'z' deÄŸiÅŸtirici için terim geçersiz" + + #: config/cris/cris.c:1381 config/cris/cris.c:1411 + msgid "invalid operand for 'H' modifier" + msgstr "'H' deÄŸiÅŸtirici için terim geçersiz" + + #: config/cris/cris.c:1387 + msgid "bad register" + msgstr "yazmaç kötü" + + #: config/cris/cris.c:1425 + msgid "invalid operand for 'e' modifier" + msgstr "'e' deÄŸiÅŸtirici için terim geçersiz" + + #: config/cris/cris.c:1442 + msgid "invalid operand for 'm' modifier" + msgstr "'m' deÄŸiÅŸtirici için terim geçersiz" + + #: config/cris/cris.c:1467 + msgid "invalid operand for 'A' modifier" + msgstr "'A' deÄŸiÅŸtirici için terim geçersiz" + + #: config/cris/cris.c:1475 + msgid "invalid operand for 'D' modifier" + msgstr "'D' deÄŸiÅŸtirici için terim geçersiz" + + #: config/cris/cris.c:1489 + msgid "invalid operand for 'T' modifier" + msgstr "'T' deÄŸiÅŸtirici için terim geçersiz" + + #: config/cris/cris.c:1498 + msgid "invalid operand modifier letter" + msgstr "terim deÄŸiÅŸtirici harfi geçersiz" + + #: config/cris/cris.c:1506 + #, c-format + msgid "internal error: bad register: %d" + msgstr "iç hata: hatalı yazmaç: %d" + + #: config/cris/cris.c:1554 + msgid "unexpected multiplicative operand" + msgstr "umulmayan çarpımsal terim" + + #: config/cris/cris.c:1574 + msgid "unexpected operand" + msgstr "Beklenmeyen terim" + + #: config/cris/cris.c:1609 config/cris/cris.c:1619 + msgid "unrecognized address" + msgstr "bilinmeyen adres" + + #: config/cris/cris.c:1975 + msgid "internal error: sideeffect-insn affecting main effect" + msgstr "iç hata: yan etkili komut main etkisi oluÅŸturuyor" + + #. If we get here, the caller got its initial tests wrong. + #: config/cris/cris.c:2262 + msgid "internal error: cris_side_effect_mode_ok with bad operands" + msgstr "iç hata: hatalı terimli cris_side_effect_mode_ok" + + #: config/cris/cris.c:2344 config/cris/cris.c:2402 + msgid "unrecognized supposed constant" + msgstr "tanınmayan tahmini sabit" + + #: config/cris/cris.c:2443 + msgid "unrecognized supposed constant in cris_global_pic_symbol" + msgstr "cris_global_pic_symbol içinde tanınmayan tahmini sabit" + + #: config/cris/cris.c:2462 + #, c-format + msgid "-max-stackframe=%d is not usable, not between 0 and %d" + msgstr "-max-stackframe=%d 0 ile %d arasında olmadığından kullanışsız" + + #: config/cris/cris.c:2490 + #, c-format + msgid "unknown CRIS version specification in -march= or -mcpu= : %s" + msgstr "-march= veya -mcpu= seçenekleri ile belirtilen CRIS sürüm özelliÄŸi bilinmiyor: %s" + + #: config/cris/cris.c:2526 + #, c-format + msgid "unknown CRIS cpu version specification in -mtune= : %s" + msgstr "-mtune= seçeneÄŸi ile belirtilen CRIS mib sürüm özelliÄŸi bilinmiyor: %s" + + #: config/cris/cris.c:2544 + msgid "-fPIC and -fpic are not supported in this configuration" + msgstr "-fPIC ve -fpic bu yapılandırma ile desteklenmiyor" + + #: config/cris/cris.c:2560 + msgid "that particular -g option is invalid with -maout and -melinux" + msgstr "tek başına -g seçeneÄŸi -maout ve -melinux ile geçersiz" + + #: config/cris/cris.c:2790 config/cris/cris.c:2835 + msgid "unexpected side-effects in address" + msgstr "adreste beklenmeyen yan etkiler" + + #. Labels are never marked as global symbols. + #: config/cris/cris.c:2932 config/cris/cris.c:2963 + msgid "unexpected PIC symbol" + msgstr "beklenmeyen PIC sembolü" + + #: config/cris/cris.c:2936 + msgid "PIC register isn't set up" + msgstr "PIC yazmacı ayarlı deÄŸil" + + #: config/cris/cris.c:2949 config/cris/cris.c:3032 + msgid "unexpected address expression" + msgstr "beklenmeyen adres ifadesi" + + #: config/cris/cris.c:2967 + msgid "emitting PIC operand, but PIC register isn't set up" + msgstr "PIC terimi üretiliyor ama PIC yazmacı ayarlı deÄŸil" + + #: config/cris/cris.c:2976 + msgid "unexpected NOTE as addr_const:" + msgstr "addr_const olarak beklenmeyen NOT:" + + #: config/cris/aout.h:106 + msgid "Compile for the MMU-less Etrax 100-based elinux system" + msgstr "MMU-suz Etrax 100-tabanlı elinux sistemi için derler" + + #: config/cris/aout.h:113 + msgid "For elinux, request a specified stack-size for this program" + msgstr "elinux için, bu programa belirli bir yığın boyutu isteniyor" + + #. No "no-etrax" as it does not really imply any model. On the other hand, "etrax" implies the common (and large) subset matching all models. + #: config/cris/cris.h:336 + msgid "Compile for ETRAX 4 (CRIS v3)" + msgstr "ETRAX 4 (CRIS v3) için derleme yapılır" + + #: config/cris/cris.h:341 + msgid "Compile for ETRAX 100 (CRIS v8)" + msgstr "ETRAX 100 (CRIS v8) için derleme yapılır" + + #: config/cris/cris.h:345 + msgid "Emit verbose debug information in assembly code" + msgstr "Çevirici kodunda ayrıntılı hata ayıklama bilgisi üretilir" + + #: config/cris/cris.h:348 + msgid "Do not use condition codes from normal instructions" + msgstr "Normal komutlardan koÅŸul kodları kullanılmaz" + + #: config/cris/cris.h:352 + msgid "Do not emit addressing modes with side-effect assignment" + msgstr "Yan etki atamalı adresleme kipleri üretilmez" + + #: config/cris/cris.h:355 + msgid "Do not tune stack alignment" + msgstr "Yığın hiizalaması ayarlanmaz" + + #: config/cris/cris.h:358 + msgid "Do not tune writable data alignment" + msgstr "Yazılabilir veri hizalaması ayarlanmaz" + + #: config/cris/cris.h:361 + msgid "Do not tune code and read-only data alignment" + msgstr "Kod ve salt-okunur veri hizalaması ayarlanmaz" + + #: config/cris/cris.h:370 + msgid "Align code and data to 32 bits" + msgstr "Kod ve veri 32 bitlik hizalanır" + + #: config/cris/cris.h:383 + msgid "Don't align items in code or data" + msgstr "Kod ve verideki öğeler hizalanmaz" + + #: config/cris/cris.h:386 + msgid "Do not emit function prologue or epilogue" + msgstr "İşlev önsözü ya da sonsözü üretilmez" + + #. We have to handle this m-option here since we can't wash it off in both CC1_SPEC and CC1PLUS_SPEC. + #: config/cris/cris.h:390 + msgid "Use the most feature-enabling options allowed by other options" + msgstr "DiÄŸer seçenekler tarafından izin verilen çoÄŸu özellik-etkinleÅŸtirme seçeneÄŸi kullanılır" + + #. We must call it "override-" since calling it "no-" will cause gcc.c to forget it, if there's a "later" -mbest-lib-options. Kludgy, but needed for some multilibbed files. + #: config/cris/cris.h:396 + msgid "Override -mbest-lib-options" + msgstr "-mbest-lib-options reddedilir" + + #: config/cris/cris.h:428 + msgid "Generate code for the specified chip or CPU version" + msgstr "Verilen MİB sürümü ya da çip için kodu üretir" + + #: config/cris/cris.h:430 + msgid "Tune alignment for the specified chip or CPU version" + msgstr "Belirtilen çip veya mib için hizalama ayarlanır" + + #: config/cris/cris.h:432 + msgid "Warn when a stackframe is larger than the specified size" + msgstr "Bir yığın baÄŸlamı belirli boyuttan büyük olduÄŸunda uyarır" + + #. Node: Profiling + #: config/cris/cris.h:1029 + msgid "no FUNCTION_PROFILER for CRIS" + msgstr "CRIS için FUNCTION_PROFILER yok" + + #: config/cris/linux.h:74 + msgid "Together with -fpic and -fPIC, do not use GOTPLT references" + msgstr "-fpic ve -fPIC ile birlikte GOTPLT baÅŸvurularını kullanmayın" + + #: config/d30v/d30v.c:209 + #, c-format + msgid "bad modes_tieable_p for register %s, mode1 %s, mode2 %s" + msgstr "yazmaç %s, kip1 %s, kip2 %s için modes_tieable_p hatalı" + + #: config/d30v/d30v.c:2676 + msgid "bad insn to d30v_print_operand_address:" + msgstr "d30v_print_operand_address için hatalı komut:" + + #: config/d30v/d30v.c:2693 config/d30v/d30v.c:2754 config/d30v/d30v.c:2775 config/d30v/d30v.c:2793 + msgid "bad insn to d30v_print_operand_memory_reference:" + msgstr "d30v_print_operand_memory_reference için hatalı komut:" + + #: config/d30v/d30v.c:2861 + msgid "bad insn to d30v_print_operand, 'f' modifier:" + msgstr "d30v_print_operand, 'f' deÄŸiÅŸtirici için hatalı komut:" + + #: config/d30v/d30v.c:2870 + msgid "bad insn to d30v_print_operand, 'A' modifier:" + msgstr "d30v_print_operand, 'A' deÄŸiÅŸtirici için hatalı komut:" + + #: config/d30v/d30v.c:2877 + msgid "bad insn to d30v_print_operand, 'M' modifier:" + msgstr "d30v_print_operand, 'M' deÄŸiÅŸtirici için hatalı komut:" + + #: config/d30v/d30v.c:2931 + msgid "bad insn to print_operand, 'F' or 'T' modifier:" + msgstr "print_operand, 'F' ya da 'T' deÄŸiÅŸtirici için hatalı komut:" + + #: config/d30v/d30v.c:2942 + msgid "bad insn to print_operand, 'B' modifier:" + msgstr "print_operand, 'B' deÄŸiÅŸtirici için hatalı komut:" + + #: config/d30v/d30v.c:2949 + msgid "bad insn to print_operand, 'E' modifier:" + msgstr "print_operand, 'E' deÄŸiÅŸtirici için hatalı komut:" + + #: config/d30v/d30v.c:2967 + msgid "bad insn to print_operand, 'R' modifier:" + msgstr "print_operand, 'R' deÄŸiÅŸtirici için hatalı komut:" + + #: config/d30v/d30v.c:2976 config/d30v/d30v.c:2984 + msgid "bad insn to print_operand, 's' modifier:" + msgstr "print_operand, 's' deÄŸiÅŸtirici için hatalı komut:" + + #: config/d30v/d30v.c:3013 + msgid "bad insn in d30v_print_operand, 0 case" + msgstr "d30v_print_operand, 0 case içinde hatalı komut:" + + #: config/d30v/d30v.c:3368 + msgid "d30v_emit_comparison" + msgstr "d30v_emit_comparison" + + #: config/d30v/d30v.c:3412 + msgid "bad call to d30v_move_2words" + msgstr "d30v_move_2words çaÄŸrısı hatalı" + + #: config/d30v/d30v.h:108 + msgid "Enable use of conditional move instructions" + msgstr "KoÅŸullu taşıma komutlarının kullanımı etkinleÅŸtirilir" + + #: config/d30v/d30v.h:111 + msgid "Disable use of conditional move instructions" + msgstr "KoÅŸullu taşıma komutlarının kullanımı kapatılır" + + #: config/d30v/d30v.h:114 + msgid "Debug argument support in compiler" + msgstr "Derleyici argüman desteÄŸinde hata ayıklar" + + #: config/d30v/d30v.h:117 + msgid "Debug stack support in compiler" + msgstr "Derleyici yığıt desteÄŸinde hata ayıklar" + + #: config/d30v/d30v.h:120 + msgid "Debug memory address support in compiler" + msgstr "Derleyici bellek adresi desteÄŸinde hata ayıklar" + + #: config/d30v/d30v.h:123 + msgid "Make adjacent short instructions parallel if possible" + msgstr "" + "Ardışık sıralı short komutlarını eÄŸer mümkünse,\n" + " eÅŸzamanlı iÅŸler" + + #: config/d30v/d30v.h:126 + msgid "Do not make adjacent short instructions parallel" + msgstr "Ardışık sıralı short komutlarını eÅŸzamanlamaz" + + #: config/d30v/d30v.h:129 config/d30v/d30v.h:132 + msgid "Link programs/data to be in external memory by default" + msgstr "Öntanımlı olarak yazılım/verileri dış bellekte olacak ÅŸekilde baÄŸlar" + + #: config/d30v/d30v.h:135 + msgid "Link programs/data to be in onchip memory by default" + msgstr "Öntanımlı olarak yazılım/verileri çip-içi bellekte olacak ÅŸekilde baÄŸlar" + + #: config/d30v/d30v.h:143 + msgid "Change the branch costs within the compiler" + msgstr "Derleyicide dal maliyetlerini deÄŸiÅŸtirir" + + #: config/d30v/d30v.h:146 + msgid "Change the threshold for conversion to conditional execution" + msgstr "KoÅŸullu çalışmaya geçiÅŸ için eÅŸik deÄŸerini deÄŸiÅŸtirir" + + #: config/dsp16xx/dsp16xx.c:1446 config/dsp16xx/dsp16xx.c:1469 + msgid "stack size > 32k" + msgstr "Yığın uzunluÄŸu > 32k" + + #: config/dsp16xx/dsp16xx.c:1678 + msgid "invalid addressing mode" + msgstr "geçersiz adresleme kipi" + + #: config/dsp16xx/dsp16xx.c:1857 + msgid "bad register extension code" + msgstr "hatalı yazmaç uzantı kodu" + + #: config/dsp16xx/dsp16xx.c:1958 + msgid "invalid offset in ybase addressing" + msgstr "ybase adreslemedeki göreli konum geçersiz" + + #: config/dsp16xx/dsp16xx.c:1961 + msgid "invalid register in ybase addressing" + msgstr "ybase adreslemedeki yazmaç geçersiz" + + #: config/dsp16xx/dsp16xx.c:1990 + msgid "inline float constants not supported on this host" + msgstr "gerçel sayı sabitlerin `inline' bildirimi bu makinada desteklenmiyor" + + #: config/dsp16xx/dsp16xx.c:2140 + msgid "invalid shift operator in emit_1600_core_shift" + msgstr "emit_1600_core_shift içindeki kaydırma iÅŸlemimi geçersiz" + + #: config/dsp16xx/dsp16xx.c:2469 + msgid "invalid mode for gen_tst_reg" + msgstr "gen_tst_reg için kip geçersiz" + + #: config/dsp16xx/dsp16xx.c:2541 + msgid "invalid mode for integer comparison in gen_compare_reg" + msgstr "gen_compare_reg içindeki tamsayı karşılaÅŸtırması için kip geçersiz" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/dsp16xx/dsp16xx.h:215 + msgid "Pass parameters in registers (default)" + msgstr "Yazmaçlardaki parametreler aktarılır (öntanımlı)" + + #: config/dsp16xx/dsp16xx.h:217 + msgid "Don't pass parameters in registers" + msgstr "Yazmaçlardaki parametreler aktarılmaz" + + #: config/dsp16xx/dsp16xx.h:219 + msgid "Generate code for near calls" + msgstr "Yakın bellek çaÄŸrıları için kodu üretilir" + + #: config/dsp16xx/dsp16xx.h:221 + msgid "Don't generate code for near calls" + msgstr "Yakın bellek çaÄŸrıları için kodu üretilmez" + + #: config/dsp16xx/dsp16xx.h:223 + msgid "Generate code for near jumps" + msgstr "Yakın bellek sıçramaları için kodu üretilir" + + #: config/dsp16xx/dsp16xx.h:225 + msgid "Don't generate code for near jumps" + msgstr "Yakın bellek sıçramaları için kodu üretilmez" + + #: config/dsp16xx/dsp16xx.h:227 + msgid "Generate code for a bit-manipulation unit" + msgstr "Bit iÅŸleme birimi için kod üretilir" + + #: config/dsp16xx/dsp16xx.h:229 + msgid "Don't generate code for a bit-manipulation unit" + msgstr "Bir bit-iÅŸleme birimi için kod üretilmez" + + #: config/dsp16xx/dsp16xx.h:231 + msgid "Generate code for memory map1" + msgstr "Bellek eÅŸlem1 için kod üretilir" + + #: config/dsp16xx/dsp16xx.h:233 + msgid "Generate code for memory map2" + msgstr "Bellek eÅŸlem2 için kod üretilir" + + #: config/dsp16xx/dsp16xx.h:235 + msgid "Generate code for memory map3" + msgstr "Bellek eÅŸlem3 için kod üretilir" + + #: config/dsp16xx/dsp16xx.h:237 + msgid "Generate code for memory map4" + msgstr "Bellek eÅŸlem4 için kod üretilir" + + #: config/dsp16xx/dsp16xx.h:239 + msgid "Ouput extra code for initialized data" + msgstr "İlklendirilmiÅŸ veri için fazladan kod çıktılar" + + #: config/dsp16xx/dsp16xx.h:241 + msgid "Don't let reg. allocator use ybase registers" + msgstr "ybase yazmaçların ayrılma sırası denetlenmez" + + #: config/dsp16xx/dsp16xx.h:243 + msgid "Output extra debug info in Luxworks environment" + msgstr "Luxworks ortamında fazladan hata ayıklama bilgisi çıktılar" + + #: config/dsp16xx/dsp16xx.h:245 + msgid "Save temp. files in Luxworks environment" + msgstr "Luxworks ortamında geçici dosyalar kaydedilir" + + #: config/dsp16xx/dsp16xx.h:257 + msgid "Specify alternate name for text section" + msgstr "Metin bölümü için alternatif isim belirtilir" + + #: config/dsp16xx/dsp16xx.h:259 + msgid "Specify alternate name for data section" + msgstr "Veri bölümü için alternatif isim belirtilir" + + #: config/dsp16xx/dsp16xx.h:261 + msgid "Specify alternate name for bss section" + msgstr "bss bölümü için alternatif isim belirtilir" + + #: config/dsp16xx/dsp16xx.h:263 + msgid "Specify alternate name for constant section" + msgstr "Sabit bölümü için alternatif isim belirtilir" + + #: config/dsp16xx/dsp16xx.h:265 + msgid "Specify alternate name for dsp16xx chip" + msgstr "dsp16xx çipi için alternatif isim belirtilir" + + #. Output assembler code to FILE to increment profiler label # LABELNO + #. for profiling a function entry. + #: config/dsp16xx/dsp16xx.h:1219 config/dsp16xx/dsp16xx.h:1224 config/dsp16xx/dsp16xx.h:1229 config/dsp16xx/dsp16xx.h:1809 config/dsp16xx/dsp16xx.h:1814 + msgid "profiling not implemented yet" + msgstr "ayrımlama henüz programlanmadı." + + #. Emit RTL insns to initialize the variable parts of a trampoline. + #. FNADDR is an RTX for the address of the function's pure code. + #. CXT is an RTX for the static chain value for the function. + #: config/dsp16xx/dsp16xx.h:1240 config/dsp16xx/dsp16xx.h:1252 + msgid "trampolines not yet implemented" + msgstr "trampolines henüz programlanmadı" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/elxsi/elxsi.h:51 + msgid "Generate code the unix assembler can handle" + msgstr "Unix çeviricinin kullanabileceÄŸi kod üretilir" + + #: config/elxsi/elxsi.h:52 + msgid "Generate code an embedded assembler can handle" + msgstr "Bir gömülü çeviricinin kullanabileceÄŸi kod üretilir" + + #: config/fr30/fr30.c:456 + msgid "fr30_print_operand_address: unhandled address" + msgstr "fr30_print_operand_address: bilinmeyen adres" + + #: config/fr30/fr30.c:483 + #, c-format + msgid "fr30_print_operand: unrecognized %%p code" + msgstr "fr30_print_operand: bilinmeyen %%p kodu" + + #: config/fr30/fr30.c:503 + #, c-format + msgid "fr30_print_operand: unrecognized %%b code" + msgstr "fr30_print_operand: bilinmeyen %%b kodu" + + #: config/fr30/fr30.c:524 + #, c-format + msgid "fr30_print_operand: unrecognized %%B code" + msgstr "fr30_print_operand: bilinmeyen %%B kodu" + + #: config/fr30/fr30.c:532 + #, c-format + msgid "fr30_print_operand: invalid operand to %%A code" + msgstr "fr30_print_operand: %%A koduna terim geçersiz" + + #: config/fr30/fr30.c:549 + #, c-format + msgid "fr30_print_operand: invalid %%x code" + msgstr "fr30_print_operand: %%x kodu geçersiz" + + #: config/fr30/fr30.c:556 + #, c-format + msgid "fr30_print_operand: invalid %%F code" + msgstr "fr30_print_operand: %%F kodu geçersiz" + + #: config/fr30/fr30.c:572 + msgid "fr30_print_operand: unknown code" + msgstr "fr30_print_operand: bilinmeyen kod" + + #: config/fr30/fr30.c:601 config/fr30/fr30.c:610 config/fr30/fr30.c:621 config/fr30/fr30.c:634 + msgid "fr30_print_operand: unhandled MEM" + msgstr "fr30_print_operand: bilinmeyen bellek" + + #: config/fr30/fr30.h:57 + msgid "Assume small address space" + msgstr "Küçük adres alanı varsayılır" + + #: config/h8300/h8300.c:142 + msgid "-ms2600 is used without -ms" + msgstr "-ms2600, -ms olmaksızın kullanılmış" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/h8300/h8300.h:117 + msgid "Generate H8/S code" + msgstr "H8/S kodu üretilir" + + #: config/h8300/h8300.h:118 + msgid "Do not generate H8/S code" + msgstr "H8/S kodu üretilmez" + + #: config/h8300/h8300.h:119 + msgid "Generate H8/S2600 code" + msgstr "H8/S2600 kodu üretilir" + + #: config/h8300/h8300.h:120 + msgid "Do not generate H8/S2600 code" + msgstr "H8/S2600 kodu üretilmez" + + #: config/h8300/h8300.h:121 + msgid "Make integers 32 bits wide" + msgstr "Tamsayılar 32 bitlik yapılır" + + #: config/h8300/h8300.h:124 + msgid "Use registers for argument passing" + msgstr "Argüman aktarımı için yazmaçlar kullanılır" + + #: config/h8300/h8300.h:126 + msgid "Do not use registers for argument passing" + msgstr "Argüman aktarımı için yazmaçlar kullanılmaz" + + #: config/h8300/h8300.h:128 + msgid "Consider access to byte sized memory slow" + msgstr "Bayt bayt eriÅŸilen belleÄŸin yavaÅŸ olduÄŸu varsayılır" + + #: config/h8300/h8300.h:129 + msgid "Enable linker relaxing" + msgstr "BaÄŸlayıcı gevÅŸetmesi etkinleÅŸtirilir" + + #: config/h8300/h8300.h:131 + msgid "Generate H8/300H code" + msgstr "H8/300H kodu üretilir" + + #: config/h8300/h8300.h:132 + msgid "Do not generate H8/300H code" + msgstr "H8/300H kodu üretilmez" + + #: config/h8300/h8300.h:133 + msgid "Use H8/300 alignment rules" + msgstr "H8/300 hizalama kuralları kullanılır" + + #: config/i370/i370-c.c:54 + msgid "junk at end of #pragma map" + msgstr "'#pragma map' sonunda karışıklık" + + #: config/i370/i370-c.c:60 + msgid "malformed #pragma map, ignored" + msgstr "'#pragma map' bozuk, yoksayıldı" + + #: config/i370/i370.c:897 + msgid "real name is too long - alias ignored" + msgstr "gerçek isim çok uzun - takma ad yoksayıldı" + + #: config/i370/i370.c:902 + msgid "alias name is too long - alias ignored" + msgstr "takma ad çok uzun - takma ad yoksayıldı" + + #: config/i370/i370.c:1173 + msgid "internal error--no jump follows compare:" + msgstr "iç hata -- karşılaÅŸtırmayı izleyen bir jump yok:" + + #. Macro to define tables used to set the flags. This is a list in braces + #. of pairs in braces, each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/i370/i370.h:63 + msgid "Generate char instructions" + msgstr "char komutları üretilir" + + #: config/i370/i370.h:64 + msgid "Do not generate char instructions" + msgstr "char komutları üretilmez" + + #: config/i386/i386.c:925 + #, c-format + msgid "code model %s not supported in PIC mode" + msgstr "PIC kipinde %s kod modeli desteklenmiyor" + + #: config/i386/i386.c:935 config/sparc/sparc.c:344 + #, c-format + msgid "bad value (%s) for -mcmodel= switch" + msgstr "-mcmodel= seçeneÄŸinin deÄŸeri (%s) hatalı" + + #: config/i386/i386.c:950 + #, c-format + msgid "bad value (%s) for -masm= switch" + msgstr "-masm= seçeneÄŸinin deÄŸeri (%s) hatalı" + + #: config/i386/i386.c:953 + #, c-format + msgid "code model `%s' not supported in the %s bit mode" + msgstr "%2$s bit kipinde `%1$s' kod modeli desteklenmiyor" + + #: config/i386/i386.c:956 + msgid "code model `large' not supported yet" + msgstr "'büyük' kod modeli henüz desteklenmiyor" + + #: config/i386/i386.c:958 + #, c-format + msgid "%i-bit mode not compiled in" + msgstr "%i bitlik kip bunun içinde derlenmiÅŸ deÄŸil:" + + #: config/i386/i386.c:988 config/mips/mips.c:4989 + #, c-format + msgid "bad value (%s) for -march= switch" + msgstr "-march= seçeneÄŸinin deÄŸeri (%s) hatalı" + + #: config/i386/i386.c:999 config/mips/mips.c:4945 + #, c-format + msgid "bad value (%s) for -mcpu= switch" + msgstr "-mcpu= seçeneÄŸinin deÄŸeri (%s) hatalı" + + #: config/i386/i386.c:1018 + #, c-format + msgid "-mregparm=%d is not between 0 and %d" + msgstr "-mregparm=%d 0 ile %d arasında deÄŸil" + + #: config/i386/i386.c:1031 + msgid "-malign-loops is obsolete, use -falign-loops" + msgstr "-malign-loops artık kullanılmıyor yerine -falign-loops kullanın" + + #: config/i386/i386.c:1036 config/i386/i386.c:1049 config/i386/i386.c:1062 + #, c-format + msgid "-malign-loops=%d is not between 0 and %d" + msgstr "-malign-loops=%d 0 ile %d arasında deÄŸil" + + #: config/i386/i386.c:1044 + msgid "-malign-jumps is obsolete, use -falign-jumps" + msgstr "-malign-jumps eskidir, yerine -falign-jumps kullanın" + + #: config/i386/i386.c:1057 + msgid "-malign-functions is obsolete, use -falign-functions" + msgstr "-malign-functions artık kullanılmıyor, yerine -falign-functions kullanın" + + #: config/i386/i386.c:1095 + #, c-format + msgid "-mpreferred-stack-boundary=%d is not between %d and 12" + msgstr "-mpreferred-stack-boundary=%d %d ile 12 arasında deÄŸil" + + #: config/i386/i386.c:1107 + #, c-format + msgid "-mbranch-cost=%d is not between 0 and 5" + msgstr "-mbranch-cost=%d 0 ile 5 arasında deÄŸil" + + #: config/i386/i386.c:1129 + msgid "-malign-double makes no sense in the 64bit mode" + msgstr "-malign-double 64bitlik kipte iÅŸ yapmaz" + + #: config/i386/i386.c:1131 + msgid "-mrtd calling convention not supported in the 64bit mode" + msgstr "64bitlik kipte -mrtd çaÄŸrı uzlaşımı desteklenmiyor" + + #: config/i386/i386.c:1147 config/i386/i386.c:1158 + msgid "SSE instruction set disabled, using 387 arithmetics" + msgstr "SSE komut kümesi iptal edildi, 387 aritmetiÄŸi kullanılıyor" + + #: config/i386/i386.c:1163 + msgid "387 instruction set disabled, using SSE arithmetics" + msgstr "387 komut kümesi iptal edildi, SSE aritmetiÄŸi kullanılıyor" + + #: config/i386/i386.c:1170 + #, c-format + msgid "bad value (%s) for -mfpmath= switch" + msgstr "-mfpmath= seçeneÄŸinin deÄŸeri (%s) hatalı" + + #: config/i386/i386.c:1300 + #, c-format + msgid "`%s' attribute requires an integer constant argument" + msgstr "`%s' özniteliÄŸi bir tamsayı sabit argüman gerektirir" + + #: config/i386/i386.c:1306 + #, c-format + msgid "argument to `%s' attribute larger than %d" + msgstr "`%s' özniteliÄŸine argüman %d den büyük" + + #: config/i386/i386.c:5363 + msgid "invalid UNSPEC as operand" + msgstr "veri öğesi olarak UNSPEC geçersiz" + + #: config/i386/i386.c:5596 + msgid "extended registers have no high halves" + msgstr "ek yazmaçların yüksek yarıları yok" + + #: config/i386/i386.c:5611 + msgid "unsupported operand size for extended register" + msgstr "ek yazmaç için desteklenmeyen terim boyutu" + + #: config/i386/i386.c:5884 + msgid "operand is neither a constant nor a condition code, invalid operand code 'c'" + msgstr "terim ne bir sabit ne de bir koÅŸul kodu, geçersiz terim kodu 'c'" + + #: config/i386/i386.c:5930 + #, c-format + msgid "invalid operand code `%c'" + msgstr "terim kodu `%c' geçersiz" + + #: config/i386/i386.c:9867 + msgid "unknown insn mode" + msgstr "bilinmeyen komut kipi" + + #. @@@ better error message + #: config/i386/i386.c:11730 config/i386/i386.c:11763 + msgid "selector must be an immediate" + msgstr "seçici bir ÅŸimdiki deÄŸer olmalı" + + #. @@@ better error message + #: config/i386/i386.c:11921 config/i386/i386.c:11949 + msgid "mask must be an immediate" + msgstr "maske bir ÅŸimdiki deÄŸer olmalı" + + #: config/i386/winnt.c:94 + #, c-format + msgid "`%s' attribute only applies to variables" + msgstr "`%s' özniteliÄŸi sadece deÄŸiÅŸkenlere uygulanır" + + #: config/i386/winnt.c:262 + #, c-format + msgid "`%s' declared as both exported to and imported from a DLL" + msgstr "`%s' hem bir DLL'den alınan hem de bir DLL'e aktarılan olarak bildirilmiÅŸ" + + #: config/i386/cygwin.h:51 + msgid "Use the Cygwin interface" + msgstr "Cygwin arayüzü kullanılır" + + #: config/i386/cygwin.h:53 + msgid "Use the Mingw32 interface" + msgstr "Mingw32 arayüzü kullanılır" + + #: config/i386/cygwin.h:54 + msgid "Create GUI application" + msgstr "GKA uygulaması oluÅŸturur" + + #: config/i386/cygwin.h:55 + msgid "Don't set Windows defines" + msgstr "Windows atamaları ayarlanmaz" + + #: config/i386/cygwin.h:56 + msgid "Set Windows defines" + msgstr "Windows atamaları ayarlanır" + + #: config/i386/cygwin.h:58 + msgid "Create console application" + msgstr "Konsol uygulaması oluÅŸturulur" + + #: config/i386/cygwin.h:59 config/i386/win32.h:59 + msgid "Generate code for a DLL" + msgstr "Bir DLL için kod üretilir" + + #: config/i386/cygwin.h:61 config/i386/win32.h:61 + msgid "Ignore dllimport for functions" + msgstr "İşlevler için dllimport yoksayılır" + + #: config/i386/cygwin.h:63 + msgid "Use Mingw-specific thread support" + msgstr "Mingw'e özgü kanallama desteÄŸini etkinleÅŸtirir" + + #: config/i386/cygwin.h:257 + #, c-format + msgid "-f%s ignored for target (all code is position independent)" + msgstr "-f%s hedef için yoksayıldı (bütün kod yerden bağımsız)" + + #: config/i386/dgux.h:60 + msgid "Retain standard MXDB information" + msgstr "Standart MXDB bilgisini korur" + + #: config/i386/dgux.h:62 + msgid "Retain legend information" + msgstr "Etiket bilgisi korunur" + + #: config/i386/dgux.h:65 + msgid "Generate external legend information" + msgstr "Dış etiket bilgisi üretir" + + #: config/i386/dgux.h:67 + msgid "Emit identifying info in .s file" + msgstr ".s dosyasına tanıtıcı bilgi koyar" + + #: config/i386/dgux.h:69 + msgid "Warn when a function arg is a structure" + msgstr "Bir yapı, bir iÅŸlevin argümanıysa uyarır" + + #: config/i386/dgux.h:252 + msgid "argument is a structure" + msgstr "argüman bir yapı" + + #: config/i386/djgpp.h:201 + msgid "-mbnu210 is ignored (option is obsolete)" + msgstr "-mbnu210 yoksayıldı (seçenek artık kullanılmıyor)" + + #: config/i386/i386.h:45 config/mips/mips.h:186 + msgid "half-pic init called on systems that don't support it" + msgstr "`half-pic init' desteklenmediÄŸi sistemlerde kullanıldı" + + #. Deprecated. + #. Deprecated. + #. Deprecated. + #. Deprecated. + #. Deprecated. + #. Deprecated. + #: config/i386/i386.h:303 + msgid "Alternate calling convention" + msgstr "Almaşık çaÄŸrı uzlaşımı" + + #: config/i386/i386.h:305 config/m68k/m68k.h:180 config/ns32k/ns32k.h:106 + msgid "Use normal calling convention" + msgstr "Normal çaÄŸrı uzlaşımı kullanılır" + + #: config/i386/i386.h:307 + msgid "Align some doubles on dword boundary" + msgstr "double'lar dword sınırlarına hizalanır" + + #: config/i386/i386.h:309 + msgid "Align doubles on word boundary" + msgstr "double'lar word sınırlarına hizalanır" + + #: config/i386/i386.h:311 + msgid "Uninitialized locals in .bss" + msgstr ".bss içinde ilklendirilmemiÅŸ yerel deÄŸerler" + + #: config/i386/i386.h:313 + msgid "Uninitialized locals in .data" + msgstr ".data içinde ilklendirilmemiÅŸ yerel deÄŸerler" + + #: config/i386/i386.h:315 config/m68k/linux-aout.h:45 config/m68k/linux.h:50 + msgid "Use IEEE math for fp comparisons" + msgstr "" + "fp karşılaÅŸtırmaları için IEEE aritmetiÄŸi\n" + " kullanılır" + + #: config/i386/i386.h:317 + msgid "Do not use IEEE math for fp comparisons" + msgstr "" + "fp karşılaÅŸtırmaları için IEEE aritmetiÄŸi\n" + " kullanılmaz" + + #: config/i386/i386.h:319 + msgid "Return values of functions in FPU registers" + msgstr "" + "FPU yazmaçlarındaki iÅŸlevlerin deÄŸerleriyle\n" + " sonuçlanır" + + #: config/i386/i386.h:321 + msgid "Do not return values of functions in FPU registers" + msgstr "" + "FPU yazmaçlarındaki iÅŸlevlerin deÄŸerleriyle\n" + " sonuçlanmaz" + + #: config/i386/i386.h:323 + msgid "Do not generate sin, cos, sqrt for FPU" + msgstr "FPU için sin, cos, sqrt üretilmez" + + #: config/i386/i386.h:325 + msgid "Generate sin, cos, sqrt for FPU" + msgstr "FPU için sin, cos, sqrt üretilir" + + #: config/i386/i386.h:327 + msgid "Omit the frame pointer in leaf functions" + msgstr "Alt düzey iÅŸlevlerde çerçeve gösterge ihmal edilir" + + #: config/i386/i386.h:330 + msgid "Enable stack probing" + msgstr "Yığın sondalamayı etkinleÅŸtirir" + + #. undocumented + #. undocumented + #: config/i386/i386.h:335 + msgid "Align destination of the string operations" + msgstr "Dizge iÅŸlemleri hedefi hizalanır" + + #: config/i386/i386.h:337 + msgid "Do not align destination of the string operations" + msgstr "Dizge iÅŸlemleri hedefi hizalanmaz" + + #: config/i386/i386.h:339 + msgid "Inline all known string operations" + msgstr "Bilinen tüm dizge iÅŸlemleri özümlenir" + + #: config/i386/i386.h:341 + msgid "Do not inline all known string operations" + msgstr "Bilinen hiçbir dizge iÅŸlemi özümlenmez" + + #: config/i386/i386.h:343 config/i386/i386.h:348 + msgid "Use push instructions to save outgoing arguments" + msgstr "" + "Çıkan argümanları kaydedecek basma komutları \n" + " kullanılır" + + #: config/i386/i386.h:345 config/i386/i386.h:350 + msgid "Do not use push instructions to save outgoing arguments" + msgstr "" + "Çıkan argümanları kaydedecek basma komutları \n" + " kullanılmaz" + + #: config/i386/i386.h:352 + msgid "Support MMX built-in functions" + msgstr "MMX yerleÅŸik iÅŸlevleri desteklenir" + + #: config/i386/i386.h:354 + msgid "Do not support MMX built-in functions" + msgstr "MMX yerleÅŸik iÅŸlevleri desteklenmez" + + #: config/i386/i386.h:357 + msgid "Support 3DNow! built-in functions" + msgstr "3DNow! yerleÅŸik iÅŸlevleri desteklenir" + + #: config/i386/i386.h:360 + msgid "Do not support 3DNow! built-in functions" + msgstr "3DNow! yerleÅŸik iÅŸlevleri desteklenmez" + + #: config/i386/i386.h:362 + msgid "Support MMX and SSE built-in functions and code generation" + msgstr "" + "MMX ve SSE2 yerleÅŸik iÅŸlevleri ve kod üretimi\n" + " desteklenir" + + #: config/i386/i386.h:365 + msgid "Do not support MMX and SSE built-in functions and code generation" + msgstr "" + "MMX ve SSE2 yerleÅŸik iÅŸlevleri ve kod üretimi\n" + " desteklenmez" + + #: config/i386/i386.h:367 + msgid "Support MMX, SSE and SSE2 built-in functions and code generation" + msgstr "" + "MMX, SSE ve SSE2 yerleÅŸik iÅŸlevleri ve kod üretimi\n" + " desteklenir" + + #: config/i386/i386.h:370 + msgid "Do not support MMX, SSE and SSE2 built-in functions and code generation" + msgstr "" + "MMX, SSE ve SSE2 yerleÅŸik iÅŸlevleri ve kod üretimi\n" + " desteklenmez" + + #: config/i386/i386.h:372 + msgid "sizeof(long double) is 16" + msgstr "sizeof(long double) -> 16" + + #: config/i386/i386.h:374 + msgid "sizeof(long double) is 12" + msgstr "sizeof(long double) -> 12" + + #: config/i386/i386.h:376 + msgid "Generate 64bit x86-64 code" + msgstr "64bit x86-64 kodu üretilir" + + #: config/i386/i386.h:378 + msgid "Generate 32bit i386 code" + msgstr "32bit i386 kodu üretilir" + + #: config/i386/i386.h:380 + msgid "Use red-zone in the x86-64 code" + msgstr "x86-64 kodda red-zone kullanılır" + + #: config/i386/i386.h:382 + msgid "Do not use red-zone in the x86-64 code" + msgstr "x86-64 kodda red-zone kullanılmaz" + + #. This macro is similar to `TARGET_SWITCHES' but defines names of + #. command options that have values. Its definition is an + #. initializer with a subgrouping for each command option. + #. + #. Each subgrouping contains a string constant, that defines the + #. fixed part of the option name, and the address of a variable. The + #. variable, type `char *', is set to the variable part of the given + #. option if the fixed part matches. The actual option name is made + #. by appending `-m' to the specified name. + #: config/i386/i386.h:428 config/rs6000/rs6000.h:428 config/sparc/sparc.h:641 + msgid "Schedule code for given CPU" + msgstr "Verilen MİB için kodu zamanlar" + + #: config/i386/i386.h:430 + msgid "Generate floating point mathematics using given instruction set" + msgstr "" + "Belirtilen komut kümesini kullanan kayan nokta\n" + " aritmetiÄŸi üretilir" + + #: config/i386/i386.h:432 + msgid "Generate code for given CPU" + msgstr "Verilen MİB için kodu üretir" + + #: config/i386/i386.h:434 + msgid "Number of registers used to pass integer arguments" + msgstr "" + "Tamsayı argümanları aktarmada kullanılan\n" + " yazmaçların sayısı" + + #. TARGET_DEFAULT is defined in sun*.h and isi.h, etc. + #. This macro is similar to `TARGET_SWITCHES' but defines names of + #. command options that have values. Its definition is an + #. initializer with a subgrouping for each command option. + #. + #. Each subgrouping contains a string constant, that defines the + #. fixed part of the option name, and the address of a variable. The + #. variable, type `char *', is set to the variable part of the given + #. option if the fixed part matches. The actual option name is made + #. by appending `-m' to the specified name. + #: config/i386/i386.h:436 config/m68k/m68k.h:263 + msgid "Loop code aligned to this power of 2" + msgstr "Çevrim kodu bunun 2. kuvvetine ayarlandı" + + #: config/i386/i386.h:438 config/m68k/m68k.h:265 + msgid "Jump targets are aligned to this power of 2" + msgstr "Sıçrama hedefleri bunun 2.kuvvetine ayarlandı" + + #: config/i386/i386.h:440 config/m68k/m68k.h:267 + msgid "Function starts are aligned to this power of 2" + msgstr "İşlev baÅŸlangıçları bunun 2.kuvvetine ayarlandı" + + #: config/i386/i386.h:443 + msgid "Attempt to keep stack aligned to this power of 2" + msgstr "Bunun 2.kuvvetine ayarlanmış yığını tutmaya çalışır" + + #: config/i386/i386.h:445 + msgid "Branches are this expensive (1-5, arbitrary units)" + msgstr "Dallanmaların bedeli (1-5, keyfi birimler)" + + #: config/i386/i386.h:447 + msgid "Use given x86-64 code model" + msgstr "Verilen x86-64 kod modeli kullanılır" + + #. Undocumented. + #. Undocumented. + #: config/i386/i386.h:453 + msgid "Use given assembler dialect" + msgstr "Verilen çevirici aksanı kullanılır" + + #: config/i386/osf1elf.h:112 + msgid "Profiling uses mcount" + msgstr "Ayrımlama mcount kullanır" + + #: config/i386/osfrose.h:60 + msgid "Emit half-PIC code" + msgstr "Yarım PIC kodu yayınlanır" + + #. intentionally undoc + #. intentionally undoc + #: config/i386/osfrose.h:67 + msgid "Emit ELF object code" + msgstr "ELF nesne kodu yayınlanır" + + #: config/i386/osfrose.h:69 + msgid "Emit ROSE object code" + msgstr "ROSE nesne kodu yayınlanır" + + #: config/i386/osfrose.h:71 + msgid "Symbols have a leading underscore" + msgstr "Semboller altçizgi ile baÅŸlar" + + #: config/i386/osfrose.h:74 + msgid "Align to >word boundaries" + msgstr "Hizalama >word sınırlara yapılır" + + #: config/i386/osfrose.h:77 + msgid "Use mcount for profiling" + msgstr "Ayrımlama için mcount kullanılır" + + #: config/i386/osfrose.h:79 + msgid "Use mcount_ptr for profiling" + msgstr "Ayrımlama için mcount_ptr kullanılır" + + #: config/i386/sco5.h:771 + msgid "Generate ELF output" + msgstr "ELF çıktı üretilir" + + #: config/i386/win32.h:53 + msgid "Use Mingw32 interface" + msgstr "Mingw32 arayüzü kullanılır" + + #: config/i386/win32.h:55 + msgid "Use Cygwin interface" + msgstr "Cygwin arayüzü kullanılır" + + #: config/i386/win32.h:57 + msgid "Use bare Windows interface" + msgstr "Yalın Windows arayüzü kullanılır" + + #. If the environment variable DJDIR is not defined, then DJGPP is not installed correctly and GCC will quickly become confused with the default prefix settings. Report the problem now so the user doesn't receive deceptive "file not found" error messages later. + #. DJDIR is automatically defined by the DJGPP environment config file pointed to by the environment variable DJGPP. Examine DJGPP to try and figure out what's wrong. + #: config/i386/xm-djgpp.h:71 + msgid "environment variable DJGPP not defined" + msgstr "ortam deÄŸiÅŸkeni DJGPP atanmamış" + + #: config/i386/xm-djgpp.h:73 + #, c-format + msgid "environment variable DJGPP points to missing file '%s'" + msgstr "ortam deÄŸiÅŸkeni DJGPP olmayan '%s' dosyasını gösteriyor" + + #: config/i386/xm-djgpp.h:76 + #, c-format + msgid "environment variable DJGPP points to corrupt file '%s'" + msgstr "ortam deÄŸiÅŸkeni DJGPP bozuk '%s' dosyasını gösteriyor" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/i860/i860.h:56 config/i860/paragon.h:28 + msgid "Generate code which uses the FPU" + msgstr "Aritmetik iÅŸlemci kullanan kod üretilir" + + #: config/i860/i860.h:57 config/i860/i860.h:58 config/i860/paragon.h:29 config/i860/paragon.h:30 config/i860/paragon.h:31 + msgid "Do not generate code which uses the FPU" + msgstr "Aritmetik iÅŸlemci kullanan kod üretilmez" + + #: config/i960/i960-c.c:67 + msgid "sorry, not implemented: #pragma align NAME=SIZE" + msgstr "Daha yazılmadı: #pragma İSİM=BOYUT hizalaması" + + #: config/i960/i960-c.c:72 + msgid "malformed #pragma align - ignored" + msgstr "'#pragma align' bozuk - yoksayıldı" + + #: config/i960/i960-c.c:110 + msgid "sorry, not implemented: #pragma noalign NAME" + msgstr "Daha yazılmadı: #pragma noalign İSİM" + + #: config/i960/i960.c:1405 config/m68k/m68k.c:665 config/rs6000/rs6000.c:8437 + msgid "stack limit expression is not supported" + msgstr "yığın sınırlama ifadesi desteklenmiyor" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #. ??? Not all ten of these architecture variations actually exist, but I + #. am not sure which are real and which aren't. + #: config/i960/i960.h:240 + msgid "Generate SA code" + msgstr "SA kodu üretilir" + + #: config/i960/i960.h:243 + msgid "Generate SB code" + msgstr "SB kodu üretilir" + + #. {"sc", (TARGET_FLAG_NUMERICS|TARGET_FLAG_PROTECTED| TARGET_FLAG_MC|TARGET_FLAG_COMPLEX_ADDR), N_("Generate SC code")}, + #: config/i960/i960.h:248 + msgid "Generate KA code" + msgstr "KA kodu üretilir" + + #: config/i960/i960.h:251 + msgid "Generate KB code" + msgstr "KB kodu üretilir" + + #. {"kc", (TARGET_FLAG_NUMERICS|TARGET_FLAG_PROTECTED| TARGET_FLAG_MC|TARGET_FLAG_COMPLEX_ADDR), N_("Generate KC code")}, + #: config/i960/i960.h:256 + msgid "Generate JA code" + msgstr " \bJA kodu üretilir" + + #: config/i960/i960.h:258 + msgid "Generate JD code" + msgstr "JD kodu üretilir" + + #: config/i960/i960.h:261 + msgid "Generate JF code" + msgstr "JF kodu üretilir" + + #: config/i960/i960.h:263 + msgid "generate RP code" + msgstr "RP kodu üretilir" + + #: config/i960/i960.h:266 + msgid "Generate MC code" + msgstr "MC kodu üretilir" + + #: config/i960/i960.h:269 + msgid "Generate CA code" + msgstr "\bCA kodu üretilir" + + #. {"cb", (TARGET_FLAG_NUMERICS|TARGET_FLAG_C_SERIES| TARGET_FLAG_BRANCH_PREDICT|TARGET_FLAG_CODE_ALIGN), N_("Generate CB code")}, {"cc", (TARGET_FLAG_NUMERICS|TARGET_FLAG_PROTECTED| TARGET_FLAG_C_SERIES|TARGET_FLAG_BRANCH_PREDICT| TARGET_FLAG_CODE_ALIGN), N_("Generate CC code")}, + #: config/i960/i960.h:279 + msgid "Generate CF code" + msgstr "CF kodu üretilir" + + #: config/i960/i960.h:285 + msgid "Use alternate leaf function entries" + msgstr "Alternatif alt düzey iÅŸlev girdileri kullanılır" + + #: config/i960/i960.h:287 + msgid "Do not use alternate leaf function entries" + msgstr "Alternatif alt düzey iÅŸlev girdileri kullanılmaz" + + #: config/i960/i960.h:289 + msgid "Perform tail call optimization" + msgstr "Kuyruk çaÄŸrı eniyilemesi uygulanır" + + #: config/i960/i960.h:291 + msgid "Do not perform tail call optimization" + msgstr "Kuyruk çaÄŸrı eniyilemesi uygulanmaz" + + #: config/i960/i960.h:293 + msgid "Use complex addressing modes" + msgstr "Karmaşık adresleme kipleri kullanılır" + + #: config/i960/i960.h:295 + msgid "Do not use complex addressing modes" + msgstr "Karmaşık adresleme kipleri kullanılmaz" + + #: config/i960/i960.h:297 + msgid "Align code to 8 byte boundary" + msgstr "Kodu 8 baytlık sınıra hizalar" + + #: config/i960/i960.h:299 + msgid "Do not align code to 8 byte boundary" + msgstr "Kodu 8 baytlık sınıra hizalamaz" + + #. {"clean-linkage", (TARGET_FLAG_CLEAN_LINKAGE), N_("Force use of prototypes")}, {"no-clean-linkage", -(TARGET_FLAG_CLEAN_LINKAGE), N_("Do not force use of prototypes")}, + #: config/i960/i960.h:305 config/i960/i960.h:307 + msgid "Enable compatibility with iC960 v2.0" + msgstr "iC960 v2.0 uyumluluÄŸu etkinleÅŸtirilir" + + #: config/i960/i960.h:309 + msgid "Enable compatibility with iC960 v3.0" + msgstr "iC960 v3.0 uyumluluÄŸu etkinleÅŸtirilir" + + #: config/i960/i960.h:311 config/i960/i960.h:313 + msgid "Enable compatibility with ic960 assembler" + msgstr "iC960 çevirici uyumluluÄŸu etkinleÅŸtirilir" + + #: config/i960/i960.h:315 + msgid "Do not permit unaligned accesses" + msgstr "Hizalanmamış eriÅŸime izin verilmez" + + #: config/i960/i960.h:317 + msgid "Permit unaligned accesses" + msgstr "Hizalanmamış eriÅŸime izin verilir" + + #: config/i960/i960.h:319 + msgid "Layout types like Intel's v1.3 gcc" + msgstr "Türler Intel's v1.3 gcc gibi yerleÅŸtirilir" + + #: config/i960/i960.h:321 + msgid "Do not layout types like Intel's v1.3 gcc" + msgstr "Türler Intel's v1.3 gcc gibi yerleÅŸtirilmez" + + #: config/i960/i960.h:323 config/sparc/freebsd.h:80 config/sparc/linux.h:86 config/sparc/linux64.h:143 config/sparc/netbsd-elf.h:238 + msgid "Use 64 bit long doubles" + msgstr "64 bit long double'lar kullanılır" + + #: config/i960/i960.h:325 + msgid "Enable linker relaxation" + msgstr "BaÄŸlayıcı gevÅŸemesini etkinleÅŸtirir" + + #: config/i960/i960.h:327 + msgid "Do not enable linker relaxation" + msgstr "BaÄŸlayıcı gevÅŸemesini etkinleÅŸtirir" + + #. Override conflicting target switch options. + #. Doesn't actually detect if more than one -mARCH option is given, but + #. does handle the case of two blatantly conflicting -mARCH options. + #: config/i960/i960.h:342 config/i960/i960.h:352 + msgid "conflicting architectures defined - using C series" + msgstr "çeliÅŸkili mimariler atanmış - C serisi kullanılıyor" + + #: config/i960/i960.h:347 + msgid "conflicting architectures defined - using K series" + msgstr "çeliÅŸkili mimariler atanmış - K serisi kullanılıyor" + + #: config/i960/i960.h:362 + msgid "iC2.0 and iC3.0 are incompatible - using iC3.0" + msgstr "iC2.0 ve iC3.0 uyumsuz - iC3.0 kullanılıyor" + + #. ??? See the LONG_DOUBLE_TYPE_SIZE definition below. + #: config/i960/i960.h:373 + msgid "the -mlong-double-64 option does not work yet" + msgstr "-mlong-double-64 seçeneÄŸi henüz çalışmıyor." + + #: config/ia64/ia64.c:3554 + msgid "ia64_print_operand: unknown code" + msgstr "ia64_print_operand: bilinmeyen kod" + + #: config/ia64/ia64.c:3828 + msgid "value of -mfixed-range must have form REG1-REG2" + msgstr "-mfixed-range için deÄŸer YAZMAÇ1-YAZMAÇ2 ÅŸeklinde olmalı" + + #: config/ia64/ia64.c:3855 + #, c-format + msgid "%s-%s is an empty range" + msgstr "%s-%s aralığı boÅŸ" + + #: config/ia64/ia64.c:3920 + msgid "cannot optimize division for both latency and throughput" + msgstr "Bölme hem iÅŸ geçiÅŸi hem de gecikme için eniyilenemez" + + #. This macro defines names of command options to set and clear bits in + #. `target_flags'. Its definition is an initializer with a subgrouping for + #. each command option. + #: config/ia64/ia64.h:119 + msgid "Generate big endian code" + msgstr "Büyük ilkli kod üretilir" + + #: config/ia64/ia64.h:121 config/mcore/mcore.h:159 + msgid "Generate little endian code" + msgstr "Küçük ilkli kod üretilir" + + #: config/ia64/ia64.h:123 + msgid "Generate code for GNU as" + msgstr "Kod GNU as için üretilir" + + #: config/ia64/ia64.h:125 + msgid "Generate code for Intel as" + msgstr "Kod Intel as için üretilir" + + #: config/ia64/ia64.h:127 + msgid "Generate code for GNU ld" + msgstr "Kod GNU ld için üretilir" + + #: config/ia64/ia64.h:129 + msgid "Generate code for Intel ld" + msgstr "Kod Intel ld için üretilir" + + #: config/ia64/ia64.h:131 + msgid "Generate code without GP reg" + msgstr "GP yazmaçsız kod üretilir" + + #: config/ia64/ia64.h:133 + msgid "Emit stop bits before and after volatile extended asms" + msgstr "DeÄŸiÅŸken uzatılmış asmlerden önce ve sonra durma bitleri üretir" + + #: config/ia64/ia64.h:135 + msgid "Don't emit stop bits before and after volatile extended asms" + msgstr "DeÄŸiÅŸken uzatılmış asmlerden önce ve sonra durma bitleri üretir" + + #: config/ia64/ia64.h:137 + msgid "Emit code for Itanium (TM) processor B step" + msgstr "Itanium (TM) iÅŸlemcisi B adımı için kod üretir" + + #: config/ia64/ia64.h:139 + msgid "Use in/loc/out register names" + msgstr "in/loc/out yazmaç isimleri kullanılır" + + #: config/ia64/ia64.h:141 + msgid "Disable use of sdata/scommon/sbss" + msgstr "sdata/scommon/sbss kullanımı iptal edilir" + + #: config/ia64/ia64.h:143 + msgid "Enable use of sdata/scommon/sbss" + msgstr "sdata/scommon/sbss kullanımı etkinleÅŸtirilir" + + #: config/ia64/ia64.h:145 + msgid "gp is constant (but save/restore gp on indirect calls)" + msgstr "gp sabittir (ancak dolaylı çaÄŸrılarda gp kaydedilmesi/alınması yapılır)" + + #: config/ia64/ia64.h:147 + msgid "Generate self-relocatable code" + msgstr "KendiliÄŸinden konum deÄŸiÅŸtirebilen kod üretilir" + + #: config/ia64/ia64.h:149 + msgid "Generate inline division, optimize for latency" + msgstr "" + "Özümleme bölümü üretir, gizlenmesi için en\n" + " elveriÅŸli ÅŸartları oluÅŸturur" + + #: config/ia64/ia64.h:151 + msgid "Generate inline division, optimize for throughput" + msgstr "" + "Özümleme bölümü üretir, içselleÅŸtirilmesi için en\n" + " elveriÅŸli ÅŸartları oluÅŸturur" + + #: config/ia64/ia64.h:153 + msgid "Enable Dwarf 2 line debug info via GNU as" + msgstr "GNU as yoluyla Dwarf 2 hata ayıklama satır bilgilerini etkinleÅŸtirir" + + #: config/ia64/ia64.h:155 + msgid "Disable Dwarf 2 line debug info via GNU as" + msgstr "GNU as yoluyla Dwarf 2 hata ayıklama satır bilgilerini etkisizleÅŸtirir" + + #: config/ia64/ia64.h:183 + msgid "Specify range of registers to make fixed" + msgstr "Belirlemek için yazmaç aralığı belirtilir" + + #: config/m32r/m32r.c:130 + #, c-format + msgid "bad value (%s) for -mmodel switch" + msgstr "-mmodel seçeneÄŸinin deÄŸeri (%s) hatalı" + + #: config/m32r/m32r.c:139 + #, c-format + msgid "bad value (%s) for -msdata switch" + msgstr "-msdata seçeneÄŸinin deÄŸeri (%s) hatalı" + + #: config/m32r/m32r.c:310 + #, c-format + msgid "invalid argument of `%s' attribute" + msgstr "`%s' özniteliÄŸinin argümanı geçersiz" + + #: config/m32r/m32r.c:408 + msgid "const objects cannot go in .sdata/.sbss" + msgstr "const nesneleri .sdata/.sbss içinde bulunamaz" + + #: config/m32r/m32r.c:2248 + #, c-format + msgid "invalid operand to %%s code" + msgstr "%%s kodu için terim geçersiz" + + #: config/m32r/m32r.c:2255 + #, c-format + msgid "invalid operand to %%p code" + msgstr "%%p kodu için terim geçersiz" + + #: config/m32r/m32r.c:2311 + msgid "bad insn for 'A'" + msgstr "'A' için hatalı komut" + + #: config/m32r/m32r.c:2363 + #, c-format + msgid "invalid operand to %%T/%%B code" + msgstr "%%T/%%B kodu için terim geçersiz" + + #: config/m32r/m32r.c:2386 + #, c-format + msgid "invalid operand to %%N code" + msgstr "%%N kodu için terim geçersiz" + + #: config/m32r/m32r.c:2431 + msgid "pre-increment address is not a register" + msgstr "ön arttırımlı adres bir yazmaç deÄŸil" + + #: config/m32r/m32r.c:2438 + msgid "pre-decrement address is not a register" + msgstr "ön eksiltmeli adres bir yazmaç deÄŸil" + + #: config/m32r/m32r.c:2445 + msgid "post-increment address is not a register" + msgstr "sonradan arttırımlı adres bir yazmaç deÄŸil" + + #: config/m32r/m32r.c:2523 config/m32r/m32r.c:2539 config/rs6000/rs6000.c:11065 + msgid "bad address" + msgstr "hatalı adres" + + #: config/m32r/m32r.c:2544 + msgid "lo_sum not of register" + msgstr "lo_sum yazmacın deÄŸil" + + #. { "relax", TARGET_RELAX_MASK, "" }, { "no-relax", -TARGET_RELAX_MASK, "" }, + #: config/m32r/m32r.h:241 + msgid "Display compile time statistics" + msgstr "Derleme anı istatistikleri gösterilir" + + #: config/m32r/m32r.h:243 + msgid "Align all loops to 32 byte boundary" + msgstr "Tüm döngüler 32 bitlik sınıra hizalanır" + + #: config/m32r/m32r.h:246 + msgid "Only issue one instruction per cycle" + msgstr "Her çevrimde bir iÅŸlem iÅŸler" + + #: config/m32r/m32r.h:249 + msgid "Prefer branches over conditional execution" + msgstr "Dallanmalar koÅŸullu çalıştırmaya tercih edilir" + + #: config/m32r/m32r.h:265 + msgid "Code size: small, medium or large" + msgstr "Kod boyutu: small, medium veya large" + + #: config/m32r/m32r.h:267 + msgid "Small data area: none, sdata, use" + msgstr "Küçük veri alanı: none, sdata, use" + + #: config/m68hc11/m68hc11.c:236 + #, c-format + msgid "-f%s ignored for 68HC11/68HC12 (not supported)" + msgstr "68HC11/68HC12 için -f%s yoksayıldı (desteklenmiyor)" + + #. !!!! SCz wrong here. + #: config/m68hc11/m68hc11.c:3170 config/m68hc11/m68hc11.c:3544 + msgid "move insn not handled" + msgstr "taşıma komutu elde edilmedi" + + #: config/m68hc11/m68hc11.c:3390 config/m68hc11/m68hc11.c:3474 config/m68hc11/m68hc11.c:3747 + msgid "invalid register in the move instruction" + msgstr "move komutundaki yazmaç geçersiz" + + #: config/m68hc11/m68hc11.c:3424 + msgid "invalid operand in the instruction" + msgstr "komuttaki terim geçersiz" + + #: config/m68hc11/m68hc11.c:3721 + msgid "invalid register in the instruction" + msgstr "komuttaki yazmaç geçersiz" + + #: config/m68hc11/m68hc11.c:3754 + msgid "operand 1 must be a hard register" + msgstr "1. terim bir donanım yazmacı olmalı" + + #: config/m68hc11/m68hc11.c:3771 + msgid "invalid rotate insn" + msgstr "geçersiz döngü komutu" + + #: config/m68hc11/m68hc11.c:4196 + msgid "registers IX, IY and Z used in the same INSN" + msgstr "IX, IY ve Z yazmaçları aynı KOMUTta kullanılmış" + + #: config/m68hc11/m68hc11.c:4521 config/m68hc11/m68hc11.c:4823 + msgid "cannot do z-register replacement" + msgstr "z-yazmaç yer deÄŸiÅŸtirmesi yapılamaz" + + #: config/m68hc11/m68hc11.c:4886 + msgid "invalid Z register replacement for insn" + msgstr "komut için Z yazmaç yerdeÄŸiÅŸtirmesi geçersiz" + + #. Macro to define tables used to set the flags. This is a list in braces of + #. pairs in braces, each pair being { "NAME", VALUE } where VALUE is the bits + #. to set or minus the bits to clear. An empty string NAME is used to + #. identify the default VALUE. + #: config/m68hc11/m68hc11.h:155 + msgid "Compile with 16-bit integer mode" + msgstr "16 bitlik tamsayı kiple derleme yapılır" + + #: config/m68hc11/m68hc11.h:157 + msgid "Compile with 32-bit integer mode" + msgstr "32 bitlik tamsayı kiple derleme yapılır" + + #: config/m68hc11/m68hc11.h:159 + msgid "Auto pre/post decrement increment allowed" + msgstr "Otomatik önce/sonra eksiltme arttırmaya izin verilir" + + #: config/m68hc11/m68hc11.h:161 + msgid "Auto pre/post decrement increment not allowed" + msgstr "Otomatik önce/sonra eksiltme arttırmaya izin verilmez" + + #: config/m68hc11/m68hc11.h:163 + msgid "Do not use direct addressing mode for soft registers" + msgstr "Soft yazmaçlar için doÄŸrudan adresleme kipi kullanılmaz" + + #: config/m68hc11/m68hc11.h:165 config/m68hc11/m68hc11.h:169 + msgid "Compile for a 68HC11" + msgstr "68HC11 için derleme yapılır" + + #: config/m68hc11/m68hc11.h:167 config/m68hc11/m68hc11.h:171 + msgid "Compile for a 68HC12" + msgstr "68HC12 için derleme yapılır" + + #. This macro is similar to `TARGET_SWITCHES' but defines names of + #. command options that have values. Its definition is an + #. initializer with a subgrouping for each command option. + #. + #. Each subgrouping contains a string constant, that defines the + #. fixed part of the option name, and the address of a variable. The + #. variable, type `char *', is set to the variable part of the given + #. option if the fixed part matches. The actual option name is made + #. by appending `-m' to the specified name. + #: config/m68hc11/m68hc11.h:185 + msgid "Specify the register allocation order" + msgstr "Yazmaç ayırma sırası belirtilir" + + #: config/m68hc11/m68hc11.h:187 + msgid "Indicate the number of soft registers available" + msgstr "Mevcut olan yazılım bazlı (soft) yazmaçları bildirir" + + #: config/m68k/m68k.c:150 + #, c-format + msgid "-malign-loops=%d is not between 1 and %d" + msgstr "-malign-loops=%d 1 ile %d arasında deÄŸil" + + #: config/m68k/m68k.c:161 + #, c-format + msgid "-malign-jumps=%d is not between 1 and %d" + msgstr "-malign-jumps=%d 1 ile %d arasında deÄŸil" + + #: config/m68k/m68k.c:172 + #, c-format + msgid "-malign-functions=%d is not between 1 and %d" + msgstr "-malign-functions=%d 1 ile %d arasında deÄŸil" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/m68k/m68k.h:162 config/m68k/m68k.h:164 + msgid "Generate code for a 68020" + msgstr "68020 için kod üretilir" + + #: config/m68k/m68k.h:169 config/m68k/m68k.h:172 + msgid "Generate code for a 68000" + msgstr "68000 için kod üretilir" + + #: config/m68k/m68k.h:174 + msgid "Use the bit-field instructions" + msgstr "Bit alanı komutları kullanılır" + + #: config/m68k/m68k.h:176 + msgid "Do not use the bit-field instructions" + msgstr "Bit alanı komutları kullanılmaz" + + #: config/m68k/m68k.h:178 + msgid "Use different calling convention using 'rtd'" + msgstr "'rtd' kullanılan farklı çaÄŸrı uzlaşımı kullanılır" + + #: config/m68k/m68k.h:182 + msgid "Consider type `int' to be 16 bits wide" + msgstr "`int' tür 16 bit geniÅŸlikte varsayılır" + + #: config/m68k/m68k.h:184 + msgid "Consider type `int' to be 32 bits wide" + msgstr "`int' tür 32 bit geniÅŸlikte varsayılır" + + #: config/m68k/m68k.h:186 + msgid "Generate code for a Sun FPA" + msgstr "Sun FPA için kod üretilir" + + #: config/m68k/m68k.h:189 + msgid "Do not generate code for a Sun FPA" + msgstr "Sun FPA için kod üretilmez" + + #: config/m68k/m68k.h:191 config/m68k/m68k.h:193 + msgid "Generate code for a Sun Sky board" + msgstr "Sun Sky kartı için kod üretilir" + + #: config/m68k/m68k.h:195 + msgid "Do not use Sky linkage convention" + msgstr "Sky ilintileme uzlaşımı kullanılmaz" + + #: config/m68k/m68k.h:197 + msgid "Generate code for a 68881" + msgstr "68881 için kod üretilir" + + #: config/m68k/m68k.h:200 + msgid "Generate code with library calls for floating point" + msgstr "Gerçel sayılar için kitaplık çaÄŸrılarıyla kod üretilir" + + #: config/m68k/m68k.h:202 + msgid "Generate code for a 68040, without any new instructions" + msgstr "Hiçbir yeni komut olmaksızın 68040 için kod üretilir" + + #: config/m68k/m68k.h:205 + msgid "Generate code for a 68060, without any new instructions" + msgstr "Hiçbir yeni komut olmaksızın 68060 için kod üretilir" + + #: config/m68k/m68k.h:209 + msgid "Generate code for a 68030" + msgstr "68030 için kod üretilir" + + #: config/m68k/m68k.h:212 + msgid "Generate code for a 68040" + msgstr "68040 için kod üretilir" + + #: config/m68k/m68k.h:216 + msgid "Generate code for a 68060" + msgstr "68060 için kod üretilir" + + #: config/m68k/m68k.h:221 + msgid "Generate code for a 520X" + msgstr "520X için kod üretilir" + + #: config/m68k/m68k.h:224 + msgid "Generate code for a 68851" + msgstr "68851 için kod üretilir" + + #: config/m68k/m68k.h:226 + msgid "Do no generate code for a 68851" + msgstr "68851 için kod üretilmez" + + #: config/m68k/m68k.h:229 + msgid "Generate code for a 68302" + msgstr "68302 için kod üretilir" + + #: config/m68k/m68k.h:232 + msgid "Generate code for a 68332" + msgstr "68332 için kod üretilir" + + #: config/m68k/m68k.h:236 + msgid "Generate code for a cpu32" + msgstr "Bir cpu32 için kod üretilir" + + #: config/m68k/m68k.h:239 + msgid "Align variables on a 32-bit boundary" + msgstr "DeÄŸiÅŸkenler 32 bitlik sınıra hizalanır" + + #: config/m68k/m68k.h:241 + msgid "Align variables on a 16-bit boundary" + msgstr "DeÄŸiÅŸkenler 16 bitlik sınıra hizalanır" + + #: config/m68k/m68k.h:243 + msgid "Generate pc-relative code" + msgstr "PC'ye göre kod üretilir" + + #: config/m68k/m68k.h:245 + msgid "Do not use unaligned memory references" + msgstr "Hizalamasız bellek referansları kullanılmaz" + + #: config/m68k/m68k.h:247 + msgid "Use unaligned memory references" + msgstr "Hizalanmamış bellek baÅŸvuruları kullanılır" + + #. Sometimes certain combinations of command options do not make + #. sense on a particular target machine. You can define a macro + #. `OVERRIDE_OPTIONS' to take account of this. This macro, if + #. defined, is executed once just after all the command options have + #. been parsed. + #. + #. Don't use this macro to turn on various extra optimizations for + #. `-O'. That is what `OPTIMIZATION_OPTIONS' is for. + #: config/m68k/m68k.h:284 config/m68k/m68kelf.h:267 config/m68k/m68kv4.h:299 + msgid "-fPIC is not currently supported on the 68000 or 68010\n" + msgstr "-fPIC ÅŸu an 68000 veya 68010 için desteklenmiyor\n" + + #: config/m88k/m88k.c:900 + #, c-format + msgid "internal gcc monitor: short-branch(%x)" + msgstr "gcc iç monitörü: short-branch(%x)" + + #: config/m88k/m88k.c:2300 + msgid "internal gcc error: Can't express symbolic location" + msgstr "gcc iç hatası: Sembolik konum ifade edilemiyor" + + #: config/m88k/m88k.c:2582 + #, c-format + msgid "argument #%d is a structure" + msgstr "%d. argüman bir yapı" + + #: config/m88k/m88k.c:2882 + #, c-format + msgid "%%R not followed by %%B/C/D/E" + msgstr "%%R den sonra %%B/C/D/E gelmiyor" + + #: config/m88k/m88k.c:2950 + #, c-format + msgid "invalid %%x/X value" + msgstr "%%x/X deÄŸeri geçersiz" + + #: config/m88k/m88k.c:2973 config/rs6000/rs6000.c:6509 + #, c-format + msgid "invalid %%q value" + msgstr "%%q deÄŸeri geçersiz" + + #: config/m88k/m88k.c:2979 + #, c-format + msgid "invalid %%o value" + msgstr "%%o deÄŸeri geçersiz" + + #: config/m88k/m88k.c:2986 config/rs6000/rs6000.c:6472 + #, c-format + msgid "invalid %%p value" + msgstr "%%p deÄŸeri geçersiz" + + #: config/m88k/m88k.c:2999 config/m88k/m88k.c:3004 + #, c-format + msgid "invalid %%s/S value" + msgstr "%%s/S deÄŸeri geçersiz" + + #: config/m88k/m88k.c:3015 + #, c-format + msgid "invalid %%P operand" + msgstr "%%P terimi geçersiz" + + #: config/m88k/m88k.c:3046 config/romp/romp.c:682 + #, c-format + msgid "invalid %%B value" + msgstr "%%B deÄŸeri geçersiz" + + #: config/m88k/m88k.c:3076 + #, c-format + msgid "invalid %%D value" + msgstr "%%D deÄŸeri geçersiz" + + #: config/m88k/m88k.c:3089 + #, c-format + msgid "`%%d' operand isn't a register" + msgstr "`%%d' terimi bir yazmaç deÄŸil" + + #: config/m88k/m88k.c:3107 + msgid "operand is r0" + msgstr "veri öğesi: r0" + + #: config/m88k/m88k.c:3121 + msgid "operand is const_double" + msgstr "veri öğesi: const_double" + + #: config/m88k/m88k.c:3140 + msgid "invalid code" + msgstr "geçersiz kod" + + #. Do any checking or such that is needed after processing the -m switches. + #: config/m88k/m88k.h:277 + msgid "-mtrap-large-shift and -mhandle-large-shift are incompatible" + msgstr "-mtrap-large-shift ve -mhandle-large-shift uyumsuz" + + #: config/m88k/m88k.h:299 + #, c-format + msgid "invalid option `-mshort-data-%s'" + msgstr "`-mshort-data-%s' seçeneÄŸi geçersiz" + + #: config/m88k/m88k.h:304 + #, c-format + msgid "-mshort-data-%s is too large " + msgstr "-mshort-data-%s çok büyük" + + #: config/m88k/m88k.h:306 + #, c-format + msgid "-mshort-data-%s and PIC are incompatible" + msgstr "-mshort-data-%s ve PIC uyumsuz" + + #: config/mcore/mcore.c:3083 + #, c-format + msgid "invalid option `-mstack-increment=%s'" + msgstr "`-mstack-increment=%s' seçeneÄŸi geçersiz" + + #: config/mcore/mcore.h:126 + msgid "Inline constants if it can be done in 2 insns or less" + msgstr "2 komut ya da daha azı ile yapılabiliyorsa, sabitleri özümler" + + #: config/mcore/mcore.h:128 + msgid "Inline constants if it only takes 1 instruction" + msgstr "1 komut ile yapılabiliyorsa sabitleri özümler" + + #: config/mcore/mcore.h:130 + msgid "Set maximum alignment to 4" + msgstr "En büyük hizalama 4 e ayarlanır" + + #: config/mcore/mcore.h:132 + msgid "Set maximum alignment to 8" + msgstr "En büyük hizalama 8 e ayarlanır" + + #: config/mcore/mcore.h:136 + msgid "Do not use the divide instruction" + msgstr "Bölme komutu kullanılmaz" + + #: config/mcore/mcore.h:140 + msgid "Do not arbitary sized immediates in bit operations" + msgstr "Bit iÅŸlemlerinde herhangi bir boyda anlık deÄŸerler kullanmaz" + + #: config/mcore/mcore.h:142 + msgid "Always treat bit-field as int-sized" + msgstr "Bit alanı daima int boyutlu iÅŸlenir" + + #: config/mcore/mcore.h:146 + msgid "Force functions to be aligned to a 4 byte boundary" + msgstr "İşlevlerin 4 baytlık sınıra hizalanması zorlanır" + + #: config/mcore/mcore.h:148 + msgid "Force functions to be aligned to a 2 byte boundary" + msgstr "İşlevlerin 2 baytlık sınıra hizalanması zorlanır" + + #: config/mcore/mcore.h:150 + msgid "Emit call graph information" + msgstr "ÇaÄŸrı grafiÄŸi bilgisi üretir" + + #: config/mcore/mcore.h:154 + msgid "Prefer word accesses over byte accesses" + msgstr "Word eriÅŸimlerini bayt eriÅŸimlerine tercih eder" + + #: config/mcore/mcore.h:165 + msgid "Generate code for the M*Core M340" + msgstr "Kod M*Core M340 için üretilir" + + #: config/mcore/mcore.h:178 + msgid "Maximum amount for a single stack increment operation" + msgstr "Tek yığıt artış iÅŸleminde kullanılacak maksimum miktar" + + #: config/mips/mips.c:4815 + msgid "The -march option is incompatible to -mipsN and therefore ignored." + msgstr " -march seçeneÄŸi -mipsN ile uyumsuz olduÄŸundan yoksayıldı." + + #: config/mips/mips.c:4841 + #, c-format + msgid "-mips%d not supported" + msgstr "-mips%d desteklenmiyor" + + #: config/mips/mips.c:4848 + #, c-format + msgid "bad value (%s) for -mips switch" + msgstr "-mips seçeneÄŸinin deÄŸeri (%s) hatalı" + + #: config/mips/mips.c:4869 + #, c-format + msgid "bad value (%s) for -mabi= switch" + msgstr "-mabi= seçeneÄŸinin deÄŸeri (%s) hatalı" + + #: config/mips/mips.c:4907 + #, c-format + msgid "-mabi=%s does not support -mips%d" + msgstr "-mabi=%s ile -mips%d uyumsuz" + + #: config/mips/mips.c:4924 + msgid "this target does not support the -mabi switch" + msgstr "bu hedef -mabi seçeneÄŸini desteklemez." + + #: config/mips/mips.c:5034 + #, c-format + msgid "bad value (%s) for -mtune= switch" + msgstr "-mtune= seçeneÄŸinin deÄŸeri (%s) hatalı" + + #: config/mips/mips.c:5044 + #, c-format + msgid "-mips%d does not support 64 bit fp registers" + msgstr "-mips%d 64 bit fp yazmaçlarını desteklemez" + + #: config/mips/mips.c:5050 + #, c-format + msgid "-mips%d does not support 64 bit gp registers" + msgstr "-mips%d 64 bit gp yazmaçlarını desteklemez" + + #: config/mips/mips.c:5071 + msgid "-G is incompatible with PIC code which is the default" + msgstr "-G öntanımlı olan PIC kodu ile uyumsuz" + + #: config/mips/mips.c:5087 + msgid "-membedded-pic and -mabicalls are incompatible" + msgstr "-membedded-pic ile -mabicalls uyumsuz" + + #: config/mips/mips.c:5090 + msgid "-G and -membedded-pic are incompatible" + msgstr "-G ile -membedded-pic uyumsuz" + + #: config/mips/mips.c:5141 + #, c-format + msgid "invalid option `entry%s'" + msgstr "`entry%s' seçeneÄŸi geçersiz" + + #: config/mips/mips.c:5144 + msgid "-mentry is only meaningful with -mips-16" + msgstr "-mentry sadece -mips-16 ile anlamlıdır" + + #: config/mips/mips.c:5484 + #, c-format + msgid "internal error: %%) found without a %%( in assembler pattern" + msgstr "iç hata: üretici maskı içinde %%) için bir %%( bulunamadı" + + #: config/mips/mips.c:5498 + #, c-format + msgid "internal error: %%] found without a %%[ in assembler pattern" + msgstr "iç hata: üretici maskı içinde %%] için bir %%[ bulunamadı" + + #: config/mips/mips.c:5511 + #, c-format + msgid "internal error: %%> found without a %%< in assembler pattern" + msgstr "iç hata: üretici maskı içinde %%> için bir %%< bulunamadı" + + #: config/mips/mips.c:5524 + #, c-format + msgid "internal error: %%} found without a %%{ in assembler pattern" + msgstr "iç hata: üretici maskı içinde %%} için bir %%{ bulunamadı" + + #: config/mips/mips.c:5538 + #, c-format + msgid "PRINT_OPERAND: unknown punctuation '%c'" + msgstr "PRINT_OPERAND: '%c' noktalaması bilinmiyor" + + #: config/mips/mips.c:5547 config/xtensa/xtensa.c:1913 + msgid "PRINT_OPERAND null pointer" + msgstr "PRINT_OPERAND hiçlik göstergesi" + + #: config/mips/mips.c:5680 + #, c-format + msgid "invalid use of %%d, %%x, or %%X" + msgstr "%%d, %%x, ya da %%X kullanımı geçersiz" + + #: config/mips/mips.c:5723 config/xtensa/xtensa.c:2012 + msgid "PRINT_OPERAND_ADDRESS, null pointer" + msgstr "PRINT_OPERAND_ADDRESS, hiçlik göstergesi" + + #: config/mips/mips.c:5947 + msgid "MIPS ECOFF format does not allow changing filenames within functions with #line" + msgstr "MIPS ECOFF biçemi dosya isimlerinin #line'lı iÅŸlevlerde deÄŸiÅŸtirilmesine izin vermez" + + #: config/mips/mips.c:6261 + msgid "can't rewind temp file" + msgstr "geçici dosya açılamıyor" + + #: config/mips/mips.c:6265 + msgid "can't write to output file" + msgstr "çıktı dosyasına yazılamıyor" + + #: config/mips/mips.c:6268 + msgid "can't read from temp file" + msgstr "geçici dosya okunamıyor" + + #: config/mips/mips.c:6271 + msgid "can't close temp file" + msgstr "geçici dosya kapatılamıyor" + + #: config/mips/mips.c:6704 + #, c-format + msgid "gp_offset (%ld) or end_offset (%ld) is less than zero" + msgstr "gp_offset (%ld) veya end_offset (%ld) sıfırdan küçük." + + #: config/mips/mips.c:6866 + #, c-format + msgid "fp_offset (%ld) or end_offset (%ld) is less than zero" + msgstr "fp_offset (%ld) veya end_offset (%ld) sıfırdan küçük." + + #: config/mips/mips.c:8927 + #, c-format + msgid "can not handle inconsistent calls to `%s'" + msgstr "çeliÅŸkili `%s' çaÄŸrıları elde edilemez" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/mips/mips.h:368 config/mn10300/mn10300.h:64 + msgid "No default crt0.o" + msgstr "Öntanımlı crt0.o yok" + + #: config/mips/mips.h:370 + msgid "Use 64-bit int type" + msgstr "64-bit int tür kullanılır" + + #: config/mips/mips.h:372 + msgid "Use 64-bit long type" + msgstr "64-bit long tür kullanılır" + + #: config/mips/mips.h:374 + msgid "Use 32-bit long type" + msgstr "32-bit long tür kullanılır" + + #: config/mips/mips.h:376 + msgid "Optimize lui/addiu address loads" + msgstr "lui/addiu adres yüklemeleri eniyilenir" + + #: config/mips/mips.h:378 + msgid "Don't optimize lui/addiu address loads" + msgstr "lui/addiu adres yüklemeleri eniyilenmez" + + #: config/mips/mips.h:380 + msgid "Use MIPS as" + msgstr "MIPS as kullanılır" + + #: config/mips/mips.h:382 + msgid "Use GNU as" + msgstr "GNU as kullanılır" + + #: config/mips/mips.h:384 + msgid "Use symbolic register names" + msgstr "Sembolik yazmaç isimleri kullanılır" + + #: config/mips/mips.h:386 + msgid "Don't use symbolic register names" + msgstr "Sembolik yazmaç isimleri kullanılmaz" + + #: config/mips/mips.h:388 config/mips/mips.h:390 + msgid "Use GP relative sdata/sbss sections" + msgstr "GP göreli sdata/sbss bölümleri kullanılır" + + #: config/mips/mips.h:392 config/mips/mips.h:394 + msgid "Don't use GP relative sdata/sbss sections" + msgstr "GP göreli sdata/sbss bölümleri kullanılmaz" + + #: config/mips/mips.h:396 + msgid "Output compiler statistics" + msgstr "Derleyici istatistikleri çıktılanır" + + #: config/mips/mips.h:398 + msgid "Don't output compiler statistics" + msgstr "Derleyici istatistikleri çıktılanmaz" + + #: config/mips/mips.h:400 + msgid "Don't optimize block moves" + msgstr "Blok taşıma eniyilemesi yapılmaz" + + #: config/mips/mips.h:402 + msgid "Optimize block moves" + msgstr "Blok taşımalar eniyilenir" + + #: config/mips/mips.h:404 + msgid "Use mips-tfile asm postpass" + msgstr "mips-tfile asm postpass kullanır" + + #: config/mips/mips.h:406 + msgid "Don't use mips-tfile asm postpass" + msgstr "mips-tfile asm postpass kullanmaz" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of triplets in braces, + #. each triplet being { "NAME", VALUE, DOC } + #. where VALUE is the bits to set or minus the bits to clear and DOC + #. is the documentation for --help (NULL if intentionally undocumented). + #. An empty string NAME is used to identify the default VALUE. + #: config/mips/mips.h:410 config/pdp11/pdp11.h:55 + msgid "Use hardware floating point" + msgstr "Donanım kayan nokta aritmetiÄŸi kullanılır" + + #: config/mips/mips.h:412 + msgid "Use 64-bit FP registers" + msgstr "64 bitlik FP yazmaçları kullanılır" + + #: config/mips/mips.h:414 + msgid "Use 32-bit FP registers" + msgstr "32 bitlik FP yazmaçları kullanılır" + + #: config/mips/mips.h:416 + msgid "Use 64-bit general registers" + msgstr "64 bitlik genel yazmaçlar kullanılır" + + #: config/mips/mips.h:418 + msgid "Use 32-bit general registers" + msgstr "32 bitlik genel yazmaçlar kullanılır" + + #: config/mips/mips.h:420 + msgid "Use Irix PIC" + msgstr "Irix PIC kullanılır" + + #: config/mips/mips.h:422 + msgid "Don't use Irix PIC" + msgstr "Irix PIC kullanılmaz" + + #: config/mips/mips.h:424 + msgid "Use OSF PIC" + msgstr "OSF PIC kullanılır" + + #: config/mips/mips.h:426 + msgid "Don't use OSF PIC" + msgstr "OSF PIC kullanılmaz" + + #: config/mips/mips.h:428 + msgid "Use indirect calls" + msgstr "Dolaylı çaÄŸrılar kullanılır" + + #: config/mips/mips.h:430 + msgid "Don't use indirect calls" + msgstr "Dolaylı çaÄŸrılar kullanılmaz" + + #: config/mips/mips.h:432 + msgid "Use embedded PIC" + msgstr "Gömülü PIC kullanılır" + + #: config/mips/mips.h:434 + msgid "Don't use embedded PIC" + msgstr "Gömülü PIC kullanılmaz" + + #: config/mips/mips.h:436 + msgid "Use ROM instead of RAM" + msgstr "RAM yerine ROM kullanılır" + + #: config/mips/mips.h:438 + msgid "Don't use ROM instead of RAM" + msgstr "RAM yerine ROM kullanılmaz" + + #: config/mips/mips.h:440 + msgid "Put uninitialized constants in ROM (needs -membedded-data)" + msgstr "İlklenmemiÅŸ sabitleri ROM'a koyar (-membedded-data gerektirir)" + + #: config/mips/mips.h:442 + msgid "Don't put uninitialized constants in ROM" + msgstr "İlklenmemiÅŸ sabitleri ROM'a koymaz" + + #. Macro to define tables used to set the flags. + #: config/mips/mips.h:444 config/xtensa/xtensa.h:110 + msgid "Use big-endian byte order" + msgstr "Büyük ilkli bayt sıralaması kullanılır" + + #: config/mips/mips.h:446 config/xtensa/xtensa.h:112 + msgid "Use little-endian byte order" + msgstr "Küçük ilkli bayt sıralaması kullanılır" + + #: config/mips/mips.h:448 + msgid "Use single (32-bit) FP only" + msgstr "Sadece tek (32 bit) FP kullanır" + + #: config/mips/mips.h:450 + msgid "Don't use single (32-bit) FP only" + msgstr "Sadece tek (32 bit) FP kullanmaz" + + #: config/mips/mips.h:452 + msgid "Use multiply accumulate" + msgstr "Çarpma biriktirmesi kullanır" + + #: config/mips/mips.h:454 + msgid "Don't use multiply accumulate" + msgstr "Çarpma biriktirmesi kullanmaz" + + #: config/mips/mips.h:456 config/rs6000/rs6000.h:351 + msgid "Don't generate fused multiply/add instructions" + msgstr "BirleÅŸik çarpma/toplama komutları üretilmez" + + #: config/mips/mips.h:458 config/rs6000/rs6000.h:349 + msgid "Generate fused multiply/add instructions" + msgstr "BirleÅŸik çarpma/toplama komutları üretilir" + + #: config/mips/mips.h:460 + msgid "Work around early 4300 hardware bug" + msgstr "İlk üretim 4300 donanım hatasının olurunu bulur" + + #: config/mips/mips.h:462 + msgid "Don't work around early 4300 hardware bug" + msgstr "İlk üretim 4300 donanım hatasının olurunu bulmaz" + + #: config/mips/mips.h:464 + msgid "Optimize for 3900" + msgstr "3900 için eniyileme yapılır" + + #: config/mips/mips.h:466 + msgid "Optimize for 4650" + msgstr "4650 için eniyileme yapılır" + + #: config/mips/mips.h:468 + msgid "Trap on integer divide by zero" + msgstr "Sıfırla tamsayı bölme taÅŸması yakalanır" + + #: config/mips/mips.h:470 + msgid "Don't trap on integer divide by zero" + msgstr "Sıfırla tamsayı bölme taÅŸması yakalanmaz" + + #: config/mips/mips.h:472 + msgid "Trap on integer divide overflow" + msgstr "Tamsayı bölme taÅŸması yakalanır" + + #: config/mips/mips.h:474 + msgid "Don't trap on integer divide overflow" + msgstr "Tamsayı bölme taÅŸması yakalanmaz" + + #: config/mips/mips.h:590 config/mips/mips.h:592 + msgid "Specify CPU for scheduling purposes" + msgstr "Zamanlama kullanımı için CPU belirtilir" + + #: config/mips/mips.h:594 + msgid "Specify CPU for code generation purposes" + msgstr "Kod üretim amacıyla MİB belirtilir" + + #: config/mips/mips.h:596 + msgid "Specify a Standard MIPS ISA" + msgstr "Bir Standard MIPS ISA belirtilir" + + #: config/mips/mips.h:598 + msgid "Use mips16 entry/exit psuedo ops" + msgstr "mips16 giriÅŸ/çıkış sanal op'larını kullanır" + + #: config/mips/mips.h:600 + msgid "Don't use MIPS16 instructions" + msgstr "MIPS16 komutları kullanılmaz" + + #: config/mips/mips.h:604 + msgid "Don't call any cache flush functions" + msgstr "Hiçbir arabellek boÅŸaltma iÅŸlevi çaÄŸrılmaz" + + #: config/mips/mips.h:606 + msgid "Specify cache flush function" + msgstr "Arabellek boÅŸaltma iÅŸlevi belirtilir" + + #. Output assembler code to FILE to increment profiler label # LABELNO + #. for profiling a function entry. + #: config/mips/mips.h:2873 + msgid "mips16 function profiling" + msgstr "mips16 iÅŸlev ayrımlama" + + #: config/mmix/mmix.c:138 + #, c-format + msgid "-f%s not supported: ignored" + msgstr "-f%s desteklenmiyor: yoksayıldı" + + #: config/mmix/mmix.c:596 + #, c-format + msgid "too large function value type, needs %d registers, have only %d registers for this" + msgstr "iÅŸlev deÄŸer türü çok büyük, bunun için %d yazmaç gerekirken sadece %d yazmaç var" + + #: config/mmix/mmix.c:677 + msgid "stack frame too big" + msgstr "yığın baÄŸlamı çok büyük" + + #: config/mmix/mmix.c:705 + #, c-format + msgid "stack frame not a multiple of 8 bytes: %d" + msgstr "yığın baÄŸlamı 8 baytın katları deÄŸil: %d" + + #: config/mmix/mmix.c:1044 + #, c-format + msgid "stack frame not a multiple of octabyte: %d" + msgstr "yığın baÄŸlamı 8 baytın katları deÄŸil: %d" + + #: config/mmix/mmix.c:1203 + msgid "function_profiler support for MMIX" + msgstr "MMIX için function_profiler desteÄŸi" + + #: config/mmix/mmix.c:1240 + msgid "neither varargs or stdarg in mmix_setup_incoming_varargs" + msgstr "mmix_setup_incoming_varargs içinde ne varargs ne de stdarg var" + + #: config/mmix/mmix.c:1246 + msgid "MMIX Internal: Last named vararg would not fit in a register" + msgstr "MMIX Dahili: Son isimli argüman bir yazmaça sığamamalı" + + #. FIXME: Remove when I know this trigs. + #: config/mmix/mmix.c:1608 + msgid "oops, not debugged; fixing up value:" + msgstr "oof, hata ayıklamasız; deÄŸer düzeltiliyor:" + + #: config/mmix/mmix.c:2184 config/mmix/mmix.c:2318 + msgid "MMIX Internal: Expected a CONST_INT, not this" + msgstr "MMIX Dahili: Bu deÄŸil, bir CONST_INT bekleniyor" + + #: config/mmix/mmix.c:2192 config/mmix/mmix.c:2216 config/mmix/mmix.c:2335 + #, c-format + msgid "MMIX Internal: Bad register: %d" + msgstr "MMIX Dahili: Hatalı yazmaç: %d" + + #: config/mmix/mmix.c:2263 + msgid "MMIX Internal: Bad value for 'm', not a CONST_INT" + msgstr "MMIX Dahili: 'm' için bu bir CONST_INT deÄŸil, hatalı deÄŸer" + + #: config/mmix/mmix.c:2286 + msgid "MMIX Internal: Expected a register, not this" + msgstr "MMIX Dahili: Bu deÄŸil, bir yazmaç bekleniyor" + + #: config/mmix/mmix.c:2296 + msgid "MMIX Internal: Expected a constant, not this" + msgstr "MMIX Dahili: Bu deÄŸil, bir sabit bekleniyor" + + #. Presumably there's a missing case above if we get here. + #: config/mmix/mmix.c:2328 + #, c-format + msgid "MMIX Internal: Missing `%c' case in mmix_print_operand" + msgstr "MMIX Dahili: mmix_print_operand içideki `%c' case eksik" + + #. We need the original here. + #: config/mmix/mmix.c:2379 + msgid "MMIX Internal: Cannot decode this operand" + msgstr "MMIX Dahili: Bu terim iÅŸlenemez" + + #: config/mmix/mmix.c:2444 + msgid "MMIX Internal: This is not a recognized address" + msgstr "MMIX Dahili: Bu bilinen bir adres deÄŸil" + + #: config/mmix/mmix.c:2940 config/mmix/mmix.c:3009 + #, c-format + msgid "MMIX Internal: %s is not a shiftable int" + msgstr "MMIX Dahili: %s bir bit kaydırma yapılabilir tamsayı deÄŸil" + + #: config/mmix/mmix.c:3128 + msgid "MMIX Internal: Trying to output invalidly reversed condition:" + msgstr "MMIX Dahili: Geçersiz olarak ters çevrien koÅŸul çıktılanmaya çalışılıyor:" + + #: config/mmix/mmix.c:3135 + msgid "MMIX Internal: What's the CC of this?" + msgstr "MMIX Dahili: Bunun CC'si nedir?" + + #: config/mmix/mmix.c:3139 + msgid "MMIX Internal: What is the CC of this?" + msgstr "MMIX Dahili: Bunun CC'si nedir?" + + #: config/mmix/mmix.c:3210 + msgid "MMIX Internal: This is not a constant:" + msgstr "MMIX Dahili: Bu bir sabit deÄŸil:" + + #. For these target macros, there is no generic documentation here. You + #. should read `Using and Porting GCC' for that. Only comments specific + #. to the MMIX target are here. + #. + #. There are however references to the specific texinfo node (comments + #. with "Node:"), so there should be little or nothing amiss. Probably + #. the opposite, since we don't have to care about old littering and + #. soon outdated generic comments. + #. Node: Driver + #. When both ABI:s work, this is how we tell them apart in code. The + #. GNU abi is implied the default. Also implied in TARGET_DEFAULT. + #. User symbols are in the same name-space as built-in symbols, but we + #. don't need the built-in symbols, so remove those and instead apply + #. stricter operand checking. Don't warn when expanding insns. + #. Pass on -mset-program-start=N and -mset-data-start=M to the linker. + #. Provide default program start 0x100 unless -mno-set-program-start. + #. Don't do this if linking relocatably, with -r. For a final link, + #. produce mmo, unless ELF is requested or when linking relocatably. + #. Put unused option values here. + #: config/mmix/mmix.h:137 + msgid "Set start-address of the program" + msgstr "Programın baÅŸlangıç adresi belirtilir" + + #: config/mmix/mmix.h:139 + msgid "Set start-address of data" + msgstr "Verinin baÅŸlangıç adresi belirlenir" + + #. FIXME: Provide a way to *load* the epsilon register. + #: config/mmix/mmix.h:188 + msgid "For intrinsics library: pass all parameters in registers" + msgstr "YerleÅŸikler kitaplığı için: yazmaçlardaki tüm parametreler aktarılır" + + #: config/mmix/mmix.h:191 + msgid "Use register stack for parameters and return value" + msgstr "Parametreler ve dönen deÄŸer için yazmaç yığını kullanılır" + + #: config/mmix/mmix.h:193 + msgid "Use call-clobbered registers for parameters and return value" + msgstr "Parametreler ve dönen deÄŸer için çaÄŸrı taşırmalı yazmaçlar kullanılır" + + #: config/mmix/mmix.h:195 + msgid "Use epsilon-respecting floating point compare instructions" + msgstr "Epsilona iliÅŸkin kayan nokta karşılaÅŸtırma komutları kullanılır" + + #: config/mmix/mmix.h:198 + msgid "Use zero-extending memory loads, not sign-extending ones" + msgstr "UzunluÄŸu deÄŸiÅŸmeyen bellek yükleri kullanılır" + + #: config/mmix/mmix.h:201 + msgid "Generate divide results with reminder having the same sign as the divisor (not the dividend)" + msgstr "Bölen (bölünen deÄŸil) ile aynı iÅŸarete sahip kalanlı bölme sonuçları üretilir" + + #: config/mmix/mmix.h:205 + msgid "Prepend global symbols with \":\" (for use with PREFIX)" + msgstr "Genel semboller \":\" ile öne eklenir (ÖNEK ile kullanmak için)" + + #: config/mmix/mmix.h:207 + msgid "Do not provide a default start-address 0x100 of the program" + msgstr "Programa bir öntanımlı baÅŸlatma adresi 0x100 saÄŸlanmaz" + + #: config/mmix/mmix.h:209 + msgid "Link to emit program in ELF format (rather than mmo)" + msgstr "ELF biçemli program üretimine ilintiler (mmo dan baÅŸka)" + + #: config/mmix/mmix.h:211 + msgid "Use P-mnemonics for branches statically predicted as taken" + msgstr "Statik olarak alınmış olduÄŸu önceden tahmin edilen dallanmalar için P-mnemonikleri kullanılır" + + #: config/mmix/mmix.h:213 + msgid "Don't use P-mnemonics for branches" + msgstr "Dallar için P-mnemonikleri kullanılmaz" + + #: config/mmix/mmix.h:215 + msgid "Use addresses that allocate global registers" + msgstr "Genel yazmaçları tahsis eden adresler kullanılır" + + #: config/mmix/mmix.h:217 + msgid "Do not use addresses that allocate global registers" + msgstr "Genel yazmaçları tahsis eden adresler kullanılmaz" + + #: config/mn10300/mn10300.h:59 + msgid "Work around hardware multiply bug" + msgstr "Donanım çarpma hatasının olurunu bulur" + + #: config/mn10300/mn10300.h:60 + msgid "Do not work around hardware multiply bug" + msgstr "Donanım çarpma hatasının olurunu bulmaz" + + #: config/mn10300/mn10300.h:61 + msgid "Target the AM33 processor" + msgstr "AM33 iÅŸlemci hedeflenir" + + #: config/mn10300/mn10300.h:65 + msgid "Enable linker relaxations" + msgstr "İlintileyici esnekleÅŸtiriciler etkinleÅŸtirilir" + + #: config/ns32k/ns32k.h:104 config/s390/s390.h:57 + msgid "Don't use hardware fp" + msgstr "Donanım kayan nokta aritmetiÄŸi kullanılmaz" + + #: config/ns32k/ns32k.h:105 + msgid "Alternative calling convention" + msgstr "Alternatif çaÄŸrı uzlaşımı" + + #: config/ns32k/ns32k.h:107 + msgid "Pass some arguments in registers" + msgstr "Yazmaçlardaki bazı argümanlar aktarılır" + + #: config/ns32k/ns32k.h:108 + msgid "Pass all arguments on stack" + msgstr "Yığındaki tüm argümanlar aktarılır" + + #: config/ns32k/ns32k.h:109 + msgid "Optimize for 32532 cpu" + msgstr "32532 cpu için eniyileme yapılır" + + #: config/ns32k/ns32k.h:110 + msgid "Optimize for 32332 cpu" + msgstr "32332 cpu için eniyileme yapılır" + + #: config/ns32k/ns32k.h:112 + msgid "Optimize for 32032" + msgstr "32032 için eniyileme yapılır" + + #: config/ns32k/ns32k.h:114 + msgid "Register sb is zero. Use for absolute addressing" + msgstr "sb yazmacı sıfırdır. Mutlak adresleme için kullanın." + + #: config/ns32k/ns32k.h:115 + msgid "Do not use register sb" + msgstr "sb yazmacı kullanılmaz" + + #: config/ns32k/ns32k.h:116 + msgid "Do not use bit-field instructions" + msgstr "Bit alanı komutları kullanılmaz" + + #: config/ns32k/ns32k.h:117 + msgid "Use bit-field instructions" + msgstr "Bit alanı komutları kullanılır" + + #: config/ns32k/ns32k.h:118 + msgid "Generate code for high memory" + msgstr "Kod yukarı bellek bölgesi için üretilir" + + #: config/ns32k/ns32k.h:119 + msgid "Generate code for low memory" + msgstr "Kod alt bellek bölgesi için üretilir" + + #: config/ns32k/ns32k.h:120 + msgid "32381 fpu" + msgstr "32381 fpu" + + #: config/ns32k/ns32k.h:121 + msgid "Use multiply-accumulate fp instructions" + msgstr "Çarpma-biriktirme fp komutları kullanır" + + #: config/ns32k/ns32k.h:123 + msgid "Do not use multiply-accumulate fp instructions" + msgstr "Çarpma-biriktirme fp komutları kullanmaz" + + #: config/ns32k/ns32k.h:124 + msgid "\"Small register classes\" kludge" + msgstr "\"Küçük yazmaç sınıfları\" uydurması" + + #: config/ns32k/ns32k.h:125 + msgid "No \"Small register classes\" kludge" + msgstr "\"Küçük yazmaç sınıfları\" uydurması yok" + + #: config/pa/pa.c:200 + #, c-format + msgid "" + "unknown -mschedule= option (%s).\n" + "Valid options are 700, 7100, 7100LC, 7200, and 8000\n" + msgstr "" + "bilinmeyen -mschedule= seçeneÄŸi (%s).\n" + "Geçerli seçenekler: 700, 7100, 7100LC, 7200, ve 8000\n" + + #: config/pa/pa.c:225 + #, c-format + msgid "" + "unknown -march= option (%s).\n" + "Valid options are 1.0, 1.1, and 2.0\n" + msgstr "" + "bilinmeyen -march= seçeneÄŸi (%s).\n" + "Geçerli seçenekler: 1.0, 1.1, ve 2.0\n" + + #: config/pa/pa.c:230 + msgid "PIC code generation is not supported in the portable runtime model\n" + msgstr "PIC kod üretimi uyarlanabilir çalışma anı modeli ile uyumlu deÄŸildir\n" + + #: config/pa/pa.c:235 + msgid "PIC code generation is not compatible with fast indirect calls\n" + msgstr "PIC kod üretimi hızlı dolaylı çaÄŸrılar ile uyumlu deÄŸildir\n" + + #: config/pa/pa.c:240 + msgid "-g is only supported when using GAS on this processor," + msgstr "-g sadece bu iÅŸlemci üzerinde GAS kullanıldığında desteklenir," + + #: config/pa/pa.c:241 + msgid "-g option disabled" + msgstr "-g seçeneÄŸi iptal edildi" + + #: config/pdp11/pdp11.h:56 + msgid "Do not use hardware floating point" + msgstr "Donanım kayan nokta aritmetiÄŸi kullanılmaz" + + #. return float result in ac0 + #: config/pdp11/pdp11.h:58 + msgid "Return floating point results in ac0" + msgstr "ac0'daki kayan noktalı sonuçlar döner" + + #: config/pdp11/pdp11.h:59 + msgid "Return floating point results in memory" + msgstr "Bellekteki kayan noktalı sonuçlar döner" + + #. is 11/40 + #: config/pdp11/pdp11.h:61 + msgid "Generate code for an 11/40" + msgstr "Kod bir 11/40 için üretilir" + + #. is 11/45 + #: config/pdp11/pdp11.h:64 + msgid "Generate code for an 11/45" + msgstr "Kod bir 11/45 için üretilir" + + #. is 11/10 + #: config/pdp11/pdp11.h:67 + msgid "Generate code for an 11/10" + msgstr "Kod bir 11/10 için üretilir" + + #. use movstrhi for bcopy + #. use 32 bit for int + #: config/pdp11/pdp11.h:72 config/pdp11/pdp11.h:73 + msgid "Use 32 bit int" + msgstr "32 bitlik tamsayı kullanılır" + + #: config/pdp11/pdp11.h:74 config/pdp11/pdp11.h:75 + msgid "Use 16 bit int" + msgstr "16 bitlik tamsayı kullanılır" + + #. use 32 bit for float + #: config/pdp11/pdp11.h:77 config/pdp11/pdp11.h:78 + msgid "Use 32 bit float" + msgstr "32 bitlik float kullanılır" + + #: config/pdp11/pdp11.h:79 config/pdp11/pdp11.h:80 + msgid "Use 64 bit float" + msgstr "64 bitlik float kullanılır" + + #. allow abshi pattern? - can trigger "optimizations" which make code SLOW! + #. is branching expensive - on a PDP, it's actually really cheap + #. this is just to play around and check what code gcc generates + #. split instruction and data memory? + #: config/pdp11/pdp11.h:89 + msgid "Target has split I&D" + msgstr "Hedef ayrı iÅŸlem ve veri belleÄŸine sahip olur" + + #: config/pdp11/pdp11.h:90 + msgid "Target does not have split I&D" + msgstr "Hedef ayrı iÅŸlem ve veri belleÄŸine sahip olmaz" + + #. UNIX assembler syntax? + #: config/pdp11/pdp11.h:92 + msgid "Use UNIX assembler syntax" + msgstr "UNIX çevirici sözdizimi kullanılır" + + #: config/pdp11/pdp11.h:93 + msgid "Use DEC assembler syntax" + msgstr "DEC çevirici sözdizimi kullanılır" + + #: config/pj/pj.h:73 + msgid "Generate little endian data" + msgstr "Küçük ilkli veri üretilir" + + #: config/pj/pj.h:75 + msgid "Generate big endian data" + msgstr "Büyük ilkli veri üretilir" + + #: config/pj/pj.h:77 + msgid "Turn on maintainer testing code" + msgstr "Programcı denetim kodunu etkinleÅŸtirir" + + #: config/pj/pj.h:79 + msgid "Enable Transmeta picoJava extensions" + msgstr "Transmeta picoJava uzantıları etkinleÅŸtirilir" + + #: config/pj/pj.h:81 + msgid "Disable Transmeta picoJava extensions" + msgstr "Transmeta picoJava uzantıları kullanılmaz" + + #: config/pj/pj.h:83 + msgid "Disable reorganization pass" + msgstr "AÅŸamaların yeniden organizasyonu yapılmaz" + + #: config/romp/romp.c:709 config/rs6000/rs6000.c:6546 + #, c-format + msgid "invalid %%S value" + msgstr "%%S deÄŸeri geçersiz" + + #: config/romp/romp.c:718 config/romp/romp.c:725 + #, c-format + msgid "invalid %%b value" + msgstr "%%b deÄŸeri geçersiz" + + #: config/romp/romp.c:765 config/romp/romp.c:776 + #, c-format + msgid "invalid %%z value" + msgstr "%%z deÄŸeri geçersiz" + + #: config/romp/romp.c:784 config/romp/romp.c:792 + #, c-format + msgid "invalid %%Z value" + msgstr "%%Z deÄŸeri geçersiz" + + #: config/romp/romp.c:799 config/romp/romp.c:808 config/romp/romp.c:815 config/rs6000/rs6000.c:6325 + #, c-format + msgid "invalid %%k value" + msgstr "%%k deÄŸeri geçersiz" + + #: config/romp/romp.c:900 config/romp/romp.c:943 + #, c-format + msgid "invalid %%j value" + msgstr "%%j deÄŸeri geçersiz" + + #. Perform any needed actions needed for a function that is receiving a + #. variable number of arguments. + #. + #. CUM is as above. + #. + #. MODE and TYPE are the mode and type of the current parameter. + #. + #. PRETEND_SIZE is a variable that should be set to the amount of stack + #. that must be pushed by the prolog to pretend that our caller pushed + #. it. + #. + #. Normally, this macro will push all remaining incoming registers on the + #. stack and set PRETEND_SIZE to the length of the registers pushed. + #: config/romp/romp.h:661 + msgid "can't have varargs with -mfp-arg-in-fp-regs" + msgstr "-mfp-arg-in-fp-regs ile varargs olamaz" + + #: config/rs6000/rs6000.c:475 + msgid "-mmultiple is not supported on little endian systems" + msgstr "-mmultiple küçük ilkli bayt sıralaması kullanılan sistemlerde desteklenmez" + + #: config/rs6000/rs6000.c:482 + msgid "-mstring is not supported on little endian systems" + msgstr "-mstring küçük ilkli bayt sıralaması kullanılan sistemlerde desteklenmez" + + #: config/rs6000/rs6000.c:488 config/xtensa/xtensa.c:1846 + #, c-format + msgid "-f%s ignored (all code is position independent)" + msgstr "-f%s yoksayıldı (tüm kod konum bağımsız)" + + #: config/rs6000/rs6000.c:497 + msgid "-ffunction-sections disabled on AIX when debugging" + msgstr "Hata ayıklama sırasında AIX'de -ffunction-sections etkisizdir" + + #: config/rs6000/rs6000.c:503 + msgid "-fdata-sections not supported on AIX" + msgstr "-fdata-sections AIX'de desteklenmiyor" + + #: config/rs6000/rs6000.c:518 + #, c-format + msgid "unknown -mdebug-%s switch" + msgstr "-mdebug-%s seçeneÄŸi bilinmiyor" + + #: config/rs6000/rs6000.c:528 + #, c-format + msgid "Unknown switch -mlong-double-%s" + msgstr "-mlong-double-%s seçeneÄŸi bilinmiyor" + + #: config/rs6000/rs6000.c:595 + #, c-format + msgid "unknown ABI specified: '%s'" + msgstr "bilinmeyen ABI belirtilmiÅŸ: '%s'" + + #: config/rs6000/rs6000.c:3631 + msgid "argument 1 of __builtin_altivec_predicate must be a constant" + msgstr "`__builtin_altivec_predicate'in 1. argümanı bir sabit olmalı" + + #: config/rs6000/rs6000.c:3685 + msgid "argument 1 of __builtin_altivec_predicate is out of range" + msgstr "`__builtin_altivec_predicate'in 1. argümanı kapsamdışı" + + #: config/rs6000/rs6000.c:4041 + #, c-format + msgid "argument 3 of `%s' must be a 2-bit literal" + msgstr "`%s' için 3. argüman 2 bitlik bir deÄŸer olmalı" + + #: config/rs6000/rs6000.c:6252 + #, c-format + msgid "invalid %%f value" + msgstr "%%f deÄŸeri geçersiz" + + #: config/rs6000/rs6000.c:6261 + #, c-format + msgid "invalid %%F value" + msgstr "%%F deÄŸeri geçersiz" + + #: config/rs6000/rs6000.c:6270 + #, c-format + msgid "invalid %%G value" + msgstr "%%G deÄŸeri geçersiz" + + #: config/rs6000/rs6000.c:6305 + #, c-format + msgid "invalid %%j code" + msgstr "%%j kodu geçersiz" + + #: config/rs6000/rs6000.c:6315 + #, c-format + msgid "invalid %%J code" + msgstr "%%J kodu geçersiz" + + #: config/rs6000/rs6000.c:6345 + #, c-format + msgid "invalid %%K value" + msgstr "%%K deÄŸeri geçersiz" + + #: config/rs6000/rs6000.c:6572 + #, c-format + msgid "%%S computed all 1's mask" + msgstr "%%S tamamı birlerin maskı olarak hesaplandı" + + #: config/rs6000/rs6000.c:6599 + #, c-format + msgid "%%S computed all 0's mask" + msgstr "%%S tamamı sıfırların maskı olarak hesaplandı" + + #: config/rs6000/rs6000.c:6609 + #, c-format + msgid "invalid %%T value" + msgstr "%%T deÄŸeri geçersiz" + + #: config/rs6000/rs6000.c:6619 + #, c-format + msgid "invalid %%u value" + msgstr "%%u deÄŸeri geçersiz" + + #: config/rs6000/rs6000.c:6628 + #, c-format + msgid "invalid %%v value" + msgstr "%%v deÄŸeri geçersiz" + + #: config/rs6000/aix.h:137 config/rs6000/beos.h:32 + msgid "Always pass floating-point arguments in memory" + msgstr "Bellekteki kayan noktalı argümanlar daima aktarılır" + + #: config/rs6000/aix.h:139 config/rs6000/beos.h:34 + msgid "Don't always pass floating-point arguments in memory" + msgstr "Bellekteki kayan noktalı argümanlar daima aktarılmaz" + + #: config/rs6000/aix41.h:28 config/rs6000/aix43.h:32 config/rs6000/aix51.h:32 + msgid "Support message passing with the Parallel Environment" + msgstr "EÅŸzamanlı Ortam ile ileti aktarımı desteklenir" + + #: config/rs6000/aix43.h:28 config/rs6000/aix51.h:28 + msgid "Compile for 64-bit pointers" + msgstr "64 bit göstergeler için derleme yapılır" + + #: config/rs6000/aix43.h:30 config/rs6000/aix51.h:30 + msgid "Compile for 32-bit pointers" + msgstr "32 bit göstergeler için derleme yapılır" + + #: config/rs6000/aix43.h:49 config/rs6000/aix51.h:49 + msgid "-maix64 and POWER architecture are incompatible" + msgstr "-maix64 ile POWER mimarisi uyumsuz" + + #: config/rs6000/aix43.h:54 config/rs6000/aix51.h:54 + msgid "-maix64 requires PowerPC64 architecture remain enabled" + msgstr "-maix64 seçeneÄŸi PowerPC64 mimarisinin etkin kalmasını gerektirir" + + #: config/rs6000/aix43.h:58 config/rs6000/aix51.h:58 + msgid "-maix64 required: 64-bit computation with 32-bit addressing not yet supported" + msgstr "-maix64 gereksinimi: 32 bit adreslemeli 64 bit hesaplama henüz desteklenmiyor." + + #. Run-time compilation parameters selecting different hardware subsets. + #. + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/rs6000/rs6000.h:277 + msgid "Use POWER instruction set" + msgstr "POWER komut kümesi kullanılır" + + #: config/rs6000/rs6000.h:280 + msgid "Use POWER2 instruction set" + msgstr "POWER2 komut kümesi kullanılır" + + #: config/rs6000/rs6000.h:282 + msgid "Do not use POWER2 instruction set" + msgstr "POWER2 komut kümesi kullanılmaz" + + #: config/rs6000/rs6000.h:285 + msgid "Do not use POWER instruction set" + msgstr "POWER komut kümesi kullanılmaz" + + #: config/rs6000/rs6000.h:287 + msgid "Use PowerPC instruction set" + msgstr "PowerPC komut kümesi kullanılır" + + #: config/rs6000/rs6000.h:290 + msgid "Do not use PowerPC instruction set" + msgstr "PowerPC komut kümesi kullanılmaz" + + #: config/rs6000/rs6000.h:292 + msgid "Use PowerPC General Purpose group optional instructions" + msgstr "PowerPC Genel Kullanım grubu seçimlik komutları kullanılır" + + #: config/rs6000/rs6000.h:294 + msgid "Don't use PowerPC General Purpose group optional instructions" + msgstr "PowerPC Genel Kullanım grubu seçimlik komutları kullanılmaz" + + #: config/rs6000/rs6000.h:296 + msgid "Use PowerPC Graphics group optional instructions" + msgstr "PowerPC Graphics grubu seçimlik komutları kullanılır" + + #: config/rs6000/rs6000.h:298 + msgid "Don't use PowerPC Graphics group optional instructions" + msgstr "PowerPC Graphics grubu seçimlik komutları kullanılmaz" + + #: config/rs6000/rs6000.h:300 + msgid "Use PowerPC-64 instruction set" + msgstr "PowerPC-64 komut kümesi kullanılır" + + #: config/rs6000/rs6000.h:302 + msgid "Don't use PowerPC-64 instruction set" + msgstr "PowerPC-64 komut kümesi kullanılmaz" + + #: config/rs6000/rs6000.h:304 + msgid "Use AltiVec instructions" + msgstr "AltiVec komutları kullanılır" + + #: config/rs6000/rs6000.h:306 + msgid "Don't use AltiVec instructions" + msgstr "AltiVec komutları kullanılmaz" + + #: config/rs6000/rs6000.h:308 + msgid "Use new mnemonics for PowerPC architecture" + msgstr "PowerPC mimarisi için yeni semboller kullanılır" + + #: config/rs6000/rs6000.h:310 + msgid "Use old mnemonics for PowerPC architecture" + msgstr "PowerPC mimarisi için eski semboller kullanılır" + + #: config/rs6000/rs6000.h:313 + msgid "Put everything in the regular TOC" + msgstr "HerÅŸeyi normal TOC'a koyar" + + #: config/rs6000/rs6000.h:315 + msgid "Place floating point constants in TOC" + msgstr "Kayan noktalı sabitleri TOC'a koyar" + + #: config/rs6000/rs6000.h:317 + msgid "Don't place floating point constants in TOC" + msgstr "Kayan noktalı sabitleri TOC'a koymaz" + + #: config/rs6000/rs6000.h:319 + msgid "Place symbol+offset constants in TOC" + msgstr "Sembol+göreli sabitleri TOC'a koyar" + + #: config/rs6000/rs6000.h:321 + msgid "Don't place symbol+offset constants in TOC" + msgstr "Sembol+göreli sabitleri TOC'a koymaz" + + #: config/rs6000/rs6000.h:327 + msgid "Place variable addresses in the regular TOC" + msgstr "DeÄŸiÅŸken adresleri normal TOC'a koyar" + + #: config/rs6000/rs6000.h:333 + msgid "Generate load/store multiple instructions" + msgstr "Yükleme/saklama çoklu komutları üretilir" + + #: config/rs6000/rs6000.h:335 + msgid "Do not generate load/store multiple instructions" + msgstr "Yükleme/saklama çoklu komutları üretilmez" + + #: config/rs6000/rs6000.h:339 + msgid "Generate string instructions for block moves" + msgstr "Blok taşımalar için dizge komutları üretilir" + + #: config/rs6000/rs6000.h:341 + msgid "Do not generate string instructions for block moves" + msgstr "Blok taşımalar için dizge komutları üretilmez" + + #: config/rs6000/rs6000.h:345 + msgid "Generate load/store with update instructions" + msgstr "Güncelleme komutlu yükleme/saklama üretilir" + + #: config/rs6000/rs6000.h:347 + msgid "Do not generate load/store with update instructions" + msgstr "Güncelleme komutlu yükleme/saklama üretilmez" + + #: config/rs6000/rs6000.h:355 + msgid "Don't schedule the start and end of the procedure" + msgstr "Altyordamın baÅŸlangıç ve bitiÅŸi zamanlanmaz" + + #: config/rs6000/rs6000.h:361 + msgid "Return all structures in memory (AIX default)" + msgstr "Bellekteki tüm veri yapıları döndürülür (AIX öntanımlı)" + + #: config/rs6000/rs6000.h:363 + msgid "Return small structures in registers (SVR4 default)" + msgstr "Yazmaçlardaki küçük veri yapıları döndürülür(SVR4 öntanımlı)" + + #: config/rs6000/rs6000.h:426 config/sparc/sparc.h:639 + msgid "Use features of and schedule code for given CPU" + msgstr "Verilen MİB'nin özellikleri ve zamanlama kodu kullanılır" + + #: config/rs6000/rs6000.h:429 + msgid "Enable debug output" + msgstr "Hata ayıklamalı çıktıyı etkinleÅŸtir" + + #: config/rs6000/rs6000.h:430 + msgid "Specify ABI to use" + msgstr "Kullanılacak ABI belirtilir" + + #: config/rs6000/rs6000.h:432 + msgid "Specify size of long double (64 or 128 bits)" + msgstr "long double için boyut belirtilir (64 ya da 128 bit)" + + #. Definitions for __builtin_return_address and __builtin_frame_address. + #. __builtin_return_address (0) should give link register (65), enable + #. this. + #. This should be uncommented, so that the link register is used, but + #. currently this would result in unmatched insns and spilling fixed + #. registers so we'll leave it for another day. When these problems are + #. taken care of one additional fetch will be necessary in RETURN_ADDR_RTX. + #. (mrs) + #. #define RETURN_ADDR_IN_PREVIOUS_FRAME + #. Number of bytes into the frame return addresses can be found. See + #. rs6000_stack_info in rs6000.c for more information on how the different + #. abi's store the return address. + #: config/rs6000/rs6000.h:1792 + msgid "RETURN_ADDRESS_OFFSET not supported" + msgstr "RETURN_ADDRESS_OFFSET desteklenmiyor" + + #: config/rs6000/sysv4.h:88 + msgid "Select ABI calling convention" + msgstr "ABI çaÄŸrı uzlaşımı seçilir" + + #: config/rs6000/sysv4.h:89 + msgid "Select method for sdata handling" + msgstr "sdata eldesi için yöntem seçilir" + + #: config/rs6000/sysv4.h:104 + msgid "Align to the base type of the bit-field" + msgstr "Bit alanı taban türüne hizalama yapılır" + + #: config/rs6000/sysv4.h:106 + msgid "Don't align to the base type of the bit-field" + msgstr "Bit alanı taban türüne hizalama yapılmaz" + + #: config/rs6000/sysv4.h:108 + msgid "Don't assume that unaligned accesses are handled by the system" + msgstr "Hizasız eriÅŸimlerin sistem tarafından yapıldığı varsayılmaz" + + #: config/rs6000/sysv4.h:110 + msgid "Assume that unaligned accesses are handled by the system" + msgstr "Hizasız eriÅŸimlerin sistem tarafından yapıldığı varsayılır" + + #: config/rs6000/sysv4.h:112 config/rs6000/sysv4.h:116 + msgid "Produce code relocatable at runtime" + msgstr "Çalışma anında kod yer deÄŸiÅŸtirilebilirliÄŸi saÄŸlanır" + + #: config/rs6000/sysv4.h:114 config/rs6000/sysv4.h:118 + msgid "Don't produce code relocatable at runtime" + msgstr "Çalışma anında kod yer deÄŸiÅŸtirilebilirliÄŸi saÄŸlanmaz" + + #: config/rs6000/sysv4.h:120 config/rs6000/sysv4.h:122 + msgid "Produce little endian code" + msgstr "Küçüğü baÅŸta kod üretilir" + + #: config/rs6000/sysv4.h:124 config/rs6000/sysv4.h:126 + msgid "Produce big endian code" + msgstr "Büyüğü baÅŸta kod üretilir" + + #: config/rs6000/sysv4.h:127 config/rs6000/sysv4.h:128 config/rs6000/sysv4.h:129 config/rs6000/sysv4.h:130 config/rs6000/sysv4.h:131 config/rs6000/sysv4.h:132 config/rs6000/sysv4.h:142 config/rs6000/sysv4.h:143 config/rs6000/sysv4.h:154 config/rs6000/sysv4.h:155 config/rs6000/sysv4.h:157 + msgid "no description yet" + msgstr "henüz bir açıklama yok" + + #: config/rs6000/sysv4.h:133 + msgid "Use EABI" + msgstr "EABI kullanılır" + + #: config/rs6000/sysv4.h:134 + msgid "Don't use EABI" + msgstr "EABI kullanılmaz" + + #: config/rs6000/sysv4.h:137 + msgid "Do not allow bit-fields to cross word boundaries" + msgstr "word sınırlarına karşı düşen bit alanlarına izin verilmez" + + #: config/rs6000/sysv4.h:139 + msgid "Use alternate register names" + msgstr "Alternatif yazmaç isimleri kullanılır" + + #: config/rs6000/sysv4.h:141 + msgid "Don't use alternate register names" + msgstr "Alternatif yazmaç isimleri kullanılmaz" + + #: config/rs6000/sysv4.h:145 + msgid "Link with libsim.a, libc.a and sim-crt0.o" + msgstr "libsim.a, libc.a ve sim-crt0.o ile ilintiler" + + #: config/rs6000/sysv4.h:147 + msgid "Link with libads.a, libc.a and crt0.o" + msgstr "libads.a, libc.a ve crt0.o ile ilintiler" + + #: config/rs6000/sysv4.h:149 + msgid "Link with libyk.a, libc.a and crt0.o" + msgstr "libyk.a, libc.a ve crt0.o ile ilintiler" + + #: config/rs6000/sysv4.h:151 + msgid "Link with libmvme.a, libc.a and crt0.o" + msgstr "libmvme.a, libc.a ve crt0.o ile ilintiler" + + #: config/rs6000/sysv4.h:153 + msgid "Set the PPC_EMB bit in the ELF flags header" + msgstr "ELF seçenekleri baÅŸlığı içindeki PPC_EMB bitini 1 yapar" + + #. Sometimes certain combinations of command options do not make sense + #. on a particular target machine. You can define a macro + #. `OVERRIDE_OPTIONS' to take account of this. This macro, if + #. defined, is executed once just after all the command options have + #. been parsed. + #. + #. The macro SUBTARGET_OVERRIDE_OPTIONS is provided for subtargets, to + #. get control. + #: config/rs6000/sysv4.h:214 + #, c-format + msgid "bad value for -mcall-%s" + msgstr "-mcall-%s için deÄŸer hatalı" + + #: config/rs6000/sysv4.h:230 + #, c-format + msgid "bad value for -msdata=%s" + msgstr "-msdata=%s için deÄŸer hatalı" + + #: config/rs6000/sysv4.h:247 + #, c-format + msgid "-mrelocatable and -msdata=%s are incompatible" + msgstr "-mrelocatable ile -msdata=%s uyumsuz." + + #: config/rs6000/sysv4.h:255 + #, c-format + msgid "-f%s and -msdata=%s are incompatible" + msgstr "-f%s ile -msdata=%s uyumsuz." + + #: config/rs6000/sysv4.h:263 + #, c-format + msgid "-msdata=%s and -mcall-%s are incompatible" + msgstr "-msdata=%s ile -mcall-%s uyumsuz." + + #: config/rs6000/sysv4.h:270 + msgid "-mrelocatable and -mno-minimal-toc are incompatible" + msgstr "-mrelocatable ile -mno-minimal-toc uyumsuz." + + #: config/rs6000/sysv4.h:276 + #, c-format + msgid "-mrelocatable and -mcall-%s are incompatible" + msgstr "-mrelocatable ile -mcall-%s uyumsuz." + + #: config/rs6000/sysv4.h:283 + #, c-format + msgid "-fPIC and -mcall-%s are incompatible" + msgstr "-fPIC ile -mcall-%s uyumsuz." + + #: config/rs6000/sysv4.h:290 + msgid "-mcall-aixdesc must be big endian" + msgstr "-mcall-aixdesc «big endian» olmalı" + + #: config/s390/s390.c:1910 + msgid "invalid UNSPEC as operand (1)" + msgstr "terim (1) olarak UNSPEC geçersiz" + + #: config/s390/s390.c:1940 + msgid "invalid UNSPEC as operand (2)" + msgstr "terim (2) olarak UNSPEC geçersiz" + + #: config/s390/s390.c:1946 + msgid "UNKNOWN in s390_output_symbolic_const !?" + msgstr "s390_output_symbolic_const da BİLİNMEYEN!?" + + #: config/s390/s390.c:1962 + msgid "Cannot decompose address." + msgstr "Adres çözümlenemez" + + #: config/s390/s390.c:2110 + msgid "UNKNOWN in print_operand !?" + msgstr "print_operand da BİLİNMEYEN !?" + + #: config/s390/s390.c:2703 + msgid "Total size of local variables exceeds architecture limit." + msgstr "Yerel deÄŸiÅŸkenlerin toplam boyutu mimarinin izin verdiÄŸi sınırı aşıyor." + + #: config/s390/s390.h:58 + msgid "Set backchain" + msgstr "Backchain ayarlanır" + + #: config/s390/s390.h:59 + msgid "Don't set backchain (faster, but debug harder" + msgstr "Backchain ayarlanmaz (daha hızlı ama hata ayıklamak daha zor" + + #: config/s390/s390.h:60 + msgid "Use bras for execucable < 64k" + msgstr "64k dan küçük çalıştırılabilirler için bras kullanılır" + + #: config/s390/s390.h:61 + msgid "Don't use bras" + msgstr "bras kullanılmaz" + + #: config/s390/s390.h:62 + msgid "Additional debug prints" + msgstr "Ek hata ayıklama iletileri çıktılar" + + #: config/s390/s390.h:63 + msgid "Don't print additional debug prints" + msgstr "Ek hata ayıklama bilgisi verilmez" + + #: config/s390/s390.h:64 + msgid "64 bit mode" + msgstr "64 bitlik kip" + + #: config/s390/s390.h:65 + msgid "31 bit mode" + msgstr "31 bitlik kip" + + #: config/s390/s390.h:66 + msgid "mvcle use" + msgstr "mvcle kullanımı" + + #: config/s390/s390.h:67 + msgid "mvc&ex" + msgstr "mvc&ex" + + #: config/sh/sh.c:5060 + msgid "__builtin_saveregs not supported by this subtarget" + msgstr "__builtin_saveregs bu alt hedef tarafından desteklenmiyor" + + #. The sp_switch attribute only has meaning for interrupt functions. + #: config/sh/sh.c:5610 config/sh/sh.c:5649 + #, c-format + msgid "`%s' attribute only applies to interrupt functions" + msgstr "`%s' özniteliÄŸi sadece sistem kesmesi iÅŸlevlerine uygulanır" + + #. The argument must be a constant string. + #: config/sh/sh.c:5617 + #, c-format + msgid "`%s' attribute argument not a string constant" + msgstr "`%s' öznitelik argümanı bir dizge sabit deÄŸil" + + #. The argument must be a constant integer. + #: config/sh/sh.c:5656 + #, c-format + msgid "`%s' attribute argument not an integer constant" + msgstr "`%s' öznitelik argümanı bir tamsayı sabit deÄŸil" + + #. There are no delay slots on SHmedia. + #. Relaxation isn't yet supported for SHmedia + #: config/sh/sh.h:367 + msgid "Profiling is not supported on this target." + msgstr "Ayrımsama bu hedefte desteklenmiyor." + + #: config/sparc/sparc.c:317 + #, c-format + msgid "%s is not supported by this configuration" + msgstr "%s bu yapılandırma ile desteklenmiyor" + + #: config/sparc/sparc.c:324 + msgid "-mlong-double-64 not allowed with -m64" + msgstr "-mlong-double-64 ile -m64 birarada izin verilmez" + + #: config/sparc/sparc.c:349 + msgid "-mcmodel= is not supported on 32 bit systems" + msgstr "`-mcmodel=' 32bit sistemlerde desteklenmiyor" + + #: config/sparc/sparc.c:5971 config/sparc/sparc.c:5977 + #, c-format + msgid "invalid %%Y operand" + msgstr "geçersiz %%Y terimi" + + #: config/sparc/sparc.c:6047 + #, c-format + msgid "invalid %%A operand" + msgstr "geçersiz %%A terimi" + + #: config/sparc/sparc.c:6057 + #, c-format + msgid "invalid %%B operand" + msgstr "geçersiz %%B terimi" + + #: config/sparc/sparc.c:6096 + #, c-format + msgid "invalid %%c operand" + msgstr "geçersiz %%c terimi" + + #: config/sparc/sparc.c:6097 + #, c-format + msgid "invalid %%C operand" + msgstr "geçersiz %%C terimi" + + #: config/sparc/sparc.c:6118 + #, c-format + msgid "invalid %%d operand" + msgstr "geçersiz %%d terimi" + + #: config/sparc/sparc.c:6119 + #, c-format + msgid "invalid %%D operand" + msgstr "geçersiz %%D terimi" + + #: config/sparc/sparc.c:6135 + #, c-format + msgid "invalid %%f operand" + msgstr "geçersiz %%f terimi" + + #: config/sparc/sparc.c:6185 + msgid "long long constant not a valid immediate operand" + msgstr "long long sabit geçerli bir anlık terim deÄŸil" + + #: config/sparc/sparc.c:6188 + msgid "floating point constant not a valid immediate operand" + msgstr "gerçel sayı sabit geçerli bir dolaysız veri öğesi deÄŸil" + + #: config/sparc/freebsd.h:81 config/sparc/linux.h:87 config/sparc/linux64.h:144 config/sparc/netbsd-elf.h:239 + msgid "Use 128 bit long doubles" + msgstr "128 bit long double'lar kullanılır" + + #: config/sparc/sp64-elf.h:84 config/sparc/splet.h:29 + msgid "Generate code for big endian" + msgstr "Büyük ilkli kod üretilir" + + #: config/sparc/sp64-elf.h:85 config/sparc/splet.h:30 + msgid "Generate code for little endian" + msgstr "Küçük ilkli kod üretilir" + + #: config/sparc/sp86x-aout.h:51 config/sparc/sp86x-elf.h:67 + msgid "Use little-endian byte order for data" + msgstr "Veri için bayt sıralaması küçük ilkli yapılır" + + #: config/sparc/sparc.h:539 + msgid "Assume possible double misalignment" + msgstr "double'ların hizalanmamış oldukları varsayılır" + + #: config/sparc/sparc.h:541 + msgid "Assume all doubles are aligned" + msgstr "Tüm double'lar hizalı kabul edilir" + + #: config/sparc/sparc.h:543 + msgid "Pass -assert pure-text to linker" + msgstr "BirleÅŸtiriciye -assert salt-metin gönderir" + + #: config/sparc/sparc.h:545 + msgid "Do not pass -assert pure-text to linker" + msgstr "BirleÅŸtiriciye -assert salt-metin göndermez" + + #: config/sparc/sparc.h:547 + msgid "Use flat register window model" + msgstr "Düz yazmaç pencere modeli kullanılır" + + #: config/sparc/sparc.h:549 + msgid "Do not use flat register window model" + msgstr "Düz yazmaç pencere modeli kullanılmaz" + + #: config/sparc/sparc.h:551 + msgid "Use ABI reserved registers" + msgstr "Ayrılmış ABI yazmaçları kullanılır" + + #: config/sparc/sparc.h:553 + msgid "Do not use ABI reserved registers" + msgstr "Ayrılmış ABI yazmaçları kullanılmaz" + + #: config/sparc/sparc.h:555 + msgid "Use hardware quad fp instructions" + msgstr "Donanım bazlı quad fp komutları kullanılır" + + #: config/sparc/sparc.h:557 + msgid "Do not use hardware quad fp instructions" + msgstr "Donanım bazlı quad fp komutları kullanılmaz" + + #: config/sparc/sparc.h:559 + msgid "Compile for v8plus ABI" + msgstr "v8plus ABI için derleme yapılır" + + #: config/sparc/sparc.h:561 + msgid "Do not compile for v8plus ABI" + msgstr "v8plus ABI için derleme yapılmaz" + + #: config/sparc/sparc.h:563 + msgid "Utilize Visual Instruction Set" + msgstr "Görsel Komut Kümesi kullanılır" + + #: config/sparc/sparc.h:565 + msgid "Do not utilize Visual Instruction Set" + msgstr "Görsel Komut Kümesi kullanılmaz" + + #. ??? These are deprecated, coerced to -mcpu=. Delete in 2.9. + #: config/sparc/sparc.h:568 + msgid "Optimize for Cypress processors" + msgstr "Cypress iÅŸlemciler için eniyileme yapılır" + + #: config/sparc/sparc.h:570 + msgid "Optimize for SparcLite processors" + msgstr "SparcLite iÅŸlemciler için eniyileme yapılır" + + #: config/sparc/sparc.h:572 + msgid "Optimize for F930 processors" + msgstr "F930 iÅŸlemciler için eniyileme yapılır" + + #: config/sparc/sparc.h:574 + msgid "Optimize for F934 processors" + msgstr "F934 iÅŸlemciler için eniyileme yapılır" + + #: config/sparc/sparc.h:576 + msgid "Use V8 Sparc ISA" + msgstr "V8 Sparc ISA kullanılır" + + #: config/sparc/sparc.h:578 + msgid "Optimize for SuperSparc processors" + msgstr "SuperSparc iÅŸlemciler için eniyileme yapılır" + + #. End of deprecated options. + #: config/sparc/sparc.h:581 + msgid "Pointers are 64-bit" + msgstr "Göstergeler 64 bittir" + + #: config/sparc/sparc.h:583 + msgid "Pointers are 32-bit" + msgstr "Göstergeler 32 bittir" + + #: config/sparc/sparc.h:585 + msgid "Use 32-bit ABI" + msgstr "32-bit ABI kullanılır" + + #: config/sparc/sparc.h:587 + msgid "Use 64-bit ABI" + msgstr "64-bit ABI kullanılır" + + #: config/sparc/sparc.h:589 + msgid "Use stack bias" + msgstr "Yığıt yanlaması kullanır" + + #: config/sparc/sparc.h:591 + msgid "Do not use stack bias" + msgstr "Yığıt yanlaması kullanmaz" + + #: config/sparc/sparc.h:593 + msgid "Use structs on stronger alignment for double-word copies" + msgstr "Çift-word kopyalamada kuvvetli hizalama için struct (yapı) kullanır" + + #: config/sparc/sparc.h:595 + msgid "Do not use structs on stronger alignment for double-word copies" + msgstr "Çift-word kopyalamada kuvvetli hizalama için struct (yapı) kullanmaz" + + #: config/sparc/sparc.h:597 + msgid "Optimize tail call instructions in assembler and linker" + msgstr "Çevirici ve baÄŸlayıcıda kuyruk çaÄŸrı komutlarını eniyiler" + + #: config/sparc/sparc.h:599 + msgid "Do not optimize tail call instructions in assembler or linker" + msgstr "" + "Çevirici veya baÄŸlayıcıda kuyruk çaÄŸrı komutlarını\n" + " eniyilemez" + + #: config/sparc/sparc.h:643 + msgid "Use given Sparc code model" + msgstr "Belirtilen Sparc kod modeli kullanılır" + + #: config/stormy16/stormy16.c:1179 + msgid "cannot use va_start in interrupt function" + msgstr "kesme iÅŸlevinde va_start kullanılamaz" + + #: config/stormy16/stormy16.c:1536 + msgid "`B' operand is not constant" + msgstr "`B' terimi sabit deÄŸil" + + #: config/stormy16/stormy16.c:1542 + msgid "`B' operand has multiple bits set" + msgstr "`B' terimi çoklu bit kümeleri içeriyor" + + #: config/stormy16/stormy16.c:1569 + msgid "`o' operand is not constant" + msgstr "`o' terimi sabit deÄŸil" + + #: config/stormy16/stormy16.c:1584 + msgid "xstormy16_print_operand: unknown code" + msgstr "xstormy16_print_operand: kod bilinmiyor" + + #: config/stormy16/stormy16.c:1634 + #, c-format + msgid "switch statement of size %lu entries too large" + msgstr "%lu luk switch deyimi girdileri çok büyük" + + #: config/v850/v850-c.c:68 + msgid "#pragma GHS endXXXX found without previous startXXX" + msgstr "#pragma GHS endXXXX öncesinde startXXX yok" + + #: config/v850/v850-c.c:70 + msgid "#pragma GHS endXXX does not match previous startXXX" + msgstr "#pragma GHS endXXX ile önceki startXXX eÅŸleÅŸmiyor" + + #: config/v850/v850-c.c:95 + msgid "cannot set interrupt attribute: no current function" + msgstr "sistem kesmesi özniteliÄŸi ayarlanamıyor: böyle bir iÅŸlev yok" + + #: config/v850/v850-c.c:103 + msgid "cannot set interrupt attribute: no such identifier" + msgstr "sistem kesmesi özniteliÄŸi ayarlanamıyor: böyle bir tanımlayıcı yok" + + #: config/v850/v850-c.c:149 + msgid "junk at end of #pragma ghs section" + msgstr "'#pragma ghs' bölümünden sonrası karışık" + + #: config/v850/v850-c.c:166 + #, c-format + msgid "unrecognized section name \"%s\"" + msgstr "bölüm ismi \"%s\" bilinmiyor" + + #: config/v850/v850-c.c:181 + msgid "malformed #pragma ghs section" + msgstr "'#pragma ghs' bölümü bozuk" + + #: config/v850/v850-c.c:201 + msgid "junk at end of #pragma ghs interrupt" + msgstr "'#pragma ghs interrupt' sonrası karışık" + + #: config/v850/v850-c.c:213 + msgid "junk at end of #pragma ghs starttda" + msgstr "'#pragma ghs starttda' sonrası karışık" + + #: config/v850/v850-c.c:225 + msgid "junk at end of #pragma ghs startsda" + msgstr "'#pragma ghs startsda' sonrası karışık" + + #: config/v850/v850-c.c:237 + msgid "junk at end of #pragma ghs startzda" + msgstr "'#pragma ghs startzda' sonrası karışık" + + #: config/v850/v850-c.c:249 + msgid "junk at end of #pragma ghs endtda" + msgstr "'#pragma ghs endtda' sonrası karışık" + + #: config/v850/v850-c.c:261 + msgid "junk at end of #pragma ghs endsda" + msgstr "'#pragma ghs endsda' sonrası karışık" + + #: config/v850/v850-c.c:273 + msgid "junk at end of #pragma ghs endzda" + msgstr "'#pragma ghs endzda' sonrası karışık" + + #: config/v850/v850.c:122 + #, c-format + msgid "%s=%s is not numeric" + msgstr "%s=%s sayısal deÄŸerler deÄŸil." + + #: config/v850/v850.c:129 + #, c-format + msgid "%s=%s is too large" + msgstr "%s=%s çok büyük" + + #: config/v850/v850.c:285 + msgid "const_double_split got a bad insn:" + msgstr "const_double_split got bir hatalı komut:" + + #: config/v850/v850.c:777 + msgid "output_move_single:" + msgstr "output_move_single:" + + #: config/v850/v850.c:2084 + msgid "a data area attribute cannot be specified for local variables" + msgstr "bir veri alanı özelliÄŸi yerel deÄŸiÅŸkenler için belirtilemez" + + #: config/v850/v850.c:2095 + #, c-format + msgid "data area of '%s' conflicts with previous declaration" + msgstr "'%s' veri alanı önceki bildirimle çeliÅŸiyor" + + #: config/v850/v850.c:2298 + #, c-format + msgid "bogus JR construction: %d\n" + msgstr "Taklit JR oluÅŸturma: %d\n" + + #: config/v850/v850.c:2319 config/v850/v850.c:2521 + #, c-format + msgid "bad amount of stack space removal: %d" + msgstr "Yığın alanı kaldırma miktarı hatalı: %d" + + #: config/v850/v850.c:2497 + #, c-format + msgid "bogus JARL construction: %d\n" + msgstr "taklit JARL oluÅŸturma: %d\n" + + #. Macro to define tables used to set the flags. + #. This is a list in braces of pairs in braces, + #. each pair being { "NAME", VALUE } + #. where VALUE is the bits to set or minus the bits to clear. + #. An empty string NAME is used to identify the default VALUE. + #: config/v850/v850.h:120 + msgid "Support Green Hills ABI" + msgstr "Green Hills ABI desteklenir" + + #: config/v850/v850.h:123 + msgid "Prohibit PC relative function calls" + msgstr "PC göreli iÅŸlev çaÄŸrılarını engeller" + + #: config/v850/v850.h:126 + msgid "Reuse r30 on a per function basis" + msgstr "Her iÅŸlev için r30 yeniden kullanılır" + + #: config/v850/v850.h:129 + msgid "Use stubs for function prologues" + msgstr "İşlev önbilgisi için koçan kullanır" + + #: config/v850/v850.h:132 + msgid "Same as: -mep -mprolog-function" + msgstr "-mep -mprolog-function ile aynı" + + #: config/v850/v850.h:133 + msgid "Enable backend debugging" + msgstr "Arkayüz hata ayıklamasını etkinleÅŸtirir" + + #: config/v850/v850.h:135 + msgid "Compile for the v850 processor" + msgstr "v850 iÅŸlemcisi için derleme yapılır" + + #: config/v850/v850.h:138 + msgid "Use 4 byte entries in switch tables" + msgstr "Switch tablolarında 4 baytlık girdiler kullanılır" + + #: config/v850/v850.h:164 + msgid "Set the max size of data eligible for the TDA area" + msgstr "TDA alanı için uygun verinin maksimum boyunu belirler" + + #: config/v850/v850.h:167 + msgid "Set the max size of data eligible for the SDA area" + msgstr "SDA alanı için uygun verinin maksimum boyunu belirler" + + #: config/v850/v850.h:170 + msgid "Set the max size of data eligible for the ZDA area" + msgstr "ZDA alanı için uygun verinin maksimum boyunu belirler" + + #: config/xtensa/xtensa.c:1048 config/xtensa/xtensa.c:1082 config/xtensa/xtensa.c:1091 + msgid "bad test" + msgstr "hatalı test" + + #: config/xtensa/xtensa.c:1790 + msgid "boolean registers required for the floating-point option" + msgstr "iki terimli yazmaçlar kayan nokta seçeneÄŸi için gerekli" + + #: config/xtensa/xtensa.c:1965 + msgid "invalid mask" + msgstr "mask geçersiz" + + #: config/xtensa/xtensa.c:2017 + msgid "invalid address" + msgstr "adres geçersiz" + + #: config/xtensa/xtensa.c:2042 + msgid "no register in address" + msgstr "adreste yazmaç yok" + + #: config/xtensa/xtensa.c:2050 + msgid "address offset not a constant" + msgstr "adres deÄŸeri bir sabit deÄŸil" + + #: config/xtensa/xtensa.h:114 + msgid "Use the Xtensa code density option" + msgstr "Xtensa kod yoÄŸunluÄŸu seçeneÄŸi kullanılır" + + #: config/xtensa/xtensa.h:116 + msgid "Do not use the Xtensa code density option" + msgstr "Xtensa kod yoÄŸunluÄŸu seçeneÄŸi kullanılmaz" + + #: config/xtensa/xtensa.h:118 + msgid "Use the Xtensa MAC16 option" + msgstr "Xtensa MAC16 seçeneÄŸi kullanılır" + + #: config/xtensa/xtensa.h:120 + msgid "Do not use the Xtensa MAC16 option" + msgstr "Xtensa MAC16 seçeneÄŸi kullanılmaz" + + #: config/xtensa/xtensa.h:122 + msgid "Use the Xtensa MUL16 option" + msgstr "Xtensa MUL16 seçeneÄŸi kullanılır" + + #: config/xtensa/xtensa.h:124 + msgid "Do not use the Xtensa MUL16 option" + msgstr "Xtensa MUL16 seçeneÄŸi kullanılmaz" + + #: config/xtensa/xtensa.h:126 + msgid "Use the Xtensa MUL32 option" + msgstr "Xtensa MUL32 seçeneÄŸi kullanılır" + + #: config/xtensa/xtensa.h:128 + msgid "Do not use the Xtensa MUL32 option" + msgstr "Xtensa MUL32 seçeneÄŸi kullanılmaz" + + #. undocumented + #. undocumented + #: config/xtensa/xtensa.h:134 + msgid "Use the Xtensa NSA option" + msgstr "Xtensa NSA seçeneÄŸi kullanılır" + + #: config/xtensa/xtensa.h:136 + msgid "Do not use the Xtensa NSA option" + msgstr "Xtensa NSA seçeneÄŸi kullanılmaz" + + #: config/xtensa/xtensa.h:138 + msgid "Use the Xtensa MIN/MAX option" + msgstr "Xtensa MIN/MAX seçeneÄŸi kullanılır" + + #: config/xtensa/xtensa.h:140 + msgid "Do not use the Xtensa MIN/MAX option" + msgstr "Xtensa MIN/MAX seçeneÄŸi kullanılmaz" + + #: config/xtensa/xtensa.h:142 + msgid "Use the Xtensa SEXT option" + msgstr "Xtensa SEXT seçeneÄŸi kullanılır" + + #: config/xtensa/xtensa.h:144 + msgid "Do not use the Xtensa SEXT option" + msgstr "Xtensa SEXT seçeneÄŸi kullanılmaz" + + #: config/xtensa/xtensa.h:146 + msgid "Use the Xtensa boolean register option" + msgstr "Xtensa iki terimli yazmaç seçeneÄŸi kullanılır" + + #: config/xtensa/xtensa.h:148 + msgid "Do not use the Xtensa boolean register option" + msgstr "Xtensa iki terimli yazmaç seçeneÄŸi kullanılmaz" + + #: config/xtensa/xtensa.h:150 + msgid "Use the Xtensa floating-point unit" + msgstr "Xtensa kayan nokta aritmetiÄŸi kullanılır" + + #: config/xtensa/xtensa.h:152 + msgid "Do not use the Xtensa floating-point unit" + msgstr "Xtensa kayan nokta aritmetiÄŸi kullanılmaz" + + #. undocumented + #. undocumented + #. undocumented + #. undocumented + #. undocumented + #. undocumented + #. undocumented + #. undocumented + #: config/xtensa/xtensa.h:170 + msgid "Disable fused multiply/add and multiply/subtract FP instructions" + msgstr "BirleÅŸik çarpma/toplama ve çarpma/çıkarma FP komutları üretilmez" + + #: config/xtensa/xtensa.h:172 + msgid "Enable fused multiply/add and multiply/subtract FP instructions" + msgstr "BirleÅŸik çarpma/toplama ve çarpma/çıkarma FP komutları üretilir" + + #: config/xtensa/xtensa.h:174 + msgid "Serialize volatile memory references with MEMW instructions" + msgstr "MEMW komutlu oynak bellek baÅŸvuruları üretilir" + + #: config/xtensa/xtensa.h:176 + msgid "Do not serialize volatile memory references with MEMW instructions" + msgstr "MEMW komutlu oynak bellek baÅŸvuruları üretilmez" + + #: config/xtensa/xtensa.h:178 + msgid "Intersperse literal pools with code in the text section" + msgstr "Sabit kümeleri metin bölümündeki kodun arasına serpiÅŸtirilir" + + #: config/xtensa/xtensa.h:180 + msgid "Put literal pools in a separate literal section" + msgstr "Sabit kümeleri ayrı bir sabit bölümüne konur" + + #: config/xtensa/xtensa.h:182 + msgid "Automatically align branch targets to reduce branch penalties" + msgstr "Dallanma sorunlarını azaltmak için dal hedefleri otomatik olarak hizalanır." + + #: config/xtensa/xtensa.h:184 + msgid "Do not automatically align branch targets" + msgstr "Dal hedefleri otomatik olarak hizalanmaz" + + #: config/xtensa/xtensa.h:186 + msgid "Use indirect CALLXn instructions for large programs" + msgstr "Büyük programlar için dolaylı CALLXn komutları kullanılır" + + #: config/xtensa/xtensa.h:188 + msgid "Use direct CALLn instructions for fast calls" + msgstr "Hızlı çaÄŸrılar için doÄŸrudan CALLn komutları kullanılır" + + #: ada/misc.c:219 + msgid "`-gnat' misspelled as `-gant'" + msgstr "`-gnat' yerine `-gant' kullanılmış" + + #: cp/call.c:270 cp/init.c:1635 + msgid "qualified type `%T' does not match destructor name `~%T'" + msgstr "yetkin tür `%T', yıkıcı ismi `~%T' ile eÅŸleÅŸmiyor" + + #: cp/call.c:279 + msgid "type of `%E' does not match destructor type `%T' (type was `%T')" + msgstr "`%E' türü yıkıcı türü `%T' ile eÅŸleÅŸmiyor (tür `%T' idi)" + + #: cp/call.c:288 + msgid "`%D' is a namespace" + msgstr "`%D' bir isim alanı" + + #: cp/call.c:296 + msgid "base object `%E' of scoped method call is of non-aggregate type `%T'" + msgstr "amaçlı yöntem çaÄŸrısının taban nesnesi `%E' yeni sınıf oluÅŸturamayan `%T' türününkidir" + + #: cp/call.c:394 + msgid "unable to call pointer to member function here" + msgstr "buradan üye iÅŸlev göstergesi çaÄŸrılamaz" + + #: cp/call.c:530 + msgid "destructors take no parameters" + msgstr "yıkıcılar parametre almaz" + + #: cp/call.c:537 + msgid "destructor name `~%T' does not match type `%T' of expression" + msgstr "yıkıcı ismi `~%T' ifadenin türü `%T' ile eÅŸleÅŸmiyor" + + #: cp/call.c:2374 + msgid "%s %D(%T, %T, %T) " + msgstr "%s %D(%T, %T, %T) " + + #: cp/call.c:2379 + msgid "%s %D(%T, %T) " + msgstr "%s %D(%T, %T) " + + #: cp/call.c:2383 + msgid "%s %D(%T) " + msgstr "%s %D(%T) " + + #: cp/call.c:2387 + msgid "%s %T " + msgstr "%s %T " + + #: cp/call.c:2389 + msgid "%s %+#D%s" + msgstr "%s %+#D%s" + + #: cp/call.c:2546 + msgid "no viable candidates" + msgstr "uygulanabilir aday yok" + + #: cp/call.c:2560 + msgid "conversion from `%T' to `%T' is ambiguous" + msgstr "`%T' den `%T' ye dönüşüm belirsiz" + + #: cp/call.c:2677 + msgid "no matching function for call to `%D(%A)'" + msgstr "`%D(%A)' çaÄŸrısı ile eÅŸleÅŸen bir iÅŸlev yok" + + #: cp/call.c:2688 cp/call.c:4681 + msgid "call of overloaded `%D(%A)' is ambiguous" + msgstr "aşırı yüklü `%D(%A)' çaÄŸrısı belirsiz" + + #. It's no good looking for an overloaded operator() on a + #. pointer-to-member-function. + #: cp/call.c:2715 + #, c-format + msgid "pointer-to-member function %E cannot be called without an object; consider using .* or ->*" + msgstr "üye iÅŸlev %E nesnesiz çaÄŸrılamaz; .* or ->* kullanımı önerilir" + + #: cp/call.c:2784 + msgid "no match for call to `(%T) (%A)'" + msgstr "`(%T) (%A)' çaÄŸrısı için eÅŸleÅŸme yok" + + #: cp/call.c:2794 + msgid "call of `(%T) (%A)' is ambiguous" + msgstr "`(%T) (%A)' çaÄŸrısı belirsiz" + + #: cp/call.c:2829 + msgid "%s for `%T ? %T : %T' operator" + msgstr "%s (`%T ? %T : %T' üç terimlisi için)" + + #: cp/call.c:2834 + msgid "%s for `%T %s' operator" + msgstr "%s (`%T %s' iÅŸlemimi için)" + + #: cp/call.c:2837 + msgid "%s for `%T [%T]' operator" + msgstr "%s (`%T [%T]' iÅŸlemimi için)" + + #: cp/call.c:2842 + msgid "%s for `%T %s %T' operator" + msgstr "%s (`%T %s %T' iÅŸlemimi için)" + + #: cp/call.c:2845 + msgid "%s for `%s %T' operator" + msgstr "%s (`%s %T' iÅŸlemimi için)" + + #: cp/call.c:2937 + msgid "ISO C++ forbids omitting the middle term of a ?: expression" + msgstr "ISO C++ bir ?: ifadesinde eksik orta terime izin vermez" + + #: cp/call.c:2996 + #, c-format + msgid "`%E' has type `void' and is not a throw-expression" + msgstr "`%E' `void' türünde ve bir yakalama-ifadesi deÄŸil" + + #: cp/call.c:3029 cp/call.c:3229 + msgid "operands to ?: have different types" + msgstr "?: için iÅŸlemimleri farklı türde" + + #: cp/call.c:3182 + msgid "enumeral mismatch in conditional expression: `%T' vs `%T'" + msgstr "ÅŸartlı ifade içinde enum uyumsuzluÄŸu: `%T' vs `%T'" + + #: cp/call.c:3189 + msgid "enumeral and non-enumeral type in conditional expression" + msgstr "ÅŸartlı ifade içinde enum ve enum olmayan türler" + + #: cp/call.c:3270 + msgid "`%D' must be declared before use" + msgstr "`%D' kullanmadan önce bildirilmiÅŸ olmalı" + + #: cp/call.c:3433 + msgid "no `%D(int)' declared for postfix `%s', trying prefix operator instead" + msgstr "sonek `%s' için `%D(int)' bildirimi yok, yerine önek iÅŸlemimi deneniyor" + + #: cp/call.c:3480 + msgid "using synthesized `%#D' for copy assignment" + msgstr "kopya ataması için bireÅŸimli `%#D' kullanılıyor" + + #: cp/call.c:3482 + msgid " where cfront would use `%#D'" + msgstr " (cfront'un `%#D' kullanması gerektiÄŸi yerde)" + + #: cp/call.c:3509 + msgid "comparison between `%#T' and `%#T'" + msgstr "`%#T' ile `%#T' arasında karşılaÅŸtırma" + + #: cp/call.c:3748 + msgid "no suitable `operator delete' for `%T'" + msgstr "`%T' için uygun bir `operator delete' yok" + + #: cp/call.c:3767 + msgid "`%+#D' is private" + msgstr "`%+#D' private'dir" + + #: cp/call.c:3769 + msgid "`%+#D' is protected" + msgstr "`%+#D' protected'dır" + + #: cp/call.c:3771 + msgid "`%+#D' is inaccessible" + msgstr "`%+#D' eriÅŸilebilir deÄŸil" + + #: cp/call.c:3772 + msgid "within this context" + msgstr "bu baÄŸlamda" + + #: cp/call.c:3814 + msgid "invalid conversion from `%T' to `%T'" + msgstr "`%T' den `%T' ye dönüşüm geçersiz" + + #: cp/call.c:3816 cp/call.c:3955 cp/call.c:3957 + msgid " initializing argument %P of `%D'" + msgstr " `%D' nin %P. argümanının ilklendirilmesi" + + #: cp/call.c:3879 cp/call.c:3883 + msgid " initializing argument %P of `%D' from result of `%D'" + msgstr " `%D'nin %P argümanı `%D'nin sonucundan ilklendiriliyor " + + #: cp/call.c:3889 cp/call.c:3892 + msgid " initializing temporary from result of `%D'" + msgstr " geçici olarak `%D'nin sonucundan ilklendiriliyor" + + #. Undefined behaviour [expr.call] 5.2.2/7. + #: cp/call.c:4026 + msgid "cannot pass objects of non-POD type `%#T' through `...'" + msgstr "POD olmayan `%#T' türünün nesneleri `...' üzerinden aktarılamaz" + + #. Undefined behaviour [expr.call] 5.2.2/7. + #: cp/call.c:4051 + msgid "cannot receive objects of non-POD type `%#T' through `...'" + msgstr "POD olmayan `%#T' türünün nesneleri `...' üzerinden alınamaz" + + #: cp/call.c:4193 + msgid "passing `%T' as `this' argument of `%#D' discards qualifiers" + msgstr "niteleyicileri iptal eden `%#D'nin `this' argümanı olarak `%T aktarılıyor" + + #: cp/call.c:4443 + msgid "could not find class$ field in java interface type `%T'" + msgstr "`%T' türündeki java arabiriminde class$ alanı bulunamadı" + + #: cp/call.c:4544 cp/typeck.c:2018 + msgid "request for member `%D' in `%E', which is of non-aggregate type `%T'" + msgstr "bir nesne alarak oluÅŸmayan `%3$T' türündeki `%2$E'nin üyesi `%D' için istek" + + #: cp/call.c:4670 + msgid "no matching function for call to `%T::%D(%A)%#V'" + msgstr "`%T::%D(%A)%#V' çaÄŸrısı ile eÅŸleÅŸen iÅŸlev yok" + + #: cp/call.c:4700 + msgid "cannot call member function `%D' without object" + msgstr "üye iÅŸlev `%D' nesne olmaksızın çaÄŸrılamaz" + + #: cp/call.c:5313 + msgid "passing `%T' chooses `%T' over `%T'" + msgstr "`%T' `%T'yi `%T' üzerinden seçerek aktarılıyor" + + #: cp/call.c:5315 cp/decl2.c:4508 + msgid " in call to `%D'" + msgstr " `%D' çaÄŸrısında" + + #: cp/call.c:5364 cp/call.c:5489 + msgid "choosing `%D' over `%D'" + msgstr "`%D' `%D' üzerinden seçiliyor" + + #: cp/call.c:5365 + msgid " for conversion from `%T' to `%T'" + msgstr " (`%T' den `%T' ye dönüşüm için)" + + #: cp/call.c:5367 + msgid " because conversion sequence for the argument is better" + msgstr " çünkü argüman için dönüşüm süreci daha iyi" + + #: cp/call.c:5491 + msgid " because worst conversion for the former is better than worst conversion for the latter" + msgstr " çünkü ilkinin en kötü dönüşümü sonuncusununkinden daha iyidir" + + #: cp/call.c:5607 cp/call.c:5628 + msgid "could not convert `%E' to `%T'" + msgstr "`%E' den `%T' ye dönüşüm yapılamaz" + + #: cp/class.c:287 + msgid "cannot convert from base `%T' to derived type `%T' via virtual base `%T'" + msgstr "taban `%T' türünden türetilmiÅŸ `%T' türü sanal taban `%T' üzerinden dönüştürülemez" + + #: cp/class.c:1020 + msgid "`%#D' and `%#D' cannot be overloaded" + msgstr "`%#D' ve `%#D' aşırı yüklü olamaz" + + #. There has already been a declaration of this method + #. or member template. + #: cp/class.c:1031 + msgid "`%D' has already been declared in `%T'" + msgstr "`%D' zaten `%T' de bildirilmiÅŸti" + + #: cp/class.c:1112 + msgid "duplicate enum value `%D'" + msgstr "yinelenmiÅŸ enum deÄŸeri `%D'" + + #: cp/class.c:1115 + msgid "duplicate field `%D' (as enum and non-enum)" + msgstr "yinelenmiÅŸ alan `%D' (hem enum hem de deÄŸil)" + + #: cp/class.c:1122 + msgid "duplicate nested type `%D'" + msgstr "yinelenmiÅŸ iç içe tür `%D'" + + #: cp/class.c:1133 + msgid "duplicate field `%D' (as type and non-type)" + msgstr "yinelenmiÅŸ alan `%D' (hem tür hem de deÄŸil)" + + #: cp/class.c:1137 + msgid "duplicate member `%D'" + msgstr "yinelenmiÅŸ üye `%D'" + + #: cp/class.c:1180 + msgid "conflicting access specifications for method `%D', ignored" + msgstr "`%D' yöntemi için eriÅŸim özellikleri çeliÅŸkili, yoksayıldı" + + #: cp/class.c:1182 + #, c-format + msgid "conflicting access specifications for field `%s', ignored" + msgstr "`%s' alanı için eriÅŸim özellikleri çeliÅŸkili, yoksayıldı" + + #: cp/class.c:1225 + msgid "`%D' names constructor" + msgstr "`%D' isimleri kurucu" + + #: cp/class.c:1231 + msgid "`%D' invalid in `%T'" + msgstr "`%T' içindeki `%D' geçersiz" + + #: cp/class.c:1239 + msgid "no members matching `%D' in `%#T'" + msgstr "`%T' içindeki `%D' ile eÅŸleÅŸen üye yok" + + #: cp/class.c:1271 cp/class.c:1279 + msgid "`%D' invalid in `%#T'" + msgstr "`%#T' içindeki `%D' geçersiz" + + #: cp/class.c:1272 + msgid " because of local method `%#D' with same name" + msgstr " çünkü yerel yöntem `%#D' ile aynı isimde" + + #: cp/class.c:1280 + msgid " because of local member `%#D' with same name" + msgstr " çünkü yerel üye `%#D' ile aynı isimde" + + #: cp/class.c:1352 + msgid "base class `%#T' has a non-virtual destructor" + msgstr "taban sınıf `%#T' bir sanal olmayan yıkıcıya sahip" + + #: cp/class.c:1372 + msgid "base `%T' with only non-default constructor in class without a constructor" + msgstr "sadece bir kurucusuz sınıftaki öntanımlı olmayan kuruculu taban `%T'" + + #: cp/class.c:1959 + msgid "all member functions in class `%T' are private" + msgstr "sınıf `%T' içindeki tüm üye iÅŸlevler 'private'" + + #: cp/class.c:1973 + msgid "`%#T' only defines a private destructor and has no friends" + msgstr "`%#T' sadece private bir yıkıcı tanımlıyor ve kardeÅŸleri yok" + + #: cp/class.c:2016 + msgid "`%#T' only defines private constructors and has no friends" + msgstr "`%#T' sadece private kurucular tanımlıyor ve kardeÅŸleri yok" + + #: cp/class.c:2137 cp/class.c:5064 + msgid "redefinition of `%#T'" + msgstr "`%#T' yeniden tanımlanmış" + + #: cp/class.c:2138 + msgid "previous definition of `%#T'" + msgstr "`%#T' nin önceki bildirimi" + + #: cp/class.c:2468 + msgid "no unique final overrider for `%D' in `%T'" + msgstr "`%D' için `%T' içinde eÅŸsiz bir son deÄŸiÅŸtirici yok" + + #. Here we know it is a hider, and no overrider exists. + #: cp/class.c:2850 + msgid "`%D' was hidden" + msgstr "`%D'" + + #: cp/class.c:2851 + msgid " by `%D'" + msgstr " `%D' tarafından gizlendi" + + #: cp/class.c:2893 + msgid "ISO C++ forbids member `%D' with same name as enclosing class" + msgstr "ISO C++ zarflayan sınıf olarak üye `%D' ile aynı isme izin vermez" + + #: cp/class.c:2898 cp/decl2.c:1883 + msgid "`%#D' invalid; an anonymous union can only have non-static data members" + msgstr "`%#D' geçersiz; bir anonim birleÅŸik yapı sadece statik olmayan veri üyeleri içerebilir" + + #: cp/class.c:2904 cp/decl2.c:1889 + msgid "private member `%#D' in anonymous union" + msgstr "anonim union içinde private üye `%#D'" + + #: cp/class.c:2907 cp/decl2.c:1891 + msgid "protected member `%#D' in anonymous union" + msgstr "anonim union içinde protected üye `%#D'" + + #: cp/class.c:3059 + msgid "bit-field `%#D' with non-integral type" + msgstr "tümleyen olmayan tür ile bit-alanı `%#D'" + + #: cp/class.c:3079 + msgid "bit-field `%D' width not an integer constant" + msgstr "bit alanı `%D' için geniÅŸlik bir tamsayı sabit deÄŸil" + + #: cp/class.c:3085 + msgid "negative width in bit-field `%D'" + msgstr "bit alanı `%D' içindeki geniÅŸlik negatif" + + #: cp/class.c:3090 + msgid "zero width for bit-field `%D'" + msgstr "bit alanı `%D' için sıfır geniÅŸlik" + + #: cp/class.c:3096 + msgid "width of `%D' exceeds its type" + msgstr "`%D' türünün geniÅŸliÄŸini aşıyor" + + #: cp/class.c:3105 + msgid "`%D' is too small to hold all values of `%#T'" + msgstr "`%D' `%#T'nin tüm deÄŸerlerini tutmak için çok küçük" + + #: cp/class.c:3189 + msgid "member `%#D' with constructor not allowed in union" + msgstr "union içinde kuruculu üye `%#D' olamaz" + + #: cp/class.c:3192 + msgid "member `%#D' with destructor not allowed in union" + msgstr "union içinde yıkıcılı üye `%#D' olamaz" + + #: cp/class.c:3195 + msgid "member `%#D' with copy assignment operator not allowed in union" + msgstr "union içinde kopya atama iÅŸlemimli üye `%#D' olamaz" + + #: cp/class.c:3222 + msgid "multiple fields in union `%T' initialized" + msgstr "birleÅŸik yapı `%T' içindeki çoklu alanlar ilklendirildi" + + #: cp/class.c:3341 + msgid "field `%D' in local class cannot be static" + msgstr "yerel sınıf içindeki alan `%D' static olamaz" + + #: cp/class.c:3347 + msgid "field `%D' invalidly declared function type" + msgstr "alan `%D' ile geçersiz olarak iÅŸlev türü bildirildi" + + #: cp/class.c:3354 + msgid "field `%D' invalidly declared method type" + msgstr "alan `%D' ile geçersiz olarak yöntem türü bildirildi" + + #: cp/class.c:3360 + msgid "field `%D' invalidly declared offset type" + msgstr "alan `%D' ile geçersiz olarak göreli konum türü bildirildi" + + #. Unions cannot have static members. + #: cp/class.c:3378 + msgid "field `%D' declared static in union" + msgstr "alan `%D' ile birleÅŸik yapı içinde static bildirimi" + + #: cp/class.c:3404 + msgid "non-static reference `%#D' in class without a constructor" + msgstr "bir kurucusuz sınıf içinde static olmayan baÅŸvuru `%#D'" + + #: cp/class.c:3435 + msgid "non-static const member `%#D' in class without a constructor" + msgstr "bir kurucusuz sınıf içinde static olmayan sabit üye `%#D'" + + #: cp/class.c:3450 + msgid "field `%#D' with same name as class" + msgstr "alan `%#D' sınıf ile aynı isimde" + + #: cp/class.c:3468 + msgid "`%#T' has pointer data members" + msgstr "`%#T' gösterge veri üyeleri içeriyor" + + #: cp/class.c:3472 + msgid " but does not override `%T(const %T&)'" + msgstr " ama `%T(const %T&)' ye deÄŸiÅŸtirilmiyor" + + #: cp/class.c:3474 + msgid " or `operator=(const %T&)'" + msgstr " ya da `operator=(const %T&)'" + + #: cp/class.c:3477 + msgid " but does not override `operator=(const %T&)'" + msgstr " ama `operator=(const %T&)' ye deÄŸiÅŸtirilmiyor" + + #: cp/class.c:3943 + msgid "initializer specified for non-virtual method `%D'" + msgstr "sanal olmayan yöntem `%D' için ilklendirici belirtilmiÅŸ" + + #: cp/class.c:4728 + msgid "virtual base `%T' inaccessible in `%T' due to ambiguity" + msgstr "sanal taban `%T' belirsizlikten dolayı `%T' içinde eriÅŸilebilir deÄŸil" + + #: cp/class.c:4798 + msgid "direct base `%T' inaccessible in `%T' due to ambiguity" + msgstr "doÄŸrudan taban `%T' belirsizlikten dolayı `%T' içinde eriÅŸilebilir deÄŸil" + + #: cp/class.c:5225 + msgid "`%#T' has virtual functions but non-virtual destructor" + msgstr "`%#T' sanal olmayan kurucuyla sanal iÅŸlevler içeriyor" + + #: cp/class.c:5309 + msgid "trying to finish struct, but kicked out due to previous parse errors" + msgstr "yapı tamamlanmaya çalışılırken önceki ayrıştırma hatalarından dolayı kesildi" + + #: cp/class.c:5766 + #, c-format + msgid "language string `\"%s\"' not recognized" + msgstr "dil dizgesi `\"%s\"' tanınmıyor" + + #: cp/class.c:5862 + msgid "cannot resolve overloaded function `%D' based on conversion to type `%T'" + msgstr "aşırı yüklü `%D' `%T' türünün dönüşümüne tabanlı olarak çözümlenemiyor" + + #: cp/class.c:5983 + msgid "no matches converting function `%D' to type `%#T'" + msgstr "iÅŸlev `%D'nin `%#T' türüne dönüşümü için eÅŸleÅŸme yok" + + #: cp/class.c:6006 + msgid "converting overloaded function `%D' to type `%#T' is ambiguous" + msgstr "aşırı yüklü iÅŸlev `%D'nin `%#T' türüne dönüşümü belirsiz" + + #: cp/class.c:6032 + msgid "assuming pointer to member `%D'" + msgstr "üye `%D'ye gösterge varsayılıyor" + + #: cp/class.c:6035 + #, c-format + msgid "(a pointer to member can only be formed with `&%E')" + msgstr "(bir üye göstergesi sadece `&%E' ile ÅŸekillendirilebilir)" + + #: cp/class.c:6079 cp/class.c:6247 cp/class.c:6254 + msgid "not enough type information" + msgstr "tür bilgisi yetersiz" + + #: cp/class.c:6088 + msgid "argument of type `%T' does not match `%T'" + msgstr "`%T' türündeki argüman `%T' ile uyumsuz" + + #: cp/class.c:6231 + msgid "invalid operation on uninstantiated type" + msgstr "gerçeklenmemiÅŸ tür üzerindeki iÅŸlem geçersiz" + + #. [basic.scope.class] + #. + #. A name N used in a class S shall refer to the same declaration + #. in its context and when re-evaluated in the completed scope of + #. S. + #: cp/class.c:6483 cp/decl.c:1032 cp/decl.c:3172 cp/pt.c:1842 + msgid "declaration of `%#D'" + msgstr "`%#D' yeniden bildirimi" + + #: cp/class.c:6484 + msgid "changes meaning of `%D' from `%+#D'" + msgstr "`%D' nin (`%+#D' deki) anlamı deÄŸiÅŸiyor" + + #: cp/cvt.c:88 + msgid "can't convert from incomplete type `%T' to `%T'" + msgstr "içi boÅŸ tür `%T' den `%T' ye dönüşüm yapılamaz" + + #: cp/cvt.c:97 + msgid "conversion of `%E' from `%T' to `%T' is ambiguous" + msgstr "`%E' nin `%T' den `%T' ye dönüşümü belirsiz" + + #: cp/cvt.c:126 + msgid "converting from `%T' to `%T'" + msgstr "`%T' den`%T' ye dönüşüm" + + #: cp/cvt.c:198 cp/cvt.c:202 + msgid "pointer to member cast from `%T' to `%T' is via virtual base" + msgstr "`%T' den `%T' ye üye göstergesi çevirimi sanal taban üzerindendir" + + #: cp/cvt.c:220 cp/cvt.c:233 cp/cvt.c:272 + msgid "cannot convert `%E' from type `%T' to type `%T'" + msgstr "`%E' `%T' den `%T' ye çevrilemiyor" + + #: cp/cvt.c:525 + msgid "conversion from `%T' to `%T' discards qualifiers" + msgstr "`%T' den `%T' ye dönüşüm niteleyicileri iptal ediyor" + + #: cp/cvt.c:543 + msgid "casting `%T' to `%T' does not dereference pointer" + msgstr "`%T' den `%T' ye çevirim gösterge referansını kaldırmıyor" + + #: cp/cvt.c:572 + msgid "cannot convert type `%T' to type `%T'" + msgstr "tür `%T' `%T' türüne dönüştürülemiyor" + + #: cp/cvt.c:689 + msgid "conversion from `%#T' to `%#T'" + msgstr "`%#T' den `%#T' ye dönüşüm" + + #: cp/cvt.c:701 + msgid "`%#T' used where a `%T' was expected" + msgstr "`%T' kullanılmış ama `%#T' umulmuÅŸtu" + + #: cp/cvt.c:718 + msgid "the address of `%D', will always be `true'" + msgstr "`%D' nin adresi, daima `true' olacak" + + #: cp/cvt.c:738 + msgid "`%#T' used where a floating point value was expected" + msgstr "bir gerçel sayı deÄŸer gerekirken `%#T' kullanılmış" + + #: cp/cvt.c:793 + msgid "conversion from `%T' to non-scalar type `%T' requested" + msgstr "`%T' türünden skalar olmayan `%T' türüne dönüşüm istendi" + + #: cp/cvt.c:879 + msgid "object of incomplete type `%T' will not be accessed in %s" + msgstr "içi boÅŸ `%T' türündeki nesne, %s içinde eriÅŸimli olmayacak" + + #: cp/cvt.c:882 + msgid "object of type `%T' will not be accessed in %s" + msgstr "`%T' türündeki nesne, %s içinde eriÅŸimli olmayacak" + + #: cp/cvt.c:898 + msgid "object `%E' of incomplete type `%T' will not be accessed in %s" + msgstr "içi boÅŸ `%T' türündeki nesne `%E', %s içinde eriÅŸimli olmayacak" + + #. [over.over] enumerates the places where we can take the address + #. of an overloaded function, and this is not one of them. + #: cp/cvt.c:918 + #, c-format + msgid "%s cannot resolve address of overloaded function" + msgstr "%s aşırı yüklü iÅŸlevin adresini çözümleyemiyor" + + #. Only warn when there is no &. + #: cp/cvt.c:923 + #, c-format + msgid "%s is a reference, not call, to function `%E'" + msgstr "%s iÅŸlev `%E' için çaÄŸrı deÄŸil referanstır" + + #: cp/cvt.c:1061 + msgid "converting NULL to non-pointer type" + msgstr "NULL'dan gösterge olmayan türe dönüşüm" + + #: cp/cvt.c:1137 + msgid "ambiguous default type conversion from `%T'" + msgstr "%T' den öntanımlı türe dönüşüm belirsiz" + + #: cp/cvt.c:1139 + msgid " candidate conversions include `%D' and `%D'" + msgstr " aday dönüşümler `%D' ve `%D' içeriyor " + + #: cp/decl.c:1033 cp/decl.c:3275 + msgid "conflicts with previous declaration `%#D'" + msgstr "`%#D' önceki bildirimiyle çeliÅŸiyor" + + #: cp/decl.c:1222 + msgid "label `%D' used but not defined" + msgstr "etiket `%D' tanımlanmadan kullanılmış" + + #: cp/decl.c:1227 + msgid "label `%D' defined but not used" + msgstr "etiket `%D' tanımlanmış ama kullanılmamış" + + #: cp/decl.c:2294 + msgid "namespace alias `%D' not allowed here, assuming `%D'" + msgstr "burada isim alanı rumuzu `%D' kullanılamaz, `%D' varsayılıyor" + + #: cp/decl.c:3078 cp/decl.c:3483 + msgid "previous declaration of `%D'" + msgstr "`%D'in önceki bildirimi" + + #: cp/decl.c:3159 cp/decl.c:3197 + msgid "shadowing %s function `%#D'" + msgstr "%s iÅŸlev `%#D' yi gölgeliyor" + + #: cp/decl.c:3168 + msgid "library function `%#D' redeclared as non-function `%#D'" + msgstr "kitaplık iÅŸlevi `%#D' iÅŸlev olmayan `%#D' olarak yeniden bildirildi" + + #: cp/decl.c:3173 + msgid "conflicts with built-in declaration `%#D'" + msgstr "`%#D' yerleÅŸik bildirimiyle çeliÅŸiyor" + + #: cp/decl.c:3192 cp/decl.c:3285 cp/decl.c:3301 + msgid "new declaration `%#D'" + msgstr "yeni bildirim `%#D'" + + #: cp/decl.c:3193 + msgid "ambiguates built-in declaration `%#D'" + msgstr "`%#D' yerleÅŸik bildirimi belirsizleÅŸiyor" + + #: cp/decl.c:3249 + msgid "`%#D' redeclared as different kind of symbol" + msgstr "`%#D' farklı bir sembol çeÅŸidi olarak tekrar bildirilmiÅŸ" + + #: cp/decl.c:3252 + msgid "previous declaration of `%#D'" + msgstr "`%#D'in önceki bildirimi" + + #: cp/decl.c:3274 + msgid "declaration of template `%#D'" + msgstr "ÅŸablon bildirimi `%#D'" + + #: cp/decl.c:3286 cp/decl.c:3302 + msgid "ambiguates old declaration `%#D'" + msgstr "`%#D' eski bildirimi belirsizleÅŸiyor" + + #: cp/decl.c:3294 + msgid "declaration of C function `%#D' conflicts with" + msgstr "C iÅŸlevi `%#D' bildirimi ile" + + #: cp/decl.c:3296 + msgid "previous declaration `%#D' here" + msgstr "`%#D'nin önceki bildirimi ile burada çeliÅŸiyor" + + #: cp/decl.c:3312 + msgid "conflicting types for `%#D'" + msgstr "`%#D' için çeliÅŸen türler" + + #: cp/decl.c:3313 + msgid "previous declaration as `%#D'" + msgstr "önceki bildirim `%#D' olarak" + + #: cp/decl.c:3356 + msgid "`%#D' previously defined here" + msgstr "`%#D' evvelce burada tanımlanmış" + + #: cp/decl.c:3357 + msgid "`%#D' previously declared here" + msgstr "`%#D' evvelce burada bildirilmiÅŸ" + + #. Prototype decl follows defn w/o prototype. + #: cp/decl.c:3366 + msgid "prototype for `%#D'" + msgstr "`%#D' için prototip" + + #: cp/decl.c:3367 + msgid "follows non-prototype definition here" + msgstr "burada prototip olmayan tanımdan sonra" + + #: cp/decl.c:3379 + msgid "previous declaration of `%#D' with %L linkage" + msgstr "%L ilintili `%#D' önceki bildirimi" + + #: cp/decl.c:3381 + msgid "conflicts with new declaration with %L linkage" + msgstr "%L ilintili yeni bildirim ile çeliÅŸiyor" + + #: cp/decl.c:3404 cp/decl.c:3411 + msgid "default argument given for parameter %d of `%#D'" + msgstr "`%#D' nin %d. parametresi için verilen öntanımlı argüman" + + #: cp/decl.c:3406 cp/decl.c:3413 + msgid "after previous specification in `%#D'" + msgstr "`%#D' içindeki önceki özellikten sonra" + + #: cp/decl.c:3422 + msgid "`%#D' was used before it was declared inline" + msgstr "`%#D' inline olarak bildirilmeden önce" + + #: cp/decl.c:3424 + msgid "previous non-inline declaration here" + msgstr "önceki inline olmayan bildirimi burada kullanılmış" + + #: cp/decl.c:3482 + msgid "redundant redeclaration of `%D' in same scope" + msgstr "aynı baÄŸlamda `%D'nin yeniden bildirimi anlamsız" + + #: cp/decl.c:3566 + #, c-format + msgid "declaration of `%F' throws different exceptions" + msgstr "`%F' bildirimi farklı olaÄŸandışılıkları yakalıyor" + + #: cp/decl.c:3568 + #, c-format + msgid "than previous declaration `%F'" + msgstr "`%F'in önceki bildiriminden" + + #. From [temp.expl.spec]: + #. + #. If a template, a member template or the member of a class + #. template is explicitly specialized then that + #. specialization shall be declared before the first use of + #. that specialization that would cause an implicit + #. instantiation to take place, in every translation unit in + #. which such a use occurs. + #: cp/decl.c:3701 + msgid "explicit specialization of %D after first use" + msgstr "ilk kullanımından sonra %D'nin doÄŸrudan özelleÅŸtirilmesi" + + #: cp/decl.c:3946 + msgid "`%#D' used prior to declaration" + msgstr "`%#D' bildirim öncesi kullanılmış" + + #: cp/decl.c:3977 + msgid "redeclaration of `wchar_t' as `%T'" + msgstr "`wchar_t' nin `%T' olarak yeniden bildirimi" + + #. A redeclaration of main, but not a duplicate of the + #. previous one. + #. + #. [basic.start.main] + #. + #. This function shall not be overloaded. + #: cp/decl.c:4005 + msgid "invalid redeclaration of `%D'" + msgstr "`%D'in" + + #: cp/decl.c:4006 + msgid "as `%D'" + msgstr "`%D' olarak yeniden bildirimi geçersiz" + + #: cp/decl.c:4096 + msgid "previous external decl of `%#D'" + msgstr "`%D'in önceki dış bildirimi" + + #: cp/decl.c:4137 + msgid "`%D' was previously implicitly declared to return `int'" + msgstr "`%D' önceden dolaylı olarak dönüş deÄŸerine `int' bildirilmiÅŸ" + + #: cp/decl.c:4197 + msgid "extern declaration of `%#D' doesn't match" + msgstr "`%#D' için extern bildirim uyumsuz" + + #: cp/decl.c:4198 + msgid "global declaration `%#D'" + msgstr "`%#D' genel bildirimi" + + #: cp/decl.c:4229 + msgid "declaration of `%#D' shadows a parameter" + msgstr "`%#D' genel bildirimi bir parametreyi gölgeliyor" + + #: cp/decl.c:4249 + #, c-format + msgid "declaration of `%s' shadows a member of `this'" + msgstr "`%s' bildirimi bir `this' üyesini gölgeliyor" + + #: cp/decl.c:4600 + msgid "`%#D' hides constructor for `%#T'" + msgstr "`%#D' `%#T' kurucusunu gizliyor" + + #: cp/decl.c:4615 + msgid "`%#D' conflicts with previous using declaration `%#D'" + msgstr "`%#D' `%#D' bildiriminin önceki kullanımı ile çeliÅŸiyor" + + #: cp/decl.c:4627 + msgid "previous non-function declaration `%#D'" + msgstr "önceki iÅŸlev olmayan bildirim `%#D'" + + #: cp/decl.c:4628 + msgid "conflicts with function declaration `%#D'" + msgstr "iÅŸlev bildirimi `%#D' ile çeliÅŸiyor" + + #: cp/decl.c:4718 + msgid "implicit declaration of function `%#D'" + msgstr "iÅŸlev `%#D' nin örtük bildirimi" + + #: cp/decl.c:4876 + #, c-format + msgid "label `%s' referenced outside of any function" + msgstr "`%s' etiketi her iÅŸlevin dışına referanslı" + + #: cp/decl.c:4979 cp/decl.c:5003 cp/decl.c:5096 + msgid "jump to label `%D'" + msgstr "etiket `%D' ye sıçrama" + + #: cp/decl.c:4981 cp/decl.c:5005 + msgid "jump to case label" + msgstr "case etiketine jump" + + #: cp/decl.c:4989 + msgid " crosses initialization of `%#D'" + msgstr " `%#D' ilklendirmesi çaprazlanıyor" + + #: cp/decl.c:4992 cp/decl.c:5112 + msgid " enters scope of non-POD `%#D'" + msgstr " POD olmayan `%#D' baÄŸlamına giriyor" + + #: cp/decl.c:5012 cp/decl.c:5116 + msgid " enters try block" + msgstr " blok denemesine giriliyor" + + #. Can't skip init of __exception_info. + #: cp/decl.c:5014 cp/decl.c:5108 cp/decl.c:5118 + msgid " enters catch block" + msgstr " tuzak bloÄŸu giriyor" + + #: cp/decl.c:5097 + msgid " from here" + msgstr " buradan" + + #: cp/decl.c:5110 + msgid " skips initialization of `%#D'" + msgstr " `%#D' ilklendirmesi atlanyor" + + #: cp/decl.c:5145 + msgid "label named wchar_t" + msgstr "wchar_t isimli etiket" + + #: cp/decl.c:5149 + msgid "duplicate label `%D'" + msgstr "yinlenmiÅŸ etiket `%D'" + + #: cp/decl.c:5234 + #, c-format + msgid "case label `%E' not within a switch statement" + msgstr "case etiketi `%E' bir switch deyimi içinde deÄŸil" + + #. Definition isn't the kind we were looking for. + #: cp/decl.c:5411 cp/decl.c:5430 + msgid "`%#D' redeclared as %C" + msgstr "`%#D' %C olarak yeniden bildirilmiÅŸ" + + #. This happens for A::B where B is a template, and there are no + #. template arguments. + #: cp/decl.c:5518 cp/typeck.c:1980 + msgid "invalid use of `%D'" + msgstr "`%D' kullanımı geçersiz" + + #: cp/decl.c:5559 + msgid "`%D::%D' is not a template" + msgstr "`%D::%D' bir ÅŸablon deÄŸil" + + #: cp/decl.c:5576 + msgid "`%D' undeclared in namespace `%D'" + msgstr "`%D' isim alanı `%D' içinde bildirimsiz" + + #: cp/decl.c:5713 + msgid "`%D' used without template parameters" + msgstr "`%D' ÅŸablon parametreleri olmaksızın kullanılmış" + + #: cp/decl.c:5724 cp/decl.c:5740 cp/decl.c:5828 + msgid "no class template named `%#T' in `%#T'" + msgstr "`%#T' isimli sınıf ÅŸablonu `%#T' içinde yok" + + #: cp/decl.c:5758 cp/decl.c:5788 + msgid "no type named `%#T' in `%#T'" + msgstr "`%#T' içindeki `%#T' ismindeki tür bilinmiyor" + + #: cp/decl.c:6011 + msgid "lookup of `%D' finds `%#D'" + msgstr "`%D' araması `%#D' buluyor" + + #: cp/decl.c:6013 + msgid " instead of `%D' from dependent base class" + msgstr " bağımlı taban sınıftan `%D' yerine" + + #: cp/decl.c:6015 + msgid " (use `typename %T::%D' if that's what you meant)" + msgstr " (eÄŸer bu anlamda kullandıysanız `typename %T::%D' kullanın)" + + #: cp/decl.c:6188 + msgid "lookup of `%D' in the scope of `%#T' (`%#D') does not match lookup in the current scope (`%#D')" + msgstr "`%D' nin `%#T' (`%#D') baÄŸlamındaki araması ÅŸu anki baÄŸlam (`%#D') içindeki arama ile uyuÅŸmuyor" + + #: cp/decl.c:7033 + msgid "an anonymous union cannot have function members" + msgstr "bir anonim birleÅŸik yapı iÅŸlev üyeler barındıramaz" + + #: cp/decl.c:7050 + msgid "member %#D' with constructor not allowed in anonymous aggregate" + msgstr "kuruculu üye %#D' anonim kümeleme içinde kullanılamaz" + + #: cp/decl.c:7053 + msgid "member %#D' with destructor not allowed in anonymous aggregate" + msgstr "yıkıcılı üye %#D' anonim kümeleme içinde kullanılamaz" + + #: cp/decl.c:7056 + msgid "member %#D' with copy assignment operator not allowed in anonymous aggregate" + msgstr "kopya atama iÅŸlemimli üye %#D' anonim kümeleme içinde kullanılamaz" + + #: cp/decl.c:7094 + msgid "redeclaration of C++ built-in type `%T'" + msgstr "C++ yerleÅŸik türü `%T' için yeniden bildirim" + + #: cp/decl.c:7129 + msgid "multiple types in one declaration" + msgstr "bir bildirimde birden fazla tür bidirilmiÅŸ" + + #: cp/decl.c:7132 + msgid "declaration does not declare anything" + msgstr "bildirim hiçbir ÅŸey bildirmiyor" + + #: cp/decl.c:7156 + msgid "missing type-name in typedef-declaration" + msgstr "typedef bildiriminde tür ismi eksik" + + #: cp/decl.c:7163 + msgid "ISO C++ prohibits anonymous structs" + msgstr "ISO C++ anonim yapıları (struct) yasaklar" + + #: cp/decl.c:7170 + msgid "`%D' can only be specified for functions" + msgstr "`%D' sadece iÅŸlevler için belirtilebilir" + + #: cp/decl.c:7172 + msgid "`%D' can only be specified inside a class" + msgstr "`%D' sadece bir sınıf içinde belirtilebilir" + + #: cp/decl.c:7174 + msgid "`%D' can only be specified for constructors" + msgstr "`%D' sadece kurucular için belirtilebilir" + + #: cp/decl.c:7177 + msgid "`%D' can only be specified for objects and functions" + msgstr "`%D' sadece iÅŸlevler ve nesneler için belirtilebilir" + + #: cp/decl.c:7326 + msgid "typedef `%D' is initialized" + msgstr "typedef `%D' ilklendirilmiÅŸ" + + #: cp/decl.c:7332 + msgid "function `%#D' is initialized like a variable" + msgstr "`%D' iÅŸlevi bir deÄŸiÅŸken gibi ilklendirilmiÅŸ" + + #: cp/decl.c:7344 + msgid "declaration of `%#D' has `extern' and is initialized" + msgstr "`%#D' hem `extern' olarak bildirilmiÅŸ hem de ilklendirilmiÅŸ" + + #: cp/decl.c:7378 + msgid "`%#D' is not a static member of `%#T'" + msgstr "`%#D' `%#T'nin bir static üyesi deÄŸildir" + + #: cp/decl.c:7383 + msgid "ISO C++ does not permit `%T::%D' to be defined as `%T::%D'" + msgstr "ISO C++ `%T::%D' nin `%T::%D' olarak tanımlanmasına izin vermez" + + #: cp/decl.c:7394 + msgid "duplicate initialization of %D" + msgstr "%D nin yinelenmiÅŸ ilklendirmesi" + + #: cp/decl.c:7423 + msgid "declaration of `%#D' outside of class is not definition" + msgstr "sınıf dışında `%#D' bildirimi bir tanımlama deÄŸil" + + #: cp/decl.c:7471 + msgid "variable `%#D' has initializer but incomplete type" + msgstr "`%#D' deÄŸiÅŸkeni ilklendirilmiÅŸ ama içi boÅŸ türde" + + #: cp/decl.c:7479 cp/decl.c:7830 + msgid "elements of array `%#D' have incomplete type" + msgstr "`%#D' dizisinin elemanları içi boÅŸ türde" + + #: cp/decl.c:7495 + msgid "aggregate `%#D' has incomplete type and cannot be defined" + msgstr "küme `%#D' içi boÅŸ türde ve tanımlı olamaz" + + #: cp/decl.c:7534 + msgid "`%D' declared as reference but not initialized" + msgstr "`%D' referans olarak bildirilmiÅŸ ama ilklendirilmemiÅŸ" + + #: cp/decl.c:7543 + msgid "ISO C++ forbids use of initializer list to initialize reference `%D'" + msgstr "ISO C++ referans`%D' ilklendiren ilklendirici listesi kullanımına izin vermez" + + #: cp/decl.c:7576 + msgid "cannot initialize `%T' from `%T'" + msgstr "`%T' `%T' den ilklendirilemez" + + #: cp/decl.c:7637 + msgid "initializer fails to determine size of `%D'" + msgstr "ilklendirici `%D' nin boyutunu saptayamıyor" + + #: cp/decl.c:7642 + msgid "array size missing in `%D'" + msgstr "`%D' de dizi boyutu eksik" + + #: cp/decl.c:7654 + msgid "zero-size array `%D'" + msgstr "sıfır boyutlu dizi `%D'" + + #. An automatic variable with an incomplete type: that is an error. + #. Don't talk about array types here, since we took care of that + #. message in grokdeclarator. + #: cp/decl.c:7687 + msgid "storage size of `%D' isn't known" + msgstr "`%D' nin saklama uzunluÄŸu bilinmiyor" + + #: cp/decl.c:7709 + msgid "storage size of `%D' isn't constant" + msgstr "`%D' nin saklama geniÅŸliÄŸi sabit deÄŸil" + + #: cp/decl.c:7760 + msgid "sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)" + msgstr "özür: özümleme iÅŸlevi static verisi `%#D' nin cevabı yanlış (sizi çoklu kopyalara sürükleyecek)" + + #: cp/decl.c:7761 + msgid " you can work around this by removing the initializer" + msgstr " bunu ilklendiricileri kaldırarak aÅŸabilirsiniz" + + #: cp/decl.c:7789 + msgid "uninitialized const `%D'" + msgstr "ilklendirilmemiÅŸ sabit `%D'" + + #: cp/decl.c:7824 + msgid "variable-sized object `%D' may not be initialized" + msgstr "deÄŸiÅŸken-uzunluklu nesne `%D' ilklendirilmiÅŸ olmayabilir" + + #: cp/decl.c:7835 cp/typeck2.c:201 + msgid "`%D' has incomplete type" + msgstr "`%s' içi boÅŸ türde" + + #: cp/decl.c:7867 + msgid "`%D' must be initialized by constructor, not by `{...}'" + msgstr "`%D'bir kurucu ile ilklendirilmeli, `{...}' ile deÄŸil" + + #: cp/decl.c:7897 + msgid "structure `%D' with uninitialized const members" + msgstr "ilklendirmesiz sabit üyelerle `%D' yapısı" + + #: cp/decl.c:7899 + msgid "structure `%D' with uninitialized reference members" + msgstr "ilklendirmesiz referans üyelerle `%D' yapısı" + + #: cp/decl.c:8166 + msgid "assignment (not initialization) in declaration" + msgstr "bildirim içinde atama (ilklendirme deÄŸil)" + + #: cp/decl.c:8178 + msgid "cannot initialize `%D' to namespace `%D'" + msgstr "`%D' isim alanı `%D' olarak ilklendirilemez" + + #: cp/decl.c:8235 + msgid "shadowing previous type declaration of `%#D'" + msgstr "`%#D'in önceki gölgeleyen tür bildirimi" + + #: cp/decl.c:8631 + msgid "multiple initializations given for `%D'" + msgstr "`%D' için çoklu ilklendiriciler belirtilmiÅŸ" + + #: cp/decl.c:8731 + msgid "invalid catch parameter" + msgstr "yakalama parametresi geçersiz" + + #: cp/decl.c:8849 + msgid "destructor for alien class `%T' cannot be a member" + msgstr "yabancı sınıf `%T' için yıkıcı, bir üye olamaz" + + #: cp/decl.c:8852 + msgid "constructor for alien class `%T' cannot be a member" + msgstr "yabancı sınıf `%T' için kurucu, bir üye olamaz" + + #: cp/decl.c:8871 + msgid "`%D' declared as a `virtual' %s" + msgstr "`%D' bir `virtual' %s olarak bildirilmiÅŸ" + + #: cp/decl.c:8873 + msgid "`%D' declared as an `inline' %s" + msgstr "`%D' alanı bir `inline' %s olarak bildirilmiÅŸ" + + #: cp/decl.c:8875 + msgid "`const' and `volatile' function specifiers on `%D' invalid in %s declaration" + msgstr "%s bildirimindeki `const' ve `volatile' iÅŸlev belirteçleri `%D' için geçersiz" + + #: cp/decl.c:8878 + msgid "`%D' declared as a friend" + msgstr "`%D' bir kardeÅŸ olarak bildirilmiÅŸ" + + #: cp/decl.c:8884 + msgid "`%D' declared with an exception specification" + msgstr "`%D' bir olaÄŸandışılık özelliÄŸiyle bildirilmiÅŸ" + + #: cp/decl.c:8959 + msgid "cannot declare `::main' to be a template" + msgstr "`::main' bir ÅŸablon olarak bildirilemez" + + #: cp/decl.c:8961 + msgid "cannot declare `::main' to be inline" + msgstr "`::main' inline olarak bildirilemez" + + #: cp/decl.c:8963 + msgid "cannot declare `::main' to be static" + msgstr "::main' «static» olarak bildirilemez" + + #: cp/decl.c:8966 + msgid "`main' must return `int'" + msgstr "`main', `int' döndürmeli" + + #: cp/decl.c:8994 + msgid "non-local function `%#D' uses anonymous type" + msgstr "yerel olmayan iÅŸlev `%#D' anonim tür kullanıyor" + + #: cp/decl.c:8997 + msgid "`%#D' does not refer to the unqualified type, so it is not used for linkage" + msgstr "`%#D' niteliksiz türe baÅŸvurmuyor, bu durumda ilintileme için kullanılmamıştır" + + #: cp/decl.c:9003 + msgid "non-local function `%#D' uses local type `%T'" + msgstr "yerel olmayan iÅŸlev `%#D' yerel tür `%T' kullanıyor" + + #: cp/decl.c:9026 + msgid "%smember function `%D' cannot have `%T' method qualifier" + msgstr "%smember function `%D', `%T' yöntem niteleyicisini içeremez" + + #: cp/decl.c:9050 + msgid "defining explicit specialization `%D' in friend declaration" + msgstr "kardeÅŸ bildirimlerde doÄŸrudan özelleÅŸtirme `%D' tanımlanıyor" + + #. Something like `template friend void f()'. + #: cp/decl.c:9060 + msgid "invalid use of template-id `%D' in declaration of primary template" + msgstr "birincil ÅŸablon bildiriminde ÅŸablon kimliÄŸi `%D' kullanımı geçersiz" + + #: cp/decl.c:9088 + msgid "default arguments are not allowed in declaration of friend template specialization `%D'" + msgstr "kardeÅŸ ÅŸablon özelleÅŸtirmesi `%D' bildiriminde öntanımlı argümalar kullanılamaz" + + #: cp/decl.c:9095 + msgid "`inline' is not allowed in declaration of friend template specialization `%D'" + msgstr "kardeÅŸ ÅŸablon özelleÅŸtirmesi `%D' bildiriminde `inline' kullanılamaz" + + #: cp/decl.c:9157 + msgid "definition of implicitly-declared `%D'" + msgstr "dolaylı bildirimli `%D' tanımı" + + #: cp/decl.c:9169 cp/decl2.c:1367 + msgid "no `%#D' member function declared in class `%T'" + msgstr "sınıf `%T' içinde bildirilmiÅŸ `%#D' diye bir üye iÅŸlev yok" + + #: cp/decl.c:9288 + msgid "non-local variable `%#D' uses local type `%T'" + msgstr "yerel olmayan deÄŸiÅŸken`%#D' yerel tür `%T' kullanıyor" + + #: cp/decl.c:9378 + msgid "invalid in-class initialization of static data member of non-integral type `%T'" + msgstr "tümleyen olmayan `%T türündeki statik veri üyesinin sınıf içi ilklendirmesi geçersiz" + + #: cp/decl.c:9387 + msgid "ISO C++ forbids in-class initialization of non-const static member `%D'" + msgstr "ISO C++ sabit olmayan statik üye `%D' nin sınıf içi ilklendirmesine izin vermez" + + #: cp/decl.c:9390 + msgid "ISO C++ forbids initialization of member constant `%D' of non-integral type `%T'" + msgstr "ISO C++ tümleyen olmayan `%T türündeki üye sabiti `%D' nin ilklendirilmesine izin vermez" + + #: cp/decl.c:9440 + msgid "size of array `%D' has non-integer type" + msgstr "`%D' dizisinin boyutu tamsayı deÄŸil" + + #: cp/decl.c:9442 + msgid "size of array has non-integer type" + msgstr "dizi boyutu tamsayı deÄŸil" + + #: cp/decl.c:9462 + msgid "size of array `%D' is negative" + msgstr "`%D' dizisinin boyutu negatif" + + #: cp/decl.c:9464 + msgid "size of array is negative" + msgstr "dizi boyutu negatif" + + #: cp/decl.c:9473 + msgid "ISO C++ forbids zero-size array `%D'" + msgstr "ISO C++ da sıfır boyutlu dizi `%D' yasaktır" + + #: cp/decl.c:9475 + msgid "ISO C++ forbids zero-size array" + msgstr "ISO C++ da sıfır boyutlu dizi yasaktır" + + #: cp/decl.c:9482 + msgid "size of array `%D' is not an integral constant-expression" + msgstr "`%D' dizisinin boyutu bir tümleyen sabitli ifade deÄŸil" + + #: cp/decl.c:9485 + msgid "size of array is not an integral constant-expression" + msgstr "dizi boyutu bir tümleyen sabitli ifade deÄŸil" + + #: cp/decl.c:9503 + msgid "ISO C++ forbids variable-size array `%D'" + msgstr "ISO C++ da deÄŸiÅŸken boyutlu dizi `%D' yasaktır" + + #: cp/decl.c:9506 + msgid "ISO C++ forbids variable-size array" + msgstr "ISO C++ da deÄŸiÅŸken boyutlu dizi yasaktır" + + #: cp/decl.c:9517 + msgid "overflow in array dimension" + msgstr "dizi boyutunda taÅŸma" + + #: cp/decl.c:9576 + msgid "declaration of `%D' as %s" + msgstr "`%D' %s olarak bildirilmiÅŸ" + + #: cp/decl.c:9578 + #, c-format + msgid "creating %s" + msgstr "%s oluÅŸturuluyor" + + #: cp/decl.c:9590 + msgid "declaration of `%D' as multidimensional array must have bounds for all dimensions except the first" + msgstr "çok boyutlu dizi olarak `%D' bildiriminde ilki dışında tüm boyutlar sınırlanmış olmalıdır" + + #: cp/decl.c:9593 + msgid "multidimensional array must have bounds for all dimensions except the first" + msgstr "çok boyutlu dizi bildiriminde ilki dışında tüm boyutlar sınırlanmış olmalıdır" + + #: cp/decl.c:9622 + msgid "return type specification for constructor invalid" + msgstr "kurucu için dönen deÄŸer tür özelliÄŸi geçersiz" + + #: cp/decl.c:9629 + msgid "return type specification for destructor invalid" + msgstr "yıkıcı için dönen deÄŸer tür özelliÄŸi geçersiz" + + #: cp/decl.c:9635 + msgid "operator `%T' declared to return `%T'" + msgstr "iÅŸlemimi `%T' dönüş `%T' ye bildirimli" + + #: cp/decl.c:9637 + msgid "return type specified for `operator %T'" + msgstr "`operator %T' için dönüş türü belirtilmiÅŸ" + + #: cp/decl.c:9805 + msgid "destructors must be member functions" + msgstr "yıkıcılar üye iÅŸlevler olmalıdır" + + #: cp/decl.c:9824 + msgid "destructor `%T' must match class name `%T'" + msgstr "yıkıcı `%T' sınıf ismi `%T' ile eÅŸleÅŸmeli" + + #: cp/decl.c:9874 + msgid "invalid declarator" + msgstr "bildirim geçersiz" + + #: cp/decl.c:9927 + msgid "declarator-id missing; using reserved word `%D'" + msgstr "bildirmci kimliÄŸi eksik; saklı yedek sözcük `%D' kullanılıyor" + + #: cp/decl.c:9984 + msgid "type `%T' is not derived from type `%T'" + msgstr "tür `%T' `%T' türünden türetilmemiÅŸ" + + #. Parse error puts this typespec where + #. a declarator should go. + #: cp/decl.c:10030 + msgid "`%T' specified as declarator-id" + msgstr "`%T' bildirici kimliÄŸi olarak belirtilmiÅŸ" + + #: cp/decl.c:10032 + msgid " perhaps you want `%T' for a constructor" + msgstr " ihtimal ki bir kurucu için `%T' istiyorsunuz" + + #: cp/decl.c:10046 + msgid "`%D' as declarator" + msgstr "bildirici olarak `%D'" + + #: cp/decl.c:10061 + msgid "declaration of `%D' as non-function" + msgstr "`%D' nin iÅŸlev olmayan olarak bildirimi" + + #: cp/decl.c:10138 + msgid "`bool' is now a keyword" + msgstr "bool' ÅŸimdi bir anahtar sözcüktür" + + #: cp/decl.c:10140 + msgid "extraneous `%T' ignored" + msgstr "fazlalık `%T' yoksayıldı" + + #: cp/decl.c:10156 cp/decl.c:10189 + msgid "multiple declarations `%T' and `%T'" + msgstr "`%T' ve `%T' çoklu bildirimleri" + + #: cp/decl.c:10169 + msgid "ISO C++ does not support `long long'" + msgstr "ISO C++, `long long' desteklemiyor" + + #: cp/decl.c:10262 cp/decl.c:10265 + #, c-format + msgid "ISO C++ forbids declaration of `%s' with no type" + msgstr "ISO C++ da türsüz `%s' bildirimine izin verilmez" + + #. The implicit typename extension is deprecated and will be + #. removed. Warn about its use now. + #: cp/decl.c:10275 + msgid "`%T' is implicitly a typename" + msgstr "`%T' dolaylı bir tür ismidir" + + #: cp/decl.c:10311 + #, c-format + msgid "short, signed or unsigned invalid for `%s'" + msgstr "`%s' için 'short', 'signed' veya 'unsigned' geçersiz" + + #: cp/decl.c:10316 + #, c-format + msgid "long and short specified together for `%s'" + msgstr "`%s' için 'long' ve 'short' birlikte belirtilmiÅŸ" + + #: cp/decl.c:10327 + #, c-format + msgid "signed and unsigned given together for `%s'" + msgstr "`%s' için 'signed' ve 'unsigned' birlikte verilmiÅŸ" + + #: cp/decl.c:10436 + msgid "qualifiers are not allowed on declaration of `operator %T'" + msgstr "`operator %T' bildiriminde niteleyicilere izin verilmez" + + #: cp/decl.c:10458 + msgid "member `%D' cannot be declared both virtual and static" + msgstr "üye `%D', hem virtual hem de static olarak bildirilemez" + + #: cp/decl.c:10467 + msgid "`%T::%D' is not a valid declarator" + msgstr "`%T::%D' geçerli bir bildirici deÄŸil" + + #: cp/decl.c:10478 + msgid "storage class specifiers invalid in parameter declarations" + msgstr "saklatım öbeÄŸi belirteçleri parametre bildirimi içinde geçersiz" + + #: cp/decl.c:10482 + msgid "typedef declaration invalid in parameter declaration" + msgstr "«typedef» bildirimi parametre bildirimi içinde geçersiz" + + #: cp/decl.c:10495 + msgid "virtual outside class declaration" + msgstr "sanal dış öbek bildirimi" + + #: cp/decl.c:10549 + #, c-format + msgid "storage class specified for %s `%s'" + msgstr "%s için saklatım öbeÄŸi `%s' belirtilmiÅŸ" + + #: cp/decl.c:10587 + msgid "storage class specifiers invalid in friend function declarations" + msgstr "saklatım öbeÄŸi belirteçleri dost iÅŸlev bildirimleri içinde geçersiz" + + #: cp/decl.c:10691 + msgid "size of member `%D' is not constant" + msgstr "üye `%D' boyutu bir sabit deÄŸil" + + #: cp/decl.c:10770 + msgid "destructor cannot be static member function" + msgstr "yıkıcı, statik üye iÅŸlevi olamaz" + + #: cp/decl.c:10773 + #, c-format + msgid "destructors may not be `%s'" + msgstr "yıkıcılar `%s' olmayabilir" + + #: cp/decl.c:10794 + msgid "constructor cannot be static member function" + msgstr "kurucu, statik üye iÅŸlevi olamaz" + + #: cp/decl.c:10797 + msgid "constructors cannot be declared virtual" + msgstr "kurucular virtual olarak bildirilemez" + + #: cp/decl.c:10802 + #, c-format + msgid "constructors may not be `%s'" + msgstr "kurucular `%s' olmayabilir" + + #: cp/decl.c:10812 + msgid "return value type specifier for constructor ignored" + msgstr "kurucu için dönen deÄŸer tür belirteci yoksayıldı" + + #: cp/decl.c:10831 + #, c-format + msgid "can't initialize friend function `%s'" + msgstr "kardeÅŸ iÅŸlev `%s' ilklendirilemiyor" + + #. Cannot be both friend and virtual. + #: cp/decl.c:10835 + msgid "virtual functions cannot be friends" + msgstr "sanal iÅŸlevler kardeÅŸ iÅŸlev olamaz" + + #: cp/decl.c:10840 + msgid "friend declaration not in class definition" + msgstr "kardeÅŸ bildirimi sınıf bildiriminde deÄŸil" + + #: cp/decl.c:10842 + #, c-format + msgid "can't define friend function `%s' in a local class definition" + msgstr "yerel sınıf tanımı içinde kardeÅŸ iÅŸlev `%s' tanımlanamaz" + + #: cp/decl.c:10866 + msgid "destructors may not have parameters" + msgstr "yıkıcılar parametre almaz" + + #: cp/decl.c:10896 + #, c-format + msgid "cannot declare %s to references" + msgstr "%s referanslara bildirilemez" + + #: cp/decl.c:10907 + msgid "cannot declare pointer to `%#T' member" + msgstr "`%#T' üyeye gösterge bildirilemez" + + #: cp/decl.c:10922 + msgid "invalid type: `void &'" + msgstr "geçersiz tür: `void &'" + + #: cp/decl.c:11084 + msgid "extra qualification `%T::' on member `%s' ignored" + msgstr "fazladan niteleme `%T::' üye `%s' üzerinde yoksayıldı" + + #: cp/decl.c:11094 + msgid "cannot declare member function `%T::%s' within `%T'" + msgstr "üye iÅŸlev `%T::%s' `%T' içinde bildirilemez" + + #: cp/decl.c:11109 + msgid "cannot declare member `%T::%s' within `%T'" + msgstr "üye `%T::%s' `%T' içinde bildirilemez" + + #. [dcl.fct.spec] The explicit specifier shall only be used in + #. declarations of constructors within a class definition. + #: cp/decl.c:11189 + msgid "only declarations of constructors can be `explicit'" + msgstr "sadece kurucuların bildirimleri `explicit' olabilir" + + #: cp/decl.c:11197 + #, c-format + msgid "non-member `%s' cannot be declared `mutable'" + msgstr "üye olmayan `%s', `mutable' olarak bildirilemez" + + #: cp/decl.c:11202 + #, c-format + msgid "non-object member `%s' cannot be declared `mutable'" + msgstr "nesne olmayan `%s' `mutable' olarak bildirilemez" + + #: cp/decl.c:11208 + #, c-format + msgid "function `%s' cannot be declared `mutable'" + msgstr "iÅŸlev `%s' `mutable' olarak bildirilemez" + + #: cp/decl.c:11213 + #, c-format + msgid "static `%s' cannot be declared `mutable'" + msgstr "static `%s' `mutable' olarak bildirilemez" + + #: cp/decl.c:11218 + #, c-format + msgid "const `%s' cannot be declared `mutable'" + msgstr "const `%s' `mutable' olarak bildirilemez" + + #: cp/decl.c:11231 + msgid "template-id `%D' used as a declarator" + msgstr "ÅŸablon kimliÄŸi `%D' bir bildirici olarak kullanılmış" + + #: cp/decl.c:11252 + msgid "ISO C++ forbids nested type `%D' with same name as enclosing class" + msgstr "ISO C++ zarflayan sınıf ile aynı isimde yuvalanmış tür `%D' ye izin vermez" + + #: cp/decl.c:11299 + msgid "typedef name may not be class-qualified" + msgstr "typedef ismi sınıf nitelemeli olmayabilir" + + #: cp/decl.c:11307 + msgid "invalid type qualifier for non-member function type" + msgstr "üyesiz iÅŸlev türleri için tür niteleyici geçersiz" + + #: cp/decl.c:11323 + msgid "typedef declaration includes an initializer" + msgstr "typedef bildirimi bir ilklendirici içeriyor" + + #: cp/decl.c:11373 + msgid "type qualifiers specified for friend class declaration" + msgstr "kardeÅŸ sınıf bildirimi için tür niteleyiciler belirtilmiÅŸ" + + #: cp/decl.c:11378 + msgid "`inline' specified for friend class declaration" + msgstr "hardeÅŸ sınıf bildirimi için `inline' belirtilmiÅŸ" + + #: cp/decl.c:11388 + msgid "template parameters cannot be friends" + msgstr "ÅŸablon parametreleri kardeÅŸler olamaz" + + #: cp/decl.c:11390 + msgid "friend declaration requires class-key, i.e. `friend class %T::%T'" + msgstr "kardeÅŸ bildirimi sınıf anahtarı gerektirir, `friend class %T::%T' gibi" + + #: cp/decl.c:11395 + msgid "friend declaration requires class-key, i.e. `friend %#T'" + msgstr "kardeÅŸ bildirimi `friend %#T' gibi bir sınıf anahtarı gerektirir" + + #: cp/decl.c:11409 + msgid "trying to make class `%T' a friend of global scope" + msgstr "sınıf `%T' genel baÄŸlamın kardeÅŸi yapılmaya çalışılıyor" + + #: cp/decl.c:11420 + msgid "invalid qualifiers on non-member function type" + msgstr "üyesiz iÅŸlev türünde geçersiz niteleyici" + + #: cp/decl.c:11439 + msgid "abstract declarator `%T' used as declaration" + msgstr "mutlak bildirimci `%T' bildirim olarak kullanılmış" + + #: cp/decl.c:11451 + msgid "unnamed variable or field declared void" + msgstr "adsız deÄŸiÅŸken ya da alan void olarak bildirilmiÅŸ" + + #: cp/decl.c:11460 + msgid "variable or field declared void" + msgstr "deÄŸiÅŸken ya da alan void olarak bildirilmiÅŸ" + + #: cp/decl.c:11470 + msgid "cannot use `::' in parameter declaration" + msgstr "parametre bildiriminde `::' kullanılamaz" + + #. Something like struct S { int N::j; }; + #: cp/decl.c:11516 + msgid "invalid use of `::'" + msgstr "`::' kullanımı geçersiz" + + #: cp/decl.c:11528 + msgid "function `%D' cannot be declared friend" + msgstr "iÅŸlev `%D' kardeÅŸ olarak bildirilemez" + + #: cp/decl.c:11540 + msgid "can't make `%D' into a method -- not in a class" + msgstr "bir yöntem içinde `%D' yapılamaz -- sınıf içinde deÄŸil" + + #: cp/decl.c:11549 + msgid "function `%D' declared virtual inside a union" + msgstr "iÅŸlev `%D' bir birleÅŸik yapı içinde virtual olarak bildirilmiÅŸ" + + #: cp/decl.c:11561 + msgid "`%D' cannot be declared virtual, since it is always static" + msgstr "`%D' daima static olduÄŸundan sanal bildirilemez" + + #: cp/decl.c:11634 + msgid "field `%D' has incomplete type" + msgstr "`%D' alanı içi boÅŸ türde" + + #: cp/decl.c:11636 + msgid "name `%T' has incomplete type" + msgstr "isim `%T' içi boÅŸ türde" + + #: cp/decl.c:11645 + msgid " in instantiation of template `%T'" + msgstr " ÅŸablon `%T' gerçeklemesinde" + + #: cp/decl.c:11655 + #, c-format + msgid "`%s' is neither function nor member function; cannot be declared friend" + msgstr "`%s' ne iÅŸlev ne de üye iÅŸlev; kardeÅŸ olarak bildirilemez" + + #: cp/decl.c:11666 + msgid "member functions are implicitly friends of their class" + msgstr "üye iÅŸlevler sınıflarının örtük kardeÅŸleridir" + + #. An attempt is being made to initialize a non-static + #. member. But, from [class.mem]: + #. + #. 4 A member-declarator can contain a + #. constant-initializer only if it declares a static + #. member (_class.static_) of integral or enumeration + #. type, see _class.static.data_. + #. + #. This used to be relatively common practice, but + #. the rest of the compiler does not correctly + #. handle the initialization unless the member is + #. static so we make it static below. + #: cp/decl.c:11713 + msgid "ISO C++ forbids initialization of member `%D'" + msgstr "ISO C++ üye `%D' ilklendirmesine izin vermez" + + #: cp/decl.c:11715 + msgid "making `%D' static" + msgstr "`%D' static yapılıyor" + + #: cp/decl.c:11739 + msgid "ISO C++ forbids static data member `%D' with same name as enclosing class" + msgstr "ISO C++ zarflayan sınıf ile aynı isimde statik veri üyesi `%D' ye izin vermez" + + #: cp/decl.c:11780 + #, c-format + msgid "storage class `auto' invalid for function `%s'" + msgstr "saklama sınıfı `auto' `%s' iÅŸlevi için geçersiz" + + #: cp/decl.c:11782 + #, c-format + msgid "storage class `register' invalid for function `%s'" + msgstr "saklama sınıfı `register' `%s' iÅŸlevi için geçersiz" + + #: cp/decl.c:11793 + #, c-format + msgid "storage class `static' invalid for function `%s' declared out of global scope" + msgstr "saklama sınıfı `static' genel kapsam dışı bildirilmiÅŸ iÅŸlev `%s' için geçersiz" + + #: cp/decl.c:11795 + #, c-format + msgid "storage class `inline' invalid for function `%s' declared out of global scope" + msgstr "`inline' saklama sınıfı, genel kapsam dışında bildirilen `%s' iÅŸlevi için geçersiz" + + #: cp/decl.c:11802 + #, c-format + msgid "virtual non-class function `%s'" + msgstr "sanal sınıf olmayan iÅŸlev `%s'" + + #: cp/decl.c:11831 + msgid "cannot declare member function `%D' to have static linkage" + msgstr "üye iÅŸlev `%D' static ilintilemeli olarak bildirilemez" + + #. FIXME need arm citation + #: cp/decl.c:11837 + msgid "cannot declare static function inside another function" + msgstr "statik iÅŸlev diÄŸer bir iÅŸlevin içinde bildirilemez" + + #: cp/decl.c:11865 + msgid "`static' may not be used when defining (as opposed to declaring) a static data member" + msgstr "`static' bir statik veri üyesini tanımlarken (bildirime zıt olarak) kullanılamayabilir" + + #: cp/decl.c:11871 + msgid "static member `%D' declared `register'" + msgstr "statik üye `%D' `register' olarak bildirilmiÅŸ" + + #: cp/decl.c:11876 + msgid "cannot explicitly declare member `%#D' to have extern linkage" + msgstr "üye `%#D' dış ilintilemeye sahip olacak ÅŸekilde doÄŸrudan bildirilemez" + + #: cp/decl.c:12048 + msgid "default argument for `%#D' has type `%T'" + msgstr "`%#D' için öntanımlı argüman `%T' türünde" + + #: cp/decl.c:12051 + msgid "default argument for parameter of type `%T' has type `%T'" + msgstr "`%T' türündeki parametrenin öntanımlı argümanı `%T' türünde" + + #: cp/decl.c:12068 + msgid "default argument `%E' uses local variable `%D'" + msgstr "öntanımlı argüman `%E' yerel deÄŸiÅŸken `%D' yi kullanıyor" + + #: cp/decl.c:12113 + #, c-format + msgid "invalid string constant `%E'" + msgstr "geçersiz dizge sabit `%E'" + + #: cp/decl.c:12115 + msgid "invalid integer constant in parameter list, did you forget to give parameter name?" + msgstr "parametre listesindeki tamsayı sabit geçersiz, parametre ismi vermeyi unuttunuz mu?" + + #: cp/decl.c:12153 + msgid "parameter `%D' invalidly declared method type" + msgstr "parametre `%D' geçersiz olarak yöntem türünde bildirilmiÅŸ" + + #: cp/decl.c:12159 + msgid "parameter `%D' invalidly declared offset type" + msgstr "parametre `%D' geçersiz olarak göreli konum türünde bildirilmiÅŸ" + + #: cp/decl.c:12183 + msgid "parameter `%D' includes %s to array of unknown bound `%T'" + msgstr "parametre `%D' bilinmeyen `%T' sınırlı diziye %s içeriyor" + + #. [class.copy] + #. + #. A declaration of a constructor for a class X is ill-formed if + #. its first parameter is of type (optionally cv-qualified) X + #. and either there are no other parameters or else all other + #. parameters have default arguments. + #. + #. We *don't* complain about member template instantiations that + #. have this form, though; they can occur as we try to decide + #. what constructor to use during overload resolution. Since + #. overload resolution will never prefer such a constructor to + #. the non-template copy constructor (which is either explicitly + #. or implicitly defined), there's no need to worry about their + #. existence. Theoretically, they should never even be + #. instantiated, but that's hard to forestall. + #: cp/decl.c:12350 + msgid "invalid constructor; you probably meant `%T (const %T&)'" + msgstr "kurucu geçersiz; `%T (const %T&)' anlamında kullandınız galiba" + + #: cp/decl.c:12501 + msgid "`%D' must be a nonstatic member function" + msgstr "`%D' static olmayan bir üye iÅŸlev olmalıdır" + + #: cp/decl.c:12507 + msgid "`%D' must be either a non-static member function or a non-member function" + msgstr "`%D' ya bir statik olmayan iÅŸlev ya da üye olmayan iÅŸlev olmalıdır" + + #: cp/decl.c:12524 + msgid "`%D' must have an argument of class or enumerated type" + msgstr "`%D' bir sınıf argümanına sahip olmalı ya da enum türünde olmalı" + + #: cp/decl.c:12556 + #, c-format + msgid "conversion to %s%s will never use a type conversion operator" + msgstr "%s%s e dönüşüm asla bir tür dönüşüm iÅŸlemimi kullanmayacak" + + #. 13.4.0.3 + #: cp/decl.c:12563 + msgid "ISO C++ prohibits overloading operator ?:" + msgstr "ISO C++ iÅŸlemimi ?: nın aşırı yüklenmesini yasaklar" + + #: cp/decl.c:12613 + msgid "postfix `%D' must take `int' as its argument" + msgstr "sonek `%D' argüman olarak `int' almalı" + + #: cp/decl.c:12617 + msgid "postfix `%D' must take `int' as its second argument" + msgstr "sonek `%D' ikinci argümanı olarak `int' almalı" + + #: cp/decl.c:12624 + msgid "`%D' must take either zero or one argument" + msgstr "`%D' ya hiç argüman almamalı ya da bir argüman almalı" + + #: cp/decl.c:12626 + msgid "`%D' must take either one or two arguments" + msgstr "`%D' ya bir ya da iki argüman almalı" + + #: cp/decl.c:12647 + msgid "prefix `%D' should return `%T'" + msgstr "önek `%D' `%T' döndürmeli" + + #: cp/decl.c:12653 + msgid "postfix `%D' should return `%T'" + msgstr "sonek `%D' `%T' ile dönmeli" + + #: cp/decl.c:12662 + msgid "`%D' must take `void'" + msgstr "`%D' `void' almalı" + + #: cp/decl.c:12664 cp/decl.c:12672 + msgid "`%D' must take exactly one argument" + msgstr "`%D' kesinlikle bir argüman almalı" + + #: cp/decl.c:12674 + msgid "`%D' must take exactly two arguments" + msgstr "`%D' kesinlikle iki argüman almalı" + + #: cp/decl.c:12682 + msgid "user-defined `%D' always evaluates both arguments" + msgstr "kullanıcı tanımlı `%D' daima her iki argümanıyla birlikte deÄŸerlendirilir" + + #: cp/decl.c:12694 + msgid "`%D' should return by value" + msgstr "`%D' deÄŸeriyle döndürülmeli" + + #: cp/decl.c:12706 cp/decl.c:12709 + msgid "`%D' cannot have default arguments" + msgstr "`%D' öntanımlı argümanlara sahip olamaz" + + #: cp/decl.c:12800 + msgid "`%s %T' declares a new type at namespace scope" + msgstr "isim alanı baÄŸlamında `%s %T' bir yeni tür bildiriyor" + + #: cp/decl.c:12803 + msgid " names from dependent base classes are not visible to unqualified name lookup - to refer to the inherited type, say `%s %T::%T'" + msgstr " bağımlı taban sınıflardaki isimler nitelemesiz isim aramasında görünür deÄŸil - kalıt türe baÅŸvurması için `%s %T::%T' denebilir" + + #: cp/decl.c:12841 + msgid "using typedef-name `%D' after `%s'" + msgstr "typedef-ismi `%D' `%s' den sonra kullanılıyor" + + #: cp/decl.c:12846 + msgid "using template type parameter `%T' after `%s'" + msgstr "`%s' den sonra ÅŸablon tür parametresi `%T' kullanımı" + + #: cp/decl.c:12926 + msgid "use of enum `%#D' without previous declaration" + msgstr "önceden bildirilmeksizin enum `%#D' kullanımı" + + #: cp/decl.c:13024 + msgid "derived union `%T' invalid" + msgstr "türetilmiÅŸ union `%T' geçersiz" + + #: cp/decl.c:13068 + msgid "base type `%T' fails to be a struct or class type" + msgstr "taban tür `%T' bir yapı veya sınıf türü olarak hatalı" + + #: cp/decl.c:13078 + msgid "base class `%T' has incomplete type" + msgstr "taban sınıf `%T' içi boÅŸ türde" + + #: cp/decl.c:13086 + msgid "recursive type `%T' undefined" + msgstr "özyinelemeli tür `%T' tanımsız" + + #: cp/decl.c:13088 + msgid "duplicate base type `%T' invalid" + msgstr "yinelenmiÅŸ taban türü `%T' geçersiz" + + #: cp/decl.c:13199 + msgid "multiple definition of `%#T'" + msgstr "`%#T' çoklu tanımları" + + #: cp/decl.c:13200 + msgid "previous definition here" + msgstr "önceden burada tanımlı" + + #: cp/decl.c:13371 + msgid "enumerator value for `%D' not integer constant" + msgstr "`%D' için sembolik sabitin deÄŸeri tamsayı sabit deÄŸil" + + #: cp/decl.c:13391 + msgid "overflow in enumeration values at `%D'" + msgstr "`%D' de sembolik sabit listesi deÄŸerlerinde taÅŸma" + + #: cp/decl.c:13477 + msgid "return type `%#T' is incomplete" + msgstr "dönüş türü `%#T' bir içi boÅŸ tür" + + #: cp/decl.c:13593 + msgid "semicolon missing after declaration of `%#T'" + msgstr "`%T' bildiriminden sonra ; yok" + + #: cp/decl.c:13614 + msgid "return type for `main' changed to `int'" + msgstr "`main' için dönen tür `int' olarak deÄŸiÅŸti" + + #: cp/decl.c:13645 + msgid "`%D' implicitly declared before its definition" + msgstr "`%D' tanımından önce dolaylı olarak bildirilmiÅŸ" + + #: cp/decl.c:13667 cp/typeck.c:6530 + msgid "`operator=' should return a reference to `*this'" + msgstr "`operator=' `*this'e bir referans döndürmeli" + + #: cp/decl.c:13931 + msgid "parameter `%D' declared void" + msgstr "parametre `%D' void olarak bildirilmiÅŸ" + + #: cp/decl.c:14408 + msgid "`%D' is already defined in class `%T'" + msgstr "`%D' zaten sınıf `%T' içinde tanımlı" + + #: cp/decl.c:14625 + msgid "static member function `%#D' declared with type qualifiers" + msgstr "statik üye iÅŸlev `%#D' tür niteleyicilerle bildirilmiÅŸ" + + #: cp/decl2.c:529 + #, c-format + msgid "-f%s is no longer supported" + msgstr "-f%s artık desteklenmiyor" + + #: cp/decl2.c:535 + msgid "-fhandle-exceptions has been renamed to -fexceptions (and is now on by default)" + msgstr "-fhandle-exceptions'ın -fexceptions olarak ismi deÄŸiÅŸtirilmiÅŸti (ve ÅŸimdi öntanımlı olarak böyle)" + + #: cp/decl2.c:561 + msgid "-fname-mangling-version is no longer supported" + msgstr "-fname-mangling-version artık desteklenmiyor" + + #: cp/decl2.c:624 + msgid "-Wno-strict-prototypes is not supported in C++" + msgstr "C++ da -Wno-strict-prototypes desteklenmiyor" + + #: cp/decl2.c:761 + #, c-format + msgid "duplicate type qualifiers in %s declaration" + msgstr "%s bildirimde yinelenmiÅŸ tür niteleyiciler" + + #: cp/decl2.c:800 + msgid "template `%#D' instantiated in file without #pragma interface" + msgstr "ÅŸablon `%#D' dosya içinde #pragma arabirimsiz gerçeklendi" + + #: cp/decl2.c:806 + msgid "template `%#D' defined in file without #pragma interface" + msgstr "ÅŸablon `%#D' dosya içinde #pragma arabirimsiz tanımlandı" + + #: cp/decl2.c:963 + msgid "name missing for member function" + msgstr "üye iÅŸlev için isim eksik" + + #. Something has gone very wrong. Assume we are mistakenly reducing + #. an expression instead of a declaration. + #: cp/decl2.c:1026 + msgid "parser may be lost: is there a '{' missing somewhere?" + msgstr "ayrıştırıcı kayıp olabilir: bir yerlerde kayıp '{' var mı?" + + #: cp/decl2.c:1057 cp/decl2.c:1071 + msgid "ambiguous conversion for array subscript" + msgstr "dizi altindisi için dönüşüm belirsiz" + + #: cp/decl2.c:1065 + msgid "invalid types `%T[%T]' for array subscript" + msgstr "dizi altindisi için geçersiz türler `%T[%T]'" + + #: cp/decl2.c:1113 + msgid "type `%#T' argument given to `delete', expected pointer" + msgstr "tür `%#T' argümanı `delete'e verilmiÅŸ, gösterge umuluyordu" + + #: cp/decl2.c:1121 + msgid "anachronistic use of array size in vector delete" + msgstr "vektör silmede dizi boyutunun zamansız kullanımı" + + #: cp/decl2.c:1131 + msgid "cannot delete a function. Only pointer-to-objects are valid arguments to `delete'" + msgstr "bir iÅŸlev silinemez. Sadece nesnelerin göstergeleri `silinecek' geçerli argümanlardır." + + #: cp/decl2.c:1138 + msgid "deleting `%T' is undefined" + msgstr "`%T' silinmesi tanımsız" + + #: cp/decl2.c:1146 + msgid "deleting array `%#D'" + msgstr "dizi `%#D' siliniyor" + + #. 14.5.2.2 [temp.mem] + #. + #. A local class shall not have member templates. + #: cp/decl2.c:1180 + msgid "invalid declaration of member template `%#D' in local class" + msgstr "yerel sınıf içinde üye ÅŸablonu `%#D' nin bildirimi geçersiz" + + #: cp/decl2.c:1189 + msgid "invalid use of `virtual' in template declaration of `%#D'" + msgstr "`%#D' ÅŸablon bildiriminde geçersiz `virtual' kullanımı" + + #: cp/decl2.c:1199 cp/pt.c:2562 + msgid "template declaration of `%#D'" + msgstr "`%#D' ÅŸablon bildirimi" + + #: cp/decl2.c:1249 + msgid "Java method '%D' has non-Java return type `%T'" + msgstr "Java yöntemi '%D' Java olmayan dönen tür `%T' içeriyor" + + #: cp/decl2.c:1258 + msgid "Java method '%D' has non-Java parameter type `%T'" + msgstr "Java yöntemi '%D' Java olmayan parametre türü `%T' içeriyor" + + #: cp/decl2.c:1354 + msgid "prototype for `%#D' does not match any in class `%T'" + msgstr "`%#D' prototipi sınıf `%T' içindeki hiçbir ÅŸeyle eÅŸleÅŸmiyor" + + #: cp/decl2.c:1356 + msgid "candidate%s: %+#D" + msgstr "aday%s: %+#D" + + #: cp/decl2.c:1359 + msgid " %#D" + msgstr " %#D" + + #: cp/decl2.c:1411 + msgid "local class `%#T' shall not have static data member `%#D'" + msgstr "yerel sınıf `%#T static veri üyesi `%#D' içermemeli" + + #: cp/decl2.c:1419 + msgid "initializer invalid for static member with constructor" + msgstr "kuruculu statik üye için ilklendirici geçersiz" + + #: cp/decl2.c:1422 + msgid "(an out of class initialization is required)" + msgstr "(bir sınıf dışı ilklendirme gerekli)" + + #: cp/decl2.c:1481 + msgid "invalid data member initialization" + msgstr "geçersiz veri üyesi ilklendirmesi" + + #: cp/decl2.c:1484 + msgid "(use `=' to initialize static data members)" + msgstr "(statik veri üyelerini ilklendirmek için `=' kullanın)" + + #: cp/decl2.c:1524 + msgid "member `%D' conflicts with virtual function table field name" + msgstr "üye `%D' sanal iÅŸlev tablosu alan ismi ile çeliÅŸiyor" + + #: cp/decl2.c:1544 + msgid "`%D' is already defined in `%T'" + msgstr "`%D' zaten `%T' içinde tanımlı" + + #: cp/decl2.c:1595 + msgid "field initializer is not constant" + msgstr "alan ilklendirici sabit deÄŸil" + + #: cp/decl2.c:1618 + msgid "`asm' specifiers are not permitted on non-static data members" + msgstr "`asm' belirteçlerinde statik olmayan veri üyeleri kullanılamaz" + + #: cp/decl2.c:1670 + msgid "cannot declare `%D' to be a bit-field type" + msgstr "`%D' bir bit alanı türü olarak bildirilemez" + + #: cp/decl2.c:1680 + msgid "cannot declare bit-field `%D' with function type" + msgstr "bir alanı `%D' iÅŸlev türle bildirilemez" + + #: cp/decl2.c:1687 + msgid "`%D' is already defined in the class %T" + msgstr "`%D' zaten sınıf %T içinde tanımlı" + + #: cp/decl2.c:1694 + msgid "static member `%D' cannot be a bit-field" + msgstr "static üye `%D' bir bit alanı olarak bildirilemez" + + #: cp/decl2.c:1763 + msgid "initializer specified for non-member function `%D'" + msgstr "üye olmayan iÅŸlev `%D' için ilklendirici belirtilmiÅŸ" + + #: cp/decl2.c:1767 + msgid "invalid initializer for virtual method `%D'" + msgstr "sanal yöntem `%D' için geçersiz ilklendirici" + + #: cp/decl2.c:1871 + msgid "anonymous struct not inside named type" + msgstr "anonim yapı isimli türün içinde deÄŸil" + + #: cp/decl2.c:1967 + msgid "namespace-scope anonymous aggregates must be static" + msgstr "isim alanı baÄŸlamındaki anonim kümeler static olmalıdır" + + #: cp/decl2.c:1977 + msgid "anonymous aggregate with no members" + msgstr "üyesiz anonim küme" + + #: cp/decl2.c:2044 + msgid "`operator new' must return type `%T'" + msgstr "`operator new' `%T' türünde dönmeli" + + #: cp/decl2.c:2052 + msgid "`operator new' takes type `size_t' (`%T') as first parameter" + msgstr "`operator new' ilk parametreyi `size_t' (`%T') türünde alır" + + #: cp/decl2.c:2079 + msgid "`operator delete' must return type `%T'" + msgstr "`operator delete' `%T' türünde dönmeli" + + #: cp/decl2.c:2087 + msgid "`operator delete' takes type `%T' as first parameter" + msgstr "`operator delete' ilk parametreyi `%T'` türünde alır" + + #. Overflow occurred. That means there are at least 4 billion + #. initialization functions. + #: cp/decl2.c:2828 + msgid "too many initialization functions required" + msgstr "çok fazla ilklendirme iÅŸlevi gerekli" + + #: cp/decl2.c:3639 + msgid "use of old-style cast" + msgstr "eski tarz çevirim kullanımı" + + #: cp/decl2.c:4220 + msgid "use of `%D' is ambiguous" + msgstr "`%D' kullanımı belirsiz" + + #: cp/decl2.c:4221 + msgid " first declared as `%#D' here" + msgstr " ilk defa burada `%#D' olarak bildirilmiÅŸ" + + #: cp/decl2.c:4224 + msgid " also declared as `%#D' here" + msgstr " ayrıca burada da `%#D' olarak bildirilmiÅŸ" + + #: cp/decl2.c:4239 + msgid "`%D' denotes an ambiguous type" + msgstr "`%D' bir belirsiz tür gösteriyor" + + #: cp/decl2.c:4240 + msgid " first type here" + msgstr " ilk tür burada" + + #: cp/decl2.c:4241 + msgid " other type here" + msgstr " diÄŸer tür burada" + + #: cp/decl2.c:4338 + msgid "declaration of `%D' not in a namespace surrounding `%D'" + msgstr "`%D' bildirimi `%D' yi kuÅŸatan isim alanının içinde deÄŸil" + + #: cp/decl2.c:4372 + msgid "`%D' should have been declared inside `%D'" + msgstr "`%D' zaten `%D' içinde bildirilmiÅŸti" + + #: cp/decl2.c:4506 + msgid "`%D' is not a function," + msgstr "`%D' bir iÅŸlev deÄŸil," + + #: cp/decl2.c:4507 + msgid " conflict with `%D'" + msgstr " `%D' ile çeliÅŸiyor" + + #. The parser did not find it, so it's not there. + #: cp/decl2.c:4821 + msgid "unknown namespace `%D'" + msgstr "bilinmeyen isim alanı `%D'" + + #: cp/decl2.c:4855 cp/decl2.c:5125 + msgid "`%T' is not a namespace" + msgstr "`%T' bir isim alanı deÄŸil" + + #: cp/decl2.c:4857 + msgid "`%D' is not a namespace" + msgstr "`%D' bir isim alanı deÄŸil" + + #: cp/decl2.c:4866 + msgid "a using-declaration cannot specify a template-id. Try `using %D'" + msgstr "bir using bildirimi bir ÅŸablon kimliÄŸi belirtemez. `using %D' deneyin" + + #: cp/decl2.c:4880 + msgid "namespace `%D' not allowed in using-declaration" + msgstr "using bildiriminde isim alanı `%D' kullanılamaz" + + #: cp/decl2.c:4909 + msgid "`%D' not declared" + msgstr "`%D' bildirilmemiÅŸ" + + #: cp/decl2.c:4960 + msgid "`%D' is already declared in this scope" + msgstr "`%D' zaten bu baÄŸlamda bildirilmiÅŸ" + + #: cp/decl2.c:4987 + msgid "using declaration `%D' introduced ambiguous type `%T'" + msgstr "using bildirimi `%D' belirsiz tür `%T' ye dahil edildi" + + #: cp/decl2.c:5078 + msgid "using-declaration for non-member at class scope" + msgstr "sınıf baÄŸlamında üye olmayan için using bildirimi" + + #: cp/decl2.c:5084 + msgid "using-declaration for destructor" + msgstr "yıkıcı için using bildirimi" + + #: cp/decl2.c:5090 + msgid "a using-declaration cannot specify a template-id. Try `using %T::%D'" + msgstr "bir using bildirimi bir ÅŸablon kimliÄŸi belirtemez. `using %T::%D' deneyin" + + #: cp/decl2.c:5119 + msgid "namespace `%T' undeclared" + msgstr "isim alanı `%T' bildirimsiz" + + #: cp/decl2.c:5148 + msgid "default argument missing for parameter %P of `%+#D'" + msgstr "parametre %P (`%+#D' nin) için öntanımlı argüman eksik" + + #: cp/decl2.c:5238 + msgid "extra qualification `%T::' on member `%D' ignored" + msgstr "fazladan `%T::' nitelemesi üye `%D' üstünde yoksayıldı" + + #: cp/decl2.c:5242 + msgid "`%T' does not have a class or union named `%D'" + msgstr "`%T' `%D' isminde bir sınıf ya da birleÅŸik yapı içermiyor" + + #: cp/decl2.c:5255 + msgid "`%T' is not a class or union type" + msgstr "`%T' bir sınıf ya da birleÅŸik yapı deÄŸil" + + #: cp/error.c:35 + #, c-format + msgid "`%s' not supported by %s" + msgstr "`%s', %s tarafından desteklenmiyor" + + #: cp/error.c:577 + #, c-format + msgid "" + msgstr "" + + #: cp/error.c:814 + #, c-format + msgid "(static %s for %s)" + msgstr "(%2$s için statik %1$s)" + + #: cp/error.c:2438 + #, c-format + msgid "In %s `%s':" + msgstr "%s `%s' içinde:" + + #: cp/error.c:2493 + #, c-format + msgid "%s: In instantiation of `%s':\n" + msgstr "%s: `%s' gerçeklemesi içinde:\n" + + #: cp/error.c:2517 + #, c-format + msgid "%s:%d: instantiated from `%s'\n" + msgstr "%s:%d: `%s' den gerçeklenmiÅŸ\n" + + #: cp/error.c:2522 + #, c-format + msgid "%s:%d: instantiated from here\n" + msgstr "%s:%d: buradan gerçeklenmiÅŸ\n" + + #. damn ICE suppression + #: cp/error.c:2675 + #, c-format + msgid "unexpected letter `%c' in locate_error\n" + msgstr "locate_error içinde umulmayan `%c' harfi\n" + + #. Can't throw a reference. + #: cp/except.c:245 + msgid "type `%T' is disallowed in Java `throw' or `catch'" + msgstr "tür `%T' Java `throw' veya `catch' içinde kullanılmaz" + + #: cp/except.c:256 + msgid "call to Java `catch' or `throw' with `jthrowable' undefined" + msgstr "Java `catch' ya da `throw' a `jthrowable' ile çaÄŸrı tanımsız" + + #. Thrown object must be a Throwable. + #: cp/except.c:263 + msgid "type `%T' is not derived from `java::lang::Throwable'" + msgstr "tür `%T' `java::lang::Throwable'dan türetilmemiÅŸtir" + + #: cp/except.c:327 + msgid "mixing C++ and Java catches in a single translation unit" + msgstr "tek çeviri birimi içinde karışık C++ ve Java tuzakları" + + #: cp/except.c:558 + msgid "throwing NULL, which has integral, not pointer type" + msgstr "tümleyen, gösterge olmayan NULL yakalanıyor" + + #: cp/except.c:663 + msgid " in thrown expression" + msgstr " düşük ifade içinde" + + #: cp/except.c:775 + msgid "expression '%E' of abstract class type '%T' cannot be used in throw-expression" + msgstr "ifade '%E', '%T' mutlak sınıf türünde throw ifadesi içinde kullanılamaz" + + #: cp/except.c:863 + msgid "exception of type `%T' will be caught" + msgstr "`%T' türündeki olaÄŸandışılık yakalanmış olacak" + + #: cp/except.c:866 + msgid " by earlier handler for `%T'" + msgstr " `%T'nin önceki tutamağı tarafından " + + #: cp/except.c:887 + msgid "`...' handler must be the last handler for its try block" + msgstr "`...' tutamağı kendi blok denemesinde son tutamak olmalıdır" + + #: cp/friend.c:155 + msgid "`%D' is already a friend of class `%T'" + msgstr "`%D' zaten sınıf `%T' nin kardeÅŸi" + + #: cp/friend.c:157 + msgid "previous friend declaration of `%D'" + msgstr "önceki `%D' kardeÅŸ bildirimi" + + #: cp/friend.c:197 + msgid "invalid type `%T' declared `friend'" + msgstr "geçersiz `friend' bildirimli tür `%T'" + + #. [temp.friend] + #. + #. Friend declarations shall not declare partial + #. specializations. + #: cp/friend.c:209 + msgid "partial specialization `%T' declared `friend'" + msgstr "`friend' bildirimli kısmi özelleÅŸtirme `%T'" + + #: cp/friend.c:221 + msgid "class `%T' is implicitly friends with itself" + msgstr "sınıf `%T' kendisiyle dolaylı kardeÅŸ" + + #. template friend typename S::X; + #: cp/friend.c:239 + msgid "typename type `%#T' declared `friend'" + msgstr "tür ismi türü `%#T' `friend' olarak bildirilmiÅŸ" + + #. template friend class T; + #: cp/friend.c:245 + msgid "template parameter type `%T' declared `friend'" + msgstr "ÅŸablon parametre türü `%T' `friend' olarak bildirilmiÅŸ" + + #. template friend class A; where A is not a template + #: cp/friend.c:251 + msgid "`%#T' is not a template" + msgstr "`%#T' bir ÅŸablon deÄŸil" + + #: cp/friend.c:266 + msgid "`%T' is already a friend of `%T'" + msgstr "`%T' zaten `%T' nin kardeÅŸi" + + #: cp/friend.c:362 + msgid "member `%D' declared as friend before type `%T' defined" + msgstr "üye `%D' tür `%T' tanımından önce friend olarak bildirilmiÅŸ" + + #: cp/friend.c:417 + msgid "friend declaration `%#D' declares a non-template function" + msgstr "kardeÅŸ bildirimi `%#D' bir ÅŸablon olmayan iÅŸlev bildiriyor" + + #: cp/friend.c:420 + msgid "(if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) -Wno-non-template-friend disables this warning" + msgstr "(eÄŸer istediÄŸiniz bu deÄŸilse, iÅŸlev ÅŸablonunun zaten bildirilmiÅŸ olduÄŸundan emin olduktan sonra burada iÅŸlev isminden sonra bir <> ekleyin)-Wno-non-template-friend bu uyarıyı iptal eder" + + #: cp/g++spec.c:198 java/jvspec.c:424 + #, c-format + msgid "argument to `%s' missing\n" + msgstr "`%s' için argüman eksik\n" + + #: cp/init.c:285 + msgid "default-initialization of `%#D', which has reference type" + msgstr "referans türe sahip `%#D'nin default ilklendirmesi" + + #: cp/init.c:290 + msgid "uninitialized reference member `%D'" + msgstr "ilklendirilmemiÅŸ referans üyesi `%D'" + + #: cp/init.c:298 + msgid "initializer list treated as compound expression" + msgstr "ilklendirici listesi bileÅŸik ifade olarak ele alınıyor" + + #: cp/init.c:410 + msgid "member initializers for `%#D'" + msgstr "`%#D'" + + #: cp/init.c:412 + msgid " and `%#D'" + msgstr " ve `%#D' için üye ilklendiriciler" + + #: cp/init.c:413 + msgid " will be re-ordered to match declaration order" + msgstr " bildirim sırasının eÅŸlenmesi için yeniden sıralama yapılacak" + + #: cp/init.c:428 + msgid "multiple initializations given for member `%D'" + msgstr "üye `%D' için çoklu ilklendiriciler verilmiÅŸ" + + #: cp/init.c:500 + msgid "initializations for multiple members of `%T'" + msgstr "`%T' nin çoklu üyeleri için ilklendirmeler" + + #: cp/init.c:617 + msgid "base initializers for `%#T'" + msgstr "`%#T'" + + #: cp/init.c:618 + msgid " and `%#T'" + msgstr " ve `%#T' için taban ilklendiriciler" + + #: cp/init.c:619 + msgid " will be re-ordered to match inheritance order" + msgstr " miras kalma sırasının eÅŸlenmesi için yeniden sıralanacak" + + #: cp/init.c:631 + msgid "base class `%T' already initialized" + msgstr "taban sınıf `%T' zaten ilklendirilmiÅŸ" + + #: cp/init.c:702 + msgid "base class `%#T' should be explicitly initialized in the copy constructor" + msgstr "taban sınıf `%#T' kopyalama kurucusunda doÄŸrudan ilklendirilmiÅŸ olmalı" + + #: cp/init.c:745 + msgid "`%D' should be initialized in the member initialization list" + msgstr "`%D' üye ilklendirici listesinde ilklendirilmiÅŸ olmalı" + + #: cp/init.c:987 + msgid "class `%T' does not have any field named `%D'" + msgstr "sınıf `%T' `%D' isimli hiçbir alan içermiyor" + + #: cp/init.c:993 + msgid "field `%#D' is static; the only point of initialization is its definition" + msgstr "alan `%#D' static'dir; tek ilklendirme noktası onun tanımıdır" + + #: cp/init.c:1032 + msgid "unnamed initializer for `%T', which has no base classes" + msgstr "taban sınıfı olmayan `%T' için isimsiz ilklendirici" + + #: cp/init.c:1039 + msgid "unnamed initializer for `%T', which uses multiple inheritance" + msgstr "çoklu kalıt kullanan `%T' için isimsiz ilklendirici" + + #: cp/init.c:1068 + msgid "type `%D' is not a direct or virtual base of `%T'" + msgstr "tür `%D' `%T' nin bir doÄŸrudan ya da sanal tabanı deÄŸil" + + #: cp/init.c:1071 + msgid "type `%D' is not a direct base of `%T'" + msgstr "tür `%D' `%T'nin bir doÄŸrudan tabanı deÄŸil" + + #. Handle bad initializers like: + #. class COMPLEX { + #. public: + #. double re, im; + #. COMPLEX(double r = 0.0, double i = 0.0) {re = r; im = i;}; + #. ~COMPLEX() {}; + #. }; + #. + #. int main(int argc, char **argv) { + #. COMPLEX zees(1.0, 0.0)[10]; + #. } + #. + #: cp/init.c:1165 + msgid "bad array initializer" + msgstr "dizi ilklendirici hatalı" + + #: cp/init.c:1357 + msgid "`%T' is not an aggregate type" + msgstr "`%T' bir küme türü deÄŸil" + + #: cp/init.c:1380 + msgid "`%T' fails to be an aggregate typedef" + msgstr "bir küme türü ataması olarak `%T' hatalı" + + #: cp/init.c:1389 + msgid "type `%T' is of non-aggregate type" + msgstr "`%T' küme olmayan türde" + + #: cp/init.c:1491 + msgid "cannot call destructor `%T::~%T' without object" + msgstr "yıkıcı `%T::~%T' nesnesiz çaÄŸrılamaz" + + #: cp/init.c:1531 + msgid "invalid use of non-static field `%D'" + msgstr "geçersiz static olmayan alan `%D' kullanımı" + + #. We can get here when processing a bad default + #. argument, like: + #. struct S { int a; void f(int i = a); } + #: cp/init.c:1540 cp/method.c:163 + msgid "invalid use of member `%D'" + msgstr "geçersiz üye `%D' kullanımı" + + #: cp/init.c:1550 + msgid "no method `%T::%D'" + msgstr "`%T::%D' diye bir yöntem yok" + + #: cp/init.c:1643 + msgid "incomplete type `%T' does not have member `%D'" + msgstr "içi boÅŸ tür `%T' üye `%D' yi içermiyor" + + #: cp/init.c:1712 + msgid "`%D' is not a member of type `%T'" + msgstr "`%D' `%T' türünde bir üye deÄŸil" + + #: cp/init.c:1731 + msgid "illegal pointer to bit-field `%D'" + msgstr "bit alanı `%D' göstergesi kuraldışı" + + #: cp/init.c:1770 + msgid "object missing in use of pointer-to-member construct" + msgstr "üyeye gösterge oluÅŸumu kullanımında nesne eksik" + + #: cp/init.c:1810 + msgid "member `%D' is non-static but referenced as a static member" + msgstr "üye `%D' statik deÄŸil ama bir statik üye olarak baÅŸvurulmuÅŸ" + + #: cp/init.c:1812 cp/typeck.c:3130 cp/typeck.c:3238 + msgid "at this point in file" + msgstr "dosyanın burasında" + + #: cp/init.c:1853 cp/typeck.c:2929 + #, c-format + msgid "object missing in `%E'" + msgstr "`%E' içinde nesne eksik" + + #: cp/init.c:1984 + msgid "new of array type fails to specify size" + msgstr "dizi türünde new boyut belirtmede baÅŸarısız" + + #: cp/init.c:1995 + msgid "size in array new must have integral type" + msgstr "array new içindeki boyut bütünleyici türde olmalı" + + #: cp/init.c:2001 + msgid "zero size array reserves no space" + msgstr "sıfır boyutlu dizi için yer ayrılmaz" + + #: cp/init.c:2066 + msgid "new cannot be applied to a reference type" + msgstr "new bir referans türe uygulanamaz" + + #: cp/init.c:2072 + msgid "new cannot be applied to a function type" + msgstr "new bir iÅŸlev türe uygulanamaz" + + #: cp/init.c:2119 + msgid "call to Java constructor, while `jclass' undefined" + msgstr "`jclass' tanımlanmamışken Java kurucusuna çaÄŸrı" + + #: cp/init.c:2135 + msgid "can't find class$" + msgstr "class$ bulunamıyor" + + #: cp/init.c:2249 + msgid "invalid type `void' for new" + msgstr "new için `void' türü geçersiz" + + #: cp/init.c:2301 + #, c-format + msgid "call to Java constructor with `%s' undefined" + msgstr "`%s' li Java kurucusuna çaÄŸrı tanımsız" + + #: cp/init.c:2408 + msgid "ISO C++ forbids initialization in array new" + msgstr "ISO C++ da array new içinde ilklendirmeye izin verilmez" + + #: cp/init.c:2426 cp/typeck2.c:359 cp/typeck2.c:1217 + msgid "initializer list being treated as compound expression" + msgstr "ilklendirici listesi bileÅŸik ifade varsayılıyor" + + #: cp/init.c:2432 + msgid "ISO C++ forbids aggregate initializer to new" + msgstr "ISO C++ da new için küme ilklendiriciye izin verilmez" + + #: cp/init.c:2516 + msgid "uninitialized const in `new' of `%#T'" + msgstr "`%#T' nin `new' u içinde ilklendirilmemiÅŸ sabit" + + #: cp/init.c:2880 + msgid "initializer ends prematurely" + msgstr "ilklendirici erken sonlanıyor" + + #: cp/init.c:2950 + msgid "cannot initialize multi-dimensional array with initializer" + msgstr "çok boyutlu diziler ilklendiricilerle ilklendirilemez" + + #: cp/init.c:3125 + msgid "unknown array size in delete" + msgstr "delete içindeki dizi boyutu bilinmiyor" + + #: cp/init.c:3398 + msgid "type to vector delete is neither pointer or array type" + msgstr "vektör silme iÅŸlemi için tür ne gösterge ne de dizi" + + #: cp/lex.c:144 + msgid "type name expected before `*'" + msgstr "`*' dan önce tür ismi gerekli" + + #: cp/lex.c:166 + msgid "cannot declare references to references" + msgstr "referanslara referans bildirilemez" + + #: cp/lex.c:171 + msgid "cannot declare pointers to references" + msgstr "referanslara gösterge bildirilemez" + + #: cp/lex.c:175 + msgid "type name expected before `&'" + msgstr "`&' den önce tür ismi gerekli" + + #: cp/lex.c:993 + #, c-format + msgid "semicolon missing after %s declaration" + msgstr "%s bildiriminden sonra ; yok" + + #: cp/lex.c:996 + msgid "semicolon missing after declaration of `%T'" + msgstr "`%T' bildiriminden sonra ; yok" + + #: cp/lex.c:1044 + #, c-format + msgid "junk at end of #pragma %s" + msgstr "'#pragma %s' sonrası karışık" + + #: cp/lex.c:1051 + #, c-format + msgid "invalid #pragma %s" + msgstr "'#pragma %s' geçersiz" + + #: cp/lex.c:1060 + msgid "#pragma vtable no longer supported" + msgstr "#pragma vtable artık desteklenmiyor" + + #: cp/lex.c:1137 + #, c-format + msgid "#pragma implementation for %s appears after file is included" + msgstr "%s için #pragma oluÅŸumu dosya içerildikten sonra görünüyor" + + #: cp/lex.c:1162 + msgid "junk at end of #pragma GCC java_exceptions" + msgstr "#pragma GCC java_exceptions sonrası karışık" + + #: cp/lex.c:1247 + msgid "`%D' not defined" + msgstr "'%D' tanımlı deÄŸil" + + #: cp/lex.c:1252 + msgid "`%D' was not declared in this scope" + msgstr "bu kapsamda `%D' bildirilmemiÅŸ " + + #: cp/lex.c:1262 + msgid "`%D' undeclared (first use this function)" + msgstr "`%D' bildirilmemiÅŸ (bu iÅŸlevde ilk kullanımı)" + + #: cp/lex.c:1266 + msgid "(Each undeclared identifier is reported only once for each function it appears in.)" + msgstr "(her bildirimsiz tanımlayıcı sadece iÅŸlevin içinde ilk göründüğünde bir kere raporlanır)" + + #: cp/lex.c:1289 + #, c-format + msgid "name lookup of `%s' changed" + msgstr "`%s' içi isim görünümü deÄŸiÅŸti" + + #: cp/lex.c:1291 + msgid " matches this `%D' under ISO standard rules" + msgstr " bu `%D' ISO standardının kuralları altında eÅŸleÅŸiyor" + + #: cp/lex.c:1293 + msgid " matches this `%D' under old rules" + msgstr " bu `%D' eski kurallar altında eÅŸleÅŸiyor" + + #: cp/lex.c:1303 cp/lex.c:1310 + #, c-format + msgid "name lookup of `%s' changed for new ISO `for' scoping" + msgstr "yeni ISO `for' kapsamında `%s' isim araması deÄŸiÅŸti" + + #: cp/lex.c:1305 + msgid " cannot use obsolete binding at `%D' because it has a destructor" + msgstr " `%D' deki modası geçmiÅŸ baÄŸlantı bir yıkıcıya sahip olduÄŸundan kullanılamaz" + + #: cp/lex.c:1312 + msgid " using obsolete binding at `%D'" + msgstr " `%D' deki modası geçmiÅŸ baÄŸlantı kullanılıyor" + + #: cp/lex.c:1378 + msgid "`::%D' undeclared (first use here)" + msgstr "`::%D' bildirilmemiÅŸ (burada ilk kullanımı)" + + #: cp/mangle.c:1912 + msgid "real-valued template parameters when cross-compiling" + msgstr "çapraz derlemede gerçek deÄŸerli ÅŸablon parametreleri" + + #: cp/method.c:157 + msgid "invalid use of member `%D' in static member function" + msgstr "statik üye iÅŸlev kapsamında üye `%D' kullanımı geçersiz " + + #: cp/method.c:205 + msgid "use of namespace `%D' as expression" + msgstr "isim alanı `%D' nin ifade olarak kullanımı" + + #: cp/method.c:210 + msgid "use of class template `%T' as expression" + msgstr "sınıf ÅŸablonu `%T' nin ifade olarak kullanımı" + + #: cp/method.c:223 + #, c-format + msgid "use of %s from containing function" + msgstr "içeren iÅŸlevden %s kullanımı" + + #: cp/method.c:226 + msgid " `%#D' declared here" + msgstr " `%#D' burada bildirilmiÅŸ" + + #: cp/method.c:244 + msgid "request for member `%D' is ambiguous in multiple inheritance lattice" + msgstr "üye `%D' için istek çoklu kalıt kafesi içinde belirsiz" + + #: cp/method.c:297 + msgid "implementation-reserved name `%D' used" + msgstr "implementation-saklı ismi `%D' kullanıldı" + + #: cp/method.c:428 + msgid "generic thunk code fails for method `%#D' which uses `...'" + msgstr "`...' kullanan `%#D' için genel thunk kodu baÅŸarısız" + + #: cp/method.c:653 + msgid "non-static const member `%#D', can't use default assignment operator" + msgstr "statik olmayan sabit üye `%#D', öntanımlı atama iÅŸlemimi kullanamaz" + + #: cp/method.c:658 + msgid "non-static reference member `%#D', can't use default assignment operator" + msgstr "statik olmayan referans üyesi `%#D', öntanımlı atama iÅŸlemimi kullanamaz" + + #: parse.y:218 + msgid "`%s' tag used in naming `%#T'" + msgstr "`%s' etiketi `%#T' isimlemesinde kullanılmış" + + #: parse.y:510 + msgid "keyword `export' not implemented, and will be ignored" + msgstr "`export' anahtar sözcüğü gerçekleÅŸtirilmedi, ve yoksayılacak" + + #: parse.y:615 + msgid "use of linkage spec `%D' is different from previous spec `%D'" + msgstr "özellik ilintilemesi `%D' kullanımı önceki özellik `%D' den farklı" + + #: parse.y:688 + msgid "invalid default template argument" + msgstr "öntanımlı ÅŸablon argümanı geçersiz" + + #: parse.y:919 + msgid "only constructors take base initializers" + msgstr "temel ilklendiricileri sadece kurucular alır" + + #: parse.y:921 + msgid "no base or member initializers given following ':'" + msgstr "':' ile bir temel ya da üye ilklendirici verilmemiÅŸ" + + #: parse.y:963 parse.y:969 + msgid "anachronistic old style base class initializer" + msgstr "eski tarz temel sınıf ilklendirici zamansız" + + #. Handle `Class>' without space in the `>>' + #: parse.y:1095 + msgid "`>>' should be `> >' in template class name" + msgstr "ÅŸablon sınıf ismindeki `>>', `> >' olmalıydı" + + #: parse.y:1133 + msgid "use of template qualifier outside template" + msgstr "ÅŸablon niteleyicisinin ÅŸablon dışında kullanımı" + + #: parse.y:1162 parse.y:1171 + #, c-format + msgid "ISO C++ forbids an empty condition for `%s'" + msgstr "ISO C++ `%s' için bir boÅŸ koÅŸula izin vermez" + + #: parse.y:1194 + msgid "definition of class `%T' in condition" + msgstr "koÅŸul içinde class `%T' tanımı" + + #: parse.y:1196 + msgid "definition of enum `%T' in condition" + msgstr "koÅŸul içinde enum `%T' tanımı" + + #: parse.y:1207 + msgid "definition of array `%#D' in condition" + msgstr "koÅŸul içinde dizi `%#D' tanımı" + + #: parse.y:1316 + msgid "old style placement syntax, use () instead" + msgstr "eski tarz yerleÅŸtirme sözdizimi, yerine () kullanın" + + #: parse.y:1327 + msgid "`%T' is not a valid expression" + msgstr "`%T' bir geçerli ifade deÄŸil" + + #: parse.y:1338 + msgid "ISO C++ forbids initialization of new expression with `='" + msgstr "ISO C++ da `=' ile yeni ifade ilklendirmesine izin verilmez" + + #: parse.y:1369 + msgid "ISO C++ forbids compound literals" + msgstr "ISO C++ da birleÅŸik sabitlere izin verilmez" + + #: parse.y:1611 + msgid "ISO C++ forbids braced-groups within expressions" + msgstr "ISO C++ da kaÅŸlı ayraçla gruplanmış ifadelere izin verilmez" + + #: parse.y:2013 parse.y:2028 + msgid "sigof type specifier" + msgstr "sigof tür belirteci" + + #: parse.y:2018 + msgid "`sigof' applied to non-aggregate expression" + msgstr "küme olmayan ifadeye `sigof' uygulanmış" + + #: parse.y:2033 + msgid "`sigof' applied to non-aggregate type" + msgstr "küme olmayan türe `sigof' uygulanmış" + + #: parse.y:2299 + msgid "using `typename' outside of template" + msgstr "ÅŸablon dışında `typename' kullanımı" + + #: parse.y:2370 + #, c-format + msgid "storage class specifier `%s' not allowed after struct or class" + msgstr "yapı ya da sınıftan sonra saklama sınıfı belirteci `%s' kullanılamaz" + + #: parse.y:2372 + #, c-format + msgid "type specifier `%s' not allowed after struct or class" + msgstr "yapı ya da sınıftan sonra tür belirteci `%s' kullanılamaz" + + #: parse.y:2374 + #, c-format + msgid "type qualifier `%s' not allowed after struct or class" + msgstr "yapı ya da sınıftan sonra `%s' tür niteleyicisine izin verilmez " + + #: parse.y:2376 + msgid "no body nor ';' separates two class, struct or union declarations" + msgstr "iki sınıf, yapı ya da birleÅŸik yapı bildirimlerini ne gövdesi ne de ';' ayırır" + + #: parse.y:2508 + msgid "no bases given following `:'" + msgstr "':' ile bir temel verilmemiÅŸ" + + #: parse.y:2539 parse.y:2554 + msgid "`%D' access" + msgstr "`%D' eriÅŸimi" + + #: parse.y:2544 + msgid "multiple access specifiers" + msgstr "çoklu eriÅŸim belirteçleri" + + #: parse.y:2562 + msgid "multiple `virtual' specifiers" + msgstr "çoklu `virtual' belirteçleri" + + #: parse.y:2599 + msgid "missing ';' before right brace" + msgstr "'}' dan önce ';' eksik" + + #: parse.y:2820 + msgid "ISO C++ forbids array dimensions with parenthesized type in new" + msgstr "ISO C++ new içinde parantezli dizi indislemeye izin vermez" + + #: parse.y:3107 parse.y:3127 parse.y:3136 parse.y:3165 + msgid "`%T' is not a class or namespace" + msgstr "`%T' bir sınıf ya da isim alanı deÄŸil" + + #: parse.y:3332 + msgid "ISO C++ forbids label declarations" + msgstr "ISO C++ etiket bildirimlerine izin vermez" + + #: parse.y:3492 + msgid "ISO C++ forbids computed gotos" + msgstr "ISO C++ hesaplanmış goto'lara izin vermez" + + #: parse.y:3500 + msgid "label must be followed by statement" + msgstr "etiketi deyim izlemeli" + + #: parse.y:3545 + msgid "must have at least one catch per try block" + msgstr "her deneme bloÄŸu için en azından bir yakalama içermeli" + + #: parse.y:3605 + msgid "ISO C++ forbids compound statements inside for initializations" + msgstr "ISO C++ bileÅŸik deyimler içeren ilklendirmelere izin vermez" + + #. This helps us recover from really nasty + #. parse errors, for example, a missing right + #. parenthesis. + #: parse.y:3690 parse.y:3700 + msgid "possibly missing ')'" + msgstr "galiba ')' eksik" + + #: parse.y:3793 + msgid "type specifier omitted for parameter" + msgstr "parametre için tür belirteci ihmal edildi" + + #: parse.y:3802 + #, c-format + msgid "`%E' is not a type, use `typename %E' to make it one" + msgstr "`%E' bir tür deÄŸil, tür yapmak için `typename %E' kullanın" + + #: parse.y:3804 + msgid "no type `%D' in `%T'" + msgstr "`%T' içinde `%D' isminde bir tür yok" + + #: parse.y:3807 + #, c-format + msgid "type specifier omitted for parameter `%E'" + msgstr "parametre `%E' için tür belirteci ihmal edildi" + + #: parse.y:3815 + msgid "'%D' is used as a type, but is not defined as a type." + msgstr "'%D' bir tür olarak kullanılmış ama tür olarak tanımlı deÄŸil" + + #: cp/pt.c:211 + msgid "data member `%D' cannot be a member template" + msgstr "veri üyesi `%D' bir üye ÅŸablonu olamaz" + + #: cp/pt.c:223 + msgid "invalid member template declaration `%D'" + msgstr "geçersiz üye ÅŸablonu bildirimi `%D'" + + #: cp/pt.c:618 + msgid "explicit specialization in non-namespace scope `%D'" + msgstr "isim alanı olmayan `%D' içinde doÄŸrudan özelleÅŸtirme" + + #: cp/pt.c:630 + msgid "enclosing class templates are not explicitly specialized" + msgstr "sınıf ÅŸablonlarının zarflanması doÄŸrudan özelleÅŸtirilmiyor" + + #: cp/pt.c:705 + msgid "specializing `%#T' in different namespace" + msgstr " `%#T' farklı isim alanında özelleÅŸtiriliyor" + + #: cp/pt.c:706 + msgid " from definition of `%#D'" + msgstr " `%#D' bildiriminden" + + #: cp/pt.c:714 + msgid "specialization of `%T' after instantiation" + msgstr "gerçeklemeden sonra `%T' özelleÅŸtirmesi" + + #: cp/pt.c:717 + msgid "explicit specialization of non-template `%T'" + msgstr "ÅŸablon olmayan `%T' örtük özelleÅŸtirmesi" + + #: cp/pt.c:849 + msgid "specialization of %D after instantiation" + msgstr "gerçeklemeden sonra %D özelleÅŸtirmesi" + + #: cp/pt.c:952 + msgid "%s %+#D" + msgstr "%s %+#D" + + #: cp/pt.c:1003 + msgid "`%D' is not a function template" + msgstr "`%D' bir iÅŸlev ÅŸablonu deÄŸil" + + #: cp/pt.c:1126 + msgid "template-id `%D' for `%+D' does not match any template declaration" + msgstr "ÅŸablon kimliÄŸi `%D', `%+D' için hiçbir ÅŸablon bildirimi ile eÅŸleÅŸmiyor" + + #: cp/pt.c:1134 + msgid "ambiguous template specialization `%D' for `%+D'" + msgstr "ÅŸablon özelleÅŸtirmesi `%D', `%+D' için belirsiz" + + #. This case handles bogus declarations like template <> + #. template void f(); + #: cp/pt.c:1361 cp/pt.c:1435 + msgid "template-id `%D' in declaration of primary template" + msgstr "birincil ÅŸablon bildiriminde ÅŸablon kimliÄŸi `%D'" + + #: cp/pt.c:1374 + msgid "template parameter list used in explicit instantiation" + msgstr "ÅŸablon parametre listesi doÄŸrudan gerçekleme içinde kullanılmış" + + #: cp/pt.c:1380 + msgid "definition provided for explicit instantiation" + msgstr "tanım doÄŸrudan gerçekleme için üretilmiÅŸ" + + #: cp/pt.c:1386 + msgid "too many template parameter lists in declaration of `%D'" + msgstr "`%D' bildiriminde ÅŸablon parametresi listesi çok fazla" + + #: cp/pt.c:1402 + msgid "too few template parameter lists in declaration of `%D'" + msgstr "`%D' bildiriminde ÅŸablon parametresi listesi çok az" + + #: cp/pt.c:1419 + msgid "explicit specialization not preceded by `template <>'" + msgstr "doÄŸrudan özelleÅŸtirme `template <>' tarafından öncelenmiyor" + + #: cp/pt.c:1432 + msgid "partial specialization `%D' of function template" + msgstr "iÅŸlev ÅŸablonunun `%D' kısmî özelleÅŸtirmesi" + + #: cp/pt.c:1464 + msgid "default argument specified in explicit specialization" + msgstr "doÄŸrudan özelleÅŸtirme içinde öntanımlı argüman belirtilmiÅŸ" + + #: cp/pt.c:1468 + msgid "template specialization with C linkage" + msgstr "C ilintileme ile ÅŸablon özelleÅŸtirmesi" + + #. From [temp.expl.spec]: + #. + #. If such an explicit specialization for the member + #. of a class template names an implicitly-declared + #. special member function (clause _special_), the + #. program is ill-formed. + #. + #. Similar language is found in [temp.explicit]. + #: cp/pt.c:1556 + msgid "specialization of implicitly-declared special member function" + msgstr "örtük bildirimli özel üye iÅŸlev özelleÅŸtirmesi" + + #: cp/pt.c:1599 + msgid "no member function `%D' declared in `%T'" + msgstr "`%T' içinde bildirilmiÅŸ `%D' diye bir üye iÅŸlev yok" + + #. There are two many template parameter lists. + #: cp/pt.c:1747 + msgid "too many template parameter lists in declaration of `%T'" + msgstr "`%T' bildiriminde ÅŸablon parametresi listesi çok fazla" + + #: cp/pt.c:1843 + msgid " shadows template parm `%#D'" + msgstr " ÅŸablon parametresi `%#D' gölgeleniyor" + + #: cp/pt.c:2247 + msgid "template parameters not used in partial specialization:" + msgstr "kısmî özelleÅŸtirmede kullanılmayan ÅŸablon parametreleri:" + + #: cp/pt.c:2251 + msgid " `%D'" + msgstr " `%D'" + + #: cp/pt.c:2263 + msgid "partial specialization `%T' does not specialize any template arguments" + msgstr "kısmî özelleÅŸtirme `%T' hiç bir ÅŸablon argümanını özelleÅŸtirmiyor" + + #: cp/pt.c:2288 + #, c-format + msgid "template argument `%E' involves template parameter(s)" + msgstr "ÅŸablon argümanı `%E' ÅŸablon parametre(ler)ini içine alıyor" + + #: cp/pt.c:2331 + msgid "type `%T' of template argument `%E' depends on template parameter(s)" + msgstr "tür `%T' (ÅŸablon argümanı `%E' nin türü) ÅŸablon parametre(ler)ine bağımlı oluyor" + + #: cp/pt.c:2419 + msgid "no default argument for `%D'" + msgstr "`%D' için öntanımlı argüman yok" + + #: cp/pt.c:2552 + msgid "template with C linkage" + msgstr "C ilintilemeli ÅŸablon" + + #: cp/pt.c:2555 + msgid "template class without a name" + msgstr "bir ismi olmayan ÅŸablon sınıfı" + + #: cp/pt.c:2632 + msgid "`%D' does not declare a template type" + msgstr "`%D' bir ÅŸablon türü bildirmiyor" + + #: cp/pt.c:2638 + msgid "template definition of non-template `%#D'" + msgstr "ÅŸablon olmayan `%#D' nin ÅŸablon bildirimi" + + #: cp/pt.c:2679 + msgid "expected %d levels of template parms for `%#D', got %d" + msgstr "%d seviye umulurken `%#D' için ÅŸablon parametresi seviyesi olarak %d seviye alındı, " + + #: cp/pt.c:2691 + msgid "got %d template parameters for `%#D'" + msgstr "%d ÅŸablon parametresi alındı (`%#D' için)" + + #: cp/pt.c:2694 + msgid "got %d template parameters for `%#T'" + msgstr "%d ÅŸablon parametresi alındı (`%#T' için)" + + #: cp/pt.c:2696 + #, c-format + msgid " but %d required" + msgstr " ama %d gerekiyordu" + + #: cp/pt.c:2764 + msgid "`%T' is not a template type" + msgstr "`%T' bir ÅŸablon türü deÄŸil" + + #: cp/pt.c:2780 + msgid "previous declaration `%D'" + msgstr "`%D' önceki bildirimi" + + #: cp/pt.c:2781 + #, c-format + msgid "used %d template parameter%s instead of %d" + msgstr "%3$d yerine %1$d ÅŸablon parametresi kullanılmış %2$s" + + #: cp/pt.c:2797 + msgid "template parameter `%#D'" + msgstr "ÅŸablon parametresi `%#D'" + + #: cp/pt.c:2798 + msgid "redeclared here as `%#D'" + msgstr "burada yeniden `%#D' olarak bildirilmiÅŸ" + + #. We have in [temp.param]: + #. + #. A template-parameter may not be given default arguments + #. by two different declarations in the same scope. + #: cp/pt.c:2808 + msgid "redefinition of default argument for `%#D'" + msgstr "`%#D' nin öntanımlı argümanının yeniden tanımlanması" + + #: cp/pt.c:2809 + msgid " original definition appeared here" + msgstr " özgün tanımı burada göründü" + + #: cp/pt.c:2902 + #, c-format + msgid "`%E' is not a valid template argument" + msgstr "`%E' geçerli bir ÅŸablon argümanı deÄŸil" + + #: cp/pt.c:2906 + msgid "it must be the address of a function with external linkage" + msgstr "o dış ilintilemeli bir iÅŸlevin adresi olmalı" + + #: cp/pt.c:2908 + msgid "it must be the address of an object with external linkage" + msgstr "o dış ilintilemeli bir nesnenin adresi olmalı" + + #: cp/pt.c:2912 + msgid "it must be a pointer-to-member of the form `&X::Y'" + msgstr "o `&X::Y' ÅŸeklinde bir üye göstergesi olmalı" + + #: cp/pt.c:2923 + #, c-format + msgid "string literal %E is not a valid template argument because it is the address of an object with static linkage" + msgstr "statik ilintilemeli bir nesnenin adresi olduÄŸundan, dizge sabiti %E geçerli bir ÅŸablon argümanı deÄŸil" + + #: cp/pt.c:2935 + #, c-format + msgid "address of non-extern `%E' cannot be used as template argument" + msgstr "extern olmayan`%E' nin adresi ÅŸablon argümanı olarak kullanılamaz" + + #: cp/pt.c:2946 + #, c-format + msgid "non-constant `%E' cannot be used as template argument" + msgstr "sabit olmayan `%E' ÅŸablon argümanı olarak kullanılamaz" + + #: cp/pt.c:2953 + #, c-format + msgid "object `%E' cannot be used as template argument" + msgstr "nesne `%E' ÅŸablon argümanı olarak kullanılamaz" + + #: cp/pt.c:3333 + #, c-format + msgid "to refer to a type member of a template parameter, use `typename %E'" + msgstr "bir ÅŸablon parametresinin bir tür üyesine baÅŸvuru yapmak için `typename %E' kullanın" + + #: cp/pt.c:3346 cp/pt.c:3362 cp/pt.c:3401 + msgid "type/value mismatch at argument %d in template parameter list for `%D'" + msgstr "ÅŸablon parametre listesindeki %d. argümanda (`%D' için) tür/deÄŸer çeliÅŸkisi" + + #: cp/pt.c:3349 + msgid " expected a constant of type `%T', got `%T'" + msgstr " `%T' türünde bir sabit umulurken `%T' alındı" + + #: cp/pt.c:3353 + #, c-format + msgid " expected a type, got `%E'" + msgstr " bir tür umulurken `%E' alındı " + + #: cp/pt.c:3365 + msgid " expected a type, got `%T'" + msgstr " bir tür umulurken `%T' alındı" + + #: cp/pt.c:3367 + msgid " expected a class template, got `%T'" + msgstr " bir sınıf ÅŸablonu umulurken `%T' alındı" + + #: cp/pt.c:3403 + msgid " expected a template of type `%D', got `%D'" + msgstr " `%D' türünde bir ÅŸablon umulurken `%D' alındı" + + #: cp/pt.c:3425 + msgid "template-argument `%T' uses anonymous type" + msgstr "ÅŸablon argümanı `%T' anonim tür kullanıyor" + + #: cp/pt.c:3428 + msgid "template-argument `%T' uses local type `%T'" + msgstr "ÅŸablon argümanı `%T' yerel tür `%T' kullanıyor" + + #: cp/pt.c:3463 + msgid "could not convert template argument `%E' to `%T'" + msgstr "ÅŸablon argümanı `%E' `%T' ye dönüştürülemedi" + + #: cp/pt.c:3507 + #, c-format + msgid "wrong number of template arguments (%d, should be %d)" + msgstr "yanlış sayıda ÅŸablon argümanı (%d yerine %d olmalıydı)" + + #: cp/pt.c:3511 + msgid "provided for `%D'" + msgstr "`%D' için saÄŸlanmış" + + #: cp/pt.c:3558 + #, c-format + msgid "template argument %d is invalid" + msgstr "ÅŸablon argümanı %d geçersiz" + + #: cp/pt.c:3790 + msgid "non-template used as template" + msgstr "ÅŸablon olarak ÅŸablon olmayan kullanılmış" + + #: cp/pt.c:3908 + msgid "`%T' is not a template" + msgstr "`%T' bir ÅŸablon deÄŸil" + + #: cp/pt.c:3921 + msgid "non-template type `%T' used as a template" + msgstr "ÅŸablon olarak ÅŸablon olmayan tür `%T' kullanılmış" + + #: cp/pt.c:3923 + msgid "for template declaration `%D'" + msgstr "ÅŸablon bildirimi `%D' için" + + #: cp/pt.c:4486 + msgid "template instantiation depth exceeds maximum of %d (use -ftemplate-depth-NN to increase the maximum) instantiating `%D'" + msgstr "%d lik en büyük ÅŸablon gerçekleme derinliÄŸi `%D' gerçeklemesinde aşılıyor (en büyük deÄŸeri arttırmak için -ftemplate-depth-NN kullanın)" + + #: cp/pt.c:4921 + msgid "ambiguous class template instantiation for `%#T'" + msgstr "`%#T' için sınıf ÅŸablonu gerçeklemesi belirsiz" + + #: cp/pt.c:4928 + msgid "%s %+#T" + msgstr "%s %+#T" + + #: cp/pt.c:5949 cp/pt.c:6054 + msgid "instantiation of `%D' as type `%T'" + msgstr "`%D' gerçeklemesi `%T' türünde" + + #: cp/pt.c:6096 + msgid "invalid parameter type `%T'" + msgstr "geçersiz parametre türü `%T'" + + #: cp/pt.c:6098 + msgid "in declaration `%D'" + msgstr "`%D' bildiriminde" + + #: cp/pt.c:6173 + msgid "creating pointer to member function of non-class type `%T'" + msgstr "sınıf olmayan `%T' türünde üye iÅŸlev göstergesi oluÅŸturulması" + + #: cp/pt.c:6336 + msgid "creating array with size zero" + msgstr "dizi sıfır uzunlukta oluÅŸturuluyor" + + #: cp/pt.c:6350 + #, c-format + msgid "creating array with size zero (`%E')" + msgstr "sıfır boyutlu dizi oluÅŸturuluyor (`%E')" + + #: cp/pt.c:6589 + msgid "forming reference to void" + msgstr "void'e referans oluÅŸturuluyor" + + #: cp/pt.c:6591 + msgid "forming %s to reference type `%T'" + msgstr "%s tür `%T'ye referans oluÅŸturuyor" + + #: cp/pt.c:6629 + msgid "creating pointer to member of non-class type `%T'" + msgstr "sınıf olmayan `%T' türünde üye göstergesi oluÅŸturulması" + + #: cp/pt.c:6635 + msgid "creating pointer to member reference type `%T'" + msgstr "üye referans türü `%T' için gösterge oluÅŸturulması" + + #: cp/pt.c:6713 + msgid "creating array of `%T'" + msgstr "`%T' dizisi oluÅŸturulması" + + #: cp/pt.c:6756 + msgid "`%T' is not a class, struct, or union type" + msgstr "`%T' bir class, struct, veya union türünde deÄŸil" + + #: cp/pt.c:6866 + #, c-format + msgid "use of `%s' in template" + msgstr "ÅŸablonda `%s' kullanımı" + + #: cp/pt.c:7629 + msgid "type `%T' composed from a local class is not a valid template-argument" + msgstr "bir yerel sınıfan oluÅŸturulan `%T' geçerli bir ÅŸablon argümanı deÄŸil" + + #: cp/pt.c:7630 + msgid " trying to instantiate `%D'" + msgstr " `%D' gerçeklenmeye çalışılıyor" + + #: cp/pt.c:8060 + msgid "incomplete type unification" + msgstr "tamamlanmamış tür birleÅŸtirme" + + #: cp/pt.c:9027 + #, c-format + msgid "use of `%s' in template type unification" + msgstr "ÅŸablon türü birleÅŸtirmede `%s' kullanımı" + + #: cp/pt.c:9447 cp/pt.c:9515 + msgid "explicit instantiation of non-template `%#D'" + msgstr "ÅŸablon olmayan `%#D' nin doÄŸrudan gerçeklenmesi" + + #: cp/pt.c:9463 cp/pt.c:9510 + msgid "no matching template for `%D' found" + msgstr "`%D' için eÅŸleÅŸen bir ÅŸablon yok" + + #: cp/pt.c:9469 + msgid "explicit instantiation of `%#D'" + msgstr "`%#D' nin doÄŸrudan gerçeklenmesi" + + #. [temp.spec] + #. + #. No program shall both explicitly instantiate and explicitly + #. specialize a template. + #: cp/pt.c:9486 + msgid "explicit instantiation of `%#D' after" + msgstr "`%#D' nin doÄŸrudan gerçeklenmesi sonra" + + #: cp/pt.c:9487 cp/pt.c:9624 + msgid "explicit specialization here" + msgstr "burada doÄŸrudan özelleÅŸtirme" + + #: cp/pt.c:9502 + msgid "duplicate explicit instantiation of `%#D'" + msgstr "yinelenmiÅŸ doÄŸrudan `%#D' gerçeklemesi" + + #: cp/pt.c:9527 + msgid "ISO C++ forbids the use of `extern' on explicit instantiations" + msgstr "ISO C++ doÄŸrudan gerçeklemelerde `extern' kullanımına izin vermez" + + #: cp/pt.c:9531 cp/pt.c:9609 + msgid "storage class `%D' applied to template instantiation" + msgstr "saklama sınıfı `%D' ÅŸablon gerçeklemesine uygulanmış" + + #: cp/pt.c:9576 + msgid "explicit instantiation of non-template type `%T'" + msgstr "ÅŸablon olmayan tür `%T' nin doÄŸrudan gerçeklenmesi" + + #: cp/pt.c:9590 + msgid "explicit instantiation of `%#T' before definition of template" + msgstr "ÅŸablon tanımından önce `%T' nin doÄŸrudan gerçeklenmesi" + + #: cp/pt.c:9598 + #, c-format + msgid "ISO C++ forbids the use of `%s' on explicit instantiations" + msgstr "ISO C++ doÄŸrudan gerçeklemelerde `%s' kullanımına izin vermez" + + #: cp/pt.c:9623 + msgid "explicit instantiation of `%#T' after" + msgstr "`%#T' nin doÄŸrudan gerçeklenmesi sonra" + + #: cp/pt.c:9641 + msgid "duplicate explicit instantiation of `%#T'" + msgstr "yinelenmiÅŸ doÄŸrudan `%#T' gerçeklemesi" + + #: cp/pt.c:10003 + msgid "explicit instantiation of `%D' but no definition available" + msgstr "bir tanımlama olmadan `%D' nin doÄŸrudan gerçeklenmesi" + + #: cp/pt.c:10375 + msgid "`%#T' is not a valid type for a template constant parameter" + msgstr "`%#T' bir ÅŸablon sabiti parametresi için geçerli bir tür deÄŸildir" + + #: cp/repo.c:272 + msgid "-frepo must be used with -c" + msgstr "-frepo, -c ile kullanılmalı" + + #: cp/repo.c:366 + #, c-format + msgid "mysterious repository information in %s" + msgstr "%s içinde esrarengiz depo bilgisi" + + #: cp/repo.c:381 + #, c-format + msgid "can't create repository information file `%s'" + msgstr "depo bilgisi `%s' dosyasında oluÅŸturulamıyor" + + #: cp/rtti.c:200 + msgid "cannot use typeid with -fno-rtti" + msgstr "typeid, -fno-rtti ile kullanılamaz" + + #: cp/rtti.c:206 + msgid "must #include before using typeid" + msgstr "typeid kullanımından önce #include olmalı" + + #: cp/rtti.c:280 + msgid "cannot create type information for type `%T' because its size is variable" + msgstr "boyutu deÄŸiÅŸken olduÄŸundan tür `%T' için tür bilgisi oluÅŸturulamıyor" + + #: cp/rtti.c:525 cp/rtti.c:539 + msgid "dynamic_cast of `%#D' to `%#T' can never succeed" + msgstr "`%#D' nin `%#T' ye dinamik çevirimi asla baÅŸarılı olamaz" + + #: cp/rtti.c:614 + msgid "cannot dynamic_cast `%E' (of type `%#T') to type `%#T' (%s)" + msgstr "`%E' (`%#T' türünde) den `%#T' ye dinamik çevirim yapılamaz (%s)" + + #: cp/search.c:340 + msgid "`%T' is an inaccessible base of `%T'" + msgstr "`%T', `%T' nin bir eriÅŸilemeyen tabanıdır" + + #: cp/search.c:350 + msgid "`%T' is an ambiguous base of `%T'" + msgstr "`%T', `%T' nin bir belirsiz tabanıdır" + + #: cp/search.c:1820 + msgid "adjusting pointers for covariant returns" + msgstr "ortak deÄŸiÅŸen dönüşler için göstergeler ayarlanıyor" + + #: cp/search.c:1824 cp/search.c:1831 + msgid "invalid covariant return type for `%#D'" + msgstr "`%#D' için ortak deÄŸiÅŸen dönüş türü geçersiz" + + #: cp/search.c:1825 + msgid " overriding `%#D' (must be pointer or reference to class)" + msgstr " `%#D' deÄŸiÅŸtiriliyor (gösterge ya da sınıfa referans olmalı)" + + #: cp/search.c:1832 + msgid " overriding `%#D' (must use pointer or reference)" + msgstr " `%#D' deÄŸiÅŸtiriliyor (gösterge ya da referans olmalı)" + + #: cp/search.c:1837 + msgid "conflicting return type specified for `%#D'" + msgstr "`%D' için çeliÅŸen dönüş türü belirtilmiÅŸ" + + #: cp/search.c:1838 + msgid " overriding `%#D'" + msgstr " `%#D' deÄŸiÅŸtiriliyor" + + #: cp/search.c:1847 + #, c-format + msgid "looser throw specifier for `%#F'" + msgstr "`%#F' için throw belirteci daha gevÅŸek" + + #: cp/search.c:1848 + #, c-format + msgid " overriding `%#F'" + msgstr " `%#F' deÄŸiÅŸtiriliyor" + + #. A static member function cannot match an inherited + #. virtual member function. + #: cp/search.c:1938 + msgid "`%#D' cannot be declared" + msgstr "`%#D' bildirilemez" + + #: cp/search.c:1939 + msgid " since `%#D' declared in base class" + msgstr " `%#D' taban sınıfta bildirildiÄŸinden" + + #: cp/search.c:2080 + msgid "`%#D' needs a final overrider" + msgstr "`%#D' bir son deÄŸiÅŸtirici gerektiriyor" + + #: cp/semantics.c:911 + #, c-format + msgid "type of asm operand `%E' could not be determined" + msgstr "asm terimi `%E'nin türü saptanamadı" + + #: cp/semantics.c:1053 + msgid "ISO C++ does not permit named return values" + msgstr "ISO C++ isimli dönen deÄŸerlere izin vermez" + + #: cp/semantics.c:1062 + msgid "return identifier `%D' already in place" + msgstr "dönüş belirteci `%D' zaten yerinde" + + #: cp/semantics.c:1070 + msgid "can't redefine default return value for constructors" + msgstr "kurucular için öntanımlı dönüş deÄŸeri tekrar tanımlanamaz" + + #: cp/semantics.c:1137 + msgid "base initializer for `%T'" + msgstr "`%T' için taban ilklendirici" + + #: cp/semantics.c:1139 + msgid " will be re-ordered to precede member initializations" + msgstr " üye ilklendirmelerinin öncesinde yeniden sıralanmış olacak" + + #: cp/semantics.c:1327 + msgid "`this' is unavailable for static member functions" + msgstr "statik üye iÅŸlevlerde `this' kullanılmaz" + + #: cp/semantics.c:1333 + msgid "invalid use of `this' in non-member function" + msgstr "üye olmayan iÅŸlevde `this' kullanımı geçersiz" + + #: cp/semantics.c:1335 + msgid "invalid use of `this' at top level" + msgstr "tepe seviyede `this' kullanımı geçersiz" + + #: cp/semantics.c:1373 + msgid "calling type `%T' like a method" + msgstr "tür `%T' çaÄŸrısı tıpkı bir yöntem gibi" + + #: cp/semantics.c:1409 + msgid "destructor specifier `%T::~%T()' must have matching names" + msgstr "yıkıcı belirteci `%T::~%T()' uyumlu isimlere sahip olmalı" + + #: cp/semantics.c:1415 + msgid "`%E' is not of type `%T'" + msgstr "`%E' `%T' türünde deÄŸil" + + #: cp/semantics.c:1608 + msgid "template type parameters must use the keyword `class' or `typename'" + msgstr "ÅŸablon türü parametrelerde `class' ya da `typename' sözcükleri kullanılmalı" + + #: cp/semantics.c:1670 + msgid "definition of `%#T' inside template parameter list" + msgstr "ÅŸablon parametre listesinde `%#T' tanımı" + + #: cp/semantics.c:1686 + msgid "invalid definition of qualified type `%T'" + msgstr "nitelikli tür `%T' tanımı geçersiz" + + #: cp/semantics.c:2039 + msgid "base class `%T' has cv qualifiers" + msgstr "taban sınıf `%T' cv niteleyiciler içeriyor" + + #: cp/semantics.c:2072 + msgid "multiple declarators in template declaration" + msgstr "ÅŸablon bildiriminde çoklu bildiriciler" + + #: cp/spew.c:239 + #, c-format + msgid "identifier name `%s' conflicts with GNU C++ internal naming strategy" + msgstr "tanıtıcı ismi `%s' GNU C++ dahili adlandırma stratejisi ile çeliÅŸiyor" + + #: cp/spew.c:1017 cp/spew.c:1292 + msgid "parse error at end of saved function text" + msgstr "kayıtlı iÅŸlev metninin sonunda ayrıştırma hatası" + + #: cp/spew.c:1062 + msgid "parse error in method specification" + msgstr "yöntem özelliklerinde ayrıştırma hatası" + + #: cp/spew.c:1104 + msgid "function body for constructor missing" + msgstr "kurucu için iÅŸlev gövdesi yok" + + #: cp/spew.c:1371 + msgid "circular dependency in default args of `%#D'" + msgstr "`%#D' lik öntanımlı argümanlarda döngüsel bağımlılık" + + #: cp/spew.c:1435 + msgid "invalid type `%T' for default argument to `%T'" + msgstr "`%T'ye öntanımlı argüman olarak geçersiz `%T' türü" + + #: cp/spew.c:1495 + #, c-format + msgid "%s before `%s'" + msgstr "`%2$s' den önce %1$s" + + #: cp/spew.c:1497 + #, c-format + msgid "%s before `%c'" + msgstr "`%2$c' den önce %1$s" + + #: cp/spew.c:1499 + #, c-format + msgid "%s before `\\%o'" + msgstr "`\\%2$o' den önce %1$s" + + #: cp/spew.c:1502 + #, c-format + msgid "%s before `%s' token" + msgstr "`%2$s' dizgeciÄŸinden önce %1$s" + + #: cp/tree.c:224 + #, c-format + msgid "non-lvalue in %s" + msgstr "%s içinde olmayan sol yan" + + #: cp/tree.c:578 + msgid "`%V' qualifiers cannot be applied to `%T'" + msgstr "`%V' niteleyicisi `%T' ye uygulanamaz" + + #: cp/tree.c:581 + msgid "ignoring `%V' qualifiers on `%T'" + msgstr "`%V' niteleyicileri `%T'de yoksayılıyor" + + #: cp/tree.c:1920 + #, c-format + msgid "`%s' attribute can only be applied to Java class definitions" + msgstr "`%s' özniteliÄŸi sadece Java sınıf tanımlarında uygulanabilir" + + #: cp/tree.c:1950 + #, c-format + msgid "`%s' attribute can only be applied to class definitions" + msgstr "`%s' özniteliÄŸi sadece sınıf tanımlarında uygulanabilir" + + #: cp/tree.c:1956 + #, c-format + msgid "`%s' is obsolete; g++ vtables are now COM-compatible by default" + msgstr "`%s' artık kullanılmıyor; g++ vtables ÅŸimdi öntanımlı olarak COM-uyumludur" + + #: cp/tree.c:1981 + msgid "requested init_priority is not an integer constant" + msgstr "istenen init_priority bir tamsayı sabit deÄŸil" + + #: cp/tree.c:2002 + #, c-format + msgid "can only use `%s' attribute on file-scope definitions of objects of class type" + msgstr "`%s' özniteliÄŸi sadece sınıf türünün nesnelerinin dosya baÄŸlamı tanımlarında kullanılabilir" + + #: cp/tree.c:2010 + msgid "requested init_priority is out of range" + msgstr "istenen init_priority kapsamdışı" + + #: cp/tree.c:2020 + msgid "requested init_priority is reserved for internal use" + msgstr "istenen init_priority iç kullanım için ayrılmıştır" + + #: cp/tree.c:2030 + #, c-format + msgid "`%s' attribute is not supported on this platform" + msgstr "bu hedefte `%s' özniteliÄŸi desteklenmiyor" + + #: cp/typeck.c:518 + #, c-format + msgid "ISO C++ forbids %s between pointer of type `void *' and pointer-to-function" + msgstr "ISO C++'da iÅŸlev ve `void *' tür göstergeleri arasında %s yasaktır" + + #: cp/typeck.c:539 + msgid "%s between distinct pointer types `%T' and `%T' lacks a cast" + msgstr "%s farklı gösterge türleri `%T' ve `%T' arasında bir çevrimi kaldırır" + + #: cp/typeck.c:1430 + msgid "ISO C++ prohibits conversion from `%#T' to `(...)'" + msgstr "ISO C++ `%#T' den `(...)' ya dönüşümü yasaklar" + + #: cp/typeck.c:1500 + msgid "ISO C++ forbids applying `sizeof' to a function type" + msgstr "ISO C++ iÅŸlev türe `sizeof' uygulanmasına izin vermez" + + #: cp/typeck.c:1506 + msgid "ISO C++ forbids applying `sizeof' to a member function" + msgstr "ISO C++ bir üye iÅŸleve `sizeof' uygulanmasına izin vermez" + + #: cp/typeck.c:1512 + msgid "ISO C++ forbids applying `sizeof' to type `void' which is an incomplete type" + msgstr "ISO C++ bir boÅŸ tür olan `void' türe `sizeof' uygulanmasına izin vermez" + + #: cp/typeck.c:1526 + msgid "`sizeof' applied to non-static member" + msgstr "'sizeof' bir statik olmayan üyeye uygulandı" + + #: cp/typeck.c:1531 + msgid "`sizeof' applied to incomplete type `%T'" + msgstr "sizeof bir içi boÅŸ `%T' türüne uygulandı" + + #: cp/typeck.c:1561 + msgid "sizeof applied to a bit-field" + msgstr "sizeof bir bit alanına uygulandı" + + #: cp/typeck.c:1564 + msgid "ISO C++ forbids applying `sizeof' to an expression of function type" + msgstr "ISO C++ bir iÅŸlev türü ifadesine `sizeof' uygulanmasına izin vermez" + + #: cp/typeck.c:1711 + msgid "invalid use of non-lvalue array" + msgstr "sol tarafsız dizi kullanımı geçersiz" + + #: cp/typeck.c:1817 + msgid "deprecated conversion from string constant to `%T'" + msgstr "dizge sabitten `%T' ye modası geçmiÅŸ dönüşüm" + + #: cp/typeck.c:1835 + msgid "request for member `%T::%D' in expression of non-aggregate type `%T'" + msgstr "üye `%T::%D' için kümeleme türü olmayan tür `%T' ifadesi içinde istek" + + #: cp/typeck.c:2030 + msgid "destructor specifier `%T::~%T' must have matching names" + msgstr "yıkıcı belirteci `%T::~%T' uyumlu isimlere sahip olmalı" + + #: cp/typeck.c:2036 + msgid "type `%T' has no destructor" + msgstr "tür `%T' yıkıcıya sahip deÄŸil" + + #: cp/typeck.c:2053 cp/typeck.c:2135 + msgid "invalid use of type decl `%#D' as expression" + msgstr "ifade olarak tür bildirimi `%#D' kullanımı geçersiz" + + #: cp/typeck.c:2058 + msgid "invalid use of template `%#D' as expression" + msgstr "ifade olarak tür ÅŸablon `%#D' kullanımı geçersiz" + + #: cp/typeck.c:2126 + msgid "`%#T' has no member named `%D'" + msgstr "`%#T' `%D' isminde bir üye içermiyor" + + #: cp/typeck.c:2176 cp/typeck.c:2205 + msgid "invalid offsetof from non-POD type `%#T'; use pointer to member instead" + msgstr "POD olmayan tür `%T' deki offsetof geçersiz; yerine üyeye gösterge kullanın" + + #. A pointer to incomplete type (other than cv void) can be + #. dereferenced [expr.unary.op]/1 + #: cp/typeck.c:2316 + msgid "`%T' is not a pointer-to-object type" + msgstr "`%T' bir nesneye gösterge türü deÄŸil" + + #: cp/typeck.c:2343 + #, c-format + msgid "invalid use of `%s' on pointer to member" + msgstr "üyeye göstergede `%s' kullanımı geçersiz" + + #: cp/typeck.c:2349 + msgid "invalid type argument" + msgstr "tür argümanı geçersiz" + + #: cp/typeck.c:2452 + msgid "ISO C++ forbids subscripting non-lvalue array" + msgstr "ISO C++ sol yan olmayan dizi indislemesine izin vermez" + + #: cp/typeck.c:2463 + msgid "subscripting array declared `register'" + msgstr "`register' olarak bildirilmiÅŸ dizi indislemesi" + + #: cp/typeck.c:2638 cp/typeck.c:2788 + msgid "pointer to member function called, but not in class scope" + msgstr "üye iÅŸleve gösterge çaÄŸrıldı ama sınıf kapsamında deÄŸil" + + #: cp/typeck.c:2662 + msgid "object missing in call to method `%D'" + msgstr "yöntem `%D' ye çaÄŸrı içinde nesne eksik" + + #: cp/typeck.c:2706 + msgid "function `%D' declared overloaded, but no definitions appear with which to resolve it?!?" + msgstr "iÅŸlev `%D' aşırı yükü bildirilmiÅŸ ama onu çözümleyecek olanla görünen bir tanımı yok!?!" + + #: cp/typeck.c:2786 + msgid "invalid call to member function needing `this' in static member function scope" + msgstr "statik üye iÅŸlev kapsamında `this' gerektiren üye iÅŸleve çaÄŸrı geçersiz" + + #: cp/typeck.c:2965 + msgid "ISO C++ forbids calling `::main' from within program" + msgstr "ISO C++ program içinden `::main' çaÄŸrısına izin vermez" + + #: cp/typeck.c:2990 + #, c-format + msgid "must use .* or ->* to call pointer-to-member function in `%E (...)'" + msgstr "`%E (...)' içindeki üyeye gösterge iÅŸlevi çağırmada .* ya da ->* kullanılmalı" + + #: cp/typeck.c:3003 + #, c-format + msgid "`%E' cannot be used as a function" + msgstr "`%E' bir iÅŸlev olarak kullanılamaz" + + #: cp/typeck.c:3128 + msgid "too many arguments to %s `%+#D'" + msgstr "%s `%+#D' için argümanlar çok fazla" + + #: cp/typeck.c:3169 + msgid "parameter type of called function is incomplete" + msgstr "çaÄŸrılan iÅŸlevin parametre türünün içi boÅŸ" + + #: cp/typeck.c:3236 + msgid "too few arguments to %s `%+#D'" + msgstr "%s `%+#D' için argümanlar çok az" + + #: cp/typeck.c:3364 cp/typeck.c:3374 + msgid "assuming cast to type `%T' from overloaded function" + msgstr "aşırı yüklü iÅŸlevden tür `%T' ye çevirim yapıldığı varsayılıyor" + + #: cp/typeck.c:3434 + #, c-format + msgid "division by zero in `%E / 0'" + msgstr "`%E / 0' da sıfırla bölme" + + #: cp/typeck.c:3436 + #, c-format + msgid "division by zero in `%E / 0.'" + msgstr "`%E / 0.' da sıfırla bölme" + + #: cp/typeck.c:3466 + #, c-format + msgid "division by zero in `%E %% 0'" + msgstr "`%E %% 0' da sıfırla bölme" + + #: cp/typeck.c:3468 + #, c-format + msgid "division by zero in `%E %% 0.'" + msgstr "`%E %% 0.' da sıfırla bölme" + + #: cp/typeck.c:3548 + #, c-format + msgid "%s rotate count is negative" + msgstr "%s döngü sayısı negatif" + + #: cp/typeck.c:3551 + #, c-format + msgid "%s rotate count >= width of type" + msgstr "%s döngü sayısı >= tür geniÅŸliÄŸi" + + #: cp/typeck.c:3582 cp/typeck.c:3587 cp/typeck.c:3678 cp/typeck.c:3683 + msgid "ISO C++ forbids comparison between pointer and integer" + msgstr "ISO C++ da gösterge ile tamsayı arasında karşılaÅŸtırmaya izin verilmez" + + #: cp/typeck.c:3863 + msgid "comparison between types `%#T' and `%#T'" + msgstr "`%#T' ile `%#T' türleri arasında karşılaÅŸtırma" + + #: cp/typeck.c:3899 + msgid "comparison between signed and unsigned integer expressions" + msgstr "iÅŸaretli ve iÅŸaretsiz tamsayı ifadeler arasında karşılaÅŸtırma" + + #: cp/typeck.c:3964 + msgid "invalid operands of types `%T' and `%T' to binary `%O'" + msgstr "iki terimli `%O' için `%T' ve `%T' türünde geçersiz terimler" + + #. Some sort of arithmetic operation involving NULL was + #. performed. Note that pointer-difference and pointer-addition + #. have already been handled above, and so we don't end up here in + #. that case. + #: cp/typeck.c:3986 + msgid "NULL used in arithmetic" + msgstr "aritmetik içinde NULL kullanımı" + + #: cp/typeck.c:4053 + msgid "ISO C++ forbids using pointer of type `void *' in subtraction" + msgstr "ISO C++ bir çıkartma iÅŸlemi içinde `void *' türde gösterge kullanımına izin vermez" + + #: cp/typeck.c:4055 + msgid "ISO C++ forbids using pointer to a function in subtraction" + msgstr "ISO C++ bir çıkartma iÅŸlemi içindeki bir iÅŸleve gösterge kullanımına izin vermez" + + #: cp/typeck.c:4057 + msgid "ISO C++ forbids using pointer to a method in subtraction" + msgstr "ISO C++ bir çıkartma iÅŸlemi içindeki bir yönteme gösterge kullanımına izin vermez" + + #: cp/typeck.c:4059 + msgid "ISO C++ forbids using pointer to a member in subtraction" + msgstr "ISO C++ bir çıkartma iÅŸlemi içindeki bir üyeye gösterge kullanımına izin vermez" + + #: cp/typeck.c:4071 + msgid "invalid use of a pointer to an incomplete type in pointer arithmetic" + msgstr "gösterge aritmetiÄŸinde tamamlanmamış türe gösterge kullanımı geçersiz" + + #: cp/typeck.c:4108 + msgid "attempt to take address of bit-field structure member `%D'" + msgstr "bit-alanı yapının `%D' üyesinin adresi alınmaya çalışılıyor" + + #: cp/typeck.c:4185 + msgid "taking address of temporary" + msgstr "geçicinin adresi alınıyor" + + #: cp/typeck.c:4387 + #, c-format + msgid "ISO C++ forbids %sing an enum" + msgstr "ISO C++ bir enum'um %s-lenmesine izin vermez" + + #: cp/typeck.c:4399 + msgid "cannot %s a pointer to incomplete type `%T'" + msgstr "içi boÅŸ tür `%T' ye bir gösterge %s yapılamaz" + + #: cp/typeck.c:4406 + msgid "ISO C++ forbids %sing a pointer of type `%T'" + msgstr "ISO C++ da bir `%T' türü gösterge %s için izin verilmez" + + #: cp/typeck.c:4431 + msgid "cast to non-reference type used as lvalue" + msgstr "sol yan olarak kullanılmış referans olmayan türe çevirim" + + #: cp/typeck.c:4465 + msgid "invalid use of `--' on bool variable `%D'" + msgstr "bool deÄŸiÅŸken `%D' üstünde `--' kullanımı geçersiz" + + #. ARM $3.4 + #: cp/typeck.c:4498 + msgid "ISO C++ forbids taking address of function `::main'" + msgstr "ISO C++ `::main' iÅŸlevinin adresinin alınmasına izin vermez" + + #. An expression like &memfn. + #: cp/typeck.c:4565 + msgid "ISO C++ forbids taking the address of an unqualified non-static member function to form a pointer to member function. Say `&%T::%D'" + msgstr "ISO C++ üye iÅŸleve bir gösterge ÅŸekillendirecek bir niteliksiz statik olmayan üye iÅŸlevin adresinin alınmasına izin vermez. `&%T::%D' denebilir." + + #: cp/typeck.c:4567 + msgid "ISO C++ forbids taking the address of a bound member function to form a pointer to member function. Say `&%T::%D'" + msgstr "ISO C++ üye iÅŸleve bir gösterge ÅŸekillendirecek bir sınır üye iÅŸlevin adresinin alınmasına izin vermez. `&%T::%D' denebilir" + + #: cp/typeck.c:4591 + msgid "ISO C++ forbids taking the address of a cast to a non-lvalue expression" + msgstr "ISO C++ bir sol yan olmayan ifadeye çevirimin adresinin alınmasına izin vermez" + + #: cp/typeck.c:4607 + msgid "unary `&'" + msgstr "tekil `&'" + + #: cp/typeck.c:4727 + msgid "taking address of destructor" + msgstr "yıkıcı adresinin alınması" + + #: cp/typeck.c:4740 + msgid "taking address of bound pointer-to-member expression" + msgstr "üyeye gösterge ifadesinin sınır adresi alınıyor" + + #: cp/typeck.c:4756 + msgid "cannot create pointer to reference member `%D'" + msgstr "referans üyesi `%D' için gösterge oluÅŸturulamaz" + + #: cp/typeck.c:4824 + msgid "cannot take the address of `this', which is an rvalue expression" + msgstr "bir saÄŸ yan ifade olarak `this'in adresi alınamaz" + + #: cp/typeck.c:4840 + msgid "address requested for `%D', which is declared `register'" + msgstr "`register' olarak bildirilmiÅŸ `%D' için adres isteÄŸi" + + #: cp/typeck.c:5060 + msgid "static_cast from type `%T' to type `%T' casts away constness" + msgstr "`%T' den `%T' ye static_cast const'suz dışına çevirim yapıyor" + + #: cp/typeck.c:5068 + msgid "invalid static_cast from type `%T' to type `%T'" + msgstr "tür `%T' den tür `%T' ye static_cast geçersiz" + + #: cp/typeck.c:5107 + msgid "invalid reinterpret_cast of an rvalue expression of type `%T' to type `%T'" + msgstr "tür `%T' nin bir saÄŸ deÄŸerinin tür `%T' ye reinterpret_cast geçersiz" + + #: cp/typeck.c:5127 + msgid "reinterpret_cast from `%T' to `%T' loses precision" + msgstr "`%T' den `%T' ye reinterpret_cast doÄŸruluÄŸu kaybediyor" + + #: cp/typeck.c:5140 + msgid "reinterpret_cast from `%T' to `%T' casts away const (or volatile)" + msgstr "`%T' den `%T' ye reinterpret_cast const (ya da volatile) dışı çevirim yapıyor" + + #: cp/typeck.c:5149 + msgid "ISO C++ forbids casting between pointer-to-function and pointer-to-object" + msgstr "ISO C++ iÅŸlev ve nesne göstergeleri arasında çevirime izin vermez" + + #: cp/typeck.c:5155 + msgid "invalid reinterpret_cast from type `%T' to type `%T'" + msgstr "tür `%T' den tür `%T' ye reinterpret_cast geçersiz" + + #: cp/typeck.c:5182 + msgid "invalid use of const_cast with type `%T', which is not a pointer, reference, nor a pointer-to-data-member type" + msgstr "ne bir gösterge ne de bir veri-üyesi-göstergesi olan tür `%T' ile const_cast kullanımı geçersiz" + + #: cp/typeck.c:5185 + msgid "invalid use of const_cast with type `%T', which is a pointer or reference to a function type" + msgstr "bir gösterge ya da bir iÅŸlev türüne referans tür `%T' ile const_cast kullanımı geçersiz" + + #: cp/typeck.c:5208 + msgid "invalid const_cast of an rvalue of type `%T' to type `%T'" + msgstr "tür `%T' nin bir saÄŸ deÄŸerinden tür `%T' ye const_cast geçersiz" + + #: cp/typeck.c:5224 + msgid "invalid const_cast from type `%T' to type `%T'" + msgstr "tür `%T' den tür `%T' ye const_cast geçersiz" + + #: cp/typeck.c:5266 cp/typeck.c:5271 + msgid "ISO C++ forbids casting to an array type `%T'" + msgstr "ISO C++ da `%T' dizi türüne çevirime izin verilmez" + + #: cp/typeck.c:5279 + msgid "invalid cast to function type `%T'" + msgstr "`%T' iÅŸlev türüne çevirim geçersiz" + + #: cp/typeck.c:5331 + msgid "cast from `%T' to `%T' discards qualifiers from pointer target type" + msgstr "`%T' den `%T' ye çevirim, gösterge hedef türünden niteleyicileri iptal ediyor" + + #: cp/typeck.c:5377 + msgid "cast from `%T' to `%T' increases required alignment of target type" + msgstr "`%T' den `%T' ye çevirim hedef türün hizalama gereksinimini arttırıyor" + + #: cp/typeck.c:5546 + msgid " in evaluation of `%Q(%#T, %#T)'" + msgstr " `%Q(%#T, %#T)' nin geliÅŸiminde" + + #: cp/typeck.c:5588 + msgid "ISO C++ forbids cast to non-reference type used as lvalue" + msgstr "ISO C++ sol yan olarak kullanılmış referanssız türe çevirime izin vermez" + + #: cp/typeck.c:5659 + msgid "incompatible types in assignment of `%T' to `%T'" + msgstr "`%T' den `%T' ye deÄŸer atamada uyumsuz türler" + + #: cp/typeck.c:5666 + msgid "ISO C++ forbids assignment of arrays" + msgstr "ISO C++ dizilerin deÄŸer atanarak bildirimine izin vermez" + + #: cp/typeck.c:5809 + msgid " in pointer to member function conversion" + msgstr " göstergeden üye iÅŸleve dönüşümde" + + #: cp/typeck.c:5817 + msgid " in pointer to member conversion" + msgstr " göstergeden üyeye dönüşümde" + + #. This is a reinterpret cast, we choose to do nothing. + #: cp/typeck.c:5828 cp/typeck.c:5847 + msgid "pointer to member cast via virtual base `%T' of `%T'" + msgstr "sanal taban `%T' (`%T' nin) üzerinden göstergeden üyeye çevirim" + + #: cp/typeck.c:5851 + msgid "pointer to member conversion via virtual base `%T' of `%T'" + msgstr "`%T' nin sanal tabanı `%T' üzerinden üye göstergesine dönüşüm" + + #: cp/typeck.c:5921 + msgid "invalid conversion to type `%T' from type `%T'" + msgstr "tür `%T' nin `%T' den dönüşümü geçersiz" + + #: cp/typeck.c:6086 + msgid "passing NULL used for non-pointer %s %P of `%D'" + msgstr "`%D' iÅŸlevinin %P. argümanında göstergesiz %s için kulanılan NULL'un aktarılmasında" + + #: cp/typeck.c:6089 + msgid "%s to non-pointer type `%T' from NULL" + msgstr "NULL'dan gösterge olmayan tür `%T' ye %s" + + #: cp/typeck.c:6097 + msgid "passing `%T' for %s %P of `%D'" + msgstr "`%D' iÅŸlevinin %P. argümanında %s için `%T'nin aktarılmasında" + + #: cp/typeck.c:6100 + msgid "%s to `%T' from `%T'" + msgstr "`%T' nin `%T' den %s" + + #: cp/typeck.c:6110 + msgid "passing negative value `%E' for %s %P of `%D'" + msgstr "`%D' iÅŸlevinin %P. argümanında %s için `%T' negatif deÄŸerinin aktarılmasında" + + #: cp/typeck.c:6113 + msgid "%s of negative value `%E' to `%T'" + msgstr "%s `%E' nin `%T' için negatif deÄŸeridir" + + #: cp/typeck.c:6200 + msgid "cannot convert `%T' to `%T' for argument `%P' to `%D'" + msgstr "`%T' `%T' ye argüman `%P' den `%D' ye için dönüştürülemez" + + #: cp/typeck.c:6203 + msgid "cannot convert `%T' to `%T' in %s" + msgstr " `%T' `%T' ye %s içinde dönüştürülemez" + + #: cp/typeck.c:6290 cp/typeck.c:6292 + msgid "in passing argument %P of `%+D'" + msgstr "`%+D' nin %P. argümanının aktarılmasında" + + #: cp/typeck.c:6406 + msgid "returning reference to temporary" + msgstr "geçiciye referans dönüyor" + + #: cp/typeck.c:6413 + msgid "reference to non-lvalue returned" + msgstr "saÄŸ yansız dönüşlüye referans" + + #: cp/typeck.c:6425 + msgid "reference to local variable `%D' returned" + msgstr "yerel deÄŸiÅŸken `%D' ye referansa döndürüldü" + + #: cp/typeck.c:6428 + msgid "address of local variable `%D' returned" + msgstr "yerel deÄŸiÅŸken `%D' adresi döndürüldü" + + #: cp/typeck.c:6459 + msgid "returning a value from a destructor" + msgstr "bir yıkıcıdan deÄŸer dönüyor" + + #. If a return statement appears in a handler of the + #. function-try-block of a constructor, the program is ill-formed. + #: cp/typeck.c:6467 + msgid "cannot return from a handler of a function-try-block of a constructor" + msgstr "bir kurucunun bir iÅŸlev deneme bloÄŸunun bir tutamağından döndürülemez" + + #. You can't return a value from a constructor. + #: cp/typeck.c:6470 + msgid "returning a value from a constructor" + msgstr "kurucudan bir deÄŸer döndürülemez" + + #: cp/typeck.c:6487 + msgid "return-statement with no value, in function declared with a non-void return type" + msgstr "void olmayan dönen türlü iÅŸlevde return deyimi deÄŸer almamış" + + #: cp/typeck.c:6503 + msgid "return-statement with a value, in function declared with a void return type" + msgstr "void dönüşlü bildirilmiÅŸ iÅŸlevde return deyiminde bir deÄŸer var" + + #: cp/typeck.c:6524 + msgid "`operator new' must not return NULL unless it is declared `throw()' (or -fcheck-new is in effect)" + msgstr "`operator new', `throw()' olarak bildirilmedikçe NULL dönmemeli (ya da -fcheck-new etkisindedir)" + + #: cp/typeck2.c:54 + msgid "type `%T' is not a base type for type `%T'" + msgstr "tür `%T' tür `%T' için taban tür deÄŸil" + + #: cp/typeck2.c:151 + msgid "cannot declare variable `%D' to be of type `%T'" + msgstr "deÄŸiÅŸken `%D' `%T' türünde bildirilemez" + + #: cp/typeck2.c:154 + msgid "cannot declare parameter `%D' to be of type `%T'" + msgstr "parametre `%D' `%T' türünde bildirilemez" + + #: cp/typeck2.c:157 + msgid "cannot declare field `%D' to be of type `%T'" + msgstr "alan `%D' `%T' türünde bildirilemez" + + #: cp/typeck2.c:161 + msgid "invalid return type for member function `%#D'" + msgstr "üye iÅŸlev `%#D' için dönen deÄŸer türü geçersiz" + + #: cp/typeck2.c:163 + msgid "invalid return type for function `%#D'" + msgstr "iÅŸlev `%#D' için dönen deÄŸer türü geçersiz" + + #: cp/typeck2.c:166 + msgid "cannot allocate an object of type `%T'" + msgstr "`%T' türünde bir nesne tahsis edilemez" + + #: cp/typeck2.c:173 + msgid " because the following virtual functions are abstract:" + msgstr " çünkü aÅŸağıdaki sanal iÅŸlevler kuramsaldır:" + + #: cp/typeck2.c:175 + msgid "\t%#D" + msgstr "\t%#D" + + #: cp/typeck2.c:178 + msgid " since type `%T' has abstract virtual functions" + msgstr " tür `%T' mutlak sanal iÅŸlevlere sahip olduÄŸundan" + + #: cp/typeck2.c:213 + msgid "invalid use of undefined type `%#T'" + msgstr "tanımsız `%#T' türünün kullanımı geçersiz" + + #: cp/typeck2.c:214 + msgid "forward declaration of `%#T'" + msgstr "`%#T' için ileriye bildirim" + + #: cp/typeck2.c:218 + msgid "invalid use of `%T'" + msgstr "`%T' kullanımı geçersiz" + + #: cp/typeck2.c:232 + msgid "invalid use of member (did you forget the `&' ?)" + msgstr "üye kullanımı geçersiz ( `&' unutuldu mu? )" + + #: cp/typeck2.c:236 + msgid "invalid use of template type parameter" + msgstr "ÅŸablon türü parametre kullanımı geçersiz" + + #: cp/typeck2.c:243 + msgid "address of overloaded function with no contextual type information" + msgstr "baÄŸlamsal tür bilgileri olmayan aşırı yüklü iÅŸlev adresi" + + #: cp/typeck2.c:245 + msgid "overloaded function with no contextual type information" + msgstr "baÄŸlamsal tür bilgileri olmayan aşırı yüklü iÅŸlev" + + #: cp/typeck2.c:247 + msgid "insufficient contextual information to determine type" + msgstr "türü saptayacak baÄŸlamsal bilgiler yetersiz" + + #: cp/typeck2.c:301 + msgid "constructor syntax used, but no constructor declared for type `%T'" + msgstr "kurucu sözdizimi kullanılmış ama `%T' türü için kurucu bildirilmemiÅŸ" + + #: cp/typeck2.c:311 + msgid "initializer list construction invalid for derived class object `%D'" + msgstr "ilklendirici liste yapısı türetilmiÅŸ sınıf nesnesi `%D' için geçersiz" + + #: cp/typeck2.c:313 + msgid "initializer list construction invalid for polymorphic class object `%D'" + msgstr "ilklendirici liste yapısı polimorfik sınıf nesnesi `%D' için geçersiz" + + #: cp/typeck2.c:316 cp/typeck2.c:322 cp/typeck2.c:328 + msgid "initializer list construction invalid for `%D'" + msgstr "ilklendirici liste yapısı `%D' için geçersiz" + + #: cp/typeck2.c:317 + msgid "due to the presence of a constructor" + msgstr "bir kurucunun varlığından kaynaklanıyor" + + #: cp/typeck2.c:323 cp/typeck2.c:329 + msgid "due to non-public access of member `%D'" + msgstr "üye `%D' nin public olmayan eriÅŸiminden dolayı" + + #: cp/typeck2.c:341 + msgid "comma expression used to initialize return value" + msgstr "dönen deÄŸeri ilklendirirken virgüllü ifadeler kullanılmış" + + #: cp/typeck2.c:350 + msgid "cannot initialize arrays using this syntax" + msgstr "bu sözdizimi kullanılarak diziler ilklendirilemez" + + #: cp/typeck2.c:412 + msgid "ISO C++ forbids non-constant aggregate initializer expressions" + msgstr "ISO C++ sabit olmayan kümeleme ilklendirici ifadelerine izin vermez" + + #: cp/typeck2.c:498 + msgid "initializing array with parameter list" + msgstr "dizi parametre listesi ile ilklendiriliyor" + + #: cp/typeck2.c:554 + msgid "initializer for scalar variable requires one element" + msgstr "skalar deÄŸiÅŸken ilklendiricisi bir öğe gerektirir" + + #: cp/typeck2.c:561 + msgid "braces around scalar initializer for `%T'" + msgstr "`%T' için skalar ilklendiriciyi kuÅŸatan parantezler" + + #: cp/typeck2.c:564 + msgid "ignoring extra initializers for `%T'" + msgstr "`%T' için fazladan ilklendiricilerin yoksayılması" + + #: cp/typeck2.c:576 + msgid "variable-sized object of type `%T' may not be initialized" + msgstr "`%T' türünden deÄŸiÅŸken-uzunluklu nesne ilklendirilmiÅŸ olmayabilir" + + #: cp/typeck2.c:586 + msgid "subobject of type `%T' must be initialized by constructor, not by `%E'" + msgstr "`%T' türündeki alt nesne kurucu tarafından ilklendirilmiÅŸ olmalı, `%E' tarafından deÄŸil" + + #: cp/typeck2.c:652 + msgid "aggregate has a partly bracketed initializer" + msgstr "küme kısmen köşeli parantezli ilklendirici içeriyor" + + #: cp/typeck2.c:690 cp/typeck2.c:791 + msgid "non-trivial labeled initializers" + msgstr "anlamsız olmayan etiketli ilklendiriciler" + + #: cp/typeck2.c:707 + msgid "non-empty initializer for array of empty elements" + msgstr "boÅŸ öğeler dizisi için boÅŸ olmayan ilklendirici" + + #: cp/typeck2.c:757 + msgid "initializer list for object of class with virtual base classes" + msgstr "sanal taban sınıflarla sınıf nesnesi için öndeÄŸer listesi" + + #: cp/typeck2.c:763 + msgid "initializer list for object of class with base classes" + msgstr "taban sınıflarla sınıf nesnesi için öndeÄŸer listesi" + + #: cp/typeck2.c:769 + msgid "initializer list for object using virtual functions" + msgstr "sanal iÅŸlevler kullanan nesne için ilklendirici listesi" + + #: cp/typeck2.c:832 cp/typeck2.c:849 + msgid "missing initializer for member `%D'" + msgstr "üye `%D' için ilklendirici eksik" + + #: cp/typeck2.c:837 + msgid "uninitialized const member `%D'" + msgstr "ilklendirilmemiÅŸ sabit üyesi `%D'" + + #: cp/typeck2.c:840 + msgid "member `%D' with uninitialized const fields" + msgstr "üye `%D' ilklendirilmemiÅŸ sabit alanlı" + + #: cp/typeck2.c:843 + msgid "member `%D' is uninitialized reference" + msgstr "üye `%D' ilklendirilmemiÅŸ referanstır" + + #: cp/typeck2.c:886 + msgid "index value instead of field name in union initializer" + msgstr "birleÅŸik yapı ilklendiricideki alan isminin yerine index deÄŸeri" + + #: cp/typeck2.c:898 + msgid "no field `%D' in union being initialized" + msgstr "birleÅŸik yapı ilklendirmesinde `%D' diye bir alan yok" + + #: cp/typeck2.c:906 + msgid "union `%T' with no named members cannot be initialized" + msgstr "union `%T' isimli üyeler yokken ilklendirilemez" + + #: cp/typeck2.c:942 + msgid "excess elements in aggregate initializer" + msgstr "küme ilklendiricide gereÄŸinden fazla öğe" + + #: cp/typeck2.c:1047 + msgid "circular pointer delegation detected" + msgstr "döngüsel gösterge görevlendirmesi saptandı" + + #: cp/typeck2.c:1060 + msgid "base operand of `->' has non-pointer type `%T'" + msgstr "`->' için taban terim bir gösterge olmayan `%T' türünde" + + #: cp/typeck2.c:1074 + msgid "result of `operator->()' yields non-pointer result" + msgstr "`operator->()' gösterge olmayan sonuç veriyor" + + #: cp/typeck2.c:1076 + msgid "base operand of `->' is not a pointer" + msgstr "`->' için taban terim bir gösterge deÄŸil" + + #: cp/typeck2.c:1142 + msgid "`%E' cannot be used as a member pointer, since it is of type `%T'" + msgstr "`%E', `%T' türünde olduÄŸundan bir üye göstergesi plarak kullanılamaz" + + #: cp/typeck2.c:1149 + msgid "cannot apply member pointer `%E' to `%E', which is of non-aggregate type `%T'" + msgstr "üye göstergesi `%E' kümeleme türü olmayan `%T' türündeki `%E' ye uygulanamaz" + + #: cp/typeck2.c:1158 + msgid "member type `%T::' incompatible with object type `%T'" + msgstr "üye türü `%T::' nesne türü `%T' ile uyumsuz" + + #: cp/typeck2.c:1195 + msgid "`%T' fails to be a typedef or built-in type" + msgstr "`%T' bir typedef veya yerleÅŸik tür olarak hatalı" + + #: cp/typeck2.c:1268 + #, c-format + msgid "ISO C++ forbids defining types within %s" + msgstr "ISO C++ %s ile türlerin tanımlanmasına izin vermez" + + #. XXX Not i18n clean. + #: cp/cp-tree.h:3854 + #, c-format + msgid "%s is deprecated, please see the documentation for details" + msgstr "%s artık kullanılmıyor, lütfen ayrıntılar için belgelere bakınız" + + #: cp/lang-options.h:29 + msgid "Do not obey access control semantics" + msgstr "EriÅŸim denetimi kurallarına uyulmaz" + + #: cp/lang-options.h:31 + msgid "Change when template instances are emitted" + msgstr "Åžablon gerçeklemeleri yayınlandığında deÄŸiÅŸtirilir" + + #: cp/lang-options.h:36 + msgid "Check the return value of new" + msgstr "new iÅŸlemiminin dönen deÄŸeri denetlenir" + + #: cp/lang-options.h:39 + msgid "Reduce size of object files" + msgstr "Nesne dosyalarını küçültür" + + #: cp/lang-options.h:43 + msgid "Make string literals `char[]' instead of `const char[]'" + msgstr "Dizge sabitler `const char[]' deÄŸil `char[]' yapılır" + + #: cp/lang-options.h:46 + msgid "Dump the entire translation unit to a file" + msgstr "Çeviri biriminin tamamı bir dosyaya dökümlenir" + + #: cp/lang-options.h:48 + msgid "Do not inline member functions by default" + msgstr "Öntanımlı olarak üye iÅŸlevler özümlenmez" + + #: cp/lang-options.h:51 + msgid "Do not generate run time type descriptor information" + msgstr "Çalışma anı tür tanımlayıcı bilgisi üretilmez" + + #: cp/lang-options.h:56 + msgid "Do not generate code to check exception specifications" + msgstr "" + "OlaÄŸandışılık özelliklerini denetleyecek kod\n" + " üretilmez" + + #: cp/lang-options.h:61 + msgid "Scope of for-init-statement vars extends outside" + msgstr "" + "For döngüsü baÅŸlatma satırındaki deÄŸiÅŸkenlerin\n" + " etki alanını dışarıya geniÅŸletir" + + #: cp/lang-options.h:64 + msgid "Do not recognize GNU defined keywords" + msgstr "GNU tanımlı anahtar sözcükler tanınmaz" + + #: cp/lang-options.h:68 + msgid "Enable support for huge objects" + msgstr "Dev nesneler için destek etkinleÅŸtirilir" + + #: cp/lang-options.h:72 + msgid "Export functions even if they can be inlined" + msgstr "Özümlenebilir olsalar bile iÅŸlevler ihracedilir" + + #: cp/lang-options.h:75 + msgid "Only emit explicit template instatiations" + msgstr "" + "Sadece doÄŸrudan belirtilmiÅŸ ÅŸablon gerçeklemeleri\n" + " yayınlanır" + + #: cp/lang-options.h:78 + msgid "Only emit explicit instatiations of inline templates" + msgstr "" + "Sadece özümleme ÅŸablonlarının doÄŸrudan baÅŸka\n" + " deÄŸerlerle gerçeklenmesi saÄŸlanır" + + #: cp/lang-options.h:84 + msgid "Don't pedwarn about uses of Microsoft extensions" + msgstr "" + "Microsoft uzantılarının kullanımı hakkındaki\n" + " gereksiz uyarılar verilmez" + + #: cp/lang-options.h:87 + msgid "Recognize and/bitand/bitor/compl/not/or/xor" + msgstr "and/bitand/bitor/compl/not/or/xor tanınır" + + #: cp/lang-options.h:91 + msgid "Disable optional diagnostics" + msgstr "Seçimlik teÅŸhisler yapılmaz" + + #: cp/lang-options.h:93 + msgid "Downgrade conformance errors to warnings" + msgstr "Uyumluluk hatalarını uyarılara indirger" + + #: cp/lang-options.h:96 + msgid "Enable automatic template instantiation" + msgstr "Otomatik ÅŸablon gerçeklemesi etkinleÅŸtirilir" + + #: cp/lang-options.h:101 + msgid "Display statistics accumulated during compilation" + msgstr "Derleme sırasında toplanan istatistikler gösterilir" + + #: cp/lang-options.h:104 + msgid "Specify maximum template instantiation depth" + msgstr "" + "En büyük ÅŸablon gerçekleme derinliÄŸi seçeneÄŸe\n" + " eklenen bir sayı olarak belirtilir" + + #: cp/lang-options.h:106 + msgid "Use __cxa_atexit to register destructors" + msgstr "Yazmaç yıkıcılara __cxa_atexit kullanılır" + + #: cp/lang-options.h:109 + msgid "Discard unused virtual functions" + msgstr "Kullanılmayan sanal iÅŸlevler iptal edilir" + + #: cp/lang-options.h:112 + msgid "Implement vtables using thunks" + msgstr "İşlev gösterge tablosu aşılarla oluÅŸturulur" + + #: cp/lang-options.h:115 + msgid "Emit common-like symbols as weak symbols" + msgstr "Benzer semboller zayıf semboller olarak ele alınır" + + #: cp/lang-options.h:118 + msgid "Emit cross referencing information" + msgstr "Çapraz referans bilgisi yayınlanır" + + #: cp/lang-options.h:122 + msgid "Warn about inconsistent return types" + msgstr "ÇeliÅŸkili dönen türler hakkında uyarır" + + #: cp/lang-options.h:125 + msgid "Warn about overloaded virtual function names" + msgstr "Aşırı yüklü sanal iÅŸlev isimleri hakkında uyarır" + + #: cp/lang-options.h:129 + msgid "Don't warn when all ctors/dtors are private" + msgstr "Tüm kurucu/yıkıcı iÅŸlevler private olduÄŸunda uyarmaz" + + #: cp/lang-options.h:131 + msgid "Warn about non virtual destructors" + msgstr "Sanal olmayan yıkıcılar hakkında uyarır" + + #: cp/lang-options.h:134 + msgid "Warn when a function is declared extern, then inline" + msgstr "" + "Bir iÅŸlev önce extern sonra da inline olarak\n" + " bildirilmiÅŸse uyarır" + + #: cp/lang-options.h:137 + msgid "Warn when the compiler reorders code" + msgstr "Derleyici kodu yeniden sıralarken uyarır" + + #: cp/lang-options.h:140 + msgid "Warn when synthesis behavior differs from Cfront" + msgstr "Sentezleme davranışı Cfront'dan farklıysa uyarır" + + #: cp/lang-options.h:144 + msgid "Don't warn when type converting pointers to member functions" + msgstr "Üye iÅŸlev tür dönüşüm göstergelerinde uyarmaz" + + #: cp/lang-options.h:146 + msgid "Warn about violations of Effective C++ style rules" + msgstr "Effective C++ tarzı kuralların çeliÅŸkilerinde uyarmaz" + + #: cp/lang-options.h:149 + msgid "Warn when overload promotes from unsigned to signed" + msgstr "" + "unsigned'dan signed'a yükseltmelerin aşırı\n" + " yüklemesinde uyarır" + + #: cp/lang-options.h:152 + msgid "Warn if a C style cast is used in a program" + msgstr "Bir programda C tarzı çevirim kullanılmışsa uyarır" + + #: cp/lang-options.h:156 + msgid "Don't warn when non-templatized friend functions are declared within a template" + msgstr "" + "Åžablonlanmış olmayan kardeÅŸ iÅŸlevler bir ÅŸablonla\n" + " bildirildiÄŸinde uyarır" + + #: cp/lang-options.h:159 + msgid "Don't announce deprecation of compiler features" + msgstr "Derleyici özellikleri indiriminde uyarmaz" + + #: f/bad.c:386 + msgid "note:" + msgstr "bilgi:" + + #: f/bad.c:390 + msgid "warning:" + msgstr "uyarı:" + + #: f/bad.c:394 + msgid "fatal:" + msgstr "ölümcül:" + + #: f/bad.c:436 + msgid "(continued):" + msgstr "(devam):" + + #: f/bad.c:486 f/bad.c:504 + msgid "[REPORT BUG!!] %" + msgstr "[HATAYI RAPORLAYIN!!] %" + + #: f/bad.c:493 f/bad.c:525 + msgid "[REPORT BUG!!]" + msgstr "[HATAYI RAPORLAYIN!!]" + + #: f/com.c:3122 + #, no-c-format + msgid "ASSIGN'ed label cannot fit into `%A' at %0 -- using wider sibling" + msgstr "ASSIGN'lı etiket %0 daki `%A' içine sığmıyor -- daha geniÅŸ çocuklama kullanın" + + #: f/com.c:11606 + msgid "no INTEGER type can hold a pointer on this configuration" + msgstr "bu yapılandırmada bir göstergeyi tutabilen INTEGER tür yok" + + #: f/com.c:11831 + #, c-format + msgid "configuration: REAL, INTEGER, and LOGICAL are %d bits wide," + msgstr "yapılandırma: REAL, INTEGER, ve LOGICAL %d bit uzunlukta ve göstergeler de" + + #: f/com.c:11833 + #, c-format + msgid "and pointers are %d bits wide, but g77 doesn't yet work" + msgstr "%d bit uzunluktadır, ama g77 hepsi 32 bit uzunlukta olmadığından henüz" + + #: f/com.c:11835 + msgid "properly unless they all are 32 bits wide" + msgstr "düzgün çalışmıyor" + + #: f/com.c:11836 + msgid "Please keep this in mind before you report bugs." + msgstr "Lütfen bunu gözönünde bulundurarak bir hata raporu gönderin." + + #. I/O will probably crash. + #: f/com.c:11844 + #, c-format + msgid "configuration: char * holds %d bits, but ftnlen only %d" + msgstr "yapılandırma: char * %d bit tutar ama ftnlen sadece %d bittir" + + #. ASSIGN 10 TO I will crash. + #: f/com.c:11853 + #, c-format + msgid "" + "configuration: char * holds %d bits, but INTEGER only %d --\n" + " ASSIGN statement might fail" + msgstr "" + "yapılandırma: char * %d bit tutar ama INTEGER sadece %d bittir\n" + " -- ASSIGN deyimi baÅŸarısız" + + #: f/com.c:13687 + msgid "In statement function" + msgstr "Deyim iÅŸlevi içinde:" + + #: f/com.c:13697 + msgid "Outside of any program unit:\n" + msgstr "Her program biriminin dışında:\n" + + #: f/com.c:15386 + #, no-c-format + msgid "%A from %B at %0%C" + msgstr "%0%C deki %B den %A" + + #: f/com.c:15563 + msgid "directory name must immediately follow -I" + msgstr "dizin ismi -I'ye yapışık yazılmalı" + + #: f/com.c:15706 + #, no-c-format + msgid "At %0, INCLUDE file %A exists, but is not readable" + msgstr "%0 da, INCLUDE dosyası %A var ama okunabilir deÄŸil" + + #: f/com.c:15741 + #, no-c-format + msgid "At %0, INCLUDE nesting too deep" + msgstr "%0 da, INCLUDE iç içeliÄŸi çok derin" + + #: f/expr.c:9613 + #, no-c-format + msgid "Two arithmetic operators in a row at %0 and %1 -- use parentheses" + msgstr "%0 ve %1 de tek satırda iki aritmetik iÅŸlemimi -- parantez kullanın" + + #: f/expr.c:9663 + #, no-c-format + msgid "Operator at %0 has lower precedence than that at %1 -- use parentheses" + msgstr "%0 daki iÅŸlemimi %1 dekinden daha düşük önceliÄŸe sahip -- parantez kullanın" + + #: f/expr.c:10524 + #, no-c-format + msgid "Use .EQV./.NEQV. instead of .EQ./.NE. at %0 for LOGICAL operands at %1 and %2" + msgstr "%1 ve %2 deki LOGICAL terimleri için %0 da .EQ./.NE. yerine .EQV./.NEQV. kullanın" + + #: f/expr.c:10895 + #, no-c-format + msgid "Unsupported operand for ** at %1 -- converting to default INTEGER" + msgstr "%1 deki ** için desteklenmeyen terim -- öntanımlı olan INTEGER'a dönüştürülüyor" + + #: f/g77spec.c:256 + #, c-format + msgid "overflowed output arg list for `%s'" + msgstr "`%s' için çıktı argüman listesi taÅŸtı" + + #: f/g77spec.c:395 + msgid "--driver no longer supported" + msgstr "--driver artık desteklenmiyor" + + #: f/g77spec.c:408 + #, c-format + msgid "argument to `%s' missing" + msgstr "`%s' için argüman eksik" + + #: f/g77spec.c:412 + msgid "no input files; unwilling to write output files" + msgstr "girdi dosyası yok; çıktı dosyaları istemeyerek yazılıyor" + + #: f/implic.c:203 + #, no-c-format + msgid "Implicit declaration of `%A' at %0" + msgstr "`%A' %0 da örtük bildirilmiÅŸ" + + #: f/lex.c:274 + #, no-c-format + msgid "The meaning of `\\x' (at %0) varies with -traditional" + msgstr "`\\x'in anlamı (%0 içinde) -traditional ile deÄŸiÅŸir" + + #: f/lex.c:325 + #, no-c-format + msgid "The meaning of `\\a' (at %0) varies with -traditional" + msgstr "`\\a'nın anlamı (%0 içinde) -traditional ile deÄŸiÅŸir" + + #: f/lex.c:355 + #, no-c-format + msgid "Non-ISO-C-standard escape sequence `\\%A' at %0" + msgstr "%0 içinde ISO standardı olmayan önceleme dizgesi, '\\%A'" + + #: f/lex.c:374 + #, no-c-format + msgid "Unknown escape sequence `\\%A' at %0" + msgstr "%0 içinde bilinmeyen önceleme dizgesi, `\\%A'" + + #: f/lex.c:383 + #, no-c-format + msgid "Unterminated escape sequence `\\' at %0" + msgstr "%0 içinde sonlandırılmamış denetim dizgesi `\\'" + + #: f/lex.c:394 + #, no-c-format + msgid "Unknown escape sequence `\\' followed by char code 0x%A at %0" + msgstr "0x%A karakter kodundan önceki önceleme dizgesi %0 da, `\\' anlamsız" + + #: f/lex.c:422 + #, no-c-format + msgid "\\x used at %0 with no following hex digits" + msgstr "%0 içinde \\x'den sonra onaltılık rakamlar yok" + + #: f/lex.c:436 + #, no-c-format + msgid "Hex escape at %0 out of range" + msgstr "Onaltılık öncelem %0 da kapsam dışı" + + #: f/lex.c:470 + #, no-c-format + msgid "Escape sequence at %0 out of range for character" + msgstr "%0 daki önceleme dizgesi karakter için kapsam dışı" + + #: f/lex.c:593 + msgid "the meaning of `\\x' varies with -traditional" + msgstr "`\\x'in anlamı -traditional ile deÄŸiÅŸir" + + #: f/lex.c:630 + msgid "hex escape out of range" + msgstr "onaltılık öncelem kapsam dışı" + + #: f/lex.c:676 + msgid "the meaning of `\\a' varies with -traditional" + msgstr "`\\a'nın anlamı -traditional ile deÄŸiÅŸir" + + #: f/lex.c:692 + #, c-format + msgid "non-ANSI-standard escape sequence, `\\%c'" + msgstr "ANSI standardı olmayan önceleme dizgesi, `\\%c'" + + #: f/lex.c:705 + #, c-format + msgid "non-ISO escape sequence `\\%c'" + msgstr "ANSI standardı olmayan önceleme dizgesi, '\\%c'" + + #: f/lex.c:709 + #, c-format + msgid "unknown escape sequence `\\%c'" + msgstr "bilinmeyen önceleme dizgesi, `\\%c'" + + #: f/lex.c:711 + #, c-format + msgid "unknown escape sequence: `\\' followed by char code 0x%x" + msgstr "bilinmeyen önceleme dizgesi, `\\'den sonra 0x%x karakter kodu geliyor" + + #: f/lex.c:788 + msgid "badly formed directive -- no closing quote" + msgstr "hatalı ÅŸekillendirilmiÅŸ yönerge -- kapatan tırnak yok" + + #: f/lex.c:846 + msgid "#-lines for entering and leaving files don't match" + msgstr "girme ve bırakma dosyaları için #-satırları uyumsuz" + + #: f/lex.c:1008 + msgid "bad directive -- missing close-quote" + msgstr "yönerge hatalı -- kapatan tırnak eksik" + + #: f/lex.c:1122 + #, c-format + msgid "ignoring pragma: %s" + msgstr "pragma yoksayılıyor: %s" + + #: f/lex.c:1200 + msgid "invalid #ident" + msgstr "#ident geçersiz" + + #: f/lex.c:1217 + msgid "undefined or invalid # directive" + msgstr "atanmamış ya da geçersiz # yönergesi" + + #: f/lex.c:1273 + msgid "invalid #line" + msgstr "#line geçersiz" + + #: f/lex.c:1329 f/lex.c:1373 + msgid "use `#line ...' instead of `# ...' in first line" + msgstr "ilk satırda `# ...' yerine `#line ...' kullanın" + + #: f/lex.c:1383 + msgid "invalid #-line" + msgstr "#-satırı geçersiz" + + #: f/lex.c:1476 + #, no-c-format + msgid "Null character at %0 -- line ignored" + msgstr "%0 da null karakter(ler) -- satır yoksayıldı" + + #: f/stb.c:12078 + #, no-c-format + msgid "INCLUDE at %0 not the only statement on the source line" + msgstr "%0 daki INCLUDE, kaynak satırındaki tek deyim deÄŸil" + + #: f/ste.c:1404 f/ste.c:1755 + msgid "ASSIGNed FORMAT specifier is too small" + msgstr "ASSIGN'lı FORMAT belirteci çok küçük" + + #. ~~~Someday handle CHARACTER*1, CHARACTER*N + #: f/ste.c:2636 + #, no-c-format + msgid "SELECT CASE on CHARACTER type (at %0) not supported -- sorry" + msgstr "CHARACTER türü SELECT CASE (%0 da) desteklenmiyor -- özür" + + #: f/ste.c:2965 + msgid "ASSIGN to variable that is too small" + msgstr "DeÄŸiÅŸkene ASSIGN çok küçük" + + #: f/ste.c:2993 + msgid "ASSIGNed GOTO target variable is too small" + msgstr "ASSIGN'lı GOTO hedef deÄŸiÅŸkeni çok küçük" + + #: f/stu.c:305 + #, no-c-format + msgid "Local adjustable symbol `%A' at %0" + msgstr "%0 da ayarlanabilir yerel sembol `%A'" + + #: f/target.c:2560 + msgid "data initializer on host with different endianness" + msgstr "farklı kıymetli bayt sıralamalı makina üzerinde veri ilklendirmesi" + + #: f/top.c:238 + #, c-format + msgid "%s no longer supported -- try -fvxt" + msgstr "%s artık desteklenmiyor -- yerine -fvxt deneyin" + + #: f/top.c:240 + #, c-format + msgid "%s no longer supported -- try -fno-vxt -ff90" + msgstr "%s artık desteklenmiyor -- yerine -fno-vxt -ff90 deneyin" + + #: f/top.c:308 f/top.c:310 + #, c-format + msgid "%s disabled, use normal debugging flags" + msgstr "%s iptal edildi, normal hata ayıklama seçeneÄŸi kullanın" + + #: f/lang-options.h:33 + msgid "Print g77-specific compiler version info, run internal tests" + msgstr "" + "g77 ye özel derleyici sürüm bilgisini gösterir ve\n" + " iç testleri yapar" + + #: f/lang-options.h:37 + msgid "Program is written in typical FORTRAN 66 dialect" + msgstr "Program tipik FORTRAN 66 dilinde yazılmıştır" + + #: f/lang-options.h:40 + msgid "Program is written in typical Unix f77 dialect" + msgstr "Program tipik Unix f77 dilinde yazılmıştır" + + #: f/lang-options.h:42 + msgid "Program does not use Unix-f77 dialectal features" + msgstr "Program Unix-f77 dilinin özelliklerini kullanmıyor" + + #: f/lang-options.h:44 + msgid "Program is written in Fortran-90-ish dialect" + msgstr "Program tipik Fortran-90 dilinde yazılmıştır" + + #: f/lang-options.h:48 + msgid "Treat local vars and COMMON blocks as if they were named in SAVE statements" + msgstr "" + "Yerel deÄŸiÅŸkenler ve COMMON blokları SAVE\n" + " deyimlerinde adlandırılmış olarak deÄŸerlendirilir." + + #: f/lang-options.h:50 + msgid "Allow $ in symbol names" + msgstr "Sembol isimlerinde $ kullanımına izin verilir" + + #: f/lang-options.h:54 + msgid "f2c-compatible code need not be generated" + msgstr "f2c uyumlu kod, üretilmemeyi gerektirir" + + #: f/lang-options.h:57 + msgid "Unsupported; do not generate libf2c-calling code" + msgstr "Desteklenmiyor; libf2c çaÄŸrı kodu üretilmez" + + #: f/lang-options.h:59 + msgid "Unsupported; affects code-generation of arrays" + msgstr "Desteklenmiyor; dizilerin kod üretimi etkilenir" + + #: f/lang-options.h:62 + msgid "Program is written in Fortran-90-ish free form" + msgstr "Program Fortran-90'ca serbest biçimde yazılmış" + + #: f/lang-options.h:67 + msgid "Warn about use of (only a few for now) Fortran extensions" + msgstr "" + "Fortran uzantılarının kullanımı hakkında uyarır\n" + " (ÅŸimdilik hepsinde deÄŸil)" + + #: f/lang-options.h:70 + msgid "Program is written in VXT (Digital-like) FORTRAN" + msgstr "Program VXT (Digital-benzeri) FORTRAN da yazılmış" + + #: f/lang-options.h:73 + msgid "Disallow all ugly features" + msgstr "Tüm salak özellikler kapatılır" + + #: f/lang-options.h:76 + msgid "Hollerith and typeless constants not passed as arguments" + msgstr "" + "Hollerith ve türsüz sabitler argüman olarak\n" + " kullanılmaz" + + #: f/lang-options.h:78 + msgid "Allow ordinary copying of ASSIGN'ed vars" + msgstr "" + "ASSIGN'lı deÄŸiÅŸkenlerin olaÄŸan kopyalamasına izin\n" + " verilir" + + #: f/lang-options.h:81 + msgid "Dummy array dimensioned to (1) is assumed-size" + msgstr "Yapay dizi üstindisi (1) kabul edilir" + + #: f/lang-options.h:84 + msgid "Trailing comma in procedure call denotes null argument" + msgstr "Yordam çaÄŸrılarında son virgül null argüman sayılır" + + #: f/lang-options.h:87 + msgid "Allow REAL(Z) and AIMAG(Z) given DOUBLE COMPLEX Z" + msgstr "" + "DOUBLE COMPLEX Z nin REAL(Z) ve AIMAG(Z) olarak\n" + " verilmesine izin verilir" + + #: f/lang-options.h:91 + msgid "Initialization via DATA and PARAMETER is type-compatible" + msgstr "DATA ve PARAMETER üzerinden ilklendirme tür uyumludur" + + #: f/lang-options.h:93 + msgid "Allow INTEGER and LOGICAL interchangeability" + msgstr "INTEGER ve LOGICAL aradönüşümlerine izin verilir" + + #: f/lang-options.h:96 + msgid "Print internal debugging-related info" + msgstr "İç hata ayıklama bilgilerini gösterir" + + #: f/lang-options.h:99 + msgid "Initialize local vars and arrays to zero" + msgstr "Yerel deÄŸiÅŸkenler ve diziler sıfır ile ilklendirilir" + + #: f/lang-options.h:103 + msgid "Backslashes in character/hollerith constants not special (C-style)" + msgstr "" + "Tersbölüler ve karakter/hollerith sabitler özel\n" + " deÄŸildir (C-tarzı)" + + #: f/lang-options.h:105 + msgid "Have front end emulate COMPLEX arithmetic to avoid bugs" + msgstr "" + "Hatalara sebep olmamak için COMPLEX aritmetiÄŸi\n" + " emüle edilir" + + #: f/lang-options.h:109 + msgid "Disable the appending of underscores to externals" + msgstr "external'lara altçizgi eklenmez" + + #: f/lang-options.h:112 + msgid "Never append a second underscore to externals" + msgstr "external'lara ikinci altçizgi eklenemez" + + #: f/lang-options.h:114 + msgid "Intrinsics spelled as e.g. SqRt" + msgstr "YerleÅŸikler SqRt tarzında hecelenir" + + #: f/lang-options.h:116 + msgid "Intrinsics in uppercase" + msgstr "YerleÅŸikler büyük harfle yazılmıştır" + + #: f/lang-options.h:119 + msgid "Intrinsics letters in arbitrary cases" + msgstr "YerleÅŸikler geliÅŸigüzel yazılmıştır" + + #: f/lang-options.h:121 + msgid "Language keywords spelled as e.g. IOStat" + msgstr "Dil anahtar sözcükleri IOStat tarzı hecelenir" + + #: f/lang-options.h:123 + msgid "Language keywords in uppercase" + msgstr "Dil anahtar sözcükleri büyük harflerle yazılmıştır" + + #: f/lang-options.h:126 + msgid "Language keyword letters in arbitrary cases" + msgstr "Dil anahtar sözcükleri geliÅŸigüzel yazılmıştır" + + #: f/lang-options.h:128 + msgid "Internally convert most source to uppercase" + msgstr "Büyük harfe dönüşüm içerden yapılır" + + #: f/lang-options.h:131 + msgid "Internally preserve source case" + msgstr "İçerde harf büyüklüğü korunur" + + #: f/lang-options.h:133 + msgid "Symbol names spelled in mixed case" + msgstr "Sembol isimlerin BüyükKüçük harflerle yazılmıştır" + + #: f/lang-options.h:135 + msgid "Symbol names in uppercase" + msgstr "Sembol isimleri büyük harflerle yazılmıştır" + + #: f/lang-options.h:137 + msgid "Symbol names in lowercase" + msgstr "Sembol isimleri küçük harflerle yazılmıştır" + + #: f/lang-options.h:140 + msgid "Program written in uppercase" + msgstr "Program büyük harflerle yazılmıştır" + + #: f/lang-options.h:142 + msgid "Program written in lowercase" + msgstr "Program küçük harflerle yazılmıştır" + + #: f/lang-options.h:144 + msgid "Program written in strict mixed-case" + msgstr "Program BüyükKüçük harflerle yazılmıştır" + + #: f/lang-options.h:146 + msgid "Compile as if program written in uppercase" + msgstr "Program büyük harflerle yazılmış olarak derlenir" + + #: f/lang-options.h:148 + msgid "Compile as if program written in lowercase" + msgstr "Program küçük harflerle yazılmış olarak derlenir" + + #: f/lang-options.h:150 + msgid "Preserve all spelling (case) used in program" + msgstr "Program derlenirken harf büyüklüklerine dokunulmaz" + + #: f/lang-options.h:152 + msgid "Delete libU77 intrinsics with bad interfaces" + msgstr "Hatalı arabirimli libU77 yerleÅŸikleri silinir" + + #: f/lang-options.h:154 + msgid "Disable libU77 intrinsics with bad interfaces" + msgstr "Hatalı arabirimli libU77 yerleÅŸikleri iptal edilir" + + #: f/lang-options.h:157 + msgid "Hide libU77 intrinsics with bad interfaces" + msgstr "Hatalı arabirimli libU77 yerleÅŸikleri gizlenir" + + #: f/lang-options.h:159 + msgid "Delete non-FORTRAN-77 intrinsics f2c supports" + msgstr "" + "FORTRAN-77 olmayan yerleÅŸiklerin f2c destekleri\n" + " silinir" + + #: f/lang-options.h:161 + msgid "Disable non-FORTRAN-77 intrinsics f2c supports" + msgstr "" + "FORTRAN-77 olmayan yerleÅŸiklerin f2c destekleri\n" + " iptal edilir" + + #: f/lang-options.h:164 + msgid "Hide non-FORTRAN-77 intrinsics f2c supports" + msgstr "" + "FORTRAN-77 olmayan yerleÅŸiklerin f2c destekleri\n" + " gizlenir" + + #: f/lang-options.h:166 + msgid "Delete non-FORTRAN-77 intrinsics F90 supports" + msgstr "" + "FORTRAN-77 olmayan yerleÅŸiklerin F90 destekleri\n" + " silinir" + + #: f/lang-options.h:168 + msgid "Disable non-FORTRAN-77 intrinsics F90 supports" + msgstr "" + "FORTRAN-77 olmayan yerleÅŸiklerin F90 destekleri\n" + " iptal edilir" + + #: f/lang-options.h:171 + msgid "Hide non-FORTRAN-77 intrinsics F90 supports" + msgstr "" + "FORTRAN-77 olmayan yerleÅŸiklerin F90 destekleri\n" + " gizlenir" + + #: f/lang-options.h:173 + msgid "Delete non-FORTRAN-77 intrinsics g77 supports" + msgstr "" + "FORTRAN-77 olmayan yerleÅŸiklerin g77 destekleri\n" + " silinir" + + #: f/lang-options.h:175 + msgid "Disable non-FORTRAN 77 intrinsics F90 supports" + msgstr "" + "FORTRAN-77 olmayan yerleÅŸiklerin g77 destekleri\n" + " iptal edilir" + + #: f/lang-options.h:178 + msgid "Hide non-FORTRAN 77 intrinsics F90 supports" + msgstr "" + "FORTRAN-77 olmayan yerleÅŸiklerin g77 destekleri\n" + " gizlenir" + + #: f/lang-options.h:180 + msgid "Delete MIL-STD 1753 intrinsics" + msgstr "MIL-STD 1753 yerleÅŸikleri silinir" + + #: f/lang-options.h:182 + msgid "Disable MIL-STD 1753 intrinsics" + msgstr "MIL-STD 1753 yerleÅŸikleri iptal edilir" + + #: f/lang-options.h:185 + msgid "Hide MIL-STD 1753 intrinsics" + msgstr "MIL-STD 1753 yerleÅŸikleri gizlenir" + + #: f/lang-options.h:187 + msgid "Delete libU77 intrinsics" + msgstr "libU77 yerleÅŸikleri silinir" + + #: f/lang-options.h:189 + msgid "Disable libU77 intrinsics" + msgstr "libU77 yerleÅŸikleri iptal edilir" + + #: f/lang-options.h:192 + msgid "Hide libU77 intrinsics" + msgstr "libU77 yerleÅŸikleri gizlenir" + + #: f/lang-options.h:194 + msgid "Delete non-FORTRAN-77 intrinsics VXT FORTRAN supports" + msgstr "" + "FORTRAN-77 olmayan yerleÅŸiklerin VXT FORTRAN\n" + " destekleri silinir" + + #: f/lang-options.h:196 + msgid "Disable non-FORTRAN-77 intrinsics VXT FORTRAN supports" + msgstr "" + "FORTRAN-77 olmayan yerleÅŸiklerin VXT FORTRAN\n" + " destekleri iptal edilir" + + #: f/lang-options.h:199 + msgid "Hide non-FORTRAN-77 intrinsics VXT FORTRAN supports" + msgstr "" + "FORTRAN-77 olmayan yerleÅŸiklerin VXT FORTRAN\n" + " destekleri gizlenir" + + #: f/lang-options.h:201 + msgid "Treat initial values of 0 like non-zero values" + msgstr "" + "0 deÄŸerli olanlar içerde sıfır deÄŸerli olmayanlar\n" + " gibi deÄŸerlendirilir" + + #: f/lang-options.h:204 + msgid "Emit special debugging information for COMMON and EQUIVALENCE (disabled)" + msgstr "" + "COMMON ve EQUIVALENCE için özel hata ayıklama\n" + " bilgileri yayınlanır (iptal edildi)" + + #: f/lang-options.h:207 + msgid "Take at least one trip through each iterative DO loop" + msgstr "Her yinelemeli DO döngüsü en azından bir tur atar" + + #: f/lang-options.h:211 + msgid "Print names of program units as they are compiled" + msgstr "" + "Program birimlerinin isimleri derlenmiÅŸ olarak\n" + " gösterilir" + + #: f/lang-options.h:214 + msgid "Disable fatal diagnostics about inter-procedural problems" + msgstr "" + "Yordamlar arası sorunlar hakkındaki ölümcül tanılar\n" + " iptal edilir" + + #: f/lang-options.h:216 + msgid "Make prefix-radix non-decimal constants be typeless" + msgstr "Ondalık olmayan taban önekli sabitler türsüz yapılır" + + #: f/lang-options.h:219 + msgid "Generate code to check subscript and substring bounds" + msgstr "Dizi indislerini denetleyecek kod üretilir" + + #: f/lang-options.h:222 + msgid "Fortran-specific form of -fbounds-check" + msgstr "Fortran'a özel -fbounds-check biçimi" + + #: f/lang-options.h:226 + msgid "Disable warnings about inter-procedural problems" + msgstr "Yordamlar arası sorunlar hakkındaki uyarılar verilmez" + + #: f/lang-options.h:230 + msgid "Warn about constructs with surprising meanings" + msgstr "Yapılar hakkında sürpriz niteliÄŸinde uyarı verilir" + + #: f/lang-options.h:235 + msgid "Add a directory for INCLUDE searching" + msgstr "INCLUDE araması için dizin eklenir" + + #: f/lang-options.h:237 + msgid "Set the maximum line length" + msgstr "En büyük satır uzunluÄŸu belirtilir" + + #: f/bad.def:39 + #, no-c-format + msgid "Missing first operand for binary operator at %0" + msgstr "%0 içindeki iki terimlinin ilk terimi eksik" + + #: f/bad.def:42 + #, no-c-format + msgid "Zero-length character constant at %0" + msgstr "%0 içinde sıfır uzunluklu karakter sabiti" + + #: f/bad.def:45 + #, no-c-format + msgid "Invalid token at %0 in expression or subexpression at %1" + msgstr "%0 daki dizgecik (%1 deki ifade ya da alt ifadede) geçersiz" + + #: f/bad.def:48 + #, no-c-format + msgid "Missing operand for operator at %1 at end of expression at %0" + msgstr "%1 deki iÅŸlemimi için %0 daki ifadenin sonunda terim eksik" + + #: f/bad.def:51 + #, no-c-format + msgid "Label %A already defined at %1 when redefined at %0" + msgstr "%1 de tanımlanmış olan etiket %A %0 da yeniden tanımlanıyor" + + #: f/bad.def:54 + #, no-c-format + msgid "Unrecognized character at %0 [info -f g77 M LEX]" + msgstr "%0 daki karakter tanınmıyor [info -f g77 M LEX]" + + #: f/bad.def:57 + #, no-c-format + msgid "Label definition %A at %0 on empty statement (as of %1)" + msgstr "%0 daki etiket tanımı %A boÅŸ deyim üzerinde (%1 de olarak)" + + #: f/bad.def:65 + #, no-c-format + msgid "Invalid first character at %0 [info -f g77 M LEX]" + msgstr "%0 daki baÅŸlangıç karakteri geçersiz [info -f g77 M LEX]" + + #: f/bad.def:68 + #, no-c-format + msgid "Line too long as of %0 [info -f g77 M LEX]" + msgstr "%0 lık satır çok uzun [info -f g77 M LEX]" + + #: f/bad.def:71 + #, no-c-format + msgid "Non-numeric character at %0 in label field [info -f g77 M LEX]" + msgstr "Etiket alanının %0 daki karakteri bir rakam deÄŸil [info -f g77 M LEX]" + + #: f/bad.def:74 + #, no-c-format + msgid "Label number at %0 not in range 1-99999" + msgstr "%0 daki etiket numarası 1 ile 99999 arasında deÄŸil" + + #: f/bad.def:77 + #, no-c-format + msgid "At %0, '!' and '/*' are not valid comment delimiters" + msgstr "%0 daki, '!' ve '/*' geçerli açıklama sınırlayıcılar deÄŸil" + + #: f/bad.def:80 + #, no-c-format + msgid "Continuation indicator at %0 must appear in column 6 [info -f g77 M LEX]" + msgstr "%0 daki devam belirteci 6. sütun olmalı [info -f g77 M LEX]" + + #: f/bad.def:83 + #, no-c-format + msgid "Label at %0 invalid with continuation line indicator at %1 [info -f g77 M LEX]" + msgstr "%0 daki etiket %1 deki devam satırı belirteci ile geçersiz [info -f g77 M LEX]" + + #: f/bad.def:91 + #, no-c-format + msgid "Character constant at %0 has no closing apostrophe at %1" + msgstr "%0 daki karakter sabit %1 de bir tek tırnakla kapanmalıydı" + + #: f/bad.def:94 + #, no-c-format + msgid "Hollerith constant at %0 specified %A more characters than are present as of %1" + msgstr "%0 da %A karakterden fazlasıyla belirtilen hollerith sabit %1 olarak var" + + #: f/bad.def:97 + #, no-c-format + msgid "Missing close parenthese at %0 needed to match open parenthese at %1" + msgstr "%1 de açılan parantez için %0 da kapanan parantez yok" + + #: f/bad.def:100 + #, no-c-format + msgid "Integer at %0 too large" + msgstr "%0 daki tamsayı çok büyük" + + #: f/bad.def:123 + #, no-c-format + msgid "Period at %0 not followed by digits for floating-point number or by `NOT.', `TRUE.', or `FALSE.'" + msgstr "%0 daki noktadan sonra bir gerçel sayı, `NOT.', `TRUE.', ya da `FALSE.' gelmiyor" + + #: f/bad.def:126 + #, no-c-format + msgid "Missing close-period between `.%A' at %0 and %1" + msgstr "%0 ve %1 de `.%A' arasında kapatma noktası eksik" + + #: f/bad.def:129 + #, no-c-format + msgid "Invalid exponent at %0 for real constant at %1; nondigit `%A' in exponent field" + msgstr "%0 daki üs %1 deki gerçel sabit için geçersiz; üs alanında rakam olmayan `%A'" + + #: f/bad.def:132 + #, no-c-format + msgid "Missing value at %1 for real-number exponent at %0" + msgstr "%0 daki üstel gerçel sayı için %1 de deÄŸer eksik" + + #: f/bad.def:135 + #, no-c-format + msgid "Expected binary operator between expressions at %0 and at %1" + msgstr "%0 ve %1 deki ifadeler arasında iki terimli iÅŸlemimi umuluyor" + + #: f/bad.def:253 + #, no-c-format + msgid "Semicolon at %0 is an invalid token" + msgstr "%0 daki ';' geçersiz" + + #: f/bad.def:271 + #, no-c-format + msgid "Extraneous comma in FORMAT statement at %0" + msgstr "%0 daki FORMAT deyiminde gereksiz virgül" + + #: f/bad.def:274 + #, no-c-format + msgid "Missing comma in FORMAT statement at %0" + msgstr "%0 daki FORMAT deyiminde virgül eksik" + + #: f/bad.def:277 + #, no-c-format + msgid "Spurious sign in FORMAT statement at %0" + msgstr "%0 daki FORMAT deyimindeki iÅŸaret sahte" + + #: f/bad.def:280 + #, no-c-format + msgid "Spurious number in FORMAT statement at %0" + msgstr "%0 daki FORMAT deyimindeki numara sahte" + + #: f/bad.def:283 + #, no-c-format + msgid "Spurious text trailing number in FORMAT statement at %0" + msgstr "%0 daki FORMAT deyiminin metnindeki numara sahte" + + #: f/bad.def:291 + #, no-c-format + msgid "Unrecognized FORMAT specifier at %0" + msgstr "%0 da anlaşılmayan FORMAT belirteci" + + #: f/bad.def:419 + #, no-c-format + msgid "Missing close-parenthese(s) in FORMAT statement at %0" + msgstr "%0 daki FORMAT deyiminde kapama parantezleri eksik" + + #: f/bad.def:422 + #, no-c-format + msgid "Missing number following period in FORMAT statement at %0" + msgstr "%0 daki FORMAT deyiminde noktadan sonra sayı yok" + + #: f/bad.def:425 + #, no-c-format + msgid "Missing number following `E' in FORMAT statement at %0" + msgstr "%0 daki FORMAT deyiminde `E' den sonra sayı yok" + + #: f/bad.def:433 + #, no-c-format + msgid "Spurious trailing comma preceding terminator at %0" + msgstr "%0 daki sonlandırıcı öncesinde sahte virgül" + + #: f/bad.def:436 + #, no-c-format + msgid "At %0, specify OPERATOR instead of ASSIGNMENT for INTERFACE statement not specifying the assignment operator (=)" + msgstr "%0 da, INTERFACE deyimi için ASSIGNMENT yerine atama iÅŸlemimi (=) olmayan OPERATOR belirtilmesi" + + #: f/bad.def:439 + #, no-c-format + msgid "At %0, specify ASSIGNMENT instead of OPERATOR for INTERFACE statement specifying the assignment operator (=)" + msgstr "%0 da, INTERFACE deyimi için ASSIGNMENT yerine atama iÅŸlemimi (=) olan OPERATOR belirtilmesi" + + #: f/bad.def:452 + #, no-c-format + msgid "Cannot specify =initialization-expr at %0 unless `::' appears before list of objects" + msgstr "%0 da =ilklendirme-ifadesi nesne listesinden önce `::' olmadıkça belirtilemez" + + #: f/bad.def:455 + #, no-c-format + msgid "Reference to label at %1 inconsistent with its definition at %0" + msgstr "%1 deki etikete referans %0 daki tanımıyla uyumsuz" + + #: f/bad.def:458 + #, no-c-format + msgid "Reference to label at %1 inconsistent with earlier reference at %0" + msgstr "%1 deki etikete referans %0 daki önceki referansla uyumsuz" + + #: f/bad.def:461 + #, no-c-format + msgid "DO-statement reference to label at %1 follows its definition at %0" + msgstr "%1 deki etikete DO deyimi referansı %0 daki tanımını izliyor" + + #: f/bad.def:464 + #, no-c-format + msgid "Reference to label at %1 is outside block containing definition at %0" + msgstr "%1 deki etikete referans %0 daki tanımı içeren bloÄŸun dışında" + + #: f/bad.def:467 + #, no-c-format + msgid "DO-statement references to label at %0 and %2 separated by unterminated block starting at %1" + msgstr "%0 ve %2 daki etikete DO deyimi referansları %1 de baÅŸlayan sonlandırılmamış blok tarafından dışlanıyor" + + #: f/bad.def:470 + #, no-c-format + msgid "DO-statement reference to label at %0 and label definition at %2 separated by unterminated block starting at %1" + msgstr "%0 daki etikete DO deyimi referansı ve %2 deki etiket tanımı %1 de baÅŸlayan sonlandırılmamış blok tarafından dışlanıyor" + + #: f/bad.def:473 + #, no-c-format + msgid "Label definition at %0 invalid on this kind of statement" + msgstr "%0 daki etiket tanımı bu tür deyimlerde geçersiz" + + #: f/bad.def:476 + #, no-c-format + msgid "Statement at %0 invalid in this context" + msgstr "%0 daki deyim bu baÄŸlam içinde geçersiz" + + #: f/bad.def:479 + #, no-c-format + msgid "Statement at %0 invalid in context established by statement at %1" + msgstr "%0 daki deyim %1 deki deyim tarafından oluÅŸturulan baÄŸlamda geçersiz" + + #: f/bad.def:482 + #, no-c-format + msgid "Statement at %0 must specify construct name specified at %1" + msgstr "%0 daki deyim %1 de belirtilen yapı ismini belirtmeli" + + #: f/bad.def:485 + #, no-c-format + msgid "Construct name at %0 superfluous, no construct name specified at %1" + msgstr "%0 daki yapı ismi gereksiz, %1 de hiç yapı ismi belirtilmemiÅŸ" + + #: f/bad.def:488 + #, no-c-format + msgid "Construct name at %0 not the same as construct name at %1" + msgstr "%0 daki yapı ismi %1 dakiyle aynı deÄŸil" + + #: f/bad.def:491 + #, no-c-format + msgid "Construct name at %0 does not match construct name for any containing DO constructs" + msgstr "%0 daki yapı ismi hiçbir DO yapısının yapı ismiyle uyuÅŸmuyor" + + #: f/bad.def:494 + #, no-c-format + msgid "Label definition missing at %0 for DO construct specifying label at %1" + msgstr "%1 de belirtilen DO yapısının etiketi için %0 da etiket tanımı yok" + + #: f/bad.def:497 + #, no-c-format + msgid "Statement at %0 follows ELSE block for IF construct at %1" + msgstr "%0 daki deyim %1 deki IF yapısının ELSE bloÄŸunu izliyor" + + #: f/bad.def:500 + #, no-c-format + msgid "No label definition for FORMAT statement at %0" + msgstr "%0 daki FORMAT deyimi için etiket tanımı yok" + + #: f/bad.def:503 + #, no-c-format + msgid "Second occurrence of ELSE WHERE at %0 within WHERE at %1" + msgstr "%1 deki WHERE deyimi için %0 da ELSE WHERE ikinci kez kullanılmış" + + #: f/bad.def:506 + #, no-c-format + msgid "END statement at %0 missing `%A' keyword required for internal or module procedure(s) bounded by %1" + msgstr "%0 daki END deyiminde eksik olan `%A' anahtar sözcüğü %1 tarafından sınırlanan module procedure(ler) ya da iç kod için gerekli" + + #: f/bad.def:509 + #, no-c-format + msgid "MODULE PROCEDURE statement at %0 disallowed because INTERFACE at %1 specifies no generic name, operator, or assignment" + msgstr "%1 daki INTERFACE bir genel isim, iÅŸlemimi ya da atama belirtmediÄŸinden %0 daki MODULE PROCEDURE deyimi iptal edildi" + + #: f/bad.def:512 + #, no-c-format + msgid "BLOCK DATA name at %0 superfluous, no name specified at %1" + msgstr "%0 daki BLOCK DATA ismi gereksiz, %1 de ise hiç bir isim belirtilmemiÅŸ" + + #: f/bad.def:515 + #, no-c-format + msgid "Program name at %0 superfluous, no PROGRAM statement specified at %1" + msgstr "%0 da program ismi gereksiz, %1 de PROGRAM deyimi belirtilmemiÅŸ" + + #: f/bad.def:518 + #, no-c-format + msgid "Program unit name at %0 not the same as name at %1" + msgstr "%0 daki program birimi ismi %1 deki ile aynı deÄŸil" + + #: f/bad.def:521 + #, no-c-format + msgid "Type name at %0 not the same as name at %1" + msgstr "%0 daki tür ismi %1 deki ile aynı deÄŸil" + + #: f/bad.def:524 + #, no-c-format + msgid "End of source file before end of block started at %0" + msgstr "%0 da baÅŸlayan blokun sonundan önce kaynak dosyası sonu" + + #: f/bad.def:527 + #, no-c-format + msgid "Undefined label, first referenced at %0" + msgstr "Tanımsız etiket, ilk olarak %0 da referanslı" + + #: f/bad.def:530 + #, no-c-format + msgid "SAVE statement or attribute at %1 cannot be specified along with SAVE statement or attribute at %0" + msgstr "%1 deki SAVE deyimi ya da özniteliÄŸi %0 dekiyle birlikte belirtilemez" + + #: f/bad.def:533 + #, no-c-format + msgid "PUBLIC or PRIVATE statement at %1 cannot be specified along with PUBLIC or PRIVATE statement at %0" + msgstr "%1 deki PUBLIC veya PRIVATE deyimi %0 dekiyle birlikte belirtilemez" + + #: f/bad.def:536 + #, no-c-format + msgid "RETURN statement at %0 invalid within a main program unit" + msgstr "%0 daki RETURN belirteci bir ana program birimi için geçerli deÄŸil" + + #: f/bad.def:539 + #, no-c-format + msgid "Alternate return specifier at %0 invalid within a main program unit" + msgstr "%0 daki alternatif return belirteci bir ana program birimi için geçerli deÄŸil" + + #: f/bad.def:542 + #, no-c-format + msgid "Alternate return specifier at %0 invalid within a function" + msgstr "%0 daki alternatif return belirteci bir iÅŸlev için geçerli deÄŸil" + + #: f/bad.def:545 + #, no-c-format + msgid "Access specifier or PRIVATE statement at %0 invalid for derived-type definition within other than the specification part of a module" + msgstr "EriÅŸim belirteci ya da PRIVATE deyimi %0 da modülün özellikler parçası dışında türetilmiÅŸ tür tanımı için geçersiz" + + #: f/bad.def:548 + #, no-c-format + msgid "Access specifier at %0 must immediately follow derived-type statement at %1 with no intervening statements" + msgstr "%0 daki eriÅŸim belirteci arayan giren deyimler olmaksızın %1 deki türetilmiÅŸ tür deyiminden hemen sonra olmalı" + + #: f/bad.def:551 + #, no-c-format + msgid "No components specified as of %0 for derived-type definition beginning at %1" + msgstr "%1 deki türetilmiÅŸ-tür tanımı baÅŸlangıcı için %0 olarak hiç eleman belirtilmemiÅŸ" + + #: f/bad.def:554 + #, no-c-format + msgid "No components specified as of %0 for structure definition beginning at %1" + msgstr "%1 deki yapı tanım baÅŸlangıcı için %0 olarak hiç eleman belirtilmemiÅŸ" + + #: f/bad.def:557 + #, no-c-format + msgid "Missing structure name for outer structure definition at %0" + msgstr "Dış veri yapısı tanımı için %0 da yapı ismi eksik" + + #: f/bad.def:560 + #, no-c-format + msgid "Field names at %0 for outer structure definition -- specify them in a subsequent RECORD statement instead" + msgstr "Dış veri yapısı tanımı için %0 da alan isimleri -- onları burada deÄŸil, bir izleyen RECORD deyiminde belirtin" + + #: f/bad.def:563 + #, no-c-format + msgid "Missing field name(s) for structure definition at %0 within structure definition at %1" + msgstr "%1 deki veri yapısı tanımı içinde %0 da yapı tanımının alan ismi/isimleri eksik" + + #: f/bad.def:566 + #, no-c-format + msgid "No components specified as of %0 for map beginning at %1" + msgstr "%1 deki eÅŸlem baÅŸlangıcı için %0 olarak hiç eleman belirtilmemiÅŸ" + + #: f/bad.def:569 + #, no-c-format + msgid "Zero or one maps specified as of %0 for union beginning at %1 -- at least two are required" + msgstr "Sıfır ve bir eÅŸlemleri %1 deki union baÅŸlangıcı için %0 olarak belirtilmiÅŸ -- en azından 2 gerekli" + + #: f/bad.def:572 + #, no-c-format + msgid "Missing %A specifier in statement at %0" + msgstr "%A belirteci %0 daki deyimde eksik" + + #: f/bad.def:575 + #, no-c-format + msgid "Items in I/O list starting at %0 invalid for namelist-directed I/O" + msgstr "G/Ç listesinde %0 da baÅŸlayan öğeler isim listesi yönlendirmeli G/Ç için geçersiz" + + #: f/bad.def:578 + #, no-c-format + msgid "Conflicting I/O control specifications at %0 and %1" + msgstr "`%0 ve %1 deki G/Ç denetimi özellikleri çeliÅŸkili" + + #: f/bad.def:581 + #, no-c-format + msgid "No UNIT= specifier in I/O control list at %0" + msgstr "%0 daki G/Ç denetim listesinde UNIT= belirteci yok" + + #: f/bad.def:584 + #, no-c-format + msgid "Specification at %0 requires ADVANCE=`NO' specification in same I/O control list" + msgstr "%0 daki özellik aynı G/Ç denetim listesi için ADVANCE=`NO' özelliÄŸini gerektiriyor" + + #: f/bad.def:587 + #, no-c-format + msgid "Specification at %0 requires explicit FMT= specification in same I/O control list" + msgstr "%0 daki özellik aynı G/Ç denetim listesinde doÄŸrudan FMT= özelliÄŸini gerektiriyor" + + #: f/bad.def:595 + #, no-c-format + msgid "Second occurrence of CASE DEFAULT at %0 within SELECT CASE at %1" + msgstr "%1 deki SELECT CASE içindeki %0 da CASE DEFAULT'un ikinci oluÅŸumu" + + #: f/bad.def:598 + #, no-c-format + msgid "Duplicate or overlapping case values/ranges at %0 and %1" + msgstr "%0 ve %1 de yinelenmiÅŸ (ya da birbirini kapsayan) case deÄŸerleri" + + #: f/bad.def:601 + #, no-c-format + msgid "Type and/or kind-type parameter disagreement between CASE value or value within range at %0 and SELECT CASE at %1" + msgstr "%1 deki SELECT CASE ve %0 daki aralık içindeki deÄŸer veya CASE deÄŸeri arasında tür ve/veya çeÅŸit türü parametresi uyumsuzluÄŸu" + + #: f/bad.def:604 + #, no-c-format + msgid "Range specification at %0 invalid for CASE statement within logical-type SELECT CASE statement" + msgstr "Mantıksal türdeki SELECT CASE deyimi içindeki CASE deyimi için %0 da aralık özelliÄŸi geçersiz" + + #: f/bad.def:617 + #, no-c-format + msgid "Fortran 90 feature at %0 unsupported" + msgstr "%0 daki Fortran 90 özelliÄŸi desteklenmiyor" + + #: f/bad.def:630 + #, no-c-format + msgid "Invalid declaration of or reference to symbol `%A' at %0 [initially seen at %1]" + msgstr "%0 da sembol `%A' bildirimi ya da referansı geçersiz [ilk %1 de görüldü]" + + #: f/bad.def:638 + #, no-c-format + msgid "Null element at %0 for array reference at %1" + msgstr "%1 deki dizi referans için %0 da null eleman" + + #: f/bad.def:641 + #, no-c-format + msgid "Too few elements (%A missing) as of %0 for array reference at %1" + msgstr "%1 deki dizi referans içinde %0 da çok az eleman (%A eksik)" + + #: f/bad.def:644 + #, no-c-format + msgid "Too many elements as of %0 for array reference at %1" + msgstr "%1 deki dizi referans içinde %0 da çok fazla eleman" + + #: f/bad.def:647 + #, no-c-format + msgid "Missing colon as of %0 in substring reference for %1" + msgstr "%1 için alt dizge referans içinde %0 da ':' eksik" + + #: f/bad.def:650 + #, no-c-format + msgid "Invalid use at %0 of substring operator on %1" + msgstr "%1 üstünde altdizge iÅŸlemiminin %0 da kullanımı geçersiz" + + #: f/bad.def:653 + #, no-c-format + msgid "Substring begin/end point at %0 out of defined range" + msgstr "Altdizge baÅŸlangıç/bitiÅŸ noktası %0 da tanımlı aralığın dışında" + + #: f/bad.def:656 + #, no-c-format + msgid "Array element value at %0 out of defined range" + msgstr "%0 da dizi elemanı tanımlı aralığının dışında" + + #: f/bad.def:659 + #, no-c-format + msgid "Expression at %0 has incorrect data type or rank for its context" + msgstr "%0 daki ifade yanlış veri türü ya da içeriÄŸinin yanlış sıralamasına sahip" + + #: f/bad.def:662 + #, no-c-format + msgid "Division by 0 (zero) at %0 (IEEE not yet supported)" + msgstr "%0 da sıfırla bölme (IEEE henüz desteklenmiyor)" + + #: f/bad.def:665 + #, no-c-format + msgid "%A step count known to be 0 (zero) at %0" + msgstr "%A adım sayısının %0 da 0 (sıfır) olacağı biliniyor" + + #: f/bad.def:668 + #, no-c-format + msgid "%A end value plus step count known to overflow at %0" + msgstr "%A bitiÅŸ deÄŸeri artı adım sayısının %0 da taÅŸacağı biliniyor" + + #: f/bad.def:671 + #, no-c-format + msgid "%A begin, end, and step-count values known to result in implementation-dependent behavior due to overflow(s) in intermediate calculations at %0" + msgstr "%A baÅŸlangıç, bitiÅŸ, adım-sayısı deÄŸerlerinin %0 daki aracı hesaplamalarda taÅŸma(lar)dan dolayı gerçekleme-bağımlı sonuçlanacağı biliniyor" + + #: f/bad.def:674 + #, no-c-format + msgid "%A begin, end, and step-count values known to result in no iterations at %0" + msgstr "%A baÅŸlangıç, bitiÅŸ, adım-sayısı deÄŸerlerinin %0 da yinelemesiz sonuçlanacağı biliniyor" + + #: f/bad.def:677 + #, no-c-format + msgid "Type disagreement between expressions at %0 and %1" + msgstr "%0 ve %1 deki ifadeler arasında tür uyuÅŸmazlığı" + + #: f/bad.def:690 + #, no-c-format + msgid "No specification for implied-DO iterator `%A' at %0" + msgstr "%0 da dolaylı Do yineleyicisi `%A' için özellik yok" + + #: f/bad.def:693 + #, no-c-format + msgid "Gratuitous parentheses surround implied-DO construct at %0" + msgstr "%0 da dolaylı DO yapısını çevreleyen parantezler gereksiz" + + #: f/bad.def:696 + #, no-c-format + msgid "Zero-size specification invalid at %0" + msgstr "%0 daki sıfır uzunluklu özellik geçersiz" + + #: f/bad.def:699 + #, no-c-format + msgid "Zero-size array at %0" + msgstr "%0 da sıfır uzunluklu dizi" + + #: f/bad.def:702 + #, no-c-format + msgid "Target machine does not support complex entity of kind specified at %0" + msgstr "Hedef makina %0 da belirtilen karmaşık öğe çeÅŸidini desteklemiyor" + + #: f/bad.def:705 + #, no-c-format + msgid "Target machine does not support DOUBLE COMPLEX, specified at %0" + msgstr "Hedef makina DOUBLE COMPLEX desteklemiyor, %0 da belirtilmiÅŸ" + + #: f/bad.def:708 + #, no-c-format + msgid "Attempt to raise constant zero to a power at %0" + msgstr "%0 daki sabit sıfır bir üsse yükseltilmeye çalışılıyor" + + #: f/bad.def:806 + #, no-c-format + msgid "Reference to generic intrinsic `%A' at %0 could be to form %B or %C" + msgstr "Genel yerleÅŸik `%A' için %0 daki referans %B ya da %C biçiminde olmalıydı" + + #: f/bad.def:809 + #, no-c-format + msgid "Ambiguous use of intrinsic `%A' at %0 [info -f g77 M CMPAMBIG]" + msgstr "YerleÅŸik `%A' kullanımı %0 da belirsiz [info -f g77 M CMPAMBIG]" + + #: f/bad.def:812 + #, no-c-format + msgid "Intrinsic `%A' referenced %Bly at %0, %Cly at %1 [info -f g77 M EXPIMP]" + msgstr "YerleÅŸik `%A' %0 da %B biçiminde, %1 de ise %C biçiminde [info -f g77 M EXPIMP]" + + #: f/bad.def:815 + #, no-c-format + msgid "Same name `%A' used for %B at %0 and %C at %1 [info -f g77 M INTGLOB]" + msgstr "%0 da %B için ve %1 de %C için aynı isim `%A' kullanılmış [info -f g77 M INTGLOB]" + + #: f/bad.def:818 + #, no-c-format + msgid "Explicit type declaration for intrinsic `%A' disagrees with invocation at %0" + msgstr "YerleÅŸik `%A' için doÄŸrudan tür bildirimi %0 da çaÄŸrı ile uyuÅŸmuyor" + + #: f/bad.def:821 + #, no-c-format + msgid "Unable to open INCLUDE file `%A' at %0" + msgstr "%0 da INCLUDE dosyası '%A' açılamıyor" + + #: f/bad.def:839 + #, no-c-format + msgid "Null argument at %0 for statement function reference at %1" + msgstr "%1 deki deyim iÅŸlev referansı için %0 da NULL argüman" + + #: f/bad.def:842 + #, no-c-format + msgid "Null argument at %0 for procedure invocation at %1" + msgstr "%1 deki iÅŸlev çaÄŸrısı için %0 da NULL argüman" + + #: f/bad.def:845 + #, no-c-format + msgid "%A too few arguments (starting with dummy argument `%B') as of %0 for statement function reference at %1" + msgstr "%1 de deyim iÅŸlev referansı için %0 sayıda olarak (kukla argüman `%B ile baÅŸlayan) çok az argüman %A" + + #: f/bad.def:848 + #, no-c-format + msgid "%A too many arguments as of %0 for statement function reference at %1" + msgstr "%1 de deyim iÅŸlev referansı için %0 sayıda olarak çok az argüman %A" + + #: f/bad.def:851 + #, no-c-format + msgid "Array supplied at %1 for dummy argument `%A' in statement function reference at %0" + msgstr "%0 da deyim iÅŸlevi referansı içindeki kukla argüman `%A' için %1 de dizi belirtilmiÅŸ" + + #: f/bad.def:854 + #, no-c-format + msgid "Unsupported FORMAT specifier at %0" + msgstr "%0 da desteklenmeyen FORMAT belirteci" + + #: f/bad.def:857 + #, no-c-format + msgid "Variable-expression FORMAT specifier at %0 -- unsupported" + msgstr "%0 da deÄŸiÅŸken ifadeli FORMAT belirteci -- desteklenmiyor" + + #: f/bad.def:880 + #, no-c-format + msgid "Unsupported VXT statement at %0" + msgstr "%0 da desteklenmeyen VXT deyimi" + + #: f/bad.def:883 + #, no-c-format + msgid "Attempt to specify second initial value for `%A' at %0" + msgstr "%0 da `%A' için ikinci ilk deÄŸer belirtilmeye çalışılıyor" + + #: f/bad.def:886 + #, no-c-format + msgid "Too few initial values in list of initializers for `%A' at %0" + msgstr "%0 da `%A' için ilklendiriciler listesindeki ilk deÄŸerlerlerin sayısı çok fazla" + + #: f/bad.def:889 + #, no-c-format + msgid "Too many initial values in list of initializers starting at %0" + msgstr "%0 da baÅŸlayan ilklendiriciler listesindeki ilk deÄŸerlerlerin sayısı çok fazla" + + #: f/bad.def:892 + #, no-c-format + msgid "Array or substring specification for `%A' out of range in statement at %0" + msgstr "`%A' için dizi veya alt dizge özelliÄŸi %0 daki deyim içinde kapsam dışı" + + #: f/bad.def:895 + #, no-c-format + msgid "Array subscript #%B out of range for initialization of `%A' in statement at %0" + msgstr "%0 da deyim içindeki `%A'nın ilklendirmesi için dizi alt indisi #%B kapsam dışı" + + #: f/bad.def:898 + #, no-c-format + msgid "Implied do-loop step count of 0 (zero) for iteration variable `%A' in statement at %0" + msgstr "%0 da deyim içindeki tekrar deÄŸiÅŸkeni `%A' için dolaylı do-loop adım sayısı 0 (sıfır)" + + #: f/bad.def:901 + #, no-c-format + msgid "Implied do-loop iteration count of 0 (zero) for iteration variable `%A' in statement at %0" + msgstr "%0 da deyim içindeki tekrar deÄŸiÅŸkeni `%A' için dolaylı do-loop tekrarlama sayısı 0 (sıfır)" + + #: f/bad.def:904 + #, no-c-format + msgid "Not an integer constant expression in implied do-loop in statement at %0" + msgstr "%0 da deyim içindeki dolaylı do-loop'daki sabit ifade bir tamsayı deÄŸil" + + #: f/bad.def:907 + #, no-c-format + msgid "Attempt to specify second initial value for element of `%A' at %0" + msgstr "%0 daki `%A' nın elemanı için ikinci bir ilk deÄŸer belirtilmeye çalışılıyor" + + #: f/bad.def:910 + #, no-c-format + msgid "Attempt to EQUIVALENCE common areas `%A' and `%B' at %0" + msgstr "%0 daki ortak alanlar `%A' ve `%B' eÅŸitlenmeye çalışılıyor" + + #: f/bad.def:913 + #, no-c-format + msgid "Can't place `%A' as directed by EQUIVALENCE due to alignment restrictions" + msgstr "Hizalama sınırlamalarından dolayı EQUIVALENCE tarafından yönlendirilmiÅŸ olarak `%A' yerleÅŸtirilemiyor" + + #: f/bad.def:916 + #, no-c-format + msgid "Mismatched EQUIVALENCE requirements for placement of `%A' at both %C and %D bytes offset from `%B'" + msgstr "`%B' den hem %C hem de %D baytlık göreli konumda `%A'nın yerleÅŸtirilmesi için EQUIVALENCE gereksinimleri çeliÅŸkili" + + #: f/bad.def:919 + #, no-c-format + msgid "Array or substring specification for `%A' out of range in EQUIVALENCE statement" + msgstr "EQUIVALENCE deyimindeki `%A' için dizi ya da alt dizge özelliÄŸi kapsam dışı" + + #: f/bad.def:922 + #, no-c-format + msgid "Substring of non-CHARACTER entity `%A' in EQUIVALENCE statement" + msgstr "EQUIVALENCE deyiminde karakter olmayan öğe `%A'nın alt dizgesi" + + #: f/bad.def:925 + #, no-c-format + msgid "Array reference to scalar variable `%A' in EQUIVALENCE statement" + msgstr "EQUIVALENCE deyimindeki skalar deÄŸiÅŸken `%A' için dizi referans" + + #: f/bad.def:928 + #, no-c-format + msgid "Array subscript #%B out of range for EQUIVALENCE of `%A'" + msgstr "`%A' eÅŸdeÄŸeri için dizi alt indisi #%B kapsam dışı" + + #: f/bad.def:936 + #, no-c-format + msgid "Attempt to extend COMMON area beyond its starting point via EQUIVALENCE of `%A'" + msgstr "COMMON alan, `%A' EQUIVALENCE'ı üzerinden kendi baÅŸlangıç noktasından öteye geniÅŸletilmeye çalışılıyor" + + #: f/bad.def:939 + #, no-c-format + msgid "Too few elements in reference to array `%A' in EQUIVALENCE statement" + msgstr "EQUIVALENCE deyimindeki dizi `%A'ya referansta çok az eleman" + + #: f/bad.def:942 + #, no-c-format + msgid "Too many elements in reference to array `%A' in EQUIVALENCE statement" + msgstr "EQUIVALENCE deyimindeki dizi `%A'ya referansta çok fazla eleman" + + #: f/bad.def:945 + #, no-c-format + msgid "Mixed CHARACTER and non-CHARACTER types via COMMON/EQUIVALENCE -- for example, `%A' and `%B'" + msgstr "COMMON/EQUIVALENCE üzerinden karışık karakter ve karakter olmayan türler -- örneÄŸin: `%A' ve `%B'" + + #: f/bad.def:958 + #, no-c-format + msgid "Return value `%A' for FUNCTION at %0 not referenced in subprogram" + msgstr "%0 daki İŞLEV için dönen `%A' deÄŸeri alt programda referanslı deÄŸil" + + #: f/bad.def:976 + #, no-c-format + msgid "Common block `%A' is SAVEd, explicitly or implicitly, at %0 but not SAVEd at %1" + msgstr "Ortak blok `%A' %0 da doÄŸrudan ya da dolaylı KAYITLI iken %1 de deÄŸil" + + #: f/bad.def:979 + #, no-c-format + msgid "Common block `%A' is %B %D in length at %0 but %C %E at %1" + msgstr "Ortak blok `%A' %0 da %B %D uzunlukta iken %1 de %C %E" + + #: f/bad.def:987 + #, no-c-format + msgid "Blank common initialized at %0" + msgstr "%0 da boÅŸ ortak blok ilklendirildi" + + #: f/bad.def:990 + #, no-c-format + msgid "Intrinsic `%A' is passed as actual argument at %0 but not explicitly declared INTRINSIC" + msgstr "YerleÅŸik `%A' %0 da argüman olarak aktarılmış ama doÄŸrudan INTRINSIC olarak bildirilmemiÅŸ" + + #: f/bad.def:993 + #, no-c-format + msgid "External procedure `%A' is passed as actual argument at %0 but not explicitly declared EXTERNAL" + msgstr "Dış iÅŸlev `%A' %0 da argüman olarak aktarılmış ama doÄŸrudan EXTERNAL olarak bildirilmemiÅŸ" + + #: f/bad.def:996 + #, no-c-format + msgid "Character `%A' (for example) is upper-case in symbol name at %0" + msgstr "%0 daki sembol isminde `%A' karakteri (örnek olarak) büyük harf" + + #: f/bad.def:999 + #, no-c-format + msgid "Character `%A' (for example) is lower-case in symbol name at %0" + msgstr "%0 daki sembol isminde `%A' karakteri (örnek olarak) küçük harf" + + #: f/bad.def:1002 + #, no-c-format + msgid "Character `%A' not followed at some point by lower-case character in symbol name at %0" + msgstr "%0 sembol isminde `%A' karakterinden sonra küçük harf gelmiyor" + + #: f/bad.def:1005 + #, no-c-format + msgid "Initial character `%A' is lower-case in symbol name at %0" + msgstr "%0 daki sembol isminde `%A' karakteri küçük harf" + + #: f/bad.def:1013 + #, no-c-format + msgid "NAMELIST not adequately supported by run-time library for source files with case preserved" + msgstr "NAMELIST harf büyüklüğü korunmuÅŸ kaynak dosyaları için çalışma anı kitaplığı tarafından layıkıyla desteklenmiyor" + + #: f/bad.def:1016 + #, no-c-format + msgid "Nested %% construct (%%VAL, %%REF, or %%DESCR) at %0" + msgstr "%0 da yuvalanmış %% yapısı (%%VAL, %%REF, veya %%DESCR)" + + #: f/bad.def:1034 + #, no-c-format + msgid "Statement at %0 invalid in BLOCK DATA program unit at %1" + msgstr "%0 daki deyim %1 deki BLOCK DATE program birimi içinde geçersiz" + + #: f/bad.def:1037 + #, no-c-format + msgid "Truncating characters on right side of character constant at %0" + msgstr "%0 daki karakter sabitin sağındaki karakterler kırpılıyor" + + #: f/bad.def:1040 + #, no-c-format + msgid "Truncating characters on right side of hollerith constant at %0" + msgstr "%0 daki hollerith sabitin saÄŸ tarafındaki karakterler kırpılıyor" + + #: f/bad.def:1043 + #, no-c-format + msgid "Truncating non-zero data on left side of numeric constant at %0" + msgstr "%0 daki sayısal sabitin sol tarafındaki sıfır olmayan veri kırpılıyor" + + #: f/bad.def:1046 + #, no-c-format + msgid "Truncating non-zero data on left side of typeless constant at %0" + msgstr "%0 daki türsüz sabitin sol tarafındaki sıfır olmayan veri kırpılıyor" + + #: f/bad.def:1049 + #, no-c-format + msgid "Typeless constant at %0 too large" + msgstr "Türsüz sabit %0 da çok büyük" + + #: f/bad.def:1052 + #, no-c-format + msgid "First-column ampersand continuation at %0" + msgstr "%0 da ilk-sütun ampersand sürekliliÄŸi" + + #: f/bad.def:1055 f/bad.def:1058 + #, no-c-format + msgid "Global name `%A' defined at %0 already defined at %1 [info -f g77 M GLOBALS]" + msgstr "%0 da tanımlanan genel isim `%A' zaten %1 de tanımlı [info -f g77 M GLOBALS]" + + #: f/bad.def:1061 f/bad.def:1064 + #, no-c-format + msgid "Global name `%A' is %B at %0 but is %C at %1 [info -f g77 M GLOBALS]" + msgstr "Genel isim `%A' %0 da %B iken %1 de %C [info -f g77 M GLOBALS]" + + #: f/bad.def:1067 f/bad.def:1070 + #, no-c-format + msgid "Global name `%A' at %0 has different type at %1 [info -f g77 M GLOBALS]" + msgstr "%0 daki genel isim `%A' %1 de farklı türde [info -f g77 M GLOBALS]" + + #: f/bad.def:1073 + #, no-c-format + msgid "Too %B arguments passed to `%A' at %0 versus definition at %1 [info -f g77 M GLOBALS]" + msgstr "%1 deki tanıma karşı %0 da `%A' ya aktarılan %B argüman çok fazla [info -f g77 M GLOBALS]" + + #: f/bad.def:1076 + #, no-c-format + msgid "Too %B arguments for `%A' at %0 versus invocation at %1 [info -f g77 M GLOBALS]" + msgstr "%1 deki çaÄŸrıya karşı %0 da `%A' için %B argüman çok fazla [info -f g77 M GLOBALS]" + + #: f/bad.def:1079 f/bad.def:1082 + #, no-c-format + msgid "Argument #%B of `%A' is %C at %0 but is %D at %1 [info -f g77 M GLOBALS]" + msgstr "`%A' nın %B. argümanı %0 da %C iken %1 de %D [info -f g77 M GLOBALS]" + + #: f/bad.def:1085 + #, no-c-format + msgid "Array `%A' at %0 is too large to handle" + msgstr "Dizi`%A' %0 da elde edilemeyecek kadar büyük" + + #: f/bad.def:1088 + #, no-c-format + msgid "Statement function `%A' defined at %0 is not used" + msgstr "%0 da atanan deyim iÅŸlevi `%A' kullanılmamış" + + #: f/bad.def:1091 + #, no-c-format + msgid "Intrinsic `%A', invoked at %0, known to be non-Y2K-compliant [info -f g77 M Y2KBAD]" + msgstr "yerleÅŸik `%A', %0 da çaÄŸrıldı, Y2K-uyumsuz olarak bilinir [info -f g77 M Y2KBAD]" + + #: f/bad.def:1094 + #, no-c-format + msgid "Internal compiler error -- cannot perform operation" + msgstr "Derleyici iç hatası. iÅŸlem uygulanamıyor" + + #. Kind messages are used in diagnostic location reports of the + #. form ": In function `foo': ". + #: f/info-k.def:32 + msgid "In unknown kind" + msgstr "Türü anlaşılmayan" + + #: f/info-k.def:33 + msgid "In entity" + msgstr "Öğe" + + #: f/info-k.def:34 + msgid "In function" + msgstr "İşlev" + + #: f/info-k.def:35 + msgid "In subroutine" + msgstr "Altyordam" + + #: f/info-k.def:36 + msgid "In program" + msgstr "program" + + #: f/info-k.def:37 + msgid "In block-data unit" + msgstr "Blok veri birimi" + + #: f/info-k.def:38 + msgid "In common block" + msgstr "Ortak blok" + + #: f/info-k.def:39 + msgid "In construct" + msgstr "Yapı" + + #: f/info-k.def:40 + msgid "In namelist" + msgstr "İsim listesi" + + #: f/info-k.def:41 + msgid "In anything" + msgstr "Hiçbirinde" + + #: java/check-init.c:915 + #, c-format + msgid "internal error in check-init: tree code not implemented: %s" + msgstr "check-init içinde hata: aÄŸaç kodu oluÅŸmadı: %s" + + #: java/check-init.c:988 + #, c-format + msgid "final field '%s' may not have been initialized" + msgstr "son alan '%s' ilklendirilmiÅŸ olmayabilir" + + #: java/class.c:568 java/class.c:593 + msgid "internal error - too many interface type" + msgstr "iç hata - çok fazla interface tür" + + #: java/class.c:744 + msgid "bad method signature" + msgstr "yöntem imzası hatalı" + + #: java/class.c:793 + msgid "misplaced ConstantValue attribute (not in any field)" + msgstr "ConstantValue özniteliÄŸi yanlış yerde (her alanda deÄŸil)" + + #: java/class.c:795 + #, c-format + msgid "duplicate ConstantValue attribute for field '%s'" + msgstr "alan '%s' için ConstantValue özniteliÄŸi yinelendi" + + #: java/class.c:806 + #, c-format + msgid "ConstantValue attribute of field '%s' has wrong type" + msgstr "Alan '%s' için ConstantValue özniteliÄŸi yanlış türde" + + #: java/class.c:1170 + #, c-format + msgid "field '%s' not found in class" + msgstr "alan '%s' sınıfta yok" + + #: java/class.c:1432 + msgid "abstract method in non-abstract class" + msgstr "kuramsal olmayan sınıfta kuramsal yöntem" + + #: java/class.c:2133 + #, c-format + msgid "non-static method '%s' overrides static method" + msgstr "statik olmayan yöntem '%s' statik yönteme zorlanıyor" + + #: java/decl.c:1515 + #, c-format + msgid "In %s: overlapped variable and exception ranges at %d" + msgstr "%s içinde: %d de birbiri içinde deÄŸiÅŸken ve olaÄŸandışılık aralıkları" + + #: java/decl.c:1603 + msgid "bad type in parameter debug info" + msgstr "parametre hata ayıklama bilgisindeki tür hatalı" + + #: java/decl.c:1613 + #, c-format + msgid "bad PC range for debug info for local `%s'" + msgstr "yerel `%s' için hata ayıklama bilgisinin program sayacı (PC) kapsamı hatalı" + + #: java/expr.c:549 + msgid "stack underflow - dup* operation" + msgstr "yığın alttan taÅŸması - dup* iÅŸlemi" + + #: java/expr.c:1541 + #, c-format + msgid "reference `%s' is ambiguous: appears in interface `%s' and interface `%s'" + msgstr "referans `%s' belirsiz; `%s' ve `%s' arayüzlerinde görünüyor" + + #: java/expr.c:1570 + #, c-format + msgid "field `%s' not found" + msgstr "alan `%s' yok" + + #: java/expr.c:1725 + msgid "ret instruction not implemented" + msgstr "ret iÅŸlemi gerçeklenmedi" + + #: java/expr.c:1862 + #, c-format + msgid "method '%s' not found in class" + msgstr "sınıf içinde yöntem '%s' yok" + + #: java/expr.c:2066 + #, c-format + msgid "failed to find class '%s'" + msgstr "sınıf '%s' bulunamadı" + + #: java/expr.c:2078 + #, c-format + msgid "class '%s' has no method named '%s' matching signature '%s'" + msgstr "sınıf '%1$s' '%3$s' ile eÅŸleÅŸen '%2$s' yöntem ismini içermiyor" + + #: java/expr.c:2088 + msgid "invokestatic on non static method" + msgstr "stattik olmayan yöntemde invokestatic" + + #: java/expr.c:2093 + msgid "invokestatic on abstract method" + msgstr "kuramsal yöntemde invokestatic" + + #: java/expr.c:2101 + msgid "invoke[non-static] on static method" + msgstr "statik yöntemde invoke[non-static]" + + #: java/expr.c:2386 + #, c-format + msgid "missing field '%s' in '%s'" + msgstr "'%2$s' içinde alan '%1$s' eksik" + + #: java/expr.c:2392 + #, c-format + msgid "mismatching signature for field '%s' in '%s'" + msgstr "'%2$s' içindeki alan '%1$s' için imza çeliÅŸkili" + + #: java/expr.c:2415 + #, c-format + msgid "assignment to final field `%s' not in field's class" + msgstr "bitiÅŸ alanı `%s' ataması alanların sınıfı içinde deÄŸil" + + #: java/expr.c:2420 + #, c-format + msgid "assignment to final static field `%s' not in class initializer" + msgstr "bitiÅŸ statik alanı `%s' ataması sınıf ilklendiricisi içinde deÄŸil" + + #: java/expr.c:2427 + #, c-format + msgid "assignment to final field `%s' not in constructor" + msgstr "bitiÅŸ alanı `%s' ataması kurucu içinde deÄŸil" + + #: java/expr.c:2665 + #, c-format + msgid "can't expand %s" + msgstr "`%s' geniÅŸletilemiyor" + + #: java/expr.c:2841 + msgid "invalid PC in line number table" + msgstr "satır numarası tablosunda geçersiz program sayacı (PC)" + + #. We've just reached the end of a region of dead code. + #: java/expr.c:2886 + #, c-format + msgid "unreachable bytecode from %d to before %d" + msgstr "%d den %d nin öncesine baytkod eriÅŸilebilir deÄŸil" + + #. We've just reached the end of a region of dead code. + #: java/expr.c:2923 + #, c-format + msgid "unreachable bytecode from %d to the end of the method" + msgstr "yöntemin sonundaki %d den baytkod ulaşılabilir deÄŸil" + + #. duplicate code from LOAD macro + #: java/expr.c:3237 + msgid "unrecogized wide sub-instruction" + msgstr "geniÅŸ altiÅŸlem anlaşılamadı" + + #: java/jcf-io.c:410 + #, c-format + msgid "source file for class `%s' is newer than its matching class file. Source file `%s' used instead" + msgstr "sınıf %s için kaynak dosyası onunla eÅŸleÅŸen sınıf dosyasından daha yeni. Yerine kaynak dosyası `%s' kullanıldı" + + #: java/jcf-parse.c:376 + msgid "bad string constant" + msgstr "dizge sabit hatalı" + + #: java/jcf-parse.c:394 + #, c-format + msgid "bad value constant type %d, index %d" + msgstr "deÄŸer sabiti türü %d, indeks %d hatalı" + + #: java/jcf-parse.c:566 + #, c-format + msgid "can't reopen %s" + msgstr "%s tekrar açılamıyor" + + #: java/jcf-parse.c:571 + #, c-format + msgid "can't close %s" + msgstr "%s kapatılamıyor" + + #: java/jcf-parse.c:653 + #, c-format + msgid "cannot find file for class %s" + msgstr "sınıf %s için dosya bulunamıyor" + + #: java/jcf-parse.c:665 + msgid "not a valid Java .class file" + msgstr "geçerli bir Java .class dosyası deÄŸil" + + #: java/jcf-parse.c:668 + msgid "error while parsing constant pool" + msgstr "sabit havuzu çözümlenirken hata" + + #: java/jcf-parse.c:671 + #, c-format + msgid "error in constant pool entry #%d\n" + msgstr "sabit havuzu girdisi #%d de hata\n" + + #. FIXME - where was first time + #: java/jcf-parse.c:683 + #, c-format + msgid "reading class %s for the second time from %s" + msgstr "sınıf %s ikinci defadır %s den okunuyor" + + #: java/jcf-parse.c:701 + msgid "error while parsing fields" + msgstr "alanlar çözümlenirken hata" + + #: java/jcf-parse.c:704 + msgid "error while parsing methods" + msgstr "yöntemler çözümlenirken hata" + + #: java/jcf-parse.c:707 + msgid "error while parsing final attributes" + msgstr "bitiÅŸ öznitelikleri çözümlenirken hata" + + #: java/jcf-parse.c:721 + #, c-format + msgid "the `java.lang.Object' that was found in `%s' didn't have the special zero-length `gnu.gcj.gcj-compiled' attribute. This generally means that your classpath is incorrectly set. Use `info gcj \"Input Options\"' to see the info page describing how to set the classpath" + msgstr "`gnu.gcj.gcj-compiled' özel sıfır uzunluklu `gnu.gcj.gcj-compiled' özniteliÄŸine sahip olmayan `%s' içinde bulundu. Bu durum genellikle sınıf dosyalarının yolu doÄŸru belirtilmediÄŸinde ortaya çıkar. Sınıf dosyalarının yolunun nasıl belirtileceÄŸini açıklayan info sayfasına bakmak için komut satırından `info gcj \"Input Options\"' yazınız" + + #: java/jcf-parse.c:811 + msgid "missing Code attribute" + msgstr "Code özniteliÄŸi eksik" + + #: java/jcf-parse.c:1050 + msgid "source file seen twice on command line and will be compiled only once" + msgstr "komut satırında kaynak dosyası iki kere kullanılmış ve sadece bir kere derlenecek" + + #: java/jcf-parse.c:1066 + msgid "no input file specified" + msgstr "girdi dosyası belirtilmedi" + + #: java/jcf-parse.c:1095 + #, c-format + msgid "can't close input file %s" + msgstr "girdi dosyası %s kapatılamıyor" + + #: java/jcf-parse.c:1132 + #, c-format + msgid "bad zip/jar file %s" + msgstr "zip/jar dosyası %s hatalı" + + #: java/jcf-write.c:2630 + #, c-format + msgid "internal error in generate_bytecode_insn - tree code not implemented: %s" + msgstr "generate_bytecode_insn içinde hata - aÄŸaç kodu oluÅŸturulamadı: %s" + + #: java/jcf-write.c:2937 + msgid "field initializer type mismatch" + msgstr "alan ilklendirici türü uyumsuzluÄŸu" + + #: java/jcf-write.c:3346 + #, c-format + msgid "can't create directory %s" + msgstr "dizin %s oluÅŸturulamıyor" + + #: java/jv-scan.c:183 + msgid "only one of `--print-main', `--list-class', and `--complexity' allowed" + msgstr "`--print-main', `--list-class' ve `--complexity' seçeneklerinden yalnız biri kullanılabilir" + + #: java/jv-scan.c:186 + #, c-format + msgid "can't open output file `%s'" + msgstr "çıktı dosyası `%s' açılamıyor" + + #: java/jv-scan.c:220 + #, c-format + msgid "file not found `%s'" + msgstr "`%s' yok" + + #: java/jvspec.c:427 + msgid "can't specify `-D' without `--main'\n" + msgstr "`--main' olmaksızın `-D' belirtilemez\n" + + #: java/jvspec.c:430 + #, c-format + msgid "`%s' is not a valid class name" + msgstr "\"%s\" geçerli bir sınıf ismi deÄŸil" + + #: java/jvspec.c:436 + msgid "-R requires -o" + msgstr " -R, -o gerektirir" + + #: java/jvspec.c:443 + msgid "warning: already-compiled .class files ignored with -C" + msgstr "uyarı: zaten derlenmiÅŸ olan .class dosyaları -C ile yoksayıldı" + + #: java/jvspec.c:450 + msgid "cannot specify both -C and -o" + msgstr "hem -C hem de -o belirtilemez" + + #: java/jvspec.c:462 + msgid "cannot create temporary file" + msgstr "geçici dosya oluÅŸturulamıyor" + + #: java/jvspec.c:490 + msgid "using both @FILE with multiple files not implemented" + msgstr "çoklu dosyalarla her iki @FILE kullanımı gerçeklenmedi" + + #: java/jvspec.c:548 + msgid "cannot specify `main' class when not linking" + msgstr "ilintileme yapılmayacaksa `main' sınıfı belirtilemez" + + #: java/lang.c:453 + msgid "can't do dependency tracking with input from stdin" + msgstr "Standart girdiden girdili bağımlılık izlemesi yapılamaz" + + #: java/lang.c:469 + msgid "couldn't determine target name for dependency tracking" + msgstr "bağımlılık izlemesi için hedef isim saptanamıyor" + + #: java/lex.c:308 + #, c-format + msgid "" + "unknown encoding: `%s'\n" + "This might mean that your locale's encoding is not supported\n" + "by your system's iconv(3) implementation. If you aren't trying\n" + "to use a particular encoding for your input file, try the\n" + "`--encoding=UTF-8' option" + msgstr "" + "bilinmeyen kodlama: `%s'\n" + "Yerelinizin kodlamasının sisteminizdeki iconv(3) tarafından desteklenmediÄŸi\n" + "anlamına gelmektedir. EÄŸer girdi dosyanızda özellikle bir kodlama kullanmanız\n" + "gerekiyorsa `--encoding=UTF-8' seçeneÄŸini kullanmayı deneyin." + + #: java/mangle.c:85 + #, c-format + msgid "can't mangle %s" + msgstr "%s anlamlandırılamıyor" + + #: java/mangle_name.c:145 java/mangle_name.c:217 + msgid "internal error - invalid Utf8 name" + msgstr "iç hata - Utf8 ismi geçersiz" + + #: /usr/share/bison.simple:650 + msgid "parse error; also virtual memory exceeded" + msgstr "ayrıştırma hatası; ayrıca sanal bellek aşıldı" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:747 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:785 + msgid "Missing name" + msgstr "İsim eksik" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:749 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:787 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:812 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:996 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1343 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1554 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1556 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1785 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1811 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1822 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1833 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1845 + msgid "';' expected" + msgstr "';' gerekli" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:810 + msgid "'*' expected" + msgstr "'*' gerekli" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:824 + msgid "Class or interface declaration expected" + msgstr "Sınıf ya da arabirim bildirimi gerekli" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:859 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:861 + msgid "Missing class name" + msgstr "Sınıf ismi yok" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:864 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:868 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:876 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1041 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1289 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1291 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1620 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1856 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1888 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1940 + msgid "'{' expected" + msgstr "'{' gerekli" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:878 + msgid "Missing super class name" + msgstr "Süper sınıf ismi eksik" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:888 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:904 + msgid "Missing interface name" + msgstr "Arabirim ismi yok" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:975 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1308 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1369 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1578 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1800 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1809 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1820 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1831 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1843 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1860 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1862 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1933 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2104 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2166 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2318 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2330 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2337 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2344 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2355 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2357 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2395 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2397 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2399 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2420 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2422 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2424 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2440 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2442 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2463 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2465 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2467 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2495 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2497 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2499 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2501 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2519 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2521 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2532 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2543 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2554 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2565 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2576 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2589 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2593 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2595 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2608 + msgid "Missing term" + msgstr "Terim eksik" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:990 + msgid "Missing variable initializer" + msgstr "DeÄŸiÅŸken ilklendirici eksik" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1007 + msgid "Invalid declaration" + msgstr "Geçersiz bildirim" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1013 + msgid "Can't specify array dimension in a declaration" + msgstr "Dizi boyutları bildirim sırasında belirtilemez" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1015 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1091 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2141 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2163 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2167 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2202 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2279 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2289 + msgid "']' expected" + msgstr "']' gerekli" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1019 + msgid "Unbalanced ']'" + msgstr "karşılıksız ']'" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1055 + msgid "Invalid method declaration, method name required" + msgstr "Yöntem bildirimi geçersiz, yöntem ismi gerekiyor" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1061 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1063 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2024 + msgid "Identifier expected" + msgstr "Tanıtıcı gerekli" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1066 + msgid "Invalid method declaration, return type required" + msgstr "Yöntem bildirimi geçersiz, return türü gerekli" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1089 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1534 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1541 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1550 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1552 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1580 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1688 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1969 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2022 + msgid "')' expected" + msgstr "')' gerekli" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1105 + msgid "Missing formal parameter term" + msgstr "Biçimsel parametre terimi eksik" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1120 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1125 + msgid "Missing identifier" + msgstr "Tanıtıcı eksik" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1145 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1154 + msgid "Missing class type term" + msgstr "class tür terimi eksik" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1306 + msgid "Invalid interface type" + msgstr "Geçersiz arabirim türü" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1498 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1667 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1669 + msgid "':' expected" + msgstr "':' gerekli" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1520 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1525 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1530 + msgid "Invalid expression statement" + msgstr "Geçersiz ifade satırı" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1548 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1576 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1616 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1684 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1752 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1858 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1926 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2016 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2018 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2026 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2262 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2264 + msgid "'(' expected" + msgstr "'(' gerekli" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1618 + msgid "Missing term or ')'" + msgstr "Terim ya da ')' eksik" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1665 + msgid "Missing or invalid constant expression" + msgstr "Geçersiz ya da eksik sabit ifadesi" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1686 + msgid "Missing term and ')' expected" + msgstr "Terim eksik ve ')' gerekli" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1725 + msgid "Invalid control expression" + msgstr "Geçersiz denetim ifadesi" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1727 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1729 + msgid "Invalid update expression" + msgstr "Geçersiz güncelleme ifadesi" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1754 + msgid "Invalid init statement" + msgstr "Geçersiz ilklendirme satırı" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1929 + msgid "Missing term or ')' expected" + msgstr "Terim eksik ya da ')' gerekli" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1971 + msgid "'class' or 'this' expected" + msgstr "'class' ya da 'this' gerekli" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1973 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:1975 + msgid "'class' expected" + msgstr "'class' gerekli" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2020 + msgid "')' or term expected" + msgstr "')' ya da terim gerekli" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2139 + msgid "'[' expected" + msgstr "'[' gerekli" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2217 + msgid "Field expected" + msgstr "Alan gerekli" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2274 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2284 + msgid "Missing term and ']' expected" + msgstr "Terim eksik ve ']' gerekli" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2388 + msgid "']' expected, invalid type expression" + msgstr "']' gerekli ve tür ifadesi geçersiz" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2391 + msgid "Invalid type expression" + msgstr "Geçersiz tür ifadesi" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2503 + msgid "Invalid reference type" + msgstr "Geçersiz referans türü" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2981 + msgid "Constructor invocation must be first thing in a constructor" + msgstr "Constructor çaÄŸrısı bir kurucu içindeki ilk ÅŸey olmalı" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2983 + msgid "Only constructors can invoke constructors" + msgstr "Sadece kurucular birbirini çağırabilir" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:2992 + #, c-format + msgid ": `%s' JDK1.1(TM) feature" + msgstr ": `%s' JDK1.1(TM) özelliÄŸi" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:3052 /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:3054 + #, c-format + msgid "" + "%s.\n" + "%s" + msgstr "" + "%s.\n" + "%s" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:6833 + #, c-format + msgid "malformed .zip archive in CLASSPATH: %s" + msgstr "CLASSPATH içinde bozuk .zip arÅŸivi: %s" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:6904 + #, c-format + msgid "Can't find default package `%s'. Check the CLASSPATH environment variable and the access to the archives" + msgstr "Öntanımlı `%s' paketi bulunamıyor. CLASSPATH ortam deÄŸiÅŸkenini ve arÅŸivlere eriÅŸimi kontrol ediniz" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:12228 + #, c-format + msgid "missing static field `%s'" + msgstr "statik alan `%s' eksik" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:12233 + #, c-format + msgid "not a static field `%s'" + msgstr "`%s' bir statik alan deÄŸil" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:12276 + #, c-format + msgid "No case for %s" + msgstr "%s için uygun bir case yok" + + #: /abuild/pthomas/gcc-3.1-20020415/gcc/java/parse.y:13122 + #, c-format + msgid "unregistered operator %s" + msgstr "%s iÅŸlemimi tanınmıyor" + + #: java/typeck.c:178 + msgid "internal error - use of undefined type" + msgstr "iç hata - atanmamış tür kullanımı" + + #: java/typeck.c:566 + msgid "junk at end of signature string" + msgstr "imza dizgesinden sonrası karışık" + + #: java/verify.c:480 + msgid "bad pc in exception_table" + msgstr "exception_table içindeki pc hatalı" + + #: java/verify.c:1392 + #, c-format + msgid "unknown opcode %d@pc=%d during verification" + msgstr "doÄŸrulama sırasında bilinmeyen opkod %d@pc=%d" + + #: java/verify.c:1462 java/verify.c:1475 java/verify.c:1479 + #, c-format + msgid "verification error at PC=%d" + msgstr "PC=%d de doÄŸrulama hatası" + + #: java/lang-options.h:32 + msgid "Disable automatic array bounds checking" + msgstr "Dizi sınırları denetimi iptal edilir" + + #: java/lang-options.h:34 + msgid "Disable assignability checks for stores into object arrays" + msgstr "" + "Nesne dizileri içinde saklamalar için atanabilirlik\n" + " denetimleri kapatılır" + + #: java/lang-options.h:36 + msgid "Assume native functions are implemented using JNI" + msgstr "Yerli iÅŸlevlerin JNI kullanarak oluÅŸtuÄŸu varsayılır" + + #: java/lang-options.h:38 + msgid "Replace system path" + msgstr "Sistem dosya yolu ile deÄŸiÅŸtirilir" + + #: java/lang-options.h:40 + msgid "Set class path" + msgstr "Sınıf dosya yolu ayarlanır" + + #: java/lang-options.h:42 + msgid "Set class path (deprecated: use --classpath instead)" + msgstr "" + "Sınıf patikası belirtilir (eski kullanım: yerine\n" + " --classpath kullanın)" + + #: java/lang-options.h:44 + msgid "Choose class whose main method should be used" + msgstr "Sınıf, ana yöntem olarak kullanılır" + + #: java/lang-options.h:46 + msgid "Choose input encoding (default comes from locale)" + msgstr "Girdi kodlaması seçilir (öntanımlı yerelden gelir)" + + #: java/lang-options.h:48 + msgid "Add directory to class path" + msgstr "Sınıf dosya yoluna dizini ekler" + + #: java/lang-options.h:50 + msgid "Directory where class files should be written" + msgstr "Sınıf dosyalarının bulunduÄŸu dizin" + + #: java/lang-options.h:52 + msgid "Warn if modifiers are specified when not necessary" + msgstr "DeÄŸiÅŸtiriciler gereksizken belirtilmiÅŸse uyarır" + + #: java/lang-options.h:54 + msgid "Warn if deprecated empty statements are found" + msgstr "Eski tip boÅŸ deyimler bulunduÄŸunda uyarır" + + #: java/lang-options.h:56 + msgid "Warn if .class files are out of date" + msgstr ".class dosyaları güncel deÄŸilse uyarır" + + #: java/lang-options.h:58 + msgid "Always check for non gcj generated classes archives" + msgstr "" + "gcj üretimi olmayan sınıfların arÅŸivleri daima\n" + " denetlenir" + + #: java/lang-options.h:60 + msgid "Never optimize static class initialization code" + msgstr "" + "Statik sınıf ilklendirme koduna hiç bir eniyileme\n" + " uygulanmaz" + + #: java/lang-options.h:62 + msgid "Use offset tables for virtual method calls" + msgstr "" + "Sanal yöntem çaÄŸrıları için adresleme tabloları\n" + " kullanılır" + + #: objc/objc-act.c:606 + msgid "no class name specified as argument to -fconstant-string-class" + msgstr "-fconstant-string-class için argüman olarak sınıf ismi belirtilmemiÅŸ" + + #: objc/objc-act.c:757 + #, c-format + msgid "object does not conform to the `%s' protocol" + msgstr "nesne `%s'protokolüne uygun deÄŸil" + + #: objc/objc-act.c:801 + #, c-format + msgid "class `%s' does not implement the `%s' protocol" + msgstr "`%s' sınıfı `%s' protokolünü desteklemiyor" + + #: objc/objc-act.c:882 + #, c-format + msgid "`%s' cannot be statically allocated" + msgstr "`%s' statik olarak ayrılamıyor" + + #: objc/objc-act.c:939 + #, c-format + msgid "unexpected type for `id' (%s)" + msgstr "`id' için umulmadık tür (%s)" + + #: objc/objc-act.c:944 + msgid "undefined type `id', please import " + msgstr "Atanmamış tür `id', lütfen dahil edin" + + #: objc/objc-act.c:996 + #, c-format + msgid "protocol `%s' has circular dependency" + msgstr "protokol `%s' döngüsel bağımlılık içeriyor" + + #: objc/objc-act.c:1018 objc/objc-act.c:5229 + #, c-format + msgid "cannot find protocol declaration for `%s'" + msgstr "`%s' için protokol bildirimi bulunamıyor" + + #: objc/objc-act.c:1279 objc/objc-act.c:5747 objc/objc-act.c:6077 objc/objc-act.c:6126 objc/objc-act.c:6162 objc-parse.y:1752 + #, c-format + msgid "cannot find interface declaration for `%s'" + msgstr "`%s' için arabirim bildirimi bulunamıyor" + + #: objc/objc-act.c:1304 + #, c-format + msgid "cannot find reference tag for class `%s'" + msgstr "sınıf `%s' için referans etiketi bulunamıyor" + + #: objc/objc-act.c:2314 + #, c-format + msgid "cannot find class `%s'" + msgstr "sınıf `%s' bulunamıyor" + + #: objc/objc-act.c:2316 + #, c-format + msgid "class `%s' already exists" + msgstr "sınıf `%s' zaten var" + + #. fatal did not work with 2 args...should fix + #: objc/objc-act.c:2440 + #, c-format + msgid "cannot find interface declaration for `%s', superclass of `%s'" + msgstr "`%s' için arabirim bildirimi ve `%s' süper sınıfı bulunamıyor" + + #: objc/objc-act.c:2447 + #, c-format + msgid "circular inheritance in interface declaration for `%s'" + msgstr "`%s' için arabirim bildiriminde döngüsel kalıtım" + + #: objc/objc-act.c:3500 objc/objc-act.c:3517 + msgid "inconsistent instance variable specification" + msgstr "çeliÅŸkili gerçekleme deÄŸiÅŸkeni özelliÄŸi" + + #: objc/objc-act.c:4710 + #, c-format + msgid "multiple declarations for method `%s'" + msgstr "`%s' yöntemi için çok sayıda bildirim" + + #: objc/objc-act.c:4876 + #, c-format + msgid "invalid receiver type `%s'" + msgstr "alıcı tür `%s' geçersiz" + + #: objc/objc-act.c:4907 objc/objc-act.c:4933 objc/objc-act.c:4981 + #, c-format + msgid "`%s' does not respond to `%s'" + msgstr "`%s' `%s' i yanıtlamıyor" + + #: objc/objc-act.c:4913 objc/objc-act.c:7197 + #, c-format + msgid "no super class declared in interface for `%s'" + msgstr "Arabirim içinde `%s' için süper sınıf bildirilmemiÅŸ" + + #: objc/objc-act.c:5011 + msgid "cannot find class (factory) method" + msgstr "sınıf yöntemi bulunamıyor" + + #: objc/objc-act.c:5012 objc/objc-act.c:5056 + #, c-format + msgid "return type for `%s' defaults to id" + msgstr "`%s' için dönen tür id ye öntanımlı" + + #: objc/objc-act.c:5029 + #, c-format + msgid "method `%s' not implemented by protocol" + msgstr "yöntem `%s' protokol tarafından gerçekleÅŸtirilmiyor" + + #: objc/objc-act.c:5038 + msgid "return type defaults to id" + msgstr "dönen tür id ye öntanımlı" + + #: objc/objc-act.c:5055 + msgid "cannot find method" + msgstr "yöntem bulunamıyor" + + #. Historically, a class method that produced objects (factory + #. method) would assign `self' to the instance that it + #. allocated. This would effectively turn the class method into + #. an instance method. Following this assignment, the instance + #. variables could be accessed. That practice, while safe, + #. violates the simple rule that a class method should not refer + #. to an instance variable. It's better to catch the cases + #. where this is done unknowingly than to support the above + #. paradigm. + #: objc/objc-act.c:5298 + #, c-format + msgid "instance variable `%s' accessed in class method" + msgstr "gerçekleme deÄŸiÅŸkeni `%s' sınıf yönteminden eriÅŸimli" + + #: objc/objc-act.c:5548 + #, c-format + msgid "duplicate definition of class method `%s'" + msgstr "sınıf yöntemi `%s' birden fazla atanmış" + + #: objc/objc-act.c:5554 + #, c-format + msgid "duplicate declaration of class method `%s'" + msgstr "sınıf yöntemi `%s' birden fazla bildirilmiÅŸ" + + #: objc/objc-act.c:5590 + #, c-format + msgid "duplicate definition of instance method `%s'" + msgstr "gerçekleme yöntemi `%s' birden fazla atanmış" + + #: objc/objc-act.c:5596 + #, c-format + msgid "duplicate declaration of instance method `%s'" + msgstr "gerçekleme yöntemi `%s' birden fazla bildirilmiÅŸ" + + #: objc/objc-act.c:5636 + #, c-format + msgid "duplicate interface declaration for category `%s(%s)'" + msgstr "`%s(%s)' kategororisi için birden fazla arayüz bildirimi" + + #: objc/objc-act.c:5722 + #, c-format + msgid "instance variable `%s' is declared private" + msgstr "gerçekleme deÄŸiÅŸkeni `%s' private olarak bildirilmiÅŸ" + + #: objc/objc-act.c:5769 + #, c-format + msgid "instance variable `%s' is declared %s" + msgstr "gerçekleme deÄŸiÅŸkeni `%s' %s olarak bildirilmiÅŸ" + + #: objc/objc-act.c:5779 + msgid "static access to object of type `id'" + msgstr "`id' türünün nesnesine statik eriÅŸim" + + #: objc/objc-act.c:5816 objc/objc-act.c:5909 + #, c-format + msgid "incomplete implementation of class `%s'" + msgstr "`%s' sınıfının içi boÅŸ" + + #: objc/objc-act.c:5820 objc/objc-act.c:5914 + #, c-format + msgid "incomplete implementation of category `%s'" + msgstr "`%s' kategorisinin içi boÅŸ" + + #: objc/objc-act.c:5825 objc/objc-act.c:5919 + #, c-format + msgid "method definition for `%c%s' not found" + msgstr "`%c%s' için yöntem tanımı yok" + + #: objc/objc-act.c:5963 + #, c-format + msgid "%s `%s' does not fully implement the `%s' protocol" + msgstr "%s `%s' `%s'protokolünü tamamen gerçekleÅŸtirmiyor" + + #: objc/objc-act.c:6021 objc/objc-act.c:8118 + msgid "`@end' missing in implementation context" + msgstr "oluÅŸum baÄŸlamında `@end' eksik" + + #: objc/objc-act.c:6049 + #, c-format + msgid "reimplementation of class `%s'" + msgstr "`%s' sınıfının yeniden oluÅŸumu" + + #: objc/objc-act.c:6091 + #, c-format + msgid "conflicting super class name `%s'" + msgstr "süper sınıf ismi `%s' çeliÅŸiyor" + + #: objc/objc-act.c:6106 + #, c-format + msgid "duplicate interface declaration for class `%s'" + msgstr "`%s' sınıfı için birden fazla arabirim bildirimi" + + #: objc/objc-act.c:6388 + #, c-format + msgid "duplicate declaration for protocol `%s'" + msgstr "protokol `%s' için birden fazla bildirim" + + #: objc/objc-act.c:7238 + msgid "[super ...] must appear in a method context" + msgstr "[super ...] bir yöntem baÄŸlamında görünmeli" + + #: objc/objc-act.c:8220 objc/objc-act.c:8236 + #, c-format + msgid "potential selector conflict for method `%s'" + msgstr "yöntem `%s' için olası seçici çeliÅŸiyor" + + #: objc-parse.y:2612 + msgid "`@end' must appear in an implementation context" + msgstr "`@end' bir oluÅŸum baÄŸlamında görünmeli" + + #: objc-parse.y:2886 + msgid "method definition not in class context" + msgstr "yöntem tanımı sınıf baÄŸlamında deÄŸil" + + #: objc/lang-options.h:27 + msgid "Dump decls to a .decl file" + msgstr "Bildirimler .decl dosyasına dökümlenir" + + #: objc/lang-options.h:29 + msgid "Generate code for GNU runtime environment" + msgstr "Kod GNU çalışma ortamı için üretilir" + + #: objc/lang-options.h:32 + msgid "Generate code for NeXT runtime environment" + msgstr "Kod NeXT çalışma ortamı için üretilir" + + #: objc/lang-options.h:35 + msgid "Warn if a selector has multiple methods" + msgstr "Bir seçici çoklu yöntemlere sahipse uyarır" + + #: objc/lang-options.h:39 + msgid "Do not warn if inherited methods are unimplemented" + msgstr "Kalıt yöntemler oluÅŸturulmamışsa uyarır" + + #: objc/lang-options.h:41 + msgid "Generate C header of platform specific features" + msgstr "Platforma özel niteliklerin C baÅŸlıklarını üretir" + + #: objc/lang-options.h:43 + msgid "Specify the name of the class for constant strings" + msgstr "Sabit dizgeler için sınıf ismi belirtilir" + + #: java/lang-specs.h:33 + msgid "-fjni and -femit-class-files are incompatible" + msgstr "-fjni ve -femit-class-files uyumsuz" + + #: java/lang-specs.h:34 + msgid "-fjni and -femit-class-file are incompatible" + msgstr "-fjni ve -femit-class-file uyumsuz" + + #: java/lang-specs.h:35 java/lang-specs.h:36 + msgid "-femit-class-file should used along with -fsyntax-only" + msgstr "-femit-class-file -fsyntax-only ile birlikte kullanılmalı" + + #: config/nextstep.h:161 config/nextstep.h:164 + msgid "-p profiling is no longer supported. Use -pg instead" + msgstr "-p ayrımsaması artık desteklenmiyor. yerine -pg kullanın." + + #: config/arm/arm.h:211 + msgid "-mapcs-26 and -mapcs-32 may not be used together" + msgstr "-mapcs-26 ve -mapcs-32 birlikte kullanılamayabilir" + + #: config/arm/arm.h:223 + msgid "-msoft-float and -mhard_float may not be used together" + msgstr "-msoft-float ve -mhard_float birlikte kullanılamayabilir" + + #: config/arm/arm.h:234 + msgid "-mbig-endian and -mlittle-endian may not be used together" + msgstr "-mbig-endian ve -mlittle-endian birlikte kullanılamayabilir" + + #: config/arm/arm.h:252 + msgid "incompatible interworking options" + msgstr "uyumsuz birlikte çalışma seçenekleri" + + #: config/sparc/freebsd.h:31 config/ia64/freebsd.h:23 config/alpha/freebsd.h:36 config/i386/freebsd-aout.h:227 + msgid "`-p' not supported; use `-pg' and gprof(1)" + msgstr "`-p' desteklenmiyor; `-pg' ve gprof(1) kullanın" + + #: gcc.c:672 f/lang-specs.h:35 + msgid "GNU C does not support -C without using -E" + msgstr "GNU C -E kulanılmaksızın -C desteklemiyor" + + #: gcc.c:699 ada/lang-specs.h:39 java/jvspec.c:77 + msgid "-pg and -fomit-frame-pointer are incompatible" + msgstr "-pg ve -fomit-frame-pointer uyumsuz" + + #: gcc.c:846 + msgid "-E required when input is from standard input" + msgstr "Standart girdiden girdi alınırken -E gereklidir" + + #: gcc.c:850 + msgid "compilation of header file requested" + msgstr "baÅŸlık dosyası derlemesi istendi" + + #: config/mcore/mcore.h:60 + msgid "choose either big or little endian, not both" + msgstr "ya büyük ya da küçük ilkli kullanın, ikisi birden olmaz" + + #: config/mcore/mcore.h:63 + msgid "choose either m340 or m210 not both" + msgstr "Ya m340 ya da m210 kullanın, ikisi birden olmaz" + + #: config/mcore/mcore.h:64 + msgid "the m210 does not have little endian support" + msgstr "m210 küçük ilkli bayt sıralamasının desteklemez" + + #: ada/lang-specs.h:42 + msgid "-c or -S required for Ada" + msgstr "Ada için -c ya da -S gerekli" + + #: config/mips/r3900.h:36 config/mips/r3900.h:42 + msgid "-mhard-float not supported" + msgstr "-mhard-float desteklenmiyor" + + #: config/mips/r3900.h:38 config/mips/r3900.h:44 + msgid "-msingle-float and -msoft-float can not both be specified" + msgstr "-msingle-float ve -msoft-float birlikte belirtilemez." + + #: config/mmix/mmix.h:112 + msgid "options -mabi=mmixware and -mabi=gnu are mutually exclusive" + msgstr "-mabi=mmixware ve -mabi=gnu seçenekleri birlikte kullanılmamalı" + + #: config/i860/fx2800.h:290 + msgid "-p option not supported: use -pg instead" + msgstr "-p seçeneÄŸi desteklenmiyor: yerine -pg kullanın" + + #: config/arm/riscix.h:73 config/arm/riscix.h:133 + msgid "-mbsd and -pedantic incompatible" + msgstr "-mbsd ve -pedantic uyumsuz" + + #: config/arm/riscix.h:74 config/arm/riscix.h:134 + msgid "-mbsd and -mxopen incompatible" + msgstr "-mbsd ve -mxopen uyumsuz" + + #: config/arm/riscix.h:75 config/arm/riscix.h:135 + msgid "-mxopen and -pedantic incompatible" + msgstr "-mxopen ve -pedantic uyumsuz" + + #: config/arc/arc.h:59 config/mips/mips.h:1007 + msgid "may not use both -EB and -EL" + msgstr "-EB ve -EL birlikte kullanılamayabilir" + + #: config/vax/vax.h:42 config/vax/vax.h:43 + msgid "profiling not supported with -mg\n" + msgstr "-mg ile ayrımsama desteklenmiyor\n" + + #: config/i386/cygwin.h:114 + msgid "mno-cygwin and mno-win32 are not compatible" + msgstr "mno-cygwin ve mno-win32 uyumsuz" + + #: config/i386/cygwin.h:169 config/i386/mingw32.h:69 + msgid "shared and mdll are not compatible" + msgstr "shared ve mdll uyumsuz" + + #: config/mips/mips.h:837 + msgid "-pipe is not supported" + msgstr "-pipe desteklenmiyor." + + #: config/mips/mips.h:1003 + msgid "may not use both -mfp64 and -msingle-float" + msgstr "-mfp64 ve -msingle-float birlikte kullanılamayabilir" + + #: config/mips/mips.h:1004 + msgid "may not use both -mfp64 and -m4650" + msgstr "-mfp64 ve -m4650 birlikte kullanılamayabilir" + + #: config/mips/mips.h:1006 + msgid "may not use both -mgp32 and -mfp64" + msgstr "-mfp64 ve -mgp32 birlikte kullanılamayabilir" + + #: config/i386/sco5.h:662 config/i386/sco5.h:737 + msgid "-static not valid with -mcoff" + msgstr "-static -mcoff ile geçerli deÄŸil" + + #: config/i386/sco5.h:663 config/i386/sco5.h:738 + msgid "-shared not valid with -mcoff" + msgstr "-shared -mcoff ile geçerli deÄŸil" + + #: config/i386/sco5.h:664 config/i386/sco5.h:739 + msgid "-symbolic not valid with -mcoff" + msgstr "-symbolic -mcoff ile geçerli deÄŸil" + + #: config/i386/sco5.h:702 + msgid "-fpic is not valid with -mcoff" + msgstr "-fpic -mcoff ile geçerli deÄŸil" + + #: config/i386/sco5.h:703 + msgid "-fPIC is not valid with -mcoff" + msgstr "-fPIC -mcoff ile geçerli deÄŸil" + + #: config/i386/sco5.h:740 + msgid "-fpic not valid with -mcoff" + msgstr "-fpic -mcoff ile geçerli deÄŸil" + + #: config/i386/sco5.h:741 + msgid "-fPIC not valid with -mcoff" + msgstr "-fPIC -mcoff ile geçerli deÄŸil" + + #~ msgid "__builtin_trap not supported by this target" + #~ msgstr "__builtin_trap bu hedef tarafından desteklenmiyor" + + #~ msgid "`%s' previously defined here" + #~ msgstr "`%s' önce burada tanımlanmış" + + #~ msgid "`%s' previously declared here" + #~ msgstr "`%s' önce burada bildirilmiÅŸ" + + #~ msgid "invalid lvalue in increment" + #~ msgstr "arttırmada geçersiz sol taraf" + + #~ msgid "invalid lvalue in decrement" + #~ msgstr "eksiltmede geçersiz sol taraf" + + #~ msgid "increment" + #~ msgstr "arttırma" + + #~ msgid "decrement" + #~ msgstr "eksiltme" + + #~ msgid "Usage: %s [switches] input output\n" + #~ msgstr "Kullanımı: %s [seçenekler] girdi çıktı\n" + + #~ msgid "output_operand: %s" + #~ msgstr "output_operand: %s" + + #~ msgid "invalid %H value" + #~ msgstr "%H deÄŸeri geçersiz" + + #~ msgid "invalid %h value" + #~ msgstr "%h deÄŸeri geçersiz" + + #~ msgid "invalid %Q value" + #~ msgstr "%Q deÄŸeri geçersiz" + + #~ msgid "invalid %q value" + #~ msgstr "%q deÄŸeri geçersiz" + + #~ msgid "invalid %p value" + #~ msgstr "%p deÄŸeri geçersiz" + + #~ msgid "invalid %B value" + #~ msgstr "%B deÄŸeri geçersiz" + + #~ msgid "invalid %C value" + #~ msgstr "%C deÄŸeri geçersiz" + + #~ msgid "invalid %E value" + #~ msgstr "%E deÄŸeri geçersiz" + + #~ msgid "invalid %r value" + #~ msgstr "%r deÄŸeri geçersiz" + + #~ msgid "-march=%s does not support -mips%d" + #~ msgstr "-mabi=%s ile -mips%d desteklenmiyor" + + #~ msgid "no code label found" + #~ msgstr "kod etiketi yok" + + #~ msgid "profiling does not support code models other than medlow" + #~ msgstr "medlow dışında kod modelleri ÅŸekillendirmeyi desteklemez" + + #~ msgid "%s and profiling conflict: disabling %s" + #~ msgstr "%s ve ayrımlama çeliÅŸkisi: %s iptal ediliyor" + + #~ msgid "Use function_epilogue()" + #~ msgstr "function_epilogue() kullanılır" + + #~ msgid "Do not use function_epilogue()" + #~ msgstr "function_epilogue() kullanılmaz" + + #~ msgid "%d errors, %d sorries, do granting" + #~ msgstr "%d hata, %d özür, affedin" + + #~ msgid "GNU compiler does not support statically allocated objects" + #~ msgstr "GNU derleyicisi statik olarak tahsis edilmiÅŸ nesneleri desteklemez" + + #~ msgid "causing unhandled exception `%s' (this is flaged only once)" + #~ msgstr "elde edilmemiÅŸ `%s' olaÄŸandışılığına sebep oluyor (bu sadece bir kere imlenmiÅŸtir)" + + #~ msgid "range failure (not inside function)" + #~ msgstr "aralık aksaması (iÅŸlevin içinde deÄŸil)" + + #~ msgid "possible range failure (not inside function)" + #~ msgstr "olası aralık aksaması (iÅŸlevin içinde deÄŸil)" + + #~ msgid "expression will always cause RANGEFAIL" + #~ msgstr "ifade daima aralık aksamasına sebep olacak" + + #~ msgid "right hand side of assignment is a mode" + #~ msgstr "saÄŸ yan bir kip" + + #~ msgid "incompatible modes in %s" + #~ msgstr "%s içinde uyumsuz kipler" + + #~ msgid "bad string length in %s" + #~ msgstr "dizge uzunluÄŸu %s için hatalı" + + #~ msgid "mode mismatch in %s expression" + #~ msgstr "%s ifadesi içinde kip uyumsuzluÄŸu" + + #~ msgid "%s expression must be referable" + #~ msgstr "%s ifadesi baÅŸvuru yapılabilir olmalıdır" + + #~ msgid "%s not allowed outside a PROC" + #~ msgstr "Bir iÅŸlev dışında %s kullanımına izin verilmez" + + #~ msgid "%s action in PROC with no declared RESULTS" + #~ msgstr "iÅŸlev içinde bildirilmemiÅŸ sonuçları ile %s eylemi" + + #~ msgid "RETURN not allowed outside PROC" + #~ msgstr "iÅŸlev dışında RETURN kullanılmaz" + + #~ msgid "RETURN with a value, in PROC returning void" + #~ msgstr "void dönüşlü iÅŸlevde RETURN bir deÄŸere sahip" + + #~ msgid "RETURN with no value and no RESULT action in procedure" + #~ msgstr "iÅŸlevde bir RESULT eylemi yok ve RETURN bir deÄŸere sahip deÄŸil" + + #~ msgid "no label named `%s'" + #~ msgstr "`%s' isimli bir üye yok" + + #~ msgid "cannot GOTO label `%s' outside current function" + #~ msgstr "GOTO etiketi `%s' iÅŸlevin dışında olamaz" + + #~ msgid "no EXITable label named `%s'" + #~ msgstr "`%s' isimli EXIT yapabilir bir etiket yok" + + #~ msgid "cannot EXIT label `%s' outside current function" + #~ msgstr "EXIT etiketi `%s' iÅŸlevin dışında olamaz" + + #~ msgid "case selector not compatible with label" + #~ msgstr "case seçici case etiketi ile uyumsuz" + + #~ msgid "ELSE label not within a CASE statement" + #~ msgstr "ELSE etiketi bir CASE deyimi içinde deÄŸil" + + #~ msgid "multiple default labels found in a CASE statement" + #~ msgstr "CASE deyiminde çok sayıda öntanımlı etiket var" + + #~ msgid "this is the first ELSE label" + #~ msgstr "bu ilk ELSE etiketi" + + #~ msgid "label found outside of CASE statement" + #~ msgstr "etiket CASE deyimi dışında" + + #~ msgid "duplicate CASE value" + #~ msgstr "yinelenmiÅŸ CASE deÄŸeri" + + #~ msgid "this is the first entry for that value" + #~ msgstr "bu, deÄŸere ilk girdi" + + #~ msgid "CASE value out of range" + #~ msgstr "CASE deÄŸeri kapsamdışı" + + #~ msgid "empty range" + #~ msgstr "boÅŸ aralık" + + #~ msgid "label within scope of cleanup or variable array" + #~ msgstr "etiket temizlik baÄŸlamı ya da deÄŸiÅŸken dizisi içinde" + + #~ msgid "mode in label is not discrete" + #~ msgstr "etiketin kipi ayrık deÄŸil" + + #~ msgid "label not within a CASE statement" + #~ msgstr "etiket bir CASE deyimi içinde deÄŸil" + + #~ msgid "lower bound of range must be a discrete literal expression" + #~ msgstr "aralığın alt sınırı bir ayrık sabit ifadesi olmalı" + + #~ msgid "upper bound of range must be a discrete literal expression" + #~ msgstr "aralığın üst sınırı bir ayrık sabit ifadesi olmalı" + + #~ msgid "CASE label is not valid" + #~ msgstr "CASE etiketi geçersiz" + + #~ msgid "number of CASE selectors does not match the number of CASE label lists" + #~ msgstr "CASE seçicileri, CASE etiketinin listesindekilerle uyuÅŸmuyor" + + #~ msgid "incomplete CASE - %s not handled" + #~ msgstr "içi boÅŸ CASE - %s elde edilmedi" + + #~ msgid "CASE selector with variable range" + #~ msgstr "deÄŸiÅŸken aralıklı CASE seçici" + + #~ msgid "too many cases to do CASE completeness testing" + #~ msgstr "CASE tamamlama testi yapılacak çok fazla durum var" + + #~ msgid "type of tuple cannot be implicit in multiple assignent" + #~ msgstr "damızlık tür çoklu atamalarda dolaylı olamaz" + + #~ msgid "conditional expression cannot be used in multiple assignent" + #~ msgstr "koÅŸullu ifadeler çoklu atamalarda kullanılamaz" + + #~ msgid "internal error - unknown type in multiple assignment" + #~ msgstr "iç hata - çoklu atamada bilinmeyen tür" + + #~ msgid "no operator allowed in multiple assignment," + #~ msgstr "çoklu atamalarda iÅŸlemimi kullanılamaz," + + #~ msgid "location modes in multiple assignment are not equivalent" + #~ msgstr "çoklu atamada konum kipleri eÅŸdeÄŸerde deÄŸildir" + + #~ msgid "you may not assign a value to a BUFFER or EVENT location" + #~ msgstr "Bir TAMPON alanına veya EVENT konumuna bir deÄŸer atayamazsınız" + + #~ msgid "can't assign value to READonly location" + #~ msgstr "Salt-okunur bir konuma deÄŸer atanamaz" + + #~ msgid "cannot assign to location with non-value property" + #~ msgstr "deÄŸer almayan bir özelliÄŸe sahip alana deÄŸer atanamaz" + + #~ msgid "lefthand side of assignment is not a location" + #~ msgstr "sol taraf bir konum deÄŸil" + + #~ msgid "bitstring slice" + #~ msgstr "bit dizgesi dilimi" + + #~ msgid "LENGTH on left-hand-side is non-portable" + #~ msgstr "Sol taraf UZUNLUÄžU uyarlanamaz türde" + + #~ msgid "can only set LENGTH of array location" + #~ msgstr "sadece bir dizinin UZUNLUÄžU belirlenebilir" + + #~ msgid "internal error: trying to make loc-identity with non-location" + #~ msgstr "iç hata: konum olmayanla konum kimliÄŸi oluÅŸturulmaya çalışılıyor" + + #~ msgid "cannot convert to a boolean mode" + #~ msgstr "bir mantıksal kipe dönüştürülemez" + + #~ msgid "cannot convert to a char mode" + #~ msgstr "bir char kipe dönüştürülemez" + + #~ msgid "powerset tuple element out of range" + #~ msgstr "alt kümeler kümesinin damızlık elemanı kapsam dışı" + + #~ msgid "incompatible member of powerset tuple (at position #%d)" + #~ msgstr "alt kümeler kümesinin damızlık üyesi uyumsuz (#%d de)" + + #~ msgid "no initializer value for fixed field `%s'" + #~ msgstr "deÄŸiÅŸmez alan `%s' için bir ilklendirici yok" + + #~ msgid "non-constant value for tag field `%s'" + #~ msgstr "`%s' etiket alanının deÄŸeri sabit deÄŸil" + + #~ msgid "field `%s' in wrong variant" + #~ msgstr "`%s' alanı yanlış variant'ta" + + #~ msgid "missing variant fields (at least `%s')" + #~ msgstr "variant alanlarından bazıları eksik (en azından `%s')" + + #~ msgid "bad initializer for field `%s'" + #~ msgstr "`%s' alanı için hatalı ilklendirici" + + #~ msgid "no initializer value for variant field `%s'" + #~ msgstr "variant alan `%s' için bir ilklendirici yok" + + #~ msgid "no selected variant" + #~ msgstr "seçilmiÅŸ bir variant yok" + + #~ msgid "mixture of labelled and unlabelled tuple elements" + #~ msgstr "etiketli ve etiketsiz damızlık üyelerin karışımı" + + #~ msgid "probably not a structure tuple" + #~ msgstr "olasılıkla bir yapısal damızlık deÄŸil" + + #~ msgid "excess initializer for field `%s'" + #~ msgstr "`%s' alanının ilklendiricisi taşıyor" + + #~ msgid "excess unnamed initializers" + #~ msgstr "isimsiz ilklendiriciler taşıyor" + + #~ msgid "non-constant start index for tuple" + #~ msgstr "damızlık için sabit olmayan baÅŸlangıç indisi" + + #~ msgid "invalid array tuple label" + #~ msgstr "dizisel damızlık etiketi geçersiz" + + #~ msgid "non-constant array tuple index range" + #~ msgstr "bir sabit olmayan dizisel damızlık indis aralığı" + + #~ msgid "incompatible array tuple element %s" + #~ msgstr "dizisel damızlık elemanı %s uyumsuz" + + #~ msgid "multiple (*) or (ELSE) array tuple labels" + #~ msgstr "çok sayıda (*) veya (ELSE) dizisel damızlık etiketi" + + #~ msgid "empty range in array tuple" + #~ msgstr "dizisel damızlık içinde boÅŸ aralık" + + #~ msgid "array tuple has duplicate index %s" + #~ msgstr "dizisel damızlık yinelenen %s indisi içeriyor" + + #~ msgid "array tuple index out of range" + #~ msgstr "dizisel damızlık indisi kapsam dışı" + + #~ msgid "too many array tuple values" + #~ msgstr "çok fazla dizisel damızlık deÄŸeri" + + #~ msgid "dynamic array tuple without (*) or (ELSE)" + #~ msgstr "(*) eya (ELSE)siz dinamik dizisel damızlık" + + #~ msgid "missing array tuple element %s" + #~ msgstr "dizisel damızlık elemanı %s eksik" + + #~ msgid "missing array tuple elements %s : %s" + #~ msgstr "dizisel damızlık elemanı %s eksik: %s" + + #~ msgid "initializer is not an array or string mode" + #~ msgstr "ilklendirici ne bir dizi ne de dizge kipi" + + #~ msgid "destination is too small" + #~ msgstr "hedef çok küçük" + + #~ msgid "internal error: unknown type of expression" + #~ msgstr "iç hata: bilinmeyen ifade türü" + + #~ msgid "`%s' must not be declared readonly" + #~ msgstr "`%s' salt-okunur olarak bildirilemez" + + #~ msgid "declaration of readonly variable without initialization" + #~ msgstr "ilklendirilmemiÅŸ salt okunur deÄŸiÅŸken bildirimi" + + #~ msgid "no initialization allowed for `%s'" + #~ msgstr "`%s' için ilklendirme yapılamaz" + + #~ msgid "value for loc-identity `%s' is not a location" + #~ msgstr "konum kimliÄŸi `%s' için atanan deÄŸer bir konum deÄŸil" + + #~ msgid "location for `%s' not read-compatible" + #~ msgstr "`%s' için konum okuma-uyumlu deÄŸil" + + #~ msgid "nonconstant initializer for `%s'" + #~ msgstr "`%s' ilklendiricisi sabit deÄŸil" + + #~ msgid "do_decl: internal error: don't know what to initialize" + #~ msgstr "do_decl: iç hata: neyin ilklendirileceÄŸi belli deÄŸil" + + #~ msgid "RECURSIVE PROCs" + #~ msgstr "İÇ İÇE İŞLEVler" + + #~ msgid "`%s' must not be READonly" + #~ msgstr "`%s' SALTokunur olmamalı" + + #~ msgid "POS may not be specified for a list of field declarations" + #~ msgstr "POS bir alan bildirimi listesi için belirtilmeyebilir" + + #~ msgid "(ELSE) case label as well as ELSE variant" + #~ msgstr "hem (ELSE) case etiketi hem de ELSE deÄŸiÅŸimi" + + #~ msgid "inconsistent modes between labels and tag field" + #~ msgstr "etiketler ve etiket alanları arasında uyumsuz kipler" + + #~ msgid "too few tag labels" + #~ msgstr "etiket alanı çok az" + + #~ msgid "too many tag labels" + #~ msgstr "etiketleme etiketlerinin sayısı çok fazla" + + #~ msgid "case label lower limit is not a discrete constant expression" + #~ msgstr "case etiketi alt sınırı bir ayrık sabit ifade deÄŸildir" + + #~ msgid "case label upper limit is not a discrete constant expression" + #~ msgstr "case etiketi üst sınırı bir ayrık sabit ifade deÄŸildir" + + #~ msgid "case label must be a discrete constant expression" + #~ msgstr "case etiketi bir ayrık sabit ifade olmalıdır" + + #~ msgid "variant label declared here..." + #~ msgstr "variant etiketi burada bildirildi..." + + #~ msgid "...is duplicated here" + #~ msgstr "... burada tekrarlandı" + + #~ msgid "no field (yet) for tag %s" + #~ msgstr "etiket %s için (henüz) bir alan yok" + + #~ msgid "non-value mode may only returned by LOC" + #~ msgstr "deÄŸer almayan kip sadece konumu ile döndürülebilir" + + #~ msgid "mode of `%s' is not a mode" + #~ msgstr "`%s' kipi bir kip deÄŸil" + + #~ msgid "`%s' may only be passed by LOC" + #~ msgstr "`%s' sadece konumu ile aktarılabilir" + + #~ msgid "nothing named `%s' to grant" + #~ msgstr "yerine getirilecek `%s' isminde bir ÅŸey yok" + + #~ msgid "duplicate grant for `%s'" + #~ msgstr "`%s' için yinelenmiÅŸ yerine getirme" + + #~ msgid "previous grant for `%s'" + #~ msgstr "`%s' için önceki yerine getirme" + + #~ msgid "duplicate definition `%s'" + #~ msgstr "yinelenmiÅŸ tanım `%s'" + + #~ msgid "previous definition of `%s'" + #~ msgstr "`%s'in önceki tanımı" + + #~ msgid "ambiguous choice for seize `%s' -" + #~ msgstr "ele geçirme `%s' için belirsiz seçim -" + + #~ msgid " - can seize this `%s' -" + #~ msgstr " - bu `%s' ele geçirilebilir -" + + #~ msgid " - or this granted decl `%s'" + #~ msgstr " - ya da bu yerine getirilmiÅŸ `%s' bildirimi" + + #~ msgid "enumerator value for `%s' is less than 0" + #~ msgstr "`%s' için sembolik sabit deÄŸeri 0 dan küçük" + + #~ msgid "enumerators `%s' and `%s' have equal values" + #~ msgstr "numaralama deÄŸerleri `%s' ve `%s' eÅŸit" + + #~ msgid "undefined value in SET mode is obsolete and deprecated" + #~ msgstr "SET kipinde tanımsız deÄŸer eskidir ve artık kullanılmıyor" + + #~ msgid "BASE variable never declared" + #~ msgstr "BASE deÄŸiÅŸkeni hiç bildirilmemiÅŸ" + + #~ msgid "cannot BASE a variable on a PROC/PROCESS name" + #~ msgstr "bir PROC/PROCESS isminde bir deÄŸiÅŸken BASE olamaz" + + #~ msgid "INTERNAL ERROR: handle_one_level is broken" + #~ msgstr "İÇ HATA: handle_one_level bozuk" + + #~ msgid "tuple without specified mode not allowed in %s" + #~ msgstr "kipi belirtilmeyen damızlık %s içinde kullanılamaz" + + #~ msgid "conditional expression not allowed in %s" + #~ msgstr "%s içinde koÅŸullu ifadeye izin verilmez" + + #~ msgid "internal error: unknown expression mode in %s" + #~ msgstr "iç hata: %s deki ifade kipi bilinmiyor" + + #~ msgid "CASE selector is not a discrete expression" + #~ msgstr "CASE seçici bir ayrık ifade deÄŸildir" + + #~ msgid "The number of CASE selectors does not match the number of CASE label lists" + #~ msgstr "CASE seçicilerin sayısı CASE etiketindeki listeyle uyumsuz" + + #~ msgid "powerset is not addressable" + #~ msgstr "alt kümeler kümesi adreslenebilir deÄŸil" + + #~ msgid "array is not addressable" + #~ msgstr "dizi adreslenebilir deÄŸildir" + + #~ msgid "too few arguments in call to `%s'" + #~ msgstr "`%s' çaÄŸrısındaki argümanlar çok az" + + #~ msgid "too many arguments in call to `%s'" + #~ msgstr "`%s' çaÄŸrısındaki argümanlar çok fazla" + + #~ msgid "cannot dereference, not a pointer" + #~ msgstr "bir gösterge türüne dönüştürülemez" + + #~ msgid "missing '.' operator or undefined mode name `%s'" + #~ msgstr "'.' iÅŸlemimi eksik ya da kip ismi `%s' tanımsız" + + #~ msgid "you have forgotten the '.' operator which must" + #~ msgstr "Bir STRUCT alanının öncelenmesi gereken yerde '.' iÅŸlemimi unutulmuÅŸ" + + #~ msgid " precede a STRUCT field reference, or `%s' is an undefined mode" + #~ msgstr ", ya da `%s' bir tanımsız kip" + + #~ msgid "can't dereference PTR value using unary `->'" + #~ msgstr "Gösterge deÄŸeri için tekli `->' kullanarak baÅŸvurulama yapılamaz" + + #~ msgid "invalid type argument of `->'" + #~ msgstr "`->' için tür argümanı geçersiz" + + #~ msgid "operand of '.' is not a STRUCT" + #~ msgstr "`.' ile belirtilen terim bir STRUCT deÄŸil" + + #~ msgid "no field named `%s'" + #~ msgstr "`%s' diye bir alan ismi yok" + + #~ msgid "ABS argument must be discrete or real mode" + #~ msgstr "ABS argümanı ya ayrık ya da gerçel kipte olmalı" + + #~ msgid "argument %d to ABSTIME must be of integer type" + #~ msgstr "ABSTIME'ın %d. argümanı bir tamsayı tür olmalı" + + #~ msgid "parameter 1 must be referable" + #~ msgstr "1. parametre referanslanabilir olmalı" + + #~ msgid "mode mismatch in parameter 1" + #~ msgstr "1. parametrede kip uyumsuzluÄŸu" + + #~ msgid "parameter 2 must be a positive integer" + #~ msgstr "2. parametre bir pozitif tamsayı olmalı" + + #~ msgid "CARD argument must be powerset mode" + #~ msgstr "CARD argümanı alt kümeler kümesi kipinde olmalı" + + #~ msgid "expression for DESCR-built-in must be referable" + #~ msgstr "DESCR-built-in için ifade baÅŸvurulabilir olmalı" + + #~ msgid "argument to `%s' must be of integer type" + #~ msgstr "`%s' için argüman bir tamsayı tür olmalı" + + #~ msgid "argument 1 to `%s' must be of floating point mode" + #~ msgstr "`%s'in 1. argümanı bir gerçel sayı türü olmalı" + + #~ msgid "first argument to `%s' must be a mode" + #~ msgstr "`%s' için ilk argüman bir kip olmalı" + + #~ msgid "READonly modes for %s must have a value" + #~ msgstr "%s için SALTokunur kipler bir deÄŸere sahip olmalı" + + #~ msgid "argument to TERMINATE must be a reference primitive value" + #~ msgstr "TERMINATE'in argümanı bir ilkel referans deÄŸeri olmalı" + + #~ msgid "argument 1 to INTTIME must be of mode TIME" + #~ msgstr "INTTIME'ın ilk argümanı TIME kipinde olmalı" + + #~ msgid "LENGTH argument must be string, buffer, event mode, text location or mode" + #~ msgstr "LENGTH argümanı dizge, tampon bellek, eylem kipi, metin konumu ya da bir kip olmalı" + + #~ msgid "UPPER argument must have a mode, or be a mode" + #~ msgstr "UPPER argümanı ya bir kipe sahip olmalı ya da bir kip olmalı" + + #~ msgid "LOWER argument must have a mode, or be a mode" + #~ msgstr "LOWER argümanı ya bir kipe sahip olmalı ya da bir kip olmalı" + + #~ msgid "UPPER argument must be string, array, mode or integer" + #~ msgstr "UPPER argümanı dizge, dizi, kip ya da tamsayı olmalı" + + #~ msgid "LOWER argument must be string, array, mode or integer" + #~ msgstr "LOWER argümanı dizge, dizi, kip ya da tamsayı olmalı" + + #~ msgid "%s argument must be POWERSET mode" + #~ msgstr "%s argümanı POWERSET kipinde olmalı" + + #~ msgid "%s called for empty POWERSET" + #~ msgstr "%s boÅŸ POWERSET için çaÄŸrıldı" + + #~ msgid "argument to NUM is not discrete" + #~ msgstr "NUM argümanı ayrık" + + #~ msgid "no integer mode which matches expression's mode" + #~ msgstr "ifadenin kipiyle uyumlu bir tamsayı kip yok" + + #~ msgid "NUM's parameter is below its mode range" + #~ msgstr "NUM'un parametresi kip aralığının altında" + + #~ msgid "NUM's parameter is above its mode range" + #~ msgstr "NUM'un parametresi kip aralığının üstünde" + + #~ msgid "cannot take SUCC or PRED of a numbered SET" + #~ msgstr "bir numaralı SET, SUCC ya da PRED alamaz" + + #~ msgid "SUCC or PRED must not be done on a PTR" + #~ msgstr "SUCC ya da PRED bir PTR üstünde bitirilemez" + + #~ msgid "SUCC or PRED for a reference type is not standard" + #~ msgstr "Bir referans türü için SUCC ya da PRED standart deÄŸil" + + #~ msgid "SUCC or PRED argument must be a discrete mode" + #~ msgstr "SUCC ya da PRED argümanı bir ayrık kip olmalı" + + #~ msgid "taking the %s of a value already at its %s value" + #~ msgstr "zaten %s deÄŸerinde olan bir deÄŸerin %s'i alınıyor" + + #~ msgid "size applied to a function mode" + #~ msgstr "boyut bir iÅŸlev kipe uygulanmış" + + #~ msgid "sizeof applied to a void mode" + #~ msgstr "sizeof bir void kipe uygulanmış" + + #~ msgid "sizeof applied to an incomplete mode" + #~ msgstr "sizeof bir içi boÅŸ kipe uygulanmış" + + #~ msgid "cannot call a PROCESS, you START a PROCESS" + #~ msgstr "bir PROCESS çaÄŸrılmaz, baÅŸlatılır" + + #~ msgid "%s parameter %d must be a location" + #~ msgstr "%s'in %d. parametresi bir konum olmalı" + + #~ msgid "%s parameter %d is READ-only" + #~ msgstr "%s'in %d. parametresi SALT-okunur" + + #~ msgid "LOC actual parameter %d is a non-referable location" + #~ msgstr "LOC'un %d. parametresi bir baÅŸvurulamayan konum" + + #~ msgid "mode mismatch in parameter %d" + #~ msgstr "%d. parametrede kip uyumsuzluÄŸu" + + #~ msgid "too many arguments to procedure `%s'" + #~ msgstr "altyordam `%s' için argümanlar çok fazla" + + #~ msgid "too many arguments to procedure" + #~ msgstr "altyordam için çok fazla argüman belirtildi" + + #~ msgid "too few arguments to procedure `%s'" + #~ msgstr "altyordam `%s' için argümanlar çok az" + + #~ msgid "too few arguments to procedure" + #~ msgstr "altyordam için çok az argüman belirtildi" + + #~ msgid "syntax error (integer used as function)" + #~ msgstr "sözdizimi hatası (tamsayı iÅŸlev olarak kullanılmış)" + + #~ msgid "syntax error - missing operator, comma, or '('?" + #~ msgstr "sözdizimi hatası - iÅŸlemimi, virgül ya da '(' eksik olabilir mi?" + + #~ msgid "unimplemented built-in function `%s'" + #~ msgstr "daha yazılmamış yerleÅŸik iÅŸlev `%s'" + + #~ msgid "internal error - bad built-in function `%s'" + #~ msgstr "iç hata - yerleÅŸik iÅŸlev `%s' hatalı" + + #~ msgid "empty expression in string index" + #~ msgstr "dizge indeksinde boÅŸ ifade" + + #~ msgid "only one expression allowed in string index" + #~ msgstr "dizge indisinde sadece bir ifade kullanılabilir" + + #~ msgid "invalid: primval ( untyped_exprlist )" + #~ msgstr "geçersiz: primval ( untyped_exprlist )" + + #~ msgid "operand is variable-size bitstring/power-set" + #~ msgstr "terim deÄŸiÅŸken boyutlu bitdizgesi/alt-kümelerinin-kümesi" + + #~ msgid "tree code `%s' unhandled in build_compare_set_expr" + #~ msgstr "build_compare_set_expr içinde aÄŸaç kodu `%s' elde edilmemiÅŸ" + + #~ msgid "incompatible modes in concat expression" + #~ msgstr "birleÅŸtirme ifadesinde uyumsuz kipler" + + #~ msgid "invalid operation on array of chars" + #~ msgstr "karakter dizisinde geçersiz iÅŸlem" + + #~ msgid "comparison of variant structures is unsafe" + #~ msgstr "variant yapıların karşılaÅŸtırması olumsuz" + + #~ msgid "compare with variant records" + #~ msgstr "variant kayıtlarıyla karşılaÅŸtırma" + + #~ msgid "incompatible operands to %s" + #~ msgstr "%s için terimler uyumsuz" + + #~ msgid "relational operator not allowed for this mode" + #~ msgstr "bu kip için iliÅŸkisel iÅŸlemimi kullanılamaz" + + #~ msgid "cannot use %s operator on PROC mode variable" + #~ msgstr "iÅŸlev kipindeki deÄŸiÅŸkende %s iÅŸlemimi kullanılamaz" + + #~ msgid "invalid left operand of %s" + #~ msgstr "%s için sol terim geçersiz" + + #~ msgid "invalid right operand of %s" + #~ msgstr "%s için saÄŸ terim geçersiz" + + #~ msgid "repetition expression must be constant" + #~ msgstr "tekrarlama ifadesi bir sabit olmalı" + + #~ msgid "left argument to MOD/REM operator must be integral" + #~ msgstr "MOD/REM iÅŸlemimi için sol argüman bir integral olmalı" + + #~ msgid "right argument to MOD/REM operator must be integral" + #~ msgstr "MOD/REM iÅŸlemimi için saÄŸ argüman bir integral olmalı" + + #~ msgid "right operand of IN is not a powerset" + #~ msgstr "IN'in saÄŸ terimi bir powerset deÄŸil" + + #~ msgid "left operand of IN incompatible with right operand" + #~ msgstr "IN'in sol terimi ile saÄŸ terimi uyumsuz" + + #~ msgid "-> operator not allow in constant expression" + #~ msgstr "-> iÅŸlemimiyle sabit ifadeler kullanılmaz" + + #~ msgid "taking the address of a string literal is non-standard" + #~ msgstr "bir dizge sabitin adresinin alınması standart-dışı" + + #~ msgid "taking the address of a function is non-standard" + #~ msgstr "bir iÅŸlev adresinin alınması standart-dışı" + + #~ msgid "ADDR requires a LOCATION argument" + #~ msgstr "ADDR bir LOCATION argümanı gerektirir" + + #~ msgid "-> expression is not addressable" + #~ msgstr "-> ifadesi adreslenebilir deÄŸil" + + #~ msgid "ADDR parameter must be a LOCATION" + #~ msgstr "ADDR parametresi bir LOCATION olmalı" + + #~ msgid "possible internal error in build_chill_arrow_expr" + #~ msgstr "build_chill_arrow_expr iÅŸlevinde bir iç hata olasılığı" + + #~ msgid "%s is not addressable" + #~ msgstr "'%s' adreslenebilir deÄŸil" + + #~ msgid "repetition count is not an integer constant" + #~ msgstr "yineleme sayısı bir tamsayı sabit deÄŸil" + + #~ msgid "repetition count < 0" + #~ msgstr "tekrarlama sayısı < 0" + + #~ msgid "repetition value not constant" + #~ msgstr "yineleme deÄŸeri sabit deÄŸil" + + #~ msgid "bitstring repetition of non-constant boolean" + #~ msgstr "sabit olmayan iki terimlinin bit dizgesi yinelemesi" + + #~ msgid "string repetition operand is non-constant bitstring" + #~ msgstr "dizge yineleme terimi sabit olmayan bir bit dizgesi" + + #~ msgid "non-char, non-bit string repetition" + #~ msgstr "dizge yinelemesi ne char ne de bit" + + #~ msgid "right operand of %s is not array of boolean" + #~ msgstr "%s için saÄŸ taraf mantıksal dizi deÄŸil" + + #~ msgid "%s operator applied to boolean variable" + #~ msgstr "%s iÅŸlemimi bir mantıksal deÄŸiÅŸkene uygulanmış" + + #~ msgid "non-boolean mode in conditional expression" + #~ msgstr "ÅŸartlı ifadedeki kip mantıksal kip deÄŸil" + + #~ msgid "decode_constant: invalid component_ref" + #~ msgstr "decode_constant: component_ref geçersiz" + + #~ msgid "decode_constant: mode and value mismatch" + #~ msgstr "decode_constant: kip ve deÄŸer çeliÅŸkili" + + #~ msgid "decode_constant: cannot decode this mode" + #~ msgstr "decode_constant: bu kip çözümlenemez" + + #~ msgid "decode_constant_selective: mode and value mismatch" + #~ msgstr "decode_constant_selective: kip ve deÄŸer çeliÅŸkili" + + #~ msgid "decode_constant_selective: cannot decode this mode" + #~ msgstr "decode_constant_selective: bu kip çözümlenemez" + + #~ msgid "can't write to %s" + #~ msgstr "%s e yazılamıyor" + + #~ msgid "FORBID is not yet implemented" + #~ msgstr "FORBID henüz programlanmadı" + + #~ msgid "function \"really_grant_this\" called for `%s'" + #~ msgstr "`%s' için \"really_grant_this\" iÅŸlevi çaÄŸrıldı" + + #~ msgid "non-integral text length" + #~ msgstr "bütünlenmeyen metin uzunluÄŸu" + + #~ msgid "non-constant text length" + #~ msgstr "sabit olmayan metin uzunluÄŸu" + + #~ msgid "text length must be greater than 0" + #~ msgstr "metin uzunluÄŸu 0 dan büyük olmalı" + + #~ msgid "argument %d of %s must be of mode ASSOCIATION" + #~ msgstr "%2$s'in %1$d. argümanı ASSOCIATION kipinde olmalı" + + #~ msgid "argument %d of %s must be a location" + #~ msgstr "%2$s iletisindeki %1$d. argüman bir konum olmalı" + + #~ msgid "argument 2 of ASSOCIATE must not be an empty string" + #~ msgstr "ASSOCIATE'in 2. argümanı bir boÅŸ dizge olmamalı" + + #~ msgid "argument 2 to ASSOCIATE must be a string" + #~ msgstr "ASSOCIATE'in 2. argümanı bir dizge olmalı" + + #~ msgid "argument 3 to ASSOCIATE must be a string" + #~ msgstr "ASSOCIATE'in 3. argümanı bir dizge olmalı" + + #~ msgid "too many arguments in call to MODIFY" + #~ msgstr "MODIFY çaÄŸrısında çok fazla argüman belirtildi" + + #~ msgid "argument 2 of MODIFY must not be an empty string" + #~ msgstr "MODIFY'ın 2. argümanı bir boÅŸ dizge olmamalı" + + #~ msgid "argument 2 to MODIFY must be a string" + #~ msgstr "MODIFY'ın 2. argümanı bir dizge olmalı" + + #~ msgid "argument 3 to MODIFY must be a string" + #~ msgstr "MODIFY'ın 3. argümanı bir dizge olmalı" + + #~ msgid "argument %d of %s must be an ACCESS or TEXT mode" + #~ msgstr "%2$s'in %1$d. argümanı bir ACCESS ya da TEXT kipi olmalı" + + #~ msgid "argument 4 of CONNECT must be of mode WHERE" + #~ msgstr "CONNECT'in 4. argümanı WHERE kipinde olmalı" + + #~ msgid "index expression for ACCESS without index" + #~ msgstr "indissiz ACCESS için indis ifadesi" + + #~ msgid "incompatible index mode" + #~ msgstr "uyumsuz indeks kipi" + + #~ msgid "argument 3 to CONNECT must be of mode USAGE" + #~ msgstr "CONNECT'in 3. argümanı USAGE kipinde olmalı" + + #~ msgid "argument %d of %s must be of mode ACCESS" + #~ msgstr "%2$s'in %1$d. argümanı ACCESS kipinde olmalı" + + #~ msgid "too few arguments in call to `readrecord'" + #~ msgstr "`readrecord' çaÄŸrısında argümanlar çok az" + + #~ msgid "incompatible record mode" + #~ msgstr "uyumsuz kayıt kipi" + + #~ msgid "store location must not be READonly" + #~ msgstr "saklama konumu SALTokunur olmamalı" + + #~ msgid "too few arguments in call to `writerecord'" + #~ msgstr "`writerecord' çaÄŸrısında argümanlar çok az" + + #~ msgid "transfer to ACCESS without record mode" + #~ msgstr "kayıt kipsiz ACCESS'e aktarım" + + #~ msgid "argument %d of %s must be of mode TEXT" + #~ msgstr "%2$s'in %1$d. argümanı TEXT kipinde olmalı" + + #~ msgid "TEXT doesn't have a location" + #~ msgstr "TEXT bir konuma sahip deÄŸil" + + #~ msgid "incompatible index mode for SETETEXTACCESS" + #~ msgstr "SETETEXTACCESS için uyumsuz indis kipi" + + #~ msgid "incompatible record mode for SETTEXTACCESS" + #~ msgstr "SETETEXTACCESS için uyumsuz kayıt kipi" + + #~ msgid "parameter 2 must be a location" + #~ msgstr "2. parametre bir konum olmalı" + + #~ msgid "incompatible modes in parameter 2" + #~ msgstr "2. parametrede uyumsuz kipler" + + #~ msgid "conditional expression not allowed in this context" + #~ msgstr "bu baÄŸlam içinde ÅŸartlı ifadeler kullanılamaz" + + #~ msgid "untyped expression as argument %d" + #~ msgstr "%d. argüman olarak türsüz ifade" + + #~ msgid "cannot process %d bits integer for READTEXT argument %d" + #~ msgstr "READTEXT'in %2$d. argümanı için %1$d bitlik tamsayı iÅŸlenemez" + + #~ msgid "cannot process %d bits integer WRITETEXT argument %d" + #~ msgstr "WRITETEXT'in %2$d. argümanı için %1$d bitlik tamsayı iÅŸlenemez" + + #~ msgid "argument %d is READonly" + #~ msgstr "%d. argüman SALTokunur" + + #~ msgid "argument %d must be referable" + #~ msgstr "%d. argüman baÅŸvurulabilir olmalı" + + #~ msgid "cannot process argument %d of WRITETEXT, unknown size" + #~ msgstr "WRITETEXT'in %d. argümanı iÅŸlenemez, boyutu bilinmiyor" + + #~ msgid "cannot process mode of argument %d for %sTEXT" + #~ msgstr "%2$sTEXT'in %1$d. argümanının kipi iÅŸlenemez" + + #~ msgid "too few arguments for this format string" + #~ msgstr "bu biçem dizgesi için çok az argüman belirtildi" + + #~ msgid "type of argument %d invalid for conversion code at offset %d" + #~ msgstr "%d. argümanın türü %d göreli konumundaki dönüşüm kodu için geçersiz" + + #~ msgid "unmatched open paren" + #~ msgstr "eÅŸleÅŸmeyen aç parantez" + + #~ msgid "bad format specification character (offset %d)" + #~ msgstr "biçem özellik karakteri hatalı (göreli konum %d)" + + #~ msgid "repetition factor overflow (offset %d)" + #~ msgstr "tekrarlama çarpanında taÅŸma (göreli konum %d)" + + #~ msgid "duplicate qualifier (offset %d)" + #~ msgstr "niteleyici yinelenmiÅŸ (göreli konum %d)" + + #~ msgid "clause width overflow (offset %d)" + #~ msgstr "tümce geniÅŸliÄŸinde taÅŸma (göreli konum %d)" + + #~ msgid "no fraction (offset %d)" + #~ msgstr "üleÅŸke yok (göreli konum %d)" + + #~ msgid "no fraction width (offset %d)" + #~ msgstr "üleÅŸke geniÅŸliÄŸi yok (göreli konum %d)" + + #~ msgid "fraction width overflow (offset %d)" + #~ msgstr "üleÅŸke geniÅŸliÄŸinde taÅŸma (göreli konum %d)" + + #~ msgid "no exponent (offset %d)" + #~ msgstr "üs yok (göreli konum %d)" + + #~ msgid "no exponent width (offset %d)" + #~ msgstr "üs geniÅŸliÄŸi yok (göreli konum %d)" + + #~ msgid "exponent width overflow (offset %d)" + #~ msgstr "üs geniÅŸliÄŸinde taÅŸma (göreli konum %d)" + + #~ msgid "internal error in check_format_string" + #~ msgstr "check_format_string'de iç hata" + + #~ msgid "no padding character (offset %d)" + #~ msgstr "ayraç karakteri yok (göreli konum %d)" + + #~ msgid "too many arguments for this format string" + #~ msgstr "bu biçem dizgesi için çok fazla argüman belirtildi" + + #~ msgid "missing index expression" + #~ msgstr "indeks ifadesi eksik" + + #~ msgid "too few arguments in call to `writetext'" + #~ msgstr "`writetext' çaÄŸrısında argümanlar çok az" + + #~ msgid "argument 1 for WRITETEXT must be a TEXT or CHARS(n) VARYING location" + #~ msgstr "WRITETEXT'in 1. argümanı bir METİN ya da CHARS(n) konumu olmalı" + + #~ msgid "`format string' for WRITETEXT must be a CHARACTER string" + #~ msgstr "WRITETEXT için `biçem dizgesi' bir KARAKTER dizgesi olmalı" + + #~ msgid "too few arguments in call to `readtext'" + #~ msgstr "`readtext' çaÄŸrısında argümanlar çok az" + + #~ msgid "argument 1 for READTEXT must be a TEXT location or CHARS(n) [ VARYING ] expression" + #~ msgstr "READTEXT için 1. argüman bir TEXT konumu ya da CHARS(n) [ VARYING ] ifadesi olmalı" + + #~ msgid "`format string' for READTEXT must be a CHARACTER string" + #~ msgstr "READTEXT için `biçem dizgesi' bir KARAKTER dizgesi olmalı" + + #~ msgid "non-constant expression" + #~ msgstr "sabitsiz ifade" + + #~ msgid "ignoring case upon input and" + #~ msgstr "girdideki harf büyüklüğünün yoksayılması ve " + + #~ msgid "making special words uppercase wouldn't work" + #~ msgstr "özel sözcüklerin büyük harf yapılması çalışmayacaktı" + + #~ msgid "making special words uppercase and" + #~ msgstr "özel sözcüklerin büyük harf yapılması ve" + + #~ msgid " ignoring case upon input wouldn't work" + #~ msgstr "girdideki harf büyüklüğünün yoksayılması çalışmayacaktı" + + #~ msgid "invalid C'xx' " + #~ msgstr "geçersiz C'xx' " + + #~ msgid "malformed exponent part of floating-point literal" + #~ msgstr "gerçel sayı sabitin üssü bozuk" + + #~ msgid "real number exceeds range of REAL" + #~ msgstr "gerçel sayı REAL aralığından taşıyor" + + #~ msgid "end-of-file in '<>' directive" + #~ msgstr "'<>' yönergesinde dosya sonu karakteri" + + #~ msgid "unrecognized compiler directive" + #~ msgstr "tanınmayan derleyici yönergesi" + + #~ msgid "unrecognized compiler directive `%s'" + #~ msgstr "tanınmayan derleyici yönergesi `%s'" + + #~ msgid "unterminated control sequence" + #~ msgstr "sonlandırılmamış denetim dizgesi" + + #~ msgid "invalid integer literal in control sequence" + #~ msgstr "denetim dizgesindeki tamsayı sabit geçersiz" + + #~ msgid "control sequence overflow" + #~ msgstr "denetim dizgesinde taÅŸma" + + #~ msgid "invalid control sequence" + #~ msgstr "geçersiz denetim dizgesi" + + #~ msgid "invalid base in read control sequence" + #~ msgstr "okuma denetimi dizgesindeki taban geçersiz" + + #~ msgid "invalid digit in control sequence" + #~ msgstr "denetim dizgesindeki rakam geçersiz" + + #~ msgid "unterminated string literal" + #~ msgstr "sonlandırılmamış dizge sabit" + + #~ msgid "invalid number format `%s'" + #~ msgstr "sayı biçemi `%s' geçersiz" + + #~ msgid "integer literal too big" + #~ msgstr "tamsayı sabit çok büyük" + + #~ msgid "can't find %s" + #~ msgstr "`%s' bulunamıyor" + + #~ msgid "USE_SEIZE_FILE directive must be followed by string" + #~ msgstr "USE_SEIZE_FILE yönergesini bir dizge takip etmeli" + + #~ msgid "missing `=' in compiler directive" + #~ msgstr "derleyici yönergesinde `=' eksik" + + #~ msgid "invalid value follows `=' in compiler directive" + #~ msgstr "derleyici yönergesinde `=' iÅŸaretinden sonraki deÄŸer geçersiz" + + #~ msgid "invalid `%c' character in name" + #~ msgstr "isimdeki `%c' karakteri geçersiz" + + #~ msgid "`%s' not integer constant synonym " + #~ msgstr "`%s' bir tamsayı sabit eÅŸanlamlısı deÄŸil, " + + #~ msgid "value out of range in compiler directive" + #~ msgstr "derleyici yönergesindeki deÄŸer kapsam dışı" + + #~ msgid "no modules seen" + #~ msgstr "bir modül görünmüyor" + + #~ msgid "modeless tuple not allowed in this context" + #~ msgstr "bu baÄŸlamda kipsiz damızlık kullanılamaz" + + #~ msgid "IN expression does not have a mode" + #~ msgstr "IN ifadesi bir kip içermiyor" + + #~ msgid "location enumeration for BOOLS" + #~ msgstr "BOOLS için konum numaralama" + + #~ msgid "location enumeration for bit-packed arrays" + #~ msgstr "bit-packed diziler için konum numaralama" + + #~ msgid "loop's IN expression is not a composite object" + #~ msgstr "döngülerin IN ifadesi bir birleÅŸik nesne deÄŸil" + + #~ msgid "start expr must have discrete mode" + #~ msgstr "baÅŸlatma ifadesi ayrık kipte olmalı" + + #~ msgid "DO FOR start expression is a numbered SET" + #~ msgstr "DO FOR baÅŸlatma ifadesi bir numaralı küme" + + #~ msgid "TO expression is a numbered SET" + #~ msgstr "TO ifadesi bir numaralı küme" + + #~ msgid "TO expr must have discrete mode" + #~ msgstr "TO ifadesi ayrık kipte olmalı" + + #~ msgid "start expr and TO expr must be compatible" + #~ msgstr "baÅŸlatma ifadesi ve TO ifadesi uyumlu olmalı" + + #~ msgid "BY expr must have discrete mode" + #~ msgstr "BY ifadesi ayrık kipte olmalı" + + #~ msgid "start expr and BY expr must be compatible" + #~ msgstr "baÅŸlatma ifadesi ve BY ifadesi uyumlu olmalı" + + #~ msgid "loop identifier undeclared" + #~ msgstr "döngü tanımlayıcı bildirilmemiÅŸ" + + #~ msgid "loop variable incompatible with start expression" + #~ msgstr "döngü deÄŸiÅŸkeni baÅŸlatma ifadesi ile uyumsuz" + + #~ msgid "body of DO FOR will never execute" + #~ msgstr "DO FOR'un gövdesi asla çalıştırılmayacak" + + #~ msgid "BY expression is negative or zero" + #~ msgstr "BY ifadesi negatif ya da sıfır" + + #~ msgid "can't iterate through array of BOOL" + #~ msgstr "BOOL dizisi üzerinden tekrarlama yapılamaz" + + #~ msgid "Can't iterate through array of BOOL" + #~ msgstr "BOOL dizisi üzerinden tekrarlama yapılamaz" + + #~ msgid "there was no start label to match the end label '%s'" + #~ msgstr "bitiÅŸ etiketi '%s' ile eÅŸleÅŸen bir baÅŸlatma etiketi yok" + + #~ msgid "start label '%s' does not match end label '%s'" + #~ msgstr "baÅŸlatma etiketi '%s' ile bitirme etiketi '%s' eÅŸleÅŸmiyor" + + #~ msgid "`%s' not declared" + #~ msgstr "`%s' bildirilmedi" + + #~ msgid "no RETURN or RESULT in procedure" + #~ msgstr "iÅŸlevde ne RETURN ne de RESULT var" + + #~ msgid "PREFIXED clause with no prelix in unlabeled module" + #~ msgstr "etiketsiz modülde PREFIXED tümcesi için önek yok" + + #~ msgid "internal parser error - expected token %d" + #~ msgstr "iç çözümleme hatası - beklenen dizgecik %d" + + #~ msgid "'%s!' is not followed by an identifier" + #~ msgstr "'%s!' den sonra bir tanımlayıcı gelmiyor" + + #~ msgid "expected a name here" + #~ msgstr "burada bir isim umuluyordu" + + #~ msgid "expected a name string here" + #~ msgstr "burada bir isim dizgesi umuluyordu" + + #~ msgid "`%s' undeclared" + #~ msgstr "`%s' bildirimsiz" + + #~ msgid "action not allowed in SPEC MODULE" + #~ msgstr "SPEC modülünde eylem kullanılmaz" + + #~ msgid "missing defining occurrence" + #~ msgstr "olay tanımlama eksik" + + #~ msgid "bad defining occurrence following ','" + #~ msgstr "','ü izleyen olay tanımlama hatalı" + + #~ msgid "missing '(' in exception list" + #~ msgstr "olaÄŸandışılık listesinde '(' eksik" + + #~ msgid "ON exception names must be unique" + #~ msgstr "ON olaÄŸandışılık isimleri eÅŸsiz olmalı" + + #~ msgid "syntax error in exception list" + #~ msgstr "olaÄŸandışılık listesinde sözdizimi hatası" + + #~ msgid "empty ON-condition" + #~ msgstr "ON-koÅŸulu boÅŸ" + + #~ msgid "INIT not allowed at loc-identity declaration" + #~ msgstr "konum-kimliÄŸi bildiriminde INIT kullanılamaz" + + #~ msgid "'=' used where ':=' is required" + #~ msgstr "':=' gerekirken '=' kullanılmış" + + #~ msgid "initialization is not allowed in spec module" + #~ msgstr "spec modülünde ilklendirme yapılamaz" + + #~ msgid "loc-identity declaration without initialization" + #~ msgstr "ilklendirilmeksizin yerel kimlik bildirimi" + + #~ msgid "bad syntax following FORBID" + #~ msgstr "FORBID'den sora sözdizimi hatası" + + #~ msgid "expected a postfix name here" + #~ msgstr "burada bir sonek isim umuluyordu" + + #~ msgid "expected another rename clause" + #~ msgstr "baÅŸka isimlendirme tümcesi umuluyordu" + + #~ msgid "syntax error in parameter name list" + #~ msgstr "parametre isim listesinde sözdizimi hatası" + + #~ msgid "NONREF specific without LOC in result attribute" + #~ msgstr "result özniteliÄŸinde NONREF'e özel konumsuz" + + #~ msgid "DYNAMIC specific without LOC in result attribute" + #~ msgstr "result özniteliÄŸinde DYNAMIC'e özel konumsuz" + + #~ msgid "exception names must be unique" + #~ msgstr "olaÄŸandışılık isimleri eÅŸsiz olmalı" + + #~ msgid "must specify a PROCESS name" + #~ msgstr "bir iÅŸlem ismi belirtilmeli" + + #~ msgid "SIGNAL must be in global reach" + #~ msgstr "SIGNAL genel olarak eriÅŸilebilir olmalı" + + #~ msgid "syntax error while parsing signal definition statement" + #~ msgstr "sinyal tanımlama deyimi çözümlenirken sözdizimi hatası" + + #~ msgid "case range list" + #~ msgstr "case aralığı listesi" + + #~ msgid "misplaced colon in case label" + #~ msgstr "case etiketindeki : yanlış yerde" + + #~ msgid "unrecognized case label list after ','" + #~ msgstr "','den sonraki case etiketleri tanınmıyor" + + #~ msgid "bad ASM operand" + #~ msgstr "hatalı ASM terimi" + + #~ msgid "readonly location modified by 'asm'" + #~ msgstr "salt-okunur konum 'asm' tarafından deÄŸiÅŸtirildi" + + #~ msgid "expected 'TO' in step enumeration" + #~ msgstr "adımlamada 'TO' umuluyordu" + + #~ msgid "expected 'IN' in FOR control here" + #~ msgstr "FOR denetimi için burada 'IN' umuluyordu" + + #~ msgid "missing DELAY CASE alternative" + #~ msgstr "DELAY CASE alternatifi eksik" + + #~ msgid "non-referable location in DO WITH" + #~ msgstr "DO WITH içinde baÅŸvurulamayan konum" + + #~ msgid "WITH element must be of STRUCT mode" + #~ msgstr "WITH elemanı STRUCT kipinde olmalı" + + #~ msgid "missing ')' in signal/buffer receive alternative" + #~ msgstr "sinyal/tampon alım alternatifinde ')' eksik" + + #~ msgid "misplaced 'IN' in signal/buffer receive alternative" + #~ msgstr "sinyal/tampon alım alternatifinde 'IN' yanlış yerde" + + #~ msgid "missing RECEIVE alternative" + #~ msgstr "RECEIVE alternatifi eksik" + + #~ msgid "PROCESS copy number must be integer" + #~ msgstr "PROCESS kopyalama numarası tamsayı olmalı" + + #~ msgid "missing parenthesis for procedure call" + #~ msgstr "iÅŸlev çaÄŸrısında parantez eksik" + + #~ msgid "expression is not an action" + #~ msgstr "ifade bir eylem deÄŸil" + + #~ msgid "syntax error in action" + #~ msgstr "eylemde sözdizimi hatası" + + #~ msgid "no handler is permitted on this action" + #~ msgstr "bu eylemde tutamak kullanılamaz" + + #~ msgid "definition follows action" + #~ msgstr "tanım bir eylemi izliyor" + + #~ msgid "bad tuple field name list" + #~ msgstr "damızlık alan ismi listesi hatalı" + + #~ msgid "invalid syntax for label in tuple" + #~ msgstr "damızlıktaki etiketin sözdizimi geçersiz" + + #~ msgid "bad syntax in tuple" + #~ msgstr "damızlıkta hatalı sözdizimi" + + #~ msgid "non-mode name before tuple" + #~ msgstr "damızlıktan önce kip olmayan isim" + + #~ msgid "invalid expression/location syntax" + #~ msgstr "ifade/konum sözdizimi geçersiz" + + #~ msgid "RECEIVE expression" + #~ msgstr "RECEIVE ifadesi" + + #~ msgid "there should not be a ';' here" + #~ msgstr "burada bir ';' olMAmalı" + + #~ msgid "missing ELSE/ELSIF in IF expression" + #~ msgstr "IF ifadesinde ELSE/ELSEIF eksik" + + #~ msgid "conditional expression not allowed inside parentheses" + #~ msgstr "parantezli gruplamalarda ÅŸartlı ifade kullanılmaz" + + #~ msgid "mode-less tuple not allowed inside parentheses" + #~ msgstr "kipsiz damızlık parantez içinde kullanılamaz" + + #~ msgid "mixed numbered and unnumbered set elements is not standard" + #~ msgstr "numaralı ve numarasız karışık küme elemanları standart deÄŸildir" + + #~ msgid "SET mode must define at least one named value" + #~ msgstr "SET kipi en azından bir isimli deÄŸer tanımlamalı" + + #~ msgid "POS not allowed for ARRAY" + #~ msgstr "ARRAY için POS kullanılamaz" + + #~ msgid "STEP not allowed in field definition" + #~ msgstr "alan tanımında STEP kullanılamaz" + + #~ msgid "missing field name" + #~ msgstr "alan ismi eksik" + + #~ msgid "bad field name following ','" + #~ msgstr "','ü izleyen alan ismi hatalı" + + #~ msgid "expected ':' in structure variant alternative" + #~ msgstr "yapı variant alternatifinde ':' umuluyordu" + + #~ msgid "missing field" + #~ msgstr "alan eksik" + + #~ msgid "VARYING bit-strings not implemented" + #~ msgstr "VARYING bit dizgeleri henüz programlanmadı" + + #~ msgid "strings must be composed of chars" + #~ msgstr "dizgeler karakterlerin birleÅŸimi olmalı" + + #~ msgid "BUFFER modes may not be readonly" + #~ msgstr "BUFFER kipler salt-okunur olmayabilir" + + #~ msgid "EVENT modes may not be readonly" + #~ msgstr "EVENT kipler salt-okunur olmayabilir" + + #~ msgid "SIGNAL is not a valid mode" + #~ msgstr "SIGNAL bir geçerli kip deÄŸil" + + #~ msgid "syntax error - missing mode" + #~ msgstr "sözdizimi hatası - kip eksik" + + #~ msgid "syntax error - expected a module or end of file" + #~ msgstr "sözdizimi hatası - bir modül ya da dosya sonu umuluyordu" + + #~ msgid " `%s', which depends on ..." + #~ msgstr " `%s', ... da bağımlı olan" + + #~ msgid "cycle: `%s' depends on ..." + #~ msgstr "cycle: `%s' ... da bağımlı" + + #~ msgid " `%s'" + #~ msgstr " `%s'" + + #~ msgid "SYN of this mode not allowed" + #~ msgstr "bu kipin SYN'i olmaz" + + #~ msgid "mode of SYN incompatible with value" + #~ msgstr "SYN kipi deÄŸerle uyumsuz" + + #~ msgid "SYN value outside range of its mode" + #~ msgstr "SYN deÄŸeri kipinin aralığı dışında" + + #~ msgid "INIT string too large for mode" + #~ msgstr "INIT dizgesi kip için çok uzun" + + #~ msgid "mode with non-value property in signal definition" + #~ msgstr "sinyal tanımında deÄŸer almayan özellikli kip" + + #~ msgid "undeclared identifier `%s'" + #~ msgstr "bildirilmemiÅŸ tanımlayıcı `%s'" + + #~ msgid "RETURNS spec with invalid mode" + #~ msgstr "geçersiz kipte RETURNS özelliÄŸi" + + #~ msgid "operand to REF is not a mode" + #~ msgstr "REF'in terimi bir kip deÄŸil" + + #~ msgid "field with non-value mode in variant structure not allowed" + #~ msgstr "variant yapılarında deÄŸer almayan alanlar kullanılamaz" + + #~ msgid "buffer element mode must not have non-value property" + #~ msgstr "tampon elemanı kipi deÄŸer almayan özelliÄŸe sahip olmamalı" + + #~ msgid "recordmode must not have the non-value property" + #~ msgstr "kayıt kipi deÄŸer almayan özelliÄŸe sahip olmamalı" + + #~ msgid "tasking code %ld out of range for `%s'" + #~ msgstr "görevlendirme kodu %ld `%s' için aralık dışında" + + #~ msgid "invalid attribute for argument `%s' (only IN or LOC allowed)" + #~ msgstr "argüman `%s' için öznitelik geçersiz (sadece IN ya da LOC kullanılabilir)" + + #~ msgid "PROCESS may only be declared at module level" + #~ msgstr "PROCESS sadece modül seviyesinde bildirilebilir" + + #~ msgid "process name %s never declared" + #~ msgstr "iÅŸlem ismi %s hiç bildirilmemiÅŸ" + + #~ msgid "you may only START a process, not a proc" + #~ msgstr "sadece bir iÅŸlem baÅŸlatılabilir, bir iÅŸlev deÄŸil" + + #~ msgid "SET expression not a location" + #~ msgstr "SET ifadesi bir konum deÄŸil" + + #~ msgid "SET location must be INSTANCE mode" + #~ msgstr "SET konumu GERÇEKLEME kipi olmalı" + + #~ msgid "too many arguments to process `%s'" + #~ msgstr "`%s' iÅŸlemi için argümanlar çok fazla" + + #~ msgid "too many arguments to process" + #~ msgstr "iÅŸlem için çok fazla argüman belirtildi" + + #~ msgid "too few arguments to process `%s'" + #~ msgstr "`%s' iÅŸlemi için argümanlar çok az" + + #~ msgid "too few arguments to process" + #~ msgstr "iÅŸlem için çok az argüman belirtildi" + + #~ msgid "COPY_NUMBER argument must be INSTANCE expression" + #~ msgstr "COPY_NUMBER argümanı GERÇEKLEME ifadesi olmalı" + + #~ msgid "GEN_CODE argument must be a process or signal name" + #~ msgstr "GEN_CODE argümanı bir iÅŸlem ya da sinyal ismi olmalı" + + #~ msgid "GEN_INST parameter 2 must be an integer mode" + #~ msgstr "GEN_INST 2.parametresi bir tamsayı kip olmalı" + + #~ msgid "GEN_INST parameter 1 must be a PROCESS or an integer expression" + #~ msgstr "GEN_INST 1.parametresi bir iÅŸlem ya da bir tamsayı ifade olmalı" + + #~ msgid "%s is not a declared process" + #~ msgstr "`%s' bildirilmiÅŸ bir iÅŸlem deÄŸil" + + #~ msgid "PROC_TYPE argument must be INSTANCE expression" + #~ msgstr "PROC_TYPE argümanı GERÇEKLEME ifadesi olmalı" + + #~ msgid "QUEUE_LENGTH argument must be a BUFFER/EVENT location" + #~ msgstr "QUEUE_LENGTH argümanı bir BUFFER/EVENT konumu olmalı" + + #~ msgid "SEND requires a SIGNAL; %s is not a SIGNAL name" + #~ msgstr "SEND bir SİNYAL gerektirir; %s bir SİNYAL ismi deÄŸil" + + #~ msgid "too many values for SIGNAL `%s'" + #~ msgstr "SIGNAL `%s' için çok fazla deÄŸer" + + #~ msgid "too few values for SIGNAL `%s'" + #~ msgstr "SIGNAL `%s' için çok az deÄŸer" + + #~ msgid "signal sent without priority" + #~ msgstr "önceliksiz sinyal gönderimi" + + #~ msgid " and no default priority was set." + #~ msgstr " ve öntanımlı öncelik de belirtilmedi." + + #~ msgid " PRIORITY defaulted to 0" + #~ msgstr " ÖNCELİK 0 olarak öntanımlandı" + + #~ msgid "SEND without a destination instance" + #~ msgstr "bir hedef gerçeklemesi olmaksızın SEND" + + #~ msgid " and no destination process specified" + #~ msgstr " ve hedef süreç belirtilmemiÅŸ" + + #~ msgid " for the signal" + #~ msgstr " bu sinyal için" + + #~ msgid "SEND to ANY copy of process `%s'" + #~ msgstr "`%s' sürecinin her kopyasına SEND" + + #~ msgid "SEND TO must be an INSTANCE mode" + #~ msgstr "SEND TO bir GERÇEKLEME kipi olmalı" + + #~ msgid "SEND WITH must have a mode" + #~ msgstr "SEND WITH bir kip olmalı" + + #~ msgid "internal error: RECEIVE CASE stack invalid" + #~ msgstr "iç hata: RECEIVE CASE yığını geçersiz" + + #~ msgid "SET requires INSTANCE location" + #~ msgstr "SET GERÇEKLEME konumu gerektirir" + + #~ msgid "SIGNAL in RECEIVE CASE alternative follows" + #~ msgstr "RECEIVE CASE içindeki SİNYAL alternatifi" + + #~ msgid " a BUFFER name on line %d" + #~ msgstr " %d. satırdaki bir TAMPON isminden sonra geliyor" + + #~ msgid "SIGNAL `%s' has no data fields" + #~ msgstr "`%s' SİNYALi hiç veri alanı içermiyor" + + #~ msgid "SIGNAL `%s' requires data fields" + #~ msgstr "`%s' SİNYALi veri alanları gerektirir" + + #~ msgid "too few data fields provided for `%s'" + #~ msgstr "`%s' için çok az veri alanı belirtildi" + + #~ msgid "too many data fields provided for `%s'" + #~ msgstr "`%s' için çok fazla veri alanı saÄŸlandı" + + #~ msgid "BUFFER in RECEIVE CASE alternative follows" + #~ msgstr "RECEIVE CASE alternatifi içindeki TAMPON" + + #~ msgid " a SIGNAL name on line %d" + #~ msgstr " %d. satırdaki bir SİNYAL isminden sonra geliyor" + + #~ msgid "BUFFER in RECEIVE CASE alternative must be a location" + #~ msgstr "RECEIVE CASE alternatifi içindeki TAMPON bir konum omalı" + + #~ msgid "buffer receive alternative requires only 1 defining occurrence" + #~ msgstr "tampon alım alternatifi sadece 1 olay tanımlama gerektirir" + + #~ msgid "incompatible modes in receive buffer alternative" + #~ msgstr "tampon alım alternatifindeki kipler uyumsuz" + + #~ msgid "defining occurrence in receive buffer alternative must be a location" + #~ msgstr "tampon alım alternatifindeki olay tanımlama bir konum olmalı" + + #~ msgid "buffer receive alternative without `IN location'" + #~ msgstr "`IN konumu' olmaksızın tampon alım alternatifi" + + #~ msgid "RECEIVE CASE alternative must specify a SIGNAL name or BUFFER location" + #~ msgstr "RECEIVE CASE alternatifi ya bir SİNYAL ismi ya da TAMPON konumu belirtmeli" + + #~ msgid "RECEIVE CASE without alternatives" + #~ msgstr "alternatifsiz RECEIVE CASE" + + #~ msgid "CONTINUE requires an event location" + #~ msgstr "CONTINUE bir eylem konumu gerektirir" + + #~ msgid "PRIORITY must be of integer type" + #~ msgstr "ÖNCELİK tamsayı türünde olmalı" + + #~ msgid "delay alternative must be an EVENT location" + #~ msgstr "gecikme alternatifi bir EVENT konumu olmalı" + + #~ msgid "DELAY CASE without alternatives" + #~ msgstr "alternatifsiz DELAY CASE" + + #~ msgid "DELAY action requires an event location" + #~ msgstr "DELAY eylemi bir eylem konumu gerektirir" + + #~ msgid "PRIORITY in DELAY action must be of integer type" + #~ msgstr "GECİKME eylemi içindeki ÖNCELİK tamsayı olmalı" + + #~ msgid "DELAY action without priority." + #~ msgstr "önceliksiz GECİKME eylemi" + + #~ msgid "send buffer action requires a BUFFER location" + #~ msgstr "send buffer eylemi bir BUFFER konumu gerektirir" + + #~ msgid "there must be only 1 value for send buffer action" + #~ msgstr "send buffer eylemi için sadece 1 deÄŸer olmalıdır" + + #~ msgid "convert failed for send buffer action" + #~ msgstr "sen buffer eylemi için dönüşüm baÅŸarısız" + + #~ msgid "incompatible modes in send buffer action" + #~ msgstr "send buffer eyleminde uyumsuz kipler" + + #~ msgid "buffer sent without priority" + #~ msgstr "önceliksiz tampon gönderimi" + + #~ msgid "WITH not allowed for send buffer action" + #~ msgstr "tampon gönderim eylemi için WITH kullanılamaz" + + #~ msgid "TO not allowed for send buffer action" + #~ msgstr "tampon gönderim eylemi için TO kullanılamaz" + + #~ msgid "SEND requires a BUFFER; `%s' is not a BUFFER name" + #~ msgstr "SEND bir TAMPON gerektirir; `%s' bir TAMPON ismi deÄŸil" + + #~ msgid "non-integral max queue size for EVENT/BUFFER mode" + #~ msgstr "EVENT/BUFFER kip için en büyük kuyruk uzunluÄŸu tümleyen deÄŸil" + + #~ msgid "non-constant max queue size for EVENT/BUFFER mode" + #~ msgstr "EVENT/BUFFER kipi için sabit olmayan en büyük kuyruk uzunluÄŸu" + + #~ msgid "max queue_size for EVENT/BUFFER is not positive" + #~ msgstr "EVENT/BUFFER için en büyük kuyruk uzunluÄŸu pozitif deÄŸil" + + #~ msgid "absolute time value must be of mode TIME" + #~ msgstr "mutlak zaman deÄŸeri ZAMAN kipinde olmalı" + + #~ msgid "duration primitive value must be of mode DURATION" + #~ msgstr "süre ilkel deÄŸeri SÜRE kipinde olmalı" + + #~ msgid "string length > UPPER (UINT)" + #~ msgstr "dizge uzunluÄŸu > ÜST (UINT)" + + #~ msgid "can only build a powerset from a discrete mode" + #~ msgstr "bir ayrık kipten bir powerset sadece kurgulanabilir" + + #~ msgid "non-constant bitstring size invalid" + #~ msgstr "sabit olmayan bit dizgesi geniÅŸliÄŸi geçersiz" + + #~ msgid "non-constant powerset size invalid" + #~ msgstr "baÅŸlangıç deÄŸeri olarak sabit-olmayan dizi indeksi" + + #~ msgid "array or string index is a mode (instead of a value)" + #~ msgstr "dizi ya da dizge indisi bir kiptir (bir deÄŸer yerine)" + + #~ msgid "index is not an integer expression" + #~ msgstr "indeks bir tamsayı ifadesi deÄŸil" + + #~ msgid "index not compatible with index mode" + #~ msgstr "indeks, indeks kipiyle uyumsuz" + + #~ msgid "index is not discrete" + #~ msgstr "indis ayrık deÄŸildir" + + #~ msgid "possible internal error - slice argument is neither referable nor constant" + #~ msgstr "iç hata olasılığı - dilim argümanı ne baÅŸvurulabilir ne de bir sabit" + + #~ msgid "bit array slice with non-constant length" + #~ msgstr "sabit olmayan uzunluklu bit dizisi dilimi" + + #~ msgid "bitstring slice with non-constant length" + #~ msgstr "sabit olmayan uzunluklu bit dizisi dilimi" + + #~ msgid "slice operation on non-array, non-bitstring value not supported" + #~ msgstr "dizi dışı dilimleme iÅŸlemi, bit dizgesi olmayan deÄŸerler desteklenmiyor" + + #~ msgid "can only take slice of array or string" + #~ msgstr "sadece dizi ya da dizgenin dilimi alınabilir" + + #~ msgid "slice length is not an integer" + #~ msgstr "dilim uzunluÄŸu bir yamsayı deÄŸil" + + #~ msgid "slice length out-of-range" + #~ msgstr "dilim uzunluÄŸu kapsam-dışı" + + #~ msgid "too many index expressions" + #~ msgstr "çok fazla indeks ifadesi" + + #~ msgid "array index is not discrete" + #~ msgstr "dizi indisi ayrık deÄŸildir" + + #~ msgid "invalid compound index for bitstring mode" + #~ msgstr "bit dizge kipi için geçersiz bileÅŸik indeks" + + #~ msgid "conversions from variable_size value" + #~ msgstr "variable_size deÄŸerinden dönüşümler" + + #~ msgid "conversions to variable_size mode" + #~ msgstr "variable_size kipe dönüşümler" + + #~ msgid "cannot convert to float" + #~ msgstr "float türüne dönüştürülemez" + + #~ msgid "cannot convert float to this mode" + #~ msgstr "bu kipte float türüne dönüştürülemez" + + #~ msgid "OVERFLOW in expression conversion" + #~ msgstr "ifade dönüşümünde TAÅžMA" + + #~ msgid "overflow (not inside function)" + #~ msgstr "taÅŸma (iÅŸlev içinde deÄŸil)" + + #~ msgid "possible overflow (not inside function)" + #~ msgstr "taÅŸma olasılığı (iÅŸlevin içinde deÄŸil)" + + #~ msgid "expression will always cause OVERFLOW" + #~ msgstr "ifade hep TAÅžMAya sebep olacak" + + #~ msgid "not implemented: constant conversion from that kind of expression" + #~ msgstr "daha yazılmadı: ifadenin bu çeÅŸidinden sabit dönüşümü" + + #~ msgid "not implemented: constant conversion to that kind of mode" + #~ msgstr "daha yazılmadı: kipin bu çeÅŸidinden sabit dönüşümü" + + #~ msgid "non-standard, non-portable value conversion" + #~ msgstr "standart-dışı, uyarlanabilir olmayan deÄŸer dönüşümü" + + #~ msgid "location conversion between differently-sized modes" + #~ msgstr "farklı boyuttaki kipler arasında konum dönüşümü" + + #~ msgid "unsupported value conversion" + #~ msgstr "desteklenmeyen deÄŸer dönüşümü" + + #~ msgid "operand to bin must be a non-negative integer literal" + #~ msgstr "bin terimi bir negatif olmayan tamsayı sabit olmalı" + + #~ msgid "size %d of BIN too big - no such integer mode" + #~ msgstr "BIN için %d lik boyut çok büyük - böyle bir tamsayı kipi yok" + + #~ msgid "BIN in pass 2" + #~ msgstr "2. geçiÅŸte BIN" + + #~ msgid "mode of tuple is neither ARRAY, STRUCT, nor POWERSET" + #~ msgstr "damızlık kipi ne ARRAY ne STRUCT ne de POWERSET" + + #~ msgid "internal error in chill_root_resulting_mode" + #~ msgstr "chill_root_resulting_mode'da iç hata" + + #~ msgid "string lengths not equal" + #~ msgstr "dizge uzunlukları aynı deÄŸil" + + #~ msgid "can't do ARRAY assignment - too large" + #~ msgstr "ARRAY ataması yapılamaz - çok büyük" + + #~ msgid "rhs of array assignment is not addressable" + #~ msgstr "dizinin saÄŸ taraf ataması adreslenebilir deÄŸil" + + #~ msgid "non-constant expression for BIN" + #~ msgstr "BIN için sabit olmayan ifade" + + #~ msgid "expression for BIN must not be negative" + #~ msgstr "BIN için ifade negatif olMAmalı" + + #~ msgid "cannot process BIN (>32)" + #~ msgstr "BIN (>32) iÅŸlenemez" + + #~ msgid "bounds of range are not compatible" + #~ msgstr "kapsam sınırları uyumsuz" + + #~ msgid "negative string length" + #~ msgstr "negatif dizge uzunluÄŸu" + + #~ msgid "range's lower bound and parent mode don't match" + #~ msgstr "aralıkların alt sınırı ve üst seviye kipi eÅŸleÅŸmiyor" + + #~ msgid "range's upper bound and parent mode don't match" + #~ msgstr "aralıkların üst sınırı ve üst seviye kipi eÅŸleÅŸmiyor" + + #~ msgid "making range from non-mode" + #~ msgstr "kipsizden aralık yapımı" + + #~ msgid "floating point ranges" + #~ msgstr "gerçel sayı aralıkları" + + #~ msgid "range mode has non-constant limits" + #~ msgstr "aralık kipi sabit olmayan sınırlar içeriyor" + + #~ msgid "range's high bound < mode's low bound" + #~ msgstr "aralıların üst sınırı < kiplerin alt sınırı" + + #~ msgid "range's high bound > mode's high bound" + #~ msgstr "aralıların üst sınırı > kiplerin üst sınırı" + + #~ msgid "range mode high bound < range mode low bound" + #~ msgstr "aralıların üst sınırı < aralık kipinin alt sınırı" + + #~ msgid "range's low bound < mode's low bound" + #~ msgstr "aralıların alt sınırı < kiplerin alt sınırı" + + #~ msgid "range's low bound > mode's high bound" + #~ msgstr "aralıların alt sınırı < kiplerin üst sınırı" + + #~ msgid "stepsize in STEP must be an integer constant" + #~ msgstr "STEP içindeki adımlama bir tamsayı sabit olmalı" + + #~ msgid "stepsize in STEP must be > 0" + #~ msgstr "STEP içindeki adım uzunluÄŸu > 0 olmalı" + + #~ msgid "stepsize in STEP must be the natural width of the array element mode" + #~ msgstr "STEP içindeki adım uzunluÄŸu dizi eleman kipinin doÄŸal geniÅŸliÄŸinde olmalı" + + #~ msgid "starting word in POS must be an integer constant" + #~ msgstr "POS içindeki baÅŸlangıç deÄŸeri bir tamsayı sabit olmalı" + + #~ msgid "starting word in POS must be >= 0" + #~ msgstr "POS içindeki baÅŸlangıç kelimesi >= 0 olmalı" + + #~ msgid "starting word in POS within STEP must be 0" + #~ msgstr "STEP'li POS içindeki baÅŸlangıç kelimesi 0 olmalı" + + #~ msgid "starting bit in POS must be an integer constant" + #~ msgstr "POS içindeki baÅŸlangıç biti bir tamsayı sabit olmalı" + + #~ msgid "starting bit in POS within STEP must be 0" + #~ msgstr "STEP'li POS içindeki baÅŸlangıç biti 0 olmalı" + + #~ msgid "starting bit in POS must be >= 0" + #~ msgstr "POS içindeki baÅŸlangıç biti >= 0 olmalı" + + #~ msgid "starting bit in POS must be < the width of a word" + #~ msgstr "POS içindeki baÅŸlangıç biti < word geniÅŸliÄŸi olmalı" + + #~ msgid "length in POS must be an integer constant" + #~ msgstr "POS içindeki uzunluk bir tamsayı sabit olmalı" + + #~ msgid "length in POS must be > 0" + #~ msgstr "POS içindeki uzunluk > 0 olmalı" + + #~ msgid "end bit in POS must be an integer constant" + #~ msgstr "POS içindeki son biti bir tamsayı sabit olmalı" + + #~ msgid "end bit in POS must be >= the start bit" + #~ msgstr "POS içindeki son biti >= baÅŸlangıç biti olmalı" + + #~ msgid "end bit in POS must be < the width of a word" + #~ msgstr "POS içindeki son biti < word geniÅŸliÄŸi olmalı" + + #~ msgid "the length specified on POS within STEP must be the natural length of the array element type" + #~ msgstr "STEP içindeki POS'da belirtilen uzunluk dizi elemanı türünün doÄŸal uzunluÄŸu olmalı" + + #~ msgid "step size in STEP must be >= the length in POS" + #~ msgstr "STEP'deki adım uzunluÄŸu >= POS'daki uzunluk olmalı" + + #~ msgid "array index must be a range, not a single integer" + #~ msgstr "dizi indeksi tek bir tamsayı deÄŸil bir aralık olmalı" + + #~ msgid "array index is not a discrete mode" + #~ msgstr "dizi indisi bir ayrık kip deÄŸildir" + + #~ msgid "the length specified on POS must be the natural length of the field type" + #~ msgstr "POS'da belirtilen uzunluk, alan türünün doÄŸal uzunluÄŸu olmalı" + + #~ msgid "STRUCT fields must be layed out in monotonically increasing order" + #~ msgstr "STRUCT alanları tekdüze artan sırada yerleÅŸmeli" + + #~ msgid "if one field has a POS layout, then all fields must have a POS layout" + #~ msgstr "bir alan bir POS yerleÅŸimine sahipse diÄŸer tüm alanlar da POS yerleÅŸimine sahip olmalıdır" + + #~ msgid "parameterized structures not implemented" + #~ msgstr "parametreli yapılar henüz programlanmadı" + + #~ msgid "invalid parameterized type" + #~ msgstr "geçersiz parametreli tür" + + #~ msgid "abstract virtual `%#D' called from constructor" + #~ msgstr "kurucudan kuramsal olarak sanal `%#D' çaÄŸrıldı" + + #~ msgid "abstract virtual `%#D' called from destructor" + #~ msgstr "yıkıcıdan kuramsal olarak sanal `%#D' çaÄŸrıldı" + + #~ msgid " perhaps you want `typename %T::%D' to make it a type" + #~ msgstr " ihtimal ki onu tür yapmak için `typename %T::%D' istiyorsunuz" + + #~ msgid "discarding `const' applied to a reference" + #~ msgstr "referansa uygulanan `const' iptal ediliyor" + + #~ msgid "discarding `volatile' applied to a reference" + #~ msgstr "referansa uygulanan `volatile' iptal ediliyor" + + #~ msgid "parser lost in parsing declaration of `%D'" + #~ msgstr "`%D' bildirimi çözümlenirken çözümleyici kayboldu" + + #~ msgid "methods cannot be converted to function pointers" + #~ msgstr "yöntemler iÅŸlev göstergelerine dönüştürülemez" + + #~ msgid "ambiguous request for method pointer `%s'" + #~ msgstr "yöntem göstergesi `%s' için istek belirsiz" + + #~ msgid "`%T' cannot be `restrict'-qualified" + #~ msgstr "`%T' `restrict'-nitelikli olamaz" + + #~ msgid "`%T' cannot be `const'-, `volatile'-, or `restrict'-qualified" + #~ msgstr "`%T' `const'-, `volatile'-, ya da `restrict'-nitelikli olamaz" + + #~ msgid "invalid reference to NULL ptr, use ptr-to-member instead" + #~ msgstr "NULL göstergeye referans geçersiz, yerine üyeye gösterge kullanın" + + #~ msgid "ISO C++ forbids using pointer of type `void *' in pointer arithmetic" + #~ msgstr "ISO C++ gösterge aritmetiÄŸinde `void *' türde gösterge kullanımına izin vermez" + + #~ msgid "ISO C++ forbids using a pointer-to-function in pointer arithmetic" + #~ msgstr "ISO C++ gösterge aritmetiÄŸinde bir iÅŸlev göstergesi kullanımına izin vermez" + + #~ msgid "ISO C++ forbids using a pointer to member function in pointer arithmetic" + #~ msgstr "ISO C++ gösterge aritmetiÄŸinde bir üye iÅŸleve gösterge kullanımına izin vermez" + + #~ msgid "ISO C++ forbids using pointer to a member in pointer arithmetic" + #~ msgstr "ISO C++ gösterge aritmetiÄŸinde bir üyeye gösterge kullanımına izin vermez" + + #~ msgid "internal error #%d" + #~ msgstr "iç hata #%d" + + #~ msgid "can't create cross-reference file `%s'" + #~ msgstr "Çapraz referans dosyası `%s' oluÅŸturulamıyor" + + #~ msgid "support non-32-bit machines better as of version 0.6" + #~ msgstr "32 bitlik olmayan makinalar için destek 0.6 sürümünde daha iyi olacak" + + #~ msgid "Extra label definition %A at %0 -- perhaps previous label definition %B at %1 should have CONTINUE statement?" + #~ msgstr "%0 da fazladan etiket tanımı %A -- %1 deki etiket tanımı %B CONTINUE deyimine sahip olmalı mı?" + + #~ msgid "Extra label definition %A at %0 following label definition %B at %1" + #~ msgstr "%1 daki %B etiket tanımını izleyen %0 daki %A etiket tanımı fazla" + + #~ msgid "Continuation indicator at %0 invalid on first non-comment line of file or following END or INCLUDE [info -f g77 M LEX]" + #~ msgstr "Dosyanın ilk açıklama satırı üstünde ya da END veya INCLUDE'u izleyen devam belirteci %0 da geçersiz [info -f g77 M LEX]" + + #~ msgid "Continuation indicator at %0 invalid here [info -f g77 M LEX]" + #~ msgstr "Devam belirteci %0 da geçersiz [info -f g77 M LEX]" + + #~ msgid "Integer at %0 too large except as negative number (preceded by unary minus sign)" + #~ msgstr "%0 daki tamsayı negatif sayı dışında çok büyük (tekil eksi tarafından öncelendi)" + + #~ msgid "Non-negative integer at %0 too large" + #~ msgstr "%0 daki pozitif tamsayı çok büyük" + + #~ msgid "Integer at %0 too large; even though preceded by unary minus sign at %1, subsequent operator at %2 has precedence over unary minus -- enclose unary minus sign and integer in parentheses to force precedence" + #~ msgstr "%0 daki tamsayı çok büyük; %1 deki tekil eksi ile öncelenmiÅŸ olsa bile, %2 den sonra gelen iÅŸlemimi tekil eksi üzerinde önceliÄŸe sahip -- tekil eksi iÅŸaretini ve tamsayıyı parantez içine alarak önceliÄŸini arttırın" + + #~ msgid "Integer at %0 too large (%2 has precedence over %1)" + #~ msgstr "%0 daki tamsayı çok büyük (%2 %1 den öncelikli)" + + #~ msgid "Integer at %0 too large; even though preceded by minus sign at %1, because minus sign is a binary, not unary, operator -- insert plus sign before minus sign to change it to a unary minus sign" + #~ msgstr "%0 daki tamsayı çok büyük; eksi iÅŸareti bir iki terimli olduÄŸundan, tekil iÅŸlemimi olmadığından %1 deki eksi iÅŸareti tarafından öncelense bile -- onu tekil eksi iÅŸaretine çevirmek için eksi iÅŸaretinden önceye bir eÅŸit iÅŸareti yerleÅŸtirin" + + #~ msgid "Integer at %0 too large (needs unary, not binary, minus at %1)" + #~ msgstr "%0 daki tamsayı çok büyük (%1 de ikili deÄŸil tekli eksi gerekiyor)" + + #~ msgid "Integer at %0 too large; even though preceded by minus sign at %1, subsequent operator at %2 has precedence over minus, and that minus sign should be a unary minus rather than a binary minus -- insert plus sign before minus sign to change it to a unary minus sign, and enclose unary minus sign and integer in parentheses to force precedence" + #~ msgstr "%0 daki tamsayı çok büyük; %1 deki eksi iÅŸareti tarafından öncelik alsa bile, %2 deki sonra gelen iÅŸlemimi eksinin üzerinde önceliÄŸe sahip ve bu eksi iÅŸareti bir iki terimli eksiden ziyade bir tekil eksi olmalı -- onu tekil eksi iÅŸaretine çevirmek için eksi iÅŸaretinin öncesine bir eÅŸit iÅŸareti yerleÅŸtirin ve önceliÄŸini arttırmak için tekil eksi ile tamsayıyı parantez içine alın" + + #~ msgid "Integer at %0 too large (%2 has precedence over %1, which needs to be unary, not binary, minus)" + #~ msgstr "%0 daki tamsayı çok büyük (%2 %1 den daha öncelikli, iki terimli deÄŸil tekil eksi gerekiyor)" + + #~ msgid "Period at %0 not followed by valid keyword forming a valid binary operator; `.%A.' is not a valid binary operator" + #~ msgstr "%0 daki noktadan sonra bir geçerli iki terimli iÅŸlemimi oluÅŸturacak geçerli bir anahtar sözcük gelmiyor; `.%A.' geçerli bir iki terimli iÅŸlemimi deÄŸil" + + #~ msgid "`.%A.' at %0 not a binary operator" + #~ msgstr "%0 daki `.%A.' bir iki terimli iÅŸlemimi deÄŸil" + + #~ msgid "Double-quote at %0 not followed by a string of valid octal digits at %1" + #~ msgstr "%0 daki çift tırnaktan sonra %1 deki geçerli sekizlik rakamlar dizgesi gelmiyor" + + #~ msgid "Invalid octal constant at %0" + #~ msgstr "%0 daki sekizlik sabit geçersiz" + + #~ msgid "Invalid binary digit(s) found in string of digits at %0" + #~ msgstr "%0 daki rakam dizisinde geçersiz ikilik rakamlar bulundu" + + #~ msgid "Invalid binary constant at %0" + #~ msgstr "%0 daki ikilik sabit geçersiz" + + #~ msgid "Invalid hexadecimal digit(s) found in string of digits at %0" + #~ msgstr "%0 daki rakam dizisinde geçersiz onaltılık rakamlar bulundu" + + #~ msgid "Invalid hexadecimal constant at %0" + #~ msgstr "%0 daki onaltılık sabit geçersiz" + + #~ msgid "Invalid octal digit(s) found in string of digits at %0" + #~ msgstr "%0 daki rakam dizisinde geçersiz sekizlik rakamlar bulundu" + + #~ msgid "Invalid radix specifier `%A' at %0 for typeless constant at %1" + #~ msgstr "%1 deki türsüz sabit için %0 daki taban belirteci `%A' geçersiz" + + #~ msgid "Invalid typeless constant at %1" + #~ msgstr "%1 deki türsüz sabit geçersiz" + + #~ msgid "%A part of complex constant at %0 must be a real or integer constant -- otherwise use CMPLX() or COMPLEX() in place of ()" + #~ msgstr "%0 daki karmaşık sabitin %A parçası bir gerçel ya da tamsayı sabit olmalı -- aksi takdirde () yerine CMPLX() ya da COMPLEX() kullanın" + + #~ msgid "%A part of complex constant at %0 not a real or integer constant" + #~ msgstr "%0 daki karmaşık sayı sabitin %A parçası ne bir tamsayı ne de bir gerçel sayı" + + #~ msgid "Invalid keyword `%%%A' at %0 in this context" + #~ msgstr "%0 daki anahtar sözcük `%%%A' bu baÄŸlamda geçersiz" + + #~ msgid "Invalid keyword `%%%A' at %0" + #~ msgstr "%0 daki anahtar sözcük `%%%A' geçersiz" + + #~ msgid "Null expression between %0 and %1 invalid in this context" + #~ msgstr "bu baÄŸlam içinde %0 ile %1 arasında null ifade kullanılamaz" + + #~ msgid "Invalid null expression between %0 and %1" + #~ msgstr "%0 ile %1 arasında null ifade kullanılamaz" + + #~ msgid "Concatenation operator at %0 must operate on two subexpressions of character type, but neither subexpression at %1 or %2 is of character type" + #~ msgstr "%0 daki birleÅŸtirme iÅŸlemimi karakter türünde iki alt ifade ile çalışmalı, ama ne %1 deki ne de %2 deki alt ifade karakter türünde" + + #~ msgid "Invalid operands at %1 and %2 for concatenation operator at %0" + #~ msgstr "%0 daki birleÅŸtirme iÅŸlemimi için %1 ve %2 deki terimler geçersiz" + + #~ msgid "Concatenation operator at %0 must operate on two subexpressions of character type, but the subexpression at %1 is not of character type" + #~ msgstr "Concatenation operator at %0 must operate on two subexpressions of character type, but the subexpression at %1 is not of character type" + + #~ msgid "Invalid operand at %1 for concatenation operator at %0" + #~ msgstr "%0 daki birleÅŸtirme iÅŸlemimi için %1 deki terim geçersiz" + + #~ msgid "Concatenation operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning character scalars, or a combination of both -- but the subexpression at %1 is %A" + #~ msgstr "%0 daki birleÅŸtirme iÅŸlemimi iki skalar (dizi deÄŸil) alt ifade ile çalışmalı, iki iÅŸlev çaÄŸrısı karakter skalarları ya da her ikisinin birleÅŸimini döndürüyor -- ama %1 deki alt ifade %A" + + #~ msgid "Invalid operand (is %A) at %1 for concatenation operator at %0" + #~ msgstr "%0 daki birleÅŸtirme iÅŸlemimi için %1 deki terim (%A) geçersiz" + + #~ msgid "Arithmetic operator at %0 must operate on two subexpressions of arithmetic type, but neither subexpression at %1 or %2 is of arithmetic type" + #~ msgstr "%0 daki aritmetik iÅŸlemimi aritmetik türde iki alt ifade ile çalışmalı, ama ne %1 deki ne de %2 deki alt ifade aritmetik türde" + + #~ msgid "Invalid operands at %1 and %2 for arithmetic operator at %0" + #~ msgstr "%0 daki aritmetik iÅŸlemimi için %1 ve %2 deki terimler geçersiz" + + #~ msgid "Arithmetic operator at %0 must operate on two subexpressions of arithmetic type, but the subexpression at %1 is not of arithmetic type" + #~ msgstr "%0 daki aritmetik iÅŸlemimi aritmetik türde iki alt ifade ile çalışmalı, ama %1 deki alt ifade aritmetik türde deÄŸil" + + #~ msgid "Invalid operand at %1 for arithmetic operator at %0" + #~ msgstr "%1 deki terim %0 daki aritmetik iÅŸlemimi için geçersiz" + + #~ msgid "Arithmetic operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning arithmetic scalars, or a combination of both -- but the subexpression at %1 is %A" + #~ msgstr "%0 daki aritmetik iÅŸlemimi iki skalar (dizi deÄŸil) alt ifade ile çalışmalı, iki iÅŸlev çaÄŸrısı aritmetik skalarları ya da her ikisinin birleÅŸimini döndürüyor -- ama %1 deki alt ifade %A" + + #~ msgid "Invalid operand (is %A) at %1 for arithmetic operator at %0" + #~ msgstr "%0 daki aritmetik iÅŸlemimi için %1 deki terim (%A) geçersiz" + + #~ msgid "Character constant at %0 has no closing quote at %1 [info -f g77 M LEX]" + #~ msgstr "%0 daki karakter sabiti %1 de tırnakla kapanmıyor [info -f g77 M LEX]" + + #~ msgid "Unterminated character constant at %0 [info -f g77 M LEX]" + #~ msgstr "%0 içinde sonlandırılmamış karakter sabiti [info -f g77 M LEX]" + + #, fuzzy + #~ msgid "Continuation line at %0 must have initial `&' since it continues a character context [info -f g77 M LEX]" + #~ msgstr "%0 daki devam satırı bir karakter baÄŸlamı ile devam ettiÄŸinden başında `&' olmalı [info -f g77 M LEX]" + + #~ msgid "Missing initial `&' on continuation line at %0 [info -f g77 M LEX]" + #~ msgstr "%0 daki devam satırının başında `&' eksik [info -f g77 M LEX]" + + #, fuzzy + #~ msgid "Continuation line at %0 must have initial `&' since it continues a split lexical token [info -f g77 M LEX]" + #~ msgstr "%0 daki devam satırı ayrı bir sözel dizgecik ile devam ettiÄŸinden başında `&' olmalı [info -f g77 M LEX]" + + #~ msgid "Continuation line at %0 invalid because it consists only of a single `&' as the only nonblank character" + #~ msgstr "Sadece boÅŸ olamayan karakter olarak bir tek `&' karakterinden ibaret olan %0 daki devam satırı geçersiz" + + #~ msgid "Invalid continuation line at %0" + #~ msgstr "%0 da devam satırı geçersiz" + + #~ msgid "Statement at %0 begins with invalid token [info -f g77 M LEX]" + #~ msgstr "%0 daki deyim geçersiz dizgecik ile baÅŸlıyor [info -f g77 M LEX]" + + #~ msgid "Invalid statement at %0 [info -f g77 M LEX]" + #~ msgstr "%0 daki deyim geçersiz [info -f g77 M LEX]" + + #~ msgid "Unrecognized statement name at %0 and invalid form for assignment or statement-function definition at %1" + #~ msgstr "%0 daki deyim ismi bilinmiyor ve, ya atama biçimi ya da %1 deki deyim iÅŸlevi tanımı geçersiz" + + #~ msgid "Invalid statement at %0" + #~ msgstr "%0 daki deyim geçersiz" + + #~ msgid "Invalid form for %A statement at %0" + #~ msgstr "%0 daki deyim %A için hatalı biçimlendirilmiÅŸ" + + #~ msgid "Invalid %A statement at %0" + #~ msgstr "%0 daki deyim %A için geçersiz" + + #, fuzzy + #~ msgid "Invalid use of hollerith constant in statement at %0 -- enclose the constant in parentheses (for example, change BACKSPACE 2HAB to BACKSPACE (2HAB))" + #~ msgstr "Hollerith sabitin %0 daki kullanımı geçersiz -- sabiti parantez içine alın (örneÄŸin, BACKSPACE 2HAB yerine BACKSPACE (2HAB))" + + #~ msgid "Enclose hollerith constant in statement at %0 in parentheses" + #~ msgstr "%0 daki deyim içinde hollerith sabiti parantez içine alın" + + #, fuzzy + #~ msgid "nP control edit descriptor not followed by comma but followed by edit descriptor at %0 other than D, E, EN, F, or G" + #~ msgstr "nP denetim düzenleme belirtecininden sonra bir virgül yokken %0 da D, E, EN, F, veya G dışında bir düzenleme belirteci var" + + #, fuzzy + #~ msgid "Invalid edit descriptor at %0 following nP control edit descriptor" + #~ msgstr "nP denetim düzenleme belirtecini izleyen %0 daki düzenleme belirteci geçersiz" + + #, fuzzy + #~ msgid "Invalid I specifier in FORMAT statement at %0 -- correct form: [r]Iw.[m]" + #~ msgstr "%0 daki FORMAT deyimi içindeki I belirteci geçersiz -- doÄŸrusu: [r]Iw.[m]" + + #~ msgid "Invalid I specifier in FORMAT statement at %0" + #~ msgstr "%0 daki FORMAT deyimi içindeki I belirteci geçersiz" + + #, fuzzy + #~ msgid "Invalid B specifier in FORMAT statement at %0 -- correct form: [r]Bw.[m]" + #~ msgstr "%0 daki FORMAT deyimi içindeki B belirteci geçersiz -- doÄŸrusu: [r]Bw.[m]" + + #~ msgid "Invalid B specifier in FORMAT statement at %0" + #~ msgstr "%0 daki FORMAT deyimi içindeki B belirteci geçersiz" + + #, fuzzy + #~ msgid "Invalid O specifier in FORMAT statement at %0 -- correct form: [r]Ow.[m]" + #~ msgstr "%0 daki FORMAT deyimi içindeki O belirteci geçersiz -- doÄŸrusu: [r]Ow.[m]" + + #~ msgid "Invalid O specifier in FORMAT statement at %0" + #~ msgstr "%0 daki FORMAT deyimi içindeki O belirteci geçersiz" + + #, fuzzy + #~ msgid "Invalid Z specifier in FORMAT statement at %0 -- correct form: [r]Zw.[m]" + #~ msgstr "%0 daki FORMAT deyimi içindeki Z belirteci geçersiz -- doÄŸrusu: [r]Zw.[m]" + + #~ msgid "Invalid Z specifier in FORMAT statement at %0" + #~ msgstr "%0 daki FORMAT deyimi içindeki Z belirteci geçersiz" + + #, fuzzy + #~ msgid "Invalid F specifier in FORMAT statement at %0 -- correct form: [r]Fw.d" + #~ msgstr "%0 daki FORMAT deyimi içindeki F belirteci geçersiz -- doÄŸrusu: [r]Fw.d" + + #~ msgid "Invalid F specifier in FORMAT statement at %0" + #~ msgstr "%0 daki FORMAT deyimi içindeki F belirteci geçersiz" + + #, fuzzy + #~ msgid "Invalid E specifier in FORMAT statement at %0 -- correct form: [r]Ew.d[Ee]" + #~ msgstr "%0 daki FORMAT deyimi içindeki E belirteci geçersiz -- doÄŸrusu: [r]Ew.d[Ee]" + + #~ msgid "Invalid E specifier in FORMAT statement at %0" + #~ msgstr "%0 daki FORMAT deyimi içindeki E belirteci geçersiz" + + #, fuzzy + #~ msgid "Invalid EN specifier in FORMAT statement at %0 -- correct form: [r]ENw.d[Ee]" + #~ msgstr "%0 daki FORMAT deyimi içindeki EN belirteci geçersiz -- doÄŸrusu: [r]ENw.d[Ee]" + + #~ msgid "Invalid EN specifier in FORMAT statement at %0" + #~ msgstr "%0 daki FORMAT deyimi içindeki EN belirteci geçersiz" + + #, fuzzy + #~ msgid "Invalid G specifier in FORMAT statement at %0 -- correct form: [r]Gw.d[Ee]" + #~ msgstr "%0 daki FORMAT deyimi içindeki G belirteci geçersiz -- doÄŸrusu: [r]Gw.d[Ee]" + + #~ msgid "Invalid G specifier in FORMAT statement at %0" + #~ msgstr "%0 daki FORMAT deyimi içindeki G belirteci geçersiz" + + #, fuzzy + #~ msgid "Invalid L specifier in FORMAT statement at %0 -- correct form: [r]Lw" + #~ msgstr "%0 daki FORMAT deyimi içindeki L belirteci geçersiz -- doÄŸrusu: [r]Lw" + + #~ msgid "Invalid L specifier in FORMAT statement at %0" + #~ msgstr "%0 daki FORMAT deyimi içindeki L belirteci geçersiz" + + #, fuzzy + #~ msgid "Invalid A specifier in FORMAT statement at %0 -- correct form: [r]A[w]" + #~ msgstr "%0 daki FORMAT deyimi içindeki A belirteci geçersiz -- doÄŸrusu: [r]A[w]" + + #~ msgid "Invalid A specifier in FORMAT statement at %0" + #~ msgstr "%0 daki FORMAT deyimi içindeki A belirteci geçersiz" + + #, fuzzy + #~ msgid "Invalid D specifier in FORMAT statement at %0 -- correct form: [r]Dw.d" + #~ msgstr "%0 daki FORMAT deyimi içindeki D belirteci geçersiz -- doÄŸrusu: [r]Dw.d" + + #~ msgid "Invalid D specifier in FORMAT statement at %0" + #~ msgstr "%0 daki FORMAT deyimi içindeki D belirteci geçersiz" + + #, fuzzy + #~ msgid "Invalid Q specifier in FORMAT statement at %0 -- correct form: Q" + #~ msgstr "%0 daki FORMAT deyimi içindeki Q belirteci geçersiz -- doÄŸrusu: Q" + + #~ msgid "Invalid Q specifier in FORMAT statement at %0" + #~ msgstr "%0 daki FORMAT deyimi içindeki Q belirteci geçersiz" + + #, fuzzy + #~ msgid "Invalid $ specifier in FORMAT statement at %0 -- correct form: $" + #~ msgstr "%0 daki FORMAT deyimi içindeki $ belirteci geçersiz -- doÄŸrusu: $" + + #~ msgid "Invalid $ specifier in FORMAT statement at %0" + #~ msgstr "%0 daki FORMAT deyimi içindeki $ belirteci geçersiz" + + #, fuzzy + #~ msgid "Invalid P specifier in FORMAT statement at %0 -- correct form: kP" + #~ msgstr "%0 daki FORMAT deyimi içindeki P belirteci geçersiz -- doÄŸrusu: kP" + + #~ msgid "Invalid P specifier in FORMAT statement at %0" + #~ msgstr "%0 daki FORMAT deyimi içindeki P belirteci geçersiz" + + #, fuzzy + #~ msgid "Invalid T specifier in FORMAT statement at %0 -- correct form: Tn" + #~ msgstr "%0 daki FORMAT deyimi içindeki T belirteci geçersiz -- doÄŸrusu: Tn" + + #~ msgid "Invalid T specifier in FORMAT statement at %0" + #~ msgstr "%0 daki FORMAT deyimi içindeki T belirteci geçersiz" + + #, fuzzy + #~ msgid "Invalid TL specifier in FORMAT statement at %0 -- correct form: TLn" + #~ msgstr "%0 daki FORMAT deyimi içindeki TL belirteci geçersiz -- doÄŸrusu: TLn" + + #~ msgid "Invalid TL specifier in FORMAT statement at %0" + #~ msgstr "%0 daki FORMAT deyimi içindeki TL belirteci geçersiz" + + #, fuzzy + #~ msgid "Invalid TR specifier in FORMAT statement at %0 -- correct form: TRn" + #~ msgstr "%0 daki FORMAT deyimi içindeki TR belirteci geçersiz -- doÄŸrusu: TRn" + + #~ msgid "Invalid TR specifier in FORMAT statement at %0" + #~ msgstr "%0 daki FORMAT deyimi içindeki TR belirteci geçersiz" + + #, fuzzy + #~ msgid "Invalid X specifier in FORMAT statement at %0 -- correct form: nX" + #~ msgstr "%0 daki FORMAT deyimi içindeki X belirteci geçersiz -- doÄŸrusu: nX" + + #~ msgid "Invalid X specifier in FORMAT statement at %0" + #~ msgstr "%0 daki FORMAT deyimi içindeki X belirteci geçersiz" + + #, fuzzy + #~ msgid "Invalid S specifier in FORMAT statement at %0 -- correct form: S" + #~ msgstr "%0 daki FORMAT deyimi içindeki S belirteci geçersiz -- doÄŸrusu: S" + + #~ msgid "Invalid S specifier in FORMAT statement at %0" + #~ msgstr "%0 daki FORMAT deyimi içindeki S belirteci geçersiz" + + #, fuzzy + #~ msgid "Invalid SP specifier in FORMAT statement at %0 -- correct form: SP" + #~ msgstr "%0 daki FORMAT deyimi içindeki SP belirteci geçersiz -- doÄŸrusu: SP" + + #~ msgid "Invalid SP specifier in FORMAT statement at %0" + #~ msgstr "%0 daki FORMAT deyimi içindeki SP belirteci geçersiz" + + #, fuzzy + #~ msgid "Invalid SS specifier in FORMAT statement at %0 -- correct form: SS" + #~ msgstr "%0 daki FORMAT deyimi içindeki SS belirteci geçersiz -- doÄŸrusu: SS" + + #~ msgid "Invalid SS specifier in FORMAT statement at %0" + #~ msgstr "%0 daki FORMAT deyimi içindeki SS belirteci geçersiz" + + #, fuzzy + #~ msgid "Invalid BN specifier in FORMAT statement at %0 -- correct form: BN" + #~ msgstr "%0 daki FORMAT deyimi içindeki BN belirteci geçersiz -- doÄŸrusu: BN" + + #~ msgid "Invalid BN specifier in FORMAT statement at %0" + #~ msgstr "%0 daki FORMAT deyimi içindeki BN belirteci geçersiz" + + #, fuzzy + #~ msgid "Invalid BZ specifier in FORMAT statement at %0 -- correct form: BZ" + #~ msgstr "%0 daki FORMAT deyimi içindeki BZ belirteci geçersiz -- doÄŸrusu: BZ" + + #~ msgid "Invalid BZ specifier in FORMAT statement at %0" + #~ msgstr "%0 daki FORMAT deyimi içindeki BZ belirteci geçersiz" + + #, fuzzy + #~ msgid "Invalid : specifier in FORMAT statement at %0 -- correct form: :" + #~ msgstr "%0 daki FORMAT deyimi içindeki : belirteci geçersiz -- doÄŸrusu: :" + + #~ msgid "Invalid : specifier in FORMAT statement at %0" + #~ msgstr "%0 daki FORMAT deyimi içindeki : belirteci geçersiz" + + #, fuzzy + #~ msgid "Invalid H specifier in FORMAT statement at %0 -- correct form: nHcharacters !where n is an unsigned decimal constant, and characters !contains exactly n characters (including spaces)" + #~ msgstr "" + #~ "%0 daki FORMAT deyimi içindeki H belirteci geçersiz -- doÄŸrusu: nHkarakterler\n" + #~ "n iÅŸaretsiz ondalık sabit olmak üzere H dan sonra n tane karakter (boÅŸluklar dahil)" + + #~ msgid "Invalid H specifier in FORMAT statement at %0" + #~ msgstr "%0 daki FORMAT deyimi içindeki H belirteci geçersiz" + + #, fuzzy + #~ msgid "Invalid token with FORMAT run-time expression at %0 -- use the traditional operators .LT., .LE., .GT., .GE., .EQ., and .NE. in place of the newer tokens <, <=, >, >=, ==, and !=, because > ends an expression within a FORMAT statement" + #~ msgstr "%0 daki FORMAT çalışma anı ifadesinde dizgecik geçersiz -- FORMAT deyimi içindeki ifadeler > ile bittiÄŸinden <, <=, >, >=, ==, ve != dizgecikleri yerine geleneksel .LT., .LE., .GT., .GE., .EQ., ve .NE. iÅŸlemimlerini kullanın." + + #~ msgid "Invalid token with FORMAT run-time expression at %0" + #~ msgstr "%0 daki FORMAT çalışma anı ifadesinde dizgecik geçersiz" + + #, fuzzy + #~ msgid "Defined operator at %0 contains a nonletter -- must contain only letters A-Z (or a-z)" + #~ msgstr "%0 da tanımlı iÅŸlemimindeki karakter bir harf deÄŸil -- sadece A-Z ya da a-z aralığındaki karakterler kullanılabilir" + + #~ msgid "Nonletter in defined operator at %0" + #~ msgstr "%0 da tanımlı iÅŸlemimindeki karakter bir harf deÄŸil" + + #, fuzzy + #~ msgid "Invalid type-declaration attribute at %0 -- must be one of: DIMENSION(array-spec), EXTERNAL, INTRINSIC, PARAMETER, or SAVE" + #~ msgstr "%0 daki tür bildirim özniteliÄŸi geçersiz -- bunlardan biri olmalı: DIMENSION(dizi-özl), EXTERNAL, INTRINSIC, PARAMETER, ya da SAVE" + + #~ msgid "Invalid type-declaration attribute at %0" + #~ msgstr "%0 daki tür bildirim özniteliÄŸi geçersiz" + + #~ msgid "Unrecognized value for character constant at %0 -- expecting %A" + #~ msgstr "%0 da karakter sabitinin deÄŸeri tanınmıyor -- %A umuluyor" + + #~ msgid "Unrecognized value for character constant at %0" + #~ msgstr "%0 daki karakter sabitinin deÄŸeri anlaşılamadı" + + #~ msgid "Range specification at %0 invalid -- at least one expression must be specified, or use CASE DEFAULT" + #~ msgstr "%0 daki kapsam özellikleri geçersiz - en azından bir ifade belirtilmiÅŸ olmalı ya da CASE DEFAULT kullanın" + + #~ msgid "Range specification at %0 invalid" + #~ msgstr "%0 daki kapsam özellikleri geçersiz" + + #, fuzzy + #~ msgid "Range specification at %0 useless; first expression greater than second expression in range, so range can never be matched by any selection expression" + #~ msgstr "%0 da aralık özelliÄŸi kullanışsız; aralık içindeki ilk ifade ikincisinden büyük, öyle ki aralık hiçbir zaman herhangi bir seçim ifadesi tarafından eÅŸleÅŸtirilemez" + + #~ msgid "Useless range at %0" + #~ msgstr "%0 a kullanışsız aralık" + + #~ msgid "Invalid kind at %0 for type at %1 -- unsupported or not permitted" + #~ msgstr "%1 deki tür için %0 daki çeÅŸit geçersiz -- desteklenmiyor ya da izin verilmedi" + + #~ msgid "Invalid kind at %0 for type at %1" + #~ msgstr "%1 deki tür için %0 daki kullanımı geçersiz" + + #~ msgid "Cannot establish implicit type for initial letter `%A' at %0 -- already explicitly established or used to set implicit type of some name, or backwards order of letters in letter range" + #~ msgstr "%0 da ilk harf `%A' için dolaylı tür saÄŸlanamıyor -- zaten doÄŸrudan saÄŸlanmış veya bir dolaylı tür ismi belirtmede kullanılmış ya da harf aralığı içindeki harfler ters sırada" + + #~ msgid "Cannot establish implicit type for initial letter `%A' at %0" + #~ msgstr "%0 da ilk harf `%A' için dolaylı tür saÄŸlanamıyor" + + #~ msgid "Label definition %A (at %0) invalid -- must be in columns 1-5" + #~ msgstr "Etiket tanımı %A (%0 da) geçersiz -- 1-5 sütunlarında olmalı" + + #~ msgid "Invalid label definition %A (at %0)" + #~ msgstr "Etiket tanımı %A (%0 da) geçersiz" + + #~ msgid "Run-time expression at %0 in FORMAT statement that does not follow the first executable statement in the program unit -- move the statement" + #~ msgstr "FORMAT deyiminde %0 daki çalışma-anı ifadesi program birimi olarak ilk çalıştırılabilir deyimden sonra deÄŸil -- deyimin yerini deÄŸiÅŸtirin" + + #~ msgid "FORMAT at %0 with run-time expression must follow first executable statement" + #~ msgstr "%0 daki çalışma-anı ifadeli BİÇEM ilk çalıştırılabilir deyimden sonra gelmeli" + + #~ msgid "Unexpected token at %0 in implied-DO construct at %1 -- form of implied-DO is `(item-list,do-var=start,end[,incr])'" + #~ msgstr "%1 deki dolaylı DO yapısındaki %0 da umulmayan dizgecik -- dolaylı DO'nun biçimi `(öğe-listesi,do-deÄŸiÅŸkeni=baÅŸlangıç,son[,artış])'" + + #~ msgid "Unexpected token at %0 in implied-DO construct at %1" + #~ msgstr "%1 deki dolaylı DO yapısındaki %0 da umulmayan dizgecik" + + #~ msgid "Boolean/logical operator at %0 must operate on two subexpressions of logical type, but neither subexpression at %1 or %2 is of logical type" + #~ msgstr "%0 daki iki terimli/mantıksal iÅŸlemimi mantıksal türdeki iki alt ifade üstünde çalışmalı, ama ne %1 deki ne de %2 deki alt ifade mantıksal türde deÄŸil" + + #~ msgid "Invalid operands at %1 and %2 for boolean operator at %0" + #~ msgstr "%0 daki iki terimlinin %1 ve %2 deki terimleri geçersiz" + + #~ msgid "Boolean/logical operator at %0 must operate on two subexpressions of logical type, but the subexpression at %1 is not of logical type" + #~ msgstr "%0 daki iki terimli/mantıksal iÅŸlemimi mantıksal türdeki iki alt ifade üstünde çalışmalı, ama %1 deki alt ifade mantıksal türde deÄŸil" + + #~ msgid "Invalid operand at %1 for boolean operator at %0" + #~ msgstr "%0 daki mantıksal ifadenin %1 terimi geçersiz" + + #~ msgid "Boolean/logical operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning logical scalars, or a combination of both -- but the subexpression at %1 is %A" + #~ msgstr "%0 daki iki terimli/mantıksal iÅŸlemimi iki skalar alt ifade üstünde çalışmalı, iki iÅŸlev çaÄŸrısı mantıksal skalarları ya da her ikisinin birleÅŸimini döndürüyor -- ama %1 deki alt ifade %A" + + #~ msgid "Invalid operand (is %A) at %1 for boolean operator at %0" + #~ msgstr "%0 daki mantıksal ifadenin %1 terimi (%A) geçersiz" + + #~ msgid ".NOT. operator at %0 must operate on subexpression of logical type, but the subexpression at %1 is not of logical type" + #~ msgstr "%0 daki .NOT. iÅŸlemimi mantıksal türdeki alt ifade üstünde çalışmalı, ama %1 deki alt ifade mantıksal türde deÄŸil" + + #~ msgid "Invalid operand at %1 for .NOT. operator at %0" + #~ msgstr "%0 daki .NOT. iÅŸlemimi için %1 deki terim geçersiz" + + #~ msgid ".NOT. operator at %0 must operate on scalar subexpressions -- but the subexpression at %1 is %A" + #~ msgstr "%0 daki .NOT. iÅŸlemimi scalar alt ifadeler üstünde çalışmalı -- ama %1 deki alt ifade %A" + + #~ msgid "Invalid operand (is %A) at %1 for .NOT. operator at %0" + #~ msgstr "%0 daki .NOT. iÅŸlemimi için %1 deki terim (%A) geçersiz" + + #~ msgid "Equality operator at %0 must operate on two subexpressions of arithmetic or character type, but neither subexpression at %1 or %2 is of arithmetic or character type" + #~ msgstr "%0 daki eÅŸitlik iÅŸlemimi aritmetik veya karakter türünde iki alt ifade üstünde çalışmalı, ama ne %1 deki ne de %2 deki alt ifade aritmetik veya karakter türünde deÄŸil" + + #~ msgid "Invalid operands at %1 and %2 for equality operator at %0" + #~ msgstr "%0 daki eÅŸitlik iÅŸlemimi için %1 ve %2 deki terimler geçersiz" + + #~ msgid "Equality operator at %0 must operate on two subexpressions of arithmetic or character type, but the subexpression at %1 is not of arithmetic or character type" + #~ msgstr "%0 daki eÅŸitlik iÅŸlemimi aritmetik veya karakter türünde iki alt ifade üstünde çalışmalı, ama %1 deki alt ifade aritmetik veya karakter türünde deÄŸil" + + #~ msgid "Invalid operand at %1 for equality operator at %0" + #~ msgstr "%0 daki eÅŸitlik iÅŸlemimi için %1 deki terim geçersiz" + + #~ msgid "Equality operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning arithmetic or character scalars, or a combination of both -- but the subexpression at %1 is %A" + #~ msgstr "%0 daki eÅŸitlik iÅŸlemimi iki scalar (dizi deÄŸil) alt ifade üstünde çalışmalı, iki iÅŸlev çaÄŸrısı aritmetik veya karakter skalarları ya da her ikisinin birleÅŸimini döndürüyor -- ama %1 deki alt ifade %A" + + #~ msgid "Invalid operand (is %A) at %1 for equality operator at %0" + #~ msgstr "%0 daki eÅŸitlik iÅŸlemimi için %1 deki terim (%A) geçersiz" + + #~ msgid "Relational operator at %0 must operate on two subexpressions of integer, real, or character type, but neither subexpression at %1 or %2 is of integer, real, or character type" + #~ msgstr "%0 daki iliÅŸkisel iÅŸlemimi tamsayı, gerçel sayı veya karakter türünde iki alt ifade üstünde çalışmalı, ama ne %1 deki ne de %2 deki alt ifade tamsayı, gerçel sayı veya karakter türünde deÄŸil" + + #~ msgid "Invalid operands at %1 and %2 for relational operator at %0" + #~ msgstr "%0 daki iliÅŸkisel iÅŸlemimi için %1 ve %2 deki terimler geçersiz" + + #~ msgid "Relational operator at %0 must operate on two subexpressions of integer, real, or character type, but the subexpression at %1 is not of integer, real, or character type" + #~ msgstr "%0 daki iliÅŸkisel iÅŸlemimi tamsayı, gerçel sayı veya karakter türünde iki alt ifade üstünde çalışmalı, ama %1 deki alt ifade tamsayı, gerçel sayı veya karakter türünde deÄŸil" + + #~ msgid "Invalid operand at %1 for relational operator at %0" + #~ msgstr "%0 daki iliÅŸkisel ifadenin %1 terimi geçersiz" + + #~ msgid "Relational operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning integer, real, or character scalars, or a combination of both -- but the subexpression at %1 is %A" + #~ msgstr "%0 daki iliÅŸkisel iÅŸlemimi iki scalar (dizi deÄŸil) alt ifade üstünde çalışmalı, iki iÅŸlev çaÄŸrısı tamsayı, gerçel sayı veya karakter skalarları ya da her ikisinin birleÅŸimini döndürüyor -- ama %1 deki alt ifade %A" + + #~ msgid "Invalid operand (is %A) at %1 for relational operator at %0" + #~ msgstr "%0 daki iliÅŸkisel iÅŸlemimi için %1 de geçersiz terim (%A)" + + #~ msgid "Reference to intrinsic `%A' at %0 invalid -- one or more arguments have incorrect type" + #~ msgstr "YerleÅŸik `%A' için referans %0 da geçersiz -- bir ya da daha fazla argüman yanlış türde" + + #~ msgid "Invalid reference to intrinsic `%A' at %0" + #~ msgstr "YerleÅŸik `%A' için referans %0 da geçersiz" + + #~ msgid "Too few arguments passed to intrinsic `%A' at %0" + #~ msgstr "YerleÅŸik `%A' için %0 da çok az argüman belirtilmiÅŸ" + + #~ msgid "Too few arguments for intrinsic `%A' at %0" + #~ msgstr "YerleÅŸik `%A' için %0 da çok az argüman var" + + #~ msgid "Too many arguments passed to intrinsic `%A' at %0" + #~ msgstr "YerleÅŸik `%A' için %0 da çok fazla argüman aktarıldı" + + #~ msgid "Too many arguments for intrinsic `%A' at %0" + #~ msgstr "YerleÅŸik `%A' için %0 da çok fazla argüman" + + #~ msgid "Reference to disabled intrinsic `%A' at %0" + #~ msgstr "%0 da iptal edilen yerleÅŸik `%A' ya referans" + + #~ msgid "Disabled intrinsic `%A' at %0" + #~ msgstr "YerleÅŸik `%A' %0 da iptal edildi" + + #~ msgid "Reference to intrinsic subroutine `%A' as if it were a function at %0" + #~ msgstr "Onun %0 da bir iÅŸlev olduÄŸuna göre yerleÅŸik alt iÅŸlev `%A' ya referans" + + #~ msgid "Function reference to intrinsic subroutine `%A' at %0" + #~ msgstr "%0 da yerleÅŸik alt iÅŸlev `%A' ya iÅŸlev referansı" + + #~ msgid "Reference to intrinsic function `%A' as if it were a subroutine at %0" + #~ msgstr "Onun %0 da bir alt iÅŸlev olduÄŸuna göre yerleÅŸik iÅŸlev `%A' ya referans" + + #~ msgid "Subroutine reference to intrinsic function `%A' at %0" + #~ msgstr "%0 da yerleÅŸik iÅŸlev `%A' ya alt iÅŸlev referansı" + + #~ msgid "Reference to unimplemented intrinsic `%A' at %0 -- use EXTERNAL to reference user-written procedure with this name" + #~ msgstr "%0 da henüz yazılmamış yerleÅŸik `%A' için referans -- bu isimle yazacağınız bir iÅŸlev referansına EXTERNAL kullanın" + + #~ msgid "Unimplemented intrinsic `%A' at %0" + #~ msgstr "%0 da henüz yazılmamış yerleÅŸik `%A'" + + #~ msgid "Reference to unimplemented intrinsic `%A' at %0 (assumed EXTERNAL)" + #~ msgstr "%0 da henüz yazılmamış yerleÅŸik `%A' için referans (EXTERNAL varsayıldı)" + + #~ msgid "Unimplemented intrinsic `%A' at %0 (assumed EXTERNAL)" + #~ msgstr "%0 da henüz yazılmamış yerleÅŸik `%A' (EXTERNAL varsayıldı)" + + #~ msgid "Attempt to modify variable `%A' at %0 while it serves as DO-loop iterator at %1" + #~ msgstr "%1 de DO döngü yineleyicisi olarak çalışan deÄŸiÅŸken `%A' %0 da deÄŸiÅŸtirilmeye çalışılyor" + + #~ msgid "Modification of DO-loop iterator `%A' at %0" + #~ msgstr "%0 da DO döngüsü yineleyicisi `%A' nın deÄŸiÅŸtirilmesi" + + #~ msgid "Attempt to modify variable `%A' via item #%B in list at %0 while it serves as implied-DO iterator at %1" + #~ msgstr "%1 de dolaylı DO yineleyici olarak çalışan liste öğesi #%B üzerinden %0 da deÄŸiÅŸken `%A' deÄŸiÅŸtirilmeye çalışılıyor" + + #~ msgid "Array has too many dimensions, as of dimension specifier at %0" + #~ msgstr "%0 da belirtilen boyutlarla dizi boyutları çok fazla" + + #~ msgid "Too many dimensions at %0" + #~ msgstr "%0 da indisler çok fazla" + + #~ msgid "Unsupported OPEN control item at %0 -- ACTION=, ASSOCIATEVARIABLE=, BLOCKSIZE=, BUFFERCOUNT=, CARRIAGECONTROL=, DEFAULTFILE=, DELIM=, DISPOSE=, EXTENDSIZE=, INITIALSIZE=, KEY=, MAXREC=, NOSPANBLOCKS, ORGANIZATION=, PAD=, POSITION=, READONLY=, RECORDTYPE=, SHARED=, and USEROPEN= are not supported" + #~ msgstr "%0 da desteklenmeyen OPEN denetim öğesi -- ACTION=, ASSOCIATEVARIABLE=, BLOCKSIZE=, BUFFERCOUNT=, CARRIAGECONTROL=, DEFAULTFILE=, DELIM=, DISPOSE=, EXTENDSIZE=, INITIALSIZE=, KEY=, MAXREC=, NOSPANBLOCKS, ORGANIZATION=, PAD=, POSITION=, READONLY=, RECORDTYPE=, SHARED=, ve USEROPEN= desteklenmiyor" + + #~ msgid "Unsupported OPEN control item at %0" + #~ msgstr "%0 da desteklenmeyen OPEN denetim öğesi" + + #~ msgid "Unsupported INQUIRE control item at %0 -- ACTION=, CARRIAGECONTROL=, DEFAULTFILE=, DELIM=, KEYED=, ORGANIZATION=, PAD=, POSITION=, READ=, READWRITE=, RECORDTYPE=, and WRITE= are not supported" + #~ msgstr "%0 da desteklenmeyen INQUIRE denetim öğesi -- ACTION=, CARRIAGECONTROL=, DEFAULTFILE=, DELIM=, KEYED=, ORGANIZATION=, PAD=, POSITION=, READ=, READWRITE=, RECORDTYPE=, ve WRITE= desteklenmiyor" + + #~ msgid "Unsupported INQUIRE control item at %0" + #~ msgstr "%0 da desteklenmeyen INQUIRE denetim öğesi" + + #~ msgid "Unsupported READ control item at %0 -- ADVANCE=, EOR=, KEYEQ=, KEYGE=, KEYGT=, KEYID=, NULLS=, and SIZE= are not supported" + #~ msgstr "%0 da desteklenmeyen READ denetim öğesi -- ADVANCE=, EOR=, KEYEQ=, KEYGE=, KEYGT=, KEYID=, NULLS=, ve SIZE= desteklenmiyor" + + #~ msgid "Unsupported READ control item at %0" + #~ msgstr "%0 da desteklenmeyen READ denetim öğesi" + + #~ msgid "Unsupported WRITE control item at %0 -- ADVANCE= and EOR= are not supported" + #~ msgstr "%0 da desteklenmeyen WRITE denetim öğesi -- ADVANCE= ve EOR= desteklenmiyor" + + #~ msgid "Unsupported WRITE control item at %0" + #~ msgstr "%0 da desteklenmeyen WRITE denetim öğesi" + + #~ msgid "Padding of %A %D required before `%B' in common block `%C' at %0 -- consider reordering members, largest-type-size first" + #~ msgstr "%A %D adımlaması %0 daki ortak blok `%C' içindeki `%B' den önce gerekli -- üyelerin en geniÅŸ tür ilk olmak üzere yeniden sıralandığı varsayılıyor" + + #~ msgid "Padding of %A %D required before `%B' in common block `%C' at %0" + #~ msgstr "%A %D adımlaması %0 daki ortak blok `%C' içindeki `%B' den önce gerekli" + + #, fuzzy + #~ msgid "Invalid length specification at %0 for IMPLICIT statement -- must be integer constant expression" + #~ msgstr "IMPLICIT deyimi için %0 daki uzunluk özelliÄŸi geçersiz -- tamsayı sabit ifadesi olmalı" + + #~ msgid "Invalid length specification at %0" + #~ msgstr "%0 da uzunluk özelliÄŸi geçersiz" + + #~ msgid "Type of ENTRY point at %0 to function conflicts with type(s) of previous entrypoint(s) -- must all be identical-length CHARACTER or none be CHARACTER type" + #~ msgstr "İşlevin %0 daki giriÅŸ noktasının türü önceki giriÅŸ noktası/larındaki tür(ler) ile çeliÅŸiyor -- ya tümü aynı karakter uzunluÄŸunda olmalı yada hiçbiri karakter türünde olmamalı" + + #~ msgid "Type of ENTRY point at %0 to function conflicts with type(s) of previous entrypoint(s)" + #~ msgstr "İşlevin %0 daki giriÅŸ noktasının türü önceki giriÅŸ noktası/larındaki tür(ler) ile çeliÅŸiyor" + + #~ msgid "Common block `%A' initialized at %0 already initialized at %1 -- only one program unit may specify initial values for a particular common block" + #~ msgstr "%0 da ilklendirilen ortak blok `%A' zaten %1 de ilklendirilmiÅŸ -- belli bir ortak blok için sadece bir program birimi ilk deÄŸer olarak belirtilebilir" + + #~ msgid "Common block `%A' initialized at %0 already initialized at %1" + #~ msgstr "%0 da ilklendirilen ortak blok `%A' zaten %1 de ilklendirilmiÅŸ" + + #~ msgid "Initial padding for common block `%A' is %B %C at %0 -- consider reordering members, largest-type-size first" + #~ msgstr "Ortak blok `%A' için ilk adımlama %0 de %B %C -- üyelerin en geniÅŸ tür ilk olmak üzere yeniden sıralandığı varsayılıyor" + + #~ msgid "Initial padding for common block `%A' is %B %C at %0" + #~ msgstr "Ortak blok `%A' için ilk adımlama %0 de %B %C" + + #~ msgid "Initial padding for common block `%A' is %B %D at %0 but %C %E at %1 -- consider reordering members, largest-type-size first" + #~ msgstr "Ortak blok `%A' için ilk adımlama %0 de %B %D iken %1 de %C %E -- üyelerin en geniÅŸ tür ilk olmak üzere yeniden sıralandığı varsayılıyor" + + #~ msgid "Initial padding for common block `%A' is %B %D at %0 but %C %E at %1" + #~ msgstr "Ortak blok `%A' için ilk adımlama %0 de %B %D iken %1 de %C %E" + + #~ msgid "Common block `%A' is initialized to %B %D long at %0 but enlarged to %C %E at %1 -- use consistent definitions or reorder program units in source file" + #~ msgstr "Ortak blok `%A' %0 da %B %D uzunlukta ilklendirilmiÅŸken %1 de %C %E olarak geniÅŸletildi -- ya kaynak dosyadaki program birimlerini yeniden sıralayın ya da tutarlı tanımlamalar kullanın" + + #~ msgid "Common block `%A' is initialized to %B %D long at %0 but enlarged to %C %E at %1" + #~ msgstr "Ortak blok `%A' %0 da %B %D uzunlukta ilklendirilmiÅŸken %1 de %C %E olarak geniÅŸletildi" + + #~ msgid "DO-variable `%A' is type REAL or DOUBLE PRECISION at %0 -- unexpected behavior likely" + #~ msgstr "%0 daki DO deÄŸiÅŸkeni `%A' REAL ya da DOUBLE PRECISION türde -- böyle bir davranış beklenmiyordu" + + #~ msgid "DO-variable `%A' is type REAL or DOUBLE PRECISION at %0" + #~ msgstr "%0 daki DO deÄŸiÅŸkeni `%A' REAL ya da DOUBLE PRECISION türde" + + #~ msgid "Invalid actual argument at %0 -- replace hollerith constants with %%REF('string') and typeless constants with INTEGER constant equivalents, or use -fugly-args or -fugly" + #~ msgstr "%0 daki argüman geçersiz -- hollerith sabitleri %%REF('dizge') ve TAMSAYI sabit eÅŸdeÄŸeri türsüz sabitlerle deÄŸiÅŸtirin veya -fugly-args ya da -fugly seçeneklerinden birini kullanın" + + #~ msgid "Invalid actual argument at %0" + #~ msgstr "%0 daki mevcut argüman geçersiz" + + #~ msgid "Quadruple-precision floating-point unsupported -- treating constant at %0 as double-precision" + #~ msgstr "Dört kat duyarlıklı gerçel sayılar desteklenmiyor -- %0 daki sabit çift duyarlıklı olarak iÅŸleniyor" + + #~ msgid "Quadruple-precision floating-point unsupported" + #~ msgstr "Dört kat duyarlıklı gerçel sayılar desteklenmiyor" + + #~ msgid "Initialization of large (%B-unit) aggregate area `%A' at %0 currently very slow and takes lots of memory during g77 compile -- to be improved in 0.6" + #~ msgstr "%0 daki büyük (%B birimlik) kümeleÅŸme alanı `%A' ÅŸu an çok yavaÅŸ ve g77 derlemesi sırasında epey bellek harcıyor -- 0.6 da iyileÅŸtirilecek" + + #~ msgid "This could take a while (initializing `%A' at %0)..." + #~ msgstr "Bu bir while almalıydı (`%A' %0 da ilklendiriliyor)..." + + #~ msgid "can't to open %s" + #~ msgstr "%s açılamıyor" + + #~ msgid "Set class path and suppress system path" + #~ msgstr "Sistem dosya yolu yerine sınıf dosya yolu ayarlanır" + + #~ msgid "a -ifile option requires a -map option" + #~ msgstr "bir -ifile seçeneÄŸi bir -map seçeneÄŸi gerektirir" diff -Nrc3pad gcc-3.0.4/gcc/predict.c gcc-3.1/gcc/predict.c *** gcc-3.0.4/gcc/predict.c Fri Jun 22 22:07:42 2001 --- gcc-3.1/gcc/predict.c Thu Apr 4 21:37:47 2002 *************** *** 1,22 **** /* Branch prediction routines for the GNU compiler. ! Copyright (C) 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. ! You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* References: --- 1,22 ---- /* Branch prediction routines for the GNU compiler. ! Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. ! You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* References: *************** *** 25,33 **** [2] "Static Branch Frequency and Program Profile Analysis" Wu and Larus; MICRO-27. [3] "Corpus-based Static Branch Prediction" ! Calder, Grunwald, Lindsay, Martin, Mozer, and Zorn; PLDI '95. ! ! */ #include "config.h" --- 25,31 ---- [2] "Static Branch Frequency and Program Profile Analysis" Wu and Larus; MICRO-27. [3] "Corpus-based Static Branch Prediction" ! Calder, Grunwald, Lindsay, Martin, Mozer, and Zorn; PLDI '95. */ #include "config.h" *************** *** 46,52 **** #include "toplev.h" #include "recog.h" #include "expr.h" ! /* Random guesstimation given names. */ #define PROB_NEVER (0) --- 44,50 ---- #include "toplev.h" #include "recog.h" #include "expr.h" ! #include "predict.h" /* Random guesstimation given names. */ #define PROB_NEVER (0) *************** *** 57,62 **** --- 55,317 ---- #define PROB_VERY_LIKELY (REG_BR_PROB_BASE - PROB_VERY_UNLIKELY) #define PROB_ALWAYS (REG_BR_PROB_BASE) + static void combine_predictions_for_insn PARAMS ((rtx, basic_block)); + static void dump_prediction PARAMS ((enum br_predictor, int, + basic_block, int)); + static void estimate_loops_at_level PARAMS ((struct loop *loop)); + static void propagate_freq PARAMS ((basic_block)); + static void estimate_bb_frequencies PARAMS ((struct loops *)); + static void counts_to_freqs PARAMS ((void)); + + /* Information we hold about each branch predictor. + Filled using information from predict.def. */ + + struct predictor_info + { + const char *const name; /* Name used in the debugging dumps. */ + const int hitrate; /* Expected hitrate used by + predict_insn_def call. */ + const int flags; + }; + + /* Use given predictor without Dempster-Shaffer theory if it matches + using first_match heuristics. */ + #define PRED_FLAG_FIRST_MATCH 1 + + /* Recompute hitrate in percent to our representation. */ + + #define HITRATE(VAL) ((int) ((VAL) * REG_BR_PROB_BASE + 50) / 100) + + #define DEF_PREDICTOR(ENUM, NAME, HITRATE, FLAGS) {NAME, HITRATE, FLAGS}, + static const struct predictor_info predictor_info[]= { + #include "predict.def" + + /* Upper bound on predictors. */ + {NULL, 0, 0} + }; + #undef DEF_PREDICTOR + + void + predict_insn (insn, predictor, probability) + rtx insn; + int probability; + enum br_predictor predictor; + { + if (!any_condjump_p (insn)) + abort (); + + REG_NOTES (insn) + = gen_rtx_EXPR_LIST (REG_BR_PRED, + gen_rtx_CONCAT (VOIDmode, + GEN_INT ((int) predictor), + GEN_INT ((int) probability)), + REG_NOTES (insn)); + } + + /* Predict insn by given predictor. */ + + void + predict_insn_def (insn, predictor, taken) + rtx insn; + enum br_predictor predictor; + enum prediction taken; + { + int probability = predictor_info[(int) predictor].hitrate; + + if (taken != TAKEN) + probability = REG_BR_PROB_BASE - probability; + + predict_insn (insn, predictor, probability); + } + + /* Predict edge E with given probability if possible. */ + + void + predict_edge (e, predictor, probability) + edge e; + int probability; + enum br_predictor predictor; + { + rtx last_insn; + last_insn = e->src->end; + + /* We can store the branch prediction information only about + conditional jumps. */ + if (!any_condjump_p (last_insn)) + return; + + /* We always store probability of branching. */ + if (e->flags & EDGE_FALLTHRU) + probability = REG_BR_PROB_BASE - probability; + + predict_insn (last_insn, predictor, probability); + } + + /* Predict edge E by given predictor if possible. */ + + void + predict_edge_def (e, predictor, taken) + edge e; + enum br_predictor predictor; + enum prediction taken; + { + int probability = predictor_info[(int) predictor].hitrate; + + if (taken != TAKEN) + probability = REG_BR_PROB_BASE - probability; + + predict_edge (e, predictor, probability); + } + + /* Invert all branch predictions or probability notes in the INSN. This needs + to be done each time we invert the condition used by the jump. */ + + void + invert_br_probabilities (insn) + rtx insn; + { + rtx note; + + for (note = REG_NOTES (insn); note; note = XEXP (note, 1)) + if (REG_NOTE_KIND (note) == REG_BR_PROB) + XEXP (note, 0) = GEN_INT (REG_BR_PROB_BASE - INTVAL (XEXP (note, 0))); + else if (REG_NOTE_KIND (note) == REG_BR_PRED) + XEXP (XEXP (note, 0), 1) + = GEN_INT (REG_BR_PROB_BASE - INTVAL (XEXP (XEXP (note, 0), 1))); + } + + /* Dump information about the branch prediction to the output file. */ + + static void + dump_prediction (predictor, probability, bb, used) + enum br_predictor predictor; + int probability; + basic_block bb; + int used; + { + edge e = bb->succ; + + if (!rtl_dump_file) + return; + + while (e->flags & EDGE_FALLTHRU) + e = e->succ_next; + + fprintf (rtl_dump_file, " %s heuristics%s: %.1f%%", + predictor_info[predictor].name, + used ? "" : " (ignored)", probability * 100.0 / REG_BR_PROB_BASE); + + if (bb->count) + { + fprintf (rtl_dump_file, " exec "); + fprintf (rtl_dump_file, HOST_WIDEST_INT_PRINT_DEC, bb->count); + fprintf (rtl_dump_file, " hit "); + fprintf (rtl_dump_file, HOST_WIDEST_INT_PRINT_DEC, e->count); + fprintf (rtl_dump_file, " (%.1f%%)", e->count * 100.0 / bb->count); + } + + fprintf (rtl_dump_file, "\n"); + } + + /* Combine all REG_BR_PRED notes into single probability and attach REG_BR_PROB + note if not already present. Remove now useless REG_BR_PRED notes. */ + + static void + combine_predictions_for_insn (insn, bb) + rtx insn; + basic_block bb; + { + rtx prob_note = find_reg_note (insn, REG_BR_PROB, 0); + rtx *pnote = ®_NOTES (insn); + rtx note; + int best_probability = PROB_EVEN; + int best_predictor = END_PREDICTORS; + int combined_probability = REG_BR_PROB_BASE / 2; + int d; + bool first_match = false; + bool found = false; + + if (rtl_dump_file) + fprintf (rtl_dump_file, "Predictions for insn %i bb %i\n", INSN_UID (insn), + bb->index); + + /* We implement "first match" heuristics and use probability guessed + by predictor with smallest index. In the future we will use better + probability combination techniques. */ + for (note = REG_NOTES (insn); note; note = XEXP (note, 1)) + if (REG_NOTE_KIND (note) == REG_BR_PRED) + { + int predictor = INTVAL (XEXP (XEXP (note, 0), 0)); + int probability = INTVAL (XEXP (XEXP (note, 0), 1)); + + found = true; + if (best_predictor > predictor) + best_probability = probability, best_predictor = predictor; + + d = (combined_probability * probability + + (REG_BR_PROB_BASE - combined_probability) + * (REG_BR_PROB_BASE - probability)); + + /* Use FP math to avoid overflows of 32bit integers. */ + if (d == 0) + /* If one probability is 0% and one 100%, avoid division by zero. */ + combined_probability = REG_BR_PROB_BASE / 2; + else + combined_probability = (((double) combined_probability) * probability + * REG_BR_PROB_BASE / d + 0.5); + } + + /* Decide which heuristic to use. In case we didn't match anything, + use no_prediction heuristic, in case we did match, use either + first match or Dempster-Shaffer theory depending on the flags. */ + + if (predictor_info [best_predictor].flags & PRED_FLAG_FIRST_MATCH) + first_match = true; + + if (!found) + dump_prediction (PRED_NO_PREDICTION, combined_probability, bb, true); + else + { + dump_prediction (PRED_DS_THEORY, combined_probability, bb, !first_match); + dump_prediction (PRED_FIRST_MATCH, best_probability, bb, first_match); + } + + if (first_match) + combined_probability = best_probability; + dump_prediction (PRED_COMBINED, combined_probability, bb, true); + + while (*pnote) + { + if (REG_NOTE_KIND (*pnote) == REG_BR_PRED) + { + int predictor = INTVAL (XEXP (XEXP (*pnote, 0), 0)); + int probability = INTVAL (XEXP (XEXP (*pnote, 0), 1)); + + dump_prediction (predictor, probability, bb, + !first_match || best_predictor == predictor); + *pnote = XEXP (*pnote, 1); + } + else + pnote = &XEXP (*pnote, 1); + } + + if (!prob_note) + { + REG_NOTES (insn) + = gen_rtx_EXPR_LIST (REG_BR_PROB, + GEN_INT (combined_probability), REG_NOTES (insn)); + + /* Save the prediction into CFG in case we are seeing non-degenerated + conditional jump. */ + if (bb->succ->succ_next) + { + BRANCH_EDGE (bb)->probability = combined_probability; + FALLTHRU_EDGE (bb)->probability + = REG_BR_PROB_BASE - combined_probability; + } + } + } + /* Statically estimate the probability that a branch will be taken. ??? In the next revision there will be a number of other predictors added from the above references. Further, each heuristic will be factored out *************** void *** 67,236 **** estimate_probability (loops_info) struct loops *loops_info; { int i; /* Try to predict out blocks in a loop that are not part of a natural loop. */ for (i = 0; i < loops_info->num; i++) { int j; ! for (j = loops_info->array[i].first->index; ! j <= loops_info->array[i].last->index; ! ++j) ! { ! edge e; ! ! if (! TEST_BIT (loops_info->array[i].nodes, j)) ! for (e = BASIC_BLOCK(j)->pred; e; e = e->pred_next) ! if (TEST_BIT (loops_info->array[i].nodes, e->src->index)) ! { ! rtx last_insn = BLOCK_END (e->src->index); ! rtx cond, earliest; ! if (GET_CODE (last_insn) != JUMP_INSN ! || ! condjump_p (last_insn) || simplejump_p (last_insn)) ! continue; ! cond = get_condition (last_insn, &earliest); ! if (! cond) ! continue; ! if (! find_reg_note (last_insn, REG_BR_PROB, 0)) ! REG_NOTES (last_insn) ! = gen_rtx_EXPR_LIST (REG_BR_PROB, ! GEN_INT (PROB_VERY_LIKELY), ! REG_NOTES (last_insn)); } ! } } ! /* Attempt to predict conditional jumps using a number of heuristics. ! For each conditional jump, we try each heuristic in a fixed order. ! If more than one heuristic applies to a particular branch, the first ! is used as the prediction for the branch. */ ! for (i = 0; i < n_basic_blocks - 1; i++) { ! rtx last_insn = BLOCK_END (i); rtx cond, earliest; - int prob; edge e; ! if (GET_CODE (last_insn) != JUMP_INSN ! || ! condjump_p (last_insn) || simplejump_p (last_insn)) ! continue; ! if (find_reg_note (last_insn, REG_BR_PROB, 0)) continue; cond = get_condition (last_insn, &earliest); if (! cond) continue; - /* If one of the successor blocks has no successors, predict - that side not taken. */ - /* ??? Ought to do the same for any subgraph with no exit. */ - for (e = BASIC_BLOCK (i)->succ; e; e = e->succ_next) - if (e->dest->succ == NULL) - { - if (e->flags & EDGE_FALLTHRU) - prob = PROB_ALWAYS; - else - prob = PROB_NEVER; - goto emitnote; - } - /* Try "pointer heuristic." A comparison ptr == 0 is predicted as false. Similarly, a comparison ptr1 == ptr2 is predicted as false. */ ! switch (GET_CODE (cond)) { ! case EQ: ! if (GET_CODE (XEXP (cond, 0)) == REG ! && REG_POINTER (XEXP (cond, 0)) ! && (XEXP (cond, 1) == const0_rtx ! || (GET_CODE (XEXP (cond, 1)) == REG ! && REG_POINTER (XEXP (cond, 1))))) ! { ! prob = PROB_UNLIKELY; ! goto emitnote; ! } ! break; ! case NE: ! if (GET_CODE (XEXP (cond, 0)) == REG ! && REG_POINTER (XEXP (cond, 0)) ! && (XEXP (cond, 1) == const0_rtx ! || (GET_CODE (XEXP (cond, 1)) == REG ! && REG_POINTER (XEXP (cond, 1))))) ! { ! prob = PROB_LIKELY; ! goto emitnote; ! } ! break; ! ! default: ! break; } /* Try "opcode heuristic." EQ tests are usually false and NE tests are usually true. Also, most quantities are positive, so we can make the appropriate guesses about signed comparisons against zero. */ ! switch (GET_CODE (cond)) ! { ! case CONST_INT: ! /* Unconditional branch. */ ! prob = (cond == const0_rtx ? PROB_NEVER : PROB_ALWAYS); ! goto emitnote; ! case EQ: ! case UNEQ: ! prob = PROB_UNLIKELY; ! goto emitnote; ! case NE: ! case LTGT: ! prob = PROB_LIKELY; ! goto emitnote; ! case ORDERED: ! prob = PROB_LIKELY; ! goto emitnote; ! case UNORDERED: ! prob = PROB_UNLIKELY; ! goto emitnote; ! case LE: ! case LT: ! if (XEXP (cond, 1) == const0_rtx) ! { ! prob = PROB_UNLIKELY; ! goto emitnote; ! } ! break; ! case GE: ! case GT: ! if (XEXP (cond, 1) == const0_rtx ! || (GET_CODE (XEXP (cond, 1)) == CONST_INT ! && INTVAL (XEXP (cond, 1)) == -1)) ! { ! prob = PROB_LIKELY; ! goto emitnote; ! } ! break; ! default: ! break; ! } ! /* If we havn't chosen something by now, predict 50-50. */ ! prob = PROB_EVEN; ! emitnote: ! REG_NOTES (last_insn) ! = gen_rtx_EXPR_LIST (REG_BR_PROB, GEN_INT (prob), ! REG_NOTES (last_insn)); } } ! /* __builtin_expect dropped tokens into the insn stream describing ! expected values of registers. Generate branch probabilities ! based off these values. */ void expected_value_to_br_prob () --- 322,546 ---- estimate_probability (loops_info) struct loops *loops_info; { + sbitmap *dominators, *post_dominators; int i; + int found_noreturn = 0; + + dominators = sbitmap_vector_alloc (n_basic_blocks, n_basic_blocks); + post_dominators = sbitmap_vector_alloc (n_basic_blocks, n_basic_blocks); + calculate_dominance_info (NULL, dominators, CDI_DOMINATORS); + calculate_dominance_info (NULL, post_dominators, CDI_POST_DOMINATORS); /* Try to predict out blocks in a loop that are not part of a natural loop. */ for (i = 0; i < loops_info->num; i++) { int j; + int exits; + struct loop *loop = &loops_info->array[i]; ! flow_loop_scan (loops_info, loop, LOOP_EXIT_EDGES); ! exits = loop->num_exits; ! for (j = loop->first->index; j <= loop->last->index; ++j) ! if (TEST_BIT (loop->nodes, j)) ! { ! int header_found = 0; ! edge e; ! ! /* Loop branch heuristics - predict an edge back to a ! loop's head as taken. */ ! for (e = BASIC_BLOCK(j)->succ; e; e = e->succ_next) ! if (e->dest == loop->header ! && e->src == loop->latch) ! { ! header_found = 1; ! predict_edge_def (e, PRED_LOOP_BRANCH, TAKEN); } ! ! /* Loop exit heuristics - predict an edge exiting the loop if the ! conditinal has no loop header successors as not taken. */ ! if (!header_found) ! for (e = BASIC_BLOCK(j)->succ; e; e = e->succ_next) ! if (e->dest->index < 0 ! || !TEST_BIT (loop->nodes, e->dest->index)) ! predict_edge ! (e, PRED_LOOP_EXIT, ! (REG_BR_PROB_BASE ! - predictor_info [(int) PRED_LOOP_EXIT].hitrate) ! / exits); ! } } ! /* Attempt to predict conditional jumps using a number of heuristics. */ ! for (i = 0; i < n_basic_blocks; i++) { ! basic_block bb = BASIC_BLOCK (i); ! rtx last_insn = bb->end; rtx cond, earliest; edge e; ! /* If block has no successor, predict all possible paths to it as ! improbable, as the block contains a call to a noreturn function and ! thus can be executed only once. */ ! if (bb->succ == NULL && !found_noreturn) ! { ! int y; ! /* ??? Postdominator claims each noreturn block to be postdominated ! by each, so we need to run only once. This needs to be changed ! once postdominace algorithm is updated to say something more ! sane. */ ! found_noreturn = 1; ! for (y = 0; y < n_basic_blocks; y++) ! if (!TEST_BIT (post_dominators[y], i)) ! for (e = BASIC_BLOCK (y)->succ; e; e = e->succ_next) ! if (e->dest->index >= 0 ! && TEST_BIT (post_dominators[e->dest->index], i)) ! predict_edge_def (e, PRED_NORETURN, NOT_TAKEN); ! } ! ! if (GET_CODE (last_insn) != JUMP_INSN || ! any_condjump_p (last_insn)) continue; + for (e = bb->succ; e; e = e->succ_next) + { + /* Predict edges to blocks that return immediately to be + improbable. These are usually used to signal error states. */ + if (e->dest == EXIT_BLOCK_PTR + || (e->dest->succ && !e->dest->succ->succ_next + && e->dest->succ->dest == EXIT_BLOCK_PTR)) + predict_edge_def (e, PRED_ERROR_RETURN, NOT_TAKEN); + + /* Look for block we are guarding (ie we dominate it, + but it doesn't postdominate us). */ + if (e->dest != EXIT_BLOCK_PTR && e->dest != bb + && TEST_BIT (dominators[e->dest->index], e->src->index) + && !TEST_BIT (post_dominators[e->src->index], e->dest->index)) + { + rtx insn; + + /* The call heuristic claims that a guarded function call + is improbable. This is because such calls are often used + to signal exceptional situations such as printing error + messages. */ + for (insn = e->dest->head; insn != NEXT_INSN (e->dest->end); + insn = NEXT_INSN (insn)) + if (GET_CODE (insn) == CALL_INSN + /* Constant and pure calls are hardly used to signalize + something exceptional. */ + && ! CONST_OR_PURE_CALL_P (insn)) + { + predict_edge_def (e, PRED_CALL, NOT_TAKEN); + break; + } + } + } + cond = get_condition (last_insn, &earliest); if (! cond) continue; /* Try "pointer heuristic." A comparison ptr == 0 is predicted as false. Similarly, a comparison ptr1 == ptr2 is predicted as false. */ ! if (GET_RTX_CLASS (GET_CODE (cond)) == '<' ! && ((REG_P (XEXP (cond, 0)) && REG_POINTER (XEXP (cond, 0))) ! || (REG_P (XEXP (cond, 1)) && REG_POINTER (XEXP (cond, 1))))) { ! if (GET_CODE (cond) == EQ) ! predict_insn_def (last_insn, PRED_POINTER, NOT_TAKEN); ! else if (GET_CODE (cond) == NE) ! predict_insn_def (last_insn, PRED_POINTER, TAKEN); } + else /* Try "opcode heuristic." EQ tests are usually false and NE tests are usually true. Also, most quantities are positive, so we can make the appropriate guesses about signed comparisons against zero. */ ! switch (GET_CODE (cond)) ! { ! case CONST_INT: ! /* Unconditional branch. */ ! predict_insn_def (last_insn, PRED_UNCONDITIONAL, ! cond == const0_rtx ? NOT_TAKEN : TAKEN); ! break; ! case EQ: ! case UNEQ: ! /* Floating point comparisons appears to behave in a very ! inpredictable way because of special role of = tests in ! FP code. */ ! if (FLOAT_MODE_P (GET_MODE (XEXP (cond, 0)))) ! ; ! /* Comparisons with 0 are often used for booleans and there is ! nothing usefull to predict about them. */ ! else if (XEXP (cond, 1) == const0_rtx ! || XEXP (cond, 0) == const0_rtx) ! ; ! else ! predict_insn_def (last_insn, PRED_OPCODE_NONEQUAL, NOT_TAKEN); ! break; ! case NE: ! case LTGT: ! /* Floating point comparisons appears to behave in a very ! inpredictable way because of special role of = tests in ! FP code. */ ! if (FLOAT_MODE_P (GET_MODE (XEXP (cond, 0)))) ! ; ! /* Comparisons with 0 are often used for booleans and there is ! nothing usefull to predict about them. */ ! else if (XEXP (cond, 1) == const0_rtx ! || XEXP (cond, 0) == const0_rtx) ! ; ! else ! predict_insn_def (last_insn, PRED_OPCODE_NONEQUAL, TAKEN); ! break; ! case ORDERED: ! predict_insn_def (last_insn, PRED_FPOPCODE, TAKEN); ! break; ! case UNORDERED: ! predict_insn_def (last_insn, PRED_FPOPCODE, NOT_TAKEN); ! break; ! ! case LE: ! case LT: ! if (XEXP (cond, 1) == const0_rtx || XEXP (cond, 1) == const1_rtx ! || XEXP (cond, 1) == constm1_rtx) ! predict_insn_def (last_insn, PRED_OPCODE_POSITIVE, NOT_TAKEN); ! break; ! ! case GE: ! case GT: ! if (XEXP (cond, 1) == const0_rtx || XEXP (cond, 1) == const1_rtx ! || XEXP (cond, 1) == constm1_rtx) ! predict_insn_def (last_insn, PRED_OPCODE_POSITIVE, TAKEN); ! break; ! ! default: ! break; ! } } + + /* Attach the combined probability to each conditional jump. */ + for (i = 0; i < n_basic_blocks; i++) + if (GET_CODE (BLOCK_END (i)) == JUMP_INSN + && any_condjump_p (BLOCK_END (i))) + combine_predictions_for_insn (BLOCK_END (i), BASIC_BLOCK (i)); + + sbitmap_vector_free (post_dominators); + sbitmap_vector_free (dominators); + + estimate_bb_frequencies (loops_info); } ! /* __builtin_expect dropped tokens into the insn stream describing expected ! values of registers. Generate branch probabilities based off these ! values. */ void expected_value_to_br_prob () *************** expected_value_to_br_prob () *** 247,252 **** --- 557,563 ---- { ev = NOTE_EXPECTED_VALUE (insn); ev_reg = XEXP (ev, 0); + delete_insn (insn); } continue; *************** expected_value_to_br_prob () *** 255,274 **** ev = NULL_RTX; continue; default: /* Look for insns that clobber the EV register. */ if (ev && reg_set_p (ev_reg, insn)) ev = NULL_RTX; continue; - - case JUMP_INSN: - /* Look for simple conditional branches. If we havn't got an - expected value yet, no point going further. */ - if (GET_CODE (insn) != JUMP_INSN || ev == NULL_RTX) - continue; - if (! condjump_p (insn) || simplejump_p (insn)) - continue; - break; } /* Collect the branch condition, hopefully relative to EV_REG. */ --- 566,584 ---- ev = NULL_RTX; continue; + case JUMP_INSN: + /* Look for simple conditional branches. If we haven't got an + expected value yet, no point going further. */ + if (GET_CODE (insn) != JUMP_INSN || ev == NULL_RTX + || ! any_condjump_p (insn)) + continue; + break; + default: /* Look for insns that clobber the EV register. */ if (ev && reg_set_p (ev_reg, insn)) ev = NULL_RTX; continue; } /* Collect the branch condition, hopefully relative to EV_REG. */ *************** expected_value_to_br_prob () *** 277,293 **** (set r71 -1) (set r80 (lt r70 r71)) (set pc (if_then_else (ne r80 0) ...)) ! as canonicalize_condition will render this to us as (lt r70, r71) Could use cselib to try and reduce this further. */ ! cond = XEXP (SET_SRC (PATTERN (insn)), 0); cond = canonicalize_condition (insn, cond, 0, NULL, ev_reg); ! if (! cond ! || XEXP (cond, 0) != ev_reg || GET_CODE (XEXP (cond, 1)) != CONST_INT) continue; ! /* Substitute and simplify. Given that the expression we're building involves two constants, we should wind up with either true or false. */ cond = gen_rtx_fmt_ee (GET_CODE (cond), VOIDmode, --- 587,602 ---- (set r71 -1) (set r80 (lt r70 r71)) (set pc (if_then_else (ne r80 0) ...)) ! as canonicalize_condition will render this to us as (lt r70, r71) Could use cselib to try and reduce this further. */ ! cond = XEXP (SET_SRC (pc_set (insn)), 0); cond = canonicalize_condition (insn, cond, 0, NULL, ev_reg); ! if (! cond || XEXP (cond, 0) != ev_reg || GET_CODE (XEXP (cond, 1)) != CONST_INT) continue; ! /* Substitute and simplify. Given that the expression we're building involves two constants, we should wind up with either true or false. */ cond = gen_rtx_fmt_ee (GET_CODE (cond), VOIDmode, *************** expected_value_to_br_prob () *** 295,306 **** cond = simplify_rtx (cond); /* Turn the condition into a scaled branch probability. */ ! if (cond == const_true_rtx) ! cond = GEN_INT (PROB_VERY_LIKELY); ! else if (cond == const0_rtx) ! cond = GEN_INT (PROB_VERY_UNLIKELY); ! else abort (); ! REG_NOTES (insn) = alloc_EXPR_LIST (REG_BR_PROB, cond, REG_NOTES (insn)); } } --- 604,976 ---- cond = simplify_rtx (cond); /* Turn the condition into a scaled branch probability. */ ! if (cond != const_true_rtx && cond != const0_rtx) abort (); ! predict_insn_def (insn, PRED_BUILTIN_EXPECT, ! cond == const_true_rtx ? TAKEN : NOT_TAKEN); ! } ! } ! ! /* This is used to carry information about basic blocks. It is ! attached to the AUX field of the standard CFG block. */ ! ! typedef struct block_info_def ! { ! /* Estimated frequency of execution of basic_block. */ ! volatile double frequency; ! ! /* To keep queue of basic blocks to process. */ ! basic_block next; ! ! /* True if block needs to be visited in prop_freqency. */ ! int tovisit:1; ! ! /* Number of predecessors we need to visit first. */ ! int npredecessors; ! } *block_info; ! ! /* Similar information for edges. */ ! typedef struct edge_info_def ! { ! /* In case edge is an loopback edge, the probability edge will be reached ! in case header is. Estimated number of iterations of the loop can be ! then computed as 1 / (1 - back_edge_prob). ! ! Volatile is needed to avoid differences in the optimized and unoptimized ! builds on machines where FP registers are wider than double. */ ! volatile double back_edge_prob; ! /* True if the edge is an loopback edge in the natural loop. */ ! int back_edge:1; ! } *edge_info; ! ! #define BLOCK_INFO(B) ((block_info) (B)->aux) ! #define EDGE_INFO(E) ((edge_info) (E)->aux) ! ! /* Helper function for estimate_bb_frequencies. ! Propagate the frequencies for loops headed by HEAD. */ ! ! static void ! propagate_freq (head) ! basic_block head; ! { ! basic_block bb = head; ! basic_block last = bb; ! edge e; ! basic_block nextbb; ! int n; ! ! /* For each basic block we need to visit count number of his predecessors ! we need to visit first. */ ! for (n = 0; n < n_basic_blocks; n++) ! { ! basic_block bb = BASIC_BLOCK (n); ! if (BLOCK_INFO (bb)->tovisit) ! { ! int count = 0; ! ! for (e = bb->pred; e; e = e->pred_next) ! if (BLOCK_INFO (e->src)->tovisit && !(e->flags & EDGE_DFS_BACK)) ! count++; ! else if (BLOCK_INFO (e->src)->tovisit ! && rtl_dump_file && !EDGE_INFO (e)->back_edge) ! fprintf (rtl_dump_file, ! "Irreducible region hit, ignoring edge to %i->%i\n", ! e->src->index, bb->index); ! BLOCK_INFO (bb)->npredecessors = count; ! } } + + BLOCK_INFO (head)->frequency = 1; + for (; bb; bb = nextbb) + { + double cyclic_probability = 0, frequency = 0; + + nextbb = BLOCK_INFO (bb)->next; + BLOCK_INFO (bb)->next = NULL; + + /* Compute frequency of basic block. */ + if (bb != head) + { + #ifdef ENABLE_CHECKING + for (e = bb->pred; e; e = e->pred_next) + if (BLOCK_INFO (e->src)->tovisit && !(e->flags & EDGE_DFS_BACK)) + abort (); + #endif + + for (e = bb->pred; e; e = e->pred_next) + if (EDGE_INFO (e)->back_edge) + cyclic_probability += EDGE_INFO (e)->back_edge_prob; + else if (!(e->flags & EDGE_DFS_BACK)) + frequency += (e->probability + * BLOCK_INFO (e->src)->frequency / + REG_BR_PROB_BASE); + + if (cyclic_probability > 1.0 - 1.0 / REG_BR_PROB_BASE) + cyclic_probability = 1.0 - 1.0 / REG_BR_PROB_BASE; + + BLOCK_INFO (bb)->frequency = frequency / (1 - cyclic_probability); + } + + BLOCK_INFO (bb)->tovisit = 0; + + /* Compute back edge frequencies. */ + for (e = bb->succ; e; e = e->succ_next) + if (e->dest == head) + EDGE_INFO (e)->back_edge_prob + = ((e->probability * BLOCK_INFO (bb)->frequency) + / REG_BR_PROB_BASE); + + /* Propagate to successor blocks. */ + for (e = bb->succ; e; e = e->succ_next) + if (!(e->flags & EDGE_DFS_BACK) + && BLOCK_INFO (e->dest)->npredecessors) + { + BLOCK_INFO (e->dest)->npredecessors--; + if (!BLOCK_INFO (e->dest)->npredecessors) + { + if (!nextbb) + nextbb = e->dest; + else + BLOCK_INFO (last)->next = e->dest; + + last = e->dest; + } + } + } + } + + /* Estimate probabilities of loopback edges in loops at same nest level. */ + + static void + estimate_loops_at_level (first_loop) + struct loop *first_loop; + { + struct loop *l, *loop = first_loop; + + for (loop = first_loop; loop; loop = loop->next) + { + int n; + edge e; + + estimate_loops_at_level (loop->inner); + + /* Find current loop back edge and mark it. */ + for (e = loop->latch->succ; e->dest != loop->header; e = e->succ_next) + ; + + EDGE_INFO (e)->back_edge = 1; + + /* In case the loop header is shared, ensure that it is the last + one sharing the same header, so we avoid redundant work. */ + if (loop->shared) + { + for (l = loop->next; l; l = l->next) + if (l->header == loop->header) + break; + + if (l) + continue; + } + + /* Now merge all nodes of all loops with given header as not visited. */ + for (l = loop->shared ? first_loop : loop; l != loop->next; l = l->next) + if (loop->header == l->header) + EXECUTE_IF_SET_IN_SBITMAP (l->nodes, 0, n, + BLOCK_INFO (BASIC_BLOCK (n))->tovisit = 1 + ); + + propagate_freq (loop->header); + } + } + + /* Convert counts measured by profile driven feedback to frequencies. */ + + static void + counts_to_freqs () + { + HOST_WIDEST_INT count_max = 1; + int i; + + for (i = 0; i < n_basic_blocks; i++) + count_max = MAX (BASIC_BLOCK (i)->count, count_max); + + for (i = -2; i < n_basic_blocks; i++) + { + basic_block bb; + + if (i == -2) + bb = ENTRY_BLOCK_PTR; + else if (i == -1) + bb = EXIT_BLOCK_PTR; + else + bb = BASIC_BLOCK (i); + + bb->frequency = (bb->count * BB_FREQ_MAX + count_max / 2) / count_max; + } + } + + /* Return true if function is likely to be expensive, so there is no point to + optimize performance of prologue, epilogue or do inlining at the expense + of code size growth. THRESHOLD is the limit of number of isntructions + function can execute at average to be still considered not expensive. */ + + bool + expensive_function_p (threshold) + int threshold; + { + unsigned int sum = 0; + int i; + unsigned int limit; + + /* We can not compute accurately for large thresholds due to scaled + frequencies. */ + if (threshold > BB_FREQ_MAX) + abort (); + + /* Frequencies are out of range. This either means that function contains + internal loop executing more than BB_FREQ_MAX times or profile feedback + is available and function has not been executed at all. */ + if (ENTRY_BLOCK_PTR->frequency == 0) + return true; + + /* Maximally BB_FREQ_MAX^2 so overflow won't happen. */ + limit = ENTRY_BLOCK_PTR->frequency * threshold; + for (i = 0; i < n_basic_blocks; i++) + { + basic_block bb = BASIC_BLOCK (i); + rtx insn; + + for (insn = bb->head; insn != NEXT_INSN (bb->end); + insn = NEXT_INSN (insn)) + if (active_insn_p (insn)) + { + sum += bb->frequency; + if (sum > limit) + return true; + } + } + + return false; + } + + /* Estimate basic blocks frequency by given branch probabilities. */ + + static void + estimate_bb_frequencies (loops) + struct loops *loops; + { + int i; + double freq_max = 0; + + mark_dfs_back_edges (); + if (flag_branch_probabilities) + { + counts_to_freqs (); + return; + } + + /* Fill in the probability values in flowgraph based on the REG_BR_PROB + notes. */ + for (i = 0; i < n_basic_blocks; i++) + { + rtx last_insn = BLOCK_END (i); + int probability; + edge fallthru, branch; + + if (GET_CODE (last_insn) != JUMP_INSN || !any_condjump_p (last_insn) + /* Avoid handling of conditional jumps jumping to fallthru edge. */ + || BASIC_BLOCK (i)->succ->succ_next == NULL) + { + /* We can predict only conditional jumps at the moment. + Expect each edge to be equally probable. + ?? In the future we want to make abnormal edges improbable. */ + int nedges = 0; + edge e; + + for (e = BASIC_BLOCK (i)->succ; e; e = e->succ_next) + { + nedges++; + if (e->probability != 0) + break; + } + if (!e) + for (e = BASIC_BLOCK (i)->succ; e; e = e->succ_next) + e->probability = (REG_BR_PROB_BASE + nedges / 2) / nedges; + } + else + { + probability = INTVAL (XEXP (find_reg_note (last_insn, + REG_BR_PROB, 0), 0)); + fallthru = BASIC_BLOCK (i)->succ; + if (!fallthru->flags & EDGE_FALLTHRU) + fallthru = fallthru->succ_next; + branch = BASIC_BLOCK (i)->succ; + if (branch->flags & EDGE_FALLTHRU) + branch = branch->succ_next; + + branch->probability = probability; + fallthru->probability = REG_BR_PROB_BASE - probability; + } + } + + ENTRY_BLOCK_PTR->succ->probability = REG_BR_PROB_BASE; + + /* Set up block info for each basic block. */ + alloc_aux_for_blocks (sizeof (struct block_info_def)); + alloc_aux_for_edges (sizeof (struct edge_info_def)); + for (i = -2; i < n_basic_blocks; i++) + { + edge e; + basic_block bb; + + if (i == -2) + bb = ENTRY_BLOCK_PTR; + else if (i == -1) + bb = EXIT_BLOCK_PTR; + else + bb = BASIC_BLOCK (i); + + BLOCK_INFO (bb)->tovisit = 0; + for (e = bb->succ; e; e = e->succ_next) + EDGE_INFO (e)->back_edge_prob = ((double) e->probability + / REG_BR_PROB_BASE); + } + + /* First compute probabilities locally for each loop from innermost + to outermost to examine probabilities for back edges. */ + estimate_loops_at_level (loops->tree_root); + + /* Now fake loop around whole function to finalize probabilities. */ + for (i = 0; i < n_basic_blocks; i++) + BLOCK_INFO (BASIC_BLOCK (i))->tovisit = 1; + + BLOCK_INFO (ENTRY_BLOCK_PTR)->tovisit = 1; + BLOCK_INFO (EXIT_BLOCK_PTR)->tovisit = 1; + propagate_freq (ENTRY_BLOCK_PTR); + + for (i = 0; i < n_basic_blocks; i++) + if (BLOCK_INFO (BASIC_BLOCK (i))->frequency > freq_max) + freq_max = BLOCK_INFO (BASIC_BLOCK (i))->frequency; + + for (i = -2; i < n_basic_blocks; i++) + { + basic_block bb; + volatile double tmp; + + if (i == -2) + bb = ENTRY_BLOCK_PTR; + else if (i == -1) + bb = EXIT_BLOCK_PTR; + else + bb = BASIC_BLOCK (i); + + /* ??? Prevent rounding differences due to optimization on x86. */ + tmp = BLOCK_INFO (bb)->frequency * BB_FREQ_MAX; + tmp /= freq_max; + tmp += 0.5; + bb->frequency = tmp; + } + + free_aux_for_blocks (); + free_aux_for_edges (); } diff -Nrc3pad gcc-3.0.4/gcc/predict.def gcc-3.1/gcc/predict.def *** gcc-3.0.4/gcc/predict.def Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/predict.def Sat Dec 15 13:14:06 2001 *************** *** 0 **** --- 1,100 ---- + /* This file contains the definitions and documentation for the + builtins used in the GNU compiler. + Copyright (C) 2001 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2, or (at your option) any later + version. + + GCC is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to the Free + Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + + /* Before including this file, you should define a macro: + + DEF_PREDICTOR (ENUM, NAME, HITRATE) + + This macro will be called once for each predictor. The ENUM will + be of type `enum predictor', and will enumerate all supported + predictors. The order of DEF_PREDICTOR calls is important, as + in the first match combining heuristics, the predictor appearing + first in this file will win. + + NAME is used in the debugging output to determine predictor type. + + HITRATE is the probability that edge predicted by predictor as taken + will be really taken (so it should be always above + REG_BR_PROB_BASE / 2). */ + + + /* A value used as final outcome of all heuristics. */ + DEF_PREDICTOR (PRED_COMBINED, "combined", PROB_ALWAYS, 0) + + /* An outcome estimated by Dempster-Shaffer theory. */ + DEF_PREDICTOR (PRED_DS_THEORY, "DS theory", PROB_ALWAYS, 0) + + /* An combined heuristics using probability determined by first + matching heuristics from this list. */ + DEF_PREDICTOR (PRED_FIRST_MATCH, "first match", PROB_ALWAYS, 0) + + /* Heuristic applying when no heuristic below applies. */ + DEF_PREDICTOR (PRED_NO_PREDICTION, "no prediction", PROB_ALWAYS, 0) + + /* Mark unconditional jump as taken. */ + DEF_PREDICTOR (PRED_UNCONDITIONAL, "unconditional jump", PROB_ALWAYS, + PRED_FLAG_FIRST_MATCH) + + /* Use number of loop iterations determined by loop unroller to set + probability. We don't want to use Dempster-Shaffer theory here, + as the predictions is exact. */ + DEF_PREDICTOR (PRED_LOOP_ITERATIONS, "loop iterations", PROB_ALWAYS, + PRED_FLAG_FIRST_MATCH) + + /* Hints dropped by user via __builtin_expect feature. */ + DEF_PREDICTOR (PRED_BUILTIN_EXPECT, "__builtin_expect", PROB_VERY_LIKELY, + PRED_FLAG_FIRST_MATCH) + + /* Branch to basic block containing call marked by noreturn attribute. */ + DEF_PREDICTOR (PRED_NORETURN, "noreturn call", HITRATE (99), + PRED_FLAG_FIRST_MATCH) + + /* Loopback edge is taken. */ + DEF_PREDICTOR (PRED_LOOP_BRANCH, "loop branch", HITRATE (89), + PRED_FLAG_FIRST_MATCH) + + /* Edge causing loop to terminate is probably not taken. */ + DEF_PREDICTOR (PRED_LOOP_EXIT, "loop exit", HITRATE (90), + PRED_FLAG_FIRST_MATCH) + + /* Condition emitted by preconditiong code to ensure that variable + setting number of iterations is greater than initial value of iterator. */ + DEF_PREDICTOR (PRED_LOOP_CONDITION, "loop condition", PROB_VERY_LIKELY, 0) + + /* Preconditioning makes linear list of branches. */ + DEF_PREDICTOR (PRED_LOOP_PRECONDITIONING, "loop preconditioning", PROB_VERY_LIKELY, 0) + + /* Copied condition for the first iteration of loop is probably true. */ + DEF_PREDICTOR (PRED_LOOP_HEADER, "loop header", HITRATE (64), 0) + + /* Pointers are usually not NULL. */ + DEF_PREDICTOR (PRED_POINTER, "pointer", HITRATE (81), 0) + + /* NE is probable, EQ not etc... */ + DEF_PREDICTOR (PRED_OPCODE_POSITIVE, "opcode values positive", HITRATE (79), 0) + DEF_PREDICTOR (PRED_OPCODE_NONEQUAL, "opcode values nonequal", HITRATE (71), 0) + DEF_PREDICTOR (PRED_FPOPCODE, "fp_opcode", HITRATE (90), 0) + + /* Branch guarding call is probably taken. */ + DEF_PREDICTOR (PRED_CALL, "call", HITRATE (70), 0) + + /* Branch causing function to terminate is probably not taken. */ + DEF_PREDICTOR (PRED_ERROR_RETURN, "error return", HITRATE (52), 0) diff -Nrc3pad gcc-3.0.4/gcc/predict.h gcc-3.1/gcc/predict.h *** gcc-3.0.4/gcc/predict.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/predict.h Sun Oct 28 20:09:15 2001 *************** *** 0 **** --- 1,46 ---- + /* This file contains the definitions and documentation for the + builtins used in the GNU compiler. + Copyright (C) 2001 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2, or (at your option) any later + version. + + GCC is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to the Free + Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + + #define DEF_PREDICTOR(ENUM, NAME, HITRATE, FLAGS) ENUM, + enum br_predictor + { + #include "predict.def" + + /* Upper bound on non-language-specific builtins. */ + END_PREDICTORS + }; + #undef DEF_PREDICTOR + enum prediction + { + NOT_TAKEN, + TAKEN + }; + + extern void predict_insn_def PARAMS ((rtx, enum br_predictor, + enum prediction)); + extern void predict_insn PARAMS ((rtx, enum br_predictor, int)); + + /* Avoid unneeded dependency on basic_block.h */ + #ifdef BASIC_BLOCK + extern void predict_edge PARAMS ((edge, enum br_predictor, int)); + extern void predict_edge_def PARAMS ((edge, enum br_predictor, + enum prediction)); + #endif diff -Nrc3pad gcc-3.0.4/gcc/prefix.c gcc-3.1/gcc/prefix.c *** gcc-3.0.4/gcc/prefix.c Fri Nov 10 16:01:14 2000 --- gcc-3.1/gcc/prefix.c Thu Oct 11 03:15:55 2001 *************** *** 1,12 **** /* Utility to update paths from internal to external forms. ! Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or ! modify it under the terms of the GNU Library General Public ! License as published by the Free Software Foundation; either ! version 2 of the License, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of --- 1,12 ---- /* Utility to update paths from internal to external forms. ! Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU Library General Public License as published by ! the Free Software Foundation; either version 2 of the License, or (at ! your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of *************** Boston, MA 02111-1307, USA. */ *** 74,81 **** static const char *std_prefix = PREFIX; static const char *get_key_value PARAMS ((char *)); ! static const char *translate_name PARAMS ((const char *)); static char *save_string PARAMS ((const char *, int)); #if defined(_WIN32) && defined(ENABLE_WIN32_REGISTRY) static char *lookup_key PARAMS ((char *)); --- 74,82 ---- static const char *std_prefix = PREFIX; static const char *get_key_value PARAMS ((char *)); ! static char *translate_name PARAMS ((char *)); static char *save_string PARAMS ((const char *, int)); + static void tr PARAMS ((char *, int, int)); #if defined(_WIN32) && defined(ENABLE_WIN32_REGISTRY) static char *lookup_key PARAMS ((char *)); *************** get_key_value (key) *** 96,102 **** #endif if (prefix == 0) ! prefix = getenv (temp = concat (key, "_ROOT", NULL_PTR)); if (prefix == 0) prefix = std_prefix; --- 97,103 ---- #endif if (prefix == 0) ! prefix = getenv (temp = concat (key, "_ROOT", NULL)); if (prefix == 0) prefix = std_prefix; *************** get_key_value (key) *** 107,168 **** return prefix; } - /* Concatenate a sequence of strings, returning the result. - - This function is based on the one in libiberty. */ - - char * - concat VPARAMS ((const char *first, ...)) - { - register int length; - register char *newstr; - register char *end; - register const char *arg; - va_list args; - #ifndef ANSI_PROTOTYPES - const char *first; - #endif - - /* First compute the size of the result and get sufficient memory. */ - - VA_START (args, first); - #ifndef ANSI_PROTOTYPES - first = va_arg (args, const char *); - #endif - - arg = first; - length = 0; - - while (arg != 0) - { - length += strlen (arg); - arg = va_arg (args, const char *); - } - - newstr = (char *) xmalloc (length + 1); - va_end (args); - - /* Now copy the individual pieces to the result string. */ - - VA_START (args, first); - #ifndef ANSI_PROTOTYPES - first = va_arg (args, char *); - #endif - - end = newstr; - arg = first; - while (arg != 0) - { - while (*arg) - *end++ = *arg++; - arg = va_arg (args, const char *); - } - *end = '\000'; - va_end (args); - - return (newstr); - } - /* Return a copy of a string that has been placed in the heap. */ static char * --- 108,113 ---- *************** save_string (s, len) *** 170,176 **** const char *s; int len; { ! register char *result = xmalloc (len + 1); memcpy (result, s, len); result[len] = 0; --- 115,121 ---- const char *s; int len; { ! char *result = xmalloc (len + 1); memcpy (result, s, len); result[len] = 0; *************** lookup_key (key) *** 230,330 **** } #endif ! /* If NAME starts with a '@' or '$', apply the translation rules above ! and return a new name. Otherwise, return the given name. */ ! static const char * translate_name (name) ! const char *name; { ! char code = name[0]; ! char *key; ! const char *prefix = 0; int keylen; ! if (code != '@' && code != '$') ! return name; ! for (keylen = 0; ! (name[keylen + 1] != 0 && !IS_DIR_SEPARATOR (name[keylen + 1])); ! keylen++) ! ; ! key = (char *) alloca (keylen + 1); ! strncpy (key, &name[1], keylen); ! key[keylen] = 0; ! name = &name[keylen + 1]; - if (code == '@') - { - prefix = get_key_value (key); if (prefix == 0) ! prefix = std_prefix; ! } ! else ! prefix = getenv (key); ! if (prefix == 0) ! prefix = PREFIX; ! /* We used to strip trailing DIR_SEPARATORs here, but that can ! sometimes yield a result with no separator when one was coded ! and intended by the user, causing two path components to run ! together. */ ! return concat (prefix, name, NULL_PTR); } ! /* Update PATH using KEY if PATH starts with PREFIX. */ ! const char * update_path (path, key) const char *path; const char *key; { if (! strncmp (path, std_prefix, strlen (std_prefix)) && key != 0) { ! if (key[0] != '$') ! key = concat ("@", key, NULL_PTR); ! path = concat (key, &path[strlen (std_prefix)], NULL_PTR); ! while (path[0] == '@' || path[0] == '$') ! path = translate_name (path); } #ifdef UPDATE_PATH_HOST_CANONICALIZE ! /* Perform host dependant canonicalization when needed. */ ! UPDATE_PATH_HOST_CANONICALIZE (path, key); #endif #ifdef DIR_SEPARATOR_2 ! /* Convert DIR_SEPARATOR_2 to DIR_SEPARATOR. */ ! if (DIR_SEPARATOR != DIR_SEPARATOR_2) ! { ! char *new_path = xstrdup (path); ! path = new_path; ! do { ! if (*new_path == DIR_SEPARATOR_2) ! *new_path = DIR_SEPARATOR; ! } while (*new_path++); ! } #endif ! #if defined (DIR_SEPARATOR) && !defined (DIR_SEPARATOR_2) if (DIR_SEPARATOR != '/') ! { ! char *new_path = xstrdup (path); ! path = new_path; ! do { ! if (*new_path == '/') ! *new_path = DIR_SEPARATOR; ! } while (*new_path++); ! } #endif ! return path; } /* Reset the standard prefix */ --- 175,293 ---- } #endif ! /* If NAME, a malloc-ed string, starts with a '@' or '$', apply the ! translation rules above and return a newly malloc-ed name. ! Otherwise, return the given name. */ ! static char * translate_name (name) ! char *name; { ! char code; ! char *key, *old_name; ! const char *prefix; int keylen; ! for (;;) ! { ! code = name[0]; ! if (code != '@' && code != '$') ! break; ! for (keylen = 0; ! (name[keylen + 1] != 0 && !IS_DIR_SEPARATOR (name[keylen + 1])); ! keylen++) ! ; ! key = (char *) alloca (keylen + 1); ! strncpy (key, &name[1], keylen); ! key[keylen] = 0; ! if (code == '@') ! { ! prefix = get_key_value (key); ! if (prefix == 0) ! prefix = std_prefix; ! } ! else ! prefix = getenv (key); if (prefix == 0) ! prefix = PREFIX; ! /* We used to strip trailing DIR_SEPARATORs here, but that can ! sometimes yield a result with no separator when one was coded ! and intended by the user, causing two path components to run ! together. */ ! old_name = name; ! name = concat (prefix, &name[keylen + 1], NULL); ! free (old_name); ! } ! return name; } ! /* In a NUL-terminated STRING, replace character C1 with C2 in-place. */ ! static void ! tr (string, c1, c2) ! char *string; ! int c1, c2; ! { ! do ! { ! if (*string == c1) ! *string = c2; ! } ! while (*string++); ! } ! /* Update PATH using KEY if PATH starts with PREFIX. The returned ! string is always malloc-ed, and the caller is responsible for ! freeing it. */ ! ! char * update_path (path, key) const char *path; const char *key; { + char *result; + if (! strncmp (path, std_prefix, strlen (std_prefix)) && key != 0) { ! bool free_key = false; ! if (key[0] != '$') ! { ! key = concat ("@", key, NULL); ! free_key = true; ! } ! result = concat (key, &path[strlen (std_prefix)], NULL); ! if (free_key) ! free ((char *) key); ! result = translate_name (result); } + else + result = xstrdup (path); #ifdef UPDATE_PATH_HOST_CANONICALIZE ! /* Perform host dependent canonicalization when needed. */ ! UPDATE_PATH_HOST_CANONICALIZE (path); #endif #ifdef DIR_SEPARATOR_2 ! /* Convert DIR_SEPARATOR_2 to DIR_SEPARATOR. */ ! if (DIR_SEPARATOR_2 != DIR_SEPARATOR) ! tr (result, DIR_SEPARATOR_2, DIR_SEPARATOR); #endif ! #if defined (DIR_SEPARATOR) && !defined (DIR_SEPARATOR_2) if (DIR_SEPARATOR != '/') ! tr (result, '/', DIR_SEPARATOR); #endif ! return result; } /* Reset the standard prefix */ diff -Nrc3pad gcc-3.0.4/gcc/prefix.h gcc-3.1/gcc/prefix.h *** gcc-3.0.4/gcc/prefix.h Wed Jan 6 21:31:04 1999 --- gcc-3.1/gcc/prefix.h Wed Aug 22 14:35:31 2001 *************** *** 1,12 **** /* Provide prototypes for functions exported from prefix.c. 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 Library General Public ! License as published by the Free Software Foundation; either ! version 2 of the License, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of --- 1,12 ---- /* Provide prototypes for functions exported from prefix.c. Copyright (C) 1999 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU Library General Public License as published by ! the Free Software Foundation; either version 2 of the License, or (at ! your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of *************** Software Foundation, Inc., 59 Temple Pla *** 19,28 **** Boston, MA 02111-1307, USA. */ ! #ifndef __GCC_PREFIX_H__ ! #define __GCC_PREFIX_H__ ! extern const char *update_path PARAMS ((const char *, const char *)); extern void set_std_prefix PARAMS ((const char *, int)); ! #endif /* ! __GCC_PREFIX_H__ */ --- 19,31 ---- Boston, MA 02111-1307, USA. */ ! #ifndef GCC_PREFIX_H ! #define GCC_PREFIX_H ! /* Update PATH using KEY if PATH starts with PREFIX. The returned ! string is always malloc-ed, and the caller is responsible for ! freeing it. */ ! extern char *update_path PARAMS ((const char *path, const char *key)); extern void set_std_prefix PARAMS ((const char *, int)); ! #endif /* ! GCC_PREFIX_H */ diff -Nrc3pad gcc-3.0.4/gcc/print-rtl.c gcc-3.1/gcc/print-rtl.c *** gcc-3.0.4/gcc/print-rtl.c Tue Jun 5 20:39:11 2001 --- gcc-3.1/gcc/print-rtl.c Sun Dec 2 19:04:23 2001 *************** *** 2,28 **** Copyright (C) 1987, 1988, 1992, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" #include "system.h" #include "rtl.h" #include "real.h" #include "flags.h" #include "hard-reg-set.h" --- 2,33 ---- Copyright (C) 1987, 1988, 1992, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" #include "system.h" #include "rtl.h" + + /* We don't want the tree code checking code for the access to the + DECL_NAME to be included in the gen* programs. */ + #undef ENABLE_TREE_CHECKING + #include "tree.h" #include "real.h" #include "flags.h" #include "hard-reg-set.h" *************** int dump_for_graph; *** 72,87 **** /* Nonzero to dump all call_placeholder alternatives. */ static int debug_call_placeholder_verbose; /* Print IN_RTX onto OUTFILE. This is the recursive part of printing. */ static void print_rtx (in_rtx) ! register rtx in_rtx; { ! register int i = 0; ! register int j; ! register const char *format_ptr; ! register int is_insn; rtx tem; if (sawclose) --- 77,114 ---- /* Nonzero to dump all call_placeholder alternatives. */ static int debug_call_placeholder_verbose; + void + print_mem_expr (outfile, expr) + FILE *outfile; + tree expr; + { + if (TREE_CODE (expr) == COMPONENT_REF) + { + if (TREE_OPERAND (expr, 0)) + print_mem_expr (outfile, TREE_OPERAND (expr, 0)); + else + fputs (" ", outfile); + fprintf (outfile, ".%s", + IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (expr, 1)))); + } + else if (DECL_NAME (expr)) + fprintf (outfile, " %s", IDENTIFIER_POINTER (DECL_NAME (expr))); + else if (TREE_CODE (expr) == RESULT_DECL) + fputs (" ", outfile); + else + fputs (" ", outfile); + } + /* Print IN_RTX onto OUTFILE. This is the recursive part of printing. */ static void print_rtx (in_rtx) ! rtx in_rtx; { ! int i = 0; ! int j; ! const char *format_ptr; ! int is_insn; rtx tem; if (sawclose) *************** print_rtx (in_rtx) *** 89,96 **** if (flag_simple) fputc (' ', outfile); else ! fprintf (outfile, "\n%s%*s", ! print_rtx_head, indent * 2, ""); sawclose = 0; } --- 116,122 ---- if (flag_simple) fputc (' ', outfile); else ! fprintf (outfile, "\n%s%*s", print_rtx_head, indent * 2, ""); sawclose = 0; } *************** print_rtx (in_rtx) *** 100,120 **** sawclose = 1; return; } ! is_insn = (INSN_P (in_rtx)); /* When printing in VCG format we write INSNs, NOTE, LABEL, and BARRIER in separate nodes and therefore have to handle them special here. */ ! if (dump_for_graph && ! (is_insn || GET_CODE (in_rtx) == NOTE || GET_CODE (in_rtx) == CODE_LABEL ! || GET_CODE (in_rtx) == BARRIER)) { i = 3; indent = 0; } else { ! /* print name of expression code */ if (flag_simple && GET_CODE (in_rtx) == CONST_INT) fputc ('(', outfile); else --- 126,152 ---- sawclose = 1; return; } + else if (GET_CODE (in_rtx) > NUM_RTX_CODE) + { + fprintf (outfile, "(??? bad code %d\n)", GET_CODE (in_rtx)); + sawclose = 1; + return; + } ! is_insn = INSN_P (in_rtx); /* When printing in VCG format we write INSNs, NOTE, LABEL, and BARRIER in separate nodes and therefore have to handle them special here. */ ! if (dump_for_graph ! && (is_insn || GET_CODE (in_rtx) == NOTE ! || GET_CODE (in_rtx) == CODE_LABEL || GET_CODE (in_rtx) == BARRIER)) { i = 3; indent = 0; } else { ! /* Print name of expression code. */ if (flag_simple && GET_CODE (in_rtx) == CONST_INT) fputc ('(', outfile); else *************** print_rtx (in_rtx) *** 159,178 **** /* Get the format string and skip the first elements if we have handled them already. */ format_ptr = GET_RTX_FORMAT (GET_CODE (in_rtx)) + i; - for (; i < GET_RTX_LENGTH (GET_CODE (in_rtx)); i++) switch (*format_ptr++) { case 'S': case 's': ! if (XSTR (in_rtx, i) == 0) fputs (dump_for_graph ? " \\\"\\\"" : " \"\"", outfile); else { if (dump_for_graph) ! fprintf (outfile, " (\\\"%s\\\")", XSTR (in_rtx, i)); else ! fprintf (outfile, " (\"%s\")", XSTR (in_rtx, i)); } sawclose = 1; break; --- 191,218 ---- /* Get the format string and skip the first elements if we have handled them already. */ format_ptr = GET_RTX_FORMAT (GET_CODE (in_rtx)) + i; for (; i < GET_RTX_LENGTH (GET_CODE (in_rtx)); i++) switch (*format_ptr++) { + const char *str; + + case 'T': + str = XTMPL (in_rtx, i); + goto string; + case 'S': case 's': ! str = XSTR (in_rtx, i); ! string: ! ! if (str == 0) fputs (dump_for_graph ? " \\\"\\\"" : " \"\"", outfile); else { if (dump_for_graph) ! fprintf (outfile, " (\\\"%s\\\")", str); else ! fprintf (outfile, " (\"%s\")", str); } sawclose = 1; break; *************** print_rtx (in_rtx) *** 296,303 **** indent -= 2; } if (sawclose) ! fprintf (outfile, "\n%s%*s", ! print_rtx_head, indent * 2, ""); fputs ("] ", outfile); sawclose = 1; --- 336,342 ---- indent -= 2; } if (sawclose) ! fprintf (outfile, "\n%s%*s", print_rtx_head, indent * 2, ""); fputs ("] ", outfile); sawclose = 1; *************** print_rtx (in_rtx) *** 317,359 **** break; case 'i': ! { ! register int value = XINT (in_rtx, i); ! const char *name; ! if (GET_CODE (in_rtx) == REG && value < FIRST_PSEUDO_REGISTER) ! { ! fputc (' ', outfile); ! DEBUG_PRINT_REG (in_rtx, 0, outfile); ! } ! else if (GET_CODE (in_rtx) == REG && value <= LAST_VIRTUAL_REGISTER) ! { ! if (value == VIRTUAL_INCOMING_ARGS_REGNUM) ! fprintf (outfile, " %d virtual-incoming-args", value); ! else if (value == VIRTUAL_STACK_VARS_REGNUM) ! fprintf (outfile, " %d virtual-stack-vars", value); ! else if (value == VIRTUAL_STACK_DYNAMIC_REGNUM) ! fprintf (outfile, " %d virtual-stack-dynamic", value); ! else if (value == VIRTUAL_OUTGOING_ARGS_REGNUM) ! fprintf (outfile, " %d virtual-outgoing-args", value); ! else if (value == VIRTUAL_CFA_REGNUM) ! fprintf (outfile, " %d virtual-cfa", value); ! else ! fprintf (outfile, " %d virtual-reg-%d", value, ! value-FIRST_VIRTUAL_REGISTER); ! } ! else if (flag_dump_unnumbered ! && (is_insn || GET_CODE (in_rtx) == NOTE)) ! fputc ('#', outfile); ! else ! fprintf (outfile, " %d", value); ! if (is_insn && &INSN_CODE (in_rtx) == &XINT (in_rtx, i) ! && XINT (in_rtx, i) >= 0 ! && (name = get_insn_name (XINT (in_rtx, i))) != NULL) ! fprintf (outfile, " {%s}", name); ! sawclose = 0; ! } break; /* Print NOTE_INSN names rather than integer codes. */ --- 356,407 ---- break; case 'i': ! if (i == 5 && GET_CODE (in_rtx) == NOTE) ! { ! /* This field is only used for NOTE_INSN_DELETED_LABEL, and ! other times often contains garbage from INSN->NOTE death. */ ! if (NOTE_LINE_NUMBER (in_rtx) == NOTE_INSN_DELETED_LABEL) ! fprintf (outfile, " %d", XINT (in_rtx, i)); ! } ! else ! { ! int value = XINT (in_rtx, i); ! const char *name; ! if (GET_CODE (in_rtx) == REG && value < FIRST_PSEUDO_REGISTER) ! { ! fputc (' ', outfile); ! DEBUG_PRINT_REG (in_rtx, 0, outfile); ! } ! else if (GET_CODE (in_rtx) == REG ! && value <= LAST_VIRTUAL_REGISTER) ! { ! if (value == VIRTUAL_INCOMING_ARGS_REGNUM) ! fprintf (outfile, " %d virtual-incoming-args", value); ! else if (value == VIRTUAL_STACK_VARS_REGNUM) ! fprintf (outfile, " %d virtual-stack-vars", value); ! else if (value == VIRTUAL_STACK_DYNAMIC_REGNUM) ! fprintf (outfile, " %d virtual-stack-dynamic", value); ! else if (value == VIRTUAL_OUTGOING_ARGS_REGNUM) ! fprintf (outfile, " %d virtual-outgoing-args", value); ! else if (value == VIRTUAL_CFA_REGNUM) ! fprintf (outfile, " %d virtual-cfa", value); ! else ! fprintf (outfile, " %d virtual-reg-%d", value, ! value-FIRST_VIRTUAL_REGISTER); ! } ! else if (flag_dump_unnumbered ! && (is_insn || GET_CODE (in_rtx) == NOTE)) ! fputc ('#', outfile); ! else ! fprintf (outfile, " %d", value); ! if (is_insn && &INSN_CODE (in_rtx) == &XINT (in_rtx, i) ! && XINT (in_rtx, i) >= 0 ! && (name = get_insn_name (XINT (in_rtx, i))) != NULL) ! fprintf (outfile, " {%s}", name); ! sawclose = 0; ! } break; /* Print NOTE_INSN names rather than integer codes. */ *************** print_rtx (in_rtx) *** 428,435 **** switch (GET_CODE (in_rtx)) { case MEM: ! fputc (' ', outfile); fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, MEM_ALIAS_SET (in_rtx)); break; #if HOST_FLOAT_FORMAT == TARGET_FLOAT_FORMAT && MAX_LONG_DOUBLE_TYPE_SIZE == 64 --- 476,505 ---- switch (GET_CODE (in_rtx)) { case MEM: ! fputs (" [", outfile); fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, MEM_ALIAS_SET (in_rtx)); + + if (MEM_EXPR (in_rtx)) + print_mem_expr (outfile, MEM_EXPR (in_rtx)); + + if (MEM_OFFSET (in_rtx)) + { + fputc ('+', outfile); + fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, + INTVAL (MEM_OFFSET (in_rtx))); + } + + if (MEM_SIZE (in_rtx)) + { + fputs (" S", outfile); + fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, + INTVAL (MEM_SIZE (in_rtx))); + } + + if (MEM_ALIGN (in_rtx) != 1) + fprintf (outfile, " A%u", MEM_ALIGN (in_rtx)); + + fputc (']', outfile); break; #if HOST_FLOAT_FORMAT == TARGET_FLOAT_FORMAT && MAX_LONG_DOUBLE_TYPE_SIZE == 64 *************** print_rtx (in_rtx) *** 462,468 **** tem = XEXP (in_rtx, 1); if (tem) ! fputs ("\n ])\n (const_string \"tail_call\") (sequence [", outfile); for (; tem != 0; tem = NEXT_INSN (tem)) { fputs ("\n ", outfile); --- 532,539 ---- tem = XEXP (in_rtx, 1); if (tem) ! fputs ("\n ])\n (const_string \"tail_call\") (sequence [", ! outfile); for (; tem != 0; tem = NEXT_INSN (tem)) { fputs ("\n ", outfile); *************** print_rtx (in_rtx) *** 471,477 **** tem = XEXP (in_rtx, 2); if (tem) ! fputs ("\n ])\n (const_string \"tail_recursion\") (sequence [", outfile); for (; tem != 0; tem = NEXT_INSN (tem)) { fputs ("\n ", outfile); --- 542,549 ---- tem = XEXP (in_rtx, 2); if (tem) ! fputs ("\n ])\n (const_string \"tail_recursion\") (sequence [", ! outfile); for (; tem != 0; tem = NEXT_INSN (tem)) { fputs ("\n ", outfile); *************** print_rtl (outf, rtx_first) *** 621,627 **** FILE *outf; rtx rtx_first; { ! register rtx tmp_rtx; outfile = outf; sawclose = 0; --- 693,699 ---- FILE *outf; rtx rtx_first; { ! rtx tmp_rtx; outfile = outf; sawclose = 0; diff -Nrc3pad gcc-3.0.4/gcc/print-tree.c gcc-3.1/gcc/print-tree.c *** gcc-3.0.4/gcc/print-tree.c Tue Mar 27 04:41:15 2001 --- gcc-3.1/gcc/print-tree.c Sat Mar 16 00:58:58 2002 *************** *** 1,29 **** /* Prints out tree in human readable form - GNU C-compiler ! Copyright (C) 1990, 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 ! Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" #include "system.h" #include "tree.h" #include "ggc.h" /* Define the hash table of nodes already seen. Such nodes are not repeated; brief cross-references are used. */ --- 1,30 ---- /* Prints out tree in human readable form - GNU C-compiler ! Copyright (C) 1990, 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, ! 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" #include "system.h" #include "tree.h" #include "ggc.h" + #include "langhooks.h" /* Define the hash table of nodes already seen. Such nodes are not repeated; brief cross-references are used. */ *************** print_node (file, prefix, node, indent) *** 293,298 **** --- 294,301 ---- fputs (" protected", file); if (TREE_STATIC (node)) fputs (" static", file); + if (TREE_DEPRECATED (node)) + fputs (" deprecated", file); if (TREE_LANG_FLAG_0 (node)) fputs (" tree_0", file); if (TREE_LANG_FLAG_1 (node)) *************** print_node (file, prefix, node, indent) *** 325,331 **** fputs (" common", file); if (DECL_EXTERNAL (node)) fputs (" external", file); ! if (DECL_REGISTER (node)) fputs (" regdecl", file); if (DECL_NONLOCAL (node)) fputs (" nonlocal", file); --- 328,338 ---- fputs (" common", file); if (DECL_EXTERNAL (node)) fputs (" external", file); ! if (DECL_WEAK (node)) ! fputs (" weak", file); ! if (DECL_REGISTER (node) && TREE_CODE (node) != FIELD_DECL ! && TREE_CODE (node) != FUNCTION_DECL ! && TREE_CODE (node) != LABEL_DECL) fputs (" regdecl", file); if (DECL_NONLOCAL (node)) fputs (" nonlocal", file); *************** print_node (file, prefix, node, indent) *** 339,352 **** --- 346,365 ---- fputs (" built-in", file); if (TREE_CODE (node) == FUNCTION_DECL && DECL_BUILT_IN_NONANSI (node)) fputs (" built-in-nonansi", file); + if (TREE_CODE (node) == FUNCTION_DECL && DECL_NO_STATIC_CHAIN (node)) + fputs (" no-static-chain", file); if (TREE_CODE (node) == FIELD_DECL && DECL_PACKED (node)) fputs (" packed", file); if (TREE_CODE (node) == FIELD_DECL && DECL_BIT_FIELD (node)) fputs (" bit-field", file); + if (TREE_CODE (node) == FIELD_DECL && DECL_NONADDRESSABLE_P (node)) + fputs (" nonaddressable", file); if (TREE_CODE (node) == LABEL_DECL && DECL_TOO_LATE (node)) fputs (" too-late", file); + if (TREE_CODE (node) == LABEL_DECL && DECL_ERROR_ISSUED (node)) + fputs (" error-issued", file); if (TREE_CODE (node) == VAR_DECL && DECL_IN_TEXT_SECTION (node)) fputs (" in-text-section", file); *************** print_node (file, prefix, node, indent) *** 376,382 **** if (DECL_LANG_FLAG_7 (node)) fputs (" decl_7", file); ! fprintf (file, " %s", GET_MODE_NAME(mode)); fprintf (file, " file %s line %d", DECL_SOURCE_FILE (node), DECL_SOURCE_LINE (node)); --- 389,395 ---- if (DECL_LANG_FLAG_7 (node)) fputs (" decl_7", file); ! fprintf (file, " %s", GET_MODE_NAME (mode)); fprintf (file, " file %s line %d", DECL_SOURCE_FILE (node), DECL_SOURCE_LINE (node)); *************** print_node (file, prefix, node, indent) *** 425,432 **** } print_node_brief (file, "context", DECL_CONTEXT (node), indent + 4); ! print_node_brief (file, "machine_attributes", ! DECL_MACHINE_ATTRIBUTES (node), indent + 4); print_node_brief (file, "abstract_origin", DECL_ABSTRACT_ORIGIN (node), indent + 4); --- 438,445 ---- } print_node_brief (file, "context", DECL_CONTEXT (node), indent + 4); ! print_node_brief (file, "attributes", ! DECL_ATTRIBUTES (node), indent + 4); print_node_brief (file, "abstract_origin", DECL_ABSTRACT_ORIGIN (node), indent + 4); *************** print_node (file, prefix, node, indent) *** 434,440 **** print_node (file, "result", DECL_RESULT_FLD (node), indent + 4); print_node_brief (file, "initial", DECL_INITIAL (node), indent + 4); ! print_lang_decl (file, node, indent); if (DECL_RTL_SET_P (node)) { --- 447,453 ---- print_node (file, "result", DECL_RESULT_FLD (node), indent + 4); print_node_brief (file, "initial", DECL_INITIAL (node), indent + 4); ! (*lang_hooks.print_decl) (file, node, indent); if (DECL_RTL_SET_P (node)) { *************** print_node (file, prefix, node, indent) *** 520,526 **** fputs (" type_6", file); mode = TYPE_MODE (node); ! fprintf (file, " %s", GET_MODE_NAME(mode)); print_node (file, "size", TYPE_SIZE (node), indent + 4); print_node (file, "unit size", TYPE_SIZE_UNIT (node), indent + 4); --- 533,539 ---- fputs (" type_6", file); mode = TYPE_MODE (node); ! fprintf (file, " %s", GET_MODE_NAME (mode)); print_node (file, "size", TYPE_SIZE (node), indent + 4); print_node (file, "unit size", TYPE_SIZE_UNIT (node), indent + 4); *************** print_node (file, prefix, node, indent) *** 566,572 **** if (TYPE_CONTEXT (node)) print_node_brief (file, "context", TYPE_CONTEXT (node), indent + 4); ! print_lang_type (file, node, indent); if (TYPE_POINTER_TO (node) || TREE_CHAIN (node)) indent_to (file, indent + 3); --- 579,585 ---- if (TYPE_CONTEXT (node)) print_node_brief (file, "context", TYPE_CONTEXT (node), indent + 4); ! (*lang_hooks.print_type) (file, node, indent); if (TYPE_POINTER_TO (node) || TREE_CHAIN (node)) indent_to (file, indent + 3); *************** print_node (file, prefix, node, indent) *** 696,701 **** --- 709,730 ---- } break; + case VECTOR_CST: + { + tree vals = TREE_VECTOR_CST_ELTS (node); + char buf[10]; + tree link; + int i; + + i = 0; + for (link = vals; link; link = TREE_CHAIN (link), ++i) + { + sprintf (buf, "elt%d: ", i); + print_node (file, buf, TREE_VALUE (link), indent + 4); + } + } + break; + case COMPLEX_CST: print_node (file, "real", TREE_REALPART (node), indent + 4); print_node (file, "imag", TREE_IMAGPART (node), indent + 4); *************** print_node (file, prefix, node, indent) *** 711,717 **** break; case IDENTIFIER_NODE: ! print_lang_identifier (file, node, indent); break; case TREE_LIST: --- 740,746 ---- break; case IDENTIFIER_NODE: ! (*lang_hooks.print_identifier) (file, node, indent); break; case TREE_LIST: *************** print_node (file, prefix, node, indent) *** 732,745 **** } break; - case OP_IDENTIFIER: - print_node (file, "op1", TREE_PURPOSE (node), indent + 4); - print_node (file, "op2", TREE_VALUE (node), indent + 4); - break; - default: if (TREE_CODE_CLASS (TREE_CODE (node)) == 'x') ! lang_print_xnode (file, node, indent); break; } --- 761,769 ---- } break; default: if (TREE_CODE_CLASS (TREE_CODE (node)) == 'x') ! (*lang_hooks.print_xnode) (file, node, indent); break; } diff -Nrc3pad gcc-3.0.4/gcc/profile.c gcc-3.1/gcc/profile.c *** gcc-3.0.4/gcc/profile.c Mon Jul 30 21:16:17 2001 --- gcc-3.1/gcc/profile.c Sun Dec 2 00:04:19 2001 *************** *** 1,26 **** ! /* Calculate branch probabilities, and basic block execution counts. Copyright (C) 1990, 1991, 1992, 1993, 1994, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by James E. Wilson, UC Berkeley/Cygnus Support; based on some ideas from Dain Samples of UC Berkeley. Further mangling by Bob Manson, Cygnus Support. ! 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. */ /* ??? Register allocation should use basic block execution counts to give preference to the most commonly executed blocks. */ --- 1,26 ---- ! /* Calculate branch probabilities, and basic block execution counts. Copyright (C) 1990, 1991, 1992, 1993, 1994, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by James E. Wilson, UC Berkeley/Cygnus Support; based on some ideas from Dain Samples of UC Berkeley. Further mangling by Bob Manson, Cygnus Support. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* ??? Register allocation should use basic block execution counts to give preference to the most commonly executed blocks. */ *************** Boston, MA 02111-1307, USA. */ *** 43,53 **** #include "regs.h" #include "expr.h" #include "function.h" - #include "gcov-io.h" #include "toplev.h" #include "ggc.h" #include "hard-reg-set.h" #include "basic-block.h" /* Additional information about the edges we need. */ struct edge_info --- 43,54 ---- #include "regs.h" #include "expr.h" #include "function.h" #include "toplev.h" #include "ggc.h" #include "hard-reg-set.h" #include "basic-block.h" + #include "gcov-io.h" + #include "target.h" /* Additional information about the edges we need. */ struct edge_info *************** struct edge_info *** 59,78 **** struct bb_info { unsigned int count_valid : 1; ! int succ_count; ! int pred_count; }; #define EDGE_INFO(e) ((struct edge_info *) (e)->aux) #define BB_INFO(b) ((struct bb_info *) (b)->aux) /* Keep all basic block indexes nonnegative in the gcov output. Index 0 ! is used for entry block, last block exit block. */ #define GCOV_INDEX_TO_BB(i) ((i) == 0 ? ENTRY_BLOCK_PTR \ ! : (((i) == n_basic_blocks + 1) \ ? EXIT_BLOCK_PTR : BASIC_BLOCK ((i)-1))) ! #define BB_TO_GCOV_INDEX(bb) ((bb) == ENTRY_BLOCK_PTR ? 0 \ ! : ((bb) == EXIT_BLOCK_PTR \ ? n_basic_blocks + 1 : (bb)->index + 1)) /* Name and file pointer of the output file for the basic block graph. */ --- 60,79 ---- struct bb_info { unsigned int count_valid : 1; ! gcov_type succ_count; ! gcov_type pred_count; }; #define EDGE_INFO(e) ((struct edge_info *) (e)->aux) #define BB_INFO(b) ((struct bb_info *) (b)->aux) /* Keep all basic block indexes nonnegative in the gcov output. Index 0 ! is used for entry block, last block exit block. */ #define GCOV_INDEX_TO_BB(i) ((i) == 0 ? ENTRY_BLOCK_PTR \ ! : (((i) == n_basic_blocks + 1) \ ? EXIT_BLOCK_PTR : BASIC_BLOCK ((i)-1))) ! #define BB_TO_GCOV_INDEX(bb) ((bb) == ENTRY_BLOCK_PTR ? 0 \ ! : ((bb) == EXIT_BLOCK_PTR \ ? n_basic_blocks + 1 : (bb)->index + 1)) /* Name and file pointer of the output file for the basic block graph. */ *************** static FILE *bbg_file; *** 83,92 **** static FILE *da_file; ! /* Pointer of the output file for the basic block/line number map. */ static FILE *bb_file; ! /* Last source file name written to bb_file. */ static char *last_bb_file_name; --- 84,93 ---- static FILE *da_file; ! /* Pointer of the output file for the basic block/line number map. */ static FILE *bb_file; ! /* Last source file name written to bb_file. */ static char *last_bb_file_name; *************** static basic_block find_group PARAMS ((b *** 120,126 **** static void union_groups PARAMS ((basic_block, basic_block)); /* If non-zero, we need to output a constructor to set up the ! per-object-file data. */ static int need_func_profiler = 0; /* Add edge instrumentation code to the entire insn chain. --- 121,127 ---- static void union_groups PARAMS ((basic_block, basic_block)); /* If non-zero, we need to output a constructor to set up the ! per-object-file data. */ static int need_func_profiler = 0; /* Add edge instrumentation code to the entire insn chain. *************** instrument_edges (el) *** 151,157 **** if (rtl_dump_file) fprintf (rtl_dump_file, "Edge %d to %d instrumented%s\n", e->src->index, e->dest->index, ! e->flags & EDGE_CRITICAL ? " (and split)" : ""); need_func_profiler = 1; insert_insn_on_edge ( gen_edge_profiler (total_num_edges_instrumented --- 152,158 ---- if (rtl_dump_file) fprintf (rtl_dump_file, "Edge %d to %d instrumented%s\n", e->src->index, e->dest->index, ! EDGE_CRITICAL_P (e) ? " (and split)" : ""); need_func_profiler = 1; insert_insn_on_edge ( gen_edge_profiler (total_num_edges_instrumented *************** output_gcov_string (string, delimiter) *** 179,185 **** long delimiter; { long temp; ! /* Write a delimiter to indicate that a file name follows. */ __write_long (delimiter, bb_file, 4); --- 180,186 ---- long delimiter; { long temp; ! /* Write a delimiter to indicate that a file name follows. */ __write_long (delimiter, bb_file, 4); *************** compute_branch_probabilities () *** 216,234 **** int hist_br_prob[20]; int num_never_executed; int num_branches; - int bad_counts = 0; - struct bb_info *bb_infos; /* Attach extra info block to each bb. */ ! bb_infos = (struct bb_info *) ! xcalloc (n_basic_blocks + 2, sizeof (struct bb_info)); for (i = 0; i < n_basic_blocks + 2; i++) { basic_block bb = GCOV_INDEX_TO_BB (i); edge e; - bb->aux = &bb_infos[i]; for (e = bb->succ; e; e = e->succ_next) if (!EDGE_INFO (e)->ignore) BB_INFO (bb)->succ_count++; --- 217,231 ---- int hist_br_prob[20]; int num_never_executed; int num_branches; /* Attach extra info block to each bb. */ ! alloc_aux_for_blocks (sizeof (struct bb_info)); for (i = 0; i < n_basic_blocks + 2; i++) { basic_block bb = GCOV_INDEX_TO_BB (i); edge e; for (e = bb->succ; e; e = e->succ_next) if (!EDGE_INFO (e)->ignore) BB_INFO (bb)->succ_count++; *************** compute_branch_probabilities () *** 257,264 **** num_edges++; if (da_file) { ! long value; ! __read_long (&value, da_file, 8); e->count = value; } else --- 254,261 ---- num_edges++; if (da_file) { ! gcov_type value; ! __read_gcov_type (&value, da_file, 8); e->count = value; } else *************** compute_branch_probabilities () *** 266,276 **** EDGE_INFO (e)->count_valid = 1; BB_INFO (bb)->succ_count--; BB_INFO (e->dest)->pred_count--; } } if (rtl_dump_file) ! fprintf (rtl_dump_file, "%d edge counts read\n", num_edges); /* For every block in the file, - if every exit/entrance edge has a known count, then set the block count --- 263,280 ---- EDGE_INFO (e)->count_valid = 1; BB_INFO (bb)->succ_count--; BB_INFO (e->dest)->pred_count--; + if (rtl_dump_file) + { + fprintf (rtl_dump_file, "\nRead edge from %i to %i, count:", + bb->index, e->dest->index); + fprintf (rtl_dump_file, HOST_WIDEST_INT_PRINT_DEC, + (HOST_WIDEST_INT) e->count); + } } } if (rtl_dump_file) ! fprintf (rtl_dump_file, "\n%d edge counts read\n", num_edges); /* For every block in the file, - if every exit/entrance edge has a known count, then set the block count *************** compute_branch_probabilities () *** 304,310 **** if (bi->succ_count == 0) { edge e; ! int total = 0; for (e = bb->succ; e; e = e->succ_next) total += e->count; --- 308,314 ---- if (bi->succ_count == 0) { edge e; ! gcov_type total = 0; for (e = bb->succ; e; e = e->succ_next) total += e->count; *************** compute_branch_probabilities () *** 315,321 **** else if (bi->pred_count == 0) { edge e; ! int total = 0; for (e = bb->pred; e; e = e->pred_next) total += e->count; --- 319,325 ---- else if (bi->pred_count == 0) { edge e; ! gcov_type total = 0; for (e = bb->pred; e; e = e->pred_next) total += e->count; *************** compute_branch_probabilities () *** 329,335 **** if (bi->succ_count == 1) { edge e; ! int total = 0; /* One of the counts will be invalid, but it is zero, so adding it in also doesn't hurt. */ --- 333,339 ---- if (bi->succ_count == 1) { edge e; ! gcov_type total = 0; /* One of the counts will be invalid, but it is zero, so adding it in also doesn't hurt. */ *************** compute_branch_probabilities () *** 349,362 **** EDGE_INFO (e)->count_valid = 1; e->count = total; bi->succ_count--; ! BB_INFO (e->dest)->pred_count--; changes = 1; } if (bi->pred_count == 1) { edge e; ! int total = 0; /* One of the counts will be invalid, but it is zero, so adding it in also doesn't hurt. */ --- 353,366 ---- EDGE_INFO (e)->count_valid = 1; e->count = total; bi->succ_count--; ! BB_INFO (e->dest)->pred_count--; changes = 1; } if (bi->pred_count == 1) { edge e; ! gcov_type total = 0; /* One of the counts will be invalid, but it is zero, so adding it in also doesn't hurt. */ *************** compute_branch_probabilities () *** 376,382 **** EDGE_INFO (e)->count_valid = 1; e->count = total; bi->pred_count--; ! BB_INFO (e->src)->succ_count--; changes = 1; } --- 380,386 ---- EDGE_INFO (e)->count_valid = 1; e->count = total; bi->pred_count--; ! BB_INFO (e->src)->succ_count--; changes = 1; } *************** compute_branch_probabilities () *** 407,494 **** num_never_executed = 0; num_branches = 0; ! for (i = 0; i < n_basic_blocks; i++) { ! basic_block bb = BASIC_BLOCK (i); edge e; ! rtx insn; ! int total; rtx note; total = bb->count; ! if (!total) ! continue; ! for (e = bb->succ; e; e = e->succ_next) { ! if (any_condjump_p (e->src->end) ! && !EDGE_INFO (e)->ignore ! && !(e->flags & (EDGE_ABNORMAL | EDGE_ABNORMAL_CALL | EDGE_FAKE))) { int prob; ! /* This calculates the branch probability as an integer between ! 0 and REG_BR_PROB_BASE, properly rounded to the nearest ! integer. Perform the arithmetic in double to avoid ! overflowing the range of ints. */ ! if (total == 0) ! prob = -1; ! else ! { ! prob = (((double)e->count * REG_BR_PROB_BASE) ! + (total >> 1)) / total; ! if (prob < 0 || prob > REG_BR_PROB_BASE) ! { ! if (rtl_dump_file) ! fprintf (rtl_dump_file, "bad count: prob for %d-%d thought to be %d (forcibly normalized)\n", ! e->src->index, e->dest->index, prob); ! bad_counts = 1; ! prob = REG_BR_PROB_BASE / 2; ! } ! ! /* Match up probability with JUMP pattern. */ ! if (e->flags & EDGE_FALLTHRU) ! prob = REG_BR_PROB_BASE - prob; ! } ! ! if (prob == -1) ! num_never_executed++; ! else ! { ! int index = prob * 20 / REG_BR_PROB_BASE; ! if (index == 20) ! index = 19; ! hist_br_prob[index]++; ! } ! num_branches++; ! ! note = find_reg_note (e->src->end, REG_BR_PROB, 0); /* There may be already note put by some other pass, such ! as builtin_expect expander. */ if (note) XEXP (note, 0) = GEN_INT (prob); else ! REG_NOTES (e->src->end) = gen_rtx_EXPR_LIST (REG_BR_PROB, GEN_INT (prob), ! REG_NOTES (e->src->end)); } } ! ! /* Add a REG_EXEC_COUNT note to the first instruction of this block. */ ! insn = next_nonnote_insn (bb->head); ! ! if (GET_CODE (bb->head) == CODE_LABEL) ! insn = next_nonnote_insn (insn); ! ! /* Avoid crash on empty basic blocks. */ ! if (insn && INSN_P (insn)) ! REG_NOTES (insn) ! = gen_rtx_EXPR_LIST (REG_EXEC_COUNT, GEN_INT (total), ! REG_NOTES (insn)); } - - /* This should never happen. */ - if (bad_counts) - warning ("Arc profiling: some edge counts were bad."); if (rtl_dump_file) { --- 411,499 ---- num_never_executed = 0; num_branches = 0; ! for (i = 0; i <= n_basic_blocks + 1; i++) { ! basic_block bb = GCOV_INDEX_TO_BB (i); edge e; ! gcov_type total; rtx note; total = bb->count; ! if (total) { ! for (e = bb->succ; e; e = e->succ_next) ! { ! e->probability = (e->count * REG_BR_PROB_BASE + total / 2) / total; ! if (e->probability < 0 || e->probability > REG_BR_PROB_BASE) ! { ! error ("corrupted profile info: prob for %d-%d thought to be %d", ! e->src->index, e->dest->index, e->probability); ! e->probability = REG_BR_PROB_BASE / 2; ! } ! } ! if (bb->index >= 0 ! && any_condjump_p (bb->end) ! && bb->succ->succ_next) { int prob; ! edge e; ! int index; ! /* Find the branch edge. It is possible that we do have fake ! edges here. */ ! for (e = bb->succ; e->flags & (EDGE_FAKE | EDGE_FALLTHRU); ! e = e->succ_next) ! continue; /* Loop body has been intentionally left blank. */ ! ! prob = e->probability; ! index = prob * 20 / REG_BR_PROB_BASE; ! ! if (index == 20) ! index = 19; ! hist_br_prob[index]++; ! ! note = find_reg_note (bb->end, REG_BR_PROB, 0); /* There may be already note put by some other pass, such ! as builtin_expect expander. */ if (note) XEXP (note, 0) = GEN_INT (prob); else ! REG_NOTES (bb->end) = gen_rtx_EXPR_LIST (REG_BR_PROB, GEN_INT (prob), ! REG_NOTES (bb->end)); ! num_branches++; } } ! /* Otherwise distribute the probabilities evenly so we get sane sum. ! Use simple heuristics that if there are normal edges, give all abnormals ! frequency of 0, otherwise distribute the frequency over abnormals ! (this is the case of noreturn calls). */ ! else ! { ! for (e = bb->succ; e; e = e->succ_next) ! if (!(e->flags & (EDGE_COMPLEX | EDGE_FAKE))) ! total ++; ! if (total) ! { ! for (e = bb->succ; e; e = e->succ_next) ! if (!(e->flags & (EDGE_COMPLEX | EDGE_FAKE))) ! e->probability = REG_BR_PROB_BASE / total; ! else ! e->probability = 0; ! } ! else ! { ! for (e = bb->succ; e; e = e->succ_next) ! total ++; ! for (e = bb->succ; e; e = e->succ_next) ! e->probability = REG_BR_PROB_BASE / total; ! } ! if (bb->index >= 0 ! && any_condjump_p (bb->end) ! && bb->succ->succ_next) ! num_branches++, num_never_executed; ! } } if (rtl_dump_file) { *************** compute_branch_probabilities () *** 510,516 **** fputc ('\n', rtl_dump_file); } ! free (bb_infos); } /* Instrument and/or analyze program behavior based on program flow graph. --- 515,521 ---- fputc ('\n', rtl_dump_file); } ! free_aux_for_blocks (); } /* Instrument and/or analyze program behavior based on program flow graph. *************** branch_prob () *** 534,540 **** { int i; int num_edges, ignored_edges; - struct edge_info *edge_infos; struct edge_list *el; /* Start of a function. */ --- 539,544 ---- *************** branch_prob () *** 543,565 **** total_num_times_called++; /* We can't handle cyclic regions constructed using abnormal edges. To avoid these we replace every source of abnormal edge by a fake edge from entry node and every destination by fake edge to exit. This keeps graph acyclic and our calculation exact for all normal edges except for exit and entrance ones. ! We also add fake exit edges for each call and asm statement in the basic, since it may not return. */ for (i = 0; i < n_basic_blocks ; i++) { - rtx insn; int need_exit_edge = 0, need_entry_edge = 0; int have_exit_edge = 0, have_entry_edge = 0; basic_block bb = BASIC_BLOCK (i); edge e; for (e = bb->succ; e; e = e->succ_next) { if ((e->flags & (EDGE_ABNORMAL | EDGE_ABNORMAL_CALL)) --- 547,600 ---- total_num_times_called++; + flow_call_edges_add (NULL); + add_noreturn_fake_exit_edges (); + /* We can't handle cyclic regions constructed using abnormal edges. To avoid these we replace every source of abnormal edge by a fake edge from entry node and every destination by fake edge to exit. This keeps graph acyclic and our calculation exact for all normal edges except for exit and entrance ones. ! We also add fake exit edges for each call and asm statement in the basic, since it may not return. */ for (i = 0; i < n_basic_blocks ; i++) { int need_exit_edge = 0, need_entry_edge = 0; int have_exit_edge = 0, have_entry_edge = 0; basic_block bb = BASIC_BLOCK (i); + rtx insn; edge e; + /* Add fake edges from entry block to the call insns that may return + twice. The CFG is not quite correct then, as call insn plays more + role of CODE_LABEL, but for our purposes, everything should be OK, + as we never insert code to the beggining of basic block. */ + for (insn = bb->head; insn != NEXT_INSN (bb->end); + insn = NEXT_INSN (insn)) + { + if (GET_CODE (insn) == CALL_INSN + && find_reg_note (insn, REG_SETJMP, NULL)) + { + if (GET_CODE (bb->head) == CODE_LABEL + || insn != NEXT_INSN (bb->head)) + { + e = split_block (bb, PREV_INSN (insn)); + make_edge (ENTRY_BLOCK_PTR, e->dest, EDGE_FAKE); + break; + } + else + { + /* We should not get abort here, as call to setjmp should not + be the very first instruction of function. */ + if (!i) + abort (); + make_edge (ENTRY_BLOCK_PTR, bb, EDGE_FAKE); + } + } + } + for (e = bb->succ; e; e = e->succ_next) { if ((e->flags & (EDGE_ABNORMAL | EDGE_ABNORMAL_CALL)) *************** branch_prob () *** 577,639 **** have_entry_edge = 1; } - /* ??? Not strictly needed unless flag_test_coverage, but adding - them anyway keeps the .da file consistent. */ - /* ??? Currently inexact for basic blocks with multiple calls. - We need to split blocks here. */ - for (insn = bb->head; - insn != NEXT_INSN (bb->end); - insn = NEXT_INSN (insn)) - { - rtx set; - if (GET_CODE (insn) == CALL_INSN && !CONST_CALL_P (insn)) - need_exit_edge = 1; - else if (GET_CODE (insn) == INSN) - { - set = PATTERN (insn); - if (GET_CODE (set) == PARALLEL) - set = XVECEXP (set, 0, 0); - if ((GET_CODE (set) == ASM_OPERANDS && MEM_VOLATILE_P (set)) - || GET_CODE (set) == ASM_INPUT) - need_exit_edge = 1; - } - } - if (need_exit_edge && !have_exit_edge) { if (rtl_dump_file) fprintf (rtl_dump_file, "Adding fake exit edge to bb %i\n", bb->index); ! make_edge (NULL, bb, EXIT_BLOCK_PTR, EDGE_FAKE); } if (need_entry_edge && !have_entry_edge) { if (rtl_dump_file) fprintf (rtl_dump_file, "Adding fake entry edge to bb %i\n", bb->index); ! make_edge (NULL, ENTRY_BLOCK_PTR, bb, EDGE_FAKE); } } el = create_edge_list (); num_edges = NUM_EDGES (el); ! edge_infos = (struct edge_info *) ! xcalloc (num_edges, sizeof (struct edge_info)); ignored_edges = 0; for (i = 0 ; i < num_edges ; i++) { edge e = INDEX_EDGE (el, i); e->count = 0; - e->aux = &edge_infos[i]; /* Mark edges we've replaced by fake edges above as ignored. */ if ((e->flags & (EDGE_ABNORMAL | EDGE_ABNORMAL_CALL)) && e->src != ENTRY_BLOCK_PTR && e->dest != EXIT_BLOCK_PTR) ! { EDGE_INFO (e)->ignore = 1; ignored_edges++; ! } } #ifdef ENABLE_CHECKING --- 612,650 ---- have_entry_edge = 1; } if (need_exit_edge && !have_exit_edge) { if (rtl_dump_file) fprintf (rtl_dump_file, "Adding fake exit edge to bb %i\n", bb->index); ! make_edge (bb, EXIT_BLOCK_PTR, EDGE_FAKE); } if (need_entry_edge && !have_entry_edge) { if (rtl_dump_file) fprintf (rtl_dump_file, "Adding fake entry edge to bb %i\n", bb->index); ! make_edge (ENTRY_BLOCK_PTR, bb, EDGE_FAKE); } } el = create_edge_list (); num_edges = NUM_EDGES (el); ! alloc_aux_for_edges (sizeof (struct edge_info)); ignored_edges = 0; for (i = 0 ; i < num_edges ; i++) { edge e = INDEX_EDGE (el, i); e->count = 0; /* Mark edges we've replaced by fake edges above as ignored. */ if ((e->flags & (EDGE_ABNORMAL | EDGE_ABNORMAL_CALL)) && e->src != ENTRY_BLOCK_PTR && e->dest != EXIT_BLOCK_PTR) ! { EDGE_INFO (e)->ignore = 1; ignored_edges++; ! } } #ifdef ENABLE_CHECKING *************** branch_prob () *** 708,728 **** /* Create spanning tree from basic block graph, mark each edge that is on the spanning tree. We insert as many abnormal and critical edges ! as possible to minimize number of edge splits necesary. */ find_spanning_tree (el); /* Fake edges that are not on the tree will not be instrumented, so ! mark them ignored. */ for (i = 0; i < num_edges; i++) { edge e = INDEX_EDGE (el, i); struct edge_info *inf = EDGE_INFO (e); if ((e->flags & EDGE_FAKE) && !inf->ignore && !inf->on_tree) ! { ! inf->ignore = 1; ! ignored_edges++; ! } } total_num_blocks += n_basic_blocks + 2; --- 719,739 ---- /* Create spanning tree from basic block graph, mark each edge that is on the spanning tree. We insert as many abnormal and critical edges ! as possible to minimize number of edge splits necessary. */ find_spanning_tree (el); /* Fake edges that are not on the tree will not be instrumented, so ! mark them ignored. */ for (i = 0; i < num_edges; i++) { edge e = INDEX_EDGE (el, i); struct edge_info *inf = EDGE_INFO (e); if ((e->flags & EDGE_FAKE) && !inf->ignore && !inf->on_tree) ! { ! inf->ignore = 1; ! ignored_edges++; ! } } total_num_blocks += n_basic_blocks + 2; *************** branch_prob () *** 779,785 **** } } } ! /* Emit fake loopback edge for EXIT block to maitain compatibility with old gcov format. */ __write_long (1, bbg_file, 4); __write_long (0, bbg_file, 4); --- 790,796 ---- } } } ! /* Emit fake loopback edge for EXIT block to maintain compatibility with old gcov format. */ __write_long (1, bbg_file, 4); __write_long (0, bbg_file, 4); *************** branch_prob () *** 802,813 **** } remove_fake_edges (); ! free (edge_infos); free_edge_list (el); } /* Union find algorithm implementation for the basic blocks using ! aux fields. */ static basic_block find_group (bb) --- 813,830 ---- } remove_fake_edges (); ! /* Re-merge split basic blocks and the mess introduced by ! insert_insn_on_edge. */ ! cleanup_cfg (profile_arc_flag ? CLEANUP_EXPENSIVE : 0); ! if (rtl_dump_file) ! dump_flow_info (rtl_dump_file); ! ! free_aux_for_edges (); free_edge_list (el); } /* Union find algorithm implementation for the basic blocks using ! aux fields. */ static basic_block find_group (bb) *************** find_spanning_tree (el) *** 883,889 **** for (i = 0; i < num_edges; i++) { edge e = INDEX_EDGE (el, i); ! if ((e->flags & EDGE_CRITICAL) && !EDGE_INFO (e)->ignore && (find_group (e->src) != find_group (e->dest))) { --- 900,906 ---- for (i = 0; i < num_edges; i++) { edge e = INDEX_EDGE (el, i); ! if ((EDGE_CRITICAL_P (e)) && !EDGE_INFO (e)->ignore && (find_group (e->src) != find_group (e->dest))) { *************** find_spanning_tree (el) *** 903,908 **** --- 920,930 ---- union_groups (e->src, e->dest); } } + + EXIT_BLOCK_PTR->aux = NULL; + ENTRY_BLOCK_PTR->aux = NULL; + for (i = 0; i < n_basic_blocks; i++) + BASIC_BLOCK (i)->aux = NULL; } /* Perform file-level initialization for branch-prob processing. */ *************** init_branch_prob (filename) *** 950,956 **** strip_off_ending (da_file_name, len); strcat (da_file_name, ".da"); if ((da_file = fopen (da_file_name, "rb")) == 0) ! warning ("file %s not found, execution counts assumed to be zero.", da_file_name); /* The first word in the .da file gives the number of instrumented --- 972,978 ---- strip_off_ending (da_file_name, len); strcat (da_file_name, ".da"); if ((da_file = fopen (da_file_name, "rb")) == 0) ! warning ("file %s not found, execution counts assumed to be zero", da_file_name); /* The first word in the .da file gives the number of instrumented *************** end_branch_prob () *** 995,1006 **** long temp; /* This seems slightly dangerous, as it presumes the EOF flag will not be set until an attempt is made to read ! past the end of the file. */ if (feof (da_file)) ! warning (".da file contents exhausted too early\n"); /* Should be at end of file now. */ if (__read_long (&temp, da_file, 8) == 0) ! warning (".da file contents not exhausted\n"); fclose (da_file); } } --- 1017,1028 ---- long temp; /* This seems slightly dangerous, as it presumes the EOF flag will not be set until an attempt is made to read ! past the end of the file. */ if (feof (da_file)) ! error (".da file contents exhausted too early"); /* Should be at end of file now. */ if (__read_long (&temp, da_file, 8) == 0) ! error (".da file contents not exhausted"); fclose (da_file); } } *************** static rtx *** 1061,1078 **** gen_edge_profiler (edgeno) int edgeno; { ! enum machine_mode mode = mode_for_size (LONG_TYPE_SIZE, MODE_INT, 0); rtx mem_ref, tmp; rtx sequence; start_sequence (); tmp = force_reg (Pmode, profiler_label); ! tmp = plus_constant (tmp, LONG_TYPE_SIZE / BITS_PER_UNIT * edgeno); mem_ref = validize_mem (gen_rtx_MEM (mode, tmp)); ! tmp = expand_binop (mode, add_optab, mem_ref, const1_rtx, ! mem_ref, 0, OPTAB_WIDEN); if (tmp != mem_ref) emit_move_insn (copy_rtx (mem_ref), tmp); --- 1083,1100 ---- gen_edge_profiler (edgeno) int edgeno; { ! enum machine_mode mode = mode_for_size (GCOV_TYPE_SIZE, MODE_INT, 0); rtx mem_ref, tmp; rtx sequence; start_sequence (); tmp = force_reg (Pmode, profiler_label); ! tmp = plus_constant (tmp, GCOV_TYPE_SIZE / BITS_PER_UNIT * edgeno); mem_ref = validize_mem (gen_rtx_MEM (mode, tmp)); ! tmp = expand_simple_binop (mode, PLUS, mem_ref, const1_rtx, ! mem_ref, 0, OPTAB_WIDEN); if (tmp != mem_ref) emit_move_insn (copy_rtx (mem_ref), tmp); *************** gen_edge_profiler (edgeno) *** 1083,1089 **** } /* Output code for a constructor that will invoke __bb_init_func, if ! this has not already been done. */ void output_func_start_profiler () --- 1105,1111 ---- } /* Output code for a constructor that will invoke __bb_init_func, if ! this has not already been done. */ void output_func_start_profiler () *************** output_func_start_profiler () *** 1093,1122 **** char buf[20]; const char *cfnname; rtx table_address; ! enum machine_mode mode = mode_for_size (LONG_TYPE_SIZE, MODE_INT, 0); int save_flag_inline_functions = flag_inline_functions; int save_flag_test_coverage = flag_test_coverage; int save_profile_arc_flag = profile_arc_flag; int save_flag_branch_probabilities = flag_branch_probabilities; /* It's either already been output, or we don't need it because we're ! not doing profile-edges. */ if (! need_func_profiler) return; need_func_profiler = 0; /* Synthesize a constructor function to invoke __bb_init_func with a ! pointer to this object file's profile block. */ /* Try and make a unique name given the "file function name". ! And no, I don't like this either. */ fnname = get_file_function_name ('I'); cfnname = IDENTIFIER_POINTER (fnname); ! name = xmalloc (strlen (cfnname) + 5); ! sprintf (name, "%sGCOV",cfnname); fnname = get_identifier (name); free (name); --- 1115,1143 ---- char buf[20]; const char *cfnname; rtx table_address; ! enum machine_mode mode = mode_for_size (GCOV_TYPE_SIZE, MODE_INT, 0); int save_flag_inline_functions = flag_inline_functions; int save_flag_test_coverage = flag_test_coverage; int save_profile_arc_flag = profile_arc_flag; int save_flag_branch_probabilities = flag_branch_probabilities; /* It's either already been output, or we don't need it because we're ! not doing profile-edges. */ if (! need_func_profiler) return; need_func_profiler = 0; /* Synthesize a constructor function to invoke __bb_init_func with a ! pointer to this object file's profile block. */ /* Try and make a unique name given the "file function name". ! And no, I don't like this either. */ fnname = get_file_function_name ('I'); cfnname = IDENTIFIER_POINTER (fnname); ! name = concat (cfnname, "GCOV", NULL); fnname = get_identifier (name); free (name); *************** output_func_start_profiler () *** 1124,1136 **** build_function_type (void_type_node, NULL_TREE)); DECL_EXTERNAL (fndecl) = 0; - #if defined(ASM_OUTPUT_CONSTRUCTOR) && defined(ASM_OUTPUT_DESTRUCTOR) /* It can be a static function as long as collect2 does not have to scan the object file to find its ctor/dtor routine. */ ! TREE_PUBLIC (fndecl) = 0; ! #else ! TREE_PUBLIC (fndecl) = 1; ! #endif DECL_RESULT (fndecl) = build_decl (RESULT_DECL, NULL_TREE, void_type_node); --- 1145,1155 ---- build_function_type (void_type_node, NULL_TREE)); DECL_EXTERNAL (fndecl) = 0; /* It can be a static function as long as collect2 does not have to scan the object file to find its ctor/dtor routine. */ ! TREE_PUBLIC (fndecl) = ! targetm.have_ctors_dtors; ! ! TREE_USED (fndecl) = 1; DECL_RESULT (fndecl) = build_decl (RESULT_DECL, NULL_TREE, void_type_node); *************** output_func_start_profiler () *** 1144,1154 **** pushlevel (0); expand_function_start (fndecl, 0); ! /* Actually generate the code to call __bb_init_func. */ ASM_GENERATE_INTERNAL_LABEL (buf, "LPBX", 0); table_address = force_reg (Pmode, gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (buf))); ! emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__bb_init_func"), 0, mode, 1, table_address, Pmode); expand_function_end (input_filename, lineno, 0); --- 1163,1173 ---- pushlevel (0); expand_function_start (fndecl, 0); ! /* Actually generate the code to call __bb_init_func. */ ASM_GENERATE_INTERNAL_LABEL (buf, "LPBX", 0); table_address = force_reg (Pmode, gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (buf))); ! emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__bb_init_func"), LCT_NORMAL, mode, 1, table_address, Pmode); expand_function_end (input_filename, lineno, 0); *************** output_func_start_profiler () *** 1178,1182 **** fflush (asm_out_file); current_function_decl = NULL_TREE; ! assemble_constructor (IDENTIFIER_POINTER (DECL_NAME (fndecl))); } --- 1197,1203 ---- fflush (asm_out_file); current_function_decl = NULL_TREE; ! if (targetm.have_ctors_dtors) ! (* targetm.asm_out.constructor) (XEXP (DECL_RTL (fndecl), 0), ! DEFAULT_INIT_PRIORITY); } diff -Nrc3pad gcc-3.0.4/gcc/protoize.c gcc-3.1/gcc/protoize.c *** gcc-3.0.4/gcc/protoize.c Fri Mar 16 01:02:46 2001 --- gcc-3.1/gcc/protoize.c Wed Apr 17 03:20:38 2002 *************** *** 1,27 **** /* Protoize program - Original version by Ron Guilmette (rfg@segfault.us.com). Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" #include "system.h" #include "intl.h" #include #include --- 1,28 ---- /* Protoize program - Original version by Ron Guilmette (rfg@segfault.us.com). Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" #include "system.h" #include "intl.h" + #include "cppdefault.h" #include #include *************** Boston, MA 02111-1307, USA. */ *** 34,40 **** #undef abort #include "version.h" ! /* Include getopt.h for the sake of getopt_long. */ #include "getopt.h" /* Macro to see if the path elements match. */ --- 35,41 ---- #undef abort #include "version.h" ! /* Include getopt.h for the sake of getopt_long. */ #include "getopt.h" /* Macro to see if the path elements match. */ *************** static char * syscalls_absolute_filename *** 167,174 **** /* Type of the structure that holds information about macro unexpansions. */ struct unexpansion_struct { ! const char *expanded; ! const char *contracted; }; typedef struct unexpansion_struct unexpansion; --- 168,175 ---- /* Type of the structure that holds information about macro unexpansions. */ struct unexpansion_struct { ! const char *const expanded; ! const char *const contracted; }; typedef struct unexpansion_struct unexpansion; *************** static const unexpansion unexpansions[] *** 194,247 **** static const int hash_mask = (HASH_TABLE_SIZE - 1); - /* Make a table of default system include directories - just as it is done in cpp. */ - - #ifndef STANDARD_INCLUDE_DIR - #define STANDARD_INCLUDE_DIR "/usr/include" - #endif - - #ifndef LOCAL_INCLUDE_DIR - #define LOCAL_INCLUDE_DIR "/usr/local/include" - #endif - - struct default_include { const char *fname; - const char *component; - int x1, x2; } include_defaults[] - #ifdef INCLUDE_DEFAULTS - = INCLUDE_DEFAULTS; - #else - = { - /* Pick up GNU C++ specific include files. */ - { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 }, - #ifdef CROSS_COMPILE - /* This is the dir for fixincludes. Put it just before - the files that we fix. */ - { GCC_INCLUDE_DIR, "GCC", 0, 0 }, - /* For cross-compilation, this dir name is generated - automatically in Makefile.in. */ - { CROSS_INCLUDE_DIR, 0, 0, 0 }, - /* This is another place that the target system's headers might be. */ - { TOOL_INCLUDE_DIR, "BINUTILS", 0, 0 }, - #else /* not CROSS_COMPILE */ - /* This should be /use/local/include and should come before - the fixincludes-fixed header files. */ - { LOCAL_INCLUDE_DIR, 0, 0, 1 }, - /* This is here ahead of GCC_INCLUDE_DIR because assert.h goes here. - Likewise, behind LOCAL_INCLUDE_DIR, where glibc puts its assert.h. */ - { TOOL_INCLUDE_DIR, "BINUTILS", 0, 0 }, - /* This is the dir for fixincludes. Put it just before - the files that we fix. */ - { GCC_INCLUDE_DIR, "GCC", 0, 0 }, - /* Some systems have an extra dir of include files. */ - #ifdef SYSTEM_INCLUDE_DIR - { SYSTEM_INCLUDE_DIR, 0, 0, 0 }, - #endif - { STANDARD_INCLUDE_DIR, 0, 0, 0}, - #endif /* not CROSS_COMPILE */ - { 0, 0, 0, 0} - }; - #endif /* no INCLUDE_DEFAULTS */ /* Datatype for lists of directories or filenames. */ struct string_list --- 195,200 ---- *************** static const char * const other_var_styl *** 278,284 **** static const char * const other_var_style = "varargs"; /* Note that this is a string containing the expansion of va_alist. But in `main' we discard all but the first token. */ ! static const char *varargs_style_indicator = STRINGIFY (va_alist); #endif /* !defined (UNPROTOIZE) */ /* The following two types are used to create hash tables. In this program, --- 231,237 ---- static const char * const other_var_style = "varargs"; /* Note that this is a string containing the expansion of va_alist. But in `main' we discard all but the first token. */ ! static const char *varargs_style_indicator = STRINGX (va_alist); #endif /* !defined (UNPROTOIZE) */ /* The following two types are used to create hash tables. In this program, *************** static char * saved_repl_write_ptr; *** 564,582 **** static void notice VPARAMS ((const char *msgid, ...)) { ! #ifndef ANSI_PROTOTYPES ! const char *msgid; ! #endif ! va_list ap; ! ! VA_START (ap, msgid); ! ! #ifndef ANSI_PROTOTYPES ! msgid = va_arg (ap, const char *); ! #endif vfprintf (stderr, _(msgid), ap); ! va_end (ap); } --- 517,527 ---- static void notice VPARAMS ((const char *msgid, ...)) { ! VA_OPEN (ap, msgid); ! VA_FIXEDARG (ap, const char *, msgid); vfprintf (stderr, _(msgid), ap); ! VA_CLOSE (ap); } *************** safe_read (desc, ptr, len) *** 663,669 **** } if (nchars == 0) break; ! /* Arithmetic on void pointers is a gcc extention. */ ptr = (char *) ptr + nchars; left -= nchars; } --- 608,614 ---- } if (nchars == 0) break; ! /* Arithmetic on void pointers is a gcc extension. */ ptr = (char *) ptr + nchars; left -= nchars; } *************** safe_write (desc, ptr, len, out_fname) *** 693,699 **** pname, shortpath (NULL, out_fname), xstrerror (errno_val)); return; } ! /* Arithmetic on void pointers is a gcc extention. */ ptr = (char *) ptr + written; len -= written; } --- 638,644 ---- pname, shortpath (NULL, out_fname), xstrerror (errno_val)); return; } ! /* Arithmetic on void pointers is a gcc extension. */ ptr = (char *) ptr + written; len -= written; } *************** static int *** 724,730 **** is_id_char (ch) int ch; { ! return (ISALNUM (ch) || (ch == '_') || (ch == '$')); } /* Give a message indicating the proper way to invoke this program and then --- 669,675 ---- is_id_char (ch) int ch; { ! return (ISIDNUM (ch) || (ch == '$')); } /* Give a message indicating the proper way to invoke this program and then *************** static int *** 751,762 **** in_system_include_dir (path) const char *path; { ! struct default_include *p; if (! is_abspath (path)) abort (); /* Must be an absolutized filename. */ ! for (p = include_defaults; p->fname; p++) if (!strncmp (path, p->fname, strlen (p->fname)) && IS_DIR_SEPARATOR (path[strlen (p->fname)])) return 1; --- 696,707 ---- in_system_include_dir (path) const char *path; { ! const struct default_include *p; if (! is_abspath (path)) abort (); /* Must be an absolutized filename. */ ! for (p = cpp_include_defaults; p->fname; p++) if (!strncmp (path, p->fname, strlen (p->fname)) && IS_DIR_SEPARATOR (path[strlen (p->fname)])) return 1; *************** unexpand_if_needed (aux_info_line) *** 1143,1149 **** strcpy (copy_p, unexp_p->contracted); copy_p += size; ! /* Assume the there will not be another replacement required within the text just replaced. */ s += len; --- 1088,1094 ---- strcpy (copy_p, unexp_p->contracted); copy_p += size; ! /* Assume that there will not be another replacement required within the text just replaced. */ s += len; *************** continue_outer: ; *** 1173,1179 **** return (got_unexpanded ? savestring (line_buf, copy_p - line_buf) : 0); } ! /* Return 1 if pathname is absolute. */ static int is_abspath (path) --- 1118,1124 ---- return (got_unexpanded ? savestring (line_buf, copy_p - line_buf) : 0); } ! /* Return 1 if pathname is absolute. */ static int is_abspath (path) *************** abspath (cwd, rel_filename) *** 1203,1209 **** const char *rel_filename; { /* Setup the current working directory as needed. */ ! const char *cwd2 = (cwd) ? cwd : cwd_buffer; char *const abs_buffer = (char *) alloca (strlen (cwd2) + strlen (rel_filename) + 2); char *endp = abs_buffer; --- 1148,1154 ---- const char *rel_filename; { /* Setup the current working directory as needed. */ ! const char *const cwd2 = (cwd) ? cwd : cwd_buffer; char *const abs_buffer = (char *) alloca (strlen (cwd2) + strlen (rel_filename) + 2); char *endp = abs_buffer; *************** start_over: ; *** 2237,2243 **** fd_flags = O_RDONLY; #ifdef O_BINARY ! /* Use binary mode to avoid having to deal with different EOL characters. */ fd_flags |= O_BINARY; #endif if ((aux_info_file = open (aux_info_filename, fd_flags, 0444 )) == -1) --- 2182,2188 ---- fd_flags = O_RDONLY; #ifdef O_BINARY ! /* Use binary mode to avoid having to deal with different EOL characters. */ fd_flags |= O_BINARY; #endif if ((aux_info_file = open (aux_info_filename, fd_flags, 0444 )) == -1) *************** reverse_def_dec_list (hp) *** 2475,2494 **** { file_info *file_p = hp->fip; def_dec_info *prev = NULL; ! def_dec_info *current = (def_dec_info *)file_p->defs_decs; if (!current) return; /* no list to reverse */ prev = current; ! if (! (current = (def_dec_info *)current->next_in_file)) return; /* can't reverse a single list element */ prev->next_in_file = NULL; while (current) { ! def_dec_info *next = (def_dec_info *)current->next_in_file; current->next_in_file = prev; prev = current; --- 2420,2439 ---- { file_info *file_p = hp->fip; def_dec_info *prev = NULL; ! def_dec_info *current = (def_dec_info *) file_p->defs_decs; if (!current) return; /* no list to reverse */ prev = current; ! if (! (current = (def_dec_info *) current->next_in_file)) return; /* can't reverse a single list element */ prev->next_in_file = NULL; while (current) { ! def_dec_info *next = (def_dec_info *) current->next_in_file; current->next_in_file = prev; prev = current; *************** find_extern_def (head, user) *** 2546,2552 **** code being converted contains its own definition of a function which could have been supplied by libc.a. In such cases, we should avoid issuing the normal warning, and defer to the definition given in the ! user's own code. */ for (dd_p = head; dd_p; dd_p = dd_p->next_for_func) if (dd_p->is_func_def && !dd_p->is_static) --- 2491,2497 ---- code being converted contains its own definition of a function which could have been supplied by libc.a. In such cases, we should avoid issuing the normal warning, and defer to the definition given in the ! user's own code. */ for (dd_p = head; dd_p; dd_p = dd_p->next_for_func) if (dd_p->is_func_def && !dd_p->is_static) *************** connect_defs_and_decs (hp) *** 2833,2839 **** for (dd_p2 = dd_p->next_for_func; dd_p2; dd_p2 = dd_p2->next_for_func) if (!dd_p2->is_func_def && dd_p2->is_static && !dd_p2->definition && (dd_p2->file == dd_p->file)) ! ((NONCONST def_dec_info *)dd_p2)->definition = dd_p->definition; } /* Convert any dummy (-1) definitions we created in the step above back to --- 2778,2784 ---- for (dd_p2 = dd_p->next_for_func; dd_p2; dd_p2 = dd_p2->next_for_func) if (!dd_p2->is_func_def && dd_p2->is_static && !dd_p2->definition && (dd_p2->file == dd_p->file)) ! ((NONCONST def_dec_info *) dd_p2)->definition = dd_p->definition; } /* Convert any dummy (-1) definitions we created in the step above back to *************** find_rightmost_formals_list (clean_text_ *** 3468,3474 **** by an alphabetic character, while others *cannot* validly be followed by such characters. */ ! if ((ch == '{') || ISALPHA ((unsigned char)ch)) break; /* At this point, we have found a right paren, but we know that it is --- 3413,3419 ---- by an alphabetic character, while others *cannot* validly be followed by such characters. */ ! if ((ch == '{') || ISALPHA ((unsigned char) ch)) break; /* At this point, we have found a right paren, but we know that it is *************** add_global_decls (file_p, clean_text_p) *** 3653,3659 **** /* Now write out full prototypes for all of the things that had been implicitly declared in this file (but only those for which we were actually able to find unique matching definitions). Avoid duplicates ! by marking things that we write out as we go. */ { int some_decls_added = 0; --- 3598,3604 ---- /* Now write out full prototypes for all of the things that had been implicitly declared in this file (but only those for which we were actually able to find unique matching definitions). Avoid duplicates ! by marking things that we write out as we go. */ { int some_decls_added = 0; *************** edit_fn_definition (def_dec_p, clean_tex *** 3814,3820 **** have_newlines |= (*scan_orig == '\n'); /* Leave identical whitespace alone. */ if (!ISSPACE ((const unsigned char)*scan_orig)) ! *((NONCONST char *)scan_orig) = ' '; /* identical - so whiteout */ } else have_flotsam = 1; --- 3759,3765 ---- have_newlines |= (*scan_orig == '\n'); /* Leave identical whitespace alone. */ if (!ISSPACE ((const unsigned char)*scan_orig)) ! *((NONCONST char *) scan_orig) = ' '; /* identical - so whiteout */ } else have_flotsam = 1; *************** do_cleaning (new_clean_text_base, new_cl *** 3885,3891 **** while (scan_p[1] != '\'' || scan_p[0] == '\\') { if (scan_p[0] == '\\' ! && !ISSPACE ((const unsigned char)scan_p[1])) scan_p[1] = ' '; if (!ISSPACE ((const unsigned char)*scan_p)) *scan_p = ' '; --- 3830,3836 ---- while (scan_p[1] != '\'' || scan_p[0] == '\\') { if (scan_p[0] == '\\' ! && !ISSPACE ((const unsigned char) scan_p[1])) scan_p[1] = ' '; if (!ISSPACE ((const unsigned char)*scan_p)) *scan_p = ' '; *************** do_cleaning (new_clean_text_base, new_cl *** 3900,3906 **** while (scan_p[1] != '"' || scan_p[0] == '\\') { if (scan_p[0] == '\\' ! && !ISSPACE ((const unsigned char)scan_p[1])) scan_p[1] = ' '; if (!ISSPACE ((const unsigned char)*scan_p)) *scan_p = ' '; --- 3845,3851 ---- while (scan_p[1] != '"' || scan_p[0] == '\\') { if (scan_p[0] == '\\' ! && !ISSPACE ((const unsigned char) scan_p[1])) scan_p[1] = ' '; if (!ISSPACE ((const unsigned char)*scan_p)) *scan_p = ' '; *************** edit_file (hp) *** 4191,4197 **** fd_flags = O_RDONLY; #ifdef O_BINARY ! /* Use binary mode to avoid having to deal with different EOL characters. */ fd_flags |= O_BINARY; #endif if ((input_file = open (convert_filename, fd_flags, 0444)) == -1) --- 4136,4142 ---- fd_flags = O_RDONLY; #ifdef O_BINARY ! /* Use binary mode to avoid having to deal with different EOL characters. */ fd_flags |= O_BINARY; #endif if ((input_file = open (convert_filename, fd_flags, 0444)) == -1) *************** do_processing () *** 4539,4545 **** #endif /* !defined (UNPROTOIZE) */ } ! static struct option longopts[] = { {"version", 0, 0, 'V'}, {"file_name", 0, 0, 'p'}, --- 4484,4490 ---- #endif /* !defined (UNPROTOIZE) */ } ! static const struct option longopts[] = { {"version", 0, 0, 'V'}, {"file_name", 0, 0, 'p'}, *************** main (argc, argv) *** 4592,4609 **** signal (SIGCHLD, SIG_DFL); #endif ! /* LC_CTYPE determines the character set used by the terminal so it has be set ! to output messages correctly. */ ! ! #ifdef HAVE_LC_MESSAGES ! setlocale (LC_CTYPE, ""); ! setlocale (LC_MESSAGES, ""); ! #else ! setlocale (LC_ALL, ""); ! #endif ! ! (void) bindtextdomain (PACKAGE, localedir); ! (void) textdomain (PACKAGE); cwd_buffer = getpwd (); if (!cwd_buffer) --- 4537,4543 ---- signal (SIGCHLD, SIG_DFL); #endif ! gcc_init_libintl (); cwd_buffer = getpwd (); if (!cwd_buffer) *************** main (argc, argv) *** 4719,4726 **** { const char *cp; ! for (cp = varargs_style_indicator; ! ISALNUM ((const unsigned char)*cp) || *cp == '_'; cp++) continue; if (*cp != 0) varargs_style_indicator = savestring (varargs_style_indicator, --- 4653,4659 ---- { const char *cp; ! for (cp = varargs_style_indicator; ISIDNUM (*cp); cp++) continue; if (*cp != 0) varargs_style_indicator = savestring (varargs_style_indicator, diff -Nrc3pad gcc-3.0.4/gcc/read-rtl.c gcc-3.1/gcc/read-rtl.c *** gcc-3.0.4/gcc/read-rtl.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/read-rtl.c Tue Jan 15 13:37:58 2002 *************** *** 0 **** --- 1,771 ---- + /* RTL reader for GNU C Compiler. + Copyright (C) 1987, 1988, 1991, 1994, 1997, 1998, 1999, 2000, 2001, 2002 + Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2, or (at your option) any later + version. + + GCC is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to the Free + Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + + #include "hconfig.h" + #include "system.h" + #include "rtl.h" + #include "obstack.h" + #include "hashtab.h" + + #ifndef ISDIGIT + #include + #define ISDIGIT isdigit + #define ISSPACE isspace + #endif + + #define obstack_chunk_alloc xmalloc + #define obstack_chunk_free free + + static htab_t md_constants; + + static void fatal_with_file_and_line PARAMS ((FILE *, const char *, ...)) + ATTRIBUTE_PRINTF_2 ATTRIBUTE_NORETURN; + static void fatal_expected_char PARAMS ((FILE *, int, int)) ATTRIBUTE_NORETURN; + static void read_name PARAMS ((char *, FILE *)); + static char *read_string PARAMS ((struct obstack *, FILE *, int)); + static char *read_quoted_string PARAMS ((struct obstack *, FILE *)); + static char *read_braced_string PARAMS ((struct obstack *, FILE *)); + static void read_escape PARAMS ((struct obstack *, FILE *)); + static unsigned def_hash PARAMS ((const void *)); + static int def_name_eq_p PARAMS ((const void *, const void *)); + static void read_constants PARAMS ((FILE *infile, char *tmp_char)); + static void validate_const_int PARAMS ((FILE *, const char *)); + + /* Subroutines of read_rtx. */ + + /* The current line number for the file. */ + int read_rtx_lineno = 1; + + /* The filename for aborting with file and line. */ + const char *read_rtx_filename = ""; + + static void + fatal_with_file_and_line VPARAMS ((FILE *infile, const char *msg, ...)) + { + char context[64]; + size_t i; + int c; + + VA_OPEN (ap, msg); + VA_FIXEDARG (ap, FILE *, infile); + VA_FIXEDARG (ap, const char *, msg); + + fprintf (stderr, "%s:%d: ", read_rtx_filename, read_rtx_lineno); + vfprintf (stderr, msg, ap); + putc ('\n', stderr); + + /* Gather some following context. */ + for (i = 0; i < sizeof (context)-1; ++i) + { + c = getc (infile); + if (c == EOF) + break; + if (c == '\r' || c == '\n') + break; + context[i] = c; + } + context[i] = '\0'; + + fprintf (stderr, "%s:%d: following context is `%s'\n", + read_rtx_filename, read_rtx_lineno, context); + + VA_CLOSE (ap); + exit (1); + } + + /* Dump code after printing a message. Used when read_rtx finds + invalid data. */ + + static void + fatal_expected_char (infile, expected_c, actual_c) + FILE *infile; + int expected_c, actual_c; + { + fatal_with_file_and_line (infile, "expected character `%c', found `%c'", + expected_c, actual_c); + } + + /* Read chars from INFILE until a non-whitespace char + and return that. Comments, both Lisp style and C style, + are treated as whitespace. + Tools such as genflags use this function. */ + + int + read_skip_spaces (infile) + FILE *infile; + { + int c; + + while (1) + { + c = getc (infile); + switch (c) + { + case '\n': + read_rtx_lineno++; + break; + + case ' ': case '\t': case '\f': case '\r': + break; + + case ';': + do + c = getc (infile); + while (c != '\n' && c != EOF); + read_rtx_lineno++; + break; + + case '/': + { + int prevc; + c = getc (infile); + if (c != '*') + fatal_expected_char (infile, '*', c); + + prevc = 0; + while ((c = getc (infile)) && c != EOF) + { + if (c == '\n') + read_rtx_lineno++; + else if (prevc == '*' && c == '/') + break; + prevc = c; + } + } + break; + + default: + return c; + } + } + } + + /* Read an rtx code name into the buffer STR[]. + It is terminated by any of the punctuation chars of rtx printed syntax. */ + + static void + read_name (str, infile) + char *str; + FILE *infile; + { + char *p; + int c; + + c = read_skip_spaces (infile); + + p = str; + while (1) + { + if (c == ' ' || c == '\n' || c == '\t' || c == '\f' || c == '\r') + break; + if (c == ':' || c == ')' || c == ']' || c == '"' || c == '/' + || c == '(' || c == '[') + { + ungetc (c, infile); + break; + } + *p++ = c; + c = getc (infile); + } + if (p == str) + fatal_with_file_and_line (infile, "missing name or number"); + if (c == '\n') + read_rtx_lineno++; + + *p = 0; + + if (md_constants) + { + /* Do constant expansion. */ + struct md_constant *def; + + p = str; + do + { + struct md_constant tmp_def; + + tmp_def.name = p; + def = htab_find (md_constants, &tmp_def); + if (def) + p = def->value; + } while (def); + if (p != str) + strcpy (str, p); + } + } + + /* Subroutine of the string readers. Handles backslash escapes. + Caller has read the backslash, but not placed it into the obstack. */ + static void + read_escape (ob, infile) + struct obstack *ob; + FILE *infile; + { + int c = getc (infile); + + switch (c) + { + /* Backslash-newline is replaced by nothing, as in C. */ + case '\n': + read_rtx_lineno++; + return; + + /* \" \' \\ are replaced by the second character. */ + case '\\': + case '"': + case '\'': + break; + + /* Standard C string escapes: + \a \b \f \n \r \t \v + \[0-7] \x + all are passed through to the output string unmolested. + In normal use these wind up in a string constant processed + by the C compiler, which will translate them appropriately. + We do not bother checking that \[0-7] are followed by up to + two octal digits, or that \x is followed by N hex digits. + \? \u \U are left out because they are not in traditional C. */ + case 'a': case 'b': case 'f': case 'n': case 'r': case 't': case 'v': + case '0': case '1': case '2': case '3': case '4': case '5': case '6': + case '7': case 'x': + obstack_1grow (ob, '\\'); + break; + + /* \; makes stuff for a C string constant containing + newline and tab. */ + case ';': + obstack_grow (ob, "\\n\\t", 4); + return; + + /* pass anything else through, but issue a warning. */ + default: + fprintf (stderr, "%s:%d: warning: unrecognized escape \\%c\n", + read_rtx_filename, read_rtx_lineno, c); + obstack_1grow (ob, '\\'); + break; + } + + obstack_1grow (ob, c); + } + + + /* Read a double-quoted string onto the obstack. Caller has scanned + the leading quote. */ + static char * + read_quoted_string (ob, infile) + struct obstack *ob; + FILE *infile; + { + int c; + + while (1) + { + c = getc (infile); /* Read the string */ + if (c == '\n') + read_rtx_lineno++; + else if (c == '\\') + { + read_escape (ob, infile); + continue; + } + else if (c == '"') + break; + + obstack_1grow (ob, c); + } + + obstack_1grow (ob, 0); + return obstack_finish (ob); + } + + /* Read a braced string (a la Tcl) onto the obstack. Caller has + scanned the leading brace. Note that unlike quoted strings, + the outermost braces _are_ included in the string constant. */ + static char * + read_braced_string (ob, infile) + struct obstack *ob; + FILE *infile; + { + int c; + int brace_depth = 1; /* caller-processed */ + + obstack_1grow (ob, '{'); + while (brace_depth) + { + c = getc (infile); /* Read the string */ + if (c == '\n') + read_rtx_lineno++; + else if (c == '{') + brace_depth++; + else if (c == '}') + brace_depth--; + else if (c == '\\') + { + read_escape (ob, infile); + continue; + } + + obstack_1grow (ob, c); + } + + obstack_1grow (ob, 0); + return obstack_finish (ob); + } + + /* Read some kind of string constant. This is the high-level routine + used by read_rtx. It handles surrounding parentheses, leading star, + and dispatch to the appropriate string constant reader. */ + + static char * + read_string (ob, infile, star_if_braced) + struct obstack *ob; + FILE *infile; + int star_if_braced; + { + char *stringbuf; + int saw_paren = 0; + int c; + + c = read_skip_spaces (infile); + if (c == '(') + { + saw_paren = 1; + c = read_skip_spaces (infile); + } + + if (c == '"') + stringbuf = read_quoted_string (ob, infile); + else if (c == '{') + { + if (star_if_braced) + obstack_1grow (ob, '*'); + stringbuf = read_braced_string (ob, infile); + } + else + fatal_with_file_and_line (infile, "expected `\"' or `{', found `%c'", c); + + if (saw_paren) + { + c = read_skip_spaces (infile); + if (c != ')') + fatal_expected_char (infile, ')', c); + } + + return stringbuf; + } + + /* Provide a version of a function to read a long long if the system does + not provide one. */ + #if HOST_BITS_PER_WIDE_INT > HOST_BITS_PER_LONG && !defined(HAVE_ATOLL) && !defined(HAVE_ATOQ) + HOST_WIDE_INT + atoll (p) + const char *p; + { + int neg = 0; + HOST_WIDE_INT tmp_wide; + + while (ISSPACE (*p)) + p++; + if (*p == '-') + neg = 1, p++; + else if (*p == '+') + p++; + + tmp_wide = 0; + while (ISDIGIT (*p)) + { + HOST_WIDE_INT new_wide = tmp_wide*10 + (*p - '0'); + if (new_wide < tmp_wide) + { + /* Return INT_MAX equiv on overflow. */ + tmp_wide = (~(unsigned HOST_WIDE_INT) 0) >> 1; + break; + } + tmp_wide = new_wide; + p++; + } + + if (neg) + tmp_wide = -tmp_wide; + return tmp_wide; + } + #endif + + /* Given a constant definition, return a hash code for its name. */ + static unsigned + def_hash (def) + const void *def; + { + unsigned result, i; + const char *string = ((const struct md_constant *) def)->name; + + for (result = i = 0;*string++ != '\0'; i++) + result += ((unsigned char) *string << (i % CHAR_BIT)); + return result; + } + + /* Given two constant definitions, return true if they have the same name. */ + static int + def_name_eq_p (def1, def2) + const void *def1, *def2; + { + return ! strcmp (((const struct md_constant *) def1)->name, + ((const struct md_constant *) def2)->name); + } + + /* INFILE is a FILE pointer to read text from. TMP_CHAR is a buffer suitable + to read a name or number into. Process a define_constants directive, + starting with the optional space after the "define_constants". */ + static void + read_constants (infile, tmp_char) + FILE *infile; + char *tmp_char; + { + int c; + htab_t defs; + + c = read_skip_spaces (infile); + if (c != '[') + fatal_expected_char (infile, '[', c); + defs = md_constants; + if (! defs) + defs = htab_create (32, def_hash, def_name_eq_p, (htab_del) 0); + /* Disable constant expansion during definition processing. */ + md_constants = 0; + while ( (c = read_skip_spaces (infile)) != ']') + { + struct md_constant *def; + void **entry_ptr; + + if (c != '(') + fatal_expected_char (infile, '(', c); + def = xmalloc (sizeof (struct md_constant)); + def->name = tmp_char; + read_name (tmp_char, infile); + entry_ptr = htab_find_slot (defs, def, TRUE); + if (! *entry_ptr) + def->name = xstrdup (tmp_char); + c = read_skip_spaces (infile); + ungetc (c, infile); + read_name (tmp_char, infile); + if (! *entry_ptr) + { + def->value = xstrdup (tmp_char); + *entry_ptr = def; + } + else + { + def = *entry_ptr; + if (strcmp (def->value, tmp_char)) + fatal_with_file_and_line (infile, + "redefinition of %s, was %s, now %s", + def->name, def->value, tmp_char); + } + c = read_skip_spaces (infile); + if (c != ')') + fatal_expected_char (infile, ')', c); + } + md_constants = defs; + c = read_skip_spaces (infile); + if (c != ')') + fatal_expected_char (infile, ')', c); + } + + /* For every constant definition, call CALLBACK with two arguments: + a pointer a pointer to the constant definition and INFO. + Stops when CALLBACK returns zero. */ + void + traverse_md_constants (callback, info) + htab_trav callback; + void *info; + { + if (md_constants) + htab_traverse (md_constants, callback, info); + } + + static void + validate_const_int (infile, string) + FILE *infile; + const char *string; + { + const char *cp; + int valid = 1; + + cp = string; + while (*cp && ISSPACE (*cp)) + cp++; + if (*cp == '-' || *cp == '+') + cp++; + if (*cp == 0) + valid = 0; + for (; *cp; cp++) + if (! ISDIGIT (*cp)) + valid = 0; + if (!valid) + fatal_with_file_and_line (infile, "invalid decimal constant \"%s\"\n", string); + } + + /* Read an rtx in printed representation from INFILE + and return an actual rtx in core constructed accordingly. + read_rtx is not used in the compiler proper, but rather in + the utilities gen*.c that construct C code from machine descriptions. */ + + rtx + read_rtx (infile) + FILE *infile; + { + int i, j; + RTX_CODE tmp_code; + const char *format_ptr; + /* tmp_char is a buffer used for reading decimal integers + and names of rtx types and machine modes. + Therefore, 256 must be enough. */ + char tmp_char[256]; + rtx return_rtx; + int c; + int tmp_int; + HOST_WIDE_INT tmp_wide; + + /* Obstack used for allocating RTL objects. */ + static struct obstack rtl_obstack; + static int initialized; + + /* Linked list structure for making RTXs: */ + struct rtx_list + { + struct rtx_list *next; + rtx value; /* Value of this node. */ + }; + + if (!initialized) { + obstack_init (&rtl_obstack); + initialized = 1; + } + + again: + c = read_skip_spaces (infile); /* Should be open paren. */ + if (c != '(') + fatal_expected_char (infile, '(', c); + + read_name (tmp_char, infile); + + tmp_code = UNKNOWN; + + if (! strcmp (tmp_char, "define_constants")) + { + read_constants (infile, tmp_char); + goto again; + } + for (i = 0; i < NUM_RTX_CODE; i++) + if (! strcmp (tmp_char, GET_RTX_NAME (i))) + { + tmp_code = (RTX_CODE) i; /* get value for name */ + break; + } + + if (tmp_code == UNKNOWN) + fatal_with_file_and_line (infile, "unknown rtx code `%s'", tmp_char); + + /* (NIL) stands for an expression that isn't there. */ + if (tmp_code == NIL) + { + /* Discard the closeparen. */ + while ((c = getc (infile)) && c != ')') + ; + + return 0; + } + + /* If we end up with an insn expression then we free this space below. */ + return_rtx = rtx_alloc (tmp_code); + format_ptr = GET_RTX_FORMAT (GET_CODE (return_rtx)); + + /* If what follows is `: mode ', read it and + store the mode in the rtx. */ + + i = read_skip_spaces (infile); + if (i == ':') + { + read_name (tmp_char, infile); + for (j = 0; j < NUM_MACHINE_MODES; j++) + if (! strcmp (GET_MODE_NAME (j), tmp_char)) + break; + + if (j == MAX_MACHINE_MODE) + fatal_with_file_and_line (infile, "unknown mode `%s'", tmp_char); + + PUT_MODE (return_rtx, (enum machine_mode) j); + } + else + ungetc (i, infile); + + for (i = 0; i < GET_RTX_LENGTH (GET_CODE (return_rtx)); i++) + switch (*format_ptr++) + { + /* 0 means a field for internal use only. + Don't expect it to be present in the input. */ + case '0': + break; + + case 'e': + case 'u': + XEXP (return_rtx, i) = read_rtx (infile); + break; + + case 'V': + /* 'V' is an optional vector: if a closeparen follows, + just store NULL for this element. */ + c = read_skip_spaces (infile); + ungetc (c, infile); + if (c == ')') + { + XVEC (return_rtx, i) = 0; + break; + } + /* Now process the vector. */ + + case 'E': + { + /* Obstack to store scratch vector in. */ + struct obstack vector_stack; + int list_counter = 0; + rtvec return_vec = NULL_RTVEC; + + c = read_skip_spaces (infile); + if (c != '[') + fatal_expected_char (infile, '[', c); + + /* add expressions to a list, while keeping a count */ + obstack_init (&vector_stack); + while ((c = read_skip_spaces (infile)) && c != ']') + { + ungetc (c, infile); + list_counter++; + obstack_ptr_grow (&vector_stack, (PTR) read_rtx (infile)); + } + if (list_counter > 0) + { + return_vec = rtvec_alloc (list_counter); + memcpy (&return_vec->elem[0], obstack_finish (&vector_stack), + list_counter * sizeof (rtx)); + } + XVEC (return_rtx, i) = return_vec; + obstack_free (&vector_stack, NULL); + /* close bracket gotten */ + } + break; + + case 'S': + /* 'S' is an optional string: if a closeparen follows, + just store NULL for this element. */ + c = read_skip_spaces (infile); + ungetc (c, infile); + if (c == ')') + { + XSTR (return_rtx, i) = 0; + break; + } + + case 'T': + case 's': + { + char *stringbuf; + + /* The output template slot of a DEFINE_INSN, + DEFINE_INSN_AND_SPLIT, or DEFINE_PEEPHOLE automatically + gets a star inserted as its first character, if it is + written with a brace block instead of a string constant. */ + int star_if_braced = (format_ptr[-1] == 'T'); + + stringbuf = read_string (&rtl_obstack, infile, star_if_braced); + + /* For insn patterns, we want to provide a default name + based on the file and line, like "*foo.md:12", if the + given name is blank. These are only for define_insn and + define_insn_and_split, to aid debugging. */ + if (*stringbuf == '\0' + && i == 0 + && (GET_CODE (return_rtx) == DEFINE_INSN + || GET_CODE (return_rtx) == DEFINE_INSN_AND_SPLIT)) + { + char line_name[20]; + const char *fn = (read_rtx_filename ? read_rtx_filename : "rtx"); + const char *slash; + for (slash = fn; *slash; slash ++) + if (*slash == '/' || *slash == '\\' || *slash == ':') + fn = slash + 1; + obstack_1grow (&rtl_obstack, '*'); + obstack_grow (&rtl_obstack, fn, strlen (fn)); + sprintf (line_name, ":%d", read_rtx_lineno); + obstack_grow (&rtl_obstack, line_name, strlen (line_name)+1); + stringbuf = (char *) obstack_finish (&rtl_obstack); + } + + if (star_if_braced) + XTMPL (return_rtx, i) = stringbuf; + else + XSTR (return_rtx, i) = stringbuf; + } + break; + + case 'w': + read_name (tmp_char, infile); + validate_const_int (infile, tmp_char); + #if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_INT + tmp_wide = atoi (tmp_char); + #else + #if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG + tmp_wide = atol (tmp_char); + #else + /* Prefer atoll over atoq, since the former is in the ISO C99 standard. + But prefer not to use our hand-rolled function above either. */ + #if defined(HAVE_ATOLL) || !defined(HAVE_ATOQ) + tmp_wide = atoll (tmp_char); + #else + tmp_wide = atoq (tmp_char); + #endif + #endif + #endif + XWINT (return_rtx, i) = tmp_wide; + break; + + case 'i': + case 'n': + read_name (tmp_char, infile); + validate_const_int (infile, tmp_char); + tmp_int = atoi (tmp_char); + XINT (return_rtx, i) = tmp_int; + break; + + default: + fprintf (stderr, + "switch format wrong in rtl.read_rtx(). format was: %c.\n", + format_ptr[-1]); + fprintf (stderr, "\tfile position: %ld\n", ftell (infile)); + abort (); + } + + c = read_skip_spaces (infile); + if (c != ')') + fatal_expected_char (infile, ')', c); + + return return_rtx; + } diff -Nrc3pad gcc-3.0.4/gcc/real.c gcc-3.1/gcc/real.c *** gcc-3.0.4/gcc/real.c Wed Jan 24 04:30:46 2001 --- gcc-3.1/gcc/real.c Tue Jan 15 13:37:58 2002 *************** *** 1,25 **** /* real.c - implementation of REAL_ARITHMETIC, REAL_VALUE_ATOF, and support for XFmode IEEE extended real floating point arithmetic. Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000 Free Software Foundation, Inc. Contributed by Stephen L. Moshier (moshier@world.std.com). ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" #include "system.h" --- 1,25 ---- /* real.c - implementation of REAL_ARITHMETIC, REAL_VALUE_ATOF, and support for XFmode IEEE extended real floating point arithmetic. Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2002 Free Software Foundation, Inc. Contributed by Stephen L. Moshier (moshier@world.std.com). ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" #include "system.h" *************** test programs available. A special vers *** 50,56 **** point arithmetic tester, modified for this purpose, can be found on usc.edu: /pub/C-numanal/ieeetest.zoo. Other tests, and libraries of XFmode and TFmode transcendental functions, can be obtained by ftp from ! netlib.att.com: netlib/cephes. */ /* Type of computer arithmetic. Only one of DEC, IBM, IEEE, C4X, or UNK should get defined. --- 50,56 ---- point arithmetic tester, modified for this purpose, can be found on usc.edu: /pub/C-numanal/ieeetest.zoo. Other tests, and libraries of XFmode and TFmode transcendental functions, can be obtained by ftp from ! netlib.att.com: netlib/cephes. */ /* Type of computer arithmetic. Only one of DEC, IBM, IEEE, C4X, or UNK should get defined. *************** netlib.att.com: netlib/cephes. */ *** 95,103 **** The case LONG_DOUBLE_TYPE_SIZE = 128 activates TFmode support and may deactivate XFmode since `long double' is used to refer ! to both modes. Defining INTEL_EXTENDED_IEEE_FORMAT at the same ! time enables 80387-style 80-bit floats in a 128-bit padded ! image, as seen on IA-64. The macros FLOAT_WORDS_BIG_ENDIAN, HOST_FLOAT_WORDS_BIG_ENDIAN, contributed by Richard Earnshaw , --- 95,103 ---- The case LONG_DOUBLE_TYPE_SIZE = 128 activates TFmode support and may deactivate XFmode since `long double' is used to refer ! to both modes. Defining INTEL_EXTENDED_IEEE_FORMAT to non-zero ! at the same time enables 80387-style 80-bit floats in a 128-bit ! padded image, as seen on IA-64. The macros FLOAT_WORDS_BIG_ENDIAN, HOST_FLOAT_WORDS_BIG_ENDIAN, contributed by Richard Earnshaw , *************** netlib.att.com: netlib/cephes. */ *** 108,114 **** These optional macros may be defined in tm.h. In real.h, they default to WORDS_BIG_ENDIAN, etc., so there is no need to define them for any normal host or target machine on which the floats ! and the integers have the same endian-ness. */ /* The following converts gcc macros into the ones used by this file. */ --- 108,114 ---- These optional macros may be defined in tm.h. In real.h, they default to WORDS_BIG_ENDIAN, etc., so there is no need to define them for any normal host or target machine on which the floats ! and the integers have the same endian-ness. */ /* The following converts gcc macros into the ones used by this file. */ *************** unknown arithmetic type *** 213,218 **** --- 213,233 ---- #endif #endif + /* If no 16-bit type has been found and the compiler is GCC, try HImode. */ + #if defined(__GNUC__) && EMUSHORT_SIZE != 16 + typedef int HItype __attribute__ ((mode (HI))); + typedef unsigned int UHItype __attribute__ ((mode (HI))); + #undef EMUSHORT + #undef EMUSHORT_SIZE + #undef EMULONG_SIZE + #define EMUSHORT HItype + #define UEMUSHORT UHItype + #define EMUSHORT_SIZE 16 + #define EMULONG_SIZE 32 + #else + #define UEMUSHORT unsigned EMUSHORT + #endif + #if HOST_BITS_PER_SHORT >= EMULONG_SIZE #define EMULONG short #else *************** unknown arithmetic type *** 247,275 **** in memory, with no holes. */ #if MAX_LONG_DOUBLE_TYPE_SIZE == 96 || \ ! (defined(INTEL_EXTENDED_IEEE_FORMAT) && MAX_LONG_DOUBLE_TYPE_SIZE == 128) /* Number of 16 bit words in external e type format */ # define NE 6 # define MAXDECEXP 4932 # define MINDECEXP -4956 ! # define GET_REAL(r,e) memcpy ((char *)(e), (char *)(r), 2*NE) # define PUT_REAL(e,r) \ do { \ ! memcpy ((char *)(r), (char *)(e), 2*NE); \ ! if (2*NE < sizeof(*r)) \ ! memset ((char *)(r) + 2*NE, 0, sizeof(*r) - 2*NE); \ } while (0) # else /* no XFmode */ # if MAX_LONG_DOUBLE_TYPE_SIZE == 128 # define NE 10 # define MAXDECEXP 4932 # define MINDECEXP -4977 ! # define GET_REAL(r,e) memcpy ((char *)(e), (char *)(r), 2*NE) # define PUT_REAL(e,r) \ do { \ ! memcpy ((char *)(r), (char *)(e), 2*NE); \ ! if (2*NE < sizeof(*r)) \ ! memset ((char *)(r) + 2*NE, 0, sizeof(*r) - 2*NE); \ } while (0) #else #define NE 6 --- 262,290 ---- in memory, with no holes. */ #if MAX_LONG_DOUBLE_TYPE_SIZE == 96 || \ ! ((INTEL_EXTENDED_IEEE_FORMAT != 0) && MAX_LONG_DOUBLE_TYPE_SIZE == 128) /* Number of 16 bit words in external e type format */ # define NE 6 # define MAXDECEXP 4932 # define MINDECEXP -4956 ! # define GET_REAL(r,e) memcpy ((e), (r), 2*NE) # define PUT_REAL(e,r) \ do { \ ! memcpy ((r), (e), 2*NE); \ ! if (2*NE < sizeof (*r)) \ ! memset ((char *) (r) + 2*NE, 0, sizeof (*r) - 2*NE); \ } while (0) # else /* no XFmode */ # if MAX_LONG_DOUBLE_TYPE_SIZE == 128 # define NE 10 # define MAXDECEXP 4932 # define MINDECEXP -4977 ! # define GET_REAL(r,e) memcpy ((e), (r), 2*NE) # define PUT_REAL(e,r) \ do { \ ! memcpy ((r), (e), 2*NE); \ ! if (2*NE < sizeof (*r)) \ ! memset ((char *) (r) + 2*NE, 0, sizeof (*r) - 2*NE); \ } while (0) #else #define NE 6 *************** unknown arithmetic type *** 282,295 **** #define GET_REAL(r,e) \ do { \ if (HOST_FLOAT_WORDS_BIG_ENDIAN == REAL_WORDS_BIG_ENDIAN) \ ! e53toe ((unsigned EMUSHORT *) (r), (e)); \ else \ { \ ! unsigned EMUSHORT w[4]; \ ! memcpy (&w[3], ((EMUSHORT *) r), sizeof (EMUSHORT)); \ ! memcpy (&w[2], ((EMUSHORT *) r) + 1, sizeof (EMUSHORT)); \ ! memcpy (&w[1], ((EMUSHORT *) r) + 2, sizeof (EMUSHORT)); \ ! memcpy (&w[0], ((EMUSHORT *) r) + 3, sizeof (EMUSHORT)); \ e53toe (w, (e)); \ } \ } while (0) --- 297,310 ---- #define GET_REAL(r,e) \ do { \ if (HOST_FLOAT_WORDS_BIG_ENDIAN == REAL_WORDS_BIG_ENDIAN) \ ! e53toe ((const UEMUSHORT *) (r), (e)); \ else \ { \ ! UEMUSHORT w[4]; \ ! memcpy (&w[3], ((const EMUSHORT *) r), sizeof (EMUSHORT)); \ ! memcpy (&w[2], ((const EMUSHORT *) r) + 1, sizeof (EMUSHORT)); \ ! memcpy (&w[1], ((const EMUSHORT *) r) + 2, sizeof (EMUSHORT)); \ ! memcpy (&w[0], ((const EMUSHORT *) r) + 3, sizeof (EMUSHORT)); \ e53toe (w, (e)); \ } \ } while (0) *************** do { \ *** 297,306 **** #define PUT_REAL(e,r) \ do { \ if (HOST_FLOAT_WORDS_BIG_ENDIAN == REAL_WORDS_BIG_ENDIAN) \ ! etoe53 ((e), (unsigned EMUSHORT *) (r)); \ else \ { \ ! unsigned EMUSHORT w[4]; \ etoe53 ((e), w); \ memcpy (((EMUSHORT *) r), &w[3], sizeof (EMUSHORT)); \ memcpy (((EMUSHORT *) r) + 1, &w[2], sizeof (EMUSHORT)); \ --- 312,321 ---- #define PUT_REAL(e,r) \ do { \ if (HOST_FLOAT_WORDS_BIG_ENDIAN == REAL_WORDS_BIG_ENDIAN) \ ! etoe53 ((e), (UEMUSHORT *) (r)); \ else \ { \ ! UEMUSHORT w[4]; \ etoe53 ((e), w); \ memcpy (((EMUSHORT *) r), &w[3], sizeof (EMUSHORT)); \ memcpy (((EMUSHORT *) r) + 1, &w[2], sizeof (EMUSHORT)); \ *************** do { \ *** 312,319 **** #else /* not REAL_ARITHMETIC */ /* emulator uses host format */ ! #define GET_REAL(r,e) e53toe ((unsigned EMUSHORT *) (r), (e)) ! #define PUT_REAL(e,r) etoe53 ((e), (unsigned EMUSHORT *) (r)) #endif /* not REAL_ARITHMETIC */ #endif /* not TFmode */ --- 327,334 ---- #else /* not REAL_ARITHMETIC */ /* emulator uses host format */ ! #define GET_REAL(r,e) e53toe ((const UEMUSHORT *) (r), (e)) ! #define PUT_REAL(e,r) etoe53 ((e), (UEMUSHORT *) (r)) #endif /* not REAL_ARITHMETIC */ #endif /* not TFmode */ *************** do { \ *** 348,499 **** #endif extern int extra_warnings; ! extern unsigned EMUSHORT ezero[], ehalf[], eone[], etwo[]; ! extern unsigned EMUSHORT elog2[], esqrt2[]; ! static void endian PARAMS ((unsigned EMUSHORT *, long *, enum machine_mode)); ! static void eclear PARAMS ((unsigned EMUSHORT *)); ! static void emov PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *)); #if 0 ! static void eabs PARAMS ((unsigned EMUSHORT *)); #endif ! static void eneg PARAMS ((unsigned EMUSHORT *)); ! static int eisneg PARAMS ((unsigned EMUSHORT *)); ! static int eisinf PARAMS ((unsigned EMUSHORT *)); ! static int eisnan PARAMS ((unsigned EMUSHORT *)); ! static void einfin PARAMS ((unsigned EMUSHORT *)); #ifdef NANS ! static void enan PARAMS ((unsigned EMUSHORT *, int)); ! static void einan PARAMS ((unsigned EMUSHORT *)); ! static int eiisnan PARAMS ((unsigned EMUSHORT *)); ! static int eiisneg PARAMS ((unsigned EMUSHORT *)); ! static void make_nan PARAMS ((unsigned EMUSHORT *, int, enum machine_mode)); #endif ! static void emovi PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *)); ! static void emovo PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *)); ! static void ecleaz PARAMS ((unsigned EMUSHORT *)); ! static void ecleazs PARAMS ((unsigned EMUSHORT *)); ! static void emovz PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *)); #if 0 ! static void eiinfin PARAMS ((unsigned EMUSHORT *)); #endif #ifdef INFINITY ! static int eiisinf PARAMS ((unsigned EMUSHORT *)); #endif ! static int ecmpm PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *)); ! static void eshdn1 PARAMS ((unsigned EMUSHORT *)); ! static void eshup1 PARAMS ((unsigned EMUSHORT *)); ! static void eshdn8 PARAMS ((unsigned EMUSHORT *)); ! static void eshup8 PARAMS ((unsigned EMUSHORT *)); ! static void eshup6 PARAMS ((unsigned EMUSHORT *)); ! static void eshdn6 PARAMS ((unsigned EMUSHORT *)); ! static void eaddm PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *)); ! static void esubm PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *)); ! static void m16m PARAMS ((unsigned int, unsigned short *, ! unsigned short *)); ! static int edivm PARAMS ((unsigned short *, unsigned short *)); ! static int emulm PARAMS ((unsigned short *, unsigned short *)); ! static void emdnorm PARAMS ((unsigned EMUSHORT *, int, int, EMULONG, int)); ! static void esub PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *, ! unsigned EMUSHORT *)); ! static void eadd PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *, ! unsigned EMUSHORT *)); ! static void eadd1 PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *, ! unsigned EMUSHORT *)); ! static void ediv PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *, ! unsigned EMUSHORT *)); ! static void emul PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *, ! unsigned EMUSHORT *)); ! static void e53toe PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *)); ! static void e64toe PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *)); ! #ifndef INTEL_EXTENDED_IEEE_FORMAT ! static void e113toe PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *)); #endif ! static void e24toe PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *)); ! static void etoe113 PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *)); ! static void toe113 PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *)); ! static void etoe64 PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *)); ! static void toe64 PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *)); ! static void etoe53 PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *)); ! static void toe53 PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *)); ! static void etoe24 PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *)); ! static void toe24 PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *)); ! static int ecmp PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *)); #if 0 ! static void eround PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *)); #endif ! static void ltoe PARAMS ((HOST_WIDE_INT *, unsigned EMUSHORT *)); ! static void ultoe PARAMS ((unsigned HOST_WIDE_INT *, unsigned EMUSHORT *)); ! static void eifrac PARAMS ((unsigned EMUSHORT *, HOST_WIDE_INT *, ! unsigned EMUSHORT *)); ! static void euifrac PARAMS ((unsigned EMUSHORT *, unsigned HOST_WIDE_INT *, ! unsigned EMUSHORT *)); ! static int eshift PARAMS ((unsigned EMUSHORT *, int)); ! static int enormlz PARAMS ((unsigned EMUSHORT *)); #if 0 ! static void e24toasc PARAMS ((unsigned EMUSHORT *, char *, int)); ! static void e53toasc PARAMS ((unsigned EMUSHORT *, char *, int)); ! static void e64toasc PARAMS ((unsigned EMUSHORT *, char *, int)); ! static void e113toasc PARAMS ((unsigned EMUSHORT *, char *, int)); #endif /* 0 */ ! static void etoasc PARAMS ((unsigned EMUSHORT *, char *, int)); ! static void asctoe24 PARAMS ((const char *, unsigned EMUSHORT *)); ! static void asctoe53 PARAMS ((const char *, unsigned EMUSHORT *)); ! static void asctoe64 PARAMS ((const char *, unsigned EMUSHORT *)); ! #ifndef INTEL_EXTENDED_IEEE_FORMAT ! static void asctoe113 PARAMS ((const char *, unsigned EMUSHORT *)); #endif ! static void asctoe PARAMS ((const char *, unsigned EMUSHORT *)); ! static void asctoeg PARAMS ((const char *, unsigned EMUSHORT *, int)); ! static void efloor PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *)); #if 0 ! static void efrexp PARAMS ((unsigned EMUSHORT *, int *, ! unsigned EMUSHORT *)); #endif ! static void eldexp PARAMS ((unsigned EMUSHORT *, int, unsigned EMUSHORT *)); #if 0 ! static void eremain PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *, ! unsigned EMUSHORT *)); #endif ! static void eiremain PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *)); static void mtherr PARAMS ((const char *, int)); #ifdef DEC ! static void dectoe PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *)); ! static void etodec PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *)); ! static void todec PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *)); #endif #ifdef IBM ! static void ibmtoe PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *, ! enum machine_mode)); ! static void etoibm PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *, ! enum machine_mode)); ! static void toibm PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *, ! enum machine_mode)); #endif #ifdef C4X ! static void c4xtoe PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *, ! enum machine_mode)); ! static void etoc4x PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *, ! enum machine_mode)); ! static void toc4x PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *, ! enum machine_mode)); #endif #if 0 ! static void uditoe PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *)); ! static void ditoe PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *)); ! static void etoudi PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *)); ! static void etodi PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *)); ! static void esqrt PARAMS ((unsigned EMUSHORT *, unsigned EMUSHORT *)); #endif /* Copy 32-bit numbers obtained from array containing 16-bit numbers, swapping ends if required, into output array of longs. The ! result is normally passed to fprintf by the ASM_OUTPUT_ macros. */ static void endian (e, x, mode) ! unsigned EMUSHORT e[]; long x[]; enum machine_mode mode; { --- 363,515 ---- #endif extern int extra_warnings; ! extern const UEMUSHORT ezero[NE], ehalf[NE], eone[NE], etwo[NE]; ! extern const UEMUSHORT elog2[NE], esqrt2[NE]; ! static void endian PARAMS ((const UEMUSHORT *, long *, enum machine_mode)); ! static void eclear PARAMS ((UEMUSHORT *)); ! static void emov PARAMS ((const UEMUSHORT *, UEMUSHORT *)); #if 0 ! static void eabs PARAMS ((UEMUSHORT *)); #endif ! static void eneg PARAMS ((UEMUSHORT *)); ! static int eisneg PARAMS ((const UEMUSHORT *)); ! static int eisinf PARAMS ((const UEMUSHORT *)); ! static int eisnan PARAMS ((const UEMUSHORT *)); ! static void einfin PARAMS ((UEMUSHORT *)); #ifdef NANS ! static void enan PARAMS ((UEMUSHORT *, int)); ! static void einan PARAMS ((UEMUSHORT *)); ! static int eiisnan PARAMS ((const UEMUSHORT *)); ! static int eiisneg PARAMS ((const UEMUSHORT *)); ! static void make_nan PARAMS ((UEMUSHORT *, int, enum machine_mode)); #endif ! static void emovi PARAMS ((const UEMUSHORT *, UEMUSHORT *)); ! static void emovo PARAMS ((const UEMUSHORT *, UEMUSHORT *)); ! static void ecleaz PARAMS ((UEMUSHORT *)); ! static void ecleazs PARAMS ((UEMUSHORT *)); ! static void emovz PARAMS ((const UEMUSHORT *, UEMUSHORT *)); #if 0 ! static void eiinfin PARAMS ((UEMUSHORT *)); #endif #ifdef INFINITY ! static int eiisinf PARAMS ((const UEMUSHORT *)); #endif ! static int ecmpm PARAMS ((const UEMUSHORT *, const UEMUSHORT *)); ! static void eshdn1 PARAMS ((UEMUSHORT *)); ! static void eshup1 PARAMS ((UEMUSHORT *)); ! static void eshdn8 PARAMS ((UEMUSHORT *)); ! static void eshup8 PARAMS ((UEMUSHORT *)); ! static void eshup6 PARAMS ((UEMUSHORT *)); ! static void eshdn6 PARAMS ((UEMUSHORT *)); ! static void eaddm PARAMS ((const UEMUSHORT *, UEMUSHORT *)); ! static void esubm PARAMS ((const UEMUSHORT *, UEMUSHORT *)); ! static void m16m PARAMS ((unsigned int, const UEMUSHORT *, UEMUSHORT *)); ! static int edivm PARAMS ((const UEMUSHORT *, UEMUSHORT *)); ! static int emulm PARAMS ((const UEMUSHORT *, UEMUSHORT *)); ! static void emdnorm PARAMS ((UEMUSHORT *, int, int, EMULONG, int)); ! static void esub PARAMS ((const UEMUSHORT *, const UEMUSHORT *, ! UEMUSHORT *)); ! static void eadd PARAMS ((const UEMUSHORT *, const UEMUSHORT *, ! UEMUSHORT *)); ! static void eadd1 PARAMS ((const UEMUSHORT *, const UEMUSHORT *, ! UEMUSHORT *)); ! static void ediv PARAMS ((const UEMUSHORT *, const UEMUSHORT *, ! UEMUSHORT *)); ! static void emul PARAMS ((const UEMUSHORT *, const UEMUSHORT *, ! UEMUSHORT *)); ! static void e53toe PARAMS ((const UEMUSHORT *, UEMUSHORT *)); ! static void e64toe PARAMS ((const UEMUSHORT *, UEMUSHORT *)); ! #if (INTEL_EXTENDED_IEEE_FORMAT == 0) ! static void e113toe PARAMS ((const UEMUSHORT *, UEMUSHORT *)); #endif ! static void e24toe PARAMS ((const UEMUSHORT *, UEMUSHORT *)); ! #if (INTEL_EXTENDED_IEEE_FORMAT == 0) ! static void etoe113 PARAMS ((const UEMUSHORT *, UEMUSHORT *)); ! static void toe113 PARAMS ((UEMUSHORT *, UEMUSHORT *)); ! #endif ! static void etoe64 PARAMS ((const UEMUSHORT *, UEMUSHORT *)); ! static void toe64 PARAMS ((UEMUSHORT *, UEMUSHORT *)); ! static void etoe53 PARAMS ((const UEMUSHORT *, UEMUSHORT *)); ! static void toe53 PARAMS ((UEMUSHORT *, UEMUSHORT *)); ! static void etoe24 PARAMS ((const UEMUSHORT *, UEMUSHORT *)); ! static void toe24 PARAMS ((UEMUSHORT *, UEMUSHORT *)); ! static int ecmp PARAMS ((const UEMUSHORT *, const UEMUSHORT *)); #if 0 ! static void eround PARAMS ((const UEMUSHORT *, UEMUSHORT *)); #endif ! static void ltoe PARAMS ((const HOST_WIDE_INT *, UEMUSHORT *)); ! static void ultoe PARAMS ((const unsigned HOST_WIDE_INT *, UEMUSHORT *)); ! static void eifrac PARAMS ((const UEMUSHORT *, HOST_WIDE_INT *, ! UEMUSHORT *)); ! static void euifrac PARAMS ((const UEMUSHORT *, unsigned HOST_WIDE_INT *, ! UEMUSHORT *)); ! static int eshift PARAMS ((UEMUSHORT *, int)); ! static int enormlz PARAMS ((UEMUSHORT *)); #if 0 ! static void e24toasc PARAMS ((const UEMUSHORT *, char *, int)); ! static void e53toasc PARAMS ((const UEMUSHORT *, char *, int)); ! static void e64toasc PARAMS ((const UEMUSHORT *, char *, int)); ! static void e113toasc PARAMS ((const UEMUSHORT *, char *, int)); #endif /* 0 */ ! static void etoasc PARAMS ((const UEMUSHORT *, char *, int)); ! static void asctoe24 PARAMS ((const char *, UEMUSHORT *)); ! static void asctoe53 PARAMS ((const char *, UEMUSHORT *)); ! static void asctoe64 PARAMS ((const char *, UEMUSHORT *)); ! #if (INTEL_EXTENDED_IEEE_FORMAT == 0) ! static void asctoe113 PARAMS ((const char *, UEMUSHORT *)); #endif ! static void asctoe PARAMS ((const char *, UEMUSHORT *)); ! static void asctoeg PARAMS ((const char *, UEMUSHORT *, int)); ! static void efloor PARAMS ((const UEMUSHORT *, UEMUSHORT *)); #if 0 ! static void efrexp PARAMS ((const UEMUSHORT *, int *, ! UEMUSHORT *)); #endif ! static void eldexp PARAMS ((const UEMUSHORT *, int, UEMUSHORT *)); #if 0 ! static void eremain PARAMS ((const UEMUSHORT *, const UEMUSHORT *, ! UEMUSHORT *)); #endif ! static void eiremain PARAMS ((UEMUSHORT *, UEMUSHORT *)); static void mtherr PARAMS ((const char *, int)); #ifdef DEC ! static void dectoe PARAMS ((const UEMUSHORT *, UEMUSHORT *)); ! static void etodec PARAMS ((const UEMUSHORT *, UEMUSHORT *)); ! static void todec PARAMS ((UEMUSHORT *, UEMUSHORT *)); #endif #ifdef IBM ! static void ibmtoe PARAMS ((const UEMUSHORT *, UEMUSHORT *, ! enum machine_mode)); ! static void etoibm PARAMS ((const UEMUSHORT *, UEMUSHORT *, ! enum machine_mode)); ! static void toibm PARAMS ((UEMUSHORT *, UEMUSHORT *, ! enum machine_mode)); #endif #ifdef C4X ! static void c4xtoe PARAMS ((const UEMUSHORT *, UEMUSHORT *, ! enum machine_mode)); ! static void etoc4x PARAMS ((const UEMUSHORT *, UEMUSHORT *, ! enum machine_mode)); ! static void toc4x PARAMS ((UEMUSHORT *, UEMUSHORT *, ! enum machine_mode)); #endif #if 0 ! static void uditoe PARAMS ((const UEMUSHORT *, UEMUSHORT *)); ! static void ditoe PARAMS ((const UEMUSHORT *, UEMUSHORT *)); ! static void etoudi PARAMS ((const UEMUSHORT *, UEMUSHORT *)); ! static void etodi PARAMS ((const UEMUSHORT *, UEMUSHORT *)); ! static void esqrt PARAMS ((const UEMUSHORT *, UEMUSHORT *)); #endif /* Copy 32-bit numbers obtained from array containing 16-bit numbers, swapping ends if required, into output array of longs. The ! result is normally passed to fprintf by the ASM_OUTPUT_ macros. */ static void endian (e, x, mode) ! const UEMUSHORT e[]; long x[]; enum machine_mode mode; { *************** endian (e, x, mode) *** 504,516 **** switch (mode) { case TFmode: ! #ifndef INTEL_EXTENDED_IEEE_FORMAT /* Swap halfwords in the fourth long. */ th = (unsigned long) e[6] & 0xffff; t = (unsigned long) e[7] & 0xffff; t |= th << 16; x[3] = (long) t; #endif case XFmode: /* Swap halfwords in the third long. */ --- 520,535 ---- switch (mode) { case TFmode: ! #if (INTEL_EXTENDED_IEEE_FORMAT == 0) /* Swap halfwords in the fourth long. */ th = (unsigned long) e[6] & 0xffff; t = (unsigned long) e[7] & 0xffff; t |= th << 16; x[3] = (long) t; + #else + x[3] = 0; #endif + /* FALLTHRU */ case XFmode: /* Swap halfwords in the third long. */ *************** endian (e, x, mode) *** 518,524 **** t = (unsigned long) e[5] & 0xffff; t |= th << 16; x[2] = (long) t; ! /* fall into the double case */ case DFmode: /* Swap halfwords in the second word. */ --- 537,543 ---- t = (unsigned long) e[5] & 0xffff; t |= th << 16; x[2] = (long) t; ! /* FALLTHRU */ case DFmode: /* Swap halfwords in the second word. */ *************** endian (e, x, mode) *** 526,532 **** t = (unsigned long) e[3] & 0xffff; t |= th << 16; x[1] = (long) t; ! /* fall into the float case */ case SFmode: case HFmode: --- 545,551 ---- t = (unsigned long) e[3] & 0xffff; t |= th << 16; x[1] = (long) t; ! /* FALLTHRU */ case SFmode: case HFmode: *************** endian (e, x, mode) *** 548,560 **** switch (mode) { case TFmode: ! #ifndef INTEL_EXTENDED_IEEE_FORMAT /* Pack the fourth long. */ th = (unsigned long) e[7] & 0xffff; t = (unsigned long) e[6] & 0xffff; t |= th << 16; x[3] = (long) t; #endif case XFmode: /* Pack the third long. --- 567,582 ---- switch (mode) { case TFmode: ! #if (INTEL_EXTENDED_IEEE_FORMAT == 0) /* Pack the fourth long. */ th = (unsigned long) e[7] & 0xffff; t = (unsigned long) e[6] & 0xffff; t |= th << 16; x[3] = (long) t; + #else + x[3] = 0; #endif + /* FALLTHRU */ case XFmode: /* Pack the third long. *************** endian (e, x, mode) *** 564,570 **** t = (unsigned long) e[4] & 0xffff; t |= th << 16; x[2] = (long) t; ! /* fall into the double case */ case DFmode: /* Pack the second long */ --- 586,592 ---- t = (unsigned long) e[4] & 0xffff; t |= th << 16; x[2] = (long) t; ! /* FALLTHRU */ case DFmode: /* Pack the second long */ *************** endian (e, x, mode) *** 572,578 **** t = (unsigned long) e[2] & 0xffff; t |= th << 16; x[1] = (long) t; ! /* fall into the float case */ case SFmode: case HFmode: --- 594,600 ---- t = (unsigned long) e[2] & 0xffff; t |= th << 16; x[1] = (long) t; ! /* FALLTHRU */ case SFmode: case HFmode: *************** earith (value, icode, r1, r2) *** 599,605 **** REAL_VALUE_TYPE *r1; REAL_VALUE_TYPE *r2; { ! unsigned EMUSHORT d1[NE], d2[NE], v[NE]; enum tree_code code; GET_REAL (r1, d1); --- 621,627 ---- REAL_VALUE_TYPE *r1; REAL_VALUE_TYPE *r2; { ! UEMUSHORT d1[NE], d2[NE], v[NE]; enum tree_code code; GET_REAL (r1, d1); *************** REAL_VALUE_TYPE *** 675,681 **** etrunci (x) REAL_VALUE_TYPE x; { ! unsigned EMUSHORT f[NE], g[NE]; REAL_VALUE_TYPE r; HOST_WIDE_INT l; --- 697,703 ---- etrunci (x) REAL_VALUE_TYPE x; { ! UEMUSHORT f[NE], g[NE]; REAL_VALUE_TYPE r; HOST_WIDE_INT l; *************** REAL_VALUE_TYPE *** 698,704 **** etruncui (x) REAL_VALUE_TYPE x; { ! unsigned EMUSHORT f[NE], g[NE]; REAL_VALUE_TYPE r; unsigned HOST_WIDE_INT l; --- 720,726 ---- etruncui (x) REAL_VALUE_TYPE x; { ! UEMUSHORT f[NE], g[NE]; REAL_VALUE_TYPE r; unsigned HOST_WIDE_INT l; *************** ereal_atof (s, t) *** 723,729 **** const char *s; enum machine_mode t; { ! unsigned EMUSHORT tem[NE], e[NE]; REAL_VALUE_TYPE r; switch (t) --- 745,751 ---- const char *s; enum machine_mode t; { ! UEMUSHORT tem[NE], e[NE]; REAL_VALUE_TYPE r; switch (t) *************** ereal_atof (s, t) *** 749,755 **** break; case TFmode: ! #ifndef INTEL_EXTENDED_IEEE_FORMAT asctoe113 (s, tem); e113toe (tem, e); break; --- 771,777 ---- break; case TFmode: ! #if (INTEL_EXTENDED_IEEE_FORMAT == 0) asctoe113 (s, tem); e113toe (tem, e); break; *************** REAL_VALUE_TYPE *** 775,781 **** ereal_negate (x) REAL_VALUE_TYPE x; { ! unsigned EMUSHORT e[NE]; REAL_VALUE_TYPE r; GET_REAL (&x, e); --- 797,803 ---- ereal_negate (x) REAL_VALUE_TYPE x; { ! UEMUSHORT e[NE]; REAL_VALUE_TYPE r; GET_REAL (&x, e); *************** HOST_WIDE_INT *** 792,798 **** efixi (x) REAL_VALUE_TYPE x; { ! unsigned EMUSHORT f[NE], g[NE]; HOST_WIDE_INT l; GET_REAL (&x, f); --- 814,820 ---- efixi (x) REAL_VALUE_TYPE x; { ! UEMUSHORT f[NE], g[NE]; HOST_WIDE_INT l; GET_REAL (&x, f); *************** unsigned HOST_WIDE_INT *** 815,821 **** efixui (x) REAL_VALUE_TYPE x; { ! unsigned EMUSHORT f[NE], g[NE]; unsigned HOST_WIDE_INT l; GET_REAL (&x, f); --- 837,843 ---- efixui (x) REAL_VALUE_TYPE x; { ! UEMUSHORT f[NE], g[NE]; unsigned HOST_WIDE_INT l; GET_REAL (&x, f); *************** ereal_from_int (d, i, j, mode) *** 839,845 **** HOST_WIDE_INT i, j; enum machine_mode mode; { ! unsigned EMUSHORT df[NE], dg[NE]; HOST_WIDE_INT low, high; int sign; --- 861,867 ---- HOST_WIDE_INT i, j; enum machine_mode mode; { ! UEMUSHORT df[NE], dg[NE]; HOST_WIDE_INT low, high; int sign; *************** ereal_from_int (d, i, j, mode) *** 886,892 **** break; case 128: ! #ifndef INTEL_EXTENDED_IEEE_FORMAT etoe113 (dg, df); e113toe (df, dg); #else --- 908,914 ---- break; case 128: ! #if (INTEL_EXTENDED_IEEE_FORMAT == 0) etoe113 (dg, df); e113toe (df, dg); #else *************** ereal_from_int (d, i, j, mode) *** 903,909 **** } ! /* REAL_VALUE_FROM_UNSIGNED_INT macro. */ void ereal_from_uint (d, i, j, mode) --- 925,931 ---- } ! /* REAL_VALUE_FROM_UNSIGNED_INT macro. */ void ereal_from_uint (d, i, j, mode) *************** ereal_from_uint (d, i, j, mode) *** 911,917 **** unsigned HOST_WIDE_INT i, j; enum machine_mode mode; { ! unsigned EMUSHORT df[NE], dg[NE]; unsigned HOST_WIDE_INT low, high; if (GET_MODE_CLASS (mode) != MODE_FLOAT) --- 933,939 ---- unsigned HOST_WIDE_INT i, j; enum machine_mode mode; { ! UEMUSHORT df[NE], dg[NE]; unsigned HOST_WIDE_INT low, high; if (GET_MODE_CLASS (mode) != MODE_FLOAT) *************** ereal_from_uint (d, i, j, mode) *** 945,951 **** break; case 128: ! #ifndef INTEL_EXTENDED_IEEE_FORMAT etoe113 (dg, df); e113toe (df, dg); #else --- 967,973 ---- break; case 128: ! #if (INTEL_EXTENDED_IEEE_FORMAT == 0) etoe113 (dg, df); e113toe (df, dg); #else *************** ereal_to_int (low, high, rr) *** 969,975 **** HOST_WIDE_INT *low, *high; REAL_VALUE_TYPE rr; { ! unsigned EMUSHORT d[NE], df[NE], dg[NE], dh[NE]; int s; GET_REAL (&rr, d); --- 991,997 ---- HOST_WIDE_INT *low, *high; REAL_VALUE_TYPE rr; { ! UEMUSHORT d[NE], df[NE], dg[NE], dh[NE]; int s; GET_REAL (&rr, d); *************** ereal_to_int (low, high, rr) *** 993,999 **** ediv (df, d, dg); /* dg = d / 2^32 is the high word */ euifrac (dg, (unsigned HOST_WIDE_INT *) high, dh); emul (df, dh, dg); /* fractional part is the low word */ ! euifrac (dg, (unsigned HOST_WIDE_INT *)low, dh); if (s) { /* complement and add 1 */ --- 1015,1021 ---- ediv (df, d, dg); /* dg = d / 2^32 is the high word */ euifrac (dg, (unsigned HOST_WIDE_INT *) high, dh); emul (df, dh, dg); /* fractional part is the low word */ ! euifrac (dg, (unsigned HOST_WIDE_INT *) low, dh); if (s) { /* complement and add 1 */ *************** ereal_ldexp (x, n) *** 1013,1019 **** REAL_VALUE_TYPE x; int n; { ! unsigned EMUSHORT e[NE], y[NE]; REAL_VALUE_TYPE r; GET_REAL (&x, e); --- 1035,1041 ---- REAL_VALUE_TYPE x; int n; { ! UEMUSHORT e[NE], y[NE]; REAL_VALUE_TYPE r; GET_REAL (&x, e); *************** target_isinf (x) *** 1038,1044 **** REAL_VALUE_TYPE x ATTRIBUTE_UNUSED; { #ifdef INFINITY ! unsigned EMUSHORT e[NE]; GET_REAL (&x, e); return (eisinf (e)); --- 1060,1066 ---- REAL_VALUE_TYPE x ATTRIBUTE_UNUSED; { #ifdef INFINITY ! UEMUSHORT e[NE]; GET_REAL (&x, e); return (eisinf (e)); *************** target_isnan (x) *** 1054,1060 **** REAL_VALUE_TYPE x ATTRIBUTE_UNUSED; { #ifdef NANS ! unsigned EMUSHORT e[NE]; GET_REAL (&x, e); return (eisnan (e)); --- 1076,1082 ---- REAL_VALUE_TYPE x ATTRIBUTE_UNUSED; { #ifdef NANS ! UEMUSHORT e[NE]; GET_REAL (&x, e); return (eisnan (e)); *************** real_value_truncate (mode, arg) *** 1082,1088 **** enum machine_mode mode; REAL_VALUE_TYPE arg; { ! unsigned EMUSHORT e[NE], t[NE]; REAL_VALUE_TYPE r; GET_REAL (&arg, e); --- 1104,1110 ---- enum machine_mode mode; REAL_VALUE_TYPE arg; { ! UEMUSHORT e[NE], t[NE]; REAL_VALUE_TYPE r; GET_REAL (&arg, e); *************** real_value_truncate (mode, arg) *** 1094,1100 **** switch (mode) { case TFmode: ! #ifndef INTEL_EXTENDED_IEEE_FORMAT etoe113 (e, t); e113toe (t, t); break; --- 1116,1122 ---- switch (mode) { case TFmode: ! #if (INTEL_EXTENDED_IEEE_FORMAT == 0) etoe113 (e, t); e113toe (t, t); break; *************** exact_real_inverse (mode, r) *** 1150,1156 **** enum machine_mode mode; REAL_VALUE_TYPE *r; { ! unsigned EMUSHORT e[NE], einv[NE]; REAL_VALUE_TYPE rinv; int i; --- 1172,1178 ---- enum machine_mode mode; REAL_VALUE_TYPE *r; { ! UEMUSHORT e[NE], einv[NE]; REAL_VALUE_TYPE rinv; int i; *************** etartdouble (r, l) *** 1239,1248 **** REAL_VALUE_TYPE r; long l[]; { ! unsigned EMUSHORT e[NE]; GET_REAL (&r, e); etoe113 (e, e); endian (e, l, TFmode); } --- 1261,1274 ---- REAL_VALUE_TYPE r; long l[]; { ! UEMUSHORT e[NE]; GET_REAL (&r, e); + #if INTEL_EXTENDED_IEEE_FORMAT == 0 etoe113 (e, e); + #else + etoe64 (e, e); + #endif endian (e, l, TFmode); } *************** etarldouble (r, l) *** 1255,1261 **** REAL_VALUE_TYPE r; long l[]; { ! unsigned EMUSHORT e[NE]; GET_REAL (&r, e); etoe64 (e, e); --- 1281,1287 ---- REAL_VALUE_TYPE r; long l[]; { ! UEMUSHORT e[NE]; GET_REAL (&r, e); etoe64 (e, e); *************** etardouble (r, l) *** 1270,1276 **** REAL_VALUE_TYPE r; long l[]; { ! unsigned EMUSHORT e[NE]; GET_REAL (&r, e); etoe53 (e, e); --- 1296,1302 ---- REAL_VALUE_TYPE r; long l[]; { ! UEMUSHORT e[NE]; GET_REAL (&r, e); etoe53 (e, e); *************** long *** 1284,1290 **** etarsingle (r) REAL_VALUE_TYPE r; { ! unsigned EMUSHORT e[NE]; long l; GET_REAL (&r, e); --- 1310,1316 ---- etarsingle (r) REAL_VALUE_TYPE r; { ! UEMUSHORT e[NE]; long l; GET_REAL (&r, e); *************** ereal_to_decimal (x, s) *** 1303,1322 **** REAL_VALUE_TYPE x; char *s; { ! unsigned EMUSHORT e[NE]; GET_REAL (&x, e); etoasc (e, s, 20); } /* Compare X and Y. Return 1 if X > Y, 0 if X == Y, -1 if X < Y, ! or -2 if either is a NaN. */ int ereal_cmp (x, y) REAL_VALUE_TYPE x, y; { ! unsigned EMUSHORT ex[NE], ey[NE]; GET_REAL (&x, ex); GET_REAL (&y, ey); --- 1329,1348 ---- REAL_VALUE_TYPE x; char *s; { ! UEMUSHORT e[NE]; GET_REAL (&x, e); etoasc (e, s, 20); } /* Compare X and Y. Return 1 if X > Y, 0 if X == Y, -1 if X < Y, ! or -2 if either is a NaN. */ int ereal_cmp (x, y) REAL_VALUE_TYPE x, y; { ! UEMUSHORT ex[NE], ey[NE]; GET_REAL (&x, ex); GET_REAL (&y, ey); *************** int *** 1329,1335 **** ereal_isneg (x) REAL_VALUE_TYPE x; { ! unsigned EMUSHORT ex[NE]; GET_REAL (&x, ex); return (eisneg (ex)); --- 1355,1361 ---- ereal_isneg (x) REAL_VALUE_TYPE x; { ! UEMUSHORT ex[NE]; GET_REAL (&x, ex); return (eisneg (ex)); *************** ereal_isneg (x) *** 1513,1584 **** /* e type constants used by high precision check routines */ ! #if MAX_LONG_DOUBLE_TYPE_SIZE == 128 && !defined(INTEL_EXTENDED_IEEE_FORMAT) /* 0.0 */ ! unsigned EMUSHORT ezero[NE] = {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,}; - extern unsigned EMUSHORT ezero[]; /* 5.0E-1 */ ! unsigned EMUSHORT ehalf[NE] = {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0x3ffe,}; - extern unsigned EMUSHORT ehalf[]; /* 1.0E0 */ ! unsigned EMUSHORT eone[NE] = {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0x3fff,}; - extern unsigned EMUSHORT eone[]; /* 2.0E0 */ ! unsigned EMUSHORT etwo[NE] = {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0x4000,}; - extern unsigned EMUSHORT etwo[]; /* 3.2E1 */ ! unsigned EMUSHORT e32[NE] = {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0x4004,}; - extern unsigned EMUSHORT e32[]; /* 6.93147180559945309417232121458176568075500134360255E-1 */ ! unsigned EMUSHORT elog2[NE] = {0x40f3, 0xf6af, 0x03f2, 0xb398, 0xc9e3, 0x79ab, 0150717, 0013767, 0130562, 0x3ffe,}; - extern unsigned EMUSHORT elog2[]; /* 1.41421356237309504880168872420969807856967187537695E0 */ ! unsigned EMUSHORT esqrt2[NE] = {0x1d6f, 0xbe9f, 0x754a, 0x89b3, 0x597d, 0x6484, 0174736, 0171463, 0132404, 0x3fff,}; - extern unsigned EMUSHORT esqrt2[]; /* 3.14159265358979323846264338327950288419716939937511E0 */ ! unsigned EMUSHORT epi[NE] = {0x2902, 0x1cd1, 0x80dc, 0x628b, 0xc4c6, 0xc234, 0020550, 0155242, 0144417, 0040000,}; - extern unsigned EMUSHORT epi[]; #else /* LONG_DOUBLE_TYPE_SIZE is other than 128 */ ! unsigned EMUSHORT ezero[NE] = {0, 0000000, 0000000, 0000000, 0000000, 0000000,}; ! unsigned EMUSHORT ehalf[NE] = {0, 0000000, 0000000, 0000000, 0100000, 0x3ffe,}; ! unsigned EMUSHORT eone[NE] = {0, 0000000, 0000000, 0000000, 0100000, 0x3fff,}; ! unsigned EMUSHORT etwo[NE] = {0, 0000000, 0000000, 0000000, 0100000, 0040000,}; ! unsigned EMUSHORT e32[NE] = {0, 0000000, 0000000, 0000000, 0100000, 0040004,}; ! unsigned EMUSHORT elog2[NE] = {0xc9e4, 0x79ab, 0150717, 0013767, 0130562, 0x3ffe,}; ! unsigned EMUSHORT esqrt2[NE] = {0x597e, 0x6484, 0174736, 0171463, 0132404, 0x3fff,}; ! unsigned EMUSHORT epi[NE] = {0xc4c6, 0xc234, 0020550, 0155242, 0144417, 0040000,}; #endif --- 1539,1602 ---- /* e type constants used by high precision check routines */ ! #if MAX_LONG_DOUBLE_TYPE_SIZE == 128 && (INTEL_EXTENDED_IEEE_FORMAT == 0) /* 0.0 */ ! const UEMUSHORT ezero[NE] = {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,}; /* 5.0E-1 */ ! const UEMUSHORT ehalf[NE] = {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0x3ffe,}; /* 1.0E0 */ ! const UEMUSHORT eone[NE] = {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0x3fff,}; /* 2.0E0 */ ! const UEMUSHORT etwo[NE] = {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0x4000,}; /* 3.2E1 */ ! const UEMUSHORT e32[NE] = {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0x4004,}; /* 6.93147180559945309417232121458176568075500134360255E-1 */ ! const UEMUSHORT elog2[NE] = {0x40f3, 0xf6af, 0x03f2, 0xb398, 0xc9e3, 0x79ab, 0150717, 0013767, 0130562, 0x3ffe,}; /* 1.41421356237309504880168872420969807856967187537695E0 */ ! const UEMUSHORT esqrt2[NE] = {0x1d6f, 0xbe9f, 0x754a, 0x89b3, 0x597d, 0x6484, 0174736, 0171463, 0132404, 0x3fff,}; /* 3.14159265358979323846264338327950288419716939937511E0 */ ! const UEMUSHORT epi[NE] = {0x2902, 0x1cd1, 0x80dc, 0x628b, 0xc4c6, 0xc234, 0020550, 0155242, 0144417, 0040000,}; #else /* LONG_DOUBLE_TYPE_SIZE is other than 128 */ ! const UEMUSHORT ezero[NE] = {0, 0000000, 0000000, 0000000, 0000000, 0000000,}; ! const UEMUSHORT ehalf[NE] = {0, 0000000, 0000000, 0000000, 0100000, 0x3ffe,}; ! const UEMUSHORT eone[NE] = {0, 0000000, 0000000, 0000000, 0100000, 0x3fff,}; ! const UEMUSHORT etwo[NE] = {0, 0000000, 0000000, 0000000, 0100000, 0040000,}; ! const UEMUSHORT e32[NE] = {0, 0000000, 0000000, 0000000, 0100000, 0040004,}; ! const UEMUSHORT elog2[NE] = {0xc9e4, 0x79ab, 0150717, 0013767, 0130562, 0x3ffe,}; ! const UEMUSHORT esqrt2[NE] = {0x597e, 0x6484, 0174736, 0171463, 0132404, 0x3fff,}; ! const UEMUSHORT epi[NE] = {0xc4c6, 0xc234, 0020550, 0155242, 0144417, 0040000,}; #endif *************** extern int rndprc; *** 1592,1600 **** static void eclear (x) ! register unsigned EMUSHORT *x; { ! register int i; for (i = 0; i < NE; i++) *x++ = 0; --- 1610,1618 ---- static void eclear (x) ! UEMUSHORT *x; { ! int i; for (i = 0; i < NE; i++) *x++ = 0; *************** eclear (x) *** 1604,1612 **** static void emov (a, b) ! register unsigned EMUSHORT *a, *b; { ! register int i; for (i = 0; i < NE; i++) *b++ = *a++; --- 1622,1631 ---- static void emov (a, b) ! const UEMUSHORT *a; ! UEMUSHORT *b; { ! int i; for (i = 0; i < NE; i++) *b++ = *a++; *************** emov (a, b) *** 1618,1624 **** static void eabs (x) ! unsigned EMUSHORT x[]; { /* sign is top bit of last word of external format */ x[NE - 1] &= 0x7fff; --- 1637,1643 ---- static void eabs (x) ! UEMUSHORT x[]; { /* sign is top bit of last word of external format */ x[NE - 1] &= 0x7fff; *************** eabs (x) *** 1629,1635 **** static void eneg (x) ! unsigned EMUSHORT x[]; { x[NE - 1] ^= 0x8000; /* Toggle the sign bit */ --- 1648,1654 ---- static void eneg (x) ! UEMUSHORT x[]; { x[NE - 1] ^= 0x8000; /* Toggle the sign bit */ *************** eneg (x) *** 1639,1645 **** static int eisneg (x) ! unsigned EMUSHORT x[]; { if (x[NE - 1] & 0x8000) --- 1658,1664 ---- static int eisneg (x) ! const UEMUSHORT x[]; { if (x[NE - 1] & 0x8000) *************** eisneg (x) *** 1652,1658 **** static int eisinf (x) ! unsigned EMUSHORT x[]; { #ifdef NANS --- 1671,1677 ---- static int eisinf (x) ! const UEMUSHORT x[]; { #ifdef NANS *************** eisinf (x) *** 1670,1676 **** static int eisnan (x) ! unsigned EMUSHORT x[] ATTRIBUTE_UNUSED; { #ifdef NANS int i; --- 1689,1695 ---- static int eisnan (x) ! const UEMUSHORT x[] ATTRIBUTE_UNUSED; { #ifdef NANS int i; *************** eisnan (x) *** 1694,1702 **** static void einfin (x) ! register unsigned EMUSHORT *x; { ! register int i; #ifdef INFINITY for (i = 0; i < NE - 1; i++) --- 1713,1721 ---- static void einfin (x) ! UEMUSHORT *x; { ! int i; #ifdef INFINITY for (i = 0; i < NE - 1; i++) *************** einfin (x) *** 1738,1747 **** #ifdef NANS static void enan (x, sign) ! register unsigned EMUSHORT *x; int sign; { ! register int i; for (i = 0; i < NE - 2; i++) *x++ = 0; --- 1757,1766 ---- #ifdef NANS static void enan (x, sign) ! UEMUSHORT *x; int sign; { ! int i; for (i = 0; i < NE - 2; i++) *x++ = 0; *************** enan (x, sign) *** 1754,1762 **** static void emovi (a, b) ! unsigned EMUSHORT *a, *b; { ! register unsigned EMUSHORT *p, *q; int i; q = b; --- 1773,1783 ---- static void emovi (a, b) ! const UEMUSHORT *a; ! UEMUSHORT *b; { ! const UEMUSHORT *p; ! UEMUSHORT *q; int i; q = b; *************** emovi (a, b) *** 1801,1810 **** static void emovo (a, b) ! unsigned EMUSHORT *a, *b; { ! register unsigned EMUSHORT *p, *q; ! unsigned EMUSHORT i; int j; p = a; --- 1822,1833 ---- static void emovo (a, b) ! const UEMUSHORT *a; ! UEMUSHORT *b; { ! const UEMUSHORT *p; ! UEMUSHORT *q; ! UEMUSHORT i; int j; p = a; *************** emovo (a, b) *** 1840,1848 **** static void ecleaz (xi) ! register unsigned EMUSHORT *xi; { ! register int i; for (i = 0; i < NI; i++) *xi++ = 0; --- 1863,1871 ---- static void ecleaz (xi) ! UEMUSHORT *xi; { ! int i; for (i = 0; i < NI; i++) *xi++ = 0; *************** ecleaz (xi) *** 1852,1860 **** static void ecleazs (xi) ! register unsigned EMUSHORT *xi; { ! register int i; ++xi; for (i = 0; i < NI - 1; i++) --- 1875,1883 ---- static void ecleazs (xi) ! UEMUSHORT *xi; { ! int i; ++xi; for (i = 0; i < NI - 1; i++) *************** ecleazs (xi) *** 1865,1873 **** static void emovz (a, b) ! register unsigned EMUSHORT *a, *b; { ! register int i; for (i = 0; i < NI - 1; i++) *b++ = *a++; --- 1888,1897 ---- static void emovz (a, b) ! const UEMUSHORT *a; ! UEMUSHORT *b; { ! int i; for (i = 0; i < NI - 1; i++) *b++ = *a++; *************** emovz (a, b) *** 1882,1888 **** #ifdef NANS static void einan (x) ! unsigned EMUSHORT x[]; { ecleaz (x); --- 1906,1912 ---- #ifdef NANS static void einan (x) ! UEMUSHORT x[]; { ecleaz (x); *************** einan (x) *** 1896,1902 **** #ifdef NANS static int eiisnan (x) ! unsigned EMUSHORT x[]; { int i; --- 1920,1926 ---- #ifdef NANS static int eiisnan (x) ! const UEMUSHORT x[]; { int i; *************** eiisnan (x) *** 1917,1923 **** #ifdef NANS static int eiisneg (x) ! unsigned EMUSHORT x[]; { return x[0] != 0; --- 1941,1947 ---- #ifdef NANS static int eiisneg (x) ! const UEMUSHORT x[]; { return x[0] != 0; *************** eiisneg (x) *** 1930,1936 **** static void eiinfin (x) ! unsigned EMUSHORT x[]; { ecleaz (x); --- 1954,1960 ---- static void eiinfin (x) ! UEMUSHORT x[]; { ecleaz (x); *************** eiinfin (x) *** 1943,1949 **** #ifdef INFINITY static int eiisinf (x) ! unsigned EMUSHORT x[]; { #ifdef NANS --- 1967,1973 ---- #ifdef INFINITY static int eiisinf (x) ! const UEMUSHORT x[]; { #ifdef NANS *************** eiisinf (x) *** 1965,1971 **** static int ecmpm (a, b) ! register unsigned EMUSHORT *a, *b; { int i; --- 1989,1995 ---- static int ecmpm (a, b) ! const UEMUSHORT *a, *b; { int i; *************** ecmpm (a, b) *** 1989,1997 **** static void eshdn1 (x) ! register unsigned EMUSHORT *x; { ! register unsigned EMUSHORT bits; int i; x += M; /* point to significand area */ --- 2013,2021 ---- static void eshdn1 (x) ! UEMUSHORT *x; { ! UEMUSHORT bits; int i; x += M; /* point to significand area */ *************** eshdn1 (x) *** 2013,2021 **** static void eshup1 (x) ! register unsigned EMUSHORT *x; { ! register unsigned EMUSHORT bits; int i; x += NI - 1; --- 2037,2045 ---- static void eshup1 (x) ! UEMUSHORT *x; { ! UEMUSHORT bits; int i; x += NI - 1; *************** eshup1 (x) *** 2038,2046 **** static void eshdn8 (x) ! register unsigned EMUSHORT *x; { ! register unsigned EMUSHORT newbyt, oldbyt; int i; x += M; --- 2062,2070 ---- static void eshdn8 (x) ! UEMUSHORT *x; { ! UEMUSHORT newbyt, oldbyt; int i; x += M; *************** eshdn8 (x) *** 2059,2068 **** static void eshup8 (x) ! register unsigned EMUSHORT *x; { int i; ! register unsigned EMUSHORT newbyt, oldbyt; x += NI - 1; oldbyt = 0; --- 2083,2092 ---- static void eshup8 (x) ! UEMUSHORT *x; { int i; ! UEMUSHORT newbyt, oldbyt; x += NI - 1; oldbyt = 0; *************** eshup8 (x) *** 2081,2090 **** static void eshup6 (x) ! register unsigned EMUSHORT *x; { int i; ! register unsigned EMUSHORT *p; p = x + M; x += M + 1; --- 2105,2114 ---- static void eshup6 (x) ! UEMUSHORT *x; { int i; ! UEMUSHORT *p; p = x + M; x += M + 1; *************** eshup6 (x) *** 2099,2108 **** static void eshdn6 (x) ! register unsigned EMUSHORT *x; { int i; ! register unsigned EMUSHORT *p; x += NI - 1; p = x + 1; --- 2123,2132 ---- static void eshdn6 (x) ! UEMUSHORT *x; { int i; ! UEMUSHORT *p; x += NI - 1; p = x + 1; *************** eshdn6 (x) *** 2117,2125 **** static void eaddm (x, y) ! unsigned EMUSHORT *x, *y; { ! register unsigned EMULONG a; int i; unsigned int carry; --- 2141,2150 ---- static void eaddm (x, y) ! const UEMUSHORT *x; ! UEMUSHORT *y; { ! unsigned EMULONG a; int i; unsigned int carry; *************** eaddm (x, y) *** 2133,2139 **** carry = 1; else carry = 0; ! *y = (unsigned EMUSHORT) a; --x; --y; } --- 2158,2164 ---- carry = 1; else carry = 0; ! *y = (UEMUSHORT) a; --x; --y; } *************** eaddm (x, y) *** 2143,2149 **** static void esubm (x, y) ! unsigned EMUSHORT *x, *y; { unsigned EMULONG a; int i; --- 2168,2175 ---- static void esubm (x, y) ! const UEMUSHORT *x; ! UEMUSHORT *y; { unsigned EMULONG a; int i; *************** esubm (x, y) *** 2159,2172 **** carry = 1; else carry = 0; ! *y = (unsigned EMUSHORT) a; --x; --y; } } ! static unsigned EMUSHORT equot[NI]; #if 0 --- 2185,2198 ---- carry = 1; else carry = 0; ! *y = (UEMUSHORT) a; --x; --y; } } ! static UEMUSHORT equot[NI]; #if 0 *************** static unsigned EMUSHORT equot[NI]; *** 2177,2187 **** int edivm (den, num) ! unsigned EMUSHORT den[], num[]; { int i; ! register unsigned EMUSHORT *p, *q; ! unsigned EMUSHORT j; p = &equot[0]; *p++ = num[0]; --- 2203,2213 ---- int edivm (den, num) ! UEMUSHORT den[], num[]; { int i; ! UEMUSHORT *p, *q; ! UEMUSHORT j; p = &equot[0]; *p++ = num[0]; *************** edivm (den, num) *** 2275,2283 **** int emulm (a, b) ! unsigned EMUSHORT a[], b[]; { ! unsigned EMUSHORT *p, *q; int i, j, k; equot[0] = b[0]; --- 2301,2309 ---- int emulm (a, b) ! UEMUSHORT a[], b[]; { ! UEMUSHORT *p, *q; int i, j, k; equot[0] = b[0]; *************** emulm (a, b) *** 2328,2339 **** static void m16m (a, b, c) unsigned int a; ! unsigned EMUSHORT b[], c[]; { ! register unsigned EMUSHORT *pp; ! register unsigned EMULONG carry; ! unsigned EMUSHORT *ps; ! unsigned EMUSHORT p[NI]; unsigned EMULONG aa, m; int i; --- 2354,2366 ---- static void m16m (a, b, c) unsigned int a; ! const UEMUSHORT b[]; ! UEMUSHORT c[]; { ! UEMUSHORT *pp; ! unsigned EMULONG carry; ! const UEMUSHORT *ps; ! UEMUSHORT p[NI]; unsigned EMULONG aa, m; int i; *************** m16m (a, b, c) *** 2355,2363 **** { m = (unsigned EMULONG) aa * *ps--; carry = (m & 0xffff) + *pp; ! *pp-- = (unsigned EMUSHORT)carry; carry = (carry >> 16) + (m >> 16) + *pp; ! *pp = (unsigned EMUSHORT)carry; *(pp-1) = carry >> 16; } } --- 2382,2390 ---- { m = (unsigned EMULONG) aa * *ps--; carry = (m & 0xffff) + *pp; ! *pp-- = (UEMUSHORT) carry; carry = (carry >> 16) + (m >> 16) + *pp; ! *pp = (UEMUSHORT) carry; *(pp-1) = carry >> 16; } } *************** m16m (a, b, c) *** 2371,2383 **** static int edivm (den, num) ! unsigned EMUSHORT den[], num[]; { int i; ! register unsigned EMUSHORT *p; unsigned EMULONG tnum; ! unsigned EMUSHORT j, tdenm, tquot; ! unsigned EMUSHORT tprod[NI+1]; p = &equot[0]; *p++ = num[0]; --- 2398,2411 ---- static int edivm (den, num) ! const UEMUSHORT den[]; ! UEMUSHORT num[]; { int i; ! UEMUSHORT *p; unsigned EMULONG tnum; ! UEMUSHORT j, tdenm, tquot; ! UEMUSHORT tprod[NI+1]; p = &equot[0]; *p++ = num[0]; *************** edivm (den, num) *** 2395,2406 **** tnum = (((unsigned EMULONG) num[M]) << 16) + num[M+1]; /* Do not execute the divide instruction if it will overflow. */ ! if ((tdenm * (unsigned long)0xffff) < tnum) tquot = 0xffff; else tquot = tnum / tdenm; /* Multiply denominator by trial quotient digit. */ ! m16m ((unsigned int)tquot, den, tprod); /* The quotient digit may have been overestimated. */ if (ecmpm (tprod, num) > 0) { --- 2423,2434 ---- tnum = (((unsigned EMULONG) num[M]) << 16) + num[M+1]; /* Do not execute the divide instruction if it will overflow. */ ! if ((tdenm * (unsigned long) 0xffff) < tnum) tquot = 0xffff; else tquot = tnum / tdenm; /* Multiply denominator by trial quotient digit. */ ! m16m ((unsigned int) tquot, den, tprod); /* The quotient digit may have been overestimated. */ if (ecmpm (tprod, num) > 0) { *************** edivm (den, num) *** 2414,2420 **** } esubm (tprod, num); equot[i] = tquot; ! eshup6(num); } /* test for nonzero remainder after roundoff bit */ p = &num[M]; --- 2442,2448 ---- } esubm (tprod, num); equot[i] = tquot; ! eshup6 (num); } /* test for nonzero remainder after roundoff bit */ p = &num[M]; *************** edivm (den, num) *** 2429,2446 **** for (i=0; i 0) --- 2907,2913 ---- break; } } ! bi[E] = (UEMUSHORT) ltb; goto done; } if (i > 0) *************** eadd1 (a, b, c) *** 2904,2918 **** static void ediv (a, b, c) ! unsigned EMUSHORT *a, *b, *c; { ! unsigned EMUSHORT ai[NI], bi[NI]; int i, sign; EMULONG lt, lta, ltb; /* IEEE says if result is not a NaN, the sign is "-" if and only if operands have opposite signs -- but flush -0 to 0 later if not IEEE. */ ! sign = eisneg(a) ^ eisneg(b); #ifdef NANS /* Return any NaN input. */ --- 2937,2952 ---- static void ediv (a, b, c) ! const UEMUSHORT *a, *b; ! UEMUSHORT *c; { ! UEMUSHORT ai[NI], bi[NI]; int i, sign; EMULONG lt, lta, ltb; /* IEEE says if result is not a NaN, the sign is "-" if and only if operands have opposite signs -- but flush -0 to 0 later if not IEEE. */ ! sign = eisneg (a) ^ eisneg (b); #ifdef NANS /* Return any NaN input. */ *************** ediv (a, b, c) *** 3004,3022 **** *(c+(NE-1)) &= ~0x8000; } ! /* Multiply e-types A and B, return e-type product C. */ static void emul (a, b, c) ! unsigned EMUSHORT *a, *b, *c; { ! unsigned EMUSHORT ai[NI], bi[NI]; int i, j, sign; EMULONG lt, lta, ltb; /* IEEE says if result is not a NaN, the sign is "-" if and only if operands have opposite signs -- but flush -0 to 0 later if not IEEE. */ ! sign = eisneg(a) ^ eisneg(b); #ifdef NANS /* NaN times anything is the same NaN. */ --- 3038,3057 ---- *(c+(NE-1)) &= ~0x8000; } ! /* Multiply e-types A and B, return e-type product C. */ static void emul (a, b, c) ! const UEMUSHORT *a, *b; ! UEMUSHORT *c; { ! UEMUSHORT ai[NI], bi[NI]; int i, j, sign; EMULONG lt, lta, ltb; /* IEEE says if result is not a NaN, the sign is "-" if and only if operands have opposite signs -- but flush -0 to 0 later if not IEEE. */ ! sign = eisneg (a) ^ eisneg (b); #ifdef NANS /* NaN times anything is the same NaN. */ *************** emul (a, b, c) *** 3104,3110 **** static void e53toe (pe, y) ! unsigned EMUSHORT *pe, *y; { #ifdef DEC --- 3139,3146 ---- static void e53toe (pe, y) ! const UEMUSHORT *pe; ! UEMUSHORT *y; { #ifdef DEC *************** e53toe (pe, y) *** 3121,3129 **** c4xtoe (pe, y, HFmode); #else ! register unsigned EMUSHORT r; ! register unsigned EMUSHORT *e, *p; ! unsigned EMUSHORT yy[NI]; int denorm, k; e = pe; --- 3157,3166 ---- c4xtoe (pe, y, HFmode); #else ! UEMUSHORT r; ! const UEMUSHORT *e; ! UEMUSHORT *p; ! UEMUSHORT yy[NI]; int denorm, k; e = pe; *************** e53toe (pe, y) *** 3201,3207 **** if ((k = enormlz (yy)) > NBITS) ecleazs (yy); else ! yy[E] -= (unsigned EMUSHORT) (k - 1); } emovo (yy, y); #endif /* not C4X */ --- 3238,3244 ---- if ((k = enormlz (yy)) > NBITS) ecleazs (yy); else ! yy[E] -= (UEMUSHORT) (k - 1); } emovo (yy, y); #endif /* not C4X */ *************** e53toe (pe, y) *** 3213,3222 **** static void e64toe (pe, y) ! unsigned EMUSHORT *pe, *y; { ! unsigned EMUSHORT yy[NI]; ! unsigned EMUSHORT *e, *p, *q; int i; e = pe; --- 3250,3261 ---- static void e64toe (pe, y) ! const UEMUSHORT *pe; ! UEMUSHORT *y; { ! UEMUSHORT yy[NI]; ! const UEMUSHORT *e; ! UEMUSHORT *p, *q; int i; e = pe; *************** e64toe (pe, y) *** 3244,3256 **** /* For denormal long double Intel format, shift significand up one -- but only if the top significand bit is zero. A top bit of 1 is "pseudodenormal" when the exponent is zero. */ ! if((yy[NE-1] & 0x7fff) == 0 && (yy[NE-2] & 0x8000) == 0) { ! unsigned EMUSHORT temp[NI]; ! emovi(yy, temp); ! eshup1(temp); ! emovo(temp,y); return; } } --- 3283,3295 ---- /* For denormal long double Intel format, shift significand up one -- but only if the top significand bit is zero. A top bit of 1 is "pseudodenormal" when the exponent is zero. */ ! if ((yy[NE-1] & 0x7fff) == 0 && (yy[NE-2] & 0x8000) == 0) { ! UEMUSHORT temp[NI]; ! emovi (yy, temp); ! eshup1 (temp); ! emovo (temp,y); return; } } *************** bigend_nan: *** 3331,3346 **** *q++ = *p++; } ! #ifndef INTEL_EXTENDED_IEEE_FORMAT /* Convert 128-bit long double precision float PE to e type Y. */ static void e113toe (pe, y) ! unsigned EMUSHORT *pe, *y; { ! register unsigned EMUSHORT r; ! unsigned EMUSHORT *e, *p; ! unsigned EMUSHORT yy[NI]; int denorm, i; e = pe; --- 3370,3387 ---- *q++ = *p++; } ! #if (INTEL_EXTENDED_IEEE_FORMAT == 0) /* Convert 128-bit long double precision float PE to e type Y. */ static void e113toe (pe, y) ! const UEMUSHORT *pe; ! UEMUSHORT *y; { ! UEMUSHORT r; ! const UEMUSHORT *e; ! UEMUSHORT *p; ! UEMUSHORT yy[NI]; int denorm, i; e = pe; *************** e113toe (pe, y) *** 3422,3428 **** static void e24toe (pe, y) ! unsigned EMUSHORT *pe, *y; { #ifdef IBM --- 3463,3470 ---- static void e24toe (pe, y) ! const UEMUSHORT *pe; ! UEMUSHORT *y; { #ifdef IBM *************** e24toe (pe, y) *** 3436,3444 **** #else ! register unsigned EMUSHORT r; ! register unsigned EMUSHORT *e, *p; ! unsigned EMUSHORT yy[NI]; int denorm, k; e = pe; --- 3478,3487 ---- #else ! UEMUSHORT r; ! const UEMUSHORT *e; ! UEMUSHORT *p; ! UEMUSHORT yy[NI]; int denorm, k; e = pe; *************** e24toe (pe, y) *** 3514,3533 **** if ((k = enormlz (yy)) > NBITS) ecleazs (yy); else ! yy[E] -= (unsigned EMUSHORT) (k - 1); } emovo (yy, y); #endif /* not C4X */ #endif /* not IBM */ } /* Convert e-type X to IEEE 128-bit long double format E. */ static void etoe113 (x, e) ! unsigned EMUSHORT *x, *e; { ! unsigned EMUSHORT xi[NI]; EMULONG exp; int rndsav; --- 3557,3578 ---- if ((k = enormlz (yy)) > NBITS) ecleazs (yy); else ! yy[E] -= (UEMUSHORT) (k - 1); } emovo (yy, y); #endif /* not C4X */ #endif /* not IBM */ } + #if (INTEL_EXTENDED_IEEE_FORMAT == 0) /* Convert e-type X to IEEE 128-bit long double format E. */ static void etoe113 (x, e) ! const UEMUSHORT *x; ! UEMUSHORT *e; { ! UEMUSHORT xi[NI]; EMULONG exp; int rndsav; *************** etoe113 (x, e) *** 3560,3569 **** static void toe113 (a, b) ! unsigned EMUSHORT *a, *b; { ! register unsigned EMUSHORT *p, *q; ! unsigned EMUSHORT i; #ifdef NANS if (eiisnan (a)) --- 3605,3614 ---- static void toe113 (a, b) ! UEMUSHORT *a, *b; { ! UEMUSHORT *p, *q; ! UEMUSHORT i; #ifdef NANS if (eiisnan (a)) *************** toe113 (a, b) *** 3613,3626 **** *q-- = *p++; } } /* Convert e-type X to IEEE double extended format E. */ static void etoe64 (x, e) ! unsigned EMUSHORT *x, *e; { ! unsigned EMUSHORT xi[NI]; EMULONG exp; int rndsav; --- 3658,3673 ---- *q-- = *p++; } } + #endif /* Convert e-type X to IEEE double extended format E. */ static void etoe64 (x, e) ! const UEMUSHORT *x; ! UEMUSHORT *e; { ! UEMUSHORT xi[NI]; EMULONG exp; int rndsav; *************** etoe64 (x, e) *** 3654,3663 **** static void toe64 (a, b) ! unsigned EMUSHORT *a, *b; { ! register unsigned EMUSHORT *p, *q; ! unsigned EMUSHORT i; #ifdef NANS if (eiisnan (a)) --- 3701,3710 ---- static void toe64 (a, b) ! UEMUSHORT *a, *b; { ! UEMUSHORT *p, *q; ! UEMUSHORT i; #ifdef NANS if (eiisnan (a)) *************** toe64 (a, b) *** 3771,3777 **** static void etoe53 (x, e) ! unsigned EMUSHORT *x, *e; { etodec (x, e); /* see etodec.c */ } --- 3818,3825 ---- static void etoe53 (x, e) ! const UEMUSHORT *x; ! UEMUSHORT *e; { etodec (x, e); /* see etodec.c */ } *************** etoe53 (x, e) *** 3781,3787 **** static void toe53 (x, y) ! unsigned EMUSHORT *x, *y; { todec (x, y); } --- 3829,3835 ---- static void toe53 (x, y) ! UEMUSHORT *x, *y; { todec (x, y); } *************** toe53 (x, y) *** 3792,3798 **** static void etoe53 (x, e) ! unsigned EMUSHORT *x, *e; { etoibm (x, e, DFmode); } --- 3840,3847 ---- static void etoe53 (x, e) ! const UEMUSHORT *x; ! UEMUSHORT *e; { etoibm (x, e, DFmode); } *************** etoe53 (x, e) *** 3802,3808 **** static void toe53 (x, y) ! unsigned EMUSHORT *x, *y; { toibm (x, y, DFmode); } --- 3851,3857 ---- static void toe53 (x, y) ! UEMUSHORT *x, *y; { toibm (x, y, DFmode); } *************** toe53 (x, y) *** 3813,3819 **** static void etoe53 (x, e) ! unsigned EMUSHORT *x, *e; { etoc4x (x, e, HFmode); } --- 3862,3869 ---- static void etoe53 (x, e) ! const UEMUSHORT *x; ! UEMUSHORT *e; { etoc4x (x, e, HFmode); } *************** etoe53 (x, e) *** 3823,3829 **** static void toe53 (x, y) ! unsigned EMUSHORT *x, *y; { toc4x (x, y, HFmode); } --- 3873,3879 ---- static void toe53 (x, y) ! UEMUSHORT *x, *y; { toc4x (x, y, HFmode); } *************** toe53 (x, y) *** 3834,3842 **** static void etoe53 (x, e) ! unsigned EMUSHORT *x, *e; { ! unsigned EMUSHORT xi[NI]; EMULONG exp; int rndsav; --- 3884,3893 ---- static void etoe53 (x, e) ! const UEMUSHORT *x; ! UEMUSHORT *e; { ! UEMUSHORT xi[NI]; EMULONG exp; int rndsav; *************** etoe53 (x, e) *** 3870,3879 **** static void toe53 (x, y) ! unsigned EMUSHORT *x, *y; { ! unsigned EMUSHORT i; ! unsigned EMUSHORT *p; #ifdef NANS if (eiisnan (x)) --- 3921,3930 ---- static void toe53 (x, y) ! UEMUSHORT *x, *y; { ! UEMUSHORT i; ! UEMUSHORT *p; #ifdef NANS if (eiisnan (x)) *************** toe53 (x, y) *** 3911,3917 **** *y++ = 0; } #else ! *y |= (unsigned EMUSHORT) 0x7fef; if (! REAL_WORDS_BIG_ENDIAN) { *(--y) = 0xffff; --- 3962,3968 ---- *y++ = 0; } #else ! *y |= (UEMUSHORT) 0x7fef; if (! REAL_WORDS_BIG_ENDIAN) { *(--y) = 0xffff; *************** toe53 (x, y) *** 3937,3944 **** i <<= 4; eshift (x, 5); } ! i |= *p++ & (unsigned EMUSHORT) 0x0f; /* *p = xi[M] */ ! *y |= (unsigned EMUSHORT) i; /* high order output already has sign bit set */ if (! REAL_WORDS_BIG_ENDIAN) { *(--y) = *p++; --- 3988,3995 ---- i <<= 4; eshift (x, 5); } ! i |= *p++ & (UEMUSHORT) 0x0f; /* *p = xi[M] */ ! *y |= (UEMUSHORT) i; /* high order output already has sign bit set */ if (! REAL_WORDS_BIG_ENDIAN) { *(--y) = *p++; *************** toe53 (x, y) *** 3967,3973 **** static void etoe24 (x, e) ! unsigned EMUSHORT *x, *e; { etoibm (x, e, SFmode); } --- 4018,4025 ---- static void etoe24 (x, e) ! const UEMUSHORT *x; ! UEMUSHORT *e; { etoibm (x, e, SFmode); } *************** etoe24 (x, e) *** 3977,3983 **** static void toe24 (x, y) ! unsigned EMUSHORT *x, *y; { toibm (x, y, SFmode); } --- 4029,4035 ---- static void toe24 (x, y) ! UEMUSHORT *x, *y; { toibm (x, y, SFmode); } *************** toe24 (x, y) *** 3989,3995 **** static void etoe24 (x, e) ! unsigned EMUSHORT *x, *e; { etoc4x (x, e, QFmode); } --- 4041,4048 ---- static void etoe24 (x, e) ! const UEMUSHORT *x; ! UEMUSHORT *e; { etoc4x (x, e, QFmode); } *************** etoe24 (x, e) *** 3999,4005 **** static void toe24 (x, y) ! unsigned EMUSHORT *x, *y; { toc4x (x, y, QFmode); } --- 4052,4058 ---- static void toe24 (x, y) ! UEMUSHORT *x, *y; { toc4x (x, y, QFmode); } *************** toe24 (x, y) *** 4010,4019 **** static void etoe24 (x, e) ! unsigned EMUSHORT *x, *e; { EMULONG exp; ! unsigned EMUSHORT xi[NI]; int rndsav; #ifdef NANS --- 4063,4073 ---- static void etoe24 (x, e) ! const UEMUSHORT *x; ! UEMUSHORT *e; { EMULONG exp; ! UEMUSHORT xi[NI]; int rndsav; #ifdef NANS *************** etoe24 (x, e) *** 4046,4055 **** static void toe24 (x, y) ! unsigned EMUSHORT *x, *y; { ! unsigned EMUSHORT i; ! unsigned EMUSHORT *p; #ifdef NANS if (eiisnan (x)) --- 4100,4109 ---- static void toe24 (x, y) ! UEMUSHORT *x, *y; { ! UEMUSHORT i; ! UEMUSHORT *p; #ifdef NANS if (eiisnan (x)) *************** toe24 (x, y) *** 4075,4081 **** if (i >= 255) { #ifdef INFINITY ! *y |= (unsigned EMUSHORT) 0x7f80; #ifdef DEC *(--y) = 0; #endif --- 4129,4135 ---- if (i >= 255) { #ifdef INFINITY ! *y |= (UEMUSHORT) 0x7f80; #ifdef DEC *(--y) = 0; #endif *************** toe24 (x, y) *** 4089,4095 **** } #endif #else /* no INFINITY */ ! *y |= (unsigned EMUSHORT) 0x7f7f; #ifdef DEC *(--y) = 0xffff; #endif --- 4143,4149 ---- } #endif #else /* no INFINITY */ ! *y |= (UEMUSHORT) 0x7f7f; #ifdef DEC *(--y) = 0xffff; #endif *************** toe24 (x, y) *** 4117,4123 **** i <<= 7; eshift (x, 8); } ! i |= *p++ & (unsigned EMUSHORT) 0x7f; /* *p = xi[M] */ /* High order output already has sign bit set. */ *y |= i; #ifdef DEC --- 4171,4177 ---- i <<= 7; eshift (x, 8); } ! i |= *p++ & (UEMUSHORT) 0x7f; /* *p = xi[M] */ /* High order output already has sign bit set. */ *y |= i; #ifdef DEC *************** toe24 (x, y) *** 4144,4154 **** static int ecmp (a, b) ! unsigned EMUSHORT *a, *b; { ! unsigned EMUSHORT ai[NI], bi[NI]; ! register unsigned EMUSHORT *p, *q; ! register int i; int msign; #ifdef NANS --- 4198,4208 ---- static int ecmp (a, b) ! const UEMUSHORT *a, *b; { ! UEMUSHORT ai[NI], bi[NI]; ! UEMUSHORT *p, *q; ! int i; int msign; #ifdef NANS *************** ecmp (a, b) *** 4207,4213 **** static void eround (x, y) ! unsigned EMUSHORT *x, *y; { eadd (ehalf, x, y); efloor (y, y); --- 4261,4268 ---- static void eround (x, y) ! const UEMUSHORT *x; ! UEMUSHORT *y; { eadd (ehalf, x, y); efloor (y, y); *************** eround (x, y) *** 4218,4227 **** static void ltoe (lp, y) ! HOST_WIDE_INT *lp; ! unsigned EMUSHORT *y; { ! unsigned EMUSHORT yi[NI]; unsigned HOST_WIDE_INT ll; int k; --- 4273,4282 ---- static void ltoe (lp, y) ! const HOST_WIDE_INT *lp; ! UEMUSHORT *y; { ! UEMUSHORT yi[NI]; unsigned HOST_WIDE_INT ll; int k; *************** ltoe (lp, y) *** 4238,4258 **** } /* move the long integer to yi significand area */ #if HOST_BITS_PER_WIDE_INT == 64 ! yi[M] = (unsigned EMUSHORT) (ll >> 48); ! yi[M + 1] = (unsigned EMUSHORT) (ll >> 32); ! yi[M + 2] = (unsigned EMUSHORT) (ll >> 16); ! yi[M + 3] = (unsigned EMUSHORT) ll; yi[E] = EXONE + 47; /* exponent if normalize shift count were 0 */ #else ! yi[M] = (unsigned EMUSHORT) (ll >> 16); ! yi[M + 1] = (unsigned EMUSHORT) ll; yi[E] = EXONE + 15; /* exponent if normalize shift count were 0 */ #endif if ((k = enormlz (yi)) > NBITS)/* normalize the significand */ ecleaz (yi); /* it was zero */ else ! yi[E] -= (unsigned EMUSHORT) k;/* subtract shift count from exponent */ emovo (yi, y); /* output the answer */ } --- 4293,4313 ---- } /* move the long integer to yi significand area */ #if HOST_BITS_PER_WIDE_INT == 64 ! yi[M] = (UEMUSHORT) (ll >> 48); ! yi[M + 1] = (UEMUSHORT) (ll >> 32); ! yi[M + 2] = (UEMUSHORT) (ll >> 16); ! yi[M + 3] = (UEMUSHORT) ll; yi[E] = EXONE + 47; /* exponent if normalize shift count were 0 */ #else ! yi[M] = (UEMUSHORT) (ll >> 16); ! yi[M + 1] = (UEMUSHORT) ll; yi[E] = EXONE + 15; /* exponent if normalize shift count were 0 */ #endif if ((k = enormlz (yi)) > NBITS)/* normalize the significand */ ecleaz (yi); /* it was zero */ else ! yi[E] -= (UEMUSHORT) k;/* subtract shift count from exponent */ emovo (yi, y); /* output the answer */ } *************** ltoe (lp, y) *** 4260,4269 **** static void ultoe (lp, y) ! unsigned HOST_WIDE_INT *lp; ! unsigned EMUSHORT *y; { ! unsigned EMUSHORT yi[NI]; unsigned HOST_WIDE_INT ll; int k; --- 4315,4324 ---- static void ultoe (lp, y) ! const unsigned HOST_WIDE_INT *lp; ! UEMUSHORT *y; { ! UEMUSHORT yi[NI]; unsigned HOST_WIDE_INT ll; int k; *************** ultoe (lp, y) *** 4272,4292 **** /* move the long integer to ayi significand area */ #if HOST_BITS_PER_WIDE_INT == 64 ! yi[M] = (unsigned EMUSHORT) (ll >> 48); ! yi[M + 1] = (unsigned EMUSHORT) (ll >> 32); ! yi[M + 2] = (unsigned EMUSHORT) (ll >> 16); ! yi[M + 3] = (unsigned EMUSHORT) ll; yi[E] = EXONE + 47; /* exponent if normalize shift count were 0 */ #else ! yi[M] = (unsigned EMUSHORT) (ll >> 16); ! yi[M + 1] = (unsigned EMUSHORT) ll; yi[E] = EXONE + 15; /* exponent if normalize shift count were 0 */ #endif if ((k = enormlz (yi)) > NBITS)/* normalize the significand */ ecleaz (yi); /* it was zero */ else ! yi[E] -= (unsigned EMUSHORT) k; /* subtract shift count from exponent */ emovo (yi, y); /* output the answer */ } --- 4327,4347 ---- /* move the long integer to ayi significand area */ #if HOST_BITS_PER_WIDE_INT == 64 ! yi[M] = (UEMUSHORT) (ll >> 48); ! yi[M + 1] = (UEMUSHORT) (ll >> 32); ! yi[M + 2] = (UEMUSHORT) (ll >> 16); ! yi[M + 3] = (UEMUSHORT) ll; yi[E] = EXONE + 47; /* exponent if normalize shift count were 0 */ #else ! yi[M] = (UEMUSHORT) (ll >> 16); ! yi[M + 1] = (UEMUSHORT) ll; yi[E] = EXONE + 15; /* exponent if normalize shift count were 0 */ #endif if ((k = enormlz (yi)) > NBITS)/* normalize the significand */ ecleaz (yi); /* it was zero */ else ! yi[E] -= (UEMUSHORT) k; /* subtract shift count from exponent */ emovo (yi, y); /* output the answer */ } *************** ultoe (lp, y) *** 4300,4310 **** static void eifrac (x, i, frac) ! unsigned EMUSHORT *x; HOST_WIDE_INT *i; ! unsigned EMUSHORT *frac; { ! unsigned EMUSHORT xi[NI]; int j, k; unsigned HOST_WIDE_INT ll; --- 4355,4365 ---- static void eifrac (x, i, frac) ! const UEMUSHORT *x; HOST_WIDE_INT *i; ! UEMUSHORT *frac; { ! UEMUSHORT xi[NI]; int j, k; unsigned HOST_WIDE_INT ll; *************** eifrac (x, i, frac) *** 4371,4377 **** if ((k = enormlz (xi)) > NBITS) ecleaz (xi); else ! xi[E] -= (unsigned EMUSHORT) k; emovo (xi, frac); } --- 4426,4432 ---- if ((k = enormlz (xi)) > NBITS) ecleaz (xi); else ! xi[E] -= (UEMUSHORT) k; emovo (xi, frac); } *************** eifrac (x, i, frac) *** 4383,4394 **** static void euifrac (x, i, frac) ! unsigned EMUSHORT *x; unsigned HOST_WIDE_INT *i; ! unsigned EMUSHORT *frac; { unsigned HOST_WIDE_INT ll; ! unsigned EMUSHORT xi[NI]; int j, k; emovi (x, xi); --- 4438,4449 ---- static void euifrac (x, i, frac) ! const UEMUSHORT *x; unsigned HOST_WIDE_INT *i; ! UEMUSHORT *frac; { unsigned HOST_WIDE_INT ll; ! UEMUSHORT xi[NI]; int j, k; emovi (x, xi); *************** euifrac (x, i, frac) *** 4404,4410 **** { /* Long integer overflow: output large integer and correct fraction. ! Note, the BSD microvax compiler says that ~(0UL) is a syntax error. */ *i = ~(0L); eshift (xi, k); --- 4459,4465 ---- { /* Long integer overflow: output large integer and correct fraction. ! Note, the BSD MicroVAX compiler says that ~(0UL) is a syntax error. */ *i = ~(0L); eshift (xi, k); *************** euifrac (x, i, frac) *** 4443,4449 **** if ((k = enormlz (xi)) > NBITS) ecleaz (xi); else ! xi[E] -= (unsigned EMUSHORT) k; emovo (xi, frac); } --- 4498,4504 ---- if ((k = enormlz (xi)) > NBITS) ecleaz (xi); else ! xi[E] -= (UEMUSHORT) k; emovo (xi, frac); } *************** euifrac (x, i, frac) *** 4452,4462 **** static int eshift (x, sc) ! unsigned EMUSHORT *x; int sc; { ! unsigned EMUSHORT lost; ! unsigned EMUSHORT *p; if (sc == 0) return (0); --- 4507,4517 ---- static int eshift (x, sc) ! UEMUSHORT *x; int sc; { ! UEMUSHORT lost; ! UEMUSHORT *p; if (sc == 0) return (0); *************** eshift (x, sc) *** 4518,4526 **** static int enormlz (x) ! unsigned EMUSHORT x[]; { ! register unsigned EMUSHORT *p; int sc; sc = 0; --- 4573,4581 ---- static int enormlz (x) ! UEMUSHORT x[]; { ! UEMUSHORT *p; int sc; sc = 0; *************** enormlz (x) *** 4587,4594 **** #define NTEN 12 #define MAXP 4096 ! #if MAX_LONG_DOUBLE_TYPE_SIZE == 128 && !defined(INTEL_EXTENDED_IEEE_FORMAT) ! static unsigned EMUSHORT etens[NTEN + 1][NE] = { {0x6576, 0x4a92, 0x804a, 0x153f, 0xc94c, 0x979a, 0x8a20, 0x5202, 0xc460, 0x7525,}, /* 10**4096 */ --- 4642,4649 ---- #define NTEN 12 #define MAXP 4096 ! #if MAX_LONG_DOUBLE_TYPE_SIZE == 128 && (INTEL_EXTENDED_IEEE_FORMAT == 0) ! static const UEMUSHORT etens[NTEN + 1][NE] = { {0x6576, 0x4a92, 0x804a, 0x153f, 0xc94c, 0x979a, 0x8a20, 0x5202, 0xc460, 0x7525,}, /* 10**4096 */ *************** static unsigned EMUSHORT etens[NTEN + 1] *** 4618,4624 **** 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 0x4002,}, /* 10**1 */ }; ! static unsigned EMUSHORT emtens[NTEN + 1][NE] = { {0x2030, 0xcffc, 0xa1c3, 0x8123, 0x2de3, 0x9fde, 0xd2ce, 0x04c8, 0xa6dd, 0x0ad8,}, /* 10**-4096 */ --- 4673,4679 ---- 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 0x4002,}, /* 10**1 */ }; ! static const UEMUSHORT emtens[NTEN + 1][NE] = { {0x2030, 0xcffc, 0xa1c3, 0x8123, 0x2de3, 0x9fde, 0xd2ce, 0x04c8, 0xa6dd, 0x0ad8,}, /* 10**-4096 */ *************** static unsigned EMUSHORT emtens[NTEN + 1 *** 4649,4655 **** }; #else /* LONG_DOUBLE_TYPE_SIZE is other than 128 */ ! static unsigned EMUSHORT etens[NTEN + 1][NE] = { {0xc94c, 0x979a, 0x8a20, 0x5202, 0xc460, 0x7525,}, /* 10**4096 */ {0xa74d, 0x5de4, 0xc53d, 0x3b5d, 0x9e8b, 0x5a92,}, /* 10**2048 */ --- 4704,4710 ---- }; #else /* LONG_DOUBLE_TYPE_SIZE is other than 128 */ ! static const UEMUSHORT etens[NTEN + 1][NE] = { {0xc94c, 0x979a, 0x8a20, 0x5202, 0xc460, 0x7525,}, /* 10**4096 */ {0xa74d, 0x5de4, 0xc53d, 0x3b5d, 0x9e8b, 0x5a92,}, /* 10**2048 */ *************** static unsigned EMUSHORT etens[NTEN + 1] *** 4666,4672 **** {0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 0x4002,}, /* 10**1 */ }; ! static unsigned EMUSHORT emtens[NTEN + 1][NE] = { {0x2de4, 0x9fde, 0xd2ce, 0x04c8, 0xa6dd, 0x0ad8,}, /* 10**-4096 */ {0x4925, 0x2de4, 0x3436, 0x534f, 0xceae, 0x256b,}, /* 10**-2048 */ --- 4721,4727 ---- {0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 0x4002,}, /* 10**1 */ }; ! static const UEMUSHORT emtens[NTEN + 1][NE] = { {0x2de4, 0x9fde, 0xd2ce, 0x04c8, 0xa6dd, 0x0ad8,}, /* 10**-4096 */ {0x4925, 0x2de4, 0x3436, 0x534f, 0xceae, 0x256b,}, /* 10**-2048 */ *************** static unsigned EMUSHORT emtens[NTEN + 1 *** 4690,4700 **** static void e24toasc (x, string, ndigs) ! unsigned EMUSHORT x[]; char *string; int ndigs; { ! unsigned EMUSHORT w[NI]; e24toe (x, w); etoasc (w, string, ndigs); --- 4745,4755 ---- static void e24toasc (x, string, ndigs) ! const UEMUSHORT x[]; char *string; int ndigs; { ! UEMUSHORT w[NI]; e24toe (x, w); etoasc (w, string, ndigs); *************** e24toasc (x, string, ndigs) *** 4705,4715 **** static void e53toasc (x, string, ndigs) ! unsigned EMUSHORT x[]; char *string; int ndigs; { ! unsigned EMUSHORT w[NI]; e53toe (x, w); etoasc (w, string, ndigs); --- 4760,4770 ---- static void e53toasc (x, string, ndigs) ! const UEMUSHORT x[]; char *string; int ndigs; { ! UEMUSHORT w[NI]; e53toe (x, w); etoasc (w, string, ndigs); *************** e53toasc (x, string, ndigs) *** 4720,4730 **** static void e64toasc (x, string, ndigs) ! unsigned EMUSHORT x[]; char *string; int ndigs; { ! unsigned EMUSHORT w[NI]; e64toe (x, w); etoasc (w, string, ndigs); --- 4775,4785 ---- static void e64toasc (x, string, ndigs) ! const UEMUSHORT x[]; char *string; int ndigs; { ! UEMUSHORT w[NI]; e64toe (x, w); etoasc (w, string, ndigs); *************** e64toasc (x, string, ndigs) *** 4735,4745 **** static void e113toasc (x, string, ndigs) ! unsigned EMUSHORT x[]; char *string; int ndigs; { ! unsigned EMUSHORT w[NI]; e113toe (x, w); etoasc (w, string, ndigs); --- 4790,4800 ---- static void e113toasc (x, string, ndigs) ! const UEMUSHORT x[]; char *string; int ndigs; { ! UEMUSHORT w[NI]; e113toe (x, w); etoasc (w, string, ndigs); *************** static char wstring[80]; /* working stor *** 4753,4769 **** static void etoasc (x, string, ndigs) ! unsigned EMUSHORT x[]; char *string; int ndigs; { EMUSHORT digit; ! unsigned EMUSHORT y[NI], t[NI], u[NI], w[NI]; ! unsigned EMUSHORT *p, *r, *ten; ! unsigned EMUSHORT sign; int i, j, k, expon, rndsav; char *s, *ss; ! unsigned EMUSHORT m; rndsav = rndprc; --- 4808,4824 ---- static void etoasc (x, string, ndigs) ! const UEMUSHORT x[]; char *string; int ndigs; { EMUSHORT digit; ! UEMUSHORT y[NI], t[NI], u[NI], w[NI]; ! const UEMUSHORT *p, *r, *ten; ! UEMUSHORT sign; int i, j, k, expon, rndsav; char *s, *ss; ! UEMUSHORT m; rndsav = rndprc; *************** etoasc (x, string, ndigs) *** 4980,4986 **** } else { ! *s++ = (char)digit + '0'; *s++ = '.'; } /* Generate digits after the decimal point. */ --- 5035,5041 ---- } else { ! *s++ = (char) digit + '0'; *s++ = '.'; } /* Generate digits after the decimal point. */ *************** etoasc (x, string, ndigs) *** 5072,5078 **** static void asctoe24 (s, y) const char *s; ! unsigned EMUSHORT *y; { asctoeg (s, y, 24); } --- 5127,5133 ---- static void asctoe24 (s, y) const char *s; ! UEMUSHORT *y; { asctoeg (s, y, 24); } *************** asctoe24 (s, y) *** 5083,5089 **** static void asctoe53 (s, y) const char *s; ! unsigned EMUSHORT *y; { #if defined(DEC) || defined(IBM) asctoeg (s, y, 56); --- 5138,5144 ---- static void asctoe53 (s, y) const char *s; ! UEMUSHORT *y; { #if defined(DEC) || defined(IBM) asctoeg (s, y, 56); *************** asctoe53 (s, y) *** 5102,5119 **** static void asctoe64 (s, y) const char *s; ! unsigned EMUSHORT *y; { asctoeg (s, y, 64); } ! #ifndef INTEL_EXTENDED_IEEE_FORMAT /* Convert ASCII string S to 128-bit long double Y. */ static void asctoe113 (s, y) const char *s; ! unsigned EMUSHORT *y; { asctoeg (s, y, 113); } --- 5157,5174 ---- static void asctoe64 (s, y) const char *s; ! UEMUSHORT *y; { asctoeg (s, y, 64); } ! #if (INTEL_EXTENDED_IEEE_FORMAT == 0) /* Convert ASCII string S to 128-bit long double Y. */ static void asctoe113 (s, y) const char *s; ! UEMUSHORT *y; { asctoeg (s, y, 113); } *************** asctoe113 (s, y) *** 5124,5130 **** static void asctoe (s, y) const char *s; ! unsigned EMUSHORT *y; { asctoeg (s, y, NBITS); } --- 5179,5185 ---- static void asctoe (s, y) const char *s; ! UEMUSHORT *y; { asctoeg (s, y, NBITS); } *************** asctoe (s, y) *** 5135,5148 **** static void asctoeg (ss, y, oprec) const char *ss; ! unsigned EMUSHORT *y; int oprec; { ! unsigned EMUSHORT yy[NI], xt[NI], tt[NI]; int esign, decflg, sgnflg, nexp, exp, prec, lost; int i, k, trail, c, rndsav; EMULONG lexp; ! unsigned EMUSHORT nsign; char *sp, *s, *lstr; int base = 10; --- 5190,5203 ---- static void asctoeg (ss, y, oprec) const char *ss; ! UEMUSHORT *y; int oprec; { ! UEMUSHORT yy[NI], xt[NI], tt[NI]; int esign, decflg, sgnflg, nexp, exp, prec, lost; int i, k, trail, c, rndsav; EMULONG lexp; ! UEMUSHORT nsign; char *sp, *s, *lstr; int base = 10; *************** asctoeg (ss, y, oprec) *** 5176,5187 **** trail = 0; nxtcom: ! if (*s >= '0' && *s <= '9') ! k = *s - '0'; ! else if (*s >= 'a' && *s <= 'f') ! k = 10 + *s - 'a'; ! else ! k = 10 + *s - 'A'; if ((k >= 0) && (k < base)) { /* Ignore leading zeros */ --- 5231,5237 ---- trail = 0; nxtcom: ! k = hex_value (*s); if ((k >= 0) && (k < base)) { /* Ignore leading zeros */ *************** asctoeg (ss, y, oprec) *** 5191,5199 **** if ((trail == 0) && (decflg != 0)) { sp = s; ! while ((*sp >= '0' && *sp <= '9') ! || (base == 16 && ((*sp >= 'a' && *sp <= 'f') ! || (*sp >= 'A' && *sp <= 'F')))) ++sp; /* Check for syntax error */ c = *sp & CHARMASK; --- 5241,5247 ---- if ((trail == 0) && (decflg != 0)) { sp = s; ! while (ISDIGIT (*sp) || (base == 16 && ISXDIGIT (*sp))) ++sp; /* Check for syntax error */ c = *sp & CHARMASK; *************** asctoeg (ss, y, oprec) *** 5241,5247 **** } /* Insert the current digit. */ ecleaz (xt); ! xt[NI - 2] = (unsigned EMUSHORT) k; eaddm (xt, yy); } else --- 5289,5295 ---- } /* Insert the current digit. */ ecleaz (xt); ! xt[NI - 2] = (UEMUSHORT) k; eaddm (xt, yy); } else *************** asctoeg (ss, y, oprec) *** 5311,5317 **** /* Exponent interpretation */ expnt: ! /* 0.0eXXX is zero, regardless of XXX. Check for the 0.0. */ for (k = 0; k < NI; k++) { if (yy[k] != 0) --- 5359,5365 ---- /* Exponent interpretation */ expnt: ! /* 0.0eXXX is zero, regardless of XXX. Check for the 0.0. */ for (k = 0; k < NI; k++) { if (yy[k] != 0) *************** read_expnt: *** 5331,5337 **** } if (*s == '+') ++s; ! while ((*s >= '0') && (*s <= '9')) { exp *= 10; exp += *s++ - '0'; --- 5379,5385 ---- } if (*s == '+') ++s; ! while (ISDIGIT (*s)) { exp *= 10; exp += *s++ - '0'; *************** read_expnt: *** 5508,5516 **** --- 5556,5566 ---- case 64: toe64 (yy, y); break; + #if (INTEL_EXTENDED_IEEE_FORMAT == 0) case 113: toe113 (yy, y); break; + #endif case NBITS: emovo (yy, y); break; *************** read_expnt: *** 5522,5528 **** /* Return Y = largest integer not greater than X (truncated toward minus infinity). */ ! static unsigned EMUSHORT bmask[] = { 0xffff, 0xfffe, --- 5572,5578 ---- /* Return Y = largest integer not greater than X (truncated toward minus infinity). */ ! static const UEMUSHORT bmask[] = { 0xffff, 0xfffe, *************** static unsigned EMUSHORT bmask[] = *** 5545,5555 **** static void efloor (x, y) ! unsigned EMUSHORT x[], y[]; { ! register unsigned EMUSHORT *p; int e, expon, i; ! unsigned EMUSHORT f[NE]; emov (x, f); /* leave in external format */ expon = (int) f[NE - 1]; --- 5595,5606 ---- static void efloor (x, y) ! const UEMUSHORT x[]; ! UEMUSHORT y[]; { ! UEMUSHORT *p; int e, expon, i; ! UEMUSHORT f[NE]; emov (x, f); /* leave in external format */ expon = (int) f[NE - 1]; *************** efloor (x, y) *** 5576,5582 **** /* truncate negatives toward minus infinity */ isitneg: ! if ((unsigned EMUSHORT) expon & (unsigned EMUSHORT) 0x8000) { for (i = 0; i < NE - 1; i++) { --- 5627,5633 ---- /* truncate negatives toward minus infinity */ isitneg: ! if ((UEMUSHORT) expon & (UEMUSHORT) 0x8000) { for (i = 0; i < NE - 1; i++) { *************** efloor (x, y) *** 5596,5606 **** static void efrexp (x, exp, s) ! unsigned EMUSHORT x[]; int *exp; ! unsigned EMUSHORT s[]; { ! unsigned EMUSHORT xi[NI]; EMULONG li; emovi (x, xi); --- 5647,5657 ---- static void efrexp (x, exp, s) ! const UEMUSHORT x[]; int *exp; ! UEMUSHORT s[]; { ! UEMUSHORT xi[NI]; EMULONG li; emovi (x, xi); *************** efrexp (x, exp, s) *** 5621,5631 **** static void eldexp (x, pwr2, y) ! unsigned EMUSHORT x[]; int pwr2; ! unsigned EMUSHORT y[]; { ! unsigned EMUSHORT xi[NI]; EMULONG li; int i; --- 5672,5682 ---- static void eldexp (x, pwr2, y) ! const UEMUSHORT x[]; int pwr2; ! UEMUSHORT y[]; { ! UEMUSHORT xi[NI]; EMULONG li; int i; *************** eldexp (x, pwr2, y) *** 5644,5652 **** static void eremain (a, b, c) ! unsigned EMUSHORT a[], b[], c[]; { ! unsigned EMUSHORT den[NI], num[NI]; #ifdef NANS if (eisinf (b) --- 5695,5704 ---- static void eremain (a, b, c) ! const UEMUSHORT a[], b[]; ! UEMUSHORT c[]; { ! UEMUSHORT den[NI], num[NI]; #ifdef NANS if (eisinf (b) *************** eremain (a, b, c) *** 5681,5690 **** static void eiremain (den, num) ! unsigned EMUSHORT den[], num[]; { EMULONG ld, ln; ! unsigned EMUSHORT j; ld = den[E]; ld -= enormlz (den); --- 5733,5742 ---- static void eiremain (den, num) ! UEMUSHORT den[], num[]; { EMULONG ld, ln; ! UEMUSHORT j; ld = den[E]; ld -= enormlz (den); *************** mtherr (name, code) *** 5777,5787 **** static void dectoe (d, e) ! unsigned EMUSHORT *d; ! unsigned EMUSHORT *e; { ! unsigned EMUSHORT y[NI]; ! register unsigned EMUSHORT r, *p; ecleaz (y); /* start with a zero */ p = y; /* point to our number */ --- 5829,5839 ---- static void dectoe (d, e) ! const UEMUSHORT *d; ! UEMUSHORT *e; { ! UEMUSHORT y[NI]; ! UEMUSHORT r, *p; ecleaz (y); /* start with a zero */ p = y; /* point to our number */ *************** dectoe (d, e) *** 5817,5825 **** static void etodec (x, d) ! unsigned EMUSHORT *x, *d; { ! unsigned EMUSHORT xi[NI]; EMULONG exp; int rndsav; --- 5869,5878 ---- static void etodec (x, d) ! const UEMUSHORT *x; ! UEMUSHORT *d; { ! UEMUSHORT xi[NI]; EMULONG exp; int rndsav; *************** etodec (x, d) *** 5839,5848 **** static void todec (x, y) ! unsigned EMUSHORT *x, *y; { ! unsigned EMUSHORT i; ! unsigned EMUSHORT *p; p = x; *y = 0; --- 5892,5901 ---- static void todec (x, y) ! UEMUSHORT *x, *y; { ! UEMUSHORT i; ! UEMUSHORT *p; p = x; *y = 0; *************** todec (x, y) *** 5885,5896 **** static void ibmtoe (d, e, mode) ! unsigned EMUSHORT *d; ! unsigned EMUSHORT *e; enum machine_mode mode; { ! unsigned EMUSHORT y[NI]; ! register unsigned EMUSHORT r, *p; ecleaz (y); /* start with a zero */ p = y; /* point to our number */ --- 5938,5949 ---- static void ibmtoe (d, e, mode) ! const UEMUSHORT *d; ! UEMUSHORT *e; enum machine_mode mode; { ! UEMUSHORT y[NI]; ! UEMUSHORT r, *p; ecleaz (y); /* start with a zero */ p = y; /* point to our number */ *************** ibmtoe (d, e, mode) *** 5928,5937 **** static void etoibm (x, d, mode) ! unsigned EMUSHORT *x, *d; enum machine_mode mode; { ! unsigned EMUSHORT xi[NI]; EMULONG exp; int rndsav; --- 5981,5991 ---- static void etoibm (x, d, mode) ! const UEMUSHORT *x; ! UEMUSHORT *d; enum machine_mode mode; { ! UEMUSHORT xi[NI]; EMULONG exp; int rndsav; *************** etoibm (x, d, mode) *** 5947,5957 **** static void toibm (x, y, mode) ! unsigned EMUSHORT *x, *y; enum machine_mode mode; { ! unsigned EMUSHORT i; ! unsigned EMUSHORT *p; int r; p = x; --- 6001,6011 ---- static void toibm (x, y, mode) ! UEMUSHORT *x, *y; enum machine_mode mode; { ! UEMUSHORT i; ! UEMUSHORT *p; int r; p = x; *************** toibm (x, y, mode) *** 6005,6025 **** static void c4xtoe (d, e, mode) ! unsigned EMUSHORT *d; ! unsigned EMUSHORT *e; enum machine_mode mode; { ! unsigned EMUSHORT y[NI]; int r; int isnegative; int size; int i; int carry; ! /* Short-circuit the zero case. */ ! if ((d[0] == 0x8000) ! && (d[1] == 0x0000) ! && ((mode == QFmode) || ((d[2] == 0x0000) && (d[3] == 0x0000)))) { e[0] = 0; e[1] = 0; --- 6059,6088 ---- static void c4xtoe (d, e, mode) ! const UEMUSHORT *d; ! UEMUSHORT *e; enum machine_mode mode; { ! UEMUSHORT y[NI]; ! UEMUSHORT dn[4]; int r; int isnegative; int size; int i; int carry; ! dn[0] = d[0]; ! dn[1] = d[1]; ! if (mode != QFmode) ! { ! dn[2] = d[3] << 8; ! dn[3] = 0; ! } ! ! /* Short-circuit the zero case. */ ! if ((dn[0] == 0x8000) ! && (dn[1] == 0x0000) ! && ((mode == QFmode) || ((dn[2] == 0x0000) && (dn[3] == 0x0000)))) { e[0] = 0; e[1] = 0; *************** c4xtoe (d, e, mode) *** 6031,6117 **** } ecleaz (y); /* start with a zero */ ! r = d[0]; /* get sign/exponent part */ if (r & (unsigned int) 0x0080) ! { ! y[0] = 0xffff; /* fill in our sign */ ! isnegative = TRUE; ! } else ! { ! isnegative = FALSE; ! } r >>= 8; /* Shift exponent word down 8 bits. */ ! if (r & 0x80) /* Make the exponent negative if it is. */ ! { ! r = r | (~0 & ~0xff); ! } if (isnegative) ! { ! /* Now do the high order mantissa. We don't "or" on the high bit ! because it is 2 (not 1) and is handled a little differently ! below. */ ! y[M] = d[0] & 0x7f; ! y[M+1] = d[1]; ! if (mode != QFmode) /* There are only 2 words in QFmode. */ ! { ! y[M+2] = d[2]; /* Fill in the rest of our mantissa. */ ! y[M+3] = d[3]; ! size = 4; ! } ! else ! { size = 2; ! } ! eshift(y, -8); ! /* Now do the two's complement on the data. */ ! carry = 1; /* Initially add 1 for the two's complement. */ ! for (i=size + M; i > M; i--) ! { ! if (carry && (y[i] == 0x0000)) ! { ! /* We overflowed into the next word, carry is the same. */ ! y[i] = carry ? 0x0000 : 0xffff; ! } ! else ! { ! /* No overflow, just invert and add carry. */ ! y[i] = ((~y[i]) + carry) & 0xffff; ! carry = 0; ! } ! } ! if (carry) ! { ! eshift(y, -1); ! y[M+1] |= 0x8000; ! r++; ! } ! y[1] = r + EXONE; ! } else ! { ! /* Add our e type exponent offset to form our exponent. */ ! r += EXONE; ! y[1] = r; /* Now do the high order mantissa strip off the exponent and sign bits and add the high 1 bit. */ ! y[M] = (d[0] & 0x7f) | 0x80; ! y[M+1] = d[1]; if (mode != QFmode) /* There are only 2 words in QFmode. */ ! { ! y[M+2] = d[2]; /* Fill in the rest of our mantissa. */ ! y[M+3] = d[3]; ! } ! eshift(y, -8); ! } emovo (y, e); } --- 6094,6172 ---- } ecleaz (y); /* start with a zero */ ! r = dn[0]; /* get sign/exponent part */ if (r & (unsigned int) 0x0080) ! { ! y[0] = 0xffff; /* fill in our sign */ ! isnegative = TRUE; ! } else ! isnegative = FALSE; r >>= 8; /* Shift exponent word down 8 bits. */ ! if (r & 0x80) /* Make the exponent negative if it is. */ ! r = r | (~0 & ~0xff); if (isnegative) ! { ! /* Now do the high order mantissa. We don't "or" on the high bit ! because it is 2 (not 1) and is handled a little differently ! below. */ ! y[M] = dn[0] & 0x7f; ! y[M+1] = dn[1]; ! if (mode != QFmode) /* There are only 2 words in QFmode. */ ! { ! y[M+2] = dn[2]; /* Fill in the rest of our mantissa. */ ! y[M+3] = dn[3]; ! size = 4; ! } ! else size = 2; ! eshift (y, -8); ! /* Now do the two's complement on the data. */ ! carry = 1; /* Initially add 1 for the two's complement. */ ! for (i=size + M; i > M; i--) ! { ! if (carry && (y[i] == 0x0000)) ! /* We overflowed into the next word, carry is the same. */ ! y[i] = carry ? 0x0000 : 0xffff; ! else ! { ! /* No overflow, just invert and add carry. */ ! y[i] = ((~y[i]) + carry) & 0xffff; ! carry = 0; ! } ! } ! if (carry) ! { ! eshift (y, -1); ! y[M+1] |= 0x8000; ! r++; ! } ! y[1] = r + EXONE; ! } else ! { ! /* Add our e type exponent offset to form our exponent. */ ! r += EXONE; ! y[1] = r; /* Now do the high order mantissa strip off the exponent and sign bits and add the high 1 bit. */ ! y[M] = (dn[0] & 0x7f) | 0x80; ! y[M+1] = dn[1]; if (mode != QFmode) /* There are only 2 words in QFmode. */ ! { ! y[M+2] = dn[2]; /* Fill in the rest of our mantissa. */ ! y[M+3] = dn[3]; ! } ! eshift (y, -8); ! } emovo (y, e); } *************** c4xtoe (d, e, mode) *** 6121,6139 **** static void etoc4x (x, d, mode) ! unsigned EMUSHORT *x, *d; enum machine_mode mode; { ! unsigned EMUSHORT xi[NI]; EMULONG exp; int rndsav; emovi (x, xi); ! /* Adjust exponent for offsets. */ exp = (EMULONG) xi[E] - (EXONE - 0x7f); ! /* Round off to nearest or even. */ rndsav = rndprc; rndprc = mode == QFmode ? 24 : 32; emdnorm (xi, 0, 0, exp, 64); --- 6176,6195 ---- static void etoc4x (x, d, mode) ! const UEMUSHORT *x; ! UEMUSHORT *d; enum machine_mode mode; { ! UEMUSHORT xi[NI]; EMULONG exp; int rndsav; emovi (x, xi); ! /* Adjust exponent for offsets. */ exp = (EMULONG) xi[E] - (EXONE - 0x7f); ! /* Round off to nearest or even. */ rndsav = rndprc; rndprc = mode == QFmode ? 24 : 32; emdnorm (xi, 0, 0, exp, 64); *************** etoc4x (x, d, mode) *** 6143,6149 **** static void toc4x (x, y, mode) ! unsigned EMUSHORT *x, *y; enum machine_mode mode; { int i; --- 6199,6205 ---- static void toc4x (x, y, mode) ! UEMUSHORT *x, *y; enum machine_mode mode; { int i; *************** toc4x (x, y, mode) *** 6158,6164 **** /* Only check for double if necessary */ && ((mode == QFmode) || ((x[M+2] == 0) && (x[M+3] == 0)))) { ! /* We have a zero. Put it into the output and return. */ *y++ = 0x8000; *y++ = 0x0000; if (mode != QFmode) --- 6214,6220 ---- /* Only check for double if necessary */ && ((mode == QFmode) || ((x[M+2] == 0) && (x[M+3] == 0)))) { ! /* We have a zero. Put it into the output and return. */ *y++ = 0x8000; *y++ = 0x0000; if (mode != QFmode) *************** toc4x (x, y, mode) *** 6172,6185 **** *y = 0; /* Negative number require a two's complement conversion of the ! mantissa. */ if (x[0]) { *y = 0x0080; i = ((int) x[1]) - 0x7f; ! /* Now add 1 to the inverted data to do the two's complement. */ if (mode != QFmode) v = 4 + M; else --- 6228,6241 ---- *y = 0; /* Negative number require a two's complement conversion of the ! mantissa. */ if (x[0]) { *y = 0x0080; i = ((int) x[1]) - 0x7f; ! /* Now add 1 to the inverted data to do the two's complement. */ if (mode != QFmode) v = 4 + M; else *************** toc4x (x, y, mode) *** 6188,6196 **** while (v > M) { if (x[v] == 0x0000) ! { ! x[v] = carry ? 0x0000 : 0xffff; ! } else { x[v] = ((~x[v]) + carry) & 0xffff; --- 6244,6250 ---- while (v > M) { if (x[v] == 0x0000) ! x[v] = carry ? 0x0000 : 0xffff; else { x[v] = ((~x[v]) + carry) & 0xffff; *************** toc4x (x, y, mode) *** 6202,6220 **** /* The following is a special case. The C4X negative float requires a zero in the high bit (because the format is (2 - x) x 2^m), so if a one is in that bit, we have to shift left one to get rid ! of it. This only occurs if the number is -1 x 2^m. */ if (x[M+1] & 0x8000) { /* This is the case of -1 x 2^m, we have to rid ourselves of the ! high sign bit and shift the exponent. */ ! eshift(x, 1); i--; } } else ! { ! i = ((int) x[1]) - 0x7f; ! } if ((i < -128) || (i > 127)) { --- 6256,6272 ---- /* The following is a special case. The C4X negative float requires a zero in the high bit (because the format is (2 - x) x 2^m), so if a one is in that bit, we have to shift left one to get rid ! of it. This only occurs if the number is -1 x 2^m. */ if (x[M+1] & 0x8000) { /* This is the case of -1 x 2^m, we have to rid ourselves of the ! high sign bit and shift the exponent. */ ! eshift (x, 1); i--; } } else ! i = ((int) x[1]) - 0x7f; if ((i < -128) || (i > 127)) { *************** toc4x (x, y, mode) *** 6224,6229 **** --- 6276,6283 ---- { y[2] = 0xffff; y[3] = 0xffff; + y[3] = (y[1] << 8) | ((y[2] >> 8) & 0xff); + y[2] = (y[0] << 8) | ((y[1] >> 8) & 0xff); } #ifdef ERANGE errno = ERANGE; *************** toc4x (x, y, mode) *** 6241,6246 **** --- 6295,6302 ---- { y[2] = x[M + 2]; y[3] = x[M + 3]; + y[3] = (y[1] << 8) | ((y[2] >> 8) & 0xff); + y[2] = (y[0] << 8) | ((y[1] >> 8) & 0xff); } } #endif /* C4X */ *************** toc4x (x, y, mode) *** 6254,6262 **** TFMODE_NAN; #else #ifdef IEEE ! unsigned EMUSHORT TFbignan[8] = {0x7fff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff}; ! unsigned EMUSHORT TFlittlenan[8] = {0, 0, 0, 0, 0, 0, 0x8000, 0xffff}; #endif #endif --- 6310,6318 ---- TFMODE_NAN; #else #ifdef IEEE ! static const UEMUSHORT TFbignan[8] = {0x7fff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff}; ! static const UEMUSHORT TFlittlenan[8] = {0, 0, 0, 0, 0, 0, 0x8000, 0xffff}; #endif #endif *************** unsigned EMUSHORT TFlittlenan[8] = {0, 0 *** 6264,6272 **** XFMODE_NAN; #else #ifdef IEEE ! unsigned EMUSHORT XFbignan[6] = {0x7fff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff}; ! unsigned EMUSHORT XFlittlenan[6] = {0, 0, 0, 0xc000, 0xffff, 0}; #endif #endif --- 6320,6328 ---- XFMODE_NAN; #else #ifdef IEEE ! static const UEMUSHORT XFbignan[6] = {0x7fff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff}; ! static const UEMUSHORT XFlittlenan[6] = {0, 0, 0, 0xc000, 0xffff, 0}; #endif #endif *************** unsigned EMUSHORT XFlittlenan[6] = {0, 0 *** 6274,6281 **** DFMODE_NAN; #else #ifdef IEEE ! unsigned EMUSHORT DFbignan[4] = {0x7fff, 0xffff, 0xffff, 0xffff}; ! unsigned EMUSHORT DFlittlenan[4] = {0, 0, 0, 0xfff8}; #endif #endif --- 6330,6337 ---- DFMODE_NAN; #else #ifdef IEEE ! static const UEMUSHORT DFbignan[4] = {0x7fff, 0xffff, 0xffff, 0xffff}; ! static const UEMUSHORT DFlittlenan[4] = {0, 0, 0, 0xfff8}; #endif #endif *************** unsigned EMUSHORT DFlittlenan[4] = {0, 0 *** 6283,6290 **** SFMODE_NAN; #else #ifdef IEEE ! unsigned EMUSHORT SFbignan[2] = {0x7fff, 0xffff}; ! unsigned EMUSHORT SFlittlenan[2] = {0, 0xffc0}; #endif #endif --- 6339,6346 ---- SFMODE_NAN; #else #ifdef IEEE ! static const UEMUSHORT SFbignan[2] = {0x7fff, 0xffff}; ! static const UEMUSHORT SFlittlenan[2] = {0, 0xffc0}; #endif #endif *************** unsigned EMUSHORT SFlittlenan[2] = {0, 0 *** 6292,6303 **** #ifdef NANS static void make_nan (nan, sign, mode) ! unsigned EMUSHORT *nan; int sign; enum machine_mode mode; { int n; ! unsigned EMUSHORT *p; switch (mode) { --- 6348,6359 ---- #ifdef NANS static void make_nan (nan, sign, mode) ! UEMUSHORT *nan; int sign; enum machine_mode mode; { int n; ! const UEMUSHORT *p; switch (mode) { *************** make_nan (nan, sign, mode) *** 6305,6311 **** used like NaN's, but probably not in the same way as IEEE. */ #if !defined(DEC) && !defined(IBM) && !defined(C4X) case TFmode: ! #ifndef INTEL_EXTENDED_IEEE_FORMAT n = 8; if (REAL_WORDS_BIG_ENDIAN) p = TFbignan; --- 6361,6367 ---- used like NaN's, but probably not in the same way as IEEE. */ #if !defined(DEC) && !defined(IBM) && !defined(C4X) case TFmode: ! #if (INTEL_EXTENDED_IEEE_FORMAT == 0) n = 8; if (REAL_WORDS_BIG_ENDIAN) p = TFbignan; *************** ereal_unto_float (f) *** 6361,6384 **** long f; { REAL_VALUE_TYPE r; ! unsigned EMUSHORT s[2]; ! unsigned EMUSHORT e[NE]; /* Convert 32 bit integer to array of 16 bit pieces in target machine order. This is the inverse operation to what the function `endian' does. */ if (REAL_WORDS_BIG_ENDIAN) { ! s[0] = (unsigned EMUSHORT) (f >> 16); ! s[1] = (unsigned EMUSHORT) f; } else { ! s[0] = (unsigned EMUSHORT) f; ! s[1] = (unsigned EMUSHORT) (f >> 16); } ! /* Convert and promote the target float to E-type. */ e24toe (s, e); ! /* Output E-type to REAL_VALUE_TYPE. */ PUT_REAL (e, &r); return r; } --- 6417,6440 ---- long f; { REAL_VALUE_TYPE r; ! UEMUSHORT s[2]; ! UEMUSHORT e[NE]; /* Convert 32 bit integer to array of 16 bit pieces in target machine order. This is the inverse operation to what the function `endian' does. */ if (REAL_WORDS_BIG_ENDIAN) { ! s[0] = (UEMUSHORT) (f >> 16); ! s[1] = (UEMUSHORT) f; } else { ! s[0] = (UEMUSHORT) f; ! s[1] = (UEMUSHORT) (f >> 16); } ! /* Convert and promote the target float to E-type. */ e24toe (s, e); ! /* Output E-type to REAL_VALUE_TYPE. */ PUT_REAL (e, &r); return r; } *************** ereal_unto_double (d) *** 6392,6419 **** long d[]; { REAL_VALUE_TYPE r; ! unsigned EMUSHORT s[4]; ! unsigned EMUSHORT e[NE]; /* Convert array of HOST_WIDE_INT to equivalent array of 16-bit pieces. */ if (REAL_WORDS_BIG_ENDIAN) { ! s[0] = (unsigned EMUSHORT) (d[0] >> 16); ! s[1] = (unsigned EMUSHORT) d[0]; ! s[2] = (unsigned EMUSHORT) (d[1] >> 16); ! s[3] = (unsigned EMUSHORT) d[1]; } else { /* Target float words are little-endian. */ ! s[0] = (unsigned EMUSHORT) d[0]; ! s[1] = (unsigned EMUSHORT) (d[0] >> 16); ! s[2] = (unsigned EMUSHORT) d[1]; ! s[3] = (unsigned EMUSHORT) (d[1] >> 16); } ! /* Convert target double to E-type. */ e53toe (s, e); ! /* Output E-type to REAL_VALUE_TYPE. */ PUT_REAL (e, &r); return r; } --- 6448,6475 ---- long d[]; { REAL_VALUE_TYPE r; ! UEMUSHORT s[4]; ! UEMUSHORT e[NE]; /* Convert array of HOST_WIDE_INT to equivalent array of 16-bit pieces. */ if (REAL_WORDS_BIG_ENDIAN) { ! s[0] = (UEMUSHORT) (d[0] >> 16); ! s[1] = (UEMUSHORT) d[0]; ! s[2] = (UEMUSHORT) (d[1] >> 16); ! s[3] = (UEMUSHORT) d[1]; } else { /* Target float words are little-endian. */ ! s[0] = (UEMUSHORT) d[0]; ! s[1] = (UEMUSHORT) (d[0] >> 16); ! s[2] = (UEMUSHORT) d[1]; ! s[3] = (UEMUSHORT) (d[1] >> 16); } ! /* Convert target double to E-type. */ e53toe (s, e); ! /* Output E-type to REAL_VALUE_TYPE. */ PUT_REAL (e, &r); return r; } *************** ereal_from_float (f) *** 6428,6447 **** HOST_WIDE_INT f; { REAL_VALUE_TYPE r; ! unsigned EMUSHORT s[2]; ! unsigned EMUSHORT e[NE]; /* Convert 32 bit integer to array of 16 bit pieces in target machine order. This is the inverse operation to what the function `endian' does. */ if (REAL_WORDS_BIG_ENDIAN) { ! s[0] = (unsigned EMUSHORT) (f >> 16); ! s[1] = (unsigned EMUSHORT) f; } else { ! s[0] = (unsigned EMUSHORT) f; ! s[1] = (unsigned EMUSHORT) (f >> 16); } /* Convert and promote the target float to E-type. */ e24toe (s, e); --- 6484,6503 ---- HOST_WIDE_INT f; { REAL_VALUE_TYPE r; ! UEMUSHORT s[2]; ! UEMUSHORT e[NE]; /* Convert 32 bit integer to array of 16 bit pieces in target machine order. This is the inverse operation to what the function `endian' does. */ if (REAL_WORDS_BIG_ENDIAN) { ! s[0] = (UEMUSHORT) (f >> 16); ! s[1] = (UEMUSHORT) f; } else { ! s[0] = (UEMUSHORT) f; ! s[1] = (UEMUSHORT) (f >> 16); } /* Convert and promote the target float to E-type. */ e24toe (s, e); *************** ereal_from_double (d) *** 6465,6502 **** HOST_WIDE_INT d[]; { REAL_VALUE_TYPE r; ! unsigned EMUSHORT s[4]; ! unsigned EMUSHORT e[NE]; /* Convert array of HOST_WIDE_INT to equivalent array of 16-bit pieces. */ if (REAL_WORDS_BIG_ENDIAN) { #if HOST_BITS_PER_WIDE_INT == 32 ! s[0] = (unsigned EMUSHORT) (d[0] >> 16); ! s[1] = (unsigned EMUSHORT) d[0]; ! s[2] = (unsigned EMUSHORT) (d[1] >> 16); ! s[3] = (unsigned EMUSHORT) d[1]; #else /* In this case the entire target double is contained in the first array element. The second element of the input is ignored. */ ! s[0] = (unsigned EMUSHORT) (d[0] >> 48); ! s[1] = (unsigned EMUSHORT) (d[0] >> 32); ! s[2] = (unsigned EMUSHORT) (d[0] >> 16); ! s[3] = (unsigned EMUSHORT) d[0]; #endif } else { /* Target float words are little-endian. */ ! s[0] = (unsigned EMUSHORT) d[0]; ! s[1] = (unsigned EMUSHORT) (d[0] >> 16); #if HOST_BITS_PER_WIDE_INT == 32 ! s[2] = (unsigned EMUSHORT) d[1]; ! s[3] = (unsigned EMUSHORT) (d[1] >> 16); #else ! s[2] = (unsigned EMUSHORT) (d[0] >> 32); ! s[3] = (unsigned EMUSHORT) (d[0] >> 48); #endif } /* Convert target double to E-type. */ --- 6521,6558 ---- HOST_WIDE_INT d[]; { REAL_VALUE_TYPE r; ! UEMUSHORT s[4]; ! UEMUSHORT e[NE]; /* Convert array of HOST_WIDE_INT to equivalent array of 16-bit pieces. */ if (REAL_WORDS_BIG_ENDIAN) { #if HOST_BITS_PER_WIDE_INT == 32 ! s[0] = (UEMUSHORT) (d[0] >> 16); ! s[1] = (UEMUSHORT) d[0]; ! s[2] = (UEMUSHORT) (d[1] >> 16); ! s[3] = (UEMUSHORT) d[1]; #else /* In this case the entire target double is contained in the first array element. The second element of the input is ignored. */ ! s[0] = (UEMUSHORT) (d[0] >> 48); ! s[1] = (UEMUSHORT) (d[0] >> 32); ! s[2] = (UEMUSHORT) (d[0] >> 16); ! s[3] = (UEMUSHORT) d[0]; #endif } else { /* Target float words are little-endian. */ ! s[0] = (UEMUSHORT) d[0]; ! s[1] = (UEMUSHORT) (d[0] >> 16); #if HOST_BITS_PER_WIDE_INT == 32 ! s[2] = (UEMUSHORT) d[1]; ! s[3] = (UEMUSHORT) (d[1] >> 16); #else ! s[2] = (UEMUSHORT) (d[0] >> 32); ! s[3] = (UEMUSHORT) (d[0] >> 48); #endif } /* Convert target double to E-type. */ *************** ereal_from_double (d) *** 6514,6523 **** static void uditoe (di, e) ! unsigned EMUSHORT *di; /* Address of the 64-bit int. */ ! unsigned EMUSHORT *e; { ! unsigned EMUSHORT yi[NI]; int k; ecleaz (yi); --- 6570,6579 ---- static void uditoe (di, e) ! const UEMUSHORT *di; /* Address of the 64-bit int. */ ! UEMUSHORT *e; { ! UEMUSHORT yi[NI]; int k; ecleaz (yi); *************** uditoe (di, e) *** 6535,6541 **** if ((k = enormlz (yi)) > NBITS)/* normalize the significand */ ecleaz (yi); /* it was zero */ else ! yi[E] -= (unsigned EMUSHORT) k;/* subtract shift count from exponent */ emovo (yi, e); } --- 6591,6597 ---- if ((k = enormlz (yi)) > NBITS)/* normalize the significand */ ecleaz (yi); /* it was zero */ else ! yi[E] -= (UEMUSHORT) k;/* subtract shift count from exponent */ emovo (yi, e); } *************** uditoe (di, e) *** 6543,6554 **** static void ditoe (di, e) ! unsigned EMUSHORT *di; /* Address of the 64-bit int. */ ! unsigned EMUSHORT *e; { unsigned EMULONG acc; ! unsigned EMUSHORT yi[NI]; ! unsigned EMUSHORT carry; int k, sign; ecleaz (yi); --- 6599,6610 ---- static void ditoe (di, e) ! const UEMUSHORT *di; /* Address of the 64-bit int. */ ! UEMUSHORT *e; { unsigned EMULONG acc; ! UEMUSHORT yi[NI]; ! UEMUSHORT carry; int k, sign; ecleaz (yi); *************** ditoe (di, e) *** 6581,6587 **** if ((k = enormlz (yi)) > NBITS)/* normalize the significand */ ecleaz (yi); /* it was zero */ else ! yi[E] -= (unsigned EMUSHORT) k;/* subtract shift count from exponent */ emovo (yi, e); if (sign) eneg (e); --- 6637,6643 ---- if ((k = enormlz (yi)) > NBITS)/* normalize the significand */ ecleaz (yi); /* it was zero */ else ! yi[E] -= (UEMUSHORT) k;/* subtract shift count from exponent */ emovo (yi, e); if (sign) eneg (e); *************** ditoe (di, e) *** 6592,6601 **** static void etoudi (x, i) ! unsigned EMUSHORT *x; ! unsigned EMUSHORT *i; { ! unsigned EMUSHORT xi[NI]; int j, k; emovi (x, xi); --- 6648,6657 ---- static void etoudi (x, i) ! const UEMUSHORT *x; ! UEMUSHORT *i; { ! UEMUSHORT xi[NI]; int j, k; emovi (x, xi); *************** noshift: *** 6675,6687 **** static void etodi (x, i) ! unsigned EMUSHORT *x; ! unsigned EMUSHORT *i; { unsigned EMULONG acc; ! unsigned EMUSHORT xi[NI]; ! unsigned EMUSHORT carry; ! unsigned EMUSHORT *isave; int j, k; emovi (x, xi); --- 6731,6743 ---- static void etodi (x, i) ! const UEMUSHORT *x; ! UEMUSHORT *i; { unsigned EMULONG acc; ! UEMUSHORT xi[NI]; ! UEMUSHORT carry; ! UEMUSHORT *isave; int j, k; emovi (x, xi); *************** static unsigned short sqrndbit[NI]; *** 6777,6785 **** static void esqrt (x, y) ! unsigned EMUSHORT *x, *y; { ! unsigned EMUSHORT temp[NI], num[NI], sq[NI], xx[NI]; EMULONG m, exp; int i, j, k, n, nlups; --- 6833,6842 ---- static void esqrt (x, y) ! const UEMUSHORT *x; ! UEMUSHORT *y; { ! UEMUSHORT temp[NI], num[NI], sq[NI], xx[NI]; EMULONG m, exp; int i, j, k, n, nlups; *************** switch (GET_MODE_BITSIZE (mode)) *** 6926,6932 **** return 64; case 128: ! #ifndef INTEL_EXTENDED_IEEE_FORMAT return 113; #else return 64; --- 6983,6989 ---- return 64; case 128: ! #if (INTEL_EXTENDED_IEEE_FORMAT == 0) return 113; #else return 64; diff -Nrc3pad gcc-3.0.4/gcc/real.h gcc-3.1/gcc/real.h *** gcc-3.0.4/gcc/real.h Fri Nov 10 16:01:14 2000 --- gcc-3.1/gcc/real.h Tue Jan 22 14:33:33 2002 *************** *** 1,26 **** /* Definitions of floating-point access for GNU compiler. Copyright (C) 1989, 1991, 1994, 1996, 1997, 1998, ! 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ ! #ifndef REAL_H_INCLUDED ! #define REAL_H_INCLUDED /* Define codes for all the float formats that we know of. */ #define UNKNOWN_FLOAT_FORMAT 0 --- 1,26 ---- /* Definitions of floating-point access for GNU compiler. Copyright (C) 1989, 1991, 1994, 1996, 1997, 1998, ! 1999, 2000, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ ! #ifndef GCC_REAL_H ! #define GCC_REAL_H /* Define codes for all the float formats that we know of. */ #define UNKNOWN_FLOAT_FORMAT 0 *************** Boston, MA 02111-1307, USA. */ *** 39,44 **** --- 39,48 ---- #define HOST_FLOAT_FORMAT IEEE_FLOAT_FORMAT #endif + #ifndef INTEL_EXTENDED_IEEE_FORMAT + #define INTEL_EXTENDED_IEEE_FORMAT 0 + #endif + #if TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT #define REAL_INFINITY #endif *************** Boston, MA 02111-1307, USA. */ *** 85,91 **** /* **** Start of software floating point emulator interface macros **** */ /* Support 80-bit extended real XFmode if LONG_DOUBLE_TYPE_SIZE ! has been defined to be 96 in the tm.h machine file. */ #if (MAX_LONG_DOUBLE_TYPE_SIZE == 96) #define REAL_IS_NOT_DOUBLE #define REAL_ARITHMETIC --- 89,95 ---- /* **** Start of software floating point emulator interface macros **** */ /* Support 80-bit extended real XFmode if LONG_DOUBLE_TYPE_SIZE ! has been defined to be 96 in the tm.h machine file. */ #if (MAX_LONG_DOUBLE_TYPE_SIZE == 96) #define REAL_IS_NOT_DOUBLE #define REAL_ARITHMETIC *************** typedef struct { *** 109,115 **** #if HOST_FLOAT_FORMAT != TARGET_FLOAT_FORMAT /* If no XFmode support, then a REAL_VALUE_TYPE is 64 bits wide ! but it is not necessarily a host machine double. */ #define REAL_IS_NOT_DOUBLE typedef struct { HOST_WIDE_INT r[(7 + sizeof (HOST_WIDE_INT))/(sizeof (HOST_WIDE_INT))]; --- 113,119 ---- #if HOST_FLOAT_FORMAT != TARGET_FLOAT_FORMAT /* If no XFmode support, then a REAL_VALUE_TYPE is 64 bits wide ! but it is not necessarily a host machine double. */ #define REAL_IS_NOT_DOUBLE typedef struct { HOST_WIDE_INT r[(7 + sizeof (HOST_WIDE_INT))/(sizeof (HOST_WIDE_INT))]; *************** typedef struct { *** 117,123 **** #define REAL_VALUE_TYPE realvaluetype #else /* If host and target formats are compatible, then a REAL_VALUE_TYPE ! is actually a host machine double. */ #define REAL_VALUE_TYPE double #endif --- 121,127 ---- #define REAL_VALUE_TYPE realvaluetype #else /* If host and target formats are compatible, then a REAL_VALUE_TYPE ! is actually a host machine double. */ #define REAL_VALUE_TYPE double #endif *************** extern unsigned int significand_size PAR *** 136,147 **** #define REAL_ARITHMETIC(value, code, d1, d2) \ earith (&(value), (code), &(d1), &(d2)) ! /* Declare functions in real.c. */ extern void earith PARAMS ((REAL_VALUE_TYPE *, int, REAL_VALUE_TYPE *, REAL_VALUE_TYPE *)); extern REAL_VALUE_TYPE etrunci PARAMS ((REAL_VALUE_TYPE)); extern REAL_VALUE_TYPE etruncui PARAMS ((REAL_VALUE_TYPE)); - extern REAL_VALUE_TYPE ereal_atof PARAMS ((const char *, enum machine_mode)); extern REAL_VALUE_TYPE ereal_negate PARAMS ((REAL_VALUE_TYPE)); extern HOST_WIDE_INT efixi PARAMS ((REAL_VALUE_TYPE)); extern unsigned HOST_WIDE_INT efixui PARAMS ((REAL_VALUE_TYPE)); --- 140,150 ---- #define REAL_ARITHMETIC(value, code, d1, d2) \ earith (&(value), (code), &(d1), &(d2)) ! /* Declare functions in real.c. */ extern void earith PARAMS ((REAL_VALUE_TYPE *, int, REAL_VALUE_TYPE *, REAL_VALUE_TYPE *)); extern REAL_VALUE_TYPE etrunci PARAMS ((REAL_VALUE_TYPE)); extern REAL_VALUE_TYPE etruncui PARAMS ((REAL_VALUE_TYPE)); extern REAL_VALUE_TYPE ereal_negate PARAMS ((REAL_VALUE_TYPE)); extern HOST_WIDE_INT efixi PARAMS ((REAL_VALUE_TYPE)); extern unsigned HOST_WIDE_INT efixui PARAMS ((REAL_VALUE_TYPE)); *************** extern REAL_VALUE_TYPE ereal_from_double *** 176,190 **** /* These return REAL_VALUE_TYPE: */ #define REAL_VALUE_RNDZINT(x) (etrunci (x)) #define REAL_VALUE_UNSIGNED_RNDZINT(x) (etruncui (x)) - extern REAL_VALUE_TYPE real_value_truncate PARAMS ((enum machine_mode, - REAL_VALUE_TYPE)); #define REAL_VALUE_TRUNCATE(mode, x) real_value_truncate (mode, x) /* These return HOST_WIDE_INT: */ /* Convert a floating-point value to integer, rounding toward zero. */ #define REAL_VALUE_FIX(x) (efixi (x)) /* Convert a floating-point value to unsigned integer, rounding ! toward zero. */ #define REAL_VALUE_UNSIGNED_FIX(x) (efixui (x)) /* Convert ASCII string S to floating point in mode M. --- 179,191 ---- /* These return REAL_VALUE_TYPE: */ #define REAL_VALUE_RNDZINT(x) (etrunci (x)) #define REAL_VALUE_UNSIGNED_RNDZINT(x) (etruncui (x)) #define REAL_VALUE_TRUNCATE(mode, x) real_value_truncate (mode, x) /* These return HOST_WIDE_INT: */ /* Convert a floating-point value to integer, rounding toward zero. */ #define REAL_VALUE_FIX(x) (efixi (x)) /* Convert a floating-point value to unsigned integer, rounding ! toward zero. */ #define REAL_VALUE_UNSIGNED_FIX(x) (efixui (x)) /* Convert ASCII string S to floating point in mode M. *************** extern REAL_VALUE_TYPE real_value_trunca *** 206,237 **** #define REAL_VALUE_FROM_UNSIGNED_INT(d, lo, hi, mode) \ ereal_from_uint (&d, lo, hi, mode) ! /* IN is a REAL_VALUE_TYPE. OUT is an array of longs. */ ! #if defined(INTEL_EXTENDED_IEEE_FORMAT) && MAX_LONG_DOUBLE_TYPE_SIZE == 128 ! #define REAL_VALUE_TO_TARGET_LONG_DOUBLE(IN, OUT) (etarldouble ((IN), (OUT))) ! #else #define REAL_VALUE_TO_TARGET_LONG_DOUBLE(IN, OUT) \ (LONG_DOUBLE_TYPE_SIZE == 64 ? etardouble ((IN), (OUT)) \ : LONG_DOUBLE_TYPE_SIZE == 96 ? etarldouble ((IN), (OUT)) \ : LONG_DOUBLE_TYPE_SIZE == 128 ? etartdouble ((IN), (OUT)) \ ! : abort()) ! #endif #define REAL_VALUE_TO_TARGET_DOUBLE(IN, OUT) (etardouble ((IN), (OUT))) ! /* IN is a REAL_VALUE_TYPE. OUT is a long. */ #define REAL_VALUE_TO_TARGET_SINGLE(IN, OUT) ((OUT) = etarsingle ((IN))) ! /* Inverse of REAL_VALUE_TO_TARGET_DOUBLE. */ #define REAL_VALUE_UNTO_TARGET_DOUBLE(d) (ereal_unto_double (d)) ! /* Inverse of REAL_VALUE_TO_TARGET_SINGLE. */ #define REAL_VALUE_UNTO_TARGET_SINGLE(f) (ereal_unto_float (f)) /* d is an array of HOST_WIDE_INT that holds a double precision ! value in the target computer's floating point format. */ #define REAL_VALUE_FROM_TARGET_DOUBLE(d) (ereal_from_double (d)) ! /* f is a HOST_WIDE_INT containing a single precision target float value. */ #define REAL_VALUE_FROM_TARGET_SINGLE(f) (ereal_from_float (f)) /* Conversions to decimal ASCII string. */ --- 207,234 ---- #define REAL_VALUE_FROM_UNSIGNED_INT(d, lo, hi, mode) \ ereal_from_uint (&d, lo, hi, mode) ! /* IN is a REAL_VALUE_TYPE. OUT is an array of longs. */ #define REAL_VALUE_TO_TARGET_LONG_DOUBLE(IN, OUT) \ (LONG_DOUBLE_TYPE_SIZE == 64 ? etardouble ((IN), (OUT)) \ : LONG_DOUBLE_TYPE_SIZE == 96 ? etarldouble ((IN), (OUT)) \ : LONG_DOUBLE_TYPE_SIZE == 128 ? etartdouble ((IN), (OUT)) \ ! : abort ()) #define REAL_VALUE_TO_TARGET_DOUBLE(IN, OUT) (etardouble ((IN), (OUT))) ! /* IN is a REAL_VALUE_TYPE. OUT is a long. */ #define REAL_VALUE_TO_TARGET_SINGLE(IN, OUT) ((OUT) = etarsingle ((IN))) ! /* Inverse of REAL_VALUE_TO_TARGET_DOUBLE. */ #define REAL_VALUE_UNTO_TARGET_DOUBLE(d) (ereal_unto_double (d)) ! /* Inverse of REAL_VALUE_TO_TARGET_SINGLE. */ #define REAL_VALUE_UNTO_TARGET_SINGLE(f) (ereal_unto_float (f)) /* d is an array of HOST_WIDE_INT that holds a double precision ! value in the target computer's floating point format. */ #define REAL_VALUE_FROM_TARGET_DOUBLE(d) (ereal_from_double (d)) ! /* f is a HOST_WIDE_INT containing a single precision target float value. */ #define REAL_VALUE_FROM_TARGET_SINGLE(f) (ereal_from_float (f)) /* Conversions to decimal ASCII string. */ *************** do { \ *** 288,294 **** HOST_WIDE_INT l; \ } u; \ if (sizeof(HOST_WIDE_INT) < sizeof(float)) \ ! abort(); \ u.l = 0; \ u.f = (IN); \ (OUT) = u.l; \ --- 285,291 ---- HOST_WIDE_INT l; \ } u; \ if (sizeof(HOST_WIDE_INT) < sizeof(float)) \ ! abort (); \ u.l = 0; \ u.f = (IN); \ (OUT) = u.l; \ *************** do { \ *** 306,312 **** HOST_WIDE_INT l[2]; \ } u; \ if (sizeof(HOST_WIDE_INT) * 2 < sizeof(REAL_VALUE_TYPE)) \ ! abort(); \ u.l[0] = u.l[1] = 0; \ u.f = (IN); \ if (HOST_FLOAT_WORDS_BIG_ENDIAN == FLOAT_WORDS_BIG_ENDIAN) \ --- 303,309 ---- HOST_WIDE_INT l[2]; \ } u; \ if (sizeof(HOST_WIDE_INT) * 2 < sizeof(REAL_VALUE_TYPE)) \ ! abort (); \ u.l[0] = u.l[1] = 0; \ u.f = (IN); \ if (HOST_FLOAT_WORDS_BIG_ENDIAN == FLOAT_WORDS_BIG_ENDIAN) \ *************** do { \ *** 317,323 **** #endif #endif /* HOST_FLOAT_FORMAT == TARGET_FLOAT_FORMAT */ ! /* In this configuration, double and long double are the same. */ #ifndef REAL_VALUE_TO_TARGET_LONG_DOUBLE #define REAL_VALUE_TO_TARGET_LONG_DOUBLE(a, b) REAL_VALUE_TO_TARGET_DOUBLE (a, b) #endif --- 314,320 ---- #endif #endif /* HOST_FLOAT_FORMAT == TARGET_FLOAT_FORMAT */ ! /* In this configuration, double and long double are the same. */ #ifndef REAL_VALUE_TO_TARGET_LONG_DOUBLE #define REAL_VALUE_TO_TARGET_LONG_DOUBLE(a, b) REAL_VALUE_TO_TARGET_DOUBLE (a, b) #endif *************** do { \ *** 355,361 **** #endif /* Convert a floating-point value to unsigned integer, rounding ! toward zero. */ #ifndef REAL_VALUE_UNSIGNED_FIX #define REAL_VALUE_UNSIGNED_FIX(x) ((unsigned int) (x)) #endif --- 352,358 ---- #endif /* Convert a floating-point value to unsigned integer, rounding ! toward zero. */ #ifndef REAL_VALUE_UNSIGNED_FIX #define REAL_VALUE_UNSIGNED_FIX(x) ((unsigned int) (x)) #endif *************** extern double ldexp PARAMS ((double, int *** 369,376 **** /* Convert the string X to a floating-point value. */ #ifndef REAL_VALUE_ATOF #if 1 ! /* Use real.c to convert decimal numbers to binary, ... */ ! extern REAL_VALUE_TYPE ereal_atof PARAMS ((const char *, enum machine_mode)); #define REAL_VALUE_ATOF(x, s) ereal_atof (x, s) /* Could use ereal_atof here for hexadecimal floats too, but real_hex_to_f is OK and it uses faster native fp arithmetic. */ --- 366,372 ---- /* Convert the string X to a floating-point value. */ #ifndef REAL_VALUE_ATOF #if 1 ! /* Use real.c to convert decimal numbers to binary, ... */ #define REAL_VALUE_ATOF(x, s) ereal_atof (x, s) /* Could use ereal_atof here for hexadecimal floats too, but real_hex_to_f is OK and it uses faster native fp arithmetic. */ *************** extern double (atof) (); *** 392,398 **** /* Hexadecimal floating constant input for use with host computer's fp arithmetic. */ #ifndef REAL_VALUE_HTOF ! extern REAL_VALUE_TYPE real_hex_to_f PARAMS ((char *, enum machine_mode)); #define REAL_VALUE_HTOF(s,m) real_hex_to_f(s,m) #endif --- 388,395 ---- /* Hexadecimal floating constant input for use with host computer's fp arithmetic. */ #ifndef REAL_VALUE_HTOF ! extern REAL_VALUE_TYPE real_hex_to_f PARAMS ((const char *, ! enum machine_mode)); #define REAL_VALUE_HTOF(s,m) real_hex_to_f(s,m) #endif *************** extern REAL_VALUE_TYPE real_value_trunca *** 415,440 **** ? (float) (x) : (x)) #endif ! /* Determine whether a floating-point value X is infinite. */ #ifndef REAL_VALUE_ISINF #define REAL_VALUE_ISINF(x) (target_isinf (x)) #endif ! /* Determine whether a floating-point value X is a NaN. */ #ifndef REAL_VALUE_ISNAN #define REAL_VALUE_ISNAN(x) (target_isnan (x)) #endif ! /* Determine whether a floating-point value X is negative. */ #ifndef REAL_VALUE_NEGATIVE #define REAL_VALUE_NEGATIVE(x) (target_negative (x)) #endif ! extern int target_isnan PARAMS ((REAL_VALUE_TYPE)); ! extern int target_isinf PARAMS ((REAL_VALUE_TYPE)); ! extern int target_negative PARAMS ((REAL_VALUE_TYPE)); ! ! /* Determine whether a floating-point value X is minus 0. */ #ifndef REAL_VALUE_MINUS_ZERO #define REAL_VALUE_MINUS_ZERO(x) ((x) == 0 && REAL_VALUE_NEGATIVE (x)) #endif --- 412,433 ---- ? (float) (x) : (x)) #endif ! /* Determine whether a floating-point value X is infinite. */ #ifndef REAL_VALUE_ISINF #define REAL_VALUE_ISINF(x) (target_isinf (x)) #endif ! /* Determine whether a floating-point value X is a NaN. */ #ifndef REAL_VALUE_ISNAN #define REAL_VALUE_ISNAN(x) (target_isnan (x)) #endif ! /* Determine whether a floating-point value X is negative. */ #ifndef REAL_VALUE_NEGATIVE #define REAL_VALUE_NEGATIVE(x) (target_negative (x)) #endif ! /* Determine whether a floating-point value X is minus 0. */ #ifndef REAL_VALUE_MINUS_ZERO #define REAL_VALUE_MINUS_ZERO(x) ((x) == 0 && REAL_VALUE_NEGATIVE (x)) #endif *************** extern int target_isnan PARAMS ((REAL_V *** 487,499 **** extern int target_isinf PARAMS ((REAL_VALUE_TYPE)); extern int target_negative PARAMS ((REAL_VALUE_TYPE)); extern void debug_real PARAMS ((REAL_VALUE_TYPE)); ! /* In varasm.c */ ! extern void assemble_real PARAMS ((REAL_VALUE_TYPE, ! enum machine_mode)); ! extern void debug_real PARAMS ((REAL_VALUE_TYPE)); ! ! /* In varasm.c */ ! extern void assemble_real PARAMS ((REAL_VALUE_TYPE, ! enum machine_mode)); ! #endif /* Not REAL_H_INCLUDED */ --- 480,485 ---- extern int target_isinf PARAMS ((REAL_VALUE_TYPE)); extern int target_negative PARAMS ((REAL_VALUE_TYPE)); extern void debug_real PARAMS ((REAL_VALUE_TYPE)); + extern REAL_VALUE_TYPE ereal_atof PARAMS ((const char *, enum machine_mode)); ! #endif /* ! GCC_REAL_H */ diff -Nrc3pad gcc-3.0.4/gcc/recog.c gcc-3.1/gcc/recog.c *** gcc-3.0.4/gcc/recog.c Thu Jul 12 01:38:09 2001 --- gcc-3.1/gcc/recog.c Fri Apr 12 22:36:01 2002 *************** *** 1,23 **** /* Subroutines used by or related to instruction recognition. Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998 ! 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" --- 1,23 ---- /* Subroutines used by or related to instruction recognition. Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998 ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" *************** Boston, MA 02111-1307, USA. */ *** 29,34 **** --- 29,35 ---- #include "hard-reg-set.h" #include "recog.h" #include "regs.h" + #include "expr.h" #include "function.h" #include "flags.h" #include "real.h" *************** Boston, MA 02111-1307, USA. */ *** 55,62 **** static void validate_replace_rtx_1 PARAMS ((rtx *, rtx, rtx, rtx)); static rtx *find_single_use_1 PARAMS ((rtx, rtx *)); ! static rtx *find_constant_term_loc PARAMS ((rtx *)); ! static int insn_invalid_p PARAMS ((rtx)); /* Nonzero means allow operands to be volatile. This should be 0 if you are generating rtl, such as if you are calling --- 56,63 ---- static void validate_replace_rtx_1 PARAMS ((rtx *, rtx, rtx, rtx)); static rtx *find_single_use_1 PARAMS ((rtx, rtx *)); ! static void validate_replace_src_1 PARAMS ((rtx *, void *)); ! static rtx split_insn PARAMS ((rtx)); /* Nonzero means allow operands to be volatile. This should be 0 if you are generating rtl, such as if you are calling *************** recog_memoized_1 (insn) *** 115,121 **** rtx insn; { if (INSN_CODE (insn) < 0) ! INSN_CODE (insn) = recog (PATTERN (insn), insn, NULL_PTR); return INSN_CODE (insn); } --- 116,122 ---- rtx insn; { if (INSN_CODE (insn) < 0) ! INSN_CODE (insn) = recog (PATTERN (insn), insn, 0); return INSN_CODE (insn); } *************** check_asm_operands (x) *** 149,162 **** operands = (rtx *) alloca (noperands * sizeof (rtx)); constraints = (const char **) alloca (noperands * sizeof (char *)); ! decode_asm_operands (x, operands, NULL_PTR, constraints, NULL_PTR); for (i = 0; i < noperands; i++) { const char *c = constraints[i]; if (c[0] == '%') c++; ! if (ISDIGIT ((unsigned char)c[0]) && c[1] == '\0') c = constraints[c[0] - '0']; if (! asm_operand_ok (operands[i], c)) --- 150,163 ---- operands = (rtx *) alloca (noperands * sizeof (rtx)); constraints = (const char **) alloca (noperands * sizeof (char *)); ! decode_asm_operands (x, operands, NULL, constraints, NULL); for (i = 0; i < noperands; i++) { const char *c = constraints[i]; if (c[0] == '%') c++; ! if (ISDIGIT ((unsigned char) c[0]) && c[1] == '\0') c = constraints[c[0] - '0']; if (! asm_operand_ok (operands[i], c)) *************** validate_change (object, loc, new, in_gr *** 257,274 **** /* This subroutine of apply_change_group verifies whether the changes to INSN were valid; i.e. whether INSN can still be recognized. */ ! static int insn_invalid_p (insn) rtx insn; { ! int icode = recog_memoized (insn); int is_asm = icode < 0 && asm_noperands (PATTERN (insn)) >= 0; ! if (is_asm && ! check_asm_operands (PATTERN (insn))) ! return 1; ! if (! is_asm && icode < 0) return 1; /* After reload, verify that all constraints are satisfied. */ if (reload_completed) { --- 258,300 ---- /* This subroutine of apply_change_group verifies whether the changes to INSN were valid; i.e. whether INSN can still be recognized. */ ! int insn_invalid_p (insn) rtx insn; { ! rtx pat = PATTERN (insn); ! int num_clobbers = 0; ! /* If we are before reload and the pattern is a SET, see if we can add ! clobbers. */ ! int icode = recog (pat, insn, ! (GET_CODE (pat) == SET ! && ! reload_completed && ! reload_in_progress) ! ? &num_clobbers : 0); int is_asm = icode < 0 && asm_noperands (PATTERN (insn)) >= 0; ! ! /* If this is an asm and the operand aren't legal, then fail. Likewise if ! this is not an asm and the insn wasn't recognized. */ ! if ((is_asm && ! check_asm_operands (PATTERN (insn))) ! || (!is_asm && icode < 0)) return 1; + /* If we have to add CLOBBERs, fail if we have to add ones that reference + hard registers since our callers can't know if they are live or not. + Otherwise, add them. */ + if (num_clobbers > 0) + { + rtx newpat; + + if (added_clobbers_hard_reg_p (icode)) + return 1; + + newpat = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (num_clobbers + 1)); + XVECEXP (newpat, 0, 0) = pat; + add_clobbers (newpat, icode); + PATTERN (insn) = pat = newpat; + } + /* After reload, verify that all constraints are satisfied. */ if (reload_completed) { *************** insn_invalid_p (insn) *** 278,283 **** --- 304,310 ---- return 1; } + INSN_CODE (insn) = icode; return 0; } *************** int *** 288,293 **** --- 315,321 ---- apply_change_group () { int i; + rtx last_validated = NULL_RTX; /* The changes have been applied and all INSN_CODEs have been reset to force rerecognition. *************** apply_change_group () *** 302,308 **** { rtx object = changes[i].object; ! if (object == 0) continue; if (GET_CODE (object) == MEM) --- 330,338 ---- { rtx object = changes[i].object; ! /* if there is no object to test or if it is the same as the one we ! already tested, ignore it. */ ! if (object == 0 || object == last_validated) continue; if (GET_CODE (object) == MEM) *************** apply_change_group () *** 323,354 **** && GET_CODE (XVECEXP (pat, 0, XVECLEN (pat, 0) - 1)) == CLOBBER && asm_noperands (PATTERN (object)) < 0) { ! rtx newpat; ! if (XVECLEN (pat, 0) == 2) ! newpat = XVECEXP (pat, 0, 0); ! else ! { ! int j; ! newpat ! = gen_rtx_PARALLEL (VOIDmode, ! rtvec_alloc (XVECLEN (pat, 0) - 1)); ! for (j = 0; j < XVECLEN (newpat, 0); j++) ! XVECEXP (newpat, 0, j) = XVECEXP (pat, 0, j); ! } ! /* Add a new change to this group to replace the pattern ! with this new pattern. Then consider this change ! as having succeeded. The change we added will ! cause the entire call to fail if things remain invalid. ! Note that this can lose if a later change than the one ! we are processing specified &XVECEXP (PATTERN (object), 0, X) ! but this shouldn't occur. */ ! validate_change (object, &PATTERN (object), newpat, 1); ! } else if (GET_CODE (pat) == USE || GET_CODE (pat) == CLOBBER) /* If this insn is a CLOBBER or USE, it is always valid, but is never recognized. */ --- 353,385 ---- && GET_CODE (XVECEXP (pat, 0, XVECLEN (pat, 0) - 1)) == CLOBBER && asm_noperands (PATTERN (object)) < 0) { ! rtx newpat; ! if (XVECLEN (pat, 0) == 2) ! newpat = XVECEXP (pat, 0, 0); ! else ! { ! int j; ! newpat ! = gen_rtx_PARALLEL (VOIDmode, ! rtvec_alloc (XVECLEN (pat, 0) - 1)); ! for (j = 0; j < XVECLEN (newpat, 0); j++) ! XVECEXP (newpat, 0, j) = XVECEXP (pat, 0, j); ! } ! /* Add a new change to this group to replace the pattern ! with this new pattern. Then consider this change ! as having succeeded. The change we added will ! cause the entire call to fail if things remain invalid. ! Note that this can lose if a later change than the one ! we are processing specified &XVECEXP (PATTERN (object), 0, X) ! but this shouldn't occur. */ ! validate_change (object, &PATTERN (object), newpat, 1); ! continue; ! } else if (GET_CODE (pat) == USE || GET_CODE (pat) == CLOBBER) /* If this insn is a CLOBBER or USE, it is always valid, but is never recognized. */ *************** apply_change_group () *** 356,361 **** --- 387,393 ---- else break; } + last_validated = object; } if (i == num_changes) *************** apply_change_group () *** 370,376 **** } } ! /* Return the number of changes so far in the current group. */ int num_validated_changes () --- 402,408 ---- } } ! /* Return the number of changes so far in the current group. */ int num_validated_changes () *************** validate_replace_rtx_1 (loc, from, to, o *** 405,418 **** rtx *loc; rtx from, to, object; { ! register int i, j; ! register const char *fmt; ! register rtx x = *loc; enum rtx_code code; if (!x) return; code = GET_CODE (x); /* X matches FROM if it is the same rtx or they are both referring to the same register in the same mode. Avoid calling rtx_equal_p unless the operands look similar. */ --- 437,458 ---- rtx *loc; rtx from, to, object; { ! int i, j; ! const char *fmt; ! rtx x = *loc; enum rtx_code code; + enum machine_mode op0_mode = VOIDmode; + int prev_changes = num_changes; + rtx new; if (!x) return; + code = GET_CODE (x); + fmt = GET_RTX_FORMAT (code); + if (fmt[0] == 'e') + op0_mode = GET_MODE (XEXP (x, 0)); + /* X matches FROM if it is the same rtx or they are both referring to the same register in the same mode. Avoid calling rtx_equal_p unless the operands look similar. */ *************** validate_replace_rtx_1 (loc, from, to, o *** 428,673 **** return; } ! /* For commutative or comparison operations, try replacing each argument ! separately and seeing if we made any changes. If so, put a constant ! argument last.*/ ! if (GET_RTX_CLASS (code) == '<' || GET_RTX_CLASS (code) == 'c') ! { ! int prev_changes = num_changes; ! validate_replace_rtx_1 (&XEXP (x, 0), from, to, object); ! validate_replace_rtx_1 (&XEXP (x, 1), from, to, object); ! /* If nothing changed, we can exit now. In fact, continuing on ! into the switch statement below can be wrong, eg. turning ! (plus (symbol_ref) (const_int)) into ! (const (plus (symbol_ref) (const_int))). This might not seem ! so bad, but the first rtx is already enclosed in `const', so ! we get a string of (const (const (const...))). */ ! if (prev_changes == num_changes) ! return; ! if (CONSTANT_P (XEXP (x, 0))) ! { ! validate_change (object, loc, ! gen_rtx_fmt_ee (GET_RTX_CLASS (code) == 'c' ? code ! : swap_condition (code), ! GET_MODE (x), XEXP (x, 1), ! XEXP (x, 0)), ! 1); ! x = *loc; ! code = GET_CODE (x); ! } } ! /* Note that if CODE's RTX_CLASS is "c" or "<" we will have already ! done the substitution, otherwise we won't. */ switch (code) { case PLUS: /* If we have a PLUS whose second operand is now a CONST_INT, use ! plus_constant to try to simplify it. */ ! if (GET_CODE (XEXP (x, 1)) == CONST_INT && XEXP (x, 1) == to) ! validate_change (object, loc, plus_constant (XEXP (x, 0), INTVAL (to)), ! 1); ! return; ! case MINUS: ! if (GET_CODE (to) == CONST_INT && XEXP (x, 1) == from) ! { ! validate_change (object, loc, ! plus_constant (XEXP (x, 0), - INTVAL (to)), ! 1); ! return; ! } break; - case ZERO_EXTEND: case SIGN_EXTEND: ! /* In these cases, the operation to be performed depends on the mode ! of the operand. If we are replacing the operand with a VOIDmode ! constant, we lose the information. So try to simplify the operation ! in that case. */ ! if (GET_MODE (to) == VOIDmode ! && (rtx_equal_p (XEXP (x, 0), from) ! || (GET_CODE (XEXP (x, 0)) == SUBREG ! && rtx_equal_p (SUBREG_REG (XEXP (x, 0)), from)))) { ! rtx new = NULL_RTX; ! ! /* If there is a subreg involved, crop to the portion of the ! constant that we are interested in. */ ! if (GET_CODE (XEXP (x, 0)) == SUBREG) ! { ! if (GET_MODE_SIZE (GET_MODE (XEXP (x, 0))) <= UNITS_PER_WORD) ! to = operand_subword (to, SUBREG_WORD (XEXP (x, 0)), ! 0, GET_MODE (from)); ! else if (GET_MODE_CLASS (GET_MODE (from)) == MODE_INT ! && (GET_MODE_BITSIZE (GET_MODE (XEXP (x, 0))) ! <= HOST_BITS_PER_WIDE_INT)) ! { ! int i = SUBREG_WORD (XEXP (x, 0)) * BITS_PER_WORD; ! HOST_WIDE_INT valh; ! unsigned HOST_WIDE_INT vall; ! ! if (GET_CODE (to) == CONST_INT) ! { ! vall = INTVAL (to); ! valh = (HOST_WIDE_INT) vall < 0 ? ~0 : 0; ! } ! else ! { ! vall = CONST_DOUBLE_LOW (to); ! valh = CONST_DOUBLE_HIGH (to); ! } ! ! if (WORDS_BIG_ENDIAN) ! i = (GET_MODE_BITSIZE (GET_MODE (from)) ! - GET_MODE_BITSIZE (GET_MODE (XEXP (x, 0))) - i); ! if (i > 0 && i < HOST_BITS_PER_WIDE_INT) ! vall = vall >> i | valh << (HOST_BITS_PER_WIDE_INT - i); ! else if (i >= HOST_BITS_PER_WIDE_INT) ! vall = valh >> (i - HOST_BITS_PER_WIDE_INT); ! to = GEN_INT (trunc_int_for_mode (vall, ! GET_MODE (XEXP (x, 0)))); ! } ! else ! to = gen_rtx_CLOBBER (GET_MODE (x), const0_rtx); ! } ! ! /* If the above didn't fail, perform the extension from the ! mode of the operand (and not the mode of FROM). */ ! if (to) ! new = simplify_unary_operation (code, GET_MODE (x), to, ! GET_MODE (XEXP (x, 0))); ! /* If any of the above failed, substitute in something that we know won't be recognized. */ if (!new) new = gen_rtx_CLOBBER (GET_MODE (x), const0_rtx); - validate_change (object, loc, new, 1); - return; } break; - case SUBREG: ! /* In case we are replacing by constant, attempt to simplify it to non-SUBREG ! expression. We can't do this later, since the information about inner mode ! may be lost. */ ! if (CONSTANT_P (to) && rtx_equal_p (SUBREG_REG (x), from)) ! { ! if (GET_MODE_SIZE (GET_MODE (x)) == UNITS_PER_WORD ! && GET_MODE_SIZE (GET_MODE (from)) > UNITS_PER_WORD ! && GET_MODE_CLASS (GET_MODE (x)) == MODE_INT) ! { ! rtx temp = operand_subword (to, SUBREG_WORD (x), ! 0, GET_MODE (from)); ! if (temp) ! { ! validate_change (object, loc, temp, 1); ! return; ! } ! } ! if (subreg_lowpart_p (x)) ! { ! rtx new = gen_lowpart_if_possible (GET_MODE (x), to); ! if (new) ! { ! validate_change (object, loc, new, 1); ! return; ! } ! } ! ! /* A paradoxical SUBREG of a VOIDmode constant is the same constant, ! since we are saying that the high bits don't matter. */ ! if (GET_MODE (to) == VOIDmode ! && GET_MODE_SIZE (GET_MODE (x)) > GET_MODE_SIZE (GET_MODE (from))) ! { ! validate_change (object, loc, to, 1); ! return; ! } ! } ! ! /* Changing mode twice with SUBREG => just change it once, ! or not at all if changing back to starting mode. */ ! if (GET_CODE (to) == SUBREG ! && rtx_equal_p (SUBREG_REG (x), from)) ! { ! if (GET_MODE (x) == GET_MODE (SUBREG_REG (to)) ! && SUBREG_WORD (x) == 0 && SUBREG_WORD (to) == 0) ! { ! validate_change (object, loc, SUBREG_REG (to), 1); ! return; ! } ! ! validate_change (object, loc, ! gen_rtx_SUBREG (GET_MODE (x), SUBREG_REG (to), ! SUBREG_WORD (x) + SUBREG_WORD (to)), 1); ! return; ! } ! ! /* If we have a SUBREG of a register that we are replacing and we are ! replacing it with a MEM, make a new MEM and try replacing the ! SUBREG with it. Don't do this if the MEM has a mode-dependent address ! or if we would be widening it. */ ! ! if (GET_CODE (from) == REG ! && GET_CODE (to) == MEM ! && rtx_equal_p (SUBREG_REG (x), from) ! && ! mode_dependent_address_p (XEXP (to, 0)) ! && ! MEM_VOLATILE_P (to) ! && GET_MODE_SIZE (GET_MODE (x)) <= GET_MODE_SIZE (GET_MODE (to))) ! { ! int offset = SUBREG_WORD (x) * UNITS_PER_WORD; ! enum machine_mode mode = GET_MODE (x); ! rtx new; ! ! if (BYTES_BIG_ENDIAN) ! offset += (MIN (UNITS_PER_WORD, ! GET_MODE_SIZE (GET_MODE (SUBREG_REG (x)))) ! - MIN (UNITS_PER_WORD, GET_MODE_SIZE (mode))); ! new = gen_rtx_MEM (mode, plus_constant (XEXP (to, 0), offset)); ! MEM_COPY_ATTRIBUTES (new, to); ! validate_change (object, loc, new, 1); ! return; ! } break; - case ZERO_EXTRACT: case SIGN_EXTRACT: /* If we are replacing a register with memory, try to change the memory ! to be the mode required for memory in extract operations (this isn't ! likely to be an insertion operation; if it was, nothing bad will ! happen, we might just fail in some cases). */ ! if (GET_CODE (from) == REG && GET_CODE (to) == MEM ! && rtx_equal_p (XEXP (x, 0), from) && GET_CODE (XEXP (x, 1)) == CONST_INT && GET_CODE (XEXP (x, 2)) == CONST_INT ! && ! mode_dependent_address_p (XEXP (to, 0)) ! && ! MEM_VOLATILE_P (to)) { enum machine_mode wanted_mode = VOIDmode; ! enum machine_mode is_mode = GET_MODE (to); int pos = INTVAL (XEXP (x, 2)); ! #ifdef HAVE_extzv ! if (code == ZERO_EXTRACT) { ! wanted_mode = insn_data[(int) CODE_FOR_extzv].operand[1].mode; ! if (wanted_mode == VOIDmode) ! wanted_mode = word_mode; } ! #endif ! #ifdef HAVE_extv ! if (code == SIGN_EXTRACT) { ! wanted_mode = insn_data[(int) CODE_FOR_extv].operand[1].mode; ! if (wanted_mode == VOIDmode) ! wanted_mode = word_mode; } - #endif /* If we have a narrower mode, we can do something. */ if (wanted_mode != VOIDmode --- 468,585 ---- return; } ! /* Call ourself recursively to perform the replacements. */ ! for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) ! { ! if (fmt[i] == 'e') ! validate_replace_rtx_1 (&XEXP (x, i), from, to, object); ! else if (fmt[i] == 'E') ! for (j = XVECLEN (x, i) - 1; j >= 0; j--) ! validate_replace_rtx_1 (&XVECEXP (x, i, j), from, to, object); } ! /* If we didn't substitute, there is nothing more to do. */ ! if (num_changes == prev_changes) ! return; ! ! /* Allow substituted expression to have different mode. This is used by ! regmove to change mode of pseudo register. */ ! if (fmt[0] == 'e' && GET_MODE (XEXP (x, 0)) != VOIDmode) ! op0_mode = GET_MODE (XEXP (x, 0)); ! ! /* Do changes needed to keep rtx consistent. Don't do any other ! simplifications, as it is not our job. */ ! ! if ((GET_RTX_CLASS (code) == '<' || GET_RTX_CLASS (code) == 'c') ! && swap_commutative_operands_p (XEXP (x, 0), XEXP (x, 1))) ! { ! validate_change (object, loc, ! gen_rtx_fmt_ee (GET_RTX_CLASS (code) == 'c' ? code ! : swap_condition (code), ! GET_MODE (x), XEXP (x, 1), ! XEXP (x, 0)), 1); ! x = *loc; ! code = GET_CODE (x); ! } switch (code) { case PLUS: /* If we have a PLUS whose second operand is now a CONST_INT, use ! plus_constant to try to simplify it. ! ??? We may want later to remove this, once simplification is ! separated from this function. */ ! if (GET_CODE (XEXP (x, 1)) == CONST_INT) ! validate_change (object, loc, ! simplify_gen_binary ! (PLUS, GET_MODE (x), XEXP (x, 0), XEXP (x, 1)), 1); ! break; case MINUS: ! if (GET_CODE (XEXP (x, 1)) == CONST_INT ! || GET_CODE (XEXP (x, 1)) == CONST_DOUBLE) ! validate_change (object, loc, ! simplify_gen_binary ! (PLUS, GET_MODE (x), XEXP (x, 0), ! simplify_gen_unary (NEG, ! GET_MODE (x), XEXP (x, 1), ! GET_MODE (x))), 1); break; case ZERO_EXTEND: case SIGN_EXTEND: ! if (GET_MODE (XEXP (x, 0)) == VOIDmode) { ! new = simplify_gen_unary (code, GET_MODE (x), XEXP (x, 0), ! op0_mode); /* If any of the above failed, substitute in something that we know won't be recognized. */ if (!new) new = gen_rtx_CLOBBER (GET_MODE (x), const0_rtx); validate_change (object, loc, new, 1); } break; case SUBREG: ! /* All subregs possible to simplify should be simplified. */ ! new = simplify_subreg (GET_MODE (x), SUBREG_REG (x), op0_mode, ! SUBREG_BYTE (x)); ! /* Subregs of VOIDmode operands are incorrect. */ ! if (!new && GET_MODE (SUBREG_REG (x)) == VOIDmode) ! new = gen_rtx_CLOBBER (GET_MODE (x), const0_rtx); ! if (new) ! validate_change (object, loc, new, 1); break; case ZERO_EXTRACT: case SIGN_EXTRACT: /* If we are replacing a register with memory, try to change the memory ! to be the mode required for memory in extract operations (this isn't ! likely to be an insertion operation; if it was, nothing bad will ! happen, we might just fail in some cases). */ ! if (GET_CODE (XEXP (x, 0)) == MEM && GET_CODE (XEXP (x, 1)) == CONST_INT && GET_CODE (XEXP (x, 2)) == CONST_INT ! && !mode_dependent_address_p (XEXP (XEXP (x, 0), 0)) ! && !MEM_VOLATILE_P (XEXP (x, 0))) { enum machine_mode wanted_mode = VOIDmode; ! enum machine_mode is_mode = GET_MODE (XEXP (x, 0)); int pos = INTVAL (XEXP (x, 2)); ! if (GET_CODE (x) == ZERO_EXTRACT) { ! enum machine_mode new_mode ! = mode_for_extraction (EP_extzv, 1); ! if (new_mode != MAX_MACHINE_MODE) ! wanted_mode = new_mode; } ! else if (GET_CODE (x) == SIGN_EXTRACT) { ! enum machine_mode new_mode ! = mode_for_extraction (EP_extv, 1); ! if (new_mode != MAX_MACHINE_MODE) ! wanted_mode = new_mode; } /* If we have a narrower mode, we can do something. */ if (wanted_mode != VOIDmode *************** validate_replace_rtx_1 (loc, from, to, o *** 676,692 **** int offset = pos / BITS_PER_UNIT; rtx newmem; ! /* If the bytes and bits are counted differently, we ! must adjust the offset. */ if (BYTES_BIG_ENDIAN != BITS_BIG_ENDIAN) ! offset = (GET_MODE_SIZE (is_mode) - GET_MODE_SIZE (wanted_mode) ! - offset); pos %= GET_MODE_BITSIZE (wanted_mode); ! newmem = gen_rtx_MEM (wanted_mode, ! plus_constant (XEXP (to, 0), offset)); ! MEM_COPY_ATTRIBUTES (newmem, to); validate_change (object, &XEXP (x, 2), GEN_INT (pos), 1); validate_change (object, &XEXP (x, 0), newmem, 1); --- 588,603 ---- int offset = pos / BITS_PER_UNIT; rtx newmem; ! /* If the bytes and bits are counted differently, we ! must adjust the offset. */ if (BYTES_BIG_ENDIAN != BITS_BIG_ENDIAN) ! offset = ! (GET_MODE_SIZE (is_mode) - GET_MODE_SIZE (wanted_mode) - ! offset); pos %= GET_MODE_BITSIZE (wanted_mode); ! newmem = adjust_address_nv (XEXP (x, 0), wanted_mode, offset); validate_change (object, &XEXP (x, 2), GEN_INT (pos), 1); validate_change (object, &XEXP (x, 0), newmem, 1); *************** validate_replace_rtx_1 (loc, from, to, o *** 694,718 **** } break; ! default: break; } - - /* For commutative or comparison operations we've already performed - replacements. Don't try to perform them again. */ - if (GET_RTX_CLASS (code) != '<' && GET_RTX_CLASS (code) != 'c') - { - fmt = GET_RTX_FORMAT (code); - for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) - { - if (fmt[i] == 'e') - validate_replace_rtx_1 (&XEXP (x, i), from, to, object); - else if (fmt[i] == 'E') - for (j = XVECLEN (x, i) - 1; j >= 0; j--) - validate_replace_rtx_1 (&XVECEXP (x, i, j), from, to, object); - } - } } /* Try replacing every occurrence of FROM in subexpression LOC of INSN --- 605,614 ---- } break; ! default: break; } } /* Try replacing every occurrence of FROM in subexpression LOC of INSN *************** validate_replace_rtx (from, to, insn) *** 738,745 **** return apply_change_group (); } ! /* Try replacing every occurrence of FROM in INSN with TO. After all ! changes have been made, validate by seeing if INSN is still valid. */ void validate_replace_rtx_group (from, to, insn) --- 634,640 ---- return apply_change_group (); } ! /* Try replacing every occurrence of FROM in INSN with TO. */ void validate_replace_rtx_group (from, to, insn) *************** validate_replace_rtx_group (from, to, in *** 748,753 **** --- 643,667 ---- validate_replace_rtx_1 (&PATTERN (insn), from, to, insn); } + /* Function called by note_uses to replace used subexpressions. */ + struct validate_replace_src_data + { + rtx from; /* Old RTX */ + rtx to; /* New RTX */ + rtx insn; /* Insn in which substitution is occurring. */ + }; + + static void + validate_replace_src_1 (x, data) + rtx *x; + void *data; + { + struct validate_replace_src_data *d + = (struct validate_replace_src_data *) data; + + validate_replace_rtx_1 (x, d->from, d->to, d->insn); + } + /* Try replacing every occurrence of FROM in INSN with TO, avoiding SET_DESTs. After all changes have been made, validate by seeing if INSN is still valid. */ *************** int *** 756,769 **** validate_replace_src (from, to, insn) rtx from, to, insn; { ! if ((GET_CODE (insn) != INSN && GET_CODE (insn) != JUMP_INSN) ! || GET_CODE (PATTERN (insn)) != SET) ! abort (); ! validate_replace_rtx_1 (&SET_SRC (PATTERN (insn)), from, to, insn); ! if (GET_CODE (SET_DEST (PATTERN (insn))) == MEM) ! validate_replace_rtx_1 (&XEXP (SET_DEST (PATTERN (insn)), 0), ! from, to, insn); return apply_change_group (); } --- 670,681 ---- validate_replace_src (from, to, insn) rtx from, to, insn; { ! struct validate_replace_src_data d; ! d.from = from; ! d.to = to; ! d.insn = insn; ! note_uses (&PATTERN (insn), validate_replace_src_1, &d); return apply_change_group (); } *************** int *** 776,782 **** next_insn_tests_no_inequality (insn) rtx insn; { ! register rtx next = next_cc0_user (insn); /* If there is no next insn, we have to take the conservative choice. */ if (next == 0) --- 688,694 ---- next_insn_tests_no_inequality (insn) rtx insn; { ! rtx next = next_cc0_user (insn); /* If there is no next insn, we have to take the conservative choice. */ if (next == 0) *************** int *** 796,802 **** next_insns_test_no_inequality (insn) rtx insn; { ! register rtx next = NEXT_INSN (insn); for (; next != 0; next = NEXT_INSN (next)) { --- 708,714 ---- next_insns_test_no_inequality (insn) rtx insn; { ! rtx next = NEXT_INSN (insn); for (; next != 0; next = NEXT_INSN (next)) { *************** find_single_use_1 (dest, loc) *** 841,846 **** --- 753,759 ---- case LABEL_REF: case SYMBOL_REF: case CONST_DOUBLE: + case CONST_VECTOR: case CLOBBER: return 0; *************** find_single_use (dest, insn, ploc) *** 1002,1012 **** int general_operand (op, mode) ! register rtx op; enum machine_mode mode; { ! register enum rtx_code code = GET_CODE (op); ! int mode_altering_drug = 0; if (mode == VOIDmode) mode = GET_MODE (op); --- 915,924 ---- int general_operand (op, mode) ! rtx op; enum machine_mode mode; { ! enum rtx_code code = GET_CODE (op); if (mode == VOIDmode) mode = GET_MODE (op); *************** general_operand (op, mode) *** 1018,1023 **** --- 930,939 ---- && GET_MODE_CLASS (mode) != MODE_PARTIAL_INT) return 0; + if (GET_CODE (op) == CONST_INT + && trunc_int_for_mode (INTVAL (op), mode) != INTVAL (op)) + return 0; + if (CONSTANT_P (op)) return ((GET_MODE (op) == VOIDmode || GET_MODE (op) == mode || mode == VOIDmode) *************** general_operand (op, mode) *** 1041,1054 **** && GET_MODE_SIZE (mode) > GET_MODE_SIZE (GET_MODE (SUBREG_REG (op)))) return 0; #endif op = SUBREG_REG (op); code = GET_CODE (op); - #if 0 - /* No longer needed, since (SUBREG (MEM...)) - will load the MEM into a reload reg in the MEM's own mode. */ - mode_altering_drug = 1; - #endif } if (code == REG) --- 957,974 ---- && GET_MODE_SIZE (mode) > GET_MODE_SIZE (GET_MODE (SUBREG_REG (op)))) return 0; #endif + /* Avoid memories with nonzero SUBREG_BYTE, as offsetting the memory + may result in incorrect reference. We should simplify all valid + subregs of MEM anyway. But allow this after reload because we + might be called from cleanup_subreg_operands. + + ??? This is a kludge. */ + if (!reload_completed && SUBREG_BYTE (op) != 0 + && GET_CODE (SUBREG_REG (op)) == MEM) + return 0; op = SUBREG_REG (op); code = GET_CODE (op); } if (code == REG) *************** general_operand (op, mode) *** 1058,1064 **** if (code == MEM) { ! register rtx y = XEXP (op, 0); if (! volatile_ok && MEM_VOLATILE_P (op)) return 0; --- 978,984 ---- if (code == MEM) { ! rtx y = XEXP (op, 0); if (! volatile_ok && MEM_VOLATILE_P (op)) return 0; *************** general_operand (op, mode) *** 1079,1086 **** return 0; win: - if (mode_altering_drug) - return ! mode_dependent_address_p (XEXP (op, 0)); return 1; } --- 999,1004 ---- *************** general_operand (op, mode) *** 1092,1098 **** int address_operand (op, mode) ! register rtx op; enum machine_mode mode; { return memory_address_p (mode, op); --- 1010,1016 ---- int address_operand (op, mode) ! rtx op; enum machine_mode mode; { return memory_address_p (mode, op); *************** address_operand (op, mode) *** 1114,1120 **** int register_operand (op, mode) ! register rtx op; enum machine_mode mode; { if (GET_MODE (op) != mode && mode != VOIDmode) --- 1032,1038 ---- int register_operand (op, mode) ! rtx op; enum machine_mode mode; { if (GET_MODE (op) != mode && mode != VOIDmode) *************** register_operand (op, mode) *** 1147,1153 **** } /* If we have an ADDRESSOF, consider it valid since it will be ! converted into something that will not be a MEM. */ if (GET_CODE (op) == ADDRESSOF) return 1; --- 1065,1071 ---- } /* If we have an ADDRESSOF, consider it valid since it will be ! converted into something that will not be a MEM. */ if (GET_CODE (op) == ADDRESSOF) return 1; *************** pmode_register_operand (op, mode) *** 1173,1179 **** int scratch_operand (op, mode) ! register rtx op; enum machine_mode mode; { if (GET_MODE (op) != mode && mode != VOIDmode) --- 1091,1097 ---- int scratch_operand (op, mode) ! rtx op; enum machine_mode mode; { if (GET_MODE (op) != mode && mode != VOIDmode) *************** scratch_operand (op, mode) *** 1191,1197 **** int immediate_operand (op, mode) ! register rtx op; enum machine_mode mode; { /* Don't accept CONST_INT or anything similar --- 1109,1115 ---- int immediate_operand (op, mode) ! rtx op; enum machine_mode mode; { /* Don't accept CONST_INT or anything similar *************** immediate_operand (op, mode) *** 1201,1206 **** --- 1119,1128 ---- && GET_MODE_CLASS (mode) != MODE_PARTIAL_INT) return 0; + if (GET_CODE (op) == CONST_INT + && trunc_int_for_mode (INTVAL (op), mode) != INTVAL (op)) + return 0; + /* Accept CONSTANT_P_RTX, since it will be gone by CSE1 and result in 0/1. It seems a safe assumption that this is in range for everyone. */ *************** immediate_operand (op, mode) *** 1220,1229 **** int const_int_operand (op, mode) ! register rtx op; ! enum machine_mode mode ATTRIBUTE_UNUSED; { ! return GET_CODE (op) == CONST_INT; } /* Returns 1 if OP is an operand that is a constant integer or constant --- 1142,1158 ---- int const_int_operand (op, mode) ! rtx op; ! enum machine_mode mode; { ! if (GET_CODE (op) != CONST_INT) ! return 0; ! ! if (mode != VOIDmode ! && trunc_int_for_mode (INTVAL (op), mode) != INTVAL (op)) ! return 0; ! ! return 1; } /* Returns 1 if OP is an operand that is a constant integer or constant *************** const_int_operand (op, mode) *** 1231,1237 **** int const_double_operand (op, mode) ! register rtx op; enum machine_mode mode; { /* Don't accept CONST_INT or anything similar --- 1160,1166 ---- int const_double_operand (op, mode) ! rtx op; enum machine_mode mode; { /* Don't accept CONST_INT or anything similar *************** const_double_operand (op, mode) *** 1250,1256 **** int nonimmediate_operand (op, mode) ! register rtx op; enum machine_mode mode; { return (general_operand (op, mode) && ! CONSTANT_P (op)); --- 1179,1185 ---- int nonimmediate_operand (op, mode) ! rtx op; enum machine_mode mode; { return (general_operand (op, mode) && ! CONSTANT_P (op)); *************** nonimmediate_operand (op, mode) *** 1260,1266 **** int nonmemory_operand (op, mode) ! register rtx op; enum machine_mode mode; { if (CONSTANT_P (op)) --- 1189,1195 ---- int nonmemory_operand (op, mode) ! rtx op; enum machine_mode mode; { if (CONSTANT_P (op)) *************** nonmemory_operand (op, mode) *** 1272,1279 **** && GET_MODE_CLASS (mode) != MODE_PARTIAL_INT) return 0; return ((GET_MODE (op) == VOIDmode || GET_MODE (op) == mode ! || mode == VOIDmode) #ifdef LEGITIMATE_PIC_OPERAND_P && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (op)) #endif --- 1201,1212 ---- && GET_MODE_CLASS (mode) != MODE_PARTIAL_INT) return 0; + if (GET_CODE (op) == CONST_INT + && trunc_int_for_mode (INTVAL (op), mode) != INTVAL (op)) + return 0; + return ((GET_MODE (op) == VOIDmode || GET_MODE (op) == mode ! || mode == VOIDmode) #ifdef LEGITIMATE_PIC_OPERAND_P && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (op)) #endif *************** push_operand (op, mode) *** 1314,1319 **** --- 1247,1258 ---- rtx op; enum machine_mode mode; { + unsigned int rounded_size = GET_MODE_SIZE (mode); + + #ifdef PUSH_ROUNDING + rounded_size = PUSH_ROUNDING (rounded_size); + #endif + if (GET_CODE (op) != MEM) return 0; *************** push_operand (op, mode) *** 1322,1329 **** op = XEXP (op, 0); ! if (GET_CODE (op) != STACK_PUSH_CODE) ! return 0; return XEXP (op, 0) == stack_pointer_rtx; } --- 1261,1285 ---- op = XEXP (op, 0); ! if (rounded_size == GET_MODE_SIZE (mode)) ! { ! if (GET_CODE (op) != STACK_PUSH_CODE) ! return 0; ! } ! else ! { ! if (GET_CODE (op) != PRE_MODIFY ! || GET_CODE (XEXP (op, 1)) != PLUS ! || XEXP (XEXP (op, 1), 0) != XEXP (op, 0) ! || GET_CODE (XEXP (XEXP (op, 1), 1)) != CONST_INT ! #ifdef STACK_GROWS_DOWNWARD ! || INTVAL (XEXP (XEXP (op, 1), 1)) != - (int) rounded_size ! #else ! || INTVAL (XEXP (XEXP (op, 1), 1)) != rounded_size ! #endif ! ) ! return 0; ! } return XEXP (op, 0) == stack_pointer_rtx; } *************** pop_operand (op, mode) *** 1358,1364 **** int memory_address_p (mode, addr) enum machine_mode mode ATTRIBUTE_UNUSED; ! register rtx addr; { if (GET_CODE (addr) == ADDRESSOF) return 1; --- 1314,1320 ---- int memory_address_p (mode, addr) enum machine_mode mode ATTRIBUTE_UNUSED; ! rtx addr; { if (GET_CODE (addr) == ADDRESSOF) return 1; *************** memory_address_p (mode, addr) *** 1378,1384 **** int memory_operand (op, mode) ! register rtx op; enum machine_mode mode; { rtx inner; --- 1334,1340 ---- int memory_operand (op, mode) ! rtx op; enum machine_mode mode; { rtx inner; *************** memory_operand (op, mode) *** 1403,1422 **** int indirect_operand (op, mode) ! register rtx op; enum machine_mode mode; { /* Before reload, a SUBREG isn't in memory (see memory_operand, above). */ if (! reload_completed && GET_CODE (op) == SUBREG && GET_CODE (SUBREG_REG (op)) == MEM) { ! register int offset = SUBREG_WORD (op) * UNITS_PER_WORD; rtx inner = SUBREG_REG (op); - if (BYTES_BIG_ENDIAN) - offset -= (MIN (UNITS_PER_WORD, GET_MODE_SIZE (GET_MODE (op))) - - MIN (UNITS_PER_WORD, GET_MODE_SIZE (GET_MODE (inner)))); - if (mode != VOIDmode && GET_MODE (op) != mode) return 0; --- 1359,1374 ---- int indirect_operand (op, mode) ! rtx op; enum machine_mode mode; { /* Before reload, a SUBREG isn't in memory (see memory_operand, above). */ if (! reload_completed && GET_CODE (op) == SUBREG && GET_CODE (SUBREG_REG (op)) == MEM) { ! int offset = SUBREG_BYTE (op); rtx inner = SUBREG_REG (op); if (mode != VOIDmode && GET_MODE (op) != mode) return 0; *************** indirect_operand (op, mode) *** 1442,1448 **** int comparison_operator (op, mode) ! register rtx op; enum machine_mode mode; { return ((mode == VOIDmode || GET_MODE (op) == mode) --- 1394,1400 ---- int comparison_operator (op, mode) ! rtx op; enum machine_mode mode; { return ((mode == VOIDmode || GET_MODE (op) == mode) *************** decode_asm_operands (body, operands, ope *** 1546,1552 **** const char **constraints; enum machine_mode *modes; { ! register int i; int noperands; const char *template = 0; --- 1498,1504 ---- const char **constraints; enum machine_mode *modes; { ! int i; int noperands; const char *template = 0; *************** decode_asm_operands (body, operands, ope *** 1604,1610 **** template = ASM_OPERANDS_TEMPLATE (asmop); } else if (GET_CODE (body) == PARALLEL ! && GET_CODE (XVECEXP (body, 0, 0)) == SET) { rtx asmop = SET_SRC (XVECEXP (body, 0, 0)); int nparallel = XVECLEN (body, 0); /* Includes CLOBBERs. */ --- 1556,1563 ---- template = ASM_OPERANDS_TEMPLATE (asmop); } else if (GET_CODE (body) == PARALLEL ! && GET_CODE (XVECEXP (body, 0, 0)) == SET ! && GET_CODE (SET_SRC (XVECEXP (body, 0, 0))) == ASM_OPERANDS) { rtx asmop = SET_SRC (XVECEXP (body, 0, 0)); int nparallel = XVECLEN (body, 0); /* Includes CLOBBERs. */ *************** asm_operand_ok (op, constraint) *** 1707,1712 **** --- 1660,1667 ---- proper matching constraint, but we can't actually fail the check if they didn't. Indicate that results are inconclusive. */ + while (ISDIGIT (*constraint)) + constraint++; result = -1; break; *************** asm_operand_ok (op, constraint) *** 1874,1885 **** return the location (type rtx *) of the pointer to that constant term. Otherwise, return a null pointer. */ ! static rtx * find_constant_term_loc (p) rtx *p; { ! register rtx *tem; ! register enum rtx_code code = GET_CODE (*p); /* If *P IS such a constant term, P is its location. */ --- 1829,1840 ---- return the location (type rtx *) of the pointer to that constant term. Otherwise, return a null pointer. */ ! rtx * find_constant_term_loc (p) rtx *p; { ! rtx *tem; ! enum rtx_code code = GET_CODE (*p); /* If *P IS such a constant term, P is its location. */ *************** int *** 1961,1970 **** offsettable_address_p (strictp, mode, y) int strictp; enum machine_mode mode; ! register rtx y; { ! register enum rtx_code ycode = GET_CODE (y); ! register rtx z; rtx y1 = y; rtx *y2; int (*addressp) PARAMS ((enum machine_mode, rtx)) = --- 1916,1925 ---- offsettable_address_p (strictp, mode, y) int strictp; enum machine_mode mode; ! rtx y; { ! enum rtx_code ycode = GET_CODE (y); ! rtx z; rtx y1 = y; rtx *y2; int (*addressp) PARAMS ((enum machine_mode, rtx)) = *************** offsettable_address_p (strictp, mode, y) *** 2011,2019 **** /* The offset added here is chosen as the maximum offset that any instruction could need to add when operating on something of the specified mode. We assume that if Y and Y+c are ! valid addresses then so is Y+d for all 0 0) ! { ! funny_match[funny_match_index].this = opno; ! funny_match[funny_match_index++].other = c - '0'; ! } break; case 'p': --- 2376,2429 ---- case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': + { + /* This operand must be the same as a previous one. + This kind of constraint is used for instructions such + as add when they take only two operands. ! Note that the lower-numbered operand is passed first. ! If we are not testing strictly, assume that this ! constraint will be satisfied. */ ! char *end; ! int match; ! match = strtoul (p - 1, &end, 10); ! p = end; ! if (strict < 0) ! val = 1; ! else ! { ! rtx op1 = recog_data.operand[match]; ! rtx op2 = recog_data.operand[opno]; ! /* A unary operator may be accepted by the predicate, ! but it is irrelevant for matching constraints. */ ! if (GET_RTX_CLASS (GET_CODE (op1)) == '1') ! op1 = XEXP (op1, 0); ! if (GET_RTX_CLASS (GET_CODE (op2)) == '1') ! op2 = XEXP (op2, 0); ! val = operands_match_p (op1, op2); ! } ! ! matching_operands[opno] = match; ! matching_operands[match] = opno; ! ! if (val != 0) ! win = 1; ! ! /* If output is *x and input is *--x, arrange later ! to change the output to *--x as well, since the ! output op is the one that will be printed. */ ! if (val == 2 && strict > 0) ! { ! funny_match[funny_match_index].this = opno; ! funny_match[funny_match_index++].other = match; ! } ! } break; case 'p': *************** constrain_operands (strict) *** 2721,2736 **** int reg_fits_class_p (operand, class, offset, mode) rtx operand; ! register enum reg_class class; int offset; enum machine_mode mode; { ! register int regno = REGNO (operand); if (regno < FIRST_PSEUDO_REGISTER && TEST_HARD_REG_BIT (reg_class_contents[(int) class], regno + offset)) { ! register int sr; regno += offset; for (sr = HARD_REGNO_NREGS (regno, mode) - 1; sr > 0; sr--) --- 2652,2667 ---- int reg_fits_class_p (operand, class, offset, mode) rtx operand; ! enum reg_class class; int offset; enum machine_mode mode; { ! int regno = REGNO (operand); if (regno < FIRST_PSEUDO_REGISTER && TEST_HARD_REG_BIT (reg_class_contents[(int) class], regno + offset)) { ! int sr; regno += offset; for (sr = HARD_REGNO_NREGS (regno, mode) - 1; sr > 0; sr--) *************** reg_fits_class_p (operand, class, offset *** 2743,2748 **** --- 2674,2739 ---- return 0; } + /* Split single instruction. Helper function for split_all_insns. + Return last insn in the sequence if successful, or NULL if unsuccessful. */ + static rtx + split_insn (insn) + rtx insn; + { + rtx set; + if (!INSN_P (insn)) + ; + /* Don't split no-op move insns. These should silently + disappear later in final. Splitting such insns would + break the code that handles REG_NO_CONFLICT blocks. */ + + else if ((set = single_set (insn)) != NULL && set_noop_p (set)) + { + /* Nops get in the way while scheduling, so delete them + now if register allocation has already been done. It + is too risky to try to do this before register + allocation, and there are unlikely to be very many + nops then anyways. */ + if (reload_completed) + { + PUT_CODE (insn, NOTE); + NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED; + NOTE_SOURCE_FILE (insn) = 0; + } + } + else + { + /* Split insns here to get max fine-grain parallelism. */ + rtx first = PREV_INSN (insn); + rtx last = try_split (PATTERN (insn), insn, 1); + + if (last != insn) + { + /* try_split returns the NOTE that INSN became. */ + PUT_CODE (insn, NOTE); + NOTE_SOURCE_FILE (insn) = 0; + NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED; + + /* ??? Coddle to md files that generate subregs in post- + reload splitters instead of computing the proper + hard register. */ + if (reload_completed && first != last) + { + first = NEXT_INSN (first); + while (1) + { + if (INSN_P (first)) + cleanup_subreg_operands (first); + if (first == last) + break; + first = NEXT_INSN (first); + } + } + return last; + } + } + return NULL_RTX; + } /* Split all insns in the function. If UPD_LIFE, update life info after. */ void *************** split_all_insns (upd_life) *** 2764,2857 **** for (insn = bb->head; insn ; insn = next) { ! rtx set; /* Can't use `next_real_insn' because that might go across CODE_LABELS and short-out basic blocks. */ next = NEXT_INSN (insn); ! if (! INSN_P (insn)) ! ; ! ! /* Don't split no-op move insns. These should silently ! disappear later in final. Splitting such insns would ! break the code that handles REG_NO_CONFLICT blocks. */ ! ! else if ((set = single_set (insn)) != NULL ! && rtx_equal_p (SET_SRC (set), SET_DEST (set))) ! { ! /* Nops get in the way while scheduling, so delete them ! now if register allocation has already been done. It ! is too risky to try to do this before register ! allocation, and there are unlikely to be very many ! nops then anyways. */ ! if (reload_completed) ! { ! PUT_CODE (insn, NOTE); ! NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED; ! NOTE_SOURCE_FILE (insn) = 0; ! } ! } ! else { ! /* Split insns here to get max fine-grain parallelism. */ ! rtx first = PREV_INSN (insn); ! rtx last = try_split (PATTERN (insn), insn, 1); ! ! if (last != insn) ! { ! SET_BIT (blocks, i); ! changed = 1; ! ! /* try_split returns the NOTE that INSN became. */ ! PUT_CODE (insn, NOTE); ! NOTE_SOURCE_FILE (insn) = 0; ! NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED; ! ! /* ??? Coddle to md files that generate subregs in post- ! reload splitters instead of computing the proper ! hard register. */ ! if (reload_completed && first != last) ! { ! first = NEXT_INSN (first); ! while (1) ! { ! if (INSN_P (first)) ! cleanup_subreg_operands (first); ! if (first == last) ! break; ! first = NEXT_INSN (first); ! } ! } ! if (insn == bb->end) ! { ! bb->end = last; ! break; ! } ! } } if (insn == bb->end) break; } ! /* ??? When we're called from just after reload, the CFG is in bad ! shape, and we may have fallen off the end. This could be fixed ! by having reload not try to delete unreachable code. Otherwise ! assert we found the end insn. */ ! if (insn == NULL && upd_life) abort (); } if (changed && upd_life) { - compute_bb_for_insn (get_max_uid ()); count_or_remove_death_notes (blocks, 1); update_life_info (blocks, UPDATE_LIFE_LOCAL, PROP_DEATH_NOTES); } sbitmap_free (blocks); } #ifdef HAVE_peephole2 struct peep2_insn_data --- 2755,2819 ---- for (insn = bb->head; insn ; insn = next) { ! rtx last; /* Can't use `next_real_insn' because that might go across CODE_LABELS and short-out basic blocks. */ next = NEXT_INSN (insn); ! last = split_insn (insn); ! if (last) { ! /* The split sequence may include barrier, but the ! BB boundary we are interested in will be set to previous ! one. */ ! while (GET_CODE (last) == BARRIER) ! last = PREV_INSN (last); ! SET_BIT (blocks, i); ! changed = 1; ! insn = last; } if (insn == bb->end) break; } ! if (insn == NULL) abort (); } + if (changed) + { + find_many_sub_basic_blocks (blocks); + } + if (changed && upd_life) { count_or_remove_death_notes (blocks, 1); update_life_info (blocks, UPDATE_LIFE_LOCAL, PROP_DEATH_NOTES); } + #ifdef ENABLE_CHECKING + verify_flow_info (); + #endif sbitmap_free (blocks); } + + /* Same as split_all_insns, but do not expect CFG to be available. + Used by machine depedent reorg passes. */ + + void + split_all_insns_noflow () + { + rtx next, insn; + + for (insn = get_insns (); insn; insn = next) + { + next = NEXT_INSN (insn); + split_insn (insn); + } + return; + } #ifdef HAVE_peephole2 struct peep2_insn_data *************** peep2_find_free_register (from, to, clas *** 3047,3053 **** return NULL_RTX; } ! /* Perform the peephole2 optimization pass. */ void peephole2_optimize (dump_file) --- 3009,3015 ---- return NULL_RTX; } ! /* Perform the peephole2 optimization pass. */ void peephole2_optimize (dump_file) *************** peephole2_optimize (dump_file) *** 3059,3066 **** int i, b; #ifdef HAVE_conditional_execution sbitmap blocks; ! int changed; #endif /* Initialize the regsets we're going to use. */ for (i = 0; i < MAX_INSNS_PER_PEEP2 + 1; ++i) --- 3021,3030 ---- int i, b; #ifdef HAVE_conditional_execution sbitmap blocks; ! bool changed; #endif + bool do_cleanup_cfg = false; + bool do_rebuild_jump_labels = false; /* Initialize the regsets we're going to use. */ for (i = 0; i < MAX_INSNS_PER_PEEP2 + 1; ++i) *************** peephole2_optimize (dump_file) *** 3070,3076 **** #ifdef HAVE_conditional_execution blocks = sbitmap_alloc (n_basic_blocks); sbitmap_zero (blocks); ! changed = 0; #else count_or_remove_death_notes (NULL, 1); #endif --- 3034,3040 ---- #ifdef HAVE_conditional_execution blocks = sbitmap_alloc (n_basic_blocks); sbitmap_zero (blocks); ! changed = false; #else count_or_remove_death_notes (NULL, 1); #endif *************** peephole2_optimize (dump_file) *** 3103,3110 **** prev = PREV_INSN (insn); if (INSN_P (insn)) { ! rtx try; int match_len; /* Record this insn. */ if (--peep2_current < 0) --- 3067,3075 ---- prev = PREV_INSN (insn); if (INSN_P (insn)) { ! rtx try, before_try, x; int match_len; + rtx note; /* Record this insn. */ if (--peep2_current < 0) *************** peephole2_optimize (dump_file) *** 3117,3135 **** try = peephole2_insns (PATTERN (insn), insn, &match_len); if (try != NULL) { i = match_len + peep2_current; if (i >= MAX_INSNS_PER_PEEP2 + 1) i -= MAX_INSNS_PER_PEEP2 + 1; /* Replace the old sequence with the new. */ ! flow_delete_insn_chain (insn, peep2_insn_data[i].insn); ! try = emit_insn_after (try, prev); ! /* Adjust the basic block boundaries. */ ! if (peep2_insn_data[i].insn == bb->end) ! bb->end = try; ! if (insn == bb->head) ! bb->head = NEXT_INSN (prev); #ifdef HAVE_conditional_execution /* With conditional execution, we cannot back up the --- 3082,3214 ---- try = peephole2_insns (PATTERN (insn), insn, &match_len); if (try != NULL) { + /* If we are splitting a CALL_INSN, look for the CALL_INSN + in SEQ and copy our CALL_INSN_FUNCTION_USAGE and other + cfg-related call notes. */ + for (i = 0; i <= match_len; ++i) + { + int j, k; + rtx old_insn, new_insn, note; + + j = i + peep2_current; + if (j >= MAX_INSNS_PER_PEEP2 + 1) + j -= MAX_INSNS_PER_PEEP2 + 1; + old_insn = peep2_insn_data[j].insn; + if (GET_CODE (old_insn) != CALL_INSN) + continue; + + new_insn = NULL_RTX; + if (GET_CODE (try) == SEQUENCE) + for (k = XVECLEN (try, 0) - 1; k >= 0; k--) + { + rtx x = XVECEXP (try, 0, k); + if (GET_CODE (x) == CALL_INSN) + { + new_insn = x; + break; + } + } + else if (GET_CODE (try) == CALL_INSN) + new_insn = try; + if (! new_insn) + abort (); + + CALL_INSN_FUNCTION_USAGE (new_insn) + = CALL_INSN_FUNCTION_USAGE (old_insn); + + for (note = REG_NOTES (old_insn); + note; + note = XEXP (note, 1)) + switch (REG_NOTE_KIND (note)) + { + case REG_NORETURN: + case REG_SETJMP: + case REG_ALWAYS_RETURN: + REG_NOTES (new_insn) + = gen_rtx_EXPR_LIST (REG_NOTE_KIND (note), + XEXP (note, 0), + REG_NOTES (new_insn)); + default: + /* Discard all other reg notes. */ + break; + } + + /* Croak if there is another call in the sequence. */ + while (++i <= match_len) + { + j = i + peep2_current; + if (j >= MAX_INSNS_PER_PEEP2 + 1) + j -= MAX_INSNS_PER_PEEP2 + 1; + old_insn = peep2_insn_data[j].insn; + if (GET_CODE (old_insn) == CALL_INSN) + abort (); + } + break; + } + i = match_len + peep2_current; if (i >= MAX_INSNS_PER_PEEP2 + 1) i -= MAX_INSNS_PER_PEEP2 + 1; + note = find_reg_note (peep2_insn_data[i].insn, + REG_EH_REGION, NULL_RTX); + /* Replace the old sequence with the new. */ ! try = emit_insn_after (try, peep2_insn_data[i].insn); ! before_try = PREV_INSN (insn); ! delete_insn_chain (insn, peep2_insn_data[i].insn); ! /* Re-insert the EH_REGION notes. */ ! if (note) ! { ! edge eh_edge; ! ! for (eh_edge = bb->succ; eh_edge ! ; eh_edge = eh_edge->succ_next) ! if (eh_edge->flags & EDGE_EH) ! break; ! ! for (x = try ; x != before_try ; x = PREV_INSN (x)) ! if (GET_CODE (x) == CALL_INSN ! || (flag_non_call_exceptions ! && may_trap_p (PATTERN (x)) ! && !find_reg_note (x, REG_EH_REGION, NULL))) ! { ! REG_NOTES (x) ! = gen_rtx_EXPR_LIST (REG_EH_REGION, ! XEXP (note, 0), ! REG_NOTES (x)); ! ! if (x != bb->end && eh_edge) ! { ! edge nfte, nehe; ! int flags; ! ! nfte = split_block (bb, x); ! flags = EDGE_EH | EDGE_ABNORMAL; ! if (GET_CODE (x) == CALL_INSN) ! flags |= EDGE_ABNORMAL_CALL; ! nehe = make_edge (nfte->src, eh_edge->dest, ! flags); ! ! nehe->probability = eh_edge->probability; ! nfte->probability ! = REG_BR_PROB_BASE - nehe->probability; ! ! do_cleanup_cfg |= purge_dead_edges (nfte->dest); ! #ifdef HAVE_conditional_execution ! SET_BIT (blocks, nfte->dest->index); ! changed = true; ! #endif ! bb = nfte->src; ! eh_edge = nehe; ! } ! } ! ! /* Converting possibly trapping insn to non-trapping is ! possible. Zap dummy outgoing edges. */ ! do_cleanup_cfg |= purge_dead_edges (bb); ! } #ifdef HAVE_conditional_execution /* With conditional execution, we cannot back up the *************** peephole2_optimize (dump_file) *** 3138,3144 **** So record that we've made a modification to this block and update life information at the end. */ SET_BIT (blocks, b); ! changed = 1; for (i = 0; i < MAX_INSNS_PER_PEEP2 + 1; ++i) peep2_insn_data[i].insn = NULL_RTX; --- 3217,3223 ---- So record that we've made a modification to this block and update life information at the end. */ SET_BIT (blocks, b); ! changed = true; for (i = 0; i < MAX_INSNS_PER_PEEP2 + 1; ++i) peep2_insn_data[i].insn = NULL_RTX; *************** peephole2_optimize (dump_file) *** 3151,3175 **** COPY_REG_SET (live, peep2_insn_data[i].live_before); /* Update life information for the new sequence. */ do { ! if (INSN_P (try)) { if (--i < 0) i = MAX_INSNS_PER_PEEP2; ! peep2_insn_data[i].insn = try; ! propagate_one_insn (pbi, try); COPY_REG_SET (peep2_insn_data[i].live_before, live); } ! try = PREV_INSN (try); } ! while (try != prev); /* ??? Should verify that LIVE now matches what we had before the new sequence. */ peep2_current = i; #endif } } --- 3230,3264 ---- COPY_REG_SET (live, peep2_insn_data[i].live_before); /* Update life information for the new sequence. */ + x = try; do { ! if (INSN_P (x)) { if (--i < 0) i = MAX_INSNS_PER_PEEP2; ! peep2_insn_data[i].insn = x; ! propagate_one_insn (pbi, x); COPY_REG_SET (peep2_insn_data[i].live_before, live); } ! x = PREV_INSN (x); } ! while (x != prev); /* ??? Should verify that LIVE now matches what we had before the new sequence. */ peep2_current = i; #endif + + /* If we generated a jump instruction, it won't have + JUMP_LABEL set. Recompute after we're done. */ + for (x = try; x != before_try; x = PREV_INSN (x)) + if (GET_CODE (x) == JUMP_INSN) + { + do_rebuild_jump_labels = true; + break; + } } } *************** peephole2_optimize (dump_file) *** 3184,3192 **** FREE_REG_SET (peep2_insn_data[i].live_before); FREE_REG_SET (live); #ifdef HAVE_conditional_execution ! count_or_remove_death_notes (blocks, 1); ! update_life_info (blocks, UPDATE_LIFE_LOCAL, PROP_DEATH_NOTES); sbitmap_free (blocks); #endif } --- 3273,3295 ---- FREE_REG_SET (peep2_insn_data[i].live_before); FREE_REG_SET (live); + if (do_rebuild_jump_labels) + rebuild_jump_labels (get_insns ()); + + /* If we eliminated EH edges, we may be able to merge blocks. Further, + we've changed global life since exception handlers are no longer + reachable. */ + if (do_cleanup_cfg) + { + cleanup_cfg (0); + update_life_info (0, UPDATE_LIFE_GLOBAL_RM_NOTES, PROP_DEATH_NOTES); + } #ifdef HAVE_conditional_execution ! else ! { ! count_or_remove_death_notes (blocks, 1); ! update_life_info (blocks, UPDATE_LIFE_LOCAL, PROP_DEATH_NOTES); ! } sbitmap_free (blocks); #endif } diff -Nrc3pad gcc-3.0.4/gcc/recog.h gcc-3.1/gcc/recog.h *** gcc-3.0.4/gcc/recog.h Fri Oct 27 20:58:57 2000 --- gcc-3.1/gcc/recog.h Sun Oct 7 16:50:52 2001 *************** *** 1,23 **** /* Declarations for interface to insn recognizer and insn-output.c. ! Copyright (C) 1987, 1996, 1997, 1998, ! 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* Random number that should be large enough for all purposes. */ #define MAX_RECOG_ALTERNATIVES 30 --- 1,23 ---- /* Declarations for interface to insn recognizer and insn-output.c. ! Copyright (C) 1987, 1996, 1997, 1998, 1999, 2000, 2001 ! Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* Random number that should be large enough for all purposes. */ #define MAX_RECOG_ALTERNATIVES 30 *************** extern int recog_memoized_1 PARAMS ((rt *** 77,82 **** --- 77,83 ---- extern int check_asm_operands PARAMS ((rtx)); extern int asm_operand_ok PARAMS ((rtx, const char *)); extern int validate_change PARAMS ((rtx, rtx *, rtx, int)); + extern int insn_invalid_p PARAMS ((rtx)); extern int apply_change_group PARAMS ((void)); extern int num_validated_changes PARAMS ((void)); extern void cancel_changes PARAMS ((int)); *************** extern int mode_dependent_address_p PARA *** 119,124 **** --- 120,126 ---- extern int recog PARAMS ((rtx, rtx, int *)); extern void add_clobbers PARAMS ((rtx, int)); + extern int added_clobbers_hard_reg_p PARAMS ((int)); extern void insn_extract PARAMS ((rtx)); extern void extract_insn PARAMS ((rtx)); extern void extract_constrain_insn_cached PARAMS ((rtx)); *************** typedef rtx (*insn_gen_fn) PARAMS ((rtx, *** 213,227 **** struct insn_operand_data { ! insn_operand_predicate_fn predicate; ! const char *constraint; ! enum machine_mode mode; ! char strict_low; ! char eliminable; }; /* Legal values for insn_data.output_format. Indicate what type of data --- 215,229 ---- struct insn_operand_data { ! const insn_operand_predicate_fn predicate; ! const char *const constraint; ! const ENUM_BITFIELD(machine_mode) mode : 16; ! const char strict_low; ! const char eliminable; }; /* Legal values for insn_data.output_format. Indicate what type of data *************** struct insn_operand_data *** 233,247 **** struct insn_data { ! const char *name; const PTR output; ! insn_gen_fn genfun; ! const struct insn_operand_data *operand; ! char n_operands; ! char n_dups; ! char n_alternatives; ! char output_format; }; extern const struct insn_data insn_data[]; --- 235,249 ---- struct insn_data { ! const char *const name; const PTR output; ! const insn_gen_fn genfun; ! const struct insn_operand_data *const operand; ! const char n_operands; ! const char n_dups; ! const char n_alternatives; ! const char output_format; }; extern const struct insn_data insn_data[]; diff -Nrc3pad gcc-3.0.4/gcc/reg-stack.c gcc-3.1/gcc/reg-stack.c *** gcc-3.0.4/gcc/reg-stack.c Sat May 12 20:57:13 2001 --- gcc-3.1/gcc/reg-stack.c Mon Mar 18 17:47:03 2002 *************** *** 1,23 **** /* Register to Stack convert for GNU compiler. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* This pass converts stack-like registers from the "flat register file" model that gcc uses, to a stack convention that the 387 uses. --- 1,23 ---- /* Register to Stack convert for GNU compiler. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it ! under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ! ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public ! License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* This pass converts stack-like registers from the "flat register file" model that gcc uses, to a stack convention that the 387 uses. *************** *** 166,171 **** --- 166,172 ---- #include "output.h" #include "basic-block.h" #include "varray.h" + #include "reload.h" #ifdef STACK_REGS *************** typedef struct stack_def *** 184,190 **** { int top; /* index to top stack element */ HARD_REG_SET reg_set; /* set of live registers */ ! char reg[REG_STACK_SIZE]; /* register - stack mapping */ } *stack; /* This is used to carry information about basic blocks. It is --- 185,191 ---- { int top; /* index to top stack element */ HARD_REG_SET reg_set; /* set of live registers */ ! unsigned char reg[REG_STACK_SIZE];/* register - stack mapping */ } *stack; /* This is used to carry information about basic blocks. It is *************** typedef struct stack_def *** 193,200 **** --- 194,204 ---- typedef struct block_info_def { struct stack_def stack_in; /* Input stack configuration. */ + struct stack_def stack_out; /* Output stack configuration. */ HARD_REG_SET out_reg_set; /* Stack regs live on output. */ int done; /* True if block already converted. */ + int predecessors; /* Number of predecessors that needs + to be visited. */ } *block_info; #define BLOCK_INFO(B) ((block_info) (B)->aux) *************** static rtx *** 222,228 **** FP_mode_reg[LAST_STACK_REG+1-FIRST_STACK_REG][(int) MAX_MACHINE_MODE]; #define FP_MODE_REG(regno,mode) \ ! (FP_mode_reg[(regno)-FIRST_STACK_REG][(int)(mode)]) /* Used to initialize uninitialized registers. */ static rtx nan; --- 226,232 ---- FP_mode_reg[LAST_STACK_REG+1-FIRST_STACK_REG][(int) MAX_MACHINE_MODE]; #define FP_MODE_REG(regno,mode) \ ! (FP_mode_reg[(regno)-FIRST_STACK_REG][(int) (mode)]) /* Used to initialize uninitialized registers. */ static rtx nan; *************** static int check_asm_stack_operands PARA *** 238,246 **** static int get_asm_operand_n_inputs PARAMS ((rtx)); static rtx stack_result PARAMS ((tree)); static void replace_reg PARAMS ((rtx *, int)); ! static void remove_regno_note PARAMS ((rtx, enum reg_note, int)); static int get_hard_regnum PARAMS ((stack, rtx)); - static void delete_insn_for_stacker PARAMS ((rtx)); static rtx emit_pop_insn PARAMS ((rtx, stack, rtx, enum emit_where)); static void emit_swap_insn PARAMS ((rtx, stack, rtx)); --- 242,250 ---- static int get_asm_operand_n_inputs PARAMS ((rtx)); static rtx stack_result PARAMS ((tree)); static void replace_reg PARAMS ((rtx *, int)); ! static void remove_regno_note PARAMS ((rtx, enum reg_note, ! unsigned int)); static int get_hard_regnum PARAMS ((stack, rtx)); static rtx emit_pop_insn PARAMS ((rtx, stack, rtx, enum emit_where)); static void emit_swap_insn PARAMS ((rtx, stack, rtx)); *************** static int convert_regs PARAMS ((FILE *** 261,266 **** --- 265,271 ---- static void print_stack PARAMS ((FILE *, stack)); static rtx next_flags_user PARAMS ((rtx)); static void record_label_references PARAMS ((rtx, rtx)); + static bool compensate_edge PARAMS ((edge, FILE *)); /* Return non-zero if any stack register is mentioned somewhere within PAT. */ *************** static int *** 268,275 **** stack_regs_mentioned_p (pat) rtx pat; { ! register const char *fmt; ! register int i; if (STACK_REG_P (pat)) return 1; --- 273,280 ---- stack_regs_mentioned_p (pat) rtx pat; { ! const char *fmt; ! int i; if (STACK_REG_P (pat)) return 1; *************** stack_regs_mentioned_p (pat) *** 279,285 **** { if (fmt[i] == 'E') { ! register int j; for (j = XVECLEN (pat, i) - 1; j >= 0; j--) if (stack_regs_mentioned_p (XVECEXP (pat, i, j))) --- 284,290 ---- { if (fmt[i] == 'E') { ! int j; for (j = XVECLEN (pat, i) - 1; j >= 0; j--) if (stack_regs_mentioned_p (XVECEXP (pat, i, j))) *************** stack_regs_mentioned (insn) *** 301,307 **** unsigned int uid, max; int test; ! if (! INSN_P (insn)) return 0; uid = INSN_UID (insn); --- 306,312 ---- unsigned int uid, max; int test; ! if (! INSN_P (insn) || !stack_regs_mentioned_data) return 0; uid = INSN_UID (insn); *************** pop_stack (regstack, regno) *** 404,410 **** dump file, if used. Construct a CFG and run life analysis. Then convert each insn one ! by one. Run a last jump_optimize pass, if optimizing, to eliminate code duplication created when the converter inserts pop insns on the edges. */ --- 409,415 ---- dump file, if used. Construct a CFG and run life analysis. Then convert each insn one ! by one. Run a last cleanup_cfg pass, if optimizing, to eliminate code duplication created when the converter inserts pop insns on the edges. */ *************** reg_to_stack (first, file) *** 415,421 **** { int i; int max_uid; ! block_info bi; /* See if there is something to do. Flow analysis is quite expensive so we might save some compilation time. */ --- 420,435 ---- { int i; int max_uid; ! ! /* Clean up previous run. */ ! if (stack_regs_mentioned_data) ! { ! VARRAY_FREE (stack_regs_mentioned_data); ! stack_regs_mentioned_data = 0; ! } ! ! if (!optimize) ! split_all_insns (0); /* See if there is something to do. Flow analysis is quite expensive so we might save some compilation time. */ *************** reg_to_stack (first, file) *** 427,441 **** /* Ok, floating point instructions exist. If not optimizing, build the CFG and run life analysis. */ ! find_basic_blocks (first, max_reg_num (), file); ! count_or_remove_death_notes (NULL, 1); ! life_analysis (first, file, PROP_DEATH_NOTES); /* Set up block info for each basic block. */ ! bi = (block_info) xcalloc ((n_basic_blocks + 1), sizeof (*bi)); for (i = n_basic_blocks - 1; i >= 0; --i) ! BASIC_BLOCK (i)->aux = bi + i; ! EXIT_BLOCK_PTR->aux = bi + n_basic_blocks; /* Create the replacement registers up front. */ for (i = FIRST_STACK_REG; i <= LAST_STACK_REG; i++) --- 441,465 ---- /* Ok, floating point instructions exist. If not optimizing, build the CFG and run life analysis. */ ! if (!optimize) ! { ! find_basic_blocks (first, max_reg_num (), file); ! count_or_remove_death_notes (NULL, 1); ! life_analysis (first, file, PROP_DEATH_NOTES); ! } ! mark_dfs_back_edges (); /* Set up block info for each basic block. */ ! alloc_aux_for_blocks (sizeof (struct block_info_def)); for (i = n_basic_blocks - 1; i >= 0; --i) ! { ! edge e; ! basic_block bb = BASIC_BLOCK (i); ! for (e = bb->pred; e; e=e->pred_next) ! if (!(e->flags & EDGE_DFS_BACK) ! && e->src != ENTRY_BLOCK_PTR) ! BLOCK_INFO (bb)->predecessors++; ! } /* Create the replacement registers up front. */ for (i = FIRST_STACK_REG; i <= LAST_STACK_REG; i++) *************** reg_to_stack (first, file) *** 473,487 **** VARRAY_CHAR_INIT (stack_regs_mentioned_data, max_uid + 1, "stack_regs_mentioned cache"); ! if (convert_regs (file) && optimize) ! { ! jump_optimize (first, JUMP_CROSS_JUMP_DEATH_MATTERS, ! !JUMP_NOOP_MOVES, !JUMP_AFTER_REGSCAN); ! } ! /* Clean up. */ ! VARRAY_FREE (stack_regs_mentioned_data); ! free (bi); } /* Check PAT, which is in INSN, for LABEL_REFs. Add INSN to the --- 497,505 ---- VARRAY_CHAR_INIT (stack_regs_mentioned_data, max_uid + 1, "stack_regs_mentioned cache"); ! convert_regs (file); ! free_aux_for_blocks (); } /* Check PAT, which is in INSN, for LABEL_REFs. Add INSN to the *************** static void *** 492,505 **** record_label_references (insn, pat) rtx insn, pat; { ! register enum rtx_code code = GET_CODE (pat); ! register int i; ! register const char *fmt; if (code == LABEL_REF) { ! register rtx label = XEXP (pat, 0); ! register rtx ref; if (GET_CODE (label) != CODE_LABEL) abort (); --- 510,523 ---- record_label_references (insn, pat) rtx insn, pat; { ! enum rtx_code code = GET_CODE (pat); ! int i; ! const char *fmt; if (code == LABEL_REF) { ! rtx label = XEXP (pat, 0); ! rtx ref; if (GET_CODE (label) != CODE_LABEL) abort (); *************** record_label_references (insn, pat) *** 531,537 **** record_label_references (insn, XEXP (pat, i)); if (fmt[i] == 'E') { ! register int j; for (j = 0; j < XVECLEN (pat, i); j++) record_label_references (insn, XVECEXP (pat, i, j)); } --- 549,555 ---- record_label_references (insn, XEXP (pat, i)); if (fmt[i] == 'E') { ! int j; for (j = 0; j < XVECLEN (pat, i); j++) record_label_references (insn, XVECEXP (pat, i, j)); } *************** get_true_reg (pat) *** 556,562 **** rtx subreg; if (FP_REG_P (subreg = SUBREG_REG (*pat))) { ! *pat = FP_MODE_REG (REGNO (subreg) + SUBREG_WORD (*pat), GET_MODE (subreg)); default: return pat; --- 574,584 ---- rtx subreg; if (FP_REG_P (subreg = SUBREG_REG (*pat))) { ! int regno_off = subreg_regno_offset (REGNO (subreg), ! GET_MODE (subreg), ! SUBREG_BYTE (*pat), ! GET_MODE (*pat)); ! *pat = FP_MODE_REG (REGNO (subreg) + regno_off, GET_MODE (subreg)); default: return pat; *************** check_asm_stack_operands (insn) *** 652,662 **** { if (reg_class_size[(int) recog_op_alt[i][alt].class] != 1) { ! error_for_asm (insn, "Output constraint %d must specify a single register", i); malformed_asm = 1; } else ! reg_used_as_output[REGNO (recog_data.operand[i])] = 1; } --- 674,697 ---- { if (reg_class_size[(int) recog_op_alt[i][alt].class] != 1) { ! error_for_asm (insn, "output constraint %d must specify a single register", i); malformed_asm = 1; } else ! { ! int j; ! ! for (j = 0; j < n_clobbers; j++) ! if (REGNO (recog_data.operand[i]) == REGNO (clobber_reg[j])) ! { ! error_for_asm (insn, "output constraint %d cannot be specified together with \"%s\" clobber", ! i, reg_names [REGNO (clobber_reg[j])]); ! malformed_asm = 1; ! break; ! } ! if (j == n_clobbers) ! reg_used_as_output[REGNO (recog_data.operand[i])] = 1; ! } } *************** check_asm_stack_operands (insn) *** 672,678 **** if (i != LAST_STACK_REG + 1) { ! error_for_asm (insn, "Output regs must be grouped at top of stack"); malformed_asm = 1; } --- 707,713 ---- if (i != LAST_STACK_REG + 1) { ! error_for_asm (insn, "output regs must be grouped at top of stack"); malformed_asm = 1; } *************** check_asm_stack_operands (insn) *** 709,715 **** if (i != LAST_STACK_REG + 1) { error_for_asm (insn, ! "Implicitly popped regs must be grouped at top of stack"); malformed_asm = 1; } --- 744,750 ---- if (i != LAST_STACK_REG + 1) { error_for_asm (insn, ! "implicitly popped regs must be grouped at top of stack"); malformed_asm = 1; } *************** check_asm_stack_operands (insn) *** 728,734 **** if (operands_match_p (recog_data.operand[j], recog_data.operand[i])) { error_for_asm (insn, ! "Output operand %d must use `&' constraint", j); malformed_asm = 1; } } --- 763,769 ---- if (operands_match_p (recog_data.operand[j], recog_data.operand[i])) { error_for_asm (insn, ! "output operand %d must use `&' constraint", j); malformed_asm = 1; } } *************** static void *** 832,842 **** remove_regno_note (insn, note, regno) rtx insn; enum reg_note note; ! int regno; { ! register rtx *note_link, this; ! note_link = ®_NOTES(insn); for (this = *note_link; this; this = XEXP (this, 1)) if (REG_NOTE_KIND (this) == note && REG_P (XEXP (this, 0)) && REGNO (XEXP (this, 0)) == regno) --- 867,877 ---- remove_regno_note (insn, note, regno) rtx insn; enum reg_note note; ! unsigned int regno; { ! rtx *note_link, this; ! note_link = ®_NOTES (insn); for (this = *note_link; this; this = XEXP (this, 1)) if (REG_NOTE_KIND (this) == note && REG_P (XEXP (this, 0)) && REGNO (XEXP (this, 0)) == regno) *************** get_hard_regnum (regstack, reg) *** 870,888 **** return i >= 0 ? (FIRST_STACK_REG + regstack->top - i) : -1; } - - /* Delete INSN from the RTL. Mark the insn, but don't remove it from - the chain of insns. Doing so could confuse block_begin and block_end - if this were the only insn in the block. */ - - static void - delete_insn_for_stacker (insn) - rtx insn; - { - PUT_CODE (insn, NOTE); - NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED; - NOTE_SOURCE_FILE (insn) = 0; - } /* Emit an insn to pop virtual register REG before or after INSN. REGSTACK is the stack state after INSN and is updated to reflect this --- 905,910 ---- *************** emit_pop_insn (insn, regstack, reg, wher *** 901,906 **** --- 923,945 ---- rtx pop_insn, pop_rtx; int hard_regno; + /* For complex types take care to pop both halves. These may survive in + CLOBBER and USE expressions. */ + if (COMPLEX_MODE_P (GET_MODE (reg))) + { + rtx reg1 = FP_MODE_REG (REGNO (reg), DFmode); + rtx reg2 = FP_MODE_REG (REGNO (reg) + 1, DFmode); + + pop_insn = NULL_RTX; + if (get_hard_regnum (regstack, reg1) >= 0) + pop_insn = emit_pop_insn (insn, regstack, reg1, where); + if (get_hard_regnum (regstack, reg2) >= 0) + pop_insn = emit_pop_insn (insn, regstack, reg2, where); + if (!pop_insn) + abort (); + return pop_insn; + } + hard_regno = get_hard_regnum (regstack, reg); if (hard_regno < FIRST_STACK_REG) *************** emit_pop_insn (insn, regstack, reg, wher *** 910,918 **** FP_MODE_REG (FIRST_STACK_REG, DFmode)); if (where == EMIT_AFTER) ! pop_insn = emit_block_insn_after (pop_rtx, insn, current_block); else ! pop_insn = emit_block_insn_before (pop_rtx, insn, current_block); REG_NOTES (pop_insn) = gen_rtx_EXPR_LIST (REG_DEAD, FP_MODE_REG (FIRST_STACK_REG, DFmode), --- 949,957 ---- FP_MODE_REG (FIRST_STACK_REG, DFmode)); if (where == EMIT_AFTER) ! pop_insn = emit_insn_after (pop_rtx, insn); else ! pop_insn = emit_insn_before (pop_rtx, insn); REG_NOTES (pop_insn) = gen_rtx_EXPR_LIST (REG_DEAD, FP_MODE_REG (FIRST_STACK_REG, DFmode), *************** emit_swap_insn (insn, regstack, reg) *** 968,973 **** --- 1007,1013 ---- while (tmp != limit) { if (GET_CODE (tmp) == CODE_LABEL + || GET_CODE (tmp) == CALL_INSN || NOTE_INSN_BASIC_BLOCK_P (tmp) || (GET_CODE (tmp) == INSN && stack_regs_mentioned (tmp))) *************** emit_swap_insn (insn, regstack, reg) *** 989,1002 **** swap with, omit the swap. */ if (GET_CODE (i1dest) == REG && REGNO (i1dest) == FIRST_STACK_REG ! && GET_CODE (i1src) == REG && REGNO (i1src) == hard_regno - 1 && find_regno_note (i1, REG_DEAD, FIRST_STACK_REG) == NULL_RTX) return; /* If the previous insn wrote to the reg we are to swap with, omit the swap. */ ! if (GET_CODE (i1dest) == REG && REGNO (i1dest) == hard_regno && GET_CODE (i1src) == REG && REGNO (i1src) == FIRST_STACK_REG && find_regno_note (i1, REG_DEAD, FIRST_STACK_REG) == NULL_RTX) return; --- 1029,1043 ---- swap with, omit the swap. */ if (GET_CODE (i1dest) == REG && REGNO (i1dest) == FIRST_STACK_REG ! && GET_CODE (i1src) == REG ! && REGNO (i1src) == (unsigned) hard_regno - 1 && find_regno_note (i1, REG_DEAD, FIRST_STACK_REG) == NULL_RTX) return; /* If the previous insn wrote to the reg we are to swap with, omit the swap. */ ! if (GET_CODE (i1dest) == REG && REGNO (i1dest) == (unsigned) hard_regno && GET_CODE (i1src) == REG && REGNO (i1src) == FIRST_STACK_REG && find_regno_note (i1, REG_DEAD, FIRST_STACK_REG) == NULL_RTX) return; *************** emit_swap_insn (insn, regstack, reg) *** 1006,1014 **** FP_MODE_REG (FIRST_STACK_REG, XFmode)); if (i1) ! emit_block_insn_after (swap_rtx, i1, current_block); else if (current_block) ! emit_block_insn_before (swap_rtx, current_block->head, current_block); else emit_insn_before (swap_rtx, insn); } --- 1047,1055 ---- FP_MODE_REG (FIRST_STACK_REG, XFmode)); if (i1) ! emit_insn_after (swap_rtx, i1); else if (current_block) ! emit_insn_before (swap_rtx, current_block->head); else emit_insn_before (swap_rtx, insn); } *************** move_for_stack_reg (insn, regstack, pat) *** 1058,1064 **** { emit_pop_insn (insn, regstack, src, EMIT_AFTER); ! delete_insn_for_stacker (insn); return; } --- 1099,1105 ---- { emit_pop_insn (insn, regstack, src, EMIT_AFTER); ! delete_insn (insn); return; } *************** move_for_stack_reg (insn, regstack, pat) *** 1067,1073 **** SET_HARD_REG_BIT (regstack->reg_set, REGNO (dest)); CLEAR_HARD_REG_BIT (regstack->reg_set, REGNO (src)); ! delete_insn_for_stacker (insn); return; } --- 1108,1114 ---- SET_HARD_REG_BIT (regstack->reg_set, REGNO (dest)); CLEAR_HARD_REG_BIT (regstack->reg_set, REGNO (src)); ! delete_insn (insn); return; } *************** move_for_stack_reg (insn, regstack, pat) *** 1084,1090 **** if (find_regno_note (insn, REG_UNUSED, REGNO (dest))) emit_pop_insn (insn, regstack, dest, EMIT_AFTER); ! delete_insn_for_stacker (insn); return; } --- 1125,1131 ---- if (find_regno_note (insn, REG_UNUSED, REGNO (dest))) emit_pop_insn (insn, regstack, dest, EMIT_AFTER); ! delete_insn (insn); return; } *************** move_for_stack_reg (insn, regstack, pat) *** 1124,1132 **** stack is not full, and then write the value to memory via a pop. */ rtx push_rtx, push_insn; ! rtx top_stack_reg = FP_MODE_REG (FIRST_STACK_REG, XFmode); ! push_rtx = gen_movxf (top_stack_reg, top_stack_reg); push_insn = emit_insn_before (push_rtx, insn); REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_DEAD, top_stack_reg, REG_NOTES (insn)); --- 1165,1176 ---- stack is not full, and then write the value to memory via a pop. */ rtx push_rtx, push_insn; ! rtx top_stack_reg = FP_MODE_REG (FIRST_STACK_REG, GET_MODE (src)); ! if (GET_MODE (src) == TFmode) ! push_rtx = gen_movtf (top_stack_reg, top_stack_reg); ! else ! push_rtx = gen_movxf (top_stack_reg, top_stack_reg); push_insn = emit_insn_before (push_rtx, insn); REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_DEAD, top_stack_reg, REG_NOTES (insn)); *************** move_for_stack_reg (insn, regstack, pat) *** 1158,1171 **** /* Swap the condition on a branch, if there is one. Return true if we found a condition to swap. False if the condition was not used as ! such. */ static int swap_rtx_condition_1 (pat) rtx pat; { ! register const char *fmt; ! register int i, r = 0; if (GET_RTX_CLASS (GET_CODE (pat)) == '<') { --- 1202,1215 ---- /* Swap the condition on a branch, if there is one. Return true if we found a condition to swap. False if the condition was not used as ! such. */ static int swap_rtx_condition_1 (pat) rtx pat; { ! const char *fmt; ! int i, r = 0; if (GET_RTX_CLASS (GET_CODE (pat)) == '<') { *************** swap_rtx_condition_1 (pat) *** 1179,1185 **** { if (fmt[i] == 'E') { ! register int j; for (j = XVECLEN (pat, i) - 1; j >= 0; j--) r |= swap_rtx_condition_1 (XVECEXP (pat, i, j)); --- 1223,1229 ---- { if (fmt[i] == 'E') { ! int j; for (j = XVECLEN (pat, i) - 1; j >= 0; j--) r |= swap_rtx_condition_1 (XVECEXP (pat, i, j)); *************** subst_stack_regs_pat (insn, regstack, pa *** 1394,1400 **** } /* ??? Uninitialized USE should not happen. */ else if (get_hard_regnum (regstack, *src) == -1) ! abort(); break; case CLOBBER: --- 1438,1444 ---- } /* ??? Uninitialized USE should not happen. */ else if (get_hard_regnum (regstack, *src) == -1) ! abort (); break; case CLOBBER: *************** subst_stack_regs_pat (insn, regstack, pa *** 1442,1447 **** --- 1486,1500 ---- PATTERN (insn) = pat; move_for_stack_reg (insn, regstack, pat); } + if (! note && COMPLEX_MODE_P (GET_MODE (*dest)) + && get_hard_regnum (regstack, FP_MODE_REG (REGNO (*dest), DFmode)) == -1) + { + pat = gen_rtx_SET (VOIDmode, + FP_MODE_REG (REGNO (*dest) + 1, SFmode), + nan); + PATTERN (insn) = pat; + move_for_stack_reg (insn, regstack, pat); + } } } break; *************** subst_stack_regs_pat (insn, regstack, pa *** 1449,1455 **** case SET: { ! rtx *src1 = (rtx *) NULL_PTR, *src2; rtx src1_note, src2_note; rtx pat_src; --- 1502,1508 ---- case SET: { ! rtx *src1 = (rtx *) 0, *src2; rtx src1_note, src2_note; rtx pat_src; *************** subst_stack_regs_pat (insn, regstack, pa *** 1705,1726 **** break; case IF_THEN_ELSE: ! /* This insn requires the top of stack to be the destination. */ /* If the comparison operator is an FP comparison operator, it is handled correctly by compare_for_stack_reg () who will move the destination to the top of stack. But if the comparison operator is not an FP comparison operator, we ! have to handle it here. */ if (get_hard_regnum (regstack, *dest) >= FIRST_STACK_REG && REGNO (*dest) != regstack->reg[regstack->top]) ! emit_swap_insn (insn, regstack, *dest); ! src1 = get_true_reg (&XEXP (pat_src, 1)); ! src2 = get_true_reg (&XEXP (pat_src, 2)); ! src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1)); ! src2_note = find_regno_note (insn, REG_DEAD, REGNO (*src2)); { rtx src_note [3]; --- 1758,1805 ---- break; case IF_THEN_ELSE: ! /* This insn requires the top of stack to be the destination. */ ! ! src1 = get_true_reg (&XEXP (pat_src, 1)); ! src2 = get_true_reg (&XEXP (pat_src, 2)); ! ! src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1)); ! src2_note = find_regno_note (insn, REG_DEAD, REGNO (*src2)); /* If the comparison operator is an FP comparison operator, it is handled correctly by compare_for_stack_reg () who will move the destination to the top of stack. But if the comparison operator is not an FP comparison operator, we ! have to handle it here. */ if (get_hard_regnum (regstack, *dest) >= FIRST_STACK_REG && REGNO (*dest) != regstack->reg[regstack->top]) ! { ! /* In case one of operands is the top of stack and the operands ! dies, it is safe to make it the destination operand by reversing ! the direction of cmove and avoid fxch. */ ! if ((REGNO (*src1) == regstack->reg[regstack->top] ! && src1_note) ! || (REGNO (*src2) == regstack->reg[regstack->top] ! && src2_note)) ! { ! int idx1 = (get_hard_regnum (regstack, *src1) ! - FIRST_STACK_REG); ! int idx2 = (get_hard_regnum (regstack, *src2) ! - FIRST_STACK_REG); ! /* Make reg-stack believe that the operands are already ! swapped on the stack */ ! regstack->reg[regstack->top - idx1] = REGNO (*src2); ! regstack->reg[regstack->top - idx2] = REGNO (*src1); ! /* Reverse condition to compensate the operand swap. ! i386 do have comparison always reversible. */ ! PUT_CODE (XEXP (pat_src, 0), ! reversed_comparison_code (XEXP (pat_src, 0), insn)); ! } ! else ! emit_swap_insn (insn, regstack, *dest); ! } { rtx src_note [3]; *************** subst_stack_regs_pat (insn, regstack, pa *** 1749,1764 **** EMIT_AFTER); } else ! { ! CLEAR_HARD_REG_BIT (regstack->reg_set, regno); ! replace_reg (&XEXP (src_note[i], 0), FIRST_STACK_REG); ! regstack->top--; ! } } } /* Make dest the top of stack. Add dest to regstack if ! not present. */ if (get_hard_regnum (regstack, *dest) < FIRST_STACK_REG) regstack->reg[++regstack->top] = REGNO (*dest); SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest)); --- 1828,1841 ---- EMIT_AFTER); } else ! /* Top of stack never dies, as it is the ! destination. */ ! abort (); } } /* Make dest the top of stack. Add dest to regstack if ! not present. */ if (get_hard_regnum (regstack, *dest) < FIRST_STACK_REG) regstack->reg[++regstack->top] = REGNO (*dest); SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest)); *************** subst_asm_stack_regs (insn, regstack) *** 1920,1926 **** if (regno < 0) abort (); ! if (regno != REGNO (recog_data.operand[i])) { /* recog_data.operand[i] is not in the right place. Find it and swap it with whatever is already in I's place. --- 1997,2003 ---- if (regno < 0) abort (); ! if ((unsigned int) regno != REGNO (recog_data.operand[i])) { /* recog_data.operand[i] is not in the right place. Find it and swap it with whatever is already in I's place. *************** subst_asm_stack_regs (insn, regstack) *** 2022,2028 **** for (j = 0; j < n_outputs; j++) if (STACK_REG_P (recog_data.operand[j]) ! && REGNO (recog_data.operand[j]) == i) { regstack->reg[++regstack->top] = i; SET_HARD_REG_BIT (regstack->reg_set, i); --- 2099,2105 ---- for (j = 0; j < n_outputs; j++) if (STACK_REG_P (recog_data.operand[j]) ! && REGNO (recog_data.operand[j]) == (unsigned) i) { regstack->reg[++regstack->top] = i; SET_HARD_REG_BIT (regstack->reg_set, i); *************** subst_stack_regs (insn, regstack) *** 2080,2087 **** rtx insn; stack regstack; { ! register rtx *note_link, note; ! register int i; if (GET_CODE (insn) == CALL_INSN) { --- 2157,2164 ---- rtx insn; stack regstack; { ! rtx *note_link, note; ! int i; if (GET_CODE (insn) == CALL_INSN) { *************** subst_stack_regs (insn, regstack) *** 2138,2144 **** /* subst_stack_regs_pat may have deleted a no-op insn. If so, any REG_UNUSED will already have been dealt with, so just return. */ ! if (GET_CODE (insn) == NOTE) return; /* If there is a REG_UNUSED note on a stack register on this insn, --- 2215,2221 ---- /* subst_stack_regs_pat may have deleted a no-op insn. If so, any REG_UNUSED will already have been dealt with, so just return. */ ! if (GET_CODE (insn) == NOTE || INSN_DELETED_P (insn)) return; /* If there is a REG_UNUSED note on a stack register on this insn, *************** subst_stack_regs (insn, regstack) *** 2146,2152 **** since the form of the newly emitted pop insn references the reg, making it no longer `unset'. */ ! note_link = ®_NOTES(insn); for (note = *note_link; note; note = XEXP (note, 1)) if (REG_NOTE_KIND (note) == REG_UNUSED && STACK_REG_P (XEXP (note, 0))) { --- 2223,2229 ---- since the form of the newly emitted pop insn references the reg, making it no longer `unset'. */ ! note_link = ®_NOTES (insn); for (note = *note_link; note; note = XEXP (note, 1)) if (REG_NOTE_KIND (note) == REG_UNUSED && STACK_REG_P (XEXP (note, 0))) { *************** convert_regs_exit () *** 2397,2402 **** --- 2474,2616 ---- } } + /* Adjust the stack of this block on exit to match the stack of the + target block, or copy stack info into the stack of the successor + of the successor hasn't been processed yet. */ + static bool + compensate_edge (e, file) + edge e; + FILE *file; + { + basic_block block = e->src, target = e->dest; + block_info bi = BLOCK_INFO (block); + struct stack_def regstack, tmpstack; + stack target_stack = &BLOCK_INFO (target)->stack_in; + int reg; + + current_block = block; + regstack = bi->stack_out; + if (file) + fprintf (file, "Edge %d->%d: ", block->index, target->index); + + if (target_stack->top == -2) + { + /* The target block hasn't had a stack order selected. + We need merely ensure that no pops are needed. */ + for (reg = regstack.top; reg >= 0; --reg) + if (!TEST_HARD_REG_BIT (target_stack->reg_set, regstack.reg[reg])) + break; + + if (reg == -1) + { + if (file) + fprintf (file, "new block; copying stack position\n"); + + /* change_stack kills values in regstack. */ + tmpstack = regstack; + + change_stack (block->end, &tmpstack, target_stack, EMIT_AFTER); + return false; + } + + if (file) + fprintf (file, "new block; pops needed\n"); + } + else + { + if (target_stack->top == regstack.top) + { + for (reg = target_stack->top; reg >= 0; --reg) + if (target_stack->reg[reg] != regstack.reg[reg]) + break; + + if (reg == -1) + { + if (file) + fprintf (file, "no changes needed\n"); + return false; + } + } + + if (file) + { + fprintf (file, "correcting stack to "); + print_stack (file, target_stack); + } + } + + /* Care for non-call EH edges specially. The normal return path have + values in registers. These will be popped en masse by the unwind + library. */ + if ((e->flags & (EDGE_EH | EDGE_ABNORMAL_CALL)) == EDGE_EH) + target_stack->top = -1; + + /* Other calls may appear to have values live in st(0), but the + abnormal return path will not have actually loaded the values. */ + else if (e->flags & EDGE_ABNORMAL_CALL) + { + /* Assert that the lifetimes are as we expect -- one value + live at st(0) on the end of the source block, and no + values live at the beginning of the destination block. */ + HARD_REG_SET tmp; + + CLEAR_HARD_REG_SET (tmp); + GO_IF_HARD_REG_EQUAL (target_stack->reg_set, tmp, eh1); + abort (); + eh1: + + SET_HARD_REG_BIT (tmp, FIRST_STACK_REG); + GO_IF_HARD_REG_EQUAL (regstack.reg_set, tmp, eh2); + abort (); + eh2: + + target_stack->top = -1; + } + + /* It is better to output directly to the end of the block + instead of to the edge, because emit_swap can do minimal + insn scheduling. We can do this when there is only one + edge out, and it is not abnormal. */ + else if (block->succ->succ_next == NULL && !(e->flags & EDGE_ABNORMAL)) + { + /* change_stack kills values in regstack. */ + tmpstack = regstack; + + change_stack (block->end, &tmpstack, target_stack, + (GET_CODE (block->end) == JUMP_INSN + ? EMIT_BEFORE : EMIT_AFTER)); + } + else + { + rtx seq, after; + + /* We don't support abnormal edges. Global takes care to + avoid any live register across them, so we should never + have to insert instructions on such edges. */ + if (e->flags & EDGE_ABNORMAL) + abort (); + + current_block = NULL; + start_sequence (); + + /* ??? change_stack needs some point to emit insns after. + Also needed to keep gen_sequence from returning a + pattern as opposed to a sequence, which would lose + REG_DEAD notes. */ + after = emit_note (NULL, NOTE_INSN_DELETED); + + tmpstack = regstack; + change_stack (after, &tmpstack, target_stack, EMIT_BEFORE); + + seq = gen_sequence (); + end_sequence (); + + insert_insn_on_edge (seq, e); + return true; + } + return false; + } + /* Convert stack register references in one block. */ static int *************** convert_regs_1 (file, block) *** 2404,2417 **** FILE *file; basic_block block; { ! struct stack_def regstack, tmpstack; block_info bi = BLOCK_INFO (block); int inserted, reg; rtx insn, next; ! edge e; ! current_block = block; if (file) { fprintf (file, "\nBasic block %d\nInput stack: ", block->index); --- 2618,2668 ---- FILE *file; basic_block block; { ! struct stack_def regstack; block_info bi = BLOCK_INFO (block); int inserted, reg; rtx insn, next; ! edge e, beste = NULL; ! inserted = 0; ! ! /* Find the edge we will copy stack from. It should be the most frequent ! one as it will get cheapest after compensation code is generated, ! if multiple such exists, take one with largest count, prefer critical ! one (as splitting critical edges is more expensive), or one with lowest ! index, to avoid random changes with different orders of the edges. */ ! for (e = block->pred; e ; e = e->pred_next) ! { ! if (e->flags & EDGE_DFS_BACK) ! ; ! else if (! beste) ! beste = e; ! else if (EDGE_FREQUENCY (beste) < EDGE_FREQUENCY (e)) ! beste = e; ! else if (EDGE_FREQUENCY (beste) > EDGE_FREQUENCY (e)) ! ; ! else if (beste->count < e->count) ! beste = e; ! else if (beste->count > e->count) ! ; ! else if ((EDGE_CRITICAL_P (e) != 0) ! != (EDGE_CRITICAL_P (beste) != 0)) ! { ! if (EDGE_CRITICAL_P (e)) ! beste = e; ! } ! else if (e->src->index < beste->src->index) ! beste = e; ! } ! ! /* Entry block does have stack already initialized. */ ! if (bi->stack_in.top == -2) ! inserted |= compensate_edge (beste, file); ! else ! beste = NULL; + current_block = block; + if (file) { fprintf (file, "\nBasic block %d\nInput stack: ", block->index); *************** convert_regs_1 (file, block) *** 2482,2488 **** set = gen_rtx_SET (VOIDmode, FP_MODE_REG (reg, SFmode), nan); ! insn = emit_block_insn_after (set, insn, block); subst_stack_regs (insn, ®stack); } } --- 2733,2739 ---- set = gen_rtx_SET (VOIDmode, FP_MODE_REG (reg, SFmode), nan); ! insn = emit_insn_after (set, insn); subst_stack_regs (insn, ®stack); } } *************** convert_regs_1 (file, block) *** 2491,2627 **** GO_IF_HARD_REG_EQUAL (regstack.reg_set, bi->out_reg_set, win); abort (); win: ! /* Adjust the stack of this block on exit to match the stack of the ! target block, or copy stack info into the stack of the successor ! of the successor hasn't been processed yet. */ ! inserted = 0; for (e = block->succ; e ; e = e->succ_next) { ! basic_block target = e->dest; ! stack target_stack = &BLOCK_INFO (target)->stack_in; ! ! if (file) ! fprintf (file, "Edge to block %d: ", target->index); ! ! if (target_stack->top == -2) ! { ! /* The target block hasn't had a stack order selected. ! We need merely ensure that no pops are needed. */ ! for (reg = regstack.top; reg >= 0; --reg) ! if (! TEST_HARD_REG_BIT (target_stack->reg_set, ! regstack.reg[reg])) ! break; ! ! if (reg == -1) ! { ! if (file) ! fprintf (file, "new block; copying stack position\n"); ! ! /* change_stack kills values in regstack. */ ! tmpstack = regstack; ! ! change_stack (block->end, &tmpstack, ! target_stack, EMIT_AFTER); ! continue; ! } ! ! if (file) ! fprintf (file, "new block; pops needed\n"); ! } ! else ! { ! if (target_stack->top == regstack.top) ! { ! for (reg = target_stack->top; reg >= 0; --reg) ! if (target_stack->reg[reg] != regstack.reg[reg]) ! break; ! ! if (reg == -1) ! { ! if (file) ! fprintf (file, "no changes needed\n"); ! continue; ! } ! } ! ! if (file) ! { ! fprintf (file, "correcting stack to "); ! print_stack (file, target_stack); ! } ! } ! ! /* Care for non-call EH edges specially. The normal return path have ! values in registers. These will be popped en masse by the unwind ! library. */ ! if ((e->flags & (EDGE_EH | EDGE_ABNORMAL_CALL)) == EDGE_EH) ! target_stack->top = -1; ! ! /* Other calls may appear to have values live in st(0), but the ! abnormal return path will not have actually loaded the values. */ ! else if (e->flags & EDGE_ABNORMAL_CALL) ! { ! /* Assert that the lifetimes are as we expect -- one value ! live at st(0) on the end of the source block, and no ! values live at the beginning of the destination block. */ ! HARD_REG_SET tmp; ! ! CLEAR_HARD_REG_SET (tmp); ! GO_IF_HARD_REG_EQUAL (target_stack->reg_set, tmp, eh1); ! abort(); ! eh1: ! ! SET_HARD_REG_BIT (tmp, FIRST_STACK_REG); ! GO_IF_HARD_REG_EQUAL (regstack.reg_set, tmp, eh2); ! abort(); ! eh2: ! ! target_stack->top = -1; ! } ! ! /* It is better to output directly to the end of the block ! instead of to the edge, because emit_swap can do minimal ! insn scheduling. We can do this when there is only one ! edge out, and it is not abnormal. */ ! else if (block->succ->succ_next == NULL ! && ! (e->flags & EDGE_ABNORMAL)) { ! /* change_stack kills values in regstack. */ ! tmpstack = regstack; ! ! change_stack (block->end, &tmpstack, target_stack, ! (GET_CODE (block->end) == JUMP_INSN ! ? EMIT_BEFORE : EMIT_AFTER)); } ! else { ! rtx seq, after; ! ! /* We don't support abnormal edges. Global takes care to ! avoid any live register across them, so we should never ! have to insert instructions on such edges. */ ! if (e->flags & EDGE_ABNORMAL) abort (); ! ! current_block = NULL; ! start_sequence (); ! ! /* ??? change_stack needs some point to emit insns after. ! Also needed to keep gen_sequence from returning a ! pattern as opposed to a sequence, which would lose ! REG_DEAD notes. */ ! after = emit_note (NULL, NOTE_INSN_DELETED); ! ! tmpstack = regstack; ! change_stack (after, &tmpstack, target_stack, EMIT_BEFORE); ! ! seq = gen_sequence (); ! end_sequence (); ! ! insert_insn_on_edge (seq, e); ! inserted = 1; ! current_block = block; } } --- 2742,2769 ---- GO_IF_HARD_REG_EQUAL (regstack.reg_set, bi->out_reg_set, win); abort (); win: + bi->stack_out = regstack; ! /* Compensate the back edges, as those wasn't visited yet. */ for (e = block->succ; e ; e = e->succ_next) { ! if (e->flags & EDGE_DFS_BACK ! || (e->dest == EXIT_BLOCK_PTR)) { ! if (!BLOCK_INFO (e->dest)->done ! && e->dest != block) ! abort (); ! inserted |= compensate_edge (e, file); } ! } ! for (e = block->pred; e ; e = e->pred_next) ! { ! if (e != beste && !(e->flags & EDGE_DFS_BACK) ! && e->src != ENTRY_BLOCK_PTR) { ! if (!BLOCK_INFO (e->src)->done) abort (); ! inserted |= compensate_edge (e, file); } } *************** convert_regs_2 (file, block) *** 2642,2648 **** sp = stack; *sp++ = block; - BLOCK_INFO (block)->done = 1; inserted = 0; do --- 2784,2789 ---- *************** convert_regs_2 (file, block) *** 2651,2662 **** block = *--sp; inserted |= convert_regs_1 (file, block); for (e = block->succ; e ; e = e->succ_next) ! if (! BLOCK_INFO (e->dest)->done) { ! *sp++ = e->dest; ! BLOCK_INFO (e->dest)->done = 1; } } while (sp != stack); --- 2792,2805 ---- block = *--sp; inserted |= convert_regs_1 (file, block); + BLOCK_INFO (block)->done = 1; for (e = block->succ; e ; e = e->succ_next) ! if (! (e->flags & EDGE_DFS_BACK)) { ! BLOCK_INFO (e->dest)->predecessors--; ! if (!BLOCK_INFO (e->dest)->predecessors) ! *sp++ = e->dest; } } while (sp != stack); *************** convert_regs (file) *** 2711,2716 **** --- 2854,2860 ---- } } + fixup_abnormal_edges (); if (inserted) commit_edge_insertions (); diff -Nrc3pad gcc-3.0.4/gcc/regclass.c gcc-3.1/gcc/regclass.c *** gcc-3.0.4/gcc/regclass.c Sat Jul 21 00:31:32 2001 --- gcc-3.1/gcc/regclass.c Tue Feb 19 02:53:12 2002 *************** *** 1,23 **** /* Compute register class preferences for pseudo-registers. Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996 ! 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* This file contains two passes of the compiler: reg_scan and reg_class. --- 1,23 ---- /* Compute register class preferences for pseudo-registers. Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996 ! 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* This file contains two passes of the compiler: reg_scan and reg_class. *************** Boston, MA 02111-1307, USA. */ *** 27,32 **** --- 27,33 ---- #include "config.h" #include "system.h" #include "rtl.h" + #include "expr.h" #include "tm_p.h" #include "hard-reg-set.h" #include "flags.h" *************** HARD_REG_SET fixed_reg_set; *** 73,79 **** /* Data for initializing the above. */ ! static char initial_fixed_regs[] = FIXED_REGISTERS; /* Indexed by hard register number, contains 1 for registers that are fixed use or are clobbered by function calls. --- 74,80 ---- /* Data for initializing the above. */ ! static const char initial_fixed_regs[] = FIXED_REGISTERS; /* Indexed by hard register number, contains 1 for registers that are fixed use or are clobbered by function calls. *************** HARD_REG_SET losing_caller_save_reg_set; *** 92,98 **** /* Data for initializing the above. */ ! static char initial_call_used_regs[] = CALL_USED_REGISTERS; /* Indexed by hard register number, contains 1 for registers that are fixed use or call used registers that cannot hold quantities across --- 93,108 ---- /* Data for initializing the above. */ ! static const char initial_call_used_regs[] = CALL_USED_REGISTERS; ! ! /* This is much like call_used_regs, except it doesn't have to ! be a superset of FIXED_REGISTERS. This vector indicates ! what is really call clobbered, and is used when defining ! regs_invalidated_by_call. */ ! ! #ifdef CALL_REALLY_USED_REGISTERS ! char call_really_used_regs[] = CALL_REALLY_USED_REGISTERS; ! #endif /* Indexed by hard register number, contains 1 for registers that are fixed use or call used registers that cannot hold quantities across *************** int n_non_fixed_regs; *** 115,121 **** and are also considered fixed. */ char global_regs[FIRST_PSEUDO_REGISTER]; ! /* Table of register numbers in the order in which to try to use them. */ #ifdef REG_ALLOC_ORDER int reg_alloc_order[FIRST_PSEUDO_REGISTER] = REG_ALLOC_ORDER; --- 125,140 ---- and are also considered fixed. */ char global_regs[FIRST_PSEUDO_REGISTER]; ! ! /* Contains 1 for registers that are set or clobbered by calls. */ ! /* ??? Ideally, this would be just call_used_regs plus global_regs, but ! for someone's bright idea to have call_used_regs strictly include ! fixed_regs. Which leaves us guessing as to the set of fixed_regs ! that are actually preserved. We know for sure that those associated ! with the local stack frame are safe, but scant others. */ ! ! HARD_REG_SET regs_invalidated_by_call; ! /* Table of register numbers in the order in which to try to use them. */ #ifdef REG_ALLOC_ORDER int reg_alloc_order[FIRST_PSEUDO_REGISTER] = REG_ALLOC_ORDER; *************** HARD_REG_SET reg_class_contents[N_REG_CL *** 130,141 **** /* The same information, but as an array of unsigned ints. We copy from these unsigned ints to the table above. We do this so the tm.h files ! do not have to be aware of the wordsize for machines with <= 64 regs. */ #define N_REG_INTS \ ! ((FIRST_PSEUDO_REGISTER + (HOST_BITS_PER_INT - 1)) / HOST_BITS_PER_INT) ! static unsigned int_reg_class_contents[N_REG_CLASSES][N_REG_INTS] = REG_CLASS_CONTENTS; /* For each reg class, number of regs it contains. */ --- 149,161 ---- /* The same information, but as an array of unsigned ints. We copy from these unsigned ints to the table above. We do this so the tm.h files ! do not have to be aware of the wordsize for machines with <= 64 regs. ! Note that we hard-code 32 here, not HOST_BITS_PER_INT. */ #define N_REG_INTS \ ! ((FIRST_PSEUDO_REGISTER + (32 - 1)) / 32) ! static const unsigned int_reg_class_contents[N_REG_CLASSES][N_REG_INTS] = REG_CLASS_CONTENTS; /* For each reg class, number of regs it contains. */ *************** struct reg_info_data { *** 245,251 **** static struct reg_info_data *reg_info_head; /* No more global register variables may be declared; true once ! regclass has been initialized. */ static int no_global_reg_vars = 0; --- 265,271 ---- static struct reg_info_data *reg_info_head; /* No more global register variables may be declared; true once ! regclass has been initialized. */ static int no_global_reg_vars = 0; *************** static int no_global_reg_vars = 0; *** 256,262 **** void init_reg_sets () { ! register int i, j; /* First copy the register information from the initial int form into the regsets. */ --- 276,282 ---- void init_reg_sets () { ! int i, j; /* First copy the register information from the initial int form into the regsets. */ *************** init_reg_sets () *** 265,273 **** { CLEAR_HARD_REG_SET (reg_class_contents[i]); for (j = 0; j < FIRST_PSEUDO_REGISTER; j++) ! if (int_reg_class_contents[i][j / HOST_BITS_PER_INT] ! & ((unsigned) 1 << (j % HOST_BITS_PER_INT))) SET_HARD_REG_BIT (reg_class_contents[i], j); } --- 285,294 ---- { CLEAR_HARD_REG_SET (reg_class_contents[i]); + /* Note that we hard-code 32 here, not HOST_BITS_PER_INT. */ for (j = 0; j < FIRST_PSEUDO_REGISTER; j++) ! if (int_reg_class_contents[i][j / 32] ! & ((unsigned) 1 << (j % 32))) SET_HARD_REG_BIT (reg_class_contents[i], j); } *************** init_reg_sets () *** 290,297 **** static void init_reg_sets_1 () { ! register unsigned int i, j; ! register unsigned int /* enum machine_mode */ m; char allocatable_regs_of_mode [MAX_MACHINE_MODE]; /* This macro allows the fixed or call-used registers --- 311,318 ---- static void init_reg_sets_1 () { ! unsigned int i, j; ! unsigned int /* enum machine_mode */ m; char allocatable_regs_of_mode [MAX_MACHINE_MODE]; /* This macro allows the fixed or call-used registers *************** init_reg_sets_1 () *** 321,327 **** register /* Declare it register if it's a scalar. */ #endif HARD_REG_SET c; ! register int k; COPY_HARD_REG_SET (c, reg_class_contents[i]); IOR_HARD_REG_SET (c, reg_class_contents[j]); --- 342,348 ---- register /* Declare it register if it's a scalar. */ #endif HARD_REG_SET c; ! int k; COPY_HARD_REG_SET (c, reg_class_contents[i]); IOR_HARD_REG_SET (c, reg_class_contents[j]); *************** init_reg_sets_1 () *** 355,361 **** register /* Declare it register if it's a scalar. */ #endif HARD_REG_SET c; ! register int k; COPY_HARD_REG_SET (c, reg_class_contents[i]); IOR_HARD_REG_SET (c, reg_class_contents[j]); --- 376,382 ---- register /* Declare it register if it's a scalar. */ #endif HARD_REG_SET c; ! int k; COPY_HARD_REG_SET (c, reg_class_contents[i]); IOR_HARD_REG_SET (c, reg_class_contents[j]); *************** init_reg_sets_1 () *** 409,414 **** --- 430,436 ---- CLEAR_HARD_REG_SET (fixed_reg_set); CLEAR_HARD_REG_SET (call_used_reg_set); CLEAR_HARD_REG_SET (call_fixed_reg_set); + CLEAR_HARD_REG_SET (regs_invalidated_by_call); memcpy (call_fixed_regs, fixed_regs, sizeof call_fixed_regs); *************** init_reg_sets_1 () *** 427,433 **** --- 449,488 ---- SET_HARD_REG_BIT (call_fixed_reg_set, i); if (CLASS_LIKELY_SPILLED_P (REGNO_REG_CLASS (i))) SET_HARD_REG_BIT (losing_caller_save_reg_set, i); + + /* There are a couple of fixed registers that we know are safe to + exclude from being clobbered by calls: + + The frame pointer is always preserved across calls. The arg pointer + is if it is fixed. The stack pointer usually is, unless + RETURN_POPS_ARGS, in which case an explicit CLOBBER will be present. + If we are generating PIC code, the PIC offset table register is + preserved across calls, though the target can override that. */ + + if (i == STACK_POINTER_REGNUM || i == FRAME_POINTER_REGNUM) + ; + #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM + else if (i == HARD_FRAME_POINTER_REGNUM) + ; + #endif + #if ARG_POINTER_REGNUM != FRAME_POINTER_REGNUM + else if (i == ARG_POINTER_REGNUM && fixed_regs[i]) + ; + #endif + #ifndef PIC_OFFSET_TABLE_REG_CALL_CLOBBERED + else if (i == PIC_OFFSET_TABLE_REGNUM && fixed_regs[i]) + ; + #endif + else if (0 + #ifdef CALL_REALLY_USED_REGISTERS + || call_really_used_regs[i] + #else + || call_used_regs[i] + #endif + || global_regs[i]) + SET_HARD_REG_BIT (regs_invalidated_by_call, i); } + memset (contains_reg_of_mode, 0, sizeof (contains_reg_of_mode)); memset (allocatable_regs_of_mode, 0, sizeof (allocatable_regs_of_mode)); for (m = 0; m < (unsigned int) MAX_MACHINE_MODE; m++) *************** init_reg_sets_1 () *** 463,469 **** } else { ! cost = i == j ? 2 : REGISTER_MOVE_COST (m, i, j); for (p2 = ®_class_subclasses[j][0]; *p2 != LIM_REG_CLASSES; --- 518,524 ---- } else { ! cost = REGISTER_MOVE_COST (m, i, j); for (p2 = ®_class_subclasses[j][0]; *p2 != LIM_REG_CLASSES; *************** init_reg_sets_1 () *** 523,529 **** static void init_reg_modes () { ! register int i; for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) { --- 578,584 ---- static void init_reg_modes () { ! int i; for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) { *************** memory_move_secondary_cost (mode, class, *** 578,584 **** enum reg_class altclass; int partial_cost = 0; /* We need a memory reference to feed to SECONDARY... macros. */ ! /* mem may be unused even if the SECONDARY_ macros are defined. */ rtx mem ATTRIBUTE_UNUSED = top_of_stack[(int) mode]; --- 633,639 ---- enum reg_class altclass; int partial_cost = 0; /* We need a memory reference to feed to SECONDARY... macros. */ ! /* mem may be unused even if the SECONDARY_ macros are defined. */ rtx mem ATTRIBUTE_UNUSED = top_of_stack[(int) mode]; *************** choose_hard_reg_mode (regno, nregs) *** 658,663 **** --- 713,738 ---- if (found_mode != VOIDmode) return found_mode; + for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_FLOAT); + mode != VOIDmode; + mode = GET_MODE_WIDER_MODE (mode)) + if (HARD_REGNO_NREGS (regno, mode) == nregs + && HARD_REGNO_MODE_OK (regno, mode)) + found_mode = mode; + + if (found_mode != VOIDmode) + return found_mode; + + for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_INT); + mode != VOIDmode; + mode = GET_MODE_WIDER_MODE (mode)) + if (HARD_REGNO_NREGS (regno, mode) == nregs + && HARD_REGNO_MODE_OK (regno, mode)) + found_mode = mode; + + if (found_mode != VOIDmode) + return found_mode; + /* Iterate over all of the CCmodes. */ for (m = (unsigned int) CCmode; m < (unsigned int) NUM_MACHINE_MODES; ++m) { *************** fix_register (name, fixed, call_used) *** 707,712 **** --- 782,791 ---- { fixed_regs[i] = fixed; call_used_regs[i] = call_used; + #ifdef CALL_REALLY_USED_REGISTERS + if (fixed == 0) + call_really_used_regs[i] = call_used; + #endif } } else *************** static struct costs init_cost; *** 789,802 **** static struct reg_pref *reg_pref; ! /* Allocated buffers for reg_pref. */ static struct reg_pref *reg_pref_buffer; ! /* Account for the fact that insns within a loop are executed very commonly, ! but don't keep doing this as loops go too deep. */ ! static int loop_cost; static rtx scan_one_insn PARAMS ((rtx, int)); static void record_operand_costs PARAMS ((rtx, struct costs *, struct reg_pref *)); --- 868,880 ---- static struct reg_pref *reg_pref; ! /* Allocated buffers for reg_pref. */ static struct reg_pref *reg_pref_buffer; ! /* Frequency of executions of current insn. */ ! static int frequency; static rtx scan_one_insn PARAMS ((rtx, int)); static void record_operand_costs PARAMS ((rtx, struct costs *, struct reg_pref *)); *************** regclass_init () *** 850,856 **** before regclass is run. */ reg_pref = NULL; ! /* No more global register variables may be declared. */ no_global_reg_vars = 1; } --- 928,934 ---- before regclass is run. */ reg_pref = NULL; ! /* No more global register variables may be declared. */ no_global_reg_vars = 1; } *************** record_operand_costs (insn, op_costs, re *** 927,936 **** if (GET_CODE (recog_data.operand[i]) == MEM) record_address_regs (XEXP (recog_data.operand[i], 0), ! BASE_REG_CLASS, loop_cost * 2); else if (constraints[i][0] == 'p') record_address_regs (recog_data.operand[i], ! BASE_REG_CLASS, loop_cost * 2); } /* Check for commutative in a separate loop so everything will --- 1005,1014 ---- if (GET_CODE (recog_data.operand[i]) == MEM) record_address_regs (XEXP (recog_data.operand[i], 0), ! MODE_BASE_REG_CLASS (modes[i]), frequency * 2); else if (constraints[i][0] == 'p') record_address_regs (recog_data.operand[i], ! MODE_BASE_REG_CLASS (modes[i]), frequency * 2); } /* Check for commutative in a separate loop so everything will *************** scan_one_insn (insn, pass) *** 1006,1014 **** costs[REGNO (SET_DEST (set))].mem_cost -= (MEMORY_MOVE_COST (GET_MODE (SET_DEST (set)), GENERAL_REGS, 1) ! * loop_cost); record_address_regs (XEXP (SET_SRC (set), 0), ! BASE_REG_CLASS, loop_cost * 2); return insn; } --- 1084,1092 ---- costs[REGNO (SET_DEST (set))].mem_cost -= (MEMORY_MOVE_COST (GET_MODE (SET_DEST (set)), GENERAL_REGS, 1) ! * frequency); record_address_regs (XEXP (SET_SRC (set), 0), ! MODE_BASE_REG_CLASS (VOIDmode), frequency * 2); return insn; } *************** scan_one_insn (insn, pass) *** 1058,1071 **** --- 1136,1152 ---- /* This makes one more setting of new insns's dest. */ REG_N_SETS (REGNO (recog_data.operand[0]))++; REG_N_REFS (REGNO (recog_data.operand[0]))++; + REG_FREQ (REGNO (recog_data.operand[0])) += frequency; *recog_data.operand_loc[1] = recog_data.operand[0]; REG_N_REFS (REGNO (recog_data.operand[0]))++; + REG_FREQ (REGNO (recog_data.operand[0])) += frequency; for (i = recog_data.n_dups - 1; i >= 0; i--) if (recog_data.dup_num[i] == 1) { *recog_data.dup_loc[i] = recog_data.operand[0]; REG_N_REFS (REGNO (recog_data.operand[0]))++; + REG_FREQ (REGNO (recog_data.operand[0])) += frequency; } return PREV_INSN (newinsn); *************** scan_one_insn (insn, pass) *** 1083,1091 **** int regno = REGNO (recog_data.operand[i]); struct costs *p = &costs[regno], *q = &op_costs[i]; ! p->mem_cost += q->mem_cost * loop_cost; for (j = 0; j < N_REG_CLASSES; j++) ! p->cost[j] += q->cost[j] * loop_cost; } return insn; --- 1164,1172 ---- int regno = REGNO (recog_data.operand[i]); struct costs *p = &costs[regno], *q = &op_costs[i]; ! p->mem_cost += q->mem_cost * frequency; for (j = 0; j < N_REG_CLASSES; j++) ! p->cost[j] += q->cost[j] * frequency; } return insn; *************** regclass (f, nregs, dump) *** 1102,1109 **** int nregs; FILE *dump; { ! register rtx insn; ! register int i; int pass; init_recog (); --- 1183,1190 ---- int nregs; FILE *dump; { ! rtx insn; ! int i; int pass; init_recog (); *************** regclass (f, nregs, dump) *** 1111,1117 **** costs = (struct costs *) xmalloc (nregs * sizeof (struct costs)); #ifdef CLASS_CANNOT_CHANGE_MODE ! reg_changes_mode = BITMAP_XMALLOC(); #endif #ifdef FORBIDDEN_INC_DEC_CLASSES --- 1192,1198 ---- costs = (struct costs *) xmalloc (nregs * sizeof (struct costs)); #ifdef CLASS_CANNOT_CHANGE_MODE ! reg_changes_mode = BITMAP_XMALLOC (); #endif #ifdef FORBIDDEN_INC_DEC_CLASSES *************** regclass (f, nregs, dump) *** 1127,1133 **** { rtx r = gen_rtx_REG (VOIDmode, 0); enum machine_mode m; ! register int j; for (j = 0; j < FIRST_PSEUDO_REGISTER; j++) if (TEST_HARD_REG_BIT (reg_class_contents[i], j)) --- 1208,1214 ---- { rtx r = gen_rtx_REG (VOIDmode, 0); enum machine_mode m; ! int j; for (j = 0; j < FIRST_PSEUDO_REGISTER; j++) if (TEST_HARD_REG_BIT (reg_class_contents[i], j)) *************** regclass (f, nregs, dump) *** 1147,1161 **** if ((0 #ifdef SECONDARY_RELOAD_CLASS ! || (SECONDARY_RELOAD_CLASS (BASE_REG_CLASS, m, r) != NO_REGS) #else #ifdef SECONDARY_INPUT_RELOAD_CLASS ! || (SECONDARY_INPUT_RELOAD_CLASS (BASE_REG_CLASS, m, r) != NO_REGS) #endif #ifdef SECONDARY_OUTPUT_RELOAD_CLASS ! || (SECONDARY_OUTPUT_RELOAD_CLASS (BASE_REG_CLASS, m, r) != NO_REGS) #endif #endif --- 1228,1242 ---- if ((0 #ifdef SECONDARY_RELOAD_CLASS ! || (SECONDARY_RELOAD_CLASS (MODE_BASE_REG_CLASS (VOIDmode), m, r) != NO_REGS) #else #ifdef SECONDARY_INPUT_RELOAD_CLASS ! || (SECONDARY_INPUT_RELOAD_CLASS (MODE_BASE_REG_CLASS (VOIDmode), m, r) != NO_REGS) #endif #ifdef SECONDARY_OUTPUT_RELOAD_CLASS ! || (SECONDARY_OUTPUT_RELOAD_CLASS (MODE_BASE_REG_CLASS (VOIDmode), m, r) != NO_REGS) #endif #endif *************** regclass (f, nregs, dump) *** 1191,1197 **** if (!optimize) { ! loop_cost = 1; for (insn = f; insn; insn = NEXT_INSN (insn)) insn = scan_one_insn (insn, pass); } --- 1272,1278 ---- if (!optimize) { ! frequency = REG_FREQ_MAX; for (insn = f; insn; insn = NEXT_INSN (insn)) insn = scan_one_insn (insn, pass); } *************** regclass (f, nregs, dump) *** 1204,1213 **** times more than insns outside a loop. This is much more aggressive than the assumptions made elsewhere and is being tried as an experiment. */ ! if (optimize_size) ! loop_cost = 1; ! else ! loop_cost = 1 << (2 * MIN (bb->loop_depth, 5)); for (insn = bb->head; ; insn = NEXT_INSN (insn)) { insn = scan_one_insn (insn, pass); --- 1285,1291 ---- times more than insns outside a loop. This is much more aggressive than the assumptions made elsewhere and is being tried as an experiment. */ ! frequency = REG_FREQ_FROM_BB (bb); for (insn = bb->head; ; insn = NEXT_INSN (insn)) { insn = scan_one_insn (insn, pass); *************** regclass (f, nregs, dump) *** 1231,1242 **** } for (i = FIRST_PSEUDO_REGISTER; i < nregs; i++) { ! register int best_cost = (1 << (HOST_BITS_PER_INT - 2)) - 1; enum reg_class best = ALL_REGS, alt = NO_REGS; /* This is an enum reg_class, but we call it an int to save lots of casts. */ ! register int class; ! register struct costs *p = &costs[i]; /* In non-optimizing compilation REG_N_REFS is not initialized yet. */ --- 1309,1320 ---- } for (i = FIRST_PSEUDO_REGISTER; i < nregs; i++) { ! int best_cost = (1 << (HOST_BITS_PER_INT - 2)) - 1; enum reg_class best = ALL_REGS, alt = NO_REGS; /* This is an enum reg_class, but we call it an int to save lots of casts. */ ! int class; ! struct costs *p = &costs[i]; /* In non-optimizing compilation REG_N_REFS is not initialized yet. */ *************** regclass (f, nregs, dump) *** 1246,1252 **** for (class = (int) ALL_REGS - 1; class > 0; class--) { /* Ignore classes that are too small for this operand or ! invalid for a operand that was auto-incremented. */ if (!contains_reg_of_mode [class][PSEUDO_REGNO_MODE (i)] #ifdef FORBIDDEN_INC_DEC_CLASSES || (in_inc_dec[i] && forbidden_inc_dec_class[class]) --- 1324,1330 ---- for (class = (int) ALL_REGS - 1; class > 0; class--) { /* Ignore classes that are too small for this operand or ! invalid for an operand that was auto-incremented. */ if (!contains_reg_of_mode [class][PSEUDO_REGNO_MODE (i)] #ifdef FORBIDDEN_INC_DEC_CLASSES || (in_inc_dec[i] && forbidden_inc_dec_class[class]) *************** regclass (f, nregs, dump) *** 1263,1269 **** best = (enum reg_class) class; } else if (p->cost[class] == best_cost) ! best = reg_class_subunion[(int)best][class]; } /* Record the alternate register class; i.e., a class for which --- 1341,1347 ---- best = (enum reg_class) class; } else if (p->cost[class] == best_cost) ! best = reg_class_subunion[(int) best][class]; } /* Record the alternate register class; i.e., a class for which *************** record_reg_classes (n_alts, n_ops, ops, *** 1531,1537 **** address, ie BASE_REG_CLASS. */ classes[i] = reg_class_subunion[(int) classes[i]] ! [(int) BASE_REG_CLASS]; break; case 'm': case 'o': case 'V': --- 1609,1615 ---- address, ie BASE_REG_CLASS. */ classes[i] = reg_class_subunion[(int) classes[i]] ! [(int) MODE_BASE_REG_CLASS (VOIDmode)]; break; case 'm': case 'o': case 'V': *************** record_address_regs (x, class, scale) *** 1890,1896 **** enum reg_class class; int scale; { ! register enum rtx_code code = GET_CODE (x); switch (code) { --- 1968,1974 ---- enum reg_class class; int scale; { ! enum rtx_code code = GET_CODE (x); switch (code) { *************** record_address_regs (x, class, scale) *** 1918,1925 **** { rtx arg0 = XEXP (x, 0); rtx arg1 = XEXP (x, 1); ! register enum rtx_code code0 = GET_CODE (arg0); ! register enum rtx_code code1 = GET_CODE (arg1); /* Look inside subregs. */ if (code0 == SUBREG) --- 1996,2003 ---- { rtx arg0 = XEXP (x, 0); rtx arg1 = XEXP (x, 1); ! enum rtx_code code0 = GET_CODE (arg0); ! enum rtx_code code1 = GET_CODE (arg1); /* Look inside subregs. */ if (code0 == SUBREG) *************** record_address_regs (x, class, scale) *** 1938,1944 **** as well as in the tests below, that all addresses are in canonical form. */ ! else if (INDEX_REG_CLASS == BASE_REG_CLASS) { record_address_regs (arg0, class, scale); if (! CONSTANT_P (arg1)) --- 2016,2022 ---- as well as in the tests below, that all addresses are in canonical form. */ ! else if (INDEX_REG_CLASS == MODE_BASE_REG_CLASS (VOIDmode)) { record_address_regs (arg0, class, scale); if (! CONSTANT_P (arg1)) *************** record_address_regs (x, class, scale) *** 1967,1980 **** && (REG_OK_FOR_BASE_P (arg0) || REG_OK_FOR_INDEX_P (arg0))) record_address_regs (arg1, REG_OK_FOR_BASE_P (arg0) ! ? INDEX_REG_CLASS : BASE_REG_CLASS, scale); else if (code0 == REG && code1 == REG && REGNO (arg1) < FIRST_PSEUDO_REGISTER && (REG_OK_FOR_BASE_P (arg1) || REG_OK_FOR_INDEX_P (arg1))) record_address_regs (arg0, REG_OK_FOR_BASE_P (arg1) ! ? INDEX_REG_CLASS : BASE_REG_CLASS, scale); #endif --- 2045,2058 ---- && (REG_OK_FOR_BASE_P (arg0) || REG_OK_FOR_INDEX_P (arg0))) record_address_regs (arg1, REG_OK_FOR_BASE_P (arg0) ! ? INDEX_REG_CLASS : MODE_BASE_REG_CLASS (VOIDmode), scale); else if (code0 == REG && code1 == REG && REGNO (arg1) < FIRST_PSEUDO_REGISTER && (REG_OK_FOR_BASE_P (arg1) || REG_OK_FOR_INDEX_P (arg1))) record_address_regs (arg0, REG_OK_FOR_BASE_P (arg1) ! ? INDEX_REG_CLASS : MODE_BASE_REG_CLASS (VOIDmode), scale); #endif *************** record_address_regs (x, class, scale) *** 1985,1998 **** else if ((code0 == REG && REG_POINTER (arg0)) || code1 == MULT) { ! record_address_regs (arg0, BASE_REG_CLASS, scale); record_address_regs (arg1, INDEX_REG_CLASS, scale); } else if ((code1 == REG && REG_POINTER (arg1)) || code0 == MULT) { record_address_regs (arg0, INDEX_REG_CLASS, scale); ! record_address_regs (arg1, BASE_REG_CLASS, scale); } /* Otherwise, count equal chances that each might be a base --- 2063,2076 ---- else if ((code0 == REG && REG_POINTER (arg0)) || code1 == MULT) { ! record_address_regs (arg0, MODE_BASE_REG_CLASS (VOIDmode), scale); record_address_regs (arg1, INDEX_REG_CLASS, scale); } else if ((code1 == REG && REG_POINTER (arg1)) || code0 == MULT) { record_address_regs (arg0, INDEX_REG_CLASS, scale); ! record_address_regs (arg1, MODE_BASE_REG_CLASS (VOIDmode), scale); } /* Otherwise, count equal chances that each might be a base *************** record_address_regs (x, class, scale) *** 2000,2008 **** else { ! record_address_regs (arg0, BASE_REG_CLASS, scale / 2); record_address_regs (arg0, INDEX_REG_CLASS, scale / 2); ! record_address_regs (arg1, BASE_REG_CLASS, scale / 2); record_address_regs (arg1, INDEX_REG_CLASS, scale / 2); } } --- 2078,2088 ---- else { ! record_address_regs (arg0, MODE_BASE_REG_CLASS (VOIDmode), ! scale / 2); record_address_regs (arg0, INDEX_REG_CLASS, scale / 2); ! record_address_regs (arg1, MODE_BASE_REG_CLASS (VOIDmode), ! scale / 2); record_address_regs (arg1, INDEX_REG_CLASS, scale / 2); } } *************** record_address_regs (x, class, scale) *** 2013,2019 **** if it ends up in the wrong place. */ case POST_MODIFY: case PRE_MODIFY: ! record_address_regs (XEXP (x, 0), BASE_REG_CLASS, 2 * scale); if (REG_P (XEXP (XEXP (x, 1), 1))) record_address_regs (XEXP (XEXP (x, 1), 1), INDEX_REG_CLASS, 2 * scale); --- 2093,2100 ---- if it ends up in the wrong place. */ case POST_MODIFY: case PRE_MODIFY: ! record_address_regs (XEXP (x, 0), MODE_BASE_REG_CLASS (VOIDmode), ! 2 * scale); if (REG_P (XEXP (XEXP (x, 1), 1))) record_address_regs (XEXP (XEXP (x, 1), 1), INDEX_REG_CLASS, 2 * scale); *************** record_address_regs (x, class, scale) *** 2039,2046 **** case REG: { ! register struct costs *pp = &costs[REGNO (x)]; ! register int i; pp->mem_cost += (MEMORY_MOVE_COST (Pmode, class, 1) * scale) / 2; --- 2120,2127 ---- case REG: { ! struct costs *pp = &costs[REGNO (x)]; ! int i; pp->mem_cost += (MEMORY_MOVE_COST (Pmode, class, 1) * scale) / 2; *************** record_address_regs (x, class, scale) *** 2051,2058 **** default: { ! register const char *fmt = GET_RTX_FORMAT (code); ! register int i; for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) if (fmt[i] == 'e') record_address_regs (XEXP (x, i), class, scale); --- 2132,2139 ---- default: { ! const char *fmt = GET_RTX_FORMAT (code); ! int i; for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) if (fmt[i] == 'e') record_address_regs (XEXP (x, i), class, scale); *************** allocate_reg_info (num_regs, new_p, renu *** 2133,2140 **** if (new_p) /* if we're zapping everything, no need to realloc */ { ! free ((char *)renumber); ! free ((char *)reg_pref); renumber = (short *) xmalloc (size_renumber); reg_pref_buffer = (struct reg_pref *) xmalloc (regno_allocated * sizeof (struct reg_pref)); --- 2214,2221 ---- if (new_p) /* if we're zapping everything, no need to realloc */ { ! free ((char *) renumber); ! free ((char *) reg_pref); renumber = (short *) xmalloc (size_renumber); reg_pref_buffer = (struct reg_pref *) xmalloc (regno_allocated * sizeof (struct reg_pref)); *************** allocate_reg_info (num_regs, new_p, renu *** 2142,2149 **** else { ! renumber = (short *) xrealloc ((char *)renumber, size_renumber); ! reg_pref_buffer = (struct reg_pref *) xrealloc ((char *)reg_pref_buffer, regno_allocated * sizeof (struct reg_pref)); } --- 2223,2230 ---- else { ! renumber = (short *) xrealloc ((char *) renumber, size_renumber); ! reg_pref_buffer = (struct reg_pref *) xrealloc ((char *) reg_pref_buffer, regno_allocated * sizeof (struct reg_pref)); } *************** free_reg_info () *** 2220,2232 **** for (reg_data = reg_info_head; reg_data; reg_data = reg_next) { reg_next = reg_data->next; ! free ((char *)reg_data); } free (reg_pref_buffer); ! reg_pref_buffer = (struct reg_pref *)0; ! reg_info_head = (struct reg_info_data *)0; ! renumber = (short *)0; } regno_allocated = 0; reg_n_max = 0; --- 2301,2313 ---- for (reg_data = reg_info_head; reg_data; reg_data = reg_next) { reg_next = reg_data->next; ! free ((char *) reg_data); } free (reg_pref_buffer); ! reg_pref_buffer = (struct reg_pref *) 0; ! reg_info_head = (struct reg_info_data *) 0; ! renumber = (short *) 0; } regno_allocated = 0; reg_n_max = 0; *************** reg_scan (f, nregs, repeat) *** 2260,2266 **** unsigned int nregs; int repeat ATTRIBUTE_UNUSED; { ! register rtx insn; allocate_reg_info (nregs, TRUE, FALSE); max_parallel = 3; --- 2341,2347 ---- unsigned int nregs; int repeat ATTRIBUTE_UNUSED; { ! rtx insn; allocate_reg_info (nregs, TRUE, FALSE); max_parallel = 3; *************** reg_scan_update (first, last, old_max_re *** 2294,2300 **** rtx last; unsigned int old_max_regno; { ! register rtx insn; allocate_reg_info (max_reg_num (), FALSE, FALSE); --- 2375,2381 ---- rtx last; unsigned int old_max_regno; { ! rtx insn; allocate_reg_info (max_reg_num (), FALSE, FALSE); *************** reg_scan_mark_refs (x, insn, note_flag, *** 2325,2333 **** int note_flag; unsigned int min_regno; { ! register enum rtx_code code; ! register rtx dest; ! register rtx note; code = GET_CODE (x); switch (code) --- 2406,2414 ---- int note_flag; unsigned int min_regno; { ! enum rtx_code code; ! rtx dest; ! rtx note; code = GET_CODE (x); switch (code) *************** reg_scan_mark_refs (x, insn, note_flag, *** 2335,2340 **** --- 2416,2422 ---- case CONST: case CONST_INT: case CONST_DOUBLE: + case CONST_VECTOR: case CC0: case PC: case SYMBOL_REF: *************** reg_scan_mark_refs (x, insn, note_flag, *** 2385,2391 **** if (GET_CODE (dest) == REG && REGNO (dest) >= min_regno) ! REG_N_SETS (REGNO (dest))++; /* If this is setting a pseudo from another pseudo or the sum of a pseudo and a constant integer and the other pseudo is known to be --- 2467,2476 ---- if (GET_CODE (dest) == REG && REGNO (dest) >= min_regno) ! { ! REG_N_SETS (REGNO (dest))++; ! REG_N_REFS (REGNO (dest))++; ! } /* If this is setting a pseudo from another pseudo or the sum of a pseudo and a constant integer and the other pseudo is known to be *************** reg_scan_mark_refs (x, insn, note_flag, *** 2435,2453 **** || GET_CODE (XEXP (note, 0)) == LABEL_REF)))) REG_POINTER (SET_DEST (x)) = 1; /* ... fall through ... */ default: { ! register const char *fmt = GET_RTX_FORMAT (code); ! register int i; for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) { if (fmt[i] == 'e') reg_scan_mark_refs (XEXP (x, i), insn, note_flag, min_regno); else if (fmt[i] == 'E' && XVEC (x, i) != 0) { ! register int j; for (j = XVECLEN (x, i) - 1; j >= 0; j--) reg_scan_mark_refs (XVECEXP (x, i, j), insn, note_flag, min_regno); } --- 2520,2556 ---- || GET_CODE (XEXP (note, 0)) == LABEL_REF)))) REG_POINTER (SET_DEST (x)) = 1; + /* If this is setting a register from a register or from a simple + conversion of a register, propagate REG_DECL. */ + if (GET_CODE (dest) == REG) + { + rtx src = SET_SRC (x); + + while (GET_CODE (src) == SIGN_EXTEND + || GET_CODE (src) == ZERO_EXTEND + || GET_CODE (src) == TRUNCATE + || (GET_CODE (src) == SUBREG && subreg_lowpart_p (src))) + src = XEXP (src, 0); + + if (GET_CODE (src) == REG && REGNO_DECL (REGNO (src)) == 0) + REGNO_DECL (REGNO (src)) = REGNO_DECL (REGNO (dest)); + else if (GET_CODE (src) == REG && REGNO_DECL (REGNO (dest)) == 0) + REGNO_DECL (REGNO (dest)) = REGNO_DECL (REGNO (src)); + } + /* ... fall through ... */ default: { ! const char *fmt = GET_RTX_FORMAT (code); ! int i; for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) { if (fmt[i] == 'e') reg_scan_mark_refs (XEXP (x, i), insn, note_flag, min_regno); else if (fmt[i] == 'E' && XVEC (x, i) != 0) { ! int j; for (j = XVECLEN (x, i) - 1; j >= 0; j--) reg_scan_mark_refs (XVECEXP (x, i, j), insn, note_flag, min_regno); } *************** reg_scan_mark_refs (x, insn, note_flag, *** 2461,2476 **** int reg_class_subset_p (c1, c2) ! register enum reg_class c1; ! register enum reg_class c2; { if (c1 == c2) return 1; if (c2 == ALL_REGS) win: return 1; ! GO_IF_HARD_REG_SUBSET (reg_class_contents[(int)c1], ! reg_class_contents[(int)c2], win); return 0; } --- 2564,2579 ---- int reg_class_subset_p (c1, c2) ! enum reg_class c1; ! enum reg_class c2; { if (c1 == c2) return 1; if (c2 == ALL_REGS) win: return 1; ! GO_IF_HARD_REG_SUBSET (reg_class_contents[(int) c1], ! reg_class_contents[(int) c2], win); return 0; } *************** reg_class_subset_p (c1, c2) *** 2479,2486 **** int reg_classes_intersect_p (c1, c2) ! register enum reg_class c1; ! register enum reg_class c2; { #ifdef HARD_REG_SET register --- 2582,2589 ---- int reg_classes_intersect_p (c1, c2) ! enum reg_class c1; ! enum reg_class c2; { #ifdef HARD_REG_SET register diff -Nrc3pad gcc-3.0.4/gcc/regmove.c gcc-3.1/gcc/regmove.c *** gcc-3.0.4/gcc/regmove.c Mon Nov 5 19:10:33 2001 --- gcc-3.1/gcc/regmove.c Sun Mar 31 03:32:41 2002 *************** *** 1,23 **** /* Move registers around to reduce number of move instructions needed. Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* This module looks for cases where matching constraints would force --- 1,23 ---- /* Move registers around to reduce number of move instructions needed. Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* This module looks for cases where matching constraints would force *************** Boston, MA 02111-1307, USA. */ *** 40,45 **** --- 40,46 ---- #include "basic-block.h" #include "except.h" #include "toplev.h" + #include "reload.h" /* Turn STACK_GROWS_DOWNWARD into a boolean. */ *************** static int perhaps_ends_bb_p PARAMS ((rt *** 54,60 **** static int optimize_reg_copy_1 PARAMS ((rtx, rtx, rtx)); static void optimize_reg_copy_2 PARAMS ((rtx, rtx, rtx)); static void optimize_reg_copy_3 PARAMS ((rtx, rtx, rtx)); - static rtx gen_add3_insn PARAMS ((rtx, rtx, rtx)); static void copy_src_to_dest PARAMS ((rtx, rtx, rtx, int)); static int *regmove_bb_head; --- 55,60 ---- *************** static void flags_set_1 PARAMS ((rtx, rt *** 71,77 **** static int try_auto_increment PARAMS ((rtx, rtx, rtx, rtx, HOST_WIDE_INT, int)); static int find_matches PARAMS ((rtx, struct match *)); ! static void replace_in_call_usage PARAMS ((rtx *, int, rtx, rtx)); static int fixup_match_1 PARAMS ((rtx, rtx, rtx, rtx, rtx, int, int, int, FILE *)) ; static int reg_is_remote_constant_p PARAMS ((rtx, rtx, rtx)); --- 71,77 ---- static int try_auto_increment PARAMS ((rtx, rtx, rtx, rtx, HOST_WIDE_INT, int)); static int find_matches PARAMS ((rtx, struct match *)); ! static void replace_in_call_usage PARAMS ((rtx *, unsigned int, rtx, rtx)); static int fixup_match_1 PARAMS ((rtx, rtx, rtx, rtx, rtx, int, int, int, FILE *)) ; static int reg_is_remote_constant_p PARAMS ((rtx, rtx, rtx)); *************** regclass_compatible_p (class0, class1) *** 93,119 **** && ! CLASS_LIKELY_SPILLED_P (class1))); } - /* Generate and return an insn body to add r1 and c, - storing the result in r0. */ - static rtx - gen_add3_insn (r0, r1, c) - rtx r0, r1, c; - { - int icode = (int) add_optab->handlers[(int) GET_MODE (r0)].insn_code; - - if (icode == CODE_FOR_nothing - || ! ((*insn_data[icode].operand[0].predicate) - (r0, insn_data[icode].operand[0].mode)) - || ! ((*insn_data[icode].operand[1].predicate) - (r1, insn_data[icode].operand[1].mode)) - || ! ((*insn_data[icode].operand[2].predicate) - (c, insn_data[icode].operand[2].mode))) - return NULL_RTX; - - return (GEN_FCN (icode) (r0, r1, c)); - } - - /* INC_INSN is an instruction that adds INCREMENT to REG. Try to fold INC_INSN as a post/pre in/decrement into INSN. Iff INC_INSN_SET is nonzero, inc_insn has a destination different from src. --- 93,98 ---- *************** try_auto_increment (insn, inc_insn, inc_ *** 132,138 **** /* Can't use the size of SET_SRC, we might have something like (sign_extend:SI (mem:QI ... */ rtx use = find_use_as_address (pset, reg, 0); ! if (use != 0 && use != (rtx) 1) { int size = GET_MODE_SIZE (GET_MODE (use)); if (0 --- 111,117 ---- /* Can't use the size of SET_SRC, we might have something like (sign_extend:SI (mem:QI ... */ rtx use = find_use_as_address (pset, reg, 0); ! if (use != 0 && use != (rtx) (size_t) 1) { int size = GET_MODE_SIZE (GET_MODE (use)); if (0 *************** try_auto_increment (insn, inc_insn, inc_ *** 169,179 **** = gen_rtx_EXPR_LIST (REG_INC, reg, REG_NOTES (insn)); if (! inc_insn_set) ! { ! PUT_CODE (inc_insn, NOTE); ! NOTE_LINE_NUMBER (inc_insn) = NOTE_INSN_DELETED; ! NOTE_SOURCE_FILE (inc_insn) = 0; ! } return 1; } } --- 148,154 ---- = gen_rtx_EXPR_LIST (REG_INC, reg, REG_NOTES (insn)); if (! inc_insn_set) ! delete_insn (inc_insn); return 1; } } *************** mark_flags_life_zones (flags) *** 264,270 **** { enum machine_mode mode = (flags ? HImode : VOIDmode); rtx insn; ! for (insn = get_insns(); insn; insn = NEXT_INSN (insn)) PUT_MODE (insn, mode); return; } --- 239,245 ---- { enum machine_mode mode = (flags ? HImode : VOIDmode); rtx insn; ! for (insn = get_insns (); insn; insn = NEXT_INSN (insn)) PUT_MODE (insn, mode); return; } *************** static int *regno_src_regno; *** 359,365 **** a candidate for tying to a hard register, since the output might in turn be a candidate to be tied to a different hard register. */ static int ! replacement_quality(reg) rtx reg; { int src_regno; --- 334,340 ---- a candidate for tying to a hard register, since the output might in turn be a candidate to be tied to a different hard register. */ static int ! replacement_quality (reg) rtx reg; { int src_regno; *************** optimize_reg_copy_1 (insn, dest, src) *** 436,442 **** int sregno = REGNO (src); int dregno = REGNO (dest); ! /* We don't want to mess with hard regs if register classes are small. */ if (sregno == dregno || (SMALL_REGISTER_CLASSES && (sregno < FIRST_PSEUDO_REGISTER --- 411,417 ---- int sregno = REGNO (src); int dregno = REGNO (dest); ! /* We don't want to mess with hard regs if register classes are small. */ if (sregno == dregno || (SMALL_REGISTER_CLASSES && (sregno < FIRST_PSEUDO_REGISTER *************** optimize_reg_copy_3 (insn, dest, src) *** 730,736 **** /* Now walk forward making additional replacements. We want to be able to undo all the changes if a later substitution fails. */ ! subreg = gen_rtx_SUBREG (old_mode, src_reg, 0); while (p = NEXT_INSN (p), p != insn) { if (! INSN_P (p)) --- 705,711 ---- /* Now walk forward making additional replacements. We want to be able to undo all the changes if a later substitution fails. */ ! subreg = gen_lowpart_SUBREG (old_mode, src_reg); while (p = NEXT_INSN (p), p != insn) { if (! INSN_P (p)) *************** reg_is_remote_constant_p (reg, insn, fir *** 888,894 **** rtx insn; rtx first; { ! register rtx p; if (REG_N_SETS (REGNO (reg)) != 1) return 0; --- 863,869 ---- rtx insn; rtx first; { ! rtx p; if (REG_N_SETS (REGNO (reg)) != 1) return 0; *************** regmove_optimize (f, nregs, regmove_dump *** 1129,1140 **** && (GET_CODE (SET_SRC (set)) == SIGN_EXTEND || GET_CODE (SET_SRC (set)) == ZERO_EXTEND) && GET_CODE (XEXP (SET_SRC (set), 0)) == REG ! && GET_CODE (SET_DEST(set)) == REG) optimize_reg_copy_3 (insn, SET_DEST (set), SET_SRC (set)); if (flag_expensive_optimizations && ! pass && GET_CODE (SET_SRC (set)) == REG ! && GET_CODE (SET_DEST(set)) == REG) { /* If this is a register-register copy where SRC is not dead, see if we can optimize it. If this optimization succeeds, --- 1104,1115 ---- && (GET_CODE (SET_SRC (set)) == SIGN_EXTEND || GET_CODE (SET_SRC (set)) == ZERO_EXTEND) && GET_CODE (XEXP (SET_SRC (set), 0)) == REG ! && GET_CODE (SET_DEST (set)) == REG) optimize_reg_copy_3 (insn, SET_DEST (set), SET_SRC (set)); if (flag_expensive_optimizations && ! pass && GET_CODE (SET_SRC (set)) == REG ! && GET_CODE (SET_DEST (set)) == REG) { /* If this is a register-register copy where SRC is not dead, see if we can optimize it. If this optimization succeeds, *************** regmove_optimize (f, nregs, regmove_dump *** 1149,1155 **** if (regno_src_regno[REGNO (SET_DEST (set))] < 0 && SET_SRC (set) != SET_DEST (set)) { ! int srcregno = REGNO (SET_SRC(set)); if (regno_src_regno[srcregno] >= 0) srcregno = regno_src_regno[srcregno]; regno_src_regno[REGNO (SET_DEST (set))] = srcregno; --- 1124,1130 ---- if (regno_src_regno[REGNO (SET_DEST (set))] < 0 && SET_SRC (set) != SET_DEST (set)) { ! int srcregno = REGNO (SET_SRC (set)); if (regno_src_regno[srcregno] >= 0) srcregno = regno_src_regno[srcregno]; regno_src_regno[REGNO (SET_DEST (set))] = srcregno; *************** regmove_optimize (f, nregs, regmove_dump *** 1193,1199 **** { src_subreg = gen_rtx_SUBREG (GET_MODE (SUBREG_REG (dst)), ! src, SUBREG_WORD (dst)); dst = SUBREG_REG (dst); } if (GET_CODE (dst) != REG --- 1168,1174 ---- { src_subreg = gen_rtx_SUBREG (GET_MODE (SUBREG_REG (dst)), ! src, SUBREG_BYTE (dst)); dst = SUBREG_REG (dst); } if (GET_CODE (dst) != REG *************** regmove_optimize (f, nregs, regmove_dump *** 1224,1230 **** if (recog_data.operand[match_no] != SET_DEST (set)) continue; ! /* If the operands already match, then there is nothing to do. */ if (operands_match_p (src, dst)) continue; --- 1199,1205 ---- if (recog_data.operand[match_no] != SET_DEST (set)) continue; ! /* If the operands already match, then there is nothing to do. */ if (operands_match_p (src, dst)) continue; *************** regmove_optimize (f, nregs, regmove_dump *** 1303,1309 **** || RTX_UNCHANGING_P (dst)) continue; ! /* If the operands already match, then there is nothing to do. */ if (operands_match_p (src, dst)) continue; --- 1278,1284 ---- || RTX_UNCHANGING_P (dst)) continue; ! /* If the operands already match, then there is nothing to do. */ if (operands_match_p (src, dst)) continue; *************** regmove_optimize (f, nregs, regmove_dump *** 1353,1371 **** } src_class = reg_preferred_class (REGNO (src)); dst_class = reg_preferred_class (REGNO (dst)); ! if (! regclass_compatible_p (src_class, dst_class)) { ! if (!copy_src) ! { ! copy_src = src; ! copy_dst = dst; ! } continue; } ! /* Can not modify an earlier insn to set dst if this insn ! uses an old value in the source. */ ! if (reg_overlap_mentioned_p (dst, SET_SRC (set))) { if (!copy_src) { --- 1328,1349 ---- } src_class = reg_preferred_class (REGNO (src)); dst_class = reg_preferred_class (REGNO (dst)); ! ! if (! (src_note = find_reg_note (insn, REG_DEAD, src))) { ! /* We used to force the copy here like in other cases, but ! it produces worse code, as it eliminates no copy ! instructions and the copy emitted will be produced by ! reload anyway. On patterns with multiple alternatives, ! there may be better sollution availble. ! ! In particular this change produced slower code for numeric ! i387 programs. */ ! continue; } ! if (! regclass_compatible_p (src_class, dst_class)) { if (!copy_src) { *************** regmove_optimize (f, nregs, regmove_dump *** 1375,1381 **** continue; } ! if (! (src_note = find_reg_note (insn, REG_DEAD, src))) { if (!copy_src) { --- 1353,1361 ---- continue; } ! /* Can not modify an earlier insn to set dst if this insn ! uses an old value in the source. */ ! if (reg_overlap_mentioned_p (dst, SET_SRC (set))) { if (!copy_src) { *************** regmove_optimize (f, nregs, regmove_dump *** 1385,1391 **** continue; } - /* If src is set once in a different basic block, and is set equal to a constant, then do not use it for this optimization, as this would make it --- 1365,1370 ---- *************** find_matches (insn, matchp) *** 1601,1621 **** matchp->commutative[op_no] = op_no + 1; matchp->commutative[op_no + 1] = op_no; break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': ! c -= '0'; ! if (c < op_no && likely_spilled[(unsigned char) c]) ! break; ! matchp->with[op_no] = c; ! any_matches = 1; ! if (matchp->commutative[op_no] >= 0) ! matchp->with[matchp->commutative[op_no]] = c; break; case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'h': case 'j': case 'k': case 'l': case 'p': case 'q': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case 'A': case 'B': case 'C': case 'D': case 'W': case 'Y': case 'Z': ! if (CLASS_LIKELY_SPILLED_P (REG_CLASS_FROM_LETTER ((unsigned char)c))) likely_spilled[op_no] = 1; break; } --- 1580,1609 ---- matchp->commutative[op_no] = op_no + 1; matchp->commutative[op_no + 1] = op_no; break; + case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': ! { ! char *end; ! unsigned long match_ul = strtoul (p - 1, &end, 10); ! int match = match_ul; ! ! p = end; ! ! if (match < op_no && likely_spilled[match]) ! break; ! matchp->with[op_no] = match; ! any_matches = 1; ! if (matchp->commutative[op_no] >= 0) ! matchp->with[matchp->commutative[op_no]] = match; ! } break; + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'h': case 'j': case 'k': case 'l': case 'p': case 'q': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case 'A': case 'B': case 'C': case 'D': case 'W': case 'Y': case 'Z': ! if (CLASS_LIKELY_SPILLED_P (REG_CLASS_FROM_LETTER ((unsigned char) c))) likely_spilled[op_no] = 1; break; } *************** find_matches (insn, matchp) *** 1629,1635 **** static void replace_in_call_usage (loc, dst_reg, src, insn) rtx *loc; ! int dst_reg; rtx src; rtx insn; { --- 1617,1623 ---- static void replace_in_call_usage (loc, dst_reg, src, insn) rtx *loc; ! unsigned int dst_reg; rtx src; rtx insn; { *************** fixup_match_1 (insn, set, src, src_subre *** 1916,1924 **** rtx notes = REG_NOTES (insn); emit_insn_after_with_line_notes (pat, PREV_INSN (p), insn); ! PUT_CODE (insn, NOTE); ! NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED; ! NOTE_SOURCE_FILE (insn) = 0; /* emit_insn_after_with_line_notes has no return value, so search for the new insn. */ insn = p; --- 1904,1910 ---- rtx notes = REG_NOTES (insn); emit_insn_after_with_line_notes (pat, PREV_INSN (p), insn); ! delete_insn (insn); /* emit_insn_after_with_line_notes has no return value, so search for the new insn. */ insn = p; *************** fixup_match_1 (insn, set, src, src_subre *** 1940,1946 **** if (note && CONSTANT_P (XEXP (note, 0))) { ! for (q = PREV_INSN (insn); q; q = PREV_INSN(q)) { /* ??? We can't scan past the end of a basic block without updating the register lifetime info --- 1926,1932 ---- if (note && CONSTANT_P (XEXP (note, 0))) { ! for (q = PREV_INSN (insn); q; q = PREV_INSN (q)) { /* ??? We can't scan past the end of a basic block without updating the register lifetime info *************** fixup_match_1 (insn, set, src, src_subre *** 1970,1978 **** if (q && set2 && SET_DEST (set2) == src && CONSTANT_P (SET_SRC (set2)) && validate_change (insn, &SET_SRC (set), XEXP (note, 0), 0)) { ! PUT_CODE (q, NOTE); ! NOTE_LINE_NUMBER (q) = NOTE_INSN_DELETED; ! NOTE_SOURCE_FILE (q) = 0; REG_N_SETS (REGNO (src))--; REG_N_CALLS_CROSSED (REGNO (src)) -= num_calls2; REG_LIVE_LENGTH (REGNO (src)) -= s_length2; --- 1956,1962 ---- if (q && set2 && SET_DEST (set2) == src && CONSTANT_P (SET_SRC (set2)) && validate_change (insn, &SET_SRC (set), XEXP (note, 0), 0)) { ! delete_insn (q); REG_N_SETS (REGNO (src))--; REG_N_CALLS_CROSSED (REGNO (src)) -= num_calls2; REG_LIVE_LENGTH (REGNO (src)) -= s_length2; *************** fixup_match_1 (insn, set, src, src_subre *** 2006,2012 **** { /* ??? We can't scan past the end of a basic block without updating the register lifetime info ! (REG_DEAD/basic_block_live_at_start). */ if (perhaps_ends_bb_p (q)) break; else if (! INSN_P (q)) --- 1990,1996 ---- { /* ??? We can't scan past the end of a basic block without updating the register lifetime info ! (REG_DEAD/basic_block_live_at_start). */ if (perhaps_ends_bb_p (q)) break; else if (! INSN_P (q)) *************** stable_and_no_regs_but_for_p (x, src, ds *** 2108,2114 **** } /* Track stack adjustments and stack memory references. Attempt to ! reduce the number of stack adjustments by back-propogating across the memory references. This is intended primarily for use with targets that do not define --- 2092,2098 ---- } /* Track stack adjustments and stack memory references. Attempt to ! reduce the number of stack adjustments by back-propagating across the memory references. This is intended primarily for use with targets that do not define *************** stable_and_no_regs_but_for_p (x, src, ds *** 2118,2124 **** (e.g. x86 fp regs) which would ordinarily have to be implemented as a sub/mov pair due to restrictions in calls.c. ! Propogation stops when any of the insns that need adjusting are (a) no longer valid because we've exceeded their range, (b) a non-trivial push instruction, or (c) a call instruction. --- 2102,2108 ---- (e.g. x86 fp regs) which would ordinarily have to be implemented as a sub/mov pair due to restrictions in calls.c. ! Propagation stops when any of the insns that need adjusting are (a) no longer valid because we've exceeded their range, (b) a non-trivial push instruction, or (c) a call instruction. *************** try_apply_stack_adjustment (insn, memlis *** 2270,2283 **** validate_change (insn, &XEXP (SET_SRC (set), 1), GEN_INT (new_adjust), 1); for (ml = memlist; ml ; ml = ml->next) ! { ! HOST_WIDE_INT c = ml->sp_offset - delta; ! rtx new = gen_rtx_MEM (GET_MODE (*ml->mem), ! plus_constant (stack_pointer_rtx, c)); ! ! MEM_COPY_ATTRIBUTES (new, *ml->mem); ! validate_change (ml->insn, ml->mem, new, 1); ! } if (apply_change_group ()) { --- 2254,2264 ---- validate_change (insn, &XEXP (SET_SRC (set), 1), GEN_INT (new_adjust), 1); for (ml = memlist; ml ; ml = ml->next) ! validate_change ! (ml->insn, ml->mem, ! replace_equiv_address_nv (*ml->mem, ! plus_constant (stack_pointer_rtx, ! ml->sp_offset - delta)), 1); if (apply_change_group ()) { *************** record_stack_memrefs (xp, data) *** 2315,2321 **** if (!reg_mentioned_p (stack_pointer_rtx, x)) return -1; /* We are not able to handle correctly all possible memrefs containing ! stack pointer, so this check is neccesary. */ if (stack_memref_p (x)) { d->memlist = record_one_stack_memref (d->insn, xp, d->memlist); --- 2296,2302 ---- if (!reg_mentioned_p (stack_pointer_rtx, x)) return -1; /* We are not able to handle correctly all possible memrefs containing ! stack pointer, so this check is necessary. */ if (stack_memref_p (x)) { d->memlist = record_one_stack_memref (d->insn, xp, d->memlist); *************** combine_stack_adjustments_for_block (bb) *** 2350,2368 **** HOST_WIDE_INT last_sp_adjust = 0; rtx last_sp_set = NULL_RTX; struct csa_memlist *memlist = NULL; ! rtx pending_delete; ! rtx insn, next; struct record_stack_memrefs_data data; ! for (insn = bb->head; ; insn = next) { ! rtx set; ! ! pending_delete = NULL_RTX; next = NEXT_INSN (insn); if (! INSN_P (insn)) ! goto processed; set = single_set_for_csa (insn); if (set) --- 2331,2347 ---- HOST_WIDE_INT last_sp_adjust = 0; rtx last_sp_set = NULL_RTX; struct csa_memlist *memlist = NULL; ! rtx insn, next, set; struct record_stack_memrefs_data data; + bool end_of_block = false; ! for (insn = bb->head; !end_of_block ; insn = next) { ! end_of_block = insn == bb->end; next = NEXT_INSN (insn); if (! INSN_P (insn)) ! continue; set = single_set_for_csa (insn); if (set) *************** combine_stack_adjustments_for_block (bb) *** 2384,2390 **** { last_sp_set = insn; last_sp_adjust = this_adjust; ! goto processed; } /* If not all recorded memrefs can be adjusted, or the --- 2363,2369 ---- { last_sp_set = insn; last_sp_adjust = this_adjust; ! continue; } /* If not all recorded memrefs can be adjusted, or the *************** combine_stack_adjustments_for_block (bb) *** 2397,2403 **** or a deallocation into the second insn. We can not combine an allocation followed by a deallocation. ! The only somewhat frequent ocurrence of the later is when a function allocates a stack frame but does not use it. For this case, we would need to analyze rtl stream to be sure that allocated area is really unused. This means not --- 2376,2382 ---- or a deallocation into the second insn. We can not combine an allocation followed by a deallocation. ! The only somewhat frequent occurrence of the later is when a function allocates a stack frame but does not use it. For this case, we would need to analyze rtl stream to be sure that allocated area is really unused. This means not *************** combine_stack_adjustments_for_block (bb) *** 2416,2424 **** this_adjust)) { /* It worked! */ ! pending_delete = insn; last_sp_adjust += this_adjust; ! goto processed; } } --- 2395,2403 ---- this_adjust)) { /* It worked! */ ! delete_insn (insn); last_sp_adjust += this_adjust; ! continue; } } *************** combine_stack_adjustments_for_block (bb) *** 2432,2452 **** -last_sp_adjust)) { /* It worked! */ ! flow_delete_insn (last_sp_set); last_sp_set = insn; last_sp_adjust += this_adjust; free_csa_memlist (memlist); memlist = NULL; ! goto processed; } } ! /* Combination failed. Restart processing from here. */ free_csa_memlist (memlist); memlist = NULL; last_sp_set = insn; last_sp_adjust = this_adjust; ! goto processed; } /* Find a predecrement of exactly the previous adjustment and --- 2411,2435 ---- -last_sp_adjust)) { /* It worked! */ ! delete_insn (last_sp_set); last_sp_set = insn; last_sp_adjust += this_adjust; free_csa_memlist (memlist); memlist = NULL; ! continue; } } ! /* Combination failed. Restart processing from here. If ! deallocation+allocation conspired to cancel, we can ! delete the old deallocation insn. */ ! if (last_sp_set && last_sp_adjust == 0) ! delete_insn (insn); free_csa_memlist (memlist); memlist = NULL; last_sp_set = insn; last_sp_adjust = this_adjust; ! continue; } /* Find a predecrement of exactly the previous adjustment and *************** combine_stack_adjustments_for_block (bb) *** 2468,2485 **** && ! reg_mentioned_p (stack_pointer_rtx, src) && memory_address_p (GET_MODE (dest), stack_pointer_rtx) && validate_change (insn, &SET_DEST (set), ! change_address (dest, VOIDmode, ! stack_pointer_rtx), 0)) { ! if (last_sp_set == bb->head) ! bb->head = NEXT_INSN (last_sp_set); ! flow_delete_insn (last_sp_set); ! free_csa_memlist (memlist); memlist = NULL; last_sp_set = NULL_RTX; last_sp_adjust = 0; ! goto processed; } } --- 2451,2466 ---- && ! reg_mentioned_p (stack_pointer_rtx, src) && memory_address_p (GET_MODE (dest), stack_pointer_rtx) && validate_change (insn, &SET_DEST (set), ! replace_equiv_address (dest, ! stack_pointer_rtx), ! 0)) { ! delete_insn (last_sp_set); free_csa_memlist (memlist); memlist = NULL; last_sp_set = NULL_RTX; last_sp_adjust = 0; ! continue; } } *************** combine_stack_adjustments_for_block (bb) *** 2489,2495 **** && !for_each_rtx (&PATTERN (insn), record_stack_memrefs, &data)) { memlist = data.memlist; ! goto processed; } memlist = data.memlist; --- 2470,2476 ---- && !for_each_rtx (&PATTERN (insn), record_stack_memrefs, &data)) { memlist = data.memlist; ! continue; } memlist = data.memlist; *************** combine_stack_adjustments_for_block (bb) *** 2499,2521 **** && (GET_CODE (insn) == CALL_INSN || reg_mentioned_p (stack_pointer_rtx, PATTERN (insn)))) { free_csa_memlist (memlist); memlist = NULL; last_sp_set = NULL_RTX; last_sp_adjust = 0; } - - processed: - if (insn == bb->end) - break; - - if (pending_delete) - flow_delete_insn (pending_delete); } ! if (pending_delete) ! { ! bb->end = PREV_INSN (pending_delete); ! flow_delete_insn (pending_delete); ! } } --- 2480,2494 ---- && (GET_CODE (insn) == CALL_INSN || reg_mentioned_p (stack_pointer_rtx, PATTERN (insn)))) { + if (last_sp_set && last_sp_adjust == 0) + delete_insn (last_sp_set); free_csa_memlist (memlist); memlist = NULL; last_sp_set = NULL_RTX; last_sp_adjust = 0; } } ! if (last_sp_set && last_sp_adjust == 0) ! delete_insn (last_sp_set); } diff -Nrc3pad gcc-3.0.4/gcc/regrename.c gcc-3.1/gcc/regrename.c *** gcc-3.0.4/gcc/regrename.c Sat Sep 29 21:51:19 2001 --- gcc-3.1/gcc/regrename.c Mon Mar 25 12:48:25 2002 *************** *** 1,22 **** /* Register renaming for the GNU compiler. ! Copyright (C) 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #define REG_OK_STRICT --- 1,22 ---- /* Register renaming for the GNU compiler. ! Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it ! under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ! ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public ! License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #define REG_OK_STRICT *************** *** 33,38 **** --- 33,39 ---- #include "function.h" #include "recog.h" #include "flags.h" + #include "toplev.h" #include "obstack.h" #define obstack_chunk_alloc xmalloc *************** regrename_optimize () *** 324,330 **** /* See whether it accepts all modes that occur in definition and uses. */ for (tmp = this; tmp; tmp = tmp->next_use) ! if (! HARD_REGNO_MODE_OK (new_reg, GET_MODE (*tmp->loc))) break; if (! tmp) { --- 325,336 ---- /* See whether it accepts all modes that occur in definition and uses. */ for (tmp = this; tmp; tmp = tmp->next_use) ! if (! HARD_REGNO_MODE_OK (new_reg, GET_MODE (*tmp->loc)) ! || (tmp->need_caller_save_reg ! && ! (HARD_REGNO_CALL_PART_CLOBBERED ! (reg, GET_MODE (*tmp->loc))) ! && (HARD_REGNO_CALL_PART_CLOBBERED ! (new_reg, GET_MODE (*tmp->loc))))) break; if (! tmp) { *************** scan_rtx_address (insn, loc, class, acti *** 610,616 **** if (locI) scan_rtx_address (insn, locI, INDEX_REG_CLASS, action, mode); if (locB) ! scan_rtx_address (insn, locB, BASE_REG_CLASS, action, mode); return; } --- 616,622 ---- if (locI) scan_rtx_address (insn, locI, INDEX_REG_CLASS, action, mode); if (locB) ! scan_rtx_address (insn, locB, MODE_BASE_REG_CLASS (mode), action, mode); return; } *************** scan_rtx_address (insn, loc, class, acti *** 628,634 **** break; case MEM: ! scan_rtx_address (insn, &XEXP (x, 0), BASE_REG_CLASS, action, GET_MODE (x)); return; --- 634,641 ---- break; case MEM: ! scan_rtx_address (insn, &XEXP (x, 0), ! MODE_BASE_REG_CLASS (GET_MODE (x)), action, GET_MODE (x)); return; *************** scan_rtx (insn, loc, class, action, type *** 671,676 **** --- 678,684 ---- case CONST: case CONST_INT: case CONST_DOUBLE: + case CONST_VECTOR: case SYMBOL_REF: case LABEL_REF: case CC0: *************** scan_rtx (insn, loc, class, action, type *** 682,688 **** return; case MEM: ! scan_rtx_address (insn, &XEXP (x, 0), BASE_REG_CLASS, action, GET_MODE (x)); return; --- 690,697 ---- return; case MEM: ! scan_rtx_address (insn, &XEXP (x, 0), ! MODE_BASE_REG_CLASS (GET_MODE (x)), action, GET_MODE (x)); return; *************** build_def_use (bb) *** 755,761 **** rtx note; rtx old_operands[MAX_RECOG_OPERANDS]; rtx old_dups[MAX_DUP_OPERANDS]; ! int i; int alt; int predicated; --- 764,770 ---- rtx note; rtx old_operands[MAX_RECOG_OPERANDS]; rtx old_dups[MAX_DUP_OPERANDS]; ! int i, icode; int alt; int predicated; *************** build_def_use (bb) *** 775,780 **** --- 784,790 ---- (6) For any write we find in an operand, make a new chain. (7) For any REG_UNUSED, close any chains we just opened. */ + icode = recog_memoized (insn); extract_insn (insn); constrain_operands (1); preprocess_constraints (); *************** build_def_use (bb) *** 818,825 **** --- 828,843 ---- } for (i = 0; i < recog_data.n_dups; i++) { + int dup_num = recog_data.dup_num[i]; + old_dups[i] = *recog_data.dup_loc[i]; *recog_data.dup_loc[i] = cc0_rtx; + + /* For match_dup of match_operator or match_parallel, share + them, so that we don't miss changes in the dup. */ + if (icode >= 0 + && insn_data[icode].operand[dup_num].eliminable == 0) + old_dups[i] = recog_data.operand[dup_num]; } scan_rtx (insn, &PATTERN (insn), NO_REGS, terminate_all_read, *************** build_def_use (bb) *** 835,840 **** --- 853,873 ---- scan_rtx (insn, &CALL_INSN_FUNCTION_USAGE (insn), NO_REGS, terminate_all_read, OP_IN, 0); + /* Step 2C: Can't rename asm operands that were originally + hard registers. */ + if (asm_noperands (PATTERN (insn)) > 0) + for (i = 0; i < n_ops; i++) + { + rtx *loc = recog_data.operand_loc[i]; + rtx op = *loc; + + if (GET_CODE (op) == REG + && REGNO (op) == ORIGINAL_REGNO (op) + && (recog_data.operand_type[i] == OP_IN + || recog_data.operand_type[i] == OP_INOUT)) + scan_rtx (insn, loc, NO_REGS, terminate_all_read, OP_IN, 0); + } + /* Step 3: Append to chains for reads inside operands. */ for (i = 0; i < n_ops + recog_data.n_dups; i++) { *************** build_def_use (bb) *** 906,913 **** /* Step 6: Begin new chains for writes inside operands. */ /* ??? Many targets have output constraints on the SET_DEST of a call insn, which is stupid, since these are certainly ! ABI defined hard registers. Don't change calls at all. */ ! if (GET_CODE (insn) != CALL_INSN) for (i = 0; i < n_ops + recog_data.n_dups; i++) { int opn = i < n_ops ? i : recog_data.dup_num[i - n_ops]; --- 939,965 ---- /* Step 6: Begin new chains for writes inside operands. */ /* ??? Many targets have output constraints on the SET_DEST of a call insn, which is stupid, since these are certainly ! ABI defined hard registers. Don't change calls at all. ! Similarly take special care for asm statement that originally ! referenced hard registers. */ ! if (asm_noperands (PATTERN (insn)) > 0) ! { ! for (i = 0; i < n_ops; i++) ! if (recog_data.operand_type[i] == OP_OUT) ! { ! rtx *loc = recog_data.operand_loc[i]; ! rtx op = *loc; ! enum reg_class class = recog_op_alt[i][alt].class; ! ! if (GET_CODE (op) == REG ! && REGNO (op) == ORIGINAL_REGNO (op)) ! continue; ! ! scan_rtx (insn, loc, class, mark_write, OP_OUT, ! recog_op_alt[i][alt].earlyclobber); ! } ! } ! else if (GET_CODE (insn) != CALL_INSN) for (i = 0; i < n_ops + recog_data.n_dups; i++) { int opn = i < n_ops ? i : recog_data.dup_num[i - n_ops]; *************** dump_def_use_chain (chains) *** 960,962 **** --- 1012,1876 ---- chains = chains->next_chain; } } + + /* The following code does forward propagation of hard register copies. + The object is to eliminate as many dependencies as possible, so that + we have the most scheduling freedom. As a side effect, we also clean + up some silly register allocation decisions made by reload. This + code may be obsoleted by a new register allocator. */ + + /* For each register, we have a list of registers that contain the same + value. The OLDEST_REGNO field points to the head of the list, and + the NEXT_REGNO field runs through the list. The MODE field indicates + what mode the data is known to be in; this field is VOIDmode when the + register is not known to contain valid data. */ + + struct value_data_entry + { + enum machine_mode mode; + unsigned int oldest_regno; + unsigned int next_regno; + }; + + struct value_data + { + struct value_data_entry e[FIRST_PSEUDO_REGISTER]; + unsigned int max_value_regs; + }; + + static void kill_value_regno PARAMS ((unsigned, struct value_data *)); + static void kill_value PARAMS ((rtx, struct value_data *)); + static void set_value_regno PARAMS ((unsigned, enum machine_mode, + struct value_data *)); + static void init_value_data PARAMS ((struct value_data *)); + static void kill_clobbered_value PARAMS ((rtx, rtx, void *)); + static void kill_set_value PARAMS ((rtx, rtx, void *)); + static int kill_autoinc_value PARAMS ((rtx *, void *)); + static void copy_value PARAMS ((rtx, rtx, struct value_data *)); + static bool mode_change_ok PARAMS ((enum machine_mode, enum machine_mode, + unsigned int)); + static rtx find_oldest_value_reg PARAMS ((enum reg_class, rtx, + struct value_data *)); + static bool replace_oldest_value_reg PARAMS ((rtx *, enum reg_class, rtx, + struct value_data *)); + static bool replace_oldest_value_addr PARAMS ((rtx *, enum reg_class, + enum machine_mode, rtx, + struct value_data *)); + static bool replace_oldest_value_mem PARAMS ((rtx, rtx, struct value_data *)); + static bool copyprop_hardreg_forward_1 PARAMS ((basic_block, + struct value_data *)); + extern void debug_value_data PARAMS ((struct value_data *)); + #ifdef ENABLE_CHECKING + static void validate_value_data PARAMS ((struct value_data *)); + #endif + + /* Kill register REGNO. This involves removing it from any value lists, + and resetting the value mode to VOIDmode. */ + + static void + kill_value_regno (regno, vd) + unsigned int regno; + struct value_data *vd; + { + unsigned int i, next; + + if (vd->e[regno].oldest_regno != regno) + { + for (i = vd->e[regno].oldest_regno; + vd->e[i].next_regno != regno; + i = vd->e[i].next_regno) + continue; + vd->e[i].next_regno = vd->e[regno].next_regno; + } + else if ((next = vd->e[regno].next_regno) != INVALID_REGNUM) + { + for (i = next; i != INVALID_REGNUM; i = vd->e[i].next_regno) + vd->e[i].oldest_regno = next; + } + + vd->e[regno].mode = VOIDmode; + vd->e[regno].oldest_regno = regno; + vd->e[regno].next_regno = INVALID_REGNUM; + + #ifdef ENABLE_CHECKING + validate_value_data (vd); + #endif + } + + /* Kill X. This is a convenience function for kill_value_regno + so that we mind the mode the register is in. */ + + static void + kill_value (x, vd) + rtx x; + struct value_data *vd; + { + /* SUBREGS are supposed to have been eliminated by now. But some + ports, e.g. i386 sse, use them to smuggle vector type information + through to instruction selection. Each such SUBREG should simplify, + so if we get a NULL we've done something wrong elsewhere. */ + + if (GET_CODE (x) == SUBREG) + x = simplify_subreg (GET_MODE (x), SUBREG_REG (x), + GET_MODE (SUBREG_REG (x)), SUBREG_BYTE (x)); + if (REG_P (x)) + { + unsigned int regno = REGNO (x); + unsigned int n = HARD_REGNO_NREGS (regno, GET_MODE (x)); + unsigned int i, j; + + /* Kill the value we're told to kill. */ + for (i = 0; i < n; ++i) + kill_value_regno (regno + i, vd); + + /* Kill everything that overlapped what we're told to kill. */ + if (regno < vd->max_value_regs) + j = 0; + else + j = regno - vd->max_value_regs; + for (; j < regno; ++j) + { + if (vd->e[j].mode == VOIDmode) + continue; + n = HARD_REGNO_NREGS (j, vd->e[j].mode); + if (j + n > regno) + for (i = 0; i < n; ++i) + kill_value_regno (j + i, vd); + } + } + } + + /* Remember that REGNO is valid in MODE. */ + + static void + set_value_regno (regno, mode, vd) + unsigned int regno; + enum machine_mode mode; + struct value_data *vd; + { + unsigned int nregs; + + vd->e[regno].mode = mode; + + nregs = HARD_REGNO_NREGS (regno, mode); + if (nregs > vd->max_value_regs) + vd->max_value_regs = nregs; + } + + /* Initialize VD such that there are no known relationships between regs. */ + + static void + init_value_data (vd) + struct value_data *vd; + { + int i; + for (i = 0; i < FIRST_PSEUDO_REGISTER; ++i) + { + vd->e[i].mode = VOIDmode; + vd->e[i].oldest_regno = i; + vd->e[i].next_regno = INVALID_REGNUM; + } + vd->max_value_regs = 0; + } + + /* Called through note_stores. If X is clobbered, kill its value. */ + + static void + kill_clobbered_value (x, set, data) + rtx x; + rtx set; + void *data; + { + struct value_data *vd = data; + if (GET_CODE (set) == CLOBBER) + kill_value (x, vd); + } + + /* Called through note_stores. If X is set, not clobbered, kill its + current value and install it as the root of its own value list. */ + + static void + kill_set_value (x, set, data) + rtx x; + rtx set; + void *data; + { + struct value_data *vd = data; + if (GET_CODE (set) != CLOBBER) + { + kill_value (x, vd); + if (REG_P (x)) + set_value_regno (REGNO (x), GET_MODE (x), vd); + } + } + + /* Called through for_each_rtx. Kill any register used as the base of an + auto-increment expression, and install that register as the root of its + own value list. */ + + static int + kill_autoinc_value (px, data) + rtx *px; + void *data; + { + rtx x = *px; + struct value_data *vd = data; + + if (GET_RTX_CLASS (GET_CODE (x)) == 'a') + { + x = XEXP (x, 0); + kill_value (x, vd); + set_value_regno (REGNO (x), Pmode, vd); + return -1; + } + + return 0; + } + + /* Assert that SRC has been copied to DEST. Adjust the data structures + to reflect that SRC contains an older copy of the shared value. */ + + static void + copy_value (dest, src, vd) + rtx dest; + rtx src; + struct value_data *vd; + { + unsigned int dr = REGNO (dest); + unsigned int sr = REGNO (src); + unsigned int dn, sn; + unsigned int i; + + /* ??? At present, it's possible to see noop sets. It'd be nice if + this were cleaned up beforehand... */ + if (sr == dr) + return; + + /* Do not propagate copies to the stack pointer, as that can leave + memory accesses with no scheduling dependancy on the stack update. */ + if (dr == STACK_POINTER_REGNUM) + return; + + /* Likewise with the frame pointer, if we're using one. */ + if (frame_pointer_needed && dr == HARD_FRAME_POINTER_REGNUM) + return; + + /* If SRC and DEST overlap, don't record anything. */ + dn = HARD_REGNO_NREGS (dr, GET_MODE (dest)); + sn = HARD_REGNO_NREGS (sr, GET_MODE (dest)); + if ((dr > sr && dr < sr + sn) + || (sr > dr && sr < dr + dn)) + return; + + /* If SRC had no assigned mode (i.e. we didn't know it was live) + assign it now and assume the value came from an input argument + or somesuch. */ + if (vd->e[sr].mode == VOIDmode) + set_value_regno (sr, vd->e[dr].mode, vd); + + /* If SRC had been assigned a mode narrower than the copy, we can't + link DEST into the chain, because not all of the pieces of the + copy came from oldest_regno. */ + else if (sn > (unsigned int) HARD_REGNO_NREGS (sr, vd->e[sr].mode)) + return; + + /* Link DR at the end of the value chain used by SR. */ + + vd->e[dr].oldest_regno = vd->e[sr].oldest_regno; + + for (i = sr; vd->e[i].next_regno != INVALID_REGNUM; i = vd->e[i].next_regno) + continue; + vd->e[i].next_regno = dr; + + #ifdef ENABLE_CHECKING + validate_value_data (vd); + #endif + } + + /* Return true if a mode change from ORIG to NEW is allowed for REGNO. */ + + static bool + mode_change_ok (orig_mode, new_mode, regno) + enum machine_mode orig_mode, new_mode; + unsigned int regno ATTRIBUTE_UNUSED; + { + if (GET_MODE_SIZE (orig_mode) < GET_MODE_SIZE (new_mode)) + return false; + + #ifdef CLASS_CANNOT_CHANGE_MODE + if (TEST_HARD_REG_BIT (reg_class_contents[CLASS_CANNOT_CHANGE_MODE], regno) + && CLASS_CANNOT_CHANGE_MODE_P (orig_mode, new_mode)) + return false; + #endif + + return true; + } + + /* Find the oldest copy of the value contained in REGNO that is in + register class CLASS and has mode MODE. If found, return an rtx + of that oldest register, otherwise return NULL. */ + + static rtx + find_oldest_value_reg (class, reg, vd) + enum reg_class class; + rtx reg; + struct value_data *vd; + { + unsigned int regno = REGNO (reg); + enum machine_mode mode = GET_MODE (reg); + unsigned int i; + + /* If we are accessing REG in some mode other that what we set it in, + make sure that the replacement is valid. In particular, consider + (set (reg:DI r11) (...)) + (set (reg:SI r9) (reg:SI r11)) + (set (reg:SI r10) (...)) + (set (...) (reg:DI r9)) + Replacing r9 with r11 is invalid. */ + if (mode != vd->e[regno].mode) + { + if (HARD_REGNO_NREGS (regno, mode) + > HARD_REGNO_NREGS (regno, vd->e[regno].mode)) + return NULL_RTX; + } + + for (i = vd->e[regno].oldest_regno; i != regno; i = vd->e[i].next_regno) + if (TEST_HARD_REG_BIT (reg_class_contents[class], i) + && (vd->e[i].mode == mode + || mode_change_ok (vd->e[i].mode, mode, i))) + { + rtx new = gen_rtx_raw_REG (mode, i); + ORIGINAL_REGNO (new) = ORIGINAL_REGNO (reg); + return new; + } + + return NULL_RTX; + } + + /* If possible, replace the register at *LOC with the oldest register + in register class CLASS. Return true if successfully replaced. */ + + static bool + replace_oldest_value_reg (loc, class, insn, vd) + rtx *loc; + enum reg_class class; + rtx insn; + struct value_data *vd; + { + rtx new = find_oldest_value_reg (class, *loc, vd); + if (new) + { + if (rtl_dump_file) + fprintf (rtl_dump_file, "insn %u: replaced reg %u with %u\n", + INSN_UID (insn), REGNO (*loc), REGNO (new)); + + *loc = new; + return true; + } + return false; + } + + /* Similar to replace_oldest_value_reg, but *LOC contains an address. + Adapted from find_reloads_address_1. CLASS is INDEX_REG_CLASS or + BASE_REG_CLASS depending on how the register is being considered. */ + + static bool + replace_oldest_value_addr (loc, class, mode, insn, vd) + rtx *loc; + enum reg_class class; + enum machine_mode mode; + rtx insn; + struct value_data *vd; + { + rtx x = *loc; + RTX_CODE code = GET_CODE (x); + const char *fmt; + int i, j; + bool changed = false; + + switch (code) + { + case PLUS: + { + rtx orig_op0 = XEXP (x, 0); + rtx orig_op1 = XEXP (x, 1); + RTX_CODE code0 = GET_CODE (orig_op0); + RTX_CODE code1 = GET_CODE (orig_op1); + rtx op0 = orig_op0; + rtx op1 = orig_op1; + rtx *locI = NULL; + rtx *locB = NULL; + + if (GET_CODE (op0) == SUBREG) + { + op0 = SUBREG_REG (op0); + code0 = GET_CODE (op0); + } + + if (GET_CODE (op1) == SUBREG) + { + op1 = SUBREG_REG (op1); + code1 = GET_CODE (op1); + } + + if (code0 == MULT || code0 == SIGN_EXTEND || code0 == TRUNCATE + || code0 == ZERO_EXTEND || code1 == MEM) + { + locI = &XEXP (x, 0); + locB = &XEXP (x, 1); + } + else if (code1 == MULT || code1 == SIGN_EXTEND || code1 == TRUNCATE + || code1 == ZERO_EXTEND || code0 == MEM) + { + locI = &XEXP (x, 1); + locB = &XEXP (x, 0); + } + else if (code0 == CONST_INT || code0 == CONST + || code0 == SYMBOL_REF || code0 == LABEL_REF) + locB = &XEXP (x, 1); + else if (code1 == CONST_INT || code1 == CONST + || code1 == SYMBOL_REF || code1 == LABEL_REF) + locB = &XEXP (x, 0); + else if (code0 == REG && code1 == REG) + { + int index_op; + + if (REG_OK_FOR_INDEX_P (op0) + && REG_MODE_OK_FOR_BASE_P (op1, mode)) + index_op = 0; + else if (REG_OK_FOR_INDEX_P (op1) + && REG_MODE_OK_FOR_BASE_P (op0, mode)) + index_op = 1; + else if (REG_MODE_OK_FOR_BASE_P (op1, mode)) + index_op = 0; + else if (REG_MODE_OK_FOR_BASE_P (op0, mode)) + index_op = 1; + else if (REG_OK_FOR_INDEX_P (op1)) + index_op = 1; + else + index_op = 0; + + locI = &XEXP (x, index_op); + locB = &XEXP (x, !index_op); + } + else if (code0 == REG) + { + locI = &XEXP (x, 0); + locB = &XEXP (x, 1); + } + else if (code1 == REG) + { + locI = &XEXP (x, 1); + locB = &XEXP (x, 0); + } + + if (locI) + changed |= replace_oldest_value_addr (locI, INDEX_REG_CLASS, mode, + insn, vd); + if (locB) + changed |= replace_oldest_value_addr (locB, + MODE_BASE_REG_CLASS (mode), + mode, insn, vd); + return changed; + } + + case POST_INC: + case POST_DEC: + case POST_MODIFY: + case PRE_INC: + case PRE_DEC: + case PRE_MODIFY: + return false; + + case MEM: + return replace_oldest_value_mem (x, insn, vd); + + case REG: + return replace_oldest_value_reg (loc, class, insn, vd); + + default: + break; + } + + fmt = GET_RTX_FORMAT (code); + for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) + { + if (fmt[i] == 'e') + changed |= replace_oldest_value_addr (&XEXP (x, i), class, mode, + insn, vd); + else if (fmt[i] == 'E') + for (j = XVECLEN (x, i) - 1; j >= 0; j--) + changed |= replace_oldest_value_addr (&XVECEXP (x, i, j), class, + mode, insn, vd); + } + + return changed; + } + + /* Similar to replace_oldest_value_reg, but X contains a memory. */ + + static bool + replace_oldest_value_mem (x, insn, vd) + rtx x; + rtx insn; + struct value_data *vd; + { + return replace_oldest_value_addr (&XEXP (x, 0), + MODE_BASE_REG_CLASS (GET_MODE (x)), + GET_MODE (x), insn, vd); + } + + /* Perform the forward copy propagation on basic block BB. */ + + static bool + copyprop_hardreg_forward_1 (bb, vd) + basic_block bb; + struct value_data *vd; + { + bool changed = false; + rtx insn; + + for (insn = bb->head; ; insn = NEXT_INSN (insn)) + { + int n_ops, i, alt, predicated; + bool is_asm; + rtx set; + + if (! INSN_P (insn)) + { + if (insn == bb->end) + break; + else + continue; + } + + set = single_set (insn); + extract_insn (insn); + constrain_operands (1); + preprocess_constraints (); + alt = which_alternative; + n_ops = recog_data.n_operands; + is_asm = asm_noperands (PATTERN (insn)) >= 0; + + /* Simplify the code below by rewriting things to reflect + matching constraints. Also promote OP_OUT to OP_INOUT + in predicated instructions. */ + + predicated = GET_CODE (PATTERN (insn)) == COND_EXEC; + for (i = 0; i < n_ops; ++i) + { + int matches = recog_op_alt[i][alt].matches; + if (matches >= 0) + recog_op_alt[i][alt].class = recog_op_alt[matches][alt].class; + if (matches >= 0 || recog_op_alt[i][alt].matched >= 0 + || (predicated && recog_data.operand_type[i] == OP_OUT)) + recog_data.operand_type[i] = OP_INOUT; + } + + /* For each earlyclobber operand, zap the value data. */ + for (i = 0; i < n_ops; i++) + if (recog_op_alt[i][alt].earlyclobber) + kill_value (recog_data.operand[i], vd); + + /* Within asms, a clobber cannot overlap inputs or outputs. + I wouldn't think this were true for regular insns, but + scan_rtx treats them like that... */ + note_stores (PATTERN (insn), kill_clobbered_value, vd); + + /* Kill all auto-incremented values. */ + /* ??? REG_INC is useless, since stack pushes aren't done that way. */ + for_each_rtx (&PATTERN (insn), kill_autoinc_value, vd); + + /* Kill all early-clobbered operands. */ + for (i = 0; i < n_ops; i++) + if (recog_op_alt[i][alt].earlyclobber) + kill_value (recog_data.operand[i], vd); + + /* Special-case plain move instructions, since we may well + be able to do the move from a different register class. */ + if (set && REG_P (SET_SRC (set))) + { + rtx src = SET_SRC (set); + unsigned int regno = REGNO (src); + enum machine_mode mode = GET_MODE (src); + unsigned int i; + rtx new; + + /* If we are accessing SRC in some mode other that what we + set it in, make sure that the replacement is valid. */ + if (mode != vd->e[regno].mode) + { + if (HARD_REGNO_NREGS (regno, mode) + > HARD_REGNO_NREGS (regno, vd->e[regno].mode)) + goto no_move_special_case; + } + + /* If the destination is also a register, try to find a source + register in the same class. */ + if (REG_P (SET_DEST (set))) + { + new = find_oldest_value_reg (REGNO_REG_CLASS (regno), src, vd); + if (new && validate_change (insn, &SET_SRC (set), new, 0)) + { + if (rtl_dump_file) + fprintf (rtl_dump_file, + "insn %u: replaced reg %u with %u\n", + INSN_UID (insn), regno, REGNO (new)); + changed = true; + goto did_replacement; + } + } + + /* Otherwise, try all valid registers and see if its valid. */ + for (i = vd->e[regno].oldest_regno; i != regno; + i = vd->e[i].next_regno) + if (vd->e[i].mode == mode + || mode_change_ok (vd->e[i].mode, mode, i)) + { + new = gen_rtx_raw_REG (mode, i); + if (validate_change (insn, &SET_SRC (set), new, 0)) + { + ORIGINAL_REGNO (new) = ORIGINAL_REGNO (src); + if (rtl_dump_file) + fprintf (rtl_dump_file, + "insn %u: replaced reg %u with %u\n", + INSN_UID (insn), regno, REGNO (new)); + changed = true; + goto did_replacement; + } + } + } + no_move_special_case: + + /* For each input operand, replace a hard register with the + eldest live copy that's in an appropriate register class. */ + for (i = 0; i < n_ops; i++) + { + bool replaced = false; + + /* Don't scan match_operand here, since we've no reg class + information to pass down. Any operands that we could + substitute in will be represented elsewhere. */ + if (recog_data.constraints[i][0] == '\0') + continue; + + /* Don't replace in asms intentionally referencing hard regs. */ + if (is_asm && GET_CODE (recog_data.operand[i]) == REG + && (REGNO (recog_data.operand[i]) + == ORIGINAL_REGNO (recog_data.operand[i]))) + continue; + + if (recog_data.operand_type[i] == OP_IN) + { + if (recog_op_alt[i][alt].is_address) + replaced + = replace_oldest_value_addr (recog_data.operand_loc[i], + recog_op_alt[i][alt].class, + VOIDmode, insn, vd); + else if (REG_P (recog_data.operand[i])) + replaced + = replace_oldest_value_reg (recog_data.operand_loc[i], + recog_op_alt[i][alt].class, + insn, vd); + else if (GET_CODE (recog_data.operand[i]) == MEM) + replaced = replace_oldest_value_mem (recog_data.operand[i], + insn, vd); + } + else if (GET_CODE (recog_data.operand[i]) == MEM) + replaced = replace_oldest_value_mem (recog_data.operand[i], + insn, vd); + + /* If we performed any replacement, update match_dups. */ + if (replaced) + { + int j; + rtx new; + + changed = true; + + new = *recog_data.operand_loc[i]; + recog_data.operand[i] = new; + for (j = 0; j < recog_data.n_dups; j++) + if (recog_data.dup_num[j] == i) + *recog_data.dup_loc[j] = new; + } + } + + did_replacement: + /* Clobber call-clobbered registers. */ + if (GET_CODE (insn) == CALL_INSN) + for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) + if (TEST_HARD_REG_BIT (regs_invalidated_by_call, i)) + kill_value_regno (i, vd); + + /* Notice stores. */ + note_stores (PATTERN (insn), kill_set_value, vd); + + /* Notice copies. */ + if (set && REG_P (SET_DEST (set)) && REG_P (SET_SRC (set))) + copy_value (SET_DEST (set), SET_SRC (set), vd); + + if (insn == bb->end) + break; + } + + return changed; + } + + /* Main entry point for the forward copy propagation optimization. */ + + void + copyprop_hardreg_forward () + { + struct value_data *all_vd; + bool need_refresh; + int b; + + need_refresh = false; + + all_vd = xmalloc (sizeof (struct value_data) * n_basic_blocks); + + for (b = 0; b < n_basic_blocks; b++) + { + basic_block bb = BASIC_BLOCK (b); + + /* If a block has a single predecessor, that we've already + processed, begin with the value data that was live at + the end of the predecessor block. */ + /* ??? Ought to use more intelligent queueing of blocks. */ + if (bb->pred + && ! bb->pred->pred_next + && ! (bb->pred->flags & (EDGE_ABNORMAL_CALL | EDGE_EH)) + && bb->pred->src->index != ENTRY_BLOCK + && bb->pred->src->index < b) + all_vd[b] = all_vd[bb->pred->src->index]; + else + init_value_data (all_vd + b); + + if (copyprop_hardreg_forward_1 (bb, all_vd + b)) + need_refresh = true; + } + + if (need_refresh) + { + if (rtl_dump_file) + fputs ("\n\n", rtl_dump_file); + + /* ??? Irritatingly, delete_noop_moves does not take a set of blocks + to scan, so we have to do a life update with no initial set of + blocks Just In Case. */ + delete_noop_moves (get_insns ()); + update_life_info (NULL, UPDATE_LIFE_GLOBAL_RM_NOTES, + PROP_DEATH_NOTES + | PROP_SCAN_DEAD_CODE + | PROP_KILL_DEAD_CODE); + } + + free (all_vd); + } + + /* Dump the value chain data to stderr. */ + + void + debug_value_data (vd) + struct value_data *vd; + { + HARD_REG_SET set; + unsigned int i, j; + + CLEAR_HARD_REG_SET (set); + + for (i = 0; i < FIRST_PSEUDO_REGISTER; ++i) + if (vd->e[i].oldest_regno == i) + { + if (vd->e[i].mode == VOIDmode) + { + if (vd->e[i].next_regno != INVALID_REGNUM) + fprintf (stderr, "[%u] Bad next_regno for empty chain (%u)\n", + i, vd->e[i].next_regno); + continue; + } + + SET_HARD_REG_BIT (set, i); + fprintf (stderr, "[%u %s] ", i, GET_MODE_NAME (vd->e[i].mode)); + + for (j = vd->e[i].next_regno; + j != INVALID_REGNUM; + j = vd->e[j].next_regno) + { + if (TEST_HARD_REG_BIT (set, j)) + { + fprintf (stderr, "[%u] Loop in regno chain\n", j); + return; + } + + if (vd->e[j].oldest_regno != i) + { + fprintf (stderr, "[%u] Bad oldest_regno (%u)\n", + j, vd->e[j].oldest_regno); + return; + } + SET_HARD_REG_BIT (set, j); + fprintf (stderr, "[%u %s] ", j, GET_MODE_NAME (vd->e[j].mode)); + } + fputc ('\n', stderr); + } + + for (i = 0; i < FIRST_PSEUDO_REGISTER; ++i) + if (! TEST_HARD_REG_BIT (set, i) + && (vd->e[i].mode != VOIDmode + || vd->e[i].oldest_regno != i + || vd->e[i].next_regno != INVALID_REGNUM)) + fprintf (stderr, "[%u] Non-empty reg in chain (%s %u %i)\n", + i, GET_MODE_NAME (vd->e[i].mode), vd->e[i].oldest_regno, + vd->e[i].next_regno); + } + + #ifdef ENABLE_CHECKING + static void + validate_value_data (vd) + struct value_data *vd; + { + HARD_REG_SET set; + unsigned int i, j; + + CLEAR_HARD_REG_SET (set); + + for (i = 0; i < FIRST_PSEUDO_REGISTER; ++i) + if (vd->e[i].oldest_regno == i) + { + if (vd->e[i].mode == VOIDmode) + { + if (vd->e[i].next_regno != INVALID_REGNUM) + internal_error ("validate_value_data: [%u] Bad next_regno for empty chain (%u)", + i, vd->e[i].next_regno); + continue; + } + + SET_HARD_REG_BIT (set, i); + + for (j = vd->e[i].next_regno; + j != INVALID_REGNUM; + j = vd->e[j].next_regno) + { + if (TEST_HARD_REG_BIT (set, j)) + internal_error ("validate_value_data: Loop in regno chain (%u)", + j); + if (vd->e[j].oldest_regno != i) + internal_error ("validate_value_data: [%u] Bad oldest_regno (%u)", + j, vd->e[j].oldest_regno); + + SET_HARD_REG_BIT (set, j); + } + } + + for (i = 0; i < FIRST_PSEUDO_REGISTER; ++i) + if (! TEST_HARD_REG_BIT (set, i) + && (vd->e[i].mode != VOIDmode + || vd->e[i].oldest_regno != i + || vd->e[i].next_regno != INVALID_REGNUM)) + internal_error ("validate_value_data: [%u] Non-empty reg in chain (%s %u %i)", + i, GET_MODE_NAME (vd->e[i].mode), vd->e[i].oldest_regno, + vd->e[i].next_regno); + } + #endif diff -Nrc3pad gcc-3.0.4/gcc/regs.h gcc-3.1/gcc/regs.h *** gcc-3.0.4/gcc/regs.h Tue Jun 13 21:47:39 2000 --- gcc-3.1/gcc/regs.h Tue Nov 27 15:32:17 2001 *************** *** 2,35 **** Copyright (C) 1987, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "varray.h" #define REG_BYTES(R) mode_size[(int) GET_MODE (R)] ! /* Get the number of consecutive hard regs required to hold the REG rtx R. ! When something may be an explicit hard reg, REG_SIZE is the only ! valid way to get this value. You cannot get it from the regno. */ ! #define REG_SIZE(R) \ ! ((mode_size[(int) GET_MODE (R)] + UNITS_PER_WORD - 1) / UNITS_PER_WORD) #ifndef SMALL_REGISTER_CLASSES #define SMALL_REGISTER_CLASSES 0 --- 2,37 ---- Copyright (C) 1987, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "varray.h" #define REG_BYTES(R) mode_size[(int) GET_MODE (R)] ! /* When you only have the mode of a pseudo register before it has a hard ! register chosen for it, this reports the size of each hard register ! a pseudo in such a mode would get allocated to. A target may ! override this. */ ! #ifndef REGMODE_NATURAL_SIZE ! #define REGMODE_NATURAL_SIZE(MODE) UNITS_PER_WORD ! #endif #ifndef SMALL_REGISTER_CLASSES #define SMALL_REGISTER_CLASSES 0 *************** typedef struct reg_info_def *** 51,56 **** --- 53,59 ---- /* fields set by flow_analysis */ int refs; /* # of times (REG n) is used or set */ + int freq; /* # estimated frequency (REG n) is used or set */ int deaths; /* # of times (REG n) dies */ int live_length; /* # of instructions (REG n) is live */ int calls_crossed; /* # of calls (REG n) is live across */ *************** typedef struct reg_info_def *** 61,71 **** extern varray_type reg_n_info; ! /* Indexed by n, gives number of times (REG n) is used or set. ! References within loops may be counted more times. */ #define REG_N_REFS(N) (VARRAY_REG (reg_n_info, N)->refs) /* Indexed by n, gives number of times (REG n) is set. ??? both regscan and flow allocate space for this. We should settle on just copy. */ --- 64,95 ---- extern varray_type reg_n_info; ! /* Indexed by n, gives number of times (REG n) is used or set. */ #define REG_N_REFS(N) (VARRAY_REG (reg_n_info, N)->refs) + /* Estimate frequency of references to register N. */ + + #define REG_FREQ(N) (VARRAY_REG (reg_n_info, N)->freq) + + /* The weights for each insn varries from 0 to REG_FREQ_BASE. + This constant does not need to be high, as in infrequently executed + regions we want to count instructions equivalently to optimize for + size instead of speed. */ + #define REG_FREQ_MAX 1000 + + /* Compute register frequency from the BB frequency. When optimizing for size, + or profile driven feedback is available and the function is never executed, + frequency is always equivalent. Otherwise rescale the basic block + frequency. */ + #define REG_FREQ_FROM_BB(bb) (optimize_size \ + || (flag_branch_probabilities \ + && !ENTRY_BLOCK_PTR->count) \ + ? REG_FREQ_MAX \ + : ((bb)->frequency * REG_FREQ_MAX / BB_FREQ_MAX)\ + ? ((bb)->frequency * REG_FREQ_MAX / BB_FREQ_MAX)\ + : 1) + /* Indexed by n, gives number of times (REG n) is set. ??? both regscan and flow allocate space for this. We should settle on just copy. */ *************** extern int caller_save_needed; *** 192,198 **** /* Select a register mode required for caller save of hard regno REGNO. */ #ifndef HARD_REGNO_CALLER_SAVE_MODE ! #define HARD_REGNO_CALLER_SAVE_MODE(REGNO, NREGS) \ choose_hard_reg_mode (REGNO, NREGS) #endif --- 216,222 ---- /* Select a register mode required for caller save of hard regno REGNO. */ #ifndef HARD_REGNO_CALLER_SAVE_MODE ! #define HARD_REGNO_CALLER_SAVE_MODE(REGNO, NREGS, MODE) \ choose_hard_reg_mode (REGNO, NREGS) #endif diff -Nrc3pad gcc-3.0.4/gcc/reload.c gcc-3.1/gcc/reload.c *** gcc-3.0.4/gcc/reload.c Sat Sep 29 21:51:19 2001 --- gcc-3.1/gcc/reload.c Wed May 1 17:26:44 2002 *************** *** 1,23 **** /* Search an insn for pseudo regs that must be in hard regs and are not. Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* This file contains subroutines used only from the file reload1.c. It knows how to scan one insn for operands and values --- 1,23 ---- /* Search an insn for pseudo regs that must be in hard regs and are not. Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* This file contains subroutines used only from the file reload1.c. It knows how to scan one insn for operands and values *************** a register with any other reload. */ *** 91,96 **** --- 91,98 ---- #include "rtl.h" #include "tm_p.h" #include "insn-config.h" + #include "expr.h" + #include "optabs.h" #include "recog.h" #include "reload.h" #include "regs.h" *************** a register with any other reload. */ *** 99,105 **** #include "real.h" #include "output.h" #include "function.h" - #include "expr.h" #include "toplev.h" #ifndef REGISTER_MOVE_COST --- 101,106 ---- *************** static int push_secondary_reload PARAMS *** 241,249 **** #endif static enum reg_class find_valid_class PARAMS ((enum machine_mode, int)); static int reload_inner_reg_of_subreg PARAMS ((rtx, enum machine_mode)); - static int push_reload PARAMS ((rtx, rtx, rtx *, rtx *, enum reg_class, - enum machine_mode, enum machine_mode, - int, int, int, enum reload_type)); static void push_replacement PARAMS ((rtx *, int, enum machine_mode)); static void combine_reloads PARAMS ((void)); static int find_reusable_reload PARAMS ((rtx *, rtx, enum reg_class, --- 242,247 ---- *************** static int find_reloads_address_1 PARAMS *** 268,275 **** static void find_reloads_address_part PARAMS ((rtx, rtx *, enum reg_class, enum machine_mode, int, enum reload_type, int)); ! static rtx find_reloads_subreg_address PARAMS ((rtx, int, int, enum reload_type, ! int, rtx)); static int find_inc_amount PARAMS ((rtx, rtx)); #ifdef HAVE_SECONDARY_RELOADS --- 266,274 ---- static void find_reloads_address_part PARAMS ((rtx, rtx *, enum reg_class, enum machine_mode, int, enum reload_type, int)); ! static rtx find_reloads_subreg_address PARAMS ((rtx, int, int, ! enum reload_type, int, rtx)); ! static void copy_replacements_1 PARAMS ((rtx *, rtx *, int)); static int find_inc_amount PARAMS ((rtx, rtx)); #ifdef HAVE_SECONDARY_RELOADS *************** push_secondary_reload (in_p, x, opnum, o *** 372,388 **** in operand 1. Outputs should have an initial "=", which we must skip. */ ! char insn_letter ! = insn_data[(int) icode].operand[!in_p].constraint[in_p]; ! enum reg_class insn_class ! = (insn_letter == 'r' ? GENERAL_REGS ! : REG_CLASS_FROM_LETTER ((unsigned char) insn_letter)); ! if (insn_class == NO_REGS ! || (in_p && insn_data[(int) icode].operand[!in_p].constraint[0] != '=') ! /* The scratch register's constraint must start with "=&". */ ! || insn_data[(int) icode].operand[2].constraint[0] != '=' || insn_data[(int) icode].operand[2].constraint[1] != '&') abort (); --- 371,397 ---- in operand 1. Outputs should have an initial "=", which we must skip. */ ! enum reg_class insn_class; ! if (insn_data[(int) icode].operand[!in_p].constraint[0] == 0) ! insn_class = ALL_REGS; ! else ! { ! char insn_letter ! = insn_data[(int) icode].operand[!in_p].constraint[in_p]; ! insn_class ! = (insn_letter == 'r' ? GENERAL_REGS ! : REG_CLASS_FROM_LETTER ((unsigned char) insn_letter)); ! ! if (insn_class == NO_REGS) ! abort (); ! if (in_p && insn_data[(int) icode].operand[!in_p].constraint[0] != '=') ! abort (); ! } ! ! /* The scratch register's constraint must start with "=&". */ ! if (insn_data[(int) icode].operand[2].constraint[0] != '=' || insn_data[(int) icode].operand[2].constraint[1] != '&') abort (); *************** get_secondary_mem (x, mode, opnum, type) *** 634,640 **** : type == RELOAD_FOR_OUTPUT ? RELOAD_FOR_OUTPUT_ADDRESS : RELOAD_OTHER); ! find_reloads_address (mode, NULL_PTR, XEXP (loc, 0), &XEXP (loc, 0), opnum, type, 0, 0); } --- 643,649 ---- : type == RELOAD_FOR_OUTPUT ? RELOAD_FOR_OUTPUT_ADDRESS : RELOAD_OTHER); ! find_reloads_address (mode, (rtx*) 0, XEXP (loc, 0), &XEXP (loc, 0), opnum, type, 0, 0); } *************** find_valid_class (m1, n) *** 690,695 **** --- 699,705 ---- combine. P_IN points to the corresponding value of IN, which can be modified by this function. DONT_SHARE is nonzero if we can't share any input-only reload for IN. */ + static int find_reusable_reload (p_in, out, class, type, opnum, dont_share) rtx *p_in, out; *************** reload_inner_reg_of_subreg (x, mode) *** 780,787 **** inner = SUBREG_REG (x); ! /* If INNER is a constant, then INNER must be reloaded. */ ! if (CONSTANT_P (inner)) return 1; /* If INNER is not a hard register, then INNER will not need to --- 790,797 ---- inner = SUBREG_REG (x); ! /* If INNER is a constant or PLUS, then INNER must be reloaded. */ ! if (CONSTANT_P (inner) || GET_CODE (inner) == PLUS) return 1; /* If INNER is not a hard register, then INNER will not need to *************** reload_inner_reg_of_subreg (x, mode) *** 791,797 **** return 0; /* If INNER is not ok for MODE, then INNER will need reloading. */ ! if (! HARD_REGNO_MODE_OK (REGNO (inner) + SUBREG_WORD (x), mode)) return 1; /* If the outer part is a word or smaller, INNER larger than a --- 801,807 ---- return 0; /* If INNER is not ok for MODE, then INNER will need reloading. */ ! if (! HARD_REGNO_MODE_OK (subreg_regno (x), mode)) return 1; /* If the outer part is a word or smaller, INNER larger than a *************** reload_inner_reg_of_subreg (x, mode) *** 836,842 **** the two reload-numbers are equal, but the caller should be careful to distinguish them. */ ! static int push_reload (in, out, inloc, outloc, class, inmode, outmode, strict_low, optional, opnum, type) rtx in, out; --- 846,852 ---- the two reload-numbers are equal, but the caller should be careful to distinguish them. */ ! int push_reload (in, out, inloc, outloc, class, inmode, outmode, strict_low, optional, opnum, type) rtx in, out; *************** push_reload (in, out, inloc, outloc, cla *** 848,854 **** int opnum; enum reload_type type; { ! register int i; int dont_share = 0; int dont_remove_subreg = 0; rtx *in_subreg_loc = 0, *out_subreg_loc = 0; --- 858,864 ---- int opnum; enum reload_type type; { ! int i; int dont_share = 0; int dont_remove_subreg = 0; rtx *in_subreg_loc = 0, *out_subreg_loc = 0; *************** push_reload (in, out, inloc, outloc, cla *** 870,876 **** Often this is done earlier, but not always in find_reloads_address. */ if (in != 0 && GET_CODE (in) == REG) { ! register int regno = REGNO (in); if (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0 && reg_equiv_constant[regno] != 0) --- 880,886 ---- Often this is done earlier, but not always in find_reloads_address. */ if (in != 0 && GET_CODE (in) == REG) { ! int regno = REGNO (in); if (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0 && reg_equiv_constant[regno] != 0) *************** push_reload (in, out, inloc, outloc, cla *** 882,888 **** (in the case of a parameter). */ if (out != 0 && GET_CODE (out) == REG) { ! register int regno = REGNO (out); if (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0 && reg_equiv_constant[regno] != 0) --- 892,898 ---- (in the case of a parameter). */ if (out != 0 && GET_CODE (out) == REG) { ! int regno = REGNO (out); if (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0 && reg_equiv_constant[regno] != 0) *************** push_reload (in, out, inloc, outloc, cla *** 892,917 **** /* If we have a read-write operand with an address side-effect, change either IN or OUT so the side-effect happens only once. */ if (in != 0 && out != 0 && GET_CODE (in) == MEM && rtx_equal_p (in, out)) ! { ! if (GET_CODE (XEXP (in, 0)) == POST_INC ! || GET_CODE (XEXP (in, 0)) == POST_DEC ! || GET_CODE (XEXP (in, 0)) == POST_MODIFY) ! { ! rtx new = gen_rtx_MEM (GET_MODE (in), XEXP (XEXP (in, 0), 0)); ! MEM_COPY_ATTRIBUTES (new, in); ! in = new; ! } ! if (GET_CODE (XEXP (in, 0)) == PRE_INC ! || GET_CODE (XEXP (in, 0)) == PRE_DEC ! || GET_CODE (XEXP (in, 0)) == PRE_MODIFY) ! { ! rtx new = gen_rtx_MEM (GET_MODE (out), XEXP (XEXP (out, 0), 0)); ! MEM_COPY_ATTRIBUTES (new, out); ! out = new; ! } ! } /* If we are reloading a (SUBREG constant ...), really reload just the inside expression in its own mode. Similarly for (SUBREG (PLUS ...)). --- 902,920 ---- /* If we have a read-write operand with an address side-effect, change either IN or OUT so the side-effect happens only once. */ if (in != 0 && out != 0 && GET_CODE (in) == MEM && rtx_equal_p (in, out)) ! switch (GET_CODE (XEXP (in, 0))) ! { ! case POST_INC: case POST_DEC: case POST_MODIFY: ! in = replace_equiv_address_nv (in, XEXP (XEXP (in, 0), 0)); ! break; ! case PRE_INC: case PRE_DEC: case PRE_MODIFY: ! out = replace_equiv_address_nv (out, XEXP (XEXP (out, 0), 0)); ! break; ! default: ! break; ! } /* If we are reloading a (SUBREG constant ...), really reload just the inside expression in its own mode. Similarly for (SUBREG (PLUS ...)). *************** push_reload (in, out, inloc, outloc, cla *** 938,950 **** Finally, reload the inner expression if it is a register that is in the class whose registers cannot be referenced in a different size ! and M1 is not the same size as M2. If SUBREG_WORD is nonzero, we cannot reload just the inside since we might end up with the wrong register class. But if it is inside a STRICT_LOW_PART, we have no choice, so we hope we do get the right register class there. */ if (in != 0 && GET_CODE (in) == SUBREG ! && (SUBREG_WORD (in) == 0 || strict_low) #ifdef CLASS_CANNOT_CHANGE_MODE && (class != CLASS_CANNOT_CHANGE_MODE || ! CLASS_CANNOT_CHANGE_MODE_P (GET_MODE (SUBREG_REG (in)), inmode)) --- 941,953 ---- Finally, reload the inner expression if it is a register that is in the class whose registers cannot be referenced in a different size ! and M1 is not the same size as M2. If subreg_lowpart_p is false, we cannot reload just the inside since we might end up with the wrong register class. But if it is inside a STRICT_LOW_PART, we have no choice, so we hope we do get the right register class there. */ if (in != 0 && GET_CODE (in) == SUBREG ! && (subreg_lowpart_p (in) || strict_low) #ifdef CLASS_CANNOT_CHANGE_MODE && (class != CLASS_CANNOT_CHANGE_MODE || ! CLASS_CANNOT_CHANGE_MODE_P (GET_MODE (SUBREG_REG (in)), inmode)) *************** push_reload (in, out, inloc, outloc, cla *** 978,984 **** && REGNO (SUBREG_REG (in)) < FIRST_PSEUDO_REGISTER /* The case where out is nonzero is handled differently in the following statement. */ ! && (out == 0 || SUBREG_WORD (in) == 0) && ((GET_MODE_SIZE (inmode) <= UNITS_PER_WORD && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (in))) > UNITS_PER_WORD) --- 981,987 ---- && REGNO (SUBREG_REG (in)) < FIRST_PSEUDO_REGISTER /* The case where out is nonzero is handled differently in the following statement. */ ! && (out == 0 || subreg_lowpart_p (in)) && ((GET_MODE_SIZE (inmode) <= UNITS_PER_WORD && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (in))) > UNITS_PER_WORD) *************** push_reload (in, out, inloc, outloc, cla *** 986,994 **** / UNITS_PER_WORD) != HARD_REGNO_NREGS (REGNO (SUBREG_REG (in)), GET_MODE (SUBREG_REG (in))))) ! || ! HARD_REGNO_MODE_OK ((REGNO (SUBREG_REG (in)) ! + SUBREG_WORD (in)), ! inmode))) #ifdef SECONDARY_INPUT_RELOAD_CLASS || (SECONDARY_INPUT_RELOAD_CLASS (class, inmode, in) != NO_REGS && (SECONDARY_INPUT_RELOAD_CLASS (class, --- 989,995 ---- / UNITS_PER_WORD) != HARD_REGNO_NREGS (REGNO (SUBREG_REG (in)), GET_MODE (SUBREG_REG (in))))) ! || ! HARD_REGNO_MODE_OK (subreg_regno (in), inmode))) #ifdef SECONDARY_INPUT_RELOAD_CLASS || (SECONDARY_INPUT_RELOAD_CLASS (class, inmode, in) != NO_REGS && (SECONDARY_INPUT_RELOAD_CLASS (class, *************** push_reload (in, out, inloc, outloc, cla *** 1028,1045 **** that case. */ /* Similar issue for (SUBREG constant ...) if it was not handled by the ! code above. This can happen if SUBREG_WORD != 0. */ if (in != 0 && reload_inner_reg_of_subreg (in, inmode)) { /* This relies on the fact that emit_reload_insns outputs the instructions for input reloads of type RELOAD_OTHER in the same order as the reloads. Thus if the outer reload is also of type RELOAD_OTHER, we are guaranteed that this inner reload will be output before the outer reload. */ ! push_reload (SUBREG_REG (in), NULL_RTX, &SUBREG_REG (in), NULL_PTR, ! find_valid_class (inmode, SUBREG_WORD (in)), ! VOIDmode, VOIDmode, 0, 0, opnum, type); dont_remove_subreg = 1; } --- 1029,1055 ---- that case. */ /* Similar issue for (SUBREG constant ...) if it was not handled by the ! code above. This can happen if SUBREG_BYTE != 0. */ if (in != 0 && reload_inner_reg_of_subreg (in, inmode)) { + enum reg_class in_class = class; + + if (GET_CODE (SUBREG_REG (in)) == REG) + in_class + = find_valid_class (inmode, + subreg_regno_offset (REGNO (SUBREG_REG (in)), + GET_MODE (SUBREG_REG (in)), + SUBREG_BYTE (in), + GET_MODE (in))); + /* This relies on the fact that emit_reload_insns outputs the instructions for input reloads of type RELOAD_OTHER in the same order as the reloads. Thus if the outer reload is also of type RELOAD_OTHER, we are guaranteed that this inner reload will be output before the outer reload. */ ! push_reload (SUBREG_REG (in), NULL_RTX, &SUBREG_REG (in), (rtx *) 0, ! in_class, VOIDmode, VOIDmode, 0, 0, opnum, type); dont_remove_subreg = 1; } *************** push_reload (in, out, inloc, outloc, cla *** 1050,1056 **** (except in the case of STRICT_LOW_PART, and in that case the constraint should label it input-output.) */ if (out != 0 && GET_CODE (out) == SUBREG ! && (SUBREG_WORD (out) == 0 || strict_low) #ifdef CLASS_CANNOT_CHANGE_MODE && (class != CLASS_CANNOT_CHANGE_MODE || ! CLASS_CANNOT_CHANGE_MODE_P (GET_MODE (SUBREG_REG (out)), --- 1060,1066 ---- (except in the case of STRICT_LOW_PART, and in that case the constraint should label it input-output.) */ if (out != 0 && GET_CODE (out) == SUBREG ! && (subreg_lowpart_p (out) || strict_low) #ifdef CLASS_CANNOT_CHANGE_MODE && (class != CLASS_CANNOT_CHANGE_MODE || ! CLASS_CANNOT_CHANGE_MODE_P (GET_MODE (SUBREG_REG (out)), *************** push_reload (in, out, inloc, outloc, cla *** 1080,1088 **** / UNITS_PER_WORD) != HARD_REGNO_NREGS (REGNO (SUBREG_REG (out)), GET_MODE (SUBREG_REG (out))))) ! || ! HARD_REGNO_MODE_OK ((REGNO (SUBREG_REG (out)) ! + SUBREG_WORD (out)), ! outmode))) #ifdef SECONDARY_OUTPUT_RELOAD_CLASS || (SECONDARY_OUTPUT_RELOAD_CLASS (class, outmode, out) != NO_REGS && (SECONDARY_OUTPUT_RELOAD_CLASS (class, --- 1090,1096 ---- / UNITS_PER_WORD) != HARD_REGNO_NREGS (REGNO (SUBREG_REG (out)), GET_MODE (SUBREG_REG (out))))) ! || ! HARD_REGNO_MODE_OK (subreg_regno (out), outmode))) #ifdef SECONDARY_OUTPUT_RELOAD_CLASS || (SECONDARY_OUTPUT_RELOAD_CLASS (class, outmode, out) != NO_REGS && (SECONDARY_OUTPUT_RELOAD_CLASS (class, *************** push_reload (in, out, inloc, outloc, cla *** 1129,1135 **** dont_remove_subreg = 1; push_reload (SUBREG_REG (out), SUBREG_REG (out), &SUBREG_REG (out), &SUBREG_REG (out), ! find_valid_class (outmode, SUBREG_WORD (out)), VOIDmode, VOIDmode, 0, 0, opnum, RELOAD_OTHER); } --- 1137,1147 ---- dont_remove_subreg = 1; push_reload (SUBREG_REG (out), SUBREG_REG (out), &SUBREG_REG (out), &SUBREG_REG (out), ! find_valid_class (outmode, ! subreg_regno_offset (REGNO (SUBREG_REG (out)), ! GET_MODE (SUBREG_REG (out)), ! SUBREG_BYTE (out), ! GET_MODE (out))), VOIDmode, VOIDmode, 0, 0, opnum, RELOAD_OTHER); } *************** push_reload (in, out, inloc, outloc, cla *** 1146,1161 **** if (in != 0 && GET_CODE (in) == SUBREG && GET_CODE (SUBREG_REG (in)) == REG && REGNO (SUBREG_REG (in)) < FIRST_PSEUDO_REGISTER && ! dont_remove_subreg) ! in = gen_rtx_REG (GET_MODE (in), ! REGNO (SUBREG_REG (in)) + SUBREG_WORD (in)); /* Similarly for OUT. */ if (out != 0 && GET_CODE (out) == SUBREG && GET_CODE (SUBREG_REG (out)) == REG && REGNO (SUBREG_REG (out)) < FIRST_PSEUDO_REGISTER && ! dont_remove_subreg) ! out = gen_rtx_REG (GET_MODE (out), ! REGNO (SUBREG_REG (out)) + SUBREG_WORD (out)); /* Narrow down the class of register wanted if that is desirable on this machine for efficiency. */ --- 1158,1171 ---- if (in != 0 && GET_CODE (in) == SUBREG && GET_CODE (SUBREG_REG (in)) == REG && REGNO (SUBREG_REG (in)) < FIRST_PSEUDO_REGISTER && ! dont_remove_subreg) ! in = gen_rtx_REG (GET_MODE (in), subreg_regno (in)); /* Similarly for OUT. */ if (out != 0 && GET_CODE (out) == SUBREG && GET_CODE (SUBREG_REG (out)) == REG && REGNO (SUBREG_REG (out)) < FIRST_PSEUDO_REGISTER && ! dont_remove_subreg) ! out = gen_rtx_REG (GET_MODE (out), subreg_regno (out)); /* Narrow down the class of register wanted if that is desirable on this machine for efficiency. */ *************** push_reload (in, out, inloc, outloc, cla *** 1356,1362 **** rld[i].opnum = MIN (rld[i].opnum, opnum); } ! /* If the ostensible rtx being reload differs from the rtx found in the location to substitute, this reload is not safe to combine because we cannot reliably tell whether it appears in the insn. */ --- 1366,1372 ---- rld[i].opnum = MIN (rld[i].opnum, opnum); } ! /* If the ostensible rtx being reloaded differs from the rtx found in the location to substitute, this reload is not safe to combine because we cannot reliably tell whether it appears in the insn. */ *************** push_reload (in, out, inloc, outloc, cla *** 1393,1399 **** { if (inloc != 0) { ! register struct replacement *r = &replacements[n_replacements++]; r->what = i; r->subreg_loc = in_subreg_loc; r->where = inloc; --- 1403,1409 ---- { if (inloc != 0) { ! struct replacement *r = &replacements[n_replacements++]; r->what = i; r->subreg_loc = in_subreg_loc; r->where = inloc; *************** push_reload (in, out, inloc, outloc, cla *** 1401,1407 **** } if (outloc != 0 && outloc != inloc) { ! register struct replacement *r = &replacements[n_replacements++]; r->what = i; r->where = outloc; r->subreg_loc = out_subreg_loc; --- 1411,1417 ---- } if (outloc != 0 && outloc != inloc) { ! struct replacement *r = &replacements[n_replacements++]; r->what = i; r->where = outloc; r->subreg_loc = out_subreg_loc; *************** push_replacement (loc, reloadnum, mode) *** 1528,1534 **** { if (replace_reloads) { ! register struct replacement *r = &replacements[n_replacements++]; r->what = reloadnum; r->where = loc; r->subreg_loc = 0; --- 1538,1544 ---- { if (replace_reloads) { ! struct replacement *r = &replacements[n_replacements++]; r->what = reloadnum; r->where = loc; r->subreg_loc = 0; *************** combine_reloads () *** 1632,1637 **** --- 1642,1657 ---- if (earlyclobber_operand_p (rld[output_reload].out)) return; + /* If there is a reload for part of the address of this operand, we would + need to chnage it to RELOAD_FOR_OTHER_ADDRESS. But that would extend + its life to the point where doing this combine would not lower the + number of spill registers needed. */ + for (i = 0; i < n_reloads; i++) + if ((rld[i].when_needed == RELOAD_FOR_OUTPUT_ADDRESS + || rld[i].when_needed == RELOAD_FOR_OUTADDR_ADDRESS) + && rld[i].opnum == rld[output_reload].opnum) + return; + /* Check each input reload; can we combine it? */ for (i = 0; i < n_reloads; i++) *************** find_dummy_reload (real_in, real_out, in *** 1810,1824 **** || GET_MODE_SIZE (inmode) > UNITS_PER_WORD)) return 0; /* Find the inside of any subregs. */ while (GET_CODE (out) == SUBREG) { ! out_offset = SUBREG_WORD (out); out = SUBREG_REG (out); } while (GET_CODE (in) == SUBREG) { ! in_offset = SUBREG_WORD (in); in = SUBREG_REG (in); } --- 1830,1857 ---- || GET_MODE_SIZE (inmode) > UNITS_PER_WORD)) return 0; + /* Note that {in,out}_offset are needed only when 'in' or 'out' + respectively refers to a hard register. */ + /* Find the inside of any subregs. */ while (GET_CODE (out) == SUBREG) { ! if (GET_CODE (SUBREG_REG (out)) == REG ! && REGNO (SUBREG_REG (out)) < FIRST_PSEUDO_REGISTER) ! out_offset += subreg_regno_offset (REGNO (SUBREG_REG (out)), ! GET_MODE (SUBREG_REG (out)), ! SUBREG_BYTE (out), ! GET_MODE (out)); out = SUBREG_REG (out); } while (GET_CODE (in) == SUBREG) { ! if (GET_CODE (SUBREG_REG (in)) == REG ! && REGNO (SUBREG_REG (in)) < FIRST_PSEUDO_REGISTER) ! in_offset += subreg_regno_offset (REGNO (SUBREG_REG (in)), ! GET_MODE (SUBREG_REG (in)), ! SUBREG_BYTE (in), ! GET_MODE (in)); in = SUBREG_REG (in); } *************** find_dummy_reload (real_in, real_out, in *** 1847,1852 **** --- 1880,1886 ---- *inloc = const0_rtx; if (regno < FIRST_PSEUDO_REGISTER + && HARD_REGNO_MODE_OK (regno, outmode) && ! refers_to_regno_for_reload_p (regno, regno + nwords, PATTERN (this_insn), outloc)) { *************** find_dummy_reload (real_in, real_out, in *** 1893,1899 **** unsigned int regno = REGNO (in) + in_offset; unsigned int nwords = HARD_REGNO_NREGS (regno, inmode); ! if (! refers_to_regno_for_reload_p (regno, regno + nwords, out, NULL_PTR) && ! hard_reg_set_here_p (regno, regno + nwords, PATTERN (this_insn)) && (! earlyclobber --- 1927,1933 ---- unsigned int regno = REGNO (in) + in_offset; unsigned int nwords = HARD_REGNO_NREGS (regno, inmode); ! if (! refers_to_regno_for_reload_p (regno, regno + nwords, out, (rtx*) 0) && ! hard_reg_set_here_p (regno, regno + nwords, PATTERN (this_insn)) && (! earlyclobber *************** hard_reg_set_here_p (beg_regno, end_regn *** 1956,1962 **** { if (GET_CODE (x) == SET || GET_CODE (x) == CLOBBER) { ! register rtx op0 = SET_DEST (x); while (GET_CODE (op0) == SUBREG) op0 = SUBREG_REG (op0); --- 1990,1996 ---- { if (GET_CODE (x) == SET || GET_CODE (x) == CLOBBER) { ! rtx op0 = SET_DEST (x); while (GET_CODE (op0) == SUBREG) op0 = SUBREG_REG (op0); *************** hard_reg_set_here_p (beg_regno, end_regn *** 1972,1978 **** } else if (GET_CODE (x) == PARALLEL) { ! register int i = XVECLEN (x, 0) - 1; for (; i >= 0; i--) if (hard_reg_set_here_p (beg_regno, end_regno, XVECEXP (x, 0, i))) --- 2006,2012 ---- } else if (GET_CODE (x) == PARALLEL) { ! int i = XVECLEN (x, 0) - 1; for (; i >= 0; i--) if (hard_reg_set_here_p (beg_regno, end_regno, XVECEXP (x, 0, i))) *************** hard_reg_set_here_p (beg_regno, end_regn *** 1989,1995 **** int strict_memory_address_p (mode, addr) enum machine_mode mode ATTRIBUTE_UNUSED; ! register rtx addr; { GO_IF_LEGITIMATE_ADDRESS (mode, addr, win); return 0; --- 2023,2029 ---- int strict_memory_address_p (mode, addr) enum machine_mode mode ATTRIBUTE_UNUSED; ! rtx addr; { GO_IF_LEGITIMATE_ADDRESS (mode, addr, win); return 0; *************** strict_memory_address_p (mode, addr) *** 2015,2025 **** int operands_match_p (x, y) ! register rtx x, y; { ! register int i; ! register RTX_CODE code = GET_CODE (x); ! register const char *fmt; int success_2; if (x == y) --- 2049,2059 ---- int operands_match_p (x, y) ! rtx x, y; { ! int i; ! RTX_CODE code = GET_CODE (x); ! const char *fmt; int success_2; if (x == y) *************** operands_match_p (x, y) *** 2028,2041 **** && (GET_CODE (y) == REG || (GET_CODE (y) == SUBREG && GET_CODE (SUBREG_REG (y)) == REG))) { ! register int j; if (code == SUBREG) { i = REGNO (SUBREG_REG (x)); if (i >= FIRST_PSEUDO_REGISTER) goto slow; ! i += SUBREG_WORD (x); } else i = REGNO (x); --- 2062,2078 ---- && (GET_CODE (y) == REG || (GET_CODE (y) == SUBREG && GET_CODE (SUBREG_REG (y)) == REG))) { ! int j; if (code == SUBREG) { i = REGNO (SUBREG_REG (x)); if (i >= FIRST_PSEUDO_REGISTER) goto slow; ! i += subreg_regno_offset (REGNO (SUBREG_REG (x)), ! GET_MODE (SUBREG_REG (x)), ! SUBREG_BYTE (x), ! GET_MODE (x)); } else i = REGNO (x); *************** operands_match_p (x, y) *** 2045,2051 **** j = REGNO (SUBREG_REG (y)); if (j >= FIRST_PSEUDO_REGISTER) goto slow; ! j += SUBREG_WORD (y); } else j = REGNO (y); --- 2082,2091 ---- j = REGNO (SUBREG_REG (y)); if (j >= FIRST_PSEUDO_REGISTER) goto slow; ! j += subreg_regno_offset (REGNO (SUBREG_REG (y)), ! GET_MODE (SUBREG_REG (y)), ! SUBREG_BYTE (y), ! GET_MODE (y)); } else j = REGNO (y); *************** immune_p (x, y, ydata) *** 2306,2312 **** struct decomposition xdata; if (ydata.reg_flag) ! return !refers_to_regno_for_reload_p (ydata.start, ydata.end, x, NULL_PTR); if (ydata.safe) return 1; --- 2346,2352 ---- struct decomposition xdata; if (ydata.reg_flag) ! return !refers_to_regno_for_reload_p (ydata.start, ydata.end, x, (rtx*) 0); if (ydata.safe) return 1; *************** find_reloads (insn, replace, ind_levels, *** 2382,2389 **** int live_known; short *reload_reg_p; { ! register int insn_code_number; ! register int i, j; int noperands; /* These start out as the constraints for the insn and they are chewed up as we consider alternatives. */ --- 2422,2429 ---- int live_known; short *reload_reg_p; { ! int insn_code_number; ! int i, j; int noperands; /* These start out as the constraints for the insn and they are chewed up as we consider alternatives. */ *************** find_reloads (insn, replace, ind_levels, *** 2496,2503 **** for (i = 0; i < noperands; i++) { ! register char *p; ! register int c; substed_operand[i] = recog_data.operand[i]; p = constraints[i]; --- 2536,2543 ---- for (i = 0; i < noperands; i++) { ! char *p; ! int c; substed_operand[i] = recog_data.operand[i]; p = constraints[i]; *************** find_reloads (insn, replace, ind_levels, *** 2521,2529 **** commutative = i; } ! else if (c >= '0' && c <= '9') { ! c -= '0'; operands_match[c][i] = operands_match_p (recog_data.operand[c], recog_data.operand[i]); --- 2561,2570 ---- commutative = i; } ! else if (ISDIGIT (c)) { ! c = strtoul (p - 1, &p, 10); ! operands_match[c][i] = operands_match_p (recog_data.operand[c], recog_data.operand[i]); *************** find_reloads (insn, replace, ind_levels, *** 2568,2574 **** for (i = 0; i < noperands; i++) { ! register RTX_CODE code = GET_CODE (recog_data.operand[i]); address_reloaded[i] = 0; operand_type[i] = (modified[i] == RELOAD_READ ? RELOAD_FOR_INPUT --- 2609,2615 ---- for (i = 0; i < noperands; i++) { ! RTX_CODE code = GET_CODE (recog_data.operand[i]); address_reloaded[i] = 0; operand_type[i] = (modified[i] == RELOAD_READ ? RELOAD_FOR_INPUT *************** find_reloads (insn, replace, ind_levels, *** 2584,2590 **** ; else if (constraints[i][0] == 'p') { ! find_reloads_address (VOIDmode, NULL_PTR, recog_data.operand[i], recog_data.operand_loc[i], i, operand_type[i], ind_levels, insn); --- 2625,2631 ---- ; else if (constraints[i][0] == 'p') { ! find_reloads_address (VOIDmode, (rtx*) 0, recog_data.operand[i], recog_data.operand_loc[i], i, operand_type[i], ind_levels, insn); *************** find_reloads (insn, replace, ind_levels, *** 2637,2645 **** && GET_CODE (reg) == REG && (GET_MODE_SIZE (GET_MODE (reg)) >= GET_MODE_SIZE (GET_MODE (op)))) ! REG_NOTES (emit_insn_before (gen_rtx_USE (VOIDmode, reg), insn)) ! = gen_rtx_EXPR_LIST (REG_EQUAL, ! reg_equiv_memory_loc[REGNO (reg)], NULL_RTX); substed_operand[i] = recog_data.operand[i] = op; } --- 2678,2686 ---- && GET_CODE (reg) == REG && (GET_MODE_SIZE (GET_MODE (reg)) >= GET_MODE_SIZE (GET_MODE (op)))) ! set_unique_reg_note (emit_insn_before (gen_rtx_USE (VOIDmode, reg), ! insn), ! REG_EQUAL, reg_equiv_memory_loc[REGNO (reg)]); substed_operand[i] = recog_data.operand[i] = op; } *************** find_reloads (insn, replace, ind_levels, *** 2658,2665 **** When we find a pseudo always equivalent to a constant, we replace it by the constant. We must be sure, however, that we don't try to replace it in the insn in which it ! is being set. */ ! register int regno = REGNO (recog_data.operand[i]); if (reg_equiv_constant[regno] != 0 && (set == 0 || &SET_DEST (set) != recog_data.operand_loc[i])) { --- 2699,2706 ---- When we find a pseudo always equivalent to a constant, we replace it by the constant. We must be sure, however, that we don't try to replace it in the insn in which it ! is being set. */ ! int regno = REGNO (recog_data.operand[i]); if (reg_equiv_constant[regno] != 0 && (set == 0 || &SET_DEST (set) != recog_data.operand_loc[i])) { *************** find_reloads (insn, replace, ind_levels, *** 2746,2760 **** for (i = 0; i < noperands; i++) { ! register char *p = constraints[i]; ! register int win = 0; int did_match = 0; /* 0 => this operand can be reloaded somehow for this alternative. */ int badop = 1; /* 0 => this operand can be reloaded if the alternative allows regs. */ int winreg = 0; int c; ! register rtx operand = recog_data.operand[i]; int offset = 0; /* Nonzero means this is a MEM that must be reloaded into a reg regardless of what the constraint says. */ --- 2787,2801 ---- for (i = 0; i < noperands; i++) { ! char *p = constraints[i]; ! int win = 0; int did_match = 0; /* 0 => this operand can be reloaded somehow for this alternative. */ int badop = 1; /* 0 => this operand can be reloaded if the alternative allows regs. */ int winreg = 0; int c; ! rtx operand = recog_data.operand[i]; int offset = 0; /* Nonzero means this is a MEM that must be reloaded into a reg regardless of what the constraint says. */ *************** find_reloads (insn, replace, ind_levels, *** 2777,2783 **** while (GET_CODE (operand) == SUBREG) { ! offset += SUBREG_WORD (operand); operand = SUBREG_REG (operand); /* Force reload if this is a constant or PLUS or if there may be a problem accessing OPERAND in the outer mode. */ --- 2818,2835 ---- while (GET_CODE (operand) == SUBREG) { ! /* Offset only matters when operand is a REG and ! it is a hard reg. This is because it is passed ! to reg_fits_class_p if it is a REG and all pseudos ! return 0 from that function. */ ! if (GET_CODE (SUBREG_REG (operand)) == REG ! && REGNO (SUBREG_REG (operand)) < FIRST_PSEUDO_REGISTER) ! { ! offset += subreg_regno_offset (REGNO (SUBREG_REG (operand)), ! GET_MODE (SUBREG_REG (operand)), ! SUBREG_BYTE (operand), ! GET_MODE (operand)); ! } operand = SUBREG_REG (operand); /* Force reload if this is a constant or PLUS or if there may be a problem accessing OPERAND in the outer mode. */ *************** find_reloads (insn, replace, ind_levels, *** 2828,2833 **** --- 2880,2890 ---- ) #endif ) + /* This following hunk of code should no longer be + needed at all with SUBREG_BYTE. If you need this + code back, please explain to me why so I can + fix the real problem. -DaveM */ + #if 0 /* Subreg of a hard reg which can't handle the subreg's mode or which would handle that mode in the wrong number of registers for subregging to work. */ *************** find_reloads (insn, replace, ind_levels, *** 2841,2847 **** != HARD_REGNO_NREGS (REGNO (operand), GET_MODE (operand)))) || ! HARD_REGNO_MODE_OK (REGNO (operand) + offset, ! operand_mode[i])))) force_reload = 1; } --- 2898,2906 ---- != HARD_REGNO_NREGS (REGNO (operand), GET_MODE (operand)))) || ! HARD_REGNO_MODE_OK (REGNO (operand) + offset, ! operand_mode[i]))) ! #endif ! ) force_reload = 1; } *************** find_reloads (insn, replace, ind_levels, *** 2893,2900 **** case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': - c -= '0'; this_alternative_matches[i] = c; /* We are supposed to match a previous operand. If we do, we win if that one did. --- 2952,2959 ---- case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': + c = strtoul (p - 1, &p, 10); this_alternative_matches[i] = c; /* We are supposed to match a previous operand. If we do, we win if that one did. *************** find_reloads (insn, replace, ind_levels, *** 2972,2979 **** case 'p': /* All necessary reloads for an address_operand were handled in find_reloads_address. */ ! this_alternative[i] = (int) BASE_REG_CLASS; win = 1; break; case 'm': --- 3031,3039 ---- case 'p': /* All necessary reloads for an address_operand were handled in find_reloads_address. */ ! this_alternative[i] = (int) MODE_BASE_REG_CLASS (VOIDmode); win = 1; + badop = 0; break; case 'm': *************** find_reloads (insn, replace, ind_levels, *** 3448,3458 **** swapped = !swapped; if (swapped) { ! register enum reg_class tclass; ! register int t; recog_data.operand[commutative] = substed_operand[commutative + 1]; recog_data.operand[commutative + 1] = substed_operand[commutative]; tclass = preferred_class[commutative]; preferred_class[commutative] = preferred_class[commutative + 1]; --- 3508,3524 ---- swapped = !swapped; if (swapped) { ! enum reg_class tclass; ! int t; recog_data.operand[commutative] = substed_operand[commutative + 1]; recog_data.operand[commutative + 1] = substed_operand[commutative]; + /* Swap the duplicates too. */ + for (i = 0; i < recog_data.n_dups; i++) + if (recog_data.dup_num[i] == commutative + || recog_data.dup_num[i] == commutative + 1) + *recog_data.dup_loc[i] + = recog_data.operand[(int) recog_data.dup_num[i]]; tclass = preferred_class[commutative]; preferred_class[commutative] = preferred_class[commutative + 1]; *************** find_reloads (insn, replace, ind_levels, *** 3471,3476 **** --- 3537,3548 ---- recog_data.operand[commutative] = substed_operand[commutative]; recog_data.operand[commutative + 1] = substed_operand[commutative + 1]; + /* Unswap the duplicates too. */ + for (i = 0; i < recog_data.n_dups; i++) + if (recog_data.dup_num[i] == commutative + || recog_data.dup_num[i] == commutative + 1) + *recog_data.dup_loc[i] + = recog_data.operand[(int) recog_data.dup_num[i]]; } } *************** find_reloads (insn, replace, ind_levels, *** 3483,3489 **** { /* No alternative works with reloads?? */ if (insn_code_number >= 0) ! fatal_insn ("Unable to generate reloads for:", insn); error_for_asm (insn, "inconsistent operand constraints in an `asm'"); /* Avoid further trouble with this insn. */ PATTERN (insn) = gen_rtx_USE (VOIDmode, const0_rtx); --- 3555,3561 ---- { /* No alternative works with reloads?? */ if (insn_code_number >= 0) ! fatal_insn ("unable to generate reloads for:", insn); error_for_asm (insn, "inconsistent operand constraints in an `asm'"); /* Avoid further trouble with this insn. */ PATTERN (insn) = gen_rtx_USE (VOIDmode, const0_rtx); *************** find_reloads (insn, replace, ind_levels, *** 3518,3524 **** if (goal_alternative_swapped) { ! register rtx tem; tem = substed_operand[commutative]; substed_operand[commutative] = substed_operand[commutative + 1]; --- 3590,3596 ---- if (goal_alternative_swapped) { ! rtx tem; tem = substed_operand[commutative]; substed_operand[commutative] = substed_operand[commutative + 1]; *************** find_reloads (insn, replace, ind_levels, *** 3616,3623 **** { operand_reloadnum[i] = push_reload (XEXP (recog_data.operand[i], 0), NULL_RTX, ! &XEXP (recog_data.operand[i], 0), NULL_PTR, ! BASE_REG_CLASS, GET_MODE (XEXP (recog_data.operand[i], 0)), VOIDmode, 0, 0, i, RELOAD_FOR_INPUT); rld[operand_reloadnum[i]].inc --- 3688,3695 ---- { operand_reloadnum[i] = push_reload (XEXP (recog_data.operand[i], 0), NULL_RTX, ! &XEXP (recog_data.operand[i], 0), (rtx*) 0, ! MODE_BASE_REG_CLASS (VOIDmode), GET_MODE (XEXP (recog_data.operand[i], 0)), VOIDmode, 0, 0, i, RELOAD_FOR_INPUT); rld[operand_reloadnum[i]].inc *************** find_reloads (insn, replace, ind_levels, *** 3716,3722 **** rtx operand = recog_data.operand[i]; while (GET_CODE (operand) == SUBREG) ! operand = XEXP (operand, 0); if ((GET_CODE (operand) == MEM || (GET_CODE (operand) == REG && REGNO (operand) >= FIRST_PSEUDO_REGISTER)) --- 3788,3794 ---- rtx operand = recog_data.operand[i]; while (GET_CODE (operand) == SUBREG) ! operand = SUBREG_REG (operand); if ((GET_CODE (operand) == MEM || (GET_CODE (operand) == REG && REGNO (operand) >= FIRST_PSEUDO_REGISTER)) *************** find_reloads (insn, replace, ind_levels, *** 3766,3772 **** operand = *recog_data.operand_loc[i]; while (GET_CODE (operand) == SUBREG) ! operand = XEXP (operand, 0); if (GET_CODE (operand) == REG) { if (modified[i] != RELOAD_WRITE) --- 3838,3844 ---- operand = *recog_data.operand_loc[i]; while (GET_CODE (operand) == SUBREG) ! operand = SUBREG_REG (operand); if (GET_CODE (operand) == REG) { if (modified[i] != RELOAD_WRITE) *************** find_reloads (insn, replace, ind_levels, *** 3793,3799 **** rtx operand = recog_data.operand[i]; while (GET_CODE (operand) == SUBREG) ! operand = XEXP (operand, 0); if ((GET_CODE (operand) == MEM || (GET_CODE (operand) == REG && REGNO (operand) >= FIRST_PSEUDO_REGISTER)) --- 3865,3871 ---- rtx operand = recog_data.operand[i]; while (GET_CODE (operand) == SUBREG) ! operand = SUBREG_REG (operand); if ((GET_CODE (operand) == MEM || (GET_CODE (operand) == REG && REGNO (operand) >= FIRST_PSEUDO_REGISTER)) *************** find_reloads (insn, replace, ind_levels, *** 3833,3839 **** if (GET_CODE (insn) != JUMP_INSN && GET_CODE (substitution) == LABEL_REF && !find_reg_note (insn, REG_LABEL, XEXP (substitution, 0))) ! REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_LABEL, XEXP (substitution, 0), REG_NOTES (insn)); } --- 3905,3911 ---- if (GET_CODE (insn) != JUMP_INSN && GET_CODE (substitution) == LABEL_REF && !find_reg_note (insn, REG_LABEL, XEXP (substitution, 0))) ! REG_NOTES (insn) = gen_rtx_INSN_LIST (REG_LABEL, XEXP (substitution, 0), REG_NOTES (insn)); } *************** find_reloads (insn, replace, ind_levels, *** 4172,4177 **** --- 4244,4266 ---- rld[i].nregs = CLASS_MAX_NREGS (rld[i].class, rld[i].mode); } + /* Special case a simple move with an input reload and a + destination of a hard reg, if the hard reg is ok, use it. */ + for (i = 0; i < n_reloads; i++) + if (rld[i].when_needed == RELOAD_FOR_INPUT + && GET_CODE (PATTERN (insn)) == SET + && GET_CODE (SET_DEST (PATTERN (insn))) == REG + && SET_SRC (PATTERN (insn)) == rld[i].in) + { + rtx dest = SET_DEST (PATTERN (insn)); + unsigned int regno = REGNO (dest); + + if (regno < FIRST_PSEUDO_REGISTER + && TEST_HARD_REG_BIT (reg_class_contents[rld[i].class], regno) + && HARD_REGNO_MODE_OK (regno, rld[i].mode)) + rld[i].reg_rtx = dest; + } + return retval; } *************** alternative_allows_memconst (constraint, *** 4183,4189 **** const char *constraint; int altnum; { ! register int c; /* Skip alternatives before the one requested. */ while (altnum > 0) { --- 4272,4278 ---- const char *constraint; int altnum; { ! int c; /* Skip alternatives before the one requested. */ while (altnum > 0) { *************** find_reloads_toplev (x, opnum, type, ind *** 4231,4246 **** rtx insn; int *address_reloaded; { ! register RTX_CODE code = GET_CODE (x); ! register const char *fmt = GET_RTX_FORMAT (code); ! register int i; int copied; if (code == REG) { /* This code is duplicated for speed in find_reloads. */ ! register int regno = REGNO (x); if (reg_equiv_constant[regno] != 0 && !is_set_dest) x = reg_equiv_constant[regno]; #if 0 --- 4320,4335 ---- rtx insn; int *address_reloaded; { ! RTX_CODE code = GET_CODE (x); ! const char *fmt = GET_RTX_FORMAT (code); ! int i; int copied; if (code == REG) { /* This code is duplicated for speed in find_reloads. */ ! int regno = REGNO (x); if (reg_equiv_constant[regno] != 0 && !is_set_dest) x = reg_equiv_constant[regno]; #if 0 *************** find_reloads_toplev (x, opnum, type, ind *** 4297,4303 **** the register (this should never happen because one of the cases above should handle it). */ ! register int regno = REGNO (SUBREG_REG (x)); rtx tem; if (subreg_lowpart_p (x) --- 4386,4392 ---- the register (this should never happen because one of the cases above should handle it). */ ! int regno = REGNO (SUBREG_REG (x)); rtx tem; if (subreg_lowpart_p (x) *************** find_reloads_toplev (x, opnum, type, ind *** 4311,4317 **** && regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0 && reg_equiv_constant[regno] != 0 && (tem = operand_subword (reg_equiv_constant[regno], ! SUBREG_WORD (x), 0, GET_MODE (SUBREG_REG (x)))) != 0) { /* TEM is now a word sized constant for the bits from X that --- 4400,4406 ---- && regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0 && reg_equiv_constant[regno] != 0 && (tem = operand_subword (reg_equiv_constant[regno], ! SUBREG_BYTE (x) / UNITS_PER_WORD, 0, GET_MODE (SUBREG_REG (x)))) != 0) { /* TEM is now a word sized constant for the bits from X that *************** find_reloads_toplev (x, opnum, type, ind *** 4337,4343 **** && (GET_MODE_SIZE (GET_MODE (x)) < GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))))) { ! int shift = SUBREG_WORD (x) * BITS_PER_WORD; if (WORDS_BIG_ENDIAN) shift = (GET_MODE_BITSIZE (GET_MODE (SUBREG_REG (x))) - GET_MODE_BITSIZE (GET_MODE (x)) --- 4426,4432 ---- && (GET_MODE_SIZE (GET_MODE (x)) < GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))))) { ! int shift = SUBREG_BYTE (x) * BITS_PER_UNIT; if (WORDS_BIG_ENDIAN) shift = (GET_MODE_BITSIZE (GET_MODE (SUBREG_REG (x))) - GET_MODE_BITSIZE (GET_MODE (x)) *************** find_reloads_toplev (x, opnum, type, ind *** 4381,4405 **** x = find_reloads_subreg_address (x, 1, opnum, type, ind_levels, insn); } - else if (code == SUBREG && GET_CODE (SUBREG_REG (x)) == MEM - && (GET_MODE_SIZE (GET_MODE (x)) - > GET_MODE_SIZE (GET_MODE (SUBREG_REG (x)))) - && mode_dependent_address_p (XEXP (SUBREG_REG (x), 0))) - { - /* A paradoxical subreg will simply have the mode of the access - changed, so we need to reload such a memory operand to stabilize - the meaning of the memory access. */ - enum machine_mode subreg_mode = GET_MODE (SUBREG_REG (x)); - - if (is_set_dest) - push_reload (NULL_RTX, SUBREG_REG (x), NULL_PTR, &SUBREG_REG (x), - find_valid_class (subreg_mode, SUBREG_WORD (x)), - VOIDmode, subreg_mode, 0, 0, opnum, type); - else - push_reload (SUBREG_REG (x), NULL_RTX, &SUBREG_REG (x), NULL_PTR, - find_valid_class (subreg_mode, SUBREG_WORD (x)), - subreg_mode, VOIDmode, 0, 0, opnum, type); - } for (copied = 0, i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) { --- 4470,4475 ---- *************** make_memloc (ad, regno) *** 4442,4449 **** if (rtx_varies_p (tem, 0)) tem = copy_rtx (tem); ! tem = gen_rtx_MEM (GET_MODE (ad), tem); ! MEM_COPY_ATTRIBUTES (tem, reg_equiv_memory_loc[regno]); return tem; } --- 4512,4524 ---- if (rtx_varies_p (tem, 0)) tem = copy_rtx (tem); ! tem = replace_equiv_address_nv (reg_equiv_memory_loc[regno], tem); ! tem = adjust_address_nv (tem, GET_MODE (ad), 0); ! ! /* Copy the result if it's still the same as the equivalence, to avoid ! modifying it when we do the substitution for the reload. */ ! if (tem == reg_equiv_memory_loc[regno]) ! tem = copy_rtx (tem); return tem; } *************** find_reloads_address (mode, memrefloc, a *** 4482,4488 **** int ind_levels; rtx insn; { ! register int regno; int removed_and = 0; rtx tem; --- 4557,4563 ---- int ind_levels; rtx insn; { ! int regno; int removed_and = 0; rtx tem; *************** find_reloads_address (mode, memrefloc, a *** 4513,4519 **** tem = make_memloc (ad, regno); if (! strict_memory_address_p (GET_MODE (tem), XEXP (tem, 0))) { ! find_reloads_address (GET_MODE (tem), NULL_PTR, XEXP (tem, 0), &XEXP (tem, 0), opnum, ADDR_TYPE (type), ind_levels, insn); } --- 4588,4594 ---- tem = make_memloc (ad, regno); if (! strict_memory_address_p (GET_MODE (tem), XEXP (tem, 0))) { ! find_reloads_address (GET_MODE (tem), (rtx*) 0, XEXP (tem, 0), &XEXP (tem, 0), opnum, ADDR_TYPE (type), ind_levels, insn); } *************** find_reloads_address (mode, memrefloc, a *** 4562,4568 **** return 0; /* If we do not have one of the cases above, we must do the reload. */ ! push_reload (ad, NULL_RTX, loc, NULL_PTR, BASE_REG_CLASS, GET_MODE (ad), VOIDmode, 0, 0, opnum, type); return 1; } --- 4637,4643 ---- return 0; /* If we do not have one of the cases above, we must do the reload. */ ! push_reload (ad, NULL_RTX, loc, (rtx*) 0, MODE_BASE_REG_CLASS (mode), GET_MODE (ad), VOIDmode, 0, 0, opnum, type); return 1; } *************** find_reloads_address (mode, memrefloc, a *** 4662,4669 **** { /* Must use TEM here, not AD, since it is the one that will have any subexpressions reloaded, if needed. */ ! push_reload (tem, NULL_RTX, loc, NULL_PTR, ! BASE_REG_CLASS, GET_MODE (tem), VOIDmode, 0, 0, opnum, type); return ! removed_and; --- 4737,4744 ---- { /* Must use TEM here, not AD, since it is the one that will have any subexpressions reloaded, if needed. */ ! push_reload (tem, NULL_RTX, loc, (rtx*) 0, ! MODE_BASE_REG_CLASS (mode), GET_MODE (tem), VOIDmode, 0, 0, opnum, type); return ! removed_and; *************** find_reloads_address (mode, memrefloc, a *** 4709,4715 **** /* If the sum of two regs is not necessarily valid, reload the sum into a base reg. That will at least work. */ ! find_reloads_address_part (ad, loc, BASE_REG_CLASS, Pmode, opnum, type, ind_levels); } return ! removed_and; --- 4784,4790 ---- /* If the sum of two regs is not necessarily valid, reload the sum into a base reg. That will at least work. */ ! find_reloads_address_part (ad, loc, MODE_BASE_REG_CLASS (mode), Pmode, opnum, type, ind_levels); } return ! removed_and; *************** find_reloads_address (mode, memrefloc, a *** 4752,4758 **** plus_constant (XEXP (XEXP (ad, 0), 0), INTVAL (XEXP (ad, 1))), XEXP (XEXP (ad, 0), 1)); ! find_reloads_address_part (XEXP (ad, 0), &XEXP (ad, 0), BASE_REG_CLASS, GET_MODE (ad), opnum, type, ind_levels); find_reloads_address_1 (mode, XEXP (ad, 1), 1, &XEXP (ad, 1), opnum, type, 0, insn); --- 4827,4834 ---- plus_constant (XEXP (XEXP (ad, 0), 0), INTVAL (XEXP (ad, 1))), XEXP (XEXP (ad, 0), 1)); ! find_reloads_address_part (XEXP (ad, 0), &XEXP (ad, 0), ! MODE_BASE_REG_CLASS (mode), GET_MODE (ad), opnum, type, ind_levels); find_reloads_address_1 (mode, XEXP (ad, 1), 1, &XEXP (ad, 1), opnum, type, 0, insn); *************** find_reloads_address (mode, memrefloc, a *** 4776,4782 **** XEXP (XEXP (ad, 0), 0), plus_constant (XEXP (XEXP (ad, 0), 1), INTVAL (XEXP (ad, 1)))); ! find_reloads_address_part (XEXP (ad, 1), &XEXP (ad, 1), BASE_REG_CLASS, GET_MODE (ad), opnum, type, ind_levels); find_reloads_address_1 (mode, XEXP (ad, 0), 1, &XEXP (ad, 0), opnum, type, 0, insn); --- 4852,4859 ---- XEXP (XEXP (ad, 0), 0), plus_constant (XEXP (XEXP (ad, 0), 1), INTVAL (XEXP (ad, 1)))); ! find_reloads_address_part (XEXP (ad, 1), &XEXP (ad, 1), ! MODE_BASE_REG_CLASS (mode), GET_MODE (ad), opnum, type, ind_levels); find_reloads_address_1 (mode, XEXP (ad, 0), 1, &XEXP (ad, 0), opnum, type, 0, insn); *************** find_reloads_address (mode, memrefloc, a *** 4811,4817 **** into a register. */ if (CONSTANT_P (ad) && ! strict_memory_address_p (mode, ad)) { ! /* If AD is in address in the constant pool, the MEM rtx may be shared. Unshare it so we can safely alter it. */ if (memrefloc && GET_CODE (ad) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (ad)) --- 4888,4894 ---- into a register. */ if (CONSTANT_P (ad) && ! strict_memory_address_p (mode, ad)) { ! /* If AD is an address in the constant pool, the MEM rtx may be shared. Unshare it so we can safely alter it. */ if (memrefloc && GET_CODE (ad) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (ad)) *************** find_reloads_address (mode, memrefloc, a *** 4822,4829 **** loc = &XEXP (*loc, 0); } ! find_reloads_address_part (ad, loc, BASE_REG_CLASS, Pmode, opnum, type, ! ind_levels); return ! removed_and; } --- 4899,4906 ---- loc = &XEXP (*loc, 0); } ! find_reloads_address_part (ad, loc, MODE_BASE_REG_CLASS (mode), ! Pmode, opnum, type, ind_levels); return ! removed_and; } *************** subst_reg_equivs (ad, insn) *** 4842,4850 **** rtx ad; rtx insn; { ! register RTX_CODE code = GET_CODE (ad); ! register int i; ! register const char *fmt; switch (code) { --- 4919,4927 ---- rtx ad; rtx insn; { ! RTX_CODE code = GET_CODE (ad); ! int i; ! const char *fmt; switch (code) { *************** subst_reg_equivs (ad, insn) *** 4852,4857 **** --- 4929,4935 ---- case CONST_INT: case CONST: case CONST_DOUBLE: + case CONST_VECTOR: case SYMBOL_REF: case LABEL_REF: case PC: *************** subst_reg_equivs (ad, insn) *** 4860,4866 **** case REG: { ! register int regno = REGNO (ad); if (reg_equiv_constant[regno] != 0) { --- 4938,4944 ---- case REG: { ! int regno = REGNO (ad); if (reg_equiv_constant[regno] != 0) { *************** update_auto_inc_notes (insn, regno, relo *** 5059,5065 **** /* Note that we take shortcuts assuming that no multi-reg machine mode occurs as part of an address. Also, this is not fully machine-customizable; it works for machines ! such as vaxes and 68000's and 32000's, but other possible machines could have addressing modes that this does not handle right. */ static int --- 5137,5143 ---- /* Note that we take shortcuts assuming that no multi-reg machine mode occurs as part of an address. Also, this is not fully machine-customizable; it works for machines ! such as VAXen and 68000's and 32000's, but other possible machines could have addressing modes that this does not handle right. */ static int *************** find_reloads_address_1 (mode, x, context *** 5073,5090 **** int ind_levels; rtx insn; { ! register RTX_CODE code = GET_CODE (x); switch (code) { case PLUS: { ! register rtx orig_op0 = XEXP (x, 0); ! register rtx orig_op1 = XEXP (x, 1); ! register RTX_CODE code0 = GET_CODE (orig_op0); ! register RTX_CODE code1 = GET_CODE (orig_op1); ! register rtx op0 = orig_op0; ! register rtx op1 = orig_op1; if (GET_CODE (op0) == SUBREG) { --- 5151,5168 ---- int ind_levels; rtx insn; { ! RTX_CODE code = GET_CODE (x); switch (code) { case PLUS: { ! rtx orig_op0 = XEXP (x, 0); ! rtx orig_op1 = XEXP (x, 1); ! RTX_CODE code0 = GET_CODE (orig_op0); ! RTX_CODE code1 = GET_CODE (orig_op1); ! rtx op0 = orig_op0; ! rtx op1 = orig_op1; if (GET_CODE (op0) == SUBREG) { *************** find_reloads_address_1 (mode, x, context *** 5092,5098 **** code0 = GET_CODE (op0); if (code0 == REG && REGNO (op0) < FIRST_PSEUDO_REGISTER) op0 = gen_rtx_REG (word_mode, ! REGNO (op0) + SUBREG_WORD (orig_op0)); } if (GET_CODE (op1) == SUBREG) --- 5170,5180 ---- code0 = GET_CODE (op0); if (code0 == REG && REGNO (op0) < FIRST_PSEUDO_REGISTER) op0 = gen_rtx_REG (word_mode, ! (REGNO (op0) + ! subreg_regno_offset (REGNO (SUBREG_REG (orig_op0)), ! GET_MODE (SUBREG_REG (orig_op0)), ! SUBREG_BYTE (orig_op0), ! GET_MODE (orig_op0)))); } if (GET_CODE (op1) == SUBREG) *************** find_reloads_address_1 (mode, x, context *** 5100,5107 **** op1 = SUBREG_REG (op1); code1 = GET_CODE (op1); if (code1 == REG && REGNO (op1) < FIRST_PSEUDO_REGISTER) op1 = gen_rtx_REG (GET_MODE (op1), ! REGNO (op1) + SUBREG_WORD (orig_op1)); } if (code0 == MULT || code0 == SIGN_EXTEND || code0 == TRUNCATE --- 5182,5195 ---- op1 = SUBREG_REG (op1); code1 = GET_CODE (op1); if (code1 == REG && REGNO (op1) < FIRST_PSEUDO_REGISTER) + /* ??? Why is this given op1's mode and above for + ??? op0 SUBREGs we use word_mode? */ op1 = gen_rtx_REG (GET_MODE (op1), ! (REGNO (op1) + ! subreg_regno_offset (REGNO (SUBREG_REG (orig_op1)), ! GET_MODE (SUBREG_REG (orig_op1)), ! SUBREG_BYTE (orig_op1), ! GET_MODE (orig_op1)))); } if (code0 == MULT || code0 == SIGN_EXTEND || code0 == TRUNCATE *************** find_reloads_address_1 (mode, x, context *** 5238,5244 **** /* Then reload the memory location into a base register. */ reloadnum = push_reload (tem, tem, &XEXP (x, 0), ! &XEXP (op1, 0), BASE_REG_CLASS, GET_MODE (x), GET_MODE (x), 0, 0, opnum, RELOAD_OTHER); --- 5326,5333 ---- /* Then reload the memory location into a base register. */ reloadnum = push_reload (tem, tem, &XEXP (x, 0), ! &XEXP (op1, 0), ! MODE_BASE_REG_CLASS (mode), GET_MODE (x), GET_MODE (x), 0, 0, opnum, RELOAD_OTHER); *************** find_reloads_address_1 (mode, x, context *** 5255,5261 **** { reloadnum = push_reload (XEXP (op1, 0), XEXP (x, 0), &XEXP (op1, 0), &XEXP (x, 0), ! BASE_REG_CLASS, GET_MODE (x), GET_MODE (x), 0, 0, opnum, RELOAD_OTHER); --- 5344,5350 ---- { reloadnum = push_reload (XEXP (op1, 0), XEXP (x, 0), &XEXP (op1, 0), &XEXP (x, 0), ! MODE_BASE_REG_CLASS (mode), GET_MODE (x), GET_MODE (x), 0, 0, opnum, RELOAD_OTHER); *************** find_reloads_address_1 (mode, x, context *** 5274,5280 **** case PRE_DEC: if (GET_CODE (XEXP (x, 0)) == REG) { ! register int regno = REGNO (XEXP (x, 0)); int value = 0; rtx x_orig = x; --- 5363,5369 ---- case PRE_DEC: if (GET_CODE (XEXP (x, 0)) == REG) { ! int regno = REGNO (XEXP (x, 0)); int value = 0; rtx x_orig = x; *************** find_reloads_address_1 (mode, x, context *** 5356,5370 **** x = XEXP (x, 0); reloadnum = push_reload (x, x, loc, loc, ! (context ? INDEX_REG_CLASS : BASE_REG_CLASS), GET_MODE (x), GET_MODE (x), 0, 0, opnum, RELOAD_OTHER); } else { reloadnum ! = push_reload (x, NULL_RTX, loc, NULL_PTR, ! (context ? INDEX_REG_CLASS : BASE_REG_CLASS), GET_MODE (x), GET_MODE (x), 0, 0, opnum, type); rld[reloadnum].inc --- 5445,5461 ---- x = XEXP (x, 0); reloadnum = push_reload (x, x, loc, loc, ! (context ? INDEX_REG_CLASS : ! MODE_BASE_REG_CLASS (mode)), GET_MODE (x), GET_MODE (x), 0, 0, opnum, RELOAD_OTHER); } else { reloadnum ! = push_reload (x, NULL_RTX, loc, (rtx*) 0, ! (context ? INDEX_REG_CLASS : ! MODE_BASE_REG_CLASS (mode)), GET_MODE (x), GET_MODE (x), 0, 0, opnum, type); rld[reloadnum].inc *************** find_reloads_address_1 (mode, x, context *** 5387,5393 **** reload it into a register. */ /* Variable `tem' might or might not be used in FIND_REG_INC_NOTE. */ rtx tem ATTRIBUTE_UNUSED = XEXP (x, 0); ! register rtx link; int reloadnum; /* Since we know we are going to reload this item, don't decrement --- 5478,5484 ---- reload it into a register. */ /* Variable `tem' might or might not be used in FIND_REG_INC_NOTE. */ rtx tem ATTRIBUTE_UNUSED = XEXP (x, 0); ! rtx link; int reloadnum; /* Since we know we are going to reload this item, don't decrement *************** find_reloads_address_1 (mode, x, context *** 5403,5410 **** XEXP (XEXP (x, 0), 0), &XEXP (XEXP (x, 0), 0), opnum, type, ind_levels, insn); ! reloadnum = push_reload (x, NULL_RTX, loc, NULL_PTR, ! (context ? INDEX_REG_CLASS : BASE_REG_CLASS), GET_MODE (x), VOIDmode, 0, 0, opnum, type); rld[reloadnum].inc = find_inc_amount (PATTERN (this_insn), XEXP (x, 0)); --- 5494,5502 ---- XEXP (XEXP (x, 0), 0), &XEXP (XEXP (x, 0), 0), opnum, type, ind_levels, insn); ! reloadnum = push_reload (x, NULL_RTX, loc, (rtx*) 0, ! (context ? INDEX_REG_CLASS : ! MODE_BASE_REG_CLASS (mode)), GET_MODE (x), VOIDmode, 0, 0, opnum, type); rld[reloadnum].inc = find_inc_amount (PATTERN (this_insn), XEXP (x, 0)); *************** find_reloads_address_1 (mode, x, context *** 5432,5450 **** find_reloads_address (GET_MODE (x), loc, XEXP (x, 0), &XEXP (x, 0), opnum, ADDR_TYPE (type), ind_levels, insn); ! push_reload (*loc, NULL_RTX, loc, NULL_PTR, ! (context ? INDEX_REG_CLASS : BASE_REG_CLASS), GET_MODE (x), VOIDmode, 0, 0, opnum, type); return 1; case REG: { ! register int regno = REGNO (x); if (reg_equiv_constant[regno] != 0) { find_reloads_address_part (reg_equiv_constant[regno], loc, ! (context ? INDEX_REG_CLASS : BASE_REG_CLASS), GET_MODE (x), opnum, type, ind_levels); return 1; } --- 5524,5543 ---- find_reloads_address (GET_MODE (x), loc, XEXP (x, 0), &XEXP (x, 0), opnum, ADDR_TYPE (type), ind_levels, insn); ! push_reload (*loc, NULL_RTX, loc, (rtx*) 0, ! (context ? INDEX_REG_CLASS : MODE_BASE_REG_CLASS (mode)), GET_MODE (x), VOIDmode, 0, 0, opnum, type); return 1; case REG: { ! int regno = REGNO (x); if (reg_equiv_constant[regno] != 0) { find_reloads_address_part (reg_equiv_constant[regno], loc, ! (context ? INDEX_REG_CLASS : ! MODE_BASE_REG_CLASS (mode)), GET_MODE (x), opnum, type, ind_levels); return 1; } *************** find_reloads_address_1 (mode, x, context *** 5453,5460 **** that feeds this insn. */ if (reg_equiv_mem[regno] != 0) { ! push_reload (reg_equiv_mem[regno], NULL_RTX, loc, NULL_PTR, ! (context ? INDEX_REG_CLASS : BASE_REG_CLASS), GET_MODE (x), VOIDmode, 0, 0, opnum, type); return 1; } --- 5546,5554 ---- that feeds this insn. */ if (reg_equiv_mem[regno] != 0) { ! push_reload (reg_equiv_mem[regno], NULL_RTX, loc, (rtx*) 0, ! (context ? INDEX_REG_CLASS : ! MODE_BASE_REG_CLASS (mode)), GET_MODE (x), VOIDmode, 0, 0, opnum, type); return 1; } *************** find_reloads_address_1 (mode, x, context *** 5481,5488 **** || !(context ? REGNO_OK_FOR_INDEX_P (regno) : REGNO_MODE_OK_FOR_BASE_P (regno, mode)))) { ! push_reload (x, NULL_RTX, loc, NULL_PTR, ! (context ? INDEX_REG_CLASS : BASE_REG_CLASS), GET_MODE (x), VOIDmode, 0, 0, opnum, type); return 1; } --- 5575,5582 ---- || !(context ? REGNO_OK_FOR_INDEX_P (regno) : REGNO_MODE_OK_FOR_BASE_P (regno, mode)))) { ! push_reload (x, NULL_RTX, loc, (rtx*) 0, ! (context ? INDEX_REG_CLASS : MODE_BASE_REG_CLASS (mode)), GET_MODE (x), VOIDmode, 0, 0, opnum, type); return 1; } *************** find_reloads_address_1 (mode, x, context *** 5493,5500 **** from before this insn to after it. */ if (regno_clobbered_p (regno, this_insn, GET_MODE (x), 0)) { ! push_reload (x, NULL_RTX, loc, NULL_PTR, ! (context ? INDEX_REG_CLASS : BASE_REG_CLASS), GET_MODE (x), VOIDmode, 0, 0, opnum, type); return 1; } --- 5587,5594 ---- from before this insn to after it. */ if (regno_clobbered_p (regno, this_insn, GET_MODE (x), 0)) { ! push_reload (x, NULL_RTX, loc, (rtx*) 0, ! (context ? INDEX_REG_CLASS : MODE_BASE_REG_CLASS (mode)), GET_MODE (x), VOIDmode, 0, 0, opnum, type); return 1; } *************** find_reloads_address_1 (mode, x, context *** 5509,5521 **** needless copies if SUBREG_REG is multi-word. */ if (REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER) { ! int regno = REGNO (SUBREG_REG (x)) + SUBREG_WORD (x); if (! (context ? REGNO_OK_FOR_INDEX_P (regno) : REGNO_MODE_OK_FOR_BASE_P (regno, mode))) { ! push_reload (x, NULL_RTX, loc, NULL_PTR, ! (context ? INDEX_REG_CLASS : BASE_REG_CLASS), GET_MODE (x), VOIDmode, 0, 0, opnum, type); return 1; } --- 5603,5616 ---- needless copies if SUBREG_REG is multi-word. */ if (REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER) { ! int regno = subreg_regno (x); if (! (context ? REGNO_OK_FOR_INDEX_P (regno) : REGNO_MODE_OK_FOR_BASE_P (regno, mode))) { ! push_reload (x, NULL_RTX, loc, (rtx*) 0, ! (context ? INDEX_REG_CLASS : ! MODE_BASE_REG_CLASS (mode)), GET_MODE (x), VOIDmode, 0, 0, opnum, type); return 1; } *************** find_reloads_address_1 (mode, x, context *** 5525,5537 **** else { enum reg_class class = (context ? INDEX_REG_CLASS ! : BASE_REG_CLASS); if (CLASS_MAX_NREGS (class, GET_MODE (SUBREG_REG (x))) > reg_class_size[class]) { x = find_reloads_subreg_address (x, 0, opnum, type, ind_levels, insn); ! push_reload (x, NULL_RTX, loc, NULL_PTR, class, GET_MODE (x), VOIDmode, 0, 0, opnum, type); return 1; } --- 5620,5632 ---- else { enum reg_class class = (context ? INDEX_REG_CLASS ! : MODE_BASE_REG_CLASS (mode)); if (CLASS_MAX_NREGS (class, GET_MODE (SUBREG_REG (x))) > reg_class_size[class]) { x = find_reloads_subreg_address (x, 0, opnum, type, ind_levels, insn); ! push_reload (x, NULL_RTX, loc, (rtx*) 0, class, GET_MODE (x), VOIDmode, 0, 0, opnum, type); return 1; } *************** find_reloads_address_1 (mode, x, context *** 5544,5551 **** } { ! register const char *fmt = GET_RTX_FORMAT (code); ! register int i; for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) { --- 5639,5646 ---- } { ! const char *fmt = GET_RTX_FORMAT (code); ! int i; for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) { *************** find_reloads_address_part (x, loc, class *** 5607,5613 **** opnum, type, ind_levels, 0); } ! push_reload (x, NULL_RTX, loc, NULL_PTR, class, mode, VOIDmode, 0, 0, opnum, type); } --- 5702,5708 ---- opnum, type, ind_levels, 0); } ! push_reload (x, NULL_RTX, loc, (rtx*) 0, class, mode, VOIDmode, 0, 0, opnum, type); } *************** find_reloads_subreg_address (x, force_re *** 5663,5677 **** if (force_replace || ! rtx_equal_p (tem, reg_equiv_mem[regno])) { ! int offset = SUBREG_WORD (x) * UNITS_PER_WORD; unsigned outer_size = GET_MODE_SIZE (GET_MODE (x)); unsigned inner_size = GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))); - if (BYTES_BIG_ENDIAN) - { - offset += MIN (inner_size, UNITS_PER_WORD); - offset -= MIN (outer_size, UNITS_PER_WORD); - } XEXP (tem, 0) = plus_constant (XEXP (tem, 0), offset); PUT_MODE (tem, GET_MODE (x)); --- 5758,5767 ---- if (force_replace || ! rtx_equal_p (tem, reg_equiv_mem[regno])) { ! int offset = SUBREG_BYTE (x); unsigned outer_size = GET_MODE_SIZE (GET_MODE (x)); unsigned inner_size = GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))); XEXP (tem, 0) = plus_constant (XEXP (tem, 0), offset); PUT_MODE (tem, GET_MODE (x)); *************** void *** 5728,5747 **** subst_reloads (insn) rtx insn; { ! register int i; for (i = 0; i < n_replacements; i++) { ! register struct replacement *r = &replacements[i]; ! register rtx reloadreg = rld[r->what].reg_rtx; if (reloadreg) { /* If we're replacing a LABEL_REF with a register, add a REG_LABEL note to indicate to flow which label this register refers to. */ if (GET_CODE (*r->where) == LABEL_REF && GET_CODE (insn) == JUMP_INSN) ! REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_LABEL, XEXP (*r->where, 0), REG_NOTES (insn)); --- 5818,5863 ---- subst_reloads (insn) rtx insn; { ! int i; for (i = 0; i < n_replacements; i++) { ! struct replacement *r = &replacements[i]; ! rtx reloadreg = rld[r->what].reg_rtx; if (reloadreg) { + #ifdef ENABLE_CHECKING + /* Internal consistency test. Check that we don't modify + anything in the equivalence arrays. Whenever something from + those arrays needs to be reloaded, it must be unshared before + being substituted into; the equivalence must not be modified. + Otherwise, if the equivalence is used after that, it will + have been modified, and the thing substituted (probably a + register) is likely overwritten and not a usable equivalence. */ + int check_regno; + + for (check_regno = 0; check_regno < max_regno; check_regno++) + { + #define CHECK_MODF(ARRAY) \ + if (ARRAY[check_regno] \ + && loc_mentioned_in_p (r->where, \ + ARRAY[check_regno])) \ + abort () + + CHECK_MODF (reg_equiv_constant); + CHECK_MODF (reg_equiv_memory_loc); + CHECK_MODF (reg_equiv_address); + CHECK_MODF (reg_equiv_mem); + #undef CHECK_MODF + } + #endif /* ENABLE_CHECKING */ + /* If we're replacing a LABEL_REF with a register, add a REG_LABEL note to indicate to flow which label this register refers to. */ if (GET_CODE (*r->where) == LABEL_REF && GET_CODE (insn) == JUMP_INSN) ! REG_NOTES (insn) = gen_rtx_INSN_LIST (REG_LABEL, XEXP (*r->where, 0), REG_NOTES (insn)); *************** subst_reloads (insn) *** 5763,5770 **** *r->subreg_loc = SUBREG_REG (reloadreg); else { *r->where = SUBREG_REG (reloadreg); ! SUBREG_WORD (*r->subreg_loc) += SUBREG_WORD (reloadreg); } } else --- 5879,5896 ---- *r->subreg_loc = SUBREG_REG (reloadreg); else { + int final_offset = + SUBREG_BYTE (*r->subreg_loc) + SUBREG_BYTE (reloadreg); + + /* When working with SUBREGs the rule is that the byte + offset must be a multiple of the SUBREG's mode. */ + final_offset = (final_offset / + GET_MODE_SIZE (GET_MODE (*r->subreg_loc))); + final_offset = (final_offset * + GET_MODE_SIZE (GET_MODE (*r->subreg_loc))); + *r->where = SUBREG_REG (reloadreg); ! SUBREG_BYTE (*r->subreg_loc) = final_offset; } } else *************** subst_reloads (insn) *** 5776,5821 **** } } ! /* Make a copy of any replacements being done into X and move those copies ! to locations in Y, a copy of X. We only look at the highest level of ! the RTL. */ void copy_replacements (x, y) ! rtx x; ! rtx y; { - int i, j; - enum rtx_code code = GET_CODE (x); - const char *fmt = GET_RTX_FORMAT (code); - struct replacement *r; - /* We can't support X being a SUBREG because we might then need to know its location if something inside it was replaced. */ ! if (code == SUBREG) abort (); ! for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) ! if (fmt[i] == 'e') ! for (j = 0; j < n_replacements; j++) { ! if (replacements[j].subreg_loc == &XEXP (x, i)) ! { ! r = &replacements[n_replacements++]; ! r->where = replacements[j].where; ! r->subreg_loc = &XEXP (y, i); ! r->what = replacements[j].what; ! r->mode = replacements[j].mode; ! } ! else if (replacements[j].where == &XEXP (x, i)) ! { ! r = &replacements[n_replacements++]; ! r->where = &XEXP (y, i); ! r->subreg_loc = 0; ! r->what = replacements[j].what; ! r->mode = replacements[j].mode; ! } } } /* Change any replacements being done to *X to be done to *Y */ --- 5902,5968 ---- } } ! /* Make a copy of any replacements being done into X and move those ! copies to locations in Y, a copy of X. */ void copy_replacements (x, y) ! rtx x, y; { /* We can't support X being a SUBREG because we might then need to know its location if something inside it was replaced. */ ! if (GET_CODE (x) == SUBREG) abort (); ! copy_replacements_1 (&x, &y, n_replacements); ! } ! ! static void ! copy_replacements_1 (px, py, orig_replacements) ! rtx *px; ! rtx *py; ! int orig_replacements; ! { ! int i, j; ! rtx x, y; ! struct replacement *r; ! enum rtx_code code; ! const char *fmt; ! ! for (j = 0; j < orig_replacements; j++) ! { ! if (replacements[j].subreg_loc == px) { ! r = &replacements[n_replacements++]; ! r->where = replacements[j].where; ! r->subreg_loc = py; ! r->what = replacements[j].what; ! r->mode = replacements[j].mode; } + else if (replacements[j].where == px) + { + r = &replacements[n_replacements++]; + r->where = py; + r->subreg_loc = 0; + r->what = replacements[j].what; + r->mode = replacements[j].mode; + } + } + + x = *px; + y = *py; + code = GET_CODE (x); + fmt = GET_RTX_FORMAT (code); + + for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) + { + if (fmt[i] == 'e') + copy_replacements_1 (&XEXP (x, i), &XEXP (y, i), orig_replacements); + else if (fmt[i] == 'E') + for (j = XVECLEN (x, i); --j >= 0; ) + copy_replacements_1 (&XVECEXP (x, i, j), &XVECEXP (y, i, j), + orig_replacements); + } } /* Change any replacements being done to *X to be done to *Y */ *************** find_replacement (loc) *** 5865,5876 **** if (GET_CODE (reloadreg) == REG) return gen_rtx_REG (GET_MODE (*loc), ! REGNO (reloadreg) + SUBREG_WORD (*loc)); else if (GET_MODE (reloadreg) == GET_MODE (*loc)) return reloadreg; else ! return gen_rtx_SUBREG (GET_MODE (*loc), SUBREG_REG (reloadreg), ! SUBREG_WORD (reloadreg) + SUBREG_WORD (*loc)); } } --- 6012,6035 ---- if (GET_CODE (reloadreg) == REG) return gen_rtx_REG (GET_MODE (*loc), ! (REGNO (reloadreg) + ! subreg_regno_offset (REGNO (SUBREG_REG (*loc)), ! GET_MODE (SUBREG_REG (*loc)), ! SUBREG_BYTE (*loc), ! GET_MODE (*loc)))); else if (GET_MODE (reloadreg) == GET_MODE (*loc)) return reloadreg; else ! { ! int final_offset = SUBREG_BYTE (reloadreg) + SUBREG_BYTE (*loc); ! ! /* When working with SUBREGs the rule is that the byte ! offset must be a multiple of the SUBREG's mode. */ ! final_offset = (final_offset / GET_MODE_SIZE (GET_MODE (*loc))); ! final_offset = (final_offset * GET_MODE_SIZE (GET_MODE (*loc))); ! return gen_rtx_SUBREG (GET_MODE (*loc), SUBREG_REG (reloadreg), ! final_offset); ! } } } *************** refers_to_regno_for_reload_p (regno, end *** 5928,5934 **** if (reg_equiv_memory_loc[r]) return refers_to_regno_for_reload_p (regno, endregno, reg_equiv_memory_loc[r], ! NULL_PTR); if (reg_equiv_constant[r]) return 0; --- 6087,6093 ---- if (reg_equiv_memory_loc[r]) return refers_to_regno_for_reload_p (regno, endregno, reg_equiv_memory_loc[r], ! (rtx*) 0); if (reg_equiv_constant[r]) return 0; *************** refers_to_regno_for_reload_p (regno, end *** 5947,5953 **** if (GET_CODE (SUBREG_REG (x)) == REG && REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER) { ! unsigned int inner_regno = REGNO (SUBREG_REG (x)) + SUBREG_WORD (x); unsigned int inner_endregno = inner_regno + (inner_regno < FIRST_PSEUDO_REGISTER ? HARD_REGNO_NREGS (regno, GET_MODE (x)) : 1); --- 6106,6112 ---- if (GET_CODE (SUBREG_REG (x)) == REG && REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER) { ! unsigned int inner_regno = subreg_regno (x); unsigned int inner_endregno = inner_regno + (inner_regno < FIRST_PSEUDO_REGISTER ? HARD_REGNO_NREGS (regno, GET_MODE (x)) : 1); *************** refers_to_regno_for_reload_p (regno, end *** 6005,6011 **** } else if (fmt[i] == 'E') { ! register int j; for (j = XVECLEN (x, i) - 1; j >= 0; j--) if (loc != &XVECEXP (x, i, j) && refers_to_regno_for_reload_p (regno, endregno, --- 6164,6170 ---- } else if (fmt[i] == 'E') { ! int j; for (j = XVECLEN (x, i) - 1; j >= 0; j--) if (loc != &XVECEXP (x, i, j) && refers_to_regno_for_reload_p (regno, endregno, *************** refers_to_regno_for_reload_p (regno, end *** 6022,6028 **** contains a MEM (we don't bother checking for memory addresses that can't conflict because we expect this to be a rare case. ! This function is similar to reg_overlap_mention_p in rtlanal.c except that we look at equivalences for pseudos that didn't get hard registers. */ int --- 6181,6187 ---- contains a MEM (we don't bother checking for memory addresses that can't conflict because we expect this to be a rare case. ! This function is similar to reg_overlap_mentioned_p in rtlanal.c except that we look at equivalences for pseudos that didn't get hard registers. */ int *************** reg_overlap_mentioned_for_reload_p (x, i *** 6032,6038 **** int regno, endregno; /* Overly conservative. */ ! if (GET_CODE (x) == STRICT_LOW_PART) x = XEXP (x, 0); /* If either argument is a constant, then modifying X can not affect IN. */ --- 6191,6198 ---- int regno, endregno; /* Overly conservative. */ ! if (GET_CODE (x) == STRICT_LOW_PART ! || GET_RTX_CLASS (GET_CODE (x)) == 'a') x = XEXP (x, 0); /* If either argument is a constant, then modifying X can not affect IN. */ *************** reg_overlap_mentioned_for_reload_p (x, i *** 6042,6048 **** { regno = REGNO (SUBREG_REG (x)); if (regno < FIRST_PSEUDO_REGISTER) ! regno += SUBREG_WORD (x); } else if (GET_CODE (x) == REG) { --- 6202,6211 ---- { regno = REGNO (SUBREG_REG (x)); if (regno < FIRST_PSEUDO_REGISTER) ! regno += subreg_regno_offset (REGNO (SUBREG_REG (x)), ! GET_MODE (SUBREG_REG (x)), ! SUBREG_BYTE (x), ! GET_MODE (x)); } else if (GET_CODE (x) == REG) { *************** reg_overlap_mentioned_for_reload_p (x, i *** 6065,6077 **** else if (GET_CODE (x) == SCRATCH || GET_CODE (x) == PC || GET_CODE (x) == CC0) return reg_mentioned_p (x, in); else abort (); endregno = regno + (regno < FIRST_PSEUDO_REGISTER ? HARD_REGNO_NREGS (regno, GET_MODE (x)) : 1); ! return refers_to_regno_for_reload_p (regno, endregno, in, NULL_PTR); } /* Return nonzero if anything in X contains a MEM. Look also for pseudo --- 6228,6243 ---- else if (GET_CODE (x) == SCRATCH || GET_CODE (x) == PC || GET_CODE (x) == CC0) return reg_mentioned_p (x, in); + else if (GET_CODE (x) == PLUS) + return (reg_overlap_mentioned_for_reload_p (XEXP (x, 0), in) + || reg_overlap_mentioned_for_reload_p (XEXP (x, 1), in)); else abort (); endregno = regno + (regno < FIRST_PSEUDO_REGISTER ? HARD_REGNO_NREGS (regno, GET_MODE (x)) : 1); ! return refers_to_regno_for_reload_p (regno, endregno, in, (rtx*) 0); } /* Return nonzero if anything in X contains a MEM. Look also for pseudo *************** refers_to_mem_for_reload_p (x) *** 6130,6147 **** rtx find_equiv_reg (goal, insn, class, other, reload_reg_p, goalreg, mode) ! register rtx goal; rtx insn; enum reg_class class; ! register int other; short *reload_reg_p; int goalreg; enum machine_mode mode; { ! register rtx p = insn; rtx goaltry, valtry, value, where; ! register rtx pat; ! register int regno = -1; int valueno; int goal_mem = 0; int goal_const = 0; --- 6296,6313 ---- rtx find_equiv_reg (goal, insn, class, other, reload_reg_p, goalreg, mode) ! rtx goal; rtx insn; enum reg_class class; ! int other; short *reload_reg_p; int goalreg; enum machine_mode mode; { ! rtx p = insn; rtx goaltry, valtry, value, where; ! rtx pat; ! int regno = -1; int valueno; int goal_mem = 0; int goal_const = 0; *************** find_equiv_reg (goal, insn, class, other *** 6326,6332 **** && refers_to_regno_for_reload_p (valueno, (valueno + HARD_REGNO_NREGS (valueno, mode)), ! goal, NULL_PTR)) return 0; /* Reject registers that overlap GOAL. */ --- 6492,6498 ---- && refers_to_regno_for_reload_p (valueno, (valueno + HARD_REGNO_NREGS (valueno, mode)), ! goal, (rtx*) 0)) return 0; /* Reject registers that overlap GOAL. */ *************** find_equiv_reg (goal, insn, class, other *** 6404,6416 **** for (i = 0; i < valuenregs; ++i) if (call_used_regs[valueno + i]) return 0; - } - #ifdef NON_SAVING_SETJMP ! if (NON_SAVING_SETJMP && GET_CODE (p) == NOTE ! && NOTE_LINE_NUMBER (p) == NOTE_INSN_SETJMP) ! return 0; #endif if (INSN_P (p)) { --- 6570,6580 ---- for (i = 0; i < valuenregs; ++i) if (call_used_regs[valueno + i]) return 0; #ifdef NON_SAVING_SETJMP ! if (NON_SAVING_SETJMP && find_reg_note (p, REG_SETJMP, NULL)) ! return 0; #endif + } if (INSN_P (p)) { *************** find_equiv_reg (goal, insn, class, other *** 6429,6435 **** pat = COND_EXEC_CODE (pat); if (GET_CODE (pat) == SET || GET_CODE (pat) == CLOBBER) { ! register rtx dest = SET_DEST (pat); while (GET_CODE (dest) == SUBREG || GET_CODE (dest) == ZERO_EXTRACT || GET_CODE (dest) == SIGN_EXTRACT --- 6593,6599 ---- pat = COND_EXEC_CODE (pat); if (GET_CODE (pat) == SET || GET_CODE (pat) == CLOBBER) { ! rtx dest = SET_DEST (pat); while (GET_CODE (dest) == SUBREG || GET_CODE (dest) == ZERO_EXTRACT || GET_CODE (dest) == SIGN_EXTRACT *************** find_equiv_reg (goal, insn, class, other *** 6437,6443 **** dest = XEXP (dest, 0); if (GET_CODE (dest) == REG) { ! register int xregno = REGNO (dest); int xnregs; if (REGNO (dest) < FIRST_PSEUDO_REGISTER) xnregs = HARD_REGNO_NREGS (xregno, GET_MODE (dest)); --- 6601,6607 ---- dest = XEXP (dest, 0); if (GET_CODE (dest) == REG) { ! int xregno = REGNO (dest); int xnregs; if (REGNO (dest) < FIRST_PSEUDO_REGISTER) xnregs = HARD_REGNO_NREGS (xregno, GET_MODE (dest)); *************** find_equiv_reg (goal, insn, class, other *** 6465,6479 **** } else if (GET_CODE (pat) == PARALLEL) { ! register int i; for (i = XVECLEN (pat, 0) - 1; i >= 0; i--) { ! register rtx v1 = XVECEXP (pat, 0, i); if (GET_CODE (v1) == COND_EXEC) v1 = COND_EXEC_CODE (v1); if (GET_CODE (v1) == SET || GET_CODE (v1) == CLOBBER) { ! register rtx dest = SET_DEST (v1); while (GET_CODE (dest) == SUBREG || GET_CODE (dest) == ZERO_EXTRACT || GET_CODE (dest) == SIGN_EXTRACT --- 6629,6643 ---- } else if (GET_CODE (pat) == PARALLEL) { ! int i; for (i = XVECLEN (pat, 0) - 1; i >= 0; i--) { ! rtx v1 = XVECEXP (pat, 0, i); if (GET_CODE (v1) == COND_EXEC) v1 = COND_EXEC_CODE (v1); if (GET_CODE (v1) == SET || GET_CODE (v1) == CLOBBER) { ! rtx dest = SET_DEST (v1); while (GET_CODE (dest) == SUBREG || GET_CODE (dest) == ZERO_EXTRACT || GET_CODE (dest) == SIGN_EXTRACT *************** find_equiv_reg (goal, insn, class, other *** 6481,6487 **** dest = XEXP (dest, 0); if (GET_CODE (dest) == REG) { ! register int xregno = REGNO (dest); int xnregs; if (REGNO (dest) < FIRST_PSEUDO_REGISTER) xnregs = HARD_REGNO_NREGS (xregno, GET_MODE (dest)); --- 6645,6651 ---- dest = XEXP (dest, 0); if (GET_CODE (dest) == REG) { ! int xregno = REGNO (dest); int xnregs; if (REGNO (dest) < FIRST_PSEUDO_REGISTER) xnregs = HARD_REGNO_NREGS (xregno, GET_MODE (dest)); *************** find_equiv_reg (goal, insn, class, other *** 6523,6533 **** pat = XEXP (link, 0); if (GET_CODE (pat) == CLOBBER) { ! register rtx dest = SET_DEST (pat); if (GET_CODE (dest) == REG) { ! register int xregno = REGNO (dest); int xnregs = HARD_REGNO_NREGS (xregno, GET_MODE (dest)); --- 6687,6697 ---- pat = XEXP (link, 0); if (GET_CODE (pat) == CLOBBER) { ! rtx dest = SET_DEST (pat); if (GET_CODE (dest) == REG) { ! int xregno = REGNO (dest); int xnregs = HARD_REGNO_NREGS (xregno, GET_MODE (dest)); *************** find_equiv_reg (goal, insn, class, other *** 6559,6571 **** If GOAL is a memory ref and its address is not constant, and this insn P increments a register used in GOAL, return 0. */ { ! register rtx link; for (link = REG_NOTES (p); link; link = XEXP (link, 1)) if (REG_NOTE_KIND (link) == REG_INC && GET_CODE (XEXP (link, 0)) == REG) { ! register int incno = REGNO (XEXP (link, 0)); if (incno < regno + nregs && incno >= regno) return 0; if (incno < valueno + valuenregs && incno >= valueno) --- 6723,6735 ---- If GOAL is a memory ref and its address is not constant, and this insn P increments a register used in GOAL, return 0. */ { ! rtx link; for (link = REG_NOTES (p); link; link = XEXP (link, 1)) if (REG_NOTE_KIND (link) == REG_INC && GET_CODE (XEXP (link, 0)) == REG) { ! int incno = REGNO (XEXP (link, 0)); if (incno < regno + nregs && incno >= regno) return 0; if (incno < valueno + valuenregs && incno >= valueno) *************** static int *** 6589,6601 **** find_inc_amount (x, inced) rtx x, inced; { ! register enum rtx_code code = GET_CODE (x); ! register const char *fmt; ! register int i; if (code == MEM) { ! register rtx addr = XEXP (x, 0); if ((GET_CODE (addr) == PRE_DEC || GET_CODE (addr) == POST_DEC || GET_CODE (addr) == PRE_INC --- 6753,6765 ---- find_inc_amount (x, inced) rtx x, inced; { ! enum rtx_code code = GET_CODE (x); ! const char *fmt; ! int i; if (code == MEM) { ! rtx addr = XEXP (x, 0); if ((GET_CODE (addr) == PRE_DEC || GET_CODE (addr) == POST_DEC || GET_CODE (addr) == PRE_INC *************** find_inc_amount (x, inced) *** 6619,6634 **** { if (fmt[i] == 'e') { ! register int tem = find_inc_amount (XEXP (x, i), inced); if (tem != 0) return tem; } if (fmt[i] == 'E') { ! register int j; for (j = XVECLEN (x, i) - 1; j >= 0; j--) { ! register int tem = find_inc_amount (XVECEXP (x, i, j), inced); if (tem != 0) return tem; } --- 6783,6798 ---- { if (fmt[i] == 'e') { ! int tem = find_inc_amount (XEXP (x, i), inced); if (tem != 0) return tem; } if (fmt[i] == 'E') { ! int j; for (j = XVECLEN (x, i) - 1; j >= 0; j--) { ! int tem = find_inc_amount (XVECEXP (x, i, j), inced); if (tem != 0) return tem; } *************** regno_clobbered_p (regno, insn, mode, se *** 6648,6661 **** enum machine_mode mode; int sets; { ! int nregs = HARD_REGNO_NREGS (regno, mode); ! int endregno = regno + nregs; if ((GET_CODE (PATTERN (insn)) == CLOBBER || (sets && GET_CODE (PATTERN (insn)) == SET)) && GET_CODE (XEXP (PATTERN (insn), 0)) == REG) { ! int test = REGNO (XEXP (PATTERN (insn), 0)); return test >= regno && test < endregno; } --- 6812,6825 ---- enum machine_mode mode; int sets; { ! unsigned int nregs = HARD_REGNO_NREGS (regno, mode); ! unsigned int endregno = regno + nregs; if ((GET_CODE (PATTERN (insn)) == CLOBBER || (sets && GET_CODE (PATTERN (insn)) == SET)) && GET_CODE (XEXP (PATTERN (insn), 0)) == REG) { ! unsigned int test = REGNO (XEXP (PATTERN (insn), 0)); return test >= regno && test < endregno; } *************** regno_clobbered_p (regno, insn, mode, se *** 6671,6677 **** || (sets && GET_CODE (PATTERN (insn)) == SET)) && GET_CODE (XEXP (elt, 0)) == REG) { ! int test = REGNO (XEXP (elt, 0)); if (test >= regno && test < endregno) return 1; --- 6835,6841 ---- || (sets && GET_CODE (PATTERN (insn)) == SET)) && GET_CODE (XEXP (elt, 0)) == REG) { ! unsigned int test = REGNO (XEXP (elt, 0)); if (test >= regno && test < endregno) return 1; *************** regno_clobbered_p (regno, insn, mode, se *** 6682,6688 **** return 0; } ! static const char *reload_when_needed_name[] = { "RELOAD_FOR_INPUT", "RELOAD_FOR_OUTPUT", --- 6846,6852 ---- return 0; } ! static const char *const reload_when_needed_name[] = { "RELOAD_FOR_INPUT", "RELOAD_FOR_OUTPUT", diff -Nrc3pad gcc-3.0.4/gcc/reload.h gcc-3.1/gcc/reload.h *** gcc-3.0.4/gcc/reload.h Sun Jan 7 02:26:50 2001 --- gcc-3.1/gcc/reload.h Thu Oct 11 12:43:42 2001 *************** *** 2,23 **** Copyright (C) 1987, 1991, 1992, 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* If secondary reloads are the same for inputs and outputs, define those --- 2,23 ---- Copyright (C) 1987, 1991, 1992, 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* If secondary reloads are the same for inputs and outputs, define those *************** enum reload_type *** 82,88 **** RELOAD_OTHER, RELOAD_FOR_OTHER_ADDRESS }; ! #ifdef MAX_INSN_CODE /* Each reload is recorded with a structure like this. */ struct reload { --- 82,88 ---- RELOAD_OTHER, RELOAD_FOR_OTHER_ADDRESS }; ! #ifdef GCC_INSN_CODES_H /* Each reload is recorded with a structure like this. */ struct reload { *************** extern int reload_first_uid; *** 183,189 **** /* Nonzero if indirect addressing is supported when the innermost MEM is of the form (MEM (SYMBOL_REF sym)). It is assumed that the level to ! which these are valid is the same as spill_indirect_levels, above. */ extern char indirect_symref_ok; --- 183,189 ---- /* Nonzero if indirect addressing is supported when the innermost MEM is of the form (MEM (SYMBOL_REF sym)). It is assumed that the level to ! which these are valid is the same as spill_indirect_levels, above. */ extern char indirect_symref_ok; *************** extern char double_reg_address_ok; *** 192,205 **** extern int num_not_at_initial_offset; - #ifdef MAX_INSN_CODE - /* These arrays record the insn_code of insns that may be needed to - perform input and output reloads of special objects. They provide a - place to pass a scratch register. */ - extern enum insn_code reload_in_optab[]; - extern enum insn_code reload_out_optab[]; - #endif - struct needs { /* [0] is normal, [1] is nongroup. */ --- 192,197 ---- *************** extern int remove_address_replacements P *** 286,292 **** autoincrement and autodecrement. */ extern int operands_match_p PARAMS ((rtx, rtx)); ! /* Return 1 if altering OP will not modify the value of CLOBBER. */ extern int safe_from_earlyclobber PARAMS ((rtx, rtx)); /* Search the body of INSN for values that need reloading and record them --- 278,284 ---- autoincrement and autodecrement. */ extern int operands_match_p PARAMS ((rtx, rtx)); ! /* Return 1 if altering OP will not modify the value of CLOBBER. */ extern int safe_from_earlyclobber PARAMS ((rtx, rtx)); /* Search the body of INSN for values that need reloading and record them *************** extern int regno_clobbered_p PARAMS ((un *** 339,348 **** int)); /* Return 1 if X is an operand of an insn that is being earlyclobbered. */ ! int earlyclobber_operand_p PARAMS ((rtx)); /* Functions in reload1.c: */ extern int reloads_conflict PARAMS ((int, int)); /* Initialize the reload pass once per compilation. */ --- 331,346 ---- int)); /* Return 1 if X is an operand of an insn that is being earlyclobbered. */ ! extern int earlyclobber_operand_p PARAMS ((rtx)); ! ! /* Record one reload that needs to be performed. */ ! extern int push_reload PARAMS ((rtx, rtx, rtx *, rtx *, enum reg_class, ! enum machine_mode, enum machine_mode, ! int, int, int, enum reload_type)); /* Functions in reload1.c: */ + extern void reload_cse_regs PARAMS ((rtx)); extern int reloads_conflict PARAMS ((int, int)); /* Initialize the reload pass once per compilation. */ diff -Nrc3pad gcc-3.0.4/gcc/reload1.c gcc-3.1/gcc/reload1.c *** gcc-3.0.4/gcc/reload1.c Mon Nov 19 22:04:30 2001 --- gcc-3.1/gcc/reload1.c Mon Apr 29 21:22:47 2002 *************** *** 1,23 **** /* Reload pseudo regs into hard regs for insns that require hard regs. Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" #include "system.h" --- 1,23 ---- /* Reload pseudo regs into hard regs for insns that require hard regs. Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" #include "system.h" *************** Boston, MA 02111-1307, USA. */ *** 31,36 **** --- 31,37 ---- #include "flags.h" #include "function.h" #include "expr.h" + #include "optabs.h" #include "regs.h" #include "basic-block.h" #include "reload.h" *************** Boston, MA 02111-1307, USA. */ *** 39,48 **** #include "cselib.h" #include "real.h" #include "toplev.h" ! ! #if !defined PREFERRED_STACK_BOUNDARY && defined STACK_BOUNDARY ! #define PREFERRED_STACK_BOUNDARY STACK_BOUNDARY ! #endif /* This file contains the reload pass of the compiler, which is run after register allocation has been done. It checks that --- 40,47 ---- #include "cselib.h" #include "real.h" #include "toplev.h" ! #include "except.h" ! #include "tree.h" /* This file contains the reload pass of the compiler, which is run after register allocation has been done. It checks that *************** static char spill_indirect_levels; *** 227,233 **** /* Nonzero if indirect addressing is supported when the innermost MEM is of the form (MEM (SYMBOL_REF sym)). It is assumed that the level to ! which these are valid is the same as spill_indirect_levels, above. */ char indirect_symref_ok; /* Nonzero if an address (plus (reg frame_pointer) (reg ...)) is valid. */ --- 226,232 ---- /* Nonzero if indirect addressing is supported when the innermost MEM is of the form (MEM (SYMBOL_REF sym)). It is assumed that the level to ! which these are valid is the same as spill_indirect_levels, above. */ char indirect_symref_ok; /* Nonzero if an address (plus (reg frame_pointer) (reg ...)) is valid. */ *************** static struct elim_table *reg_eliminate *** 325,334 **** /* This is an intermediate structure to initialize the table. It has exactly the members provided by ELIMINABLE_REGS. */ ! static struct elim_table_1 { ! int from; ! int to; } reg_eliminate_1[] = /* If a set of eliminable registers was specified, define the table from it. --- 324,333 ---- /* This is an intermediate structure to initialize the table. It has exactly the members provided by ELIMINABLE_REGS. */ ! static const struct elim_table_1 { ! const int from; ! const int to; } reg_eliminate_1[] = /* If a set of eliminable registers was specified, define the table from it. *************** static int (*offsets_at)[NUM_ELIMINABLE_ *** 368,376 **** static int num_labels; ! static void replace_pseudos_in_call_usage PARAMS((rtx *, ! enum machine_mode, ! rtx)); static void maybe_fix_stack_asms PARAMS ((void)); static void copy_reloads PARAMS ((struct insn_chain *)); static void calculate_needs_all_insns PARAMS ((int)); --- 367,375 ---- static int num_labels; ! static void replace_pseudos_in_call_usage PARAMS ((rtx *, ! enum machine_mode, ! rtx)); static void maybe_fix_stack_asms PARAMS ((void)); static void copy_reloads PARAMS ((struct insn_chain *)); static void calculate_needs_all_insns PARAMS ((int)); *************** static void failed_reload PARAMS ((rtx, *** 461,466 **** --- 460,466 ---- static int set_reload_reg PARAMS ((int, int)); static void reload_cse_delete_noop_set PARAMS ((rtx, rtx)); static void reload_cse_simplify PARAMS ((rtx)); + void fixup_abnormal_edges PARAMS ((void)); extern void dump_needs PARAMS ((struct insn_chain *)); /* Initialize the reload pass once per compilation. */ *************** extern void dump_needs PARAMS ((struct *** 468,480 **** void init_reload () { ! register int i; /* Often (MEM (REG n)) is still valid even if (REG n) is put on the stack. Set spill_indirect_levels to the number of levels such addressing is permitted, zero if it is not permitted at all. */ ! register rtx tem = gen_rtx_MEM (Pmode, gen_rtx_PLUS (Pmode, gen_rtx_REG (Pmode, --- 468,480 ---- void init_reload () { ! int i; /* Often (MEM (REG n)) is still valid even if (REG n) is put on the stack. Set spill_indirect_levels to the number of levels such addressing is permitted, zero if it is not permitted at all. */ ! rtx tem = gen_rtx_MEM (Pmode, gen_rtx_PLUS (Pmode, gen_rtx_REG (Pmode, *************** replace_pseudos_in_call_usage (loc, mem_ *** 601,607 **** code = GET_CODE (x); if (code == REG) { ! int regno = REGNO (x); if (regno < FIRST_PSEUDO_REGISTER) return; --- 601,607 ---- code = GET_CODE (x); if (code == REG) { ! unsigned int regno = REGNO (x); if (regno < FIRST_PSEUDO_REGISTER) return; *************** reload (first, global) *** 673,685 **** rtx first; int global; { ! register int i; ! register rtx insn; ! register struct elim_table *ep; /* The two pointers used to track the true location of the memory used for label offsets. */ ! char *real_known_ptr = NULL_PTR; int (*real_at_ptr)[NUM_ELIMINABLE_REGS]; /* Make sure even insns with volatile mem refs are recognizable. */ --- 673,685 ---- rtx first; int global; { ! int i; ! rtx insn; ! struct elim_table *ep; /* The two pointers used to track the true location of the memory used for label offsets. */ ! char *real_known_ptr = NULL; int (*real_at_ptr)[NUM_ELIMINABLE_REGS]; /* Make sure even insns with volatile mem refs are recognizable. */ *************** reload (first, global) *** 691,697 **** /* Make sure that the last insn in the chain is not something that needs reloading. */ ! emit_note (NULL_PTR, NOTE_INSN_DELETED); /* Enable find_equiv_reg to distinguish insns made by reload. */ reload_first_uid = get_max_uid (); --- 691,697 ---- /* Make sure that the last insn in the chain is not something that needs reloading. */ ! emit_note (NULL, NOTE_INSN_DELETED); /* Enable find_equiv_reg to distinguish insns made by reload. */ reload_first_uid = get_max_uid (); *************** reload (first, global) *** 734,740 **** be substituted eventually by altering the REG-rtx's. */ reg_equiv_constant = (rtx *) xcalloc (max_regno, sizeof (rtx)); - reg_equiv_memory_loc = (rtx *) xcalloc (max_regno, sizeof (rtx)); reg_equiv_mem = (rtx *) xcalloc (max_regno, sizeof (rtx)); reg_equiv_init = (rtx *) xcalloc (max_regno, sizeof (rtx)); reg_equiv_address = (rtx *) xcalloc (max_regno, sizeof (rtx)); --- 734,739 ---- *************** reload (first, global) *** 752,758 **** Also find all paradoxical subregs and find largest such for each pseudo. On machines with small register classes, record hard registers that are used for user variables. These can never be used for spills. ! Also look for a "constant" NOTE_INSN_SETJMP. This means that all caller-saved registers must be marked live. */ num_eliminable_invariants = 0; --- 751,757 ---- Also find all paradoxical subregs and find largest such for each pseudo. On machines with small register classes, record hard registers that are used for user variables. These can never be used for spills. ! Also look for a "constant" REG_SETJMP. This means that all caller-saved registers must be marked live. */ num_eliminable_invariants = 0; *************** reload (first, global) *** 767,774 **** && GET_MODE (insn) != VOIDmode) PUT_MODE (insn, VOIDmode); ! if (GET_CODE (insn) == NOTE && CONST_CALL_P (insn) ! && NOTE_LINE_NUMBER (insn) == NOTE_INSN_SETJMP) for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) if (! call_used_regs[i]) regs_ever_live[i] = 1; --- 766,773 ---- && GET_MODE (insn) != VOIDmode) PUT_MODE (insn, VOIDmode); ! if (GET_CODE (insn) == CALL_INSN ! && find_reg_note (insn, REG_SETJMP, NULL)) for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) if (! call_used_regs[i]) regs_ever_live[i] = 1; *************** reload (first, global) *** 780,786 **** #ifdef LEGITIMATE_PIC_OPERAND_P && (! function_invariant_p (XEXP (note, 0)) || ! flag_pic ! || LEGITIMATE_PIC_OPERAND_P (XEXP (note, 0))) #endif ) { --- 779,789 ---- #ifdef LEGITIMATE_PIC_OPERAND_P && (! function_invariant_p (XEXP (note, 0)) || ! flag_pic ! /* A function invariant is often CONSTANT_P but may ! include a register. We promise to only pass ! CONSTANT_P objects to LEGITIMATE_PIC_OPERAND_P. */ ! || (CONSTANT_P (XEXP (note, 0)) ! && LEGITIMATE_PIC_OPERAND_P (XEXP (note, 0)))) #endif ) { *************** reload (first, global) *** 788,801 **** i = REGNO (SET_DEST (set)); if (i > LAST_VIRTUAL_REGISTER) { ! if (GET_CODE (x) == MEM) { ! /* If the operand is a PLUS, the MEM may be shared, ! so make sure we have an unshared copy here. */ ! if (GET_CODE (XEXP (x, 0)) == PLUS) ! x = copy_rtx (x); ! ! reg_equiv_memory_loc[i] = x; } else if (function_invariant_p (x)) { --- 791,807 ---- i = REGNO (SET_DEST (set)); if (i > LAST_VIRTUAL_REGISTER) { ! /* It can happen that a REG_EQUIV note contains a MEM ! that is not a legitimate memory operand. As later ! stages of reload assume that all addresses found ! in the reg_equiv_* arrays were originally legitimate, ! we ignore such REG_EQUIV notes. */ ! if (memory_operand (x, VOIDmode)) { ! /* Always unshare the equivalence, so we can ! substitute into this insn without touching the ! equivalence. */ ! reg_equiv_memory_loc[i] = copy_rtx (x); } else if (function_invariant_p (x)) { *************** reload (first, global) *** 920,926 **** /* Round size of stack frame to stack_alignment_needed. This must be done here because the stack size may be a part of the offset computation for register elimination, and there might have been new stack slots ! created in the last iteration of this loop. */ if (cfun->stack_alignment_needed) assign_stack_local (BLKmode, 0, cfun->stack_alignment_needed); --- 926,932 ---- /* Round size of stack frame to stack_alignment_needed. This must be done here because the stack size may be a part of the offset computation for register elimination, and there might have been new stack slots ! created in the last iteration of this loop. */ if (cfun->stack_alignment_needed) assign_stack_local (BLKmode, 0, cfun->stack_alignment_needed); *************** reload (first, global) *** 1071,1079 **** for (list = reg_equiv_init[i]; list; list = XEXP (list, 1)) { rtx equiv_insn = XEXP (list, 0); ! if (GET_CODE (equiv_insn) == NOTE) ! continue; ! if (reg_set_p (regno_reg_rtx[i], PATTERN (equiv_insn))) delete_dead_insn (equiv_insn); else { --- 1077,1092 ---- for (list = reg_equiv_init[i]; list; list = XEXP (list, 1)) { rtx equiv_insn = XEXP (list, 0); ! ! /* If we already deleted the insn or if it may trap, we can't ! delete it. The latter case shouldn't happen, but can ! if an insn has a variable address, gets a REG_EH_REGION ! note added to it, and then gets converted into an load ! from a constant address. */ ! if (GET_CODE (equiv_insn) == NOTE ! || can_throw_internal (equiv_insn)) ! ; ! else if (reg_set_p (regno_reg_rtx[i], PATTERN (equiv_insn))) delete_dead_insn (equiv_insn); else { *************** reload (first, global) *** 1134,1149 **** for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++) { rtx addr = 0; - int in_struct = 0; - int is_scalar = 0; - int is_readonly = 0; - - if (reg_equiv_memory_loc[i]) - { - in_struct = MEM_IN_STRUCT_P (reg_equiv_memory_loc[i]); - is_scalar = MEM_SCALAR_P (reg_equiv_memory_loc[i]); - is_readonly = RTX_UNCHANGING_P (reg_equiv_memory_loc[i]); - } if (reg_equiv_mem[i]) addr = XEXP (reg_equiv_mem[i], 0); --- 1147,1152 ---- *************** reload (first, global) *** 1156,1170 **** if (reg_renumber[i] < 0) { rtx reg = regno_reg_rtx[i]; PUT_CODE (reg, MEM); XEXP (reg, 0) = addr; REG_USERVAR_P (reg) = 0; ! RTX_UNCHANGING_P (reg) = is_readonly; ! MEM_IN_STRUCT_P (reg) = in_struct; ! MEM_SCALAR_P (reg) = is_scalar; ! /* We have no alias information about this newly created ! MEM. */ ! MEM_ALIAS_SET (reg) = 0; } else if (reg_equiv_mem[i]) XEXP (reg_equiv_mem[i], 0) = addr; --- 1159,1176 ---- if (reg_renumber[i] < 0) { rtx reg = regno_reg_rtx[i]; + PUT_CODE (reg, MEM); XEXP (reg, 0) = addr; REG_USERVAR_P (reg) = 0; ! if (reg_equiv_memory_loc[i]) ! MEM_COPY_ATTRIBUTES (reg, reg_equiv_memory_loc[i]); ! else ! { ! RTX_UNCHANGING_P (reg) = MEM_IN_STRUCT_P (reg) ! = MEM_SCALAR_P (reg) = 0; ! MEM_ATTRS (reg) = 0; ! } } else if (reg_equiv_mem[i]) XEXP (reg_equiv_mem[i], 0) = addr; *************** reload (first, global) *** 1201,1209 **** && (GET_CODE (XEXP (PATTERN (insn), 0)) != REG || ! REG_FUNCTION_VALUE_P (XEXP (PATTERN (insn), 0))))) { ! PUT_CODE (insn, NOTE); ! NOTE_SOURCE_FILE (insn) = 0; ! NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED; continue; } --- 1207,1213 ---- && (GET_CODE (XEXP (PATTERN (insn), 0)) != REG || ! REG_FUNCTION_VALUE_P (XEXP (PATTERN (insn), 0))))) { ! delete_insn (insn); continue; } *************** reload (first, global) *** 1278,1283 **** --- 1282,1293 ---- /* Free all the insn_chain structures at once. */ obstack_free (&reload_obstack, reload_startobj); unused_insn_chains = 0; + fixup_abnormal_edges (); + + /* Replacing pseudos with their memory equivalents might have + created shared rtx. Subsequent passes would get confused + by this, so unshare everything here. */ + unshare_all_rtl_again (first); return failure; } *************** maybe_fix_stack_asms () *** 1364,1370 **** break; case 'p': ! cls = (int) reg_class_subunion[cls][(int) BASE_REG_CLASS]; break; case 'g': --- 1374,1381 ---- break; case 'p': ! cls = (int) reg_class_subunion[cls] ! [(int) MODE_BASE_REG_CLASS (VOIDmode)]; break; case 'g': *************** calculate_needs_all_insns (global) *** 1478,1486 **** && GET_CODE (SET_SRC (set)) == REG && REGNO (SET_SRC (set)) >= FIRST_PSEUDO_REGISTER) { ! PUT_CODE (insn, NOTE); ! NOTE_SOURCE_FILE (insn) = 0; ! NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED; /* Delete it from the reload chain */ if (chain->prev) chain->prev->next = next; --- 1489,1495 ---- && GET_CODE (SET_SRC (set)) == REG && REGNO (SET_SRC (set)) >= FIRST_PSEUDO_REGISTER) { ! delete_insn (insn); /* Delete it from the reload chain */ if (chain->prev) chain->prev->next = next; *************** reload_reg_class_lower (r1p, r2p) *** 1533,1540 **** const PTR r1p; const PTR r2p; { ! register int r1 = *(const short *) r1p, r2 = *(const short *) r2p; ! register int t; /* Consider required reloads before optional ones. */ t = rld[r1].optional - rld[r2].optional; --- 1542,1549 ---- const PTR r1p; const PTR r2p; { ! int r1 = *(const short *) r1p, r2 = *(const short *) r2p; ! int t; /* Consider required reloads before optional ones. */ t = rld[r1].optional - rld[r2].optional; *************** static void *** 1576,1582 **** count_pseudo (reg) int reg; { ! int n_refs = REG_N_REFS (reg); int r = reg_renumber[reg]; int nregs; --- 1585,1591 ---- count_pseudo (reg) int reg; { ! int freq = REG_FREQ (reg); int r = reg_renumber[reg]; int nregs; *************** count_pseudo (reg) *** 1589,1599 **** if (r < 0) abort (); ! spill_add_cost[r] += n_refs; nregs = HARD_REGNO_NREGS (r, PSEUDO_REGNO_MODE (reg)); while (nregs-- > 0) ! spill_cost[r + nregs] += n_refs; } /* Calculate the SPILL_COST and SPILL_ADD_COST arrays and determine the --- 1598,1608 ---- if (r < 0) abort (); ! spill_add_cost[r] += freq; nregs = HARD_REGNO_NREGS (r, PSEUDO_REGNO_MODE (reg)); while (nregs-- > 0) ! spill_cost[r + nregs] += freq; } /* Calculate the SPILL_COST and SPILL_ADD_COST arrays and determine the *************** count_spilled_pseudo (spilled, spilled_n *** 1663,1671 **** SET_REGNO_REG_SET (&spilled_pseudos, reg); ! spill_add_cost[r] -= REG_N_REFS (reg); while (nregs-- > 0) ! spill_cost[r + nregs] -= REG_N_REFS (reg); } /* Find reload register to use for reload number ORDER. */ --- 1672,1680 ---- SET_REGNO_REG_SET (&spilled_pseudos, reg); ! spill_add_cost[r] -= REG_FREQ (reg); while (nregs-- > 0) ! spill_cost[r + nregs] -= REG_FREQ (reg); } /* Find reload register to use for reload number ORDER. */ *************** delete_caller_save_insns () *** 1864,1880 **** struct insn_chain *next = c->next; rtx insn = c->insn; - if (insn == BLOCK_HEAD (c->block)) - BLOCK_HEAD (c->block) = NEXT_INSN (insn); - if (insn == BLOCK_END (c->block)) - BLOCK_END (c->block) = PREV_INSN (insn); if (c == reload_insn_chain) reload_insn_chain = next; ! ! if (NEXT_INSN (insn) != 0) ! PREV_INSN (NEXT_INSN (insn)) = PREV_INSN (insn); ! if (PREV_INSN (insn) != 0) ! NEXT_INSN (PREV_INSN (insn)) = NEXT_INSN (insn); if (next) next->prev = c->prev; --- 1873,1881 ---- struct insn_chain *next = c->next; rtx insn = c->insn; if (c == reload_insn_chain) reload_insn_chain = next; ! delete_insn (insn); if (next) next->prev = c->prev; *************** spill_failure (insn, class) *** 1899,1911 **** { static const char *const reg_class_names[] = REG_CLASS_NAMES; if (asm_noperands (PATTERN (insn)) >= 0) ! error_for_asm (insn, "Can't find a register in class `%s' while reloading `asm'.", reg_class_names[class]); else { ! error ("Unable to find a register to spill in class `%s'.", reg_class_names[class]); ! fatal_insn ("This is the insn:", insn); } } --- 1900,1912 ---- { static const char *const reg_class_names[] = REG_CLASS_NAMES; if (asm_noperands (PATTERN (insn)) >= 0) ! error_for_asm (insn, "can't find a register in class `%s' while reloading `asm'", reg_class_names[class]); else { ! error ("unable to find a register to spill in class `%s'", reg_class_names[class]); ! fatal_insn ("this is the insn:", insn); } } *************** delete_dead_insn (insn) *** 1943,1949 **** static void alter_reg (i, from_reg) ! register int i; int from_reg; { /* When outputting an inline function, this can happen --- 1944,1950 ---- static void alter_reg (i, from_reg) ! int i; int from_reg; { /* When outputting an inline function, this can happen *************** alter_reg (i, from_reg) *** 1969,1975 **** && reg_equiv_constant[i] == 0 && reg_equiv_memory_loc[i] == 0) { ! register rtx x; unsigned int inherent_size = PSEUDO_REGNO_BYTES (i); unsigned int total_size = MAX (inherent_size, reg_max_ref_width[i]); int adjust = 0; --- 1970,1976 ---- && reg_equiv_constant[i] == 0 && reg_equiv_memory_loc[i] == 0) { ! rtx x; unsigned int inherent_size = PSEUDO_REGNO_BYTES (i); unsigned int total_size = MAX (inherent_size, reg_max_ref_width[i]); int adjust = 0; *************** alter_reg (i, from_reg) *** 1997,2003 **** RTX_UNCHANGING_P (x) = RTX_UNCHANGING_P (regno_reg_rtx[i]); /* Nothing can alias this slot except this pseudo. */ ! MEM_ALIAS_SET (x) = new_alias_set (); } /* Reuse a stack slot if possible. */ --- 1998,2004 ---- RTX_UNCHANGING_P (x) = RTX_UNCHANGING_P (regno_reg_rtx[i]); /* Nothing can alias this slot except this pseudo. */ ! set_mem_alias_set (x, new_alias_set ()); } /* Reuse a stack slot if possible. */ *************** alter_reg (i, from_reg) *** 2031,2039 **** /* All pseudos mapped to this slot can alias each other. */ if (spill_stack_slot[from_reg]) ! MEM_ALIAS_SET (x) = MEM_ALIAS_SET (spill_stack_slot[from_reg]); else ! MEM_ALIAS_SET (x) = new_alias_set (); if (BYTES_BIG_ENDIAN) { --- 2032,2040 ---- /* All pseudos mapped to this slot can alias each other. */ if (spill_stack_slot[from_reg]) ! set_mem_alias_set (x, MEM_ALIAS_SET (spill_stack_slot[from_reg])); else ! set_mem_alias_set (x, new_alias_set ()); if (BYTES_BIG_ENDIAN) { *************** alter_reg (i, from_reg) *** 2043,2052 **** below. */ adjust = GET_MODE_SIZE (mode) - total_size; if (adjust) ! stack_slot = gen_rtx_MEM (mode_for_size (total_size * BITS_PER_UNIT, MODE_INT, 1), ! plus_constant (XEXP (x, 0), adjust)); } spill_stack_slot[from_reg] = stack_slot; --- 2044,2054 ---- below. */ adjust = GET_MODE_SIZE (mode) - total_size; if (adjust) ! stack_slot ! = adjust_address_nv (x, mode_for_size (total_size * BITS_PER_UNIT, MODE_INT, 1), ! adjust); } spill_stack_slot[from_reg] = stack_slot; *************** alter_reg (i, from_reg) *** 2060,2075 **** /* If we have any adjustment to make, or if the stack slot is the wrong mode, make a new stack slot. */ ! if (adjust != 0 || GET_MODE (x) != GET_MODE (regno_reg_rtx[i])) { ! rtx new = gen_rtx_MEM (GET_MODE (regno_reg_rtx[i]), ! plus_constant (XEXP (x, 0), adjust)); ! MEM_COPY_ATTRIBUTES (new, x); ! x = new; } ! /* Save the stack slot for later. */ reg_equiv_memory_loc[i] = x; } } --- 2062,2089 ---- /* If we have any adjustment to make, or if the stack slot is the wrong mode, make a new stack slot. */ ! x = adjust_address_nv (x, GET_MODE (regno_reg_rtx[i]), adjust); ! ! /* If we have a decl for the original register, set it for the ! memory. If this is a shared MEM, make a copy. */ ! if (REGNO_DECL (i)) { ! rtx decl = DECL_RTL_IF_SET (REGNO_DECL (i)); ! /* We can do this only for the DECLs home pseudo, not for ! any copies of it, since otherwise when the stack slot ! is reused, nonoverlapping_memrefs_p might think they ! cannot overlap. */ ! if (decl && GET_CODE (decl) == REG && REGNO (decl) == (unsigned) i) ! { ! if (from_reg != -1 && spill_stack_slot[from_reg] == x) ! x = copy_rtx (x); ! ! set_mem_expr (x, REGNO_DECL (i)); ! } } ! /* Save the stack slot for later. */ reg_equiv_memory_loc[i] = x; } } *************** void *** 2081,2087 **** mark_home_live (regno) int regno; { ! register int i, lim; i = reg_renumber[regno]; if (i < 0) --- 2095,2101 ---- mark_home_live (regno) int regno; { ! int i, lim; i = reg_renumber[regno]; if (i < 0) *************** eliminate_regs (x, mem_mode, insn) *** 2288,2293 **** --- 2302,2308 ---- { case CONST_INT: case CONST_DOUBLE: + case CONST_VECTOR: case CONST: case SYMBOL_REF: case CODE_LABEL: *************** eliminate_regs (x, mem_mode, insn) *** 2321,2328 **** return plus_constant (ep->to_rtx, ep->previous_offset); } ! else if (reg_renumber[regno] < 0 && reg_equiv_constant ! && reg_equiv_constant[regno] && ! CONSTANT_P (reg_equiv_constant[regno])) return eliminate_regs (copy_rtx (reg_equiv_constant[regno]), mem_mode, insn); --- 2336,2343 ---- return plus_constant (ep->to_rtx, ep->previous_offset); } ! else if (reg_renumber && reg_renumber[regno] < 0 ! && reg_equiv_constant && reg_equiv_constant[regno] && ! CONSTANT_P (reg_equiv_constant[regno])) return eliminate_regs (copy_rtx (reg_equiv_constant[regno]), mem_mode, insn); *************** eliminate_regs (x, mem_mode, insn) *** 2344,2350 **** whole instead of this little section as well as the backend issues. */ case PLUS: /* If this is the sum of an eliminable register and a constant, rework ! the sum. */ if (GET_CODE (XEXP (x, 0)) == REG && REGNO (XEXP (x, 0)) < FIRST_PSEUDO_REGISTER && CONSTANT_P (XEXP (x, 1))) --- 2359,2365 ---- whole instead of this little section as well as the backend issues. */ case PLUS: /* If this is the sum of an eliminable register and a constant, rework ! the sum. */ if (GET_CODE (XEXP (x, 0)) == REG && REGNO (XEXP (x, 0)) < FIRST_PSEUDO_REGISTER && CONSTANT_P (XEXP (x, 1))) *************** eliminate_regs (x, mem_mode, insn) *** 2388,2394 **** rtx new0 = eliminate_regs (XEXP (x, 0), mem_mode, insn); rtx new1 = eliminate_regs (XEXP (x, 1), mem_mode, insn); ! if (new0 != XEXP (x, 0) || new1 != XEXP (x, 1)) { /* If one side is a PLUS and the other side is a pseudo that didn't get a hard register but has a reg_equiv_constant, --- 2403,2409 ---- rtx new0 = eliminate_regs (XEXP (x, 0), mem_mode, insn); rtx new1 = eliminate_regs (XEXP (x, 1), mem_mode, insn); ! if (reg_renumber && (new0 != XEXP (x, 0) || new1 != XEXP (x, 1))) { /* If one side is a PLUS and the other side is a pseudo that didn't get a hard register but has a reg_equiv_constant, *************** eliminate_regs (x, mem_mode, insn) *** 2496,2502 **** { new = eliminate_regs (XEXP (x, 1), mem_mode, insn); if (new != XEXP (x, 1)) ! return gen_rtx_fmt_ee (GET_CODE (x), GET_MODE (x), XEXP (x, 0), new); } return x; --- 2511,2518 ---- { new = eliminate_regs (XEXP (x, 1), mem_mode, insn); if (new != XEXP (x, 1)) ! return ! gen_rtx_fmt_ee (GET_CODE (x), GET_MODE (x), XEXP (x, 0), new); } return x; *************** eliminate_regs (x, mem_mode, insn) *** 2519,2525 **** return x; case SUBREG: ! /* Similar to above processing, but preserve SUBREG_WORD. Convert (subreg (mem)) to (mem) if not paradoxical. Also, if we have a non-paradoxical (subreg (pseudo)) and the pseudo didn't get a hard reg, we must replace this with the --- 2535,2541 ---- return x; case SUBREG: ! /* Similar to above processing, but preserve SUBREG_BYTE. Convert (subreg (mem)) to (mem) if not paradoxical. Also, if we have a non-paradoxical (subreg (pseudo)) and the pseudo didn't get a hard reg, we must replace this with the *************** eliminate_regs (x, mem_mode, insn) *** 2536,2542 **** else new = eliminate_regs (SUBREG_REG (x), mem_mode, insn); ! if (new != XEXP (x, 0)) { int x_size = GET_MODE_SIZE (GET_MODE (x)); int new_size = GET_MODE_SIZE (GET_MODE (new)); --- 2552,2558 ---- else new = eliminate_regs (SUBREG_REG (x), mem_mode, insn); ! if (new != SUBREG_REG (x)) { int x_size = GET_MODE_SIZE (GET_MODE (x)); int new_size = GET_MODE_SIZE (GET_MODE (new)); *************** eliminate_regs (x, mem_mode, insn) *** 2551,2576 **** (reg:m2 R) later, expecting all bits to be preserved. So if the number of words is the same, preserve the subreg so that push_reloads can see it. */ ! && ! ((x_size-1)/UNITS_PER_WORD == (new_size-1)/UNITS_PER_WORD) #endif ) ! || (x_size == new_size)) ) ! { ! int offset = SUBREG_WORD (x) * UNITS_PER_WORD; ! enum machine_mode mode = GET_MODE (x); ! ! if (BYTES_BIG_ENDIAN) ! offset += (MIN (UNITS_PER_WORD, ! GET_MODE_SIZE (GET_MODE (new))) ! - MIN (UNITS_PER_WORD, GET_MODE_SIZE (mode))); ! ! PUT_MODE (new, mode); ! XEXP (new, 0) = plus_constant (XEXP (new, 0), offset); ! return new; ! } else ! return gen_rtx_SUBREG (GET_MODE (x), new, SUBREG_WORD (x)); } return x; --- 2567,2581 ---- (reg:m2 R) later, expecting all bits to be preserved. So if the number of words is the same, preserve the subreg so that push_reloads can see it. */ ! && ! ((x_size - 1) / UNITS_PER_WORD ! == (new_size -1 ) / UNITS_PER_WORD) #endif ) ! || x_size == new_size) ) ! return adjust_address_nv (new, GET_MODE (x), SUBREG_BYTE (x)); else ! return gen_rtx_SUBREG (GET_MODE (x), new, SUBREG_BYTE (x)); } return x; *************** eliminate_regs (x, mem_mode, insn) *** 2585,2599 **** /* Our only special processing is to pass the mode of the MEM to our recursive call and copy the flags. While we are here, handle this case more efficiently. */ ! new = eliminate_regs (XEXP (x, 0), GET_MODE (x), insn); ! if (new != XEXP (x, 0)) ! { ! new = gen_rtx_MEM (GET_MODE (x), new); ! MEM_COPY_ATTRIBUTES (new, x); ! return new; ! } ! else ! return x; case USE: /* Handle insn_list USE that a call to a pure function may generate. */ --- 2590,2599 ---- /* Our only special processing is to pass the mode of the MEM to our recursive call and copy the flags. While we are here, handle this case more efficiently. */ ! return ! replace_equiv_address_nv (x, ! eliminate_regs (XEXP (x, 0), ! GET_MODE (x), insn)); case USE: /* Handle insn_list USE that a call to a pure function may generate. */ *************** elimination_effects (x, mem_mode) *** 2681,2686 **** --- 2681,2687 ---- { case CONST_INT: case CONST_DOUBLE: + case CONST_VECTOR: case CONST: case SYMBOL_REF: case CODE_LABEL: *************** eliminate_regs_in_insn (insn, replace) *** 2953,3007 **** if (ep->from == FRAME_POINTER_REGNUM && ep->to == HARD_FRAME_POINTER_REGNUM) { ! rtx src = SET_SRC (old_set); ! int offset = 0, ok = 0; ! rtx prev_insn, prev_set; ! if (src == ep->to_rtx) ! offset = 0, ok = 1; ! else if (GET_CODE (src) == PLUS ! && GET_CODE (XEXP (src, 0)) == CONST_INT ! && XEXP (src, 1) == ep->to_rtx) ! offset = INTVAL (XEXP (src, 0)), ok = 1; ! else if (GET_CODE (src) == PLUS ! && GET_CODE (XEXP (src, 1)) == CONST_INT ! && XEXP (src, 0) == ep->to_rtx) ! offset = INTVAL (XEXP (src, 1)), ok = 1; ! else if ((prev_insn = prev_nonnote_insn (insn)) != 0 ! && (prev_set = single_set (prev_insn)) != 0 ! && rtx_equal_p (SET_DEST (prev_set), src)) { ! src = SET_SRC (prev_set); ! if (src == ep->to_rtx) ! offset = 0, ok = 1; ! else if (GET_CODE (src) == PLUS ! && GET_CODE (XEXP (src, 0)) == CONST_INT ! && XEXP (src, 1) == ep->to_rtx) ! offset = INTVAL (XEXP (src, 0)), ok = 1; ! else if (GET_CODE (src) == PLUS ! && GET_CODE (XEXP (src, 1)) == CONST_INT ! && XEXP (src, 0) == ep->to_rtx) ! offset = INTVAL (XEXP (src, 1)), ok = 1; } ! if (ok) { ! if (replace) { ! rtx src ! = plus_constant (ep->to_rtx, offset - ep->offset); ! /* First see if this insn remains valid when we ! make the change. If not, keep the INSN_CODE ! the same and let reload fit it up. */ ! validate_change (insn, &SET_SRC (old_set), src, 1); ! validate_change (insn, &SET_DEST (old_set), ! ep->to_rtx, 1); ! if (! apply_change_group ()) ! { ! SET_SRC (old_set) = src; ! SET_DEST (old_set) = ep->to_rtx; ! } } val = 1; --- 2954,3009 ---- if (ep->from == FRAME_POINTER_REGNUM && ep->to == HARD_FRAME_POINTER_REGNUM) { ! rtx base = SET_SRC (old_set); ! rtx base_insn = insn; ! int offset = 0; ! while (base != ep->to_rtx) { ! rtx prev_insn, prev_set; ! ! if (GET_CODE (base) == PLUS ! && GET_CODE (XEXP (base, 1)) == CONST_INT) ! { ! offset += INTVAL (XEXP (base, 1)); ! base = XEXP (base, 0); ! } ! else if ((prev_insn = prev_nonnote_insn (base_insn)) != 0 ! && (prev_set = single_set (prev_insn)) != 0 ! && rtx_equal_p (SET_DEST (prev_set), base)) ! { ! base = SET_SRC (prev_set); ! base_insn = prev_insn; ! } ! else ! break; } ! if (base == ep->to_rtx) { ! rtx src ! = plus_constant (ep->to_rtx, offset - ep->offset); ! ! new_body = old_body; ! if (! replace) { ! new_body = copy_insn (old_body); ! if (REG_NOTES (insn)) ! REG_NOTES (insn) = copy_insn_1 (REG_NOTES (insn)); ! } ! PATTERN (insn) = new_body; ! old_set = single_set (insn); ! /* First see if this insn remains valid when we ! make the change. If not, keep the INSN_CODE ! the same and let reload fit it up. */ ! validate_change (insn, &SET_SRC (old_set), src, 1); ! validate_change (insn, &SET_DEST (old_set), ! ep->to_rtx, 1); ! if (! apply_change_group ()) ! { ! SET_SRC (old_set) = src; ! SET_DEST (old_set) = ep->to_rtx; } val = 1; *************** mark_not_eliminable (dest, x, data) *** 3292,3298 **** rtx x; void *data ATTRIBUTE_UNUSED; { ! register unsigned int i; /* A SUBREG of a hard register here is just changing its mode. We should not see a SUBREG of an eliminable hard register, but check just in --- 3294,3300 ---- rtx x; void *data ATTRIBUTE_UNUSED; { ! unsigned int i; /* A SUBREG of a hard register here is just changing its mode. We should not see a SUBREG of an eliminable hard register, but check just in *************** update_eliminables (pset) *** 3434,3440 **** for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS]; ep++) { struct elim_table *op; ! register int new_to = -1; if (! ep->can_eliminate && ep->can_eliminate_previous) { --- 3436,3442 ---- for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS]; ep++) { struct elim_table *op; ! int new_to = -1; if (! ep->can_eliminate && ep->can_eliminate_previous) { *************** init_elim_table () *** 3493,3499 **** { struct elim_table *ep; #ifdef ELIMINABLE_REGS ! struct elim_table_1 *ep1; #endif if (!reg_eliminate) --- 3495,3501 ---- { struct elim_table *ep; #ifdef ELIMINABLE_REGS ! const struct elim_table_1 *ep1; #endif if (!reg_eliminate) *************** spill_hard_reg (regno, cant_eliminate) *** 3560,3566 **** unsigned int regno; int cant_eliminate; { ! register int i; if (cant_eliminate) { --- 3562,3568 ---- unsigned int regno; int cant_eliminate; { ! int i; if (cant_eliminate) { *************** finish_spills (global) *** 3748,3758 **** static void scan_paradoxical_subregs (x) ! register rtx x; { ! register int i; ! register const char *fmt; ! register enum rtx_code code = GET_CODE (x); switch (code) { --- 3750,3760 ---- static void scan_paradoxical_subregs (x) ! rtx x; { ! int i; ! const char *fmt; ! enum rtx_code code = GET_CODE (x); switch (code) { *************** scan_paradoxical_subregs (x) *** 3769,3774 **** --- 3771,3777 ---- case SYMBOL_REF: case LABEL_REF: case CONST_DOUBLE: + case CONST_VECTOR: /* shouldn't happen, but just in case. */ case CC0: case PC: case USE: *************** scan_paradoxical_subregs (x) *** 3793,3799 **** scan_paradoxical_subregs (XEXP (x, i)); else if (fmt[i] == 'E') { ! register int j; for (j = XVECLEN (x, i) - 1; j >= 0; j--) scan_paradoxical_subregs (XVECEXP (x, i, j)); } --- 3796,3802 ---- scan_paradoxical_subregs (XEXP (x, i)); else if (fmt[i] == 'E') { ! int j; for (j = XVECLEN (x, i) - 1; j >= 0; j--) scan_paradoxical_subregs (XVECEXP (x, i, j)); } *************** reload_as_needed (live_known) *** 3815,3821 **** { struct insn_chain *chain; #if defined (AUTO_INC_DEC) ! register int i; #endif rtx x; --- 3818,3824 ---- { struct insn_chain *chain; #if defined (AUTO_INC_DEC) ! int i; #endif rtx x; *************** reload_as_needed (live_known) *** 3929,3937 **** { error_for_asm (insn, "`asm' operand requires impossible reload"); ! PUT_CODE (p, NOTE); ! NOTE_SOURCE_FILE (p) = 0; ! NOTE_LINE_NUMBER (p) = NOTE_INSN_DELETED; } } --- 3932,3938 ---- { error_for_asm (insn, "`asm' operand requires impossible reload"); ! delete_insn (p); } } *************** reload_as_needed (live_known) *** 4074,4080 **** /* Don't assume a reload reg is still good after a call insn if it is a call-used reg. */ else if (GET_CODE (insn) == CALL_INSN) ! AND_COMPL_HARD_REG_SET(reg_reloaded_valid, call_used_reg_set); } /* Clean up. */ --- 4075,4081 ---- /* Don't assume a reload reg is still good after a call insn if it is a call-used reg. */ else if (GET_CODE (insn) == CALL_INSN) ! AND_COMPL_HARD_REG_SET (reg_reloaded_valid, call_used_reg_set); } /* Clean up. */ *************** forget_old_reloads_1 (x, ignored, data) *** 4099,4108 **** unsigned int nr; int offset = 0; ! /* note_stores does give us subregs of hard regs. */ while (GET_CODE (x) == SUBREG) { ! offset += SUBREG_WORD (x); x = SUBREG_REG (x); } --- 4100,4113 ---- unsigned int nr; int offset = 0; ! /* note_stores does give us subregs of hard regs, ! subreg_regno_offset will abort if it is not a hard reg. */ while (GET_CODE (x) == SUBREG) { ! offset += subreg_regno_offset (REGNO (SUBREG_REG (x)), ! GET_MODE (SUBREG_REG (x)), ! SUBREG_BYTE (x), ! GET_MODE (x)); x = SUBREG_REG (x); } *************** clear_reload_reg_in_use (regno, opnum, t *** 4325,4331 **** excluding the intervals of of reload registers by them from the interval of freed reload registers. Since we only keep track of one set of interval bounds, we might have to exclude somewhat ! more then what would be necessary if we used a HARD_REG_SET here. But this should only happen very infrequently, so there should be no reason to worry about it. */ --- 4330,4336 ---- excluding the intervals of of reload registers by them from the interval of freed reload registers. Since we only keep track of one set of interval bounds, we might have to exclude somewhat ! more than what would be necessary if we used a HARD_REG_SET here. But this should only happen very infrequently, so there should be no reason to worry about it. */ *************** reload_reg_free_p (regno, opnum, type) *** 4445,4455 **** case RELOAD_FOR_OUTPUT_ADDRESS: /* Can't use a register if it is used for an output address for this ! operand or used as an output in this or a later operand. */ if (TEST_HARD_REG_BIT (reload_reg_used_in_output_addr[opnum], regno)) return 0; ! for (i = opnum; i < reload_n_operands; i++) if (TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno)) return 0; --- 4450,4462 ---- case RELOAD_FOR_OUTPUT_ADDRESS: /* Can't use a register if it is used for an output address for this ! operand or used as an output in this or a later operand. Note ! that multiple output operands are emitted in reverse order, so ! the conflicting ones are those with lower indices. */ if (TEST_HARD_REG_BIT (reload_reg_used_in_output_addr[opnum], regno)) return 0; ! for (i = 0; i <= opnum; i++) if (TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno)) return 0; *************** reload_reg_free_p (regno, opnum, type) *** 4458,4468 **** case RELOAD_FOR_OUTADDR_ADDRESS: /* Can't use a register if it is used for an output address for this operand or used as an output in this or a ! later operand. */ if (TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[opnum], regno)) return 0; ! for (i = opnum; i < reload_n_operands; i++) if (TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno)) return 0; --- 4465,4477 ---- case RELOAD_FOR_OUTADDR_ADDRESS: /* Can't use a register if it is used for an output address for this operand or used as an output in this or a ! later operand. Note that multiple output operands are ! emitted in reverse order, so the conflicting ones are ! those with lower indices. */ if (TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[opnum], regno)) return 0; ! for (i = 0; i <= opnum; i++) if (TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno)) return 0; *************** reload_reg_free_p (regno, opnum, type) *** 4485,4491 **** case RELOAD_FOR_OUTPUT: /* This cannot share a register with RELOAD_FOR_INSN reloads, other ! outputs, or an operand address for this or an earlier output. */ if (TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno)) return 0; --- 4494,4502 ---- case RELOAD_FOR_OUTPUT: /* This cannot share a register with RELOAD_FOR_INSN reloads, other ! outputs, or an operand address for this or an earlier output. ! Note that multiple output operands are emitted in reverse order, ! so the conflicting ones are those with higher indices. */ if (TEST_HARD_REG_BIT (reload_reg_used_in_insn, regno)) return 0; *************** reload_reg_free_p (regno, opnum, type) *** 4493,4499 **** if (TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno)) return 0; ! for (i = 0; i <= opnum; i++) if (TEST_HARD_REG_BIT (reload_reg_used_in_output_addr[i], regno) || TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[i], regno)) return 0; --- 4504,4510 ---- if (TEST_HARD_REG_BIT (reload_reg_used_in_output[i], regno)) return 0; ! for (i = opnum; i < reload_n_operands; i++) if (TEST_HARD_REG_BIT (reload_reg_used_in_output_addr[i], regno) || TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[i], regno)) return 0; *************** reload_reg_reaches_end_p (regno, opnum, *** 4629,4635 **** /* These conflict with other outputs with RELOAD_OTHER. So we need only check for output addresses. */ ! opnum = -1; /* ... fall through ... */ --- 4640,4646 ---- /* These conflict with other outputs with RELOAD_OTHER. So we need only check for output addresses. */ ! opnum = reload_n_operands; /* ... fall through ... */ *************** reload_reg_reaches_end_p (regno, opnum, *** 4637,4644 **** case RELOAD_FOR_OUTPUT_ADDRESS: case RELOAD_FOR_OUTADDR_ADDRESS: /* We already know these can't conflict with a later output. So the ! only thing to check are later output addresses. */ ! for (i = opnum + 1; i < reload_n_operands; i++) if (TEST_HARD_REG_BIT (reload_reg_used_in_output_addr[i], regno) || TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[i], regno)) return 0; --- 4648,4657 ---- case RELOAD_FOR_OUTPUT_ADDRESS: case RELOAD_FOR_OUTADDR_ADDRESS: /* We already know these can't conflict with a later output. So the ! only thing to check are later output addresses. ! Note that multiple output operands are emitted in reverse order, ! so the conflicting ones are those with lower indices. */ ! for (i = 0; i < opnum; i++) if (TEST_HARD_REG_BIT (reload_reg_used_in_output_addr[i], regno) || TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[i], regno)) return 0; *************** reloads_conflict (r1, r2) *** 4690,4700 **** case RELOAD_FOR_OUTPUT_ADDRESS: return ((r2_type == RELOAD_FOR_OUTPUT_ADDRESS && r2_opnum == r1_opnum) ! || (r2_type == RELOAD_FOR_OUTPUT && r2_opnum >= r1_opnum)); case RELOAD_FOR_OUTADDR_ADDRESS: return ((r2_type == RELOAD_FOR_OUTADDR_ADDRESS && r2_opnum == r1_opnum) ! || (r2_type == RELOAD_FOR_OUTPUT && r2_opnum >= r1_opnum)); case RELOAD_FOR_OPERAND_ADDRESS: return (r2_type == RELOAD_FOR_INPUT || r2_type == RELOAD_FOR_INSN --- 4703,4713 ---- case RELOAD_FOR_OUTPUT_ADDRESS: return ((r2_type == RELOAD_FOR_OUTPUT_ADDRESS && r2_opnum == r1_opnum) ! || (r2_type == RELOAD_FOR_OUTPUT && r2_opnum <= r1_opnum)); case RELOAD_FOR_OUTADDR_ADDRESS: return ((r2_type == RELOAD_FOR_OUTADDR_ADDRESS && r2_opnum == r1_opnum) ! || (r2_type == RELOAD_FOR_OUTPUT && r2_opnum <= r1_opnum)); case RELOAD_FOR_OPERAND_ADDRESS: return (r2_type == RELOAD_FOR_INPUT || r2_type == RELOAD_FOR_INSN *************** reloads_conflict (r1, r2) *** 4708,4714 **** return (r2_type == RELOAD_FOR_INSN || r2_type == RELOAD_FOR_OUTPUT || ((r2_type == RELOAD_FOR_OUTPUT_ADDRESS || r2_type == RELOAD_FOR_OUTADDR_ADDRESS) ! && r2_opnum <= r1_opnum)); case RELOAD_FOR_INSN: return (r2_type == RELOAD_FOR_INPUT || r2_type == RELOAD_FOR_OUTPUT --- 4721,4727 ---- return (r2_type == RELOAD_FOR_INSN || r2_type == RELOAD_FOR_OUTPUT || ((r2_type == RELOAD_FOR_OUTPUT_ADDRESS || r2_type == RELOAD_FOR_OUTADDR_ADDRESS) ! && r2_opnum >= r1_opnum)); case RELOAD_FOR_INSN: return (r2_type == RELOAD_FOR_INPUT || r2_type == RELOAD_FOR_OUTPUT *************** reload_reg_free_for_value_p (start_regno *** 4839,4845 **** rtx reg = rld[i].reg_rtx; if (reg && GET_CODE (reg) == REG && ((unsigned) regno - true_regnum (reg) ! <= HARD_REGNO_NREGS (REGNO (reg), GET_MODE (reg)) - (unsigned)1) && i != reloadnum) { rtx other_input = rld[i].in; --- 4852,4858 ---- rtx reg = rld[i].reg_rtx; if (reg && GET_CODE (reg) == REG && ((unsigned) regno - true_regnum (reg) ! <= HARD_REGNO_NREGS (REGNO (reg), GET_MODE (reg)) - (unsigned) 1) && i != reloadnum) { rtx other_input = rld[i].in; *************** failed_reload (insn, r) *** 5034,5040 **** { if (asm_noperands (PATTERN (insn)) < 0) /* It's the compiler's fault. */ ! fatal_insn ("Could not find a spill register", insn); /* It's the user's fault; the operand's mode and constraint don't match. Disable this reload so we don't crash in final. */ --- 5047,5053 ---- { if (asm_noperands (PATTERN (insn)) < 0) /* It's the compiler's fault. */ ! fatal_insn ("could not find a spill register", insn); /* It's the user's fault; the operand's mode and constraint don't match. Disable this reload so we don't crash in final. */ *************** choose_reload_regs (chain) *** 5296,5302 **** struct insn_chain *chain; { rtx insn = chain->insn; ! register int i, j; unsigned int max_group_size = 1; enum reg_class group_class = NO_REGS; int pass, win, inheritance; --- 5309,5315 ---- struct insn_chain *chain; { rtx insn = chain->insn; ! int i, j; unsigned int max_group_size = 1; enum reg_class group_class = NO_REGS; int pass, win, inheritance; *************** choose_reload_regs (chain) *** 5321,5327 **** { max_group_size = MAX (rld[j].nregs, max_group_size); group_class ! = reg_class_superunion[(int) rld[j].class][(int)group_class]; } save_reload_reg_rtx[j] = rld[j].reg_rtx; --- 5334,5340 ---- { max_group_size = MAX (rld[j].nregs, max_group_size); group_class ! = reg_class_superunion[(int) rld[j].class][(int) group_class]; } save_reload_reg_rtx[j] = rld[j].reg_rtx; *************** choose_reload_regs (chain) *** 5360,5366 **** for (j = 0; j < n_reloads; j++) { ! register int r = reload_order[j]; rtx search_equiv = NULL_RTX; /* Ignore reloads that got marked inoperative. */ --- 5373,5379 ---- for (j = 0; j < n_reloads; j++) { ! int r = reload_order[j]; rtx search_equiv = NULL_RTX; /* Ignore reloads that got marked inoperative. */ *************** choose_reload_regs (chain) *** 5412,5419 **** if (inheritance) { ! int word = 0; ! register int regno = -1; enum machine_mode mode = VOIDmode; if (rld[r].in == 0) --- 5425,5432 ---- if (inheritance) { ! int byte = 0; ! int regno = -1; enum machine_mode mode = VOIDmode; if (rld[r].in == 0) *************** choose_reload_regs (chain) *** 5431,5440 **** else if (GET_CODE (rld[r].in_reg) == SUBREG && GET_CODE (SUBREG_REG (rld[r].in_reg)) == REG) { ! word = SUBREG_WORD (rld[r].in_reg); regno = REGNO (SUBREG_REG (rld[r].in_reg)); if (regno < FIRST_PSEUDO_REGISTER) ! regno += word; mode = GET_MODE (rld[r].in_reg); } #ifdef AUTO_INC_DEC --- 5444,5453 ---- else if (GET_CODE (rld[r].in_reg) == SUBREG && GET_CODE (SUBREG_REG (rld[r].in_reg)) == REG) { ! byte = SUBREG_BYTE (rld[r].in_reg); regno = REGNO (SUBREG_REG (rld[r].in_reg)); if (regno < FIRST_PSEUDO_REGISTER) ! regno = subreg_regno (rld[r].in_reg); mode = GET_MODE (rld[r].in_reg); } #ifdef AUTO_INC_DEC *************** choose_reload_regs (chain) *** 5455,5461 **** that can invalidate an inherited reload of part of a pseudoreg. */ else if (GET_CODE (rld[r].in) == SUBREG && GET_CODE (SUBREG_REG (rld[r].in)) == REG) ! regno = REGNO (SUBREG_REG (rld[r].in)) + SUBREG_WORD (rld[r].in); #endif if (regno >= 0 && reg_last_reload_reg[regno] != 0) --- 5468,5474 ---- that can invalidate an inherited reload of part of a pseudoreg. */ else if (GET_CODE (rld[r].in) == SUBREG && GET_CODE (SUBREG_REG (rld[r].in)) == REG) ! regno = subreg_regno (rld[r].in); #endif if (regno >= 0 && reg_last_reload_reg[regno] != 0) *************** choose_reload_regs (chain) *** 5464,5478 **** rtx last_reg = reg_last_reload_reg[regno]; enum machine_mode need_mode; ! i = REGNO (last_reg) + word; last_class = REGNO_REG_CLASS (i); ! if (word == 0) need_mode = mode; else need_mode ! = smallest_mode_for_size (GET_MODE_SIZE (mode) ! + word * UNITS_PER_WORD, GET_MODE_CLASS (mode)); if ( --- 5477,5491 ---- rtx last_reg = reg_last_reload_reg[regno]; enum machine_mode need_mode; ! i = REGNO (last_reg); ! i += subreg_regno_offset (i, GET_MODE (last_reg), byte, mode); last_class = REGNO_REG_CLASS (i); ! if (byte == 0) need_mode = mode; else need_mode ! = smallest_mode_for_size (GET_MODE_SIZE (mode) + byte, GET_MODE_CLASS (mode)); if ( *************** choose_reload_regs (chain) *** 5528,5537 **** --- 5541,5556 ---- if (k == nr) { int i1; + int bad_for_class; last_reg = (GET_MODE (last_reg) == mode ? last_reg : gen_rtx_REG (mode, i)); + bad_for_class = 0; + for (k = 0; k < nr; k++) + bad_for_class |= ! TEST_HARD_REG_BIT (reg_class_contents[(int) rld[r].class], + i+k); + /* We found a register that contains the value we need. If this register is the same as an `earlyclobber' operand of the *************** choose_reload_regs (chain) *** 5556,5568 **** && ! TEST_HARD_REG_BIT (reg_reloaded_dead, i)) /* Don't clobber the frame pointer. */ || (i == HARD_FRAME_POINTER_REGNUM && rld[r].out) /* Don't really use the inherited spill reg if we need it wider than we've got it. */ || (GET_MODE_SIZE (rld[r].mode) > GET_MODE_SIZE (mode)) ! || ! TEST_HARD_REG_BIT (reg_class_contents[(int) rld[r].class], ! i) /* If find_reloads chose reload_out as reload register, stay with it - that leaves the --- 5575,5587 ---- && ! TEST_HARD_REG_BIT (reg_reloaded_dead, i)) /* Don't clobber the frame pointer. */ || (i == HARD_FRAME_POINTER_REGNUM + && frame_pointer_needed && rld[r].out) /* Don't really use the inherited spill reg if we need it wider than we've got it. */ || (GET_MODE_SIZE (rld[r].mode) > GET_MODE_SIZE (mode)) ! || bad_for_class /* If find_reloads chose reload_out as reload register, stay with it - that leaves the *************** choose_reload_regs (chain) *** 5627,5635 **** if (search_equiv) { ! register rtx equiv = find_equiv_reg (search_equiv, insn, rld[r].class, ! -1, NULL_PTR, 0, rld[r].mode); int regno = 0; if (equiv != 0) --- 5646,5654 ---- if (search_equiv) { ! rtx equiv = find_equiv_reg (search_equiv, insn, rld[r].class, ! -1, NULL, 0, rld[r].mode); int regno = 0; if (equiv != 0) *************** choose_reload_regs (chain) *** 5642,5648 **** Make a new REG since this might be used in an address and not all machines support SUBREGs there. */ ! regno = REGNO (SUBREG_REG (equiv)) + SUBREG_WORD (equiv); equiv = gen_rtx_REG (rld[r].mode, regno); } else --- 5661,5667 ---- Make a new REG since this might be used in an address and not all machines support SUBREGs there. */ ! regno = subreg_regno (equiv); equiv = gen_rtx_REG (rld[r].mode, regno); } else *************** choose_reload_regs (chain) *** 5727,5733 **** /* If we found an equivalent reg, say no code need be generated to load it, and use it as our reload reg. */ ! if (equiv != 0 && regno != HARD_FRAME_POINTER_REGNUM) { int nr = HARD_REGNO_NREGS (regno, rld[r].mode); int k; --- 5746,5754 ---- /* If we found an equivalent reg, say no code need be generated to load it, and use it as our reload reg. */ ! if (equiv != 0 ! && (regno != HARD_FRAME_POINTER_REGNUM ! || !frame_pointer_needed)) { int nr = HARD_REGNO_NREGS (regno, rld[r].mode); int k; *************** choose_reload_regs (chain) *** 5802,5808 **** didn't get one yet. */ for (j = 0; j < n_reloads; j++) { ! register int r = reload_order[j]; /* Ignore reloads that got marked inoperative. */ if (rld[r].out == 0 && rld[r].in == 0 && ! rld[r].secondary_p) --- 5823,5829 ---- didn't get one yet. */ for (j = 0; j < n_reloads; j++) { ! int r = reload_order[j]; /* Ignore reloads that got marked inoperative. */ if (rld[r].out == 0 && rld[r].in == 0 && ! rld[r].secondary_p) *************** choose_reload_regs (chain) *** 5863,5869 **** { for (j = 0; j < n_reloads; j++) { ! register int r = reload_order[j]; rtx check_reg; if (reload_inherited[r] && rld[r].reg_rtx) check_reg = rld[r].reg_rtx; --- 5884,5890 ---- { for (j = 0; j < n_reloads; j++) { ! int r = reload_order[j]; rtx check_reg; if (reload_inherited[r] && rld[r].reg_rtx) check_reg = rld[r].reg_rtx; *************** choose_reload_regs (chain) *** 5893,5899 **** A special case are auto_inc expressions; even if the input is inherited, we still need the address for the output. We can recognize them because they have RELOAD_OUT set to RELOAD_IN. ! If we suceeded removing some reload and we are doing a preliminary pass just to remove such reloads, make another pass, since the removal of one reload might allow us to inherit another one. */ else if (rld[r].in --- 5914,5920 ---- A special case are auto_inc expressions; even if the input is inherited, we still need the address for the output. We can recognize them because they have RELOAD_OUT set to RELOAD_IN. ! If we succeeded removing some reload and we are doing a preliminary pass just to remove such reloads, make another pass, since the removal of one reload might allow us to inherit another one. */ else if (rld[r].in *************** choose_reload_regs (chain) *** 5930,5936 **** /* Record which pseudos and which spill regs have output reloads. */ for (j = 0; j < n_reloads; j++) { ! register int r = reload_order[j]; i = reload_spill_index[r]; --- 5951,5957 ---- /* Record which pseudos and which spill regs have output reloads. */ for (j = 0; j < n_reloads; j++) { ! int r = reload_order[j]; i = reload_spill_index[r]; *************** choose_reload_regs (chain) *** 5940,5946 **** if (rld[r].out_reg != 0 && GET_CODE (rld[r].out_reg) == REG && rld[r].reg_rtx != 0) { ! register int nregno = REGNO (rld[r].out_reg); int nr = 1; if (nregno < FIRST_PSEUDO_REGISTER) --- 5961,5967 ---- if (rld[r].out_reg != 0 && GET_CODE (rld[r].out_reg) == REG && rld[r].reg_rtx != 0) { ! int nregno = REGNO (rld[r].out_reg); int nr = 1; if (nregno < FIRST_PSEUDO_REGISTER) *************** merge_assigned_reloads (insn) *** 6082,6093 **** if (rld[i].when_needed == RELOAD_OTHER) for (j = 0; j < n_reloads; j++) if (rld[j].in != 0 ! && rld[i].when_needed != RELOAD_OTHER && reg_overlap_mentioned_for_reload_p (rld[j].in, rld[i].in)) rld[j].when_needed ! = ((rld[i].when_needed == RELOAD_FOR_INPUT_ADDRESS ! || rld[i].when_needed == RELOAD_FOR_INPADDR_ADDRESS) ? RELOAD_FOR_OTHER_ADDRESS : RELOAD_OTHER); } } --- 6103,6114 ---- if (rld[i].when_needed == RELOAD_OTHER) for (j = 0; j < n_reloads; j++) if (rld[j].in != 0 ! && rld[j].when_needed != RELOAD_OTHER && reg_overlap_mentioned_for_reload_p (rld[j].in, rld[i].in)) rld[j].when_needed ! = ((rld[j].when_needed == RELOAD_FOR_INPUT_ADDRESS ! || rld[j].when_needed == RELOAD_FOR_INPADDR_ADDRESS) ? RELOAD_FOR_OTHER_ADDRESS : RELOAD_OTHER); } } *************** emit_input_reload_insns (chain, rl, old, *** 6121,6127 **** int j; { rtx insn = chain->insn; ! register rtx reloadreg = rl->reg_rtx; rtx oldequiv_reg = 0; rtx oldequiv = 0; int special = 0; --- 6142,6148 ---- int j; { rtx insn = chain->insn; ! rtx reloadreg = rl->reg_rtx; rtx oldequiv_reg = 0; rtx oldequiv = 0; int special = 0; *************** emit_input_reload_insns (chain, rl, old, *** 6176,6182 **** oldequiv = find_equiv_reg (old, insn, rld[rl->secondary_in_reload].class, ! -1, NULL_PTR, 0, mode); #endif /* If reloading from memory, see if there is a register --- 6197,6203 ---- oldequiv = find_equiv_reg (old, insn, rld[rl->secondary_in_reload].class, ! -1, NULL, 0, mode); #endif /* If reloading from memory, see if there is a register *************** emit_input_reload_insns (chain, rl, old, *** 6192,6199 **** || (GET_CODE (old) == REG && REGNO (old) >= FIRST_PSEUDO_REGISTER && reg_renumber[REGNO (old)] < 0))) ! oldequiv = find_equiv_reg (old, insn, ALL_REGS, ! -1, NULL_PTR, 0, mode); if (oldequiv) { --- 6213,6219 ---- || (GET_CODE (old) == REG && REGNO (old) >= FIRST_PSEUDO_REGISTER && reg_renumber[REGNO (old)] < 0))) ! oldequiv = find_equiv_reg (old, insn, ALL_REGS, -1, NULL, 0, mode); if (oldequiv) { *************** emit_input_reload_insns (chain, rl, old, *** 6208,6214 **** /* If it is no cheaper to copy from OLDEQUIV into the reload register than it would be to move from memory, don't use it. Likewise, if we need a secondary register ! or memory. */ if (oldequiv != 0 && ((REGNO_REG_CLASS (regno) != rl->class --- 6228,6234 ---- /* If it is no cheaper to copy from OLDEQUIV into the reload register than it would be to move from memory, don't use it. Likewise, if we need a secondary register ! or memory. */ if (oldequiv != 0 && ((REGNO_REG_CLASS (regno) != rl->class *************** emit_input_reload_insns (chain, rl, old, *** 6272,6278 **** oldequiv = SUBREG_REG (oldequiv); if (GET_MODE (oldequiv) != VOIDmode && mode != GET_MODE (oldequiv)) ! oldequiv = gen_rtx_SUBREG (mode, oldequiv, 0); /* Switch to the right place to emit the reload insns. */ switch (rl->when_needed) --- 6292,6298 ---- oldequiv = SUBREG_REG (oldequiv); if (GET_MODE (oldequiv) != VOIDmode && mode != GET_MODE (oldequiv)) ! oldequiv = gen_lowpart_SUBREG (mode, oldequiv); /* Switch to the right place to emit the reload insns. */ switch (rl->when_needed) *************** emit_input_reload_insns (chain, rl, old, *** 6577,6584 **** || (reg_equiv_constant [REGNO (SUBREG_REG (oldequiv))] != 0))) || (CONSTANT_P (oldequiv) ! && PREFERRED_RELOAD_CLASS (oldequiv, ! REGNO_REG_CLASS (REGNO (reloadreg))) == NO_REGS)) real_oldequiv = rl->in; gen_reload (reloadreg, real_oldequiv, rl->opnum, rl->when_needed); --- 6597,6605 ---- || (reg_equiv_constant [REGNO (SUBREG_REG (oldequiv))] != 0))) || (CONSTANT_P (oldequiv) ! && (PREFERRED_RELOAD_CLASS (oldequiv, ! REGNO_REG_CLASS (REGNO (reloadreg))) ! == NO_REGS))) real_oldequiv = rl->in; gen_reload (reloadreg, real_oldequiv, rl->opnum, rl->when_needed); *************** emit_reload_insns (chain) *** 6953,6961 **** { rtx insn = chain->insn; ! register int j; ! rtx following_insn = NEXT_INSN (insn); ! rtx before_insn = PREV_INSN (insn); CLEAR_HARD_REG_SET (reg_reloaded_died); --- 6974,6980 ---- { rtx insn = chain->insn; ! int j; CLEAR_HARD_REG_SET (reg_reloaded_died); *************** emit_reload_insns (chain) *** 7031,7049 **** for (j = 0; j < reload_n_operands; j++) { ! emit_insns_before (outaddr_address_reload_insns[j], following_insn); ! emit_insns_before (output_address_reload_insns[j], following_insn); ! emit_insns_before (output_reload_insns[j], following_insn); ! emit_insns_before (other_output_reload_insns[j], following_insn); ! } ! ! /* Keep basic block info up to date. */ ! if (n_basic_blocks) ! { ! if (BLOCK_HEAD (chain->block) == insn) ! BLOCK_HEAD (chain->block) = NEXT_INSN (before_insn); ! if (BLOCK_END (chain->block) == insn) ! BLOCK_END (chain->block) = PREV_INSN (following_insn); } /* For all the spill regs newly reloaded in this instruction, --- 7050,7059 ---- for (j = 0; j < reload_n_operands; j++) { ! rtx x = emit_insns_after (outaddr_address_reload_insns[j], insn); ! x = emit_insns_after (output_address_reload_insns[j], x); ! x = emit_insns_after (output_reload_insns[j], x); ! emit_insns_after (other_output_reload_insns[j], x); } /* For all the spill regs newly reloaded in this instruction, *************** emit_reload_insns (chain) *** 7055,7062 **** for (j = 0; j < n_reloads; j++) { ! register int r = reload_order[j]; ! register int i = reload_spill_index[r]; /* If this is a non-inherited input reload from a pseudo, we must clear any memory of a previous store to the same pseudo. Only do --- 7065,7072 ---- for (j = 0; j < n_reloads; j++) { ! int r = reload_order[j]; ! int i = reload_spill_index[r]; /* If this is a non-inherited input reload from a pseudo, we must clear any memory of a previous store to the same pseudo. Only do *************** emit_reload_insns (chain) *** 7131,7137 **** : rld[r].out_reg ? rld[r].out_reg /* AUTO_INC */ : XEXP (rld[r].in_reg, 0)); ! register int nregno = REGNO (out); int nnr = (nregno >= FIRST_PSEUDO_REGISTER ? 1 : HARD_REGNO_NREGS (nregno, GET_MODE (rld[r].reg_rtx))); --- 7141,7147 ---- : rld[r].out_reg ? rld[r].out_reg /* AUTO_INC */ : XEXP (rld[r].in_reg, 0)); ! int nregno = REGNO (out); int nnr = (nregno >= FIRST_PSEUDO_REGISTER ? 1 : HARD_REGNO_NREGS (nregno, GET_MODE (rld[r].reg_rtx))); *************** emit_reload_insns (chain) *** 7179,7185 **** && ! reg_has_output_reload[REGNO (rld[r].in_reg)])) && ! reg_set_p (rld[r].reg_rtx, PATTERN (insn))) { ! register int nregno; int nnr; if (GET_CODE (rld[r].in) == REG --- 7189,7195 ---- && ! reg_has_output_reload[REGNO (rld[r].in_reg)])) && ! reg_set_p (rld[r].reg_rtx, PATTERN (insn))) { ! int nregno; int nnr; if (GET_CODE (rld[r].in) == REG *************** emit_reload_insns (chain) *** 7252,7258 **** { rtx out = (GET_CODE (rld[r].out) == REG ? rld[r].out : rld[r].out_reg); ! register int nregno = REGNO (out); if (nregno >= FIRST_PSEUDO_REGISTER) { rtx src_reg, store_insn = NULL_RTX; --- 7262,7268 ---- { rtx out = (GET_CODE (rld[r].out) == REG ? rld[r].out : rld[r].out_reg); ! int nregno = REGNO (out); if (nregno >= FIRST_PSEUDO_REGISTER) { rtx src_reg, store_insn = NULL_RTX; *************** emit_reload_insns (chain) *** 7297,7303 **** necessarily checked exactly in the code that moves notes, so just check both locations. */ rtx note = find_regno_note (insn, REG_DEAD, src_regno); ! if (! note) note = find_regno_note (store_insn, REG_DEAD, src_regno); while (nr-- > 0) { --- 7307,7313 ---- necessarily checked exactly in the code that moves notes, so just check both locations. */ rtx note = find_regno_note (insn, REG_DEAD, src_regno); ! if (! note && store_insn) note = find_regno_note (store_insn, REG_DEAD, src_regno); while (nr-- > 0) { *************** gen_reload (out, in, opnum, type) *** 7547,7555 **** return last ? NEXT_INSN (last) : get_insns (); } ! /* Delete a previously made output-reload ! whose result we now believe is not needed. ! First we double-check. INSN is the insn now being processed. LAST_RELOAD_REG is the hard register number for which we want to delete --- 7557,7564 ---- return last ? NEXT_INSN (last) : get_insns (); } ! /* Delete a previously made output-reload whose result we now believe ! is not needed. First we double-check. INSN is the insn now being processed. LAST_RELOAD_REG is the hard register number for which we want to delete *************** delete_output_reload (insn, j, last_relo *** 7568,7574 **** int k; int n_occurrences; int n_inherited = 0; ! register rtx i1; rtx substed; /* Get the raw pseudo-register referred to. */ --- 7577,7583 ---- int k; int n_occurrences; int n_inherited = 0; ! rtx i1; rtx substed; /* Get the raw pseudo-register referred to. */ *************** delete_output_reload (insn, j, last_relo *** 7643,7657 **** } } /* The caller has already checked that REG dies or is set in INSN. ! It has also checked that we are optimizing, and thus some inaccurancies ! in the debugging information are acceptable. ! So we could just delete output_reload_insn. ! But in some cases we can improve the debugging information without ! sacrificing optimization - maybe even improving the code: ! See if the pseudo reg has been completely replaced ! with reload regs. If so, delete the store insn ! and forget we had a stack slot for the pseudo. */ if (rld[j].out != rld[j].in && REG_N_DEATHS (REGNO (reg)) == 1 && REG_N_SETS (REGNO (reg)) == 1 --- 7652,7672 ---- } } + /* We will be deleting the insn. Remove the spill reg information. */ + for (k = HARD_REGNO_NREGS (last_reload_reg, GET_MODE (reg)); k-- > 0; ) + { + spill_reg_store[last_reload_reg + k] = 0; + spill_reg_stored_to[last_reload_reg + k] = 0; + } + /* The caller has already checked that REG dies or is set in INSN. ! It has also checked that we are optimizing, and thus some ! inaccurancies in the debugging information are acceptable. ! So we could just delete output_reload_insn. But in some cases ! we can improve the debugging information without sacrificing ! optimization - maybe even improving the code: See if the pseudo ! reg has been completely replaced with reload regs. If so, delete ! the store insn and forget we had a stack slot for the pseudo. */ if (rld[j].out != rld[j].in && REG_N_DEATHS (REGNO (reg)) == 1 && REG_N_SETS (REGNO (reg)) == 1 *************** delete_output_reload (insn, j, last_relo *** 7660,7670 **** { rtx i2; ! /* We know that it was used only between here ! and the beginning of the current basic block. ! (We also know that the last use before INSN was ! the output reload we are thinking of deleting, but never mind that.) ! Search that range; see if any ref remains. */ for (i2 = PREV_INSN (insn); i2; i2 = PREV_INSN (i2)) { rtx set = single_set (i2); --- 7675,7684 ---- { rtx i2; ! /* We know that it was used only between here and the beginning of ! the current basic block. (We also know that the last use before ! INSN was the output reload we are thinking of deleting, but never ! mind that.) Search that range; see if any ref remains. */ for (i2 = PREV_INSN (insn); i2; i2 = PREV_INSN (i2)) { rtx set = single_set (i2); *************** delete_output_reload (insn, j, last_relo *** 7682,7695 **** /* Some other ref remains; just delete the output reload we know to be dead. */ delete_address_reloads (output_reload_insn, insn); ! PUT_CODE (output_reload_insn, NOTE); ! NOTE_SOURCE_FILE (output_reload_insn) = 0; ! NOTE_LINE_NUMBER (output_reload_insn) = NOTE_INSN_DELETED; return; } } ! /* Delete the now-dead stores into this pseudo. */ for (i2 = PREV_INSN (insn); i2; i2 = PREV_INSN (i2)) { rtx set = single_set (i2); --- 7696,7708 ---- /* Some other ref remains; just delete the output reload we know to be dead. */ delete_address_reloads (output_reload_insn, insn); ! delete_insn (output_reload_insn); return; } } ! /* Delete the now-dead stores into this pseudo. Note that this ! loop also takes care of deleting output_reload_insn. */ for (i2 = PREV_INSN (insn); i2; i2 = PREV_INSN (i2)) { rtx set = single_set (i2); *************** delete_output_reload (insn, j, last_relo *** 7697,7723 **** if (set != 0 && SET_DEST (set) == reg) { delete_address_reloads (i2, insn); ! /* This might be a basic block head, ! thus don't use delete_insn. */ ! PUT_CODE (i2, NOTE); ! NOTE_SOURCE_FILE (i2) = 0; ! NOTE_LINE_NUMBER (i2) = NOTE_INSN_DELETED; } if (GET_CODE (i2) == CODE_LABEL || GET_CODE (i2) == JUMP_INSN) break; } ! /* For the debugging info, ! say the pseudo lives in this reload reg. */ reg_renumber[REGNO (reg)] = REGNO (rld[j].reg_rtx); alter_reg (REGNO (reg), -1); } ! delete_address_reloads (output_reload_insn, insn); ! PUT_CODE (output_reload_insn, NOTE); ! NOTE_SOURCE_FILE (output_reload_insn) = 0; ! NOTE_LINE_NUMBER (output_reload_insn) = NOTE_INSN_DELETED; ! } /* We are going to delete DEAD_INSN. Recursively delete loads of --- 7710,7731 ---- if (set != 0 && SET_DEST (set) == reg) { delete_address_reloads (i2, insn); ! delete_insn (i2); } if (GET_CODE (i2) == CODE_LABEL || GET_CODE (i2) == JUMP_INSN) break; } ! /* For the debugging info, say the pseudo lives in this reload reg. */ reg_renumber[REGNO (reg)] = REGNO (rld[j].reg_rtx); alter_reg (REGNO (reg), -1); } ! else ! { ! delete_address_reloads (output_reload_insn, insn); ! delete_insn (output_reload_insn); ! } } /* We are going to delete DEAD_INSN. Recursively delete loads of *************** delete_address_reloads (dead_insn, curre *** 7755,7762 **** || (INTVAL (XEXP (SET_SRC (set), 1)) != -INTVAL (XEXP (SET_SRC (set2), 1)))) return; ! delete_insn (prev); ! delete_insn (next); } /* Subfunction of delete_address_reloads: process registers found in X. */ --- 7763,7770 ---- || (INTVAL (XEXP (SET_SRC (set), 1)) != -INTVAL (XEXP (SET_SRC (set2), 1)))) return; ! delete_related_insns (prev); ! delete_related_insns (next); } /* Subfunction of delete_address_reloads: process registers found in X. */ *************** delete_address_reloads_1 (dead_insn, x, *** 7865,7874 **** } delete_address_reloads_1 (prev, SET_SRC (set), current_insn); reg_reloaded_contents[REGNO (dst)] = -1; ! /* Can't use delete_insn here because PREV might be a basic block head. */ ! PUT_CODE (prev, NOTE); ! NOTE_LINE_NUMBER (prev) = NOTE_INSN_DELETED; ! NOTE_SOURCE_FILE (prev) = 0; } /* Output reload-insns to reload VALUE into RELOADREG. --- 7873,7879 ---- } delete_address_reloads_1 (prev, SET_SRC (set), current_insn); reg_reloaded_contents[REGNO (dst)] = -1; ! delete_insn (prev); } /* Output reload-insns to reload VALUE into RELOADREG. *************** static void *** 8032,8037 **** --- 8037,8043 ---- reload_cse_delete_noop_set (insn, value) rtx insn, value; { + bool purge = BLOCK_FOR_INSN (insn)->end == insn; if (value) { PATTERN (insn) = gen_rtx_USE (VOIDmode, value); *************** reload_cse_delete_noop_set (insn, value) *** 8039,8049 **** REG_NOTES (insn) = NULL_RTX; } else ! { ! PUT_CODE (insn, NOTE); ! NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED; ! NOTE_SOURCE_FILE (insn) = 0; ! } } /* See whether a single set SET is a noop. */ --- 8045,8053 ---- REG_NOTES (insn) = NULL_RTX; } else ! delete_insn (insn); ! if (purge) ! purge_dead_edges (BLOCK_FOR_INSN (insn)); } /* See whether a single set SET is a noop. */ *************** reload_cse_simplify_operands (insn) *** 8366,8373 **** alternative_reject = (int *) alloca (recog_data.n_alternatives * sizeof (int)); alternative_nregs = (int *) alloca (recog_data.n_alternatives * sizeof (int)); alternative_order = (int *) alloca (recog_data.n_alternatives * sizeof (int)); ! memset ((char *)alternative_reject, 0, recog_data.n_alternatives * sizeof (int)); ! memset ((char *)alternative_nregs, 0, recog_data.n_alternatives * sizeof (int)); /* For each operand, find out which regs are equivalent. */ for (i = 0; i < recog_data.n_operands; i++) --- 8370,8377 ---- alternative_reject = (int *) alloca (recog_data.n_alternatives * sizeof (int)); alternative_nregs = (int *) alloca (recog_data.n_alternatives * sizeof (int)); alternative_order = (int *) alloca (recog_data.n_alternatives * sizeof (int)); ! memset ((char *) alternative_reject, 0, recog_data.n_alternatives * sizeof (int)); ! memset ((char *) alternative_nregs, 0, recog_data.n_alternatives * sizeof (int)); /* For each operand, find out which regs are equivalent. */ for (i = 0; i < recog_data.n_operands; i++) *************** reload_cse_simplify_operands (insn) *** 8470,8476 **** default: class ! = reg_class_subunion[(int) class][(int) REG_CLASS_FROM_LETTER ((unsigned char)c)]; break; case ',': case '\0': --- 8474,8480 ---- default: class ! = reg_class_subunion[(int) class][(int) REG_CLASS_FROM_LETTER ((unsigned char) c)]; break; case ',': case '\0': *************** static void *** 8606,8619 **** reload_combine () { rtx insn, set; ! int first_index_reg = -1, last_index_reg; int i; unsigned int r; int last_label_ruid; int min_labelno, n_labels; HARD_REG_SET ever_live_at_start, *label_live; ! /* If reg+reg can be used in offsetable memory adresses, the main chunk of reload has already used it where appropriate, so there is no use in trying to generate it now. */ if (double_reg_address_ok && INDEX_REG_CLASS != NO_REGS) --- 8610,8624 ---- reload_combine () { rtx insn, set; ! int first_index_reg = -1; ! int last_index_reg = 0; int i; unsigned int r; int last_label_ruid; int min_labelno, n_labels; HARD_REG_SET ever_live_at_start, *label_live; ! /* If reg+reg can be used in offsetable memory addresses, the main chunk of reload has already used it where appropriate, so there is no use in trying to generate it now. */ if (double_reg_address_ok && INDEX_REG_CLASS != NO_REGS) *************** reload_combine () *** 8787,8802 **** i < RELOAD_COMBINE_MAX_USES; i++) validate_change (reg_state[regno].reg_use[i].insn, reg_state[regno].reg_use[i].usep, ! reg_sum, 1); if (apply_change_group ()) { rtx *np; /* Delete the reg-reg addition. */ ! PUT_CODE (insn, NOTE); ! NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED; ! NOTE_SOURCE_FILE (insn) = 0; if (reg_state[regno].offset != const0_rtx) /* Previous REG_EQUIV / REG_EQUAL notes for PREV --- 8792,8807 ---- i < RELOAD_COMBINE_MAX_USES; i++) validate_change (reg_state[regno].reg_use[i].insn, reg_state[regno].reg_use[i].usep, ! /* Each change must have its own ! replacement. */ ! copy_rtx (reg_sum), 1); if (apply_change_group ()) { rtx *np; /* Delete the reg-reg addition. */ ! delete_insn (insn); if (reg_state[regno].offset != const0_rtx) /* Previous REG_EQUIV / REG_EQUAL notes for PREV *************** reload_combine () *** 8837,8843 **** rtx usage_rtx = XEXP (XEXP (link, 0), 0); if (GET_CODE (usage_rtx) == REG) { ! int i; unsigned int start_reg = REGNO (usage_rtx); unsigned int num_regs = HARD_REGNO_NREGS (start_reg, GET_MODE (usage_rtx)); --- 8842,8848 ---- rtx usage_rtx = XEXP (XEXP (link, 0), 0); if (GET_CODE (usage_rtx) == REG) { ! unsigned int i; unsigned int start_reg = REGNO (usage_rtx); unsigned int num_regs = HARD_REGNO_NREGS (start_reg, GET_MODE (usage_rtx)); *************** reload_combine_note_store (dst, set, dat *** 8904,8910 **** if (GET_CODE (dst) == SUBREG) { ! regno = SUBREG_WORD (dst); dst = SUBREG_REG (dst); } if (GET_CODE (dst) != REG) --- 8909,8918 ---- if (GET_CODE (dst) == SUBREG) { ! regno = subreg_regno_offset (REGNO (SUBREG_REG (dst)), ! GET_MODE (SUBREG_REG (dst)), ! SUBREG_BYTE (dst), ! GET_MODE (dst)); dst = SUBREG_REG (dst); } if (GET_CODE (dst) != REG) *************** static int reg_set_luid[FIRST_PSEUDO_REG *** 9077,9083 **** reg_offset[n] in mode reg_mode[n] . If reg_base_reg[n] is non-negative, register n has been set to the sum of reg_offset[n] and the value of register reg_base_reg[n] ! before reg_set_luid[n], calculated in mode reg_mode[n] . */ static HOST_WIDE_INT reg_offset[FIRST_PSEUDO_REGISTER]; static int reg_base_reg[FIRST_PSEUDO_REGISTER]; static enum machine_mode reg_mode[FIRST_PSEUDO_REGISTER]; --- 9085,9091 ---- reg_offset[n] in mode reg_mode[n] . If reg_base_reg[n] is non-negative, register n has been set to the sum of reg_offset[n] and the value of register reg_base_reg[n] ! before reg_set_luid[n], calculated in mode reg_mode[n] . */ static HOST_WIDE_INT reg_offset[FIRST_PSEUDO_REGISTER]; static int reg_base_reg[FIRST_PSEUDO_REGISTER]; static enum machine_mode reg_mode[FIRST_PSEUDO_REGISTER]; *************** reload_cse_move2add (first) *** 9183,9189 **** if (new_src == const0_rtx) success = validate_change (insn, &SET_SRC (pat), reg, 0); else if (rtx_cost (new_src, PLUS) < rtx_cost (src, SET) ! && have_add2_insn (GET_MODE (reg))) success = validate_change (insn, &PATTERN (insn), gen_add2_insn (reg, new_src), 0); reg_set_luid[regno] = move2add_luid; --- 9191,9197 ---- if (new_src == const0_rtx) success = validate_change (insn, &SET_SRC (pat), reg, 0); else if (rtx_cost (new_src, PLUS) < rtx_cost (src, SET) ! && have_add2_insn (reg, new_src)) success = validate_change (insn, &PATTERN (insn), gen_add2_insn (reg, new_src), 0); reg_set_luid[regno] = move2add_luid; *************** reload_cse_move2add (first) *** 9234,9252 **** = validate_change (next, &SET_SRC (set), reg, 0); else if ((rtx_cost (new_src, PLUS) < COSTS_N_INSNS (1) + rtx_cost (src3, SET)) ! && have_add2_insn (GET_MODE (reg))) success = validate_change (next, &PATTERN (next), gen_add2_insn (reg, new_src), 0); if (success) ! { ! /* INSN might be the first insn in a basic block ! if the preceding insn is a conditional jump ! or a possible-throwing call. */ ! PUT_CODE (insn, NOTE); ! NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED; ! NOTE_SOURCE_FILE (insn) = 0; ! } insn = next; reg_mode[regno] = GET_MODE (reg); reg_offset[regno] = sext_for_mode (GET_MODE (reg), --- 9242,9253 ---- = validate_change (next, &SET_SRC (set), reg, 0); else if ((rtx_cost (new_src, PLUS) < COSTS_N_INSNS (1) + rtx_cost (src3, SET)) ! && have_add2_insn (reg, new_src)) success = validate_change (next, &PATTERN (next), gen_add2_insn (reg, new_src), 0); if (success) ! delete_insn (insn); insn = next; reg_mode[regno] = GET_MODE (reg); reg_offset[regno] = sext_for_mode (GET_MODE (reg), *************** move2add_note_store (dst, set, data) *** 9299,9305 **** if (GET_CODE (dst) == SUBREG) { ! regno = SUBREG_WORD (dst); dst = SUBREG_REG (dst); } --- 9300,9309 ---- if (GET_CODE (dst) == SUBREG) { ! regno = subreg_regno_offset (REGNO (SUBREG_REG (dst)), ! GET_MODE (SUBREG_REG (dst)), ! SUBREG_BYTE (dst), ! GET_MODE (dst)); dst = SUBREG_REG (dst); } *************** move2add_note_store (dst, set, data) *** 9308,9314 **** if (GET_CODE (dst) == MEM) { dst = XEXP (dst, 0); ! if (GET_CODE (dst) == PRE_INC || GET_CODE (dst) == POST_DEC || GET_CODE (dst) == PRE_DEC || GET_CODE (dst) == POST_DEC) reg_set_luid[REGNO (XEXP (dst, 0))] = 0; return; --- 9312,9318 ---- if (GET_CODE (dst) == MEM) { dst = XEXP (dst, 0); ! if (GET_CODE (dst) == PRE_INC || GET_CODE (dst) == POST_INC || GET_CODE (dst) == PRE_DEC || GET_CODE (dst) == POST_DEC) reg_set_luid[REGNO (XEXP (dst, 0))] = 0; return; *************** copy_eh_notes (insn, x) *** 9476,9478 **** --- 9480,9553 ---- } } + /* This is used by reload pass, that does emit some instructions after + abnormal calls moving basic block end, but in fact it wants to emit + them on the edge. Looks for abnormal call edges, find backward the + proper call and fix the damage. + + Similar handle instructions throwing exceptions internally. */ + void + fixup_abnormal_edges () + { + int i; + bool inserted = false; + + for (i = 0; i < n_basic_blocks; i++) + { + basic_block bb = BASIC_BLOCK (i); + edge e; + + /* Look for cases we are interested in - an calls or instructions causing + exceptions. */ + for (e = bb->succ; e; e = e->succ_next) + { + if (e->flags & EDGE_ABNORMAL_CALL) + break; + if ((e->flags & (EDGE_ABNORMAL | EDGE_EH)) + == (EDGE_ABNORMAL | EDGE_EH)) + break; + } + if (e && GET_CODE (bb->end) != CALL_INSN && !can_throw_internal (bb->end)) + { + rtx insn = bb->end, stop = NEXT_INSN (bb->end); + rtx next; + for (e = bb->succ; e; e = e->succ_next) + if (e->flags & EDGE_FALLTHRU) + break; + /* Get past the new insns generated. Allow notes, as the insns may + be already deleted. */ + while ((GET_CODE (insn) == INSN || GET_CODE (insn) == NOTE) + && !can_throw_internal (insn) + && insn != bb->head) + insn = PREV_INSN (insn); + if (GET_CODE (insn) != CALL_INSN && !can_throw_internal (insn)) + abort (); + bb->end = insn; + inserted = true; + insn = NEXT_INSN (insn); + while (insn && insn != stop) + { + next = NEXT_INSN (insn); + if (INSN_P (insn)) + { + rtx seq; + + delete_insn (insn); + + /* We're not deleting it, we're moving it. */ + INSN_DELETED_P (insn) = 0; + + /* Emit a sequence, rather than scarfing the pattern, so + that we don't lose REG_NOTES etc. */ + /* ??? Could copy the test from gen_sequence, but don't + think it's worth the bother. */ + seq = gen_rtx_SEQUENCE (VOIDmode, gen_rtvec (1, insn)); + insert_insn_on_edge (seq, e); + } + insn = next; + } + } + } + if (inserted) + commit_edge_insertions (); + } diff -Nrc3pad gcc-3.0.4/gcc/reorg.c gcc-3.1/gcc/reorg.c *** gcc-3.0.4/gcc/reorg.c Fri Jul 20 02:39:26 2001 --- gcc-3.1/gcc/reorg.c Sat Apr 27 00:06:15 2002 *************** *** 1,25 **** /* Perform instruction reorganizations for delay slot filling. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000 Free Software Foundation, Inc. Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu). Hacked by Michael Tiemann (tiemann@cygnus.com). ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* Instruction reorganization pass. --- 1,25 ---- /* Perform instruction reorganizations for delay slot filling. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu). Hacked by Michael Tiemann (tiemann@cygnus.com). ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* Instruction reorganization pass. *************** Boston, MA 02111-1307, USA. */ *** 118,124 **** based on the condition code of the previous insn. The HP-PA can conditionally nullify insns, providing a similar ! effect to the ARM, differing mostly in which insn is "in charge". */ #include "config.h" #include "system.h" --- 118,124 ---- based on the condition code of the previous insn. The HP-PA can conditionally nullify insns, providing a similar ! effect to the ARM, differing mostly in which insn is "in charge". */ #include "config.h" #include "system.h" *************** Boston, MA 02111-1307, USA. */ *** 138,143 **** --- 138,144 ---- #include "obstack.h" #include "insn-attr.h" #include "resource.h" + #include "except.h" #include "params.h" #ifdef DELAY_SLOTS *************** resource_conflicts_p (res1, res2) *** 300,307 **** static int insn_references_resource_p (insn, res, include_delayed_effects) ! register rtx insn; ! register struct resources *res; int include_delayed_effects; { struct resources insn_res; --- 301,308 ---- static int insn_references_resource_p (insn, res, include_delayed_effects) ! rtx insn; ! struct resources *res; int include_delayed_effects; { struct resources insn_res; *************** insn_references_resource_p (insn, res, i *** 318,325 **** static int insn_sets_resource_p (insn, res, include_delayed_effects) ! register rtx insn; ! register struct resources *res; int include_delayed_effects; { struct resources insn_sets; --- 319,326 ---- static int insn_sets_resource_p (insn, res, include_delayed_effects) ! rtx insn; ! struct resources *res; int include_delayed_effects; { struct resources insn_sets; *************** emit_delay_sequence (insn, list, length) *** 435,442 **** rtx list; int length; { ! register int i = 1; ! register rtx li; int had_barrier = 0; /* Allocate the rtvec to hold the insns and the SEQUENCE. */ --- 436,443 ---- rtx list; int length; { ! int i = 1; ! rtx li; int had_barrier = 0; /* Allocate the rtvec to hold the insns and the SEQUENCE. */ *************** emit_delay_sequence (insn, list, length) *** 454,460 **** We will put the BARRIER back in later. */ if (NEXT_INSN (insn) && GET_CODE (NEXT_INSN (insn)) == BARRIER) { ! delete_insn (NEXT_INSN (insn)); last = get_last_insn (); had_barrier = 1; } --- 455,461 ---- We will put the BARRIER back in later. */ if (NEXT_INSN (insn) && GET_CODE (NEXT_INSN (insn)) == BARRIER) { ! delete_related_insns (NEXT_INSN (insn)); last = get_last_insn (); had_barrier = 1; } *************** emit_delay_sequence (insn, list, length) *** 488,494 **** for (li = list; li; li = XEXP (li, 1), i++) { rtx tem = XEXP (li, 0); ! rtx note; /* Show that this copy of the insn isn't deleted. */ INSN_DELETED_P (tem) = 0; --- 489,495 ---- for (li = list; li; li = XEXP (li, 1), i++) { rtx tem = XEXP (li, 0); ! rtx note, next; /* Show that this copy of the insn isn't deleted. */ INSN_DELETED_P (tem) = 0; *************** emit_delay_sequence (insn, list, length) *** 497,507 **** PREV_INSN (tem) = XVECEXP (seq, 0, i - 1); NEXT_INSN (XVECEXP (seq, 0, i - 1)) = tem; ! /* Remove any REG_DEAD notes because we can't rely on them now ! that the insn has been moved. */ ! for (note = REG_NOTES (tem); note; note = XEXP (note, 1)) ! if (REG_NOTE_KIND (note) == REG_DEAD) ! XEXP (note, 0) = const0_rtx; } NEXT_INSN (XVECEXP (seq, 0, length)) = NEXT_INSN (seq_insn); --- 498,524 ---- PREV_INSN (tem) = XVECEXP (seq, 0, i - 1); NEXT_INSN (XVECEXP (seq, 0, i - 1)) = tem; ! for (note = REG_NOTES (tem); note; note = next) ! { ! next = XEXP (note, 1); ! switch (REG_NOTE_KIND (note)) ! { ! case REG_DEAD: ! /* Remove any REG_DEAD notes because we can't rely on them now ! that the insn has been moved. */ ! remove_note (tem, note); ! break; ! ! case REG_LABEL: ! /* Keep the label reference count up to date. */ ! if (GET_CODE (XEXP (note, 0)) == CODE_LABEL) ! LABEL_NUSES (XEXP (note, 0)) ++; ! break; ! ! default: ! break; ! } ! } } NEXT_INSN (XVECEXP (seq, 0, length)) = NEXT_INSN (seq_insn); *************** delete_from_delay_slot (insn) *** 589,595 **** list, and rebuild the delay list if non-empty. */ prev = PREV_INSN (seq_insn); trial = XVECEXP (seq, 0, 0); ! delete_insn (seq_insn); add_insn_after (trial, prev); if (GET_CODE (trial) == JUMP_INSN --- 606,612 ---- list, and rebuild the delay list if non-empty. */ prev = PREV_INSN (seq_insn); trial = XVECEXP (seq, 0, 0); ! delete_related_insns (seq_insn); add_insn_after (trial, prev); if (GET_CODE (trial) == JUMP_INSN *************** delete_scheduled_jump (insn) *** 647,663 **** if (GET_CODE (trial) == NOTE) trial = prev_nonnote_insn (trial); if (sets_cc0_p (PATTERN (trial)) != 1 ! || FIND_REG_INC_NOTE (trial, 0)) return; if (PREV_INSN (NEXT_INSN (trial)) == trial) ! delete_insn (trial); else delete_from_delay_slot (trial); } } #endif ! delete_insn (insn); } /* Counters for delay-slot filling. */ --- 664,680 ---- if (GET_CODE (trial) == NOTE) trial = prev_nonnote_insn (trial); if (sets_cc0_p (PATTERN (trial)) != 1 ! || FIND_REG_INC_NOTE (trial, NULL_RTX)) return; if (PREV_INSN (NEXT_INSN (trial)) == trial) ! delete_related_insns (trial); else delete_from_delay_slot (trial); } } #endif ! delete_related_insns (insn); } /* Counters for delay-slot filling. */ *************** note_delay_statistics (slots_filled, ind *** 718,726 **** static rtx optimize_skip (insn) ! register rtx insn; { ! register rtx trial = next_nonnote_insn (insn); rtx next_trial = next_active_insn (trial); rtx delay_list = 0; rtx target_label; --- 735,743 ---- static rtx optimize_skip (insn) ! rtx insn; { ! rtx trial = next_nonnote_insn (insn); rtx next_trial = next_active_insn (trial); rtx delay_list = 0; rtx target_label; *************** optimize_skip (insn) *** 733,739 **** || GET_CODE (PATTERN (trial)) == SEQUENCE || recog_memoized (trial) < 0 || (! eligible_for_annul_false (insn, 0, trial, flags) ! && ! eligible_for_annul_true (insn, 0, trial, flags))) return 0; /* There are two cases where we are just executing one insn (we assume --- 750,757 ---- || GET_CODE (PATTERN (trial)) == SEQUENCE || recog_memoized (trial) < 0 || (! eligible_for_annul_false (insn, 0, trial, flags) ! && ! eligible_for_annul_true (insn, 0, trial, flags)) ! || can_throw_internal (trial)) return 0; /* There are two cases where we are just executing one insn (we assume *************** optimize_skip (insn) *** 761,767 **** delay_list = add_to_delay_list (trial, NULL_RTX); next_trial = next_active_insn (trial); update_block (trial, trial); ! delete_insn (trial); /* Also, if we are targeting an unconditional branch, thread our jump to the target of that branch. Don't --- 779,785 ---- delay_list = add_to_delay_list (trial, NULL_RTX); next_trial = next_active_insn (trial); update_block (trial, trial); ! delete_related_insns (trial); /* Also, if we are targeting an unconditional branch, thread our jump to the target of that branch. Don't *************** get_branch_condition (insn, target) *** 1069,1077 **** || (GET_CODE (XEXP (src, 2)) == LABEL_REF && XEXP (XEXP (src, 2), 0) == target)) && XEXP (src, 1) == pc_rtx) ! return gen_rtx_fmt_ee (reverse_condition (GET_CODE (XEXP (src, 0))), ! GET_MODE (XEXP (src, 0)), ! XEXP (XEXP (src, 0), 0), XEXP (XEXP (src, 0), 1)); return 0; } --- 1087,1100 ---- || (GET_CODE (XEXP (src, 2)) == LABEL_REF && XEXP (XEXP (src, 2), 0) == target)) && XEXP (src, 1) == pc_rtx) ! { ! enum rtx_code rev; ! rev = reversed_comparison_code (XEXP (src, 0), insn); ! if (rev != UNKNOWN) ! return gen_rtx_fmt_ee (rev, GET_MODE (XEXP (src, 0)), ! XEXP (XEXP (src, 0), 0), ! XEXP (XEXP (src, 0), 1)); ! } return 0; } *************** steal_delay_list_from_target (insn, cond *** 1272,1277 **** --- 1295,1308 ---- || ! single_set (XVECEXP (seq, 0, 0))) return delay_list; + #ifdef MD_CAN_REDIRECT_BRANCH + /* On some targets, branches with delay slots can have a limited + displacement. Give the back end a chance to tell us we can't do + this. */ + if (! MD_CAN_REDIRECT_BRANCH (insn, XVECEXP (seq, 0, 0))) + return delay_list; + #endif + for (i = 1; i < XVECLEN (seq, 0); i++) { rtx trial = XVECEXP (seq, 0, i); *************** try_merge_delay_insns (insn, thread) *** 1501,1507 **** if (trial == thread) thread = next_active_insn (thread); ! delete_insn (trial); INSN_FROM_TARGET_P (next_to_match) = 0; } else --- 1532,1538 ---- if (trial == thread) thread = next_active_insn (thread); ! delete_related_insns (trial); INSN_FROM_TARGET_P (next_to_match) = 0; } else *************** try_merge_delay_insns (insn, thread) *** 1594,1600 **** else { update_block (XEXP (merged_insns, 0), thread); ! delete_insn (XEXP (merged_insns, 0)); } } --- 1625,1631 ---- else { update_block (XEXP (merged_insns, 0), thread); ! delete_related_insns (XEXP (merged_insns, 0)); } } *************** redundant_insn (insn, target, delay_list *** 1644,1650 **** /* Scan backwards looking for a match. */ for (trial = PREV_INSN (target), ! insns_to_search = MAX_DELAY_SLOT_INSN_SEARCH; trial && insns_to_search > 0; trial = PREV_INSN (trial), --insns_to_search) { --- 1675,1681 ---- /* Scan backwards looking for a match. */ for (trial = PREV_INSN (target), ! insns_to_search = MAX_DELAY_SLOT_INSN_SEARCH; trial && insns_to_search > 0; trial = PREV_INSN (trial), --insns_to_search) { *************** redundant_insn (insn, target, delay_list *** 1748,1754 **** INSN sets or sets something insn uses or sets. */ for (trial = PREV_INSN (target), ! insns_to_search = MAX_DELAY_SLOT_INSN_SEARCH; trial && GET_CODE (trial) != CODE_LABEL && insns_to_search > 0; trial = PREV_INSN (trial), --insns_to_search) { --- 1779,1785 ---- INSN sets or sets something insn uses or sets. */ for (trial = PREV_INSN (target), ! insns_to_search = MAX_DELAY_SLOT_INSN_SEARCH; trial && GET_CODE (trial) != CODE_LABEL && insns_to_search > 0; trial = PREV_INSN (trial), --insns_to_search) { *************** static void *** 2025,2032 **** fill_simple_delay_slots (non_jumps_p) int non_jumps_p; { ! register rtx insn, pat, trial, next_trial; ! register int i; int num_unfilled_slots = unfilled_slots_next - unfilled_slots_base; struct resources needed, set; int slots_to_fill, slots_filled; --- 2056,2063 ---- fill_simple_delay_slots (non_jumps_p) int non_jumps_p; { ! rtx insn, pat, trial, next_trial; ! int i; int num_unfilled_slots = unfilled_slots_next - unfilled_slots_base; struct resources needed, set; int slots_to_fill, slots_filled; *************** fill_simple_delay_slots (non_jumps_p) *** 2097,2103 **** && GET_CODE (trial) == JUMP_INSN && simplejump_p (trial) && eligible_for_delay (insn, slots_filled, trial, flags) ! && no_labels_between_p (insn, trial)) { rtx *tmp; slots_filled++; --- 2128,2135 ---- && GET_CODE (trial) == JUMP_INSN && simplejump_p (trial) && eligible_for_delay (insn, slots_filled, trial, flags) ! && no_labels_between_p (insn, trial) ! && ! can_throw_internal (trial)) { rtx *tmp; slots_filled++; *************** fill_simple_delay_slots (non_jumps_p) *** 2114,2120 **** tmp++; /* Remove the unconditional jump from consideration for delay slot ! filling and unthread it. */ if (*tmp == trial) *tmp = 0; { --- 2146,2152 ---- tmp++; /* Remove the unconditional jump from consideration for delay slot ! filling and unthread it. */ if (*tmp == trial) *tmp = 0; { *************** fill_simple_delay_slots (non_jumps_p) *** 2167,2173 **** /* Can't separate set of cc0 from its use. */ && ! (reg_mentioned_p (cc0_rtx, pat) && ! sets_cc0_p (pat)) #endif ! ) { trial = try_split (pat, trial, 1); next_trial = prev_nonnote_insn (trial); --- 2199,2205 ---- /* Can't separate set of cc0 from its use. */ && ! (reg_mentioned_p (cc0_rtx, pat) && ! sets_cc0_p (pat)) #endif ! && ! can_throw_internal (trial)) { trial = try_split (pat, trial, 1); next_trial = prev_nonnote_insn (trial); *************** fill_simple_delay_slots (non_jumps_p) *** 2182,2188 **** delay_list = gen_rtx_INSN_LIST (VOIDmode, trial, delay_list); update_block (trial, trial); ! delete_insn (trial); if (slots_to_fill == ++slots_filled) break; continue; --- 2214,2220 ---- delay_list = gen_rtx_INSN_LIST (VOIDmode, trial, delay_list); update_block (trial, trial); ! delete_related_insns (trial); if (slots_to_fill == ++slots_filled) break; continue; *************** fill_simple_delay_slots (non_jumps_p) *** 2230,2240 **** int i = 2; ! try { f(); i = 3; } catch (...) {} ! return i; Even though `i' is a local variable, we must be sure not --- 2262,2272 ---- int i = 2; ! try { f(); i = 3; } catch (...) {} ! return i; Even though `i' is a local variable, we must be sure not *************** fill_simple_delay_slots (non_jumps_p) *** 2243,2249 **** Presumably, we should also check to see if we could get back to this function via `setjmp'. */ ! && !can_throw_internal (insn) && (GET_CODE (insn) != JUMP_INSN || ((condjump_p (insn) || condjump_in_parallel_p (insn)) && ! simplejump_p (insn) --- 2275,2281 ---- Presumably, we should also check to see if we could get back to this function via `setjmp'. */ ! && ! can_throw_internal (insn) && (GET_CODE (insn) != JUMP_INSN || ((condjump_p (insn) || condjump_in_parallel_p (insn)) && ! simplejump_p (insn) *************** fill_simple_delay_slots (non_jumps_p) *** 2300,2306 **** break; /* See if we have a resource problem before we try to ! split. */ if (GET_CODE (pat) != SEQUENCE && ! insn_references_resource_p (trial, &set, 1) && ! insn_sets_resource_p (trial, &set, 1) --- 2332,2338 ---- break; /* See if we have a resource problem before we try to ! split. */ if (GET_CODE (pat) != SEQUENCE && ! insn_references_resource_p (trial, &set, 1) && ! insn_sets_resource_p (trial, &set, 1) *************** fill_simple_delay_slots (non_jumps_p) *** 2310,2316 **** #endif && ! (maybe_never && may_trap_p (pat)) && (trial = try_split (pat, trial, 0)) ! && eligible_for_delay (insn, slots_filled, trial, flags)) { next_trial = next_nonnote_insn (trial); delay_list = add_to_delay_list (trial, delay_list); --- 2342,2349 ---- #endif && ! (maybe_never && may_trap_p (pat)) && (trial = try_split (pat, trial, 0)) ! && eligible_for_delay (insn, slots_filled, trial, flags) ! && ! can_throw_internal(trial)) { next_trial = next_nonnote_insn (trial); delay_list = add_to_delay_list (trial, delay_list); *************** fill_simple_delay_slots (non_jumps_p) *** 2320,2326 **** link_cc0_insns (trial); #endif ! delete_insn (trial); if (slots_to_fill == ++slots_filled) break; continue; --- 2353,2359 ---- link_cc0_insns (trial); #endif ! delete_related_insns (trial); if (slots_to_fill == ++slots_filled) break; continue; *************** fill_simple_delay_slots (non_jumps_p) *** 2362,2368 **** #endif && ! (maybe_never && may_trap_p (PATTERN (next_trial))) && (next_trial = try_split (PATTERN (next_trial), next_trial, 0)) ! && eligible_for_delay (insn, slots_filled, next_trial, flags)) { rtx new_label = next_active_insn (next_trial); --- 2395,2402 ---- #endif && ! (maybe_never && may_trap_p (PATTERN (next_trial))) && (next_trial = try_split (PATTERN (next_trial), next_trial, 0)) ! && eligible_for_delay (insn, slots_filled, next_trial, flags) ! && ! can_throw_internal (trial)) { rtx new_label = next_active_insn (next_trial); *************** fill_simple_delay_slots (non_jumps_p) *** 2466,2472 **** /* Don't want to mess with cc0 here. */ && ! reg_mentioned_p (cc0_rtx, pat) #endif ! ) { trial = try_split (pat, trial, 1); if (ELIGIBLE_FOR_EPILOGUE_DELAY (trial, slots_filled)) --- 2500,2506 ---- /* Don't want to mess with cc0 here. */ && ! reg_mentioned_p (cc0_rtx, pat) #endif ! && ! can_throw_internal (trial)) { trial = try_split (pat, trial, 1); if (ELIGIBLE_FOR_EPILOGUE_DELAY (trial, slots_filled)) *************** fill_simple_delay_slots (non_jumps_p) *** 2479,2485 **** current_function_epilogue_delay_list); mark_end_of_function_resources (trial, 1); update_block (trial, trial); ! delete_insn (trial); /* Clear deleted bit so final.c will output the insn. */ INSN_DELETED_P (trial) = 0; --- 2513,2519 ---- current_function_epilogue_delay_list); mark_end_of_function_resources (trial, 1); update_block (trial, trial); ! delete_related_insns (trial); /* Clear deleted bit so final.c will output the insn. */ INSN_DELETED_P (trial) = 0; *************** fill_slots_from_thread (insn, condition, *** 2607,2613 **** && ! (reg_mentioned_p (cc0_rtx, pat) && (! own_thread || ! sets_cc0_p (pat))) #endif ! ) { rtx prior_insn; --- 2641,2647 ---- && ! (reg_mentioned_p (cc0_rtx, pat) && (! own_thread || ! sets_cc0_p (pat))) #endif ! && ! can_throw_internal (trial)) { rtx prior_insn; *************** fill_slots_from_thread (insn, condition, *** 2627,2633 **** new_thread = thread; } ! delete_insn (trial); } else { --- 2661,2667 ---- new_thread = thread; } ! delete_related_insns (trial); } else { *************** fill_slots_from_thread (insn, condition, *** 2694,2699 **** --- 2728,2735 ---- starting point of this thread. */ if (own_thread) { + rtx note; + update_block (trial, thread); if (trial == thread) { *************** fill_slots_from_thread (insn, condition, *** 2701,2707 **** if (new_thread == trial) new_thread = thread; } ! delete_insn (trial); } else new_thread = next_active_insn (trial); --- 2737,2755 ---- if (new_thread == trial) new_thread = thread; } ! ! /* We are moving this insn, not deleting it. We must ! temporarily increment the use count on any referenced ! label lest it be deleted by delete_related_insns. */ ! note = find_reg_note (trial, REG_LABEL, 0); ! /* REG_LABEL could be NOTE_INSN_DELETED_LABEL too. */ ! if (note && GET_CODE (XEXP (note, 0)) == CODE_LABEL) ! LABEL_NUSES (XEXP (note, 0))++; ! ! delete_related_insns (trial); ! ! if (note && GET_CODE (XEXP (note, 0)) == CODE_LABEL) ! LABEL_NUSES (XEXP (note, 0))--; } else new_thread = next_active_insn (trial); *************** fill_slots_from_thread (insn, condition, *** 2791,2802 **** /* If this is the `true' thread, we will want to follow the jump, so we can only do this if we have taken everything up to here. */ if (thread_if_true && trial == new_thread) ! delay_list ! = steal_delay_list_from_target (insn, condition, PATTERN (trial), ! delay_list, &set, &needed, ! &opposite_needed, slots_to_fill, ! pslots_filled, &must_annul, ! &new_thread); else if (! thread_if_true) delay_list = steal_delay_list_from_fallthrough (insn, condition, --- 2839,2856 ---- /* If this is the `true' thread, we will want to follow the jump, so we can only do this if we have taken everything up to here. */ if (thread_if_true && trial == new_thread) ! { ! delay_list ! = steal_delay_list_from_target (insn, condition, PATTERN (trial), ! delay_list, &set, &needed, ! &opposite_needed, slots_to_fill, ! pslots_filled, &must_annul, ! &new_thread); ! /* If we owned the thread and are told that it branched ! elsewhere, make sure we own the thread at the new location. */ ! if (own_thread && trial != new_thread) ! own_thread = own_thread_p (new_thread, new_thread, 0); ! } else if (! thread_if_true) delay_list = steal_delay_list_from_fallthrough (insn, condition, *************** fill_slots_from_thread (insn, condition, *** 2824,2831 **** trial = new_thread; pat = PATTERN (trial); ! if (GET_CODE (trial) != INSN || GET_CODE (pat) != SET ! || ! eligible_for_delay (insn, 0, trial, flags)) return 0; dest = SET_DEST (pat), src = SET_SRC (pat); --- 2878,2887 ---- trial = new_thread; pat = PATTERN (trial); ! if (GET_CODE (trial) != INSN ! || GET_CODE (pat) != SET ! || ! eligible_for_delay (insn, 0, trial, flags) ! || can_throw_internal (trial)) return 0; dest = SET_DEST (pat), src = SET_SRC (pat); *************** fill_slots_from_thread (insn, condition, *** 2854,2860 **** if (recog_memoized (ninsn) < 0 || (extract_insn (ninsn), ! constrain_operands (1))) { ! delete_insn (ninsn); return 0; } --- 2910,2916 ---- if (recog_memoized (ninsn) < 0 || (extract_insn (ninsn), ! constrain_operands (1))) { ! delete_related_insns (ninsn); return 0; } *************** fill_slots_from_thread (insn, condition, *** 2867,2873 **** if (new_thread == trial) new_thread = thread; } ! delete_insn (trial); } else new_thread = next_active_insn (trial); --- 2923,2929 ---- if (new_thread == trial) new_thread = thread; } ! delete_related_insns (trial); } else new_thread = next_active_insn (trial); *************** fill_slots_from_thread (insn, condition, *** 2928,2935 **** static void fill_eager_delay_slots () { ! register rtx insn; ! register int i; int num_unfilled_slots = unfilled_slots_next - unfilled_slots_base; for (i = 0; i < num_unfilled_slots; i++) --- 2984,2991 ---- static void fill_eager_delay_slots () { ! rtx insn; ! int i; int num_unfilled_slots = unfilled_slots_next - unfilled_slots_base; for (i = 0; i < num_unfilled_slots; i++) *************** static void *** 3057,3064 **** relax_delay_slots (first) rtx first; { ! register rtx insn, next, pat; ! register rtx trial, delay_insn, target_label; /* Look at every JUMP_INSN and see if we can improve it. */ for (insn = first; insn; insn = next) --- 3113,3120 ---- relax_delay_slots (first) rtx first; { ! rtx insn, next, pat; ! rtx trial, delay_insn, target_label; /* Look at every JUMP_INSN and see if we can improve it. */ for (insn = first; insn; insn = next) *************** relax_delay_slots (first) *** 3090,3096 **** if (target_label != JUMP_LABEL (insn)) reorg_redirect_jump (insn, target_label); ! /* See if this jump branches around a unconditional jump. If so, invert this jump and point it to the target of the second jump. */ if (next && GET_CODE (next) == JUMP_INSN --- 3146,3152 ---- if (target_label != JUMP_LABEL (insn)) reorg_redirect_jump (insn, target_label); ! /* See if this jump branches around an unconditional jump. If so, invert this jump and point it to the target of the second jump. */ if (next && GET_CODE (next) == JUMP_INSN *************** relax_delay_slots (first) *** 3113,3119 **** if (invert_jump (insn, label, 1)) { ! delete_insn (next); next = insn; } --- 3169,3175 ---- if (invert_jump (insn, label, 1)) { ! delete_related_insns (next); next = insn; } *************** relax_delay_slots (first) *** 3121,3127 **** --LABEL_NUSES (label); if (--LABEL_NUSES (target_label) == 0) ! delete_insn (target_label); continue; } --- 3177,3183 ---- --LABEL_NUSES (label); if (--LABEL_NUSES (target_label) == 0) ! delete_related_insns (target_label); continue; } *************** relax_delay_slots (first) *** 3197,3203 **** INSN_FROM_TARGET_P (XVECEXP (pat, 0, i)) = 0; trial = PREV_INSN (insn); ! delete_insn (insn); emit_insn_after (pat, trial); delete_scheduled_jump (delay_insn); continue; --- 3253,3259 ---- INSN_FROM_TARGET_P (XVECEXP (pat, 0, i)) = 0; trial = PREV_INSN (insn); ! delete_related_insns (insn); emit_insn_after (pat, trial); delete_scheduled_jump (delay_insn); continue; *************** relax_delay_slots (first) *** 3236,3242 **** insn, redirect the jump to the following insn process again. */ trial = next_active_insn (target_label); if (trial && GET_CODE (PATTERN (trial)) != SEQUENCE ! && redundant_insn (trial, insn, 0)) { rtx tmp; --- 3292,3299 ---- insn, redirect the jump to the following insn process again. */ trial = next_active_insn (target_label); if (trial && GET_CODE (PATTERN (trial)) != SEQUENCE ! && redundant_insn (trial, insn, 0) ! && ! can_throw_internal (trial)) { rtx tmp; *************** relax_delay_slots (first) *** 3310,3316 **** INSN_FROM_TARGET_P (XVECEXP (pat, 0, i)) = 0; trial = PREV_INSN (insn); ! delete_insn (insn); emit_insn_after (pat, trial); delete_scheduled_jump (delay_insn); continue; --- 3367,3373 ---- INSN_FROM_TARGET_P (XVECEXP (pat, 0, i)) = 0; trial = PREV_INSN (insn); ! delete_related_insns (insn); emit_insn_after (pat, trial); delete_scheduled_jump (delay_insn); continue; *************** relax_delay_slots (first) *** 3325,3331 **** && XVECLEN (pat, 0) == 2 && rtx_equal_p (PATTERN (next), PATTERN (XVECEXP (pat, 0, 1)))) { ! delete_insn (insn); continue; } --- 3382,3388 ---- && XVECLEN (pat, 0) == 2 && rtx_equal_p (PATTERN (next), PATTERN (XVECEXP (pat, 0, 1)))) { ! delete_related_insns (insn); continue; } *************** relax_delay_slots (first) *** 3369,3380 **** INSN_FROM_TARGET_P (slot) = ! INSN_FROM_TARGET_P (slot); } ! delete_insn (next); next = insn; } if (old_label && --LABEL_NUSES (old_label) == 0) ! delete_insn (old_label); continue; } } --- 3426,3437 ---- INSN_FROM_TARGET_P (slot) = ! INSN_FROM_TARGET_P (slot); } ! delete_related_insns (next); next = insn; } if (old_label && --LABEL_NUSES (old_label) == 0) ! delete_related_insns (old_label); continue; } } *************** make_return_insns (first) *** 3493,3499 **** { rtx prev = PREV_INSN (insn); ! delete_insn (insn); for (i = 1; i < XVECLEN (pat, 0); i++) prev = emit_insn_after (PATTERN (XVECEXP (pat, 0, i)), prev); --- 3550,3556 ---- { rtx prev = PREV_INSN (insn); ! delete_related_insns (insn); for (i = 1; i < XVECLEN (pat, 0); i++) prev = emit_insn_after (PATTERN (XVECEXP (pat, 0, i)), prev); *************** make_return_insns (first) *** 3512,3518 **** /* Now delete REAL_RETURN_LABEL if we never used it. Then try to fill any new delay slots we have created. */ if (--LABEL_NUSES (real_return_label) == 0) ! delete_insn (real_return_label); fill_simple_delay_slots (1); fill_simple_delay_slots (0); --- 3569,3575 ---- /* Now delete REAL_RETURN_LABEL if we never used it. Then try to fill any new delay slots we have created. */ if (--LABEL_NUSES (real_return_label) == 0) ! delete_related_insns (real_return_label); fill_simple_delay_slots (1); fill_simple_delay_slots (0); *************** dbr_schedule (first, file) *** 3622,3635 **** if (GET_CODE (insn) == INSN && GET_CODE (PATTERN (insn)) == USE && INSN_P (XEXP (PATTERN (insn), 0))) ! next = delete_insn (insn); } /* If we made an end of function label, indicate that it is now safe to delete it by undoing our prior adjustment to LABEL_NUSES. If it is now unused, delete it. */ if (end_of_function_label && --LABEL_NUSES (end_of_function_label) == 0) ! delete_insn (end_of_function_label); #ifdef HAVE_return if (HAVE_return && end_of_function_label != 0) --- 3679,3692 ---- if (GET_CODE (insn) == INSN && GET_CODE (PATTERN (insn)) == USE && INSN_P (XEXP (PATTERN (insn), 0))) ! next = delete_related_insns (insn); } /* If we made an end of function label, indicate that it is now safe to delete it by undoing our prior adjustment to LABEL_NUSES. If it is now unused, delete it. */ if (end_of_function_label && --LABEL_NUSES (end_of_function_label) == 0) ! delete_related_insns (end_of_function_label); #ifdef HAVE_return if (HAVE_return && end_of_function_label != 0) *************** dbr_schedule (first, file) *** 3641,3653 **** /* It is not clear why the line below is needed, but it does seem to be. */ unfilled_firstobj = (rtx *) obstack_alloc (&unfilled_slots_obstack, 0); - /* Reposition the prologue and epilogue notes in case we moved the - prologue/epilogue insns. */ - reposition_prologue_and_epilogue_notes (first); - if (file) { ! register int i, j, need_comma; int total_delay_slots[MAX_DELAY_HISTOGRAM + 1]; int total_annul_slots[MAX_DELAY_HISTOGRAM + 1]; --- 3698,3706 ---- /* It is not clear why the line below is needed, but it does seem to be. */ unfilled_firstobj = (rtx *) obstack_alloc (&unfilled_slots_obstack, 0); if (file) { ! int i, j, need_comma; int total_delay_slots[MAX_DELAY_HISTOGRAM + 1]; int total_annul_slots[MAX_DELAY_HISTOGRAM + 1]; diff -Nrc3pad gcc-3.0.4/gcc/resource.c gcc-3.1/gcc/resource.c *** gcc-3.0.4/gcc/resource.c Sat May 12 21:14:07 2001 --- gcc-3.1/gcc/resource.c Tue Feb 19 02:53:10 2002 *************** *** 1,22 **** /* Definitions for computing resource usage of specific insns. Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" #include "system.h" --- 1,22 ---- /* Definitions for computing resource usage of specific insns. Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" #include "system.h" *************** update_live_status (dest, x, data) *** 100,106 **** return; if (GET_CODE (dest) == SUBREG) ! first_regno = REGNO (SUBREG_REG (dest)) + SUBREG_WORD (dest); else first_regno = REGNO (dest); --- 100,106 ---- return; if (GET_CODE (dest) == SUBREG) ! first_regno = subreg_regno (dest); else first_regno = REGNO (dest); *************** next_insn_no_annul (insn) *** 190,209 **** } /* Given X, some rtl, and RES, a pointer to a `struct resource', mark ! which resources are references by the insn. If INCLUDE_DELAYED_EFFECTS is TRUE, resources used by the called routine will be included for CALL_INSNs. */ void mark_referenced_resources (x, res, include_delayed_effects) ! register rtx x; ! register struct resources *res; ! register int include_delayed_effects; { enum rtx_code code = GET_CODE (x); int i, j; unsigned int r; ! register const char *format_ptr; /* Handle leaf items for which we set resource flags. Also, special-case CALL, SET and CLOBBER operators. */ --- 190,209 ---- } /* Given X, some rtl, and RES, a pointer to a `struct resource', mark ! which resources are referenced by the insn. If INCLUDE_DELAYED_EFFECTS is TRUE, resources used by the called routine will be included for CALL_INSNs. */ void mark_referenced_resources (x, res, include_delayed_effects) ! rtx x; ! struct resources *res; ! int include_delayed_effects; { enum rtx_code code = GET_CODE (x); int i, j; unsigned int r; ! const char *format_ptr; /* Handle leaf items for which we set resource flags. Also, special-case CALL, SET and CLOBBER operators. */ *************** mark_referenced_resources (x, res, inclu *** 212,217 **** --- 212,218 ---- case CONST: case CONST_INT: case CONST_DOUBLE: + case CONST_VECTOR: case PC: case SYMBOL_REF: case LABEL_REF: *************** mark_referenced_resources (x, res, inclu *** 222,228 **** mark_referenced_resources (SUBREG_REG (x), res, 0); else { ! unsigned int regno = REGNO (SUBREG_REG (x)) + SUBREG_WORD (x); unsigned int last_regno = regno + HARD_REGNO_NREGS (regno, GET_MODE (x)); --- 223,229 ---- mark_referenced_resources (SUBREG_REG (x), res, 0); else { ! unsigned int regno = subreg_regno (x); unsigned int last_regno = regno + HARD_REGNO_NREGS (regno, GET_MODE (x)); *************** mark_referenced_resources (x, res, inclu *** 326,338 **** rtx insn = PREV_INSN (x); rtx sequence = 0; int seq_size = 0; - rtx next = NEXT_INSN (x); int i; /* If we are part of a delay slot sequence, point at the SEQUENCE. */ if (NEXT_INSN (insn) != x) { - next = NEXT_INSN (NEXT_INSN (insn)); sequence = PATTERN (NEXT_INSN (insn)); seq_size = XVECLEN (sequence, 0); if (GET_CODE (sequence) != SEQUENCE) --- 327,337 ---- *************** mark_referenced_resources (x, res, inclu *** 353,359 **** if (global_regs[i]) SET_HARD_REG_BIT (res->regs, i); ! /* Check for a NOTE_INSN_SETJMP. If it exists, then we must assume that this call can need any register. This is done to be more conservative about how we handle setjmp. --- 352,358 ---- if (global_regs[i]) SET_HARD_REG_BIT (res->regs, i); ! /* Check for a REG_SETJMP. If it exists, then we must assume that this call can need any register. This is done to be more conservative about how we handle setjmp. *************** mark_referenced_resources (x, res, inclu *** 361,368 **** registers ensures that a register will not be considered dead just because it crosses a setjmp call. A register should be considered dead only if the setjmp call returns non-zero. */ ! if (next && GET_CODE (next) == NOTE ! && NOTE_LINE_NUMBER (next) == NOTE_INSN_SETJMP) SET_HARD_REG_SET (res->regs); { --- 360,366 ---- registers ensures that a register will not be considered dead just because it crosses a setjmp call. A register should be considered dead only if the setjmp call returns non-zero. */ ! if (find_reg_note (x, REG_SETJMP, NULL)) SET_HARD_REG_SET (res->regs); { *************** find_dead_or_set_registers (target, res, *** 622,633 **** SETs CC0 even though this is not totally correct. The reason for this is that we require a SET of CC0 to immediately precede the reference to CC0. So if some other insn sets CC0 as a side-effect, we know it cannot affect ! our computation and thus may be placed in a delay slot. */ void mark_set_resources (x, res, in_dest, mark_type) ! register rtx x; ! register struct resources *res; int in_dest; enum mark_resource_type mark_type; { --- 620,631 ---- SETs CC0 even though this is not totally correct. The reason for this is that we require a SET of CC0 to immediately precede the reference to CC0. So if some other insn sets CC0 as a side-effect, we know it cannot affect ! our computation and thus may be placed in a delay slot. */ void mark_set_resources (x, res, in_dest, mark_type) ! rtx x; ! struct resources *res; int in_dest; enum mark_resource_type mark_type; { *************** mark_set_resources (x, res, in_dest, mar *** 648,653 **** --- 646,652 ---- case USE: case CONST_INT: case CONST_DOUBLE: + case CONST_VECTOR: case LABEL_REF: case SYMBOL_REF: case CONST: *************** mark_set_resources (x, res, in_dest, mar *** 667,674 **** if (mark_type == MARK_SRC_DEST_CALL) { - rtx next = NEXT_INSN (x); - rtx prev = PREV_INSN (x); rtx link; res->cc = res->memory = 1; --- 666,671 ---- *************** mark_set_resources (x, res, in_dest, mar *** 676,696 **** if (call_used_regs[r] || global_regs[r]) SET_HARD_REG_BIT (res->regs, r); - /* If X is part of a delay slot sequence, then NEXT should be - the first insn after the sequence. */ - if (NEXT_INSN (prev) != x) - next = NEXT_INSN (NEXT_INSN (prev)); - for (link = CALL_INSN_FUNCTION_USAGE (x); link; link = XEXP (link, 1)) if (GET_CODE (XEXP (link, 0)) == CLOBBER) mark_set_resources (SET_DEST (XEXP (link, 0)), res, 1, MARK_SRC_DEST); ! /* Check for a NOTE_INSN_SETJMP. If it exists, then we must assume that this call can clobber any register. */ ! if (next && GET_CODE (next) == NOTE ! && NOTE_LINE_NUMBER (next) == NOTE_INSN_SETJMP) SET_HARD_REG_SET (res->regs); } --- 673,687 ---- if (call_used_regs[r] || global_regs[r]) SET_HARD_REG_BIT (res->regs, r); for (link = CALL_INSN_FUNCTION_USAGE (x); link; link = XEXP (link, 1)) if (GET_CODE (XEXP (link, 0)) == CLOBBER) mark_set_resources (SET_DEST (XEXP (link, 0)), res, 1, MARK_SRC_DEST); ! /* Check for a REG_SETJMP. If it exists, then we must assume that this call can clobber any register. */ ! if (find_reg_note (x, REG_SETJMP, NULL)) SET_HARD_REG_SET (res->regs); } *************** mark_set_resources (x, res, in_dest, mar *** 780,786 **** mark_set_resources (SUBREG_REG (x), res, in_dest, mark_type); else { ! unsigned int regno = REGNO (SUBREG_REG (x)) + SUBREG_WORD (x); unsigned int last_regno = regno + HARD_REGNO_NREGS (regno, GET_MODE (x)); --- 771,777 ---- mark_set_resources (SUBREG_REG (x), res, in_dest, mark_type); else { ! unsigned int regno = subreg_regno (x); unsigned int last_regno = regno + HARD_REGNO_NREGS (regno, GET_MODE (x)); *************** mark_target_live_regs (insns, target, re *** 902,908 **** struct resources *res; { int b = -1; ! int i; struct target_info *tinfo = NULL; rtx insn; rtx jump_insn = 0; --- 893,899 ---- struct resources *res; { int b = -1; ! unsigned int i; struct target_info *tinfo = NULL; rtx insn; rtx jump_insn = 0; *************** mark_target_live_regs (insns, target, re *** 960,966 **** tinfo = (struct target_info *) xmalloc (sizeof (struct target_info)); tinfo->uid = INSN_UID (target); tinfo->block = b; ! tinfo->next = target_hash_table[INSN_UID (target) % TARGET_HASH_PRIME]; target_hash_table[INSN_UID (target) % TARGET_HASH_PRIME] = tinfo; } } --- 951,958 ---- tinfo = (struct target_info *) xmalloc (sizeof (struct target_info)); tinfo->uid = INSN_UID (target); tinfo->block = b; ! tinfo->next ! = target_hash_table[INSN_UID (target) % TARGET_HASH_PRIME]; target_hash_table[INSN_UID (target) % TARGET_HASH_PRIME] = tinfo; } } *************** mark_target_live_regs (insns, target, re *** 1033,1053 **** /* CALL clobbers all call-used regs that aren't fixed except sp, ap, and fp. Do this before setting the result of the call live. */ ! for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) ! if (call_used_regs[i] ! && i != STACK_POINTER_REGNUM && i != FRAME_POINTER_REGNUM ! && i != ARG_POINTER_REGNUM ! #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM ! && i != HARD_FRAME_POINTER_REGNUM ! #endif ! #if ARG_POINTER_REGNUM != FRAME_POINTER_REGNUM ! && ! (i == ARG_POINTER_REGNUM && fixed_regs[i]) ! #endif ! #if defined (PIC_OFFSET_TABLE_REGNUM) && !defined (PIC_OFFSET_TABLE_REG_CALL_CLOBBERED) ! && ! (i == PIC_OFFSET_TABLE_REGNUM && flag_pic) ! #endif ! ) ! CLEAR_HARD_REG_BIT (current_live_regs, i); /* A CALL_INSN sets any global register live, since it may have been modified by the call. */ --- 1025,1032 ---- /* CALL clobbers all call-used regs that aren't fixed except sp, ap, and fp. Do this before setting the result of the call live. */ ! AND_COMPL_HARD_REG_SET (current_live_regs, ! regs_invalidated_by_call); /* A CALL_INSN sets any global register live, since it may have been modified by the call. */ *************** mark_target_live_regs (insns, target, re *** 1072,1079 **** && GET_CODE (XEXP (link, 0)) == REG && REGNO (XEXP (link, 0)) < FIRST_PSEUDO_REGISTER) { ! int first_regno = REGNO (XEXP (link, 0)); ! int last_regno = (first_regno + HARD_REGNO_NREGS (first_regno, GET_MODE (XEXP (link, 0)))); --- 1051,1058 ---- && GET_CODE (XEXP (link, 0)) == REG && REGNO (XEXP (link, 0)) < FIRST_PSEUDO_REGISTER) { ! unsigned int first_regno = REGNO (XEXP (link, 0)); ! unsigned int last_regno = (first_regno + HARD_REGNO_NREGS (first_regno, GET_MODE (XEXP (link, 0)))); *************** mark_target_live_regs (insns, target, re *** 1091,1098 **** && GET_CODE (XEXP (link, 0)) == REG && REGNO (XEXP (link, 0)) < FIRST_PSEUDO_REGISTER) { ! int first_regno = REGNO (XEXP (link, 0)); ! int last_regno = (first_regno + HARD_REGNO_NREGS (first_regno, GET_MODE (XEXP (link, 0)))); --- 1070,1077 ---- && GET_CODE (XEXP (link, 0)) == REG && REGNO (XEXP (link, 0)) < FIRST_PSEUDO_REGISTER) { ! unsigned int first_regno = REGNO (XEXP (link, 0)); ! unsigned int last_regno = (first_regno + HARD_REGNO_NREGS (first_regno, GET_MODE (XEXP (link, 0)))); *************** mark_target_live_regs (insns, target, re *** 1139,1145 **** /* If we hit an unconditional branch, we have another way of finding out what is live: we can see what is live at the branch target and include anything used but not set before the branch. We add the live ! resources found using the test below to those found until now. */ if (jump_insn) { --- 1118,1124 ---- /* If we hit an unconditional branch, we have another way of finding out what is live: we can see what is live at the branch target and include anything used but not set before the branch. We add the live ! resources found using the test below to those found until now. */ if (jump_insn) { *************** incr_ticks_for_insn (insn) *** 1315,1321 **** } /* Add TRIAL to the set of resources used at the end of the current ! function. */ void mark_end_of_function_resources (trial, include_delayed_effects) rtx trial; --- 1294,1300 ---- } /* Add TRIAL to the set of resources used at the end of the current ! function. */ void mark_end_of_function_resources (trial, include_delayed_effects) rtx trial; diff -Nrc3pad gcc-3.0.4/gcc/resource.h gcc-3.1/gcc/resource.h *** gcc-3.0.4/gcc/resource.h Sat May 27 20:23:14 2000 --- gcc-3.1/gcc/resource.h Tue Oct 9 14:03:12 2001 *************** *** 1,29 **** /* Definitions for computing resource usage of specific insns. 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. */ /* Macro to clear all resources. */ #define CLEAR_RESOURCE(RES) \ do { (RES)->memory = (RES)->unch_memory = (RES)->volatil = (RES)->cc = 0; \ CLEAR_HARD_REG_SET ((RES)->regs); } while (0) ! /* The resources used by a given insn. */ struct resources { char memory; /* Insn sets or needs a memory location. */ --- 1,29 ---- /* Definitions for computing resource usage of specific insns. Copyright (C) 1999 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* Macro to clear all resources. */ #define CLEAR_RESOURCE(RES) \ do { (RES)->memory = (RES)->unch_memory = (RES)->volatil = (RES)->cc = 0; \ CLEAR_HARD_REG_SET ((RES)->regs); } while (0) ! /* The resources used by a given insn. */ struct resources { char memory; /* Insn sets or needs a memory location. */ diff -Nrc3pad gcc-3.0.4/gcc/rtl-error.c gcc-3.1/gcc/rtl-error.c *** gcc-3.0.4/gcc/rtl-error.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/rtl-error.c Sun Dec 2 00:04:21 2001 *************** *** 0 **** --- 1,144 ---- + /* RTL specific diagnostic subroutines for the GNU C compiler + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Gabriel Dos Reis + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GCC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + #include "config.h" + #undef FLOAT /* This is for hpux. They should change hpux. */ + #undef FFS /* Some systems define this in param.h. */ + #include "system.h" + #include "rtl.h" + #include "insn-attr.h" + #include "insn-config.h" + #include "input.h" + #include "toplev.h" + #include "intl.h" + #include "diagnostic.h" + + static void file_and_line_for_asm PARAMS ((rtx, const char **, int *)); + static void diagnostic_for_asm PARAMS ((rtx, const char *, va_list *, int)); + + /* Figure file and line of the given INSN. */ + static void + file_and_line_for_asm (insn, pfile, pline) + rtx insn; + const char **pfile; + int *pline; + { + rtx body = PATTERN (insn); + rtx asmop; + + /* Find the (or one of the) ASM_OPERANDS in the insn. */ + if (GET_CODE (body) == SET && GET_CODE (SET_SRC (body)) == ASM_OPERANDS) + asmop = SET_SRC (body); + else if (GET_CODE (body) == ASM_OPERANDS) + asmop = body; + else if (GET_CODE (body) == PARALLEL + && GET_CODE (XVECEXP (body, 0, 0)) == SET) + asmop = SET_SRC (XVECEXP (body, 0, 0)); + else if (GET_CODE (body) == PARALLEL + && GET_CODE (XVECEXP (body, 0, 0)) == ASM_OPERANDS) + asmop = XVECEXP (body, 0, 0); + else + asmop = NULL; + + if (asmop) + { + *pfile = ASM_OPERANDS_SOURCE_FILE (asmop); + *pline = ASM_OPERANDS_SOURCE_LINE (asmop); + } + else + { + *pfile = input_filename; + *pline = lineno; + } + } + + /* Report a diagnostic MESSAGE (an errror or a WARNING) at the line number + of the insn INSN. This is used only when INSN is an `asm' with operands, + and each ASM_OPERANDS records its own source file and line. */ + static void + diagnostic_for_asm (insn, msg, args_ptr, warn) + rtx insn; + const char *msg; + va_list *args_ptr; + int warn; + { + diagnostic_context dc; + + set_diagnostic_context (&dc, msg, args_ptr, NULL, 0, warn); + file_and_line_for_asm (insn, &diagnostic_file_location (&dc), + &diagnostic_line_location (&dc)); + report_diagnostic (&dc); + } + + void + error_for_asm VPARAMS ((rtx insn, const char *msgid, ...)) + { + VA_OPEN (ap, msgid); + VA_FIXEDARG (ap, rtx, insn); + VA_FIXEDARG (ap, const char *, msgid); + + diagnostic_for_asm (insn, msgid, &ap, /* warn = */ 0); + VA_CLOSE (ap); + } + + void + warning_for_asm VPARAMS ((rtx insn, const char *msgid, ...)) + { + VA_OPEN (ap, msgid); + VA_FIXEDARG (ap, rtx, insn); + VA_FIXEDARG (ap, const char *, msgid); + + diagnostic_for_asm (insn, msgid, &ap, /* warn = */ 1); + VA_CLOSE (ap); + } + + void + _fatal_insn (msgid, insn, file, line, function) + const char *msgid; + rtx insn; + const char *file; + int line; + const char *function; + { + error ("%s", _(msgid)); + + /* The above incremented error_count, but isn't an error that we want to + count, so reset it here. */ + errorcount--; + + debug_rtx (insn); + fancy_abort (file, line, function); + } + + void + _fatal_insn_not_found (insn, file, line, function) + rtx insn; + const char *file; + int line; + const char *function; + { + if (INSN_CODE (insn) < 0) + _fatal_insn ("unrecognizable insn:", insn, file, line, function); + else + _fatal_insn ("insn does not satisfy its constraints:", + insn, file, line, function); + } + diff -Nrc3pad gcc-3.0.4/gcc/rtl.c gcc-3.1/gcc/rtl.c *** gcc-3.0.4/gcc/rtl.c Sun Feb 3 05:16:29 2002 --- gcc-3.1/gcc/rtl.c Fri Mar 8 12:26:45 2002 *************** *** 1,43 **** ! /* Allocate and read RTL for GNU C Compiler. ! Copyright (C) 1987, 1988, 1991, 1994, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ ! #include "config.h" #include "system.h" #include "rtl.h" #include "real.h" - #include "bitmap.h" #include "ggc.h" ! #include "obstack.h" ! #include "toplev.h" ! #include "hashtab.h" ! ! #define obstack_chunk_alloc xmalloc ! #define obstack_chunk_free free /* Calculate the format for CONST_DOUBLE. This depends on the relative widths of HOST_WIDE_INT and REAL_VALUE_TYPE. ! We need to go out to e0wwwww, since REAL_ARITHMETIC assumes 16-bits per element in REAL_VALUE_TYPE. This is duplicated in gengenrtl.c. --- 1,36 ---- ! /* RTL utility routines. ! Copyright (C) 1987, 1988, 1991, 1994, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" #include "system.h" #include "rtl.h" #include "real.h" #include "ggc.h" ! #include "errors.h" /* Calculate the format for CONST_DOUBLE. This depends on the relative widths of HOST_WIDE_INT and REAL_VALUE_TYPE. ! We need to go out to 0wwwww, since REAL_ARITHMETIC assumes 16-bits per element in REAL_VALUE_TYPE. This is duplicated in gengenrtl.c. *************** Boston, MA 02111-1307, USA. */ *** 77,95 **** #endif /* REAL_WIDTH */ #if REAL_WIDTH == 1 ! # define CONST_DOUBLE_FORMAT "e0ww" #else # if REAL_WIDTH == 2 ! # define CONST_DOUBLE_FORMAT "e0ww" # else # if REAL_WIDTH == 3 ! # define CONST_DOUBLE_FORMAT "e0www" # else # if REAL_WIDTH == 4 ! # define CONST_DOUBLE_FORMAT "e0wwww" # else # if REAL_WIDTH == 5 ! # define CONST_DOUBLE_FORMAT "e0wwwww" # else # define CONST_DOUBLE_FORMAT /* nothing - will cause syntax error */ # endif --- 70,88 ---- #endif /* REAL_WIDTH */ #if REAL_WIDTH == 1 ! # define CONST_DOUBLE_FORMAT "0ww" #else # if REAL_WIDTH == 2 ! # define CONST_DOUBLE_FORMAT "0ww" # else # if REAL_WIDTH == 3 ! # define CONST_DOUBLE_FORMAT "0www" # else # if REAL_WIDTH == 4 ! # define CONST_DOUBLE_FORMAT "0wwww" # else # if REAL_WIDTH == 5 ! # define CONST_DOUBLE_FORMAT "0wwwww" # else # define CONST_DOUBLE_FORMAT /* nothing - will cause syntax error */ # endif *************** Boston, MA 02111-1307, USA. */ *** 103,109 **** #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) sizeof FORMAT - 1 , ! const int rtx_length[NUM_RTX_CODE + 1] = { #include "rtl.def" }; --- 96,102 ---- #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) sizeof FORMAT - 1 , ! const unsigned char rtx_length[NUM_RTX_CODE] = { #include "rtl.def" }; *************** const int rtx_length[NUM_RTX_CODE + 1] = *** 113,119 **** #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) NAME , ! const char * const rtx_name[] = { #include "rtl.def" /* rtl expressions are documented here */ }; --- 106,112 ---- #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) NAME , ! const char * const rtx_name[NUM_RTX_CODE] = { #include "rtl.def" /* rtl expressions are documented here */ }; *************** const char * const rtx_name[] = { *** 122,143 **** /* Indexed by machine mode, gives the name of that machine mode. This name does not include the letters "mode". */ ! #define DEF_MACHMODE(SYM, NAME, CLASS, BITSIZE, SIZE, UNIT, WIDER) NAME, ! const char * const mode_name[(int) MAX_MACHINE_MODE + 1] = { #include "machmode.def" - /* Add an extra field to avoid a core dump if someone tries to convert - MAX_MACHINE_MODE to a string. */ - "" }; #undef DEF_MACHMODE /* Indexed by machine mode, gives the class mode for GET_MODE_CLASS. */ ! #define DEF_MACHMODE(SYM, NAME, CLASS, BITSIZE, SIZE, UNIT, WIDER) CLASS, ! const enum mode_class mode_class[(int) MAX_MACHINE_MODE] = { #include "machmode.def" }; --- 115,133 ---- /* Indexed by machine mode, gives the name of that machine mode. This name does not include the letters "mode". */ ! #define DEF_MACHMODE(SYM, NAME, CLASS, BITSIZE, SIZE, UNIT, WIDER, INNER) NAME, ! const char * const mode_name[NUM_MACHINE_MODES] = { #include "machmode.def" }; #undef DEF_MACHMODE /* Indexed by machine mode, gives the class mode for GET_MODE_CLASS. */ ! #define DEF_MACHMODE(SYM, NAME, CLASS, BITSIZE, SIZE, UNIT, WIDER, INNER) CLASS, ! const enum mode_class mode_class[NUM_MACHINE_MODES] = { #include "machmode.def" }; *************** const enum mode_class mode_class[(int) M *** 146,154 **** /* Indexed by machine mode, gives the length of the mode, in bits. GET_MODE_BITSIZE uses this. */ ! #define DEF_MACHMODE(SYM, NAME, CLASS, BITSIZE, SIZE, UNIT, WIDER) BITSIZE, ! const unsigned int mode_bitsize[(int) MAX_MACHINE_MODE] = { #include "machmode.def" }; --- 136,144 ---- /* Indexed by machine mode, gives the length of the mode, in bits. GET_MODE_BITSIZE uses this. */ ! #define DEF_MACHMODE(SYM, NAME, CLASS, BITSIZE, SIZE, UNIT, WIDER, INNER) BITSIZE, ! const unsigned short mode_bitsize[NUM_MACHINE_MODES] = { #include "machmode.def" }; *************** const unsigned int mode_bitsize[(int) MA *** 157,165 **** /* Indexed by machine mode, gives the length of the mode, in bytes. GET_MODE_SIZE uses this. */ ! #define DEF_MACHMODE(SYM, NAME, CLASS, BITSIZE, SIZE, UNIT, WIDER) SIZE, ! const unsigned int mode_size[(int) MAX_MACHINE_MODE] = { #include "machmode.def" }; --- 147,155 ---- /* Indexed by machine mode, gives the length of the mode, in bytes. GET_MODE_SIZE uses this. */ ! #define DEF_MACHMODE(SYM, NAME, CLASS, BITSIZE, SIZE, UNIT, WIDER, INNER) SIZE, ! const unsigned char mode_size[NUM_MACHINE_MODES] = { #include "machmode.def" }; *************** const unsigned int mode_size[(int) MAX_M *** 168,176 **** /* Indexed by machine mode, gives the length of the mode's subunit. GET_MODE_UNIT_SIZE uses this. */ ! #define DEF_MACHMODE(SYM, NAME, CLASS, BITSIZE, SIZE, UNIT, WIDER) UNIT, ! const unsigned int mode_unit_size[(int) MAX_MACHINE_MODE] = { #include "machmode.def" /* machine modes are documented here */ }; --- 158,166 ---- /* Indexed by machine mode, gives the length of the mode's subunit. GET_MODE_UNIT_SIZE uses this. */ ! #define DEF_MACHMODE(SYM, NAME, CLASS, BITSIZE, SIZE, UNIT, WIDER, INNER) UNIT, ! const unsigned char mode_unit_size[NUM_MACHINE_MODES] = { #include "machmode.def" /* machine modes are documented here */ }; *************** const unsigned int mode_unit_size[(int) *** 180,200 **** (QI -> HI -> SI -> DI, etc.) Widening multiply instructions use this. */ ! #define DEF_MACHMODE(SYM, NAME, CLASS, BITSIZE, SIZE, UNIT, WIDER) \ (unsigned char) WIDER, ! const unsigned char mode_wider_mode[(int) MAX_MACHINE_MODE] = { #include "machmode.def" /* machine modes are documented here */ }; #undef DEF_MACHMODE ! #define DEF_MACHMODE(SYM, NAME, CLASS, BITSIZE, SIZE, UNIT, WIDER) \ ! ((BITSIZE) >= HOST_BITS_PER_WIDE_INT) ? ~(unsigned HOST_WIDE_INT)0 : ((unsigned HOST_WIDE_INT) 1 << (BITSIZE)) - 1, /* Indexed by machine mode, gives mask of significant bits in mode. */ ! const unsigned HOST_WIDE_INT mode_mask_array[(int) MAX_MACHINE_MODE] = { #include "machmode.def" }; --- 170,201 ---- (QI -> HI -> SI -> DI, etc.) Widening multiply instructions use this. */ ! #define DEF_MACHMODE(SYM, NAME, CLASS, BITSIZE, SIZE, UNIT, WIDER, INNER) \ (unsigned char) WIDER, ! const unsigned char mode_wider_mode[NUM_MACHINE_MODES] = { #include "machmode.def" /* machine modes are documented here */ }; #undef DEF_MACHMODE ! #define DEF_MACHMODE(SYM, NAME, CLASS, BITSIZE, SIZE, UNIT, WIDER, INNER) \ ! ((BITSIZE) >= HOST_BITS_PER_WIDE_INT) ? ~(unsigned HOST_WIDE_INT) 0 : ((unsigned HOST_WIDE_INT) 1 << (BITSIZE)) - 1, /* Indexed by machine mode, gives mask of significant bits in mode. */ ! const unsigned HOST_WIDE_INT mode_mask_array[NUM_MACHINE_MODES] = { ! #include "machmode.def" ! }; ! ! #undef DEF_MACHMODE ! ! #define DEF_MACHMODE(SYM, NAME, CLASS, BITSIZE, SIZE, UNIT, WIDER, INNER) INNER, ! ! /* Indexed by machine mode, gives the mode of the inner elements in a ! vector type. */ ! ! const enum machine_mode inner_mode_array[NUM_MACHINE_MODES] = { #include "machmode.def" }; *************** const enum machine_mode class_narrowest_ *** 224,230 **** rtx's of that code. The sequence is a C string in which each character describes one operand. */ ! const char * const rtx_format[] = { /* "*" undefined. can cause a warning message "0" field is unused (or used in a phase-dependent manner) --- 225,231 ---- rtx's of that code. The sequence is a C string in which each character describes one operand. */ ! const char * const rtx_format[NUM_RTX_CODE] = { /* "*" undefined. can cause a warning message "0" field is unused (or used in a phase-dependent manner) *************** const char * const rtx_format[] = { *** 238,243 **** --- 239,246 ---- prints the string "S" like "s", but optional: the containing rtx may end before this operand + "T" like "s", but treated specially by the RTL reader; + only found in machine description patterns. "e" a pointer to an rtl expression prints the expression "E" a pointer to a vector that points to a number of rtl expressions *************** const char * const rtx_format[] = { *** 247,253 **** "u" a pointer to another insn prints the uid of the insn. "b" is a pointer to a bitmap header. ! "t" is a tree pointer. */ #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) FORMAT , #include "rtl.def" /* rtl expressions are defined here */ --- 250,256 ---- "u" a pointer to another insn prints the uid of the insn. "b" is a pointer to a bitmap header. ! "t" is a tree pointer. */ #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) FORMAT , #include "rtl.def" /* rtl expressions are defined here */ *************** const char * const rtx_format[] = { *** 257,263 **** /* Indexed by rtx code, gives a character representing the "class" of that rtx code. See rtl.def for documentation on the defined classes. */ ! const char rtx_class[] = { #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) CLASS, #include "rtl.def" /* rtl expressions are defined here */ #undef DEF_RTL_EXPR --- 260,266 ---- /* Indexed by rtx code, gives a character representing the "class" of that rtx code. See rtl.def for documentation on the defined classes. */ ! const char rtx_class[NUM_RTX_CODE] = { #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) CLASS, #include "rtl.def" /* rtl expressions are defined here */ #undef DEF_RTL_EXPR *************** const char * const note_insn_name[NOTE_I *** 270,277 **** "", "NOTE_INSN_DELETED", "NOTE_INSN_BLOCK_BEG", "NOTE_INSN_BLOCK_END", "NOTE_INSN_LOOP_BEG", "NOTE_INSN_LOOP_END", ! "NOTE_INSN_LOOP_CONT", "NOTE_INSN_LOOP_VTOP", "NOTE_INSN_LOOP_END_TOP_COND", ! "NOTE_INSN_FUNCTION_END", "NOTE_INSN_SETJMP", "NOTE_INSN_PROLOGUE_END", "NOTE_INSN_EPILOGUE_BEG", "NOTE_INSN_DELETED_LABEL", "NOTE_INSN_FUNCTION_BEG", "NOTE_INSN_EH_REGION_BEG", "NOTE_INSN_EH_REGION_END", --- 273,280 ---- "", "NOTE_INSN_DELETED", "NOTE_INSN_BLOCK_BEG", "NOTE_INSN_BLOCK_END", "NOTE_INSN_LOOP_BEG", "NOTE_INSN_LOOP_END", ! "NOTE_INSN_LOOP_CONT", "NOTE_INSN_LOOP_VTOP", ! "NOTE_INSN_LOOP_END_TOP_COND", "NOTE_INSN_FUNCTION_END", "NOTE_INSN_PROLOGUE_END", "NOTE_INSN_EPILOGUE_BEG", "NOTE_INSN_DELETED_LABEL", "NOTE_INSN_FUNCTION_BEG", "NOTE_INSN_EH_REGION_BEG", "NOTE_INSN_EH_REGION_END", *************** const char * const reg_note_name[] = *** 288,307 **** "REG_LABEL", "REG_DEP_ANTI", "REG_DEP_OUTPUT", "REG_BR_PROB", "REG_EXEC_COUNT", "REG_NOALIAS", "REG_SAVE_AREA", "REG_BR_PRED", "REG_FRAME_RELATED_EXPR", "REG_EH_CONTEXT", "REG_EH_REGION", ! "REG_EH_RETHROW", "REG_SAVE_NOTE", "REG_MAYBE_DEAD", "REG_NORETURN", ! "REG_NON_LOCAL_GOTO" }; - static htab_t md_constants; - - static void fatal_with_file_and_line PARAMS ((FILE *, const char *, ...)) - ATTRIBUTE_PRINTF_2 ATTRIBUTE_NORETURN; - static void fatal_expected_char PARAMS ((FILE *, int, int)) ATTRIBUTE_NORETURN; - static void read_name PARAMS ((char *, FILE *)); - static unsigned def_hash PARAMS ((const void *)); - static int def_name_eq_p PARAMS ((const void *, const void *)); - static void read_constants PARAMS ((FILE *infile, char *tmp_char)); - /* Allocate an rtx vector of N elements. Store the length, and initialize all elements to zero. */ --- 291,301 ---- "REG_LABEL", "REG_DEP_ANTI", "REG_DEP_OUTPUT", "REG_BR_PROB", "REG_EXEC_COUNT", "REG_NOALIAS", "REG_SAVE_AREA", "REG_BR_PRED", "REG_FRAME_RELATED_EXPR", "REG_EH_CONTEXT", "REG_EH_REGION", ! "REG_SAVE_NOTE", "REG_MAYBE_DEAD", "REG_NORETURN", ! "REG_NON_LOCAL_GOTO", "REG_SETJMP", "REG_ALWAYS_RETURN", ! "REG_VTABLE_REF" }; /* Allocate an rtx vector of N elements. Store the length, and initialize all elements to zero. */ *************** rtx_alloc (code) *** 348,359 **** rtx copy_rtx (orig) ! register rtx orig; { ! register rtx copy; ! register int i, j; ! register RTX_CODE code; ! register const char *format_ptr; code = GET_CODE (orig); --- 342,353 ---- rtx copy_rtx (orig) ! rtx orig; { ! rtx copy; ! int i, j; ! RTX_CODE code; ! const char *format_ptr; code = GET_CODE (orig); *************** copy_rtx (orig) *** 363,368 **** --- 357,363 ---- case QUEUED: case CONST_INT: case CONST_DOUBLE: + case CONST_VECTOR: case SYMBOL_REF: case CODE_LABEL: case PC: *************** copy_rtx (orig) *** 435,440 **** --- 430,436 ---- case 'i': case 's': case 'S': + case 'T': case 'u': case '0': /* These are left unchanged. */ *************** copy_rtx (orig) *** 447,486 **** return copy; } ! /* Similar to `copy_rtx' except that if MAY_SHARE is present, it is ! placed in the result directly, rather than being copied. */ rtx ! copy_most_rtx (orig, may_share) ! register rtx orig; ! register rtx may_share; { ! register rtx copy; ! register int i, j; ! register RTX_CODE code; ! register const char *format_ptr; ! ! if (orig == may_share) ! return orig; ! ! code = GET_CODE (orig); ! ! switch (code) ! { ! case REG: ! case QUEUED: ! case CONST_INT: ! case CONST_DOUBLE: ! case SYMBOL_REF: ! case CODE_LABEL: ! case PC: ! case CC0: ! return orig; ! default: ! break; ! } - copy = rtx_alloc (code); PUT_MODE (copy, GET_MODE (orig)); copy->in_struct = orig->in_struct; copy->volatil = orig->volatil; --- 443,458 ---- return copy; } ! /* Create a new copy of an rtx. Only copy just one level. */ rtx ! shallow_copy_rtx (orig) ! rtx orig; { ! int i; ! RTX_CODE code = GET_CODE (orig); ! rtx copy = rtx_alloc (code); PUT_MODE (copy, GET_MODE (orig)); copy->in_struct = orig->in_struct; copy->volatil = orig->volatil; *************** copy_most_rtx (orig, may_share) *** 488,571 **** copy->integrated = orig->integrated; copy->frame_related = orig->frame_related; ! format_ptr = GET_RTX_FORMAT (GET_CODE (copy)); ! ! for (i = 0; i < GET_RTX_LENGTH (GET_CODE (copy)); i++) ! { ! switch (*format_ptr++) ! { ! case 'e': ! XEXP (copy, i) = XEXP (orig, i); ! if (XEXP (orig, i) != NULL && XEXP (orig, i) != may_share) ! XEXP (copy, i) = copy_most_rtx (XEXP (orig, i), may_share); ! break; ! ! case 'u': ! XEXP (copy, i) = XEXP (orig, i); ! break; ! ! case 'E': ! case 'V': ! XVEC (copy, i) = XVEC (orig, i); ! if (XVEC (orig, i) != NULL) ! { ! XVEC (copy, i) = rtvec_alloc (XVECLEN (orig, i)); ! for (j = 0; j < XVECLEN (copy, i); j++) ! XVECEXP (copy, i, j) ! = copy_most_rtx (XVECEXP (orig, i, j), may_share); ! } ! break; ! ! case 'w': ! XWINT (copy, i) = XWINT (orig, i); ! break; ! ! case 'n': ! case 'i': ! XINT (copy, i) = XINT (orig, i); ! break; ! ! case 't': ! XTREE (copy, i) = XTREE (orig, i); ! break; ! ! case 's': ! case 'S': ! XSTR (copy, i) = XSTR (orig, i); ! break; ! ! case '0': ! /* Copy this through the wide int field; that's safest. */ ! X0WINT (copy, i) = X0WINT (orig, i); ! break; - default: - abort (); - } - } return copy; } ! /* Create a new copy of an rtx. Only copy just one level. */ ! rtx ! shallow_copy_rtx (orig) ! rtx orig; ! { ! register int i; ! register RTX_CODE code = GET_CODE (orig); ! register rtx copy = rtx_alloc (code); ! PUT_MODE (copy, GET_MODE (orig)); ! copy->in_struct = orig->in_struct; ! copy->volatil = orig->volatil; ! copy->unchanging = orig->unchanging; ! copy->integrated = orig->integrated; ! copy->frame_related = orig->frame_related; ! for (i = 0; i < GET_RTX_LENGTH (code); i++) ! copy->fld[i] = orig->fld[i]; ! return copy; } /* This is 1 until after the rtl generation pass. */ --- 460,492 ---- copy->integrated = orig->integrated; copy->frame_related = orig->frame_related; ! for (i = 0; i < GET_RTX_LENGTH (code); i++) ! copy->fld[i] = orig->fld[i]; return copy; } ! /* Return the alignment of MODE. This will be bounded by 1 and ! BIGGEST_ALIGNMENT. */ ! unsigned int ! get_mode_alignment (mode) ! enum machine_mode mode; ! { ! unsigned int alignment; ! if (GET_MODE_CLASS (mode) == MODE_COMPLEX_FLOAT ! || GET_MODE_CLASS (mode) == MODE_COMPLEX_INT) ! alignment = GET_MODE_UNIT_SIZE (mode); ! else ! alignment = GET_MODE_SIZE (mode); ! ! /* Extract the LSB of the size. */ ! alignment = alignment & -alignment; ! alignment *= BITS_PER_UNIT; ! alignment = MIN (BIGGEST_ALIGNMENT, MAX (1, alignment)); ! return alignment; } /* This is 1 until after the rtl generation pass. */ *************** int *** 581,590 **** rtx_equal_p (x, y) rtx x, y; { ! register int i; ! register int j; ! register enum rtx_code code; ! register const char *fmt; if (x == y) return 1; --- 502,511 ---- rtx_equal_p (x, y) rtx x, y; { ! int i; ! int j; ! enum rtx_code code; ! const char *fmt; if (x == y) return 1; *************** rtx_equal_p (x, y) *** 606,615 **** switch (code) { case REG: ! /* Until rtl generation is complete, don't consider a reference to the ! return register of the current function the same as the return from a ! called function. This eases the job of function integration. Once the ! distinction is no longer needed, they can be considered equivalent. */ return (REGNO (x) == REGNO (y) && (! rtx_equal_function_value_matters || REG_FUNCTION_VALUE_P (x) == REG_FUNCTION_VALUE_P (y))); --- 527,537 ---- switch (code) { case REG: ! /* Until rtl generation is complete, don't consider a reference ! to the return register of the current function the same as ! the return from a called function. This eases the job of ! function integration. Once the distinction is no longer ! needed, they can be considered equivalent. */ return (REGNO (x) == REGNO (y) && (! rtx_equal_function_value_matters || REG_FUNCTION_VALUE_P (x) == REG_FUNCTION_VALUE_P (y))); *************** rtx_equal_p (x, y) *** 623,628 **** --- 545,551 ---- case SCRATCH: case CONST_DOUBLE: case CONST_INT: + case CONST_VECTOR: return 0; default: *************** rtx_equal_p (x, y) *** 667,673 **** case 'S': case 's': ! if (strcmp (XSTR (x, i), XSTR (y, i))) return 0; break; --- 590,598 ---- case 'S': case 's': ! if ((XSTR (x, i) || XSTR (y, i)) ! && (! XSTR (x, i) || ! XSTR (y, i) ! || strcmp (XSTR (x, i), XSTR (y, i)))) return 0; break; *************** rtx_equal_p (x, y) *** 689,1281 **** return 1; } - /* Subroutines of read_rtx. */ - - /* The current line number for the file. */ - int read_rtx_lineno = 1; - - /* The filename for aborting with file and line. */ - const char *read_rtx_filename = ""; - - static void - fatal_with_file_and_line VPARAMS ((FILE *infile, const char *msg, ...)) - { - #ifndef ANSI_PROTOTYPES - FILE *infile; - const char *msg; - #endif - va_list ap; - char context[64]; - size_t i; - int c; - - VA_START (ap, msg); - - #ifndef ANSI_PROTOTYPES - infile = va_arg (ap, FILE *); - msg = va_arg (ap, const char *); - #endif - - fprintf (stderr, "%s:%d: ", read_rtx_filename, read_rtx_lineno); - vfprintf (stderr, msg, ap); - putc ('\n', stderr); - - /* Gather some following context. */ - for (i = 0; i < sizeof(context)-1; ++i) - { - c = getc (infile); - if (c == EOF) - break; - if (c == '\r' || c == '\n') - break; - context[i] = c; - } - context[i] = '\0'; - - fprintf (stderr, "%s:%d: following context is `%s'\n", - read_rtx_filename, read_rtx_lineno, context); - - va_end (ap); - exit (1); - } - - /* Dump code after printing a message. Used when read_rtx finds - invalid data. */ - - static void - fatal_expected_char (infile, expected_c, actual_c) - FILE *infile; - int expected_c, actual_c; - { - fatal_with_file_and_line (infile, "expected character `%c', found `%c'", - expected_c, actual_c); - } - - /* Read chars from INFILE until a non-whitespace char - and return that. Comments, both Lisp style and C style, - are treated as whitespace. - Tools such as genflags use this function. */ - - int - read_skip_spaces (infile) - FILE *infile; - { - register int c; - while (1) - { - c = getc (infile); - switch (c) - { - case '\n': - read_rtx_lineno++; - break; - - case ' ': case '\t': case '\f': case '\r': - break; - - case ';': - do - c = getc (infile); - while (c != '\n' && c != EOF); - read_rtx_lineno++; - break; - - case '/': - { - register int prevc; - c = getc (infile); - if (c != '*') - fatal_expected_char (infile, '*', c); - - prevc = 0; - while ((c = getc (infile)) && c != EOF) - { - if (c == '\n') - read_rtx_lineno++; - else if (prevc == '*' && c == '/') - break; - prevc = c; - } - } - break; - - default: - return c; - } - } - } - - /* Read an rtx code name into the buffer STR[]. - It is terminated by any of the punctuation chars of rtx printed syntax. */ - - static void - read_name (str, infile) - char *str; - FILE *infile; - { - register char *p; - register int c; - - c = read_skip_spaces(infile); - - p = str; - while (1) - { - if (c == ' ' || c == '\n' || c == '\t' || c == '\f' || c == '\r') - break; - if (c == ':' || c == ')' || c == ']' || c == '"' || c == '/' - || c == '(' || c == '[') - { - ungetc (c, infile); - break; - } - *p++ = c; - c = getc (infile); - } - if (p == str) - fatal_with_file_and_line (infile, "missing name or number"); - if (c == '\n') - read_rtx_lineno++; - - *p = 0; - - if (md_constants) - { - /* Do constant expansion. */ - struct md_constant *def; - - p = str; - do - { - struct md_constant tmp_def; - - tmp_def.name = p; - def = htab_find (md_constants, &tmp_def); - if (def) - p = def->value; - } while (def); - if (p != str) - strcpy (str, p); - } - } - - /* Provide a version of a function to read a long long if the system does - not provide one. */ - #if HOST_BITS_PER_WIDE_INT > HOST_BITS_PER_LONG && !defined(HAVE_ATOLL) && !defined(HAVE_ATOQ) - HOST_WIDE_INT - atoll(p) - const char *p; - { - int neg = 0; - HOST_WIDE_INT tmp_wide; - - while (ISSPACE(*p)) - p++; - if (*p == '-') - neg = 1, p++; - else if (*p == '+') - p++; - - tmp_wide = 0; - while (ISDIGIT(*p)) - { - HOST_WIDE_INT new_wide = tmp_wide*10 + (*p - '0'); - if (new_wide < tmp_wide) - { - /* Return INT_MAX equiv on overflow. */ - tmp_wide = (~(unsigned HOST_WIDE_INT)0) >> 1; - break; - } - tmp_wide = new_wide; - p++; - } - - if (neg) - tmp_wide = -tmp_wide; - return tmp_wide; - } - #endif - - /* Given a constant definition, return a hash code for its name. */ - static unsigned - def_hash (def) - const void *def; - { - unsigned result, i; - const char *string = ((const struct md_constant *)def)->name; - - for (result = i = 0;*string++ != '\0'; i++) - result += ((unsigned char) *string << (i % CHAR_BIT)); - return result; - } - - /* Given two constant definitions, return true if they have the same name. */ - static int - def_name_eq_p (def1, def2) - const void *def1, *def2; - { - return ! strcmp (((const struct md_constant *)def1)->name, - ((const struct md_constant *)def2)->name); - } - - /* INFILE is a FILE pointer to read text from. TMP_CHAR is a buffer suitable - to read a name or number into. Process a define_constants directive, - starting with the optional space after the "define_constants". */ - static void - read_constants (infile, tmp_char) - FILE *infile; - char *tmp_char; - { - int c; - htab_t defs; - - c = read_skip_spaces (infile); - if (c != '[') - fatal_expected_char (infile, '[', c); - defs = md_constants; - if (! defs) - defs = htab_create (32, def_hash, def_name_eq_p, (htab_del) 0); - /* Disable constant expansion during definition processing. */ - md_constants = 0; - while ( (c = read_skip_spaces (infile)) != ']') - { - struct md_constant *def; - void **entry_ptr; - - if (c != '(') - fatal_expected_char (infile, '(', c); - def = xmalloc (sizeof (struct md_constant)); - def->name = tmp_char; - read_name (tmp_char, infile); - entry_ptr = htab_find_slot (defs, def, TRUE); - if (! *entry_ptr) - def->name = xstrdup (tmp_char); - c = read_skip_spaces (infile); - ungetc (c, infile); - read_name (tmp_char, infile); - if (! *entry_ptr) - { - def->value = xstrdup (tmp_char); - *entry_ptr = def; - } - else - { - def = *entry_ptr; - if (strcmp (def->value, tmp_char)) - fatal_with_file_and_line (infile, - "redefinition of %s, was %s, now %s", - def->name, def->value, tmp_char); - } - c = read_skip_spaces (infile); - if (c != ')') - fatal_expected_char (infile, ')', c); - } - md_constants = defs; - c = read_skip_spaces (infile); - if (c != ')') - fatal_expected_char (infile, ')', c); - } - - /* For every constant definition, call CALLBACK with two arguments: - a pointer a pointer to the constant definition and INFO. - Stops when CALLBACK returns zero. */ - void - traverse_md_constants (callback, info) - htab_trav callback; - void *info; - { - if (md_constants) - htab_traverse (md_constants, callback, info); - } - - /* Read an rtx in printed representation from INFILE - and return an actual rtx in core constructed accordingly. - read_rtx is not used in the compiler proper, but rather in - the utilities gen*.c that construct C code from machine descriptions. */ - - rtx - read_rtx (infile) - FILE *infile; - { - register int i, j, list_counter; - RTX_CODE tmp_code; - register const char *format_ptr; - /* tmp_char is a buffer used for reading decimal integers - and names of rtx types and machine modes. - Therefore, 256 must be enough. */ - char tmp_char[256]; - rtx return_rtx; - register int c; - int tmp_int; - HOST_WIDE_INT tmp_wide; - - /* Obstack used for allocating RTL objects. */ - static struct obstack rtl_obstack; - static int initialized; - - /* Linked list structure for making RTXs: */ - struct rtx_list - { - struct rtx_list *next; - rtx value; /* Value of this node. */ - }; - - if (!initialized) { - _obstack_begin (&rtl_obstack,0, 0, - (void *(*) PARAMS ((long))) xmalloc, - (void (*) PARAMS ((void *))) free); - initialized = 1; - } - - again: - c = read_skip_spaces (infile); /* Should be open paren. */ - if (c != '(') - fatal_expected_char (infile, '(', c); - - read_name (tmp_char, infile); - - tmp_code = UNKNOWN; - - if (! strcmp (tmp_char, "define_constants")) - { - read_constants (infile, tmp_char); - goto again; - } - for (i = 0; i < NUM_RTX_CODE; i++) - if (! strcmp (tmp_char, GET_RTX_NAME (i))) - { - tmp_code = (RTX_CODE) i; /* get value for name */ - break; - } - - if (tmp_code == UNKNOWN) - fatal_with_file_and_line (infile, "unknown rtx code `%s'", tmp_char); - - /* (NIL) stands for an expression that isn't there. */ - if (tmp_code == NIL) - { - /* Discard the closeparen. */ - while ((c = getc (infile)) && c != ')') - ; - - return 0; - } - - /* If we end up with an insn expression then we free this space below. */ - return_rtx = rtx_alloc (tmp_code); - format_ptr = GET_RTX_FORMAT (GET_CODE (return_rtx)); - - /* If what follows is `: mode ', read it and - store the mode in the rtx. */ - - i = read_skip_spaces (infile); - if (i == ':') - { - read_name (tmp_char, infile); - for (j = 0; j < NUM_MACHINE_MODES; j++) - if (! strcmp (GET_MODE_NAME (j), tmp_char)) - break; - - if (j == MAX_MACHINE_MODE) - fatal_with_file_and_line (infile, "unknown mode `%s'", tmp_char); - - PUT_MODE (return_rtx, (enum machine_mode) j); - } - else - ungetc (i, infile); - - for (i = 0; i < GET_RTX_LENGTH (GET_CODE (return_rtx)); i++) - switch (*format_ptr++) - { - /* 0 means a field for internal use only. - Don't expect it to be present in the input. */ - case '0': - break; - - case 'e': - case 'u': - XEXP (return_rtx, i) = read_rtx (infile); - break; - - case 'V': - /* 'V' is an optional vector: if a closeparen follows, - just store NULL for this element. */ - c = read_skip_spaces (infile); - ungetc (c, infile); - if (c == ')') - { - XVEC (return_rtx, i) = 0; - break; - } - /* Now process the vector. */ - - case 'E': - { - register struct rtx_list *next_rtx, *rtx_list_link; - struct rtx_list *list_rtx = NULL; - - c = read_skip_spaces (infile); - if (c != '[') - fatal_expected_char (infile, '[', c); - - /* add expressions to a list, while keeping a count */ - next_rtx = NULL; - list_counter = 0; - while ((c = read_skip_spaces (infile)) && c != ']') - { - ungetc (c, infile); - list_counter++; - rtx_list_link = (struct rtx_list *) - alloca (sizeof (struct rtx_list)); - rtx_list_link->value = read_rtx (infile); - if (next_rtx == 0) - list_rtx = rtx_list_link; - else - next_rtx->next = rtx_list_link; - next_rtx = rtx_list_link; - rtx_list_link->next = 0; - } - /* get vector length and allocate it */ - XVEC (return_rtx, i) = (list_counter - ? rtvec_alloc (list_counter) : NULL_RTVEC); - if (list_counter > 0) - { - next_rtx = list_rtx; - for (j = 0; j < list_counter; j++, - next_rtx = next_rtx->next) - XVECEXP (return_rtx, i, j) = next_rtx->value; - } - /* close bracket gotten */ - } - break; - - case 'S': - /* 'S' is an optional string: if a closeparen follows, - just store NULL for this element. */ - c = read_skip_spaces (infile); - ungetc (c, infile); - if (c == ')') - { - XSTR (return_rtx, i) = 0; - break; - } - - case 's': - { - int saw_paren = 0; - register char *stringbuf; - int saw_anything = 0; - - c = read_skip_spaces (infile); - if (c == '(') - { - saw_paren = 1; - c = read_skip_spaces (infile); - } - if (c != '"') - fatal_expected_char (infile, '"', c); - - while (1) - { - c = getc (infile); /* Read the string */ - if (c == '\n') - read_rtx_lineno++; - if (c == '\\') - { - c = getc (infile); /* Read the string */ - /* \; makes stuff for a C string constant containing - newline and tab. */ - if (c == ';') - { - obstack_grow (&rtl_obstack, "\\n\\t", 4); - continue; - } - if (c == '\n') - read_rtx_lineno++; - } - else if (c == '"') - break; - - obstack_1grow (&rtl_obstack, c); - saw_anything = 1; - } - - /* For insn patterns, we want to provide a default name - based on the file and line, like "*foo.md:12", if the - given name is blank. These are only for define_insn and - define_insn_and_split, to aid debugging. */ - if (!saw_anything - && i == 0 - && (GET_CODE (return_rtx) == DEFINE_INSN - || GET_CODE (return_rtx) == DEFINE_INSN_AND_SPLIT)) - { - char line_name[20]; - const char *fn = (read_rtx_filename ? read_rtx_filename : "rtx"); - const char *slash; - for (slash = fn; *slash; slash ++) - if (*slash == '/' || *slash == '\\' || *slash == ':') - fn = slash + 1; - obstack_1grow (&rtl_obstack, '*'); - obstack_grow (&rtl_obstack, fn, strlen (fn)); - sprintf (line_name, ":%d", read_rtx_lineno); - obstack_grow (&rtl_obstack, line_name, strlen (line_name)); - } - - obstack_1grow (&rtl_obstack, 0); - stringbuf = (char *) obstack_finish (&rtl_obstack); - - if (saw_paren) - { - c = read_skip_spaces (infile); - if (c != ')') - fatal_expected_char (infile, ')', c); - } - XSTR (return_rtx, i) = stringbuf; - } - break; - - case 'w': - read_name (tmp_char, infile); - #if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_INT - tmp_wide = atoi (tmp_char); - #else - #if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG - tmp_wide = atol (tmp_char); - #else - /* Prefer atoll over atoq, since the former is in the ISO C99 standard. - But prefer not to use our hand-rolled function above either. */ - #if defined(HAVE_ATOLL) || !defined(HAVE_ATOQ) - tmp_wide = atoll (tmp_char); - #else - tmp_wide = atoq (tmp_char); - #endif - #endif - #endif - XWINT (return_rtx, i) = tmp_wide; - break; - - case 'i': - case 'n': - read_name (tmp_char, infile); - tmp_int = atoi (tmp_char); - XINT (return_rtx, i) = tmp_int; - break; - - default: - fprintf (stderr, - "switch format wrong in rtl.read_rtx(). format was: %c.\n", - format_ptr[-1]); - fprintf (stderr, "\tfile position: %ld\n", ftell (infile)); - abort (); - } - - c = read_skip_spaces (infile); - if (c != ')') - fatal_expected_char (infile, ')', c); - - return return_rtx; - } - #if defined ENABLE_RTL_CHECKING && (GCC_VERSION >= 2007) void rtl_check_failed_bounds (r, n, file, line, func) --- 614,619 ---- diff -Nrc3pad gcc-3.0.4/gcc/rtl.def gcc-3.1/gcc/rtl.def *** gcc-3.0.4/gcc/rtl.def Sun May 13 07:09:56 2001 --- gcc-3.1/gcc/rtl.def Tue Feb 19 02:53:26 2002 *************** *** 4,25 **** Copyright (C) 1987, 88, 92, 94, 95, 97, 98, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* Expression definitions and descriptions for all targets are in this file. --- 4,25 ---- Copyright (C) 1987, 88, 92, 94, 95, 97, 98, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* Expression definitions and descriptions for all targets are in this file. *************** DEF_RTL_EXPR(UNKNOWN, "UnKnown", "*", 'x *** 73,78 **** --- 73,83 ---- DEF_RTL_EXPR(NIL, "nil", "*", 'x') + + /* include a file */ + + DEF_RTL_EXPR(INCLUDE, "include", "s", 'x') + /* --------------------------------------------------------------------- Expressions used in constructing lists. --------------------------------------------------------------------- */ *************** DEF_RTL_EXPR(MATCH_INSN, "match_insn", " *** 184,190 **** template to use. 4: optionally, a vector of attributes for this insn. */ ! DEF_RTL_EXPR(DEFINE_INSN, "define_insn", "sEssV", 'x') /* Definition of a peephole optimization. 1st operand: vector of insn patterns to match --- 189,195 ---- template to use. 4: optionally, a vector of attributes for this insn. */ ! DEF_RTL_EXPR(DEFINE_INSN, "define_insn", "sEsTV", 'x') /* Definition of a peephole optimization. 1st operand: vector of insn patterns to match *************** DEF_RTL_EXPR(DEFINE_INSN, "define_insn", *** 192,198 **** 3rd operand: template or C code to produce assembler output. 4: optionally, a vector of attributes for this insn. */ ! DEF_RTL_EXPR(DEFINE_PEEPHOLE, "define_peephole", "EssV", 'x') /* Definition of a split operation. 1st operand: insn pattern to match --- 197,203 ---- 3rd operand: template or C code to produce assembler output. 4: optionally, a vector of attributes for this insn. */ ! DEF_RTL_EXPR(DEFINE_PEEPHOLE, "define_peephole", "EsTV", 'x') /* Definition of a split operation. 1st operand: insn pattern to match *************** DEF_RTL_EXPR(DEFINE_PEEPHOLE, "define_pe *** 200,207 **** 3rd operand: vector of insn patterns to place into a SEQUENCE 4th operand: optionally, some C code to execute before generating the insns. This might, for example, create some RTX's and store them in ! elements of `recog_operand' for use by the vector of insn-patterns. ! (`operands' is an alias here for `recog_operand'). */ DEF_RTL_EXPR(DEFINE_SPLIT, "define_split", "EsES", 'x') /* Definition of an insn and associated split. --- 205,213 ---- 3rd operand: vector of insn patterns to place into a SEQUENCE 4th operand: optionally, some C code to execute before generating the insns. This might, for example, create some RTX's and store them in ! elements of `recog_data.operand' for use by the vector of ! insn-patterns. ! (`operands' is an alias here for `recog_data.operand'). */ DEF_RTL_EXPR(DEFINE_SPLIT, "define_split", "EsES", 'x') /* Definition of an insn and associated split. *************** DEF_RTL_EXPR(DEFINE_SPLIT, "define_split *** 226,235 **** 5: vector of insn patterns to place into a SEQUENCE 6: optionally, some C code to execute before generating the insns. This might, for example, create some RTX's and store them in ! elements of `recog_operand' for use by the vector of insn-patterns. ! (`operands' is an alias here for `recog_operand'). 7: optionally, a vector of attributes for this insn. */ ! DEF_RTL_EXPR(DEFINE_INSN_AND_SPLIT, "define_insn_and_split", "sEsssESV", 'x') /* Definition of an RTL peephole operation. Follows the same arguments as define_split. */ --- 232,242 ---- 5: vector of insn patterns to place into a SEQUENCE 6: optionally, some C code to execute before generating the insns. This might, for example, create some RTX's and store them in ! elements of `recog_data.operand' for use by the vector of ! insn-patterns. ! (`operands' is an alias here for `recog_data.operand'). 7: optionally, a vector of attributes for this insn. */ ! DEF_RTL_EXPR(DEFINE_INSN_AND_SPLIT, "define_insn_and_split", "sEsTsESV", 'x') /* Definition of an RTL peephole operation. Follows the same arguments as define_split. */ *************** DEF_RTL_EXPR(DEFINE_COMBINE, "define_com *** 242,254 **** /* Define how to generate multiple insns for a standard insn name. 1st operand: the insn name. 2nd operand: vector of insn-patterns. ! Use match_operand to substitute an element of `recog_operand'. 3rd operand: C expression that must be true for this to be available. This may not test any operands. 4th operand: Extra C code to execute before generating the insns. This might, for example, create some RTX's and store them in ! elements of `recog_operand' for use by the vector of insn-patterns. ! (`operands' is an alias here for `recog_operand'). */ DEF_RTL_EXPR(DEFINE_EXPAND, "define_expand", "sEss", 'x') /* Define a requirement for delay slots. --- 249,262 ---- /* Define how to generate multiple insns for a standard insn name. 1st operand: the insn name. 2nd operand: vector of insn-patterns. ! Use match_operand to substitute an element of `recog_data.operand'. 3rd operand: C expression that must be true for this to be available. This may not test any operands. 4th operand: Extra C code to execute before generating the insns. This might, for example, create some RTX's and store them in ! elements of `recog_data.operand' for use by the vector of ! insn-patterns. ! (`operands' is an alias here for `recog_data.operand'). */ DEF_RTL_EXPR(DEFINE_EXPAND, "define_expand", "sEss", 'x') /* Define a requirement for delay slots. *************** DEF_RTL_EXPR(ADDR_VEC, "addr_vec", "E", *** 509,514 **** --- 517,533 ---- DEF_RTL_EXPR(ADDR_DIFF_VEC, "addr_diff_vec", "eEee0", 'x') + /* Memory prefetch, with attributes supported on some targets. + Operand 1 is the address of the memory to fetch. + Operand 2 is 1 for a write access, 0 otherwise. + Operand 3 is the level of temporal locality; 0 means there is no + temporal locality and 1, 2, and 3 are for increasing levels of temporal + locality. + + The attributes specified by operands 2 and 3 are ignored for targets + whose prefetch instructions do not support them. */ + DEF_RTL_EXPR(PREFETCH, "prefetch", "eee", 'x') + /* ---------------------------------------------------------------------- At the top level of an instruction (perhaps under PARALLEL). ---------------------------------------------------------------------- */ *************** DEF_RTL_EXPR(RESX, "resx", "i", 'x') *** 560,574 **** DEF_RTL_EXPR(CONST_INT, "const_int", "w", 'o') /* numeric floating point constant. ! Operand 0 ('e') is the MEM that stores this constant in memory, or ! various other things (see comments at immed_double_const in ! varasm.c). ! Operand 1 ('0') is a chain of all CONST_DOUBLEs in use in the current function. Remaining operands hold the actual value. They are all 'w' and there may be from 1 to 4; see rtl.c. */ DEF_RTL_EXPR(CONST_DOUBLE, "const_double", CONST_DOUBLE_FORMAT, 'o') /* String constant. Used only for attributes right now. */ DEF_RTL_EXPR(CONST_STRING, "const_string", "s", 'o') --- 579,593 ---- DEF_RTL_EXPR(CONST_INT, "const_int", "w", 'o') /* numeric floating point constant. ! Operand 0 ('0') is a chain of all CONST_DOUBLEs in use in the current function. Remaining operands hold the actual value. They are all 'w' and there may be from 1 to 4; see rtl.c. */ DEF_RTL_EXPR(CONST_DOUBLE, "const_double", CONST_DOUBLE_FORMAT, 'o') + /* Describes a vector constant. */ + DEF_RTL_EXPR(CONST_VECTOR, "const_vector", "E", 'x') + /* String constant. Used only for attributes right now. */ DEF_RTL_EXPR(CONST_STRING, "const_string", "s", 'o') *************** DEF_RTL_EXPR(STRICT_LOW_PART, "strict_lo *** 630,639 **** in DECL_RTLs and during RTL generation, but not in the insn chain. */ DEF_RTL_EXPR(CONCAT, "concat", "ee", 'o') ! /* A memory location; operand is the address. Can be nested inside a ! VOLATILE. The second operand is the alias set to which this MEM ! belongs. We use `0' instead of `w' for this field so that the ! field need not be specified in machine descriptions. */ DEF_RTL_EXPR(MEM, "mem", "e0", 'o') /* Reference to an assembler label in the code for this function. --- 649,657 ---- in DECL_RTLs and during RTL generation, but not in the insn chain. */ DEF_RTL_EXPR(CONCAT, "concat", "ee", 'o') ! /* A memory location; operand is the address. The second operand is the ! alias set to which this MEM belongs. We use `0' instead of `w' for this ! field so that the field need not be specified in machine descriptions. */ DEF_RTL_EXPR(MEM, "mem", "e0", 'o') /* Reference to an assembler label in the code for this function. *************** DEF_RTL_EXPR(VEC_SELECT, "vec_select", " *** 957,966 **** combined and is the concatenation of the two source vectors. */ DEF_RTL_EXPR(VEC_CONCAT, "vec_concat", "ee", 'x') - /* Describes a vector constant. Each part of the PARALLEL that is operand 0 - describes a constant for one of the subparts. */ - DEF_RTL_EXPR(VEC_CONST, "vec_const", "e", 'x') - /* Describes an operation that converts a small vector into a larger one by duplicating the input values. The output vector mode must have the same submodes as the input vector mode, and the number of output parts must be --- 975,980 ---- diff -Nrc3pad gcc-3.0.4/gcc/rtl.h gcc-3.1/gcc/rtl.h *** gcc-3.0.4/gcc/rtl.h Wed Feb 13 19:22:48 2002 --- gcc-3.1/gcc/rtl.h Wed Apr 10 06:52:18 2002 *************** *** 1,26 **** /* Register Transfer Language (RTL) definitions for GNU C-Compiler Copyright (C) 1987, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ ! #ifndef _RTL_H ! #define _RTL_H struct function; --- 1,26 ---- /* Register Transfer Language (RTL) definitions for GNU C-Compiler Copyright (C) 1987, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ ! #ifndef GCC_RTL_H ! #define GCC_RTL_H struct function; *************** struct function; *** 31,39 **** #undef ABS /* Likewise. */ #undef PC /* Likewise. */ ! #ifndef TREE_CODE ! union tree_node; ! #endif /* Register Transfer Language EXPRESSIONS CODES */ --- 31,39 ---- #undef ABS /* Likewise. */ #undef PC /* Likewise. */ ! /* Value used by some passes to "recognize" noop moves as valid ! instructions. */ ! #define NOOP_MOVE_INSN_CODE INT_MAX /* Register Transfer Language EXPRESSIONS CODES */ *************** enum rtx_code { *** 48,66 **** NUM_RTX_CODE. Assumes default enum value assignment. */ ! #define NUM_RTX_CODE ((int)LAST_AND_UNUSED_RTX_CODE) /* The cast here, saves many elsewhere. */ ! extern const int rtx_length[]; #define GET_RTX_LENGTH(CODE) (rtx_length[(int) (CODE)]) ! extern const char * const rtx_name[]; #define GET_RTX_NAME(CODE) (rtx_name[(int) (CODE)]) ! extern const char * const rtx_format[]; #define GET_RTX_FORMAT(CODE) (rtx_format[(int) (CODE)]) ! extern const char rtx_class[]; #define GET_RTX_CLASS(CODE) (rtx_class[(int) (CODE)]) /* The flags and bitfields of an ADDR_DIFF_VEC. BASE is the base label --- 48,66 ---- NUM_RTX_CODE. Assumes default enum value assignment. */ ! #define NUM_RTX_CODE ((int) LAST_AND_UNUSED_RTX_CODE) /* The cast here, saves many elsewhere. */ ! extern const unsigned char rtx_length[NUM_RTX_CODE]; #define GET_RTX_LENGTH(CODE) (rtx_length[(int) (CODE)]) ! extern const char * const rtx_name[NUM_RTX_CODE]; #define GET_RTX_NAME(CODE) (rtx_name[(int) (CODE)]) ! extern const char * const rtx_format[NUM_RTX_CODE]; #define GET_RTX_FORMAT(CODE) (rtx_format[(int) (CODE)]) ! extern const char rtx_class[NUM_RTX_CODE]; #define GET_RTX_CLASS(CODE) (rtx_class[(int) (CODE)]) /* The flags and bitfields of an ADDR_DIFF_VEC. BASE is the base label *************** typedef struct *** 71,86 **** unsigned min_align: 8; /* Flags: */ unsigned base_after_vec: 1; /* BASE is after the ADDR_DIFF_VEC. */ ! unsigned min_after_vec: 1; /* minimum address target label is after the ADDR_DIFF_VEC. */ ! unsigned max_after_vec: 1; /* maximum address target label is after the ADDR_DIFF_VEC. */ ! unsigned min_after_base: 1; /* minimum address target label is after BASE. */ ! unsigned max_after_base: 1; /* maximum address target label is after BASE. */ /* Set by the actual branch shortening process - ONLY WHEN OPTIMIZING - : */ unsigned offset_unsigned: 1; /* offsets have to be treated as unsigned. */ unsigned : 2; unsigned scale : 8; } addr_diff_vec_flags; /* Common union for an element of an rtx. */ typedef union rtunion_def --- 71,103 ---- unsigned min_align: 8; /* Flags: */ unsigned base_after_vec: 1; /* BASE is after the ADDR_DIFF_VEC. */ ! unsigned min_after_vec: 1; /* minimum address target label is ! after the ADDR_DIFF_VEC. */ ! unsigned max_after_vec: 1; /* maximum address target label is ! after the ADDR_DIFF_VEC. */ ! unsigned min_after_base: 1; /* minimum address target label is ! after BASE. */ ! unsigned max_after_base: 1; /* maximum address target label is ! after BASE. */ /* Set by the actual branch shortening process - ONLY WHEN OPTIMIZING - : */ unsigned offset_unsigned: 1; /* offsets have to be treated as unsigned. */ unsigned : 2; unsigned scale : 8; } addr_diff_vec_flags; + /* Structure used to describe the attributes of a MEM. These are hashed + so MEMs that the same attributes share a data structure. This means + they cannot be modified in place. If any element is nonzero, it means + the value of the corresponding attribute is unknown. */ + typedef struct + { + HOST_WIDE_INT alias; /* Memory alias set. */ + tree expr; /* expr corresponding to MEM. */ + rtx offset; /* Offset from start of DECL, as CONST_INT. */ + rtx size; /* Size in bytes, as a CONST_INT. */ + unsigned int align; /* Alignment of MEM in bits. */ + } mem_attrs; + /* Common union for an element of an rtx. */ typedef union rtunion_def *************** typedef union rtunion_def *** 89,107 **** int rtint; unsigned int rtuint; const char *rtstr; ! struct rtx_def *rtx; ! struct rtvec_def *rtvec; enum machine_mode rttype; addr_diff_vec_flags rt_addr_diff_vec_flags; struct cselib_val_struct *rt_cselib; struct bitmap_head_def *rtbit; ! union tree_node *rttree; struct basic_block_def *bb; } rtunion; /* RTL expression ("rtx"). */ ! typedef struct rtx_def { /* The kind of expression this is. */ ENUM_BITFIELD(rtx_code) code: 16; --- 106,125 ---- int rtint; unsigned int rtuint; const char *rtstr; ! rtx rtx; ! rtvec rtvec; enum machine_mode rttype; addr_diff_vec_flags rt_addr_diff_vec_flags; struct cselib_val_struct *rt_cselib; struct bitmap_head_def *rtbit; ! tree rttree; struct basic_block_def *bb; + mem_attrs *rtmem; } rtunion; /* RTL expression ("rtx"). */ ! struct rtx_def { /* The kind of expression this is. */ ENUM_BITFIELD(rtx_code) code: 16; *************** typedef struct rtx_def *** 111,117 **** /* 1 in an INSN if it can alter flow of control within this function. ! LINK_COST_ZERO in an INSN_LIST. */ unsigned int jump : 1; /* 1 in an INSN if it can call another function. LINK_COST_FREE in an INSN_LIST. */ --- 129,137 ---- /* 1 in an INSN if it can alter flow of control within this function. ! MEM_KEEP_ALIAS_SET_P in a MEM. ! LINK_COST_ZERO in an INSN_LIST. ! SET_IS_RETURN_P in a SET. */ unsigned int jump : 1; /* 1 in an INSN if it can call another function. LINK_COST_FREE in an INSN_LIST. */ *************** typedef struct rtx_def *** 151,157 **** from the target of a branch. Valid from reorg until end of compilation; cleared before used. 1 in an INSN if this insn is dead code. Valid only during ! dead-code elimination phase; cleared before use. */ unsigned int in_struct : 1; /* 1 if this rtx is used. This is used for copying shared structure. See `unshare_all_rtl'. --- 171,177 ---- from the target of a branch. Valid from reorg until end of compilation; cleared before used. 1 in an INSN if this insn is dead code. Valid only during ! dead-code elimination phase; cleared before use. */ unsigned int in_struct : 1; /* 1 if this rtx is used. This is used for copying shared structure. See `unshare_all_rtl'. *************** typedef struct rtx_def *** 179,185 **** The number of operands and their types are controlled by the `code' field, according to rtl.def. */ rtunion fld[1]; ! } *rtx; #define NULL_RTX (rtx) 0 --- 199,205 ---- The number of operands and their types are controlled by the `code' field, according to rtl.def. */ rtunion fld[1]; ! }; #define NULL_RTX (rtx) 0 *************** typedef struct rtx_def *** 199,208 **** for a variable number of things. The principle use is inside PARALLEL expressions. */ ! typedef struct rtvec_def{ int num_elem; /* number of elements */ ! struct rtx_def *elem[1]; ! } *rtvec; #define NULL_RTVEC (rtvec) 0 --- 219,228 ---- for a variable number of things. The principle use is inside PARALLEL expressions. */ ! struct rtvec_def { int num_elem; /* number of elements */ ! rtx elem[1]; ! }; #define NULL_RTVEC (rtvec) 0 *************** typedef struct rtvec_def{ *** 235,240 **** --- 255,261 ---- (GET_CODE (X) == LABEL_REF || GET_CODE (X) == SYMBOL_REF \ || GET_CODE (X) == CONST_INT || GET_CODE (X) == CONST_DOUBLE \ || GET_CODE (X) == CONST || GET_CODE (X) == HIGH \ + || GET_CODE (X) == CONST_VECTOR \ || GET_CODE (X) == CONSTANT_P_RTX) /* General accessor macros for accessing the fields of an rtx. */ *************** typedef struct rtvec_def{ *** 246,261 **** (*({ rtx _rtx = (RTX); int _n = (N); \ enum rtx_code _code = GET_CODE (_rtx); \ if (_n < 0 || _n >= GET_RTX_LENGTH (_code)) \ ! rtl_check_failed_bounds (_rtx, _n, __FILE__, __LINE__, __FUNCTION__); \ if (GET_RTX_FORMAT(_code)[_n] != C1) \ ! rtl_check_failed_type1(_rtx, _n, C1, __FILE__, __LINE__, __FUNCTION__); \ &_rtx->fld[_n]; })) #define RTL_CHECK2(RTX, N, C1, C2) __extension__ \ (*({ rtx _rtx = (RTX); int _n = (N); \ enum rtx_code _code = GET_CODE (_rtx); \ if (_n < 0 || _n >= GET_RTX_LENGTH (_code)) \ ! rtl_check_failed_bounds (_rtx, _n, __FILE__, __LINE__, __FUNCTION__); \ if (GET_RTX_FORMAT(_code)[_n] != C1 \ && GET_RTX_FORMAT(_code)[_n] != C2) \ rtl_check_failed_type2 (_rtx, _n, C1, C2, __FILE__, __LINE__, \ --- 267,285 ---- (*({ rtx _rtx = (RTX); int _n = (N); \ enum rtx_code _code = GET_CODE (_rtx); \ if (_n < 0 || _n >= GET_RTX_LENGTH (_code)) \ ! rtl_check_failed_bounds (_rtx, _n, __FILE__, __LINE__, \ ! __FUNCTION__); \ if (GET_RTX_FORMAT(_code)[_n] != C1) \ ! rtl_check_failed_type1 (_rtx, _n, C1, __FILE__, __LINE__, \ ! __FUNCTION__); \ &_rtx->fld[_n]; })) #define RTL_CHECK2(RTX, N, C1, C2) __extension__ \ (*({ rtx _rtx = (RTX); int _n = (N); \ enum rtx_code _code = GET_CODE (_rtx); \ if (_n < 0 || _n >= GET_RTX_LENGTH (_code)) \ ! rtl_check_failed_bounds (_rtx, _n, __FILE__, __LINE__, \ ! __FUNCTION__); \ if (GET_RTX_FORMAT(_code)[_n] != C1 \ && GET_RTX_FORMAT(_code)[_n] != C2) \ rtl_check_failed_type2 (_rtx, _n, C1, C2, __FILE__, __LINE__, \ *************** typedef struct rtvec_def{ *** 264,278 **** #define RTL_CHECKC1(RTX, N, C) __extension__ \ (*({ rtx _rtx = (RTX); int _n = (N); \ ! if (GET_CODE (_rtx) != C) \ ! rtl_check_failed_code1 (_rtx, C, __FILE__, __LINE__, __FUNCTION__); \ &_rtx->fld[_n]; })) #define RTL_CHECKC2(RTX, N, C1, C2) __extension__ \ (*({ rtx _rtx = (RTX); int _n = (N); \ enum rtx_code _code = GET_CODE (_rtx); \ ! if (_code != C1 && _code != C2) \ ! rtl_check_failed_code2(_rtx, C1, C2, __FILE__, __LINE__, __FUNCTION__); \ &_rtx->fld[_n]; })) #define RTVEC_ELT(RTVEC, I) __extension__ \ --- 288,304 ---- #define RTL_CHECKC1(RTX, N, C) __extension__ \ (*({ rtx _rtx = (RTX); int _n = (N); \ ! if (GET_CODE (_rtx) != (C)) \ ! rtl_check_failed_code1 (_rtx, (C), __FILE__, __LINE__, \ ! __FUNCTION__); \ &_rtx->fld[_n]; })) #define RTL_CHECKC2(RTX, N, C1, C2) __extension__ \ (*({ rtx _rtx = (RTX); int _n = (N); \ enum rtx_code _code = GET_CODE (_rtx); \ ! if (_code != (C1) && _code != (C2)) \ ! rtl_check_failed_code2 (_rtx, (C1), (C2), __FILE__, __LINE__, \ ! __FUNCTION__); \ &_rtx->fld[_n]; })) #define RTVEC_ELT(RTVEC, I) __extension__ \ *************** extern void rtvec_check_failed_bounds PA *** 311,325 **** #endif ! #define XWINT(RTX, N) (RTL_CHECK1(RTX, N, 'w').rtwint) ! #define XINT(RTX, N) (RTL_CHECK2(RTX, N, 'i', 'n').rtint) ! #define XSTR(RTX, N) (RTL_CHECK2(RTX, N, 's', 'S').rtstr) ! #define XEXP(RTX, N) (RTL_CHECK2(RTX, N, 'e', 'u').rtx) ! #define XVEC(RTX, N) (RTL_CHECK2(RTX, N, 'E', 'V').rtvec) ! #define XMODE(RTX, N) (RTL_CHECK1(RTX, N, 'M').rttype) ! #define XBITMAP(RTX, N) (RTL_CHECK1(RTX, N, 'b').rtbit) ! #define XTREE(RTX, N) (RTL_CHECK1(RTX, N, 't').rttree) ! #define XBBDEF(RTX, N) (RTL_CHECK1(RTX, N, 'B').bb) #define XVECEXP(RTX, N, M) RTVEC_ELT (XVEC (RTX, N), M) #define XVECLEN(RTX, N) GET_NUM_ELEM (XVEC (RTX, N)) --- 337,352 ---- #endif ! #define XWINT(RTX, N) (RTL_CHECK1 (RTX, N, 'w').rtwint) ! #define XINT(RTX, N) (RTL_CHECK2 (RTX, N, 'i', 'n').rtint) ! #define XSTR(RTX, N) (RTL_CHECK2 (RTX, N, 's', 'S').rtstr) ! #define XEXP(RTX, N) (RTL_CHECK2 (RTX, N, 'e', 'u').rtx) ! #define XVEC(RTX, N) (RTL_CHECK2 (RTX, N, 'E', 'V').rtvec) ! #define XMODE(RTX, N) (RTL_CHECK1 (RTX, N, 'M').rttype) ! #define XBITMAP(RTX, N) (RTL_CHECK1 (RTX, N, 'b').rtbit) ! #define XTREE(RTX, N) (RTL_CHECK1 (RTX, N, 't').rttree) ! #define XBBDEF(RTX, N) (RTL_CHECK1 (RTX, N, 'B').bb) ! #define XTMPL(RTX, N) (RTL_CHECK1 (RTX, N, 'T').rtstr) #define XVECEXP(RTX, N, M) RTVEC_ELT (XVEC (RTX, N), M) #define XVECLEN(RTX, N) GET_NUM_ELEM (XVEC (RTX, N)) *************** extern void rtvec_check_failed_bounds PA *** 327,362 **** /* These are like XWINT, etc. except that they expect a '0' field instead of the normal type code. */ ! #define X0WINT(RTX, N) (RTL_CHECK1(RTX, N, '0').rtwint) ! #define X0INT(RTX, N) (RTL_CHECK1(RTX, N, '0').rtint) ! #define X0UINT(RTX, N) (RTL_CHECK1(RTX, N, '0').rtuint) ! #define X0STR(RTX, N) (RTL_CHECK1(RTX, N, '0').rtstr) ! #define X0EXP(RTX, N) (RTL_CHECK1(RTX, N, '0').rtx) ! #define X0VEC(RTX, N) (RTL_CHECK1(RTX, N, '0').rtvec) ! #define X0MODE(RTX, N) (RTL_CHECK1(RTX, N, '0').rttype) ! #define X0BITMAP(RTX, N) (RTL_CHECK1(RTX, N, '0').rtbit) ! #define X0TREE(RTX, N) (RTL_CHECK1(RTX, N, '0').rttree) ! #define X0BBDEF(RTX, N) (RTL_CHECK1(RTX, N, '0').bb) ! #define X0ADVFLAGS(RTX, N) (RTL_CHECK1(RTX, N, '0').rt_addr_diff_vec_flags) ! #define X0CSELIB(RTX, N) (RTL_CHECK1(RTX, N, '0').rt_cselib) ! #define XCWINT(RTX, N, C) (RTL_CHECKC1(RTX, N, C).rtwint) ! #define XCINT(RTX, N, C) (RTL_CHECKC1(RTX, N, C).rtint) ! #define XCUINT(RTX, N, C) (RTL_CHECKC1(RTX, N, C).rtuint) ! #define XCSTR(RTX, N, C) (RTL_CHECKC1(RTX, N, C).rtstr) ! #define XCEXP(RTX, N, C) (RTL_CHECKC1(RTX, N, C).rtx) ! #define XCVEC(RTX, N, C) (RTL_CHECKC1(RTX, N, C).rtvec) ! #define XCMODE(RTX, N, C) (RTL_CHECKC1(RTX, N, C).rttype) ! #define XCBITMAP(RTX, N, C) (RTL_CHECKC1(RTX, N, C).rtbit) ! #define XCTREE(RTX, N, C) (RTL_CHECKC1(RTX, N, C).rttree) ! #define XCBBDEF(RTX, N, C) (RTL_CHECKC1(RTX, N, C).bb) ! #define XCADVFLAGS(RTX, N, C) (RTL_CHECKC1(RTX, N, C).rt_addr_diff_vec_flags) ! #define XCCSELIB(RTX, N, C) (RTL_CHECKC1(RTX, N, C).rt_cselib) #define XCVECEXP(RTX, N, M, C) RTVEC_ELT (XCVEC (RTX, N, C), M) #define XCVECLEN(RTX, N, C) GET_NUM_ELEM (XCVEC (RTX, N, C)) ! #define XC2EXP(RTX, N, C1, C2) (RTL_CHECKC2(RTX, N, C1, C2).rtx) /* ACCESS MACROS for particular fields of insns. */ --- 354,390 ---- /* These are like XWINT, etc. except that they expect a '0' field instead of the normal type code. */ ! #define X0WINT(RTX, N) (RTL_CHECK1 (RTX, N, '0').rtwint) ! #define X0INT(RTX, N) (RTL_CHECK1 (RTX, N, '0').rtint) ! #define X0UINT(RTX, N) (RTL_CHECK1 (RTX, N, '0').rtuint) ! #define X0STR(RTX, N) (RTL_CHECK1 (RTX, N, '0').rtstr) ! #define X0EXP(RTX, N) (RTL_CHECK1 (RTX, N, '0').rtx) ! #define X0VEC(RTX, N) (RTL_CHECK1 (RTX, N, '0').rtvec) ! #define X0MODE(RTX, N) (RTL_CHECK1 (RTX, N, '0').rttype) ! #define X0BITMAP(RTX, N) (RTL_CHECK1 (RTX, N, '0').rtbit) ! #define X0TREE(RTX, N) (RTL_CHECK1 (RTX, N, '0').rttree) ! #define X0BBDEF(RTX, N) (RTL_CHECK1 (RTX, N, '0').bb) ! #define X0ADVFLAGS(RTX, N) (RTL_CHECK1 (RTX, N, '0').rt_addr_diff_vec_flags) ! #define X0CSELIB(RTX, N) (RTL_CHECK1 (RTX, N, '0').rt_cselib) ! #define X0MEMATTR(RTX, N) (RTL_CHECK1 (RTX, N, '0').rtmem) ! #define XCWINT(RTX, N, C) (RTL_CHECKC1 (RTX, N, C).rtwint) ! #define XCINT(RTX, N, C) (RTL_CHECKC1 (RTX, N, C).rtint) ! #define XCUINT(RTX, N, C) (RTL_CHECKC1 (RTX, N, C).rtuint) ! #define XCSTR(RTX, N, C) (RTL_CHECKC1 (RTX, N, C).rtstr) ! #define XCEXP(RTX, N, C) (RTL_CHECKC1 (RTX, N, C).rtx) ! #define XCVEC(RTX, N, C) (RTL_CHECKC1 (RTX, N, C).rtvec) ! #define XCMODE(RTX, N, C) (RTL_CHECKC1 (RTX, N, C).rttype) ! #define XCBITMAP(RTX, N, C) (RTL_CHECKC1 (RTX, N, C).rtbit) ! #define XCTREE(RTX, N, C) (RTL_CHECKC1 (RTX, N, C).rttree) ! #define XCBBDEF(RTX, N, C) (RTL_CHECKC1 (RTX, N, C).bb) ! #define XCADVFLAGS(RTX, N, C) (RTL_CHECKC1 (RTX, N, C).rt_addr_diff_vec_flags) ! #define XCCSELIB(RTX, N, C) (RTL_CHECKC1 (RTX, N, C).rt_cselib) #define XCVECEXP(RTX, N, M, C) RTVEC_ELT (XCVEC (RTX, N, C), M) #define XCVECLEN(RTX, N, C) GET_NUM_ELEM (XCVEC (RTX, N, C)) ! #define XC2EXP(RTX, N, C1, C2) (RTL_CHECKC2 (RTX, N, C1, C2).rtx) /* ACCESS MACROS for particular fields of insns. */ *************** extern void rtvec_check_failed_bounds PA *** 365,382 **** /* Holds a unique number for each insn. These are not necessarily sequentially increasing. */ ! #define INSN_UID(INSN) XINT(INSN, 0) /* Chain insns together in sequence. */ ! #define PREV_INSN(INSN) XEXP(INSN, 1) ! #define NEXT_INSN(INSN) XEXP(INSN, 2) /* The body of an insn. */ ! #define PATTERN(INSN) XEXP(INSN, 3) /* Code number of instruction, from when it was recognized. -1 means this instruction has not been recognized yet. */ ! #define INSN_CODE(INSN) XINT(INSN, 4) /* Set up in flow.c; empty before then. Holds a chain of INSN_LIST rtx's whose first operands point at --- 393,410 ---- /* Holds a unique number for each insn. These are not necessarily sequentially increasing. */ ! #define INSN_UID(INSN) XINT (INSN, 0) /* Chain insns together in sequence. */ ! #define PREV_INSN(INSN) XEXP (INSN, 1) ! #define NEXT_INSN(INSN) XEXP (INSN, 2) /* The body of an insn. */ ! #define PATTERN(INSN) XEXP (INSN, 3) /* Code number of instruction, from when it was recognized. -1 means this instruction has not been recognized yet. */ ! #define INSN_CODE(INSN) XINT (INSN, 4) /* Set up in flow.c; empty before then. Holds a chain of INSN_LIST rtx's whose first operands point at *************** extern void rtvec_check_failed_bounds PA *** 388,404 **** /* 1 if insn has been deleted. */ #define INSN_DELETED_P(INSN) ((INSN)->volatil) ! /* 1 if insn is a call to a const function. */ ! #define CONST_CALL_P(INSN) ((INSN)->unchanging) /* 1 if insn (assumed to be a CALL_INSN) is a sibling call. */ #define SIBLING_CALL_P(INSN) ((INSN)->jump) /* 1 if insn is a branch that should not unconditionally execute its ! delay slots, i.e., it is an annulled branch. */ #define INSN_ANNULLED_BRANCH_P(INSN) ((INSN)->unchanging) ! /* 1 if insn is a dead code. Valid only for dead-code elimination phase. */ #define INSN_DEAD_CODE_P(INSN) ((INSN)->in_struct) /* 1 if insn is in a delay slot and is from the target of the branch. If --- 416,432 ---- /* 1 if insn has been deleted. */ #define INSN_DELETED_P(INSN) ((INSN)->volatil) ! /* 1 if insn is a call to a const or pure function. */ ! #define CONST_OR_PURE_CALL_P(INSN) ((INSN)->unchanging) /* 1 if insn (assumed to be a CALL_INSN) is a sibling call. */ #define SIBLING_CALL_P(INSN) ((INSN)->jump) /* 1 if insn is a branch that should not unconditionally execute its ! delay slots, i.e., it is an annulled branch. */ #define INSN_ANNULLED_BRANCH_P(INSN) ((INSN)->unchanging) ! /* 1 if insn is a dead code. Valid only for dead-code elimination phase. */ #define INSN_DEAD_CODE_P(INSN) ((INSN)->in_struct) /* 1 if insn is in a delay slot and is from the target of the branch. If *************** enum reg_note *** 497,506 **** flow, are represented by a 0 reg note kind. */ REG_DEP_ANTI, REG_DEP_OUTPUT, ! /* REG_BR_PROB is attached to JUMP_INSNs and CALL_INSNs when the flag ! -fbranch-probabilities is given. It has an integer value. For jumps, ! it is the probability that this is a taken branch. For calls, it is ! the probability that this call won't return. */ REG_BR_PROB, /* REG_EXEC_COUNT is attached to the first insn of each basic block, and --- 525,534 ---- flow, are represented by a 0 reg note kind. */ REG_DEP_ANTI, REG_DEP_OUTPUT, ! /* REG_BR_PROB is attached to JUMP_INSNs and CALL_INSNs. ! It has an integer value. For jumps, it is the probability that this is a ! taken branch. For calls, it is the probability that this call won't ! return. */ REG_BR_PROB, /* REG_EXEC_COUNT is attached to the first insn of each basic block, and *************** enum reg_note *** 516,523 **** where SETJMP_VIA_SAVE_AREA is true. */ REG_SAVE_AREA, ! /* Attached to JUMP_INSNs only, it holds the branch prediction flags ! computed by get_jump_flags() after dbr scheduling is complete. */ REG_BR_PRED, /* Attached to insns that are RTX_FRAME_RELATED_P, but are too complex --- 544,553 ---- where SETJMP_VIA_SAVE_AREA is true. */ REG_SAVE_AREA, ! /* REG_BR_PRED is attached to JUMP_INSNs and CALL_INSNSs. It contains ! CONCAT of two integer value. First specifies the branch predictor ! that added the note, second specifies the predicted hitrate of branch ! in the same format as REG_BR_PROB note uses. */ REG_BR_PRED, /* Attached to insns that are RTX_FRAME_RELATED_P, but are too complex *************** enum reg_note *** 536,546 **** throw, nor will it execute a non-local goto. */ REG_EH_REGION, - /* Indicates that a call is actually a call to rethrow, and specifies the - rethrow symbol for the region the rethrow is targetting. This provides - a way to generate the non standard flow edges required for a rethrow. */ - REG_EH_RETHROW, - /* Used by haifa-sched to save NOTE_INSN notes across scheduling. */ REG_SAVE_NOTE, --- 566,571 ---- *************** enum reg_note *** 555,561 **** /* Indicates that an indirect jump is a non-local goto instead of a computed goto. */ ! REG_NON_LOCAL_GOTO }; /* The base value for branch probability notes. */ --- 580,597 ---- /* Indicates that an indirect jump is a non-local goto instead of a computed goto. */ ! REG_NON_LOCAL_GOTO, ! ! /* This kind of note is generated at each to `setjmp', ! and similar functions that can return twice. */ ! REG_SETJMP, ! ! /* Indicate calls that always returns. */ ! REG_ALWAYS_RETURN, ! ! /* Indicate that the memory load references a vtable. The expression ! is of the form (plus (symbol_ref vtable_sym) (const_int offset)). */ ! REG_VTABLE_REF }; /* The base value for branch probability notes. */ *************** enum reg_note *** 563,569 **** /* Define macros to extract and insert the reg-note kind in an EXPR_LIST. */ #define REG_NOTE_KIND(LINK) ((enum reg_note) GET_MODE (LINK)) ! #define PUT_REG_NOTE_KIND(LINK,KIND) PUT_MODE(LINK, (enum machine_mode) (KIND)) /* Names for REG_NOTE's in EXPR_LIST insn's. */ --- 599,606 ---- /* Define macros to extract and insert the reg-note kind in an EXPR_LIST. */ #define REG_NOTE_KIND(LINK) ((enum reg_note) GET_MODE (LINK)) ! #define PUT_REG_NOTE_KIND(LINK, KIND) \ ! PUT_MODE (LINK, (enum machine_mode) (KIND)) /* Names for REG_NOTE's in EXPR_LIST insn's. */ *************** extern const char * const reg_note_name[ *** 582,588 **** /* The label-number of a code-label. The assembler label is made from `L' and the label-number printed in decimal. Label numbers are unique in a compilation. */ ! #define CODE_LABEL_NUMBER(INSN) XINT(INSN, 5) #define LINE_NUMBER NOTE --- 619,625 ---- /* The label-number of a code-label. The assembler label is made from `L' and the label-number printed in decimal. Label numbers are unique in a compilation. */ ! #define CODE_LABEL_NUMBER(INSN) XINT (INSN, 5) #define LINE_NUMBER NOTE *************** extern const char * const reg_note_name[ *** 591,609 **** NOTE_INSN_BLOCK_BEG and NOTE_INSN_BLOCK_END notes. (We avoid lots of casts between ints and pointers if we use a different macro for the block number.) The NOTE_INSN_RANGE_{START,END} and NOTE_INSN_LIVE notes record their ! information as a rtx in the field. */ ! #define NOTE_SOURCE_FILE(INSN) XCSTR(INSN, 3, NOTE) ! #define NOTE_BLOCK(INSN) XCTREE(INSN, 3, NOTE) ! #define NOTE_EH_HANDLER(INSN) XCINT(INSN, 3, NOTE) ! #define NOTE_RANGE_INFO(INSN) XCEXP(INSN, 3, NOTE) ! #define NOTE_LIVE_INFO(INSN) XCEXP(INSN, 3, NOTE) ! #define NOTE_BASIC_BLOCK(INSN) XCBBDEF(INSN, 3, NOTE) ! #define NOTE_EXPECTED_VALUE(INSN) XCEXP(INSN, 3, NOTE) /* In a NOTE that is a line number, this is the line number. Other kinds of NOTEs are identified by negative numbers here. */ ! #define NOTE_LINE_NUMBER(INSN) XCINT(INSN, 4, NOTE) /* Nonzero if INSN is a note marking the beginning of a basic block. */ #define NOTE_INSN_BASIC_BLOCK_P(INSN) \ --- 628,646 ---- NOTE_INSN_BLOCK_BEG and NOTE_INSN_BLOCK_END notes. (We avoid lots of casts between ints and pointers if we use a different macro for the block number.) The NOTE_INSN_RANGE_{START,END} and NOTE_INSN_LIVE notes record their ! information as an rtx in the field. */ ! #define NOTE_SOURCE_FILE(INSN) XCSTR (INSN, 3, NOTE) ! #define NOTE_BLOCK(INSN) XCTREE (INSN, 3, NOTE) ! #define NOTE_EH_HANDLER(INSN) XCINT (INSN, 3, NOTE) ! #define NOTE_RANGE_INFO(INSN) XCEXP (INSN, 3, NOTE) ! #define NOTE_LIVE_INFO(INSN) XCEXP (INSN, 3, NOTE) ! #define NOTE_BASIC_BLOCK(INSN) XCBBDEF (INSN, 3, NOTE) ! #define NOTE_EXPECTED_VALUE(INSN) XCEXP (INSN, 3, NOTE) /* In a NOTE that is a line number, this is the line number. Other kinds of NOTEs are identified by negative numbers here. */ ! #define NOTE_LINE_NUMBER(INSN) XCINT (INSN, 4, NOTE) /* Nonzero if INSN is a note marking the beginning of a basic block. */ #define NOTE_INSN_BASIC_BLOCK_P(INSN) \ *************** enum insn_note *** 659,668 **** off the end of the function body without a return statement. */ NOTE_INSN_FUNCTION_END, - /* This kind of note is generated just after each call to `setjmp', - and similar functions that can return twice. */ - NOTE_INSN_SETJMP, - /* This marks the point immediately after the last prologue insn. */ NOTE_INSN_PROLOGUE_END, --- 696,701 ---- *************** enum insn_note *** 684,690 **** /* Generated whenever a duplicate line number note is output. For example, one is output after the end of an inline function, in order to prevent ! the line containing the inline call from being counted twice in gcov. */ NOTE_INSN_REPEATED_LINE_NUMBER, /* Start/end of a live range region, where pseudos allocated on the stack --- 717,723 ---- /* Generated whenever a duplicate line number note is output. For example, one is output after the end of an inline function, in order to prevent ! the line containing the inline call from being counted twice in gcov. */ NOTE_INSN_REPEATED_LINE_NUMBER, /* Start/end of a live range region, where pseudos allocated on the stack *************** enum insn_note *** 695,701 **** /* Record which registers are currently live. Uses NOTE_LIVE_INFO. */ NOTE_INSN_LIVE, ! /* Record the struct for the following basic block. Uses NOTE_BASIC_BLOCK. */ NOTE_INSN_BASIC_BLOCK, /* Record the expected value of a register at a location. Uses --- 728,734 ---- /* Record which registers are currently live. Uses NOTE_LIVE_INFO. */ NOTE_INSN_LIVE, ! /* Record the struct for the following basic block. Uses NOTE_BASIC_BLOCK. */ NOTE_INSN_BASIC_BLOCK, /* Record the expected value of a register at a location. Uses *************** extern const char * const note_insn_name *** 713,761 **** /* The name of a label, in case it corresponds to an explicit label in the input source code. */ ! #define LABEL_NAME(RTX) XCSTR(RTX, 6, CODE_LABEL) /* In jump.c, each label contains a count of the number of LABEL_REFs that point at it, so unused labels can be deleted. */ ! #define LABEL_NUSES(RTX) XCINT(RTX, 3, CODE_LABEL) /* Associate a name with a CODE_LABEL. */ ! #define LABEL_ALTERNATE_NAME(RTX) XCSTR(RTX, 7, CODE_LABEL) /* The original regno this ADDRESSOF was built for. */ ! #define ADDRESSOF_REGNO(RTX) XCUINT(RTX, 1, ADDRESSOF) /* The variable in the register we took the address of. */ ! #define ADDRESSOF_DECL(RTX) XCTREE(RTX, 2, ADDRESSOF) /* In jump.c, each JUMP_INSN can point to a label that it can jump to, so that if the JUMP_INSN is deleted, the label's LABEL_NUSES can be decremented and possibly the label can be deleted. */ ! #define JUMP_LABEL(INSN) XCEXP(INSN, 7, JUMP_INSN) /* Once basic blocks are found in flow.c, each CODE_LABEL starts a chain that goes through all the LABEL_REFs that jump to that label. The chain eventually winds up at the CODE_LABEL: it is circular. */ ! #define LABEL_REFS(LABEL) XCEXP(LABEL, 4, CODE_LABEL) /* This is the field in the LABEL_REF through which the circular chain of references to a particular label is linked. This chain is set up in flow.c. */ ! #define LABEL_NEXTREF(REF) XCEXP(REF, 1, LABEL_REF) /* Once basic blocks are found in flow.c, Each LABEL_REF points to its containing instruction with this field. */ ! #define CONTAINING_INSN(RTX) XCEXP(RTX, 2, LABEL_REF) /* For a REG rtx, REGNO extracts the register number. ORIGINAL_REGNO holds the number the register originally had; for a pseudo register turned into a hard reg this will hold the old pseudo register number. */ ! #define REGNO(RTX) XCUINT(RTX, 0, REG) ! #define ORIGINAL_REGNO(RTX) X0UINT(RTX, 1) /* For a REG rtx, REG_FUNCTION_VALUE_P is nonzero if the reg is the current function's return value. */ --- 746,794 ---- /* The name of a label, in case it corresponds to an explicit label in the input source code. */ ! #define LABEL_NAME(RTX) XCSTR (RTX, 6, CODE_LABEL) /* In jump.c, each label contains a count of the number of LABEL_REFs that point at it, so unused labels can be deleted. */ ! #define LABEL_NUSES(RTX) XCINT (RTX, 3, CODE_LABEL) /* Associate a name with a CODE_LABEL. */ ! #define LABEL_ALTERNATE_NAME(RTX) XCSTR (RTX, 7, CODE_LABEL) /* The original regno this ADDRESSOF was built for. */ ! #define ADDRESSOF_REGNO(RTX) XCUINT (RTX, 1, ADDRESSOF) /* The variable in the register we took the address of. */ ! #define ADDRESSOF_DECL(RTX) XCTREE (RTX, 2, ADDRESSOF) /* In jump.c, each JUMP_INSN can point to a label that it can jump to, so that if the JUMP_INSN is deleted, the label's LABEL_NUSES can be decremented and possibly the label can be deleted. */ ! #define JUMP_LABEL(INSN) XCEXP (INSN, 7, JUMP_INSN) /* Once basic blocks are found in flow.c, each CODE_LABEL starts a chain that goes through all the LABEL_REFs that jump to that label. The chain eventually winds up at the CODE_LABEL: it is circular. */ ! #define LABEL_REFS(LABEL) XCEXP (LABEL, 4, CODE_LABEL) /* This is the field in the LABEL_REF through which the circular chain of references to a particular label is linked. This chain is set up in flow.c. */ ! #define LABEL_NEXTREF(REF) XCEXP (REF, 1, LABEL_REF) /* Once basic blocks are found in flow.c, Each LABEL_REF points to its containing instruction with this field. */ ! #define CONTAINING_INSN(RTX) XCEXP (RTX, 2, LABEL_REF) /* For a REG rtx, REGNO extracts the register number. ORIGINAL_REGNO holds the number the register originally had; for a pseudo register turned into a hard reg this will hold the old pseudo register number. */ ! #define REGNO(RTX) XCUINT (RTX, 0, REG) ! #define ORIGINAL_REGNO(RTX) X0UINT (RTX, 1) /* For a REG rtx, REG_FUNCTION_VALUE_P is nonzero if the reg is the current function's return value. */ *************** extern const char * const note_insn_name *** 772,778 **** #define HARD_REGISTER_P(REG) (HARD_REGISTER_NUM_P (REGNO (REG))) /* 1 if the given register number REG_NO corresponds to a hard register. */ ! #define HARD_REGISTER_NUM_P(REG_NO) (REG_NO < FIRST_PSEUDO_REGISTER) /* For a CONST_INT rtx, INTVAL extracts the integer. */ --- 805,811 ---- #define HARD_REGISTER_P(REG) (HARD_REGISTER_NUM_P (REGNO (REG))) /* 1 if the given register number REG_NO corresponds to a hard register. */ ! #define HARD_REGISTER_NUM_P(REG_NO) ((REG_NO) < FIRST_PSEUDO_REGISTER) /* For a CONST_INT rtx, INTVAL extracts the integer. */ *************** extern const char * const note_insn_name *** 785,805 **** For a float, the number of ints varies, and CONST_DOUBLE_LOW is the one that should come first *in memory*. So use &CONST_DOUBLE_LOW(r) as the address of an array of ints. */ ! #define CONST_DOUBLE_LOW(r) XCWINT (r, 2, CONST_DOUBLE) ! #define CONST_DOUBLE_HIGH(r) XCWINT (r, 3, CONST_DOUBLE) /* Link for chain of all CONST_DOUBLEs in use in current function. */ ! #define CONST_DOUBLE_CHAIN(r) XCEXP (r, 1, CONST_DOUBLE) ! /* The MEM which represents this CONST_DOUBLE's value in memory, ! or const0_rtx if no MEM has been made for it yet, ! or cc0_rtx if it is not on the chain. */ ! #define CONST_DOUBLE_MEM(r) XCEXP (r, 0, CONST_DOUBLE) /* For a SUBREG rtx, SUBREG_REG extracts the value we want a subreg of. ! SUBREG_WORD extracts the word-number. */ ! #define SUBREG_REG(RTX) XCEXP(RTX, 0, SUBREG) ! #define SUBREG_WORD(RTX) XCUINT(RTX, 1, SUBREG) /* 1 if the REG contained in SUBREG_REG is already known to be sign- or zero-extended from the mode of the SUBREG to the mode of --- 818,848 ---- For a float, the number of ints varies, and CONST_DOUBLE_LOW is the one that should come first *in memory*. So use &CONST_DOUBLE_LOW(r) as the address of an array of ints. */ ! #define CONST_DOUBLE_LOW(r) XCWINT (r, 1, CONST_DOUBLE) ! #define CONST_DOUBLE_HIGH(r) XCWINT (r, 2, CONST_DOUBLE) /* Link for chain of all CONST_DOUBLEs in use in current function. */ ! #define CONST_DOUBLE_CHAIN(r) XCEXP (r, 0, CONST_DOUBLE) ! ! /* For a CONST_VECTOR, return element #n. */ ! #define CONST_VECTOR_ELT(RTX, N) XCVECEXP (RTX, 0, N, CONST_VECTOR) ! ! /* For a CONST_VECTOR, return the number of elements in a vector. */ ! #define CONST_VECTOR_NUNITS(RTX) XCVECLEN (RTX, 0, CONST_VECTOR) /* For a SUBREG rtx, SUBREG_REG extracts the value we want a subreg of. ! SUBREG_BYTE extracts the byte-number. */ ! #define SUBREG_REG(RTX) XCEXP (RTX, 0, SUBREG) ! #define SUBREG_BYTE(RTX) XCUINT (RTX, 1, SUBREG) ! ! /* in rtlanal.c */ ! extern unsigned int subreg_lsb PARAMS ((rtx)); ! extern unsigned int subreg_regno_offset PARAMS ((unsigned int, ! enum machine_mode, ! unsigned int, ! enum machine_mode)); ! extern unsigned int subreg_regno PARAMS ((rtx)); /* 1 if the REG contained in SUBREG_REG is already known to be sign- or zero-extended from the mode of the SUBREG to the mode of *************** extern const char * const note_insn_name *** 814,834 **** /* Access various components of an ASM_OPERANDS rtx. */ ! #define ASM_OPERANDS_TEMPLATE(RTX) XCSTR ((RTX), 0, ASM_OPERANDS) ! #define ASM_OPERANDS_OUTPUT_CONSTRAINT(RTX) XCSTR ((RTX), 1, ASM_OPERANDS) ! #define ASM_OPERANDS_OUTPUT_IDX(RTX) XCINT ((RTX), 2, ASM_OPERANDS) ! #define ASM_OPERANDS_INPUT_VEC(RTX) XCVEC ((RTX), 3, ASM_OPERANDS) ! #define ASM_OPERANDS_INPUT_CONSTRAINT_VEC(RTX) XCVEC ((RTX), 4, ASM_OPERANDS) ! #define ASM_OPERANDS_INPUT(RTX, N) XCVECEXP ((RTX), 3, (N), ASM_OPERANDS) ! #define ASM_OPERANDS_INPUT_LENGTH(RTX) XCVECLEN ((RTX), 3, ASM_OPERANDS) #define ASM_OPERANDS_INPUT_CONSTRAINT_EXP(RTX, N) \ ! XCVECEXP ((RTX), 4, (N), ASM_OPERANDS) #define ASM_OPERANDS_INPUT_CONSTRAINT(RTX, N) \ ! XSTR (XCVECEXP ((RTX), 4, (N), ASM_OPERANDS), 0) #define ASM_OPERANDS_INPUT_MODE(RTX, N) \ ! GET_MODE (XCVECEXP ((RTX), 4, (N), ASM_OPERANDS)) ! #define ASM_OPERANDS_SOURCE_FILE(RTX) XCSTR ((RTX), 5, ASM_OPERANDS) ! #define ASM_OPERANDS_SOURCE_LINE(RTX) XCINT ((RTX), 6, ASM_OPERANDS) /* For a MEM rtx, 1 if it's a volatile reference. Also in an ASM_OPERANDS rtx. */ --- 857,882 ---- /* Access various components of an ASM_OPERANDS rtx. */ ! #define ASM_OPERANDS_TEMPLATE(RTX) XCSTR (RTX, 0, ASM_OPERANDS) ! #define ASM_OPERANDS_OUTPUT_CONSTRAINT(RTX) XCSTR (RTX, 1, ASM_OPERANDS) ! #define ASM_OPERANDS_OUTPUT_IDX(RTX) XCINT (RTX, 2, ASM_OPERANDS) ! #define ASM_OPERANDS_INPUT_VEC(RTX) XCVEC (RTX, 3, ASM_OPERANDS) ! #define ASM_OPERANDS_INPUT_CONSTRAINT_VEC(RTX) XCVEC (RTX, 4, ASM_OPERANDS) ! #define ASM_OPERANDS_INPUT(RTX, N) XCVECEXP (RTX, 3, N, ASM_OPERANDS) ! #define ASM_OPERANDS_INPUT_LENGTH(RTX) XCVECLEN (RTX, 3, ASM_OPERANDS) #define ASM_OPERANDS_INPUT_CONSTRAINT_EXP(RTX, N) \ ! XCVECEXP (RTX, 4, N, ASM_OPERANDS) #define ASM_OPERANDS_INPUT_CONSTRAINT(RTX, N) \ ! XSTR (XCVECEXP (RTX, 4, N, ASM_OPERANDS), 0) #define ASM_OPERANDS_INPUT_MODE(RTX, N) \ ! GET_MODE (XCVECEXP (RTX, 4, N, ASM_OPERANDS)) ! #define ASM_OPERANDS_SOURCE_FILE(RTX) XCSTR (RTX, 5, ASM_OPERANDS) ! #define ASM_OPERANDS_SOURCE_LINE(RTX) XCINT (RTX, 6, ASM_OPERANDS) ! ! /* For a MEM RTX, 1 if we should keep the alias set for this mem ! unchanged when we access a component. Set to 1, or example, when we ! are already in a non-addressable component of an aggregate. */ ! #define MEM_KEEP_ALIAS_SET_P(RTX) ((RTX)->jump) /* For a MEM rtx, 1 if it's a volatile reference. Also in an ASM_OPERANDS rtx. */ *************** extern const char * const note_insn_name *** 840,853 **** #define MEM_IN_STRUCT_P(RTX) ((RTX)->in_struct) /* For a MEM rtx, 1 if it refers to a scalar. If zero, RTX may or may ! not refer to a scalar.*/ #define MEM_SCALAR_P(RTX) ((RTX)->frame_related) /* If VAL is non-zero, set MEM_IN_STRUCT_P and clear MEM_SCALAR_P in RTX. Otherwise, vice versa. Use this macro only when you are *sure* that you know that the MEM is in a structure, or is a scalar. VAL is evaluated only once. */ ! #define MEM_SET_IN_STRUCT_P(RTX, VAL) do { \ if (VAL) \ { \ MEM_IN_STRUCT_P (RTX) = 1; \ --- 888,902 ---- #define MEM_IN_STRUCT_P(RTX) ((RTX)->in_struct) /* For a MEM rtx, 1 if it refers to a scalar. If zero, RTX may or may ! not refer to a scalar. */ #define MEM_SCALAR_P(RTX) ((RTX)->frame_related) /* If VAL is non-zero, set MEM_IN_STRUCT_P and clear MEM_SCALAR_P in RTX. Otherwise, vice versa. Use this macro only when you are *sure* that you know that the MEM is in a structure, or is a scalar. VAL is evaluated only once. */ ! #define MEM_SET_IN_STRUCT_P(RTX, VAL) \ ! do { \ if (VAL) \ { \ MEM_IN_STRUCT_P (RTX) = 1; \ *************** extern const char * const note_insn_name *** 860,865 **** --- 909,918 ---- } \ } while (0) + /* The memory attribute block. We provide access macros for each value + in the block and provide defaults if none specified. */ + #define MEM_ATTRS(RTX) X0MEMATTR (RTX, 1) + /* For a MEM rtx, the alias set. If 0, this MEM is not in any alias set, and may alias anything. Otherwise, the MEM can only alias MEMs in the same alias set. This value is set in a *************** extern const char * const note_insn_name *** 869,883 **** some front-ends, these numbers may correspond in some way to types, or other language-level entities, but they need not, and the back-end makes no such assumptions. */ ! #define MEM_ALIAS_SET(RTX) XCWINT(RTX, 1, MEM) /* Copy the attributes that apply to memory locations from RHS to LHS. */ ! #define MEM_COPY_ATTRIBUTES(LHS, RHS) \ ! (MEM_VOLATILE_P (LHS) = MEM_VOLATILE_P (RHS), \ ! MEM_IN_STRUCT_P (LHS) = MEM_IN_STRUCT_P (RHS), \ ! MEM_SCALAR_P (LHS) = MEM_SCALAR_P (RHS), \ ! MEM_ALIAS_SET (LHS) = MEM_ALIAS_SET (RHS), \ ! RTX_UNCHANGING_P (LHS) = RTX_UNCHANGING_P (RHS)) /* For a LABEL_REF, 1 means that this reference is to a label outside the loop containing the reference. */ --- 922,959 ---- some front-ends, these numbers may correspond in some way to types, or other language-level entities, but they need not, and the back-end makes no such assumptions. */ ! #define MEM_ALIAS_SET(RTX) (MEM_ATTRS (RTX) == 0 ? 0 : MEM_ATTRS (RTX)->alias) ! ! /* For a MEM rtx, the decl it is known to refer to, if it is known to ! refer to part of a DECL. It may also be a COMPONENT_REF. */ ! #define MEM_EXPR(RTX) (MEM_ATTRS (RTX) == 0 ? 0 : MEM_ATTRS (RTX)->expr) ! ! /* For a MEM rtx, the offset from the start of MEM_EXPR, if known, as a ! RTX that is always a CONST_INT. */ ! #define MEM_OFFSET(RTX) (MEM_ATTRS (RTX) == 0 ? 0 : MEM_ATTRS (RTX)->offset) ! ! /* For a MEM rtx, the size in bytes of the MEM, if known, as an RTX that ! is always a CONST_INT. */ ! #define MEM_SIZE(RTX) \ ! (MEM_ATTRS (RTX) != 0 ? MEM_ATTRS (RTX)->size \ ! : GET_MODE (RTX) != BLKmode ? GEN_INT (GET_MODE_SIZE (GET_MODE (RTX))) \ ! : 0) ! ! /* For a MEM rtx, the alignment in bits. We can use the alignment of the ! mode as a default when STRICT_ALIGNMENT, but not if not. */ ! #define MEM_ALIGN(RTX) \ ! (MEM_ATTRS (RTX) != 0 ? MEM_ATTRS (RTX)->align \ ! : (STRICT_ALIGNMENT && GET_MODE (RTX) != BLKmode \ ! ? GET_MODE_ALIGNMENT (GET_MODE (RTX)) : BITS_PER_UNIT)) /* Copy the attributes that apply to memory locations from RHS to LHS. */ ! #define MEM_COPY_ATTRIBUTES(LHS, RHS) \ ! (MEM_VOLATILE_P (LHS) = MEM_VOLATILE_P (RHS), \ ! MEM_IN_STRUCT_P (LHS) = MEM_IN_STRUCT_P (RHS), \ ! MEM_SCALAR_P (LHS) = MEM_SCALAR_P (RHS), \ ! RTX_UNCHANGING_P (LHS) = RTX_UNCHANGING_P (RHS), \ ! MEM_KEEP_ALIAS_SET_P (LHS) = MEM_KEEP_ALIAS_SET_P (RHS), \ ! MEM_ATTRS (LHS) = MEM_ATTRS (RHS)) /* For a LABEL_REF, 1 means that this reference is to a label outside the loop containing the reference. */ *************** extern const char * const note_insn_name *** 911,926 **** and SET_SRC is the value it is set to. */ #define SET_DEST(RTX) XC2EXP(RTX, 0, SET, CLOBBER) #define SET_SRC(RTX) XCEXP(RTX, 1, SET) /* For a TRAP_IF rtx, TRAP_CONDITION is an expression. */ ! #define TRAP_CONDITION(RTX) XCEXP(RTX, 0, TRAP_IF) ! #define TRAP_CODE(RTX) XCEXP(RTX, 1, TRAP_IF) /* For a COND_EXEC rtx, COND_EXEC_TEST is the condition to base conditionally executing the code on, COND_EXEC_CODE is the code to execute if the condition is true. */ ! #define COND_EXEC_TEST(RTX) XCEXP(RTX, 0, COND_EXEC) ! #define COND_EXEC_CODE(RTX) XCEXP(RTX, 1, COND_EXEC) /* 1 in a SYMBOL_REF if it addresses this function's constants pool. */ #define CONSTANT_POOL_ADDRESS_P(RTX) ((RTX)->unchanging) --- 987,1003 ---- and SET_SRC is the value it is set to. */ #define SET_DEST(RTX) XC2EXP(RTX, 0, SET, CLOBBER) #define SET_SRC(RTX) XCEXP(RTX, 1, SET) + #define SET_IS_RETURN_P(RTX) ((RTX)->jump) /* For a TRAP_IF rtx, TRAP_CONDITION is an expression. */ ! #define TRAP_CONDITION(RTX) XCEXP (RTX, 0, TRAP_IF) ! #define TRAP_CODE(RTX) XCEXP (RTX, 1, TRAP_IF) /* For a COND_EXEC rtx, COND_EXEC_TEST is the condition to base conditionally executing the code on, COND_EXEC_CODE is the code to execute if the condition is true. */ ! #define COND_EXEC_TEST(RTX) XCEXP (RTX, 0, COND_EXEC) ! #define COND_EXEC_CODE(RTX) XCEXP (RTX, 1, COND_EXEC) /* 1 in a SYMBOL_REF if it addresses this function's constants pool. */ #define CONSTANT_POOL_ADDRESS_P(RTX) ((RTX)->unchanging) *************** extern const char * const note_insn_name *** 942,950 **** /* Don't continue this line--convex cc version 4.1 would lose. */ #if (defined (HAVE_PRE_INCREMENT) || defined (HAVE_PRE_DECREMENT) || defined (HAVE_POST_INCREMENT) || defined (HAVE_POST_DECREMENT)) ! #define FIND_REG_INC_NOTE(insn, reg) (find_reg_note ((insn), REG_INC, (reg))) #else ! #define FIND_REG_INC_NOTE(insn, reg) 0 #endif /* Indicate whether the machine has any sort of auto increment addressing. --- 1019,1030 ---- /* Don't continue this line--convex cc version 4.1 would lose. */ #if (defined (HAVE_PRE_INCREMENT) || defined (HAVE_PRE_DECREMENT) || defined (HAVE_POST_INCREMENT) || defined (HAVE_POST_DECREMENT)) ! #define FIND_REG_INC_NOTE(INSN, REG) \ ! ((REG) != NULL_RTX && REG_P ((REG)) \ ! ? find_regno_note ((INSN), REG_INC, REGNO (REG)) \ ! : find_reg_note ((INSN), REG_INC, (REG))) #else ! #define FIND_REG_INC_NOTE(INSN, REG) 0 #endif /* Indicate whether the machine has any sort of auto increment addressing. *************** extern const char * const note_insn_name *** 1047,1056 **** /* For RANGE_{START,END} notes, a unique # to identify this range. */ #define RANGE_INFO_UNIQUE(INSN) XCINT (INSN, 5, RANGE_INFO) ! /* For RANGE_{START,END} notes, the basic block # the range starts with. */ #define RANGE_INFO_BB_START(INSN) XCINT (INSN, 6, RANGE_INFO) ! /* For RANGE_{START,END} notes, the basic block # the range ends with. */ #define RANGE_INFO_BB_END(INSN) XCINT (INSN, 7, RANGE_INFO) /* For RANGE_{START,END} notes, the loop depth the range is in. */ --- 1127,1136 ---- /* For RANGE_{START,END} notes, a unique # to identify this range. */ #define RANGE_INFO_UNIQUE(INSN) XCINT (INSN, 5, RANGE_INFO) ! /* For RANGE_{START,END} notes, the basic block # the range starts with. */ #define RANGE_INFO_BB_START(INSN) XCINT (INSN, 6, RANGE_INFO) ! /* For RANGE_{START,END} notes, the basic block # the range ends with. */ #define RANGE_INFO_BB_END(INSN) XCINT (INSN, 7, RANGE_INFO) /* For RANGE_{START,END} notes, the loop depth the range is in. */ *************** extern const char * const note_insn_name *** 1086,1092 **** #define RANGE_REG_DEATHS(INSN,N) XINT (XCVECEXP (INSN, 2, N, RANGE_INFO), 4) /* Whether the original value is needed to be copied into the range register at ! the start of the range. */ #define RANGE_REG_COPY_FLAGS(INSN,N) XINT (XCVECEXP (INSN, 2, N, RANGE_INFO), 5) /* # of insns the register copy is live over. */ --- 1166,1172 ---- #define RANGE_REG_DEATHS(INSN,N) XINT (XCVECEXP (INSN, 2, N, RANGE_INFO), 4) /* Whether the original value is needed to be copied into the range register at ! the start of the range. */ #define RANGE_REG_COPY_FLAGS(INSN,N) XINT (XCVECEXP (INSN, 2, N, RANGE_INFO), 5) /* # of insns the register copy is live over. */ *************** extern const char * const note_insn_name *** 1120,1126 **** /* Determine if the insn is a PHI node. */ #define PHI_NODE_P(X) \ ! (X && GET_CODE (X) == INSN \ && GET_CODE (PATTERN (X)) == SET \ && GET_CODE (SET_SRC (PATTERN (X))) == PHI) --- 1200,1206 ---- /* Determine if the insn is a PHI node. */ #define PHI_NODE_P(X) \ ! ((X) && GET_CODE (X) == INSN \ && GET_CODE (PATTERN (X)) == SET \ && GET_CODE (SET_SRC (PATTERN (X))) == PHI) *************** extern int generating_concat_p; *** 1135,1158 **** /* Generally useful functions. */ - /* The following functions accept a wide integer argument. Rather than - having to cast on every function call, we use a macro instead, that is - defined here and in tree.h. */ - - #ifndef exact_log2 - #define exact_log2(N) exact_log2_wide ((unsigned HOST_WIDE_INT) (N)) - #define floor_log2(N) floor_log2_wide ((unsigned HOST_WIDE_INT) (N)) - #endif - extern int exact_log2_wide PARAMS ((unsigned HOST_WIDE_INT)); - extern int floor_log2_wide PARAMS ((unsigned HOST_WIDE_INT)); - /* In expmed.c */ extern int ceil_log2 PARAMS ((unsigned HOST_WIDE_INT)); ! #define plus_constant(X,C) plus_constant_wide (X, (HOST_WIDE_INT) (C)) ! #define plus_constant_for_output(X,C) \ ! plus_constant_for_output_wide (X, (HOST_WIDE_INT) (C)) /* In explow.c */ extern void set_stack_check_libfunc PARAMS ((rtx)); --- 1215,1227 ---- /* Generally useful functions. */ /* In expmed.c */ extern int ceil_log2 PARAMS ((unsigned HOST_WIDE_INT)); ! #define plus_constant(X, C) plus_constant_wide ((X), (HOST_WIDE_INT) (C)) ! /* In builtins.c */ ! extern rtx expand_builtin_expect_jump PARAMS ((tree, rtx, rtx)); /* In explow.c */ extern void set_stack_check_libfunc PARAMS ((rtx)); *************** extern void optimize_save_area_alloca PA *** 1166,1180 **** extern rtx gen_rtx PARAMS ((enum rtx_code, enum machine_mode, ...)); extern rtvec gen_rtvec PARAMS ((int, ...)); - - /* In other files */ - extern char *permalloc PARAMS ((int)); - extern rtx rtx_alloc PARAMS ((RTX_CODE)); - extern rtvec rtvec_alloc PARAMS ((int)); extern rtx copy_insn_1 PARAMS ((rtx)); extern rtx copy_insn PARAMS ((rtx)); /* In rtl.c */ extern rtx copy_rtx PARAMS ((rtx)); /* In emit-rtl.c */ --- 1235,1246 ---- extern rtx gen_rtx PARAMS ((enum rtx_code, enum machine_mode, ...)); extern rtvec gen_rtvec PARAMS ((int, ...)); extern rtx copy_insn_1 PARAMS ((rtx)); extern rtx copy_insn PARAMS ((rtx)); /* In rtl.c */ + extern rtx rtx_alloc PARAMS ((RTX_CODE)); + extern rtvec rtvec_alloc PARAMS ((int)); extern rtx copy_rtx PARAMS ((rtx)); /* In emit-rtl.c */ *************** extern int rtx_equal_p *** 1189,1194 **** --- 1255,1261 ---- extern rtvec gen_rtvec_v PARAMS ((int, rtx *)); extern rtx gen_reg_rtx PARAMS ((enum machine_mode)); extern rtx gen_label_rtx PARAMS ((void)); + extern int subreg_hard_regno PARAMS ((rtx, int)); extern rtx gen_lowpart_common PARAMS ((enum machine_mode, rtx)); extern rtx gen_lowpart PARAMS ((enum machine_mode, rtx)); *************** extern rtx gen_lowpart_if_possible PARAM *** 1197,1214 **** /* In emit-rtl.c */ extern rtx gen_highpart PARAMS ((enum machine_mode, rtx)); extern rtx gen_realpart PARAMS ((enum machine_mode, rtx)); extern rtx gen_imagpart PARAMS ((enum machine_mode, rtx)); extern rtx operand_subword PARAMS ((rtx, unsigned int, int, enum machine_mode)); /* In emit-rtl.c */ extern rtx operand_subword_force PARAMS ((rtx, unsigned int, enum machine_mode)); extern int subreg_lowpart_p PARAMS ((rtx)); extern rtx make_safe_from PARAMS ((rtx, rtx)); extern rtx convert_memory_address PARAMS ((enum machine_mode, rtx)); - extern rtx memory_address PARAMS ((enum machine_mode, rtx)); extern rtx get_insns PARAMS ((void)); extern const char *get_insn_name PARAMS ((int)); extern rtx get_last_insn PARAMS ((void)); --- 1264,1288 ---- /* In emit-rtl.c */ extern rtx gen_highpart PARAMS ((enum machine_mode, rtx)); + extern rtx gen_highpart_mode PARAMS ((enum machine_mode, + enum machine_mode, rtx)); extern rtx gen_realpart PARAMS ((enum machine_mode, rtx)); extern rtx gen_imagpart PARAMS ((enum machine_mode, rtx)); extern rtx operand_subword PARAMS ((rtx, unsigned int, int, enum machine_mode)); + extern rtx constant_subword PARAMS ((rtx, int, + enum machine_mode)); /* In emit-rtl.c */ extern rtx operand_subword_force PARAMS ((rtx, unsigned int, enum machine_mode)); extern int subreg_lowpart_p PARAMS ((rtx)); + extern unsigned int subreg_lowpart_offset PARAMS ((enum machine_mode, + enum machine_mode)); + extern unsigned int subreg_highpart_offset PARAMS ((enum machine_mode, + enum machine_mode)); extern rtx make_safe_from PARAMS ((rtx, rtx)); extern rtx convert_memory_address PARAMS ((enum machine_mode, rtx)); extern rtx get_insns PARAMS ((void)); extern const char *get_insn_name PARAMS ((int)); extern rtx get_last_insn PARAMS ((void)); *************** extern rtx gen_sequence PARAMS ((void) *** 1222,1234 **** /* In varasm.c */ extern rtx immed_double_const PARAMS ((HOST_WIDE_INT, HOST_WIDE_INT, enum machine_mode)); extern rtx force_const_mem PARAMS ((enum machine_mode, rtx)); - /* In explow.c */ - extern rtx force_reg PARAMS ((enum machine_mode, rtx)); - /* In varasm.c */ extern rtx get_pool_constant PARAMS ((rtx)); extern enum machine_mode get_pool_mode PARAMS ((rtx)); extern rtx get_pool_constant_for_function PARAMS ((struct function *, rtx)); extern enum machine_mode get_pool_mode_for_function PARAMS ((struct function *, rtx)); --- 1296,1307 ---- /* In varasm.c */ extern rtx immed_double_const PARAMS ((HOST_WIDE_INT, HOST_WIDE_INT, enum machine_mode)); + extern rtx mem_for_const_double PARAMS ((rtx)); extern rtx force_const_mem PARAMS ((enum machine_mode, rtx)); /* In varasm.c */ extern rtx get_pool_constant PARAMS ((rtx)); + extern rtx get_pool_constant_mark PARAMS ((rtx, bool *)); extern enum machine_mode get_pool_mode PARAMS ((rtx)); extern rtx get_pool_constant_for_function PARAMS ((struct function *, rtx)); extern enum machine_mode get_pool_mode_for_function PARAMS ((struct function *, rtx)); *************** extern rtx assign_stack_local PARAMS (( *** 1240,1252 **** HOST_WIDE_INT, int)); extern rtx assign_stack_temp PARAMS ((enum machine_mode, HOST_WIDE_INT, int)); ! extern rtx assign_temp PARAMS ((union tree_node *, ! int, int, int)); ! /* In expr.c */ ! extern rtx protect_from_queue PARAMS ((rtx, int)); ! extern void emit_queue PARAMS ((void)); ! extern rtx emit_move_insn PARAMS ((rtx, rtx)); ! /* In emit-rtl.c */ extern rtx emit_insn_before PARAMS ((rtx, rtx)); extern rtx emit_jump_insn_before PARAMS ((rtx, rtx)); --- 1313,1321 ---- HOST_WIDE_INT, int)); extern rtx assign_stack_temp PARAMS ((enum machine_mode, HOST_WIDE_INT, int)); ! extern rtx assign_stack_temp_for_type PARAMS ((enum machine_mode, ! HOST_WIDE_INT, int, tree)); ! extern rtx assign_temp PARAMS ((tree, int, int, int)); /* In emit-rtl.c */ extern rtx emit_insn_before PARAMS ((rtx, rtx)); extern rtx emit_jump_insn_before PARAMS ((rtx, rtx)); *************** extern enum rtx_code reverse_condition_m *** 1293,1306 **** extern enum rtx_code swap_condition PARAMS ((enum rtx_code)); extern enum rtx_code unsigned_condition PARAMS ((enum rtx_code)); extern enum rtx_code signed_condition PARAMS ((enum rtx_code)); ! extern void mark_jump_label PARAMS ((rtx, rtx, int, int)); ! ! /* In reload.c */ ! extern rtx find_equiv_reg PARAMS ((rtx, rtx, enum reg_class, int, short *, int, enum machine_mode)); /* In jump.c */ ! extern rtx squeeze_notes PARAMS ((rtx, rtx)); ! extern rtx delete_insn PARAMS ((rtx)); extern void delete_jump PARAMS ((rtx)); extern void delete_barrier PARAMS ((rtx)); extern rtx get_label_before PARAMS ((rtx)); --- 1362,1373 ---- extern enum rtx_code swap_condition PARAMS ((enum rtx_code)); extern enum rtx_code unsigned_condition PARAMS ((enum rtx_code)); extern enum rtx_code signed_condition PARAMS ((enum rtx_code)); ! extern void mark_jump_label PARAMS ((rtx, rtx, int)); ! extern void cleanup_barriers PARAMS ((void)); /* In jump.c */ ! extern bool squeeze_notes PARAMS ((rtx *, rtx *)); ! extern rtx delete_related_insns PARAMS ((rtx)); extern void delete_jump PARAMS ((rtx)); extern void delete_barrier PARAMS ((rtx)); extern rtx get_label_before PARAMS ((rtx)); *************** extern rtx get_label_after PARAMS ((rtx *** 1308,1354 **** extern rtx follow_jumps PARAMS ((rtx)); /* In recog.c */ ! extern rtx adj_offsettable_operand PARAMS ((rtx, int)); /* In emit-rtl.c */ extern rtx try_split PARAMS ((rtx, rtx, int)); /* In unknown file */ extern rtx split_insns PARAMS ((rtx, rtx)); /* In simplify-rtx.c */ ! extern rtx simplify_unary_operation PARAMS ((enum rtx_code, enum machine_mode, rtx, enum machine_mode)); ! extern rtx simplify_binary_operation PARAMS ((enum rtx_code, enum machine_mode, rtx, rtx)); ! extern rtx simplify_ternary_operation PARAMS ((enum rtx_code, enum machine_mode, enum machine_mode, rtx, rtx, rtx)); ! extern rtx simplify_relational_operation PARAMS ((enum rtx_code, enum machine_mode, rtx, rtx)); ! extern rtx simplify_gen_binary PARAMS ((enum rtx_code, enum machine_mode, ! rtx, rtx)); extern rtx simplify_rtx PARAMS ((rtx)); ! ! /* In optabs.c */ ! extern rtx gen_move_insn PARAMS ((rtx, rtx)); ! ! extern rtx gen_jump PARAMS ((rtx)); ! extern rtx gen_beq PARAMS ((rtx)); ! extern rtx gen_bge PARAMS ((rtx)); ! extern rtx gen_ble PARAMS ((rtx)); /* In function.c */ ! extern rtx gen_mem_addressof PARAMS ((rtx, union tree_node *)); ! ! /* In explow.c */ ! extern rtx eliminate_constant_term PARAMS ((rtx, rtx *)); ! ! /* In optabs.c */ ! extern rtx expand_complex_abs PARAMS ((enum machine_mode, rtx, rtx, ! int)); /* In regclass.c */ extern enum machine_mode choose_hard_reg_mode PARAMS ((unsigned int, unsigned int)); /* In emit-rtl.c */ ! extern void set_unique_reg_note PARAMS ((rtx, enum reg_note, rtx)); /* Functions in rtlanal.c */ --- 1375,1438 ---- extern rtx follow_jumps PARAMS ((rtx)); /* In recog.c */ ! extern rtx *find_constant_term_loc PARAMS ((rtx *)); /* In emit-rtl.c */ extern rtx try_split PARAMS ((rtx, rtx, int)); + extern int split_branch_probability; /* In unknown file */ extern rtx split_insns PARAMS ((rtx, rtx)); /* In simplify-rtx.c */ ! extern rtx simplify_unary_operation PARAMS ((enum rtx_code, ! enum machine_mode, rtx, ! enum machine_mode)); ! extern rtx simplify_binary_operation PARAMS ((enum rtx_code, ! enum machine_mode, rtx, ! rtx)); ! extern rtx simplify_ternary_operation PARAMS ((enum rtx_code, ! enum machine_mode, ! enum machine_mode, rtx, rtx, ! rtx)); ! extern rtx simplify_relational_operation PARAMS ((enum rtx_code, ! enum machine_mode, rtx, ! rtx)); ! extern rtx simplify_gen_binary PARAMS ((enum rtx_code, ! enum machine_mode, ! rtx, rtx)); ! extern rtx simplify_gen_unary PARAMS ((enum rtx_code, ! enum machine_mode, rtx, ! enum machine_mode)); ! extern rtx simplify_gen_ternary PARAMS ((enum rtx_code, ! enum machine_mode, ! enum machine_mode, ! rtx, rtx, rtx)); ! extern rtx simplify_gen_relational PARAMS ((enum rtx_code, ! enum machine_mode, ! enum machine_mode, ! rtx, rtx)); ! extern rtx simplify_subreg PARAMS ((enum machine_mode, ! rtx, ! enum machine_mode, ! unsigned int)); ! extern rtx simplify_gen_subreg PARAMS ((enum machine_mode, ! rtx, ! enum machine_mode, ! unsigned int)); ! extern rtx simplify_replace_rtx PARAMS ((rtx, rtx, rtx)); extern rtx simplify_rtx PARAMS ((rtx)); ! extern rtx avoid_constant_pool_reference PARAMS ((rtx)); /* In function.c */ ! extern rtx gen_mem_addressof PARAMS ((rtx, tree)); /* In regclass.c */ extern enum machine_mode choose_hard_reg_mode PARAMS ((unsigned int, unsigned int)); /* In emit-rtl.c */ ! extern rtx set_unique_reg_note PARAMS ((rtx, enum reg_note, rtx)); /* Functions in rtlanal.c */ *************** extern int rtx_varies_p PARAMS ((rtx, *** 1365,1370 **** --- 1449,1455 ---- extern int rtx_addr_varies_p PARAMS ((rtx, int)); extern HOST_WIDE_INT get_integer_term PARAMS ((rtx)); extern rtx get_related_value PARAMS ((rtx)); + extern rtx get_jump_table_offset PARAMS ((rtx, rtx *)); extern int reg_mentioned_p PARAMS ((rtx, rtx)); extern int count_occurrences PARAMS ((rtx, rtx, int)); extern int reg_referenced_p PARAMS ((rtx, rtx)); *************** extern int reg_used_between_p PARAMS (( *** 1372,1377 **** --- 1457,1464 ---- extern int reg_referenced_between_p PARAMS ((rtx, rtx, rtx)); extern int reg_set_between_p PARAMS ((rtx, rtx, rtx)); extern int regs_set_between_p PARAMS ((rtx, rtx, rtx)); + extern int commutative_operand_precedence PARAMS ((rtx)); + extern int swap_commutative_operands_p PARAMS ((rtx, rtx)); extern int modified_between_p PARAMS ((rtx, rtx, rtx)); extern int no_labels_between_p PARAMS ((rtx, rtx)); extern int no_jumps_between_p PARAMS ((rtx, rtx)); *************** extern int insn_dependent_p PARAMS ((rt *** 1380,1385 **** --- 1467,1474 ---- extern int reg_set_p PARAMS ((rtx, rtx)); extern rtx single_set_2 PARAMS ((rtx, rtx)); extern int multiple_sets PARAMS ((rtx)); + extern int set_noop_p PARAMS ((rtx)); + extern int noop_move_p PARAMS ((rtx)); extern rtx find_last_value PARAMS ((rtx, rtx *, rtx, int)); extern int refers_to_regno_p PARAMS ((unsigned int, unsigned int, rtx, rtx *)); *************** extern rtx set_of PARAMS ((rtx, rtx)); *** 1388,1402 **** --- 1477,1496 ---- extern void note_stores PARAMS ((rtx, void (*) (rtx, rtx, void *), void *)); + extern void note_uses PARAMS ((rtx *, + void (*) (rtx *, void *), + void *)); extern rtx reg_set_last PARAMS ((rtx, rtx)); extern int dead_or_set_p PARAMS ((rtx, rtx)); extern int dead_or_set_regno_p PARAMS ((rtx, unsigned int)); extern rtx find_reg_note PARAMS ((rtx, enum reg_note, rtx)); extern rtx find_regno_note PARAMS ((rtx, enum reg_note, unsigned int)); + extern rtx find_reg_equal_equiv_note PARAMS ((rtx)); extern int find_reg_fusage PARAMS ((rtx, enum rtx_code, rtx)); extern int find_regno_fusage PARAMS ((rtx, enum rtx_code, unsigned int)); + extern int pure_call_p PARAMS ((rtx)); extern void remove_note PARAMS ((rtx, rtx)); extern int side_effects_p PARAMS ((rtx)); extern int volatile_refs_p PARAMS ((rtx)); *************** typedef int (*rtx_function) *** 1411,1416 **** --- 1505,1511 ---- extern int for_each_rtx PARAMS ((rtx *, rtx_function, void *)); extern rtx regno_use_in PARAMS ((unsigned int, rtx)); extern int auto_inc_p PARAMS ((rtx)); + extern int in_expr_list_p PARAMS ((rtx, rtx)); extern void remove_node_from_expr_list PARAMS ((rtx, rtx *)); extern int insns_safe_to_move_p PARAMS ((rtx, rtx, rtx *)); extern int loc_mentioned_in_p PARAMS ((rtx *, rtx)); *************** void free_EXPR_LIST_node PARAMS ((rtx) *** 1426,1432 **** void free_INSN_LIST_node PARAMS ((rtx)); rtx alloc_INSN_LIST PARAMS ((rtx, rtx)); rtx alloc_EXPR_LIST PARAMS ((int, rtx, rtx)); - void clear_log_links PARAMS ((rtx)); /* regclass.c */ --- 1521,1526 ---- *************** extern enum reg_class reg_alternate_clas *** 1451,1456 **** --- 1545,1551 ---- extern rtx get_first_nonparm_insn PARAMS ((void)); extern void split_all_insns PARAMS ((int)); + extern void split_all_insns_noflow PARAMS ((void)); #define MAX_SAVED_CONST_INT 64 extern rtx const_int_rtx[MAX_SAVED_CONST_INT * 2 + 1]; *************** extern rtx const_tiny_rtx[3][(int) MAX_M *** 1478,1484 **** hard frame pointer and the automatic variables are separated by an amount that cannot be determined until after register allocation. We can assume that in this case ELIMINABLE_REGS will be defined, one action of which ! will be to eliminate FRAME_POINTER_REGNUM into HARD_FRAME_POINTER_REGNUM. */ #ifndef HARD_FRAME_POINTER_REGNUM #define HARD_FRAME_POINTER_REGNUM FRAME_POINTER_REGNUM #endif --- 1573,1579 ---- hard frame pointer and the automatic variables are separated by an amount that cannot be determined until after register allocation. We can assume that in this case ELIMINABLE_REGS will be defined, one action of which ! will be to eliminate FRAME_POINTER_REGNUM into HARD_FRAME_POINTER_REGNUM. */ #ifndef HARD_FRAME_POINTER_REGNUM #define HARD_FRAME_POINTER_REGNUM FRAME_POINTER_REGNUM #endif *************** extern rtx return_address_pointer_rtx; *** 1550,1562 **** add to this list, modify special_rtx in gengenrtl.c as well. You should also modify gen_rtx to use the special function. */ ! extern rtx gen_rtx_CONST_DOUBLE PARAMS ((enum machine_mode, rtx, HOST_WIDE_INT, HOST_WIDE_INT)); extern rtx gen_rtx_CONST_INT PARAMS ((enum machine_mode, HOST_WIDE_INT)); extern rtx gen_raw_REG PARAMS ((enum machine_mode, int)); extern rtx gen_rtx_REG PARAMS ((enum machine_mode, int)); extern rtx gen_rtx_MEM PARAMS ((enum machine_mode, rtx)); /* We need the cast here to ensure that we get the same result both with and without prototypes. */ #define GEN_INT(N) gen_rtx_CONST_INT (VOIDmode, (HOST_WIDE_INT) (N)) --- 1645,1660 ---- add to this list, modify special_rtx in gengenrtl.c as well. You should also modify gen_rtx to use the special function. */ ! extern rtx gen_rtx_CONST_DOUBLE PARAMS ((enum machine_mode, HOST_WIDE_INT, HOST_WIDE_INT)); extern rtx gen_rtx_CONST_INT PARAMS ((enum machine_mode, HOST_WIDE_INT)); extern rtx gen_raw_REG PARAMS ((enum machine_mode, int)); extern rtx gen_rtx_REG PARAMS ((enum machine_mode, int)); + extern rtx gen_rtx_SUBREG PARAMS ((enum machine_mode, rtx, int)); extern rtx gen_rtx_MEM PARAMS ((enum machine_mode, rtx)); + extern rtx gen_lowpart_SUBREG PARAMS ((enum machine_mode, rtx)); + /* We need the cast here to ensure that we get the same result both with and without prototypes. */ #define GEN_INT(N) gen_rtx_CONST_INT (VOIDmode, (HOST_WIDE_INT) (N)) *************** extern rtx gen_rtx_MEM PARAMS ((enum mac *** 1613,1627 **** #define LAST_VIRTUAL_REGISTER ((FIRST_VIRTUAL_REGISTER) + 4) /* REGNUM never really appearing in the INSN stream. */ ! #define INVALID_REGNUM (~(unsigned int)0) extern rtx find_next_ref PARAMS ((rtx, rtx)); - extern rtx *find_single_use PARAMS ((rtx, rtx, rtx *)); ! extern rtx output_constant_def PARAMS ((union tree_node *, int)); ! extern rtx immed_real_const PARAMS ((union tree_node *)); ! extern union tree_node *make_tree PARAMS ((union tree_node *, rtx)); /* Define a default value for STORE_FLAG_VALUE. */ --- 1711,1732 ---- #define LAST_VIRTUAL_REGISTER ((FIRST_VIRTUAL_REGISTER) + 4) + /* Nonzero if REGNUM is a pointer into the stack frame. */ + #define REGNO_PTR_FRAME_P(REGNUM) \ + ((REGNUM) == STACK_POINTER_REGNUM \ + || (REGNUM) == FRAME_POINTER_REGNUM \ + || (REGNUM) == HARD_FRAME_POINTER_REGNUM \ + || (REGNUM) == ARG_POINTER_REGNUM \ + || ((REGNUM) >= FIRST_VIRTUAL_REGISTER \ + && (REGNUM) <= LAST_VIRTUAL_REGISTER)) + /* REGNUM never really appearing in the INSN stream. */ ! #define INVALID_REGNUM (~(unsigned int) 0) extern rtx find_next_ref PARAMS ((rtx, rtx)); ! extern rtx output_constant_def PARAMS ((tree, int)); ! extern rtx immed_real_const PARAMS ((tree)); /* Define a default value for STORE_FLAG_VALUE. */ *************** struct cse_basic_block_data; *** 1679,1685 **** extern int rtx_cost PARAMS ((rtx, enum rtx_code)); extern int address_cost PARAMS ((rtx, enum machine_mode)); ! extern void delete_trivially_dead_insns PARAMS ((rtx, int)); #ifdef BUFSIZ extern int cse_main PARAMS ((rtx, int, int, FILE *)); #endif --- 1784,1790 ---- extern int rtx_cost PARAMS ((rtx, enum rtx_code)); extern int address_cost PARAMS ((rtx, enum machine_mode)); ! extern void delete_trivially_dead_insns PARAMS ((rtx, int, int)); #ifdef BUFSIZ extern int cse_main PARAMS ((rtx, int, int, FILE *)); #endif *************** extern rtx condjump_label PARAMS ((rtx) *** 1698,1703 **** --- 1803,1809 ---- extern int simplejump_p PARAMS ((rtx)); extern int returnjump_p PARAMS ((rtx)); extern int onlyjump_p PARAMS ((rtx)); + extern int only_sets_cc0_p PARAMS ((rtx)); extern int sets_cc0_p PARAMS ((rtx)); extern int invert_jump_1 PARAMS ((rtx, rtx)); extern int invert_jump PARAMS ((rtx, rtx, int)); *************** extern int rtx_renumbered_equal_p PARAMS *** 1705,1730 **** extern int true_regnum PARAMS ((rtx)); extern int redirect_jump_1 PARAMS ((rtx, rtx)); extern int redirect_jump PARAMS ((rtx, rtx, int)); - extern void jump_optimize PARAMS ((rtx, int, int, int)); - extern void jump_optimize_minimal PARAMS ((rtx)); extern void rebuild_jump_labels PARAMS ((rtx)); - extern void thread_jumps PARAMS ((rtx, int, int)); - extern int rtx_equal_for_thread_p PARAMS ((rtx, rtx, rtx)); - extern int can_reverse_comparison_p PARAMS ((rtx, rtx)); extern enum rtx_code reversed_comparison_code PARAMS ((rtx, rtx)); extern enum rtx_code reversed_comparison_code_parts PARAMS ((enum rtx_code, rtx, rtx, rtx)); extern void delete_for_peephole PARAMS ((rtx, rtx)); extern int condjump_in_parallel_p PARAMS ((rtx)); ! extern void never_reached_warning PARAMS ((rtx)); ! ! /* Flags for jump_optimize() */ ! #define JUMP_CROSS_JUMP 1 ! #define JUMP_CROSS_JUMP_DEATH_MATTERS 2 ! #define JUMP_NOOP_MOVES 1 ! #define JUMP_AFTER_REGSCAN 1 ! /* In emit-rtl.c. */ extern int max_reg_num PARAMS ((void)); extern int max_label_num PARAMS ((void)); extern int get_first_label_num PARAMS ((void)); --- 1811,1827 ---- extern int true_regnum PARAMS ((rtx)); extern int redirect_jump_1 PARAMS ((rtx, rtx)); extern int redirect_jump PARAMS ((rtx, rtx, int)); extern void rebuild_jump_labels PARAMS ((rtx)); extern enum rtx_code reversed_comparison_code PARAMS ((rtx, rtx)); extern enum rtx_code reversed_comparison_code_parts PARAMS ((enum rtx_code, rtx, rtx, rtx)); extern void delete_for_peephole PARAMS ((rtx, rtx)); extern int condjump_in_parallel_p PARAMS ((rtx)); ! extern void never_reached_warning PARAMS ((rtx, rtx)); ! extern void purge_line_number_notes PARAMS ((rtx)); ! extern void copy_loop_headers PARAMS ((rtx)); ! /* In emit-rtl.c. */ extern int max_reg_num PARAMS ((void)); extern int max_label_num PARAMS ((void)); extern int get_first_label_num PARAMS ((void)); *************** extern void mark_reg_pointer PARAMS (( *** 1733,1738 **** --- 1830,1836 ---- extern void mark_user_reg PARAMS ((rtx)); extern void reset_used_flags PARAMS ((rtx)); extern void reorder_insns PARAMS ((rtx, rtx, rtx)); + extern void reorder_insns_nobb PARAMS ((rtx, rtx, rtx)); extern int get_max_uid PARAMS ((void)); extern int in_sequence_p PARAMS ((void)); extern void force_next_line_note PARAMS ((void)); *************** int force_line_numbers PARAMS ((void)); *** 1764,1772 **** void restore_line_number_status PARAMS ((int old_value)); extern void renumber_insns PARAMS ((FILE *)); extern void remove_unnecessary_notes PARAMS ((void)); ! ! /* In insn-emit.c */ ! extern void add_clobbers PARAMS ((rtx, int)); /* In combine.c */ extern int combine_instructions PARAMS ((rtx, unsigned int)); --- 1862,1869 ---- void restore_line_number_status PARAMS ((int old_value)); extern void renumber_insns PARAMS ((FILE *)); extern void remove_unnecessary_notes PARAMS ((void)); ! extern rtx delete_insn PARAMS ((rtx)); ! extern void delete_insn_chain PARAMS ((rtx, rtx)); /* In combine.c */ extern int combine_instructions PARAMS ((rtx, unsigned int)); *************** extern void dump_combine_stats PARAMS ( *** 1777,1783 **** extern void dump_combine_total_stats PARAMS ((FILE *)); #endif ! /* In sched.c. */ #ifdef BUFSIZ extern void schedule_insns PARAMS ((FILE *)); extern void schedule_ebbs PARAMS ((FILE *)); --- 1874,1880 ---- extern void dump_combine_total_stats PARAMS ((FILE *)); #endif ! /* In sched.c. */ #ifdef BUFSIZ extern void schedule_insns PARAMS ((FILE *)); extern void schedule_ebbs PARAMS ((FILE *)); *************** extern void debug_rtx_list PARAMS ((rtx *** 1791,1796 **** --- 1888,1894 ---- extern void debug_rtx_range PARAMS ((rtx, rtx)); extern rtx debug_rtx_find PARAMS ((rtx, int)); #ifdef BUFSIZ + extern void print_mem_expr PARAMS ((FILE *, tree)); extern void print_rtl PARAMS ((FILE *, rtx)); extern void print_simple_rtl PARAMS ((FILE *, rtx)); extern int print_rtl_single PARAMS ((FILE *, rtx)); *************** extern void reposition_prologue_and_epil *** 1810,1826 **** extern void thread_prologue_and_epilogue_insns PARAMS ((rtx)); extern int prologue_epilogue_contains PARAMS ((rtx)); extern int sibcall_epilogue_contains PARAMS ((rtx)); - extern HOST_WIDE_INT get_frame_size PARAMS ((void)); extern void preserve_rtl_expr_result PARAMS ((rtx)); extern void mark_temp_addr_taken PARAMS ((rtx)); extern void update_temp_slot_address PARAMS ((rtx, rtx)); extern void purge_addressof PARAMS ((rtx)); extern void purge_hard_subreg_sets PARAMS ((rtx)); - /* In reload.c */ - extern int operands_match_p PARAMS ((rtx, rtx)); - extern int safe_from_earlyclobber PARAMS ((rtx, rtx)); - /* In stmt.c */ extern void set_file_and_line_for_stmt PARAMS ((const char *, int)); extern void expand_null_return PARAMS ((void)); --- 1908,1919 ---- *************** extern void emit_jump PARAMS ((rtx)); *** 1828,1843 **** extern int preserve_subexpressions_p PARAMS ((void)); /* In expr.c */ - extern void init_expr_once PARAMS ((void)); extern void move_by_pieces PARAMS ((rtx, rtx, unsigned HOST_WIDE_INT, unsigned int)); /* In flow.c */ ! extern void recompute_reg_usage PARAMS ((rtx, int)); #ifdef BUFSIZ ! extern void print_rtl_with_bb PARAMS ((FILE *, rtx)); ! extern void dump_flow_info PARAMS ((FILE *)); #endif /* In expmed.c */ --- 1921,1936 ---- extern int preserve_subexpressions_p PARAMS ((void)); /* In expr.c */ extern void move_by_pieces PARAMS ((rtx, rtx, unsigned HOST_WIDE_INT, unsigned int)); /* In flow.c */ ! extern void recompute_reg_usage PARAMS ((rtx, int)); ! extern int initialize_uninitialized_subregs PARAMS ((void)); #ifdef BUFSIZ ! extern void print_rtl_with_bb PARAMS ((FILE *, rtx)); ! extern void dump_flow_info PARAMS ((FILE *)); #endif /* In expmed.c */ *************** extern void combine_stack_adjustments PA *** 1890,1898 **** extern void dbr_schedule PARAMS ((rtx, FILE *)); #endif - /* In optabs.c */ - extern void init_optabs PARAMS ((void)); - /* In local-alloc.c */ #ifdef BUFSIZ extern void dump_local_alloc PARAMS ((FILE *)); --- 1983,1988 ---- *************** extern void dump_local_alloc PARAMS ((F *** 1900,1914 **** extern int local_alloc PARAMS ((void)); extern int function_invariant_p PARAMS ((rtx)); - /* In reload1.c */ - extern void reload_cse_regs PARAMS ((rtx)); - extern void init_reload PARAMS ((void)); - extern void mark_home_live PARAMS ((int)); - extern int reload PARAMS ((rtx, int)); - - /* In caller-save.c */ - extern void init_caller_save PARAMS ((void)); - /* In profile.c */ extern void init_branch_prob PARAMS ((const char *)); extern void branch_prob PARAMS ((void)); --- 1990,1995 ---- *************** enum libcall_type *** 1959,1965 **** LCT_CONST_MAKE_BLOCK = 3, LCT_PURE_MAKE_BLOCK = 4, LCT_NORETURN = 5, ! LCT_THROW = 6 }; extern void emit_library_call PARAMS ((rtx, enum libcall_type, --- 2040,2048 ---- LCT_CONST_MAKE_BLOCK = 3, LCT_PURE_MAKE_BLOCK = 4, LCT_NORETURN = 5, ! LCT_THROW = 6, ! LCT_ALWAYS_RETURN = 7, ! LCT_RETURNS_TWICE = 8 }; extern void emit_library_call PARAMS ((rtx, enum libcall_type, *************** extern rtx emit_library_call_value PARAM *** 1973,1981 **** extern int set_dominates_use PARAMS ((int, int, int, rtx, rtx)); /* In varasm.c */ - extern void bss_section PARAMS ((void)); extern int in_data_section PARAMS ((void)); - extern int supports_one_only PARAMS ((void)); extern void init_varasm_once PARAMS ((void)); /* In rtl.c */ --- 2056,2062 ---- *************** extern void clear_reg_alias_info PARAMS *** 2007,2012 **** --- 2088,2096 ---- extern rtx canon_rtx PARAMS ((rtx)); extern int true_dependence PARAMS ((rtx, enum machine_mode, rtx, int (*)(rtx, int))); + extern rtx get_addr PARAMS ((rtx)); + extern int canon_true_dependence PARAMS ((rtx, enum machine_mode, rtx, + rtx, int (*)(rtx, int))); extern int read_dependence PARAMS ((rtx, rtx)); extern int anti_dependence PARAMS ((rtx, rtx)); extern int output_dependence PARAMS ((rtx, rtx)); *************** extern rtx stack_limit_rtx; *** 2035,2042 **** /* In regrename.c */ extern void regrename_optimize PARAMS ((void)); ! /* In condexec.c */ extern void if_convert PARAMS ((int)); ! #endif /* _RTL_H */ --- 2119,2130 ---- /* In regrename.c */ extern void regrename_optimize PARAMS ((void)); + extern void copyprop_hardreg_forward PARAMS ((void)); ! /* In ifcvt.c */ extern void if_convert PARAMS ((int)); ! /* In predict.c */ ! extern void invert_br_probabilities PARAMS ((rtx)); ! extern bool expensive_function_p PARAMS ((int)); ! #endif /* ! GCC_RTL_H */ diff -Nrc3pad gcc-3.0.4/gcc/rtlanal.c gcc-3.1/gcc/rtlanal.c *** gcc-3.0.4/gcc/rtlanal.c Wed Feb 13 19:22:47 2002 --- gcc-3.1/gcc/rtlanal.c Mon Apr 15 23:11:27 2002 *************** *** 1,23 **** /* Analyze RTL for C-Compiler Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" --- 1,23 ---- /* Analyze RTL for C-Compiler Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" *************** Boston, MA 02111-1307, USA. */ *** 25,36 **** #include "toplev.h" #include "rtl.h" #include "hard-reg-set.h" static void set_of_1 PARAMS ((rtx, rtx, void *)); static void insn_dependent_p_1 PARAMS ((rtx, rtx, void *)); - - /* Forward declarations */ static int computed_jump_p_1 PARAMS ((rtx)); /* Bit flags that specify the machine subtype we are compiling for. Bits are tested using macros TARGET_... defined in the tm.h file --- 25,37 ---- #include "toplev.h" #include "rtl.h" #include "hard-reg-set.h" + #include "tm_p.h" + /* Forward declarations */ static void set_of_1 PARAMS ((rtx, rtx, void *)); static void insn_dependent_p_1 PARAMS ((rtx, rtx, void *)); static int computed_jump_p_1 PARAMS ((rtx)); + static void parms_set PARAMS ((rtx, rtx, void *)); /* Bit flags that specify the machine subtype we are compiling for. Bits are tested using macros TARGET_... defined in the tm.h file *************** int *** 47,55 **** rtx_unstable_p (x) rtx x; { ! register RTX_CODE code = GET_CODE (x); ! register int i; ! register const char *fmt; switch (code) { --- 48,56 ---- rtx_unstable_p (x) rtx x; { ! RTX_CODE code = GET_CODE (x); ! int i; ! const char *fmt; switch (code) { *************** rtx_unstable_p (x) *** 59,67 **** --- 60,70 ---- case QUEUED: return 1; + case ADDRESSOF: case CONST: case CONST_INT: case CONST_DOUBLE: + case CONST_VECTOR: case SYMBOL_REF: case LABEL_REF: return 0; *************** rtx_varies_p (x, for_alias) *** 122,130 **** rtx x; int for_alias; { ! register RTX_CODE code = GET_CODE (x); ! register int i; ! register const char *fmt; switch (code) { --- 125,133 ---- rtx x; int for_alias; { ! RTX_CODE code = GET_CODE (x); ! int i; ! const char *fmt; switch (code) { *************** rtx_varies_p (x, for_alias) *** 137,142 **** --- 140,146 ---- case CONST: case CONST_INT: case CONST_DOUBLE: + case CONST_VECTOR: case SYMBOL_REF: case LABEL_REF: return 0; *************** rtx_varies_p (x, for_alias) *** 201,209 **** int rtx_addr_can_trap_p (x) ! register rtx x; { ! register enum rtx_code code = GET_CODE (x); switch (code) { --- 205,213 ---- int rtx_addr_can_trap_p (x) ! rtx x; { ! enum rtx_code code = GET_CODE (x); switch (code) { *************** rtx_addr_varies_p (x, for_alias) *** 268,276 **** rtx x; int for_alias; { ! register enum rtx_code code; ! register int i; ! register const char *fmt; if (x == 0) return 0; --- 272,280 ---- rtx x; int for_alias; { ! enum rtx_code code; ! int i; ! const char *fmt; if (x == 0) return 0; *************** rtx_addr_varies_p (x, for_alias) *** 299,305 **** /* Return the value of the integer term in X, if one is apparent; otherwise return 0. Only obvious integer terms are detected. ! This is used in cse.c with the `related_value' field.*/ HOST_WIDE_INT get_integer_term (x) --- 303,309 ---- /* Return the value of the integer term in X, if one is apparent; otherwise return 0. Only obvious integer terms are detected. ! This is used in cse.c with the `related_value' field. */ HOST_WIDE_INT get_integer_term (x) *************** get_related_value (x) *** 337,342 **** --- 341,486 ---- return 0; } + /* Given a tablejump insn INSN, return the RTL expression for the offset + into the jump table. If the offset cannot be determined, then return + NULL_RTX. + + If EARLIEST is non-zero, it is a pointer to a place where the earliest + insn used in locating the offset was found. */ + + rtx + get_jump_table_offset (insn, earliest) + rtx insn; + rtx *earliest; + { + rtx label; + rtx table; + rtx set; + rtx old_insn; + rtx x; + rtx old_x; + rtx y; + rtx old_y; + int i; + + if (GET_CODE (insn) != JUMP_INSN + || ! (label = JUMP_LABEL (insn)) + || ! (table = NEXT_INSN (label)) + || GET_CODE (table) != JUMP_INSN + || (GET_CODE (PATTERN (table)) != ADDR_VEC + && GET_CODE (PATTERN (table)) != ADDR_DIFF_VEC) + || ! (set = single_set (insn))) + return NULL_RTX; + + x = SET_SRC (set); + + /* Some targets (eg, ARM) emit a tablejump that also + contains the out-of-range target. */ + if (GET_CODE (x) == IF_THEN_ELSE + && GET_CODE (XEXP (x, 2)) == LABEL_REF) + x = XEXP (x, 1); + + /* Search backwards and locate the expression stored in X. */ + for (old_x = NULL_RTX; GET_CODE (x) == REG && x != old_x; + old_x = x, x = find_last_value (x, &insn, NULL_RTX, 0)) + ; + + /* If X is an expression using a relative address then strip + off the addition / subtraction of PC, PIC_OFFSET_TABLE_REGNUM, + or the jump table label. */ + if (GET_CODE (PATTERN (table)) == ADDR_DIFF_VEC + && (GET_CODE (x) == PLUS || GET_CODE (x) == MINUS)) + { + for (i = 0; i < 2; i++) + { + old_insn = insn; + y = XEXP (x, i); + + if (y == pc_rtx || y == pic_offset_table_rtx) + break; + + for (old_y = NULL_RTX; GET_CODE (y) == REG && y != old_y; + old_y = y, y = find_last_value (y, &old_insn, NULL_RTX, 0)) + ; + + if ((GET_CODE (y) == LABEL_REF && XEXP (y, 0) == label)) + break; + } + + if (i >= 2) + return NULL_RTX; + + x = XEXP (x, 1 - i); + + for (old_x = NULL_RTX; GET_CODE (x) == REG && x != old_x; + old_x = x, x = find_last_value (x, &insn, NULL_RTX, 0)) + ; + } + + /* Strip off any sign or zero extension. */ + if (GET_CODE (x) == SIGN_EXTEND || GET_CODE (x) == ZERO_EXTEND) + { + x = XEXP (x, 0); + + for (old_x = NULL_RTX; GET_CODE (x) == REG && x != old_x; + old_x = x, x = find_last_value (x, &insn, NULL_RTX, 0)) + ; + } + + /* If X isn't a MEM then this isn't a tablejump we understand. */ + if (GET_CODE (x) != MEM) + return NULL_RTX; + + /* Strip off the MEM. */ + x = XEXP (x, 0); + + for (old_x = NULL_RTX; GET_CODE (x) == REG && x != old_x; + old_x = x, x = find_last_value (x, &insn, NULL_RTX, 0)) + ; + + /* If X isn't a PLUS than this isn't a tablejump we understand. */ + if (GET_CODE (x) != PLUS) + return NULL_RTX; + + /* At this point we should have an expression representing the jump table + plus an offset. Examine each operand in order to determine which one + represents the jump table. Knowing that tells us that the other operand + must represent the offset. */ + for (i = 0; i < 2; i++) + { + old_insn = insn; + y = XEXP (x, i); + + for (old_y = NULL_RTX; GET_CODE (y) == REG && y != old_y; + old_y = y, y = find_last_value (y, &old_insn, NULL_RTX, 0)) + ; + + if ((GET_CODE (y) == CONST || GET_CODE (y) == LABEL_REF) + && reg_mentioned_p (label, y)) + break; + } + + if (i >= 2) + return NULL_RTX; + + x = XEXP (x, 1 - i); + + /* Strip off the addition / subtraction of PIC_OFFSET_TABLE_REGNUM. */ + if (GET_CODE (x) == PLUS || GET_CODE (x) == MINUS) + for (i = 0; i < 2; i++) + if (XEXP (x, i) == pic_offset_table_rtx) + { + x = XEXP (x, 1 - i); + break; + } + + if (earliest) + *earliest = insn; + + /* Return the RTL expression representing the offset. */ + return x; + } + /* Return the number of places FIND appears within X. If COUNT_DEST is zero, we do not count occurrences inside the destination of a SET. */ *************** count_occurrences (x, find, count_dest) *** 360,365 **** --- 504,510 ---- case REG: case CONST_INT: case CONST_DOUBLE: + case CONST_VECTOR: case SYMBOL_REF: case CODE_LABEL: case PC: *************** count_occurrences (x, find, count_dest) *** 406,416 **** int reg_mentioned_p (reg, in) ! register rtx reg, in; { ! register const char *fmt; ! register int i; ! register enum rtx_code code; if (in == 0) return 0; --- 551,561 ---- int reg_mentioned_p (reg, in) ! rtx reg, in; { ! const char *fmt; ! int i; ! enum rtx_code code; if (in == 0) return 0; *************** reg_mentioned_p (reg, in) *** 438,444 **** case CONST_INT: return GET_CODE (reg) == CONST_INT && INTVAL (in) == INTVAL (reg); ! case CONST_DOUBLE: /* These are kept unique for a given value. */ return 0; --- 583,590 ---- case CONST_INT: return GET_CODE (reg) == CONST_INT && INTVAL (in) == INTVAL (reg); ! ! case CONST_VECTOR: case CONST_DOUBLE: /* These are kept unique for a given value. */ return 0; *************** reg_mentioned_p (reg, in) *** 456,462 **** { if (fmt[i] == 'E') { ! register int j; for (j = XVECLEN (in, i) - 1; j >= 0; j--) if (reg_mentioned_p (reg, XVECEXP (in, i, j))) return 1; --- 602,608 ---- { if (fmt[i] == 'E') { ! int j; for (j = XVECLEN (in, i) - 1; j >= 0; j--) if (reg_mentioned_p (reg, XVECEXP (in, i, j))) return 1; *************** int *** 475,481 **** no_labels_between_p (beg, end) rtx beg, end; { ! register rtx p; for (p = NEXT_INSN (beg); p != end; p = NEXT_INSN (p)) if (GET_CODE (p) == CODE_LABEL) return 0; --- 621,629 ---- no_labels_between_p (beg, end) rtx beg, end; { ! rtx p; ! if (beg == end) ! return 0; for (p = NEXT_INSN (beg); p != end; p = NEXT_INSN (p)) if (GET_CODE (p) == CODE_LABEL) return 0; *************** int *** 489,495 **** no_jumps_between_p (beg, end) rtx beg, end; { ! register rtx p; for (p = NEXT_INSN (beg); p != end; p = NEXT_INSN (p)) if (GET_CODE (p) == JUMP_INSN) return 0; --- 637,643 ---- no_jumps_between_p (beg, end) rtx beg, end; { ! rtx p; for (p = NEXT_INSN (beg); p != end; p = NEXT_INSN (p)) if (GET_CODE (p) == JUMP_INSN) return 0; *************** int *** 503,509 **** reg_used_between_p (reg, from_insn, to_insn) rtx reg, from_insn, to_insn; { ! register rtx insn; if (from_insn == to_insn) return 0; --- 651,657 ---- reg_used_between_p (reg, from_insn, to_insn) rtx reg, from_insn, to_insn; { ! rtx insn; if (from_insn == to_insn) return 0; *************** reg_referenced_p (x, body) *** 565,570 **** --- 713,721 ---- case TRAP_IF: return reg_overlap_mentioned_p (x, TRAP_CONDITION (body)); + case PREFETCH: + return reg_overlap_mentioned_p (x, XEXP (body, 0)); + case UNSPEC: case UNSPEC_VOLATILE: for (i = XVECLEN (body, 0) - 1; i >= 0; i--) *************** int *** 602,608 **** reg_referenced_between_p (reg, from_insn, to_insn) rtx reg, from_insn, to_insn; { ! register rtx insn; if (from_insn == to_insn) return 0; --- 753,759 ---- reg_referenced_between_p (reg, from_insn, to_insn) rtx reg, from_insn, to_insn; { ! rtx insn; if (from_insn == to_insn) return 0; *************** int *** 623,629 **** reg_set_between_p (reg, from_insn, to_insn) rtx reg, from_insn, to_insn; { ! register rtx insn; if (from_insn == to_insn) return 0; --- 774,780 ---- reg_set_between_p (reg, from_insn, to_insn) rtx reg, from_insn, to_insn; { ! rtx insn; if (from_insn == to_insn) return 0; *************** regs_set_between_p (x, start, end) *** 682,687 **** --- 833,839 ---- { case CONST_INT: case CONST_DOUBLE: + case CONST_VECTOR: case CONST: case SYMBOL_REF: case LABEL_REF: *************** modified_between_p (x, start, end) *** 728,733 **** --- 880,886 ---- { case CONST_INT: case CONST_DOUBLE: + case CONST_VECTOR: case CONST: case SYMBOL_REF: case LABEL_REF: *************** modified_in_p (x, insn) *** 783,788 **** --- 936,942 ---- { case CONST_INT: case CONST_DOUBLE: + case CONST_VECTOR: case CONST: case SYMBOL_REF: case LABEL_REF: *************** set_of_1 (x, pat, data1) *** 880,886 **** } /* Give an INSN, return a SET or CLOBBER expression that does modify PAT ! (eighter directly or via STRICT_LOW_PART and similar modifiers). */ rtx set_of (pat, insn) rtx pat, insn; --- 1034,1040 ---- } /* Give an INSN, return a SET or CLOBBER expression that does modify PAT ! (either directly or via STRICT_LOW_PART and similar modifiers). */ rtx set_of (pat, insn) rtx pat, insn; *************** single_set_2 (insn, pat) *** 919,925 **** /* We can consider insns having multiple sets, where all but one are dead as single set insns. In common case only single set is present in the pattern so we want ! to avoid checking for REG_UNUSED notes unless neccesary. When we reach set first time, we just expect this is the single set we are looking for and only when more --- 1073,1079 ---- /* We can consider insns having multiple sets, where all but one are dead as single set insns. In common case only single set is present in the pattern so we want ! to avoid checking for REG_UNUSED notes unless necessary. When we reach set first time, we just expect this is the single set we are looking for and only when more *************** multiple_sets (insn) *** 979,984 **** --- 1133,1224 ---- return 0; } + /* Return nonzero if the destination of SET equals the source + and there are no side effects. */ + + int + set_noop_p (set) + rtx set; + { + rtx src = SET_SRC (set); + rtx dst = SET_DEST (set); + + if (side_effects_p (src) || side_effects_p (dst)) + return 0; + + if (GET_CODE (dst) == MEM && GET_CODE (src) == MEM) + return rtx_equal_p (dst, src); + + if (dst == pc_rtx && src == pc_rtx) + return 1; + + if (GET_CODE (dst) == SIGN_EXTRACT + || GET_CODE (dst) == ZERO_EXTRACT) + return rtx_equal_p (XEXP (dst, 0), src) + && ! BYTES_BIG_ENDIAN && XEXP (dst, 2) == const0_rtx; + + if (GET_CODE (dst) == STRICT_LOW_PART) + dst = XEXP (dst, 0); + + if (GET_CODE (src) == SUBREG && GET_CODE (dst) == SUBREG) + { + if (SUBREG_BYTE (src) != SUBREG_BYTE (dst)) + return 0; + src = SUBREG_REG (src); + dst = SUBREG_REG (dst); + } + + return (GET_CODE (src) == REG && GET_CODE (dst) == REG + && REGNO (src) == REGNO (dst)); + } + + /* Return nonzero if an insn consists only of SETs, each of which only sets a + value to itself. */ + + int + noop_move_p (insn) + rtx insn; + { + rtx pat = PATTERN (insn); + + if (INSN_CODE (insn) == NOOP_MOVE_INSN_CODE) + return 1; + + /* Insns carrying these notes are useful later on. */ + if (find_reg_note (insn, REG_EQUAL, NULL_RTX)) + return 0; + + /* For now treat an insn with a REG_RETVAL note as a + a special insn which should not be considered a no-op. */ + if (find_reg_note (insn, REG_RETVAL, NULL_RTX)) + return 0; + + if (GET_CODE (pat) == SET && set_noop_p (pat)) + return 1; + + if (GET_CODE (pat) == PARALLEL) + { + int i; + /* If nothing but SETs of registers to themselves, + this insn can also be deleted. */ + for (i = 0; i < XVECLEN (pat, 0); i++) + { + rtx tem = XVECEXP (pat, 0, i); + + if (GET_CODE (tem) == USE + || GET_CODE (tem) == CLOBBER) + continue; + + if (GET_CODE (tem) != SET || ! set_noop_p (tem)) + return 0; + } + + return 1; + } + return 0; + } + + /* Return the last thing that X was assigned from before *PINSN. If VALID_TO is not NULL_RTX then verify that the object is not modified up to VALID_TO. If the object was modified, if we hit a partial assignment to X, or hit a *************** refers_to_regno_p (regno, endregno, x, l *** 1082,1088 **** if (GET_CODE (SUBREG_REG (x)) == REG && REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER) { ! unsigned int inner_regno = REGNO (SUBREG_REG (x)) + SUBREG_WORD (x); unsigned int inner_endregno = inner_regno + (inner_regno < FIRST_PSEUDO_REGISTER ? HARD_REGNO_NREGS (regno, GET_MODE (x)) : 1); --- 1322,1328 ---- if (GET_CODE (SUBREG_REG (x)) == REG && REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER) { ! unsigned int inner_regno = subreg_regno (x); unsigned int inner_endregno = inner_regno + (inner_regno < FIRST_PSEUDO_REGISTER ? HARD_REGNO_NREGS (regno, GET_MODE (x)) : 1); *************** refers_to_regno_p (regno, endregno, x, l *** 1134,1140 **** } else if (fmt[i] == 'E') { ! register int j; for (j = XVECLEN (x, i) - 1; j >=0; j--) if (loc != &XVECEXP (x, i, j) && refers_to_regno_p (regno, endregno, XVECEXP (x, i, j), loc)) --- 1374,1380 ---- } else if (fmt[i] == 'E') { ! int j; for (j = XVECLEN (x, i) - 1; j >=0; j--) if (loc != &XVECEXP (x, i, j) && refers_to_regno_p (regno, endregno, XVECEXP (x, i, j), loc)) *************** reg_overlap_mentioned_p (x, in) *** 1169,1175 **** case SUBREG: regno = REGNO (SUBREG_REG (x)); if (regno < FIRST_PSEUDO_REGISTER) ! regno += SUBREG_WORD (x); goto do_reg; case REG: --- 1409,1415 ---- case SUBREG: regno = REGNO (SUBREG_REG (x)); if (regno < FIRST_PSEUDO_REGISTER) ! regno = subreg_regno (x); goto do_reg; case REG: *************** reg_overlap_mentioned_p (x, in) *** 1177,1183 **** do_reg: endregno = regno + (regno < FIRST_PSEUDO_REGISTER ? HARD_REGNO_NREGS (regno, GET_MODE (x)) : 1); ! return refers_to_regno_p (regno, endregno, in, NULL_PTR); case MEM: { --- 1417,1423 ---- do_reg: endregno = regno + (regno < FIRST_PSEUDO_REGISTER ? HARD_REGNO_NREGS (regno, GET_MODE (x)) : 1); ! return refers_to_regno_p (regno, endregno, in, (rtx*) 0); case MEM: { *************** reg_set_last (x, insn) *** 1280,1286 **** void note_stores (x, fun, data) ! register rtx x; void (*fun) PARAMS ((rtx, rtx, void *)); void *data; { --- 1520,1526 ---- void note_stores (x, fun, data) ! rtx x; void (*fun) PARAMS ((rtx, rtx, void *)); void *data; { *************** note_stores (x, fun, data) *** 1291,1297 **** if (GET_CODE (x) == SET || GET_CODE (x) == CLOBBER) { ! register rtx dest = SET_DEST (x); while ((GET_CODE (dest) == SUBREG && (GET_CODE (SUBREG_REG (dest)) != REG --- 1531,1537 ---- if (GET_CODE (x) == SET || GET_CODE (x) == CLOBBER) { ! rtx dest = SET_DEST (x); while ((GET_CODE (dest) == SUBREG && (GET_CODE (SUBREG_REG (dest)) != REG *************** note_stores (x, fun, data) *** 1302,1318 **** dest = XEXP (dest, 0); /* If we have a PARALLEL, SET_DEST is a list of EXPR_LIST expressions, ! each of whose first operand is a register. We can't know what ! precisely is being set in these cases, so make up a CLOBBER to pass ! to the function. */ if (GET_CODE (dest) == PARALLEL) { for (i = XVECLEN (dest, 0) - 1; i >= 0; i--) if (XEXP (XVECEXP (dest, 0, i), 0) != 0) ! (*fun) (XEXP (XVECEXP (dest, 0, i), 0), ! gen_rtx_CLOBBER (VOIDmode, ! XEXP (XVECEXP (dest, 0, i), 0)), ! data); } else (*fun) (dest, x, data); --- 1542,1553 ---- dest = XEXP (dest, 0); /* If we have a PARALLEL, SET_DEST is a list of EXPR_LIST expressions, ! each of whose first operand is a register. */ if (GET_CODE (dest) == PARALLEL) { for (i = XVECLEN (dest, 0) - 1; i >= 0; i--) if (XEXP (XVECEXP (dest, 0, i), 0) != 0) ! (*fun) (XEXP (XVECEXP (dest, 0, i), 0), x, data); } else (*fun) (dest, x, data); *************** note_stores (x, fun, data) *** 1323,1328 **** --- 1558,1650 ---- note_stores (XVECEXP (x, 0, i), fun, data); } + /* Like notes_stores, but call FUN for each expression that is being + referenced in PBODY, a pointer to the PATTERN of an insn. We only call + FUN for each expression, not any interior subexpressions. FUN receives a + pointer to the expression and the DATA passed to this function. + + Note that this is not quite the same test as that done in reg_referenced_p + since that considers something as being referenced if it is being + partially set, while we do not. */ + + void + note_uses (pbody, fun, data) + rtx *pbody; + void (*fun) PARAMS ((rtx *, void *)); + void *data; + { + rtx body = *pbody; + int i; + + switch (GET_CODE (body)) + { + case COND_EXEC: + (*fun) (&COND_EXEC_TEST (body), data); + note_uses (&COND_EXEC_CODE (body), fun, data); + return; + + case PARALLEL: + for (i = XVECLEN (body, 0) - 1; i >= 0; i--) + note_uses (&XVECEXP (body, 0, i), fun, data); + return; + + case USE: + (*fun) (&XEXP (body, 0), data); + return; + + case ASM_OPERANDS: + for (i = ASM_OPERANDS_INPUT_LENGTH (body) - 1; i >= 0; i--) + (*fun) (&ASM_OPERANDS_INPUT (body, i), data); + return; + + case TRAP_IF: + (*fun) (&TRAP_CONDITION (body), data); + return; + + case PREFETCH: + (*fun) (&XEXP (body, 0), data); + return; + + case UNSPEC: + case UNSPEC_VOLATILE: + for (i = XVECLEN (body, 0) - 1; i >= 0; i--) + (*fun) (&XVECEXP (body, 0, i), data); + return; + + case CLOBBER: + if (GET_CODE (XEXP (body, 0)) == MEM) + (*fun) (&XEXP (XEXP (body, 0), 0), data); + return; + + case SET: + { + rtx dest = SET_DEST (body); + + /* For sets we replace everything in source plus registers in memory + expression in store and operands of a ZERO_EXTRACT. */ + (*fun) (&SET_SRC (body), data); + + if (GET_CODE (dest) == ZERO_EXTRACT) + { + (*fun) (&XEXP (dest, 1), data); + (*fun) (&XEXP (dest, 2), data); + } + + while (GET_CODE (dest) == SUBREG || GET_CODE (dest) == STRICT_LOW_PART) + dest = XEXP (dest, 0); + + if (GET_CODE (dest) == MEM) + (*fun) (&XEXP (dest, 0), data); + } + return; + + default: + /* All the other possibilities never store. */ + (*fun) (pbody, data); + return; + } + } + /* Return nonzero if X's old contents don't survive after INSN. This will be true if X is (cc0) or if X is a register and X dies in INSN or because INSN entirely sets X. *************** dead_or_set_regno_p (insn, test_regno) *** 1415,1421 **** } else if (GET_CODE (pattern) == PARALLEL) { ! register int i; for (i = XVECLEN (pattern, 0) - 1; i >= 0; i--) { --- 1737,1743 ---- } else if (GET_CODE (pattern) == PARALLEL) { ! int i; for (i = XVECLEN (pattern, 0) - 1; i >= 0; i--) { *************** find_reg_note (insn, kind, datum) *** 1460,1466 **** enum reg_note kind; rtx datum; { ! register rtx link; /* Ignore anything that is not an INSN, JUMP_INSN or CALL_INSN. */ if (! INSN_P (insn)) --- 1782,1788 ---- enum reg_note kind; rtx datum; { ! rtx link; /* Ignore anything that is not an INSN, JUMP_INSN or CALL_INSN. */ if (! INSN_P (insn)) *************** find_regno_note (insn, kind, regno) *** 1484,1490 **** enum reg_note kind; unsigned int regno; { ! register rtx link; /* Ignore anything that is not an INSN, JUMP_INSN or CALL_INSN. */ if (! INSN_P (insn)) --- 1806,1812 ---- enum reg_note kind; unsigned int regno; { ! rtx link; /* Ignore anything that is not an INSN, JUMP_INSN or CALL_INSN. */ if (! INSN_P (insn)) *************** find_regno_note (insn, kind, regno) *** 1505,1510 **** --- 1827,1849 ---- return 0; } + /* Return a REG_EQUIV or REG_EQUAL note if insn has only a single set and + has such a note. */ + + rtx + find_reg_equal_equiv_note (insn) + rtx insn; + { + rtx note; + + if (single_set (insn) == 0) + return 0; + else if ((note = find_reg_note (insn, REG_EQUIV, NULL_RTX)) != 0) + return note; + else + return find_reg_note (insn, REG_EQUAL, NULL_RTX); + } + /* Return true if DATUM, or any overlap of DATUM, of kind CODE is found in the CALL_INSN_FUNCTION_USAGE information of INSN. */ *************** find_reg_fusage (insn, code, datum) *** 1520,1536 **** return 0; if (! datum) ! abort(); if (GET_CODE (datum) != REG) { ! register rtx link; for (link = CALL_INSN_FUNCTION_USAGE (insn); link; link = XEXP (link, 1)) if (GET_CODE (XEXP (link, 0)) == code ! && rtx_equal_p (datum, SET_DEST (XEXP (link, 0)))) return 1; } else --- 1859,1875 ---- return 0; if (! datum) ! abort (); if (GET_CODE (datum) != REG) { ! rtx link; for (link = CALL_INSN_FUNCTION_USAGE (insn); link; link = XEXP (link, 1)) if (GET_CODE (XEXP (link, 0)) == code ! && rtx_equal_p (datum, XEXP (XEXP (link, 0), 0))) return 1; } else *************** find_regno_fusage (insn, code, regno) *** 1564,1570 **** enum rtx_code code; unsigned int regno; { ! register rtx link; /* CALL_INSN_FUNCTION_USAGE information cannot contain references to pseudo registers, so don't bother checking. */ --- 1903,1909 ---- enum rtx_code code; unsigned int regno; { ! rtx link; /* CALL_INSN_FUNCTION_USAGE information cannot contain references to pseudo registers, so don't bother checking. */ *************** find_regno_fusage (insn, code, regno) *** 1587,1601 **** return 0; } /* Remove register note NOTE from the REG_NOTES of INSN. */ void remove_note (insn, note) ! register rtx insn; ! register rtx note; { ! register rtx link; if (note == NULL_RTX) return; --- 1926,1965 ---- return 0; } + + /* Return true if INSN is a call to a pure function. */ + + int + pure_call_p (insn) + rtx insn; + { + rtx link; + + if (GET_CODE (insn) != CALL_INSN || ! CONST_OR_PURE_CALL_P (insn)) + return 0; + + /* Look for the note that differentiates const and pure functions. */ + for (link = CALL_INSN_FUNCTION_USAGE (insn); link; link = XEXP (link, 1)) + { + rtx u, m; + + if (GET_CODE (u = XEXP (link, 0)) == USE + && GET_CODE (m = XEXP (u, 0)) == MEM && GET_MODE (m) == BLKmode + && GET_CODE (XEXP (m, 0)) == SCRATCH) + return 1; + } + + return 0; + } /* Remove register note NOTE from the REG_NOTES of INSN. */ void remove_note (insn, note) ! rtx insn; ! rtx note; { ! rtx link; if (note == NULL_RTX) return; *************** remove_note (insn, note) *** 1617,1622 **** --- 1981,2004 ---- } /* Search LISTP (an EXPR_LIST) for an entry whose first operand is NODE and + return 1 if it is found. A simple equality test is used to determine if + NODE matches. */ + + int + in_expr_list_p (listp, node) + rtx listp; + rtx node; + { + rtx x; + + for (x = listp; x; x = XEXP (x, 1)) + if (node == XEXP (x, 0)) + return 1; + + return 0; + } + + /* Search LISTP (an EXPR_LIST) for an entry whose first operand is NODE and remove that entry from the list if it is found. A simple equality test is used to determine if NODE matches. */ *************** int *** 1656,1662 **** volatile_insn_p (x) rtx x; { ! register RTX_CODE code; code = GET_CODE (x); switch (code) --- 2038,2044 ---- volatile_insn_p (x) rtx x; { ! RTX_CODE code; code = GET_CODE (x); switch (code) *************** volatile_insn_p (x) *** 1666,1671 **** --- 2048,2054 ---- case CONST_INT: case CONST: case CONST_DOUBLE: + case CONST_VECTOR: case CC0: case PC: case REG: *************** volatile_insn_p (x) *** 1693,1700 **** /* Recursively scan the operands of this expression. */ { ! register const char *fmt = GET_RTX_FORMAT (code); ! register int i; for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) { --- 2076,2083 ---- /* Recursively scan the operands of this expression. */ { ! const char *fmt = GET_RTX_FORMAT (code); ! int i; for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) { *************** volatile_insn_p (x) *** 1705,1711 **** } else if (fmt[i] == 'E') { ! register int j; for (j = 0; j < XVECLEN (x, i); j++) if (volatile_insn_p (XVECEXP (x, i, j))) return 1; --- 2088,2094 ---- } else if (fmt[i] == 'E') { ! int j; for (j = 0; j < XVECLEN (x, i); j++) if (volatile_insn_p (XVECEXP (x, i, j))) return 1; *************** int *** 1722,1728 **** volatile_refs_p (x) rtx x; { ! register RTX_CODE code; code = GET_CODE (x); switch (code) --- 2105,2111 ---- volatile_refs_p (x) rtx x; { ! RTX_CODE code; code = GET_CODE (x); switch (code) *************** volatile_refs_p (x) *** 1732,1737 **** --- 2115,2121 ---- case CONST_INT: case CONST: case CONST_DOUBLE: + case CONST_VECTOR: case CC0: case PC: case REG: *************** volatile_refs_p (x) *** 1759,1766 **** /* Recursively scan the operands of this expression. */ { ! register const char *fmt = GET_RTX_FORMAT (code); ! register int i; for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) { --- 2143,2150 ---- /* Recursively scan the operands of this expression. */ { ! const char *fmt = GET_RTX_FORMAT (code); ! int i; for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) { *************** volatile_refs_p (x) *** 1771,1777 **** } else if (fmt[i] == 'E') { ! register int j; for (j = 0; j < XVECLEN (x, i); j++) if (volatile_refs_p (XVECEXP (x, i, j))) return 1; --- 2155,2161 ---- } else if (fmt[i] == 'E') { ! int j; for (j = 0; j < XVECLEN (x, i); j++) if (volatile_refs_p (XVECEXP (x, i, j))) return 1; *************** int *** 1788,1794 **** side_effects_p (x) rtx x; { ! register RTX_CODE code; code = GET_CODE (x); switch (code) --- 2172,2178 ---- side_effects_p (x) rtx x; { ! RTX_CODE code; code = GET_CODE (x); switch (code) *************** side_effects_p (x) *** 1798,1803 **** --- 2182,2188 ---- case CONST_INT: case CONST: case CONST_DOUBLE: + case CONST_VECTOR: case CC0: case PC: case REG: *************** side_effects_p (x) *** 1836,1843 **** /* Recursively scan the operands of this expression. */ { ! register const char *fmt = GET_RTX_FORMAT (code); ! register int i; for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) { --- 2221,2228 ---- /* Recursively scan the operands of this expression. */ { ! const char *fmt = GET_RTX_FORMAT (code); ! int i; for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) { *************** side_effects_p (x) *** 1848,1854 **** } else if (fmt[i] == 'E') { ! register int j; for (j = 0; j < XVECLEN (x, i); j++) if (side_effects_p (XVECEXP (x, i, j))) return 1; --- 2233,2239 ---- } else if (fmt[i] == 'E') { ! int j; for (j = 0; j < XVECLEN (x, i); j++) if (side_effects_p (XVECEXP (x, i, j))) return 1; *************** may_trap_p (x) *** 1876,1881 **** --- 2261,2267 ---- /* Handle these cases quickly. */ case CONST_INT: case CONST_DOUBLE: + case CONST_VECTOR: case SYMBOL_REF: case LABEL_REF: case CONST: *************** may_trap_p (x) *** 1935,1940 **** --- 2321,2331 ---- return 1; break; + case NEG: + case ABS: + /* These operations don't trap even with floating point. */ + break; + default: /* Any floating arithmetic may trap. */ if (GET_MODE_CLASS (GET_MODE (x)) == MODE_FLOAT) *************** may_trap_p (x) *** 1951,1957 **** } else if (fmt[i] == 'E') { ! register int j; for (j = 0; j < XVECLEN (x, i); j++) if (may_trap_p (XVECEXP (x, i, j))) return 1; --- 2342,2348 ---- } else if (fmt[i] == 'E') { ! int j; for (j = 0; j < XVECLEN (x, i); j++) if (may_trap_p (XVECEXP (x, i, j))) return 1; *************** int *** 1967,1975 **** inequality_comparisons_p (x) rtx x; { ! register const char *fmt; ! register int len, i; ! register enum rtx_code code = GET_CODE (x); switch (code) { --- 2358,2366 ---- inequality_comparisons_p (x) rtx x; { ! const char *fmt; ! int len, i; ! enum rtx_code code = GET_CODE (x); switch (code) { *************** inequality_comparisons_p (x) *** 1979,1984 **** --- 2370,2376 ---- case CC0: case CONST_INT: case CONST_DOUBLE: + case CONST_VECTOR: case CONST: case LABEL_REF: case SYMBOL_REF: *************** inequality_comparisons_p (x) *** 2010,2016 **** } else if (fmt[i] == 'E') { ! register int j; for (j = XVECLEN (x, i) - 1; j >= 0; j--) if (inequality_comparisons_p (XVECEXP (x, i, j))) return 1; --- 2402,2408 ---- } else if (fmt[i] == 'E') { ! int j; for (j = XVECLEN (x, i) - 1; j >= 0; j--) if (inequality_comparisons_p (XVECEXP (x, i, j))) return 1; *************** rtx *** 2030,2040 **** replace_rtx (x, from, to) rtx x, from, to; { ! register int i, j; ! register const char *fmt; /* The following prevents loops occurrence when we change MEM in ! CONST_DOUBLE onto the same CONST_DOUBLE. */ if (x != 0 && GET_CODE (x) == CONST_DOUBLE) return x; --- 2422,2432 ---- replace_rtx (x, from, to) rtx x, from, to; { ! int i, j; ! const char *fmt; /* The following prevents loops occurrence when we change MEM in ! CONST_DOUBLE onto the same CONST_DOUBLE. */ if (x != 0 && GET_CODE (x) == CONST_DOUBLE) return x; *************** replace_rtx (x, from, to) *** 2045,2050 **** --- 2437,2476 ---- if (x == 0) return 0; + if (GET_CODE (x) == SUBREG) + { + rtx new = replace_rtx (SUBREG_REG (x), from, to); + + if (GET_CODE (new) == CONST_INT) + { + x = simplify_subreg (GET_MODE (x), new, + GET_MODE (SUBREG_REG (x)), + SUBREG_BYTE (x)); + if (! x) + abort (); + } + else + SUBREG_REG (x) = new; + + return x; + } + else if (GET_CODE (x) == ZERO_EXTEND) + { + rtx new = replace_rtx (XEXP (x, 0), from, to); + + if (GET_CODE (new) == CONST_INT) + { + x = simplify_unary_operation (ZERO_EXTEND, GET_MODE (x), + new, GET_MODE (XEXP (x, 0))); + if (! x) + abort (); + } + else + XEXP (x, 0) = new; + + return x; + } + fmt = GET_RTX_FORMAT (GET_CODE (x)); for (i = GET_RTX_LENGTH (GET_CODE (x)) - 1; i >= 0; i--) { *************** replace_regs (x, reg_map, nregs, replace *** 2077,2085 **** unsigned int nregs; int replace_dest; { ! register enum rtx_code code; ! register int i; ! register const char *fmt; if (x == 0) return x; --- 2503,2511 ---- unsigned int nregs; int replace_dest; { ! enum rtx_code code; ! int i; ! const char *fmt; if (x == 0) return x; *************** replace_regs (x, reg_map, nregs, replace *** 2092,2097 **** --- 2518,2524 ---- case CC0: case CONST_INT: case CONST_DOUBLE: + case CONST_VECTOR: case CONST: case SYMBOL_REF: case LABEL_REF: *************** replace_regs (x, reg_map, nregs, replace *** 2117,2142 **** && GET_CODE (reg_map[REGNO (SUBREG_REG (x))]) == SUBREG) { rtx map_val = reg_map[REGNO (SUBREG_REG (x))]; ! rtx map_inner = SUBREG_REG (map_val); ! ! if (GET_MODE (x) == GET_MODE (map_inner)) ! return map_inner; ! else ! { ! /* We cannot call gen_rtx here since we may be linked with ! genattrtab.c. */ ! /* Let's try clobbering the incoming SUBREG and see ! if this is really safe. */ ! SUBREG_REG (x) = map_inner; ! SUBREG_WORD (x) += SUBREG_WORD (map_val); ! return x; ! #if 0 ! rtx new = rtx_alloc (SUBREG); ! PUT_MODE (new, GET_MODE (x)); ! SUBREG_REG (new) = map_inner; ! SUBREG_WORD (new) = SUBREG_WORD (x) + SUBREG_WORD (map_val); ! #endif ! } } break; --- 2544,2552 ---- && GET_CODE (reg_map[REGNO (SUBREG_REG (x))]) == SUBREG) { rtx map_val = reg_map[REGNO (SUBREG_REG (x))]; ! return simplify_gen_subreg (GET_MODE (x), map_val, ! GET_MODE (SUBREG_REG (x)), ! SUBREG_BYTE (x)); } break; *************** replace_regs (x, reg_map, nregs, replace *** 2169,2175 **** XEXP (x, i) = replace_regs (XEXP (x, i), reg_map, nregs, replace_dest); else if (fmt[i] == 'E') { ! register int j; for (j = 0; j < XVECLEN (x, i); j++) XVECEXP (x, i, j) = replace_regs (XVECEXP (x, i, j), reg_map, nregs, replace_dest); --- 2579,2585 ---- XEXP (x, i) = replace_regs (XEXP (x, i), reg_map, nregs, replace_dest); else if (fmt[i] == 'E') { ! int j; for (j = 0; j < XVECLEN (x, i); j++) XVECEXP (x, i, j) = replace_regs (XVECEXP (x, i, j), reg_map, nregs, replace_dest); *************** computed_jump_p_1 (x) *** 2199,2204 **** --- 2609,2615 ---- case CONST: case CONST_INT: case CONST_DOUBLE: + case CONST_VECTOR: case SYMBOL_REF: case REG: return 1; *************** for_each_rtx (x, f, data) *** 2294,2304 **** { int result; int length; ! const char* format; int i; /* Call F on X. */ ! result = (*f)(x, data); if (result == -1) /* Do not traverse sub-expressions. */ return 0; --- 2705,2715 ---- { int result; int length; ! const char *format; int i; /* Call F on X. */ ! result = (*f) (x, data); if (result == -1) /* Do not traverse sub-expressions. */ return 0; *************** regno_use_in (regno, x) *** 2355,2361 **** unsigned int regno; rtx x; { ! register const char *fmt; int i, j; rtx tem; --- 2766,2772 ---- unsigned int regno; rtx x; { ! const char *fmt; int i, j; rtx tem; *************** regno_use_in (regno, x) *** 2379,2384 **** --- 2790,2843 ---- return NULL_RTX; } + /* Return a value indicating whether OP, an operand of a commutative + operation, is preferred as the first or second operand. The higher + the value, the stronger the preference for being the first operand. + We use negative values to indicate a preference for the first operand + and positive values for the second operand. */ + + int + commutative_operand_precedence (op) + rtx op; + { + /* Constants always come the second operand. Prefer "nice" constants. */ + if (GET_CODE (op) == CONST_INT) + return -5; + if (GET_CODE (op) == CONST_DOUBLE) + return -4; + if (CONSTANT_P (op)) + return -3; + + /* SUBREGs of objects should come second. */ + if (GET_CODE (op) == SUBREG + && GET_RTX_CLASS (GET_CODE (SUBREG_REG (op))) == 'o') + return -2; + + /* If only one operand is a `neg', `not', + `mult', `plus', or `minus' expression, it will be the first + operand. */ + if (GET_CODE (op) == NEG || GET_CODE (op) == NOT + || GET_CODE (op) == MULT || GET_CODE (op) == PLUS + || GET_CODE (op) == MINUS) + return 2; + + /* Complex expressions should be the first, so decrease priority + of objects. */ + if (GET_RTX_CLASS (GET_CODE (op)) == 'o') + return -1; + return 0; + } + + /* Return 1 iff it is necessary to swap operands of commutative operation + in order to canonicalize expression. */ + + int + swap_commutative_operands_p (x, y) + rtx x, y; + { + return (commutative_operand_precedence (x) + < commutative_operand_precedence (y)); + } /* Return 1 if X is an autoincrement side effect and the register is not the stack pointer. */ *************** loc_mentioned_in_p (loc, in) *** 2508,2513 **** --- 2967,3066 ---- return 0; } + /* Given a subreg X, return the bit offset where the subreg begins + (counting from the least significant bit of the reg). */ + + unsigned int + subreg_lsb (x) + rtx x; + { + enum machine_mode inner_mode = GET_MODE (SUBREG_REG (x)); + enum machine_mode mode = GET_MODE (x); + unsigned int bitpos; + unsigned int byte; + unsigned int word; + + /* A paradoxical subreg begins at bit position 0. */ + if (GET_MODE_BITSIZE (mode) > GET_MODE_BITSIZE (inner_mode)) + return 0; + + if (WORDS_BIG_ENDIAN != BYTES_BIG_ENDIAN) + /* If the subreg crosses a word boundary ensure that + it also begins and ends on a word boundary. */ + if ((SUBREG_BYTE (x) % UNITS_PER_WORD + + GET_MODE_SIZE (mode)) > UNITS_PER_WORD + && (SUBREG_BYTE (x) % UNITS_PER_WORD + || GET_MODE_SIZE (mode) % UNITS_PER_WORD)) + abort (); + + if (WORDS_BIG_ENDIAN) + word = (GET_MODE_SIZE (inner_mode) + - (SUBREG_BYTE (x) + GET_MODE_SIZE (mode))) / UNITS_PER_WORD; + else + word = SUBREG_BYTE (x) / UNITS_PER_WORD; + bitpos = word * BITS_PER_WORD; + + if (BYTES_BIG_ENDIAN) + byte = (GET_MODE_SIZE (inner_mode) + - (SUBREG_BYTE (x) + GET_MODE_SIZE (mode))) % UNITS_PER_WORD; + else + byte = SUBREG_BYTE (x) % UNITS_PER_WORD; + bitpos += byte * BITS_PER_UNIT; + + return bitpos; + } + + /* This function returns the regno offset of a subreg expression. + xregno - A regno of an inner hard subreg_reg (or what will become one). + xmode - The mode of xregno. + offset - The byte offset. + ymode - The mode of a top level SUBREG (or what may become one). + RETURN - The regno offset which would be used. */ + unsigned int + subreg_regno_offset (xregno, xmode, offset, ymode) + unsigned int xregno; + enum machine_mode xmode; + unsigned int offset; + enum machine_mode ymode; + { + int nregs_xmode, nregs_ymode; + int mode_multiple, nregs_multiple; + int y_offset; + + if (xregno >= FIRST_PSEUDO_REGISTER) + abort (); + + nregs_xmode = HARD_REGNO_NREGS (xregno, xmode); + nregs_ymode = HARD_REGNO_NREGS (xregno, ymode); + if (offset == 0 || nregs_xmode == nregs_ymode) + return 0; + + /* size of ymode must not be greater than the size of xmode. */ + mode_multiple = GET_MODE_SIZE (xmode) / GET_MODE_SIZE (ymode); + if (mode_multiple == 0) + abort (); + + y_offset = offset / GET_MODE_SIZE (ymode); + nregs_multiple = nregs_xmode / nregs_ymode; + return (y_offset / (mode_multiple / nregs_multiple)) * nregs_ymode; + } + + /* Return the final regno that a subreg expression refers to. */ + unsigned int + subreg_regno (x) + rtx x; + { + unsigned int ret; + rtx subreg = SUBREG_REG (x); + int regno = REGNO (subreg); + + ret = regno + subreg_regno_offset (regno, + GET_MODE (subreg), + SUBREG_BYTE (x), + GET_MODE (x)); + return ret; + + } struct parms_set_data { int nregs; *************** find_first_parameter_load (call_insn, bo *** 2572,2578 **** /* Our caller needs either ensure that we will find all sets (in case code has not been optimized yet), or take care ! for possible labels in a way by setting boundary to preceeding CODE_LABEL. */ if (GET_CODE (before) == CODE_LABEL) { --- 3125,3131 ---- /* Our caller needs either ensure that we will find all sets (in case code has not been optimized yet), or take care ! for possible labels in a way by setting boundary to preceding CODE_LABEL. */ if (GET_CODE (before) == CODE_LABEL) { diff -Nrc3pad gcc-3.0.4/gcc/sbitmap.c gcc-3.1/gcc/sbitmap.c *** gcc-3.0.4/gcc/sbitmap.c Tue Nov 7 22:49:54 2000 --- gcc-3.1/gcc/sbitmap.c Wed Aug 22 14:35:38 2001 *************** *** 1,22 **** /* Simple bitmaps. Copyright (C) 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" #include "system.h" --- 1,22 ---- /* Simple bitmaps. Copyright (C) 1999, 2000 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" #include "system.h" *************** void *** 96,105 **** sbitmap_copy (dst, src) sbitmap dst, src; { ! bcopy ((PTR) src->elms, (PTR) dst->elms, ! sizeof (SBITMAP_ELT_TYPE) * dst->size); } /* Zero all elements in a bitmap. */ void --- 96,111 ---- sbitmap_copy (dst, src) sbitmap dst, src; { ! memcpy (dst->elms, src->elms, sizeof (SBITMAP_ELT_TYPE) * dst->size); } + /* Determine if a == b. */ + int + sbitmap_equal (a, b) + sbitmap a, b; + { + return !memcmp (a->elms, b->elms, sizeof (SBITMAP_ELT_TYPE) * a->size); + } /* Zero all elements in a bitmap. */ void *************** sbitmap_a_and_b (dst, a, b) *** 231,236 **** --- 237,267 ---- return changed; } + /* Set DST to be (A xor B)). + Return non-zero if any change is made. */ + + int + sbitmap_a_xor_b (dst, a, b) + sbitmap dst, a, b; + { + unsigned int i; + sbitmap_ptr dstp, ap, bp; + int changed = 0; + + for (dstp = dst->elms, ap = a->elms, bp = b->elms, i = 0; i < dst->size; + i++, dstp++) + { + SBITMAP_ELT_TYPE tmp = *ap++ ^ *bp++; + + if (*dstp != tmp) + { + changed = 1; + *dstp = tmp; + } + } + return changed; + } + /* Set DST to be (A or B)). Return non-zero if any change is made. */ *************** sbitmap_a_and_b_or_c (dst, a, b, c) *** 325,330 **** --- 356,362 ---- return changed; } + #ifdef IN_GCC /* Set the bitmap DST to the intersection of SRC of successors of block number BB, using the new flow graph structures. */ *************** sbitmap_union_of_preds (dst, src, bb) *** 484,489 **** --- 516,522 ---- *r++ |= *p++; } } + #endif /* Return number of first bit set in the bitmap, -1 if none. */ diff -Nrc3pad gcc-3.0.4/gcc/sbitmap.h gcc-3.1/gcc/sbitmap.h *** gcc-3.0.4/gcc/sbitmap.h Thu May 4 17:58:40 2000 --- gcc-3.1/gcc/sbitmap.h Tue Jan 22 14:33:33 2002 *************** *** 1,25 **** /* Simple bitmaps. ! Copyright (C) 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ ! #ifndef _SBITMAP_H ! #define _SBITMAP_H 1 /* It's not clear yet whether using bitmap.[ch] will be a win. It should be straightforward to convert so for now we keep things simple --- 1,25 ---- /* Simple bitmaps. ! Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ ! #ifndef GCC_SBITMAP_H ! #define GCC_SBITMAP_H /* It's not clear yet whether using bitmap.[ch] will be a win. It should be straightforward to convert so for now we keep things simple *************** do { \ *** 71,77 **** if (word_ != 0) \ for (; bit_num_ < SBITMAP_ELT_BITS; bit_num_++) \ { \ ! SBITMAP_ELT_TYPE _mask = (SBITMAP_ELT_TYPE)1 << bit_num_; \ \ if ((word_ & _mask) != 0) \ { \ --- 71,77 ---- if (word_ != 0) \ for (; bit_num_ < SBITMAP_ELT_BITS; bit_num_++) \ { \ ! SBITMAP_ELT_TYPE _mask = (SBITMAP_ELT_TYPE) 1 << bit_num_; \ \ if ((word_ & _mask) != 0) \ { \ *************** extern void dump_sbitmap_vector PARAMS *** 97,102 **** --- 97,103 ---- extern sbitmap sbitmap_alloc PARAMS ((unsigned int)); extern sbitmap *sbitmap_vector_alloc PARAMS ((unsigned int, unsigned int)); extern void sbitmap_copy PARAMS ((sbitmap, sbitmap)); + extern int sbitmap_equal PARAMS ((sbitmap, sbitmap)); extern void sbitmap_zero PARAMS ((sbitmap)); extern void sbitmap_ones PARAMS ((sbitmap)); extern void sbitmap_vector_zero PARAMS ((sbitmap *, unsigned int)); *************** extern int sbitmap_a_and_b_or_c PARAMS *** 112,117 **** --- 113,119 ---- sbitmap)); extern int sbitmap_a_and_b PARAMS ((sbitmap, sbitmap, sbitmap)); extern int sbitmap_a_or_b PARAMS ((sbitmap, sbitmap, sbitmap)); + extern int sbitmap_a_xor_b PARAMS ((sbitmap, sbitmap, sbitmap)); extern int sbitmap_a_subset_b_p PARAMS ((sbitmap, sbitmap)); extern int sbitmap_first_set_bit PARAMS ((sbitmap)); *************** extern void sbitmap_union_of_succs PA *** 136,139 **** extern void sbitmap_union_of_preds PARAMS ((sbitmap, sbitmap *, int)); extern void debug_sbitmap PARAMS ((sbitmap)); ! #endif /* _SBITMAP_H */ --- 138,141 ---- extern void sbitmap_union_of_preds PARAMS ((sbitmap, sbitmap *, int)); extern void debug_sbitmap PARAMS ((sbitmap)); ! #endif /* ! GCC_SBITMAP_H */ diff -Nrc3pad gcc-3.0.4/gcc/scan-decls.c gcc-3.1/gcc/scan-decls.c *** gcc-3.0.4/gcc/scan-decls.c Sat Jan 13 01:07:32 2001 --- gcc-3.1/gcc/scan-decls.c Mon Sep 24 22:53:06 2001 *************** Foundation, 59 Temple Place - Suite 330, *** 24,29 **** --- 24,30 ---- #include "scan.h" static void skip_to_closing_brace PARAMS ((cpp_reader *)); + static const cpp_token *get_a_token PARAMS ((cpp_reader *)); int brace_nesting = 0; *************** char extern_C_braces[20]; *** 38,43 **** --- 39,57 ---- prefixed by extern "C". */ int current_extern_C = 0; + /* Get a token but skip padding. */ + static const cpp_token * + get_a_token (pfile) + cpp_reader *pfile; + { + for (;;) + { + const cpp_token *result = cpp_get_token (pfile); + if (result->type != CPP_PADDING) + return result; + } + } + static void skip_to_closing_brace (pfile) cpp_reader *pfile; *************** skip_to_closing_brace (pfile) *** 45,55 **** int nesting = 1; for (;;) { ! cpp_token tok; ! enum cpp_ttype token; - cpp_get_token (pfile, &tok); - token = tok.type; if (token == CPP_EOF) break; if (token == CPP_OPEN_BRACE) --- 59,66 ---- int nesting = 1; for (;;) { ! enum cpp_ttype token = get_a_token (pfile)->type; if (token == CPP_EOF) break; if (token == CPP_OPEN_BRACE) *************** scan_decls (pfile, argc, argv) *** 88,103 **** char **argv ATTRIBUTE_UNUSED; { int saw_extern, saw_inline; ! cpp_token token, prev_id; new_statement: ! cpp_get_token (pfile, &token); handle_statement: current_extern_C = 0; saw_extern = 0; saw_inline = 0; ! if (token.type == CPP_OPEN_BRACE) { /* Pop an 'extern "C"' nesting level, if appropriate. */ if (extern_C_braces_length --- 99,115 ---- char **argv ATTRIBUTE_UNUSED; { int saw_extern, saw_inline; ! cpp_token prev_id; ! const cpp_token *token; new_statement: ! token = get_a_token (pfile); handle_statement: current_extern_C = 0; saw_extern = 0; saw_inline = 0; ! if (token->type == CPP_OPEN_BRACE) { /* Pop an 'extern "C"' nesting level, if appropriate. */ if (extern_C_braces_length *************** scan_decls (pfile, argc, argv) *** 106,132 **** brace_nesting--; goto new_statement; } ! if (token.type == CPP_OPEN_BRACE) { brace_nesting++; goto new_statement; } - if (token.type == CPP_EOF) - { - if (cpp_pop_buffer (pfile) == 0) - return 0; ! goto new_statement; ! } ! if (token.type == CPP_SEMICOLON) goto new_statement; ! if (token.type != CPP_NAME) goto new_statement; prev_id.type = CPP_EOF; for (;;) { ! switch (token.type) { default: goto handle_statement; --- 118,141 ---- brace_nesting--; goto new_statement; } ! if (token->type == CPP_OPEN_BRACE) { brace_nesting++; goto new_statement; } ! if (token->type == CPP_EOF) ! return 0; ! ! if (token->type == CPP_SEMICOLON) goto new_statement; ! if (token->type != CPP_NAME) goto new_statement; prev_id.type = CPP_EOF; for (;;) { ! switch (token->type) { default: goto handle_statement; *************** scan_decls (pfile, argc, argv) *** 141,156 **** { recognized_extern (&prev_id); } ! if (token.type == CPP_COMMA) break; /* ... fall through ... */ case CPP_OPEN_BRACE: case CPP_CLOSE_BRACE: goto new_statement; case CPP_EOF: ! if (cpp_pop_buffer (pfile) == 0) ! return 0; ! break; case CPP_OPEN_PAREN: /* Looks like this is the start of a formal parameter list. */ --- 150,163 ---- { recognized_extern (&prev_id); } ! if (token->type == CPP_COMMA) break; /* ... fall through ... */ case CPP_OPEN_BRACE: case CPP_CLOSE_BRACE: goto new_statement; case CPP_EOF: ! return 0; case CPP_OPEN_PAREN: /* Looks like this is the start of a formal parameter list. */ *************** scan_decls (pfile, argc, argv) *** 160,213 **** int have_arg_list = 0; for (;;) { ! cpp_get_token (pfile, &token); ! if (token.type == CPP_OPEN_PAREN) nesting++; ! else if (token.type == CPP_CLOSE_PAREN) { nesting--; if (nesting == 0) break; } ! else if (token.type == CPP_EOF) break; ! else if (token.type == CPP_NAME ! || token.type == CPP_ELLIPSIS) have_arg_list = 1; } ! recognized_function (&prev_id, ! cpp_get_line (pfile)->line, (saw_inline ? 'I' : in_extern_C_brace || current_extern_C ? 'F' : 'f'), have_arg_list); ! cpp_get_token (pfile, &token); ! if (token.type == CPP_OPEN_BRACE) { /* skip body of (normally) inline function */ skip_to_closing_brace (pfile); goto new_statement; } ! if (token.type == CPP_SEMICOLON) ! goto new_statement; } break; case CPP_NAME: /* "inline" and "extern" are recognized but skipped */ ! if (cpp_ideq (&token, "inline")) { saw_inline = 1; } ! else if (cpp_ideq (&token, "extern")) { saw_extern = 1; ! cpp_get_token (pfile, &token); ! if (token.type == CPP_STRING ! && token.val.str.len == 1 ! && token.val.str.text[0] == 'C') { current_extern_C = 1; ! cpp_get_token (pfile, &token); ! if (token.type == CPP_OPEN_BRACE) { brace_nesting++; extern_C_braces[extern_C_braces_length++] --- 167,223 ---- int have_arg_list = 0; for (;;) { ! token = get_a_token (pfile); ! if (token->type == CPP_OPEN_PAREN) nesting++; ! else if (token->type == CPP_CLOSE_PAREN) { nesting--; if (nesting == 0) break; } ! else if (token->type == CPP_EOF) break; ! else if (token->type == CPP_NAME ! || token->type == CPP_ELLIPSIS) have_arg_list = 1; } ! recognized_function (&prev_id, token->line, (saw_inline ? 'I' : in_extern_C_brace || current_extern_C ? 'F' : 'f'), have_arg_list); ! token = get_a_token (pfile); ! if (token->type == CPP_OPEN_BRACE) { /* skip body of (normally) inline function */ skip_to_closing_brace (pfile); goto new_statement; } ! ! /* skip a possible __attribute__ or throw expression after the ! parameter list */ ! while (token->type != CPP_SEMICOLON && token->type != CPP_EOF) ! token = get_a_token (pfile); ! goto new_statement; } break; case CPP_NAME: /* "inline" and "extern" are recognized but skipped */ ! if (cpp_ideq (token, "inline")) { saw_inline = 1; } ! else if (cpp_ideq (token, "extern")) { saw_extern = 1; ! token = get_a_token (pfile); ! if (token->type == CPP_STRING ! && token->val.str.len == 1 ! && token->val.str.text[0] == 'C') { current_extern_C = 1; ! token = get_a_token (pfile); ! if (token->type == CPP_OPEN_BRACE) { brace_nesting++; extern_C_braces[extern_C_braces_length++] *************** scan_decls (pfile, argc, argv) *** 220,228 **** break; } /* This may be the name of a variable or function. */ ! prev_id = token; break; } ! cpp_get_token (pfile, &token); } } --- 230,238 ---- break; } /* This may be the name of a variable or function. */ ! prev_id = *token; break; } ! token = get_a_token (pfile); } } diff -Nrc3pad gcc-3.0.4/gcc/scan.c gcc-3.1/gcc/scan.c *** gcc-3.0.4/gcc/scan.c Tue Feb 8 21:27:02 2000 --- gcc-3.1/gcc/scan.c Tue Jan 22 14:33:33 2002 *************** *** 1,5 **** /* Utility functions for scan-decls and fix-header programs. ! Copyright (C) 1993, 1994, 1998 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 --- 1,5 ---- /* Utility functions for scan-decls and fix-header programs. ! Copyright (C) 1993, 1994, 1998, 2002 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 *************** sstring_append (dst, src) *** 45,53 **** sstring *dst; sstring *src; { ! register char *d, *s; ! register int count = SSTRING_LENGTH(src); ! MAKE_SSTRING_SPACE(dst, count + 1); d = dst->ptr; s = src->base; while (--count >= 0) *d++ = *s++; --- 45,54 ---- sstring *dst; sstring *src; { ! char *d, *s; ! int count = SSTRING_LENGTH (src); ! ! MAKE_SSTRING_SPACE (dst, count + 1); d = dst->ptr; s = src->base; while (--count >= 0) *d++ = *s++; *************** sstring_append (dst, src) *** 57,89 **** int scan_ident (fp, s, c) ! register FILE *fp; ! register sstring *s; int c; { s->ptr = s->base; ! if (ISALPHA(c) || c == '_') { for (;;) { ! SSTRING_PUT(s, c); c = getc (fp); ! if (c == EOF || !(ISALNUM(c) || c == '_')) break; } } ! MAKE_SSTRING_SPACE(s, 1); *s->ptr = 0; return c; } int scan_string (fp, s, init) ! register FILE *fp; ! register sstring *s; int init; { int c; for (;;) { c = getc (fp); --- 58,91 ---- int scan_ident (fp, s, c) ! FILE *fp; ! sstring *s; int c; { s->ptr = s->base; ! if (ISIDST (c)) { for (;;) { ! SSTRING_PUT (s, c); c = getc (fp); ! if (c == EOF || ! ISIDNUM (c)) break; } } ! MAKE_SSTRING_SPACE (s, 1); *s->ptr = 0; return c; } int scan_string (fp, s, init) ! FILE *fp; ! sstring *s; int init; { int c; + for (;;) { c = getc (fp); *************** scan_string (fp, s, init) *** 102,110 **** if (c == '\n') continue; } ! SSTRING_PUT(s, c); } ! MAKE_SSTRING_SPACE(s, 1); *s->ptr = 0; return c; } --- 104,112 ---- if (c == '\n') continue; } ! SSTRING_PUT (s, c); } ! MAKE_SSTRING_SPACE (s, 1); *s->ptr = 0; return c; } *************** scan_string (fp, s, init) *** 113,119 **** int skip_spaces (fp, c) ! register FILE *fp; int c; { for (;;) --- 115,121 ---- int skip_spaces (fp, c) ! FILE *fp; int c; { for (;;) *************** read_upto (fp, str, delim) *** 156,179 **** int delim; { int ch; for (;;) { ch = getc (fp); if (ch == EOF || ch == delim) break; ! SSTRING_PUT(str, ch); } ! MAKE_SSTRING_SPACE(str, 1); *str->ptr = 0; return ch; } int get_token (fp, s) ! register FILE *fp; ! register sstring *s; { int c; s->ptr = s->base; retry: c = ' '; --- 158,183 ---- int delim; { int ch; + for (;;) { ch = getc (fp); if (ch == EOF || ch == delim) break; ! SSTRING_PUT (str, ch); } ! MAKE_SSTRING_SPACE (str, 1); *str->ptr = 0; return ch; } int get_token (fp, s) ! FILE *fp; ! sstring *s; { int c; + s->ptr = s->base; retry: c = ' '; *************** get_token (fp, s) *** 211,224 **** { do { ! SSTRING_PUT(s, c); c = getc (fp); ! } while (c != EOF && ISDIGIT(c)); ungetc (c, fp); c = INT_TOKEN; goto done; } ! if (ISALPHA (c) || c == '_') { c = scan_ident (fp, s, c); ungetc (c, fp); --- 215,228 ---- { do { ! SSTRING_PUT (s, c); c = getc (fp); ! } while (c != EOF && ISDIGIT (c)); ungetc (c, fp); c = INT_TOKEN; goto done; } ! if (ISIDST (c)) { c = scan_ident (fp, s, c); ungetc (c, fp); *************** get_token (fp, s) *** 230,238 **** ungetc (c, fp); return c == '\'' ? CHAR_TOKEN : STRING_TOKEN; } ! SSTRING_PUT(s, c); done: ! MAKE_SSTRING_SPACE(s, 1); *s->ptr = 0; return c; } --- 234,242 ---- ungetc (c, fp); return c == '\'' ? CHAR_TOKEN : STRING_TOKEN; } ! SSTRING_PUT (s, c); done: ! MAKE_SSTRING_SPACE (s, 1); *s->ptr = 0; return c; } *************** hashstr (str, len) *** 244,250 **** { unsigned int n = len; unsigned int r = 0; ! const unsigned char *s = (const unsigned char *)str; do r = r * 67 + (*s++ - 113); --- 248,254 ---- { unsigned int n = len; unsigned int r = 0; ! const unsigned char *s = (const unsigned char *) str; do r = r * 67 + (*s++ - 113); diff -Nrc3pad gcc-3.0.4/gcc/scan.h gcc-3.1/gcc/scan.h *** gcc-3.0.4/gcc/scan.h Mon Nov 27 08:00:04 2000 --- gcc-3.1/gcc/scan.h Tue Oct 9 14:03:12 2001 *************** extern unsigned int hashstr _PARAMS((con *** 68,74 **** struct cpp_reader; extern int scan_decls _PARAMS((struct cpp_reader *, int, char **)); ! /* get_token is a simple C lexer. */ #define IDENTIFIER_TOKEN 300 #define CHAR_TOKEN 301 #define STRING_TOKEN 302 --- 68,74 ---- struct cpp_reader; extern int scan_decls _PARAMS((struct cpp_reader *, int, char **)); ! /* get_token is a simple C lexer. */ #define IDENTIFIER_TOKEN 300 #define CHAR_TOKEN 301 #define STRING_TOKEN 302 diff -Nrc3pad gcc-3.0.4/gcc/sched-deps.c gcc-3.1/gcc/sched-deps.c *** gcc-3.0.4/gcc/sched-deps.c Thu Jul 26 13:55:02 2001 --- gcc-3.1/gcc/sched-deps.c Tue Feb 19 02:53:10 2002 *************** *** 1,25 **** /* Instruction scheduling pass. This file computes dependencies between instructions. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) Enhanced by, and currently maintained by, Jim Wilson (wilson@cygnus.com) ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it ! under the terms of the GNU General Public License as published by the ! Free Software Foundation; either version 2, or (at your option) any ! later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ! ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free ! the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "config.h" --- 1,25 ---- /* Instruction scheduling pass. This file computes dependencies between instructions. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) Enhanced by, and currently maintained by, Jim Wilson (wilson@cygnus.com) ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "config.h" *************** the Free Software Foundation, 59 Temple *** 39,54 **** #include "recog.h" #include "sched-int.h" #include "params.h" extern char *reg_known_equiv_p; extern rtx *reg_known_value; static regset_head reg_pending_sets_head; static regset_head reg_pending_clobbers_head; static regset reg_pending_sets; static regset reg_pending_clobbers; ! static int reg_pending_sets_all; /* To speed up the test for duplicate dependency links we keep a record of dependencies created by add_dependence when the average --- 39,57 ---- #include "recog.h" #include "sched-int.h" #include "params.h" + #include "cselib.h" extern char *reg_known_equiv_p; extern rtx *reg_known_value; static regset_head reg_pending_sets_head; static regset_head reg_pending_clobbers_head; + static regset_head reg_pending_uses_head; static regset reg_pending_sets; static regset reg_pending_clobbers; ! static regset reg_pending_uses; ! static bool reg_pending_barrier; /* To speed up the test for duplicate dependency links we keep a record of dependencies created by add_dependence when the average *************** static int reg_pending_sets_all; *** 62,68 **** Each insn has associated bitmaps for its dependencies. Each bitmap has enough entries to represent a dependency on any other insn in the insn chain. All bitmap for true dependencies cache is ! allocated then the rest two ones are also allocated. */ static sbitmap *true_dependency_cache; static sbitmap *anti_dependency_cache; static sbitmap *output_dependency_cache; --- 65,71 ---- Each insn has associated bitmaps for its dependencies. Each bitmap has enough entries to represent a dependency on any other insn in the insn chain. All bitmap for true dependencies cache is ! allocated then the rest two ones are also allocated. */ static sbitmap *true_dependency_cache; static sbitmap *anti_dependency_cache; static sbitmap *output_dependency_cache; *************** static sbitmap *output_dependency_cache; *** 70,85 **** /* To speed up checking consistency of formed forward insn dependencies we use the following cache. Another possible solution could be switching off checking duplication of insns in forward ! dependencies. */ #ifdef ENABLE_CHECKING static sbitmap *forward_dependency_cache; #endif static int deps_may_trap_p PARAMS ((rtx)); static void remove_dependence PARAMS ((rtx, rtx)); static void set_sched_group_p PARAMS ((rtx)); ! static void flush_pending_lists PARAMS ((struct deps *, rtx, int)); static void sched_analyze_1 PARAMS ((struct deps *, rtx, rtx)); static void sched_analyze_2 PARAMS ((struct deps *, rtx, rtx)); static void sched_analyze_insn PARAMS ((struct deps *, rtx, rtx, rtx)); --- 73,90 ---- /* To speed up checking consistency of formed forward insn dependencies we use the following cache. Another possible solution could be switching off checking duplication of insns in forward ! dependencies. */ #ifdef ENABLE_CHECKING static sbitmap *forward_dependency_cache; #endif static int deps_may_trap_p PARAMS ((rtx)); + static void add_dependence_list PARAMS ((rtx, rtx, enum reg_note)); + static void add_dependence_list_and_free PARAMS ((rtx, rtx *, enum reg_note)); static void remove_dependence PARAMS ((rtx, rtx)); static void set_sched_group_p PARAMS ((rtx)); ! static void flush_pending_lists PARAMS ((struct deps *, rtx, int, int)); static void sched_analyze_1 PARAMS ((struct deps *, rtx, rtx)); static void sched_analyze_2 PARAMS ((struct deps *, rtx, rtx)); static void sched_analyze_insn PARAMS ((struct deps *, rtx, rtx, rtx)); *************** deps_may_trap_p (mem) *** 106,112 **** /* Return the INSN_LIST containing INSN in LIST, or NULL if LIST does not contain INSN. */ ! HAIFA_INLINE rtx find_insn_list (insn, list) rtx insn; rtx list; --- 111,117 ---- /* Return the INSN_LIST containing INSN in LIST, or NULL if LIST does not contain INSN. */ ! rtx find_insn_list (insn, list) rtx insn; rtx list; *************** find_insn_list (insn, list) *** 119,143 **** } return 0; } - - /* Return 1 if the pair (insn, x) is found in (LIST, LIST1), or 0 - otherwise. */ - - HAIFA_INLINE int - find_insn_mem_list (insn, x, list, list1) - rtx insn, x; - rtx list, list1; - { - while (list) - { - if (XEXP (list, 0) == insn - && XEXP (list1, 0) == x) - return 1; - list = XEXP (list, 1); - list1 = XEXP (list1, 1); - } - return 0; - } /* Find the condition under which INSN is executed. */ --- 124,129 ---- *************** add_dependence (insn, elem, dep_type) *** 198,204 **** { rtx link, next; int present_p; - enum reg_note present_dep_type; rtx cond1, cond2; /* Don't depend an insn on itself. */ --- 184,189 ---- *************** add_dependence (insn, elem, dep_type) *** 213,223 **** /* flow.c doesn't handle conditional lifetimes entirely correctly; calls mess up the conditional lifetimes. */ if (GET_CODE (insn) != CALL_INSN && GET_CODE (elem) != CALL_INSN) { cond1 = get_condition (insn); cond2 = get_condition (elem); ! if (cond1 && cond2 && conditions_mutex_p (cond1, cond2)) return; } --- 198,218 ---- /* flow.c doesn't handle conditional lifetimes entirely correctly; calls mess up the conditional lifetimes. */ + /* ??? add_dependence is the wrong place to be eliding dependencies, + as that forgets that the condition expressions themselves may + be dependent. */ if (GET_CODE (insn) != CALL_INSN && GET_CODE (elem) != CALL_INSN) { cond1 = get_condition (insn); cond2 = get_condition (elem); ! if (cond1 && cond2 ! && conditions_mutex_p (cond1, cond2) ! /* Make sure first instruction doesn't affect condition of second ! instruction if switched. */ ! && !modified_in_p (cond1, elem) ! /* Make sure second instruction doesn't affect condition of first ! instruction if switched. */ ! && !modified_in_p (cond2, insn)) return; } *************** add_dependence (insn, elem, dep_type) *** 272,281 **** dramatically for some code. */ if (true_dependency_cache != NULL) { if (anti_dependency_cache == NULL || output_dependency_cache == NULL) abort (); if (TEST_BIT (true_dependency_cache[INSN_LUID (insn)], INSN_LUID (elem))) ! present_dep_type = 0; else if (TEST_BIT (anti_dependency_cache[INSN_LUID (insn)], INSN_LUID (elem))) present_dep_type = REG_DEP_ANTI; --- 267,279 ---- dramatically for some code. */ if (true_dependency_cache != NULL) { + enum reg_note present_dep_type = 0; + if (anti_dependency_cache == NULL || output_dependency_cache == NULL) abort (); if (TEST_BIT (true_dependency_cache[INSN_LUID (insn)], INSN_LUID (elem))) ! /* Do nothing (present_set_type is already 0). */ ! ; else if (TEST_BIT (anti_dependency_cache[INSN_LUID (insn)], INSN_LUID (elem))) present_dep_type = REG_DEP_ANTI; *************** add_dependence (insn, elem, dep_type) *** 296,302 **** { #ifdef INSN_SCHEDULING /* Clear corresponding cache entry because type of the link ! may be changed. */ if (true_dependency_cache != NULL) { if (REG_NOTE_KIND (link) == REG_DEP_ANTI) --- 294,300 ---- { #ifdef INSN_SCHEDULING /* Clear corresponding cache entry because type of the link ! may be changed. */ if (true_dependency_cache != NULL) { if (REG_NOTE_KIND (link) == REG_DEP_ANTI) *************** add_dependence (insn, elem, dep_type) *** 318,327 **** #ifdef INSN_SCHEDULING /* If we are adding a dependency to INSN's LOG_LINKs, then ! note that in the bitmap caches of dependency information. */ if (true_dependency_cache != NULL) { ! if ((int)REG_NOTE_KIND (link) == 0) SET_BIT (true_dependency_cache[INSN_LUID (insn)], INSN_LUID (elem)); else if (REG_NOTE_KIND (link) == REG_DEP_ANTI) --- 316,325 ---- #ifdef INSN_SCHEDULING /* If we are adding a dependency to INSN's LOG_LINKs, then ! note that in the bitmap caches of dependency information. */ if (true_dependency_cache != NULL) { ! if ((int) REG_NOTE_KIND (link) == 0) SET_BIT (true_dependency_cache[INSN_LUID (insn)], INSN_LUID (elem)); else if (REG_NOTE_KIND (link) == REG_DEP_ANTI) *************** add_dependence (insn, elem, dep_type) *** 344,353 **** #ifdef INSN_SCHEDULING /* If we are adding a dependency to INSN's LOG_LINKs, then note that ! in the bitmap caches of dependency information. */ if (true_dependency_cache != NULL) { ! if ((int)dep_type == 0) SET_BIT (true_dependency_cache[INSN_LUID (insn)], INSN_LUID (elem)); else if (dep_type == REG_DEP_ANTI) SET_BIT (anti_dependency_cache[INSN_LUID (insn)], INSN_LUID (elem)); --- 342,351 ---- #ifdef INSN_SCHEDULING /* If we are adding a dependency to INSN's LOG_LINKs, then note that ! in the bitmap caches of dependency information. */ if (true_dependency_cache != NULL) { ! if ((int) dep_type == 0) SET_BIT (true_dependency_cache[INSN_LUID (insn)], INSN_LUID (elem)); else if (dep_type == REG_DEP_ANTI) SET_BIT (anti_dependency_cache[INSN_LUID (insn)], INSN_LUID (elem)); *************** add_dependence (insn, elem, dep_type) *** 357,362 **** --- 355,388 ---- #endif } + /* A convenience wrapper to operate on an entire list. */ + + static void + add_dependence_list (insn, list, dep_type) + rtx insn, list; + enum reg_note dep_type; + { + for (; list; list = XEXP (list, 1)) + add_dependence (insn, XEXP (list, 0), dep_type); + } + + /* Similar, but free *LISTP at the same time. */ + + static void + add_dependence_list_and_free (insn, listp, dep_type) + rtx insn; + rtx *listp; + enum reg_note dep_type; + { + rtx list, next; + for (list = *listp, *listp = NULL; list ; list = next) + { + next = XEXP (list, 1); + add_dependence (insn, XEXP (list, 0), dep_type); + free_INSN_LIST_node (list); + } + } + /* Remove ELEM wrapped in an INSN_LIST from the LOG_LINKS of INSN. Abort if not found. */ *************** add_insn_mem_dependence (deps, insn_list *** 475,485 **** struct deps *deps; rtx *insn_list, *mem_list, insn, mem; { ! register rtx link; link = alloc_INSN_LIST (insn, *insn_list); *insn_list = link; link = alloc_EXPR_LIST (VOIDmode, mem, *mem_list); *mem_list = link; --- 501,516 ---- struct deps *deps; rtx *insn_list, *mem_list, insn, mem; { ! rtx link; link = alloc_INSN_LIST (insn, *insn_list); *insn_list = link; + if (current_sched_info->use_cselib) + { + mem = shallow_copy_rtx (mem); + XEXP (mem, 0) = cselib_subst_to_values (XEXP (mem, 0)); + } link = alloc_EXPR_LIST (VOIDmode, mem, *mem_list); *mem_list = link; *************** add_insn_mem_dependence (deps, insn_list *** 487,537 **** } /* Make a dependency between every memory reference on the pending lists ! and INSN, thus flushing the pending lists. If ONLY_WRITE, don't flush ! the read list. */ static void ! flush_pending_lists (deps, insn, only_write) struct deps *deps; rtx insn; ! int only_write; { ! rtx u; ! rtx link; ! ! while (deps->pending_read_insns && ! only_write) { ! add_dependence (insn, XEXP (deps->pending_read_insns, 0), ! REG_DEP_ANTI); ! ! link = deps->pending_read_insns; ! deps->pending_read_insns = XEXP (deps->pending_read_insns, 1); ! free_INSN_LIST_node (link); ! ! link = deps->pending_read_mems; ! deps->pending_read_mems = XEXP (deps->pending_read_mems, 1); ! free_EXPR_LIST_node (link); } - while (deps->pending_write_insns) - { - add_dependence (insn, XEXP (deps->pending_write_insns, 0), - REG_DEP_ANTI); - - link = deps->pending_write_insns; - deps->pending_write_insns = XEXP (deps->pending_write_insns, 1); - free_INSN_LIST_node (link); ! link = deps->pending_write_mems; ! deps->pending_write_mems = XEXP (deps->pending_write_mems, 1); ! free_EXPR_LIST_node (link); ! } deps->pending_lists_length = 0; ! /* last_pending_memory_flush is now a list of insns. */ ! for (u = deps->last_pending_memory_flush; u; u = XEXP (u, 1)) ! add_dependence (insn, XEXP (u, 0), REG_DEP_ANTI); ! ! free_INSN_LIST_list (&deps->last_pending_memory_flush); deps->last_pending_memory_flush = alloc_INSN_LIST (insn, NULL_RTX); deps->pending_flush_length = 1; } --- 518,546 ---- } /* Make a dependency between every memory reference on the pending lists ! and INSN, thus flushing the pending lists. FOR_READ is true if emitting ! dependencies for a read operation, similarly with FOR_WRITE. */ static void ! flush_pending_lists (deps, insn, for_read, for_write) struct deps *deps; rtx insn; ! int for_read, for_write; { ! if (for_write) { ! add_dependence_list_and_free (insn, &deps->pending_read_insns, ! REG_DEP_ANTI); ! free_EXPR_LIST_list (&deps->pending_read_mems); } ! add_dependence_list_and_free (insn, &deps->pending_write_insns, ! for_read ? REG_DEP_ANTI : REG_DEP_OUTPUT); ! free_EXPR_LIST_list (&deps->pending_write_mems); deps->pending_lists_length = 0; ! add_dependence_list_and_free (insn, &deps->last_pending_memory_flush, ! for_read ? REG_DEP_ANTI : REG_DEP_OUTPUT); deps->last_pending_memory_flush = alloc_INSN_LIST (insn, NULL_RTX); deps->pending_flush_length = 1; } *************** sched_analyze_1 (deps, x, insn) *** 546,553 **** rtx x; rtx insn; { ! register int regno; ! register rtx dest = XEXP (x, 0); enum rtx_code code = GET_CODE (x); if (dest == 0) --- 555,562 ---- rtx x; rtx insn; { ! int regno; ! rtx dest = XEXP (x, 0); enum rtx_code code = GET_CODE (x); if (dest == 0) *************** sched_analyze_1 (deps, x, insn) *** 555,561 **** if (GET_CODE (dest) == PARALLEL) { ! register int i; for (i = XVECLEN (dest, 0) - 1; i >= 0; i--) if (XEXP (XVECEXP (dest, 0, i), 0) != 0) --- 564,570 ---- if (GET_CODE (dest) == PARALLEL) { ! int i; for (i = XVECLEN (dest, 0) - 1; i >= 0; i--) if (XEXP (XVECEXP (dest, 0, i), 0) != 0) *************** sched_analyze_1 (deps, x, insn) *** 583,626 **** if (GET_CODE (dest) == REG) { - register int i; - regno = REGNO (dest); /* A hard reg in a wide mode may really be multiple registers. If so, mark all of them just like the first. */ if (regno < FIRST_PSEUDO_REGISTER) { ! i = HARD_REGNO_NREGS (regno, GET_MODE (dest)); ! while (--i >= 0) { ! int r = regno + i; ! rtx u; ! ! for (u = deps->reg_last[r].uses; u; u = XEXP (u, 1)) ! add_dependence (insn, XEXP (u, 0), REG_DEP_ANTI); ! ! for (u = deps->reg_last[r].sets; u; u = XEXP (u, 1)) ! add_dependence (insn, XEXP (u, 0), REG_DEP_OUTPUT); ! ! /* Clobbers need not be ordered with respect to one ! another, but sets must be ordered with respect to a ! pending clobber. */ ! if (code == SET) ! { ! if (GET_CODE (PATTERN (insn)) != COND_EXEC) ! free_INSN_LIST_list (&deps->reg_last[r].uses); ! for (u = deps->reg_last[r].clobbers; u; u = XEXP (u, 1)) ! add_dependence (insn, XEXP (u, 0), REG_DEP_OUTPUT); ! SET_REGNO_REG_SET (reg_pending_sets, r); ! } ! else ! SET_REGNO_REG_SET (reg_pending_clobbers, r); ! ! /* Function calls clobber all call_used regs. */ ! if (global_regs[r] || (code == SET && call_used_regs[r])) ! for (u = deps->last_function_call; u; u = XEXP (u, 1)) ! add_dependence (insn, XEXP (u, 0), REG_DEP_ANTI); } } /* ??? Reload sometimes emits USEs and CLOBBERs of pseudos that --- 592,613 ---- if (GET_CODE (dest) == REG) { regno = REGNO (dest); /* A hard reg in a wide mode may really be multiple registers. If so, mark all of them just like the first. */ if (regno < FIRST_PSEUDO_REGISTER) { ! int i = HARD_REGNO_NREGS (regno, GET_MODE (dest)); ! if (code == SET) { ! while (--i >= 0) ! SET_REGNO_REG_SET (reg_pending_sets, regno + i); ! } ! else ! { ! while (--i >= 0) ! SET_REGNO_REG_SET (reg_pending_clobbers, regno + i); } } /* ??? Reload sometimes emits USEs and CLOBBERs of pseudos that *************** sched_analyze_1 (deps, x, insn) *** 634,655 **** } else { - rtx u; - - for (u = deps->reg_last[regno].uses; u; u = XEXP (u, 1)) - add_dependence (insn, XEXP (u, 0), REG_DEP_ANTI); - - for (u = deps->reg_last[regno].sets; u; u = XEXP (u, 1)) - add_dependence (insn, XEXP (u, 0), REG_DEP_OUTPUT); - if (code == SET) ! { ! if (GET_CODE (PATTERN (insn)) != COND_EXEC) ! free_INSN_LIST_list (&deps->reg_last[regno].uses); ! for (u = deps->reg_last[regno].clobbers; u; u = XEXP (u, 1)) ! add_dependence (insn, XEXP (u, 0), REG_DEP_OUTPUT); ! SET_REGNO_REG_SET (reg_pending_sets, regno); ! } else SET_REGNO_REG_SET (reg_pending_clobbers, regno); --- 621,628 ---- } else { if (code == SET) ! SET_REGNO_REG_SET (reg_pending_sets, regno); else SET_REGNO_REG_SET (reg_pending_clobbers, regno); *************** sched_analyze_1 (deps, x, insn) *** 663,677 **** /* Don't let it cross a call after scheduling if it doesn't already cross one. */ - if (REG_N_CALLS_CROSSED (regno) == 0) ! for (u = deps->last_function_call; u; u = XEXP (u, 1)) ! add_dependence (insn, XEXP (u, 0), REG_DEP_ANTI); } } else if (GET_CODE (dest) == MEM) { /* Writing memory. */ if (deps->pending_lists_length > MAX_PENDING_LIST_LENGTH) { --- 636,656 ---- /* Don't let it cross a call after scheduling if it doesn't already cross one. */ if (REG_N_CALLS_CROSSED (regno) == 0) ! add_dependence_list (insn, deps->last_function_call, REG_DEP_ANTI); } } else if (GET_CODE (dest) == MEM) { /* Writing memory. */ + rtx t = dest; + + if (current_sched_info->use_cselib) + { + t = shallow_copy_rtx (dest); + cselib_lookup (XEXP (t, 0), Pmode, 1); + XEXP (t, 0) = cselib_subst_to_values (XEXP (t, 0)); + } if (deps->pending_lists_length > MAX_PENDING_LIST_LENGTH) { *************** sched_analyze_1 (deps, x, insn) *** 680,697 **** these lists get long. When compiling GCC with itself, this flush occurs 8 times for sparc, and 10 times for m88k using the default value of 32. */ ! flush_pending_lists (deps, insn, 0); } else { - rtx u; rtx pending, pending_mem; pending = deps->pending_read_insns; pending_mem = deps->pending_read_mems; while (pending) { ! if (anti_dependence (XEXP (pending_mem, 0), dest)) add_dependence (insn, XEXP (pending, 0), REG_DEP_ANTI); pending = XEXP (pending, 1); --- 659,675 ---- these lists get long. When compiling GCC with itself, this flush occurs 8 times for sparc, and 10 times for m88k using the default value of 32. */ ! flush_pending_lists (deps, insn, false, true); } else { rtx pending, pending_mem; pending = deps->pending_read_insns; pending_mem = deps->pending_read_mems; while (pending) { ! if (anti_dependence (XEXP (pending_mem, 0), t)) add_dependence (insn, XEXP (pending, 0), REG_DEP_ANTI); pending = XEXP (pending, 1); *************** sched_analyze_1 (deps, x, insn) *** 702,716 **** pending_mem = deps->pending_write_mems; while (pending) { ! if (output_dependence (XEXP (pending_mem, 0), dest)) add_dependence (insn, XEXP (pending, 0), REG_DEP_OUTPUT); pending = XEXP (pending, 1); pending_mem = XEXP (pending_mem, 1); } ! for (u = deps->last_pending_memory_flush; u; u = XEXP (u, 1)) ! add_dependence (insn, XEXP (u, 0), REG_DEP_ANTI); add_insn_mem_dependence (deps, &deps->pending_write_insns, &deps->pending_write_mems, insn, dest); --- 680,694 ---- pending_mem = deps->pending_write_mems; while (pending) { ! if (output_dependence (XEXP (pending_mem, 0), t)) add_dependence (insn, XEXP (pending, 0), REG_DEP_OUTPUT); pending = XEXP (pending, 1); pending_mem = XEXP (pending_mem, 1); } ! add_dependence_list (insn, deps->last_pending_memory_flush, ! REG_DEP_ANTI); add_insn_mem_dependence (deps, &deps->pending_write_insns, &deps->pending_write_mems, insn, dest); *************** sched_analyze_2 (deps, x, insn) *** 731,740 **** rtx x; rtx insn; { ! register int i; ! register int j; ! register enum rtx_code code; ! register const char *fmt; if (x == 0) return; --- 709,718 ---- rtx x; rtx insn; { ! int i; ! int j; ! enum rtx_code code; ! const char *fmt; if (x == 0) return; *************** sched_analyze_2 (deps, x, insn) *** 745,750 **** --- 723,729 ---- { case CONST_INT: case CONST_DOUBLE: + case CONST_VECTOR: case SYMBOL_REF: case CONST: case LABEL_REF: *************** sched_analyze_2 (deps, x, insn) *** 762,793 **** case REG: { - rtx u; int regno = REGNO (x); if (regno < FIRST_PSEUDO_REGISTER) { ! int i; ! ! i = HARD_REGNO_NREGS (regno, GET_MODE (x)); while (--i >= 0) ! { ! int r = regno + i; ! deps->reg_last[r].uses ! = alloc_INSN_LIST (insn, deps->reg_last[r].uses); ! SET_REGNO_REG_SET (&deps->reg_last_in_use, r); ! ! for (u = deps->reg_last[r].sets; u; u = XEXP (u, 1)) ! add_dependence (insn, XEXP (u, 0), 0); ! ! /* ??? This should never happen. */ ! for (u = deps->reg_last[r].clobbers; u; u = XEXP (u, 1)) ! add_dependence (insn, XEXP (u, 0), 0); ! ! if (call_used_regs[r] || global_regs[r]) ! /* Function calls clobber all call_used regs. */ ! for (u = deps->last_function_call; u; u = XEXP (u, 1)) ! add_dependence (insn, XEXP (u, 0), REG_DEP_ANTI); ! } } /* ??? Reload sometimes emits USEs and CLOBBERs of pseudos that it does not reload. Ignore these as they have served their --- 741,752 ---- case REG: { int regno = REGNO (x); if (regno < FIRST_PSEUDO_REGISTER) { ! int i = HARD_REGNO_NREGS (regno, GET_MODE (x)); while (--i >= 0) ! SET_REGNO_REG_SET (reg_pending_uses, regno + i); } /* ??? Reload sometimes emits USEs and CLOBBERs of pseudos that it does not reload. Ignore these as they have served their *************** sched_analyze_2 (deps, x, insn) *** 800,815 **** } else { ! deps->reg_last[regno].uses ! = alloc_INSN_LIST (insn, deps->reg_last[regno].uses); ! SET_REGNO_REG_SET (&deps->reg_last_in_use, regno); ! ! for (u = deps->reg_last[regno].sets; u; u = XEXP (u, 1)) ! add_dependence (insn, XEXP (u, 0), 0); ! ! /* ??? This should never happen. */ ! for (u = deps->reg_last[regno].clobbers; u; u = XEXP (u, 1)) ! add_dependence (insn, XEXP (u, 0), 0); /* Pseudos that are REG_EQUIV to something may be replaced by that during reloading. We need only add dependencies for --- 759,765 ---- } else { ! SET_REGNO_REG_SET (reg_pending_uses, regno); /* Pseudos that are REG_EQUIV to something may be replaced by that during reloading. We need only add dependencies for *************** sched_analyze_2 (deps, x, insn) *** 823,830 **** insn to the sched_before_next_call list so that it will still not cross calls after scheduling. */ if (REG_N_CALLS_CROSSED (regno) == 0) ! add_dependence (deps->sched_before_next_call, insn, ! REG_DEP_ANTI); } return; } --- 773,780 ---- insn to the sched_before_next_call list so that it will still not cross calls after scheduling. */ if (REG_N_CALLS_CROSSED (regno) == 0) ! deps->sched_before_next_call ! = alloc_INSN_LIST (insn, deps->sched_before_next_call); } return; } *************** sched_analyze_2 (deps, x, insn) *** 834,845 **** /* Reading memory. */ rtx u; rtx pending, pending_mem; pending = deps->pending_read_insns; pending_mem = deps->pending_read_mems; while (pending) { ! if (read_dependence (XEXP (pending_mem, 0), x)) add_dependence (insn, XEXP (pending, 0), REG_DEP_ANTI); pending = XEXP (pending, 1); --- 784,802 ---- /* Reading memory. */ rtx u; rtx pending, pending_mem; + rtx t = x; + if (current_sched_info->use_cselib) + { + t = shallow_copy_rtx (t); + cselib_lookup (XEXP (t, 0), Pmode, 1); + XEXP (t, 0) = cselib_subst_to_values (XEXP (t, 0)); + } pending = deps->pending_read_insns; pending_mem = deps->pending_read_mems; while (pending) { ! if (read_dependence (XEXP (pending_mem, 0), t)) add_dependence (insn, XEXP (pending, 0), REG_DEP_ANTI); pending = XEXP (pending, 1); *************** sched_analyze_2 (deps, x, insn) *** 851,857 **** while (pending) { if (true_dependence (XEXP (pending_mem, 0), VOIDmode, ! x, rtx_varies_p)) add_dependence (insn, XEXP (pending, 0), 0); pending = XEXP (pending, 1); --- 808,814 ---- while (pending) { if (true_dependence (XEXP (pending_mem, 0), VOIDmode, ! t, rtx_varies_p)) add_dependence (insn, XEXP (pending, 0), 0); pending = XEXP (pending, 1); *************** sched_analyze_2 (deps, x, insn) *** 875,889 **** /* Force pending stores to memory in case a trap handler needs them. */ case TRAP_IF: ! flush_pending_lists (deps, insn, 1); break; case ASM_OPERANDS: case ASM_INPUT: case UNSPEC_VOLATILE: { - rtx u; - /* Traditional and volatile asm instructions must be considered to use and clobber all hard registers, all pseudo-registers and all of memory. So must TRAP_IF and UNSPEC_VOLATILE operations. --- 832,844 ---- /* Force pending stores to memory in case a trap handler needs them. */ case TRAP_IF: ! flush_pending_lists (deps, insn, true, false); break; case ASM_OPERANDS: case ASM_INPUT: case UNSPEC_VOLATILE: { /* Traditional and volatile asm instructions must be considered to use and clobber all hard registers, all pseudo-registers and all of memory. So must TRAP_IF and UNSPEC_VOLATILE operations. *************** sched_analyze_2 (deps, x, insn) *** 892,916 **** mode. An insn should not be moved across this even if it only uses pseudo-regs because it might give an incorrectly rounded result. */ if (code != ASM_OPERANDS || MEM_VOLATILE_P (x)) ! { ! for (i = 0; i < deps->max_reg; i++) ! { ! struct deps_reg *reg_last = &deps->reg_last[i]; ! ! for (u = reg_last->uses; u; u = XEXP (u, 1)) ! add_dependence (insn, XEXP (u, 0), REG_DEP_ANTI); ! for (u = reg_last->sets; u; u = XEXP (u, 1)) ! add_dependence (insn, XEXP (u, 0), 0); ! for (u = reg_last->clobbers; u; u = XEXP (u, 1)) ! add_dependence (insn, XEXP (u, 0), 0); ! ! if (GET_CODE (PATTERN (insn)) != COND_EXEC) ! free_INSN_LIST_list (®_last->uses); ! } ! reg_pending_sets_all = 1; ! ! flush_pending_lists (deps, insn, 0); ! } /* For all ASM_OPERANDS, we must traverse the vector of input operands. We can not just fall through here since then we would be confused --- 847,853 ---- mode. An insn should not be moved across this even if it only uses pseudo-regs because it might give an incorrectly rounded result. */ if (code != ASM_OPERANDS || MEM_VOLATILE_P (x)) ! reg_pending_barrier = true; /* For all ASM_OPERANDS, we must traverse the vector of input operands. We can not just fall through here since then we would be confused *************** sched_analyze_insn (deps, x, insn, loop_ *** 972,979 **** rtx x, insn; rtx loop_notes; { ! register RTX_CODE code = GET_CODE (x); ! int schedule_barrier_found = 0; rtx link; int i; --- 909,915 ---- rtx x, insn; rtx loop_notes; { ! RTX_CODE code = GET_CODE (x); rtx link; int i; *************** sched_analyze_insn (deps, x, insn, loop_ *** 982,988 **** sched_analyze_2 (deps, COND_EXEC_TEST (x), insn); /* ??? Should be recording conditions so we reduce the number of ! false dependancies. */ x = COND_EXEC_CODE (x); code = GET_CODE (x); } --- 918,924 ---- sched_analyze_2 (deps, COND_EXEC_TEST (x), insn); /* ??? Should be recording conditions so we reduce the number of ! false dependencies. */ x = COND_EXEC_CODE (x); code = GET_CODE (x); } *************** sched_analyze_insn (deps, x, insn, loop_ *** 990,996 **** sched_analyze_1 (deps, x, insn); else if (code == PARALLEL) { ! register int i; for (i = XVECLEN (x, 0) - 1; i >= 0; i--) { rtx sub = XVECEXP (x, 0, i); --- 926,932 ---- sched_analyze_1 (deps, x, insn); else if (code == PARALLEL) { ! int i; for (i = XVECLEN (x, 0) - 1; i >= 0; i--) { rtx sub = XVECEXP (x, 0, i); *************** sched_analyze_insn (deps, x, insn, loop_ *** 1013,1048 **** /* Mark registers CLOBBERED or used by called function. */ if (GET_CODE (insn) == CALL_INSN) ! for (link = CALL_INSN_FUNCTION_USAGE (insn); link; link = XEXP (link, 1)) ! { ! if (GET_CODE (XEXP (link, 0)) == CLOBBER) ! sched_analyze_1 (deps, XEXP (link, 0), insn); ! else ! sched_analyze_2 (deps, XEXP (link, 0), insn); ! } if (GET_CODE (insn) == JUMP_INSN) { rtx next; next = next_nonnote_insn (insn); if (next && GET_CODE (next) == BARRIER) ! schedule_barrier_found = 1; else { ! rtx pending, pending_mem, u; regset_head tmp; INIT_REG_SET (&tmp); (*current_sched_info->compute_jump_reg_dependencies) (insn, &tmp); ! EXECUTE_IF_SET_IN_REG_SET (&tmp, 0, i, ! { ! struct deps_reg *reg_last = &deps->reg_last[i]; ! for (u = reg_last->sets; u; u = XEXP (u, 1)) ! add_dependence (insn, XEXP (u, 0), REG_DEP_ANTI); ! reg_last->uses = alloc_INSN_LIST (insn, reg_last->uses); ! SET_REGNO_REG_SET (&deps->reg_last_in_use, i); ! }); ! CLEAR_REG_SET (&tmp); /* All memory writes and volatile reads must happen before the --- 949,980 ---- /* Mark registers CLOBBERED or used by called function. */ if (GET_CODE (insn) == CALL_INSN) ! { ! for (link = CALL_INSN_FUNCTION_USAGE (insn); link; link = XEXP (link, 1)) ! { ! if (GET_CODE (XEXP (link, 0)) == CLOBBER) ! sched_analyze_1 (deps, XEXP (link, 0), insn); ! else ! sched_analyze_2 (deps, XEXP (link, 0), insn); ! } ! if (find_reg_note (insn, REG_SETJMP, NULL)) ! reg_pending_barrier = true; ! } if (GET_CODE (insn) == JUMP_INSN) { rtx next; next = next_nonnote_insn (insn); if (next && GET_CODE (next) == BARRIER) ! reg_pending_barrier = true; else { ! rtx pending, pending_mem; regset_head tmp; INIT_REG_SET (&tmp); (*current_sched_info->compute_jump_reg_dependencies) (insn, &tmp); ! IOR_REG_SET (reg_pending_uses, &tmp); CLEAR_REG_SET (&tmp); /* All memory writes and volatile reads must happen before the *************** sched_analyze_insn (deps, x, insn, loop_ *** 1068,1075 **** pending_mem = XEXP (pending_mem, 1); } ! for (u = deps->last_pending_memory_flush; u; u = XEXP (u, 1)) ! add_dependence (insn, XEXP (u, 0), REG_DEP_ANTI); } } --- 1000,1007 ---- pending_mem = XEXP (pending_mem, 1); } ! add_dependence_list (insn, deps->last_pending_memory_flush, ! REG_DEP_ANTI); } } *************** sched_analyze_insn (deps, x, insn, loop_ *** 1090,1098 **** if (INTVAL (XEXP (link, 0)) == NOTE_INSN_LOOP_BEG || INTVAL (XEXP (link, 0)) == NOTE_INSN_LOOP_END || INTVAL (XEXP (link, 0)) == NOTE_INSN_EH_REGION_BEG ! || INTVAL (XEXP (link, 0)) == NOTE_INSN_EH_REGION_END ! || INTVAL (XEXP (link, 0)) == NOTE_INSN_SETJMP) ! schedule_barrier_found = 1; link = XEXP (link, 1); } --- 1022,1029 ---- if (INTVAL (XEXP (link, 0)) == NOTE_INSN_LOOP_BEG || INTVAL (XEXP (link, 0)) == NOTE_INSN_LOOP_END || INTVAL (XEXP (link, 0)) == NOTE_INSN_EH_REGION_BEG ! || INTVAL (XEXP (link, 0)) == NOTE_INSN_EH_REGION_END) ! reg_pending_barrier = true; link = XEXP (link, 1); } *************** sched_analyze_insn (deps, x, insn, loop_ *** 1103,1175 **** /* If this instruction can throw an exception, then moving it changes where block boundaries fall. This is mighty confusing elsewhere. Therefore, prevent such an instruction from being moved. */ ! if (flag_non_call_exceptions && can_throw_internal (insn)) ! schedule_barrier_found = 1; /* Add dependencies if a scheduling barrier was found. */ ! if (schedule_barrier_found) { ! rtx u; ! ! for (i = 0; i < deps->max_reg; i++) { ! struct deps_reg *reg_last = &deps->reg_last[i]; ! ! for (u = reg_last->uses; u; u = XEXP (u, 1)) ! add_dependence (insn, XEXP (u, 0), REG_DEP_ANTI); ! for (u = reg_last->sets; u; u = XEXP (u, 1)) ! add_dependence (insn, XEXP (u, 0), 0); ! for (u = reg_last->clobbers; u; u = XEXP (u, 1)) ! add_dependence (insn, XEXP (u, 0), 0); ! ! if (GET_CODE (PATTERN (insn)) != COND_EXEC) ! free_INSN_LIST_list (®_last->uses); } - flush_pending_lists (deps, insn, 0); - - reg_pending_sets_all = 1; - } - /* Accumulate clobbers until the next set so that it will be output - dependent on all of them. At the next set we can clear the clobber - list, since subsequent sets will be output dependent on it. */ - if (reg_pending_sets_all) - { - reg_pending_sets_all = 0; for (i = 0; i < deps->max_reg; i++) { struct deps_reg *reg_last = &deps->reg_last[i]; - if (GET_CODE (PATTERN (insn)) != COND_EXEC) - { - free_INSN_LIST_list (®_last->sets); - free_INSN_LIST_list (®_last->clobbers); - } reg_last->sets = alloc_INSN_LIST (insn, reg_last->sets); SET_REGNO_REG_SET (&deps->reg_last_in_use, i); } } else { ! EXECUTE_IF_SET_IN_REG_SET (reg_pending_sets, 0, i, { ! struct deps_reg *reg_last = &deps->reg_last[i]; ! if (GET_CODE (PATTERN (insn)) != COND_EXEC) { ! free_INSN_LIST_list (®_last->sets); ! free_INSN_LIST_list (®_last->clobbers); ! } ! reg_last->sets = alloc_INSN_LIST (insn, reg_last->sets); ! SET_REGNO_REG_SET (&deps->reg_last_in_use, i); ! }); ! EXECUTE_IF_SET_IN_REG_SET (reg_pending_clobbers, 0, i, { ! struct deps_reg *reg_last = &deps->reg_last[i]; ! reg_last->clobbers = alloc_INSN_LIST (insn, reg_last->clobbers); ! SET_REGNO_REG_SET (&deps->reg_last_in_use, i); ! }); } ! CLEAR_REG_SET (reg_pending_sets); CLEAR_REG_SET (reg_pending_clobbers); /* If a post-call group is still open, see if it should remain so. This insn must be a simple move of a hard reg to a pseudo or --- 1034,1167 ---- /* If this instruction can throw an exception, then moving it changes where block boundaries fall. This is mighty confusing elsewhere. Therefore, prevent such an instruction from being moved. */ ! if (can_throw_internal (insn)) ! reg_pending_barrier = true; /* Add dependencies if a scheduling barrier was found. */ ! if (reg_pending_barrier) { ! if (GET_CODE (PATTERN (insn)) == COND_EXEC) { ! EXECUTE_IF_SET_IN_REG_SET (&deps->reg_last_in_use, 0, i, ! { ! struct deps_reg *reg_last = &deps->reg_last[i]; ! add_dependence_list (insn, reg_last->uses, REG_DEP_ANTI); ! add_dependence_list (insn, reg_last->sets, 0); ! add_dependence_list (insn, reg_last->clobbers, 0); ! }); ! } ! else ! { ! EXECUTE_IF_SET_IN_REG_SET (&deps->reg_last_in_use, 0, i, ! { ! struct deps_reg *reg_last = &deps->reg_last[i]; ! add_dependence_list_and_free (insn, ®_last->uses, ! REG_DEP_ANTI); ! add_dependence_list_and_free (insn, ®_last->sets, 0); ! add_dependence_list_and_free (insn, ®_last->clobbers, 0); ! reg_last->uses_length = 0; ! reg_last->clobbers_length = 0; ! }); } for (i = 0; i < deps->max_reg; i++) { struct deps_reg *reg_last = &deps->reg_last[i]; reg_last->sets = alloc_INSN_LIST (insn, reg_last->sets); SET_REGNO_REG_SET (&deps->reg_last_in_use, i); } + + flush_pending_lists (deps, insn, true, true); + reg_pending_barrier = false; } else { ! /* If the current insn is conditional, we can't free any ! of the lists. */ ! if (GET_CODE (PATTERN (insn)) == COND_EXEC) { ! EXECUTE_IF_SET_IN_REG_SET (reg_pending_uses, 0, i, { ! struct deps_reg *reg_last = &deps->reg_last[i]; ! add_dependence_list (insn, reg_last->sets, 0); ! add_dependence_list (insn, reg_last->clobbers, 0); ! reg_last->uses = alloc_INSN_LIST (insn, reg_last->uses); ! reg_last->uses_length++; ! }); ! EXECUTE_IF_SET_IN_REG_SET (reg_pending_clobbers, 0, i, ! { ! struct deps_reg *reg_last = &deps->reg_last[i]; ! add_dependence_list (insn, reg_last->sets, REG_DEP_OUTPUT); ! add_dependence_list (insn, reg_last->uses, REG_DEP_ANTI); ! reg_last->clobbers = alloc_INSN_LIST (insn, reg_last->clobbers); ! reg_last->clobbers_length++; ! }); ! EXECUTE_IF_SET_IN_REG_SET (reg_pending_sets, 0, i, ! { ! struct deps_reg *reg_last = &deps->reg_last[i]; ! add_dependence_list (insn, reg_last->sets, REG_DEP_OUTPUT); ! add_dependence_list (insn, reg_last->clobbers, REG_DEP_OUTPUT); ! add_dependence_list (insn, reg_last->uses, REG_DEP_ANTI); ! reg_last->sets = alloc_INSN_LIST (insn, reg_last->sets); ! }); ! } ! else { ! EXECUTE_IF_SET_IN_REG_SET (reg_pending_uses, 0, i, ! { ! struct deps_reg *reg_last = &deps->reg_last[i]; ! add_dependence_list (insn, reg_last->sets, 0); ! add_dependence_list (insn, reg_last->clobbers, 0); ! reg_last->uses_length++; ! reg_last->uses = alloc_INSN_LIST (insn, reg_last->uses); ! }); ! EXECUTE_IF_SET_IN_REG_SET (reg_pending_clobbers, 0, i, ! { ! struct deps_reg *reg_last = &deps->reg_last[i]; ! add_dependence_list (insn, reg_last->sets, REG_DEP_OUTPUT); ! add_dependence_list (insn, reg_last->uses, REG_DEP_ANTI); ! if (reg_last->uses_length > MAX_PENDING_LIST_LENGTH ! || reg_last->clobbers_length > MAX_PENDING_LIST_LENGTH) ! { ! add_dependence_list_and_free (insn, ®_last->sets, ! REG_DEP_OUTPUT); ! add_dependence_list_and_free (insn, ®_last->uses, ! REG_DEP_ANTI); ! add_dependence_list_and_free (insn, ®_last->clobbers, ! REG_DEP_OUTPUT); ! reg_last->clobbers_length = 0; ! reg_last->uses_length = 0; ! } ! else ! { ! add_dependence_list (insn, reg_last->sets, REG_DEP_OUTPUT); ! add_dependence_list (insn, reg_last->uses, REG_DEP_ANTI); ! } ! reg_last->clobbers_length++; ! reg_last->clobbers = alloc_INSN_LIST (insn, reg_last->clobbers); ! }); ! EXECUTE_IF_SET_IN_REG_SET (reg_pending_sets, 0, i, ! { ! struct deps_reg *reg_last = &deps->reg_last[i]; ! add_dependence_list_and_free (insn, ®_last->sets, ! REG_DEP_OUTPUT); ! add_dependence_list_and_free (insn, ®_last->clobbers, ! REG_DEP_OUTPUT); ! add_dependence_list_and_free (insn, ®_last->uses, ! REG_DEP_ANTI); ! reg_last->sets = alloc_INSN_LIST (insn, reg_last->sets); ! reg_last->uses_length = 0; ! reg_last->clobbers_length = 0; ! }); ! } ! ! IOR_REG_SET (&deps->reg_last_in_use, reg_pending_uses); ! IOR_REG_SET (&deps->reg_last_in_use, reg_pending_clobbers); ! IOR_REG_SET (&deps->reg_last_in_use, reg_pending_sets); } ! CLEAR_REG_SET (reg_pending_uses); CLEAR_REG_SET (reg_pending_clobbers); + CLEAR_REG_SET (reg_pending_sets); /* If a post-call group is still open, see if it should remain so. This insn must be a simple move of a hard reg to a pseudo or *************** sched_analyze_insn (deps, x, insn, loop_ *** 1213,1219 **** else { end_call_group: ! deps->in_post_call_group_p = 0; } } } --- 1205,1211 ---- else { end_call_group: ! deps->in_post_call_group_p = false; } } } *************** sched_analyze (deps, head, tail) *** 1226,1235 **** struct deps *deps; rtx head, tail; { ! register rtx insn; ! register rtx u; rtx loop_notes = 0; for (insn = head;; insn = NEXT_INSN (insn)) { if (GET_CODE (insn) == INSN || GET_CODE (insn) == JUMP_INSN) --- 1218,1229 ---- struct deps *deps; rtx head, tail; { ! rtx insn; rtx loop_notes = 0; + if (current_sched_info->use_cselib) + cselib_init (); + for (insn = head;; insn = NEXT_INSN (insn)) { if (GET_CODE (insn) == INSN || GET_CODE (insn) == JUMP_INSN) *************** sched_analyze (deps, head, tail) *** 1246,1252 **** { /* Keep the list a reasonable size. */ if (deps->pending_flush_length++ > MAX_PENDING_LIST_LENGTH) ! flush_pending_lists (deps, insn, 0); else deps->last_pending_memory_flush = alloc_INSN_LIST (insn, deps->last_pending_memory_flush); --- 1240,1246 ---- { /* Keep the list a reasonable size. */ if (deps->pending_flush_length++ > MAX_PENDING_LIST_LENGTH) ! flush_pending_lists (deps, insn, true, true); else deps->last_pending_memory_flush = alloc_INSN_LIST (insn, deps->last_pending_memory_flush); *************** sched_analyze (deps, head, tail) *** 1256,1263 **** } else if (GET_CODE (insn) == CALL_INSN) { ! rtx x; ! register int i; /* Clear out stale SCHED_GROUP_P. */ SCHED_GROUP_P (insn) = 0; --- 1250,1256 ---- } else if (GET_CODE (insn) == CALL_INSN) { ! int i; /* Clear out stale SCHED_GROUP_P. */ SCHED_GROUP_P (insn) = 0; *************** sched_analyze (deps, head, tail) *** 1267,1336 **** /* Clear out the stale LOG_LINKS from flow. */ free_INSN_LIST_list (&LOG_LINKS (insn)); ! /* Any instruction using a hard register which may get clobbered ! by a call needs to be marked as dependent on this call. ! This prevents a use of a hard return reg from being moved ! past a void call (i.e. it does not explicitly set the hard ! return reg). */ ! ! /* If this call is followed by a NOTE_INSN_SETJMP, then assume that ! all registers, not just hard registers, may be clobbered by this ! call. */ ! ! /* Insn, being a CALL_INSN, magically depends on ! `last_function_call' already. */ ! ! if (NEXT_INSN (insn) && GET_CODE (NEXT_INSN (insn)) == NOTE ! && NOTE_LINE_NUMBER (NEXT_INSN (insn)) == NOTE_INSN_SETJMP) { ! for (i = 0; i < deps->max_reg; i++) ! { ! struct deps_reg *reg_last = &deps->reg_last[i]; ! ! for (u = reg_last->uses; u; u = XEXP (u, 1)) ! add_dependence (insn, XEXP (u, 0), REG_DEP_ANTI); ! for (u = reg_last->sets; u; u = XEXP (u, 1)) ! add_dependence (insn, XEXP (u, 0), 0); ! for (u = reg_last->clobbers; u; u = XEXP (u, 1)) ! add_dependence (insn, XEXP (u, 0), 0); ! ! free_INSN_LIST_list (®_last->uses); ! } ! reg_pending_sets_all = 1; ! ! /* Add a pair of REG_SAVE_NOTEs which we will later ! convert back into a NOTE_INSN_SETJMP note. See ! reemit_notes for why we use a pair of NOTEs. */ ! REG_NOTES (insn) = alloc_EXPR_LIST (REG_SAVE_NOTE, ! GEN_INT (0), ! REG_NOTES (insn)); ! REG_NOTES (insn) = alloc_EXPR_LIST (REG_SAVE_NOTE, ! GEN_INT (NOTE_INSN_SETJMP), ! REG_NOTES (insn)); } else { for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) ! if (call_used_regs[i] || global_regs[i]) { ! for (u = deps->reg_last[i].uses; u; u = XEXP (u, 1)) ! add_dependence (insn, XEXP (u, 0), REG_DEP_ANTI); ! for (u = deps->reg_last[i].sets; u; u = XEXP (u, 1)) ! add_dependence (insn, XEXP (u, 0), REG_DEP_ANTI); ! ! SET_REGNO_REG_SET (reg_pending_clobbers, i); } } /* For each insn which shouldn't cross a call, add a dependence between that insn and this call insn. */ ! x = LOG_LINKS (deps->sched_before_next_call); ! while (x) ! { ! add_dependence (insn, XEXP (x, 0), REG_DEP_ANTI); ! x = XEXP (x, 1); ! } ! free_INSN_LIST_list (&LOG_LINKS (deps->sched_before_next_call)); sched_analyze_insn (deps, PATTERN (insn), insn, loop_notes); loop_notes = 0; --- 1260,1303 ---- /* Clear out the stale LOG_LINKS from flow. */ free_INSN_LIST_list (&LOG_LINKS (insn)); ! if (find_reg_note (insn, REG_SETJMP, NULL)) { ! /* This is setjmp. Assume that all registers, not just ! hard registers, may be clobbered by this call. */ ! reg_pending_barrier = true; } else { for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) ! /* A call may read and modify global register variables. */ ! if (global_regs[i]) { ! SET_REGNO_REG_SET (reg_pending_sets, i); ! SET_REGNO_REG_SET (reg_pending_uses, i); } + /* Other call-clobbered hard regs may be clobbered. */ + else if (TEST_HARD_REG_BIT (regs_invalidated_by_call, i)) + SET_REGNO_REG_SET (reg_pending_clobbers, i); + /* We don't know what set of fixed registers might be used + by the function, but it is certain that the stack pointer + is among them, but be conservative. */ + else if (fixed_regs[i]) + SET_REGNO_REG_SET (reg_pending_uses, i); + /* The frame pointer is normally not used by the function + itself, but by the debugger. */ + /* ??? MIPS o32 is an exception. It uses the frame pointer + in the macro expansion of jal but does not represent this + fact in the call_insn rtl. */ + else if (i == FRAME_POINTER_REGNUM + || (i == HARD_FRAME_POINTER_REGNUM + && (! reload_completed || frame_pointer_needed))) + SET_REGNO_REG_SET (reg_pending_uses, i); } /* For each insn which shouldn't cross a call, add a dependence between that insn and this call insn. */ ! add_dependence_list_and_free (insn, &deps->sched_before_next_call, ! REG_DEP_ANTI); sched_analyze_insn (deps, PATTERN (insn), insn, loop_notes); loop_notes = 0; *************** sched_analyze (deps, head, tail) *** 1339,1357 **** all pending reads and writes, and start new dependencies starting from here. But only flush writes for constant calls (which may be passed a pointer to something we haven't written yet). */ ! flush_pending_lists (deps, insn, CONST_CALL_P (insn)); ! ! /* Depend this function call (actually, the user of this ! function call) on all hard register clobberage. */ ! /* last_function_call is now a list of insns. */ free_INSN_LIST_list (&deps->last_function_call); deps->last_function_call = alloc_INSN_LIST (insn, NULL_RTX); /* Before reload, begin a post-call group, so as to keep the lifetimes of hard registers correct. */ if (! reload_completed) ! deps->in_post_call_group_p = 1; } /* See comments on reemit_notes as to why we do this. --- 1306,1321 ---- all pending reads and writes, and start new dependencies starting from here. But only flush writes for constant calls (which may be passed a pointer to something we haven't written yet). */ ! flush_pending_lists (deps, insn, true, !CONST_OR_PURE_CALL_P (insn)); ! /* Remember the last function call for limiting lifetimes. */ free_INSN_LIST_list (&deps->last_function_call); deps->last_function_call = alloc_INSN_LIST (insn, NULL_RTX); /* Before reload, begin a post-call group, so as to keep the lifetimes of hard registers correct. */ if (! reload_completed) ! deps->in_post_call_group_p = true; } /* See comments on reemit_notes as to why we do this. *************** sched_analyze (deps, head, tail) *** 1371,1379 **** && (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG || NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END || NOTE_LINE_NUMBER (insn) == NOTE_INSN_EH_REGION_BEG ! || NOTE_LINE_NUMBER (insn) == NOTE_INSN_EH_REGION_END ! || (NOTE_LINE_NUMBER (insn) == NOTE_INSN_SETJMP ! && GET_CODE (PREV_INSN (insn)) != CALL_INSN))) { rtx rtx_region; --- 1335,1341 ---- && (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG || NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END || NOTE_LINE_NUMBER (insn) == NOTE_INSN_EH_REGION_BEG ! || NOTE_LINE_NUMBER (insn) == NOTE_INSN_EH_REGION_END)) { rtx rtx_region; *************** sched_analyze (deps, head, tail) *** 1389,1399 **** loop_notes = alloc_EXPR_LIST (REG_SAVE_NOTE, GEN_INT (NOTE_LINE_NUMBER (insn)), loop_notes); ! CONST_CALL_P (loop_notes) = CONST_CALL_P (insn); } if (insn == tail) ! return; } abort (); } --- 1351,1367 ---- loop_notes = alloc_EXPR_LIST (REG_SAVE_NOTE, GEN_INT (NOTE_LINE_NUMBER (insn)), loop_notes); ! CONST_OR_PURE_CALL_P (loop_notes) = CONST_OR_PURE_CALL_P (insn); } + if (current_sched_info->use_cselib) + cselib_process_insn (insn); if (insn == tail) ! { ! if (current_sched_info->use_cselib) ! cselib_finish (); ! return; ! } } abort (); } *************** init_deps (deps) *** 1479,1490 **** deps->pending_flush_length = 0; deps->last_pending_memory_flush = 0; deps->last_function_call = 0; ! deps->in_post_call_group_p = 0; ! ! deps->sched_before_next_call ! = gen_rtx_INSN (VOIDmode, 0, NULL_RTX, NULL_RTX, ! NULL_RTX, 0, NULL_RTX, NULL_RTX); ! LOG_LINKS (deps->sched_before_next_call) = 0; } /* Free insn lists found in DEPS. */ --- 1447,1454 ---- deps->pending_flush_length = 0; deps->last_pending_memory_flush = 0; deps->last_function_call = 0; ! deps->sched_before_next_call = 0; ! deps->in_post_call_group_p = false; } /* Free insn lists found in DEPS. */ *************** free_deps (deps) *** 1495,1500 **** --- 1459,1470 ---- { int i; + free_INSN_LIST_list (&deps->pending_read_insns); + free_EXPR_LIST_list (&deps->pending_read_mems); + free_INSN_LIST_list (&deps->pending_write_insns); + free_EXPR_LIST_list (&deps->pending_write_mems); + free_INSN_LIST_list (&deps->last_pending_memory_flush); + /* Without the EXECUTE_IF_SET, this loop is executed max_reg * nr_regions times. For a test case with 42000 regs and 8000 small basic blocks, this loop accounted for nearly 60% (84 sec) of the total -O2 runtime. */ *************** free_deps (deps) *** 1508,1514 **** CLEAR_REG_SET (&deps->reg_last_in_use); free (deps->reg_last); - deps->reg_last = NULL; } /* If it is profitable to use them, initialize caches for tracking --- 1478,1483 ---- *************** free_dependency_caches () *** 1547,1560 **** { if (true_dependency_cache) { ! free (true_dependency_cache); true_dependency_cache = NULL; ! free (anti_dependency_cache); anti_dependency_cache = NULL; ! free (output_dependency_cache); output_dependency_cache = NULL; #ifdef ENABLE_CHECKING ! free (forward_dependency_cache); forward_dependency_cache = NULL; #endif } --- 1516,1529 ---- { if (true_dependency_cache) { ! sbitmap_vector_free (true_dependency_cache); true_dependency_cache = NULL; ! sbitmap_vector_free (anti_dependency_cache); anti_dependency_cache = NULL; ! sbitmap_vector_free (output_dependency_cache); output_dependency_cache = NULL; #ifdef ENABLE_CHECKING ! sbitmap_vector_free (forward_dependency_cache); forward_dependency_cache = NULL; #endif } *************** init_deps_global () *** 1568,1574 **** { reg_pending_sets = INITIALIZE_REG_SET (reg_pending_sets_head); reg_pending_clobbers = INITIALIZE_REG_SET (reg_pending_clobbers_head); ! reg_pending_sets_all = 0; } /* Free everything used by the dependency analysis code. */ --- 1537,1544 ---- { reg_pending_sets = INITIALIZE_REG_SET (reg_pending_sets_head); reg_pending_clobbers = INITIALIZE_REG_SET (reg_pending_clobbers_head); ! reg_pending_uses = INITIALIZE_REG_SET (reg_pending_uses_head); ! reg_pending_barrier = false; } /* Free everything used by the dependency analysis code. */ *************** finish_deps_global () *** 1578,1581 **** --- 1548,1552 ---- { FREE_REG_SET (reg_pending_sets); FREE_REG_SET (reg_pending_clobbers); + FREE_REG_SET (reg_pending_uses); } diff -Nrc3pad gcc-3.0.4/gcc/sched-ebb.c gcc-3.1/gcc/sched-ebb.c *** gcc-3.0.4/gcc/sched-ebb.c Fri Jan 12 18:00:49 2001 --- gcc-3.1/gcc/sched-ebb.c Mon Dec 31 04:19:34 2001 *************** *** 4,24 **** Contributed by Michael Tiemann (tiemann@cygnus.com) Enhanced by, and currently maintained by, Jim Wilson (wilson@cygnus.com) ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it ! under the terms of the GNU General Public License as published by the ! Free Software Foundation; either version 2, or (at your option) any ! later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ! ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free ! the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "config.h" --- 4,24 ---- Contributed by Michael Tiemann (tiemann@cygnus.com) Enhanced by, and currently maintained by, Jim Wilson (wilson@cygnus.com) ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "config.h" *************** the Free Software Foundation, 59 Temple *** 36,41 **** --- 36,42 ---- #include "except.h" #include "toplev.h" #include "recog.h" + #include "cfglayout.h" #include "sched-int.h" /* The number of insns to be scheduled in total. */ *************** static struct sched_info ebb_sched_info *** 193,199 **** NULL, NULL, NULL, NULL, ! 0 }; /* Schedule a single extended basic block, defined by the boundaries HEAD --- 194,200 ---- NULL, NULL, NULL, NULL, ! 0, 1 }; /* Schedule a single extended basic block, defined by the boundaries HEAD *************** schedule_ebb (head, tail) *** 236,245 **** or after the last real insn of the block. So if the first insn has a REG_SAVE_NOTE which would otherwise be emitted before the insn, it is redundant with the note before the start of the ! block, and so we have to take it out. ! ! FIXME: Probably the same thing should be done with REG_SAVE_NOTEs ! referencing NOTE_INSN_SETJMP at the end of the block. */ if (INSN_P (head)) { rtx note; --- 237,243 ---- or after the last real insn of the block. So if the first insn has a REG_SAVE_NOTE which would otherwise be emitted before the insn, it is redundant with the note before the start of the ! block, and so we have to take it out. */ if (INSN_P (head)) { rtx note; *************** schedule_ebb (head, tail) *** 247,260 **** for (note = REG_NOTES (head); note; note = XEXP (note, 1)) if (REG_NOTE_KIND (note) == REG_SAVE_NOTE) { ! if (INTVAL (XEXP (note, 0)) != NOTE_INSN_SETJMP) ! { ! remove_note (head, note); ! note = XEXP (note, 1); ! remove_note (head, note); ! } ! else ! note = XEXP (note, 1); } } --- 245,253 ---- for (note = REG_NOTES (head); note; note = XEXP (note, 1)) if (REG_NOTE_KIND (note) == REG_SAVE_NOTE) { ! remove_note (head, note); ! note = XEXP (note, 1); ! remove_note (head, note); } } *************** schedule_ebbs (dump_file) *** 293,298 **** --- 286,293 ---- if (n_basic_blocks == 0) return; + scope_to_insns_initialize (); + sched_init (dump_file); current_sched_info = &ebb_sched_info; *************** schedule_ebbs (dump_file) *** 361,365 **** --- 356,362 ---- if (write_symbols != NO_DEBUG) rm_redundant_line_notes (); + scope_to_insns_finalize (); + sched_finish (); } diff -Nrc3pad gcc-3.0.4/gcc/sched-int.h gcc-3.1/gcc/sched-int.h *** gcc-3.0.4/gcc/sched-int.h Thu Jul 26 13:55:02 2001 --- gcc-3.1/gcc/sched-int.h Thu Feb 28 18:29:07 2002 *************** *** 3,23 **** Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it ! under the terms of the GNU General Public License as published by the ! Free Software Foundation; either version 2, or (at your option) any ! later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ! ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free ! the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Forward declaration. */ --- 3,23 ---- Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Forward declaration. */ *************** struct deps *** 68,86 **** too large. */ rtx last_pending_memory_flush; ! /* The last function call we have seen. All hard regs, and, of course, ! the last function call, must depend on this. */ rtx last_function_call; /* Used to keep post-call psuedo/hard reg movements together with the call. */ ! int in_post_call_group_p; ! ! /* The LOG_LINKS field of this is a list of insns which use a pseudo ! register that does not already cross a call. We create ! dependencies between each of those insn and the next call insn, ! to ensure that they won't cross a call after scheduling is done. */ ! rtx sched_before_next_call; /* The maximum register number for the following arrays. Before reload this is max_reg_num; after reload it is FIRST_PSEUDO_REGISTER. */ --- 68,87 ---- too large. */ rtx last_pending_memory_flush; ! /* A list of the last function calls we have seen. We use a list to ! represent last function calls from multiple predecessor blocks. ! Used to prevent register lifetimes from expanding unnecessarily. */ rtx last_function_call; + /* A list of insns which use a pseudo register that does not already + cross a call. We create dependencies between each of those insn + and the next call insn, to ensure that they won't cross a call after + scheduling is done. */ + rtx sched_before_next_call; + /* Used to keep post-call psuedo/hard reg movements together with the call. */ ! bool in_post_call_group_p; /* The maximum register number for the following arrays. Before reload this is max_reg_num; after reload it is FIRST_PSEUDO_REGISTER. */ *************** struct deps *** 95,100 **** --- 96,103 ---- rtx uses; rtx sets; rtx clobbers; + int uses_length; + int clobbers_length; } *reg_last; /* Element N is set for each register that has any non-zero element *************** struct sched_info *** 146,152 **** rtx head, tail; /* If nonzero, enables an additional sanity check in schedule_block. */ ! int queue_must_finish_empty; }; extern struct sched_info *current_sched_info; --- 149,160 ---- rtx head, tail; /* If nonzero, enables an additional sanity check in schedule_block. */ ! unsigned int queue_must_finish_empty:1; ! /* Nonzero if we should use cselib for better alias analysis. This ! must be 0 if the dependency information is used after sched_analyze ! has completed, e.g. if we're using it to initialize state for successor ! blocks in region scheduling. */ ! unsigned int use_cselib:1; }; extern struct sched_info *current_sched_info; *************** extern struct sched_info *current_sched_ *** 157,163 **** struct haifa_insn_data { /* A list of insns which depend on the instruction. Unlike LOG_LINKS, ! it represents forward dependancies. */ rtx depend; /* The line number note in effect for each insn. For line number --- 165,171 ---- struct haifa_insn_data { /* A list of insns which depend on the instruction. Unlike LOG_LINKS, ! it represents forward dependencies. */ rtx depend; /* The line number note in effect for each insn. For line number *************** struct haifa_insn_data *** 198,204 **** /* Some insns (e.g. call) are not allowed to move across blocks. */ unsigned int cant_move : 1; ! /* Set if there's DEF-USE dependance between some speculatively moved load insn and this one. */ unsigned int fed_by_spec_load : 1; unsigned int is_load_insn : 1; --- 206,212 ---- /* Some insns (e.g. call) are not allowed to move across blocks. */ unsigned int cant_move : 1; ! /* Set if there's DEF-USE dependence between some speculatively moved load insn and this one. */ unsigned int fed_by_spec_load : 1; unsigned int is_load_insn : 1; *************** extern void free_deps PARAMS ((struct de *** 269,275 **** extern void init_deps_global PARAMS ((void)); extern void finish_deps_global PARAMS ((void)); extern void compute_forward_dependences PARAMS ((rtx, rtx)); - extern int find_insn_mem_list PARAMS ((rtx, rtx, rtx, rtx)); extern rtx find_insn_list PARAMS ((rtx, rtx)); extern void init_dependency_caches PARAMS ((int)); extern void free_dependency_caches PARAMS ((void)); --- 277,282 ---- *************** extern void rm_other_notes PARAMS ((rtx, *** 287,292 **** --- 294,300 ---- extern int insn_issue_delay PARAMS ((rtx)); extern int set_priorities PARAMS ((rtx, rtx)); + extern rtx sched_emit_insn PARAMS ((rtx)); extern void schedule_block PARAMS ((int, int)); extern void sched_init PARAMS ((FILE *)); extern void sched_finish PARAMS ((void)); diff -Nrc3pad gcc-3.0.4/gcc/sched-rgn.c gcc-3.1/gcc/sched-rgn.c *** gcc-3.0.4/gcc/sched-rgn.c Fri Jan 19 18:28:58 2001 --- gcc-3.1/gcc/sched-rgn.c Tue Apr 9 20:39:01 2002 *************** *** 1,24 **** /* Instruction scheduling pass. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) Enhanced by, and currently maintained by, Jim Wilson (wilson@cygnus.com) ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it ! under the terms of the GNU General Public License as published by the ! Free Software Foundation; either version 2, or (at your option) any ! later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ! ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free ! the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* This pass implements list scheduling within basic blocks. It is --- 1,24 ---- /* Instruction scheduling pass. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) Enhanced by, and currently maintained by, Jim Wilson (wilson@cygnus.com) ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* This pass implements list scheduling within basic blocks. It is *************** the Free Software Foundation, 59 Temple *** 60,67 **** --- 60,79 ---- #include "except.h" #include "toplev.h" #include "recog.h" + #include "cfglayout.h" #include "sched-int.h" + /* Define when we want to do count REG_DEAD notes before and after scheduling + for sanity checking. We can't do that when conditional execution is used, + as REG_DEAD exist only for unconditional deaths. */ + + #if !defined (HAVE_conditional_execution) && defined (ENABLE_CHECKING) + #define CHECK_DEAD_NOTES 1 + #else + #define CHECK_DEAD_NOTES 0 + #endif + + #ifdef INSN_SCHEDULING /* Some accessor macros for h_i_d members only used within this file. */ #define INSN_REF_COUNT(INSN) (h_i_d[INSN_UID (INSN)].ref_count) *************** static int current_blocks; *** 152,161 **** /* The mapping from bb to block. */ #define BB_TO_BLOCK(bb) (rgn_bb_table[current_blocks + (bb)]) - /* Bit vectors and bitset operations are needed for computations on - the control flow graph. */ - - typedef unsigned HOST_WIDE_INT *bitset; typedef struct { int *first_member; /* Pointer to the list start in bitlst_table. */ --- 164,169 ---- *************** static int bitlst_table_last; *** 167,174 **** static int bitlst_table_size; static int *bitlst_table; ! static char bitset_member PARAMS ((bitset, int, int)); ! static void extract_bitlst PARAMS ((bitset, int, int, bitlst *)); /* Target info declarations. --- 175,181 ---- static int bitlst_table_size; static int *bitlst_table; ! static void extract_bitlst PARAMS ((sbitmap, bitlst *)); /* Target info declarations. *************** static void compute_trg_info PARAMS ((in *** 214,235 **** void debug_candidate PARAMS ((int)); void debug_candidates PARAMS ((int)); ! /* Bit-set of bbs, where bit 'i' stands for bb 'i'. */ ! typedef bitset bbset; ! ! /* Number of words of the bbset. */ ! static int bbset_size; ! ! /* Dominators array: dom[i] contains the bbset of dominators of bb i in the region. */ ! static bbset *dom; /* bb 0 is the only region entry. */ #define IS_RGN_ENTRY(bb) (!bb) /* Is bb_src dominated by bb_trg. */ #define IS_DOMINATED(bb_src, bb_trg) \ ! ( bitset_member (dom[bb_src], bb_trg, bbset_size) ) /* Probability: Prob[i] is a float in [0, 1] which is the probability of bb i relative to the region entry. */ --- 221,236 ---- void debug_candidate PARAMS ((int)); void debug_candidates PARAMS ((int)); ! /* Dominators array: dom[i] contains the sbitmap of dominators of bb i in the region. */ ! static sbitmap *dom; /* bb 0 is the only region entry. */ #define IS_RGN_ENTRY(bb) (!bb) /* Is bb_src dominated by bb_trg. */ #define IS_DOMINATED(bb_src, bb_trg) \ ! ( TEST_BIT (dom[bb_src], bb_trg) ) /* Probability: Prob[i] is a float in [0, 1] which is the probability of bb i relative to the region entry. */ *************** static float *prob; *** 242,248 **** prob[bb_trg]))) /* Bit-set of edges, where bit i stands for edge i. */ ! typedef bitset edgeset; /* Number of edges in the region. */ static int rgn_nr_edges; --- 243,249 ---- prob[bb_trg]))) /* Bit-set of edges, where bit i stands for edge i. */ ! typedef sbitmap edgeset; /* Number of edges in the region. */ static int rgn_nr_edges; *************** static int rgn_nr_edges; *** 250,260 **** /* Array of size rgn_nr_edges. */ static int *rgn_edges; - /* Number of words in an edgeset. */ - static int edgeset_size; - - /* Number of bits in an edgeset. */ - static int edgeset_bitsize; /* Mapping from each edge in the graph to its number in the rgn. */ static int *edge_to_bit; --- 251,256 ---- *************** static int haifa_classify_insn PARAMS (( *** 298,309 **** --- 294,309 ---- static int is_prisky PARAMS ((rtx, int, int)); static int is_exception_free PARAMS ((rtx, int, int)); + static bool sets_likely_spilled PARAMS ((rtx)); + static void sets_likely_spilled_1 PARAMS ((rtx, rtx, void *)); static void add_branch_dependences PARAMS ((rtx, rtx)); static void compute_block_backward_dependences PARAMS ((int)); void debug_dependencies PARAMS ((void)); static void init_regions PARAMS ((void)); static void schedule_region PARAMS ((int)); + static rtx concat_INSN_LIST PARAMS ((rtx, rtx)); + static void concat_insn_mem_list PARAMS ((rtx, rtx, rtx *, rtx *)); static void propagate_deps PARAMS ((int, struct deps *)); static void free_pending_lists PARAMS ((void)); *************** is_cfg_nonregular () *** 339,345 **** /* If we have exception handlers, then we consider the cfg not well structured. ?!? We should be able to handle this now that flow.c computes an accurate cfg for EH. */ ! if (exception_handler_labels) return 1; /* If we have non-jumping insns which refer to labels, then we consider --- 339,345 ---- /* If we have exception handlers, then we consider the cfg not well structured. ?!? We should be able to handle this now that flow.c computes an accurate cfg for EH. */ ! if (current_function_has_exception_handlers ()) return 1; /* If we have non-jumping insns which refer to labels, then we consider *************** new_edge (source, target) *** 482,562 **** } } - /* BITSET macros for operations on the control flow graph. */ - - /* Compute bitwise union of two bitsets. */ - #define BITSET_UNION(set1, set2, len) \ - do { register bitset tp = set1, sp = set2; \ - register int i; \ - for (i = 0; i < len; i++) \ - *(tp++) |= *(sp++); } while (0) - - /* Compute bitwise intersection of two bitsets. */ - #define BITSET_INTER(set1, set2, len) \ - do { register bitset tp = set1, sp = set2; \ - register int i; \ - for (i = 0; i < len; i++) \ - *(tp++) &= *(sp++); } while (0) - - /* Compute bitwise difference of two bitsets. */ - #define BITSET_DIFFER(set1, set2, len) \ - do { register bitset tp = set1, sp = set2; \ - register int i; \ - for (i = 0; i < len; i++) \ - *(tp++) &= ~*(sp++); } while (0) - - /* Inverts every bit of bitset 'set'. */ - #define BITSET_INVERT(set, len) \ - do { register bitset tmpset = set; \ - register int i; \ - for (i = 0; i < len; i++, tmpset++) \ - *tmpset = ~*tmpset; } while (0) - - /* Turn on the index'th bit in bitset set. */ - #define BITSET_ADD(set, index, len) \ - { \ - if (index >= HOST_BITS_PER_WIDE_INT * len) \ - abort (); \ - else \ - set[index/HOST_BITS_PER_WIDE_INT] |= \ - ((unsigned HOST_WIDE_INT) 1) << (index % HOST_BITS_PER_WIDE_INT); \ - } - - /* Turn off the index'th bit in set. */ - #define BITSET_REMOVE(set, index, len) \ - { \ - if (index >= HOST_BITS_PER_WIDE_INT * len) \ - abort (); \ - else \ - set[index/HOST_BITS_PER_WIDE_INT] &= \ - ~(((unsigned HOST_WIDE_INT) 1) << (index % HOST_BITS_PER_WIDE_INT)); \ - } - - /* Check if the index'th bit in bitset set is on. */ - - static char - bitset_member (set, index, len) - bitset set; - int index, len; - { - if (index >= HOST_BITS_PER_WIDE_INT * len) - abort (); - return ((set[index / HOST_BITS_PER_WIDE_INT] & - ((unsigned HOST_WIDE_INT) 1) << (index % HOST_BITS_PER_WIDE_INT)) - ? 1 : 0); - } - /* Translate a bit-set SET to a list BL of the bit-set members. */ static void ! extract_bitlst (set, len, bitlen, bl) ! bitset set; ! int len; ! int bitlen; bitlst *bl; { ! int i, j, offset; ! unsigned HOST_WIDE_INT word; /* bblst table space is reused in each call to extract_bitlst. */ bitlst_table_last = 0; --- 482,495 ---- } } /* Translate a bit-set SET to a list BL of the bit-set members. */ static void ! extract_bitlst (set, bl) ! sbitmap set; bitlst *bl; { ! int i; /* bblst table space is reused in each call to extract_bitlst. */ bitlst_table_last = 0; *************** extract_bitlst (set, len, bitlen, bl) *** 565,588 **** bl->nr_members = 0; /* Iterate over each word in the bitset. */ ! for (i = 0; i < len; i++) ! { ! word = set[i]; ! offset = i * HOST_BITS_PER_WIDE_INT; ! ! /* Iterate over each bit in the word, but do not ! go beyond the end of the defined bits. */ ! for (j = 0; offset < bitlen && word; j++) ! { ! if (word & 1) ! { ! bitlst_table[bitlst_table_last++] = offset; ! (bl->nr_members)++; ! } ! word >>= 1; ! ++offset; ! } ! } } --- 498,508 ---- bl->nr_members = 0; /* Iterate over each word in the bitset. */ ! EXECUTE_IF_SET_IN_SBITMAP (set, 0, i, ! { ! bitlst_table[bitlst_table_last++] = i; ! (bl->nr_members)++; ! }); } *************** find_rgns (edge_list, dom) *** 1112,1122 **** free (max_hdr); free (dfs_nr); free (stack); ! free (passed); ! free (header); ! free (inner); ! free (in_queue); ! free (in_stack); } /* Functions for regions scheduling information. */ --- 1032,1042 ---- free (max_hdr); free (dfs_nr); free (stack); ! sbitmap_free (passed); ! sbitmap_free (header); ! sbitmap_free (inner); ! sbitmap_free (in_queue); ! sbitmap_free (in_stack); } /* Functions for regions scheduling information. */ *************** compute_dom_prob_ps (bb) *** 1134,1167 **** prob[bb] = 0.0; if (IS_RGN_ENTRY (bb)) { ! BITSET_ADD (dom[bb], 0, bbset_size); prob[bb] = 1.0; return; } fst_in_edge = nxt_in_edge = IN_EDGES (BB_TO_BLOCK (bb)); ! /* Intialize dom[bb] to '111..1'. */ ! BITSET_INVERT (dom[bb], bbset_size); do { pred = FROM_BLOCK (nxt_in_edge); ! BITSET_INTER (dom[bb], dom[BLOCK_TO_BB (pred)], bbset_size); ! ! BITSET_UNION (ancestor_edges[bb], ancestor_edges[BLOCK_TO_BB (pred)], ! edgeset_size); ! BITSET_ADD (ancestor_edges[bb], EDGE_TO_BIT (nxt_in_edge), edgeset_size); nr_out_edges = 1; nr_rgn_out_edges = 0; fst_out_edge = OUT_EDGES (pred); nxt_out_edge = NEXT_OUT (fst_out_edge); - BITSET_UNION (pot_split[bb], pot_split[BLOCK_TO_BB (pred)], - edgeset_size); ! BITSET_ADD (pot_split[bb], EDGE_TO_BIT (fst_out_edge), edgeset_size); /* The successor doesn't belong in the region? */ if (CONTAINING_RGN (TO_BLOCK (fst_out_edge)) != --- 1054,1085 ---- prob[bb] = 0.0; if (IS_RGN_ENTRY (bb)) { ! SET_BIT (dom[bb], 0); prob[bb] = 1.0; return; } fst_in_edge = nxt_in_edge = IN_EDGES (BB_TO_BLOCK (bb)); ! /* Initialize dom[bb] to '111..1'. */ ! sbitmap_ones (dom[bb]); do { pred = FROM_BLOCK (nxt_in_edge); ! sbitmap_a_and_b (dom[bb], dom[bb], dom[BLOCK_TO_BB (pred)]); ! sbitmap_a_or_b (ancestor_edges[bb], ancestor_edges[bb], ancestor_edges[BLOCK_TO_BB (pred)]); ! SET_BIT (ancestor_edges[bb], EDGE_TO_BIT (nxt_in_edge)); nr_out_edges = 1; nr_rgn_out_edges = 0; fst_out_edge = OUT_EDGES (pred); nxt_out_edge = NEXT_OUT (fst_out_edge); ! sbitmap_a_or_b (pot_split[bb], pot_split[bb], pot_split[BLOCK_TO_BB (pred)]); ! ! SET_BIT (pot_split[bb], EDGE_TO_BIT (fst_out_edge)); /* The successor doesn't belong in the region? */ if (CONTAINING_RGN (TO_BLOCK (fst_out_edge)) != *************** compute_dom_prob_ps (bb) *** 1175,1181 **** if (CONTAINING_RGN (TO_BLOCK (nxt_out_edge)) != CONTAINING_RGN (BB_TO_BLOCK (bb))) ++nr_rgn_out_edges; ! BITSET_ADD (pot_split[bb], EDGE_TO_BIT (nxt_out_edge), edgeset_size); nxt_out_edge = NEXT_OUT (nxt_out_edge); } --- 1093,1099 ---- if (CONTAINING_RGN (TO_BLOCK (nxt_out_edge)) != CONTAINING_RGN (BB_TO_BLOCK (bb))) ++nr_rgn_out_edges; ! SET_BIT (pot_split[bb], EDGE_TO_BIT (nxt_out_edge)); nxt_out_edge = NEXT_OUT (nxt_out_edge); } *************** compute_dom_prob_ps (bb) *** 1192,1199 **** } while (fst_in_edge != nxt_in_edge); ! BITSET_ADD (dom[bb], bb, bbset_size); ! BITSET_DIFFER (pot_split[bb], ancestor_edges[bb], edgeset_size); if (sched_verbose >= 2) fprintf (sched_dump, ";; bb_prob(%d, %d) = %3d\n", bb, BB_TO_BLOCK (bb), --- 1110,1117 ---- } while (fst_in_edge != nxt_in_edge); ! SET_BIT (dom[bb], bb); ! sbitmap_difference (pot_split[bb], pot_split[bb], ancestor_edges[bb]); if (sched_verbose >= 2) fprintf (sched_dump, ";; bb_prob(%d, %d) = %3d\n", bb, BB_TO_BLOCK (bb), *************** split_edges (bb_src, bb_trg, bl) *** 1211,1224 **** int bb_trg; edgelst *bl; { ! int es = edgeset_size; ! edgeset src = (edgeset) xcalloc (es, sizeof (HOST_WIDE_INT)); ! while (es--) ! src[es] = (pot_split[bb_src])[es]; ! BITSET_DIFFER (src, pot_split[bb_trg], edgeset_size); ! extract_bitlst (src, edgeset_size, edgeset_bitsize, bl); ! free (src); } /* Find the valid candidate-source-blocks for the target block TRG, compute --- 1129,1140 ---- int bb_trg; edgelst *bl; { ! sbitmap src = (edgeset) sbitmap_alloc (pot_split[bb_src]->n_bits); ! sbitmap_copy (src, pot_split[bb_src]); ! sbitmap_difference (src, src, pot_split[bb_trg]); ! extract_bitlst (src, bl); ! sbitmap_free (src); } /* Find the valid candidate-source-blocks for the target block TRG, compute *************** static void *** 1229,1235 **** compute_trg_info (trg) int trg; { ! register candidate *sp; edgelst el; int check_block, update_idx; int i, j, k, fst_edge, nxt_edge; --- 1145,1151 ---- compute_trg_info (trg) int trg; { ! candidate *sp; edgelst el; int check_block, update_idx; int i, j, k, fst_edge, nxt_edge; *************** check_live_1 (src, x) *** 1384,1392 **** int src; rtx x; { ! register int i; ! register int regno; ! register rtx reg = SET_DEST (x); if (reg == 0) return 1; --- 1300,1308 ---- int src; rtx x; { ! int i; ! int regno; ! rtx reg = SET_DEST (x); if (reg == 0) return 1; *************** check_live_1 (src, x) *** 1398,1404 **** if (GET_CODE (reg) == PARALLEL) { ! register int i; for (i = XVECLEN (reg, 0) - 1; i >= 0; i--) if (XEXP (XVECEXP (reg, 0, i), 0) != 0) --- 1314,1320 ---- if (GET_CODE (reg) == PARALLEL) { ! int i; for (i = XVECLEN (reg, 0) - 1; i >= 0; i--) if (XEXP (XVECEXP (reg, 0, i), 0) != 0) *************** update_live_1 (src, x) *** 1464,1472 **** int src; rtx x; { ! register int i; ! register int regno; ! register rtx reg = SET_DEST (x); if (reg == 0) return; --- 1380,1388 ---- int src; rtx x; { ! int i; ! int regno; ! rtx reg = SET_DEST (x); if (reg == 0) return; *************** update_live_1 (src, x) *** 1478,1484 **** if (GET_CODE (reg) == PARALLEL) { ! register int i; for (i = XVECLEN (reg, 0) - 1; i >= 0; i--) if (XEXP (XVECEXP (reg, 0, i), 0) != 0) --- 1394,1400 ---- if (GET_CODE (reg) == PARALLEL) { ! int i; for (i = XVECLEN (reg, 0) - 1; i >= 0; i--) if (XEXP (XVECEXP (reg, 0, i), 0) != 0) *************** enum INSN_TRAP_CLASS *** 1647,1663 **** #define IS_REACHABLE(bb_from, bb_to) \ (bb_from == bb_to \ || IS_RGN_ENTRY (bb_from) \ ! || (bitset_member (ancestor_edges[bb_to], \ ! EDGE_TO_BIT (IN_EDGES (BB_TO_BLOCK (bb_from))), \ ! edgeset_size))) /* Non-zero iff the address is comprised from at most 1 register. */ #define CONST_BASED_ADDRESS_P(x) \ (GET_CODE (x) == REG \ || ((GET_CODE (x) == PLUS || GET_CODE (x) == MINUS \ || (GET_CODE (x) == LO_SUM)) \ ! && (GET_CODE (XEXP (x, 0)) == CONST_INT \ ! || GET_CODE (XEXP (x, 1)) == CONST_INT))) /* Turns on the fed_by_spec_load flag for insns fed by load_insn. */ --- 1563,1578 ---- #define IS_REACHABLE(bb_from, bb_to) \ (bb_from == bb_to \ || IS_RGN_ENTRY (bb_from) \ ! || (TEST_BIT (ancestor_edges[bb_to], \ ! EDGE_TO_BIT (IN_EDGES (BB_TO_BLOCK (bb_from)))))) /* Non-zero iff the address is comprised from at most 1 register. */ #define CONST_BASED_ADDRESS_P(x) \ (GET_CODE (x) == REG \ || ((GET_CODE (x) == PLUS || GET_CODE (x) == MINUS \ || (GET_CODE (x) == LO_SUM)) \ ! && (CONSTANT_P (XEXP (x, 0)) \ ! || CONSTANT_P (XEXP (x, 1))))) /* Turns on the fed_by_spec_load flag for insns fed by load_insn. */ *************** is_pfree (load_insn, bb_src, bb_trg) *** 1770,1776 **** int bb_src, bb_trg; { rtx back_link; ! register candidate *candp = candidate_table + bb_src; if (candp->split_bbs.nr_members != 1) /* Must have exactly one escape block. */ --- 1685,1691 ---- int bb_src, bb_trg; { rtx back_link; ! candidate *candp = candidate_table + bb_src; if (candp->split_bbs.nr_members != 1) /* Must have exactly one escape block. */ *************** may_trap_exp (x, is_store) *** 1828,1834 **** code = GET_CODE (x); if (is_store) { ! if (code == MEM) return TRAP_RISKY; else return TRAP_FREE; --- 1743,1749 ---- code = GET_CODE (x); if (is_store) { ! if (code == MEM && may_trap_p (x)) return TRAP_RISKY; else return TRAP_FREE; *************** init_ready_list (ready) *** 2148,2154 **** { rtx next; ! /* Note that we havn't squirrled away the notes for blocks other than the current. So if this is a speculative insn, NEXT might otherwise be a note. */ next = next_nonnote_insn (insn); --- 2063,2069 ---- { rtx next; ! /* Note that we haven't squirreled away the notes for blocks other than the current. So if this is a speculative insn, NEXT might otherwise be a note. */ next = next_nonnote_insn (insn); *************** can_schedule_ready_p (insn) *** 2201,2207 **** while (SCHED_GROUP_P (temp)) temp = PREV_INSN (temp); ! /* Update source block boundaries. */ b1 = BLOCK_FOR_INSN (temp); if (temp == b1->head && insn == b1->end) { --- 2116,2122 ---- while (SCHED_GROUP_P (temp)) temp = PREV_INSN (temp); ! /* Update source block boundaries. */ b1 = BLOCK_FOR_INSN (temp); if (temp == b1->head && insn == b1->end) { *************** static struct sched_info region_sched_in *** 2352,2360 **** NULL, NULL, NULL, NULL, ! 0 }; /* Add dependences so that branches are scheduled to run last in their block. */ --- 2267,2300 ---- NULL, NULL, NULL, NULL, ! 0, 0 }; + /* Determine if PAT sets a CLASS_LIKELY_SPILLED_P register. */ + + static bool + sets_likely_spilled (pat) + rtx pat; + { + bool ret = false; + note_stores (pat, sets_likely_spilled_1, &ret); + return ret; + } + + static void + sets_likely_spilled_1 (x, pat, data) + rtx x, pat; + void *data; + { + bool *ret = (bool *) data; + + if (GET_CODE (pat) == SET + && REG_P (x) + && REGNO (x) < FIRST_PSEUDO_REGISTER + && CLASS_LIKELY_SPILLED_P (REGNO_REG_CLASS (REGNO (x)))) + *ret = true; + } + /* Add dependences so that branches are scheduled to run last in their block. */ *************** add_branch_dependences (head, tail) *** 2364,2378 **** { rtx insn, last; ! /* For all branches, calls, uses, clobbers, and cc0 setters, force them ! to remain in order at the end of the block by adding dependencies and ! giving the last a high priority. There may be notes present, and ! prev_head may also be a note. Branches must obviously remain at the end. Calls should remain at the end since moving them results in worse register allocation. Uses remain ! at the end to ensure proper register allocation. cc0 setters remaim ! at the end because they can't be moved away from their cc0 user. */ insn = tail; last = 0; while (GET_CODE (insn) == CALL_INSN --- 2304,2325 ---- { rtx insn, last; ! /* For all branches, calls, uses, clobbers, cc0 setters, and instructions ! that can throw exceptions, force them to remain in order at the end of ! the block by adding dependencies and giving the last a high priority. ! There may be notes present, and prev_head may also be a note. Branches must obviously remain at the end. Calls should remain at the end since moving them results in worse register allocation. Uses remain ! at the end to ensure proper register allocation. ! ! cc0 setters remaim at the end because they can't be moved away from ! their cc0 user. ! ! Insns setting CLASS_LIKELY_SPILLED_P registers (usually return values) ! are not moved before reload because we can wind up with register ! allocation failures. */ ! insn = tail; last = 0; while (GET_CODE (insn) == CALL_INSN *************** add_branch_dependences (head, tail) *** 2380,2395 **** || (GET_CODE (insn) == INSN && (GET_CODE (PATTERN (insn)) == USE || GET_CODE (PATTERN (insn)) == CLOBBER #ifdef HAVE_cc0 || sets_cc0_p (PATTERN (insn)) #endif ! )) || GET_CODE (insn) == NOTE) { if (GET_CODE (insn) != NOTE) { ! if (last != 0 ! && !find_insn_list (insn, LOG_LINKS (last))) { add_dependence (last, insn, REG_DEP_ANTI); INSN_REF_COUNT (insn)++; --- 2327,2343 ---- || (GET_CODE (insn) == INSN && (GET_CODE (PATTERN (insn)) == USE || GET_CODE (PATTERN (insn)) == CLOBBER + || can_throw_internal (insn) #ifdef HAVE_cc0 || sets_cc0_p (PATTERN (insn)) #endif ! || (!reload_completed ! && sets_likely_spilled (PATTERN (insn))))) || GET_CODE (insn) == NOTE) { if (GET_CODE (insn) != NOTE) { ! if (last != 0 && !find_insn_list (insn, LOG_LINKS (last))) { add_dependence (last, insn, REG_DEP_ANTI); INSN_REF_COUNT (insn)++; *************** add_branch_dependences (head, tail) *** 2445,2569 **** static struct deps *bb_deps; /* After computing the dependencies for block BB, propagate the dependencies found in TMP_DEPS to the successors of the block. */ static void ! propagate_deps (bb, tmp_deps) int bb; ! struct deps *tmp_deps; { int b = BB_TO_BLOCK (bb); int e, first_edge; - int reg; - rtx link_insn, link_mem; - rtx u; - - /* These lists should point to the right place, for correct - freeing later. */ - bb_deps[bb].pending_read_insns = tmp_deps->pending_read_insns; - bb_deps[bb].pending_read_mems = tmp_deps->pending_read_mems; - bb_deps[bb].pending_write_insns = tmp_deps->pending_write_insns; - bb_deps[bb].pending_write_mems = tmp_deps->pending_write_mems; /* bb's structures are inherited by its successors. */ first_edge = e = OUT_EDGES (b); ! if (e <= 0) ! return; ! ! do ! { ! rtx x; ! int b_succ = TO_BLOCK (e); ! int bb_succ = BLOCK_TO_BB (b_succ); ! struct deps *succ_deps = bb_deps + bb_succ; ! ! /* Only bbs "below" bb, in the same region, are interesting. */ ! if (CONTAINING_RGN (b) != CONTAINING_RGN (b_succ) ! || bb_succ <= bb) ! { ! e = NEXT_OUT (e); ! continue; ! } ! ! /* The reg_last lists are inherited by bb_succ. */ ! EXECUTE_IF_SET_IN_REG_SET (&tmp_deps->reg_last_in_use, 0, reg, ! { ! struct deps_reg *tmp_deps_reg = &tmp_deps->reg_last[reg]; ! struct deps_reg *succ_deps_reg = &succ_deps->reg_last[reg]; ! for (u = tmp_deps_reg->uses; u; u = XEXP (u, 1)) ! if (! find_insn_list (XEXP (u, 0), succ_deps_reg->uses)) ! succ_deps_reg->uses ! = alloc_INSN_LIST (XEXP (u, 0), succ_deps_reg->uses); ! for (u = tmp_deps_reg->sets; u; u = XEXP (u, 1)) ! if (! find_insn_list (XEXP (u, 0), succ_deps_reg->sets)) ! succ_deps_reg->sets ! = alloc_INSN_LIST (XEXP (u, 0), succ_deps_reg->sets); ! for (u = tmp_deps_reg->clobbers; u; u = XEXP (u, 1)) ! if (! find_insn_list (XEXP (u, 0), succ_deps_reg->clobbers)) ! succ_deps_reg->clobbers ! = alloc_INSN_LIST (XEXP (u, 0), succ_deps_reg->clobbers); ! }); ! IOR_REG_SET (&succ_deps->reg_last_in_use, &tmp_deps->reg_last_in_use); ! /* Mem read/write lists are inherited by bb_succ. */ ! link_insn = tmp_deps->pending_read_insns; ! link_mem = tmp_deps->pending_read_mems; ! while (link_insn) ! { ! if (!(find_insn_mem_list (XEXP (link_insn, 0), ! XEXP (link_mem, 0), ! succ_deps->pending_read_insns, ! succ_deps->pending_read_mems))) ! add_insn_mem_dependence (succ_deps, &succ_deps->pending_read_insns, ! &succ_deps->pending_read_mems, ! XEXP (link_insn, 0), XEXP (link_mem, 0)); ! link_insn = XEXP (link_insn, 1); ! link_mem = XEXP (link_mem, 1); ! } ! link_insn = tmp_deps->pending_write_insns; ! link_mem = tmp_deps->pending_write_mems; ! while (link_insn) ! { ! if (!(find_insn_mem_list (XEXP (link_insn, 0), ! XEXP (link_mem, 0), ! succ_deps->pending_write_insns, ! succ_deps->pending_write_mems))) ! add_insn_mem_dependence (succ_deps, ! &succ_deps->pending_write_insns, ! &succ_deps->pending_write_mems, ! XEXP (link_insn, 0), XEXP (link_mem, 0)); ! link_insn = XEXP (link_insn, 1); ! link_mem = XEXP (link_mem, 1); ! } ! /* last_function_call is inherited by bb_succ. */ ! for (u = tmp_deps->last_function_call; u; u = XEXP (u, 1)) ! if (! find_insn_list (XEXP (u, 0), succ_deps->last_function_call)) ! succ_deps->last_function_call ! = alloc_INSN_LIST (XEXP (u, 0), succ_deps->last_function_call); ! /* last_pending_memory_flush is inherited by bb_succ. */ ! for (u = tmp_deps->last_pending_memory_flush; u; u = XEXP (u, 1)) ! if (! find_insn_list (XEXP (u, 0), ! succ_deps->last_pending_memory_flush)) ! succ_deps->last_pending_memory_flush ! = alloc_INSN_LIST (XEXP (u, 0), ! succ_deps->last_pending_memory_flush); ! /* sched_before_next_call is inherited by bb_succ. */ ! x = LOG_LINKS (tmp_deps->sched_before_next_call); ! for (; x; x = XEXP (x, 1)) ! add_dependence (succ_deps->sched_before_next_call, ! XEXP (x, 0), REG_DEP_ANTI); ! e = NEXT_OUT (e); ! } ! while (e != first_edge); } /* Compute backward dependences inside bb. In a multiple blocks region: --- 2393,2516 ---- static struct deps *bb_deps; + /* Duplicate the INSN_LIST elements of COPY and prepend them to OLD. */ + + static rtx + concat_INSN_LIST (copy, old) + rtx copy, old; + { + rtx new = old; + for (; copy ; copy = XEXP (copy, 1)) + new = alloc_INSN_LIST (XEXP (copy, 0), new); + return new; + } + + static void + concat_insn_mem_list (copy_insns, copy_mems, old_insns_p, old_mems_p) + rtx copy_insns, copy_mems; + rtx *old_insns_p, *old_mems_p; + { + rtx new_insns = *old_insns_p; + rtx new_mems = *old_mems_p; + + while (copy_insns) + { + new_insns = alloc_INSN_LIST (XEXP (copy_insns, 0), new_insns); + new_mems = alloc_EXPR_LIST (VOIDmode, XEXP (copy_mems, 0), new_mems); + copy_insns = XEXP (copy_insns, 1); + copy_mems = XEXP (copy_mems, 1); + } + + *old_insns_p = new_insns; + *old_mems_p = new_mems; + } + /* After computing the dependencies for block BB, propagate the dependencies found in TMP_DEPS to the successors of the block. */ static void ! propagate_deps (bb, pred_deps) int bb; ! struct deps *pred_deps; { int b = BB_TO_BLOCK (bb); int e, first_edge; /* bb's structures are inherited by its successors. */ first_edge = e = OUT_EDGES (b); ! if (e > 0) ! do ! { ! int b_succ = TO_BLOCK (e); ! int bb_succ = BLOCK_TO_BB (b_succ); ! struct deps *succ_deps = bb_deps + bb_succ; ! int reg; ! /* Only bbs "below" bb, in the same region, are interesting. */ ! if (CONTAINING_RGN (b) != CONTAINING_RGN (b_succ) ! || bb_succ <= bb) ! { ! e = NEXT_OUT (e); ! continue; ! } ! /* The reg_last lists are inherited by bb_succ. */ ! EXECUTE_IF_SET_IN_REG_SET (&pred_deps->reg_last_in_use, 0, reg, ! { ! struct deps_reg *pred_rl = &pred_deps->reg_last[reg]; ! struct deps_reg *succ_rl = &succ_deps->reg_last[reg]; ! succ_rl->uses = concat_INSN_LIST (pred_rl->uses, succ_rl->uses); ! succ_rl->sets = concat_INSN_LIST (pred_rl->sets, succ_rl->sets); ! succ_rl->clobbers = concat_INSN_LIST (pred_rl->clobbers, ! succ_rl->clobbers); ! succ_rl->uses_length += pred_rl->uses_length; ! succ_rl->clobbers_length += pred_rl->clobbers_length; ! }); ! IOR_REG_SET (&succ_deps->reg_last_in_use, &pred_deps->reg_last_in_use); ! /* Mem read/write lists are inherited by bb_succ. */ ! concat_insn_mem_list (pred_deps->pending_read_insns, ! pred_deps->pending_read_mems, ! &succ_deps->pending_read_insns, ! &succ_deps->pending_read_mems); ! concat_insn_mem_list (pred_deps->pending_write_insns, ! pred_deps->pending_write_mems, ! &succ_deps->pending_write_insns, ! &succ_deps->pending_write_mems); ! succ_deps->last_pending_memory_flush ! = concat_INSN_LIST (pred_deps->last_pending_memory_flush, ! succ_deps->last_pending_memory_flush); ! ! succ_deps->pending_lists_length += pred_deps->pending_lists_length; ! succ_deps->pending_flush_length += pred_deps->pending_flush_length; ! /* last_function_call is inherited by bb_succ. */ ! succ_deps->last_function_call ! = concat_INSN_LIST (pred_deps->last_function_call, ! succ_deps->last_function_call); ! /* sched_before_next_call is inherited by bb_succ. */ ! succ_deps->sched_before_next_call ! = concat_INSN_LIST (pred_deps->sched_before_next_call, ! succ_deps->sched_before_next_call); ! e = NEXT_OUT (e); ! } ! while (e != first_edge); ! /* These lists should point to the right place, for correct ! freeing later. */ ! bb_deps[bb].pending_read_insns = pred_deps->pending_read_insns; ! bb_deps[bb].pending_read_mems = pred_deps->pending_read_mems; ! bb_deps[bb].pending_write_insns = pred_deps->pending_write_insns; ! bb_deps[bb].pending_write_mems = pred_deps->pending_write_mems; ! /* Can't allow these to be freed twice. */ ! pred_deps->pending_read_insns = 0; ! pred_deps->pending_read_mems = 0; ! pred_deps->pending_write_insns = 0; ! pred_deps->pending_write_mems = 0; } /* Compute backward dependences inside bb. In a multiple blocks region: *************** schedule_region (rgn) *** 2747,2757 **** prob = (float *) xmalloc ((current_nr_blocks) * sizeof (float)); ! bbset_size = current_nr_blocks / HOST_BITS_PER_WIDE_INT + 1; ! dom = (bbset *) xmalloc (current_nr_blocks * sizeof (bbset)); ! for (i = 0; i < current_nr_blocks; i++) ! dom[i] = (bbset) xcalloc (bbset_size, sizeof (HOST_WIDE_INT)); ! /* Edge to bit. */ rgn_nr_edges = 0; edge_to_bit = (int *) xmalloc (nr_edges * sizeof (int)); --- 2694,2701 ---- prob = (float *) xmalloc ((current_nr_blocks) * sizeof (float)); ! dom = sbitmap_vector_alloc (current_nr_blocks, current_nr_blocks); ! sbitmap_vector_zero (dom, current_nr_blocks); /* Edge to bit. */ rgn_nr_edges = 0; edge_to_bit = (int *) xmalloc (nr_edges * sizeof (int)); *************** schedule_region (rgn) *** 2766,2783 **** rgn_edges[rgn_nr_edges++] = i; /* Split edges. */ ! edgeset_size = rgn_nr_edges / HOST_BITS_PER_WIDE_INT + 1; ! edgeset_bitsize = rgn_nr_edges; ! pot_split = (edgeset *) xmalloc (current_nr_blocks * sizeof (edgeset)); ! ancestor_edges ! = (edgeset *) xmalloc (current_nr_blocks * sizeof (edgeset)); ! for (i = 0; i < current_nr_blocks; i++) ! { ! pot_split[i] = ! (edgeset) xcalloc (edgeset_size, sizeof (HOST_WIDE_INT)); ! ancestor_edges[i] = ! (edgeset) xcalloc (edgeset_size, sizeof (HOST_WIDE_INT)); ! } /* Compute probabilities, dominators, split_edges. */ for (bb = 0; bb < current_nr_blocks; bb++) --- 2710,2719 ---- rgn_edges[rgn_nr_edges++] = i; /* Split edges. */ ! pot_split = sbitmap_vector_alloc (current_nr_blocks, rgn_nr_edges); ! sbitmap_vector_zero (pot_split, current_nr_blocks); ! ancestor_edges = sbitmap_vector_alloc (current_nr_blocks, rgn_nr_edges); ! sbitmap_vector_zero (ancestor_edges, current_nr_blocks); /* Compute probabilities, dominators, split_edges. */ for (bb = 0; bb < current_nr_blocks; bb++) *************** schedule_region (rgn) *** 2809,2818 **** or after the last real insn of the block. So if the first insn has a REG_SAVE_NOTE which would otherwise be emitted before the insn, it is redundant with the note before the start of the ! block, and so we have to take it out. ! ! FIXME: Probably the same thing should be done with REG_SAVE_NOTEs ! referencing NOTE_INSN_SETJMP at the end of the block. */ if (INSN_P (head)) { rtx note; --- 2745,2751 ---- or after the last real insn of the block. So if the first insn has a REG_SAVE_NOTE which would otherwise be emitted before the insn, it is redundant with the note before the start of the ! block, and so we have to take it out. */ if (INSN_P (head)) { rtx note; *************** schedule_region (rgn) *** 2820,2833 **** for (note = REG_NOTES (head); note; note = XEXP (note, 1)) if (REG_NOTE_KIND (note) == REG_SAVE_NOTE) { ! if (INTVAL (XEXP (note, 0)) != NOTE_INSN_SETJMP) ! { ! remove_note (head, note); ! note = XEXP (note, 1); ! remove_note (head, note); ! } ! else ! note = XEXP (note, 1); } } --- 2753,2761 ---- for (note = REG_NOTES (head); note; note = XEXP (note, 1)) if (REG_NOTE_KIND (note) == REG_SAVE_NOTE) { ! remove_note (head, note); ! note = XEXP (note, 1); ! remove_note (head, note); } } *************** schedule_region (rgn) *** 2883,2902 **** if (current_nr_blocks > 1) { - int i; - free (prob); ! for (i = 0; i < current_nr_blocks; ++i) ! { ! free (dom[i]); ! free (pot_split[i]); ! free (ancestor_edges[i]); ! } ! free (dom); free (edge_to_bit); free (rgn_edges); - free (pot_split); - free (ancestor_edges); } } --- 2811,2822 ---- if (current_nr_blocks > 1) { free (prob); ! sbitmap_vector_free (dom); ! sbitmap_vector_free (pot_split); ! sbitmap_vector_free (ancestor_edges); free (edge_to_bit); free (rgn_edges); } } *************** init_regions () *** 2918,2925 **** block_to_bb = (int *) xmalloc ((n_basic_blocks) * sizeof (int)); containing_rgn = (int *) xmalloc ((n_basic_blocks) * sizeof (int)); - blocks = sbitmap_alloc (n_basic_blocks); - /* Compute regions for scheduling. */ if (reload_completed || n_basic_blocks == 1 --- 2838,2843 ---- *************** init_regions () *** 2977,2997 **** } } - deaths_in_region = (int *) xmalloc (sizeof (int) * nr_regions); ! /* Remove all death notes from the subroutine. */ ! for (rgn = 0; rgn < nr_regions; rgn++) { ! int b; ! sbitmap_zero (blocks); ! for (b = RGN_NR_BLOCKS (rgn) - 1; b >= 0; --b) ! SET_BIT (blocks, rgn_bb_table[RGN_BLOCKS (rgn) + b]); ! deaths_in_region[rgn] = count_or_remove_death_notes (blocks, 1); } ! ! sbitmap_free (blocks); } /* The one entry point in this file. DUMP_FILE is the dump file for --- 2895,2920 ---- } } ! if (CHECK_DEAD_NOTES) { ! blocks = sbitmap_alloc (n_basic_blocks); ! deaths_in_region = (int *) xmalloc (sizeof (int) * nr_regions); ! /* Remove all death notes from the subroutine. */ ! for (rgn = 0; rgn < nr_regions; rgn++) ! { ! int b; ! sbitmap_zero (blocks); ! for (b = RGN_NR_BLOCKS (rgn) - 1; b >= 0; --b) ! SET_BIT (blocks, rgn_bb_table[RGN_BLOCKS (rgn) + b]); ! deaths_in_region[rgn] = count_or_remove_death_notes (blocks, 1); ! } ! sbitmap_free (blocks); } ! else ! count_or_remove_death_notes (NULL, 1); } /* The one entry point in this file. DUMP_FILE is the dump file for *************** schedule_insns (dump_file) *** 3010,3015 **** --- 2933,2940 ---- if (n_basic_blocks == 0) return; + scope_to_insns_initialize (); + nr_inter = 0; nr_spec = 0; *************** schedule_insns (dump_file) *** 3025,3031 **** /* Update life analysis for the subroutine. Do single block regions first so that we can verify that live_at_start didn't change. Then ! do all other blocks. */ /* ??? There is an outside possibility that update_life_info, or more to the point propagate_block, could get called with non-zero flags more than once for one basic block. This would be kinda bad if it --- 2950,2956 ---- /* Update life analysis for the subroutine. Do single block regions first so that we can verify that live_at_start didn't change. Then ! do all other blocks. */ /* ??? There is an outside possibility that update_life_info, or more to the point propagate_block, could get called with non-zero flags more than once for one basic block. This would be kinda bad if it *************** schedule_insns (dump_file) *** 3044,3082 **** sbitmap_ones (large_region_blocks); blocks = sbitmap_alloc (n_basic_blocks); for (rgn = 0; rgn < nr_regions; rgn++) if (RGN_NR_BLOCKS (rgn) > 1) any_large_regions = 1; else { - sbitmap_zero (blocks); SET_BIT (blocks, rgn_bb_table[RGN_BLOCKS (rgn)]); RESET_BIT (large_region_blocks, rgn_bb_table[RGN_BLOCKS (rgn)]); - - /* Don't update reg info after reload, since that affects - regs_ever_live, which should not change after reload. */ - update_life_info (blocks, UPDATE_LIFE_LOCAL, - (reload_completed ? PROP_DEATH_NOTES - : PROP_DEATH_NOTES | PROP_REG_INFO)); - - #ifndef HAVE_conditional_execution - /* ??? REG_DEAD notes only exist for unconditional deaths. We need - a count of the conditional plus unconditional deaths for this to - work out. */ - /* In the single block case, the count of registers that died should - not have changed during the schedule. */ - if (count_or_remove_death_notes (blocks, 0) != deaths_in_region[rgn]) - abort (); - #endif } if (any_large_regions) { update_life_info (large_region_blocks, UPDATE_LIFE_GLOBAL, PROP_DEATH_NOTES | PROP_REG_INFO); } /* Reposition the prologue and epilogue notes in case we moved the prologue/epilogue insns. */ if (reload_completed) --- 2969,3017 ---- sbitmap_ones (large_region_blocks); blocks = sbitmap_alloc (n_basic_blocks); + sbitmap_zero (blocks); + /* Update life information. For regions consisting of multiple blocks + we've possibly done interblock scheduling that affects global liveness. + For regions consisting of single blocks we need to do only local + liveness. */ for (rgn = 0; rgn < nr_regions; rgn++) if (RGN_NR_BLOCKS (rgn) > 1) any_large_regions = 1; else { SET_BIT (blocks, rgn_bb_table[RGN_BLOCKS (rgn)]); RESET_BIT (large_region_blocks, rgn_bb_table[RGN_BLOCKS (rgn)]); } + /* Don't update reg info after reload, since that affects + regs_ever_live, which should not change after reload. */ + update_life_info (blocks, UPDATE_LIFE_LOCAL, + (reload_completed ? PROP_DEATH_NOTES + : PROP_DEATH_NOTES | PROP_REG_INFO)); if (any_large_regions) { update_life_info (large_region_blocks, UPDATE_LIFE_GLOBAL, PROP_DEATH_NOTES | PROP_REG_INFO); } + if (CHECK_DEAD_NOTES) + { + /* Verify the counts of basic block notes in single the basic block + regions. */ + for (rgn = 0; rgn < nr_regions; rgn++) + if (RGN_NR_BLOCKS (rgn) == 1) + { + sbitmap_zero (blocks); + SET_BIT (blocks, rgn_bb_table[RGN_BLOCKS (rgn)]); + + if (deaths_in_region[rgn] + != count_or_remove_death_notes (blocks, 0)) + abort (); + } + free (deaths_in_region); + } + /* Reposition the prologue and epilogue notes in case we moved the prologue/epilogue insns. */ if (reload_completed) *************** schedule_insns (dump_file) *** 3086,3091 **** --- 3021,3028 ---- if (write_symbols != NO_DEBUG) rm_redundant_line_notes (); + scope_to_insns_finalize (); + if (sched_verbose) { if (reload_completed == 0 && flag_schedule_interblock) *************** schedule_insns (dump_file) *** 3129,3135 **** sbitmap_free (blocks); sbitmap_free (large_region_blocks); - - free (deaths_in_region); } #endif --- 3066,3070 ---- diff -Nrc3pad gcc-3.0.4/gcc/sched-vis.c gcc-3.1/gcc/sched-vis.c *** gcc-3.0.4/gcc/sched-vis.c Fri Dec 22 12:27:36 2000 --- gcc-3.1/gcc/sched-vis.c Tue Jan 22 14:33:33 2002 *************** *** 1,24 **** /* Instruction scheduling pass. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) Enhanced by, and currently maintained by, Jim Wilson (wilson@cygnus.com) ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it ! under the terms of the GNU General Public License as published by the ! Free Software Foundation; either version 2, or (at your option) any ! later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ! ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free ! the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "config.h" --- 1,24 ---- /* Instruction scheduling pass. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2002 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) Enhanced by, and currently maintained by, Jim Wilson (wilson@cygnus.com) ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "config.h" *************** int n_visual_lines; *** 87,95 **** static unsigned visual_tbl_line_length; char *visual_tbl; int n_vis_no_unit; ! rtx vis_no_unit[10]; ! /* Finds units that are in use in this fuction. Required only for visualization. */ void --- 87,96 ---- static unsigned visual_tbl_line_length; char *visual_tbl; int n_vis_no_unit; ! #define MAX_VISUAL_NO_UNIT 20 ! rtx vis_no_unit[MAX_VISUAL_NO_UNIT]; ! /* Finds units that are in use in this function. Required only for visualization. */ void *************** print_exp (buf, x, verbose) *** 473,478 **** --- 474,485 ---- fun = "trap_if"; op[0] = TRAP_CONDITION (x); break; + case PREFETCH: + fun = "prefetch"; + op[0] = XEXP (x, 0); + op[1] = XEXP (x, 1); + op[2] = XEXP (x, 2); + break; case UNSPEC: case UNSPEC_VOLATILE: { *************** print_value (buf, x, verbose) *** 577,583 **** if (REGNO (x) < FIRST_PSEUDO_REGISTER) { int c = reg_names[REGNO (x)][0]; ! if (c >= '0' && c <= '9') cur = safe_concat (buf, cur, "%"); cur = safe_concat (buf, cur, reg_names[REGNO (x)]); --- 584,590 ---- if (REGNO (x) < FIRST_PSEUDO_REGISTER) { int c = reg_names[REGNO (x)][0]; ! if (ISDIGIT (c)) cur = safe_concat (buf, cur, "%"); cur = safe_concat (buf, cur, reg_names[REGNO (x)]); *************** print_value (buf, x, verbose) *** 591,597 **** case SUBREG: print_value (t, SUBREG_REG (x), verbose); cur = safe_concat (buf, cur, t); ! sprintf (t, "#%d", SUBREG_WORD (x)); cur = safe_concat (buf, cur, t); break; case SCRATCH: --- 598,604 ---- case SUBREG: print_value (t, SUBREG_REG (x), verbose); cur = safe_concat (buf, cur, t); ! sprintf (t, "#%d", SUBREG_BYTE (x)); cur = safe_concat (buf, cur, t); break; case SCRATCH: *************** void *** 844,851 **** visualize_no_unit (insn) rtx insn; { ! vis_no_unit[n_vis_no_unit] = insn; ! n_vis_no_unit++; } /* Print insns scheduled in clock, for visualization. */ --- 851,861 ---- visualize_no_unit (insn) rtx insn; { ! if (n_vis_no_unit < MAX_VISUAL_NO_UNIT) ! { ! vis_no_unit[n_vis_no_unit] = insn; ! n_vis_no_unit++; ! } } /* Print insns scheduled in clock, for visualization. */ *************** void *** 901,907 **** visualize_stall_cycles (stalls) int stalls; { ! const char *prefix = ";; "; const char *suffix = "\n"; char *p; --- 911,917 ---- visualize_stall_cycles (stalls) int stalls; { ! static const char *const prefix = ";; "; const char *suffix = "\n"; char *p; *************** visualize_stall_cycles (stalls) *** 918,924 **** strcpy (p, prefix); p += strlen (prefix); ! if ((unsigned)stalls > visual_tbl_line_length - strlen (prefix) - strlen (suffix)) { suffix = "[...]\n"; --- 928,934 ---- strcpy (p, prefix); p += strlen (prefix); ! if ((unsigned) stalls > visual_tbl_line_length - strlen (prefix) - strlen (suffix)) { suffix = "[...]\n"; diff -Nrc3pad gcc-3.0.4/gcc/sdbout.c gcc-3.1/gcc/sdbout.c *** gcc-3.0.4/gcc/sdbout.c Wed Mar 21 19:45:04 2001 --- gcc-3.1/gcc/sdbout.c Tue Jan 22 14:33:33 2002 *************** *** 1,23 **** /* Output sdb-format symbol table information from GNU compiler. Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, ! 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* mike@tredysvr.Tredydev.Unisys.COM says: I modified the struct.c example and have a nm of a .o resulting from the --- 1,23 ---- /* Output sdb-format symbol table information from GNU compiler. Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, ! 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* mike@tredysvr.Tredydev.Unisys.COM says: I modified the struct.c example and have a nm of a .o resulting from the *************** AT&T C compiler. From the example below *** 56,77 **** #include "toplev.h" #include "ggc.h" #include "tm_p.h" - - /* Mips systems use the SDB functions to dump out symbols, but do not - supply usable syms.h include files. Which syms.h file to use is a - target parameter so don't use the native one if we're cross compiling. */ - - #if defined(USG) && !defined(MIPS) && !defined (hpux) && !defined(_WIN32) && !defined(__linux__) && !defined(__INTERIX) && !defined(CROSS_COMPILE) - #include - /* Use T_INT if we don't have T_VOID. */ - #ifndef T_VOID - #define T_VOID T_INT - #endif - #else #include "gsyms.h" ! #endif ! ! /* #include used to be this instead of syms.h. */ /* 1 if PARM is passed to this function in memory. */ --- 56,63 ---- #include "toplev.h" #include "ggc.h" #include "tm_p.h" #include "gsyms.h" ! #include "debug.h" /* 1 if PARM is passed to this function in memory. */ *************** extern tree current_function_decl; *** 106,111 **** --- 92,114 ---- #include "sdbout.h" + static void sdbout_init PARAMS ((const char *)); + static void sdbout_finish PARAMS ((const char *)); + static void sdbout_start_source_file PARAMS ((unsigned int, const char *)); + static void sdbout_end_source_file PARAMS ((unsigned int)); + static void sdbout_begin_block PARAMS ((unsigned int, unsigned int)); + static void sdbout_end_block PARAMS ((unsigned int, unsigned int)); + static void sdbout_source_line PARAMS ((unsigned int, const char *)); + static void sdbout_end_epilogue PARAMS ((void)); + static void sdbout_global_decl PARAMS ((tree)); + #ifndef MIPS_DEBUGGING_INFO + static void sdbout_begin_prologue PARAMS ((unsigned int, const char *)); + #endif + static void sdbout_end_prologue PARAMS ((unsigned int)); + static void sdbout_begin_function PARAMS ((tree)); + static void sdbout_end_function PARAMS ((unsigned int)); + static void sdbout_toplevel_data PARAMS ((tree)); + static void sdbout_label PARAMS ((rtx)); static char *gen_fake_label PARAMS ((void)); static int plain_type PARAMS ((tree)); static int template_name_p PARAMS ((tree)); *************** static void sdbout_field_types PARAMS ( *** 122,127 **** --- 125,131 ---- static void sdbout_one_type PARAMS ((tree)); static void sdbout_parms PARAMS ((tree)); static void sdbout_reg_parms PARAMS ((tree)); + static void sdbout_global_decl PARAMS ((tree)); /* Random macros describing parts of SDB data. */ *************** static void sdbout_reg_parms PARAMS ((t *** 146,152 **** #define PUT_SDB_INT_VAL(a) \ do { \ fputs ("\t.val\t", asm_out_file); \ ! fprintf (asm_out_file, HOST_WIDE_INT_PRINT_DEC, (HOST_WIDE_INT)(a)); \ fprintf (asm_out_file, "%s", SDB_DELIM); \ } while (0) --- 150,156 ---- #define PUT_SDB_INT_VAL(a) \ do { \ fputs ("\t.val\t", asm_out_file); \ ! fprintf (asm_out_file, HOST_WIDE_INT_PRINT_DEC, (HOST_WIDE_INT) (a)); \ fprintf (asm_out_file, "%s", SDB_DELIM); \ } while (0) *************** do { fprintf (asm_out_file, "\t.def\t"); *** 182,188 **** #define PUT_SDB_SIZE(a) \ do { \ fputs ("\t.size\t", asm_out_file); \ ! fprintf (asm_out_file, HOST_WIDE_INT_PRINT_DEC, (HOST_WIDE_INT)(a)); \ fprintf (asm_out_file, "%s", SDB_DELIM); \ } while(0) #endif --- 186,192 ---- #define PUT_SDB_SIZE(a) \ do { \ fputs ("\t.size\t", asm_out_file); \ ! fprintf (asm_out_file, HOST_WIDE_INT_PRINT_DEC, (HOST_WIDE_INT) (a)); \ fprintf (asm_out_file, "%s", SDB_DELIM); \ } while(0) #endif *************** do { fprintf (asm_out_file, "\t.tag\t"); *** 234,255 **** SDB_DELIM, SDB_DELIM, SDB_DELIM, (LINE), SDB_DELIM) #endif - #ifndef PUT_SDB_EPILOGUE_END - #define PUT_SDB_EPILOGUE_END(NAME) \ - do { fprintf (asm_out_file, "\t.def\t"); \ - assemble_name (asm_out_file, NAME); \ - fprintf (asm_out_file, \ - "%s\t.val\t.%s\t.scl\t-1%s\t.endef\n", \ - SDB_DELIM, SDB_DELIM, SDB_DELIM); } while (0) - #endif - #ifndef SDB_GENERATE_FAKE #define SDB_GENERATE_FAKE(BUFFER, NUMBER) \ sprintf ((BUFFER), ".%dfake", (NUMBER)); #endif /* Return the sdb tag identifier string for TYPE ! if TYPE has already been defined; otherwise return a null pointer. */ #define KNOWN_TYPE_TAG(type) TYPE_SYMTAB_POINTER (type) --- 238,250 ---- SDB_DELIM, SDB_DELIM, SDB_DELIM, (LINE), SDB_DELIM) #endif #ifndef SDB_GENERATE_FAKE #define SDB_GENERATE_FAKE(BUFFER, NUMBER) \ sprintf ((BUFFER), ".%dfake", (NUMBER)); #endif /* Return the sdb tag identifier string for TYPE ! if TYPE has already been defined; otherwise return a null pointer. */ #define KNOWN_TYPE_TAG(type) TYPE_SYMTAB_POINTER (type) *************** do { fprintf (asm_out_file, "\t.def\t"); *** 268,274 **** /* Ensure we don't output a negative line number. */ #define MAKE_LINE_SAFE(line) \ ! if (line <= sdb_begin_function_line) line = sdb_begin_function_line + 1 /* Perform linker optimization of merging header file definitions together for targets with MIPS_DEBUGGING_INFO defined. This won't work without a --- 263,270 ---- /* Ensure we don't output a negative line number. */ #define MAKE_LINE_SAFE(line) \ ! if ((int) line <= sdb_begin_function_line) \ ! line = sdb_begin_function_line + 1 /* Perform linker optimization of merging header file definitions together for targets with MIPS_DEBUGGING_INFO defined. This won't work without a *************** static struct sdb_file *current_file; *** 302,308 **** #endif /* MIPS_DEBUGGING_INFO */ ! #if 0 /* return the tag identifier for type --- 298,335 ---- #endif /* MIPS_DEBUGGING_INFO */ ! /* The debug hooks structure. */ ! struct gcc_debug_hooks sdb_debug_hooks = ! { ! sdbout_init, /* init */ ! sdbout_finish, /* finish */ ! debug_nothing_int_charstar, /* define */ ! debug_nothing_int_charstar, /* undef */ ! sdbout_start_source_file, /* start_source_file */ ! sdbout_end_source_file, /* end_source_file */ ! sdbout_begin_block, /* begin_block */ ! sdbout_end_block, /* end_block */ ! debug_true_tree, /* ignore_block */ ! sdbout_source_line, /* source_line */ ! #ifdef MIPS_DEBUGGING_INFO ! /* Defer on MIPS systems so that parameter descriptions follow ! function entry. */ ! debug_nothing_int_charstar, /* begin_prologue */ ! sdbout_end_prologue, /* end_prologue */ ! #else ! sdbout_begin_prologue, /* begin_prologue */ ! debug_nothing_int, /* end_prologue */ ! #endif ! sdbout_end_epilogue, /* end_epilogue */ ! sdbout_begin_function, /* begin_function */ ! sdbout_end_function, /* end_function */ ! debug_nothing_tree, /* function_decl */ ! sdbout_global_decl, /* global_decl */ ! debug_nothing_tree, /* deferred_inline_function */ ! debug_nothing_tree, /* outlining_inline_function */ ! sdbout_label ! }; ! #if 0 /* return the tag identifier for type *************** gen_fake_label () *** 354,362 **** PREV is the number describing the target, value or element type. DT_type describes how to transform that type. */ #define PUSH_DERIVED_LEVEL(DT_type,PREV) \ ! ((((PREV) & ~(int)N_BTMASK) << (int)N_TSHIFT) \ ! | ((int)DT_type << (int)N_BTSHFT) \ ! | ((PREV) & (int)N_BTMASK)) /* Number of elements used in sdb_dims. */ static int sdb_n_dims = 0; --- 381,389 ---- PREV is the number describing the target, value or element type. DT_type describes how to transform that type. */ #define PUSH_DERIVED_LEVEL(DT_type,PREV) \ ! ((((PREV) & ~(int) N_BTMASK) << (int) N_TSHIFT) \ ! | ((int) DT_type << (int) N_BTSHFT) \ ! | ((PREV) & (int) N_BTMASK)) /* Number of elements used in sdb_dims. */ static int sdb_n_dims = 0; *************** static int *** 402,408 **** template_name_p (name) tree name; { ! register const char *ptr = IDENTIFIER_POINTER (name); while (*ptr && *ptr != '<') ptr++; --- 429,435 ---- template_name_p (name) tree name; { ! const char *ptr = IDENTIFIER_POINTER (name); while (*ptr && *ptr != '<') ptr++; *************** sdbout_record_type_name (type) *** 422,427 **** --- 449,455 ---- if (TYPE_NAME (type) != 0) { tree t = 0; + /* Find the IDENTIFIER_NODE for the type name. */ if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE) t = TYPE_NAME (type); *************** plain_type_1 (type, level) *** 489,495 **** && DECL_NAME (TYPE_NAME (type)) != 0 && TREE_CODE (DECL_NAME (TYPE_NAME (type))) == IDENTIFIER_NODE) { ! const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))); if (!strcmp (name, "char")) --- 517,523 ---- && DECL_NAME (TYPE_NAME (type)) != 0 && TREE_CODE (DECL_NAME (TYPE_NAME (type))) == IDENTIFIER_NODE) { ! const char *const name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))); if (!strcmp (name, "char")) *************** static int do_block = 0; *** 634,640 **** static void sdbout_block (block) ! register tree block; { while (block) { --- 662,668 ---- static void sdbout_block (block) ! tree block; { while (block) { *************** sdbout_symbol (decl, local) *** 769,795 **** particular compilation. */ if (GET_CODE (value) == REG) { ! regno = REGNO (DECL_RTL (decl)); if (regno >= FIRST_PSEUDO_REGISTER) return; } else if (GET_CODE (value) == SUBREG) { - int offset = 0; while (GET_CODE (value) == SUBREG) ! { ! offset += SUBREG_WORD (value); ! value = SUBREG_REG (value); ! } if (GET_CODE (value) == REG) { ! regno = REGNO (value); ! if (regno >= FIRST_PSEUDO_REGISTER) return; - regno += offset; } ! alter_subreg (DECL_RTL (decl)); ! value = DECL_RTL (decl); } /* Don't output anything if an auto variable gets RTL that is static. --- 797,817 ---- particular compilation. */ if (GET_CODE (value) == REG) { ! regno = REGNO (value); if (regno >= FIRST_PSEUDO_REGISTER) return; } else if (GET_CODE (value) == SUBREG) { while (GET_CODE (value) == SUBREG) ! value = SUBREG_REG (value); if (GET_CODE (value) == REG) { ! if (REGNO (value) >= FIRST_PSEUDO_REGISTER) return; } ! regno = REGNO (alter_subreg (&value)); ! SET_DECL_RTL (decl, value); } /* Don't output anything if an auto variable gets RTL that is static. *************** sdbout_symbol (decl, local) *** 934,940 **** /* Output SDB information for a top-level initialized variable that has been delayed. */ ! void sdbout_toplevel_data (decl) tree decl; { --- 956,962 ---- /* Output SDB information for a top-level initialized variable that has been delayed. */ ! static void sdbout_toplevel_data (decl) tree decl; { *************** sdbout_queue_anonymous_type (type) *** 978,984 **** static void sdbout_dequeue_anonymous_types () { ! register tree types, link; while (anonymous_types) { --- 1000,1006 ---- static void sdbout_dequeue_anonymous_types () { ! tree types, link; while (anonymous_types) { *************** sdbout_dequeue_anonymous_types () *** 987,993 **** for (link = types; link; link = TREE_CHAIN (link)) { ! register tree type = TREE_VALUE (link); if (type && ! TREE_ASM_WRITTEN (type)) sdbout_one_type (type); --- 1009,1015 ---- for (link = types; link; link = TREE_CHAIN (link)) { ! tree type = TREE_VALUE (link); if (type && ! TREE_ASM_WRITTEN (type)) sdbout_one_type (type); *************** sdbout_dequeue_anonymous_types () *** 1002,1010 **** void sdbout_types (types) ! register tree types; { ! register tree link; for (link = types; link; link = TREE_CHAIN (link)) sdbout_one_type (link); --- 1024,1032 ---- void sdbout_types (types) ! tree types; { ! tree link; for (link = types; link; link = TREE_CHAIN (link)) sdbout_one_type (link); *************** sdbout_one_type (type) *** 1161,1167 **** /* Print out the base class information with fields named after the types they hold. */ ! /* This is only relevent to aggregate types. TYPE_BINFO is used for other purposes in an ENUMERAL_TYPE, so we must exclude that case. */ if (TREE_CODE (type) != ENUMERAL_TYPE) --- 1183,1189 ---- /* Print out the base class information with fields named after the types they hold. */ ! /* This is only relevant to aggregate types. TYPE_BINFO is used for other purposes in an ENUMERAL_TYPE, so we must exclude that case. */ if (TREE_CODE (type) != ENUMERAL_TYPE) *************** sdbout_reg_parms (parms) *** 1463,1468 **** --- 1485,1546 ---- } } + /* Output debug information for a global DECL. Called from toplev.c + after compilation proper has finished. */ + + static void + sdbout_global_decl (decl) + tree decl; + { + if (TREE_CODE (decl) == VAR_DECL + && !DECL_EXTERNAL (decl) + && DECL_RTL_SET_P (decl)) + { + /* The COFF linker can move initialized global vars to the end. + And that can screw up the symbol ordering. Defer those for + sdbout_finish (). */ + if (!DECL_INITIAL (decl) || !TREE_PUBLIC (decl)) + sdbout_symbol (decl, 0); + + /* Output COFF information for non-global file-scope initialized + variables. */ + if (DECL_INITIAL (decl) && GET_CODE (DECL_RTL (decl)) == MEM) + sdbout_toplevel_data (decl); + } + } + + /* Output initialized global vars at the end, in the order of + definition. See comment in sdbout_global_decl. */ + + static void + sdbout_finish (main_filename) + const char *main_filename ATTRIBUTE_UNUSED; + { + tree decl = getdecls (); + unsigned int len = list_length (decl); + tree *vec = (tree *) xmalloc (sizeof (tree) * len); + unsigned int i; + + /* Process the decls in reverse order--earliest first. Put them + into VEC from back to front, then take out from front. */ + + for (i = 0; i < len; i++, decl = TREE_CHAIN (decl)) + vec[len - i - 1] = decl; + + for (i = 0; i < len; i++) + { + decl = vec[i]; + if (TREE_CODE (decl) == VAR_DECL + && ! DECL_EXTERNAL (decl) + && DECL_INITIAL (decl) + && TREE_PUBLIC (decl) + && DECL_RTL_SET_P (decl)) + sdbout_symbol (decl, 0); + } + + free (vec); + } + /* Describe the beginning of an internal block within a function. Also output descriptions of variables defined in this block. *************** sdbout_reg_parms (parms) *** 1471,1481 **** The blocks match the BLOCKs in DECL_INITIAL (current_function_decl), if the count starts at 0 for the outermost one. */ ! void ! sdbout_begin_block (file, line, n) ! FILE *file ATTRIBUTE_UNUSED; ! int line; ! int n; { tree decl = current_function_decl; MAKE_LINE_SAFE (line); --- 1549,1558 ---- The blocks match the BLOCKs in DECL_INITIAL (current_function_decl), if the count starts at 0 for the outermost one. */ ! static void ! sdbout_begin_block (line, n) ! unsigned int line; ! unsigned int n; { tree decl = current_function_decl; MAKE_LINE_SAFE (line); *************** sdbout_begin_block (file, line, n) *** 1509,1519 **** /* Describe the end line-number of an internal block within a function. */ ! void ! sdbout_end_block (file, line, n) ! FILE *file ATTRIBUTE_UNUSED; ! int line; ! int n ATTRIBUTE_UNUSED; { MAKE_LINE_SAFE (line); --- 1586,1595 ---- /* Describe the end line-number of an internal block within a function. */ ! static void ! sdbout_end_block (line, n) ! unsigned int line; ! unsigned int n ATTRIBUTE_UNUSED; { MAKE_LINE_SAFE (line); *************** sdbout_end_block (file, line, n) *** 1526,1549 **** PUT_SDB_BLOCK_END (line - sdb_begin_function_line); } /* Output sdb info for the current function name. Called from assemble_start_function. */ ! void ! sdbout_mark_begin_function () { sdbout_symbol (current_function_decl, 0); } ! /* Called at beginning of function body (after prologue). ! Record the function's starting line number, so we can output ! relative line numbers for the other lines. ! Describe beginning of outermost block. ! Also describe the parameter list. */ ! void ! sdbout_begin_function (line) ! int line; { sdb_begin_function_line = line - 1; PUT_SDB_FUNCTION_START (line); --- 1602,1654 ---- PUT_SDB_BLOCK_END (line - sdb_begin_function_line); } + static void + sdbout_source_line (line, filename) + unsigned int line; + const char *filename ATTRIBUTE_UNUSED; + { + /* COFF relative line numbers must be positive. */ + if ((int) line > sdb_begin_function_line) + { + #ifdef ASM_OUTPUT_SOURCE_LINE + ASM_OUTPUT_SOURCE_LINE (asm_out_file, line); + #else + fprintf (asm_out_file, "\t.ln\t%d\n", + ((sdb_begin_function_line > -1) + ? line - sdb_begin_function_line : 1)); + #endif + } + } + /* Output sdb info for the current function name. Called from assemble_start_function. */ ! static void ! sdbout_begin_function (decl) ! tree decl ATTRIBUTE_UNUSED; { sdbout_symbol (current_function_decl, 0); } ! /* Called at beginning of function body (before or after prologue, ! depending on MIPS_DEBUGGING_INFO). Record the function's starting ! line number, so we can output relative line numbers for the other ! lines. Describe beginning of outermost block. Also describe the ! parameter list. */ ! #ifndef MIPS_DEBUGGING_INFO ! static void ! sdbout_begin_prologue (line, file) ! unsigned int line; ! const char *file ATTRIBUTE_UNUSED; ! { ! sdbout_end_prologue (line); ! } ! #endif ! ! static void ! sdbout_end_prologue (line) ! unsigned int line; { sdb_begin_function_line = line - 1; PUT_SDB_FUNCTION_START (line); *************** sdbout_begin_function (line) *** 1554,1562 **** /* Called at end of function (before epilogue). Describe end of outermost block. */ ! void sdbout_end_function (line) ! int line; { #ifdef SDB_ALLOW_FORWARD_REFERENCES sdbout_dequeue_anonymous_types (); --- 1659,1667 ---- /* Called at end of function (before epilogue). Describe end of outermost block. */ ! static void sdbout_end_function (line) ! unsigned int line; { #ifdef SDB_ALLOW_FORWARD_REFERENCES sdbout_dequeue_anonymous_types (); *************** sdbout_end_function (line) *** 1572,1590 **** /* Output sdb info for the absolute end of a function. Called after the epilogue is output. */ ! void sdbout_end_epilogue () { ! PUT_SDB_EPILOGUE_END ! (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (current_function_decl))); } /* Output sdb info for the given label. Called only if LABEL_NAME (insn) is present. */ ! void sdbout_label (insn) ! register rtx insn; { PUT_SDB_DEF (LABEL_NAME (insn)); PUT_SDB_VAL (insn); --- 1677,1704 ---- /* Output sdb info for the absolute end of a function. Called after the epilogue is output. */ ! static void sdbout_end_epilogue () { ! const char *const name ATTRIBUTE_UNUSED ! = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (current_function_decl)); ! ! #ifdef PUT_SDB_EPILOGUE_END ! PUT_SDB_EPILOGUE_END (name); ! #else ! fprintf (asm_out_file, "\t.def\t"); ! assemble_name (asm_out_file, name); ! fprintf (asm_out_file, "%s\t.val\t.%s\t.scl\t-1%s\t.endef\n", ! SDB_DELIM, SDB_DELIM, SDB_DELIM); ! #endif } /* Output sdb info for the given label. Called only if LABEL_NAME (insn) is present. */ ! static void sdbout_label (insn) ! rtx insn; { PUT_SDB_DEF (LABEL_NAME (insn)); PUT_SDB_VAL (insn); *************** sdbout_label (insn) *** 1595,1602 **** /* Change to reading from a new source file. */ ! void ! sdbout_start_new_source_file (filename) const char *filename ATTRIBUTE_UNUSED; { #ifdef MIPS_DEBUGGING_INFO --- 1709,1717 ---- /* Change to reading from a new source file. */ ! static void ! sdbout_start_source_file (line, filename) ! unsigned int line ATTRIBUTE_UNUSED; const char *filename ATTRIBUTE_UNUSED; { #ifdef MIPS_DEBUGGING_INFO *************** sdbout_start_new_source_file (filename) *** 1611,1618 **** /* Revert to reading a previous source file. */ ! void ! sdbout_resume_previous_source_file () { #ifdef MIPS_DEBUGGING_INFO struct sdb_file *next; --- 1726,1734 ---- /* Revert to reading a previous source file. */ ! static void ! sdbout_end_source_file (line) ! unsigned int line ATTRIBUTE_UNUSED; { #ifdef MIPS_DEBUGGING_INFO struct sdb_file *next; *************** sdbout_resume_previous_source_file () *** 1626,1636 **** /* Set up for SDB output at the start of compilation. */ ! void ! sdbout_init (asm_file, input_file_name, syms) ! FILE *asm_file ATTRIBUTE_UNUSED; const char *input_file_name ATTRIBUTE_UNUSED; - tree syms ATTRIBUTE_UNUSED; { #ifdef MIPS_DEBUGGING_INFO current_file = (struct sdb_file *) xmalloc (sizeof *current_file); --- 1742,1750 ---- /* Set up for SDB output at the start of compilation. */ ! static void ! sdbout_init (input_file_name) const char *input_file_name ATTRIBUTE_UNUSED; { #ifdef MIPS_DEBUGGING_INFO current_file = (struct sdb_file *) xmalloc (sizeof *current_file); *************** sdbout_init (asm_file, input_file_name, *** 1640,1646 **** #ifdef RMS_QUICK_HACK_1 tree t; ! for (t = syms; t; t = TREE_CHAIN (t)) if (DECL_NAME (t) && IDENTIFIER_POINTER (DECL_NAME (t)) != 0 && !strcmp (IDENTIFIER_POINTER (DECL_NAME (t)), "__vtbl_ptr_type")) sdbout_symbol (t, 0); --- 1754,1760 ---- #ifdef RMS_QUICK_HACK_1 tree t; ! for (t = getdecls (); t; t = TREE_CHAIN (t)) if (DECL_NAME (t) && IDENTIFIER_POINTER (DECL_NAME (t)) != 0 && !strcmp (IDENTIFIER_POINTER (DECL_NAME (t)), "__vtbl_ptr_type")) sdbout_symbol (t, 0); diff -Nrc3pad gcc-3.0.4/gcc/sdbout.h gcc-3.1/gcc/sdbout.h *** gcc-3.0.4/gcc/sdbout.h Tue Jun 6 12:08:44 2000 --- gcc-3.1/gcc/sdbout.h Wed Aug 22 14:35:41 2001 *************** *** 1,39 **** /* sdbout.h - Various declarations for functions found in sdbout.c Copyright (C) 1998, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ ! ! extern void sdbout_init PARAMS ((FILE *, const char *, tree)); ! ! extern void sdbout_begin_function PARAMS ((int)); ! extern void sdbout_end_function PARAMS ((int)); ! ! extern void sdbout_begin_block PARAMS ((FILE *, int, int)); ! extern void sdbout_end_block PARAMS ((FILE *, int, int)); - extern void sdbout_label PARAMS ((rtx)); extern void sdbout_symbol PARAMS ((tree, int)); - extern void sdbout_toplevel_data PARAMS ((tree)); extern void sdbout_types PARAMS ((tree)); - - extern void sdbout_end_epilogue PARAMS ((void)); - - extern void sdbout_start_new_source_file PARAMS ((const char *)); - extern void sdbout_resume_previous_source_file PARAMS ((void)); - extern void sdbout_mark_begin_function PARAMS ((void)); - --- 1,22 ---- /* sdbout.h - Various declarations for functions found in sdbout.c Copyright (C) 1998, 2000 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ extern void sdbout_symbol PARAMS ((tree, int)); extern void sdbout_types PARAMS ((tree)); diff -Nrc3pad gcc-3.0.4/gcc/sibcall.c gcc-3.1/gcc/sibcall.c *** gcc-3.0.4/gcc/sibcall.c Mon Oct 8 20:15:51 2001 --- gcc-3.1/gcc/sibcall.c Sat Apr 6 19:37:38 2002 *************** *** 1,22 **** /* Generic sibling call optimization support ! Copyright (C) 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" #include "system.h" --- 1,22 ---- /* Generic sibling call optimization support ! Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" #include "system.h" *************** Boston, MA 02111-1307, USA. */ *** 31,47 **** #include "basic-block.h" #include "output.h" #include "except.h" static int identify_call_return_value PARAMS ((rtx, rtx *, rtx *)); ! static rtx skip_copy_to_return_value PARAMS ((rtx, rtx, rtx)); static rtx skip_use_of_return_value PARAMS ((rtx, enum rtx_code)); static rtx skip_stack_adjustment PARAMS ((rtx)); static rtx skip_pic_restore PARAMS ((rtx)); static rtx skip_jump_insn PARAMS ((rtx)); static int uses_addressof PARAMS ((rtx)); static int sequence_uses_addressof PARAMS ((rtx)); static void purge_reg_equiv_notes PARAMS ((void)); static void purge_mem_unchanging_flag PARAMS ((rtx)); /* Examine a CALL_PLACEHOLDER pattern and determine where the call's return value is located. P_HARD_RETURN receives the hard register --- 31,55 ---- #include "basic-block.h" #include "output.h" #include "except.h" + #include "tree.h" + + /* In case alternate_exit_block contains copy from pseudo, to return value, + record the pseudo here. In such case the pseudo must be set to function + return in the sibcall sequence. */ + static rtx return_value_pseudo; static int identify_call_return_value PARAMS ((rtx, rtx *, rtx *)); ! static rtx skip_copy_to_return_value PARAMS ((rtx)); static rtx skip_use_of_return_value PARAMS ((rtx, enum rtx_code)); static rtx skip_stack_adjustment PARAMS ((rtx)); static rtx skip_pic_restore PARAMS ((rtx)); static rtx skip_jump_insn PARAMS ((rtx)); + static int call_ends_block_p PARAMS ((rtx, rtx)); static int uses_addressof PARAMS ((rtx)); static int sequence_uses_addressof PARAMS ((rtx)); static void purge_reg_equiv_notes PARAMS ((void)); static void purge_mem_unchanging_flag PARAMS ((rtx)); + static rtx skip_unreturned_value PARAMS ((rtx)); /* Examine a CALL_PLACEHOLDER pattern and determine where the call's return value is located. P_HARD_RETURN receives the hard register *************** identify_call_return_value (cp, p_hard_r *** 132,142 **** copy. Otherwise return ORIG_INSN. */ static rtx ! skip_copy_to_return_value (orig_insn, hardret, softret) rtx orig_insn; - rtx hardret, softret; { rtx insn, set = NULL_RTX; insn = next_nonnote_insn (orig_insn); if (! insn) --- 140,154 ---- copy. Otherwise return ORIG_INSN. */ static rtx ! skip_copy_to_return_value (orig_insn) rtx orig_insn; { rtx insn, set = NULL_RTX; + rtx hardret, softret; + + /* If there is no return value, we have nothing to do. */ + if (! identify_call_return_value (PATTERN (orig_insn), &hardret, &softret)) + return orig_insn; insn = next_nonnote_insn (orig_insn); if (! insn) *************** skip_copy_to_return_value (orig_insn, ha *** 146,151 **** --- 158,171 ---- if (! set) return orig_insn; + if (return_value_pseudo) + { + if (SET_DEST (set) == return_value_pseudo + && SET_SRC (set) == softret) + return insn; + return orig_insn; + } + /* The destination must be the same as the called function's return value to ensure that any return value is put in the same place by the current function and the function we're calling. *************** skip_copy_to_return_value (orig_insn, ha *** 164,169 **** --- 184,213 ---- && SET_SRC (set) == softret) return insn; + /* Recognize the situation when the called function's return value + is copied in two steps: first into an intermediate pseudo, then + the into the calling functions return value register. */ + + if (REG_P (SET_DEST (set)) + && SET_SRC (set) == softret) + { + rtx x = SET_DEST (set); + + insn = next_nonnote_insn (insn); + if (! insn) + return orig_insn; + + set = single_set (insn); + if (! set) + return orig_insn; + + if (SET_DEST (set) == current_function_return_rtx + && REG_P (SET_DEST (set)) + && OUTGOING_REGNO (REGNO (SET_DEST (set))) == REGNO (hardret) + && SET_SRC (set) == x) + return insn; + } + /* It did not look like a copy of the return value, so return the same insn we were passed. */ return orig_insn; *************** skip_use_of_return_value (orig_insn, cod *** 191,196 **** --- 235,269 ---- return orig_insn; } + /* In case function does not return value, we get clobber of pseudo followed + by set to hard return value. */ + static rtx + skip_unreturned_value (orig_insn) + rtx orig_insn; + { + rtx insn = next_nonnote_insn (orig_insn); + + /* Skip possible clobber of pseudo return register. */ + if (insn + && GET_CODE (insn) == INSN + && GET_CODE (PATTERN (insn)) == CLOBBER + && REG_P (XEXP (PATTERN (insn), 0)) + && (REGNO (XEXP (PATTERN (insn), 0)) >= FIRST_PSEUDO_REGISTER)) + { + rtx set_insn = next_nonnote_insn (insn); + rtx set; + if (!set_insn) + return insn; + set = single_set (set_insn); + if (!set + || SET_SRC (set) != XEXP (PATTERN (insn), 0) + || SET_DEST (set) != current_function_return_rtx) + return insn; + return set_insn; + } + return orig_insn; + } + /* If the first real insn after ORIG_INSN adjusts the stack pointer by a constant, return the insn with the stack pointer adjustment. Otherwise return ORIG_INSN. */ *************** skip_jump_insn (orig_insn) *** 255,260 **** --- 328,390 ---- return orig_insn; } + + /* Using the above functions, see if INSN, skipping any of the above, + goes all the way to END, the end of a basic block. Return 1 if so. */ + + static int + call_ends_block_p (insn, end) + rtx insn; + rtx end; + { + rtx new_insn; + /* END might be a note, so get the last nonnote insn of the block. */ + end = next_nonnote_insn (PREV_INSN (end)); + + /* If the call was the end of the block, then we're OK. */ + if (insn == end) + return 1; + + /* Skip over copying from the call's return value pseudo into + this function's hard return register and if that's the end + of the block, we're OK. */ + new_insn = skip_copy_to_return_value (insn); + + /* In case we return value in pseudo, we must set the pseudo to + return value of called function, otherwise we are returning + something else. */ + if (return_value_pseudo && insn == new_insn) + return 0; + insn = new_insn; + + if (insn == end) + return 1; + + /* Skip any stack adjustment. */ + insn = skip_stack_adjustment (insn); + if (insn == end) + return 1; + + /* Skip over a CLOBBER of the return value as a hard reg. */ + insn = skip_use_of_return_value (insn, CLOBBER); + if (insn == end) + return 1; + + /* Skip over a CLOBBER of the return value as a hard reg. */ + insn = skip_unreturned_value (insn); + if (insn == end) + return 1; + + /* Skip over a USE of the return value (as a hard reg). */ + insn = skip_use_of_return_value (insn, USE); + if (insn == end) + return 1; + + /* Skip over a JUMP_INSN at the end of the block. If that doesn't end the + block, the original CALL_INSN didn't. */ + insn = skip_jump_insn (insn); + return insn == end; + } /* Scan the rtx X for ADDRESSOF expressions or current_function_internal_arg_pointer registers. *************** uses_addressof (x) *** 280,286 **** if (code == MEM) return 0; ! /* Scan all subexpressions. */ fmt = GET_RTX_FORMAT (code); for (i = 0; i < GET_RTX_LENGTH (code); i++, fmt++) { --- 410,416 ---- if (code == MEM) return 0; ! /* Scan all subexpressions. */ fmt = GET_RTX_FORMAT (code); for (i = 0; i < GET_RTX_LENGTH (code); i++, fmt++) { *************** uses_addressof (x) *** 300,306 **** } /* Scan the sequence of insns in SEQ to see if any have an ADDRESSOF ! rtl expression or current_function_internal_arg_pointer occurences not enclosed within a MEM. If an ADDRESSOF expression or current_function_internal_arg_pointer is found, return nonzero, otherwise return zero. --- 430,436 ---- } /* Scan the sequence of insns in SEQ to see if any have an ADDRESSOF ! rtl expression or current_function_internal_arg_pointer occurrences not enclosed within a MEM. If an ADDRESSOF expression or current_function_internal_arg_pointer is found, return nonzero, otherwise return zero. *************** purge_mem_unchanging_flag (x) *** 390,396 **** return; } ! /* Scan all subexpressions. */ fmt = GET_RTX_FORMAT (code); for (i = 0; i < GET_RTX_LENGTH (code); i++, fmt++) { --- 520,526 ---- return; } ! /* Scan all subexpressions. */ fmt = GET_RTX_FORMAT (code); for (i = 0; i < GET_RTX_LENGTH (code); i++, fmt++) { *************** replace_call_placeholder (insn, use) *** 417,423 **** else if (use == sibcall_use_normal) emit_insns_before (XEXP (PATTERN (insn), 0), insn); else ! abort(); /* Turn off LABEL_PRESERVE_P for the tail recursion label if it exists. We only had to set it long enough to keep the jump --- 547,553 ---- else if (use == sibcall_use_normal) emit_insns_before (XEXP (PATTERN (insn), 0), insn); else ! abort (); /* Turn off LABEL_PRESERVE_P for the tail recursion label if it exists. We only had to set it long enough to keep the jump *************** replace_call_placeholder (insn, use) *** 425,434 **** if (XEXP (PATTERN (insn), 3)) LABEL_PRESERVE_P (XEXP (PATTERN (insn), 3)) = 0; ! /* "Delete" the placeholder insn. */ ! PUT_CODE (insn, NOTE); ! NOTE_SOURCE_FILE (insn) = 0; ! NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED; } /* Given a (possibly empty) set of potential sibling or tail recursion call --- 555,562 ---- if (XEXP (PATTERN (insn), 3)) LABEL_PRESERVE_P (XEXP (PATTERN (insn), 3)) = 0; ! /* "Delete" the placeholder insn. */ ! remove_insn (insn); } /* Given a (possibly empty) set of potential sibling or tail recursion call *************** optimize_sibling_and_tail_recursive_call *** 445,451 **** { rtx insn, insns; basic_block alternate_exit = EXIT_BLOCK_PTR; ! int current_function_uses_addressof; int successful_sibling_call = 0; int replaced_call_placeholder = 0; edge e; --- 573,579 ---- { rtx insn, insns; basic_block alternate_exit = EXIT_BLOCK_PTR; ! bool no_sibcalls_this_function = false; int successful_sibling_call = 0; int replaced_call_placeholder = 0; edge e; *************** optimize_sibling_and_tail_recursive_call *** 458,477 **** ahead and find all the EH labels. */ find_exception_handler_labels (); ! /* Run a jump optimization pass to clean up the CFG. We primarily want ! this to thread jumps so that it is obvious which blocks jump to the ! epilouge. */ ! jump_optimize_minimal (insns); ! /* We need cfg information to determine which blocks are succeeded only by the epilogue. */ find_basic_blocks (insns, max_reg_num (), 0); ! cleanup_cfg (); /* If there are no basic blocks, then there is nothing to do. */ if (n_basic_blocks == 0) return; /* Find the exit block. It is possible that we have blocks which can reach the exit block --- 586,609 ---- ahead and find all the EH labels. */ find_exception_handler_labels (); ! rebuild_jump_labels (insns); /* We need cfg information to determine which blocks are succeeded only by the epilogue. */ find_basic_blocks (insns, max_reg_num (), 0); ! cleanup_cfg (CLEANUP_PRE_SIBCALL | CLEANUP_PRE_LOOP); /* If there are no basic blocks, then there is nothing to do. */ if (n_basic_blocks == 0) return; + /* If we are using sjlj exceptions, we may need to add a call to + _Unwind_SjLj_Unregister at exit of the function. Which means + that we cannot do any sibcall transformations. */ + if (USING_SJLJ_EXCEPTIONS && current_function_has_exception_handlers ()) + no_sibcalls_this_function = true; + + return_value_pseudo = NULL_RTX; + /* Find the exit block. It is possible that we have blocks which can reach the exit block *************** optimize_sibling_and_tail_recursive_call *** 492,497 **** --- 624,630 ---- insn; insn = NEXT_INSN (insn)) { + rtx set; /* This should only happen once, at the start of this block. */ if (GET_CODE (insn) == CODE_LABEL) continue; *************** optimize_sibling_and_tail_recursive_call *** 503,508 **** --- 636,653 ---- && GET_CODE (PATTERN (insn)) == USE) continue; + /* Exit block also may contain copy from pseudo containing + return value to hard register. */ + if (GET_CODE (insn) == INSN + && (set = single_set (insn)) + && SET_DEST (set) == current_function_return_rtx + && REG_P (SET_SRC (set)) + && !return_value_pseudo) + { + return_value_pseudo = SET_SRC (set); + continue; + } + break; } *************** optimize_sibling_and_tail_recursive_call *** 511,521 **** valid alternate exit block. */ if (insn == NULL) alternate_exit = e->src; } /* If the function uses ADDRESSOF, we can't (easily) determine at this point if the value will end up on the stack. */ ! current_function_uses_addressof = sequence_uses_addressof (insns); /* Walk the insn chain and find any CALL_PLACEHOLDER insns. We need to select one of the insn sequences attached to each CALL_PLACEHOLDER. --- 656,668 ---- valid alternate exit block. */ if (insn == NULL) alternate_exit = e->src; + else + return_value_pseudo = NULL; } /* If the function uses ADDRESSOF, we can't (easily) determine at this point if the value will end up on the stack. */ ! no_sibcalls_this_function |= sequence_uses_addressof (insns); /* Walk the insn chain and find any CALL_PLACEHOLDER insns. We need to select one of the insn sequences attached to each CALL_PLACEHOLDER. *************** optimize_sibling_and_tail_recursive_call *** 533,558 **** { int sibcall = (XEXP (PATTERN (insn), 1) != NULL_RTX); int tailrecursion = (XEXP (PATTERN (insn), 2) != NULL_RTX); ! basic_block succ_block, call_block; ! rtx temp, hardret, softret; ! ! /* We must be careful with stack slots which are live at ! potential optimization sites. ! ! ?!? This test is overly conservative and will be replaced. */ ! if (frame_offset) ! goto failure; ! ! /* Any function that calls setjmp might have longjmp called from ! any called function. ??? We really should represent this ! properly in the CFG so that this needn't be special cased. */ ! if (current_function_calls_setjmp) ! goto failure; ! ! /* Taking the address of a local variable is fatal to tail ! recursion if the address is used by the recursive call. */ ! if (current_function_uses_addressof) ! goto failure; /* alloca (until we have stack slot life analysis) inhibits sibling call optimizations, but not tail recursion. --- 680,686 ---- { int sibcall = (XEXP (PATTERN (insn), 1) != NULL_RTX); int tailrecursion = (XEXP (PATTERN (insn), 2) != NULL_RTX); ! basic_block call_block = BLOCK_FOR_INSN (insn); /* alloca (until we have stack slot life analysis) inhibits sibling call optimizations, but not tail recursion. *************** optimize_sibling_and_tail_recursive_call *** 562,634 **** || current_function_varargs || current_function_stdarg) sibcall = 0; ! call_block = BLOCK_FOR_INSN (insn); ! ! /* If the block has more than one successor, then we can not ! perform sibcall or tail recursion optimizations. */ ! if (call_block->succ == NULL ! || call_block->succ->succ_next != NULL) ! goto failure; ! ! /* If the single successor is not the exit block, then we can not ! perform sibcall or tail recursion optimizations. ! ! Note that this test combined with the previous is sufficient ! to prevent tail call optimization in the presense of active ! exception handlers. */ ! succ_block = call_block->succ->dest; ! if (succ_block != EXIT_BLOCK_PTR && succ_block != alternate_exit) ! goto failure; ! ! /* If the call was the end of the block, then we're OK. */ ! temp = insn; ! if (temp == call_block->end) ! goto success; ! ! /* Skip over copying from the call's return value pseudo into ! this function's hard return register. */ ! if (identify_call_return_value (PATTERN (insn), &hardret, &softret)) ! { ! temp = skip_copy_to_return_value (temp, hardret, softret); ! if (temp == call_block->end) ! goto success; ! } ! ! /* Skip any stack adjustment. */ ! temp = skip_stack_adjustment (temp); ! if (temp == call_block->end) ! goto success; ! ! /* Skip over a CLOBBER of the return value (as a hard reg). */ ! temp = skip_use_of_return_value (temp, CLOBBER); ! if (temp == call_block->end) ! goto success; ! ! /* Skip over a USE of the return value (as a hard reg). */ ! temp = skip_use_of_return_value (temp, USE); ! if (temp == call_block->end) ! goto success; ! ! /* Skip over the JUMP_INSN at the end of the block. */ ! temp = skip_jump_insn (temp); ! if (GET_CODE (temp) == NOTE) ! temp = next_nonnote_insn (temp); ! if (temp == call_block->end) ! goto success; ! ! /* There are operations at the end of the block which we must ! execute after returning from the function call. So this call ! can not be optimized. */ ! failure: ! sibcall = 0, tailrecursion = 0; ! success: /* Select a set of insns to implement the call and emit them. Tail recursion is the most efficient, so select it over a tail/sibling call. */ - if (sibcall) successful_sibling_call = 1; replaced_call_placeholder = 1; replace_call_placeholder (insn, tailrecursion != 0 --- 690,723 ---- || current_function_varargs || current_function_stdarg) sibcall = 0; ! /* See if there are any reasons we can't perform either sibling or ! tail call optimizations. We must be careful with stack slots ! which are live at potential optimization sites. */ ! if (no_sibcalls_this_function ! /* ??? Overly conservative. */ ! || frame_offset ! /* Any function that calls setjmp might have longjmp called from ! any called function. ??? We really should represent this ! properly in the CFG so that this needn't be special cased. */ ! || current_function_calls_setjmp ! /* Can't if more than one successor or single successor is not ! exit block. These two tests prevent tail call optimization ! in the presense of active exception handlers. */ ! || call_block->succ == NULL ! || call_block->succ->succ_next != NULL ! || (call_block->succ->dest != EXIT_BLOCK_PTR ! && call_block->succ->dest != alternate_exit) ! /* If this call doesn't end the block, there are operations at ! the end of the block which we must execute after returning. */ ! || ! call_ends_block_p (insn, call_block->end)) ! sibcall = 0, tailrecursion = 0; /* Select a set of insns to implement the call and emit them. Tail recursion is the most efficient, so select it over a tail/sibling call. */ if (sibcall) successful_sibling_call = 1; + replaced_call_placeholder = 1; replace_call_placeholder (insn, tailrecursion != 0 *************** success: *** 642,647 **** --- 731,737 ---- if (successful_sibling_call) { rtx insn; + tree arg; /* A sibling call sequence invalidates any REG_EQUIV notes made for this function's incoming arguments. *************** success: *** 666,671 **** --- 756,771 ---- if (INSN_P (insn)) purge_mem_unchanging_flag (PATTERN (insn)); } + + /* Similarly, invalidate RTX_UNCHANGING_P for any incoming + arguments passed in registers. */ + for (arg = DECL_ARGUMENTS (current_function_decl); + arg; + arg = TREE_CHAIN (arg)) + { + if (REG_P (DECL_RTL (arg))) + RTX_UNCHANGING_P (DECL_RTL (arg)) = false; + } } /* There may have been NOTE_INSN_BLOCK_{BEGIN,END} notes in the diff -Nrc3pad gcc-3.0.4/gcc/simplify-rtx.c gcc-3.1/gcc/simplify-rtx.c *** gcc-3.0.4/gcc/simplify-rtx.c Thu Sep 6 23:33:07 2001 --- gcc-3.1/gcc/simplify-rtx.c Wed Mar 6 22:43:21 2002 *************** *** 2,28 **** Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" #include "system.h" - #include #include "rtl.h" #include "tm_p.h" --- 2,27 ---- Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" #include "system.h" #include "rtl.h" #include "tm_p.h" *************** Boston, MA 02111-1307, USA. */ *** 37,45 **** #include "toplev.h" #include "output.h" #include "ggc.h" - #include "obstack.h" - #include "hashtab.h" - #include "cselib.h" /* Simplification and canonicalization of RTL. */ --- 36,41 ---- *************** Boston, MA 02111-1307, USA. */ *** 99,240 **** #define HWI_SIGN_EXTEND(low) \ ((((HOST_WIDE_INT) low) < 0) ? ((HOST_WIDE_INT) -1) : ((HOST_WIDE_INT) 0)) static rtx simplify_plus_minus PARAMS ((enum rtx_code, ! enum machine_mode, rtx, rtx)); static void check_fold_consts PARAMS ((PTR)); ! static int entry_and_rtx_equal_p PARAMS ((const void *, const void *)); ! static unsigned int get_value_hash PARAMS ((const void *)); ! static struct elt_list *new_elt_list PARAMS ((struct elt_list *, ! cselib_val *)); ! static struct elt_loc_list *new_elt_loc_list PARAMS ((struct elt_loc_list *, ! rtx)); ! static void unchain_one_value PARAMS ((cselib_val *)); ! static void unchain_one_elt_list PARAMS ((struct elt_list **)); ! static void unchain_one_elt_loc_list PARAMS ((struct elt_loc_list **)); ! static void clear_table PARAMS ((int)); ! static int discard_useless_locs PARAMS ((void **, void *)); ! static int discard_useless_values PARAMS ((void **, void *)); ! static void remove_useless_values PARAMS ((void)); ! static rtx wrap_constant PARAMS ((enum machine_mode, rtx)); ! static unsigned int hash_rtx PARAMS ((rtx, enum machine_mode, int)); ! static cselib_val *new_cselib_val PARAMS ((unsigned int, ! enum machine_mode)); ! static void add_mem_for_addr PARAMS ((cselib_val *, cselib_val *, ! rtx)); ! static cselib_val *cselib_lookup_mem PARAMS ((rtx, int)); ! static rtx cselib_subst_to_values PARAMS ((rtx)); ! static void cselib_invalidate_regno PARAMS ((unsigned int, ! enum machine_mode)); ! static int cselib_mem_conflict_p PARAMS ((rtx, rtx)); ! static int cselib_invalidate_mem_1 PARAMS ((void **, void *)); ! static void cselib_invalidate_mem PARAMS ((rtx)); ! static void cselib_invalidate_rtx PARAMS ((rtx, rtx, void *)); ! static void cselib_record_set PARAMS ((rtx, cselib_val *, ! cselib_val *)); ! static void cselib_record_sets PARAMS ((rtx)); ! /* There are three ways in which cselib can look up an rtx: ! - for a REG, the reg_values table (which is indexed by regno) is used ! - for a MEM, we recursively look up its address and then follow the ! addr_list of that value ! - for everything else, we compute a hash value and go through the hash ! table. Since different rtx's can still have the same hash value, ! this involves walking the table entries for a given value and comparing ! the locations of the entries with the rtx we are looking up. */ ! /* A table that enables us to look up elts by their value. */ ! static htab_t hash_table; ! /* This is a global so we don't have to pass this through every function. ! It is used in new_elt_loc_list to set SETTING_INSN. */ ! static rtx cselib_current_insn; ! /* Every new unknown value gets a unique number. */ ! static unsigned int next_unknown_value; ! /* The number of registers we had when the varrays were last resized. */ ! static unsigned int cselib_nregs; ! /* Count values without known locations. Whenever this grows too big, we ! remove these useless values from the table. */ ! static int n_useless_values; ! /* Number of useless values before we remove them from the hash table. */ ! #define MAX_USELESS_VALUES 32 ! /* This table maps from register number to values. It does not contain ! pointers to cselib_val structures, but rather elt_lists. The purpose is ! to be able to refer to the same register in different modes. */ ! static varray_type reg_values; ! #define REG_VALUES(I) VARRAY_ELT_LIST (reg_values, (I)) ! /* Here the set of indices I with REG_VALUES(I) != 0 is saved. This is used ! in clear_table() for fast emptying. */ ! static varray_type used_regs; ! /* We pass this to cselib_invalidate_mem to invalidate all of ! memory for a non-const call instruction. */ ! static rtx callmem; ! /* Memory for our structures is allocated from this obstack. */ ! static struct obstack cselib_obstack; ! /* Used to quickly free all memory. */ ! static char *cselib_startobj; ! /* Caches for unused structures. */ ! static cselib_val *empty_vals; ! static struct elt_list *empty_elt_lists; ! static struct elt_loc_list *empty_elt_loc_lists; ! /* Set by discard_useless_locs if it deleted the last location of any ! value. */ ! static int values_became_useless; ! /* Make a binary operation by properly ordering the operands and ! seeing if the expression folds. */ rtx ! simplify_gen_binary (code, mode, op0, op1) enum rtx_code code; enum machine_mode mode; rtx op0, op1; { rtx tem; ! /* Put complex operands first and constants second if commutative. */ ! if (GET_RTX_CLASS (code) == 'c' ! && ((CONSTANT_P (op0) && GET_CODE (op1) != CONST_INT) ! || (GET_RTX_CLASS (GET_CODE (op0)) == 'o' ! && GET_RTX_CLASS (GET_CODE (op1)) != 'o') ! || (GET_CODE (op0) == SUBREG ! && GET_RTX_CLASS (GET_CODE (SUBREG_REG (op0))) == 'o' ! && GET_RTX_CLASS (GET_CODE (op1)) != 'o'))) ! tem = op0, op0 = op1, op1 = tem; ! /* If this simplifies, do it. */ ! tem = simplify_binary_operation (code, mode, op0, op1); ! if (tem) ! return tem; ! /* Handle addition and subtraction of CONST_INT specially. Otherwise, ! just form the operation. */ ! if (code == PLUS && GET_CODE (op1) == CONST_INT ! && GET_MODE (op0) != VOIDmode) ! return plus_constant (op0, INTVAL (op1)); ! else if (code == MINUS && GET_CODE (op1) == CONST_INT ! && GET_MODE (op0) != VOIDmode) ! return plus_constant (op0, - INTVAL (op1)); ! else ! return gen_rtx_fmt_ee (code, mode, op0, op1); } /* Try to simplify a unary operation CODE whose output mode is to be MODE with input operand OP whose mode was originally OP_MODE. Return zero if no simplification can be made. */ - rtx simplify_unary_operation (code, mode, op, op_mode) enum rtx_code code; --- 95,412 ---- #define HWI_SIGN_EXTEND(low) \ ((((HOST_WIDE_INT) low) < 0) ? ((HOST_WIDE_INT) -1) : ((HOST_WIDE_INT) 0)) + static rtx neg_const_int PARAMS ((enum machine_mode, rtx)); + static int simplify_plus_minus_op_data_cmp PARAMS ((const void *, + const void *)); static rtx simplify_plus_minus PARAMS ((enum rtx_code, ! enum machine_mode, rtx, ! rtx, int)); static void check_fold_consts PARAMS ((PTR)); ! #if ! defined (REAL_IS_NOT_DOUBLE) || defined (REAL_ARITHMETIC) ! static void simplify_unary_real PARAMS ((PTR)); ! static void simplify_binary_real PARAMS ((PTR)); ! #endif ! static void simplify_binary_is2orm1 PARAMS ((PTR)); ! ! /* Negate a CONST_INT rtx, truncating (because a conversion from a ! maximally negative number can overflow). */ ! static rtx ! neg_const_int (mode, i) ! enum machine_mode mode; ! rtx i; ! { ! return GEN_INT (trunc_int_for_mode (- INTVAL (i), mode)); ! } ! ! /* Make a binary operation by properly ordering the operands and ! seeing if the expression folds. */ ! rtx ! simplify_gen_binary (code, mode, op0, op1) ! enum rtx_code code; ! enum machine_mode mode; ! rtx op0, op1; ! { ! rtx tem; ! /* Put complex operands first and constants second if commutative. */ ! if (GET_RTX_CLASS (code) == 'c' ! && swap_commutative_operands_p (op0, op1)) ! tem = op0, op0 = op1, op1 = tem; ! /* If this simplifies, do it. */ ! tem = simplify_binary_operation (code, mode, op0, op1); ! if (tem) ! return tem; ! /* Handle addition and subtraction specially. Otherwise, just form ! the operation. */ ! if (code == PLUS || code == MINUS) ! { ! tem = simplify_plus_minus (code, mode, op0, op1, 1); ! if (tem) ! return tem; ! } ! return gen_rtx_fmt_ee (code, mode, op0, op1); ! } ! ! /* If X is a MEM referencing the constant pool, return the real value. ! Otherwise return X. */ ! rtx ! avoid_constant_pool_reference (x) ! rtx x; ! { ! rtx c, addr; ! enum machine_mode cmode; ! if (GET_CODE (x) != MEM) ! return x; ! addr = XEXP (x, 0); ! if (GET_CODE (addr) != SYMBOL_REF ! || ! CONSTANT_POOL_ADDRESS_P (addr)) ! return x; ! c = get_pool_constant (addr); ! cmode = get_pool_mode (addr); ! /* If we're accessing the constant in a different mode than it was ! originally stored, attempt to fix that up via subreg simplifications. ! If that fails we have no choice but to return the original memory. */ ! if (cmode != GET_MODE (x)) ! { ! c = simplify_subreg (GET_MODE (x), c, cmode, 0); ! return c ? c : x; ! } ! return c; ! } ! ! /* Make a unary operation by first seeing if it folds and otherwise making ! the specified operation. */ ! rtx ! simplify_gen_unary (code, mode, op, op_mode) ! enum rtx_code code; ! enum machine_mode mode; ! rtx op; ! enum machine_mode op_mode; ! { ! rtx tem; ! ! /* If this simplifies, use it. */ ! if ((tem = simplify_unary_operation (code, mode, op, op_mode)) != 0) ! return tem; ! ! return gen_rtx_fmt_e (code, mode, op); ! } ! ! /* Likewise for ternary operations. */ ! ! rtx ! simplify_gen_ternary (code, mode, op0_mode, op0, op1, op2) ! enum rtx_code code; ! enum machine_mode mode, op0_mode; ! rtx op0, op1, op2; ! { ! rtx tem; ! ! /* If this simplifies, use it. */ ! if (0 != (tem = simplify_ternary_operation (code, mode, op0_mode, ! op0, op1, op2))) ! return tem; ! ! return gen_rtx_fmt_eee (code, mode, op0, op1, op2); ! } ! /* Likewise, for relational operations. ! CMP_MODE specifies mode comparison is done in. ! */ rtx ! simplify_gen_relational (code, mode, cmp_mode, op0, op1) enum rtx_code code; enum machine_mode mode; + enum machine_mode cmp_mode; rtx op0, op1; { rtx tem; ! if ((tem = simplify_relational_operation (code, cmp_mode, op0, op1)) != 0) ! return tem; ! /* Put complex operands first and constants second. */ ! if (swap_commutative_operands_p (op0, op1)) ! tem = op0, op0 = op1, op1 = tem, code = swap_condition (code); ! return gen_rtx_fmt_ee (code, mode, op0, op1); ! } ! ! /* Replace all occurrences of OLD in X with NEW and try to simplify the ! resulting RTX. Return a new RTX which is as simplified as possible. */ ! rtx ! simplify_replace_rtx (x, old, new) ! rtx x; ! rtx old; ! rtx new; ! { ! enum rtx_code code = GET_CODE (x); ! enum machine_mode mode = GET_MODE (x); ! /* If X is OLD, return NEW. Otherwise, if this is an expression, try ! to build a new expression substituting recursively. If we can't do ! anything, return our input. */ ! ! if (x == old) ! return new; ! ! switch (GET_RTX_CLASS (code)) ! { ! case '1': ! { ! enum machine_mode op_mode = GET_MODE (XEXP (x, 0)); ! rtx op = (XEXP (x, 0) == old ! ? new : simplify_replace_rtx (XEXP (x, 0), old, new)); ! ! return simplify_gen_unary (code, mode, op, op_mode); ! } ! ! case '2': ! case 'c': ! return ! simplify_gen_binary (code, mode, ! simplify_replace_rtx (XEXP (x, 0), old, new), ! simplify_replace_rtx (XEXP (x, 1), old, new)); ! case '<': ! { ! enum machine_mode op_mode = (GET_MODE (XEXP (x, 0)) != VOIDmode ! ? GET_MODE (XEXP (x, 0)) ! : GET_MODE (XEXP (x, 1))); ! rtx op0 = simplify_replace_rtx (XEXP (x, 0), old, new); ! rtx op1 = simplify_replace_rtx (XEXP (x, 1), old, new); ! ! return ! simplify_gen_relational (code, mode, ! (op_mode != VOIDmode ! ? op_mode ! : GET_MODE (op0) != VOIDmode ! ? GET_MODE (op0) ! : GET_MODE (op1)), ! op0, op1); ! } ! ! case '3': ! case 'b': ! { ! enum machine_mode op_mode = GET_MODE (XEXP (x, 0)); ! rtx op0 = simplify_replace_rtx (XEXP (x, 0), old, new); ! ! return ! simplify_gen_ternary (code, mode, ! (op_mode != VOIDmode ! ? op_mode ! : GET_MODE (op0)), ! op0, ! simplify_replace_rtx (XEXP (x, 1), old, new), ! simplify_replace_rtx (XEXP (x, 2), old, new)); ! } ! ! case 'x': ! /* The only case we try to handle is a SUBREG. */ ! if (code == SUBREG) ! { ! rtx exp; ! exp = simplify_gen_subreg (GET_MODE (x), ! simplify_replace_rtx (SUBREG_REG (x), ! old, new), ! GET_MODE (SUBREG_REG (x)), ! SUBREG_BYTE (x)); ! if (exp) ! x = exp; ! } ! return x; ! ! default: ! if (GET_CODE (x) == MEM) ! return ! replace_equiv_address_nv (x, ! simplify_replace_rtx (XEXP (x, 0), ! old, new)); ! ! return x; ! } ! return x; } + #if ! defined (REAL_IS_NOT_DOUBLE) || defined (REAL_ARITHMETIC) + /* Subroutine of simplify_unary_operation, called via do_float_handler. + Handles simplification of unary ops on floating point values. */ + struct simplify_unary_real_args + { + rtx operand; + rtx result; + enum machine_mode mode; + enum rtx_code code; + bool want_integer; + }; + #define REAL_VALUE_ABS(d_) \ + (REAL_VALUE_NEGATIVE (d_) ? REAL_VALUE_NEGATE (d_) : (d_)) + + static void + simplify_unary_real (p) + PTR p; + { + REAL_VALUE_TYPE d; + + struct simplify_unary_real_args *args = + (struct simplify_unary_real_args *) p; + + REAL_VALUE_FROM_CONST_DOUBLE (d, args->operand); + + if (args->want_integer) + { + HOST_WIDE_INT i; + + switch (args->code) + { + case FIX: i = REAL_VALUE_FIX (d); break; + case UNSIGNED_FIX: i = REAL_VALUE_UNSIGNED_FIX (d); break; + default: + abort (); + } + args->result = GEN_INT (trunc_int_for_mode (i, args->mode)); + } + else + { + switch (args->code) + { + case SQRT: + /* We don't attempt to optimize this. */ + args->result = 0; + return; + + case ABS: d = REAL_VALUE_ABS (d); break; + case NEG: d = REAL_VALUE_NEGATE (d); break; + case FLOAT_TRUNCATE: d = real_value_truncate (args->mode, d); break; + case FLOAT_EXTEND: /* All this does is change the mode. */ break; + case FIX: d = REAL_VALUE_RNDZINT (d); break; + case UNSIGNED_FIX: d = REAL_VALUE_UNSIGNED_RNDZINT (d); break; + default: + abort (); + } + args->result = CONST_DOUBLE_FROM_REAL_VALUE (d, args->mode); + } + } + #endif + /* Try to simplify a unary operation CODE whose output mode is to be MODE with input operand OP whose mode was originally OP_MODE. Return zero if no simplification can be made. */ rtx simplify_unary_operation (code, mode, op, op_mode) enum rtx_code code; *************** simplify_unary_operation (code, mode, op *** 243,248 **** --- 415,421 ---- enum machine_mode op_mode; { unsigned int width = GET_MODE_BITSIZE (mode); + rtx trueop = avoid_constant_pool_reference (op); /* The order of these tests is critical so that, for example, we don't check the wrong mode (input vs. output) for a conversion operation, *************** simplify_unary_operation (code, mode, op *** 250,265 **** #if !defined(REAL_IS_NOT_DOUBLE) || defined(REAL_ARITHMETIC) ! if (code == FLOAT && GET_MODE (op) == VOIDmode ! && (GET_CODE (op) == CONST_DOUBLE || GET_CODE (op) == CONST_INT)) { HOST_WIDE_INT hv, lv; REAL_VALUE_TYPE d; ! if (GET_CODE (op) == CONST_INT) ! lv = INTVAL (op), hv = HWI_SIGN_EXTEND (lv); else ! lv = CONST_DOUBLE_LOW (op), hv = CONST_DOUBLE_HIGH (op); #ifdef REAL_ARITHMETIC REAL_VALUE_FROM_INT (d, lv, hv, mode); --- 423,438 ---- #if !defined(REAL_IS_NOT_DOUBLE) || defined(REAL_ARITHMETIC) ! if (code == FLOAT && GET_MODE (trueop) == VOIDmode ! && (GET_CODE (trueop) == CONST_DOUBLE || GET_CODE (trueop) == CONST_INT)) { HOST_WIDE_INT hv, lv; REAL_VALUE_TYPE d; ! if (GET_CODE (trueop) == CONST_INT) ! lv = INTVAL (trueop), hv = HWI_SIGN_EXTEND (lv); else ! lv = CONST_DOUBLE_LOW (trueop), hv = CONST_DOUBLE_HIGH (trueop); #ifdef REAL_ARITHMETIC REAL_VALUE_FROM_INT (d, lv, hv, mode); *************** simplify_unary_operation (code, mode, op *** 283,298 **** d = real_value_truncate (mode, d); return CONST_DOUBLE_FROM_REAL_VALUE (d, mode); } ! else if (code == UNSIGNED_FLOAT && GET_MODE (op) == VOIDmode ! && (GET_CODE (op) == CONST_DOUBLE || GET_CODE (op) == CONST_INT)) { HOST_WIDE_INT hv, lv; REAL_VALUE_TYPE d; ! if (GET_CODE (op) == CONST_INT) ! lv = INTVAL (op), hv = HWI_SIGN_EXTEND (lv); else ! lv = CONST_DOUBLE_LOW (op), hv = CONST_DOUBLE_HIGH (op); if (op_mode == VOIDmode) { --- 456,472 ---- d = real_value_truncate (mode, d); return CONST_DOUBLE_FROM_REAL_VALUE (d, mode); } ! else if (code == UNSIGNED_FLOAT && GET_MODE (trueop) == VOIDmode ! && (GET_CODE (trueop) == CONST_DOUBLE ! || GET_CODE (trueop) == CONST_INT)) { HOST_WIDE_INT hv, lv; REAL_VALUE_TYPE d; ! if (GET_CODE (trueop) == CONST_INT) ! lv = INTVAL (trueop), hv = HWI_SIGN_EXTEND (lv); else ! lv = CONST_DOUBLE_LOW (trueop), hv = CONST_DOUBLE_HIGH (trueop); if (op_mode == VOIDmode) { *************** simplify_unary_operation (code, mode, op *** 320,330 **** } #endif ! if (GET_CODE (op) == CONST_INT && width <= HOST_BITS_PER_WIDE_INT && width > 0) { ! register HOST_WIDE_INT arg0 = INTVAL (op); ! register HOST_WIDE_INT val; switch (code) { --- 494,504 ---- } #endif ! if (GET_CODE (trueop) == CONST_INT && width <= HOST_BITS_PER_WIDE_INT && width > 0) { ! HOST_WIDE_INT arg0 = INTVAL (trueop); ! HOST_WIDE_INT val; switch (code) { *************** simplify_unary_operation (code, mode, op *** 352,359 **** break; case ZERO_EXTEND: if (op_mode == VOIDmode) ! op_mode = mode; if (GET_MODE_BITSIZE (op_mode) == HOST_BITS_PER_WIDE_INT) { /* If we were really extending the mode, --- 526,535 ---- break; case ZERO_EXTEND: + /* When zero-extending a CONST_INT, we need to know its + original mode. */ if (op_mode == VOIDmode) ! abort (); if (GET_MODE_BITSIZE (op_mode) == HOST_BITS_PER_WIDE_INT) { /* If we were really extending the mode, *************** simplify_unary_operation (code, mode, op *** 396,401 **** --- 572,579 ---- case SQRT: case FLOAT_EXTEND: case FLOAT_TRUNCATE: + case SS_TRUNCATE: + case US_TRUNCATE: return 0; default: *************** simplify_unary_operation (code, mode, op *** 409,424 **** /* We can do some operations on integer CONST_DOUBLEs. Also allow for a DImode operation on a CONST_INT. */ ! else if (GET_MODE (op) == VOIDmode && width <= HOST_BITS_PER_INT * 2 ! && (GET_CODE (op) == CONST_DOUBLE || GET_CODE (op) == CONST_INT)) { unsigned HOST_WIDE_INT l1, lv; HOST_WIDE_INT h1, hv; ! if (GET_CODE (op) == CONST_DOUBLE) ! l1 = CONST_DOUBLE_LOW (op), h1 = CONST_DOUBLE_HIGH (op); else ! l1 = INTVAL (op), h1 = HWI_SIGN_EXTEND (l1); switch (code) { --- 587,604 ---- /* We can do some operations on integer CONST_DOUBLEs. Also allow for a DImode operation on a CONST_INT. */ ! else if (GET_MODE (trueop) == VOIDmode ! && width <= HOST_BITS_PER_WIDE_INT * 2 ! && (GET_CODE (trueop) == CONST_DOUBLE ! || GET_CODE (trueop) == CONST_INT)) { unsigned HOST_WIDE_INT l1, lv; HOST_WIDE_INT h1, hv; ! if (GET_CODE (trueop) == CONST_DOUBLE) ! l1 = CONST_DOUBLE_LOW (trueop), h1 = CONST_DOUBLE_HIGH (trueop); else ! l1 = INTVAL (trueop), h1 = HWI_SIGN_EXTEND (l1); switch (code) { *************** simplify_unary_operation (code, mode, op *** 452,459 **** break; case ZERO_EXTEND: ! if (op_mode == VOIDmode ! || GET_MODE_BITSIZE (op_mode) > HOST_BITS_PER_WIDE_INT) return 0; hv = 0; --- 632,641 ---- break; case ZERO_EXTEND: ! if (op_mode == VOIDmode) ! abort (); ! ! if (GET_MODE_BITSIZE (op_mode) > HOST_BITS_PER_WIDE_INT) return 0; hv = 0; *************** simplify_unary_operation (code, mode, op *** 487,583 **** } #if ! defined (REAL_IS_NOT_DOUBLE) || defined (REAL_ARITHMETIC) ! else if (GET_CODE (op) == CONST_DOUBLE && GET_MODE_CLASS (mode) == MODE_FLOAT) { ! REAL_VALUE_TYPE d; ! jmp_buf handler; ! rtx x; ! ! if (setjmp (handler)) ! /* There used to be a warning here, but that is inadvisable. ! People may want to cause traps, and the natural way ! to do it should not get a warning. */ ! return 0; ! ! set_float_handler (handler); ! ! REAL_VALUE_FROM_CONST_DOUBLE (d, op); ! ! switch (code) ! { ! case NEG: ! d = REAL_VALUE_NEGATE (d); ! break; ! ! case ABS: ! if (REAL_VALUE_NEGATIVE (d)) ! d = REAL_VALUE_NEGATE (d); ! break; ! ! case FLOAT_TRUNCATE: ! d = real_value_truncate (mode, d); ! break; ! ! case FLOAT_EXTEND: ! /* All this does is change the mode. */ ! break; ! ! case FIX: ! d = REAL_VALUE_RNDZINT (d); ! break; ! ! case UNSIGNED_FIX: ! d = REAL_VALUE_UNSIGNED_RNDZINT (d); ! break; ! ! case SQRT: ! return 0; ! default: ! abort (); ! } ! x = CONST_DOUBLE_FROM_REAL_VALUE (d, mode); ! set_float_handler (NULL_PTR); ! return x; } ! else if (GET_CODE (op) == CONST_DOUBLE ! && GET_MODE_CLASS (GET_MODE (op)) == MODE_FLOAT && GET_MODE_CLASS (mode) == MODE_INT && width <= HOST_BITS_PER_WIDE_INT && width > 0) { ! REAL_VALUE_TYPE d; ! jmp_buf handler; ! HOST_WIDE_INT val; ! ! if (setjmp (handler)) ! return 0; ! ! set_float_handler (handler); ! ! REAL_VALUE_FROM_CONST_DOUBLE (d, op); ! ! switch (code) ! { ! case FIX: ! val = REAL_VALUE_FIX (d); ! break; ! ! case UNSIGNED_FIX: ! val = REAL_VALUE_UNSIGNED_FIX (d); ! break; ! ! default: ! abort (); ! } ! ! set_float_handler (NULL_PTR); ! val = trunc_int_for_mode (val, mode); ! return GEN_INT (val); } #endif /* This was formerly used only for non-IEEE float. --- 669,704 ---- } #if ! defined (REAL_IS_NOT_DOUBLE) || defined (REAL_ARITHMETIC) ! else if (GET_CODE (trueop) == CONST_DOUBLE && GET_MODE_CLASS (mode) == MODE_FLOAT) { ! struct simplify_unary_real_args args; ! args.operand = trueop; ! args.mode = mode; ! args.code = code; ! args.want_integer = false; ! if (do_float_handler (simplify_unary_real, (PTR) &args)) ! return args.result; ! return 0; } ! else if (GET_CODE (trueop) == CONST_DOUBLE ! && GET_MODE_CLASS (GET_MODE (trueop)) == MODE_FLOAT && GET_MODE_CLASS (mode) == MODE_INT && width <= HOST_BITS_PER_WIDE_INT && width > 0) { ! struct simplify_unary_real_args args; ! args.operand = trueop; ! args.mode = mode; ! args.code = code; ! args.want_integer = true; ! if (do_float_handler (simplify_unary_real, (PTR) &args)) ! return args.result; ! return 0; } #endif /* This was formerly used only for non-IEEE float. *************** simplify_unary_operation (code, mode, op *** 612,618 **** /* (sign_extend (truncate (minus (label_ref L1) (label_ref L2)))) becomes just the MINUS if its mode is MODE. This allows folding switch statements on machines using casesi (such as ! the Vax). */ if (GET_CODE (op) == TRUNCATE && GET_MODE (XEXP (op, 0)) == mode && GET_CODE (XEXP (op, 0)) == MINUS --- 733,739 ---- /* (sign_extend (truncate (minus (label_ref L1) (label_ref L2)))) becomes just the MINUS if its mode is MODE. This allows folding switch statements on machines using casesi (such as ! the VAX). */ if (GET_CODE (op) == TRUNCATE && GET_MODE (XEXP (op, 0)) == mode && GET_CODE (XEXP (op, 0)) == MINUS *************** simplify_unary_operation (code, mode, op *** 620,626 **** && GET_CODE (XEXP (XEXP (op, 0), 1)) == LABEL_REF) return XEXP (op, 0); ! #ifdef POINTERS_EXTEND_UNSIGNED if (! POINTERS_EXTEND_UNSIGNED && mode == Pmode && GET_MODE (op) == ptr_mode && (CONSTANT_P (op) --- 741,747 ---- && GET_CODE (XEXP (XEXP (op, 0), 1)) == LABEL_REF) return XEXP (op, 0); ! #if defined(POINTERS_EXTEND_UNSIGNED) && !defined(HAVE_ptr_extend) if (! POINTERS_EXTEND_UNSIGNED && mode == Pmode && GET_MODE (op) == ptr_mode && (CONSTANT_P (op) *************** simplify_unary_operation (code, mode, op *** 632,640 **** #endif break; ! #ifdef POINTERS_EXTEND_UNSIGNED case ZERO_EXTEND: ! if (POINTERS_EXTEND_UNSIGNED && mode == Pmode && GET_MODE (op) == ptr_mode && (CONSTANT_P (op) || (GET_CODE (op) == SUBREG --- 753,761 ---- #endif break; ! #if defined(POINTERS_EXTEND_UNSIGNED) && !defined(HAVE_ptr_extend) case ZERO_EXTEND: ! if (POINTERS_EXTEND_UNSIGNED > 0 && mode == Pmode && GET_MODE (op) == ptr_mode && (CONSTANT_P (op) || (GET_CODE (op) == SUBREG *************** simplify_unary_operation (code, mode, op *** 653,674 **** } } /* Simplify a binary operation CODE with result mode MODE, operating on OP0 and OP1. Return 0 if no simplification is possible. Don't use this for relational operations such as EQ or LT. Use simplify_relational_operation instead. */ - rtx simplify_binary_operation (code, mode, op0, op1) enum rtx_code code; enum machine_mode mode; rtx op0, op1; { ! register HOST_WIDE_INT arg0, arg1, arg0s, arg1s; HOST_WIDE_INT val; unsigned int width = GET_MODE_BITSIZE (mode); rtx tem; /* Relational operations don't work here. We must know the mode of the operands in order to do the comparison correctly. --- 774,886 ---- } } + #if ! defined (REAL_IS_NOT_DOUBLE) || defined (REAL_ARITHMETIC) + /* Subroutine of simplify_binary_operation, called via do_float_handler. + Handles simplification of binary ops on floating point values. */ + struct simplify_binary_real_args + { + rtx trueop0, trueop1; + rtx result; + enum rtx_code code; + enum machine_mode mode; + }; + + static void + simplify_binary_real (p) + PTR p; + { + REAL_VALUE_TYPE f0, f1, value; + struct simplify_binary_real_args *args = + (struct simplify_binary_real_args *) p; + + REAL_VALUE_FROM_CONST_DOUBLE (f0, args->trueop0); + REAL_VALUE_FROM_CONST_DOUBLE (f1, args->trueop1); + f0 = real_value_truncate (args->mode, f0); + f1 = real_value_truncate (args->mode, f1); + + #ifdef REAL_ARITHMETIC + #ifndef REAL_INFINITY + if (args->code == DIV && REAL_VALUES_EQUAL (f1, dconst0)) + { + args->result = 0; + return; + } + #endif + REAL_ARITHMETIC (value, rtx_to_tree_code (args->code), f0, f1); + #else + switch (args->code) + { + case PLUS: + value = f0 + f1; + break; + case MINUS: + value = f0 - f1; + break; + case MULT: + value = f0 * f1; + break; + case DIV: + #ifndef REAL_INFINITY + if (f1 == 0) + return 0; + #endif + value = f0 / f1; + break; + case SMIN: + value = MIN (f0, f1); + break; + case SMAX: + value = MAX (f0, f1); + break; + default: + abort (); + } + #endif + + value = real_value_truncate (args->mode, value); + args->result = CONST_DOUBLE_FROM_REAL_VALUE (value, args->mode); + } + #endif + + /* Another subroutine called via do_float_handler. This one tests + the floating point value given against 2. and -1. */ + struct simplify_binary_is2orm1_args + { + rtx value; + bool is_2; + bool is_m1; + }; + + static void + simplify_binary_is2orm1 (p) + PTR p; + { + REAL_VALUE_TYPE d; + struct simplify_binary_is2orm1_args *args = + (struct simplify_binary_is2orm1_args *) p; + + REAL_VALUE_FROM_CONST_DOUBLE (d, args->value); + args->is_2 = REAL_VALUES_EQUAL (d, dconst2); + args->is_m1 = REAL_VALUES_EQUAL (d, dconstm1); + } + /* Simplify a binary operation CODE with result mode MODE, operating on OP0 and OP1. Return 0 if no simplification is possible. Don't use this for relational operations such as EQ or LT. Use simplify_relational_operation instead. */ rtx simplify_binary_operation (code, mode, op0, op1) enum rtx_code code; enum machine_mode mode; rtx op0, op1; { ! HOST_WIDE_INT arg0, arg1, arg0s, arg1s; HOST_WIDE_INT val; unsigned int width = GET_MODE_BITSIZE (mode); rtx tem; + rtx trueop0 = avoid_constant_pool_reference (op0); + rtx trueop1 = avoid_constant_pool_reference (op1); /* Relational operations don't work here. We must know the mode of the operands in order to do the comparison correctly. *************** simplify_binary_operation (code, mode, o *** 678,761 **** if (GET_RTX_CLASS (code) == '<') abort (); #if ! defined (REAL_IS_NOT_DOUBLE) || defined (REAL_ARITHMETIC) if (GET_MODE_CLASS (mode) == MODE_FLOAT ! && GET_CODE (op0) == CONST_DOUBLE && GET_CODE (op1) == CONST_DOUBLE && mode == GET_MODE (op0) && mode == GET_MODE (op1)) { ! REAL_VALUE_TYPE f0, f1, value; ! jmp_buf handler; ! ! if (setjmp (handler)) ! return 0; ! ! set_float_handler (handler); ! ! REAL_VALUE_FROM_CONST_DOUBLE (f0, op0); ! REAL_VALUE_FROM_CONST_DOUBLE (f1, op1); ! f0 = real_value_truncate (mode, f0); ! f1 = real_value_truncate (mode, f1); ! ! #ifdef REAL_ARITHMETIC ! #ifndef REAL_INFINITY ! if (code == DIV && REAL_VALUES_EQUAL (f1, dconst0)) ! return 0; ! #endif ! REAL_ARITHMETIC (value, rtx_to_tree_code (code), f0, f1); ! #else ! switch (code) ! { ! case PLUS: ! value = f0 + f1; ! break; ! case MINUS: ! value = f0 - f1; ! break; ! case MULT: ! value = f0 * f1; ! break; ! case DIV: ! #ifndef REAL_INFINITY ! if (f1 == 0) ! return 0; ! #endif ! value = f0 / f1; ! break; ! case SMIN: ! value = MIN (f0, f1); ! break; ! case SMAX: ! value = MAX (f0, f1); ! break; ! default: ! abort (); ! } ! #endif ! value = real_value_truncate (mode, value); ! set_float_handler (NULL_PTR); ! return CONST_DOUBLE_FROM_REAL_VALUE (value, mode); } #endif /* not REAL_IS_NOT_DOUBLE, or REAL_ARITHMETIC */ /* We can fold some multi-word operations. */ if (GET_MODE_CLASS (mode) == MODE_INT && width == HOST_BITS_PER_WIDE_INT * 2 ! && (GET_CODE (op0) == CONST_DOUBLE || GET_CODE (op0) == CONST_INT) ! && (GET_CODE (op1) == CONST_DOUBLE || GET_CODE (op1) == CONST_INT)) { unsigned HOST_WIDE_INT l1, l2, lv; HOST_WIDE_INT h1, h2, hv; ! if (GET_CODE (op0) == CONST_DOUBLE) ! l1 = CONST_DOUBLE_LOW (op0), h1 = CONST_DOUBLE_HIGH (op0); else ! l1 = INTVAL (op0), h1 = HWI_SIGN_EXTEND (l1); ! if (GET_CODE (op1) == CONST_DOUBLE) ! l2 = CONST_DOUBLE_LOW (op1), h2 = CONST_DOUBLE_HIGH (op1); else ! l2 = INTVAL (op1), h2 = HWI_SIGN_EXTEND (l2); switch (code) { --- 890,941 ---- if (GET_RTX_CLASS (code) == '<') abort (); + /* Make sure the constant is second. */ + if (GET_RTX_CLASS (code) == 'c' + && swap_commutative_operands_p (trueop0, trueop1)) + { + tem = op0, op0 = op1, op1 = tem; + tem = trueop0, trueop0 = trueop1, trueop1 = tem; + } + #if ! defined (REAL_IS_NOT_DOUBLE) || defined (REAL_ARITHMETIC) if (GET_MODE_CLASS (mode) == MODE_FLOAT ! && GET_CODE (trueop0) == CONST_DOUBLE ! && GET_CODE (trueop1) == CONST_DOUBLE && mode == GET_MODE (op0) && mode == GET_MODE (op1)) { ! struct simplify_binary_real_args args; ! args.trueop0 = trueop0; ! args.trueop1 = trueop1; ! args.mode = mode; ! args.code = code; ! if (do_float_handler (simplify_binary_real, (PTR) &args)) ! return args.result; ! return 0; } #endif /* not REAL_IS_NOT_DOUBLE, or REAL_ARITHMETIC */ /* We can fold some multi-word operations. */ if (GET_MODE_CLASS (mode) == MODE_INT && width == HOST_BITS_PER_WIDE_INT * 2 ! && (GET_CODE (trueop0) == CONST_DOUBLE ! || GET_CODE (trueop0) == CONST_INT) ! && (GET_CODE (trueop1) == CONST_DOUBLE ! || GET_CODE (trueop1) == CONST_INT)) { unsigned HOST_WIDE_INT l1, l2, lv; HOST_WIDE_INT h1, h2, hv; ! if (GET_CODE (trueop0) == CONST_DOUBLE) ! l1 = CONST_DOUBLE_LOW (trueop0), h1 = CONST_DOUBLE_HIGH (trueop0); else ! l1 = INTVAL (trueop0), h1 = HWI_SIGN_EXTEND (l1); ! if (GET_CODE (trueop1) == CONST_DOUBLE) ! l2 = CONST_DOUBLE_LOW (trueop1), h2 = CONST_DOUBLE_HIGH (trueop1); else ! l2 = INTVAL (trueop1), h2 = HWI_SIGN_EXTEND (l2); switch (code) { *************** simplify_binary_operation (code, mode, o *** 872,881 **** /* In IEEE floating point, x+0 is not the same as x. Similarly for the other optimizations below. */ if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT ! && FLOAT_MODE_P (mode) && ! flag_fast_math) break; ! if (op1 == CONST0_RTX (mode)) return op0; /* ((-a) + b) -> (b - a) and similarly for (a + (-b)) */ --- 1052,1061 ---- /* In IEEE floating point, x+0 is not the same as x. Similarly for the other optimizations below. */ if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT ! && FLOAT_MODE_P (mode) && ! flag_unsafe_math_optimizations) break; ! if (trueop1 == CONST0_RTX (mode)) return op0; /* ((-a) + b) -> (b - a) and similarly for (a + (-b)) */ *************** simplify_binary_operation (code, mode, o *** 884,889 **** --- 1064,1075 ---- else if (GET_CODE (op1) == NEG) return simplify_gen_binary (MINUS, mode, op0, XEXP (op1, 0)); + /* (~a) + 1 -> -a */ + if (INTEGRAL_MODE_P (mode) + && GET_CODE (op0) == NOT + && trueop1 == const1_rtx) + return gen_rtx_NEG (mode, XEXP (op0, 0)); + /* Handle both-operands-constant cases. We can only add CONST_INTs to constants since the sum of relocatable symbols can't be handled by most assemblers. Don't add CONST_INT *************** simplify_binary_operation (code, mode, o *** 959,966 **** if (INTEGRAL_MODE_P (mode) && (GET_CODE (op0) == PLUS || GET_CODE (op0) == MINUS ! || GET_CODE (op1) == PLUS || GET_CODE (op1) == MINUS) ! && (tem = simplify_plus_minus (code, mode, op0, op1)) != 0) return tem; break; --- 1145,1156 ---- if (INTEGRAL_MODE_P (mode) && (GET_CODE (op0) == PLUS || GET_CODE (op0) == MINUS ! || GET_CODE (op1) == PLUS || GET_CODE (op1) == MINUS ! || (GET_CODE (op0) == CONST ! && GET_CODE (XEXP (op0, 0)) == PLUS) ! || (GET_CODE (op1) == CONST ! && GET_CODE (XEXP (op1, 0)) == PLUS)) ! && (tem = simplify_plus_minus (code, mode, op0, op1, 0)) != 0) return tem; break; *************** simplify_binary_operation (code, mode, o *** 973,980 **** In IEEE floating point, x-0 is not the same as x. */ if ((TARGET_FLOAT_FORMAT != IEEE_FLOAT_FORMAT ! || ! FLOAT_MODE_P (mode) || flag_fast_math) ! && op1 == CONST0_RTX (mode)) return op0; #endif --- 1163,1170 ---- In IEEE floating point, x-0 is not the same as x. */ if ((TARGET_FLOAT_FORMAT != IEEE_FLOAT_FORMAT ! || ! FLOAT_MODE_P (mode) || flag_unsafe_math_optimizations) ! && trueop1 == CONST0_RTX (mode)) return op0; #endif *************** simplify_binary_operation (code, mode, o *** 997,1029 **** #endif return xop00; } - break; case MINUS: /* None of these optimizations can be done for IEEE floating point. */ if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT ! && FLOAT_MODE_P (mode) && ! flag_fast_math) break; /* We can't assume x-x is 0 even with non-IEEE floating point, but since it is zero except in very strange circumstances, we ! will treat it as zero with -ffast-math. */ ! if (rtx_equal_p (op0, op1) && ! side_effects_p (op0) ! && (! FLOAT_MODE_P (mode) || flag_fast_math)) return CONST0_RTX (mode); /* Change subtraction from zero into negation. */ ! if (op0 == CONST0_RTX (mode)) return gen_rtx_NEG (mode, op1); /* (-1 - a) is ~a. */ ! if (op0 == constm1_rtx) return gen_rtx_NOT (mode, op1); /* Subtracting 0 has no effect. */ ! if (op1 == CONST0_RTX (mode)) return op0; /* See if this is something like X * C - X or vice versa or --- 1187,1219 ---- #endif return xop00; } break; + case MINUS: /* None of these optimizations can be done for IEEE floating point. */ if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT ! && FLOAT_MODE_P (mode) && ! flag_unsafe_math_optimizations) break; /* We can't assume x-x is 0 even with non-IEEE floating point, but since it is zero except in very strange circumstances, we ! will treat it as zero with -funsafe-math-optimizations. */ ! if (rtx_equal_p (trueop0, trueop1) && ! side_effects_p (op0) ! && (! FLOAT_MODE_P (mode) || flag_unsafe_math_optimizations)) return CONST0_RTX (mode); /* Change subtraction from zero into negation. */ ! if (trueop0 == CONST0_RTX (mode)) return gen_rtx_NEG (mode, op1); /* (-1 - a) is ~a. */ ! if (trueop0 == constm1_rtx) return gen_rtx_NOT (mode, op1); /* Subtracting 0 has no effect. */ ! if (trueop1 == CONST0_RTX (mode)) return op0; /* See if this is something like X * C - X or vice versa or *************** simplify_binary_operation (code, mode, o *** 1092,1104 **** if (INTEGRAL_MODE_P (mode) && (GET_CODE (op0) == PLUS || GET_CODE (op0) == MINUS ! || GET_CODE (op1) == PLUS || GET_CODE (op1) == MINUS) ! && (tem = simplify_plus_minus (code, mode, op0, op1)) != 0) return tem; /* Don't let a relocatable value get a negative coeff. */ if (GET_CODE (op1) == CONST_INT && GET_MODE (op0) != VOIDmode) ! return plus_constant (op0, - INTVAL (op1)); /* (x - (x & y)) -> (x & ~y) */ if (GET_CODE (op1) == AND) --- 1282,1300 ---- if (INTEGRAL_MODE_P (mode) && (GET_CODE (op0) == PLUS || GET_CODE (op0) == MINUS ! || GET_CODE (op1) == PLUS || GET_CODE (op1) == MINUS ! || (GET_CODE (op0) == CONST ! && GET_CODE (XEXP (op0, 0)) == PLUS) ! || (GET_CODE (op1) == CONST ! && GET_CODE (XEXP (op1, 0)) == PLUS)) ! && (tem = simplify_plus_minus (code, mode, op0, op1, 0)) != 0) return tem; /* Don't let a relocatable value get a negative coeff. */ if (GET_CODE (op1) == CONST_INT && GET_MODE (op0) != VOIDmode) ! return simplify_gen_binary (PLUS, mode, ! op0, ! neg_const_int (mode, op1)); /* (x - (x & y)) -> (x & ~y) */ if (GET_CODE (op1) == AND) *************** simplify_binary_operation (code, mode, o *** 1113,1119 **** break; case MULT: ! if (op1 == constm1_rtx) { tem = simplify_unary_operation (NEG, mode, op0, mode); --- 1309,1315 ---- break; case MULT: ! if (trueop1 == constm1_rtx) { tem = simplify_unary_operation (NEG, mode, op0, mode); *************** simplify_binary_operation (code, mode, o *** 1122,1142 **** /* In IEEE floating point, x*0 is not always 0. */ if ((TARGET_FLOAT_FORMAT != IEEE_FLOAT_FORMAT ! || ! FLOAT_MODE_P (mode) || flag_fast_math) ! && op1 == CONST0_RTX (mode) && ! side_effects_p (op0)) return op1; /* In IEEE floating point, x*1 is not equivalent to x for nans. However, ANSI says we can drop signals, so we can do this anyway. */ ! if (op1 == CONST1_RTX (mode)) return op0; /* Convert multiply by constant power of two into shift unless we are still generating RTL. This test is a kludge. */ ! if (GET_CODE (op1) == CONST_INT ! && (val = exact_log2 (INTVAL (op1))) >= 0 /* If the mode is larger than the host word size, and the uppermost bit is set, then this isn't a power of two due to implicit sign extension. */ --- 1318,1338 ---- /* In IEEE floating point, x*0 is not always 0. */ if ((TARGET_FLOAT_FORMAT != IEEE_FLOAT_FORMAT ! || ! FLOAT_MODE_P (mode) || flag_unsafe_math_optimizations) ! && trueop1 == CONST0_RTX (mode) && ! side_effects_p (op0)) return op1; /* In IEEE floating point, x*1 is not equivalent to x for nans. However, ANSI says we can drop signals, so we can do this anyway. */ ! if (trueop1 == CONST1_RTX (mode)) return op0; /* Convert multiply by constant power of two into shift unless we are still generating RTL. This test is a kludge. */ ! if (GET_CODE (trueop1) == CONST_INT ! && (val = exact_log2 (INTVAL (trueop1))) >= 0 /* If the mode is larger than the host word size, and the uppermost bit is set, then this isn't a power of two due to implicit sign extension. */ *************** simplify_binary_operation (code, mode, o *** 1145,1182 **** && ! rtx_equal_function_value_matters) return gen_rtx_ASHIFT (mode, op0, GEN_INT (val)); ! if (GET_CODE (op1) == CONST_DOUBLE ! && GET_MODE_CLASS (GET_MODE (op1)) == MODE_FLOAT) { ! REAL_VALUE_TYPE d; ! jmp_buf handler; ! int op1is2, op1ism1; ! if (setjmp (handler)) return 0; - set_float_handler (handler); - REAL_VALUE_FROM_CONST_DOUBLE (d, op1); - op1is2 = REAL_VALUES_EQUAL (d, dconst2); - op1ism1 = REAL_VALUES_EQUAL (d, dconstm1); - set_float_handler (NULL_PTR); - /* x*2 is x+x and x*(-1) is -x */ ! if (op1is2 && GET_MODE (op0) == mode) return gen_rtx_PLUS (mode, op0, copy_rtx (op0)); ! else if (op1ism1 && GET_MODE (op0) == mode) return gen_rtx_NEG (mode, op0); } break; case IOR: ! if (op1 == const0_rtx) return op0; ! if (GET_CODE (op1) == CONST_INT ! && (INTVAL (op1) & GET_MODE_MASK (mode)) == GET_MODE_MASK (mode)) return op1; ! if (rtx_equal_p (op0, op1) && ! side_effects_p (op0)) return op0; /* A | (~A) -> -1 */ if (((GET_CODE (op0) == NOT && rtx_equal_p (XEXP (op0, 0), op1)) --- 1341,1372 ---- && ! rtx_equal_function_value_matters) return gen_rtx_ASHIFT (mode, op0, GEN_INT (val)); ! if (GET_CODE (trueop1) == CONST_DOUBLE ! && GET_MODE_CLASS (GET_MODE (trueop1)) == MODE_FLOAT) { ! struct simplify_binary_is2orm1_args args; ! args.value = trueop1; ! if (! do_float_handler (simplify_binary_is2orm1, (PTR) &args)) return 0; /* x*2 is x+x and x*(-1) is -x */ ! if (args.is_2 && GET_MODE (op0) == mode) return gen_rtx_PLUS (mode, op0, copy_rtx (op0)); ! else if (args.is_m1 && GET_MODE (op0) == mode) return gen_rtx_NEG (mode, op0); } break; case IOR: ! if (trueop1 == const0_rtx) return op0; ! if (GET_CODE (trueop1) == CONST_INT ! && ((INTVAL (trueop1) & GET_MODE_MASK (mode)) ! == GET_MODE_MASK (mode))) return op1; ! if (rtx_equal_p (trueop0, trueop1) && ! side_effects_p (op0)) return op0; /* A | (~A) -> -1 */ if (((GET_CODE (op0) == NOT && rtx_equal_p (XEXP (op0, 0), op1)) *************** simplify_binary_operation (code, mode, o *** 1187,1209 **** break; case XOR: ! if (op1 == const0_rtx) return op0; ! if (GET_CODE (op1) == CONST_INT ! && (INTVAL (op1) & GET_MODE_MASK (mode)) == GET_MODE_MASK (mode)) return gen_rtx_NOT (mode, op0); ! if (op0 == op1 && ! side_effects_p (op0) && GET_MODE_CLASS (mode) != MODE_CC) return const0_rtx; break; case AND: ! if (op1 == const0_rtx && ! side_effects_p (op0)) return const0_rtx; ! if (GET_CODE (op1) == CONST_INT ! && (INTVAL (op1) & GET_MODE_MASK (mode)) == GET_MODE_MASK (mode)) return op0; ! if (op0 == op1 && ! side_effects_p (op0) && GET_MODE_CLASS (mode) != MODE_CC) return op0; /* A & (~A) -> 0 */ --- 1377,1401 ---- break; case XOR: ! if (trueop1 == const0_rtx) return op0; ! if (GET_CODE (trueop1) == CONST_INT ! && ((INTVAL (trueop1) & GET_MODE_MASK (mode)) ! == GET_MODE_MASK (mode))) return gen_rtx_NOT (mode, op0); ! if (trueop0 == trueop1 && ! side_effects_p (op0) && GET_MODE_CLASS (mode) != MODE_CC) return const0_rtx; break; case AND: ! if (trueop1 == const0_rtx && ! side_effects_p (op0)) return const0_rtx; ! if (GET_CODE (trueop1) == CONST_INT ! && ((INTVAL (trueop1) & GET_MODE_MASK (mode)) ! == GET_MODE_MASK (mode))) return op0; ! if (trueop0 == trueop1 && ! side_effects_p (op0) && GET_MODE_CLASS (mode) != MODE_CC) return op0; /* A & (~A) -> 0 */ *************** simplify_binary_operation (code, mode, o *** 1217,1250 **** case UDIV: /* Convert divide by power of two into shift (divide by 1 handled below). */ ! if (GET_CODE (op1) == CONST_INT ! && (arg1 = exact_log2 (INTVAL (op1))) > 0) return gen_rtx_LSHIFTRT (mode, op0, GEN_INT (arg1)); /* ... fall through ... */ case DIV: ! if (op1 == CONST1_RTX (mode)) ! return op0; /* In IEEE floating point, 0/x is not always 0. */ if ((TARGET_FLOAT_FORMAT != IEEE_FLOAT_FORMAT ! || ! FLOAT_MODE_P (mode) || flag_fast_math) ! && op0 == CONST0_RTX (mode) && ! side_effects_p (op1)) return op0; #if ! defined (REAL_IS_NOT_DOUBLE) || defined (REAL_ARITHMETIC) /* Change division by a constant into multiplication. Only do ! this with -ffast-math until an expert says it is safe in ! general. */ ! else if (GET_CODE (op1) == CONST_DOUBLE ! && GET_MODE_CLASS (GET_MODE (op1)) == MODE_FLOAT ! && op1 != CONST0_RTX (mode) ! && flag_fast_math) { REAL_VALUE_TYPE d; ! REAL_VALUE_FROM_CONST_DOUBLE (d, op1); if (! REAL_VALUES_EQUAL (d, dconst0)) { --- 1409,1451 ---- case UDIV: /* Convert divide by power of two into shift (divide by 1 handled below). */ ! if (GET_CODE (trueop1) == CONST_INT ! && (arg1 = exact_log2 (INTVAL (trueop1))) > 0) return gen_rtx_LSHIFTRT (mode, op0, GEN_INT (arg1)); /* ... fall through ... */ case DIV: ! if (trueop1 == CONST1_RTX (mode)) ! { ! /* On some platforms DIV uses narrower mode than its ! operands. */ ! rtx x = gen_lowpart_common (mode, op0); ! if (x) ! return x; ! else if (mode != GET_MODE (op0) && GET_MODE (op0) != VOIDmode) ! return gen_lowpart_SUBREG (mode, op0); ! else ! return op0; ! } /* In IEEE floating point, 0/x is not always 0. */ if ((TARGET_FLOAT_FORMAT != IEEE_FLOAT_FORMAT ! || ! FLOAT_MODE_P (mode) || flag_unsafe_math_optimizations) ! && trueop0 == CONST0_RTX (mode) && ! side_effects_p (op1)) return op0; #if ! defined (REAL_IS_NOT_DOUBLE) || defined (REAL_ARITHMETIC) /* Change division by a constant into multiplication. Only do ! this with -funsafe-math-optimizations. */ ! else if (GET_CODE (trueop1) == CONST_DOUBLE ! && GET_MODE_CLASS (GET_MODE (trueop1)) == MODE_FLOAT ! && trueop1 != CONST0_RTX (mode) ! && flag_unsafe_math_optimizations) { REAL_VALUE_TYPE d; ! REAL_VALUE_FROM_CONST_DOUBLE (d, trueop1); if (! REAL_VALUES_EQUAL (d, dconst0)) { *************** simplify_binary_operation (code, mode, o *** 1264,1277 **** case UMOD: /* Handle modulus by power of two (mod with 1 handled below). */ ! if (GET_CODE (op1) == CONST_INT ! && exact_log2 (INTVAL (op1)) > 0) return gen_rtx_AND (mode, op0, GEN_INT (INTVAL (op1) - 1)); /* ... fall through ... */ case MOD: ! if ((op0 == const0_rtx || op1 == const1_rtx) && ! side_effects_p (op0) && ! side_effects_p (op1)) return const0_rtx; break; --- 1465,1478 ---- case UMOD: /* Handle modulus by power of two (mod with 1 handled below). */ ! if (GET_CODE (trueop1) == CONST_INT ! && exact_log2 (INTVAL (trueop1)) > 0) return gen_rtx_AND (mode, op0, GEN_INT (INTVAL (op1) - 1)); /* ... fall through ... */ case MOD: ! if ((trueop0 == const0_rtx || trueop1 == const1_rtx) && ! side_effects_p (op0) && ! side_effects_p (op1)) return const0_rtx; break; *************** simplify_binary_operation (code, mode, o *** 1279,1286 **** case ROTATERT: case ROTATE: /* Rotating ~0 always results in ~0. */ ! if (GET_CODE (op0) == CONST_INT && width <= HOST_BITS_PER_WIDE_INT ! && (unsigned HOST_WIDE_INT) INTVAL (op0) == GET_MODE_MASK (mode) && ! side_effects_p (op1)) return op0; --- 1480,1487 ---- case ROTATERT: case ROTATE: /* Rotating ~0 always results in ~0. */ ! if (GET_CODE (trueop0) == CONST_INT && width <= HOST_BITS_PER_WIDE_INT ! && (unsigned HOST_WIDE_INT) INTVAL (trueop0) == GET_MODE_MASK (mode) && ! side_effects_p (op1)) return op0; *************** simplify_binary_operation (code, mode, o *** 1289,1333 **** case ASHIFT: case ASHIFTRT: case LSHIFTRT: ! if (op1 == const0_rtx) return op0; ! if (op0 == const0_rtx && ! side_effects_p (op1)) return op0; break; case SMIN: ! if (width <= HOST_BITS_PER_WIDE_INT && GET_CODE (op1) == CONST_INT ! && INTVAL (op1) == (HOST_WIDE_INT) 1 << (width -1) && ! side_effects_p (op0)) return op1; ! else if (rtx_equal_p (op0, op1) && ! side_effects_p (op0)) return op0; break; case SMAX: ! if (width <= HOST_BITS_PER_WIDE_INT && GET_CODE (op1) == CONST_INT ! && ((unsigned HOST_WIDE_INT) INTVAL (op1) == (unsigned HOST_WIDE_INT) GET_MODE_MASK (mode) >> 1) && ! side_effects_p (op0)) return op1; ! else if (rtx_equal_p (op0, op1) && ! side_effects_p (op0)) return op0; break; case UMIN: ! if (op1 == const0_rtx && ! side_effects_p (op0)) return op1; ! else if (rtx_equal_p (op0, op1) && ! side_effects_p (op0)) return op0; break; case UMAX: ! if (op1 == constm1_rtx && ! side_effects_p (op0)) return op1; ! else if (rtx_equal_p (op0, op1) && ! side_effects_p (op0)) return op0; break; default: abort (); } --- 1490,1541 ---- case ASHIFT: case ASHIFTRT: case LSHIFTRT: ! if (trueop1 == const0_rtx) return op0; ! if (trueop0 == const0_rtx && ! side_effects_p (op1)) return op0; break; case SMIN: ! if (width <= HOST_BITS_PER_WIDE_INT && GET_CODE (trueop1) == CONST_INT ! && INTVAL (trueop1) == (HOST_WIDE_INT) 1 << (width -1) && ! side_effects_p (op0)) return op1; ! else if (rtx_equal_p (trueop0, trueop1) && ! side_effects_p (op0)) return op0; break; case SMAX: ! if (width <= HOST_BITS_PER_WIDE_INT && GET_CODE (trueop1) == CONST_INT ! && ((unsigned HOST_WIDE_INT) INTVAL (trueop1) == (unsigned HOST_WIDE_INT) GET_MODE_MASK (mode) >> 1) && ! side_effects_p (op0)) return op1; ! else if (rtx_equal_p (trueop0, trueop1) && ! side_effects_p (op0)) return op0; break; case UMIN: ! if (trueop1 == const0_rtx && ! side_effects_p (op0)) return op1; ! else if (rtx_equal_p (trueop0, trueop1) && ! side_effects_p (op0)) return op0; break; case UMAX: ! if (trueop1 == constm1_rtx && ! side_effects_p (op0)) return op1; ! else if (rtx_equal_p (trueop0, trueop1) && ! side_effects_p (op0)) return op0; break; + case SS_PLUS: + case US_PLUS: + case SS_MINUS: + case US_MINUS: + /* ??? There are simplifications that can be done. */ + return 0; + default: abort (); } *************** simplify_binary_operation (code, mode, o *** 1338,1345 **** /* Get the integer argument values in two forms: zero-extended in ARG0, ARG1 and sign-extended in ARG0S, ARG1S. */ ! arg0 = INTVAL (op0); ! arg1 = INTVAL (op1); if (width < HOST_BITS_PER_WIDE_INT) { --- 1546,1553 ---- /* Get the integer argument values in two forms: zero-extended in ARG0, ARG1 and sign-extended in ARG0S, ARG1S. */ ! arg0 = INTVAL (trueop0); ! arg1 = INTVAL (trueop1); if (width < HOST_BITS_PER_WIDE_INT) { *************** simplify_binary_operation (code, mode, o *** 1518,1536 **** Rather than test for specific case, we do this by a brute-force method and do all possible simplifications until no more changes occur. Then ! we rebuild the operation. */ static rtx ! simplify_plus_minus (code, mode, op0, op1) enum rtx_code code; enum machine_mode mode; rtx op0, op1; { ! rtx ops[8]; ! int negs[8]; rtx result, tem; ! int n_ops = 2, input_ops = 2, input_consts = 0, n_consts = 0; ! int first = 1, negate = 0, changed; int i, j; memset ((char *) ops, 0, sizeof ops); --- 1726,1767 ---- Rather than test for specific case, we do this by a brute-force method and do all possible simplifications until no more changes occur. Then ! we rebuild the operation. ! ! If FORCE is true, then always generate the rtx. This is used to ! canonicalize stuff emitted from simplify_gen_binary. Note that this ! can still fail if the rtx is too complex. It won't fail just because ! the result is not 'simpler' than the input, however. */ ! ! struct simplify_plus_minus_op_data ! { ! rtx op; ! int neg; ! }; ! ! static int ! simplify_plus_minus_op_data_cmp (p1, p2) ! const void *p1; ! const void *p2; ! { ! const struct simplify_plus_minus_op_data *d1 = p1; ! const struct simplify_plus_minus_op_data *d2 = p2; ! ! return (commutative_operand_precedence (d2->op) ! - commutative_operand_precedence (d1->op)); ! } static rtx ! simplify_plus_minus (code, mode, op0, op1, force) enum rtx_code code; enum machine_mode mode; rtx op0, op1; + int force; { ! struct simplify_plus_minus_op_data ops[8]; rtx result, tem; ! int n_ops = 2, input_ops = 2, input_consts = 0, n_consts; ! int first, negate, changed; int i, j; memset ((char *) ops, 0, sizeof ops); *************** simplify_plus_minus (code, mode, op0, op *** 1539,1691 **** changed. If we run out of room in our array, give up; this should almost never happen. */ ! ops[0] = op0, ops[1] = op1, negs[0] = 0, negs[1] = (code == MINUS); ! changed = 1; ! while (changed) { changed = 0; for (i = 0; i < n_ops; i++) ! switch (GET_CODE (ops[i])) ! { ! case PLUS: ! case MINUS: ! if (n_ops == 7) ! return 0; ! ops[n_ops] = XEXP (ops[i], 1); ! negs[n_ops++] = GET_CODE (ops[i]) == MINUS ? !negs[i] : negs[i]; ! ops[i] = XEXP (ops[i], 0); ! input_ops++; ! changed = 1; ! break; ! case NEG: ! ops[i] = XEXP (ops[i], 0); ! negs[i] = ! negs[i]; ! changed = 1; ! break; ! case CONST: ! ops[i] = XEXP (ops[i], 0); ! input_consts++; ! changed = 1; ! break; ! case NOT: ! /* ~a -> (-a - 1) */ ! if (n_ops != 7) ! { ! ops[n_ops] = constm1_rtx; ! negs[n_ops++] = negs[i]; ! ops[i] = XEXP (ops[i], 0); ! negs[i] = ! negs[i]; ! changed = 1; ! } ! break; ! case CONST_INT: ! if (negs[i]) ! ops[i] = GEN_INT (- INTVAL (ops[i])), negs[i] = 0, changed = 1; ! break; ! default: ! break; ! } } /* If we only have two operands, we can't do anything. */ ! if (n_ops <= 2) ! return 0; /* Now simplify each pair of operands until nothing changes. The first time through just simplify constants against each other. */ ! changed = 1; ! while (changed) { changed = first; for (i = 0; i < n_ops - 1; i++) for (j = i + 1; j < n_ops; j++) ! if (ops[i] != 0 && ops[j] != 0 ! && (! first || (CONSTANT_P (ops[i]) && CONSTANT_P (ops[j])))) ! { ! rtx lhs = ops[i], rhs = ops[j]; ! enum rtx_code ncode = PLUS; ! if (negs[i] && ! negs[j]) ! lhs = ops[j], rhs = ops[i], ncode = MINUS; ! else if (! negs[i] && negs[j]) ! ncode = MINUS; ! tem = simplify_binary_operation (ncode, mode, lhs, rhs); ! if (tem) ! { ! ops[i] = tem, ops[j] = 0; ! negs[i] = negs[i] && negs[j]; ! if (GET_CODE (tem) == NEG) ! ops[i] = XEXP (tem, 0), negs[i] = ! negs[i]; ! if (GET_CODE (ops[i]) == CONST_INT && negs[i]) ! ops[i] = GEN_INT (- INTVAL (ops[i])), negs[i] = 0; ! changed = 1; ! } ! } first = 0; } ! /* Pack all the operands to the lower-numbered entries and give up if ! we didn't reduce the number of operands we had. Make sure we ! count a CONST as two operands. If we have the same number of ! operands, but have made more CONSTs than we had, this is also ! an improvement, so accept it. */ ! for (i = 0, j = 0; j < n_ops; j++) ! if (ops[j] != 0) ! { ! ops[i] = ops[j], negs[i++] = negs[j]; ! if (GET_CODE (ops[j]) == CONST) ! n_consts++; ! } ! if (i + n_consts > input_ops ! || (i + n_consts == input_ops && n_consts <= input_consts)) ! return 0; ! n_ops = i; ! /* If we have a CONST_INT, put it last. */ ! for (i = 0; i < n_ops - 1; i++) ! if (GET_CODE (ops[i]) == CONST_INT) ! { ! tem = ops[n_ops - 1], ops[n_ops - 1] = ops[i] , ops[i] = tem; ! j = negs[n_ops - 1], negs[n_ops - 1] = negs[i], negs[i] = j; ! } /* Put a non-negated operand first. If there aren't any, make all operands positive and negate the whole thing later. */ - for (i = 0; i < n_ops && negs[i]; i++) - ; if (i == n_ops) { for (i = 0; i < n_ops; i++) ! negs[i] = 0; negate = 1; } else if (i != 0) { ! tem = ops[0], ops[0] = ops[i], ops[i] = tem; ! j = negs[0], negs[0] = negs[i], negs[i] = j; } /* Now make the result by performing the requested operations. */ ! result = ops[0]; for (i = 1; i < n_ops; i++) ! result = simplify_gen_binary (negs[i] ? MINUS : PLUS, mode, result, ops[i]); return negate ? gen_rtx_NEG (mode, result) : result; } --- 1770,1994 ---- changed. If we run out of room in our array, give up; this should almost never happen. */ ! ops[0].op = op0; ! ops[0].neg = 0; ! ops[1].op = op1; ! ops[1].neg = (code == MINUS); ! do { changed = 0; for (i = 0; i < n_ops; i++) ! { ! rtx this_op = ops[i].op; ! int this_neg = ops[i].neg; ! enum rtx_code this_code = GET_CODE (this_op); ! switch (this_code) ! { ! case PLUS: ! case MINUS: ! if (n_ops == 7) ! return NULL_RTX; ! ops[n_ops].op = XEXP (this_op, 1); ! ops[n_ops].neg = (this_code == MINUS) ^ this_neg; ! n_ops++; ! ops[i].op = XEXP (this_op, 0); ! input_ops++; ! changed = 1; ! break; ! case NEG: ! ops[i].op = XEXP (this_op, 0); ! ops[i].neg = ! this_neg; ! changed = 1; ! break; ! case CONST: ! if (n_ops < 7 ! && GET_CODE (XEXP (this_op, 0)) == PLUS ! && CONSTANT_P (XEXP (XEXP (this_op, 0), 0)) ! && CONSTANT_P (XEXP (XEXP (this_op, 0), 1))) ! { ! ops[i].op = XEXP (XEXP (this_op, 0), 0); ! ops[n_ops].op = XEXP (XEXP (this_op, 0), 1); ! ops[n_ops].neg = this_neg; ! n_ops++; ! input_consts++; ! changed = 1; ! } ! break; ! case NOT: ! /* ~a -> (-a - 1) */ ! if (n_ops != 7) ! { ! ops[n_ops].op = constm1_rtx; ! ops[n_ops++].neg = this_neg; ! ops[i].op = XEXP (this_op, 0); ! ops[i].neg = !this_neg; ! changed = 1; ! } ! break; ! ! case CONST_INT: ! if (this_neg) ! { ! ops[i].op = neg_const_int (mode, this_op); ! ops[i].neg = 0; ! changed = 1; ! } ! break; ! ! default: ! break; ! } ! } } + while (changed); /* If we only have two operands, we can't do anything. */ ! if (n_ops <= 2 && !force) ! return NULL_RTX; ! ! /* Count the number of CONSTs we didn't split above. */ ! for (i = 0; i < n_ops; i++) ! if (GET_CODE (ops[i].op) == CONST) ! input_consts++; /* Now simplify each pair of operands until nothing changes. The first time through just simplify constants against each other. */ ! first = 1; ! do { changed = first; for (i = 0; i < n_ops - 1; i++) for (j = i + 1; j < n_ops; j++) ! { ! rtx lhs = ops[i].op, rhs = ops[j].op; ! int lneg = ops[i].neg, rneg = ops[j].neg; ! if (lhs != 0 && rhs != 0 ! && (! first || (CONSTANT_P (lhs) && CONSTANT_P (rhs)))) ! { ! enum rtx_code ncode = PLUS; ! if (lneg != rneg) ! { ! ncode = MINUS; ! if (lneg) ! tem = lhs, lhs = rhs, rhs = tem; ! } ! else if (swap_commutative_operands_p (lhs, rhs)) ! tem = lhs, lhs = rhs, rhs = tem; ! tem = simplify_binary_operation (ncode, mode, lhs, rhs); ! ! /* Reject "simplifications" that just wrap the two ! arguments in a CONST. Failure to do so can result ! in infinite recursion with simplify_binary_operation ! when it calls us to simplify CONST operations. */ ! if (tem ! && ! (GET_CODE (tem) == CONST ! && GET_CODE (XEXP (tem, 0)) == ncode ! && XEXP (XEXP (tem, 0), 0) == lhs ! && XEXP (XEXP (tem, 0), 1) == rhs) ! /* Don't allow -x + -1 -> ~x simplifications in the ! first pass. This allows us the chance to combine ! the -1 with other constants. */ ! && ! (first ! && GET_CODE (tem) == NOT ! && XEXP (tem, 0) == rhs)) ! { ! lneg &= rneg; ! if (GET_CODE (tem) == NEG) ! tem = XEXP (tem, 0), lneg = !lneg; ! if (GET_CODE (tem) == CONST_INT && lneg) ! tem = neg_const_int (mode, tem), lneg = 0; ! ! ops[i].op = tem; ! ops[i].neg = lneg; ! ops[j].op = NULL_RTX; ! changed = 1; ! } ! } ! } first = 0; } + while (changed); ! /* Pack all the operands to the lower-numbered entries. */ for (i = 0, j = 0; j < n_ops; j++) ! if (ops[j].op) ! ops[i++] = ops[j]; ! n_ops = i; ! /* Sort the operations based on swap_commutative_operands_p. */ ! qsort (ops, n_ops, sizeof (*ops), simplify_plus_minus_op_data_cmp); ! /* We suppressed creation of trivial CONST expressions in the ! combination loop to avoid recursion. Create one manually now. ! The combination loop should have ensured that there is exactly ! one CONST_INT, and the sort will have ensured that it is last ! in the array and that any other constant will be next-to-last. */ ! if (n_ops > 1 ! && GET_CODE (ops[n_ops - 1].op) == CONST_INT ! && CONSTANT_P (ops[n_ops - 2].op)) ! { ! rtx value = ops[n_ops - 1].op; ! if (ops[n_ops - 1].neg ^ ops[n_ops - 2].neg) ! value = neg_const_int (mode, value); ! ops[n_ops - 2].op = plus_constant (ops[n_ops - 2].op, INTVAL (value)); ! n_ops--; ! } ! ! /* Count the number of CONSTs that we generated. */ ! n_consts = 0; ! for (i = 0; i < n_ops; i++) ! if (GET_CODE (ops[i].op) == CONST) ! n_consts++; ! ! /* Give up if we didn't reduce the number of operands we had. Make ! sure we count a CONST as two operands. If we have the same ! number of operands, but have made more CONSTs than before, this ! is also an improvement, so accept it. */ ! if (!force ! && (n_ops + n_consts > input_ops ! || (n_ops + n_consts == input_ops && n_consts <= input_consts))) ! return NULL_RTX; /* Put a non-negated operand first. If there aren't any, make all operands positive and negate the whole thing later. */ + negate = 0; + for (i = 0; i < n_ops && ops[i].neg; i++) + continue; if (i == n_ops) { for (i = 0; i < n_ops; i++) ! ops[i].neg = 0; negate = 1; } else if (i != 0) { ! tem = ops[0].op; ! ops[0] = ops[i]; ! ops[i].op = tem; ! ops[i].neg = 1; } /* Now make the result by performing the requested operations. */ ! result = ops[0].op; for (i = 1; i < n_ops; i++) ! result = gen_rtx_fmt_ee (ops[i].neg ? MINUS : PLUS, ! mode, result, ops[i].op); return negate ? gen_rtx_NEG (mode, result) : result; } *************** simplify_relational_operation (code, mod *** 1735,1740 **** --- 2038,2045 ---- { int equal, op0lt, op0ltu, op1lt, op1ltu; rtx tem; + rtx trueop0; + rtx trueop1; if (mode == VOIDmode && (GET_MODE (op0) != VOIDmode *************** simplify_relational_operation (code, mod *** 1745,1750 **** --- 2050,2058 ---- if (GET_CODE (op0) == COMPARE && op1 == const0_rtx) op1 = XEXP (op0, 1), op0 = XEXP (op0, 0); + trueop0 = avoid_constant_pool_reference (op0); + trueop1 = avoid_constant_pool_reference (op1); + /* We can't simplify MODE_CC values since we don't know what the actual comparison is. */ if (GET_MODE_CLASS (GET_MODE (op0)) == MODE_CC *************** simplify_relational_operation (code, mod *** 1755,1764 **** return 0; /* Make sure the constant is second. */ ! if ((CONSTANT_P (op0) && ! CONSTANT_P (op1)) ! || (GET_CODE (op0) == CONST_INT && GET_CODE (op1) != CONST_INT)) { tem = op0, op0 = op1, op1 = tem; code = swap_condition (code); } --- 2063,2072 ---- return 0; /* Make sure the constant is second. */ ! if (swap_commutative_operands_p (trueop0, trueop1)) { tem = op0, op0 = op1, op1 = tem; + tem = trueop0, trueop0 = trueop1, trueop1 = tem; code = swap_condition (code); } *************** simplify_relational_operation (code, mod *** 1772,1812 **** ANSI C defines unsigned operations such that they never overflow, and thus such cases can not be ignored. */ ! if (INTEGRAL_MODE_P (mode) && op1 != const0_rtx ! && ! ((GET_CODE (op0) == REG || GET_CODE (op0) == CONST_INT) ! && (GET_CODE (op1) == REG || GET_CODE (op1) == CONST_INT)) && 0 != (tem = simplify_binary_operation (MINUS, mode, op0, op1)) && code != GTU && code != GEU && code != LTU && code != LEU) return simplify_relational_operation (signed_condition (code), mode, tem, const0_rtx); ! if (flag_fast_math && code == ORDERED) return const_true_rtx; ! if (flag_fast_math && code == UNORDERED) return const0_rtx; /* For non-IEEE floating-point, if the two operands are equal, we know the result. */ ! if (rtx_equal_p (op0, op1) && (TARGET_FLOAT_FORMAT != IEEE_FLOAT_FORMAT ! || ! FLOAT_MODE_P (GET_MODE (op0)) || flag_fast_math)) equal = 1, op0lt = 0, op0ltu = 0, op1lt = 0, op1ltu = 0; /* If the operands are floating-point constants, see if we can fold the result. */ #if ! defined (REAL_IS_NOT_DOUBLE) || defined (REAL_ARITHMETIC) ! else if (GET_CODE (op0) == CONST_DOUBLE && GET_CODE (op1) == CONST_DOUBLE ! && GET_MODE_CLASS (GET_MODE (op0)) == MODE_FLOAT) { struct cfc_args args; /* Setup input for check_fold_consts() */ ! args.op0 = op0; ! args.op1 = op1; ! if (!do_float_handler(check_fold_consts, (PTR) &args)) args.unordered = 1; if (args.unordered) --- 2080,2122 ---- ANSI C defines unsigned operations such that they never overflow, and thus such cases can not be ignored. */ ! if (INTEGRAL_MODE_P (mode) && trueop1 != const0_rtx ! && ! ((GET_CODE (op0) == REG || GET_CODE (trueop0) == CONST_INT) ! && (GET_CODE (op1) == REG || GET_CODE (trueop1) == CONST_INT)) && 0 != (tem = simplify_binary_operation (MINUS, mode, op0, op1)) && code != GTU && code != GEU && code != LTU && code != LEU) return simplify_relational_operation (signed_condition (code), mode, tem, const0_rtx); ! if (flag_unsafe_math_optimizations && code == ORDERED) return const_true_rtx; ! if (flag_unsafe_math_optimizations && code == UNORDERED) return const0_rtx; /* For non-IEEE floating-point, if the two operands are equal, we know the result. */ ! if (rtx_equal_p (trueop0, trueop1) && (TARGET_FLOAT_FORMAT != IEEE_FLOAT_FORMAT ! || ! FLOAT_MODE_P (GET_MODE (trueop0)) ! || flag_unsafe_math_optimizations)) equal = 1, op0lt = 0, op0ltu = 0, op1lt = 0, op1ltu = 0; /* If the operands are floating-point constants, see if we can fold the result. */ #if ! defined (REAL_IS_NOT_DOUBLE) || defined (REAL_ARITHMETIC) ! else if (GET_CODE (trueop0) == CONST_DOUBLE ! && GET_CODE (trueop1) == CONST_DOUBLE ! && GET_MODE_CLASS (GET_MODE (trueop0)) == MODE_FLOAT) { struct cfc_args args; /* Setup input for check_fold_consts() */ ! args.op0 = trueop0; ! args.op1 = trueop1; ! if (!do_float_handler (check_fold_consts, (PTR) &args)) args.unordered = 1; if (args.unordered) *************** simplify_relational_operation (code, mod *** 1841,1873 **** /* Otherwise, see if the operands are both integers. */ else if ((GET_MODE_CLASS (mode) == MODE_INT || mode == VOIDmode) ! && (GET_CODE (op0) == CONST_DOUBLE || GET_CODE (op0) == CONST_INT) ! && (GET_CODE (op1) == CONST_DOUBLE || GET_CODE (op1) == CONST_INT)) { int width = GET_MODE_BITSIZE (mode); HOST_WIDE_INT l0s, h0s, l1s, h1s; unsigned HOST_WIDE_INT l0u, h0u, l1u, h1u; /* Get the two words comprising each integer constant. */ ! if (GET_CODE (op0) == CONST_DOUBLE) { ! l0u = l0s = CONST_DOUBLE_LOW (op0); ! h0u = h0s = CONST_DOUBLE_HIGH (op0); } else { ! l0u = l0s = INTVAL (op0); h0u = h0s = HWI_SIGN_EXTEND (l0s); } ! if (GET_CODE (op1) == CONST_DOUBLE) { ! l1u = l1s = CONST_DOUBLE_LOW (op1); ! h1u = h1s = CONST_DOUBLE_HIGH (op1); } else { ! l1u = l1s = INTVAL (op1); h1u = h1s = HWI_SIGN_EXTEND (l1s); } --- 2151,2185 ---- /* Otherwise, see if the operands are both integers. */ else if ((GET_MODE_CLASS (mode) == MODE_INT || mode == VOIDmode) ! && (GET_CODE (trueop0) == CONST_DOUBLE ! || GET_CODE (trueop0) == CONST_INT) ! && (GET_CODE (trueop1) == CONST_DOUBLE ! || GET_CODE (trueop1) == CONST_INT)) { int width = GET_MODE_BITSIZE (mode); HOST_WIDE_INT l0s, h0s, l1s, h1s; unsigned HOST_WIDE_INT l0u, h0u, l1u, h1u; /* Get the two words comprising each integer constant. */ ! if (GET_CODE (trueop0) == CONST_DOUBLE) { ! l0u = l0s = CONST_DOUBLE_LOW (trueop0); ! h0u = h0s = CONST_DOUBLE_HIGH (trueop0); } else { ! l0u = l0s = INTVAL (trueop0); h0u = h0s = HWI_SIGN_EXTEND (l0s); } ! if (GET_CODE (trueop1) == CONST_DOUBLE) { ! l1u = l1s = CONST_DOUBLE_LOW (trueop1); ! h1u = h1s = CONST_DOUBLE_HIGH (trueop1); } else { ! l1u = l1s = INTVAL (trueop1); h1u = h1s = HWI_SIGN_EXTEND (l1s); } *************** simplify_relational_operation (code, mod *** 1902,1909 **** case EQ: /* References to the frame plus a constant or labels cannot be zero, but a SYMBOL_REF can due to #pragma weak. */ ! if (((NONZERO_BASE_PLUS_P (op0) && op1 == const0_rtx) ! || GET_CODE (op0) == LABEL_REF) #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM /* On some machines, the ap reg can be 0 sometimes. */ && op0 != arg_pointer_rtx --- 2214,2221 ---- case EQ: /* References to the frame plus a constant or labels cannot be zero, but a SYMBOL_REF can due to #pragma weak. */ ! if (((NONZERO_BASE_PLUS_P (op0) && trueop1 == const0_rtx) ! || GET_CODE (trueop0) == LABEL_REF) #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM /* On some machines, the ap reg can be 0 sometimes. */ && op0 != arg_pointer_rtx *************** simplify_relational_operation (code, mod *** 1913,1920 **** break; case NE: ! if (((NONZERO_BASE_PLUS_P (op0) && op1 == const0_rtx) ! || GET_CODE (op0) == LABEL_REF) #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM && op0 != arg_pointer_rtx #endif --- 2225,2232 ---- break; case NE: ! if (((NONZERO_BASE_PLUS_P (op0) && trueop1 == const0_rtx) ! || GET_CODE (trueop0) == LABEL_REF) #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM && op0 != arg_pointer_rtx #endif *************** simplify_relational_operation (code, mod *** 1924,1950 **** case GEU: /* Unsigned values are never negative. */ ! if (op1 == const0_rtx) return const_true_rtx; break; case LTU: ! if (op1 == const0_rtx) return const0_rtx; break; case LEU: /* Unsigned values are never greater than the largest unsigned value. */ ! if (GET_CODE (op1) == CONST_INT ! && (unsigned HOST_WIDE_INT) INTVAL (op1) == GET_MODE_MASK (mode) && INTEGRAL_MODE_P (mode)) return const_true_rtx; break; case GTU: ! if (GET_CODE (op1) == CONST_INT ! && (unsigned HOST_WIDE_INT) INTVAL (op1) == GET_MODE_MASK (mode) && INTEGRAL_MODE_P (mode)) return const0_rtx; break; --- 2236,2262 ---- case GEU: /* Unsigned values are never negative. */ ! if (trueop1 == const0_rtx) return const_true_rtx; break; case LTU: ! if (trueop1 == const0_rtx) return const0_rtx; break; case LEU: /* Unsigned values are never greater than the largest unsigned value. */ ! if (GET_CODE (trueop1) == CONST_INT ! && (unsigned HOST_WIDE_INT) INTVAL (trueop1) == GET_MODE_MASK (mode) && INTEGRAL_MODE_P (mode)) return const_true_rtx; break; case GTU: ! if (GET_CODE (trueop1) == CONST_INT ! && (unsigned HOST_WIDE_INT) INTVAL (trueop1) == GET_MODE_MASK (mode) && INTEGRAL_MODE_P (mode)) return const0_rtx; break; *************** simplify_ternary_operation (code, mode, *** 2059,2070 **** /* Convert a == b ? b : a to "a". */ if (GET_CODE (op0) == NE && ! side_effects_p (op0) ! && (! FLOAT_MODE_P (mode) || flag_fast_math) && rtx_equal_p (XEXP (op0, 0), op1) && rtx_equal_p (XEXP (op0, 1), op2)) return op1; else if (GET_CODE (op0) == EQ && ! side_effects_p (op0) ! && (! FLOAT_MODE_P (mode) || flag_fast_math) && rtx_equal_p (XEXP (op0, 1), op1) && rtx_equal_p (XEXP (op0, 0), op2)) return op2; --- 2371,2382 ---- /* Convert a == b ? b : a to "a". */ if (GET_CODE (op0) == NE && ! side_effects_p (op0) ! && (! FLOAT_MODE_P (mode) || flag_unsafe_math_optimizations) && rtx_equal_p (XEXP (op0, 0), op1) && rtx_equal_p (XEXP (op0, 1), op2)) return op1; else if (GET_CODE (op0) == EQ && ! side_effects_p (op0) ! && (! FLOAT_MODE_P (mode) || flag_unsafe_math_optimizations) && rtx_equal_p (XEXP (op0, 1), op1) && rtx_equal_p (XEXP (op0, 0), op2)) return op2; *************** simplify_ternary_operation (code, mode, *** 2118,3436 **** return 0; } ! /* Simplify X, an rtx expression. ! ! Return the simplified expression or NULL if no simplifications ! were possible. ! ! This is the preferred entry point into the simplification routines; ! however, we still allow passes to call the more specific routines. ! ! Right now GCC has three (yes, three) major bodies of RTL simplficiation ! code that need to be unified. ! ! 1. fold_rtx in cse.c. This code uses various CSE specific ! information to aid in RTL simplification. ! ! 2. simplify_rtx in combine.c. Similar to fold_rtx, except that ! it uses combine specific information to aid in RTL ! simplification. ! ! 3. The routines in this file. ! ! ! Long term we want to only have one body of simplification code; to ! get to that state I recommend the following steps: ! ! 1. Pour over fold_rtx & simplify_rtx and move any simplifications ! which are not pass dependent state into these routines. ! ! 2. As code is moved by #1, change fold_rtx & simplify_rtx to ! use this routine whenever possible. ! ! 3. Allow for pass dependent state to be provided to these ! routines and add simplifications based on the pass dependent ! state. Remove code from cse.c & combine.c that becomes ! redundant/dead. ! ! It will take time, but ultimately the compiler will be easier to ! maintain and improve. It's totally silly that when we add a ! simplification that it needs to be added to 4 places (3 for RTL ! simplification and 1 for tree simplification. */ ! rtx ! simplify_rtx (x) ! rtx x; ! { ! enum rtx_code code; ! enum machine_mode mode; ! ! mode = GET_MODE (x); ! code = GET_CODE (x); ! ! switch (GET_RTX_CLASS (code)) ! { ! case '1': ! return simplify_unary_operation (code, mode, ! XEXP (x, 0), GET_MODE (XEXP (x, 0))); ! case '2': ! case 'c': ! return simplify_binary_operation (code, mode, XEXP (x, 0), XEXP (x, 1)); ! ! case '3': ! case 'b': ! return simplify_ternary_operation (code, mode, GET_MODE (XEXP (x, 0)), ! XEXP (x, 0), XEXP (x, 1), XEXP (x, 2)); ! ! case '<': ! return simplify_relational_operation (code, ! (GET_MODE (XEXP (x, 0)) != VOIDmode ! ? GET_MODE (XEXP (x, 0)) ! : GET_MODE (XEXP (x, 1))), ! XEXP (x, 0), XEXP (x, 1)); ! default: ! return NULL; ! } ! } ! ! ! /* Allocate a struct elt_list and fill in its two elements with the ! arguments. */ ! ! static struct elt_list * ! new_elt_list (next, elt) ! struct elt_list *next; ! cselib_val *elt; ! { ! struct elt_list *el = empty_elt_lists; ! ! if (el) ! empty_elt_lists = el->next; ! else ! el = (struct elt_list *) obstack_alloc (&cselib_obstack, ! sizeof (struct elt_list)); ! el->next = next; ! el->elt = elt; ! return el; ! } ! ! /* Allocate a struct elt_loc_list and fill in its two elements with the ! arguments. */ ! ! static struct elt_loc_list * ! new_elt_loc_list (next, loc) ! struct elt_loc_list *next; ! rtx loc; ! { ! struct elt_loc_list *el = empty_elt_loc_lists; ! ! if (el) ! empty_elt_loc_lists = el->next; ! else ! el = (struct elt_loc_list *) obstack_alloc (&cselib_obstack, ! sizeof (struct elt_loc_list)); ! el->next = next; ! el->loc = loc; ! el->setting_insn = cselib_current_insn; ! return el; ! } ! ! /* The elt_list at *PL is no longer needed. Unchain it and free its ! storage. */ ! ! static void ! unchain_one_elt_list (pl) ! struct elt_list **pl; ! { ! struct elt_list *l = *pl; ! ! *pl = l->next; ! l->next = empty_elt_lists; ! empty_elt_lists = l; ! } ! ! /* Likewise for elt_loc_lists. */ ! ! static void ! unchain_one_elt_loc_list (pl) ! struct elt_loc_list **pl; ! { ! struct elt_loc_list *l = *pl; ! ! *pl = l->next; ! l->next = empty_elt_loc_lists; ! empty_elt_loc_lists = l; ! } ! ! /* Likewise for cselib_vals. This also frees the addr_list associated with ! V. */ ! ! static void ! unchain_one_value (v) ! cselib_val *v; ! { ! while (v->addr_list) ! unchain_one_elt_list (&v->addr_list); ! ! v->u.next_free = empty_vals; ! empty_vals = v; ! } ! ! /* Remove all entries from the hash table. Also used during ! initialization. If CLEAR_ALL isn't set, then only clear the entries ! which are known to have been used. */ ! ! static void ! clear_table (clear_all) ! int clear_all; ! { ! unsigned int i; ! ! if (clear_all) ! for (i = 0; i < cselib_nregs; i++) ! REG_VALUES (i) = 0; ! else ! for (i = 0; i < VARRAY_ACTIVE_SIZE (used_regs); i++) ! REG_VALUES (VARRAY_UINT (used_regs, i)) = 0; ! ! VARRAY_POP_ALL (used_regs); ! ! htab_empty (hash_table); ! obstack_free (&cselib_obstack, cselib_startobj); ! ! empty_vals = 0; ! empty_elt_lists = 0; ! empty_elt_loc_lists = 0; ! n_useless_values = 0; ! ! next_unknown_value = 0; ! } ! ! /* The equality test for our hash table. The first argument ENTRY is a table ! element (i.e. a cselib_val), while the second arg X is an rtx. We know ! that all callers of htab_find_slot_with_hash will wrap CONST_INTs into a ! CONST of an appropriate mode. */ ! ! static int ! entry_and_rtx_equal_p (entry, x_arg) ! const void *entry, *x_arg; { ! struct elt_loc_list *l; ! const cselib_val *v = (const cselib_val *) entry; ! rtx x = (rtx) x_arg; ! enum machine_mode mode = GET_MODE (x); ! ! if (GET_CODE (x) == CONST_INT ! || (mode == VOIDmode && GET_CODE (x) == CONST_DOUBLE)) abort (); - if (mode != GET_MODE (v->u.val_rtx)) - return 0; - - /* Unwrap X if necessary. */ - if (GET_CODE (x) == CONST - && (GET_CODE (XEXP (x, 0)) == CONST_INT - || GET_CODE (XEXP (x, 0)) == CONST_DOUBLE)) - x = XEXP (x, 0); - - /* We don't guarantee that distinct rtx's have different hash values, - so we need to do a comparison. */ - for (l = v->locs; l; l = l->next) - if (rtx_equal_for_cselib_p (l->loc, x)) - return 1; - - return 0; - } - - /* The hash function for our hash table. The value is always computed with - hash_rtx when adding an element; this function just extracts the hash - value from a cselib_val structure. */ - - static unsigned int - get_value_hash (entry) - const void *entry; - { - const cselib_val *v = (const cselib_val *) entry; - return v->value; - } - - /* Return true if X contains a VALUE rtx. If ONLY_USELESS is set, we - only return true for values which point to a cselib_val whose value - element has been set to zero, which implies the cselib_val will be - removed. */ - - int - references_value_p (x, only_useless) - rtx x; - int only_useless; - { - enum rtx_code code = GET_CODE (x); - const char *fmt = GET_RTX_FORMAT (code); - int i, j; - - if (GET_CODE (x) == VALUE - && (! only_useless || CSELIB_VAL_PTR (x)->locs == 0)) - return 1; - - for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) - { - if (fmt[i] == 'e' && references_value_p (XEXP (x, i), only_useless)) - return 1; - else if (fmt[i] == 'E') - for (j = 0; j < XVECLEN (x, i); j++) - if (references_value_p (XVECEXP (x, i, j), only_useless)) - return 1; - } - - return 0; - } - - /* For all locations found in X, delete locations that reference useless - values (i.e. values without any location). Called through - htab_traverse. */ - - static int - discard_useless_locs (x, info) - void **x; - void *info ATTRIBUTE_UNUSED; - { - cselib_val *v = (cselib_val *)*x; - struct elt_loc_list **p = &v->locs; - int had_locs = v->locs != 0; ! while (*p) ! { ! if (references_value_p ((*p)->loc, 1)) ! unchain_one_elt_loc_list (p); ! else ! p = &(*p)->next; ! } ! ! if (had_locs && v->locs == 0) ! { ! n_useless_values++; ! values_became_useless = 1; ! } ! return 1; ! } ! ! /* If X is a value with no locations, remove it from the hashtable. */ ! ! static int ! discard_useless_values (x, info) ! void **x; ! void *info ATTRIBUTE_UNUSED; ! { ! cselib_val *v = (cselib_val *)*x; ! ! if (v->locs == 0) ! { ! htab_clear_slot (hash_table, x); ! unchain_one_value (v); ! n_useless_values--; ! } ! ! return 1; ! } ! ! /* Clean out useless values (i.e. those which no longer have locations ! associated with them) from the hash table. */ ! ! static void ! remove_useless_values () ! { ! /* First pass: eliminate locations that reference the value. That in ! turn can make more values useless. */ ! do ! { ! values_became_useless = 0; ! htab_traverse (hash_table, discard_useless_locs, 0); ! } ! while (values_became_useless); ! ! /* Second pass: actually remove the values. */ ! htab_traverse (hash_table, discard_useless_values, 0); ! ! if (n_useless_values != 0) abort (); - } - - /* Return nonzero if we can prove that X and Y contain the same value, taking - our gathered information into account. */ - - int - rtx_equal_for_cselib_p (x, y) - rtx x, y; - { - enum rtx_code code; - const char *fmt; - int i; - - if (GET_CODE (x) == REG || GET_CODE (x) == MEM) - { - cselib_val *e = cselib_lookup (x, GET_MODE (x), 0); - - if (e) - x = e->u.val_rtx; - } - - if (GET_CODE (y) == REG || GET_CODE (y) == MEM) - { - cselib_val *e = cselib_lookup (y, GET_MODE (y), 0); - - if (e) - y = e->u.val_rtx; - } ! if (x == y) ! return 1; ! if (GET_CODE (x) == VALUE && GET_CODE (y) == VALUE) ! return CSELIB_VAL_PTR (x) == CSELIB_VAL_PTR (y); ! if (GET_CODE (x) == VALUE) { ! cselib_val *e = CSELIB_VAL_PTR (x); ! struct elt_loc_list *l; ! for (l = e->locs; l; l = l->next) { ! rtx t = l->loc; ! ! /* Avoid infinite recursion. */ ! if (GET_CODE (t) == REG || GET_CODE (t) == MEM) ! continue; ! else if (rtx_equal_for_cselib_p (t, y)) ! return 1; } - - return 0; - } ! if (GET_CODE (y) == VALUE) ! { ! cselib_val *e = CSELIB_VAL_PTR (y); ! struct elt_loc_list *l; ! ! for (l = e->locs; l; l = l->next) { ! rtx t = l->loc; ! ! if (GET_CODE (t) == REG || GET_CODE (t) == MEM) ! continue; ! else if (rtx_equal_for_cselib_p (x, t)) ! return 1; } - - return 0; - } - - if (GET_CODE (x) != GET_CODE (y) || GET_MODE (x) != GET_MODE (y)) - return 0; - - /* This won't be handled correctly by the code below. */ - if (GET_CODE (x) == LABEL_REF) - return XEXP (x, 0) == XEXP (y, 0); - - code = GET_CODE (x); - fmt = GET_RTX_FORMAT (code); ! for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) ! { ! int j; ! ! switch (fmt[i]) { ! case 'w': ! if (XWINT (x, i) != XWINT (y, i)) ! return 0; ! break; ! ! case 'n': ! case 'i': ! if (XINT (x, i) != XINT (y, i)) ! return 0; ! break; ! case 'V': ! case 'E': ! /* Two vectors must have the same length. */ ! if (XVECLEN (x, i) != XVECLEN (y, i)) ! return 0; ! /* And the corresponding elements must match. */ ! for (j = 0; j < XVECLEN (x, i); j++) ! if (! rtx_equal_for_cselib_p (XVECEXP (x, i, j), ! XVECEXP (y, i, j))) ! return 0; ! break; ! case 'e': ! if (! rtx_equal_for_cselib_p (XEXP (x, i), XEXP (y, i))) ! return 0; ! break; ! case 'S': ! case 's': ! if (strcmp (XSTR (x, i), XSTR (y, i))) ! return 0; ! break; ! case 'u': ! /* These are just backpointers, so they don't matter. */ ! break; ! case '0': ! case 't': ! break; ! /* It is believed that rtx's at this level will never ! contain anything but integers and other rtx's, ! except for within LABEL_REFs and SYMBOL_REFs. */ default: ! abort (); } } - return 1; - } - - /* We need to pass down the mode of constants through the hash table - functions. For that purpose, wrap them in a CONST of the appropriate - mode. */ - static rtx - wrap_constant (mode, x) - enum machine_mode mode; - rtx x; - { - if (GET_CODE (x) != CONST_INT - && (GET_CODE (x) != CONST_DOUBLE || GET_MODE (x) != VOIDmode)) - return x; - if (mode == VOIDmode) - abort (); - return gen_rtx_CONST (mode, x); - } - - /* Hash an rtx. Return 0 if we couldn't hash the rtx. - For registers and memory locations, we look up their cselib_val structure - and return its VALUE element. - Possible reasons for return 0 are: the object is volatile, or we couldn't - find a register or memory location in the table and CREATE is zero. If - CREATE is nonzero, table elts are created for regs and mem. - MODE is used in hashing for CONST_INTs only; - otherwise the mode of X is used. */ - - static unsigned int - hash_rtx (x, mode, create) - rtx x; - enum machine_mode mode; - int create; - { - cselib_val *e; - int i, j; - enum rtx_code code; - const char *fmt; - unsigned int hash = 0; ! /* repeat is used to turn tail-recursion into iteration. */ ! repeat: ! code = GET_CODE (x); ! hash += (unsigned) code + (unsigned) GET_MODE (x); ! ! switch (code) { ! case MEM: ! case REG: ! e = cselib_lookup (x, GET_MODE (x), create); ! if (! e) ! return 0; ! ! return e->value; ! ! case CONST_INT: ! hash += ((unsigned) CONST_INT << 7) + (unsigned) mode + INTVAL (x); ! return hash ? hash : (unsigned int) CONST_INT; ! ! case CONST_DOUBLE: ! /* This is like the general case, except that it only counts ! the integers representing the constant. */ ! hash += (unsigned) code + (unsigned) GET_MODE (x); ! if (GET_MODE (x) != VOIDmode) ! for (i = 2; i < GET_RTX_LENGTH (CONST_DOUBLE); i++) ! hash += XWINT (x, i); ! else ! hash += ((unsigned) CONST_DOUBLE_LOW (x) ! + (unsigned) CONST_DOUBLE_HIGH (x)); ! return hash ? hash : (unsigned int) CONST_DOUBLE; ! ! /* Assume there is only one rtx object for any given label. */ ! case LABEL_REF: ! hash ! += ((unsigned) LABEL_REF << 7) + (unsigned long) XEXP (x, 0); ! return hash ? hash : (unsigned int) LABEL_REF; ! ! case SYMBOL_REF: ! hash ! += ((unsigned) SYMBOL_REF << 7) + (unsigned long) XSTR (x, 0); ! return hash ? hash : (unsigned int) SYMBOL_REF; ! ! case PRE_DEC: ! case PRE_INC: ! case POST_DEC: ! case POST_INC: ! case POST_MODIFY: ! case PRE_MODIFY: ! case PC: ! case CC0: ! case CALL: ! case UNSPEC_VOLATILE: ! return 0; ! ! case ASM_OPERANDS: ! if (MEM_VOLATILE_P (x)) ! return 0; ! break; ! ! default: ! break; ! } ! i = GET_RTX_LENGTH (code) - 1; ! fmt = GET_RTX_FORMAT (code); ! for (; i >= 0; i--) ! { ! if (fmt[i] == 'e') { ! rtx tem = XEXP (x, i); ! unsigned int tem_hash; ! ! /* If we are about to do the last recursive call ! needed at this level, change it into iteration. ! This function is called enough to be worth it. */ ! if (i == 0) ! { ! x = tem; ! goto repeat; ! } ! ! tem_hash = hash_rtx (tem, 0, create); ! if (tem_hash == 0) ! return 0; ! ! hash += tem_hash; } ! else if (fmt[i] == 'E') ! for (j = 0; j < XVECLEN (x, i); j++) ! { ! unsigned int tem_hash = hash_rtx (XVECEXP (x, i, j), 0, create); ! ! if (tem_hash == 0) ! return 0; ! ! hash += tem_hash; ! } ! else if (fmt[i] == 's') { ! const unsigned char *p = (const unsigned char *) XSTR (x, i); ! ! if (p) ! while (*p) ! hash += *p++; } - else if (fmt[i] == 'i') - hash += XINT (x, i); - else if (fmt[i] == '0' || fmt[i] == 't') - /* unused */; - else - abort (); - } - - return hash ? hash : 1 + (unsigned int) GET_CODE (x); - } - - /* Create a new value structure for VALUE and initialize it. The mode of the - value is MODE. */ - - static cselib_val * - new_cselib_val (value, mode) - unsigned int value; - enum machine_mode mode; - { - cselib_val *e = empty_vals; - - if (e) - empty_vals = e->u.next_free; - else - e = (cselib_val *) obstack_alloc (&cselib_obstack, sizeof (cselib_val)); - - if (value == 0) - abort (); - - e->value = value; - e->u.val_rtx = gen_rtx_VALUE (mode); - CSELIB_VAL_PTR (e->u.val_rtx) = e; - e->addr_list = 0; - e->locs = 0; - return e; - } - - /* ADDR_ELT is a value that is used as address. MEM_ELT is the value that - contains the data at this address. X is a MEM that represents the - value. Update the two value structures to represent this situation. */ - - static void - add_mem_for_addr (addr_elt, mem_elt, x) - cselib_val *addr_elt, *mem_elt; - rtx x; - { - rtx new; - struct elt_loc_list *l; - - /* Avoid duplicates. */ - for (l = mem_elt->locs; l; l = l->next) - if (GET_CODE (l->loc) == MEM - && CSELIB_VAL_PTR (XEXP (l->loc, 0)) == addr_elt) - return; - - new = gen_rtx_MEM (GET_MODE (x), addr_elt->u.val_rtx); - MEM_COPY_ATTRIBUTES (new, x); - - addr_elt->addr_list = new_elt_list (addr_elt->addr_list, mem_elt); - mem_elt->locs = new_elt_loc_list (mem_elt->locs, new); - } - - /* Subroutine of cselib_lookup. Return a value for X, which is a MEM rtx. - If CREATE, make a new one if we haven't seen it before. */ - - static cselib_val * - cselib_lookup_mem (x, create) - rtx x; - int create; - { - enum machine_mode mode = GET_MODE (x); - void **slot; - cselib_val *addr; - cselib_val *mem_elt; - struct elt_list *l; ! if (MEM_VOLATILE_P (x) || mode == BLKmode ! || (FLOAT_MODE_P (mode) && flag_float_store)) ! return 0; ! ! /* Look up the value for the address. */ ! addr = cselib_lookup (XEXP (x, 0), mode, create); ! if (! addr) ! return 0; ! ! /* Find a value that describes a value of our mode at that address. */ ! for (l = addr->addr_list; l; l = l->next) ! if (GET_MODE (l->elt->u.val_rtx) == mode) ! return l->elt; ! ! if (! create) ! return 0; ! ! mem_elt = new_cselib_val (++next_unknown_value, mode); ! add_mem_for_addr (addr, mem_elt, x); ! slot = htab_find_slot_with_hash (hash_table, wrap_constant (mode, x), ! mem_elt->value, INSERT); ! *slot = mem_elt; ! return mem_elt; ! } ! ! /* Walk rtx X and replace all occurrences of REG and MEM subexpressions ! with VALUE expressions. This way, it becomes independent of changes ! to registers and memory. ! X isn't actually modified; if modifications are needed, new rtl is ! allocated. However, the return value can share rtl with X. */ ! ! static rtx ! cselib_subst_to_values (x) ! rtx x; ! { ! enum rtx_code code = GET_CODE (x); ! const char *fmt = GET_RTX_FORMAT (code); ! cselib_val *e; ! struct elt_list *l; ! rtx copy = x; ! int i; ! ! switch (code) ! { ! case REG: ! for (l = REG_VALUES (REGNO (x)); l; l = l->next) ! if (GET_MODE (l->elt->u.val_rtx) == GET_MODE (x)) ! return l->elt->u.val_rtx; ! ! abort (); ! ! case MEM: ! e = cselib_lookup_mem (x, 0); ! if (! e) ! abort (); ! return e->u.val_rtx; ! ! /* CONST_DOUBLEs must be special-cased here so that we won't try to ! look up the CONST_DOUBLE_MEM inside. */ ! case CONST_DOUBLE: ! case CONST_INT: ! return x; ! ! default: ! break; ! } ! ! for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) ! { ! if (fmt[i] == 'e') { ! rtx t = cselib_subst_to_values (XEXP (x, i)); ! ! if (t != XEXP (x, i) && x == copy) ! copy = shallow_copy_rtx (x); ! ! XEXP (copy, i) = t; } ! else if (fmt[i] == 'E') { ! int j, k; ! ! for (j = 0; j < XVECLEN (x, i); j++) ! { ! rtx t = cselib_subst_to_values (XVECEXP (x, i, j)); ! ! if (t != XVECEXP (x, i, j) && XVEC (x, i) == XVEC (copy, i)) ! { ! if (x == copy) ! copy = shallow_copy_rtx (x); ! ! XVEC (copy, i) = rtvec_alloc (XVECLEN (x, i)); ! for (k = 0; k < j; k++) ! XVECEXP (copy, i, k) = XVECEXP (x, i, k); ! } ! XVECEXP (copy, i, j) = t; ! } } - } - - return copy; - } - - /* Look up the rtl expression X in our tables and return the value it has. - If CREATE is zero, we return NULL if we don't know the value. Otherwise, - we create a new one if possible, using mode MODE if X doesn't have a mode - (i.e. because it's a constant). */ - - cselib_val * - cselib_lookup (x, mode, create) - rtx x; - enum machine_mode mode; - int create; - { - void **slot; - cselib_val *e; - unsigned int hashval; - - if (GET_MODE (x) != VOIDmode) - mode = GET_MODE (x); - - if (GET_CODE (x) == VALUE) - return CSELIB_VAL_PTR (x); ! if (GET_CODE (x) == REG) ! { ! struct elt_list *l; ! unsigned int i = REGNO (x); ! ! for (l = REG_VALUES (i); l; l = l->next) ! if (mode == GET_MODE (l->elt->u.val_rtx)) ! return l->elt; ! ! if (! create) ! return 0; ! ! e = new_cselib_val (++next_unknown_value, GET_MODE (x)); ! e->locs = new_elt_loc_list (e->locs, x); ! if (REG_VALUES (i) == 0) ! VARRAY_PUSH_UINT (used_regs, i); ! REG_VALUES (i) = new_elt_list (REG_VALUES (i), e); ! slot = htab_find_slot_with_hash (hash_table, x, e->value, INSERT); ! *slot = e; ! return e; } ! if (GET_CODE (x) == MEM) ! return cselib_lookup_mem (x, create); ! ! hashval = hash_rtx (x, mode, create); ! /* Can't even create if hashing is not possible. */ ! if (! hashval) ! return 0; ! ! slot = htab_find_slot_with_hash (hash_table, wrap_constant (mode, x), ! hashval, create ? INSERT : NO_INSERT); ! if (slot == 0) ! return 0; ! ! e = (cselib_val *) *slot; ! if (e) ! return e; ! ! e = new_cselib_val (hashval, mode); ! ! /* We have to fill the slot before calling cselib_subst_to_values: ! the hash table is inconsistent until we do so, and ! cselib_subst_to_values will need to do lookups. */ ! *slot = (void *) e; ! e->locs = new_elt_loc_list (e->locs, cselib_subst_to_values (x)); ! return e; ! } ! ! /* Invalidate any entries in reg_values that overlap REGNO. This is called ! if REGNO is changing. MODE is the mode of the assignment to REGNO, which ! is used to determine how many hard registers are being changed. If MODE ! is VOIDmode, then only REGNO is being changed; this is used when ! invalidating call clobbered registers across a call. */ ! ! static void ! cselib_invalidate_regno (regno, mode) ! unsigned int regno; ! enum machine_mode mode; ! { ! unsigned int endregno; ! unsigned int i; ! ! /* If we see pseudos after reload, something is _wrong_. */ ! if (reload_completed && regno >= FIRST_PSEUDO_REGISTER ! && reg_renumber[regno] >= 0) ! abort (); ! ! /* Determine the range of registers that must be invalidated. For ! pseudos, only REGNO is affected. For hard regs, we must take MODE ! into account, and we must also invalidate lower register numbers ! if they contain values that overlap REGNO. */ ! endregno = regno + 1; ! if (regno < FIRST_PSEUDO_REGISTER && mode != VOIDmode) ! endregno = regno + HARD_REGNO_NREGS (regno, mode); ! for (i = 0; i < endregno; i++) { ! struct elt_list **l = ®_VALUES (i); ! /* Go through all known values for this reg; if it overlaps the range ! we're invalidating, remove the value. */ ! while (*l) { ! cselib_val *v = (*l)->elt; ! struct elt_loc_list **p; ! unsigned int this_last = i; ! ! if (i < FIRST_PSEUDO_REGISTER) ! this_last += HARD_REGNO_NREGS (i, GET_MODE (v->u.val_rtx)) - 1; ! ! if (this_last < regno) ! { ! l = &(*l)->next; ! continue; ! } ! ! /* We have an overlap. */ ! unchain_one_elt_list (l); ! /* Now, we clear the mapping from value to reg. It must exist, so ! this code will crash intentionally if it doesn't. */ ! for (p = &v->locs; ; p = &(*p)->next) ! { ! rtx x = (*p)->loc; ! if (GET_CODE (x) == REG && REGNO (x) == i) ! { ! unchain_one_elt_loc_list (p); ! break; ! } ! } ! if (v->locs == 0) ! n_useless_values++; } } - } ! /* The memory at address MEM_BASE is being changed. ! Return whether this change will invalidate VAL. */ ! static int ! cselib_mem_conflict_p (mem_base, val) ! rtx mem_base; ! rtx val; ! { ! enum rtx_code code; ! const char *fmt; ! int i, j; ! code = GET_CODE (val); ! switch (code) { ! /* Get rid of a few simple cases quickly. */ ! case REG: ! case PC: ! case CC0: ! case SCRATCH: ! case CONST: ! case CONST_INT: ! case CONST_DOUBLE: ! case SYMBOL_REF: ! case LABEL_REF: ! return 0; ! ! case MEM: ! if (GET_MODE (mem_base) == BLKmode ! || GET_MODE (val) == BLKmode ! || anti_dependence (val, mem_base)) ! return 1; ! ! /* The address may contain nested MEMs. */ ! break; ! ! default: ! break; ! } ! fmt = GET_RTX_FORMAT (code); ! for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) ! { ! if (fmt[i] == 'e') ! { ! if (cselib_mem_conflict_p (mem_base, XEXP (val, i))) ! return 1; ! } ! else if (fmt[i] == 'E') ! for (j = 0; j < XVECLEN (val, i); j++) ! if (cselib_mem_conflict_p (mem_base, XVECEXP (val, i, j))) ! return 1; } ! return 0; } ! /* For the value found in SLOT, walk its locations to determine if any overlap ! INFO (which is a MEM rtx). */ ! ! static int ! cselib_invalidate_mem_1 (slot, info) ! void **slot; ! void *info; { ! cselib_val *v = (cselib_val *) *slot; ! rtx mem_rtx = (rtx) info; ! struct elt_loc_list **p = &v->locs; ! int had_locs = v->locs != 0; ! ! while (*p) ! { ! rtx x = (*p)->loc; ! cselib_val *addr; ! struct elt_list **mem_chain; ! ! /* MEMs may occur in locations only at the top level; below ! that every MEM or REG is substituted by its VALUE. */ ! if (GET_CODE (x) != MEM ! || ! cselib_mem_conflict_p (mem_rtx, x)) ! { ! p = &(*p)->next; ! continue; ! } ! ! /* This one overlaps. */ ! /* We must have a mapping from this MEM's address to the ! value (E). Remove that, too. */ ! addr = cselib_lookup (XEXP (x, 0), VOIDmode, 0); ! mem_chain = &addr->addr_list; ! for (;;) ! { ! if ((*mem_chain)->elt == v) ! { ! unchain_one_elt_list (mem_chain); ! break; ! } ! mem_chain = &(*mem_chain)->next; ! } ! unchain_one_elt_loc_list (p); ! } ! if (had_locs && v->locs == 0) ! n_useless_values++; ! return 1; ! } ! /* Invalidate any locations in the table which are changed because of a ! store to MEM_RTX. If this is called because of a non-const call ! instruction, MEM_RTX is (mem:BLK const0_rtx). */ ! static void ! cselib_invalidate_mem (mem_rtx) ! rtx mem_rtx; ! { ! htab_traverse (hash_table, cselib_invalidate_mem_1, mem_rtx); } ! /* Invalidate DEST, which is being assigned to or clobbered. The second and ! the third parameter exist so that this function can be passed to ! note_stores; they are ignored. */ ! static void ! cselib_invalidate_rtx (dest, ignore, data) ! rtx dest; ! rtx ignore ATTRIBUTE_UNUSED; ! void *data ATTRIBUTE_UNUSED; ! { ! while (GET_CODE (dest) == STRICT_LOW_PART || GET_CODE (dest) == SIGN_EXTRACT ! || GET_CODE (dest) == ZERO_EXTRACT || GET_CODE (dest) == SUBREG) ! dest = XEXP (dest, 0); ! if (GET_CODE (dest) == REG) ! cselib_invalidate_regno (REGNO (dest), GET_MODE (dest)); ! else if (GET_CODE (dest) == MEM) ! cselib_invalidate_mem (dest); ! /* Some machines don't define AUTO_INC_DEC, but they still use push ! instructions. We need to catch that case here in order to ! invalidate the stack pointer correctly. Note that invalidating ! the stack pointer is different from invalidating DEST. */ ! if (push_operand (dest, GET_MODE (dest))) ! cselib_invalidate_rtx (stack_pointer_rtx, NULL_RTX, NULL); ! } ! /* Record the result of a SET instruction. DEST is being set; the source ! contains the value described by SRC_ELT. If DEST is a MEM, DEST_ADDR_ELT ! describes its address. */ ! static void ! cselib_record_set (dest, src_elt, dest_addr_elt) ! rtx dest; ! cselib_val *src_elt, *dest_addr_elt; ! { ! int dreg = GET_CODE (dest) == REG ? (int) REGNO (dest) : -1; - if (src_elt == 0 || side_effects_p (dest)) - return; ! if (dreg >= 0) ! { ! if (REG_VALUES (dreg) == 0) ! VARRAY_PUSH_UINT (used_regs, dreg); ! REG_VALUES (dreg) = new_elt_list (REG_VALUES (dreg), src_elt); ! if (src_elt->locs == 0) ! n_useless_values--; ! src_elt->locs = new_elt_loc_list (src_elt->locs, dest); ! } ! else if (GET_CODE (dest) == MEM && dest_addr_elt != 0) ! { ! if (src_elt->locs == 0) ! n_useless_values--; ! add_mem_for_addr (dest_addr_elt, src_elt, dest); ! } ! } ! /* Describe a single set that is part of an insn. */ ! struct set ! { ! rtx src; ! rtx dest; ! cselib_val *src_elt; ! cselib_val *dest_addr_elt; ! }; ! /* There is no good way to determine how many elements there can be ! in a PARALLEL. Since it's fairly cheap, use a really large number. */ ! #define MAX_SETS (FIRST_PSEUDO_REGISTER * 2) ! /* Record the effects of any sets in INSN. */ ! static void ! cselib_record_sets (insn) ! rtx insn; { ! int n_sets = 0; ! int i; ! struct set sets[MAX_SETS]; ! rtx body = PATTERN (insn); ! body = PATTERN (insn); ! /* Find all sets. */ ! if (GET_CODE (body) == SET) ! { ! sets[0].src = SET_SRC (body); ! sets[0].dest = SET_DEST (body); ! n_sets = 1; ! } ! else if (GET_CODE (body) == PARALLEL) { ! /* Look through the PARALLEL and record the values being ! set, if possible. Also handle any CLOBBERs. */ ! for (i = XVECLEN (body, 0) - 1; i >= 0; --i) { ! rtx x = XVECEXP (body, 0, i); ! ! if (GET_CODE (x) == SET) ! { ! sets[n_sets].src = SET_SRC (x); ! sets[n_sets].dest = SET_DEST (x); ! n_sets++; ! } ! } ! } ! ! /* Look up the values that are read. Do this before invalidating the ! locations that are written. */ ! for (i = 0; i < n_sets; i++) ! { ! rtx dest = sets[i].dest; ! ! /* A STRICT_LOW_PART can be ignored; we'll record the equivalence for ! the low part after invalidating any knowledge about larger modes. */ ! if (GET_CODE (sets[i].dest) == STRICT_LOW_PART) ! sets[i].dest = dest = XEXP (dest, 0); ! /* We don't know how to record anything but REG or MEM. */ ! if (GET_CODE (dest) == REG || GET_CODE (dest) == MEM) ! { ! sets[i].src_elt = cselib_lookup (sets[i].src, GET_MODE (dest), 1); ! if (GET_CODE (dest) == MEM) ! sets[i].dest_addr_elt = cselib_lookup (XEXP (dest, 0), Pmode, 1); ! else ! sets[i].dest_addr_elt = 0; } - } - - /* Invalidate all locations written by this insn. Note that the elts we - looked up in the previous loop aren't affected, just some of their - locations may go away. */ - note_stores (body, cselib_invalidate_rtx, NULL); - - /* Now enter the equivalences in our tables. */ - for (i = 0; i < n_sets; i++) - { - rtx dest = sets[i].dest; - if (GET_CODE (dest) == REG || GET_CODE (dest) == MEM) - cselib_record_set (dest, sets[i].src_elt, sets[i].dest_addr_elt); - } - } - - /* Record the effects of INSN. */ ! void ! cselib_process_insn (insn) ! rtx insn; ! { ! int i; ! rtx x; ! ! cselib_current_insn = insn; ! ! /* Forget everything at a CODE_LABEL, a volatile asm, or a setjmp. */ ! if (GET_CODE (insn) == CODE_LABEL ! || (GET_CODE (insn) == NOTE ! && NOTE_LINE_NUMBER (insn) == NOTE_INSN_SETJMP) ! || (GET_CODE (insn) == INSN ! && GET_CODE (PATTERN (insn)) == ASM_OPERANDS ! && MEM_VOLATILE_P (PATTERN (insn)))) ! { ! clear_table (0); ! return; ! } ! ! if (! INSN_P (insn)) ! { ! cselib_current_insn = 0; ! return; ! } ! ! /* If this is a call instruction, forget anything stored in a ! call clobbered register, or, if this is not a const call, in ! memory. */ ! if (GET_CODE (insn) == CALL_INSN) ! { ! for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) ! if (call_used_regs[i]) ! cselib_invalidate_regno (i, VOIDmode); ! ! if (! CONST_CALL_P (insn)) ! cselib_invalidate_mem (callmem); ! } ! ! cselib_record_sets (insn); ! ! #ifdef AUTO_INC_DEC ! /* Clobber any registers which appear in REG_INC notes. We ! could keep track of the changes to their values, but it is ! unlikely to help. */ ! for (x = REG_NOTES (insn); x; x = XEXP (x, 1)) ! if (REG_NOTE_KIND (x) == REG_INC) ! cselib_invalidate_rtx (XEXP (x, 0), NULL_RTX, NULL); ! #endif ! ! /* Look for any CLOBBERs in CALL_INSN_FUNCTION_USAGE, but only ! after we have processed the insn. */ ! if (GET_CODE (insn) == CALL_INSN) ! for (x = CALL_INSN_FUNCTION_USAGE (insn); x; x = XEXP (x, 1)) ! if (GET_CODE (XEXP (x, 0)) == CLOBBER) ! cselib_invalidate_rtx (XEXP (XEXP (x, 0), 0), NULL_RTX, NULL); ! ! cselib_current_insn = 0; ! ! if (n_useless_values > MAX_USELESS_VALUES) ! remove_useless_values (); ! } ! ! /* Make sure our varrays are big enough. Not called from any cselib routines; ! it must be called by the user if it allocated new registers. */ ! ! void ! cselib_update_varray_sizes () ! { ! unsigned int nregs = max_reg_num (); ! ! if (nregs == cselib_nregs) ! return; ! ! cselib_nregs = nregs; ! VARRAY_GROW (reg_values, nregs); ! VARRAY_GROW (used_regs, nregs); ! } ! ! /* Initialize cselib for one pass. The caller must also call ! init_alias_analysis. */ ! void ! cselib_init () ! { ! /* These are only created once. */ ! if (! callmem) ! { ! gcc_obstack_init (&cselib_obstack); ! cselib_startobj = obstack_alloc (&cselib_obstack, 0); ! callmem = gen_rtx_MEM (BLKmode, const0_rtx); ! ggc_add_rtx_root (&callmem, 1); } - - cselib_nregs = max_reg_num (); - VARRAY_ELT_LIST_INIT (reg_values, cselib_nregs, "reg_values"); - VARRAY_UINT_INIT (used_regs, cselib_nregs, "used_regs"); - hash_table = htab_create (31, get_value_hash, entry_and_rtx_equal_p, NULL); - clear_table (1); - } - - /* Called when the current user is done with cselib. */ - - void - cselib_finish () - { - clear_table (0); - VARRAY_FREE (reg_values); - VARRAY_FREE (used_regs); - htab_delete (hash_table); } --- 2430,2823 ---- return 0; } ! /* Simplify SUBREG:OUTERMODE(OP:INNERMODE, BYTE) ! Return 0 if no simplifications is possible. */ rtx ! simplify_subreg (outermode, op, innermode, byte) ! rtx op; ! unsigned int byte; ! enum machine_mode outermode, innermode; { ! /* Little bit of sanity checking. */ ! if (innermode == VOIDmode || outermode == VOIDmode ! || innermode == BLKmode || outermode == BLKmode) abort (); ! if (GET_MODE (op) != innermode ! && GET_MODE (op) != VOIDmode) abort (); ! if (byte % GET_MODE_SIZE (outermode) ! || byte >= GET_MODE_SIZE (innermode)) ! abort (); ! if (outermode == innermode && !byte) ! return op; ! /* Attempt to simplify constant to non-SUBREG expression. */ ! if (CONSTANT_P (op)) { ! int offset, part; ! unsigned HOST_WIDE_INT val = 0; ! /* ??? This code is partly redundant with code below, but can handle ! the subregs of floats and similar corner cases. ! Later it we should move all simplification code here and rewrite ! GEN_LOWPART_IF_POSSIBLE, GEN_HIGHPART, OPERAND_SUBWORD and friends ! using SIMPLIFY_SUBREG. */ ! if (subreg_lowpart_offset (outermode, innermode) == byte) { ! rtx new = gen_lowpart_if_possible (outermode, op); ! if (new) ! return new; } ! /* Similar comment as above apply here. */ ! if (GET_MODE_SIZE (outermode) == UNITS_PER_WORD ! && GET_MODE_SIZE (innermode) > UNITS_PER_WORD ! && GET_MODE_CLASS (outermode) == MODE_INT) { ! rtx new = constant_subword (op, ! (byte / UNITS_PER_WORD), ! innermode); ! if (new) ! return new; } ! offset = byte * BITS_PER_UNIT; ! switch (GET_CODE (op)) { ! case CONST_DOUBLE: ! if (GET_MODE (op) != VOIDmode) ! break; ! /* We can't handle this case yet. */ ! if (GET_MODE_BITSIZE (outermode) >= HOST_BITS_PER_WIDE_INT) ! return NULL_RTX; ! part = offset >= HOST_BITS_PER_WIDE_INT; ! if ((BITS_PER_WORD > HOST_BITS_PER_WIDE_INT ! && BYTES_BIG_ENDIAN) ! || (BITS_PER_WORD <= HOST_BITS_PER_WIDE_INT ! && WORDS_BIG_ENDIAN)) ! part = !part; ! val = part ? CONST_DOUBLE_HIGH (op) : CONST_DOUBLE_LOW (op); ! offset %= HOST_BITS_PER_WIDE_INT; ! /* We've already picked the word we want from a double, so ! pretend this is actually an integer. */ ! innermode = mode_for_size (HOST_BITS_PER_WIDE_INT, MODE_INT, 0); ! /* FALLTHROUGH */ ! case CONST_INT: ! if (GET_CODE (op) == CONST_INT) ! val = INTVAL (op); ! /* We don't handle synthetizing of non-integral constants yet. */ ! if (GET_MODE_CLASS (outermode) != MODE_INT) ! return NULL_RTX; ! if (BYTES_BIG_ENDIAN || WORDS_BIG_ENDIAN) ! { ! if (WORDS_BIG_ENDIAN) ! offset = (GET_MODE_BITSIZE (innermode) ! - GET_MODE_BITSIZE (outermode) - offset); ! if (BYTES_BIG_ENDIAN != WORDS_BIG_ENDIAN ! && GET_MODE_SIZE (outermode) < UNITS_PER_WORD) ! offset = (offset + BITS_PER_WORD - GET_MODE_BITSIZE (outermode) ! - 2 * (offset % BITS_PER_WORD)); ! } ! if (offset >= HOST_BITS_PER_WIDE_INT) ! return ((HOST_WIDE_INT) val < 0) ? constm1_rtx : const0_rtx; ! else ! { ! val >>= offset; ! if (GET_MODE_BITSIZE (outermode) < HOST_BITS_PER_WIDE_INT) ! val = trunc_int_for_mode (val, outermode); ! return GEN_INT (val); ! } default: ! break; } } ! /* Changing mode twice with SUBREG => just change it once, ! or not at all if changing back op starting mode. */ ! if (GET_CODE (op) == SUBREG) { ! enum machine_mode innermostmode = GET_MODE (SUBREG_REG (op)); ! int final_offset = byte + SUBREG_BYTE (op); ! rtx new; ! if (outermode == innermostmode ! && byte == 0 && SUBREG_BYTE (op) == 0) ! return SUBREG_REG (op); ! /* The SUBREG_BYTE represents offset, as if the value were stored ! in memory. Irritating exception is paradoxical subreg, where ! we define SUBREG_BYTE to be 0. On big endian machines, this ! value should be negative. For a moment, undo this exception. */ ! if (byte == 0 && GET_MODE_SIZE (innermode) < GET_MODE_SIZE (outermode)) { ! int difference = (GET_MODE_SIZE (innermode) - GET_MODE_SIZE (outermode)); ! if (WORDS_BIG_ENDIAN) ! final_offset += (difference / UNITS_PER_WORD) * UNITS_PER_WORD; ! if (BYTES_BIG_ENDIAN) ! final_offset += difference % UNITS_PER_WORD; } ! if (SUBREG_BYTE (op) == 0 ! && GET_MODE_SIZE (innermostmode) < GET_MODE_SIZE (innermode)) { ! int difference = (GET_MODE_SIZE (innermostmode) - GET_MODE_SIZE (innermode)); ! if (WORDS_BIG_ENDIAN) ! final_offset += (difference / UNITS_PER_WORD) * UNITS_PER_WORD; ! if (BYTES_BIG_ENDIAN) ! final_offset += difference % UNITS_PER_WORD; } ! /* See whether resulting subreg will be paradoxical. */ ! if (GET_MODE_SIZE (innermostmode) > GET_MODE_SIZE (outermode)) { ! /* In nonparadoxical subregs we can't handle negative offsets. */ ! if (final_offset < 0) ! return NULL_RTX; ! /* Bail out in case resulting subreg would be incorrect. */ ! if (final_offset % GET_MODE_SIZE (outermode) ! || (unsigned) final_offset >= GET_MODE_SIZE (innermostmode)) ! return NULL_RTX; } ! else { ! int offset = 0; ! int difference = (GET_MODE_SIZE (innermostmode) - GET_MODE_SIZE (outermode)); ! /* In paradoxical subreg, see if we are still looking on lower part. ! If so, our SUBREG_BYTE will be 0. */ ! if (WORDS_BIG_ENDIAN) ! offset += (difference / UNITS_PER_WORD) * UNITS_PER_WORD; ! if (BYTES_BIG_ENDIAN) ! offset += difference % UNITS_PER_WORD; ! if (offset == final_offset) ! final_offset = 0; ! else ! return NULL_RTX; } ! /* Recurse for futher possible simplifications. */ ! new = simplify_subreg (outermode, SUBREG_REG (op), ! GET_MODE (SUBREG_REG (op)), ! final_offset); ! if (new) ! return new; ! return gen_rtx_SUBREG (outermode, SUBREG_REG (op), final_offset); } ! /* SUBREG of a hard register => just change the register number ! and/or mode. If the hard register is not valid in that mode, ! suppress this simplification. If the hard register is the stack, ! frame, or argument pointer, leave this as a SUBREG. */ ! if (REG_P (op) ! && (! REG_FUNCTION_VALUE_P (op) ! || ! rtx_equal_function_value_matters) ! #ifdef CLASS_CANNOT_CHANGE_MODE ! && ! (CLASS_CANNOT_CHANGE_MODE_P (outermode, innermode) ! && GET_MODE_CLASS (innermode) != MODE_COMPLEX_INT ! && GET_MODE_CLASS (innermode) != MODE_COMPLEX_FLOAT ! && (TEST_HARD_REG_BIT ! (reg_class_contents[(int) CLASS_CANNOT_CHANGE_MODE], ! REGNO (op)))) ! #endif ! && REGNO (op) < FIRST_PSEUDO_REGISTER ! && ((reload_completed && !frame_pointer_needed) ! || (REGNO (op) != FRAME_POINTER_REGNUM ! #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM ! && REGNO (op) != HARD_FRAME_POINTER_REGNUM ! #endif ! )) ! #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM ! && REGNO (op) != ARG_POINTER_REGNUM ! #endif ! && REGNO (op) != STACK_POINTER_REGNUM) { ! int final_regno = subreg_hard_regno (gen_rtx_SUBREG (outermode, op, byte), ! 0); ! /* ??? We do allow it if the current REG is not valid for ! its mode. This is a kludge to work around how float/complex ! arguments are passed on 32-bit Sparc and should be fixed. */ ! if (HARD_REGNO_MODE_OK (final_regno, outermode) ! || ! HARD_REGNO_MODE_OK (REGNO (op), innermode)) { ! rtx x = gen_rtx_REG (outermode, final_regno); ! /* Propagate original regno. We don't have any way to specify ! the offset inside orignal regno, so do so only for lowpart. ! The information is used only by alias analysis that can not ! grog partial register anyway. */ ! if (subreg_lowpart_offset (outermode, innermode) == byte) ! ORIGINAL_REGNO (x) = ORIGINAL_REGNO (op); ! return x; } } ! /* If we have a SUBREG of a register that we are replacing and we are ! replacing it with a MEM, make a new MEM and try replacing the ! SUBREG with it. Don't do this if the MEM has a mode-dependent address ! or if we would be widening it. */ ! if (GET_CODE (op) == MEM ! && ! mode_dependent_address_p (XEXP (op, 0)) ! /* Allow splitting of volatile memory references in case we don't ! have instruction to move the whole thing. */ ! && (! MEM_VOLATILE_P (op) ! || ! have_insn_for (SET, innermode)) ! && GET_MODE_SIZE (outermode) <= GET_MODE_SIZE (GET_MODE (op))) ! return adjust_address_nv (op, outermode, byte); ! /* Handle complex values represented as CONCAT ! of real and imaginary part. */ ! if (GET_CODE (op) == CONCAT) { ! int is_realpart = byte < GET_MODE_UNIT_SIZE (innermode); ! rtx part = is_realpart ? XEXP (op, 0) : XEXP (op, 1); ! unsigned int final_offset; ! rtx res; ! final_offset = byte % (GET_MODE_UNIT_SIZE (innermode)); ! res = simplify_subreg (outermode, part, GET_MODE (part), final_offset); ! if (res) ! return res; ! /* We can at least simplify it by referring directly to the relevant part. */ ! return gen_rtx_SUBREG (outermode, part, final_offset); } ! return NULL_RTX; } + /* Make a SUBREG operation or equivalent if it folds. */ ! rtx ! simplify_gen_subreg (outermode, op, innermode, byte) ! rtx op; ! unsigned int byte; ! enum machine_mode outermode, innermode; { ! rtx new; ! /* Little bit of sanity checking. */ ! if (innermode == VOIDmode || outermode == VOIDmode ! || innermode == BLKmode || outermode == BLKmode) ! abort (); ! if (GET_MODE (op) != innermode ! && GET_MODE (op) != VOIDmode) ! abort (); ! if (byte % GET_MODE_SIZE (outermode) ! || byte >= GET_MODE_SIZE (innermode)) ! abort (); ! if (GET_CODE (op) == QUEUED) ! return NULL_RTX; ! new = simplify_subreg (outermode, op, innermode, byte); ! if (new) ! return new; ! if (GET_CODE (op) == SUBREG || GET_MODE (op) == VOIDmode) ! return NULL_RTX; ! return gen_rtx_SUBREG (outermode, op, byte); } + /* Simplify X, an rtx expression. ! Return the simplified expression or NULL if no simplifications ! were possible. ! This is the preferred entry point into the simplification routines; ! however, we still allow passes to call the more specific routines. ! Right now GCC has three (yes, three) major bodies of RTL simplficiation ! code that need to be unified. ! 1. fold_rtx in cse.c. This code uses various CSE specific ! information to aid in RTL simplification. ! 2. simplify_rtx in combine.c. Similar to fold_rtx, except that ! it uses combine specific information to aid in RTL ! simplification. ! 3. The routines in this file. ! Long term we want to only have one body of simplification code; to ! get to that state I recommend the following steps: ! 1. Pour over fold_rtx & simplify_rtx and move any simplifications ! which are not pass dependent state into these routines. ! 2. As code is moved by #1, change fold_rtx & simplify_rtx to ! use this routine whenever possible. ! 3. Allow for pass dependent state to be provided to these ! routines and add simplifications based on the pass dependent ! state. Remove code from cse.c & combine.c that becomes ! redundant/dead. ! It will take time, but ultimately the compiler will be easier to ! maintain and improve. It's totally silly that when we add a ! simplification that it needs to be added to 4 places (3 for RTL ! simplification and 1 for tree simplification. */ ! ! rtx ! simplify_rtx (x) ! rtx x; { ! enum rtx_code code = GET_CODE (x); ! enum machine_mode mode = GET_MODE (x); ! switch (GET_RTX_CLASS (code)) { ! case '1': ! return simplify_unary_operation (code, mode, ! XEXP (x, 0), GET_MODE (XEXP (x, 0))); ! case 'c': ! if (swap_commutative_operands_p (XEXP (x, 0), XEXP (x, 1))) { ! rtx tem; ! tem = XEXP (x, 0); ! XEXP (x, 0) = XEXP (x, 1); ! XEXP (x, 1) = tem; ! return simplify_binary_operation (code, mode, ! XEXP (x, 0), XEXP (x, 1)); } ! case '2': ! return simplify_binary_operation (code, mode, XEXP (x, 0), XEXP (x, 1)); ! case '3': ! case 'b': ! return simplify_ternary_operation (code, mode, GET_MODE (XEXP (x, 0)), ! XEXP (x, 0), XEXP (x, 1), ! XEXP (x, 2)); ! case '<': ! return simplify_relational_operation (code, ! ((GET_MODE (XEXP (x, 0)) ! != VOIDmode) ! ? GET_MODE (XEXP (x, 0)) ! : GET_MODE (XEXP (x, 1))), ! XEXP (x, 0), XEXP (x, 1)); ! case 'x': ! /* The only case we try to handle is a SUBREG. */ ! if (code == SUBREG) ! return simplify_gen_subreg (mode, SUBREG_REG (x), ! GET_MODE (SUBREG_REG (x)), ! SUBREG_BYTE (x)); ! return NULL; ! default: ! return NULL; } } diff -Nrc3pad gcc-3.0.4/gcc/ssa-ccp.c gcc-3.1/gcc/ssa-ccp.c *** gcc-3.0.4/gcc/ssa-ccp.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/ssa-ccp.c Thu Mar 7 01:18:13 2002 *************** *** 0 **** --- 1,1225 ---- + /* Conditional constant propagation pass for the GNU compiler. + Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. + Original framework by Daniel Berlin + Fleshed out and major cleanups by Jeff Law + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2, or (at your option) any later + version. + + GCC is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to the Free + Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + + /* Conditional constant propagation. + + References: + + Constant propagation with conditional branches, + Wegman and Zadeck, ACM TOPLAS 13(2):181-210. + + Building an Optimizing Compiler, + Robert Morgan, Butterworth-Heinemann, 1998, Section 8.9. + + Advanced Compiler Design and Implementation, + Steven Muchnick, Morgan Kaufmann, 1997, Section 12.6 + + The overall structure is as follows: + + 1. Run a simple SSA based DCE pass to remove any dead code. + 2. Run CCP to compute what registers are known constants + and what edges are not executable. Remove unexecutable + edges from the CFG and simplify PHI nodes. + 3. Replace registers with constants where possible. + 4. Remove unreachable blocks computed in step #2. + 5. Another simple SSA DCE pass to remove dead code exposed + by CCP. + + When we exit, we are still in SSA form. + + + Potential further enhancements: + + 1. Handle SUBREGs, STRICT_LOW_PART, etc in destinations more + gracefully. + + 2. Handle insns with multiple outputs more gracefully. + + 3. Handle CONST_DOUBLE and symbolic constants. + + 4. Fold expressions after performing constant substitutions. */ + + + #include "config.h" + #include "system.h" + + #include "rtl.h" + #include "hard-reg-set.h" + #include "basic-block.h" + #include "ssa.h" + #include "insn-config.h" + #include "recog.h" + #include "output.h" + #include "errors.h" + #include "ggc.h" + #include "df.h" + #include "function.h" + + /* Possible lattice values. */ + + typedef enum + { + UNDEFINED, + CONSTANT, + VARYING + } latticevalue; + + /* Main structure for CCP. + + Contains the lattice value and, if it's a constant, the constant + value. */ + typedef struct + { + latticevalue lattice_val; + rtx const_value; + } value; + + /* Array of values indexed by register number. */ + static value *values; + + /* A bitmap to keep track of executable blocks in the CFG. */ + static sbitmap executable_blocks; + + /* A bitmap for all executable edges in the CFG. */ + static sbitmap executable_edges; + + /* Array of edges on the work list. */ + static edge *edge_info; + + /* We need an edge list to be able to get indexes easily. */ + static struct edge_list *edges; + + /* For building/following use-def and def-use chains. */ + static struct df *df_analyzer; + + /* Current edge we are operating on, from the worklist */ + static edge flow_edges; + + /* Bitmap of SSA edges which will need reexamination as their definition + has changed. */ + static sbitmap ssa_edges; + + /* Simple macros to simplify code */ + #define SSA_NAME(x) REGNO (SET_DEST (x)) + #define PHI_PARMS(x) XVEC (SET_SRC (x), 0) + #define EIE(x,y) EDGE_INDEX (edges, x, y) + + static void visit_phi_node PARAMS ((rtx, basic_block)); + static void visit_expression PARAMS ((rtx, basic_block)); + static void defs_to_undefined PARAMS ((rtx)); + static void defs_to_varying PARAMS ((rtx)); + static void examine_flow_edges PARAMS ((void)); + static int mark_references PARAMS ((rtx *, void *)); + static void follow_def_use_chains PARAMS ((void)); + static void optimize_unexecutable_edges PARAMS ((struct edge_list *, sbitmap)); + static void ssa_ccp_substitute_constants PARAMS ((void)); + static void ssa_ccp_df_delete_unreachable_insns PARAMS ((void)); + static void ssa_fast_dce PARAMS ((struct df *)); + + /* Loop through the PHI_NODE's parameters for BLOCK and compare their + lattice values to determine PHI_NODE's lattice value. */ + static void + visit_phi_node (phi_node, block) + rtx phi_node; + basic_block block; + { + unsigned int i; + rtx phi_node_expr = NULL; + unsigned int phi_node_name = SSA_NAME (PATTERN (phi_node)); + latticevalue phi_node_lattice_val = UNDEFINED; + rtx pat = PATTERN (phi_node); + rtvec phi_vec = XVEC (SET_SRC (pat), 0); + unsigned int num_elem = GET_NUM_ELEM (phi_vec); + + for (i = 0; i < num_elem; i += 2) + { + if (TEST_BIT (executable_edges, + EIE (BASIC_BLOCK (INTVAL (RTVEC_ELT (phi_vec, i + 1))), + block))) + { + unsigned int current_parm + = REGNO (RTVEC_ELT (phi_vec, i)); + + latticevalue current_parm_lattice_val + = values[current_parm].lattice_val; + + /* If any node is VARYING, then new value of PHI_NODE + is VARYING. */ + if (current_parm_lattice_val == VARYING) + { + phi_node_lattice_val = VARYING; + phi_node_expr = NULL; + break; + } + + /* If we have more than one distinct constant, then the new + value of PHI_NODE is VARYING. */ + if (current_parm_lattice_val == CONSTANT + && phi_node_lattice_val == CONSTANT + && values[current_parm].const_value != phi_node_expr) + { + phi_node_lattice_val = VARYING; + phi_node_expr = NULL; + break; + } + + /* If the current value of PHI_NODE is UNDEFINED and one + node in PHI_NODE is CONSTANT, then the new value of the + PHI is that CONSTANT. Note this can turn into VARYING + if we find another distinct constant later. */ + if (phi_node_lattice_val == UNDEFINED + && phi_node_expr == NULL + && current_parm_lattice_val == CONSTANT) + { + phi_node_expr = values[current_parm].const_value; + phi_node_lattice_val = CONSTANT; + continue; + } + } + } + + /* If the value of PHI_NODE changed, then we will need to + re-execute uses of the output of PHI_NODE. */ + if (phi_node_lattice_val != values[phi_node_name].lattice_val) + { + values[phi_node_name].lattice_val = phi_node_lattice_val; + values[phi_node_name].const_value = phi_node_expr; + SET_BIT (ssa_edges, phi_node_name); + } + } + + /* Sets all defs in an insn to UNDEFINED. */ + static void + defs_to_undefined (insn) + rtx insn; + { + struct df_link *currdef; + for (currdef = DF_INSN_DEFS (df_analyzer, insn); currdef; + currdef = currdef->next) + { + if (values[DF_REF_REGNO (currdef->ref)].lattice_val != UNDEFINED) + SET_BIT (ssa_edges, DF_REF_REGNO (currdef->ref)); + values[DF_REF_REGNO (currdef->ref)].lattice_val = UNDEFINED; + } + } + + /* Sets all defs in an insn to VARYING. */ + static void + defs_to_varying (insn) + rtx insn; + { + struct df_link *currdef; + for (currdef = DF_INSN_DEFS (df_analyzer, insn); currdef; + currdef = currdef->next) + { + if (values[DF_REF_REGNO (currdef->ref)].lattice_val != VARYING) + SET_BIT (ssa_edges, DF_REF_REGNO (currdef->ref)); + values[DF_REF_REGNO (currdef->ref)].lattice_val = VARYING; + } + } + + /* Go through the expression, call the appropriate evaluation routines + to attempt cprop */ + static void + visit_expression (insn, block) + rtx insn; + basic_block block; + { + rtx src, dest, set; + + + /* Ugh. CALL_INSNs may end a basic block and have multiple edges + leading out from them. + + Mark all the outgoing edges as executable, then fall into the + normal processing below. */ + if (GET_CODE (insn) == CALL_INSN && block->end == insn) + { + edge curredge; + + for (curredge = block->succ; curredge; + curredge = curredge->succ_next) + { + int index = EIE (curredge->src, curredge->dest); + + if (TEST_BIT (executable_edges, index)) + continue; + + SET_BIT (executable_edges, index); + edge_info[index] = flow_edges; + flow_edges = curredge; + } + } + + set = single_set (insn); + if (! set) + { + defs_to_varying (insn); + return; + } + + src = SET_SRC (set); + dest = SET_DEST (set); + + /* We may want to refine this some day. */ + if (GET_CODE (dest) != REG && dest != pc_rtx) + { + defs_to_varying (insn); + return; + } + + /* Hard registers are not put in SSA form and thus we must consider + them varying. All the more reason to avoid hard registers in + RTL until as late as possible in the compilation. */ + if (GET_CODE (dest) == REG && REGNO (dest) < FIRST_PSEUDO_REGISTER) + { + defs_to_varying (insn); + return; + } + + /* If this is assigning DEST to a constant, record that fact. */ + if (GET_CODE (src) == CONST_INT && GET_CODE (insn) == INSN) + { + unsigned int resultreg = REGNO (dest); + + values[resultreg].lattice_val = CONSTANT; + values[resultreg].const_value = SET_SRC (PATTERN (insn)); + SET_BIT (ssa_edges, resultreg); + } + + /* If this is a copy operation, then we can copy the lattice values. */ + else if (GET_CODE (src) == REG && GET_CODE (dest) == REG) + { + unsigned int old_value = REGNO (src); + latticevalue old_lattice_value = values[old_value].lattice_val; + unsigned int new_value = REGNO (dest); + + /* Unless the lattice value is going to change, don't bother + adding the "new value" into the worklist. */ + if (values[new_value].lattice_val != old_lattice_value + || values[new_value].const_value != values[old_value].const_value) + SET_BIT (ssa_edges, new_value); + + /* Copy the old lattice node info into the new value lattice node. */ + values[new_value].lattice_val = old_lattice_value; + values[new_value].const_value = values[old_value].const_value; + } + + /* Handle jumps. */ + else if (GET_CODE (insn) == JUMP_INSN) + { + rtx x = pc_set (insn); + if (GET_CODE (src) != IF_THEN_ELSE) + { + edge curredge; + + /* This is a computed jump, table jump, or an unconditional + jump. For all these cases we want to mark all successor + blocks as executable if they have not already been + marked. + + One day we may try do better with swtich tables and + other computed jumps. */ + for (curredge = block->succ; curredge; + curredge = curredge->succ_next) + { + int index = EIE (curredge->src, curredge->dest); + + if (TEST_BIT (executable_edges, index)) + continue; + + SET_BIT (executable_edges, index); + edge_info[index] = flow_edges; + flow_edges = curredge; + } + } + else + { + edge curredge; + enum rtx_code comparison_code; + rtx comparison_src0; + rtx comparison_src1; + + comparison_code = GET_CODE (XEXP (src, 0)); + comparison_src0 = XEXP (XEXP (src, 0), 0); + comparison_src1 = XEXP (XEXP (src, 0), 1); + + /* If either operand is undefined, then there is nothing to + do right now. If/when operands are later defined we will + revaluate the condition and take the appropriate action. */ + if ((GET_CODE (comparison_src0) == REG + && values[REGNO (comparison_src0)].lattice_val == UNDEFINED) + || (GET_CODE (comparison_src1) == REG + && values[REGNO (comparison_src1)].lattice_val == UNDEFINED)) + return; + + /* If either operand is varying, then we must consider all + paths as executable. */ + if ((GET_CODE (comparison_src0) == REG + && values[REGNO (comparison_src0)].lattice_val == VARYING) + || (GET_CODE (comparison_src1) == REG + && values[REGNO (comparison_src1)].lattice_val == VARYING)) + { + for (curredge = block->succ; curredge; + curredge = curredge->succ_next) + { + int index = EIE (curredge->src, curredge->dest); + + if (TEST_BIT (executable_edges, index)) + continue; + + SET_BIT (executable_edges, index); + edge_info[index] = flow_edges; + flow_edges = curredge; + } + return; + } + + /* Try to simplify the comparison. */ + if (GET_CODE (comparison_src0) == REG + && values[REGNO (comparison_src0)].lattice_val == CONSTANT) + comparison_src0 = values[REGNO (comparison_src0)].const_value; + + if (GET_CODE (comparison_src1) == REG + && values[REGNO (comparison_src1)].lattice_val == CONSTANT) + comparison_src1 = values[REGNO (comparison_src1)].const_value; + + x = simplify_ternary_operation (IF_THEN_ELSE, + VOIDmode, + GET_MODE (XEXP (src, 0)), + gen_rtx (comparison_code, + GET_MODE (XEXP (src, 0)), + comparison_src0, + comparison_src1), + XEXP (src, 1), + XEXP (src, 2)); + + /* Walk through all the outgoing edges from this block and see + which (if any) we should mark as executable. */ + for (curredge = block->succ; curredge; + curredge = curredge->succ_next) + { + int index = EIE (curredge->src, curredge->dest); + + if (TEST_BIT (executable_edges, index)) + continue; + + /* If we were unable to simplify the expression at this + point, it's highly unlikely we'll be able to simplify + it later. So consider all edges as executable if the + expression did not simplify. + + If the expression simplified to (pc), then we know we + will take the fall-thru edge, so mark it. Similarly, + if the expression simplified to (label_ref ...), then + we know the branch will be taken and we mark that + edge as taken. */ + if (!x + || (x == pc_rtx + && (curredge->flags & EDGE_FALLTHRU)) + || (GET_CODE (x) == LABEL_REF + && ! (curredge->flags & EDGE_FALLTHRU))) + { + SET_BIT (executable_edges, index); + edge_info[index] = flow_edges; + flow_edges = curredge; + } + } + } + } + else if (!PHI_NODE_P (insn)) + { + rtx simplified = NULL; + + /* We've got some kind of INSN. If it's simple, try to evaluate + it and record the results. + + We already know this insn is a single_set and that it sets + a pseudo register. So we just need to extract the source + arguments, simplify them to constants if possible, then + simplify the expression as a whole if possible. */ + switch (GET_RTX_CLASS (GET_CODE (src))) + { + case '<': + { + rtx src0 = XEXP (src, 0); + rtx src1 = XEXP (src, 1); + enum machine_mode mode; + + /* If either is undefined, then the result is undefined. */ + if ((GET_CODE (src0) == REG + && values[REGNO (src0)].lattice_val == UNDEFINED) + || (GET_CODE (src1) == REG + && values[REGNO (src1)].lattice_val == UNDEFINED)) + { + defs_to_undefined (insn); + break; + } + + /* Determine the mode for the operation before we simplify + our arguments to constants. */ + mode = GET_MODE (src0); + if (mode == VOIDmode) + mode = GET_MODE (src1); + + /* Simplify source operands to whatever known values they + may have. */ + if (GET_CODE (src0) == REG + && values[REGNO (src0)].lattice_val == CONSTANT) + src0 = values[REGNO (src0)].const_value; + + if (GET_CODE (src1) == REG + && values[REGNO (src1)].lattice_val == CONSTANT) + src1 = values[REGNO (src1)].const_value; + + /* See if the simplifier can determine if this operation + computes a constant value. */ + simplified = simplify_relational_operation (GET_CODE (src), + mode, src0, src1); + break; + + } + + case '1': + { + rtx src0 = XEXP (src, 0); + enum machine_mode mode0 = GET_MODE (src0); + + /* If the operand is undefined, then the result is undefined. */ + if (GET_CODE (src0) == REG + && values[REGNO (src0)].lattice_val == UNDEFINED) + { + defs_to_undefined (insn); + break; + } + + /* Simplify source operands to whatever known values they + may have. */ + if (GET_CODE (src0) == REG + && values[REGNO (src0)].lattice_val == CONSTANT) + src0 = values[REGNO (src0)].const_value; + + /* See if the simplifier can determine if this operation + computes a constant value. */ + simplified = simplify_unary_operation (GET_CODE (src), + GET_MODE (src), + src0, + mode0); + break; + } + + case '2': + case 'c': + { + rtx src0 = XEXP (src, 0); + rtx src1 = XEXP (src, 1); + + /* If either is undefined, then the result is undefined. */ + if ((GET_CODE (src0) == REG + && values[REGNO (src0)].lattice_val == UNDEFINED) + || (GET_CODE (src1) == REG + && values[REGNO (src1)].lattice_val == UNDEFINED)) + { + defs_to_undefined (insn); + break; + } + + /* Simplify source operands to whatever known values they + may have. */ + if (GET_CODE (src0) == REG + && values[REGNO (src0)].lattice_val == CONSTANT) + src0 = values[REGNO (src0)].const_value; + + if (GET_CODE (src1) == REG + && values[REGNO (src1)].lattice_val == CONSTANT) + src1 = values[REGNO (src1)].const_value; + + /* See if the simplifier can determine if this operation + computes a constant value. */ + simplified = simplify_binary_operation (GET_CODE (src), + GET_MODE (src), + src0, src1); + break; + } + + case '3': + case 'b': + { + rtx src0 = XEXP (src, 0); + rtx src1 = XEXP (src, 1); + rtx src2 = XEXP (src, 2); + + /* If either is undefined, then the result is undefined. */ + if ((GET_CODE (src0) == REG + && values[REGNO (src0)].lattice_val == UNDEFINED) + || (GET_CODE (src1) == REG + && values[REGNO (src1)].lattice_val == UNDEFINED) + || (GET_CODE (src2) == REG + && values[REGNO (src2)].lattice_val == UNDEFINED)) + { + defs_to_undefined (insn); + break; + } + + /* Simplify source operands to whatever known values they + may have. */ + if (GET_CODE (src0) == REG + && values[REGNO (src0)].lattice_val == CONSTANT) + src0 = values[REGNO (src0)].const_value; + + if (GET_CODE (src1) == REG + && values[REGNO (src1)].lattice_val == CONSTANT) + src1 = values[REGNO (src1)].const_value; + + if (GET_CODE (src2) == REG + && values[REGNO (src2)].lattice_val == CONSTANT) + src2 = values[REGNO (src2)].const_value; + + /* See if the simplifier can determine if this operation + computes a constant value. */ + simplified = simplify_ternary_operation (GET_CODE (src), + GET_MODE (src), + GET_MODE (src), + src0, src1, src2); + break; + } + + default: + defs_to_varying (insn); + } + + if (simplified && GET_CODE (simplified) == CONST_INT) + { + if (values[REGNO (dest)].lattice_val != CONSTANT + || values[REGNO (dest)].const_value != simplified) + SET_BIT (ssa_edges, REGNO (dest)); + + values[REGNO (dest)].lattice_val = CONSTANT; + values[REGNO (dest)].const_value = simplified; + } + else + defs_to_varying (insn); + } + } + + /* Iterate over the FLOW_EDGES work list. Simulate the target block + for each edge. */ + static void + examine_flow_edges () + { + while (flow_edges != NULL) + { + basic_block succ_block; + rtx curr_phi_node; + + /* Pull the next block to simulate off the worklist. */ + succ_block = flow_edges->dest; + flow_edges = edge_info[EIE (flow_edges->src, flow_edges->dest)]; + + /* There is nothing to do for the exit block. */ + if (succ_block == EXIT_BLOCK_PTR) + continue; + + /* Always simulate PHI nodes, even if we have simulated this block + before. Note that all PHI nodes are consecutive within a block. */ + for (curr_phi_node = first_insn_after_basic_block_note (succ_block); + PHI_NODE_P (curr_phi_node); + curr_phi_node = NEXT_INSN (curr_phi_node)) + visit_phi_node (curr_phi_node, succ_block); + + /* If this is the first time we've simulated this block, then we + must simulate each of its insns. */ + if (!TEST_BIT (executable_blocks, succ_block->index)) + { + rtx currinsn; + edge succ_edge = succ_block->succ; + + /* Note that we have simulated this block. */ + SET_BIT (executable_blocks, succ_block->index); + + /* Simulate each insn within the block. */ + currinsn = succ_block->head; + while (currinsn != succ_block->end) + { + if (INSN_P (currinsn)) + visit_expression (currinsn, succ_block); + + currinsn = NEXT_INSN (currinsn); + } + + /* Don't forget the last insn in the block. */ + if (INSN_P (currinsn)) + visit_expression (currinsn, succ_block); + + /* If we haven't looked at the next block, and it has a + single successor, add it onto the worklist. This is because + if we only have one successor, we know it gets executed, + so we don't have to wait for cprop to tell us. */ + if (succ_edge != NULL + && succ_edge->succ_next == NULL + && !TEST_BIT (executable_edges, + EIE (succ_edge->src, succ_edge->dest))) + { + SET_BIT (executable_edges, + EIE (succ_edge->src, succ_edge->dest)); + edge_info[EIE (succ_edge->src, succ_edge->dest)] = flow_edges; + flow_edges = succ_edge; + } + } + } + } + + /* Follow the def-use chains for each definition on the worklist and + simulate the uses of the definition. */ + + static void + follow_def_use_chains () + { + /* Iterate over all the entries on the SSA_EDGES worklist. */ + while (sbitmap_first_set_bit (ssa_edges) >= 0) + { + int member; + struct df_link *curruse; + + /* Pick an entry off the worklist (it does not matter which + entry we pick). */ + member = sbitmap_first_set_bit (ssa_edges); + RESET_BIT (ssa_edges, member); + + /* Iterate through all the uses of this entry. */ + for (curruse = df_analyzer->regs[member].uses; curruse; + curruse = curruse->next) + { + rtx useinsn; + + useinsn = DF_REF_INSN (curruse->ref); + if (PHI_NODE_P (useinsn)) + { + if (TEST_BIT (executable_blocks, BLOCK_NUM (useinsn))) + visit_phi_node (useinsn, BLOCK_FOR_INSN (useinsn)); + } + else + { + if (TEST_BIT (executable_blocks, BLOCK_NUM (useinsn))) + visit_expression (useinsn, BLOCK_FOR_INSN (useinsn)); + } + } + } + } + + /* Examine each edge to see if we were able to prove any were + not executable. + + If an edge is not executable, then we can remove its alternative + in PHI nodes as the destination of the edge, we can simplify the + conditional branch at the source of the edge, and we can remove + the edge from the CFG. Note we do not delete unreachable blocks + yet as the DF analyzer can not deal with that yet. */ + static void + optimize_unexecutable_edges (edges, executable_edges) + struct edge_list *edges; + sbitmap executable_edges; + { + int i; + + for (i = 0; i < NUM_EDGES (edges); i++) + { + if (!TEST_BIT (executable_edges, i)) + { + edge edge = INDEX_EDGE (edges, i); + + if (edge->flags & EDGE_ABNORMAL) + continue; + + /* We found an edge that is not executable. First simplify + the PHI nodes in the target block. */ + if (edge->dest != EXIT_BLOCK_PTR) + { + rtx insn = first_insn_after_basic_block_note (edge->dest); + + while (PHI_NODE_P (insn)) + { + remove_phi_alternative (PATTERN (insn), edge->src); + if (rtl_dump_file) + fprintf (rtl_dump_file, + "Removing alternative for bb %d of phi %d\n", + edge->src->index, SSA_NAME (PATTERN (insn))); + insn = NEXT_INSN (insn); + } + } + if (rtl_dump_file) + fprintf (rtl_dump_file, + "Removing unexecutable edge from %d to %d\n", + edge->src->index, edge->dest->index); + /* Since the edge was not executable, remove it from the CFG. */ + remove_edge (edge); + } + } + + /* We have removed all the unexecutable edges from the CFG. Fix up + the conditional jumps at the end of any affected block. + + We have three cases to deal with: + + a. Both outgoing edges are not executable. This happens if the + source block is not reachable. We will deal with this by + deleting all the insns in the block later. + + b. The fall-thru edge is not executable. In this case we + change the conditional jump into an unconditional jump and + add a BARRIER after the unconditional jump. Note that since + we are working on generic RTL we can change the jump in-place + instead of dealing with the headache of reemitting the jump. + + c. The branch taken edge is not executable. In this case + we turn the jump into (set (pc) (pc)) which is a nop-jump + and we will remove the unrecognizable insn later. + + In cases B & C we are removing uses of registers, so make sure + to note those changes for the DF analyzer. */ + + for (i = 0; i < n_basic_blocks; i++) + { + basic_block bb = BASIC_BLOCK (i); + rtx insn = bb->end; + edge edge = bb->succ; + + /* If we have no predecessors, then this block is unreachable and + will be cleaned up when we remove unreachable blocks. */ + if (bb->pred == NULL || GET_CODE (insn) != JUMP_INSN) + continue; + + /* If this block ends in a conditional jump, but only has one + successor, then the jump needs adjustment. */ + if (condjump_p (insn) && ! simplejump_p (insn) + && bb->succ && bb->succ->succ_next == NULL) + { + /* If the fallthru edge is the executable edge, then turn + this jump into a nop jump, otherwise make it an unconditinoal + jump to its target. */ + if (edge->flags & EDGE_FALLTHRU) + { + PUT_CODE (insn, NOTE); + NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED; + } + else + { + SET_SRC (PATTERN (insn)) = gen_rtx_LABEL_REF (Pmode, + JUMP_LABEL (insn)); + emit_barrier_after (insn); + INSN_CODE (insn) = -1; + } + + /* Inform the DF analyzer that this insn changed. */ + df_insn_modify (df_analyzer, BLOCK_FOR_INSN (insn), insn); + } + } + } + + /* Perform substitution of known values for pseudo registers. + + ??? Note we do not do simplifications or constant folding here, it + is unlikely that any significant simplifications can be done here + anyway. Consider that if the simplification would result in an + expression that produces a constant value that the value would + have been discovered and recorded already. + + We perform two transformations. First, we initialize pseudos to their + known constant values at their definition point. Second, we try to + replace uses with the known constant value. */ + + static void + ssa_ccp_substitute_constants () + { + unsigned int i; + + for (i = FIRST_PSEUDO_REGISTER; i < VARRAY_SIZE (ssa_definition); i++) + { + if (values[i].lattice_val == CONSTANT) + { + rtx def = VARRAY_RTX (ssa_definition, i); + rtx set = single_set (def); + struct df_link *curruse; + + if (! set) + continue; + + /* Do not try to simplify PHI nodes down to a constant load. + That will be done later as we translate out of SSA. Also, + doing that here could violate the rule that all PHI nodes + are consecutive at the start of the basic block. + + Don't do anything to nodes that were already sets to + constants. */ + if (! PHI_NODE_P (def) + && ! ((GET_CODE (def) == INSN + && GET_CODE (SET_SRC (set)) == CONST_INT))) + { + if (rtl_dump_file) + fprintf (rtl_dump_file, + "Register %d is now set to a constant\n", + SSA_NAME (PATTERN (def))); + SET_SRC (set) = values[i].const_value; + INSN_CODE (def) = -1; + df_insn_modify (df_analyzer, BLOCK_FOR_INSN (def), def); + } + + /* Iterate through all the uses of this entry and try replacements + there too. Note it is not particularly profitable to try + and fold/simplify expressions here as most of the common + cases were handled above. */ + for (curruse = df_analyzer->regs[i].uses; + curruse; + curruse = curruse->next) + { + rtx useinsn; + + useinsn = DF_REF_INSN (curruse->ref); + + if (!INSN_DELETED_P (useinsn) + && ! (GET_CODE (useinsn) == NOTE + && NOTE_LINE_NUMBER (useinsn) == NOTE_INSN_DELETED) + && (GET_CODE (useinsn) == INSN + || GET_CODE (useinsn) == JUMP_INSN)) + { + + if (validate_replace_src (regno_reg_rtx [i], + values[i].const_value, + useinsn)) + { + if (rtl_dump_file) + fprintf (rtl_dump_file, + "Register %d in insn %d replaced with constant\n", + i, INSN_UID (useinsn)); + INSN_CODE (useinsn) = -1; + df_insn_modify (df_analyzer, + BLOCK_FOR_INSN (useinsn), + useinsn); + } + + } + } + } + } + } + + /* Now find all unreachable basic blocks. All the insns in those + blocks are unreachable, so delete them and mark any necessary + updates for the DF analyzer. */ + + static void + ssa_ccp_df_delete_unreachable_insns () + { + int i; + + /* Use the CFG to find all the reachable blocks. */ + find_unreachable_blocks (); + + /* Now we know what blocks are not reachable. Mark all the insns + in those blocks as deleted for the DF analyzer. We'll let the + normal flow code actually remove the unreachable blocks. */ + for (i = n_basic_blocks - 1; i >= 0; --i) + { + basic_block b = BASIC_BLOCK (i); + + if (!(b->flags & BB_REACHABLE)) + { + rtx start = b->head; + rtx end = b->end; + rtx tmp; + + /* Include any jump table following the basic block. */ + end = b->end; + if (GET_CODE (end) == JUMP_INSN + && (tmp = JUMP_LABEL (end)) != NULL_RTX + && (tmp = NEXT_INSN (tmp)) != NULL_RTX + && GET_CODE (tmp) == JUMP_INSN + && (GET_CODE (PATTERN (tmp)) == ADDR_VEC + || GET_CODE (PATTERN (tmp)) == ADDR_DIFF_VEC)) + end = tmp; + + while (1) + { + rtx next = NEXT_INSN (start); + + if (GET_CODE (start) == INSN + || GET_CODE (start) == CALL_INSN + || GET_CODE (start) == JUMP_INSN) + df_insn_delete (df_analyzer, BLOCK_FOR_INSN (start), start); + + if (start == end) + break; + start = next; + } + } + } + } + + + /* Main entry point for SSA Conditional Constant Propagation. + + Long term it should accept as input the specific flow graph to + operate on so that it can be called for sub-graphs. */ + + void + ssa_const_prop () + { + unsigned int i; + edge curredge; + + /* We need alias analysis (for what?) */ + init_alias_analysis (); + + df_analyzer = df_init (); + df_analyse (df_analyzer, 0, + DF_RD_CHAIN | DF_RU_CHAIN | DF_REG_INFO | DF_HARD_REGS); + + /* We need mappings from insn to its containing block. */ + compute_bb_for_insn (get_max_uid ()); + + /* Perform a quick and dirty dead code elimination pass. This is not + as aggressive as it could be, but it's good enough to clean up a + lot of unwanted junk and it is fast. */ + ssa_fast_dce (df_analyzer); + + /* Build an edge list from the CFG. */ + edges = create_edge_list (); + + /* Initialize the values array with everything as undefined. */ + values = (value *) xmalloc (VARRAY_SIZE (ssa_definition) * sizeof (value)); + for (i = 0; i < VARRAY_SIZE (ssa_definition); i++) + { + if (i < FIRST_PSEUDO_REGISTER) + values[i].lattice_val = VARYING; + else + values[i].lattice_val = UNDEFINED; + values[i].const_value = NULL; + } + + ssa_edges = sbitmap_alloc (VARRAY_SIZE (ssa_definition)); + sbitmap_zero (ssa_edges); + + executable_blocks = sbitmap_alloc (n_basic_blocks); + sbitmap_zero (executable_blocks); + + executable_edges = sbitmap_alloc (NUM_EDGES (edges)); + sbitmap_zero (executable_edges); + + edge_info = (edge *) xmalloc (NUM_EDGES (edges) * sizeof (edge)); + flow_edges = ENTRY_BLOCK_PTR->succ; + + /* Add the successors of the entry block to the edge worklist. That + is enough of a seed to get SSA-CCP started. */ + for (curredge = ENTRY_BLOCK_PTR->succ; curredge; + curredge = curredge->succ_next) + { + int index = EIE (curredge->src, curredge->dest); + SET_BIT (executable_edges, index); + edge_info[index] = curredge->succ_next; + } + + /* Iterate until until the worklists are empty. */ + do + { + examine_flow_edges (); + follow_def_use_chains (); + } + while (flow_edges != NULL); + + /* Now perform substitutions based on the known constant values. */ + ssa_ccp_substitute_constants (); + + /* Remove unexecutable edges from the CFG and make appropriate + adjustments to PHI nodes. */ + optimize_unexecutable_edges (edges, executable_edges); + + /* Now remove all unreachable insns and update the DF information. + as appropriate. */ + ssa_ccp_df_delete_unreachable_insns (); + + #if 0 + /* The DF analyzer expects the number of blocks to remain constant, + so we can't remove unreachable blocks. + + Code the DF analyzer calls expects there to be no unreachable + blocks in the CFG. So we can't leave unreachable blocks in the + CFG. + + So, there is no way to do an incremental update of the DF data + at this point. */ + df_analyse (df_analyzer, 0, + DF_RD_CHAIN | DF_RU_CHAIN | DF_REG_INFO | DF_HARD_REGS); + #endif + + /* Clean up any dead code exposed by SSA-CCP, do this after updating + the dataflow information! */ + ssa_fast_dce (df_analyzer); + + free (values); + values = NULL; + + free (edge_info); + edge_info = NULL; + + sbitmap_free (executable_blocks); + executable_blocks = NULL; + + sbitmap_free (ssa_edges); + ssa_edges = NULL; + + free_edge_list (edges); + edges = NULL; + + sbitmap_free (executable_edges); + executable_edges = NULL; + + df_finish (df_analyzer); + end_alias_analysis (); + } + + static int + mark_references (current_rtx, data) + rtx *current_rtx; + void *data; + { + rtx x = *current_rtx; + sbitmap worklist = (sbitmap) data; + + if (x == NULL_RTX) + return 0; + + if (GET_CODE (x) == SET) + { + rtx dest = SET_DEST (x); + + if (GET_CODE (dest) == STRICT_LOW_PART + || GET_CODE (dest) == SUBREG + || GET_CODE (dest) == SIGN_EXTRACT + || GET_CODE (dest) == ZERO_EXTRACT) + { + rtx reg; + + reg = dest; + + while (GET_CODE (reg) == STRICT_LOW_PART + || GET_CODE (reg) == SUBREG + || GET_CODE (reg) == SIGN_EXTRACT + || GET_CODE (reg) == ZERO_EXTRACT) + reg = XEXP (reg, 0); + + if (GET_CODE (reg) == REG) + SET_BIT (worklist, REGNO (reg)); + } + + if (GET_CODE (dest) == REG) + { + for_each_rtx (&SET_SRC (x), mark_references, data); + return -1; + } + + return 0; + } + else if (GET_CODE (x) == REG) + { + SET_BIT (worklist, REGNO (x)); + return -1; + } + else if (GET_CODE (x) == CLOBBER) + return -1; + else + return 0; + } + + static void + ssa_fast_dce (df) + struct df *df; + { + sbitmap worklist = sbitmap_alloc (VARRAY_SIZE (ssa_definition)); + sbitmap_ones (worklist); + + /* Iterate on the worklist until there's no definitions left to + examine. */ + while (sbitmap_first_set_bit (worklist) >= 0) + { + struct df_link *curruse; + int reg, found_use; + + /* Remove an item from the worklist. */ + reg = sbitmap_first_set_bit (worklist); + RESET_BIT (worklist, reg); + + /* We never consider deleting assignments to hard regs or things + which do not have SSA definitions, or things we have already + deleted, or things with unusual side effects. */ + if (reg < FIRST_PSEUDO_REGISTER + || ! VARRAY_RTX (ssa_definition, reg) + || INSN_DELETED_P (VARRAY_RTX (ssa_definition, reg)) + || (GET_CODE (VARRAY_RTX (ssa_definition, reg)) == NOTE + && (NOTE_LINE_NUMBER (VARRAY_RTX (ssa_definition, reg)) + == NOTE_INSN_DELETED)) + || side_effects_p (PATTERN (VARRAY_RTX (ssa_definition, reg)))) + continue; + + /* Iterate over the uses of this register. If we can not find + any uses that have not been deleted, then the definition of + this register is dead. */ + found_use = 0; + for (curruse = df->regs[reg].uses; curruse; curruse = curruse->next) + { + if (curruse->ref + && DF_REF_INSN (curruse->ref) + && ! INSN_DELETED_P (DF_REF_INSN (curruse->ref)) + && ! (GET_CODE (DF_REF_INSN (curruse->ref)) == NOTE + && (NOTE_LINE_NUMBER (DF_REF_INSN (curruse->ref)) + == NOTE_INSN_DELETED)) + && DF_REF_INSN (curruse->ref) != VARRAY_RTX (ssa_definition, reg)) + { + found_use = 1; + break; + } + } + + /* If we did not find a use of this register, then the definition + of this register is dead. */ + + if (! found_use) + { + rtx def = VARRAY_RTX (ssa_definition, reg); + + /* Add all registers referenced by INSN to the work + list. */ + for_each_rtx (&PATTERN (def), mark_references, worklist); + + /* Inform the analyzer that this insn is going to be + deleted. */ + df_insn_delete (df, BLOCK_FOR_INSN (def), def); + + VARRAY_RTX (ssa_definition, reg) = NULL; + } + } + + sbitmap_free (worklist); + + /* Update the use-def chains in the df_analyzer as needed. */ + df_analyse (df_analyzer, 0, + DF_RD_CHAIN | DF_RU_CHAIN | DF_REG_INFO | DF_HARD_REGS); + } diff -Nrc3pad gcc-3.0.4/gcc/ssa-dce.c gcc-3.1/gcc/ssa-dce.c *** gcc-3.0.4/gcc/ssa-dce.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/ssa-dce.c Tue Jan 22 14:33:34 2002 *************** *** 0 **** --- 1,742 ---- + /* Dead-code elimination pass for the GNU compiler. + Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. + Written by Jeffrey D. Oldham . + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2, or (at your option) any later + version. + + GCC is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to the Free + Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + + /* Dead-code elimination is the removal of instructions which have no + impact on the program's output. "Dead instructions" have no impact + on the program's output, while "necessary instructions" may have + impact on the output. + + The algorithm consists of three phases: + 1) marking as necessary all instructions known to be necessary, + e.g., writing a value to memory, + 2) propagating necessary instructions, e.g., the instructions + giving values to operands in necessary instructions, and + 3) removing dead instructions (except replacing dead conditionals + with unconditional jumps). + + Side Effects: + The last step can require adding labels, deleting insns, and + modifying basic block structures. Some conditional jumps may be + converted to unconditional jumps so the control-flow graph may be + out-of-date. + + Edges from some infinite loops to the exit block can be added to + the control-flow graph, but will be removed after this pass is + complete. + + It Does Not Perform: + We decided to not simultaneously perform jump optimization and dead + loop removal during dead-code elimination. Thus, all jump + instructions originally present remain after dead-code elimination + but 1) unnecessary conditional jump instructions are changed to + unconditional jump instructions and 2) all unconditional jump + instructions remain. + + Assumptions: + 1) SSA has been performed. + 2) The basic block and control-flow graph structures are accurate. + 3) The flow graph permits constructing an edge_list. + 4) note rtxes should be saved. + + Unfinished: + When replacing unnecessary conditional jumps with unconditional + jumps, the control-flow graph is not updated. It should be. + + References: + Building an Optimizing Compiler + Robert Morgan + Butterworth-Heinemann, 1998 + Section 8.9 + */ + + #include "config.h" + #include "system.h" + + #include "rtl.h" + #include "hard-reg-set.h" + #include "basic-block.h" + #include "ssa.h" + #include "insn-config.h" + #include "recog.h" + #include "output.h" + + + /* A map from blocks to the edges on which they are control dependent. */ + typedef struct { + /* An dynamically allocated array. The Nth element corresponds to + the block with index N + 2. The Ith bit in the bitmap is set if + that block is dependent on the Ith edge. */ + bitmap *data; + /* The number of elements in the array. */ + int length; + } control_dependent_block_to_edge_map_s, *control_dependent_block_to_edge_map; + + /* Local function prototypes. */ + static control_dependent_block_to_edge_map control_dependent_block_to_edge_map_create + PARAMS((size_t num_basic_blocks)); + static void set_control_dependent_block_to_edge_map_bit + PARAMS ((control_dependent_block_to_edge_map c, basic_block bb, + int edge_index)); + static void control_dependent_block_to_edge_map_free + PARAMS ((control_dependent_block_to_edge_map c)); + static void find_all_control_dependences + PARAMS ((struct edge_list *el, int *pdom, + control_dependent_block_to_edge_map cdbte)); + static void find_control_dependence + PARAMS ((struct edge_list *el, int edge_index, int *pdom, + control_dependent_block_to_edge_map cdbte)); + static basic_block find_pdom + PARAMS ((int *pdom, basic_block block)); + static int inherently_necessary_register_1 + PARAMS ((rtx *current_rtx, void *data)); + static int inherently_necessary_register + PARAMS ((rtx current_rtx)); + static int find_inherently_necessary + PARAMS ((rtx current_rtx)); + static int propagate_necessity_through_operand + PARAMS ((rtx *current_rtx, void *data)); + static void note_inherently_necessary_set + PARAMS ((rtx, rtx, void *)); + + /* Unnecessary insns are indicated using insns' in_struct bit. */ + + /* Indicate INSN is dead-code; returns nothing. */ + #define KILL_INSN(INSN) INSN_DEAD_CODE_P(INSN) = 1 + /* Indicate INSN is necessary, i.e., not dead-code; returns nothing. */ + #define RESURRECT_INSN(INSN) INSN_DEAD_CODE_P(INSN) = 0 + /* Return nonzero if INSN is unnecessary. */ + #define UNNECESSARY_P(INSN) INSN_DEAD_CODE_P(INSN) + static void mark_all_insn_unnecessary + PARAMS ((void)); + /* Execute CODE with free variable INSN for all unnecessary insns in + an unspecified order, producing no output. */ + #define EXECUTE_IF_UNNECESSARY(INSN, CODE) \ + { \ + rtx INSN; \ + \ + for (INSN = get_insns (); INSN != NULL_RTX; INSN = NEXT_INSN (INSN)) \ + if (INSN_DEAD_CODE_P (INSN)) { \ + CODE; \ + } \ + } + /* Find the label beginning block BB. */ + static rtx find_block_label + PARAMS ((basic_block bb)); + /* Remove INSN, updating its basic block structure. */ + static void delete_insn_bb + PARAMS ((rtx insn)); + + /* Recording which blocks are control dependent on which edges. We + expect each block to be control dependent on very few edges so we + use a bitmap for each block recording its edges. An array holds + the bitmap. Its position 0 entry holds the bitmap for block + INVALID_BLOCK+1 so that all blocks, including the entry and exit + blocks can participate in the data structure. */ + + /* Create a control_dependent_block_to_edge_map, given the number + NUM_BASIC_BLOCKS of non-entry, non-exit basic blocks, e.g., + n_basic_blocks. This memory must be released using + control_dependent_block_to_edge_map_free (). */ + + static control_dependent_block_to_edge_map + control_dependent_block_to_edge_map_create (num_basic_blocks) + size_t num_basic_blocks; + { + int i; + control_dependent_block_to_edge_map c + = xmalloc (sizeof (control_dependent_block_to_edge_map_s)); + c->length = num_basic_blocks - (INVALID_BLOCK+1); + c->data = xmalloc ((size_t) c->length*sizeof (bitmap)); + for (i = 0; i < c->length; ++i) + c->data[i] = BITMAP_XMALLOC (); + + return c; + } + + /* Indicate block BB is control dependent on an edge with index + EDGE_INDEX in the mapping C of blocks to edges on which they are + control-dependent. */ + + static void + set_control_dependent_block_to_edge_map_bit (c, bb, edge_index) + control_dependent_block_to_edge_map c; + basic_block bb; + int edge_index; + { + if (bb->index - (INVALID_BLOCK+1) >= c->length) + abort (); + + bitmap_set_bit (c->data[bb->index - (INVALID_BLOCK+1)], + edge_index); + } + + /* Execute CODE for each edge (given number EDGE_NUMBER within the + CODE) for which the block containing INSN is control dependent, + returning no output. CDBTE is the mapping of blocks to edges on + which they are control-dependent. */ + + #define EXECUTE_IF_CONTROL_DEPENDENT(CDBTE, INSN, EDGE_NUMBER, CODE) \ + EXECUTE_IF_SET_IN_BITMAP \ + (CDBTE->data[BLOCK_NUM (INSN) - (INVALID_BLOCK+1)], 0, \ + EDGE_NUMBER, CODE) + + /* Destroy a control_dependent_block_to_edge_map C. */ + + static void + control_dependent_block_to_edge_map_free (c) + control_dependent_block_to_edge_map c; + { + int i; + for (i = 0; i < c->length; ++i) + BITMAP_XFREE (c->data[i]); + free ((PTR) c); + } + + /* Record all blocks' control dependences on all edges in the edge + list EL, ala Morgan, Section 3.6. The mapping PDOM of blocks to + their postdominators are used, and results are stored in CDBTE, + which should be empty. */ + + static void + find_all_control_dependences (el, pdom, cdbte) + struct edge_list *el; + int *pdom; + control_dependent_block_to_edge_map cdbte; + { + int i; + + for (i = 0; i < NUM_EDGES (el); ++i) + find_control_dependence (el, i, pdom, cdbte); + } + + /* Determine all blocks' control dependences on the given edge with + edge_list EL index EDGE_INDEX, ala Morgan, Section 3.6. The + mapping PDOM of blocks to their postdominators are used, and + results are stored in CDBTE, which is assumed to be initialized + with zeros in each (block b', edge) position. */ + + static void + find_control_dependence (el, edge_index, pdom, cdbte) + struct edge_list *el; + int edge_index; + int *pdom; + control_dependent_block_to_edge_map cdbte; + { + basic_block current_block; + basic_block ending_block; + + if (INDEX_EDGE_PRED_BB (el, edge_index) == EXIT_BLOCK_PTR) + abort (); + ending_block = + (INDEX_EDGE_PRED_BB (el, edge_index) == ENTRY_BLOCK_PTR) + ? BASIC_BLOCK (0) + : find_pdom (pdom, INDEX_EDGE_PRED_BB (el, edge_index)); + + for (current_block = INDEX_EDGE_SUCC_BB (el, edge_index); + current_block != ending_block && current_block != EXIT_BLOCK_PTR; + current_block = find_pdom (pdom, current_block)) + { + set_control_dependent_block_to_edge_map_bit (cdbte, + current_block, + edge_index); + } + } + + /* Find the immediate postdominator PDOM of the specified basic block + BLOCK. This function is necessary because some blocks have + negative numbers. */ + + static basic_block + find_pdom (pdom, block) + int *pdom; + basic_block block; + { + if (!block) + abort (); + if (block->index == INVALID_BLOCK) + abort (); + + if (block == ENTRY_BLOCK_PTR) + return BASIC_BLOCK (0); + else if (block == EXIT_BLOCK_PTR || pdom[block->index] == EXIT_BLOCK) + return EXIT_BLOCK_PTR; + else + return BASIC_BLOCK (pdom[block->index]); + } + + /* Determine if the given CURRENT_RTX uses a hard register not + converted to SSA. Returns nonzero only if it uses such a hard + register. DATA is not used. + + The program counter (PC) is not considered inherently necessary + since code should be position-independent and thus not depend on + particular PC values. */ + + static int + inherently_necessary_register_1 (current_rtx, data) + rtx *current_rtx; + void *data ATTRIBUTE_UNUSED; + { + rtx x = *current_rtx; + + if (x == NULL_RTX) + return 0; + switch (GET_CODE (x)) + { + case CLOBBER: + /* Do not traverse the rest of the clobber. */ + return -1; + break; + case PC: + return 0; + break; + case REG: + if (CONVERT_REGISTER_TO_SSA_P (REGNO (x)) || x == pc_rtx) + return 0; + else + return !0; + break; + default: + return 0; + break; + } + } + + /* Return nonzero if the insn CURRENT_RTX is inherently necessary. */ + + static int + inherently_necessary_register (current_rtx) + rtx current_rtx; + { + return for_each_rtx (¤t_rtx, + &inherently_necessary_register_1, NULL); + } + + + /* Called via note_stores for each store in an insn. Note whether + or not a particular store is inherently necessary. Store a + nonzero value in inherently_necessary_p if such a store is found. */ + + static void + note_inherently_necessary_set (dest, set, data) + rtx set ATTRIBUTE_UNUSED; + rtx dest; + void *data; + { + int *inherently_necessary_set_p = (int *) data; + + while (GET_CODE (dest) == SUBREG + || GET_CODE (dest) == STRICT_LOW_PART + || GET_CODE (dest) == ZERO_EXTRACT + || GET_CODE (dest) == SIGN_EXTRACT) + dest = XEXP (dest, 0); + + if (GET_CODE (dest) == MEM + || GET_CODE (dest) == UNSPEC + || GET_CODE (dest) == UNSPEC_VOLATILE) + *inherently_necessary_set_p = 1; + } + + /* Mark X as inherently necessary if appropriate. For example, + function calls and storing values into memory are inherently + necessary. This function is to be used with for_each_rtx (). + Return nonzero iff inherently necessary. */ + + static int + find_inherently_necessary (x) + rtx x; + { + if (x == NULL_RTX) + return 0; + else if (inherently_necessary_register (x)) + return !0; + else + switch (GET_CODE (x)) + { + case CALL_INSN: + case BARRIER: + case PREFETCH: + return !0; + case CODE_LABEL: + case NOTE: + return 0; + case JUMP_INSN: + return JUMP_TABLE_DATA_P (x) || computed_jump_p (x) != 0; + case INSN: + { + int inherently_necessary_set = 0; + note_stores (PATTERN (x), + note_inherently_necessary_set, + &inherently_necessary_set); + + /* If we found an inherently necessary set or an asm + instruction, then we consider this insn inherently + necessary. */ + return (inherently_necessary_set + || GET_CODE (PATTERN (x)) == ASM_INPUT + || asm_noperands (PATTERN (x)) >= 0); + } + default: + /* Found an impossible insn type. */ + abort (); + break; + } + } + + /* Propagate necessity through REG and SUBREG operands of CURRENT_RTX. + This function is called with for_each_rtx () on necessary + instructions. The DATA must be a varray of unprocessed + instructions. */ + + static int + propagate_necessity_through_operand (current_rtx, data) + rtx *current_rtx; + void *data; + { + rtx x = *current_rtx; + varray_type *unprocessed_instructions = (varray_type *) data; + + if (x == NULL_RTX) + return 0; + switch ( GET_CODE (x)) + { + case REG: + if (CONVERT_REGISTER_TO_SSA_P (REGNO (x))) + { + rtx insn = VARRAY_RTX (ssa_definition, REGNO (x)); + if (insn != NULL_RTX && UNNECESSARY_P (insn)) + { + RESURRECT_INSN (insn); + VARRAY_PUSH_RTX (*unprocessed_instructions, insn); + } + } + return 0; + + default: + return 0; + } + } + + /* Indicate all insns initially assumed to be unnecessary. */ + + static void + mark_all_insn_unnecessary () + { + rtx insn; + for (insn = get_insns (); insn != NULL_RTX; insn = NEXT_INSN (insn)) + KILL_INSN (insn); + } + + /* Find the label beginning block BB, adding one if necessary. */ + + static rtx + find_block_label (bb) + basic_block bb; + { + rtx insn = bb->head; + if (LABEL_P (insn)) + return insn; + else + { + rtx new_label = emit_label_before (gen_label_rtx (), insn); + if (insn == bb->head) + bb->head = new_label; + return new_label; + } + } + + /* Remove INSN, updating its basic block structure. */ + + static void + delete_insn_bb (insn) + rtx insn; + { + if (!insn) + abort (); + + /* Do not actually delete anything that is not an INSN. + + We can get here because we only consider INSNs as + potentially necessary. We leave it to later passes + to remove unnecessary notes, unused labels, etc. */ + if (! INSN_P (insn)) + return; + + delete_insn (insn); + } + + /* Perform the dead-code elimination. */ + + void + ssa_eliminate_dead_code () + { + int i; + rtx insn; + /* Necessary instructions with operands to explore. */ + varray_type unprocessed_instructions; + /* Map element (b,e) is nonzero if the block is control dependent on + edge. "cdbte" abbreviates control dependent block to edge. */ + control_dependent_block_to_edge_map cdbte; + /* Element I is the immediate postdominator of block I. */ + int *pdom; + struct edge_list *el; + + int max_insn_uid = get_max_uid (); + + /* Initialize the data structures. */ + mark_all_insn_unnecessary (); + VARRAY_RTX_INIT (unprocessed_instructions, 64, + "unprocessed instructions"); + cdbte = control_dependent_block_to_edge_map_create (n_basic_blocks); + + /* Prepare for use of BLOCK_NUM (). */ + connect_infinite_loops_to_exit (); + /* Be careful not to clear the added edges. */ + compute_bb_for_insn (max_insn_uid); + + /* Compute control dependence. */ + pdom = (int *) xmalloc (n_basic_blocks * sizeof (int)); + for (i = 0; i < n_basic_blocks; ++i) + pdom[i] = INVALID_BLOCK; + calculate_dominance_info (pdom, NULL, CDI_POST_DOMINATORS); + /* Assume there is a path from each node to the exit block. */ + for (i = 0; i < n_basic_blocks; ++i) + if (pdom[i] == INVALID_BLOCK) + pdom[i] = EXIT_BLOCK; + el = create_edge_list (); + find_all_control_dependences (el, pdom, cdbte); + + /* Find inherently necessary instructions. */ + for (insn = get_insns (); insn != NULL_RTX; insn = NEXT_INSN (insn)) + if (find_inherently_necessary (insn)) + { + RESURRECT_INSN (insn); + VARRAY_PUSH_RTX (unprocessed_instructions, insn); + } + + /* Propagate necessity using the operands of necessary instructions. */ + while (VARRAY_ACTIVE_SIZE (unprocessed_instructions) > 0) + { + rtx current_instruction; + int edge_number; + + current_instruction = VARRAY_TOP_RTX (unprocessed_instructions); + VARRAY_POP (unprocessed_instructions); + + /* Make corresponding control dependent edges necessary. */ + /* Assume the only JUMP_INSN is the block's last insn. It appears + that the last instruction of the program need not be a + JUMP_INSN. */ + + if (INSN_P (current_instruction) + && !JUMP_TABLE_DATA_P (current_instruction)) + { + /* Notes and labels contain no interesting operands. */ + EXECUTE_IF_CONTROL_DEPENDENT + (cdbte, current_instruction, edge_number, + { + rtx jump_insn = (INDEX_EDGE_PRED_BB (el, edge_number))->end; + if (GET_CODE (jump_insn) == JUMP_INSN + && UNNECESSARY_P (jump_insn)) + { + RESURRECT_INSN (jump_insn); + VARRAY_PUSH_RTX (unprocessed_instructions, jump_insn); + } + }); + + /* Propagate through the operands. */ + for_each_rtx (¤t_instruction, + &propagate_necessity_through_operand, + (PTR) &unprocessed_instructions); + + /* PHI nodes are somewhat special in that each PHI alternative + has data and control dependencies. The data dependencies + are handled via propagate_necessity_through_operand. We + handle the control dependency here. + + We consider the control dependent edges leading to the + predecessor block associated with each PHI alternative + as necessary. */ + if (PHI_NODE_P (current_instruction)) + { + rtvec phi_vec = XVEC (SET_SRC (PATTERN (current_instruction)), 0); + int num_elem = GET_NUM_ELEM (phi_vec); + int v; + + for (v = num_elem - 2; v >= 0; v -= 2) + { + basic_block bb; + + bb = BASIC_BLOCK (INTVAL (RTVEC_ELT (phi_vec, v + 1))); + EXECUTE_IF_CONTROL_DEPENDENT + (cdbte, bb->end, edge_number, + { + rtx jump_insn; + + jump_insn = (INDEX_EDGE_PRED_BB (el, edge_number))->end; + if (((GET_CODE (jump_insn) == JUMP_INSN)) + && UNNECESSARY_P (jump_insn)) + { + RESURRECT_INSN (jump_insn); + VARRAY_PUSH_RTX (unprocessed_instructions, jump_insn); + } + }); + + } + } + } + } + + /* Remove the unnecessary instructions. */ + EXECUTE_IF_UNNECESSARY (insn, + { + if (any_condjump_p (insn)) + { + basic_block bb = BLOCK_FOR_INSN (insn); + basic_block pdom_bb = find_pdom (pdom, bb); + rtx lbl; + edge e; + + /* Egad. The immediate post dominator is the exit block. We + would like to optimize this conditional jump to jump directly + to the exit block. That can be difficult as we may not have + a suitable CODE_LABEL that allows us to fall unmolested into + the exit block. + + So, we just delete the conditional branch by turning it into + a deleted note. That is safe, but just not as optimal as + it could be. */ + if (pdom_bb == EXIT_BLOCK_PTR) + { + /* Since we're going to just delete the branch, we need + look at all the edges and remove all those which are not + a fallthru edge. */ + e = bb->succ; + while (e) + { + edge temp = e; + + e = e->succ_next; + if ((temp->flags & EDGE_FALLTHRU) == 0) + { + /* We've found a non-fallthru edge, find any PHI nodes + at the target and clean them up. */ + if (temp->dest != EXIT_BLOCK_PTR) + { + rtx insn + = first_insn_after_basic_block_note (temp->dest); + + while (PHI_NODE_P (insn)) + { + remove_phi_alternative (PATTERN (insn), temp->src); + insn = NEXT_INSN (insn); + } + } + + remove_edge (temp); + } + } + + /* Now "delete" the conditional jump. */ + PUT_CODE (insn, NOTE); + NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED; + continue; + } + + /* We've found a conditional branch that is unnecessary. + + First, remove all outgoing edges from this block, updating + PHI nodes as appropriate. */ + e = bb->succ; + while (e) + { + edge temp = e; + + e = e->succ_next; + + if (temp->flags & EDGE_ABNORMAL) + continue; + + /* We found an edge that is not executable. First simplify + the PHI nodes in the target block. */ + if (temp->dest != EXIT_BLOCK_PTR) + { + rtx insn = first_insn_after_basic_block_note (temp->dest); + + while (PHI_NODE_P (insn)) + { + remove_phi_alternative (PATTERN (insn), temp->src); + insn = NEXT_INSN (insn); + } + } + + remove_edge (temp); + } + + /* Create an edge from this block to the post dominator. + What about the PHI nodes at the target? */ + make_edge (bb, pdom_bb, 0); + + /* Third, transform this insn into an unconditional + jump to the label for the immediate postdominator. */ + lbl = find_block_label (pdom_bb); + SET_SRC (PATTERN (insn)) = gen_rtx_LABEL_REF (VOIDmode, lbl); + INSN_CODE (insn) = -1; + JUMP_LABEL (insn) = lbl; + LABEL_NUSES (lbl)++; + + /* A barrier must follow any unconditional jump. Barriers + are not in basic blocks so this must occur after + deleting the conditional jump. */ + emit_barrier_after (insn); + } + else if (!JUMP_P (insn)) + delete_insn_bb (insn); + }); + + /* Remove fake edges from the CFG. */ + remove_fake_edges (); + + /* Find any blocks with no successors and ensure they are followed + by a BARRIER. delete_insn has the nasty habit of deleting barriers + when deleting insns. */ + for (i = 0; i < n_basic_blocks; i++) + { + basic_block bb = BASIC_BLOCK (i); + + if (bb->succ == NULL) + { + rtx next = NEXT_INSN (bb->end); + + if (!next || GET_CODE (next) != BARRIER) + emit_barrier_after (bb->end); + } + } + /* Release allocated memory. */ + for (insn = get_insns (); insn != NULL_RTX; insn = NEXT_INSN (insn)) + RESURRECT_INSN (insn); + if (VARRAY_ACTIVE_SIZE (unprocessed_instructions) != 0) + abort (); + VARRAY_FREE (unprocessed_instructions); + control_dependent_block_to_edge_map_free (cdbte); + free ((PTR) pdom); + free_edge_list (el); + } diff -Nrc3pad gcc-3.0.4/gcc/ssa.c gcc-3.1/gcc/ssa.c *** gcc-3.0.4/gcc/ssa.c Sun Nov 19 13:15:50 2000 --- gcc-3.1/gcc/ssa.c Tue Jan 22 14:33:33 2002 *************** *** 1,20 **** /* Static Single Assignment conversion routines for the GNU compiler. ! Copyright (C) 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it ! under the terms of the GNU General Public License as published by the ! Free Software Foundation; either version 2, or (at your option) any ! later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ! ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 1,20 ---- /* Static Single Assignment conversion routines for the GNU compiler. ! Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ *************** Software Foundation, 59 Temple Place - S *** 33,38 **** --- 33,39 ---- #include "system.h" #include "rtl.h" + #include "expr.h" #include "varray.h" #include "partition.h" #include "sbitmap.h" *************** int in_ssa_form = 0; *** 91,99 **** /* Element I is the single instruction that sets register I. */ varray_type ssa_definition; - /* Element I is an INSN_LIST of instructions that use register I. */ - varray_type ssa_uses; - /* Element I-PSEUDO is the normal register that originated the ssa register in question. */ varray_type ssa_rename_from; --- 92,97 ---- *************** struct rename_context; *** 164,177 **** static inline rtx * phi_alternative PARAMS ((rtx, int)); - static rtx first_insn_after_basic_block_note - PARAMS ((basic_block)); - static int remove_phi_alternative - PARAMS ((rtx, int)); static void compute_dominance_frontiers_1 PARAMS ((sbitmap *frontiers, int *idom, int bb, sbitmap done)); - static void compute_dominance_frontiers - PARAMS ((sbitmap *frontiers, int *idom)); static void find_evaluations_1 PARAMS ((rtx dest, rtx set, void *data)); static void find_evaluations --- 162,169 ---- *************** phi_alternative (set, c) *** 429,443 **** block C. Return non-zero on success, or zero if no alternative is found for C. */ ! static int ! remove_phi_alternative (set, c) rtx set; ! int c; { rtvec phi_vec = XVEC (SET_SRC (set), 0); int num_elem = GET_NUM_ELEM (phi_vec); ! int v; for (v = num_elem - 2; v >= 0; v -= 2) if (INTVAL (RTVEC_ELT (phi_vec, v + 1)) == c) { --- 421,436 ---- block C. Return non-zero on success, or zero if no alternative is found for C. */ ! int ! remove_phi_alternative (set, block) rtx set; ! basic_block block; { rtvec phi_vec = XVEC (SET_SRC (set), 0); int num_elem = GET_NUM_ELEM (phi_vec); ! int v, c; + c = block->index; for (v = num_elem - 2; v >= 0; v -= 2) if (INTVAL (RTVEC_ELT (phi_vec, v + 1)) == c) { *************** compute_dominance_frontiers_1 (frontiers *** 561,567 **** } } ! static void compute_dominance_frontiers (frontiers, idom) sbitmap *frontiers; int *idom; --- 554,560 ---- } } ! void compute_dominance_frontiers (frontiers, idom) sbitmap *frontiers; int *idom; *************** compute_iterated_dominance_frontiers (id *** 632,665 **** if (rtl_dump_file) { ! fprintf(rtl_dump_file, ! "Iterated dominance frontier: %d passes on %d regs.\n", ! passes, nregs); } } - /* Return the INSN immediately following the NOTE_INSN_BASIC_BLOCK - note associated with the BLOCK. */ - - static rtx - first_insn_after_basic_block_note (block) - basic_block block; - { - rtx insn; - - /* Get the first instruction in the block. */ - insn = block->head; - - if (insn == NULL_RTX) - return NULL_RTX; - if (GET_CODE (insn) == CODE_LABEL) - insn = NEXT_INSN (insn); - if (!NOTE_INSN_BASIC_BLOCK_P (insn)) - abort (); - - return NEXT_INSN (insn); - } - /* Insert the phi nodes. */ static void --- 625,636 ---- if (rtl_dump_file) { ! fprintf (rtl_dump_file, ! "Iterated dominance frontier: %d passes on %d regs.\n", ! passes, nregs); } } /* Insert the phi nodes. */ static void *************** create_delayed_rename (c, reg_loc) *** 772,778 **** if (GET_CODE (*reg_loc) != REG || !CONVERT_REGISTER_TO_SSA_P (REGNO (*reg_loc))) ! abort(); r->reg_loc = reg_loc; r->old_reg = *reg_loc; --- 743,749 ---- if (GET_CODE (*reg_loc) != REG || !CONVERT_REGISTER_TO_SSA_P (REGNO (*reg_loc))) ! abort (); r->reg_loc = reg_loc; r->old_reg = *reg_loc; *************** apply_delayed_renames (c) *** 808,821 **** /* Failure here means that someone has a PARALLEL that sets a register twice (bad!). */ if (ssa_rename_to_lookup (r->old_reg) != r->prev_reg) ! abort(); /* Failure here means we have changed REG_LOC before applying the rename. */ /* For the first set we come across, reuse the original regno. */ if (r->prev_reg == NULL_RTX && !HARD_REGISTER_P (r->old_reg)) { r->new_reg = r->old_reg; ! /* We want to restore RENAME_NO_RTX rather than NULL_RTX. */ r->prev_reg = RENAME_NO_RTX; } else --- 779,792 ---- /* Failure here means that someone has a PARALLEL that sets a register twice (bad!). */ if (ssa_rename_to_lookup (r->old_reg) != r->prev_reg) ! abort (); /* Failure here means we have changed REG_LOC before applying the rename. */ /* For the first set we come across, reuse the original regno. */ if (r->prev_reg == NULL_RTX && !HARD_REGISTER_P (r->old_reg)) { r->new_reg = r->old_reg; ! /* We want to restore RENAME_NO_RTX rather than NULL_RTX. */ r->prev_reg = RENAME_NO_RTX; } else *************** apply_delayed_renames (c) *** 827,833 **** { int new_limit = new_regno * 5 / 4; VARRAY_GROW (ssa_definition, new_limit); - VARRAY_GROW (ssa_uses, new_limit); } VARRAY_RTX (ssa_definition, new_regno) = r->set_insn; --- 798,803 ---- *************** rename_insn_1 (ptr, data) *** 863,868 **** --- 833,853 ---- rtx *destp = &SET_DEST (x); rtx dest = SET_DEST (x); + /* An assignment to a paradoxical SUBREG does not read from + the destination operand, and thus does not need to be + wrapped into a SEQUENCE when translating into SSA form. + We merely strip off the SUBREG and proceed normally for + this case. */ + if (GET_CODE (dest) == SUBREG + && (GET_MODE_SIZE (GET_MODE (dest)) + > GET_MODE_SIZE (GET_MODE (SUBREG_REG (dest)))) + && GET_CODE (SUBREG_REG (dest)) == REG + && CONVERT_REGISTER_TO_SSA_P (REGNO (SUBREG_REG (dest)))) + { + destp = &XEXP (dest, 0); + dest = XEXP (dest, 0); + } + /* Some SETs also use the REG specified in their LHS. These can be detected by the presence of STRICT_LOW_PART, SUBREG, SIGN_EXTRACT, and ZERO_EXTRACT *************** rename_insn_1 (ptr, data) *** 872,882 **** (sequence [(set (reg foo_1) (reg foo)) (set (subreg (reg foo_1)) ...)]) ! FIXME: Much of the time this is too much. For many libcalls, ! paradoxical SUBREGs, etc., the input register is dead. We should ! recognise this in rename_block or here and not make a false dependency. */ - if (GET_CODE (dest) == STRICT_LOW_PART || GET_CODE (dest) == SUBREG || GET_CODE (dest) == SIGN_EXTRACT --- 857,868 ---- (sequence [(set (reg foo_1) (reg foo)) (set (subreg (reg foo_1)) ...)]) ! FIXME: Much of the time this is too much. For some constructs ! we know that the output register is strictly an output ! (paradoxical SUBREGs and some libcalls for example). ! ! For those cases we are better off not making the false dependency. */ if (GET_CODE (dest) == STRICT_LOW_PART || GET_CODE (dest) == SUBREG || GET_CODE (dest) == SIGN_EXTRACT *************** rename_insn_1 (ptr, data) *** 907,914 **** context->new_renames = saved_new_renames; } } ! else if (GET_CODE (dest) == REG && ! CONVERT_REGISTER_TO_SSA_P (REGNO (dest))) { /* We found a genuine set of an interesting register. Tag it so that we can create a new name for it after we finish --- 893,900 ---- context->new_renames = saved_new_renames; } } ! else if (GET_CODE (dest) == REG ! && CONVERT_REGISTER_TO_SSA_P (REGNO (dest))) { /* We found a genuine set of an interesting register. Tag it so that we can create a new name for it after we finish *************** rename_block (bb, idom) *** 1069,1089 **** consider those edges. */ if (reg == NULL || reg == RENAME_NO_RTX) { ! if (! remove_phi_alternative (phi, bb)) abort (); } else { /* When we created the PHI nodes, we did not know what mode ! the register should be. Now that we've found an original, ! we can fill that in. */ if (GET_MODE (SET_DEST (phi)) == VOIDmode) PUT_MODE (SET_DEST (phi), GET_MODE (reg)); else if (GET_MODE (SET_DEST (phi)) != GET_MODE (reg)) ! abort(); *phi_alternative (phi, bb) = reg; - /* ??? Mark for a new ssa_uses entry. */ } insn = NEXT_INSN (insn); --- 1055,1074 ---- consider those edges. */ if (reg == NULL || reg == RENAME_NO_RTX) { ! if (! remove_phi_alternative (phi, b)) abort (); } else { /* When we created the PHI nodes, we did not know what mode ! the register should be. Now that we've found an original, ! we can fill that in. */ if (GET_MODE (SET_DEST (phi)) == VOIDmode) PUT_MODE (SET_DEST (phi), GET_MODE (reg)); else if (GET_MODE (SET_DEST (phi)) != GET_MODE (reg)) ! abort (); *phi_alternative (phi, bb) = reg; } insn = NEXT_INSN (insn); *************** rename_block (bb, idom) *** 1106,1112 **** rtx old_reg = *set_data->reg_loc; if (*set_data->reg_loc != set_data->old_reg) ! abort(); *set_data->reg_loc = set_data->new_reg; ssa_rename_to_insert (old_reg, set_data->prev_reg); --- 1091,1097 ---- rtx old_reg = *set_data->reg_loc; if (*set_data->reg_loc != set_data->old_reg) ! abort (); *set_data->reg_loc = set_data->new_reg; ssa_rename_to_insert (old_reg, set_data->prev_reg); *************** rename_registers (nregs, idom) *** 1123,1129 **** int *idom; { VARRAY_RTX_INIT (ssa_definition, nregs * 3, "ssa_definition"); - VARRAY_RTX_INIT (ssa_uses, nregs * 3, "ssa_uses"); ssa_rename_from_initialize (); ssa_rename_to_pseudo = (rtx *) alloca (nregs * sizeof(rtx)); --- 1108,1113 ---- *************** convert_to_ssa () *** 1160,1170 **** if (in_ssa_form) abort (); ! /* Need global_live_at_{start,end} up to date. */ ! life_analysis (get_insns (), NULL, PROP_KILL_DEAD_CODE | PROP_SCAN_DEAD_CODE); idom = (int *) alloca (n_basic_blocks * sizeof (int)); ! memset ((void *)idom, -1, (size_t)n_basic_blocks * sizeof (int)); calculate_dominance_info (idom, NULL, CDI_DOMINATORS); if (rtl_dump_file) --- 1144,1155 ---- if (in_ssa_form) abort (); ! /* Need global_live_at_{start,end} up to date. Do not remove any ! dead code. We'll let the SSA optimizers do that. */ ! life_analysis (get_insns (), NULL, 0); idom = (int *) alloca (n_basic_blocks * sizeof (int)); ! memset ((void *) idom, -1, (size_t) n_basic_blocks * sizeof (int)); calculate_dominance_info (idom, NULL, CDI_DOMINATORS); if (rtl_dump_file) *************** convert_to_ssa () *** 1190,1196 **** /* Compute register evaluations. */ ! ssa_max_reg_num = max_reg_num(); nregs = ssa_max_reg_num; evals = sbitmap_vector_alloc (nregs, n_basic_blocks); find_evaluations (evals, nregs); --- 1175,1181 ---- /* Compute register evaluations. */ ! ssa_max_reg_num = max_reg_num (); nregs = ssa_max_reg_num; evals = sbitmap_vector_alloc (nregs, n_basic_blocks); find_evaluations (evals, nregs); *************** ephi_add_node (reg, nodes, n_nodes) *** 1246,1252 **** /* Part one of the topological sort. This is a forward (downward) search through the graph collecting a stack of nodes to process. Assuming no cycles, the nodes at top of the stack when we are finished will have ! no other dependancies. */ static int * ephi_forward (t, visited, succ, tstack) --- 1231,1237 ---- /* Part one of the topological sort. This is a forward (downward) search through the graph collecting a stack of nodes to process. Assuming no cycles, the nodes at top of the stack when we are finished will have ! no other dependencies. */ static int * ephi_forward (t, visited, succ, tstack) *************** eliminate_phi (e, reg_partition) *** 1381,1387 **** if (n_nodes == 0) return; ! /* Build the auxilliary graph R(B). The nodes of the graph are the members of the register partition present in Phi(B). There is an edge from FIND(T0)->FIND(T1) for --- 1366,1372 ---- if (n_nodes == 0) return; ! /* Build the auxiliary graph R(B). The nodes of the graph are the members of the register partition present in Phi(B). There is an edge from FIND(T0)->FIND(T1) for *************** eliminate_phi (e, reg_partition) *** 1410,1416 **** reg = *preg; if (GET_CODE (reg) != REG || GET_CODE (tgt) != REG) ! abort(); reg = regno_reg_rtx[partition_find (reg_partition, REGNO (reg))]; tgt = regno_reg_rtx[partition_find (reg_partition, REGNO (tgt))]; --- 1395,1401 ---- reg = *preg; if (GET_CODE (reg) != REG || GET_CODE (tgt) != REG) ! abort (); reg = regno_reg_rtx[partition_find (reg_partition, REGNO (reg))]; tgt = regno_reg_rtx[partition_find (reg_partition, REGNO (tgt))]; *************** make_regs_equivalent_over_bad_edges (bb, *** 1513,1520 **** /* Scan incoming abnormal critical edges. */ for (e = b->pred; e; e = e->pred_next) ! if ((e->flags & (EDGE_ABNORMAL | EDGE_CRITICAL)) ! == (EDGE_ABNORMAL | EDGE_CRITICAL)) { rtx *alt = phi_alternative (set, e->src->index); int alt_regno; --- 1498,1504 ---- /* Scan incoming abnormal critical edges. */ for (e = b->pred; e; e = e->pred_next) ! if ((e->flags & EDGE_ABNORMAL) && EDGE_CRITICAL_P (e)) { rtx *alt = phi_alternative (set, e->src->index); int alt_regno; *************** make_equivalent_phi_alternatives_equival *** 1617,1630 **** abort (); /* If the alternatives aren't already in the same ! class ... */ if (partition_find (reg_partition, REGNO (*alt)) != partition_find (reg_partition, REGNO (*alt2))) { /* ... make them so. */ if (conflicting_hard_regs_p (REGNO (*alt), REGNO (*alt2))) /* It is illegal to unify a hard register with ! a different register. */ abort (); partition_union (reg_partition, --- 1601,1614 ---- abort (); /* If the alternatives aren't already in the same ! class ... */ if (partition_find (reg_partition, REGNO (*alt)) != partition_find (reg_partition, REGNO (*alt2))) { /* ... make them so. */ if (conflicting_hard_regs_p (REGNO (*alt), REGNO (*alt2))) /* It is illegal to unify a hard register with ! a different register. */ abort (); partition_union (reg_partition, *************** coalesce_if_unconflicting (p, conflicts, *** 1713,1719 **** { int reg; ! /* Work only on SSA registers. */ if (!CONVERT_REGISTER_TO_SSA_P (reg1) || !CONVERT_REGISTER_TO_SSA_P (reg2)) return 0; --- 1697,1703 ---- { int reg; ! /* Work only on SSA registers. */ if (!CONVERT_REGISTER_TO_SSA_P (reg1) || !CONVERT_REGISTER_TO_SSA_P (reg2)) return 0; *************** compute_coalesced_reg_partition () *** 1866,1871 **** --- 1850,1857 ---- { int bb; int changed = 0; + regset_head phi_set_head; + regset phi_set = &phi_set_head; partition p = partition_new (ssa_definition->num_elements); *************** compute_coalesced_reg_partition () *** 1877,1896 **** for (bb = n_basic_blocks; --bb >= 0; ) make_regs_equivalent_over_bad_edges (bb, p); do { - regset_head phi_set; conflict_graph conflicts; changed = 0; /* Build the set of registers involved in phi nodes, either as arguments to the phi function or as the target of a set. */ ! INITIALIZE_REG_SET (phi_set); ! mark_phi_and_copy_regs (&phi_set); /* Compute conflicts. */ ! conflicts = conflict_graph_compute (&phi_set, p); /* FIXME: Better would be to process most frequently executed blocks first, so that most frequently executed copies would --- 1863,1883 ---- for (bb = n_basic_blocks; --bb >= 0; ) make_regs_equivalent_over_bad_edges (bb, p); + INIT_REG_SET (phi_set); + do { conflict_graph conflicts; changed = 0; /* Build the set of registers involved in phi nodes, either as arguments to the phi function or as the target of a set. */ ! CLEAR_REG_SET (phi_set); ! mark_phi_and_copy_regs (phi_set); /* Compute conflicts. */ ! conflicts = conflict_graph_compute (phi_set, p); /* FIXME: Better would be to process most frequently executed blocks first, so that most frequently executed copies would *************** compute_coalesced_reg_partition () *** 1908,1913 **** --- 1895,1902 ---- } while (changed > 0); + FREE_REG_SET (phi_set); + return p; } *************** mark_phi_and_copy_regs (phi_set) *** 1955,1961 **** rtx pattern; rtx src; ! if (insn == NULL) continue; pattern = PATTERN (insn); /* Sometimes we get PARALLEL insns. These aren't phi nodes or --- 1944,1952 ---- rtx pattern; rtx src; ! if (insn == NULL ! || (GET_CODE (insn) == NOTE ! && NOTE_LINE_NUMBER (insn) == NOTE_INSN_DELETED)) continue; pattern = PATTERN (insn); /* Sometimes we get PARALLEL insns. These aren't phi nodes or *************** rename_equivalent_regs (reg_partition) *** 2131,2141 **** int i; if (slen <= 1) ! abort(); PATTERN (insn) = XVECEXP (s, 0, slen-1); for (i = 0; i < slen - 1; i++) ! emit_block_insn_before (XVECEXP (s, 0, i), insn, b); } } --- 2122,2132 ---- int i; if (slen <= 1) ! abort (); PATTERN (insn) = XVECEXP (s, 0, slen-1); for (i = 0; i < slen - 1; i++) ! emit_insn_before (XVECEXP (s, 0, i), insn); } } *************** rename_equivalent_regs (reg_partition) *** 2148,2162 **** /* The main entry point for moving from SSA. */ void ! convert_from_ssa() { int bb; partition reg_partition; rtx insns = get_insns (); ! /* Need global_live_at_{start,end} up to date. */ ! life_analysis (insns, NULL, ! PROP_KILL_DEAD_CODE | PROP_SCAN_DEAD_CODE | PROP_DEATH_NOTES); /* Figure out which regs in copies and phi nodes don't conflict and therefore can be coalesced. */ --- 2139,2156 ---- /* The main entry point for moving from SSA. */ void ! convert_from_ssa () { int bb; partition reg_partition; rtx insns = get_insns (); ! /* Need global_live_at_{start,end} up to date. There should not be ! any significant dead code at this point, except perhaps dead ! stores. So do not take the time to perform dead code elimination. ! ! Register coalescing needs death notes, so generate them. */ ! life_analysis (insns, NULL, PROP_DEATH_NOTES); /* Figure out which regs in copies and phi nodes don't conflict and therefore can be coalesced. */ *************** convert_from_ssa() *** 2221,2227 **** /* Deallocate the data structures. */ VARRAY_FREE (ssa_definition); - VARRAY_FREE (ssa_uses); ssa_rename_from_free (); } --- 2215,2220 ---- diff -Nrc3pad gcc-3.0.4/gcc/ssa.h gcc-3.1/gcc/ssa.h *** gcc-3.0.4/gcc/ssa.h Wed Aug 2 04:21:27 2000 --- gcc-3.1/gcc/ssa.h Wed Aug 22 14:35:46 2001 *************** *** 1,23 **** /* Static Single Assignment (SSA) definitions for GNU C-Compiler ! Copyright (C) 2000 Free Software Foundation, Inc. Written by Jeffrey D. Oldham . ! 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. */ /* Main SSA routines. */ --- 1,23 ---- /* Static Single Assignment (SSA) definitions for GNU C-Compiler ! Copyright (C) 2000, 2001 Free Software Foundation, Inc. Written by Jeffrey D. Oldham . ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* Main SSA routines. */ *************** typedef int (*successor_phi_fn) *** 27,36 **** extern int for_each_successor_phi PARAMS ((basic_block bb, successor_phi_fn, void *)); /* Optimizations. */ ! /* In dce.c */ ! extern void eliminate_dead_code PARAMS ((void)); /* SSA definitions and uses. */ /* This flag is set when the CFG is in SSA form. */ --- 27,43 ---- extern int for_each_successor_phi PARAMS ((basic_block bb, successor_phi_fn, void *)); + void compute_dominance_frontiers PARAMS ((sbitmap *frontiers, int *idom)); + extern int remove_phi_alternative PARAMS ((rtx, basic_block)); + /* Optimizations. */ ! /* In ssa-dce.c */ ! extern void ssa_eliminate_dead_code PARAMS ((void)); ! ! /* In ssa-ccp.c */ ! extern void ssa_const_prop PARAMS ((void)); ! /* SSA definitions and uses. */ /* This flag is set when the CFG is in SSA form. */ diff -Nrc3pad gcc-3.0.4/gcc/stmt.c gcc-3.1/gcc/stmt.c *** gcc-3.0.4/gcc/stmt.c Sun Feb 3 05:16:30 2002 --- gcc-3.1/gcc/stmt.c Wed Apr 17 01:43:57 2002 *************** *** 1,23 **** /* Expands front end tree to back end RTL for GNU C-Compiler Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, ! 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* This file handles the generation of rtl code from tree structure above the level of expressions, using subroutines in exp*.c and emit-rtl.c. --- 1,23 ---- /* Expands front end tree to back end RTL for GNU C-Compiler Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, ! 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* This file handles the generation of rtl code from tree structure above the level of expressions, using subroutines in exp*.c and emit-rtl.c. *************** Boston, MA 02111-1307, USA. */ *** 44,49 **** --- 44,50 ---- #include "function.h" #include "insn-config.h" #include "expr.h" + #include "libfuncs.h" #include "hard-reg-set.h" #include "obstack.h" #include "loop.h" *************** static int cost_table_initialized; *** 109,115 **** /* Special care is needed because we allow -1, but TREE_INT_CST_LOW is unsigned. */ ! #define COST_TABLE(I) cost_table_[(unsigned HOST_WIDE_INT)((I) + 1)] /* Stack of control and binding constructs we are currently inside. --- 110,116 ---- /* Special care is needed because we allow -1, but TREE_INT_CST_LOW is unsigned. */ ! #define COST_TABLE(I) cost_table_[(unsigned HOST_WIDE_INT) ((I) + 1)] /* Stack of control and binding constructs we are currently inside. *************** static int using_eh_for_cleanups_p = 0; *** 397,403 **** static int n_occurrences PARAMS ((int, const char *)); static bool parse_input_constraint PARAMS ((const char **, int, int, int, ! int, tree, bool *, bool *)); static void expand_goto_internal PARAMS ((tree, rtx, rtx)); static int expand_fixup PARAMS ((tree, rtx, rtx)); static rtx expand_nl_handler_label PARAMS ((rtx, rtx)); --- 398,405 ---- static int n_occurrences PARAMS ((int, const char *)); static bool parse_input_constraint PARAMS ((const char **, int, int, int, ! int, const char * const *, ! bool *, bool *)); static void expand_goto_internal PARAMS ((tree, rtx, rtx)); static int expand_fixup PARAMS ((tree, rtx, rtx)); static rtx expand_nl_handler_label PARAMS ((rtx, rtx)); *************** static void expand_nl_goto_receiver PARA *** 405,411 **** static void expand_nl_goto_receivers PARAMS ((struct nesting *)); static void fixup_gotos PARAMS ((struct nesting *, rtx, tree, rtx, int)); ! static void expand_null_return_1 PARAMS ((rtx, int)); static void expand_value_return PARAMS ((rtx)); static int tail_recursion_args PARAMS ((tree, tree)); static void expand_cleanups PARAMS ((tree, tree, int, int)); --- 407,418 ---- static void expand_nl_goto_receivers PARAMS ((struct nesting *)); static void fixup_gotos PARAMS ((struct nesting *, rtx, tree, rtx, int)); ! static bool check_operand_nalternatives PARAMS ((tree, tree)); ! static bool check_unique_operand_names PARAMS ((tree, tree)); ! static tree resolve_operand_names PARAMS ((tree, tree, tree, ! const char **)); ! static char *resolve_operand_name_1 PARAMS ((char *, tree, tree)); ! static void expand_null_return_1 PARAMS ((rtx)); static void expand_value_return PARAMS ((rtx)); static int tail_recursion_args PARAMS ((tree, tree)); static void expand_cleanups PARAMS ((tree, tree, int, int)); *************** expand_computed_goto (exp) *** 703,717 **** rtx x = expand_expr (exp, NULL_RTX, VOIDmode, 0); #ifdef POINTERS_EXTEND_UNSIGNED ! x = convert_memory_address (Pmode, x); #endif emit_queue (); - /* Be sure the function is executable. */ - if (current_function_check_memory_usage) - emit_library_call (chkr_check_exec_libfunc, LCT_CONST_MAKE_BLOCK, - VOIDmode, 1, x, ptr_mode); - do_pending_stack_adjust (); emit_indirect_jump (x); --- 710,720 ---- rtx x = expand_expr (exp, NULL_RTX, VOIDmode, 0); #ifdef POINTERS_EXTEND_UNSIGNED ! if (GET_MODE (x) != Pmode) ! x = convert_memory_address (Pmode, x); #endif emit_queue (); do_pending_stack_adjust (); emit_indirect_jump (x); *************** expand_fixup (tree_label, rtl_label, las *** 1041,1047 **** as a placeholder. */ { ! register rtx original_before_jump = last_insn ? last_insn : get_last_insn (); rtx start; rtx end; --- 1044,1050 ---- as a placeholder. */ { ! rtx original_before_jump = last_insn ? last_insn : get_last_insn (); rtx start; rtx end; *************** expand_fixup (tree_label, rtl_label, las *** 1061,1071 **** } start_sequence (); ! start = emit_note (NULL_PTR, NOTE_INSN_BLOCK_BEG); if (cfun->x_whole_function_mode_p) NOTE_BLOCK (start) = block; ! fixup->before_jump = emit_note (NULL_PTR, NOTE_INSN_DELETED); ! end = emit_note (NULL_PTR, NOTE_INSN_BLOCK_END); if (cfun->x_whole_function_mode_p) NOTE_BLOCK (end) = block; fixup->context = block; --- 1064,1074 ---- } start_sequence (); ! start = emit_note (NULL, NOTE_INSN_BLOCK_BEG); if (cfun->x_whole_function_mode_p) NOTE_BLOCK (start) = block; ! fixup->before_jump = emit_note (NULL, NOTE_INSN_DELETED); ! end = emit_note (NULL, NOTE_INSN_BLOCK_END); if (cfun->x_whole_function_mode_p) NOTE_BLOCK (end) = block; fixup->context = block; *************** void *** 1095,1101 **** expand_fixups (first_insn) rtx first_insn; { ! fixup_gotos (NULL_PTR, NULL_RTX, NULL_TREE, first_insn, 0); } /* When exiting a binding contour, process all pending gotos requiring fixups. --- 1098,1104 ---- expand_fixups (first_insn) rtx first_insn; { ! fixup_gotos (NULL, NULL_RTX, NULL_TREE, first_insn, 0); } /* When exiting a binding contour, process all pending gotos requiring fixups. *************** fixup_gotos (thisblock, stack_level, cle *** 1119,1125 **** rtx first_insn; int dont_jump_in; { ! register struct goto_fixup *f, *prev; /* F is the fixup we are considering; PREV is the previous one. */ /* We run this loop in two passes so that cleanups of exited blocks --- 1122,1128 ---- rtx first_insn; int dont_jump_in; { ! struct goto_fixup *f, *prev; /* F is the fixup we are considering; PREV is the previous one. */ /* We run this loop in two passes so that cleanups of exited blocks *************** fixup_gotos (thisblock, stack_level, cle *** 1139,1145 **** If so, we can finalize it. */ else if (PREV_INSN (f->target_rtl) != 0) { ! register rtx cleanup_insns; /* If this fixup jumped into this contour from before the beginning of this contour, report an error. This code used to use --- 1142,1148 ---- If so, we can finalize it. */ else if (PREV_INSN (f->target_rtl) != 0) { ! rtx cleanup_insns; /* If this fixup jumped into this contour from before the beginning of this contour, report an error. This code used to use *************** fixup_gotos (thisblock, stack_level, cle *** 1230,1236 **** /* Label has still not appeared. If we are exiting a block with a stack level to restore, that started before the fixup, mark this stack level as needing restoration ! when the fixup is later finalized. */ && thisblock != 0 /* Note: if THISBLOCK == 0 and we have a label that hasn't appeared, it means the label is undefined. That's erroneous, but possible. */ --- 1233,1239 ---- /* Label has still not appeared. If we are exiting a block with a stack level to restore, that started before the fixup, mark this stack level as needing restoration ! when the fixup is later finalized. */ && thisblock != 0 /* Note: if THISBLOCK == 0 and we have a label that hasn't appeared, it means the label is undefined. That's erroneous, but possible. */ *************** void *** 1285,1296 **** expand_asm (body) tree body; { - if (current_function_check_memory_usage) - { - error ("`asm' cannot be used in function where memory usage is checked"); - return; - } - if (TREE_CODE (body) == ADDR_EXPR) body = TREE_OPERAND (body, 0); --- 1288,1293 ---- *************** parse_output_constraint (constraint_p, o *** 1351,1364 **** from and written to. */ *is_inout = (*p == '+'); - /* Make sure we can specify the matching operand. */ - if (*is_inout && operand_num > 9) - { - error ("output operand constraint %d contains `+'", - operand_num); - return false; - } - /* Canonicalize the output constraint so that it begins with `='. */ if (p != constraint || is_inout) { --- 1348,1353 ---- *************** parse_output_constraint (constraint_p, o *** 1388,1394 **** { case '+': case '=': ! error ("operand constraint contains '+' or '=' at illegal position."); return false; case '%': --- 1377,1383 ---- { case '+': case '=': ! error ("operand constraint contains incorrectly positioned '+' or '='"); return false; case '%': *************** parse_output_constraint (constraint_p, o *** 1412,1417 **** --- 1401,1407 ---- case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': + case '[': error ("matching constraint not valid in output operand"); return false; *************** parse_output_constraint (constraint_p, o *** 1456,1468 **** static bool parse_input_constraint (constraint_p, input_num, ninputs, noutputs, ninout, ! outputs, allows_mem, allows_reg) const char **constraint_p; int input_num; int ninputs; int noutputs; int ninout; ! tree outputs; bool *allows_mem; bool *allows_reg; { --- 1446,1458 ---- static bool parse_input_constraint (constraint_p, input_num, ninputs, noutputs, ninout, ! constraints, allows_mem, allows_reg) const char **constraint_p; int input_num; int ninputs; int noutputs; int ninout; ! const char * const * constraints; bool *allows_mem; bool *allows_reg; { *************** parse_input_constraint (constraint_p, in *** 1517,1544 **** operands to memory. */ case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': ! if (constraint[j] >= '0' + noutputs) ! { ! error ("matching constraint references invalid operand number"); ! return false; ! } ! ! /* Try and find the real constraint for this dup. */ ! if ((j == 0 && c_len == 1) ! || (j == 1 && c_len == 2 && constraint[0] == '%')) ! { ! tree o = outputs; ! ! for (j = constraint[j] - '0'; j > 0; --j) ! o = TREE_CHAIN (o); ! constraint = TREE_STRING_POINTER (TREE_PURPOSE (o)); ! *constraint_p = constraint; ! c_len = strlen (constraint); ! j = 0; ! break; ! } /* Fall through. */ case 'p': case 'r': --- 1507,1537 ---- operands to memory. */ case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': ! { ! char *end; ! unsigned long match; ! match = strtoul (constraint + j, &end, 10); ! if (match >= (unsigned long) noutputs) ! { ! error ("matching constraint references invalid operand number"); ! return false; ! } + /* Try and find the real constraint for this dup. Only do this + if the matching constraint is the only alternative. */ + if (*end == '\0' + && (j == 0 || (j == 1 && constraint[0] == '%'))) + { + constraint = constraints[match]; + *constraint_p = constraint; + c_len = strlen (constraint); + j = 0; + break; + } + else + j = end - constraint; + } /* Fall through. */ case 'p': case 'r': *************** parse_input_constraint (constraint_p, in *** 1578,1584 **** STRING is the instruction template. OUTPUTS is a list of output arguments (lvalues); INPUTS a list of inputs. Each output or input has an expression in the TREE_VALUE and ! a constraint-string in the TREE_PURPOSE. CLOBBERS is a list of STRING_CST nodes each naming a hard register that is clobbered by this insn. --- 1571,1579 ---- STRING is the instruction template. OUTPUTS is a list of output arguments (lvalues); INPUTS a list of inputs. Each output or input has an expression in the TREE_VALUE and ! and a tree list in TREE_PURPOSE which in turn contains a constraint ! name in TREE_VALUE (or NULL_TREE) and a constraint string ! in TREE_PURPOSE. CLOBBERS is a list of STRING_CST nodes each naming a hard register that is clobbered by this insn. *************** expand_asm_operands (string, outputs, in *** 1596,1617 **** const char *filename; int line; { ! rtvec argvec, constraints; rtx body; int ninputs = list_length (inputs); int noutputs = list_length (outputs); int ninout; int nclobbers; tree tail; ! register int i; /* Vector of RTX's of evaluated output operands. */ rtx *output_rtx = (rtx *) alloca (noutputs * sizeof (rtx)); int *inout_opnum = (int *) alloca (noutputs * sizeof (int)); rtx *real_output_rtx = (rtx *) alloca (noutputs * sizeof (rtx)); enum machine_mode *inout_mode = (enum machine_mode *) alloca (noutputs * sizeof (enum machine_mode)); ! const char **output_constraints ! = alloca (noutputs * sizeof (const char *)); /* The insn we have emitted. */ rtx insn; int old_generating_concat_p = generating_concat_p; --- 1591,1612 ---- const char *filename; int line; { ! rtvec argvec, constraintvec; rtx body; int ninputs = list_length (inputs); int noutputs = list_length (outputs); int ninout; int nclobbers; tree tail; ! int i; /* Vector of RTX's of evaluated output operands. */ rtx *output_rtx = (rtx *) alloca (noutputs * sizeof (rtx)); int *inout_opnum = (int *) alloca (noutputs * sizeof (int)); rtx *real_output_rtx = (rtx *) alloca (noutputs * sizeof (rtx)); enum machine_mode *inout_mode = (enum machine_mode *) alloca (noutputs * sizeof (enum machine_mode)); ! const char **constraints ! = (const char **) alloca ((noutputs + ninputs) * sizeof (const char *)); /* The insn we have emitted. */ rtx insn; int old_generating_concat_p = generating_concat_p; *************** expand_asm_operands (string, outputs, in *** 1620,1645 **** if (noutputs == 0) vol = 1; ! if (current_function_check_memory_usage) ! { ! error ("`asm' cannot be used with `-fcheck-memory-usage'"); ! return; ! } #ifdef MD_ASM_CLOBBERS /* Sometimes we wish to automatically clobber registers across an asm. Case in point is when the i386 backend moved from cc0 to a hard reg -- ! maintaining source-level compatability means automatically clobbering the flags register. */ MD_ASM_CLOBBERS (clobbers); #endif - if (current_function_check_memory_usage) - { - error ("`asm' cannot be used in function where memory usage is checked"); - return; - } - /* Count the number of meaningful clobbered registers, ignoring what we would ignore later. */ nclobbers = 0; --- 1615,1636 ---- if (noutputs == 0) vol = 1; ! if (! check_operand_nalternatives (outputs, inputs)) ! return; ! ! if (! check_unique_operand_names (outputs, inputs)) ! return; ! ! string = resolve_operand_names (string, outputs, inputs, constraints); #ifdef MD_ASM_CLOBBERS /* Sometimes we wish to automatically clobber registers across an asm. Case in point is when the i386 backend moved from cc0 to a hard reg -- ! maintaining source-level compatibility means automatically clobbering the flags register. */ MD_ASM_CLOBBERS (clobbers); #endif /* Count the number of meaningful clobbered registers, ignoring what we would ignore later. */ nclobbers = 0; *************** expand_asm_operands (string, outputs, in *** 1656,1693 **** last_expr_type = 0; - /* Check that the number of alternatives is constant across all - operands. */ - if (outputs || inputs) - { - tree tmp = TREE_PURPOSE (outputs ? outputs : inputs); - int nalternatives = n_occurrences (',', TREE_STRING_POINTER (tmp)); - tree next = inputs; - - if (nalternatives + 1 > MAX_RECOG_ALTERNATIVES) - { - error ("too many alternatives in `asm'"); - return; - } - - tmp = outputs; - while (tmp) - { - const char *constraint = TREE_STRING_POINTER (TREE_PURPOSE (tmp)); - - if (n_occurrences (',', constraint) != nalternatives) - { - error ("operand constraints for `asm' differ in number of alternatives"); - return; - } - - if (TREE_CHAIN (tmp)) - tmp = TREE_CHAIN (tmp); - else - tmp = next, next = 0; - } - } - /* First pass over inputs and outputs checks validity and sets mark_addressable if needed. */ --- 1647,1652 ---- *************** expand_asm_operands (string, outputs, in *** 1707,1713 **** /* Try to parse the output constraint. If that fails, there's no point in going further. */ ! constraint = TREE_STRING_POINTER (TREE_PURPOSE (tail)); if (!parse_output_constraint (&constraint, i, ninputs, noutputs, &allows_mem, &allows_reg, &is_inout)) return; --- 1666,1672 ---- /* Try to parse the output constraint. If that fails, there's no point in going further. */ ! constraint = constraints[i]; if (!parse_output_constraint (&constraint, i, ninputs, noutputs, &allows_mem, &allows_reg, &is_inout)) return; *************** expand_asm_operands (string, outputs, in *** 1741,1749 **** if (TREE_TYPE (TREE_VALUE (tail)) == error_mark_node) return; ! constraint = TREE_STRING_POINTER (TREE_PURPOSE (tail)); if (! parse_input_constraint (&constraint, i, ninputs, noutputs, ninout, ! outputs, &allows_mem, &allows_reg)) return; if (! allows_reg && allows_mem) --- 1700,1708 ---- if (TREE_TYPE (TREE_VALUE (tail)) == error_mark_node) return; ! constraint = constraints[i + noutputs]; if (! parse_input_constraint (&constraint, i, ninputs, noutputs, ninout, ! constraints, &allows_mem, &allows_reg)) return; if (! allows_reg && allows_mem) *************** expand_asm_operands (string, outputs, in *** 1761,1768 **** bool allows_reg; bool allows_mem; ! output_constraints[i] = TREE_STRING_POINTER (TREE_PURPOSE (tail)); ! if (!parse_output_constraint (&output_constraints[i], i, ninputs, noutputs, &allows_mem, &allows_reg, &is_inout)) abort (); --- 1720,1726 ---- bool allows_reg; bool allows_mem; ! if (!parse_output_constraint (&constraints[i], i, ninputs, noutputs, &allows_mem, &allows_reg, &is_inout)) abort (); *************** expand_asm_operands (string, outputs, in *** 1784,1791 **** || ! allows_reg || is_inout) { ! output_rtx[i] ! = expand_expr (val, NULL_RTX, VOIDmode, EXPAND_MEMORY_USE_WO); if (! allows_reg && GET_CODE (output_rtx[i]) != MEM) error ("output number %d not directly addressable", i); --- 1742,1748 ---- || ! allows_reg || is_inout) { ! output_rtx[i] = expand_expr (val, NULL_RTX, VOIDmode, EXPAND_WRITE); if (! allows_reg && GET_CODE (output_rtx[i]) != MEM) error ("output number %d not directly addressable", i); *************** expand_asm_operands (string, outputs, in *** 1813,1827 **** } } ! /* Make vectors for the expression-rtx and constraint strings. */ argvec = rtvec_alloc (ninputs); ! constraints = rtvec_alloc (ninputs); body = gen_rtx_ASM_OPERANDS ((noutputs == 0 ? VOIDmode : GET_MODE (output_rtx[0])), TREE_STRING_POINTER (string), ! empty_string, 0, argvec, constraints, filename, line); MEM_VOLATILE_P (body) = vol; --- 1770,1785 ---- } } ! /* Make vectors for the expression-rtx, constraint strings, ! and named operands. */ argvec = rtvec_alloc (ninputs); ! constraintvec = rtvec_alloc (ninputs); body = gen_rtx_ASM_OPERANDS ((noutputs == 0 ? VOIDmode : GET_MODE (output_rtx[0])), TREE_STRING_POINTER (string), ! empty_string, 0, argvec, constraintvec, filename, line); MEM_VOLATILE_P (body) = vol; *************** expand_asm_operands (string, outputs, in *** 1829,1844 **** /* Eval the inputs and put them into ARGVEC. Put their constraints into ASM_INPUTs and store in CONSTRAINTS. */ ! for (i = 0, tail = inputs; tail; i++, tail = TREE_CHAIN (tail)) { bool allows_reg, allows_mem; const char *constraint; tree val, type; rtx op; ! constraint = TREE_STRING_POINTER (TREE_PURPOSE (tail)); if (! parse_input_constraint (&constraint, i, ninputs, noutputs, ninout, ! outputs, &allows_mem, &allows_reg)) abort (); generating_concat_p = 0; --- 1787,1802 ---- /* Eval the inputs and put them into ARGVEC. Put their constraints into ASM_INPUTs and store in CONSTRAINTS. */ ! for (i = 0, tail = inputs; tail; tail = TREE_CHAIN (tail), ++i) { bool allows_reg, allows_mem; const char *constraint; tree val, type; rtx op; ! constraint = constraints[i + noutputs]; if (! parse_input_constraint (&constraint, i, ninputs, noutputs, ninout, ! constraints, &allows_mem, &allows_reg)) abort (); generating_concat_p = 0; *************** expand_asm_operands (string, outputs, in *** 1856,1866 **** if (allows_reg) op = force_reg (TYPE_MODE (type), op); else if (!allows_mem) ! warning ("asm operand %d probably doesn't match constraints", i); else if (CONSTANT_P (op)) op = force_const_mem (TYPE_MODE (type), op); else if (GET_CODE (op) == REG || GET_CODE (op) == SUBREG || GET_CODE (op) == CONCAT) { tree qual_type = build_qualified_type (type, --- 1814,1826 ---- if (allows_reg) op = force_reg (TYPE_MODE (type), op); else if (!allows_mem) ! warning ("asm operand %d probably doesn't match constraints", ! i + noutputs); else if (CONSTANT_P (op)) op = force_const_mem (TYPE_MODE (type), op); else if (GET_CODE (op) == REG || GET_CODE (op) == SUBREG + || GET_CODE (op) == ADDRESSOF || GET_CODE (op) == CONCAT) { tree qual_type = build_qualified_type (type, *************** expand_asm_operands (string, outputs, in *** 1871,1876 **** --- 1831,1837 ---- emit_move_insn (memloc, op); op = memloc; } + else if (GET_CODE (op) == MEM && MEM_VOLATILE_P (op)) { /* We won't recognize volatile memory as available a *************** expand_asm_operands (string, outputs, in *** 1882,1896 **** /* ??? Leave this only until we have experience with what happens in combine and elsewhere when constraints are not satisfied. */ ! warning ("asm operand %d probably doesn't match constraints", i); } generating_concat_p = old_generating_concat_p; ASM_OPERANDS_INPUT (body, i) = op; ASM_OPERANDS_INPUT_CONSTRAINT_EXP (body, i) ! = gen_rtx_ASM_INPUT (TYPE_MODE (type), ! TREE_STRING_POINTER (TREE_PURPOSE (tail))); } /* Protect all the operands from the queue now that they have all been --- 1843,1857 ---- /* ??? Leave this only until we have experience with what happens in combine and elsewhere when constraints are not satisfied. */ ! warning ("asm operand %d probably doesn't match constraints", ! i + noutputs); } generating_concat_p = old_generating_concat_p; ASM_OPERANDS_INPUT (body, i) = op; ASM_OPERANDS_INPUT_CONSTRAINT_EXP (body, i) ! = gen_rtx_ASM_INPUT (TYPE_MODE (type), constraints[i + noutputs]); } /* Protect all the operands from the queue now that they have all been *************** expand_asm_operands (string, outputs, in *** 1909,1932 **** for (i = 0; i < ninout; i++) { int j = inout_opnum[i]; ASM_OPERANDS_INPUT (body, ninputs - ninout + i) = output_rtx[j]; ASM_OPERANDS_INPUT_CONSTRAINT_EXP (body, ninputs - ninout + i) ! = gen_rtx_ASM_INPUT (inout_mode[i], digit_string (j)); } generating_concat_p = old_generating_concat_p; /* Now, for each output, construct an rtx ! (set OUTPUT (asm_operands INSN OUTPUTNUMBER OUTPUTCONSTRAINT ! ARGVEC CONSTRAINTS)) If there is more than one, put them inside a PARALLEL. */ if (noutputs == 1 && nclobbers == 0) { ! ASM_OPERANDS_OUTPUT_CONSTRAINT (body) ! = output_constraints[0]; insn = emit_insn (gen_rtx_SET (VOIDmode, output_rtx[0], body)); } --- 1870,1895 ---- for (i = 0; i < ninout; i++) { int j = inout_opnum[i]; + char buffer[16]; ASM_OPERANDS_INPUT (body, ninputs - ninout + i) = output_rtx[j]; + + sprintf (buffer, "%d", j); ASM_OPERANDS_INPUT_CONSTRAINT_EXP (body, ninputs - ninout + i) ! = gen_rtx_ASM_INPUT (inout_mode[i], ggc_alloc_string (buffer, -1)); } generating_concat_p = old_generating_concat_p; /* Now, for each output, construct an rtx ! (set OUTPUT (asm_operands INSN OUTPUTCONSTRAINT OUTPUTNUMBER ! ARGVEC CONSTRAINTS OPNAMES)) If there is more than one, put them inside a PARALLEL. */ if (noutputs == 1 && nclobbers == 0) { ! ASM_OPERANDS_OUTPUT_CONSTRAINT (body) = constraints[0]; insn = emit_insn (gen_rtx_SET (VOIDmode, output_rtx[0], body)); } *************** expand_asm_operands (string, outputs, in *** 1955,1962 **** gen_rtx_ASM_OPERANDS (GET_MODE (output_rtx[i]), TREE_STRING_POINTER (string), ! output_constraints[i], ! i, argvec, constraints, filename, line)); MEM_VOLATILE_P (SET_SRC (XVECEXP (body, 0, i))) = vol; --- 1918,1924 ---- gen_rtx_ASM_OPERANDS (GET_MODE (output_rtx[i]), TREE_STRING_POINTER (string), ! constraints[i], i, argvec, constraintvec, filename, line)); MEM_VOLATILE_P (SET_SRC (XVECEXP (body, 0, i))) = vol; *************** expand_asm_operands (string, outputs, in *** 2010,2027 **** free_temp_slots (); } /* Generate RTL to evaluate the expression EXP ! and remember it in case this is the VALUE in a ({... VALUE; }) constr. */ void expand_expr_stmt (exp) tree exp; { /* If -W, warn about statements with no side effects, except for an explicit cast to void (e.g. for assert()), and ! except inside a ({...}) where they may be useful. */ ! if (expr_stmts_for_value == 0 && exp != error_mark_node) { if (! TREE_SIDE_EFFECTS (exp)) { --- 1972,2228 ---- free_temp_slots (); } + + /* A subroutine of expand_asm_operands. Check that all operands have + the same number of alternatives. Return true if so. */ + + static bool + check_operand_nalternatives (outputs, inputs) + tree outputs, inputs; + { + if (outputs || inputs) + { + tree tmp = TREE_PURPOSE (outputs ? outputs : inputs); + int nalternatives + = n_occurrences (',', TREE_STRING_POINTER (TREE_VALUE (tmp))); + tree next = inputs; + + if (nalternatives + 1 > MAX_RECOG_ALTERNATIVES) + { + error ("too many alternatives in `asm'"); + return false; + } + + tmp = outputs; + while (tmp) + { + const char *constraint + = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (tmp))); + + if (n_occurrences (',', constraint) != nalternatives) + { + error ("operand constraints for `asm' differ in number of alternatives"); + return false; + } + + if (TREE_CHAIN (tmp)) + tmp = TREE_CHAIN (tmp); + else + tmp = next, next = 0; + } + } + + return true; + } + + /* A subroutine of expand_asm_operands. Check that all operand names + are unique. Return true if so. We rely on the fact that these names + are identifiers, and so have been canonicalized by get_identifier, + so all we need are pointer comparisons. */ + + static bool + check_unique_operand_names (outputs, inputs) + tree outputs, inputs; + { + tree i, j; + + for (i = outputs; i ; i = TREE_CHAIN (i)) + { + tree i_name = TREE_PURPOSE (TREE_PURPOSE (i)); + if (! i_name) + continue; + + for (j = TREE_CHAIN (i); j ; j = TREE_CHAIN (j)) + if (i_name == TREE_PURPOSE (TREE_PURPOSE (j))) + goto failure; + } + + for (i = inputs; i ; i = TREE_CHAIN (i)) + { + tree i_name = TREE_PURPOSE (TREE_PURPOSE (i)); + if (! i_name) + continue; + + for (j = TREE_CHAIN (i); j ; j = TREE_CHAIN (j)) + if (i_name == TREE_PURPOSE (TREE_PURPOSE (j))) + goto failure; + for (j = outputs; j ; j = TREE_CHAIN (j)) + if (i_name == TREE_PURPOSE (TREE_PURPOSE (j))) + goto failure; + } + + return true; + + failure: + error ("duplicate asm operand name '%s'", + IDENTIFIER_POINTER (TREE_PURPOSE (TREE_PURPOSE (i)))); + return false; + } + + /* A subroutine of expand_asm_operands. Resolve the names of the operands + in *POUTPUTS and *PINPUTS to numbers, and replace the name expansions in + STRING and in the constraints to those numbers. */ + + static tree + resolve_operand_names (string, outputs, inputs, pconstraints) + tree string; + tree outputs, inputs; + const char **pconstraints; + { + char *buffer = xstrdup (TREE_STRING_POINTER (string)); + char *p; + tree t; + + /* Assume that we will not need extra space to perform the substitution. + This because we get to remove '[' and ']', which means we cannot have + a problem until we have more than 999 operands. */ + + p = buffer; + while ((p = strchr (p, '%')) != NULL) + { + if (p[1] == '[') + p += 1; + else if (ISALPHA (p[1]) && p[2] == '[') + p += 2; + else + { + p += 1; + continue; + } + + p = resolve_operand_name_1 (p, outputs, inputs); + } + + string = build_string (strlen (buffer), buffer); + free (buffer); + + /* Collect output constraints here because it's convenient. + There should be no named operands here; this is verified + in expand_asm_operand. */ + for (t = outputs; t ; t = TREE_CHAIN (t), pconstraints++) + *pconstraints = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t))); + + /* Substitute [] in input constraint strings. */ + for (t = inputs; t ; t = TREE_CHAIN (t), pconstraints++) + { + const char *c = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t))); + if (strchr (c, '[') == NULL) + *pconstraints = c; + else + { + p = buffer = xstrdup (c); + while ((p = strchr (p, '[')) != NULL) + p = resolve_operand_name_1 (p, outputs, inputs); + + *pconstraints = ggc_alloc_string (buffer, -1); + free (buffer); + } + } + + return string; + } + + /* A subroutine of resolve_operand_names. P points to the '[' for a + potential named operand of the form []. In place, replace + the name and brackets with a number. Return a pointer to the + balance of the string after substitution. */ + + static char * + resolve_operand_name_1 (p, outputs, inputs) + char *p; + tree outputs, inputs; + { + char *q; + int op; + tree t; + size_t len; + + /* Collect the operand name. */ + q = strchr (p, ']'); + if (!q) + { + error ("missing close brace for named operand"); + return strchr (p, '\0'); + } + len = q - p - 1; + + /* Resolve the name to a number. */ + for (op = 0, t = outputs; t ; t = TREE_CHAIN (t), op++) + { + tree id = TREE_PURPOSE (TREE_PURPOSE (t)); + if (id) + { + const char *c = IDENTIFIER_POINTER (id); + if (strncmp (c, p + 1, len) == 0 && c[len] == '\0') + goto found; + } + } + for (t = inputs; t ; t = TREE_CHAIN (t), op++) + { + tree id = TREE_PURPOSE (TREE_PURPOSE (t)); + if (id) + { + const char *c = IDENTIFIER_POINTER (id); + if (strncmp (c, p + 1, len) == 0 && c[len] == '\0') + goto found; + } + } + + *q = '\0'; + error ("undefined named operand '%s'", p + 1); + op = 0; + found: + + /* Replace the name with the number. Unfortunately, not all libraries + get the return value of sprintf correct, so search for the end of the + generated string by hand. */ + sprintf (p, "%d", op); + p = strchr (p, '\0'); + + /* Verify the no extra buffer space assumption. */ + if (p > q) + abort (); + + /* Shift the rest of the buffer down to fill the gap. */ + memmove (p, q + 1, strlen (q + 1) + 1); + + return p; + } /* Generate RTL to evaluate the expression EXP ! and remember it in case this is the VALUE in a ({... VALUE; }) constr. ! Provided just for backward-compatibility. expand_expr_stmt_value() ! should be used for new code. */ void expand_expr_stmt (exp) tree exp; { + expand_expr_stmt_value (exp, -1, 1); + } + + /* Generate RTL to evaluate the expression EXP. WANT_VALUE tells + whether to (1) save the value of the expression, (0) discard it or + (-1) use expr_stmts_for_value to tell. The use of -1 is + deprecated, and retained only for backward compatibility. */ + + void + expand_expr_stmt_value (exp, want_value, maybe_last) + tree exp; + int want_value, maybe_last; + { + rtx value; + tree type; + + if (want_value == -1) + want_value = expr_stmts_for_value != 0; + /* If -W, warn about statements with no side effects, except for an explicit cast to void (e.g. for assert()), and ! except for last statement in ({...}) where they may be useful. */ ! if (! want_value ! && (expr_stmts_for_value == 0 || ! maybe_last) ! && exp != error_mark_node) { if (! TREE_SIDE_EFFECTS (exp)) { *************** expand_expr_stmt (exp) *** 2037,2087 **** /* If EXP is of function type and we are expanding statements for value, convert it to pointer-to-function. */ ! if (expr_stmts_for_value && TREE_CODE (TREE_TYPE (exp)) == FUNCTION_TYPE) exp = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (exp)), exp); /* The call to `expand_expr' could cause last_expr_type and last_expr_value to get reset. Therefore, we set last_expr_value and last_expr_type *after* calling expand_expr. */ ! last_expr_value = expand_expr (exp, ! (expr_stmts_for_value ! ? NULL_RTX : const0_rtx), ! VOIDmode, 0); ! last_expr_type = TREE_TYPE (exp); /* If all we do is reference a volatile value in memory, copy it to a register to be sure it is actually touched. */ ! if (last_expr_value != 0 && GET_CODE (last_expr_value) == MEM ! && TREE_THIS_VOLATILE (exp)) { ! if (TYPE_MODE (TREE_TYPE (exp)) == VOIDmode) ; ! else if (TYPE_MODE (TREE_TYPE (exp)) != BLKmode) ! copy_to_reg (last_expr_value); else { rtx lab = gen_label_rtx (); /* Compare the value with itself to reference it. */ ! emit_cmp_and_jump_insns (last_expr_value, last_expr_value, EQ, ! expand_expr (TYPE_SIZE (last_expr_type), NULL_RTX, VOIDmode, 0), ! BLKmode, 0, ! TYPE_ALIGN (last_expr_type) / BITS_PER_UNIT, ! lab); emit_label (lab); } } /* If this expression is part of a ({...}) and is in memory, we may have to preserve temporaries. */ ! preserve_temp_slots (last_expr_value); /* Free any temporaries used to evaluate this expression. Any temporary used as a result of this expression will already have been preserved above. */ free_temp_slots (); emit_queue (); } --- 2238,2289 ---- /* If EXP is of function type and we are expanding statements for value, convert it to pointer-to-function. */ ! if (want_value && TREE_CODE (TREE_TYPE (exp)) == FUNCTION_TYPE) exp = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (exp)), exp); /* The call to `expand_expr' could cause last_expr_type and last_expr_value to get reset. Therefore, we set last_expr_value and last_expr_type *after* calling expand_expr. */ ! value = expand_expr (exp, want_value ? NULL_RTX : const0_rtx, ! VOIDmode, 0); ! type = TREE_TYPE (exp); /* If all we do is reference a volatile value in memory, copy it to a register to be sure it is actually touched. */ ! if (value && GET_CODE (value) == MEM && TREE_THIS_VOLATILE (exp)) { ! if (TYPE_MODE (type) == VOIDmode) ; ! else if (TYPE_MODE (type) != BLKmode) ! value = copy_to_reg (value); else { rtx lab = gen_label_rtx (); /* Compare the value with itself to reference it. */ ! emit_cmp_and_jump_insns (value, value, EQ, ! expand_expr (TYPE_SIZE (type), NULL_RTX, VOIDmode, 0), ! BLKmode, 0, lab); emit_label (lab); } } /* If this expression is part of a ({...}) and is in memory, we may have to preserve temporaries. */ ! preserve_temp_slots (value); /* Free any temporaries used to evaluate this expression. Any temporary used as a result of this expression will already have been preserved above. */ free_temp_slots (); + if (want_value) + { + last_expr_value = value; + last_expr_type = type; + } + emit_queue (); } *************** warn_if_unused_value (exp) *** 2101,2110 **** if (VOID_TYPE_P (TREE_TYPE (exp))) return 0; - /* If this is an expression with side effects, don't warn. */ - if (TREE_SIDE_EFFECTS (exp)) - return 0; - switch (TREE_CODE (exp)) { case PREINCREMENT_EXPR: --- 2303,2308 ---- *************** warn_if_unused_value (exp) *** 2164,2170 **** || TREE_CODE (tem) == CALL_EXPR) return 0; } ! goto warn; case INDIRECT_REF: /* Don't warn about automatic dereferencing of references, since --- 2362,2368 ---- || TREE_CODE (tem) == CALL_EXPR) return 0; } ! goto maybe_warn; case INDIRECT_REF: /* Don't warn about automatic dereferencing of references, since *************** warn_if_unused_value (exp) *** 2187,2193 **** && TREE_CODE_LENGTH (TREE_CODE (exp)) == 0) return 0; ! warn: warning_with_file_and_line (emit_filename, emit_lineno, "value computed is not used"); return 1; --- 2385,2395 ---- && TREE_CODE_LENGTH (TREE_CODE (exp)) == 0) return 0; ! maybe_warn: ! /* If this is an expression with side effects, don't warn. */ ! if (TREE_SIDE_EFFECTS (exp)) ! return 0; ! warning_with_file_and_line (emit_filename, emit_lineno, "value computed is not used"); return 1; *************** clear_last_expr () *** 2202,2213 **** last_expr_type = 0; } ! /* Begin a statement which will return a value. ! Return the RTL_EXPR for this statement expr. ! The caller must save that value and pass it to expand_end_stmt_expr. */ tree ! expand_start_stmt_expr () { tree t; --- 2404,2419 ---- last_expr_type = 0; } ! /* Begin a statement-expression, i.e., a series of statements which ! may return a value. Return the RTL_EXPR for this statement expr. ! The caller must save that value and pass it to ! expand_end_stmt_expr. If HAS_SCOPE is nonzero, temporaries created ! in the statement-expression are deallocated at the end of the ! expression. */ tree ! expand_start_stmt_expr (has_scope) ! int has_scope; { tree t; *************** expand_start_stmt_expr () *** 2215,2223 **** so that rtl_expr_chain doesn't become garbage. */ t = make_node (RTL_EXPR); do_pending_stack_adjust (); ! start_sequence_for_rtl_expr (t); NO_DEFER_POP; expr_stmts_for_value++; return t; } --- 2421,2433 ---- so that rtl_expr_chain doesn't become garbage. */ t = make_node (RTL_EXPR); do_pending_stack_adjust (); ! if (has_scope) ! start_sequence_for_rtl_expr (t); ! else ! start_sequence (); NO_DEFER_POP; expr_stmts_for_value++; + last_expr_value = NULL_RTX; return t; } *************** expand_end_stmt_expr (t) *** 2239,2253 **** { OK_DEFER_POP; ! if (last_expr_type == 0) { - last_expr_type = void_type_node; last_expr_value = const0_rtx; } - else if (last_expr_value == 0) - /* There are some cases where this can happen, such as when the - statement is void type. */ - last_expr_value = const0_rtx; else if (GET_CODE (last_expr_value) != REG && ! CONSTANT_P (last_expr_value)) /* Remove any possible QUEUED. */ last_expr_value = protect_from_queue (last_expr_value, 0); --- 2449,2459 ---- { OK_DEFER_POP; ! if (! last_expr_value || ! last_expr_type) { last_expr_value = const0_rtx; + last_expr_type = void_type_node; } else if (GET_CODE (last_expr_value) != REG && ! CONSTANT_P (last_expr_value)) /* Remove any possible QUEUED. */ last_expr_value = protect_from_queue (last_expr_value, 0); *************** struct nesting * *** 2372,2378 **** expand_start_loop (exit_flag) int exit_flag; { ! register struct nesting *thisloop = ALLOC_NESTING (); /* Make an entry on loop_stack for the loop we are entering. */ --- 2578,2584 ---- expand_start_loop (exit_flag) int exit_flag; { ! struct nesting *thisloop = ALLOC_NESTING (); /* Make an entry on loop_stack for the loop we are entering. */ *************** expand_start_loop (exit_flag) *** 2389,2395 **** do_pending_stack_adjust (); emit_queue (); ! emit_note (NULL_PTR, NOTE_INSN_LOOP_BEG); emit_label (thisloop->data.loop.start_label); return thisloop; --- 2595,2601 ---- do_pending_stack_adjust (); emit_queue (); ! emit_note (NULL, NOTE_INSN_LOOP_BEG); emit_label (thisloop->data.loop.start_label); return thisloop; *************** expand_start_loop_continue_elsewhere (ex *** 2413,2419 **** struct nesting * expand_start_null_loop () { ! register struct nesting *thisloop = ALLOC_NESTING (); /* Make an entry on loop_stack for the loop we are entering. */ --- 2619,2625 ---- struct nesting * expand_start_null_loop () { ! struct nesting *thisloop = ALLOC_NESTING (); /* Make an entry on loop_stack for the loop we are entering. */ *************** void *** 2440,2446 **** expand_loop_continue_here () { do_pending_stack_adjust (); ! emit_note (NULL_PTR, NOTE_INSN_LOOP_CONT); emit_label (loop_stack->data.loop.continue_label); } --- 2646,2652 ---- expand_loop_continue_here () { do_pending_stack_adjust (); ! emit_note (NULL, NOTE_INSN_LOOP_CONT); emit_label (loop_stack->data.loop.continue_label); } *************** expand_exit_loop_if_false (whichloop, co *** 2661,2667 **** if (whichloop == 0) return 0; /* In order to handle fixups, we actually create a conditional jump ! around a unconditional branch to exit the loop. If fixups are necessary, they go before the unconditional branch. */ do_jump (cond, NULL_RTX, label); --- 2867,2873 ---- if (whichloop == 0) return 0; /* In order to handle fixups, we actually create a conditional jump ! around an unconditional branch to exit the loop. If fixups are necessary, they go before the unconditional branch. */ do_jump (cond, NULL_RTX, label); *************** expand_exit_something () *** 2758,2778 **** void expand_null_return () { - struct nesting *block = block_stack; rtx last_insn = get_last_insn (); /* If this function was declared to return a value, but we didn't, clobber the return registers so that they are not ! propogated live to the rest of the function. */ clobber_return_register (); ! /* Does any pending block have cleanups? */ ! while (block && block->data.block.cleanups == 0) ! block = block->next; ! ! /* If yes, use a goto to return, since that runs cleanups. */ ! ! expand_null_return_1 (last_insn, block != 0); } /* Generate RTL to return from the current function, with value VAL. */ --- 2964,2977 ---- void expand_null_return () { rtx last_insn = get_last_insn (); /* If this function was declared to return a value, but we didn't, clobber the return registers so that they are not ! propagated live to the rest of the function. */ clobber_return_register (); ! expand_null_return_1 (last_insn); } /* Generate RTL to return from the current function, with value VAL. */ *************** static void *** 2781,2787 **** expand_value_return (val) rtx val; { - struct nesting *block = block_stack; rtx last_insn = get_last_insn (); rtx return_reg = DECL_RTL (DECL_RESULT (current_function_decl)); --- 2980,2985 ---- *************** expand_value_return (val) *** 2802,2834 **** val = convert_modes (mode, old_mode, val, unsignedp); #endif if (GET_CODE (return_reg) == PARALLEL) ! emit_group_load (return_reg, val, int_size_in_bytes (type), ! TYPE_ALIGN (type)); else emit_move_insn (return_reg, val); } ! /* Does any pending block have cleanups? */ ! ! while (block && block->data.block.cleanups == 0) ! block = block->next; ! ! /* If yes, use a goto to return, since that runs cleanups. ! Use LAST_INSN to put cleanups *before* the move insn emitted above. */ ! ! expand_null_return_1 (last_insn, block != 0); } /* Output a return with no value. If LAST_INSN is nonzero, ! pretend that the return takes place after LAST_INSN. ! If USE_GOTO is nonzero then don't use a return instruction; ! go to the return label instead. This causes any cleanups ! of pending blocks to be executed normally. */ static void ! expand_null_return_1 (last_insn, use_goto) rtx last_insn; - int use_goto; { rtx end_label = cleanup_label ? cleanup_label : return_label; --- 3000,3019 ---- val = convert_modes (mode, old_mode, val, unsignedp); #endif if (GET_CODE (return_reg) == PARALLEL) ! emit_group_load (return_reg, val, int_size_in_bytes (type)); else emit_move_insn (return_reg, val); } ! expand_null_return_1 (last_insn); } /* Output a return with no value. If LAST_INSN is nonzero, ! pretend that the return takes place after LAST_INSN. */ static void ! expand_null_return_1 (last_insn) rtx last_insn; { rtx end_label = cleanup_label ? cleanup_label : return_label; *************** expand_null_return_1 (last_insn, use_got *** 2836,2862 **** do_pending_stack_adjust (); last_expr_type = 0; ! /* PCC-struct return always uses an epilogue. */ ! if (current_function_returns_pcc_struct || use_goto) ! { ! if (end_label == 0) ! end_label = return_label = gen_label_rtx (); ! expand_goto_internal (NULL_TREE, end_label, last_insn); ! return; ! } ! ! /* Otherwise output a simple return-insn if one is available, ! unless it won't do the job. */ ! #ifdef HAVE_return ! if (HAVE_return && use_goto == 0 && cleanup_label == 0) ! { ! emit_jump_insn (gen_return ()); ! emit_barrier (); ! return; ! } ! #endif ! ! /* Otherwise jump to the epilogue. */ expand_goto_internal (NULL_TREE, end_label, last_insn); } --- 3021,3028 ---- do_pending_stack_adjust (); last_expr_type = 0; ! if (end_label == 0) ! end_label = return_label = gen_label_rtx (); expand_goto_internal (NULL_TREE, end_label, last_insn); } *************** expand_return (retval) *** 2877,2883 **** computation of the return value. */ rtx last_insn = 0; rtx result_rtl; ! register rtx val = 0; tree retval_rhs; /* If function wants no value, give it none. */ --- 3043,3049 ---- computation of the return value. */ rtx last_insn = 0; rtx result_rtl; ! rtx val = 0; tree retval_rhs; /* If function wants no value, give it none. */ *************** expand_return (retval) *** 2979,2985 **** to the least significant byte (to the right). On a BYTES_BIG_ENDIAN machine, this means we must skip the empty high order bytes when calculating the bit offset. */ ! if (BYTES_BIG_ENDIAN && bytes % UNITS_PER_WORD) big_endian_correction = (BITS_PER_WORD - ((bytes % UNITS_PER_WORD) * BITS_PER_UNIT)); --- 3145,3153 ---- to the least significant byte (to the right). On a BYTES_BIG_ENDIAN machine, this means we must skip the empty high order bytes when calculating the bit offset. */ ! if (BYTES_BIG_ENDIAN ! && !FUNCTION_ARG_REG_LITTLE_ENDIAN ! && bytes % UNITS_PER_WORD) big_endian_correction = (BITS_PER_WORD - ((bytes % UNITS_PER_WORD) * BITS_PER_UNIT)); *************** expand_return (retval) *** 2998,3005 **** dst = gen_reg_rtx (word_mode); result_pseudos[xbitpos / BITS_PER_WORD] = dst; ! /* Clobber the destination before we move anything into it. */ ! emit_insn (gen_rtx_CLOBBER (VOIDmode, dst)); } /* We need a new source operand each time bitpos is on a word --- 3166,3173 ---- dst = gen_reg_rtx (word_mode); result_pseudos[xbitpos / BITS_PER_WORD] = dst; ! /* Clear the destination before we move anything into it. */ ! emit_move_insn (dst, CONST0_RTX (GET_MODE (dst))); } /* We need a new source operand each time bitpos is on a word *************** expand_return (retval) *** 3015,3027 **** extract_bit_field (src, bitsize, bitpos % BITS_PER_WORD, 1, NULL_RTX, word_mode, word_mode, ! bitsize, BITS_PER_WORD), ! bitsize, BITS_PER_WORD); } /* Find the smallest integer mode large enough to hold the entire structure and use that mode instead of BLKmode ! on the USE insn for the return register. */ for (tmpmode = GET_CLASS_NARROWEST_MODE (MODE_INT); tmpmode != VOIDmode; tmpmode = GET_MODE_WIDER_MODE (tmpmode)) --- 3183,3195 ---- extract_bit_field (src, bitsize, bitpos % BITS_PER_WORD, 1, NULL_RTX, word_mode, word_mode, ! BITS_PER_WORD), ! BITS_PER_WORD); } /* Find the smallest integer mode large enough to hold the entire structure and use that mode instead of BLKmode ! on the USE insn for the return register. */ for (tmpmode = GET_CLASS_NARROWEST_MODE (MODE_INT); tmpmode != VOIDmode; tmpmode = GET_MODE_WIDER_MODE (tmpmode)) *************** static int *** 3129,3137 **** tail_recursion_args (actuals, formals) tree actuals, formals; { ! register tree a = actuals, f = formals; ! register int i; ! register rtx *argvec; /* Check that number and types of actuals are compatible with the formals. This is not always true in valid C code. --- 3297,3305 ---- tail_recursion_args (actuals, formals) tree actuals, formals; { ! tree a = actuals, f = formals; ! int i; ! rtx *argvec; /* Check that number and types of actuals are compatible with the formals. This is not always true in valid C code. *************** tail_recursion_args (actuals, formals) *** 3164,3170 **** for (a = actuals, i = 0; a; a = TREE_CHAIN (a), i++) { int copy = 0; ! register int j; for (f = formals, j = 0; j < i; f = TREE_CHAIN (f), j++) if (reg_mentioned_p (DECL_RTL (f), argvec[i])) { --- 3332,3338 ---- for (a = actuals, i = 0; a; a = TREE_CHAIN (a), i++) { int copy = 0; ! int j; for (f = formals, j = 0; j < i; f = TREE_CHAIN (f), j++) if (reg_mentioned_p (DECL_RTL (f), argvec[i])) { *************** expand_start_bindings_and_block (flags, *** 3229,3239 **** /* Create a note to mark the beginning of the block. */ if (block_flag) { ! note = emit_note (NULL_PTR, NOTE_INSN_BLOCK_BEG); NOTE_BLOCK (note) = block; } else ! note = emit_note (NULL_PTR, NOTE_INSN_DELETED); /* Make an entry on block_stack for the block we are entering. */ --- 3397,3407 ---- /* Create a note to mark the beginning of the block. */ if (block_flag) { ! note = emit_note (NULL, NOTE_INSN_BLOCK_BEG); NOTE_BLOCK (note) = block; } else ! note = emit_note (NULL, NOTE_INSN_DELETED); /* Make an entry on block_stack for the block we are entering. */ *************** expand_start_bindings_and_block (flags, *** 3254,3260 **** fix this is to just insert another instruction here, so that the instructions inserted after the last unconditional cleanup are never the last instruction. */ ! emit_note (NULL_PTR, NOTE_INSN_DELETED); thisblock->data.block.cleanup_ptr = &thisblock->data.block.cleanups; if (block_stack --- 3422,3428 ---- fix this is to just insert another instruction here, so that the instructions inserted after the last unconditional cleanup are never the last instruction. */ ! emit_note (NULL, NOTE_INSN_DELETED); thisblock->data.block.cleanup_ptr = &thisblock->data.block.cleanups; if (block_stack *************** expand_end_target_temps () *** 3319,3325 **** int is_body_block (stmt) ! register tree stmt; { if (TREE_CODE (stmt) == BLOCK) { --- 3487,3493 ---- int is_body_block (stmt) ! tree stmt; { if (TREE_CODE (stmt) == BLOCK) { *************** conditional_context () *** 3347,3352 **** --- 3515,3529 ---- return block_stack && block_stack->data.block.conditional_code; } + /* Return an opaque pointer to the current nesting level, so frontend code + can check its own sanity. */ + + struct nesting * + current_nesting_level () + { + return cfun ? block_stack : 0; + } + /* Emit a handler label for a nonlocal goto handler. Also emit code to store the handler label in SLOT before BEFORE_INSN. */ *************** expand_nl_handler_label (slot, before_in *** 3357,3363 **** rtx insns; rtx handler_label = gen_label_rtx (); ! /* Don't let jump_optimize delete the handler. */ LABEL_PRESERVE_P (handler_label) = 1; start_sequence (); --- 3534,3540 ---- rtx insns; rtx handler_label = gen_label_rtx (); ! /* Don't let cleanup_cfg delete the handler. */ LABEL_PRESERVE_P (handler_label) = 1; start_sequence (); *************** expand_nl_goto_receiver () *** 3401,3407 **** that if such an elimination is present, it can always be used. This is the case on all known machines; if we don't make this assumption, we do unnecessary saving on many machines. */ ! static struct elims {int from, to;} elim_regs[] = ELIMINABLE_REGS; size_t i; for (i = 0; i < ARRAY_SIZE (elim_regs); i++) --- 3578,3584 ---- that if such an elimination is present, it can always be used. This is the case on all known machines; if we don't make this assumption, we do unnecessary saving on many machines. */ ! static const struct elims {const int from, to;} elim_regs[] = ELIMINABLE_REGS; size_t i; for (i = 0; i < ARRAY_SIZE (elim_regs); i++) *************** expand_nl_goto_receiver () *** 3413,3428 **** #endif { /* Now restore our arg pointer from the address at which it ! was saved in our stack frame. ! If there hasn't be space allocated for it yet, make ! some now. */ ! if (arg_pointer_save_area == 0) ! arg_pointer_save_area ! = assign_stack_local (Pmode, GET_MODE_SIZE (Pmode), 0); emit_move_insn (virtual_incoming_args_rtx, ! /* We need a pseudo here, or else ! instantiate_virtual_regs_1 complains. */ ! copy_to_reg (arg_pointer_save_area)); } } #endif --- 3590,3598 ---- #endif { /* Now restore our arg pointer from the address at which it ! was saved in our stack frame. */ emit_move_insn (virtual_incoming_args_rtx, ! copy_to_reg (get_arg_pointer_save_area (cfun))); } } #endif *************** expand_nl_goto_receivers (thisblock) *** 3503,3511 **** if (any_invalid) { expand_nl_goto_receiver (); ! emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "abort"), 0, ! VOIDmode, 0); ! emit_barrier (); } nonlocal_goto_handler_labels = label_list; --- 3673,3679 ---- if (any_invalid) { expand_nl_goto_receiver (); ! expand_builtin_trap (); } nonlocal_goto_handler_labels = label_list; *************** expand_end_bindings (vars, mark_ends, do *** 3549,3555 **** int mark_ends; int dont_jump_in; { ! register struct nesting *thisblock = block_stack; /* If any of the variables in this scope were not used, warn the user. */ --- 3717,3723 ---- int mark_ends; int dont_jump_in; { ! struct nesting *thisblock = block_stack; /* If any of the variables in this scope were not used, warn the user. */ *************** expand_end_bindings (vars, mark_ends, do *** 3653,3659 **** if (mark_ends) { ! rtx note = emit_note (NULL_PTR, NOTE_INSN_BLOCK_END); NOTE_BLOCK (note) = NOTE_BLOCK (thisblock->data.block.first_insn); } else --- 3821,3827 ---- if (mark_ends) { ! rtx note = emit_note (NULL, NOTE_INSN_BLOCK_END); NOTE_BLOCK (note) = NOTE_BLOCK (thisblock->data.block.first_insn); } else *************** save_stack_pointer () *** 3694,3714 **** void expand_decl (decl) ! register tree decl; { struct nesting *thisblock; tree type; type = TREE_TYPE (decl); ! /* Only automatic variables need any expansion done. ! Static and external variables, and external functions, ! will be handled by `assemble_variable' (called from finish_decl). ! TYPE_DECL and CONST_DECL require nothing. ! PARM_DECLs are handled in `assign_parms'. */ if (TREE_CODE (decl) != VAR_DECL) return; if (TREE_STATIC (decl) || DECL_EXTERNAL (decl)) return; --- 3862,3892 ---- void expand_decl (decl) ! tree decl; { struct nesting *thisblock; tree type; type = TREE_TYPE (decl); ! /* For a CONST_DECL, set mode, alignment, and sizes from those of the ! type in case this node is used in a reference. */ ! if (TREE_CODE (decl) == CONST_DECL) ! { ! DECL_MODE (decl) = TYPE_MODE (type); ! DECL_ALIGN (decl) = TYPE_ALIGN (type); ! DECL_SIZE (decl) = TYPE_SIZE (type); ! DECL_SIZE_UNIT (decl) = TYPE_SIZE_UNIT (type); ! return; ! } + /* Otherwise, only automatic variables need any expansion done. Static and + external variables, and external functions, will be handled by + `assemble_variable' (called from finish_decl). TYPE_DECL requires + nothing. PARM_DECLs are handled in `assign_parms'. */ if (TREE_CODE (decl) != VAR_DECL) return; + if (TREE_STATIC (decl) || DECL_EXTERNAL (decl)) return; *************** expand_decl (decl) *** 3722,3736 **** else if (DECL_SIZE (decl) == 0) /* Variable with incomplete type. */ { if (DECL_INITIAL (decl) == 0) /* Error message was already done; now avoid a crash. */ ! SET_DECL_RTL (decl, gen_rtx_MEM (BLKmode, const0_rtx)); else /* An initializer is going to decide the size of this array. Until we know the size, represent its address with a reg. */ ! SET_DECL_RTL (decl, gen_rtx_MEM (BLKmode, gen_reg_rtx (Pmode))); ! set_mem_attributes (DECL_RTL (decl), decl, 1); } else if (DECL_MODE (decl) != BLKmode /* If -ffloat-store, don't put explicit float vars --- 3900,3916 ---- else if (DECL_SIZE (decl) == 0) /* Variable with incomplete type. */ { + rtx x; if (DECL_INITIAL (decl) == 0) /* Error message was already done; now avoid a crash. */ ! x = gen_rtx_MEM (BLKmode, const0_rtx); else /* An initializer is going to decide the size of this array. Until we know the size, represent its address with a reg. */ ! x = gen_rtx_MEM (BLKmode, gen_reg_rtx (Pmode)); ! set_mem_attributes (x, decl, 1); ! SET_DECL_RTL (decl, x); } else if (DECL_MODE (decl) != BLKmode /* If -ffloat-store, don't put explicit float vars *************** expand_decl (decl) *** 3738,3746 **** && !(flag_float_store && TREE_CODE (type) == REAL_TYPE) && ! TREE_THIS_VOLATILE (decl) ! && (DECL_REGISTER (decl) || optimize) ! /* if -fcheck-memory-usage, check all variables. */ ! && ! current_function_check_memory_usage) { /* Automatic variable that can go in a register. */ int unsignedp = TREE_UNSIGNED (type); --- 3918,3924 ---- && !(flag_float_store && TREE_CODE (type) == REAL_TYPE) && ! TREE_THIS_VOLATILE (decl) ! && (DECL_REGISTER (decl) || optimize)) { /* Automatic variable that can go in a register. */ int unsignedp = TREE_UNSIGNED (type); *************** expand_decl (decl) *** 3748,3753 **** --- 3926,3940 ---- = promote_mode (type, DECL_MODE (decl), &unsignedp, 0); SET_DECL_RTL (decl, gen_reg_rtx (reg_mode)); + + if (GET_CODE (DECL_RTL (decl)) == REG) + REGNO_DECL (REGNO (DECL_RTL (decl))) = decl; + else if (GET_CODE (DECL_RTL (decl)) == CONCAT) + { + REGNO_DECL (REGNO (XEXP (DECL_RTL (decl), 0))) = decl; + REGNO_DECL (REGNO (XEXP (DECL_RTL (decl), 1))) = decl; + } + mark_user_reg (DECL_RTL (decl)); if (POINTER_TYPE_P (type)) *************** expand_decl (decl) *** 3769,3774 **** --- 3956,3962 ---- /* Variable of fixed size that goes on the stack. */ rtx oldaddr = 0; rtx addr; + rtx x; /* If we previously made RTL for this decl, it must be an array whose size was determined by the initializer. *************** expand_decl (decl) *** 3782,3795 **** oldaddr = XEXP (DECL_RTL (decl), 0); } - SET_DECL_RTL (decl, - assign_temp (TREE_TYPE (decl), 1, 1, 1)); - /* Set alignment we actually gave this decl. */ DECL_ALIGN (decl) = (DECL_MODE (decl) == BLKmode ? BIGGEST_ALIGNMENT : GET_MODE_BITSIZE (DECL_MODE (decl))); DECL_USER_ALIGN (decl) = 0; if (oldaddr) { addr = force_operand (XEXP (DECL_RTL (decl), 0), oldaddr); --- 3970,3984 ---- oldaddr = XEXP (DECL_RTL (decl), 0); } /* Set alignment we actually gave this decl. */ DECL_ALIGN (decl) = (DECL_MODE (decl) == BLKmode ? BIGGEST_ALIGNMENT : GET_MODE_BITSIZE (DECL_MODE (decl))); DECL_USER_ALIGN (decl) = 0; + x = assign_temp (decl, 1, 1, 1); + set_mem_attributes (x, decl, 1); + SET_DECL_RTL (decl, x); + if (oldaddr) { addr = force_operand (XEXP (DECL_RTL (decl), 0), oldaddr); *************** expand_decl (decl) *** 3800,3806 **** else /* Dynamic-size object: must push space on the stack. */ { ! rtx address, size; /* Record the stack pointer on entry to block, if have not already done so. */ --- 3989,3995 ---- else /* Dynamic-size object: must push space on the stack. */ { ! rtx address, size, x; /* Record the stack pointer on entry to block, if have not already done so. */ *************** expand_decl (decl) *** 3825,3833 **** TYPE_ALIGN (TREE_TYPE (decl))); /* Reference the variable indirect through that rtx. */ ! SET_DECL_RTL (decl, gen_rtx_MEM (DECL_MODE (decl), address)); - set_mem_attributes (DECL_RTL (decl), decl, 1); /* Indicate the alignment we actually gave this variable. */ #ifdef STACK_BOUNDARY --- 4014,4023 ---- TYPE_ALIGN (TREE_TYPE (decl))); /* Reference the variable indirect through that rtx. */ ! x = gen_rtx_MEM (DECL_MODE (decl), address); ! set_mem_attributes (x, decl, 1); ! SET_DECL_RTL (decl, x); /* Indicate the alignment we actually gave this variable. */ #ifdef STACK_BOUNDARY *************** expand_decl_init (decl) *** 3847,3867 **** { int was_used = TREE_USED (decl); ! /* If this is a CONST_DECL, we don't have to generate any code, but ! if DECL_INITIAL is a constant, call expand_expr to force TREE_CST_RTL ! to be set while in the obstack containing the constant. If we don't ! do this, we can lose if we have functions nested three deep and the middle ! function makes a CONST_DECL whose DECL_INITIAL is a STRING_CST while ! the innermost function is the first to expand that STRING_CST. */ ! if (TREE_CODE (decl) == CONST_DECL) ! { ! if (DECL_INITIAL (decl) && TREE_CONSTANT (DECL_INITIAL (decl))) ! expand_expr (DECL_INITIAL (decl), NULL_RTX, VOIDmode, ! EXPAND_INITIALIZER); ! return; ! } ! ! if (TREE_STATIC (decl)) return; /* Compute and store the initial value now. */ --- 4037,4046 ---- { int was_used = TREE_USED (decl); ! /* If this is a CONST_DECL, we don't have to generate any code. Likewise ! for static decls. */ ! if (TREE_CODE (decl) == CONST_DECL ! || TREE_STATIC (decl)) return; /* Compute and store the initial value now. */ *************** expand_decl_init (decl) *** 3900,3906 **** leave the current scope. If CLEANUP is nonzero and DECL is zero, we record a cleanup ! that is not associated with any particular variable. */ int expand_decl_cleanup (decl, cleanup) --- 4079,4085 ---- leave the current scope. If CLEANUP is nonzero and DECL is zero, we record a cleanup ! that is not associated with any particular variable. */ int expand_decl_cleanup (decl, cleanup) *************** expand_decl_cleanup (decl, cleanup) *** 3989,4000 **** fix this is to just insert another instruction here, so that the instructions inserted after the last unconditional cleanup are never the last instruction. */ ! emit_note (NULL_PTR, NOTE_INSN_DELETED); thisblock->data.block.cleanup_ptr = &thisblock->data.block.cleanups; } } return 1; } /* DECL is an anonymous union. CLEANUP is a cleanup for DECL. DECL_ELTS is the list of elements that belong to DECL's type. --- 4168,4196 ---- fix this is to just insert another instruction here, so that the instructions inserted after the last unconditional cleanup are never the last instruction. */ ! emit_note (NULL, NOTE_INSN_DELETED); thisblock->data.block.cleanup_ptr = &thisblock->data.block.cleanups; } } return 1; } + + /* Like expand_decl_cleanup, but maybe only run the cleanup if an exception + is thrown. */ + + int + expand_decl_cleanup_eh (decl, cleanup, eh_only) + tree decl, cleanup; + int eh_only; + { + int ret = expand_decl_cleanup (decl, cleanup); + if (cleanup && ret) + { + tree node = block_stack->data.block.cleanups; + CLEANUP_EH_ONLY (node) = eh_only; + } + return ret; + } /* DECL is an anonymous union. CLEANUP is a cleanup for DECL. DECL_ELTS is the list of elements that belong to DECL's type. *************** expand_anon_union_decl (decl, cleanup, d *** 4027,4032 **** --- 4223,4233 ---- tree cleanup_elt = TREE_PURPOSE (t); enum machine_mode mode = TYPE_MODE (TREE_TYPE (decl_elt)); + /* If any of the elements are addressable, so is the entire + union. */ + if (TREE_USED (decl_elt)) + TREE_USED (decl) = 1; + /* Propagate the union's alignment to the elements. */ DECL_ALIGN (decl_elt) = DECL_ALIGN (decl); DECL_USER_ALIGN (decl_elt) = DECL_USER_ALIGN (decl); *************** expand_anon_union_decl (decl, cleanup, d *** 4045,4062 **** if (mode == GET_MODE (x)) SET_DECL_RTL (decl_elt, x); else ! { ! SET_DECL_RTL (decl_elt, ! gen_rtx_MEM (mode, copy_rtx (XEXP (x, 0)))); ! MEM_COPY_ATTRIBUTES (DECL_RTL (decl_elt), x); ! } } else if (GET_CODE (x) == REG) { if (mode == GET_MODE (x)) SET_DECL_RTL (decl_elt, x); else ! SET_DECL_RTL (decl_elt, gen_rtx_SUBREG (mode, x, 0)); } else abort (); --- 4246,4259 ---- if (mode == GET_MODE (x)) SET_DECL_RTL (decl_elt, x); else ! SET_DECL_RTL (decl_elt, adjust_address_nv (x, mode, 0)); } else if (GET_CODE (x) == REG) { if (mode == GET_MODE (x)) SET_DECL_RTL (decl_elt, x); else ! SET_DECL_RTL (decl_elt, gen_lowpart_SUBREG (mode, x)); } else abort (); *************** expand_cleanups (list, dont_do, in_fixup *** 4102,4108 **** if (! in_fixup && using_eh_for_cleanups_p) expand_eh_region_end_cleanup (TREE_VALUE (tail)); ! if (reachable) { /* Cleanups may be run multiple times. For example, when exiting a binding contour, we expand the --- 4299,4305 ---- if (! in_fixup && using_eh_for_cleanups_p) expand_eh_region_end_cleanup (TREE_VALUE (tail)); ! if (reachable && !CLEANUP_EH_ONLY (tail)) { /* Cleanups may be run multiple times. For example, when exiting a binding contour, we expand the *************** expand_start_case (exit_flag, expr, type *** 4232,4238 **** tree type; const char *printname; { ! register struct nesting *thiscase = ALLOC_NESTING (); /* Make an entry on case_stack for the case we are entering. */ --- 4429,4435 ---- tree type; const char *printname; { ! struct nesting *thiscase = ALLOC_NESTING (); /* Make an entry on case_stack for the case we are entering. */ *************** expand_start_case (exit_flag, expr, type *** 4254,4260 **** /* Make sure case_stmt.start points to something that won't need any transformation before expand_end_case. */ if (GET_CODE (get_last_insn ()) != NOTE) ! emit_note (NULL_PTR, NOTE_INSN_DELETED); thiscase->data.case_stmt.start = get_last_insn (); --- 4451,4457 ---- /* Make sure case_stmt.start points to something that won't need any transformation before expand_end_case. */ if (GET_CODE (get_last_insn ()) != NOTE) ! emit_note (NULL, NOTE_INSN_DELETED); thiscase->data.case_stmt.start = get_last_insn (); *************** expand_start_case (exit_flag, expr, type *** 4269,4275 **** void expand_start_case_dummy () { ! register struct nesting *thiscase = ALLOC_NESTING (); /* Make an entry on case_stack for the dummy. */ --- 4466,4472 ---- void expand_start_case_dummy () { ! struct nesting *thiscase = ALLOC_NESTING (); /* Make an entry on case_stack for the dummy. */ *************** check_seenlabel () *** 4360,4368 **** int pushcase (value, converter, label, duplicate) ! register tree value; tree (*converter) PARAMS ((tree, tree)); ! register tree label; tree *duplicate; { tree index_type; --- 4557,4565 ---- int pushcase (value, converter, label, duplicate) ! tree value; tree (*converter) PARAMS ((tree, tree)); ! tree label; tree *duplicate; { tree index_type; *************** pushcase (value, converter, label, dupli *** 4410,4418 **** int pushcase_range (value1, value2, converter, label, duplicate) ! register tree value1, value2; tree (*converter) PARAMS ((tree, tree)); ! register tree label; tree *duplicate; { tree index_type; --- 4607,4615 ---- int pushcase_range (value1, value2, converter, label, duplicate) ! tree value1, value2; tree (*converter) PARAMS ((tree, tree)); ! tree label; tree *duplicate; { tree index_type; *************** add_case_node (low, high, label, duplica *** 4714,4733 **** /* Returns the number of possible values of TYPE. Returns -1 if the number is unknown, variable, or if the number does not fit in a HOST_WIDE_INT. ! Sets *SPARENESS to 2 if TYPE is an ENUMERAL_TYPE whose values do not increase monotonically (there may be duplicates); to 1 if the values increase monotonically, but not always by 1; otherwise sets it to 0. */ HOST_WIDE_INT ! all_cases_count (type, spareness) tree type; ! int *spareness; { tree t; HOST_WIDE_INT count, minval, lastval; ! *spareness = 0; switch (TREE_CODE (type)) { --- 4911,4930 ---- /* Returns the number of possible values of TYPE. Returns -1 if the number is unknown, variable, or if the number does not fit in a HOST_WIDE_INT. ! Sets *SPARSENESS to 2 if TYPE is an ENUMERAL_TYPE whose values do not increase monotonically (there may be duplicates); to 1 if the values increase monotonically, but not always by 1; otherwise sets it to 0. */ HOST_WIDE_INT ! all_cases_count (type, sparseness) tree type; ! int *sparseness; { tree t; HOST_WIDE_INT count, minval, lastval; ! *sparseness = 0; switch (TREE_CODE (type)) { *************** all_cases_count (type, spareness) *** 4766,4776 **** { HOST_WIDE_INT thisval = tree_low_cst (TREE_VALUE (t), 0); ! if (*spareness == 2 || thisval < lastval) ! *spareness = 2; else if (thisval != minval + count) ! *spareness = 1; count++; } } --- 4963,4974 ---- { HOST_WIDE_INT thisval = tree_low_cst (TREE_VALUE (t), 0); ! if (*sparseness == 2 || thisval <= lastval) ! *sparseness = 2; else if (thisval != minval + count) ! *sparseness = 1; + lastval = thisval; count++; } } *************** mark_seen_cases (type, cases_seen, count *** 4803,4809 **** tree next_node_to_try = NULL_TREE; HOST_WIDE_INT next_node_offset = 0; ! register struct case_node *n, *root = case_stack->data.case_stmt.case_list; tree val = make_node (INTEGER_CST); TREE_TYPE (val) = type; --- 5001,5007 ---- tree next_node_to_try = NULL_TREE; HOST_WIDE_INT next_node_offset = 0; ! struct case_node *n, *root = case_stack->data.case_stmt.case_list; tree val = make_node (INTEGER_CST); TREE_TYPE (val) = type; *************** void *** 4932,4943 **** check_for_full_enumeration_handling (type) tree type; { ! register struct case_node *n; ! register tree chain; ! #if 0 /* variable used by 'if 0'ed code below. */ ! register struct case_node **l; ! int all_values = 1; ! #endif /* True iff the selector type is a numbered set mode. */ int sparseness = 0; --- 5130,5137 ---- check_for_full_enumeration_handling (type) tree type; { ! struct case_node *n; ! tree chain; /* True iff the selector type is a numbered set mode. */ int sparseness = 0; *************** check_for_full_enumeration_handling (typ *** 4962,4968 **** /* We deliberately use calloc here, not cmalloc, so that we can suppress this optimization if we don't have enough memory rather than aborting, as xmalloc would do. */ ! && (cases_seen = (unsigned char *) calloc (bytes_needed, 1)) != NULL) { HOST_WIDE_INT i; tree v = TYPE_VALUES (type); --- 5156,5163 ---- /* We deliberately use calloc here, not cmalloc, so that we can suppress this optimization if we don't have enough memory rather than aborting, as xmalloc would do. */ ! && (cases_seen = ! (unsigned char *) really_call_calloc (bytes_needed, 1)) != NULL) { HOST_WIDE_INT i; tree v = TYPE_VALUES (type); *************** check_for_full_enumeration_handling (typ *** 5034,5061 **** } } } - - #if 0 - /* ??? This optimization is disabled because it causes valid programs to - fail. ANSI C does not guarantee that an expression with enum type - will have a value that is the same as one of the enumeration literals. */ - - /* If all values were found as case labels, make one of them the default - label. Thus, this switch will never fall through. We arbitrarily pick - the last one to make the default since this is likely the most - efficient choice. */ - - if (all_values) - { - for (l = &case_stack->data.case_stmt.case_list; - (*l)->right != 0; - l = &(*l)->right) - ; - - case_stack->data.case_stmt.default_label = (*l)->code_label; - *l = 0; - } - #endif /* 0 */ } /* Free CN, and its children. */ --- 5229,5234 ---- *************** free_case_nodes (cn) *** 5073,5097 **** } /* Terminate a case (Pascal) or switch (C) statement in which ORIG_INDEX is the expression to be tested. Generate the code to test it and jump to the right place. */ void ! expand_end_case (orig_index) ! tree orig_index; { ! tree minval = NULL_TREE, maxval = NULL_TREE, range = NULL_TREE, orig_minval; rtx default_label = 0; ! register struct case_node *n; unsigned int count; rtx index; rtx table_label; int ncases; rtx *labelvec; ! register int i; ! rtx before_case; ! register struct nesting *thiscase = case_stack; tree index_expr, index_type; int unsignedp; --- 5246,5273 ---- } + /* Terminate a case (Pascal) or switch (C) statement in which ORIG_INDEX is the expression to be tested. + If ORIG_TYPE is not NULL, it is the original ORIG_INDEX + type as given in the source before any compiler conversions. Generate the code to test it and jump to the right place. */ void ! expand_end_case_type (orig_index, orig_type) ! tree orig_index, orig_type; { ! tree minval = NULL_TREE, maxval = NULL_TREE, range = NULL_TREE; rtx default_label = 0; ! struct case_node *n; unsigned int count; rtx index; rtx table_label; int ncases; rtx *labelvec; ! int i; ! rtx before_case, end; ! struct nesting *thiscase = case_stack; tree index_expr, index_type; int unsignedp; *************** expand_end_case (orig_index) *** 5103,5108 **** --- 5279,5286 ---- index_expr = thiscase->data.case_stmt.index_expr; index_type = TREE_TYPE (index_expr); unsignedp = TREE_UNSIGNED (index_type); + if (orig_type == NULL) + orig_type = TREE_TYPE (orig_index); do_pending_stack_adjust (); *************** expand_end_case (orig_index) *** 5123,5131 **** No sense trying this if there's a default case, however. */ if (!thiscase->data.case_stmt.default_label ! && TREE_CODE (TREE_TYPE (orig_index)) == ENUMERAL_TYPE && TREE_CODE (index_expr) != INTEGER_CST) ! check_for_full_enumeration_handling (TREE_TYPE (orig_index)); /* If we don't have a default-label, create one here, after the body of the switch. */ --- 5301,5309 ---- No sense trying this if there's a default case, however. */ if (!thiscase->data.case_stmt.default_label ! && TREE_CODE (orig_type) == ENUMERAL_TYPE && TREE_CODE (index_expr) != INTEGER_CST) ! check_for_full_enumeration_handling (orig_type); /* If we don't have a default-label, create one here, after the body of the switch. */ *************** expand_end_case (orig_index) *** 5181,5188 **** count++; } - orig_minval = minval; - /* Compute span of values. */ if (count != 0) range = fold (build (MINUS_EXPR, index_type, maxval, minval)); --- 5359,5364 ---- *************** expand_end_case (orig_index) *** 5201,5218 **** If the switch-index is a constant, do it this way because we can optimize it. */ ! #ifndef CASE_VALUES_THRESHOLD ! #ifdef HAVE_casesi ! #define CASE_VALUES_THRESHOLD (HAVE_casesi ? 4 : 5) ! #else ! /* If machine does not have a case insn that compares the ! bounds, this means extra overhead for dispatch tables ! which raises the threshold for using them. */ ! #define CASE_VALUES_THRESHOLD 5 ! #endif /* HAVE_casesi */ ! #endif /* CASE_VALUES_THRESHOLD */ ! ! else if (count < CASE_VALUES_THRESHOLD || compare_tree_int (range, 10 * count) > 0 /* RANGE may be signed, and really large ranges will show up as negative numbers. */ --- 5377,5383 ---- If the switch-index is a constant, do it this way because we can optimize it. */ ! else if (count < case_values_threshold () || compare_tree_int (range, 10 * count) > 0 /* RANGE may be signed, and really large ranges will show up as negative numbers. */ *************** expand_end_case (orig_index) *** 5221,5232 **** || flag_pic #endif || TREE_CODE (index_expr) == INTEGER_CST - /* These will reduce to a constant. */ - || (TREE_CODE (index_expr) == CALL_EXPR - && TREE_CODE (TREE_OPERAND (index_expr, 0)) == ADDR_EXPR - && TREE_CODE (TREE_OPERAND (TREE_OPERAND (index_expr, 0), 0)) == FUNCTION_DECL - && DECL_BUILT_IN_CLASS (TREE_OPERAND (TREE_OPERAND (index_expr, 0), 0)) == BUILT_IN_NORMAL - && DECL_FUNCTION_CODE (TREE_OPERAND (TREE_OPERAND (index_expr, 0), 0)) == BUILT_IN_CLASSIFY_TYPE) || (TREE_CODE (index_expr) == COMPOUND_EXPR && TREE_CODE (TREE_OPERAND (index_expr, 1)) == INTEGER_CST)) { --- 5386,5391 ---- *************** expand_end_case (orig_index) *** 5238,5251 **** generate the conversion. */ if (GET_MODE_CLASS (GET_MODE (index)) == MODE_INT ! && (cmp_optab->handlers[(int) GET_MODE (index)].insn_code ! == CODE_FOR_nothing)) { enum machine_mode wider_mode; for (wider_mode = GET_MODE (index); wider_mode != VOIDmode; wider_mode = GET_MODE_WIDER_MODE (wider_mode)) ! if (cmp_optab->handlers[(int) wider_mode].insn_code ! != CODE_FOR_nothing) { index = convert_to_mode (wider_mode, index, unsignedp); break; --- 5397,5408 ---- generate the conversion. */ if (GET_MODE_CLASS (GET_MODE (index)) == MODE_INT ! && ! have_insn_for (COMPARE, GET_MODE (index))) { enum machine_mode wider_mode; for (wider_mode = GET_MODE (index); wider_mode != VOIDmode; wider_mode = GET_MODE_WIDER_MODE (wider_mode)) ! if (have_insn_for (COMPARE, wider_mode)) { index = convert_to_mode (wider_mode, index, unsignedp); break; *************** expand_end_case (orig_index) *** 5272,5278 **** } /* For constant index expressions we need only ! issue a unconditional branch to the appropriate target code. The job of removing any unreachable code is left to the optimisation phase if the "-O" option is specified. */ --- 5429,5435 ---- } /* For constant index expressions we need only ! issue an unconditional branch to the appropriate target code. The job of removing any unreachable code is left to the optimisation phase if the "-O" option is specified. */ *************** expand_end_case (orig_index) *** 5303,5312 **** default code is emitted. */ use_cost_table ! = (TREE_CODE (TREE_TYPE (orig_index)) != ENUMERAL_TYPE && estimate_case_costs (thiscase->data.case_stmt.case_list)); ! balance_case_nodes (&thiscase->data.case_stmt.case_list, ! NULL_PTR); emit_case_nodes (index, thiscase->data.case_stmt.case_list, default_label, index_type); emit_jump_if_reachable (default_label); --- 5460,5468 ---- default code is emitted. */ use_cost_table ! = (TREE_CODE (orig_type) != ENUMERAL_TYPE && estimate_case_costs (thiscase->data.case_stmt.case_list)); ! balance_case_nodes (&thiscase->data.case_stmt.case_list, NULL); emit_case_nodes (index, thiscase->data.case_stmt.case_list, default_label, index_type); emit_jump_if_reachable (default_label); *************** expand_end_case (orig_index) *** 5314,5425 **** } else { ! int win = 0; ! #ifdef HAVE_casesi ! if (HAVE_casesi) ! { ! enum machine_mode index_mode = SImode; ! int index_bits = GET_MODE_BITSIZE (index_mode); ! rtx op1, op2; ! enum machine_mode op_mode; ! ! /* Convert the index to SImode. */ ! if (GET_MODE_BITSIZE (TYPE_MODE (index_type)) ! > GET_MODE_BITSIZE (index_mode)) ! { ! enum machine_mode omode = TYPE_MODE (index_type); ! rtx rangertx = expand_expr (range, NULL_RTX, VOIDmode, 0); ! ! /* We must handle the endpoints in the original mode. */ ! index_expr = build (MINUS_EXPR, index_type, ! index_expr, minval); ! minval = integer_zero_node; ! index = expand_expr (index_expr, NULL_RTX, VOIDmode, 0); ! emit_cmp_and_jump_insns (rangertx, index, LTU, NULL_RTX, ! omode, 1, 0, default_label); ! /* Now we can safely truncate. */ ! index = convert_to_mode (index_mode, index, 0); ! } ! else ! { ! if (TYPE_MODE (index_type) != index_mode) ! { ! index_expr = convert (type_for_size (index_bits, 0), ! index_expr); ! index_type = TREE_TYPE (index_expr); ! } ! ! index = expand_expr (index_expr, NULL_RTX, VOIDmode, 0); ! } ! emit_queue (); ! index = protect_from_queue (index, 0); ! do_pending_stack_adjust (); ! ! op_mode = insn_data[(int) CODE_FOR_casesi].operand[0].mode; ! if (! (*insn_data[(int) CODE_FOR_casesi].operand[0].predicate) ! (index, op_mode)) ! index = copy_to_mode_reg (op_mode, index); ! ! op1 = expand_expr (minval, NULL_RTX, VOIDmode, 0); ! ! op_mode = insn_data[(int) CODE_FOR_casesi].operand[1].mode; ! if (! (*insn_data[(int) CODE_FOR_casesi].operand[1].predicate) ! (op1, op_mode)) ! op1 = copy_to_mode_reg (op_mode, op1); ! ! op2 = expand_expr (range, NULL_RTX, VOIDmode, 0); ! ! op_mode = insn_data[(int) CODE_FOR_casesi].operand[2].mode; ! if (! (*insn_data[(int) CODE_FOR_casesi].operand[2].predicate) ! (op2, op_mode)) ! op2 = copy_to_mode_reg (op_mode, op2); ! ! emit_jump_insn (gen_casesi (index, op1, op2, ! table_label, default_label)); ! win = 1; ! } ! #endif ! #ifdef HAVE_tablejump ! if (! win && HAVE_tablejump) { index_type = thiscase->data.case_stmt.nominal_type; - index_expr = fold (build (MINUS_EXPR, index_type, - convert (index_type, index_expr), - convert (index_type, minval))); - index = expand_expr (index_expr, NULL_RTX, VOIDmode, 0); - emit_queue (); - index = protect_from_queue (index, 0); - do_pending_stack_adjust (); ! do_tablejump (index, TYPE_MODE (index_type), ! expand_expr (range, NULL_RTX, VOIDmode, 0), ! table_label, default_label); ! win = 1; ! } ! #endif ! if (! win) ! abort (); /* Get table of labels to jump to, in order of case index. */ ! ncases = TREE_INT_CST_LOW (range) + 1; labelvec = (rtx *) alloca (ncases * sizeof (rtx)); memset ((char *) labelvec, 0, ncases * sizeof (rtx)); for (n = thiscase->data.case_stmt.case_list; n; n = n->right) { ! register HOST_WIDE_INT i ! = TREE_INT_CST_LOW (n->low) - TREE_INT_CST_LOW (orig_minval); ! while (1) ! { ! labelvec[i] ! = gen_rtx_LABEL_REF (Pmode, label_rtx (n->code_label)); ! if (i + TREE_INT_CST_LOW (orig_minval) ! == TREE_INT_CST_LOW (n->high)) ! break; ! i++; ! } } /* Fill in the gaps with the default. */ --- 5470,5517 ---- } else { ! if (! try_casesi (index_type, index_expr, minval, range, ! table_label, default_label)) { index_type = thiscase->data.case_stmt.nominal_type; ! /* Index jumptables from zero for suitable values of ! minval to avoid a subtraction. */ ! if (! optimize_size ! && compare_tree_int (minval, 0) > 0 ! && compare_tree_int (minval, 3) < 0) ! { ! minval = integer_zero_node; ! range = maxval; ! } + if (! try_tablejump (index_type, index_expr, minval, range, + table_label, default_label)) + abort (); + } + /* Get table of labels to jump to, in order of case index. */ ! ncases = tree_low_cst (range, 0) + 1; labelvec = (rtx *) alloca (ncases * sizeof (rtx)); memset ((char *) labelvec, 0, ncases * sizeof (rtx)); for (n = thiscase->data.case_stmt.case_list; n; n = n->right) { ! /* Compute the low and high bounds relative to the minimum ! value since that should fit in a HOST_WIDE_INT while the ! actual values may not. */ ! HOST_WIDE_INT i_low ! = tree_low_cst (fold (build (MINUS_EXPR, index_type, ! n->low, minval)), 1); ! HOST_WIDE_INT i_high ! = tree_low_cst (fold (build (MINUS_EXPR, index_type, ! n->high, minval)), 1); ! HOST_WIDE_INT i; ! for (i = i_low; i <= i_high; i ++) ! labelvec[i] ! = gen_rtx_LABEL_REF (Pmode, label_rtx (n->code_label)); } /* Fill in the gaps with the default. */ *************** expand_end_case (orig_index) *** 5449,5456 **** #endif } ! before_case = squeeze_notes (NEXT_INSN (before_case), get_last_insn ()); ! reorder_insns (before_case, get_last_insn (), thiscase->data.case_stmt.start); } else --- 5541,5551 ---- #endif } ! before_case = NEXT_INSN (before_case); ! end = get_last_insn (); ! if (squeeze_notes (&before_case, &end)) ! abort (); ! reorder_insns (before_case, end, thiscase->data.case_stmt.start); } else *************** do_jump_if_equal (op1, op2, label, unsig *** 5495,5514 **** rtx op1, op2, label; int unsignedp; { ! if (GET_CODE (op1) == CONST_INT ! && GET_CODE (op2) == CONST_INT) { if (INTVAL (op1) == INTVAL (op2)) emit_jump (label); } else ! { ! enum machine_mode mode = GET_MODE (op1); ! if (mode == VOIDmode) ! mode = GET_MODE (op2); ! emit_cmp_and_jump_insns (op1, op2, EQ, NULL_RTX, mode, unsignedp, ! 0, label); ! } } /* Not all case values are encountered equally. This function --- 5590,5605 ---- rtx op1, op2, label; int unsignedp; { ! if (GET_CODE (op1) == CONST_INT && GET_CODE (op2) == CONST_INT) { if (INTVAL (op1) == INTVAL (op2)) emit_jump (label); } else ! emit_cmp_and_jump_insns (op1, op2, EQ, NULL_RTX, ! (GET_MODE (op1) == VOIDmode ! ? GET_MODE (op2) : GET_MODE (op1)), ! unsignedp, label); } /* Not all case values are encountered equally. This function *************** balance_case_nodes (head, parent) *** 5654,5660 **** case_node_ptr *head; case_node_ptr parent; { ! register case_node_ptr np; np = *head; if (np) --- 5745,5751 ---- case_node_ptr *head; case_node_ptr parent; { ! case_node_ptr np; np = *head; if (np) *************** balance_case_nodes (head, parent) *** 5662,5668 **** int cost = 0; int i = 0; int ranges = 0; ! register case_node_ptr *npp; case_node_ptr left; /* Count the number of entries on branch. Also count the ranges. */ --- 5753,5759 ---- int cost = 0; int i = 0; int ranges = 0; ! case_node_ptr *npp; case_node_ptr left; /* Count the number of entries on branch. Also count the ranges. */ *************** emit_case_nodes (index, node, default_la *** 5916,5921 **** --- 6007,6013 ---- /* If INDEX has an unsigned type, we must make unsigned branches. */ int unsignedp = TREE_UNSIGNED (index_type); enum machine_mode mode = GET_MODE (index); + enum machine_mode imode = TYPE_MODE (index_type); /* See if our parents have already tested everything for us. If they have, emit an unconditional jump for this node. */ *************** emit_case_nodes (index, node, default_la *** 5927,5933 **** /* Node is single valued. First see if the index expression matches this node and then check our children, if any. */ ! do_jump_if_equal (index, expand_expr (node->low, NULL_RTX, VOIDmode, 0), label_rtx (node->code_label), unsignedp); if (node->right != 0 && node->left != 0) --- 6019,6029 ---- /* Node is single valued. First see if the index expression matches this node and then check our children, if any. */ ! do_jump_if_equal (index, ! convert_modes (mode, imode, ! expand_expr (node->low, NULL_RTX, ! VOIDmode, 0), ! unsignedp), label_rtx (node->code_label), unsignedp); if (node->right != 0 && node->left != 0) *************** emit_case_nodes (index, node, default_la *** 5941,5949 **** if (node_is_bounded (node->right, index_type)) { emit_cmp_and_jump_insns (index, ! expand_expr (node->high, NULL_RTX, ! VOIDmode, 0), ! GT, NULL_RTX, mode, unsignedp, 0, label_rtx (node->right->code_label)); emit_case_nodes (index, node->left, default_label, index_type); } --- 6037,6048 ---- if (node_is_bounded (node->right, index_type)) { emit_cmp_and_jump_insns (index, ! convert_modes ! (mode, imode, ! expand_expr (node->high, NULL_RTX, ! VOIDmode, 0), ! unsignedp), ! GT, NULL_RTX, mode, unsignedp, label_rtx (node->right->code_label)); emit_case_nodes (index, node->left, default_label, index_type); } *************** emit_case_nodes (index, node, default_la *** 5951,5959 **** else if (node_is_bounded (node->left, index_type)) { emit_cmp_and_jump_insns (index, ! expand_expr (node->high, NULL_RTX, ! VOIDmode, 0), ! LT, NULL_RTX, mode, unsignedp, 0, label_rtx (node->left->code_label)); emit_case_nodes (index, node->right, default_label, index_type); } --- 6050,6061 ---- else if (node_is_bounded (node->left, index_type)) { emit_cmp_and_jump_insns (index, ! convert_modes ! (mode, imode, ! expand_expr (node->high, NULL_RTX, ! VOIDmode, 0), ! unsignedp), ! LT, NULL_RTX, mode, unsignedp, label_rtx (node->left->code_label)); emit_case_nodes (index, node->right, default_label, index_type); } *************** emit_case_nodes (index, node, default_la *** 5967,5975 **** /* See if the value is on the right. */ emit_cmp_and_jump_insns (index, ! expand_expr (node->high, NULL_RTX, ! VOIDmode, 0), ! GT, NULL_RTX, mode, unsignedp, 0, label_rtx (test_label)); /* Value must be on the left. --- 6069,6080 ---- /* See if the value is on the right. */ emit_cmp_and_jump_insns (index, ! convert_modes ! (mode, imode, ! expand_expr (node->high, NULL_RTX, ! VOIDmode, 0), ! unsignedp), ! GT, NULL_RTX, mode, unsignedp, label_rtx (test_label)); /* Value must be on the left. *************** emit_case_nodes (index, node, default_la *** 5999,6007 **** if (!node_has_low_bound (node, index_type)) { emit_cmp_and_jump_insns (index, ! expand_expr (node->high, NULL_RTX, ! VOIDmode, 0), ! LT, NULL_RTX, mode, unsignedp, 0, default_label); } --- 6104,6115 ---- if (!node_has_low_bound (node, index_type)) { emit_cmp_and_jump_insns (index, ! convert_modes ! (mode, imode, ! expand_expr (node->high, NULL_RTX, ! VOIDmode, 0), ! unsignedp), ! LT, NULL_RTX, mode, unsignedp, default_label); } *************** emit_case_nodes (index, node, default_la *** 6012,6048 **** since we haven't ruled out the numbers less than this node's value. So handle node->right explicitly. */ do_jump_if_equal (index, ! expand_expr (node->right->low, NULL_RTX, ! VOIDmode, 0), label_rtx (node->right->code_label), unsignedp); } else if (node->right == 0 && node->left != 0) { /* Just one subtree, on the left. */ - - #if 0 /* The following code and comment were formerly part - of the condition here, but they didn't work - and I don't understand what the idea was. -- rms. */ - /* If our "most probable entry" is less probable - than the default label, emit a jump to - the default label using condition codes - already lying around. With no right branch, - a branch-greater-than will get us to the default - label correctly. */ - if (use_cost_table - && COST_TABLE (TREE_INT_CST_LOW (node->high)) < 12) - ; - #endif /* 0 */ if (node->left->left || node->left->right || !tree_int_cst_equal (node->left->low, node->left->high)) { if (!node_has_high_bound (node, index_type)) { ! emit_cmp_and_jump_insns (index, expand_expr (node->high, ! NULL_RTX, ! VOIDmode, 0), ! GT, NULL_RTX, mode, unsignedp, 0, default_label); } --- 6120,6148 ---- since we haven't ruled out the numbers less than this node's value. So handle node->right explicitly. */ do_jump_if_equal (index, ! convert_modes ! (mode, imode, ! expand_expr (node->right->low, NULL_RTX, ! VOIDmode, 0), ! unsignedp), label_rtx (node->right->code_label), unsignedp); } else if (node->right == 0 && node->left != 0) { /* Just one subtree, on the left. */ if (node->left->left || node->left->right || !tree_int_cst_equal (node->left->low, node->left->high)) { if (!node_has_high_bound (node, index_type)) { ! emit_cmp_and_jump_insns (index, ! convert_modes ! (mode, imode, ! expand_expr (node->high, NULL_RTX, ! VOIDmode, 0), ! unsignedp), ! GT, NULL_RTX, mode, unsignedp, default_label); } *************** emit_case_nodes (index, node, default_la *** 6053,6060 **** since we haven't ruled out the numbers less than this node's value. So handle node->left explicitly. */ do_jump_if_equal (index, ! expand_expr (node->left->low, NULL_RTX, ! VOIDmode, 0), label_rtx (node->left->code_label), unsignedp); } } --- 6153,6163 ---- since we haven't ruled out the numbers less than this node's value. So handle node->left explicitly. */ do_jump_if_equal (index, ! convert_modes ! (mode, imode, ! expand_expr (node->left->low, NULL_RTX, ! VOIDmode, 0), ! unsignedp), label_rtx (node->left->code_label), unsignedp); } } *************** emit_case_nodes (index, node, default_la *** 6076,6084 **** if (node_is_bounded (node->right, index_type)) /* Right hand node is fully bounded so we can eliminate any testing and branch directly to the target code. */ ! emit_cmp_and_jump_insns (index, expand_expr (node->high, NULL_RTX, ! VOIDmode, 0), ! GT, NULL_RTX, mode, unsignedp, 0, label_rtx (node->right->code_label)); else { --- 6179,6191 ---- if (node_is_bounded (node->right, index_type)) /* Right hand node is fully bounded so we can eliminate any testing and branch directly to the target code. */ ! emit_cmp_and_jump_insns (index, ! convert_modes ! (mode, imode, ! expand_expr (node->high, NULL_RTX, ! VOIDmode, 0), ! unsignedp), ! GT, NULL_RTX, mode, unsignedp, label_rtx (node->right->code_label)); else { *************** emit_case_nodes (index, node, default_la *** 6087,6103 **** test_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE); emit_cmp_and_jump_insns (index, ! expand_expr (node->high, NULL_RTX, ! VOIDmode, 0), ! GT, NULL_RTX, mode, unsignedp, 0, label_rtx (test_label)); } /* Value belongs to this node or to the left-hand subtree. */ ! emit_cmp_and_jump_insns (index, expand_expr (node->low, NULL_RTX, ! VOIDmode, 0), ! GE, NULL_RTX, mode, unsignedp, 0, label_rtx (node->code_label)); /* Handle the left-hand subtree. */ --- 6194,6217 ---- test_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE); emit_cmp_and_jump_insns (index, ! convert_modes ! (mode, imode, ! expand_expr (node->high, NULL_RTX, ! VOIDmode, 0), ! unsignedp), ! GT, NULL_RTX, mode, unsignedp, label_rtx (test_label)); } /* Value belongs to this node or to the left-hand subtree. */ ! emit_cmp_and_jump_insns (index, ! convert_modes ! (mode, imode, ! expand_expr (node->low, NULL_RTX, ! VOIDmode, 0), ! unsignedp), ! GE, NULL_RTX, mode, unsignedp, label_rtx (node->code_label)); /* Handle the left-hand subtree. */ *************** emit_case_nodes (index, node, default_la *** 6123,6139 **** if (!node_has_low_bound (node, index_type)) { emit_cmp_and_jump_insns (index, ! expand_expr (node->low, NULL_RTX, ! VOIDmode, 0), ! LT, NULL_RTX, mode, unsignedp, 0, default_label); } /* Value belongs to this node or to the right-hand subtree. */ ! emit_cmp_and_jump_insns (index, expand_expr (node->high, NULL_RTX, ! VOIDmode, 0), ! LE, NULL_RTX, mode, unsignedp, 0, label_rtx (node->code_label)); emit_case_nodes (index, node->right, default_label, index_type); --- 6237,6260 ---- if (!node_has_low_bound (node, index_type)) { emit_cmp_and_jump_insns (index, ! convert_modes ! (mode, imode, ! expand_expr (node->low, NULL_RTX, ! VOIDmode, 0), ! unsignedp), ! LT, NULL_RTX, mode, unsignedp, default_label); } /* Value belongs to this node or to the right-hand subtree. */ ! emit_cmp_and_jump_insns (index, ! convert_modes ! (mode, imode, ! expand_expr (node->high, NULL_RTX, ! VOIDmode, 0), ! unsignedp), ! LE, NULL_RTX, mode, unsignedp, label_rtx (node->code_label)); emit_case_nodes (index, node->right, default_label, index_type); *************** emit_case_nodes (index, node, default_la *** 6146,6163 **** if (!node_has_high_bound (node, index_type)) { emit_cmp_and_jump_insns (index, ! expand_expr (node->high, NULL_RTX, ! VOIDmode, 0), ! GT, NULL_RTX, mode, unsignedp, 0, default_label); } /* Value belongs to this node or to the left-hand subtree. */ emit_cmp_and_jump_insns (index, ! expand_expr (node->low, NULL_RTX, ! VOIDmode, 0), ! GE, NULL_RTX, mode, unsignedp, 0, label_rtx (node->code_label)); emit_case_nodes (index, node->left, default_label, index_type); --- 6267,6290 ---- if (!node_has_high_bound (node, index_type)) { emit_cmp_and_jump_insns (index, ! convert_modes ! (mode, imode, ! expand_expr (node->high, NULL_RTX, ! VOIDmode, 0), ! unsignedp), ! GT, NULL_RTX, mode, unsignedp, default_label); } /* Value belongs to this node or to the left-hand subtree. */ emit_cmp_and_jump_insns (index, ! convert_modes ! (mode, imode, ! expand_expr (node->low, NULL_RTX, ! VOIDmode, 0), ! unsignedp), ! GE, NULL_RTX, mode, unsignedp, label_rtx (node->code_label)); emit_case_nodes (index, node->left, default_label, index_type); *************** emit_case_nodes (index, node, default_la *** 6168,6191 **** /* Node has no children so we check low and high bounds to remove redundant tests. Only one of the bounds can exist, since otherwise this node is bounded--a case tested already. */ ! if (!node_has_high_bound (node, index_type)) { emit_cmp_and_jump_insns (index, ! expand_expr (node->high, NULL_RTX, ! VOIDmode, 0), ! GT, NULL_RTX, mode, unsignedp, 0, default_label); } ! if (!node_has_low_bound (node, index_type)) { emit_cmp_and_jump_insns (index, ! expand_expr (node->low, NULL_RTX, ! VOIDmode, 0), ! LT, NULL_RTX, mode, unsignedp, 0, default_label); } emit_jump (label_rtx (node->code_label)); } --- 6295,6347 ---- /* Node has no children so we check low and high bounds to remove redundant tests. Only one of the bounds can exist, since otherwise this node is bounded--a case tested already. */ + int high_bound = node_has_high_bound (node, index_type); + int low_bound = node_has_low_bound (node, index_type); ! if (!high_bound && low_bound) { emit_cmp_and_jump_insns (index, ! convert_modes ! (mode, imode, ! expand_expr (node->high, NULL_RTX, ! VOIDmode, 0), ! unsignedp), ! GT, NULL_RTX, mode, unsignedp, default_label); } ! else if (!low_bound && high_bound) { emit_cmp_and_jump_insns (index, ! convert_modes ! (mode, imode, ! expand_expr (node->low, NULL_RTX, ! VOIDmode, 0), ! unsignedp), ! LT, NULL_RTX, mode, unsignedp, default_label); } + else if (!low_bound && !high_bound) + { + /* Widen LOW and HIGH to the same width as INDEX. */ + tree type = type_for_mode (mode, unsignedp); + tree low = build1 (CONVERT_EXPR, type, node->low); + tree high = build1 (CONVERT_EXPR, type, node->high); + rtx low_rtx, new_index, new_bound; + + /* Instead of doing two branches, emit one unsigned branch for + (index-low) > (high-low). */ + low_rtx = expand_expr (low, NULL_RTX, mode, 0); + new_index = expand_simple_binop (mode, MINUS, index, low_rtx, + NULL_RTX, unsignedp, + OPTAB_WIDEN); + new_bound = expand_expr (fold (build (MINUS_EXPR, type, + high, low)), + NULL_RTX, mode, 0); + + emit_cmp_and_jump_insns (new_index, new_bound, GT, NULL_RTX, + mode, 1, default_label); + } emit_jump (label_rtx (node->code_label)); } diff -Nrc3pad gcc-3.0.4/gcc/stor-layout.c gcc-3.1/gcc/stor-layout.c *** gcc-3.0.4/gcc/stor-layout.c Mon Dec 10 02:31:08 2001 --- gcc-3.1/gcc/stor-layout.c Sat Apr 13 01:25:07 2002 *************** *** 1,23 **** /* C-compiler utilities for types and variables storage layout Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1996, 1998, ! 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" --- 1,23 ---- /* C-compiler utilities for types and variables storage layout Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1996, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" *************** Boston, MA 02111-1307, USA. */ *** 30,35 **** --- 30,36 ---- #include "expr.h" #include "toplev.h" #include "ggc.h" + #include "target.h" /* Set to one when set_sizetype has been called. */ static int sizetype_set; *************** get_pending_sizes () *** 94,99 **** --- 95,131 ---- return chain; } + /* Return non-zero if EXPR is present on the pending sizes list. */ + + int + is_pending_size (expr) + tree expr; + { + tree t; + + for (t = pending_sizes; t; t = TREE_CHAIN (t)) + if (TREE_VALUE (t) == expr) + return 1; + return 0; + } + + /* Add EXPR to the pending sizes list. */ + + void + put_pending_size (expr) + tree expr; + { + /* Strip any simple arithmetic from EXPR to see if it has an underlying + SAVE_EXPR. */ + while (TREE_CODE_CLASS (TREE_CODE (expr)) == '1' + || (TREE_CODE_CLASS (TREE_CODE (expr)) == '2' + && TREE_CONSTANT (TREE_OPERAND (expr, 1)))) + expr = TREE_OPERAND (expr, 0); + + if (TREE_CODE (expr) == SAVE_EXPR) + pending_sizes = tree_cons (NULL_TREE, expr, pending_sizes); + } + /* Put a chain of objects into the pending sizes list, which must be empty. */ *************** variable_size (size) *** 116,122 **** { /* If the language-processor is to take responsibility for variable-sized items (e.g., languages which have elaboration procedures like Ada), ! just return SIZE unchanged. Likewise for self-referential sizes. */ if (TREE_CONSTANT (size) || global_bindings_p () < 0 || contains_placeholder_p (size)) return size; --- 148,155 ---- { /* If the language-processor is to take responsibility for variable-sized items (e.g., languages which have elaboration procedures like Ada), ! just return SIZE unchanged. Likewise for self-referential sizes and ! constant sizes. */ if (TREE_CONSTANT (size) || global_bindings_p () < 0 || contains_placeholder_p (size)) return size; *************** variable_size (size) *** 147,160 **** if (immediate_size_expand) /* NULL_RTX is not defined; neither is the rtx type. Also, we would like to pass const0_rtx here, but don't have it. */ ! expand_expr (size, expand_expr (integer_zero_node, NULL_PTR, VOIDmode, 0), VOIDmode, 0); else if (cfun != 0 && cfun->x_dont_save_pending_sizes_p) /* The front-end doesn't want us to keep a list of the expressions that determine sizes for variable size objects. */ ; ! else if (TREE_CODE (size) == SAVE_EXPR) ! pending_sizes = tree_cons (NULL_TREE, size, pending_sizes); return size; } --- 180,193 ---- if (immediate_size_expand) /* NULL_RTX is not defined; neither is the rtx type. Also, we would like to pass const0_rtx here, but don't have it. */ ! expand_expr (size, expand_expr (integer_zero_node, NULL_RTX, VOIDmode, 0), VOIDmode, 0); else if (cfun != 0 && cfun->x_dont_save_pending_sizes_p) /* The front-end doesn't want us to keep a list of the expressions that determine sizes for variable size objects. */ ; ! else ! put_pending_size (size); return size; } *************** mode_for_size (size, class, limit) *** 174,180 **** enum mode_class class; int limit; { ! register enum machine_mode mode; if (limit && size > MAX_FIXED_MODE_SIZE) return BLKmode; --- 207,213 ---- enum mode_class class; int limit; { ! enum machine_mode mode; if (limit && size > MAX_FIXED_MODE_SIZE) return BLKmode; *************** smallest_mode_for_size (size, class) *** 214,220 **** unsigned int size; enum mode_class class; { ! register enum machine_mode mode; /* Get the first mode which has at least this size, in the specified class. */ --- 247,253 ---- unsigned int size; enum mode_class class; { ! enum machine_mode mode; /* Get the first mode which has at least this size, in the specified class. */ *************** int_mode_for_mode (mode) *** 250,256 **** if (mode == BLKmode) break; ! /* ... fall through ... */ case MODE_CC: default: --- 283,289 ---- if (mode == BLKmode) break; ! /* ... fall through ... */ case MODE_CC: default: *************** layout_decl (decl, known_align) *** 303,310 **** tree decl; unsigned int known_align; { ! register tree type = TREE_TYPE (decl); ! register enum tree_code code = TREE_CODE (decl); if (code == CONST_DECL) return; --- 336,343 ---- tree decl; unsigned int known_align; { ! tree type = TREE_TYPE (decl); ! enum tree_code code = TREE_CODE (decl); if (code == CONST_DECL) return; *************** layout_decl (decl, known_align) *** 348,354 **** && TYPE_ALIGN (type) > DECL_ALIGN (decl)))) { DECL_ALIGN (decl) = TYPE_ALIGN (type); ! DECL_USER_ALIGN (decl) = TYPE_USER_ALIGN (type); } /* For fields, set the bit field type and update the alignment. */ --- 381,387 ---- && TYPE_ALIGN (type) > DECL_ALIGN (decl)))) { DECL_ALIGN (decl) = TYPE_ALIGN (type); ! DECL_USER_ALIGN (decl) = 0; } /* For fields, set the bit field type and update the alignment. */ *************** layout_decl (decl, known_align) *** 357,363 **** DECL_BIT_FIELD_TYPE (decl) = DECL_BIT_FIELD (decl) ? type : 0; if (maximum_field_alignment != 0) DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), maximum_field_alignment); ! else if (DECL_PACKED (decl)) { DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), BITS_PER_UNIT); DECL_USER_ALIGN (decl) = 0; --- 390,404 ---- DECL_BIT_FIELD_TYPE (decl) = DECL_BIT_FIELD (decl) ? type : 0; if (maximum_field_alignment != 0) DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), maximum_field_alignment); ! ! /* If the field is of variable size, we can't misalign it since we ! have no way to make a temporary to align the result. But this ! isn't an issue if the decl is not addressable. Likewise if it ! is of unknown size. */ ! else if (DECL_PACKED (decl) ! && (DECL_NONADDRESSABLE_P (decl) ! || DECL_SIZE_UNIT (decl) == 0 ! || TREE_CODE (DECL_SIZE_UNIT (decl)) == INTEGER_CST)) { DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), BITS_PER_UNIT); DECL_USER_ALIGN (decl) = 0; *************** layout_decl (decl, known_align) *** 372,378 **** && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST && GET_MODE_CLASS (TYPE_MODE (type)) == MODE_INT) { ! register enum machine_mode xmode = mode_for_size_tree (DECL_SIZE (decl), MODE_INT, 1); if (xmode != BLKmode && known_align >= GET_MODE_ALIGNMENT (xmode)) --- 413,419 ---- && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST && GET_MODE_CLASS (TYPE_MODE (type)) == MODE_INT) { ! enum machine_mode xmode = mode_for_size_tree (DECL_SIZE (decl), MODE_INT, 1); if (xmode != BLKmode && known_align >= GET_MODE_ALIGNMENT (xmode)) *************** layout_decl (decl, known_align) *** 420,425 **** --- 461,478 ---- } } + /* Hook for a front-end function that can modify the record layout as needed + immediately before it is finalized. */ + + void (*lang_adjust_rli) PARAMS ((record_layout_info)) = 0; + + void + set_lang_adjust_rli (f) + void (*f) PARAMS ((record_layout_info)); + { + lang_adjust_rli = f; + } + /* Begin laying out type T, which may be a RECORD_TYPE, UNION_TYPE, or QUAL_UNION_TYPE. Return a pointer to a struct record_layout_info which is to be passed to all other layout functions for this record. It is the *************** start_record_layout (t) *** 440,446 **** declaration, for example) use it -- otherwise, start with a one-byte alignment. */ rli->record_align = MAX (BITS_PER_UNIT, TYPE_ALIGN (t)); ! rli->unpacked_align = rli->record_align; rli->offset_align = MAX (rli->record_align, BIGGEST_ALIGNMENT); #ifdef STRUCTURE_SIZE_BOUNDARY --- 493,499 ---- declaration, for example) use it -- otherwise, start with a one-byte alignment. */ rli->record_align = MAX (BITS_PER_UNIT, TYPE_ALIGN (t)); ! rli->unpacked_align = rli->unpadded_align = rli->record_align; rli->offset_align = MAX (rli->record_align, BIGGEST_ALIGNMENT); #ifdef STRUCTURE_SIZE_BOUNDARY *************** start_record_layout (t) *** 451,456 **** --- 504,510 ---- rli->offset = size_zero_node; rli->bitpos = bitsize_zero_node; + rli->prev_field = 0; rli->pending_statics = 0; rli->packed_maybe_necessary = 0; *************** debug_rli (rli) *** 547,554 **** print_node_brief (stderr, "\noffset", rli->offset, 0); print_node_brief (stderr, " bitpos", rli->bitpos, 0); ! fprintf (stderr, "\nrec_align = %u, unpack_align = %u, off_align = %u\n", ! rli->record_align, rli->unpacked_align, rli->offset_align); if (rli->packed_maybe_necessary) fprintf (stderr, "packed may be necessary\n"); --- 601,609 ---- print_node_brief (stderr, "\noffset", rli->offset, 0); print_node_brief (stderr, " bitpos", rli->bitpos, 0); ! fprintf (stderr, "\naligns: rec = %u, unpack = %u, unpad = %u, off = %u\n", ! rli->record_align, rli->unpacked_align, rli->unpadded_align, ! rli->offset_align); if (rli->packed_maybe_necessary) fprintf (stderr, "packed may be necessary\n"); *************** place_union_field (rli, field) *** 617,631 **** desired_align = ADJUST_FIELD_ALIGN (field, desired_align); #endif /* Union must be at least as aligned as any field requires. */ rli->record_align = MAX (rli->record_align, desired_align); #ifdef PCC_BITFIELD_TYPE_MATTERS /* On the m88000, a bit field of declare type `int' forces the entire union to have `int' alignment. */ if (PCC_BITFIELD_TYPE_MATTERS && DECL_BIT_FIELD_TYPE (field)) ! rli->record_align = MAX (rli->record_align, ! TYPE_ALIGN (TREE_TYPE (field))); #endif /* We assume the union's size will be a multiple of a byte so we don't --- 672,693 ---- desired_align = ADJUST_FIELD_ALIGN (field, desired_align); #endif + TYPE_USER_ALIGN (rli->t) |= DECL_USER_ALIGN (field); + /* Union must be at least as aligned as any field requires. */ rli->record_align = MAX (rli->record_align, desired_align); + rli->unpadded_align = MAX (rli->unpadded_align, desired_align); #ifdef PCC_BITFIELD_TYPE_MATTERS /* On the m88000, a bit field of declare type `int' forces the entire union to have `int' alignment. */ if (PCC_BITFIELD_TYPE_MATTERS && DECL_BIT_FIELD_TYPE (field)) ! { ! rli->record_align = MAX (rli->record_align, ! TYPE_ALIGN (TREE_TYPE (field))); ! rli->unpadded_align = MAX (rli->unpadded_align, ! TYPE_ALIGN (TREE_TYPE (field))); ! } #endif /* We assume the union's size will be a multiple of a byte so we don't *************** place_field (rli, field) *** 727,734 **** --- 789,814 ---- /* Record must have at least as much alignment as any field. Otherwise, the alignment of the field within the record is meaningless. */ + if ((* targetm.ms_bitfield_layout_p) (rli->t) + && type != error_mark_node + && DECL_BIT_FIELD_TYPE (field) + && ! integer_zerop (TYPE_SIZE (type)) + && integer_zerop (DECL_SIZE (field))) + { + if (rli->prev_field + && DECL_BIT_FIELD_TYPE (rli->prev_field) + && ! integer_zerop (DECL_SIZE (rli->prev_field))) + { + rli->record_align = MAX (rli->record_align, desired_align); + rli->unpacked_align = MAX (rli->unpacked_align, TYPE_ALIGN (type)); + } + else + desired_align = 1; + } + else #ifdef PCC_BITFIELD_TYPE_MATTERS if (PCC_BITFIELD_TYPE_MATTERS && type != error_mark_node + && ! (* targetm.ms_bitfield_layout_p) (rli->t) && DECL_BIT_FIELD_TYPE (field) && ! integer_zerop (TYPE_SIZE (type))) { *************** place_field (rli, field) *** 753,761 **** type_align = MIN (type_align, BITS_PER_UNIT); rli->record_align = MAX (rli->record_align, type_align); if (warn_packed) ! rli->unpacked_align = MAX (rli->unpacked_align, ! TYPE_ALIGN (type)); } } else --- 833,841 ---- type_align = MIN (type_align, BITS_PER_UNIT); rli->record_align = MAX (rli->record_align, type_align); + rli->unpadded_align = MAX (rli->unpadded_align, DECL_ALIGN (field)); if (warn_packed) ! rli->unpacked_align = MAX (rli->unpacked_align, TYPE_ALIGN (type)); } } else *************** place_field (rli, field) *** 763,768 **** --- 843,849 ---- { rli->record_align = MAX (rli->record_align, desired_align); rli->unpacked_align = MAX (rli->unpacked_align, TYPE_ALIGN (type)); + rli->unpadded_align = MAX (rli->unpadded_align, DECL_ALIGN (field)); } if (warn_packed && DECL_PACKED (field)) *************** place_field (rli, field) *** 817,822 **** --- 898,904 ---- variable-sized fields, we need not worry about compatibility. */ #ifdef PCC_BITFIELD_TYPE_MATTERS if (PCC_BITFIELD_TYPE_MATTERS + && ! (* targetm.ms_bitfield_layout_p) (rli->t) && TREE_CODE (field) == FIELD_DECL && type != error_mark_node && DECL_BIT_FIELD (field) *************** place_field (rli, field) *** 846,851 **** --- 928,934 ---- #ifdef BITFIELD_NBYTES_LIMITED if (BITFIELD_NBYTES_LIMITED + && ! (* targetm.ms_bitfield_layout_p) (rli->t) && TREE_CODE (field) == FIELD_DECL && type != error_mark_node && DECL_BIT_FIELD_TYPE (field) *************** place_field (rli, field) *** 879,890 **** --- 962,1019 ---- } #endif + /* See the docs for TARGET_MS_BITFIELD_LAYOUT_P for details. */ + if ((* targetm.ms_bitfield_layout_p) (rli->t) + && TREE_CODE (field) == FIELD_DECL + && type != error_mark_node + && ! DECL_PACKED (field) + && rli->prev_field + && DECL_SIZE (field) + && host_integerp (DECL_SIZE (field), 1) + && DECL_SIZE (rli->prev_field) + && host_integerp (DECL_SIZE (rli->prev_field), 1) + && host_integerp (rli->offset, 1) + && host_integerp (TYPE_SIZE (type), 1) + && host_integerp (TYPE_SIZE (TREE_TYPE (rli->prev_field)), 1) + && ((DECL_BIT_FIELD_TYPE (rli->prev_field) + && ! integer_zerop (DECL_SIZE (rli->prev_field))) + || (DECL_BIT_FIELD_TYPE (field) + && ! integer_zerop (DECL_SIZE (field)))) + && (! simple_cst_equal (TYPE_SIZE (type), + TYPE_SIZE (TREE_TYPE (rli->prev_field))) + /* If the previous field was a zero-sized bit-field, either + it was ignored, in which case we must ensure the proper + alignment of this field here, or it already forced the + alignment of this field, in which case forcing the + alignment again is harmless. So, do it in both cases. */ + || (DECL_BIT_FIELD_TYPE (rli->prev_field) + && integer_zerop (DECL_SIZE (rli->prev_field))))) + { + unsigned int type_align = TYPE_ALIGN (type); + + if (rli->prev_field + && DECL_BIT_FIELD_TYPE (rli->prev_field) + /* If the previous bit-field is zero-sized, we've already + accounted for its alignment needs (or ignored it, if + appropriate) while placing it. */ + && ! integer_zerop (DECL_SIZE (rli->prev_field))) + type_align = MAX (type_align, + TYPE_ALIGN (TREE_TYPE (rli->prev_field))); + + if (maximum_field_alignment != 0) + type_align = MIN (type_align, maximum_field_alignment); + + rli->bitpos = round_up (rli->bitpos, type_align); + } + /* Offset so far becomes the position of this field after normalizing. */ normalize_rli (rli); DECL_FIELD_OFFSET (field) = rli->offset; DECL_FIELD_BIT_OFFSET (field) = rli->bitpos; SET_DECL_OFFSET_ALIGN (field, rli->offset_align); + TYPE_USER_ALIGN (rli->t) |= user_align; + /* If this field ended up more aligned than we thought it would be (we approximate this by seeing if its position changed), lay out the field again; perhaps we can use an integral mode for it now. */ *************** place_field (rli, field) *** 903,908 **** --- 1032,1039 ---- if (known_align != actual_align) layout_decl (field, actual_align); + rli->prev_field = field; + /* Now add size of this field to the size of the record. If the size is not constant, treat the field as being a multiple of bytes and just adjust the offset, resetting the bit position. Otherwise, apportion the *************** finalize_record_size (rli) *** 954,960 **** #else TYPE_ALIGN (rli->t) = MAX (TYPE_ALIGN (rli->t), rli->record_align); #endif - TYPE_USER_ALIGN (rli->t) = 1; /* Compute the size so far. Be sure to allow for extra bits in the size in bytes. We have guaranteed above that it will be no more --- 1085,1090 ---- *************** compute_record_mode (type) *** 1071,1076 **** --- 1201,1207 ---- || (TYPE_MODE (TREE_TYPE (field)) == BLKmode && ! TYPE_NO_FORCE_BLK (TREE_TYPE (field))) || ! host_integerp (bit_position (field), 1) + || DECL_SIZE (field) == 0 || ! host_integerp (DECL_SIZE (field), 1)) return; *************** compute_record_mode (type) *** 1091,1102 **** if (simple_cst_equal (TYPE_SIZE (type), DECL_SIZE (field))) mode = DECL_MODE (field); ! #ifdef STRUCT_FORCE_BLK /* With some targets, eg. c4x, it is sub-optimal to access an aligned BLKmode structure as a scalar. */ ! if (mode == VOIDmode && STRUCT_FORCE_BLK (field)) return; ! #endif /* STRUCT_FORCE_BLK */ } /* If we only have one real field; use its mode. This only applies to --- 1222,1243 ---- if (simple_cst_equal (TYPE_SIZE (type), DECL_SIZE (field))) mode = DECL_MODE (field); ! #ifdef MEMBER_TYPE_FORCES_BLK /* With some targets, eg. c4x, it is sub-optimal to access an aligned BLKmode structure as a scalar. */ ! ! /* On ia64-*-hpux we need to ensure that we don't change the ! mode of a structure containing a single field or else we ! will pass it incorrectly. Since a structure with a single ! field causes mode to get set above we can't allow the ! check for mode == VOIDmode in this case. Perhaps ! MEMBER_TYPE_FORCES_BLK should be extended to include mode ! as an argument and the check could be put in there for c4x. */ ! ! if ((mode == VOIDmode || FUNCTION_ARG_REG_LITTLE_ENDIAN) ! && MEMBER_TYPE_FORCES_BLK (field)) return; ! #endif /* MEMBER_TYPE_FORCES_BLK */ } /* If we only have one real field; use its mode. This only applies to *************** layout_type (type) *** 1264,1274 **** of the language-specific code. */ abort (); ! case BOOLEAN_TYPE: /* Used for Java, Pascal, and Chill. */ if (TYPE_PRECISION (type) == 0) ! TYPE_PRECISION (type) = 1; /* default to one byte/boolean. */ ! /* ... fall through ... */ case INTEGER_TYPE: case ENUMERAL_TYPE: --- 1405,1415 ---- of the language-specific code. */ abort (); ! case BOOLEAN_TYPE: /* Used for Java, Pascal, and Chill. */ if (TYPE_PRECISION (type) == 0) ! TYPE_PRECISION (type) = 1; /* default to one byte/boolean. */ ! /* ... fall through ... */ case INTEGER_TYPE: case ENUMERAL_TYPE: *************** layout_type (type) *** 1321,1327 **** case OFFSET_TYPE: TYPE_SIZE (type) = bitsize_int (POINTER_SIZE); TYPE_SIZE_UNIT (type) = size_int (POINTER_SIZE / BITS_PER_UNIT); ! TYPE_MODE (type) = ptr_mode; break; case FUNCTION_TYPE: --- 1462,1470 ---- case OFFSET_TYPE: TYPE_SIZE (type) = bitsize_int (POINTER_SIZE); TYPE_SIZE_UNIT (type) = size_int (POINTER_SIZE / BITS_PER_UNIT); ! /* A pointer might be MODE_PARTIAL_INT, ! but ptrdiff_t must be integral. */ ! TYPE_MODE (type) = mode_for_size (POINTER_SIZE, MODE_INT, 0); break; case FUNCTION_TYPE: *************** layout_type (type) *** 1348,1355 **** case ARRAY_TYPE: { ! register tree index = TYPE_DOMAIN (type); ! register tree element = TREE_TYPE (type); build_pointer_type (element); --- 1491,1498 ---- case ARRAY_TYPE: { ! tree index = TYPE_DOMAIN (type); ! tree element = TREE_TYPE (type); build_pointer_type (element); *************** layout_type (type) *** 1431,1443 **** TYPE_MODE (type) = BLKmode; if (TYPE_SIZE (type) != 0 /* BLKmode elements force BLKmode aggregate; else extract/store fields may lose. */ && (TYPE_MODE (TREE_TYPE (type)) != BLKmode || TYPE_NO_FORCE_BLK (TREE_TYPE (type)))) { ! TYPE_MODE (type) ! = mode_for_size_tree (TYPE_SIZE (type), MODE_INT, 1); if (TYPE_MODE (type) != BLKmode && STRICT_ALIGNMENT && TYPE_ALIGN (type) < BIGGEST_ALIGNMENT --- 1574,1594 ---- TYPE_MODE (type) = BLKmode; if (TYPE_SIZE (type) != 0 + #ifdef MEMBER_TYPE_FORCES_BLK + && ! MEMBER_TYPE_FORCES_BLK (type) + #endif /* BLKmode elements force BLKmode aggregate; else extract/store fields may lose. */ && (TYPE_MODE (TREE_TYPE (type)) != BLKmode || TYPE_NO_FORCE_BLK (TREE_TYPE (type)))) { ! /* One-element arrays get the component type's mode. */ ! if (simple_cst_equal (TYPE_SIZE (type), ! TYPE_SIZE (TREE_TYPE (type)))) ! TYPE_MODE (type) = TYPE_MODE (TREE_TYPE (type)); ! else ! TYPE_MODE (type) ! = mode_for_size_tree (TYPE_SIZE (type), MODE_INT, 1); if (TYPE_MODE (type) != BLKmode && STRICT_ALIGNMENT && TYPE_ALIGN (type) < BIGGEST_ALIGNMENT *************** layout_type (type) *** 1474,1488 **** if (TREE_CODE (type) == QUAL_UNION_TYPE) TYPE_FIELDS (type) = nreverse (TYPE_FIELDS (type)); /* Finish laying out the record. */ finish_record_layout (rli); } break; ! case SET_TYPE: /* Used by Chill and Pascal. */ if (TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) != INTEGER_CST || TREE_CODE (TYPE_MIN_VALUE (TYPE_DOMAIN (type))) != INTEGER_CST) ! abort(); else { #ifndef SET_WORD_SIZE --- 1625,1642 ---- if (TREE_CODE (type) == QUAL_UNION_TYPE) TYPE_FIELDS (type) = nreverse (TYPE_FIELDS (type)); + if (lang_adjust_rli) + (*lang_adjust_rli) (rli); + /* Finish laying out the record. */ finish_record_layout (rli); } break; ! case SET_TYPE: /* Used by Chill and Pascal. */ if (TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) != INTEGER_CST || TREE_CODE (TYPE_MIN_VALUE (TYPE_DOMAIN (type))) != INTEGER_CST) ! abort (); else { #ifndef SET_WORD_SIZE *************** tree *** 1549,1555 **** make_signed_type (precision) int precision; { ! register tree type = make_node (INTEGER_TYPE); TYPE_PRECISION (type) = precision; --- 1703,1709 ---- make_signed_type (precision) int precision; { ! tree type = make_node (INTEGER_TYPE); TYPE_PRECISION (type) = precision; *************** tree *** 1563,1569 **** make_unsigned_type (precision) int precision; { ! register tree type = make_node (INTEGER_TYPE); TYPE_PRECISION (type) = precision; --- 1717,1723 ---- make_unsigned_type (precision) int precision; { ! tree type = make_node (INTEGER_TYPE); TYPE_PRECISION (type) = precision; *************** void *** 1694,1700 **** fixup_signed_type (type) tree type; { ! register int precision = TYPE_PRECISION (type); TYPE_MIN_VALUE (type) = build_int_2 ((precision - HOST_BITS_PER_WIDE_INT > 0 --- 1848,1860 ---- fixup_signed_type (type) tree type; { ! int precision = TYPE_PRECISION (type); ! ! /* We can not represent properly constants greater then ! 2 * HOST_BITS_PER_WIDE_INT, still we need the types ! as they are used by i386 vector extensions and friends. */ ! if (precision > HOST_BITS_PER_WIDE_INT * 2) ! precision = HOST_BITS_PER_WIDE_INT * 2; TYPE_MIN_VALUE (type) = build_int_2 ((precision - HOST_BITS_PER_WIDE_INT > 0 *************** void *** 1726,1732 **** fixup_unsigned_type (type) tree type; { ! register int precision = TYPE_PRECISION (type); TYPE_MIN_VALUE (type) = build_int_2 (0, 0); TYPE_MAX_VALUE (type) --- 1886,1898 ---- fixup_unsigned_type (type) tree type; { ! int precision = TYPE_PRECISION (type); ! ! /* We can not represent properly constants greater then ! 2 * HOST_BITS_PER_WIDE_INT, still we need the types ! as they are used by i386 vector extensions and friends. */ ! if (precision > HOST_BITS_PER_WIDE_INT * 2) ! precision = HOST_BITS_PER_WIDE_INT * 2; TYPE_MIN_VALUE (type) = build_int_2 (0, 0); TYPE_MAX_VALUE (type) *************** get_best_mode (bitsize, bitpos, align, l *** 1813,1834 **** return mode; } - /* Return the alignment of MODE. This will be bounded by 1 and - BIGGEST_ALIGNMENT. */ - - unsigned int - get_mode_alignment (mode) - enum machine_mode mode; - { - unsigned int alignment = GET_MODE_UNIT_SIZE (mode) * BITS_PER_UNIT; - - /* Extract the LSB of the size. */ - alignment = alignment & -alignment; - - alignment = MIN (BIGGEST_ALIGNMENT, MAX (1, alignment)); - return alignment; - } - /* This function is run once to initialize stor-layout.c. */ void --- 1979,1984 ---- diff -Nrc3pad gcc-3.0.4/gcc/stringpool.c gcc-3.1/gcc/stringpool.c *** gcc-3.0.4/gcc/stringpool.c Sun May 13 19:50:17 2001 --- gcc-3.1/gcc/stringpool.c Fri Nov 9 07:14:03 2001 *************** *** 1,41 **** /* String pool for GCC. Copyright (C) 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it ! under the terms of the GNU General Public License as published by the ! Free Software Foundation; either version 2, or (at your option) any ! later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ! ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ! /* String pool allocator. All strings allocated by ggc_alloc_string are ! uniquified and stored in an obstack which is never shrunk. You can ! associate a tree with a string if you wish; this is used to implement ! get_identifier. ! We have our own private hash table implementation which is similar ! to the one in cpphash.c (actually, it's a further refinement of ! that code). libiberty's hashtab.c is not used because it requires ! 100% average space overhead per string, which is unacceptable. ! Also, this algorithm is faster. */ #include "config.h" #include "system.h" #include "ggc.h" #include "tree.h" ! #include "obstack.h" ! #include "flags.h" ! #include "toplev.h" /* The "" allocated string. */ const char empty_string[] = ""; --- 1,37 ---- /* String pool for GCC. Copyright (C) 2000, 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ! /* String text, identifier text and identifier node allocator. Strings ! allocated by ggc_alloc_string are stored in an obstack which is ! never shrunk. Identifiers are uniquely stored in a hash table. ! We have our own private hash table implementation. libiberty's ! hashtab.c is not used because it requires 100% average space ! overhead per string, which is unacceptable. Also, this algorithm ! is faster. */ #include "config.h" #include "system.h" #include "ggc.h" #include "tree.h" ! #include "hashtable.h" /* The "" allocated string. */ const char empty_string[] = ""; *************** const char digit_vector[] = { *** 47,254 **** '5', 0, '6', 0, '7', 0, '8', 0, '9', 0 }; static struct obstack string_stack; ! /* This is the hash entry associated with each string. It lives in ! the hash table; only the string lives in the obstack. Note that ! the string is not necessarily NUL terminated. */ ! ! struct str_header ! { ! const char *ptr; ! tree data; /* for get_identifier */ ! unsigned int len; ! }; ! ! /* This is the hash table structure. There's only one. */ ! struct str_hash ! { ! struct str_header *entries; ! size_t nslots; /* total slots in the entries array */ ! size_t nelements; /* number of live elements */ ! ! /* table usage statistics */ ! unsigned int searches; ! unsigned int collisions; ! }; ! #define INITIAL_HASHSIZE (16*1024) ! ! static struct str_hash string_hash = { 0, INITIAL_HASHSIZE, 0, 0, 0 }; ! ! enum insert_option { INSERT, NO_INSERT }; ! ! static struct str_header *alloc_string PARAMS ((const char *, size_t, ! enum insert_option)); ! static inline unsigned int calc_hash PARAMS ((const unsigned char *, size_t)); ! static void mark_string_hash PARAMS ((void *)); ! static struct str_header *expand_string_table PARAMS ((struct str_header *)); ! ! /* Convenience macro for iterating over the hash table. E is set to ! each live entry in turn. */ ! #define FORALL_STRINGS(E) \ ! for (E = string_hash.entries; E < string_hash.entries+string_hash.nslots; E++) \ ! if (E->ptr != NULL) ! /* block here */ ! ! /* Likewise, but tests ->data instead of ->ptr (for cases where we only ! care about entries with ->data set) */ ! #define FORALL_IDS(E) \ ! for (E = string_hash.entries; E < string_hash.entries+string_hash.nslots; E++) \ ! if (E->data != NULL) ! ! /* 0 while creating built-in identifiers. */ ! static int do_identifier_warnings; /* Initialize the string pool. */ void init_stringpool () { gcc_obstack_init (&string_stack); ! ggc_add_root (&string_hash, 1, sizeof string_hash, mark_string_hash); ! ! /* Strings need no alignment. */ ! obstack_alignment_mask (&string_stack) = 0; ! ! string_hash.entries = (struct str_header *) ! xcalloc (string_hash.nslots, sizeof (struct str_header)); ! } ! ! /* Enable warnings on similar identifiers (if requested). ! Done after the built-in identifiers are created. */ ! void ! start_identifier_warnings () ! { ! do_identifier_warnings = 1; ! } ! ! /* Record the size of an identifier node for the language in use. ! SIZE is the total size in bytes. ! This is called by the language-specific files. This must be ! called before allocating any identifiers. */ ! void ! set_identifier_size (size) ! int size; ! { ! tree_code_length[(int) IDENTIFIER_NODE] ! = (size - sizeof (struct tree_common)) / sizeof (tree); ! } ! ! /* Calculate the hash of the string STR, which is of length LEN. */ ! static inline unsigned int ! calc_hash (str, len) ! const unsigned char *str; ! size_t len; ! { ! size_t n = len; ! unsigned int r = 0; ! #define HASHSTEP(r, c) ((r) * 67 + (c - 113)); ! ! while (n--) ! r = HASHSTEP (r, *str++); ! ! return r + len; ! #undef HASHSTEP ! } ! ! /* Internal primitive: returns the header structure for the string of ! length LENGTH, containing CONTENTS. If that string already exists ! in the table, returns the existing entry. If the string hasn't ! been seen before and the last argument is INSERT, inserts and returns ! a new entry. Otherwise returns NULL. */ ! static struct str_header * ! alloc_string (contents, length, insert) ! const char *contents; ! size_t length; ! enum insert_option insert; ! { ! unsigned int hash = calc_hash ((const unsigned char *)contents, length); ! unsigned int hash2; ! unsigned int index; ! size_t sizemask; ! struct str_header *entry; ! struct str_header *entries = string_hash.entries; ! ! sizemask = string_hash.nslots - 1; ! index = hash & sizemask; ! ! /* hash2 must be odd, so we're guaranteed to visit every possible ! location in the table during rehashing. */ ! hash2 = ((hash * 17) & sizemask) | 1; ! string_hash.searches++; ! ! for (;;) ! { ! entry = entries + index; ! ! if (entry->ptr == NULL) ! break; ! ! if (entry->len == length ! && !memcmp (entry->ptr, contents, length)) ! return entry; ! ! index = (index + hash2) & sizemask; ! string_hash.collisions++; ! } ! ! if (insert == NO_INSERT) ! return NULL; ! ! obstack_grow0 (&string_stack, contents, length); ! entry->ptr = (const char *) obstack_finish (&string_stack); ! entry->len = length; ! entry->data = NULL; ! ! if (++string_hash.nelements * 4 < string_hash.nslots * 3) ! return entry; ! ! /* Must expand the string table. */ ! return expand_string_table (entry); } ! /* Subroutine of alloc_string which doubles the size of the hash table ! and rehashes all the strings into the new table. Returns the entry ! in the new table corresponding to ENTRY. */ ! static struct str_header * ! expand_string_table (entry) ! struct str_header *entry; { ! struct str_header *nentries; ! struct str_header *e, *nentry = NULL; ! size_t size, sizemask; ! ! size = string_hash.nslots * 2; ! nentries = (struct str_header *) xcalloc (size, sizeof (struct str_header)); ! sizemask = size - 1; ! ! FORALL_STRINGS (e) ! { ! unsigned int index, hash, hash2; ! ! hash = calc_hash ((const unsigned char *) e->ptr, e->len); ! hash2 = ((hash * 17) & sizemask) | 1; ! index = hash & sizemask; ! ! for (;;) ! { ! if (nentries[index].ptr == NULL) ! { ! nentries[index].ptr = e->ptr; ! nentries[index].len = e->len; ! nentries[index].data = e->data; ! if (e == entry) ! nentry = nentries + index; ! break; ! } ! ! index = (index + hash2) & sizemask; ! } ! } ! ! free (string_hash.entries); ! string_hash.entries = nentries; ! string_hash.nslots = size; ! return nentry; } /* Allocate and return a string constant of length LENGTH, containing --- 43,72 ---- '5', 0, '6', 0, '7', 0, '8', 0, '9', 0 }; + struct ht *ident_hash; static struct obstack string_stack; ! static hashnode alloc_node PARAMS ((hash_table *)); ! static int mark_ident PARAMS ((struct cpp_reader *, hashnode, const PTR)); ! static void mark_ident_hash PARAMS ((void *)); /* Initialize the string pool. */ void init_stringpool () { + /* Create with 16K (2^14) entries. */ + ident_hash = ht_create (14); + ident_hash->alloc_node = alloc_node; gcc_obstack_init (&string_stack); ! ggc_add_root (&ident_hash, 1, sizeof ident_hash, mark_ident_hash); } ! /* Allocate a hash node. */ ! static hashnode ! alloc_node (table) ! hash_table *table ATTRIBUTE_UNUSED; { ! return GCC_IDENT_TO_HT_IDENT (make_node (IDENTIFIER_NODE)); } /* Allocate and return a string constant of length LENGTH, containing *************** ggc_alloc_string (contents, length) *** 262,325 **** const char *contents; int length; { - struct str_header *str; - if (length == -1) length = strlen (contents); if (length == 0) return empty_string; ! if (length == 1 && contents[0] >= '0' && contents[0] <= '9') return digit_string (contents[0] - '0'); ! str = alloc_string (contents, length, INSERT); ! return str->ptr; } /* Return an IDENTIFIER_NODE whose name is TEXT (a null-terminated string). If an identifier with that name has previously been referred to, the same node is returned this time. */ tree get_identifier (text) const char *text; { ! tree idp; ! struct str_header *str; ! size_t length = strlen (text); ! str = alloc_string (text, length, INSERT); ! idp = str->data; ! if (idp == NULL) ! { ! if (TREE_CODE_LENGTH (IDENTIFIER_NODE) < 0) ! abort (); /* set_identifier_size hasn't been called. */ ! /* If this identifier is longer than the clash-warning length, ! do a brute force search of the entire table for clashes. */ ! if (warn_id_clash && do_identifier_warnings && length >= (size_t) id_clash_len) ! { ! struct str_header *e; ! FORALL_IDS (e) ! { ! if (e->len >= (size_t)id_clash_len ! && !strncmp (e->ptr, text, id_clash_len)) ! { ! warning ("\"%s\" and \"%s\" identical in first %d characters", ! text, e->ptr, id_clash_len); ! break; ! } ! } ! } ! idp = make_node (IDENTIFIER_NODE); ! IDENTIFIER_LENGTH (idp) = length; ! IDENTIFIER_POINTER (idp) = str->ptr; ! #ifdef GATHER_STATISTICS ! id_string_size += length; ! #endif ! str->data = idp; ! } ! return idp; } /* If an identifier with the name TEXT (a null-terminated string) has --- 80,127 ---- const char *contents; int length; { if (length == -1) length = strlen (contents); if (length == 0) return empty_string; ! if (length == 1 && ISDIGIT (contents[0])) return digit_string (contents[0] - '0'); ! obstack_grow0 (&string_stack, contents, length); ! return obstack_finish (&string_stack); } /* Return an IDENTIFIER_NODE whose name is TEXT (a null-terminated string). If an identifier with that name has previously been referred to, the same node is returned this time. */ + tree get_identifier (text) const char *text; { ! hashnode ht_node = ht_lookup (ident_hash, ! (const unsigned char *) text, ! strlen (text), HT_ALLOC); ! /* ht_node can't be NULL here. */ ! return HT_IDENT_TO_GCC_IDENT (ht_node); ! } ! /* Identical to get_identifier, except that the length is assumed ! known. */ ! ! tree ! get_identifier_with_length (text, length) ! const char *text; ! unsigned int length; ! { ! hashnode ht_node = ht_lookup (ident_hash, ! (const unsigned char *) text, ! length, HT_ALLOC); ! /* ht_node can't be NULL here. */ ! return HT_IDENT_TO_GCC_IDENT (ht_node); } /* If an identifier with the name TEXT (a null-terminated string) has *************** tree *** 330,362 **** maybe_get_identifier (text) const char *text; { ! struct str_header *str; ! size_t length = strlen (text); ! ! str = alloc_string (text, length, NO_INSERT); ! if (str) ! return str->data; /* N.B. str->data might be null here, if the ! string has been used but not as an identifier. */ ! return NULL_TREE; ! } ! /* Look up an identifier with the name TEXT, replace its identifier ! node with NODE, and return the old identifier node. This is used ! by languages which need to enable and disable keywords based on ! context; e.g. see remember_protocol_qualifiers in objc/objc-act.c. */ ! tree ! set_identifier (text, node) ! const char *text; ! tree node; ! { ! struct str_header *str; ! tree old; ! size_t length = strlen (text); ! str = alloc_string (text, length, INSERT); ! old = str->data; /* might be null */ ! str->data = node; ! return old; } /* Report some basic statistics about the string pool. */ --- 132,145 ---- maybe_get_identifier (text) const char *text; { ! hashnode ht_node; ! ht_node = ht_lookup (ident_hash, (const unsigned char *) text, ! strlen (text), HT_NO_INSERT); ! if (ht_node) ! return HT_IDENT_TO_GCC_IDENT (ht_node); ! return NULL_TREE; } /* Report some basic statistics about the string pool. */ *************** set_identifier (text, node) *** 364,438 **** void stringpool_statistics () { ! size_t nelts, nids, overhead, headers; ! size_t total_bytes, longest, sum_of_squares; ! double exp_len, exp_len2, exp2_len; ! struct str_header *e; ! #define SCALE(x) ((unsigned long) ((x) < 1024*10 \ ! ? (x) \ ! : ((x) < 1024*1024*10 \ ! ? (x) / 1024 \ ! : (x) / (1024*1024)))) ! #define LABEL(x) ((x) < 1024*10 ? ' ' : ((x) < 1024*1024*10 ? 'k' : 'M')) ! ! total_bytes = longest = sum_of_squares = nids = 0; ! FORALL_STRINGS (e) ! { ! size_t n = e->len; ! ! total_bytes += n; ! sum_of_squares += n*n; ! if (n > longest) ! longest = n; ! if (e->data) ! nids++; ! } ! ! nelts = string_hash.nelements; ! overhead = obstack_memory_used (&string_stack) - total_bytes; ! headers = string_hash.nslots * sizeof (struct str_header); ! ! fprintf (stderr, ! "\nString pool\n\ ! entries\t\t%lu\n\ ! identifiers\t%lu (%.2f%%)\n\ ! slots\t\t%lu\n\ ! bytes\t\t%lu%c (%lu%c overhead)\n\ ! table size\t%lu%c\n", ! (unsigned long) nelts, ! (unsigned long) nids, nids * 100.0 / nelts, ! (unsigned long) string_hash.nslots, ! SCALE (total_bytes), LABEL (total_bytes), ! SCALE (overhead), LABEL (overhead), ! SCALE (headers), LABEL (headers)); ! exp_len = (double)total_bytes / (double)nelts; ! exp2_len = exp_len * exp_len; ! exp_len2 = (double)sum_of_squares / (double)nelts; ! fprintf (stderr, ! "coll/search\t%.4f\n\ ! ins/search\t%.4f\n\ ! avg. entry\t%.2f bytes (+/- %.2f)\n\ ! longest entry\t%lu\n", ! (double) string_hash.collisions / (double) string_hash.searches, ! (double) nelts / (double) string_hash.searches, ! exp_len, approx_sqrt (exp_len2 - exp2_len), ! (unsigned long) longest); ! #undef SCALE ! #undef LABEL } ! /* Mark the string hash for GC. */ static void ! mark_string_hash (arg) ! void *arg ATTRIBUTE_UNUSED; { ! struct str_header *h; ! ! FORALL_IDS (h) ! { ! ggc_mark_tree (h->data); ! } } --- 147,172 ---- void stringpool_statistics () { ! ht_dump_statistics (ident_hash); ! } ! /* Mark an identifier for GC. */ ! static int ! mark_ident (pfile, h, v) ! struct cpp_reader *pfile ATTRIBUTE_UNUSED; ! hashnode h; ! const PTR v ATTRIBUTE_UNUSED; ! { ! ggc_mark_nonnull_tree (HT_IDENT_TO_GCC_IDENT (h)); ! return 1; } ! /* Mark all identifiers for GC. */ static void ! mark_ident_hash (arg) ! PTR arg ATTRIBUTE_UNUSED; { ! ht_forall (ident_hash, mark_ident, NULL); } diff -Nrc3pad gcc-3.0.4/gcc/system.h gcc-3.1/gcc/system.h *** gcc-3.0.4/gcc/system.h Thu Mar 15 19:02:01 2001 --- gcc-3.1/gcc/system.h Thu Feb 21 23:03:14 2002 *************** *** 1,34 **** /* Get common system includes and various definitions and declarations based on autoconf macros. ! Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ ! #ifndef __GCC_SYSTEM_H__ ! #define __GCC_SYSTEM_H__ /* This is the location of the online document giving information how to report bugs. If you change this string, also check for strings not under control of the preprocessor. */ #define GCCBUGURL "" ! /* We must include stdarg.h/varargs.h before stdio.h. */ #ifdef ANSI_PROTOTYPES #include #else --- 1,34 ---- /* Get common system includes and various definitions and declarations based on autoconf macros. ! Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ ! #ifndef GCC_SYSTEM_H ! #define GCC_SYSTEM_H /* This is the location of the online document giving information how to report bugs. If you change this string, also check for strings not under control of the preprocessor. */ #define GCCBUGURL "" ! /* We must include stdarg.h/varargs.h before stdio.h. */ #ifdef ANSI_PROTOTYPES #include #else *************** Boston, MA 02111-1307, USA. */ *** 55,82 **** #endif /* The compiler is not a multi-threaded application and therefore we ! do not have to use the locking functions. ! HAVE_DECL_PUTC_UNLOCKED actually indicates whether or not the IO code is multi-thread safe by default. If it is set to 0, then do not worry about using the _unlocked functions. ! fputs_unlocked is an extension and needs to be prototyped specially. */ ! #if defined HAVE_PUTC_UNLOCKED && (defined (HAVE_DECL_PUTC_UNLOCKED) && HAVE_DECL_PUTC_UNLOCKED) ! # undef putc ! # define putc(C, Stream) putc_unlocked (C, Stream) ! #endif ! #if defined HAVE_FPUTC_UNLOCKED && (defined (HAVE_DECL_PUTC_UNLOCKED) && HAVE_DECL_PUTC_UNLOCKED) ! # undef fputc ! # define fputc(C, Stream) fputc_unlocked (C, Stream) ! #endif ! #if defined HAVE_FPUTS_UNLOCKED && (defined (HAVE_DECL_PUTC_UNLOCKED) && HAVE_DECL_PUTC_UNLOCKED) ! # undef fputs ! # define fputs(String, Stream) fputs_unlocked (String, Stream) ! # if defined (HAVE_DECL_FPUTS_UNLOCKED) && !HAVE_DECL_FPUTS_UNLOCKED extern int fputs_unlocked PARAMS ((const char *, FILE *)); # endif #endif /* There are an extraordinary number of issues with . --- 55,107 ---- #endif /* The compiler is not a multi-threaded application and therefore we ! do not have to use the locking functions. In fact, using the locking ! functions can cause the compiler to be significantly slower under ! I/O bound conditions (such as -g -O0 on very large source files). ! HAVE_DECL_PUTC_UNLOCKED actually indicates whether or not the stdio code is multi-thread safe by default. If it is set to 0, then do not worry about using the _unlocked functions. ! fputs_unlocked, fwrite_unlocked, and fprintf_unlocked are ! extensions and need to be prototyped by hand (since we do not ! define _GNU_SOURCE). */ ! #if defined HAVE_DECL_PUTC_UNLOCKED && HAVE_DECL_PUTC_UNLOCKED ! ! # ifdef HAVE_PUTC_UNLOCKED ! # undef putc ! # define putc(C, Stream) putc_unlocked (C, Stream) ! # endif ! # ifdef HAVE_FPUTC_UNLOCKED ! # undef fputc ! # define fputc(C, Stream) fputc_unlocked (C, Stream) ! # endif ! ! # ifdef HAVE_FPUTS_UNLOCKED ! # undef fputs ! # define fputs(String, Stream) fputs_unlocked (String, Stream) ! # if defined (HAVE_DECL_FPUTS_UNLOCKED) && !HAVE_DECL_FPUTS_UNLOCKED extern int fputs_unlocked PARAMS ((const char *, FILE *)); + # endif # endif + # ifdef HAVE_FWRITE_UNLOCKED + # undef fwrite + # define fwrite(Ptr, Size, N, Stream) fwrite_unlocked (Ptr, Size, N, Stream) + # if defined (HAVE_DECL_FWRITE_UNLOCKED) && !HAVE_DECL_FWRITE_UNLOCKED + extern int fwrite_unlocked PARAMS ((const PTR, size_t, size_t, FILE *)); + # endif + # endif + # ifdef HAVE_FPRINTF_UNLOCKED + # undef fprintf + /* We can't use a function-like macro here because we don't know if + we have varargs macros. */ + # define fprintf fprintf_unlocked + # if defined (HAVE_DECL_FPRINTF_UNLOCKED) && !HAVE_DECL_FPRINTF_UNLOCKED + extern int fprintf_unlocked PARAMS ((FILE *, const char *, ...)); + # endif + # endif + #endif /* There are an extraordinary number of issues with . *************** extern int fputs_unlocked PARAMS ((const *** 84,99 **** replacement instead. */ #include - /* Define a default escape character; it's different for EBCDIC. */ - #ifndef TARGET_ESC - #define TARGET_ESC 033 - #endif - #include #include ! #ifndef errno extern int errno; #endif --- 109,119 ---- replacement instead. */ #include #include #include ! #if !defined (errno) && defined (HAVE_DECL_ERRNO) && !HAVE_DECL_ERRNO extern int errno; #endif *************** extern int errno; *** 112,122 **** #ifdef HAVE_STDLIB_H # include - # ifdef USE_C_ALLOCA - /* Note that systems that use glibc have a that includes - that defines alloca, so let USE_C_ALLOCA override this. */ - # undef alloca #endif #endif #ifdef HAVE_UNISTD_H --- 132,156 ---- #ifdef HAVE_STDLIB_H # include #endif + + /* If we don't have an overriding definition, set SUCCESS_EXIT_CODE and + FATAL_EXIT_CODE to EXIT_SUCCESS and EXIT_FAILURE respectively, + or 0 and 1 if those macros are not defined. */ + #ifndef SUCCESS_EXIT_CODE + # ifdef EXIT_SUCCESS + # define SUCCESS_EXIT_CODE EXIT_SUCCESS + # else + # define SUCCESS_EXIT_CODE 0 + # endif + #endif + + #ifndef FATAL_EXIT_CODE + # ifdef EXIT_FAILURE + # define FATAL_EXIT_CODE EXIT_FAILURE + # else + # define FATAL_EXIT_CODE 1 + # endif #endif #ifdef HAVE_UNISTD_H *************** extern int errno; *** 125,163 **** #ifdef HAVE_SYS_PARAM_H # include #endif #if HAVE_LIMITS_H # include #endif ! /* Find HOST_WIDEST_INT and set its bit size, type and print macros. ! It will be the largest integer mode supported by the host which may ! (or may not) be larger than HOST_WIDE_INT. This must appear after ! since we only use `long long' if its bigger than a ! `long' and also if it is supported by macros in limits.h. For old ! hosts which don't have a limits.h (and thus won't include it in ! stage2 cause we don't rerun configure) we assume gcc supports long ! long.) Note, you won't get these defined if you don't include ! {ht}config.h before this file to set the HOST_BITS_PER_* macros. */ ! #ifndef HOST_WIDEST_INT ! # if defined (HOST_BITS_PER_LONG) && defined (HOST_BITS_PER_LONGLONG) ! # if (HOST_BITS_PER_LONGLONG > HOST_BITS_PER_LONG) && (defined (LONG_LONG_MAX) || defined (LONGLONG_MAX) || defined (LLONG_MAX) || defined (__GNUC__)) ! # define HOST_BITS_PER_WIDEST_INT HOST_BITS_PER_LONGLONG ! # define HOST_WIDEST_INT long long ! # define HOST_WIDEST_INT_PRINT_DEC "%lld" ! # define HOST_WIDEST_INT_PRINT_UNSIGNED "%llu" ! # define HOST_WIDEST_INT_PRINT_HEX "0x%llx" ! # else ! # define HOST_BITS_PER_WIDEST_INT HOST_BITS_PER_LONG ! # define HOST_WIDEST_INT long ! # define HOST_WIDEST_INT_PRINT_DEC "%ld" ! # define HOST_WIDEST_INT_PRINT_UNSIGNED "%lu" ! # define HOST_WIDEST_INT_PRINT_HEX "0x%lx" ! # endif /*(long long>long) && (LONG_LONG_MAX||LONGLONG_MAX||LLONG_MAX||GNUC)*/ ! # endif /* defined(HOST_BITS_PER_LONG) && defined(HOST_BITS_PER_LONGLONG) */ ! #endif /* ! HOST_WIDEST_INT */ /* Infrastructure for defining missing _MAX and _MIN macros. Note that macros defined with these cannot be used in #if. */ --- 159,184 ---- #ifdef HAVE_SYS_PARAM_H # include + /* We use this identifier later and it appears in some vendor param.h's. */ + # undef PREFETCH #endif #if HAVE_LIMITS_H # include #endif ! /* Get definitions of HOST_WIDE_INT and HOST_WIDEST_INT. */ ! #include "hwint.h" ! /* A macro to determine whether a VALUE lies inclusively within a ! certain range without evaluating the VALUE more than once. This ! macro won't warn if the VALUE is unsigned and the LOWER bound is ! zero, as it would e.g. with "VALUE >= 0 && ...". Note the LOWER ! bound *is* evaluated twice, and LOWER must not be greater than ! UPPER. However the bounds themselves can be either positive or ! negative. */ ! #define IN_RANGE(VALUE, LOWER, UPPER) \ ! ((unsigned HOST_WIDE_INT) ((VALUE) - (LOWER)) <= ((UPPER) - (LOWER))) /* Infrastructure for defining missing _MAX and _MIN macros. Note that macros defined with these cannot be used in #if. */ *************** extern int errno; *** 251,266 **** here. These checks will be in the undefined state while configure is running so be careful to test "defined (HAVE_DECL_*)". */ - #ifndef bcopy - # ifdef HAVE_BCOPY - # if defined (HAVE_DECL_BCOPY) && !HAVE_DECL_BCOPY - extern void bcopy PARAMS ((const PTR, PTR, size_t)); - # endif - # else /* ! HAVE_BCOPY */ - # define bcopy(src,dst,len) memmove((dst),(src),(len)) - # endif - #endif - #if defined (HAVE_DECL_ATOF) && !HAVE_DECL_ATOF extern double atof PARAMS ((const char *)); #endif --- 272,277 ---- *************** extern PTR realloc PARAMS ((PTR, size_t) *** 314,320 **** #endif /* If the system doesn't provide strsignal, we get it defined in ! libiberty but no declaration is supplied. */ #ifndef HAVE_STRSIGNAL # ifndef strsignal extern const char *strsignal PARAMS ((int)); --- 325,331 ---- #endif /* If the system doesn't provide strsignal, we get it defined in ! libiberty but no declaration is supplied. */ #ifndef HAVE_STRSIGNAL # ifndef strsignal extern const char *strsignal PARAMS ((int)); *************** extern int setrlimit PARAMS ((int, const *** 344,350 **** #endif /* HAVE_VOLATILE only refers to the stage1 compiler. We also check ! __STDC__ and assume gcc sets it and has volatile in stage >=2. */ #if !defined(HAVE_VOLATILE) && !defined(__STDC__) && !defined(volatile) #define volatile #endif --- 355,361 ---- #endif /* HAVE_VOLATILE only refers to the stage1 compiler. We also check ! __STDC__ and assume gcc sets it and has volatile in stage >=2. */ #if !defined(HAVE_VOLATILE) && !defined(__STDC__) && !defined(volatile) #define volatile #endif *************** extern void abort PARAMS ((void)); *** 366,386 **** #endif - - /* Define a STRINGIFY macro that's right for ANSI or traditional C. - Note: if the argument passed to STRINGIFY is itself a macro, eg - #define foo bar, STRINGIFY(foo) will produce "foo", not "bar". - Although the __STDC__ case could be made to expand this via a layer - of indirection, the traditional C case can not do so. Therefore - this behavior is not supported. */ - #ifndef STRINGIFY - # ifdef HAVE_STRINGIZE - # define STRINGIFY(STRING) #STRING - # else - # define STRINGIFY(STRING) "STRING" - # endif - #endif /* ! STRINGIFY */ - #if HAVE_SYS_STAT_H # include #endif --- 377,382 ---- *************** extern void abort PARAMS ((void)); *** 444,450 **** # define STDERR_FILENO 2 #endif ! /* Some systems have mkdir that takes a single argument. */ #ifdef MKDIR_TAKES_ONE_ARG # define mkdir(a,b) mkdir(a) #endif --- 440,446 ---- # define STDERR_FILENO 2 #endif ! /* Some systems have mkdir that takes a single argument. */ #ifdef MKDIR_TAKES_ONE_ARG # define mkdir(a,b) mkdir(a) #endif *************** extern void abort PARAMS ((void)); *** 490,505 **** (IS_DIR_SEPARATOR ((STR)[0]) || (STR)[0] == '$') #endif ! /* Get libiberty declarations. */ #include "libiberty.h" ! ! /* Make sure that ONLY_INT_FIELDS has an integral value. */ ! #ifdef ONLY_INT_FIELDS ! #undef ONLY_INT_FIELDS ! #define ONLY_INT_FIELDS 1 ! #else ! #define ONLY_INT_FIELDS 0 ! #endif /* Provide a default for the HOST_BIT_BUCKET. This suffices for POSIX-like hosts. */ --- 486,494 ---- (IS_DIR_SEPARATOR ((STR)[0]) || (STR)[0] == '$') #endif ! /* Get libiberty declarations. */ #include "libiberty.h" ! #include "symcat.h" /* Provide a default for the HOST_BIT_BUCKET. This suffices for POSIX-like hosts. */ *************** extern void abort PARAMS ((void)); *** 508,531 **** #define HOST_BIT_BUCKET "/dev/null" #endif ! /* Enumerated bitfields are safe to use unless we've been explictly told ! otherwise or if they are signed. */ ! ! #define USE_ENUM_BITFIELDS (__GNUC__ || (!ONLY_INT_FIELDS && ENUM_BITFIELDS_ARE_UNSIGNED)) ! #if USE_ENUM_BITFIELDS #define ENUM_BITFIELD(TYPE) enum TYPE #else #define ENUM_BITFIELD(TYPE) unsigned int #endif #ifndef offsetof ! #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) #endif /* Traditional C cannot initialize union members of structs. Provide a macro which expands appropriately to handle it. This only works ! if you intend to initalize the union member to zero since it relies on default initialization to zero in the traditional C case. */ #ifdef __STDC__ #define UNION_INIT_ZERO , {0} --- 497,518 ---- #define HOST_BIT_BUCKET "/dev/null" #endif ! /* Be conservative and only use enum bitfields with GCC. ! FIXME: provide a complete autoconf test for buggy enum bitfields. */ ! #if (GCC_VERSION > 2000) #define ENUM_BITFIELD(TYPE) enum TYPE #else #define ENUM_BITFIELD(TYPE) unsigned int #endif #ifndef offsetof ! #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *) 0)->MEMBER) #endif /* Traditional C cannot initialize union members of structs. Provide a macro which expands appropriately to handle it. This only works ! if you intend to initialize the union member to zero since it relies on default initialization to zero in the traditional C case. */ #ifdef __STDC__ #define UNION_INIT_ZERO , {0} *************** extern void abort PARAMS ((void)); *** 533,543 **** #define UNION_INIT_ZERO #endif - /* GCC now gives implicit declaration warnings for undeclared builtins. */ - #if defined(__GNUC__) && defined (__SIZE_TYPE__) - extern void *alloca (__SIZE_TYPE__); - #endif - /* Various error reporting routines want to use __FUNCTION__. */ #if (GCC_VERSION < 2007) #ifndef __FUNCTION__ --- 520,525 ---- *************** extern void *alloca (__SIZE_TYPE__); *** 545,553 **** #endif /* ! __FUNCTION__ */ #endif /* Provide some sort of boolean type. We use stdbool.h if it's ! available. This is dead last because various system headers might ! mess us up. */ #undef bool #undef true #undef false --- 527,542 ---- #endif /* ! __FUNCTION__ */ #endif + /* __builtin_expect(A, B) evaluates to A, but notifies the compiler that + the most likely value of A is B. This feature was added at some point + between 2.95 and 3.0. Let's use 3.0 as the lower bound for now. */ + #if (GCC_VERSION < 3000) + #define __builtin_expect(a, b) (a) + #endif + /* Provide some sort of boolean type. We use stdbool.h if it's ! available. This must be after all inclusion of system headers, ! as some of them will mess us up. */ #undef bool #undef true #undef false *************** typedef char _Bool; *** 568,571 **** #define TRUE true #define FALSE false ! #endif /* __GCC_SYSTEM_H__ */ --- 557,622 ---- #define TRUE true #define FALSE false ! /* As the last action in this file, we poison the identifiers that ! shouldn't be used. Note, luckily gcc-3.0's token-based integrated ! preprocessor won't trip on poisoned identifiers that arrive from ! the expansion of macros. E.g. #define strrchr rindex, won't error ! if rindex is poisoned after this directive is issued and later on ! strrchr is called. ! ! Note: We define bypass macros for the few cases where we really ! want to use the libc memory allocation routines. Otherwise we ! insist you use the "x" versions from libiberty. */ ! ! #define really_call_malloc malloc ! #define really_call_calloc calloc ! #define really_call_realloc realloc ! ! #if (GCC_VERSION >= 3000) ! ! /* Note autoconf checks for prototype declarations and includes ! system.h while doing so. Only poison these tokens if actually ! compiling gcc, so that the autoconf declaration tests for malloc ! etc don't spuriously fail. */ ! #ifdef IN_GCC ! #undef malloc ! #undef realloc ! #undef calloc ! #undef strdup ! #pragma GCC poison malloc realloc calloc strdup ! ! /* Old target macros that have moved to the target hooks structure. */ ! #pragma GCC poison ASM_OPEN_PAREN ASM_CLOSE_PAREN \ ! FUNCTION_PROLOGUE FUNCTION_EPILOGUE \ ! FUNCTION_END_PROLOGUE FUNCTION_BEGIN_EPILOGUE \ ! DECL_MACHINE_ATTRIBUTES COMP_TYPE_ATTRIBUTES INSERT_ATTRIBUTES \ ! VALID_MACHINE_DECL_ATTRIBUTE VALID_MACHINE_TYPE_ATTRIBUTE \ ! SET_DEFAULT_TYPE_ATTRIBUTES SET_DEFAULT_DECL_ATTRIBUTES \ ! MERGE_MACHINE_TYPE_ATTRIBUTES MERGE_MACHINE_DECL_ATTRIBUTES \ ! MD_INIT_BUILTINS MD_EXPAND_BUILTIN ASM_OUTPUT_CONSTRUCTOR \ ! ASM_OUTPUT_DESTRUCTOR SIGNED_CHAR_SPEC ! ! /* And other obsolete target macros, or macros that used to be in target ! headers and were not used, and may be obsolete or may never have ! been used. */ ! #pragma GCC poison INT_ASM_OP ASM_OUTPUT_EH_REGION_BEG \ ! ASM_OUTPUT_EH_REGION_END ASM_OUTPUT_LABELREF_AS_INT \ ! DOESNT_NEED_UNWINDER EH_TABLE_LOOKUP OBJC_SELECTORS_WITHOUT_LABELS \ ! OMIT_EH_TABLE EASY_DIV_EXPR IMPLICIT_FIX_EXPR \ ! LONGJMP_RESTORE_FROM_STACK MAX_INT_TYPE_SIZE ASM_IDENTIFY_GCC \ ! STDC_VALUE TRAMPOLINE_ALIGN ASM_IDENTIFY_GCC_AFTER_SOURCE \ ! SLOW_ZERO_EXTEND SUBREG_REGNO_OFFSET DWARF_LINE_MIN_INSTR_LENGTH ! ! #endif /* IN_GCC */ ! ! /* Note: not all uses of the `index' token (e.g. variable names and ! structure members) have been eliminated. */ ! #undef bcopy ! #undef bzero ! #undef bcmp ! #undef rindex ! #pragma GCC poison bcopy bzero bcmp rindex ! ! #endif /* GCC >= 3.0 */ ! ! #endif /* ! GCC_SYSTEM_H */ diff -Nrc3pad gcc-3.0.4/gcc/target-def.h gcc-3.1/gcc/target-def.h *** gcc-3.0.4/gcc/target-def.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/target-def.h Sat Feb 9 02:18:11 2002 *************** *** 0 **** --- 1,202 ---- + /* Default initializers for a generic GCC target. + Copyright (C) 2001, 2002 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. + + In other words, you are welcome to use, share and improve this program. + You are forbidden to forbid anyone else to use, share and improve + what you give them. Help stamp out software-hoarding! */ + + /* See target.h for a description of what this file contains and how to + use it. + + We want to have non-NULL default definitions of all hook functions, + even if they do nothing. */ + + /* Note that if one of these macros must be defined in an OS .h file + rather than the .c file, then we need to wrap the default + definition in a #ifndef, since files include tm.h before this one. */ + + /* Assembler output. */ + #define TARGET_ASM_OPEN_PAREN "(" + #define TARGET_ASM_CLOSE_PAREN ")" + #define TARGET_ASM_BYTE_OP "\t.byte\t" + + #define TARGET_ASM_ALIGNED_HI_OP "\t.short\t" + #define TARGET_ASM_ALIGNED_SI_OP "\t.long\t" + #define TARGET_ASM_ALIGNED_DI_OP NULL + #define TARGET_ASM_ALIGNED_TI_OP NULL + + /* GAS and SYSV4 assemblers accept these. */ + #if defined (OBJECT_FORMAT_ELF) || defined (OBJECT_FORMAT_ROSE) + #define TARGET_ASM_UNALIGNED_HI_OP "\t.2byte\t" + #define TARGET_ASM_UNALIGNED_SI_OP "\t.4byte\t" + #define TARGET_ASM_UNALIGNED_DI_OP "\t.8byte\t" + #define TARGET_ASM_UNALIGNED_TI_OP NULL + #else + #define TARGET_ASM_UNALIGNED_HI_OP NULL + #define TARGET_ASM_UNALIGNED_SI_OP NULL + #define TARGET_ASM_UNALIGNED_DI_OP NULL + #define TARGET_ASM_UNALIGNED_TI_OP NULL + #endif /* OBJECT_FORMAT_ELF || OBJECT_FORMAT_ROSE */ + + #define TARGET_ASM_INTEGER default_assemble_integer + + #define TARGET_ASM_FUNCTION_PROLOGUE default_function_pro_epilogue + #define TARGET_ASM_FUNCTION_EPILOGUE default_function_pro_epilogue + #define TARGET_ASM_FUNCTION_END_PROLOGUE no_asm_to_stream + #define TARGET_ASM_FUNCTION_BEGIN_EPILOGUE no_asm_to_stream + + #if !defined(TARGET_ASM_CONSTRUCTOR) && !defined(USE_COLLECT2) + # ifdef CTORS_SECTION_ASM_OP + # define TARGET_ASM_CONSTRUCTOR default_ctor_section_asm_out_constructor + # else + # ifdef TARGET_ASM_NAMED_SECTION + # define TARGET_ASM_CONSTRUCTOR default_named_section_asm_out_constructor + # else + # define TARGET_ASM_CONSTRUCTOR default_stabs_asm_out_constructor + # endif + # endif + #endif + + #if !defined(TARGET_ASM_DESTRUCTOR) && !defined(USE_COLLECT2) + # ifdef DTORS_SECTION_ASM_OP + # define TARGET_ASM_DESTRUCTOR default_dtor_section_asm_out_destructor + # else + # ifdef TARGET_ASM_NAMED_SECTION + # define TARGET_ASM_DESTRUCTOR default_named_section_asm_out_destructor + # else + # define TARGET_ASM_DESTRUCTOR default_stabs_asm_out_destructor + # endif + # endif + #endif + + #if defined(TARGET_ASM_CONSTRUCTOR) && defined(TARGET_ASM_DESTRUCTOR) + #define TARGET_HAVE_CTORS_DTORS true + #else + #define TARGET_HAVE_CTORS_DTORS false + #define TARGET_ASM_CONSTRUCTOR NULL + #define TARGET_ASM_DESTRUCTOR NULL + #endif + + #ifdef TARGET_ASM_NAMED_SECTION + #define TARGET_HAVE_NAMED_SECTIONS true + #else + #define TARGET_ASM_NAMED_SECTION default_no_named_section + #define TARGET_HAVE_NAMED_SECTIONS false + #endif + + #ifndef TARGET_ASM_EXCEPTION_SECTION + #define TARGET_ASM_EXCEPTION_SECTION default_exception_section + #endif + + #ifndef TARGET_ASM_EH_FRAME_SECTION + #define TARGET_ASM_EH_FRAME_SECTION default_eh_frame_section + #endif + + #define TARGET_ASM_ALIGNED_INT_OP \ + {TARGET_ASM_ALIGNED_HI_OP, \ + TARGET_ASM_ALIGNED_SI_OP, \ + TARGET_ASM_ALIGNED_DI_OP, \ + TARGET_ASM_ALIGNED_TI_OP} + + #define TARGET_ASM_UNALIGNED_INT_OP \ + {TARGET_ASM_UNALIGNED_HI_OP, \ + TARGET_ASM_UNALIGNED_SI_OP, \ + TARGET_ASM_UNALIGNED_DI_OP, \ + TARGET_ASM_UNALIGNED_TI_OP} + + #define TARGET_ASM_OUT {TARGET_ASM_OPEN_PAREN, \ + TARGET_ASM_CLOSE_PAREN, \ + TARGET_ASM_BYTE_OP, \ + TARGET_ASM_ALIGNED_INT_OP, \ + TARGET_ASM_UNALIGNED_INT_OP, \ + TARGET_ASM_INTEGER, \ + TARGET_ASM_FUNCTION_PROLOGUE, \ + TARGET_ASM_FUNCTION_END_PROLOGUE, \ + TARGET_ASM_FUNCTION_BEGIN_EPILOGUE, \ + TARGET_ASM_FUNCTION_EPILOGUE, \ + TARGET_ASM_NAMED_SECTION, \ + TARGET_ASM_EXCEPTION_SECTION, \ + TARGET_ASM_EH_FRAME_SECTION, \ + TARGET_ASM_CONSTRUCTOR, \ + TARGET_ASM_DESTRUCTOR} + + /* Scheduler hooks. All of these default to null pointers, which + haifa-sched.c looks for and handles. */ + #define TARGET_SCHED_ADJUST_COST 0 + #define TARGET_SCHED_ADJUST_PRIORITY 0 + #define TARGET_SCHED_ISSUE_RATE 0 + #define TARGET_SCHED_VARIABLE_ISSUE 0 + #define TARGET_SCHED_INIT 0 + #define TARGET_SCHED_FINISH 0 + #define TARGET_SCHED_REORDER 0 + #define TARGET_SCHED_REORDER2 0 + #define TARGET_SCHED_CYCLE_DISPLAY 0 + + #define TARGET_SCHED {TARGET_SCHED_ADJUST_COST, \ + TARGET_SCHED_ADJUST_PRIORITY, \ + TARGET_SCHED_ISSUE_RATE, \ + TARGET_SCHED_VARIABLE_ISSUE, \ + TARGET_SCHED_INIT, \ + TARGET_SCHED_FINISH, \ + TARGET_SCHED_REORDER, \ + TARGET_SCHED_REORDER2, \ + TARGET_SCHED_CYCLE_DISPLAY} + + /* All in tree.c. */ + #define TARGET_MERGE_DECL_ATTRIBUTES merge_decl_attributes + #define TARGET_MERGE_TYPE_ATTRIBUTES merge_type_attributes + #define TARGET_ATTRIBUTE_TABLE default_target_attribute_table + #define TARGET_COMP_TYPE_ATTRIBUTES default_comp_type_attributes + #define TARGET_SET_DEFAULT_TYPE_ATTRIBUTES default_set_default_type_attributes + #define TARGET_INSERT_ATTRIBUTES default_insert_attributes + #define TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P default_function_attribute_inlinable_p + #define TARGET_MS_BITFIELD_LAYOUT_P default_ms_bitfield_layout_p + + /* In builtins.c. */ + #define TARGET_INIT_BUILTINS default_init_builtins + #define TARGET_EXPAND_BUILTIN default_expand_builtin + + /* In varasm.c. */ + #ifndef TARGET_SECTION_TYPE_FLAGS + #define TARGET_SECTION_TYPE_FLAGS default_section_type_flags + #endif + + /* In hook.c. */ + #define TARGET_CANNOT_MODIFY_JUMPS_P hook_void_bool_false + + /* The whole shebang. */ + #define TARGET_INITIALIZER \ + { \ + TARGET_ASM_OUT, \ + TARGET_SCHED, \ + TARGET_MERGE_DECL_ATTRIBUTES, \ + TARGET_MERGE_TYPE_ATTRIBUTES, \ + TARGET_ATTRIBUTE_TABLE, \ + TARGET_COMP_TYPE_ATTRIBUTES, \ + TARGET_SET_DEFAULT_TYPE_ATTRIBUTES, \ + TARGET_INSERT_ATTRIBUTES, \ + TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P, \ + TARGET_MS_BITFIELD_LAYOUT_P, \ + TARGET_INIT_BUILTINS, \ + TARGET_EXPAND_BUILTIN, \ + TARGET_SECTION_TYPE_FLAGS, \ + TARGET_HAVE_NAMED_SECTIONS, \ + TARGET_HAVE_CTORS_DTORS, \ + TARGET_CANNOT_MODIFY_JUMPS_P \ + } + + #include "hooks.h" diff -Nrc3pad gcc-3.0.4/gcc/target.h gcc-3.1/gcc/target.h *** gcc-3.0.4/gcc/target.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/target.h Sat Feb 9 02:18:11 2002 *************** *** 0 **** --- 1,193 ---- + /* Data structure definitions for a generic GCC target. + Copyright (C) 2001, 2002 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. + + In other words, you are welcome to use, share and improve this program. + You are forbidden to forbid anyone else to use, share and improve + what you give them. Help stamp out software-hoarding! */ + + /* This file contains a data structure that describes a GCC target. + At present it is incomplete, but in future it should grow to + contain most or all target machine and target O/S specific + information. + + This structure has its initializer declared in target-def.h in the + form of large macro TARGET_INITIALIZER that expands to many smaller + macros. + + The smaller macros each initialize one component of the structure, + and each has a default. Each target should have a file that + includes target.h and target-def.h, and overrides any inappropriate + defaults by undefining the relevant macro and defining a suitable + replacement. That file should then contain the definition of + "targetm" like so: + + struct gcc_target targetm = TARGET_INITIALIZER; + + Doing things this way allows us to bring together everything that + defines a GCC target. By supplying a default that is appropriate + to most targets, we can easily add new items without needing to + edit dozens of target configuration files. It should also allow us + to gradually reduce the amount of conditional compilation that is + scattered throughout GCC. */ + + struct gcc_target + { + /* Functions that output assembler for the target. */ + struct asm_out + { + /* Opening and closing parentheses for asm expression grouping. */ + const char *open_paren, *close_paren; + + /* Assembler instructions for creating various kinds of integer object. */ + const char *byte_op; + struct asm_int_op + { + const char *hi; + const char *si; + const char *di; + const char *ti; + } aligned_op, unaligned_op; + + /* Try to output the assembler code for an integer object whose + value is given by X. SIZE is the size of the object in bytes and + ALIGNED_P indicates whether it is aligned. Return true if + successful. Only handles cases for which BYTE_OP, ALIGNED_OP + and UNALIGNED_OP are NULL. */ + bool (* integer) PARAMS ((rtx x, unsigned int size, int aligned_p)); + + /* Output the assembler code for entry to a function. */ + void (* function_prologue) PARAMS ((FILE *, HOST_WIDE_INT)); + + /* Output the assembler code for end of prologue. */ + void (* function_end_prologue) PARAMS ((FILE *)); + + /* Output the assembler code for start of epilogue. */ + void (* function_begin_epilogue) PARAMS ((FILE *)); + + /* Output the assembler code for function exit. */ + void (* function_epilogue) PARAMS ((FILE *, HOST_WIDE_INT)); + + /* Switch to an arbitrary section NAME with attributes as + specified by FLAGS. */ + void (* named_section) PARAMS ((const char *, unsigned int)); + + /* Switch to the section that holds the exception table. */ + void (* exception_section) PARAMS ((void)); + + /* Switch to the section that holds the exception frames. */ + void (* eh_frame_section) PARAMS ((void)); + + /* Output a constructor for a symbol with a given priority. */ + void (* constructor) PARAMS ((rtx, int)); + + /* Output a destructor for a symbol with a given priority. */ + void (* destructor) PARAMS ((rtx, int)); + } asm_out; + + /* Functions relating to instruction scheduling. */ + struct sched + { + /* Given the current cost, COST, of an insn, INSN, calculate and + return a new cost based on its relationship to DEP_INSN through + the dependence LINK. The default is to make no adjustment. */ + int (* adjust_cost) PARAMS ((rtx insn, rtx link, rtx def_insn, int cost)); + + /* Adjust the priority of an insn as you see fit. Returns the new + priority. */ + int (* adjust_priority) PARAMS ((rtx, int)); + + /* Function which returns the maximum number of insns that can be + scheduled in the same machine cycle. This must be constant + over an entire compilation. The default is 1. */ + int (* issue_rate) PARAMS ((void)); + + /* Calculate how much this insn affects how many more insns we + can emit this cycle. Default is they all cost the same. */ + int (* variable_issue) PARAMS ((FILE *, int, rtx, int)); + + /* Initialize machine-dependent scheduling code. */ + void (* md_init) PARAMS ((FILE *, int, int)); + + /* Finalize machine-dependent scheduling code. */ + void (* md_finish) PARAMS ((FILE *, int)); + + /* Reorder insns in a machine-dependent fashion, in two different + places. Default does nothing. */ + int (* reorder) PARAMS ((FILE *, int, rtx *, int *, int)); + int (* reorder2) PARAMS ((FILE *, int, rtx *, int *, int)); + + /* cycle_display is a pointer to a function which can emit + data into the assembly stream about the current cycle. + Arguments are CLOCK, the data to emit, and LAST, the last + insn in the new chain we're building. Returns a new LAST. + The default is to do nothing. */ + rtx (* cycle_display) PARAMS ((int clock, rtx last)); + } sched; + + /* Given two decls, merge their attributes and return the result. */ + tree (* merge_decl_attributes) PARAMS ((tree, tree)); + + /* Given two types, merge their attributes and return the result. */ + tree (* merge_type_attributes) PARAMS ((tree, tree)); + + /* Table of machine attributes and functions to handle them. */ + const struct attribute_spec *attribute_table; + + /* Return zero if the attributes on TYPE1 and TYPE2 are incompatible, + one if they are compatible and two if they are nearly compatible + (which causes a warning to be generated). */ + int (* comp_type_attributes) PARAMS ((tree type1, tree type2)); + + /* Assign default attributes to the newly defined TYPE. */ + void (* set_default_type_attributes) PARAMS ((tree type)); + + /* Insert attributes on the newly created DECL. */ + void (* insert_attributes) PARAMS ((tree decl, tree *attributes)); + + /* Return true if FNDECL (which has at least one machine attribute) + can be inlined despite its machine attributes, false otherwise. */ + bool (* function_attribute_inlinable_p) PARAMS ((tree fndecl)); + + /* Return true if bitfields in RECORD_TYPE should follow the + Microsoft Visual C++ bitfield layout rules. */ + bool (* ms_bitfield_layout_p) PARAMS ((tree record_type)); + + /* Set up target-specific built-in functions. */ + void (* init_builtins) PARAMS ((void)); + + /* Expand a target-specific builtin. */ + rtx (* expand_builtin) PARAMS ((tree exp, rtx target, rtx subtarget, + enum machine_mode mode, int ignore)); + + /* Given a decl, a section name, and whether the decl initializer + has relocs, choose attributes for the section. */ + /* ??? Should be merged with SELECT_SECTION and UNIQUE_SECTION. */ + unsigned int (* section_type_flags) PARAMS ((tree, const char *, int)); + + /* True if arbitrary sections are supported. */ + bool have_named_sections; + + /* True if "native" constructors and destructors are supported, + false if we're using collect2 for the job. */ + bool have_ctors_dtors; + + /* True if new jumps cannot be created, to replace existing ones or + not, at the current point in the compilation. */ + bool (* cannot_modify_jumps_p) PARAMS ((void)); + }; + + extern struct gcc_target targetm; diff -Nrc3pad gcc-3.0.4/gcc/timevar.c gcc-3.1/gcc/timevar.c *** gcc-3.0.4/gcc/timevar.c Fri Mar 2 19:51:59 2001 --- gcc-3.1/gcc/timevar.c Fri Nov 16 02:36:39 2001 *************** *** 2,45 **** Copyright (C) 2000 Free Software Foundation, Inc. Contributed by Alex Samuel ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. ! You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" #include "system.h" #include "intl.h" #ifdef HAVE_SYS_TIMES_H # include #endif - #ifdef HAVE_SYS_RESOURCE_H #include #endif ! #ifdef NEED_DECLARATION_GETRUSAGE extern int getrusage PARAMS ((int, struct rusage *)); #endif #include "flags.h" #include "timevar.h" /* See timevar.h for an explanation of timing variables. */ ! /* This macro evaluates to non-zero if timing variables are enabled. */ #define TIMEVAR_ENABLE (time_report) /* A timing variable. */ --- 2,120 ---- Copyright (C) 2000 Free Software Foundation, Inc. Contributed by Alex Samuel ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. ! You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" #include "system.h" #include "intl.h" + #include "rtl.h" #ifdef HAVE_SYS_TIMES_H # include #endif #ifdef HAVE_SYS_RESOURCE_H #include #endif ! ! #ifndef HAVE_CLOCK_T ! typedef int clock_t; ! #endif ! ! #ifndef HAVE_STRUCT_TMS ! struct tms ! { ! clock_t tms_utime; ! clock_t tms_stime; ! clock_t tms_cutime; ! clock_t tms_cstime; ! }; ! #endif ! ! #if defined HAVE_DECL_GETRUSAGE && !HAVE_DECL_GETRUSAGE extern int getrusage PARAMS ((int, struct rusage *)); #endif + #if defined HAVE_DECL_TIMES && !HAVE_DECL_TIMES + extern clock_t times PARAMS ((struct tms *)); + #endif + #if defined HAVE_DECL_CLOCK && !HAVE_DECL_CLOCK + extern clock_t clock PARAMS ((void)); + #endif + + #ifndef RUSAGE_SELF + # define RUSAGE_SELF 0 + #endif + + /* Calculation of scale factor to convert ticks to microseconds. + We mustn't use CLOCKS_PER_SEC except with clock(). */ + #if HAVE_SYSCONF && defined _SC_CLK_TCK + # define TICKS_PER_SECOND sysconf (_SC_CLK_TCK) /* POSIX 1003.1-1996 */ + #else + # ifdef CLK_TCK + # define TICKS_PER_SECOND CLK_TCK /* POSIX 1003.1-1988; obsolescent */ + # else + # ifdef HZ + # define TICKS_PER_SECOND HZ /* traditional UNIX */ + # else + # define TICKS_PER_SECOND 100 /* often the correct value */ + # endif + # endif + #endif + + /* Prefer times to getrusage to clock (each gives successively less + information). */ + #ifdef HAVE_TIMES + # define USE_TIMES + # define HAVE_USER_TIME + # define HAVE_SYS_TIME + # define HAVE_WALL_TIME + #else + #ifdef HAVE_GETRUSAGE + # define USE_GETRUSAGE + # define HAVE_USER_TIME + # define HAVE_SYS_TIME + #else + #ifdef HAVE_CLOCK + # define USE_CLOCK + # define HAVE_USER_TIME + #endif + #endif + #endif + + /* libc is very likely to have snuck a call to sysconf() into one of + the underlying constants, and that can be very slow, so we have to + precompute them. Whose wonderful idea was it to make all those + _constants_ variable at run time, anyway? */ + #ifdef USE_TIMES + static float ticks_to_msec; + #define TICKS_TO_MSEC (1 / (float)TICKS_PER_SECOND) + #endif + + #ifdef USE_CLOCK + static float clocks_to_msec; + #define CLOCKS_TO_MSEC (1 / (float)CLOCKS_PER_SEC) + #endif #include "flags.h" #include "timevar.h" /* See timevar.h for an explanation of timing variables. */ ! /* This macro evaluates to non-zero if timing variables are enabled. */ #define TIMEVAR_ENABLE (time_report) /* A timing variable. */ *************** get_time (now) *** 114,199 **** if (!TIMEVAR_ENABLE) return; - #ifdef __BEOS__ - /* Nothing. */ - #else /* not BeOS */ - #if defined (_WIN32) && !defined (__CYGWIN__) - if (clock () >= 0) - now->user = clock () * 1000; - #define HAVE_USER_TIME - - #else /* not _WIN32 */ - #ifdef _SC_CLK_TCK - { - static int tick; - struct tms tms; - if (tick == 0) - tick = 1000000 / sysconf (_SC_CLK_TCK); - now->wall = times (&tms) * tick; - now->user = tms.tms_utime * tick; - now->sys = tms.tms_stime * tick; - } - #define HAVE_USER_TIME - #define HAVE_SYS_TIME - #define HAVE_WALL_TIME - - #else - #ifdef USG { struct tms tms; ! # if HAVE_SYSCONF && defined _SC_CLK_TCK ! # define TICKS_PER_SECOND sysconf (_SC_CLK_TCK) /* POSIX 1003.1-1996 */ ! # else ! # ifdef CLK_TCK ! # define TICKS_PER_SECOND CLK_TCK /* POSIX 1003.1-1988; obsolescent */ ! # else ! # define TICKS_PER_SECOND HZ /* traditional UNIX */ ! # endif ! # endif ! now->wall = times (&tms) * (1000000 / TICKS_PER_SECOND); ! now->user = tms.tms_utime * (1000000 / TICKS_PER_SECOND); ! now->sys = tms.tms_stime * (1000000 / TICKS_PER_SECOND); ! } ! #define HAVE_USER_TIME ! #define HAVE_SYS_TIME ! #define HAVE_WALL_TIME ! ! #else ! #ifndef VMS ! { struct rusage rusage; ! getrusage (0, &rusage); ! now->user ! = rusage.ru_utime.tv_sec * 1000000 + rusage.ru_utime.tv_usec; ! now->sys ! = rusage.ru_stime.tv_sec * 1000000 + rusage.ru_stime.tv_usec; ! } ! #define HAVE_USER_TIME ! #define HAVE_SYS_TIME ! ! #else /* VMS */ ! { ! struct ! { ! int proc_user_time; ! int proc_system_time; ! int child_user_time; ! int child_system_time; ! } vms_times; ! now->wall = times ((void *) &vms_times) * 10000; ! now->user = vms_times.proc_user_time * 10000; ! now->sys = vms_times.proc_system_time * 10000; } ! #define HAVE_USER_TIME ! #define HAVE_SYS_TIME ! #define HAVE_WALL_TIME ! ! #endif /* VMS */ ! #endif /* USG */ ! #endif /* _SC_CLK_TCK */ ! #endif /* _WIN32 */ ! #endif /* __BEOS__ */ ! } /* Add the difference between STOP_TIME and START_TIME to TIMER. */ --- 189,212 ---- if (!TIMEVAR_ENABLE) return; { + #ifdef USE_TIMES struct tms tms; ! now->wall = times (&tms) * ticks_to_msec; ! now->user = tms.tms_utime * ticks_to_msec; ! now->sys = tms.tms_stime * ticks_to_msec; ! #endif ! #ifdef USE_GETRUSAGE struct rusage rusage; ! getrusage (RUSAGE_SELF, &rusage); ! now->user = rusage.ru_utime.tv_sec + rusage.ru_utime.tv_usec * 1e-6; ! now->sys = rusage.ru_stime.tv_sec + rusage.ru_stime.tv_usec * 1e-6; ! #endif ! #ifdef USE_CLOCK ! now->user = clock () * clocks_to_msec; ! #endif } ! } /* Add the difference between STOP_TIME and START_TIME to TIMER. */ *************** init_timevar () *** 220,229 **** memset ((void *) timevars, 0, sizeof (timevars)); /* Initialize the names of timing variables. */ ! #define DEFTIMEVAR(identifer__, name__) \ ! timevars[identifer__].name = name__; #include "timevar.def" #undef DEFTIMEVAR } /* Push TIMEVAR onto the timing stack. No further elapsed time is --- 233,249 ---- memset ((void *) timevars, 0, sizeof (timevars)); /* Initialize the names of timing variables. */ ! #define DEFTIMEVAR(identifier__, name__) \ ! timevars[identifier__].name = name__; #include "timevar.def" #undef DEFTIMEVAR + + #ifdef USE_TIMES + ticks_to_msec = TICKS_TO_MSEC; + #endif + #ifdef USE_CLOCK + clocks_to_msec = CLOCKS_TO_MSEC; + #endif } /* Push TIMEVAR onto the timing stack. No further elapsed time is *************** timevar_push (timevar) *** 260,266 **** timevar_accumulate (&stack->timevar->elapsed, &start_time, &now); /* Reset the start time; from now on, time is attributed to ! TIMEVAR. */ start_time = now; /* See if we have a previously-allocated stack instance. If so, --- 280,286 ---- timevar_accumulate (&stack->timevar->elapsed, &start_time, &now); /* Reset the start time; from now on, time is attributed to ! TIMEVAR. */ start_time = now; /* See if we have a previously-allocated stack instance. If so, *************** timevar_print (fp) *** 422,434 **** timevar_accumulate (&stack->timevar->elapsed, &start_time, &now); /* Reset the start time; from now on, time is attributed to ! TIMEVAR. */ start_time = now; ! fprintf (fp, _("\nExecution times (seconds)\n")); for (id = 0; id < (unsigned int) TIMEVAR_LAST; ++id) { struct timevar_def *tv = &timevars[(timevar_id_t) id]; /* Don't print the total execution time here; that goes at the end. */ --- 442,455 ---- timevar_accumulate (&stack->timevar->elapsed, &start_time, &now); /* Reset the start time; from now on, time is attributed to ! TIMEVAR. */ start_time = now; ! fputs (_("\nExecution times (seconds)\n"), fp); for (id = 0; id < (unsigned int) TIMEVAR_LAST; ++id) { struct timevar_def *tv = &timevars[(timevar_id_t) id]; + const float tiny = 5e-3; /* Don't print the total execution time here; that goes at the end. */ *************** timevar_print (fp) *** 439,490 **** if (!tv->used) continue; /* The timing variable name. */ fprintf (fp, " %-22s:", tv->name); #ifdef HAVE_USER_TIME /* Print user-mode time for this process. */ ! fprintf (fp, "%4ld.%02ld (%2.0f%%) usr", ! tv->elapsed.user / 1000000, ! (tv->elapsed.user % 1000000) / 10000, ! (total->user == 0) ? 0.0 ! : (100.0 * tv->elapsed.user / (double) total->user)); #endif /* HAVE_USER_TIME */ #ifdef HAVE_SYS_TIME /* Print system-mode time for this process. */ ! fprintf (fp, "%4ld.%02ld (%2.0f%%) sys", ! tv->elapsed.sys / 1000000, ! (tv->elapsed.sys % 1000000) / 10000, ! (total->sys == 0) ? 0.0 ! : (100.0 * tv->elapsed.sys / (double) total->sys)); #endif /* HAVE_SYS_TIME */ #ifdef HAVE_WALL_TIME /* Print wall clock time elapsed. */ ! fprintf (fp, "%4ld.%02ld (%2.0f%%) wall", ! tv->elapsed.wall / 1000000, ! (tv->elapsed.wall % 1000000) / 10000, ! (total->wall == 0) ? 0.0 ! : (100.0 * tv->elapsed.wall / (double) total->wall)); #endif /* HAVE_WALL_TIME */ ! fprintf (fp, "\n"); } /* Print total time. */ ! fprintf (fp, _(" TOTAL :")); #ifdef HAVE_USER_TIME ! fprintf (fp, "%4ld.%02ld ", ! total->user / 1000000, (total->user % 1000000) / 10000); #endif #ifdef HAVE_SYS_TIME ! fprintf (fp, "%4ld.%02ld ", ! total->sys / 1000000, (total->sys % 1000000) / 10000); #endif #ifdef HAVE_WALL_TIME ! fprintf (fp, "%4ld.%02ld\n", ! total->wall / 1000000, (total->wall % 1000000) / 10000); #endif #endif /* defined (HAVE_USER_TIME) || defined (HAVE_SYS_TIME) --- 460,509 ---- if (!tv->used) continue; + /* Don't print timing variables if we're going to get a row of + zeroes. */ + if (tv->elapsed.user < tiny + && tv->elapsed.sys < tiny + && tv->elapsed.wall < tiny) + continue; + /* The timing variable name. */ fprintf (fp, " %-22s:", tv->name); #ifdef HAVE_USER_TIME /* Print user-mode time for this process. */ ! fprintf (fp, "%7.2f (%2.0f%%) usr", ! tv->elapsed.user, ! (total->user == 0 ? 0 : tv->elapsed.user / total->user) * 100); #endif /* HAVE_USER_TIME */ #ifdef HAVE_SYS_TIME /* Print system-mode time for this process. */ ! fprintf (fp, "%7.2f (%2.0f%%) sys", ! tv->elapsed.sys, ! (total->sys == 0 ? 0 : tv->elapsed.sys / total->sys) * 100); #endif /* HAVE_SYS_TIME */ #ifdef HAVE_WALL_TIME /* Print wall clock time elapsed. */ ! fprintf (fp, "%7.2f (%2.0f%%) wall", ! tv->elapsed.wall, ! (total->wall == 0 ? 0 : tv->elapsed.wall / total->wall) * 100); #endif /* HAVE_WALL_TIME */ ! putc ('\n', fp); } /* Print total time. */ ! fputs (_(" TOTAL :"), fp); #ifdef HAVE_USER_TIME ! fprintf (fp, "%7.2f ", total->user); #endif #ifdef HAVE_SYS_TIME ! fprintf (fp, "%7.2f ", total->sys); #endif #ifdef HAVE_WALL_TIME ! fprintf (fp, "%7.2f\n", total->wall); #endif #endif /* defined (HAVE_USER_TIME) || defined (HAVE_SYS_TIME) diff -Nrc3pad gcc-3.0.4/gcc/timevar.def gcc-3.1/gcc/timevar.def *** gcc-3.0.4/gcc/timevar.def Thu Sep 7 00:37:09 2000 --- gcc-3.1/gcc/timevar.def Sat Oct 20 10:03:52 2001 *************** *** 3,22 **** Copyright (C) 2000 Free Software Foundation, Inc. Contributed by Alex Samuel ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 3,22 ---- Copyright (C) 2000 Free Software Foundation, Inc. Contributed by Alex Samuel ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ *************** DEFTIMEVAR (TV_GC , " *** 39,44 **** --- 39,51 ---- /* Time spent generating dump files. */ DEFTIMEVAR (TV_DUMP , "dump files") + /* Time spent by constructing CFG. */ + DEFTIMEVAR (TV_CFG , "cfg construction") + /* Time spent by cleaning up CFG. */ + DEFTIMEVAR (TV_CLEANUP_CFG , "cfg cleanup") + /* Time spent by life analysis. */ + DEFTIMEVAR (TV_LIFE , "life analysis") + DEFTIMEVAR (TV_LIFE_UPDATE , "life info update") /* Timing in various stages of the compiler. */ DEFTIMEVAR (TV_CPP , "preprocessing") DEFTIMEVAR (TV_LEX , "lexical analysis") *************** DEFTIMEVAR (TV_FLOW , " *** 56,61 **** --- 63,69 ---- DEFTIMEVAR (TV_COMBINE , "combiner") DEFTIMEVAR (TV_IFCVT , "if-conversion") DEFTIMEVAR (TV_REGMOVE , "regmove") + DEFTIMEVAR (TV_MODE_SWITCH , "mode switching") DEFTIMEVAR (TV_SCHED , "scheduling") DEFTIMEVAR (TV_LOCAL_ALLOC , "local alloc") DEFTIMEVAR (TV_GLOBAL_ALLOC , "global alloc") *************** DEFTIMEVAR (TV_IFCVT2 , "if-conver *** 65,76 **** DEFTIMEVAR (TV_PEEPHOLE2 , "peephole 2") DEFTIMEVAR (TV_RENAME_REGISTERS , "rename registers") DEFTIMEVAR (TV_SCHED2 , "scheduling 2") DEFTIMEVAR (TV_DBR_SCHED , "delay branch sched") DEFTIMEVAR (TV_REORDER_BLOCKS , "reorder blocks") DEFTIMEVAR (TV_SHORTEN_BRANCH , "shorten branches") DEFTIMEVAR (TV_REG_STACK , "reg stack") DEFTIMEVAR (TV_TO_SSA , "convert to SSA") ! DEFTIMEVAR (TV_DEAD_CODE_ELIM , "eliminate dead code") DEFTIMEVAR (TV_FROM_SSA , "convert from SSA") DEFTIMEVAR (TV_FINAL , "final") DEFTIMEVAR (TV_SYMOUT , "symout") --- 73,86 ---- DEFTIMEVAR (TV_PEEPHOLE2 , "peephole 2") DEFTIMEVAR (TV_RENAME_REGISTERS , "rename registers") DEFTIMEVAR (TV_SCHED2 , "scheduling 2") + DEFTIMEVAR (TV_MACH_DEP , "machine dep reorg") DEFTIMEVAR (TV_DBR_SCHED , "delay branch sched") DEFTIMEVAR (TV_REORDER_BLOCKS , "reorder blocks") DEFTIMEVAR (TV_SHORTEN_BRANCH , "shorten branches") DEFTIMEVAR (TV_REG_STACK , "reg stack") DEFTIMEVAR (TV_TO_SSA , "convert to SSA") ! DEFTIMEVAR (TV_SSA_CCP , "SSA CCP") ! DEFTIMEVAR (TV_SSA_DCE , "SSA aggressive DCE") DEFTIMEVAR (TV_FROM_SSA , "convert from SSA") DEFTIMEVAR (TV_FINAL , "final") DEFTIMEVAR (TV_SYMOUT , "symout") diff -Nrc3pad gcc-3.0.4/gcc/timevar.h gcc-3.1/gcc/timevar.h *** gcc-3.0.4/gcc/timevar.h Thu Sep 7 00:37:09 2000 --- gcc-3.1/gcc/timevar.h Mon Oct 29 23:01:45 2001 *************** *** 2,23 **** Copyright (C) 2000 Free Software Foundation, Inc. Contributed by Alex Samuel ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #ifndef GCC_TIMEVAR_H #define GCC_TIMEVAR_H --- 2,23 ---- Copyright (C) 2000 Free Software Foundation, Inc. Contributed by Alex Samuel ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it ! under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ! ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public ! License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #ifndef GCC_TIMEVAR_H #define GCC_TIMEVAR_H *************** *** 45,51 **** */ /* This structure stores the various varieties of time that can be ! measured. Times are stored in microseconds. The time may be an absolute time or a time difference; in the former case, the time base is undefined, except that the difference between two times produces a valid time difference. */ --- 45,51 ---- */ /* This structure stores the various varieties of time that can be ! measured. Times are stored in seconds. The time may be an absolute time or a time difference; in the former case, the time base is undefined, except that the difference between two times produces a valid time difference. */ *************** *** 53,69 **** struct timevar_time_def { /* User time in this process. */ ! long user; /* System time (if applicable for this host platform) in this process. */ ! long sys; /* Wall clock time. */ ! long wall; }; ! /* An enumeration of timing variable indentifiers. Constructed from the contents of timevar.def. */ #define DEFTIMEVAR(identifier__, name__) \ --- 53,69 ---- struct timevar_time_def { /* User time in this process. */ ! float user; /* System time (if applicable for this host platform) in this process. */ ! float sys; /* Wall clock time. */ ! float wall; }; ! /* An enumeration of timing variable identifiers. Constructed from the contents of timevar.def. */ #define DEFTIMEVAR(identifier__, name__) \ *************** extern void timevar_print PARAMS ((FILE *** 88,91 **** extern long get_run_time PARAMS ((void)); extern void print_time PARAMS ((const char *, long)); ! #endif --- 88,91 ---- extern long get_run_time PARAMS ((void)); extern void print_time PARAMS ((const char *, long)); ! #endif /* ! GCC_TIMEVAR_H */ diff -Nrc3pad gcc-3.0.4/gcc/tlink.c gcc-3.1/gcc/tlink.c *** gcc-3.0.4/gcc/tlink.c Fri Nov 30 02:55:39 2001 --- gcc-3.1/gcc/tlink.c Fri Nov 9 23:13:21 2001 *************** *** 1,25 **** /* Scan linker error messages for missing template instantiations and provide them. ! Copyright (C) 1995, 1998, 1999, 2000 Free Software Foundation, Inc. Contributed by Jason Merrill (jason@cygnus.com). ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" #include "system.h" --- 1,25 ---- /* Scan linker error messages for missing template instantiations and provide them. ! Copyright (C) 1995, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Jason Merrill (jason@cygnus.com). ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "config.h" #include "system.h" *************** recompile_files () *** 495,505 **** { file *f; while ((f = file_pop ()) != NULL) { char *line, *command; FILE *stream = fopen ((char*) f->root.key, "r"); ! const char *outname = frob_extension ((char*) f->root.key, ".rnw"); FILE *output = fopen (outname, "w"); while ((line = tfgets (stream)) != NULL) --- 495,508 ---- { file *f; + putenv (xstrdup ("COMPILER_PATH")); + putenv (xstrdup ("LIBRARY_PATH")); + while ((f = file_pop ()) != NULL) { char *line, *command; FILE *stream = fopen ((char*) f->root.key, "r"); ! const char *const outname = frob_extension ((char*) f->root.key, ".rnw"); FILE *output = fopen (outname, "w"); while ((line = tfgets (stream)) != NULL) diff -Nrc3pad gcc-3.0.4/gcc/toplev.c gcc-3.1/gcc/toplev.c *** gcc-3.0.4/gcc/toplev.c Sun Oct 28 20:11:11 2001 --- gcc-3.1/gcc/toplev.c Tue Apr 30 23:04:51 2002 *************** *** 1,23 **** /* Top level of GNU C compiler Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* This is the top level of cc1/c++. It parses command args, opens files, invokes the various passes --- 1,23 ---- /* Top level of GNU C compiler Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* This is the top level of cc1/c++. It parses command args, opens files, invokes the various passes *************** Boston, MA 02111-1307, USA. */ *** 46,51 **** --- 46,52 ---- #include "flags.h" #include "insn-attr.h" #include "insn-config.h" + #include "insn-flags.h" #include "hard-reg-set.h" #include "recog.h" #include "output.h" *************** Boston, MA 02111-1307, USA. */ *** 63,73 **** #include "diagnostic.h" #include "ssa.h" #include "params.h" #include "dwarf2asm.h" ! ! #ifdef DWARF_DEBUGGING_INFO ! #include "dwarfout.h" ! #endif #if defined (DWARF2_UNWIND_INFO) || defined (DWARF2_DEBUGGING_INFO) #include "dwarf2out.h" --- 64,75 ---- #include "diagnostic.h" #include "ssa.h" #include "params.h" + #include "reload.h" #include "dwarf2asm.h" ! #include "integrate.h" ! #include "debug.h" ! #include "target.h" ! #include "langhooks.h" #if defined (DWARF2_UNWIND_INFO) || defined (DWARF2_DEBUGGING_INFO) #include "dwarf2out.h" *************** Boston, MA 02111-1307, USA. */ *** 82,166 **** #endif #ifdef XCOFF_DEBUGGING_INFO ! #include "xcoffout.h" ! #endif ! ! #ifdef VMS ! /* The extra parameters substantially improve the I/O performance. */ ! ! static FILE * ! vms_fopen (fname, type) ! char *fname; ! char *type; ! { ! /* The in the gcc-vms-1.42 distribution prototypes fopen with two ! fixed arguments, which matches ANSI's specification but not VAXCRTL's ! pre-ANSI implementation. This hack circumvents the mismatch problem. */ ! FILE *(*vmslib_fopen)() = (FILE *(*)()) fopen; ! ! if (*type == 'w') ! return (*vmslib_fopen) (fname, type, "mbc=32", ! "deq=64", "fop=tef", "shr=nil"); ! else ! return (*vmslib_fopen) (fname, type, "mbc=32"); ! } ! ! #define fopen vms_fopen ! #endif /* VMS */ ! ! #ifndef DEFAULT_GDB_EXTENSIONS ! #define DEFAULT_GDB_EXTENSIONS 1 ! #endif ! ! /* If more than one debugging type is supported, you must define ! PREFERRED_DEBUGGING_TYPE to choose a format in a system-dependent way. ! ! This is one long line cause VAXC can't handle a \-newline. */ ! #if 1 < (defined (DBX_DEBUGGING_INFO) + defined (SDB_DEBUGGING_INFO) + defined (DWARF_DEBUGGING_INFO) + defined (DWARF2_DEBUGGING_INFO) + defined (XCOFF_DEBUGGING_INFO)) ! #ifndef PREFERRED_DEBUGGING_TYPE ! You Lose! You must define PREFERRED_DEBUGGING_TYPE! ! #endif /* no PREFERRED_DEBUGGING_TYPE */ ! #else /* Only one debugging format supported. Define PREFERRED_DEBUGGING_TYPE ! so the following code needn't care. */ ! #ifdef DBX_DEBUGGING_INFO ! #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG ! #endif ! #ifdef SDB_DEBUGGING_INFO ! #define PREFERRED_DEBUGGING_TYPE SDB_DEBUG ! #endif ! #ifdef DWARF_DEBUGGING_INFO ! #define PREFERRED_DEBUGGING_TYPE DWARF_DEBUG ! #endif ! #ifdef DWARF2_DEBUGGING_INFO ! #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG ! #endif ! #ifdef XCOFF_DEBUGGING_INFO ! #define PREFERRED_DEBUGGING_TYPE XCOFF_DEBUG ! #endif ! #endif /* More than one debugger format enabled. */ ! ! /* If still not defined, must have been because no debugging formats ! are supported. */ ! #ifndef PREFERRED_DEBUGGING_TYPE ! #define PREFERRED_DEBUGGING_TYPE NO_DEBUG #endif ! #if defined (HAVE_DECL_ENVIRON) && !HAVE_DECL_ENVIRON ! extern char **environ; #endif ! /* Carry information from ASM_DECLARE_OBJECT_NAME to ASM_FINISH_DECLARE_OBJECT. */ extern int size_directive_output; extern tree last_assemble_variable_decl; static void set_target_switch PARAMS ((const char *)); static const char *decl_name PARAMS ((tree, int)); static void float_signal PARAMS ((int)) ATTRIBUTE_NORETURN; static void crash_signal PARAMS ((int)) ATTRIBUTE_NORETURN; ! static void compile_file PARAMS ((const char *)); static void display_help PARAMS ((void)); static void display_target_options PARAMS ((void)); --- 84,119 ---- #endif #ifdef XCOFF_DEBUGGING_INFO ! #include "xcoffout.h" /* Needed for external data ! declarations for e.g. AIX 4.x. */ #endif ! #ifdef HALF_PIC_DEBUG ! #include "halfpic.h" #endif ! /* Carry information from ASM_DECLARE_OBJECT_NAME to ASM_FINISH_DECLARE_OBJECT. */ extern int size_directive_output; extern tree last_assemble_variable_decl; + static void general_init PARAMS ((char *)); + static void parse_options_and_default_flags PARAMS ((int, char **)); + static void do_compile PARAMS ((void)); + static void process_options PARAMS ((void)); + static void lang_independent_init PARAMS ((void)); + static int lang_dependent_init PARAMS ((const char *)); + static void init_asm_output PARAMS ((const char *)); + static void finalize PARAMS ((void)); + static void set_target_switch PARAMS ((const char *)); static const char *decl_name PARAMS ((tree, int)); static void float_signal PARAMS ((int)) ATTRIBUTE_NORETURN; static void crash_signal PARAMS ((int)) ATTRIBUTE_NORETURN; ! static void set_float_handler PARAMS ((jmp_buf)); ! static void compile_file PARAMS ((void)); static void display_help PARAMS ((void)); static void display_target_options PARAMS ((void)); *************** static void print_switch_values PARAMS ( *** 184,190 **** const char *progname; ! /* Copy of arguments to main. */ int save_argc; char **save_argv; --- 137,143 ---- const char *progname; ! /* Copy of arguments to toplev_main. */ int save_argc; char **save_argv; *************** int input_file_stack_tick; *** 217,228 **** --- 170,190 ---- const char *dump_base_name; + /* Format to use to print dumpfile index value */ + #ifndef DUMPFILE_FORMAT + #define DUMPFILE_FORMAT ".%02d." + #endif + /* Bit flags that specify the machine subtype we are compiling for. Bits are tested using macros TARGET_... defined in the tm.h file and set by `-m...' switches. Must be defined in rtlanal.c. */ extern int target_flags; + /* Debug hooks - dependent upon command line options. */ + + struct gcc_debug_hooks *debug_hooks = &do_nothing_debug_hooks; + /* Describes a dump file. */ struct dump_file_info *************** enum dump_file_index *** 251,261 **** DFI_sibling, DFI_eh, DFI_jump, - DFI_cse, - DFI_addressof, DFI_ssa, ! DFI_dce, DFI_ussa, DFI_gcse, DFI_loop, DFI_cse2, --- 213,224 ---- DFI_sibling, DFI_eh, DFI_jump, DFI_ssa, ! DFI_ssa_ccp, ! DFI_ssa_dce, DFI_ussa, + DFI_cse, + DFI_addressof, DFI_gcse, DFI_loop, DFI_cse2, *************** enum dump_file_index *** 274,284 **** DFI_rnreg, DFI_ce2, DFI_sched2, DFI_bbro, - DFI_jump2, DFI_mach, DFI_dbr, - DFI_stack, DFI_MAX }; --- 237,246 ---- DFI_rnreg, DFI_ce2, DFI_sched2, + DFI_stack, DFI_bbro, DFI_mach, DFI_dbr, DFI_MAX }; *************** enum dump_file_index *** 288,307 **** Remaining -d letters: " o q u " ! " H K OPQ TUVW YZ" */ ! struct dump_file_info dump_file[DFI_MAX] = { { "rtl", 'r', 0, 0, 0 }, { "sibling", 'i', 0, 0, 0 }, { "eh", 'h', 0, 0, 0 }, { "jump", 'j', 0, 0, 0 }, - { "cse", 's', 0, 0, 0 }, - { "addressof", 'F', 0, 0, 0 }, { "ssa", 'e', 1, 0, 0 }, ! { "dce", 'X', 1, 0, 0 }, { "ussa", 'e', 1, 0, 0 }, /* Yes, duplicate enable switch. */ { "gcse", 'G', 1, 0, 0 }, { "loop", 'L', 1, 0, 0 }, { "cse2", 't', 1, 0, 0 }, --- 250,270 ---- Remaining -d letters: " o q u " ! " H JK OPQ TUV YZ" */ ! static struct dump_file_info dump_file[DFI_MAX] = { { "rtl", 'r', 0, 0, 0 }, { "sibling", 'i', 0, 0, 0 }, { "eh", 'h', 0, 0, 0 }, { "jump", 'j', 0, 0, 0 }, { "ssa", 'e', 1, 0, 0 }, ! { "ssaccp", 'W', 1, 0, 0 }, ! { "ssadce", 'X', 1, 0, 0 }, { "ussa", 'e', 1, 0, 0 }, /* Yes, duplicate enable switch. */ + { "cse", 's', 0, 0, 0 }, + { "addressof", 'F', 0, 0, 0 }, { "gcse", 'G', 1, 0, 0 }, { "loop", 'L', 1, 0, 0 }, { "cse2", 't', 1, 0, 0 }, *************** struct dump_file_info dump_file[DFI_MAX] *** 320,330 **** { "rnreg", 'n', 1, 0, 0 }, { "ce2", 'E', 1, 0, 0 }, { "sched2", 'R', 1, 0, 0 }, { "bbro", 'B', 1, 0, 0 }, - { "jump2", 'J', 1, 0, 0 }, { "mach", 'M', 1, 0, 0 }, { "dbr", 'd', 0, 0, 0 }, - { "stack", 'k', 1, 0, 0 }, }; static int open_dump_file PARAMS ((enum dump_file_index, tree)); --- 283,292 ---- { "rnreg", 'n', 1, 0, 0 }, { "ce2", 'E', 1, 0, 0 }, { "sched2", 'R', 1, 0, 0 }, + { "stack", 'k', 1, 0, 0 }, { "bbro", 'B', 1, 0, 0 }, { "mach", 'M', 1, 0, 0 }, { "dbr", 'd', 0, 0, 0 }, }; static int open_dump_file PARAMS ((enum dump_file_index, tree)); *************** static void close_dump_file PARAMS ((enu *** 335,341 **** int rtl_dump_and_exit; int flag_print_asm_name; - static int flag_print_mem; static int version_flag; static char *filename; enum graph_dump_types graph_dump_format; --- 297,302 ---- *************** int optimize = 0; *** 379,390 **** int optimize_size = 0; - /* Number of error messages and warning messages so far. */ - - int errorcount = 0; - int warningcount = 0; - int sorrycount = 0; - /* Nonzero if we should exit after parsing options. */ static int exit_after_options = 0; --- 340,345 ---- *************** typedef rtx (*lang_expand_expr_t) *** 414,421 **** lang_expand_expr_t lang_expand_expr = 0; - tree (*lang_expand_constant) PARAMS ((tree)) = 0; - /* Pointer to function to finish handling an incomplete decl at the end of compilation. */ --- 369,374 ---- *************** int flag_eliminate_dwarf2_dups = 0; *** 429,438 **** int profile_flag = 0; - /* Nonzero if generating code to do profiling on a line-by-line basis. */ - - int profile_block_flag; - /* Nonzero if generating code to profile program flow graph arcs. */ int profile_arc_flag = 0; --- 382,387 ---- *************** int flag_reorder_blocks = 0; *** 452,457 **** --- 401,407 ---- /* Nonzero if registers should be renamed. */ int flag_rename_registers = 0; + int flag_cprop_registers = 0; /* Nonzero for -pedantic switch: warn about anything that standard spec forbids. */ *************** int flag_unroll_loops; *** 568,573 **** --- 518,527 ---- int flag_unroll_all_loops; + /* Nonzero enables prefetch optimizations for arrays in loops. */ + + int flag_prefetch_loop_arrays; + /* Nonzero forces all invariant computations in loops to be moved outside the loop. */ *************** int flag_data_sections = 0; *** 612,633 **** int flag_no_peephole = 0; - /* Nonzero allows GCC to violate some IEEE or ANSI rules regarding math - operations in the interest of optimization. For example it allows - GCC to assume arguments to sqrt are nonnegative numbers, allowing - faster code for sqrt to be generated. */ - - int flag_fast_math = 0; - /* Nonzero allows GCC to optimize sibling and tail recursive calls. */ int flag_optimize_sibling_calls = 0; /* Nonzero means the front end generally wants `errno' maintained by math ! operations, like built-in SQRT, unless overridden by flag_fast_math. */ int flag_errno_math = 1; /* 0 means straightforward implementation of complex divide acceptable. 1 means wide ranges of inputs must work for complex divide. 2 means C99-like requirements for complex divide (not yet implemented). */ --- 566,593 ---- int flag_no_peephole = 0; /* Nonzero allows GCC to optimize sibling and tail recursive calls. */ int flag_optimize_sibling_calls = 0; /* Nonzero means the front end generally wants `errno' maintained by math ! operations, like built-in SQRT. */ int flag_errno_math = 1; + /* Nonzero means that unsafe floating-point math optimizations are allowed + for the sake of speed. IEEE compliance is not guaranteed, and operations + are allowed to assume that their arguments and results are "normal" + (e.g., nonnegative for SQRT). */ + + int flag_unsafe_math_optimizations = 0; + + /* Zero means that floating-point math operations cannot generate a + (user-visible) trap. This is the case, for example, in nonstop + IEEE 754 arithmetic. */ + + int flag_trapping_math = 1; + /* 0 means straightforward implementation of complex divide acceptable. 1 means wide ranges of inputs must work for complex divide. 2 means C99-like requirements for complex divide (not yet implemented). */ *************** static int flag_gcse; *** 659,664 **** --- 619,636 ---- static int flag_delete_null_pointer_checks; + /* Nonzero means to do the enhanced load motion during gcse, which trys + to hoist loads by not killing them when a store to the same location + is seen. */ + + int flag_gcse_lm = 1; + + /* Nonzero means to perform store motion after gcse, which will try to + move stores closer to the exit block. Its not very effective without + flag_gcse_lm. */ + + int flag_gcse_sm = 1; + /* Nonzero means to rerun cse after loop optimization. This increases compilation time about 20% and picks up a few more common expressions. */ *************** int flag_keep_inline_functions; *** 681,687 **** /* Nonzero means that functions will not be inlined. */ ! int flag_no_inline; /* Nonzero means that we should emit static const variables regardless of whether or not optimization is turned on. */ --- 653,664 ---- /* Nonzero means that functions will not be inlined. */ ! int flag_no_inline = 2; ! ! /* Nonzero means that we don't want inlining by virtue of -fno-inline, ! not just because the tree inliner turned us off. */ ! ! int flag_really_no_inline = 2; /* Nonzero means that we should emit static const variables regardless of whether or not optimization is turned on. */ *************** int flag_exceptions; *** 720,725 **** --- 697,706 ---- int flag_unwind_tables = 0; + /* Nonzero means generate frame unwind info table exact at each insn boundary */ + + int flag_asynchronous_unwind_tables = 0; + /* Nonzero means don't place uninitialized global data in common storage by default. */ *************** int flag_gnu_linker = 1; *** 805,812 **** /* Enable SSA. */ int flag_ssa = 0; ! /* Enable dead code elimination. */ ! int flag_dce = 0; /* Tag all structures with __attribute__(packed). */ int flag_pack_struct = 0; --- 786,796 ---- /* Enable SSA. */ int flag_ssa = 0; ! /* Enable ssa conditional constant propagation. */ ! int flag_ssa_ccp = 0; ! ! /* Enable ssa aggressive dead code elimination. */ ! int flag_ssa_dce = 0; /* Tag all structures with __attribute__(packed). */ int flag_pack_struct = 0; *************** int flag_stack_check; *** 824,839 **** the support provided depends on the backend. */ rtx stack_limit_rtx; - /* -fcheck-memory-usage causes extra code to be generated in order to check - memory accesses. This is used by a detector of bad memory accesses such - as Checker. */ - int flag_check_memory_usage = 0; - - /* -fprefix-function-name causes function name to be prefixed. This - can be used with -fcheck-memory-usage to isolate code compiled with - -fcheck-memory-usage. */ - int flag_prefix_function_name = 0; - /* 0 if pointer arguments may alias each other. True in C. 1 if pointer arguments may not alias each other but may alias global variables. --- 808,813 ---- *************** int flag_bounded_pointers = 0; *** 878,883 **** --- 852,862 ---- For CHILL: defaults to off. */ int flag_bounds_check = 0; + /* This will attempt to merge constant section constants, if 1 only + string constants and constants from constant pool, if 2 also constant + variables. */ + int flag_merge_constants = 1; + /* If one, renumber instruction UIDs to reduce the number of unused UIDs if there are a lot of instructions. If greater than one, unconditionally renumber instruction UIDs. */ *************** int flag_renumber_insns = 1; *** 890,911 **** int align_loops; int align_loops_log; int align_jumps; int align_jumps_log; int align_labels; int align_labels_log; int align_functions; int align_functions_log; /* Table of supported debugging formats. */ ! static struct { ! const char *arg; /* Since PREFERRED_DEBUGGING_TYPE isn't necessarily a constant expression, we use NO_DEBUG in its place. */ ! enum debug_info_type debug_type; ! int use_extensions_p; ! const char *description; } *da, debug_args[] = { --- 869,893 ---- int align_loops; int align_loops_log; + int align_loops_max_skip; int align_jumps; int align_jumps_log; + int align_jumps_max_skip; int align_labels; int align_labels_log; + int align_labels_max_skip; int align_functions; int align_functions_log; /* Table of supported debugging formats. */ ! static const struct { ! const char *const arg; /* Since PREFERRED_DEBUGGING_TYPE isn't necessarily a constant expression, we use NO_DEBUG in its place. */ ! const enum debug_info_type debug_type; ! const int use_extensions_p; ! const char *const description; } *da, debug_args[] = { *************** debug_args[] = *** 931,945 **** #ifdef SDB_DEBUGGING_INFO { "coff", SDB_DEBUG, 0, N_("Generate COFF format debug info") }, #endif { 0, 0, 0, 0 } }; typedef struct { ! const char *string; ! int *variable; ! int on_value; ! const char *description; } lang_independent_options; --- 913,930 ---- #ifdef SDB_DEBUGGING_INFO { "coff", SDB_DEBUG, 0, N_("Generate COFF format debug info") }, #endif + #ifdef VMS_DEBUGGING_INFO + { "vms", VMS_DEBUG, 0, N_("Generate VMS format debug info") }, + #endif { 0, 0, 0, 0 } }; typedef struct { ! const char *const string; ! int *const variable; ! const int on_value; ! const char *const description; } lang_independent_options; *************** static const param_info lang_independent *** 970,977 **** if `-fSTRING' is seen as an option. (If `-fno-STRING' is seen as an option, the opposite value is stored.) */ ! lang_independent_options f_options[] = { {"float-store", &flag_float_store, 1, N_("Do not store floats in registers") }, {"volatile", &flag_volatile, 1, --- 955,964 ---- if `-fSTRING' is seen as an option. (If `-fno-STRING' is seen as an option, the opposite value is stored.) */ ! static const lang_independent_options f_options[] = { + {"eliminate-dwarf2-dups", &flag_eliminate_dwarf2_dups, 1, + N_("Perform DWARF2 duplicate elimination") }, {"float-store", &flag_float_store, 1, N_("Do not store floats in registers") }, {"volatile", &flag_volatile, 1, *************** lang_independent_options f_options[] = *** 991,1005 **** {"cse-skip-blocks", &flag_cse_skip_blocks, 1, N_("When running CSE, follow conditional jumps") }, {"expensive-optimizations", &flag_expensive_optimizations, 1, ! N_("Perform a number of minor, expensive optimisations") }, {"thread-jumps", &flag_thread_jumps, 1, ! N_("Perform jump threading optimisations") }, {"strength-reduce", &flag_strength_reduce, 1, ! N_("Perform strength reduction optimisations") }, {"unroll-loops", &flag_unroll_loops, 1, N_("Perform loop unrolling when iteration count is known") }, {"unroll-all-loops", &flag_unroll_all_loops, 1, N_("Perform loop unrolling for all loops") }, {"move-all-movables", &flag_move_all_movables, 1, N_("Force all loop invariant computations out of loops") }, {"reduce-all-givs", &flag_reduce_all_givs, 1, --- 978,994 ---- {"cse-skip-blocks", &flag_cse_skip_blocks, 1, N_("When running CSE, follow conditional jumps") }, {"expensive-optimizations", &flag_expensive_optimizations, 1, ! N_("Perform a number of minor, expensive optimizations") }, {"thread-jumps", &flag_thread_jumps, 1, ! N_("Perform jump threading optimizations") }, {"strength-reduce", &flag_strength_reduce, 1, ! N_("Perform strength reduction optimizations") }, {"unroll-loops", &flag_unroll_loops, 1, N_("Perform loop unrolling when iteration count is known") }, {"unroll-all-loops", &flag_unroll_all_loops, 1, N_("Perform loop unrolling for all loops") }, + {"prefetch-loop-arrays", &flag_prefetch_loop_arrays, 1, + N_("Generate prefetch instructions, if available, for arrays in loops") }, {"move-all-movables", &flag_move_all_movables, 1, N_("Force all loop invariant computations out of loops") }, {"reduce-all-givs", &flag_reduce_all_givs, 1, *************** lang_independent_options f_options[] = *** 1007,1013 **** {"writable-strings", &flag_writable_strings, 1, N_("Store strings in writable data section") }, {"peephole", &flag_no_peephole, 0, ! N_("Enable machine specific peephole optimisations") }, {"force-mem", &flag_force_mem, 1, N_("Copy memory operands into registers before using") }, {"force-addr", &flag_force_addr, 1, --- 996,1002 ---- {"writable-strings", &flag_writable_strings, 1, N_("Store strings in writable data section") }, {"peephole", &flag_no_peephole, 0, ! N_("Enable machine specific peephole optimizations") }, {"force-mem", &flag_force_mem, 1, N_("Copy memory operands into registers before using") }, {"force-addr", &flag_force_addr, 1, *************** lang_independent_options f_options[] = *** 1036,1045 **** N_("Attempt to fill delay slots of branch instructions") }, {"gcse", &flag_gcse, 1, N_("Perform the global common subexpression elimination") }, {"rerun-cse-after-loop", &flag_rerun_cse_after_loop, 1, ! N_("Run CSE pass after loop optimisations") }, {"rerun-loop-opt", &flag_rerun_loop_opt, 1, ! N_("Run the loop optimiser twice") }, {"delete-null-pointer-checks", &flag_delete_null_pointer_checks, 1, N_("Delete useless null pointer checks") }, {"pretend-float", &flag_pretend_float, 1, --- 1025,1038 ---- N_("Attempt to fill delay slots of branch instructions") }, {"gcse", &flag_gcse, 1, N_("Perform the global common subexpression elimination") }, + {"gcse-lm", &flag_gcse_lm, 1, + N_("Perform enhanced load motion during global subexpression elimination") }, + {"gcse-sm", &flag_gcse_sm, 1, + N_("Perform store motion after global subexpression elimination") }, {"rerun-cse-after-loop", &flag_rerun_cse_after_loop, 1, ! N_("Run CSE pass after loop optimizations") }, {"rerun-loop-opt", &flag_rerun_loop_opt, 1, ! N_("Run the loop optimizer twice") }, {"delete-null-pointer-checks", &flag_delete_null_pointer_checks, 1, N_("Delete useless null pointer checks") }, {"pretend-float", &flag_pretend_float, 1, *************** lang_independent_options f_options[] = *** 1065,1070 **** --- 1058,1065 ---- N_("Enable exception handling") }, {"unwind-tables", &flag_unwind_tables, 1, N_("Just generate unwind tables for exception handling") }, + {"asynchronous-unwind-tables", &flag_asynchronous_unwind_tables, 1, + N_("Generate unwind tables exact at each instruction boundary") }, {"non-call-exceptions", &flag_non_call_exceptions, 1, N_("Support synchronous non-call exceptions") }, {"profile-arcs", &profile_arc_flag, 1, *************** lang_independent_options f_options[] = *** 1077,1084 **** N_("Reorder basic blocks to improve code placement") }, {"rename-registers", &flag_rename_registers, 1, N_("Do the register renaming optimization pass") }, ! {"fast-math", &flag_fast_math, 1, ! N_("Improve FP speed by violating ANSI & IEEE rules") }, {"common", &flag_no_common, 0, N_("Do not put uninitialized globals in the common section") }, {"inhibit-size-directive", &flag_inhibit_size_directive, 1, --- 1072,1079 ---- N_("Reorder basic blocks to improve code placement") }, {"rename-registers", &flag_rename_registers, 1, N_("Do the register renaming optimization pass") }, ! {"cprop-registers", &flag_cprop_registers, 1, ! N_("Do the register copy-propagation optimization pass") }, {"common", &flag_no_common, 0, N_("Do not put uninitialized globals in the common section") }, {"inhibit-size-directive", &flag_inhibit_size_directive, 1, *************** lang_independent_options f_options[] = *** 1090,1098 **** {"verbose-asm", &flag_verbose_asm, 1, N_("Add extra commentry to assembler output") }, {"gnu-linker", &flag_gnu_linker, 1, ! N_("Output GNU ld formatted global initialisers") }, {"regmove", &flag_regmove, 1, ! N_("Enables a register move optimisation") }, {"optimize-register-move", &flag_regmove, 1, N_("Do the full regmove optimization pass") }, {"pack-struct", &flag_pack_struct, 1, --- 1085,1093 ---- {"verbose-asm", &flag_verbose_asm, 1, N_("Add extra commentry to assembler output") }, {"gnu-linker", &flag_gnu_linker, 1, ! N_("Output GNU ld formatted global initializers") }, {"regmove", &flag_regmove, 1, ! N_("Enables a register move optimization") }, {"optimize-register-move", &flag_regmove, 1, N_("Do the full regmove optimization pass") }, {"pack-struct", &flag_pack_struct, 1, *************** lang_independent_options f_options[] = *** 1115,1142 **** N_("Align all labels") }, {"align-functions", &align_functions, 0, N_("Align the start of functions") }, ! {"check-memory-usage", &flag_check_memory_usage, 1, ! N_("Generate code to check every memory access") }, ! {"prefix-function-name", &flag_prefix_function_name, 1, ! N_("Add a prefix to all function names") }, {"dump-unnumbered", &flag_dump_unnumbered, 1, N_("Suppress output of instruction numbers and line number notes in debugging dumps") }, {"instrument-functions", &flag_instrument_function_entry_exit, 1, N_("Instrument function entry/exit with profiling calls") }, {"ssa", &flag_ssa, 1, N_("Enable SSA optimizations") }, ! {"dce", &flag_dce, 1, ! N_("Enable dead code elimination") }, {"leading-underscore", &flag_leading_underscore, 1, N_("External symbols have a leading underscore") }, {"ident", &flag_no_ident, 0, N_("Process #ident directives") }, { "peephole2", &flag_peephole2, 1, ! N_("Enables an rtl peephole pass run before sched2") }, { "guess-branch-probability", &flag_guess_branch_prob, 1, ! N_("Enables guessing of branch probabilities") }, {"math-errno", &flag_errno_math, 1, N_("Set errno after built-in math functions") }, {"single-precision-constant", &flag_single_precision_constant, 1, N_("Convert floating point constant to single precision constant") }, {"time-report", &time_report, 1, --- 1110,1147 ---- N_("Align all labels") }, {"align-functions", &align_functions, 0, N_("Align the start of functions") }, ! {"merge-constants", &flag_merge_constants, 1, ! N_("Attempt to merge identical constants accross compilation units") }, ! {"merge-all-constants", &flag_merge_constants, 2, ! N_("Attempt to merge identical constants and constant variables") }, {"dump-unnumbered", &flag_dump_unnumbered, 1, N_("Suppress output of instruction numbers and line number notes in debugging dumps") }, {"instrument-functions", &flag_instrument_function_entry_exit, 1, N_("Instrument function entry/exit with profiling calls") }, {"ssa", &flag_ssa, 1, N_("Enable SSA optimizations") }, ! {"ssa-ccp", &flag_ssa_ccp, 1, ! N_("Enable SSA conditional constant propagation") }, ! {"ssa-dce", &flag_ssa_dce, 1, ! N_("Enable aggressive SSA dead code elimination") }, {"leading-underscore", &flag_leading_underscore, 1, N_("External symbols have a leading underscore") }, {"ident", &flag_no_ident, 0, N_("Process #ident directives") }, { "peephole2", &flag_peephole2, 1, ! N_("Enables an rtl peephole pass run before sched2") }, { "guess-branch-probability", &flag_guess_branch_prob, 1, ! N_("Enables guessing of branch probabilities") }, {"math-errno", &flag_errno_math, 1, N_("Set errno after built-in math functions") }, + {"trapping-math", &flag_trapping_math, 1, + N_("Floating-point operations can trap") }, + {"unsafe-math-optimizations", &flag_unsafe_math_optimizations, 1, + N_("Allow math optimizations that may violate IEEE or ANSI standards") }, + {"bounded-pointers", &flag_bounded_pointers, 1, + N_("Compile pointers as triples: value, base & end") }, + {"bounds-check", &flag_bounds_check, 1, + N_("Generate code to check bounds before dereferencing pointers and arrays") }, {"single-precision-constant", &flag_single_precision_constant, 1, N_("Convert floating point constant to single precision constant") }, {"time-report", &time_report, 1, *************** lang_independent_options f_options[] = *** 1144,1158 **** {"mem-report", &mem_report, 1, N_("Report on permanent memory allocation at end of run") }, { "trapv", &flag_trapv, 1, ! N_("Trap for signed overflow in addition / subtraction / multiplication.") }, }; /* Table of language-specific options. */ ! static struct lang_opt { ! const char *option; ! const char *description; } documented_lang_options[] = { --- 1149,1163 ---- {"mem-report", &mem_report, 1, N_("Report on permanent memory allocation at end of run") }, { "trapv", &flag_trapv, 1, ! N_("Trap for signed overflow in addition / subtraction / multiplication") }, }; /* Table of language-specific options. */ ! static const struct lang_opt { ! const char *const option; ! const char *const description; } documented_lang_options[] = { *************** documented_lang_options[] = *** 1169,1175 **** { "-fsigned-bitfields", "" }, { "-funsigned-bitfields", ! N_("Make bitfields by unsigned by default") }, { "-fno-signed-bitfields", "" }, { "-fno-unsigned-bitfields","" }, { "-fsigned-char", --- 1174,1180 ---- { "-fsigned-bitfields", "" }, { "-funsigned-bitfields", ! N_("Make bit-fields by unsigned by default") }, { "-fno-signed-bitfields", "" }, { "-fno-unsigned-bitfields","" }, { "-fsigned-char", *************** documented_lang_options[] = *** 1187,1196 **** { "-fasm", "" }, { "-fno-asm", ! N_("Do not recognise the 'asm' keyword") }, { "-fbuiltin", "" }, { "-fno-builtin", ! N_("Do not recognise any built in functions") }, { "-fhosted", N_("Assume normal C execution environment") }, { "-fno-hosted", "" }, --- 1192,1201 ---- { "-fasm", "" }, { "-fno-asm", ! N_("Do not recognize the 'asm' keyword") }, { "-fbuiltin", "" }, { "-fno-builtin", ! N_("Do not recognize any built in functions") }, { "-fhosted", N_("Assume normal C execution environment") }, { "-fno-hosted", "" }, *************** documented_lang_options[] = *** 1273,1279 **** N_("Warn about suspicious declarations of main") }, { "-Wno-main", "" }, { "-Wmissing-braces", ! N_("Warn about possibly missing braces around initialisers") }, { "-Wno-missing-braces", "" }, { "-Wmissing-declarations", N_("Warn about global funcs without previous declarations") }, --- 1278,1284 ---- N_("Warn about suspicious declarations of main") }, { "-Wno-main", "" }, { "-Wmissing-braces", ! N_("Warn about possibly missing braces around initializers") }, { "-Wno-missing-braces", "" }, { "-Wmissing-declarations", N_("Warn about global funcs without previous declarations") }, *************** documented_lang_options[] = *** 1335,1356 **** If VALUE is negative, -VALUE is bits to clear. (The sign bit is not used so there is no confusion.) */ ! struct { ! const char *name; ! int value; ! const char *description; } target_switches [] = TARGET_SWITCHES; /* This table is similar, but allows the switch to have a value. */ #ifdef TARGET_OPTIONS ! struct { ! const char *prefix; ! const char **variable; ! const char *description; } target_options [] = TARGET_OPTIONS; #endif --- 1340,1361 ---- If VALUE is negative, -VALUE is bits to clear. (The sign bit is not used so there is no confusion.) */ ! static const struct { ! const char *const name; ! const int value; ! const char *const description; } target_switches [] = TARGET_SWITCHES; /* This table is similar, but allows the switch to have a value. */ #ifdef TARGET_OPTIONS ! static const struct { ! const char *const prefix; ! const char **const variable; ! const char *const description; } target_options [] = TARGET_OPTIONS; #endif *************** int warn_unused_parameter; *** 1381,1403 **** int warn_unused_variable; int warn_unused_value; - void - set_Wunused (setting) - int setting; - { - warn_unused_function = setting; - warn_unused_label = setting; - /* Unused function parameter warnings are reported when either ``-W - -Wunused'' or ``-Wunused-parameter'' is specified. Differentiate - -Wunused by setting WARN_UNUSED_PARAMETER to -1. */ - if (!setting) - warn_unused_parameter = 0; - else if (!warn_unused_parameter) - warn_unused_parameter = -1; - warn_unused_variable = setting; - warn_unused_value = setting; - } - /* Nonzero to warn about code which is never reached. */ int warn_notreached; --- 1386,1391 ---- *************** int warn_notreached; *** 1406,1412 **** int warn_uninitialized; ! /* Nonzero means warn about all declarations which shadow others. */ int warn_shadow; --- 1394,1400 ---- int warn_uninitialized; ! /* Nonzero means warn about all declarations which shadow others. */ int warn_shadow; *************** int warn_return_type; *** 1425,1436 **** int warn_cast_align; - /* Nonzero means warn about any identifiers that match in the first N - characters. The value N is in `id_clash_len'. */ - - int warn_id_clash; - int id_clash_len; - /* Nonzero means warn about any objects definitions whose size is larger than N bytes. Also want about function definitions whose returned values are larger than N bytes. The value N is in `larger_than_size'. */ --- 1413,1418 ---- *************** int warn_disabled_optimization; *** 1463,1471 **** int warn_missing_noreturn; /* Likewise for -W. */ ! lang_independent_options W_options[] = { {"unused-function", &warn_unused_function, 1, N_("Warn when a function is unused") }, --- 1445,1458 ---- int warn_missing_noreturn; + /* Nonzero means warn about uses of __attribute__((deprecated)) + declarations. */ + + int warn_deprecated_decl = 1; + /* Likewise for -W. */ ! static const lang_independent_options W_options[] = { {"unused-function", &warn_unused_function, 1, N_("Warn when a function is unused") }, *************** lang_independent_options W_options[] = *** 1501,1509 **** --- 1488,1535 ---- N_("Warn when padding is required to align struct members") }, {"disabled-optimization", &warn_disabled_optimization, 1, N_("Warn when an optimization pass is disabled") }, + {"deprecated-declarations", &warn_deprecated_decl, 1, + N_("Warn about uses of __attribute__((deprecated)) declarations") }, {"missing-noreturn", &warn_missing_noreturn, 1, N_("Warn about functions which might be candidates for attribute noreturn") } }; + + void + set_Wunused (setting) + int setting; + { + warn_unused_function = setting; + warn_unused_label = setting; + /* Unused function parameter warnings are reported when either ``-W + -Wunused'' or ``-Wunused-parameter'' is specified. Differentiate + -Wunused by setting WARN_UNUSED_PARAMETER to -1. */ + if (!setting) + warn_unused_parameter = 0; + else if (!warn_unused_parameter) + warn_unused_parameter = -1; + warn_unused_variable = setting; + warn_unused_value = setting; + } + + /* The following routines are useful in setting all the flags that + -ffast-math and -fno-fast-math imply. */ + + void + set_fast_math_flags () + { + flag_trapping_math = 0; + flag_unsafe_math_optimizations = 1; + flag_errno_math = 0; + } + + void + set_no_fast_math_flags () + { + flag_trapping_math = 1; + flag_unsafe_math_optimizations = 0; + flag_errno_math = 1; + } + /* Output files for assembler code (real compiler output) and debugging dumps. */ *************** read_integral_parameter (p, pname, defva *** 1527,1533 **** while (*endp) { ! if (*endp >= '0' && *endp <= '9') endp++; else break; --- 1553,1559 ---- while (*endp) { ! if (ISDIGIT (*endp)) endp++; else break; *************** read_integral_parameter (p, pname, defva *** 1536,1542 **** if (*endp != 0) { if (pname != 0) ! error ("Invalid option `%s'", pname); return defval; } --- 1562,1568 ---- if (*endp != 0) { if (pname != 0) ! error ("invalid option `%s'", pname); return defval; } *************** botch (s) *** 1581,1589 **** int exact_log2_wide (x) ! register unsigned HOST_WIDE_INT x; { ! register int log = 0; /* Test for 0 or a power of 2. */ if (x == 0 || x != (x & -x)) return -1; --- 1607,1615 ---- int exact_log2_wide (x) ! unsigned HOST_WIDE_INT x; { ! int log = 0; /* Test for 0 or a power of 2. */ if (x == 0 || x != (x & -x)) return -1; *************** exact_log2_wide (x) *** 1599,1636 **** int floor_log2_wide (x) ! register unsigned HOST_WIDE_INT x; { ! register int log = -1; while (x != 0) log++, x >>= 1; return log; } - /* Return the approximate positive square root of a number N. This is for - statistical reports, not code generation. */ - double - approx_sqrt (x) - double x; - { - double s, d; - - if (x < 0) - abort (); - if (x == 0) - return 0; - - s = x; - do - { - d = (s * s - x) / (2 * s); - s -= d; - } - while (d > .0001); - return s; - } - static int float_handler_set; int float_handled; jmp_buf float_handler; --- 1625,1639 ---- int floor_log2_wide (x) ! unsigned HOST_WIDE_INT x; { ! int log = -1; while (x != 0) log++, x >>= 1; return log; } static int float_handler_set; int float_handled; jmp_buf float_handler; *************** float_signal (signo) *** 1644,1654 **** { if (float_handled == 0) crash_signal (signo); - #if defined (USG) || defined (hpux) - /* Re-enable the signal catcher. */ - signal (SIGFPE, float_signal); - #endif float_handled = 0; signal (SIGFPE, float_signal); longjmp (float_handler, 1); } --- 1647,1656 ---- { if (float_handled == 0) crash_signal (signo); float_handled = 0; + + /* On System-V derived systems, we must reinstall the signal handler. + This is harmless on BSD-derived systems. */ signal (SIGFPE, float_signal); longjmp (float_handler, 1); } *************** float_signal (signo) *** 1656,1668 **** /* Specify where to longjmp to when a floating arithmetic error happens. If HANDLER is 0, it means don't handle the errors any more. */ ! void set_float_handler (handler) jmp_buf handler; { float_handled = (handler != 0); if (handler) ! bcopy ((char *) handler, (char *) float_handler, sizeof (float_handler)); if (float_handled && ! float_handler_set) { --- 1658,1670 ---- /* Specify where to longjmp to when a floating arithmetic error happens. If HANDLER is 0, it means don't handle the errors any more. */ ! static void set_float_handler (handler) jmp_buf handler; { float_handled = (handler != 0); if (handler) ! memcpy (float_handler, handler, sizeof (float_handler)); if (float_handled && ! float_handler_set) { *************** set_float_handler (handler) *** 1676,1687 **** pointer FN, and one argument DATA. DATA is usually a struct which contains the real input and output for function FN. This function returns 0 (failure) if longjmp was called (i.e. an exception ! occured.) It returns 1 (success) otherwise. */ int do_float_handler (fn, data) ! void (*fn) PARAMS ((PTR)); ! PTR data; { jmp_buf buf; --- 1678,1689 ---- pointer FN, and one argument DATA. DATA is usually a struct which contains the real input and output for function FN. This function returns 0 (failure) if longjmp was called (i.e. an exception ! occurred.) It returns 1 (success) otherwise. */ int do_float_handler (fn, data) ! void (*fn) PARAMS ((PTR)); ! PTR data; { jmp_buf buf; *************** do_float_handler (fn, data) *** 1699,1736 **** return 1; } - /* Specify, in HANDLER, where to longjmp to when a floating arithmetic - error happens, pushing the previous specification into OLD_HANDLER. - Return an indication of whether there was a previous handler in effect. */ - - int - push_float_handler (handler, old_handler) - jmp_buf handler, old_handler; - { - int was_handled = float_handled; - - float_handled = 1; - if (was_handled) - memcpy ((char *) old_handler, (char *) float_handler, - sizeof (float_handler)); - - memcpy ((char *) float_handler, (char *) handler, sizeof (float_handler)); - return was_handled; - } - - /* Restore the previous specification of whether and where to longjmp to - when a floating arithmetic error happens. */ - - void - pop_float_handler (handled, handler) - int handled; - jmp_buf handler; - { - float_handled = handled; - if (handled) - bcopy ((char *) handler, (char *) float_handler, sizeof (float_handler)); - } - /* Handler for fatal signals, such as SIGSEGV. These are transformed into ICE messages, which is much more user friendly. */ --- 1701,1706 ---- *************** static void *** 1738,1744 **** crash_signal (signo) int signo; { ! internal_error ("Internal error: %s", strsignal (signo)); } /* Strip off a legitimate source ending from the input string NAME of --- 1708,1714 ---- crash_signal (signo) int signo; { ! internal_error ("internal error: %s", strsignal (signo)); } /* Strip off a legitimate source ending from the input string NAME of *************** strip_off_ending (name, len) *** 1762,1782 **** } } - /* Given a file name X, return the nondirectory portion. */ - - char * - file_name_nondirectory (x) - const char *x; - { - char *tmp = (char *) strrchr (x, '/'); - if (DIR_SEPARATOR != '/' && ! tmp) - tmp = (char *) strrchr (x, DIR_SEPARATOR); - if (tmp) - return (char *) (tmp + 1); - else - return (char *) x; - } - /* Output a quoted string. */ void --- 1732,1737 ---- *************** output_quoted_string (asm_file, string) *** 1792,1800 **** putc ('\"', asm_file); while ((c = *string++) != 0) { ! if (c == '\"' || c == '\\') ! putc ('\\', asm_file); ! putc (c, asm_file); } putc ('\"', asm_file); #endif --- 1747,1760 ---- putc ('\"', asm_file); while ((c = *string++) != 0) { ! if (ISPRINT (c)) ! { ! if (c == '\"' || c == '\\') ! putc ('\\', asm_file); ! putc (c, asm_file); ! } ! else ! fprintf (asm_file, "\\%03o", c); } putc ('\"', asm_file); #endif *************** open_dump_file (index, decl) *** 1849,1855 **** if (rtl_dump_file != NULL) fclose (rtl_dump_file); ! sprintf (seq, ".%02d.", index); if (! dump_file[index].initialized) { --- 1809,1815 ---- if (rtl_dump_file != NULL) fclose (rtl_dump_file); ! sprintf (seq, DUMPFILE_FORMAT, index); if (! dump_file[index].initialized) { *************** close_dump_file (index, func, insns) *** 1903,1909 **** char seq[16]; char *suffix; ! sprintf (seq, ".%02d.", index); suffix = concat (seq, dump_file[index].extension, NULL); print_rtl_graph_with_bb (dump_base_name, suffix, insns); free (suffix); --- 1863,1869 ---- char seq[16]; char *suffix; ! sprintf (seq, DUMPFILE_FORMAT, index); suffix = concat (seq, dump_file[index].extension, NULL); print_rtl_graph_with_bb (dump_base_name, suffix, insns); free (suffix); *************** wrapup_global_declarations (vec, len) *** 1984,1999 **** to force a constant to be written if and only if it is defined in a main file, as opposed to an include file. */ ! if (TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl) ! && (! TREE_READONLY (decl) ! || TREE_PUBLIC (decl) ! || (!optimize ! && flag_keep_static_consts ! && !DECL_ARTIFICIAL (decl)) ! || TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)))) { ! reconsider = 1; ! rest_of_decl_compilation (decl, NULL_PTR, 1, 1); } if (TREE_CODE (decl) == FUNCTION_DECL --- 1944,1967 ---- to force a constant to be written if and only if it is defined in a main file, as opposed to an include file. */ ! if (TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl)) { ! bool needed = 1; ! ! if (TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl))) ! /* needed */; ! else if (DECL_COMDAT (decl)) ! needed = 0; ! else if (TREE_READONLY (decl) && !TREE_PUBLIC (decl) ! && (optimize || !flag_keep_static_consts ! || DECL_ARTIFICIAL (decl))) ! needed = 0; ! ! if (needed) ! { ! reconsider = 1; ! rest_of_decl_compilation (decl, NULL, 1, 1); ! } } if (TREE_CODE (decl) == FUNCTION_DECL *************** check_global_declarations (vec, len) *** 2081,2127 **** warning_with_decl (decl, "`%s' defined but not used"); timevar_push (TV_SYMOUT); ! #ifdef SDB_DEBUGGING_INFO ! /* The COFF linker can move initialized global vars to the end. ! And that can screw up the symbol ordering. ! By putting the symbols in that order to begin with, ! we avoid a problem. mcsun!unido!fauern!tumuc!pes@uunet.uu.net. */ ! if (write_symbols == SDB_DEBUG && TREE_CODE (decl) == VAR_DECL ! && TREE_PUBLIC (decl) && DECL_INITIAL (decl) ! && ! DECL_EXTERNAL (decl) ! && DECL_RTL (decl) != 0) ! sdbout_symbol (decl, 0); ! ! /* Output COFF information for non-global ! file-scope initialized variables. */ ! if (write_symbols == SDB_DEBUG ! && TREE_CODE (decl) == VAR_DECL ! && DECL_INITIAL (decl) ! && ! DECL_EXTERNAL (decl) ! && DECL_RTL (decl) != 0 ! && GET_CODE (DECL_RTL (decl)) == MEM) ! sdbout_toplevel_data (decl); ! #endif /* SDB_DEBUGGING_INFO */ ! #ifdef DWARF_DEBUGGING_INFO ! /* Output DWARF information for file-scope tentative data object ! declarations, file-scope (extern) function declarations (which ! had no corresponding body) and file-scope tagged type declarations ! and definitions which have not yet been forced out. */ ! ! if (write_symbols == DWARF_DEBUG ! && (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))) ! dwarfout_file_scope_decl (decl, 1); ! #endif ! #ifdef DWARF2_DEBUGGING_INFO ! /* Output DWARF2 information for file-scope tentative data object ! declarations, file-scope (extern) function declarations (which ! had no corresponding body) and file-scope tagged type declarations ! and definitions which have not yet been forced out. */ ! ! if (write_symbols == DWARF2_DEBUG ! && (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))) ! dwarf2out_decl (decl); ! #endif timevar_pop (TV_SYMOUT); } } --- 2049,2055 ---- warning_with_decl (decl, "`%s' defined but not used"); timevar_push (TV_SYMOUT); ! (*debug_hooks->global_decl) (decl); timevar_pop (TV_SYMOUT); } } *************** pop_srcloc () *** 2172,2361 **** lineno = input_file_stack->line; } ! /* Compile an entire file of output from cpp, named NAME. ! Write a file of assembly output and various debugging dumps. */ static void ! compile_file (name) ! const char *name; { tree globals; - int name_specified = name != 0; - - if (dump_base_name == 0) - dump_base_name = name ? name : "gccdump"; - - if (! quiet_flag) - time_report = 1; - - /* Start timing total execution time. */ - - init_timevar (); - timevar_start (TV_TOTAL); - - /* Initialize data in various passes. */ - - init_obstacks (); - name = init_parse (name); - init_emit_once (debug_info_level == DINFO_LEVEL_NORMAL - || debug_info_level == DINFO_LEVEL_VERBOSE - || flag_test_coverage - || warn_notreached); - init_regs (); - init_alias_once (); - init_decl_processing (); - init_eh (); - init_optabs (); - init_stmt (); - init_loop (); - init_reload (); - init_function_once (); - init_stor_layout_once (); - init_varasm_once (); - init_EXPR_INSN_LIST_cache (); - - /* The following initialization functions need to generate rtl, so - provide a dummy function context for them. */ - init_dummy_function_start (); - init_expmed (); - init_expr_once (); - if (flag_caller_saves) - init_caller_save (); - expand_dummy_function_end (); - - /* If auxiliary info generation is desired, open the output file. - This goes in the same directory as the source file--unlike - all the other output files. */ - if (flag_gen_aux_info) - { - aux_info_file = fopen (aux_info_file_name, "w"); - if (aux_info_file == 0) - fatal_io_error ("can't open %s", aux_info_file_name); - } - - /* Open assembler code output file. Do this even if -fsyntax-only is on, - because then the driver will have provided the name of a temporary - file or bit bucket for us. */ - - if (! name_specified && asm_file_name == 0) - asm_out_file = stdout; - else - { - if (asm_file_name == 0) - { - int len = strlen (dump_base_name); - char *dumpname = (char *) xmalloc (len + 6); - memcpy (dumpname, dump_base_name, len + 1); - strip_off_ending (dumpname, len); - strcat (dumpname, ".s"); - asm_file_name = dumpname; - } - if (!strcmp (asm_file_name, "-")) - asm_out_file = stdout; - else - asm_out_file = fopen (asm_file_name, "w"); - if (asm_out_file == 0) - fatal_io_error ("can't open %s for writing", asm_file_name); - } - - #ifdef IO_BUFFER_SIZE - setvbuf (asm_out_file, (char *) xmalloc (IO_BUFFER_SIZE), - _IOFBF, IO_BUFFER_SIZE); - #endif - - if (name != 0) - name = ggc_strdup (name); - - input_filename = name; - - /* Put an entry on the input file stack for the main input file. */ - push_srcloc (input_filename, 0); - - /* Perform language-specific initialization. - This may set main_input_filename. */ - if (lang_hooks.init) - (*lang_hooks.init) (); - - /* If the input doesn't start with a #line, use the input name - as the official input file name. */ - if (main_input_filename == 0) - main_input_filename = name; - - if (flag_syntax_only) - { - write_symbols = NO_DEBUG; - profile_flag = 0; - profile_block_flag = 0; - } - else - { - ASM_FILE_START (asm_out_file); - - #ifdef ASM_COMMENT_START - if (flag_verbose_asm) - { - /* Print the list of options in effect. */ - print_version (asm_out_file, ASM_COMMENT_START); - print_switch_values (asm_out_file, 0, MAX_LINE, - ASM_COMMENT_START, " ", "\n"); - /* Add a blank line here so it appears in assembler output but not - screen output. */ - fprintf (asm_out_file, "\n"); - } - #endif - } /* ! flag_syntax_only */ - - #ifndef ASM_OUTPUT_SECTION_NAME - if (flag_function_sections) - { - warning ("-ffunction-sections not supported for this target."); - flag_function_sections = 0; - } - if (flag_data_sections) - { - warning ("-fdata-sections not supported for this target."); - flag_data_sections = 0; - } - #endif - - if (flag_function_sections - && (profile_flag || profile_block_flag)) - { - warning ("-ffunction-sections disabled; it makes profiling impossible."); - flag_function_sections = 0; - } - - #ifndef OBJECT_FORMAT_ELF - if (flag_function_sections && write_symbols != NO_DEBUG) - warning ("-ffunction-sections may affect debugging on some targets."); - #endif - - /* If dbx symbol table desired, initialize writing it - and output the predefined types. */ - timevar_push (TV_SYMOUT); - #if defined (DBX_DEBUGGING_INFO) || defined (XCOFF_DEBUGGING_INFO) - if (write_symbols == DBX_DEBUG || write_symbols == XCOFF_DEBUG) - dbxout_init (asm_out_file, main_input_filename, getdecls ()); - #endif - #ifdef SDB_DEBUGGING_INFO - if (write_symbols == SDB_DEBUG) - sdbout_init (asm_out_file, main_input_filename, getdecls ()); - #endif - #ifdef DWARF_DEBUGGING_INFO - if (write_symbols == DWARF_DEBUG) - dwarfout_init (asm_out_file, main_input_filename); - #endif - #ifdef DWARF2_UNWIND_INFO - if (dwarf2out_do_frame ()) - dwarf2out_frame_init (); - #endif - #ifdef DWARF2_DEBUGGING_INFO - if (write_symbols == DWARF2_DEBUG) - dwarf2out_init (asm_out_file, main_input_filename); - #endif - timevar_pop (TV_SYMOUT); - /* Initialize yet another pass. */ init_final (main_input_filename); --- 2100,2113 ---- lineno = input_file_stack->line; } ! /* Compile an entire translation unit. Write a file of assembly ! output and various debugging dumps. */ static void ! compile_file () { tree globals; /* Initialize yet another pass. */ init_final (main_input_filename); *************** compile_file (name) *** 2365,2381 **** /* Call the parser, which parses the entire file (calling rest_of_compilation for each function). */ ! if (yyparse () != 0) ! { ! if (errorcount == 0) ! fnotice (stderr, "Errors detected in input file (your bison.simple is out of date)\n"); ! ! /* In case there were missing closebraces, ! get us back to the global binding level. */ ! while (! global_bindings_p ()) ! poplevel (0, 0, 0); ! } /* Compilation is now finished except for writing what's left of the symbol table output. */ --- 2117,2127 ---- /* Call the parser, which parses the entire file (calling rest_of_compilation for each function). */ + yyparse (); ! /* In case there were missing block closers, ! get us back to the global binding level. */ ! (*lang_hooks.clear_binding_stack) (); /* Compilation is now finished except for writing what's left of the symbol table output. */ *************** compile_file (name) *** 2383,2389 **** timevar_pop (TV_PARSE); if (flag_syntax_only) ! goto finish_syntax; globals = getdecls (); --- 2129,2135 ---- timevar_pop (TV_PARSE); if (flag_syntax_only) ! return; globals = getdecls (); *************** compile_file (name) *** 2426,2450 **** /* Do dbx symbols. */ timevar_push (TV_SYMOUT); - #if defined (DBX_DEBUGGING_INFO) || defined (XCOFF_DEBUGGING_INFO) - if (write_symbols == DBX_DEBUG || write_symbols == XCOFF_DEBUG) - dbxout_finish (asm_out_file, main_input_filename); - #endif - - #ifdef DWARF_DEBUGGING_INFO - if (write_symbols == DWARF_DEBUG) - dwarfout_finish (); - #endif #ifdef DWARF2_UNWIND_INFO if (dwarf2out_do_frame ()) dwarf2out_frame_finish (); #endif ! #ifdef DWARF2_DEBUGGING_INFO ! if (write_symbols == DWARF2_DEBUG) ! dwarf2out_finish (); ! #endif timevar_pop (TV_SYMOUT); /* Output some stuff at end of file if nec. */ --- 2172,2184 ---- /* Do dbx symbols. */ timevar_push (TV_SYMOUT); #ifdef DWARF2_UNWIND_INFO if (dwarf2out_do_frame ()) dwarf2out_frame_finish (); #endif ! (*debug_hooks->finish) (main_input_filename); timevar_pop (TV_SYMOUT); /* Output some stuff at end of file if nec. */ *************** compile_file (name) *** 2477,2496 **** IDENT_ASM_OP, version_string); #endif - /* Language-specific end of compilation actions. */ - finish_syntax: - if (lang_hooks.finish) - (*lang_hooks.finish) (); - - /* Close the dump files. */ - - if (flag_gen_aux_info) - { - fclose (aux_info_file); - if (errorcount) - unlink (aux_info_file_name); - } - if (optimize > 0 && open_dump_file (DFI_combine, NULL)) { timevar_push (TV_DUMP); --- 2211,2216 ---- *************** compile_file (name) *** 2498,2548 **** close_dump_file (DFI_combine, NULL, NULL_RTX); timevar_pop (TV_DUMP); } - - /* Close non-debugging input and output files. Take special care to note - whether fclose returns an error, since the pages might still be on the - buffer chain while the file is open. */ - - finish_parse (); - - if (ferror (asm_out_file) != 0) - fatal_io_error ("error writing to %s", asm_file_name); - if (fclose (asm_out_file) != 0) - fatal_io_error ("error closing %s", asm_file_name); - - /* Do whatever is necessary to finish printing the graphs. */ - if (graph_dump_format != no_graph) - { - int i; - - for (i = 0; i < (int) DFI_MAX; ++i) - if (dump_file[i].initialized && dump_file[i].graph_dump_p) - { - char seq[16]; - char *suffix; - - sprintf (seq, ".%02d.", i); - suffix = concat (seq, dump_file[i].extension, NULL); - finish_graph_dump_file (dump_base_name, suffix); - free (suffix); - } - } - - if (mem_report) - { - ggc_print_statistics (); - stringpool_statistics (); - } - - /* Free up memory for the benefit of leak detectors. */ - free_reg_info (); - - /* Stop timing total execution time. */ - timevar_stop (TV_TOTAL); - - /* Print the times. */ - - timevar_print (stderr); } /* This is called from various places for FUNCTION_DECL, VAR_DECL, --- 2218,2223 ---- *************** compile_file (name) *** 2550,2556 **** This does nothing for local (non-static) variables, unless the variable is a register variable with an ASMSPEC. In that case, or ! if the variable is not an automatice, it sets up the RTL and outputs any assembler code (label definition, storage allocation and initialization). --- 2225,2231 ---- This does nothing for local (non-static) variables, unless the variable is a register variable with an ASMSPEC. In that case, or ! if the variable is not an automatic, it sets up the RTL and outputs any assembler code (label definition, storage allocation and initialization). *************** rest_of_decl_compilation (decl, asmspec, *** 2581,2600 **** timevar_push (TV_VARCONST); if (asmspec) make_decl_rtl (decl, asmspec); ! /* Initialized extern variable exists to be replaced ! with its value, or represents something that will be ! output in another file. */ ! if (! (TREE_CODE (decl) == VAR_DECL ! && DECL_EXTERNAL (decl) && TREE_READONLY (decl) ! && DECL_INITIAL (decl) != 0 ! && DECL_INITIAL (decl) != error_mark_node)) ! /* Don't output anything ! when a tentative file-scope definition is seen. ! But at end of compilation, do output code for them. */ ! if (! (! at_end && top_level ! && (DECL_INITIAL (decl) == 0 ! || DECL_INITIAL (decl) == error_mark_node))) ! assemble_variable (decl, top_level, at_end, 0); if (decl == last_assemble_variable_decl) { ASM_FINISH_DECLARE_OBJECT (asm_out_file, decl, --- 2256,2266 ---- timevar_push (TV_VARCONST); if (asmspec) make_decl_rtl (decl, asmspec); ! /* Don't output anything ! when a tentative file-scope definition is seen. ! But at end of compilation, do output code for them. */ ! if (at_end || !DECL_DEFER_OUTPUT (decl)) ! assemble_variable (decl, top_level, at_end, 0); if (decl == last_assemble_variable_decl) { ASM_FINISH_DECLARE_OBJECT (asm_out_file, decl, *************** rest_of_type_compilation (type, toplev) *** 2659,2728 **** sdbout_symbol (TYPE_STUB_DECL (type), !toplev); #endif #ifdef DWARF2_DEBUGGING_INFO ! if (write_symbols == DWARF2_DEBUG && toplev) dwarf2out_decl (TYPE_STUB_DECL (type)); #endif timevar_pop (TV_SYMOUT); } - /* DECL is an inline function, whose body is present, but which is not - being output at this point. (We're putting that off until we need - to do it.) If there are any actions that need to take place, - including the emission of debugging information for the function, - this is where they should go. This function may be called by - language-dependent code for front-ends that do not even generate - RTL for functions that don't need to be put out. */ - - void - note_deferral_of_defined_inline_function (decl) - tree decl ATTRIBUTE_UNUSED; - { - #ifdef DWARF_DEBUGGING_INFO - /* Generate the DWARF info for the "abstract" instance of a function - which we may later generate inlined and/or out-of-line instances - of. */ - if (write_symbols == DWARF_DEBUG - && (DECL_INLINE (decl) || DECL_ABSTRACT (decl)) - && ! DECL_ABSTRACT_ORIGIN (decl)) - { - /* The front-end may not have set CURRENT_FUNCTION_DECL, but the - DWARF code expects it to be set in this case. Intuitively, - DECL is the function we just finished defining, so setting - CURRENT_FUNCTION_DECL is sensible. */ - tree saved_cfd = current_function_decl; - int was_abstract = DECL_ABSTRACT (decl); - current_function_decl = decl; - - /* Let the DWARF code do its work. */ - set_decl_abstract_flags (decl, 1); - dwarfout_file_scope_decl (decl, 0); - if (! was_abstract) - set_decl_abstract_flags (decl, 0); - - /* Reset CURRENT_FUNCTION_DECL. */ - current_function_decl = saved_cfd; - } - #endif - } - - /* FNDECL is an inline function which is about to be emitted out of line. - Do any preparation, such as emitting abstract debug info for the inline - before it gets mangled by optimization. */ - - void - note_outlining_of_inline_function (fndecl) - tree fndecl ATTRIBUTE_UNUSED; - { - #ifdef DWARF2_DEBUGGING_INFO - /* The DWARF 2 backend tries to reduce debugging bloat by not emitting - the abstract description of inline functions until something tries to - reference them. Force it out now, before optimizations mangle the - block tree. */ - if (write_symbols == DWARF2_DEBUG) - dwarf2out_abstract_function (fndecl); - #endif - } - /* This is called from finish_function (within yyparse) after each top-level definition is parsed. It is supposed to compile that function or variable --- 2325,2338 ---- sdbout_symbol (TYPE_STUB_DECL (type), !toplev); #endif #ifdef DWARF2_DEBUGGING_INFO ! if ((write_symbols == DWARF2_DEBUG ! || write_symbols == VMS_AND_DWARF2_DEBUG) ! && toplev) dwarf2out_decl (TYPE_STUB_DECL (type)); #endif timevar_pop (TV_SYMOUT); } /* This is called from finish_function (within yyparse) after each top-level definition is parsed. It is supposed to compile that function or variable *************** void *** 2733,2743 **** rest_of_compilation (decl) tree decl; { ! register rtx insns; int tem; int failure = 0; int rebuild_label_notes_after_reload; int register_life_up_to_date; timevar_push (TV_REST_OF_COMPILATION); --- 2343,2354 ---- rest_of_compilation (decl) tree decl; { ! rtx insns; int tem; int failure = 0; int rebuild_label_notes_after_reload; int register_life_up_to_date; + int cleanup_crossjump; timevar_push (TV_REST_OF_COMPILATION); *************** rest_of_compilation (decl) *** 2754,2764 **** if (!cfun->x_whole_function_mode_p) identify_blocks (); - /* Then remove any notes we don't need. That will make iterating - over the instruction sequence faster, and allow the garbage - collector to reclaim the memory used by the notes. */ - remove_unnecessary_notes (); - /* In function-at-a-time mode, we do not attempt to keep the BLOCK tree in sensible shape. So, we just recalculate it here. */ if (cfun->x_whole_function_mode_p) --- 2365,2370 ---- *************** rest_of_compilation (decl) *** 2843,2876 **** if (inlinable || (DECL_INLINE (decl) && ((! TREE_PUBLIC (decl) && ! TREE_ADDRESSABLE (decl) && ! flag_keep_inline_functions) || DECL_EXTERNAL (decl)))) DECL_DEFER_OUTPUT (decl) = 1; if (DECL_INLINE (decl)) ! /* DWARF wants seperate debugging info for abstract and concrete instances of all inline functions, including those declared inline but not inlined, and those inlined even though they weren't declared inline. Conveniently, that's what DECL_INLINE means at this point. */ ! note_deferral_of_defined_inline_function (decl); if (DECL_DEFER_OUTPUT (decl)) { /* If -Wreturn-type, we have to do a bit of compilation. We just ! want to call jump_optimize to figure out whether or not we can fall off the end of the function; we do the minimum amount of ! work necessary to make that safe. And, we set optimize to zero ! to keep jump_optimize from working too hard. */ if (warn_return_type) { int saved_optimize = optimize; optimize = 0; find_exception_handler_labels (); ! jump_optimize (insns, !JUMP_CROSS_JUMP, !JUMP_NOOP_MOVES, ! !JUMP_AFTER_REGSCAN); optimize = saved_optimize; } current_function_nothrow = nothrow_function_p (); --- 2449,2486 ---- if (inlinable || (DECL_INLINE (decl) && ((! TREE_PUBLIC (decl) && ! TREE_ADDRESSABLE (decl) + && ! TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)) && ! flag_keep_inline_functions) || DECL_EXTERNAL (decl)))) DECL_DEFER_OUTPUT (decl) = 1; if (DECL_INLINE (decl)) ! /* DWARF wants separate debugging info for abstract and concrete instances of all inline functions, including those declared inline but not inlined, and those inlined even though they weren't declared inline. Conveniently, that's what DECL_INLINE means at this point. */ ! (*debug_hooks->deferred_inline_function) (decl); if (DECL_DEFER_OUTPUT (decl)) { /* If -Wreturn-type, we have to do a bit of compilation. We just ! want to call cleanup the cfg to figure out whether or not we can fall off the end of the function; we do the minimum amount of ! work necessary to make that safe. */ if (warn_return_type) { int saved_optimize = optimize; optimize = 0; + rebuild_jump_labels (insns); find_exception_handler_labels (); ! find_basic_blocks (insns, max_reg_num (), rtl_dump_file); ! cleanup_cfg (CLEANUP_PRE_SIBCALL | CLEANUP_PRE_LOOP); optimize = saved_optimize; + + /* CFG is no longer maintained up-to-date. */ + free_bb_for_insn (); } current_function_nothrow = nothrow_function_p (); *************** rest_of_compilation (decl) *** 2893,2898 **** --- 2503,2531 ---- goto exit_rest_of_compilation; } + /* If we're emitting a nested function, make sure its parent gets + emitted as well. Doing otherwise confuses debug info. */ + { + tree parent; + for (parent = DECL_CONTEXT (current_function_decl); + parent != NULL_TREE; + parent = get_containing_scope (parent)) + if (TREE_CODE (parent) == FUNCTION_DECL) + TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (parent)) = 1; + } + + /* We are now committed to emitting code for this function. Do any + preparation, such as emitting abstract debug info for the inline + before it gets mangled by optimization. */ + if (DECL_INLINE (decl)) + (*debug_hooks->outlining_inline_function) (decl); + + /* Remove any notes we don't need. That will make iterating + over the instruction sequence faster, and allow the garbage + collector to reclaim the memory used by the notes. */ + remove_unnecessary_notes (); + reorder_blocks (); + ggc_collect (); /* Initialize some variables used by the optimizers. */ *************** rest_of_compilation (decl) *** 2905,2916 **** distinguish between the return value of this function and the return value of called functions. Also, we can remove all SETs of subregs of hard registers; they are only here because of ! integrate.*/ rtx_equal_function_value_matters = 0; purge_hard_subreg_sets (get_insns ()); ! /* Don't return yet if -Wreturn-type; we need to do jump_optimize. */ ! if ((rtl_dump_and_exit || flag_syntax_only) && !warn_return_type) goto exit_rest_of_compilation; /* We may have potential sibling or tail recursion sites. Select one --- 2538,2553 ---- distinguish between the return value of this function and the return value of called functions. Also, we can remove all SETs of subregs of hard registers; they are only here because of ! integrate. Also, we can now initialize pseudos intended to ! carry magic hard reg data throughout the function. */ rtx_equal_function_value_matters = 0; purge_hard_subreg_sets (get_insns ()); ! /* Early return if there were errors. We can run afoul of our ! consistency checks, and there's not really much point in fixing them. ! Don't return yet if -Wreturn-type; we need to do cleanup_cfg. */ ! if (((rtl_dump_and_exit || flag_syntax_only) && !warn_return_type) ! || errorcount || sorrycount) goto exit_rest_of_compilation; /* We may have potential sibling or tail recursion sites. Select one *************** rest_of_compilation (decl) *** 2939,2944 **** --- 2576,2585 ---- timevar_pop (TV_JUMP); } + /* Delay emitting hard_reg_initial_value sets until after EH landing pad + generation, which might create new sets. */ + emit_initial_value_sets (); + #ifdef FINALIZE_PIC /* If we are doing position-independent code generation, now is the time to output special prologues and epilogues. *************** rest_of_compilation (decl) *** 2954,2960 **** unshare_all_rtl (current_function_decl, insns); #ifdef SETJMP_VIA_SAVE_AREA ! /* This must be performed before virutal register instantiation. */ if (current_function_calls_alloca) optimize_save_area_alloca (insns); #endif --- 2595,2601 ---- unshare_all_rtl (current_function_decl, insns); #ifdef SETJMP_VIA_SAVE_AREA ! /* This must be performed before virtual register instantiation. */ if (current_function_calls_alloca) optimize_save_area_alloca (insns); #endif *************** rest_of_compilation (decl) *** 2974,2981 **** expected_value_to_br_prob (); reg_scan (insns, max_reg_num (), 0); ! jump_optimize (insns, !JUMP_CROSS_JUMP, !JUMP_NOOP_MOVES, ! JUMP_AFTER_REGSCAN); timevar_pop (TV_JUMP); --- 2615,2628 ---- expected_value_to_br_prob (); reg_scan (insns, max_reg_num (), 0); ! rebuild_jump_labels (insns); ! find_basic_blocks (insns, max_reg_num (), rtl_dump_file); ! cleanup_cfg ((optimize ? CLEANUP_EXPENSIVE : 0) | CLEANUP_PRE_LOOP); ! ! /* CFG is no longer maintained up-to-date. */ ! free_bb_for_insn (); ! copy_loop_headers (insns); ! purge_line_number_notes (insns); timevar_pop (TV_JUMP); *************** rest_of_compilation (decl) *** 2986,2997 **** goto exit_rest_of_compilation; } timevar_push (TV_JUMP); if (optimize > 0) { find_basic_blocks (insns, max_reg_num (), rtl_dump_file); ! cleanup_cfg (); /* ??? Run if-conversion before delete_null_pointer_checks, since the later does not preserve the CFG. This should --- 2633,2714 ---- goto exit_rest_of_compilation; } + /* Long term, this should probably move before the jump optimizer too, + but I didn't want to disturb the rtl_dump_and_exit and related + stuff at this time. */ + if (optimize > 0 && flag_ssa) + { + /* Convert to SSA form. */ + + timevar_push (TV_TO_SSA); + open_dump_file (DFI_ssa, decl); + + find_basic_blocks (insns, max_reg_num (), rtl_dump_file); + cleanup_cfg (CLEANUP_EXPENSIVE | CLEANUP_PRE_LOOP); + convert_to_ssa (); + + close_dump_file (DFI_ssa, print_rtl_with_bb, insns); + timevar_pop (TV_TO_SSA); + + /* Perform sparse conditional constant propagation, if requested. */ + if (flag_ssa_ccp) + { + timevar_push (TV_SSA_CCP); + open_dump_file (DFI_ssa_ccp, decl); + + ssa_const_prop (); + + close_dump_file (DFI_ssa_ccp, print_rtl_with_bb, get_insns ()); + timevar_pop (TV_SSA_CCP); + } + + /* It would be useful to cleanup the CFG at this point, but block + merging and possibly other transformations might leave a PHI + node in the middle of a basic block, which is a strict no-no. */ + + /* The SSA implementation uses basic block numbers in its phi + nodes. Thus, changing the control-flow graph or the basic + blocks, e.g., calling find_basic_blocks () or cleanup_cfg (), + may cause problems. */ + + if (flag_ssa_dce) + { + /* Remove dead code. */ + + timevar_push (TV_SSA_DCE); + open_dump_file (DFI_ssa_dce, decl); + + insns = get_insns (); + ssa_eliminate_dead_code(); + + close_dump_file (DFI_ssa_dce, print_rtl_with_bb, insns); + timevar_pop (TV_SSA_DCE); + } + + /* Convert from SSA form. */ + + timevar_push (TV_FROM_SSA); + open_dump_file (DFI_ussa, decl); + + convert_from_ssa (); + /* New registers have been created. Rescan their usage. */ + reg_scan (insns, max_reg_num (), 1); + + close_dump_file (DFI_ussa, print_rtl_with_bb, insns); + timevar_pop (TV_FROM_SSA); + + ggc_collect (); + /* CFG is no longer maintained up-to-date. */ + free_bb_for_insn (); + } + timevar_push (TV_JUMP); if (optimize > 0) { find_basic_blocks (insns, max_reg_num (), rtl_dump_file); ! cleanup_cfg (CLEANUP_EXPENSIVE | CLEANUP_PRE_LOOP ! | (flag_thread_jumps ? CLEANUP_THREADING : 0)); /* ??? Run if-conversion before delete_null_pointer_checks, since the later does not preserve the CFG. This should *************** rest_of_compilation (decl) *** 3001,3006 **** --- 2718,2725 ---- if_convert (0); timevar_pop (TV_IFCVT); + /* CFG is no longer maintained up-to-date. */ + free_bb_for_insn (); /* Try to identify useless null pointer tests and delete them. */ if (flag_delete_null_pointer_checks) delete_null_pointer_checks (insns); *************** rest_of_compilation (decl) *** 3030,3069 **** reg_scan (insns, max_reg_num (), 1); - if (flag_thread_jumps) - { - timevar_push (TV_JUMP); - thread_jumps (insns, max_reg_num (), 1); - timevar_pop (TV_JUMP); - } - tem = cse_main (insns, max_reg_num (), 0, rtl_dump_file); ! /* If we are not running the second CSE pass, then we are no longer ! expecting CSE to be run. */ ! cse_not_expected = !flag_rerun_cse_after_loop; if (tem || optimize > 1) { timevar_push (TV_JUMP); ! jump_optimize (insns, !JUMP_CROSS_JUMP, !JUMP_NOOP_MOVES, ! !JUMP_AFTER_REGSCAN); timevar_pop (TV_JUMP); } /* Run this after jump optmizations remove all the unreachable code so that unreachable code will not keep values live. */ ! delete_trivially_dead_insns (insns, max_reg_num ()); /* Try to identify useless null pointer tests and delete them. */ ! if (flag_delete_null_pointer_checks) { timevar_push (TV_JUMP); find_basic_blocks (insns, max_reg_num (), rtl_dump_file); ! cleanup_cfg (); ! delete_null_pointer_checks (insns); timevar_pop (TV_JUMP); } --- 2749,2788 ---- reg_scan (insns, max_reg_num (), 1); tem = cse_main (insns, max_reg_num (), 0, rtl_dump_file); ! /* If we are not running more CSE passes, then we are no longer ! expecting CSE to be run. But always rerun it in a cheap mode. */ ! cse_not_expected = !flag_rerun_cse_after_loop && !flag_gcse; if (tem || optimize > 1) { timevar_push (TV_JUMP); ! rebuild_jump_labels (insns); ! find_basic_blocks (insns, max_reg_num (), rtl_dump_file); ! cleanup_cfg (CLEANUP_EXPENSIVE | CLEANUP_PRE_LOOP); timevar_pop (TV_JUMP); + /* CFG is no longer maintained up-to-date. */ + free_bb_for_insn (); } /* Run this after jump optmizations remove all the unreachable code so that unreachable code will not keep values live. */ ! delete_trivially_dead_insns (insns, max_reg_num (), 0); /* Try to identify useless null pointer tests and delete them. */ ! if (flag_delete_null_pointer_checks || flag_thread_jumps) { timevar_push (TV_JUMP); find_basic_blocks (insns, max_reg_num (), rtl_dump_file); ! cleanup_cfg (CLEANUP_EXPENSIVE | CLEANUP_PRE_LOOP ! | (flag_thread_jumps ? CLEANUP_THREADING : 0)); ! if (flag_delete_null_pointer_checks) ! delete_null_pointer_checks (insns); ! /* CFG is no longer maintained up-to-date. */ ! free_bb_for_insn (); timevar_pop (TV_JUMP); } *************** rest_of_compilation (decl) *** 3084,3166 **** ggc_collect (); - if (optimize > 0 && flag_ssa) - { - /* Convert to SSA form. */ - - timevar_push (TV_TO_SSA); - open_dump_file (DFI_ssa, decl); - - find_basic_blocks (insns, max_reg_num (), rtl_dump_file); - cleanup_cfg (); - convert_to_ssa (); - - close_dump_file (DFI_ssa, print_rtl_with_bb, insns); - timevar_pop (TV_TO_SSA); - - /* The SSA implementation uses basic block numbers in its phi - nodes. Thus, changing the control-flow graph or the basic - blocks, e.g., calling find_basic_blocks () or cleanup_cfg (), - may cause problems. */ - - if (flag_dce) - { - /* Remove dead code. */ - - timevar_push (TV_DEAD_CODE_ELIM); - open_dump_file (DFI_dce, decl); - - insns = get_insns (); - eliminate_dead_code(); - - close_dump_file (DFI_dce, print_rtl_with_bb, insns); - timevar_pop (TV_DEAD_CODE_ELIM); - } - - /* Convert from SSA form. */ - - timevar_push (TV_FROM_SSA); - open_dump_file (DFI_ussa, decl); - - convert_from_ssa (); - /* New registers have been created. Rescan their usage. */ - reg_scan (insns, max_reg_num (), 1); - /* Life analysis used in SSA adds log_links but these - shouldn't be there until the flow stage, so clear - them away. */ - clear_log_links (insns); - - close_dump_file (DFI_ussa, print_rtl_with_bb, insns); - timevar_pop (TV_FROM_SSA); - - ggc_collect (); - } - /* Perform global cse. */ if (optimize > 0 && flag_gcse) { timevar_push (TV_GCSE); open_dump_file (DFI_gcse, decl); find_basic_blocks (insns, max_reg_num (), rtl_dump_file); ! cleanup_cfg (); tem = gcse_main (insns, rtl_dump_file); ! /* If gcse altered any jumps, rerun jump optimizations to clean ! things up. */ ! if (tem) { timevar_push (TV_JUMP); ! jump_optimize (insns, !JUMP_CROSS_JUMP, !JUMP_NOOP_MOVES, ! !JUMP_AFTER_REGSCAN); timevar_pop (TV_JUMP); } close_dump_file (DFI_gcse, print_rtl, insns); timevar_pop (TV_GCSE); ggc_collect (); } /* Move constant computations out of loops. */ --- 2803,2869 ---- ggc_collect (); /* Perform global cse. */ if (optimize > 0 && flag_gcse) { + int save_csb, save_cfj; + int tem2 = 0; + timevar_push (TV_GCSE); open_dump_file (DFI_gcse, decl); find_basic_blocks (insns, max_reg_num (), rtl_dump_file); ! cleanup_cfg (CLEANUP_EXPENSIVE | CLEANUP_PRE_LOOP); tem = gcse_main (insns, rtl_dump_file); + rebuild_jump_labels (insns); ! save_csb = flag_cse_skip_blocks; ! save_cfj = flag_cse_follow_jumps; ! flag_cse_skip_blocks = flag_cse_follow_jumps = 0; ! ! /* CFG is no longer maintained up-to-date. */ ! free_bb_for_insn (); ! /* If -fexpensive-optimizations, re-run CSE to clean up things done ! by gcse. */ ! if (flag_expensive_optimizations) ! { ! timevar_push (TV_CSE); ! reg_scan (insns, max_reg_num (), 1); ! tem2 = cse_main (insns, max_reg_num (), 0, rtl_dump_file); ! timevar_pop (TV_CSE); ! cse_not_expected = !flag_rerun_cse_after_loop; ! } ! ! /* If gcse or cse altered any jumps, rerun jump optimizations to clean ! things up. Then possibly re-run CSE again. */ ! while (tem || tem2) { + tem = tem2 = 0; timevar_push (TV_JUMP); ! rebuild_jump_labels (insns); ! delete_trivially_dead_insns (insns, max_reg_num (), 0); ! find_basic_blocks (insns, max_reg_num (), rtl_dump_file); ! cleanup_cfg (CLEANUP_EXPENSIVE | CLEANUP_PRE_LOOP); ! /* CFG is no longer maintained up-to-date. */ ! free_bb_for_insn (); timevar_pop (TV_JUMP); + + if (flag_expensive_optimizations) + { + timevar_push (TV_CSE); + reg_scan (insns, max_reg_num (), 1); + tem2 = cse_main (insns, max_reg_num (), 0, rtl_dump_file); + timevar_pop (TV_CSE); + } } close_dump_file (DFI_gcse, print_rtl, insns); timevar_pop (TV_GCSE); ggc_collect (); + flag_cse_skip_blocks = save_csb; + flag_cse_follow_jumps = save_cfj; } /* Move constant computations out of loops. */ *************** rest_of_compilation (decl) *** 3169,3193 **** { timevar_push (TV_LOOP); open_dump_file (DFI_loop, decl); if (flag_rerun_loop_opt) { ! /* We only want to perform unrolling once. */ ! loop_optimize (insns, rtl_dump_file, 0); /* The first call to loop_optimize makes some instructions trivially dead. We delete those instructions now in the hope that doing so will make the heuristics in loop work better and possibly speed up compilation. */ ! delete_trivially_dead_insns (insns, max_reg_num ()); /* The regscan pass is currently necessary as the alias analysis code depends on this information. */ reg_scan (insns, max_reg_num (), 1); } loop_optimize (insns, rtl_dump_file, ! (flag_unroll_loops ? LOOP_UNROLL : 0) | LOOP_BCT); close_dump_file (DFI_loop, print_rtl, insns); timevar_pop (TV_LOOP); --- 2872,2900 ---- { timevar_push (TV_LOOP); open_dump_file (DFI_loop, decl); + free_bb_for_insn (); if (flag_rerun_loop_opt) { ! cleanup_barriers (); ! /* We only want to perform unrolling once. */ ! loop_optimize (insns, rtl_dump_file, LOOP_FIRST_PASS); /* The first call to loop_optimize makes some instructions trivially dead. We delete those instructions now in the hope that doing so will make the heuristics in loop work better and possibly speed up compilation. */ ! delete_trivially_dead_insns (insns, max_reg_num (), 0); /* The regscan pass is currently necessary as the alias analysis code depends on this information. */ reg_scan (insns, max_reg_num (), 1); } + cleanup_barriers (); loop_optimize (insns, rtl_dump_file, ! (flag_unroll_loops ? LOOP_UNROLL : 0) | LOOP_BCT ! | (flag_prefetch_loop_arrays ? LOOP_PREFETCH : 0)); close_dump_file (DFI_loop, print_rtl, insns); timevar_pop (TV_LOOP); *************** rest_of_compilation (decl) *** 3209,3250 **** ??? Rework to not call reg_scan so often. */ timevar_push (TV_JUMP); reg_scan (insns, max_reg_num (), 0); - jump_optimize (insns, !JUMP_CROSS_JUMP, - !JUMP_NOOP_MOVES, JUMP_AFTER_REGSCAN); timevar_push (TV_IFCVT); find_basic_blocks (insns, max_reg_num (), rtl_dump_file); ! cleanup_cfg (); if_convert (0); timevar_pop(TV_IFCVT); timevar_pop (TV_JUMP); reg_scan (insns, max_reg_num (), 0); tem = cse_main (insns, max_reg_num (), 1, rtl_dump_file); if (tem) { timevar_push (TV_JUMP); ! jump_optimize (insns, !JUMP_CROSS_JUMP, ! !JUMP_NOOP_MOVES, !JUMP_AFTER_REGSCAN); timevar_pop (TV_JUMP); } } - if (flag_thread_jumps) - { - /* This pass of jump threading straightens out code - that was kinked by loop optimization. */ - timevar_push (TV_JUMP); - reg_scan (insns, max_reg_num (), 0); - thread_jumps (insns, max_reg_num (), 0); - timevar_pop (TV_JUMP); - } - close_dump_file (DFI_cse2, print_rtl, insns); timevar_pop (TV_CSE2); --- 2916,2956 ---- ??? Rework to not call reg_scan so often. */ timevar_push (TV_JUMP); + /* The previous call to loop_optimize makes some instructions + trivially dead. We delete those instructions now in the + hope that doing so will make the heuristics in jump work + better and possibly speed up compilation. */ + delete_trivially_dead_insns (insns, max_reg_num (), 0); + reg_scan (insns, max_reg_num (), 0); timevar_push (TV_IFCVT); find_basic_blocks (insns, max_reg_num (), rtl_dump_file); ! cleanup_cfg (CLEANUP_EXPENSIVE); if_convert (0); timevar_pop(TV_IFCVT); timevar_pop (TV_JUMP); + /* CFG is no longer maintained up-to-date. */ + free_bb_for_insn (); reg_scan (insns, max_reg_num (), 0); tem = cse_main (insns, max_reg_num (), 1, rtl_dump_file); if (tem) { timevar_push (TV_JUMP); ! rebuild_jump_labels (insns); ! find_basic_blocks (insns, max_reg_num (), rtl_dump_file); ! cleanup_cfg (CLEANUP_EXPENSIVE); ! /* CFG is no longer maintained up-to-date. */ ! free_bb_for_insn (); timevar_pop (TV_JUMP); } } close_dump_file (DFI_cse2, print_rtl, insns); timevar_pop (TV_CSE2); *************** rest_of_compilation (decl) *** 3262,3270 **** open_dump_file (DFI_cfg, decl); find_basic_blocks (insns, max_reg_num (), rtl_dump_file); ! cleanup_cfg (); check_function_return_warnings (); close_dump_file (DFI_cfg, print_rtl_with_bb, insns); if (profile_arc_flag || flag_test_coverage || flag_branch_probabilities) --- 2968,2986 ---- open_dump_file (DFI_cfg, decl); find_basic_blocks (insns, max_reg_num (), rtl_dump_file); ! cleanup_cfg ((optimize ? CLEANUP_EXPENSIVE : 0) ! | (flag_thread_jumps ? CLEANUP_THREADING : 0)); check_function_return_warnings (); + /* It may make more sense to mark constant functions after dead code is + eliminated by life_analyzis, but we need to do it early, as -fprofile-arcs + may insert code making function non-constant, but we still must consider + it as constant, otherwise -fbranch-probabilities will not read data back. + + life_analyzis rarely eliminates modification of external memory. + */ + mark_constant_function (); + close_dump_file (DFI_cfg, print_rtl_with_bb, insns); if (profile_arc_flag || flag_test_coverage || flag_branch_probabilities) *************** rest_of_compilation (decl) *** 3297,3306 **** flow_loops_free (&loops); } life_analysis (insns, rtl_dump_file, PROP_FINAL); - mark_constant_function (); timevar_pop (TV_FLOW); - register_life_up_to_date = 1; no_new_pseudos = 1; if (warn_uninitialized || extra_warnings) --- 3013,3020 ---- *************** rest_of_compilation (decl) *** 3310,3315 **** --- 3024,3040 ---- setjmp_args_warning (); } + if (optimize) + { + if (initialize_uninitialized_subregs ()) + { + /* Insns were inserted, so things might look a bit different. */ + insns = get_insns (); + life_analysis (insns, rtl_dump_file, + (PROP_LOG_LINKS | PROP_REG_INFO | PROP_DEATH_NOTES)); + } + } + close_dump_file (DFI_life, print_rtl_with_bb, insns); ggc_collect (); *************** rest_of_compilation (decl) *** 3326,3331 **** --- 3051,3060 ---- rebuild_jump_labels_after_combine = combine_instructions (insns, max_reg_num ()); + /* Always purge dead edges, as we may eliminate an insn throwing + exception. */ + rebuild_jump_labels_after_combine |= purge_all_dead_edges (true); + /* Combining insns may have turned an indirect jump into a direct jump. Rebuid the JUMP_LABEL fields of jumping instructions. */ *************** rest_of_compilation (decl) *** 3335,3354 **** rebuild_jump_labels (insns); timevar_pop (TV_JUMP); ! timevar_push (TV_FLOW); ! find_basic_blocks (insns, max_reg_num (), rtl_dump_file); ! cleanup_cfg (); ! ! /* Blimey. We've got to have the CFG up to date for the call to ! if_convert below. However, the random deletion of blocks ! without updating life info can wind up with Wierd Stuff in ! global_live_at_end. We then run sched1, which updates things ! properly, discovers the wierdness and aborts. */ ! update_life_info (NULL, UPDATE_LIFE_GLOBAL_RM_NOTES, ! PROP_DEATH_NOTES | PROP_KILL_DEAD_CODE ! | PROP_SCAN_DEAD_CODE); ! ! timevar_pop (TV_FLOW); } close_dump_file (DFI_combine, print_rtl_with_bb, insns); --- 3064,3070 ---- rebuild_jump_labels (insns); timevar_pop (TV_JUMP); ! cleanup_cfg (CLEANUP_EXPENSIVE | CLEANUP_UPDATE_LIFE); } close_dump_file (DFI_combine, print_rtl_with_bb, insns); *************** rest_of_compilation (decl) *** 3387,3418 **** ggc_collect (); } /* Any of the several passes since flow1 will have munged register lifetime data a bit. */ ! if (optimize > 0) ! register_life_up_to_date = 0; #ifdef OPTIMIZE_MODE_SWITCHING ! timevar_push (TV_GCSE); ! if (optimize_mode_switching (NULL_PTR)) { /* We did work, and so had to regenerate global life information. Take advantage of this and don't re-recompute register life information below. */ register_life_up_to_date = 1; } ! timevar_pop (TV_GCSE); #endif #ifdef INSN_SCHEDULING /* Print function header into sched dump now because doing the sched analysis makes some of the dump. */ if (optimize > 0 && flag_schedule_insns) { - timevar_push (TV_SCHED); open_dump_file (DFI_sched, decl); /* Do control and data sched analysis, --- 3103,3140 ---- ggc_collect (); } + /* Do unconditional splitting before register allocation to allow machine + description to add extra information not needed previously. */ + split_all_insns (1); + /* Any of the several passes since flow1 will have munged register lifetime data a bit. */ ! register_life_up_to_date = 0; #ifdef OPTIMIZE_MODE_SWITCHING ! timevar_push (TV_MODE_SWITCH); ! no_new_pseudos = 0; ! if (optimize_mode_switching (NULL)) { /* We did work, and so had to regenerate global life information. Take advantage of this and don't re-recompute register life information below. */ register_life_up_to_date = 1; } + no_new_pseudos = 1; ! timevar_pop (TV_MODE_SWITCH); #endif + timevar_push (TV_SCHED); + #ifdef INSN_SCHEDULING /* Print function header into sched dump now because doing the sched analysis makes some of the dump. */ if (optimize > 0 && flag_schedule_insns) { open_dump_file (DFI_sched, decl); /* Do control and data sched analysis, *************** rest_of_compilation (decl) *** 3421,3435 **** schedule_insns (rtl_dump_file); close_dump_file (DFI_sched, print_rtl_with_bb, insns); - timevar_pop (TV_SCHED); - - ggc_collect (); /* Register lifetime information was updated as part of verifying the schedule. */ register_life_up_to_date = 1; } #endif /* Determine if the current function is a leaf before running reload since this can impact optimizations done by the prologue and --- 3143,3157 ---- schedule_insns (rtl_dump_file); close_dump_file (DFI_sched, print_rtl_with_bb, insns); /* Register lifetime information was updated as part of verifying the schedule. */ register_life_up_to_date = 1; } #endif + timevar_pop (TV_SCHED); + + ggc_collect (); /* Determine if the current function is a leaf before running reload since this can impact optimizations done by the prologue and *************** rest_of_compilation (decl) *** 3446,3451 **** --- 3168,3182 ---- if (! register_life_up_to_date) recompute_reg_usage (insns, ! optimize_size); + + /* Allocate the reg_renumber array. */ + allocate_reg_info (max_regno, FALSE, TRUE); + + /* And the reg_equiv_memory_loc array. */ + reg_equiv_memory_loc = (rtx *) xcalloc (max_regno, sizeof (rtx)); + + allocate_initial_values (reg_equiv_memory_loc); + regclass (insns, max_reg_num (), rtl_dump_file); rebuild_label_notes_after_reload = local_alloc (); *************** rest_of_compilation (decl) *** 3505,3520 **** timevar_pop (TV_RELOAD_CSE_REGS); } - /* If optimizing, then go ahead and split insns now since we are about - to recompute flow information anyway. */ - if (optimize > 0) - { - int old_labelnum = max_label_num (); - - split_all_insns (0); - rebuild_label_notes_after_reload |= old_labelnum != max_label_num (); - } - /* Register allocation and reloading may have turned an indirect jump into a direct jump. If so, we must rebuild the JUMP_LABEL fields of jumping instructions. */ --- 3236,3241 ---- *************** rest_of_compilation (decl) *** 3533,3541 **** timevar_push (TV_FLOW2); open_dump_file (DFI_flow2, decl); ! jump_optimize (insns, !JUMP_CROSS_JUMP, ! JUMP_NOOP_MOVES, !JUMP_AFTER_REGSCAN); ! find_basic_blocks (insns, max_reg_num (), rtl_dump_file); /* On some machines, the prologue and epilogue code, or parts thereof, can be represented as RTL. Doing so lets us schedule insns between --- 3254,3268 ---- timevar_push (TV_FLOW2); open_dump_file (DFI_flow2, decl); ! #ifdef ENABLE_CHECKING ! verify_flow_info (); ! #endif ! ! /* If optimizing, then go ahead and split insns now. */ ! if (optimize > 0) ! split_all_insns (0); ! ! cleanup_cfg (optimize ? CLEANUP_EXPENSIVE : 0); /* On some machines, the prologue and epilogue code, or parts thereof, can be represented as RTL. Doing so lets us schedule insns between *************** rest_of_compilation (decl) *** 3543,3551 **** scheduling to operate in the epilogue. */ thread_prologue_and_epilogue_insns (insns); if (optimize) { ! cleanup_cfg (); life_analysis (insns, rtl_dump_file, PROP_FINAL); /* This is kind of a heuristic. We need to run combine_stack_adjustments --- 3270,3290 ---- scheduling to operate in the epilogue. */ thread_prologue_and_epilogue_insns (insns); + /* Cross-jumping is O(N^3) on the number of edges, thus trying to + perform cross-jumping on flow graphs which have a high connectivity + will take a long time. This is similar to the test to disable GCSE. */ + cleanup_crossjump = CLEANUP_CROSSJUMP; + if (n_basic_blocks > 1000 && n_edges / n_basic_blocks >= 20) + { + if (optimize && warn_disabled_optimization) + warning ("crossjump disabled: %d > 1000 basic blocks and %d >= 20 edges/basic block", + n_basic_blocks, n_edges / n_basic_blocks); + cleanup_crossjump = 0; + } + if (optimize) { ! cleanup_cfg (CLEANUP_EXPENSIVE | cleanup_crossjump); life_analysis (insns, rtl_dump_file, PROP_FINAL); /* This is kind of a heuristic. We need to run combine_stack_adjustments *************** rest_of_compilation (decl) *** 3578,3589 **** } #endif ! if (optimize > 0 && flag_rename_registers) { timevar_push (TV_RENAME_REGISTERS); open_dump_file (DFI_rnreg, decl); ! regrename_optimize (); close_dump_file (DFI_rnreg, print_rtl_with_bb, insns); timevar_pop (TV_RENAME_REGISTERS); --- 3317,3331 ---- } #endif ! if (optimize > 0 && (flag_rename_registers || flag_cprop_registers)) { timevar_push (TV_RENAME_REGISTERS); open_dump_file (DFI_rnreg, decl); ! if (flag_rename_registers) ! regrename_optimize (); ! if (flag_cprop_registers) ! copyprop_hardreg_forward (); close_dump_file (DFI_rnreg, print_rtl_with_bb, insns); timevar_pop (TV_RENAME_REGISTERS); *************** rest_of_compilation (decl) *** 3599,3604 **** --- 3341,3350 ---- close_dump_file (DFI_ce2, print_rtl_with_bb, insns); timevar_pop (TV_IFCVT2); } + #ifdef STACK_REGS + if (optimize) + split_all_insns (1); + #endif #ifdef INSN_SCHEDULING if (optimize > 0 && flag_schedule_insns_after_reload) *************** rest_of_compilation (decl) *** 3609,3614 **** --- 3355,3362 ---- /* Do control and data sched analysis again, and write some more of the results to dump file. */ + split_all_insns (1); + schedule_insns (rtl_dump_file); close_dump_file (DFI_sched2, print_rtl_with_bb, insns); *************** rest_of_compilation (decl) *** 3623,3667 **** = optimize > 0 && only_leaf_regs_used () && leaf_function_p (); #endif ! if (optimize > 0 && flag_reorder_blocks) { timevar_push (TV_REORDER_BLOCKS); open_dump_file (DFI_bbro, decl); ! reorder_basic_blocks (); close_dump_file (DFI_bbro, print_rtl_with_bb, insns); timevar_pop (TV_REORDER_BLOCKS); } ! /* One more attempt to remove jumps to .+1 left by dead-store elimination. ! Also do cross-jumping this time and delete no-op move insns. */ ! ! if (optimize > 0) ! { ! timevar_push (TV_JUMP); ! open_dump_file (DFI_jump2, decl); ! ! jump_optimize (insns, JUMP_CROSS_JUMP, JUMP_NOOP_MOVES, ! !JUMP_AFTER_REGSCAN); ! ! /* CFG no longer kept up to date. */ ! ! close_dump_file (DFI_jump2, print_rtl, insns); ! timevar_pop (TV_JUMP); ! } /* If a machine dependent reorganization is needed, call it. */ #ifdef MACHINE_DEPENDENT_REORG open_dump_file (DFI_mach, decl); MACHINE_DEPENDENT_REORG (insns); close_dump_file (DFI_mach, print_rtl, insns); ggc_collect (); #endif /* If a scheduling pass for delayed branches is to be done, call the scheduling code. */ --- 3371,3428 ---- = optimize > 0 && only_leaf_regs_used () && leaf_function_p (); #endif ! #ifdef STACK_REGS ! timevar_push (TV_REG_STACK); ! open_dump_file (DFI_stack, decl); ! ! reg_to_stack (insns, rtl_dump_file); ! ! close_dump_file (DFI_stack, print_rtl_with_bb, insns); ! timevar_pop (TV_REG_STACK); ! ! ggc_collect (); ! #endif ! if (optimize > 0) { timevar_push (TV_REORDER_BLOCKS); open_dump_file (DFI_bbro, decl); ! /* Last attempt to optimize CFG, as life analysis possibly removed ! some instructions. Note that we can't rerun crossjump at this ! point, because it can turn a switch into a direct branch, which ! can leave the tablejump address calculation in the code, which ! can lead to referencing an undefined label. */ ! cleanup_cfg (CLEANUP_EXPENSIVE | CLEANUP_POST_REGSTACK); ! if (flag_reorder_blocks) ! { ! reorder_basic_blocks (); ! cleanup_cfg (CLEANUP_EXPENSIVE | CLEANUP_POST_REGSTACK); ! } close_dump_file (DFI_bbro, print_rtl_with_bb, insns); timevar_pop (TV_REORDER_BLOCKS); } + compute_alignments (); ! /* CFG is no longer maintained up-to-date. */ ! free_bb_for_insn (); /* If a machine dependent reorganization is needed, call it. */ #ifdef MACHINE_DEPENDENT_REORG + timevar_push (TV_MACH_DEP); open_dump_file (DFI_mach, decl); MACHINE_DEPENDENT_REORG (insns); close_dump_file (DFI_mach, print_rtl, insns); + timevar_pop (TV_MACH_DEP); ggc_collect (); #endif + purge_line_number_notes (insns); + cleanup_barriers (); + /* If a scheduling pass for delayed branches is to be done, call the scheduling code. */ *************** rest_of_compilation (decl) *** 3680,3713 **** } #endif ! #ifndef STACK_REGS ! /* ??? Do this before shorten branches so that we aren't creating ! insns too late and fail sanity checks in final. */ ! convert_to_eh_region_ranges (); #endif ! /* Shorten branches. ! Note this must run before reg-stack because of death note (ab)use ! in the ia32 backend. */ timevar_push (TV_SHORTEN_BRANCH); shorten_branches (get_insns ()); timevar_pop (TV_SHORTEN_BRANCH); - #ifdef STACK_REGS - timevar_push (TV_REG_STACK); - open_dump_file (DFI_stack, decl); - - reg_to_stack (insns, rtl_dump_file); - - close_dump_file (DFI_stack, print_rtl, insns); - timevar_pop (TV_REG_STACK); - - ggc_collect (); - - convert_to_eh_region_ranges (); - #endif - current_function_nothrow = nothrow_function_p (); if (current_function_nothrow) /* Now we know that this can't throw; set the flag for the benefit --- 3441,3459 ---- } #endif ! #if defined (HAVE_ATTR_length) && !defined (STACK_REGS) ! timevar_push (TV_SHORTEN_BRANCH); ! split_all_insns_noflow (); ! timevar_pop (TV_SHORTEN_BRANCH); #endif ! convert_to_eh_region_ranges (); ! /* Shorten branches. */ timevar_push (TV_SHORTEN_BRANCH); shorten_branches (get_insns ()); timevar_pop (TV_SHORTEN_BRANCH); current_function_nothrow = nothrow_function_p (); if (current_function_nothrow) /* Now we know that this can't throw; set the flag for the benefit *************** rest_of_compilation (decl) *** 3735,3741 **** assemble_start_function (decl, fnname); final_start_function (insns, asm_out_file, optimize); final (insns, asm_out_file, optimize, 0); ! final_end_function (insns, asm_out_file, optimize); #ifdef IA64_UNWIND_INFO /* ??? The IA-64 ".handlerdata" directive must be issued before --- 3481,3487 ---- assemble_start_function (decl, fnname); final_start_function (insns, asm_out_file, optimize); final (insns, asm_out_file, optimize, 0); ! final_end_function (); #ifdef IA64_UNWIND_INFO /* ??? The IA-64 ".handlerdata" directive must be issued before *************** rest_of_compilation (decl) *** 3774,3793 **** generated. During that call, we *will* be routed past here. */ timevar_push (TV_SYMOUT); ! #ifdef DBX_DEBUGGING_INFO ! if (write_symbols == DBX_DEBUG) ! dbxout_function (decl); ! #endif ! ! #ifdef DWARF_DEBUGGING_INFO ! if (write_symbols == DWARF_DEBUG) ! dwarfout_file_scope_decl (decl, 0); ! #endif ! ! #ifdef DWARF2_DEBUGGING_INFO ! if (write_symbols == DWARF2_DEBUG) ! dwarf2out_decl (decl); ! #endif timevar_pop (TV_SYMOUT); exit_rest_of_compilation: --- 3520,3526 ---- generated. During that call, we *will* be routed past here. */ timevar_push (TV_SYMOUT); ! (*debug_hooks->function_decl) (decl); timevar_pop (TV_SYMOUT); exit_rest_of_compilation: *************** rest_of_compilation (decl) *** 3818,3823 **** --- 3551,3557 ---- init_temp_slots (); free_basic_block_vars (0); + free_bb_for_insn (); timevar_pop (TV_FINAL); *************** rest_of_compilation (decl) *** 3835,3841 **** /* We're done with this function. Free up memory if we can. */ free_after_parsing (cfun); if (! DECL_DEFER_OUTPUT (decl)) ! free_after_compilation (cfun); cfun = 0; ggc_collect (); --- 3569,3581 ---- /* We're done with this function. Free up memory if we can. */ free_after_parsing (cfun); if (! DECL_DEFER_OUTPUT (decl)) ! { ! free_after_compilation (cfun); ! ! /* Clear integrate.c's pointer to the cfun structure we just ! destroyed. */ ! DECL_SAVED_INSNS (decl) = 0; ! } cfun = 0; ggc_collect (); *************** display_help () *** 3866,3873 **** f_options[i].string, _(description)); } ! printf (_(" -O[number] Set optimisation level to [number]\n")); ! printf (_(" -Os Optimise for space rather than speed\n")); for (i = LAST_PARAM; i--;) { const char *description = compiler_params[i].help; --- 3606,3613 ---- f_options[i].string, _(description)); } ! printf (_(" -O[number] Set optimization level to [number]\n")); ! printf (_(" -Os Optimize for space rather than speed\n")); for (i = LAST_PARAM; i--;) { const char *description = compiler_params[i].help; *************** display_help () *** 3894,3900 **** } printf (_(" -Wunused Enable unused warnings\n")); - printf (_(" -Wid-clash- Warn if 2 identifiers have the same first chars\n")); printf (_(" -Wlarger-than- Warn if an object is larger than bytes\n")); printf (_(" -p Enable function profiling\n")); #if defined (BLOCK_PROFILER) || defined (FUNCTION_BLOCK_PROFILER) --- 3634,3639 ---- *************** display_help () *** 3981,3987 **** static void display_target_options () { ! int undoc,i; if (ARRAY_SIZE (target_switches) > 1 #ifdef TARGET_OPTIONS --- 3720,3732 ---- static void display_target_options () { ! int undoc, i; ! static bool displayed = false; ! ! /* Avoid double printing for --help --target-help. */ ! if (displayed) ! return; ! displayed = true; if (ARRAY_SIZE (target_switches) > 1 #ifdef TARGET_OPTIONS *************** display_target_options () *** 4042,4048 **** } } ! /* Parse a -d... comand line switch. */ static void decode_d_option (arg) --- 3787,3793 ---- } } ! /* Parse a -d... command line switch. */ static void decode_d_option (arg) *************** decode_d_option (arg) *** 4060,4068 **** case 'A': flag_debug_asm = 1; break; - case 'm': - flag_print_mem = 1; - break; case 'p': flag_print_asm_name = 1; break; --- 3805,3810 ---- *************** decode_d_option (arg) *** 4077,4083 **** rtl_dump_and_exit = 1; break; case 'y': ! set_yydebug (1); break; case 'D': /* These are handled by the preprocessor. */ case 'I': --- 3819,3825 ---- rtl_dump_and_exit = 1; break; case 'y': ! (*lang_hooks.set_yydebug) (1); break; case 'D': /* These are handled by the preprocessor. */ case 'I': *************** decode_d_option (arg) *** 4098,4104 **** } } ! /* Parse a -f... comand line switch. ARG is the value after the -f. It is safe to access 'ARG - 2' to generate the full switch name. Return the number of strings consumed. */ --- 3840,3846 ---- } } ! /* Parse a -f... command line switch. ARG is the value after the -f. It is safe to access 'ARG - 2' to generate the full switch name. Return the number of strings consumed. */ *************** decode_f_option (arg) *** 4126,4137 **** } } ! if ((option_value = skip_leading_substring (arg, "inline-limit-")) ! || (option_value = skip_leading_substring (arg, "inline-limit="))) { int val = ! read_integral_parameter (option_value, arg - 2, ! MAX_INLINE_INSNS); set_param_value ("max-inline-insns", val); } #ifdef INSN_SCHEDULING --- 3868,3883 ---- } } ! if (!strcmp (arg, "fast-math")) ! set_fast_math_flags (); ! else if (!strcmp (arg, "no-fast-math")) ! set_no_fast_math_flags (); ! else if ((option_value = skip_leading_substring (arg, "inline-limit-")) ! || (option_value = skip_leading_substring (arg, "inline-limit="))) { int val = ! read_integral_parameter (option_value, arg - 2, ! MAX_INLINE_INSNS); set_param_value ("max-inline-insns", val); } #ifdef INSN_SCHEDULING *************** decode_f_option (arg) *** 4172,4189 **** } else if ((option_value = skip_leading_substring (arg, "message-length="))) ! diagnostic_message_length_per_line = ! read_integral_parameter (option_value, arg - 2, ! diagnostic_message_length_per_line); else if ((option_value = skip_leading_substring (arg, "diagnostics-show-location="))) { if (!strcmp (option_value, "once")) ! set_message_prefixing_rule (DIAGNOSTICS_SHOW_PREFIX_ONCE); else if (!strcmp (option_value, "every-line")) ! set_message_prefixing_rule (DIAGNOSTICS_SHOW_PREFIX_EVERY_LINE); else ! error ("Unrecognized option `%s'", arg - 2); } else if (!strcmp (arg, "no-stack-limit")) stack_limit_rtx = NULL_RTX; --- 3918,3936 ---- } else if ((option_value = skip_leading_substring (arg, "message-length="))) ! output_set_maximum_length ! (&global_dc->buffer, read_integral_parameter ! (option_value, arg - 2, diagnostic_line_cutoff (global_dc))); else if ((option_value = skip_leading_substring (arg, "diagnostics-show-location="))) { if (!strcmp (option_value, "once")) ! diagnostic_prefixing_rule (global_dc) = DIAGNOSTICS_SHOW_PREFIX_ONCE; else if (!strcmp (option_value, "every-line")) ! diagnostic_prefixing_rule (global_dc) ! = DIAGNOSTICS_SHOW_PREFIX_EVERY_LINE; else ! error ("unrecognized option `%s'", arg - 2); } else if (!strcmp (arg, "no-stack-limit")) stack_limit_rtx = NULL_RTX; *************** decode_f_option (arg) *** 4197,4203 **** return 1; } ! /* Parse a -W... comand line switch. ARG is the value after the -W. It is safe to access 'ARG - 2' to generate the full switch name. Return the number of strings consumed. */ --- 3944,3950 ---- return 1; } ! /* Parse a -W... command line switch. ARG is the value after the -W. It is safe to access 'ARG - 2' to generate the full switch name. Return the number of strings consumed. */ *************** decode_W_option (arg) *** 4227,4238 **** } if ((option_value = skip_leading_substring (arg, "id-clash-"))) ! { ! id_clash_len = read_integral_parameter (option_value, arg - 2, -1); ! ! if (id_clash_len != -1) ! warn_id_clash = 1; ! } else if ((option_value = skip_leading_substring (arg, "larger-than-"))) { larger_than_size = read_integral_parameter (option_value, arg - 2, -1); --- 3974,3980 ---- } if ((option_value = skip_leading_substring (arg, "id-clash-"))) ! warning ("-Wid-clash-LEN is no longer supported"); else if ((option_value = skip_leading_substring (arg, "larger-than-"))) { larger_than_size = read_integral_parameter (option_value, arg - 2, -1); *************** decode_W_option (arg) *** 4253,4259 **** return 1; } ! /* Parse a -g... comand line switch. ARG is the value after the -g. It is safe to access 'ARG - 2' to generate the full switch name. Return the number of strings consumed. */ --- 3995,4001 ---- return 1; } ! /* Parse a -g... command line switch. ARG is the value after the -g. It is safe to access 'ARG - 2' to generate the full switch name. Return the number of strings consumed. */ *************** static int *** 4261,4267 **** decode_g_option (arg) const char *arg; { ! unsigned level; /* A lot of code assumes write_symbols == NO_DEBUG if the debugging level is 0 (thus -gstabs1 -gstabs0 would lose track of what debugging type has been selected). This records the --- 4003,4009 ---- decode_g_option (arg) const char *arg; { ! static unsigned level=0; /* A lot of code assumes write_symbols == NO_DEBUG if the debugging level is 0 (thus -gstabs1 -gstabs0 would lose track of what debugging type has been selected). This records the *************** decode_g_option (arg) *** 4273,4281 **** -gdwarf -g3 is equivalent to -gdwarf3. */ static int type_explicitly_set_p = 0; /* Indexed by enum debug_info_type. */ ! static const char *debug_type_names[] = { ! "none", "stabs", "coff", "dwarf-1", "dwarf-2", "xcoff" }; /* The maximum admissible debug level value. */ --- 4015,4023 ---- -gdwarf -g3 is equivalent to -gdwarf3. */ static int type_explicitly_set_p = 0; /* Indexed by enum debug_info_type. */ ! static const char *const debug_type_names[] = { ! "none", "stabs", "coff", "dwarf-1", "dwarf-2", "xcoff", "vms" }; /* The maximum admissible debug level value. */ *************** decode_g_option (arg) *** 4291,4297 **** enum debug_info_type type = da->debug_type; const char *p = arg + da_len; ! if (*p && (*p < '0' || *p > '9')) continue; /* A debug flag without a level defaults to level 2. --- 4033,4039 ---- enum debug_info_type type = da->debug_type; const char *p = arg + da_len; ! if (*p && ! ISDIGIT (*p)) continue; /* A debug flag without a level defaults to level 2. *************** decode_g_option (arg) *** 4305,4311 **** if (*p) level = read_integral_parameter (p, 0, max_debug_level + 1); else ! level = 2; if (da_len > 1 && *p && !strncmp (arg, "dwarf", da_len)) { --- 4047,4053 ---- if (*p) level = read_integral_parameter (p, 0, max_debug_level + 1); else ! level = (level == 0) ? 2 : level; if (da_len > 1 && *p && !strncmp (arg, "dwarf", da_len)) { *************** ignoring option `%s' due to invalid debu *** 4329,4335 **** if (da_len > 1 && strncmp (arg, "gdb", da_len) == 0) { ! #if defined (DWARF2_DEBUGGING_INFO) && !defined (LINKER_DOES_NOT_WORK_WITH_DWARF2) type = DWARF2_DEBUG; #else #ifdef DBX_DEBUGGING_INFO --- 4071,4077 ---- if (da_len > 1 && strncmp (arg, "gdb", da_len) == 0) { ! #ifdef DWARF2_DEBUGGING_INFO type = DWARF2_DEBUG; #else #ifdef DBX_DEBUGGING_INFO *************** independent_decode_option (argc, argv) *** 4425,4454 **** char *equal; if (argc == 1) ! { ! error ("-param option missing argument"); ! return 1; ! } /* Get the '=' parameter. */ arg = argv[1]; /* Look for the `='. */ equal = strchr (arg, '='); if (!equal) ! error ("invalid --param option: %s", arg); else ! { ! int val; ! /* Zero out the `=' sign so that we get two separate strings. */ ! *equal = '\0'; ! /* Figure out what value is specified. */ ! val = read_integral_parameter (equal + 1, NULL, INVALID_PARAM_VAL); ! if (val != INVALID_PARAM_VAL) ! set_param_value (arg, val); ! else ! error ("invalid parameter value `%s'", equal + 1); ! } return 2; } --- 4167,4196 ---- char *equal; if (argc == 1) ! { ! error ("-param option missing argument"); ! return 1; ! } /* Get the '=' parameter. */ arg = argv[1]; /* Look for the `='. */ equal = strchr (arg, '='); if (!equal) ! error ("invalid --param option: %s", arg); else ! { ! int val; ! /* Zero out the `=' sign so that we get two separate strings. */ ! *equal = '\0'; ! /* Figure out what value is specified. */ ! val = read_integral_parameter (equal + 1, NULL, INVALID_PARAM_VAL); ! if (val != INVALID_PARAM_VAL) ! set_param_value (arg, val); ! else ! error ("invalid parameter value `%s'", equal + 1); ! } return 2; } *************** independent_decode_option (argc, argv) *** 4535,4558 **** break; case 'a': ! if (arg[1] == 0) ! { ! #if !defined (BLOCK_PROFILER) || !defined (FUNCTION_BLOCK_PROFILER) ! warning ("`-a' option (basic block profile) not supported"); ! #else ! profile_block_flag = (profile_block_flag < 2) ? 1 : 3; ! #endif ! } ! else if (!strcmp (arg, "ax")) ! { ! #if !defined (FUNCTION_BLOCK_PROFILER_EXIT) || !defined (BLOCK_PROFILER) || !defined (FUNCTION_BLOCK_PROFILER) ! warning ("`-ax' option (jump profiling) not supported"); ! #else ! profile_block_flag = (!profile_block_flag ! || profile_block_flag == 2) ? 2 : 3; ! #endif ! } ! else if (!strncmp (arg, "aux-info", 8)) { if (arg[8] == '\0') { --- 4277,4283 ---- break; case 'a': ! if (!strncmp (arg, "aux-info", 8)) { if (arg[8] == '\0') { *************** independent_decode_option (argc, argv) *** 4620,4662 **** return 1; } ! /* Entry point of cc1/c++. Decode command args, then call compile_file. ! Exit code is 35 if can't open files, 34 if fatal error, ! 33 if had nonfatal errors, else success. */ ! extern int main PARAMS ((int, char **)); ! int ! main (argc, argv) ! int argc; ! char **argv; { ! register int i; ! char *p; ! /* save in case md file wants to emit args as a comment. */ ! save_argc = argc; ! save_argv = argv; ! p = argv[0] + strlen (argv[0]); ! while (p != argv[0] && !IS_DIR_SEPARATOR (p[-1])) ! --p; ! progname = p; ! xmalloc_set_program_name (progname); ! /* LC_CTYPE determines the character set used by the terminal so it has be set ! to output messages correctly. */ ! #ifdef HAVE_LC_MESSAGES ! setlocale (LC_CTYPE, ""); ! setlocale (LC_MESSAGES, ""); ! #else ! setlocale (LC_ALL, ""); #endif ! (void) bindtextdomain (PACKAGE, localedir); ! (void) textdomain (PACKAGE); /* Install handler for SIGFPE, which may be received while we do compile-time floating point arithmetic. */ --- 4345,4591 ---- return 1; } ! /* Decode -m switches. */ ! /* Decode the switch -mNAME. */ ! static void ! set_target_switch (name) ! const char *name; ! { ! size_t j; ! int valid_target_option = 0; ! for (j = 0; j < ARRAY_SIZE (target_switches); j++) ! if (!strcmp (target_switches[j].name, name)) ! { ! if (target_switches[j].value < 0) ! target_flags &= ~-target_switches[j].value; ! else ! target_flags |= target_switches[j].value; ! valid_target_option = 1; ! } ! ! #ifdef TARGET_OPTIONS ! if (!valid_target_option) ! for (j = 0; j < ARRAY_SIZE (target_options); j++) ! { ! int len = strlen (target_options[j].prefix); ! if (!strncmp (target_options[j].prefix, name, len)) ! { ! *target_options[j].variable = name + len; ! valid_target_option = 1; ! } ! } ! #endif ! ! if (!valid_target_option) ! error ("invalid option `%s'", name); ! } ! ! /* Print version information to FILE. ! Each line begins with INDENT (for the case where FILE is the ! assembler output file). */ ! ! static void ! print_version (file, indent) ! FILE *file; ! const char *indent; { ! #ifndef __VERSION__ ! #define __VERSION__ "[?]" ! #endif ! fnotice (file, ! #ifdef __GNUC__ ! "%s%s%s version %s (%s)\n%s\tcompiled by GNU C version %s.\n" ! #else ! "%s%s%s version %s (%s) compiled by CC.\n" ! #endif ! , indent, *indent != 0 ? " " : "", ! lang_hooks.name, version_string, TARGET_NAME, ! indent, __VERSION__); ! } ! /* Print an option value and return the adjusted position in the line. ! ??? We don't handle error returns from fprintf (disk full); presumably ! other code will catch a disk full though. */ ! static int ! print_single_switch (file, pos, max, indent, sep, term, type, name) ! FILE *file; ! int pos, max; ! const char *indent, *sep, *term, *type, *name; ! { ! /* The ultrix fprintf returns 0 on success, so compute the result we want ! here since we need it for the following test. */ ! int len = strlen (sep) + strlen (type) + strlen (name); ! if (pos != 0 ! && pos + len > max) ! { ! fprintf (file, "%s", term); ! pos = 0; ! } ! if (pos == 0) ! { ! fprintf (file, "%s", indent); ! pos = strlen (indent); ! } ! fprintf (file, "%s%s%s", sep, type, name); ! pos += len; ! return pos; ! } ! /* Print active target switches to FILE. ! POS is the current cursor position and MAX is the size of a "line". ! Each line begins with INDENT and ends with TERM. ! Each switch is separated from the next by SEP. */ ! static void ! print_switch_values (file, pos, max, indent, sep, term) ! FILE *file; ! int pos, max; ! const char *indent, *sep, *term; ! { ! size_t j; ! char **p; ! ! /* Print the options as passed. */ ! ! pos = print_single_switch (file, pos, max, indent, *indent ? " " : "", term, ! _("options passed: "), ""); ! ! for (p = &save_argv[1]; *p != NULL; p++) ! if (**p == '-') ! { ! /* Ignore these. */ ! if (strcmp (*p, "-o") == 0) ! { ! if (p[1] != NULL) ! p++; ! continue; ! } ! if (strcmp (*p, "-quiet") == 0) ! continue; ! if (strcmp (*p, "-version") == 0) ! continue; ! if ((*p)[1] == 'd') ! continue; ! ! pos = print_single_switch (file, pos, max, indent, sep, term, *p, ""); ! } ! if (pos > 0) ! fprintf (file, "%s", term); ! ! /* Print the -f and -m options that have been enabled. ! We don't handle language specific options but printing argv ! should suffice. */ ! ! pos = print_single_switch (file, 0, max, indent, *indent ? " " : "", term, ! _("options enabled: "), ""); ! ! for (j = 0; j < ARRAY_SIZE (f_options); j++) ! if (*f_options[j].variable == f_options[j].on_value) ! pos = print_single_switch (file, pos, max, indent, sep, term, ! "-f", f_options[j].string); ! ! /* Print target specific options. */ ! ! for (j = 0; j < ARRAY_SIZE (target_switches); j++) ! if (target_switches[j].name[0] != '\0' ! && target_switches[j].value > 0 ! && ((target_switches[j].value & target_flags) ! == target_switches[j].value)) ! { ! pos = print_single_switch (file, pos, max, indent, sep, term, ! "-m", target_switches[j].name); ! } ! ! #ifdef TARGET_OPTIONS ! for (j = 0; j < ARRAY_SIZE (target_options); j++) ! if (*target_options[j].variable != NULL) ! { ! char prefix[256]; ! sprintf (prefix, "-m%s", target_options[j].prefix); ! pos = print_single_switch (file, pos, max, indent, sep, term, ! prefix, *target_options[j].variable); ! } #endif ! fprintf (file, "%s", term); ! } ! ! /* Open assembly code output file. Do this even if -fsyntax-only is ! on, because then the driver will have provided the name of a ! temporary file or bit bucket for us. NAME is the file specified on ! the command line, possibly NULL. */ ! static void ! init_asm_output (name) ! const char *name; ! { ! if (name == NULL && asm_file_name == 0) ! asm_out_file = stdout; ! else ! { ! if (asm_file_name == 0) ! { ! int len = strlen (dump_base_name); ! char *dumpname = (char *) xmalloc (len + 6); ! memcpy (dumpname, dump_base_name, len + 1); ! strip_off_ending (dumpname, len); ! strcat (dumpname, ".s"); ! asm_file_name = dumpname; ! } ! if (!strcmp (asm_file_name, "-")) ! asm_out_file = stdout; ! else ! asm_out_file = fopen (asm_file_name, "w"); ! if (asm_out_file == 0) ! fatal_io_error ("can't open %s for writing", asm_file_name); ! } ! ! #ifdef IO_BUFFER_SIZE ! setvbuf (asm_out_file, (char *) xmalloc (IO_BUFFER_SIZE), ! _IOFBF, IO_BUFFER_SIZE); ! #endif ! ! if (!flag_syntax_only) ! { ! #ifdef ASM_FILE_START ! ASM_FILE_START (asm_out_file); ! #endif ! ! #ifdef ASM_COMMENT_START ! if (flag_verbose_asm) ! { ! /* Print the list of options in effect. */ ! print_version (asm_out_file, ASM_COMMENT_START); ! print_switch_values (asm_out_file, 0, MAX_LINE, ! ASM_COMMENT_START, " ", "\n"); ! /* Add a blank line here so it appears in assembler output but not ! screen output. */ ! fprintf (asm_out_file, "\n"); ! } ! #endif ! } ! } ! ! /* Initialization of the front end environment, before command line ! options are parsed. Signal handlers, internationalization etc. ! ARGV0 is main's argv[0]. */ ! static void ! general_init (argv0) ! char *argv0; ! { ! char *p; ! ! p = argv0 + strlen (argv0); ! while (p != argv0 && !IS_DIR_SEPARATOR (p[-1])) ! --p; ! progname = p; ! ! xmalloc_set_program_name (progname); ! ! gcc_init_libintl (); /* Install handler for SIGFPE, which may be received while we do compile-time floating point arithmetic. */ *************** main (argc, argv) *** 4679,4710 **** signal (SIGIOT, crash_signal); #endif ! decl_printable_name = decl_name; ! lang_expand_expr = (lang_expand_expr_t) do_abort; ! ! /* Initialize whether `char' is signed. */ ! flag_signed_char = DEFAULT_SIGNED_CHAR; ! #ifdef DEFAULT_SHORT_ENUMS ! /* Initialize how much space enums occupy, by default. */ ! flag_short_enums = DEFAULT_SHORT_ENUMS; ! #endif ! /* Initialize the garbage-collector. */ ! init_ggc (); ! init_stringpool (); ! ggc_add_rtx_root (&stack_limit_rtx, 1); ! ggc_add_tree_root (¤t_function_decl, 1); ! ggc_add_tree_root (¤t_function_func_begin_label, 1); ! /* Initialize the diagnostics reporting machinery. */ ! initialize_diagnostics (); /* Register the language-independent parameters. */ add_params (lang_independent_params, LAST_PARAM); ! /* Perform language-specific options intialization. */ ! if (lang_hooks.init_options) ! (*lang_hooks.init_options) (); /* Scan to see what optimization level has been specified. That will determine the default value of many flags. */ --- 4608,4641 ---- signal (SIGIOT, crash_signal); #endif ! /* Initialize the diagnostics reporting machinery, so option parsing ! can give warnings and errors. */ ! diagnostic_initialize (global_dc); ! } ! ! /* Parse command line options and set default flag values, called ! after language-independent option-independent initialization. Do ! minimal options processing. Outputting diagnostics is OK, but GC ! and identifier hashtables etc. are not initialized yet. */ ! static void ! parse_options_and_default_flags (argc, argv) ! int argc; ! char **argv; ! { ! int i; ! /* Save in case md file wants to emit args as a comment. */ ! save_argc = argc; ! save_argv = argv; ! /* Initialize register usage now so switches may override. */ ! init_reg_sets (); /* Register the language-independent parameters. */ add_params (lang_independent_params, LAST_PARAM); ! /* Perform language-specific options initialization. */ ! (*lang_hooks.init_options) (); /* Scan to see what optimization level has been specified. That will determine the default value of many flags. */ *************** main (argc, argv) *** 4739,4744 **** --- 4670,4680 ---- } } + if (!optimize) + { + flag_merge_constants = 0; + } + if (optimize >= 1) { flag_defer_pop = 1; *************** main (argc, argv) *** 4750,4755 **** --- 4686,4692 ---- flag_omit_frame_pointer = 1; #endif flag_guess_branch_prob = 1; + flag_cprop_registers = 1; } if (optimize >= 2) *************** main (argc, argv) *** 4789,4794 **** --- 4726,4738 ---- align_functions = 1; } + /* Initialize whether `char' is signed. */ + flag_signed_char = DEFAULT_SIGNED_CHAR; + #ifdef DEFAULT_SHORT_ENUMS + /* Initialize how much space enums occupy, by default. */ + flag_short_enums = DEFAULT_SHORT_ENUMS; + #endif + /* Initialize target_flags before OPTIMIZATION_OPTIONS so the latter can modify it. */ target_flags = 0; *************** main (argc, argv) *** 4805,4813 **** OPTIMIZATION_OPTIONS (optimize, optimize_size); #endif - /* Initialize register usage now so switches may override. */ - init_reg_sets (); - /* Perform normal command line switch decoding. */ for (i = 1; i < argc;) { --- 4749,4754 ---- *************** main (argc, argv) *** 4857,4892 **** { if (extra_warnings) { ! warning ("Ignoring command line option '%s'", argv[i]); if (lang) warning ! ("(It is valid for %s but not the selected language)", lang); } } else if (argv[i][0] == '-' && argv[i][1] == 'g') warning ("`%s': unknown or unsupported -g option", &argv[i][2]); else ! error ("Unrecognized option `%s'", argv[i]); i++; } } ! /* All command line options have been processed. */ ! if (lang_hooks.post_options) ! (*lang_hooks.post_options) (); ! ! if (exit_after_options) ! exit (0); ! ! /* Reflect any language-specific diagnostic option setting. */ ! reshape_diagnostic_buffer (); ! ! /* Checker uses the frame pointer. */ ! if (flag_check_memory_usage) ! flag_omit_frame_pointer = 0; if (optimize == 0) { /* Inlining does not work if not optimizing, --- 4798,4829 ---- { if (extra_warnings) { ! warning ("ignoring command line option '%s'", argv[i]); if (lang) warning ! ("(it is valid for %s but not the selected language)", lang); } } else if (argv[i][0] == '-' && argv[i][1] == 'g') warning ("`%s': unknown or unsupported -g option", &argv[i][2]); else ! error ("unrecognized option `%s'", argv[i]); i++; } } ! if (flag_no_inline == 2) ! flag_no_inline = 0; ! else ! flag_really_no_inline = flag_no_inline; + /* Set flag_no_inline before the post_options () hook. The C front + ends use it to determine tree inlining defaults. FIXME: such + code should be lang-independent when all front ends use tree + inlining, in which case it, and this condition, should be moved + to the top of process_options() instead. */ if (optimize == 0) { /* Inlining does not work if not optimizing, *************** main (argc, argv) *** 4901,4912 **** warning ("-Wuninitialized is not supported without -O"); } ! /* We do not currently support sibling-call optimization in the ! presence of exceptions. See PR2975 for a test-case that will ! fail if we try to combine both of these features. */ ! if (flag_exceptions) ! flag_optimize_sibling_calls = 0; #ifdef OVERRIDE_OPTIONS /* Some machines may reject certain combinations of options. */ OVERRIDE_OPTIONS; --- 4838,4855 ---- warning ("-Wuninitialized is not supported without -O"); } ! if (flag_really_no_inline == 2) ! flag_really_no_inline = flag_no_inline; + /* All command line options have been parsed; allow the front end to + perform consistency checks, etc. */ + (*lang_hooks.post_options) (); + } + + /* Process the options that have been parsed. */ + static void + process_options () + { #ifdef OVERRIDE_OPTIONS /* Some machines may reject certain combinations of options. */ OVERRIDE_OPTIONS; *************** main (argc, argv) *** 4915,4934 **** /* Set up the align_*_log variables, defaulting them to 1 if they were still unset. */ if (align_loops <= 0) align_loops = 1; align_loops_log = floor_log2 (align_loops * 2 - 1); if (align_jumps <= 0) align_jumps = 1; align_jumps_log = floor_log2 (align_jumps * 2 - 1); if (align_labels <= 0) align_labels = 1; align_labels_log = floor_log2 (align_labels * 2 - 1); if (align_functions <= 0) align_functions = 1; align_functions_log = floor_log2 (align_functions * 2 - 1); - if (profile_block_flag == 3) - { - warning ("`-ax' and `-a' are conflicting options. `-a' ignored."); - profile_block_flag = 2; - } - /* Unrolling all loops implies that standard loop unrolling must also be done. */ if (flag_unroll_all_loops) --- 4858,4877 ---- /* Set up the align_*_log variables, defaulting them to 1 if they were still unset. */ if (align_loops <= 0) align_loops = 1; + if (align_loops_max_skip > align_loops || !align_loops) + align_loops_max_skip = align_loops - 1; align_loops_log = floor_log2 (align_loops * 2 - 1); if (align_jumps <= 0) align_jumps = 1; + if (align_jumps_max_skip > align_jumps || !align_jumps) + align_jumps_max_skip = align_jumps - 1; align_jumps_log = floor_log2 (align_jumps * 2 - 1); if (align_labels <= 0) align_labels = 1; align_labels_log = floor_log2 (align_labels * 2 - 1); + if (align_labels_max_skip > align_labels || !align_labels) + align_labels_max_skip = align_labels - 1; if (align_functions <= 0) align_functions = 1; align_functions_log = floor_log2 (align_functions * 2 - 1); /* Unrolling all loops implies that standard loop unrolling must also be done. */ if (flag_unroll_all_loops) *************** main (argc, argv) *** 4943,4948 **** --- 4886,4896 ---- flag_rerun_cse_after_loop = 1; } + if (flag_non_call_exceptions) + flag_asynchronous_unwind_tables = 1; + if (flag_asynchronous_unwind_tables) + flag_unwind_tables = 1; + /* Warn about options that are not supported on this machine. */ #ifndef INSN_SCHEDULING if (flag_schedule_insns || flag_schedule_insns_after_reload) *************** main (argc, argv) *** 4987,5297 **** print_switch_values (stderr, 0, MAX_LINE, "", " ", "\n"); } ! compile_file (filename); ! #if !defined(OS2) && !defined(VMS) && (!defined(_WIN32) || defined (__CYGWIN__)) && !defined(__INTERIX) ! if (flag_print_mem) { ! char *lim = (char *) sbrk (0); ! fnotice (stderr, "Data size %ld.\n", (long) (lim - (char *) &environ)); ! fflush (stderr); ! #ifndef __MSDOS__ ! #ifdef USG ! system ("ps -l 1>&2"); ! #else /* not USG */ ! system ("ps v"); ! #endif /* not USG */ #endif } - #endif /* ! OS2 && ! VMS && (! _WIN32 || CYGWIN) && ! __INTERIX */ ! if (errorcount) ! return (FATAL_EXIT_CODE); ! if (sorrycount) ! return (FATAL_EXIT_CODE); ! return (SUCCESS_EXIT_CODE); } ! /* Decode -m switches. */ ! /* Decode the switch -mNAME. */ ! static void ! set_target_switch (name) ! const char *name; { ! register size_t j; ! int valid_target_option = 0; ! for (j = 0; j < ARRAY_SIZE (target_switches); j++) ! if (!strcmp (target_switches[j].name, name)) ! { ! if (target_switches[j].value < 0) ! target_flags &= ~-target_switches[j].value; ! else ! target_flags |= target_switches[j].value; ! valid_target_option = 1; ! } ! #ifdef TARGET_OPTIONS ! if (!valid_target_option) ! for (j = 0; j < ARRAY_SIZE (target_options); j++) ! { ! int len = strlen (target_options[j].prefix); ! if (!strncmp (target_options[j].prefix, name, len)) ! { ! *target_options[j].variable = name + len; ! valid_target_option = 1; ! } ! } ! #endif ! if (!valid_target_option) ! error ("Invalid option `%s'", name); ! } ! ! /* Print version information to FILE. ! Each line begins with INDENT (for the case where FILE is the ! assembler output file). */ ! static void ! print_version (file, indent) ! FILE *file; ! const char *indent; ! { ! #ifndef __VERSION__ ! #define __VERSION__ "[?]" ! #endif ! fnotice (file, ! #ifdef __GNUC__ ! "%s%s%s version %s (%s)\n%s\tcompiled by GNU C version %s.\n" ! #else ! "%s%s%s version %s (%s) compiled by CC.\n" #endif ! , indent, *indent != 0 ? " " : "", ! language_string, version_string, TARGET_NAME, ! indent, __VERSION__); ! } ! ! /* Print an option value and return the adjusted position in the line. ! ??? We don't handle error returns from fprintf (disk full); presumably ! other code will catch a disk full though. */ static int ! print_single_switch (file, pos, max, indent, sep, term, type, name) ! FILE *file; ! int pos, max; ! const char *indent, *sep, *term, *type, *name; { ! /* The ultrix fprintf returns 0 on success, so compute the result we want ! here since we need it for the following test. */ ! int len = strlen (sep) + strlen (type) + strlen (name); ! if (pos != 0 ! && pos + len > max) ! { ! fprintf (file, "%s", term); ! pos = 0; ! } ! if (pos == 0) ! { ! fprintf (file, "%s", indent); ! pos = strlen (indent); ! } ! fprintf (file, "%s%s%s", sep, type, name); ! pos += len; ! return pos; ! } ! /* Print active target switches to FILE. ! POS is the current cursor position and MAX is the size of a "line". ! Each line begins with INDENT and ends with TERM. ! Each switch is separated from the next by SEP. */ ! static void ! print_switch_values (file, pos, max, indent, sep, term) ! FILE *file; ! int pos, max; ! const char *indent, *sep, *term; ! { ! size_t j; ! char **p; ! /* Print the options as passed. */ ! pos = print_single_switch (file, pos, max, indent, *indent ? " " : "", term, ! _("options passed: "), ""); ! for (p = &save_argv[1]; *p != NULL; p++) ! if (**p == '-') ! { ! /* Ignore these. */ ! if (strcmp (*p, "-o") == 0) ! { ! if (p[1] != NULL) ! p++; ! continue; ! } ! if (strcmp (*p, "-quiet") == 0) ! continue; ! if (strcmp (*p, "-version") == 0) ! continue; ! if ((*p)[1] == 'd') ! continue; ! pos = print_single_switch (file, pos, max, indent, sep, term, *p, ""); ! } ! if (pos > 0) ! fprintf (file, "%s", term); ! /* Print the -f and -m options that have been enabled. ! We don't handle language specific options but printing argv ! should suffice. */ ! pos = print_single_switch (file, 0, max, indent, *indent ? " " : "", term, ! _("options enabled: "), ""); ! for (j = 0; j < ARRAY_SIZE (f_options); j++) ! if (*f_options[j].variable == f_options[j].on_value) ! pos = print_single_switch (file, pos, max, indent, sep, term, ! "-f", f_options[j].string); ! /* Print target specific options. */ ! for (j = 0; j < ARRAY_SIZE (target_switches); j++) ! if (target_switches[j].name[0] != '\0' ! && target_switches[j].value > 0 ! && ((target_switches[j].value & target_flags) ! == target_switches[j].value)) ! { ! pos = print_single_switch (file, pos, max, indent, sep, term, ! "-m", target_switches[j].name); ! } ! #ifdef TARGET_OPTIONS ! for (j = 0; j < ARRAY_SIZE (target_options); j++) ! if (*target_options[j].variable != NULL) ! { ! char prefix[256]; ! sprintf (prefix, "-m%s", target_options[j].prefix); ! pos = print_single_switch (file, pos, max, indent, sep, term, ! prefix, *target_options[j].variable); ! } ! #endif ! fprintf (file, "%s", term); ! } ! /* Record the beginning of a new source file, named FILENAME. */ ! void ! debug_start_source_file (filename) ! register const char *filename ATTRIBUTE_UNUSED; ! { ! #ifdef DBX_DEBUGGING_INFO ! if (write_symbols == DBX_DEBUG) ! dbxout_start_new_source_file (filename); ! #endif ! #ifdef DWARF_DEBUGGING_INFO ! if (debug_info_level == DINFO_LEVEL_VERBOSE ! && write_symbols == DWARF_DEBUG) ! dwarfout_start_new_source_file (filename); ! #endif /* DWARF_DEBUGGING_INFO */ ! #ifdef DWARF2_DEBUGGING_INFO ! if (write_symbols == DWARF2_DEBUG) ! dwarf2out_start_source_file (filename); ! #endif /* DWARF2_DEBUGGING_INFO */ ! #ifdef SDB_DEBUGGING_INFO ! if (write_symbols == SDB_DEBUG) ! sdbout_start_new_source_file (filename); ! #endif ! } ! /* Record the resumption of a source file. LINENO is the line number in ! the source file we are returning to. */ ! void ! debug_end_source_file (lineno) ! register unsigned lineno ATTRIBUTE_UNUSED; ! { ! #ifdef DBX_DEBUGGING_INFO ! if (write_symbols == DBX_DEBUG) ! dbxout_resume_previous_source_file (); ! #endif ! #ifdef DWARF_DEBUGGING_INFO ! if (debug_info_level == DINFO_LEVEL_VERBOSE ! && write_symbols == DWARF_DEBUG) ! dwarfout_resume_previous_source_file (lineno); ! #endif /* DWARF_DEBUGGING_INFO */ ! #ifdef DWARF2_DEBUGGING_INFO ! if (write_symbols == DWARF2_DEBUG) ! dwarf2out_end_source_file (); ! #endif /* DWARF2_DEBUGGING_INFO */ ! #ifdef SDB_DEBUGGING_INFO ! if (write_symbols == SDB_DEBUG) ! sdbout_resume_previous_source_file (); ! #endif } ! /* Called from cb_define in c-lex.c. The `buffer' parameter contains ! the tail part of the directive line, i.e. the part which is past the ! initial whitespace, #, whitespace, directive-name, whitespace part. */ ! void ! debug_define (lineno, buffer) ! register unsigned lineno ATTRIBUTE_UNUSED; ! register const char *buffer ATTRIBUTE_UNUSED; ! { ! #ifdef DWARF_DEBUGGING_INFO ! if (write_symbols == DWARF_DEBUG) ! dwarfout_define (lineno, buffer); ! #endif /* DWARF_DEBUGGING_INFO */ ! #ifdef DWARF2_DEBUGGING_INFO ! if (write_symbols == DWARF2_DEBUG) ! dwarf2out_define (lineno, buffer); ! #endif /* DWARF2_DEBUGGING_INFO */ ! } ! /* Called from cb_undef in c-lex.c. The `buffer' parameter contains ! the tail part of the directive line, i.e. the part which is past the ! initial whitespace, #, whitespace, directive-name, whitespace part. */ ! void ! debug_undef (lineno, buffer) ! register unsigned lineno ATTRIBUTE_UNUSED; ! register const char *buffer ATTRIBUTE_UNUSED; ! { ! #ifdef DWARF_DEBUGGING_INFO ! if (write_symbols == DWARF_DEBUG) ! dwarfout_undef (lineno, buffer); ! #endif /* DWARF_DEBUGGING_INFO */ ! #ifdef DWARF2_DEBUGGING_INFO ! if (write_symbols == DWARF2_DEBUG) ! dwarf2out_undef (lineno, buffer); ! #endif /* DWARF2_DEBUGGING_INFO */ } ! /* Returns nonzero if it is appropriate not to emit any debugging ! information for BLOCK, because it doesn't contain any instructions. ! This may not be the case for blocks containing nested functions, since ! we may actually call such a function even though the BLOCK information ! is messed up. */ int ! debug_ignore_block (block) ! tree block ATTRIBUTE_UNUSED; { ! /* Never delete the BLOCK for the outermost scope ! of the function; we can refer to names from ! that scope even if the block notes are messed up. */ ! if (is_body_block (block)) ! return 0; ! #ifdef DWARF2_DEBUGGING_INFO ! if (write_symbols == DWARF2_DEBUG) ! return dwarf2out_ignore_block (block); ! #endif ! return 1; } --- 4935,5242 ---- print_switch_values (stderr, 0, MAX_LINE, "", " ", "\n"); } ! if (! quiet_flag) ! time_report = 1; ! if (flag_syntax_only) { ! write_symbols = NO_DEBUG; ! profile_flag = 0; ! } ! /* Now we know write_symbols, set up the debug hooks based on it. ! By default we do nothing for debug output. */ ! #if defined(DBX_DEBUGGING_INFO) ! if (write_symbols == DBX_DEBUG) ! debug_hooks = &dbx_debug_hooks; ! #endif ! #if defined(XCOFF_DEBUGGING_INFO) ! if (write_symbols == XCOFF_DEBUG) ! debug_hooks = &xcoff_debug_hooks; ! #endif ! #ifdef SDB_DEBUGGING_INFO ! if (write_symbols == SDB_DEBUG) ! debug_hooks = &sdb_debug_hooks; ! #endif ! #ifdef DWARF_DEBUGGING_INFO ! if (write_symbols == DWARF_DEBUG) ! debug_hooks = &dwarf_debug_hooks; ! #endif ! #ifdef DWARF2_DEBUGGING_INFO ! if (write_symbols == DWARF2_DEBUG) ! debug_hooks = &dwarf2_debug_hooks; ! #endif ! #ifdef VMS_DEBUGGING_INFO ! if (write_symbols == VMS_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG) ! debug_hooks = &vmsdbg_debug_hooks; ! #endif ! /* If auxiliary info generation is desired, open the output file. ! This goes in the same directory as the source file--unlike ! all the other output files. */ ! if (flag_gen_aux_info) ! { ! aux_info_file = fopen (aux_info_file_name, "w"); ! if (aux_info_file == 0) ! fatal_io_error ("can't open %s", aux_info_file_name); ! } ! ! if (! targetm.have_named_sections) ! { ! if (flag_function_sections) ! { ! warning ("-ffunction-sections not supported for this target"); ! flag_function_sections = 0; ! } ! if (flag_data_sections) ! { ! warning ("-fdata-sections not supported for this target"); ! flag_data_sections = 0; ! } ! } ! ! if (flag_function_sections && profile_flag) ! { ! warning ("-ffunction-sections disabled; it makes profiling impossible"); ! flag_function_sections = 0; ! } ! ! #ifndef HAVE_prefetch ! if (flag_prefetch_loop_arrays) ! { ! warning ("-fprefetch-loop-arrays not supported for this target"); ! flag_prefetch_loop_arrays = 0; ! } ! #else ! if (flag_prefetch_loop_arrays && !HAVE_prefetch) ! { ! warning ("-fprefetch-loop-arrays not supported for this target (try -march switches)"); ! flag_prefetch_loop_arrays = 0; ! } #endif + + /* This combination of options isn't handled for i386 targets and doesn't + make much sense anyway, so don't allow it. */ + if (flag_prefetch_loop_arrays && optimize_size) + { + warning ("-fprefetch-loop-arrays is not supported with -Os"); + flag_prefetch_loop_arrays = 0; } ! #ifndef OBJECT_FORMAT_ELF ! if (flag_function_sections && write_symbols != NO_DEBUG) ! warning ("-ffunction-sections may affect debugging on some targets"); ! #endif } ! /* Language-independent initialization, before language-dependent ! initialization. */ static void ! lang_independent_init () { ! decl_printable_name = decl_name; ! lang_expand_expr = (lang_expand_expr_t) do_abort; ! /* Set the language-dependent identifier size. */ ! tree_code_length[(int) IDENTIFIER_NODE] ! = ((lang_hooks.identifier_size - sizeof (struct tree_common) ! + sizeof (tree) - 1) / sizeof (tree)); ! /* Initialize the garbage-collector, and string pools. */ ! init_ggc (); ! ggc_add_rtx_root (&stack_limit_rtx, 1); ! ggc_add_tree_root (¤t_function_decl, 1); ! ggc_add_tree_root (¤t_function_func_begin_label, 1); ! init_stringpool (); ! init_obstacks (); ! init_emit_once (debug_info_level == DINFO_LEVEL_NORMAL ! || debug_info_level == DINFO_LEVEL_VERBOSE ! #ifdef VMS_DEBUGGING_INFO ! /* Enable line number info for traceback */ ! || debug_info_level > DINFO_LEVEL_NONE #endif ! || flag_test_coverage ! || warn_notreached); ! init_regs (); ! init_alias_once (); ! init_stmt (); ! init_loop (); ! init_reload (); ! init_function_once (); ! init_stor_layout_once (); ! init_varasm_once (); ! init_EXPR_INSN_LIST_cache (); + /* The following initialization functions need to generate rtl, so + provide a dummy function context for them. */ + init_dummy_function_start (); + init_expmed (); + init_expr_once (); + if (flag_caller_saves) + init_caller_save (); + expand_dummy_function_end (); + } + + /* Language-dependent initialization. Returns non-zero on success. */ static int ! lang_dependent_init (name) ! const char *name; { ! if (dump_base_name == 0) ! dump_base_name = name ? name : "gccdump"; ! /* Front-end initialization. This hook can assume that GC, ! identifier hashes etc. are set up, but debug initialization is ! not done yet. This routine must return the original filename ! (e.g. foo.i -> foo.c) so can correctly initialize debug output. */ ! name = (*lang_hooks.init) (name); ! if (name == NULL) ! return 0; ! /* Is this duplication necessary? */ ! name = ggc_strdup (name); ! main_input_filename = input_filename = name; ! init_asm_output (name); ! /* These create various _DECL nodes, so need to be called after the ! front end is initialized. */ ! init_eh (); ! init_optabs (); ! /* Put an entry on the input file stack for the main input file. */ ! push_srcloc (input_filename, 0); ! /* If dbx symbol table desired, initialize writing it and output the ! predefined types. */ ! timevar_push (TV_SYMOUT); ! #ifdef DWARF2_UNWIND_INFO ! if (dwarf2out_do_frame ()) ! dwarf2out_frame_init (); ! #endif ! /* Now we have the correct original filename, we can initialize ! debug output. */ ! (*debug_hooks->init) (name); ! timevar_pop (TV_SYMOUT); ! return 1; ! } ! ! /* Clean up: close opened files, etc. */ ! static void ! finalize () ! { ! /* Close the dump files. */ ! if (flag_gen_aux_info) ! { ! fclose (aux_info_file); ! if (errorcount) ! unlink (aux_info_file_name); ! } ! /* Close non-debugging input and output files. Take special care to note ! whether fclose returns an error, since the pages might still be on the ! buffer chain while the file is open. */ ! if (asm_out_file) ! { ! if (ferror (asm_out_file) != 0) ! fatal_io_error ("error writing to %s", asm_file_name); ! if (fclose (asm_out_file) != 0) ! fatal_io_error ("error closing %s", asm_file_name); ! } ! /* Do whatever is necessary to finish printing the graphs. */ ! if (graph_dump_format != no_graph) ! { ! int i; ! for (i = 0; i < (int) DFI_MAX; ++i) ! if (dump_file[i].initialized && dump_file[i].graph_dump_p) ! { ! char seq[16]; ! char *suffix; ! sprintf (seq, DUMPFILE_FORMAT, i); ! suffix = concat (seq, dump_file[i].extension, NULL); ! finish_graph_dump_file (dump_base_name, suffix); ! free (suffix); ! } ! } ! if (mem_report) ! { ! ggc_print_statistics (); ! stringpool_statistics (); ! dump_tree_statistics (); ! } ! /* Free up memory for the benefit of leak detectors. */ ! free_reg_info (); ! /* Language-specific end of compilation actions. */ ! (*lang_hooks.finish) (); } + + /* Initialize the compiler, and compile the input file. */ + static void + do_compile () + { + /* The bulk of command line switch processing. */ + process_options (); ! /* We cannot start timing until after options are processed since that ! says if we run timers or not. */ ! init_timevar (); ! timevar_start (TV_TOTAL); ! /* Language-independent initialization. Also sets up GC, identifier ! hashes etc. */ ! lang_independent_init (); ! /* Language-dependent initialization. Returns true on success. */ ! if (lang_dependent_init (filename)) ! compile_file (); ! finalize (); ! ! /* Stop timing and print the times. */ ! timevar_stop (TV_TOTAL); ! timevar_print (stderr); } + + /* Entry point of cc1, cc1plus, jc1, f771, etc. + Decode command args, then call compile_file. + Exit code is FATAL_EXIT_CODE if can't open files or if there were + any errors, or SUCCESS_EXIT_CODE if compilation succeeded. ! It is not safe to call this function more than once. */ int ! toplev_main (argc, argv) ! int argc; ! char **argv; { ! hex_init (); ! /* Initialization of GCC's environment, and diagnostics. */ ! general_init (argv [0]); ! /* Parse the options and do minimal processing; basically just ! enough to default flags appropriately. */ ! parse_options_and_default_flags (argc, argv); ! ! /* Exit early if we can (e.g. -help). */ ! if (!exit_after_options) ! do_compile (); ! ! if (errorcount || sorrycount) ! return (FATAL_EXIT_CODE); ! ! return (SUCCESS_EXIT_CODE); } diff -Nrc3pad gcc-3.0.4/gcc/toplev.h gcc-3.1/gcc/toplev.h *** gcc-3.0.4/gcc/toplev.h Tue Jun 5 07:46:59 2001 --- gcc-3.1/gcc/toplev.h Thu Jan 10 18:51:15 2002 *************** *** 1,53 **** /* toplev.h - Various declarations for functions found in toplev.c Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ ! ! #ifndef __GCC_TOPLEV_H__ ! #define __GCC_TOPLEV_H__ ! #ifdef ANSI_PROTOTYPES ! union tree_node; ! struct rtx_def; ! #endif /* If non-NULL, return one past-the-end of the matching SUBPART of the WHOLE string. */ #define skip_leading_substring(whole, part) \ (strncmp (whole, part, strlen (part)) ? NULL : whole + strlen (part)) extern int read_integral_parameter PARAMS ((const char *, const char *, const int)); extern int count_error PARAMS ((int)); extern void strip_off_ending PARAMS ((char *, int)); - extern char *file_name_nondirectory PARAMS ((const char *)); extern void print_time PARAMS ((const char *, long)); - extern void debug_start_source_file PARAMS ((const char *)); - extern void debug_end_source_file PARAMS ((unsigned)); - extern void debug_define PARAMS ((unsigned, const char *)); - extern void debug_undef PARAMS ((unsigned, const char *)); - extern int debug_ignore_block PARAMS ((union tree_node *)); extern const char *trim_filename PARAMS ((const char *)); extern void internal_error PARAMS ((const char *, ...)) - ATTRIBUTE_PRINTF_1 ATTRIBUTE_NORETURN; extern void fatal_io_error PARAMS ((const char *, ...)) - ATTRIBUTE_PRINTF_1 ATTRIBUTE_NORETURN; extern void _fatal_insn_not_found PARAMS ((struct rtx_def *, const char *, int, --- 1,41 ---- /* toplev.h - Various declarations for functions found in toplev.c Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ ! #ifndef GCC_TOPLEV_H ! #define GCC_TOPLEV_H /* If non-NULL, return one past-the-end of the matching SUBPART of the WHOLE string. */ #define skip_leading_substring(whole, part) \ (strncmp (whole, part, strlen (part)) ? NULL : whole + strlen (part)) + extern int toplev_main PARAMS ((int, char **)); extern int read_integral_parameter PARAMS ((const char *, const char *, const int)); extern int count_error PARAMS ((int)); extern void strip_off_ending PARAMS ((char *, int)); extern void print_time PARAMS ((const char *, long)); extern const char *trim_filename PARAMS ((const char *)); extern void internal_error PARAMS ((const char *, ...)) ATTRIBUTE_NORETURN; extern void fatal_io_error PARAMS ((const char *, ...)) ATTRIBUTE_NORETURN; extern void _fatal_insn_not_found PARAMS ((struct rtx_def *, const char *, int, *************** extern void _fatal_insn PARAMS ((const *** 64,89 **** #define fatal_insn_not_found(insn) \ _fatal_insn_not_found (insn, __FILE__, __LINE__, __FUNCTION__) ! extern void warning PARAMS ((const char *, ...)) ! ATTRIBUTE_PRINTF_1; ! extern void error PARAMS ((const char *, ...)) ! ATTRIBUTE_PRINTF_1; extern void fatal_error PARAMS ((const char *, ...)) ! ATTRIBUTE_PRINTF_1; ! extern void pedwarn PARAMS ((const char *, ...)) ! ATTRIBUTE_PRINTF_1; extern void pedwarn_with_file_and_line PARAMS ((const char *, int, ! const char *, ...)) ! ATTRIBUTE_PRINTF_3; extern void warning_with_file_and_line PARAMS ((const char *, int, ! const char *, ...)) ! ATTRIBUTE_PRINTF_3; extern void error_with_file_and_line PARAMS ((const char *, int, ! const char *, ...)) ! ATTRIBUTE_PRINTF_3; ! extern void sorry PARAMS ((const char *, ...)) ! ATTRIBUTE_PRINTF_1; ! extern void default_print_error_function PARAMS ((const char *)); extern void report_error_function PARAMS ((const char *)); extern void rest_of_decl_compilation PARAMS ((union tree_node *, --- 52,72 ---- #define fatal_insn_not_found(insn) \ _fatal_insn_not_found (insn, __FILE__, __LINE__, __FUNCTION__) ! /* None of these functions are suitable for ATTRIBUTE_PRINTF, because ! each language front end can extend them with its own set of format ! specifiers. */ ! extern void warning PARAMS ((const char *, ...)); ! extern void error PARAMS ((const char *, ...)); extern void fatal_error PARAMS ((const char *, ...)) ! ATTRIBUTE_NORETURN; ! extern void pedwarn PARAMS ((const char *, ...)); extern void pedwarn_with_file_and_line PARAMS ((const char *, int, ! const char *, ...)); extern void warning_with_file_and_line PARAMS ((const char *, int, ! const char *, ...)); extern void error_with_file_and_line PARAMS ((const char *, int, ! const char *, ...)); ! extern void sorry PARAMS ((const char *, ...)); extern void report_error_function PARAMS ((const char *)); extern void rest_of_decl_compilation PARAMS ((union tree_node *, *************** extern void rest_of_decl_compilation PAR *** 91,97 **** extern void rest_of_type_compilation PARAMS ((union tree_node *, int)); extern void rest_of_compilation PARAMS ((union tree_node *)); - /* The *_with_decl functions aren't suitable for ATTRIBUTE_PRINTF. */ extern void pedwarn_with_decl PARAMS ((union tree_node *, const char *, ...)); extern void warning_with_decl PARAMS ((union tree_node *, --- 74,79 ---- *************** extern void error_with_decl PARAMS ((un *** 102,117 **** extern void announce_function PARAMS ((union tree_node *)); extern void error_for_asm PARAMS ((struct rtx_def *, ! const char *, ...)) ! ATTRIBUTE_PRINTF_2; extern void warning_for_asm PARAMS ((struct rtx_def *, ! const char *, ...)) ! ATTRIBUTE_PRINTF_2; ! #if defined (_JBLEN) || defined (setjmp) ! extern void set_float_handler PARAMS ((jmp_buf)); ! extern int push_float_handler PARAMS ((jmp_buf, jmp_buf)); ! extern void pop_float_handler PARAMS ((int, jmp_buf)); ! #endif extern int do_float_handler PARAMS ((void (*) (PTR), PTR)); #ifdef BUFSIZ --- 84,93 ---- extern void announce_function PARAMS ((union tree_node *)); extern void error_for_asm PARAMS ((struct rtx_def *, ! const char *, ...)); extern void warning_for_asm PARAMS ((struct rtx_def *, ! const char *, ...)); ! extern void warn_deprecated_use PARAMS ((union tree_node *)); extern int do_float_handler PARAMS ((void (*) (PTR), PTR)); #ifdef BUFSIZ *************** extern void botch PARAMS ((const char *** 123,174 **** ATTRIBUTE_NORETURN; #ifdef BUFSIZ extern void fnotice PARAMS ((FILE *, const char *, ...)) ATTRIBUTE_PRINTF_2; #endif extern int wrapup_global_declarations PARAMS ((union tree_node **, int)); extern void check_global_declarations PARAMS ((union tree_node **, int)); - extern void note_deferral_of_defined_inline_function - PARAMS ((union tree_node *)); - extern void note_outlining_of_inline_function - PARAMS ((union tree_node *)); - extern int errorcount; - extern int warningcount; - extern int sorrycount; extern const char *progname; extern const char *dump_base_name; ! /* Language-specific hooks. Can be NULL unless otherwise specified. */ ! struct lang_hooks ! { ! /* Called first, to initialize the front end. */ ! void (*init) PARAMS ((void)); ! ! /* Called last, as a finalizer. */ ! void (*finish) PARAMS ((void)); ! ! /* Called to initialize options, before any calls to decode_option. */ ! void (*init_options) PARAMS ((void)); ! /* Function called with an option vector as argument, to decode a ! single option (typically starting with -f or -W or +). It should ! return the number of command-line arguments it uses if it handles ! the option, or 0 and not complain if it does not recognise the ! option. If this function returns a negative number, then its ! absolute value is the number of command-line arguments used, but, ! in addition, no language-independent option processing should be ! done for this option. ! This hook cannot be NULL. */ ! int (*decode_option) PARAMS ((int, char **)); ! /* Called when all command line options have been processed. */ ! void (*post_options) PARAMS ((void)); ! }; ! /* Each front end provides its own. */ ! extern struct lang_hooks lang_hooks; ! #endif /* __GCC_TOPLEV_H */ --- 99,133 ---- ATTRIBUTE_NORETURN; #ifdef BUFSIZ + /* N.B. Unlike all the others, fnotice is just gettext+fprintf, and + therefore it can have ATTRIBUTE_PRINTF. */ extern void fnotice PARAMS ((FILE *, const char *, ...)) ATTRIBUTE_PRINTF_2; #endif extern int wrapup_global_declarations PARAMS ((union tree_node **, int)); extern void check_global_declarations PARAMS ((union tree_node **, int)); extern const char *progname; extern const char *dump_base_name; ! /* The hashtable, so that the C front ends can pass it to cpplib. */ ! extern struct ht *ident_hash; ! /* These functions can be used by targets to set the flags originally ! implied by -ffast-math and -fno-fast-math. */ ! extern void set_fast_math_flags PARAMS ((void)); ! extern void set_no_fast_math_flags PARAMS ((void)); ! /* The following functions accept a wide integer argument. Rather ! than having to cast on every function call, we use a macro instead. */ ! #ifndef exact_log2 ! #define exact_log2(N) exact_log2_wide ((unsigned HOST_WIDE_INT) (N)) ! #define floor_log2(N) floor_log2_wide ((unsigned HOST_WIDE_INT) (N)) ! #endif ! extern int exact_log2_wide PARAMS ((unsigned HOST_WIDE_INT)); ! extern int floor_log2_wide PARAMS ((unsigned HOST_WIDE_INT)); ! #endif /* ! GCC_TOPLEV_H */ diff -Nrc3pad gcc-3.0.4/gcc/tradcif.c gcc-3.1/gcc/tradcif.c *** gcc-3.0.4/gcc/tradcif.c Wed Feb 20 19:45:06 2002 --- gcc-3.1/gcc/tradcif.c Wed May 15 02:44:53 2002 *************** *** 22,32 **** #include "config.h" #include "system.h" #include "tradcpp.h" #include static int yylex PARAMS ((void)); ! static void yyerror PARAMS ((const char *msgid)); static int parse_number PARAMS ((int)); static int parse_escape PARAMS ((const char **)); --- 22,33 ---- #include "config.h" #include "system.h" + #include "intl.h" #include "tradcpp.h" #include static int yylex PARAMS ((void)); ! static void yyerror PARAMS ((const char *msgid)) ATTRIBUTE_NORETURN; static int parse_number PARAMS ((int)); static int parse_escape PARAMS ((const char **)); *************** *** 39,45 **** static const char *lexptr; ! #line 45 "tradcif.y" typedef union { struct constant {long value; int unsignedp;} integer; int voidval; --- 40,46 ---- static const char *lexptr; ! #line 46 "tradcif.y" typedef union { struct constant {long value; int unsignedp;} integer; int voidval; *************** static const short yyrhs[] = { 35, *** 117,126 **** #if YYDEBUG != 0 static const short yyrline[] = { 0, ! 74, 79, 80, 85, 88, 91, 93, 96, 101, 107, ! 118, 129, 132, 135, 141, 147, 150, 153, 160, 167, ! 174, 181, 184, 187, 190, 193, 196, 199, 201, 203, ! 206 }; #endif --- 118,127 ---- #if YYDEBUG != 0 static const short yyrline[] = { 0, ! 75, 80, 81, 86, 89, 92, 94, 97, 102, 108, ! 119, 130, 133, 136, 142, 148, 151, 154, 161, 168, ! 175, 182, 185, 188, 191, 194, 197, 200, 202, 204, ! 207 }; #endif *************** yyreduce: *** 767,804 **** switch (yyn) { case 1: ! #line 75 "tradcif.y" { expression_value = yyvsp[0].integer.value; ; break;} case 3: ! #line 81 "tradcif.y" { yyval.integer = yyvsp[0].integer; ; break;} case 4: ! #line 86 "tradcif.y" { yyval.integer.value = - yyvsp[0].integer.value; yyval.integer.unsignedp = yyvsp[0].integer.unsignedp; ; break;} case 5: ! #line 89 "tradcif.y" { yyval.integer.value = ! yyvsp[0].integer.value; yyval.integer.unsignedp = 0; ; break;} case 6: ! #line 92 "tradcif.y" { yyval.integer = yyvsp[0].integer; ; break;} case 7: ! #line 94 "tradcif.y" { yyval.integer.value = ~ yyvsp[0].integer.value; yyval.integer.unsignedp = yyvsp[0].integer.unsignedp; ; break;} case 8: ! #line 97 "tradcif.y" { yyval.integer = yyvsp[-1].integer; ; break;} case 9: ! #line 102 "tradcif.y" { yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp || yyvsp[0].integer.unsignedp; if (yyval.integer.unsignedp) yyval.integer.value = (unsigned) yyvsp[-2].integer.value * yyvsp[0].integer.value; --- 768,805 ---- switch (yyn) { case 1: ! #line 76 "tradcif.y" { expression_value = yyvsp[0].integer.value; ; break;} case 3: ! #line 82 "tradcif.y" { yyval.integer = yyvsp[0].integer; ; break;} case 4: ! #line 87 "tradcif.y" { yyval.integer.value = - yyvsp[0].integer.value; yyval.integer.unsignedp = yyvsp[0].integer.unsignedp; ; break;} case 5: ! #line 90 "tradcif.y" { yyval.integer.value = ! yyvsp[0].integer.value; yyval.integer.unsignedp = 0; ; break;} case 6: ! #line 93 "tradcif.y" { yyval.integer = yyvsp[0].integer; ; break;} case 7: ! #line 95 "tradcif.y" { yyval.integer.value = ~ yyvsp[0].integer.value; yyval.integer.unsignedp = yyvsp[0].integer.unsignedp; ; break;} case 8: ! #line 98 "tradcif.y" { yyval.integer = yyvsp[-1].integer; ; break;} case 9: ! #line 103 "tradcif.y" { yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp || yyvsp[0].integer.unsignedp; if (yyval.integer.unsignedp) yyval.integer.value = (unsigned) yyvsp[-2].integer.value * yyvsp[0].integer.value; *************** case 9: *** 806,812 **** yyval.integer.value = yyvsp[-2].integer.value * yyvsp[0].integer.value; ; break;} case 10: ! #line 108 "tradcif.y" { if (yyvsp[0].integer.value == 0) { error ("division by zero in #if"); --- 807,813 ---- yyval.integer.value = yyvsp[-2].integer.value * yyvsp[0].integer.value; ; break;} case 10: ! #line 109 "tradcif.y" { if (yyvsp[0].integer.value == 0) { error ("division by zero in #if"); *************** case 10: *** 819,825 **** yyval.integer.value = yyvsp[-2].integer.value / yyvsp[0].integer.value; ; break;} case 11: ! #line 119 "tradcif.y" { if (yyvsp[0].integer.value == 0) { error ("division by zero in #if"); --- 820,826 ---- yyval.integer.value = yyvsp[-2].integer.value / yyvsp[0].integer.value; ; break;} case 11: ! #line 120 "tradcif.y" { if (yyvsp[0].integer.value == 0) { error ("division by zero in #if"); *************** case 11: *** 832,848 **** yyval.integer.value = yyvsp[-2].integer.value % yyvsp[0].integer.value; ; break;} case 12: ! #line 130 "tradcif.y" { yyval.integer.value = yyvsp[-2].integer.value + yyvsp[0].integer.value; yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp || yyvsp[0].integer.unsignedp; ; break;} case 13: ! #line 133 "tradcif.y" { yyval.integer.value = yyvsp[-2].integer.value - yyvsp[0].integer.value; yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp || yyvsp[0].integer.unsignedp; ; break;} case 14: ! #line 136 "tradcif.y" { yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp; if (yyval.integer.unsignedp) yyval.integer.value = (unsigned) yyvsp[-2].integer.value << yyvsp[0].integer.value; --- 833,849 ---- yyval.integer.value = yyvsp[-2].integer.value % yyvsp[0].integer.value; ; break;} case 12: ! #line 131 "tradcif.y" { yyval.integer.value = yyvsp[-2].integer.value + yyvsp[0].integer.value; yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp || yyvsp[0].integer.unsignedp; ; break;} case 13: ! #line 134 "tradcif.y" { yyval.integer.value = yyvsp[-2].integer.value - yyvsp[0].integer.value; yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp || yyvsp[0].integer.unsignedp; ; break;} case 14: ! #line 137 "tradcif.y" { yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp; if (yyval.integer.unsignedp) yyval.integer.value = (unsigned) yyvsp[-2].integer.value << yyvsp[0].integer.value; *************** case 14: *** 850,856 **** yyval.integer.value = yyvsp[-2].integer.value << yyvsp[0].integer.value; ; break;} case 15: ! #line 142 "tradcif.y" { yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp; if (yyval.integer.unsignedp) yyval.integer.value = (unsigned) yyvsp[-2].integer.value >> yyvsp[0].integer.value; --- 851,857 ---- yyval.integer.value = yyvsp[-2].integer.value << yyvsp[0].integer.value; ; break;} case 15: ! #line 143 "tradcif.y" { yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp; if (yyval.integer.unsignedp) yyval.integer.value = (unsigned) yyvsp[-2].integer.value >> yyvsp[0].integer.value; *************** case 15: *** 858,874 **** yyval.integer.value = yyvsp[-2].integer.value >> yyvsp[0].integer.value; ; break;} case 16: ! #line 148 "tradcif.y" { yyval.integer.value = (yyvsp[-2].integer.value == yyvsp[0].integer.value); yyval.integer.unsignedp = 0; ; break;} case 17: ! #line 151 "tradcif.y" { yyval.integer.value = (yyvsp[-2].integer.value != yyvsp[0].integer.value); yyval.integer.unsignedp = 0; ; break;} case 18: ! #line 154 "tradcif.y" { yyval.integer.unsignedp = 0; if (yyvsp[-2].integer.unsignedp || yyvsp[0].integer.unsignedp) yyval.integer.value = --- 859,875 ---- yyval.integer.value = yyvsp[-2].integer.value >> yyvsp[0].integer.value; ; break;} case 16: ! #line 149 "tradcif.y" { yyval.integer.value = (yyvsp[-2].integer.value == yyvsp[0].integer.value); yyval.integer.unsignedp = 0; ; break;} case 17: ! #line 152 "tradcif.y" { yyval.integer.value = (yyvsp[-2].integer.value != yyvsp[0].integer.value); yyval.integer.unsignedp = 0; ; break;} case 18: ! #line 155 "tradcif.y" { yyval.integer.unsignedp = 0; if (yyvsp[-2].integer.unsignedp || yyvsp[0].integer.unsignedp) yyval.integer.value = *************** case 18: *** 877,883 **** yyval.integer.value = yyvsp[-2].integer.value <= yyvsp[0].integer.value; ; break;} case 19: ! #line 161 "tradcif.y" { yyval.integer.unsignedp = 0; if (yyvsp[-2].integer.unsignedp || yyvsp[0].integer.unsignedp) yyval.integer.value = --- 878,884 ---- yyval.integer.value = yyvsp[-2].integer.value <= yyvsp[0].integer.value; ; break;} case 19: ! #line 162 "tradcif.y" { yyval.integer.unsignedp = 0; if (yyvsp[-2].integer.unsignedp || yyvsp[0].integer.unsignedp) yyval.integer.value = *************** case 19: *** 886,892 **** yyval.integer.value = yyvsp[-2].integer.value >= yyvsp[0].integer.value; ; break;} case 20: ! #line 168 "tradcif.y" { yyval.integer.unsignedp = 0; if (yyvsp[-2].integer.unsignedp || yyvsp[0].integer.unsignedp) yyval.integer.value = --- 887,893 ---- yyval.integer.value = yyvsp[-2].integer.value >= yyvsp[0].integer.value; ; break;} case 20: ! #line 169 "tradcif.y" { yyval.integer.unsignedp = 0; if (yyvsp[-2].integer.unsignedp || yyvsp[0].integer.unsignedp) yyval.integer.value = *************** case 20: *** 895,901 **** yyval.integer.value = yyvsp[-2].integer.value < yyvsp[0].integer.value; ; break;} case 21: ! #line 175 "tradcif.y" { yyval.integer.unsignedp = 0; if (yyvsp[-2].integer.unsignedp || yyvsp[0].integer.unsignedp) yyval.integer.value = --- 896,902 ---- yyval.integer.value = yyvsp[-2].integer.value < yyvsp[0].integer.value; ; break;} case 21: ! #line 176 "tradcif.y" { yyval.integer.unsignedp = 0; if (yyvsp[-2].integer.unsignedp || yyvsp[0].integer.unsignedp) yyval.integer.value = *************** case 21: *** 904,953 **** yyval.integer.value = yyvsp[-2].integer.value > yyvsp[0].integer.value; ; break;} case 22: ! #line 182 "tradcif.y" { yyval.integer.value = yyvsp[-2].integer.value & yyvsp[0].integer.value; yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp || yyvsp[0].integer.unsignedp; ; break;} case 23: ! #line 185 "tradcif.y" { yyval.integer.value = yyvsp[-2].integer.value ^ yyvsp[0].integer.value; yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp || yyvsp[0].integer.unsignedp; ; break;} case 24: ! #line 188 "tradcif.y" { yyval.integer.value = yyvsp[-2].integer.value | yyvsp[0].integer.value; yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp || yyvsp[0].integer.unsignedp; ; break;} case 25: ! #line 191 "tradcif.y" { yyval.integer.value = (yyvsp[-2].integer.value && yyvsp[0].integer.value); yyval.integer.unsignedp = 0; ; break;} case 26: ! #line 194 "tradcif.y" { yyval.integer.value = (yyvsp[-2].integer.value || yyvsp[0].integer.value); yyval.integer.unsignedp = 0; ; break;} case 27: ! #line 197 "tradcif.y" { yyval.integer.value = yyvsp[-4].integer.value ? yyvsp[-2].integer.value : yyvsp[0].integer.value; yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp || yyvsp[0].integer.unsignedp; ; break;} case 28: ! #line 200 "tradcif.y" { yyval.integer = yylval.integer; ; break;} case 29: ! #line 202 "tradcif.y" { yyval.integer = yylval.integer; ; break;} case 30: ! #line 204 "tradcif.y" { yyval.integer.value = 0; yyval.integer.unsignedp = 0; ; break;} case 31: ! #line 206 "tradcif.y" { yyval.integer.value = test_assertion ((unsigned char **) &lexptr); ; break;} --- 905,954 ---- yyval.integer.value = yyvsp[-2].integer.value > yyvsp[0].integer.value; ; break;} case 22: ! #line 183 "tradcif.y" { yyval.integer.value = yyvsp[-2].integer.value & yyvsp[0].integer.value; yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp || yyvsp[0].integer.unsignedp; ; break;} case 23: ! #line 186 "tradcif.y" { yyval.integer.value = yyvsp[-2].integer.value ^ yyvsp[0].integer.value; yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp || yyvsp[0].integer.unsignedp; ; break;} case 24: ! #line 189 "tradcif.y" { yyval.integer.value = yyvsp[-2].integer.value | yyvsp[0].integer.value; yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp || yyvsp[0].integer.unsignedp; ; break;} case 25: ! #line 192 "tradcif.y" { yyval.integer.value = (yyvsp[-2].integer.value && yyvsp[0].integer.value); yyval.integer.unsignedp = 0; ; break;} case 26: ! #line 195 "tradcif.y" { yyval.integer.value = (yyvsp[-2].integer.value || yyvsp[0].integer.value); yyval.integer.unsignedp = 0; ; break;} case 27: ! #line 198 "tradcif.y" { yyval.integer.value = yyvsp[-4].integer.value ? yyvsp[-2].integer.value : yyvsp[0].integer.value; yyval.integer.unsignedp = yyvsp[-2].integer.unsignedp || yyvsp[0].integer.unsignedp; ; break;} case 28: ! #line 201 "tradcif.y" { yyval.integer = yylval.integer; ; break;} case 29: ! #line 203 "tradcif.y" { yyval.integer = yylval.integer; ; break;} case 30: ! #line 205 "tradcif.y" { yyval.integer.value = 0; yyval.integer.unsignedp = 0; ; break;} case 31: ! #line 207 "tradcif.y" { yyval.integer.value = test_assertion ((unsigned char **) &lexptr); ; break;} *************** yyerrhandle: *** 1173,1179 **** } return 1; } ! #line 209 "tradcif.y" /* Take care of parsing a number (anything that starts with a digit). --- 1174,1180 ---- } return 1; } ! #line 210 "tradcif.y" /* Take care of parsing a number (anything that starts with a digit). *************** static int *** 1186,1196 **** parse_number (olen) int olen; { ! register const char *p = lexptr; ! register long n = 0; ! register int c; ! register int base = 10; ! register int len = olen; for (c = 0; c < len; c++) if (p[c] == '.') { --- 1187,1197 ---- parse_number (olen) int olen; { ! const char *p = lexptr; ! long n = 0; ! int c; ! int base = 10; ! int len = olen; for (c = 0; c < len; c++) if (p[c] == '.') { *************** parse_number (olen) *** 1199,1204 **** --- 1200,1207 ---- return ERROR; } + /* Traditionally, all numbers are signed. However, we make it + unsigned if requested with a suffix. */ yylval.integer.unsignedp = 0; if (len >= 3 && (!strncmp (p, "0x", 2) || !strncmp (p, "0X", 2))) { *************** parse_number (olen) *** 1212,1225 **** while (len > 0) { c = *p++; len--; ! if (c >= 'A' && c <= 'Z') c += 'a' - 'A'; ! if (c >= '0' && c <= '9') { ! n *= base; ! n += c - '0'; ! } else if (base == 16 && c >= 'a' && c <= 'f') { ! n *= base; ! n += c - 'a' + 10; } else { /* `l' means long, and `u' means unsigned. */ while (1) { --- 1215,1226 ---- while (len > 0) { c = *p++; len--; ! if (ISUPPER (c)) ! c = TOLOWER (c); ! if (ISDIGIT (c) ! || (base == 16 && ISXDIGIT (c))) { ! n = (n * base) + hex_value (c); } else { /* `l' means long, and `u' means unsigned. */ while (1) { *************** parse_number (olen) *** 1241,1269 **** } if (len != 0) { ! yyerror ("Invalid number in #if expression"); return ERROR; } - /* If too big to be signed, consider it unsigned. */ - if (n < 0) - yylval.integer.unsignedp = 1; - lexptr = p; yylval.integer.value = n; return INT; } struct token { ! const char *operator; ! int token; }; #ifndef NULL #define NULL 0 #endif ! static struct token tokentab2[] = { {"&&", AND}, {"||", OR}, {"<<", LSH}, --- 1242,1266 ---- } if (len != 0) { ! yyerror ("invalid number in #if expression"); return ERROR; } lexptr = p; yylval.integer.value = n; return INT; } struct token { ! const char *const operator; ! const int token; }; #ifndef NULL #define NULL 0 #endif ! static const struct token tokentab2[] = { {"&&", AND}, {"||", OR}, {"<<", LSH}, *************** static struct token tokentab2[] = { *** 1280,1289 **** static int yylex () { ! register int c; ! register int namelen; ! register const char *tokstart; ! register struct token *toktab; retry: --- 1277,1286 ---- static int yylex () { ! int c; ! int namelen; ! const char *tokstart; ! const struct token *toktab; retry: *************** yylex () *** 1315,1322 **** /* Sign-extend the constant if chars are signed on target machine. */ { ! if (lookup ((const unsigned char *)"__CHAR_UNSIGNED__", ! sizeof ("__CHAR_UNSIGNED__")-1, -1) || ((c >> (CHAR_TYPE_SIZE - 1)) & 1) == 0) yylval.integer.value = c & ((1 << CHAR_TYPE_SIZE) - 1); else --- 1312,1318 ---- /* Sign-extend the constant if chars are signed on target machine. */ { ! if (flag_signed_char == 0 || ((c >> (CHAR_TYPE_SIZE - 1)) & 1) == 0) yylval.integer.value = c & ((1 << CHAR_TYPE_SIZE) - 1); else *************** yylex () *** 1326,1332 **** yylval.integer.unsignedp = 0; c = *lexptr++; if (c != '\'') { ! yyerror ("Invalid character constant in #if"); return ERROR; } --- 1322,1328 ---- yylval.integer.unsignedp = 0; c = *lexptr++; if (c != '\'') { ! yyerror ("invalid character constant in #if"); return ERROR; } *************** yylex () *** 1366,1372 **** yyerror ("double quoted strings not allowed in #if expressions"); return ERROR; } ! if (c >= '0' && c <= '9') { /* It's a number */ for (namelen = 0; c = tokstart[namelen], is_idchar (c) || c == '.'; --- 1362,1368 ---- yyerror ("double quoted strings not allowed in #if expressions"); return ERROR; } ! if (ISDIGIT (c)) { /* It's a number */ for (namelen = 0; c = tokstart[namelen], is_idchar (c) || c == '.'; *************** yylex () *** 1376,1382 **** } if (!is_idstart (c)) { ! yyerror ("Invalid token in expression"); return ERROR; } --- 1372,1378 ---- } if (!is_idstart (c)) { ! yyerror ("invalid token in expression"); return ERROR; } *************** static int *** 1410,1416 **** parse_escape (string_ptr) const char **string_ptr; { ! register int c = *(*string_ptr)++; switch (c) { case 'a': --- 1406,1412 ---- parse_escape (string_ptr) const char **string_ptr; { ! int c = *(*string_ptr)++; switch (c) { case 'a': *************** parse_escape (string_ptr) *** 1451,1458 **** case '6': case '7': { ! register int i = c - '0'; ! register int count = 0; while (++count < 3) { c = *(*string_ptr)++; --- 1447,1454 ---- case '6': case '7': { ! int i = c - '0'; ! int count = 0; while (++count < 3) { c = *(*string_ptr)++; *************** parse_escape (string_ptr) *** 1473,1488 **** } case 'x': { ! register int i = 0; for (;;) { c = *(*string_ptr)++; ! if (c >= '0' && c <= '9') ! i = (i << 4) + c - '0'; ! else if (c >= 'a' && c <= 'f') ! i = (i << 4) + c - 'a' + 10; ! else if (c >= 'A' && c <= 'F') ! i = (i << 4) + c - 'A' + 10; else { (*string_ptr)--; --- 1469,1480 ---- } case 'x': { ! int i = 0; for (;;) { c = *(*string_ptr)++; ! if (hex_p (c)) ! i = (i << 4) + hex_value (c); else { (*string_ptr)--; *************** parse_escape (string_ptr) *** 1502,1511 **** } static void ! yyerror (s) ! const char *s; { ! error (s); longjmp (parse_return_error, 1); } --- 1494,1503 ---- } static void ! yyerror (msgid) ! const char *msgid; { ! error ("%s", _(msgid)); longjmp (parse_return_error, 1); } diff -Nrc3pad gcc-3.0.4/gcc/tradcif.y gcc-3.1/gcc/tradcif.y *** gcc-3.0.4/gcc/tradcif.y Sun Jan 28 01:50:07 2001 --- gcc-3.1/gcc/tradcif.y Sat Feb 2 18:56:35 2002 *************** Foundation, 59 Temple Place - Suite 330, *** 24,34 **** %{ #include "config.h" #include "system.h" #include "tradcpp.h" #include static int yylex PARAMS ((void)); ! static void yyerror PARAMS ((const char *msgid)); static int parse_number PARAMS ((int)); static int parse_escape PARAMS ((const char **)); --- 24,35 ---- %{ #include "config.h" #include "system.h" + #include "intl.h" #include "tradcpp.h" #include static int yylex PARAMS ((void)); ! static void yyerror PARAMS ((const char *msgid)) ATTRIBUTE_NORETURN; static int parse_number PARAMS ((int)); static int parse_escape PARAMS ((const char **)); *************** static int *** 218,228 **** parse_number (olen) int olen; { ! register const char *p = lexptr; ! register long n = 0; ! register int c; ! register int base = 10; ! register int len = olen; for (c = 0; c < len; c++) if (p[c] == '.') { --- 219,229 ---- parse_number (olen) int olen; { ! const char *p = lexptr; ! long n = 0; ! int c; ! int base = 10; ! int len = olen; for (c = 0; c < len; c++) if (p[c] == '.') { *************** parse_number (olen) *** 231,236 **** --- 232,239 ---- return ERROR; } + /* Traditionally, all numbers are signed. However, we make it + unsigned if requested with a suffix. */ yylval.integer.unsignedp = 0; if (len >= 3 && (!strncmp (p, "0x", 2) || !strncmp (p, "0X", 2))) { *************** parse_number (olen) *** 244,257 **** while (len > 0) { c = *p++; len--; ! if (c >= 'A' && c <= 'Z') c += 'a' - 'A'; ! if (c >= '0' && c <= '9') { ! n *= base; ! n += c - '0'; ! } else if (base == 16 && c >= 'a' && c <= 'f') { ! n *= base; ! n += c - 'a' + 10; } else { /* `l' means long, and `u' means unsigned. */ while (1) { --- 247,258 ---- while (len > 0) { c = *p++; len--; ! if (ISUPPER (c)) ! c = TOLOWER (c); ! if (ISDIGIT (c) ! || (base == 16 && ISXDIGIT (c))) { ! n = (n * base) + hex_value (c); } else { /* `l' means long, and `u' means unsigned. */ while (1) { *************** parse_number (olen) *** 273,301 **** } if (len != 0) { ! yyerror ("Invalid number in #if expression"); return ERROR; } - /* If too big to be signed, consider it unsigned. */ - if (n < 0) - yylval.integer.unsignedp = 1; - lexptr = p; yylval.integer.value = n; return INT; } struct token { ! const char *operator; ! int token; }; #ifndef NULL #define NULL 0 #endif ! static struct token tokentab2[] = { {"&&", AND}, {"||", OR}, {"<<", LSH}, --- 274,298 ---- } if (len != 0) { ! yyerror ("invalid number in #if expression"); return ERROR; } lexptr = p; yylval.integer.value = n; return INT; } struct token { ! const char *const operator; ! const int token; }; #ifndef NULL #define NULL 0 #endif ! static const struct token tokentab2[] = { {"&&", AND}, {"||", OR}, {"<<", LSH}, *************** static struct token tokentab2[] = { *** 312,321 **** static int yylex () { ! register int c; ! register int namelen; ! register const char *tokstart; ! register struct token *toktab; retry: --- 309,318 ---- static int yylex () { ! int c; ! int namelen; ! const char *tokstart; ! const struct token *toktab; retry: *************** yylex () *** 347,354 **** /* Sign-extend the constant if chars are signed on target machine. */ { ! if (lookup ((const unsigned char *)"__CHAR_UNSIGNED__", ! sizeof ("__CHAR_UNSIGNED__")-1, -1) || ((c >> (CHAR_TYPE_SIZE - 1)) & 1) == 0) yylval.integer.value = c & ((1 << CHAR_TYPE_SIZE) - 1); else --- 344,350 ---- /* Sign-extend the constant if chars are signed on target machine. */ { ! if (flag_signed_char == 0 || ((c >> (CHAR_TYPE_SIZE - 1)) & 1) == 0) yylval.integer.value = c & ((1 << CHAR_TYPE_SIZE) - 1); else *************** yylex () *** 358,364 **** yylval.integer.unsignedp = 0; c = *lexptr++; if (c != '\'') { ! yyerror ("Invalid character constant in #if"); return ERROR; } --- 354,360 ---- yylval.integer.unsignedp = 0; c = *lexptr++; if (c != '\'') { ! yyerror ("invalid character constant in #if"); return ERROR; } *************** yylex () *** 398,404 **** yyerror ("double quoted strings not allowed in #if expressions"); return ERROR; } ! if (c >= '0' && c <= '9') { /* It's a number */ for (namelen = 0; c = tokstart[namelen], is_idchar (c) || c == '.'; --- 394,400 ---- yyerror ("double quoted strings not allowed in #if expressions"); return ERROR; } ! if (ISDIGIT (c)) { /* It's a number */ for (namelen = 0; c = tokstart[namelen], is_idchar (c) || c == '.'; *************** yylex () *** 408,414 **** } if (!is_idstart (c)) { ! yyerror ("Invalid token in expression"); return ERROR; } --- 404,410 ---- } if (!is_idstart (c)) { ! yyerror ("invalid token in expression"); return ERROR; } *************** static int *** 442,448 **** parse_escape (string_ptr) const char **string_ptr; { ! register int c = *(*string_ptr)++; switch (c) { case 'a': --- 438,444 ---- parse_escape (string_ptr) const char **string_ptr; { ! int c = *(*string_ptr)++; switch (c) { case 'a': *************** parse_escape (string_ptr) *** 483,490 **** case '6': case '7': { ! register int i = c - '0'; ! register int count = 0; while (++count < 3) { c = *(*string_ptr)++; --- 479,486 ---- case '6': case '7': { ! int i = c - '0'; ! int count = 0; while (++count < 3) { c = *(*string_ptr)++; *************** parse_escape (string_ptr) *** 505,520 **** } case 'x': { ! register int i = 0; for (;;) { c = *(*string_ptr)++; ! if (c >= '0' && c <= '9') ! i = (i << 4) + c - '0'; ! else if (c >= 'a' && c <= 'f') ! i = (i << 4) + c - 'a' + 10; ! else if (c >= 'A' && c <= 'F') ! i = (i << 4) + c - 'A' + 10; else { (*string_ptr)--; --- 501,512 ---- } case 'x': { ! int i = 0; for (;;) { c = *(*string_ptr)++; ! if (hex_p (c)) ! i = (i << 4) + hex_value (c); else { (*string_ptr)--; *************** parse_escape (string_ptr) *** 534,543 **** } static void ! yyerror (s) ! const char *s; { ! error (s); longjmp (parse_return_error, 1); } --- 526,535 ---- } static void ! yyerror (msgid) ! const char *msgid; { ! error ("%s", _(msgid)); longjmp (parse_return_error, 1); } diff -Nrc3pad gcc-3.0.4/gcc/tradcpp.c gcc-3.1/gcc/tradcpp.c *** gcc-3.0.4/gcc/tradcpp.c Mon Jan 21 08:42:27 2002 --- gcc-3.1/gcc/tradcpp.c Fri May 3 17:51:03 2002 *************** Foundation, 59 Temple Place - Suite 330, *** 25,30 **** --- 25,31 ---- #include "cppdefault.h" #include "tradcpp.h" #include "mkdeps.h" + #include "intl.h" typedef unsigned char U_CHAR; *************** int inhibit_warnings = 0; *** 85,90 **** --- 86,98 ---- /* Non-0 means don't output the preprocessed program. */ int inhibit_output = 0; + /* Nonzero means chars are signed. */ + #if DEFAULT_SIGNED_CHAR + int flag_signed_char = 1; + #else + int flag_signed_char = 0; + #endif + /* Nonzero means warn if slash-star appears in a comment. */ int warn_comments; *************** HASHNODE *hashtab[HASHSIZE]; *** 309,319 **** /* `struct directive' defines one #-directive, including how to handle it. */ struct directive { ! int length; /* Length of name */ ! void (*func) PARAMS ((U_CHAR *, U_CHAR *, FILE_BUF *)); /* Function to handle directive */ ! const char *name; /* Name of directive */ ! enum node_type type; /* Code which describes which directive. */ }; /* Last arg to output_line_command. */ --- 317,327 ---- /* `struct directive' defines one #-directive, including how to handle it. */ struct directive { ! const int length; /* Length of name */ ! void (*const func) PARAMS ((U_CHAR *, U_CHAR *, FILE_BUF *)); /* Function to handle directive */ ! const char *const name; /* Name of directive */ ! const enum node_type type; /* Code which describes which directive. */ }; /* Last arg to output_line_command. */ *************** static int comp_def_part PARAMS ((int, *** 382,388 **** static void delete_macro PARAMS ((HASHNODE *)); /* First arg to v_message. */ ! enum msgtype { WARNING = 0, ERROR, FATAL }; static void v_message PARAMS ((enum msgtype mtype, int line, const char *msgid, va_list ap)) ATTRIBUTE_PRINTF (3, 0); --- 390,396 ---- static void delete_macro PARAMS ((HASHNODE *)); /* First arg to v_message. */ ! enum msgtype { MT_WARNING = 0, MT_ERROR, MT_FATAL }; static void v_message PARAMS ((enum msgtype mtype, int line, const char *msgid, va_list ap)) ATTRIBUTE_PRINTF (3, 0); *************** static void grow_outbuf PARAMS ((FILE_B *** 422,427 **** --- 430,436 ---- static int handle_directive PARAMS ((FILE_BUF *, FILE_BUF *)); static void process_include PARAMS ((struct file_name_list *, const U_CHAR *, int, int, FILE_BUF *)); + static void fixup_newlines PARAMS ((FILE_BUF *)); static void finclude PARAMS ((int, const char *, struct file_name_list *, FILE_BUF *)); static void init_dependency_output PARAMS ((void)); *************** int main PARAMS ((int, char **)); *** 445,451 **** /* Here is the actual list of #-directives, most-often-used first. */ ! struct directive directive_table[] = { { 6, do_define, "define", T_DEFINE }, { 7, do_include, "include", T_INCLUDE }, { 5, do_endif, "endif", T_ENDIF }, --- 454,460 ---- /* Here is the actual list of #-directives, most-often-used first. */ ! static const struct directive directive_table[] = { { 6, do_define, "define", T_DEFINE }, { 7, do_include, "include", T_INCLUDE }, { 5, do_endif, "endif", T_ENDIF }, *************** main (argc, argv) *** 514,519 **** --- 523,530 ---- pending_dir *pend = (pending_dir *) xcalloc (argc, sizeof (pending_dir)); int no_standard_includes = 0; + hex_init (); + #ifdef RLIMIT_STACK /* Get rid of any avoidable limit on stack size. */ { *************** main (argc, argv) *** 538,543 **** --- 549,556 ---- max_include_len = cpp_GCC_INCLUDE_DIR_len + 7; /* ??? */ + gcc_init_libintl (); + /* It's simplest to just create this struct whether or not it will be needed. */ deps = deps_init (); *************** main (argc, argv) *** 547,553 **** for (i = 1; i < argc; i++) { if (argv[i][0] != '-') { if (out_fname != NULL) ! fatal ("Usage: %s [switches] input output", argv[0]); else if (in_fname != NULL) out_fname = argv[i]; else --- 560,566 ---- for (i = 1; i < argc; i++) { if (argv[i][0] != '-') { if (out_fname != NULL) ! fatal ("usage: %s [switches] input output", argv[0]); else if (in_fname != NULL) out_fname = argv[i]; else *************** main (argc, argv) *** 579,585 **** if (!strcmp (argv[i], "-include")) { if (i + 1 == argc) ! fatal ("Filename missing after -i option"); else pend[i].type = PD_FILE, pend[i].arg = argv[i + 1], i++; } --- 592,598 ---- if (!strcmp (argv[i], "-include")) { if (i + 1 == argc) ! fatal ("filename missing after -i option"); else pend[i].type = PD_FILE, pend[i].arg = argv[i + 1], i++; } *************** main (argc, argv) *** 595,603 **** case 'o': if (out_fname != NULL) ! fatal ("Output filename specified twice"); if (i + 1 == argc) ! fatal ("Filename missing after -o option"); out_fname = argv[++i]; if (!strcmp (out_fname, "-")) out_fname = ""; --- 608,616 ---- case 'o': if (out_fname != NULL) ! fatal ("output filename specified twice"); if (i + 1 == argc) ! fatal ("filename missing after -o option"); out_fname = argv[++i]; if (!strcmp (out_fname, "-")) out_fname = ""; *************** main (argc, argv) *** 622,627 **** --- 635,644 ---- user_label_prefix = "_"; else if (!strcmp (argv[i], "-fno-leading-underscore")) user_label_prefix = ""; + else if (!strcmp (argv[i], "-fsigned-char")) + flag_signed_char = 1; + else if (!strcmp (argv[i], "-funsigned-char")) + flag_signed_char = 0; break; case 'M': *************** main (argc, argv) *** 656,662 **** int quoted = argv[i][2] == 'Q'; if (*tgt == '\0' && i + 1 == argc) ! fatal ("Target missing after %s option", argv[i]); else { if (*tgt == '\0') --- 673,679 ---- int quoted = argv[i][2] == 'Q'; if (*tgt == '\0' && i + 1 == argc) ! fatal ("target missing after %s option", argv[i]); else { if (*tgt == '\0') *************** main (argc, argv) *** 670,676 **** if (*p) deps_file = p; else if (i + 1 == argc) ! fatal ("Filename missing after %s option", argv[i]); else deps_file = argv[++i]; } --- 687,693 ---- if (*p) deps_file = p; else if (i + 1 == argc) ! fatal ("filename missing after %s option", argv[i]); else deps_file = argv[++i]; } *************** main (argc, argv) *** 695,701 **** if (argv[i][2] != 0) p = argv[i] + 2; else if (i + 1 == argc) ! fatal ("Macro name missing after -%c option", c); else p = argv[++i]; --- 712,718 ---- if (argv[i][2] != 0) p = argv[i] + 2; else if (i + 1 == argc) ! fatal ("macro name missing after -%c option", c); else p = argv[++i]; *************** main (argc, argv) *** 746,752 **** if (argv[i][1] == 'I' && argv[i][2] != 0) dirtmp->fname = argv[i] + 2; else if (i + 1 == argc) ! fatal ("Directory name missing after -I option"); else dirtmp->fname = argv[++i]; if (strlen (dirtmp->fname) > max_include_len) --- 763,769 ---- if (argv[i][1] == 'I' && argv[i][2] != 0) dirtmp->fname = argv[i] + 2; else if (i + 1 == argc) ! fatal ("directory name missing after -I option"); else dirtmp->fname = argv[++i]; if (strlen (dirtmp->fname) > max_include_len) *************** main (argc, argv) *** 773,779 **** } /* else fall through into error */ default: ! fatal ("Invalid option `%s'", argv[i]); } } } --- 790,796 ---- } /* else fall through into error */ default: ! fatal ("invalid option `%s'", argv[i]); } } } *************** main (argc, argv) *** 932,937 **** --- 949,955 ---- } fp->bufp = fp->buf; fp->if_stack = if_stack; + fixup_newlines (fp); /* Make sure data ends with a newline. And put a null after it. */ *************** output_deps () *** 1038,1044 **** { /* Stream on which to print the dependency information. */ FILE *deps_stream = 0; ! const char *deps_mode = deps_append ? "a" : "w"; if (deps_file == 0) deps_stream = stdout; --- 1056,1062 ---- { /* Stream on which to print the dependency information. */ FILE *deps_stream = 0; ! const char *const deps_mode = deps_append ? "a" : "w"; if (deps_file == 0) deps_stream = stdout; *************** static void *** 1075,1082 **** newline_fix (bp) U_CHAR *bp; { ! register U_CHAR *p = bp; ! register int count = 0; /* First count the backslash-newline pairs here. */ --- 1093,1100 ---- newline_fix (bp) U_CHAR *bp; { ! U_CHAR *p = bp; ! int count = 0; /* First count the backslash-newline pairs here. */ *************** static void *** 1110,1117 **** name_newline_fix (bp) U_CHAR *bp; { ! register U_CHAR *p = bp; ! register int count = 0; /* First count the backslash-newline pairs here. */ --- 1128,1135 ---- name_newline_fix (bp) U_CHAR *bp; { ! U_CHAR *p = bp; ! int count = 0; /* First count the backslash-newline pairs here. */ *************** rescan (op, output_marks) *** 1181,1205 **** int output_marks; { /* Character being scanned in main loop. */ ! register U_CHAR c; /* Length of pending accumulated identifier. */ ! register int ident_length = 0; /* Hash code of pending accumulated identifier. */ ! register int hash = 0; /* Current input level (&instack[indepth]). */ FILE_BUF *ip; /* Pointer for scanning input. */ ! register U_CHAR *ibp; /* Pointer to end of input. End of scan is controlled by LIMIT. */ ! register U_CHAR *limit; /* Pointer for storing output. */ ! register U_CHAR *obp; /* REDO_CHAR is nonzero if we are processing an identifier after backing up over the terminating character. --- 1199,1223 ---- int output_marks; { /* Character being scanned in main loop. */ ! U_CHAR c; /* Length of pending accumulated identifier. */ ! int ident_length = 0; /* Hash code of pending accumulated identifier. */ ! int hash = 0; /* Current input level (&instack[indepth]). */ FILE_BUF *ip; /* Pointer for scanning input. */ ! U_CHAR *ibp; /* Pointer to end of input. End of scan is controlled by LIMIT. */ ! U_CHAR *limit; /* Pointer for storing output. */ ! U_CHAR *obp; /* REDO_CHAR is nonzero if we are processing an identifier after backing up over the terminating character. *************** rescan (op, output_marks) *** 1220,1225 **** --- 1238,1246 ---- /* Record position of last `real' newline. */ U_CHAR *beg_of_line; + /* This has to be a global bacause of RECACHE. */ + U_CHAR *obufp_before_macroname = NULL; + /* Pop the innermost input stack level, assuming it is a macro expansion. */ #define POPMACRO \ *************** do { ip = &instack[indepth]; \ *** 1237,1242 **** --- 1258,1264 ---- op->bufp = obp; \ check_expand (op, limit - ibp); \ beg_of_line = 0; \ + obufp_before_macroname += op->bufp - obp; \ obp = op->bufp; } while (0) if (no_output && instack[indepth].fname != 0) *************** do { ip = &instack[indepth]; \ *** 1470,1476 **** ibp += 2; } c = *ibp++; ! if (!ISALNUM (c) && c != '.' && c != '_') { --ibp; break; } --- 1492,1498 ---- ibp += 2; } c = *ibp++; ! if (! ISIDNUM (c) && c != '.') { --ibp; break; } *************** specialchar: *** 1625,1631 **** randomchar: if (ident_length > 0) { ! register HASHNODE *hp; /* We have just seen an identifier end. If it's a macro, expand it. --- 1647,1653 ---- randomchar: if (ident_length > 0) { ! HASHNODE *hp; /* We have just seen an identifier end. If it's a macro, expand it. *************** randomchar: *** 1647,1657 **** hp = hp->next) { if (hp->length == ident_length) { ! U_CHAR *obufp_before_macroname; int op_lineno_before_macroname; ! register int i = ident_length; ! register U_CHAR *p = hp->name; ! register U_CHAR *q = obp - i; if (! redo_char) q--; --- 1669,1680 ---- hp = hp->next) { if (hp->length == ident_length) { ! /* obufp_before_macroname is used only in this block, ! but it has to be global because of RECACHE. */ int op_lineno_before_macroname; ! int i = ident_length; ! U_CHAR *p = hp->name; ! U_CHAR *q = obp - i; if (! redo_char) q--; *************** expand_to_temp_buffer (buf, limit, outpu *** 1816,1822 **** const U_CHAR *buf, *limit; int output_marks; { ! register FILE_BUF *ip; FILE_BUF obuf; int length = limit - buf; U_CHAR *buf1; --- 1839,1845 ---- const U_CHAR *buf, *limit; int output_marks; { ! FILE_BUF *ip; FILE_BUF obuf; int length = limit - buf; U_CHAR *buf1; *************** expand_to_temp_buffer (buf, limit, outpu *** 1829,1836 **** buf1 = (U_CHAR *) alloca (length + 1); { ! register const U_CHAR *p1 = buf; ! register U_CHAR *p2 = buf1; while (p1 != limit) *p2++ = *p1++; --- 1852,1859 ---- buf1 = (U_CHAR *) alloca (length + 1); { ! const U_CHAR *p1 = buf; ! U_CHAR *p2 = buf1; while (p1 != limit) *p2++ = *p1++; *************** static int *** 1893,1901 **** handle_directive (ip, op) FILE_BUF *ip, *op; { ! register U_CHAR *bp, *cp; ! register struct directive *kt; ! register int ident_length; U_CHAR *resume_p; /* Nonzero means we must copy the entire command --- 1916,1924 ---- handle_directive (ip, op) FILE_BUF *ip, *op; { ! U_CHAR *bp, *cp; ! const struct directive *kt; ! int ident_length; U_CHAR *resume_p; /* Nonzero means we must copy the entire command *************** handle_directive (ip, op) *** 1952,1959 **** for (kt = directive_table; kt->length > 0; kt++) { if (kt->length == ident_length && !strncmp (kt->name, (const char *)ident, ident_length)) { ! register U_CHAR *buf; ! register U_CHAR *limit = ip->buf + ip->length; int unterminated = 0; /* Nonzero means do not delete comments within the directive. --- 1975,1982 ---- for (kt = directive_table; kt->length > 0; kt++) { if (kt->length == ident_length && !strncmp (kt->name, (const char *)ident, ident_length)) { ! U_CHAR *buf; ! U_CHAR *limit = ip->buf + ip->length; int unterminated = 0; /* Nonzero means do not delete comments within the directive. *************** handle_directive (ip, op) *** 1967,1973 **** buf = bp = after_ident; while (bp < limit) { ! register U_CHAR c = *bp++; switch (c) { case '\\': if (bp < limit) { --- 1990,1996 ---- buf = bp = after_ident; while (bp < limit) { ! U_CHAR c = *bp++; switch (c) { case '\\': if (bp < limit) { *************** handle_directive (ip, op) *** 2031,2037 **** A comment may come between. */ if (copy_command) { ! register U_CHAR *xp = buf; /* Need to copy entire command into temp buffer before dispatching */ cp = (U_CHAR *) alloca (bp - buf + 5); /* room for cmd plus --- 2054,2060 ---- A comment may come between. */ if (copy_command) { ! U_CHAR *xp = buf; /* Need to copy entire command into temp buffer before dispatching */ cp = (U_CHAR *) alloca (bp - buf + 5); /* room for cmd plus *************** handle_directive (ip, op) *** 2042,2048 **** and backslash-newlines (and whitespace surrounding the latter). */ while (xp < bp) { ! register U_CHAR c = *xp++; *cp++ = c; switch (c) { --- 2065,2071 ---- and backslash-newlines (and whitespace surrounding the latter). */ while (xp < bp) { ! U_CHAR c = *xp++; *cp++ = c; switch (c) { *************** handle_directive (ip, op) *** 2082,2088 **** case '\'': case '\"': { ! register const U_CHAR *bp1 = skip_quoted_string (xp - 1, limit, ip->lineno, 0, 0, 0); while (xp != bp1) *cp++ = *xp++; --- 2105,2111 ---- case '\'': case '\"': { ! const U_CHAR *bp1 = skip_quoted_string (xp - 1, limit, ip->lineno, 0, 0, 0); while (xp != bp1) *cp++ = *xp++; *************** process_include (stackp, fbeg, flen, sys *** 2519,2525 **** } else if (print_deps && print_deps <= (system_header_p || (system_include_depth > 0))) ! warning ("No include path in which to find %.*s", flen, fbeg); else error_from_errno (fname); --- 2542,2548 ---- } else if (print_deps && print_deps <= (system_header_p || (system_include_depth > 0))) ! warning ("no include path in which to find %.*s", flen, fbeg); else error_from_errno (fname); *************** process_include (stackp, fbeg, flen, sys *** 2569,2574 **** --- 2592,2633 ---- } } + /* Replace all CR NL, NL CR and CR sequences with NL. */ + + static void + fixup_newlines (FILE_BUF *fp) + { + U_CHAR *p, *q, *end; + + if (fp->length <= 0) + return; + + end = fp->buf + fp->length; + *end = '\r'; + p = (U_CHAR *) strchr ((const char *) fp->buf, '\r'); + *end = '\0'; + if (p == end) + return; + + if (p > fp->buf && p[-1] == '\n') + p--; + q = p; + while (p < end) + switch (*p) + { + default: + *q++ = *p++; + break; + case '\n': + case '\r': + p += 1 + (p[0] + p[1] == '\n' + '\r'); + *q++ = '\n'; + break; + } + + fp->length = q - fp->buf; + } + /* Process the contents of include file FNAME, already open on descriptor F, with output to OP. */ *************** finclude (f, fname, nhd, op) *** 2643,2648 **** --- 2702,2708 ---- fp->length = st_size; } close (f); + fixup_newlines (fp); /* Make sure data ends with a newline. And put a null after it. */ *************** static int *** 2820,2828 **** compare_defs (d1, d2) DEFINITION *d1, *d2; { ! register struct reflist *a1, *a2; ! register U_CHAR *p1 = d1->expansion; ! register U_CHAR *p2 = d2->expansion; int first = 1; if (d1->nargs != d2->nargs) --- 2880,2888 ---- compare_defs (d1, d2) DEFINITION *d1, *d2; { ! struct reflist *a1, *a2; ! U_CHAR *p1 = d1->expansion; ! U_CHAR *p2 = d2->expansion; int first = 1; if (d1->nargs != d2->nargs) *************** comp_def_part (first, beg1, len1, beg2, *** 2866,2873 **** int len1, len2; int last; { ! register const U_CHAR *end1 = beg1 + len1; ! register const U_CHAR *end2 = beg2 + len2; if (first) { while (beg1 != end1 && is_space (*beg1)) beg1++; while (beg2 != end2 && is_space (*beg2)) beg2++; --- 2926,2933 ---- int len1, len2; int last; { ! const U_CHAR *end1 = beg1 + len1; ! const U_CHAR *end2 = beg2 + len2; if (first) { while (beg1 != end1 && is_space (*beg1)) beg1++; while (beg2 != end2 && is_space (*beg2)) beg2++; *************** collect_expansion (buf, end, nargs, argl *** 2915,2921 **** struct arglist *arglist; { DEFINITION *defn; ! register U_CHAR *p, *limit, *lastp, *exp_p; struct reflist *endpat = NULL; /* Pointer to first nonspace after last ## seen. */ U_CHAR *concat = 0; --- 2975,2981 ---- struct arglist *arglist; { DEFINITION *defn; ! U_CHAR *p, *limit, *lastp, *exp_p; struct reflist *endpat = NULL; /* Pointer to first nonspace after last ## seen. */ U_CHAR *concat = 0; *************** collect_expansion (buf, end, nargs, argl *** 2964,2970 **** /* Process the main body of the definition. */ while (p < limit) { int skipped_arg = 0; ! register U_CHAR c = *p++; *exp_p++ = c; --- 3024,3030 ---- /* Process the main body of the definition. */ while (p < limit) { int skipped_arg = 0; ! U_CHAR c = *p++; *exp_p++ = c; *************** collect_expansion (buf, end, nargs, argl *** 3015,3021 **** id_len = p - id_beg; if (is_idstart (c)) { ! register struct arglist *arg; for (arg = arglist; arg != NULL; arg = arg->next) { struct reflist *tpat; --- 3075,3081 ---- id_len = p - id_beg; if (is_idstart (c)) { ! struct arglist *arg; for (arg = arglist; arg != NULL; arg = arg->next) { struct reflist *tpat; *************** collect_expansion (buf, end, nargs, argl *** 3041,3047 **** tpat->argno = arg->argno; tpat->nchars = exp_p - lastp; { ! register U_CHAR *p1 = p; SKIP_WHITE_SPACE (p1); if (p1 + 2 <= limit && p1[0] == '#' && p1[1] == '#') tpat->raw_after = 1; --- 3101,3107 ---- tpat->argno = arg->argno; tpat->nchars = exp_p - lastp; { ! U_CHAR *p1 = p; SKIP_WHITE_SPACE (p1); if (p1 + 2 <= limit && p1[0] == '#' && p1[1] == '#') tpat->raw_after = 1; *************** collect_expansion (buf, end, nargs, argl *** 3055,3061 **** /* If this was not a macro arg, copy it into the expansion. */ if (! skipped_arg) { ! register U_CHAR *lim1 = p; p = id_beg; while (p != lim1) *exp_p++ = *p++; --- 3115,3121 ---- /* If this was not a macro arg, copy it into the expansion. */ if (! skipped_arg) { ! U_CHAR *lim1 = p; p = id_beg; while (p != lim1) *exp_p++ = *p++; *************** do_line (buf, limit, op) *** 3093,3099 **** U_CHAR *buf, *limit; FILE_BUF *op; { ! register U_CHAR *bp; FILE_BUF *ip = &instack[indepth]; FILE_BUF tem; int new_lineno; --- 3153,3159 ---- U_CHAR *buf, *limit; FILE_BUF *op; { ! U_CHAR *bp; FILE_BUF *ip = &instack[indepth]; FILE_BUF tem; int new_lineno; *************** skip_if_group (ip, any) *** 3672,3680 **** FILE_BUF *ip; int any; { ! register U_CHAR *bp = ip->bufp, *cp; ! register U_CHAR *endb = ip->buf + ip->length; ! struct directive *kt; IF_STACK_FRAME *save_if_stack = if_stack; /* don't pop past here */ U_CHAR *beg_of_line = bp; --- 3732,3740 ---- FILE_BUF *ip; int any; { ! U_CHAR *bp = ip->bufp, *cp; ! U_CHAR *endb = ip->buf + ip->length; ! const struct directive *kt; IF_STACK_FRAME *save_if_stack = if_stack; /* don't pop past here */ U_CHAR *beg_of_line = bp; *************** do_endif (buf, limit, op) *** 3892,3902 **** */ static U_CHAR * skip_to_end_of_comment (ip, line_counter) ! register FILE_BUF *ip; int *line_counter; /* place to remember newlines, or NULL */ { ! register U_CHAR *limit = ip->buf + ip->length; ! register U_CHAR *bp = ip->bufp; FILE_BUF *op = &outbuf; /* JF */ int output = put_out_comments && !line_counter; --- 3952,3962 ---- */ static U_CHAR * skip_to_end_of_comment (ip, line_counter) ! FILE_BUF *ip; int *line_counter; /* place to remember newlines, or NULL */ { ! U_CHAR *limit = ip->buf + ip->length; ! U_CHAR *bp = ip->bufp; FILE_BUF *op = &outbuf; /* JF */ int output = put_out_comments && !line_counter; *************** skip_to_end_of_comment (ip, line_counter *** 3955,3968 **** */ static U_CHAR * skip_quoted_string (bp, limit, start_line, count_newlines, backslash_newlines_p, eofp) ! register const U_CHAR *bp; ! register const U_CHAR *limit; int start_line; int *count_newlines; int *backslash_newlines_p; int *eofp; { ! register U_CHAR c, match; match = *bp++; while (1) { --- 4015,4028 ---- */ static U_CHAR * skip_quoted_string (bp, limit, start_line, count_newlines, backslash_newlines_p, eofp) ! const U_CHAR *bp; ! const U_CHAR *limit; int start_line; int *count_newlines; int *backslash_newlines_p; int *eofp; { ! U_CHAR c, match; match = *bp++; while (1) { *************** macroexpand (hp, op) *** 4071,4077 **** { int nargs; DEFINITION *defn = hp->value.defn; ! register U_CHAR *xbuf; int xbuf_len; int start_line = instack[indepth].lineno; --- 4131,4137 ---- { int nargs; DEFINITION *defn = hp->value.defn; ! U_CHAR *xbuf; int xbuf_len; int start_line = instack[indepth].lineno; *************** macroexpand (hp, op) *** 4086,4092 **** nargs = defn->nargs; if (nargs >= 0) { ! register int i; struct argdata *args; const char *parse_error = 0; --- 4146,4152 ---- nargs = defn->nargs; if (nargs >= 0) { ! int i; struct argdata *args; const char *parse_error = 0; *************** macroexpand (hp, op) *** 4110,4116 **** = macarg ((i < nargs || (nargs == 0 && i == 0)) ? &args[i] : 0); if (parse_error) { ! error_with_line (line_for_error (start_line), parse_error); break; } i++; --- 4170,4176 ---- = macarg ((i < nargs || (nargs == 0 && i == 0)) ? &args[i] : 0); if (parse_error) { ! error_with_line (line_for_error (start_line), "%s", parse_error); break; } i++; *************** macroexpand (hp, op) *** 4118,4125 **** /* If we got one arg but it was just whitespace, call that 0 args. */ if (i == 1) { ! register const U_CHAR *bp = args[0].raw; ! register const U_CHAR *lim = bp + args[0].raw_length; while (bp != lim && is_space (*bp)) bp++; if (bp == lim) i = 0; --- 4178,4185 ---- /* If we got one arg but it was just whitespace, call that 0 args. */ if (i == 1) { ! const U_CHAR *bp = args[0].raw; ! const U_CHAR *lim = bp + args[0].raw_length; while (bp != lim && is_space (*bp)) bp++; if (bp == lim) i = 0; *************** macroexpand (hp, op) *** 4149,4160 **** xbuf = defn->expansion; xbuf_len = defn->length; } else { ! register U_CHAR *exp = defn->expansion; ! register int offset; /* offset in expansion, copied a piece at a time */ ! register int totlen; /* total amount of exp buffer filled so far */ ! register struct reflist *ap; /* Macro really takes args. Compute the expansion of this call. */ --- 4209,4220 ---- xbuf = defn->expansion; xbuf_len = defn->length; } else { ! U_CHAR *exp = defn->expansion; ! int offset; /* offset in expansion, copied a piece at a time */ ! int totlen; /* total amount of exp buffer filled so far */ ! struct reflist *ap; /* Macro really takes args. Compute the expansion of this call. */ *************** macroexpand (hp, op) *** 4176,4182 **** of where we are copying from. */ offset = totlen = 0; for (ap = defn->pattern; ap != NULL; ap = ap->next) { ! register struct argdata *arg = &args[ap->argno]; for (i = 0; i < ap->nchars; i++) xbuf[totlen++] = exp[offset++]; --- 4236,4242 ---- of where we are copying from. */ offset = totlen = 0; for (ap = defn->pattern; ap != NULL; ap = ap->next) { ! struct argdata *arg = &args[ap->argno]; for (i = 0; i < ap->nchars; i++) xbuf[totlen++] = exp[offset++]; *************** macroexpand (hp, op) *** 4307,4313 **** /* Now put the expansion on the input stack so our caller will commence reading from it. */ { ! register FILE_BUF *ip2; ip2 = &instack[++indepth]; --- 4367,4373 ---- /* Now put the expansion on the input stack so our caller will commence reading from it. */ { ! FILE_BUF *ip2; ip2 = &instack[++indepth]; *************** macroexpand (hp, op) *** 4329,4335 **** static const char * macarg (argptr) ! register struct argdata *argptr; { FILE_BUF *ip = &instack[indepth]; int paren = 0; --- 4389,4395 ---- static const char * macarg (argptr) ! struct argdata *argptr; { FILE_BUF *ip = &instack[indepth]; int paren = 0; *************** macarg (argptr) *** 4415,4422 **** if (argptr != 0) { FILE_BUF obuf; ! register const U_CHAR *buf, *lim; ! register int totlen; obuf = expand_to_temp_buffer (argptr->raw, argptr->raw + argptr->raw_length, --- 4475,4482 ---- if (argptr != 0) { FILE_BUF obuf; ! const U_CHAR *buf, *lim; ! int totlen; obuf = expand_to_temp_buffer (argptr->raw, argptr->raw + argptr->raw_length, *************** macarg (argptr) *** 4431,4437 **** totlen = 0; while (buf != lim) { ! register U_CHAR c = *buf++; totlen++; /* Internal sequences of whitespace are replaced by one space in most cases, but not always. So count all the whitespace --- 4491,4497 ---- totlen = 0; while (buf != lim) { ! U_CHAR c = *buf++; totlen++; /* Internal sequences of whitespace are replaced by one space in most cases, but not always. So count all the whitespace *************** macarg (argptr) *** 4461,4470 **** static U_CHAR * macarg1 (start, limit, depthptr, newlines, comments) U_CHAR *start; ! register const U_CHAR *limit; int *depthptr, *newlines, *comments; { ! register U_CHAR *bp = start; while (bp < limit) { switch (*bp) { --- 4521,4530 ---- static U_CHAR * macarg1 (start, limit, depthptr, newlines, comments) U_CHAR *start; ! const U_CHAR *limit; int *depthptr, *newlines, *comments; { ! U_CHAR *bp = start; while (bp < limit) { switch (*bp) { *************** discard_comments (start, length, newline *** 4552,4561 **** int length; int newlines; { ! register U_CHAR *ibp; ! register U_CHAR *obp; ! register const U_CHAR *limit; ! register int c; /* If we have newlines to duplicate, copy everything that many characters up. Then, in the second part, --- 4612,4621 ---- int length; int newlines; { ! U_CHAR *ibp; ! U_CHAR *obp; ! const U_CHAR *limit; ! int c; /* If we have newlines to duplicate, copy everything that many characters up. Then, in the second part, *************** v_message (mtype, line, msgid, ap) *** 4649,4655 **** const char *fname = 0; int i; ! if (mtype == WARNING && inhibit_warnings) return; for (i = indepth; i >= 0; i--) --- 4709,4715 ---- const char *fname = 0; int i; ! if (mtype == MT_WARNING && inhibit_warnings) return; for (i = indepth; i >= 0; i--) *************** v_message (mtype, line, msgid, ap) *** 4665,4677 **** else fprintf (stderr, "%s: ", progname); ! if (mtype == WARNING) ! fputs ("warning: ", stderr); ! vfprintf (stderr, msgid, ap); putc ('\n', stderr); ! if (mtype == ERROR) errors++; } --- 4725,4737 ---- else fprintf (stderr, "%s: ", progname); ! if (mtype == MT_WARNING) ! fputs (_("warning: "), stderr); ! vfprintf (stderr, _(msgid), ap); putc ('\n', stderr); ! if (mtype == MT_ERROR) errors++; } *************** v_message (mtype, line, msgid, ap) *** 4681,4717 **** void error VPARAMS ((const char *msgid, ...)) { ! #ifndef ANSI_PROTOTYPES ! const char *msgid; ! #endif ! va_list ap; ! ! VA_START(ap, msgid); ! ! #ifndef ANSI_PROTOTYPES ! msgid = va_arg (ap, const char *); ! #endif ! v_message (ERROR, 0, msgid, ap); } void error_with_line VPARAMS ((int line, const char *msgid, ...)) { ! #ifndef ANSI_PROTOTYPES ! int line; ! const char *msgid; ! #endif ! va_list ap; ! ! VA_START(ap, msgid); ! ! #ifndef ANSI_PROTOTYPES ! line = va_arg (ap, int); ! msgid = va_arg (ap, const char *); ! #endif ! v_message (ERROR, line, msgid, ap); } /* Error including a message from `errno'. */ --- 4741,4762 ---- void error VPARAMS ((const char *msgid, ...)) { ! VA_OPEN(ap, msgid); ! VA_FIXEDARG (ap, const char *, msgid); ! v_message (MT_ERROR, 0, msgid, ap); ! VA_CLOSE (ap); } void error_with_line VPARAMS ((int line, const char *msgid, ...)) { ! VA_OPEN(ap, msgid); ! VA_FIXEDARG (ap, int, line); ! VA_FIXEDARG (ap, const char *, msgid); ! v_message (MT_ERROR, line, msgid, ap); ! VA_CLOSE (ap); } /* Error including a message from `errno'. */ *************** error_from_errno (name) *** 4726,4760 **** void warning VPARAMS ((const char *msgid, ...)) { ! #ifndef ANSI_PROTOTYPES ! const char *msgid; ! #endif ! va_list ap; ! ! VA_START(ap, msgid); ! ! #ifndef ANSI_PROTOTYPES ! msgid = va_arg (ap, const char *); ! #endif ! v_message (WARNING, 0, msgid, ap); } void fatal VPARAMS ((const char *msgid, ...)) { ! #ifndef ANSI_PROTOTYPES ! const char *msgid; ! #endif ! va_list ap; ! ! VA_START(ap, msgid); ! ! #ifndef ANSI_PROTOTYPES ! msgid = va_arg (ap, const char *); ! #endif ! v_message (FATAL, 0, msgid, ap); exit (FATAL_EXIT_CODE); } --- 4771,4791 ---- void warning VPARAMS ((const char *msgid, ...)) { ! VA_OPEN(ap, msgid); ! VA_FIXEDARG (ap, const char *, msgid); ! v_message (MT_WARNING, 0, msgid, ap); ! VA_CLOSE (ap); } void fatal VPARAMS ((const char *msgid, ...)) { ! VA_OPEN(ap, msgid); ! VA_FIXEDARG (ap, const char *, msgid); ! v_message (MT_FATAL, 0, msgid, ap); ! VA_CLOSE (ap); exit (FATAL_EXIT_CODE); } *************** fancy_abort (line, func) *** 4764,4770 **** int line; const char *func; { ! fatal ("Internal error in %s, at tradcpp.c:%d\n\ Please submit a full bug report.\n\ See %s for instructions.", func, line, GCCBUGURL); } --- 4795,4801 ---- int line; const char *func; { ! fatal ("internal error in %s, at tradcpp.c:%d\n\ Please submit a full bug report.\n\ See %s for instructions.", func, line, GCCBUGURL); } *************** line_for_error (line) *** 4821,4830 **** static void grow_outbuf (obuf, needed) ! register FILE_BUF *obuf; ! register int needed; { ! register U_CHAR *p; int minsize; if (obuf->length - (obuf->bufp - obuf->buf) > needed) --- 4852,4861 ---- static void grow_outbuf (obuf, needed) ! FILE_BUF *obuf; ! int needed; { ! U_CHAR *p; int minsize; if (obuf->length - (obuf->bufp - obuf->buf) > needed) *************** install (name, len, type, hash) *** 4868,4876 **** int hash; /* watch out here if sizeof (U_CHAR *) != sizeof (int) */ { ! register HASHNODE *hp; ! register int bucket; ! register const U_CHAR *p; U_CHAR *q; if (len < 0) { --- 4899,4907 ---- int hash; /* watch out here if sizeof (U_CHAR *) != sizeof (int) */ { ! HASHNODE *hp; ! int bucket; ! const U_CHAR *p; U_CHAR *q; if (len < 0) { *************** lookup (name, len, hash) *** 4915,4922 **** int len; int hash; { ! register const U_CHAR *bp; ! register HASHNODE *bucket; if (len < 0) { for (bp = name; is_idchar (*bp); bp++) ; --- 4946,4953 ---- int len; int hash; { ! const U_CHAR *bp; ! HASHNODE *bucket; if (len < 0) { for (bp = name; is_idchar (*bp); bp++) ; *************** delete_macro (hp) *** 4973,4983 **** */ static int hashf (name, len, hashsize) ! register const U_CHAR *name; ! register int len; int hashsize; { ! register int r = 0; while (len--) r = HASHSTEP (r, *name++); --- 5004,5014 ---- */ static int hashf (name, len, hashsize) ! const U_CHAR *name; ! int len; int hashsize; { ! int r = 0; while (len--) r = HASHSTEP (r, *name++); *************** dump_all_macros () *** 4993,5003 **** int bucket; for (bucket = 0; bucket < HASHSIZE; bucket++) { ! register HASHNODE *hp; for (hp = hashtab[bucket]; hp; hp= hp->next) { if (hp->type == T_MACRO) { ! register DEFINITION *defn = hp->value.defn; struct reflist *ap; int offset; int concat; --- 5024,5034 ---- int bucket; for (bucket = 0; bucket < HASHSIZE; bucket++) { ! HASHNODE *hp; for (hp = hashtab[bucket]; hp; hp= hp->next) { if (hp->type == T_MACRO) { ! DEFINITION *defn = hp->value.defn; struct reflist *ap; int offset; int concat; *************** dump_arg_n (defn, argnum) *** 5079,5085 **** DEFINITION *defn; int argnum; { ! register const U_CHAR *p = defn->argnames; while (argnum + 1 < defn->nargs) { p = (const U_CHAR *) strchr ((const char *)p, ' ') + 1; argnum++; --- 5110,5116 ---- DEFINITION *defn; int argnum; { ! const U_CHAR *p = defn->argnames; while (argnum + 1 < defn->nargs) { p = (const U_CHAR *) strchr ((const char *)p, ' ') + 1; argnum++; *************** initialize_builtins () *** 5124,5129 **** --- 5155,5163 ---- #endif install_value ("__REGISTER_PREFIX__", REGISTER_PREFIX); install_value ("__USER_LABEL_PREFIX__", user_label_prefix); + + if (flag_signed_char == 0) + install_value ("__CHAR_UNSIGNED__", "1"); } #undef DSC #undef install_spec *************** run_directive (str, len, type) *** 5136,5142 **** size_t len; enum node_type type; { ! struct directive *kt; FILE_BUF *ip = &instack[++indepth]; ip->fname = "*command line*"; --- 5170,5176 ---- size_t len; enum node_type type; { ! const struct directive *kt; FILE_BUF *ip = &instack[++indepth]; ip->fname = "*command line*"; diff -Nrc3pad gcc-3.0.4/gcc/tradcpp.h gcc-3.1/gcc/tradcpp.h *** gcc-3.0.4/gcc/tradcpp.h Mon Dec 11 19:38:15 2000 --- gcc-3.1/gcc/tradcpp.h Sat Feb 2 18:56:35 2002 *************** You should have received a copy of the G *** 19,26 **** along with this program; if not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ! #ifndef _TRADCPP_H_ ! #define _TRADCPP_H_ extern void error PARAMS ((const char *msgid, ...)) ATTRIBUTE_PRINTF_1; extern void warning PARAMS ((const char *msgid, ...)) ATTRIBUTE_PRINTF_1; --- 19,26 ---- along with this program; if not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ! #ifndef GCC_TRADCPP_H ! #define GCC_TRADCPP_H extern void error PARAMS ((const char *msgid, ...)) ATTRIBUTE_PRINTF_1; extern void warning PARAMS ((const char *msgid, ...)) ATTRIBUTE_PRINTF_1; *************** extern void fancy_abort PARAMS ((int, co *** 35,44 **** extern struct hashnode *lookup PARAMS ((const unsigned char *, int, int)); extern int parse_c_expression PARAMS ((const char *)); /* in tradcif.y */ extern int test_assertion PARAMS ((unsigned char **)); #define is_idchar(x) ISIDNUM(x) #define is_idstart(x) ISIDST(x) #define is_space(x) ISSPACE(x) #define is_nvspace(x) (IS_NVSPACE(x) && x != '\0') ! #endif /* ! _TRADCPP_H_ */ --- 35,45 ---- extern struct hashnode *lookup PARAMS ((const unsigned char *, int, int)); extern int parse_c_expression PARAMS ((const char *)); /* in tradcif.y */ extern int test_assertion PARAMS ((unsigned char **)); + extern int flag_signed_char; #define is_idchar(x) ISIDNUM(x) #define is_idstart(x) ISIDST(x) #define is_space(x) ISSPACE(x) #define is_nvspace(x) (IS_NVSPACE(x) && x != '\0') ! #endif /* ! GCC_TRADCPP_H */ diff -Nrc3pad gcc-3.0.4/gcc/tree-dump.c gcc-3.1/gcc/tree-dump.c *** gcc-3.0.4/gcc/tree-dump.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/tree-dump.c Sat Mar 16 01:07:54 2002 *************** *** 0 **** --- 1,936 ---- + /* Tree-dumping functionality for intermediate representation. + Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc. + Written by Mark Mitchell + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2, or (at your option) any later + version. + + GCC is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to the Free + Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + + #include "config.h" + #include "system.h" + #include "tree.h" + #include "c-tree.h" + #include "splay-tree.h" + #include "diagnostic.h" + #include "toplev.h" + #include "tree-dump.h" + #include "langhooks.h" + + static unsigned int queue PARAMS ((dump_info_p, tree, int)); + static void dump_index PARAMS ((dump_info_p, unsigned int)); + static void dequeue_and_dump PARAMS ((dump_info_p)); + static void dump_new_line PARAMS ((dump_info_p)); + static void dump_maybe_newline PARAMS ((dump_info_p)); + static void dump_string_field PARAMS ((dump_info_p, const char *, const char *)); + + /* Add T to the end of the queue of nodes to dump. Returns the index + assigned to T. */ + + static unsigned int + queue (di, t, flags) + dump_info_p di; + tree t; + int flags; + { + dump_queue_p dq; + dump_node_info_p dni; + unsigned int index; + + /* Assign the next available index to T. */ + index = ++di->index; + + /* Obtain a new queue node. */ + if (di->free_list) + { + dq = di->free_list; + di->free_list = dq->next; + } + else + dq = (dump_queue_p) xmalloc (sizeof (struct dump_queue)); + + /* Create a new entry in the splay-tree. */ + dni = (dump_node_info_p) xmalloc (sizeof (struct dump_node_info)); + dni->index = index; + dni->binfo_p = ((flags & DUMP_BINFO) != 0); + dq->node = splay_tree_insert (di->nodes, (splay_tree_key) t, + (splay_tree_value) dni); + + /* Add it to the end of the queue. */ + dq->next = 0; + if (!di->queue_end) + di->queue = dq; + else + di->queue_end->next = dq; + di->queue_end = dq; + + /* Return the index. */ + return index; + } + + static void + dump_index (di, index) + dump_info_p di; + unsigned int index; + { + fprintf (di->stream, "@%-6u ", index); + di->column += 8; + } + + /* If T has not already been output, queue it for subsequent output. + FIELD is a string to print before printing the index. Then, the + index of T is printed. */ + + void + queue_and_dump_index (di, field, t, flags) + dump_info_p di; + const char *field; + tree t; + int flags; + { + unsigned int index; + splay_tree_node n; + + /* If there's no node, just return. This makes for fewer checks in + our callers. */ + if (!t) + return; + + /* See if we've already queued or dumped this node. */ + n = splay_tree_lookup (di->nodes, (splay_tree_key) t); + if (n) + index = ((dump_node_info_p) n->value)->index; + else + /* If we haven't, add it to the queue. */ + index = queue (di, t, flags); + + /* Print the index of the node. */ + dump_maybe_newline (di); + fprintf (di->stream, "%-4s: ", field); + di->column += 6; + dump_index (di, index); + } + + /* Dump the type of T. */ + + void + queue_and_dump_type (di, t) + dump_info_p di; + tree t; + { + queue_and_dump_index (di, "type", TREE_TYPE (t), DUMP_NONE); + } + + /* Dump column control */ + #define SOL_COLUMN 25 /* Start of line column. */ + #define EOL_COLUMN 55 /* End of line column. */ + #define COLUMN_ALIGNMENT 15 /* Alignment. */ + + /* Insert a new line in the dump output, and indent to an appropriate + place to start printing more fields. */ + + static void + dump_new_line (di) + dump_info_p di; + { + fprintf (di->stream, "\n%*s", SOL_COLUMN, ""); + di->column = SOL_COLUMN; + } + + /* If necessary, insert a new line. */ + + static void + dump_maybe_newline (di) + dump_info_p di; + { + int extra; + + /* See if we need a new line. */ + if (di->column > EOL_COLUMN) + dump_new_line (di); + /* See if we need any padding. */ + else if ((extra = (di->column - SOL_COLUMN) % COLUMN_ALIGNMENT) != 0) + { + fprintf (di->stream, "%*s", COLUMN_ALIGNMENT - extra, ""); + di->column += COLUMN_ALIGNMENT - extra; + } + } + + /* Dump pointer PTR using FIELD to identify it. */ + + void + dump_pointer (di, field, ptr) + dump_info_p di; + const char *field; + void *ptr; + { + dump_maybe_newline (di); + fprintf (di->stream, "%-4s: %-8lx ", field, (long) ptr); + di->column += 15; + } + + /* Dump integer I using FIELD to identify it. */ + + void + dump_int (di, field, i) + dump_info_p di; + const char *field; + int i; + { + dump_maybe_newline (di); + fprintf (di->stream, "%-4s: %-7d ", field, i); + di->column += 14; + } + + /* Dump the string S. */ + + void + dump_string (di, string) + dump_info_p di; + const char *string; + { + dump_maybe_newline (di); + fprintf (di->stream, "%-13s ", string); + if (strlen (string) > 13) + di->column += strlen (string) + 1; + else + di->column += 14; + } + + /* Dump the string field S. */ + + static void + dump_string_field (di, field, string) + dump_info_p di; + const char *field; + const char *string; + { + dump_maybe_newline (di); + fprintf (di->stream, "%-4s: %-7s ", field, string); + if (strlen (string) > 7) + di->column += 6 + strlen (string) + 1; + else + di->column += 14; + } + + /* Dump information common to statements from STMT. */ + + void + dump_stmt (di, t) + dump_info_p di; + tree t; + { + dump_int (di, "line", STMT_LINENO (t)); + } + + /* Dump the next statement after STMT. */ + + void + dump_next_stmt (di, t) + dump_info_p di; + tree t; + { + dump_child ("next", TREE_CHAIN (t)); + } + + /* Dump the next node in the queue. */ + + static void + dequeue_and_dump (di) + dump_info_p di; + { + dump_queue_p dq; + splay_tree_node stn; + dump_node_info_p dni; + tree t; + unsigned int index; + enum tree_code code; + char code_class; + const char* code_name; + + /* Get the next node from the queue. */ + dq = di->queue; + stn = dq->node; + t = (tree) stn->key; + dni = (dump_node_info_p) stn->value; + index = dni->index; + + /* Remove the node from the queue, and put it on the free list. */ + di->queue = dq->next; + if (!di->queue) + di->queue_end = 0; + dq->next = di->free_list; + di->free_list = dq; + + /* Print the node index. */ + dump_index (di, index); + /* And the type of node this is. */ + if (dni->binfo_p) + code_name = "binfo"; + else + code_name = tree_code_name[(int) TREE_CODE (t)]; + fprintf (di->stream, "%-16s ", code_name); + di->column = 25; + + /* Figure out what kind of node this is. */ + code = TREE_CODE (t); + code_class = TREE_CODE_CLASS (code); + + /* Although BINFOs are TREE_VECs, we dump them specially so as to be + more informative. */ + if (dni->binfo_p) + { + if (TREE_VIA_PUBLIC (t)) + dump_string (di, "pub"); + else if (TREE_VIA_PROTECTED (t)) + dump_string (di, "prot"); + else if (TREE_VIA_PRIVATE (t)) + dump_string (di, "priv"); + if (TREE_VIA_VIRTUAL (t)) + dump_string (di, "virt"); + + dump_child ("type", BINFO_TYPE (t)); + dump_child ("base", BINFO_BASETYPES (t)); + + goto done; + } + + /* We can knock off a bunch of expression nodes in exactly the same + way. */ + if (IS_EXPR_CODE_CLASS (code_class)) + { + /* If we're dumping children, dump them now. */ + queue_and_dump_type (di, t); + + switch (code_class) + { + case '1': + dump_child ("op 0", TREE_OPERAND (t, 0)); + break; + + case '2': + case '<': + dump_child ("op 0", TREE_OPERAND (t, 0)); + dump_child ("op 1", TREE_OPERAND (t, 1)); + break; + + case 'e': + /* These nodes are handled explicitly below. */ + break; + + default: + abort (); + } + } + else if (DECL_P (t)) + { + /* All declarations have names. */ + if (DECL_NAME (t)) + dump_child ("name", DECL_NAME (t)); + if (DECL_ASSEMBLER_NAME_SET_P (t) + && DECL_ASSEMBLER_NAME (t) != DECL_NAME (t)) + dump_child ("mngl", DECL_ASSEMBLER_NAME (t)); + /* And types. */ + queue_and_dump_type (di, t); + dump_child ("scpe", DECL_CONTEXT (t)); + /* And a source position. */ + if (DECL_SOURCE_FILE (t)) + { + const char *filename = strrchr (DECL_SOURCE_FILE (t), '/'); + if (!filename) + filename = DECL_SOURCE_FILE (t); + else + /* Skip the slash. */ + ++filename; + + dump_maybe_newline (di); + fprintf (di->stream, "srcp: %s:%-6d ", filename, + DECL_SOURCE_LINE (t)); + di->column += 6 + strlen (filename) + 8; + } + /* And any declaration can be compiler-generated. */ + if (DECL_ARTIFICIAL (t)) + dump_string (di, "artificial"); + if (TREE_CHAIN (t) && !dump_flag (di, TDF_SLIM, NULL)) + dump_child ("chan", TREE_CHAIN (t)); + } + else if (code_class == 't') + { + /* All types have qualifiers. */ + int quals = (*lang_hooks.tree_dump.type_quals) (t); + + if (quals != TYPE_UNQUALIFIED) + { + fprintf (di->stream, "qual: %c%c%c ", + (quals & TYPE_QUAL_CONST) ? 'c' : ' ', + (quals & TYPE_QUAL_VOLATILE) ? 'v' : ' ', + (quals & TYPE_QUAL_RESTRICT) ? 'r' : ' '); + di->column += 14; + } + + /* All types have associated declarations. */ + dump_child ("name", TYPE_NAME (t)); + + /* All types have a main variant. */ + if (TYPE_MAIN_VARIANT (t) != t) + dump_child ("unql", TYPE_MAIN_VARIANT (t)); + + /* And sizes. */ + dump_child ("size", TYPE_SIZE (t)); + + /* All types have alignments. */ + dump_int (di, "algn", TYPE_ALIGN (t)); + } + else if (code_class == 'c') + /* All constants can have types. */ + queue_and_dump_type (di, t); + + /* Give the language-specific code a chance to print something. If + it's completely taken care of things, don't bother printing + anything more ourselves. */ + if ((*lang_hooks.tree_dump.dump_tree) (di, t)) + goto done; + + /* Now handle the various kinds of nodes. */ + switch (code) + { + int i; + + case IDENTIFIER_NODE: + dump_string_field (di, "strg", IDENTIFIER_POINTER (t)); + dump_int (di, "lngt", IDENTIFIER_LENGTH (t)); + break; + + case TREE_LIST: + dump_child ("purp", TREE_PURPOSE (t)); + dump_child ("valu", TREE_VALUE (t)); + dump_child ("chan", TREE_CHAIN (t)); + break; + + case TREE_VEC: + dump_int (di, "lngt", TREE_VEC_LENGTH (t)); + for (i = 0; i < TREE_VEC_LENGTH (t); ++i) + { + char buffer[32]; + sprintf (buffer, "%u", i); + dump_child (buffer, TREE_VEC_ELT (t, i)); + } + break; + + case INTEGER_TYPE: + case ENUMERAL_TYPE: + dump_int (di, "prec", TYPE_PRECISION (t)); + if (TREE_UNSIGNED (t)) + dump_string (di, "unsigned"); + dump_child ("min", TYPE_MIN_VALUE (t)); + dump_child ("max", TYPE_MAX_VALUE (t)); + + if (code == ENUMERAL_TYPE) + dump_child ("csts", TYPE_VALUES (t)); + break; + + case REAL_TYPE: + dump_int (di, "prec", TYPE_PRECISION (t)); + break; + + case POINTER_TYPE: + dump_child ("ptd", TREE_TYPE (t)); + break; + + case REFERENCE_TYPE: + dump_child ("refd", TREE_TYPE (t)); + break; + + case METHOD_TYPE: + dump_child ("clas", TYPE_METHOD_BASETYPE (t)); + /* Fall through. */ + + case FUNCTION_TYPE: + dump_child ("retn", TREE_TYPE (t)); + dump_child ("prms", TYPE_ARG_TYPES (t)); + break; + + case ARRAY_TYPE: + dump_child ("elts", TREE_TYPE (t)); + dump_child ("domn", TYPE_DOMAIN (t)); + break; + + case RECORD_TYPE: + case UNION_TYPE: + if (TREE_CODE (t) == RECORD_TYPE) + dump_string (di, "struct"); + else + dump_string (di, "union"); + + dump_child ("flds", TYPE_FIELDS (t)); + dump_child ("fncs", TYPE_METHODS (t)); + queue_and_dump_index (di, "binf", TYPE_BINFO (t), + DUMP_BINFO); + break; + + case CONST_DECL: + dump_child ("cnst", DECL_INITIAL (t)); + break; + + case VAR_DECL: + case PARM_DECL: + case FIELD_DECL: + case RESULT_DECL: + if (TREE_CODE (t) == PARM_DECL) + dump_child ("argt", DECL_ARG_TYPE (t)); + else + dump_child ("init", DECL_INITIAL (t)); + dump_child ("size", DECL_SIZE (t)); + dump_int (di, "algn", DECL_ALIGN (t)); + + if (TREE_CODE (t) == FIELD_DECL) + { + if (DECL_C_BIT_FIELD (t)) + dump_string (di, "bitfield"); + if (DECL_FIELD_OFFSET (t)) + dump_child ("bpos", bit_position (t)); + } + else if (TREE_CODE (t) == VAR_DECL + || TREE_CODE (t) == PARM_DECL) + { + dump_int (di, "used", TREE_USED (t)); + if (DECL_REGISTER (t)) + dump_string (di, "register"); + } + break; + + case FUNCTION_DECL: + dump_child ("args", DECL_ARGUMENTS (t)); + if (DECL_EXTERNAL (t)) + dump_string (di, "undefined"); + if (TREE_PUBLIC (t)) + dump_string (di, "extern"); + else + dump_string (di, "static"); + if (DECL_LANG_SPECIFIC (t) && !dump_flag (di, TDF_SLIM, t)) + dump_child ("body", DECL_SAVED_TREE (t)); + break; + + case ASM_STMT: + dump_stmt (di, t); + if (ASM_VOLATILE_P (t)) + dump_string (di, "volatile"); + dump_child ("strg", ASM_STRING (t)); + dump_child ("outs", ASM_OUTPUTS (t)); + dump_child ("ins", ASM_INPUTS (t)); + dump_child ("clbr", ASM_CLOBBERS (t)); + dump_next_stmt (di, t); + break; + + case BREAK_STMT: + case CONTINUE_STMT: + dump_stmt (di, t); + dump_next_stmt (di, t); + break; + + case CASE_LABEL: + /* Note that a case label is not like other statements; there is + no way to get the line-number of a case label. */ + dump_child ("low", CASE_LOW (t)); + dump_child ("high", CASE_HIGH (t)); + dump_next_stmt (di, t); + break; + + case CLEANUP_STMT: + dump_stmt (di, t); + dump_child ("decl", CLEANUP_DECL (t)); + dump_child ("expr", CLEANUP_EXPR (t)); + dump_next_stmt (di, t); + break; + + case COMPOUND_STMT: + dump_stmt (di, t); + dump_child ("body", COMPOUND_BODY (t)); + dump_next_stmt (di, t); + break; + + case DECL_STMT: + dump_stmt (di, t); + dump_child ("decl", DECL_STMT_DECL (t)); + dump_next_stmt (di, t); + break; + + case DO_STMT: + dump_stmt (di, t); + dump_child ("body", DO_BODY (t)); + dump_child ("cond", DO_COND (t)); + dump_next_stmt (di, t); + break; + + case EXPR_STMT: + dump_stmt (di, t); + dump_child ("expr", EXPR_STMT_EXPR (t)); + dump_next_stmt (di, t); + break; + + case FOR_STMT: + dump_stmt (di, t); + dump_child ("init", FOR_INIT_STMT (t)); + dump_child ("cond", FOR_COND (t)); + dump_child ("expr", FOR_EXPR (t)); + dump_child ("body", FOR_BODY (t)); + dump_next_stmt (di, t); + break; + + case GOTO_STMT: + dump_stmt (di, t); + dump_child ("dest", GOTO_DESTINATION (t)); + dump_next_stmt (di, t); + break; + + case IF_STMT: + dump_stmt (di, t); + dump_child ("cond", IF_COND (t)); + dump_child ("then", THEN_CLAUSE (t)); + dump_child ("else", ELSE_CLAUSE (t)); + dump_next_stmt (di, t); + break; + + case LABEL_STMT: + dump_stmt (di, t); + dump_child ("labl", LABEL_STMT_LABEL (t)); + dump_next_stmt (di, t); + break; + + case RETURN_STMT: + dump_stmt (di, t); + dump_child ("expr", RETURN_EXPR (t)); + dump_next_stmt (di, t); + break; + + case SWITCH_STMT: + dump_stmt (di, t); + dump_child ("cond", SWITCH_COND (t)); + dump_child ("body", SWITCH_BODY (t)); + dump_next_stmt (di, t); + break; + + case WHILE_STMT: + dump_stmt (di, t); + dump_child ("cond", WHILE_COND (t)); + dump_child ("body", WHILE_BODY (t)); + dump_next_stmt (di, t); + break; + + case SCOPE_STMT: + dump_stmt (di, t); + if (SCOPE_BEGIN_P (t)) + dump_string (di, "begn"); + else + dump_string (di, "end"); + if (SCOPE_NULLIFIED_P (t)) + dump_string (di, "null"); + if (!SCOPE_NO_CLEANUPS_P (t)) + dump_string (di, "clnp"); + dump_next_stmt (di, t); + break; + + case INTEGER_CST: + if (TREE_INT_CST_HIGH (t)) + dump_int (di, "high", TREE_INT_CST_HIGH (t)); + dump_int (di, "low", TREE_INT_CST_LOW (t)); + break; + + case STRING_CST: + fprintf (di->stream, "strg: %-7s ", TREE_STRING_POINTER (t)); + dump_int (di, "lngt", TREE_STRING_LENGTH (t)); + break; + + case TRUTH_NOT_EXPR: + case ADDR_EXPR: + case INDIRECT_REF: + case CLEANUP_POINT_EXPR: + case SAVE_EXPR: + /* These nodes are unary, but do not have code class `1'. */ + dump_child ("op 0", TREE_OPERAND (t, 0)); + break; + + case TRUTH_ANDIF_EXPR: + case TRUTH_ORIF_EXPR: + case INIT_EXPR: + case MODIFY_EXPR: + case COMPONENT_REF: + case COMPOUND_EXPR: + case ARRAY_REF: + case PREDECREMENT_EXPR: + case PREINCREMENT_EXPR: + case POSTDECREMENT_EXPR: + case POSTINCREMENT_EXPR: + /* These nodes are binary, but do not have code class `2'. */ + dump_child ("op 0", TREE_OPERAND (t, 0)); + dump_child ("op 1", TREE_OPERAND (t, 1)); + break; + + case COND_EXPR: + dump_child ("op 0", TREE_OPERAND (t, 0)); + dump_child ("op 1", TREE_OPERAND (t, 1)); + dump_child ("op 2", TREE_OPERAND (t, 2)); + break; + + case CALL_EXPR: + dump_child ("fn", TREE_OPERAND (t, 0)); + dump_child ("args", TREE_OPERAND (t, 1)); + break; + + case CONSTRUCTOR: + dump_child ("elts", TREE_OPERAND (t, 1)); + break; + + case STMT_EXPR: + dump_child ("stmt", STMT_EXPR_STMT (t)); + break; + + case BIND_EXPR: + dump_child ("vars", TREE_OPERAND (t, 0)); + dump_child ("body", TREE_OPERAND (t, 1)); + break; + + case LOOP_EXPR: + dump_child ("body", TREE_OPERAND (t, 0)); + break; + + case EXIT_EXPR: + dump_child ("cond", TREE_OPERAND (t, 0)); + break; + + case TARGET_EXPR: + dump_child ("decl", TREE_OPERAND (t, 0)); + dump_child ("init", TREE_OPERAND (t, 1)); + dump_child ("clnp", TREE_OPERAND (t, 2)); + /* There really are two possible places the initializer can be. + After RTL expansion, the second operand is moved to the + position of the fourth operand, and the second operand + becomes NULL. */ + dump_child ("init", TREE_OPERAND (t, 3)); + break; + + case EXPR_WITH_FILE_LOCATION: + dump_child ("expr", EXPR_WFL_NODE (t)); + break; + + default: + /* There are no additional fields to print. */ + break; + } + + done: + if (dump_flag (di, TDF_ADDRESS, NULL)) + dump_pointer (di, "addr", (void *)t); + + /* Terminate the line. */ + fprintf (di->stream, "\n"); + } + + /* Return non-zero if FLAG has been specified for the dump, and NODE + is not the root node of the dump. */ + + int dump_flag (di, flag, node) + dump_info_p di; + int flag; + tree node; + { + return (di->flags & flag) && (node != di->node); + } + + /* Dump T, and all its children, on STREAM. */ + + void + dump_node (t, flags, stream) + tree t; + int flags; + FILE *stream; + { + struct dump_info di; + dump_queue_p dq; + dump_queue_p next_dq; + + /* Initialize the dump-information structure. */ + di.stream = stream; + di.index = 0; + di.column = 0; + di.queue = 0; + di.queue_end = 0; + di.free_list = 0; + di.flags = flags; + di.node = t; + di.nodes = splay_tree_new (splay_tree_compare_pointers, 0, + (splay_tree_delete_value_fn) &free); + + /* Queue up the first node. */ + queue (&di, t, DUMP_NONE); + + /* Until the queue is empty, keep dumping nodes. */ + while (di.queue) + dequeue_and_dump (&di); + + /* Now, clean up. */ + for (dq = di.free_list; dq; dq = next_dq) + { + next_dq = dq->next; + free (dq); + } + splay_tree_delete (di.nodes); + } + + /* Define a tree dump switch. */ + struct dump_file_info + { + const char *const suffix; /* suffix to give output file. */ + const char *const swtch; /* command line switch */ + int flags; /* user flags */ + int state; /* state of play */ + }; + + /* Table of tree dump switches. This must be consistent with the + TREE_DUMP_INDEX enumeration in tree.h */ + static struct dump_file_info dump_files[TDI_end] = + { + {".tu", "dump-translation-unit", 0, 0}, + {".class", "dump-class-hierarchy", 0, 0}, + {".original", "dump-tree-original", 0, 0}, + {".optimized", "dump-tree-optimized", 0, 0}, + {".inlined", "dump-tree-inlined", 0, 0}, + }; + + /* Define a name->number mapping for a dump flag value. */ + struct dump_option_value_info + { + const char *const name; /* the name of the value */ + const int value; /* the value of the name */ + }; + + /* Table of dump options. This must be consistent with the TDF_* flags + in tree.h */ + static const struct dump_option_value_info dump_options[] = + { + {"address", TDF_ADDRESS}, + {"slim", TDF_SLIM}, + {"all", ~0}, + {NULL, 0} + }; + + /* Begin a tree dump for PHASE. Stores any user supplied flag in + *FLAG_PTR and returns a stream to write to. If the dump is not + enabled, returns NULL. + Multiple calls will reopen and append to the dump file. */ + + FILE * + dump_begin (phase, flag_ptr) + enum tree_dump_index phase; + int *flag_ptr; + { + FILE *stream; + char *name; + + if (!dump_files[phase].state) + return NULL; + + name = concat (dump_base_name, dump_files[phase].suffix, NULL); + stream = fopen (name, dump_files[phase].state < 0 ? "w" : "a"); + if (!stream) + error ("could not open dump file `%s'", name); + else + dump_files[phase].state = 1; + free (name); + if (flag_ptr) + *flag_ptr = dump_files[phase].flags; + + return stream; + } + + /* Returns non-zero if tree dump PHASE is enabled. */ + + int + dump_enabled_p (phase) + enum tree_dump_index phase; + { + return dump_files[phase].state; + } + + /* Returns the switch name of PHASE. */ + + const char * + dump_flag_name (phase) + enum tree_dump_index phase; + { + return dump_files[phase].swtch; + } + + /* Finish a tree dump for PHASE. STREAM is the stream created by + dump_begin. */ + + void + dump_end (phase, stream) + enum tree_dump_index phase ATTRIBUTE_UNUSED; + FILE *stream; + { + fclose (stream); + } + + /* Parse ARG as a dump switch. Return non-zero if it is, and store the + relevant details in the dump_files array. */ + + int + dump_switch_p (arg) + const char *arg; + { + unsigned ix; + const char *option_value; + + for (ix = 0; ix != TDI_end; ix++) + if ((option_value = skip_leading_substring (arg, dump_files[ix].swtch))) + { + const char *ptr = option_value; + int flags = 0; + + while (*ptr) + { + const struct dump_option_value_info *option_ptr; + const char *end_ptr; + unsigned length; + + while (*ptr == '-') + ptr++; + end_ptr = strchr (ptr, '-'); + if (!end_ptr) + end_ptr = ptr + strlen (ptr); + length = end_ptr - ptr; + + for (option_ptr = dump_options; option_ptr->name; + option_ptr++) + if (strlen (option_ptr->name) == length + && !memcmp (option_ptr->name, ptr, length)) + { + flags |= option_ptr->value; + goto found; + } + warning ("ignoring unknown option `%.*s' in `-f%s'", + length, ptr, dump_files[ix].swtch); + found:; + ptr = end_ptr; + } + + dump_files[ix].state = -1; + dump_files[ix].flags = flags; + + return 1; + } + return 0; + } diff -Nrc3pad gcc-3.0.4/gcc/tree-dump.h gcc-3.1/gcc/tree-dump.h *** gcc-3.0.4/gcc/tree-dump.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/tree-dump.h Thu Nov 22 02:32:52 2001 *************** *** 0 **** --- 1,95 ---- + /* Tree-dumping functionality for intermediate representation. + Copyright (C) 1999, 2000 Free Software Foundation, Inc. + Written by Mark Mitchell + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2, or (at your option) any later + version. + + GCC is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to the Free + Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + + #ifndef GCC_TREE_DUMP_H + #define GCC_TREE_DUMP_H + + /* Flags used with queue functions. */ + #define DUMP_NONE 0 + #define DUMP_BINFO 1 + + /* Information about a node to be dumped. */ + + typedef struct dump_node_info + { + /* The index for the node. */ + unsigned int index; + /* Nonzero if the node is a binfo. */ + unsigned int binfo_p : 1; + } *dump_node_info_p; + + /* A dump_queue is a link in the queue of things to be dumped. */ + + typedef struct dump_queue + { + /* The queued tree node. */ + splay_tree_node node; + /* The next node in the queue. */ + struct dump_queue *next; + } *dump_queue_p; + + /* A dump_info gives information about how we should perform the dump + and about the current state of the dump. */ + + struct dump_info + { + /* The stream on which to dump the information. */ + FILE *stream; + /* The original node. */ + tree node; + /* User flags. */ + int flags; + /* The next unused node index. */ + unsigned int index; + /* The next column. */ + unsigned int column; + /* The first node in the queue of nodes to be written out. */ + dump_queue_p queue; + /* The last node in the queue. */ + dump_queue_p queue_end; + /* Free queue nodes. */ + dump_queue_p free_list; + /* The tree nodes which we have already written out. The + keys are the addresses of the nodes; the values are the integer + indices we assigned them. */ + splay_tree nodes; + }; + + /* Dump the CHILD and its children. */ + #define dump_child(field, child) \ + queue_and_dump_index (di, field, child, DUMP_NONE) + + extern void dump_pointer + PARAMS ((dump_info_p, const char *, void *)); + extern void dump_int + PARAMS ((dump_info_p, const char *, int)); + extern void dump_string + PARAMS ((dump_info_p, const char *)); + extern void dump_stmt + PARAMS ((dump_info_p, tree)); + extern void dump_next_stmt + PARAMS ((dump_info_p, tree)); + extern void queue_and_dump_index + PARAMS ((dump_info_p, const char *, tree, int)); + extern void queue_and_dump_type + PARAMS ((dump_info_p, tree)); + + #endif /* ! GCC_TREE_DUMP_H */ diff -Nrc3pad gcc-3.0.4/gcc/tree-inline.c gcc-3.1/gcc/tree-inline.c *** gcc-3.0.4/gcc/tree-inline.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/tree-inline.c Wed Apr 17 01:43:57 2002 *************** *** 0 **** --- 1,1430 ---- + /* Control and data flow functions for trees. + Copyright 2001, 2002 Free Software Foundation, Inc. + Contributed by Alexandre Oliva + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GNU CC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU CC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + #include "config.h" + #include "system.h" + #include "toplev.h" + #include "tree.h" + #include "tree-inline.h" + #include "rtl.h" + #include "expr.h" + #include "flags.h" + #include "params.h" + #include "input.h" + #include "insn-config.h" + #include "integrate.h" + #include "varray.h" + #include "hashtab.h" + #include "splay-tree.h" + #include "langhooks.h" + + /* This should be eventually be generalized to other languages, but + this would require a shared function-as-trees infrastructure. */ + #include "c-common.h" + + /* 0 if we should not perform inlining. + 1 if we should expand functions calls inline at the tree level. + 2 if we should consider *all* functions to be inline + candidates. */ + + int flag_inline_trees = 0; + + /* To Do: + + o In order to make inlining-on-trees work, we pessimized + function-local static constants. In particular, they are now + always output, even when not addressed. Fix this by treating + function-local static constants just like global static + constants; the back-end already knows not to output them if they + are not needed. + + o Provide heuristics to clamp inlining of recursive template + calls? */ + + /* Data required for function inlining. */ + + typedef struct inline_data + { + /* A stack of the functions we are inlining. For example, if we are + compiling `f', which calls `g', which calls `h', and we are + inlining the body of `h', the stack will contain, `h', followed + by `g', followed by `f'. The first few elements of the stack may + contain other functions that we know we should not recurse into, + even though they are not directly being inlined. */ + varray_type fns; + /* The index of the first element of FNS that really represents an + inlined function. */ + unsigned first_inlined_fn; + /* The label to jump to when a return statement is encountered. If + this value is NULL, then return statements will simply be + remapped as return statements, rather than as jumps. */ + tree ret_label; + /* The map from local declarations in the inlined function to + equivalents in the function into which it is being inlined. */ + splay_tree decl_map; + /* Nonzero if we are currently within the cleanup for a + TARGET_EXPR. */ + int in_target_cleanup_p; + /* A stack of the TARGET_EXPRs that we are currently processing. */ + varray_type target_exprs; + /* A list of the functions current function has inlined. */ + varray_type inlined_fns; + /* The approximate number of statements we have inlined in the + current call stack. */ + int inlined_stmts; + /* We use the same mechanism to build clones that we do to perform + inlining. However, there are a few places where we need to + distinguish between those two situations. This flag is true if + we are cloning, rather than inlining. */ + bool cloning_p; + /* Hash table used to prevent walk_tree from visiting the same node + umpteen million times. */ + htab_t tree_pruner; + } inline_data; + + /* Prototypes. */ + + static tree initialize_inlined_parameters PARAMS ((inline_data *, tree, tree)); + static tree declare_return_variable PARAMS ((inline_data *, tree *)); + static tree copy_body_r PARAMS ((tree *, int *, void *)); + static tree copy_body PARAMS ((inline_data *)); + static tree expand_call_inline PARAMS ((tree *, int *, void *)); + static void expand_calls_inline PARAMS ((tree *, inline_data *)); + static int inlinable_function_p PARAMS ((tree, inline_data *)); + static tree remap_decl PARAMS ((tree, inline_data *)); + static void remap_block PARAMS ((tree, tree, inline_data *)); + static void copy_scope_stmt PARAMS ((tree *, int *, inline_data *)); + + /* The approximate number of instructions per statement. This number + need not be particularly accurate; it is used only to make + decisions about when a function is too big to inline. */ + #define INSNS_PER_STMT (10) + + /* Remap DECL during the copying of the BLOCK tree for the function. */ + + static tree + remap_decl (decl, id) + tree decl; + inline_data *id; + { + splay_tree_node n; + tree fn; + + /* We only remap local variables in the current function. */ + fn = VARRAY_TOP_TREE (id->fns); + if (! (*lang_hooks.tree_inlining.auto_var_in_fn_p) (decl, fn)) + return NULL_TREE; + + /* See if we have remapped this declaration. */ + n = splay_tree_lookup (id->decl_map, (splay_tree_key) decl); + /* If we didn't already have an equivalent for this declaration, + create one now. */ + if (!n) + { + tree t; + + /* Make a copy of the variable or label. */ + t = copy_decl_for_inlining (decl, fn, + VARRAY_TREE (id->fns, 0)); + + /* The decl T could be a dynamic array or other variable size type, + in which case some fields need to be remapped because they may + contain SAVE_EXPRs. */ + if (TREE_TYPE (t) && TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE + && TYPE_DOMAIN (TREE_TYPE (t))) + { + TREE_TYPE (t) = copy_node (TREE_TYPE (t)); + TYPE_DOMAIN (TREE_TYPE (t)) + = copy_node (TYPE_DOMAIN (TREE_TYPE (t))); + walk_tree (&TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (t))), + copy_body_r, id, NULL); + } + + if (! DECL_NAME (t) && TREE_TYPE (t) + && (*lang_hooks.tree_inlining.anon_aggr_type_p) (TREE_TYPE (t))) + { + /* For a VAR_DECL of anonymous type, we must also copy the + member VAR_DECLS here and rechain the + DECL_ANON_UNION_ELEMS. */ + tree members = NULL; + tree src; + + for (src = DECL_ANON_UNION_ELEMS (t); src; + src = TREE_CHAIN (src)) + { + tree member = remap_decl (TREE_VALUE (src), id); + + if (TREE_PURPOSE (src)) + abort (); + members = tree_cons (NULL, member, members); + } + DECL_ANON_UNION_ELEMS (t) = nreverse (members); + } + + /* Remember it, so that if we encounter this local entity + again we can reuse this copy. */ + n = splay_tree_insert (id->decl_map, + (splay_tree_key) decl, + (splay_tree_value) t); + } + + return (tree) n->value; + } + + /* Copy the SCOPE_STMT_BLOCK associated with SCOPE_STMT to contain + remapped versions of the variables therein. And hook the new block + into the block-tree. If non-NULL, the DECLS are declarations to + add to use instead of the BLOCK_VARS in the old block. */ + + static void + remap_block (scope_stmt, decls, id) + tree scope_stmt; + tree decls; + inline_data *id; + { + /* We cannot do this in the cleanup for a TARGET_EXPR since we do + not know whether or not expand_expr will actually write out the + code we put there. If it does not, then we'll have more BLOCKs + than block-notes, and things will go awry. At some point, we + should make the back-end handle BLOCK notes in a tidier way, + without requiring a strict correspondence to the block-tree; then + this check can go. */ + if (id->in_target_cleanup_p) + { + SCOPE_STMT_BLOCK (scope_stmt) = NULL_TREE; + return; + } + + /* If this is the beginning of a scope, remap the associated BLOCK. */ + if (SCOPE_BEGIN_P (scope_stmt) && SCOPE_STMT_BLOCK (scope_stmt)) + { + tree old_block; + tree new_block; + tree old_var; + tree fn; + + /* Make the new block. */ + old_block = SCOPE_STMT_BLOCK (scope_stmt); + new_block = make_node (BLOCK); + TREE_USED (new_block) = TREE_USED (old_block); + BLOCK_ABSTRACT_ORIGIN (new_block) = old_block; + SCOPE_STMT_BLOCK (scope_stmt) = new_block; + + /* Remap its variables. */ + for (old_var = decls ? decls : BLOCK_VARS (old_block); + old_var; + old_var = TREE_CHAIN (old_var)) + { + tree new_var; + + /* Remap the variable. */ + new_var = remap_decl (old_var, id); + /* If we didn't remap this variable, so we can't mess with + its TREE_CHAIN. If we remapped this variable to + something other than a declaration (say, if we mapped it + to a constant), then we must similarly omit any mention + of it here. */ + if (!new_var || !DECL_P (new_var)) + ; + else + { + TREE_CHAIN (new_var) = BLOCK_VARS (new_block); + BLOCK_VARS (new_block) = new_var; + } + } + /* We put the BLOCK_VARS in reverse order; fix that now. */ + BLOCK_VARS (new_block) = nreverse (BLOCK_VARS (new_block)); + fn = VARRAY_TREE (id->fns, 0); + if (id->cloning_p) + /* We're building a clone; DECL_INITIAL is still + error_mark_node, and current_binding_level is the parm + binding level. */ + insert_block (new_block); + else + { + /* Attach this new block after the DECL_INITIAL block for the + function into which this block is being inlined. In + rest_of_compilation we will straighten out the BLOCK tree. */ + tree *first_block; + if (DECL_INITIAL (fn)) + first_block = &BLOCK_CHAIN (DECL_INITIAL (fn)); + else + first_block = &DECL_INITIAL (fn); + BLOCK_CHAIN (new_block) = *first_block; + *first_block = new_block; + } + /* Remember the remapped block. */ + splay_tree_insert (id->decl_map, + (splay_tree_key) old_block, + (splay_tree_value) new_block); + } + /* If this is the end of a scope, set the SCOPE_STMT_BLOCK to be the + remapped block. */ + else if (SCOPE_END_P (scope_stmt) && SCOPE_STMT_BLOCK (scope_stmt)) + { + splay_tree_node n; + + /* Find this block in the table of remapped things. */ + n = splay_tree_lookup (id->decl_map, + (splay_tree_key) SCOPE_STMT_BLOCK (scope_stmt)); + if (! n) + abort (); + SCOPE_STMT_BLOCK (scope_stmt) = (tree) n->value; + } + } + + /* Copy the SCOPE_STMT pointed to by TP. */ + + static void + copy_scope_stmt (tp, walk_subtrees, id) + tree *tp; + int *walk_subtrees; + inline_data *id; + { + tree block; + + /* Remember whether or not this statement was nullified. When + making a copy, copy_tree_r always sets SCOPE_NULLIFIED_P (and + doesn't copy the SCOPE_STMT_BLOCK) to free callers from having to + deal with copying BLOCKs if they do not wish to do so. */ + block = SCOPE_STMT_BLOCK (*tp); + /* Copy (and replace) the statement. */ + copy_tree_r (tp, walk_subtrees, NULL); + /* Restore the SCOPE_STMT_BLOCK. */ + SCOPE_STMT_BLOCK (*tp) = block; + + /* Remap the associated block. */ + remap_block (*tp, NULL_TREE, id); + } + + /* Called from copy_body via walk_tree. DATA is really an + `inline_data *'. */ + + static tree + copy_body_r (tp, walk_subtrees, data) + tree *tp; + int *walk_subtrees; + void *data; + { + inline_data* id; + tree fn; + + /* Set up. */ + id = (inline_data *) data; + fn = VARRAY_TOP_TREE (id->fns); + + #if 0 + /* All automatic variables should have a DECL_CONTEXT indicating + what function they come from. */ + if ((TREE_CODE (*tp) == VAR_DECL || TREE_CODE (*tp) == LABEL_DECL) + && DECL_NAMESPACE_SCOPE_P (*tp)) + if (! DECL_EXTERNAL (*tp) && ! TREE_STATIC (*tp)) + abort (); + #endif + + /* If this is a RETURN_STMT, change it into an EXPR_STMT and a + GOTO_STMT with the RET_LABEL as its target. */ + if (TREE_CODE (*tp) == RETURN_STMT && id->ret_label) + { + tree return_stmt = *tp; + tree goto_stmt; + + /* Build the GOTO_STMT. */ + goto_stmt = build_stmt (GOTO_STMT, id->ret_label); + TREE_CHAIN (goto_stmt) = TREE_CHAIN (return_stmt); + GOTO_FAKE_P (goto_stmt) = 1; + + /* If we're returning something, just turn that into an + assignment into the equivalent of the original + RESULT_DECL. */ + if (RETURN_EXPR (return_stmt)) + { + *tp = build_stmt (EXPR_STMT, + RETURN_EXPR (return_stmt)); + STMT_IS_FULL_EXPR_P (*tp) = 1; + /* And then jump to the end of the function. */ + TREE_CHAIN (*tp) = goto_stmt; + } + /* If we're not returning anything just do the jump. */ + else + *tp = goto_stmt; + } + /* Local variables and labels need to be replaced by equivalent + variables. We don't want to copy static variables; there's only + one of those, no matter how many times we inline the containing + function. */ + else if ((*lang_hooks.tree_inlining.auto_var_in_fn_p) (*tp, fn)) + { + tree new_decl; + + /* Remap the declaration. */ + new_decl = remap_decl (*tp, id); + if (! new_decl) + abort (); + /* Replace this variable with the copy. */ + STRIP_TYPE_NOPS (new_decl); + *tp = new_decl; + } + #if 0 + else if (nonstatic_local_decl_p (*tp) + && DECL_CONTEXT (*tp) != VARRAY_TREE (id->fns, 0)) + abort (); + #endif + else if (TREE_CODE (*tp) == SAVE_EXPR) + remap_save_expr (tp, id->decl_map, VARRAY_TREE (id->fns, 0), + walk_subtrees); + else if (TREE_CODE (*tp) == UNSAVE_EXPR) + /* UNSAVE_EXPRs should not be generated until expansion time. */ + abort (); + /* For a SCOPE_STMT, we must copy the associated block so that we + can write out debugging information for the inlined variables. */ + else if (TREE_CODE (*tp) == SCOPE_STMT && !id->in_target_cleanup_p) + copy_scope_stmt (tp, walk_subtrees, id); + /* Otherwise, just copy the node. Note that copy_tree_r already + knows not to copy VAR_DECLs, etc., so this is safe. */ + else + { + copy_tree_r (tp, walk_subtrees, NULL); + + /* The copied TARGET_EXPR has never been expanded, even if the + original node was expanded already. */ + if (TREE_CODE (*tp) == TARGET_EXPR && TREE_OPERAND (*tp, 3)) + { + TREE_OPERAND (*tp, 1) = TREE_OPERAND (*tp, 3); + TREE_OPERAND (*tp, 3) = NULL_TREE; + } + else if (TREE_CODE (*tp) == MODIFY_EXPR + && TREE_OPERAND (*tp, 0) == TREE_OPERAND (*tp, 1) + && ((*lang_hooks.tree_inlining.auto_var_in_fn_p) + (TREE_OPERAND (*tp, 0), fn))) + { + /* Some assignments VAR = VAR; don't generate any rtl code + and thus don't count as variable modification. Avoid + keeping bogosities like 0 = 0. */ + tree decl = TREE_OPERAND (*tp, 0), value; + splay_tree_node n; + + n = splay_tree_lookup (id->decl_map, (splay_tree_key) decl); + if (n) + { + value = (tree) n->value; + STRIP_TYPE_NOPS (value); + if (TREE_CONSTANT (value) || TREE_READONLY_DECL_P (value)) + *tp = value; + } + } + } + + /* Keep iterating. */ + return NULL_TREE; + } + + /* Make a copy of the body of FN so that it can be inserted inline in + another function. */ + + static tree + copy_body (id) + inline_data *id; + { + tree body; + + body = DECL_SAVED_TREE (VARRAY_TOP_TREE (id->fns)); + walk_tree (&body, copy_body_r, id, NULL); + + return body; + } + + /* Generate code to initialize the parameters of the function at the + top of the stack in ID from the ARGS (presented as a TREE_LIST). */ + + static tree + initialize_inlined_parameters (id, args, fn) + inline_data *id; + tree args; + tree fn; + { + tree init_stmts; + tree parms; + tree a; + tree p; + + /* Figure out what the parameters are. */ + parms = DECL_ARGUMENTS (fn); + + /* Start with no initializations whatsoever. */ + init_stmts = NULL_TREE; + + /* Loop through the parameter declarations, replacing each with an + equivalent VAR_DECL, appropriately initialized. */ + for (p = parms, a = args; p; + a = a ? TREE_CHAIN (a) : a, p = TREE_CHAIN (p)) + { + tree init_stmt; + tree var; + tree value; + tree cleanup; + + /* Find the initializer. */ + value = (*lang_hooks.tree_inlining.convert_parm_for_inlining) + (p, a ? TREE_VALUE (a) : NULL_TREE, fn); + + /* If the parameter is never assigned to, we may not need to + create a new variable here at all. Instead, we may be able + to just use the argument value. */ + if (TREE_READONLY (p) + && !TREE_ADDRESSABLE (p) + && value && !TREE_SIDE_EFFECTS (value)) + { + /* Simplify the value, if possible. */ + value = fold (DECL_P (value) ? decl_constant_value (value) : value); + + /* We can't risk substituting complex expressions. They + might contain variables that will be assigned to later. + Theoretically, we could check the expression to see if + all of the variables that determine its value are + read-only, but we don't bother. */ + if (TREE_CONSTANT (value) || TREE_READONLY_DECL_P (value)) + { + /* If this is a declaration, wrap it a NOP_EXPR so that + we don't try to put the VALUE on the list of + BLOCK_VARS. */ + if (DECL_P (value)) + value = build1 (NOP_EXPR, TREE_TYPE (value), value); + + splay_tree_insert (id->decl_map, + (splay_tree_key) p, + (splay_tree_value) value); + continue; + } + } + + /* Make an equivalent VAR_DECL. */ + var = copy_decl_for_inlining (p, fn, VARRAY_TREE (id->fns, 0)); + /* Register the VAR_DECL as the equivalent for the PARM_DECL; + that way, when the PARM_DECL is encountered, it will be + automatically replaced by the VAR_DECL. */ + splay_tree_insert (id->decl_map, + (splay_tree_key) p, + (splay_tree_value) var); + + /* Declare this new variable. */ + init_stmt = build_stmt (DECL_STMT, var); + TREE_CHAIN (init_stmt) = init_stmts; + init_stmts = init_stmt; + + /* Initialize this VAR_DECL from the equivalent argument. If + the argument is an object, created via a constructor or copy, + this will not result in an extra copy: the TARGET_EXPR + representing the argument will be bound to VAR, and the + object will be constructed in VAR. */ + if (! TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (p))) + DECL_INITIAL (var) = value; + else + { + /* Even if P was TREE_READONLY, the new VAR should not be. + In the original code, we would have constructed a + temporary, and then the function body would have never + changed the value of P. However, now, we will be + constructing VAR directly. The constructor body may + change its value multiple times as it is being + constructed. Therefore, it must not be TREE_READONLY; + the back-end assumes that TREE_READONLY variable is + assigned to only once. */ + TREE_READONLY (var) = 0; + + /* Build a run-time initialization. */ + init_stmt = build_stmt (EXPR_STMT, + build (INIT_EXPR, TREE_TYPE (p), + var, value)); + /* Add this initialization to the list. Note that we want the + declaration *after* the initialization because we are going + to reverse all the initialization statements below. */ + TREE_CHAIN (init_stmt) = init_stmts; + init_stmts = init_stmt; + } + + /* See if we need to clean up the declaration. */ + cleanup = maybe_build_cleanup (var); + if (cleanup) + { + tree cleanup_stmt; + /* Build the cleanup statement. */ + cleanup_stmt = build_stmt (CLEANUP_STMT, var, cleanup); + /* Add it to the *front* of the list; the list will be + reversed below. */ + TREE_CHAIN (cleanup_stmt) = init_stmts; + init_stmts = cleanup_stmt; + } + } + + /* Evaluate trailing arguments. */ + for (; a; a = TREE_CHAIN (a)) + { + tree init_stmt; + tree value = TREE_VALUE (a); + + if (! value || ! TREE_SIDE_EFFECTS (value)) + continue; + + init_stmt = build_stmt (EXPR_STMT, value); + TREE_CHAIN (init_stmt) = init_stmts; + init_stmts = init_stmt; + } + + /* The initialization statements have been built up in reverse + order. Straighten them out now. */ + return nreverse (init_stmts); + } + + /* Declare a return variable to replace the RESULT_DECL for the + function we are calling. An appropriate DECL_STMT is returned. + The USE_STMT is filled in to contain a use of the declaration to + indicate the return value of the function. */ + + static tree + declare_return_variable (id, use_stmt) + struct inline_data *id; + tree *use_stmt; + { + tree fn = VARRAY_TOP_TREE (id->fns); + tree result = DECL_RESULT (fn); + tree var; + int need_return_decl = 1; + + /* We don't need to do anything for functions that don't return + anything. */ + if (!result || VOID_TYPE_P (TREE_TYPE (result))) + { + *use_stmt = NULL_TREE; + return NULL_TREE; + } + + var = ((*lang_hooks.tree_inlining.copy_res_decl_for_inlining) + (result, fn, VARRAY_TREE (id->fns, 0), id->decl_map, + &need_return_decl, &id->target_exprs)); + + /* Register the VAR_DECL as the equivalent for the RESULT_DECL; that + way, when the RESULT_DECL is encountered, it will be + automatically replaced by the VAR_DECL. */ + splay_tree_insert (id->decl_map, + (splay_tree_key) result, + (splay_tree_value) var); + + /* Build the USE_STMT. If the return type of the function was + promoted, convert it back to the expected type. */ + if (TREE_TYPE (var) == TREE_TYPE (TREE_TYPE (fn))) + *use_stmt = build_stmt (EXPR_STMT, var); + else + *use_stmt = build_stmt (EXPR_STMT, + build1 (NOP_EXPR, TREE_TYPE (TREE_TYPE (fn)), + var)); + + TREE_ADDRESSABLE (*use_stmt) = 1; + + /* Build the declaration statement if FN does not return an + aggregate. */ + if (need_return_decl) + return build_stmt (DECL_STMT, var); + /* If FN does return an aggregate, there's no need to declare the + return variable; we're using a variable in our caller's frame. */ + else + return NULL_TREE; + } + + /* Returns non-zero if a function can be inlined as a tree. */ + + int + tree_inlinable_function_p (fn) + tree fn; + { + return inlinable_function_p (fn, NULL); + } + + /* Returns non-zero if FN is a function that can be inlined into the + inlining context ID_. If ID_ is NULL, check whether the function + can be inlined at all. */ + + static int + inlinable_function_p (fn, id) + tree fn; + inline_data *id; + { + int inlinable; + + /* If we've already decided this function shouldn't be inlined, + there's no need to check again. */ + if (DECL_UNINLINABLE (fn)) + return 0; + + /* Assume it is not inlinable. */ + inlinable = 0; + + /* If we're not inlining things, then nothing is inlinable. */ + if (! flag_inline_trees) + ; + /* If we're not inlining all functions and the function was not + declared `inline', we don't inline it. Don't think of + disregarding DECL_INLINE when flag_inline_trees == 2; it's the + front-end that must set DECL_INLINE in this case, because + dwarf2out loses if a function is inlined that doesn't have + DECL_INLINE set. */ + else if (! DECL_INLINE (fn)) + ; + /* We can't inline functions that are too big. Only allow a single + function to eat up half of our budget. Make special allowance + for extern inline functions, though. */ + else if (! (*lang_hooks.tree_inlining.disregard_inline_limits) (fn) + && DECL_NUM_STMTS (fn) * INSNS_PER_STMT > MAX_INLINE_INSNS / 2) + ; + /* All is well. We can inline this function. Traditionally, GCC + has refused to inline functions using alloca, or functions whose + values are returned in a PARALLEL, and a few other such obscure + conditions. We are not equally constrained at the tree level. */ + else + inlinable = 1; + + /* Squirrel away the result so that we don't have to check again. */ + DECL_UNINLINABLE (fn) = ! inlinable; + + /* Even if this function is not itself too big to inline, it might + be that we've done so much inlining already that we don't want to + risk too much inlining any more and thus halve the acceptable + size. */ + if (! (*lang_hooks.tree_inlining.disregard_inline_limits) (fn) + && ((DECL_NUM_STMTS (fn) + (id ? id->inlined_stmts : 0)) * INSNS_PER_STMT + > MAX_INLINE_INSNS) + && DECL_NUM_STMTS (fn) * INSNS_PER_STMT > MAX_INLINE_INSNS / 4) + inlinable = 0; + + if (inlinable && (*lang_hooks.tree_inlining.cannot_inline_tree_fn) (&fn)) + inlinable = 0; + + /* If we don't have the function body available, we can't inline + it. */ + if (! DECL_SAVED_TREE (fn)) + inlinable = 0; + + /* Check again, language hooks may have modified it. */ + if (! inlinable || DECL_UNINLINABLE (fn)) + return 0; + + /* Don't do recursive inlining, either. We don't record this in + DECL_UNINLINABLE; we may be able to inline this function later. */ + if (id) + { + size_t i; + + for (i = 0; i < VARRAY_ACTIVE_SIZE (id->fns); ++i) + if (VARRAY_TREE (id->fns, i) == fn) + return 0; + + if (DECL_INLINED_FNS (fn)) + { + int j; + tree inlined_fns = DECL_INLINED_FNS (fn); + + for (j = 0; j < TREE_VEC_LENGTH (inlined_fns); ++j) + if (TREE_VEC_ELT (inlined_fns, j) == VARRAY_TREE (id->fns, 0)) + return 0; + } + } + + /* Return the result. */ + return inlinable; + } + + /* If *TP is a CALL_EXPR, replace it with its inline expansion. */ + + static tree + expand_call_inline (tp, walk_subtrees, data) + tree *tp; + int *walk_subtrees; + void *data; + { + inline_data *id; + tree t; + tree expr; + tree chain; + tree fn; + tree scope_stmt; + tree use_stmt; + tree arg_inits; + tree *inlined_body; + splay_tree st; + + /* See what we've got. */ + id = (inline_data *) data; + t = *tp; + + /* Recurse, but letting recursive invocations know that we are + inside the body of a TARGET_EXPR. */ + if (TREE_CODE (*tp) == TARGET_EXPR) + { + int i, len = first_rtl_op (TARGET_EXPR); + + /* We're walking our own subtrees. */ + *walk_subtrees = 0; + + /* Push *TP on the stack of pending TARGET_EXPRs. */ + VARRAY_PUSH_TREE (id->target_exprs, *tp); + + /* Actually walk over them. This loop is the body of + walk_trees, omitting the case where the TARGET_EXPR + itself is handled. */ + for (i = 0; i < len; ++i) + { + if (i == 2) + ++id->in_target_cleanup_p; + walk_tree (&TREE_OPERAND (*tp, i), expand_call_inline, data, + id->tree_pruner); + if (i == 2) + --id->in_target_cleanup_p; + } + + /* We're done with this TARGET_EXPR now. */ + VARRAY_POP (id->target_exprs); + + return NULL_TREE; + } + + if (TYPE_P (t)) + /* Because types were not copied in copy_body, CALL_EXPRs beneath + them should not be expanded. This can happen if the type is a + dynamic array type, for example. */ + *walk_subtrees = 0; + + /* From here on, we're only interested in CALL_EXPRs. */ + if (TREE_CODE (t) != CALL_EXPR) + return NULL_TREE; + + /* First, see if we can figure out what function is being called. + If we cannot, then there is no hope of inlining the function. */ + fn = get_callee_fndecl (t); + if (!fn) + return NULL_TREE; + + /* If fn is a declaration of a function in a nested scope that was + globally declared inline, we don't set its DECL_INITIAL. + However, we can't blindly follow DECL_ABSTRACT_ORIGIN because the + C++ front-end uses it for cdtors to refer to their internal + declarations, that are not real functions. Fortunately those + don't have trees to be saved, so we can tell by checking their + DECL_SAVED_TREE. */ + if (! DECL_INITIAL (fn) + && DECL_ABSTRACT_ORIGIN (fn) + && DECL_SAVED_TREE (DECL_ABSTRACT_ORIGIN (fn))) + fn = DECL_ABSTRACT_ORIGIN (fn); + + /* Don't try to inline functions that are not well-suited to + inlining. */ + if (!inlinable_function_p (fn, id)) + return NULL_TREE; + + if (! (*lang_hooks.tree_inlining.start_inlining) (fn)) + return NULL_TREE; + + /* Set the current filename and line number to the function we are + inlining so that when we create new _STMT nodes here they get + line numbers corresponding to the function we are calling. We + wrap the whole inlined body in an EXPR_WITH_FILE_AND_LINE as well + because individual statements don't record the filename. */ + push_srcloc (fn->decl.filename, fn->decl.linenum); + + /* Build a statement-expression containing code to initialize the + arguments, the actual inline expansion of the body, and a label + for the return statements within the function to jump to. The + type of the statement expression is the return type of the + function call. */ + expr = build1 (STMT_EXPR, TREE_TYPE (TREE_TYPE (fn)), NULL_TREE); + /* There is no scope associated with the statement-expression. */ + STMT_EXPR_NO_SCOPE (expr) = 1; + + /* Local declarations will be replaced by their equivalents in this + map. */ + st = id->decl_map; + id->decl_map = splay_tree_new (splay_tree_compare_pointers, + NULL, NULL); + + /* Initialize the parameters. */ + arg_inits = initialize_inlined_parameters (id, TREE_OPERAND (t, 1), fn); + /* Expand any inlined calls in the initializers. Do this before we + push FN on the stack of functions we are inlining; we want to + inline calls to FN that appear in the initializers for the + parameters. */ + expand_calls_inline (&arg_inits, id); + /* And add them to the tree. */ + STMT_EXPR_STMT (expr) = chainon (STMT_EXPR_STMT (expr), arg_inits); + + /* Record the function we are about to inline so that we can avoid + recursing into it. */ + VARRAY_PUSH_TREE (id->fns, fn); + + /* Record the function we are about to inline if optimize_function + has not been called on it yet and we don't have it in the list. */ + if (! DECL_INLINED_FNS (fn)) + { + int i; + + for (i = VARRAY_ACTIVE_SIZE (id->inlined_fns) - 1; i >= 0; i--) + if (VARRAY_TREE (id->inlined_fns, i) == fn) + break; + if (i < 0) + VARRAY_PUSH_TREE (id->inlined_fns, fn); + } + + /* Return statements in the function body will be replaced by jumps + to the RET_LABEL. */ + id->ret_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE); + DECL_CONTEXT (id->ret_label) = VARRAY_TREE (id->fns, 0); + + if (! DECL_INITIAL (fn) + || TREE_CODE (DECL_INITIAL (fn)) != BLOCK) + abort (); + + /* Create a block to put the parameters in. We have to do this + after the parameters have been remapped because remapping + parameters is different from remapping ordinary variables. */ + scope_stmt = build_stmt (SCOPE_STMT, DECL_INITIAL (fn)); + SCOPE_BEGIN_P (scope_stmt) = 1; + SCOPE_NO_CLEANUPS_P (scope_stmt) = 1; + remap_block (scope_stmt, DECL_ARGUMENTS (fn), id); + TREE_CHAIN (scope_stmt) = STMT_EXPR_STMT (expr); + STMT_EXPR_STMT (expr) = scope_stmt; + + /* Tell the debugging backends that this block represents the + outermost scope of the inlined function. */ + if (SCOPE_STMT_BLOCK (scope_stmt)) + BLOCK_ABSTRACT_ORIGIN (SCOPE_STMT_BLOCK (scope_stmt)) = DECL_ORIGIN (fn); + + /* Declare the return variable for the function. */ + STMT_EXPR_STMT (expr) + = chainon (STMT_EXPR_STMT (expr), + declare_return_variable (id, &use_stmt)); + + /* After we've initialized the parameters, we insert the body of the + function itself. */ + inlined_body = &STMT_EXPR_STMT (expr); + while (*inlined_body) + inlined_body = &TREE_CHAIN (*inlined_body); + *inlined_body = copy_body (id); + + /* Close the block for the parameters. */ + scope_stmt = build_stmt (SCOPE_STMT, DECL_INITIAL (fn)); + SCOPE_NO_CLEANUPS_P (scope_stmt) = 1; + remap_block (scope_stmt, NULL_TREE, id); + STMT_EXPR_STMT (expr) + = chainon (STMT_EXPR_STMT (expr), scope_stmt); + + /* After the body of the function comes the RET_LABEL. This must come + before we evaluate the returned value below, because that evalulation + may cause RTL to be generated. */ + STMT_EXPR_STMT (expr) + = chainon (STMT_EXPR_STMT (expr), + build_stmt (LABEL_STMT, id->ret_label)); + + /* Finally, mention the returned value so that the value of the + statement-expression is the returned value of the function. */ + STMT_EXPR_STMT (expr) = chainon (STMT_EXPR_STMT (expr), use_stmt); + + /* Clean up. */ + splay_tree_delete (id->decl_map); + id->decl_map = st; + + /* The new expression has side-effects if the old one did. */ + TREE_SIDE_EFFECTS (expr) = TREE_SIDE_EFFECTS (t); + + /* Replace the call by the inlined body. Wrap it in an + EXPR_WITH_FILE_LOCATION so that we'll get debugging line notes + pointing to the right place. */ + chain = TREE_CHAIN (*tp); + *tp = build_expr_wfl (expr, DECL_SOURCE_FILE (fn), DECL_SOURCE_LINE (fn), + /*col=*/0); + EXPR_WFL_EMIT_LINE_NOTE (*tp) = 1; + TREE_CHAIN (*tp) = chain; + pop_srcloc (); + + /* If the value of the new expression is ignored, that's OK. We + don't warn about this for CALL_EXPRs, so we shouldn't warn about + the equivalent inlined version either. */ + TREE_USED (*tp) = 1; + + /* Our function now has more statements than it did before. */ + DECL_NUM_STMTS (VARRAY_TREE (id->fns, 0)) += DECL_NUM_STMTS (fn); + id->inlined_stmts += DECL_NUM_STMTS (fn); + + /* Recurse into the body of the just inlined function. */ + expand_calls_inline (inlined_body, id); + VARRAY_POP (id->fns); + + /* If we've returned to the top level, clear out the record of how + much inlining has been done. */ + if (VARRAY_ACTIVE_SIZE (id->fns) == id->first_inlined_fn) + id->inlined_stmts = 0; + + /* Don't walk into subtrees. We've already handled them above. */ + *walk_subtrees = 0; + + (*lang_hooks.tree_inlining.end_inlining) (fn); + + /* Keep iterating. */ + return NULL_TREE; + } + + /* Walk over the entire tree *TP, replacing CALL_EXPRs with inline + expansions as appropriate. */ + + static void + expand_calls_inline (tp, id) + tree *tp; + inline_data *id; + { + /* Search through *TP, replacing all calls to inline functions by + appropriate equivalents. Use walk_tree in no-duplicates mode + to avoid exponential time complexity. (We can't just use + walk_tree_without_duplicates, because of the special TARGET_EXPR + handling in expand_calls. The hash table is set up in + optimize_function. */ + walk_tree (tp, expand_call_inline, id, id->tree_pruner); + } + + /* Expand calls to inline functions in the body of FN. */ + + void + optimize_inline_calls (fn) + tree fn; + { + inline_data id; + tree prev_fn; + + /* Clear out ID. */ + memset (&id, 0, sizeof (id)); + + /* Don't allow recursion into FN. */ + VARRAY_TREE_INIT (id.fns, 32, "fns"); + VARRAY_PUSH_TREE (id.fns, fn); + /* Or any functions that aren't finished yet. */ + prev_fn = NULL_TREE; + if (current_function_decl) + { + VARRAY_PUSH_TREE (id.fns, current_function_decl); + prev_fn = current_function_decl; + } + + prev_fn = ((*lang_hooks.tree_inlining.add_pending_fn_decls) + (&id.fns, prev_fn)); + + /* Create the stack of TARGET_EXPRs. */ + VARRAY_TREE_INIT (id.target_exprs, 32, "target_exprs"); + + /* Create the list of functions this call will inline. */ + VARRAY_TREE_INIT (id.inlined_fns, 32, "inlined_fns"); + + /* Keep track of the low-water mark, i.e., the point where the first + real inlining is represented in ID.FNS. */ + id.first_inlined_fn = VARRAY_ACTIVE_SIZE (id.fns); + + /* Replace all calls to inline functions with the bodies of those + functions. */ + id.tree_pruner = htab_create (37, htab_hash_pointer, + htab_eq_pointer, NULL); + expand_calls_inline (&DECL_SAVED_TREE (fn), &id); + + /* Clean up. */ + htab_delete (id.tree_pruner); + VARRAY_FREE (id.fns); + VARRAY_FREE (id.target_exprs); + if (DECL_LANG_SPECIFIC (fn)) + { + tree ifn = make_tree_vec (VARRAY_ACTIVE_SIZE (id.inlined_fns)); + + memcpy (&TREE_VEC_ELT (ifn, 0), &VARRAY_TREE (id.inlined_fns, 0), + VARRAY_ACTIVE_SIZE (id.inlined_fns) * sizeof (tree)); + DECL_INLINED_FNS (fn) = ifn; + } + VARRAY_FREE (id.inlined_fns); + } + + /* FN is a function that has a complete body, and CLONE is a function + whose body is to be set to a copy of FN, mapping argument + declarations according to the ARG_MAP splay_tree. */ + + void + clone_body (clone, fn, arg_map) + tree clone, fn; + void *arg_map; + { + inline_data id; + + /* Clone the body, as if we were making an inline call. But, remap + the parameters in the callee to the parameters of caller. If + there's an in-charge parameter, map it to an appropriate + constant. */ + memset (&id, 0, sizeof (id)); + VARRAY_TREE_INIT (id.fns, 2, "fns"); + VARRAY_PUSH_TREE (id.fns, clone); + VARRAY_PUSH_TREE (id.fns, fn); + id.decl_map = (splay_tree)arg_map; + + /* Cloning is treated slightly differently from inlining. Set + CLONING_P so that it's clear which operation we're performing. */ + id.cloning_p = true; + + /* Actually copy the body. */ + TREE_CHAIN (DECL_SAVED_TREE (clone)) = copy_body (&id); + + /* Clean up. */ + VARRAY_FREE (id.fns); + } + + /* Apply FUNC to all the sub-trees of TP in a pre-order traversal. + FUNC is called with the DATA and the address of each sub-tree. If + FUNC returns a non-NULL value, the traversal is aborted, and the + value returned by FUNC is returned. If HTAB is non-NULL it is used + to record the nodes visited, and to avoid visiting a node more than + once. */ + + tree + walk_tree (tp, func, data, htab_) + tree *tp; + walk_tree_fn func; + void *data; + void *htab_; + { + htab_t htab = (htab_t) htab_; + enum tree_code code; + int walk_subtrees; + tree result; + + #define WALK_SUBTREE(NODE) \ + do \ + { \ + result = walk_tree (&(NODE), func, data, htab); \ + if (result) \ + return result; \ + } \ + while (0) + + #define WALK_SUBTREE_TAIL(NODE) \ + do \ + { \ + tp = & (NODE); \ + goto tail_recurse; \ + } \ + while (0) + + tail_recurse: + /* Skip empty subtrees. */ + if (!*tp) + return NULL_TREE; + + if (htab) + { + void **slot; + + /* Don't walk the same tree twice, if the user has requested + that we avoid doing so. */ + if (htab_find (htab, *tp)) + return NULL_TREE; + /* If we haven't already seen this node, add it to the table. */ + slot = htab_find_slot (htab, *tp, INSERT); + *slot = *tp; + } + + /* Call the function. */ + walk_subtrees = 1; + result = (*func) (tp, &walk_subtrees, data); + + /* If we found something, return it. */ + if (result) + return result; + + code = TREE_CODE (*tp); + + /* Even if we didn't, FUNC may have decided that there was nothing + interesting below this point in the tree. */ + if (!walk_subtrees) + { + if (statement_code_p (code) || code == TREE_LIST + || (*lang_hooks.tree_inlining.tree_chain_matters_p) (*tp)) + /* But we still need to check our siblings. */ + WALK_SUBTREE_TAIL (TREE_CHAIN (*tp)); + else + return NULL_TREE; + } + + /* Handle common cases up front. */ + if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (code)) + || TREE_CODE_CLASS (code) == 'r' + || TREE_CODE_CLASS (code) == 's') + { + int i, len; + + /* Set lineno here so we get the right instantiation context + if we call instantiate_decl from inlinable_function_p. */ + if (statement_code_p (code) && !STMT_LINENO_FOR_FN_P (*tp)) + lineno = STMT_LINENO (*tp); + + /* Walk over all the sub-trees of this operand. */ + len = first_rtl_op (code); + /* TARGET_EXPRs are peculiar: operands 1 and 3 can be the same. + But, we only want to walk once. */ + if (code == TARGET_EXPR + && TREE_OPERAND (*tp, 3) == TREE_OPERAND (*tp, 1)) + --len; + /* Go through the subtrees. We need to do this in forward order so + that the scope of a FOR_EXPR is handled properly. */ + for (i = 0; i < len; ++i) + WALK_SUBTREE (TREE_OPERAND (*tp, i)); + + /* For statements, we also walk the chain so that we cover the + entire statement tree. */ + if (statement_code_p (code)) + { + if (code == DECL_STMT + && DECL_STMT_DECL (*tp) + && DECL_P (DECL_STMT_DECL (*tp))) + { + /* Walk the DECL_INITIAL and DECL_SIZE. We don't want to walk + into declarations that are just mentioned, rather than + declared; they don't really belong to this part of the tree. + And, we can see cycles: the initializer for a declaration can + refer to the declaration itself. */ + WALK_SUBTREE (DECL_INITIAL (DECL_STMT_DECL (*tp))); + WALK_SUBTREE (DECL_SIZE (DECL_STMT_DECL (*tp))); + WALK_SUBTREE (DECL_SIZE_UNIT (DECL_STMT_DECL (*tp))); + } + + /* This can be tail-recursion optimized if we write it this way. */ + WALK_SUBTREE_TAIL (TREE_CHAIN (*tp)); + } + + /* We didn't find what we were looking for. */ + return NULL_TREE; + } + else if (TREE_CODE_CLASS (code) == 'd') + { + WALK_SUBTREE_TAIL (TREE_TYPE (*tp)); + } + + result = (*lang_hooks.tree_inlining.walk_subtrees) (tp, &walk_subtrees, func, + data, htab); + if (result || ! walk_subtrees) + return result; + + /* Not one of the easy cases. We must explicitly go through the + children. */ + switch (code) + { + case ERROR_MARK: + case IDENTIFIER_NODE: + case INTEGER_CST: + case REAL_CST: + case VECTOR_CST: + case STRING_CST: + case REAL_TYPE: + case COMPLEX_TYPE: + case VECTOR_TYPE: + case VOID_TYPE: + case BOOLEAN_TYPE: + case UNION_TYPE: + case ENUMERAL_TYPE: + case BLOCK: + case RECORD_TYPE: + /* None of thse have subtrees other than those already walked + above. */ + break; + + case POINTER_TYPE: + case REFERENCE_TYPE: + WALK_SUBTREE_TAIL (TREE_TYPE (*tp)); + break; + + case TREE_LIST: + WALK_SUBTREE (TREE_VALUE (*tp)); + WALK_SUBTREE_TAIL (TREE_CHAIN (*tp)); + break; + + case TREE_VEC: + { + int len = TREE_VEC_LENGTH (*tp); + + if (len == 0) + break; + + /* Walk all elements but the first. */ + while (--len) + WALK_SUBTREE (TREE_VEC_ELT (*tp, len)); + + /* Now walk the first one as a tail call. */ + WALK_SUBTREE_TAIL (TREE_VEC_ELT (*tp, 0)); + } + + case COMPLEX_CST: + WALK_SUBTREE (TREE_REALPART (*tp)); + WALK_SUBTREE_TAIL (TREE_IMAGPART (*tp)); + + case CONSTRUCTOR: + WALK_SUBTREE_TAIL (CONSTRUCTOR_ELTS (*tp)); + + case METHOD_TYPE: + WALK_SUBTREE (TYPE_METHOD_BASETYPE (*tp)); + /* Fall through. */ + + case FUNCTION_TYPE: + WALK_SUBTREE (TREE_TYPE (*tp)); + { + tree arg = TYPE_ARG_TYPES (*tp); + + /* We never want to walk into default arguments. */ + for (; arg; arg = TREE_CHAIN (arg)) + WALK_SUBTREE (TREE_VALUE (arg)); + } + break; + + case ARRAY_TYPE: + WALK_SUBTREE (TREE_TYPE (*tp)); + WALK_SUBTREE_TAIL (TYPE_DOMAIN (*tp)); + + case INTEGER_TYPE: + WALK_SUBTREE (TYPE_MIN_VALUE (*tp)); + WALK_SUBTREE_TAIL (TYPE_MAX_VALUE (*tp)); + + case OFFSET_TYPE: + WALK_SUBTREE (TREE_TYPE (*tp)); + WALK_SUBTREE_TAIL (TYPE_OFFSET_BASETYPE (*tp)); + + default: + abort (); + } + + /* We didn't find what we were looking for. */ + return NULL_TREE; + + #undef WALK_SUBTREE + } + + /* Like walk_tree, but does not walk duplicate nodes more than + once. */ + + tree + walk_tree_without_duplicates (tp, func, data) + tree *tp; + walk_tree_fn func; + void *data; + { + tree result; + htab_t htab; + + htab = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL); + result = walk_tree (tp, func, data, htab); + htab_delete (htab); + return result; + } + + /* Passed to walk_tree. Copies the node pointed to, if appropriate. */ + + tree + copy_tree_r (tp, walk_subtrees, data) + tree *tp; + int *walk_subtrees; + void *data ATTRIBUTE_UNUSED; + { + enum tree_code code = TREE_CODE (*tp); + + /* We make copies of most nodes. */ + if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (code)) + || TREE_CODE_CLASS (code) == 'r' + || TREE_CODE_CLASS (code) == 'c' + || TREE_CODE_CLASS (code) == 's' + || code == TREE_LIST + || code == TREE_VEC + || (*lang_hooks.tree_inlining.tree_chain_matters_p) (*tp)) + { + /* Because the chain gets clobbered when we make a copy, we save it + here. */ + tree chain = TREE_CHAIN (*tp); + + /* Copy the node. */ + *tp = copy_node (*tp); + + /* Now, restore the chain, if appropriate. That will cause + walk_tree to walk into the chain as well. */ + if (code == PARM_DECL || code == TREE_LIST + || (*lang_hooks.tree_inlining.tree_chain_matters_p) (*tp) + || statement_code_p (code)) + TREE_CHAIN (*tp) = chain; + + /* For now, we don't update BLOCKs when we make copies. So, we + have to nullify all scope-statements. */ + if (TREE_CODE (*tp) == SCOPE_STMT) + SCOPE_STMT_BLOCK (*tp) = NULL_TREE; + } + else if (TREE_CODE_CLASS (code) == 't') + /* There's no need to copy types, or anything beneath them. */ + *walk_subtrees = 0; + + return NULL_TREE; + } + + /* The SAVE_EXPR pointed to by TP is being copied. If ST contains + information indicating to what new SAVE_EXPR this one should be + mapped, use that one. Otherwise, create a new node and enter it in + ST. FN is the function into which the copy will be placed. */ + + void + remap_save_expr (tp, st_, fn, walk_subtrees) + tree *tp; + void *st_; + tree fn; + int *walk_subtrees; + { + splay_tree st = (splay_tree) st_; + splay_tree_node n; + + /* See if we already encountered this SAVE_EXPR. */ + n = splay_tree_lookup (st, (splay_tree_key) *tp); + + /* If we didn't already remap this SAVE_EXPR, do so now. */ + if (!n) + { + tree t = copy_node (*tp); + + /* The SAVE_EXPR is now part of the function into which we + are inlining this body. */ + SAVE_EXPR_CONTEXT (t) = fn; + /* And we haven't evaluated it yet. */ + SAVE_EXPR_RTL (t) = NULL_RTX; + /* Remember this SAVE_EXPR. */ + n = splay_tree_insert (st, + (splay_tree_key) *tp, + (splay_tree_value) t); + /* Make sure we don't remap an already-remapped SAVE_EXPR. */ + splay_tree_insert (st, (splay_tree_key) t, + (splay_tree_value) error_mark_node); + } + else + /* We've already walked into this SAVE_EXPR, so we needn't do it + again. */ + *walk_subtrees = 0; + + /* Replace this SAVE_EXPR with the copy. */ + *tp = (tree) n->value; + } diff -Nrc3pad gcc-3.0.4/gcc/tree-inline.h gcc-3.1/gcc/tree-inline.h *** gcc-3.0.4/gcc/tree-inline.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/tree-inline.h Mon Oct 8 20:54:07 2001 *************** *** 0 **** --- 1,42 ---- + /* Tree inlining hooks and declarations. + Copyright 2001 Free Software Foundation, Inc. + Contributed by Alexandre Oliva + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GNU CC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU CC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + #ifndef GCC_TREE_INLINE_H + #define GCC_TREE_INLINE_H + + /* Function prototypes. */ + + void optimize_inline_calls PARAMS ((tree)); + int tree_inlinable_function_p PARAMS ((tree)); + tree walk_tree PARAMS ((tree*, walk_tree_fn, void*, void*)); + tree walk_tree_without_duplicates PARAMS ((tree*, walk_tree_fn, void*)); + tree copy_tree_r PARAMS ((tree*, int*, void*)); + void clone_body PARAMS ((tree, tree, void*)); + void remap_save_expr PARAMS ((tree*, void*, tree, int*)); + + /* 0 if we should not perform inlining. + 1 if we should expand functions calls inline at the tree level. + 2 if we should consider *all* functions to be inline + candidates. */ + + extern int flag_inline_trees; + + #endif /* GCC_TREE_INLINE_H */ diff -Nrc3pad gcc-3.0.4/gcc/tree.c gcc-3.1/gcc/tree.c *** gcc-3.0.4/gcc/tree.c Tue May 22 03:01:49 2001 --- gcc-3.1/gcc/tree.c Fri Apr 26 23:46:01 2002 *************** *** 1,23 **** /* Language-independent node constructors for parse phase of GNU compiler. Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* This file contains the low level primitives for operating on tree nodes, including allocation, list operations, interning of identifiers, --- 1,23 ---- /* Language-independent node constructors for parse phase of GNU compiler. Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, ! 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* This file contains the low level primitives for operating on tree nodes, including allocation, list operations, interning of identifiers, *************** Boston, MA 02111-1307, USA. */ *** 44,49 **** --- 44,51 ---- #include "ggc.h" #include "hashtab.h" #include "output.h" + #include "target.h" + #include "langhooks.h" #define obstack_chunk_alloc xmalloc #define obstack_chunk_free free *************** typedef enum *** 98,104 **** e_kind, c_kind, id_kind, - op_id_kind, perm_list_kind, temp_list_kind, vec_kind, --- 100,105 ---- *************** typedef enum *** 110,116 **** int tree_node_counts[(int) all_kinds]; int tree_node_sizes[(int) all_kinds]; - int id_string_size = 0; static const char * const tree_node_kind_names[] = { "decls", --- 111,116 ---- *************** static const char * const tree_node_kind *** 121,127 **** "exprs", "constants", "identifiers", - "op_identifiers", "perm_tree_lists", "temp_tree_lists", "vecs", --- 121,126 ---- *************** static int next_decl_uid; *** 135,144 **** /* Unique id for next type created. */ static int next_type_uid = 1; - /* Here is how primitive or already-canonicalized types' hash - codes are made. */ - #define TYPE_HASH(TYPE) ((unsigned long) (TYPE) & 0777777) - /* Since we cannot rehash a type after it is in the table, we have to keep the hash code. */ --- 134,139 ---- *************** htab_t type_hash_table; *** 163,174 **** static void build_real_from_int_cst_1 PARAMS ((PTR)); static void set_type_quals PARAMS ((tree, int)); static void append_random_chars PARAMS ((char *)); - static void mark_type_hash PARAMS ((void *)); static int type_hash_eq PARAMS ((const void*, const void*)); static unsigned int type_hash_hash PARAMS ((const void*)); static void print_type_hash_statistics PARAMS((void)); - static int mark_hash_entry PARAMS((void **, void *)); static void finish_vector_type PARAMS((tree)); static int mark_tree_hashtable_entry PARAMS((void **, void *)); /* If non-null, these are language-specific helper functions for --- 158,170 ---- static void build_real_from_int_cst_1 PARAMS ((PTR)); static void set_type_quals PARAMS ((tree, int)); static void append_random_chars PARAMS ((char *)); static int type_hash_eq PARAMS ((const void*, const void*)); static unsigned int type_hash_hash PARAMS ((const void*)); static void print_type_hash_statistics PARAMS((void)); static void finish_vector_type PARAMS((tree)); + static tree make_vector PARAMS ((enum machine_mode, tree, int)); + static int type_hash_marked_p PARAMS ((const void *)); + static void type_hash_mark PARAMS ((const void *)); static int mark_tree_hashtable_entry PARAMS((void **, void *)); /* If non-null, these are language-specific helper functions for *************** init_obstacks () *** 230,236 **** /* Initialize the hash table of types. */ type_hash_table = htab_create (TYPE_HASH_INITIAL_SIZE, type_hash_hash, type_hash_eq, 0); ! ggc_add_root (&type_hash_table, 1, sizeof type_hash_table, mark_type_hash); ggc_add_tree_root (global_trees, TI_MAX); ggc_add_tree_root (integer_types, itk_none); --- 226,233 ---- /* Initialize the hash table of types. */ type_hash_table = htab_create (TYPE_HASH_INITIAL_SIZE, type_hash_hash, type_hash_eq, 0); ! ggc_add_deletable_htab (type_hash_table, type_hash_marked_p, ! type_hash_mark); ggc_add_tree_root (global_trees, TI_MAX); ggc_add_tree_root (integer_types, itk_none); *************** init_obstacks () *** 238,263 **** lang_set_decl_assembler_name = set_decl_assembler_name; } - void - gcc_obstack_init (obstack) - struct obstack *obstack; - { - /* Let particular systems override the size of a chunk. */ - #ifndef OBSTACK_CHUNK_SIZE - #define OBSTACK_CHUNK_SIZE 0 - #endif - /* Let them override the alloc and free routines too. */ - #ifndef OBSTACK_CHUNK_ALLOC - #define OBSTACK_CHUNK_ALLOC xmalloc - #endif - #ifndef OBSTACK_CHUNK_FREE - #define OBSTACK_CHUNK_FREE free - #endif - _obstack_begin (obstack, OBSTACK_CHUNK_SIZE, 0, - (void *(*) PARAMS ((long))) OBSTACK_CHUNK_ALLOC, - (void (*) PARAMS ((void *))) OBSTACK_CHUNK_FREE); - } - /* Allocate SIZE bytes in the permanent obstack and return a pointer to them. */ --- 235,240 ---- *************** tree *** 350,360 **** make_node (code) enum tree_code code; { ! register tree t; ! register int type = TREE_CODE_CLASS (code); ! register size_t length; #ifdef GATHER_STATISTICS ! register tree_node_kind kind; #endif struct tree_common ttmp; --- 327,337 ---- make_node (code) enum tree_code code; { ! tree t; ! int type = TREE_CODE_CLASS (code); ! size_t length; #ifdef GATHER_STATISTICS ! tree_node_kind kind; #endif struct tree_common ttmp; *************** make_node (code) *** 403,410 **** case 'x': /* something random, like an identifier. */ if (code == IDENTIFIER_NODE) kind = id_kind; - else if (code == OP_IDENTIFIER) - kind = op_id_kind; else if (code == TREE_VEC) kind = vec_kind; else --- 380,385 ---- *************** make_node (code) *** 441,448 **** DECL_SOURCE_FILE (t) = (input_filename) ? input_filename : ""; DECL_UID (t) = next_decl_uid++; ! /* Note that we have not yet computed the alias set for this ! declaration. */ DECL_POINTER_ALIAS_SET (t) = -1; break; --- 416,423 ---- DECL_SOURCE_FILE (t) = (input_filename) ? input_filename : ""; DECL_UID (t) = next_decl_uid++; ! ! /* We have not yet computed the alias set for this declaration. */ DECL_POINTER_ALIAS_SET (t) = -1; break; *************** make_node (code) *** 451,462 **** TYPE_ALIGN (t) = char_type_node ? TYPE_ALIGN (char_type_node) : 0; TYPE_USER_ALIGN (t) = 0; TYPE_MAIN_VARIANT (t) = t; TYPE_ATTRIBUTES (t) = NULL_TREE; ! #ifdef SET_DEFAULT_TYPE_ATTRIBUTES ! SET_DEFAULT_TYPE_ATTRIBUTES (t); ! #endif ! /* Note that we have not yet computed the alias set for this ! type. */ TYPE_ALIAS_SET (t) = -1; break; --- 426,437 ---- TYPE_ALIGN (t) = char_type_node ? TYPE_ALIGN (char_type_node) : 0; TYPE_USER_ALIGN (t) = 0; TYPE_MAIN_VARIANT (t) = t; + + /* Default to no attributes for type, but let target change that. */ TYPE_ATTRIBUTES (t) = NULL_TREE; ! (*targetm.set_default_type_attributes) (t); ! ! /* We have not yet computed the alias set for this type. */ TYPE_ALIAS_SET (t) = -1; break; *************** tree *** 511,519 **** copy_node (node) tree node; { ! register tree t; ! register enum tree_code code = TREE_CODE (node); ! register size_t length; length = tree_size (node); t = ggc_alloc_tree (length); --- 486,494 ---- copy_node (node) tree node; { ! tree t; ! enum tree_code code = TREE_CODE (node); ! size_t length; length = tree_size (node); t = ggc_alloc_tree (length); *************** copy_list (list) *** 547,553 **** tree list; { tree head; ! register tree prev, next; if (list == 0) return 0; --- 522,528 ---- tree list; { tree head; ! tree prev, next; if (list == 0) return 0; *************** build_int_2_wide (low, hi) *** 575,581 **** unsigned HOST_WIDE_INT low; HOST_WIDE_INT hi; { ! register tree t = make_node (INTEGER_CST); TREE_INT_CST_LOW (t) = low; TREE_INT_CST_HIGH (t) = hi; --- 550,556 ---- unsigned HOST_WIDE_INT low; HOST_WIDE_INT hi; { ! tree t = make_node (INTEGER_CST); TREE_INT_CST_LOW (t) = low; TREE_INT_CST_HIGH (t) = hi; *************** build_int_2_wide (low, hi) *** 583,588 **** --- 558,592 ---- return t; } + /* Return a new VECTOR_CST node whose type is TYPE and whose values + are in a list pointed by VALS. */ + + tree + build_vector (type, vals) + tree type, vals; + { + tree v = make_node (VECTOR_CST); + int over1 = 0, over2 = 0; + tree link; + + TREE_VECTOR_CST_ELTS (v) = vals; + TREE_TYPE (v) = type; + + /* Iterate through elements and check for overflow. */ + for (link = vals; link; link = TREE_CHAIN (link)) + { + tree value = TREE_VALUE (link); + + over1 |= TREE_OVERFLOW (value); + over2 |= TREE_CONSTANT_OVERFLOW (value); + } + + TREE_OVERFLOW (v) = over1; + TREE_CONSTANT_OVERFLOW (v) = over2; + + return v; + } + /* Return a new REAL_CST node whose type is TYPE and value is D. */ tree *************** build_string (len, str) *** 739,745 **** int len; const char *str; { ! register tree s = make_node (STRING_CST); TREE_STRING_LENGTH (s) = len; TREE_STRING_POINTER (s) = ggc_alloc_string (str, len); --- 743,749 ---- int len; const char *str; { ! tree s = make_node (STRING_CST); TREE_STRING_LENGTH (s) = len; TREE_STRING_POINTER (s) = ggc_alloc_string (str, len); *************** build_complex (type, real, imag) *** 757,763 **** tree type; tree real, imag; { ! register tree t = make_node (COMPLEX_CST); TREE_REALPART (t) = real; TREE_IMAGPART (t) = imag; --- 761,767 ---- tree type; tree real, imag; { ! tree t = make_node (COMPLEX_CST); TREE_REALPART (t) = real; TREE_IMAGPART (t) = imag; *************** tree *** 774,781 **** make_tree_vec (len) int len; { ! register tree t; ! register int length = (len-1) * sizeof (tree) + sizeof (struct tree_vec); #ifdef GATHER_STATISTICS tree_node_counts[(int)vec_kind]++; --- 778,785 ---- make_tree_vec (len) int len; { ! tree t; ! int length = (len-1) * sizeof (tree) + sizeof (struct tree_vec); #ifdef GATHER_STATISTICS tree_node_counts[(int)vec_kind]++; *************** int *** 834,841 **** integer_all_onesp (expr) tree expr; { ! register int prec; ! register int uns; STRIP_NOPS (expr); --- 838,845 ---- integer_all_onesp (expr) tree expr; { ! int prec; ! int uns; STRIP_NOPS (expr); *************** int *** 1174,1181 **** list_length (t) tree t; { ! register tree tail; ! register int len = 0; for (tail = t; tail; tail = TREE_CHAIN (tail)) len++; --- 1178,1185 ---- list_length (t) tree t; { ! tree tail; ! int len = 0; for (tail = t; tail; tail = TREE_CHAIN (tail)) len++; *************** chainon (op1, op2) *** 1210,1218 **** if (op1) { ! register tree t1; #ifdef ENABLE_TREE_CHECKING ! register tree t2; #endif for (t1 = op1; TREE_CHAIN (t1); t1 = TREE_CHAIN (t1)) --- 1214,1222 ---- if (op1) { ! tree t1; #ifdef ENABLE_TREE_CHECKING ! tree t2; #endif for (t1 = op1; TREE_CHAIN (t1); t1 = TREE_CHAIN (t1)) *************** chainon (op1, op2) *** 1233,1241 **** tree tree_last (chain) ! register tree chain; { ! register tree next; if (chain) while ((next = TREE_CHAIN (chain))) chain = next; --- 1237,1245 ---- tree tree_last (chain) ! tree chain; { ! tree next; if (chain) while ((next = TREE_CHAIN (chain))) chain = next; *************** tree *** 1249,1255 **** nreverse (t) tree t; { ! register tree prev = 0, decl, next; for (decl = t; decl; decl = next) { next = TREE_CHAIN (decl); --- 1253,1259 ---- nreverse (t) tree t; { ! tree prev = 0, decl, next; for (decl = t; decl; decl = next) { next = TREE_CHAIN (decl); *************** tree *** 1291,1297 **** build_tree_list (parm, value) tree parm, value; { ! register tree t = make_node (TREE_LIST); TREE_PURPOSE (t) = parm; TREE_VALUE (t) = value; return t; --- 1295,1301 ---- build_tree_list (parm, value) tree parm, value; { ! tree t = make_node (TREE_LIST); TREE_PURPOSE (t) = parm; TREE_VALUE (t) = value; return t; *************** tree *** 1305,1311 **** tree_cons (purpose, value, chain) tree purpose, value, chain; { ! register tree node; node = ggc_alloc_tree (sizeof (struct tree_list)); --- 1309,1315 ---- tree_cons (purpose, value, chain) tree purpose, value, chain; { ! tree node; node = ggc_alloc_tree (sizeof (struct tree_list)); *************** staticp (arg) *** 1538,1549 **** #endif case ARRAY_REF: if (TREE_CODE (TYPE_SIZE (TREE_TYPE (arg))) == INTEGER_CST && TREE_CODE (TREE_OPERAND (arg, 1)) == INTEGER_CST) return staticp (TREE_OPERAND (arg, 0)); default: ! return 0; } } --- 1542,1558 ---- #endif case ARRAY_REF: + case ARRAY_RANGE_REF: if (TREE_CODE (TYPE_SIZE (TREE_TYPE (arg))) == INTEGER_CST && TREE_CODE (TREE_OPERAND (arg, 1)) == INTEGER_CST) return staticp (TREE_OPERAND (arg, 0)); default: ! if ((unsigned int) TREE_CODE (arg) ! >= (unsigned int) LAST_AND_UNUSED_TREE_CODE) ! return (*lang_hooks.staticp) (arg); ! else ! return 0; } } *************** tree *** 1573,1593 **** save_expr (expr) tree expr; { ! register tree t = fold (expr); /* We don't care about whether this can be used as an lvalue in this context. */ while (TREE_CODE (t) == NON_LVALUE_EXPR) t = TREE_OPERAND (t, 0); /* If the tree evaluates to a constant, then we don't want to hide that fact (i.e. this allows further folding, and direct checks for constants). However, a read-only object that has side effects cannot be bypassed. Since it is no problem to reevaluate literals, we just return the literal node. */ ! ! if (TREE_CONSTANT (t) || (TREE_READONLY (t) && ! TREE_SIDE_EFFECTS (t)) ! || TREE_CODE (t) == SAVE_EXPR || TREE_CODE (t) == ERROR_MARK) return t; /* If T contains a PLACEHOLDER_EXPR, we must evaluate it each time, since --- 1582,1614 ---- save_expr (expr) tree expr; { ! tree t = fold (expr); ! tree inner; /* We don't care about whether this can be used as an lvalue in this context. */ while (TREE_CODE (t) == NON_LVALUE_EXPR) t = TREE_OPERAND (t, 0); + /* If we have simple operations applied to a SAVE_EXPR or to a SAVE_EXPR and + a constant, it will be more efficient to not make another SAVE_EXPR since + it will allow better simplification and GCSE will be able to merge the + computations if they actualy occur. */ + for (inner = t; + (TREE_CODE_CLASS (TREE_CODE (inner)) == '1' + || (TREE_CODE_CLASS (TREE_CODE (inner)) == '2' + && TREE_CONSTANT (TREE_OPERAND (inner, 1)))); + inner = TREE_OPERAND (inner, 0)) + ; + /* If the tree evaluates to a constant, then we don't want to hide that fact (i.e. this allows further folding, and direct checks for constants). However, a read-only object that has side effects cannot be bypassed. Since it is no problem to reevaluate literals, we just return the literal node. */ ! if (TREE_CONSTANT (inner) ! || (TREE_READONLY (inner) && ! TREE_SIDE_EFFECTS (inner)) ! || TREE_CODE (inner) == SAVE_EXPR || TREE_CODE (inner) == ERROR_MARK) return t; /* If T contains a PLACEHOLDER_EXPR, we must evaluate it each time, since *************** first_rtl_op (code) *** 1646,1653 **** case RTL_EXPR: return 0; case WITH_CLEANUP_EXPR: ! /* Should be defined to be 2. */ ! return 1; case METHOD_CALL_EXPR: return 3; default: --- 1667,1673 ---- case RTL_EXPR: return 0; case WITH_CLEANUP_EXPR: ! return 2; case METHOD_CALL_EXPR: return 3; default: *************** int *** 1859,1865 **** contains_placeholder_p (exp) tree exp; { ! register enum tree_code code; int result; if (!exp) --- 1879,1885 ---- contains_placeholder_p (exp) tree exp; { ! enum tree_code code; int result; if (!exp) *************** tree *** 2184,2191 **** stabilize_reference (ref) tree ref; { ! register tree result; ! register enum tree_code code = TREE_CODE (ref); switch (code) { --- 2204,2211 ---- stabilize_reference (ref) tree ref; { ! tree result; ! enum tree_code code = TREE_CODE (ref); switch (code) { *************** stabilize_reference (ref) *** 2229,2234 **** --- 2249,2260 ---- stabilize_reference_1 (TREE_OPERAND (ref, 1))); break; + case ARRAY_RANGE_REF: + result = build_nt (ARRAY_RANGE_REF, + stabilize_reference (TREE_OPERAND (ref, 0)), + stabilize_reference_1 (TREE_OPERAND (ref, 1))); + break; + case COMPOUND_EXPR: /* We cannot wrap the first expression in a SAVE_EXPR, as then it wouldn't be ignored. This matters when dealing with *************** tree *** 2276,2283 **** stabilize_reference_1 (e) tree e; { ! register tree result; ! register enum tree_code code = TREE_CODE (e); /* We cannot ignore const expressions because it might be a reference to a const array but whose index contains side-effects. But we can --- 2302,2309 ---- stabilize_reference_1 (e) tree e; { ! tree result; ! enum tree_code code = TREE_CODE (e); /* We cannot ignore const expressions because it might be a reference to a const array but whose index contains side-effects. But we can *************** stabilize_reference_1 (e) *** 2351,2373 **** tree build VPARAMS ((enum tree_code code, tree tt, ...)) { ! #ifndef ANSI_PROTOTYPES ! enum tree_code code; ! tree tt; ! #endif ! va_list p; ! register tree t; ! register int length; ! register int i; int fro; int constant; ! VA_START (p, tt); ! ! #ifndef ANSI_PROTOTYPES ! code = va_arg (p, enum tree_code); ! tt = va_arg (p, tree); ! #endif t = make_node (code); length = TREE_CODE_LENGTH (code); --- 2377,2391 ---- tree build VPARAMS ((enum tree_code code, tree tt, ...)) { ! tree t; ! int length; ! int i; int fro; int constant; ! VA_OPEN (p, tt); ! VA_FIXEDARG (p, enum tree_code, code); ! VA_FIXEDARG (p, tree, tt); t = make_node (code); length = TREE_CODE_LENGTH (code); *************** build VPARAMS ((enum tree_code code, tre *** 2389,2396 **** if (length == 2) { /* This is equivalent to the loop below, but faster. */ ! register tree arg0 = va_arg (p, tree); ! register tree arg1 = va_arg (p, tree); TREE_OPERAND (t, 0) = arg0; TREE_OPERAND (t, 1) = arg1; --- 2407,2414 ---- if (length == 2) { /* This is equivalent to the loop below, but faster. */ ! tree arg0 = va_arg (p, tree); ! tree arg1 = va_arg (p, tree); TREE_OPERAND (t, 0) = arg0; TREE_OPERAND (t, 1) = arg1; *************** build VPARAMS ((enum tree_code code, tre *** 2417,2423 **** } else if (length == 1) { ! register tree arg0 = va_arg (p, tree); /* The only one-operand cases we handle here are those with side-effects. Others are handled with build1. So don't bother checked if the --- 2435,2441 ---- } else if (length == 1) { ! tree arg0 = va_arg (p, tree); /* The only one-operand cases we handle here are those with side-effects. Others are handled with build1. So don't bother checked if the *************** build VPARAMS ((enum tree_code code, tre *** 2432,2438 **** { for (i = 0; i < length; i++) { ! register tree operand = va_arg (p, tree); TREE_OPERAND (t, i) = operand; if (operand && fro > i) --- 2450,2456 ---- { for (i = 0; i < length; i++) { ! tree operand = va_arg (p, tree); TREE_OPERAND (t, i) = operand; if (operand && fro > i) *************** build VPARAMS ((enum tree_code code, tre *** 2444,2450 **** } } } ! va_end (p); TREE_CONSTANT (t) = constant; return t; --- 2462,2468 ---- } } } ! VA_CLOSE (p); TREE_CONSTANT (t) = constant; return t; *************** build1 (code, type, node) *** 2460,2470 **** tree type; tree node; { ! register int length; #ifdef GATHER_STATISTICS ! register tree_node_kind kind; #endif ! register tree t; #ifdef GATHER_STATISTICS if (TREE_CODE_CLASS (code) == 'r') --- 2478,2488 ---- tree type; tree node; { ! int length; #ifdef GATHER_STATISTICS ! tree_node_kind kind; #endif ! tree t; #ifdef GATHER_STATISTICS if (TREE_CODE_CLASS (code) == 'r') *************** build1 (code, type, node) *** 2518,2523 **** --- 2536,2547 ---- TREE_READONLY (t) = 0; break; + case INDIRECT_REF: + /* Whether a dereference is readonly has nothing to do with whether + its operand is readonly. */ + TREE_READONLY (t) = 0; + break; + default: if (TREE_CODE_CLASS (code) == '1' && node && TREE_CONSTANT (node)) TREE_CONSTANT (t) = 1; *************** build1 (code, type, node) *** 2535,2553 **** tree build_nt VPARAMS ((enum tree_code code, ...)) { ! #ifndef ANSI_PROTOTYPES ! enum tree_code code; ! #endif ! va_list p; ! register tree t; ! register int length; ! register int i; ! ! VA_START (p, code); ! #ifndef ANSI_PROTOTYPES ! code = va_arg (p, enum tree_code); ! #endif t = make_node (code); length = TREE_CODE_LENGTH (code); --- 2559,2570 ---- tree build_nt VPARAMS ((enum tree_code code, ...)) { ! tree t; ! int length; ! int i; ! VA_OPEN (p, code); ! VA_FIXEDARG (p, enum tree_code, code); t = make_node (code); length = TREE_CODE_LENGTH (code); *************** build_nt VPARAMS ((enum tree_code code, *** 2555,2577 **** for (i = 0; i < length; i++) TREE_OPERAND (t, i) = va_arg (p, tree); ! va_end (p); ! return t; ! } ! ! #if 0 ! /* Commented out because this wants to be done very ! differently. See cp-lex.c. */ ! tree ! build_op_identifier (op1, op2) ! tree op1, op2; ! { ! register tree t = make_node (OP_IDENTIFIER); ! TREE_PURPOSE (t) = op1; ! TREE_VALUE (t) = op2; return t; } - #endif /* Create a DECL_... node of code CODE, name NAME and data type TYPE. We do NOT enter this node in any sort of symbol table. --- 2572,2580 ---- for (i = 0; i < length; i++) TREE_OPERAND (t, i) = va_arg (p, tree); ! VA_CLOSE (p); return t; } /* Create a DECL_... node of code CODE, name NAME and data type TYPE. We do NOT enter this node in any sort of symbol table. *************** build_decl (code, name, type) *** 2584,2590 **** enum tree_code code; tree name, type; { ! register tree t; t = make_node (code); --- 2587,2593 ---- enum tree_code code; tree name, type; { ! tree t; t = make_node (code); *************** tree *** 2612,2618 **** build_block (vars, tags, subblocks, supercontext, chain) tree vars, tags ATTRIBUTE_UNUSED, subblocks, supercontext, chain; { ! register tree block = make_node (BLOCK); BLOCK_VARS (block) = vars; BLOCK_SUBBLOCKS (block) = subblocks; --- 2615,2621 ---- build_block (vars, tags, subblocks, supercontext, chain) tree vars, tags ATTRIBUTE_UNUSED, subblocks, supercontext, chain; { ! tree block = make_node (BLOCK); BLOCK_VARS (block) = vars; BLOCK_SUBBLOCKS (block) = subblocks; *************** build_expr_wfl (node, file, line, col) *** 2634,2640 **** { static const char *last_file = 0; static tree last_filenode = NULL_TREE; ! register tree wfl = make_node (EXPR_WITH_FILE_LOCATION); EXPR_WFL_NODE (wfl) = node; EXPR_WFL_SET_LINECOL (wfl, line, col); --- 2637,2643 ---- { static const char *last_file = 0; static tree last_filenode = NULL_TREE; ! tree wfl = make_node (EXPR_WITH_FILE_LOCATION); EXPR_WFL_NODE (wfl) = node; EXPR_WFL_SET_LINECOL (wfl, line, col); *************** build_expr_wfl (node, file, line, col) *** 2654,2667 **** return wfl; } ! /* Return a declaration like DDECL except that its DECL_MACHINE_ATTRIBUTE is ATTRIBUTE. */ tree build_decl_attribute_variant (ddecl, attribute) tree ddecl, attribute; { ! DECL_MACHINE_ATTRIBUTES (ddecl) = attribute; return ddecl; } --- 2657,2670 ---- return wfl; } ! /* Return a declaration like DDECL except that its DECL_ATTRIBUTES is ATTRIBUTE. */ tree build_decl_attribute_variant (ddecl, attribute) tree ddecl, attribute; { ! DECL_ATTRIBUTES (ddecl) = attribute; return ddecl; } *************** build_type_attribute_variant (ttype, att *** 2719,2842 **** return ttype; } ! /* Return a 1 if ATTR_NAME and ATTR_ARGS is valid for either declaration DECL ! or type TYPE and 0 otherwise. Validity is determined the configuration ! macros VALID_MACHINE_DECL_ATTRIBUTE and VALID_MACHINE_TYPE_ATTRIBUTE. */ int ! valid_machine_attribute (attr_name, attr_args, decl, type) ! tree attr_name; ! tree attr_args ATTRIBUTE_UNUSED; ! tree decl ATTRIBUTE_UNUSED; ! tree type ATTRIBUTE_UNUSED; { ! int validated = 0; ! #ifdef VALID_MACHINE_DECL_ATTRIBUTE ! tree decl_attr_list = decl != 0 ? DECL_MACHINE_ATTRIBUTES (decl) : 0; ! #endif ! #ifdef VALID_MACHINE_TYPE_ATTRIBUTE ! tree type_attr_list = TYPE_ATTRIBUTES (type); ! #endif ! ! if (TREE_CODE (attr_name) != IDENTIFIER_NODE) ! abort (); ! ! #ifdef VALID_MACHINE_DECL_ATTRIBUTE ! if (decl != 0 ! && VALID_MACHINE_DECL_ATTRIBUTE (decl, decl_attr_list, attr_name, ! attr_args)) ! { ! tree attr = lookup_attribute (IDENTIFIER_POINTER (attr_name), ! decl_attr_list); ! ! if (attr != NULL_TREE) ! { ! /* Override existing arguments. Declarations are unique so we can ! modify this in place. */ ! TREE_VALUE (attr) = attr_args; ! } ! else ! { ! decl_attr_list = tree_cons (attr_name, attr_args, decl_attr_list); ! decl = build_decl_attribute_variant (decl, decl_attr_list); ! } ! ! validated = 1; ! } ! #endif ! ! #ifdef VALID_MACHINE_TYPE_ATTRIBUTE ! if (validated) ! /* Don't apply the attribute to both the decl and the type. */ ! ; ! else if (VALID_MACHINE_TYPE_ATTRIBUTE (type, type_attr_list, attr_name, ! attr_args)) ! { ! tree attr = lookup_attribute (IDENTIFIER_POINTER (attr_name), ! type_attr_list); ! ! if (attr != NULL_TREE) ! { ! /* Override existing arguments. ! ??? This currently works since attribute arguments are not ! included in `attribute_hash_list'. Something more complicated ! may be needed in the future. */ ! TREE_VALUE (attr) = attr_args; ! } ! else ! { ! /* If this is part of a declaration, create a type variant, ! otherwise, this is part of a type definition, so add it ! to the base type. */ ! type_attr_list = tree_cons (attr_name, attr_args, type_attr_list); ! if (decl != 0) ! type = build_type_attribute_variant (type, type_attr_list); ! else ! TYPE_ATTRIBUTES (type) = type_attr_list; ! } ! ! if (decl != 0) ! TREE_TYPE (decl) = type; ! validated = 1; ! } ! /* Handle putting a type attribute on pointer-to-function-type by putting ! the attribute on the function type. */ ! else if (POINTER_TYPE_P (type) ! && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE ! && VALID_MACHINE_TYPE_ATTRIBUTE (TREE_TYPE (type), type_attr_list, ! attr_name, attr_args)) ! { ! tree inner_type = TREE_TYPE (type); ! tree inner_attr_list = TYPE_ATTRIBUTES (inner_type); ! tree attr = lookup_attribute (IDENTIFIER_POINTER (attr_name), ! type_attr_list); ! if (attr != NULL_TREE) ! TREE_VALUE (attr) = attr_args; ! else ! { ! inner_attr_list = tree_cons (attr_name, attr_args, inner_attr_list); ! inner_type = build_type_attribute_variant (inner_type, ! inner_attr_list); ! } ! if (decl != 0) ! TREE_TYPE (decl) = build_pointer_type (inner_type); ! else ! { ! /* Clear TYPE_POINTER_TO for the old inner type, since ! `type' won't be pointing to it anymore. */ ! TYPE_POINTER_TO (TREE_TYPE (type)) = NULL_TREE; ! TREE_TYPE (type) = inner_type; ! } ! validated = 1; ! } ! #endif ! return validated; } /* Return non-zero if IDENT is a valid name for attribute ATTR, --- 2722,2778 ---- return ttype; } ! /* Default value of targetm.comp_type_attributes that always returns 1. */ int ! default_comp_type_attributes (type1, type2) ! tree type1 ATTRIBUTE_UNUSED; ! tree type2 ATTRIBUTE_UNUSED; { ! return 1; ! } ! /* Default version of targetm.set_default_type_attributes that always does ! nothing. */ ! void ! default_set_default_type_attributes (type) ! tree type ATTRIBUTE_UNUSED; ! { ! } ! /* Default version of targetm.insert_attributes that always does nothing. */ ! void ! default_insert_attributes (decl, attr_ptr) ! tree decl ATTRIBUTE_UNUSED; ! tree *attr_ptr ATTRIBUTE_UNUSED; ! { ! } ! /* Default value of targetm.attribute_table that is empty. */ ! const struct attribute_spec default_target_attribute_table[] = ! { ! { NULL, 0, 0, false, false, false, NULL } ! }; ! /* Default value of targetm.function_attribute_inlinable_p that always ! returns false. */ ! bool ! default_function_attribute_inlinable_p (fndecl) ! tree fndecl ATTRIBUTE_UNUSED; ! { ! /* By default, functions with machine attributes cannot be inlined. */ ! return false; ! } ! /* Default value of targetm.ms_bitfield_layout_p that always returns ! false. */ ! bool ! default_ms_bitfield_layout_p (record) ! tree record ATTRIBUTE_UNUSED; ! { ! /* By default, GCC does not use the MS VC++ bitfield layout rules. */ ! return false; } /* Return non-zero if IDENT is a valid name for attribute ATTR, *************** is_attribute_p (attr, ident) *** 2890,2896 **** /* Given an attribute name and a list of attributes, return a pointer to the attribute's list element if the attribute is part of the list, or NULL_TREE ! if not found. */ tree lookup_attribute (attr_name, list) --- 2826,2834 ---- /* Given an attribute name and a list of attributes, return a pointer to the attribute's list element if the attribute is part of the list, or NULL_TREE ! if not found. If the attribute appears more than once, this only ! returns the first occurrence; the TREE_CHAIN of the return value should ! be passed back in if further occurrences are wanted. */ tree lookup_attribute (attr_name, list) *************** lookup_attribute (attr_name, list) *** 2914,2920 **** tree merge_attributes (a1, a2) ! register tree a1, a2; { tree attributes; --- 2852,2858 ---- tree merge_attributes (a1, a2) ! tree a1, a2; { tree attributes; *************** merge_attributes (a1, a2) *** 2932,2984 **** else { /* Pick the longest list, and hang on the other list. */ - /* ??? For the moment we punt on the issue of attrs with args. */ if (list_length (a1) < list_length (a2)) attributes = a2, a2 = a1; for (; a2 != 0; a2 = TREE_CHAIN (a2)) ! if (lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2)), ! attributes) == NULL_TREE) ! { ! a1 = copy_node (a2); ! TREE_CHAIN (a1) = attributes; ! attributes = a1; ! } } } return attributes; } /* Given types T1 and T2, merge their attributes and return ! the result. */ tree ! merge_machine_type_attributes (t1, t2) tree t1, t2; { - #ifdef MERGE_MACHINE_TYPE_ATTRIBUTES - return MERGE_MACHINE_TYPE_ATTRIBUTES (t1, t2); - #else return merge_attributes (TYPE_ATTRIBUTES (t1), TYPE_ATTRIBUTES (t2)); - #endif } /* Given decls OLDDECL and NEWDECL, merge their attributes and return the result. */ tree ! merge_machine_decl_attributes (olddecl, newdecl) tree olddecl, newdecl; { ! #ifdef MERGE_MACHINE_DECL_ATTRIBUTES ! return MERGE_MACHINE_DECL_ATTRIBUTES (olddecl, newdecl); ! #else ! return merge_attributes (DECL_MACHINE_ATTRIBUTES (olddecl), ! DECL_MACHINE_ATTRIBUTES (newdecl)); ! #endif } /* Set the type qualifiers for TYPE to TYPE_QUALS, which is a bitmask of the various TYPE_QUAL values. */ --- 2870,2981 ---- else { /* Pick the longest list, and hang on the other list. */ if (list_length (a1) < list_length (a2)) attributes = a2, a2 = a1; for (; a2 != 0; a2 = TREE_CHAIN (a2)) ! { ! tree a; ! for (a = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2)), ! attributes); ! a != NULL_TREE; ! a = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2)), ! TREE_CHAIN (a))) ! { ! if (simple_cst_equal (TREE_VALUE (a), TREE_VALUE (a2)) == 1) ! break; ! } ! if (a == NULL_TREE) ! { ! a1 = copy_node (a2); ! TREE_CHAIN (a1) = attributes; ! attributes = a1; ! } ! } } } return attributes; } /* Given types T1 and T2, merge their attributes and return ! the result. */ tree ! merge_type_attributes (t1, t2) tree t1, t2; { return merge_attributes (TYPE_ATTRIBUTES (t1), TYPE_ATTRIBUTES (t2)); } /* Given decls OLDDECL and NEWDECL, merge their attributes and return the result. */ tree ! merge_decl_attributes (olddecl, newdecl) tree olddecl, newdecl; { ! return merge_attributes (DECL_ATTRIBUTES (olddecl), ! DECL_ATTRIBUTES (newdecl)); ! } ! ! #ifdef TARGET_DLLIMPORT_DECL_ATTRIBUTES ! ! /* Specialization of merge_decl_attributes for various Windows targets. ! ! This handles the following situation: ! ! __declspec (dllimport) int foo; ! int foo; ! ! The second instance of `foo' nullifies the dllimport. */ ! ! tree ! merge_dllimport_decl_attributes (old, new) ! tree old; ! tree new; ! { ! tree a; ! int delete_dllimport_p; ! ! old = DECL_ATTRIBUTES (old); ! new = DECL_ATTRIBUTES (new); ! ! /* What we need to do here is remove from `old' dllimport if it doesn't ! appear in `new'. dllimport behaves like extern: if a declaration is ! marked dllimport and a definition appears later, then the object ! is not dllimport'd. */ ! if (lookup_attribute ("dllimport", old) != NULL_TREE ! && lookup_attribute ("dllimport", new) == NULL_TREE) ! delete_dllimport_p = 1; ! else ! delete_dllimport_p = 0; ! ! a = merge_attributes (old, new); ! ! if (delete_dllimport_p) ! { ! tree prev, t; ! ! /* Scan the list for dllimport and delete it. */ ! for (prev = NULL_TREE, t = a; t; prev = t, t = TREE_CHAIN (t)) ! { ! if (is_attribute_p ("dllimport", TREE_PURPOSE (t))) ! { ! if (prev == NULL_TREE) ! a = TREE_CHAIN (a); ! else ! TREE_CHAIN (prev) = TREE_CHAIN (t); ! break; ! } ! } ! } ! ! return a; } + + #endif /* TARGET_DLLIMPORT_DECL_ATTRIBUTES */ /* Set the type qualifiers for TYPE to TYPE_QUALS, which is a bitmask of the various TYPE_QUAL values. */ *************** tree *** 3044,3050 **** build_type_copy (type) tree type; { ! register tree t, m = TYPE_MAIN_VARIANT (type); t = copy_node (type); --- 3041,3047 ---- build_type_copy (type) tree type; { ! tree t, m = TYPE_MAIN_VARIANT (type); t = copy_node (type); *************** type_hash_list (list) *** 3070,3076 **** tree list; { unsigned int hashcode; ! register tree tail; for (hashcode = 0, tail = list; tail; tail = TREE_CHAIN (tail)) hashcode += TYPE_HASH (TREE_VALUE (tail)); --- 3067,3073 ---- tree list; { unsigned int hashcode; ! tree tail; for (hashcode = 0, tail = list; tail; tail = TREE_CHAIN (tail)) hashcode += TYPE_HASH (TREE_VALUE (tail)); *************** type_hash_add (hashcode, type) *** 3155,3161 **** struct type_hash *h; void **loc; ! h = (struct type_hash *) permalloc (sizeof (struct type_hash)); h->hash = hashcode; h->type = type; loc = htab_find_slot_with_hash (type_hash_table, h, hashcode, INSERT); --- 3152,3158 ---- struct type_hash *h; void **loc; ! h = (struct type_hash *) ggc_alloc (sizeof (struct type_hash)); h->hash = hashcode; h->type = type; loc = htab_find_slot_with_hash (type_hash_table, h, hashcode, INSERT); *************** type_hash_canon (hashcode, type) *** 3186,3191 **** --- 3183,3190 ---- if (debug_no_type_hash) return type; + /* See if the type is in the hash table already. If so, return it. + Otherwise, add the type. */ t1 = type_hash_lookup (hashcode, type); if (t1 != 0) { *************** type_hash_canon (hashcode, type) *** 3195,3231 **** #endif return t1; } ! ! /* If this is a permanent type, record it for later reuse. */ ! type_hash_add (hashcode, type); ! ! return type; } ! /* Callback function for htab_traverse. */ static int ! mark_hash_entry (entry, param) ! void **entry; ! void *param ATTRIBUTE_UNUSED; { ! struct type_hash *p = *(struct type_hash **) entry; ! ! ggc_mark_tree (p->type); ! /* Continue scan. */ ! return 1; } ! /* Mark ARG (which is really a htab_t *) for GC. */ static void ! mark_type_hash (arg) ! void *arg; { ! htab_t t = *(htab_t *) arg; ! ! htab_traverse (t, mark_hash_entry, 0); } /* Mark the hashtable slot pointed to by ENTRY (which is really a --- 3194,3231 ---- #endif return t1; } ! else ! { ! type_hash_add (hashcode, type); ! return type; ! } } ! /* See if the data pointed to by the type hash table is marked. We consider ! it marked if the type is marked or if a debug type number or symbol ! table entry has been made for the type. This reduces the amount of ! debugging output and eliminates that dependency of the debug output on ! the number of garbage collections. */ static int ! type_hash_marked_p (p) ! const void *p; { ! tree type = ((struct type_hash *) p)->type; ! return ggc_marked_p (type) || TYPE_SYMTAB_POINTER (type); } ! /* Mark the entry in the type hash table the type it points to is marked. ! Also mark the type in case we are considering this entry "marked" by ! virtue of TYPE_SYMTAB_POINTER being set. */ static void ! type_hash_mark (p) ! const void *p; { ! ggc_mark (p); ! ggc_mark_tree (((struct type_hash *) p)->type); } /* Mark the hashtable slot pointed to by ENTRY (which is really a *************** attribute_hash_list (list) *** 3269,3275 **** tree list; { unsigned int hashcode; ! register tree tail; for (hashcode = 0, tail = list; tail; tail = TREE_CHAIN (tail)) /* ??? Do we want to add in TREE_VALUE too? */ --- 3269,3275 ---- tree list; { unsigned int hashcode; ! tree tail; for (hashcode = 0, tail = list; tail; tail = TREE_CHAIN (tail)) /* ??? Do we want to add in TREE_VALUE too? */ *************** int *** 3300,3306 **** attribute_list_contained (l1, l2) tree l1, l2; { ! register tree t1, t2; /* First check the obvious, maybe the lists are identical. */ if (l1 == l2) --- 3300,3306 ---- attribute_list_contained (l1, l2) tree l1, l2; { ! tree t1, t2; /* First check the obvious, maybe the lists are identical. */ if (l1 == l2) *************** attribute_list_contained (l1, l2) *** 3315,3326 **** /* Maybe the lists are equal. */ if (t1 == 0 && t2 == 0) ! return 1; for (; t2 != 0; t2 = TREE_CHAIN (t2)) { ! tree attr ! = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (t2)), l1); if (attr == 0) return 0; --- 3315,3333 ---- /* Maybe the lists are equal. */ if (t1 == 0 && t2 == 0) ! return 1; for (; t2 != 0; t2 = TREE_CHAIN (t2)) { ! tree attr; ! for (attr = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (t2)), l1); ! attr != NULL_TREE; ! attr = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (t2)), ! TREE_CHAIN (attr))) ! { ! if (simple_cst_equal (TREE_VALUE (t2), TREE_VALUE (attr)) == 1) ! break; ! } if (attr == 0) return 0; *************** int *** 3341,3347 **** type_list_equal (l1, l2) tree l1, l2; { ! register tree t1, t2; for (t1 = l1, t2 = l2; t1 && t2; t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2)) if (TREE_VALUE (t1) != TREE_VALUE (t2) --- 3348,3354 ---- type_list_equal (l1, l2) tree l1, l2; { ! tree t1, t2; for (t1 = l1, t2 = l2; t1 && t2; t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2)) if (TREE_VALUE (t1) != TREE_VALUE (t2) *************** tree_int_cst_lt (t1, t2) *** 3408,3414 **** if (t1 == t2) return 0; ! if (! TREE_UNSIGNED (TREE_TYPE (t1))) return INT_CST_LT (t1, t2); return INT_CST_LT_UNSIGNED (t1, t2); --- 3415,3434 ---- if (t1 == t2) return 0; ! if (TREE_UNSIGNED (TREE_TYPE (t1)) != TREE_UNSIGNED (TREE_TYPE (t2))) ! { ! int t1_sgn = tree_int_cst_sgn (t1); ! int t2_sgn = tree_int_cst_sgn (t2); ! ! if (t1_sgn < t2_sgn) ! return 1; ! else if (t1_sgn > t2_sgn) ! return 0; ! /* Otherwise, both are non-negative, so we compare them as ! unsigned just in case one of them would overflow a signed ! type. */ ! } ! else if (! TREE_UNSIGNED (TREE_TYPE (t1))) return INT_CST_LT (t1, t2); return INT_CST_LT_UNSIGNED (t1, t2); *************** tree_int_cst_compare (t1, t2) *** 3429,3436 **** return 0; } ! /* Return 1 if T is an INTEGER_CST that can be represented in a single ! HOST_WIDE_INT value. If POS is nonzero, the result must be positive. */ int host_integerp (t, pos) --- 3449,3458 ---- return 0; } ! /* Return 1 if T is an INTEGER_CST that can be manipulated efficiently on ! the host. If POS is zero, the value can be represented in a single ! HOST_WIDE_INT. If POS is nonzero, the value must be positive and can ! be represented in a single unsigned HOST_WIDE_INT. */ int host_integerp (t, pos) *************** host_integerp (t, pos) *** 3442,3450 **** && ((TREE_INT_CST_HIGH (t) == 0 && (HOST_WIDE_INT) TREE_INT_CST_LOW (t) >= 0) || (! pos && TREE_INT_CST_HIGH (t) == -1 ! && (HOST_WIDE_INT) TREE_INT_CST_LOW (t) < 0) ! || (! pos && TREE_INT_CST_HIGH (t) == 0 ! && TREE_UNSIGNED (TREE_TYPE (t))))); } /* Return the HOST_WIDE_INT least significant bits of T if it is an --- 3464,3472 ---- && ((TREE_INT_CST_HIGH (t) == 0 && (HOST_WIDE_INT) TREE_INT_CST_LOW (t) >= 0) || (! pos && TREE_INT_CST_HIGH (t) == -1 ! && (HOST_WIDE_INT) TREE_INT_CST_LOW (t) < 0 ! && ! TREE_UNSIGNED (TREE_TYPE (t))) ! || (pos && TREE_INT_CST_HIGH (t) == 0))); } /* Return the HOST_WIDE_INT least significant bits of T if it is an *************** int *** 3468,3474 **** tree_int_cst_msb (t) tree t; { ! register int prec; HOST_WIDE_INT h; unsigned HOST_WIDE_INT l; --- 3490,3496 ---- tree_int_cst_msb (t) tree t; { ! int prec; HOST_WIDE_INT h; unsigned HOST_WIDE_INT l; *************** int *** 3527,3533 **** simple_cst_equal (t1, t2) tree t1, t2; { ! register enum tree_code code1, code2; int cmp; int i; --- 3549,3555 ---- simple_cst_equal (t1, t2) tree t1, t2; { ! enum tree_code code1, code2; int cmp; int i; *************** simple_cst_equal (t1, t2) *** 3610,3616 **** if (cmp <= 0) return cmp; ! return simple_cst_equal (TREE_OPERAND (t1, 2), TREE_OPERAND (t1, 2)); case COMPONENT_REF: if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1)) --- 3632,3638 ---- if (cmp <= 0) return cmp; ! return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1)); case COMPONENT_REF: if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1)) *************** simple_cst_equal (t1, t2) *** 3665,3671 **** int compare_tree_int (t, u) tree t; ! unsigned int u; { if (tree_int_cst_sgn (t) < 0) return -1; --- 3687,3693 ---- int compare_tree_int (t, u) tree t; ! unsigned HOST_WIDE_INT u; { if (tree_int_cst_sgn (t) < 0) return -1; *************** tree *** 3690,3696 **** build_pointer_type (to_type) tree to_type; { ! register tree t = TYPE_POINTER_TO (to_type); /* First, if we already have a type for pointers to TO_TYPE, use it. */ --- 3712,3718 ---- build_pointer_type (to_type) tree to_type; { ! tree t = TYPE_POINTER_TO (to_type); /* First, if we already have a type for pointers to TO_TYPE, use it. */ *************** tree *** 3719,3725 **** build_reference_type (to_type) tree to_type; { ! register tree t = TYPE_REFERENCE_TO (to_type); /* First, if we already have a type for pointers to TO_TYPE, use it. */ --- 3741,3747 ---- build_reference_type (to_type) tree to_type; { ! tree t = TYPE_REFERENCE_TO (to_type); /* First, if we already have a type for pointers to TO_TYPE, use it. */ *************** build_reference_type (to_type) *** 3746,3752 **** tree build_type_no_quals (t) ! tree t; { switch (TREE_CODE (t)) { --- 3768,3774 ---- tree build_type_no_quals (t) ! tree t; { switch (TREE_CODE (t)) { *************** tree *** 3772,3778 **** build_index_type (maxval) tree maxval; { ! register tree itype = make_node (INTEGER_TYPE); TREE_TYPE (itype) = sizetype; TYPE_PRECISION (itype) = TYPE_PRECISION (sizetype); --- 3794,3800 ---- build_index_type (maxval) tree maxval; { ! tree itype = make_node (INTEGER_TYPE); TREE_TYPE (itype) = sizetype; TYPE_PRECISION (itype) = TYPE_PRECISION (sizetype); *************** tree *** 3799,3805 **** build_range_type (type, lowval, highval) tree type, lowval, highval; { ! register tree itype = make_node (INTEGER_TYPE); TREE_TYPE (itype) = type; if (type == NULL_TREE) --- 3821,3827 ---- build_range_type (type, lowval, highval) tree type, lowval, highval; { ! tree itype = make_node (INTEGER_TYPE); TREE_TYPE (itype) = type; if (type == NULL_TREE) *************** build_range_type (type, lowval, highval) *** 3827,3833 **** of just highval (maxval). */ tree ! build_index_2_type (lowval,highval) tree lowval, highval; { return build_range_type (sizetype, lowval, highval); --- 3849,3855 ---- of just highval (maxval). */ tree ! build_index_2_type (lowval, highval) tree lowval, highval; { return build_range_type (sizetype, lowval, highval); *************** tree *** 3871,3877 **** build_array_type (elt_type, index_type) tree elt_type, index_type; { ! register tree t; unsigned int hashcode; if (TREE_CODE (elt_type) == FUNCTION_TYPE) --- 3893,3899 ---- build_array_type (elt_type, index_type) tree elt_type, index_type; { ! tree t; unsigned int hashcode; if (TREE_CODE (elt_type) == FUNCTION_TYPE) *************** build_array_type (elt_type, index_type) *** 3907,3913 **** tree get_inner_array_type (array) ! tree array; { tree type = TREE_TYPE (array); --- 3929,3935 ---- tree get_inner_array_type (array) ! tree array; { tree type = TREE_TYPE (array); *************** tree *** 3928,3934 **** build_function_type (value_type, arg_types) tree value_type, arg_types; { ! register tree t; unsigned int hashcode; if (TREE_CODE (value_type) == FUNCTION_TYPE) --- 3950,3956 ---- build_function_type (value_type, arg_types) tree value_type, arg_types; { ! tree t; unsigned int hashcode; if (TREE_CODE (value_type) == FUNCTION_TYPE) *************** tree *** 3960,3966 **** build_method_type (basetype, type) tree basetype, type; { ! register tree t; unsigned int hashcode; /* Make a node of the sort we want. */ --- 3982,3988 ---- build_method_type (basetype, type) tree basetype, type; { ! tree t; unsigned int hashcode; /* Make a node of the sort we want. */ *************** tree *** 3997,4003 **** build_offset_type (basetype, type) tree basetype, type; { ! register tree t; unsigned int hashcode; /* Make a node of the sort we want. */ --- 4019,4025 ---- build_offset_type (basetype, type) tree basetype, type; { ! tree t; unsigned int hashcode; /* Make a node of the sort we want. */ *************** tree *** 4022,4028 **** build_complex_type (component_type) tree component_type; { ! register tree t; unsigned int hashcode; /* Make a node of the sort we want. */ --- 4044,4050 ---- build_complex_type (component_type) tree component_type; { ! tree t; unsigned int hashcode; /* Make a node of the sort we want. */ *************** build_complex_type (component_type) *** 4040,4046 **** /* If we are writing Dwarf2 output we need to create a name, since complex is a fundamental type. */ ! if (write_symbols == DWARF2_DEBUG && ! TYPE_NAME (t)) { const char *name; if (component_type == char_type_node) --- 4062,4069 ---- /* If we are writing Dwarf2 output we need to create a name, since complex is a fundamental type. */ ! if ((write_symbols == DWARF2_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG) ! && ! TYPE_NAME (t)) { const char *name; if (component_type == char_type_node) *************** build_complex_type (component_type) *** 4100,4121 **** tree get_unwidened (op, for_type) ! register tree op; tree for_type; { /* Set UNS initially if converting OP to FOR_TYPE is a zero-extension. */ ! register tree type = TREE_TYPE (op); ! register unsigned final_prec = TYPE_PRECISION (for_type != 0 ? for_type : type); ! register int uns = (for_type != 0 && for_type != type && final_prec > TYPE_PRECISION (type) && TREE_UNSIGNED (type)); ! register tree win = op; while (TREE_CODE (op) == NOP_EXPR) { ! register int bitschange = TYPE_PRECISION (TREE_TYPE (op)) - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0))); --- 4123,4144 ---- tree get_unwidened (op, for_type) ! tree op; tree for_type; { /* Set UNS initially if converting OP to FOR_TYPE is a zero-extension. */ ! tree type = TREE_TYPE (op); ! unsigned final_prec = TYPE_PRECISION (for_type != 0 ? for_type : type); ! int uns = (for_type != 0 && for_type != type && final_prec > TYPE_PRECISION (type) && TREE_UNSIGNED (type)); ! tree win = op; while (TREE_CODE (op) == NOP_EXPR) { ! int bitschange = TYPE_PRECISION (TREE_TYPE (op)) - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0))); *************** get_unwidened (op, for_type) *** 4193,4208 **** tree get_narrower (op, unsignedp_ptr) ! register tree op; int *unsignedp_ptr; { ! register int uns = 0; int first = 1; ! register tree win = op; while (TREE_CODE (op) == NOP_EXPR) { ! register int bitschange = (TYPE_PRECISION (TREE_TYPE (op)) - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0)))); --- 4216,4231 ---- tree get_narrower (op, unsignedp_ptr) ! tree op; int *unsignedp_ptr; { ! int uns = 0; int first = 1; ! tree win = op; while (TREE_CODE (op) == NOP_EXPR) { ! int bitschange = (TYPE_PRECISION (TREE_TYPE (op)) - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0)))); *************** int_fits_type_p (c, type) *** 4282,4288 **** tree c, type; { /* If the bounds of the type are integers, we can check ourselves. ! Otherwise,. use force_fit_type, which checks against the precision. */ if (TYPE_MAX_VALUE (type) != NULL_TREE && TYPE_MIN_VALUE (type) != NULL_TREE && TREE_CODE (TYPE_MAX_VALUE (type)) == INTEGER_CST --- 4305,4312 ---- tree c, type; { /* If the bounds of the type are integers, we can check ourselves. ! If not, but this type is a subtype, try checking against that. ! Otherwise, use force_fit_type, which checks against the precision. */ if (TYPE_MAX_VALUE (type) != NULL_TREE && TYPE_MIN_VALUE (type) != NULL_TREE && TREE_CODE (TYPE_MAX_VALUE (type)) == INTEGER_CST *************** int_fits_type_p (c, type) *** 4301,4306 **** --- 4325,4332 ---- && ! (TREE_INT_CST_HIGH (c) < 0 && TREE_UNSIGNED (TREE_TYPE (c)))); } + else if (TREE_CODE (type) == INTEGER_TYPE && TREE_TYPE (type) != 0) + return int_fits_type_p (c, TREE_TYPE (type)); else { c = copy_node (c); *************** dump_tree_statistics () *** 4472,4478 **** total_nodes += tree_node_counts[i]; total_bytes += tree_node_sizes[i]; } - fprintf (stderr, "%-20s %9d\n", "identifier names", id_string_size); fprintf (stderr, "-------------------------------------\n"); fprintf (stderr, "%-20s %6d %9d\n", "Total", total_nodes, total_bytes); fprintf (stderr, "-------------------------------------\n"); --- 4498,4503 ---- *************** dump_tree_statistics () *** 4481,4487 **** #endif print_obstack_statistics ("permanent_obstack", &permanent_obstack); print_type_hash_statistics (); ! print_lang_statistics (); } #define FILE_FUNCTION_PREFIX_LEN 9 --- 4506,4512 ---- #endif print_obstack_statistics ("permanent_obstack", &permanent_obstack); print_type_hash_statistics (); ! (*lang_hooks.print_statistics) (); } #define FILE_FUNCTION_PREFIX_LEN 9 *************** append_random_chars (template) *** 4502,4520 **** 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; --- 4527,4560 ---- static unsigned HOST_WIDE_INT value; unsigned HOST_WIDE_INT v; ! if (! value) ! { ! struct stat st; ! /* VALUE should be unique for each file and must not change between ! compiles since this can cause bootstrap comparison errors. */ ! if (stat (main_input_filename, &st) < 0) ! { ! /* This can happen when preprocessed text is shipped between ! machines, e.g. with bug reports. Assume that uniqueness ! isn't actually an issue. */ ! value = 1; ! } ! else ! { ! /* In VMS, ino is an array, so we have to use both values. We ! conditionalize that. */ ! #ifdef VMS ! #define INO_TO_INT(INO) ((int) (INO)[1] << 16 ^ (int) (INO)[2]) #else ! #define INO_TO_INT(INO) INO #endif + value = st.st_dev ^ INO_TO_INT (st.st_ino) ^ st.st_mtime; + } + } + + template += strlen (template); v = value; *************** clean_symbol_name (p) *** 4542,4556 **** char *p; { for (; *p; p++) ! if (! (ISDIGIT(*p) #ifndef NO_DOLLAR_IN_LABEL /* this for `$'; unlikely, but... -- kr */ || *p == '$' #endif #ifndef NO_DOT_IN_LABEL /* this for `.'; unlikely, but... */ || *p == '.' #endif ! || ISUPPER (*p) ! || ISLOWER (*p))) *p = '_'; } --- 4582,4595 ---- char *p; { for (; *p; p++) ! if (! (ISALNUM (*p) #ifndef NO_DOLLAR_IN_LABEL /* this for `$'; unlikely, but... -- kr */ || *p == '$' #endif #ifndef NO_DOT_IN_LABEL /* this for `.'; unlikely, but... */ || *p == '.' #endif ! )) *p = '_'; } *************** tree_check_failed (node, code, file, lin *** 4729,4735 **** int line; const char *function; { ! internal_error ("Tree check: expected %s, have %s in %s, at %s:%d", tree_code_name[code], tree_code_name[TREE_CODE (node)], function, trim_filename (file), line); } --- 4768,4774 ---- int line; const char *function; { ! internal_error ("tree check: expected %s, have %s in %s, at %s:%d", tree_code_name[code], tree_code_name[TREE_CODE (node)], function, trim_filename (file), line); } *************** tree_class_check_failed (node, cl, file, *** 4746,4752 **** const char *function; { internal_error ! ("Tree check: expected class '%c', have '%c' (%s) in %s, at %s:%d", cl, TREE_CODE_CLASS (TREE_CODE (node)), tree_code_name[TREE_CODE (node)], function, trim_filename (file), line); } --- 4785,4791 ---- const char *function; { internal_error ! ("tree check: expected class '%c', have '%c' (%s) in %s, at %s:%d", cl, TREE_CODE_CLASS (TREE_CODE (node)), tree_code_name[TREE_CODE (node)], function, trim_filename (file), line); } *************** build_common_tree_nodes (signed_char) *** 4817,4833 **** intHI_type_node = make_signed_type (GET_MODE_BITSIZE (HImode)); intSI_type_node = make_signed_type (GET_MODE_BITSIZE (SImode)); intDI_type_node = make_signed_type (GET_MODE_BITSIZE (DImode)); - #if HOST_BITS_PER_WIDE_INT >= 64 intTI_type_node = make_signed_type (GET_MODE_BITSIZE (TImode)); - #endif unsigned_intQI_type_node = make_unsigned_type (GET_MODE_BITSIZE (QImode)); unsigned_intHI_type_node = make_unsigned_type (GET_MODE_BITSIZE (HImode)); unsigned_intSI_type_node = make_unsigned_type (GET_MODE_BITSIZE (SImode)); unsigned_intDI_type_node = make_unsigned_type (GET_MODE_BITSIZE (DImode)); - #if HOST_BITS_PER_WIDE_INT >= 64 unsigned_intTI_type_node = make_unsigned_type (GET_MODE_BITSIZE (TImode)); - #endif } /* Call this function after calling build_common_tree_nodes and set_sizetype. --- 4856,4868 ---- *************** build_common_tree_nodes_2 (short_double) *** 4910,4937 **** va_list_type_node = t; } ! V4SF_type_node = make_node (VECTOR_TYPE); ! TREE_TYPE (V4SF_type_node) = float_type_node; ! TYPE_MODE (V4SF_type_node) = V4SFmode; ! finish_vector_type (V4SF_type_node); ! V4SI_type_node = make_node (VECTOR_TYPE); ! TREE_TYPE (V4SI_type_node) = intSI_type_node; ! TYPE_MODE (V4SI_type_node) = V4SImode; ! finish_vector_type (V4SI_type_node); ! V2SI_type_node = make_node (VECTOR_TYPE); ! TREE_TYPE (V2SI_type_node) = intSI_type_node; ! TYPE_MODE (V2SI_type_node) = V2SImode; ! finish_vector_type (V2SI_type_node); ! V4HI_type_node = make_node (VECTOR_TYPE); ! TREE_TYPE (V4HI_type_node) = intHI_type_node; ! TYPE_MODE (V4HI_type_node) = V4HImode; ! finish_vector_type (V4HI_type_node); ! V8QI_type_node = make_node (VECTOR_TYPE); ! TREE_TYPE (V8QI_type_node) = intQI_type_node; ! TYPE_MODE (V8QI_type_node) = V8QImode; ! finish_vector_type (V8QI_type_node); } --- 4945,4990 ---- va_list_type_node = t; } ! unsigned_V4SI_type_node ! = make_vector (V4SImode, unsigned_intSI_type_node, 1); ! unsigned_V2SI_type_node ! = make_vector (V2SImode, unsigned_intSI_type_node, 1); ! unsigned_V4HI_type_node ! = make_vector (V4HImode, unsigned_intHI_type_node, 1); ! unsigned_V8QI_type_node ! = make_vector (V8QImode, unsigned_intQI_type_node, 1); ! unsigned_V8HI_type_node ! = make_vector (V8HImode, unsigned_intHI_type_node, 1); ! unsigned_V16QI_type_node ! = make_vector (V16QImode, unsigned_intQI_type_node, 1); ! V16SF_type_node = make_vector (V16SFmode, float_type_node, 0); ! V4SF_type_node = make_vector (V4SFmode, float_type_node, 0); ! V4SI_type_node = make_vector (V4SImode, intSI_type_node, 0); ! V2SI_type_node = make_vector (V2SImode, intSI_type_node, 0); ! V4HI_type_node = make_vector (V4HImode, intHI_type_node, 0); ! V8QI_type_node = make_vector (V8QImode, intQI_type_node, 0); ! V8HI_type_node = make_vector (V8HImode, intHI_type_node, 0); ! V2SF_type_node = make_vector (V2SFmode, float_type_node, 0); ! V16QI_type_node = make_vector (V16QImode, intQI_type_node, 0); ! } ! /* Returns a vector tree node given a vector mode, the inner type, and ! the signness. */ ! static tree ! make_vector (mode, innertype, unsignedp) ! enum machine_mode mode; ! tree innertype; ! int unsignedp; ! { ! tree t; ! t = make_node (VECTOR_TYPE); ! TREE_TYPE (t) = innertype; ! TYPE_MODE (t) = mode; ! TREE_UNSIGNED (TREE_TYPE (t)) = unsignedp; ! finish_vector_type (t); ! ! return t; } diff -Nrc3pad gcc-3.0.4/gcc/tree.def gcc-3.1/gcc/tree.def *** gcc-3.0.4/gcc/tree.def Sat Sep 22 01:33:20 2001 --- gcc-3.1/gcc/tree.def Tue Feb 19 02:53:25 2002 *************** *** 1,23 **** /* This file contains the definitions and documentation for the tree codes used in the GNU C compiler. ! Copyright (C) 1987, 1988, 1993, 1995, 1997, 1998, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* The third argument can be: --- 1,24 ---- /* This file contains the definitions and documentation for the tree codes used in the GNU C compiler. ! Copyright (C) 1987, 1988, 1993, 1995, 1997, 1998, 2000, 2001 ! Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* The third argument can be: *************** DEFTREECODE (ERROR_MARK, "error_mark", ' *** 50,60 **** Use `get_identifier' to get it (or create it, the first time). */ DEFTREECODE (IDENTIFIER_NODE, "identifier_node", 'x', -1) - /* Used to hold information to identify an operator (or combination - of two operators) considered as a `noun' rather than a `verb'. - The first operand is encoded in the TREE_TYPE field. */ - DEFTREECODE (OP_IDENTIFIER, "op_identifier", 'x', 2) - /* Has the TREE_VALUE and TREE_PURPOSE fields. */ /* These nodes are made into lists by chaining through the TREE_CHAIN field. The elements of the list live in the --- 51,56 ---- *************** DEFTREECODE (REAL_CST, "real_cst", 'c', *** 273,278 **** --- 269,277 ---- Also there is TREE_CST_RTL. */ DEFTREECODE (COMPLEX_CST, "complex_cst", 'c', 3) + /* Contents are in TREE_VECTOR_CST_ELTS field. */ + DEFTREECODE (VECTOR_CST, "vector_cst", 'c', 3) + /* Contents are TREE_STRING_LENGTH and TREE_STRING_POINTER fields. Also there is TREE_CST_RTL. */ DEFTREECODE (STRING_CST, "string_cst", 'c', 3) *************** DEFTREECODE (INDIRECT_REF, "indirect_ref *** 369,378 **** /* Pascal `^` on a file. One operand, an expression for the file. */ DEFTREECODE (BUFFER_REF, "buffer_ref", 'r', 1) ! /* Array indexing in languages other than C. Operand 0 is the array; operand 1 is a (single) array index. */ DEFTREECODE (ARRAY_REF, "array_ref", 'r', 2) /* Constructor: return an aggregate value made from specified components. In C, this is used only for structure and array initializers. Also used for SET_TYPE in Chill (and potentially Pascal). --- 368,389 ---- /* Pascal `^` on a file. One operand, an expression for the file. */ DEFTREECODE (BUFFER_REF, "buffer_ref", 'r', 1) ! /* Array indexing. Operand 0 is the array; operand 1 is a (single) array index. */ DEFTREECODE (ARRAY_REF, "array_ref", 'r', 2) + /* Likewise, except that the result is a range ("slice") of the array. The + starting index of the resulting array is taken from operand 1 and the size + of the range is taken from the type of the expression. */ + DEFTREECODE (ARRAY_RANGE_REF, "array_range_ref", 'r', 2) + + /* Vtable indexing. Carries data useful for emitting information + for vtable garbage collection. + Operand 0: an array_ref (or equivalent expression) + Operand 1: the vtable base (must be a var_decl) + Operand 2: index into vtable (must be an integer_cst). */ + DEFTREECODE (VTABLE_REF, "vtable_ref", 'r', 3) + /* Constructor: return an aggregate value made from specified components. In C, this is used only for structure and array initializers. Also used for SET_TYPE in Chill (and potentially Pascal). *************** DEFTREECODE (METHOD_CALL_EXPR, "method_c *** 466,473 **** /* Specify a value to compute along with its corresponding cleanup. Operand 0 argument is an expression whose value needs a cleanup. ! Operand 1 is an RTL_EXPR which will eventually represent that value. ! Operand 2 is the cleanup expression for the object. The RTL_EXPR is used in this expression, which is how the expression manages to act on the proper value. The cleanup is executed by the first enclosing CLEANUP_POINT_EXPR, if --- 477,484 ---- /* Specify a value to compute along with its corresponding cleanup. Operand 0 argument is an expression whose value needs a cleanup. ! Operand 1 is the cleanup expression for the object. ! Operand 2 is an RTL_EXPR which will eventually represent that value. The RTL_EXPR is used in this expression, which is how the expression manages to act on the proper value. The cleanup is executed by the first enclosing CLEANUP_POINT_EXPR, if *************** DEFTREECODE (FIX_ROUND_EXPR, "fix_round_ *** 593,602 **** /* Conversion of an integer to a real. */ DEFTREECODE (FLOAT_EXPR, "float_expr", '1', 1) - /* Exponentiation. Operands may have any types; - constraints on value type are not known yet. */ - DEFTREECODE (EXPON_EXPR, "expon_expr", '2', 2) - /* Unary negation. */ DEFTREECODE (NEGATE_EXPR, "negate_expr", '1', 1) --- 604,609 ---- *************** DEFTREECODE (FFS_EXPR, "ffs_expr", '1', *** 615,621 **** Shift means logical shift if done on an unsigned type, arithmetic shift if done on a signed type. The second operand is the number of bits to ! shift by; it need not be the same type as the first operand and result. */ DEFTREECODE (LSHIFT_EXPR, "lshift_expr", '2', 2) DEFTREECODE (RSHIFT_EXPR, "rshift_expr", '2', 2) DEFTREECODE (LROTATE_EXPR, "lrotate_expr", '2', 2) --- 622,630 ---- Shift means logical shift if done on an unsigned type, arithmetic shift if done on a signed type. The second operand is the number of bits to ! shift by; it need not be the same type as the first operand and result. ! Note that the result is undefined if the second operand is larger ! than the first operand's type size. */ DEFTREECODE (LSHIFT_EXPR, "lshift_expr", '2', 2) DEFTREECODE (RSHIFT_EXPR, "rshift_expr", '2', 2) DEFTREECODE (LROTATE_EXPR, "lrotate_expr", '2', 2) *************** DEFTREECODE (NOP_EXPR, "nop_expr", '1', *** 685,690 **** --- 694,711 ---- /* Value is same as argument, but guaranteed not an lvalue. */ DEFTREECODE (NON_LVALUE_EXPR, "non_lvalue_expr", '1', 1) + /* Represents viewing something of one type as being of a second type. + This corresponds to an "Unchecked Conversion" in Ada and roughly to + the idiom *(type2 *)&X in C. The only operand is the value to be + viewed as being of another type. It is undefined if the type of the + input and of the expression have different sizes. + + This code may also be used within the LHS of a MODIFY_EXPR, in which + case no actual data motion may occur. TREE_ADDRESSABLE will be set in + this case and GCC must abort if it could not do the operation without + generating insns. */ + DEFTREECODE (VIEW_CONVERT_EXPR, "view_convert_expr", '1', 1) + /* Represents something we computed once and will use multiple times. First operand is that expression. Second is the function decl in which the SAVE_EXPR was created. The third operand is the RTL, diff -Nrc3pad gcc-3.0.4/gcc/tree.h gcc-3.1/gcc/tree.h *** gcc-3.0.4/gcc/tree.h Sun Feb 3 05:16:33 2002 --- gcc-3.1/gcc/tree.h Wed Apr 17 01:43:57 2002 *************** *** 1,31 **** /* Front-end tree definitions for GNU compiler. ! Copyright (C) 1989, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 ! Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "machmode.h" #include "version.h" - #ifndef RTX_CODE - struct rtx_def; - #endif - /* Codes of tree nodes */ #define DEFTREECODE(SYM, STRING, TYPE, NARGS) SYM, --- 1,27 ---- /* Front-end tree definitions for GNU compiler. ! Copyright (C) 1989, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, ! 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "machmode.h" #include "version.h" /* Codes of tree nodes */ #define DEFTREECODE(SYM, STRING, TYPE, NARGS) SYM, *************** extern char tree_code_type[MAX_TREE_CODE *** 57,63 **** expression. */ #define IS_EXPR_CODE_CLASS(CLASS) \ ! (CLASS == '<' || CLASS == '1' || CLASS == '2' || CLASS == 'e') /* Number of argument-words in each kind of tree-node. */ --- 53,59 ---- expression. */ #define IS_EXPR_CODE_CLASS(CLASS) \ ! ((CLASS) == '<' || (CLASS) == '1' || (CLASS) == '2' || (CLASS) == 'e') /* Number of argument-words in each kind of tree-node. */ *************** extern const char *const built_in_class_ *** 84,95 **** /* Codes that identify the various built in functions so that expand_call can identify them quickly. */ ! #define DEF_BUILTIN(x) x, enum built_in_function { #include "builtins.def" ! /* Upper bound on non-language-specific builtins. */ END_BUILTINS }; #undef DEF_BUILTIN --- 80,91 ---- /* Codes that identify the various built in functions so that expand_call can identify them quickly. */ ! #define DEF_BUILTIN(ENUM, N, C, T, LT, B, F, NA) ENUM, enum built_in_function { #include "builtins.def" ! /* Upper bound on non-language-specific builtins. */ END_BUILTINS }; #undef DEF_BUILTIN *************** enum built_in_function *** 98,104 **** extern const char *const built_in_names[(int) END_BUILTINS]; /* An array of _DECL trees for the above. */ ! extern union tree_node *built_in_decls[(int) END_BUILTINS]; /* The definition of tree nodes fills the next several pages. */ --- 94,100 ---- extern const char *const built_in_names[(int) END_BUILTINS]; /* An array of _DECL trees for the above. */ ! extern tree built_in_decls[(int) END_BUILTINS]; /* The definition of tree nodes fills the next several pages. */ *************** extern union tree_node *built_in_decls[( *** 116,136 **** fields as well. The fields of a node are never accessed directly, always through accessor macros. */ - /* This type is used everywhere to refer to a tree node. */ - - typedef union tree_node *tree; - /* Every kind of tree node starts with this structure, so all nodes have these fields. See the accessor macros, defined below, for documentation of the ! fields. */ struct tree_common { ! union tree_node *chain; ! union tree_node *type; ENUM_BITFIELD(tree_code) code : 8; unsigned side_effects_flag : 1; unsigned constant_flag : 1; unsigned addressable_flag : 1; --- 112,130 ---- fields as well. The fields of a node are never accessed directly, always through accessor macros. */ /* Every kind of tree node starts with this structure, so all nodes have these fields. See the accessor macros, defined below, for documentation of the ! fields. */ struct tree_common { ! tree chain; ! tree type; ! ENUM_BITFIELD(tree_code) code : 8; + unsigned side_effects_flag : 1; unsigned constant_flag : 1; unsigned addressable_flag : 1; *************** struct tree_common *** 138,143 **** --- 132,138 ---- unsigned readonly_flag : 1; unsigned unsigned_flag : 1; unsigned asm_written_flag: 1; + unsigned unused_0 : 1; unsigned used_flag : 1; unsigned nothrow_flag : 1; *************** struct tree_common *** 146,151 **** --- 141,147 ---- unsigned private_flag : 1; unsigned protected_flag : 1; unsigned bounded_flag : 1; + unsigned deprecated_flag : 1; unsigned lang_flag_0 : 1; unsigned lang_flag_1 : 1; *************** struct tree_common *** 154,163 **** unsigned lang_flag_4 : 1; unsigned lang_flag_5 : 1; unsigned lang_flag_6 : 1; ! /* This flag is presently unused. However, language front-ends ! should not make use of this flag; it is reserved for future ! expansion. */ ! unsigned dummy : 1; }; /* The following table lists the uses of each of the above flags and --- 150,156 ---- unsigned lang_flag_4 : 1; unsigned lang_flag_5 : 1; unsigned lang_flag_6 : 1; ! unsigned unused_1 : 1; }; /* The following table lists the uses of each of the above flags and *************** struct tree_common *** 168,174 **** TREE_ADDRESSABLE in VAR_DECL, FUNCTION_DECL, FIELD_DECL, CONSTRUCTOR, LABEL_DECL, ! ..._TYPE, IDENTIFIER_NODE static_flag: --- 161,169 ---- TREE_ADDRESSABLE in VAR_DECL, FUNCTION_DECL, FIELD_DECL, CONSTRUCTOR, LABEL_DECL, ! ..._TYPE, IDENTIFIER_NODE. ! In a STMT_EXPR, it means we want the result of the enclosed ! expression. static_flag: *************** struct tree_common *** 179,194 **** TREE_VIA_VIRTUAL in TREE_LIST or TREE_VEC TREE_CONSTANT_OVERFLOW in ! INTEGER_CST, REAL_CST, COMPLEX_CST TREE_SYMBOL_REFERENCED in IDENTIFIER_NODE public_flag: TREE_OVERFLOW in ! INTEGER_CST, REAL_CST, COMPLEX_CST TREE_PUBLIC in ! VAR_DECL or FUNCTION_DECL TREE_VIA_PUBLIC in TREE_LIST or TREE_VEC EXPR_WFL_EMIT_LINE_NOTE in --- 174,192 ---- TREE_VIA_VIRTUAL in TREE_LIST or TREE_VEC TREE_CONSTANT_OVERFLOW in ! INTEGER_CST, REAL_CST, COMPLEX_CST, VECTOR_CST TREE_SYMBOL_REFERENCED in IDENTIFIER_NODE + CLEANUP_EH_ONLY in + TARGET_EXPR, WITH_CLEANUP_EXPR, CLEANUP_STMT, + TREE_LIST elements of a block's cleanup list. public_flag: TREE_OVERFLOW in ! INTEGER_CST, REAL_CST, COMPLEX_CST, VECTOR_CST TREE_PUBLIC in ! VAR_DECL or FUNCTION_DECL or IDENTIFIER_NODE TREE_VIA_PUBLIC in TREE_LIST or TREE_VEC EXPR_WFL_EMIT_LINE_NOTE in *************** struct tree_common *** 199,213 **** TREE_VIA_PRIVATE in TREE_LIST or TREE_VEC TREE_PRIVATE in ! ??? unspecified nodes protected_flag: TREE_VIA_PROTECTED in TREE_LIST TREE_PROTECTED in BLOCK ! ??? unspecified nodes side_effects_flag: --- 197,212 ---- TREE_VIA_PRIVATE in TREE_LIST or TREE_VEC TREE_PRIVATE in ! ..._DECL protected_flag: TREE_VIA_PROTECTED in TREE_LIST + TREE_VEC TREE_PROTECTED in BLOCK ! ..._DECL side_effects_flag: *************** struct tree_common *** 261,269 **** bounded_flag: TREE_BOUNDED in ! expressions, VAR_DECL, PARM_DECL, FIELD_DECL, FUNCTION_DECL TYPE_BOUNDED in ..._TYPE */ /* Define accessors for the fields that all tree nodes have --- 260,274 ---- bounded_flag: TREE_BOUNDED in ! expressions, VAR_DECL, PARM_DECL, FIELD_DECL, FUNCTION_DECL, ! IDENTIFIER_NODE TYPE_BOUNDED in ..._TYPE + + deprecated_flag: + + TREE_DEPRECATED in + ..._DECL */ /* Define accessors for the fields that all tree nodes have *************** struct tree_common *** 273,308 **** Codes are defined in tree.def. */ #define TREE_CODE(NODE) ((enum tree_code) (NODE)->common.code) #define TREE_SET_CODE(NODE, VALUE) \ ! ((NODE)->common.code = (ENUM_BITFIELD(tree_code)) (VALUE)) /* When checking is enabled, errors will be generated if a tree node is accessed incorrectly. The macros abort with a fatal error. */ #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007) #define TREE_CHECK(t, code) __extension__ \ ! ({ const tree __t = t; \ if (TREE_CODE(__t) != (code)) \ tree_check_failed (__t, code, __FILE__, __LINE__, __FUNCTION__); \ __t; }) #define TREE_CLASS_CHECK(t, class) __extension__ \ ! ({ const tree __t = t; \ if (TREE_CODE_CLASS(TREE_CODE(__t)) != (class)) \ ! tree_class_check_failed (__t, class, __FILE__, __LINE__, __FUNCTION__); \ __t; }) /* These checks have to be special cased. */ #define CST_OR_CONSTRUCTOR_CHECK(t) __extension__ \ ! ({ const tree __t = t; \ ! enum tree_code __c = TREE_CODE(__t); \ if (__c != CONSTRUCTOR && TREE_CODE_CLASS(__c) != 'c') \ ! tree_check_failed (__t, CONSTRUCTOR, __FILE__, __LINE__, __FUNCTION__); \ __t; }) #define EXPR_CHECK(t) __extension__ \ ! ({ const tree __t = t; \ ! char __c = TREE_CODE_CLASS(TREE_CODE(__t)); \ if (__c != 'r' && __c != 's' && __c != '<' \ && __c != '1' && __c != '2' && __c != 'e') \ ! tree_class_check_failed(__t, 'e', __FILE__, __LINE__, __FUNCTION__); \ __t; }) extern void tree_check_failed PARAMS ((const tree, enum tree_code, --- 278,316 ---- Codes are defined in tree.def. */ #define TREE_CODE(NODE) ((enum tree_code) (NODE)->common.code) #define TREE_SET_CODE(NODE, VALUE) \ ! ((NODE)->common.code = (ENUM_BITFIELD (tree_code)) (VALUE)) /* When checking is enabled, errors will be generated if a tree node is accessed incorrectly. The macros abort with a fatal error. */ #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007) #define TREE_CHECK(t, code) __extension__ \ ! ({ const tree __t = (t); \ if (TREE_CODE(__t) != (code)) \ tree_check_failed (__t, code, __FILE__, __LINE__, __FUNCTION__); \ __t; }) #define TREE_CLASS_CHECK(t, class) __extension__ \ ! ({ const tree __t = (t); \ if (TREE_CODE_CLASS(TREE_CODE(__t)) != (class)) \ ! tree_class_check_failed (__t, class, __FILE__, __LINE__, \ ! __FUNCTION__); \ __t; }) /* These checks have to be special cased. */ #define CST_OR_CONSTRUCTOR_CHECK(t) __extension__ \ ! ({ const tree __t = (t); \ ! enum tree_code const __c = TREE_CODE(__t); \ if (__c != CONSTRUCTOR && TREE_CODE_CLASS(__c) != 'c') \ ! tree_check_failed (__t, CONSTRUCTOR, __FILE__, __LINE__, \ ! __FUNCTION__); \ __t; }) #define EXPR_CHECK(t) __extension__ \ ! ({ const tree __t = (t); \ ! char const __c = TREE_CODE_CLASS(TREE_CODE(__t)); \ if (__c != 'r' && __c != 's' && __c != '<' \ && __c != '1' && __c != '2' && __c != 'e') \ ! tree_class_check_failed (__t, 'e', __FILE__, __LINE__, \ ! __FUNCTION__); \ __t; }) extern void tree_check_failed PARAMS ((const tree, enum tree_code, *************** extern void tree_class_check_failed PARA *** 333,338 **** --- 341,350 ---- In VECTOR_TYPE nodes, this is the type of the elements. */ #define TREE_TYPE(NODE) ((NODE)->common.type) + /* Here is how primitive or already-canonicalized types' hash codes + are made. */ + #define TYPE_HASH(TYPE) ((size_t) (TYPE) & 0777777) + /* Nodes are chained together for many purposes. Types are chained together to record them for being output to the debugger (see the function `chain_type'). *************** extern void tree_class_check_failed PARA *** 354,360 **** && TREE_OPERAND (EXP, 0) != error_mark_node \ && (TYPE_MODE (TREE_TYPE (EXP)) \ == TYPE_MODE (TREE_TYPE (TREE_OPERAND (EXP, 0))))) \ ! (EXP) = TREE_OPERAND (EXP, 0); /* Like STRIP_NOPS, but don't let the signedness change either. */ --- 366,372 ---- && TREE_OPERAND (EXP, 0) != error_mark_node \ && (TYPE_MODE (TREE_TYPE (EXP)) \ == TYPE_MODE (TREE_TYPE (TREE_OPERAND (EXP, 0))))) \ ! (EXP) = TREE_OPERAND (EXP, 0) /* Like STRIP_NOPS, but don't let the signedness change either. */ *************** extern void tree_class_check_failed PARA *** 367,373 **** == TYPE_MODE (TREE_TYPE (TREE_OPERAND (EXP, 0)))) \ && (TREE_UNSIGNED (TREE_TYPE (EXP)) \ == TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (EXP, 0))))) \ ! (EXP) = TREE_OPERAND (EXP, 0); /* Like STRIP_NOPS, but don't alter the TREE_TYPE either. */ --- 379,385 ---- == TYPE_MODE (TREE_TYPE (TREE_OPERAND (EXP, 0)))) \ && (TREE_UNSIGNED (TREE_TYPE (EXP)) \ == TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (EXP, 0))))) \ ! (EXP) = TREE_OPERAND (EXP, 0) /* Like STRIP_NOPS, but don't alter the TREE_TYPE either. */ *************** extern void tree_class_check_failed PARA *** 378,384 **** && TREE_OPERAND (EXP, 0) != error_mark_node \ && (TREE_TYPE (EXP) \ == TREE_TYPE (TREE_OPERAND (EXP, 0)))) \ ! (EXP) = TREE_OPERAND (EXP, 0); /* Nonzero if TYPE represents an integral type. Note that we do not include COMPLEX types here. */ --- 390,396 ---- && TREE_OPERAND (EXP, 0) != error_mark_node \ && (TREE_TYPE (EXP) \ == TREE_TYPE (TREE_OPERAND (EXP, 0)))) \ ! (EXP) = TREE_OPERAND (EXP, 0) /* Nonzero if TYPE represents an integral type. Note that we do not include COMPLEX types here. */ *************** extern void tree_class_check_failed PARA *** 395,401 **** || (TREE_CODE (TYPE) == COMPLEX_TYPE \ && TREE_CODE (TREE_TYPE (TYPE)) == REAL_TYPE)) ! /* Nonzero if TYPE represents an aggregate (multi-component) type. */ #define AGGREGATE_TYPE_P(TYPE) \ (TREE_CODE (TYPE) == ARRAY_TYPE || TREE_CODE (TYPE) == RECORD_TYPE \ --- 407,413 ---- || (TREE_CODE (TYPE) == COMPLEX_TYPE \ && TREE_CODE (TREE_TYPE (TYPE)) == REAL_TYPE)) ! /* Nonzero if TYPE represents an aggregate (multi-component) type. */ #define AGGREGATE_TYPE_P(TYPE) \ (TREE_CODE (TYPE) == ARRAY_TYPE || TREE_CODE (TYPE) == RECORD_TYPE \ *************** extern void tree_class_check_failed PARA *** 446,452 **** #define MAYBE_BOUNDED_POINTER_TYPE_P(TYPE) \ (TREE_CODE (TYPE) == POINTER_TYPE || BOUNDED_POINTER_TYPE_P (TYPE)) ! /* Nonzero if TYPE represents a reference type, either bounded or unbounded. */ #define MAYBE_BOUNDED_REFERENCE_TYPE_P(TYPE) \ (TREE_CODE (TYPE) == REFERENCE_TYPE || BOUNDED_REFERENCE_TYPE_P (TYPE)) --- 458,465 ---- #define MAYBE_BOUNDED_POINTER_TYPE_P(TYPE) \ (TREE_CODE (TYPE) == POINTER_TYPE || BOUNDED_POINTER_TYPE_P (TYPE)) ! /* Nonzero if TYPE represents a reference type, either bounded or ! unbounded. */ #define MAYBE_BOUNDED_REFERENCE_TYPE_P(TYPE) \ (TREE_CODE (TYPE) == REFERENCE_TYPE || BOUNDED_REFERENCE_TYPE_P (TYPE)) *************** extern void tree_class_check_failed PARA *** 459,469 **** /* Nonzero if this type is complete or is cv void. */ #define COMPLETE_OR_VOID_TYPE_P(NODE) \ ! (COMPLETE_TYPE_P (NODE) || VOID_TYPE_P (NODE)) /* Nonzero if this type is complete or is an array with unspecified bound. */ #define COMPLETE_OR_UNBOUND_ARRAY_TYPE_P(NODE) \ ! (COMPLETE_TYPE_P (TREE_CODE (NODE) == ARRAY_TYPE ? TREE_TYPE (NODE) : NODE)) /* Nonzero if TYPE represents a type. */ --- 472,482 ---- /* Nonzero if this type is complete or is cv void. */ #define COMPLETE_OR_VOID_TYPE_P(NODE) \ ! (COMPLETE_TYPE_P (NODE) || VOID_TYPE_P (NODE)) /* Nonzero if this type is complete or is an array with unspecified bound. */ #define COMPLETE_OR_UNBOUND_ARRAY_TYPE_P(NODE) \ ! (COMPLETE_TYPE_P (TREE_CODE (NODE) == ARRAY_TYPE ? TREE_TYPE (NODE) : (NODE))) /* Nonzero if TYPE represents a type. */ *************** extern void tree_class_check_failed PARA *** 493,498 **** --- 506,516 ---- In a CONSTRUCTOR, nonzero means allocate static storage. */ #define TREE_STATIC(NODE) ((NODE)->common.static_flag) + /* In a TARGET_EXPR, WITH_CLEANUP_EXPR, CLEANUP_STMT, or element of a + block's cleanup list, means that the pertinent cleanup should only be + executed if an exception is thrown, not on normal exit of its scope. */ + #define CLEANUP_EH_ONLY(NODE) ((NODE)->common.static_flag) + /* In a CONVERT_EXPR, NOP_EXPR or COMPOUND_EXPR, this means the node was made implicitly and should not lead to an "unused value" warning. */ #define TREE_NO_UNUSED_WARNING(NODE) ((NODE)->common.static_flag) *************** extern void tree_class_check_failed PARA *** 501,523 **** chain is via a `virtual' declaration. */ #define TREE_VIA_VIRTUAL(NODE) ((NODE)->common.static_flag) ! /* In an INTEGER_CST, REAL_CST, or COMPLEX_CST, this means there was an ! overflow in folding. This is distinct from TREE_OVERFLOW because ANSI C ! requires a diagnostic when overflows occur in constant expressions. */ #define TREE_CONSTANT_OVERFLOW(NODE) ((NODE)->common.static_flag) /* In an IDENTIFIER_NODE, this means that assemble_name was called with this string as an argument. */ ! #define TREE_SYMBOL_REFERENCED(NODE) ((NODE)->common.static_flag) ! /* In an INTEGER_CST, REAL_CST, of COMPLEX_CST, this means there was an ! overflow in folding, and no warning has been issued for this subexpression. ! TREE_OVERFLOW implies TREE_CONSTANT_OVERFLOW, but not vice versa. */ #define TREE_OVERFLOW(NODE) ((NODE)->common.public_flag) /* In a VAR_DECL or FUNCTION_DECL, nonzero means name is to be accessible from outside this module. ! In an identifier node, nonzero means an external declaration accessible from outside this module was previously seen for this name in an inner scope. */ #define TREE_PUBLIC(NODE) ((NODE)->common.public_flag) --- 519,544 ---- chain is via a `virtual' declaration. */ #define TREE_VIA_VIRTUAL(NODE) ((NODE)->common.static_flag) ! /* In an INTEGER_CST, REAL_CST, COMPLEX_CST, or VECTOR_CST this means ! there was an overflow in folding. This is distinct from ! TREE_OVERFLOW because ANSI C requires a diagnostic when overflows ! occur in constant expressions. */ #define TREE_CONSTANT_OVERFLOW(NODE) ((NODE)->common.static_flag) /* In an IDENTIFIER_NODE, this means that assemble_name was called with this string as an argument. */ ! #define TREE_SYMBOL_REFERENCED(NODE) \ ! (IDENTIFIER_NODE_CHECK (NODE)->common.static_flag) ! /* In an INTEGER_CST, REAL_CST, COMPLEX_CST, or VECTOR_CST, this means ! there was an overflow in folding, and no warning has been issued ! for this subexpression. TREE_OVERFLOW implies ! TREE_CONSTANT_OVERFLOW, but not vice versa. */ #define TREE_OVERFLOW(NODE) ((NODE)->common.public_flag) /* In a VAR_DECL or FUNCTION_DECL, nonzero means name is to be accessible from outside this module. ! In an IDENTIFIER_NODE, nonzero means an external declaration accessible from outside this module was previously seen for this name in an inner scope. */ #define TREE_PUBLIC(NODE) ((NODE)->common.public_flag) *************** extern void tree_class_check_failed PARA *** 530,536 **** /* Ditto, for `private' declarations. */ #define TREE_VIA_PRIVATE(NODE) ((NODE)->common.private_flag) ! /* Nonzero for TREE_LIST node means that the path to the base class is via a `protected' declaration, which preserves protected fields from the base class as protected. OVERLOADED. */ --- 551,557 ---- /* Ditto, for `private' declarations. */ #define TREE_VIA_PRIVATE(NODE) ((NODE)->common.private_flag) ! /* Nonzero for TREE_LIST or TREE_VEC node means that the path to the base class is via a `protected' declaration, which preserves protected fields from the base class as protected. OVERLOADED. */ *************** extern void tree_class_check_failed PARA *** 562,567 **** --- 583,591 ---- when the node is a type). */ #define TREE_READONLY(NODE) ((NODE)->common.readonly_flag) + /* Non-zero if NODE is a _DECL with TREE_READONLY set. */ + #define TREE_READONLY_DECL_P(NODE) (TREE_READONLY (NODE) && DECL_P (NODE)) + /* Value of expression is constant. Always appears in all ..._CST nodes. May also appear in an arithmetic expression, an ADDR_EXPR or a CONSTRUCTOR *************** extern void tree_class_check_failed PARA *** 573,579 **** The same bit is used in functions as DECL_BUILT_IN_NONANSI. */ #define TREE_UNSIGNED(NODE) ((NODE)->common.unsigned_flag) ! #define TYPE_TRAP_SIGNED(NODE) (flag_trapv && ! TREE_UNSIGNED (NODE)) /* Nonzero in a VAR_DECL means assembler code has been written. Nonzero in a FUNCTION_DECL means that the function has been compiled. --- 597,604 ---- The same bit is used in functions as DECL_BUILT_IN_NONANSI. */ #define TREE_UNSIGNED(NODE) ((NODE)->common.unsigned_flag) ! #define TYPE_TRAP_SIGNED(NODE) \ ! (flag_trapv && ! TREE_UNSIGNED (TYPE_CHECK (NODE))) /* Nonzero in a VAR_DECL means assembler code has been written. Nonzero in a FUNCTION_DECL means that the function has been compiled. *************** extern void tree_class_check_failed PARA *** 594,599 **** --- 619,632 ---- an exception. In a CALL_EXPR, nonzero means the call cannot throw. */ #define TREE_NOTHROW(NODE) ((NODE)->common.nothrow_flag) + /* In a type, nonzero means that all objects of the type are guaranteed by the + language or front-end to be properly aligned, so we can indicate that a MEM + of this type is aligned at least to the alignment of the type, even if it + doesn't appear that it is. We see this, for example, in object-oriented + languages where a tag field may show this is an object of a more-aligned + variant of the more generic type. */ + #define TYPE_ALIGN_OK(NODE) (TYPE_CHECK (NODE)->common.nothrow_flag) + /* Used in classes in C++. */ #define TREE_PRIVATE(NODE) ((NODE)->common.private_flag) /* Used in classes in C++. *************** extern void tree_class_check_failed PARA *** 634,639 **** --- 667,676 ---- #define TREE_BOUNDED(NODE) ((NODE)->common.bounded_flag) + /* Nonzero in a IDENTIFIER_NODE if the use of the name is defined as a + deprecated feature by __attribute__((deprecated)). */ + #define TREE_DEPRECATED(NODE) ((NODE)->common.deprecated_flag) + /* These flags are available for each language front end to use internally. */ #define TREE_LANG_FLAG_0(NODE) ((NODE)->common.lang_flag_0) #define TREE_LANG_FLAG_1(NODE) ((NODE)->common.lang_flag_1) *************** extern void tree_class_check_failed PARA *** 653,674 **** #define TREE_INT_CST_LOW(NODE) (TREE_INT_CST (NODE).low) #define TREE_INT_CST_HIGH(NODE) (TREE_INT_CST (NODE).high) ! #define INT_CST_LT(A, B) \ ! (TREE_INT_CST_HIGH (A) < TREE_INT_CST_HIGH (B) \ ! || (TREE_INT_CST_HIGH (A) == TREE_INT_CST_HIGH (B) \ ! && TREE_INT_CST_LOW (A) < TREE_INT_CST_LOW (B))) ! ! #define INT_CST_LT_UNSIGNED(A, B) \ ! (((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (A) \ ! < (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (B)) \ ! || (((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (A) \ ! == (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (B)) \ ! && TREE_INT_CST_LOW (A) < TREE_INT_CST_LOW (B))) struct tree_int_cst { struct tree_common common; ! struct rtx_def *rtl; /* acts as link to register transfer language (rtl) info */ /* A sub-struct is necessary here because the function `const_hash' wants to scan both words as a unit and taking the address of the --- 690,711 ---- #define TREE_INT_CST_LOW(NODE) (TREE_INT_CST (NODE).low) #define TREE_INT_CST_HIGH(NODE) (TREE_INT_CST (NODE).high) ! #define INT_CST_LT(A, B) \ ! (TREE_INT_CST_HIGH (A) < TREE_INT_CST_HIGH (B) \ ! || (TREE_INT_CST_HIGH (A) == TREE_INT_CST_HIGH (B) \ ! && TREE_INT_CST_LOW (A) < TREE_INT_CST_LOW (B))) + #define INT_CST_LT_UNSIGNED(A, B) \ + (((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (A) \ + < (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (B)) \ + || (((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (A) \ + == (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (B)) \ + && TREE_INT_CST_LOW (A) < TREE_INT_CST_LOW (B))) + struct tree_int_cst { struct tree_common common; ! rtx rtl; /* acts as link to register transfer language (rtl) info */ /* A sub-struct is necessary here because the function `const_hash' wants to scan both words as a unit and taking the address of the *************** struct tree_int_cst *** 679,694 **** } int_cst; }; ! /* In REAL_CST, STRING_CST, COMPLEX_CST nodes, and CONSTRUCTOR nodes, ! and generally in all kinds of constants that could ! be given labels (rather than being immediate). */ #define TREE_CST_RTL(NODE) (CST_OR_CONSTRUCTOR_CHECK (NODE)->real_cst.rtl) ! /* In a REAL_CST node. */ ! /* We can represent a real value as either a `double' or a string. ! Strings don't allow for any optimization, but they do allow ! for cross-compilation. */ #define TREE_REAL_CST(NODE) (REAL_CST_CHECK (NODE)->real_cst.real_cst) --- 716,731 ---- } int_cst; }; ! /* In REAL_CST, STRING_CST, COMPLEX_CST, VECTOR_CST nodes, and ! CONSTRUCTOR nodes, and generally in all kinds of constants that ! could be given labels (rather than being immediate). */ #define TREE_CST_RTL(NODE) (CST_OR_CONSTRUCTOR_CHECK (NODE)->real_cst.rtl) ! /* In a REAL_CST node. ! ! We can represent a real value as either a `double' or an array of ! longs. */ #define TREE_REAL_CST(NODE) (REAL_CST_CHECK (NODE)->real_cst.real_cst) *************** struct tree_int_cst *** 697,704 **** struct tree_real_cst { struct tree_common common; ! struct rtx_def *rtl; /* acts as link to register transfer language ! (rtl) info */ REAL_VALUE_TYPE real_cst; }; --- 734,740 ---- struct tree_real_cst { struct tree_common common; ! rtx rtl; /* acts as link to register transfer language (rtl) info */ REAL_VALUE_TYPE real_cst; }; *************** struct tree_real_cst *** 709,716 **** struct tree_string { struct tree_common common; ! struct rtx_def *rtl; /* acts as link to register transfer language ! (rtl) info */ int length; const char *pointer; }; --- 745,751 ---- struct tree_string { struct tree_common common; ! rtx rtl; /* acts as link to register transfer language (rtl) info */ int length; const char *pointer; }; *************** struct tree_string *** 722,743 **** struct tree_complex { struct tree_common common; ! struct rtx_def *rtl; /* acts as link to register transfer language ! (rtl) info */ ! union tree_node *real; ! union tree_node *imag; }; /* Define fields and accessors for some special-purpose tree nodes. */ ! #define IDENTIFIER_LENGTH(NODE) (IDENTIFIER_NODE_CHECK (NODE)->identifier.length) ! #define IDENTIFIER_POINTER(NODE) (IDENTIFIER_NODE_CHECK (NODE)->identifier.pointer) struct tree_identifier { struct tree_common common; ! int length; ! const char *pointer; }; /* In a TREE_LIST node. */ --- 757,797 ---- struct tree_complex { struct tree_common common; ! rtx rtl; /* acts as link to register transfer language (rtl) info */ ! tree real; ! tree imag; ! }; ! ! /* In a VECTOR_CST node. */ ! #define TREE_VECTOR_CST_ELTS(NODE) (VECTOR_CST_CHECK (NODE)->vector.elements) ! ! struct tree_vector ! { ! struct tree_common common; ! rtx rtl; ! tree elements; }; + #include "hashtable.h" + /* Define fields and accessors for some special-purpose tree nodes. */ ! #define IDENTIFIER_LENGTH(NODE) \ ! (IDENTIFIER_NODE_CHECK (NODE)->identifier.id.len) ! #define IDENTIFIER_POINTER(NODE) \ ! ((const char *) IDENTIFIER_NODE_CHECK (NODE)->identifier.id.str) ! ! /* Translate a hash table identifier pointer to a tree_identifier ! pointer, and vice versa. */ ! ! #define HT_IDENT_TO_GCC_IDENT(NODE) \ ! ((tree) ((char *) (NODE) - sizeof (struct tree_common))) ! #define GCC_IDENT_TO_HT_IDENT(NODE) (&((struct tree_identifier *) (NODE))->id) struct tree_identifier { struct tree_common common; ! struct ht_identifier id; }; /* In a TREE_LIST node. */ *************** struct tree_identifier *** 747,819 **** struct tree_list { struct tree_common common; ! union tree_node *purpose; ! union tree_node *value; }; /* In a TREE_VEC node. */ #define TREE_VEC_LENGTH(NODE) (TREE_VEC_CHECK (NODE)->vec.length) #define TREE_VEC_ELT(NODE,I) (TREE_VEC_CHECK (NODE)->vec.a[I]) ! #define TREE_VEC_END(NODE) ((void) TREE_VEC_CHECK (NODE),&((NODE)->vec.a[(NODE)->vec.length])) struct tree_vec { struct tree_common common; int length; ! union tree_node *a[1]; }; /* Define fields and accessors for some nodes that represent expressions. */ /* In a SAVE_EXPR node. */ ! #define SAVE_EXPR_CONTEXT(NODE) TREE_OPERAND(NODE, 1) ! #define SAVE_EXPR_RTL(NODE) (*(struct rtx_def **) &EXPR_CHECK (NODE)->exp.operands[2]) ! #define SAVE_EXPR_NOPLACEHOLDER(NODE) TREE_UNSIGNED (NODE) /* Nonzero if the SAVE_EXPRs value should be kept, even if it occurs both in normal code and in a handler. (Normally, in a handler, all SAVE_EXPRs are unsaved, meaning that there values are recalculated.) */ ! #define SAVE_EXPR_PERSISTENT_P(NODE) TREE_ASM_WRITTEN (NODE) /* In a RTL_EXPR node. */ ! #define RTL_EXPR_SEQUENCE(NODE) (*(struct rtx_def **) &EXPR_CHECK (NODE)->exp.operands[0]) ! #define RTL_EXPR_RTL(NODE) (*(struct rtx_def **) &EXPR_CHECK (NODE)->exp.operands[1]) /* In a CONSTRUCTOR node. */ ! #define CONSTRUCTOR_ELTS(NODE) TREE_OPERAND (NODE, 1) /* In ordinary expression nodes. */ #define TREE_OPERAND(NODE, I) (EXPR_CHECK (NODE)->exp.operands[I]) #define TREE_COMPLEXITY(NODE) (EXPR_CHECK (NODE)->exp.complexity) /* In a LABELED_BLOCK_EXPR node. */ ! #define LABELED_BLOCK_LABEL(NODE) TREE_OPERAND (NODE, 0) ! #define LABELED_BLOCK_BODY(NODE) TREE_OPERAND (NODE, 1) /* In a EXIT_BLOCK_EXPR node. */ ! #define EXIT_BLOCK_LABELED_BLOCK(NODE) TREE_OPERAND (NODE, 0) ! #define EXIT_BLOCK_RETURN(NODE) TREE_OPERAND (NODE, 1) /* In a LOOP_EXPR node. */ ! #define LOOP_EXPR_BODY(NODE) TREE_OPERAND (NODE, 0) /* In a EXPR_WITH_FILE_LOCATION node. */ ! #define EXPR_WFL_NODE(NODE) TREE_OPERAND((NODE), 0) #define EXPR_WFL_FILENAME(NODE) \ ! (IDENTIFIER_POINTER (EXPR_WFL_FILENAME_NODE ((NODE)))) ! #define EXPR_WFL_FILENAME_NODE(NODE) TREE_OPERAND((NODE), 1) ! #define EXPR_WFL_LINENO(NODE) (EXPR_CHECK (NODE)->exp.complexity >> 12) ! #define EXPR_WFL_COLNO(NODE) (EXPR_CHECK (NODE)->exp.complexity & 0xfff) #define EXPR_WFL_LINECOL(NODE) (EXPR_CHECK (NODE)->exp.complexity) #define EXPR_WFL_SET_LINECOL(NODE, LINE, COL) \ (EXPR_WFL_LINECOL(NODE) = ((LINE) << 12) | ((COL) & 0xfff)) - #define EXPR_WFL_EMIT_LINE_NOTE(NODE) ((NODE)->common.public_flag) struct tree_exp { struct tree_common common; int complexity; ! union tree_node *operands[1]; }; /* In a BLOCK node. */ --- 801,886 ---- struct tree_list { struct tree_common common; ! tree purpose; ! tree value; }; /* In a TREE_VEC node. */ #define TREE_VEC_LENGTH(NODE) (TREE_VEC_CHECK (NODE)->vec.length) #define TREE_VEC_ELT(NODE,I) (TREE_VEC_CHECK (NODE)->vec.a[I]) ! #define TREE_VEC_END(NODE) \ ! ((void) TREE_VEC_CHECK (NODE), &((NODE)->vec.a[(NODE)->vec.length])) struct tree_vec { struct tree_common common; int length; ! tree a[1]; }; /* Define fields and accessors for some nodes that represent expressions. */ /* In a SAVE_EXPR node. */ ! #define SAVE_EXPR_CONTEXT(NODE) TREE_OPERAND (SAVE_EXPR_CHECK (NODE), 1) ! #define SAVE_EXPR_RTL(NODE) (*(rtx *) &SAVE_EXPR_CHECK (NODE)->exp.operands[2]) ! #define SAVE_EXPR_NOPLACEHOLDER(NODE) TREE_UNSIGNED (SAVE_EXPR_CHECK (NODE)) /* Nonzero if the SAVE_EXPRs value should be kept, even if it occurs both in normal code and in a handler. (Normally, in a handler, all SAVE_EXPRs are unsaved, meaning that there values are recalculated.) */ ! #define SAVE_EXPR_PERSISTENT_P(NODE) TREE_ASM_WRITTEN (SAVE_EXPR_CHECK (NODE)) /* In a RTL_EXPR node. */ ! #define RTL_EXPR_SEQUENCE(NODE) \ ! (*(rtx *) &RTL_EXPR_CHECK (NODE)->exp.operands[0]) ! #define RTL_EXPR_RTL(NODE) (*(rtx *) &RTL_EXPR_CHECK (NODE)->exp.operands[1]) ! ! /* In a WITH_CLEANUP_EXPR node. */ ! #define WITH_CLEANUP_EXPR_RTL(NODE) \ ! (*(rtx *) &WITH_CLEANUP_EXPR_CHECK (NODE)->exp.operands[2]) /* In a CONSTRUCTOR node. */ ! #define CONSTRUCTOR_ELTS(NODE) TREE_OPERAND (CONSTRUCTOR_CHECK (NODE), 1) /* In ordinary expression nodes. */ #define TREE_OPERAND(NODE, I) (EXPR_CHECK (NODE)->exp.operands[I]) #define TREE_COMPLEXITY(NODE) (EXPR_CHECK (NODE)->exp.complexity) /* In a LABELED_BLOCK_EXPR node. */ ! #define LABELED_BLOCK_LABEL(NODE) \ ! TREE_OPERAND (LABELED_BLOCK_EXPR_CHECK (NODE), 0) ! #define LABELED_BLOCK_BODY(NODE) \ ! TREE_OPERAND (LABELED_BLOCK_EXPR_CHECK (NODE), 1) /* In a EXIT_BLOCK_EXPR node. */ ! #define EXIT_BLOCK_LABELED_BLOCK(NODE) \ ! TREE_OPERAND (EXIT_BLOCK_EXPR_CHECK (NODE), 0) ! #define EXIT_BLOCK_RETURN(NODE) TREE_OPERAND (EXIT_BLOCK_EXPR_CHECK (NODE), 1) /* In a LOOP_EXPR node. */ ! #define LOOP_EXPR_BODY(NODE) TREE_OPERAND (LOOP_EXPR_CHECK (NODE), 0) /* In a EXPR_WITH_FILE_LOCATION node. */ ! #define EXPR_WFL_EMIT_LINE_NOTE(NODE) \ ! (EXPR_WITH_FILE_LOCATION_CHECK (NODE)->common.public_flag) ! #define EXPR_WFL_NODE(NODE) \ ! TREE_OPERAND (EXPR_WITH_FILE_LOCATION_CHECK (NODE), 0) ! #define EXPR_WFL_FILENAME_NODE(NODE) \ ! TREE_OPERAND (EXPR_WITH_FILE_LOCATION_CHECK (NODE), 1) #define EXPR_WFL_FILENAME(NODE) \ ! IDENTIFIER_POINTER (EXPR_WFL_FILENAME_NODE (NODE)) ! /* ??? Java uses this in all expressions. */ #define EXPR_WFL_LINECOL(NODE) (EXPR_CHECK (NODE)->exp.complexity) + #define EXPR_WFL_LINENO(NODE) (EXPR_WFL_LINECOL (NODE) >> 12) + #define EXPR_WFL_COLNO(NODE) (EXPR_WFL_LINECOL (NODE) & 0xfff) #define EXPR_WFL_SET_LINECOL(NODE, LINE, COL) \ (EXPR_WFL_LINECOL(NODE) = ((LINE) << 12) | ((COL) & 0xfff)) struct tree_exp { struct tree_common common; int complexity; ! tree operands[1]; }; /* In a BLOCK node. */ *************** struct tree_exp *** 828,840 **** /* Nonzero means that this block is prepared to handle exceptions listed in the BLOCK_VARS slot. */ ! #define BLOCK_HANDLER_BLOCK(NODE) (BLOCK_CHECK (NODE)->block.handler_block_flag) /* An index number for this block. These values are not guaranteed to be unique across functions -- whether or not they are depends on the debugging output format in use. */ #define BLOCK_NUMBER(NODE) (BLOCK_CHECK (NODE)->block.block_num) struct tree_block { struct tree_common common; --- 895,933 ---- /* Nonzero means that this block is prepared to handle exceptions listed in the BLOCK_VARS slot. */ ! #define BLOCK_HANDLER_BLOCK(NODE) \ ! (BLOCK_CHECK (NODE)->block.handler_block_flag) /* An index number for this block. These values are not guaranteed to be unique across functions -- whether or not they are depends on the debugging output format in use. */ #define BLOCK_NUMBER(NODE) (BLOCK_CHECK (NODE)->block.block_num) + /* If block reordering splits a lexical block into discontiguous + address ranges, we'll make a copy of the original block. + + Note that this is logically distinct from BLOCK_ABSTRACT_ORIGIN. + In that case, we have one source block that has been replicated + (through inlining or unrolling) into many logical blocks, and that + these logical blocks have different physical variables in them. + + In this case, we have one logical block split into several + non-contiguous address ranges. Most debug formats can't actually + represent this idea directly, so we fake it by creating multiple + logical blocks with the same variables in them. However, for those + that do support non-contiguous regions, these allow the original + logical block to be reconstructed, along with the set of address + ranges. + + One of the logical block fragments is arbitrarily chosen to be + the ORIGIN. The other fragments will point to the origin via + BLOCK_FRAGMENT_ORIGIN; the origin itself will have this pointer + be null. The list of fragments will be chained through + BLOCK_FRAGMENT_CHAIN from the origin. */ + + #define BLOCK_FRAGMENT_ORIGIN(NODE) (BLOCK_CHECK (NODE)->block.fragment_origin) + #define BLOCK_FRAGMENT_CHAIN(NODE) (BLOCK_CHECK (NODE)->block.fragment_chain) + struct tree_block { struct tree_common common; *************** struct tree_block *** 843,852 **** unsigned abstract_flag : 1; unsigned block_num : 30; ! union tree_node *vars; ! union tree_node *subblocks; ! union tree_node *supercontext; ! union tree_node *abstract_origin; }; /* Define fields and accessors for nodes representing data types. */ --- 936,947 ---- unsigned abstract_flag : 1; unsigned block_num : 30; ! tree vars; ! tree subblocks; ! tree supercontext; ! tree abstract_origin; ! tree fragment_origin; ! tree fragment_chain; }; /* Define fields and accessors for nodes representing data types. */ *************** struct tree_block *** 876,882 **** #define TYPE_NAME(NODE) (TYPE_CHECK (NODE)->type.name) #define TYPE_NEXT_VARIANT(NODE) (TYPE_CHECK (NODE)->type.next_variant) #define TYPE_MAIN_VARIANT(NODE) (TYPE_CHECK (NODE)->type.main_variant) - #define TYPE_NONCOPIED_PARTS(NODE) (TYPE_CHECK (NODE)->type.noncopied_parts) #define TYPE_CONTEXT(NODE) (TYPE_CHECK (NODE)->type.context) #define TYPE_LANG_SPECIFIC(NODE) (TYPE_CHECK (NODE)->type.lang_specific) --- 971,976 ---- *************** struct tree_block *** 919,926 **** /* Nonzero iff the typed-based alias set for this type has been calculated. */ ! #define TYPE_ALIAS_SET_KNOWN_P(NODE) \ ! (TYPE_CHECK (NODE)->type.alias_set != -1) /* A TREE_LIST of IDENTIFIER nodes of the attributes that apply to this type. */ --- 1013,1019 ---- /* Nonzero iff the typed-based alias set for this type has been calculated. */ ! #define TYPE_ALIAS_SET_KNOWN_P(NODE) (TYPE_CHECK (NODE)->type.alias_set != -1) /* A TREE_LIST of IDENTIFIER nodes of the attributes that apply to this type. */ *************** struct tree_block *** 935,942 **** #define TYPE_USER_ALIGN(NODE) (TYPE_CHECK (NODE)->type.user_align) /* The alignment for NODE, in bytes. */ ! #define TYPE_ALIGN_UNIT(NODE) \ ! (TYPE_ALIGN (NODE) / BITS_PER_UNIT) /* If your language allows you to declare types, and you want debug info for them, then you need to generate corresponding TYPE_DECL nodes. --- 1028,1034 ---- #define TYPE_USER_ALIGN(NODE) (TYPE_CHECK (NODE)->type.user_align) /* The alignment for NODE, in bytes. */ ! #define TYPE_ALIGN_UNIT(NODE) (TYPE_ALIGN (NODE) / BITS_PER_UNIT) /* If your language allows you to declare types, and you want debug info for them, then you need to generate corresponding TYPE_DECL nodes. *************** struct tree_block *** 944,951 **** type node. You then set the TYPE_STUB_DECL field of the type node to point back at the TYPE_DECL node. This allows the debug routines to know that the two nodes represent the same type, so that we only ! get one debug info record for them. */ ! #define TYPE_STUB_DECL(NODE) (TREE_CHAIN (NODE)) /* In a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, it means the type has BLKmode only because it lacks the alignment requirement for --- 1036,1043 ---- type node. You then set the TYPE_STUB_DECL field of the type node to point back at the TYPE_DECL node. This allows the debug routines to know that the two nodes represent the same type, so that we only ! get one debug info record for them. */ ! #define TYPE_STUB_DECL(NODE) TREE_CHAIN (NODE) /* In a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, it means the type has BLKmode only because it lacks the alignment requirement for *************** struct tree_block *** 969,978 **** (FUNCTION_TYPE_CHECK (NODE)->type.no_force_blk_flag) /* Nonzero in a type considered volatile as a whole. */ ! #define TYPE_VOLATILE(NODE) ((NODE)->common.volatile_flag) /* Means this type is const-qualified. */ ! #define TYPE_READONLY(NODE) ((NODE)->common.readonly_flag) /* If nonzero, this type is `restrict'-qualified, in the C sense of the term. */ --- 1061,1070 ---- (FUNCTION_TYPE_CHECK (NODE)->type.no_force_blk_flag) /* Nonzero in a type considered volatile as a whole. */ ! #define TYPE_VOLATILE(NODE) (TYPE_CHECK (NODE)->common.volatile_flag) /* Means this type is const-qualified. */ ! #define TYPE_READONLY(NODE) (TYPE_CHECK (NODE)->common.readonly_flag) /* If nonzero, this type is `restrict'-qualified, in the C sense of the term. */ *************** struct tree_block *** 1022,1036 **** /* If set in an ARRAY_TYPE, indicates a string type (for languages that distinguish string from array of char). ! If set in a SET_TYPE, indicates a bitstring type. */ #define TYPE_STRING_FLAG(NODE) (TYPE_CHECK (NODE)->type.string_flag) ! /* If non-NULL, this is a upper bound of the size (in bytes) of an ! object of the given ARRAY_TYPE. This allows temporaries to be allocated. */ ! #define TYPE_ARRAY_MAX_SIZE(ARRAY_TYPE) TYPE_MAX_VALUE (ARRAY_TYPE) /* For a VECTOR_TYPE, this is the number of sub-parts of the vector. */ ! #define TYPE_VECTOR_SUBPARTS(VECTOR_TYPE) (GET_MODE_NUNITS (TYPE_CHECK (VECTOR_TYPE)->type.mode)) /* Indicates that objects of this type must be initialized by calling a function when they are created. */ --- 1114,1131 ---- /* If set in an ARRAY_TYPE, indicates a string type (for languages that distinguish string from array of char). ! If set in a SET_TYPE, indicates a bitstring type. */ #define TYPE_STRING_FLAG(NODE) (TYPE_CHECK (NODE)->type.string_flag) ! /* If non-NULL, this is an upper bound of the size (in bytes) of an ! object of the given ARRAY_TYPE. This allows temporaries to be ! allocated. */ ! #define TYPE_ARRAY_MAX_SIZE(ARRAY_TYPE) \ ! TYPE_MAX_VALUE (ARRAY_TYPE_CHECK (ARRAY_TYPE)) /* For a VECTOR_TYPE, this is the number of sub-parts of the vector. */ ! #define TYPE_VECTOR_SUBPARTS(VECTOR_TYPE) \ ! GET_MODE_NUNITS (VECTOR_TYPE_CHECK (VECTOR_TYPE)->type.mode) /* Indicates that objects of this type must be initialized by calling a function when they are created. */ *************** struct tree_block *** 1113,1122 **** struct tree_type { struct tree_common common; ! union tree_node *values; ! union tree_node *size; ! union tree_node *size_unit; ! union tree_node *attributes; unsigned int uid; unsigned int precision : 9; --- 1208,1217 ---- struct tree_type { struct tree_common common; ! tree values; ! tree size; ! tree size_unit; ! tree attributes; unsigned int uid; unsigned int precision : 9; *************** struct tree_type *** 1140,1156 **** unsigned user_align : 1; unsigned int align; ! union tree_node *pointer_to; ! union tree_node *reference_to; union {int address; char *pointer; } symtab; ! union tree_node *name; ! union tree_node *minval; ! union tree_node *maxval; ! union tree_node *next_variant; ! union tree_node *main_variant; ! union tree_node *binfo; ! union tree_node *noncopied_parts; ! union tree_node *context; HOST_WIDE_INT alias_set; /* Points to a structure whose details depend on the language in use. */ struct lang_type *lang_specific; --- 1235,1250 ---- unsigned user_align : 1; unsigned int align; ! tree pointer_to; ! tree reference_to; union {int address; char *pointer; } symtab; ! tree name; ! tree minval; ! tree maxval; ! tree next_variant; ! tree main_variant; ! tree binfo; ! tree context; HOST_WIDE_INT alias_set; /* Points to a structure whose details depend on the language in use. */ struct lang_type *lang_specific; *************** struct tree_type *** 1217,1223 **** /* Accessor macro to get to the Nth basetype of this basetype. */ #define BINFO_BASETYPE(NODE,N) TREE_VEC_ELT (BINFO_BASETYPES (NODE), (N)) ! #define TYPE_BINFO_BASETYPE(NODE,N) BINFO_TYPE (TREE_VEC_ELT (BINFO_BASETYPES (TYPE_BINFO (NODE)), (N))) /* For a BINFO record describing a virtual base class, i.e., one where TREE_VIA_VIRTUAL is set, this field assists in locating the virtual --- 1311,1318 ---- /* Accessor macro to get to the Nth basetype of this basetype. */ #define BINFO_BASETYPE(NODE,N) TREE_VEC_ELT (BINFO_BASETYPES (NODE), (N)) ! #define TYPE_BINFO_BASETYPE(NODE,N) \ ! BINFO_TYPE (TREE_VEC_ELT (BINFO_BASETYPES (TYPE_BINFO (NODE)), (N))) /* For a BINFO record describing a virtual base class, i.e., one where TREE_VIA_VIRTUAL is set, this field assists in locating the virtual *************** struct tree_type *** 1226,1237 **** pointer to the virtual base; under the new ABI this field is instead a INTEGER_CST giving an offset into the vtable where the offset to the virtual base can be found. */ ! #define BINFO_VPTR_FIELD(NODE) TREE_VEC_ELT ((NODE), 5) /* The size of a base class subobject of this type. Not all frontends currently allocate the space for these fields. */ ! #define BINFO_SIZE(NODE) TREE_VEC_ELT ((NODE), 6) ! #define BINFO_SIZE_UNIT(NODE) TREE_VEC_ELT ((NODE), 7) #define TYPE_BINFO_SIZE(NODE) BINFO_SIZE (TYPE_BINFO (NODE)) #define TYPE_BINFO_SIZE_UNIT(NODE) BINFO_SIZE_UNIT (TYPE_BINFO (NODE)) --- 1321,1332 ---- pointer to the virtual base; under the new ABI this field is instead a INTEGER_CST giving an offset into the vtable where the offset to the virtual base can be found. */ ! #define BINFO_VPTR_FIELD(NODE) TREE_VEC_ELT (NODE, 5) /* The size of a base class subobject of this type. Not all frontends currently allocate the space for these fields. */ ! #define BINFO_SIZE(NODE) TREE_VEC_ELT (NODE, 6) ! #define BINFO_SIZE_UNIT(NODE) TREE_VEC_ELT (NODE, 7) #define TYPE_BINFO_SIZE(NODE) BINFO_SIZE (TYPE_BINFO (NODE)) #define TYPE_BINFO_SIZE_UNIT(NODE) BINFO_SIZE_UNIT (TYPE_BINFO (NODE)) *************** struct tree_type *** 1252,1260 **** --- 1347,1357 ---- /* Nonzero if DECL represents a decl. */ #define DECL_P(DECL) (TREE_CODE_CLASS (TREE_CODE (DECL)) == 'd') + /* This is the name of the object as written by the user. It is an IDENTIFIER_NODE. */ #define DECL_NAME(NODE) (DECL_CHECK (NODE)->decl.name) + /* The name of the object as the assembler will see it (but before any translations made by ASM_OUTPUT_LABELREF). Often this is the same as DECL_NAME. It is an IDENTIFIER_NODE. */ *************** struct tree_type *** 1263,1285 **** ? (void) 0 \ : (*lang_set_decl_assembler_name) (NODE)), \ DECL_CHECK (NODE)->decl.assembler_name) ! /* Returns non-zero if the DECL_ASSEMBLER_NAME for NODE has been ! set. If zero, the NODE might still have a DECL_ASSEMBLER_NAME -- ! it just hasn't been set yet. */ #define DECL_ASSEMBLER_NAME_SET_P(NODE) \ (DECL_CHECK (NODE)->decl.assembler_name != NULL_TREE) /* Set the DECL_ASSEMBLER_NAME for NODE to NAME. */ #define SET_DECL_ASSEMBLER_NAME(NODE, NAME) \ (DECL_CHECK (NODE)->decl.assembler_name = (NAME)) ! /* Copy the DECL_ASSEMBLER_NAME from DECL1 to DECL2. Note that if ! DECL1's DECL_ASSEMBLER_NAME has not yet been set, using this macro ! will not cause the DECL_ASSEMBLER_NAME of either DECL to be set. ! In other words, the semantics of using this macro, are different ! than saying: SET_DECL_ASSEMBLER_NAME(DECL2, DECL_ASSEMBLER_NAME (DECL1)) which will try to set the DECL_ASSEMBLER_NAME for DECL1. */ #define COPY_DECL_ASSEMBLER_NAME(DECL1, DECL2) \ (DECL_ASSEMBLER_NAME_SET_P (DECL1) \ ? (void) SET_DECL_ASSEMBLER_NAME (DECL2, \ --- 1360,1385 ---- ? (void) 0 \ : (*lang_set_decl_assembler_name) (NODE)), \ DECL_CHECK (NODE)->decl.assembler_name) ! ! /* Returns non-zero if the DECL_ASSEMBLER_NAME for NODE has been set. If zero, ! the NODE might still have a DECL_ASSEMBLER_NAME -- it just hasn't been set ! yet. */ #define DECL_ASSEMBLER_NAME_SET_P(NODE) \ (DECL_CHECK (NODE)->decl.assembler_name != NULL_TREE) + /* Set the DECL_ASSEMBLER_NAME for NODE to NAME. */ #define SET_DECL_ASSEMBLER_NAME(NODE, NAME) \ (DECL_CHECK (NODE)->decl.assembler_name = (NAME)) ! ! /* Copy the DECL_ASSEMBLER_NAME from DECL1 to DECL2. Note that if DECL1's ! DECL_ASSEMBLER_NAME has not yet been set, using this macro will not cause ! the DECL_ASSEMBLER_NAME of either DECL to be set. In other words, the ! semantics of using this macro, are different than saying: SET_DECL_ASSEMBLER_NAME(DECL2, DECL_ASSEMBLER_NAME (DECL1)) which will try to set the DECL_ASSEMBLER_NAME for DECL1. */ + #define COPY_DECL_ASSEMBLER_NAME(DECL1, DECL2) \ (DECL_ASSEMBLER_NAME_SET_P (DECL1) \ ? (void) SET_DECL_ASSEMBLER_NAME (DECL2, \ *************** struct tree_type *** 1289,1294 **** --- 1389,1395 ---- /* Records the section name in a section attribute. Used to pass the name from decl_attributes to make_function_rtl and make_decl_rtl. */ #define DECL_SECTION_NAME(NODE) (DECL_CHECK (NODE)->decl.section_name) + /* For FIELD_DECLs, this is the RECORD_TYPE, UNION_TYPE, or QUAL_UNION_TYPE node that the field is a member of. For VAR_DECL, PARM_DECL, FUNCTION_DECL, LABEL_DECL, *************** struct tree_type *** 1297,1305 **** type, or NULL_TREE if the given decl has "file scope". */ #define DECL_CONTEXT(NODE) (DECL_CHECK (NODE)->decl.context) #define DECL_FIELD_CONTEXT(NODE) (FIELD_DECL_CHECK (NODE)->decl.context) ! /* In a DECL this is the field where configuration dependent machine ! attributes are store */ ! #define DECL_MACHINE_ATTRIBUTES(NODE) (DECL_CHECK (NODE)->decl.machine_attributes) /* In a FIELD_DECL, this is the field position, counting in bytes, of the byte containing the bit closest to the beginning of the structure. */ #define DECL_FIELD_OFFSET(NODE) (FIELD_DECL_CHECK (NODE)->decl.arguments) --- 1398,1405 ---- type, or NULL_TREE if the given decl has "file scope". */ #define DECL_CONTEXT(NODE) (DECL_CHECK (NODE)->decl.context) #define DECL_FIELD_CONTEXT(NODE) (FIELD_DECL_CHECK (NODE)->decl.context) ! /* In a DECL this is the field where attributes are stored. */ ! #define DECL_ATTRIBUTES(NODE) (DECL_CHECK (NODE)->decl.attributes) /* In a FIELD_DECL, this is the field position, counting in bytes, of the byte containing the bit closest to the beginning of the structure. */ #define DECL_FIELD_OFFSET(NODE) (FIELD_DECL_CHECK (NODE)->decl.arguments) *************** struct tree_type *** 1310,1318 **** if so, the type that was originally specified for it. TREE_TYPE may have been modified (in finish_struct). */ #define DECL_BIT_FIELD_TYPE(NODE) (FIELD_DECL_CHECK (NODE)->decl.result) ! /* In FUNCTION_DECL, a chain of ..._DECL nodes. */ ! /* VAR_DECL and PARM_DECL reserve the arguments slot ! for language-specific uses. */ #define DECL_ARGUMENTS(NODE) (DECL_CHECK (NODE)->decl.arguments) /* This field is used to reference anything in decl.result and is meant only for use by the garbage collector. */ --- 1410,1418 ---- if so, the type that was originally specified for it. TREE_TYPE may have been modified (in finish_struct). */ #define DECL_BIT_FIELD_TYPE(NODE) (FIELD_DECL_CHECK (NODE)->decl.result) ! /* In FUNCTION_DECL, a chain of ..._DECL nodes. ! VAR_DECL and PARM_DECL reserve the arguments slot for language-specific ! uses. */ #define DECL_ARGUMENTS(NODE) (DECL_CHECK (NODE)->decl.arguments) /* This field is used to reference anything in decl.result and is meant only for use by the garbage collector. */ *************** struct tree_type *** 1379,1404 **** ? (NODE)->decl.rtl \ : (make_decl_rtl (NODE, NULL), (NODE)->decl.rtl)) /* Set the DECL_RTL for NODE to RTL. */ ! #define SET_DECL_RTL(NODE, RTL) \ ! (DECL_CHECK (NODE)->decl.rtl = (RTL)) /* Returns non-zero if the DECL_RTL for NODE has already been set. */ ! #define DECL_RTL_SET_P(NODE) \ ! (DECL_CHECK (NODE)->decl.rtl != NULL) /* Copy the RTL from NODE1 to NODE2. If the RTL was not set for NODE1, it will not be set for NODE2; this is a lazy copy. */ #define COPY_DECL_RTL(NODE1, NODE2) \ (DECL_CHECK (NODE2)->decl.rtl = DECL_CHECK (NODE1)->decl.rtl) /* The DECL_RTL for NODE, if it is set, or NULL, if it is not set. */ ! #define DECL_RTL_IF_SET(NODE) \ ! (DECL_RTL_SET_P (NODE) ? DECL_RTL (NODE) : NULL) /* Holds an INSN_LIST of all of the live ranges in which the variable has been moved to a possibly different register. */ #define DECL_LIVE_RANGE_RTL(NODE) (DECL_CHECK (NODE)->decl.live_range_rtl) /* For PARM_DECL, holds an RTL for the stack slot or register where the data was actually passed. */ #define DECL_INCOMING_RTL(NODE) (PARM_DECL_CHECK (NODE)->decl.u2.r) /* For FUNCTION_DECL, if it is inline, holds the saved insn chain. */ #define DECL_SAVED_INSNS(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.u2.f) /* For FUNCTION_DECL, if it is built-in, this identifies which built-in operation it is. */ #define DECL_FUNCTION_CODE(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.u1.f) --- 1479,1505 ---- ? (NODE)->decl.rtl \ : (make_decl_rtl (NODE, NULL), (NODE)->decl.rtl)) /* Set the DECL_RTL for NODE to RTL. */ ! #define SET_DECL_RTL(NODE, RTL) (DECL_CHECK (NODE)->decl.rtl = (RTL)) /* Returns non-zero if the DECL_RTL for NODE has already been set. */ ! #define DECL_RTL_SET_P(NODE) (DECL_CHECK (NODE)->decl.rtl != NULL) /* Copy the RTL from NODE1 to NODE2. If the RTL was not set for NODE1, it will not be set for NODE2; this is a lazy copy. */ #define COPY_DECL_RTL(NODE1, NODE2) \ (DECL_CHECK (NODE2)->decl.rtl = DECL_CHECK (NODE1)->decl.rtl) /* The DECL_RTL for NODE, if it is set, or NULL, if it is not set. */ ! #define DECL_RTL_IF_SET(NODE) (DECL_RTL_SET_P (NODE) ? DECL_RTL (NODE) : NULL) ! /* Holds an INSN_LIST of all of the live ranges in which the variable has been moved to a possibly different register. */ #define DECL_LIVE_RANGE_RTL(NODE) (DECL_CHECK (NODE)->decl.live_range_rtl) + /* For PARM_DECL, holds an RTL for the stack slot or register where the data was actually passed. */ #define DECL_INCOMING_RTL(NODE) (PARM_DECL_CHECK (NODE)->decl.u2.r) + /* For FUNCTION_DECL, if it is inline, holds the saved insn chain. */ #define DECL_SAVED_INSNS(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.u2.f) + /* For FUNCTION_DECL, if it is built-in, this identifies which built-in operation it is. */ #define DECL_FUNCTION_CODE(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.u1.f) *************** struct tree_type *** 1411,1416 **** --- 1512,1518 ---- to an INTEGER_CST node which is suitable for use as an index into the virtual function table. */ #define DECL_VINDEX(NODE) (DECL_CHECK (NODE)->decl.vindex) + /* For FIELD_DECLS, DECL_FCONTEXT is the *first* baseclass in which this FIELD_DECL is defined. This information is needed when writing debugging information about vfield and vbase decls for C++. */ *************** struct tree_type *** 1429,1441 **** /* Like DECL_ABSTRACT_ORIGIN, but returns NODE if there's no abstract origin. This is useful when setting the DECL_ABSTRACT_ORIGIN. */ #define DECL_ORIGIN(NODE) \ ! (DECL_ABSTRACT_ORIGIN (NODE) ? DECL_ABSTRACT_ORIGIN (NODE) : NODE) /* Nonzero for any sort of ..._DECL node means this decl node represents an inline instance of some original (abstract) decl from an inline function; suppress any warnings about shadowing some other variable. FUNCTION_DECL ! nodes can also have their abstract origin set to themselves. */ ! #define DECL_FROM_INLINE(NODE) (DECL_ABSTRACT_ORIGIN (NODE) != (tree) 0 \ && DECL_ABSTRACT_ORIGIN (NODE) != (NODE)) /* Nonzero if a _DECL means that the name of this decl should be ignored --- 1531,1543 ---- /* Like DECL_ABSTRACT_ORIGIN, but returns NODE if there's no abstract origin. This is useful when setting the DECL_ABSTRACT_ORIGIN. */ #define DECL_ORIGIN(NODE) \ ! (DECL_ABSTRACT_ORIGIN (NODE) ? DECL_ABSTRACT_ORIGIN (NODE) : (NODE)) /* Nonzero for any sort of ..._DECL node means this decl node represents an inline instance of some original (abstract) decl from an inline function; suppress any warnings about shadowing some other variable. FUNCTION_DECL ! nodes can also have their abstract origin set to themselves. */ ! #define DECL_FROM_INLINE(NODE) (DECL_ABSTRACT_ORIGIN (NODE) != NULL_TREE \ && DECL_ABSTRACT_ORIGIN (NODE) != (NODE)) /* Nonzero if a _DECL means that the name of this decl should be ignored *************** struct tree_type *** 1452,1458 **** /* Nonzero if a _DECL means that no warnings should be generated just because this decl is unused. */ ! #define DECL_IN_SYSTEM_HEADER(NODE) (DECL_CHECK (NODE)->decl.in_system_header_flag) /* Nonzero for a given ..._DECL node means that this node should be put in .common, if possible. If a DECL_INITIAL is given, and it --- 1554,1561 ---- /* Nonzero if a _DECL means that no warnings should be generated just because this decl is unused. */ ! #define DECL_IN_SYSTEM_HEADER(NODE) \ ! (DECL_CHECK (NODE)->decl.in_system_header_flag) /* Nonzero for a given ..._DECL node means that this node should be put in .common, if possible. If a DECL_INITIAL is given, and it *************** struct tree_type *** 1468,1474 **** #define DECL_EXTERNAL(NODE) (DECL_CHECK (NODE)->decl.external_flag) /* In a VAR_DECL for a RECORD_TYPE, sets number for non-init_priority ! initializatons. */ #define DEFAULT_INIT_PRIORITY 65535 #define MAX_INIT_PRIORITY 65535 #define MAX_RESERVED_INIT_PRIORITY 100 --- 1571,1577 ---- #define DECL_EXTERNAL(NODE) (DECL_CHECK (NODE)->decl.external_flag) /* In a VAR_DECL for a RECORD_TYPE, sets number for non-init_priority ! initializatons. */ #define DEFAULT_INIT_PRIORITY 65535 #define MAX_INIT_PRIORITY 65535 #define MAX_RESERVED_INIT_PRIORITY 100 *************** struct tree_type *** 1476,1496 **** /* In a TYPE_DECL nonzero means the detail info about this type is not dumped into stabs. Instead it will generate cross reference ('x') of names. ! This uses the same flag as DECL_EXTERNAL. */ #define TYPE_DECL_SUPPRESS_DEBUG(NODE) \ ! (TYPE_DECL_CHECK (NODE)->decl.external_flag) /* In VAR_DECL and PARM_DECL nodes, nonzero means declared `register'. */ #define DECL_REGISTER(NODE) (DECL_CHECK (NODE)->decl.regdecl_flag) /* In LABEL_DECL nodes, nonzero means that an error message about jumping into such a binding contour has been printed for this label. */ #define DECL_ERROR_ISSUED(NODE) (LABEL_DECL_CHECK (NODE)->decl.regdecl_flag) /* In a FIELD_DECL, indicates this field should be bit-packed. */ #define DECL_PACKED(NODE) (FIELD_DECL_CHECK (NODE)->decl.regdecl_flag) /* In a FUNCTION_DECL with a non-zero DECL_CONTEXT, indicates that a static chain is not needed. */ #define DECL_NO_STATIC_CHAIN(NODE) \ ! (FUNCTION_DECL_CHECK (NODE)->decl.regdecl_flag) /* Nonzero in a ..._DECL means this variable is ref'd from a nested function. For VAR_DECL nodes, PARM_DECL nodes, and FUNCTION_DECL nodes. --- 1579,1602 ---- /* In a TYPE_DECL nonzero means the detail info about this type is not dumped into stabs. Instead it will generate cross reference ('x') of names. ! This uses the same flag as DECL_EXTERNAL. */ #define TYPE_DECL_SUPPRESS_DEBUG(NODE) \ ! (TYPE_DECL_CHECK (NODE)->decl.external_flag) /* In VAR_DECL and PARM_DECL nodes, nonzero means declared `register'. */ #define DECL_REGISTER(NODE) (DECL_CHECK (NODE)->decl.regdecl_flag) + /* In LABEL_DECL nodes, nonzero means that an error message about jumping into such a binding contour has been printed for this label. */ #define DECL_ERROR_ISSUED(NODE) (LABEL_DECL_CHECK (NODE)->decl.regdecl_flag) + /* In a FIELD_DECL, indicates this field should be bit-packed. */ #define DECL_PACKED(NODE) (FIELD_DECL_CHECK (NODE)->decl.regdecl_flag) + /* In a FUNCTION_DECL with a non-zero DECL_CONTEXT, indicates that a static chain is not needed. */ #define DECL_NO_STATIC_CHAIN(NODE) \ ! (FUNCTION_DECL_CHECK (NODE)->decl.regdecl_flag) /* Nonzero in a ..._DECL means this variable is ref'd from a nested function. For VAR_DECL nodes, PARM_DECL nodes, and FUNCTION_DECL nodes. *************** struct tree_type *** 1508,1518 **** /* In a FUNCTION_DECL, nonzero if the function cannot be inlined. */ #define DECL_UNINLINABLE(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.uninlinable) /* Nonzero in a FUNCTION_DECL means this is a built-in function that is not specified by ansi C and that users are supposed to be allowed to redefine for any purpose whatever. */ #define DECL_BUILT_IN_NONANSI(NODE) \ ! (FUNCTION_DECL_CHECK (NODE)->common.unsigned_flag) /* Nonzero in a FUNCTION_DECL means this function should be treated as if it were a malloc, meaning it returns a pointer that is --- 1614,1632 ---- /* In a FUNCTION_DECL, nonzero if the function cannot be inlined. */ #define DECL_UNINLINABLE(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.uninlinable) + /* In a FUNCTION_DECL, the saved representation of the body of the + entire function. Usually a COMPOUND_STMT, but in C++ this may also + be a RETURN_INIT, CTOR_INITIALIZER, or TRY_BLOCK. */ + #define DECL_SAVED_TREE(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.saved_tree) + + /* List of FUNCTION_DECLs inlined into this function's body. */ + #define DECL_INLINED_FNS(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.inlined_fns) + /* Nonzero in a FUNCTION_DECL means this is a built-in function that is not specified by ansi C and that users are supposed to be allowed to redefine for any purpose whatever. */ #define DECL_BUILT_IN_NONANSI(NODE) \ ! (FUNCTION_DECL_CHECK (NODE)->common.unsigned_flag) /* Nonzero in a FUNCTION_DECL means this function should be treated as if it were a malloc, meaning it returns a pointer that is *************** struct tree_type *** 1526,1531 **** --- 1640,1646 ---- /* Nonzero in a FIELD_DECL means it is a bit field, and must be accessed specially. */ #define DECL_BIT_FIELD(NODE) (FIELD_DECL_CHECK (NODE)->decl.bit_field_flag) + /* In a LABEL_DECL, nonzero means label was defined inside a binding contour that restored a stack level and which is now exited. */ #define DECL_TOO_LATE(NODE) (LABEL_DECL_CHECK (NODE)->decl.bit_field_flag) *************** struct tree_type *** 1538,1546 **** /* In a FUNCTION_DECL, nonzero means a built in function. */ #define DECL_BUILT_IN(NODE) (DECL_BUILT_IN_CLASS (NODE) != NOT_BUILT_IN) /* For a builtin function, identify which part of the compiler defined it. */ #define DECL_BUILT_IN_CLASS(NODE) \ ! (FUNCTION_DECL_CHECK (NODE)->decl.built_in_class) /* Used in VAR_DECLs to indicate that the variable is a vtable. Used in FIELD_DECLs for vtable pointers. --- 1653,1662 ---- /* In a FUNCTION_DECL, nonzero means a built in function. */ #define DECL_BUILT_IN(NODE) (DECL_BUILT_IN_CLASS (NODE) != NOT_BUILT_IN) + /* For a builtin function, identify which part of the compiler defined it. */ #define DECL_BUILT_IN_CLASS(NODE) \ ! (FUNCTION_DECL_CHECK (NODE)->decl.built_in_class) /* Used in VAR_DECLs to indicate that the variable is a vtable. Used in FIELD_DECLs for vtable pointers. *************** struct tree_type *** 1555,1566 **** argument should be passed in the same way that the first union alternative would be passed. */ #define DECL_TRANSPARENT_UNION(NODE) \ ! (PARM_DECL_CHECK (NODE)->decl.transparent_union) /* Used in FUNCTION_DECLs to indicate that they should be run automatically at the beginning or end of execution. */ #define DECL_STATIC_CONSTRUCTOR(NODE) \ ! (FUNCTION_DECL_CHECK (NODE)->decl.static_ctor_flag) #define DECL_STATIC_DESTRUCTOR(NODE) \ (FUNCTION_DECL_CHECK (NODE)->decl.static_dtor_flag) --- 1671,1682 ---- argument should be passed in the same way that the first union alternative would be passed. */ #define DECL_TRANSPARENT_UNION(NODE) \ ! (PARM_DECL_CHECK (NODE)->decl.transparent_union) /* Used in FUNCTION_DECLs to indicate that they should be run automatically at the beginning or end of execution. */ #define DECL_STATIC_CONSTRUCTOR(NODE) \ ! (FUNCTION_DECL_CHECK (NODE)->decl.static_ctor_flag) #define DECL_STATIC_DESTRUCTOR(NODE) \ (FUNCTION_DECL_CHECK (NODE)->decl.static_dtor_flag) *************** struct tree_type *** 1589,1605 **** /* Used in FUNCTION_DECLs to indicate that function entry and exit should be instrumented with calls to support routines. */ #define DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT(NODE) \ ! (FUNCTION_DECL_CHECK (NODE)->decl.no_instrument_function_entry_exit) ! ! /* Used in FUNCTION_DECLs to indicate that check-memory-usage should be ! disabled in this function. */ ! #define DECL_NO_CHECK_MEMORY_USAGE(NODE) \ ! (FUNCTION_DECL_CHECK (NODE)->decl.no_check_memory_usage) /* Used in FUNCTION_DECLs to indicate that limit-stack-* should be disabled in this function. */ #define DECL_NO_LIMIT_STACK(NODE) \ ! (FUNCTION_DECL_CHECK (NODE)->decl.no_limit_stack) /* Additional flags for language-specific uses. */ #define DECL_LANG_FLAG_0(NODE) (DECL_CHECK (NODE)->decl.lang_flag_0) --- 1705,1716 ---- /* Used in FUNCTION_DECLs to indicate that function entry and exit should be instrumented with calls to support routines. */ #define DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT(NODE) \ ! (FUNCTION_DECL_CHECK (NODE)->decl.no_instrument_function_entry_exit) /* Used in FUNCTION_DECLs to indicate that limit-stack-* should be disabled in this function. */ #define DECL_NO_LIMIT_STACK(NODE) \ ! (FUNCTION_DECL_CHECK (NODE)->decl.no_limit_stack) /* Additional flags for language-specific uses. */ #define DECL_LANG_FLAG_0(NODE) (DECL_CHECK (NODE)->decl.lang_flag_0) *************** struct tree_type *** 1640,1652 **** argument's depth. */ #define DECL_POINTER_DEPTH(DECL) (DECL_CHECK (DECL)->decl.pointer_depth) struct tree_decl { struct tree_common common; const char *filename; int linenum; unsigned int uid; ! union tree_node *size; ENUM_BITFIELD(machine_mode) mode : 8; unsigned external_flag : 1; --- 1751,1765 ---- argument's depth. */ #define DECL_POINTER_DEPTH(DECL) (DECL_CHECK (DECL)->decl.pointer_depth) + struct function; + struct tree_decl { struct tree_common common; const char *filename; int linenum; unsigned int uid; ! tree size; ENUM_BITFIELD(machine_mode) mode : 8; unsigned external_flag : 1; *************** struct tree_decl *** 1669,1686 **** unsigned non_addr_const_p : 1; unsigned no_instrument_function_entry_exit : 1; - unsigned no_check_memory_usage : 1; unsigned comdat_flag : 1; unsigned malloc_flag : 1; unsigned no_limit_stack : 1; ENUM_BITFIELD(built_in_class) built_in_class : 2; - unsigned pure_flag : 1; unsigned pointer_depth : 2; unsigned non_addressable : 1; unsigned user_align : 1; unsigned uninlinable : 1; ! /* Two unused bits. */ unsigned lang_flag_0 : 1; unsigned lang_flag_1 : 1; --- 1782,1798 ---- unsigned non_addr_const_p : 1; unsigned no_instrument_function_entry_exit : 1; unsigned comdat_flag : 1; unsigned malloc_flag : 1; unsigned no_limit_stack : 1; ENUM_BITFIELD(built_in_class) built_in_class : 2; unsigned pure_flag : 1; + unsigned pointer_depth : 2; unsigned non_addressable : 1; unsigned user_align : 1; unsigned uninlinable : 1; ! /* Three unused bits. */ unsigned lang_flag_0 : 1; unsigned lang_flag_1 : 1; *************** struct tree_decl *** 1703,1720 **** struct {unsigned int align : 24; unsigned int off_align : 8;} a; } u1; ! union tree_node *size_unit; ! union tree_node *name; ! union tree_node *context; ! union tree_node *arguments; /* Also used for DECL_FIELD_OFFSET */ ! union tree_node *result; /* Also used for DECL_BIT_FIELD_TYPE */ ! union tree_node *initial; /* Also used for DECL_QUALIFIER */ ! union tree_node *abstract_origin; ! union tree_node *assembler_name; ! union tree_node *section_name; ! union tree_node *machine_attributes; ! struct rtx_def *rtl; /* RTL representation for object. */ ! struct rtx_def *live_range_rtl; /* In FUNCTION_DECL, if it is inline, holds the saved insn chain. In FIELD_DECL, is DECL_FIELD_BIT_OFFSET. --- 1815,1832 ---- struct {unsigned int align : 24; unsigned int off_align : 8;} a; } u1; ! tree size_unit; ! tree name; ! tree context; ! tree arguments; /* Also used for DECL_FIELD_OFFSET */ ! tree result; /* Also used for DECL_BIT_FIELD_TYPE */ ! tree initial; /* Also used for DECL_QUALIFIER */ ! tree abstract_origin; ! tree assembler_name; ! tree section_name; ! tree attributes; ! rtx rtl; /* RTL representation for object. */ ! rtx live_range_rtl; /* In FUNCTION_DECL, if it is inline, holds the saved insn chain. In FIELD_DECL, is DECL_FIELD_BIT_OFFSET. *************** struct tree_decl *** 1723,1734 **** Used by Chill and Java in LABEL_DECL and by C++ and Java in VAR_DECL. */ union { struct function *f; ! struct rtx_def *r; ! union tree_node *t; int i; } u2; ! union tree_node *vindex; HOST_WIDE_INT pointer_alias_set; /* Points to a structure whose details depend on the language in use. */ struct lang_decl *lang_specific; --- 1835,1853 ---- Used by Chill and Java in LABEL_DECL and by C++ and Java in VAR_DECL. */ union { struct function *f; ! rtx r; ! tree t; int i; } u2; ! /* In a FUNCTION_DECL, this is DECL_SAVED_TREE. */ ! tree saved_tree; ! ! /* In a FUNCTION_DECL, these are function data which is to be kept ! as long as FUNCTION_DECL is kept. */ ! tree inlined_fns; ! ! tree vindex; HOST_WIDE_INT pointer_alias_set; /* Points to a structure whose details depend on the language in use. */ struct lang_decl *lang_specific; *************** union tree_node *** 1743,1748 **** --- 1862,1868 ---- struct tree_common common; struct tree_int_cst int_cst; struct tree_real_cst real_cst; + struct tree_vector vector; struct tree_string string; struct tree_complex complex; struct tree_identifier identifier; *************** enum tree_index *** 1800,1810 **** --- 1920,1943 ---- TI_VOID_LIST_NODE, + TI_UV4SF_TYPE, + TI_UV4SI_TYPE, + TI_UV8HI_TYPE, + TI_UV8QI_TYPE, + TI_UV4HI_TYPE, + TI_UV2SI_TYPE, + TI_UV2SF_TYPE, + TI_UV16QI_TYPE, + TI_V4SF_TYPE, + TI_V16SF_TYPE, TI_V4SI_TYPE, + TI_V8HI_TYPE, TI_V8QI_TYPE, TI_V4HI_TYPE, TI_V2SI_TYPE, + TI_V2SF_TYPE, + TI_V16QI_TYPE, TI_MAIN_IDENTIFIER, *************** extern tree global_trees[TI_MAX]; *** 1865,1875 **** --- 1998,2019 ---- #define main_identifier_node global_trees[TI_MAIN_IDENTIFIER] #define MAIN_NAME_P(NODE) (IDENTIFIER_NODE_CHECK (NODE) == main_identifier_node) + #define unsigned_V16QI_type_node global_trees[TI_UV16QI_TYPE] + #define unsigned_V4SI_type_node global_trees[TI_UV4SI_TYPE] + #define unsigned_V8QI_type_node global_trees[TI_UV8QI_TYPE] + #define unsigned_V8HI_type_node global_trees[TI_UV8HI_TYPE] + #define unsigned_V4HI_type_node global_trees[TI_UV4HI_TYPE] + #define unsigned_V2SI_type_node global_trees[TI_UV2SI_TYPE] + + #define V16QI_type_node global_trees[TI_V16QI_TYPE] #define V4SF_type_node global_trees[TI_V4SF_TYPE] #define V4SI_type_node global_trees[TI_V4SI_TYPE] #define V8QI_type_node global_trees[TI_V8QI_TYPE] + #define V8HI_type_node global_trees[TI_V8HI_TYPE] #define V4HI_type_node global_trees[TI_V4HI_TYPE] #define V2SI_type_node global_trees[TI_V2SI_TYPE] + #define V2SF_type_node global_trees[TI_V2SF_TYPE] + #define V16SF_type_node global_trees[TI_V16SF_TYPE] /* An enumeration of the standard C integer types. These must be ordered so that shorter types appear before longer ones. */ *************** extern tree integer_types[itk_none]; *** 1910,1926 **** #define NULL_TREE (tree) NULL - /* The following functions accept a wide integer argument. Rather than - having to cast on every function call, we use a macro instead, that is - defined here and in rtl.h. */ - - #ifndef exact_log2 - #define exact_log2(N) exact_log2_wide ((unsigned HOST_WIDE_INT) (N)) - #define floor_log2(N) floor_log2_wide ((unsigned HOST_WIDE_INT) (N)) - #endif - extern int exact_log2_wide PARAMS ((unsigned HOST_WIDE_INT)); - extern int floor_log2_wide PARAMS ((unsigned HOST_WIDE_INT)); - /* Approximate positive square root of a host double. This is for statistical reports, not code generation. */ extern double approx_sqrt PARAMS ((double)); --- 2054,2059 ---- *************** extern tree make_tree_vec PARAMS ((int) *** 1960,1987 **** extern tree get_identifier PARAMS ((const char *)); /* If an identifier with the name TEXT (a null-terminated string) has previously been referred to, return that node; otherwise return NULL_TREE. */ extern tree maybe_get_identifier PARAMS ((const char *)); - /* Look up an identifier with the name TEXT, replace its identifier - node with NODE, and return the old identifier node. This is used - by languages which need to enable and disable keywords based on - context; e.g. see remember_protocol_qualifiers in objc/objc-act.c. */ - - extern tree set_identifier PARAMS ((const char *, tree)); - /* Construct various types of nodes. */ ! #define build_int_2(LO,HI) \ build_int_2_wide ((unsigned HOST_WIDE_INT) (LO), (HOST_WIDE_INT) (HI)) extern tree build PARAMS ((enum tree_code, tree, ...)); extern tree build_nt PARAMS ((enum tree_code, ...)); extern tree build_int_2_wide PARAMS ((unsigned HOST_WIDE_INT, HOST_WIDE_INT)); extern tree build_real PARAMS ((tree, REAL_VALUE_TYPE)); extern tree build_real_from_int_cst PARAMS ((tree, tree)); extern tree build_complex PARAMS ((tree, tree, tree)); --- 2093,2119 ---- extern tree get_identifier PARAMS ((const char *)); + /* Identical to get_identifier, except that the length is assumed + known. */ + + extern tree get_identifier_with_length PARAMS ((const char *, unsigned int)); + /* If an identifier with the name TEXT (a null-terminated string) has previously been referred to, return that node; otherwise return NULL_TREE. */ extern tree maybe_get_identifier PARAMS ((const char *)); /* Construct various types of nodes. */ ! #define build_int_2(LO, HI) \ build_int_2_wide ((unsigned HOST_WIDE_INT) (LO), (HOST_WIDE_INT) (HI)) extern tree build PARAMS ((enum tree_code, tree, ...)); extern tree build_nt PARAMS ((enum tree_code, ...)); extern tree build_int_2_wide PARAMS ((unsigned HOST_WIDE_INT, HOST_WIDE_INT)); + extern tree build_vector PARAMS ((tree, tree)); extern tree build_real PARAMS ((tree, REAL_VALUE_TYPE)); extern tree build_real_from_int_cst PARAMS ((tree, tree)); extern tree build_complex PARAMS ((tree, tree, tree)); *************** extern HOST_WIDE_INT tree_low_cst PARAMS *** 2026,2032 **** extern int tree_int_cst_msb PARAMS ((tree)); extern int tree_int_cst_sgn PARAMS ((tree)); extern int tree_expr_nonnegative_p PARAMS ((tree)); ! extern int rtl_expr_nonnegative_p PARAMS ((struct rtx_def *)); extern int index_type_equal PARAMS ((tree, tree)); extern tree get_inner_array_type PARAMS ((tree)); --- 2158,2164 ---- extern int tree_int_cst_msb PARAMS ((tree)); extern int tree_int_cst_sgn PARAMS ((tree)); extern int tree_expr_nonnegative_p PARAMS ((tree)); ! extern int rtl_expr_nonnegative_p PARAMS ((rtx)); extern int index_type_equal PARAMS ((tree, tree)); extern tree get_inner_array_type PARAMS ((tree)); *************** extern tree get_inner_array_type PARAMS *** 2034,2052 **** put the prototype here. Rtl.h does declare the prototype if tree.h had been included. */ ! extern tree make_tree PARAMS ((tree, struct rtx_def *)); /* Return a type like TTYPE except that its TYPE_ATTRIBUTES is ATTRIBUTE. Such modified types already made are recorded so that duplicates ! are not made. */ extern tree build_type_attribute_variant PARAMS ((tree, tree)); extern tree build_decl_attribute_variant PARAMS ((tree, tree)); ! extern tree merge_machine_decl_attributes PARAMS ((tree, tree)); ! extern tree merge_machine_type_attributes PARAMS ((tree, tree)); /* Split a list of declspecs and attributes into two. */ --- 2166,2263 ---- put the prototype here. Rtl.h does declare the prototype if tree.h had been included. */ ! extern tree make_tree PARAMS ((tree, rtx)); /* Return a type like TTYPE except that its TYPE_ATTRIBUTES is ATTRIBUTE. Such modified types already made are recorded so that duplicates ! are not made. */ extern tree build_type_attribute_variant PARAMS ((tree, tree)); extern tree build_decl_attribute_variant PARAMS ((tree, tree)); ! /* Structure describing an attribute and a function to handle it. */ ! struct attribute_spec ! { ! /* The name of the attribute (without any leading or trailing __), ! or NULL to mark the end of a table of attributes. */ ! const char *const name; ! /* The minimum length of the list of arguments of the attribute. */ ! const int min_length; ! /* The maximum length of the list of arguments of the attribute ! (-1 for no maximum). */ ! const int max_length; ! /* Whether this attribute requires a DECL. If it does, it will be passed ! from types of DECLs, function return types and array element types to ! the DECLs, function types and array types respectively; but when ! applied to a type in any other circumstances, it will be ignored with ! a warning. (If greater control is desired for a given attribute, ! this should be false, and the flags argument to the handler may be ! used to gain greater control in that case.) */ ! const bool decl_required; ! /* Whether this attribute requires a type. If it does, it will be passed ! from a DECL to the type of that DECL. */ ! const bool type_required; ! /* Whether this attribute requires a function (or method) type. If it does, ! it will be passed from a function pointer type to the target type, ! and from a function return type (which is not itself a function ! pointer type) to the function type. */ ! const bool function_type_required; ! /* Function to handle this attribute. NODE points to the node to which ! the attribute is to be applied. If a DECL, it should be modified in ! place; if a TYPE, a copy should be created. NAME is the name of the ! attribute (possibly with leading or trailing __). ARGS is the TREE_LIST ! of the arguments (which may be NULL). FLAGS gives further information ! about the context of the attribute. Afterwards, the attributes will ! be added to the DECL_ATTRIBUTES or TYPE_ATTRIBUTES, as appropriate, ! unless *NO_ADD_ATTRS is set to true (which should be done on error, ! as well as in any other cases when the attributes should not be added ! to the DECL or TYPE). Depending on FLAGS, any attributes to be ! applied to another type or DECL later may be returned; ! otherwise the return value should be NULL_TREE. This pointer may be ! NULL if no special handling is required beyond the checks implied ! by the rest of this structure. */ ! tree (*const handler) PARAMS ((tree *node, tree name, tree args, ! int flags, bool *no_add_attrs)); ! }; ! ! extern const struct attribute_spec default_target_attribute_table[]; ! ! /* Flags that may be passed in the third argument of decl_attributes, and ! to handler functions for attributes. */ ! enum attribute_flags ! { ! /* The type passed in is the type of a DECL, and any attributes that ! should be passed in again to be applied to the DECL rather than the ! type should be returned. */ ! ATTR_FLAG_DECL_NEXT = 1, ! /* The type passed in is a function return type, and any attributes that ! should be passed in again to be applied to the function type rather ! than the return type should be returned. */ ! ATTR_FLAG_FUNCTION_NEXT = 2, ! /* The type passed in is an array element type, and any attributes that ! should be passed in again to be applied to the array type rather ! than the element type should be returned. */ ! ATTR_FLAG_ARRAY_NEXT = 4, ! /* The type passed in is a structure, union or enumeration type being ! created, and should be modified in place. */ ! ATTR_FLAG_TYPE_IN_PLACE = 8, ! /* The attributes are being applied by default to a library function whose ! name indicates known behavior, and should be silently ignored if they ! are not in fact compatible with the function type. */ ! ATTR_FLAG_BUILT_IN = 16 ! }; ! ! /* Default versions of target-overridable functions. */ ! ! extern tree merge_decl_attributes PARAMS ((tree, tree)); ! extern tree merge_type_attributes PARAMS ((tree, tree)); ! extern int default_comp_type_attributes PARAMS ((tree, tree)); ! extern void default_set_default_type_attributes PARAMS ((tree)); ! extern void default_insert_attributes PARAMS ((tree, tree *)); ! extern bool default_function_attribute_inlinable_p PARAMS ((tree)); ! extern bool default_ms_bitfield_layout_p PARAMS ((tree)); /* Split a list of declspecs and attributes into two. */ *************** extern tree lookup_attribute PARAMS ((c *** 2074,2079 **** --- 2285,2296 ---- extern tree merge_attributes PARAMS ((tree, tree)); + #ifdef TARGET_DLLIMPORT_DECL_ATTRIBUTES + /* Given two Windows decl attributes lists, possibly including + dllimport, return a list of their union . */ + extern tree merge_dllimport_decl_attributes PARAMS ((tree, tree)); + #endif + /* Return a version of the TYPE, qualified as indicated by the TYPE_QUALS, if one exists. If no qualified version exists yet, return NULL_TREE. */ *************** extern tree build_qualified_type *** 2091,2097 **** build_qualified_type instead. */ #define build_type_variant(TYPE, CONST_P, VOLATILE_P) \ ! build_qualified_type (TYPE, \ ((CONST_P) ? TYPE_QUAL_CONST : 0) \ | ((VOLATILE_P) ? TYPE_QUAL_VOLATILE : 0)) --- 2308,2314 ---- build_qualified_type instead. */ #define build_type_variant(TYPE, CONST_P, VOLATILE_P) \ ! build_qualified_type ((TYPE), \ ((CONST_P) ? TYPE_QUAL_CONST : 0) \ | ((VOLATILE_P) ? TYPE_QUAL_VOLATILE : 0)) *************** typedef struct record_layout_info_s *** 2127,2138 **** --- 2344,2362 ---- unsigned int record_align; /* The alignment of the record so far, not including padding, in bits. */ unsigned int unpacked_align; + /* The alignment of the record so far, allowing for the record to be + padded only at the end, in bits. */ + unsigned int unpadded_align; + /* The previous field layed out. */ + tree prev_field; /* The static variables (i.e., class variables, as opposed to instance variables) encountered in T. */ tree pending_statics; int packed_maybe_necessary; } *record_layout_info; + extern void set_lang_adjust_rli PARAMS ((void (*) PARAMS + ((record_layout_info)))); extern record_layout_info start_record_layout PARAMS ((tree)); extern tree bit_from_pos PARAMS ((tree, tree)); extern tree byte_from_pos PARAMS ((tree, tree)); *************** extern HOST_WIDE_INT int_byte_position P *** 2193,2200 **** enum size_type_kind { ! SIZETYPE, /* Normal representation of sizes in bytes. */ ! SSIZETYPE, /* Signed representation of sizes in bytes. */ USIZETYPE, /* Unsigned representation of sizes in bytes. */ BITSIZETYPE, /* Normal representation of sizes in bits. */ SBITSIZETYPE, /* Signed representation of sizes in bits. */ --- 2417,2424 ---- enum size_type_kind { ! SIZETYPE, /* Normal representation of sizes in bytes. */ ! SSIZETYPE, /* Signed representation of sizes in bytes. */ USIZETYPE, /* Unsigned representation of sizes in bytes. */ BITSIZETYPE, /* Normal representation of sizes in bits. */ SBITSIZETYPE, /* Signed representation of sizes in bits. */ *************** extern tree size_int_type_wide PARAMS ( *** 2225,2230 **** --- 2449,2456 ---- extern tree round_up PARAMS ((tree, int)); extern tree round_down PARAMS ((tree, int)); extern tree get_pending_sizes PARAMS ((void)); + extern int is_pending_size PARAMS ((tree)); + extern void put_pending_size PARAMS ((tree)); extern void put_pending_sizes PARAMS ((tree)); /* Type for sizes of data-type. */ *************** extern void put_pending_sizes PARAMS (( *** 2234,2243 **** + (BITS_PER_UNIT > 8) + (BITS_PER_UNIT > 16) + (BITS_PER_UNIT > 32) \ + (BITS_PER_UNIT > 64) + (BITS_PER_UNIT > 128) + (BITS_PER_UNIT > 256)) ! /* If nonzero, an upper limit on alignment of structure fields, in bits. */ extern unsigned int maximum_field_alignment; ! /* If non-zero, the alignment of a bitstring or (power-)set value, in bits. */ extern unsigned int set_alignment; /* Concatenate two lists (chains of TREE_LIST nodes) X and Y --- 2460,2469 ---- + (BITS_PER_UNIT > 8) + (BITS_PER_UNIT > 16) + (BITS_PER_UNIT > 32) \ + (BITS_PER_UNIT > 64) + (BITS_PER_UNIT > 128) + (BITS_PER_UNIT > 256)) ! /* If nonzero, an upper limit on alignment of structure fields, in bits. */ extern unsigned int maximum_field_alignment; ! /* If non-zero, the alignment of a bitstring or (power-)set value, in bits. */ extern unsigned int set_alignment; /* Concatenate two lists (chains of TREE_LIST nodes) X and Y *************** extern tree maybe_build_cleanup PARAMS *** 2433,2439 **** extern tree get_inner_reference PARAMS ((tree, HOST_WIDE_INT *, HOST_WIDE_INT *, tree *, enum machine_mode *, int *, ! int *, unsigned int *)); /* Given a DECL or TYPE, return the scope in which it was declared, or NUL_TREE if there is no containing scope. */ --- 2659,2669 ---- extern tree get_inner_reference PARAMS ((tree, HOST_WIDE_INT *, HOST_WIDE_INT *, tree *, enum machine_mode *, int *, ! int *)); ! ! /* Return 1 if T is an expression that get_inner_reference handles. */ ! ! extern int handled_component_p PARAMS ((tree)); /* Given a DECL or TYPE, return the scope in which it was declared, or NUL_TREE if there is no containing scope. */ *************** extern const char *input_filename; *** 2467,2476 **** /* Current line number in input file. */ extern int lineno; - /* Nonzero for -pedantic switch: warn about anything - that standard C forbids. */ - extern int pedantic; - /* Nonzero means lvalues are limited to those valid in pedantic ANSI C. Zero means allow extended lvalues. */ --- 2697,2702 ---- *************** extern int pedantic_lvalues; *** 2481,2487 **** extern int immediate_size_expand; ! /* Points to the FUNCTION_DECL of the function whose body we are reading. */ extern tree current_function_decl; --- 2707,2713 ---- extern int immediate_size_expand; ! /* Points to the FUNCTION_DECL of the function whose body we are reading. */ extern tree current_function_decl; *************** extern const char *(*decl_printable_name *** 2507,2517 **** extern void (*incomplete_decl_finalize_hook) PARAMS ((tree)); - extern const char *init_parse PARAMS ((const char *)); - extern void finish_parse PARAMS ((void)); - - extern const char * const language_string; - /* Declare a predefined function. Return the declaration. This function is provided by each language frontend. */ extern tree builtin_function PARAMS ((const char *, tree, int, --- 2733,2738 ---- *************** extern int type_num_arguments *** 2532,2541 **** /* In stmt.c */ extern int in_control_zone_p PARAMS ((void)); ! extern void expand_fixups PARAMS ((struct rtx_def *)); ! extern tree expand_start_stmt_expr PARAMS ((void)); extern tree expand_end_stmt_expr PARAMS ((tree)); extern void expand_expr_stmt PARAMS ((tree)); extern int warn_if_unused_value PARAMS ((tree)); extern void expand_decl_init PARAMS ((tree)); extern void clear_last_expr PARAMS ((void)); --- 2753,2763 ---- /* In stmt.c */ extern int in_control_zone_p PARAMS ((void)); ! extern void expand_fixups PARAMS ((rtx)); ! extern tree expand_start_stmt_expr PARAMS ((int)); extern tree expand_end_stmt_expr PARAMS ((tree)); extern void expand_expr_stmt PARAMS ((tree)); + extern void expand_expr_stmt_value PARAMS ((tree, int, int)); extern int warn_if_unused_value PARAMS ((tree)); extern void expand_decl_init PARAMS ((tree)); extern void clear_last_expr PARAMS ((void)); *************** extern int expand_exit_loop_top_cond PA *** 2560,2568 **** tree)); extern int expand_exit_something PARAMS ((void)); - extern void expand_null_return PARAMS ((void)); extern void expand_return PARAMS ((tree)); ! extern int optimize_tail_recursion PARAMS ((tree, struct rtx_def *)); extern void expand_start_bindings_and_block PARAMS ((int, tree)); #define expand_start_bindings(flags) \ expand_start_bindings_and_block(flags, NULL_TREE) --- 2782,2789 ---- tree)); extern int expand_exit_something PARAMS ((void)); extern void expand_return PARAMS ((tree)); ! extern int optimize_tail_recursion PARAMS ((tree, rtx)); extern void expand_start_bindings_and_block PARAMS ((int, tree)); #define expand_start_bindings(flags) \ expand_start_bindings_and_block(flags, NULL_TREE) *************** extern void end_cleanup_deferral PARAMS *** 2573,2582 **** extern int is_body_block PARAMS ((tree)); extern int conditional_context PARAMS ((void)); extern tree last_cleanup_this_contour PARAMS ((void)); extern void expand_start_case PARAMS ((int, tree, tree, const char *)); ! extern void expand_end_case PARAMS ((tree)); extern int add_case_node PARAMS ((tree, tree, tree, tree *)); extern int pushcase PARAMS ((tree, --- 2794,2805 ---- extern int is_body_block PARAMS ((tree)); extern int conditional_context PARAMS ((void)); + extern struct nesting * current_nesting_level PARAMS ((void)); extern tree last_cleanup_this_contour PARAMS ((void)); extern void expand_start_case PARAMS ((int, tree, tree, const char *)); ! extern void expand_end_case_type PARAMS ((tree, tree)); ! #define expand_end_case(cond) expand_end_case_type (cond, NULL) extern int add_case_node PARAMS ((tree, tree, tree, tree *)); extern int pushcase PARAMS ((tree, *************** extern tree fold_builtin PARAMS ((tree) *** 2639,2656 **** /* The language front-end must define these functions. */ - /* Function of no arguments for initializing lexical scanning. */ - extern void init_lex PARAMS ((void)); - /* Function of no arguments for initializing the symbol table. */ - extern void init_decl_processing PARAMS ((void)); - - /* Function to identify which front-end produced the output file. */ - extern const char *lang_identify PARAMS ((void)); - - /* Called by report_error_function to print out function name. - * Default may be overridden by language front-ends. */ - extern void (*print_error_function) PARAMS ((const char *)); - /* Function to replace the DECL_LANG_SPECIFIC field of a DECL with a copy. */ extern void copy_lang_decl PARAMS ((tree)); --- 2862,2867 ---- *************** extern tree gettags PARAMS ((void)); *** 2680,2688 **** extern tree build_range_type PARAMS ((tree, tree, tree)); - /* Called after finishing a record, union or enumeral type. */ - extern void rest_of_type_compilation PARAMS ((tree, int)); - /* In alias.c */ extern void record_component_aliases PARAMS ((tree)); extern HOST_WIDE_INT get_alias_set PARAMS ((tree)); --- 2891,2896 ---- *************** extern int alias_sets_conflict_p PARAMS *** 2691,2699 **** extern int readonly_fields_p PARAMS ((tree)); extern int objects_must_conflict_p PARAMS ((tree, tree)); - /* In c-common.c */ - extern HOST_WIDE_INT lang_get_alias_set PARAMS ((tree)); - /* Set the DECL_ASSEMBLER_NAME for a node. If it is the sort of thing that the assembler should talk about, set DECL_ASSEMBLER_NAME to an appropriate IDENTIFIER_NODE. Otherwise, set it to the --- 2899,2904 ---- *************** struct obstack; *** 2705,2711 **** /* In tree.c */ extern int really_constant_p PARAMS ((tree)); - extern void set_identifier_size PARAMS ((int)); extern int int_fits_type_p PARAMS ((tree, tree)); extern int tree_log2 PARAMS ((tree)); extern int tree_floor_log2 PARAMS ((tree)); --- 2910,2915 ---- *************** extern void preserve_data PARAMS ((void *** 2713,2719 **** extern int object_permanent_p PARAMS ((tree)); extern int type_precision PARAMS ((tree)); extern int simple_cst_equal PARAMS ((tree, tree)); ! extern int compare_tree_int PARAMS ((tree, unsigned int)); extern int type_list_equal PARAMS ((tree, tree)); extern int chain_member PARAMS ((tree, tree)); extern int chain_member_purpose PARAMS ((tree, tree)); --- 2917,2924 ---- extern int object_permanent_p PARAMS ((tree)); extern int type_precision PARAMS ((tree)); extern int simple_cst_equal PARAMS ((tree, tree)); ! extern int compare_tree_int PARAMS ((tree, ! unsigned HOST_WIDE_INT)); extern int type_list_equal PARAMS ((tree, tree)); extern int chain_member PARAMS ((tree, tree)); extern int chain_member_purpose PARAMS ((tree, tree)); *************** extern void expand_pending_sizes *** 2736,2742 **** extern int real_onep PARAMS ((tree)); extern int real_twop PARAMS ((tree)); - extern void start_identifier_warnings PARAMS ((void)); extern void gcc_obstack_init PARAMS ((struct obstack *)); extern void init_obstacks PARAMS ((void)); extern void build_common_tree_nodes PARAMS ((int)); --- 2941,2946 ---- *************** extern void combine_temp_slots PARAMS ( *** 2763,2783 **** extern void free_temp_slots PARAMS ((void)); extern void pop_temp_slots PARAMS ((void)); extern void push_temp_slots PARAMS ((void)); ! extern void preserve_temp_slots PARAMS ((struct rtx_def *)); extern void preserve_rtl_expr_temps PARAMS ((tree)); extern int aggregate_value_p PARAMS ((tree)); extern void free_temps_for_rtl_expr PARAMS ((tree)); ! extern void instantiate_virtual_regs PARAMS ((tree, struct rtx_def *)); ! extern void unshare_all_rtl PARAMS ((tree, struct rtx_def *)); extern int max_parm_reg_num PARAMS ((void)); extern void push_function_context PARAMS ((void)); extern void pop_function_context PARAMS ((void)); extern void push_function_context_to PARAMS ((tree)); extern void pop_function_context_from PARAMS ((tree)); /* In print-rtl.c */ #ifdef BUFSIZ ! extern void print_rtl PARAMS ((FILE *, struct rtx_def *)); #endif /* In print-tree.c */ --- 2967,2988 ---- extern void free_temp_slots PARAMS ((void)); extern void pop_temp_slots PARAMS ((void)); extern void push_temp_slots PARAMS ((void)); ! extern void preserve_temp_slots PARAMS ((rtx)); extern void preserve_rtl_expr_temps PARAMS ((tree)); extern int aggregate_value_p PARAMS ((tree)); extern void free_temps_for_rtl_expr PARAMS ((tree)); ! extern void instantiate_virtual_regs PARAMS ((tree, rtx)); ! extern void unshare_all_rtl PARAMS ((tree, rtx)); extern int max_parm_reg_num PARAMS ((void)); extern void push_function_context PARAMS ((void)); extern void pop_function_context PARAMS ((void)); extern void push_function_context_to PARAMS ((tree)); extern void pop_function_context_from PARAMS ((tree)); + extern void ggc_mark_struct_function PARAMS ((struct function *)); /* In print-rtl.c */ #ifdef BUFSIZ ! extern void print_rtl PARAMS ((FILE *, rtx)); #endif /* In print-tree.c */ *************** extern void indent_to PARAMS ((FILE *, *** 2791,2831 **** #endif /* In expr.c */ - extern void emit_queue PARAMS ((void)); extern int apply_args_register_offset PARAMS ((int)); ! extern struct rtx_def *expand_builtin_return_addr ! PARAMS ((enum built_in_function, int, struct rtx_def *)); ! extern void do_pending_stack_adjust PARAMS ((void)); ! extern struct rtx_def *expand_assignment PARAMS ((tree, tree, int, ! int)); ! extern struct rtx_def *store_expr PARAMS ((tree, ! struct rtx_def *, ! int)); extern void check_max_integer_computation_mode PARAMS ((tree)); /* In emit-rtl.c */ extern void start_sequence_for_rtl_expr PARAMS ((tree)); ! extern struct rtx_def *emit_line_note_after PARAMS ((const char *, int, ! struct rtx_def *)); ! extern struct rtx_def *emit_line_note PARAMS ((const char *, int)); ! extern struct rtx_def *emit_line_note_force PARAMS ((const char *, int)); /* In calls.c */ extern int setjmp_call_p PARAMS ((tree)); /* In front end. */ extern int mark_addressable PARAMS ((tree)); extern void incomplete_type_error PARAMS ((tree, tree)); - extern void print_lang_statistics PARAMS ((void)); extern tree truthvalue_conversion PARAMS ((tree)); - extern void split_specs_attrs PARAMS ((tree, tree *, tree *)); - #ifdef BUFSIZ - extern void print_lang_decl PARAMS ((FILE *, tree, int)); - extern void print_lang_type PARAMS ((FILE *, tree, int)); - extern void print_lang_identifier PARAMS ((FILE *, tree, int)); - #endif extern int global_bindings_p PARAMS ((void)); extern void insert_block PARAMS ((tree)); --- 2996,3047 ---- #endif /* In expr.c */ extern int apply_args_register_offset PARAMS ((int)); ! extern rtx expand_builtin_return_addr ! PARAMS ((enum built_in_function, int, rtx)); extern void check_max_integer_computation_mode PARAMS ((tree)); /* In emit-rtl.c */ extern void start_sequence_for_rtl_expr PARAMS ((tree)); ! extern rtx emit_line_note PARAMS ((const char *, int)); /* In calls.c */ extern int setjmp_call_p PARAMS ((tree)); + /* In attribs.c. */ + + /* Process the attributes listed in ATTRIBUTES and install them in *NODE, + which is either a DECL (including a TYPE_DECL) or a TYPE. If a DECL, + it should be modified in place; if a TYPE, a copy should be created + unless ATTR_FLAG_TYPE_IN_PLACE is set in FLAGS. FLAGS gives further + information, in the form of a bitwise OR of flags in enum attribute_flags + from tree.h. Depending on these flags, some attributes may be + returned to be applied at a later stage (for example, to apply + a decl attribute to the declaration rather than to its type). */ + extern tree decl_attributes PARAMS ((tree *, tree, int)); + + /* The following function must be provided by front ends + using attribs.c. */ + + /* Possibly apply default attributes to a function (represented by + a FUNCTION_DECL). */ + extern void insert_default_attributes PARAMS ((tree)); + + /* Table of machine-independent attributes for checking formats, if used. */ + extern const struct attribute_spec *format_attribute_table; + + /* Table of machine-independent attributes for a particular language. */ + extern const struct attribute_spec *lang_attribute_table; + + /* Flag saying whether common language attributes are to be supported. */ + extern int lang_attribute_common; + /* In front end. */ extern int mark_addressable PARAMS ((tree)); extern void incomplete_type_error PARAMS ((tree, tree)); extern tree truthvalue_conversion PARAMS ((tree)); extern int global_bindings_p PARAMS ((void)); extern void insert_block PARAMS ((tree)); *************** extern void set_decl_abstract_flags PARA *** 2835,2843 **** extern void output_inline_function PARAMS ((tree)); extern void set_decl_origin_self PARAMS ((tree)); - /* In front end. */ - extern void set_yydebug PARAMS ((int)); - /* In stor-layout.c */ extern void fixup_signed_type PARAMS ((tree)); extern void internal_reference_types PARAMS ((void)); --- 3051,3056 ---- *************** extern int div_and_round_double PARAMS *** 2862,2868 **** /* In stmt.c */ extern void emit_nop PARAMS ((void)); extern void expand_computed_goto PARAMS ((tree)); - extern struct rtx_def *label_rtx PARAMS ((tree)); extern bool parse_output_constraint PARAMS ((const char **, int, int, int, bool *, bool *, bool *)); --- 3075,3080 ---- *************** extern void expand_elseif PARAMS ((tree *** 2878,2883 **** --- 3090,3096 ---- extern void save_stack_pointer PARAMS ((void)); extern void expand_decl PARAMS ((tree)); extern int expand_decl_cleanup PARAMS ((tree, tree)); + extern int expand_decl_cleanup_eh PARAMS ((tree, tree, int)); extern void expand_anon_union_decl PARAMS ((tree, tree, tree)); extern void move_cleanups_up PARAMS ((void)); extern void expand_start_case_dummy PARAMS ((void)); *************** extern tree case_index_expr_type PARAMS *** 2886,2895 **** extern HOST_WIDE_INT all_cases_count PARAMS ((tree, int *)); extern void check_for_full_enumeration_handling PARAMS ((tree)); extern void declare_nonlocal_label PARAMS ((tree)); - #ifdef BUFSIZ - extern void lang_print_xnode PARAMS ((FILE *, tree, int)); - #endif - /* If KIND=='I', return a suitable global initializer (constructor) name. If KIND=='D', return a suitable global clean-up (destructor) name. */ --- 3099,3104 ---- *************** extern tree get_file_function_name PARAM *** 2897,2907 **** /* Interface of the DWARF2 unwind info support. */ - /* Decide whether we want to emit frame unwind information for the current - translation unit. */ - - extern int dwarf2out_do_frame PARAMS ((void)); - /* Generate a new label for the CFI info to refer to. */ extern char *dwarf2out_cfi_label PARAMS ((void)); --- 3106,3111 ---- *************** extern void dwarf2out_return_save PARAMS *** 2931,2945 **** extern void dwarf2out_return_reg PARAMS ((const char *, unsigned)); ! /* Output a marker (i.e. a label) for the beginning of a function, before ! the prologue. */ ! extern void dwarf2out_begin_prologue PARAMS ((void)); ! /* Output a marker (i.e. a label) for the absolute end of the generated ! code for a function definition. */ - extern void dwarf2out_end_epilogue PARAMS ((void)); /* Redefine abort to report an internal error w/o coredump, and reporting the location of the error in the source file. This logic --- 3135,3175 ---- extern void dwarf2out_return_reg PARAMS ((const char *, unsigned)); ! /* The type of a function that walks over tree structure. */ ! typedef tree (*walk_tree_fn) PARAMS ((tree *, int *, void *)); ! /* In tree-dump.c */ ! ! /* Different tree dump places. When you add new tree dump places, ! extend the DUMP_FILES array in tree-dump.c */ ! enum tree_dump_index ! { ! TDI_all, /* dump the whole translation unit */ ! TDI_class, /* dump class hierarchy */ ! TDI_original, /* dump each function before optimizing it */ ! TDI_optimized, /* dump each function after optimizing it */ ! TDI_inlined, /* dump each function after inlining ! within it. */ ! TDI_end ! }; ! ! /* Bit masks to control tree dumping. Not all values are applicable to ! all tree dumps. Add new ones at the end. When you define new ! values, extend the DUMP_OPTIONS array in tree-dump.c */ ! #define TDF_ADDRESS (1 << 0) /* dump node addresses */ ! #define TDF_SLIM (1 << 1) /* don't go wild following links */ ! ! typedef struct dump_info *dump_info_p; ! ! extern int dump_flag PARAMS ((dump_info_p, int, tree)); ! extern int dump_enabled_p PARAMS ((enum tree_dump_index)); ! extern FILE *dump_begin PARAMS ((enum tree_dump_index, int *)); ! extern void dump_end PARAMS ((enum tree_dump_index, FILE *)); ! extern void dump_node PARAMS ((tree, int, FILE *)); ! extern int dump_switch_p PARAMS ((const char *)); ! extern const char *dump_flag_name PARAMS ((enum tree_dump_index)); /* Redefine abort to report an internal error w/o coredump, and reporting the location of the error in the source file. This logic diff -Nrc3pad gcc-3.0.4/gcc/tsystem.h gcc-3.1/gcc/tsystem.h *** gcc-3.0.4/gcc/tsystem.h Tue Jan 2 15:51:11 2001 --- gcc-3.1/gcc/tsystem.h Tue Oct 9 14:03:13 2001 *************** *** 2,26 **** based on target macros. Copyright (C) 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ ! #ifndef __GCC_TSYSTEM_H__ ! #define __GCC_TSYSTEM_H__ /* System headers (e.g. stdio.h, stdlib.h, unistd.h) sometimes indirectly include getopt.h. Our -I flags will cause gcc's gnu --- 2,26 ---- based on target macros. Copyright (C) 2000, 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ ! #ifndef GCC_TSYSTEM_H ! #define GCC_TSYSTEM_H /* System headers (e.g. stdio.h, stdlib.h, unistd.h) sometimes indirectly include getopt.h. Our -I flags will cause gcc's gnu *************** Boston, MA 02111-1307, USA. */ *** 33,39 **** #define HAVE_DECL_GETOPT 1 #endif ! /* GCC supplies this header. */ #include #ifdef inhibit_libc --- 33,39 ---- #define HAVE_DECL_GETOPT 1 #endif ! /* GCC supplies this header. */ #include #ifdef inhibit_libc *************** extern int atexit (void (*)(void)); *** 56,89 **** /* ??? This is not a good solution, since prototypes may be required in some cases for correct code. */ ! /* GCC supplies this header. */ #include ! /* All systems have this header. */ #include ! /* All systems have this header. */ #include ! /* All systems have this header. */ #include #ifndef errno extern int errno; #endif ! #if defined(POSIX) || defined(USG) #include #endif ! /* GCC (fixproto) guarantees these system headers exist. */ #include #include ! /* GCC supplies this header. */ #include ! #if defined(POSIX) || defined(USG) #include #endif --- 56,89 ---- /* ??? This is not a good solution, since prototypes may be required in some cases for correct code. */ ! /* GCC supplies this header. */ #include ! /* All systems have this header. */ #include ! /* All systems have this header. */ #include ! /* All systems have this header. */ #include #ifndef errno extern int errno; #endif ! #ifdef POSIX #include #endif ! /* GCC (fixproto) guarantees these system headers exist. */ #include #include ! /* GCC supplies this header. */ #include ! #ifdef POSIX #include #endif *************** extern int errno; *** 94,97 **** #define NULL 0 #endif ! #endif /* __GCC_TSYSTEM_H__ */ --- 94,97 ---- #define NULL 0 #endif ! #endif /* ! GCC_TSYSTEM_H */ diff -Nrc3pad gcc-3.0.4/gcc/unprotoize.c gcc-3.1/gcc/unprotoize.c *** gcc-3.0.4/gcc/unprotoize.c Wed Dec 16 20:58:41 1998 --- gcc-3.1/gcc/unprotoize.c Thu Jan 1 00:00:00 1970 *************** *** 1,2 **** - #define UNPROTOIZE - #include "protoize.c" --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/unroll.c gcc-3.1/gcc/unroll.c *** gcc-3.0.4/gcc/unroll.c Sat Dec 1 13:28:57 2001 --- gcc-3.1/gcc/unroll.c Mon Mar 25 02:46:43 2002 *************** *** 1,24 **** /* Try to unroll loops, and split induction variables. ! Copyright (C) 1992, 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by James E. Wilson, Cygnus Support/UC Berkeley. ! 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. */ /* Try to unroll a loop, and split induction variables. --- 1,24 ---- /* Try to unroll loops, and split induction variables. ! Copyright (C) 1992, 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by James E. Wilson, Cygnus Support/UC Berkeley. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* Try to unroll a loop, and split induction variables. *************** Boston, MA 02111-1307, USA. */ *** 131,136 **** --- 131,153 ---- moving the insn back into the loop, or perhaps replicate the insn before the loop, one copy for each time the loop is unrolled. */ + #include "config.h" + #include "system.h" + #include "rtl.h" + #include "tm_p.h" + #include "insn-config.h" + #include "integrate.h" + #include "regs.h" + #include "recog.h" + #include "flags.h" + #include "function.h" + #include "expr.h" + #include "loop.h" + #include "toplev.h" + #include "hard-reg-set.h" + #include "basic-block.h" + #include "predict.h" + /* The prime factors looked for when trying to unroll a loop by some number which is modulo the total number of iterations. Just checking for these 4 prime factors will find at least one factor for 75% of *************** Boston, MA 02111-1307, USA. */ *** 140,146 **** #define NUM_FACTORS 4 ! struct _factor { int factor, count; } factors[NUM_FACTORS] = { {2, 0}, {3, 0}, {5, 0}, {7, 0}}; /* Describes the different types of loop unrolling performed. */ --- 157,163 ---- #define NUM_FACTORS 4 ! static struct _factor { const int factor; int count; } factors[NUM_FACTORS] = { {2, 0}, {3, 0}, {5, 0}, {7, 0}}; /* Describes the different types of loop unrolling performed. */ *************** enum unroll_types *** 152,173 **** UNROLL_NAIVE }; - #include "config.h" - #include "system.h" - #include "rtl.h" - #include "tm_p.h" - #include "insn-config.h" - #include "integrate.h" - #include "regs.h" - #include "recog.h" - #include "flags.h" - #include "function.h" - #include "expr.h" - #include "loop.h" - #include "toplev.h" - #include "hard-reg-set.h" - #include "basic-block.h" - /* This controls which loops are unrolled, and by how much we unroll them. */ --- 169,174 ---- *************** static int *splittable_regs_updates; *** 201,207 **** static void init_reg_map PARAMS ((struct inline_remap *, int)); static rtx calculate_giv_inc PARAMS ((rtx, rtx, unsigned int)); static rtx initial_reg_note_copy PARAMS ((rtx, struct inline_remap *)); ! static void final_reg_note_copy PARAMS ((rtx, struct inline_remap *)); static void copy_loop_body PARAMS ((struct loop *, rtx, rtx, struct inline_remap *, rtx, int, enum unroll_types, rtx, rtx, rtx, rtx)); --- 202,208 ---- static void init_reg_map PARAMS ((struct inline_remap *, int)); static rtx calculate_giv_inc PARAMS ((rtx, rtx, unsigned int)); static rtx initial_reg_note_copy PARAMS ((rtx, struct inline_remap *)); ! static void final_reg_note_copy PARAMS ((rtx *, struct inline_remap *)); static void copy_loop_body PARAMS ((struct loop *, rtx, rtx, struct inline_remap *, rtx, int, enum unroll_types, rtx, rtx, rtx, rtx)); *************** unroll_loop (loop, insn_count, strength_ *** 354,360 **** rtx ujump = ujump_to_loop_cont (loop->start, loop->cont); if (ujump) ! delete_insn (ujump); /* If number of iterations is exactly 1, then eliminate the compare and branch at the end of the loop since they will never be taken. --- 355,361 ---- rtx ujump = ujump_to_loop_cont (loop->start, loop->cont); if (ujump) ! delete_related_insns (ujump); /* If number of iterations is exactly 1, then eliminate the compare and branch at the end of the loop since they will never be taken. *************** unroll_loop (loop, insn_count, strength_ *** 366,396 **** if (GET_CODE (last_loop_insn) == BARRIER) { /* Delete the jump insn. This will delete the barrier also. */ ! delete_insn (PREV_INSN (last_loop_insn)); } else if (GET_CODE (last_loop_insn) == JUMP_INSN) { #ifdef HAVE_cc0 rtx prev = PREV_INSN (last_loop_insn); #endif ! delete_insn (last_loop_insn); #ifdef HAVE_cc0 /* The immediately preceding insn may be a compare which must be deleted. */ ! if (sets_cc0_p (prev)) ! delete_insn (prev); #endif } /* Remove the loop notes since this is no longer a loop. */ if (loop->vtop) ! delete_insn (loop->vtop); if (loop->cont) ! delete_insn (loop->cont); if (loop_start) ! delete_insn (loop_start); if (loop_end) ! delete_insn (loop_end); return; } --- 367,397 ---- if (GET_CODE (last_loop_insn) == BARRIER) { /* Delete the jump insn. This will delete the barrier also. */ ! delete_related_insns (PREV_INSN (last_loop_insn)); } else if (GET_CODE (last_loop_insn) == JUMP_INSN) { #ifdef HAVE_cc0 rtx prev = PREV_INSN (last_loop_insn); #endif ! delete_related_insns (last_loop_insn); #ifdef HAVE_cc0 /* The immediately preceding insn may be a compare which must be deleted. */ ! if (only_sets_cc0_p (prev)) ! delete_related_insns (prev); #endif } /* Remove the loop notes since this is no longer a loop. */ if (loop->vtop) ! delete_related_insns (loop->vtop); if (loop->cont) ! delete_related_insns (loop->cont); if (loop_start) ! delete_related_insns (loop_start); if (loop_end) ! delete_related_insns (loop_end); return; } *************** unroll_loop (loop, insn_count, strength_ *** 726,733 **** if (max_labelno > 0) { ! map->label_map = (rtx *) xmalloc (max_labelno * sizeof (rtx)); ! local_label = (char *) xcalloc (max_labelno, sizeof (char)); } --- 727,733 ---- if (max_labelno > 0) { ! map->label_map = (rtx *) xcalloc (max_labelno, sizeof (rtx)); local_label = (char *) xcalloc (max_labelno, sizeof (char)); } *************** unroll_loop (loop, insn_count, strength_ *** 897,903 **** &initial_value, &final_value, &increment, &mode)) { ! register rtx diff; rtx *labels; int abs_inc, neg_inc; enum rtx_code cc = loop_info->comparison_code; --- 897,903 ---- &initial_value, &final_value, &increment, &mode)) { ! rtx diff; rtx *labels; int abs_inc, neg_inc; enum rtx_code cc = loop_info->comparison_code; *************** unroll_loop (loop, insn_count, strength_ *** 929,934 **** --- 929,947 ---- start_sequence (); + /* Final value may have form of (PLUS val1 const1_rtx). We need + to convert it into general operand, so compute the real value. */ + + if (GET_CODE (final_value) == PLUS) + { + final_value = expand_simple_binop (mode, PLUS, + copy_rtx (XEXP (final_value, 0)), + copy_rtx (XEXP (final_value, 1)), + NULL_RTX, 0, OPTAB_LIB_WIDEN); + } + if (!nonmemory_operand (final_value, VOIDmode)) + final_value = force_reg (mode, copy_rtx (final_value)); + /* Calculate the difference between the final and initial values. Final value may be a (plus (reg x) (const_int 1)) rtx. Let the following cse pass simplify this if initial value is *************** unroll_loop (loop, insn_count, strength_ *** 948,965 **** so we can pretend that the overflow value is 0/~0. */ if (cc == NE || less_p != neg_inc) ! diff = expand_binop (mode, sub_optab, copy_rtx (final_value), ! copy_rtx (initial_value), NULL_RTX, 0, ! OPTAB_LIB_WIDEN); else ! diff = expand_unop (mode, neg_inc ? one_cmpl_optab : neg_optab, ! copy_rtx (initial_value), NULL_RTX, 0); /* Now calculate (diff % (unroll * abs (increment))) by using an and instruction. */ ! diff = expand_binop (GET_MODE (diff), and_optab, diff, ! GEN_INT (unroll_number * abs_inc - 1), ! NULL_RTX, 0, OPTAB_LIB_WIDEN); /* Now emit a sequence of branches to jump to the proper precond loop entry point. */ --- 961,978 ---- so we can pretend that the overflow value is 0/~0. */ if (cc == NE || less_p != neg_inc) ! diff = expand_simple_binop (mode, MINUS, final_value, ! copy_rtx (initial_value), NULL_RTX, 0, ! OPTAB_LIB_WIDEN); else ! diff = expand_simple_unop (mode, neg_inc ? NOT : NEG, ! copy_rtx (initial_value), NULL_RTX, 0); /* Now calculate (diff % (unroll * abs (increment))) by using an and instruction. */ ! diff = expand_simple_binop (GET_MODE (diff), AND, diff, ! GEN_INT (unroll_number * abs_inc - 1), ! NULL_RTX, 0, OPTAB_LIB_WIDEN); /* Now emit a sequence of branches to jump to the proper precond loop entry point. */ *************** unroll_loop (loop, insn_count, strength_ *** 977,988 **** if (cc != NE) { rtx incremented_initval; ! incremented_initval = expand_binop (mode, add_optab, ! initial_value, increment, ! NULL_RTX,0, OPTAB_LIB_WIDEN); emit_cmp_and_jump_insns (incremented_initval, final_value, less_p ? GE : LE, NULL_RTX, ! mode, unsigned_p, 0, labels[1]); JUMP_LABEL (get_last_insn ()) = labels[1]; LABEL_NUSES (labels[1])++; } --- 990,1005 ---- if (cc != NE) { rtx incremented_initval; ! incremented_initval = expand_simple_binop (mode, PLUS, ! initial_value, ! increment, ! NULL_RTX, 0, ! OPTAB_LIB_WIDEN); emit_cmp_and_jump_insns (incremented_initval, final_value, less_p ? GE : LE, NULL_RTX, ! mode, unsigned_p, labels[1]); ! predict_insn_def (get_last_insn (), PRED_LOOP_CONDITION, ! TAKEN); JUMP_LABEL (get_last_insn ()) = labels[1]; LABEL_NUSES (labels[1])++; } *************** unroll_loop (loop, insn_count, strength_ *** 1024,1033 **** } emit_cmp_and_jump_insns (diff, GEN_INT (abs_inc * cmp_const), ! cmp_code, NULL_RTX, mode, 0, 0, ! labels[i]); JUMP_LABEL (get_last_insn ()) = labels[i]; LABEL_NUSES (labels[i])++; } /* If the increment is greater than one, then we need another branch, --- 1041,1051 ---- } emit_cmp_and_jump_insns (diff, GEN_INT (abs_inc * cmp_const), ! cmp_code, NULL_RTX, mode, 0, labels[i]); JUMP_LABEL (get_last_insn ()) = labels[i]; LABEL_NUSES (labels[i])++; + predict_insn (get_last_insn (), PRED_LOOP_PRECONDITIONING, + REG_BR_PROB_BASE / (unroll_number - i)); } /* If the increment is greater than one, then we need another branch, *************** unroll_loop (loop, insn_count, strength_ *** 1056,1062 **** } emit_cmp_and_jump_insns (diff, GEN_INT (cmp_const), cmp_code, ! NULL_RTX, mode, 0, 0, labels[0]); JUMP_LABEL (get_last_insn ()) = labels[0]; LABEL_NUSES (labels[0])++; } --- 1074,1080 ---- } emit_cmp_and_jump_insns (diff, GEN_INT (cmp_const), cmp_code, ! NULL_RTX, mode, 0, labels[0]); JUMP_LABEL (get_last_insn ()) = labels[0]; LABEL_NUSES (labels[0])++; } *************** unroll_loop (loop, insn_count, strength_ *** 1308,1323 **** && ! (GET_CODE (insn) == CODE_LABEL && LABEL_NAME (insn)) && ! (GET_CODE (insn) == NOTE && NOTE_LINE_NUMBER (insn) == NOTE_INSN_DELETED_LABEL)) ! insn = delete_insn (insn); else insn = NEXT_INSN (insn); } /* Can now delete the 'safety' label emitted to protect us from runaway ! delete_insn calls. */ if (INSN_DELETED_P (safety_label)) abort (); ! delete_insn (safety_label); /* If exit_label exists, emit it after the loop. Doing the emit here forces it to have a higher INSN_UID than any insn in the unrolled loop. --- 1326,1341 ---- && ! (GET_CODE (insn) == CODE_LABEL && LABEL_NAME (insn)) && ! (GET_CODE (insn) == NOTE && NOTE_LINE_NUMBER (insn) == NOTE_INSN_DELETED_LABEL)) ! insn = delete_related_insns (insn); else insn = NEXT_INSN (insn); } /* Can now delete the 'safety' label emitted to protect us from runaway ! delete_related_insns calls. */ if (INSN_DELETED_P (safety_label)) abort (); ! delete_related_insns (safety_label); /* If exit_label exists, emit it after the loop. Doing the emit here forces it to have a higher INSN_UID than any insn in the unrolled loop. *************** unroll_loop (loop, insn_count, strength_ *** 1332,1344 **** { /* Remove the loop notes since this is no longer a loop. */ if (loop->vtop) ! delete_insn (loop->vtop); if (loop->cont) ! delete_insn (loop->cont); if (loop_start) ! delete_insn (loop_start); if (loop_end) ! delete_insn (loop_end); } if (map->const_equiv_varray) --- 1350,1362 ---- { /* Remove the loop notes since this is no longer a loop. */ if (loop->vtop) ! delete_related_insns (loop->vtop); if (loop->cont) ! delete_related_insns (loop->cont); if (loop_start) ! delete_related_insns (loop_start); if (loop_end) ! delete_related_insns (loop_end); } if (map->const_equiv_varray) *************** precondition_loop_p (loop, initial_value *** 1386,1394 **** if (loop_info->n_iterations > 0) { ! *initial_value = const0_rtx; ! *increment = const1_rtx; ! *final_value = GEN_INT (loop_info->n_iterations); *mode = word_mode; if (loop_dump_stream) --- 1404,1421 ---- if (loop_info->n_iterations > 0) { ! if (INTVAL (loop_info->increment) > 0) ! { ! *initial_value = const0_rtx; ! *increment = const1_rtx; ! *final_value = GEN_INT (loop_info->n_iterations); ! } ! else ! { ! *initial_value = GEN_INT (loop_info->n_iterations); ! *increment = constm1_rtx; ! *final_value = const0_rtx; ! } *mode = word_mode; if (loop_dump_stream) *************** calculate_giv_inc (pattern, src_insn, re *** 1573,1585 **** /* SR sometimes computes the new giv value in a temp, then copies it to the new_reg. */ src_insn = PREV_INSN (src_insn); ! pattern = PATTERN (src_insn); if (GET_CODE (SET_SRC (pattern)) != PLUS) abort (); /* The last insn emitted is not needed, so delete it to avoid confusing the second cse pass. This insn sets the giv unnecessarily. */ ! delete_insn (get_last_insn ()); } /* Verify that we have a constant as the second operand of the plus. */ --- 1600,1612 ---- /* SR sometimes computes the new giv value in a temp, then copies it to the new_reg. */ src_insn = PREV_INSN (src_insn); ! pattern = single_set (src_insn); if (GET_CODE (SET_SRC (pattern)) != PLUS) abort (); /* The last insn emitted is not needed, so delete it to avoid confusing the second cse pass. This insn sets the giv unnecessarily. */ ! delete_related_insns (get_last_insn ()); } /* Verify that we have a constant as the second operand of the plus. */ *************** calculate_giv_inc (pattern, src_insn, re *** 1588,1595 **** { /* SR sometimes puts the constant in a register, especially if it is too big to be an add immed operand. */ ! src_insn = PREV_INSN (src_insn); ! increment = SET_SRC (PATTERN (src_insn)); /* SR may have used LO_SUM to compute the constant if it is too large for a load immed operand. In this case, the constant is in operand --- 1615,1621 ---- { /* SR sometimes puts the constant in a register, especially if it is too big to be an add immed operand. */ ! increment = find_last_value (increment, &src_insn, NULL_RTX, 0); /* SR may have used LO_SUM to compute the constant if it is too large for a load immed operand. In this case, the constant is in operand *************** calculate_giv_inc (pattern, src_insn, re *** 1615,1624 **** rtx second_part = XEXP (increment, 1); enum rtx_code code = GET_CODE (increment); ! src_insn = PREV_INSN (src_insn); ! increment = SET_SRC (PATTERN (src_insn)); /* Don't need the last insn anymore. */ ! delete_insn (get_last_insn ()); if (GET_CODE (second_part) != CONST_INT || GET_CODE (increment) != CONST_INT) --- 1641,1650 ---- rtx second_part = XEXP (increment, 1); enum rtx_code code = GET_CODE (increment); ! increment = find_last_value (XEXP (increment, 0), ! &src_insn, NULL_RTX, 0); /* Don't need the last insn anymore. */ ! delete_related_insns (get_last_insn ()); if (GET_CODE (second_part) != CONST_INT || GET_CODE (increment) != CONST_INT) *************** calculate_giv_inc (pattern, src_insn, re *** 1637,1643 **** /* The insn loading the constant into a register is no longer needed, so delete it. */ ! delete_insn (get_last_insn ()); } if (increment_total) --- 1663,1669 ---- /* The insn loading the constant into a register is no longer needed, so delete it. */ ! delete_related_insns (get_last_insn ()); } if (increment_total) *************** calculate_giv_inc (pattern, src_insn, re *** 1659,1667 **** tries++; src_insn = PREV_INSN (src_insn); ! pattern = PATTERN (src_insn); ! delete_insn (get_last_insn ()); goto retry; } --- 1685,1693 ---- tries++; src_insn = PREV_INSN (src_insn); ! pattern = single_set (src_insn); ! delete_related_insns (get_last_insn ()); goto retry; } *************** initial_reg_note_copy (notes, map) *** 1687,1693 **** return 0; copy = rtx_alloc (GET_CODE (notes)); ! PUT_MODE (copy, GET_MODE (notes)); if (GET_CODE (notes) == EXPR_LIST) XEXP (copy, 0) = copy_rtx_and_substitute (XEXP (notes, 0), map, 0); --- 1713,1719 ---- return 0; copy = rtx_alloc (GET_CODE (notes)); ! PUT_REG_NOTE_KIND (copy, REG_NOTE_KIND (notes)); if (GET_CODE (notes) == EXPR_LIST) XEXP (copy, 0) = copy_rtx_and_substitute (XEXP (notes, 0), map, 0); *************** initial_reg_note_copy (notes, map) *** 1705,1719 **** /* Fixup insn references in copied REG_NOTES. */ static void ! final_reg_note_copy (notes, map) ! rtx notes; struct inline_remap *map; { ! rtx note; ! for (note = notes; note; note = XEXP (note, 1)) ! if (GET_CODE (note) == INSN_LIST) ! XEXP (note, 0) = map->insn_map[INSN_UID (XEXP (note, 0))]; } /* Copy each instruction in the loop, substituting from map as appropriate. --- 1731,1773 ---- /* Fixup insn references in copied REG_NOTES. */ static void ! final_reg_note_copy (notesp, map) ! rtx *notesp; struct inline_remap *map; { ! while (*notesp) ! { ! rtx note = *notesp; ! ! if (GET_CODE (note) == INSN_LIST) ! { ! /* Sometimes, we have a REG_WAS_0 note that points to a ! deleted instruction. In that case, we can just delete the ! note. */ ! if (REG_NOTE_KIND (note) == REG_WAS_0) ! { ! *notesp = XEXP (note, 1); ! continue; ! } ! else ! { ! rtx insn = map->insn_map[INSN_UID (XEXP (note, 0))]; ! /* If we failed to remap the note, something is awry. ! Allow REG_LABEL as it may reference label outside ! the unrolled loop. */ ! if (!insn) ! { ! if (REG_NOTE_KIND (note) != REG_LABEL) ! abort (); ! } ! else ! XEXP (note, 0) = insn; ! } ! } ! ! notesp = &XEXP (note, 1); ! } } /* Copy each instruction in the loop, substituting from map as appropriate. *************** copy_loop_body (loop, copy_start, copy_e *** 2045,2058 **** copy = emit_jump_insn (pattern); REG_NOTES (copy) = initial_reg_note_copy (REG_NOTES (insn), map); ! if (JUMP_LABEL (insn) == start_label && insn == copy_end ! && ! last_iteration) { - /* Update JUMP_LABEL make invert_jump work correctly. */ JUMP_LABEL (copy) = get_label_from_map (map, CODE_LABEL_NUMBER (JUMP_LABEL (insn))); LABEL_NUSES (JUMP_LABEL (copy))++; /* This is a branch to the beginning of the loop; this is the last insn being copied; and this is not the last iteration. --- 2099,2114 ---- copy = emit_jump_insn (pattern); REG_NOTES (copy) = initial_reg_note_copy (REG_NOTES (insn), map); ! if (JUMP_LABEL (insn)) { JUMP_LABEL (copy) = get_label_from_map (map, CODE_LABEL_NUMBER (JUMP_LABEL (insn))); LABEL_NUSES (JUMP_LABEL (copy))++; + } + if (JUMP_LABEL (insn) == start_label && insn == copy_end + && ! last_iteration) + { /* This is a branch to the beginning of the loop; this is the last insn being copied; and this is not the last iteration. *************** copy_loop_body (loop, copy_start, copy_e *** 2069,2074 **** --- 2125,2132 ---- jump_insn after COPY, and redirect the jump around that. */ jmp = emit_jump_insn_after (gen_jump (exit_label), copy); + JUMP_LABEL (jmp) = exit_label; + LABEL_NUSES (exit_label)++; jmp = emit_barrier_after (jmp); emit_label_after (lab, jmp); LABEL_NUSES (lab) = 0; *************** copy_loop_body (loop, copy_start, copy_e *** 2141,2161 **** { #ifdef HAVE_cc0 /* If the previous insn set cc0 for us, delete it. */ ! if (sets_cc0_p (PREV_INSN (copy))) ! delete_insn (PREV_INSN (copy)); #endif /* If this is now a no-op, delete it. */ if (map->last_pc_value == pc_rtx) { - /* Don't let delete_insn delete the label referenced here, - because we might possibly need it later for some other - instruction in the loop. */ - if (JUMP_LABEL (copy)) - LABEL_NUSES (JUMP_LABEL (copy))++; delete_insn (copy); - if (JUMP_LABEL (copy)) - LABEL_NUSES (JUMP_LABEL (copy))--; copy = 0; } else --- 2199,2212 ---- { #ifdef HAVE_cc0 /* If the previous insn set cc0 for us, delete it. */ ! if (only_sets_cc0_p (PREV_INSN (copy))) ! delete_related_insns (PREV_INSN (copy)); #endif /* If this is now a no-op, delete it. */ if (map->last_pc_value == pc_rtx) { delete_insn (copy); copy = 0; } else *************** copy_loop_body (loop, copy_start, copy_e *** 2170,2175 **** --- 2221,2227 ---- pattern = copy_rtx_and_substitute (PATTERN (insn), map, 0); copy = emit_call_insn (pattern); REG_NOTES (copy) = initial_reg_note_copy (REG_NOTES (insn), map); + SIBLING_CALL_P (copy) = SIBLING_CALL_P (insn); /* Because the USAGE information potentially contains objects other than hard registers, we need to copy it. */ *************** copy_loop_body (loop, copy_start, copy_e *** 2240,2246 **** if ((GET_CODE (insn) == INSN || GET_CODE (insn) == JUMP_INSN || GET_CODE (insn) == CALL_INSN) && map->insn_map[INSN_UID (insn)]) ! final_reg_note_copy (REG_NOTES (map->insn_map[INSN_UID (insn)]), map); } while (insn != copy_end); --- 2292,2298 ---- if ((GET_CODE (insn) == INSN || GET_CODE (insn) == JUMP_INSN || GET_CODE (insn) == CALL_INSN) && map->insn_map[INSN_UID (insn)]) ! final_reg_note_copy (®_NOTES (map->insn_map[INSN_UID (insn)]), map); } while (insn != copy_end); *************** emit_unrolled_add (dest_reg, src_reg, in *** 2291,2298 **** { rtx result; ! result = expand_binop (GET_MODE (dest_reg), add_optab, src_reg, increment, ! dest_reg, 0, OPTAB_LIB_WIDEN); if (dest_reg != result) emit_move_insn (dest_reg, result); --- 2343,2350 ---- { rtx result; ! result = expand_simple_binop (GET_MODE (dest_reg), PLUS, src_reg, increment, ! dest_reg, 0, OPTAB_LIB_WIDEN); if (dest_reg != result) emit_move_insn (dest_reg, result); *************** find_splittable_givs (loop, bl, unroll_t *** 2948,2954 **** /* We can't use bl->initial_value to compute the initial value, because the loop may have been preconditioned. We must calculate it from NEW_REG. */ ! delete_insn (PREV_INSN (loop->start)); start_sequence (); ret = force_operand (v->new_reg, tem); --- 3000,3006 ---- /* We can't use bl->initial_value to compute the initial value, because the loop may have been preconditioned. We must calculate it from NEW_REG. */ ! delete_related_insns (PREV_INSN (loop->start)); start_sequence (); ret = force_operand (v->new_reg, tem); *************** final_giv_value (loop, v) *** 3307,3315 **** if (biv->insn == insn) { start_sequence (); ! tem = expand_binop (GET_MODE (tem), sub_optab, tem, ! biv->add_val, NULL_RTX, 0, ! OPTAB_LIB_WIDEN); seq = gen_sequence (); end_sequence (); loop_insn_sink (loop, seq); --- 3359,3367 ---- if (biv->insn == insn) { start_sequence (); ! tem = expand_simple_binop (GET_MODE (tem), MINUS, tem, ! biv->add_val, NULL_RTX, 0, ! OPTAB_LIB_WIDEN); seq = gen_sequence (); end_sequence (); loop_insn_sink (loop, seq); *************** final_giv_value (loop, v) *** 3346,3352 **** return 0; } ! /* Look back before LOOP->START for then insn that sets REG and return the equivalent constant if there is a REG_EQUAL note otherwise just the SET_SRC of REG. */ --- 3398,3404 ---- return 0; } ! /* Look back before LOOP->START for the insn that sets REG and return the equivalent constant if there is a REG_EQUAL note otherwise just the SET_SRC of REG. */ *************** loop_iterations (loop) *** 3472,3478 **** rtx comparison, comparison_value; rtx iteration_var, initial_value, increment, final_value; enum rtx_code comparison_code; ! HOST_WIDE_INT abs_inc; unsigned HOST_WIDE_INT abs_diff; int off_by_one; int increment_dir; --- 3524,3531 ---- rtx comparison, comparison_value; rtx iteration_var, initial_value, increment, final_value; enum rtx_code comparison_code; ! HOST_WIDE_INT inc; ! unsigned HOST_WIDE_INT abs_inc; unsigned HOST_WIDE_INT abs_diff; int off_by_one; int increment_dir; *************** loop_iterations (loop) *** 3682,3688 **** increment = fold_rtx_mult_add (v->mult_val, extend_value_for_giv (v, increment), const0_rtx, v->mode); ! /* The caller assumes that one full increment has occured at the first loop test. But that's not true when the biv is incremented after the giv is set (which is the usual case), e.g.: i = 6; do {;} while (i++ < 9) . --- 3735,3741 ---- increment = fold_rtx_mult_add (v->mult_val, extend_value_for_giv (v, increment), const0_rtx, v->mode); ! /* The caller assumes that one full increment has occurred at the first loop test. But that's not true when the biv is incremented after the giv is set (which is the usual case), e.g.: i = 6; do {;} while (i++ < 9) . *************** loop_iterations (loop) *** 3691,3699 **** for (biv_inc = bl->biv; biv_inc; biv_inc = biv_inc->next_iv) { if (loop_insn_first_p (v->insn, biv_inc->insn)) ! offset -= INTVAL (biv_inc->add_val); } - offset *= INTVAL (v->mult_val); } if (loop_dump_stream) fprintf (loop_dump_stream, --- 3744,3762 ---- for (biv_inc = bl->biv; biv_inc; biv_inc = biv_inc->next_iv) { if (loop_insn_first_p (v->insn, biv_inc->insn)) ! { ! if (REG_P (biv_inc->add_val)) ! { ! if (loop_dump_stream) ! fprintf (loop_dump_stream, ! "Loop iterations: Basic induction var add_val is REG %d.\n", ! REGNO (biv_inc->add_val)); ! return 0; ! } ! ! offset -= INTVAL (biv_inc->add_val); ! } } } if (loop_dump_stream) fprintf (loop_dump_stream, *************** loop_iterations (loop) *** 4010,4026 **** so correct for that. Note that abs_diff and n_iterations are unsigned, because they can be as large as 2^n - 1. */ ! abs_inc = INTVAL (increment); ! if (abs_inc > 0) ! abs_diff = INTVAL (final_value) - INTVAL (initial_value); ! else if (abs_inc < 0) { abs_diff = INTVAL (initial_value) - INTVAL (final_value); ! abs_inc = -abs_inc; } else abort (); /* For NE tests, make sure that the iteration variable won't miss the final value. If abs_diff mod abs_incr is not zero, then the iteration variable will overflow before the loop exits, and we --- 4073,4100 ---- so correct for that. Note that abs_diff and n_iterations are unsigned, because they can be as large as 2^n - 1. */ ! inc = INTVAL (increment); ! if (inc > 0) ! { ! abs_diff = INTVAL (final_value) - INTVAL (initial_value); ! abs_inc = inc; ! } ! else if (inc < 0) { abs_diff = INTVAL (initial_value) - INTVAL (final_value); ! abs_inc = -inc; } else abort (); + /* Given that iteration_var is going to iterate over its own mode, + not HOST_WIDE_INT, disregard higher bits that might have come + into the picture due to sign extension of initial and final + values. */ + abs_diff &= ((unsigned HOST_WIDE_INT) 1 + << (GET_MODE_BITSIZE (GET_MODE (iteration_var)) - 1) + << 1) - 1; + /* For NE tests, make sure that the iteration variable won't miss the final value. If abs_diff mod abs_incr is not zero, then the iteration variable will overflow before the loop exits, and we *************** remap_split_bivs (loop, x) *** 4045,4053 **** rtx x; { struct loop_ivs *ivs = LOOP_IVS (loop); ! register enum rtx_code code; ! register int i; ! register const char *fmt; if (x == 0) return x; --- 4119,4127 ---- rtx x; { struct loop_ivs *ivs = LOOP_IVS (loop); ! enum rtx_code code; ! int i; ! const char *fmt; if (x == 0) return x; *************** remap_split_bivs (loop, x) *** 4086,4092 **** XEXP (x, i) = remap_split_bivs (loop, XEXP (x, i)); else if (fmt[i] == 'E') { ! register int j; for (j = 0; j < XVECLEN (x, i); j++) XVECEXP (x, i, j) = remap_split_bivs (loop, XVECEXP (x, i, j)); } --- 4160,4166 ---- XEXP (x, i) = remap_split_bivs (loop, XEXP (x, i)); else if (fmt[i] == 'E') { ! int j; for (j = 0; j < XVECLEN (x, i); j++) XVECEXP (x, i, j) = remap_split_bivs (loop, XVECEXP (x, i, j)); } diff -Nrc3pad gcc-3.0.4/gcc/unwind-dw2-fde-glibc.c gcc-3.1/gcc/unwind-dw2-fde-glibc.c *** gcc-3.0.4/gcc/unwind-dw2-fde-glibc.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/unwind-dw2-fde-glibc.c Mon Feb 4 22:21:12 2002 *************** *** 0 **** --- 1,299 ---- + /* Copyright (C) 2001, 2002 Free Software Foundation, Inc. + Contributed by Jakub Jelinek . + + 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. */ + + /* As a special exception, if you link this library with other files, + some of which are compiled with GCC, to produce an executable, + this library does not by itself cause the resulting executable + to be covered by the GNU General Public License. + This exception does not however invalidate any other reasons why + the executable file might be covered by the GNU General Public License. */ + + /* Locate the FDE entry for a given address, using PT_GNU_EH_FRAME ELF + segment and dl_iterate_phdr to avoid register/deregister calls at + DSO load/unload. */ + + #ifndef _GNU_SOURCE + #define _GNU_SOURCE 1 + #endif + + #include "auto-host.h" /* For HAVE_LD_EH_FRAME_HDR. */ + #include "tconfig.h" + #ifndef inhibit_libc + #include + #include + #include + #endif + #include "tsystem.h" + #include "dwarf2.h" + #include "unwind.h" + #define NO_BASE_OF_ENCODED_VALUE + #include "unwind-pe.h" + #include "unwind-dw2-fde.h" + #include "gthr.h" + + #if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \ + && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) \ + || (__GLIBC__ == 2 && __GLIBC_MINOR__ == 2 && defined(DT_CONFIG))) + + static fde * _Unwind_Find_registered_FDE (void *pc, struct dwarf_eh_bases *bases); + + #define _Unwind_Find_FDE _Unwind_Find_registered_FDE + #include "unwind-dw2-fde.c" + #undef _Unwind_Find_FDE + + #ifndef PT_GNU_EH_FRAME + #define PT_GNU_EH_FRAME (PT_LOOS + 0x474e550) + #endif + + struct unw_eh_callback_data + { + _Unwind_Ptr pc; + void *tbase; + void *dbase; + void *func; + fde *ret; + }; + + struct unw_eh_frame_hdr + { + unsigned char version; + unsigned char eh_frame_ptr_enc; + unsigned char fde_count_enc; + unsigned char table_enc; + }; + + /* Like base_of_encoded_value, but take the base from a struct object + instead of an _Unwind_Context. */ + + static _Unwind_Ptr + base_from_cb_data (unsigned char encoding, struct unw_eh_callback_data *data) + { + if (encoding == DW_EH_PE_omit) + return 0; + + switch (encoding & 0x70) + { + case DW_EH_PE_absptr: + case DW_EH_PE_pcrel: + case DW_EH_PE_aligned: + return 0; + + case DW_EH_PE_textrel: + return (_Unwind_Ptr) data->tbase; + case DW_EH_PE_datarel: + return (_Unwind_Ptr) data->dbase; + } + abort (); + } + + static int + _Unwind_IteratePhdrCallback (struct dl_phdr_info *info, size_t size, void *ptr) + { + struct unw_eh_callback_data *data = (struct unw_eh_callback_data *) ptr; + const ElfW(Phdr) *phdr, *p_eh_frame_hdr, *p_dynamic; + long n, match; + _Unwind_Ptr load_base; + const unsigned char *p; + const struct unw_eh_frame_hdr *hdr; + _Unwind_Ptr eh_frame; + struct object ob; + + /* Make sure struct dl_phdr_info is at least as big as we need. */ + if (size < offsetof (struct dl_phdr_info, dlpi_phnum) + + sizeof (info->dlpi_phnum)) + return -1; + + match = 0; + phdr = info->dlpi_phdr; + load_base = info->dlpi_addr; + p_eh_frame_hdr = NULL; + p_dynamic = NULL; + + /* See if PC falls into one of the loaded segments. Find the eh_frame + segment at the same time. */ + for (n = info->dlpi_phnum; --n >= 0; phdr++) + { + if (phdr->p_type == PT_LOAD) + { + _Unwind_Ptr vaddr = phdr->p_vaddr + load_base; + if (data->pc >= vaddr && data->pc < vaddr + phdr->p_memsz) + match = 1; + } + else if (phdr->p_type == PT_GNU_EH_FRAME) + p_eh_frame_hdr = phdr; + else if (phdr->p_type == PT_DYNAMIC) + p_dynamic = phdr; + } + if (!match || !p_eh_frame_hdr) + return 0; + + /* Read .eh_frame_hdr header. */ + hdr = (const struct unw_eh_frame_hdr *) + (p_eh_frame_hdr->p_vaddr + load_base); + if (hdr->version != 1) + return 1; + + #ifdef CRT_GET_RFIB_DATA + # ifdef __i386__ + data->dbase = NULL; + if (p_dynamic) + { + /* For dynamicly linked executables and shared libraries, + DT_PLTGOT is the gp value for that object. */ + ElfW(Dyn) *dyn = (ElfW(Dyn) *) (p_dynamic->p_vaddr + load_base); + for (; dyn->d_tag != DT_NULL ; dyn++) + if (dyn->d_tag == DT_PLTGOT) + { + /* On IA-32, _DYNAMIC is writable and GLIBC has relocated it. */ + data->dbase = (void *) dyn->d_un.d_ptr; + break; + } + } + # else + # error What is DW_EH_PE_datarel base on this platform? + # endif + #endif + #ifdef CRT_GET_RFIB_TEXT + # error What is DW_EH_PE_textrel base on this platform? + #endif + + p = read_encoded_value_with_base (hdr->eh_frame_ptr_enc, + base_from_cb_data (hdr->eh_frame_ptr_enc, + data), + (const unsigned char *) (hdr + 1), + &eh_frame); + + /* We require here specific table encoding to speed things up. + Also, DW_EH_PE_datarel here means using PT_GNU_EH_FRAME start + as base, not the processor specific DW_EH_PE_datarel. */ + if (hdr->fde_count_enc != DW_EH_PE_omit + && hdr->table_enc == (DW_EH_PE_datarel | DW_EH_PE_sdata4)) + { + _Unwind_Ptr fde_count; + + p = read_encoded_value_with_base (hdr->fde_count_enc, + base_from_cb_data (hdr->fde_count_enc, + data), + p, &fde_count); + /* Shouldn't happen. */ + if (fde_count == 0) + return 1; + if ((((_Unwind_Ptr) p) & 3) == 0) + { + struct fde_table { + signed initial_loc __attribute__ ((mode (SI))); + signed fde __attribute__ ((mode (SI))); + }; + const struct fde_table *table = (const struct fde_table *) p; + size_t lo, hi, mid; + _Unwind_Ptr data_base = (_Unwind_Ptr) hdr; + fde *f; + unsigned int f_enc, f_enc_size; + _Unwind_Ptr range; + + mid = fde_count - 1; + if (data->pc < table[0].initial_loc + data_base) + return 1; + else if (data->pc < table[mid].initial_loc + data_base) + { + lo = 0; + hi = mid; + + while (lo < hi) + { + mid = (lo + hi) / 2; + if (data->pc < table[mid].initial_loc + data_base) + hi = mid; + else if (data->pc >= table[mid + 1].initial_loc + data_base) + lo = mid + 1; + else + break; + } + + if (lo >= hi) + __gxx_abort (); + } + + f = (fde *) (table[mid].fde + data_base); + f_enc = get_fde_encoding (f); + f_enc_size = size_of_encoded_value (f_enc); + read_encoded_value_with_base (f_enc & 0x0f, 0, + &f->pc_begin[f_enc_size], &range); + if (data->pc < table[mid].initial_loc + data_base + range) + data->ret = f; + data->func = (void *) (table[mid].initial_loc + data_base); + return 1; + } + } + + /* We have no sorted search table, so need to go the slow way. + As soon as GLIBC will provide API so to notify that a library has been + removed, we could cache this (and thus use search_object). */ + ob.pc_begin = NULL; + ob.tbase = data->tbase; + ob.dbase = data->dbase; + ob.u.single = (fde *) eh_frame; + ob.s.i = 0; + ob.s.b.mixed_encoding = 1; /* Need to assume worst case. */ + data->ret = linear_search_fdes (&ob, (fde *) eh_frame, (void *) data->pc); + if (data->ret != NULL) + { + unsigned int encoding = get_fde_encoding (data->ret); + read_encoded_value_with_base (encoding, + base_from_cb_data (encoding, data), + data->ret->pc_begin, + (_Unwind_Ptr *)&data->func); + } + return 1; + } + + fde * + _Unwind_Find_FDE (void *pc, struct dwarf_eh_bases *bases) + { + struct unw_eh_callback_data data; + fde *ret; + + ret = _Unwind_Find_registered_FDE (pc, bases); + if (ret != NULL) + return ret; + + data.pc = (_Unwind_Ptr) pc; + data.tbase = NULL; + data.dbase = NULL; + data.func = NULL; + data.ret = NULL; + + if (dl_iterate_phdr (_Unwind_IteratePhdrCallback, &data) < 0) + return NULL; + + if (data.ret) + { + bases->tbase = data.tbase; + bases->dbase = data.dbase; + bases->func = data.func; + } + return data.ret; + } + + #else + /* Prevent multiple include of header files. */ + #define _Unwind_Find_FDE _Unwind_Find_FDE + #include "unwind-dw2-fde.c" + #endif diff -Nrc3pad gcc-3.0.4/gcc/unwind-dw2-fde.c gcc-3.1/gcc/unwind-dw2-fde.c *** gcc-3.0.4/gcc/unwind-dw2-fde.c Wed Jan 2 21:03:40 2002 --- gcc-3.1/gcc/unwind-dw2-fde.c Mon Jan 21 13:08:31 2002 *************** *** 2,13 **** /* Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Jason Merrill . ! 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. In addition to the permissions in the GNU General Public License, the Free Software Foundation gives you unlimited permission to link the --- 2,13 ---- /* Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Jason Merrill . ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. In addition to the permissions in the GNU General Public License, the Free Software Foundation gives you unlimited permission to link the *************** do apply in other respects; for example, *** 18,33 **** the file, and distribution when not linked into a combine executable.) ! 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 "tconfig.h" #include "tsystem.h" #include "dwarf2.h" --- 18,34 ---- the file, and distribution when not linked into a combine executable.) ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ + #ifndef _Unwind_Find_FDE #include "tconfig.h" #include "tsystem.h" #include "dwarf2.h" *************** Boston, MA 02111-1307, USA. */ *** 36,41 **** --- 37,43 ---- #include "unwind-pe.h" #include "unwind-dw2-fde.h" #include "gthr.h" + #endif /* The unseen_objects list contains objects that have been registered but not yet categorized in any way. The seen_objects list has had *************** void *** 73,78 **** --- 75,84 ---- __register_frame_info_bases (void *begin, struct object *ob, void *tbase, void *dbase) { + /* If .eh_frame is empty, don't register at all. */ + if (*(uword *) begin == 0) + return; + ob->pc_begin = (void *)-1; ob->tbase = tbase; ob->dbase = dbase; *************** __register_frame_info (void *begin, stru *** 98,104 **** void __register_frame (void *begin) { ! struct object *ob = (struct object *) malloc (sizeof (struct object)); __register_frame_info (begin, ob); } --- 104,116 ---- void __register_frame (void *begin) { ! struct object *ob; ! ! /* If .eh_frame is empty, don't register at all. */ ! if (*(uword *) begin == 0) ! return; ! ! ob = (struct object *) malloc (sizeof (struct object)); __register_frame_info (begin, ob); } *************** __deregister_frame_info_bases (void *beg *** 158,163 **** --- 170,179 ---- struct object **p; struct object *ob = 0; + /* If .eh_frame is empty, we haven't registered. */ + if (*(uword *) begin == 0) + return ob; + init_object_mutex_once (); __gthread_mutex_lock (&object_mutex); *************** __deregister_frame_info (void *begin) *** 207,213 **** void __deregister_frame (void *begin) { ! free (__deregister_frame_info (begin)); } --- 223,231 ---- void __deregister_frame (void *begin) { ! /* If .eh_frame is empty, we haven't registered. */ ! if (*(uword *) begin != 0) ! free (__deregister_frame_info (begin)); } *************** get_cie_encoding (struct dwarf_cie *cie) *** 243,260 **** { const unsigned char *aug, *p; _Unwind_Ptr dummy; aug = cie->augmentation; if (aug[0] != 'z') return DW_EH_PE_absptr; p = aug + strlen (aug) + 1; /* Skip the augmentation string. */ ! p = read_uleb128 (p, &dummy); /* Skip code alignment. */ ! p = read_sleb128 (p, &dummy); /* Skip data alignment. */ p++; /* Skip return address column. */ aug++; /* Skip 'z' */ ! p = read_uleb128 (p, &dummy); /* Skip augmentation length. */ while (1) { /* This is what we're looking for. */ --- 261,280 ---- { const unsigned char *aug, *p; _Unwind_Ptr dummy; + _Unwind_Word utmp; + _Unwind_Sword stmp; aug = cie->augmentation; if (aug[0] != 'z') return DW_EH_PE_absptr; p = aug + strlen (aug) + 1; /* Skip the augmentation string. */ ! p = read_uleb128 (p, &utmp); /* Skip code alignment. */ ! p = read_sleb128 (p, &stmp); /* Skip data alignment. */ p++; /* Skip return address column. */ aug++; /* Skip 'z' */ ! p = read_uleb128 (p, &utmp); /* Skip augmentation length. */ while (1) { /* This is what we're looking for. */ *************** fde_split (struct object *ob, fde_compar *** 423,432 **** probe != &marker && fde_compare (ob, linear->array[i], *probe) < 0; probe = chain_end) { ! chain_end = (fde **)erratic->array[probe - linear->array]; erratic->array[probe - linear->array] = NULL; } ! erratic->array[i] = (fde *)chain_end; chain_end = &linear->array[i]; } --- 443,452 ---- probe != &marker && fde_compare (ob, linear->array[i], *probe) < 0; probe = chain_end) { ! chain_end = (fde **) erratic->array[probe - linear->array]; erratic->array[probe - linear->array] = NULL; } ! erratic->array[i] = (fde *) chain_end; chain_end = &linear->array[i]; } *************** frame_heapsort (struct object *ob, fde_c *** 451,461 **** { /* For a description of this algorithm, see: Samuel P. Harbison, Guy L. Steele Jr.: C, a reference manual, 2nd ed., ! p. 60-61. */ fde ** a = erratic->array; /* A portion of the array is called a "heap" if for all i>=0: If i and 2i+1 are valid indices, then a[i] >= a[2i+1]. ! If i and 2i+2 are valid indices, then a[i] >= a[2i+2]. */ #define SWAP(x,y) do { fde * tmp = x; x = y; y = tmp; } while (0) size_t n = erratic->count; size_t m = n; --- 471,481 ---- { /* For a description of this algorithm, see: Samuel P. Harbison, Guy L. Steele Jr.: C, a reference manual, 2nd ed., ! p. 60-61. */ fde ** a = erratic->array; /* A portion of the array is called a "heap" if for all i>=0: If i and 2i+1 are valid indices, then a[i] >= a[2i+1]. ! If i and 2i+2 are valid indices, then a[i] >= a[2i+2]. */ #define SWAP(x,y) do { fde * tmp = x; x = y; y = tmp; } while (0) size_t n = erratic->count; size_t m = n; *************** frame_heapsort (struct object *ob, fde_c *** 463,469 **** while (m > 0) { ! /* Invariant: a[m..n-1] is a heap. */ m--; for (i = m; 2*i+1 < n; ) { --- 483,489 ---- while (m > 0) { ! /* Invariant: a[m..n-1] is a heap. */ m--; for (i = m; 2*i+1 < n; ) { *************** frame_heapsort (struct object *ob, fde_c *** 485,491 **** } while (n > 1) { ! /* Invariant: a[0..n-1] is a heap. */ n--; SWAP (a[0], a[n]); for (i = 0; 2*i+1 < n; ) --- 505,511 ---- } while (n > 1) { ! /* Invariant: a[0..n-1] is a heap. */ n--; SWAP (a[0], a[n]); for (i = 0; 2*i+1 < n; ) *************** frame_heapsort (struct object *ob, fde_c *** 509,515 **** #undef SWAP } ! /* Merge V1 and V2, both sorted, and put the result into V1. */ static inline void fde_merge (struct object *ob, fde_compare_t fde_compare, struct fde_vector *v1, struct fde_vector *v2) --- 529,535 ---- #undef SWAP } ! /* Merge V1 and V2, both sorted, and put the result into V1. */ static inline void fde_merge (struct object *ob, fde_compare_t fde_compare, struct fde_vector *v1, struct fde_vector *v2) *************** fde_merge (struct object *ob, fde_compar *** 521,536 **** if (i2 > 0) { i1 = v1->count; ! do { ! i2--; ! fde2 = v2->array[i2]; ! while (i1 > 0 && fde_compare (ob, v1->array[i1-1], fde2) > 0) ! { ! v1->array[i1+i2] = v1->array[i1-1]; ! i1--; ! } v1->array[i1+i2] = fde2; ! } while (i2 > 0); v1->count += v2->count; } } --- 541,558 ---- if (i2 > 0) { i1 = v1->count; ! do ! { ! i2--; ! fde2 = v2->array[i2]; ! while (i1 > 0 && fde_compare (ob, v1->array[i1-1], fde2) > 0) ! { ! v1->array[i1+i2] = v1->array[i1-1]; ! i1--; ! } v1->array[i1+i2] = fde2; ! } ! while (i2 > 0); v1->count += v2->count; } } *************** classify_object_over_fdes (struct object *** 620,627 **** continue; count += 1; ! if ((void *)pc_begin < ob->pc_begin) ! ob->pc_begin = (void *)pc_begin; } return count; --- 642,649 ---- continue; count += 1; ! if ((void *) pc_begin < ob->pc_begin) ! ob->pc_begin = (void *) pc_begin; } return count; *************** add_fdes (struct object *ob, struct fde_ *** 657,663 **** if (encoding == DW_EH_PE_absptr) { ! if (*(_Unwind_Ptr *)this_fde->pc_begin == 0) continue; } else --- 679,685 ---- if (encoding == DW_EH_PE_absptr) { ! if (*(_Unwind_Ptr *) this_fde->pc_begin == 0) continue; } else *************** linear_search_fdes (struct object *ob, f *** 775,782 **** if (encoding == DW_EH_PE_absptr) { ! pc_begin = ((_Unwind_Ptr *)this_fde->pc_begin)[0]; ! pc_range = ((_Unwind_Ptr *)this_fde->pc_begin)[1]; if (pc_begin == 0) continue; } --- 797,804 ---- if (encoding == DW_EH_PE_absptr) { ! pc_begin = ((_Unwind_Ptr *) this_fde->pc_begin)[0]; ! pc_range = ((_Unwind_Ptr *) this_fde->pc_begin)[1]; if (pc_begin == 0) continue; } *************** linear_search_fdes (struct object *ob, f *** 803,809 **** continue; } ! if ((_Unwind_Ptr)pc - pc_begin < pc_range) return this_fde; } --- 825,831 ---- continue; } ! if ((_Unwind_Ptr) pc - pc_begin < pc_range) return this_fde; } *************** binary_search_unencoded_fdes (struct obj *** 826,833 **** void *pc_begin; uaddr pc_range; ! pc_begin = ((void **)f->pc_begin)[0]; ! pc_range = ((uaddr *)f->pc_begin)[1]; if (pc < pc_begin) hi = i; --- 848,855 ---- void *pc_begin; uaddr pc_range; ! pc_begin = ((void **) f->pc_begin)[0]; ! pc_range = ((uaddr *) f->pc_begin)[1]; if (pc < pc_begin) hi = i; *************** binary_search_single_encoding_fdes (stru *** 859,867 **** &pc_begin); read_encoded_value_with_base (encoding & 0x0F, 0, p, &pc_range); ! if ((_Unwind_Ptr)pc < pc_begin) hi = i; ! else if ((_Unwind_Ptr)pc >= pc_begin + pc_range) lo = i + 1; else return f; --- 881,889 ---- &pc_begin); read_encoded_value_with_base (encoding & 0x0F, 0, p, &pc_range); ! if ((_Unwind_Ptr) pc < pc_begin) hi = i; ! else if ((_Unwind_Ptr) pc >= pc_begin + pc_range) lo = i + 1; else return f; *************** binary_search_mixed_encoding_fdes (struc *** 890,898 **** f->pc_begin, &pc_begin); read_encoded_value_with_base (encoding & 0x0F, 0, p, &pc_range); ! if ((_Unwind_Ptr)pc < pc_begin) hi = i; ! else if ((_Unwind_Ptr)pc >= pc_begin + pc_range) lo = i + 1; else return f; --- 912,920 ---- f->pc_begin, &pc_begin); read_encoded_value_with_base (encoding & 0x0F, 0, p, &pc_range); ! if ((_Unwind_Ptr) pc < pc_begin) hi = i; ! else if ((_Unwind_Ptr) pc >= pc_begin + pc_range) lo = i + 1; else return f; *************** _Unwind_Find_FDE (void *pc, struct dwarf *** 955,961 **** __gthread_mutex_lock (&object_mutex); /* Linear search through the classified objects, to find the one ! containing the pc. Note that pc_begin is sorted decending, and we expect objects to be non-overlapping. */ for (ob = seen_objects; ob; ob = ob->next) if (pc >= ob->pc_begin) --- 977,983 ---- __gthread_mutex_lock (&object_mutex); /* Linear search through the classified objects, to find the one ! containing the pc. Note that pc_begin is sorted descending, and we expect objects to be non-overlapping. */ for (ob = seen_objects; ob; ob = ob->next) if (pc >= ob->pc_begin) diff -Nrc3pad gcc-3.0.4/gcc/unwind-dw2-fde.h gcc-3.1/gcc/unwind-dw2-fde.h *** gcc-3.0.4/gcc/unwind-dw2-fde.h Tue May 22 23:53:14 2001 --- gcc-3.1/gcc/unwind-dw2-fde.h Mon Jan 21 13:08:31 2002 *************** *** 1,13 **** /* Subroutines needed for unwinding stack frames for exception handling. */ ! /* Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Jason Merrill . ! 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. In addition to the permissions in the GNU General Public License, the Free Software Foundation gives you unlimited permission to link the --- 1,14 ---- /* Subroutines needed for unwinding stack frames for exception handling. */ ! /* Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 ! Free Software Foundation, Inc. Contributed by Jason Merrill . ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. In addition to the permissions in the GNU General Public License, the Free Software Foundation gives you unlimited permission to link the *************** do apply in other respects; for example, *** 18,32 **** the file, and distribution when not linked into a combine executable.) ! 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. */ struct fde_vector --- 19,33 ---- the file, and distribution when not linked into a combine executable.) ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ struct fde_vector *************** struct object *** 54,60 **** unsigned long mixed_encoding : 1; unsigned long encoding : 8; /* ??? Wish there was an easy way to detect a 64-bit host here; ! we've got 32 bits left to play with... */ unsigned long count : 21; } b; size_t i; --- 55,61 ---- unsigned long mixed_encoding : 1; unsigned long encoding : 8; /* ??? Wish there was an easy way to detect a 64-bit host here; ! we've got 32 bits left to play with... */ unsigned long count : 21; } b; size_t i; *************** typedef unsigned char ubyte; *** 112,118 **** is located, and what the register lifetimes and stack layout are within the function. ! The data structures are defined in the DWARF specfication, although not in a very readable way (see LITERATURE). Every time an exception is thrown, the code needs to locate the FDE --- 113,119 ---- is located, and what the register lifetimes and stack layout are within the function. ! The data structures are defined in the DWARF specification, although not in a very readable way (see LITERATURE). Every time an exception is thrown, the code needs to locate the FDE *************** get_cie (struct dwarf_fde *f) *** 155,161 **** static inline fde * next_fde (fde *f) { ! return (fde *)((char *)f + f->length + sizeof (f->length)); } extern fde * _Unwind_Find_FDE (void *, struct dwarf_eh_bases *); --- 156,162 ---- static inline fde * next_fde (fde *f) { ! return (fde *) ((char *) f + f->length + sizeof (f->length)); } extern fde * _Unwind_Find_FDE (void *, struct dwarf_eh_bases *); diff -Nrc3pad gcc-3.0.4/gcc/unwind-dw2.c gcc-3.1/gcc/unwind-dw2.c *** gcc-3.0.4/gcc/unwind-dw2.c Thu Jul 19 18:13:30 2001 --- gcc-3.1/gcc/unwind-dw2.c Mon Jan 21 13:08:30 2002 *************** *** 1,22 **** /* DWARF2 exception handling and frame unwind runtime interface routines. ! Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "tconfig.h" #include "tsystem.h" --- 1,23 ---- /* DWARF2 exception handling and frame unwind runtime interface routines. ! Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 ! Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it ! under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ! ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public ! License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "tconfig.h" #include "tsystem.h" *************** *** 27,33 **** #include "gthr.h" ! #if !USING_SJLJ_EXCEPTIONS #ifndef STACK_GROWS_DOWNWARD #define STACK_GROWS_DOWNWARD 0 --- 28,34 ---- #include "gthr.h" ! #ifndef __USING_SJLJ_EXCEPTIONS__ #ifndef STACK_GROWS_DOWNWARD #define STACK_GROWS_DOWNWARD 0 *************** *** 42,47 **** --- 43,53 ---- #define DWARF_FRAME_REGISTERS FIRST_PSEUDO_REGISTER #endif + /* Dwarf frame registers used for pre gcc 3.0 compiled glibc. */ + #ifndef PRE_GCC3_DWARF_FRAME_REGISTERS + #define PRE_GCC3_DWARF_FRAME_REGISTERS DWARF_FRAME_REGISTERS + #endif + /* This is the register and unwind state for a particular frame. */ struct _Unwind_Context { *************** typedef struct *** 68,74 **** { struct { union { ! unsigned int reg; _Unwind_Sword offset; const unsigned char *exp; } loc; --- 74,80 ---- { struct { union { ! _Unwind_Word reg; _Unwind_Sword offset; const unsigned char *exp; } loc; *************** typedef struct *** 100,107 **** /* The information we care about from the CIE/FDE. */ _Unwind_Personality_Fn personality; ! signed int data_align; ! unsigned int code_align; unsigned char retaddr_column; unsigned char fde_encoding; unsigned char lsda_encoding; --- 106,113 ---- /* The information we care about from the CIE/FDE. */ _Unwind_Personality_Fn personality; ! _Unwind_Sword data_align; ! _Unwind_Word code_align; unsigned char retaddr_column; unsigned char fde_encoding; unsigned char lsda_encoding; *************** static inline void * *** 126,135 **** read_pointer (const void *p) { const union unaligned *up = p; return up->p; } static inline int ! read_1u (const void *p) { return *(const unsigned char *)p; } static inline int ! read_1s (const void *p) { return *(const signed char *)p; } static inline int read_2u (const void *p) { const union unaligned *up = p; return up->u2; } --- 132,141 ---- read_pointer (const void *p) { const union unaligned *up = p; return up->p; } static inline int ! read_1u (const void *p) { return *(const unsigned char *) p; } static inline int ! read_1s (const void *p) { return *(const signed char *) p; } static inline int read_2u (const void *p) { const union unaligned *up = p; return up->u2; } *************** extract_cie_info (struct dwarf_cie *cie, *** 219,225 **** const unsigned char *aug = cie->augmentation; const unsigned char *p = aug + strlen (aug) + 1; const unsigned char *ret = NULL; ! _Unwind_Ptr tmp; /* g++ v2 "eh" has pointer immediately following augmentation string, so it must be handled first. */ --- 225,231 ---- const unsigned char *aug = cie->augmentation; const unsigned char *p = aug + strlen (aug) + 1; const unsigned char *ret = NULL; ! _Unwind_Word utmp; /* g++ v2 "eh" has pointer immediately following augmentation string, so it must be handled first. */ *************** extract_cie_info (struct dwarf_cie *cie, *** 232,239 **** /* Immediately following the augmentation are the code and data alignment and return address column. */ ! p = read_uleb128 (p, &tmp); fs->code_align = tmp; ! p = read_sleb128 (p, &tmp); fs->data_align = (saddr) tmp; fs->retaddr_column = *p++; fs->lsda_encoding = DW_EH_PE_omit; --- 238,245 ---- /* Immediately following the augmentation are the code and data alignment and return address column. */ ! p = read_uleb128 (p, &fs->code_align); ! p = read_sleb128 (p, &fs->data_align); fs->retaddr_column = *p++; fs->lsda_encoding = DW_EH_PE_omit; *************** extract_cie_info (struct dwarf_cie *cie, *** 242,249 **** the size. */ if (*aug == 'z') { ! p = read_uleb128 (p, &tmp); ! ret = p + tmp; fs->saw_z = 1; ++aug; --- 248,255 ---- the size. */ if (*aug == 'z') { ! p = read_uleb128 (p, &utmp); ! ret = p + utmp; fs->saw_z = 1; ++aug; *************** static _Unwind_Word *** 291,297 **** execute_stack_op (const unsigned char *op_ptr, const unsigned char *op_end, struct _Unwind_Context *context, _Unwind_Word initial) { ! _Unwind_Word stack[64]; /* ??? Assume this is enough. */ int stack_elt; stack[0] = initial; --- 297,303 ---- execute_stack_op (const unsigned char *op_ptr, const unsigned char *op_end, struct _Unwind_Context *context, _Unwind_Word initial) { ! _Unwind_Word stack[64]; /* ??? Assume this is enough. */ int stack_elt; stack[0] = initial; *************** execute_stack_op (const unsigned char *o *** 300,308 **** while (op_ptr < op_end) { enum dwarf_location_atom op = *op_ptr++; ! _Unwind_Word result, reg; ! _Unwind_Sword offset; ! _Unwind_Ptr ptrtmp; switch (op) { --- 306,313 ---- while (op_ptr < op_end) { enum dwarf_location_atom op = *op_ptr++; ! _Unwind_Word result, reg, utmp; ! _Unwind_Sword offset, stmp; switch (op) { *************** execute_stack_op (const unsigned char *o *** 379,390 **** op_ptr += 8; break; case DW_OP_constu: ! op_ptr = read_uleb128 (op_ptr, &ptrtmp); ! result = ptrtmp; break; case DW_OP_consts: ! op_ptr = read_sleb128 (op_ptr, &ptrtmp); ! result = (saddr)ptrtmp; break; case DW_OP_reg0: --- 384,394 ---- op_ptr += 8; break; case DW_OP_constu: ! op_ptr = read_uleb128 (op_ptr, &result); break; case DW_OP_consts: ! op_ptr = read_sleb128 (op_ptr, &stmp); ! result = stmp; break; case DW_OP_reg0: *************** execute_stack_op (const unsigned char *o *** 422,428 **** result = _Unwind_GetGR (context, op - DW_OP_reg0); break; case DW_OP_regx: ! op_ptr = read_uleb128 (op_ptr, &ptrtmp); reg = ptrtmp; result = _Unwind_GetGR (context, reg); break; --- 426,432 ---- result = _Unwind_GetGR (context, op - DW_OP_reg0); break; case DW_OP_regx: ! op_ptr = read_uleb128 (op_ptr, ®); result = _Unwind_GetGR (context, reg); break; *************** execute_stack_op (const unsigned char *o *** 458,469 **** case DW_OP_breg29: case DW_OP_breg30: case DW_OP_breg31: ! op_ptr = read_sleb128 (op_ptr, &ptrtmp); offset = (saddr)ptrtmp; result = _Unwind_GetGR (context, op - DW_OP_breg0) + offset; break; case DW_OP_bregx: ! op_ptr = read_uleb128 (op_ptr, &ptrtmp); reg = ptrtmp; ! op_ptr = read_sleb128 (op_ptr, &ptrtmp); offset = (saddr)ptrtmp; result = _Unwind_GetGR (context, reg) + offset; break; --- 462,473 ---- case DW_OP_breg29: case DW_OP_breg30: case DW_OP_breg31: ! op_ptr = read_sleb128 (op_ptr, &offset); result = _Unwind_GetGR (context, op - DW_OP_breg0) + offset; break; case DW_OP_bregx: ! op_ptr = read_uleb128 (op_ptr, ®); ! op_ptr = read_sleb128 (op_ptr, &offset); result = _Unwind_GetGR (context, reg) + offset; break; *************** execute_stack_op (const unsigned char *o *** 521,534 **** { case DW_OP_deref: { ! void *ptr = (void *)(_Unwind_Ptr) result; result = (_Unwind_Ptr) read_pointer (ptr); } break; case DW_OP_deref_size: { ! void *ptr = (void *)(_Unwind_Ptr) result; switch (*op_ptr++) { case 1: --- 525,538 ---- { case DW_OP_deref: { ! void *ptr = (void *) (_Unwind_Ptr) result; result = (_Unwind_Ptr) read_pointer (ptr); } break; case DW_OP_deref_size: { ! void *ptr = (void *) (_Unwind_Ptr) result; switch (*op_ptr++) { case 1: *************** execute_stack_op (const unsigned char *o *** 560,568 **** result = ~result; break; case DW_OP_plus_uconst: ! op_ptr = read_uleb128 (op_ptr, &ptrtmp); reg = ptrtmp; ! result += reg; break; } break; --- 564,575 ---- result = ~result; break; case DW_OP_plus_uconst: ! op_ptr = read_uleb128 (op_ptr, &utmp); ! result += utmp; break; + + default: + abort (); } break; *************** execute_stack_op (const unsigned char *o *** 593,605 **** result = second & first; break; case DW_OP_div: ! result = (_Unwind_Sword)second / (_Unwind_Sword)first; break; case DW_OP_minus: result = second - first; break; case DW_OP_mod: ! result = (_Unwind_Sword)second % (_Unwind_Sword)first; break; case DW_OP_mul: result = second * first; --- 600,612 ---- result = second & first; break; case DW_OP_div: ! result = (_Unwind_Sword) second / (_Unwind_Sword) first; break; case DW_OP_minus: result = second - first; break; case DW_OP_mod: ! result = (_Unwind_Sword) second % (_Unwind_Sword) first; break; case DW_OP_mul: result = second * first; *************** execute_stack_op (const unsigned char *o *** 617,645 **** result = second >> first; break; case DW_OP_shra: ! result = (_Unwind_Sword)second >> first; break; case DW_OP_xor: result = second ^ first; break; case DW_OP_le: ! result = (_Unwind_Sword)first <= (_Unwind_Sword)second; break; case DW_OP_ge: ! result = (_Unwind_Sword)first >= (_Unwind_Sword)second; break; case DW_OP_eq: ! result = (_Unwind_Sword)first == (_Unwind_Sword)second; break; case DW_OP_lt: ! result = (_Unwind_Sword)first < (_Unwind_Sword)second; break; case DW_OP_gt: ! result = (_Unwind_Sword)first > (_Unwind_Sword)second; break; case DW_OP_ne: ! result = (_Unwind_Sword)first != (_Unwind_Sword)second; break; } } break; --- 624,655 ---- result = second >> first; break; case DW_OP_shra: ! result = (_Unwind_Sword) second >> first; break; case DW_OP_xor: result = second ^ first; break; case DW_OP_le: ! result = (_Unwind_Sword) first <= (_Unwind_Sword) second; break; case DW_OP_ge: ! result = (_Unwind_Sword) first >= (_Unwind_Sword) second; break; case DW_OP_eq: ! result = (_Unwind_Sword) first == (_Unwind_Sword) second; break; case DW_OP_lt: ! result = (_Unwind_Sword) first < (_Unwind_Sword) second; break; case DW_OP_gt: ! result = (_Unwind_Sword) first > (_Unwind_Sword) second; break; case DW_OP_ne: ! result = (_Unwind_Sword) first != (_Unwind_Sword) second; break; + + default: + abort (); } } break; *************** execute_cfa_program (const unsigned char *** 696,719 **** /* Don't allow remember/restore between CIE and FDE programs. */ fs->regs.prev = NULL; while (insn_ptr < insn_end && fs->pc < context->ra) { unsigned char insn = *insn_ptr++; ! _Unwind_Word reg; ! _Unwind_Sword offset; ! _Unwind_Ptr ptrtmp; ! if (insn & DW_CFA_advance_loc) fs->pc += (insn & 0x3f) * fs->code_align; ! else if (insn & DW_CFA_offset) { reg = insn & 0x3f; ! insn_ptr = read_uleb128 (insn_ptr, &ptrtmp); ! offset = ptrtmp * fs->data_align; fs->regs.reg[reg].how = REG_SAVED_OFFSET; fs->regs.reg[reg].loc.offset = offset; } ! else if (insn & DW_CFA_restore) { reg = insn & 0x3f; fs->regs.reg[reg].how = REG_UNSAVED; --- 706,735 ---- /* Don't allow remember/restore between CIE and FDE programs. */ fs->regs.prev = NULL; + /* The comparison with the return address uses < rather than <= because + we are only interested in the effects of code before the call; for a + noreturn function, the return address may point to unrelated code with + a different stack configuration that we are not interested in. We + assume that the call itself is unwind info-neutral; if not, or if + there are delay instructions that adjust the stack, these must be + reflected at the point immediately before the call insn. */ while (insn_ptr < insn_end && fs->pc < context->ra) { unsigned char insn = *insn_ptr++; ! _Unwind_Word reg, utmp; ! _Unwind_Sword offset, stmp; ! if ((insn & 0xc0) == DW_CFA_advance_loc) fs->pc += (insn & 0x3f) * fs->code_align; ! else if ((insn & 0xc0) == DW_CFA_offset) { reg = insn & 0x3f; ! insn_ptr = read_uleb128 (insn_ptr, &utmp); ! offset = (_Unwind_Sword) utmp * fs->data_align; fs->regs.reg[reg].how = REG_SAVED_OFFSET; fs->regs.reg[reg].loc.offset = offset; } ! else if ((insn & 0xc0) == DW_CFA_restore) { reg = insn & 0x3f; fs->regs.reg[reg].how = REG_UNSAVED; *************** execute_cfa_program (const unsigned char *** 739,753 **** break; case DW_CFA_offset_extended: ! insn_ptr = read_uleb128 (insn_ptr, &ptrtmp); reg = ptrtmp; ! insn_ptr = read_uleb128 (insn_ptr, &ptrtmp); ! offset = ptrtmp * fs->data_align; fs->regs.reg[reg].how = REG_SAVED_OFFSET; fs->regs.reg[reg].loc.offset = offset; break; case DW_CFA_restore_extended: ! insn_ptr = read_uleb128 (insn_ptr, &ptrtmp); reg = ptrtmp; fs->regs.reg[reg].how = REG_UNSAVED; break; --- 755,769 ---- break; case DW_CFA_offset_extended: ! insn_ptr = read_uleb128 (insn_ptr, ®); ! insn_ptr = read_uleb128 (insn_ptr, &utmp); ! offset = (_Unwind_Sword) utmp * fs->data_align; fs->regs.reg[reg].how = REG_SAVED_OFFSET; fs->regs.reg[reg].loc.offset = offset; break; case DW_CFA_restore_extended: ! insn_ptr = read_uleb128 (insn_ptr, ®); fs->regs.reg[reg].how = REG_UNSAVED; break; *************** execute_cfa_program (const unsigned char *** 759,766 **** case DW_CFA_register: { _Unwind_Word reg2; ! insn_ptr = read_uleb128 (insn_ptr, &ptrtmp); reg = ptrtmp; ! insn_ptr = read_uleb128 (insn_ptr, &ptrtmp); reg2 = ptrtmp; fs->regs.reg[reg].how = REG_SAVED_REG; fs->regs.reg[reg].loc.reg = reg2; } --- 775,782 ---- case DW_CFA_register: { _Unwind_Word reg2; ! insn_ptr = read_uleb128 (insn_ptr, ®); ! insn_ptr = read_uleb128 (insn_ptr, ®2); fs->regs.reg[reg].how = REG_SAVED_REG; fs->regs.reg[reg].loc.reg = reg2; } *************** execute_cfa_program (const unsigned char *** 775,781 **** unused_rs = unused_rs->prev; } else ! new_rs = alloca (sizeof (struct frame_state_reg_info)); *new_rs = fs->regs; fs->regs.prev = new_rs; --- 791,797 ---- unused_rs = unused_rs->prev; } else ! new_rs = __builtin_alloca (sizeof (struct frame_state_reg_info)); *new_rs = fs->regs; fs->regs.prev = new_rs; *************** execute_cfa_program (const unsigned char *** 792,851 **** break; case DW_CFA_def_cfa: ! insn_ptr = read_uleb128 (insn_ptr, &ptrtmp); ! fs->cfa_reg = ptrtmp; ! insn_ptr = read_uleb128 (insn_ptr, &ptrtmp); ! fs->cfa_offset = ptrtmp; fs->cfa_how = CFA_REG_OFFSET; break; case DW_CFA_def_cfa_register: ! insn_ptr = read_uleb128 (insn_ptr, &ptrtmp); ! fs->cfa_reg = ptrtmp; fs->cfa_how = CFA_REG_OFFSET; break; case DW_CFA_def_cfa_offset: ! insn_ptr = read_uleb128 (insn_ptr, &ptrtmp); ! fs->cfa_offset = ptrtmp; /* cfa_how deliberately not set. */ break; case DW_CFA_def_cfa_expression: ! insn_ptr = read_uleb128 (insn_ptr, &ptrtmp); fs->cfa_exp = insn_ptr; fs->cfa_how = CFA_EXP; ! insn_ptr += ptrtmp; break; case DW_CFA_expression: ! insn_ptr = read_uleb128 (insn_ptr, &ptrtmp); reg = ptrtmp; ! insn_ptr = read_uleb128 (insn_ptr, &ptrtmp); fs->regs.reg[reg].how = REG_SAVED_EXP; fs->regs.reg[reg].loc.exp = insn_ptr; ! insn_ptr += ptrtmp; break; /* From the 2.1 draft. */ case DW_CFA_offset_extended_sf: ! insn_ptr = read_uleb128 (insn_ptr, &ptrtmp); reg = ptrtmp; ! insn_ptr = read_sleb128 (insn_ptr, &ptrtmp); ! offset = (saddr)ptrtmp * fs->data_align; fs->regs.reg[reg].how = REG_SAVED_OFFSET; fs->regs.reg[reg].loc.offset = offset; break; case DW_CFA_def_cfa_sf: ! insn_ptr = read_uleb128 (insn_ptr, &ptrtmp); ! fs->cfa_reg = ptrtmp; ! insn_ptr = read_sleb128 (insn_ptr, &ptrtmp); ! fs->cfa_offset = (saddr)ptrtmp; fs->cfa_how = CFA_REG_OFFSET; break; case DW_CFA_def_cfa_offset_sf: ! insn_ptr = read_uleb128 (insn_ptr, &ptrtmp); ! fs->cfa_offset = ptrtmp; /* cfa_how deliberately not set. */ break; --- 808,862 ---- break; case DW_CFA_def_cfa: ! insn_ptr = read_uleb128 (insn_ptr, &fs->cfa_reg); ! insn_ptr = read_uleb128 (insn_ptr, &utmp); ! fs->cfa_offset = utmp; fs->cfa_how = CFA_REG_OFFSET; break; case DW_CFA_def_cfa_register: ! insn_ptr = read_uleb128 (insn_ptr, &fs->cfa_reg); fs->cfa_how = CFA_REG_OFFSET; break; case DW_CFA_def_cfa_offset: ! insn_ptr = read_uleb128 (insn_ptr, &utmp); ! fs->cfa_offset = utmp; /* cfa_how deliberately not set. */ break; case DW_CFA_def_cfa_expression: ! insn_ptr = read_uleb128 (insn_ptr, &utmp); fs->cfa_exp = insn_ptr; fs->cfa_how = CFA_EXP; ! insn_ptr += utmp; break; case DW_CFA_expression: ! insn_ptr = read_uleb128 (insn_ptr, ®); ! insn_ptr = read_uleb128 (insn_ptr, &utmp); fs->regs.reg[reg].how = REG_SAVED_EXP; fs->regs.reg[reg].loc.exp = insn_ptr; ! insn_ptr += utmp; break; /* From the 2.1 draft. */ case DW_CFA_offset_extended_sf: ! insn_ptr = read_uleb128 (insn_ptr, ®); ! insn_ptr = read_sleb128 (insn_ptr, &stmp); ! offset = stmp * fs->data_align; fs->regs.reg[reg].how = REG_SAVED_OFFSET; fs->regs.reg[reg].loc.offset = offset; break; case DW_CFA_def_cfa_sf: ! insn_ptr = read_uleb128 (insn_ptr, &fs->cfa_reg); ! insn_ptr = read_sleb128 (insn_ptr, &fs->cfa_offset); fs->cfa_how = CFA_REG_OFFSET; break; case DW_CFA_def_cfa_offset_sf: ! insn_ptr = read_sleb128 (insn_ptr, &fs->cfa_offset); /* cfa_how deliberately not set. */ break; *************** execute_cfa_program (const unsigned char *** 859,874 **** break; case DW_CFA_GNU_args_size: ! insn_ptr = read_uleb128 (insn_ptr, &ptrtmp); ! context->args_size = ptrtmp; break; case DW_CFA_GNU_negative_offset_extended: /* Obsoleted by DW_CFA_offset_extended_sf, but used by older PowerPC code. */ ! insn_ptr = read_uleb128 (insn_ptr, &ptrtmp); reg = ptrtmp; ! insn_ptr = read_uleb128 (insn_ptr, &ptrtmp); ! offset = ptrtmp * fs->data_align; fs->regs.reg[reg].how = REG_SAVED_OFFSET; fs->regs.reg[reg].loc.offset = -offset; break; --- 870,884 ---- break; case DW_CFA_GNU_args_size: ! insn_ptr = read_uleb128 (insn_ptr, &context->args_size); break; case DW_CFA_GNU_negative_offset_extended: /* Obsoleted by DW_CFA_offset_extended_sf, but used by older PowerPC code. */ ! insn_ptr = read_uleb128 (insn_ptr, ®); ! insn_ptr = read_uleb128 (insn_ptr, &utmp); ! offset = (_Unwind_Word) utmp * fs->data_align; fs->regs.reg[reg].how = REG_SAVED_OFFSET; fs->regs.reg[reg].loc.offset = -offset; break; *************** uw_frame_state_for (struct _Unwind_Conte *** 895,901 **** { /* Couldn't find frame unwind info for this function. Try a target-specific fallback mechanism. This will necessarily ! not profide a personality routine or LSDA. */ #ifdef MD_FALLBACK_FRAME_STATE_FOR MD_FALLBACK_FRAME_STATE_FOR (context, fs, success); return _URC_END_OF_STACK; --- 905,911 ---- { /* Couldn't find frame unwind info for this function. Try a target-specific fallback mechanism. This will necessarily ! not provide a personality routine or LSDA. */ #ifdef MD_FALLBACK_FRAME_STATE_FOR MD_FALLBACK_FRAME_STATE_FOR (context, fs, success); return _URC_END_OF_STACK; *************** uw_frame_state_for (struct _Unwind_Conte *** 919,930 **** execute_cfa_program (insn, end, context, fs); /* Locate augmentation for the fde. */ ! aug = (unsigned char *)fde + sizeof (*fde); aug += 2 * size_of_encoded_value (fs->fde_encoding); insn = NULL; if (fs->saw_z) { ! _Unwind_Ptr i; aug = read_uleb128 (aug, &i); insn = aug + i; } --- 929,940 ---- execute_cfa_program (insn, end, context, fs); /* Locate augmentation for the fde. */ ! aug = (unsigned char *) fde + sizeof (*fde); aug += 2 * size_of_encoded_value (fs->fde_encoding); insn = NULL; if (fs->saw_z) { ! _Unwind_Word i; aug = read_uleb128 (aug, &i); insn = aug + i; } *************** typedef struct frame_state *** 947,956 **** void *eh_ptr; long cfa_offset; long args_size; ! long reg_or_offset[DWARF_FRAME_REGISTERS+1]; unsigned short cfa_reg; unsigned short retaddr_column; ! char saved[DWARF_FRAME_REGISTERS+1]; } frame_state; struct frame_state * __frame_state_for (void *, struct frame_state *); --- 957,966 ---- void *eh_ptr; long cfa_offset; long args_size; ! long reg_or_offset[PRE_GCC3_DWARF_FRAME_REGISTERS+1]; unsigned short cfa_reg; unsigned short retaddr_column; ! char saved[PRE_GCC3_DWARF_FRAME_REGISTERS+1]; } frame_state; struct frame_state * __frame_state_for (void *, struct frame_state *); *************** __frame_state_for (void *pc_target, stru *** 977,983 **** if (fs.cfa_how == CFA_EXP) return 0; ! for (reg = 0; reg < DWARF_FRAME_REGISTERS + 1; reg++) { state_in->saved[reg] = fs.regs.reg[reg].how; switch (state_in->saved[reg]) --- 987,993 ---- if (fs.cfa_how == CFA_EXP) return 0; ! for (reg = 0; reg < PRE_GCC3_DWARF_FRAME_REGISTERS + 1; reg++) { state_in->saved[reg] = fs.regs.reg[reg].how; switch (state_in->saved[reg]) *************** uw_update_context_1 (struct _Unwind_Cont *** 1033,1039 **** that this will not be a problem. */ { const unsigned char *exp = fs->cfa_exp; ! _Unwind_Ptr len; exp = read_uleb128 (exp, &len); cfa = (void *) (_Unwind_Ptr) --- 1043,1049 ---- that this will not be a problem. */ { const unsigned char *exp = fs->cfa_exp; ! _Unwind_Word len; exp = read_uleb128 (exp, &len); cfa = (void *) (_Unwind_Ptr) *************** uw_update_context_1 (struct _Unwind_Cont *** 1061,1067 **** case REG_SAVED_EXP: { const unsigned char *exp = fs->regs.reg[i].loc.exp; ! _Unwind_Ptr len; _Unwind_Ptr val; exp = read_uleb128 (exp, &len); --- 1071,1077 ---- case REG_SAVED_EXP: { const unsigned char *exp = fs->regs.reg[i].loc.exp; ! _Unwind_Word len; _Unwind_Ptr val; exp = read_uleb128 (exp, &len); *************** uw_update_context (struct _Unwind_Contex *** 1087,1100 **** /* Fill in CONTEXT for top-of-stack. The only valid registers at this level will be the return address and the CFA. */ ! #define uw_init_context(CONTEXT) \ ! do { \ ! /* Do any necessary initialization to access arbitrary stack frames. \ ! On the SPARC, this means flushing the register windows. */ \ ! __builtin_unwind_init (); \ ! uw_init_context_1 (CONTEXT, __builtin_dwarf_cfa (), \ ! __builtin_return_address (0)); \ ! } while (0) static void uw_init_context_1 (struct _Unwind_Context *context, --- 1097,1112 ---- /* Fill in CONTEXT for top-of-stack. The only valid registers at this level will be the return address and the CFA. */ ! #define uw_init_context(CONTEXT) \ ! do \ ! { \ ! /* Do any necessary initialization to access arbitrary stack frames. \ ! On the SPARC, this means flushing the register windows. */ \ ! __builtin_unwind_init (); \ ! uw_init_context_1 (CONTEXT, __builtin_dwarf_cfa (), \ ! __builtin_return_address (0)); \ ! } \ ! while (0) static void uw_init_context_1 (struct _Unwind_Context *context, *************** uw_init_context_1 (struct _Unwind_Contex *** 1128,1139 **** macro because __builtin_eh_return must be invoked in the context of our caller. */ ! #define uw_install_context(CURRENT, TARGET) \ ! do { \ ! long offset = uw_install_context_1 ((CURRENT), (TARGET)); \ ! void *handler = __builtin_frob_return_addr ((TARGET)->ra); \ ! __builtin_eh_return (offset, handler); \ ! } while (0) static inline void init_dwarf_reg_size_table (void) --- 1140,1153 ---- macro because __builtin_eh_return must be invoked in the context of our caller. */ ! #define uw_install_context(CURRENT, TARGET) \ ! do \ ! { \ ! long offset = uw_install_context_1 ((CURRENT), (TARGET)); \ ! void *handler = __builtin_frob_return_addr ((TARGET)->ra); \ ! __builtin_eh_return (offset, handler); \ ! } \ ! while (0) static inline void init_dwarf_reg_size_table (void) diff -Nrc3pad gcc-3.0.4/gcc/unwind-pe.h gcc-3.1/gcc/unwind-pe.h *** gcc-3.0.4/gcc/unwind-pe.h Wed Aug 1 19:19:29 2001 --- gcc-3.1/gcc/unwind-pe.h Mon Jan 21 13:08:31 2002 *************** *** 1,28 **** /* Exception handling and frame unwind runtime interface routines. ! Copyright (C) 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* @@@ Really this should be out of line, but this also causes link compatibility problems with the base ABI. This is slightly better than duplicating code, however. */ ! /* If using C++, references to abort have to be qualified with std::. */ #if __cplusplus #define __gxx_abort std::abort #else --- 1,28 ---- /* Exception handling and frame unwind runtime interface routines. ! Copyright (C) 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it ! under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ! ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public ! License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* @@@ Really this should be out of line, but this also causes link compatibility problems with the base ABI. This is slightly better than duplicating code, however. */ ! /* If using C++, references to abort have to be qualified with std::. */ #if __cplusplus #define __gxx_abort std::abort #else *************** base_of_encoded_value (unsigned char enc *** 108,113 **** --- 108,164 ---- #endif + /* Read an unsigned leb128 value from P, store the value in VAL, return + P incremented past the value. We assume that a word is large enough to + hold any value so encoded; if it is smaller than a pointer on some target, + pointers should not be leb128 encoded on that target. */ + + static const unsigned char * + read_uleb128 (const unsigned char *p, _Unwind_Word *val) + { + unsigned int shift = 0; + unsigned char byte; + _Unwind_Word result; + + result = 0; + do + { + byte = *p++; + result |= (byte & 0x7f) << shift; + shift += 7; + } + while (byte & 0x80); + + *val = result; + return p; + } + + /* Similar, but read a signed leb128 value. */ + + static const unsigned char * + read_sleb128 (const unsigned char *p, _Unwind_Sword *val) + { + unsigned int shift = 0; + unsigned char byte; + _Unwind_Word result; + + result = 0; + do + { + byte = *p++; + result |= (byte & 0x7f) << shift; + shift += 7; + } + while (byte & 0x80); + + /* Sign-extend a negative value. */ + if (shift < 8 * sizeof(result) && (byte & 0x40) != 0) + result |= -(1L << shift); + + *val = (_Unwind_Sword) result; + return p; + } + /* Load an encoded value from memory at P. The value is returned in VAL; The function returns P incremented past the value. BASE is as given by base_of_encoded_value for this encoding in the appropriate context. */ *************** read_encoded_value_with_base (unsigned c *** 132,141 **** if (encoding == DW_EH_PE_aligned) { ! _Unwind_Ptr a = (_Unwind_Ptr)p; a = (a + sizeof (void *) - 1) & - sizeof(void *); result = *(_Unwind_Ptr *) a; ! p = (const unsigned char *)(a + sizeof (void *)); } else { --- 183,192 ---- if (encoding == DW_EH_PE_aligned) { ! _Unwind_Ptr a = (_Unwind_Ptr) p; a = (a + sizeof (void *) - 1) & - sizeof(void *); result = *(_Unwind_Ptr *) a; ! p = (const unsigned char *) (a + sizeof (void *)); } else { *************** read_encoded_value_with_base (unsigned c *** 148,183 **** case DW_EH_PE_uleb128: { ! unsigned int shift = 0; ! unsigned char byte; ! ! result = 0; ! do ! { ! byte = *p++; ! result |= (_Unwind_Ptr)(byte & 0x7f) << shift; ! shift += 7; ! } ! while (byte & 0x80); } break; case DW_EH_PE_sleb128: { ! unsigned int shift = 0; ! unsigned char byte; ! ! result = 0; ! do ! { ! byte = *p++; ! result |= (_Unwind_Ptr)(byte & 0x7f) << shift; ! shift += 7; ! } ! while (byte & 0x80); ! ! if (shift < 8 * sizeof(result) && (byte & 0x40) != 0) ! result |= -(1L << shift); } break; --- 199,215 ---- case DW_EH_PE_uleb128: { ! _Unwind_Word tmp; ! p = read_uleb128 (p, &tmp); ! result = (_Unwind_Ptr) tmp; } break; case DW_EH_PE_sleb128: { ! _Unwind_Sword tmp; ! p = read_sleb128 (p, &tmp); ! result = (_Unwind_Ptr) tmp; } break; *************** read_encoded_value_with_base (unsigned c *** 214,222 **** if (result != 0) { result += ((encoding & 0x70) == DW_EH_PE_pcrel ! ? (_Unwind_Ptr)u : base); if (encoding & DW_EH_PE_indirect) ! result = *(_Unwind_Ptr *)result; } } --- 246,254 ---- if (result != 0) { result += ((encoding & 0x70) == DW_EH_PE_pcrel ! ? (_Unwind_Ptr) u : base); if (encoding & DW_EH_PE_indirect) ! result = *(_Unwind_Ptr *) result; } } *************** read_encoded_value (struct _Unwind_Conte *** 239,258 **** } #endif - - /* Read an unsigned leb128 value from P, store the value in VAL, return - P incremented past the value. */ - - static inline const unsigned char * - read_uleb128 (const unsigned char *p, _Unwind_Ptr *val) - { - return read_encoded_value_with_base (DW_EH_PE_uleb128, 0, p, val); - } - - /* Similar, but read a signed leb128 value. */ - - static inline const unsigned char * - read_sleb128 (const unsigned char *p, _Unwind_Ptr *val) - { - return read_encoded_value_with_base (DW_EH_PE_sleb128, 0, p, val); - } --- 271,273 ---- diff -Nrc3pad gcc-3.0.4/gcc/unwind-sjlj.c gcc-3.1/gcc/unwind-sjlj.c *** gcc-3.0.4/gcc/unwind-sjlj.c Wed May 16 03:07:29 2001 --- gcc-3.1/gcc/unwind-sjlj.c Thu Jan 10 20:12:57 2002 *************** *** 1,33 **** /* DWARF2 exception handling and frame unwind runtime interface routines. ! Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "tconfig.h" #include "tsystem.h" #include "unwind.h" #include "gthr.h" ! #if USING_SJLJ_EXCEPTIONS #ifdef DONT_USE_BUILTIN_SETJMP #include #else #define setjmp __builtin_setjmp #define longjmp __builtin_longjmp #endif --- 1,39 ---- /* DWARF2 exception handling and frame unwind runtime interface routines. ! Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 ! Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it ! under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ! ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public ! License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #include "tconfig.h" #include "tsystem.h" #include "unwind.h" #include "gthr.h" ! #ifdef __USING_SJLJ_EXCEPTIONS__ #ifdef DONT_USE_BUILTIN_SETJMP + #ifndef inhibit_libc #include #else + typedef void *jmp_buf[JMP_BUF_SIZE]; + extern void longjmp(jmp_buf, int) __attribute__((noreturn)); + #endif + #else #define setjmp __builtin_setjmp #define longjmp __builtin_longjmp #endif *************** _Unwind_GetLanguageSpecificData (struct *** 197,216 **** } _Unwind_Ptr ! _Unwind_GetRegionStart (struct _Unwind_Context *context) { return 0; } #ifndef __ia64__ _Unwind_Ptr ! _Unwind_GetDataRelBase (struct _Unwind_Context *context) { return 0; } _Unwind_Ptr ! _Unwind_GetTextRelBase (struct _Unwind_Context *context) { return 0; } --- 203,222 ---- } _Unwind_Ptr ! _Unwind_GetRegionStart (struct _Unwind_Context *context __attribute__((unused)) ) { return 0; } #ifndef __ia64__ _Unwind_Ptr ! _Unwind_GetDataRelBase (struct _Unwind_Context *context __attribute__((unused)) ) { return 0; } _Unwind_Ptr ! _Unwind_GetTextRelBase (struct _Unwind_Context *context __attribute__((unused)) ) { return 0; } *************** uw_init_context (struct _Unwind_Context *** 246,256 **** /* ??? There appear to be bugs in integrate.c wrt __builtin_longjmp and virtual-stack-vars. An inline version of this segfaults on Sparc. */ ! #define uw_install_context(CURRENT, TARGET) \ ! do { \ ! _Unwind_SjLj_SetContext ((TARGET)->fc); \ ! longjmp ((TARGET)->fc->jbuf, 1); \ ! } while (0) static inline _Unwind_Ptr --- 252,264 ---- /* ??? There appear to be bugs in integrate.c wrt __builtin_longjmp and virtual-stack-vars. An inline version of this segfaults on Sparc. */ ! #define uw_install_context(CURRENT, TARGET) \ ! do \ ! { \ ! _Unwind_SjLj_SetContext ((TARGET)->fc); \ ! longjmp ((TARGET)->fc->jbuf, 1); \ ! } \ ! while (0) static inline _Unwind_Ptr diff -Nrc3pad gcc-3.0.4/gcc/unwind.h gcc-3.1/gcc/unwind.h *** gcc-3.0.4/gcc/unwind.h Tue Sep 4 18:19:41 2001 --- gcc-3.1/gcc/unwind.h Tue Sep 4 18:20:21 2001 *************** *** 1,22 **** /* Exception handling and frame unwind runtime interface routines. Copyright (C) 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* This is derived from the C++ ABI for IA-64. Where we diverge for cross-architecture compatibility are noted with "@@@". */ --- 1,22 ---- /* Exception handling and frame unwind runtime interface routines. Copyright (C) 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it ! under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ! ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public ! License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* This is derived from the C++ ABI for IA-64. Where we diverge for cross-architecture compatibility are noted with "@@@". */ diff -Nrc3pad gcc-3.0.4/gcc/unwind.inc gcc-3.1/gcc/unwind.inc *** gcc-3.0.4/gcc/unwind.inc Tue Sep 4 18:19:41 2001 --- gcc-3.1/gcc/unwind.inc Wed Sep 19 23:58:10 2001 *************** *** 1,22 **** /* Exception handling and frame unwind runtime interface routines. -*- C -*- Copyright (C) 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* This is derived from the C++ ABI for IA-64. Where we diverge for cross-architecture compatibility are noted with "@@@". --- 1,22 ---- /* Exception handling and frame unwind runtime interface routines. -*- C -*- Copyright (C) 2001 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it ! under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ! ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public ! License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* This is derived from the C++ ABI for IA-64. Where we diverge for cross-architecture compatibility are noted with "@@@". *************** _Unwind_RaiseException_Phase2(struct _Un *** 47,53 **** ? _UA_HANDLER_FRAME : 0); if (code != _URC_NO_REASON) ! /* Some error encountered. Ususally the unwinder doesn't diagnose these and merely crashes. */ return _URC_FATAL_PHASE2_ERROR; --- 47,53 ---- ? _UA_HANDLER_FRAME : 0); if (code != _URC_NO_REASON) ! /* Some error encountered. Usually the unwinder doesn't diagnose these and merely crashes. */ return _URC_FATAL_PHASE2_ERROR; diff -Nrc3pad gcc-3.0.4/gcc/varasm.c gcc-3.1/gcc/varasm.c *** gcc-3.0.4/gcc/varasm.c Sat Sep 22 01:33:20 2001 --- gcc-3.1/gcc/varasm.c Wed May 8 14:36:33 2002 *************** *** 1,23 **** /* Output variables, constants and external declarations, for GNU compiler. Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, ! 1998, 1999, 2000, 2001 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* This file handles generation of all the assembler code --- 1,23 ---- /* Output variables, constants and external declarations, for GNU compiler. Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, ! 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* This file handles generation of all the assembler code *************** Boston, MA 02111-1307, USA. */ *** 29,35 **** #include "config.h" #include "system.h" - #include #include "rtl.h" #include "tree.h" #include "flags.h" --- 29,34 ---- *************** Boston, MA 02111-1307, USA. */ *** 40,55 **** #include "output.h" #include "real.h" #include "toplev.h" - #include "dbxout.h" - #include "sdbout.h" #include "obstack.h" #include "hashtab.h" #include "c-pragma.h" #include "ggc.h" #include "tm_p.h" #ifdef XCOFF_DEBUGGING_INFO ! #include "xcoffout.h" #endif #ifndef TRAMPOLINE_ALIGNMENT --- 39,56 ---- #include "output.h" #include "real.h" #include "toplev.h" #include "obstack.h" #include "hashtab.h" #include "c-pragma.h" #include "ggc.h" + #include "langhooks.h" #include "tm_p.h" + #include "debug.h" + #include "target.h" #ifdef XCOFF_DEBUGGING_INFO ! #include "xcoffout.h" /* Needed for external data ! declarations for e.g. AIX 4.x. */ #endif #ifndef TRAMPOLINE_ALIGNMENT *************** Boston, MA 02111-1307, USA. */ *** 60,73 **** #define ASM_STABS_OP "\t.stabs\t" #endif - /* Define the prefix to use when check_memory_usage_flag is enable. */ - #define CHKR_PREFIX "_CHKR_" - #define CHKR_PREFIX_SIZE (sizeof (CHKR_PREFIX) - 1) - - /* File in which assembler code is being written. */ - - extern FILE *asm_out_file; - /* The (assembler) name of the first globally-visible object output. */ const char *first_global_object_name; const char *weak_global_object_name; --- 61,66 ---- *************** struct varasm_status *** 100,112 **** /* Current offset in constant pool (does not include any machine-specific header). */ ! int x_pool_offset; /* Chain of all CONST_DOUBLE rtx's constructed for the current function. ! They are chained through the CONST_DOUBLE_CHAIN. ! A CONST_DOUBLE rtx has CONST_DOUBLE_MEM != cc0_rtx iff it is on this chain. ! In that case, CONST_DOUBLE_MEM is either a MEM, ! or const0_rtx if no MEM has been made for this CONST_DOUBLE yet. */ rtx x_const_double_chain; }; --- 93,102 ---- /* Current offset in constant pool (does not include any machine-specific header). */ ! HOST_WIDE_INT x_pool_offset; /* Chain of all CONST_DOUBLE rtx's constructed for the current function. ! They are chained through the CONST_DOUBLE_CHAIN. */ rtx x_const_double_chain; }; *************** int size_directive_output; *** 139,144 **** --- 129,143 ---- tree last_assemble_variable_decl; + /* RTX_UNCHANGING_P in a MEM can mean it is stored into, for initialization. + So giving constant the alias set for the type will allow such + initializations to appear to conflict with the load of the constant. We + avoid this by giving all constants an alias set for just constants. + Since there will be no stores to that alias set, nothing will ever + conflict with them. */ + + static HOST_WIDE_INT const_alias_set; + static const char *strip_reg_name PARAMS ((const char *)); static int contains_pointers_p PARAMS ((tree)); static void decode_addr_const PARAMS ((tree, struct addr_const *)); *************** static int mark_constant PARAMS ((rtx * *** 164,173 **** static int output_addressed_constants PARAMS ((tree)); static void output_after_function_constants PARAMS ((void)); static unsigned HOST_WIDE_INT array_size_for_constructor PARAMS ((tree)); ! static void output_constructor PARAMS ((tree, int)); ! #ifdef ASM_WEAKEN_LABEL ! static void remove_from_pending_weak_list PARAMS ((const char *)); ! #endif #ifdef ASM_OUTPUT_BSS static void asm_output_bss PARAMS ((FILE *, tree, const char *, int, int)); #endif --- 163,174 ---- static int output_addressed_constants PARAMS ((tree)); static void output_after_function_constants PARAMS ((void)); static unsigned HOST_WIDE_INT array_size_for_constructor PARAMS ((tree)); ! static unsigned min_align PARAMS ((unsigned, unsigned)); ! static void output_constructor PARAMS ((tree, HOST_WIDE_INT, ! unsigned int)); ! static void globalize_decl PARAMS ((tree)); ! static int in_named_entry_eq PARAMS ((const PTR, const PTR)); ! static hashval_t in_named_entry_hash PARAMS ((const PTR)); #ifdef ASM_OUTPUT_BSS static void asm_output_bss PARAMS ((FILE *, tree, const char *, int, int)); #endif *************** static hashval_t const_str_htab_hash PAR *** 185,197 **** static int const_str_htab_eq PARAMS ((const void *x, const void *y)); static void const_str_htab_del PARAMS ((void *)); static void asm_emit_uninitialised PARAMS ((tree, const char*, int, int)); static enum in_section { no_section, in_text, in_data, in_named #ifdef BSS_SECTION_ASM_OP , in_bss #endif ! #ifdef EH_FRAME_SECTION_ASM_OP ! , in_eh_frame #endif #ifdef EXTRA_SECTIONS , EXTRA_SECTIONS --- 186,203 ---- static int const_str_htab_eq PARAMS ((const void *x, const void *y)); static void const_str_htab_del PARAMS ((void *)); static void asm_emit_uninitialised PARAMS ((tree, const char*, int, int)); + static void resolve_unique_section PARAMS ((tree, int)); + static void mark_weak PARAMS ((tree)); static enum in_section { no_section, in_text, in_data, in_named #ifdef BSS_SECTION_ASM_OP , in_bss #endif ! #ifdef CTORS_SECTION_ASM_OP ! , in_ctors ! #endif ! #ifdef DTORS_SECTION_ASM_OP ! , in_dtors #endif #ifdef EXTRA_SECTIONS , EXTRA_SECTIONS *************** static enum in_section { no_section, in_ *** 204,213 **** ((TREE_CODE (DECL) == FUNCTION_DECL || TREE_CODE (DECL) == VAR_DECL) \ && DECL_SECTION_NAME (DECL) != NULL_TREE) #endif ! /* Text of section name when in_section == in_named. */ static const char *in_named_name; /* Define functions like text_section for any extra sections. */ #ifdef EXTRA_SECTION_FUNCTIONS EXTRA_SECTION_FUNCTIONS --- 210,230 ---- ((TREE_CODE (DECL) == FUNCTION_DECL || TREE_CODE (DECL) == VAR_DECL) \ && DECL_SECTION_NAME (DECL) != NULL_TREE) #endif ! /* Text of section name when in_section == in_named. */ static const char *in_named_name; + /* Hash table of flags that have been used for a particular named section. */ + + struct in_named_entry + { + const char *name; + unsigned int flags; + bool declared; + }; + + static htab_t in_named_htab; + /* Define functions like text_section for any extra sections. */ #ifdef EXTRA_SECTION_FUNCTIONS EXTRA_SECTION_FUNCTIONS *************** text_section () *** 220,226 **** --- 237,247 ---- { if (in_section != in_text) { + #ifdef TEXT_SECTION + TEXT_SECTION (); + #else fprintf (asm_out_file, "%s\n", TEXT_SECTION_ASM_OP); + #endif in_section = in_text; } } *************** data_section () *** 247,253 **** } } /* Tell assembler to ALWAYS switch to data section, in case ! it's not sure where it it. */ void force_data_section () --- 268,274 ---- } } /* Tell assembler to ALWAYS switch to data section, in case ! it's not sure where it is. */ void force_data_section () *************** in_data_section () *** 285,290 **** --- 306,428 ---- return in_section == in_data; } + /* Helper routines for maintaining in_named_htab. */ + + static int + in_named_entry_eq (p1, p2) + const PTR p1; + const PTR p2; + { + const struct in_named_entry *old = p1; + const char *new = p2; + + return strcmp (old->name, new) == 0; + } + + static hashval_t + in_named_entry_hash (p) + const PTR p; + { + const struct in_named_entry *old = p; + return htab_hash_string (old->name); + } + + /* If SECTION has been seen before as a named section, return the flags + that were used. Otherwise, return 0. Note, that 0 is a perfectly valid + set of flags for a section to have, so 0 does not mean that the section + has not been seen. */ + + unsigned int + get_named_section_flags (section) + const char *section; + { + struct in_named_entry **slot; + + slot = (struct in_named_entry**) + htab_find_slot_with_hash (in_named_htab, section, + htab_hash_string (section), NO_INSERT); + + return slot ? (*slot)->flags : 0; + } + + /* Returns true if the section has been declared before. Sets internal + flag on this section in in_named_hash so subsequent calls on this + section will return false. */ + + bool + named_section_first_declaration (name) + const char *name; + { + struct in_named_entry **slot; + + slot = (struct in_named_entry**) + htab_find_slot_with_hash (in_named_htab, name, + htab_hash_string (name), NO_INSERT); + if (! (*slot)->declared) + { + (*slot)->declared = true; + return true; + } + else + { + return false; + } + } + + + /* Record FLAGS for SECTION. If SECTION was previously recorded with a + different set of flags, return false. */ + + bool + set_named_section_flags (section, flags) + const char *section; + unsigned int flags; + { + struct in_named_entry **slot, *entry; + + slot = (struct in_named_entry**) + htab_find_slot_with_hash (in_named_htab, section, + htab_hash_string (section), INSERT); + entry = *slot; + + if (!entry) + { + entry = (struct in_named_entry *) xmalloc (sizeof (*entry)); + *slot = entry; + entry->name = ggc_strdup (section); + entry->flags = flags; + entry->declared = false; + } + else if (entry->flags != flags) + return false; + + return true; + } + + /* Tell assembler to change to section NAME with attributes FLAGS. */ + + void + named_section_flags (name, flags) + const char *name; + unsigned int flags; + { + if (in_section != in_named || strcmp (name, in_named_name) != 0) + { + if (! set_named_section_flags (name, flags)) + abort (); + + (* targetm.asm_out.named_section) (name, flags); + + if (flags & SECTION_FORGET) + in_section = no_section; + else + { + in_named_name = ggc_strdup (name); + in_section = in_named; + } + } + } + /* Tell assembler to change to section NAME for DECL. If DECL is NULL, just switch to section NAME. If NAME is NULL, get the name from DECL. *************** void *** 294,320 **** named_section (decl, name, reloc) tree decl; const char *name; ! int reloc ATTRIBUTE_UNUSED; { if (decl != NULL_TREE && !DECL_P (decl)) abort (); if (name == NULL) name = TREE_STRING_POINTER (DECL_SECTION_NAME (decl)); ! if (in_section != in_named || strcmp (name, in_named_name)) ! { ! #ifdef ASM_OUTPUT_SECTION_NAME ! ASM_OUTPUT_SECTION_NAME (asm_out_file, decl, name, reloc); ! #else ! /* Section attributes are not supported if this macro isn't provided - ! some host formats don't support them at all. The front-end should ! already have flagged this as an error. */ ! abort (); ! #endif ! in_named_name = ggc_strdup (name); ! in_section = in_named; } } #ifdef BSS_SECTION_ASM_OP --- 432,475 ---- named_section (decl, name, reloc) tree decl; const char *name; ! int reloc; { + unsigned int flags; + if (decl != NULL_TREE && !DECL_P (decl)) abort (); if (name == NULL) name = TREE_STRING_POINTER (DECL_SECTION_NAME (decl)); ! flags = (* targetm.section_type_flags) (decl, name, reloc); ! /* Sanity check user variables for flag changes. Non-user ! section flag changes will abort in named_section_flags. ! However, don't complain if SECTION_OVERRIDE is set. ! We trust that the setter knows that it is safe to ignore ! the default flags for this decl. */ ! if (decl && ! set_named_section_flags (name, flags)) ! { ! flags = get_named_section_flags (name); ! if ((flags & SECTION_OVERRIDE) == 0) ! error_with_decl (decl, "%s causes a section type conflict"); } + + named_section_flags (name, flags); + } + + /* If required, set DECL_SECTION_NAME to a unique name. */ + + static void + resolve_unique_section (decl, reloc) + tree decl; + int reloc ATTRIBUTE_UNUSED; + { + if (DECL_SECTION_NAME (decl) == NULL_TREE + && (flag_function_sections + || (targetm.have_named_sections + && DECL_ONE_ONLY (decl)))) + UNIQUE_SECTION (decl, reloc); } #ifdef BSS_SECTION_ASM_OP *************** asm_output_bss (file, decl, name, size, *** 375,381 **** static void asm_output_aligned_bss (file, decl, name, size, align) FILE *file; ! tree decl; const char *name; int size, align; { --- 530,536 ---- static void asm_output_aligned_bss (file, decl, name, size, align) FILE *file; ! tree decl ATTRIBUTE_UNUSED; const char *name; int size, align; { *************** asm_output_aligned_bss (file, decl, name *** 396,413 **** #endif /* BSS_SECTION_ASM_OP */ - #ifdef EH_FRAME_SECTION_ASM_OP - void - eh_frame_section () - { - if (in_section != in_eh_frame) - { - fprintf (asm_out_file, "%s\n", EH_FRAME_SECTION_ASM_OP); - in_section = in_eh_frame; - } - } - #endif - /* Switch to the section for function DECL. If DECL is NULL_TREE, switch to the text section. --- 551,556 ---- *************** variable_section (decl, reloc) *** 452,458 **** for them. */ #ifdef SELECT_SECTION ! SELECT_SECTION (decl, reloc); #else if (DECL_READONLY_SECTION (decl, reloc)) readonly_data_section (); --- 595,601 ---- for them. */ #ifdef SELECT_SECTION ! SELECT_SECTION (decl, reloc, DECL_ALIGN (decl)); #else if (DECL_READONLY_SECTION (decl, reloc)) readonly_data_section (); *************** variable_section (decl, reloc) *** 466,485 **** table. */ void ! exception_section () { ! #if defined (EXCEPTION_SECTION) ! EXCEPTION_SECTION (); ! #else ! #ifdef ASM_OUTPUT_SECTION_NAME ! named_section (NULL_TREE, ".gcc_except_table", 0); ! #else ! if (flag_pic) data_section (); else readonly_data_section (); #endif #endif } /* Given NAME, a putative register name, discard any customary prefixes. */ --- 609,727 ---- table. */ void ! default_exception_section () { ! if (targetm.have_named_sections) ! named_section (NULL_TREE, ".gcc_except_table", 0); ! else if (flag_pic) data_section (); else readonly_data_section (); + } + + /* Tell assembler to switch to the section for string merging. */ + + void + mergeable_string_section (decl, align, flags) + tree decl ATTRIBUTE_UNUSED; + unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED; + unsigned int flags ATTRIBUTE_UNUSED; + { + #ifdef HAVE_GAS_SHF_MERGE + if (flag_merge_constants + && TREE_CODE (decl) == STRING_CST + && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE + && align <= 256 + && TREE_STRING_LENGTH (decl) >= int_size_in_bytes (TREE_TYPE (decl))) + { + enum machine_mode mode; + unsigned int modesize; + const char *str; + int i, j, len, unit; + char name[30]; + + mode = TYPE_MODE (TREE_TYPE (TREE_TYPE (decl))); + modesize = GET_MODE_BITSIZE (mode); + if (modesize >= 8 && modesize <= 256 + && (modesize & (modesize - 1)) == 0) + { + if (align < modesize) + align = modesize; + + str = TREE_STRING_POINTER (decl); + len = TREE_STRING_LENGTH (decl); + unit = GET_MODE_SIZE (mode); + + /* Check for embedded NUL characters. */ + for (i = 0; i < len; i += unit) + { + for (j = 0; j < unit; j++) + if (str [i + j] != '\0') + break; + if (j == unit) + break; + } + if (i == len - unit) + { + sprintf (name, ".rodata.str%d.%d", modesize / 8, + (int) (align / 8)); + flags |= (modesize / 8) | SECTION_MERGE | SECTION_STRINGS; + if (!i && modesize < align) + { + /* A "" string with requested alignment greater than + character size might cause a problem: + if some other string required even bigger + alignment than "", then linker might think the + "" is just part of padding after some other string + and not put it into the hash table initially. + But this means "" could have smaller alignment + than requested. */ + #ifdef ASM_OUTPUT_SECTION_START + named_section_flags (name, flags); + ASM_OUTPUT_SECTION_START (asm_out_file); + #else + readonly_data_section (); + #endif + return; + } + + named_section_flags (name, flags); + return; + } + } + } #endif + readonly_data_section (); + } + + /* Tell assembler to switch to the section for constant merging. */ + + void + mergeable_constant_section (mode, align, flags) + enum machine_mode mode ATTRIBUTE_UNUSED; + unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED; + unsigned int flags ATTRIBUTE_UNUSED; + { + #ifdef HAVE_GAS_SHF_MERGE + unsigned int modesize = GET_MODE_BITSIZE (mode); + + if (flag_merge_constants + && mode != VOIDmode + && mode != BLKmode + && modesize <= align + && align >= 8 + && align <= 256 + && (align & (align - 1)) == 0) + { + char name[24]; + + sprintf (name, ".rodata.cst%d", (int) (align / 8)); + flags |= (align / 8) | SECTION_MERGE; + named_section_flags (name, flags); + return; + } #endif + readonly_data_section (); } /* Given NAME, a putative register name, discard any customary prefixes. */ *************** decode_reg_name (asmspec) *** 515,524 **** /* Get rid of confusing prefixes. */ asmspec = strip_reg_name (asmspec); ! /* Allow a decimal number as a "register name". */ for (i = strlen (asmspec) - 1; i >= 0; i--) ! if (! (asmspec[i] >= '0' && asmspec[i] <= '9')) break; if (asmspec[0] != 0 && i < 0) { --- 757,766 ---- /* Get rid of confusing prefixes. */ asmspec = strip_reg_name (asmspec); ! /* Allow a decimal number as a "register name". */ for (i = strlen (asmspec) - 1; i >= 0; i--) ! if (! ISDIGIT (asmspec[i])) break; if (asmspec[0] != 0 && i < 0) { *************** decode_reg_name (asmspec) *** 536,542 **** #ifdef ADDITIONAL_REGISTER_NAMES { ! static struct { const char *name; int number; } table[] = ADDITIONAL_REGISTER_NAMES; for (i = 0; i < (int) ARRAY_SIZE (table); i++) --- 778,784 ---- #ifdef ADDITIONAL_REGISTER_NAMES { ! static const struct { const char *const name; const int number; } table[] = ADDITIONAL_REGISTER_NAMES; for (i = 0; i < (int) ARRAY_SIZE (table); i++) *************** make_decl_rtl (decl, asmspec) *** 578,583 **** --- 820,826 ---- const char *name = 0; const char *new_name = 0; int reg_number; + rtx x; /* Check that we are not being given an automatic variable. */ /* A weak alias has TREE_PUBLIC set but not the other bits. */ *************** make_decl_rtl (decl, asmspec) *** 590,596 **** && !DECL_REGISTER (decl))) abort (); /* And that we were not given a type or a label. */ ! else if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == LABEL_DECL) abort (); --- 833,839 ---- && !DECL_REGISTER (decl))) abort (); /* And that we were not given a type or a label. */ ! else if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == LABEL_DECL) abort (); *************** make_decl_rtl (decl, asmspec) *** 600,609 **** { /* If the old RTL had the wrong mode, fix the mode. */ if (GET_MODE (DECL_RTL (decl)) != DECL_MODE (decl)) ! { ! rtx rtl = DECL_RTL (decl); ! PUT_MODE (rtl, DECL_MODE (decl)); ! } /* ??? Another way to do this would be to do what halfpic.c does and maintain a hashed table of such critters. */ --- 843,850 ---- { /* If the old RTL had the wrong mode, fix the mode. */ if (GET_MODE (DECL_RTL (decl)) != DECL_MODE (decl)) ! SET_DECL_RTL (decl, adjust_address_nv (DECL_RTL (decl), ! DECL_MODE (decl), 0)); /* ??? Another way to do this would be to do what halfpic.c does and maintain a hashed table of such critters. */ *************** make_decl_rtl (decl, asmspec) *** 660,673 **** /* If the user specified one of the eliminables registers here, e.g., FRAME_POINTER_REGNUM, we don't want to get this variable ! confused with that register and be eliminated. Although this ! usage is somewhat suspect, we nevertheless use the following ! kludge to avoid setting DECL_RTL to frame_pointer_rtx. */ ! SET_DECL_RTL (decl, ! gen_rtx_REG (DECL_MODE (decl), ! FIRST_PSEUDO_REGISTER)); ! REGNO (DECL_RTL (decl)) = reg_number; REG_USERVAR_P (DECL_RTL (decl)) = 1; if (TREE_STATIC (decl)) --- 901,911 ---- /* If the user specified one of the eliminables registers here, e.g., FRAME_POINTER_REGNUM, we don't want to get this variable ! confused with that register and be eliminated. This usage is ! somewhat suspect... */ ! SET_DECL_RTL (decl, gen_rtx_raw_REG (DECL_MODE (decl), reg_number)); ! ORIGINAL_REGNO (DECL_RTL (decl)) = reg_number; REG_USERVAR_P (DECL_RTL (decl)) = 1; if (TREE_STATIC (decl)) *************** make_decl_rtl (decl, asmspec) *** 695,701 **** "register name given for non-register variable `%s'"); /* Specifying a section attribute on a variable forces it into a ! non-.bss section, and thus it cannot be common. */ if (TREE_CODE (decl) == VAR_DECL && DECL_SECTION_NAME (decl) != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE --- 933,939 ---- "register name given for non-register variable `%s'"); /* Specifying a section attribute on a variable forces it into a ! non-.bss section, and thus it cannot be common. */ if (TREE_CODE (decl) == VAR_DECL && DECL_SECTION_NAME (decl) != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE *************** make_decl_rtl (decl, asmspec) *** 712,736 **** && name == IDENTIFIER_POINTER (DECL_NAME (decl))) { char *label; ASM_FORMAT_PRIVATE_NAME (label, name, var_labelno); var_labelno++; new_name = label; } - /* When -fprefix-function-name is used, the functions - names are prefixed. Only nested function names are not - prefixed. */ - else if (flag_prefix_function_name && TREE_CODE (decl) == FUNCTION_DECL) - { - size_t name_len = IDENTIFIER_LENGTH (DECL_ASSEMBLER_NAME (decl)); - char *pname; - - pname = alloca (name_len + CHKR_PREFIX_SIZE + 1); - memcpy (pname, CHKR_PREFIX, CHKR_PREFIX_SIZE); - memcpy (pname + CHKR_PREFIX_SIZE, name, name_len + 1); - new_name = pname; - } - if (name != new_name) { SET_DECL_ASSEMBLER_NAME (decl, get_identifier (new_name)); --- 950,961 ---- && name == IDENTIFIER_POINTER (DECL_NAME (decl))) { char *label; + ASM_FORMAT_PRIVATE_NAME (label, name, var_labelno); var_labelno++; new_name = label; } if (name != new_name) { SET_DECL_ASSEMBLER_NAME (decl, get_identifier (new_name)); *************** make_decl_rtl (decl, asmspec) *** 738,755 **** } /* If this variable is to be treated as volatile, show its ! tree node has side effects. */ if ((flag_volatile_global && TREE_CODE (decl) == VAR_DECL && TREE_PUBLIC (decl)) || ((flag_volatile_static && TREE_CODE (decl) == VAR_DECL && (TREE_PUBLIC (decl) || TREE_STATIC (decl))))) TREE_SIDE_EFFECTS (decl) = 1; ! SET_DECL_RTL (decl, gen_rtx_MEM (DECL_MODE (decl), ! gen_rtx_SYMBOL_REF (Pmode, name))); ! SYMBOL_REF_WEAK (XEXP (DECL_RTL (decl), 0)) = DECL_WEAK (decl); if (TREE_CODE (decl) != FUNCTION_DECL) ! set_mem_attributes (DECL_RTL (decl), decl, 1); /* Optionally set flags or add text to the name to record information such as that it is a function name. --- 963,980 ---- } /* If this variable is to be treated as volatile, show its ! tree node has side effects. */ if ((flag_volatile_global && TREE_CODE (decl) == VAR_DECL && TREE_PUBLIC (decl)) || ((flag_volatile_static && TREE_CODE (decl) == VAR_DECL && (TREE_PUBLIC (decl) || TREE_STATIC (decl))))) TREE_SIDE_EFFECTS (decl) = 1; ! x = gen_rtx_MEM (DECL_MODE (decl), gen_rtx_SYMBOL_REF (Pmode, name)); ! SYMBOL_REF_WEAK (XEXP (x, 0)) = DECL_WEAK (decl); if (TREE_CODE (decl) != FUNCTION_DECL) ! set_mem_attributes (x, decl, 1); ! SET_DECL_RTL (decl, x); /* Optionally set flags or add text to the name to record information such as that it is a function name. *************** assemble_constant_align (exp) *** 788,794 **** #endif if (align > BITS_PER_UNIT) ! ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (align / BITS_PER_UNIT)); } /* Output a string of literal assembler code --- 1013,1021 ---- #endif if (align > BITS_PER_UNIT) ! { ! ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (align / BITS_PER_UNIT)); ! } } /* Output a string of literal assembler code *************** assemble_asm (string) *** 806,889 **** fprintf (asm_out_file, "\t%s\n", TREE_STRING_POINTER (string)); } ! #if 0 /* This should no longer be needed, because ! flag_gnu_linker should be 0 on these systems, ! which should prevent any output ! if ASM_OUTPUT_CONSTRUCTOR and ASM_OUTPUT_DESTRUCTOR are absent. */ ! #if !(defined(DBX_DEBUGGING_INFO) && !defined(FASCIST_ASSEMBLER)) ! #ifndef ASM_OUTPUT_CONSTRUCTOR ! #define ASM_OUTPUT_CONSTRUCTOR(file, name) ! #endif ! #ifndef ASM_OUTPUT_DESTRUCTOR ! #define ASM_OUTPUT_DESTRUCTOR(file, name) ! #endif ! #endif ! #endif /* 0 */ ! /* Record an element in the table of global destructors. ! How this is done depends on what sort of assembler and linker ! are in use. ! NAME should be the name of a global function to be called ! at exit time. This name is output using assemble_name. */ void ! assemble_destructor (name) ! const char *name; { ! #ifdef ASM_OUTPUT_DESTRUCTOR ! ASM_OUTPUT_DESTRUCTOR (asm_out_file, name); ! #else ! if (flag_gnu_linker) { ! /* Now tell GNU LD that this is part of the static destructor set. */ ! /* This code works for any machine provided you use GNU as/ld. */ ! fprintf (asm_out_file, "%s\"___DTOR_LIST__\",22,0,0,", ASM_STABS_OP); ! assemble_name (asm_out_file, name); fputc ('\n', asm_out_file); } - #endif } /* Likewise for global constructors. */ void ! assemble_constructor (name) ! const char *name; { ! #ifdef ASM_OUTPUT_CONSTRUCTOR ! ASM_OUTPUT_CONSTRUCTOR (asm_out_file, name); ! #else ! if (flag_gnu_linker) { ! /* Now tell GNU LD that this is part of the static constructor set. */ ! /* This code works for any machine provided you use GNU as/ld. */ ! fprintf (asm_out_file, "%s\"___CTOR_LIST__\",22,0,0,", ASM_STABS_OP); ! assemble_name (asm_out_file, name); ! fputc ('\n', asm_out_file); } - #endif - } ! /* Likewise for entries we want to record for garbage collection. ! Garbage collection is still under development. */ void ! assemble_gc_entry (name) ! const char *name; { ! #ifdef ASM_OUTPUT_GC_ENTRY ! ASM_OUTPUT_GC_ENTRY (asm_out_file, name); ! #else ! if (flag_gnu_linker) { ! /* Now tell GNU LD that this is part of the static constructor set. */ ! fprintf (asm_out_file, "%s\"___PTR_LIST__\",22,0,0,", ASM_STABS_OP); ! assemble_name (asm_out_file, name); fputc ('\n', asm_out_file); } - #endif } /* CONSTANT_POOL_BEFORE_FUNCTION may be defined as an expression with a non-zero value if the constant pool should be output before the --- 1033,1163 ---- fprintf (asm_out_file, "\t%s\n", TREE_STRING_POINTER (string)); } ! /* Record an element in the table of global destructors. SYMBOL is ! a SYMBOL_REF of the function to be called; PRIORITY is a number ! between 0 and MAX_INIT_PRIORITY. */ ! void ! default_stabs_asm_out_destructor (symbol, priority) ! rtx symbol; ! int priority ATTRIBUTE_UNUSED; ! { ! /* Tell GNU LD that this is part of the static destructor set. ! This will work for any system that uses stabs, most usefully ! aout systems. */ ! fprintf (asm_out_file, "%s\"___DTOR_LIST__\",22,0,0,", ASM_STABS_OP); ! assemble_name (asm_out_file, XSTR (symbol, 0)); ! fputc ('\n', asm_out_file); ! } ! void ! default_named_section_asm_out_destructor (symbol, priority) ! rtx symbol; ! int priority; ! { ! const char *section = ".dtors"; ! char buf[16]; ! ! /* ??? This only works reliably with the GNU linker. */ ! if (priority != DEFAULT_INIT_PRIORITY) ! { ! sprintf (buf, ".dtors.%.5u", ! /* Invert the numbering so the linker puts us in the proper ! order; constructors are run from right to left, and the ! linker sorts in increasing order. */ ! MAX_INIT_PRIORITY - priority); ! section = buf; ! } + named_section_flags (section, SECTION_WRITE); + assemble_align (POINTER_SIZE); + assemble_integer (symbol, POINTER_SIZE / BITS_PER_UNIT, POINTER_SIZE, 1); + } + + #ifdef DTORS_SECTION_ASM_OP void ! dtors_section () { ! if (in_section != in_dtors) { ! in_section = in_dtors; ! fputs (DTORS_SECTION_ASM_OP, asm_out_file); fputc ('\n', asm_out_file); } } + void + default_dtor_section_asm_out_destructor (symbol, priority) + rtx symbol; + int priority ATTRIBUTE_UNUSED; + { + dtors_section (); + assemble_align (POINTER_SIZE); + assemble_integer (symbol, POINTER_SIZE / BITS_PER_UNIT, POINTER_SIZE, 1); + } + #endif + /* Likewise for global constructors. */ void ! default_stabs_asm_out_constructor (symbol, priority) ! rtx symbol; ! int priority ATTRIBUTE_UNUSED; { ! /* Tell GNU LD that this is part of the static destructor set. ! This will work for any system that uses stabs, most usefully ! aout systems. */ ! fprintf (asm_out_file, "%s\"___CTOR_LIST__\",22,0,0,", ASM_STABS_OP); ! assemble_name (asm_out_file, XSTR (symbol, 0)); ! fputc ('\n', asm_out_file); ! } ! ! void ! default_named_section_asm_out_constructor (symbol, priority) ! rtx symbol; ! int priority; ! { ! const char *section = ".ctors"; ! char buf[16]; ! ! /* ??? This only works reliably with the GNU linker. */ ! if (priority != DEFAULT_INIT_PRIORITY) { ! sprintf (buf, ".ctors.%.5u", ! /* Invert the numbering so the linker puts us in the proper ! order; constructors are run from right to left, and the ! linker sorts in increasing order. */ ! MAX_INIT_PRIORITY - priority); ! section = buf; } ! named_section_flags (section, SECTION_WRITE); ! assemble_align (POINTER_SIZE); ! assemble_integer (symbol, POINTER_SIZE / BITS_PER_UNIT, POINTER_SIZE, 1); ! } + #ifdef CTORS_SECTION_ASM_OP void ! ctors_section () { ! if (in_section != in_ctors) { ! in_section = in_ctors; ! fputs (CTORS_SECTION_ASM_OP, asm_out_file); fputc ('\n', asm_out_file); } } + + void + default_ctor_section_asm_out_constructor (symbol, priority) + rtx symbol; + int priority ATTRIBUTE_UNUSED; + { + ctors_section (); + assemble_align (POINTER_SIZE); + assemble_integer (symbol, POINTER_SIZE / BITS_PER_UNIT, POINTER_SIZE, 1); + } + #endif /* CONSTANT_POOL_BEFORE_FUNCTION may be defined as an expression with a non-zero value if the constant pool should be output before the *************** assemble_start_function (decl, fnname) *** 914,934 **** if (CONSTANT_POOL_BEFORE_FUNCTION) output_constant_pool (fnname, decl); ! #ifdef ASM_OUTPUT_SECTION_NAME ! /* If the function is to be put in its own section and it's not in a section ! already, indicate so. */ ! if ((flag_function_sections ! && DECL_SECTION_NAME (decl) == NULL_TREE) ! || UNIQUE_SECTION_P (decl)) ! UNIQUE_SECTION (decl, 0); ! #endif ! function_section (decl); /* Tell assembler to move to target machine's alignment for functions. */ align = floor_log2 (FUNCTION_BOUNDARY / BITS_PER_UNIT); if (align > 0) ! ASM_OUTPUT_ALIGN (asm_out_file, align); /* Handle a user-specified function alignment. Note that we still need to align to FUNCTION_BOUNDARY, as above, --- 1188,1202 ---- if (CONSTANT_POOL_BEFORE_FUNCTION) output_constant_pool (fnname, decl); ! resolve_unique_section (decl, 0); function_section (decl); /* Tell assembler to move to target machine's alignment for functions. */ align = floor_log2 (FUNCTION_BOUNDARY / BITS_PER_UNIT); if (align > 0) ! { ! ASM_OUTPUT_ALIGN (asm_out_file, align); ! } /* Handle a user-specified function alignment. Note that we still need to align to FUNCTION_BOUNDARY, as above, *************** assemble_start_function (decl, fnname) *** 936,942 **** if (align_functions_log > align) { #ifdef ASM_OUTPUT_MAX_SKIP_ALIGN ! ASM_OUTPUT_MAX_SKIP_ALIGN (asm_out_file, align_functions_log, align_functions-1); #else ASM_OUTPUT_ALIGN (asm_out_file, align_functions_log); --- 1204,1210 ---- if (align_functions_log > align) { #ifdef ASM_OUTPUT_MAX_SKIP_ALIGN ! ASM_OUTPUT_MAX_SKIP_ALIGN (asm_out_file, align_functions_log, align_functions-1); #else ASM_OUTPUT_ALIGN (asm_out_file, align_functions_log); *************** assemble_start_function (decl, fnname) *** 947,963 **** ASM_OUTPUT_FUNCTION_PREFIX (asm_out_file, fnname); #endif ! #ifdef SDB_DEBUGGING_INFO ! /* Output SDB definition of the function. */ ! if (write_symbols == SDB_DEBUG) ! sdbout_mark_begin_function (); ! #endif ! ! #ifdef DBX_DEBUGGING_INFO ! /* Output DBX definition of the function. */ ! if (write_symbols == DBX_DEBUG) ! dbxout_begin_function (decl); ! #endif /* Make function name accessible from other files, if appropriate. */ --- 1215,1221 ---- ASM_OUTPUT_FUNCTION_PREFIX (asm_out_file, fnname); #endif ! (*debug_hooks->begin_function) (decl); /* Make function name accessible from other files, if appropriate. */ *************** assemble_start_function (decl, fnname) *** 978,995 **** weak_global_object_name = name; } ! #ifdef ASM_WEAKEN_LABEL ! if (DECL_WEAK (decl)) ! { ! ASM_WEAKEN_LABEL (asm_out_file, fnname); ! /* Remove this function from the pending weak list so that ! we do not emit multiple .weak directives for it. */ ! remove_from_pending_weak_list ! (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl))); ! } ! else ! #endif ! ASM_GLOBALIZE_LABEL (asm_out_file, fnname); } /* Do any machine/system dependent processing of the function name */ --- 1236,1242 ---- weak_global_object_name = name; } ! globalize_decl (decl); } /* Do any machine/system dependent processing of the function name */ *************** assemble_zeros (size) *** 1038,1066 **** if (ASM_NO_SKIP_IN_TEXT && in_text_section ()) { int i; ! ! for (i = 0; i < size - 20; i += 20) ! { ! #ifdef ASM_BYTE_OP ! fprintf (asm_out_file, ! "%s0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n", ASM_BYTE_OP); ! #else ! fprintf (asm_out_file, ! "\tbyte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n"); ! #endif ! } ! if (i < size) ! { ! #ifdef ASM_BYTE_OP ! fprintf (asm_out_file, "%s0", ASM_BYTE_OP); ! #else ! fprintf (asm_out_file, "\tbyte 0"); ! #endif ! i++; ! for (; i < size; i++) ! fprintf (asm_out_file, ",0"); ! fprintf (asm_out_file, "\n"); ! } } else #endif --- 1285,1292 ---- if (ASM_NO_SKIP_IN_TEXT && in_text_section ()) { int i; ! for (i = 0; i < size; i++) ! assemble_integer (const0_rtx, 1, BITS_PER_UNIT, 1); } else #endif *************** assemble_align (align) *** 1075,1081 **** int align; { if (align > BITS_PER_UNIT) ! ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (align / BITS_PER_UNIT)); } /* Assemble a string constant with the specified C string as contents. */ --- 1301,1309 ---- int align; { if (align > BITS_PER_UNIT) ! { ! ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (align / BITS_PER_UNIT)); ! } } /* Assemble a string constant with the specified C string as contents. */ *************** asm_emit_uninitialised (decl, name, size *** 1156,1172 **** asm_dest_local } destination = asm_dest_local; ! if (TREE_PUBLIC (decl)) { #if defined ASM_EMIT_BSS if (! DECL_COMMON (decl)) destination = asm_dest_bss; else ! #endif destination = asm_dest_common; } if (flag_shared_data) { switch (destination) --- 1384,1404 ---- asm_dest_local } destination = asm_dest_local; ! if (TREE_PUBLIC (decl)) { #if defined ASM_EMIT_BSS if (! DECL_COMMON (decl)) destination = asm_dest_bss; else ! #endif destination = asm_dest_common; } + if (destination == asm_dest_bss) + globalize_decl (decl); + resolve_unique_section (decl, 0); + if (flag_shared_data) { switch (destination) *************** asm_emit_uninitialised (decl, name, size *** 1191,1202 **** } } - #ifdef ASM_OUTPUT_SECTION_NAME - /* We already know that DECL_SECTION_NAME() == NULL. */ - if (flag_data_sections != 0 || UNIQUE_SECTION_P (decl)) - UNIQUE_SECTION (decl, 0); - #endif - switch (destination) { #ifdef ASM_EMIT_BSS --- 1423,1428 ---- *************** assemble_variable (decl, top_level, at_e *** 1234,1285 **** int at_end ATTRIBUTE_UNUSED; int dont_output_data; { ! register const char *name; unsigned int align; int reloc = 0; - enum in_section saved_in_section; rtx decl_rtl; last_assemble_variable_decl = 0; - if (DECL_RTL_SET_P (decl) && GET_CODE (DECL_RTL (decl)) == REG) - { - /* Do output symbol info for global register variables, but do nothing - else for them. */ - - if (TREE_ASM_WRITTEN (decl)) - return; - TREE_ASM_WRITTEN (decl) = 1; - - /* Do no output if -fsyntax-only. */ - if (flag_syntax_only) - return; - - #if defined (DBX_DEBUGGING_INFO) || defined (XCOFF_DEBUGGING_INFO) - /* File-scope global variables are output here. */ - if ((write_symbols == DBX_DEBUG || write_symbols == XCOFF_DEBUG) - && top_level) - dbxout_symbol (decl, 0); - #endif - #ifdef SDB_DEBUGGING_INFO - if (write_symbols == SDB_DEBUG && top_level - /* Leave initialized global vars for end of compilation; - see comment in compile_file. */ - && (TREE_PUBLIC (decl) == 0 || DECL_INITIAL (decl) == 0)) - sdbout_symbol (decl, 0); - #endif - - /* Don't output any DWARF debugging information for variables here. - In the case of local variables, the information for them is output - when we do our recursive traversal of the tree representation for - the entire containing function. In the case of file-scope variables, - we output information for all of them at the very end of compilation - while we are doing our final traversal of the chain of file-scope - declarations. */ - - return; - } - /* Normally no need to say anything here for external references, since assemble_external is called by the language-specific code when a declaration is first seen. */ --- 1460,1472 ---- int at_end ATTRIBUTE_UNUSED; int dont_output_data; { ! const char *name; unsigned int align; int reloc = 0; rtx decl_rtl; last_assemble_variable_decl = 0; /* Normally no need to say anything here for external references, since assemble_external is called by the language-specific code when a declaration is first seen. */ *************** assemble_variable (decl, top_level, at_e *** 1293,1298 **** --- 1480,1492 ---- if (TREE_CODE (decl) == FUNCTION_DECL) return; + /* Do nothing for global register variables. */ + if (DECL_RTL_SET_P (decl) && GET_CODE (DECL_RTL (decl)) == REG) + { + TREE_ASM_WRITTEN (decl) = 1; + return; + } + /* If type was incomplete when the variable was declared, see if it is complete now. */ *************** assemble_variable (decl, top_level, at_e *** 1335,1341 **** && ! host_integerp (DECL_SIZE_UNIT (decl), 1)) { error_with_decl (decl, "size of variable `%s' is too large"); ! goto finish; } name = XSTR (XEXP (decl_rtl, 0), 0); --- 1529,1535 ---- && ! host_integerp (DECL_SIZE_UNIT (decl), 1)) { error_with_decl (decl, "size of variable `%s' is too large"); ! return; } name = XSTR (XEXP (decl_rtl, 0), 0); *************** assemble_variable (decl, top_level, at_e *** 1374,1396 **** if (align > MAX_OFILE_ALIGNMENT) { warning_with_decl (decl, ! "alignment of `%s' is greater than maximum object file alignment. Using %d.", MAX_OFILE_ALIGNMENT/BITS_PER_UNIT); align = MAX_OFILE_ALIGNMENT; } /* On some machines, it is good to increase alignment sometimes. */ #ifdef DATA_ALIGNMENT ! align = DATA_ALIGNMENT (TREE_TYPE (decl), align); #endif #ifdef CONSTANT_ALIGNMENT ! if (DECL_INITIAL (decl) != 0 && DECL_INITIAL (decl) != error_mark_node) ! align = CONSTANT_ALIGNMENT (DECL_INITIAL (decl), align); #endif /* Reset the alignment in case we have made it tighter, so we can benefit from it in get_pointer_alignment. */ DECL_ALIGN (decl) = align; /* Handle uninitialized definitions. */ --- 1568,1594 ---- if (align > MAX_OFILE_ALIGNMENT) { warning_with_decl (decl, ! "alignment of `%s' is greater than maximum object file alignment. Using %d", MAX_OFILE_ALIGNMENT/BITS_PER_UNIT); align = MAX_OFILE_ALIGNMENT; } /* On some machines, it is good to increase alignment sometimes. */ + if (! DECL_USER_ALIGN (decl)) + { #ifdef DATA_ALIGNMENT ! align = DATA_ALIGNMENT (TREE_TYPE (decl), align); #endif #ifdef CONSTANT_ALIGNMENT ! if (DECL_INITIAL (decl) != 0 && DECL_INITIAL (decl) != error_mark_node) ! align = CONSTANT_ALIGNMENT (DECL_INITIAL (decl), align); #endif + } /* Reset the alignment in case we have made it tighter, so we can benefit from it in get_pointer_alignment. */ DECL_ALIGN (decl) = align; + set_mem_align (decl_rtl, align); /* Handle uninitialized definitions. */ *************** assemble_variable (decl, top_level, at_e *** 1416,1458 **** rounded += (BIGGEST_ALIGNMENT / BITS_PER_UNIT) - 1; rounded = (rounded / (BIGGEST_ALIGNMENT / BITS_PER_UNIT) * (BIGGEST_ALIGNMENT / BITS_PER_UNIT)); ! /* Don't continue this line--convex cc version 4.1 would lose. */ #if !defined(ASM_OUTPUT_ALIGNED_COMMON) && !defined(ASM_OUTPUT_ALIGNED_DECL_COMMON) && !defined(ASM_OUTPUT_ALIGNED_BSS) if ((unsigned HOST_WIDE_INT) DECL_ALIGN (decl) / BITS_PER_UNIT > rounded) ! warning_with_decl ! (decl, "requested alignment for %s is greater than implemented alignment of %d.",rounded); ! #endif ! ! #ifdef DBX_DEBUGGING_INFO ! /* File-scope global variables are output here. */ ! if (write_symbols == DBX_DEBUG && top_level) ! dbxout_symbol (decl, 0); ! #endif ! #ifdef SDB_DEBUGGING_INFO ! if (write_symbols == SDB_DEBUG && top_level ! /* Leave initialized global vars for end of compilation; ! see comment in compile_file. */ ! && (TREE_PUBLIC (decl) == 0 || DECL_INITIAL (decl) == 0)) ! sdbout_symbol (decl, 0); #endif - /* Don't output any DWARF debugging information for variables here. - In the case of local variables, the information for them is output - when we do our recursive traversal of the tree representation for - the entire containing function. In the case of file-scope variables, - we output information for all of them at the very end of compilation - while we are doing our final traversal of the chain of file-scope - declarations. */ - - #if 0 /* ??? We should either delete this or add a comment describing what - it was intended to do and why we shouldn't delete it. */ - if (flag_shared_data) - data_section (); - #endif asm_emit_uninitialised (decl, name, size, rounded); ! goto finish; } /* Handle initialized definitions. --- 1614,1630 ---- rounded += (BIGGEST_ALIGNMENT / BITS_PER_UNIT) - 1; rounded = (rounded / (BIGGEST_ALIGNMENT / BITS_PER_UNIT) * (BIGGEST_ALIGNMENT / BITS_PER_UNIT)); ! /* Don't continue this line--convex cc version 4.1 would lose. */ #if !defined(ASM_OUTPUT_ALIGNED_COMMON) && !defined(ASM_OUTPUT_ALIGNED_DECL_COMMON) && !defined(ASM_OUTPUT_ALIGNED_BSS) if ((unsigned HOST_WIDE_INT) DECL_ALIGN (decl) / BITS_PER_UNIT > rounded) ! warning_with_decl ! (decl, "requested alignment for %s is greater than implemented alignment of %d",rounded); #endif asm_emit_uninitialised (decl, name, size, rounded); ! return; } /* Handle initialized definitions. *************** assemble_variable (decl, top_level, at_e *** 1461,1544 **** /* First make the assembler name(s) global if appropriate. */ if (TREE_PUBLIC (decl) && DECL_NAME (decl)) ! { ! #ifdef ASM_WEAKEN_LABEL ! if (DECL_WEAK (decl)) ! { ! ASM_WEAKEN_LABEL (asm_out_file, name); ! /* Remove this variable from the pending weak list so that ! we do not emit multiple .weak directives for it. */ ! remove_from_pending_weak_list ! (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl))); ! } ! else ! #endif ! ASM_GLOBALIZE_LABEL (asm_out_file, name); ! } ! #if 0 ! for (d = equivalents; d; d = TREE_CHAIN (d)) ! { ! tree e = TREE_VALUE (d); ! if (TREE_PUBLIC (e) && DECL_NAME (e)) ! ASM_GLOBALIZE_LABEL (asm_out_file, ! XSTR (XEXP (DECL_RTL (e), 0), 0)); ! } ! #endif /* Output any data that we will need to use the address of. */ if (DECL_INITIAL (decl) == error_mark_node) ! reloc = contains_pointers_p (TREE_TYPE (decl)); else if (DECL_INITIAL (decl)) reloc = output_addressed_constants (DECL_INITIAL (decl)); - #ifdef ASM_OUTPUT_SECTION_NAME - if ((flag_data_sections != 0 && DECL_SECTION_NAME (decl) == NULL_TREE) - || UNIQUE_SECTION_P (decl)) - UNIQUE_SECTION (decl, reloc); - #endif - /* Switch to the appropriate section. */ variable_section (decl, reloc); /* dbxout.c needs to know this. */ if (in_text_section ()) DECL_IN_TEXT_SECTION (decl) = 1; - /* Record current section so we can restore it if dbxout.c clobbers it. */ - saved_in_section = in_section; - - /* Output the dbx info now that we have chosen the section. */ - - #ifdef DBX_DEBUGGING_INFO - /* File-scope global variables are output here. */ - if (write_symbols == DBX_DEBUG && top_level) - dbxout_symbol (decl, 0); - #endif - #ifdef SDB_DEBUGGING_INFO - if (write_symbols == SDB_DEBUG && top_level - /* Leave initialized global vars for end of compilation; - see comment in compile_file. */ - && (TREE_PUBLIC (decl) == 0 || DECL_INITIAL (decl) == 0)) - sdbout_symbol (decl, 0); - #endif - - /* Don't output any DWARF debugging information for variables here. - In the case of local variables, the information for them is output - when we do our recursive traversal of the tree representation for - the entire containing function. In the case of file-scope variables, - we output information for all of them at the very end of compilation - while we are doing our final traversal of the chain of file-scope - declarations. */ - - /* If the debugging output changed sections, reselect the section - that's supposed to be selected. */ - if (in_section != saved_in_section) - variable_section (decl, reloc); - /* Output the alignment of this data. */ if (align > BITS_PER_UNIT) ! ASM_OUTPUT_ALIGN (asm_out_file, ! floor_log2 (DECL_ALIGN (decl) / BITS_PER_UNIT)); /* Do any machine/system dependent processing of the object. */ #ifdef ASM_DECLARE_OBJECT_NAME --- 1633,1660 ---- /* First make the assembler name(s) global if appropriate. */ if (TREE_PUBLIC (decl) && DECL_NAME (decl)) ! globalize_decl (decl); /* Output any data that we will need to use the address of. */ if (DECL_INITIAL (decl) == error_mark_node) ! reloc = contains_pointers_p (TREE_TYPE (decl)) ? 3 : 0; else if (DECL_INITIAL (decl)) reloc = output_addressed_constants (DECL_INITIAL (decl)); /* Switch to the appropriate section. */ + resolve_unique_section (decl, reloc); variable_section (decl, reloc); /* dbxout.c needs to know this. */ if (in_text_section ()) DECL_IN_TEXT_SECTION (decl) = 1; /* Output the alignment of this data. */ if (align > BITS_PER_UNIT) ! { ! ASM_OUTPUT_ALIGN (asm_out_file, ! floor_log2 (DECL_ALIGN (decl) / BITS_PER_UNIT)); ! } /* Do any machine/system dependent processing of the object. */ #ifdef ASM_DECLARE_OBJECT_NAME *************** assemble_variable (decl, top_level, at_e *** 1551,1587 **** if (!dont_output_data) { ! if (DECL_INITIAL (decl)) /* Output the actual data. */ output_constant (DECL_INITIAL (decl), ! tree_low_cst (DECL_SIZE_UNIT (decl), 1)); else /* Leave space for it. */ assemble_zeros (tree_low_cst (DECL_SIZE_UNIT (decl), 1)); } - - finish: - #ifdef XCOFF_DEBUGGING_INFO - /* Unfortunately, the IBM assembler cannot handle stabx before the actual - declaration. When something like ".stabx "aa:S-2",aa,133,0" is emitted - and `aa' hasn't been output yet, the assembler generates a stab entry with - a value of zero, in addition to creating an unnecessary external entry - for `aa'. Hence, we must postpone dbxout_symbol to here at the end. */ - - /* File-scope global variables are output here. */ - if (write_symbols == XCOFF_DEBUG && top_level) - { - saved_in_section = in_section; - - dbxout_symbol (decl, 0); - - if (in_section != saved_in_section) - variable_section (decl, reloc); - } - #else - /* There must be a statement after a label. */ - ; - #endif } /* Return 1 if type TYPE contains any pointers. */ --- 1667,1681 ---- if (!dont_output_data) { ! if (DECL_INITIAL (decl) && DECL_INITIAL (decl) != error_mark_node) /* Output the actual data. */ output_constant (DECL_INITIAL (decl), ! tree_low_cst (DECL_SIZE_UNIT (decl), 1), ! align); else /* Leave space for it. */ assemble_zeros (tree_low_cst (DECL_SIZE_UNIT (decl), 1)); } } /* Return 1 if type TYPE contains any pointers. */ *************** assemble_external_libcall (fun) *** 1672,1678 **** void assemble_global (name) ! const char *name; { ASM_GLOBALIZE_LABEL (asm_out_file, name); } --- 1766,1772 ---- void assemble_global (name) ! const char *name ATTRIBUTE_UNUSED; { ASM_GLOBALIZE_LABEL (asm_out_file, name); } *************** assemble_name (file, name) *** 1701,1709 **** tree id; STRIP_NAME_ENCODING (real_name, name); - if (flag_prefix_function_name - && ! memcmp (real_name, CHKR_PREFIX, CHKR_PREFIX_SIZE)) - real_name = real_name + CHKR_PREFIX_SIZE; id = maybe_get_identifier (real_name); if (id) --- 1795,1800 ---- *************** assemble_static_space (size) *** 1747,1753 **** { /* Round size up to multiple of BIGGEST_ALIGNMENT bits so that each uninitialized object starts on such a boundary. */ ! /* Variable `rounded' might or might not be used in ASM_OUTPUT_LOCAL. */ int rounded ATTRIBUTE_UNUSED = ((size + (BIGGEST_ALIGNMENT / BITS_PER_UNIT) - 1) / (BIGGEST_ALIGNMENT / BITS_PER_UNIT) --- 1838,1844 ---- { /* Round size up to multiple of BIGGEST_ALIGNMENT bits so that each uninitialized object starts on such a boundary. */ ! /* Variable `rounded' might or might not be used in ASM_OUTPUT_LOCAL. */ int rounded ATTRIBUTE_UNUSED = ((size + (BIGGEST_ALIGNMENT / BITS_PER_UNIT) - 1) / (BIGGEST_ALIGNMENT / BITS_PER_UNIT) *************** assemble_trampoline_template () *** 1782,1788 **** /* Write the assembler code to define one. */ align = floor_log2 (TRAMPOLINE_ALIGNMENT / BITS_PER_UNIT); if (align > 0) ! ASM_OUTPUT_ALIGN (asm_out_file, align); ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "LTRAMP", 0); TRAMPOLINE_TEMPLATE (asm_out_file); --- 1873,1881 ---- /* Write the assembler code to define one. */ align = floor_log2 (TRAMPOLINE_ALIGNMENT / BITS_PER_UNIT); if (align > 0) ! { ! ASM_OUTPUT_ALIGN (asm_out_file, align); ! } ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "LTRAMP", 0); TRAMPOLINE_TEMPLATE (asm_out_file); *************** assemble_trampoline_template () *** 1794,1884 **** } #endif ! /* Assemble the integer constant X into an object of SIZE bytes. ! X must be either a CONST_INT or CONST_DOUBLE. ! Return 1 if we were able to output the constant, otherwise 0. If FORCE is ! non-zero, abort if we can't output the constant. */ ! int ! assemble_integer (x, size, force) ! rtx x; int size; ! int force; { ! /* First try to use the standard 1, 2, 4, 8, and 16 byte ! ASM_OUTPUT... macros. */ switch (size) { - #ifdef ASM_OUTPUT_CHAR case 1: ! ASM_OUTPUT_CHAR (asm_out_file, x); ! return 1; ! #endif ! ! #ifdef ASM_OUTPUT_SHORT case 2: ! ASM_OUTPUT_SHORT (asm_out_file, x); ! return 1; ! #endif ! ! #ifdef ASM_OUTPUT_INT case 4: ! ASM_OUTPUT_INT (asm_out_file, x); ! return 1; ! #endif ! ! #ifdef ASM_OUTPUT_DOUBLE_INT case 8: ! ASM_OUTPUT_DOUBLE_INT (asm_out_file, x); ! return 1; ! #endif ! ! #ifdef ASM_OUTPUT_QUADRUPLE_INT case 16: ! ASM_OUTPUT_QUADRUPLE_INT (asm_out_file, x); ! return 1; ! #endif } ! /* If we couldn't do it that way, there are two other possibilities: First, ! if the machine can output an explicit byte and this is a 1 byte constant, ! we can use ASM_OUTPUT_BYTE. */ ! #ifdef ASM_OUTPUT_BYTE ! if (size == 1 && GET_CODE (x) == CONST_INT) ! { ! ASM_OUTPUT_BYTE (asm_out_file, INTVAL (x)); ! return 1; ! } ! #endif ! /* Finally, if SIZE is larger than a single word, try to output the constant ! one word at a time. */ ! if (size > UNITS_PER_WORD) ! { ! int i; ! enum machine_mode mode ! = mode_for_size (size * BITS_PER_UNIT, MODE_INT, 0); ! rtx word; ! for (i = 0; i < size / UNITS_PER_WORD; i++) ! { ! word = operand_subword (x, i, 0, mode); ! if (word == 0) ! break; ! if (! assemble_integer (word, UNITS_PER_WORD, 0)) break; } ! if (i == size / UNITS_PER_WORD) ! return 1; ! /* If we output at least one word and then could not finish, ! there is no valid way to continue. */ if (i > 0) abort (); } --- 1887,2008 ---- } #endif ! /* A and B are either alignments or offsets. Return the minimum alignment ! that may be assumed after adding the two together. */ ! static inline unsigned ! min_align (a, b) ! unsigned int a, b; ! { ! return (a | b) & -(a | b); ! } ! /* Return the assembler directive for creating a given kind of integer ! object. SIZE is the number of bytes in the object and ALIGNED_P ! indicates whether it is known to be aligned. Return NULL if the ! assembly dialect has no such directive. ! ! The returned string should be printed at the start of a new line and ! be followed immediately by the object's initial value. */ ! ! const char * ! integer_asm_op (size, aligned_p) int size; ! int aligned_p; { ! struct asm_int_op *ops; ! ! if (aligned_p) ! ops = &targetm.asm_out.aligned_op; ! else ! ops = &targetm.asm_out.unaligned_op; switch (size) { case 1: ! return targetm.asm_out.byte_op; case 2: ! return ops->hi; case 4: ! return ops->si; case 8: ! return ops->di; case 16: ! return ops->ti; ! default: ! return NULL; } + } ! /* Use directive OP to assemble an integer object X. Print OP at the ! start of the line, followed immediately by the value of X. */ ! void ! assemble_integer_with_op (op, x) ! const char *op; ! rtx x; ! { ! fputs (op, asm_out_file); ! output_addr_const (asm_out_file, x); ! fputc ('\n', asm_out_file); ! } ! /* The default implementation of the asm_out.integer target hook. */ ! bool ! default_assemble_integer (x, size, aligned_p) ! rtx x ATTRIBUTE_UNUSED; ! unsigned int size ATTRIBUTE_UNUSED; ! int aligned_p ATTRIBUTE_UNUSED; ! { ! const char *op = integer_asm_op (size, aligned_p); ! return op && (assemble_integer_with_op (op, x), true); ! } ! /* Assemble the integer constant X into an object of SIZE bytes. ALIGN is ! the alignment of the integer in bits. Return 1 if we were able to output ! the constant, otherwise 0. If FORCE is non-zero, abort if we can't output ! the constant. */ ! bool ! assemble_integer (x, size, align, force) ! rtx x; ! unsigned int size; ! unsigned int align; ! int force; ! { ! int aligned_p; ! aligned_p = (align >= MIN (size * BITS_PER_UNIT, BIGGEST_ALIGNMENT)); ! ! /* See if the target hook can handle this kind of object. */ ! if ((*targetm.asm_out.integer) (x, size, aligned_p)) ! return true; ! ! /* If the object is a multi-byte one, try splitting it up. Split ! it into words it if is multi-word, otherwise split it into bytes. */ ! if (size > 1) ! { ! enum machine_mode omode, imode; ! unsigned int subalign; ! unsigned int subsize, i; ! ! subsize = size > UNITS_PER_WORD? UNITS_PER_WORD : 1; ! subalign = MIN (align, subsize * BITS_PER_UNIT); ! omode = mode_for_size (subsize * BITS_PER_UNIT, MODE_INT, 0); ! imode = mode_for_size (size * BITS_PER_UNIT, MODE_INT, 0); ! ! for (i = 0; i < size; i += subsize) ! { ! rtx partial = simplify_subreg (omode, x, imode, i); ! if (!partial || !assemble_integer (partial, subsize, subalign, 0)) break; } + if (i == size) + return true; ! /* If we've printed some of it, but not all of it, there's no going ! back now. */ if (i > 0) abort (); } *************** assemble_integer (x, size, force) *** 1886,1957 **** if (force) abort (); ! return 0; } - /* Assemble the floating-point constant D into an object of size MODE. */ - void ! assemble_real (d, mode) REAL_VALUE_TYPE d; enum machine_mode mode; { ! jmp_buf output_constant_handler; ! ! if (setjmp (output_constant_handler)) ! { ! error ("floating point trap outputting a constant"); ! #ifdef REAL_IS_NOT_DOUBLE ! memset ((char *) &d, 0, sizeof d); ! d = dconst0; ! #else ! d = 0; ! #endif ! } ! ! set_float_handler (output_constant_handler); ! switch (mode) { ! #ifdef ASM_OUTPUT_BYTE_FLOAT ! case QFmode: ! ASM_OUTPUT_BYTE_FLOAT (asm_out_file, d); ! break; ! #endif ! #ifdef ASM_OUTPUT_SHORT_FLOAT ! case HFmode: ! ASM_OUTPUT_SHORT_FLOAT (asm_out_file, d); ! break; ! #endif ! #ifdef ASM_OUTPUT_THREE_QUARTER_FLOAT ! case TQFmode: ! ASM_OUTPUT_THREE_QUARTER_FLOAT (asm_out_file, d); ! break; ! #endif ! #ifdef ASM_OUTPUT_FLOAT ! case SFmode: ! ASM_OUTPUT_FLOAT (asm_out_file, d); break; - #endif ! #ifdef ASM_OUTPUT_DOUBLE ! case DFmode: ! ASM_OUTPUT_DOUBLE (asm_out_file, d); break; - #endif ! #ifdef ASM_OUTPUT_LONG_DOUBLE ! case XFmode: ! case TFmode: ! ASM_OUTPUT_LONG_DOUBLE (asm_out_file, d); break; - #endif default: abort (); } - - set_float_handler (NULL_PTR); } /* Here we combine duplicate floating constants to make --- 2010,2097 ---- if (force) abort (); ! return false; } void ! assemble_real (d, mode, align) REAL_VALUE_TYPE d; enum machine_mode mode; + unsigned int align; { ! long data[4]; ! long l; ! unsigned int nalign = min_align (align, 32); ! switch (BITS_PER_UNIT) { ! case 8: ! switch (mode) ! { ! case SFmode: ! REAL_VALUE_TO_TARGET_SINGLE (d, l); ! assemble_integer (GEN_INT (l), 4, align, 1); ! break; ! case DFmode: ! REAL_VALUE_TO_TARGET_DOUBLE (d, data); ! assemble_integer (GEN_INT (data[0]), 4, align, 1); ! assemble_integer (GEN_INT (data[1]), 4, nalign, 1); ! break; ! case XFmode: ! REAL_VALUE_TO_TARGET_LONG_DOUBLE (d, data); ! assemble_integer (GEN_INT (data[0]), 4, align, 1); ! assemble_integer (GEN_INT (data[1]), 4, nalign, 1); ! assemble_integer (GEN_INT (data[2]), 4, nalign, 1); ! break; ! case TFmode: ! REAL_VALUE_TO_TARGET_LONG_DOUBLE (d, data); ! assemble_integer (GEN_INT (data[0]), 4, align, 1); ! assemble_integer (GEN_INT (data[1]), 4, nalign, 1); ! assemble_integer (GEN_INT (data[2]), 4, nalign, 1); ! assemble_integer (GEN_INT (data[3]), 4, nalign, 1); ! break; ! default: ! abort (); ! } break; ! case 16: ! switch (mode) ! { ! case HFmode: ! REAL_VALUE_TO_TARGET_SINGLE (d, l); ! assemble_integer (GEN_INT (l), 2, align, 1); ! break; ! case TQFmode: ! REAL_VALUE_TO_TARGET_DOUBLE (d, data); ! assemble_integer (GEN_INT (data[0]), 2, align, 1); ! assemble_integer (GEN_INT (data[1]), 1, nalign, 1); ! break; ! default: ! abort (); ! } break; ! case 32: ! switch (mode) ! { ! case QFmode: ! REAL_VALUE_TO_TARGET_SINGLE (d, l); ! assemble_integer (GEN_INT (l), 1, align, 1); ! break; ! case HFmode: ! REAL_VALUE_TO_TARGET_DOUBLE (d, data); ! assemble_integer (GEN_INT (data[0]), 1, align, 1); ! assemble_integer (GEN_INT (data[1]), 1, nalign, 1); ! break; ! default: ! abort (); ! } break; default: abort (); } } /* Here we combine duplicate floating constants to make *************** immed_double_const (i0, i1, mode) *** 1967,1973 **** HOST_WIDE_INT i0, i1; enum machine_mode mode; { ! register rtx r; if (GET_MODE_CLASS (mode) == MODE_INT || GET_MODE_CLASS (mode) == MODE_PARTIAL_INT) --- 2107,2113 ---- HOST_WIDE_INT i0, i1; enum machine_mode mode; { ! rtx r; if (GET_MODE_CLASS (mode) == MODE_INT || GET_MODE_CLASS (mode) == MODE_PARTIAL_INT) *************** immed_double_const (i0, i1, mode) *** 1996,2002 **** represented as a 64 bit value -1, and not as 0x00000000ffffffff. The later confuses the sparc backend. */ ! if (BITS_PER_WORD < HOST_BITS_PER_WIDE_INT && BITS_PER_WORD == width && (i0 & ((HOST_WIDE_INT) 1 << (width - 1)))) i0 |= ((HOST_WIDE_INT) (-1) << width); --- 2136,2142 ---- represented as a 64 bit value -1, and not as 0x00000000ffffffff. The later confuses the sparc backend. */ ! if (width < HOST_BITS_PER_WIDE_INT && (i0 & ((HOST_WIDE_INT) 1 << (width - 1)))) i0 |= ((HOST_WIDE_INT) (-1) << width); *************** immed_double_const (i0, i1, mode) *** 2038,2044 **** return r; /* No; make a new one and add it to the chain. */ ! r = gen_rtx_CONST_DOUBLE (mode, const0_rtx, i0, i1); /* Don't touch const_double_chain if not inside any function. */ if (current_function_decl != 0) --- 2178,2184 ---- return r; /* No; make a new one and add it to the chain. */ ! r = gen_rtx_CONST_DOUBLE (mode, i0, i1); /* Don't touch const_double_chain if not inside any function. */ if (current_function_decl != 0) *************** immed_real_const_1 (d, mode) *** 2059,2085 **** enum machine_mode mode; { union real_extract u; ! register rtx r; /* Get the desired `double' value as a sequence of ints since that is how they are stored in a CONST_DOUBLE. */ u.d = d; ! /* Detect special cases. But be careful we don't use a CONST_DOUBLE ! that's from a parent function since it may be in its constant pool. */ ! if (REAL_VALUES_IDENTICAL (dconst0, d) ! && (cfun == 0 || decl_function_context (current_function_decl) == 0)) return CONST0_RTX (mode); ! ! /* Check for NaN first, because some ports (specifically the i386) do not ! emit correct ieee-fp code by default, and thus will generate a core ! dump here if we pass a NaN to REAL_VALUES_EQUAL and if REAL_VALUES_EQUAL ! does a floating point comparison. */ ! else if ((! REAL_VALUE_ISNAN (d) && REAL_VALUES_EQUAL (dconst1, d)) ! && (cfun == 0 ! || decl_function_context (current_function_decl) == 0)) return CONST1_RTX (mode); if (sizeof u == sizeof (HOST_WIDE_INT)) return immed_double_const (u.i[0], 0, mode); --- 2199,2221 ---- enum machine_mode mode; { union real_extract u; ! rtx r; /* Get the desired `double' value as a sequence of ints since that is how they are stored in a CONST_DOUBLE. */ u.d = d; ! /* Detect special cases. Check for NaN first, because some ports ! (specifically the i386) do not emit correct ieee-fp code by default, and ! thus will generate a core dump here if we pass a NaN to REAL_VALUES_EQUAL ! and if REAL_VALUES_EQUAL does a floating point comparison. */ ! if (! REAL_VALUE_ISNAN (d) && REAL_VALUES_IDENTICAL (dconst0, d)) return CONST0_RTX (mode); ! else if (! REAL_VALUE_ISNAN (d) && REAL_VALUES_EQUAL (dconst1, d)) return CONST1_RTX (mode); + else if (! REAL_VALUE_ISNAN (d) && REAL_VALUES_EQUAL (dconst2, d)) + return CONST2_RTX (mode); if (sizeof u == sizeof (HOST_WIDE_INT)) return immed_double_const (u.i[0], 0, mode); *************** immed_real_const_1 (d, mode) *** 2118,2129 **** else CONST_DOUBLE_CHAIN (r) = NULL_RTX; - /* Store const0_rtx in CONST_DOUBLE_MEM since this CONST_DOUBLE is on the - chain, but has not been allocated memory. Actual use of CONST_DOUBLE_MEM - is only through force_const_mem. */ - - CONST_DOUBLE_MEM (r) = const0_rtx; - return r; } --- 2254,2259 ---- *************** immed_real_const (exp) *** 2144,2156 **** void clear_const_double_mem () { ! register rtx r, next; for (r = const_double_chain; r; r = next) { next = CONST_DOUBLE_CHAIN (r); CONST_DOUBLE_CHAIN (r) = 0; - CONST_DOUBLE_MEM (r) = cc0_rtx; } const_double_chain = 0; } --- 2274,2285 ---- void clear_const_double_mem () { ! rtx r, next; for (r = const_double_chain; r; r = next) { next = CONST_DOUBLE_CHAIN (r); CONST_DOUBLE_CHAIN (r) = 0; } const_double_chain = 0; } *************** decode_addr_const (exp, value) *** 2171,2179 **** tree exp; struct addr_const *value; { ! register tree target = TREE_OPERAND (exp, 0); ! register int offset = 0; ! register rtx x; while (1) { --- 2300,2308 ---- tree exp; struct addr_const *value; { ! tree target = TREE_OPERAND (exp, 0); ! int offset = 0; ! rtx x; while (1) { *************** decode_addr_const (exp, value) *** 2184,2190 **** offset += int_byte_position (TREE_OPERAND (target, 1)); target = TREE_OPERAND (target, 0); } ! else if (TREE_CODE (target) == ARRAY_REF) { offset += (tree_low_cst (TYPE_SIZE_UNIT (TREE_TYPE (target)), 1) * tree_low_cst (TREE_OPERAND (target, 1), 0)); --- 2313,2320 ---- offset += int_byte_position (TREE_OPERAND (target, 1)); target = TREE_OPERAND (target, 0); } ! else if (TREE_CODE (target) == ARRAY_REF ! || TREE_CODE (target) == ARRAY_RANGE_REF) { offset += (tree_low_cst (TYPE_SIZE_UNIT (TREE_TYPE (target)), 1) * tree_low_cst (TREE_OPERAND (target, 1), 0)); *************** decode_addr_const (exp, value) *** 2212,2218 **** case COMPLEX_CST: case CONSTRUCTOR: case INTEGER_CST: ! x = TREE_CST_RTL (target); break; default: --- 2342,2350 ---- case COMPLEX_CST: case CONSTRUCTOR: case INTEGER_CST: ! /* This constant should have been output already, but we can't simply ! use TREE_CST_RTL since INTEGER_CST doesn't have one. */ ! x = output_constant_def (target, 1); break; default: *************** decode_addr_const (exp, value) *** 2227,2245 **** value->offset = offset; } struct rtx_const { ! #ifdef ONLY_INT_FIELDS ! unsigned int kind : 16; ! unsigned int mode : 16; ! #else ! enum kind kind : 16; ! enum machine_mode mode : 16; ! #endif union { union real_extract du; struct addr_const addr; struct {HOST_WIDE_INT high, low;} di; } un; }; --- 2359,2378 ---- value->offset = offset; } + /* We do RTX_UNSPEC + XINT (blah), so nothing can go after RTX_UNSPEC. */ + enum kind { RTX_UNKNOWN, RTX_DOUBLE, RTX_INT, RTX_VECTOR, RTX_UNSPEC }; struct rtx_const { ! ENUM_BITFIELD(kind) kind : 16; ! ENUM_BITFIELD(machine_mode) mode : 16; union { union real_extract du; struct addr_const addr; struct {HOST_WIDE_INT high, low;} di; + + /* The max vector size we have is 8 wide. This should be enough. */ + HOST_WIDE_INT veclo[16]; + HOST_WIDE_INT vechi[16]; } un; }; *************** struct constant_descriptor *** 2258,2264 **** const char *label; rtx rtl; /* Make sure the data is reasonably aligned. */ ! union { unsigned char contents[1]; #ifdef HAVE_LONG_DOUBLE --- 2391,2397 ---- const char *label; rtx rtl; /* Make sure the data is reasonably aligned. */ ! union { unsigned char contents[1]; #ifdef HAVE_LONG_DOUBLE *************** struct constant_descriptor *** 2273,2279 **** #define MAX_HASH_TABLE 1009 static struct constant_descriptor *const_hash_table[MAX_HASH_TABLE]; ! #define STRHASH(x) ((hashval_t)((long)(x) >> 3)) struct deferred_string { --- 2406,2417 ---- #define MAX_HASH_TABLE 1009 static struct constant_descriptor *const_hash_table[MAX_HASH_TABLE]; ! /* We maintain a hash table of STRING_CST values. Unless we are asked to force ! out a string constant, we defer output of the constants until we know ! they are actually used. This will be if something takes its address or if ! there is a usage of the string in the RTL of a function. */ ! ! #define STRHASH(x) ((hashval_t) ((long) (x) >> 3)) struct deferred_string { *************** static htab_t const_str_htab; *** 2286,2292 **** /* Mark a const_hash_table descriptor for GC. */ ! static void mark_const_hash_entry (ptr) void *ptr; { --- 2424,2430 ---- /* Mark a const_hash_table descriptor for GC. */ ! static void mark_const_hash_entry (ptr) void *ptr; { *************** mark_const_hash_entry (ptr) *** 2301,2307 **** /* Mark the hash-table element X (which is really a pointer to an struct deferred_string *). */ ! static int mark_const_str_htab_1 (x, data) void **x; --- 2439,2445 ---- /* Mark the hash-table element X (which is really a pointer to an struct deferred_string *). */ ! static int mark_const_str_htab_1 (x, data) void **x; *************** mark_const_str_htab_1 (x, data) *** 2313,2319 **** /* Mark a const_str_htab for GC. */ ! static void mark_const_str_htab (htab) void *htab; { --- 2451,2457 ---- /* Mark a const_str_htab for GC. */ ! static void mark_const_str_htab (htab) void *htab; { *************** static int *** 2357,2365 **** const_hash (exp) tree exp; { ! register const char *p; ! register int len, hi, i; ! register enum tree_code code = TREE_CODE (exp); /* Either set P and LEN to the address and len of something to hash and exit the switch or return a value. */ --- 2495,2503 ---- const_hash (exp) tree exp; { ! const char *p; ! int len, hi, i; ! enum tree_code code = TREE_CODE (exp); /* Either set P and LEN to the address and len of something to hash and exit the switch or return a value. */ *************** const_hash (exp) *** 2398,2404 **** } else { ! register tree link; /* For record type, include the type in the hashing. We do not do so for array types --- 2536,2542 ---- } else { ! tree link; /* For record type, include the type in the hashing. We do not do so for array types *************** const_hash (exp) *** 2438,2444 **** else if (GET_CODE (value.base) == LABEL_REF) hi = value.offset + CODE_LABEL_NUMBER (XEXP (value.base, 0)) * 13; else ! abort(); hi &= (1 << HASHBITS) - 1; hi %= MAX_HASH_TABLE; --- 2576,2582 ---- else if (GET_CODE (value.base) == LABEL_REF) hi = value.offset + CODE_LABEL_NUMBER (XEXP (value.base, 0)) * 13; else ! abort (); hi &= (1 << HASHBITS) - 1; hi %= MAX_HASH_TABLE; *************** const_hash (exp) *** 2454,2462 **** case CONVERT_EXPR: case NON_LVALUE_EXPR: return const_hash (TREE_OPERAND (exp, 0)) * 7 + 2; ! default: ! /* A language specific constant. Just hash the code. */ return (int) code % MAX_HASH_TABLE; } --- 2592,2600 ---- case CONVERT_EXPR: case NON_LVALUE_EXPR: return const_hash (TREE_OPERAND (exp, 0)) * 7 + 2; ! default: ! /* A language specific constant. Just hash the code. */ return (int) code % MAX_HASH_TABLE; } *************** compare_constant_1 (exp, p) *** 2495,2503 **** tree exp; const unsigned char *p; { ! register const unsigned char *strp; ! register int len; ! register enum tree_code code = TREE_CODE (exp); if (code != (enum tree_code) *p++) return 0; --- 2633,2641 ---- tree exp; const unsigned char *p; { ! const unsigned char *strp; ! int len; ! enum tree_code code = TREE_CODE (exp); if (code != (enum tree_code) *p++) return 0; *************** compare_constant_1 (exp, p) *** 2532,2541 **** if ((enum machine_mode) *p++ != TYPE_MODE (TREE_TYPE (exp))) return 0; ! strp = (const unsigned char *)TREE_STRING_POINTER (exp); len = TREE_STRING_LENGTH (exp); if (memcmp ((char *) &TREE_STRING_LENGTH (exp), p, ! sizeof TREE_STRING_LENGTH (exp))) return 0; p += sizeof TREE_STRING_LENGTH (exp); --- 2670,2679 ---- if ((enum machine_mode) *p++ != TYPE_MODE (TREE_TYPE (exp))) return 0; ! strp = (const unsigned char *) TREE_STRING_POINTER (exp); len = TREE_STRING_LENGTH (exp); if (memcmp ((char *) &TREE_STRING_LENGTH (exp), p, ! sizeof TREE_STRING_LENGTH (exp))) return 0; p += sizeof TREE_STRING_LENGTH (exp); *************** compare_constant_1 (exp, p) *** 2564,2570 **** } else { ! register tree link; int length = list_length (CONSTRUCTOR_ELTS (exp)); tree type; enum machine_mode mode = TYPE_MODE (TREE_TYPE (exp)); --- 2702,2708 ---- } else { ! tree link; int length = list_length (CONSTRUCTOR_ELTS (exp)); tree type; enum machine_mode mode = TYPE_MODE (TREE_TYPE (exp)); *************** compare_constant_1 (exp, p) *** 2580,2586 **** p += sizeof length; /* For record constructors, insist that the types match. ! For arrays, just verify both constructors are for arrays. Then insist that either both or none have any TREE_PURPOSE values. */ if (TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE) --- 2718,2724 ---- p += sizeof length; /* For record constructors, insist that the types match. ! For arrays, just verify both constructors are for arrays. Then insist that either both or none have any TREE_PURPOSE values. */ if (TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE) *************** compare_constant_1 (exp, p) *** 2695,2706 **** return compare_constant_1 (TREE_OPERAND (exp, 0), p); default: ! if (lang_expand_constant) ! { ! exp = (*lang_expand_constant) (exp); ! return compare_constant_1 (exp, p); ! } ! return 0; } /* Compare constant contents. */ --- 2833,2846 ---- return compare_constant_1 (TREE_OPERAND (exp, 0), p); default: ! { ! tree new = (*lang_hooks.expand_constant) (exp); ! ! if (new != exp) ! return compare_constant_1 (new, p); ! else ! return 0; ! } } /* Compare constant contents. */ *************** static void *** 2750,2758 **** record_constant_1 (exp) tree exp; { ! register const unsigned char *strp; ! register int len; ! register enum tree_code code = TREE_CODE (exp); obstack_1grow (&permanent_obstack, (unsigned int) code); --- 2890,2898 ---- record_constant_1 (exp) tree exp; { ! const unsigned char *strp; ! int len; ! enum tree_code code = TREE_CODE (exp); obstack_1grow (&permanent_obstack, (unsigned int) code); *************** record_constant_1 (exp) *** 2799,2805 **** } else { ! register tree link; int length = list_length (CONSTRUCTOR_ELTS (exp)); enum machine_mode mode = TYPE_MODE (TREE_TYPE (exp)); tree type; --- 2939,2945 ---- } else { ! tree link; int length = list_length (CONSTRUCTOR_ELTS (exp)); enum machine_mode mode = TYPE_MODE (TREE_TYPE (exp)); tree type; *************** record_constant_1 (exp) *** 2823,2829 **** obstack_grow (&permanent_obstack, (char *) &type, sizeof type); if (TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE) obstack_grow (&permanent_obstack, &mode, sizeof mode); ! obstack_grow (&permanent_obstack, (char *) &have_purpose, sizeof have_purpose); --- 2963,2969 ---- obstack_grow (&permanent_obstack, (char *) &type, sizeof type); if (TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE) obstack_grow (&permanent_obstack, &mode, sizeof mode); ! obstack_grow (&permanent_obstack, (char *) &have_purpose, sizeof have_purpose); *************** record_constant_1 (exp) *** 2907,2918 **** return; default: ! if (lang_expand_constant) ! { ! exp = (*lang_expand_constant) (exp); ! record_constant_1 (exp); ! } ! return; } /* Record constant contents. */ --- 3047,3059 ---- return; default: ! { ! tree new = (*lang_hooks.expand_constant) (exp); ! ! if (new != exp) ! record_constant_1 (new); ! return; ! } } /* Record constant contents. */ *************** output_constant_def (exp, defer) *** 3069,3084 **** tree exp; int defer; { ! register int hash; ! register struct constant_descriptor *desc; struct deferred_string **defstr; char label[256]; int reloc; int found = 1; int after_function = 0; int labelno = -1; ! if (TREE_CST_RTL (exp)) return TREE_CST_RTL (exp); /* Make sure any other constants whose addresses appear in EXP --- 3210,3229 ---- tree exp; int defer; { ! int hash; ! struct constant_descriptor *desc; struct deferred_string **defstr; char label[256]; int reloc; int found = 1; int after_function = 0; int labelno = -1; + rtx rtl; ! /* We can't just use the saved RTL if this is a defererred string constant ! and we are not to defer anymode. */ ! if (TREE_CODE (exp) != INTEGER_CST && TREE_CST_RTL (exp) ! && (defer || !STRING_POOL_ADDRESS_P (XEXP (TREE_CST_RTL (exp), 0)))) return TREE_CST_RTL (exp); /* Make sure any other constants whose addresses appear in EXP *************** output_constant_def (exp, defer) *** 3091,3108 **** the label number already assigned. */ hash = const_hash (exp) % MAX_HASH_TABLE; ! for (desc = const_hash_table[hash]; desc; desc = desc->next) if (compare_constant (exp, desc)) break; ! if (desc == 0) { /* No constant equal to EXP is known to have been output. Make a constant descriptor to enter EXP in the hash table. Assign the label number and record it in the descriptor for future calls to this function to find. */ ! /* Create a string containing the label name, in LABEL. */ labelno = const_labelno++; ASM_GENERATE_INTERNAL_LABEL (label, "LC", labelno); --- 3236,3253 ---- the label number already assigned. */ hash = const_hash (exp) % MAX_HASH_TABLE; ! for (desc = const_hash_table[hash]; desc; desc = desc->next) if (compare_constant (exp, desc)) break; ! if (desc == 0) { /* No constant equal to EXP is known to have been output. Make a constant descriptor to enter EXP in the hash table. Assign the label number and record it in the descriptor for future calls to this function to find. */ ! /* Create a string containing the label name, in LABEL. */ labelno = const_labelno++; ASM_GENERATE_INTERNAL_LABEL (label, "LC", labelno); *************** output_constant_def (exp, defer) *** 3111,3128 **** desc->next = const_hash_table[hash]; desc->label = ggc_strdup (label); const_hash_table[hash] = desc; ! /* We have a symbol name; construct the SYMBOL_REF and the MEM. */ ! desc->rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (exp)), gen_rtx_SYMBOL_REF (Pmode, desc->label)); ! set_mem_attributes (desc->rtl, exp, 1); found = 0; } ! TREE_CST_RTL (exp) = desc->rtl; /* Optionally set flags or add text to the name to record information such as that it is a function name. If the name is changed, the macro --- 3256,3278 ---- desc->next = const_hash_table[hash]; desc->label = ggc_strdup (label); const_hash_table[hash] = desc; ! /* We have a symbol name; construct the SYMBOL_REF and the MEM. */ ! rtl = desc->rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (exp)), gen_rtx_SYMBOL_REF (Pmode, desc->label)); ! set_mem_attributes (rtl, exp, 1); ! set_mem_alias_set (rtl, 0); ! set_mem_alias_set (rtl, const_alias_set); found = 0; } + else + rtl = desc->rtl; ! if (TREE_CODE (exp) != INTEGER_CST) ! TREE_CST_RTL (exp) = rtl; /* Optionally set flags or add text to the name to record information such as that it is a function name. If the name is changed, the macro *************** output_constant_def (exp, defer) *** 3132,3139 **** encoded in it. */ if (! found) { ! ENCODE_SECTION_INFO (exp); ! desc->rtl = TREE_CST_RTL (exp); desc->label = XSTR (XEXP (desc->rtl, 0), 0); } #endif --- 3282,3293 ---- encoded in it. */ if (! found) { ! /* Take care not to invoque ENCODE_SECTION_INFO for constants ! which don't have a TREE_CST_RTL. */ ! if (TREE_CODE (exp) != INTEGER_CST) ! ENCODE_SECTION_INFO (exp); ! ! desc->rtl = rtl; desc->label = XSTR (XEXP (desc->rtl, 0), 0); } #endif *************** output_constant_def (exp, defer) *** 3145,3151 **** #endif if (found ! && STRING_POOL_ADDRESS_P (XEXP (desc->rtl, 0)) && (!defer || defer_addressed_constants_flag || after_function)) { defstr = (struct deferred_string **) --- 3299,3305 ---- #endif if (found ! && STRING_POOL_ADDRESS_P (XEXP (rtl, 0)) && (!defer || defer_addressed_constants_flag || after_function)) { defstr = (struct deferred_string **) *************** output_constant_def (exp, defer) *** 3157,3163 **** remove it from deferred string hash table. */ found = 0; labelno = (*defstr)->labelno; ! STRING_POOL_ADDRESS_P (XEXP (desc->rtl, 0)) = 0; htab_clear_slot (const_str_htab, (void **) defstr); } } --- 3311,3317 ---- remove it from deferred string hash table. */ found = 0; labelno = (*defstr)->labelno; ! STRING_POOL_ADDRESS_P (XEXP (rtl, 0)) = 0; htab_clear_slot (const_str_htab, (void **) defstr); } } *************** output_constant_def (exp, defer) *** 3168,3175 **** { if (defer_addressed_constants_flag || after_function) { ! struct deferred_constant *p; ! p = (struct deferred_constant *) xmalloc (sizeof (struct deferred_constant)); p->exp = copy_constant (exp); p->reloc = reloc; --- 3322,3330 ---- { if (defer_addressed_constants_flag || after_function) { ! struct deferred_constant *p ! = (struct deferred_constant *) ! xmalloc (sizeof (struct deferred_constant)); p->exp = copy_constant (exp); p->reloc = reloc; *************** output_constant_def (exp, defer) *** 3210,3222 **** p->label = desc->label; p->labelno = labelno; *defstr = p; ! STRING_POOL_ADDRESS_P (XEXP (desc->rtl, 0)) = 1; } } } } ! return TREE_CST_RTL (exp); } /* Now output assembler code to define the label for EXP, --- 3365,3377 ---- p->label = desc->label; p->labelno = labelno; *defstr = p; ! STRING_POOL_ADDRESS_P (XEXP (rtl, 0)) = 1; } } } } ! return rtl; } /* Now output assembler code to define the label for EXP, *************** output_constant_def_contents (exp, reloc *** 3230,3242 **** { int align; if (IN_NAMED_SECTION (exp)) named_section (exp, NULL, reloc); else { /* First switch to text section, except for writable strings. */ #ifdef SELECT_SECTION ! SELECT_SECTION (exp, reloc); #else if (((TREE_CODE (exp) == STRING_CST) && flag_writable_strings) || (flag_pic && reloc)) --- 3385,3403 ---- { int align; + /* Align the location counter as required by EXP's data type. */ + align = TYPE_ALIGN (TREE_TYPE (exp)); + #ifdef CONSTANT_ALIGNMENT + align = CONSTANT_ALIGNMENT (exp, align); + #endif + if (IN_NAMED_SECTION (exp)) named_section (exp, NULL, reloc); else { /* First switch to text section, except for writable strings. */ #ifdef SELECT_SECTION ! SELECT_SECTION (exp, reloc, align); #else if (((TREE_CODE (exp) == STRING_CST) && flag_writable_strings) || (flag_pic && reloc)) *************** output_constant_def_contents (exp, reloc *** 3246,3259 **** #endif } - /* Align the location counter as required by EXP's data type. */ - align = TYPE_ALIGN (TREE_TYPE (exp)); - #ifdef CONSTANT_ALIGNMENT - align = CONSTANT_ALIGNMENT (exp, align); - #endif - if (align > BITS_PER_UNIT) ! ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (align / BITS_PER_UNIT)); /* Output the label itself. */ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "LC", labelno); --- 3407,3416 ---- #endif } if (align > BITS_PER_UNIT) ! { ! ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (align / BITS_PER_UNIT)); ! } /* Output the label itself. */ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "LC", labelno); *************** output_constant_def_contents (exp, reloc *** 3263,3269 **** (TREE_CODE (exp) == STRING_CST ? MAX (TREE_STRING_LENGTH (exp), int_size_in_bytes (TREE_TYPE (exp))) ! : int_size_in_bytes (TREE_TYPE (exp)))); } --- 3420,3427 ---- (TREE_CODE (exp) == STRING_CST ? MAX (TREE_STRING_LENGTH (exp), int_size_in_bytes (TREE_TYPE (exp))) ! : int_size_in_bytes (TREE_TYPE (exp))), ! align); } *************** struct pool_constant *** 3276,3287 **** { struct constant_descriptor *desc; struct pool_constant *next, *next_sym; - const char *label; rtx constant; enum machine_mode mode; int labelno; ! int align; ! int offset; int mark; }; --- 3434,3444 ---- { struct constant_descriptor *desc; struct pool_constant *next, *next_sym; rtx constant; enum machine_mode mode; int labelno; ! unsigned int align; ! HOST_WIDE_INT offset; int mark; }; *************** init_varasm_status (f) *** 3314,3320 **** /* Mark PC for GC. */ ! static void mark_pool_constant (pc) struct pool_constant *pc; { --- 3471,3477 ---- /* Mark PC for GC. */ ! static void mark_pool_constant (pc) struct pool_constant *pc; { *************** mark_pool_constant (pc) *** 3322,3327 **** --- 3479,3485 ---- { ggc_mark (pc); ggc_mark_rtx (pc->constant); + ggc_mark_rtx (pc->desc->rtl); pc = pc->next; } } *************** free_varasm_status (f) *** 3355,3377 **** /* Clear out the hash tables. */ for (i = 0; i < MAX_RTX_HASH_TABLE; ++i) { ! struct constant_descriptor* cd; cd = p->x_const_rtx_hash_table[i]; ! while (cd) { ! struct constant_descriptor* next = cd->next; ! free (cd); ! cd = next; ! } } free (p->x_const_rtx_hash_table); free (p->x_const_rtx_sym_hash_table); free (p); f->varasm = NULL; } - enum kind { RTX_DOUBLE, RTX_INT, RTX_UNSPEC }; /* Express an rtx for a constant integer (perhaps symbolic) as the sum of a symbol or label plus an explicit integer. --- 3513,3537 ---- /* Clear out the hash tables. */ for (i = 0; i < MAX_RTX_HASH_TABLE; ++i) { ! struct constant_descriptor *cd; cd = p->x_const_rtx_hash_table[i]; ! while (cd) ! { ! struct constant_descriptor *next = cd->next; ! ! free (cd); ! cd = next; ! } } free (p->x_const_rtx_hash_table); free (p->x_const_rtx_sym_hash_table); free (p); + f->varasm = NULL; } /* Express an rtx for a constant integer (perhaps symbolic) as the sum of a symbol or label plus an explicit integer. *************** decode_rtx_const (mode, x, value) *** 3406,3411 **** --- 3566,3599 ---- } break; + case CONST_VECTOR: + { + int units, i; + rtx elt; + + units = CONST_VECTOR_NUNITS (x); + value->kind = RTX_VECTOR; + value->mode = mode; + + for (i = 0; i < units; ++i) + { + elt = CONST_VECTOR_ELT (x, i); + if (GET_MODE_CLASS (mode) == MODE_VECTOR_INT) + { + value->un.veclo[i] = (HOST_WIDE_INT) INTVAL (elt); + value->un.vechi[i] = 0; + } + else if (GET_MODE_CLASS (mode) == MODE_VECTOR_FLOAT) + { + value->un.veclo[i] = (HOST_WIDE_INT) CONST_DOUBLE_LOW (elt); + value->un.vechi[i] = (HOST_WIDE_INT) CONST_DOUBLE_HIGH (elt); + } + else + abort (); + } + } + break; + case CONST_INT: value->un.addr.offset = INTVAL (x); break; *************** decode_rtx_const (mode, x, value) *** 3436,3442 **** break; default: ! abort (); } if (value->kind == RTX_INT && value->un.addr.base != 0 --- 3624,3631 ---- break; default: ! value->kind = RTX_UNKNOWN; ! break; } if (value->kind == RTX_INT && value->un.addr.base != 0 *************** decode_rtx_const (mode, x, value) *** 3456,3462 **** } } ! if (value->kind != RTX_DOUBLE && value->un.addr.base != 0) switch (GET_CODE (value->un.addr.base)) { case SYMBOL_REF: --- 3645,3651 ---- } } ! if (value->kind > RTX_DOUBLE && value->un.addr.base != 0) switch (GET_CODE (value->un.addr.base)) { case SYMBOL_REF: *************** decode_rtx_const (mode, x, value) *** 3468,3474 **** case LABEL_REF: /* For a LABEL_REF, compare labels. */ value->un.addr.base = XEXP (value->un.addr.base, 0); ! default: break; } --- 3657,3663 ---- case LABEL_REF: /* For a LABEL_REF, compare labels. */ value->un.addr.base = XEXP (value->un.addr.base, 0); ! default: break; } *************** simplify_subtraction (x) *** 3486,3494 **** decode_rtx_const (GET_MODE (x), XEXP (x, 0), &val0); decode_rtx_const (GET_MODE (x), XEXP (x, 1), &val1); ! if (val0.kind != RTX_DOUBLE && val0.kind == val1.kind && val0.un.addr.base == val1.un.addr.base) return GEN_INT (val0.un.addr.offset - val1.un.addr.offset); return x; } --- 3675,3685 ---- decode_rtx_const (GET_MODE (x), XEXP (x, 0), &val0); decode_rtx_const (GET_MODE (x), XEXP (x, 1), &val1); ! if (val0.kind > RTX_DOUBLE ! && val0.kind == val1.kind && val0.un.addr.base == val1.un.addr.base) return GEN_INT (val0.un.addr.offset - val1.un.addr.offset); + return x; } *************** const_hash_rtx (mode, x) *** 3499,3506 **** enum machine_mode mode; rtx x; { ! register int hi; ! register size_t i; struct rtx_const value; decode_rtx_const (mode, x, &value); --- 3690,3697 ---- enum machine_mode mode; rtx x; { ! int hi; ! size_t i; struct rtx_const value; decode_rtx_const (mode, x, &value); *************** compare_constant_rtx (mode, x, desc) *** 3524,3532 **** rtx x; struct constant_descriptor *desc; { ! register int *p = (int *) desc->u.contents; ! register int *strp; ! register int len; struct rtx_const value; decode_rtx_const (mode, x, &value); --- 3715,3723 ---- rtx x; struct constant_descriptor *desc; { ! int *p = (int *) desc->u.contents; ! int *strp; ! int len; struct rtx_const value; decode_rtx_const (mode, x, &value); *************** record_constant_rtx (mode, x) *** 3551,3557 **** { struct constant_descriptor *ptr; ! ptr = ((struct constant_descriptor *) xcalloc (1, (offsetof (struct constant_descriptor, u) + sizeof (struct rtx_const)))); decode_rtx_const (mode, x, (struct rtx_const *) ptr->u.contents); --- 3742,3748 ---- { struct constant_descriptor *ptr; ! ptr = ((struct constant_descriptor *) xcalloc (1, (offsetof (struct constant_descriptor, u) + sizeof (struct rtx_const)))); decode_rtx_const (mode, x, (struct rtx_const *) ptr->u.contents); *************** record_constant_rtx (mode, x) *** 3559,3564 **** --- 3750,3773 ---- return ptr; } + /* Given a constant rtx X, return a MEM for the location in memory at which + this constant has been placed. Return 0 if it not has been placed yet. */ + + rtx + mem_for_const_double (x) + rtx x; + { + enum machine_mode mode = GET_MODE (x); + struct constant_descriptor *desc; + + for (desc = const_rtx_hash_table[const_hash_rtx (mode, x)]; desc; + desc = desc->next) + if (compare_constant_rtx (mode, x, desc)) + return desc->rtl; + + return 0; + } + /* Given a constant rtx X, make (or find) a memory constant for its value and return a MEM rtx to refer to it in memory. */ *************** force_const_mem (mode, x) *** 3567,3687 **** enum machine_mode mode; rtx x; { ! register int hash; ! register struct constant_descriptor *desc; char label[256]; - const char *found = 0; rtx def; ! ! /* If we want this CONST_DOUBLE in the same mode as it is in memory ! (this will always be true for floating CONST_DOUBLEs that have been ! placed in memory, but not for VOIDmode (integer) CONST_DOUBLEs), ! use the previous copy. Otherwise, make a new one. Note that in ! the unlikely event that this same CONST_DOUBLE is used in two different ! modes in an alternating fashion, we will allocate a lot of different ! memory locations, but this should be extremely rare. */ ! ! if (GET_CODE (x) == CONST_DOUBLE ! && GET_CODE (CONST_DOUBLE_MEM (x)) == MEM ! && GET_MODE (CONST_DOUBLE_MEM (x)) == mode) ! return CONST_DOUBLE_MEM (x); /* Compute hash code of X. Search the descriptors for that hash code ! to see if any of them describes X. If yes, the descriptor records ! the label number already assigned. */ ! hash = const_hash_rtx (mode, x); - for (desc = const_rtx_hash_table[hash]; desc; desc = desc->next) if (compare_constant_rtx (mode, x, desc)) ! { ! found = desc->label; ! break; ! } ! ! if (found == 0) ! { ! register struct pool_constant *pool; ! int align; ! ! /* No constant equal to X is known to have been output. ! Make a constant descriptor to enter X in the hash table. ! Assign the label number and record it in the descriptor for ! future calls to this function to find. */ ! ! desc = record_constant_rtx (mode, x); ! desc->next = const_rtx_hash_table[hash]; ! const_rtx_hash_table[hash] = desc; ! /* Align the location counter as required by EXP's data type. */ ! align = (mode == VOIDmode) ? UNITS_PER_WORD : GET_MODE_SIZE (mode); ! if (align > BIGGEST_ALIGNMENT / BITS_PER_UNIT) ! align = BIGGEST_ALIGNMENT / BITS_PER_UNIT; #ifdef CONSTANT_ALIGNMENT ! align = CONSTANT_ALIGNMENT (make_tree (type_for_mode (mode, 0), x), ! align * BITS_PER_UNIT) / BITS_PER_UNIT; #endif ! pool_offset += align - 1; ! pool_offset &= ~ (align - 1); ! ! if (GET_CODE (x) == LABEL_REF) ! LABEL_PRESERVE_P (XEXP (x, 0)) = 1; ! ! /* Allocate a pool constant descriptor, fill it in, and chain it in. */ ! ! pool = (struct pool_constant *) ggc_alloc (sizeof (struct pool_constant)); ! pool->desc = desc; ! pool->constant = x; ! pool->mode = mode; ! pool->labelno = const_labelno; ! pool->align = align; ! pool->offset = pool_offset; ! pool->mark = 1; ! pool->next = 0; ! ! if (last_pool == 0) ! first_pool = pool; ! else ! last_pool->next = pool; ! last_pool = pool; ! pool_offset += GET_MODE_SIZE (mode); ! /* Create a string containing the label name, in LABEL. */ ! ASM_GENERATE_INTERNAL_LABEL (label, "LC", const_labelno); ! ++const_labelno; ! desc->label = found = ggc_strdup (label); ! /* Add label to symbol hash table. */ ! hash = SYMHASH (found); ! pool->label = found; ! pool->next_sym = const_rtx_sym_hash_table[hash]; ! const_rtx_sym_hash_table[hash] = pool; ! } ! /* We have a symbol name; construct the SYMBOL_REF and the MEM. */ ! def = gen_rtx_MEM (mode, gen_rtx_SYMBOL_REF (Pmode, found)); set_mem_attributes (def, type_for_mode (mode, 0), 1); RTX_UNCHANGING_P (def) = 1; /* Mark the symbol_ref as belonging to this constants pool. */ CONSTANT_POOL_ADDRESS_P (XEXP (def, 0)) = 1; current_function_uses_const_pool = 1; - if (GET_CODE (x) == CONST_DOUBLE) - { - if (CONST_DOUBLE_MEM (x) == cc0_rtx) - { - CONST_DOUBLE_CHAIN (x) = const_double_chain; - const_double_chain = x; - } - CONST_DOUBLE_MEM (x) = def; - } - return def; } --- 3776,3855 ---- enum machine_mode mode; rtx x; { ! int hash; ! struct constant_descriptor *desc; char label[256]; rtx def; ! struct pool_constant *pool; ! unsigned int align; /* Compute hash code of X. Search the descriptors for that hash code ! to see if any of them describes X. If yes, we have an rtx to use. */ hash = const_hash_rtx (mode, x); for (desc = const_rtx_hash_table[hash]; desc; desc = desc->next) if (compare_constant_rtx (mode, x, desc)) ! return desc->rtl; ! /* No constant equal to X is known to have been output. ! Make a constant descriptor to enter X in the hash table ! and make a MEM for it. */ ! desc = record_constant_rtx (mode, x); ! desc->next = const_rtx_hash_table[hash]; ! const_rtx_hash_table[hash] = desc; ! ! /* Align the location counter as required by EXP's data type. */ ! align = GET_MODE_ALIGNMENT (mode == VOIDmode ? word_mode : mode); #ifdef CONSTANT_ALIGNMENT ! align = CONSTANT_ALIGNMENT (make_tree (type_for_mode (mode, 0), x), align); #endif ! pool_offset += (align / BITS_PER_UNIT) - 1; ! pool_offset &= ~ ((align / BITS_PER_UNIT) - 1); ! if (GET_CODE (x) == LABEL_REF) ! LABEL_PRESERVE_P (XEXP (x, 0)) = 1; ! /* Allocate a pool constant descriptor, fill it in, and chain it in. */ ! pool = (struct pool_constant *) ggc_alloc (sizeof (struct pool_constant)); ! pool->desc = desc; ! pool->constant = x; ! pool->mode = mode; ! pool->labelno = const_labelno; ! pool->align = align; ! pool->offset = pool_offset; ! pool->mark = 1; ! pool->next = 0; ! if (last_pool == 0) ! first_pool = pool; ! else ! last_pool->next = pool; ! ! last_pool = pool; ! pool_offset += GET_MODE_SIZE (mode); ! /* Create a string containing the label name, in LABEL. */ ! ASM_GENERATE_INTERNAL_LABEL (label, "LC", const_labelno); ! ++const_labelno; ! /* Construct the SYMBOL_REF and the MEM. */ ! pool->desc->rtl = def ! = gen_rtx_MEM (mode, gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (label))); ! set_mem_alias_set (def, const_alias_set); set_mem_attributes (def, type_for_mode (mode, 0), 1); RTX_UNCHANGING_P (def) = 1; + /* Add label to symbol hash table. */ + hash = SYMHASH (XSTR (XEXP (def, 0), 0)); + pool->next_sym = const_rtx_sym_hash_table[hash]; + const_rtx_sym_hash_table[hash] = pool; + /* Mark the symbol_ref as belonging to this constants pool. */ CONSTANT_POOL_ADDRESS_P (XEXP (def, 0)) = 1; current_function_uses_const_pool = 1; return def; } *************** find_pool_constant (f, addr) *** 3698,3704 **** for (pool = f->varasm->x_const_rtx_sym_hash_table[SYMHASH (label)]; pool; pool = pool->next_sym) ! if (pool->label == label) return pool; abort (); --- 3866,3872 ---- for (pool = f->varasm->x_const_rtx_sym_hash_table[SYMHASH (label)]; pool; pool = pool->next_sym) ! if (XSTR (XEXP (pool->desc->rtl, 0), 0) == label) return pool; abort (); *************** get_pool_constant (addr) *** 3713,3718 **** --- 3881,3899 ---- return (find_pool_constant (cfun, addr))->constant; } + /* Given a constant pool SYMBOL_REF, return the corresponding constant + and whether it has been output or not. */ + + rtx + get_pool_constant_mark (addr, pmarked) + rtx addr; + bool *pmarked; + { + struct pool_constant *pool = find_pool_constant (cfun, addr); + *pmarked = (pool->mark != 0); + return pool->constant; + } + /* Likewise, but for the constant pool of a specific function. */ rtx *************** output_constant_pool (fnname, fndecl) *** 3815,3828 **** x = const0_rtx; } break; ! default: break; } /* First switch to correct section. */ #ifdef SELECT_RTX_SECTION ! SELECT_RTX_SECTION (pool->mode, x); #else readonly_data_section (); #endif --- 3996,4009 ---- x = const0_rtx; } break; ! default: break; } /* First switch to correct section. */ #ifdef SELECT_RTX_SECTION ! SELECT_RTX_SECTION (pool->mode, x, pool->align); #else readonly_data_section (); #endif *************** output_constant_pool (fnname, fndecl) *** 3832,3839 **** pool->align, pool->labelno, done); #endif ! if (pool->align > 1) ! ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (pool->align)); /* Output the label. */ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "LC", pool->labelno); --- 4013,4019 ---- pool->align, pool->labelno, done); #endif ! assemble_align (pool->align); /* Output the label. */ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "LC", pool->labelno); *************** output_constant_pool (fnname, fndecl) *** 3846,3857 **** abort (); memcpy ((char *) &u, (char *) &CONST_DOUBLE_LOW (x), sizeof u); ! assemble_real (u.d, pool->mode); break; case MODE_INT: case MODE_PARTIAL_INT: ! assemble_integer (x, GET_MODE_SIZE (pool->mode), 1); break; default: --- 4026,4077 ---- abort (); memcpy ((char *) &u, (char *) &CONST_DOUBLE_LOW (x), sizeof u); ! assemble_real (u.d, pool->mode, pool->align); break; case MODE_INT: case MODE_PARTIAL_INT: ! assemble_integer (x, GET_MODE_SIZE (pool->mode), pool->align, 1); ! break; ! ! case MODE_VECTOR_FLOAT: ! { ! int i, units; ! rtx elt; ! ! if (GET_CODE (x) != CONST_VECTOR) ! abort (); ! ! units = CONST_VECTOR_NUNITS (x); ! ! for (i = 0; i < units; i++) ! { ! elt = CONST_VECTOR_ELT (x, i); ! memcpy ((char *) &u, ! (char *) &CONST_DOUBLE_LOW (elt), ! sizeof u); ! assemble_real (u.d, GET_MODE_INNER (pool->mode), pool->align); ! } ! } ! break; ! ! case MODE_VECTOR_INT: ! { ! int i, units; ! rtx elt; ! ! if (GET_CODE (x) != CONST_VECTOR) ! abort (); ! ! units = CONST_VECTOR_NUNITS (x); ! ! for (i = 0; i < units; i++) ! { ! elt = CONST_VECTOR_ELT (x, i); ! assemble_integer (elt, GET_MODE_UNIT_SIZE (pool->mode), ! pool->align, 1); ! } ! } break; default: *************** output_constant_pool (fnname, fndecl) *** 3861,3867 **** #ifdef ASM_OUTPUT_SPECIAL_POOL_ENTRY done: ; #endif - } #ifdef ASM_OUTPUT_POOL_EPILOGUE --- 4081,4086 ---- *************** output_constant_pool (fnname, fndecl) *** 3879,3885 **** static void mark_constant_pool () { ! register rtx insn; struct pool_constant *pool; if (first_pool == 0 && htab_elements (const_str_htab) == 0) --- 4098,4104 ---- static void mark_constant_pool () { ! rtx insn; struct pool_constant *pool; if (first_pool == 0 && htab_elements (const_str_htab) == 0) *************** static void *** 3908,3915 **** mark_constants (x) rtx x; { ! register int i; ! register const char *format_ptr; if (x == 0) return; --- 4127,4134 ---- mark_constants (x) rtx x; { ! int i; ! const char *format_ptr; if (x == 0) return; *************** mark_constants (x) *** 3919,3928 **** mark_constant (&x, NULL); return; } - /* Never search inside a CONST_DOUBLE, because CONST_DOUBLE_MEM may be - a MEM, but does not constitute a use of that MEM. */ - else if (GET_CODE (x) == CONST_DOUBLE) - return; /* Insns may appear inside a SEQUENCE. Only check the patterns of insns, not any notes that may be attached. We don't want to mark --- 4138,4143 ---- *************** mark_constants (x) *** 3946,3952 **** case 'E': if (XVEC (x, i) != 0) { ! register int j; for (j = 0; j < XVECLEN (x, i); j++) mark_constants (XVECEXP (x, i, j)); --- 4161,4167 ---- case 'E': if (XVEC (x, i) != 0) { ! int j; for (j = 0; j < XVECLEN (x, i); j++) mark_constants (XVECEXP (x, i, j)); *************** mark_constants (x) *** 3970,3976 **** /* Given a SYMBOL_REF CURRENT_RTX, mark it and all constants it refers to as used. Emit referenced deferred strings. This function can ! be used with for_each_rtx () to mark all SYMBOL_REFs in an rtx. */ static int mark_constant (current_rtx, data) --- 4185,4191 ---- /* Given a SYMBOL_REF CURRENT_RTX, mark it and all constants it refers to as used. Emit referenced deferred strings. This function can ! be used with for_each_rtx to mark all SYMBOL_REFs in an rtx. */ static int mark_constant (current_rtx, data) *************** mark_constant (current_rtx, data) *** 3981,3990 **** if (x == NULL_RTX) return 0; ! else if (GET_CODE(x) == CONST_DOUBLE) ! /* Never search inside a CONST_DOUBLE because CONST_DOUBLE_MEM may ! be a MEM but does not constitute a use of that MEM. */ ! return -1; else if (GET_CODE (x) == SYMBOL_REF) { if (CONSTANT_POOL_ADDRESS_P (x)) --- 4196,4202 ---- if (x == NULL_RTX) return 0; ! else if (GET_CODE (x) == SYMBOL_REF) { if (CONSTANT_POOL_ADDRESS_P (x)) *************** output_addressed_constants (exp) *** 4026,4055 **** tree exp; { int reloc = 0; /* Give the front-end a chance to convert VALUE to something that looks more like a constant to the back-end. */ ! if (lang_expand_constant) ! exp = (*lang_expand_constant) (exp); switch (TREE_CODE (exp)) { case ADDR_EXPR: ! { ! register tree constant = TREE_OPERAND (exp, 0); ! while (TREE_CODE (constant) == COMPONENT_REF) ! { ! constant = TREE_OPERAND (constant, 0); ! } ! if (TREE_CODE_CLASS (TREE_CODE (constant)) == 'c' ! || TREE_CODE (constant) == CONSTRUCTOR) ! /* No need to do anything here ! for addresses of variables or functions. */ ! output_constant_def (constant, 0); ! } ! reloc = 1; break; case PLUS_EXPR: --- 4238,4267 ---- tree exp; { int reloc = 0; + tree tem; /* Give the front-end a chance to convert VALUE to something that looks more like a constant to the back-end. */ ! exp = (*lang_hooks.expand_constant) (exp); switch (TREE_CODE (exp)) { case ADDR_EXPR: ! /* Go inside any operations that get_inner_reference can handle and see ! if what's inside is a constant: no need to do anything here for ! addresses of variables or functions. */ ! for (tem = TREE_OPERAND (exp, 0); handled_component_p (tem); ! tem = TREE_OPERAND (tem, 0)) ! ; ! if (TREE_CODE_CLASS (TREE_CODE (tem)) == 'c' ! || TREE_CODE (tem) == CONSTRUCTOR) ! output_constant_def (tem, 0); ! if (TREE_PUBLIC (tem)) ! reloc |= 2; ! else ! reloc |= 1; break; case PLUS_EXPR: *************** output_addressed_constants (exp) *** 4065,4076 **** break; case CONSTRUCTOR: ! { ! register tree link; ! for (link = CONSTRUCTOR_ELTS (exp); link; link = TREE_CHAIN (link)) ! if (TREE_VALUE (link) != 0) ! reloc |= output_addressed_constants (TREE_VALUE (link)); ! } break; default: --- 4277,4286 ---- break; case CONSTRUCTOR: ! for (tem = CONSTRUCTOR_ELTS (exp); tem; tem = TREE_CHAIN (tem)) ! if (TREE_VALUE (tem) != 0) ! reloc |= output_addressed_constants (TREE_VALUE (tem)); ! break; default: *************** initializer_constant_valid_p (value, end *** 4096,4103 **** { /* Give the front-end a chance to convert VALUE to something that looks more like a constant to the back-end. */ ! if (lang_expand_constant) ! value = (*lang_expand_constant) (value); switch (TREE_CODE (value)) { --- 4306,4312 ---- { /* Give the front-end a chance to convert VALUE to something that looks more like a constant to the back-end. */ ! value = (*lang_hooks.expand_constant) (value); switch (TREE_CODE (value)) { *************** initializer_constant_valid_p (value, end *** 4109,4118 **** return initializer_constant_valid_p (TREE_VALUE (CONSTRUCTOR_ELTS (value)), endtype); ! return TREE_STATIC (value) ? null_pointer_node : 0; case INTEGER_CST: case REAL_CST: case STRING_CST: case COMPLEX_CST: --- 4318,4328 ---- return initializer_constant_valid_p (TREE_VALUE (CONSTRUCTOR_ELTS (value)), endtype); ! return TREE_STATIC (value) ? null_pointer_node : 0; case INTEGER_CST: + case VECTOR_CST: case REAL_CST: case STRING_CST: case COMPLEX_CST: *************** initializer_constant_valid_p (value, end *** 4122,4127 **** --- 4332,4338 ---- case FDESC_EXPR: return staticp (TREE_OPERAND (value, 0)) ? TREE_OPERAND (value, 0) : 0; + case VIEW_CONVERT_EXPR: case NON_LVALUE_EXPR: return initializer_constant_valid_p (TREE_OPERAND (value, 0), endtype); *************** initializer_constant_valid_p (value, end *** 4230,4237 **** tree op0, op1; op0 = TREE_OPERAND (value, 0); op1 = TREE_OPERAND (value, 1); ! STRIP_NOPS (op0); ! STRIP_NOPS (op1); if (TREE_CODE (op0) == ADDR_EXPR && TREE_CODE (TREE_OPERAND (op0, 0)) == LABEL_DECL --- 4441,4477 ---- tree op0, op1; op0 = TREE_OPERAND (value, 0); op1 = TREE_OPERAND (value, 1); ! ! /* Like STRIP_NOPS except allow the operand mode to widen. ! This works around a feature of fold that simplfies ! (int)(p1 - p2) to ((int)p1 - (int)p2) under the theory ! that the narrower operation is cheaper. */ ! ! while (TREE_CODE (op0) == NOP_EXPR ! || TREE_CODE (op0) == CONVERT_EXPR ! || TREE_CODE (op0) == NON_LVALUE_EXPR) ! { ! tree inner = TREE_OPERAND (op0, 0); ! if (inner == error_mark_node ! || ! INTEGRAL_MODE_P (TYPE_MODE (TREE_TYPE (inner))) ! || (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (op0))) ! > GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (inner))))) ! break; ! op0 = inner; ! } ! ! while (TREE_CODE (op1) == NOP_EXPR ! || TREE_CODE (op1) == CONVERT_EXPR ! || TREE_CODE (op1) == NON_LVALUE_EXPR) ! { ! tree inner = TREE_OPERAND (op1, 0); ! if (inner == error_mark_node ! || ! INTEGRAL_MODE_P (TYPE_MODE (TREE_TYPE (inner))) ! || (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (op1))) ! > GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (inner))))) ! break; ! op1 = inner; ! } if (TREE_CODE (op0) == ADDR_EXPR && TREE_CODE (TREE_OPERAND (op0, 0)) == LABEL_DECL *************** initializer_constant_valid_p (value, end *** 4264,4305 **** There a case in which we would fail to output exactly SIZE bytes: for a structure constructor that wants to produce more than SIZE bytes. ! But such constructors will never be generated for any possible input. */ void ! output_constant (exp, size) ! register tree exp; ! register int size; { ! register enum tree_code code = TREE_CODE (TREE_TYPE (exp)); ! /* Some front-ends use constants other than the standard ! language-indepdent varieties, but which may still be output ! directly. Give the front-end a chance to convert EXP to a ! language-independent representation. */ ! if (lang_expand_constant) ! { ! exp = (*lang_expand_constant) (exp); ! code = TREE_CODE (TREE_TYPE (exp)); ! } if (size == 0 || flag_syntax_only) return; ! /* Eliminate the NON_LVALUE_EXPR_EXPR that makes a cast not be an lvalue. ! That way we get the constant (we hope) inside it. Also, strip off any ! NOP_EXPR that converts between two record, union, array, or set types ! or a CONVERT_EXPR that converts to a union TYPE. */ ! while ((TREE_CODE (exp) == NOP_EXPR ! && (TREE_TYPE (exp) == TREE_TYPE (TREE_OPERAND (exp, 0)) ! || AGGREGATE_TYPE_P (TREE_TYPE (exp)))) ! || (TREE_CODE (exp) == CONVERT_EXPR ! && code == UNION_TYPE) ! || TREE_CODE (exp) == NON_LVALUE_EXPR) ! { ! exp = TREE_OPERAND (exp, 0); ! code = TREE_CODE (TREE_TYPE (exp)); ! } /* Allow a constructor with no elements for any data type. This means to fill the space with zeros. */ --- 4504,4539 ---- There a case in which we would fail to output exactly SIZE bytes: for a structure constructor that wants to produce more than SIZE bytes. ! But such constructors will never be generated for any possible input. ! ! ALIGN is the alignment of the data in bits. */ void ! output_constant (exp, size, align) ! tree exp; ! HOST_WIDE_INT size; ! unsigned int align; { ! enum tree_code code; ! HOST_WIDE_INT thissize; ! /* Some front-ends use constants other than the standard language-indepdent ! varieties, but which may still be output directly. Give the front-end a ! chance to convert EXP to a language-independent representation. */ ! exp = (*lang_hooks.expand_constant) (exp); if (size == 0 || flag_syntax_only) return; ! /* Eliminate any conversions since we'll be outputting the underlying ! constant. */ ! while (TREE_CODE (exp) == NOP_EXPR || TREE_CODE (exp) == CONVERT_EXPR ! || TREE_CODE (exp) == NON_LVALUE_EXPR ! || TREE_CODE (exp) == VIEW_CONVERT_EXPR) ! exp = TREE_OPERAND (exp, 0); ! ! code = TREE_CODE (TREE_TYPE (exp)); ! thissize = int_size_in_bytes (TREE_TYPE (exp)); /* Allow a constructor with no elements for any data type. This means to fill the space with zeros. */ *************** output_constant (exp, size) *** 4311,4319 **** if (TREE_CODE (exp) == FDESC_EXPR) { HOST_WIDE_INT part = tree_low_cst (TREE_OPERAND (exp, 1), 0); tree decl = TREE_OPERAND (exp, 0); - #ifdef ASM_OUTPUT_FDESC ASM_OUTPUT_FDESC (asm_out_file, decl, part); #else abort (); --- 4545,4553 ---- if (TREE_CODE (exp) == FDESC_EXPR) { + #ifdef ASM_OUTPUT_FDESC HOST_WIDE_INT part = tree_low_cst (TREE_OPERAND (exp, 1), 0); tree decl = TREE_OPERAND (exp, 0); ASM_OUTPUT_FDESC (asm_out_file, decl, part); #else abort (); *************** output_constant (exp, size) *** 4321,4326 **** --- 4555,4562 ---- return; } + /* Now output the underlying data. If we've handling the padding, return. + Otherwise, break and ensure THISSIZE is the size written. */ switch (code) { case CHAR_TYPE: *************** output_constant (exp, size) *** 4329,4344 **** case ENUMERAL_TYPE: case POINTER_TYPE: case REFERENCE_TYPE: - /* ??? What about (int)((float)(int)&foo + 4) */ - while (TREE_CODE (exp) == NOP_EXPR || TREE_CODE (exp) == CONVERT_EXPR - || TREE_CODE (exp) == NON_LVALUE_EXPR) - exp = TREE_OPERAND (exp, 0); - if (! assemble_integer (expand_expr (exp, NULL_RTX, VOIDmode, EXPAND_INITIALIZER), ! size, 0)) error ("initializer for integer value is too complicated"); - size = 0; break; case REAL_TYPE: --- 4565,4574 ---- case ENUMERAL_TYPE: case POINTER_TYPE: case REFERENCE_TYPE: if (! assemble_integer (expand_expr (exp, NULL_RTX, VOIDmode, EXPAND_INITIALIZER), ! size, align, 0)) error ("initializer for integer value is too complicated"); break; case REAL_TYPE: *************** output_constant (exp, size) *** 4346,4379 **** error ("initializer for floating value is not a floating constant"); assemble_real (TREE_REAL_CST (exp), ! mode_for_size (size * BITS_PER_UNIT, MODE_FLOAT, 0)); ! size = 0; break; case COMPLEX_TYPE: ! output_constant (TREE_REALPART (exp), size / 2); ! output_constant (TREE_IMAGPART (exp), size / 2); ! size -= (size / 2) * 2; break; case ARRAY_TYPE: if (TREE_CODE (exp) == CONSTRUCTOR) { ! output_constructor (exp, size); return; } else if (TREE_CODE (exp) == STRING_CST) { ! int excess = 0; ! ! if (size > TREE_STRING_LENGTH (exp)) ! { ! excess = size - TREE_STRING_LENGTH (exp); ! size = TREE_STRING_LENGTH (exp); ! } ! ! assemble_string (TREE_STRING_POINTER (exp), size); ! size = excess; } else abort (); --- 4576,4602 ---- error ("initializer for floating value is not a floating constant"); assemble_real (TREE_REAL_CST (exp), ! mode_for_size (size * BITS_PER_UNIT, MODE_FLOAT, 0), ! align); break; case COMPLEX_TYPE: ! output_constant (TREE_REALPART (exp), thissize / 2, align); ! output_constant (TREE_IMAGPART (exp), thissize / 2, ! min_align (align, BITS_PER_UNIT * (thissize / 2))); break; case ARRAY_TYPE: + case VECTOR_TYPE: if (TREE_CODE (exp) == CONSTRUCTOR) { ! output_constructor (exp, size, align); return; } else if (TREE_CODE (exp) == STRING_CST) { ! thissize = MIN (TREE_STRING_LENGTH (exp), size); ! assemble_string (TREE_STRING_POINTER (exp), thissize); } else abort (); *************** output_constant (exp, size) *** 4382,4388 **** case RECORD_TYPE: case UNION_TYPE: if (TREE_CODE (exp) == CONSTRUCTOR) ! output_constructor (exp, size); else abort (); return; --- 4605,4611 ---- case RECORD_TYPE: case UNION_TYPE: if (TREE_CODE (exp) == CONSTRUCTOR) ! output_constructor (exp, size, align); else abort (); return; *************** output_constant (exp, size) *** 4391,4412 **** if (TREE_CODE (exp) == INTEGER_CST) assemble_integer (expand_expr (exp, NULL_RTX, VOIDmode, EXPAND_INITIALIZER), ! size, 1); else if (TREE_CODE (exp) == CONSTRUCTOR) { ! unsigned char *buffer = (unsigned char *) alloca (size); ! if (get_set_constructor_bytes (exp, buffer, size)) abort (); ! assemble_string ((char *) buffer, size); } else error ("unknown set constructor type"); return; default: ! break; /* ??? */ } if (size > 0) assemble_zeros (size); } --- 4614,4639 ---- if (TREE_CODE (exp) == INTEGER_CST) assemble_integer (expand_expr (exp, NULL_RTX, VOIDmode, EXPAND_INITIALIZER), ! thissize, align, 1); else if (TREE_CODE (exp) == CONSTRUCTOR) { ! unsigned char *buffer = (unsigned char *) alloca (thissize); ! if (get_set_constructor_bytes (exp, buffer, thissize)) abort (); ! assemble_string ((char *) buffer, thissize); } else error ("unknown set constructor type"); return; + case ERROR_MARK: + return; + default: ! abort (); } + size -= thissize; if (size > 0) assemble_zeros (size); } *************** array_size_for_constructor (val) *** 4422,4427 **** --- 4649,4660 ---- { tree max_index, i; + /* This code used to attempt to handle string constants that are not + arrays of single-bytes, but nothing else does, so there's no point in + doing it here. */ + if (TREE_CODE (val) == STRING_CST) + return TREE_STRING_LENGTH (val); + max_index = NULL_TREE; for (i = CONSTRUCTOR_ELTS (val); i ; i = TREE_CHAIN (i)) { *************** array_size_for_constructor (val) *** 4437,4443 **** return 0; /* Compute the total number of array elements. */ ! i = size_binop (MINUS_EXPR, convert (sizetype, max_index), convert (sizetype, TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (val))))); i = size_binop (PLUS_EXPR, i, convert (sizetype, integer_one_node)); --- 4670,4676 ---- return 0; /* Compute the total number of array elements. */ ! i = size_binop (MINUS_EXPR, convert (sizetype, max_index), convert (sizetype, TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (val))))); i = size_binop (PLUS_EXPR, i, convert (sizetype, integer_one_node)); *************** array_size_for_constructor (val) *** 4452,4470 **** Generate at least SIZE bytes, padding if necessary. */ static void ! output_constructor (exp, size) tree exp; ! int size; { tree type = TREE_TYPE (exp); ! register tree link, field = 0; tree min_index = 0; /* Number of bytes output or skipped so far. In other words, current position within the constructor. */ HOST_WIDE_INT total_bytes = 0; /* Non-zero means BYTE contains part of a byte, to be output. */ int byte_buffer_in_use = 0; ! register int byte = 0; if (HOST_BITS_PER_WIDE_INT < BITS_PER_UNIT) abort (); --- 4685,4704 ---- Generate at least SIZE bytes, padding if necessary. */ static void ! output_constructor (exp, size, align) tree exp; ! HOST_WIDE_INT size; ! unsigned int align; { tree type = TREE_TYPE (exp); ! tree link, field = 0; tree min_index = 0; /* Number of bytes output or skipped so far. In other words, current position within the constructor. */ HOST_WIDE_INT total_bytes = 0; /* Non-zero means BYTE contains part of a byte, to be output. */ int byte_buffer_in_use = 0; ! int byte = 0; if (HOST_BITS_PER_WIDE_INT < BITS_PER_UNIT) abort (); *************** output_constructor (exp, size) *** 4484,4490 **** There is always a maximum of one element in the chain LINK for unions (even if the initializer in a source program incorrectly contains ! more one). */ for (link = CONSTRUCTOR_ELTS (exp); link; link = TREE_CHAIN (link), --- 4718,4724 ---- There is always a maximum of one element in the chain LINK for unions (even if the initializer in a source program incorrectly contains ! more one). */ for (link = CONSTRUCTOR_ELTS (exp); link; link = TREE_CHAIN (link), *************** output_constructor (exp, size) *** 4514,4519 **** --- 4748,4754 ---- HOST_WIDE_INT lo_index = tree_low_cst (TREE_OPERAND (index, 0), 0); HOST_WIDE_INT hi_index = tree_low_cst (TREE_OPERAND (index, 1), 0); HOST_WIDE_INT index; + unsigned int align2 = min_align (align, fieldsize * BITS_PER_UNIT); for (index = lo_index; index <= hi_index; index++) { *************** output_constructor (exp, size) *** 4521,4527 **** if (val == 0) assemble_zeros (fieldsize); else ! output_constant (val, fieldsize); /* Count its size. */ total_bytes += fieldsize; --- 4756,4762 ---- if (val == 0) assemble_zeros (fieldsize); else ! output_constant (val, fieldsize, align2); /* Count its size. */ total_bytes += fieldsize; *************** output_constructor (exp, size) *** 4535,4540 **** --- 4770,4776 ---- /* Since this structure is static, we know the positions are constant. */ HOST_WIDE_INT pos = field ? int_byte_position (field) : 0; + unsigned int align2; if (index != 0) pos = (tree_low_cst (TYPE_SIZE_UNIT (TREE_TYPE (val)), 1) *************** output_constructor (exp, size) *** 4543,4549 **** /* Output any buffered-up bit-fields preceding this element. */ if (byte_buffer_in_use) { ! ASM_OUTPUT_BYTE (asm_out_file, byte); total_bytes++; byte_buffer_in_use = 0; } --- 4779,4785 ---- /* Output any buffered-up bit-fields preceding this element. */ if (byte_buffer_in_use) { ! assemble_integer (GEN_INT (byte), 1, BITS_PER_UNIT, 1); total_bytes++; byte_buffer_in_use = 0; } *************** output_constructor (exp, size) *** 4557,4568 **** total_bytes = pos; } ! else if (field != 0 && DECL_PACKED (field)) ! /* Some assemblers automaticallly align a datum according to its ! size if no align directive is specified. The datum, however, ! may be declared with 'packed' attribute, so we have to disable ! such a feature. */ ! ASM_OUTPUT_ALIGN (asm_out_file, 0); /* Determine size this element should occupy. */ if (field) --- 4793,4800 ---- total_bytes = pos; } ! /* Find the alignment of this element. */ ! align2 = min_align (align, BITS_PER_UNIT * pos); /* Determine size this element should occupy. */ if (field) *************** output_constructor (exp, size) *** 4599,4605 **** if (val == 0) assemble_zeros (fieldsize); else ! output_constant (val, fieldsize); /* Count its size. */ total_bytes += fieldsize; --- 4831,4837 ---- if (val == 0) assemble_zeros (fieldsize); else ! output_constant (val, fieldsize, align2); /* Count its size. */ total_bytes += fieldsize; *************** output_constructor (exp, size) *** 4625,4631 **** /* Output remnant of any bit field in previous bytes. */ if (byte_buffer_in_use) { ! ASM_OUTPUT_BYTE (asm_out_file, byte); total_bytes++; byte_buffer_in_use = 0; } --- 4857,4863 ---- /* Output remnant of any bit field in previous bytes. */ if (byte_buffer_in_use) { ! assemble_integer (GEN_INT (byte), 1, BITS_PER_UNIT, 1); total_bytes++; byte_buffer_in_use = 0; } *************** output_constructor (exp, size) *** 4661,4667 **** within this element when necessary. */ while (next_byte != total_bytes) { ! ASM_OUTPUT_BYTE (asm_out_file, byte); total_bytes++; byte = 0; } --- 4893,4899 ---- within this element when necessary. */ while (next_byte != total_bytes) { ! assemble_integer (GEN_INT (byte), 1, BITS_PER_UNIT, 1); total_bytes++; byte = 0; } *************** output_constructor (exp, size) *** 4747,4753 **** if (byte_buffer_in_use) { ! ASM_OUTPUT_BYTE (asm_out_file, byte); total_bytes++; } --- 4979,4985 ---- if (byte_buffer_in_use) { ! assemble_integer (GEN_INT (byte), 1, BITS_PER_UNIT, 1); total_bytes++; } *************** output_constructor (exp, size) *** 4755,4784 **** assemble_zeros (size - total_bytes); } ! #ifdef HANDLE_PRAGMA_WEAK ! /* Add function NAME to the weak symbols list. VALUE is a weak alias ! associatd with NAME. */ ! ! int ! add_weak (name, value) ! const char *name; ! const char *value; { ! struct weak_syms *weak; ! weak = (struct weak_syms *) permalloc (sizeof (struct weak_syms)); ! if (weak == NULL) ! return 0; ! weak->next = weak_decls; ! weak->name = name; ! weak->value = value; ! weak_decls = weak; ! return 1; } - #endif /* HANDLE_PRAGMA_WEAK */ /* Declare DECL to be a weak symbol. */ --- 4987,5067 ---- assemble_zeros (size - total_bytes); } ! /* This TREE_LIST contains any weak symbol declarations waiting ! to be emitted. */ ! static tree weak_decls; ! ! /* Mark DECL as weak. */ ! ! static void ! mark_weak (decl) ! tree decl; { ! DECL_WEAK (decl) = 1; ! if (DECL_RTL_SET_P (decl) ! && GET_CODE (DECL_RTL (decl)) == MEM ! && XEXP (DECL_RTL (decl), 0) ! && GET_CODE (XEXP (DECL_RTL (decl), 0)) == SYMBOL_REF) ! SYMBOL_REF_WEAK (XEXP (DECL_RTL (decl), 0)) = 1; ! } ! ! /* Merge weak status between NEWDECL and OLDDECL. */ ! void ! merge_weak (newdecl, olddecl) ! tree newdecl; ! tree olddecl; ! { ! if (DECL_WEAK (newdecl) == DECL_WEAK (olddecl)) ! return; ! if (SUPPORTS_WEAK ! && DECL_WEAK (newdecl) ! && DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl) ! && (TREE_CODE (olddecl) != VAR_DECL || ! TREE_STATIC (olddecl)) ! && TREE_USED (olddecl) ! && TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (olddecl))) ! warning_with_decl (newdecl, "weak declaration of `%s' after first use results in unspecified behavior"); ! if (DECL_WEAK (newdecl)) ! { ! tree wd; ! ! /* NEWDECL is weak, but OLDDECL is not. */ ! ! /* If we already output the OLDDECL, we're in trouble; we can't ! go back and make it weak. This error cannot caught in ! declare_weak because the NEWDECL and OLDDECL was not yet ! been merged; therefore, TREE_ASM_WRITTEN was not set. */ ! if (TREE_CODE (olddecl) == FUNCTION_DECL && TREE_ASM_WRITTEN (olddecl)) ! error_with_decl (newdecl, ! "weak declaration of `%s' must precede definition"); ! ! if (SUPPORTS_WEAK) ! { ! /* We put the NEWDECL on the weak_decls list at some point. ! Replace it with the OLDDECL. */ ! for (wd = weak_decls; wd; wd = TREE_CHAIN (wd)) ! if (TREE_VALUE (wd) == newdecl) ! { ! TREE_VALUE (wd) = olddecl; ! break; ! } ! /* We may not find the entry on the list. If NEWDECL is a ! weak alias, then we will have already called ! globalize_decl to remove the entry; in that case, we do ! not need to do anything. */ ! } ! ! /* Make the OLDDECL weak; it's OLDDECL that we'll be keeping. */ ! mark_weak (olddecl); ! } ! else ! /* OLDDECL was weak, but NEWDECL was not explicitly marked as ! weak. Just update NEWDECL to indicate that it's weak too. */ ! mark_weak (newdecl); } /* Declare DECL to be a weak symbol. */ *************** declare_weak (decl) *** 4788,4845 **** { if (! TREE_PUBLIC (decl)) error_with_decl (decl, "weak declaration of `%s' must be public"); ! else if (TREE_ASM_WRITTEN (decl)) error_with_decl (decl, "weak declaration of `%s' must precede definition"); else if (SUPPORTS_WEAK) ! DECL_WEAK (decl) = 1; ! #ifdef HANDLE_PRAGMA_WEAK ! add_weak (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), NULL); ! #endif } /* Emit any pending weak declarations. */ - #ifdef HANDLE_PRAGMA_WEAK - struct weak_syms * weak_decls; - #endif - void weak_finish () { ! #ifdef HANDLE_PRAGMA_WEAK ! if (HANDLE_PRAGMA_WEAK) { ! struct weak_syms *t; ! for (t = weak_decls; t; t = t->next) ! { ! if (t->name) ! ASM_OUTPUT_WEAK_ALIAS (asm_out_file, t->name, t->value); ! } ! } #endif } ! /* Remove NAME from the pending list of weak symbols. This prevents ! the compiler from emitting multiple .weak directives which confuses ! some assemblers. */ ! #ifdef ASM_WEAKEN_LABEL static void ! remove_from_pending_weak_list (name) ! const char *name ATTRIBUTE_UNUSED; { ! #ifdef HANDLE_PRAGMA_WEAK ! if (HANDLE_PRAGMA_WEAK) { ! struct weak_syms *t; ! for (t = weak_decls; t; t = t->next) { ! if (t->name && strcmp (name, t->name) == 0) ! t->name = NULL; } } #endif } ! #endif void assemble_alias (decl, target) --- 5071,5156 ---- { if (! TREE_PUBLIC (decl)) error_with_decl (decl, "weak declaration of `%s' must be public"); ! else if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl)) error_with_decl (decl, "weak declaration of `%s' must precede definition"); else if (SUPPORTS_WEAK) ! { ! if (! DECL_WEAK (decl)) ! weak_decls = tree_cons (NULL, decl, weak_decls); ! } ! else ! warning_with_decl (decl, "weak declaration of `%s' not supported"); ! ! mark_weak (decl); } /* Emit any pending weak declarations. */ void weak_finish () { ! tree t; ! ! for (t = weak_decls; t ; t = TREE_CHAIN (t)) { ! tree decl = TREE_VALUE (t); ! const char *name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)); ! ! if (! TREE_USED (decl)) ! continue; ! ! #ifdef ASM_WEAKEN_DECL ! ASM_WEAKEN_DECL (asm_out_file, decl, name, NULL); ! #else ! #ifdef ASM_WEAKEN_LABEL ! ASM_WEAKEN_LABEL (asm_out_file, name); ! #else ! #ifdef ASM_OUTPUT_WEAK_ALIAS ! warning ("only weak aliases are supported in this configuration"); ! return; #endif + #endif + #endif + } } ! /* Emit the assembly bits to indicate that DECL is globally visible. */ ! static void ! globalize_decl (decl) ! tree decl; { ! const char *name = XSTR (XEXP (DECL_RTL (decl), 0), 0); ! ! #if defined (ASM_WEAKEN_LABEL) || defined (ASM_WEAKEN_DECL) ! if (DECL_WEAK (decl)) { ! tree *p, t; ! ! #ifdef ASM_WEAKEN_DECL ! ASM_WEAKEN_DECL (asm_out_file, decl, name, 0); ! #else ! ASM_WEAKEN_LABEL (asm_out_file, name); ! #endif ! ! /* Remove this function from the pending weak list so that ! we do not emit multiple .weak directives for it. */ ! for (p = &weak_decls; (t = *p) ; ) { ! if (DECL_ASSEMBLER_NAME (decl) == DECL_ASSEMBLER_NAME (TREE_VALUE (t))) ! *p = TREE_CHAIN (t); ! else ! p = &TREE_CHAIN (t); } + return; } #endif + + ASM_GLOBALIZE_LABEL (asm_out_file, name); } ! ! /* Emit an assembler directive to make the symbol for DECL an alias to ! the symbol for TARGET. */ void assemble_alias (decl, target) *************** assemble_alias (decl, target) *** 4849,4876 **** /* We must force creation of DECL_RTL for debug info generation, even though we don't use it here. */ ! make_decl_rtl (decl, NULL_PTR); name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)); #ifdef ASM_OUTPUT_DEF /* Make name accessible from other files, if appropriate. */ - if (TREE_PUBLIC (decl)) ! { ! #ifdef ASM_WEAKEN_LABEL ! if (DECL_WEAK (decl)) ! { ! ASM_WEAKEN_LABEL (asm_out_file, name); ! /* Remove this function from the pending weak list so that ! we do not emit multiple .weak directives for it. */ ! remove_from_pending_weak_list ! (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl))); ! } ! else ! #endif ! ASM_GLOBALIZE_LABEL (asm_out_file, name); ! } #ifdef ASM_OUTPUT_DEF_FROM_DECLS ASM_OUTPUT_DEF_FROM_DECLS (asm_out_file, decl, target); --- 5160,5173 ---- /* We must force creation of DECL_RTL for debug info generation, even though we don't use it here. */ ! make_decl_rtl (decl, NULL); name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)); #ifdef ASM_OUTPUT_DEF /* Make name accessible from other files, if appropriate. */ if (TREE_PUBLIC (decl)) ! globalize_decl (decl); #ifdef ASM_OUTPUT_DEF_FROM_DECLS ASM_OUTPUT_DEF_FROM_DECLS (asm_out_file, decl, target); *************** assemble_alias (decl, target) *** 4878,4889 **** ASM_OUTPUT_DEF (asm_out_file, name, IDENTIFIER_POINTER (target)); #endif TREE_ASM_WRITTEN (decl) = 1; ! #else ! #ifdef ASM_OUTPUT_WEAK_ALIAS if (! DECL_WEAK (decl)) warning ("only weak aliases are supported in this configuration"); ASM_OUTPUT_WEAK_ALIAS (asm_out_file, name, IDENTIFIER_POINTER (target)); TREE_ASM_WRITTEN (decl) = 1; #else warning ("alias definitions not supported in this configuration; ignored"); --- 5175,5190 ---- ASM_OUTPUT_DEF (asm_out_file, name, IDENTIFIER_POINTER (target)); #endif TREE_ASM_WRITTEN (decl) = 1; ! #else /* !ASM_OUTPUT_DEF */ ! #if defined (ASM_OUTPUT_WEAK_ALIAS) || defined (ASM_WEAKEN_DECL) if (! DECL_WEAK (decl)) warning ("only weak aliases are supported in this configuration"); + #ifdef ASM_WEAKEN_DECL + ASM_WEAKEN_DECL (asm_out_file, decl, name, IDENTIFIER_POINTER (target)); + #else ASM_OUTPUT_WEAK_ALIAS (asm_out_file, name, IDENTIFIER_POINTER (target)); + #endif TREE_ASM_WRITTEN (decl) = 1; #else warning ("alias definitions not supported in this configuration; ignored"); *************** init_varasm_once () *** 4937,5015 **** { const_str_htab = htab_create (128, const_str_htab_hash, const_str_htab_eq, const_str_htab_del); ggc_add_root (const_hash_table, MAX_HASH_TABLE, sizeof const_hash_table[0], mark_const_hash_entry); ggc_add_root (&const_str_htab, 1, sizeof const_str_htab, mark_const_str_htab); } ! /* Extra support for EH values. */ ! void ! assemble_eh_label (name) const char *name; { ! #ifdef ASM_OUTPUT_EH_LABEL ! ASM_OUTPUT_EH_LABEL (asm_out_file, name); ! #else ! assemble_label (name); ! #endif } ! /* Assemble an alignment pseudo op for an ALIGN-bit boundary. */ void ! assemble_eh_align (align) ! int align; { ! #ifdef ASM_OUTPUT_EH_ALIGN ! if (align > BITS_PER_UNIT) ! ASM_OUTPUT_EH_ALIGN (asm_out_file, floor_log2 (align / BITS_PER_UNIT)); ! #else ! assemble_align (align); ! #endif } ! ! /* On some platforms, we may want to specify a special mechansim to ! output EH data when generating with a function.. */ ! int ! assemble_eh_integer (x, size, force) ! rtx x; ! int size; ! int force; { ! switch (size) { ! #ifdef ASM_OUTPUT_EH_CHAR ! case 1: ! ASM_OUTPUT_EH_CHAR (asm_out_file, x); ! return 1; ! #endif ! #ifdef ASM_OUTPUT_EH_SHORT ! case 2: ! ASM_OUTPUT_EH_SHORT (asm_out_file, x); ! return 1; ! #endif ! #ifdef ASM_OUTPUT_EH_INT ! case 4: ! ASM_OUTPUT_EH_INT (asm_out_file, x); ! return 1; ! #endif ! #ifdef ASM_OUTPUT_EH_DOUBLE_INT ! case 8: ! ASM_OUTPUT_EH_DOUBLE_INT (asm_out_file, x); ! return 1; ! #endif ! default: ! break; } - return (assemble_integer (x, size, force)); } --- 5238,5403 ---- { const_str_htab = htab_create (128, const_str_htab_hash, const_str_htab_eq, const_str_htab_del); + in_named_htab = htab_create (31, in_named_entry_hash, + in_named_entry_eq, NULL); + ggc_add_root (const_hash_table, MAX_HASH_TABLE, sizeof const_hash_table[0], mark_const_hash_entry); ggc_add_root (&const_str_htab, 1, sizeof const_str_htab, mark_const_str_htab); + ggc_add_tree_root (&weak_decls, 1); + + const_alias_set = new_alias_set (); } ! /* Select a set of attributes for section NAME based on the properties ! of DECL and whether or not RELOC indicates that DECL's initializer ! might contain runtime relocations. ! ! We make the section read-only and executable for a function decl, ! read-only for a const data decl, and writable for a non-const data decl. */ ! ! unsigned int ! default_section_type_flags (decl, name, reloc) ! tree decl; const char *name; + int reloc; { ! unsigned int flags; ! ! if (decl && TREE_CODE (decl) == FUNCTION_DECL) ! flags = SECTION_CODE; ! else if (decl && DECL_READONLY_SECTION (decl, reloc)) ! flags = 0; ! else ! flags = SECTION_WRITE; ! ! if (decl && DECL_ONE_ONLY (decl)) ! flags |= SECTION_LINKONCE; ! ! if (strcmp (name, ".bss") == 0 ! || strncmp (name, ".bss.", 5) == 0 ! || strncmp (name, ".gnu.linkonce.b.", 16) == 0 ! || strcmp (name, ".sbss") == 0 ! || strncmp (name, ".sbss.", 6) == 0 ! || strncmp (name, ".gnu.linkonce.sb.", 17) == 0) ! flags |= SECTION_BSS; ! ! return flags; } ! /* Output assembly to switch to section NAME with attribute FLAGS. ! Four variants for common object file formats. */ void ! default_no_named_section (name, flags) ! const char *name ATTRIBUTE_UNUSED; ! unsigned int flags ATTRIBUTE_UNUSED; { ! /* Some object formats don't support named sections at all. The ! front-end should already have flagged this as an error. */ ! abort (); } ! void ! default_elf_asm_named_section (name, flags) ! const char *name; ! unsigned int flags; { + char flagchars[10], *f = flagchars; + const char *type; ! if (! named_section_first_declaration (name)) { ! fprintf (asm_out_file, "\t.section\t%s\n", name); ! return; ! } ! if (!(flags & SECTION_DEBUG)) ! *f++ = 'a'; ! if (flags & SECTION_WRITE) ! *f++ = 'w'; ! if (flags & SECTION_CODE) ! *f++ = 'x'; ! if (flags & SECTION_SMALL) ! *f++ = 's'; ! if (flags & SECTION_MERGE) ! *f++ = 'M'; ! if (flags & SECTION_STRINGS) ! *f++ = 'S'; ! *f = '\0'; ! if (flags & SECTION_BSS) ! type = "nobits"; ! else ! type = "progbits"; ! if (flags & SECTION_ENTSIZE) ! fprintf (asm_out_file, "\t.section\t%s,\"%s\",@%s,%d\n", ! name, flagchars, type, flags & SECTION_ENTSIZE); ! else ! fprintf (asm_out_file, "\t.section\t%s,\"%s\",@%s\n", ! name, flagchars, type); ! } ! void ! default_coff_asm_named_section (name, flags) ! const char *name; ! unsigned int flags; ! { ! char flagchars[8], *f = flagchars; ! ! if (flags & SECTION_WRITE) ! *f++ = 'w'; ! if (flags & SECTION_CODE) ! *f++ = 'x'; ! *f = '\0'; ! ! fprintf (asm_out_file, "\t.section\t%s,\"%s\"\n", name, flagchars); ! } ! ! void ! default_pe_asm_named_section (name, flags) ! const char *name; ! unsigned int flags; ! { ! default_coff_asm_named_section (name, flags); ! ! if (flags & SECTION_LINKONCE) ! { ! /* Functions may have been compiled at various levels of ! optimization so we can't use `same_size' here. ! Instead, have the linker pick one. */ ! fprintf (asm_out_file, "\t.linkonce %s\n", ! (flags & SECTION_CODE ? "discard" : "same_size")); } } + + /* Used for vtable gc in GNU binutils. Record that the pointer at OFFSET + from SYMBOL is used in all classes derived from SYMBOL. */ + void + assemble_vtable_entry (symbol, offset) + rtx symbol; + HOST_WIDE_INT offset; + { + fputs ("\t.vtable_entry ", asm_out_file); + output_addr_const (asm_out_file, symbol); + fputs (", ", asm_out_file); + fprintf (asm_out_file, HOST_WIDE_INT_PRINT_DEC, offset); + fputc ('\n', asm_out_file); + } + /* Used for vtable gc in GNU binutils. Record the class hierarchy by noting + that the vtable symbol CHILD is derived from the vtable symbol PARENT. */ + void + assemble_vtable_inherit (child, parent) + rtx child, parent; + { + fputs ("\t.vtable_inherit ", asm_out_file); + output_addr_const (asm_out_file, child); + fputs (", ", asm_out_file); + output_addr_const (asm_out_file, parent); + fputc ('\n', asm_out_file); + } diff -Nrc3pad gcc-3.0.4/gcc/varray.c gcc-3.1/gcc/varray.c *** gcc-3.0.4/gcc/varray.c Tue Nov 7 22:49:54 2000 --- gcc-3.1/gcc/varray.c Thu Jan 10 16:55:13 2002 *************** *** 1,25 **** /* Virtual array support. ! Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. Contributed by Cygnus Solutions. ! 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 ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #include "config.h" #include "system.h" #include "rtl.h" #include "tree.h" --- 1,26 ---- /* Virtual array support. ! Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Cygnus Solutions. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ! ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public ! License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! the Free Software Foundation, 59 Temple Place - Suite 330, Boston, ! MA 02111-1307, USA. */ #include "config.h" + #include "errors.h" #include "system.h" #include "rtl.h" #include "tree.h" *************** varray_grow (va, n) *** 61,67 **** size_t old_data_size = old_elements * element_size; size_t data_size = n * element_size; ! va = (varray_type) xrealloc ((char *)va, VARRAY_HDR_SIZE + data_size); va->num_elements = n; if (n > old_elements) memset (&va->data.c[old_data_size], 0, data_size - old_data_size); --- 62,68 ---- size_t old_data_size = old_elements * element_size; size_t data_size = n * element_size; ! va = (varray_type) xrealloc ((char *) va, VARRAY_HDR_SIZE + data_size); va->num_elements = n; if (n > old_elements) memset (&va->data.c[old_data_size], 0, data_size - old_data_size); *************** varray_check_failed (va, n, file, line, *** 84,92 **** int line; const char *function; { ! error("Virtual array %s[%lu]: element %lu out of bounds", ! va->name, (unsigned long) va->num_elements, (unsigned long) n); ! fancy_abort (file, line, function); } #endif --- 85,93 ---- int line; const char *function; { ! internal_error ("virtual array %s[%lu]: element %lu out of bounds in %s, at %s:%d", ! va->name, (unsigned long) va->num_elements, (unsigned long) n, ! function, trim_filename (file), line); } #endif diff -Nrc3pad gcc-3.0.4/gcc/varray.h gcc-3.1/gcc/varray.h *** gcc-3.0.4/gcc/varray.h Fri Jul 21 07:10:36 2000 --- gcc-3.1/gcc/varray.h Mon Jan 21 13:08:33 2002 *************** *** 1,32 **** /* Virtual array support. ! Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. Contributed by Cygnus Solutions. ! 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 ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ ! #ifndef _VARRAY_H_ ! #define _VARRAY_H_ #ifndef HOST_WIDE_INT #include "machmode.h" #endif ! #ifndef __GCC_SYSTEM_H__ #include "system.h" #endif --- 1,32 ---- /* Virtual array support. ! Copyright (C) 1998, 1999, 2000, 2002 Free Software Foundation, Inc. Contributed by Cygnus Solutions. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ! ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public ! License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! the Free Software Foundation, 59 Temple Place - Suite 330, Boston, ! MA 02111-1307, USA. */ ! #ifndef GCC_VARRAY_H ! #define GCC_VARRAY_H #ifndef HOST_WIDE_INT #include "machmode.h" #endif ! #ifndef GCC_SYSTEM_H #include "system.h" #endif *************** extern varray_type varray_init PARAMS (( *** 159,165 **** /* Free up memory allocated by the virtual array, but do not free any of the elements involved. */ #define VARRAY_FREE(vp) \ ! do { if (vp) { free (vp); vp = (varray_type)0; } } while (0) /* Grow/shrink the virtual array VA to N elements. */ extern varray_type varray_grow PARAMS ((varray_type, size_t)); --- 159,165 ---- /* Free up memory allocated by the virtual array, but do not free any of the elements involved. */ #define VARRAY_FREE(vp) \ ! do { if (vp) { free (vp); vp = (varray_type) 0; } } while (0) /* Grow/shrink the virtual array VA to N elements. */ extern varray_type varray_grow PARAMS ((varray_type, size_t)); *************** extern void varray_check_failed PARAMS ( *** 260,267 **** #define VARRAY_TOP_ULONG(VA) VARRAY_TOP (VA, ul) #define VARRAY_TOP_WIDE_INT(VA) VARRAY_TOP (VA, hint) #define VARRAY_TOP_UWIDE_INT(VA) VARRAY_TOP (VA, uhint) ! #define VARRAY_TOP_GENERIC_PTR(VA,N) VARRAY_TOP (VA, generic) ! #define VARRAY_TOP_CHAR_PTR(VA,N) VARRAY_TOP (VA, cptr) #define VARRAY_TOP_RTX(VA) VARRAY_TOP (VA, rtx) #define VARRAY_TOP_RTVEC(VA) VARRAY_TOP (VA, rtvec) #define VARRAY_TOP_TREE(VA) VARRAY_TOP (VA, tree) --- 260,267 ---- #define VARRAY_TOP_ULONG(VA) VARRAY_TOP (VA, ul) #define VARRAY_TOP_WIDE_INT(VA) VARRAY_TOP (VA, hint) #define VARRAY_TOP_UWIDE_INT(VA) VARRAY_TOP (VA, uhint) ! #define VARRAY_TOP_GENERIC_PTR(VA) VARRAY_TOP (VA, generic) ! #define VARRAY_TOP_CHAR_PTR(VA) VARRAY_TOP (VA, cptr) #define VARRAY_TOP_RTX(VA) VARRAY_TOP (VA, rtx) #define VARRAY_TOP_RTVEC(VA) VARRAY_TOP (VA, rtvec) #define VARRAY_TOP_TREE(VA) VARRAY_TOP (VA, tree) *************** extern void varray_check_failed PARAMS ( *** 271,274 **** #define VARRAY_TOP_CONST_EQUIV(VA) VARRAY_TOP (VA, const_equiv) #define VARRAY_TOP_BB(VA) VARRAY_TOP (VA, bb) ! #endif /* _VARRAY_H_ */ --- 271,274 ---- #define VARRAY_TOP_CONST_EQUIV(VA) VARRAY_TOP (VA, const_equiv) #define VARRAY_TOP_BB(VA) VARRAY_TOP (VA, bb) ! #endif /* ! GCC_VARRAY_H */ diff -Nrc3pad gcc-3.0.4/gcc/version.c gcc-3.1/gcc/version.c *** gcc-3.0.4/gcc/version.c Wed Feb 20 18:47:53 2002 --- gcc-3.1/gcc/version.c Tue May 14 21:41:15 2002 *************** *** 1,4 **** ! #include "gansidecl.h" #include "version.h" ! const char *const version_string = "3.0.4"; --- 1,4 ---- ! #include "ansidecl.h" #include "version.h" ! const char *const version_string = "3.1"; diff -Nrc3pad gcc-3.0.4/gcc/version.h gcc-3.1/gcc/version.h *** gcc-3.0.4/gcc/version.h Wed Feb 16 16:22:45 2000 --- gcc-3.1/gcc/version.h Sat May 26 01:31:35 2001 *************** *** 1,4 **** ! #ifndef __GCC_VERSION_H__ ! #define __GCC_VERSION_H__ extern const char *const version_string; ! #endif /* __GCC_VERSION_H__ */ --- 1,4 ---- ! #ifndef GCC_VERSION_H ! #define GCC_VERSION_H extern const char *const version_string; ! #endif /* ! GCC_VERSION_H */ diff -Nrc3pad gcc-3.0.4/gcc/vmsconfig.com gcc-3.1/gcc/vmsconfig.com *** gcc-3.0.4/gcc/vmsconfig.com Wed Dec 16 20:58:49 1998 --- gcc-3.1/gcc/vmsconfig.com Thu Jan 1 00:00:00 1970 *************** *** 1,500 **** - $ ! - $ ! Set up to compile GCC on VMS. - $ ! - $ ! Set the def dir to proper place for use in batch. Works for interactive too. - $flnm = f$enviroment("PROCEDURE") ! get current procedure name - $set default 'f$parse(flnm,,,"DEVICE")''f$parse(flnm,,,"DIRECTORY")' - $ ! - $set symbol/scope=(nolocal,noglobal) - $if f$trnlnm("IFILE$").nes."" then close/noLog ifile$ - $ ! - $ echo = "write sys$output" - $ ! - $ arch_indx = 1 + ((f$getsyi("CPU").ge.128).and.1) ! vax==1, alpha==2 - $ arch = f$element(arch_indx,"|","|vax|alpha|") - $ ! - $ if f$search("config.h") .nes. "" then delete config.h.* - $ if arch .eqs. "vax" - $ then - $ copy [.config.'arch']xm-vms.h []config.h - $ echo "Linked `config.h' to `[.config.''arch']xm-vms.h'." - $else - $ open/write cfile []config.h - $ write cfile "#include "+"""config/"+arch+"/xm-"+arch+".h"+""" - $ write cfile "#include "+"""config/"+arch+"/xm-vms.h"+""" - $ close cfile - $ echo "Created `config.h'." - $ endif - $ ! - $ if f$search("tconfig.h") .nes. "" then delete tconfig.h.* - $ create []tconfig.h - $DECK - /* tconfig.h == config.h :: target and host configurations are the same */ - #include "config.h" - $EOD - $ echo "Created `tconfig.h'. - $ ! - $ if f$search("hconfig.h") .nes. "" then delete hconfig.h.* - $ create []hconfig.h - $DECK - /* hconfig.h == config.h :: host and target configurations are the same */ - #include "config.h" - $EOD - $ echo "Created `hconfig.h'. - $ ! - $ if f$search("tm.h") .nes. "" then delete tm.h.* - $ ! - $ edit/tpu/nojournal/nosection/nodisplay/command=sys$input - - [.config.'arch']vms.h /output=[]tm.h - $DECK - ! - ! Copy file, changing lines of the form - ! #include "vax/*" - ! or - ! #include "alpha/*" - ! into - ! #include "config-*" - ! - file := CREATE_BUFFER("file", GET_INFO(COMMAND_LINE, "file_name")); - targ := LINE_BEGIN & '#include' & SPAN(ASCII(32)+ASCII(9)) - & '"' & ('vax' | 'alpha') & '/'; - rang := CREATE_RANGE(BEGINNING_OF(file), END_OF(file)); - LOOP - incl := SEARCH_QUIETLY(targ, FORWARD, EXACT, rang); - EXITIF incl = 0; - POSITION(BEGINNING_OF(incl)); - ERASE(incl); - COPY_TEXT('#include "config-'); - rang := CREATE_RANGE(END_OF(incl), END_OF(file)); - ENDLOOP; - WRITE_FILE(file, GET_INFO(COMMAND_LINE, "output_file")); - QUIT - $ EOD - $ echo "Generated `tm.h' from `[.config.''arch']vms.h'." - $ ! - $ !crude hack to allow compiling from [.cp] subdirectory - $ if f$search("config-''arch'.h") .nes. "" then delete config-'arch'.h;* - $ copy [.config.'arch']'arch'.h []config-'arch'.h - $ echo "Linked `config-''arch'.h' to `[.config.''arch']''arch'.h' for `tm.h'." - $ ! - $ call make_lang_incl "options.h" - $ ! - $ call make_lang_incl "specs.h" - $ ! - $ if arch .eqs. "vax" - $ then - $ if f$search("''arch'.md") .nes. "" then delete 'arch'.md;* - $ copy [.config.'arch']'arch'.md []'arch'.md - $ echo "Copied `''arch'.md' from `[.config.''arch']''arch'.md'." - $ endif - $ ! - $ if f$search("aux-output.c") .nes. "" then delete aux-output.c.* - $ copy [.config.'arch']'arch'.c []aux-output.c - $ echo "Linked `aux-output.c' to `[.config.''arch']''arch'.c'. - $ ! - $ ! - $ ! - $ ! Create the file version.opt, which helps identify the executable. - $ ! - $search version.c version_string,"="/match=and/output=t.tmp - $open ifile$ t.tmp - $read ifile$ line - $close ifile$ - $delete t.tmp; - $line=f$element(1,"""",line) !extract the portion between 1st & 2nd quotes - $! Format of 'line' is "name-nn.nn.nn[.nn] [date text]" (without the quotes). - $! We want "name-nn.nn.nn[.nn][-date]"; "-date" suffix is optional. - $id = f$element(1,"-",line) !strip "name-" prefix - $if id.eqs."-" then id = line !no prefix found? - $id = f$element(0," ",id) + "-" + f$element(1," ",id) !first two tokens - $id = id - "- " !in case 2nd token was empty - $if f$length(id).gt.15 then id = f$extract(0,15,id) !length limitation - $! - $open/write ifile$ version.opt - $write ifile$ "ident="+""""+id+"""" - $close ifile$ - $purge version.opt - $! - $! - $! create linker options files that lists all of the components for all - $! possible compilers. We do this by editing the file Makefile.in, and - $! generating the relevant files from it. - $! - $! - $! Make a copy of the makefile if the sources are on a disk that is NFS - $! mounted on a unix machine. - $if f$search("Makefile.in").eqs."" .and. f$search("$M$akefile.in").nes."" - - then copy $M$akefile.in Makefile.in - $! This should be automated across all front-end subdirectories. - $! For now, it's hardcoded. - $if f$search("[.cp]Makefile.in").eqs."" .and. f$search("[.cp]$M$akefile.in").nes."" - - then copy [.cp]$M$akefile.in [.cp]Makefile.in - $! - $! - $echo "Now processing Makefile.in to generate linker option files." - $edit/TPU/noJournal/noSection/noDisplay/Command=sys$input: Makefile.in - - /Start_Position=('arch_indx') ! 1 for vax, 2 for alpha - !! - VARIABLE makefile_buf, opt_file_buf, complist_buf, extra_compilers; ! Globals. - VARIABLE arch; ! String 'vax' or 'alpha', set in configure_makefile(). - - !! - PROCEDURE process_makefile( ) - ! - ! Interpret Makefile.in and subsidiary Make-lang.in templates. - ! - LOCAL range1, cmark, makefilename; - - makefilename := GET_INFO (COMMAND_LINE, 'FILE_NAME'); ! "Makefile.in" - makefile_buf := CREATE_BUFFER ("makefile", makefilename); - opt_file_buf := CREATE_BUFFER ("opt_file"); - complist_buf := CREATE_BUFFER ("complist"); - extra_compilers := CREATE_ARRAY; - ! - SET (NO_WRITE, makefile_buf, ON); ! Used as workspace; don't save it. - SET (OUTPUT_FILE, complist_buf, "compilers.list"); - ! - ! Make some textual substitutions. - ! - configure_makefile (); - ! - ! Collect a list of supported compilers (``COMPILERS=xxx'' macro). - ! - identify_compilers (); - ! - ! Plus other known compilers described by Make-lang.in makefile fragments. - ! Add new entries as needed; args are (target name, subdirectory name). - ! - additional_compiler ("cc1plus", "cp"); - ! - WRITE_FILE (complist_buf); ! Now save "compilers.list". - ! - ! Add to this list, as required. The file "Makefile.in" is searched for - ! a tag that looks like "LINE_BEGIN + 'tag + (optional space) + "="". - ! The contents are assumed to be a list of object files, and from this - ! list a VMS linker options file is generated. - ! - generate_option_file ("OBJS", "=", "independent.opt"); - generate_option_file ("LIB2FUNCS", "=", "libgcc2.list"); - generate_option_file ("CXX_LIB2FUNCS", "=", "libgcc2-cxx.list"); - ! - ! Now change OBJS in the Makefile, so each language specific options file - ! does not pick up all of the language independent files. - ! - POSITION (BEGINNING_OF (makefile_buf)); - COPY_TEXT ("OBJS="); ! New copy with empty value, seen before real OBJS. - SPLIT_LINE; - ! - ! Lastly, process each compiler-specific object dependency list. - ! - POSITION (BEGINNING_OF (complist_buf)); - LOOP - cmark := MARK (NONE); - EXITIF (cmark = END_OF (complist_buf)); - ! The current line contains the name of a compiler target, such as "cc1". - MESSAGE (CURRENT_LINE); ! Give some interactive feedback. - generate_option_file (CURRENT_LINE, ":", CURRENT_LINE + "-objs.opt"); - POSITION (cmark); - MOVE_VERTICAL (1); ! Go to the next line. - ENDLOOP; - ENDPROCEDURE; !process_makefile - !! - - PROCEDURE process_objc_lib( ) - ! - ! Interpret objc/Makefile, after finishing the top makefile. - ! - ON_ERROR - [TPU$_OPENIN]: - MESSAGE ("Cannot load objc/Makefile for ""ObjClib""; skipping it."); - RETURN; - ENDON_ERROR; - - ERASE (makefile_buf); !discard top Makefile - POSITION (END_OF (makefile_buf)); - READ_FILE ("[.objc]Make-lang.in"); !load objc one - MESSAGE ("objclib"); - pat_replace (ASCII(9), " "); !change any to - generate_option_file ("OBJC_O", "=", "objc-objs.opt"); - POSITION (BEGINNING_OF (makefile_buf)); - ! Join any continuation lines; we want the header list to be one line. - pat_replace ("\" & LINE_END, ); - generate_option_file ("OBJC_H", "=", "objc-hdrs.list"); - ENDPROCEDURE; !process_objc_lib - !! - - PROCEDURE configure_makefile( ) - ! - ! Plug in some values normally handled by `configure'. Rather than - ! replacing the dummy entries, insert the real entries before them. - ! - IF (GET_INFO (COMMAND_LINE, 'START_RECORD') <> 2) THEN - arch := 'vax'; - ELSE - arch := 'alpha'; - ENDIF; - POSITION (BEGINNING_OF (makefile_buf)); - COPY_TEXT ("target=" + arch + "-vms"); SPLIT_LINE; - COPY_TEXT ("out_file=aux-output.c"); SPLIT_LINE; ! 'arch'/'arch'.c - COPY_TEXT ("out_object_file=aux-output.o"); SPLIT_LINE; ! aux-output.obj - COPY_TEXT ("md_file=" + arch + ".md"); SPLIT_LINE; ! 'arch'/'arch'.md - COPY_TEXT ("tm_file=tm.h"); SPLIT_LINE; ! 'arch'/tm-vms.h - pat_replace ("@" & - SPAN("abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ#~0123456789") - & "@", ); ! strip `configure' dummy values - ENDPROCEDURE; !configure_makefile - !! - - PROCEDURE identify_compilers( ) - ! - ! Retrieve the list of supported compilers from Makefile.in, and put them - ! into file "compilers.list", one per line, for subsequent access from DCL. - ! - LOCAL range1; - - ! Strip most comments from the makefile, to speed up subsequent processing. - POSITION (BEGINNING_OF (makefile_buf)); - pat_replace (LINE_BEGIN & "#" & REMAIN & LINE_END, ); - pat_replace ("$(exeext)", ); - pat_replace ("@all_compilers@", ); - !# ! Convert directory references to VMS syntax (actually, just strip it). - !# pat_replace (" $(srcdir)/", " "); - ! Look up the ``COMPILERS=cc1 xyzzy'' Makefile macro and put - ! its ``cc1 xyzzy'' value into the compilers buffer. - POSITION (BEGINNING_OF (complist_buf)); - !#--at some point we may want to add this-- - !# recursive_fetch_tag ("CCCP", "="); ! Include the preprocessor. - !# POSITION (END_OF (complist_buf)); - recursive_fetch_tag ("COMPILERS", "="); - ! Convert all spaces into newlines, then remove any blank lines. - pat_replace (SPAN(" "), LINE_END); - pat_replace (LINE_BEGIN & LINE_END, ); - ENDPROCEDURE; !identify_compilers - !! - - PROCEDURE additional_compiler( cname, subdir ) - ! - ! Load Make-lang.in for compiler CNAME from SUBDIR and append it to the - ! end of Makefile.in's buffer. Add CNAME to the "compilers.list" buffer. - ! - ON_ERROR - ! Don't abort if user removes the supporting subdirectory for a - ! language she's not interested in. - [TPU$_OPENIN]: - MESSAGE ("Cannot load " + subdir + "/Make-lang.in for " - + '"' + cname + '"' + "; skipping it."); - RETURN; - ENDON_ERROR; - - POSITION (END_OF (makefile_buf)); - SPLIT_LINE; ! Separate with a blank line. - READ_FILE ("[." + subdir + "]Make-lang.in"); ! Load Makefile fragment. - ! Make sure that $(xxx_OTH_SRCS) expands to empty string by renaming $(it) - pat_replace ("_OTH_SRCS)", "_OTH_SRCS_dummy_)"); - ! Convert subdirectory references into VMS syntax. - pat_replace ("$(srcdir)/" + subdir + "/", "[." + subdir + "]"); - - ! Temporary? hack for cp/Make-lang.in's mishandling of "input.c". - IF (subdir = 'cp') THEN - pat_replace ("[.cp]input.c", ); ! Discard this text. - ENDIF; - - ! Add this name to compilers.list. - POSITION (END_OF (complist_buf)); - COPY_TEXT (cname); - ! Make array entry indexed by compiler's file name; its value is arbitrary. - extra_compilers{cname} := subdir; - ENDPROCEDURE; !additional_compiler - !! - - PROCEDURE generate_option_file( tag_name, punct, outfile_name ) - ! - ! Produce a file listing the names of particular object files, for use - ! as input to the linker and also for use in finding source names by - ! make-cc1.com. Generally, any name suffix will be suppressed. - ! - LOCAL range1, range2; - - POSITION (BEGINNING_OF (opt_file_buf)); - recursive_fetch_tag (tag_name, punct); - ! First fix up for subdirectory/Make-lang.in. - IF (pat_replace ("stamp-objlist" & (SPAN(" ")|LINE_END), " ") > 0) THEN - recursive_fetch_tag ("stamp-objlist", ":"); - ENDIF; - ! Now fix up a few things in the output buffer. - pat_replace ("Makefile" & (SPAN(" ")|LINE_END), " "); - !# FILL (CURRENT_BUFFER, " ", 1, 80, 0); ! Condense things a bit. - pat_replace ("." & ("o"|"c"|"y") & ((SPAN(" ")&LINE_END)|LINE_END), LINE_END); - pat_replace ("." & ("o"|"c"|"y") & SPAN(" "), ","); - pat_replace (".h" & (SPAN(" ")|LINE_END), ".h,"); - ! Remove trailing commas, if present. - pat_replace ("," & ((SPAN(" ")&LINE_END)|LINE_END), LINE_END); - ! Get rid of spaces and blank lines. - pat_replace (SPAN(" "), LINE_END); - pat_replace (LINE_BEGIN & LINE_END, ); - ! Second fix up for subdirectory/Make-lang.in; - ! avoid "sticky defaults" when linker processes the resulting options file. - IF (extra_compilers{outfile_name - "-objs.opt"} <> TPU$K_UNSPECIFIED) THEN - POSITION (BEGINNING_OF (opt_file_buf)); - range1 := CREATE_RANGE (MARK (NONE), END_OF (CURRENT_BUFFER), NONE); - LOOP - range2 := SEARCH_QUIETLY (LINE_BEGIN | ",", FORWARD, EXACT, range1); - EXITIF (range2 = 0); - POSITION (BEGINNING_OF (range2)); - IF (CURRENT_CHARACTER = ",") THEN MOVE_HORIZONTAL (1); ENDIF; - ! If it's not already "[.subdir]name", explicitly make it "[]name". - IF (CURRENT_CHARACTER <> "[") THEN COPY_TEXT ("[]"); ENDIF; - MOVE_HORIZONTAL (1); - MODIFY_RANGE (range1, MARK (NONE), END_OF (range1)); - ENDLOOP; - ENDIF; - ! Now write the output file. - SET (OUTPUT_FILE, opt_file_buf, outfile_name); - WRITE_FILE (opt_file_buf); - ERASE (opt_file_buf); ! Clear buffer out for next opt_file pass. - ENDPROCEDURE; !generate_option_file - !! - - PROCEDURE recursive_fetch_tag( tag_n, punct ) - ! - ! Look up TAG_N, copy it to OPT_FILE_BUF, and then translate any $(...) - ! definitions that appear. The translation is put at the current point. - ! - LOCAL mark1, mark2, range1, tag_range, tag_string; - - fetch_tag (tag_n, punct); - ! Substitute any makefile symbols $(...). - POSITION (BEGINNING_OF (CURRENT_BUFFER)); - LOOP - range1 := SEARCH_QUIETLY ("$(" & - SPAN("abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ#~0123456789") - & ")", FORWARD, EXACT); - EXITIF (range1 = 0); - POSITION (BEGINNING_OF (range1)); - MOVE_HORIZONTAL (2); ! Past opening "$(". - mark1 := MARK (NONE); - POSITION (END_OF (range1)); - MOVE_HORIZONTAL (-1); ! In front of closing ")". - mark2 := MARK (NONE); - tag_range := CREATE_RANGE (mark1, mark2, NONE); - POSITION (END_OF (range1)); - tag_string := STR (tag_range); - ERASE (range1); - fetch_tag (tag_string, "="); - POSITION (BEGINNING_OF (CURRENT_BUFFER)); - ENDLOOP; - ENDPROCEDURE; !recursive_fetch_tag - !! - - PROCEDURE fetch_tag( tag_n, punct ) - ! - ! Looks up the translation of a tag, and inserts it at the current location - ! in the buffer. - ! - LOCAL mark0, mark1, mark2, range2; - - mark0 := MARK (NONE); ! Remember where we started; restore before return. - POSITION (BEGINNING_OF (makefile_buf)); - ! The tag definition always starts in the first column, and might have - ! optional space(es) before "=" or ":" punctuation. - range2 := SEARCH_QUIETLY (LINE_BEGIN & tag_n & ((SPAN(" ") & punct) | punct), - FORWARD, EXACT); - IF (range2 = 0) THEN - POSITION (mark0); - RETURN; - ENDIF; - POSITION (END_OF (range2)); - MOVE_HORIZONTAL (1); ! Move beyond "TAG=". - mark1 := MARK (NONE); - POSITION (BEGINNING_OF (range2)); - LOOP - MOVE_VERTICAL (1); - MOVE_HORIZONTAL (-2); - EXITIF (CURRENT_CHARACTER <> "\"); - ERASE_CHARACTER (1); - MOVE_HORIZONTAL (1); - ENDLOOP; - MOVE_HORIZONTAL (1); - mark2 := MARK (NONE); - range2 := CREATE_RANGE (mark1, mark2, NONE); - POSITION (mark0); - IF (LENGTH (range2) <> 0) THEN - COPY_TEXT (range2); - ENDIF; - ENDPROCEDURE; !fetch_tag - !! - - PROCEDURE pat_replace( oldstring, newstring ) - ! - ! Replace all occurrences of a pattern. - ! - LOCAL range1, range2, kill_it, count; - - count := 0; - kill_it := (GET_INFO (newstring, 'TYPE') = UNSPECIFIED); ! Omitted arg. - range1 := CREATE_RANGE (BEGINNING_OF (CURRENT_BUFFER), - END_OF (CURRENT_BUFFER), NONE); - LOOP - range2 := SEARCH_QUIETLY (oldstring, FORWARD, EXACT, range1); - EXITIF (range2 = 0); - count := count + 1; - POSITION (BEGINNING_OF (range2)); - ERASE (range2); - IF (newstring = LINE_END) THEN - SPLIT_LINE; - ELSE IF (NOT kill_it) THEN - COPY_TEXT (newstring); - ENDIF; ENDIF; - MODIFY_RANGE (range1, MARK (NONE), END_OF (range1)); - ENDLOOP; - RETURN count; - ENDPROCEDURE; !pat_replace - !! - - ! - ! This is the main routine. - ! - process_makefile (); - process_objc_lib (); !this uses a different makefile - QUIT; ! All done; don't write any modified buffers. - !! - $ echo "" - $! - $! Remove excessive versions of the option files... - $! - $ purge *.opt,*.list - $! - $! - $! - $ if f$search("config.status") .nes. "" then delete config.status.* - $ create config.status - $ open/append ifile$ config.status - $ write ifile$ "Links are now set up for use with a ''arch' running VMS." - $ close ifile$ - $ type config.status - $ echo "" - $! - $ exit - $ - $! - $! Construct a header file based on subdirectory contents - $! - $make_lang_incl: subroutine - $ if f$search(p1).nes."" then delete 'p1';* - $ create 'p1' !empty file with ordinary text-file attributes - $ open/Append ifile$ 'p1' - $ write ifile$ "/* ''p1' */" - $ hfile = f$search("[]''p1'") - $ topdir = f$parse(hfile,,,"DIRECTORY") - "]" - $lang_incl_loop: - $ hfile = f$search("[.*]lang-''p1'") - $ if hfile.eqs."" then goto lang_incl_done - $ dir = f$parse(hfile,,,"DIRECTORY") - "]" - $! convert absolute path to relative one, yielding "[.subdir]" - $ dir = "[" + f$edit(dir - topdir,"LOWERCASE") + "]" - $ write ifile$ "#include ""''dir'lang-''p1'""" - $ goto lang_incl_loop - $lang_incl_done: - $ close ifile$ - $ echo "Created `''p1''." - $ endsubroutine !make_lang_incl --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/vmsdbg.h gcc-3.1/gcc/vmsdbg.h *** gcc-3.0.4/gcc/vmsdbg.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/vmsdbg.h Fri Dec 28 18:17:54 2001 *************** *** 0 **** --- 1,255 ---- + /* Definitions for the data structures and codes used in VMS debugging. + Copyright (C) 2001 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2, or (at your option) any later + version. + + GCC is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to the Free + Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + + #ifndef GCC_VMSDBG_H + #define GCC_VMSDBG_H 1 + + /* We define types and constants used in VMS Debug output. Note that the + structs only approximate the output that is written. We write the output + explicitly, field by field. This output would only agree with the + structs in this file if no padding were done. The sizes after each + struct are the size actually written, which is usually smaller than the + size of the struct. */ + + /* Header type codes. */ + typedef enum _DST_TYPE {DST_K_SOURCE = 155, DST_K_PROLOG = 162, + DST_K_BLKBEG = 176, DST_K_BLKEND = 177, + DST_K_LINE_NUM = 185, DST_K_MODBEG = 188, + DST_K_MODEND = 189, DST_K_RTNBEG = 190, + DST_K_RTNEND = 191} DST_DTYPE; + + /* Header. */ + + typedef struct _DST_HEADER + { + union + { + unsigned short int dst_w_length; + unsigned short int dst_x_length; + } dst__header_length; + union + { + ENUM_BITFIELD (_DST_TYPE) dst_w_type : 16; + ENUM_BITFIELD (_DST_TYPE) dst_x_type : 16; + } dst__header_type; + } DST_HEADER; + #define DST_K_DST_HEADER_SIZE sizeof 4 + + /* Language type codes. */ + typedef enum _DST_LANGUAGE {DST_K_FORTRAN = 1, DST_K_C = 7, DST_K_ADA = 9, + DST_K_UNKNOWN = 10, DST_K_CXX = 15} DST_LANGUAGE; + + /* Module header (a module is the result of a single compilation). */ + + typedef struct _DST_MODULE_BEGIN + { + DST_HEADER dst_a_modbeg_header; + struct + { + unsigned dst_v_modbeg_hide : 1; + unsigned dst_v_modbeg_version : 1; + unsigned dst_v_modbeg_unused : 6; + } dst_b_modbeg_flags; + unsigned char dst_b_modbeg_unused; + DST_LANGUAGE dst_l_modbeg_language; + unsigned short int dst_w_version_major; + unsigned short int dst_w_version_minor; + unsigned char dst_b_modbeg_name; + } DST_MODULE_BEGIN; + #define DST_K_MODBEG_SIZE 15 + + /* Module trailer. */ + + typedef struct _DST_MB_TRLR + { + unsigned char dst_b_compiler; + } DST_MB_TRLR; + + #define DST_K_MB_TRLR_SIZE 1 + + #define DST_K_VERSION_MAJOR 1 + #define DST_K_VERSION_MINOR 13 + + typedef struct _DST_MODULE_END + { + DST_HEADER dst_a_modend_header; + } DST_MODULE_END; + #define DST_K_MODEND_SIZE sizeof 4 + + /* Routine header. */ + + typedef struct _DST_ROUTINE_BEGIN + { + DST_HEADER dst_a_rtnbeg_header; + struct + { + unsigned dst_v_rtnbeg_unused : 4; + unsigned dst_v_rtnbeg_unalloc : 1; + unsigned dst_v_rtnbeg_prototype : 1; + unsigned dst_v_rtnbeg_inlined : 1; + unsigned dst_v_rtnbeg_no_call : 1; + } dst_b_rtnbeg_flags; + int *dst_l_rtnbeg_address; + int *dst_l_rtnbeg_pd_address; + unsigned char dst_b_rtnbeg_name; + } DST_ROUTINE_BEGIN; + #define DST_K_RTNBEG_SIZE 14 + + /* Routine trailer */ + + typedef struct _DST_ROUTINE_END + { + DST_HEADER dst_a_rtnend_header; + char dst_b_rtnend_unused; + unsigned int dst_l_rtnend_size; + } DST_ROUTINE_END; + #define DST_K_RTNEND_SIZE 9 + + /* Block header. */ + + typedef struct _DST_BLOCK_BEGIN + { + DST_HEADER dst_a_blkbeg_header; + unsigned char dst_b_blkbeg_unused; + int *dst_l_blkbeg_address; + unsigned char dst_b_blkbeg_name; + } DST_BLOCK_BEGIN; + #define DST_K_BLKBEG_SIZE 10 + + /* Block trailer. */ + + typedef struct _DST_BLOCK_END + { + DST_HEADER dst_a_blkend_header; + unsigned char dst_b_blkend_unused; + unsigned int dst_l_blkend_size; + } DST_BLOCK_END; + #define DST_K_BLKEND_SIZE 9 + + /* Line number header. */ + + typedef struct _DST_LINE_NUM_HEADER + { + DST_HEADER dst_a_line_num_header; + } DST_LINE_NUM_HEADER; + #define DST_K_LINE_NUM_HEADER_SIZE 4 + + /* PC to Line number correlation. */ + + typedef struct _DST_PCLINE_COMMANDS + { + char dst_b_pcline_command; + union + { + unsigned int dst_l_pcline_unslong; + unsigned short int dst_w_pcline_unsword; + unsigned char dst_b_pcline_unsbyte; + } dst_a_pcline_access_fields; + } DST_PCLINE_COMMANDS; + + /* PC and Line number correlation codes. */ + + #define DST_K_PCLINE_COMMANDS_SIZE 5 + #define DST_K_PCLINE_COMMANDS_SIZE_MIN 2 + #define DST_K_PCLINE_COMMANDS_SIZE_MAX 5 + #define DST_K_DELTA_PC_LOW -128 + #define DST_K_DELTA_PC_HIGH 0 + #define DST_K_DELTA_PC_W 1 + #define DST_K_INCR_LINUM 2 + #define DST_K_INCR_LINUM_W 3 + #define DST_K_SET_LINUM 9 + #define DST_K_SET_ABS_PC 16 + #define DST_K_DELTA_PC_L 17 + #define DST_K_INCR_LINUM_L 18 + #define DST_K_SET_LINUM_B 19 + #define DST_K_SET_LINUM_L 20 + + /* Source file correlation header. */ + + typedef struct _DST_SOURCE_CORR + { + DST_HEADER dst_a_source_corr_header; + } DST_SOURCE_CORR; + #define DST_K_SOURCE_CORR_HEADER_SIZE 4 + + /* Source file correlation codes. */ + + #define DST_K_SRC_DECLFILE 1 + #define DST_K_SRC_SETFILE 2 + #define DST_K_SRC_SETREC_L 3 + #define DST_K_SRC_SETREC_W 4 + #define DST_K_SRC_SETLNUM_L 5 + #define DST_K_SRC_SETLNUM_W 6 + #define DST_K_SRC_INCRLNUM_B 7 + #define DST_K_SRC_DEFLINES_W 10 + #define DST_K_SRC_DEFLINES_B 11 + #define DST_K_SRC_FORMFEED 16 + #define DST_K_SRC_MIN_CMD 1 + #define DST_K_SRC_MAX_CMD 16 + + /* Source file header. */ + + typedef struct _DST_SRC_COMMAND + { + unsigned char dst_b_src_command; + union + { + struct + { + unsigned char dst_b_src_df_length; + unsigned char dst_b_src_df_flags; + unsigned short int dst_w_src_df_fileid; + #ifdef HAVE_LONG_LONG + long long dst_q_src_df_rms_cdt; + #else + #ifdef HAVE___INT64 + __int64 dst_q_src_df_rms_cdt; + #endif + #endif + unsigned int dst_l_src_df_rms_ebk; + unsigned short int dst_w_src_df_rms_ffb; + unsigned char dst_b_src_df_rms_rfo; + unsigned char dst_b_src_df_filename; + } dst_a_src_decl_src; + unsigned int dst_l_src_unslong; + unsigned short int dst_w_src_unsword; + unsigned char dst_b_src_unsbyte; + } dst_a_src_cmd_fields; + } DST_SRC_COMMAND; + #define DST_K_SRC_COMMAND_SIZE 21 + + /* Source file trailer. */ + + typedef struct _DST_SRC_CMDTRLR + { + unsigned char dst_b_src_df_libmodname; + } DST_SRC_CMDTRLR; + #define DST_K_SRC_CMDTRLR_SIZE 1 + + /* Prolog header. */ + + typedef struct _DST_PROLOG + { + DST_HEADER dst_a_prolog_header; + unsigned int dst_l_prolog_bkpt_addr; + } DST_PROLOG; + #define DST_K_PROLOG_SIZE 8 + + #endif /* GCC_VMSDBG_H */ diff -Nrc3pad gcc-3.0.4/gcc/vmsdbgout.c gcc-3.1/gcc/vmsdbgout.c *** gcc-3.0.4/gcc/vmsdbgout.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/vmsdbgout.c Mon Mar 11 13:19:14 2002 *************** *** 0 **** --- 1,1763 ---- + /* Output VMS debug format symbol table information from the GNU C compiler. + Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, + 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + Contributed by Douglas B. Rupp (rupp@gnat.com). + + This file is part of GNU CC. + + GCC is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2, or (at your option) any later + version. + + GCC is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to the Free + Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + + #include "config.h" + + #ifdef VMS_DEBUGGING_INFO + #include "system.h" + #include "tree.h" + #include "flags.h" + #include "rtl.h" + #include "output.h" + #include "vmsdbg.h" + #include "debug.h" + #include "langhooks.h" + + /* Difference in seconds between the VMS Epoch and the Unix Epoch */ + static const long long vms_epoch_offset = 3506716800ll; + + /* NOTE: In the comments in this file, many references are made to "Debug + Symbol Table". This term is abbreviated as `DST' throughout the remainder + of this file. */ + + typedef struct dst_line_info_struct *dst_line_info_ref; + + /* Each entry in the line_info_table maintains the file and + line number associated with the label generated for that + entry. The label gives the PC value associated with + the line number entry. */ + typedef struct dst_line_info_struct + { + unsigned long dst_file_num; + unsigned long dst_line_num; + } + dst_line_info_entry; + + typedef struct dst_file_info_struct *dst_file_info_ref; + + typedef struct dst_file_info_struct + { + char *file_name; + unsigned int max_line; + unsigned int listing_line_start; + long long cdt; + long ebk; + short ffb; + char rfo; + char flen; + } + dst_file_info_entry; + + /* How to start an assembler comment. */ + #ifndef ASM_COMMENT_START + #define ASM_COMMENT_START ";#" + #endif + + /* Maximum size (in bytes) of an artificially generated label. */ + #define MAX_ARTIFICIAL_LABEL_BYTES 30 + + /* Make sure we know the sizes of the various types debug can describe. These + are only defaults. If the sizes are different for your target, you should + override these values by defining the appropriate symbols in your tm.h + file. */ + #ifndef CHAR_TYPE_SIZE + #define CHAR_TYPE_SIZE BITS_PER_UNIT + #endif + #ifndef PTR_SIZE + #define PTR_SIZE 4 /* Must be 32 bits for VMS debug info */ + #endif + + /* Pointer to an structure of filenames referenced by this compilation unit. */ + static dst_file_info_ref file_info_table; + + /* Total number of entries in the table (i.e. array) pointed to by + `file_info_table'. This is the *total* and includes both used and unused + slots. */ + static unsigned int file_info_table_allocated; + + /* Number of entries in the file_info_table which are actually in use. */ + static unsigned int file_info_table_in_use; + + /* Size (in elements) of increments by which we may expand the filename + table. */ + #define FILE_TABLE_INCREMENT 64 + + static char **func_table; + static unsigned int func_table_allocated; + static unsigned int func_table_in_use; + #define FUNC_TABLE_INCREMENT 256 + + /* Local pointer to the name of the main input file. Initialized in + avmdbgout_init. */ + static const char *primary_filename; + + static char *module_producer; + static unsigned int module_language; + + /* A pointer to the base of a table that contains line information + for each source code line in .text in the compilation unit. */ + static dst_line_info_ref line_info_table; + + /* Number of elements currently allocated for line_info_table. */ + static unsigned int line_info_table_allocated; + + /* Number of elements in line_info_table currently in use. */ + static unsigned int line_info_table_in_use; + + /* Size (in elements) of increments by which we may expand line_info_table. */ + #define LINE_INFO_TABLE_INCREMENT 1024 + + /* The number of the current function definition for which debugging + information is being generated. These numbers range from 1 up to the + maximum number of function definitions contained within the current + compilation unit. These numbers are used to create unique label id's unique + to each function definition. */ + static unsigned int current_funcdef_number = 0; + + /* Forward declarations for functions defined in this file. */ + static char *full_name PARAMS ((const char *)); + static unsigned int lookup_filename PARAMS ((const char *)); + static void addr_const_to_string PARAMS ((char *, rtx)); + static int write_debug_header PARAMS ((DST_HEADER *, const char *, int)); + static int write_debug_addr PARAMS ((char *, const char *, int)); + static int write_debug_data1 PARAMS ((unsigned int, const char *, int)); + static int write_debug_data2 PARAMS ((unsigned int, const char *, int)); + static int write_debug_data4 PARAMS ((unsigned long, const char *, int)); + static int write_debug_data8 PARAMS ((unsigned long long, const char *, + int)); + static int write_debug_delta4 PARAMS ((char *, char *, const char *, int)); + static int write_debug_string PARAMS ((char *, const char *, int)); + static int write_modbeg PARAMS ((int)); + static int write_modend PARAMS ((int)); + static int write_rtnbeg PARAMS ((int, int)); + static int write_rtnend PARAMS ((int, int)); + static int write_pclines PARAMS ((int)); + static int write_srccorr PARAMS ((int, dst_file_info_entry, int)); + static int write_srccorrs PARAMS ((int)); + + static void vmsdbgout_init PARAMS ((const char *)); + static void vmsdbgout_finish PARAMS ((const char *)); + static void vmsdbgout_define PARAMS ((unsigned int, const char *)); + static void vmsdbgout_undef PARAMS ((unsigned int, const char *)); + static void vmsdbgout_start_source_file PARAMS ((unsigned int, const char *)); + static void vmsdbgout_end_source_file PARAMS ((unsigned int)); + static void vmsdbgout_begin_block PARAMS ((unsigned int, unsigned int)); + static void vmsdbgout_end_block PARAMS ((unsigned int, unsigned int)); + static bool vmsdbgout_ignore_block PARAMS ((tree)); + static void vmsdbgout_source_line PARAMS ((unsigned int, const char *)); + static void vmsdbgout_begin_prologue PARAMS ((unsigned int, const char *)); + static void vmsdbgout_end_epilogue PARAMS ((void)); + static void vmsdbgout_begin_function PARAMS ((tree)); + static void vmsdbgout_decl PARAMS ((tree)); + static void vmsdbgout_global_decl PARAMS ((tree)); + static void vmsdbgout_abstract_function PARAMS ((tree)); + + /* The debug hooks structure. */ + + struct gcc_debug_hooks vmsdbg_debug_hooks + = {vmsdbgout_init, + vmsdbgout_finish, + vmsdbgout_define, + vmsdbgout_undef, + vmsdbgout_start_source_file, + vmsdbgout_end_source_file, + vmsdbgout_begin_block, + vmsdbgout_end_block, + vmsdbgout_ignore_block, + vmsdbgout_source_line, + vmsdbgout_begin_prologue, + debug_nothing_int, /* end_prologue */ + vmsdbgout_end_epilogue, /* end_epilogue */ + vmsdbgout_begin_function, /* begin_function */ + debug_nothing_int, /* end_function */ + vmsdbgout_decl, + vmsdbgout_global_decl, + debug_nothing_tree, /* deferred_inline_function */ + vmsdbgout_abstract_function, + debug_nothing_rtx /* label */ + }; + + /* Definitions of defaults for assembler-dependent names of various + pseudo-ops and section names. + Theses may be overridden in the tm.h file (if necessary) for a particular + assembler. */ + #ifdef UNALIGNED_SHORT_ASM_OP + #undef UNALIGNED_SHORT_ASM_OP + #endif + #define UNALIGNED_SHORT_ASM_OP ".word" + + #ifdef UNALIGNED_INT_ASM_OP + #undef UNALIGNED_INT_ASM_OP + #endif + #define UNALIGNED_INT_ASM_OP ".long" + + #ifdef UNALIGNED_LONG_ASM_OP + #undef UNALIGNED_LONG_ASM_OP + #endif + #define UNALIGNED_LONG_ASM_OP ".long" + + #ifdef UNALIGNED_DOUBLE_INT_ASM_OP + #undef UNALIGNED_DOUBLE_INT_ASM_OP + #endif + #define UNALIGNED_DOUBLE_INT_ASM_OP ".quad" + + #ifdef ASM_BYTE_OP + #undef ASM_BYTE_OP + #endif + #define ASM_BYTE_OP ".byte" + + #define NUMBYTES(I) ((I) < 256 ? 1 : (I) < 65536 ? 2 : 4) + + #define NUMBYTES0(I) ((I) < 128 ? 0 : (I) < 65536 ? 2 : 4) + + #ifndef UNALIGNED_PTR_ASM_OP + #define UNALIGNED_PTR_ASM_OP \ + (PTR_SIZE == 8 ? UNALIGNED_DOUBLE_INT_ASM_OP : UNALIGNED_INT_ASM_OP) + #endif + + #ifndef UNALIGNED_OFFSET_ASM_OP + #define UNALIGNED_OFFSET_ASM_OP(OFFSET) \ + (NUMBYTES(OFFSET) == 4 \ + ? UNALIGNED_LONG_ASM_OP \ + : (NUMBYTES(OFFSET) == 2 ? UNALIGNED_SHORT_ASM_OP : ASM_BYTE_OP)) + #endif + + /* Pseudo-op for defining a new section. */ + #ifndef SECTION_ASM_OP + #define SECTION_ASM_OP ".section" + #endif + + /* Definitions of defaults for formats and names of various special + (artificial) labels which may be generated within this file (when the -g + options is used and VMS_DEBUGGING_INFO is in effect. If necessary, these + may be overridden from within the tm.h file, but typically, overriding these + defaults is unnecessary. */ + + static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES]; + + #ifndef TEXT_END_LABEL + #define TEXT_END_LABEL "Lvetext" + #endif + #ifndef FUNC_BEGIN_LABEL + #define FUNC_BEGIN_LABEL "LVFB" + #endif + #ifndef FUNC_PROLOG_LABEL + #define FUNC_PROLOG_LABEL "LVFP" + #endif + #ifndef FUNC_END_LABEL + #define FUNC_END_LABEL "LVFE" + #endif + #ifndef BLOCK_BEGIN_LABEL + #define BLOCK_BEGIN_LABEL "LVBB" + #endif + #ifndef BLOCK_END_LABEL + #define BLOCK_END_LABEL "LVBE" + #endif + #ifndef LINE_CODE_LABEL + #define LINE_CODE_LABEL "LVM" + #endif + + #ifndef ASM_OUTPUT_DEBUG_DELTA2 + #define ASM_OUTPUT_DEBUG_DELTA2(FILE,LABEL1,LABEL2) \ + do \ + { \ + fprintf ((FILE), "\t%s\t", UNALIGNED_SHORT_ASM_OP); \ + assemble_name (FILE, LABEL1); \ + fprintf (FILE, "-"); \ + assemble_name (FILE, LABEL2); \ + } \ + while (0) + #endif + + #ifndef ASM_OUTPUT_DEBUG_DELTA4 + #define ASM_OUTPUT_DEBUG_DELTA4(FILE,LABEL1,LABEL2) \ + do \ + { \ + fprintf ((FILE), "\t%s\t", UNALIGNED_INT_ASM_OP); \ + assemble_name (FILE, LABEL1); \ + fprintf (FILE, "-"); \ + assemble_name (FILE, LABEL2); \ + } \ + while (0) + #endif + + #ifndef ASM_OUTPUT_DEBUG_ADDR_DELTA + #define ASM_OUTPUT_DEBUG_ADDR_DELTA(FILE,LABEL1,LABEL2) \ + do \ + { \ + fprintf ((FILE), "\t%s\t", UNALIGNED_PTR_ASM_OP); \ + assemble_name (FILE, LABEL1); \ + fprintf (FILE, "-"); \ + assemble_name (FILE, LABEL2); \ + } \ + while (0) + #endif + + #ifndef ASM_OUTPUT_DEBUG_ADDR + #define ASM_OUTPUT_DEBUG_ADDR(FILE,LABEL) \ + do \ + { \ + fprintf ((FILE), "\t%s\t", UNALIGNED_PTR_ASM_OP); \ + assemble_name (FILE, LABEL); \ + } \ + while (0) + #endif + + #ifndef ASM_OUTPUT_DEBUG_ADDR_CONST + #define ASM_OUTPUT_DEBUG_ADDR_CONST(FILE,ADDR) \ + fprintf ((FILE), "\t%s\t%s", UNALIGNED_PTR_ASM_OP, (ADDR)) + #endif + + #ifndef ASM_OUTPUT_DEBUG_DATA1 + #define ASM_OUTPUT_DEBUG_DATA1(FILE,VALUE) \ + fprintf ((FILE), "\t%s\t0x%x", ASM_BYTE_OP, (unsigned char) VALUE) + #endif + + #ifndef ASM_OUTPUT_DEBUG_DATA2 + #define ASM_OUTPUT_DEBUG_DATA2(FILE,VALUE) \ + fprintf ((FILE), "\t%s\t0x%x", UNALIGNED_SHORT_ASM_OP, \ + (unsigned short) VALUE) + #endif + + #ifndef ASM_OUTPUT_DEBUG_DATA4 + #define ASM_OUTPUT_DEBUG_DATA4(FILE,VALUE) \ + fprintf ((FILE), "\t%s\t0x%lx", UNALIGNED_INT_ASM_OP, (unsigned long) VALUE) + #endif + + #ifndef ASM_OUTPUT_DEBUG_DATA + #define ASM_OUTPUT_DEBUG_DATA(FILE,VALUE) \ + fprintf ((FILE), "\t%s\t0x%lx", UNALIGNED_OFFSET_ASM_OP(VALUE), VALUE) + #endif + + #ifndef ASM_OUTPUT_DEBUG_ADDR_DATA + #define ASM_OUTPUT_DEBUG_ADDR_DATA(FILE,VALUE) \ + fprintf ((FILE), "\t%s\t0x%lx", UNALIGNED_PTR_ASM_OP, \ + (unsigned long) VALUE) + #endif + + #ifndef ASM_OUTPUT_DEBUG_DATA8 + #define ASM_OUTPUT_DEBUG_DATA8(FILE,VALUE) \ + fprintf ((FILE), "\t%s\t0x%llx", UNALIGNED_DOUBLE_INT_ASM_OP, \ + (unsigned long long) VALUE) + #endif + + /* This is similar to the default ASM_OUTPUT_ASCII, except that no trailing + newline is produced. When flag_verbose_asm is asserted, we add commnetary + at the end of the line, so we must avoid output of a newline here. */ + #ifndef ASM_OUTPUT_DEBUG_STRING + #define ASM_OUTPUT_DEBUG_STRING(FILE,P) \ + do \ + { \ + register int slen = strlen(P); \ + register char *p = (P); \ + register int i; \ + fprintf (FILE, "\t.ascii \""); \ + for (i = 0; i < slen; i++) \ + { \ + register int c = p[i]; \ + if (c == '\"' || c == '\\') \ + putc ('\\', FILE); \ + if (c >= ' ' && c < 0177) \ + putc (c, FILE); \ + else \ + fprintf (FILE, "\\%o", c); \ + } \ + fprintf (FILE, "\""); \ + } \ + while (0) + #endif + + /* Convert a reference to the assembler name of a C-level name. This + macro has the same effect as ASM_OUTPUT_LABELREF, but copies to + a string rather than writing to a file. */ + #ifndef ASM_NAME_TO_STRING + #define ASM_NAME_TO_STRING(STR, NAME) \ + do \ + { \ + if ((NAME)[0] == '*') \ + strcpy (STR, NAME+1); \ + else \ + strcpy (STR, NAME); \ + } \ + while (0) + #endif + + + /* General utility functions. */ + + /* Convert an integer constant expression into assembler syntax. Addition and + subtraction are the only arithmetic that may appear in these expressions. + This is an adaptation of output_addr_const in final.c. Here, the target + of the conversion is a string buffer. We can't use output_addr_const + directly, because it writes to a file. */ + + static void + addr_const_to_string (str, x) + char *str; + rtx x; + { + char buf1[256]; + char buf2[256]; + + restart: + str[0] = '\0'; + switch (GET_CODE (x)) + { + case PC: + if (flag_pic) + strcat (str, ","); + else + abort (); + break; + + case SYMBOL_REF: + ASM_NAME_TO_STRING (buf1, XSTR (x, 0)); + strcat (str, buf1); + break; + + case LABEL_REF: + ASM_GENERATE_INTERNAL_LABEL (buf1, "L", CODE_LABEL_NUMBER (XEXP (x, 0))); + ASM_NAME_TO_STRING (buf2, buf1); + strcat (str, buf2); + break; + + case CODE_LABEL: + ASM_GENERATE_INTERNAL_LABEL (buf1, "L", CODE_LABEL_NUMBER (x)); + ASM_NAME_TO_STRING (buf2, buf1); + strcat (str, buf2); + break; + + case CONST_INT: + sprintf (buf1, HOST_WIDE_INT_PRINT_DEC, INTVAL (x)); + strcat (str, buf1); + break; + + case CONST: + /* This used to output parentheses around the expression, but that does + not work on the 386 (either ATT or BSD assembler). */ + addr_const_to_string (buf1, XEXP (x, 0)); + strcat (str, buf1); + break; + + case CONST_DOUBLE: + if (GET_MODE (x) == VOIDmode) + { + /* We can use %d if the number is one word and positive. */ + if (CONST_DOUBLE_HIGH (x)) + sprintf (buf1, HOST_WIDE_INT_PRINT_DOUBLE_HEX, + CONST_DOUBLE_HIGH (x), CONST_DOUBLE_LOW (x)); + else if (CONST_DOUBLE_LOW (x) < 0) + sprintf (buf1, HOST_WIDE_INT_PRINT_HEX, CONST_DOUBLE_LOW (x)); + else + sprintf (buf1, HOST_WIDE_INT_PRINT_DEC, + CONST_DOUBLE_LOW (x)); + strcat (str, buf1); + } + else + /* We can't handle floating point constants; PRINT_OPERAND must + handle them. */ + output_operand_lossage ("floating constant misused"); + break; + + case PLUS: + /* Some assemblers need integer constants to appear last (eg masm). */ + if (GET_CODE (XEXP (x, 0)) == CONST_INT) + { + addr_const_to_string (buf1, XEXP (x, 1)); + strcat (str, buf1); + if (INTVAL (XEXP (x, 0)) >= 0) + strcat (str, "+"); + addr_const_to_string (buf1, XEXP (x, 0)); + strcat (str, buf1); + } + else + { + addr_const_to_string (buf1, XEXP (x, 0)); + strcat (str, buf1); + if (INTVAL (XEXP (x, 1)) >= 0) + strcat (str, "+"); + addr_const_to_string (buf1, XEXP (x, 1)); + strcat (str, buf1); + } + break; + + case MINUS: + /* Avoid outputting things like x-x or x+5-x, since some assemblers + can't handle that. */ + x = simplify_subtraction (x); + if (GET_CODE (x) != MINUS) + goto restart; + + addr_const_to_string (buf1, XEXP (x, 0)); + strcat (str, buf1); + strcat (str, "-"); + if (GET_CODE (XEXP (x, 1)) == CONST_INT + && INTVAL (XEXP (x, 1)) < 0) + { + strcat (str, "("); + addr_const_to_string (buf1, XEXP (x, 1)); + strcat (str, buf1); + strcat (str, ")"); + } + else + { + addr_const_to_string (buf1, XEXP (x, 1)); + strcat (str, buf1); + } + break; + + case ZERO_EXTEND: + case SIGN_EXTEND: + addr_const_to_string (buf1, XEXP (x, 0)); + strcat (str, buf1); + break; + + default: + output_operand_lossage ("invalid expression as operand"); + } + } + + /* Output the debug header HEADER. Also output COMMENT if flag_verbose_asm is + set. Return the header size. Just return the size if DOSIZEONLY is + non-zero. */ + + static int + write_debug_header (header, comment, dosizeonly) + DST_HEADER *header; + const char *comment; + int dosizeonly; + { + if (!dosizeonly) + { + ASM_OUTPUT_DEBUG_DATA2 (asm_out_file, + header->dst__header_length.dst_w_length); + + if (flag_verbose_asm) + fprintf (asm_out_file, "\t%s record length", ASM_COMMENT_START); + fputc ('\n', asm_out_file); + + ASM_OUTPUT_DEBUG_DATA2 (asm_out_file, + header->dst__header_type.dst_w_type); + + if (flag_verbose_asm) + fprintf (asm_out_file, "\t%s record type (%s)", ASM_COMMENT_START, + comment); + + fputc ('\n', asm_out_file); + } + + return 4; + } + + /* Output the address of SYMBOL. Also output COMMENT if flag_verbose_asm is + set. Return the address size. Just return the size if DOSIZEONLY is + non-zero. */ + + static int + write_debug_addr (symbol, comment, dosizeonly) + char *symbol; + const char *comment; + int dosizeonly; + { + if (!dosizeonly) + { + ASM_OUTPUT_DEBUG_ADDR (asm_out_file, symbol); + if (flag_verbose_asm) + fprintf (asm_out_file, "\t%s %s", ASM_COMMENT_START, comment); + fputc ('\n', asm_out_file); + } + + return PTR_SIZE; + } + + /* Output the single byte DATA1. Also output COMMENT if flag_verbose_asm is + set. Return the data size. Just return the size if DOSIZEONLY is + non-zero. */ + + static int + write_debug_data1 (data1, comment, dosizeonly) + unsigned int data1; + const char *comment; + int dosizeonly; + { + if (!dosizeonly) + { + ASM_OUTPUT_DEBUG_DATA1 (asm_out_file, data1); + if (flag_verbose_asm) + fprintf (asm_out_file, "\t%s %s", ASM_COMMENT_START, comment); + fputc ('\n', asm_out_file); + } + + return 1; + } + + /* Output the single word DATA2. Also output COMMENT if flag_verbose_asm is + set. Return the data size. Just return the size if DOSIZEONLY is + non-zero. */ + + static int + write_debug_data2 (data2, comment, dosizeonly) + unsigned int data2; + const char *comment; + int dosizeonly; + { + if (!dosizeonly) + { + ASM_OUTPUT_DEBUG_DATA2 (asm_out_file, data2); + if (flag_verbose_asm) + fprintf (asm_out_file, "\t%s %s", ASM_COMMENT_START, comment); + fputc ('\n', asm_out_file); + } + + return 2; + } + + /* Output double word DATA4. Also output COMMENT if flag_verbose_asm is set. + Return the data size. Just return the size if DOSIZEONLY is non-zero. */ + + static int + write_debug_data4 (data4, comment, dosizeonly) + unsigned long data4; + const char *comment; + int dosizeonly; + { + if (!dosizeonly) + { + ASM_OUTPUT_DEBUG_DATA4 (asm_out_file, data4); + if (flag_verbose_asm) + fprintf (asm_out_file, "\t%s %s", ASM_COMMENT_START, comment); + fputc ('\n', asm_out_file); + } + + return 4; + } + + /* Output quad word DATA8. Also output COMMENT if flag_verbose_asm is set. + Return the data size. Just return the size if DOSIZEONLY is non-zero. */ + + static int + write_debug_data8 (data8, comment, dosizeonly) + unsigned long long data8; + const char *comment; + int dosizeonly; + { + if (!dosizeonly) + { + ASM_OUTPUT_DEBUG_DATA8 (asm_out_file, data8); + if (flag_verbose_asm) + fprintf (asm_out_file, "\t%s %s", ASM_COMMENT_START, comment); + fputc ('\n', asm_out_file); + } + + return 8; + } + + /* Output the difference between LABEL1 and LABEL2. Also output COMMENT if + flag_verbose_asm is set. Return the data size. Just return the size if + DOSIZEONLY is non-zero. */ + + static int + write_debug_delta4 (label1, label2, comment, dosizeonly) + char *label1; + char *label2; + const char *comment; + int dosizeonly; + { + if (!dosizeonly) + { + ASM_OUTPUT_DEBUG_DELTA4 (asm_out_file, label1, label2); + if (flag_verbose_asm) + fprintf (asm_out_file, "\t%s %s", ASM_COMMENT_START, comment); + fputc ('\n', asm_out_file); + } + + return 4; + } + + /* Output a character string STRING. Also write COMMENT if flag_verbose_asm is + set. Return the string length. Just return the length if DOSIZEONLY is + non-zero. */ + + static int + write_debug_string (string, comment, dosizeonly) + char *string; + const char *comment; + int dosizeonly; + { + if (!dosizeonly) + { + ASM_OUTPUT_DEBUG_STRING (asm_out_file, string); + if (flag_verbose_asm) + fprintf (asm_out_file, "\t%s %s", ASM_COMMENT_START, comment); + fputc ('\n', asm_out_file); + } + + return strlen (string); + } + + /* Output a module begin header and return the header size. Just return the + size if DOSIZEONLY is non-zero. */ + + static int + write_modbeg (dosizeonly) + int dosizeonly; + { + DST_MODULE_BEGIN modbeg; + DST_MB_TRLR mb_trlr; + int i; + char *module_name, *m; + int modnamelen; + int prodnamelen; + int totsize = 0; + + /* Assumes primary filename has Unix syntax file spec. */ + module_name = xstrdup (basename ((char *) primary_filename)); + + m = strrchr (module_name, '.'); + if (m) + *m = 0; + + modnamelen = strlen (module_name); + for (i = 0; i < modnamelen; i++) + module_name[i] = TOUPPER (module_name[i]); + + prodnamelen = strlen (module_producer); + + modbeg.dst_a_modbeg_header.dst__header_length.dst_w_length + = DST_K_MODBEG_SIZE + modnamelen + DST_K_MB_TRLR_SIZE + prodnamelen - 1; + modbeg.dst_a_modbeg_header.dst__header_type.dst_w_type = DST_K_MODBEG; + modbeg.dst_b_modbeg_flags.dst_v_modbeg_hide = 0; + modbeg.dst_b_modbeg_flags.dst_v_modbeg_version = 1; + modbeg.dst_b_modbeg_flags.dst_v_modbeg_unused = 0; + modbeg.dst_b_modbeg_unused = 0; + modbeg.dst_l_modbeg_language = module_language; + modbeg.dst_w_version_major = DST_K_VERSION_MAJOR; + modbeg.dst_w_version_minor = DST_K_VERSION_MINOR; + modbeg.dst_b_modbeg_name = strlen (module_name); + + mb_trlr.dst_b_compiler = strlen (module_producer); + + totsize += write_debug_header (&modbeg.dst_a_modbeg_header, + "modbeg", dosizeonly); + totsize += write_debug_data1 (*((char *) &modbeg.dst_b_modbeg_flags), + "flags", dosizeonly); + totsize += write_debug_data1 (modbeg.dst_b_modbeg_unused, + "unused", dosizeonly); + totsize += write_debug_data4 (modbeg.dst_l_modbeg_language, + "language", dosizeonly); + totsize += write_debug_data2 (modbeg.dst_w_version_major, + "DST major version", dosizeonly); + totsize += write_debug_data2 (modbeg.dst_w_version_minor, + "DST minor version", dosizeonly); + totsize += write_debug_data1 (modbeg.dst_b_modbeg_name, + "length of module name", dosizeonly); + totsize += write_debug_string (module_name, "module name", dosizeonly); + totsize += write_debug_data1 (mb_trlr.dst_b_compiler, + "length of compiler name", dosizeonly); + totsize += write_debug_string (module_producer, "compiler name", dosizeonly); + + return totsize; + } + + /* Output a module end trailer and return the trailer size. Just return + the size if DOSIZEONLY is non-zero. */ + + static int + write_modend (dosizeonly) + int dosizeonly; + { + DST_MODULE_END modend; + int totsize = 0; + + modend.dst_a_modend_header.dst__header_length.dst_w_length + = DST_K_MODEND_SIZE - 1; + modend.dst_a_modend_header.dst__header_type.dst_w_type = DST_K_MODEND; + + totsize += write_debug_header (&modend.dst_a_modend_header, "modend", + dosizeonly); + + return totsize; + } + + /* Output a routine begin header routine RTNNUM and return the header size. + Just return the size if DOSIZEONLY is non-zero. */ + + static int + write_rtnbeg (rtnnum, dosizeonly) + int rtnnum; + int dosizeonly; + { + char *rtnname; + int rtnnamelen, rtnentrynamelen; + char *rtnentryname; + int totsize = 0; + char label[MAX_ARTIFICIAL_LABEL_BYTES]; + DST_ROUTINE_BEGIN rtnbeg; + DST_PROLOG prolog; + + rtnname = func_table[rtnnum]; + rtnnamelen = strlen (rtnname); + rtnentrynamelen = rtnnamelen + 4; /* "..en" */ + rtnentryname = (char *) xmalloc (rtnentrynamelen + 1); + strcpy (rtnentryname, rtnname); + strcat (rtnentryname, "..en"); + + if (!strcmp (rtnname, "main")) + { + DST_HEADER header; + const char *go = "TRANSFER$BREAK$GO"; + + /* This command isn't documented in DSTRECORDS, so it's made to + look like what DEC C does */ + + /* header size - 1st byte + flag byte + STO_LW size + + string count byte + string length */ + header.dst__header_length.dst_w_length + = DST_K_DST_HEADER_SIZE - 1 + 1 + 4 + 1 + strlen (go); + header.dst__header_type.dst_w_type = 0x17; + + totsize += write_debug_header (&header, "transfer", dosizeonly); + + /* I think this is a flag byte, but I don't know what this flag means */ + totsize += write_debug_data1 (0x1, "flags ???", dosizeonly); + + /* Routine Begin PD Address */ + totsize += write_debug_addr (rtnname, "main procedure descriptor", + dosizeonly); + totsize += write_debug_data1 (strlen (go), "length of main_name", + dosizeonly); + totsize += write_debug_string ((char *) go, "main name", dosizeonly); + } + + /* The header length never includes the length byte */ + rtnbeg.dst_a_rtnbeg_header.dst__header_length.dst_w_length + = DST_K_RTNBEG_SIZE + rtnnamelen - 1; + rtnbeg.dst_a_rtnbeg_header.dst__header_type.dst_w_type = DST_K_RTNBEG; + rtnbeg.dst_b_rtnbeg_flags.dst_v_rtnbeg_unused = 0; + rtnbeg.dst_b_rtnbeg_flags.dst_v_rtnbeg_unalloc = 0; + rtnbeg.dst_b_rtnbeg_flags.dst_v_rtnbeg_prototype = 0; + rtnbeg.dst_b_rtnbeg_flags.dst_v_rtnbeg_inlined = 0; + rtnbeg.dst_b_rtnbeg_flags.dst_v_rtnbeg_no_call = 1; + rtnbeg.dst_b_rtnbeg_name = rtnnamelen; + + totsize += write_debug_header (&rtnbeg.dst_a_rtnbeg_header, "rtnbeg", + dosizeonly); + totsize += write_debug_data1 (*((char *) &rtnbeg.dst_b_rtnbeg_flags), + "flags", dosizeonly); + + /* Routine Begin Address */ + totsize += write_debug_addr (rtnentryname, "routine entry name", dosizeonly); + + /* Routine Begin PD Address */ + totsize += write_debug_addr (rtnname, "routine procedure descriptor", + dosizeonly); + + /* Routine Begin Name */ + totsize += write_debug_data1 (rtnbeg.dst_b_rtnbeg_name, + "length of routine name", dosizeonly); + + totsize += write_debug_string (rtnname, "routine name", dosizeonly); + + free (rtnentryname); + + if (debug_info_level > DINFO_LEVEL_TERSE) + { + prolog.dst_a_prolog_header.dst__header_length.dst_w_length + = DST_K_PROLOG_SIZE - 1; + prolog.dst_a_prolog_header.dst__header_type.dst_w_type = DST_K_PROLOG; + + totsize += write_debug_header (&prolog.dst_a_prolog_header, "prolog", + dosizeonly); + + ASM_GENERATE_INTERNAL_LABEL (label, FUNC_PROLOG_LABEL, rtnnum); + totsize += write_debug_addr (label, "prolog breakpoint addr", + dosizeonly); + } + + return totsize; + } + + /* Output a routine end trailer for routine RTNNUM and return the header size. + Just return the size if DOSIZEONLY is non-zero. */ + + static int + write_rtnend (rtnnum, dosizeonly) + int rtnnum; + int dosizeonly; + { + DST_ROUTINE_END rtnend; + char label1[MAX_ARTIFICIAL_LABEL_BYTES]; + char label2[MAX_ARTIFICIAL_LABEL_BYTES]; + int totsize; + + totsize = 0; + + rtnend.dst_a_rtnend_header.dst__header_length.dst_w_length + = DST_K_RTNEND_SIZE - 1; + rtnend.dst_a_rtnend_header.dst__header_type.dst_w_type = DST_K_RTNEND; + rtnend.dst_b_rtnend_unused = 0; + rtnend.dst_l_rtnend_size = 0; /* Calculated below. */ + + totsize += write_debug_header (&rtnend.dst_a_rtnend_header, "rtnend", + dosizeonly); + totsize += write_debug_data1 (rtnend.dst_b_rtnend_unused, "unused", + dosizeonly); + + ASM_GENERATE_INTERNAL_LABEL (label1, FUNC_BEGIN_LABEL, rtnnum); + ASM_GENERATE_INTERNAL_LABEL (label2, FUNC_END_LABEL, rtnnum); + totsize += write_debug_delta4 (label2, label1, "routine size", dosizeonly); + + return totsize; + } + + #define K_DELTA_PC(I) \ + ((I) < 128 ? -(I) : (I) < 65536 ? DST_K_DELTA_PC_W : DST_K_DELTA_PC_L) + + #define K_SET_LINUM(I) \ + ((I) < 256 ? DST_K_SET_LINUM_B \ + : (I) < 65536 ? DST_K_SET_LINUM : DST_K_SET_LINUM_L) + + #define K_INCR_LINUM(I) \ + ((I) < 256 ? DST_K_INCR_LINUM \ + : (I) < 65536 ? DST_K_INCR_LINUM_W : DST_K_INCR_LINUM_L) + + /* Output the PC to line number correlations and return the size. Just return + the size if DOSIZEONLY is non-zero */ + + static int + write_pclines (dosizeonly) + int dosizeonly; + { + unsigned i; + int fn; + int ln, lastln; + int linestart = 0; + int max_line; + DST_LINE_NUM_HEADER line_num; + DST_PCLINE_COMMANDS pcline; + char label[MAX_ARTIFICIAL_LABEL_BYTES]; + char lastlabel[MAX_ARTIFICIAL_LABEL_BYTES]; + int totsize = 0; + char buff[256]; + + max_line = file_info_table[1].max_line; + file_info_table[1].listing_line_start = linestart; + linestart = linestart + ((max_line / 100000) + 1) * 100000; + + for (i = 2; i < file_info_table_in_use; i++) + { + max_line = file_info_table[i].max_line; + file_info_table[i].listing_line_start = linestart; + linestart = linestart + ((max_line / 10000) + 1) * 10000; + } + + /* Set starting address to beginning of text section */ + line_num.dst_a_line_num_header.dst__header_length.dst_w_length = 8; + line_num.dst_a_line_num_header.dst__header_type.dst_w_type = DST_K_LINE_NUM; + pcline.dst_b_pcline_command = DST_K_SET_ABS_PC; + + totsize += write_debug_header (&line_num.dst_a_line_num_header, + "line_num", dosizeonly); + totsize += write_debug_data1 (pcline.dst_b_pcline_command, + "line_num (SET ABS PC)", dosizeonly); + + if (dosizeonly) + totsize += 4; + else + { + ASM_OUTPUT_DEBUG_ADDR (asm_out_file, TEXT_SECTION_ASM_OP); + if (flag_verbose_asm) + fprintf (asm_out_file, "\t%s line_num", ASM_COMMENT_START); + fputc ('\n', asm_out_file); + } + + fn = line_info_table[1].dst_file_num; + ln = (file_info_table[fn].listing_line_start + + line_info_table[1].dst_line_num); + line_num.dst_a_line_num_header.dst__header_length.dst_w_length = 4 + 4; + pcline.dst_b_pcline_command = DST_K_SET_LINUM_L; + + totsize += write_debug_header (&line_num.dst_a_line_num_header, + "line_num", dosizeonly); + totsize += write_debug_data1 (pcline.dst_b_pcline_command, + "line_num (SET LINUM LONG)", dosizeonly); + + sprintf (buff, "line_num (%d)", ln - 1); + totsize += write_debug_data4 (ln - 1, buff, dosizeonly); + + lastln = ln; + strcpy (lastlabel, TEXT_SECTION_ASM_OP); + for (i = 1; i < line_info_table_in_use; i++) + { + int extrabytes; + + fn = line_info_table[i].dst_file_num; + ln = (file_info_table[fn].listing_line_start + + line_info_table[i].dst_line_num); + + if (ln - lastln > 1) + extrabytes = 5; /* NUMBYTES (ln - lastln - 1) + 1; */ + else if (ln <= lastln) + extrabytes = 5; /* NUMBYTES (ln - 1) + 1; */ + else + extrabytes = 0; + + line_num.dst_a_line_num_header.dst__header_length.dst_w_length + = 8 + extrabytes; + + totsize += write_debug_header + (&line_num.dst_a_line_num_header, "line_num", dosizeonly); + + if (ln - lastln > 1) + { + int lndif = ln - lastln - 1; + + /* K_INCR_LINUM (lndif); */ + pcline.dst_b_pcline_command = DST_K_INCR_LINUM_L; + + totsize += write_debug_data1 (pcline.dst_b_pcline_command, + "line_num (INCR LINUM LONG)", + dosizeonly); + + sprintf (buff, "line_num (%d)", lndif); + totsize += write_debug_data4 (lndif, buff, dosizeonly); + } + else if (ln <= lastln) + { + /* K_SET_LINUM (ln-1); */ + pcline.dst_b_pcline_command = DST_K_SET_LINUM_L; + + totsize += write_debug_data1 (pcline.dst_b_pcline_command, + "line_num (SET LINUM LONG)", + dosizeonly); + + sprintf (buff, "line_num (%d)", ln - 1); + totsize += write_debug_data4 (ln - 1, buff, dosizeonly); + } + + pcline.dst_b_pcline_command = DST_K_DELTA_PC_L; + + totsize += write_debug_data1 (pcline.dst_b_pcline_command, + "line_num (DELTA PC LONG)", dosizeonly); + + ASM_GENERATE_INTERNAL_LABEL (label, LINE_CODE_LABEL, i); + totsize += write_debug_delta4 (label, lastlabel, "increment line_num", + dosizeonly); + + lastln = ln; + strcpy (lastlabel, label); + } + + return totsize; + } + + /* Output a source correlation for file FILEID using information saved in + FILE_INFO_ENTRY and return the size. Just return the size if DOSIZEONLY is + non-zero. */ + + static int + write_srccorr (fileid, file_info_entry, dosizeonly) + int fileid; + dst_file_info_entry file_info_entry; + int dosizeonly; + { + int src_command_size; + int linesleft = file_info_entry.max_line; + int linestart = file_info_entry.listing_line_start; + int flen = file_info_entry.flen; + int linestodo = 0; + DST_SOURCE_CORR src_header; + DST_SRC_COMMAND src_command; + DST_SRC_COMMAND src_command_sf; + DST_SRC_COMMAND src_command_sl; + DST_SRC_COMMAND src_command_sr; + DST_SRC_COMMAND src_command_dl; + DST_SRC_CMDTRLR src_cmdtrlr; + char buff[256]; + int totsize = 0; + + if (fileid == 1) + { + src_header.dst_a_source_corr_header.dst__header_length.dst_w_length + = DST_K_SOURCE_CORR_HEADER_SIZE + 1 - 1; + src_header.dst_a_source_corr_header.dst__header_type.dst_w_type + = DST_K_SOURCE; + src_command.dst_b_src_command = DST_K_SRC_FORMFEED; + + totsize += write_debug_header (&src_header.dst_a_source_corr_header, + "source corr", dosizeonly); + + totsize += write_debug_data1 (src_command.dst_b_src_command, + "source_corr (SRC FORMFEED)", + dosizeonly); + } + + src_command_size + = DST_K_SRC_COMMAND_SIZE + flen + DST_K_SRC_CMDTRLR_SIZE; + src_command.dst_b_src_command = DST_K_SRC_DECLFILE; + src_command.dst_a_src_cmd_fields.dst_a_src_decl_src.dst_b_src_df_length + = src_command_size - 2; + src_command.dst_a_src_cmd_fields.dst_a_src_decl_src.dst_b_src_df_flags = 0; + src_command.dst_a_src_cmd_fields.dst_a_src_decl_src.dst_w_src_df_fileid + = fileid; + src_command.dst_a_src_cmd_fields.dst_a_src_decl_src.dst_q_src_df_rms_cdt + = file_info_entry.cdt; + src_command.dst_a_src_cmd_fields.dst_a_src_decl_src.dst_l_src_df_rms_ebk + = file_info_entry.ebk; + src_command.dst_a_src_cmd_fields.dst_a_src_decl_src.dst_w_src_df_rms_ffb + = file_info_entry.ffb; + src_command.dst_a_src_cmd_fields.dst_a_src_decl_src.dst_b_src_df_rms_rfo + = file_info_entry.rfo; + src_command.dst_a_src_cmd_fields.dst_a_src_decl_src.dst_b_src_df_filename + = file_info_entry.flen; + + src_header.dst_a_source_corr_header.dst__header_length.dst_w_length + = DST_K_SOURCE_CORR_HEADER_SIZE + src_command_size - 1; + src_header.dst_a_source_corr_header.dst__header_type.dst_w_type + = DST_K_SOURCE; + + src_cmdtrlr.dst_b_src_df_libmodname = 0; + + totsize += write_debug_header (&src_header.dst_a_source_corr_header, + "source corr", dosizeonly); + totsize += write_debug_data1 (src_command.dst_b_src_command, + "source_corr (DECL SRC FILE)", dosizeonly); + totsize += write_debug_data1 + (src_command.dst_a_src_cmd_fields.dst_a_src_decl_src.dst_b_src_df_length, + "source_corr (length)", dosizeonly); + + totsize += write_debug_data1 + (src_command.dst_a_src_cmd_fields.dst_a_src_decl_src.dst_b_src_df_flags, + "source_corr (flags)", dosizeonly); + + totsize += write_debug_data2 + (src_command.dst_a_src_cmd_fields.dst_a_src_decl_src.dst_w_src_df_fileid, + "source_corr (fileid)", dosizeonly); + + totsize += write_debug_data8 + (src_command.dst_a_src_cmd_fields.dst_a_src_decl_src.dst_q_src_df_rms_cdt, + "source_corr (creation date)", dosizeonly); + + totsize += write_debug_data4 + (src_command.dst_a_src_cmd_fields.dst_a_src_decl_src.dst_l_src_df_rms_ebk, + "source_corr (EOF block number)", dosizeonly); + + totsize += write_debug_data2 + (src_command.dst_a_src_cmd_fields.dst_a_src_decl_src.dst_w_src_df_rms_ffb, + "source_corr (first free byte)", dosizeonly); + + totsize += write_debug_data1 + (src_command.dst_a_src_cmd_fields.dst_a_src_decl_src.dst_b_src_df_rms_rfo, + "source_corr (record and file organization)", dosizeonly); + + totsize += write_debug_data1 + (src_command.dst_a_src_cmd_fields.dst_a_src_decl_src.dst_b_src_df_filename, + "source_corr (filename length)", dosizeonly); + + totsize += write_debug_string (file_info_entry.file_name, + "source file name", dosizeonly); + totsize += write_debug_data1 (src_cmdtrlr.dst_b_src_df_libmodname, + "source_corr (libmodname)", dosizeonly); + + src_command_sf.dst_b_src_command = DST_K_SRC_SETFILE; + src_command_sf.dst_a_src_cmd_fields.dst_w_src_unsword = fileid; + + src_command_sr.dst_b_src_command = DST_K_SRC_SETREC_W; + src_command_sr.dst_a_src_cmd_fields.dst_w_src_unsword = 1; + + src_command_sl.dst_b_src_command = DST_K_SRC_SETLNUM_L; + src_command_sl.dst_a_src_cmd_fields.dst_l_src_unslong = linestart + 1; + + src_command_dl.dst_b_src_command = DST_K_SRC_DEFLINES_W; + + if (linesleft > 65534) + linesleft = linesleft - 65534, linestodo = 65534; + else + linestodo = linesleft, linesleft = 0; + + src_command_dl.dst_a_src_cmd_fields.dst_w_src_unsword = linestodo; + + src_header.dst_a_source_corr_header.dst__header_length.dst_w_length + = DST_K_SOURCE_CORR_HEADER_SIZE + 3 + 3 + 5 + 3 - 1; + src_header.dst_a_source_corr_header.dst__header_type.dst_w_type + = DST_K_SOURCE; + + totsize += write_debug_header (&src_header.dst_a_source_corr_header, + "source corr", dosizeonly); + + totsize += write_debug_data1 (src_command_sf.dst_b_src_command, + "source_corr (src setfile)", dosizeonly); + + totsize += write_debug_data2 + (src_command_sf.dst_a_src_cmd_fields.dst_w_src_unsword, + "source_corr (fileid)", dosizeonly); + + totsize += write_debug_data1 (src_command_sr.dst_b_src_command, + "source_corr (setrec)", dosizeonly); + + totsize += write_debug_data2 + (src_command_sr.dst_a_src_cmd_fields.dst_w_src_unsword, + "source_corr (recnum)", dosizeonly); + + totsize += write_debug_data1 (src_command_sl.dst_b_src_command, + "source_corr (setlnum)", dosizeonly); + + totsize += write_debug_data4 + (src_command_sl.dst_a_src_cmd_fields.dst_l_src_unslong, + "source_corr (linenum)", dosizeonly); + + totsize += write_debug_data1 (src_command_dl.dst_b_src_command, + "source_corr (deflines)", dosizeonly); + + sprintf (buff, "source_corr (%d)", + src_command_dl.dst_a_src_cmd_fields.dst_w_src_unsword); + totsize += write_debug_data2 + (src_command_dl.dst_a_src_cmd_fields.dst_w_src_unsword, buff, dosizeonly); + + while (linesleft > 0) + { + src_header.dst_a_source_corr_header.dst__header_length.dst_w_length + = DST_K_SOURCE_CORR_HEADER_SIZE + 3 - 1; + src_header.dst_a_source_corr_header.dst__header_type.dst_w_type + = DST_K_SOURCE; + src_command_dl.dst_b_src_command = DST_K_SRC_DEFLINES_W; + + if (linesleft > 65534) + linesleft = linesleft - 65534, linestodo = 65534; + else + linestodo = linesleft, linesleft = 0; + + src_command_dl.dst_a_src_cmd_fields.dst_w_src_unsword = linestodo; + + totsize += write_debug_header (&src_header.dst_a_source_corr_header, + "source corr", dosizeonly); + totsize += write_debug_data1 (src_command_dl.dst_b_src_command, + "source_corr (deflines)", dosizeonly); + sprintf (buff, "source_corr (%d)", + src_command_dl.dst_a_src_cmd_fields.dst_w_src_unsword); + totsize += write_debug_data2 + (src_command_dl.dst_a_src_cmd_fields.dst_w_src_unsword, + buff, dosizeonly); + } + + return totsize; + } + + /* Output all the source correlation entries and return the size. Just return + the size if DOSIZEONLY is non-zero. */ + + static int + write_srccorrs (dosizeonly) + int dosizeonly; + { + unsigned int i; + int totsize = 0; + + for (i = 1; i < file_info_table_in_use; i++) + totsize += write_srccorr (i, file_info_table[i], dosizeonly); + + return totsize; + } + + /* Output a marker (i.e. a label) for the beginning of a function, before + the prologue. */ + + static void + vmsdbgout_begin_prologue (line, file) + unsigned int line; + const char *file; + { + char label[MAX_ARTIFICIAL_LABEL_BYTES]; + + if (write_symbols == VMS_AND_DWARF2_DEBUG) + (*dwarf2_debug_hooks.begin_prologue) (line, file); + + if (debug_info_level > DINFO_LEVEL_NONE) + { + current_funcdef_number++; + ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL, + current_funcdef_number); + ASM_OUTPUT_LABEL (asm_out_file, label); + } + } + + /* Output a marker (i.e. a label) for the beginning of a function, after + the prologue. */ + + void + vmsdbgout_after_prologue () + { + char label[MAX_ARTIFICIAL_LABEL_BYTES]; + + if (debug_info_level > DINFO_LEVEL_TERSE) + { + ASM_GENERATE_INTERNAL_LABEL (label, FUNC_PROLOG_LABEL, + current_funcdef_number); + ASM_OUTPUT_LABEL (asm_out_file, label); + } + } + + /* Output a marker (i.e. a label) for the absolute end of the generated code + for a function definition. This gets called *after* the epilogue code has + been generated. */ + + static void + vmsdbgout_end_epilogue () + { + char label[MAX_ARTIFICIAL_LABEL_BYTES]; + + if (write_symbols == VMS_AND_DWARF2_DEBUG) + (*dwarf2_debug_hooks.end_epilogue) (); + + if (debug_info_level > DINFO_LEVEL_NONE) + { + /* Output a label to mark the endpoint of the code generated for this + function. */ + ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL, + current_funcdef_number); + ASM_OUTPUT_LABEL (asm_out_file, label); + } + } + + /* Output a marker (i.e. a label) for the beginning of the generated code for + a lexical block. */ + + static void + vmsdbgout_begin_block (line, blocknum) + register unsigned line; + register unsigned blocknum; + { + if (write_symbols == VMS_AND_DWARF2_DEBUG) + (*dwarf2_debug_hooks.begin_block) (line, blocknum); + + if (debug_info_level > DINFO_LEVEL_TERSE) + ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum); + } + + /* Output a marker (i.e. a label) for the end of the generated code for a + lexical block. */ + + static void + vmsdbgout_end_block (line, blocknum) + register unsigned line; + register unsigned blocknum; + { + if (write_symbols == VMS_AND_DWARF2_DEBUG) + (*dwarf2_debug_hooks.end_block) (line, blocknum); + + if (debug_info_level > DINFO_LEVEL_TERSE) + ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum); + } + + /* Not implemented in VMS Debug. */ + + static bool + vmsdbgout_ignore_block (block) + tree block; + { + bool retval = 0; + + if (write_symbols == VMS_AND_DWARF2_DEBUG) + retval = (*dwarf2_debug_hooks.ignore_block) (block); + + return retval; + } + + /* Add an entry for function DECL into the func_table. */ + + static void + vmsdbgout_begin_function (decl) + tree decl; + { + const char *name = XSTR (XEXP (DECL_RTL (decl), 0), 0); + + if (write_symbols == VMS_AND_DWARF2_DEBUG) + (*dwarf2_debug_hooks.begin_function) (decl); + + if (func_table_in_use == func_table_allocated) + { + func_table_allocated += FUNC_TABLE_INCREMENT; + func_table = (char **) xrealloc (func_table, + func_table_allocated * sizeof (char *)); + } + + /* Add the new entry to the end of the function name table. */ + func_table[func_table_in_use++] = xstrdup (name); + } + + static char fullname_buff [4096]; + + /* Return the full file specification for FILENAME. The specification must be + in VMS syntax in order to be processed by VMS Debug. */ + + static char * + full_name (filename) + const char *filename; + { + #ifdef VMS + FILE *fp = fopen (filename, "r"); + + fgetname (fp, fullname_buff, 1); + fclose (fp); + #else + getcwd (fullname_buff, sizeof (fullname_buff)); + + strcat (fullname_buff, "/"); + strcat (fullname_buff, filename); + + /* ??? Insert hairy code here to translate Unix style file specification + to VMS style. */ + #endif + + return fullname_buff; + } + + /* Lookup a filename (in the list of filenames that we know about here in + vmsdbgout.c) and return its "index". The index of each (known) filename is + just a unique number which is associated with only that one filename. We + need such numbers for the sake of generating labels and references + to those files numbers. If the filename given as an argument is not + found in our current list, add it to the list and assign it the next + available unique index number. In order to speed up searches, we remember + the index of the filename was looked up last. This handles the majority of + all searches. */ + + static unsigned int + lookup_filename (file_name) + const char *file_name; + { + static unsigned int last_file_lookup_index = 0; + register char *fn; + register unsigned i; + char *fnam; + long long cdt; + long ebk; + short ffb; + char rfo; + char flen; + struct stat statbuf; + + if (stat (file_name, &statbuf) == 0) + { + long gmtoff; + #ifdef VMS + struct tm *ts; + + /* Adjust for GMT */ + ts = (struct tm *) localtime (&statbuf.st_ctime); + gmtoff = ts->tm_gmtoff; + + /* VMS has multiple file format types */ + rfo = statbuf.st_fab_rfm; + #else + /* Is GMT adjustment an issue with a cross-compiler? */ + gmtoff = 0; + + /* Assume stream LF type file */ + rfo = 2; + #endif + cdt = 10000000 * (statbuf.st_ctime + gmtoff + vms_epoch_offset); + ebk = statbuf.st_size / 512 + 1; + ffb = statbuf.st_size - ((statbuf.st_size / 512) * 512); + fnam = full_name (file_name); + flen = strlen (fnam); + } + else + { + cdt = 0; + ebk = 0; + ffb = 0; + rfo = 0; + fnam = (char *) ""; + flen = 0; + } + + /* Check to see if the file name that was searched on the previous call + matches this file name. If so, return the index. */ + if (last_file_lookup_index != 0) + { + fn = file_info_table[last_file_lookup_index].file_name; + if (strcmp (fnam, fn) == 0) + return last_file_lookup_index; + } + + /* Didn't match the previous lookup, search the table */ + for (i = 1; i < file_info_table_in_use; ++i) + { + fn = file_info_table[i].file_name; + if (strcmp (fnam, fn) == 0) + { + last_file_lookup_index = i; + return i; + } + } + + /* Prepare to add a new table entry by making sure there is enough space in + the table to do so. If not, expand the current table. */ + if (file_info_table_in_use == file_info_table_allocated) + { + + file_info_table_allocated += FILE_TABLE_INCREMENT; + file_info_table + = (dst_file_info_ref) xrealloc (file_info_table, + (file_info_table_allocated + * sizeof (dst_file_info_entry))); + } + + /* Add the new entry to the end of the filename table. */ + file_info_table[file_info_table_in_use].file_name = xstrdup (fnam); + file_info_table[file_info_table_in_use].max_line = 0; + file_info_table[file_info_table_in_use].cdt = cdt; + file_info_table[file_info_table_in_use].ebk = ebk; + file_info_table[file_info_table_in_use].ffb = ffb; + file_info_table[file_info_table_in_use].rfo = rfo; + file_info_table[file_info_table_in_use].flen = flen; + + last_file_lookup_index = file_info_table_in_use++; + return last_file_lookup_index; + } + + /* Output a label to mark the beginning of a source code line entry + and record information relating to this source line, in + 'line_info_table' for later output of the .debug_line section. */ + + static void + vmsdbgout_source_line (line, filename) + register unsigned line; + register const char *filename; + { + if (write_symbols == VMS_AND_DWARF2_DEBUG) + (*dwarf2_debug_hooks.source_line) (line, filename); + + if (debug_info_level >= DINFO_LEVEL_TERSE) + { + dst_line_info_ref line_info; + + ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, LINE_CODE_LABEL, + line_info_table_in_use); + + /* Expand the line info table if necessary. */ + if (line_info_table_in_use == line_info_table_allocated) + { + line_info_table_allocated += LINE_INFO_TABLE_INCREMENT; + line_info_table + = (dst_line_info_ref) xrealloc (line_info_table, + (line_info_table_allocated + * sizeof (dst_line_info_entry))); + } + + /* Add the new entry at the end of the line_info_table. */ + line_info = &line_info_table[line_info_table_in_use++]; + line_info->dst_file_num = lookup_filename (filename); + line_info->dst_line_num = line; + if (line > file_info_table[line_info->dst_file_num].max_line) + file_info_table[line_info->dst_file_num].max_line = line; + } + } + + /* Record the beginning of a new source file, for later output. + At present, unimplemented. */ + + static void + vmsdbgout_start_source_file (lineno, filename) + unsigned int lineno; + const char *filename; + { + if (write_symbols == VMS_AND_DWARF2_DEBUG) + (*dwarf2_debug_hooks.start_source_file) (lineno, filename); + } + + /* Record the end of a source file, for later output. + At present, unimplemented. */ + + static void + vmsdbgout_end_source_file (lineno) + unsigned int lineno ATTRIBUTE_UNUSED; + { + if (write_symbols == VMS_AND_DWARF2_DEBUG) + (*dwarf2_debug_hooks.end_source_file) (lineno); + } + + /* Set up for Debug output at the start of compilation. */ + + static void + vmsdbgout_init (main_input_filename) + const char *main_input_filename; + { + const char *language_string = lang_hooks.name; + + if (write_symbols == VMS_AND_DWARF2_DEBUG) + (*dwarf2_debug_hooks.init) (main_input_filename); + + if (debug_info_level == DINFO_LEVEL_NONE) + return; + + /* Remember the name of the primary input file. */ + primary_filename = main_input_filename; + + /* Allocate the initial hunk of the file_info_table. */ + file_info_table + = (dst_file_info_ref) xcalloc (FILE_TABLE_INCREMENT, + sizeof (dst_file_info_entry)); + file_info_table_allocated = FILE_TABLE_INCREMENT; + + /* Skip the first entry - file numbers begin at 1 */ + file_info_table_in_use = 1; + + func_table = (char **) xcalloc (FUNC_TABLE_INCREMENT, sizeof (char *)); + func_table_allocated = FUNC_TABLE_INCREMENT; + func_table_in_use = 1; + + /* Allocate the initial hunk of the line_info_table. */ + line_info_table + = (dst_line_info_ref) xcalloc (LINE_INFO_TABLE_INCREMENT, + sizeof (dst_line_info_entry)); + line_info_table_allocated = LINE_INFO_TABLE_INCREMENT; + /* zero-th entry is allocated, but unused */ + line_info_table_in_use = 1; + + lookup_filename (primary_filename); + + if (!strcmp (language_string, "GNU C")) + module_language = DST_K_C; + else if (!strcmp (language_string, "GNU C++")) + module_language = DST_K_CXX; + else if (!strcmp (language_string, "GNU Ada")) + module_language = DST_K_ADA; + else if (!strcmp (language_string, "GNU F77")) + module_language = DST_K_FORTRAN; + else + module_language = DST_K_UNKNOWN; + + module_producer + = (char *) xmalloc (strlen (language_string) + 1 + + strlen (version_string) + 1); + sprintf (module_producer, "%s %s", language_string, version_string); + + ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0); + + } + + /* Not implemented in VMS Debug. */ + + static void + vmsdbgout_define (lineno, buffer) + unsigned int lineno; + const char *buffer; + { + if (write_symbols == VMS_AND_DWARF2_DEBUG) + (*dwarf2_debug_hooks.define) (lineno, buffer); + } + + /* Not implemented in VMS Debug. */ + + static void + vmsdbgout_undef (lineno, buffer) + unsigned int lineno; + const char *buffer; + { + if (write_symbols == VMS_AND_DWARF2_DEBUG) + (*dwarf2_debug_hooks.undef) (lineno, buffer); + } + + /* Not implemented in VMS Debug. */ + + static void + vmsdbgout_decl (decl) + tree decl; + { + if (write_symbols == VMS_AND_DWARF2_DEBUG) + (*dwarf2_debug_hooks.function_decl) (decl); + } + + /* Not implemented in VMS Debug. */ + + static void + vmsdbgout_global_decl (decl) + tree decl; + { + if (write_symbols == VMS_AND_DWARF2_DEBUG) + (*dwarf2_debug_hooks.global_decl) (decl); + } + + /* Not implemented in VMS Debug. */ + + static void + vmsdbgout_abstract_function (decl) + tree decl; + { + if (write_symbols == VMS_AND_DWARF2_DEBUG) + (*dwarf2_debug_hooks.outlining_inline_function) (decl); + } + + /* Output stuff that Debug requires at the end of every file and generate the + VMS Debug debugging info. */ + + static void + vmsdbgout_finish (input_filename) + const char *input_filename ATTRIBUTE_UNUSED; + { + unsigned int i; + int totsize; + + if (write_symbols == VMS_AND_DWARF2_DEBUG) + (*dwarf2_debug_hooks.finish) (input_filename); + + if (debug_info_level == DINFO_LEVEL_NONE) + return; + + /* Output a terminator label for the .text section. */ + text_section (); + ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, TEXT_END_LABEL, 0); + + /* Output debugging information. + Warning! Do not change the name of the .vmsdebug section without + changing it in the assembler also. */ + named_section (NULL_TREE, ".vmsdebug", 0); + ASM_OUTPUT_ALIGN (asm_out_file, 0); + + totsize = write_modbeg (1); + for (i = 1; i < func_table_in_use; i++) + { + totsize += write_rtnbeg (i, 1); + totsize += write_rtnend (i, 1); + } + totsize += write_pclines (1); + + write_modbeg (0); + for (i = 1; i < func_table_in_use; i++) + { + write_rtnbeg (i, 0); + write_rtnend (i, 0); + } + write_pclines (0); + + if (debug_info_level > DINFO_LEVEL_TERSE) + { + totsize = write_srccorrs (1); + write_srccorrs (0); + } + + totsize = write_modend (1); + write_modend (0); + } + #endif /* VMS_DEBUGGING_INFO */ diff -Nrc3pad gcc-3.0.4/gcc/xcoffout.c gcc-3.1/gcc/xcoffout.c *** gcc-3.0.4/gcc/xcoffout.c Wed Apr 18 06:15:20 2001 --- gcc-3.1/gcc/xcoffout.c Thu Jan 10 16:55:14 2002 *************** *** 1,23 **** /* Output xcoff-format symbol table information from GNU compiler. ! Copyright (C) 1992, 1994, 1995, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* Output xcoff-format symbol table data. The main functionality is contained in dbxout.c. This file implements the sdbout-like parts of the xcoff --- 1,23 ---- /* Output xcoff-format symbol table information from GNU compiler. ! Copyright (C) 1992, 1994, 1995, 1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ /* Output xcoff-format symbol table data. The main functionality is contained in dbxout.c. This file implements the sdbout-like parts of the xcoff *************** Boston, MA 02111-1307, USA. */ *** 36,51 **** #ifdef XCOFF_DEBUGGING_INFO /* This defines the C_* storage classes. */ ! #include ! #include "xcoffout.h" #include "dbxout.h" - - #if defined (USG) || !defined (HAVE_STAB_H) #include "gstab.h" - #else - #include - #endif /* Line number of beginning of current function, minus one. Negative means not in a function or not using xcoff. */ --- 36,45 ---- #ifdef XCOFF_DEBUGGING_INFO /* This defines the C_* storage classes. */ ! #include "dbxstclass.h" #include "xcoffout.h" #include "dbxout.h" #include "gstab.h" /* Line number of beginning of current function, minus one. Negative means not in a function or not using xcoff. */ *************** const char *xcoff_lastfile; *** 81,91 **** ((xcoff_inlining) ? (LINENO) : (LINENO) - xcoff_begin_function_line) /* Output source line numbers via ".line" rather than ".stabd". */ ! #define ASM_OUTPUT_SOURCE_LINE(FILE,LINENUM) \ ! do { \ ! if (xcoff_begin_function_line >= 0) \ ! fprintf (FILE, "\t.line\t%d\n", ABS_OR_RELATIVE_LINENO (LINENUM)); \ ! } while (0) #define ASM_OUTPUT_LFB(FILE,LINENUM) \ { \ --- 75,87 ---- ((xcoff_inlining) ? (LINENO) : (LINENO) - xcoff_begin_function_line) /* Output source line numbers via ".line" rather than ".stabd". */ ! #define ASM_OUTPUT_SOURCE_LINE(FILE,LINENUM) \ ! do \ ! { \ ! if (xcoff_begin_function_line >= 0) \ ! fprintf (FILE, "\t.line\t%d\n", ABS_OR_RELATIVE_LINENO (LINENUM)); \ ! } \ ! while (0) #define ASM_OUTPUT_LFB(FILE,LINENUM) \ { \ *************** const char *xcoff_lastfile; *** 99,109 **** ? xcoff_current_include_file : main_input_filename); \ } ! #define ASM_OUTPUT_LFE(FILE,LINENUM) \ ! do { \ ! fprintf (FILE, "\t.ef\t%d\n", (LINENUM)); \ ! xcoff_begin_function_line = -1; \ ! } while (0) #define ASM_OUTPUT_LBB(FILE,LINENUM,BLOCKNUM) \ fprintf (FILE, "\t.bb\t%d\n", ABS_OR_RELATIVE_LINENO (LINENUM)) --- 95,107 ---- ? xcoff_current_include_file : main_input_filename); \ } ! #define ASM_OUTPUT_LFE(FILE,LINENUM) \ ! do \ ! { \ ! fprintf (FILE, "\t.ef\t%d\n", (LINENUM)); \ ! xcoff_begin_function_line = -1; \ ! } \ ! while (0) #define ASM_OUTPUT_LBB(FILE,LINENUM,BLOCKNUM) \ fprintf (FILE, "\t.bb\t%d\n", ABS_OR_RELATIVE_LINENO (LINENUM)) *************** xcoff_output_standard_types (syms) *** 173,179 **** /* Print an error message for unrecognized stab codes. */ #define UNKNOWN_STAB(STR) \ ! internal_error ("No sclass for %s stab (0x%x)\n", STR, stab) /* Conversion routine from BSD stabs to AIX storage classes. */ --- 171,177 ---- /* Print an error message for unrecognized stab codes. */ #define UNKNOWN_STAB(STR) \ ! internal_error ("no sclass for %s stab (0x%x)\n", STR, stab) /* Conversion routine from BSD stabs to AIX storage classes. */ *************** stab_to_sclass (stab) *** 196,205 **** case N_LCSYM: return C_STSYM; - #ifdef N_MAIN case N_MAIN: UNKNOWN_STAB ("N_MAIN"); - #endif case N_RSYM: return C_RSYM; --- 194,201 ---- *************** stab_to_sclass (stab) *** 228,257 **** case N_SLINE: UNKNOWN_STAB ("N_SLINE"); - #ifdef N_DSLINE case N_DSLINE: UNKNOWN_STAB ("N_DSLINE"); - #endif - #ifdef N_BSLINE case N_BSLINE: UNKNOWN_STAB ("N_BSLINE"); - #endif - #ifdef N_BINCL case N_BINCL: UNKNOWN_STAB ("N_BINCL"); - #endif - #ifdef N_EINCL case N_EINCL: UNKNOWN_STAB ("N_EINCL"); - #endif - #ifdef N_EXCL case N_EXCL: UNKNOWN_STAB ("N_EXCL"); - #endif case N_LBRAC: UNKNOWN_STAB ("N_LBRAC"); --- 224,243 ---- *************** stab_to_sclass (stab) *** 272,296 **** case N_PC: UNKNOWN_STAB ("N_PC"); - #ifdef N_M2C case N_M2C: UNKNOWN_STAB ("N_M2C"); - #endif - #ifdef N_SCOPE case N_SCOPE: UNKNOWN_STAB ("N_SCOPE"); - #endif - #ifdef N_CATCH case N_CATCH: UNKNOWN_STAB ("N_CATCH"); - #endif - #ifdef N_OPT case N_OPT: UNKNOWN_STAB ("N_OPT"); - #endif default: UNKNOWN_STAB ("?"); --- 258,274 ---- *************** xcoffout_source_file (file, filename, in *** 330,347 **** } } ! /* Output a line number symbol entry into output stream FILE, ! for source file FILENAME and line number NOTE. */ void ! xcoffout_source_line (file, filename, note) ! FILE *file; const char *filename; - rtx note; { ! xcoffout_source_file (file, filename, RTX_INTEGRATED_P (note)); ! ASM_OUTPUT_SOURCE_LINE (file, NOTE_LINE_NUMBER (note)); } /* Output the symbols defined in block number DO_BLOCK. --- 308,326 ---- } } ! /* Output a line number symbol entry for location (FILENAME, LINE). */ void ! xcoffout_source_line (line, filename) ! unsigned int line; const char *filename; { ! bool inline_p = (strcmp (xcoff_current_function_file, filename) != 0 ! || (int) line < xcoff_begin_function_line); ! xcoffout_source_file (asm_out_file, filename, inline_p); ! ! ASM_OUTPUT_SOURCE_LINE (asm_out_file, line); } /* Output the symbols defined in block number DO_BLOCK. *************** static int do_block = 0; *** 353,359 **** static void xcoffout_block (block, depth, args) ! register tree block; int depth; tree args; { --- 332,338 ---- static void xcoffout_block (block, depth, args) ! tree block; int depth; tree args; { *************** xcoffout_block (block, depth, args) *** 394,410 **** if the count starts at 0 for the outermost one. */ void ! xcoffout_begin_block (file, line, n) ! FILE *file; ! int line; ! int n; { tree decl = current_function_decl; /* The IBM AIX compiler does not emit a .bb for the function level scope, so we avoid it here also. */ if (n != 1) ! ASM_OUTPUT_LBB (file, line, n); do_block = n; xcoffout_block (DECL_INITIAL (decl), 0, DECL_ARGUMENTS (decl)); --- 373,388 ---- if the count starts at 0 for the outermost one. */ void ! xcoffout_begin_block (line, n) ! unsigned int line; ! unsigned int n; { tree decl = current_function_decl; /* The IBM AIX compiler does not emit a .bb for the function level scope, so we avoid it here also. */ if (n != 1) ! ASM_OUTPUT_LBB (asm_out_file, line, n); do_block = n; xcoffout_block (DECL_INITIAL (decl), 0, DECL_ARGUMENTS (decl)); *************** xcoffout_begin_block (file, line, n) *** 413,425 **** /* Describe the end line-number of an internal block within a function. */ void ! xcoffout_end_block (file, line, n) ! FILE *file; ! int line; ! int n; { if (n != 1) ! ASM_OUTPUT_LBE (file, line, n); } /* Called at beginning of function (before prologue). --- 391,402 ---- /* Describe the end line-number of an internal block within a function. */ void ! xcoffout_end_block (line, n) ! unsigned int line; ! unsigned int n; { if (n != 1) ! ASM_OUTPUT_LBE (asm_out_file, line, n); } /* Called at beginning of function (before prologue). *************** xcoffout_declare_function (file, decl, n *** 460,476 **** name, name, name, name); } ! /* Called at beginning of function body (after prologue). Record the function's starting line number, so we can output relative line numbers for the other lines. Record the file name that this function is contained in. */ void ! xcoffout_begin_function (file, last_linenum) ! FILE *file; ! int last_linenum; { ! ASM_OUTPUT_LFB (file, last_linenum); dbxout_parms (DECL_ARGUMENTS (current_function_decl)); /* Emit the symbols for the outermost BLOCK's variables. sdbout.c does this --- 437,453 ---- name, name, name, name); } ! /* Called at beginning of function body (at start of prologue). Record the function's starting line number, so we can output relative line numbers for the other lines. Record the file name that this function is contained in. */ void ! xcoffout_begin_prologue (line, file) ! unsigned int line; ! const char *file ATTRIBUTE_UNUSED; { ! ASM_OUTPUT_LFB (asm_out_file, line); dbxout_parms (DECL_ARGUMENTS (current_function_decl)); /* Emit the symbols for the outermost BLOCK's variables. sdbout.c does this *************** xcoffout_begin_function (file, last_line *** 481,506 **** xcoffout_block (DECL_INITIAL (current_function_decl), 0, DECL_ARGUMENTS (current_function_decl)); ! ASM_OUTPUT_SOURCE_LINE (file, last_linenum); } /* Called at end of function (before epilogue). Describe end of outermost block. */ void ! xcoffout_end_function (file, last_linenum) ! FILE *file; ! int last_linenum; { ! ASM_OUTPUT_LFE (file, last_linenum); } /* Output xcoff info for the absolute end of a function. Called after the epilogue is output. */ void ! xcoffout_end_epilogue (file) ! FILE *file; { /* We need to pass the correct function size to .function, otherwise, the xas assembler can't figure out the correct size for the function --- 458,481 ---- xcoffout_block (DECL_INITIAL (current_function_decl), 0, DECL_ARGUMENTS (current_function_decl)); ! ASM_OUTPUT_SOURCE_LINE (asm_out_file, line); } /* Called at end of function (before epilogue). Describe end of outermost block. */ void ! xcoffout_end_function (last_linenum) ! unsigned int last_linenum; { ! ASM_OUTPUT_LFE (asm_out_file, last_linenum); } /* Output xcoff info for the absolute end of a function. Called after the epilogue is output. */ void ! xcoffout_end_epilogue () { /* We need to pass the correct function size to .function, otherwise, the xas assembler can't figure out the correct size for the function *************** xcoffout_end_epilogue (file) *** 510,516 **** const char *fname = XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0); if (*fname == '*') ++fname; ! fprintf (file, "FE.."); ! ASM_OUTPUT_LABEL (file, fname); } #endif /* XCOFF_DEBUGGING_INFO */ --- 485,491 ---- const char *fname = XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0); if (*fname == '*') ++fname; ! fprintf (asm_out_file, "FE.."); ! ASM_OUTPUT_LABEL (asm_out_file, fname); } #endif /* XCOFF_DEBUGGING_INFO */ diff -Nrc3pad gcc-3.0.4/gcc/xcoffout.h gcc-3.1/gcc/xcoffout.h *** gcc-3.0.4/gcc/xcoffout.h Fri May 25 21:16:12 2001 --- gcc-3.1/gcc/xcoffout.h Tue Oct 9 14:03:13 2001 *************** *** 2,23 **** and xcoffout.h. Copyright (C) 1998, 2000 Free Software Foundation, Inc. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 2, or (at your option) ! any later version. ! GNU CC is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to ! the Free Software Foundation, 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ #define ASM_STABS_OP "\t.stabx\t" --- 2,23 ---- and xcoffout.h. Copyright (C) 1998, 2000 Free Software Foundation, Inc. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under ! the terms of the GNU General Public License as published by the Free ! Software Foundation; either version 2, or (at your option) any later ! version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY ! WARRANTY; without even the implied warranty of MERCHANTABILITY or ! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free ! Software Foundation, 59 Temple Place - Suite 330, Boston, MA ! 02111-1307, USA. */ #define ASM_STABS_OP "\t.stabx\t" *************** extern const char *xcoff_lastfile; *** 195,209 **** #define DEBUG_SYMS_TEXT ! /* Prototype functions in xcoffout.c. */ extern int stab_to_sclass PARAMS ((int)); #ifdef BUFSIZ ! extern void xcoffout_begin_function PARAMS ((FILE *, int)); ! extern void xcoffout_begin_block PARAMS ((FILE *, int, int)); ! extern void xcoffout_end_epilogue PARAMS ((FILE *)); ! extern void xcoffout_end_function PARAMS ((FILE *, int)); ! extern void xcoffout_end_block PARAMS ((FILE *, int, int)); #endif /* BUFSIZ */ #ifdef TREE_CODE --- 195,210 ---- #define DEBUG_SYMS_TEXT ! /* Prototype functions in xcoffout.c. */ extern int stab_to_sclass PARAMS ((int)); #ifdef BUFSIZ ! extern void xcoffout_begin_prologue PARAMS ((unsigned int, ! const char *)); ! extern void xcoffout_begin_block PARAMS ((unsigned, unsigned)); ! extern void xcoffout_end_epilogue PARAMS ((void)); ! extern void xcoffout_end_function PARAMS ((unsigned int)); ! extern void xcoffout_end_block PARAMS ((unsigned, unsigned)); #endif /* BUFSIZ */ #ifdef TREE_CODE *************** extern void xcoffout_declare_function P *** 215,220 **** #ifdef RTX_CODE #ifdef BUFSIZ ! extern void xcoffout_source_line PARAMS ((FILE *, const char *, rtx)); #endif /* BUFSIZ */ #endif /* RTX_CODE */ --- 216,222 ---- #ifdef RTX_CODE #ifdef BUFSIZ ! extern void xcoffout_source_line PARAMS ((unsigned int, ! const char *)); #endif /* BUFSIZ */ #endif /* RTX_CODE */ diff -Nrc3pad gcc-3.0.4/include/ChangeLog gcc-3.1/include/ChangeLog *** gcc-3.0.4/include/ChangeLog Wed Feb 20 18:45:34 2002 --- gcc-3.1/include/ChangeLog Wed May 15 02:24:25 2002 *************** *** 1,39 **** ! 2002-02-20 Release Manager ! * GCC 3.0.4 Released. ! 2001-12-20 Release Manager ! * GCC 3.0.3 Released. ! 2001-10-23 Release Manager ! * GCC 3.0.2 Released. ! 2001-08-19 Release Manager ! * GCC 3.0.1 Released. ! 2001-08-19 Release Manager ! * GCC 3.0.1 Released. ! 20010617 Release Manager ! * GCC 3.0 Released. 2001-05-07 Zack Weinberg * demangle.h: Use PARAMS for all prototypes. 2001-05-07 Mark Mitchell * splay-tree.h (splay_tree_max): New function. (splay_tree_min): Likewise. ! 2001-03-20 Neil Booth ! * libiberty.h: Declare lbasename (). 2001-03-20 Jim Blandy --- 1,178 ---- ! 2002-05-14 Release Manager ! * GCC 3.1 Released. ! 2002-05-14 Release Manager ! * GCC 3.1 Released. ! 2002-04-16 David S. Miller ! * xregex2.h (__restrict_arr): Define to __restrict on GCC ! 3.1 and later. Do not redefine. ! 2002-04-01 Phil Edwards ! * dyn-string.h: Also allow IN_GLIBCPP_V3 to redefine names. ! 2002-02-22 Jim Blandy ! Allow the user to specify functions for allocating memory for ! splay tree roots and nodes. ! * splay-tree.h (splay_tree_allocate_fn, splay_tree_deallocate_fn): ! New types. ! (splay_tree): New fields: `allocate', `deallocate', and ! `allocate_data'. ! (splay_tree_new_with_allocator): New function declaration. ! 2002-02-05 Jason Merrill ! * demangle.h (cplus_demangle_v3): Add "options" parm. ! (cplus_demangle_v3_type): Remove prototype. ! (DMGL_VERBOSE): New macro. ! (DMGL_TYPES): New macro. ! ! 2002-02-02 H.J. Lu (hjl@gnu.org) ! ! * demangle.h (cplus_demangle_v3_type): New prototype. ! ! 2002-01-28 Kaveh R. Ghazi ! ! * libiberty.h (C_alloca): Add ATTRIBUTE_MALLOC. ! ! 2001-12-06 Richard Henderson ! ! * demangle.h (no_demangling): New. ! (NO_DEMANGLING_STYLE_STRING): New. ! ! 2001-10-24 Neil Booth ! ! * safe-ctype.h (_sch_isbasic, IS_ISOBASIC): New. ! ! 2001-10-22 Kaveh R. Ghazi ! ! * libiberty.h (hex_init): Revert delete. ! ! * libiberty.h (_hex_value): Const-ify. ! (hex_init): Delete. ! ! 2001-10-07 Kaveh R. Ghazi ! ! * demangle.h (demangler_engine): Const-ify. ! * libiberty.h (buildargv): Likewise. ! ! 2001-09-24 Kaveh R. Ghazi ! ! * libiberty.h (reconcat): New function. ! ! 2001-09-18 Kaveh R. Ghazi ! ! * libiberty.h (concat, concat_length, concat_copy, concat_copy2, ! ACONCAT): Improve comments. ! ! 2001-09-18 Alan Modra ! ! * objalloc.h (OBJALLOC_ALIGN): Define using offsetof. ! ! 2001-09-17 Kaveh R. Ghazi ! ! * libiberty.h (concat_length, concat_copy, concat_copy2, ! libiberty_concat_ptr, ACONCAT): New. ! ! * libiberty.h (ASTRDUP): New macro. ! libiberty_optr, libiberty_nptr, libiberty_len): Declare. ! ! 2001-08-29 Kaveh R. Ghazi ! ! * ansidecl.h: Update comments reflecting previous change. ! ! 2001-08-27 Kaveh R. Ghazi ! ! * ansidecl.h (VA_OPEN, VA_CLOSE): Allow multiple uses. ! ! 2001-08-23 Lars Brinkhoff ! ! * dyn-string.h, fibheap.h, partition.h, sort.h, splay-tree.h: ! replace "GNU CC" with "GCC". ! ! 2001-08-21 Richard Henderson ! ! * fibheap.h: Tidy formatting. ! (fibnode_t): Limit degree to 31 bits to avoid warning. ! ! 2001-08-20 Andrew Cagney ! ! * floatformat.h (floatformat_arm_ext): Document as deprecated. ! (floatformat_arm_ext_big, floatformat_arm_ext_littlebyte_bigword) ! (floatformat_ia64_spill_little, floatformat_ia64_quad_little) ! (floatformat_ia64_spill_big, floatformat_ia64_quad_big) ! (floatformat_m88110_harris_ext): Declare. ! ! 2001-08-20 Daniel Berlin ! ! * fibheap.h: New file. Fibonacci heap. ! ! 2001-08-18 Zack Weinberg ! ! * ansidecl.h: Reorganize for readability, remove documentation ! of obsolete macros, document PARAMS and VPARAMS. Add new ! macros VA_OPEN, VA_CLOSE, and VA_FIXEDARG for nicer variadic ! function implementation. ! ! 2001-08-16 Richard Henderson ! ! * hashtab.h (htab_hash_string): Declare. ! ! 2001-08-10 Andrew Cagney ! ! * libiberty.h (lbasename): Change function declaration to return a ! const char pointer. ! ! 2001-08-02 Mark Kettenis ! ! * xregex.h (_REGEX_RE_COMP): Define. ! (re_comp): Define to xre_comp. ! (re_exec): Define to xre_exec. ! ! 2001-07-18 Andreas Jaeger ! ! * xregex2.h: Place under LGPL version 2.1. ! ! 2001-07-10 Jeff Johnston ! ! * xregex.h: New file to support libiberty regex. ! * xregex2.h: Ditto. ! ! 2001-05-16 Matt Kraai ! ! * partition.h: Fix misspelling of `implementation'. ! ! 2001-05-10 Kaveh R. Ghazi ! ! * ansidecl.h (NULL_PTR): Delete. 2001-05-07 Zack Weinberg * demangle.h: Use PARAMS for all prototypes. + * ternary.h: Use PARAMS for all prototypes. Use PTR, not void *. + Make arguments constant where possible. 2001-05-07 Mark Mitchell * splay-tree.h (splay_tree_max): New function. (splay_tree_min): Likewise. ! 2001-04-15 Daniel Berlin ! * ternary.h: New file - Ternary search tree header. ! ! 2001-04-03 Zack Weinberg ! ! * ansidecl.h: All logic from gcc/gansidecl.h moved here. ! ! 2001-03-31 Kaveh R. Ghazi ! ! * libiberty.h (alloca): Handle setting C_ALLOCA. 2001-03-20 Jim Blandy *************** *** 41,49 **** is_gnu_v3_mangled_ctor, enum gnu_v3_destructor_kinds, is_gnu_v3_mangled_dtor): New declarations. 2001-03-01 John David Anglin ! * safe-ctype.h (_sch_test): Cast enum bit to short int for pcc compatibility. 2000-12-18 Joseph S. Myers --- 180,210 ---- is_gnu_v3_mangled_ctor, enum gnu_v3_destructor_kinds, is_gnu_v3_mangled_dtor): New declarations. + 2001-03-14 Nick Clifton + + * ansidecl.h: Fix copyright dates. + * demangle.h: Fix copyright dates. + * floatformat.h: Fix copyright dates. + * fnmatch.h: Fix copyright dates. + * getopt.h: Fix copyright dates. + * libiberty.h: Add FSF copyright notice. + * md5.h: Fix copyright dates. + * obstack.h: Fix copyright dates. + * splay-tree.h: Fix copyright dates. + + 2001-03-10 Neil Booth + John David Anglin + + * libiberty.h: Add lbasename. + + 2001-03-06 Zack Weinberg + + * libiberty.h: Prototype C_alloca; define alloca to either + __builtin_alloca or C_alloca as appropriate. + 2001-03-01 John David Anglin ! * safe-ctype.h (_sch_test): Cast enum bit to unsigned short int for pcc compatibility. 2000-12-18 Joseph S. Myers diff -Nrc3pad gcc-3.0.4/include/ansidecl.h gcc-3.1/include/ansidecl.h *** gcc-3.0.4/include/ansidecl.h Sat May 6 19:59:59 2000 --- gcc-3.1/include/ansidecl.h Wed Aug 29 19:44:39 2001 *************** *** 1,5 **** /* ANSI and traditional C compatability macros ! Copyright 1991, 1992, 1996, 1999 Free Software Foundation, Inc. This file is part of the GNU C Library. This program is free software; you can redistribute it and/or modify --- 1,6 ---- /* ANSI and traditional C compatability macros ! Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 ! Free Software Foundation, Inc. This file is part of the GNU C Library. This program is free software; you can redistribute it and/or modify *************** Foundation, Inc., 59 Temple Place - Suit *** 20,184 **** ANSI C is assumed if __STDC__ is #defined. ! Macro ANSI C definition Traditional C definition ! ----- ---- - ---------- ----------- - ---------- ! PTR `void *' `char *' ! LONG_DOUBLE `long double' `double' ! VOLATILE `volatile' `' ! SIGNED `signed' `' ! PTRCONST `void *const' `char *' ! ANSI_PROTOTYPES 1 not defined ! ! CONST is also defined, but is obsolete. Just use const. ! ! obsolete -- DEFUN (name, arglist, args) ! ! Defines function NAME. ! ARGLIST lists the arguments, separated by commas and enclosed in ! parentheses. ARGLIST becomes the argument list in traditional C. ! ARGS list the arguments with their types. It becomes a prototype in ! ANSI C, and the type declarations in traditional C. Arguments should ! be separated with `AND'. For functions with a variable number of ! arguments, the last thing listed should be `DOTS'. ! obsolete -- DEFUN_VOID (name) ! Defines a function NAME, which takes no arguments. - obsolete -- EXFUN (name, (prototype)) -- obsolete. ! Replaced by PARAMS. Do not use; will disappear someday soon. ! Was used in external function declarations. ! In ANSI C it is `NAME PROTOTYPE' (so PROTOTYPE should be enclosed in ! parentheses). In traditional C it is `NAME()'. ! For a function that takes no arguments, PROTOTYPE should be `(void)'. ! obsolete -- PROTO (type, name, (prototype) -- obsolete. ! This one has also been replaced by PARAMS. Do not use. ! PARAMS ((args)) ! We could use the EXFUN macro to handle prototype declarations, but ! the name is misleading and the result is ugly. So we just define a ! simple macro to handle the parameter lists, as in: ! static int foo PARAMS ((int, char)); ! This produces: `static int foo();' or `static int foo (int, char);' ! EXFUN would have done it like this: ! static int EXFUN (foo, (int, char)); - but the function is not external...and it's hard to visually parse - the function name out of the mess. EXFUN should be considered - obsolete; new code should be written to use PARAMS. ! DOTS is also obsolete. ! Examples: ! extern int printf PARAMS ((const char *format, ...)); ! */ #ifndef _ANSIDECL_H ! ! #define _ANSIDECL_H 1 ! /* Every source file includes this file, so they will all get the switch for lint. */ /* LINTLIBRARY */ #if defined (__STDC__) || defined (_AIX) || (defined (__mips) && defined (_SYSTYPE_SVR4)) || defined(_WIN32) /* All known AIX compilers implement these things (but don't always define __STDC__). The RISC/OS MIPS compiler defines these things in SVR4 mode, but does not define __STDC__. */ ! #define PTR void * ! #define PTRCONST void *CONST ! #define LONG_DOUBLE long double ! #ifndef IN_GCC ! #define AND , ! #define NOARGS void ! #define VOLATILE volatile ! #define SIGNED signed ! #endif /* ! IN_GCC */ ! #define PARAMS(paramlist) paramlist ! #define ANSI_PROTOTYPES 1 ! #define VPARAMS(ARGS) ARGS ! #define VA_START(va_list,var) va_start(va_list,var) /* These are obsolete. Do not use. */ #ifndef IN_GCC ! #define CONST const ! #define DOTS , ... #define PROTO(type, name, arglist) type name arglist #define EXFUN(name, proto) name proto #define DEFUN(name, arglist, args) name(args) #define DEFUN_VOID(name) name(void) #endif /* ! IN_GCC */ #else /* Not ANSI C. */ ! #define PTR char * ! #define PTRCONST PTR ! #define LONG_DOUBLE double ! ! #ifndef IN_GCC ! #define AND ; ! #define NOARGS ! #define VOLATILE ! #define SIGNED ! #endif /* !IN_GCC */ ! #ifndef const /* some systems define it in header files for non-ansi mode */ ! #define const ! #endif ! #define PARAMS(paramlist) () ! #define VPARAMS(ARGS) (va_alist) va_dcl ! #define VA_START(va_list,var) va_start(va_list) - /* These are obsolete. Do not use. */ #ifndef IN_GCC #define CONST ! #define DOTS #define PROTO(type, name, arglist) type name () #define EXFUN(name, proto) name() #define DEFUN(name, arglist, args) name arglist args; #define DEFUN_VOID(name) name() #endif /* ! IN_GCC */ #endif /* ANSI C. */ - - /* Using MACRO(x,y) in cpp #if conditionals does not work with some - older preprocessors. Thus we can't define something like this: - - #define HAVE_GCC_VERSION(MAJOR, MINOR) \ - (__GNUC__ > (MAJOR) || (__GNUC__ == (MAJOR) && __GNUC_MINOR__ >= (MINOR))) - - and then test "#if HAVE_GCC_VERSION(2,7)". - - So instead we use the macro below and test it against specific values. */ - - /* This macro simplifies testing whether we are using gcc, and if it - is of a particular minimum version. (Both major & minor numbers are - significant.) This macro will evaluate to 0 if we are not using - gcc at all. */ - #ifndef GCC_VERSION - #define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__) - #endif /* GCC_VERSION */ - /* Define macros for some gcc attributes. This permits us to use the macros freely, and know that they will come into play for the version of gcc in which they are supported. */ --- 21,236 ---- ANSI C is assumed if __STDC__ is #defined. ! Macro ANSI C definition Traditional C definition ! ----- ---- - ---------- ----------- - ---------- ! ANSI_PROTOTYPES 1 not defined ! PTR `void *' `char *' ! PTRCONST `void *const' `char *' ! LONG_DOUBLE `long double' `double' ! const not defined `' ! volatile not defined `' ! signed not defined `' ! VA_START(ap, var) va_start(ap, var) va_start(ap) ! Note that it is safe to write "void foo();" indicating a function ! with no return value, in all K+R compilers we have been able to test. ! For declaring functions with prototypes, we also provide these: ! PARAMS ((prototype)) ! -- for functions which take a fixed number of arguments. Use this ! when declaring the function. When defining the function, write a ! K+R style argument list. For example: ! char *strcpy PARAMS ((char *dest, char *source)); ! ... ! char * ! strcpy (dest, source) ! char *dest; ! char *source; ! { ... } ! VPARAMS ((prototype, ...)) ! -- for functions which take a variable number of arguments. Use ! PARAMS to declare the function, VPARAMS to define it. For example: ! int printf PARAMS ((const char *format, ...)); ! ... ! int ! printf VPARAMS ((const char *format, ...)) ! { ! ... ! } ! For writing functions which take variable numbers of arguments, we ! also provide the VA_OPEN, VA_CLOSE, and VA_FIXEDARG macros. These ! hide the differences between K+R and C89 more ! thoroughly than the simple VA_START() macro mentioned above. ! VA_OPEN and VA_CLOSE are used *instead of* va_start and va_end. ! Immediately after VA_OPEN, put a sequence of VA_FIXEDARG calls ! corresponding to the list of fixed arguments. Then use va_arg ! normally to get the variable arguments, or pass your va_list object ! around. You do not declare the va_list yourself; VA_OPEN does it ! for you. ! Here is a complete example: ! int ! printf VPARAMS ((const char *format, ...)) ! { ! int result; ! VA_OPEN (ap, format); ! VA_FIXEDARG (ap, const char *, format); ! result = vfprintf (stdout, format, ap); ! VA_CLOSE (ap); ! return result; ! } ! You can declare variables either before or after the VA_OPEN, ! VA_FIXEDARG sequence. Also, VA_OPEN and VA_CLOSE are the beginning ! and end of a block. They must appear at the same nesting level, ! and any variables declared after VA_OPEN go out of scope at ! VA_CLOSE. Unfortunately, with a K+R compiler, that includes the ! argument list. You can have multiple instances of VA_OPEN/VA_CLOSE ! pairs in a single function in case you need to traverse the ! argument list more than once. ! For ease of writing code which uses GCC extensions but needs to be ! portable to other compilers, we provide the GCC_VERSION macro that ! simplifies testing __GNUC__ and __GNUC_MINOR__ together, and various ! wrappers around __attribute__. Also, __extension__ will be #defined ! to nothing if it doesn't work. See below. ! This header also defines a lot of obsolete macros: ! CONST, VOLATILE, SIGNED, PROTO, EXFUN, DEFUN, DEFUN_VOID, ! AND, DOTS, NOARGS. Don't use them. */ #ifndef _ANSIDECL_H ! #define _ANSIDECL_H 1 /* Every source file includes this file, so they will all get the switch for lint. */ /* LINTLIBRARY */ + /* Using MACRO(x,y) in cpp #if conditionals does not work with some + older preprocessors. Thus we can't define something like this: + + #define HAVE_GCC_VERSION(MAJOR, MINOR) \ + (__GNUC__ > (MAJOR) || (__GNUC__ == (MAJOR) && __GNUC_MINOR__ >= (MINOR))) + + and then test "#if HAVE_GCC_VERSION(2,7)". + + So instead we use the macro below and test it against specific values. */ + + /* This macro simplifies testing whether we are using gcc, and if it + is of a particular minimum version. (Both major & minor numbers are + significant.) This macro will evaluate to 0 if we are not using + gcc at all. */ + #ifndef GCC_VERSION + #define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__) + #endif /* GCC_VERSION */ #if defined (__STDC__) || defined (_AIX) || (defined (__mips) && defined (_SYSTYPE_SVR4)) || defined(_WIN32) /* All known AIX compilers implement these things (but don't always define __STDC__). The RISC/OS MIPS compiler defines these things in SVR4 mode, but does not define __STDC__. */ ! #define ANSI_PROTOTYPES 1 ! #define PTR void * ! #define PTRCONST void *const ! #define LONG_DOUBLE long double ! #define PARAMS(ARGS) ARGS ! #define VPARAMS(ARGS) ARGS ! #define VA_START(VA_LIST, VAR) va_start(VA_LIST, VAR) ! /* variadic function helper macros */ ! /* "struct Qdmy" swallows the semicolon after VA_OPEN/VA_FIXEDARG's ! use without inhibiting further decls and without declaring an ! actual variable. */ ! #define VA_OPEN(AP, VAR) { va_list AP; va_start(AP, VAR); { struct Qdmy ! #define VA_CLOSE(AP) } va_end(AP); } ! #define VA_FIXEDARG(AP, T, N) struct Qdmy ! ! #undef const ! #undef volatile ! #undef signed ! /* inline requires special treatment; it's in C99, and GCC >=2.7 supports ! it too, but it's not in C89. */ ! #undef inline ! #if __STDC_VERSION__ > 199901L ! /* it's a keyword */ ! #else ! # if GCC_VERSION >= 2007 ! # define inline __inline__ /* __inline__ prevents -pedantic warnings */ ! # else ! # define inline /* nothing */ ! # endif ! #endif /* These are obsolete. Do not use. */ #ifndef IN_GCC ! #define CONST const ! #define VOLATILE volatile ! #define SIGNED signed ! #define PROTO(type, name, arglist) type name arglist #define EXFUN(name, proto) name proto #define DEFUN(name, arglist, args) name(args) #define DEFUN_VOID(name) name(void) + #define AND , + #define DOTS , ... + #define NOARGS void #endif /* ! IN_GCC */ #else /* Not ANSI C. */ ! #undef ANSI_PROTOTYPES ! #define PTR char * ! #define PTRCONST PTR ! #define LONG_DOUBLE double ! #define PARAMS(args) () ! #define VPARAMS(args) (va_alist) va_dcl ! #define VA_START(va_list, var) va_start(va_list) ! #define VA_OPEN(AP, VAR) { va_list AP; va_start(AP); { struct Qdmy ! #define VA_CLOSE(AP) } va_end(AP); } ! #define VA_FIXEDARG(AP, TYPE, NAME) TYPE NAME = va_arg(AP, TYPE) ! /* some systems define these in header files for non-ansi mode */ ! #undef const ! #undef volatile ! #undef signed ! #undef inline ! #define const ! #define volatile ! #define signed ! #define inline #ifndef IN_GCC #define CONST ! #define VOLATILE ! #define SIGNED ! #define PROTO(type, name, arglist) type name () #define EXFUN(name, proto) name() #define DEFUN(name, arglist, args) name arglist args; #define DEFUN_VOID(name) name() + #define AND ; + #define DOTS + #define NOARGS #endif /* ! IN_GCC */ #endif /* ANSI C. */ /* Define macros for some gcc attributes. This permits us to use the macros freely, and know that they will come into play for the version of gcc in which they are supported. */ *************** So instead we use the macro below and te *** 229,232 **** --- 281,295 ---- #define __extension__ #endif + /* Bootstrap support: Adjust certain macros defined by Autoconf, + which are only valid for the stage1 compiler. If we detect + a modern version of GCC, we are probably in stage2 or beyond, + so unconditionally reset the values. Note that const, inline, + etc. have been dealt with above. */ + #if (GCC_VERSION >= 2007) + # ifndef HAVE_LONG_DOUBLE + # define HAVE_LONG_DOUBLE 1 + # endif + #endif /* GCC >= 2.7 */ + #endif /* ansidecl.h */ diff -Nrc3pad gcc-3.0.4/include/demangle.h gcc-3.1/include/demangle.h *** gcc-3.0.4/include/demangle.h Tue May 8 06:21:15 2001 --- gcc-3.1/include/demangle.h Tue Feb 5 16:33:31 2002 *************** *** 1,5 **** /* Defs for interface to demanglers. ! Copyright 1992, 1995, 1996 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 --- 1,6 ---- /* Defs for interface to demanglers. ! Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001 ! 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 *************** *** 28,33 **** --- 29,36 ---- #define DMGL_PARAMS (1 << 0) /* Include function args */ #define DMGL_ANSI (1 << 1) /* Include const, volatile, etc */ #define DMGL_JAVA (1 << 2) /* Demangle as Java rather than C++. */ + #define DMGL_VERBOSE (1 << 3) /* Include implementation details. */ + #define DMGL_TYPES (1 << 4) /* Also try to demangle type encodings. */ #define DMGL_AUTO (1 << 8) #define DMGL_GNU (1 << 9) *************** *** 53,58 **** --- 56,62 ---- extern enum demangling_styles { + no_demangling = -1, unknown_demangling = 0, auto_demangling = DMGL_AUTO, gnu_demangling = DMGL_GNU, *************** extern enum demangling_styles *** 67,72 **** --- 71,77 ---- /* Define string names for the various demangling styles. */ + #define NO_DEMANGLING_STYLE_STRING "none" #define AUTO_DEMANGLING_STYLE_STRING "auto" #define GNU_DEMANGLING_STYLE_STRING "gnu" #define LUCID_DEMANGLING_STYLE_STRING "lucid" *************** extern enum demangling_styles *** 93,103 **** /* Provide information about the available demangle styles. This code is pulled from gdb into libiberty because it is useful to binutils also. */ ! extern struct demangler_engine { ! const char *demangling_style_name; ! enum demangling_styles demangling_style; ! const char *demangling_style_doc; } libiberty_demanglers[]; extern char * --- 98,108 ---- /* Provide information about the available demangle styles. This code is pulled from gdb into libiberty because it is useful to binutils also. */ ! extern const struct demangler_engine { ! const char *const demangling_style_name; ! const enum demangling_styles demangling_style; ! const char *const demangling_style_doc; } libiberty_demanglers[]; extern char * *************** cplus_demangle_name_to_style PARAMS ((co *** 122,128 **** /* V3 ABI demangling entry points, defined in cp-demangle.c. */ extern char* ! cplus_demangle_v3 PARAMS ((const char* mangled)); extern char* java_demangle_v3 PARAMS ((const char* mangled)); --- 127,133 ---- /* V3 ABI demangling entry points, defined in cp-demangle.c. */ extern char* ! cplus_demangle_v3 PARAMS ((const char* mangled, int options)); extern char* java_demangle_v3 PARAMS ((const char* mangled)); diff -Nrc3pad gcc-3.0.4/include/dyn-string.h gcc-3.1/include/dyn-string.h *** gcc-3.0.4/include/dyn-string.h Tue Sep 5 01:01:12 2000 --- gcc-3.1/include/dyn-string.h Mon Apr 1 22:08:49 2002 *************** *** 1,21 **** /* An abstract string datatype. ! Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. Contributed by Mark Mitchell (mark@markmitchell.com). ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 1,21 ---- /* An abstract string datatype. ! Copyright (C) 1998, 1999, 2000, 2002 Free Software Foundation, Inc. Contributed by Mark Mitchell (mark@markmitchell.com). ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ *************** typedef struct dyn_string *** 45,51 **** names in user programs, the functions that are used in the demangler are given implementation-reserved names. */ ! #ifdef IN_LIBGCC2 #define dyn_string_init __cxa_dyn_string_init #define dyn_string_new __cxa_dyn_string_new --- 45,51 ---- names in user programs, the functions that are used in the demangler are given implementation-reserved names. */ ! #if defined(IN_LIBGCC2) || defined(IN_GLIBCPP_V3) #define dyn_string_init __cxa_dyn_string_init #define dyn_string_new __cxa_dyn_string_new *************** typedef struct dyn_string *** 66,72 **** #define dyn_string_substring __cxa_dyn_string_substring #define dyn_string_eq __cxa_dyn_string_eq ! #endif /* IN_LIBGCC2 */ extern int dyn_string_init PARAMS ((struct dyn_string *, int)); --- 66,72 ---- #define dyn_string_substring __cxa_dyn_string_substring #define dyn_string_eq __cxa_dyn_string_eq ! #endif /* IN_LIBGCC2 || IN_GLIBCPP_V3 */ extern int dyn_string_init PARAMS ((struct dyn_string *, int)); diff -Nrc3pad gcc-3.0.4/include/fibheap.h gcc-3.1/include/fibheap.h *** gcc-3.0.4/include/fibheap.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/include/fibheap.h Thu Aug 23 12:07:58 2001 *************** *** 0 **** --- 1,81 ---- + /* A Fibonacci heap datatype. + Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc. + Contributed by Daniel Berlin (dan@cgsoftware.com). + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GCC is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + /* Fibonacci heaps are somewhat complex, but, there's an article in + DDJ that explains them pretty well: + + http://www.ddj.com/articles/1997/9701/9701o/9701o.htm?topic=algoritms + + Introduction to algorithms by Corman and Rivest also goes over them. + + The original paper that introduced them is "Fibonacci heaps and their + uses in improved network optimization algorithms" by Tarjan and + Fredman (JACM 34(3), July 1987). + + Amortized and real worst case time for operations: + + ExtractMin: O(lg n) amortized. O(n) worst case. + DecreaseKey: O(1) amortized. O(lg n) worst case. + Insert: O(2) amortized. O(1) actual. + Union: O(1) amortized. O(1) actual. */ + + #ifndef _FIBHEAP_H_ + #define _FIBHEAP_H_ + + #include + + typedef long fibheapkey_t; + + typedef struct fibheap + { + size_t nodes; + struct fibnode *min; + struct fibnode *root; + } *fibheap_t; + + typedef struct fibnode + { + struct fibnode *parent; + struct fibnode *child; + struct fibnode *left; + struct fibnode *right; + fibheapkey_t key; + void *data; + unsigned int degree : 31; + unsigned int mark : 1; + } *fibnode_t; + + extern fibheap_t fibheap_new PARAMS ((void)); + extern fibnode_t fibheap_insert PARAMS ((fibheap_t, fibheapkey_t, void *)); + extern int fibheap_empty PARAMS ((fibheap_t)); + extern fibheapkey_t fibheap_min_key PARAMS ((fibheap_t)); + extern fibheapkey_t fibheap_replace_key PARAMS ((fibheap_t, fibnode_t, + fibheapkey_t)); + extern void *fibheap_replace_key_data PARAMS ((fibheap_t, fibnode_t, + fibheapkey_t, void *)); + extern void *fibheap_extract_min PARAMS ((fibheap_t)); + extern void *fibheap_min PARAMS ((fibheap_t)); + extern void *fibheap_replace_data PARAMS ((fibheap_t, fibnode_t, void *)); + extern void *fibheap_delete_node PARAMS ((fibheap_t, fibnode_t)); + extern void fibheap_delete PARAMS ((fibheap_t)); + extern fibheap_t fibheap_union PARAMS ((fibheap_t, fibheap_t)); + + #endif /* _FIBHEAP_H_ */ diff -Nrc3pad gcc-3.0.4/include/floatformat.h gcc-3.1/include/floatformat.h *** gcc-3.0.4/include/floatformat.h Wed May 31 11:00:54 2000 --- gcc-3.1/include/floatformat.h Tue Aug 21 00:09:07 2001 *************** *** 1,5 **** /* IEEE floating point support declarations, for GDB, the GNU Debugger. ! Copyright (C) 1991, 2000 Free Software Foundation, Inc. This file is part of GDB. --- 1,5 ---- /* IEEE floating point support declarations, for GDB, the GNU Debugger. ! Copyright 1991, 1994, 1995, 1997, 2000 Free Software Foundation, Inc. This file is part of GDB. *************** extern const struct floatformat floatfor *** 95,101 **** extern const struct floatformat floatformat_m68881_ext; extern const struct floatformat floatformat_i960_ext; extern const struct floatformat floatformat_m88110_ext; ! extern const struct floatformat floatformat_arm_ext; /* Convert from FMT to a double. FROM is the address of the extended float. --- 95,109 ---- extern const struct floatformat floatformat_m68881_ext; extern const struct floatformat floatformat_i960_ext; extern const struct floatformat floatformat_m88110_ext; ! extern const struct floatformat floatformat_m88110_harris_ext; ! extern const struct floatformat floatformat_arm_ext; /* deprecated. */ ! extern const struct floatformat floatformat_arm_ext_big; ! extern const struct floatformat floatformat_arm_ext_littlebyte_bigword; ! /* IA-64 Floating Point register spilt into memory. */ ! extern const struct floatformat floatformat_ia64_spill_big; ! extern const struct floatformat floatformat_ia64_spill_little; ! extern const struct floatformat floatformat_ia64_quad_big; ! extern const struct floatformat floatformat_ia64_quad_little; /* Convert from FMT to a double. FROM is the address of the extended float. diff -Nrc3pad gcc-3.0.4/include/fnmatch.h gcc-3.1/include/fnmatch.h *** gcc-3.0.4/include/fnmatch.h Mon Jan 11 13:51:09 1999 --- gcc-3.1/include/fnmatch.h Wed Mar 14 19:44:38 2001 *************** *** 1,4 **** ! /* Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. --- 1,4 ---- ! /* Copyright 1991, 1992, 1993, 1996 Free Software Foundation, Inc. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. diff -Nrc3pad gcc-3.0.4/include/getopt.h gcc-3.1/include/getopt.h *** gcc-3.0.4/include/getopt.h Thu Dec 7 01:54:13 2000 --- gcc-3.1/include/getopt.h Wed Mar 14 19:44:38 2001 *************** *** 1,5 **** /* Declarations for getopt. ! Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997 Free Software Foundation, Inc. NOTE: The canonical source of this file is maintained with the GNU C Library. --- 1,5 ---- /* Declarations for getopt. ! Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997, 1998, 2000 Free Software Foundation, Inc. NOTE: The canonical source of this file is maintained with the GNU C Library. diff -Nrc3pad gcc-3.0.4/include/hashtab.h gcc-3.1/include/hashtab.h *** gcc-3.0.4/include/hashtab.h Sat Nov 4 07:35:33 2000 --- gcc-3.1/include/hashtab.h Fri Aug 17 01:54:01 2001 *************** extern htab_hash htab_hash_pointer; *** 145,150 **** --- 145,153 ---- /* An equality function for pointers. */ extern htab_eq htab_eq_pointer; + /* A hash function for null-terminated strings. */ + extern hashval_t htab_hash_string PARAMS ((const PTR)); + #ifdef __cplusplus } #endif /* __cplusplus */ diff -Nrc3pad gcc-3.0.4/include/libiberty.h gcc-3.1/include/libiberty.h *** gcc-3.0.4/include/libiberty.h Sat Mar 24 21:53:38 2001 --- gcc-3.1/include/libiberty.h Mon Jan 28 21:08:34 2002 *************** *** 1,4 **** --- 1,29 ---- /* Function declarations for libiberty. + + Copyright 2001, 2002 Free Software Foundation, Inc. + + Note - certain prototypes declared in this header file are for + functions whoes implementation copyright does not belong to the + FSF. Those prototypes are present in this file for reference + purposes only and their presence in this file should not construed + as an indication of ownership by the FSF of the implementation of + those functions in any way or form whatsoever. + + 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, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + Written by Cygnus Support, 1994. The libiberty library provides a number of functions which are *************** extern "C" { *** 26,32 **** /* Build an argument vector from a string. Allocates memory using malloc. Use freeargv to free the vector. */ ! extern char **buildargv PARAMS ((char *)) ATTRIBUTE_MALLOC; /* Free a vector returned by buildargv. */ --- 51,57 ---- /* Build an argument vector from a string. Allocates memory using malloc. Use freeargv to free the vector. */ ! extern char **buildargv PARAMS ((const char *)) ATTRIBUTE_MALLOC; /* Free a vector returned by buildargv. */ *************** extern char *basename (); *** 58,70 **** /* A well-defined basename () that is always compiled in. */ ! extern char *lbasename PARAMS ((const char *)); ! /* Concatenate an arbitrary number of strings, up to (char *) NULL. ! Allocates memory using xmalloc. */ extern char *concat PARAMS ((const char *, ...)) ATTRIBUTE_MALLOC; /* Check whether two file descriptors refer to the same file. */ extern int fdmatch PARAMS ((int fd1, int fd2)); --- 83,137 ---- /* A well-defined basename () that is always compiled in. */ ! extern const char *lbasename PARAMS ((const char *)); ! /* Concatenate an arbitrary number of strings. You must pass NULL as ! the last argument of this function, to terminate the list of ! strings. Allocates memory using xmalloc. */ extern char *concat PARAMS ((const char *, ...)) ATTRIBUTE_MALLOC; + /* Concatenate an arbitrary number of strings. You must pass NULL as + the last argument of this function, to terminate the list of + strings. Allocates memory using xmalloc. The first argument is + not one of the strings to be concatenated, but if not NULL is a + pointer to be freed after the new string is created, similar to the + way xrealloc works. */ + + extern char *reconcat PARAMS ((char *, const char *, ...)) ATTRIBUTE_MALLOC; + + /* Determine the length of concatenating an arbitrary number of + strings. You must pass NULL as the last argument of this function, + to terminate the list of strings. */ + + extern unsigned long concat_length PARAMS ((const char *, ...)); + + /* Concatenate an arbitrary number of strings into a SUPPLIED area of + memory. You must pass NULL as the last argument of this function, + to terminate the list of strings. The supplied memory is assumed + to be large enough. */ + + extern char *concat_copy PARAMS ((char *, const char *, ...)); + + /* Concatenate an arbitrary number of strings into a GLOBAL area of + memory. You must pass NULL as the last argument of this function, + to terminate the list of strings. The supplied memory is assumed + to be large enough. */ + + extern char *concat_copy2 PARAMS ((const char *, ...)); + + /* This is the global area used by concat_copy2. */ + + extern char *libiberty_concat_ptr; + + /* Concatenate an arbitrary number of strings. You must pass NULL as + the last argument of this function, to terminate the list of + strings. Allocates memory using alloca. The arguments are + evaluated twice! */ + #define ACONCAT(ACONCAT_PARAMS) \ + (libiberty_concat_ptr = alloca (concat_length ACONCAT_PARAMS + 1), \ + concat_copy2 ACONCAT_PARAMS) + /* Check whether two file descriptors refer to the same file. */ extern int fdmatch PARAMS ((int fd1, int fd2)); *************** extern PTR xmemdup PARAMS ((const PTR, s *** 173,179 **** #define _hex_array_size 256 #define _hex_bad 99 ! extern char _hex_value[_hex_array_size]; extern void hex_init PARAMS ((void)); #define hex_p(c) (hex_value (c) != _hex_bad) /* If you change this, note well: Some code relies on side effects in --- 240,246 ---- #define _hex_array_size 256 #define _hex_bad 99 ! extern const char _hex_value[_hex_array_size]; extern void hex_init PARAMS ((void)); #define hex_p(c) (hex_value (c) != _hex_bad) /* If you change this, note well: Some code relies on side effects in *************** extern int vasprintf PARAMS ((char **, c *** 210,215 **** --- 277,314 ---- #define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0])) + /* Drastically simplified alloca configurator. If we're using GCC, + we use __builtin_alloca; otherwise we use the C alloca. The C + alloca is always available. You can override GCC by defining + USE_C_ALLOCA yourself. The canonical autoconf macro C_ALLOCA is + also set/unset as it is often used to indicate whether code needs + to call alloca(0). */ + extern PTR C_alloca PARAMS ((size_t)) ATTRIBUTE_MALLOC; + #undef alloca + #if GCC_VERSION >= 2000 && !defined USE_C_ALLOCA + # define alloca(x) __builtin_alloca(x) + # undef C_ALLOCA + # define ASTRDUP(X) \ + (__extension__ ({ const char *const libiberty_optr = (X); \ + const unsigned long libiberty_len = strlen (libiberty_optr) + 1; \ + char *const libiberty_nptr = alloca (libiberty_len); \ + (char *) memcpy (libiberty_nptr, libiberty_optr, libiberty_len); })) + #else + # define alloca(x) C_alloca(x) + # undef USE_C_ALLOCA + # define USE_C_ALLOCA 1 + # undef C_ALLOCA + # define C_ALLOCA 1 + extern const char *libiberty_optr; + extern char *libiberty_nptr; + extern unsigned long libiberty_len; + # define ASTRDUP(X) \ + (libiberty_optr = (X), \ + libiberty_len = strlen (libiberty_optr) + 1, \ + libiberty_nptr = alloca (libiberty_len), \ + (char *) memcpy (libiberty_nptr, libiberty_optr, libiberty_len)) + #endif + #ifdef __cplusplus } #endif diff -Nrc3pad gcc-3.0.4/include/md5.h gcc-3.1/include/md5.h *** gcc-3.0.4/include/md5.h Wed Sep 6 06:10:12 2000 --- gcc-3.1/include/md5.h Wed Mar 14 19:44:38 2001 *************** *** 1,6 **** /* md5.h - Declaration of functions and data types used for MD5 sum computing library functions. ! Copyright (C) 1995, 1996 Free Software Foundation, Inc. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. --- 1,6 ---- /* md5.h - Declaration of functions and data types used for MD5 sum computing library functions. ! Copyright 1995, 1996, 2000 Free Software Foundation, Inc. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. diff -Nrc3pad gcc-3.0.4/include/objalloc.h gcc-3.1/include/objalloc.h *** gcc-3.0.4/include/objalloc.h Mon Jan 11 13:51:10 1999 --- gcc-3.1/include/objalloc.h Tue Sep 18 13:39:40 2001 *************** *** 1,5 **** /* objalloc.h -- routines to allocate memory for objects ! Copyright 1997 Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Solutions. This program is free software; you can redistribute it and/or modify it --- 1,5 ---- /* objalloc.h -- routines to allocate memory for objects ! Copyright 1997, 2001 Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Solutions. This program is free software; you can redistribute it and/or modify it *************** struct objalloc_align { char x; double d *** 56,67 **** #ifndef offsetof #include #endif - #define OBJALLOC_ALIGN \ - ((ptrdiff_t) ((char *) &((struct objalloc_align *) 0)->d - (char *) 0)) - #else - #define OBJALLOC_ALIGN \ - ((long) ((char *) &((struct objalloc_align *) 0)->d - (char *) 0)) #endif /* Create an objalloc structure. Returns NULL if malloc fails. */ --- 56,66 ---- #ifndef offsetof #include #endif #endif + #ifndef offsetof + #define offsetof(TYPE, MEMBER) ((unsigned long) &((TYPE *)0)->MEMBER) + #endif + #define OBJALLOC_ALIGN offsetof (struct objalloc_align, d) /* Create an objalloc structure. Returns NULL if malloc fails. */ diff -Nrc3pad gcc-3.0.4/include/obstack.h gcc-3.1/include/obstack.h *** gcc-3.0.4/include/obstack.h Thu Dec 7 01:54:13 2000 --- gcc-3.1/include/obstack.h Wed Mar 14 19:44:38 2001 *************** *** 1,5 **** /* obstack.h - object stack macros ! Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997, 1998 Free Software Foundation, Inc. --- 1,6 ---- /* obstack.h - object stack macros ! Copyright 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997, 1998, ! 1999, 2000 Free Software Foundation, Inc. diff -Nrc3pad gcc-3.0.4/include/partition.h gcc-3.1/include/partition.h *** gcc-3.0.4/include/partition.h Fri Mar 10 08:16:55 2000 --- gcc-3.1/include/partition.h Thu Aug 23 12:07:58 2001 *************** *** 1,21 **** ! /* List implentation of a partition of consecutive integers. ! Copyright (C) 2000 Free Software Foundation, Inc. Contributed by CodeSourcery, LLC. ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 1,21 ---- ! /* List implementation of a partition of consecutive integers. ! Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by CodeSourcery, LLC. ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff -Nrc3pad gcc-3.0.4/include/safe-ctype.h gcc-3.1/include/safe-ctype.h *** gcc-3.0.4/include/safe-ctype.h Fri Mar 2 00:05:01 2001 --- gcc-3.1/include/safe-ctype.h Wed Oct 24 19:29:16 2001 *************** enum { *** 63,69 **** _sch_isalnum = _sch_isalpha|_sch_isdigit, /* A-Za-z0-9 */ _sch_isidnum = _sch_isidst|_sch_isdigit, /* A-Za-z0-9_ */ _sch_isgraph = _sch_isalnum|_sch_ispunct, /* isprint and not space */ ! _sch_iscppsp = _sch_isvsp|_sch_isnvsp /* isspace + \0 */ }; /* Character classification. */ --- 63,71 ---- _sch_isalnum = _sch_isalpha|_sch_isdigit, /* A-Za-z0-9 */ _sch_isidnum = _sch_isidst|_sch_isdigit, /* A-Za-z0-9_ */ _sch_isgraph = _sch_isalnum|_sch_ispunct, /* isprint and not space */ ! _sch_iscppsp = _sch_isvsp|_sch_isnvsp, /* isspace + \0 */ ! _sch_isbasic = _sch_isprint|_sch_iscppsp /* basic charset of ISO C ! (plus ` and @) */ }; /* Character classification. */ *************** extern const unsigned short _sch_istable *** 86,91 **** --- 88,94 ---- #define ISIDNUM(c) _sch_test(c, _sch_isidnum) #define ISIDST(c) _sch_test(c, _sch_isidst) + #define IS_ISOBASIC(c) _sch_test(c, _sch_isbasic) #define IS_VSPACE(c) _sch_test(c, _sch_isvsp) #define IS_NVSPACE(c) _sch_test(c, _sch_isnvsp) #define IS_SPACE_OR_NUL(c) _sch_test(c, _sch_iscppsp) diff -Nrc3pad gcc-3.0.4/include/sort.h gcc-3.1/include/sort.h *** gcc-3.0.4/include/sort.h Thu May 4 15:40:25 2000 --- gcc-3.1/include/sort.h Thu Aug 23 12:07:58 2001 *************** *** 2,21 **** Copyright (C) 2000 Free Software Foundation, Inc. Contributed by Mark Mitchell . ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 2,21 ---- Copyright (C) 2000 Free Software Foundation, Inc. Contributed by Mark Mitchell . ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ diff -Nrc3pad gcc-3.0.4/include/splay-tree.h gcc-3.1/include/splay-tree.h *** gcc-3.0.4/include/splay-tree.h Mon May 7 15:40:47 2001 --- gcc-3.1/include/splay-tree.h Fri Feb 22 17:01:20 2002 *************** *** 1,21 **** /* A splay-tree datatype. ! Copyright (C) 1998, 2000, 2001 Free Software Foundation, Inc. Contributed by Mark Mitchell (mark@markmitchell.com). ! This file is part of GNU CC. ! GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ --- 1,21 ---- /* A splay-tree datatype. ! Copyright 1998, 1999, 2000 Free Software Foundation, Inc. Contributed by Mark Mitchell (mark@markmitchell.com). ! This file is part of GCC. ! GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ! GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ *************** typedef void (*splay_tree_delete_value_f *** 61,66 **** --- 61,78 ---- /* The type of a function used to iterate over the tree. */ typedef int (*splay_tree_foreach_fn) PARAMS((splay_tree_node, void*)); + /* The type of a function used to allocate memory for tree root and + node structures. The first argument is the number of bytes needed; + the second is a data pointer the splay tree functions pass through + to the allocator. This function must never return zero. */ + typedef void *(*splay_tree_allocate_fn) PARAMS((int, void *)); + + /* The type of a function used to free memory allocated using the + corresponding splay_tree_allocate_fn. The first argument is the + memory to be freed; the latter is a data pointer the splay tree + functions pass through to the freer. */ + typedef void (*splay_tree_deallocate_fn) PARAMS((void *, void *)); + /* The nodes in the splay tree. */ struct splay_tree_node_s { *************** typedef struct splay_tree_s *** 89,99 **** --- 101,124 ---- /* The deallocate-value function. NULL if no cleanup is necessary. */ splay_tree_delete_value_fn delete_value; + + /* Allocate/free functions, and a data pointer to pass to them. */ + splay_tree_allocate_fn allocate; + splay_tree_deallocate_fn deallocate; + void *allocate_data; + } *splay_tree; extern splay_tree splay_tree_new PARAMS((splay_tree_compare_fn, splay_tree_delete_key_fn, splay_tree_delete_value_fn)); + extern splay_tree splay_tree_new_with_allocator + PARAMS((splay_tree_compare_fn, + splay_tree_delete_key_fn, + splay_tree_delete_value_fn, + splay_tree_allocate_fn, + splay_tree_deallocate_fn, + void *)); extern void splay_tree_delete PARAMS((splay_tree)); extern splay_tree_node splay_tree_insert PARAMS((splay_tree, diff -Nrc3pad gcc-3.0.4/include/ternary.h gcc-3.1/include/ternary.h *** gcc-3.0.4/include/ternary.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/include/ternary.h Tue May 8 06:13:58 2001 *************** *** 0 **** --- 1,51 ---- + /* ternary.h - Ternary Search Trees + Copyright 2001 Free Software Foundation, Inc. + + Contributed by Daniel Berlin (dan@cgsoftware.com) + + + 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, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + #ifndef TERNARY_H_ + #define TERNARY_H_ + /* Ternary search trees */ + + typedef struct ternary_node_def *ternary_tree; + + typedef struct ternary_node_def + { + char splitchar; + ternary_tree lokid; + ternary_tree eqkid; + ternary_tree hikid; + } + ternary_node; + + /* Insert string S into tree P, associating it with DATA. + Return the data in the tree associated with the string if it's + already there, and replace is 0. + Otherwise, replaces if it it exists, inserts if it doesn't, and + returns the data you passed in. */ + PTR ternary_insert PARAMS ((ternary_tree *p, const char *s, + PTR data, int replace)); + + /* Delete the ternary search tree rooted at P. + Does NOT delete the data you associated with the strings. */ + void ternary_cleanup PARAMS ((ternary_tree p)); + + /* Search the ternary tree for string S, returning the data associated + with it if found. */ + PTR ternary_search PARAMS ((const ternary_node *p, const char *s)); + #endif diff -Nrc3pad gcc-3.0.4/include/xregex.h gcc-3.1/include/xregex.h *** gcc-3.0.4/include/xregex.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/include/xregex.h Thu Aug 2 23:23:47 2001 *************** *** 0 **** --- 1,28 ---- + /* This file redefines all regex external names before including + a renamed copy of glibc's regex.h. */ + + #ifndef _XREGEX_H + #define _XREGEX_H 1 + + # define regfree xregfree + # define regexec xregexec + # define regcomp xregcomp + # define regerror xregerror + # define re_set_registers xre_set_registers + # define re_match_2 xre_match_2 + # define re_match xre_match + # define re_search xre_search + # define re_compile_pattern xre_compile_pattern + # define re_set_syntax xre_set_syntax + # define re_search_2 xre_search_2 + # define re_compile_fastmap xre_compile_fastmap + # define re_syntax_options xre_syntax_options + # define re_max_failures xre_max_failures + + # define _REGEX_RE_COMP + # define re_comp xre_comp + # define re_exec xre_exec + + #include "xregex2.h" + + #endif /* xregex.h */ diff -Nrc3pad gcc-3.0.4/include/xregex2.h gcc-3.1/include/xregex2.h *** gcc-3.0.4/include/xregex2.h Thu Jan 1 00:00:00 1970 --- gcc-3.1/include/xregex2.h Wed Apr 17 00:11:58 2002 *************** *** 0 **** --- 1,571 ---- + /* Definitions for data structures and routines for the regular + expression library, version 0.12. + Copyright (C) 1985,1989-1993,1995-1998, 2000 Free Software Foundation, Inc. + This file is part of the GNU C Library. Its master source is NOT part of + the C library, however. The master source lives in /gd/gnu/lib. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + + #ifndef _REGEX_H + #define _REGEX_H 1 + + /* Allow the use in C++ code. */ + #ifdef __cplusplus + extern "C" { + #endif + + /* POSIX says that must be included (by the caller) before + . */ + + #if !defined _POSIX_C_SOURCE && !defined _POSIX_SOURCE && defined VMS + /* VMS doesn't have `size_t' in , even though POSIX says it + should be there. */ + # include + #endif + + /* The following two types have to be signed and unsigned integer type + wide enough to hold a value of a pointer. For most ANSI compilers + ptrdiff_t and size_t should be likely OK. Still size of these two + types is 2 for Microsoft C. Ugh... */ + typedef long int s_reg_t; + typedef unsigned long int active_reg_t; + + /* The following bits are used to determine the regexp syntax we + recognize. The set/not-set meanings are chosen so that Emacs syntax + remains the value 0. The bits are given in alphabetical order, and + the definitions shifted by one from the previous bit; thus, when we + add or remove a bit, only one other definition need change. */ + typedef unsigned long int reg_syntax_t; + + /* If this bit is not set, then \ inside a bracket expression is literal. + If set, then such a \ quotes the following character. */ + #define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long int) 1) + + /* If this bit is not set, then + and ? are operators, and \+ and \? are + literals. + If set, then \+ and \? are operators and + and ? are literals. */ + #define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1) + + /* If this bit is set, then character classes are supported. They are: + [:alpha:], [:upper:], [:lower:], [:digit:], [:alnum:], [:xdigit:], + [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:]. + If not set, then character classes are not supported. */ + #define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1) + + /* If this bit is set, then ^ and $ are always anchors (outside bracket + expressions, of course). + If this bit is not set, then it depends: + ^ is an anchor if it is at the beginning of a regular + expression or after an open-group or an alternation operator; + $ is an anchor if it is at the end of a regular expression, or + before a close-group or an alternation operator. + + This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because + POSIX draft 11.2 says that * etc. in leading positions is undefined. + We already implemented a previous draft which made those constructs + invalid, though, so we haven't changed the code back. */ + #define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1) + + /* If this bit is set, then special characters are always special + regardless of where they are in the pattern. + If this bit is not set, then special characters are special only in + some contexts; otherwise they are ordinary. Specifically, + * + ? and intervals are only special when not after the beginning, + open-group, or alternation operator. */ + #define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1) + + /* If this bit is set, then *, +, ?, and { cannot be first in an re or + immediately after an alternation or begin-group operator. */ + #define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1) + + /* If this bit is set, then . matches newline. + If not set, then it doesn't. */ + #define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1) + + /* If this bit is set, then . doesn't match NUL. + If not set, then it does. */ + #define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1) + + /* If this bit is set, nonmatching lists [^...] do not match newline. + If not set, they do. */ + #define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1) + + /* If this bit is set, either \{...\} or {...} defines an + interval, depending on RE_NO_BK_BRACES. + If not set, \{, \}, {, and } are literals. */ + #define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1) + + /* If this bit is set, +, ? and | aren't recognized as operators. + If not set, they are. */ + #define RE_LIMITED_OPS (RE_INTERVALS << 1) + + /* If this bit is set, newline is an alternation operator. + If not set, newline is literal. */ + #define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1) + + /* If this bit is set, then `{...}' defines an interval, and \{ and \} + are literals. + If not set, then `\{...\}' defines an interval. */ + #define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1) + + /* If this bit is set, (...) defines a group, and \( and \) are literals. + If not set, \(...\) defines a group, and ( and ) are literals. */ + #define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1) + + /* If this bit is set, then \ matches . + If not set, then \ is a back-reference. */ + #define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1) + + /* If this bit is set, then | is an alternation operator, and \| is literal. + If not set, then \| is an alternation operator, and | is literal. */ + #define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1) + + /* If this bit is set, then an ending range point collating higher + than the starting range point, as in [z-a], is invalid. + If not set, then when ending range point collates higher than the + starting range point, the range is ignored. */ + #define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1) + + /* If this bit is set, then an unmatched ) is ordinary. + If not set, then an unmatched ) is invalid. */ + #define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1) + + /* If this bit is set, succeed as soon as we match the whole pattern, + without further backtracking. */ + #define RE_NO_POSIX_BACKTRACKING (RE_UNMATCHED_RIGHT_PAREN_ORD << 1) + + /* If this bit is set, do not process the GNU regex operators. + If not set, then the GNU regex operators are recognized. */ + #define RE_NO_GNU_OPS (RE_NO_POSIX_BACKTRACKING << 1) + + /* If this bit is set, turn on internal regex debugging. + If not set, and debugging was on, turn it off. + This only works if regex.c is compiled -DDEBUG. + We define this bit always, so that all that's needed to turn on + debugging is to recompile regex.c; the calling code can always have + this bit set, and it won't affect anything in the normal case. */ + #define RE_DEBUG (RE_NO_GNU_OPS << 1) + + /* If this bit is set, a syntactically invalid interval is treated as + a string of ordinary characters. For example, the ERE 'a{1' is + treated as 'a\{1'. */ + #define RE_INVALID_INTERVAL_ORD (RE_DEBUG << 1) + + /* This global variable defines the particular regexp syntax to use (for + some interfaces). When a regexp is compiled, the syntax used is + stored in the pattern buffer, so changing this does not affect + already-compiled regexps. */ + extern reg_syntax_t re_syntax_options; + + /* Define combinations of the above bits for the standard possibilities. + (The [[[ comments delimit what gets put into the Texinfo file, so + don't delete them!) */ + /* [[[begin syntaxes]]] */ + #define RE_SYNTAX_EMACS 0 + + #define RE_SYNTAX_AWK \ + (RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DOT_NOT_NULL \ + | RE_NO_BK_PARENS | RE_NO_BK_REFS \ + | RE_NO_BK_VBAR | RE_NO_EMPTY_RANGES \ + | RE_DOT_NEWLINE | RE_CONTEXT_INDEP_ANCHORS \ + | RE_UNMATCHED_RIGHT_PAREN_ORD | RE_NO_GNU_OPS) + + #define RE_SYNTAX_GNU_AWK \ + ((RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DEBUG) \ + & ~(RE_DOT_NOT_NULL | RE_INTERVALS | RE_CONTEXT_INDEP_OPS)) + + #define RE_SYNTAX_POSIX_AWK \ + (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS \ + | RE_INTERVALS | RE_NO_GNU_OPS) + + #define RE_SYNTAX_GREP \ + (RE_BK_PLUS_QM | RE_CHAR_CLASSES \ + | RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS \ + | RE_NEWLINE_ALT) + + #define RE_SYNTAX_EGREP \ + (RE_CHAR_CLASSES | RE_CONTEXT_INDEP_ANCHORS \ + | RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE \ + | RE_NEWLINE_ALT | RE_NO_BK_PARENS \ + | RE_NO_BK_VBAR) + + #define RE_SYNTAX_POSIX_EGREP \ + (RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES \ + | RE_INVALID_INTERVAL_ORD) + + /* P1003.2/D11.2, section 4.20.7.1, lines 5078ff. */ + #define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC + + #define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC + + /* Syntax bits common to both basic and extended POSIX regex syntax. */ + #define _RE_SYNTAX_POSIX_COMMON \ + (RE_CHAR_CLASSES | RE_DOT_NEWLINE | RE_DOT_NOT_NULL \ + | RE_INTERVALS | RE_NO_EMPTY_RANGES) + + #define RE_SYNTAX_POSIX_BASIC \ + (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM) + + /* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes + RE_LIMITED_OPS, i.e., \? \+ \| are not recognized. Actually, this + isn't minimal, since other operators, such as \`, aren't disabled. */ + #define RE_SYNTAX_POSIX_MINIMAL_BASIC \ + (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS) + + #define RE_SYNTAX_POSIX_EXTENDED \ + (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ + | RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES \ + | RE_NO_BK_PARENS | RE_NO_BK_VBAR \ + | RE_CONTEXT_INVALID_OPS | RE_UNMATCHED_RIGHT_PAREN_ORD) + + /* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INDEP_OPS is + removed and RE_NO_BK_REFS is added. */ + #define RE_SYNTAX_POSIX_MINIMAL_EXTENDED \ + (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ + | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES \ + | RE_NO_BK_PARENS | RE_NO_BK_REFS \ + | RE_NO_BK_VBAR | RE_UNMATCHED_RIGHT_PAREN_ORD) + /* [[[end syntaxes]]] */ + + /* Maximum number of duplicates an interval can allow. Some systems + (erroneously) define this in other header files, but we want our + value, so remove any previous define. */ + #ifdef RE_DUP_MAX + # undef RE_DUP_MAX + #endif + /* If sizeof(int) == 2, then ((1 << 15) - 1) overflows. */ + #define RE_DUP_MAX (0x7fff) + + + /* POSIX `cflags' bits (i.e., information for `regcomp'). */ + + /* If this bit is set, then use extended regular expression syntax. + If not set, then use basic regular expression syntax. */ + #define REG_EXTENDED 1 + + /* If this bit is set, then ignore case when matching. + If not set, then case is significant. */ + #define REG_ICASE (REG_EXTENDED << 1) + + /* If this bit is set, then anchors do not match at newline + characters in the string. + If not set, then anchors do match at newlines. */ + #define REG_NEWLINE (REG_ICASE << 1) + + /* If this bit is set, then report only success or fail in regexec. + If not set, then returns differ between not matching and errors. */ + #define REG_NOSUB (REG_NEWLINE << 1) + + + /* POSIX `eflags' bits (i.e., information for regexec). */ + + /* If this bit is set, then the beginning-of-line operator doesn't match + the beginning of the string (presumably because it's not the + beginning of a line). + If not set, then the beginning-of-line operator does match the + beginning of the string. */ + #define REG_NOTBOL 1 + + /* Like REG_NOTBOL, except for the end-of-line. */ + #define REG_NOTEOL (1 << 1) + + + /* If any error codes are removed, changed, or added, update the + `re_error_msg' table in regex.c. */ + typedef enum + { + #ifdef _XOPEN_SOURCE + REG_ENOSYS = -1, /* This will never happen for this implementation. */ + #endif + + REG_NOERROR = 0, /* Success. */ + REG_NOMATCH, /* Didn't find a match (for regexec). */ + + /* POSIX regcomp return error codes. (In the order listed in the + standard.) */ + REG_BADPAT, /* Invalid pattern. */ + REG_ECOLLATE, /* Not implemented. */ + REG_ECTYPE, /* Invalid character class name. */ + REG_EESCAPE, /* Trailing backslash. */ + REG_ESUBREG, /* Invalid back reference. */ + REG_EBRACK, /* Unmatched left bracket. */ + REG_EPAREN, /* Parenthesis imbalance. */ + REG_EBRACE, /* Unmatched \{. */ + REG_BADBR, /* Invalid contents of \{\}. */ + REG_ERANGE, /* Invalid range end. */ + REG_ESPACE, /* Ran out of memory. */ + REG_BADRPT, /* No preceding re for repetition op. */ + + /* Error codes we've added. */ + REG_EEND, /* Premature end. */ + REG_ESIZE, /* Compiled pattern bigger than 2^16 bytes. */ + REG_ERPAREN /* Unmatched ) or \); not returned from regcomp. */ + } reg_errcode_t; + + /* This data structure represents a compiled pattern. Before calling + the pattern compiler, the fields `buffer', `allocated', `fastmap', + `translate', and `no_sub' can be set. After the pattern has been + compiled, the `re_nsub' field is available. All other fields are + private to the regex routines. */ + + #ifndef RE_TRANSLATE_TYPE + # define RE_TRANSLATE_TYPE char * + #endif + + struct re_pattern_buffer + { + /* [[[begin pattern_buffer]]] */ + /* Space that holds the compiled pattern. It is declared as + `unsigned char *' because its elements are + sometimes used as array indexes. */ + unsigned char *buffer; + + /* Number of bytes to which `buffer' points. */ + unsigned long int allocated; + + /* Number of bytes actually used in `buffer'. */ + unsigned long int used; + + /* Syntax setting with which the pattern was compiled. */ + reg_syntax_t syntax; + + /* Pointer to a fastmap, if any, otherwise zero. re_search uses + the fastmap, if there is one, to skip over impossible + starting points for matches. */ + char *fastmap; + + /* Either a translate table to apply to all characters before + comparing them, or zero for no translation. The translation + is applied to a pattern when it is compiled and to a string + when it is matched. */ + RE_TRANSLATE_TYPE translate; + + /* Number of subexpressions found by the compiler. */ + size_t re_nsub; + + /* Zero if this pattern cannot match the empty string, one else. + Well, in truth it's used only in `re_search_2', to see + whether or not we should use the fastmap, so we don't set + this absolutely perfectly; see `re_compile_fastmap' (the + `duplicate' case). */ + unsigned can_be_null : 1; + + /* If REGS_UNALLOCATED, allocate space in the `regs' structure + for `max (RE_NREGS, re_nsub + 1)' groups. + If REGS_REALLOCATE, reallocate space if necessary. + If REGS_FIXED, use what's there. */ + #define REGS_UNALLOCATED 0 + #define REGS_REALLOCATE 1 + #define REGS_FIXED 2 + unsigned regs_allocated : 2; + + /* Set to zero when `regex_compile' compiles a pattern; set to one + by `re_compile_fastmap' if it updates the fastmap. */ + unsigned fastmap_accurate : 1; + + /* If set, `re_match_2' does not return information about + subexpressions. */ + unsigned no_sub : 1; + + /* If set, a beginning-of-line anchor doesn't match at the + beginning of the string. */ + unsigned not_bol : 1; + + /* Similarly for an end-of-line anchor. */ + unsigned not_eol : 1; + + /* If true, an anchor at a newline matches. */ + unsigned newline_anchor : 1; + + /* [[[end pattern_buffer]]] */ + }; + + typedef struct re_pattern_buffer regex_t; + + /* Type for byte offsets within the string. POSIX mandates this. */ + typedef int regoff_t; + + + /* This is the structure we store register match data in. See + regex.texinfo for a full description of what registers match. */ + struct re_registers + { + unsigned num_regs; + regoff_t *start; + regoff_t *end; + }; + + + /* If `regs_allocated' is REGS_UNALLOCATED in the pattern buffer, + `re_match_2' returns information about at least this many registers + the first time a `regs' structure is passed. */ + #ifndef RE_NREGS + # define RE_NREGS 30 + #endif + + + /* POSIX specification for registers. Aside from the different names than + `re_registers', POSIX uses an array of structures, instead of a + structure of arrays. */ + typedef struct + { + regoff_t rm_so; /* Byte offset from string's start to substring's start. */ + regoff_t rm_eo; /* Byte offset from string's start to substring's end. */ + } regmatch_t; + + /* Declarations for routines. */ + + /* To avoid duplicating every routine declaration -- once with a + prototype (if we are ANSI), and once without (if we aren't) -- we + use the following macro to declare argument types. This + unfortunately clutters up the declarations a bit, but I think it's + worth it. */ + + #if __STDC__ + + # define _RE_ARGS(args) args + + #else /* not __STDC__ */ + + # define _RE_ARGS(args) () + + #endif /* not __STDC__ */ + + /* Sets the current default syntax to SYNTAX, and return the old syntax. + You can also simply assign to the `re_syntax_options' variable. */ + extern reg_syntax_t re_set_syntax _RE_ARGS ((reg_syntax_t syntax)); + + /* Compile the regular expression PATTERN, with length LENGTH + and syntax given by the global `re_syntax_options', into the buffer + BUFFER. Return NULL if successful, and an error string if not. */ + extern const char *re_compile_pattern + _RE_ARGS ((const char *pattern, size_t length, + struct re_pattern_buffer *buffer)); + + + /* Compile a fastmap for the compiled pattern in BUFFER; used to + accelerate searches. Return 0 if successful and -2 if was an + internal error. */ + extern int re_compile_fastmap _RE_ARGS ((struct re_pattern_buffer *buffer)); + + + /* Search in the string STRING (with length LENGTH) for the pattern + compiled into BUFFER. Start searching at position START, for RANGE + characters. Return the starting position of the match, -1 for no + match, or -2 for an internal error. Also return register + information in REGS (if REGS and BUFFER->no_sub are nonzero). */ + extern int re_search + _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string, + int length, int start, int range, struct re_registers *regs)); + + + /* Like `re_search', but search in the concatenation of STRING1 and + STRING2. Also, stop searching at index START + STOP. */ + extern int re_search_2 + _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1, + int length1, const char *string2, int length2, + int start, int range, struct re_registers *regs, int stop)); + + + /* Like `re_search', but return how many characters in STRING the regexp + in BUFFER matched, starting at position START. */ + extern int re_match + _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string, + int length, int start, struct re_registers *regs)); + + + /* Relates to `re_match' as `re_search_2' relates to `re_search'. */ + extern int re_match_2 + _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1, + int length1, const char *string2, int length2, + int start, struct re_registers *regs, int stop)); + + + /* Set REGS to hold NUM_REGS registers, storing them in STARTS and + ENDS. Subsequent matches using BUFFER and REGS will use this memory + for recording register information. STARTS and ENDS must be + allocated with malloc, and must each be at least `NUM_REGS * sizeof + (regoff_t)' bytes long. + + If NUM_REGS == 0, then subsequent matches should allocate their own + register data. + + Unless this function is called, the first search or match using + PATTERN_BUFFER will allocate its own register data, without + freeing the old data. */ + extern void re_set_registers + _RE_ARGS ((struct re_pattern_buffer *buffer, struct re_registers *regs, + unsigned num_regs, regoff_t *starts, regoff_t *ends)); + + #if defined _REGEX_RE_COMP || defined _LIBC + # ifndef _CRAY + /* 4.2 bsd compatibility. */ + extern char *re_comp _RE_ARGS ((const char *)); + extern int re_exec _RE_ARGS ((const char *)); + # endif + #endif + + /* GCC 2.95 and later have "__restrict"; C99 compilers have + "restrict", and "configure" may have defined "restrict". */ + #ifndef __restrict + # if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__)) + # if defined restrict || 199901L <= __STDC_VERSION__ + # define __restrict restrict + # else + # define __restrict + # endif + # endif + #endif + + /* GCC 3.1 and later support declaring arrays as non-overlapping + using the syntax array_name[restrict] */ + #ifndef __restrict_arr + # if ! (3 < __GNUC__ || (3 == __GNUC__ && 1 <= __GNUC_MINOR__)) || defined (__GNUG__) + # define __restrict_arr + # else + # define __restrict_arr __restrict + # endif + #endif + + /* POSIX compatibility. */ + extern int regcomp _RE_ARGS ((regex_t *__restrict __preg, + const char *__restrict __pattern, + int __cflags)); + + extern int regexec _RE_ARGS ((const regex_t *__restrict __preg, + const char *__restrict __string, size_t __nmatch, + regmatch_t __pmatch[__restrict_arr], + int __eflags)); + + extern size_t regerror _RE_ARGS ((int __errcode, const regex_t *__preg, + char *__errbuf, size_t __errbuf_size)); + + extern void regfree _RE_ARGS ((regex_t *__preg)); + + + #ifdef __cplusplus + } + #endif /* C++ */ + + #endif /* regex.h */ + + /* + Local variables: + make-backup-files: t + version-control: t + trim-versions-without-asking: nil + End: + */ diff -Nrc3pad gcc-3.0.4/install-sh gcc-3.1/install-sh *** gcc-3.0.4/install-sh Mon Oct 12 10:44:57 1998 --- gcc-3.1/install-sh Fri Jan 25 23:42:28 2002 *************** else *** 221,227 **** # Make a temp file name in the proper directory. ! dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name --- 221,227 ---- # Make a temp file name in the proper directory. ! dsttmp=$dstdir/_inst.$$_ # Move or copy the file name to the temp name diff -Nrc3pad gcc-3.0.4/libiberty/ChangeLog gcc-3.1/libiberty/ChangeLog *** gcc-3.0.4/libiberty/ChangeLog Wed Feb 20 18:46:15 2002 --- gcc-3.1/libiberty/ChangeLog Wed May 15 02:24:47 2002 *************** *** 1,15 **** ! 2002-02-20 Release Manager ! * GCC 3.0.4 Released. 2002-01-22 Momchil Velikov * configure.in (variable detection): Use arrays of unspecified size instead of plain integers. ! 2001-12-20 Release Manager ! * GCC 3.0.3 Released. 2001-12-12 Craig Rodrigues --- 1,182 ---- ! 2002-05-14 Release Manager ! * GCC 3.1 Released. ! ! 2002-05-14 Release Manager ! ! * GCC 3.1 Released. ! ! 2002-05-08 Alexandre Oliva ! ! * configure.in (ORIGINAL_LD_FOR_MULTILIBS): Preserve LD at ! script entry, and set LD to it when configuring multilibs. ! * configure: Rebuilt. ! ! 2002-04-09 Richard Henderson ! ! * hashtab.c (higher_prime_number): Use 7 as minimum. ! (find_empty_slot_for_expand): Don't compute hash2 unless needed. ! (htab_find_slot_with_hash): Likewise. ! ! 2002-04-05 John David Anglin ! ! * splay-tree.c (splay_tree_xmalloc_allocate): Use K & R syntax. ! (splay_tree_xmalloc_deallocate): Likewise. ! ! 2002-04-01 Phil Edwards ! ! * cp-demangle.c (__cxa_demangle): Also protect with IN_GLIBCPP_V3. ! (is_gnu_v3_mangled_ctor, is_gnu_v3_mangled_ctor): Conditionally ! not compile if IN_GLIBCPP_V3 defined. ! * dyn-string.c: Also allow IN_GLIBCPP_V3 to change allocation scheme. ! ! 2002-03-30 Bryce McKinlay ! ! * cp-demangle.c (java_demangle_v3): Don't try to release "demangled" ! if it is NULL. ! ! 2002-03-27 Mark Mitchell ! ! * dyn-string.c: Add libgcc exception to copyright notice. ! ! 2002-03-18 Stuart Griffith ! ! * strtod.c (strtod): Increment 8 chars, not 7, when `infinity' ! seen. ! ! 2002-03-12 Mark Mitchell ! ! * cp-demangle.c: Add libgcc exception to cp-demangle.c copyright ! notice. ! ! 2002-03-11 Douglas B Rupp ! ! * xatexit.c [VMS]: Include stdlib.h and unixlib.h. ! ! 2002-02-22 Jim Blandy ! ! * splay-tree.c (splay_tree_xmalloc_allocate, ! splay_tree_xmalloc_deallocate): New functions. ! (splay_tree_new): Call splay_tree_new_with_allocator, passing the ! above functions and a dummy data pointer. ! (splay_tree_new_with_allocator): New function. ! (splay_tree_delete_helper, splay_tree_delete, splay_tree_insert, ! splay_tree_remove): Use the splay tree's allocation and ! deallocation functions. ! ! 2002-02-19 Scott Snyder ! ! * testsuite/demangle-expected: Add test case for infinite loop in ! demangler. ! * cplus-dem.c (demangle_arm_hp_template): Stop trying to demangle ! if do_type() doesn't make any progress --- prevents an infinite ! loop. ! ! 2002-02-18 Carlo Wood ! ! PR c++/5390 ! * cplus-dem.c (demangle_integral_value): Accept multi-digit ! numbers that do not start with an underscore; This is needed ! for integer template parameters. This doesn't break anything ! because multi-digit numbers are never followed by a digit. ! * testsuite/demangle-expected: Corrected all mangled test ! cases with multi-digit template parameters: g++ 2.95.x does ! not generate underscores around these parameters. ! ! 2002-02-05 Jason Merrill ! ! * cplus-dem.c (flags): Add DMGL_VERBOSE ! (cplus_demangle_v3_p): Remove. ! (demangle_it): Add DMGL_TYPES to passed flags. ! * cp-demangle.c (cplus_demangle_v3_all): Remove. ! (cplus_demangle_v3_type): Remove. ! (cplus_demangle_v3): Add options parm. ! ! 2002-02-02 H.J. Lu (hjl@gnu.org) ! ! * cp-demangle.c (cp_demangle_type): Do not protect with ! IN_LIBGCC2. ! (cplus_demangle_v3_all): New. ! (cplus_demangle_v3): Call cplus_demangle_v3_all. ! (cplus_demangle_v3_type): Call cplus_demangle_v3_all. ! ! * cplus-dem.c (cplus_demangle_v3_p): New function pointer. ! Initialized to cplus_demangle_v3. ! (cplus_demangle_with_style): Call cplus_demangle_v3_p instead ! of cplus_demangle_v3. ! (main): Set cplus_demangle_v3_p to cplus_demangle_v3_type for ! command line symbol. ! ! * testsuite/regress-demangle: Pass the mangled name at the ! command line. ! ! 2002-02-01 H.J. Lu ! ! * cp-demangle.c (cp_demangle_type): Call demangling_new with ! DMGL_GNU_V3. ! ! 2002-01-31 Phil Edwards ! ! * cp-demangle.c: Revert yesterday's change. ! ! 2002-01-31 Adam Megacz ! ! * gcc/libiberty/configure.in: Treat mingw the same as cywin ! wrt HAVE_SYS_ERRLIST. ! ! 2002-01-30 Phil Edwards ! ! * cp-demangle.c (cp_demangle_type): Do not protect with IN_LIBGCC2. ! (cplus_demangle_v3): Mimic __cxa_demangle and fall back on ! cp_demangle_type. ! * testsuite/demangle-expected: New gnu-v3 test. 2002-01-22 Momchil Velikov * configure.in (variable detection): Use arrays of unspecified size instead of plain integers. ! 2002-01-18 DJ Delorie ! * Makefile.in (TESTLIB): New. This library is for future ! testsuites. ! (CFILES, REQUIRED_OFILES, CONFIGURED_OFILES): Re-alphabetize, ! break down by letter. ! (REQUIRED_OFILES): List long-to-compile files first. ! (maint-deps): New, target for updating dependencies. ! (dependencies): Update. ! * maint-tool: Add dependency-generating option. ! * configure.in: Check for _doprnt even if we're not providing it. ! * configure: Regenerate. ! ! * _doprnt.c: Modifications to allow compiling on any platform. ! * copysign.c: Likewise. ! * putenv.c: Likewise. ! * setenv.c: Likewise. ! * vsprintf.c: Likewise. ! ! 2002-01-15 Douglas B Rupp ! ! * mkstemps.c (mkstemps): On VMS, open temp file with option ! that causes it to be deleted when closed. ! ! 2002-01-02 Kaveh R. Ghazi ! ! * cp-demangle.c (long_options): Const-ify. ! * cplus-dem.c (long_options): Likewise. ! ! * cplus-dem.c (mystrstr): Delete. All callers changed to use ! strstr instead. ! ! 2001-12-31 Ira Ruben ! ! * aclocal.m4 (libiberty_AC_FUNC_STRNCMP): Use anon mmap as 2nd try. ! * configure: Regenerated. ! ! 2001-12-24 Douglas B. Rupp ! ! * configure.in (uintptr_t): Use AC_CHECK_TYPE. ! * configure: Regenerated. 2001-12-12 Craig Rodrigues *************** *** 17,50 **** * cplus-dem.c (consume_count): Treat negative count as an error. * testsuite/demangle-expected: Added testcase. ! 2001-12-06 DJ Delorie Daniel Jacobowitz * Makefile.in (stamp-h): Depend on Makefile for proper serialization. (*-subdir): Depend on config.h for proper serialization. ! 2001-10-23 Release Manager ! * GCC 3.0.2 Released. ! 2001-08-21 Christopher Faylor ! * configure.in: Set HAVE_SYS_ERRLIST and HAVE_SYS_NERR whenever hosting ! on cygwin. * configure: Regenerate. ! 2001-08-19 Release Manager ! * GCC 3.0.1 Released. ! 2001-08-19 Release Manager ! * GCC 3.0.1 Released. ! 20010617 Release Manager ! * GCC 3.0 Released. 2001-06-11 Loren J. Rittle --- 184,534 ---- * cplus-dem.c (consume_count): Treat negative count as an error. * testsuite/demangle-expected: Added testcase. ! Tue Dec 11 07:08:57 2001 Douglas B. Rupp ! ! * configure.in: Hardcode that vfork works on VMS host. ! * configure: Regenerated. ! ! 2001-12-06 Richard Henderson ! ! * cplus-dem.c (libiberty_demanglers): Add no_demangling case. ! (cplus_demangle): Support no_demangling. ! ! 2001-11-27 Zack Weinberg ! ! * _doprnt.c: Moved here from gcc/doprint.c. Adjust to build ! in libiberty context. Fix typo in leading comment. ! * configure.in: Fix various AC_DEFINEs so autoheader works. ! If any of vprintf, vsprintf, vfprintf is missing from libc, ! then AC_REPLACE_FUNCS(_doprnt). ! ! 2001-11-26 DJ Delorie Daniel Jacobowitz * Makefile.in (stamp-h): Depend on Makefile for proper serialization. (*-subdir): Depend on config.h for proper serialization. ! 2001-11-26 DJ Delorie ! * configure.in: Check for alloca.h (for regex.c and putenv.c). ! * configure: Regenerate. ! * config.h: Add HAVE_ALLOCA_H. ! 2001-11-16 Kaveh R. Ghazi ! * regex.c: Check defined(__STDC__) || defined(ALMOST_STDC) || ! defined(HAVE_STRINGIZE) to determine whether ISO CPP token pasting ! is available. ! ! Thu Nov 15 11:06:25 2001 Jeffrey A Law (law@cygnus.com) ! ! * config.in (HAVE_UINTPTR_T): Provide autoconf stub. ! * configure.in (HAVE_UINTPTR_T): Test for system defining ! uintptr_t and define HAVE_UINTPTR_T appropriately. ! * regex.c (uintptr_t): Do not provide a definition if the ! system provided one. ! ! * regex.c (PREFIX): Provide an alternate definition for ! non-ANSI/ISO compilers. ! (ARG_PREFIX): Likewise. ! ! 2001-11-12 Jim Meyering ! ! * obstack.c (_): Honor the setting of ENABLE_NLS. Otherwise, ! this code would end up calling gettext even in packages built ! with --disable-nls. ! * getopt.c (_): Likewise. ! * regex.c (_): Likewise. ! ! 2001-11-03 Alan Modra ! ! * configure.in: Cope with missing makeinfo. * configure: Regenerate. ! 2001-10-22 Kaveh R. Ghazi ! * hex.c (hex_init): Provide empty stub. ! * hex.c (hex_init): Delete. ! (_hex_value): Const-ify and initialize at compile-time. ! 2001-10-19 H.J. Lu ! * Makefile.in ($(TARGETLIB)): Also generate pic/$(TARGETLIB) if ! necessary. ! 2001-10-17 DJ Delorie ! ! * argv.c, asprintf.c, choose-temp.c, concat.c, cplus-dem.c, ! ffs.c, fnmatch.txh, getruntime.c, make-temp-file.c, ! mkstemps.c, pexecute.c, random.c, strsignal.c, vasprintf.c: ! Improve manual formatting. ! * functions.texi: Regenerate. ! ! 2001-10-15 DJ Delorie ! ! * Makefile.in (TEXIFILES): Add fnmatch.txh. ! (maint-undoc): New. ! maint-tool: Add "undoc" tool. ! * alloca.c, argv.c, asprintf.c, choose-temp.c, concat.c, ! fdmatch.c, ffs.c, getruntime.c, insque.c, lbasename.c, ! make-temp-file.c, mkstemps.c, pexecute.c, random.c, spaces.c, ! strerror.s, strsignal.c, strtol.c, vasprintf.c: Add or update ! documentation. ! * fnmatch.txh: New. ! * functions.texi: Regenerate. ! ! 2001-10-10 Joseph S. Myers ! ! * bcmp.c, setenv.c: Use "nonzero" instead of "non-zero". ! * strtod.c: Use "ISO C" instead of "ANSI C". ! * functions.texi: Regenerate. ! ! 2001-10-07 Joseph S. Myers ! ! * alloca.c, clock.c, getcwd.c, getpagesize.c, getpwd.c, index.c, ! libiberty.texi, memchr.c, putenv.c, rindex.c, strchr.c, strdup.c, ! strerror.c, strrchr.c, strstr.c, strtod.c, tmpnam.c, vfork.c, ! xatexit.c, xmalloc.c, xstrerror.c: Improve manual formatting. Fix ! spelling. Give names to function arguments in documentation. Use ! (void) prototypes in documentation. ! * functions.texi: Regenerate. ! ! 2001-10-07 Kaveh R. Ghazi ! ! * argv.c (buildargv, tests, main): Const-ify. ! * cp-demangle.c (operator_code): Likewise. ! * cplus-dem.c (optable, libiberty_demanglers, ! cplus_demangle_set_style, cplus_demangle_name_to_style, ! print_demangler_list): Likewise. ! * hashtab.c (higher_prime_number): Likewise. ! * strcasecmp.c (charmap): Likewise. ! * strerror.c (error_info, strerror, main): Likewise. ! * strncasecmp.c (charmap): Likewise. ! * strsignal.c (signal_info): Likewise. ! ! 2001-09-29 DJ Delorie ! ! * configure: Regenerate. ! ! 2001-09-28 Kaveh R. Ghazi ! ! * concat.c: Include stdlib.h. ! ! 2001-09-27 Eli Zaretskii ! ! * libiberty.texi: (Top level): Add syncodeindex pg. Add ! @dircategory and @direntry directives. Add @finalout. ! (many nodes): Lose the next,prev,up pointers on the @nide line. ! (Using, Supplemental Functions, Replacement Functions): Fix ! markup. ! (Functions): Move around, to allow makeinfo to build the manual ! without next,prev,up pointers in thye node lines. ! (Licenses): Fix typos. ! ! * index.c, rindex.c, strchr.c, strerror.c, strrchr.c, strstr.c, ! strtol.c, xatexit.c, xexit.c, xmalloc.c: Fix spelling and markup. ! * functions.texi: Regenerate. ! ! * copying-lib.texi: Lose the next,prev,up pointers on the @node ! line. ! ! 2001-09-27 DJ Delorie ! ! * configure.in: Don't use in-tree texinfo, because libiberty must ! be built before it. Check for makeinfo version 4 or higher. ! * functions.texi: Regenerate. ! ! 2001-09-20 DJ Delorie ! Phil Edwards ! ! * configure.in (MAKEINFO, PERL): Detect these. ! (--enable-maintainer-mode): Add. ! * configure: Regenerate. ! * Makefile.in (MAKEINFO, PERL): Define. ! (libiberty.info, libiberty.dvi, libiberty.html): New. ! (CFILES): Add bsearch.c. ! (CONFIGURED_OFILES): New, list of objects configure might add. ! (maint-missing, maint-buildall): New, for maintainers only. ! (clean, mostlyclean): Add info/dvi/html files. ! * libiberty.texi, copying-lib.texi, obstacks.texi, functions.texi: New. ! * gather-docs: New, for maintainers. ! * maint-tool: New, for maintainers. ! * alloca.c, atexit.c, basename.c, bcmp.c, bcopy.c, bsearch.c, ! bzero.c, calloc.c, clock.c, configure.in, configure, getcwd.c, ! getpagesize.c, getpwd.c, index.c, memchr.c, memcmp.c, memcpy.c, ! memmove.c, memset.c, putenv.c, rename.c, rindex.c, setenv.c, ! sigsetmask.c, strcasecmp.c, strchr.c, strdup.c, strerror.c, ! strncasecmp.c, strncmp.c, strrchr.c, strstr.c, strtod.c, strtol.c, ! tmpnam.c, vfork.c, vprintf.c, waitpid.c, xatexit.c, xexit.c, ! xmalloc.c, xmemdup.c, xstrdup.c, xstrerror.c: Add or update ! documentation. ! ! 2001-09-25 Kaveh R. Ghazi ! ! * concat.c (reconcat): Fix for traditional C. ! ! 2001-09-24 Kaveh R. Ghazi ! ! * concat.c (reconcat): New function. ! ! 2001-09-17 Kaveh R. Ghazi ! ! * concat.c (vconcat_length, vconcat_copy, concat_length, ! concat_copy, concat_copy2): New functions. ! (concat): Use vconcat_length/vconcat_copy. ! ! * alloca.c (libiberty_optr, libiberty_nptr, libiberty_len): ! Define. ! ! 2001-09-04 Kaveh R. Ghazi ! ! * asprintf.c: Don't define USE_STDARG. Use VPARAMS, VA_OPEN, ! VA_FIXEDARG & VA_CLOSE. ! ! * vasprintf.c: Check HAVE_STRING_H when including string.h. ! (checkit): Delete redundant prototype. Add ATTRIBUTE_PRINTF_1. ! Use VA_OPEN, VA_FIXEDARG & VA_CLOSE. Free allocated string. ! ! 2001-08-27 Kaveh R. Ghazi ! ! * concat.c (concat): Use VPARAMS, VA_OPEN, VA_FIXEDARG & VA_CLOSE. ! ! 2001-08-23 Ulrich Drepper ! ! * regex.c (truncate_wchar): Use wcrtomb not wctomb. ! ! 2001-08-23 Ulrich Drepper ! ! * posix/regex.c [_LIBC] (convert_mbs_to_wcs): Use __mbrtowc ! instead of mbrtowc. ! [_LIBC]: Use __iswctype instead of iswctype, __wcslen instead of ! wcslen, and __wcscoll instead of wcscoll. ! ! 2001-08-22 Matt Kraai ! ! * fibheap.c (fibheap_init, fibnode_init): Remove. ! (fibheap_new, fibnode_new): Use xcalloc to allocate and ! initialize memory. ! (fibheap_insert): Remove check for node allocation failure. ! ! 2001-08-21 Richard Henderson ! ! * Makefile.in (fibheap.o): Depend on config.h. ! * fibheap.c: Tidy formatting. Use config.h.` Rearrange some ! functions for inlining. ! ! Tue Aug 21 12:35:04 2001 Christopher Faylor ! ! * configure.in: Need to set HAVE_SYS_ERRLIST and HAVE_SYS_NERR whenever ! hosting on cygwin. ! * configure: Regenerate. ! ! 2001-08-20 Andrew Cagney ! ! * floatformat.c (floatformat_m88110_ext): Remove #ifdef ! HARRIS_FLOAT_FORMAT. ! (floatformat_ia64_spill_little, floatformat_ia64_quad_little) ! (floatformat_ia64_spill_big, floatformat_ia64_quad_big) ! (floatformat_arm_ext_big, floatformat_arm_ext_littlebyte_bigword) ! (floatformat_m88110_harris_ext): New float formats. ! ! 2001-08-20 Daniel Berlin ! ! * fibheap.c: New file. Fibonacci heap. ! ! * Makefile.in (CFILES): Add fibheap.c. ! (REQUIRED_OFILES): Add fibheap.o. ! (fibheap.o): Add dependencies for fibheap.o. ! ! 2001-08-17 Christopher Faylor ! ! * configure.in: Always set HAVE_SYS_ERRLIST when targetting cygwin. ! * configure: Regenerate. ! ! 2001-08-16 Richard Henderson ! ! * hashtab.c (htab_hash_string): New. ! ! 2001-08-13 Andrew Cagney ! ! * floatformat.c (floatformat_ieee_double_littlebyte_bigword): Fix ! name. ! ! 2001-08-12 Isamu Hasegawa ! ! * regex.c (wcs_regex_compile): Use appropriate string ! to compare with collating element. ! Fix the padding for the alignment. ! ! 2001-08-10 Andrew Cagney ! ! * lbasename.c (lbasename): Change function definition to return a ! const char pointer. ! ! 2001-08-07 Jason Merrill ! ! * cp-demangle.c (demangle_special_name): "GR" -> "reference temporary ! for". ! ! 2001-08-03 Richard Henderson ! ! * Makefile.in (concat.o): Depend on config.h. ! ! 2001-07-30 Andreas Jaeger ! ! * concat.c: Include "config.h". ! ! 2001-07-30 Andreas Jaeger ! ! * regex.c: Declare wcs functions only if compiling with ! MBS_SUPPORT. ! Don't use #elif for traditional C. ! ! 2001-07-23 Ulrich Drepper ! ! * regex.c: Revamp memory allocation for WCHAR functions to ! not use too much stack. ! ! 2001-07-30 Andreas Jaeger ! ! * regex.c: Declare wcs functions only if compiling with ! MBS_SUPPORT. ! Don't use #elif for traditional C. ! ! 2001-07-25 Daniel Jacobowitz ! ! * Makefile.in (regex.o): Add dependency on config.h. ! ! 2001-07-18 Andreas Schwab ! ! * regex.c (WORDCHAR_P) [WCHAR]: Also return true for the ! underscore character. ! ! 2001-07-18 Ulrich Drepper ! ! * regex.c: Limit string length printed in debug messages to 100 ! chars. ! ! 2001-07-18 Andreas Jaeger ! ! * regex.c: Place under LGPL version 2.1. ! ! 2001-07-10 Jeff Johnston ! ! * Makefile.in: Add support for regex code. ! * regex.c: New file. ! ! 2001-07-05 Mark Klein ! ! * Makefile.in: Add ffs.c dependency. ! * configure.in: Add ffs.c. ! * ffs.c: New file. ! ! 2001-06-18 Richard Henderson ! ! * concat.c: Include . 2001-06-11 Loren J. Rittle *************** *** 52,82 **** * strerror.c (sys_nerr): Hide the OS header version. * strsignal.c (sys_nsig): Likewise. 2001-05-07 Zack Weinberg * cp-demangle.c (demangle_v3_with_details, is_gnu_v3_mangled_ctor, is_gnu_v3_mangled_dtor): Use K+R style function definition. 2001-05-07 Mark Mitchell ! * splay-tree.c (splay_tree_max): New function. (splay_tree_min): Likewise. 2001-03-27 Kaveh R. Ghazi * memchr.c (memchr): Adjust condition to avoid infinite loop. ! 2001-03-26 Jakub Jelinek * cp-demangle.c (demangle_discriminator): `_0' is discriminator #1, `_' not followed by a digit is invalid. ! 2001-03-24 Neil Booth ! * lbasename.c: New file / function, always compiled in. ! * Makefile.in: Always compile and link lbasename.c. Add ! target for lbasename.o. 2001-03-20 Jim Blandy --- 536,611 ---- * strerror.c (sys_nerr): Hide the OS header version. * strsignal.c (sys_nsig): Likewise. + 2001-06-10 Richard Henderson + + * concat.c: Include string.h. Fix int vs size_t usage. + Simplify the iteration loops. Use memcpy. + + 2001-05-16 Matt Kraai + + * partition.c: Fix misspelling of `implementation'. + + 2001-05-09 Thiemo Seufer + + * md5.c (md5_init_ctx): Declare constants as unsigned. + (md5_process_block): Likewise. + 2001-05-07 Zack Weinberg * cp-demangle.c (demangle_v3_with_details, is_gnu_v3_mangled_ctor, is_gnu_v3_mangled_dtor): Use K+R style function definition. + * ternary.c: Use K+R style function definitions. Use PTR, not + void *. Make arguments constant where possible. 2001-05-07 Mark Mitchell ! * splay-tree.h (splay_tree_max): New function. (splay_tree_min): Likewise. + 2001-04-15 Daniel Berlin + + * ternary.c: New file - Ternary search tree implementation. + + * Makefile.in: Add ternary.o, and ternary.c dependencies. + + 2001-04-03 Zack Weinberg + + * make-temp-file.c (try): Inline. + + 2001-02-28 Richard Henderson + + * Makefile.in (make-temp-file.o): Depend on config.h. + 2001-03-27 Kaveh R. Ghazi * memchr.c (memchr): Adjust condition to avoid infinite loop. ! 2001-03-23 Jakub Jelinek * cp-demangle.c (demangle_discriminator): `_0' is discriminator #1, `_' not followed by a digit is invalid. ! 2001-03-22 Jim Blandy ! * cp-demangle.c (string_list_delete): Use dyn_string_delete ! instead of free, to free the contents as well as the string ! structure. ! ! 2001-03-21 Zack Weinberg ! ! * make-temp-file.c: Always default DIR_SEPARATOR to '/'. ! Don't default P_tmpdir to anything. Try /var/tmp before ! /usr/tmp. ! ! 2001-03-20 Zack Weinberg ! ! * choose-temp.c: Split off make_temp_file, and the code ! duplicated between it and choose_temp_base, into... ! * make-temp-file.c: ... here; new file. ! ! * Makefile.in (CFILES): Add make-temp-file.c. ! (REQUIRED_OFILES): Add make-temp-file.o. 2001-03-20 Jim Blandy *************** *** 88,98 **** --- 617,656 ---- (demangle_v3_with_details, is_gnu_v3_mangled_ctor, is_gnu_v3_mangled_dtor): New functions. + 2001-03-20 Jason Merrill + + * cplus-dem.c (main): Skip initial $. + 2001-03-15 Michael Meissner * hashtab.c (higher_prime_number): Silence warning that 4294967291 might be a signed integer under pre-ISO C systems. + 2001-03-10 Neil Booth + John David Anglin + + * libiberty/lbasename.c: New file. + * libiberty/Makefile.in: Update for lbasename. + + 2001-03-06 Zack Weinberg + + * aclocal.m4 (libiberty_AC_FUNC_C_ALLOCA): New. + * configure.in: Replace all alloca logic with a simple use of + the above new macro. + * config.table: Kill *-*-beos* entry. + * config/mh-beos: Delete. + * configure, config.in: Regenerate. + + * Makefile.in (ALLOCA, HFILES): Kill. + (REQUIRED_OFILES): Add alloca.o. + (alloca.o): Depend on libiberty.h. + (argv.o): Don't depend on alloca-conf.h. + * alloca-conf.h: Delete. + * alloca.c: Include libiberty.h. Kill all #ifdef emacs + blocks. Provide the C alloca unconditionally. Use PTR where + appropriate. Make i00afunc static. + * argv.c: Don't include alloca-conf.h. + 2001-03-04 John David Anglin * cplus-dem.c (main): Cast enum style to int. *************** *** 120,126 **** for Java demangling. (demangle_builtin_type): Look up in java_builtin_type_names if doing Java output. ! * cplus-dem.c (cplus_demangle): Use java_demangle_v3 to do Java demangling. (long_options): Remove obsolete `java' option. (main): Remove explicit handling of `java' option. Instead, pass style --- 678,684 ---- for Java demangling. (demangle_builtin_type): Look up in java_builtin_type_names if doing Java output. ! * cplus-dem.c (cplus_demangle): Use java_demangle_v3 to do Java demangling. (long_options): Remove obsolete `java' option. (main): Remove explicit handling of `java' option. Instead, pass style *************** *** 240,251 **** 2000-11-04 Hans-Peter Nilsson * hashtab.c (htab_expand): Change to return int. Use calloc or ! xcalloc depending on htab->return_allocation_failure. Return zero ! if calloc fails. (htab_create): Update comment to cover memory allocation. (htab_try_create): New. (htab_find_slot_with_hash): Return NULL if htab_expand fails. ! Update comment to cover this. 2000-11-03 Hans-Peter Nilsson --- 798,809 ---- 2000-11-04 Hans-Peter Nilsson * hashtab.c (htab_expand): Change to return int. Use calloc or ! xcalloc depending on htab->return_allocation_failure. Return zero ! if calloc fails. (htab_create): Update comment to cover memory allocation. (htab_try_create): New. (htab_find_slot_with_hash): Return NULL if htab_expand fails. ! Update comment to cover this. 2000-11-03 Hans-Peter Nilsson *************** Tue May 30 15:07:52 2000 Jeffrey A Law *** 748,754 **** 2000-05-23 Mike Stump * Makefile.in (xmalloc.o): Add dependency for config.h, fixes make ! -j3. 2000-05-18 J. David Anglin --- 1306,1312 ---- 2000-05-23 Mike Stump * Makefile.in (xmalloc.o): Add dependency for config.h, fixes make ! -j3. 2000-05-18 J. David Anglin *************** Tue Dec 22 09:43:35 1998 Kaveh R. Ghazi *** 1381,1389 **** * choose-temp.c: Include stdlib.h. * cplus-dem.c (demangle_arm_pt): Remove unused prototype. ! (snarf_numeric_literal): Constify first parameter. ! (code_for_qualifier): Avoid a gcc extension, make the parameter an ! int, not a char. (demangle_qualifier): Likewise. (demangle_signature): Cast the argument of a ctype function to unsigned char. --- 1939,1947 ---- * choose-temp.c: Include stdlib.h. * cplus-dem.c (demangle_arm_pt): Remove unused prototype. ! (snarf_numeric_literal): Constify first parameter. ! (code_for_qualifier): Avoid a gcc extension, make the parameter an ! int, not a char. (demangle_qualifier): Likewise. (demangle_signature): Cast the argument of a ctype function to unsigned char. *************** Tue Dec 22 09:43:35 1998 Kaveh R. Ghazi *** 1396,1406 **** Cast the argument of a ctype function to unsigned char. * floatformat.c (floatformat_to_double): Add explicit braces to ! avoid ambiguous `else'. * fnmatch.c (fnmatch): Change type of variables `c', `c1', ! `cstart' and `cend' to unsigned char. Cast the argument of macro ! `FOLD', which uses ctype functions, to unsigned char. * objalloc.c (free): Add prototype. --- 1954,1964 ---- Cast the argument of a ctype function to unsigned char. * floatformat.c (floatformat_to_double): Add explicit braces to ! avoid ambiguous `else'. * fnmatch.c (fnmatch): Change type of variables `c', `c1', ! `cstart' and `cend' to unsigned char. Cast the argument of macro ! `FOLD', which uses ctype functions, to unsigned char. * objalloc.c (free): Add prototype. *************** Sun Dec 20 16:03:46 1998 Hans-Peter Nil *** 1411,1417 **** Fri Dec 18 17:50:18 1998 David Taylor * cplus-dem.c (demangle_arm_pt): remove declaration -- function ! doesn't exist. (do_hpacc_template_literal): remove unused variable `i'. Fri Dec 18 16:11:43 EST 1998 Andrew MacLeod --- 1969,1975 ---- Fri Dec 18 17:50:18 1998 David Taylor * cplus-dem.c (demangle_arm_pt): remove declaration -- function ! doesn't exist. (do_hpacc_template_literal): remove unused variable `i'. Fri Dec 18 16:11:43 EST 1998 Andrew MacLeod *************** Fri Dec 4 13:51:04 1998 David Taylor *** 1455,1502 **** * HP aCC demangling support. * cplus-dem.c (main): Remove default to HP style demangling, set to EDG ! demangling correctly when -edg specified; set the demangling style ! when user specifies 'edg'. Set strip_underscore to ! prepends_underscore, if not HPUXHPPA. Set ! current_demangling_style to hp_demangling if HPUXHPPA. Set ! current demangling style correctly if the switch is hp. Read ! label correctly also in the HP style case. (work_stuff): add temp_start field; add field for volatile member ! function. (arm_pt): handle ARM_DEMANGLING and EDG_DEMANGLING styles; HP ! style for this case is the same as ARM. (demangle_args): handle EDG_DEMANGLING style; support HP style. (demangle_arm_hp_template): new function. (It was ! demangle_arm_pt.); check and set value of temp_start field in ! multiple places. Also, when ceching for end of template args, ! check to see if at end of static member of template class. (demangle_class): new local variable : save_class_name_end Don't ! include template args in string defining class. (demangle_class_name): use demangel_arm_hp_template. (demangle_function_name): handle case where demangling style is ! HP_DEMANGLING and currently point at an 'X' in the mangled name. ! Handle EDG_DEMANGLING style. Handle constructor and destructor ! ops for HP style. (demangle_prefix): handle EDG_DEMANGLING and ARM_DEMANGLING ! styles. global destructor and constructor for HP style are same ! as for ARM style. Same for local variables. (demangle_qualified): handle EDG_DEMANGLING style. (demangle_signature): add case for volatile member function. For ! cases '1' - '9' : initialize the temp_start field to -1 and handle ! the EDG_DEMANGLING style. for case 'F' : handle EDG_DEMANGLING ! and AUTO_DEMANGLING styles. If expecting a function and managed ! to demangle the funct args, then handle the LUCID_DEMANGLING, ! ARM_DEMANGLING, and EDG_DEMANGLING styles. Add case for local ! class name after "Lnnn_ in HP style case. HP style too needs to ! forget types. _nnn is OK for HP style, so don't report failure. (do_hpacc_template_const_value): new function. Handle template's ! value param for HP/aCC. (do_hpacc_template_literal): new function. Handle a template's ! literal parameter for HP aCC. (recursively_demangle): new function (snarf_numeric_literal): new function. (usage): add 'edg' to the list of demangling styles; add hp switch ! to message. Sat Nov 28 17:25:22 1998 Christopher Faylor --- 2013,2060 ---- * HP aCC demangling support. * cplus-dem.c (main): Remove default to HP style demangling, set to EDG ! demangling correctly when -edg specified; set the demangling style ! when user specifies 'edg'. Set strip_underscore to ! prepends_underscore, if not HPUXHPPA. Set ! current_demangling_style to hp_demangling if HPUXHPPA. Set ! current demangling style correctly if the switch is hp. Read ! label correctly also in the HP style case. (work_stuff): add temp_start field; add field for volatile member ! function. (arm_pt): handle ARM_DEMANGLING and EDG_DEMANGLING styles; HP ! style for this case is the same as ARM. (demangle_args): handle EDG_DEMANGLING style; support HP style. (demangle_arm_hp_template): new function. (It was ! demangle_arm_pt.); check and set value of temp_start field in ! multiple places. Also, when ceching for end of template args, ! check to see if at end of static member of template class. (demangle_class): new local variable : save_class_name_end Don't ! include template args in string defining class. (demangle_class_name): use demangel_arm_hp_template. (demangle_function_name): handle case where demangling style is ! HP_DEMANGLING and currently point at an 'X' in the mangled name. ! Handle EDG_DEMANGLING style. Handle constructor and destructor ! ops for HP style. (demangle_prefix): handle EDG_DEMANGLING and ARM_DEMANGLING ! styles. global destructor and constructor for HP style are same ! as for ARM style. Same for local variables. (demangle_qualified): handle EDG_DEMANGLING style. (demangle_signature): add case for volatile member function. For ! cases '1' - '9' : initialize the temp_start field to -1 and handle ! the EDG_DEMANGLING style. for case 'F' : handle EDG_DEMANGLING ! and AUTO_DEMANGLING styles. If expecting a function and managed ! to demangle the funct args, then handle the LUCID_DEMANGLING, ! ARM_DEMANGLING, and EDG_DEMANGLING styles. Add case for local ! class name after "Lnnn_ in HP style case. HP style too needs to ! forget types. _nnn is OK for HP style, so don't report failure. (do_hpacc_template_const_value): new function. Handle template's ! value param for HP/aCC. (do_hpacc_template_literal): new function. Handle a template's ! literal parameter for HP aCC. (recursively_demangle): new function (snarf_numeric_literal): new function. (usage): add 'edg' to the list of demangling styles; add hp switch ! to message. Sat Nov 28 17:25:22 1998 Christopher Faylor *************** Mon Nov 2 15:05:33 1998 Geoffrey Noer *** 1578,1590 **** Mon Nov 2 10:22:01 1998 Kaveh R. Ghazi * pexecute.c: Check HAVE_CONFIG_H, not IN_GCC, when determining ! whether to include config.h. Possibly include unistd.h in the ! !IN_GCC case. Define VFORK_STRING as a printable function call ! for error messages (either "vfork" or "fork".) If HAVE_VFORK_H is ! defined, include vfork.h. If VMS is defined, define vfork() ! appropriately. Remove vfork check on USG, we're using autoconf. ! (pexecute): Set `errmsg_fmt' to VFORK_STRING instead of checking ! locally what string to use. 1998-10-26 Mark Mitchell --- 2136,2148 ---- Mon Nov 2 10:22:01 1998 Kaveh R. Ghazi * pexecute.c: Check HAVE_CONFIG_H, not IN_GCC, when determining ! whether to include config.h. Possibly include unistd.h in the ! !IN_GCC case. Define VFORK_STRING as a printable function call ! for error messages (either "vfork" or "fork".) If HAVE_VFORK_H is ! defined, include vfork.h. If VMS is defined, define vfork() ! appropriately. Remove vfork check on USG, we're using autoconf. ! (pexecute): Set `errmsg_fmt' to VFORK_STRING instead of checking ! locally what string to use. 1998-10-26 Mark Mitchell *************** Thu Oct 8 23:42:08 1998 Jeffrey A Law *** 1690,1697 **** Mon Sep 7 23:29:01 1998 Kaveh R. Ghazi * mkstemp.c: Include config.h even when not IN_GCC. Wrap header ! inclusions inside HAVE_*_H macros. Include ansidecl.h when not ! IN_GCC. * vasprintf.c: Include stdarg.h/varargs.h first. --- 2248,2255 ---- Mon Sep 7 23:29:01 1998 Kaveh R. Ghazi * mkstemp.c: Include config.h even when not IN_GCC. Wrap header ! inclusions inside HAVE_*_H macros. Include ansidecl.h when not ! IN_GCC. * vasprintf.c: Include stdarg.h/varargs.h first. *************** Mon May 4 13:00:28 1998 Ian Lance Tayl *** 2005,2011 **** * config/mh-sysv4 (RANLIB, INSTALL): Don't define. * config.table: Change config_shell to CONFIG_SHELL, and use libiberty_topdir to find move-if-change. ! (m68k-apollo-bsd*, m68k-apollo-sysv*): Remove. (i[3456]86-ncr-sysv4*, *-*-dgux*, hppa*-hp-bsd*): Remove. (*-*-irix*, *-*-m88kbcs*, *-*-sysv*): Remove. * Makefile.in (srcdir): Set to @srcdir@. --- 2563,2569 ---- * config/mh-sysv4 (RANLIB, INSTALL): Don't define. * config.table: Change config_shell to CONFIG_SHELL, and use libiberty_topdir to find move-if-change. ! (m68k-apollo-bsd*, m68k-apollo-sysv*): Remove. (i[3456]86-ncr-sysv4*, *-*-dgux*, hppa*-hp-bsd*): Remove. (*-*-irix*, *-*-m88kbcs*, *-*-sysv*): Remove. * Makefile.in (srcdir): Set to @srcdir@. *************** Wed Sep 24 00:31:59 1997 Felix Lee --- 2780,2786 ---- * asprintf.c: stdarg.h when ALMOST_STDC * config/mh-windows (EXTRA_OFILES): add asprintf.o and ! strncasecmp.o. Thu Aug 28 14:27:15 1997 Andrew Cagney *************** Thu Jan 30 22:48:41 1992 Stu Grossman *** 4264,4270 **** Mon Jan 20 18:53:23 1992 Stu Grossman (grossman at cygnus.com) ! * getopt.c, getopt1.c, ../include/getopt.h: Get latest versions. Sat Jan 18 16:53:01 1992 Fred Fish (fnf at cygnus.com) --- 4822,4828 ---- Mon Jan 20 18:53:23 1992 Stu Grossman (grossman at cygnus.com) ! * getopt.c, getopt1.c, ../include/getopt.h: Get latest versions. Sat Jan 18 16:53:01 1992 Fred Fish (fnf at cygnus.com) diff -Nrc3pad gcc-3.0.4/libiberty/Makefile.in gcc-3.1/libiberty/Makefile.in *** gcc-3.0.4/libiberty/Makefile.in Fri Dec 7 03:39:16 2001 --- gcc-3.1/libiberty/Makefile.in Tue Jan 22 20:03:29 2002 *************** *** 1,6 **** # # Makefile ! # Copyright (C) 1990, 91-99, 2000 # Free Software Foundation # # This file is part of the libiberty library. --- 1,6 ---- # # Makefile ! # Copyright (C) 1990, 91-99, 2000, 2001 # Free Software Foundation # # This file is part of the libiberty library. *************** CC = @CC@ *** 56,70 **** CFLAGS = @CFLAGS@ LIBCFLAGS = $(CFLAGS) RANLIB = @RANLIB@ PICFLAG = MAKEOVERRIDES = TARGETLIB = libiberty.a LIBOBJS = @LIBOBJS@ - ALLOCA = @ALLOCA@ # A configuration can specify extra .o files that should be included, # even if they are in libc. (Perhaps the libc version is buggy.) --- 56,72 ---- CFLAGS = @CFLAGS@ LIBCFLAGS = $(CFLAGS) RANLIB = @RANLIB@ + MAKEINFO = @MAKEINFO@ + PERL = @PERL@ PICFLAG = MAKEOVERRIDES = TARGETLIB = libiberty.a + TESTLIB = testlib.a LIBOBJS = @LIBOBJS@ # A configuration can specify extra .o files that should be included, # even if they are in libc. (Perhaps the libc version is buggy.) *************** FLAGS_TO_PASS = \ *** 95,100 **** --- 97,103 ---- # Subdirectories to recurse into. We need to override this during cleaning SUBDIRS = testsuite + # FIXME: add @BUILD_INFO@ once we're sure it works for everyone. all: stamp-picdir $(TARGETLIB) needed-list required-list all-subdir @$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=all *************** COMPILE.c = $(CC) -c @DEFS@ $(LIBCFLAGS) *** 113,157 **** else true; fi $(COMPILE.c) $< ! info: info-subdir install-info: install-info-subdir clean-info: clean-info-subdir ! dvi: dvi-subdir ! # Include files that are in this directory. ! HFILES = alloca-conf.h ! # NOTE: If you add new files to the library, add them to this list ! # (alphabetical), and add them to REQUIRED_OFILES or funcs in ! # configure.in. ! CFILES = asprintf.c alloca.c argv.c atexit.c basename.c bcmp.c bcopy.c \ ! bzero.c calloc.c choose-temp.c clock.c concat.c cplus-dem.c \ ! cp-demangle.c dyn-string.c fdmatch.c fnmatch.c getcwd.c \ ! getpwd.c getopt.c getopt1.c getpagesize.c getruntime.c \ ! floatformat.c hashtab.c hex.c index.c insque.c lbasename.c \ ! md5.c memchr.c \ ! memcmp.c memcpy.c memmove.c memset.c mkstemps.c objalloc.c obstack.c \ ! partition.c pexecute.c putenv.c random.c rename.c rindex.c setenv.c \ ! sigsetmask.c safe-ctype.c sort.c spaces.c splay-tree.c strcasecmp.c \ ! strncasecmp.c strchr.c strdup.c strerror.c strncmp.c strrchr.c \ ! strsignal.c strstr.c strtod.c strtol.c strtoul.c tmpnam.c vasprintf.c \ ! vfork.c vfprintf.c vprintf.c vsprintf.c waitpid.c xatexit.c xexit.c \ ! xmalloc.c xmemdup.c xstrdup.c xstrerror.c ! # These are always included in the library. ! REQUIRED_OFILES = argv.o choose-temp.o concat.o cplus-dem.o cp-demangle.o \ ! dyn-string.o fdmatch.o fnmatch.o getopt.o getopt1.o getpwd.o \ ! getruntime.o hashtab.o hex.o floatformat.o lbasename.o md5.o \ ! objalloc.o obstack.o \ ! partition.o pexecute.o safe-ctype.o sort.o spaces.o splay-tree.o \ ! strerror.o strsignal.o xatexit.o xexit.o xmalloc.o xmemdup.o \ ! xstrdup.o xstrerror.o ! $(TARGETLIB): $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS) $(ALLOCA) ! -rm -f $(TARGETLIB) ! $(AR) $(AR_FLAGS) $(TARGETLIB) \ ! $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS) $(ALLOCA) ! $(RANLIB) $(TARGETLIB) INSTALL_DEST = @INSTALL_DEST@ install: install_to_$(INSTALL_DEST) install-subdir --- 116,237 ---- else true; fi $(COMPILE.c) $< ! # NOTE: If you add new files to the library, add them to this list ! # (alphabetical), and add them to REQUIRED_OFILES, or ! # CONFIGURED_OFILES and funcs in configure.in. ! CFILES = alloca.c argv.c asprintf.c atexit.c \ ! basename.c bcmp.c bcopy.c bsearch.c bzero.c \ ! calloc.c choose-temp.c clock.c concat.c cp-demangle.c \ ! cplus-dem.c \ ! dyn-string.c \ ! fdmatch.c ffs.c fibheap.c floatformat.c fnmatch.c \ ! getcwd.c getopt.c getopt1.c getpagesize.c getpwd.c getruntime.c \ ! hashtab.c hex.c \ ! index.c insque.c \ ! lbasename.c \ ! make-temp-file.c md5.c memchr.c memcmp.c memcpy.c memmove.c \ ! memset.c mkstemps.c \ ! objalloc.c obstack.c \ ! partition.c pexecute.c putenv.c \ ! random.c regex.c rename.c rindex.c \ ! safe-ctype.c setenv.c sigsetmask.c sort.c spaces.c \ ! splay-tree.c strcasecmp.c strchr.c strdup.c strerror.c \ ! strncasecmp.c strncmp.c strrchr.c strsignal.c strstr.c \ ! strtod.c strtol.c strtoul.c \ ! ternary.c tmpnam.c \ ! vasprintf.c vfork.c vfprintf.c vprintf.c vsprintf.c \ ! waitpid.c \ ! xatexit.c xexit.c xmalloc.c xmemdup.c xstrdup.c xstrerror.c ! ! # These are always included in the library. The first four are listed ! # first and by compile time to optimize parallel builds. ! REQUIRED_OFILES = regex.o cplus-dem.o cp-demangle.o md5.o \ ! alloca.o argv.o \ ! choose-temp.o concat.o \ ! dyn-string.o \ ! fdmatch.o fibheap.o floatformat.o fnmatch.o \ ! getopt.o getopt1.o getpwd.o getruntime.o \ ! hashtab.o hex.o \ ! lbasename.o \ ! make-temp-file.o \ ! objalloc.o obstack.o \ ! partition.o pexecute.o \ ! safe-ctype.o sort.o spaces.o splay-tree.o strerror.o \ ! strsignal.o \ ! ternary.o \ ! xatexit.o xexit.o xmalloc.o xmemdup.o xstrdup.o xstrerror.o ! ! # These are all the objects that configure may add to the library via ! # $funcs or EXTRA_OFILES. This list exists here only for "make ! # maint-missing" and "make check". ! CONFIGURED_OFILES = asprintf.o atexit.o \ ! basename.o bcmp.o bcopy.o bsearch.o bzero.o \ ! calloc.o clock.o copysign.o \ ! _doprnt.o \ ! ffs.o \ ! getcwd.o getpagesize.o \ ! index.o insque.o \ ! memchr.o memcmp.o memcpy.o memmove.o memset.o mkstemps.o \ ! putenv.o \ ! random.o rename.o rindex.o \ ! setenv.o sigsetmask.o strcasecmp.o strchr.o strdup.o \ ! strncasecmp.o strncmp.o strrchr.o strstr.o strtod.o strtol.o \ ! strtoul.o \ ! tmpnam.o \ ! vasprintf.o vfork.o vfprintf.o vprintf.o vsprintf.o \ ! waitpid.o ! ! $(TARGETLIB): $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS) ! -rm -f $(TARGETLIB) pic/$(TARGETLIB) ! $(AR) $(AR_FLAGS) $(TARGETLIB) \ ! $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS) ! $(RANLIB) $(TARGETLIB) ! if [ x"$(PICFLAG)" != x ]; then \ ! cd pic; \ ! $(AR) $(AR_FLAGS) $(TARGETLIB) \ ! $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS); \ ! $(RANLIB) $(TARGETLIB); \ ! cd ..; \ ! else true; fi ! ! $(TESTLIB): $(REQUIRED_OFILES) $(CONFIGURED_OFILES) ! -rm -f $(TESTLIB) ! $(AR) $(AR_FLAGS) $(TESTLIB) \ ! $(REQUIRED_OFILES) $(CONFIGURED_OFILES) ! $(RANLIB) $(TESTLIB) ! ! info: libiberty.info info-subdir install-info: install-info-subdir clean-info: clean-info-subdir ! dvi: libiberty.dvi dvi-subdir ! html: libiberty.html ! TEXISRC = \ ! $(srcdir)/libiberty.texi \ ! $(srcdir)/copying-lib.texi \ ! $(srcdir)/obstacks.texi \ ! $(srcdir)/functions.texi ! # Additional files that have texi snippets that need to be collected ! # and sorted. Some are here because the sources are imported from ! # elsewhere. Others represent headers in ../include. ! TEXIFILES = fnmatch.txh ! libiberty.info : $(srcdir)/libiberty.texi $(TEXISRC) ! $(MAKEINFO) -I$(srcdir) $(srcdir)/libiberty.texi ! libiberty.dvi : $(srcdir)/libiberty.texi $(TEXISRC) ! texi2dvi $(srcdir)/libiberty.texi ! ! libiberty.html : $(srcdir)/libiberty.texi $(TEXISRC) ! $(MAKEINFO) --html -I$(srcdir) $(srcdir)/libiberty.texi ! ! @MAINT@$(srcdir)/functions.texi : stamp-functions ! @MAINT@ @true ! ! @MAINT@stamp-functions : $(CFILES) $(TEXIFILES) $(srcdir)/gather-docs Makefile ! @MAINT@@HAVE_PERL@ $(PERL) $(srcdir)/gather-docs $(srcdir) $(srcdir)/functions.texi $(CFILES) $(TEXIFILES) ! @MAINT@ echo stamp > stamp-functions INSTALL_DEST = @INSTALL_DEST@ install: install_to_$(INSTALL_DEST) install-subdir *************** stamp-picdir: *** 199,206 **** etags tags: TAGS etags-subdir ! TAGS: $(CFILES) $(HFILES) ! etags `for i in $(HFILES) $(CFILES); do echo $(srcdir)/$$i ; done` # The standalone demangler (c++filt) has been moved to binutils. demangle: --- 279,286 ---- etags tags: TAGS etags-subdir ! TAGS: $(CFILES) ! etags `for i in $(CFILES); do echo $(srcdir)/$$i ; done` # The standalone demangler (c++filt) has been moved to binutils. demangle: *************** demangle: *** 209,215 **** @false ls: ! @echo Makefile $(HFILES) $(CFILES) # Need to deal with profiled libraries, too. --- 289,309 ---- @false ls: ! @echo Makefile $(CFILES) ! ! # Various targets for maintainers. ! ! maint-missing : ! @$(PERL) $(srcdir)/maint-tool -s $(srcdir) missing $(CFILES) $(REQUIRED_OFILES) $(CONFIGURED_OFILES) ! ! maint-buildall : $(REQUIRED_OFILES) $(CONFIGURED_OFILES) ! @true ! ! maint-undoc : $(srcdir)/functions.texi ! @$(PERL) $(srcdir)/maint-tool -s $(srcdir) undoc ! ! maint-deps : ! @$(PERL) $(srcdir)/maint-tool -s $(srcdir) deps $(INCDIR) # Need to deal with profiled libraries, too. *************** mostlyclean: mostlyclean-subdir *** 219,228 **** --- 313,327 ---- -rm -rf *.o pic core errs \#* *.E a.out -rm -f needed.awk needed2.awk errors dummy needed-list config.h stamp-* -rm -f $(CONFIG_H) $(NEEDED_LIST) stamp-picdir + -rm -f libiberty.aux libiberty.cp libiberty.cps libiberty.fn libiberty.ky + -rm -f libiberty.log libiberty.tmp libiberty.tps libiberty.pg + -rm -f libiberty.pgs libiberty.toc libiberty.tp libiberty.tpl libiberty.vr + -rm -f libtexi.stamp @$(MULTICLEAN) multi-clean DO=mostlyclean clean: clean-subdir $(MAKE) SUBDIRS="" mostlyclean -rm -f *.a required-list tmpmulti.out + -rm -f libiberty.dvi libiberty.info* libiberty.html @$(MULTICLEAN) multi-clean DO=clean distclean: distclean-subdir $(MAKE) SUBDIRS="" clean *************** stamp-h: config.in config.status Makefil *** 247,253 **** config.status: $(srcdir)/configure $(srcdir)/config.table $(SHELL) ./config.status --recheck - # Depending on config.h makes sure that config.status has been re-run # if needed. This prevents problems with parallel builds, in case # subdirectories need to run config.status also. --- 346,351 ---- *************** maintainer-clean-subdir: config.h *** 261,310 **** cd $$dir && $(MAKE) $$target; \ done ! $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS) $(ALLOCA): stamp-picdir ! alloca.o: config.h atexit.o: config.h ! argv.o: config.h alloca-conf.h $(INCDIR)/libiberty.h ! basename.o: $(INCDIR)/libiberty.h ! choose-temp.o: config.h clock.o: config.h ! concat.o: $(INCDIR)/libiberty.h ! cplus-dem.o: config.h $(INCDIR)/demangle.h ! cp-demangle.o: config.h $(INCDIR)/dyn-string.h $(INCDIR)/demangle.h ! dyn-string.o: config.h $(INCDIR)/dyn-string.h ! fdmatch.o: $(INCDIR)/libiberty.h ! fnmatch.o: config.h $(INCDIR)/fnmatch.h getcwd.o: config.h getopt.o: config.h $(INCDIR)/getopt.h getopt1.o: config.h $(INCDIR)/getopt.h getpagesize.o: config.h ! getpwd.o: config.h $(INCDIR)/libiberty.h ! getruntime.o: config.h $(INCDIR)/libiberty.h ! hex.o: $(INCDIR)/libiberty.h ! floatformat.o: $(INCDIR)/floatformat.h ! lbasename.o: $(INCDIR)/libiberty.h ! mkstemps.o: config.h ! md5.o: config.h ! objalloc.o: config.h $(INCDIR)/objalloc.h obstack.o: config.h $(INCDIR)/obstack.h ! partition.o: config.h $(INCDIR)/partition.h ! pexecute.o: config.h $(INCDIR)/libiberty.h rename.o: config.h ! setenv.o: config.h ! sort.o: config.h $(INCDIR)/sort.h $(INCDIR)/ansidecl.h ! spaces.o: $(INCDIR)/libiberty.h ! splay-tree.o: config.h $(INCDIR)/libiberty.h $(INCDIR)/splay-tree.h $(INCDIR)/ansidecl.h ! strerror.o: config.h $(INCDIR)/libiberty.h ! strsignal.o: config.h $(INCDIR)/libiberty.h ! strtol.o: config.h ! strtoul.o: config.h ! vasprintf.o: config.h ! xatexit.o: $(INCDIR)/libiberty.h ! xexit.o: config.h $(INCDIR)/libiberty.h ! xmalloc.o: config.h $(INCDIR)/libiberty.h ! xmemdup.o: config.h $(INCDIR)/libiberty.h ! xstrdup.o: config.h $(INCDIR)/libiberty.h ! xstrerror.o: config.h $(INCDIR)/libiberty.h waitpid.o: config.h ! hashtab.o: config.h $(INCDIR)/libiberty.h $(INCDIR)/hashtab.h $(INCDIR)/ansidecl.h --- 359,451 ---- cd $$dir && $(MAKE) $$target; \ done ! $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS): stamp-picdir ! $(CONFIGURED_OFILES): stamp-picdir ! # The dependencies in the remainder of this file are automatically ! # generated by "make maint-deps". Manual edits will be lost. ! ! _doprnt.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h ! alloca.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h ! argv.o: $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h ! asprintf.o: $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h atexit.o: config.h ! basename.o: $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \ ! $(INCDIR)/safe-ctype.h ! bsearch.o: config.h $(INCDIR)/ansidecl.h ! calloc.o: $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h ! choose-temp.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h clock.o: config.h ! concat.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h ! copysign.o: $(INCDIR)/ansidecl.h ! cp-demangle.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/demangle.h \ ! $(INCDIR)/dyn-string.h $(INCDIR)/getopt.h $(INCDIR)/libiberty.h ! cplus-dem.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/demangle.h \ ! $(INCDIR)/getopt.h $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h ! dyn-string.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/dyn-string.h \ ! $(INCDIR)/libiberty.h ! fdmatch.o: $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h ! fibheap.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/fibheap.h \ ! $(INCDIR)/libiberty.h ! floatformat.o: $(INCDIR)/ansidecl.h $(INCDIR)/floatformat.h ! fnmatch.o: config.h $(INCDIR)/fnmatch.h $(INCDIR)/safe-ctype.h getcwd.o: config.h getopt.o: config.h $(INCDIR)/getopt.h getopt1.o: config.h $(INCDIR)/getopt.h getpagesize.o: config.h ! getpwd.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h ! getruntime.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h ! hashtab.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/hashtab.h \ ! $(INCDIR)/libiberty.h ! hex.o: $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h ! lbasename.o: $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \ ! $(INCDIR)/safe-ctype.h ! make-temp-file.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h ! md5.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/md5.h ! memchr.o: $(INCDIR)/ansidecl.h ! memcmp.o: $(INCDIR)/ansidecl.h ! memcpy.o: $(INCDIR)/ansidecl.h ! memmove.o: $(INCDIR)/ansidecl.h ! memset.o: $(INCDIR)/ansidecl.h ! mkstemps.o: config.h $(INCDIR)/ansidecl.h ! objalloc.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/objalloc.h obstack.o: config.h $(INCDIR)/obstack.h ! partition.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \ ! $(INCDIR)/partition.h ! pexecute.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \ ! $(INCDIR)/safe-ctype.h ! putenv.o: config.h $(INCDIR)/ansidecl.h ! random.o: $(INCDIR)/ansidecl.h ! regex.o: config.h $(INCDIR)/xregex.h $(INCDIR)/xregex2.h rename.o: config.h ! safe-ctype.o: $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h ! setenv.o: config.h $(INCDIR)/ansidecl.h ! sigsetmask.o: $(INCDIR)/ansidecl.h ! sort.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \ ! $(INCDIR)/sort.h ! spaces.o: $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h ! splay-tree.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \ ! $(INCDIR)/splay-tree.h ! strcasecmp.o: $(INCDIR)/ansidecl.h ! strchr.o: $(INCDIR)/ansidecl.h ! strerror.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h ! strncasecmp.o: $(INCDIR)/ansidecl.h ! strncmp.o: $(INCDIR)/ansidecl.h ! strrchr.o: $(INCDIR)/ansidecl.h ! strsignal.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h ! strtod.o: $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h ! strtol.o: config.h $(INCDIR)/safe-ctype.h ! strtoul.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h ! ternary.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \ ! $(INCDIR)/ternary.h ! vasprintf.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h ! vfork.o: $(INCDIR)/ansidecl.h ! vprintf.o: $(INCDIR)/ansidecl.h ! vsprintf.o: $(INCDIR)/ansidecl.h waitpid.o: config.h ! xatexit.o: $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h ! xexit.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h ! xmalloc.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h ! xmemdup.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h ! xstrdup.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h ! xstrerror.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h diff -Nrc3pad gcc-3.0.4/libiberty/_doprnt.c gcc-3.1/libiberty/_doprnt.c *** gcc-3.0.4/libiberty/_doprnt.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/libiberty/_doprnt.c Tue Jan 22 20:03:29 2002 *************** *** 0 **** --- 1,303 ---- + /* Provide a version of _doprnt in terms of fprintf. + Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + Contributed by Kaveh Ghazi (ghazi@caip.rutgers.edu) 3/29/98 + + 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. */ + + #include "config.h" + #include "ansidecl.h" + #include "safe-ctype.h" + + #include + #ifdef ANSI_PROTOTYPES + #include + #else + #include + #endif + #ifdef HAVE_STRING_H + #include + #endif + #ifdef HAVE_STDLIB_H + #include + #endif + + #undef _doprnt + + #ifdef HAVE__DOPRNT + #define TEST + #endif + + #ifdef TEST /* Make sure to use the internal one. */ + #define _doprnt my_doprnt + #endif + + #define COPY_VA_INT \ + do { \ + const int value = abs (va_arg (ap, int)); \ + char buf[32]; \ + ptr++; /* Go past the asterisk. */ \ + *sptr = '\0'; /* NULL terminate sptr. */ \ + sprintf(buf, "%d", value); \ + strcat(sptr, buf); \ + while (*sptr) sptr++; \ + } while (0) + + #define PRINT_CHAR(CHAR) \ + do { \ + putc(CHAR, stream); \ + ptr++; \ + total_printed++; \ + continue; \ + } while (0) + + #define PRINT_TYPE(TYPE) \ + do { \ + int result; \ + TYPE value = va_arg (ap, TYPE); \ + *sptr++ = *ptr++; /* Copy the type specifier. */ \ + *sptr = '\0'; /* NULL terminate sptr. */ \ + result = fprintf(stream, specifier, value); \ + if (result == -1) \ + return -1; \ + else \ + { \ + total_printed += result; \ + continue; \ + } \ + } while (0) + + int + _doprnt (format, ap, stream) + const char * format; + va_list ap; + FILE * stream; + { + const char * ptr = format; + char specifier[128]; + int total_printed = 0; + + while (*ptr != '\0') + { + if (*ptr != '%') /* While we have regular characters, print them. */ + PRINT_CHAR(*ptr); + else /* We got a format specifier! */ + { + char * sptr = specifier; + int wide_width = 0, short_width = 0; + + *sptr++ = *ptr++; /* Copy the % and move forward. */ + + while (strchr ("-+ #0", *ptr)) /* Move past flags. */ + *sptr++ = *ptr++; + + if (*ptr == '*') + COPY_VA_INT; + else + while (ISDIGIT(*ptr)) /* Handle explicit numeric value. */ + *sptr++ = *ptr++; + + if (*ptr == '.') + { + *sptr++ = *ptr++; /* Copy and go past the period. */ + if (*ptr == '*') + COPY_VA_INT; + else + while (ISDIGIT(*ptr)) /* Handle explicit numeric value. */ + *sptr++ = *ptr++; + } + while (strchr ("hlL", *ptr)) + { + switch (*ptr) + { + case 'h': + short_width = 1; + break; + case 'l': + wide_width++; + break; + case 'L': + wide_width = 2; + break; + default: + abort(); + } + *sptr++ = *ptr++; + } + + switch (*ptr) + { + case 'd': + case 'i': + case 'o': + case 'u': + case 'x': + case 'X': + case 'c': + { + /* Short values are promoted to int, so just copy it + as an int and trust the C library printf to cast it + to the right width. */ + if (short_width) + PRINT_TYPE(int); + else + { + switch (wide_width) + { + case 0: + PRINT_TYPE(int); + break; + case 1: + PRINT_TYPE(long); + break; + case 2: + default: + #if defined(__GNUC__) || defined(HAVE_LONG_LONG) + PRINT_TYPE(long long); + #else + PRINT_TYPE(long); /* Fake it and hope for the best. */ + #endif + break; + } /* End of switch (wide_width) */ + } /* End of else statement */ + } /* End of integer case */ + break; + case 'f': + case 'e': + case 'E': + case 'g': + case 'G': + { + if (wide_width == 0) + PRINT_TYPE(double); + else + { + #if defined(__GNUC__) || defined(HAVE_LONG_DOUBLE) + PRINT_TYPE(long double); + #else + PRINT_TYPE(double); /* Fake it and hope for the best. */ + #endif + } + } + break; + case 's': + PRINT_TYPE(char *); + break; + case 'p': + PRINT_TYPE(void *); + break; + case '%': + PRINT_CHAR('%'); + break; + default: + abort(); + } /* End of switch (*ptr) */ + } /* End of else statement */ + } + + return total_printed; + } + + #ifdef TEST + + #include + #ifndef M_PI + #define M_PI (3.1415926535897932385) + #endif + + #define RESULT(x) do \ + { \ + int i = (x); \ + printf ("printed %d characters\n", i); \ + fflush(stdin); \ + } while (0) + + static int checkit PARAMS ((const char * format, ...)) ATTRIBUTE_PRINTF_1; + + static int + checkit VPARAMS ((const char* format, ...)) + { + int result; + VA_OPEN (args, format); + VA_FIXEDARG (args, char *, format); + + result = _doprnt (format, args, stdout); + VA_CLOSE (args); + + return result; + } + + int + main () + { + RESULT(checkit ("<%d>\n", 0x12345678)); + RESULT(printf ("<%d>\n", 0x12345678)); + + RESULT(checkit ("<%200d>\n", 5)); + RESULT(printf ("<%200d>\n", 5)); + + RESULT(checkit ("<%.300d>\n", 6)); + RESULT(printf ("<%.300d>\n", 6)); + + RESULT(checkit ("<%100.150d>\n", 7)); + RESULT(printf ("<%100.150d>\n", 7)); + + RESULT(checkit ("<%s>\n", + "jjjjjjjjjiiiiiiiiiiiiiiioooooooooooooooooppppppppppppaa\n\ + 777777777777777777333333333333366666666666622222222222777777777777733333")); + RESULT(printf ("<%s>\n", + "jjjjjjjjjiiiiiiiiiiiiiiioooooooooooooooooppppppppppppaa\n\ + 777777777777777777333333333333366666666666622222222222777777777777733333")); + + RESULT(checkit ("<%f><%0+#f>%s%d%s>\n", + 1.0, 1.0, "foo", 77, "asdjffffffffffffffiiiiiiiiiiixxxxx")); + RESULT(printf ("<%f><%0+#f>%s%d%s>\n", + 1.0, 1.0, "foo", 77, "asdjffffffffffffffiiiiiiiiiiixxxxx")); + + RESULT(checkit ("<%4f><%.4f><%%><%4.4f>\n", M_PI, M_PI, M_PI)); + RESULT(printf ("<%4f><%.4f><%%><%4.4f>\n", M_PI, M_PI, M_PI)); + + RESULT(checkit ("<%*f><%.*f><%%><%*.*f>\n", 3, M_PI, 3, M_PI, 3, 3, M_PI)); + RESULT(printf ("<%*f><%.*f><%%><%*.*f>\n", 3, M_PI, 3, M_PI, 3, 3, M_PI)); + + RESULT(checkit ("<%d><%i><%o><%u><%x><%X><%c>\n", + 75, 75, 75, 75, 75, 75, 75)); + RESULT(printf ("<%d><%i><%o><%u><%x><%X><%c>\n", + 75, 75, 75, 75, 75, 75, 75)); + + RESULT(checkit ("<%d><%i><%o><%u><%x><%X><%c>\n", + 75, 75, 75, 75, 75, 75, 75)); + RESULT(printf ("<%d><%i><%o><%u><%x><%X><%c>\n", + 75, 75, 75, 75, 75, 75, 75)); + + RESULT(checkit ("Testing (hd) short: <%d><%ld><%hd><%hd><%d>\n", 123, (long)234, 345, 123456789, 456)); + RESULT(printf ("Testing (hd) short: <%d><%ld><%hd><%hd><%d>\n", 123, (long)234, 345, 123456789, 456)); + + #if defined(__GNUC__) || defined (HAVE_LONG_LONG) + RESULT(checkit ("Testing (lld) long long: <%d><%lld><%d>\n", 123, 234234234234234234LL, 345)); + RESULT(printf ("Testing (lld) long long: <%d><%lld><%d>\n", 123, 234234234234234234LL, 345)); + RESULT(checkit ("Testing (Ld) long long: <%d><%Ld><%d>\n", 123, 234234234234234234LL, 345)); + RESULT(printf ("Testing (Ld) long long: <%d><%Ld><%d>\n", 123, 234234234234234234LL, 345)); + #endif + + #if defined(__GNUC__) || defined (HAVE_LONG_DOUBLE) + RESULT(checkit ("Testing (Lf) long double: <%.20f><%.20Lf><%0+#.20f>\n", + 1.23456, 1.234567890123456789L, 1.23456)); + RESULT(printf ("Testing (Lf) long double: <%.20f><%.20Lf><%0+#.20f>\n", + 1.23456, 1.234567890123456789L, 1.23456)); + #endif + + return 0; + } + #endif /* TEST */ diff -Nrc3pad gcc-3.0.4/libiberty/aclocal.m4 gcc-3.1/libiberty/aclocal.m4 *** gcc-3.0.4/libiberty/aclocal.m4 Wed Nov 22 08:32:26 2000 --- gcc-3.1/libiberty/aclocal.m4 Mon Dec 31 23:23:49 2001 *************** main () *** 48,53 **** --- 48,56 ---- p = (char *) mmap (0, MAP_LEN, PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, dev_zero, 0); if (p == (char *)-1) + p = (char *) mmap (0, MAP_LEN, PROT_READ|PROT_WRITE, + MAP_ANON|MAP_PRIVATE, -1, 0); + if (p == (char *)-1) exit (2); else { *************** define(AC_DEFINE_NOAUTOHEADER, *** 134,136 **** --- 137,191 ---- [#define] $1 ifelse($#, 2, [$2], $#, 3, [$2], 1) EOF ]) + + # We always want a C version of alloca() compiled into libiberty, + # because native-compiler support for the real alloca is so !@#$% + # unreliable that GCC has decided to use it only when being compiled + # by GCC. This is the part of AC_FUNC_ALLOCA that calculates the + # information alloca.c needs. + AC_DEFUN(libiberty_AC_FUNC_C_ALLOCA, + [AC_CACHE_CHECK(whether alloca needs Cray hooks, ac_cv_os_cray, + [AC_EGREP_CPP(webecray, + [#if defined(CRAY) && ! defined(CRAY2) + webecray + #else + wenotbecray + #endif + ], ac_cv_os_cray=yes, ac_cv_os_cray=no)]) + if test $ac_cv_os_cray = yes; then + for ac_func in _getb67 GETB67 getb67; do + AC_CHECK_FUNC($ac_func, + [AC_DEFINE_UNQUOTED(CRAY_STACKSEG_END, $ac_func, + [Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP + systems. This function is required for alloca.c support on those + systems.]) break]) + done + fi + + AC_CACHE_CHECK(stack direction for C alloca, ac_cv_c_stack_direction, + [AC_TRY_RUN([find_stack_direction () + { + static char *addr = 0; + auto char dummy; + if (addr == 0) + { + addr = &dummy; + return find_stack_direction (); + } + else + return (&dummy > addr) ? 1 : -1; + } + main () + { + exit (find_stack_direction() < 0); + }], + ac_cv_c_stack_direction=1, + ac_cv_c_stack_direction=-1, + ac_cv_c_stack_direction=0)]) + AC_DEFINE_UNQUOTED(STACK_DIRECTION, $ac_cv_c_stack_direction, + [Define if you know the direction of stack growth for your system; + otherwise it will be automatically deduced at run-time. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown]) + ]) diff -Nrc3pad gcc-3.0.4/libiberty/alloca-conf.h gcc-3.1/libiberty/alloca-conf.h *** gcc-3.0.4/libiberty/alloca-conf.h Mon Sep 27 17:45:52 1999 --- gcc-3.1/libiberty/alloca-conf.h Thu Jan 1 00:00:00 1970 *************** *** 1,24 **** - #include "config.h" - - #if defined(__GNUC__) && !defined(C_ALLOCA) - # ifndef alloca - # define alloca __builtin_alloca - # endif - #else /* ! defined (__GNUC__) */ - # ifdef _AIX - #pragma alloca - # else - # if defined(HAVE_ALLOCA_H) && !defined(C_ALLOCA) - # include - # else /* ! defined (HAVE_ALLOCA_H) */ - # ifdef __STDC__ - extern PTR alloca (size_t); - # else /* ! defined (__STDC__) */ - extern PTR alloca (); - # endif /* ! defined (__STDC__) */ - # endif /* ! defined (HAVE_ALLOCA_H) */ - # ifdef _WIN32 - # include - # endif - # endif /* ! defined (_AIX) */ - #endif /* ! defined (__GNUC__) */ --- 0 ---- diff -Nrc3pad gcc-3.0.4/libiberty/alloca.c gcc-3.1/libiberty/alloca.c *** gcc-3.0.4/libiberty/alloca.c Sat Sep 5 10:42:18 1998 --- gcc-3.1/libiberty/alloca.c Tue Oct 16 02:50:13 2001 *************** *** 21,30 **** --- 21,53 ---- allocating any. It is a good idea to use alloca(0) in your main control loop, etc. to force garbage collection. */ + /* + + @deftypefn Replacement void* alloca (size_t @var{size}) + + This function allocates memory which will be automatically reclaimed + after the procedure exits. The @libib{} implementation does not free + the memory immediately but will do so eventually during subsequent + calls to this function. Memory is allocated using @code{xmalloc} under + normal circumstances. + + The header file @file{alloca-conf.h} can be used in conjunction with the + GNU Autoconf test @code{AC_FUNC_ALLOCA} to test for and properly make + available this function. The @code{AC_FUNC_ALLOCA} test requires that + client code use a block of preprocessor code to be safe (see the Autoconf + manual for more); this header incorporates that logic and more, including + the possibility of a GCC built-in function. + + @end deftypefn + + */ + #ifdef HAVE_CONFIG_H #include #endif + #include + #ifdef HAVE_STRING_H #include #endif *************** *** 32,98 **** #include #endif ! #ifdef emacs ! #include "blockinput.h" ! #endif ! ! /* If compiling with GCC 2, this file's not needed. Except of course if ! the C alloca is explicitly requested. */ ! #if defined (USE_C_ALLOCA) || !defined (__GNUC__) || __GNUC__ < 2 ! ! /* If someone has defined alloca as a macro, ! there must be some other way alloca is supposed to work. */ ! #ifndef alloca ! ! #ifdef emacs ! #ifdef static ! /* actually, only want this if static is defined as "" ! -- this is for usg, in which emacs must undefine static ! in order to make unexec workable ! */ ! #ifndef STACK_DIRECTION ! you ! lose ! -- must know STACK_DIRECTION at compile-time ! #endif /* STACK_DIRECTION undefined */ ! #endif /* static */ ! #endif /* emacs */ /* If your stack is a linked list of frames, you have to provide an "address metric" ADDRESS_FUNCTION macro. */ #if defined (CRAY) && defined (CRAY_STACKSEG_END) ! long i00afunc (); #define ADDRESS_FUNCTION(arg) (char *) i00afunc (&(arg)) #else #define ADDRESS_FUNCTION(arg) &(arg) #endif - #if __STDC__ - typedef void *pointer; - #else - typedef char *pointer; - #endif - #ifndef NULL #define NULL 0 #endif - /* Different portions of Emacs need to call different versions of - malloc. The Emacs executable needs alloca to call xmalloc, because - ordinary malloc isn't protected from input signals. On the other - hand, the utilities in lib-src need alloca to call malloc; some of - them are very simple, and don't have an xmalloc routine. - - Non-Emacs programs expect this to call use xmalloc. - - Callers below should use malloc. */ - - #ifndef emacs - #define malloc xmalloc - #endif - extern pointer malloc (); - /* Define STACK_DIRECTION if you know the direction of stack growth for your system; otherwise it will be automatically deduced at run-time. --- 55,80 ---- #include #endif ! /* These variables are used by the ASTRDUP implementation that relies ! on C_alloca. */ ! const char *libiberty_optr; ! char *libiberty_nptr; ! unsigned long libiberty_len; /* If your stack is a linked list of frames, you have to provide an "address metric" ADDRESS_FUNCTION macro. */ #if defined (CRAY) && defined (CRAY_STACKSEG_END) ! static long i00afunc (); #define ADDRESS_FUNCTION(arg) (char *) i00afunc (&(arg)) #else #define ADDRESS_FUNCTION(arg) &(arg) #endif #ifndef NULL #define NULL 0 #endif /* Define STACK_DIRECTION if you know the direction of stack growth for your system; otherwise it will be automatically deduced at run-time. *************** static header *last_alloca_header = NULL *** 168,176 **** caller, but that method cannot be made to work for some implementations of C, for example under Gould's UTX/32. */ ! pointer ! alloca (size) ! unsigned size; { auto char probe; /* Probes stack depth: */ register char *depth = ADDRESS_FUNCTION (probe); --- 150,160 ---- caller, but that method cannot be made to work for some implementations of C, for example under Gould's UTX/32. */ ! /* @undocumented C_alloca */ ! ! PTR ! C_alloca (size) ! size_t size; { auto char probe; /* Probes stack depth: */ register char *depth = ADDRESS_FUNCTION (probe); *************** alloca (size) *** 186,202 **** { register header *hp; /* Traverses linked list. */ - #ifdef emacs - BLOCK_INPUT; - #endif - for (hp = last_alloca_header; hp != NULL;) if ((STACK_DIR > 0 && hp->h.deep > depth) || (STACK_DIR < 0 && hp->h.deep < depth)) { register header *np = hp->h.next; ! free ((pointer) hp); /* Collect garbage. */ hp = np; /* -> next header. */ } --- 170,182 ---- { register header *hp; /* Traverses linked list. */ for (hp = last_alloca_header; hp != NULL;) if ((STACK_DIR > 0 && hp->h.deep > depth) || (STACK_DIR < 0 && hp->h.deep < depth)) { register header *np = hp->h.next; ! free ((PTR) hp); /* Collect garbage. */ hp = np; /* -> next header. */ } *************** alloca (size) *** 204,213 **** break; /* Rest are not deeper. */ last_alloca_header = hp; /* -> last valid storage. */ - - #ifdef emacs - UNBLOCK_INPUT; - #endif } if (size == 0) --- 184,189 ---- *************** alloca (size) *** 216,222 **** /* Allocate combined header + user data storage. */ { ! register pointer new = malloc (sizeof (header) + size); /* Address of header. */ if (new == 0) --- 192,198 ---- /* Allocate combined header + user data storage. */ { ! register PTR new = xmalloc (sizeof (header) + size); /* Address of header. */ if (new == 0) *************** alloca (size) *** 229,235 **** /* User storage begins just after header. */ ! return (pointer) ((char *) new + sizeof (header)); } } --- 205,211 ---- /* User storage begins just after header. */ ! return (PTR) ((char *) new + sizeof (header)); } } *************** i00afunc (long address) *** 500,505 **** #endif /* not CRAY2 */ #endif /* CRAY */ - - #endif /* no alloca */ - #endif /* not GCC version 2 */ --- 476,478 ---- diff -Nrc3pad gcc-3.0.4/libiberty/argv.c gcc-3.1/libiberty/argv.c *** gcc-3.0.4/libiberty/argv.c Fri Dec 8 03:00:26 2000 --- gcc-3.1/libiberty/argv.c Wed Oct 17 21:15:40 2001 *************** *** 1,5 **** /* Create and destroy argument vectors (argv's) ! Copyright (C) 1992 Free Software Foundation, Inc. Written by Fred Fish @ Cygnus Support This file is part of the libiberty library. --- 1,5 ---- /* Create and destroy argument vectors (argv's) ! Copyright (C) 1992, 2001 Free Software Foundation, Inc. Written by Fred Fish @ Cygnus Support This file is part of the libiberty library. *************** extern char *strdup (); /* Duplicate a *** 48,54 **** #endif /* __STDC__ */ - #include "alloca-conf.h" #ifndef NULL #define NULL 0 --- 48,53 ---- *************** extern char *strdup (); /* Duplicate a *** 63,88 **** /* ! NAME ! ! dupargv -- duplicate an argument vector ! ! SYNOPSIS ! ! char **dupargv (vector) ! char **vector; ! ! DESCRIPTION ! ! Duplicate an argument vector. Simply scans through the ! vector, duplicating each argument until the ! terminating NULL is found. ! RETURNS ! Returns a pointer to the argument vector if ! successful. Returns NULL if there is insufficient memory to ! complete building the argument vector. */ --- 62,76 ---- /* ! @deftypefn Extension char** dupargv (char **@var{vector}) ! Duplicate an argument vector. Simply scans through @var{vector}, ! duplicating each argument until the terminating @code{NULL} is found. ! Returns a pointer to the argument vector if successful. Returns ! @code{NULL} if there is insufficient memory to complete building the ! argument vector. ! @end deftypefn */ *************** dupargv (argv) *** 120,143 **** /* ! NAME ! ! freeargv -- free an argument vector ! ! SYNOPSIS ! ! void freeargv (vector) ! char **vector; ! ! DESCRIPTION ! ! Free an argument vector that was built using buildargv. Simply scans ! through the vector, freeing the memory for each argument until the ! terminating NULL is found, and then frees the vector itself. ! RETURNS ! No value. */ --- 108,121 ---- /* ! @deftypefn Extension void freeargv (char **@var{vector}) ! Free an argument vector that was built using @code{buildargv}. Simply ! scans through @var{vector}, freeing the memory for each argument until ! the terminating @code{NULL} is found, and then frees @var{vector} ! itself. ! @end deftypefn */ *************** char **vector; *** 158,210 **** /* ! NAME ! ! buildargv -- build an argument vector from a string ! ! SYNOPSIS ! ! char **buildargv (sp) ! char *sp; ! ! DESCRIPTION ! Given a pointer to a string, parse the string extracting fields ! separated by whitespace and optionally enclosed within either single ! or double quotes (which are stripped off), and build a vector of ! pointers to copies of the string for each field. The input string ! remains unchanged. ! All of the memory for the pointer array and copies of the string ! is obtained from malloc. All of the memory can be returned to the ! system with the single function call freeargv, which takes the ! returned result of buildargv, as it's argument. ! The memory for the argv array is dynamically expanded as necessary. ! RETURNS ! Returns a pointer to the argument vector if successful. Returns NULL ! if the input string pointer is NULL or if there is insufficient ! memory to complete building the argument vector. ! NOTES ! In order to provide a working buffer for extracting arguments into, ! with appropriate stripping of quotes and translation of backslash ! sequences, we allocate a working buffer at least as long as the input ! string. This ensures that we always have enough space in which to ! work, since the extracted arg is never larger than the input string. ! If the input is a null string (as opposed to a NULL pointer), then ! buildarg returns an argv that has one arg, a null string. - Argv is always kept terminated with a NULL arg pointer, so it can - be passed to freeargv at any time, or returned, as appropriate. */ char **buildargv (input) ! char *input; { char *arg; char *copybuf; --- 136,181 ---- /* ! @deftypefn Extension char** buildargv (char *@var{sp}) ! Given a pointer to a string, parse the string extracting fields ! separated by whitespace and optionally enclosed within either single ! or double quotes (which are stripped off), and build a vector of ! pointers to copies of the string for each field. The input string ! remains unchanged. The last element of the vector is followed by a ! @code{NULL} element. ! All of the memory for the pointer array and copies of the string ! is obtained from @code{malloc}. All of the memory can be returned to the ! system with the single function call @code{freeargv}, which takes the ! returned result of @code{buildargv}, as it's argument. ! Returns a pointer to the argument vector if successful. Returns ! @code{NULL} if @var{sp} is @code{NULL} or if there is insufficient ! memory to complete building the argument vector. ! If the input is a null string (as opposed to a @code{NULL} pointer), ! then buildarg returns an argument vector that has one arg, a null ! string. ! @end deftypefn ! The memory for the argv array is dynamically expanded as necessary. ! In order to provide a working buffer for extracting arguments into, ! with appropriate stripping of quotes and translation of backslash ! sequences, we allocate a working buffer at least as long as the input ! string. This ensures that we always have enough space in which to ! work, since the extracted arg is never larger than the input string. ! The argument vector is always kept terminated with a @code{NULL} arg ! pointer, so it can be passed to @code{freeargv} at any time, or ! returned, as appropriate. */ char **buildargv (input) ! const char *input; { char *arg; char *copybuf; *************** char *input; *** 337,343 **** /* Simple little test driver. */ ! static char *tests[] = { "a simple command line", "arg 'foo' is single quoted", --- 308,314 ---- /* Simple little test driver. */ ! static const char *const tests[] = { "a simple command line", "arg 'foo' is single quoted", *************** static char *tests[] = *** 354,363 **** NULL }; ! main () { char **argv; ! char **test; char **targs; for (test = tests; *test != NULL; test++) --- 325,334 ---- NULL }; ! int main () { char **argv; ! const char *const *test; char **targs; for (test = tests; *test != NULL; test++) *************** main () *** 378,383 **** --- 349,355 ---- freeargv (argv); } + return 0; } #endif /* MAIN */ diff -Nrc3pad gcc-3.0.4/libiberty/asprintf.c gcc-3.1/libiberty/asprintf.c *** gcc-3.0.4/libiberty/asprintf.c Fri May 15 23:13:48 1998 --- gcc-3.1/libiberty/asprintf.c Wed Oct 17 21:15:40 2001 *************** Boston, MA 02111-1307, USA. */ *** 22,57 **** #include "ansidecl.h" #include "libiberty.h" ! #if defined (ANSI_PROTOTYPES) || defined (ALMOST_STDC) ! #define USE_STDARG ! #endif ! ! #ifdef USE_STDARG #include #else #include #endif ! /* VARARGS */ ! #ifdef USE_STDARG ! int ! asprintf (char **buf, const char *fmt, ...) ! #else int ! asprintf (buf, fmt, va_alist) ! char **buf; ! const char *fmt; ! va_dcl ! #endif { int status; ! va_list ap; ! #ifdef USE_STDARG ! va_start (ap, fmt); ! #else ! va_start (ap); ! #endif status = vasprintf (buf, fmt, ap); ! va_end (ap); return status; } --- 22,57 ---- #include "ansidecl.h" #include "libiberty.h" ! #ifdef ANSI_PROTOTYPES #include #else #include #endif ! /* ! ! @deftypefn Extension int asprintf (char **@var{resptr}, const char *@var{format}, ...) ! ! Like @code{sprintf}, but instead of passing a pointer to a buffer, you ! pass a pointer to a pointer. This function will compute the size of ! the buffer needed, allocate memory with @code{malloc}, and store a ! pointer to the allocated memory in @code{*@var{resptr}}. The value ! returned is the same as @code{sprintf} would return. If memory could ! not be allocated, zero is returned and @code{NULL} is stored in ! @code{*@var{resptr}}. ! ! @end deftypefn ! ! */ ! int ! asprintf VPARAMS ((char **buf, const char *fmt, ...)) { int status; ! VA_OPEN (ap, fmt); ! VA_FIXEDARG (ap, char **, buf); ! VA_FIXEDARG (ap, const char *, fmt); status = vasprintf (buf, fmt, ap); ! VA_CLOSE (ap); return status; } diff -Nrc3pad gcc-3.0.4/libiberty/atexit.c gcc-3.1/libiberty/atexit.c *** gcc-3.0.4/libiberty/atexit.c Fri May 15 23:42:27 1998 --- gcc-3.1/libiberty/atexit.c Wed Sep 26 18:16:17 2001 *************** *** 1,6 **** --- 1,16 ---- /* Wrapper to implement ANSI C's atexit using SunOS's on_exit. */ /* This function is in the public domain. --Mike Stump. */ + /* + + @deftypefn Supplemental int atexit (void (*@var{f})()) + + Causes function @var{f} to be called at exit. Returns 0. + + @end deftypefn + + */ + #include "config.h" #ifdef HAVE_ON_EXIT diff -Nrc3pad gcc-3.0.4/libiberty/basename.c gcc-3.1/libiberty/basename.c *** gcc-3.0.4/libiberty/basename.c Fri Dec 8 03:00:26 2000 --- gcc-3.1/libiberty/basename.c Wed Sep 26 18:16:17 2001 *************** *** 2,21 **** This file is in the public domain. */ /* - NAME - basename -- return pointer to last component of a pathname ! SYNOPSIS ! char *basename (const char *name) ! DESCRIPTION ! Given a pointer to a string containing a typical pathname ! (/usr/src/cmd/ls/ls.c for example), returns a pointer to the ! last component of the pathname ("ls.c" in this case). - BUGS - Presumes a UNIX or DOS/Windows style path with UNIX or DOS/Windows - style separators. */ #include "ansidecl.h" --- 2,15 ---- This file is in the public domain. */ /* ! @deftypefn Supplemental char* basename (const char *@var{name}) ! Returns a pointer to the last component of pathname @var{name}. ! Behavior is undefined if the pathname ends in a directory separator. ! ! @end deftypefn */ #include "ansidecl.h" diff -Nrc3pad gcc-3.0.4/libiberty/bcmp.c gcc-3.1/libiberty/bcmp.c *** gcc-3.0.4/libiberty/bcmp.c Fri May 15 23:13:51 1998 --- gcc-3.1/libiberty/bcmp.c Tue Oct 9 23:33:57 2001 *************** *** 3,30 **** /* ! NAME ! ! bcmp -- compare two memory regions ! ! SYNOPSIS ! ! int bcmp (char *from, char *to, int count) ! ! DESCRIPTION ! ! Compare two memory regions and return zero if they are identical, ! non-zero otherwise. If count is zero, return zero. ! ! NOTES ! No guarantee is made about the non-zero returned value. In ! particular, the results may be signficantly different than ! strcmp(), where the return value is guaranteed to be less than, ! equal to, or greater than zero, according to lexicographical ! sorting of the compared regions. ! BUGS */ --- 3,17 ---- /* ! @deftypefn Supplemental int bcmp (char *@var{x}, char *@var{y}, int @var{count}) ! Compares the first @var{count} bytes of two areas of memory. Returns ! zero if they are the same, nonzero otherwise. Returns zero if ! @var{count} is zero. A nonzero result only indicates a difference, ! it does not indicate any sorting order (say, by having a positive ! result mean @var{x} sorts before @var{y}). ! @end deftypefn */ diff -Nrc3pad gcc-3.0.4/libiberty/bcopy.c gcc-3.1/libiberty/bcopy.c *** gcc-3.0.4/libiberty/bcopy.c Fri May 15 23:13:52 1998 --- gcc-3.1/libiberty/bcopy.c Wed Sep 26 18:16:17 2001 *************** *** 1,19 **** /* bcopy -- copy memory regions of arbitary length ! NAME ! bcopy -- copy memory regions of arbitrary length ! ! SYNOPSIS ! void bcopy (char *in, char *out, int length) ! DESCRIPTION ! Copy LENGTH bytes from memory region pointed to by IN to memory ! region pointed to by OUT. ! BUGS ! Significant speed improvements can be made in some cases by ! implementing copies of multiple bytes simultaneously, or unrolling ! the copy loop. */ --- 1,11 ---- /* bcopy -- copy memory regions of arbitary length ! @deftypefn Supplemental void bcopy (char *@var{in}, char *@var{out}, int @var{length}) ! Copies @var{length} bytes from memory region @var{in} to region ! @var{out}. The use of @code{bcopy} is deprecated in new programs. ! @end deftypefn */ diff -Nrc3pad gcc-3.0.4/libiberty/bsearch.c gcc-3.1/libiberty/bsearch.c *** gcc-3.0.4/libiberty/bsearch.c Tue Dec 26 22:16:22 2000 --- gcc-3.1/libiberty/bsearch.c Wed Sep 26 18:16:17 2001 *************** *** 28,33 **** --- 28,50 ---- * SUCH DAMAGE. */ + /* + + @deftypefn Supplemental void* bsearch (const void *@var{key}, const void *@var{base}, size_t @var{nmemb}, size_t @var{size}, int (*@var{compar})(const void *, const void *)) + + Performs a search over an array of @var{nmemb} elements pointed to by + @var{base} for a member that matches the object pointed to by @var{key}. + The size of each member is specified by @var{size}. The array contents + should be sorted in ascending order according to the @var{compar} + comparison function. This routine should take two arguments pointing to + the @var{key} and to an array member, in that order, and should return an + integer less than, equal to, or greater than zero if the @var{key} object + is respectively less than, matching, or greater than the array member. + + @end deftypefn + + */ + #include "config.h" #include "ansidecl.h" #include /* size_t */ diff -Nrc3pad gcc-3.0.4/libiberty/bzero.c gcc-3.1/libiberty/bzero.c *** gcc-3.0.4/libiberty/bzero.c Fri May 15 23:13:53 1998 --- gcc-3.1/libiberty/bzero.c Wed Sep 26 18:16:17 2001 *************** *** 2,20 **** This function is in the public domain. */ /* - NAME - bzero -- zero the contents of a specified memory region ! SYNOPSIS ! void bzero (char *to, int count) ! DESCRIPTION ! Zero COUNT bytes of memory pointed to by TO. ! BUGS ! Significant speed enhancements may be made in some environments ! by zeroing more than a single byte at a time, or by unrolling the ! loop. */ --- 2,14 ---- This function is in the public domain. */ /* ! @deftypefn Supplemental void bzero (char *@var{mem}, int @var{count}) ! Zeros @var{count} bytes starting at @var{mem}. Use of this function ! is deprecated in favor of @code{memset}. ! @end deftypefn */ diff -Nrc3pad gcc-3.0.4/libiberty/calloc.c gcc-3.1/libiberty/calloc.c *** gcc-3.0.4/libiberty/calloc.c Mon Oct 18 15:25:01 1999 --- gcc-3.1/libiberty/calloc.c Wed Sep 26 18:16:17 2001 *************** *** 1,5 **** --- 1,16 ---- /* calloc -- allocate memory which has been initialized to zero. This function is in the public domain. */ + + /* + + @deftypefn Supplemental void* calloc (size_t @var{nelem}, size_t @var{elsize}) + + Uses @code{malloc} to allocate storage for @var{nelem} objects of + @var{elsize} bytes each, then zeros the memory. + + @end deftypefn + + */ #include "ansidecl.h" #include "libiberty.h" diff -Nrc3pad gcc-3.0.4/libiberty/choose-temp.c gcc-3.1/libiberty/choose-temp.c *** gcc-3.0.4/libiberty/choose-temp.c Wed Jun 7 21:13:14 2000 --- gcc-3.1/libiberty/choose-temp.c Wed Oct 17 21:15:40 2001 *************** License along with libiberty; see the fi *** 17,140 **** write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - /* This file exports two functions: choose_temp_base and make_temp_file. */ - #ifdef HAVE_CONFIG_H #include "config.h" #endif #include /* May get P_tmpdir. */ - #include - #ifdef HAVE_UNISTD_H - #include - #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif - #ifdef HAVE_SYS_FILE_H - #include /* May get R_OK, etc. on some systems. */ - #endif - - #ifndef R_OK - #define R_OK 4 - #define W_OK 2 - #define X_OK 1 - #endif #include "libiberty.h" ! extern int mkstemps (); ! ! #ifndef IN_GCC ! #if defined (__MSDOS__) || (defined (_WIN32) && ! defined (__CYGWIN__) && ! defined (_UWIN)) ! #define DIR_SEPARATOR '\\' ! #endif ! #endif ! ! #ifndef DIR_SEPARATOR ! #define DIR_SEPARATOR '/' ! #endif ! ! /* On MSDOS, write temp files in current dir ! because there's no place else we can expect to use. */ ! /* ??? Although the current directory is tried as a last resort, ! this is left in so that on MSDOS it is preferred to /tmp on the ! off chance that someone requires this, since that was the previous ! behaviour. */ ! #ifdef __MSDOS__ ! #ifndef P_tmpdir ! #define P_tmpdir "." ! #endif ! #endif /* Name of temporary file. mktemp requires 6 trailing X's. */ #define TEMP_FILE "ccXXXXXX" ! /* Subroutine of choose_temp_base. ! If BASE is non-NULL, return it. ! Otherwise it checks if DIR is a usable directory. ! If success, DIR is returned. ! Otherwise NULL is returned. */ ! static const char *try PARAMS ((const char *, const char *)); ! static const char * ! try (dir, base) ! const char *dir, *base; ! { ! if (base != 0) ! return base; ! if (dir != 0 ! && access (dir, R_OK | W_OK | X_OK) == 0) ! return dir; ! return 0; ! } ! /* Return a prefix for temporary file names or NULL if unable to find one. ! The current directory is chosen if all else fails so the program is ! exited if a temporary directory can't be found (mktemp fails). ! The buffer for the result is obtained with xmalloc. ! This function is provided for backwards compatability only. It use ! is not recommended. */ char * choose_temp_base () { ! const char *base = 0; char *temp_filename; int len; - static char tmp[] = { DIR_SEPARATOR, 't', 'm', 'p', 0 }; - static char usrtmp[] = { DIR_SEPARATOR, 'u', 's', 'r', DIR_SEPARATOR, 't', 'm', 'p', 0 }; - - base = try (getenv ("TMPDIR"), base); - base = try (getenv ("TMP"), base); - base = try (getenv ("TEMP"), base); - - #ifdef P_tmpdir - base = try (P_tmpdir, base); - #endif - - /* Try /usr/tmp, then /tmp. */ - base = try (usrtmp, base); - base = try (tmp, base); - - /* If all else fails, use the current directory! */ - if (base == 0) - base = "."; len = strlen (base); ! temp_filename = xmalloc (len + 1 /*DIR_SEPARATOR*/ ! + strlen (TEMP_FILE) + 1); strcpy (temp_filename, base); - - if (len != 0 - && temp_filename[len-1] != '/' - && temp_filename[len-1] != DIR_SEPARATOR) - temp_filename[len++] = DIR_SEPARATOR; strcpy (temp_filename + len, TEMP_FILE); mktemp (temp_filename); --- 17,68 ---- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include /* May get P_tmpdir. */ #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #include "libiberty.h" ! extern char *choose_tmpdir PARAMS ((void)); /* Name of temporary file. mktemp requires 6 trailing X's. */ #define TEMP_FILE "ccXXXXXX" + #define TEMP_FILE_LEN (sizeof(TEMP_FILE) - 1) ! /* ! @deftypefn Extension char* choose_temp_base (void) ! Return a prefix for temporary file names or @code{NULL} if unable to ! find one. The current directory is chosen if all else fails so the ! program is exited if a temporary directory can't be found (@code{mktemp} ! fails). The buffer for the result is obtained with @code{xmalloc}. ! This function is provided for backwards compatability only. Its use is ! not recommended. ! @end deftypefn ! ! */ char * choose_temp_base () { ! const char *base = choose_tmpdir (); char *temp_filename; int len; len = strlen (base); ! temp_filename = xmalloc (len + TEMP_FILE_LEN + 1); strcpy (temp_filename, base); strcpy (temp_filename + len, TEMP_FILE); mktemp (temp_filename); *************** choose_temp_base () *** 142,205 **** abort (); return temp_filename; } - /* Return a temporary file name (as a string) or NULL if unable to create - one. */ - - char * - make_temp_file (suffix) - const char *suffix; - { - const char *base = 0; - char *temp_filename; - int base_len, suffix_len; - int fd; - static char tmp[] = { DIR_SEPARATOR, 't', 'm', 'p', 0 }; - static char usrtmp[] = { DIR_SEPARATOR, 'u', 's', 'r', DIR_SEPARATOR, 't', 'm', 'p', 0 }; - - base = try (getenv ("TMPDIR"), base); - base = try (getenv ("TMP"), base); - base = try (getenv ("TEMP"), base); - - #ifdef P_tmpdir - base = try (P_tmpdir, base); - #endif - - /* Try /usr/tmp, then /tmp. */ - base = try (usrtmp, base); - base = try (tmp, base); - - /* If all else fails, use the current directory! */ - if (base == 0) - base = "."; - - base_len = strlen (base); - - if (suffix) - suffix_len = strlen (suffix); - else - suffix_len = 0; - - temp_filename = xmalloc (base_len + 1 /*DIR_SEPARATOR*/ - + strlen (TEMP_FILE) - + suffix_len + 1); - strcpy (temp_filename, base); - - if (base_len != 0 - && temp_filename[base_len-1] != '/' - && temp_filename[base_len-1] != DIR_SEPARATOR) - temp_filename[base_len++] = DIR_SEPARATOR; - strcpy (temp_filename + base_len, TEMP_FILE); - - if (suffix) - strcat (temp_filename, suffix); - - fd = mkstemps (temp_filename, suffix_len); - /* If mkstemps failed, then something bad is happening. Maybe we should - issue a message about a possible security attack in progress? */ - if (fd == -1) - abort (); - /* Similarly if we can not close the file. */ - if (close (fd)) - abort (); - return temp_filename; - } --- 70,72 ---- diff -Nrc3pad gcc-3.0.4/libiberty/clock.c gcc-3.1/libiberty/clock.c *** gcc-3.0.4/libiberty/clock.c Mon Sep 27 17:45:52 1999 --- gcc-3.1/libiberty/clock.c Sun Oct 7 21:53:31 2001 *************** the resulting executable to be covered b *** 22,27 **** --- 22,39 ---- This exception does not however invalidate any other reasons why the executable file might be covered by the GNU General Public License. */ + /* + + @deftypefn Supplemental long clock (void) + + Returns an approximation of the CPU time used by the process as a + @code{clock_t}; divide this number by @samp{CLOCKS_PER_SEC} to get the + number of seconds used. + + @end deftypefn + + */ + #include "config.h" #ifdef HAVE_GETRUSAGE diff -Nrc3pad gcc-3.0.4/libiberty/concat.c gcc-3.1/libiberty/concat.c *** gcc-3.0.4/libiberty/concat.c Fri May 15 23:13:56 1998 --- gcc-3.1/libiberty/concat.c Wed Oct 17 21:15:40 2001 *************** *** 1,5 **** /* Concatenate variable number of strings. ! Copyright (C) 1991, 1994 Free Software Foundation, Inc. Written by Fred Fish @ Cygnus Support This file is part of the libiberty library. --- 1,5 ---- /* Concatenate variable number of strings. ! Copyright (C) 1991, 1994, 2001 Free Software Foundation, Inc. Written by Fred Fish @ Cygnus Support This file is part of the libiberty library. *************** Boston, MA 02111-1307, USA. */ *** 21,44 **** /* ! NAME ! ! concat -- concatenate a variable number of strings ! ! SYNOPSIS ! ! #include ! ! char *concat (s1, s2, s3, ..., NULL) ! ! DESCRIPTION ! Concatenate a variable number of strings and return the result ! in freshly malloc'd memory. ! Returns NULL if insufficient memory is available. The argument ! list is terminated by the first NULL pointer encountered. Pointers ! to empty strings are ignored. NOTES --- 21,34 ---- /* ! @deftypefn Extension char* concat (const char *@var{s1}, const char *@var{s2}, @dots{}, @code{NULL}) ! Concatenate zero or more of strings and return the result in freshly ! @code{xmalloc}ed memory. Returns @code{NULL} if insufficient memory is ! available. The argument list is terminated by the first @code{NULL} ! pointer encountered. Pointers to empty strings are ignored. ! @end deftypefn NOTES *************** NOTES *** 50,60 **** --- 40,55 ---- deal with low memory situations itself, it should supply an xmalloc that just directly invokes malloc and blindly returns whatever malloc returns. + */ + #ifdef HAVE_CONFIG_H + #include "config.h" + #endif #include "ansidecl.h" #include "libiberty.h" + #include /* size_t */ #ifdef ANSI_PROTOTYPES #include *************** NOTES *** 62,151 **** #include #endif ! #ifdef __STDC__ ! #include ! extern size_t strlen (const char *s); ! #else ! extern int strlen (); #endif ! #define NULLP (char *)0 - /* VARARGS */ - #ifdef ANSI_PROTOTYPES char * ! concat (const char *first, ...) ! #else char * ! concat (va_alist) ! va_dcl ! #endif { ! register int length; ! register char *newstr; ! register char *end; ! register const char *arg; ! va_list args; ! #ifndef ANSI_PROTOTYPES ! const char *first; ! #endif ! /* First compute the size of the result and get sufficient memory. */ ! #ifdef ANSI_PROTOTYPES ! va_start (args, first); ! #else ! va_start (args); ! first = va_arg (args, const char *); ! #endif ! if (first == NULLP) ! length = 0; ! else ! { ! length = strlen (first); ! while ((arg = va_arg (args, const char *)) != NULLP) ! { ! length += strlen (arg); ! } ! } ! newstr = (char *) xmalloc (length + 1); ! va_end (args); /* Now copy the individual pieces to the result string. */ ! if (newstr != NULLP) ! { ! #ifdef ANSI_PROTOTYPES ! va_start (args, first); ! #else ! va_start (args); ! first = va_arg (args, const char *); ! #endif ! end = newstr; ! if (first != NULLP) ! { ! arg = first; ! while (*arg) ! { ! *end++ = *arg++; ! } ! while ((arg = va_arg (args, const char *)) != NULLP) ! { ! while (*arg) ! { ! *end++ = *arg++; ! } ! } ! } ! *end = '\000'; ! va_end (args); ! } ! return (newstr); } #ifdef MAIN /* Simple little test driver. */ --- 57,220 ---- #include #endif ! # if HAVE_STRING_H ! # include ! # else ! # if HAVE_STRINGS_H ! # include ! # endif ! # endif ! ! #if HAVE_STDLIB_H ! #include #endif ! static inline unsigned long vconcat_length PARAMS ((const char *, va_list)); ! static inline unsigned long ! vconcat_length (first, args) ! const char *first; ! va_list args; ! { ! unsigned long length = 0; ! const char *arg; ! ! for (arg = first; arg ; arg = va_arg (args, const char *)) ! length += strlen (arg); ! ! return length; ! } ! ! static inline char *vconcat_copy PARAMS ((char *, const char *, va_list)); ! static inline char * ! vconcat_copy (dst, first, args) ! char *dst; ! const char *first; ! va_list args; ! { ! char *end = dst; ! const char *arg; ! ! for (arg = first; arg ; arg = va_arg (args, const char *)) ! { ! unsigned long length = strlen (arg); ! memcpy (end, arg, length); ! end += length; ! } ! *end = '\000'; ! ! return dst; ! } ! ! /* @undocumented concat_length */ ! ! unsigned long ! concat_length VPARAMS ((const char *first, ...)) ! { ! unsigned long length; ! ! VA_OPEN (args, first); ! VA_FIXEDARG (args, const char *, first); ! length = vconcat_length (first, args); ! VA_CLOSE (args); ! ! return length; ! } ! ! /* @undocumented concat_copy */ char * ! concat_copy VPARAMS ((char *dst, const char *first, ...)) ! { ! char *save_dst; ! ! VA_OPEN (args, first); ! VA_FIXEDARG (args, char *, dst); ! VA_FIXEDARG (args, const char *, first); ! vconcat_copy (dst, first, args); ! save_dst = dst; /* With K&R C, dst goes out of scope here. */ ! VA_CLOSE (args); ! ! return save_dst; ! } ! ! char *libiberty_concat_ptr; ! ! /* @undocumented concat_copy2 */ ! char * ! concat_copy2 VPARAMS ((const char *first, ...)) { ! VA_OPEN (args, first); ! VA_FIXEDARG (args, const char *, first); ! vconcat_copy (libiberty_concat_ptr, first, args); ! VA_CLOSE (args); ! return libiberty_concat_ptr; ! } ! char * ! concat VPARAMS ((const char *first, ...)) ! { ! char *newstr; ! /* First compute the size of the result and get sufficient memory. */ ! VA_OPEN (args, first); ! VA_FIXEDARG (args, const char *, first); ! newstr = (char *) xmalloc (vconcat_length (first, args) + 1); ! VA_CLOSE (args); /* Now copy the individual pieces to the result string. */ + VA_OPEN (args, first); + VA_FIXEDARG (args, const char *, first); + vconcat_copy (newstr, first, args); + VA_CLOSE (args); ! return newstr; ! } ! /* ! ! @deftypefn Extension char* reconcat (char *@var{optr}, const char *@var{s1}, @dots{}, @code{NULL}) ! ! Same as @code{concat}, except that if @var{optr} is not @code{NULL} it ! is freed after the string is created. This is intended to be useful ! when you're extending an existing string or building up a string in a ! loop: ! ! @example ! str = reconcat (str, "pre-", str, NULL); ! @end example ! ! @end deftypefn ! ! */ ! ! char * ! reconcat VPARAMS ((char *optr, const char *first, ...)) ! { ! char *newstr; ! ! /* First compute the size of the result and get sufficient memory. */ ! VA_OPEN (args, first); ! VA_FIXEDARG (args, char *, optr); ! VA_FIXEDARG (args, const char *, first); ! newstr = (char *) xmalloc (vconcat_length (first, args) + 1); ! VA_CLOSE (args); ! ! /* Now copy the individual pieces to the result string. */ ! VA_OPEN (args, first); ! VA_FIXEDARG (args, char *, optr); ! VA_FIXEDARG (args, const char *, first); ! vconcat_copy (newstr, first, args); ! if (optr) /* Done before VA_CLOSE so optr stays in scope for K&R C. */ ! free (optr); ! VA_CLOSE (args); ! ! return newstr; } #ifdef MAIN + #define NULLP (char *)0 /* Simple little test driver. */ diff -Nrc3pad gcc-3.0.4/libiberty/config/mh-beos gcc-3.1/libiberty/config/mh-beos *** gcc-3.0.4/libiberty/config/mh-beos Mon Sep 27 17:45:52 1999 --- gcc-3.1/libiberty/config/mh-beos Thu Jan 1 00:00:00 1970 *************** *** 1,7 **** - # Host makefile fragment for BeOS - - # This is a temporary hack until the wimpy default 64k stack - # limit in BeOS is either increased or made user settable somehow. - # This probably won't happen until after the DR9 release. - - EXTRA_OFILES = alloca.o --- 0 ---- diff -Nrc3pad gcc-3.0.4/libiberty/config.in gcc-3.1/libiberty/config.in *** gcc-3.0.4/libiberty/config.in Tue Dec 26 22:16:22 2000 --- gcc-3.1/libiberty/config.in Wed Nov 28 01:37:24 2001 *************** *** 1,21 **** ! /* config.in. Generated automatically from configure.in by autoheader. */ ! ! /* Define if using alloca.c. */ ! #undef C_ALLOCA /* Define to empty if the keyword does not work. */ #undef const - /* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems. - This function is required for alloca.c support on those systems. */ - #undef CRAY_STACKSEG_END - - /* Define if you have alloca, as a function or macro. */ - #undef HAVE_ALLOCA - - /* Define if you have and it should be used (not on Ultrix). */ - #undef HAVE_ALLOCA_H - /* Define if you have a working `mmap' system call. */ #undef HAVE_MMAP --- 1,8 ---- ! /* config.in. Generated automatically from configure.in by autoheader 2.13. */ /* Define to empty if the keyword does not work. */ #undef const /* Define if you have a working `mmap' system call. */ #undef HAVE_MMAP *************** *** 34,48 **** /* Define if you need to in order for stat and other things to work. */ #undef _POSIX_SOURCE - /* If using the C implementation of alloca, define if you know the - direction of stack growth for your system; otherwise it will be - automatically deduced at run-time. - STACK_DIRECTION > 0 => grows toward higher addresses - STACK_DIRECTION < 0 => grows toward lower addresses - STACK_DIRECTION = 0 => direction of growth unknown - */ - #undef STACK_DIRECTION - /* Define if you have the ANSI C header files. */ #undef STDC_HEADERS --- 21,26 ---- *************** *** 52,57 **** --- 30,38 ---- /* Define vfork as fork if vfork does not work. */ #undef vfork + /* Define if you have the _doprnt function. */ + #undef HAVE__DOPRNT + /* Define if you have the asprintf function. */ #undef HAVE_ASPRINTF *************** *** 79,84 **** --- 60,68 ---- /* Define if you have the clock function. */ #undef HAVE_CLOCK + /* Define if you have the ffs function. */ + #undef HAVE_FFS + /* Define if you have the getcwd function. */ #undef HAVE_GETCWD *************** *** 199,204 **** --- 183,191 ---- /* Define if you have the waitpid function. */ #undef HAVE_WAITPID + /* Define if you have the header file. */ + #undef HAVE_ALLOCA_H + /* Define if you have the header file. */ #undef HAVE_FCNTL_H *************** *** 241,246 **** --- 228,236 ---- /* Define if errno must be declared even when is included. */ #undef NEED_DECLARATION_ERRNO + /* Define if you have the `uintptr_t' type. */ + #undef HAVE_UINTPTR_T + /* Define if you have the sys_errlist variable. */ #undef HAVE_SYS_ERRLIST *************** *** 250,252 **** --- 240,254 ---- /* Define if you have the sys_siglist variable. */ #undef HAVE_SYS_SIGLIST + /* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP + systems. This function is required for alloca.c support on those + systems. */ + #undef CRAY_STACKSEG_END + + /* Define if you know the direction of stack growth for your system; + otherwise it will be automatically deduced at run-time. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ + #undef STACK_DIRECTION + diff -Nrc3pad gcc-3.0.4/libiberty/config.table gcc-3.1/libiberty/config.table *** gcc-3.0.4/libiberty/config.table Thu May 11 14:16:25 2000 --- gcc-3.1/libiberty/config.table Tue Mar 6 09:52:35 2001 *************** case "${host}" in *** 6,12 **** *-*-freebsd2.2.[012]) frag=mh-fbsd21 ;; i370-*-opened*) frag=mh-openedition ;; i[345]86-*-windows*) frag=mh-windows ;; - *-*-beos*) frag=mh-beos ;; esac frags=$frag --- 6,11 ---- diff -Nrc3pad gcc-3.0.4/libiberty/configure gcc-3.1/libiberty/configure *** gcc-3.0.4/libiberty/configure Tue Jan 22 22:29:04 2002 --- gcc-3.1/libiberty/configure Thu Jan 31 18:19:38 2002 *************** ac_help="$ac_help *** 17,22 **** --- 17,26 ---- --with-cross-host=HOST Configuring with a cross compiler" ac_help="$ac_help --with-newlib Configuring with newlib" + ac_help="$ac_help + --enable-maintainer-mode + enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer" # Initialize some variables set by options. # The variables have the same names as the options, with *************** ac_configure=$ac_aux_dir/configure # Thi *** 581,593 **** # Make sure we can run config.sub. if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then : else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } fi echo $ac_n "checking host system type""... $ac_c" 1>&6 ! echo "configure:591: checking host system type" >&5 host_alias=$host case "$host_alias" in --- 585,703 ---- + echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6 + echo "configure:590: checking whether to enable maintainer-specific portions of Makefiles" >&5 + # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. + if test "${enable_maintainer_mode+set}" = set; then + enableval="$enable_maintainer_mode" + maintainer_mode=$enableval + else + maintainer_mode=no + fi + + + echo "$ac_t""$maintainer_mode" 1>&6 + + if test "$maintainer_mode" = "yes"; then + MAINT='' + NOTMAINT='#' + else + MAINT='#' + NOTMAINT='' + fi + + # Do we have a single-tree copy of texinfo? Even if we do, we can't + # rely on it - libiberty is built before texinfo. + # Extract the first word of "makeinfo", so it can be a program name with args. + set dummy makeinfo; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 + echo "configure:615: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_MAKEINFO'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + if test -n "$MAKEINFO"; then + ac_cv_prog_MAKEINFO="$MAKEINFO" # Let the user override the test. + else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_MAKEINFO="makeinfo" + break + fi + done + IFS="$ac_save_ifs" + fi + fi + MAKEINFO="$ac_cv_prog_MAKEINFO" + if test -n "$MAKEINFO"; then + echo "$ac_t""$MAKEINFO" 1>&6 + else + echo "$ac_t""no" 1>&6 + fi + + if test "x$MAKEINFO" = "x"; then + MAKEINFO="@echo makeinfo missing; true" + BUILD_INFO= + else + BUILD_INFO=info + case x"`$MAKEINFO --version | grep 'GNU texinfo'`" in + x*\ [1-3].* ) + MAKEINFO="@echo $MAKEINFO is too old, 4.0 or newer required; true" + BUILD_INFO= + echo "configure: warning: + *** Makeinfo is too old. Info documentation will not be built." 1>&2 + ;; + esac + fi + + + + # Extract the first word of "perl", so it can be a program name with args. + set dummy perl; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 + echo "configure:661: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_PERL'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + if test -n "$PERL"; then + ac_cv_prog_PERL="$PERL" # Let the user override the test. + else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_PERL="perl" + break + fi + done + IFS="$ac_save_ifs" + fi + fi + PERL="$ac_cv_prog_PERL" + if test -n "$PERL"; then + echo "$ac_t""$PERL" 1>&6 + else + echo "$ac_t""no" 1>&6 + fi + + if test x"$PERL" = x""; then + HAVE_PERL='#' + else + HAVE_PERL='' + fi + + + # Make sure we can run config.sub. if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then : else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } fi echo $ac_n "checking host system type""... $ac_c" 1>&6 ! echo "configure:701: checking host system type" >&5 host_alias=$host case "$host_alias" in *************** echo "$ac_t""$host" 1>&6 *** 610,616 **** echo $ac_n "checking build system type""... $ac_c" 1>&6 ! echo "configure:614: checking build system type" >&5 build_alias=$build case "$build_alias" in --- 720,726 ---- echo $ac_n "checking build system type""... $ac_c" 1>&6 ! echo "configure:724: checking build system type" >&5 build_alias=$build case "$build_alias" in *************** fi *** 636,642 **** # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:640: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 746,752 ---- # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:750: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 668,674 **** # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:672: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 778,784 ---- # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:782: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** if test -n "$ac_tool_prefix"; then *** 700,706 **** # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:704: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 810,816 ---- # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:814: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 737,743 **** # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:741: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 847,853 ---- # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:851: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** if test -z "$CC"; then *** 767,773 **** # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:771: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 877,883 ---- # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:881: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 816,822 **** fi echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 ! echo "configure:820: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 926,932 ---- fi echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 ! echo "configure:930: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** else *** 825,831 **** yes; #endif EOF ! if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:829: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no --- 935,941 ---- yes; #endif EOF ! if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:939: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no *************** if test $ac_cv_prog_gcc = yes; then *** 841,847 **** ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 ! echo "configure:845: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 951,957 ---- ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 ! echo "configure:955: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 872,878 **** echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6 ! echo "configure:876: checking for POSIXized ISC" >&5 if test -d /etc/conf/kconfig.d && grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1 then --- 982,988 ---- echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6 ! echo "configure:986: checking for POSIXized ISC" >&5 if test -d /etc/conf/kconfig.d && grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1 then *************** else *** 893,904 **** fi echo $ac_n "checking for working const""... $ac_c" 1>&6 ! echo "configure:897: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:1007: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else --- 1057,1063 ---- ; return 0; } EOF ! if { (eval echo configure:1061: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else *************** EOF *** 968,988 **** fi echo $ac_n "checking for inline""... $ac_c" 1>&6 ! echo "configure:972: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else --- 1078,1098 ---- fi echo $ac_n "checking for inline""... $ac_c" 1>&6 ! echo "configure:1082: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else *************** esac *** 1025,1031 **** # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 ! echo "configure:1029: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 1135,1141 ---- # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 ! echo "configure:1139: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** host_makefile_frag=${frag} *** 1086,1092 **** # able to link anything, it had better be able to at least compile # something. echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 ! echo "configure:1090: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= --- 1196,1202 ---- # able to link anything, it had better be able to at least compile # something. echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 ! echo "configure:1200: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= *************** else *** 1101,1113 **** # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:1111: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : --- 1211,1223 ---- # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:1221: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : *************** else *** 1118,1130 **** rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:1128: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : --- 1228,1240 ---- rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:1238: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : *************** else *** 1135,1147 **** rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:1145: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : --- 1245,1257 ---- rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:1255: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : *************** else *** 1165,1185 **** fi echo "$ac_t""$CPP" 1>&6 ! for ac_hdr in sys/file.h sys/param.h limits.h stdlib.h string.h unistd.h strings.h sys/time.h time.h sys/resource.h sys/stat.h sys/mman.h fcntl.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 ! echo "configure:1173: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:1183: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* --- 1275,1295 ---- fi echo "$ac_t""$CPP" 1>&6 ! for ac_hdr in sys/file.h sys/param.h limits.h stdlib.h string.h unistd.h strings.h sys/time.h time.h sys/resource.h sys/stat.h sys/mman.h fcntl.h alloca.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 ! echo "configure:1283: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:1293: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* *************** fi *** 1206,1217 **** done echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 ! echo "configure:1210: checking for sys/wait.h that is POSIX.1 compatible" >&5 if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include --- 1316,1327 ---- done echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 ! echo "configure:1320: checking for sys/wait.h that is POSIX.1 compatible" >&5 if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include *************** wait (&s); *** 1227,1233 **** s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } EOF ! if { (eval echo configure:1231: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_sys_wait_h=yes else --- 1337,1343 ---- s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } EOF ! if { (eval echo configure:1341: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_sys_wait_h=yes else *************** EOF *** 1248,1259 **** fi echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 ! echo "configure:1252: checking whether time.h and sys/time.h may both be included" >&5 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include --- 1358,1369 ---- fi echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 ! echo "configure:1362: checking whether time.h and sys/time.h may both be included" >&5 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include *************** int main() { *** 1262,1268 **** struct tm *tp; ; return 0; } EOF ! if { (eval echo configure:1266: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else --- 1372,1378 ---- struct tm *tp; ; return 0; } EOF ! if { (eval echo configure:1376: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else *************** fi *** 1284,1302 **** echo $ac_n "checking whether errno must be declared""... $ac_c" 1>&6 ! echo "configure:1288: checking whether errno must be declared" >&5 if eval "test \"`echo '$''{'libiberty_cv_declare_errno'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int x = errno; ; return 0; } EOF ! if { (eval echo configure:1300: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* libiberty_cv_declare_errno=no else --- 1394,1412 ---- echo $ac_n "checking whether errno must be declared""... $ac_c" 1>&6 ! echo "configure:1398: checking whether errno must be declared" >&5 if eval "test \"`echo '$''{'libiberty_cv_declare_errno'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int x = errno; ; return 0; } EOF ! if { (eval echo configure:1410: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* libiberty_cv_declare_errno=no else *************** EOF *** 1317,1322 **** --- 1427,1578 ---- fi + echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 + echo "configure:1432: checking for ANSI C header files" >&5 + if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext < + #include + #include + #include + EOF + ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" + { (eval echo configure:1445: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } + ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` + if test -z "$ac_err"; then + rm -rf conftest* + ac_cv_header_stdc=yes + else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_header_stdc=no + fi + rm -f conftest* + + if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat > conftest.$ac_ext < + EOF + if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "memchr" >/dev/null 2>&1; then + : + else + rm -rf conftest* + ac_cv_header_stdc=no + fi + rm -f conftest* + + fi + + if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat > conftest.$ac_ext < + EOF + if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "free" >/dev/null 2>&1; then + : + else + rm -rf conftest* + ac_cv_header_stdc=no + fi + rm -f conftest* + + fi + + if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : + else + cat > conftest.$ac_ext < + #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') + #define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) + #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) + int main () { int i; for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); + exit (0); } + + EOF + if { (eval echo configure:1512: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null + then + : + else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_header_stdc=no + fi + rm -fr conftest* + fi + + fi + fi + + echo "$ac_t""$ac_cv_header_stdc" 1>&6 + if test $ac_cv_header_stdc = yes; then + cat >> confdefs.h <<\EOF + #define STDC_HEADERS 1 + EOF + + fi + + echo $ac_n "checking for uintptr_t""... $ac_c" 1>&6 + echo "configure:1536: checking for uintptr_t" >&5 + if eval "test \"`echo '$''{'ac_cv_type_uintptr_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext < + #if STDC_HEADERS + #include + #include + #endif + EOF + if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "(^|[^a-zA-Z_0-9])uintptr_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_type_uintptr_t=yes + else + rm -rf conftest* + ac_cv_type_uintptr_t=no + fi + rm -f conftest* + + fi + echo "$ac_t""$ac_cv_type_uintptr_t" 1>&6 + if test $ac_cv_type_uintptr_t = no; then + cat >> confdefs.h <<\EOF + #define uintptr_t unsigned long + EOF + + fi + + + if test $ac_cv_type_uintptr_t = yes + then + cat >> confdefs.h <<\EOF + #define HAVE_UINTPTR_T 1 + EOF + + fi + # This is the list of functions which libiberty will provide if they # are not available on the host. *************** funcs="$funcs bsearch" *** 1329,1334 **** --- 1585,1591 ---- funcs="$funcs bzero" funcs="$funcs calloc" funcs="$funcs clock" + funcs="$funcs ffs" funcs="$funcs getcwd" funcs="$funcs getpagesize" funcs="$funcs index" *************** if test "x" = "y"; then *** 1373,1384 **** for ac_func in asprintf atexit basename bcmp bcopy bsearch bzero calloc clock do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:1377: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:1634: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else --- 1658,1664 ---- ; return 0; } EOF ! if { (eval echo configure:1662: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else *************** done *** 1428,1439 **** for ac_func in getcwd getpagesize index insque mkstemps memchr memcmp memcpy do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:1432: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:1689: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else --- 1713,1719 ---- ; return 0; } EOF ! if { (eval echo configure:1717: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else *************** done *** 1483,1494 **** for ac_func in memmove memset putenv random rename rindex sigsetmask do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:1487: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:1744: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else --- 1768,1774 ---- ; return 0; } EOF ! if { (eval echo configure:1772: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else *************** done *** 1538,1549 **** for ac_func in strcasecmp setenv strchr strdup strncasecmp strrchr strstr do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:1542: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:1799: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else --- 1823,1829 ---- ; return 0; } EOF ! if { (eval echo configure:1827: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else *************** done *** 1593,1604 **** for ac_func in strtod strtol strtoul tmpnam vasprintf vfprintf vprintf do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:1597: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:1854: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else --- 1878,1884 ---- ; return 0; } EOF ! if { (eval echo configure:1882: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else *************** done *** 1648,1659 **** for ac_func in vsprintf waitpid getrusage on_exit psignal strerror strsignal do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:1652: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:1909: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else --- 1933,1939 ---- ; return 0; } EOF ! if { (eval echo configure:1937: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else *************** else *** 1700,1714 **** fi done ! for ac_func in sysconf times sbrk gettimeofday do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:1707: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:1964: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else --- 1988,1994 ---- ; return 0; } EOF ! if { (eval echo configure:1992: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else *************** fi *** 1771,1778 **** # For each of these functions, if the host does not provide the # function we want to put FN.o in LIBOBJS, and if the host does ! # provide the function, we want to define HAVE_FN in config.h. Also, ! # if the host does not provide alloca, we set ALLOCA to alloca.o setobjs= CHECK= --- 2028,2034 ---- # For each of these functions, if the host does not provide the # function we want to put FN.o in LIBOBJS, and if the host does ! # provide the function, we want to define HAVE_FN in config.h. setobjs= CHECK= *************** if test -n "${with_target_subdir}"; then *** 1787,1793 **** # newlib provide and which ones we will be expected to provide. if test "x${with_newlib}" = "xyes"; then - ALLOCA="alloca.o" LIBOBJS="asprintf.o basename.o insque.o random.o strdup.o vasprintf.o" for f in $funcs; do --- 2043,2048 ---- *************** fi *** 1827,1833 **** case "${host}" in ! *-*-cygwin*) cat >> confdefs.h <<\EOF #define HAVE_SYS_ERRLIST 1 EOF --- 2082,2088 ---- case "${host}" in ! *-*-cygwin* | *-*-mingw*) cat >> confdefs.h <<\EOF #define HAVE_SYS_ERRLIST 1 EOF *************** if test -z "${setobjs}"; then *** 1925,1936 **** libiberty_cv_var_sys_errlist=yes ;; esac # We haven't set the list of objects yet. Use the standard autoconf # tests. This will only work if the compiler works. echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 ! echo "configure:1934: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. --- 2180,2198 ---- libiberty_cv_var_sys_errlist=yes ;; + *-*-*vms*) + # Under VMS, vfork works very different than on Unix. The standard test + # won't work, and it isn't easily adaptable. It makes more sense to + # just force it. + ac_cv_func_vfork_works=yes + ;; + esac # We haven't set the list of objects yet. Use the standard autoconf # tests. This will only work if the compiler works. echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 ! echo "configure:2196: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. *************** cross_compiling=$ac_cv_prog_cc_cross *** 1941,1952 **** cat > conftest.$ac_ext << EOF ! #line 1945 "configure" #include "confdefs.h" main(){return(0);} EOF ! if { (eval echo configure:1950: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then --- 2203,2214 ---- cat > conftest.$ac_ext << EOF ! #line 2207 "configure" #include "confdefs.h" main(){return(0);} EOF ! if { (eval echo configure:2212: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then *************** if test $ac_cv_prog_cc_works = no; then *** 1972,1990 **** { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 ! echo "configure:1976: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross for ac_func in $funcs do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:1983: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 ! echo "configure:2238: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross for ac_func in $funcs do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:2245: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else --- 2269,2275 ---- ; return 0; } EOF ! if { (eval echo configure:2273: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else *************** fi *** 2033,2163 **** done ! ! case "${host}" in ! *-*-interix) ! # On Interix, it wrongly concludes that the MSVC compiler supports alloca. ! # (MSVC does on Win32, not on Interix.) ! # This should be temporary. ! ! ac_cv_header_alloca_h=no ! ac_cv_func_alloca_works=no ! ALLOCA=alloca.o ! cat >> confdefs.h <<\EOF ! #define C_ALLOCA 1 ! EOF ! cat >> confdefs.h <&6 ! echo "configure:2058: checking for working alloca.h" >&5 ! if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then ! echo $ac_n "(cached) $ac_c" 1>&6 ! else ! cat > conftest.$ac_ext < ! int main() { ! char *p = alloca(2 * sizeof(int)); ! ; return 0; } ! EOF ! if { (eval echo configure:2070: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ! rm -rf conftest* ! ac_cv_header_alloca_h=yes ! else ! echo "configure: failed program was:" >&5 ! cat conftest.$ac_ext >&5 ! rm -rf conftest* ! ac_cv_header_alloca_h=no ! fi ! rm -f conftest* ! fi ! ! echo "$ac_t""$ac_cv_header_alloca_h" 1>&6 ! if test $ac_cv_header_alloca_h = yes; then ! cat >> confdefs.h <<\EOF ! #define HAVE_ALLOCA_H 1 ! EOF ! ! fi ! ! echo $ac_n "checking for alloca""... $ac_c" 1>&6 ! echo "configure:2091: checking for alloca" >&5 ! if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then ! echo $ac_n "(cached) $ac_c" 1>&6 ! else ! cat > conftest.$ac_ext < ! # define alloca _alloca ! # else ! # if HAVE_ALLOCA_H ! # include ! # else ! # ifdef _AIX ! #pragma alloca ! # else ! # ifndef alloca /* predefined by HP cc +Olibcalls */ ! char *alloca (); ! # endif ! # endif ! # endif ! # endif ! #endif ! ! int main() { ! char *p = (char *) alloca(1); ! ; return 0; } ! EOF ! if { (eval echo configure:2124: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ! rm -rf conftest* ! ac_cv_func_alloca_works=yes ! else ! echo "configure: failed program was:" >&5 ! cat conftest.$ac_ext >&5 ! rm -rf conftest* ! ac_cv_func_alloca_works=no ! fi ! rm -f conftest* ! fi ! ! echo "$ac_t""$ac_cv_func_alloca_works" 1>&6 ! if test $ac_cv_func_alloca_works = yes; then ! cat >> confdefs.h <<\EOF ! #define HAVE_ALLOCA 1 ! EOF ! ! fi ! ! if test $ac_cv_func_alloca_works = no; then ! # The SVR3 libPW and SVR4 libucb both contain incompatible functions ! # that cause trouble. Some versions do not even contain alloca or ! # contain a buggy version. If you still want to use their alloca, ! # use ar to extract alloca.o from them instead of compiling alloca.c. ! ALLOCA=alloca.${ac_objext} ! cat >> confdefs.h <<\EOF ! #define C_ALLOCA 1 ! EOF ! ! ! echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6 ! echo "configure:2156: checking whether alloca needs Cray hooks" >&5 if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:2300: checking whether alloca needs Cray hooks" >&5 if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 if test $ac_cv_os_cray = yes; then ! for ac_func in _getb67 GETB67 getb67; do ! echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:2186: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 if test $ac_cv_os_cray = yes; then ! for ac_func in _getb67 GETB67 getb67; do ! echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:2330: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else --- 2354,2360 ---- ; return 0; } EOF ! if { (eval echo configure:2358: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else *************** if eval "test \"`echo '$ac_cv_func_'$ac_ *** 2227,2243 **** cat >> confdefs.h <&6 fi ! done fi echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6 ! echo "configure:2241: checking stack direction for C alloca" >&5 if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 2371,2386 ---- cat >> confdefs.h <&6 fi ! done fi echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6 ! echo "configure:2384: checking stack direction for C alloca" >&5 if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** else *** 2245,2251 **** ac_cv_c_stack_direction=0 else cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_stack_direction=1 else --- 2407,2413 ---- exit (find_stack_direction() < 0); } EOF ! if { (eval echo configure:2411: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_stack_direction=1 else *************** cat >> confdefs.h <&6 - echo "configure:2293: checking for ANSI C header files" >&5 - if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else - cat > conftest.$ac_ext < - #include - #include - #include - EOF - ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" - { (eval echo configure:2306: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } - ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` - if test -z "$ac_err"; then - rm -rf conftest* - ac_cv_header_stdc=yes - else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_header_stdc=no - fi - rm -f conftest* - - if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat > conftest.$ac_ext < - EOF - if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "memchr" >/dev/null 2>&1; then - : - else - rm -rf conftest* - ac_cv_header_stdc=no - fi - rm -f conftest* - - fi - - if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat > conftest.$ac_ext < - EOF - if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "free" >/dev/null 2>&1; then - : - else - rm -rf conftest* - ac_cv_header_stdc=no - fi - rm -f conftest* - - fi - - if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then - : - else - cat > conftest.$ac_ext < - #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') - #define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) - #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) - int main () { int i; for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); - exit (0); } - - EOF - if { (eval echo configure:2373: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null - then - : - else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -fr conftest* - ac_cv_header_stdc=no - fi - rm -fr conftest* - fi - - fi - fi - - echo "$ac_t""$ac_cv_header_stdc" 1>&6 - if test $ac_cv_header_stdc = yes; then - cat >> confdefs.h <<\EOF - #define STDC_HEADERS 1 - EOF - - fi ! echo $ac_n "checking for pid_t""... $ac_c" 1>&6 ! echo "configure:2397: checking for pid_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS --- 2426,2439 ---- #define STACK_DIRECTION $ac_cv_c_stack_direction EOF ! echo $ac_n "checking for pid_t""... $ac_c" 1>&6 ! echo "configure:2432: checking for pid_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS *************** fi *** 2427,2443 **** ac_safe=`echo "vfork.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for vfork.h""... $ac_c" 1>&6 ! echo "configure:2431: checking for vfork.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:2441: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* --- 2462,2478 ---- ac_safe=`echo "vfork.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for vfork.h""... $ac_c" 1>&6 ! echo "configure:2466: checking for vfork.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:2476: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* *************** else *** 2462,2479 **** fi echo $ac_n "checking for working vfork""... $ac_c" 1>&6 ! echo "configure:2466: checking for working vfork" >&5 if eval "test \"`echo '$''{'ac_cv_func_vfork_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then echo $ac_n "checking for vfork""... $ac_c" 1>&6 ! echo "configure:2472: checking for vfork" >&5 if eval "test \"`echo '$''{'ac_cv_func_vfork'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:2501: checking for working vfork" >&5 if eval "test \"`echo '$''{'ac_cv_func_vfork_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then echo $ac_n "checking for vfork""... $ac_c" 1>&6 ! echo "configure:2507: checking for vfork" >&5 if eval "test \"`echo '$''{'ac_cv_func_vfork'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_vfork=yes" else --- 2531,2537 ---- ; return 0; } EOF ! if { (eval echo configure:2535: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_vfork=yes" else *************** fi *** 2518,2524 **** ac_cv_func_vfork_works=$ac_cv_func_vfork else cat > conftest.$ac_ext < --- 2553,2559 ---- ac_cv_func_vfork_works=$ac_cv_func_vfork else cat > conftest.$ac_ext < *************** main() { *** 2613,2619 **** } } EOF ! if { (eval echo configure:2617: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_vfork_works=yes else --- 2648,2654 ---- } } EOF ! if { (eval echo configure:2652: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_vfork_works=yes else *************** fi *** 2638,2658 **** if test $ac_cv_func_vfork_works = no; then LIBOBJS="$LIBOBJS vfork.o" fi for v in $vars; do echo $ac_n "checking for $v""... $ac_c" 1>&6 ! echo "configure:2644: checking for $v" >&5 if eval "test \"`echo '$''{'libiberty_cv_var_$v'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "libiberty_cv_var_$v=yes" else --- 2673,2812 ---- if test $ac_cv_func_vfork_works = no; then LIBOBJS="$LIBOBJS vfork.o" fi + # We only need _doprnt if we might use it to implement v*printf. + if test $ac_cv_func_vprintf != yes \ + || test $ac_cv_func_vfprintf != yes \ + || test $ac_cv_func_vsprintf != yes; then + for ac_func in _doprnt + do + echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 + echo "configure:2684: checking for $ac_func" >&5 + if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext < + /* Override any gcc2 internal prototype to avoid an error. */ + /* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ + char $ac_func(); + + int main() { + + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ + #if defined (__stub_$ac_func) || defined (__stub___$ac_func) + choke me + #else + $ac_func(); + #endif + + ; return 0; } + EOF + if { (eval echo configure:2712: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" + else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" + fi + rm -f conftest* + fi + + if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 + LIBOBJS="$LIBOBJS ${ac_func}.${ac_objext}" + fi + done + + + else + for ac_func in _doprnt + do + echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 + echo "configure:2742: checking for $ac_func" >&5 + if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext < + /* Override any gcc2 internal prototype to avoid an error. */ + /* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ + char $ac_func(); + + int main() { + + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ + #if defined (__stub_$ac_func) || defined (__stub___$ac_func) + choke me + #else + $ac_func(); + #endif + + ; return 0; } + EOF + if { (eval echo configure:2770: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" + else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" + fi + rm -f conftest* + fi + + if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 + fi + done + + fi + for v in $vars; do echo $ac_n "checking for $v""... $ac_c" 1>&6 ! echo "configure:2798: checking for $v" >&5 if eval "test \"`echo '$''{'libiberty_cv_var_$v'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "libiberty_cv_var_$v=yes" else *************** EOF *** 2678,2689 **** for ac_func in $checkfuncs do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:2682: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:2836: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else --- 2860,2866 ---- ; return 0; } EOF ! if { (eval echo configure:2864: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else *************** done *** 2732,2752 **** fi ! for ac_hdr in unistd.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 ! echo "configure:2740: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:2750: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* --- 2886,2906 ---- fi ! for ac_hdr in stdlib.h unistd.h sys/stat.h sys/types.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 ! echo "configure:2894: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:2904: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* *************** done *** 2775,2786 **** for ac_func in getpagesize do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:2779: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:2933: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else --- 2957,2963 ---- ; return 0; } EOF ! if { (eval echo configure:2961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else *************** fi *** 2828,2834 **** done echo $ac_n "checking for working mmap""... $ac_c" 1>&6 ! echo "configure:2832: checking for working mmap" >&5 if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 2982,2988 ---- done echo $ac_n "checking for working mmap""... $ac_c" 1>&6 ! echo "configure:2986: checking for working mmap" >&5 if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** else *** 2836,2842 **** ac_cv_func_mmap_fixed_mapped=no else cat > conftest.$ac_ext < conftest.$ac_ext < #include /* This mess was copied from the GNU getpagesize.h. */ #ifndef HAVE_GETPAGESIZE - # ifdef HAVE_UNISTD_H - # include - # endif /* Assume that all systems that can run configure have sys/param.h. */ # ifndef HAVE_SYS_PARAM_H --- 3018,3041 ---- #include #include + #if HAVE_SYS_TYPES_H + # include + #endif + + #if HAVE_STDLIB_H + # include + #endif + + #if HAVE_SYS_STAT_H + # include + #endif + + #if HAVE_UNISTD_H + # include + #endif + /* This mess was copied from the GNU getpagesize.h. */ #ifndef HAVE_GETPAGESIZE /* Assume that all systems that can run configure have sys/param.h. */ # ifndef HAVE_SYS_PARAM_H *************** main() *** 2976,2982 **** } EOF ! if { (eval echo configure:2980: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_mmap_fixed_mapped=yes else --- 3143,3149 ---- } EOF ! if { (eval echo configure:3147: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_mmap_fixed_mapped=yes else *************** fi *** 3000,3006 **** echo $ac_n "checking for working strncmp""... $ac_c" 1>&6 ! echo "configure:3004: checking for working strncmp" >&5 if eval "test \"`echo '$''{'ac_cv_func_strncmp_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 3167,3173 ---- echo $ac_n "checking for working strncmp""... $ac_c" 1>&6 ! echo "configure:3171: checking for working strncmp" >&5 if eval "test \"`echo '$''{'ac_cv_func_strncmp_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** else *** 3008,3014 **** ac_cv_func_strncmp_works=no else cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_strncmp_works=yes else --- 3239,3245 ---- } EOF ! if { (eval echo configure:3243: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_strncmp_works=yes else *************** s%@includedir@%$includedir%g *** 3233,3238 **** --- 3403,3414 ---- s%@oldincludedir@%$oldincludedir%g s%@infodir@%$infodir%g s%@mandir@%$mandir%g + s%@MAINT@%$MAINT%g + s%@NOTMAINT@%$NOTMAINT%g + s%@MAKEINFO@%$MAKEINFO%g + s%@BUILD_INFO@%$BUILD_INFO%g + s%@PERL@%$PERL%g + s%@HAVE_PERL@%$HAVE_PERL%g s%@host@%$host%g s%@host_alias@%$host_alias%g s%@host_cpu@%$host_cpu%g *************** s%@host_makefile_frag@%%g *** 3255,3261 **** s%@CPP@%$CPP%g s%@CHECK@%$CHECK%g s%@LIBOBJS@%$LIBOBJS%g - s%@ALLOCA@%$ALLOCA%g s%@INSTALL_DEST@%$INSTALL_DEST%g CEOF --- 3431,3436 ---- diff -Nrc3pad gcc-3.0.4/libiberty/configure.in gcc-3.1/libiberty/configure.in *** gcc-3.0.4/libiberty/configure.in Tue Jan 22 22:29:04 2002 --- gcc-3.1/libiberty/configure.in Wed May 8 04:26:02 2002 *************** dnl Process this file with autoconf to p *** 3,8 **** --- 3,14 ---- AC_PREREQ(2.13) AC_INIT(pexecute.c) + # This works around the fact that libtool configuration may change LD + # for this particular configuration, but some shells, instead of + # keeping the changes in LD private, export them just because LD is + # exported. We don't use libtool yet, but some day we might, so... + ORIGINAL_LD_FOR_MULTILIBS=$LD + dnl We use these options to decide which functions to include. AC_ARG_WITH(target-subdir, [ --with-target-subdir=SUBDIR Configuring in a subdirectory]) *************** else *** 26,31 **** --- 32,88 ---- fi AC_CONFIG_AUX_DIR($libiberty_topdir) + dnl Very limited version of automake's enable-maintainer-mode + + AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode is disabled by default + AC_ARG_ENABLE(maintainer-mode, + [ --enable-maintainer-mode + enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer], + maintainer_mode=$enableval, + maintainer_mode=no) + + AC_MSG_RESULT($maintainer_mode) + + if test "$maintainer_mode" = "yes"; then + MAINT='' + NOTMAINT='#' + else + MAINT='#' + NOTMAINT='' + fi + AC_SUBST(MAINT)dnl + AC_SUBST(NOTMAINT)dnl + + # Do we have a single-tree copy of texinfo? Even if we do, we can't + # rely on it - libiberty is built before texinfo. + AC_CHECK_PROG(MAKEINFO, makeinfo, makeinfo, ) + if test "x$MAKEINFO" = "x"; then + MAKEINFO="@echo makeinfo missing; true" + BUILD_INFO= + else + BUILD_INFO=info + case x"`$MAKEINFO --version | grep 'GNU texinfo'`" in + x*\ [[1-3]].* ) + MAKEINFO="@echo $MAKEINFO is too old, 4.0 or newer required; true" + BUILD_INFO= + AC_MSG_WARN([ + *** Makeinfo is too old. Info documentation will not be built.]) + ;; + esac + fi + AC_SUBST(MAKEINFO) + AC_SUBST(BUILD_INFO) + + AC_CHECK_PROG(PERL, perl, perl, ) + if test x"$PERL" = x""; then + HAVE_PERL='#' + else + HAVE_PERL='' + fi + AC_SUBST(HAVE_PERL) + AC_CANONICAL_HOST dnl When we start using automake: *************** AC_SUBST_FILE(host_makefile_frag) *** 69,80 **** # It's OK to check for header files. Although the compiler may not be # able to link anything, it had better be able to at least compile # something. ! AC_CHECK_HEADERS(sys/file.h sys/param.h limits.h stdlib.h string.h unistd.h strings.h sys/time.h time.h sys/resource.h sys/stat.h sys/mman.h fcntl.h) AC_HEADER_SYS_WAIT AC_HEADER_TIME libiberty_AC_DECLARE_ERRNO # This is the list of functions which libiberty will provide if they # are not available on the host. --- 126,144 ---- # It's OK to check for header files. Although the compiler may not be # able to link anything, it had better be able to at least compile # something. ! AC_CHECK_HEADERS(sys/file.h sys/param.h limits.h stdlib.h string.h unistd.h strings.h sys/time.h time.h sys/resource.h sys/stat.h sys/mman.h fcntl.h alloca.h) AC_HEADER_SYS_WAIT AC_HEADER_TIME libiberty_AC_DECLARE_ERRNO + AC_CHECK_TYPE(uintptr_t, unsigned long) + + if test $ac_cv_type_uintptr_t = yes + then + AC_DEFINE(HAVE_UINTPTR_T, 1, [Define if you have the \`uintptr_t' type.]) + fi + # This is the list of functions which libiberty will provide if they # are not available on the host. *************** funcs="$funcs bsearch" *** 87,92 **** --- 151,157 ---- funcs="$funcs bzero" funcs="$funcs calloc" funcs="$funcs clock" + funcs="$funcs ffs" funcs="$funcs getcwd" funcs="$funcs getpagesize" funcs="$funcs index" *************** if test "x" = "y"; then *** 134,140 **** AC_CHECK_FUNCS(strcasecmp setenv strchr strdup strncasecmp strrchr strstr) AC_CHECK_FUNCS(strtod strtol strtoul tmpnam vasprintf vfprintf vprintf) AC_CHECK_FUNCS(vsprintf waitpid getrusage on_exit psignal strerror strsignal) ! AC_CHECK_FUNCS(sysconf times sbrk gettimeofday) AC_DEFINE(HAVE_SYS_ERRLIST, 1, [Define if you have the sys_errlist variable.]) AC_DEFINE(HAVE_SYS_NERR, 1, [Define if you have the sys_nerr variable.]) AC_DEFINE(HAVE_SYS_SIGLIST, 1, [Define if you have the sys_siglist variable.]) --- 199,205 ---- AC_CHECK_FUNCS(strcasecmp setenv strchr strdup strncasecmp strrchr strstr) AC_CHECK_FUNCS(strtod strtol strtoul tmpnam vasprintf vfprintf vprintf) AC_CHECK_FUNCS(vsprintf waitpid getrusage on_exit psignal strerror strsignal) ! AC_CHECK_FUNCS(sysconf times sbrk gettimeofday ffs) AC_DEFINE(HAVE_SYS_ERRLIST, 1, [Define if you have the sys_errlist variable.]) AC_DEFINE(HAVE_SYS_NERR, 1, [Define if you have the sys_nerr variable.]) AC_DEFINE(HAVE_SYS_SIGLIST, 1, [Define if you have the sys_siglist variable.]) *************** fi *** 142,149 **** # For each of these functions, if the host does not provide the # function we want to put FN.o in LIBOBJS, and if the host does ! # provide the function, we want to define HAVE_FN in config.h. Also, ! # if the host does not provide alloca, we set ALLOCA to alloca.o setobjs= CHECK= --- 207,213 ---- # For each of these functions, if the host does not provide the # function we want to put FN.o in LIBOBJS, and if the host does ! # provide the function, we want to define HAVE_FN in config.h. setobjs= CHECK= *************** if test -n "${with_target_subdir}"; then *** 158,164 **** # newlib provide and which ones we will be expected to provide. if test "x${with_newlib}" = "xyes"; then - ALLOCA="alloca.o" LIBOBJS="asprintf.o basename.o insque.o random.o strdup.o vasprintf.o" for f in $funcs; do --- 222,227 ---- *************** fi *** 192,200 **** AC_SUBST(CHECK) case "${host}" in ! *-*-cygwin*) ! AC_DEFINE(HAVE_SYS_ERRLIST) ! AC_DEFINE(HAVE_SYS_NERR) ;; esac --- 255,263 ---- AC_SUBST(CHECK) case "${host}" in ! *-*-cygwin* | *-*-mingw*) ! AC_DEFINE_NOAUTOHEADER(HAVE_SYS_ERRLIST) ! AC_DEFINE_NOAUTOHEADER(HAVE_SYS_NERR) ;; esac *************** if test -z "${setobjs}"; then *** 278,315 **** libiberty_cv_var_sys_errlist=yes ;; esac # We haven't set the list of objects yet. Use the standard autoconf # tests. This will only work if the compiler works. AC_PROG_CC_WORKS AC_REPLACE_FUNCS($funcs) ! ! case "${host}" in ! *-*-interix) ! # On Interix, it wrongly concludes that the MSVC compiler supports alloca. ! # (MSVC does on Win32, not on Interix.) ! # This should be temporary. ! ! ac_cv_header_alloca_h=no ! ac_cv_func_alloca_works=no ! ALLOCA=alloca.o ! cat >> confdefs.h <<\EOF ! #define C_ALLOCA 1 ! EOF ! cat >> confdefs.h < 0) || (x > 0 && y < 0)) + return -x; + return x; + } + + #endif diff -Nrc3pad gcc-3.0.4/libiberty/cp-demangle.c gcc-3.1/libiberty/cp-demangle.c *** gcc-3.0.4/libiberty/cp-demangle.c Tue May 8 06:21:15 2001 --- gcc-3.1/libiberty/cp-demangle.c Mon Apr 1 22:09:10 2002 *************** *** 9,14 **** --- 9,23 ---- the Free Software Foundation; either version 2 of the License, or (at your option) any later version. + In addition to the permissions in the GNU General Public License, the + Free Software Foundation gives you unlimited permission to link the + compiled version of this file into combinations with other programs, + and to distribute those combinations without any restriction coming + from the use of this file. (The General Public License restrictions + do apply in other respects; for example, they cover modification of + the file, and distribution when not linked into a combined + executable.) + 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 *************** string_list_delete (node) *** 424,430 **** while (node != NULL) { string_list_t next = node->next; ! free (node); node = next; } } --- 433,439 ---- while (node != NULL) { string_list_t next = node->next; ! dyn_string_delete ((dyn_string_t) node); node = next; } } *************** static status_t demangle_discriminator *** 938,947 **** PARAMS ((demangling_t, int)); static status_t cp_demangle PARAMS ((const char *, dyn_string_t, int)); - #ifdef IN_LIBGCC2 static status_t cp_demangle_type PARAMS ((const char*, dyn_string_t)); - #endif /* When passed to demangle_bare_function_type, indicates that the function's return type is not encoded before its parameter types. */ --- 947,954 ---- *************** demangle_operator_name (dm, short_name, *** 1557,1567 **** struct operator_code { /* The mangled code for this operator. */ ! const char *code; /* The source name of this operator. */ ! const char *name; /* The number of arguments this operator takes. */ ! int num_args; }; static const struct operator_code operators[] = --- 1564,1574 ---- struct operator_code { /* The mangled code for this operator. */ ! const char *const code; /* The source name of this operator. */ ! const char *const name; /* The number of arguments this operator takes. */ ! const int num_args; }; static const struct operator_code operators[] = *************** demangle_special_name (dm) *** 1842,1852 **** if (peek == 'G') { ! /* A guard variable name. Consume the G. */ advance_char (dm); ! RETURN_IF_ERROR (demangle_char (dm, 'V')); ! RETURN_IF_ERROR (result_add (dm, "guard variable for ")); ! RETURN_IF_ERROR (demangle_name (dm, &unused)); } else if (peek == 'T') { --- 1849,1875 ---- if (peek == 'G') { ! /* Consume the G. */ advance_char (dm); ! switch (peek_char (dm)) ! { ! case 'V': ! /* A guard variable name. */ ! advance_char (dm); ! RETURN_IF_ERROR (result_add (dm, "guard variable for ")); ! RETURN_IF_ERROR (demangle_name (dm, &unused)); ! break; ! ! case 'R': ! /* A reference temporary. */ ! advance_char (dm); ! RETURN_IF_ERROR (result_add (dm, "reference temporary for ")); ! RETURN_IF_ERROR (demangle_name (dm, &unused)); ! break; ! ! default: ! return "Unrecognized ."; ! } } else if (peek == 'T') { *************** cp_demangle (name, result, style) *** 3517,3530 **** dyn_string_t. On success, returns STATUS_OK. On failiure, returns an error message, and the contents of RESULT are unchanged. */ - #ifdef IN_LIBGCC2 static status_t cp_demangle_type (type_name, result) const char* type_name; dyn_string_t result; { status_t status; ! demangling_t dm = demangling_new (type_name); if (dm == NULL) return STATUS_ALLOCATION_FAILED; --- 3540,3552 ---- dyn_string_t. On success, returns STATUS_OK. On failiure, returns an error message, and the contents of RESULT are unchanged. */ static status_t cp_demangle_type (type_name, result) const char* type_name; dyn_string_t result; { status_t status; ! demangling_t dm = demangling_new (type_name, DMGL_GNU_V3); if (dm == NULL) return STATUS_ALLOCATION_FAILED; *************** cp_demangle_type (type_name, result) *** 3555,3560 **** --- 3577,3583 ---- return status; } + #if defined(IN_LIBGCC2) || defined(IN_GLIBCPP_V3) extern char *__cxa_demangle PARAMS ((const char *, char *, size_t *, int *)); /* ia64 ABI-mandated entry point in the C++ runtime library for performing *************** __cxa_demangle (mangled_name, output_buf *** 3662,3668 **** } } ! #else /* !IN_LIBGCC2 */ /* Variant entry point for integration with the existing cplus-dem demangler. Attempts to demangle MANGLED. If the demangling --- 3685,3691 ---- } } ! #else /* ! (IN_LIBGCC2 || IN_GLIBCPP_V3) */ /* Variant entry point for integration with the existing cplus-dem demangler. Attempts to demangle MANGLED. If the demangling *************** __cxa_demangle (mangled_name, output_buf *** 3671,3690 **** If the demangling failes, returns NULL. */ char * ! cplus_demangle_v3 (mangled) const char* mangled; { dyn_string_t demangled; status_t status; ! /* If this isn't a mangled name, don't pretend to demangle it. */ ! if (strncmp (mangled, "_Z", 2) != 0) ! return NULL; /* Create a dyn_string to hold the demangled name. */ demangled = dyn_string_new (0); /* Attempt the demangling. */ ! status = cp_demangle ((char *) mangled, demangled, 0); if (STATUS_NO_ERROR (status)) /* Demangling succeeded. */ --- 3694,3728 ---- If the demangling failes, returns NULL. */ char * ! cplus_demangle_v3 (mangled, options) const char* mangled; + int options; { dyn_string_t demangled; status_t status; + int type = !!(options & DMGL_TYPES); ! if (mangled[0] == '_' && mangled[1] == 'Z') ! /* It is not a type. */ ! type = 0; ! else ! { ! /* It is a type. Stop if we don't want to demangle types. */ ! if (!type) ! return NULL; ! } ! ! flag_verbose = !!(options & DMGL_VERBOSE); /* Create a dyn_string to hold the demangled name. */ demangled = dyn_string_new (0); /* Attempt the demangling. */ ! if (!type) ! /* Appears to be a function or variable name. */ ! status = cp_demangle (mangled, demangled, 0); ! else ! /* Try to demangle it as the name of a type. */ ! status = cp_demangle_type (mangled, demangled); if (STATUS_NO_ERROR (status)) /* Demangling succeeded. */ *************** java_demangle_v3 (mangled) *** 3808,3818 **** free (cplus_demangled); ! return_value = dyn_string_release (demangled); return return_value; } ! #endif /* IN_LIBGCC2 */ /* Demangle NAME in the G++ V3 ABI demangling style, and return either --- 3846,3860 ---- free (cplus_demangled); ! if (demangled) ! return_value = dyn_string_release (demangled); ! else ! return_value = NULL; ! return return_value; } ! #endif /* IN_LIBGCC2 || IN_GLIBCPP_V3 */ /* Demangle NAME in the G++ V3 ABI demangling style, and return either *************** demangle_v3_with_details (name) *** 3852,3857 **** --- 3894,3900 ---- } + #ifndef IN_GLIBCPP_V3 /* Return non-zero iff NAME is the mangled form of a constructor name in the G++ V3 ABI demangling style. Specifically, return: - '1' if NAME is a complete object constructor, *************** is_gnu_v3_mangled_dtor (name) *** 3894,3899 **** --- 3937,3943 ---- else return 0; } + #endif /* IN_GLIBCPP_V3 */ #ifdef STANDALONE_DEMANGLER *************** print_usage (fp, exit_value) *** 3929,3935 **** } /* Option specification for getopt_long. */ ! static struct option long_options[] = { { "help", no_argument, NULL, 'h' }, { "strict", no_argument, NULL, 's' }, --- 3973,3979 ---- } /* Option specification for getopt_long. */ ! static const struct option long_options[] = { { "help", no_argument, NULL, 'h' }, { "strict", no_argument, NULL, 's' }, diff -Nrc3pad gcc-3.0.4/libiberty/cplus-dem.c gcc-3.1/libiberty/cplus-dem.c *** gcc-3.0.4/libiberty/cplus-dem.c Thu Dec 13 03:22:04 2001 --- gcc-3.1/libiberty/cplus-dem.c Tue Feb 19 20:02:12 2002 *************** static char *ada_demangle PARAMS ((cons *** 63,87 **** extern void fancy_abort PARAMS ((void)) ATTRIBUTE_NORETURN; - static const char *mystrstr PARAMS ((const char *, const char *)); - - static const char * - mystrstr (s1, s2) - const char *s1, *s2; - { - register const char *p = s1; - register int len = strlen (s2); - - for (; (p = strchr (p, *s2)) != 0; p++) - { - if (strncmp (p, s2, len) == 0) - { - return (p); - } - } - return (0); - } - /* In order to allow a single demangler executable to demangle strings using various common values of CPLUS_MARKER, as well as any specific one set at compile time, we maintain a string containing all the --- 63,68 ---- *************** struct work_stuff *** 157,165 **** static const struct optable { ! const char *in; ! const char *out; ! int flags; } optable[] = { {"nw", " new", DMGL_ANSI}, /* new (1.92, ansi) */ {"dl", " delete", DMGL_ANSI}, /* new (1.92, ansi) */ --- 138,146 ---- static const struct optable { ! const char *const in; ! const char *const out; ! const int flags; } optable[] = { {"nw", " new", DMGL_ANSI}, /* new (1.92, ansi) */ {"dl", " delete", DMGL_ANSI}, /* new (1.92, ansi) */ *************** typedef enum type_kind_t *** 256,264 **** tk_real } type_kind_t; ! struct demangler_engine libiberty_demanglers[] = { { AUTO_DEMANGLING_STYLE_STRING, auto_demangling, "Automatic selection based on executable" --- 237,251 ---- tk_real } type_kind_t; ! const struct demangler_engine libiberty_demanglers[] = { { + NO_DEMANGLING_STYLE_STRING, + no_demangling, + "Demangling disabled" + } + , + { AUTO_DEMANGLING_STYLE_STRING, auto_demangling, "Automatic selection based on executable" *************** enum demangling_styles *** 850,856 **** cplus_demangle_set_style (style) enum demangling_styles style; { ! struct demangler_engine *demangler = libiberty_demanglers; for (; demangler->demangling_style != unknown_demangling; ++demangler) if (style == demangler->demangling_style) --- 837,843 ---- cplus_demangle_set_style (style) enum demangling_styles style; { ! const struct demangler_engine *demangler = libiberty_demanglers; for (; demangler->demangling_style != unknown_demangling; ++demangler) if (style == demangler->demangling_style) *************** enum demangling_styles *** 868,874 **** cplus_demangle_name_to_style (name) const char *name; { ! struct demangler_engine *demangler = libiberty_demanglers; for (; demangler->demangling_style != unknown_demangling; ++demangler) if (strcmp (name, demangler->demangling_style_name) == 0) --- 855,861 ---- cplus_demangle_name_to_style (name) const char *name; { ! const struct demangler_engine *demangler = libiberty_demanglers; for (; demangler->demangling_style != unknown_demangling; ++demangler) if (strcmp (name, demangler->demangling_style_name) == 0) *************** cplus_demangle_name_to_style (name) *** 880,886 **** /* char *cplus_demangle (const char *mangled, int options) If MANGLED is a mangled function name produced by GNU C++, then ! a pointer to a malloced string giving a C++ representation of the name will be returned; otherwise NULL will be returned. It is the caller's responsibility to free the string which is returned. --- 867,873 ---- /* char *cplus_demangle (const char *mangled, int options) If MANGLED is a mangled function name produced by GNU C++, then ! a pointer to a @code{malloc}ed string giving a C++ representation of the name will be returned; otherwise NULL will be returned. It is the caller's responsibility to free the string which is returned. *************** cplus_demangle (mangled, options) *** 912,917 **** --- 899,908 ---- { char *ret; struct work_stuff work[1]; + + if (current_demangling_style == no_demangling) + return xstrdup (mangled); + memset ((char *) work, 0, sizeof (work)); work->options = options; if ((work->options & DMGL_STYLE_MASK) == 0) *************** cplus_demangle (mangled, options) *** 920,926 **** /* The V3 ABI demangling is implemented elsewhere. */ if (GNU_V3_DEMANGLING || AUTO_DEMANGLING) { ! ret = cplus_demangle_v3 (mangled); if (ret || GNU_V3_DEMANGLING) return ret; } --- 911,917 ---- /* The V3 ABI demangling is implemented elsewhere. */ if (GNU_V3_DEMANGLING || AUTO_DEMANGLING) { ! ret = cplus_demangle_v3 (mangled, work->options); if (ret || GNU_V3_DEMANGLING) return ret; } *************** demangle_integral_value (work, mangled, *** 1796,1802 **** /* By default, we let the number decide whether we shall consume an underscore. */ ! int consume_following_underscore = 0; int leave_following_underscore = 0; success = 0; --- 1787,1793 ---- /* By default, we let the number decide whether we shall consume an underscore. */ ! int multidigit_without_leading_underscore = 0; int leave_following_underscore = 0; success = 0; *************** demangle_integral_value (work, mangled, *** 1813,1835 **** `m'-prefix we must do it here, using consume_count and adjusting underscores: we have to consume the underscore matching the prepended one. */ ! consume_following_underscore = 1; string_appendn (s, "-", 1); (*mangled) += 2; } else if (**mangled == '_') { /* Do not consume a following underscore; ! consume_following_underscore will consume what should be consumed. */ leave_following_underscore = 1; } /* We must call consume_count if we expect to remove a trailing underscore, since consume_count_with_underscores expects the leading underscore (that we consumed) if it is to handle multi-digit numbers. */ ! if (consume_following_underscore) value = consume_count (mangled); else value = consume_count_with_underscores (mangled); --- 1804,1837 ---- `m'-prefix we must do it here, using consume_count and adjusting underscores: we have to consume the underscore matching the prepended one. */ ! multidigit_without_leading_underscore = 1; string_appendn (s, "-", 1); (*mangled) += 2; } else if (**mangled == '_') { /* Do not consume a following underscore; ! multidigit_without_leading_underscore will consume what should be consumed. */ leave_following_underscore = 1; } + else + { + /* Since consume_count_with_underscores does not handle + multi-digit numbers that do not start with an underscore, + and this number can be an integer template parameter, + we have to call consume_count. */ + multidigit_without_leading_underscore = 1; + /* These multi-digit numbers never end on an underscore, + so if there is one then don't eat it. */ + leave_following_underscore = 1; + } /* We must call consume_count if we expect to remove a trailing underscore, since consume_count_with_underscores expects the leading underscore (that we consumed) if it is to handle multi-digit numbers. */ ! if (multidigit_without_leading_underscore) value = consume_count (mangled); else value = consume_count_with_underscores (mangled); *************** demangle_integral_value (work, mangled, *** 1847,1853 **** is wrong. If other (arbitrary) cases are followed by an underscore, we need to do something more radical. */ ! if ((value > 9 || consume_following_underscore) && ! leave_following_underscore && **mangled == '_') (*mangled)++; --- 1849,1855 ---- is wrong. If other (arbitrary) cases are followed by an underscore, we need to do something more radical. */ ! if ((value > 9 || multidigit_without_leading_underscore) && ! leave_following_underscore && **mangled == '_') (*mangled)++; *************** arm_pt (work, mangled, n, anchor, args) *** 2243,2249 **** { /* Check if ARM template with "__pt__" in it ("parameterized type") */ /* Allow HP also here, because HP's cfront compiler follows ARM to some extent */ ! if ((ARM_DEMANGLING || HP_DEMANGLING) && (*anchor = mystrstr (mangled, "__pt__"))) { int len; *args = *anchor + 6; --- 2245,2251 ---- { /* Check if ARM template with "__pt__" in it ("parameterized type") */ /* Allow HP also here, because HP's cfront compiler follows ARM to some extent */ ! if ((ARM_DEMANGLING || HP_DEMANGLING) && (*anchor = strstr (mangled, "__pt__"))) { int len; *args = *anchor + 6; *************** arm_pt (work, mangled, n, anchor, args) *** 2258,2266 **** } if (AUTO_DEMANGLING || EDG_DEMANGLING) { ! if ((*anchor = mystrstr (mangled, "__tm__")) ! || (*anchor = mystrstr (mangled, "__ps__")) ! || (*anchor = mystrstr (mangled, "__pt__"))) { int len; *args = *anchor + 6; --- 2260,2268 ---- } if (AUTO_DEMANGLING || EDG_DEMANGLING) { ! if ((*anchor = strstr (mangled, "__tm__")) ! || (*anchor = strstr (mangled, "__ps__")) ! || (*anchor = strstr (mangled, "__pt__"))) { int len; *args = *anchor + 6; *************** arm_pt (work, mangled, n, anchor, args) *** 2273,2279 **** return 1; } } ! else if ((*anchor = mystrstr (mangled, "__S"))) { int len; *args = *anchor + 3; --- 2275,2281 ---- return 1; } } ! else if ((*anchor = strstr (mangled, "__S"))) { int len; *args = *anchor + 3; *************** demangle_arm_hp_template (work, mangled, *** 2412,2419 **** break; default: /* Not handling other HP cfront stuff */ ! if (!do_type (work, &args, &arg)) ! goto cfront_template_args_done; } string_appends (declp, &arg); string_append (declp, ","); --- 2414,2428 ---- break; default: /* Not handling other HP cfront stuff */ ! { ! const char* old_args = args; ! if (!do_type (work, &args, &arg)) ! goto cfront_template_args_done; ! ! /* Fail if we didn't make any progress: prevent infinite loop. */ ! if (args == old_args) ! return; ! } } string_appends (declp, &arg); string_append (declp, ","); *************** iterate_demangle_function (work, mangled *** 2574,2580 **** /* Do not iterate for some demangling modes, or if there's only one "__"-sequence. This is the normal case. */ if (ARM_DEMANGLING || LUCID_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING ! || mystrstr (scan + 2, "__") == NULL) { demangle_function_name (work, mangled, declp, scan); return 1; --- 2583,2589 ---- /* Do not iterate for some demangling modes, or if there's only one "__"-sequence. This is the normal case. */ if (ARM_DEMANGLING || LUCID_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING ! || strstr (scan + 2, "__") == NULL) { demangle_function_name (work, mangled, declp, scan); return 1; *************** demangle_prefix (work, mangled, declp) *** 2717,2723 **** /* This block of code is a reduction in strength time optimization of: ! scan = mystrstr (*mangled, "__"); */ { scan = *mangled; --- 2726,2732 ---- /* This block of code is a reduction in strength time optimization of: ! scan = strstr (*mangled, "__"); */ { scan = *mangled; *************** demangle_prefix (work, mangled, declp) *** 2809,2815 **** { scan++; } ! if ((scan = mystrstr (scan, "__")) == NULL || (*(scan + 2) == '\0')) { /* No separator (I.E. "__not_mangled"), or empty signature (I.E. "__not_mangled_either__") */ --- 2818,2824 ---- { scan++; } ! if ((scan = strstr (scan, "__")) == NULL || (*(scan + 2) == '\0')) { /* No separator (I.E. "__not_mangled"), or empty signature (I.E. "__not_mangled_either__") */ *************** string_append_template_idx (s, idx) *** 4883,4889 **** static const char *program_name; static const char *program_version = VERSION; ! static int flags = DMGL_PARAMS | DMGL_ANSI; static void demangle_it PARAMS ((char *)); static void usage PARAMS ((FILE *, int)) ATTRIBUTE_NORETURN; --- 4892,4898 ---- static const char *program_name; static const char *program_version = VERSION; ! static int flags = DMGL_PARAMS | DMGL_ANSI | DMGL_VERBOSE; static void demangle_it PARAMS ((char *)); static void usage PARAMS ((FILE *, int)) ATTRIBUTE_NORETURN; *************** demangle_it (mangled_name) *** 4896,4902 **** { char *result; ! result = cplus_demangle (mangled_name, flags); if (result == NULL) { printf ("%s\n", mangled_name); --- 4905,4912 ---- { char *result; ! /* For command line args, also try to demangle type encodings. */ ! result = cplus_demangle (mangled_name, flags | DMGL_TYPES); if (result == NULL) { printf ("%s\n", mangled_name); *************** static void *** 4912,4918 **** print_demangler_list (stream) FILE *stream; { ! struct demangler_engine *demangler; fprintf (stream, "{%s", libiberty_demanglers->demangling_style_name); --- 4922,4928 ---- print_demangler_list (stream) FILE *stream; { ! const struct demangler_engine *demangler; fprintf (stream, "{%s", libiberty_demanglers->demangling_style_name); *************** extern int prepends_underscore; *** 4956,4962 **** int strip_underscore = 0; ! static struct option long_options[] = { {"strip-underscores", no_argument, 0, '_'}, {"format", required_argument, 0, 's'}, {"help", no_argument, 0, 'h'}, --- 4966,4972 ---- int strip_underscore = 0; ! static const struct option long_options[] = { {"strip-underscores", no_argument, 0, '_'}, {"format", required_argument, 0, 's'}, {"help", no_argument, 0, 'h'}, *************** main (argc, argv) *** 5142,5148 **** { int skip_first = 0; ! if (mbuffer[0] == '.') ++skip_first; if (strip_underscore && mbuffer[skip_first] == '_') ++skip_first; --- 5152,5158 ---- { int skip_first = 0; ! if (mbuffer[0] == '.' || mbuffer[0] == '$') ++skip_first; if (strip_underscore && mbuffer[skip_first] == '_') ++skip_first; diff -Nrc3pad gcc-3.0.4/libiberty/dyn-string.c gcc-3.1/libiberty/dyn-string.c *** gcc-3.0.4/libiberty/dyn-string.c Tue Sep 5 01:01:12 2000 --- gcc-3.1/libiberty/dyn-string.c Mon Apr 1 22:09:10 2002 *************** *** 1,5 **** /* An abstract string datatype. ! Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. Contributed by Mark Mitchell (mark@markmitchell.com). This file is part of GNU CC. --- 1,5 ---- /* An abstract string datatype. ! Copyright (C) 1998, 1999, 2000, 2002 Free Software Foundation, Inc. Contributed by Mark Mitchell (mark@markmitchell.com). This file is part of GNU CC. *************** it under the terms of the GNU General Pu *** 9,14 **** --- 9,23 ---- the Free Software Foundation; either version 2, or (at your option) any later version. + In addition to the permissions in the GNU General Public License, the + Free Software Foundation gives you unlimited permission to link the + compiled version of this file into combinations with other programs, + and to distribute those combinations without any restriction coming + from the use of this file. (The General Public License restrictions + do apply in other respects; for example, they cover modification of + the file, and distribution when not linked into a combined + executable.) + 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 *************** Boston, MA 02111-1307, USA. */ *** 41,47 **** abort if an allocation fails. Instead, percolate an error code up through the call chain. */ ! #ifdef IN_LIBGCC2 #define RETURN_ON_ALLOCATION_FAILURE #endif --- 50,56 ---- abort if an allocation fails. Instead, percolate an error code up through the call chain. */ ! #if defined(IN_LIBGCC2) || defined(IN_GLIBCPP_V3) #define RETURN_ON_ALLOCATION_FAILURE #endif diff -Nrc3pad gcc-3.0.4/libiberty/fdmatch.c gcc-3.1/libiberty/fdmatch.c *** gcc-3.0.4/libiberty/fdmatch.c Fri May 15 23:14:05 1998 --- gcc-3.1/libiberty/fdmatch.c Tue Oct 16 02:50:13 2001 *************** Boston, MA 02111-1307, USA. */ *** 20,44 **** /* ! NAME ! ! fdmatch -- see if two file descriptors refer to same file ! ! SYNOPSIS ! ! int fdmatch (int fd1, int fd2) ! DESCRIPTION ! Check to see if two open file descriptors refer to the same file. ! This is useful, for example, when we have an open file descriptor ! for an unnamed file, and the name of a file that we believe to ! correspond to that fd. This can happen when we are exec'd with ! an already open file (stdout for example) or from the SVR4 /proc ! calls that return open file descriptors for mapped address spaces. ! All we have to do is open the file by name and check the two file ! descriptors for a match, which is done by comparing major&minor ! device numbers and inode numbers. BUGS --- 20,38 ---- /* ! @deftypefn Extension int fdmatch (int @var{fd1}, int @var{fd2}) ! Check to see if two open file descriptors refer to the same file. ! This is useful, for example, when we have an open file descriptor for ! an unnamed file, and the name of a file that we believe to correspond ! to that fd. This can happen when we are exec'd with an already open ! file (@code{stdout} for example) or from the SVR4 @file{/proc} calls ! that return open file descriptors for mapped address spaces. All we ! have to do is open the file by name and check the two file descriptors ! for a match, which is done by comparing major and minor device numbers ! and inode numbers. ! @end deftypefn BUGS diff -Nrc3pad gcc-3.0.4/libiberty/ffs.c gcc-3.1/libiberty/ffs.c *** gcc-3.0.4/libiberty/ffs.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/libiberty/ffs.c Wed Oct 17 21:15:40 2001 *************** *** 0 **** --- 1,27 ---- + /* ffs -- Find the first bit set in the parameter + + @deftypefn Supplemental int ffs (int @var{valu}) + + Find the first (least significant) bit set in @var{valu}. Bits are + numbered from right to left, starting with bit 1 (corresponding to the + value 1). If @var{valu} is zero, zero is returned. + + @end deftypefn + + */ + + int + ffs (valu) + register int valu; + { + register int bit; + + if (valu == 0) + return 0; + + for (bit = 1; !(valu & 1); bit++) + valu >>= 1; + + return bit; + } + diff -Nrc3pad gcc-3.0.4/libiberty/fibheap.c gcc-3.1/libiberty/fibheap.c *** gcc-3.0.4/libiberty/fibheap.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/libiberty/fibheap.c Wed Aug 22 21:02:06 2001 *************** *** 0 **** --- 1,523 ---- + /* A Fibonacci heap datatype. + Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc. + Contributed by Daniel Berlin (dan@cgsoftware.com). + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GNU CC is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU CC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + #ifdef HAVE_CONFIG_H + #include "config.h" + #endif + #ifdef HAVE_LIMITS_H + #include + #endif + #ifdef HAVE_STDLIB_H + #include + #endif + #ifdef HAVE_STRING_H + #include + #endif + #include "libiberty.h" + #include "fibheap.h" + + + #define FIBHEAPKEY_MIN LONG_MIN + + static void fibheap_ins_root PARAMS ((fibheap_t, fibnode_t)); + static void fibheap_rem_root PARAMS ((fibheap_t, fibnode_t)); + static void fibheap_consolidate PARAMS ((fibheap_t)); + static void fibheap_link PARAMS ((fibheap_t, fibnode_t, fibnode_t)); + static void fibheap_cut PARAMS ((fibheap_t, fibnode_t, fibnode_t)); + static void fibheap_cascading_cut PARAMS ((fibheap_t, fibnode_t)); + static fibnode_t fibheap_extr_min_node PARAMS ((fibheap_t)); + static int fibheap_compare PARAMS ((fibheap_t, fibnode_t, fibnode_t)); + static int fibheap_comp_data PARAMS ((fibheap_t, fibheapkey_t, void *, + fibnode_t)); + static fibnode_t fibnode_new PARAMS ((void)); + static void fibnode_insert_after PARAMS ((fibnode_t, fibnode_t)); + #define fibnode_insert_before(a, b) fibnode_insert_after (a->left, b) + static fibnode_t fibnode_remove PARAMS ((fibnode_t)); + + + /* Create a new fibonacci heap. */ + fibheap_t + fibheap_new () + { + return (fibheap_t) xcalloc (1, sizeof (struct fibheap)); + } + + /* Create a new fibonacci heap node. */ + static fibnode_t + fibnode_new () + { + fibnode_t node; + + node = xcalloc (1, sizeof *node); + node->left = node; + node->right = node; + + return node; + } + + static inline int + fibheap_compare (heap, a, b) + fibheap_t heap ATTRIBUTE_UNUSED; + fibnode_t a; + fibnode_t b; + { + if (a->key < b->key) + return -1; + if (a->key > b->key) + return 1; + return 0; + } + + static inline int + fibheap_comp_data (heap, key, data, b) + fibheap_t heap; + fibheapkey_t key; + void *data; + fibnode_t b; + { + struct fibnode a; + + a.key = key; + a.data = data; + + return fibheap_compare (heap, &a, b); + } + + /* Insert DATA, with priority KEY, into HEAP. */ + fibnode_t + fibheap_insert (heap, key, data) + fibheap_t heap; + fibheapkey_t key; + void *data; + { + fibnode_t node; + + /* Create the new node. */ + node = fibnode_new (); + + /* Set the node's data. */ + node->data = data; + node->key = key; + + /* Insert it into the root list. */ + fibheap_ins_root (heap, node); + + /* If their was no minimum, or this key is less than the min, + it's the new min. */ + if (heap->min == NULL || node->key < heap->min->key) + heap->min = node; + + heap->nodes++; + + return node; + } + + /* Return the data of the minimum node (if we know it). */ + void * + fibheap_min (heap) + fibheap_t heap; + { + /* If there is no min, we can't easily return it. */ + if (heap->min == NULL) + return NULL; + return heap->min->data; + } + + /* Return the key of the minimum node (if we know it). */ + fibheapkey_t + fibheap_min_key (heap) + fibheap_t heap; + { + /* If there is no min, we can't easily return it. */ + if (heap->min == NULL) + return 0; + return heap->min->key; + } + + /* Union HEAPA and HEAPB into a new heap. */ + fibheap_t + fibheap_union (heapa, heapb) + fibheap_t heapa; + fibheap_t heapb; + { + fibnode_t a_root, b_root, temp; + + /* If one of the heaps is empty, the union is just the other heap. */ + if ((a_root = heapa->root) == NULL) + { + free (heapa); + return heapb; + } + if ((b_root = heapb->root) == NULL) + { + free (heapb); + return heapa; + } + + /* Merge them to the next nodes on the opposite chain. */ + a_root->left->right = b_root; + b_root->left->right = a_root; + temp = a_root->left; + a_root->left = b_root->left; + b_root->left = temp; + heapa->nodes += heapb->nodes; + + /* And set the new minimum, if it's changed. */ + if (fibheap_compare (heapa, heapb->min, heapa->min) < 0) + heapa->min = heapb->min; + + free (heapb); + return heapa; + } + + /* Extract the data of the minimum node from HEAP. */ + void * + fibheap_extract_min (heap) + fibheap_t heap; + { + fibnode_t z; + void *ret = NULL; + + /* If we don't have a min set, it means we have no nodes. */ + if (heap->min != NULL) + { + /* Otherwise, extract the min node, free the node, and return the + node's data. */ + z = fibheap_extr_min_node (heap); + ret = z->data; + free (z); + } + + return ret; + } + + /* Replace both the KEY and the DATA associated with NODE. */ + void * + fibheap_replace_key_data (heap, node, key, data) + fibheap_t heap; + fibnode_t node; + fibheapkey_t key; + void *data; + { + void *odata; + int okey; + fibnode_t y; + + /* If we wanted to, we could actually do a real increase by redeleting and + inserting. However, this would require O (log n) time. So just bail out + for now. */ + if (fibheap_comp_data (heap, key, data, node) > 0) + return NULL; + + odata = node->data; + okey = node->key; + node->data = data; + node->key = key; + y = node->parent; + + if (okey == key) + return odata; + + /* These two compares are specifically <= 0 to make sure that in the case + of equality, a node we replaced the data on, becomes the new min. This + is needed so that delete's call to extractmin gets the right node. */ + if (y != NULL && fibheap_compare (heap, node, y) <= 0) + { + fibheap_cut (heap, node, y); + fibheap_cascading_cut (heap, y); + } + + if (fibheap_compare (heap, node, heap->min) <= 0) + heap->min = node; + + return odata; + } + + /* Replace the DATA associated with NODE. */ + void * + fibheap_replace_data (heap, node, data) + fibheap_t heap; + fibnode_t node; + void *data; + { + return fibheap_replace_key_data (heap, node, node->key, data); + } + + /* Replace the KEY associated with NODE. */ + fibheapkey_t + fibheap_replace_key (heap, node, key) + fibheap_t heap; + fibnode_t node; + fibheapkey_t key; + { + int okey = node->key; + fibheap_replace_key_data (heap, node, key, node->data); + return okey; + } + + /* Delete NODE from HEAP. */ + void * + fibheap_delete_node (heap, node) + fibheap_t heap; + fibnode_t node; + { + void *ret = node->data; + + /* To perform delete, we just make it the min key, and extract. */ + fibheap_replace_key (heap, node, FIBHEAPKEY_MIN); + fibheap_extract_min (heap); + + return ret; + } + + /* Delete HEAP. */ + void + fibheap_delete (heap) + fibheap_t heap; + { + while (heap->min != NULL) + free (fibheap_extr_min_node (heap)); + + free (heap); + } + + /* Determine if HEAP is empty. */ + int + fibheap_empty (heap) + fibheap_t heap; + { + return heap->nodes == 0; + } + + /* Extract the minimum node of the heap. */ + static fibnode_t + fibheap_extr_min_node (heap) + fibheap_t heap; + { + fibnode_t ret = heap->min; + fibnode_t x, y, orig; + + /* Attach the child list of the minimum node to the root list of the heap. + If there is no child list, we don't do squat. */ + for (x = ret->child, orig = NULL; x != orig && x != NULL; x = y) + { + if (orig == NULL) + orig = x; + y = x->right; + x->parent = NULL; + fibheap_ins_root (heap, x); + } + + /* Remove the old root. */ + fibheap_rem_root (heap, ret); + heap->nodes--; + + /* If we are left with no nodes, then the min is NULL. */ + if (heap->nodes == 0) + heap->min = NULL; + else + { + /* Otherwise, consolidate to find new minimum, as well as do the reorg + work that needs to be done. */ + heap->min = ret->right; + fibheap_consolidate (heap); + } + + return ret; + } + + /* Insert NODE into the root list of HEAP. */ + static void + fibheap_ins_root (heap, node) + fibheap_t heap; + fibnode_t node; + { + /* If the heap is currently empty, the new node becomes the singleton + circular root list. */ + if (heap->root == NULL) + { + heap->root = node; + node->left = node; + node->right = node; + return; + } + + /* Otherwise, insert it in the circular root list between the root + and it's right node. */ + fibnode_insert_after (heap->root, node); + } + + /* Remove NODE from the rootlist of HEAP. */ + static void + fibheap_rem_root (heap, node) + fibheap_t heap; + fibnode_t node; + { + if (node->left == node) + heap->root = NULL; + else + heap->root = fibnode_remove (node); + } + + /* Consolidate the heap. */ + static void + fibheap_consolidate (heap) + fibheap_t heap; + { + fibnode_t a[1 + 8 * sizeof (long)]; + fibnode_t w; + fibnode_t y; + fibnode_t x; + int i; + int d; + int D; + + D = 1 + 8 * sizeof (long); + + memset (a, 0, sizeof (fibnode_t) * D); + + while ((w = heap->root) != NULL) + { + x = w; + fibheap_rem_root (heap, w); + d = x->degree; + while (a[d] != NULL) + { + y = a[d]; + if (fibheap_compare (heap, x, y) > 0) + { + fibnode_t temp; + temp = x; + x = y; + y = temp; + } + fibheap_link (heap, y, x); + a[d] = NULL; + d++; + } + a[d] = x; + } + heap->min = NULL; + for (i = 0; i < D; i++) + if (a[i] != NULL) + { + fibheap_ins_root (heap, a[i]); + if (heap->min == NULL || fibheap_compare (heap, a[i], heap->min) < 0) + heap->min = a[i]; + } + } + + /* Make NODE a child of PARENT. */ + static void + fibheap_link (heap, node, parent) + fibheap_t heap ATTRIBUTE_UNUSED; + fibnode_t node; + fibnode_t parent; + { + if (parent->child == NULL) + parent->child = node; + else + fibnode_insert_before (parent->child, node); + node->parent = parent; + parent->degree++; + node->mark = 0; + } + + /* Remove NODE from PARENT's child list. */ + static void + fibheap_cut (heap, node, parent) + fibheap_t heap; + fibnode_t node; + fibnode_t parent; + { + fibnode_remove (node); + parent->degree--; + fibheap_ins_root (heap, node); + node->parent = NULL; + node->mark = 0; + } + + static void + fibheap_cascading_cut (heap, y) + fibheap_t heap; + fibnode_t y; + { + fibnode_t z; + + while ((z = y->parent) != NULL) + { + if (y->mark == 0) + { + y->mark = 1; + return; + } + else + { + fibheap_cut (heap, y, z); + y = z; + } + } + } + + static void + fibnode_insert_after (a, b) + fibnode_t a; + fibnode_t b; + { + if (a == a->right) + { + a->right = b; + a->left = b; + b->right = a; + b->left = a; + } + else + { + b->right = a->right; + a->right->left = b; + a->right = b; + b->left = a; + } + } + + static fibnode_t + fibnode_remove (node) + fibnode_t node; + { + fibnode_t ret; + + if (node == node->left) + ret = NULL; + else + ret = node->left; + + if (node->parent != NULL && node->parent->child == node) + node->parent->child = ret; + + node->right->left = node->left; + node->left->right = node->right; + + node->parent = NULL; + node->left = node; + node->right = node; + + return ret; + } diff -Nrc3pad gcc-3.0.4/libiberty/floatformat.c gcc-3.1/libiberty/floatformat.c *** gcc-3.0.4/libiberty/floatformat.c Wed May 31 11:00:54 2000 --- gcc-3.1/libiberty/floatformat.c Tue Aug 21 00:09:09 2001 *************** const struct floatformat floatformat_iee *** 66,72 **** { floatformat_littlebyte_bigword, 64, 0, 1, 11, 1023, 2047, 12, 52, floatformat_intbit_no, ! "floatformat_ieee_double_little" }; const struct floatformat floatformat_i387_ext = --- 66,72 ---- { floatformat_littlebyte_bigword, 64, 0, 1, 11, 1023, 2047, 12, 52, floatformat_intbit_no, ! "floatformat_ieee_double_littlebyte_bigword" }; const struct floatformat floatformat_i387_ext = *************** const struct floatformat floatformat_i96 *** 91,107 **** }; const struct floatformat floatformat_m88110_ext = { ! #ifdef HARRIS_FLOAT_FORMAT /* Harris uses raw format 128 bytes long, but the number is just an ieee double, and the last 64 bits are wasted. */ floatformat_big,128, 0, 1, 11, 0x3ff, 0x7ff, 12, 52, floatformat_intbit_no, ! "floatformat_m88110_ext(harris)" ! #else ! floatformat_big, 80, 0, 1, 15, 0x3fff, 0x7fff, 16, 64, ! floatformat_intbit_yes, ! "floatformat_m88110_ext" ! #endif /* HARRIS_FLOAT_FORMAT */ }; const struct floatformat floatformat_arm_ext = { --- 91,107 ---- }; const struct floatformat floatformat_m88110_ext = { ! floatformat_big, 80, 0, 1, 15, 0x3fff, 0x7fff, 16, 64, ! floatformat_intbit_yes, ! "floatformat_m88110_ext" ! }; ! const struct floatformat floatformat_m88110_harris_ext = ! { /* Harris uses raw format 128 bytes long, but the number is just an ieee double, and the last 64 bits are wasted. */ floatformat_big,128, 0, 1, 11, 0x3ff, 0x7ff, 12, 52, floatformat_intbit_no, ! "floatformat_m88110_ext_harris" }; const struct floatformat floatformat_arm_ext = { *************** const struct floatformat floatformat_arm *** 110,115 **** --- 110,153 ---- floatformat_intbit_yes, "floatformat_arm_ext" }; + const struct floatformat floatformat_arm_ext_big = + { + /* Bits 1 to 16 are unused. */ + floatformat_big, 96, 0, 17, 15, 0x3fff, 0x7fff, 32, 64, + floatformat_intbit_yes, + "floatformat_arm_ext_big" + }; + const struct floatformat floatformat_arm_ext_littlebyte_bigword = + { + /* Bits 1 to 16 are unused. */ + floatformat_littlebyte_bigword, 96, 0, 17, 15, 0x3fff, 0x7fff, 32, 64, + floatformat_intbit_yes, + "floatformat_arm_ext_littlebyte_bigword" + }; + const struct floatformat floatformat_ia64_spill_big = + { + floatformat_big, 128, 0, 1, 17, 65535, 0x1ffff, 18, 64, + floatformat_intbit_yes, + "floatformat_ia64_spill_big" + }; + const struct floatformat floatformat_ia64_spill_little = + { + floatformat_little, 128, 0, 1, 17, 65535, 0x1ffff, 18, 64, + floatformat_intbit_yes, + "floatformat_ia64_spill_little" + }; + const struct floatformat floatformat_ia64_quad_big = + { + floatformat_big, 128, 0, 1, 15, 16383, 0x7fff, 16, 112, + floatformat_intbit_no, + "floatformat_ia64_quad_big" + }; + const struct floatformat floatformat_ia64_quad_little = + { + floatformat_little, 128, 0, 1, 15, 16383, 0x7fff, 16, 112, + floatformat_intbit_no, + "floatformat_ia64_quad_little" + }; static unsigned long get_field PARAMS ((unsigned char *, enum floatformat_byteorders, diff -Nrc3pad gcc-3.0.4/libiberty/fnmatch.txh gcc-3.1/libiberty/fnmatch.txh *** gcc-3.0.4/libiberty/fnmatch.txh Thu Jan 1 00:00:00 1970 --- gcc-3.1/libiberty/fnmatch.txh Wed Oct 17 21:15:40 2001 *************** *** 0 **** --- 1,48 ---- + @deftypefn Replacement int fnmatch (const char *@var{pattern}, const char *@var{string}, int @var{flags}) + + Matches @var{string} against @var{pattern}, returning zero if it + matches, @code{FNM_NOMATCH} if not. @var{pattern} may contain the + wildcards @code{?} to match any one character, @code{*} to match any + zero or more characters, or a set of alternate characters in square + brackets, like @samp{[a-gt8]}, which match one character (@code{a} + through @code{g}, or @code{t}, or @code{8}, in this example) if that one + character is in the set. A set may be inverted (i.e., match anything + except what's in the set) by giving @code{^} or @code{!} as the first + character in the set. To include those characters in the set, list them + as anything other than the first character of the set. To include a + dash in the set, list it last in the set. A backslash character makes + the following character not special, so for example you could match + against a literal asterisk with @samp{\*}. To match a literal + backslash, use @samp{\\}. + + @code{flags} controls various aspects of the matching process, and is a + boolean OR of zero or more of the following values (defined in + @code{}): + + @table @code + + @item FNM_PATHNAME + @itemx FNM_FILE_NAME + @var{string} is assumed to be a path name. No wildcard will ever match + @code{/}. + + @item FNM_NOESCAPE + Do not interpret backslashes as quoting the following special character. + + @item FNM_PERIOD + A leading period (at the beginning of @var{string}, or if + @code{FNM_PATHNAME} after a slash) is not matched by @code{*} or + @code{?} but must be matched explicitly. + + @item FNM_LEADING_DIR + Means that @var{string} also matches @var{pattern} if some initial part + of @var{string} matches, and is followed by @code{/} and zero or more + characters. For example, @samp{foo*} would match either @samp{foobar} + or @samp{foobar/grill}. + + @item FNM_CASEFOLD + Ignores case when performing the comparison. + + @end table + + @end deftypefn diff -Nrc3pad gcc-3.0.4/libiberty/functions.texi gcc-3.1/libiberty/functions.texi *** gcc-3.0.4/libiberty/functions.texi Thu Jan 1 00:00:00 1970 --- gcc-3.1/libiberty/functions.texi Wed Oct 17 21:15:41 2001 *************** *** 0 **** --- 1,937 ---- + @c Automatically generated from *.c and others (the comments before + @c each entry tell you which file and where in that file). DO NOT EDIT! + @c Edit the *.c files, configure with --enable-maintainer-mode, + @c and let gather-docs build you a new copy. + + @c alloca.c:26 + @deftypefn Replacement void* alloca (size_t @var{size}) + + This function allocates memory which will be automatically reclaimed + after the procedure exits. The @libib{} implementation does not free + the memory immediately but will do so eventually during subsequent + calls to this function. Memory is allocated using @code{xmalloc} under + normal circumstances. + + The header file @file{alloca-conf.h} can be used in conjunction with the + GNU Autoconf test @code{AC_FUNC_ALLOCA} to test for and properly make + available this function. The @code{AC_FUNC_ALLOCA} test requires that + client code use a block of preprocessor code to be safe (see the Autoconf + manual for more); this header incorporates that logic and more, including + the possibility of a GCC built-in function. + + @end deftypefn + + @c asprintf.c:33 + @deftypefn Extension int asprintf (char **@var{resptr}, const char *@var{format}, ...) + + Like @code{sprintf}, but instead of passing a pointer to a buffer, you + pass a pointer to a pointer. This function will compute the size of + the buffer needed, allocate memory with @code{malloc}, and store a + pointer to the allocated memory in @code{*@var{resptr}}. The value + returned is the same as @code{sprintf} would return. If memory could + not be allocated, zero is returned and @code{NULL} is stored in + @code{*@var{resptr}}. + + @end deftypefn + + @c atexit.c:6 + @deftypefn Supplemental int atexit (void (*@var{f})()) + + Causes function @var{f} to be called at exit. Returns 0. + + @end deftypefn + + @c basename.c:6 + @deftypefn Supplemental char* basename (const char *@var{name}) + + Returns a pointer to the last component of pathname @var{name}. + Behavior is undefined if the pathname ends in a directory separator. + + @end deftypefn + + @c bcmp.c:6 + @deftypefn Supplemental int bcmp (char *@var{x}, char *@var{y}, int @var{count}) + + Compares the first @var{count} bytes of two areas of memory. Returns + zero if they are the same, nonzero otherwise. Returns zero if + @var{count} is zero. A nonzero result only indicates a difference, + it does not indicate any sorting order (say, by having a positive + result mean @var{x} sorts before @var{y}). + + @end deftypefn + + @c bcopy.c:3 + @deftypefn Supplemental void bcopy (char *@var{in}, char *@var{out}, int @var{length}) + + Copies @var{length} bytes from memory region @var{in} to region + @var{out}. The use of @code{bcopy} is deprecated in new programs. + + @end deftypefn + + @c bsearch.c:33 + @deftypefn Supplemental void* bsearch (const void *@var{key}, const void *@var{base}, size_t @var{nmemb}, size_t @var{size}, int (*@var{compar})(const void *, const void *)) + + Performs a search over an array of @var{nmemb} elements pointed to by + @var{base} for a member that matches the object pointed to by @var{key}. + The size of each member is specified by @var{size}. The array contents + should be sorted in ascending order according to the @var{compar} + comparison function. This routine should take two arguments pointing to + the @var{key} and to an array member, in that order, and should return an + integer less than, equal to, or greater than zero if the @var{key} object + is respectively less than, matching, or greater than the array member. + + @end deftypefn + + @c argv.c:139 + @deftypefn Extension char** buildargv (char *@var{sp}) + + Given a pointer to a string, parse the string extracting fields + separated by whitespace and optionally enclosed within either single + or double quotes (which are stripped off), and build a vector of + pointers to copies of the string for each field. The input string + remains unchanged. The last element of the vector is followed by a + @code{NULL} element. + + All of the memory for the pointer array and copies of the string + is obtained from @code{malloc}. All of the memory can be returned to the + system with the single function call @code{freeargv}, which takes the + returned result of @code{buildargv}, as it's argument. + + Returns a pointer to the argument vector if successful. Returns + @code{NULL} if @var{sp} is @code{NULL} or if there is insufficient + memory to complete building the argument vector. + + If the input is a null string (as opposed to a @code{NULL} pointer), + then buildarg returns an argument vector that has one arg, a null + string. + + @end deftypefn + + @c bzero.c:6 + @deftypefn Supplemental void bzero (char *@var{mem}, int @var{count}) + + Zeros @var{count} bytes starting at @var{mem}. Use of this function + is deprecated in favor of @code{memset}. + + @end deftypefn + + @c calloc.c:6 + @deftypefn Supplemental void* calloc (size_t @var{nelem}, size_t @var{elsize}) + + Uses @code{malloc} to allocate storage for @var{nelem} objects of + @var{elsize} bytes each, then zeros the memory. + + @end deftypefn + + @c choose-temp.c:42 + @deftypefn Extension char* choose_temp_base (void) + + Return a prefix for temporary file names or @code{NULL} if unable to + find one. The current directory is chosen if all else fails so the + program is exited if a temporary directory can't be found (@code{mktemp} + fails). The buffer for the result is obtained with @code{xmalloc}. + + This function is provided for backwards compatability only. Its use is + not recommended. + + @end deftypefn + + @c make-temp-file.c:88 + @deftypefn Replacement char* choose_tmpdir () + + Returns a pointer to a directory path suitable for creating temporary + files in. + + @end deftypefn + + @c clock.c:27 + @deftypefn Supplemental long clock (void) + + Returns an approximation of the CPU time used by the process as a + @code{clock_t}; divide this number by @samp{CLOCKS_PER_SEC} to get the + number of seconds used. + + @end deftypefn + + @c concat.c:24 + @deftypefn Extension char* concat (const char *@var{s1}, const char *@var{s2}, @dots{}, @code{NULL}) + + Concatenate zero or more of strings and return the result in freshly + @code{xmalloc}ed memory. Returns @code{NULL} if insufficient memory is + available. The argument list is terminated by the first @code{NULL} + pointer encountered. Pointers to empty strings are ignored. + + @end deftypefn + + @c argv.c:65 + @deftypefn Extension char** dupargv (char **@var{vector}) + + Duplicate an argument vector. Simply scans through @var{vector}, + duplicating each argument until the terminating @code{NULL} is found. + Returns a pointer to the argument vector if successful. Returns + @code{NULL} if there is insufficient memory to complete building the + argument vector. + + @end deftypefn + + @c strerror.c:566 + @deftypefn Extension int errno_max (void) + + Returns the maximum @code{errno} value for which a corresponding + symbolic name or message is available. Note that in the case where we + use the @code{sys_errlist} supplied by the system, it is possible for + there to be more symbolic names than messages, or vice versa. In + fact, the manual page for @code{perror(3C)} explicitly warns that one + should check the size of the table (@code{sys_nerr}) before indexing + it, since new error codes may be added to the system before they are + added to the table. Thus @code{sys_nerr} might be smaller than value + implied by the largest @code{errno} value defined in @code{}. + + We return the maximum value that can be used to obtain a meaningful + symbolic name or message. + + @end deftypefn + + @c fdmatch.c:23 + @deftypefn Extension int fdmatch (int @var{fd1}, int @var{fd2}) + + Check to see if two open file descriptors refer to the same file. + This is useful, for example, when we have an open file descriptor for + an unnamed file, and the name of a file that we believe to correspond + to that fd. This can happen when we are exec'd with an already open + file (@code{stdout} for example) or from the SVR4 @file{/proc} calls + that return open file descriptors for mapped address spaces. All we + have to do is open the file by name and check the two file descriptors + for a match, which is done by comparing major and minor device numbers + and inode numbers. + + @end deftypefn + + @c ffs.c:3 + @deftypefn Supplemental int ffs (int @var{valu}) + + Find the first (least significant) bit set in @var{valu}. Bits are + numbered from right to left, starting with bit 1 (corresponding to the + value 1). If @var{valu} is zero, zero is returned. + + @end deftypefn + + @c fnmatch.txh:1 + @deftypefn Replacement int fnmatch (const char *@var{pattern}, const char *@var{string}, int @var{flags}) + + Matches @var{string} against @var{pattern}, returning zero if it + matches, @code{FNM_NOMATCH} if not. @var{pattern} may contain the + wildcards @code{?} to match any one character, @code{*} to match any + zero or more characters, or a set of alternate characters in square + brackets, like @samp{[a-gt8]}, which match one character (@code{a} + through @code{g}, or @code{t}, or @code{8}, in this example) if that one + character is in the set. A set may be inverted (i.e., match anything + except what's in the set) by giving @code{^} or @code{!} as the first + character in the set. To include those characters in the set, list them + as anything other than the first character of the set. To include a + dash in the set, list it last in the set. A backslash character makes + the following character not special, so for example you could match + against a literal asterisk with @samp{\*}. To match a literal + backslash, use @samp{\\}. + + @code{flags} controls various aspects of the matching process, and is a + boolean OR of zero or more of the following values (defined in + @code{}): + + @table @code + + @item FNM_PATHNAME + @itemx FNM_FILE_NAME + @var{string} is assumed to be a path name. No wildcard will ever match + @code{/}. + + @item FNM_NOESCAPE + Do not interpret backslashes as quoting the following special character. + + @item FNM_PERIOD + A leading period (at the beginning of @var{string}, or if + @code{FNM_PATHNAME} after a slash) is not matched by @code{*} or + @code{?} but must be matched explicitly. + + @item FNM_LEADING_DIR + Means that @var{string} also matches @var{pattern} if some initial part + of @var{string} matches, and is followed by @code{/} and zero or more + characters. For example, @samp{foo*} would match either @samp{foobar} + or @samp{foobar/grill}. + + @item FNM_CASEFOLD + Ignores case when performing the comparison. + + @end table + + @end deftypefn + + @c argv.c:111 + @deftypefn Extension void freeargv (char **@var{vector}) + + Free an argument vector that was built using @code{buildargv}. Simply + scans through @var{vector}, freeing the memory for each argument until + the terminating @code{NULL} is found, and then frees @var{vector} + itself. + + @end deftypefn + + @c getruntime.c:78 + @deftypefn Replacement long get_run_time (void) + + Returns the time used so far, in microseconds. If possible, this is + the time used by this process, else it is the elapsed time since the + process started. + + @end deftypefn + + @c getcwd.c:6 + @deftypefn Supplemental char* getcwd (char *@var{pathname}, int @var{len}) + + Copy the absolute pathname for the current working directory into + @var{pathname}, which is assumed to point to a buffer of at least + @var{len} bytes, and return a pointer to the buffer. If the current + directory's path doesn't fit in @var{len} characters, the result is + @code{NULL} and @code{errno} is set. If @var{pathname} is a null pointer, + @code{getcwd} will obtain @var{len} bytes of space using + @code{malloc}. + + @end deftypefn + + @c getpagesize.c:5 + @deftypefn Supplemental int getpagesize (void) + + Returns the number of bytes in a page of memory. This is the + granularity of many of the system memory management routines. No + guarantee is made as to whether or not it is the same as the basic + memory management hardware page size. + + @end deftypefn + + @c getpwd.c:5 + @deftypefn Supplemental char* getpwd (void) + + Returns the current working directory. This implementation caches the + result on the assumption that the process will not call @code{chdir} + between calls to @code{getpwd}. + + @end deftypefn + + @c index.c:5 + @deftypefn Supplemental char* index (char *@var{s}, int @var{c}) + + Returns a pointer to the first occurrence of the character @var{c} in + the string @var{s}, or @code{NULL} if not found. The use of @code{index} is + deprecated in new programs in favor of @code{strchr}. + + @end deftypefn + + @c insque.c:6 + @deftypefn Supplemental void insque (struct qelem *@var{elem}, struct qelem *@var{pred}) + @deftypefnx Supplemental void remque (struct qelem *@var{elem}) + + Routines to manipulate queues built from doubly linked lists. The + @code{insque} routine inserts @var{elem} in the queue immediately + after @var{pred}. The @code{remque} routine removes @var{elem} from + its containing queue. These routines expect to be passed pointers to + structures which have as their first members a forward pointer and a + back pointer, like this prototype (although no prototype is provided): + + @example + struct qelem @{ + struct qelem *q_forw; + struct qelem *q_back; + char q_data[]; + @}; + @end example + + @end deftypefn + + @c lbasename.c:23 + @deftypefn Replacement {const char*} lbasename (const char *@var{name}) + + Given a pointer to a string containing a typical pathname + (@samp{/usr/src/cmd/ls/ls.c} for example), returns a pointer to the + last component of the pathname (@samp{ls.c} in this case). The + returned pointer is guaranteed to lie within the original + string. This latter fact is not true of many vendor C + libraries, which return special strings or modify the passed + strings for particular input. + + In particular, the empty string returns the same empty string, + and a path ending in @code{/} returns the empty string after it. + + @end deftypefn + + @c make-temp-file.c:138 + @deftypefn Replacement char* make_temp_file (const char *@var{suffix}) + + Return a temporary file name (as a string) or @code{NULL} if unable to + create one. @var{suffix} is a suffix to append to the file name. The + string is @code{malloc}ed, and the temporary file has been created. + + @end deftypefn + + @c memchr.c:3 + @deftypefn Supplemental void* memchr (const void *@var{s}, int @var{c}, size_t @var{n}) + + This function searches memory starting at @code{*@var{s}} for the + character @var{c}. The search only ends with the first occurrence of + @var{c}, or after @var{length} characters; in particular, a null + character does not terminate the search. If the character @var{c} is + found within @var{length} characters of @code{*@var{s}}, a pointer + to the character is returned. If @var{c} is not found, then @code{NULL} is + returned. + + @end deftypefn + + @c memcmp.c:6 + @deftypefn Supplemental int memcmp (const void *@var{x}, const void *@var{y}, size_t @var{count}) + + Compares the first @var{count} bytes of two areas of memory. Returns + zero if they are the same, a value less than zero if @var{x} is + lexically less than @var{y}, or a value greater than zero if @var{x} + is lexically greater than @var{y}. Note that lexical order is determined + as if comparing unsigned char arrays. + + @end deftypefn + + @c memcpy.c:6 + @deftypefn Supplemental void* memcpy (void *@var{out}, const void *@var{in}, size_t @var{length}) + + Copies @var{length} bytes from memory region @var{in} to region + @var{out}. Returns a pointer to @var{out}. + + @end deftypefn + + @c memmove.c:6 + @deftypefn Supplemental void* memmove (void *@var{from}, const void *@var{to}, size_t @var{count}) + + Copies @var{count} bytes from memory area @var{from} to memory area + @var{to}, returning a pointer to @var{to}. + + @end deftypefn + + @c memset.c:6 + @deftypefn Supplemental void* memset (void *@var{s}, int @var{c}, size_t @var{count}) + + Sets the first @var{count} bytes of @var{s} to the constant byte + @var{c}, returning a pointer to @var{s}. + + @end deftypefn + + @c mkstemps.c:54 + @deftypefn Replacement int mkstemps (char *@var{template}, int @var{suffix_len}) + + Generate a unique temporary file name from @var{template}. + @var{template} has the form: + + @example + @var{path}/ccXXXXXX@var{suffix} + @end example + + @var{suffix_len} tells us how long @var{suffix} is (it can be zero + length). The last six characters of @var{template} before @var{suffix} + must be @samp{XXXXXX}; they are replaced with a string that makes the + filename unique. Returns a file descriptor open on the file for + reading and writing. + + @end deftypefn + + @c pexecute.c:67 + @deftypefn Extension int pexecute (const char *@var{program}, char * const *@var{argv}, const char *@var{this_pname}, const char *@var{temp_base}, char **@var{errmsg_fmt}, char **@var{errmsg_arg}, int flags) + + Executes a program. + + @var{program} and @var{argv} are the arguments to + @code{execv}/@code{execvp}. + + @var{this_pname} is name of the calling program (i.e., @code{argv[0]}). + + @var{temp_base} is the path name, sans suffix, of a temporary file to + use if needed. This is currently only needed for MS-DOS ports that + don't use @code{go32} (do any still exist?). Ports that don't need it + can pass @code{NULL}. + + (@code{@var{flags} & PEXECUTE_SEARCH}) is non-zero if @env{PATH} should be searched + (??? It's not clear that GCC passes this flag correctly). (@code{@var{flags} & + PEXECUTE_FIRST}) is nonzero for the first process in chain. + (@code{@var{flags} & PEXECUTE_FIRST}) is nonzero for the last process + in chain. The first/last flags could be simplified to only mark the + last of a chain of processes but that requires the caller to always + mark the last one (and not give up early if some error occurs). + It's more robust to require the caller to mark both ends of the chain. + + The result is the pid on systems like Unix where we + @code{fork}/@code{exec} and on systems like WIN32 and OS/2 where we + use @code{spawn}. It is up to the caller to wait for the child. + + The result is the @code{WEXITSTATUS} on systems like MS-DOS where we + @code{spawn} and wait for the child here. + + Upon failure, @var{errmsg_fmt} and @var{errmsg_arg} are set to the + text of the error message with an optional argument (if not needed, + @var{errmsg_arg} is set to @code{NULL}), and @minus{}1 is returned. + @code{errno} is available to the caller to use. + + @end deftypefn + + @c strsignal.c:547 + @deftypefn Supplemental void psignal (unsigned @var{signo}, char *@var{message}) + + Print @var{message} to the standard error, followed by a colon, + followed by the description of the signal specified by @var{signo}, + followed by a newline. + + @end deftypefn + + @c putenv.c:21 + @deftypefn Supplemental int putenv (const char *@var{string}) + + Uses @code{setenv} or @code{unsetenv} to put @var{string} into + the environment or remove it. If @var{string} is of the form + @samp{name=value} the string is added; if no @samp{=} is present the + name is unset/removed. + + @end deftypefn + + @c pexecute.c:104 + @deftypefn Extension int pwait (int @var{pid}, int *@var{status}, int @var{flags}) + + Waits for a program started by @code{pexecute} to finish. + + @var{pid} is the process id of the task to wait for. @var{status} is + the `status' argument to wait. @var{flags} is currently unused (allows + future enhancement without breaking upward compatibility). Pass 0 for now. + + The result is the pid of the child reaped, or -1 for failure + (@code{errno} says why). + + On systems that don't support waiting for a particular child, @var{pid} is + ignored. On systems like MS-DOS that don't really multitask @code{pwait} + is just a mechanism to provide a consistent interface for the caller. + + @end deftypefn + + @c random.c:39 + @deftypefn Supplement {long int} random (void) + @deftypefnx Supplement void srandom (unsigned int @var{seed}) + @deftypefnx Supplement void* initstate (unsigned int @var{seed}, void *@var{arg_state}, unsigned long @var{n}) + @deftypefnx Supplement void* setstate (void *@var{arg_state}) + + Random number functions. @code{random} returns a random number in the + range 0 to @code{LONG_MAX}. @code{srandom} initializes the random + number generator to some starting point determined by @var{seed} + (else, the values returned by @code{random} are always the same for each + run of the program). @code{initstate} and @code{setstate} allow fine-grained + control over the state of the random number generator. + + @end deftypefn + + @c concat.c:177 + @deftypefn Extension char* reconcat (char *@var{optr}, const char *@var{s1}, @dots{}, @code{NULL}) + + Same as @code{concat}, except that if @var{optr} is not @code{NULL} it + is freed after the string is created. This is intended to be useful + when you're extending an existing string or building up a string in a + loop: + + @example + str = reconcat (str, "pre-", str, NULL); + @end example + + @end deftypefn + + @c rename.c:6 + @deftypefn Supplemental int rename (const char *@var{old}, const char *@var{new}) + + Renames a file from @var{old} to @var{new}. If @var{new} already + exists, it is removed. + + @end deftypefn + + @c rindex.c:5 + @deftypefn Supplemental char* rindex (const char *@var{s}, int @var{c}) + + Returns a pointer to the last occurrence of the character @var{c} in + the string @var{s}, or @code{NULL} if not found. The use of @code{rindex} is + deprecated in new programs in favor of @code{strrchr}. + + @end deftypefn + + @c setenv.c:22 + @deftypefn Supplemental int setenv (const char *@var{name}, const char *@var{value}, int @var{overwrite}) + @deftypefnx Supplemental void unsetenv (const char *@var{name}) + + @code{setenv} adds @var{name} to the environment with value + @var{value}. If the name was already present in the environment, + the new value will be stored only if @var{overwrite} is nonzero. + The companion @code{unsetenv} function removes @var{name} from the + environment. This implementation is not safe for multithreaded code. + + @end deftypefn + + @c strsignal.c:353 + @deftypefn Extension int signo_max (void) + + Returns the maximum signal value for which a corresponding symbolic + name or message is available. Note that in the case where we use the + @code{sys_siglist} supplied by the system, it is possible for there to + be more symbolic names than messages, or vice versa. In fact, the + manual page for @code{psignal(3b)} explicitly warns that one should + check the size of the table (@code{NSIG}) before indexing it, since + new signal codes may be added to the system before they are added to + the table. Thus @code{NSIG} might be smaller than value implied by + the largest signo value defined in @code{}. + + We return the maximum value that can be used to obtain a meaningful + symbolic name or message. + + @end deftypefn + + @c sigsetmask.c:8 + @deftypefn Supplemental int sigsetmask (int @var{set}) + + Sets the signal mask to the one provided in @var{set} and returns + the old mask (which, for libiberty's implementation, will always + be the value @code{1}). + + @end deftypefn + + @c spaces.c:22 + @deftypefn Extension char* spaces (int @var{count}) + + Returns a pointer to a memory region filled with the specified + number of spaces and null terminated. The returned pointer is + valid until at least the next call. + + @end deftypefn + + @c strcasecmp.c:15 + @deftypefn Supplemental int strcasecmp (const char *@var{s1}, const char *@var{s2}) + + A case-insensitive @code{strcmp}. + + @end deftypefn + + @c strchr.c:6 + @deftypefn Supplemental char* strchr (const char *@var{s}, int @var{c}) + + Returns a pointer to the first occurrence of the character @var{c} in + the string @var{s}, or @code{NULL} if not found. If @var{c} is itself the + null character, the results are undefined. + + @end deftypefn + + @c strdup.c:3 + @deftypefn Supplemental char* strdup (const char *@var{s}) + + Returns a pointer to a copy of @var{s} in memory obtained from + @code{malloc}, or @code{NULL} if insufficient memory was available. + + @end deftypefn + + @c strerror.c:670 + @deftypefn Replacement {const char*} strerrno (int @var{errnum}) + + Given an error number returned from a system call (typically returned + in @code{errno}), returns a pointer to a string containing the + symbolic name of that error number, as found in @code{}. + + If the supplied error number is within the valid range of indices for + symbolic names, but no name is available for the particular error + number, then returns the string @samp{Error @var{num}}, where @var{num} + is the error number. + + If the supplied error number is not within the range of valid + indices, then returns @code{NULL}. + + The contents of the location pointed to are only guaranteed to be + valid until the next call to @code{strerrno}. + + @end deftypefn + + @c strerror.c:602 + @deftypefn Supplemental char* strerror (int @var{errnoval}) + + Maps an @code{errno} number to an error message string, the contents + of which are implementation defined. On systems which have the + external variables @code{sys_nerr} and @code{sys_errlist}, these + strings will be the same as the ones used by @code{perror}. + + If the supplied error number is within the valid range of indices for + the @code{sys_errlist}, but no message is available for the particular + error number, then returns the string @samp{Error @var{num}}, where + @var{num} is the error number. + + If the supplied error number is not a valid index into + @code{sys_errlist}, returns @code{NULL}. + + The returned string is only guaranteed to be valid only until the + next call to @code{strerror}. + + @end deftypefn + + @c strncasecmp.c:15 + @deftypefn Supplemental int strncasecmp (const char *@var{s1}, const char *@var{s2}) + + A case-insensitive @code{strncmp}. + + @end deftypefn + + @c strncmp.c:6 + @deftypefn Supplemental int strncmp (const char *@var{s1}, const char *@var{s2}, size_t @var{n}) + + Compares the first @var{n} bytes of two strings, returning a value as + @code{strcmp}. + + @end deftypefn + + @c strrchr.c:6 + @deftypefn Supplemental char* strrchr (const char *@var{s}, int @var{c}) + + Returns a pointer to the last occurrence of the character @var{c} in + the string @var{s}, or @code{NULL} if not found. If @var{c} is itself the + null character, the results are undefined. + + @end deftypefn + + @c strsignal.c:388 + @deftypefn Supplemental {const char *} strsignal (int @var{signo}) + + Maps an signal number to an signal message string, the contents of + which are implementation defined. On systems which have the external + variable @code{sys_siglist}, these strings will be the same as the + ones used by @code{psignal()}. + + If the supplied signal number is within the valid range of indices for + the @code{sys_siglist}, but no message is available for the particular + signal number, then returns the string @samp{Signal @var{num}}, where + @var{num} is the signal number. + + If the supplied signal number is not a valid index into + @code{sys_siglist}, returns @code{NULL}. + + The returned string is only guaranteed to be valid only until the next + call to @code{strsignal}. + + @end deftypefn + + @c strsignal.c:452 + @deftypefn Extension {const char*} strsigno (int @var{signo}) + + Given an signal number, returns a pointer to a string containing the + symbolic name of that signal number, as found in @code{}. + + If the supplied signal number is within the valid range of indices for + symbolic names, but no name is available for the particular signal + number, then returns the string @samp{Signal @var{num}}, where + @var{num} is the signal number. + + If the supplied signal number is not within the range of valid + indices, then returns @code{NULL}. + + The contents of the location pointed to are only guaranteed to be + valid until the next call to @code{strsigno}. + + @end deftypefn + + @c strstr.c:6 + @deftypefn Supplemental char* strstr (const char *@var{string}, const char *@var{sub}) + + This function searches for the substring @var{sub} in the string + @var{string}, not including the terminating null characters. A pointer + to the first occurrence of @var{sub} is returned, or @code{NULL} if the + substring is absent. If @var{sub} points to a string with zero + length, the function returns @var{string}. + + @end deftypefn + + @c strtod.c:27 + @deftypefn Supplemental double strtod (const char *@var{string}, char **@var{endptr}) + + This ISO C function converts the initial portion of @var{string} to a + @code{double}. If @var{endptr} is not @code{NULL}, a pointer to the + character after the last character used in the conversion is stored in + the location referenced by @var{endptr}. If no conversion is + performed, zero is returned and the value of @var{string} is stored in + the location referenced by @var{endptr}. + + @end deftypefn + + @c strerror.c:730 + @deftypefn Extension int strtoerrno (const char *@var{name}) + + Given the symbolic name of a error number (e.g., @code{EACCES}), map it + to an errno value. If no translation is found, returns 0. + + @end deftypefn + + @c strtol.c:33 + @deftypefn Supplemental {long int} strtol (const char *@var{string}, char **@var{endptr}, int @var{base}) + @deftypefnx Supplemental {unsigned long int} strtoul (const char *@var{string}, char **@var{endptr}, int @var{base}) + + The @code{strtol} function converts the string in @var{string} to a + long integer value according to the given @var{base}, which must be + between 2 and 36 inclusive, or be the special value 0. If @var{base} + is 0, @code{strtol} will look for the prefixes @code{0} and @code{0x} + to indicate bases 8 and 16, respectively, else default to base 10. + When the base is 16 (either explicitly or implicitly), a prefix of + @code{0x} is allowed. The handling of @var{endptr} is as that of + @code{strtod} above. The @code{strtoul} function is the same, except + that the converted value is unsigned. + + @end deftypefn + + @c strsignal.c:507 + @deftypefn Extension int strtosigno (const char *@var{name}) + + Given the symbolic name of a signal, map it to a signal number. If no + translation is found, returns 0. + + @end deftypefn + + @c tmpnam.c:3 + @deftypefn Supplemental char* tmpnam (char *@var{s}) + + This function attempts to create a name for a temporary file, which + will be a valid file name yet not exist when @code{tmpnam} checks for + it. @var{s} must point to a buffer of at least @code{L_tmpnam} bytes, + or be @code{NULL}. Use of this function creates a security risk, and it must + not be used in new projects. Use @code{mkstemp} instead. + + @end deftypefn + + @c vasprintf.c:48 + @deftypefn Extension int vasprintf (char **@var{resptr}, const char *@var{format}, va_list @var{args}) + + Like @code{vsprintf}, but instead of passing a pointer to a buffer, + you pass a pointer to a pointer. This function will compute the size + of the buffer needed, allocate memory with @code{malloc}, and store a + pointer to the allocated memory in @code{*@var{resptr}}. The value + returned is the same as @code{vsprintf} would return. If memory could + not be allocated, zero is returned and @code{NULL} is stored in + @code{*@var{resptr}}. + + @end deftypefn + + @c vfork.c:6 + @deftypefn Supplemental int vfork (void) + + Emulates @code{vfork} by calling @code{fork} and returning its value. + + @end deftypefn + + @c vprintf.c:3 + @deftypefn Supplemental int vprintf (const char *@var{format}, va_list @var{ap}) + @deftypefnx Supplemental int vfprintf (FILE *@var{stream}, const char *@var{format}, va_list @var{ap}) + @deftypefnx Supplemental int vsprintf (char *@var{str}, const char *@var{format}, va_list @var{ap}) + + These functions are the same as @code{printf}, @code{fprintf}, and + @code{sprintf}, respectively, except that they are called with a + @code{va_list} instead of a variable number of arguments. Note that + they do not call @code{va_end}; this is the application's + responsibility. In @libib{} they are implemented in terms of the + nonstandard but common function @code{_doprnt}. + + @end deftypefn + + @c waitpid.c:3 + @deftypefn Supplemental int waitpid (int @var{pid}, int *@var{status}, int) + + This is a wrapper around the @code{wait} function. Any ``special'' + values of @var{pid} depend on your implementation of @code{wait}, as + does the return value. The third argument is unused in @libib{}. + + @end deftypefn + + @c xatexit.c:11 + @deftypefun int xatexit (void (*@var{fn}) (void)) + + Behaves as the standard @code{atexit} function, but with no limit on + the number of registered functions. Returns 0 on success, or @minus{}1 on + failure. If you use @code{xatexit} to register functions, you must use + @code{xexit} to terminate your program. + + @end deftypefun + + @c xmalloc.c:38 + @deftypefn Replacement void* xcalloc (size_t @var{nelem}, size_t @var{elsize}) + + Allocate memory without fail, and set it to zero. This routine functions + like @code{calloc}, but will behave the same as @code{xmalloc} if memory + cannot be found. + + @end deftypefn + + @c xexit.c:22 + @deftypefn Replacement void xexit (int @var{code}) + + Terminates the program. If any functions have been registered with + the @code{xatexit} replacement function, they will be called first. + Termination is handled via the system's normal @code{exit} call. + + @end deftypefn + + @c xmalloc.c:22 + @deftypefn Replacement void* xmalloc (size_t) + + Allocate memory without fail. If @code{malloc} fails, this will print + a message to @code{stderr} (using the name set by + @code{xmalloc_set_program_name}, + if any) and then call @code{xexit}. Note that it is therefore safe for + a program to contain @code{#define malloc xmalloc} in its source. + + @end deftypefn + + @c xmalloc.c:53 + @deftypefn Replacement void xmalloc_failed (size_t) + + This function is not meant to be called by client code, and is listed + here for completeness only. If any of the allocation routines fail, this + function will be called to print an error message and terminate execution. + + @end deftypefn + + @c xmalloc.c:46 + @deftypefn Replacement void xmalloc_set_program_name (const char *@var{name}) + + You can use this to set the name of the program used by + @code{xmalloc_failed} when printing a failure message. + + @end deftypefn + + @c xmemdup.c:7 + @deftypefn Replacement void* xmemdup (void *@var{input}, size_t @var{copy_size}, size_t @var{alloc_size}) + + Duplicates a region of memory without fail. First, @var{alloc_size} bytes + are allocated, then @var{copy_size} bytes from @var{input} are copied into + it, and the new memory is returned. If fewer bytes are copied than were + allocated, the remaining memory is zeroed. + + @end deftypefn + + @c xmalloc.c:32 + @deftypefn Replacement void* xrealloc (void *@var{ptr}, size_t @var{size}) + Reallocate memory without fail. This routine functions like @code{realloc}, + but will behave the same as @code{xmalloc} if memory cannot be found. + + @end deftypefn + + @c xstrdup.c:7 + @deftypefn Replacement char* xstrdup (const char *@var{s}) + + Duplicates a character string without fail, using @code{xmalloc} to + obtain memory. + + @end deftypefn + + @c xstrerror.c:7 + @deftypefn Replacement char* xstrerror (int @var{errnum}) + + Behaves exactly like the standard @code{strerror} function, but + will never return a @code{NULL} pointer. + + @end deftypefn + + diff -Nrc3pad gcc-3.0.4/libiberty/gather-docs gcc-3.1/libiberty/gather-docs *** gcc-3.0.4/libiberty/gather-docs Thu Jan 1 00:00:00 1970 --- gcc-3.1/libiberty/gather-docs Wed Sep 26 18:16:17 2001 *************** *** 0 **** --- 1,128 ---- + #!/usr/bin/perl + # -*- perl -*- + + # Copyright (C) 2001 + # Free Software Foundation + # + # This file is part of the libiberty library. + # Libiberty is free software; you can redistribute it and/or + # modify it under the terms of the GNU Library General Public + # License as published by the Free Software Foundation; either + # version 2 of the License, or (at your option) any later version. + # + # Libiberty 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 + # Library General Public License for more details. + # + # You should have received a copy of the GNU Library General Public + # License along with libiberty; see the file COPYING.LIB. If not, + # write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + # Boston, MA 02111-1307, USA. + # + # Originally written by DJ Delorie + + + + # This program looks for texinfo snippets in source files and other + # files, and builds per-category files with entries sorted in + # alphabetical order. + + # The syntax it looks for is lines starting with '@def' in *.c and + # other files (see TEXIFILES in Makefile.in). Entries are terminated + # at the next @def* (which begins a new entry) or, for C files, a line + # that begins with '*/' without leading spaces (this assumes that the + # texinfo snippet is within a C-style /* */ comment). + + # + + + + if ($ARGV[0] eq "-v") { + $verbose = 1; + shift; + } + + $srcdir = shift; + $outfile = shift; + + if ($outfile !~ /\S/ || ! -f "$srcdir/Makefile.in" ) { + print STDERR "Usage: gather-docs [-v] srcdir outfile.txi [files with snippets in them ...]\n"; + exit 1; + } + + $errors = 0; + + for $in (@ARGV) { + + if (!open(IN, "$srcdir/$in")) { + print STDERR "Cannot open $srcdir/$in for reading: $!\n"; + $errors ++; + + } else { + $first = 1; + $pertinent = 0; + $man_mode = 0; + $line = 0; + + while () { + $line ++; + $pertinent = 1 if /^\@def[a-z]*[a-wyz] /; + $pertinent = 0 if /^\*\//; + next unless $pertinent; + + if (/^\@def[a-z]*[a-wyz] /) { + + ($name) = m/[^\(]* ([^\( \t\r\n]+) *\(/; + $name =~ s/[ ]*$//; + $key = $name; + $key =~ tr/A-Z/a-z/; + $key =~ s/[^a-z0-9]+/ /g; + $name{$key} = $node; + $lines{$key} = ''; + $src_file{$key} = $in; + $src_line{$key} = $line; + print "\nReading $in :" if $verbose && $first; + $first = 0; + print " $name" if $verbose; + $node_lines{$key} .= $_; + + } else { + $node_lines{$key} .= $_; + } + + $pertinent = 0 if /^\@end def/; + } + close (IN); + } + } + + print "\n" if $verbose; + exit $errors if $errors; + + if (!open (OUT, "> $outfile")) { + print STDERR "Cannot open $outfile for writing: $!\n"; + $errors ++; + next; + } + print "Writing $outfile\n" if $verbose; + + print OUT "\@c Automatically generated from *.c and others (the comments before\n"; + print OUT "\@c each entry tell you which file and where in that file). DO NOT EDIT!\n"; + print OUT "\@c Edit the *.c files, configure with --enable-maintainer-mode,\n"; + print OUT "\@c and let gather-docs build you a new copy.\n\n"; + + for $key (sort keys %name) { + print OUT "\@c $src_file{$key}:$src_line{$key}\n"; + print OUT $node_lines{$key}; + print OUT "\n"; + } + + if (! print OUT "\n") { + print STDERR "Disk full writing $srcdir/$cat.texi\n"; + $errors ++; + } + + close (OUT); + + exit $errors; diff -Nrc3pad gcc-3.0.4/libiberty/getcwd.c gcc-3.1/libiberty/getcwd.c *** gcc-3.0.4/libiberty/getcwd.c Wed Jul 26 23:29:55 2000 --- gcc-3.1/libiberty/getcwd.c Sun Oct 7 21:53:31 2001 *************** *** 2,25 **** This function is in the public domain. */ /* - NAME - getcwd -- get absolute pathname for current working directory - - SYNOPSIS - char *getcwd (char pathname[len], len) ! DESCRIPTION ! Copy the absolute pathname for the current working directory into ! the supplied buffer and return a pointer to the buffer. If the ! current directory's path doesn't fit in LEN characters, the result ! is NULL and errno is set. ! If pathname is a null pointer, getcwd() will obtain size bytes of ! space using malloc. ! BUGS ! Emulated via the getwd() call, which is reasonable for most ! systems that do not have getcwd(). */ --- 2,19 ---- This function is in the public domain. */ /* ! @deftypefn Supplemental char* getcwd (char *@var{pathname}, int @var{len}) ! Copy the absolute pathname for the current working directory into ! @var{pathname}, which is assumed to point to a buffer of at least ! @var{len} bytes, and return a pointer to the buffer. If the current ! directory's path doesn't fit in @var{len} characters, the result is ! @code{NULL} and @code{errno} is set. If @var{pathname} is a null pointer, ! @code{getcwd} will obtain @var{len} bytes of space using ! @code{malloc}. ! @end deftypefn */ diff -Nrc3pad gcc-3.0.4/libiberty/getopt.c gcc-3.1/libiberty/getopt.c *** gcc-3.0.4/libiberty/getopt.c Fri Dec 29 19:37:03 2000 --- gcc-3.1/libiberty/getopt.c Tue Nov 13 03:46:00 2001 *************** *** 82,88 **** #ifndef _ /* This is for other GNU distributions with internationalized messages. When compiling libc, the _ macro is predefined. */ ! # ifdef HAVE_LIBINTL_H # include # define _(msgid) gettext (msgid) # else --- 82,88 ---- #ifndef _ /* This is for other GNU distributions with internationalized messages. When compiling libc, the _ macro is predefined. */ ! # if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC # include # define _(msgid) gettext (msgid) # else diff -Nrc3pad gcc-3.0.4/libiberty/getpagesize.c gcc-3.1/libiberty/getpagesize.c *** gcc-3.0.4/libiberty/getpagesize.c Thu May 21 07:52:39 1998 --- gcc-3.1/libiberty/getpagesize.c Sun Oct 7 21:53:31 2001 *************** *** 2,21 **** /* ! NAME ! ! getpagesize -- return the number of bytes in page of memory ! ! SYNOPSIS ! ! int getpagesize (void) ! DESCRIPTION ! Returns the number of bytes in a page of memory. This is the ! granularity of many of the system memory management routines. ! No guarantee is made as to whether or not it is the same as the ! basic memory management hardware page size. BUGS --- 2,15 ---- /* ! @deftypefn Supplemental int getpagesize (void) ! Returns the number of bytes in a page of memory. This is the ! granularity of many of the system memory management routines. No ! guarantee is made as to whether or not it is the same as the basic ! memory management hardware page size. ! @end deftypefn BUGS diff -Nrc3pad gcc-3.0.4/libiberty/getpwd.c gcc-3.1/libiberty/getpwd.c *** gcc-3.0.4/libiberty/getpwd.c Tue Aug 31 20:33:13 1999 --- gcc-3.1/libiberty/getpwd.c Sun Oct 7 21:53:31 2001 *************** *** 1,5 **** --- 1,17 ---- /* getpwd.c - get the working directory */ + /* + + @deftypefn Supplemental char* getpwd (void) + + Returns the current working directory. This implementation caches the + result on the assumption that the process will not call @code{chdir} + between calls to @code{getpwd}. + + @end deftypefn + + */ + #ifdef HAVE_CONFIG_H #include "config.h" #endif diff -Nrc3pad gcc-3.0.4/libiberty/getruntime.c gcc-3.1/libiberty/getruntime.c *** gcc-3.0.4/libiberty/getruntime.c Sun Jul 23 19:18:32 2000 --- gcc-3.1/libiberty/getruntime.c Wed Oct 17 21:15:41 2001 *************** Boston, MA 02111-1307, USA. */ *** 73,78 **** --- 73,90 ---- #endif #endif + /* + + @deftypefn Replacement long get_run_time (void) + + Returns the time used so far, in microseconds. If possible, this is + the time used by this process, else it is the elapsed time since the + process started. + + @end deftypefn + + */ + long get_run_time () { diff -Nrc3pad gcc-3.0.4/libiberty/hashtab.c gcc-3.1/libiberty/hashtab.c *** gcc-3.0.4/libiberty/hashtab.c Thu Mar 15 23:02:39 2001 --- gcc-3.1/libiberty/hashtab.c Tue Apr 9 20:29:31 2002 *************** *** 1,5 **** /* An expandable hash tables datatype. ! Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Vladimir Makarov (vmakarov@cygnus.com). This file is part of the libiberty library. --- 1,5 ---- /* An expandable hash tables datatype. ! Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Vladimir Makarov (vmakarov@cygnus.com). This file is part of the libiberty library. *************** higher_prime_number (n) *** 80,87 **** { /* These are primes that are near, but slightly smaller than, a power of two. */ ! static unsigned long primes[] = { ! (unsigned long) 2, (unsigned long) 7, (unsigned long) 13, (unsigned long) 31, --- 80,86 ---- { /* These are primes that are near, but slightly smaller than, a power of two. */ ! static const unsigned long primes[] = { (unsigned long) 7, (unsigned long) 13, (unsigned long) 31, *************** higher_prime_number (n) *** 115,126 **** ((unsigned long) 2147483647) + ((unsigned long) 2147483644), }; ! unsigned long* low = &primes[0]; ! unsigned long* high = &primes[sizeof(primes) / sizeof(primes[0])]; while (low != high) { ! unsigned long* mid = low + (high - low) / 2; if (n > *mid) low = mid + 1; else --- 114,125 ---- ((unsigned long) 2147483647) + ((unsigned long) 2147483644), }; ! const unsigned long *low = &primes[0]; ! const unsigned long *high = &primes[sizeof(primes) / sizeof(primes[0])]; while (low != high) { ! const unsigned long *mid = low + (high - low) / 2; if (n > *mid) low = mid + 1; else *************** find_empty_slot_for_expand (htab, hash) *** 264,284 **** hashval_t hash; { size_t size = htab->size; - hashval_t hash2 = 1 + hash % (size - 2); unsigned int index = hash % size; for (;;) { ! PTR *slot = htab->entries + index; if (*slot == EMPTY_ENTRY) return slot; else if (*slot == DELETED_ENTRY) abort (); - - index += hash2; - if (index >= size) - index -= size; } } --- 263,289 ---- hashval_t hash; { size_t size = htab->size; unsigned int index = hash % size; + PTR *slot = htab->entries + index; + hashval_t hash2; + + if (*slot == EMPTY_ENTRY) + return slot; + else if (*slot == DELETED_ENTRY) + abort (); + hash2 = 1 + hash % (size - 2); for (;;) { ! index += hash2; ! if (index >= size) ! index -= size; + slot = htab->entries + index; if (*slot == EMPTY_ENTRY) return slot; else if (*slot == DELETED_ENTRY) abort (); } } *************** htab_find_slot_with_hash (htab, element, *** 405,454 **** unsigned int index; hashval_t hash2; size_t size; if (insert == INSERT && htab->size * 3 <= htab->n_elements * 4 && htab_expand (htab) == 0) return NULL; size = htab->size; - hash2 = 1 + hash % (size - 2); index = hash % size; htab->searches++; first_deleted_slot = NULL; for (;;) { ! PTR entry = htab->entries[index]; if (entry == EMPTY_ENTRY) ! { ! if (insert == NO_INSERT) ! return NULL; ! ! htab->n_elements++; ! ! if (first_deleted_slot) ! { ! *first_deleted_slot = EMPTY_ENTRY; ! return first_deleted_slot; ! } ! ! return &htab->entries[index]; ! } ! ! if (entry == DELETED_ENTRY) { if (!first_deleted_slot) first_deleted_slot = &htab->entries[index]; } ! else if ((*htab->eq_f) (entry, element)) return &htab->entries[index]; - - htab->collisions++; - index += hash2; - if (index >= size) - index -= size; } } /* Like htab_find_slot_with_hash, but compute the hash value from the --- 410,468 ---- unsigned int index; hashval_t hash2; size_t size; + PTR entry; if (insert == INSERT && htab->size * 3 <= htab->n_elements * 4 && htab_expand (htab) == 0) return NULL; size = htab->size; index = hash % size; htab->searches++; first_deleted_slot = NULL; + entry = htab->entries[index]; + if (entry == EMPTY_ENTRY) + goto empty_entry; + else if (entry == DELETED_ENTRY) + first_deleted_slot = &htab->entries[index]; + else if ((*htab->eq_f) (entry, element)) + return &htab->entries[index]; + + hash2 = 1 + hash % (size - 2); for (;;) { ! htab->collisions++; ! index += hash2; ! if (index >= size) ! index -= size; ! ! entry = htab->entries[index]; if (entry == EMPTY_ENTRY) ! goto empty_entry; ! else if (entry == DELETED_ENTRY) { if (!first_deleted_slot) first_deleted_slot = &htab->entries[index]; } ! else if ((*htab->eq_f) (entry, element)) return &htab->entries[index]; } + + empty_entry: + if (insert == NO_INSERT) + return NULL; + + htab->n_elements++; + + if (first_deleted_slot) + { + *first_deleted_slot = EMPTY_ENTRY; + return first_deleted_slot; + } + + return &htab->entries[index]; } /* Like htab_find_slot_with_hash, but compute the hash value from the *************** htab_collisions (htab) *** 561,563 **** --- 575,616 ---- return (double) htab->collisions / (double) htab->searches; } + + /* Hash P as a null-terminated string. + + Copied from gcc/hashtable.c. Zack had the following to say with respect + to applicability, though note that unlike hashtable.c, this hash table + implementation re-hashes rather than chain buckets. + + http://gcc.gnu.org/ml/gcc-patches/2001-08/msg01021.html + From: Zack Weinberg + Date: Fri, 17 Aug 2001 02:15:56 -0400 + + I got it by extracting all the identifiers from all the source code + I had lying around in mid-1999, and testing many recurrences of + the form "H_n = H_{n-1} * K + c_n * L + M" where K, L, M were either + prime numbers or the appropriate identity. This was the best one. + I don't remember exactly what constituted "best", except I was + looking at bucket-length distributions mostly. + + So it should be very good at hashing identifiers, but might not be + as good at arbitrary strings. + + I'll add that it thoroughly trounces the hash functions recommended + for this use at http://burtleburtle.net/bob/hash/index.html, both + on speed and bucket distribution. I haven't tried it against the + function they just started using for Perl's hashes. */ + + hashval_t + htab_hash_string (p) + const PTR p; + { + const unsigned char *str = (const unsigned char *) p; + hashval_t r = 0; + unsigned char c; + + while ((c = *str++) != 0) + r = r * 67 + c - 113; + + return r; + } diff -Nrc3pad gcc-3.0.4/libiberty/hex.c gcc-3.1/libiberty/hex.c *** gcc-3.0.4/libiberty/hex.c Fri May 15 23:14:14 1998 --- gcc-3.1/libiberty/hex.c Tue Oct 23 03:17:29 2001 *************** *** 1,5 **** /* Hex character manipulation support. ! Copyright (C) 1995 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or --- 1,5 ---- /* Hex character manipulation support. ! Copyright (C) 1995, 2001 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or *************** License along with libiberty; see the fi *** 17,33 **** not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "libiberty.h" ! char _hex_value[_hex_array_size]; ! ! void hex_init () { - int i; - for (i = 0; i < _hex_array_size; i++) - _hex_value[i] = _hex_bad; - for (i = 0; i < 10; i++) - _hex_value['0' + i] = i; - for (i = 0; i < 6; i++) - _hex_value['a' + i] = _hex_value['A' + i] = 10 + i; } --- 17,111 ---- not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + #include /* for EOF */ #include "libiberty.h" ! /* Provided for ABI compatibility. */ ! void ! hex_init () { } + + /* Are we ASCII? */ + #if '\n' == 0x0A && ' ' == 0x20 && '0' == 0x30 \ + && 'A' == 0x41 && 'a' == 0x61 && '!' == 0x21 \ + && EOF == -1 + + const char _hex_value[_hex_array_size] = + { + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* NUL SOH STX ETX */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* EOT ENQ ACK BEL */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* BS HT LF VT */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* FF CR SO SI */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* DLE DC1 DC2 DC3 */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* DC4 NAK SYN ETB */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* CAN EM SUB ESC */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* FS GS RS US */ + + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* SP ! " # */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* $ % & ' */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* ( ) * + */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* , - . / */ + 0, 1, 2, 3, /* 0 1 2 3 */ + 4, 5, 6, 7, /* 4 5 6 7 */ + 8, 9, _hex_bad, _hex_bad, /* 8 9 : ; */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* < = > ? */ + + _hex_bad, 10, 11, 12, /* @ A B C */ + 13, 14, 15, _hex_bad, /* D E F G */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* H I J K */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* L M N O */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* P Q R S */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* T U V W */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* X Y Z [ */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* \ ] ^ _ */ + + _hex_bad, 10, 11, 12, /* ` a b c */ + 13, 14, 15, _hex_bad, /* d e f g */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* h i j k */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* l m n o */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* p q r s */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* t u v w */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* x y z { */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* | } ~ DEL */ + + /* The high half of unsigned char, all values are _hex_bad. */ + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + _hex_bad, _hex_bad, _hex_bad, _hex_bad, + }; + #else + #error "Unsupported host character set" + #endif /* not ASCII */ diff -Nrc3pad gcc-3.0.4/libiberty/index.c gcc-3.1/libiberty/index.c *** gcc-3.0.4/libiberty/index.c Fri May 15 23:14:15 1998 --- gcc-3.1/libiberty/index.c Sun Oct 7 21:53:31 2001 *************** *** 1,5 **** --- 1,17 ---- /* Stub implementation of (obsolete) index(). */ + /* + + @deftypefn Supplemental char* index (char *@var{s}, int @var{c}) + + Returns a pointer to the first occurrence of the character @var{c} in + the string @var{s}, or @code{NULL} if not found. The use of @code{index} is + deprecated in new programs in favor of @code{strchr}. + + @end deftypefn + + */ + extern char * strchr(); char * diff -Nrc3pad gcc-3.0.4/libiberty/insque.c gcc-3.1/libiberty/insque.c *** gcc-3.0.4/libiberty/insque.c Fri May 15 23:14:16 1998 --- gcc-3.1/libiberty/insque.c Tue Oct 16 02:50:13 2001 *************** *** 2,25 **** This file is in the public domain. */ /* - NAME - insque, remque -- insert, remove an element from a queue ! SYNOPSIS ! struct qelem { ! struct qelem *q_forw; ! struct qelem *q_back; ! char q_data[]; ! }; ! void insque (struct qelem *elem, struct qelem *pred) ! void remque (struct qelem *elem) - DESCRIPTION - Routines to manipulate queues built from doubly linked lists. - The insque routine inserts ELEM in the queue immediately after - PRED. The remque routine removes ELEM from its containing queue. */ --- 2,28 ---- This file is in the public domain. */ /* ! @deftypefn Supplemental void insque (struct qelem *@var{elem}, struct qelem *@var{pred}) ! @deftypefnx Supplemental void remque (struct qelem *@var{elem}) ! Routines to manipulate queues built from doubly linked lists. The ! @code{insque} routine inserts @var{elem} in the queue immediately ! after @var{pred}. The @code{remque} routine removes @var{elem} from ! its containing queue. These routines expect to be passed pointers to ! structures which have as their first members a forward pointer and a ! back pointer, like this prototype (although no prototype is provided): ! @example ! struct qelem @{ ! struct qelem *q_forw; ! struct qelem *q_back; ! char q_data[]; ! @}; ! @end example ! ! @end deftypefn */ diff -Nrc3pad gcc-3.0.4/libiberty/lbasename.c gcc-3.1/libiberty/lbasename.c *** gcc-3.0.4/libiberty/lbasename.c Sat Mar 24 21:55:31 2001 --- gcc-3.1/libiberty/lbasename.c Tue Oct 16 02:50:13 2001 *************** not, write to the Free Software Foundati *** 19,41 **** Boston, MA 02111-1307, USA. */ /* - NAME - lbasename -- return pointer to last component of a pathname ! SYNOPSIS ! char *lbasename (const char *name) ! DESCRIPTION ! Given a pointer to a string containing a typical pathname ! (/usr/src/cmd/ls/ls.c for example), returns a pointer to the ! last component of the pathname ("ls.c" in this case). The ! returned pointer is guaranteed to lie within the original ! string. This latter fact is not true of many vendor C ! libraries, which return special strings or modify the passed ! strings for particular input. - In particular, the empty string returns the same empty string, - and a path ending in '/' returns the empty string after it. */ #include "ansidecl.h" --- 19,40 ---- Boston, MA 02111-1307, USA. */ /* ! @deftypefn Replacement {const char*} lbasename (const char *@var{name}) ! Given a pointer to a string containing a typical pathname ! (@samp{/usr/src/cmd/ls/ls.c} for example), returns a pointer to the ! last component of the pathname (@samp{ls.c} in this case). The ! returned pointer is guaranteed to lie within the original ! string. This latter fact is not true of many vendor C ! libraries, which return special strings or modify the passed ! strings for particular input. ! ! In particular, the empty string returns the same empty string, ! and a path ending in @code{/} returns the empty string after it. ! ! @end deftypefn */ #include "ansidecl.h" *************** DESCRIPTION *** 69,75 **** # endif #endif ! char * lbasename (name) const char *name; { --- 68,74 ---- # endif #endif ! const char * lbasename (name) const char *name; { *************** lbasename (name) *** 85,89 **** if (IS_DIR_SEPARATOR (*name)) base = name + 1; ! return (char *) base; } --- 84,88 ---- if (IS_DIR_SEPARATOR (*name)) base = name + 1; ! return base; } diff -Nrc3pad gcc-3.0.4/libiberty/libiberty.texi gcc-3.1/libiberty/libiberty.texi *** gcc-3.0.4/libiberty/libiberty.texi Thu Jan 1 00:00:00 1970 --- gcc-3.1/libiberty/libiberty.texi Sun Oct 7 21:53:31 2001 *************** *** 0 **** --- 1,324 ---- + \input texinfo @c -*-texinfo-*- + @c %**start of header + @setfilename libiberty.info + @settitle @sc{gnu} libiberty + @c %**end of header + + @syncodeindex fn cp + @syncodeindex vr cp + @syncodeindex pg cp + + @finalout + @c %**end of header + + @dircategory GNU libraries + @direntry + * Libiberty: (libiberty). Library of utility functions which + are missing or broken on some systems. + @end direntry + + @macro libib + @code{libiberty} + @end macro + + @c The edition date is written in three locations. Search for 'thedate'. + @ifinfo + This manual describes the GNU @libib library of utility subroutines. + This edition accompanies GCC 3, September 2001. + + Copyright @copyright{} 2001 Free Software Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.1 + or any later version published by the Free Software Foundation; + with no Invariant Sections, with no Front-Cover Texts, and with no + Back-Cover Texts. A copy of the license is included in the + section entitled ``GNU Free Documentation License''. + + @ignore + Permission is granted to process this file through TeX and print the + results, provided the printed document carries a copying permission + notice identical to this one except for the removal of this paragraph + (this paragraph not being relevant to the printed manual). + + @end ignore + @end ifinfo + + + @c The edition date is written in three locations. Search for 'thedate'. + @titlepage + @title @sc{gnu} libiberty + @subtitle September 2001 + @subtitle for GCC 3 + @author Phil Edwards et al. + @page + + + @vskip 0pt plus 1filll + Copyright @copyright{} 2001 Free Software Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.1 + or any later version published by the Free Software Foundation; + with no Invariant Sections, with no Front-Cover Texts, and with no + Back-Cover Texts. A copy of the license is included in the + section entitled ``GNU Free Documentation License''. + + @end titlepage + @contents + @page + + @ifnottex + @node Top,Using,, + @top Introduction + + The @libib{} library is a collection of subroutines used by various + GNU programs. It is available under the Library General Public + License; for more information, see @ref{Library Copying}. + + @c The edition date is written in three locations. Search for 'thedate'. + This edition accompanies GCC 3, September 2001. + + @end ifnottex + + @menu + * Using:: How to use libiberty in your code. + + * Overview:: Overview of available function groups. + + * Functions:: Available functions, macros, and global variables. + + * Obstacks:: Object Stacks. + + * Licenses:: The various licenses under which libiberty sources are + distributed. + + * Index:: Index of functions and categories. + @end menu + + @node Using + @chapter Using + @cindex using libiberty + @cindex libiberty usage + @cindex how to use + + @c THIS SECTION IS CRAP AND NEEDS REWRITING BADLY. + + To date, @libib{} is generally not installed on its own. It has evolved + over years but does not have its own version number nor release schedule. + + Possibly the easiest way to use @libib{} in your projects is to drop the + @libib{} code into your project's sources, and to build the library along + with your own sources; the library would then be linked in at the end. This + prevents any possible version mismatches with other copies of libiberty + elsewhere on the system. + + Passing @option{--enable-install-libiberty} to the @command{configure} + script when building @libib{} causes the header files and archive library + to be installed when @kbd{make install} is run. This option also takes + an (optional) argument to specify the installation location, in the same + manner as @option{--prefix}. + + For your own projects, an approach which offers stability and flexibility + is to include @libib{} with your code, but allow the end user to optionally + choose to use a previously-installed version instead. In this way the + user may choose (for example) to install @libib{} as part of GCC, and use + that version for all software built with that compiler. (This approach + has proven useful with software using the GNU @code{readline} library.) + + Making use of @libib{} code usually requires that you include one or more + header files from the @libib{} distribution. (They will be named as + necessary in the function descriptions.) At link time, you will need to + add @option{-liberty} to your link command invocation. + + + @node Overview + @chapter Overview + + Functions contained in @libib{} can be divided into three general categories. + + + @menu + * Supplemental Functions:: Providing functions which don't exist + on older operating systems. + + * Replacement Functions:: These functions are sometimes buggy or + unpredictable on some operating systems. + + * Extensions:: Functions which provide useful extensions + or safety wrappers around existing code. + @end menu + + @node Supplemental Functions + @section Supplemental Functions + @cindex supplemental functions + @cindex functions, supplemental + @cindex functions, missing + + Certain operating systems do not provide functions which have since + become standardized, or at least common. For example, the Single + Unix Specification Version 2 requires that the @code{basename} + function be provided, but an OS which predates that specification + might not have this function. This should not prevent well-written + code from running on such a system. + + Similarly, some functions exist only among a particular ``flavor'' + or ``family'' of operating systems. As an example, the @code{bzero} + function is often not present on systems outside the BSD-derived + family of systems. + + Many such functions are provided in @libib{}. They are quickly + listed here with little description, as systems which lack them + become less and less common. Each function @var{foo} is implemented + in @file{@var{foo}.c} but not declared in any @libib{} header file; more + comments and caveats for each function's implementation are often + available in the source file. Generally, the function can simply + be declared as @code{extern}. + + + + @node Replacement Functions + @section Replacement Functions + @cindex replacement functions + @cindex functions, replacement + + Some functions have extremely limited implementations on different + platforms. Other functions are tedious to use correctly; for example, + proper use of @code{malloc} calls for the return value to be checked and + appropriate action taken if memory has been exhausted. A group of + ``replacement functions'' is available in @libib{} to address these issues + for some of the most commonly used subroutines. + + All of these functions are declared in the @file{libiberty.h} header + file. Many of the implementations will use preprocessor macros set by + GNU Autoconf, if you decide to make use of that program. Some of these + functions may call one another. + + + @menu + * Memory Allocation:: Testing and handling failed memory + requests automatically. + * Exit Handlers:: Calling routines on program exit. + * Error Reporting:: Mapping errno and signal numbers to + more useful string formats. + @end menu + + @node Memory Allocation + @subsection Memory Allocation + @cindex memory allocation + + The functions beginning with the letter @samp{x} are wrappers around + standard functions; the functions provided by the system environment + are called and their results checked before the results are passed back + to client code. If the standard functions fail, these wrappers will + terminate the program. Thus, these versions can be used with impunity. + + + @node Exit Handlers + @subsection Exit Handlers + @cindex exit handlers + + The existence and implementation of the @code{atexit} routine varies + amongst the flavors of Unix. @libib{} provides an unvarying dependable + implementation via @code{xatexit} and @code{xexit}. + + + @node Error Reporting + @subsection Error Reporting + @cindex error reporting + + These are a set of routines to facilitate programming with the system + @code{errno} interface. The @libib{} source file @file{strerror.c} + contains a good deal of documentation for these functions. + + @c signal stuff + + + @node Extensions + @section Extensions + @cindex extensions + @cindex functions, extension + + @libib{} includes additional functionality above and beyond standard + functions, which has proven generically useful in GNU programs, such as + obstacks and regex. These functions are often copied from other + projects as they gain popularity, and are included here to provide a + central location from which to use, maintain, and distribute them. + + @menu + * Obstacks:: Stacks of arbitrary objects. + @end menu + + @c This is generated from the glibc manual using a make-obstacks-texi.sh + @c script of Phil's. Hope it's accurate. + @include obstacks.texi + + @node Functions + @chapter Function, Variable, and Macro Listing. + @include functions.texi + + @node Licenses + @appendix Licenses + + @menu + + * Library Copying:: The GNU Library General Public License + * BSD:: Regents of the University of California + + @end menu + + @c This takes care of Library Copying. It is the copying-lib.texi from the + @c GNU web site, with its @node line altered to make makeinfo shut up. + @include copying-lib.texi + + @page + @node BSD + @appendixsec BSD + + Copyright @copyright{} 1990 Regents of the University of California. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + @enumerate + + @item + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + @item + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + @item + [rescinded 22 July 1999] + + @item + Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + @end enumerate + + THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + + @node Index + @unnumbered Index + + @printindex cp + + @bye + diff -Nrc3pad gcc-3.0.4/libiberty/maint-tool gcc-3.1/libiberty/maint-tool *** gcc-3.0.4/libiberty/maint-tool Thu Jan 1 00:00:00 1970 --- gcc-3.1/libiberty/maint-tool Tue Jan 22 20:03:29 2002 *************** *** 0 **** --- 1,278 ---- + #!/usr/bin/perl + # -*- perl -*- + + # Copyright (C) 2001 + # Free Software Foundation + # + # This file is part of the libiberty library. + # Libiberty is free software; you can redistribute it and/or + # modify it under the terms of the GNU Library General Public + # License as published by the Free Software Foundation; either + # version 2 of the License, or (at your option) any later version. + # + # Libiberty 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 + # Library General Public License for more details. + # + # You should have received a copy of the GNU Library General Public + # License along with libiberty; see the file COPYING.LIB. If not, + # write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + # Boston, MA 02111-1307, USA. + # + # Originally written by DJ Delorie + + + # This is a trivial script which checks the lists of C and O files in + # the Makefile for consistency. + + $mode = shift; + $srcdir = "."; + + if ($mode eq "-s") { + $srcdir = shift; + $mode = shift; + } + + &missing() if $mode eq "missing"; + &undoc() if $mode eq "undoc"; + &deps() if $mode eq "deps"; + + exit 0; + + format STDOUT = + ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~ + $out + ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~~ + $out + . + + ###################################################################### + + sub missing { + + opendir(S, $srcdir); + while ($f = readdir S) { + $have{$f} = 1; + } + closedir(S); + opendir(S, "."); + while ($f = readdir S) { + $have{$f} = 1; + } + closedir(S); + + for $a (@ARGV) { + $listed{$a} = 1; + $have{$a} = 0; + } + + for $f (sort keys %have) { + next unless $have{$f}; + if ($f =~ /\.c$/) { + print "S $f\n"; + } + } + for $f (sort keys %listed) { + if ($f =~ /(.*)\.c$/) { + $base = $1; + if (! $listed{"$base.o"}) { + print "O $f\n"; + } + } + } + } + + ###################################################################### + + sub undoc { + + opendir(S, $srcdir); + while ($file = readdir S) { + if ($file =~ /\.texi$/) { + open(T, "$srcdir/$file"); + while () { + if (/^\@deftype[^\(]* ([^\s\(]+) *\(/) { + $documented{$1} = 1; + } + } + close(T); + } + if ($file =~ /\.c$/) { + open(C, "$srcdir/$file"); + while () { + if (/\@undocumented (\S+)/) { + $documented{$1} = 1; + } + if (/^static /) { + if (! /[\(;]/) { + s/[\r\n]+$/ /; + $_ .= ; + } + while ($_ =~ /\([^\)]*$/) { + s/[\r\n]+$/ /; + $_ .= ; + } + } + s/ VPARAMS([ \(])/$1/; + s/PREFIX\(([^\)]*)\)/byte_$1/; + if (/^static [^\(]* ([^\s\(]+) *\(.*\)$/) { + $documented{$1} = 1; + } + } + } + } + closedir(D); + + # $out = join(' ', sort keys %documented); + # write; + # print "\n"; + + system "etags $srcdir/*.c $srcdir/../include/*.h"; + open(TAGS, "TAGS"); + while () { + s/[\r\n]+$//; + if (/^\014$/) { + $filename = ; + $filename =~ s/[\r\n]+$//; + $filename =~ s/,\d+$//; + $filename =~ s@.*[/\\]@@; + next; + } + if ($filename =~ /\.c$/ ) { + next unless /^[_a-zA-Z]/; + } else { + next unless /^\# *define/; + s/\# *define *//; + } + next if $filename =~ /mpw\.c/; + + s/ VPARAMS//; + s/ *\177.*//; + s/,$//; + s/DEFUN\(//; + s/\(//; + + next if /^static /; + next if /\s/; + next if /^_/; + next if $documented{$_}; + next if /_H_?$/; + + if ($seen_in{$_} ne $filename) { + $saw{$_} ++; + } + $seen_in{$_} = $filename; + } + + for $k (keys %saw) { + delete $saw{$k} if $saw{$k} > 1; + } + + for $k (sort keys %saw) { + $fromfile{$seen_in{$k}} .= " " if $fromfile{$seen_in{$k}}; + $fromfile{$seen_in{$k}} .= $k; + } + + for $f (sort keys %fromfile) { + $out = "$f: $fromfile{$f}"; + write; + } + } + + ###################################################################### + + sub deps_for { + my($f) = @_; + my(%d); + open(F, $f); + %d = (); + while () { + if (/^#\s*include\s+["<](.*)[">]/) { + $d{$1} = 1; + } + } + close(F); + return keys %d; + } + + sub canonicalize { + my ($p) = @_; + 0 while $p =~ s@/\./@/@g; + 0 while $p =~ s@^\./@@g; + 0 while $p =~ s@/[^/]+/\.\./@/@g; + return $p; + } + + sub locals_first { + my ($a,$b) = @_; + return -1 if $a eq "config.h"; + return 1 if $b eq "config.h"; + return $a cmp $b; + } + + sub deps { + + $incdir = shift @ARGV; + + opendir(INC, $incdir); + while ($f = readdir INC) { + next unless $f =~ /\.h$/; + $mine{$f} = "\$(INCDIR)/$f"; + $deps{$f} = join(' ', &deps_for("$incdir/$f")); + } + $mine{'config.h'} = "config.h"; + + open(IN, "$srcdir/Makefile.in"); + open(OUT, ">$srcdir/Makefile.tmp"); + while () { + last if /remainder of this file/; + print OUT; + } + print OUT "# The dependencies in the remainder of this file are automatically\n"; + print OUT "# generated by \"make maint-deps\". Manual edits will be lost.\n\n"; + + opendir(S, $srcdir); + for $f (sort readdir S) { + if ($f =~ /\.c$/) { + + %scanned = (); + @pending = &deps_for("$srcdir/$f"); + while (@pending) { + @tmp = @pending; + @pending = (); + for $p (@tmp) { + next unless $mine{$p}; + if (!$scanned{$p}) { + push(@pending, split(' ', $deps{$p})); + $scanned{$p} = 1; + } + } + } + @deps = sort { &locals_first($a,$b) } keys %scanned; + $obj = $f; + $obj =~ s/\.c$/.o/; + $obj = "$obj:"; + if ($#deps >= 0) { + print OUT $obj; + $len = length($obj); + for $dt (@deps) { + $d = $mine{$dt}; + if ($len + length($d) > 70) { + printf OUT " \\\n\t$d"; + $len = 8 + length($d); + } else { + print OUT " $d"; + $len += length($d) + 1; + } + } + print OUT "\n"; + } + } + } + closedir(S); + close(IN); + close(OUT); + + rename("$srcdir/Makefile.tmp", "$srcdir/Makefile.in"); + } diff -Nrc3pad gcc-3.0.4/libiberty/make-temp-file.c gcc-3.1/libiberty/make-temp-file.c *** gcc-3.0.4/libiberty/make-temp-file.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/libiberty/make-temp-file.c Wed Oct 17 21:15:41 2001 *************** *** 0 **** --- 1,179 ---- + /* Utility to pick a temporary filename prefix. + Copyright (C) 1996, 1997, 1998, 2001 Free Software Foundation, Inc. + + This file is part of the libiberty library. + Libiberty is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + Libiberty 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with libiberty; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + #ifdef HAVE_CONFIG_H + #include "config.h" + #endif + + #include /* May get P_tmpdir. */ + #include + #ifdef HAVE_UNISTD_H + #include + #endif + #ifdef HAVE_STDLIB_H + #include + #endif + #ifdef HAVE_STRING_H + #include + #endif + #ifdef HAVE_SYS_FILE_H + #include /* May get R_OK, etc. on some systems. */ + #endif + + #ifndef R_OK + #define R_OK 4 + #define W_OK 2 + #define X_OK 1 + #endif + + #include "libiberty.h" + extern int mkstemps PARAMS ((char *, int)); + + /* '/' works just fine on MS-DOS based systems. */ + #ifndef DIR_SEPARATOR + #define DIR_SEPARATOR '/' + #endif + + /* Name of temporary file. + mktemp requires 6 trailing X's. */ + #define TEMP_FILE "ccXXXXXX" + #define TEMP_FILE_LEN (sizeof(TEMP_FILE) - 1) + + /* Subroutine of choose_tmpdir. + If BASE is non-NULL, return it. + Otherwise it checks if DIR is a usable directory. + If success, DIR is returned. + Otherwise NULL is returned. */ + + static inline const char *try PARAMS ((const char *, const char *)); + + static inline const char * + try (dir, base) + const char *dir, *base; + { + if (base != 0) + return base; + if (dir != 0 + && access (dir, R_OK | W_OK | X_OK) == 0) + return dir; + return 0; + } + + static const char tmp[] = { DIR_SEPARATOR, 't', 'm', 'p', 0 }; + static const char usrtmp[] = + { DIR_SEPARATOR, 'u', 's', 'r', DIR_SEPARATOR, 't', 'm', 'p', 0 }; + static const char vartmp[] = + { DIR_SEPARATOR, 'v', 'a', 'r', DIR_SEPARATOR, 't', 'm', 'p', 0 }; + + static char *memoized_tmpdir; + + /* + + @deftypefn Replacement char* choose_tmpdir () + + Returns a pointer to a directory path suitable for creating temporary + files in. + + @end deftypefn + + */ + + char * + choose_tmpdir () + { + const char *base = 0; + char *tmpdir; + unsigned int len; + + if (memoized_tmpdir) + return memoized_tmpdir; + + base = try (getenv ("TMPDIR"), base); + base = try (getenv ("TMP"), base); + base = try (getenv ("TEMP"), base); + + #ifdef P_tmpdir + base = try (P_tmpdir, base); + #endif + + /* Try /var/tmp, /usr/tmp, then /tmp. */ + base = try (vartmp, base); + base = try (usrtmp, base); + base = try (tmp, base); + + /* If all else fails, use the current directory! */ + if (base == 0) + base = "."; + + /* Append DIR_SEPARATOR to the directory we've chosen + and return it. */ + len = strlen (base); + tmpdir = xmalloc (len + 2); + strcpy (tmpdir, base); + tmpdir[len] = DIR_SEPARATOR; + tmpdir[len+1] = '\0'; + + memoized_tmpdir = tmpdir; + return tmpdir; + } + + /* + + @deftypefn Replacement char* make_temp_file (const char *@var{suffix}) + + Return a temporary file name (as a string) or @code{NULL} if unable to + create one. @var{suffix} is a suffix to append to the file name. The + string is @code{malloc}ed, and the temporary file has been created. + + @end deftypefn + + */ + + char * + make_temp_file (suffix) + const char *suffix; + { + const char *base = choose_tmpdir (); + char *temp_filename; + int base_len, suffix_len; + int fd; + + if (suffix == 0) + suffix = ""; + + base_len = strlen (base); + suffix_len = strlen (suffix); + + temp_filename = xmalloc (base_len + + TEMP_FILE_LEN + + suffix_len + 1); + strcpy (temp_filename, base); + strcpy (temp_filename + base_len, TEMP_FILE); + strcpy (temp_filename + base_len + TEMP_FILE_LEN, suffix); + + fd = mkstemps (temp_filename, suffix_len); + /* If mkstemps failed, then something bad is happening. Maybe we should + issue a message about a possible security attack in progress? */ + if (fd == -1) + abort (); + /* Similarly if we can not close the file. */ + if (close (fd)) + abort (); + return temp_filename; + } diff -Nrc3pad gcc-3.0.4/libiberty/md5.c gcc-3.1/libiberty/md5.c *** gcc-3.0.4/libiberty/md5.c Fri Dec 29 19:37:03 2000 --- gcc-3.1/libiberty/md5.c Wed May 9 19:09:55 2001 *************** void *** 65,74 **** md5_init_ctx (ctx) struct md5_ctx *ctx; { ! ctx->A = 0x67452301; ! ctx->B = 0xefcdab89; ! ctx->C = 0x98badcfe; ! ctx->D = 0x10325476; ctx->total[0] = ctx->total[1] = 0; ctx->buflen = 0; --- 65,74 ---- md5_init_ctx (ctx) struct md5_ctx *ctx; { ! ctx->A = (md5_uint32) 0x67452301; ! ctx->B = (md5_uint32) 0xefcdab89; ! ctx->C = (md5_uint32) 0x98badcfe; ! ctx->D = (md5_uint32) 0x10325476; ctx->total[0] = ctx->total[1] = 0; ctx->buflen = 0; *************** md5_process_block (buffer, len, ctx) *** 322,343 **** */ /* Round 1. */ ! OP (A, B, C, D, 7, 0xd76aa478); ! OP (D, A, B, C, 12, 0xe8c7b756); ! OP (C, D, A, B, 17, 0x242070db); ! OP (B, C, D, A, 22, 0xc1bdceee); ! OP (A, B, C, D, 7, 0xf57c0faf); ! OP (D, A, B, C, 12, 0x4787c62a); ! OP (C, D, A, B, 17, 0xa8304613); ! OP (B, C, D, A, 22, 0xfd469501); ! OP (A, B, C, D, 7, 0x698098d8); ! OP (D, A, B, C, 12, 0x8b44f7af); ! OP (C, D, A, B, 17, 0xffff5bb1); ! OP (B, C, D, A, 22, 0x895cd7be); ! OP (A, B, C, D, 7, 0x6b901122); ! OP (D, A, B, C, 12, 0xfd987193); ! OP (C, D, A, B, 17, 0xa679438e); ! OP (B, C, D, A, 22, 0x49b40821); /* For the second to fourth round we have the possibly swapped words in CORRECT_WORDS. Redefine the macro to take an additional first --- 322,343 ---- */ /* Round 1. */ ! OP (A, B, C, D, 7, (md5_uint32) 0xd76aa478); ! OP (D, A, B, C, 12, (md5_uint32) 0xe8c7b756); ! OP (C, D, A, B, 17, (md5_uint32) 0x242070db); ! OP (B, C, D, A, 22, (md5_uint32) 0xc1bdceee); ! OP (A, B, C, D, 7, (md5_uint32) 0xf57c0faf); ! OP (D, A, B, C, 12, (md5_uint32) 0x4787c62a); ! OP (C, D, A, B, 17, (md5_uint32) 0xa8304613); ! OP (B, C, D, A, 22, (md5_uint32) 0xfd469501); ! OP (A, B, C, D, 7, (md5_uint32) 0x698098d8); ! OP (D, A, B, C, 12, (md5_uint32) 0x8b44f7af); ! OP (C, D, A, B, 17, (md5_uint32) 0xffff5bb1); ! OP (B, C, D, A, 22, (md5_uint32) 0x895cd7be); ! OP (A, B, C, D, 7, (md5_uint32) 0x6b901122); ! OP (D, A, B, C, 12, (md5_uint32) 0xfd987193); ! OP (C, D, A, B, 17, (md5_uint32) 0xa679438e); ! OP (B, C, D, A, 22, (md5_uint32) 0x49b40821); /* For the second to fourth round we have the possibly swapped words in CORRECT_WORDS. Redefine the macro to take an additional first *************** md5_process_block (buffer, len, ctx) *** 353,410 **** while (0) /* Round 2. */ ! OP (FG, A, B, C, D, 1, 5, 0xf61e2562); ! OP (FG, D, A, B, C, 6, 9, 0xc040b340); ! OP (FG, C, D, A, B, 11, 14, 0x265e5a51); ! OP (FG, B, C, D, A, 0, 20, 0xe9b6c7aa); ! OP (FG, A, B, C, D, 5, 5, 0xd62f105d); ! OP (FG, D, A, B, C, 10, 9, 0x02441453); ! OP (FG, C, D, A, B, 15, 14, 0xd8a1e681); ! OP (FG, B, C, D, A, 4, 20, 0xe7d3fbc8); ! OP (FG, A, B, C, D, 9, 5, 0x21e1cde6); ! OP (FG, D, A, B, C, 14, 9, 0xc33707d6); ! OP (FG, C, D, A, B, 3, 14, 0xf4d50d87); ! OP (FG, B, C, D, A, 8, 20, 0x455a14ed); ! OP (FG, A, B, C, D, 13, 5, 0xa9e3e905); ! OP (FG, D, A, B, C, 2, 9, 0xfcefa3f8); ! OP (FG, C, D, A, B, 7, 14, 0x676f02d9); ! OP (FG, B, C, D, A, 12, 20, 0x8d2a4c8a); /* Round 3. */ ! OP (FH, A, B, C, D, 5, 4, 0xfffa3942); ! OP (FH, D, A, B, C, 8, 11, 0x8771f681); ! OP (FH, C, D, A, B, 11, 16, 0x6d9d6122); ! OP (FH, B, C, D, A, 14, 23, 0xfde5380c); ! OP (FH, A, B, C, D, 1, 4, 0xa4beea44); ! OP (FH, D, A, B, C, 4, 11, 0x4bdecfa9); ! OP (FH, C, D, A, B, 7, 16, 0xf6bb4b60); ! OP (FH, B, C, D, A, 10, 23, 0xbebfbc70); ! OP (FH, A, B, C, D, 13, 4, 0x289b7ec6); ! OP (FH, D, A, B, C, 0, 11, 0xeaa127fa); ! OP (FH, C, D, A, B, 3, 16, 0xd4ef3085); ! OP (FH, B, C, D, A, 6, 23, 0x04881d05); ! OP (FH, A, B, C, D, 9, 4, 0xd9d4d039); ! OP (FH, D, A, B, C, 12, 11, 0xe6db99e5); ! OP (FH, C, D, A, B, 15, 16, 0x1fa27cf8); ! OP (FH, B, C, D, A, 2, 23, 0xc4ac5665); /* Round 4. */ ! OP (FI, A, B, C, D, 0, 6, 0xf4292244); ! OP (FI, D, A, B, C, 7, 10, 0x432aff97); ! OP (FI, C, D, A, B, 14, 15, 0xab9423a7); ! OP (FI, B, C, D, A, 5, 21, 0xfc93a039); ! OP (FI, A, B, C, D, 12, 6, 0x655b59c3); ! OP (FI, D, A, B, C, 3, 10, 0x8f0ccc92); ! OP (FI, C, D, A, B, 10, 15, 0xffeff47d); ! OP (FI, B, C, D, A, 1, 21, 0x85845dd1); ! OP (FI, A, B, C, D, 8, 6, 0x6fa87e4f); ! OP (FI, D, A, B, C, 15, 10, 0xfe2ce6e0); ! OP (FI, C, D, A, B, 6, 15, 0xa3014314); ! OP (FI, B, C, D, A, 13, 21, 0x4e0811a1); ! OP (FI, A, B, C, D, 4, 6, 0xf7537e82); ! OP (FI, D, A, B, C, 11, 10, 0xbd3af235); ! OP (FI, C, D, A, B, 2, 15, 0x2ad7d2bb); ! OP (FI, B, C, D, A, 9, 21, 0xeb86d391); /* Add the starting values of the context. */ A += A_save; --- 353,410 ---- while (0) /* Round 2. */ ! OP (FG, A, B, C, D, 1, 5, (md5_uint32) 0xf61e2562); ! OP (FG, D, A, B, C, 6, 9, (md5_uint32) 0xc040b340); ! OP (FG, C, D, A, B, 11, 14, (md5_uint32) 0x265e5a51); ! OP (FG, B, C, D, A, 0, 20, (md5_uint32) 0xe9b6c7aa); ! OP (FG, A, B, C, D, 5, 5, (md5_uint32) 0xd62f105d); ! OP (FG, D, A, B, C, 10, 9, (md5_uint32) 0x02441453); ! OP (FG, C, D, A, B, 15, 14, (md5_uint32) 0xd8a1e681); ! OP (FG, B, C, D, A, 4, 20, (md5_uint32) 0xe7d3fbc8); ! OP (FG, A, B, C, D, 9, 5, (md5_uint32) 0x21e1cde6); ! OP (FG, D, A, B, C, 14, 9, (md5_uint32) 0xc33707d6); ! OP (FG, C, D, A, B, 3, 14, (md5_uint32) 0xf4d50d87); ! OP (FG, B, C, D, A, 8, 20, (md5_uint32) 0x455a14ed); ! OP (FG, A, B, C, D, 13, 5, (md5_uint32) 0xa9e3e905); ! OP (FG, D, A, B, C, 2, 9, (md5_uint32) 0xfcefa3f8); ! OP (FG, C, D, A, B, 7, 14, (md5_uint32) 0x676f02d9); ! OP (FG, B, C, D, A, 12, 20, (md5_uint32) 0x8d2a4c8a); /* Round 3. */ ! OP (FH, A, B, C, D, 5, 4, (md5_uint32) 0xfffa3942); ! OP (FH, D, A, B, C, 8, 11, (md5_uint32) 0x8771f681); ! OP (FH, C, D, A, B, 11, 16, (md5_uint32) 0x6d9d6122); ! OP (FH, B, C, D, A, 14, 23, (md5_uint32) 0xfde5380c); ! OP (FH, A, B, C, D, 1, 4, (md5_uint32) 0xa4beea44); ! OP (FH, D, A, B, C, 4, 11, (md5_uint32) 0x4bdecfa9); ! OP (FH, C, D, A, B, 7, 16, (md5_uint32) 0xf6bb4b60); ! OP (FH, B, C, D, A, 10, 23, (md5_uint32) 0xbebfbc70); ! OP (FH, A, B, C, D, 13, 4, (md5_uint32) 0x289b7ec6); ! OP (FH, D, A, B, C, 0, 11, (md5_uint32) 0xeaa127fa); ! OP (FH, C, D, A, B, 3, 16, (md5_uint32) 0xd4ef3085); ! OP (FH, B, C, D, A, 6, 23, (md5_uint32) 0x04881d05); ! OP (FH, A, B, C, D, 9, 4, (md5_uint32) 0xd9d4d039); ! OP (FH, D, A, B, C, 12, 11, (md5_uint32) 0xe6db99e5); ! OP (FH, C, D, A, B, 15, 16, (md5_uint32) 0x1fa27cf8); ! OP (FH, B, C, D, A, 2, 23, (md5_uint32) 0xc4ac5665); /* Round 4. */ ! OP (FI, A, B, C, D, 0, 6, (md5_uint32) 0xf4292244); ! OP (FI, D, A, B, C, 7, 10, (md5_uint32) 0x432aff97); ! OP (FI, C, D, A, B, 14, 15, (md5_uint32) 0xab9423a7); ! OP (FI, B, C, D, A, 5, 21, (md5_uint32) 0xfc93a039); ! OP (FI, A, B, C, D, 12, 6, (md5_uint32) 0x655b59c3); ! OP (FI, D, A, B, C, 3, 10, (md5_uint32) 0x8f0ccc92); ! OP (FI, C, D, A, B, 10, 15, (md5_uint32) 0xffeff47d); ! OP (FI, B, C, D, A, 1, 21, (md5_uint32) 0x85845dd1); ! OP (FI, A, B, C, D, 8, 6, (md5_uint32) 0x6fa87e4f); ! OP (FI, D, A, B, C, 15, 10, (md5_uint32) 0xfe2ce6e0); ! OP (FI, C, D, A, B, 6, 15, (md5_uint32) 0xa3014314); ! OP (FI, B, C, D, A, 13, 21, (md5_uint32) 0x4e0811a1); ! OP (FI, A, B, C, D, 4, 6, (md5_uint32) 0xf7537e82); ! OP (FI, D, A, B, C, 11, 10, (md5_uint32) 0xbd3af235); ! OP (FI, C, D, A, B, 2, 15, (md5_uint32) 0x2ad7d2bb); ! OP (FI, B, C, D, A, 9, 21, (md5_uint32) 0xeb86d391); /* Add the starting values of the context. */ A += A_save; diff -Nrc3pad gcc-3.0.4/libiberty/memchr.c gcc-3.1/libiberty/memchr.c *** gcc-3.0.4/libiberty/memchr.c Wed Mar 28 04:11:29 2001 --- gcc-3.1/libiberty/memchr.c Sun Oct 7 21:53:31 2001 *************** *** 1,37 **** /* - FUNCTION - <>---find character in memory - - INDEX - memchr - - ANSI_SYNOPSIS - #include - void *memchr(const void *<[src]>, int <[c]>, size_t <[length]>); - - TRAD_SYNOPSIS - #include - void *memchr(<[src]>, <[c]>, <[length]>) - void *<[src]>; - void *<[c]>; - size_t <[length]>; ! DESCRIPTION ! This function searches memory starting at <<*<[src]>>> for the ! character <[c]>. The search only ends with the first ! occurrence of <[c]>, or after <[length]> characters; in ! particular, <> does not terminate the search. ! ! RETURNS ! If the character <[c]> is found within <[length]> characters ! of <<*<[src]>>>, a pointer to the character is returned. If ! <[c]> is not found, then <> is returned. ! PORTABILITY ! <> requires no supporting OS subroutines. ! QUICKREF ! memchr ansi pure */ --- 1,16 ---- /* ! @deftypefn Supplemental void* memchr (const void *@var{s}, int @var{c}, size_t @var{n}) ! This function searches memory starting at @code{*@var{s}} for the ! character @var{c}. The search only ends with the first occurrence of ! @var{c}, or after @var{length} characters; in particular, a null ! character does not terminate the search. If the character @var{c} is ! found within @var{length} characters of @code{*@var{s}}, a pointer ! to the character is returned. If @var{c} is not found, then @code{NULL} is ! returned. ! @end deftypefn */ diff -Nrc3pad gcc-3.0.4/libiberty/memcmp.c gcc-3.1/libiberty/memcmp.c *** gcc-3.0.4/libiberty/memcmp.c Wed Jun 7 21:13:14 2000 --- gcc-3.1/libiberty/memcmp.c Wed Sep 26 18:16:17 2001 *************** *** 2,17 **** This function is in the public domain. */ /* - NAME - memcmp -- compare two memory regions ! SYNOPSIS ! int memcmp (const void *from, const void *to, size_t count) - DESCRIPTION - Compare two memory regions and return less than, - equal to, or greater than zero, according to lexicographical - ordering of the compared regions. */ #include --- 2,18 ---- This function is in the public domain. */ /* ! @deftypefn Supplemental int memcmp (const void *@var{x}, const void *@var{y}, size_t @var{count}) ! ! Compares the first @var{count} bytes of two areas of memory. Returns ! zero if they are the same, a value less than zero if @var{x} is ! lexically less than @var{y}, or a value greater than zero if @var{x} ! is lexically greater than @var{y}. Note that lexical order is determined ! as if comparing unsigned char arrays. ! ! @end deftypefn */ #include diff -Nrc3pad gcc-3.0.4/libiberty/memcpy.c gcc-3.1/libiberty/memcpy.c *** gcc-3.0.4/libiberty/memcpy.c Mon Dec 14 07:00:54 1998 --- gcc-3.1/libiberty/memcpy.c Wed Sep 26 18:16:17 2001 *************** *** 2,16 **** This function is in the public domain. */ /* - NAME - memcpy -- copy memory regions of arbitary length ! SYNOPSIS ! void* memcpy (void *out, const void *in, size_t n); - DESCRIPTION - Copy LENGTH bytes from memory region pointed to by IN to memory - region pointed to by OUT. */ #include --- 2,15 ---- This function is in the public domain. */ /* ! @deftypefn Supplemental void* memcpy (void *@var{out}, const void *@var{in}, size_t @var{length}) ! ! Copies @var{length} bytes from memory region @var{in} to region ! @var{out}. Returns a pointer to @var{out}. ! ! @end deftypefn */ #include diff -Nrc3pad gcc-3.0.4/libiberty/memmove.c gcc-3.1/libiberty/memmove.c *** gcc-3.0.4/libiberty/memmove.c Mon Dec 14 07:00:55 1998 --- gcc-3.1/libiberty/memmove.c Wed Sep 26 18:16:17 2001 *************** *** 1,5 **** --- 1,17 ---- /* Wrapper to implement ANSI C's memmove using BSD's bcopy. */ /* This function is in the public domain. --Per Bothner. */ + + /* + + @deftypefn Supplemental void* memmove (void *@var{from}, const void *@var{to}, size_t @var{count}) + + Copies @var{count} bytes from memory area @var{from} to memory area + @var{to}, returning a pointer to @var{to}. + + @end deftypefn + + */ + #include #ifdef __STDC__ #include diff -Nrc3pad gcc-3.0.4/libiberty/memset.c gcc-3.1/libiberty/memset.c *** gcc-3.0.4/libiberty/memset.c Fri May 15 23:14:23 1998 --- gcc-3.1/libiberty/memset.c Wed Sep 26 18:16:17 2001 *************** *** 1,6 **** --- 1,17 ---- /* memset This implementation is in the public domain. */ + /* + + @deftypefn Supplemental void* memset (void *@var{s}, int @var{c}, size_t @var{count}) + + Sets the first @var{count} bytes of @var{s} to the constant byte + @var{c}, returning a pointer to @var{s}. + + @end deftypefn + + */ + #include #ifdef __STDC__ #include diff -Nrc3pad gcc-3.0.4/libiberty/mkstemps.c gcc-3.1/libiberty/mkstemps.c *** gcc-3.0.4/libiberty/mkstemps.c Sun Jul 23 15:57:38 2000 --- gcc-3.1/libiberty/mkstemps.c Tue Jan 15 14:34:52 2002 *************** typedef unsigned long gcc_uint64_t; *** 49,66 **** #define TMP_MAX 16384 #endif ! /* Generate a unique temporary file name from TEMPLATE. ! TEMPLATE has the form: ! /ccXXXXXX ! SUFFIX_LEN tells us how long is (it can be zero length). ! The last six characters of TEMPLATE before must be "XXXXXX"; ! they are replaced with a string that makes the filename unique. - Returns a file descriptor open on the file for reading and writing. */ int mkstemps (template, suffix_len) char *template; --- 49,75 ---- #define TMP_MAX 16384 #endif ! /* ! @deftypefn Replacement int mkstemps (char *@var{template}, int @var{suffix_len}) ! Generate a unique temporary file name from @var{template}. ! @var{template} has the form: ! @example ! @var{path}/ccXXXXXX@var{suffix} ! @end example ! @var{suffix_len} tells us how long @var{suffix} is (it can be zero ! length). The last six characters of @var{template} before @var{suffix} ! must be @samp{XXXXXX}; they are replaced with a string that makes the ! filename unique. Returns a file descriptor open on the file for ! reading and writing. ! ! @end deftypefn ! ! */ int mkstemps (template, suffix_len) char *template; *************** mkstemps (template, suffix_len) *** 112,118 **** --- 121,131 ---- v /= 62; XXXXXX[5] = letters[v % 62]; + #ifdef VMS + fd = open (template, O_RDWR|O_CREAT|O_EXCL, 0600, "fop=tmd"); + #else fd = open (template, O_RDWR|O_CREAT|O_EXCL, 0600); + #endif if (fd >= 0) /* The file does not exist. */ return fd; diff -Nrc3pad gcc-3.0.4/libiberty/obstack.c gcc-3.1/libiberty/obstack.c *** gcc-3.0.4/libiberty/obstack.c Fri Dec 29 19:37:03 2000 --- gcc-3.1/libiberty/obstack.c Tue Nov 13 03:46:00 2001 *************** _obstack_memory_used (h) *** 451,457 **** /* Define the error handler. */ #ifndef _ ! # ifdef HAVE_LIBINTL_H # include # ifndef _ # define _(Str) gettext (Str) --- 451,457 ---- /* Define the error handler. */ #ifndef _ ! # if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC # include # ifndef _ # define _(Str) gettext (Str) diff -Nrc3pad gcc-3.0.4/libiberty/obstacks.texi gcc-3.1/libiberty/obstacks.texi *** gcc-3.0.4/libiberty/obstacks.texi Thu Jan 1 00:00:00 1970 --- gcc-3.1/libiberty/obstacks.texi Wed Sep 26 18:16:17 2001 *************** *** 0 **** --- 1,758 ---- + @node Obstacks,Licenses,Functions,Top + @chapter Obstacks + @cindex obstacks + + An @dfn{obstack} is a pool of memory containing a stack of objects. You + can create any number of separate obstacks, and then allocate objects in + specified obstacks. Within each obstack, the last object allocated must + always be the first one freed, but distinct obstacks are independent of + each other. + + Aside from this one constraint of order of freeing, obstacks are totally + general: an obstack can contain any number of objects of any size. They + are implemented with macros, so allocation is usually very fast as long as + the objects are usually small. And the only space overhead per object is + the padding needed to start each object on a suitable boundary. + + @menu + * Creating Obstacks:: How to declare an obstack in your program. + * Preparing for Obstacks:: Preparations needed before you can + use obstacks. + * Allocation in an Obstack:: Allocating objects in an obstack. + * Freeing Obstack Objects:: Freeing objects in an obstack. + * Obstack Functions:: The obstack functions are both + functions and macros. + * Growing Objects:: Making an object bigger by stages. + * Extra Fast Growing:: Extra-high-efficiency (though more + complicated) growing objects. + * Status of an Obstack:: Inquiries about the status of an obstack. + * Obstacks Data Alignment:: Controlling alignment of objects in obstacks. + * Obstack Chunks:: How obstacks obtain and release chunks; + efficiency considerations. + * Summary of Obstacks:: + @end menu + + @node Creating Obstacks + @section Creating Obstacks + + The utilities for manipulating obstacks are declared in the header + file @file{obstack.h}. + @pindex obstack.h + + @comment obstack.h + @comment GNU + @deftp {Data Type} {struct obstack} + An obstack is represented by a data structure of type @code{struct + obstack}. This structure has a small fixed size; it records the status + of the obstack and how to find the space in which objects are allocated. + It does not contain any of the objects themselves. You should not try + to access the contents of the structure directly; use only the functions + described in this chapter. + @end deftp + + You can declare variables of type @code{struct obstack} and use them as + obstacks, or you can allocate obstacks dynamically like any other kind + of object. Dynamic allocation of obstacks allows your program to have a + variable number of different stacks. (You can even allocate an + obstack structure in another obstack, but this is rarely useful.) + + All the functions that work with obstacks require you to specify which + obstack to use. You do this with a pointer of type @code{struct obstack + *}. In the following, we often say ``an obstack'' when strictly + speaking the object at hand is such a pointer. + + The objects in the obstack are packed into large blocks called + @dfn{chunks}. The @code{struct obstack} structure points to a chain of + the chunks currently in use. + + The obstack library obtains a new chunk whenever you allocate an object + that won't fit in the previous chunk. Since the obstack library manages + chunks automatically, you don't need to pay much attention to them, but + you do need to supply a function which the obstack library should use to + get a chunk. Usually you supply a function which uses @code{malloc} + directly or indirectly. You must also supply a function to free a chunk. + These matters are described in the following section. + + @node Preparing for Obstacks + @section Preparing for Using Obstacks + + Each source file in which you plan to use the obstack functions + must include the header file @file{obstack.h}, like this: + + @smallexample + #include + @end smallexample + + @findex obstack_chunk_alloc + @findex obstack_chunk_free + Also, if the source file uses the macro @code{obstack_init}, it must + declare or define two functions or macros that will be called by the + obstack library. One, @code{obstack_chunk_alloc}, is used to allocate + the chunks of memory into which objects are packed. The other, + @code{obstack_chunk_free}, is used to return chunks when the objects in + them are freed. These macros should appear before any use of obstacks + in the source file. + + Usually these are defined to use @code{malloc} via the intermediary + @code{xmalloc} (@pxref{Unconstrained Allocation, , , libc, The GNU C Library Reference Manual}). This is done with + the following pair of macro definitions: + + @smallexample + #define obstack_chunk_alloc xmalloc + #define obstack_chunk_free free + @end smallexample + + @noindent + Though the memory you get using obstacks really comes from @code{malloc}, + using obstacks is faster because @code{malloc} is called less often, for + larger blocks of memory. @xref{Obstack Chunks}, for full details. + + At run time, before the program can use a @code{struct obstack} object + as an obstack, it must initialize the obstack by calling + @code{obstack_init}. + + @comment obstack.h + @comment GNU + @deftypefun int obstack_init (struct obstack *@var{obstack-ptr}) + Initialize obstack @var{obstack-ptr} for allocation of objects. This + function calls the obstack's @code{obstack_chunk_alloc} function. If + allocation of memory fails, the function pointed to by + @code{obstack_alloc_failed_handler} is called. The @code{obstack_init} + function always returns 1 (Compatibility notice: Former versions of + obstack returned 0 if allocation failed). + @end deftypefun + + Here are two examples of how to allocate the space for an obstack and + initialize it. First, an obstack that is a static variable: + + @smallexample + static struct obstack myobstack; + @dots{} + obstack_init (&myobstack); + @end smallexample + + @noindent + Second, an obstack that is itself dynamically allocated: + + @smallexample + struct obstack *myobstack_ptr + = (struct obstack *) xmalloc (sizeof (struct obstack)); + + obstack_init (myobstack_ptr); + @end smallexample + + @comment obstack.h + @comment GNU + @defvar obstack_alloc_failed_handler + The value of this variable is a pointer to a function that + @code{obstack} uses when @code{obstack_chunk_alloc} fails to allocate + memory. The default action is to print a message and abort. + You should supply a function that either calls @code{exit} + (@pxref{Program Termination, , , libc, The GNU C Library Reference Manual}) or @code{longjmp} (@pxref{Non-Local + Exits, , , libc, The GNU C Library Reference Manual}) and doesn't return. + + @smallexample + void my_obstack_alloc_failed (void) + @dots{} + obstack_alloc_failed_handler = &my_obstack_alloc_failed; + @end smallexample + + @end defvar + + @node Allocation in an Obstack + @section Allocation in an Obstack + @cindex allocation (obstacks) + + The most direct way to allocate an object in an obstack is with + @code{obstack_alloc}, which is invoked almost like @code{malloc}. + + @comment obstack.h + @comment GNU + @deftypefun {void *} obstack_alloc (struct obstack *@var{obstack-ptr}, int @var{size}) + This allocates an uninitialized block of @var{size} bytes in an obstack + and returns its address. Here @var{obstack-ptr} specifies which obstack + to allocate the block in; it is the address of the @code{struct obstack} + object which represents the obstack. Each obstack function or macro + requires you to specify an @var{obstack-ptr} as the first argument. + + This function calls the obstack's @code{obstack_chunk_alloc} function if + it needs to allocate a new chunk of memory; it calls + @code{obstack_alloc_failed_handler} if allocation of memory by + @code{obstack_chunk_alloc} failed. + @end deftypefun + + For example, here is a function that allocates a copy of a string @var{str} + in a specific obstack, which is in the variable @code{string_obstack}: + + @smallexample + struct obstack string_obstack; + + char * + copystring (char *string) + @{ + size_t len = strlen (string) + 1; + char *s = (char *) obstack_alloc (&string_obstack, len); + memcpy (s, string, len); + return s; + @} + @end smallexample + + To allocate a block with specified contents, use the function + @code{obstack_copy}, declared like this: + + @comment obstack.h + @comment GNU + @deftypefun {void *} obstack_copy (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size}) + This allocates a block and initializes it by copying @var{size} + bytes of data starting at @var{address}. It calls + @code{obstack_alloc_failed_handler} if allocation of memory by + @code{obstack_chunk_alloc} failed. + @end deftypefun + + @comment obstack.h + @comment GNU + @deftypefun {void *} obstack_copy0 (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size}) + Like @code{obstack_copy}, but appends an extra byte containing a null + character. This extra byte is not counted in the argument @var{size}. + @end deftypefun + + The @code{obstack_copy0} function is convenient for copying a sequence + of characters into an obstack as a null-terminated string. Here is an + example of its use: + + @smallexample + char * + obstack_savestring (char *addr, int size) + @{ + return obstack_copy0 (&myobstack, addr, size); + @} + @end smallexample + + @noindent + Contrast this with the previous example of @code{savestring} using + @code{malloc} (@pxref{Basic Allocation, , , libc, The GNU C Library Reference Manual}). + + @node Freeing Obstack Objects + @section Freeing Objects in an Obstack + @cindex freeing (obstacks) + + To free an object allocated in an obstack, use the function + @code{obstack_free}. Since the obstack is a stack of objects, freeing + one object automatically frees all other objects allocated more recently + in the same obstack. + + @comment obstack.h + @comment GNU + @deftypefun void obstack_free (struct obstack *@var{obstack-ptr}, void *@var{object}) + If @var{object} is a null pointer, everything allocated in the obstack + is freed. Otherwise, @var{object} must be the address of an object + allocated in the obstack. Then @var{object} is freed, along with + everything allocated in @var{obstack} since @var{object}. + @end deftypefun + + Note that if @var{object} is a null pointer, the result is an + uninitialized obstack. To free all memory in an obstack but leave it + valid for further allocation, call @code{obstack_free} with the address + of the first object allocated on the obstack: + + @smallexample + obstack_free (obstack_ptr, first_object_allocated_ptr); + @end smallexample + + Recall that the objects in an obstack are grouped into chunks. When all + the objects in a chunk become free, the obstack library automatically + frees the chunk (@pxref{Preparing for Obstacks}). Then other + obstacks, or non-obstack allocation, can reuse the space of the chunk. + + @node Obstack Functions + @section Obstack Functions and Macros + @cindex macros + + The interfaces for using obstacks may be defined either as functions or + as macros, depending on the compiler. The obstack facility works with + all C compilers, including both @w{ISO C} and traditional C, but there are + precautions you must take if you plan to use compilers other than GNU C. + + If you are using an old-fashioned @w{non-ISO C} compiler, all the obstack + ``functions'' are actually defined only as macros. You can call these + macros like functions, but you cannot use them in any other way (for + example, you cannot take their address). + + Calling the macros requires a special precaution: namely, the first + operand (the obstack pointer) may not contain any side effects, because + it may be computed more than once. For example, if you write this: + + @smallexample + obstack_alloc (get_obstack (), 4); + @end smallexample + + @noindent + you will find that @code{get_obstack} may be called several times. + If you use @code{*obstack_list_ptr++} as the obstack pointer argument, + you will get very strange results since the incrementation may occur + several times. + + In @w{ISO C}, each function has both a macro definition and a function + definition. The function definition is used if you take the address of the + function without calling it. An ordinary call uses the macro definition by + default, but you can request the function definition instead by writing the + function name in parentheses, as shown here: + + @smallexample + char *x; + void *(*funcp) (); + /* @r{Use the macro}. */ + x = (char *) obstack_alloc (obptr, size); + /* @r{Call the function}. */ + x = (char *) (obstack_alloc) (obptr, size); + /* @r{Take the address of the function}. */ + funcp = obstack_alloc; + @end smallexample + + @noindent + This is the same situation that exists in @w{ISO C} for the standard library + functions. @xref{Macro Definitions, , , libc, The GNU C Library Reference Manual}. + + @strong{Warning:} When you do use the macros, you must observe the + precaution of avoiding side effects in the first operand, even in @w{ISO C}. + + If you use the GNU C compiler, this precaution is not necessary, because + various language extensions in GNU C permit defining the macros so as to + compute each argument only once. + + @node Growing Objects + @section Growing Objects + @cindex growing objects (in obstacks) + @cindex changing the size of a block (obstacks) + + Because memory in obstack chunks is used sequentially, it is possible to + build up an object step by step, adding one or more bytes at a time to the + end of the object. With this technique, you do not need to know how much + data you will put in the object until you come to the end of it. We call + this the technique of @dfn{growing objects}. The special functions + for adding data to the growing object are described in this section. + + You don't need to do anything special when you start to grow an object. + Using one of the functions to add data to the object automatically + starts it. However, it is necessary to say explicitly when the object is + finished. This is done with the function @code{obstack_finish}. + + The actual address of the object thus built up is not known until the + object is finished. Until then, it always remains possible that you will + add so much data that the object must be copied into a new chunk. + + While the obstack is in use for a growing object, you cannot use it for + ordinary allocation of another object. If you try to do so, the space + already added to the growing object will become part of the other object. + + @comment obstack.h + @comment GNU + @deftypefun void obstack_blank (struct obstack *@var{obstack-ptr}, int @var{size}) + The most basic function for adding to a growing object is + @code{obstack_blank}, which adds space without initializing it. + @end deftypefun + + @comment obstack.h + @comment GNU + @deftypefun void obstack_grow (struct obstack *@var{obstack-ptr}, void *@var{data}, int @var{size}) + To add a block of initialized space, use @code{obstack_grow}, which is + the growing-object analogue of @code{obstack_copy}. It adds @var{size} + bytes of data to the growing object, copying the contents from + @var{data}. + @end deftypefun + + @comment obstack.h + @comment GNU + @deftypefun void obstack_grow0 (struct obstack *@var{obstack-ptr}, void *@var{data}, int @var{size}) + This is the growing-object analogue of @code{obstack_copy0}. It adds + @var{size} bytes copied from @var{data}, followed by an additional null + character. + @end deftypefun + + @comment obstack.h + @comment GNU + @deftypefun void obstack_1grow (struct obstack *@var{obstack-ptr}, char @var{c}) + To add one character at a time, use the function @code{obstack_1grow}. + It adds a single byte containing @var{c} to the growing object. + @end deftypefun + + @comment obstack.h + @comment GNU + @deftypefun void obstack_ptr_grow (struct obstack *@var{obstack-ptr}, void *@var{data}) + Adding the value of a pointer one can use the function + @code{obstack_ptr_grow}. It adds @code{sizeof (void *)} bytes + containing the value of @var{data}. + @end deftypefun + + @comment obstack.h + @comment GNU + @deftypefun void obstack_int_grow (struct obstack *@var{obstack-ptr}, int @var{data}) + A single value of type @code{int} can be added by using the + @code{obstack_int_grow} function. It adds @code{sizeof (int)} bytes to + the growing object and initializes them with the value of @var{data}. + @end deftypefun + + @comment obstack.h + @comment GNU + @deftypefun {void *} obstack_finish (struct obstack *@var{obstack-ptr}) + When you are finished growing the object, use the function + @code{obstack_finish} to close it off and return its final address. + + Once you have finished the object, the obstack is available for ordinary + allocation or for growing another object. + + This function can return a null pointer under the same conditions as + @code{obstack_alloc} (@pxref{Allocation in an Obstack}). + @end deftypefun + + When you build an object by growing it, you will probably need to know + afterward how long it became. You need not keep track of this as you grow + the object, because you can find out the length from the obstack just + before finishing the object with the function @code{obstack_object_size}, + declared as follows: + + @comment obstack.h + @comment GNU + @deftypefun int obstack_object_size (struct obstack *@var{obstack-ptr}) + This function returns the current size of the growing object, in bytes. + Remember to call this function @emph{before} finishing the object. + After it is finished, @code{obstack_object_size} will return zero. + @end deftypefun + + If you have started growing an object and wish to cancel it, you should + finish it and then free it, like this: + + @smallexample + obstack_free (obstack_ptr, obstack_finish (obstack_ptr)); + @end smallexample + + @noindent + This has no effect if no object was growing. + + @cindex shrinking objects + You can use @code{obstack_blank} with a negative size argument to make + the current object smaller. Just don't try to shrink it beyond zero + length---there's no telling what will happen if you do that. + + @node Extra Fast Growing + @section Extra Fast Growing Objects + @cindex efficiency and obstacks + + The usual functions for growing objects incur overhead for checking + whether there is room for the new growth in the current chunk. If you + are frequently constructing objects in small steps of growth, this + overhead can be significant. + + You can reduce the overhead by using special ``fast growth'' + functions that grow the object without checking. In order to have a + robust program, you must do the checking yourself. If you do this checking + in the simplest way each time you are about to add data to the object, you + have not saved anything, because that is what the ordinary growth + functions do. But if you can arrange to check less often, or check + more efficiently, then you make the program faster. + + The function @code{obstack_room} returns the amount of room available + in the current chunk. It is declared as follows: + + @comment obstack.h + @comment GNU + @deftypefun int obstack_room (struct obstack *@var{obstack-ptr}) + This returns the number of bytes that can be added safely to the current + growing object (or to an object about to be started) in obstack + @var{obstack} using the fast growth functions. + @end deftypefun + + While you know there is room, you can use these fast growth functions + for adding data to a growing object: + + @comment obstack.h + @comment GNU + @deftypefun void obstack_1grow_fast (struct obstack *@var{obstack-ptr}, char @var{c}) + The function @code{obstack_1grow_fast} adds one byte containing the + character @var{c} to the growing object in obstack @var{obstack-ptr}. + @end deftypefun + + @comment obstack.h + @comment GNU + @deftypefun void obstack_ptr_grow_fast (struct obstack *@var{obstack-ptr}, void *@var{data}) + The function @code{obstack_ptr_grow_fast} adds @code{sizeof (void *)} + bytes containing the value of @var{data} to the growing object in + obstack @var{obstack-ptr}. + @end deftypefun + + @comment obstack.h + @comment GNU + @deftypefun void obstack_int_grow_fast (struct obstack *@var{obstack-ptr}, int @var{data}) + The function @code{obstack_int_grow_fast} adds @code{sizeof (int)} bytes + containing the value of @var{data} to the growing object in obstack + @var{obstack-ptr}. + @end deftypefun + + @comment obstack.h + @comment GNU + @deftypefun void obstack_blank_fast (struct obstack *@var{obstack-ptr}, int @var{size}) + The function @code{obstack_blank_fast} adds @var{size} bytes to the + growing object in obstack @var{obstack-ptr} without initializing them. + @end deftypefun + + When you check for space using @code{obstack_room} and there is not + enough room for what you want to add, the fast growth functions + are not safe. In this case, simply use the corresponding ordinary + growth function instead. Very soon this will copy the object to a + new chunk; then there will be lots of room available again. + + So, each time you use an ordinary growth function, check afterward for + sufficient space using @code{obstack_room}. Once the object is copied + to a new chunk, there will be plenty of space again, so the program will + start using the fast growth functions again. + + Here is an example: + + @smallexample + @group + void + add_string (struct obstack *obstack, const char *ptr, int len) + @{ + while (len > 0) + @{ + int room = obstack_room (obstack); + if (room == 0) + @{ + /* @r{Not enough room. Add one character slowly,} + @r{which may copy to a new chunk and make room.} */ + obstack_1grow (obstack, *ptr++); + len--; + @} + else + @{ + if (room > len) + room = len; + /* @r{Add fast as much as we have room for.} */ + len -= room; + while (room-- > 0) + obstack_1grow_fast (obstack, *ptr++); + @} + @} + @} + @end group + @end smallexample + + @node Status of an Obstack + @section Status of an Obstack + @cindex obstack status + @cindex status of obstack + + Here are functions that provide information on the current status of + allocation in an obstack. You can use them to learn about an object while + still growing it. + + @comment obstack.h + @comment GNU + @deftypefun {void *} obstack_base (struct obstack *@var{obstack-ptr}) + This function returns the tentative address of the beginning of the + currently growing object in @var{obstack-ptr}. If you finish the object + immediately, it will have that address. If you make it larger first, it + may outgrow the current chunk---then its address will change! + + If no object is growing, this value says where the next object you + allocate will start (once again assuming it fits in the current + chunk). + @end deftypefun + + @comment obstack.h + @comment GNU + @deftypefun {void *} obstack_next_free (struct obstack *@var{obstack-ptr}) + This function returns the address of the first free byte in the current + chunk of obstack @var{obstack-ptr}. This is the end of the currently + growing object. If no object is growing, @code{obstack_next_free} + returns the same value as @code{obstack_base}. + @end deftypefun + + @comment obstack.h + @comment GNU + @deftypefun int obstack_object_size (struct obstack *@var{obstack-ptr}) + This function returns the size in bytes of the currently growing object. + This is equivalent to + + @smallexample + obstack_next_free (@var{obstack-ptr}) - obstack_base (@var{obstack-ptr}) + @end smallexample + @end deftypefun + + @node Obstacks Data Alignment + @section Alignment of Data in Obstacks + @cindex alignment (in obstacks) + + Each obstack has an @dfn{alignment boundary}; each object allocated in + the obstack automatically starts on an address that is a multiple of the + specified boundary. By default, this boundary is 4 bytes. + + To access an obstack's alignment boundary, use the macro + @code{obstack_alignment_mask}, whose function prototype looks like + this: + + @comment obstack.h + @comment GNU + @deftypefn Macro int obstack_alignment_mask (struct obstack *@var{obstack-ptr}) + The value is a bit mask; a bit that is 1 indicates that the corresponding + bit in the address of an object should be 0. The mask value should be one + less than a power of 2; the effect is that all object addresses are + multiples of that power of 2. The default value of the mask is 3, so that + addresses are multiples of 4. A mask value of 0 means an object can start + on any multiple of 1 (that is, no alignment is required). + + The expansion of the macro @code{obstack_alignment_mask} is an lvalue, + so you can alter the mask by assignment. For example, this statement: + + @smallexample + obstack_alignment_mask (obstack_ptr) = 0; + @end smallexample + + @noindent + has the effect of turning off alignment processing in the specified obstack. + @end deftypefn + + Note that a change in alignment mask does not take effect until + @emph{after} the next time an object is allocated or finished in the + obstack. If you are not growing an object, you can make the new + alignment mask take effect immediately by calling @code{obstack_finish}. + This will finish a zero-length object and then do proper alignment for + the next object. + + @node Obstack Chunks + @section Obstack Chunks + @cindex efficiency of chunks + @cindex chunks + + Obstacks work by allocating space for themselves in large chunks, and + then parceling out space in the chunks to satisfy your requests. Chunks + are normally 4096 bytes long unless you specify a different chunk size. + The chunk size includes 8 bytes of overhead that are not actually used + for storing objects. Regardless of the specified size, longer chunks + will be allocated when necessary for long objects. + + The obstack library allocates chunks by calling the function + @code{obstack_chunk_alloc}, which you must define. When a chunk is no + longer needed because you have freed all the objects in it, the obstack + library frees the chunk by calling @code{obstack_chunk_free}, which you + must also define. + + These two must be defined (as macros) or declared (as functions) in each + source file that uses @code{obstack_init} (@pxref{Creating Obstacks}). + Most often they are defined as macros like this: + + @smallexample + #define obstack_chunk_alloc malloc + #define obstack_chunk_free free + @end smallexample + + Note that these are simple macros (no arguments). Macro definitions with + arguments will not work! It is necessary that @code{obstack_chunk_alloc} + or @code{obstack_chunk_free}, alone, expand into a function name if it is + not itself a function name. + + If you allocate chunks with @code{malloc}, the chunk size should be a + power of 2. The default chunk size, 4096, was chosen because it is long + enough to satisfy many typical requests on the obstack yet short enough + not to waste too much memory in the portion of the last chunk not yet used. + + @comment obstack.h + @comment GNU + @deftypefn Macro int obstack_chunk_size (struct obstack *@var{obstack-ptr}) + This returns the chunk size of the given obstack. + @end deftypefn + + Since this macro expands to an lvalue, you can specify a new chunk size by + assigning it a new value. Doing so does not affect the chunks already + allocated, but will change the size of chunks allocated for that particular + obstack in the future. It is unlikely to be useful to make the chunk size + smaller, but making it larger might improve efficiency if you are + allocating many objects whose size is comparable to the chunk size. Here + is how to do so cleanly: + + @smallexample + if (obstack_chunk_size (obstack_ptr) < @var{new-chunk-size}) + obstack_chunk_size (obstack_ptr) = @var{new-chunk-size}; + @end smallexample + + @node Summary of Obstacks + @section Summary of Obstack Functions + + Here is a summary of all the functions associated with obstacks. Each + takes the address of an obstack (@code{struct obstack *}) as its first + argument. + + @table @code + @item void obstack_init (struct obstack *@var{obstack-ptr}) + Initialize use of an obstack. @xref{Creating Obstacks}. + + @item void *obstack_alloc (struct obstack *@var{obstack-ptr}, int @var{size}) + Allocate an object of @var{size} uninitialized bytes. + @xref{Allocation in an Obstack}. + + @item void *obstack_copy (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size}) + Allocate an object of @var{size} bytes, with contents copied from + @var{address}. @xref{Allocation in an Obstack}. + + @item void *obstack_copy0 (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size}) + Allocate an object of @var{size}+1 bytes, with @var{size} of them copied + from @var{address}, followed by a null character at the end. + @xref{Allocation in an Obstack}. + + @item void obstack_free (struct obstack *@var{obstack-ptr}, void *@var{object}) + Free @var{object} (and everything allocated in the specified obstack + more recently than @var{object}). @xref{Freeing Obstack Objects}. + + @item void obstack_blank (struct obstack *@var{obstack-ptr}, int @var{size}) + Add @var{size} uninitialized bytes to a growing object. + @xref{Growing Objects}. + + @item void obstack_grow (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size}) + Add @var{size} bytes, copied from @var{address}, to a growing object. + @xref{Growing Objects}. + + @item void obstack_grow0 (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size}) + Add @var{size} bytes, copied from @var{address}, to a growing object, + and then add another byte containing a null character. @xref{Growing + Objects}. + + @item void obstack_1grow (struct obstack *@var{obstack-ptr}, char @var{data-char}) + Add one byte containing @var{data-char} to a growing object. + @xref{Growing Objects}. + + @item void *obstack_finish (struct obstack *@var{obstack-ptr}) + Finalize the object that is growing and return its permanent address. + @xref{Growing Objects}. + + @item int obstack_object_size (struct obstack *@var{obstack-ptr}) + Get the current size of the currently growing object. @xref{Growing + Objects}. + + @item void obstack_blank_fast (struct obstack *@var{obstack-ptr}, int @var{size}) + Add @var{size} uninitialized bytes to a growing object without checking + that there is enough room. @xref{Extra Fast Growing}. + + @item void obstack_1grow_fast (struct obstack *@var{obstack-ptr}, char @var{data-char}) + Add one byte containing @var{data-char} to a growing object without + checking that there is enough room. @xref{Extra Fast Growing}. + + @item int obstack_room (struct obstack *@var{obstack-ptr}) + Get the amount of room now available for growing the current object. + @xref{Extra Fast Growing}. + + @item int obstack_alignment_mask (struct obstack *@var{obstack-ptr}) + The mask used for aligning the beginning of an object. This is an + lvalue. @xref{Obstacks Data Alignment}. + + @item int obstack_chunk_size (struct obstack *@var{obstack-ptr}) + The size for allocating chunks. This is an lvalue. @xref{Obstack Chunks}. + + @item void *obstack_base (struct obstack *@var{obstack-ptr}) + Tentative starting address of the currently growing object. + @xref{Status of an Obstack}. + + @item void *obstack_next_free (struct obstack *@var{obstack-ptr}) + Address just after the end of the currently growing object. + @xref{Status of an Obstack}. + @end table + diff -Nrc3pad gcc-3.0.4/libiberty/partition.c gcc-3.1/libiberty/partition.c *** gcc-3.0.4/libiberty/partition.c Thu Jun 8 07:29:53 2000 --- gcc-3.1/libiberty/partition.c Wed May 16 20:44:03 2001 *************** *** 1,5 **** ! /* List implentation of a partition of consecutive integers. ! Copyright (C) 2000 Free Software Foundation, Inc. Contributed by CodeSourcery, LLC. This file is part of GNU CC. --- 1,5 ---- ! /* List implementation of a partition of consecutive integers. ! Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by CodeSourcery, LLC. This file is part of GNU CC. diff -Nrc3pad gcc-3.0.4/libiberty/pexecute.c gcc-3.1/libiberty/pexecute.c *** gcc-3.0.4/libiberty/pexecute.c Fri Dec 8 03:00:26 2000 --- gcc-3.1/libiberty/pexecute.c Wed Oct 17 21:15:41 2001 *************** static char *install_error_msg = "instal *** 64,116 **** /* pexecute: execute a program. ! PROGRAM and ARGV are the arguments to execv/execvp. ! THIS_PNAME is name of the calling program (i.e. argv[0]). ! TEMP_BASE is the path name, sans suffix, of a temporary file to use ! if needed. This is currently only needed for MSDOS ports that don't use ! GO32 (do any still exist?). Ports that don't need it can pass NULL. ! (FLAGS & PEXECUTE_SEARCH) is non-zero if $PATH should be searched ! (??? It's not clear that GCC passes this flag correctly). ! (FLAGS & PEXECUTE_FIRST) is nonzero for the first process in chain. ! (FLAGS & PEXECUTE_FIRST) is nonzero for the last process in chain. ! FIRST_LAST could be simplified to only mark the last of a chain of processes ! but that requires the caller to always mark the last one (and not give up ! early if some error occurs). It's more robust to require the caller to ! mark both ends of the chain. ! The result is the pid on systems like Unix where we fork/exec and on systems ! like WIN32 and OS2 where we use spawn. It is up to the caller to wait for ! the child. ! The result is the WEXITSTATUS on systems like MSDOS where we spawn and wait ! for the child here. ! Upon failure, ERRMSG_FMT and ERRMSG_ARG are set to the text of the error ! message with an optional argument (if not needed, ERRMSG_ARG is set to ! NULL), and -1 is returned. `errno' is available to the caller to use. ! pwait: cover function for wait. ! PID is the process id of the task to wait for. ! STATUS is the `status' argument to wait. ! FLAGS is currently unused (allows future enhancement without breaking ! upward compatibility). Pass 0 for now. ! The result is the pid of the child reaped, ! or -1 for failure (errno says why). ! On systems that don't support waiting for a particular child, PID is ! ignored. On systems like MSDOS that don't really multitask pwait ! is just a mechanism to provide a consistent interface for the caller. pfinish: finish generation of script pfinish is necessary for systems like MPW where a script is generated that ! runs the requested programs. ! */ #ifdef __MSDOS__ --- 64,129 ---- /* pexecute: execute a program. ! @deftypefn Extension int pexecute (const char *@var{program}, char * const *@var{argv}, const char *@var{this_pname}, const char *@var{temp_base}, char **@var{errmsg_fmt}, char **@var{errmsg_arg}, int flags) ! Executes a program. ! @var{program} and @var{argv} are the arguments to ! @code{execv}/@code{execvp}. ! @var{this_pname} is name of the calling program (i.e., @code{argv[0]}). ! @var{temp_base} is the path name, sans suffix, of a temporary file to ! use if needed. This is currently only needed for MS-DOS ports that ! don't use @code{go32} (do any still exist?). Ports that don't need it ! can pass @code{NULL}. ! (@code{@var{flags} & PEXECUTE_SEARCH}) is non-zero if @env{PATH} should be searched ! (??? It's not clear that GCC passes this flag correctly). (@code{@var{flags} & ! PEXECUTE_FIRST}) is nonzero for the first process in chain. ! (@code{@var{flags} & PEXECUTE_FIRST}) is nonzero for the last process ! in chain. The first/last flags could be simplified to only mark the ! last of a chain of processes but that requires the caller to always ! mark the last one (and not give up early if some error occurs). ! It's more robust to require the caller to mark both ends of the chain. ! The result is the pid on systems like Unix where we ! @code{fork}/@code{exec} and on systems like WIN32 and OS/2 where we ! use @code{spawn}. It is up to the caller to wait for the child. ! The result is the @code{WEXITSTATUS} on systems like MS-DOS where we ! @code{spawn} and wait for the child here. ! Upon failure, @var{errmsg_fmt} and @var{errmsg_arg} are set to the ! text of the error message with an optional argument (if not needed, ! @var{errmsg_arg} is set to @code{NULL}), and @minus{}1 is returned. ! @code{errno} is available to the caller to use. ! @end deftypefn ! @deftypefn Extension int pwait (int @var{pid}, int *@var{status}, int @var{flags}) ! ! Waits for a program started by @code{pexecute} to finish. ! ! @var{pid} is the process id of the task to wait for. @var{status} is ! the `status' argument to wait. @var{flags} is currently unused (allows ! future enhancement without breaking upward compatibility). Pass 0 for now. ! ! The result is the pid of the child reaped, or -1 for failure ! (@code{errno} says why). ! ! On systems that don't support waiting for a particular child, @var{pid} is ! ignored. On systems like MS-DOS that don't really multitask @code{pwait} ! is just a mechanism to provide a consistent interface for the caller. ! ! @end deftypefn ! ! @undocumented pfinish pfinish: finish generation of script pfinish is necessary for systems like MPW where a script is generated that ! runs the requested programs. */ #ifdef __MSDOS__ *************** extern int _spawnvp (); *** 254,260 **** /* This is a kludge to get around the Microsoft C spawn functions' propensity to remove the outermost set of double quotes from all arguments. */ ! const char * const * fix_argv (argvec) char **argvec; { --- 267,273 ---- /* This is a kludge to get around the Microsoft C spawn functions' propensity to remove the outermost set of double quotes from all arguments. */ ! static const char * const * fix_argv (argvec) char **argvec; { diff -Nrc3pad gcc-3.0.4/libiberty/putenv.c gcc-3.1/libiberty/putenv.c *** gcc-3.0.4/libiberty/putenv.c Fri May 28 07:34:47 1999 --- gcc-3.1/libiberty/putenv.c Tue Jan 22 20:03:29 2002 *************** *** 1,4 **** ! /* Copyright (C) 1991, 1994, 1995, 1996 Free Software Foundation, Inc. This file based on putenv.c in the GNU C Library. The GNU C Library is free software; you can redistribute it and/or --- 1,4 ---- ! /* Copyright (C) 1991, 1994, 1995, 1996, 2002 Free Software Foundation, Inc. This file based on putenv.c in the GNU C Library. The GNU C Library is free software; you can redistribute it and/or *************** *** 16,21 **** --- 16,34 ---- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + /* + + @deftypefn Supplemental int putenv (const char *@var{string}) + + Uses @code{setenv} or @code{unsetenv} to put @var{string} into + the environment or remove it. If @var{string} is of the form + @samp{name=value} the string is added; if no @samp{=} is present the + name is unset/removed. + + @end deftypefn + + */ + #if defined (_AIX) && !defined (__GNUC__) #pragma alloca #endif *************** *** 26,31 **** --- 39,46 ---- #include "ansidecl.h" + #define putenv libiberty_putenv + #if HAVE_STDLIB_H # include #endif *************** extern char *alloca (); *** 45,50 **** --- 60,67 ---- # endif /* alloca */ #endif /* HAVE_ALLOCA_H */ + #undef putenv + /* Below this point, it's verbatim code from the glibc-2.0 implementation */ diff -Nrc3pad gcc-3.0.4/libiberty/random.c gcc-3.1/libiberty/random.c *** gcc-3.0.4/libiberty/random.c Thu Aug 24 22:44:37 2000 --- gcc-3.1/libiberty/random.c Wed Oct 17 21:15:41 2001 *************** *** 34,39 **** --- 34,57 ---- * It was reworked for the GNU C Library by Roland McGrath. */ + /* + + @deftypefn Supplement {long int} random (void) + @deftypefnx Supplement void srandom (unsigned int @var{seed}) + @deftypefnx Supplement void* initstate (unsigned int @var{seed}, void *@var{arg_state}, unsigned long @var{n}) + @deftypefnx Supplement void* setstate (void *@var{arg_state}) + + Random number functions. @code{random} returns a random number in the + range 0 to @code{LONG_MAX}. @code{srandom} initializes the random + number generator to some starting point determined by @var{seed} + (else, the values returned by @code{random} are always the same for each + run of the program). @code{initstate} and @code{setstate} allow fine-grained + control over the state of the random number generator. + + @end deftypefn + + */ + #include #if 0 diff -Nrc3pad gcc-3.0.4/libiberty/regex.c gcc-3.1/libiberty/regex.c *** gcc-3.0.4/libiberty/regex.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/libiberty/regex.c Fri Nov 16 21:54:17 2001 *************** *** 0 **** --- 1,8373 ---- + /* Extended regular expression matching and search library, + version 0.12. + (Implements POSIX draft P1003.2/D11.2, except for some of the + internationalization features.) + Copyright (C) 1993-1999, 2000, 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + + /* This file has been modified for usage in libiberty. It includes "xregex.h" + instead of . The "xregex.h" header file renames all external + routines with an "x" prefix so they do not collide with the native regex + routines or with other components regex routines. */ + /* AIX requires this to be the first thing in the file. */ + #if defined _AIX && !defined REGEX_MALLOC + #pragma alloca + #endif + + #undef _GNU_SOURCE + #define _GNU_SOURCE + + #ifdef HAVE_CONFIG_H + # include + #endif + + #ifndef PARAMS + # if defined __GNUC__ || (defined __STDC__ && __STDC__) + # define PARAMS(args) args + # else + # define PARAMS(args) () + # endif /* GCC. */ + #endif /* Not PARAMS. */ + + #ifndef INSIDE_RECURSION + + # if defined STDC_HEADERS && !defined emacs + # include + # else + /* We need this for `regex.h', and perhaps for the Emacs include files. */ + # include + # endif + + # define WIDE_CHAR_SUPPORT (HAVE_WCTYPE_H && HAVE_WCHAR_H && HAVE_BTOWC) + + /* For platform which support the ISO C amendement 1 functionality we + support user defined character classes. */ + # if defined _LIBC || WIDE_CHAR_SUPPORT + /* Solaris 2.5 has a bug: must be included before . */ + # include + # include + # endif + + # ifdef _LIBC + /* We have to keep the namespace clean. */ + # define regfree(preg) __regfree (preg) + # define regexec(pr, st, nm, pm, ef) __regexec (pr, st, nm, pm, ef) + # define regcomp(preg, pattern, cflags) __regcomp (preg, pattern, cflags) + # define regerror(errcode, preg, errbuf, errbuf_size) \ + __regerror(errcode, preg, errbuf, errbuf_size) + # define re_set_registers(bu, re, nu, st, en) \ + __re_set_registers (bu, re, nu, st, en) + # define re_match_2(bufp, string1, size1, string2, size2, pos, regs, stop) \ + __re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop) + # define re_match(bufp, string, size, pos, regs) \ + __re_match (bufp, string, size, pos, regs) + # define re_search(bufp, string, size, startpos, range, regs) \ + __re_search (bufp, string, size, startpos, range, regs) + # define re_compile_pattern(pattern, length, bufp) \ + __re_compile_pattern (pattern, length, bufp) + # define re_set_syntax(syntax) __re_set_syntax (syntax) + # define re_search_2(bufp, st1, s1, st2, s2, startpos, range, regs, stop) \ + __re_search_2 (bufp, st1, s1, st2, s2, startpos, range, regs, stop) + # define re_compile_fastmap(bufp) __re_compile_fastmap (bufp) + + # define btowc __btowc + + /* We are also using some library internals. */ + # include + # include + # include + # include + # endif + + /* This is for other GNU distributions with internationalized messages. */ + # if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC + # include + # ifdef _LIBC + # undef gettext + # define gettext(msgid) __dcgettext ("libc", msgid, LC_MESSAGES) + # endif + # else + # define gettext(msgid) (msgid) + # endif + + # ifndef gettext_noop + /* This define is so xgettext can find the internationalizable + strings. */ + # define gettext_noop(String) String + # endif + + /* The `emacs' switch turns on certain matching commands + that make sense only in Emacs. */ + # ifdef emacs + + # include "lisp.h" + # include "buffer.h" + # include "syntax.h" + + # else /* not emacs */ + + /* If we are not linking with Emacs proper, + we can't use the relocating allocator + even if config.h says that we can. */ + # undef REL_ALLOC + + # if defined STDC_HEADERS || defined _LIBC + # include + # else + char *malloc (); + char *realloc (); + # endif + + /* When used in Emacs's lib-src, we need to get bzero and bcopy somehow. + If nothing else has been done, use the method below. */ + # ifdef INHIBIT_STRING_HEADER + # if !(defined HAVE_BZERO && defined HAVE_BCOPY) + # if !defined bzero && !defined bcopy + # undef INHIBIT_STRING_HEADER + # endif + # endif + # endif + + /* This is the normal way of making sure we have a bcopy and a bzero. + This is used in most programs--a few other programs avoid this + by defining INHIBIT_STRING_HEADER. */ + # ifndef INHIBIT_STRING_HEADER + # if defined HAVE_STRING_H || defined STDC_HEADERS || defined _LIBC + # include + # ifndef bzero + # ifndef _LIBC + # define bzero(s, n) (memset (s, '\0', n), (s)) + # else + # define bzero(s, n) __bzero (s, n) + # endif + # endif + # else + # include + # ifndef memcmp + # define memcmp(s1, s2, n) bcmp (s1, s2, n) + # endif + # ifndef memcpy + # define memcpy(d, s, n) (bcopy (s, d, n), (d)) + # endif + # endif + # endif + + /* Define the syntax stuff for \<, \>, etc. */ + + /* This must be nonzero for the wordchar and notwordchar pattern + commands in re_match_2. */ + # ifndef Sword + # define Sword 1 + # endif + + # ifdef SWITCH_ENUM_BUG + # define SWITCH_ENUM_CAST(x) ((int)(x)) + # else + # define SWITCH_ENUM_CAST(x) (x) + # endif + + # endif /* not emacs */ + + # if defined _LIBC || HAVE_LIMITS_H + # include + # endif + + # ifndef MB_LEN_MAX + # define MB_LEN_MAX 1 + # endif + + /* Get the interface, including the syntax bits. */ + # include "xregex.h" /* change for libiberty */ + + /* isalpha etc. are used for the character classes. */ + # include + + /* Jim Meyering writes: + + "... Some ctype macros are valid only for character codes that + isascii says are ASCII (SGI's IRIX-4.0.5 is one such system --when + using /bin/cc or gcc but without giving an ansi option). So, all + ctype uses should be through macros like ISPRINT... If + STDC_HEADERS is defined, then autoconf has verified that the ctype + macros don't need to be guarded with references to isascii. ... + Defining isascii to 1 should let any compiler worth its salt + eliminate the && through constant folding." + Solaris defines some of these symbols so we must undefine them first. */ + + # undef ISASCII + # if defined STDC_HEADERS || (!defined isascii && !defined HAVE_ISASCII) + # define ISASCII(c) 1 + # else + # define ISASCII(c) isascii(c) + # endif + + # ifdef isblank + # define ISBLANK(c) (ISASCII (c) && isblank (c)) + # else + # define ISBLANK(c) ((c) == ' ' || (c) == '\t') + # endif + # ifdef isgraph + # define ISGRAPH(c) (ISASCII (c) && isgraph (c)) + # else + # define ISGRAPH(c) (ISASCII (c) && isprint (c) && !isspace (c)) + # endif + + # undef ISPRINT + # define ISPRINT(c) (ISASCII (c) && isprint (c)) + # define ISDIGIT(c) (ISASCII (c) && isdigit (c)) + # define ISALNUM(c) (ISASCII (c) && isalnum (c)) + # define ISALPHA(c) (ISASCII (c) && isalpha (c)) + # define ISCNTRL(c) (ISASCII (c) && iscntrl (c)) + # define ISLOWER(c) (ISASCII (c) && islower (c)) + # define ISPUNCT(c) (ISASCII (c) && ispunct (c)) + # define ISSPACE(c) (ISASCII (c) && isspace (c)) + # define ISUPPER(c) (ISASCII (c) && isupper (c)) + # define ISXDIGIT(c) (ISASCII (c) && isxdigit (c)) + + # ifdef _tolower + # define TOLOWER(c) _tolower(c) + # else + # define TOLOWER(c) tolower(c) + # endif + + # ifndef NULL + # define NULL (void *)0 + # endif + + /* We remove any previous definition of `SIGN_EXTEND_CHAR', + since ours (we hope) works properly with all combinations of + machines, compilers, `char' and `unsigned char' argument types. + (Per Bothner suggested the basic approach.) */ + # undef SIGN_EXTEND_CHAR + # if __STDC__ + # define SIGN_EXTEND_CHAR(c) ((signed char) (c)) + # else /* not __STDC__ */ + /* As in Harbison and Steele. */ + # define SIGN_EXTEND_CHAR(c) ((((unsigned char) (c)) ^ 128) - 128) + # endif + + # ifndef emacs + /* How many characters in the character set. */ + # define CHAR_SET_SIZE 256 + + # ifdef SYNTAX_TABLE + + extern char *re_syntax_table; + + # else /* not SYNTAX_TABLE */ + + static char re_syntax_table[CHAR_SET_SIZE]; + + static void init_syntax_once PARAMS ((void)); + + static void + init_syntax_once () + { + register int c; + static int done = 0; + + if (done) + return; + bzero (re_syntax_table, sizeof re_syntax_table); + + for (c = 0; c < CHAR_SET_SIZE; ++c) + if (ISALNUM (c)) + re_syntax_table[c] = Sword; + + re_syntax_table['_'] = Sword; + + done = 1; + } + + # endif /* not SYNTAX_TABLE */ + + # define SYNTAX(c) re_syntax_table[(unsigned char) (c)] + + # endif /* emacs */ + + /* Integer type for pointers. */ + # if !defined _LIBC && !defined HAVE_UINTPTR_T + typedef unsigned long int uintptr_t; + # endif + + /* Should we use malloc or alloca? If REGEX_MALLOC is not defined, we + use `alloca' instead of `malloc'. This is because using malloc in + re_search* or re_match* could cause memory leaks when C-g is used in + Emacs; also, malloc is slower and causes storage fragmentation. On + the other hand, malloc is more portable, and easier to debug. + + Because we sometimes use alloca, some routines have to be macros, + not functions -- `alloca'-allocated space disappears at the end of the + function it is called in. */ + + # ifdef REGEX_MALLOC + + # define REGEX_ALLOCATE malloc + # define REGEX_REALLOCATE(source, osize, nsize) realloc (source, nsize) + # define REGEX_FREE free + + # else /* not REGEX_MALLOC */ + + /* Emacs already defines alloca, sometimes. */ + # ifndef alloca + + /* Make alloca work the best possible way. */ + # ifdef __GNUC__ + # define alloca __builtin_alloca + # else /* not __GNUC__ */ + # if HAVE_ALLOCA_H + # include + # endif /* HAVE_ALLOCA_H */ + # endif /* not __GNUC__ */ + + # endif /* not alloca */ + + # define REGEX_ALLOCATE alloca + + /* Assumes a `char *destination' variable. */ + # define REGEX_REALLOCATE(source, osize, nsize) \ + (destination = (char *) alloca (nsize), \ + memcpy (destination, source, osize)) + + /* No need to do anything to free, after alloca. */ + # define REGEX_FREE(arg) ((void)0) /* Do nothing! But inhibit gcc warning. */ + + # endif /* not REGEX_MALLOC */ + + /* Define how to allocate the failure stack. */ + + # if defined REL_ALLOC && defined REGEX_MALLOC + + # define REGEX_ALLOCATE_STACK(size) \ + r_alloc (&failure_stack_ptr, (size)) + # define REGEX_REALLOCATE_STACK(source, osize, nsize) \ + r_re_alloc (&failure_stack_ptr, (nsize)) + # define REGEX_FREE_STACK(ptr) \ + r_alloc_free (&failure_stack_ptr) + + # else /* not using relocating allocator */ + + # ifdef REGEX_MALLOC + + # define REGEX_ALLOCATE_STACK malloc + # define REGEX_REALLOCATE_STACK(source, osize, nsize) realloc (source, nsize) + # define REGEX_FREE_STACK free + + # else /* not REGEX_MALLOC */ + + # define REGEX_ALLOCATE_STACK alloca + + # define REGEX_REALLOCATE_STACK(source, osize, nsize) \ + REGEX_REALLOCATE (source, osize, nsize) + /* No need to explicitly free anything. */ + # define REGEX_FREE_STACK(arg) + + # endif /* not REGEX_MALLOC */ + # endif /* not using relocating allocator */ + + + /* True if `size1' is non-NULL and PTR is pointing anywhere inside + `string1' or just past its end. This works if PTR is NULL, which is + a good thing. */ + # define FIRST_STRING_P(ptr) \ + (size1 && string1 <= (ptr) && (ptr) <= string1 + size1) + + /* (Re)Allocate N items of type T using malloc, or fail. */ + # define TALLOC(n, t) ((t *) malloc ((n) * sizeof (t))) + # define RETALLOC(addr, n, t) ((addr) = (t *) realloc (addr, (n) * sizeof (t))) + # define RETALLOC_IF(addr, n, t) \ + if (addr) RETALLOC((addr), (n), t); else (addr) = TALLOC ((n), t) + # define REGEX_TALLOC(n, t) ((t *) REGEX_ALLOCATE ((n) * sizeof (t))) + + # define BYTEWIDTH 8 /* In bits. */ + + # define STREQ(s1, s2) ((strcmp (s1, s2) == 0)) + + # undef MAX + # undef MIN + # define MAX(a, b) ((a) > (b) ? (a) : (b)) + # define MIN(a, b) ((a) < (b) ? (a) : (b)) + + typedef char boolean; + # define false 0 + # define true 1 + + static reg_errcode_t byte_regex_compile _RE_ARGS ((const char *pattern, size_t size, + reg_syntax_t syntax, + struct re_pattern_buffer *bufp)); + + static int byte_re_match_2_internal PARAMS ((struct re_pattern_buffer *bufp, + const char *string1, int size1, + const char *string2, int size2, + int pos, + struct re_registers *regs, + int stop)); + static int byte_re_search_2 PARAMS ((struct re_pattern_buffer *bufp, + const char *string1, int size1, + const char *string2, int size2, + int startpos, int range, + struct re_registers *regs, int stop)); + static int byte_re_compile_fastmap PARAMS ((struct re_pattern_buffer *bufp)); + + #ifdef MBS_SUPPORT + static reg_errcode_t wcs_regex_compile _RE_ARGS ((const char *pattern, size_t size, + reg_syntax_t syntax, + struct re_pattern_buffer *bufp)); + + + static int wcs_re_match_2_internal PARAMS ((struct re_pattern_buffer *bufp, + const char *cstring1, int csize1, + const char *cstring2, int csize2, + int pos, + struct re_registers *regs, + int stop, + wchar_t *string1, int size1, + wchar_t *string2, int size2, + int *mbs_offset1, int *mbs_offset2)); + static int wcs_re_search_2 PARAMS ((struct re_pattern_buffer *bufp, + const char *string1, int size1, + const char *string2, int size2, + int startpos, int range, + struct re_registers *regs, int stop)); + static int wcs_re_compile_fastmap PARAMS ((struct re_pattern_buffer *bufp)); + #endif + + /* These are the command codes that appear in compiled regular + expressions. Some opcodes are followed by argument bytes. A + command code can specify any interpretation whatsoever for its + arguments. Zero bytes may appear in the compiled regular expression. */ + + typedef enum + { + no_op = 0, + + /* Succeed right away--no more backtracking. */ + succeed, + + /* Followed by one byte giving n, then by n literal bytes. */ + exactn, + + # ifdef MBS_SUPPORT + /* Same as exactn, but contains binary data. */ + exactn_bin, + # endif + + /* Matches any (more or less) character. */ + anychar, + + /* Matches any one char belonging to specified set. First + following byte is number of bitmap bytes. Then come bytes + for a bitmap saying which chars are in. Bits in each byte + are ordered low-bit-first. A character is in the set if its + bit is 1. A character too large to have a bit in the map is + automatically not in the set. */ + /* ifdef MBS_SUPPORT, following element is length of character + classes, length of collating symbols, length of equivalence + classes, length of character ranges, and length of characters. + Next, character class element, collating symbols elements, + equivalence class elements, range elements, and character + elements follow. + See regex_compile function. */ + charset, + + /* Same parameters as charset, but match any character that is + not one of those specified. */ + charset_not, + + /* Start remembering the text that is matched, for storing in a + register. Followed by one byte with the register number, in + the range 0 to one less than the pattern buffer's re_nsub + field. Then followed by one byte with the number of groups + inner to this one. (This last has to be part of the + start_memory only because we need it in the on_failure_jump + of re_match_2.) */ + start_memory, + + /* Stop remembering the text that is matched and store it in a + memory register. Followed by one byte with the register + number, in the range 0 to one less than `re_nsub' in the + pattern buffer, and one byte with the number of inner groups, + just like `start_memory'. (We need the number of inner + groups here because we don't have any easy way of finding the + corresponding start_memory when we're at a stop_memory.) */ + stop_memory, + + /* Match a duplicate of something remembered. Followed by one + byte containing the register number. */ + duplicate, + + /* Fail unless at beginning of line. */ + begline, + + /* Fail unless at end of line. */ + endline, + + /* Succeeds if at beginning of buffer (if emacs) or at beginning + of string to be matched (if not). */ + begbuf, + + /* Analogously, for end of buffer/string. */ + endbuf, + + /* Followed by two byte relative address to which to jump. */ + jump, + + /* Same as jump, but marks the end of an alternative. */ + jump_past_alt, + + /* Followed by two-byte relative address of place to resume at + in case of failure. */ + /* ifdef MBS_SUPPORT, the size of address is 1. */ + on_failure_jump, + + /* Like on_failure_jump, but pushes a placeholder instead of the + current string position when executed. */ + on_failure_keep_string_jump, + + /* Throw away latest failure point and then jump to following + two-byte relative address. */ + /* ifdef MBS_SUPPORT, the size of address is 1. */ + pop_failure_jump, + + /* Change to pop_failure_jump if know won't have to backtrack to + match; otherwise change to jump. This is used to jump + back to the beginning of a repeat. If what follows this jump + clearly won't match what the repeat does, such that we can be + sure that there is no use backtracking out of repetitions + already matched, then we change it to a pop_failure_jump. + Followed by two-byte address. */ + /* ifdef MBS_SUPPORT, the size of address is 1. */ + maybe_pop_jump, + + /* Jump to following two-byte address, and push a dummy failure + point. This failure point will be thrown away if an attempt + is made to use it for a failure. A `+' construct makes this + before the first repeat. Also used as an intermediary kind + of jump when compiling an alternative. */ + /* ifdef MBS_SUPPORT, the size of address is 1. */ + dummy_failure_jump, + + /* Push a dummy failure point and continue. Used at the end of + alternatives. */ + push_dummy_failure, + + /* Followed by two-byte relative address and two-byte number n. + After matching N times, jump to the address upon failure. */ + /* ifdef MBS_SUPPORT, the size of address is 1. */ + succeed_n, + + /* Followed by two-byte relative address, and two-byte number n. + Jump to the address N times, then fail. */ + /* ifdef MBS_SUPPORT, the size of address is 1. */ + jump_n, + + /* Set the following two-byte relative address to the + subsequent two-byte number. The address *includes* the two + bytes of number. */ + /* ifdef MBS_SUPPORT, the size of address is 1. */ + set_number_at, + + wordchar, /* Matches any word-constituent character. */ + notwordchar, /* Matches any char that is not a word-constituent. */ + + wordbeg, /* Succeeds if at word beginning. */ + wordend, /* Succeeds if at word end. */ + + wordbound, /* Succeeds if at a word boundary. */ + notwordbound /* Succeeds if not at a word boundary. */ + + # ifdef emacs + ,before_dot, /* Succeeds if before point. */ + at_dot, /* Succeeds if at point. */ + after_dot, /* Succeeds if after point. */ + + /* Matches any character whose syntax is specified. Followed by + a byte which contains a syntax code, e.g., Sword. */ + syntaxspec, + + /* Matches any character whose syntax is not that specified. */ + notsyntaxspec + # endif /* emacs */ + } re_opcode_t; + #endif /* not INSIDE_RECURSION */ + + + #ifdef BYTE + # define CHAR_T char + # define UCHAR_T unsigned char + # define COMPILED_BUFFER_VAR bufp->buffer + # define OFFSET_ADDRESS_SIZE 2 + # if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE) + # define PREFIX(name) byte_##name + # else + # define PREFIX(name) byte_/**/name + # endif + # define ARG_PREFIX(name) name + # define PUT_CHAR(c) putchar (c) + #else + # ifdef WCHAR + # define CHAR_T wchar_t + # define UCHAR_T wchar_t + # define COMPILED_BUFFER_VAR wc_buffer + # define OFFSET_ADDRESS_SIZE 1 /* the size which STORE_NUMBER macro use */ + # define CHAR_CLASS_SIZE ((__alignof__(wctype_t)+sizeof(wctype_t))/sizeof(CHAR_T)+1) + # if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE) + # define PREFIX(name) wcs_##name + # define ARG_PREFIX(name) c##name + # else + # define PREFIX(name) wcs_/**/name + # define ARG_PREFIX(name) c/**/name + # endif + /* Should we use wide stream?? */ + # define PUT_CHAR(c) printf ("%C", c); + # define TRUE 1 + # define FALSE 0 + # else + # ifdef MBS_SUPPORT + # define WCHAR + # define INSIDE_RECURSION + # include "regex.c" + # undef INSIDE_RECURSION + # endif + # define BYTE + # define INSIDE_RECURSION + # include "regex.c" + # undef INSIDE_RECURSION + # endif + #endif + + #ifdef INSIDE_RECURSION + /* Common operations on the compiled pattern. */ + + /* Store NUMBER in two contiguous bytes starting at DESTINATION. */ + /* ifdef MBS_SUPPORT, we store NUMBER in 1 element. */ + + # ifdef WCHAR + # define STORE_NUMBER(destination, number) \ + do { \ + *(destination) = (UCHAR_T)(number); \ + } while (0) + # else /* BYTE */ + # define STORE_NUMBER(destination, number) \ + do { \ + (destination)[0] = (number) & 0377; \ + (destination)[1] = (number) >> 8; \ + } while (0) + # endif /* WCHAR */ + + /* Same as STORE_NUMBER, except increment DESTINATION to + the byte after where the number is stored. Therefore, DESTINATION + must be an lvalue. */ + /* ifdef MBS_SUPPORT, we store NUMBER in 1 element. */ + + # define STORE_NUMBER_AND_INCR(destination, number) \ + do { \ + STORE_NUMBER (destination, number); \ + (destination) += OFFSET_ADDRESS_SIZE; \ + } while (0) + + /* Put into DESTINATION a number stored in two contiguous bytes starting + at SOURCE. */ + /* ifdef MBS_SUPPORT, we store NUMBER in 1 element. */ + + # ifdef WCHAR + # define EXTRACT_NUMBER(destination, source) \ + do { \ + (destination) = *(source); \ + } while (0) + # else /* BYTE */ + # define EXTRACT_NUMBER(destination, source) \ + do { \ + (destination) = *(source) & 0377; \ + (destination) += SIGN_EXTEND_CHAR (*((source) + 1)) << 8; \ + } while (0) + # endif + + # ifdef DEBUG + static void PREFIX(extract_number) _RE_ARGS ((int *dest, UCHAR_T *source)); + static void + PREFIX(extract_number) (dest, source) + int *dest; + UCHAR_T *source; + { + # ifdef WCHAR + *dest = *source; + # else /* BYTE */ + int temp = SIGN_EXTEND_CHAR (*(source + 1)); + *dest = *source & 0377; + *dest += temp << 8; + # endif + } + + # ifndef EXTRACT_MACROS /* To debug the macros. */ + # undef EXTRACT_NUMBER + # define EXTRACT_NUMBER(dest, src) PREFIX(extract_number) (&dest, src) + # endif /* not EXTRACT_MACROS */ + + # endif /* DEBUG */ + + /* Same as EXTRACT_NUMBER, except increment SOURCE to after the number. + SOURCE must be an lvalue. */ + + # define EXTRACT_NUMBER_AND_INCR(destination, source) \ + do { \ + EXTRACT_NUMBER (destination, source); \ + (source) += OFFSET_ADDRESS_SIZE; \ + } while (0) + + # ifdef DEBUG + static void PREFIX(extract_number_and_incr) _RE_ARGS ((int *destination, + UCHAR_T **source)); + static void + PREFIX(extract_number_and_incr) (destination, source) + int *destination; + UCHAR_T **source; + { + PREFIX(extract_number) (destination, *source); + *source += OFFSET_ADDRESS_SIZE; + } + + # ifndef EXTRACT_MACROS + # undef EXTRACT_NUMBER_AND_INCR + # define EXTRACT_NUMBER_AND_INCR(dest, src) \ + PREFIX(extract_number_and_incr) (&dest, &src) + # endif /* not EXTRACT_MACROS */ + + # endif /* DEBUG */ + + + + /* If DEBUG is defined, Regex prints many voluminous messages about what + it is doing (if the variable `debug' is nonzero). If linked with the + main program in `iregex.c', you can enter patterns and strings + interactively. And if linked with the main program in `main.c' and + the other test files, you can run the already-written tests. */ + + # ifdef DEBUG + + # ifndef DEFINED_ONCE + + /* We use standard I/O for debugging. */ + # include + + /* It is useful to test things that ``must'' be true when debugging. */ + # include + + static int debug; + + # define DEBUG_STATEMENT(e) e + # define DEBUG_PRINT1(x) if (debug) printf (x) + # define DEBUG_PRINT2(x1, x2) if (debug) printf (x1, x2) + # define DEBUG_PRINT3(x1, x2, x3) if (debug) printf (x1, x2, x3) + # define DEBUG_PRINT4(x1, x2, x3, x4) if (debug) printf (x1, x2, x3, x4) + # endif /* not DEFINED_ONCE */ + + # define DEBUG_PRINT_COMPILED_PATTERN(p, s, e) \ + if (debug) PREFIX(print_partial_compiled_pattern) (s, e) + # define DEBUG_PRINT_DOUBLE_STRING(w, s1, sz1, s2, sz2) \ + if (debug) PREFIX(print_double_string) (w, s1, sz1, s2, sz2) + + + /* Print the fastmap in human-readable form. */ + + # ifndef DEFINED_ONCE + void + print_fastmap (fastmap) + char *fastmap; + { + unsigned was_a_range = 0; + unsigned i = 0; + + while (i < (1 << BYTEWIDTH)) + { + if (fastmap[i++]) + { + was_a_range = 0; + putchar (i - 1); + while (i < (1 << BYTEWIDTH) && fastmap[i]) + { + was_a_range = 1; + i++; + } + if (was_a_range) + { + printf ("-"); + putchar (i - 1); + } + } + } + putchar ('\n'); + } + # endif /* not DEFINED_ONCE */ + + + /* Print a compiled pattern string in human-readable form, starting at + the START pointer into it and ending just before the pointer END. */ + + void + PREFIX(print_partial_compiled_pattern) (start, end) + UCHAR_T *start; + UCHAR_T *end; + { + int mcnt, mcnt2; + UCHAR_T *p1; + UCHAR_T *p = start; + UCHAR_T *pend = end; + + if (start == NULL) + { + printf ("(null)\n"); + return; + } + + /* Loop over pattern commands. */ + while (p < pend) + { + # ifdef _LIBC + printf ("%td:\t", p - start); + # else + printf ("%ld:\t", (long int) (p - start)); + # endif + + switch ((re_opcode_t) *p++) + { + case no_op: + printf ("/no_op"); + break; + + case exactn: + mcnt = *p++; + printf ("/exactn/%d", mcnt); + do + { + putchar ('/'); + PUT_CHAR (*p++); + } + while (--mcnt); + break; + + # ifdef MBS_SUPPORT + case exactn_bin: + mcnt = *p++; + printf ("/exactn_bin/%d", mcnt); + do + { + printf("/%lx", (long int) *p++); + } + while (--mcnt); + break; + # endif /* MBS_SUPPORT */ + + case start_memory: + mcnt = *p++; + printf ("/start_memory/%d/%ld", mcnt, (long int) *p++); + break; + + case stop_memory: + mcnt = *p++; + printf ("/stop_memory/%d/%ld", mcnt, (long int) *p++); + break; + + case duplicate: + printf ("/duplicate/%ld", (long int) *p++); + break; + + case anychar: + printf ("/anychar"); + break; + + case charset: + case charset_not: + { + # ifdef WCHAR + int i, length; + wchar_t *workp = p; + printf ("/charset [%s", + (re_opcode_t) *(workp - 1) == charset_not ? "^" : ""); + p += 5; + length = *workp++; /* the length of char_classes */ + for (i=0 ; ibuffer; + + PREFIX(print_partial_compiled_pattern) (buffer, buffer + + bufp->used / sizeof(UCHAR_T)); + printf ("%ld bytes used/%ld bytes allocated.\n", + bufp->used, bufp->allocated); + + if (bufp->fastmap_accurate && bufp->fastmap) + { + printf ("fastmap: "); + print_fastmap (bufp->fastmap); + } + + # ifdef _LIBC + printf ("re_nsub: %Zd\t", bufp->re_nsub); + # else + printf ("re_nsub: %ld\t", (long int) bufp->re_nsub); + # endif + printf ("regs_alloc: %d\t", bufp->regs_allocated); + printf ("can_be_null: %d\t", bufp->can_be_null); + printf ("newline_anchor: %d\n", bufp->newline_anchor); + printf ("no_sub: %d\t", bufp->no_sub); + printf ("not_bol: %d\t", bufp->not_bol); + printf ("not_eol: %d\t", bufp->not_eol); + printf ("syntax: %lx\n", bufp->syntax); + /* Perhaps we should print the translate table? */ + } + + + void + PREFIX(print_double_string) (where, string1, size1, string2, size2) + const CHAR_T *where; + const CHAR_T *string1; + const CHAR_T *string2; + int size1; + int size2; + { + int this_char; + + if (where == NULL) + printf ("(null)"); + else + { + int cnt; + + if (FIRST_STRING_P (where)) + { + for (this_char = where - string1; this_char < size1; this_char++) + PUT_CHAR (string1[this_char]); + + where = string2; + } + + cnt = 0; + for (this_char = where - string2; this_char < size2; this_char++) + { + PUT_CHAR (string2[this_char]); + if (++cnt > 100) + { + fputs ("...", stdout); + break; + } + } + } + } + + # ifndef DEFINED_ONCE + void + printchar (c) + int c; + { + putc (c, stderr); + } + # endif + + # else /* not DEBUG */ + + # ifndef DEFINED_ONCE + # undef assert + # define assert(e) + + # define DEBUG_STATEMENT(e) + # define DEBUG_PRINT1(x) + # define DEBUG_PRINT2(x1, x2) + # define DEBUG_PRINT3(x1, x2, x3) + # define DEBUG_PRINT4(x1, x2, x3, x4) + # endif /* not DEFINED_ONCE */ + # define DEBUG_PRINT_COMPILED_PATTERN(p, s, e) + # define DEBUG_PRINT_DOUBLE_STRING(w, s1, sz1, s2, sz2) + + # endif /* not DEBUG */ + + + + # ifdef WCHAR + /* This convert a multibyte string to a wide character string. + And write their correspondances to offset_buffer(see below) + and write whether each wchar_t is binary data to is_binary. + This assume invalid multibyte sequences as binary data. + We assume offset_buffer and is_binary is already allocated + enough space. */ + + static size_t convert_mbs_to_wcs (CHAR_T *dest, const unsigned char* src, + size_t len, int *offset_buffer, + char *is_binary); + static size_t + convert_mbs_to_wcs (dest, src, len, offset_buffer, is_binary) + CHAR_T *dest; + const unsigned char* src; + size_t len; /* the length of multibyte string. */ + + /* It hold correspondances between src(char string) and + dest(wchar_t string) for optimization. + e.g. src = "xxxyzz" + dest = {'X', 'Y', 'Z'} + (each "xxx", "y" and "zz" represent one multibyte character + corresponding to 'X', 'Y' and 'Z'.) + offset_buffer = {0, 0+3("xxx"), 0+3+1("y"), 0+3+1+2("zz")} + = {0, 3, 4, 6} + */ + int *offset_buffer; + char *is_binary; + { + wchar_t *pdest = dest; + const unsigned char *psrc = src; + size_t wc_count = 0; + + mbstate_t mbs; + int i, consumed; + size_t mb_remain = len; + size_t mb_count = 0; + + /* Initialize the conversion state. */ + memset (&mbs, 0, sizeof (mbstate_t)); + + offset_buffer[0] = 0; + for( ; mb_remain > 0 ; ++wc_count, ++pdest, mb_remain -= consumed, + psrc += consumed) + { + #ifdef _LIBC + consumed = __mbrtowc (pdest, psrc, mb_remain, &mbs); + #else + consumed = mbrtowc (pdest, psrc, mb_remain, &mbs); + #endif + + if (consumed <= 0) + /* failed to convert. maybe src contains binary data. + So we consume 1 byte manualy. */ + { + *pdest = *psrc; + consumed = 1; + is_binary[wc_count] = TRUE; + } + else + is_binary[wc_count] = FALSE; + /* In sjis encoding, we use yen sign as escape character in + place of reverse solidus. So we convert 0x5c(yen sign in + sjis) to not 0xa5(yen sign in UCS2) but 0x5c(reverse + solidus in UCS2). */ + if (consumed == 1 && (int) *psrc == 0x5c && (int) *pdest == 0xa5) + *pdest = (wchar_t) *psrc; + + offset_buffer[wc_count + 1] = mb_count += consumed; + } + + /* Fill remain of the buffer with sentinel. */ + for (i = wc_count + 1 ; i <= len ; i++) + offset_buffer[i] = mb_count + 1; + + return wc_count; + } + + # endif /* WCHAR */ + + #else /* not INSIDE_RECURSION */ + + /* Set by `re_set_syntax' to the current regexp syntax to recognize. Can + also be assigned to arbitrarily: each pattern buffer stores its own + syntax, so it can be changed between regex compilations. */ + /* This has no initializer because initialized variables in Emacs + become read-only after dumping. */ + reg_syntax_t re_syntax_options; + + + /* Specify the precise syntax of regexps for compilation. This provides + for compatibility for various utilities which historically have + different, incompatible syntaxes. + + The argument SYNTAX is a bit mask comprised of the various bits + defined in regex.h. We return the old syntax. */ + + reg_syntax_t + re_set_syntax (syntax) + reg_syntax_t syntax; + { + reg_syntax_t ret = re_syntax_options; + + re_syntax_options = syntax; + # ifdef DEBUG + if (syntax & RE_DEBUG) + debug = 1; + else if (debug) /* was on but now is not */ + debug = 0; + # endif /* DEBUG */ + return ret; + } + # ifdef _LIBC + weak_alias (__re_set_syntax, re_set_syntax) + # endif + + /* This table gives an error message for each of the error codes listed + in regex.h. Obviously the order here has to be same as there. + POSIX doesn't require that we do anything for REG_NOERROR, + but why not be nice? */ + + static const char re_error_msgid[] = + { + # define REG_NOERROR_IDX 0 + gettext_noop ("Success") /* REG_NOERROR */ + "\0" + # define REG_NOMATCH_IDX (REG_NOERROR_IDX + sizeof "Success") + gettext_noop ("No match") /* REG_NOMATCH */ + "\0" + # define REG_BADPAT_IDX (REG_NOMATCH_IDX + sizeof "No match") + gettext_noop ("Invalid regular expression") /* REG_BADPAT */ + "\0" + # define REG_ECOLLATE_IDX (REG_BADPAT_IDX + sizeof "Invalid regular expression") + gettext_noop ("Invalid collation character") /* REG_ECOLLATE */ + "\0" + # define REG_ECTYPE_IDX (REG_ECOLLATE_IDX + sizeof "Invalid collation character") + gettext_noop ("Invalid character class name") /* REG_ECTYPE */ + "\0" + # define REG_EESCAPE_IDX (REG_ECTYPE_IDX + sizeof "Invalid character class name") + gettext_noop ("Trailing backslash") /* REG_EESCAPE */ + "\0" + # define REG_ESUBREG_IDX (REG_EESCAPE_IDX + sizeof "Trailing backslash") + gettext_noop ("Invalid back reference") /* REG_ESUBREG */ + "\0" + # define REG_EBRACK_IDX (REG_ESUBREG_IDX + sizeof "Invalid back reference") + gettext_noop ("Unmatched [ or [^") /* REG_EBRACK */ + "\0" + # define REG_EPAREN_IDX (REG_EBRACK_IDX + sizeof "Unmatched [ or [^") + gettext_noop ("Unmatched ( or \\(") /* REG_EPAREN */ + "\0" + # define REG_EBRACE_IDX (REG_EPAREN_IDX + sizeof "Unmatched ( or \\(") + gettext_noop ("Unmatched \\{") /* REG_EBRACE */ + "\0" + # define REG_BADBR_IDX (REG_EBRACE_IDX + sizeof "Unmatched \\{") + gettext_noop ("Invalid content of \\{\\}") /* REG_BADBR */ + "\0" + # define REG_ERANGE_IDX (REG_BADBR_IDX + sizeof "Invalid content of \\{\\}") + gettext_noop ("Invalid range end") /* REG_ERANGE */ + "\0" + # define REG_ESPACE_IDX (REG_ERANGE_IDX + sizeof "Invalid range end") + gettext_noop ("Memory exhausted") /* REG_ESPACE */ + "\0" + # define REG_BADRPT_IDX (REG_ESPACE_IDX + sizeof "Memory exhausted") + gettext_noop ("Invalid preceding regular expression") /* REG_BADRPT */ + "\0" + # define REG_EEND_IDX (REG_BADRPT_IDX + sizeof "Invalid preceding regular expression") + gettext_noop ("Premature end of regular expression") /* REG_EEND */ + "\0" + # define REG_ESIZE_IDX (REG_EEND_IDX + sizeof "Premature end of regular expression") + gettext_noop ("Regular expression too big") /* REG_ESIZE */ + "\0" + # define REG_ERPAREN_IDX (REG_ESIZE_IDX + sizeof "Regular expression too big") + gettext_noop ("Unmatched ) or \\)") /* REG_ERPAREN */ + }; + + static const size_t re_error_msgid_idx[] = + { + REG_NOERROR_IDX, + REG_NOMATCH_IDX, + REG_BADPAT_IDX, + REG_ECOLLATE_IDX, + REG_ECTYPE_IDX, + REG_EESCAPE_IDX, + REG_ESUBREG_IDX, + REG_EBRACK_IDX, + REG_EPAREN_IDX, + REG_EBRACE_IDX, + REG_BADBR_IDX, + REG_ERANGE_IDX, + REG_ESPACE_IDX, + REG_BADRPT_IDX, + REG_EEND_IDX, + REG_ESIZE_IDX, + REG_ERPAREN_IDX + }; + + #endif /* INSIDE_RECURSION */ + + #ifndef DEFINED_ONCE + /* Avoiding alloca during matching, to placate r_alloc. */ + + /* Define MATCH_MAY_ALLOCATE unless we need to make sure that the + searching and matching functions should not call alloca. On some + systems, alloca is implemented in terms of malloc, and if we're + using the relocating allocator routines, then malloc could cause a + relocation, which might (if the strings being searched are in the + ralloc heap) shift the data out from underneath the regexp + routines. + + Here's another reason to avoid allocation: Emacs + processes input from X in a signal handler; processing X input may + call malloc; if input arrives while a matching routine is calling + malloc, then we're scrod. But Emacs can't just block input while + calling matching routines; then we don't notice interrupts when + they come in. So, Emacs blocks input around all regexp calls + except the matching calls, which it leaves unprotected, in the + faith that they will not malloc. */ + + /* Normally, this is fine. */ + # define MATCH_MAY_ALLOCATE + + /* When using GNU C, we are not REALLY using the C alloca, no matter + what config.h may say. So don't take precautions for it. */ + # ifdef __GNUC__ + # undef C_ALLOCA + # endif + + /* The match routines may not allocate if (1) they would do it with malloc + and (2) it's not safe for them to use malloc. + Note that if REL_ALLOC is defined, matching would not use malloc for the + failure stack, but we would still use it for the register vectors; + so REL_ALLOC should not affect this. */ + # if (defined C_ALLOCA || defined REGEX_MALLOC) && defined emacs + # undef MATCH_MAY_ALLOCATE + # endif + #endif /* not DEFINED_ONCE */ + + #ifdef INSIDE_RECURSION + /* Failure stack declarations and macros; both re_compile_fastmap and + re_match_2 use a failure stack. These have to be macros because of + REGEX_ALLOCATE_STACK. */ + + + /* Number of failure points for which to initially allocate space + when matching. If this number is exceeded, we allocate more + space, so it is not a hard limit. */ + # ifndef INIT_FAILURE_ALLOC + # define INIT_FAILURE_ALLOC 5 + # endif + + /* Roughly the maximum number of failure points on the stack. Would be + exactly that if always used MAX_FAILURE_ITEMS items each time we failed. + This is a variable only so users of regex can assign to it; we never + change it ourselves. */ + + # ifdef INT_IS_16BIT + + # ifndef DEFINED_ONCE + # if defined MATCH_MAY_ALLOCATE + /* 4400 was enough to cause a crash on Alpha OSF/1, + whose default stack limit is 2mb. */ + long int re_max_failures = 4000; + # else + long int re_max_failures = 2000; + # endif + # endif + + union PREFIX(fail_stack_elt) + { + UCHAR_T *pointer; + long int integer; + }; + + typedef union PREFIX(fail_stack_elt) PREFIX(fail_stack_elt_t); + + typedef struct + { + PREFIX(fail_stack_elt_t) *stack; + unsigned long int size; + unsigned long int avail; /* Offset of next open position. */ + } PREFIX(fail_stack_type); + + # else /* not INT_IS_16BIT */ + + # ifndef DEFINED_ONCE + # if defined MATCH_MAY_ALLOCATE + /* 4400 was enough to cause a crash on Alpha OSF/1, + whose default stack limit is 2mb. */ + int re_max_failures = 4000; + # else + int re_max_failures = 2000; + # endif + # endif + + union PREFIX(fail_stack_elt) + { + UCHAR_T *pointer; + int integer; + }; + + typedef union PREFIX(fail_stack_elt) PREFIX(fail_stack_elt_t); + + typedef struct + { + PREFIX(fail_stack_elt_t) *stack; + unsigned size; + unsigned avail; /* Offset of next open position. */ + } PREFIX(fail_stack_type); + + # endif /* INT_IS_16BIT */ + + # ifndef DEFINED_ONCE + # define FAIL_STACK_EMPTY() (fail_stack.avail == 0) + # define FAIL_STACK_PTR_EMPTY() (fail_stack_ptr->avail == 0) + # define FAIL_STACK_FULL() (fail_stack.avail == fail_stack.size) + # endif + + + /* Define macros to initialize and free the failure stack. + Do `return -2' if the alloc fails. */ + + # ifdef MATCH_MAY_ALLOCATE + # define INIT_FAIL_STACK() \ + do { \ + fail_stack.stack = (PREFIX(fail_stack_elt_t) *) \ + REGEX_ALLOCATE_STACK (INIT_FAILURE_ALLOC * sizeof (PREFIX(fail_stack_elt_t))); \ + \ + if (fail_stack.stack == NULL) \ + return -2; \ + \ + fail_stack.size = INIT_FAILURE_ALLOC; \ + fail_stack.avail = 0; \ + } while (0) + + # define RESET_FAIL_STACK() REGEX_FREE_STACK (fail_stack.stack) + # else + # define INIT_FAIL_STACK() \ + do { \ + fail_stack.avail = 0; \ + } while (0) + + # define RESET_FAIL_STACK() + # endif + + + /* Double the size of FAIL_STACK, up to approximately `re_max_failures' items. + + Return 1 if succeeds, and 0 if either ran out of memory + allocating space for it or it was already too large. + + REGEX_REALLOCATE_STACK requires `destination' be declared. */ + + # define DOUBLE_FAIL_STACK(fail_stack) \ + ((fail_stack).size > (unsigned) (re_max_failures * MAX_FAILURE_ITEMS) \ + ? 0 \ + : ((fail_stack).stack = (PREFIX(fail_stack_elt_t) *) \ + REGEX_REALLOCATE_STACK ((fail_stack).stack, \ + (fail_stack).size * sizeof (PREFIX(fail_stack_elt_t)), \ + ((fail_stack).size << 1) * sizeof (PREFIX(fail_stack_elt_t))),\ + \ + (fail_stack).stack == NULL \ + ? 0 \ + : ((fail_stack).size <<= 1, \ + 1))) + + + /* Push pointer POINTER on FAIL_STACK. + Return 1 if was able to do so and 0 if ran out of memory allocating + space to do so. */ + # define PUSH_PATTERN_OP(POINTER, FAIL_STACK) \ + ((FAIL_STACK_FULL () \ + && !DOUBLE_FAIL_STACK (FAIL_STACK)) \ + ? 0 \ + : ((FAIL_STACK).stack[(FAIL_STACK).avail++].pointer = POINTER, \ + 1)) + + /* Push a pointer value onto the failure stack. + Assumes the variable `fail_stack'. Probably should only + be called from within `PUSH_FAILURE_POINT'. */ + # define PUSH_FAILURE_POINTER(item) \ + fail_stack.stack[fail_stack.avail++].pointer = (UCHAR_T *) (item) + + /* This pushes an integer-valued item onto the failure stack. + Assumes the variable `fail_stack'. Probably should only + be called from within `PUSH_FAILURE_POINT'. */ + # define PUSH_FAILURE_INT(item) \ + fail_stack.stack[fail_stack.avail++].integer = (item) + + /* Push a fail_stack_elt_t value onto the failure stack. + Assumes the variable `fail_stack'. Probably should only + be called from within `PUSH_FAILURE_POINT'. */ + # define PUSH_FAILURE_ELT(item) \ + fail_stack.stack[fail_stack.avail++] = (item) + + /* These three POP... operations complement the three PUSH... operations. + All assume that `fail_stack' is nonempty. */ + # define POP_FAILURE_POINTER() fail_stack.stack[--fail_stack.avail].pointer + # define POP_FAILURE_INT() fail_stack.stack[--fail_stack.avail].integer + # define POP_FAILURE_ELT() fail_stack.stack[--fail_stack.avail] + + /* Used to omit pushing failure point id's when we're not debugging. */ + # ifdef DEBUG + # define DEBUG_PUSH PUSH_FAILURE_INT + # define DEBUG_POP(item_addr) *(item_addr) = POP_FAILURE_INT () + # else + # define DEBUG_PUSH(item) + # define DEBUG_POP(item_addr) + # endif + + + /* Push the information about the state we will need + if we ever fail back to it. + + Requires variables fail_stack, regstart, regend, reg_info, and + num_regs_pushed be declared. DOUBLE_FAIL_STACK requires `destination' + be declared. + + Does `return FAILURE_CODE' if runs out of memory. */ + + # define PUSH_FAILURE_POINT(pattern_place, string_place, failure_code) \ + do { \ + char *destination; \ + /* Must be int, so when we don't save any registers, the arithmetic \ + of 0 + -1 isn't done as unsigned. */ \ + /* Can't be int, since there is not a shred of a guarantee that int \ + is wide enough to hold a value of something to which pointer can \ + be assigned */ \ + active_reg_t this_reg; \ + \ + DEBUG_STATEMENT (failure_id++); \ + DEBUG_STATEMENT (nfailure_points_pushed++); \ + DEBUG_PRINT2 ("\nPUSH_FAILURE_POINT #%u:\n", failure_id); \ + DEBUG_PRINT2 (" Before push, next avail: %d\n", (fail_stack).avail);\ + DEBUG_PRINT2 (" size: %d\n", (fail_stack).size);\ + \ + DEBUG_PRINT2 (" slots needed: %ld\n", NUM_FAILURE_ITEMS); \ + DEBUG_PRINT2 (" available: %d\n", REMAINING_AVAIL_SLOTS); \ + \ + /* Ensure we have enough space allocated for what we will push. */ \ + while (REMAINING_AVAIL_SLOTS < NUM_FAILURE_ITEMS) \ + { \ + if (!DOUBLE_FAIL_STACK (fail_stack)) \ + return failure_code; \ + \ + DEBUG_PRINT2 ("\n Doubled stack; size now: %d\n", \ + (fail_stack).size); \ + DEBUG_PRINT2 (" slots available: %d\n", REMAINING_AVAIL_SLOTS);\ + } \ + \ + /* Push the info, starting with the registers. */ \ + DEBUG_PRINT1 ("\n"); \ + \ + if (1) \ + for (this_reg = lowest_active_reg; this_reg <= highest_active_reg; \ + this_reg++) \ + { \ + DEBUG_PRINT2 (" Pushing reg: %lu\n", this_reg); \ + DEBUG_STATEMENT (num_regs_pushed++); \ + \ + DEBUG_PRINT2 (" start: %p\n", regstart[this_reg]); \ + PUSH_FAILURE_POINTER (regstart[this_reg]); \ + \ + DEBUG_PRINT2 (" end: %p\n", regend[this_reg]); \ + PUSH_FAILURE_POINTER (regend[this_reg]); \ + \ + DEBUG_PRINT2 (" info: %p\n ", \ + reg_info[this_reg].word.pointer); \ + DEBUG_PRINT2 (" match_null=%d", \ + REG_MATCH_NULL_STRING_P (reg_info[this_reg])); \ + DEBUG_PRINT2 (" active=%d", IS_ACTIVE (reg_info[this_reg])); \ + DEBUG_PRINT2 (" matched_something=%d", \ + MATCHED_SOMETHING (reg_info[this_reg])); \ + DEBUG_PRINT2 (" ever_matched=%d", \ + EVER_MATCHED_SOMETHING (reg_info[this_reg])); \ + DEBUG_PRINT1 ("\n"); \ + PUSH_FAILURE_ELT (reg_info[this_reg].word); \ + } \ + \ + DEBUG_PRINT2 (" Pushing low active reg: %ld\n", lowest_active_reg);\ + PUSH_FAILURE_INT (lowest_active_reg); \ + \ + DEBUG_PRINT2 (" Pushing high active reg: %ld\n", highest_active_reg);\ + PUSH_FAILURE_INT (highest_active_reg); \ + \ + DEBUG_PRINT2 (" Pushing pattern %p:\n", pattern_place); \ + DEBUG_PRINT_COMPILED_PATTERN (bufp, pattern_place, pend); \ + PUSH_FAILURE_POINTER (pattern_place); \ + \ + DEBUG_PRINT2 (" Pushing string %p: `", string_place); \ + DEBUG_PRINT_DOUBLE_STRING (string_place, string1, size1, string2, \ + size2); \ + DEBUG_PRINT1 ("'\n"); \ + PUSH_FAILURE_POINTER (string_place); \ + \ + DEBUG_PRINT2 (" Pushing failure id: %u\n", failure_id); \ + DEBUG_PUSH (failure_id); \ + } while (0) + + # ifndef DEFINED_ONCE + /* This is the number of items that are pushed and popped on the stack + for each register. */ + # define NUM_REG_ITEMS 3 + + /* Individual items aside from the registers. */ + # ifdef DEBUG + # define NUM_NONREG_ITEMS 5 /* Includes failure point id. */ + # else + # define NUM_NONREG_ITEMS 4 + # endif + + /* We push at most this many items on the stack. */ + /* We used to use (num_regs - 1), which is the number of registers + this regexp will save; but that was changed to 5 + to avoid stack overflow for a regexp with lots of parens. */ + # define MAX_FAILURE_ITEMS (5 * NUM_REG_ITEMS + NUM_NONREG_ITEMS) + + /* We actually push this many items. */ + # define NUM_FAILURE_ITEMS \ + (((0 \ + ? 0 : highest_active_reg - lowest_active_reg + 1) \ + * NUM_REG_ITEMS) \ + + NUM_NONREG_ITEMS) + + /* How many items can still be added to the stack without overflowing it. */ + # define REMAINING_AVAIL_SLOTS ((fail_stack).size - (fail_stack).avail) + # endif /* not DEFINED_ONCE */ + + + /* Pops what PUSH_FAIL_STACK pushes. + + We restore into the parameters, all of which should be lvalues: + STR -- the saved data position. + PAT -- the saved pattern position. + LOW_REG, HIGH_REG -- the highest and lowest active registers. + REGSTART, REGEND -- arrays of string positions. + REG_INFO -- array of information about each subexpression. + + Also assumes the variables `fail_stack' and (if debugging), `bufp', + `pend', `string1', `size1', `string2', and `size2'. */ + # define POP_FAILURE_POINT(str, pat, low_reg, high_reg, regstart, regend, reg_info)\ + { \ + DEBUG_STATEMENT (unsigned failure_id;) \ + active_reg_t this_reg; \ + const UCHAR_T *string_temp; \ + \ + assert (!FAIL_STACK_EMPTY ()); \ + \ + /* Remove failure points and point to how many regs pushed. */ \ + DEBUG_PRINT1 ("POP_FAILURE_POINT:\n"); \ + DEBUG_PRINT2 (" Before pop, next avail: %d\n", fail_stack.avail); \ + DEBUG_PRINT2 (" size: %d\n", fail_stack.size); \ + \ + assert (fail_stack.avail >= NUM_NONREG_ITEMS); \ + \ + DEBUG_POP (&failure_id); \ + DEBUG_PRINT2 (" Popping failure id: %u\n", failure_id); \ + \ + /* If the saved string location is NULL, it came from an \ + on_failure_keep_string_jump opcode, and we want to throw away the \ + saved NULL, thus retaining our current position in the string. */ \ + string_temp = POP_FAILURE_POINTER (); \ + if (string_temp != NULL) \ + str = (const CHAR_T *) string_temp; \ + \ + DEBUG_PRINT2 (" Popping string %p: `", str); \ + DEBUG_PRINT_DOUBLE_STRING (str, string1, size1, string2, size2); \ + DEBUG_PRINT1 ("'\n"); \ + \ + pat = (UCHAR_T *) POP_FAILURE_POINTER (); \ + DEBUG_PRINT2 (" Popping pattern %p:\n", pat); \ + DEBUG_PRINT_COMPILED_PATTERN (bufp, pat, pend); \ + \ + /* Restore register info. */ \ + high_reg = (active_reg_t) POP_FAILURE_INT (); \ + DEBUG_PRINT2 (" Popping high active reg: %ld\n", high_reg); \ + \ + low_reg = (active_reg_t) POP_FAILURE_INT (); \ + DEBUG_PRINT2 (" Popping low active reg: %ld\n", low_reg); \ + \ + if (1) \ + for (this_reg = high_reg; this_reg >= low_reg; this_reg--) \ + { \ + DEBUG_PRINT2 (" Popping reg: %ld\n", this_reg); \ + \ + reg_info[this_reg].word = POP_FAILURE_ELT (); \ + DEBUG_PRINT2 (" info: %p\n", \ + reg_info[this_reg].word.pointer); \ + \ + regend[this_reg] = (const CHAR_T *) POP_FAILURE_POINTER (); \ + DEBUG_PRINT2 (" end: %p\n", regend[this_reg]); \ + \ + regstart[this_reg] = (const CHAR_T *) POP_FAILURE_POINTER (); \ + DEBUG_PRINT2 (" start: %p\n", regstart[this_reg]); \ + } \ + else \ + { \ + for (this_reg = highest_active_reg; this_reg > high_reg; this_reg--) \ + { \ + reg_info[this_reg].word.integer = 0; \ + regend[this_reg] = 0; \ + regstart[this_reg] = 0; \ + } \ + highest_active_reg = high_reg; \ + } \ + \ + set_regs_matched_done = 0; \ + DEBUG_STATEMENT (nfailure_points_popped++); \ + } /* POP_FAILURE_POINT */ + + /* Structure for per-register (a.k.a. per-group) information. + Other register information, such as the + starting and ending positions (which are addresses), and the list of + inner groups (which is a bits list) are maintained in separate + variables. + + We are making a (strictly speaking) nonportable assumption here: that + the compiler will pack our bit fields into something that fits into + the type of `word', i.e., is something that fits into one item on the + failure stack. */ + + + /* Declarations and macros for re_match_2. */ + + typedef union + { + PREFIX(fail_stack_elt_t) word; + struct + { + /* This field is one if this group can match the empty string, + zero if not. If not yet determined, `MATCH_NULL_UNSET_VALUE'. */ + # define MATCH_NULL_UNSET_VALUE 3 + unsigned match_null_string_p : 2; + unsigned is_active : 1; + unsigned matched_something : 1; + unsigned ever_matched_something : 1; + } bits; + } PREFIX(register_info_type); + + # ifndef DEFINED_ONCE + # define REG_MATCH_NULL_STRING_P(R) ((R).bits.match_null_string_p) + # define IS_ACTIVE(R) ((R).bits.is_active) + # define MATCHED_SOMETHING(R) ((R).bits.matched_something) + # define EVER_MATCHED_SOMETHING(R) ((R).bits.ever_matched_something) + + + /* Call this when have matched a real character; it sets `matched' flags + for the subexpressions which we are currently inside. Also records + that those subexprs have matched. */ + # define SET_REGS_MATCHED() \ + do \ + { \ + if (!set_regs_matched_done) \ + { \ + active_reg_t r; \ + set_regs_matched_done = 1; \ + for (r = lowest_active_reg; r <= highest_active_reg; r++) \ + { \ + MATCHED_SOMETHING (reg_info[r]) \ + = EVER_MATCHED_SOMETHING (reg_info[r]) \ + = 1; \ + } \ + } \ + } \ + while (0) + # endif /* not DEFINED_ONCE */ + + /* Registers are set to a sentinel when they haven't yet matched. */ + static CHAR_T PREFIX(reg_unset_dummy); + # define REG_UNSET_VALUE (&PREFIX(reg_unset_dummy)) + # define REG_UNSET(e) ((e) == REG_UNSET_VALUE) + + /* Subroutine declarations and macros for regex_compile. */ + static void PREFIX(store_op1) _RE_ARGS ((re_opcode_t op, UCHAR_T *loc, int arg)); + static void PREFIX(store_op2) _RE_ARGS ((re_opcode_t op, UCHAR_T *loc, + int arg1, int arg2)); + static void PREFIX(insert_op1) _RE_ARGS ((re_opcode_t op, UCHAR_T *loc, + int arg, UCHAR_T *end)); + static void PREFIX(insert_op2) _RE_ARGS ((re_opcode_t op, UCHAR_T *loc, + int arg1, int arg2, UCHAR_T *end)); + static boolean PREFIX(at_begline_loc_p) _RE_ARGS ((const CHAR_T *pattern, + const CHAR_T *p, + reg_syntax_t syntax)); + static boolean PREFIX(at_endline_loc_p) _RE_ARGS ((const CHAR_T *p, + const CHAR_T *pend, + reg_syntax_t syntax)); + # ifdef WCHAR + static reg_errcode_t wcs_compile_range _RE_ARGS ((CHAR_T range_start, + const CHAR_T **p_ptr, + const CHAR_T *pend, + char *translate, + reg_syntax_t syntax, + UCHAR_T *b, + CHAR_T *char_set)); + static void insert_space _RE_ARGS ((int num, CHAR_T *loc, CHAR_T *end)); + # else /* BYTE */ + static reg_errcode_t byte_compile_range _RE_ARGS ((unsigned int range_start, + const char **p_ptr, + const char *pend, + char *translate, + reg_syntax_t syntax, + unsigned char *b)); + # endif /* WCHAR */ + + /* Fetch the next character in the uncompiled pattern---translating it + if necessary. Also cast from a signed character in the constant + string passed to us by the user to an unsigned char that we can use + as an array index (in, e.g., `translate'). */ + /* ifdef MBS_SUPPORT, we translate only if character <= 0xff, + because it is impossible to allocate 4GB array for some encodings + which have 4 byte character_set like UCS4. */ + # ifndef PATFETCH + # ifdef WCHAR + # define PATFETCH(c) \ + do {if (p == pend) return REG_EEND; \ + c = (UCHAR_T) *p++; \ + if (translate && (c <= 0xff)) c = (UCHAR_T) translate[c]; \ + } while (0) + # else /* BYTE */ + # define PATFETCH(c) \ + do {if (p == pend) return REG_EEND; \ + c = (unsigned char) *p++; \ + if (translate) c = (unsigned char) translate[c]; \ + } while (0) + # endif /* WCHAR */ + # endif + + /* Fetch the next character in the uncompiled pattern, with no + translation. */ + # define PATFETCH_RAW(c) \ + do {if (p == pend) return REG_EEND; \ + c = (UCHAR_T) *p++; \ + } while (0) + + /* Go backwards one character in the pattern. */ + # define PATUNFETCH p-- + + + /* If `translate' is non-null, return translate[D], else just D. We + cast the subscript to translate because some data is declared as + `char *', to avoid warnings when a string constant is passed. But + when we use a character as a subscript we must make it unsigned. */ + /* ifdef MBS_SUPPORT, we translate only if character <= 0xff, + because it is impossible to allocate 4GB array for some encodings + which have 4 byte character_set like UCS4. */ + + # ifndef TRANSLATE + # ifdef WCHAR + # define TRANSLATE(d) \ + ((translate && ((UCHAR_T) (d)) <= 0xff) \ + ? (char) translate[(unsigned char) (d)] : (d)) + # else /* BYTE */ + # define TRANSLATE(d) \ + (translate ? (char) translate[(unsigned char) (d)] : (d)) + # endif /* WCHAR */ + # endif + + + /* Macros for outputting the compiled pattern into `buffer'. */ + + /* If the buffer isn't allocated when it comes in, use this. */ + # define INIT_BUF_SIZE (32 * sizeof(UCHAR_T)) + + /* Make sure we have at least N more bytes of space in buffer. */ + # ifdef WCHAR + # define GET_BUFFER_SPACE(n) \ + while (((unsigned long)b - (unsigned long)COMPILED_BUFFER_VAR \ + + (n)*sizeof(CHAR_T)) > bufp->allocated) \ + EXTEND_BUFFER () + # else /* BYTE */ + # define GET_BUFFER_SPACE(n) \ + while ((unsigned long) (b - bufp->buffer + (n)) > bufp->allocated) \ + EXTEND_BUFFER () + # endif /* WCHAR */ + + /* Make sure we have one more byte of buffer space and then add C to it. */ + # define BUF_PUSH(c) \ + do { \ + GET_BUFFER_SPACE (1); \ + *b++ = (UCHAR_T) (c); \ + } while (0) + + + /* Ensure we have two more bytes of buffer space and then append C1 and C2. */ + # define BUF_PUSH_2(c1, c2) \ + do { \ + GET_BUFFER_SPACE (2); \ + *b++ = (UCHAR_T) (c1); \ + *b++ = (UCHAR_T) (c2); \ + } while (0) + + + /* As with BUF_PUSH_2, except for three bytes. */ + # define BUF_PUSH_3(c1, c2, c3) \ + do { \ + GET_BUFFER_SPACE (3); \ + *b++ = (UCHAR_T) (c1); \ + *b++ = (UCHAR_T) (c2); \ + *b++ = (UCHAR_T) (c3); \ + } while (0) + + /* Store a jump with opcode OP at LOC to location TO. We store a + relative address offset by the three bytes the jump itself occupies. */ + # define STORE_JUMP(op, loc, to) \ + PREFIX(store_op1) (op, loc, (int) ((to) - (loc) - (1 + OFFSET_ADDRESS_SIZE))) + + /* Likewise, for a two-argument jump. */ + # define STORE_JUMP2(op, loc, to, arg) \ + PREFIX(store_op2) (op, loc, (int) ((to) - (loc) - (1 + OFFSET_ADDRESS_SIZE)), arg) + + /* Like `STORE_JUMP', but for inserting. Assume `b' is the buffer end. */ + # define INSERT_JUMP(op, loc, to) \ + PREFIX(insert_op1) (op, loc, (int) ((to) - (loc) - (1 + OFFSET_ADDRESS_SIZE)), b) + + /* Like `STORE_JUMP2', but for inserting. Assume `b' is the buffer end. */ + # define INSERT_JUMP2(op, loc, to, arg) \ + PREFIX(insert_op2) (op, loc, (int) ((to) - (loc) - (1 + OFFSET_ADDRESS_SIZE)),\ + arg, b) + + /* This is not an arbitrary limit: the arguments which represent offsets + into the pattern are two bytes long. So if 2^16 bytes turns out to + be too small, many things would have to change. */ + /* Any other compiler which, like MSC, has allocation limit below 2^16 + bytes will have to use approach similar to what was done below for + MSC and drop MAX_BUF_SIZE a bit. Otherwise you may end up + reallocating to 0 bytes. Such thing is not going to work too well. + You have been warned!! */ + # ifndef DEFINED_ONCE + # if defined _MSC_VER && !defined WIN32 + /* Microsoft C 16-bit versions limit malloc to approx 65512 bytes. + The REALLOC define eliminates a flurry of conversion warnings, + but is not required. */ + # define MAX_BUF_SIZE 65500L + # define REALLOC(p,s) realloc ((p), (size_t) (s)) + # else + # define MAX_BUF_SIZE (1L << 16) + # define REALLOC(p,s) realloc ((p), (s)) + # endif + + /* Extend the buffer by twice its current size via realloc and + reset the pointers that pointed into the old block to point to the + correct places in the new one. If extending the buffer results in it + being larger than MAX_BUF_SIZE, then flag memory exhausted. */ + # if __BOUNDED_POINTERS__ + # define SET_HIGH_BOUND(P) (__ptrhigh (P) = __ptrlow (P) + bufp->allocated) + # define MOVE_BUFFER_POINTER(P) \ + (__ptrlow (P) += incr, SET_HIGH_BOUND (P), __ptrvalue (P) += incr) + # define ELSE_EXTEND_BUFFER_HIGH_BOUND \ + else \ + { \ + SET_HIGH_BOUND (b); \ + SET_HIGH_BOUND (begalt); \ + if (fixup_alt_jump) \ + SET_HIGH_BOUND (fixup_alt_jump); \ + if (laststart) \ + SET_HIGH_BOUND (laststart); \ + if (pending_exact) \ + SET_HIGH_BOUND (pending_exact); \ + } + # else + # define MOVE_BUFFER_POINTER(P) (P) += incr + # define ELSE_EXTEND_BUFFER_HIGH_BOUND + # endif + # endif /* not DEFINED_ONCE */ + + # ifdef WCHAR + # define EXTEND_BUFFER() \ + do { \ + UCHAR_T *old_buffer = COMPILED_BUFFER_VAR; \ + int wchar_count; \ + if (bufp->allocated + sizeof(UCHAR_T) > MAX_BUF_SIZE) \ + return REG_ESIZE; \ + bufp->allocated <<= 1; \ + if (bufp->allocated > MAX_BUF_SIZE) \ + bufp->allocated = MAX_BUF_SIZE; \ + /* How many characters the new buffer can have? */ \ + wchar_count = bufp->allocated / sizeof(UCHAR_T); \ + if (wchar_count == 0) wchar_count = 1; \ + /* Truncate the buffer to CHAR_T align. */ \ + bufp->allocated = wchar_count * sizeof(UCHAR_T); \ + RETALLOC (COMPILED_BUFFER_VAR, wchar_count, UCHAR_T); \ + bufp->buffer = (char*)COMPILED_BUFFER_VAR; \ + if (COMPILED_BUFFER_VAR == NULL) \ + return REG_ESPACE; \ + /* If the buffer moved, move all the pointers into it. */ \ + if (old_buffer != COMPILED_BUFFER_VAR) \ + { \ + int incr = COMPILED_BUFFER_VAR - old_buffer; \ + MOVE_BUFFER_POINTER (b); \ + MOVE_BUFFER_POINTER (begalt); \ + if (fixup_alt_jump) \ + MOVE_BUFFER_POINTER (fixup_alt_jump); \ + if (laststart) \ + MOVE_BUFFER_POINTER (laststart); \ + if (pending_exact) \ + MOVE_BUFFER_POINTER (pending_exact); \ + } \ + ELSE_EXTEND_BUFFER_HIGH_BOUND \ + } while (0) + # else /* BYTE */ + # define EXTEND_BUFFER() \ + do { \ + UCHAR_T *old_buffer = COMPILED_BUFFER_VAR; \ + if (bufp->allocated == MAX_BUF_SIZE) \ + return REG_ESIZE; \ + bufp->allocated <<= 1; \ + if (bufp->allocated > MAX_BUF_SIZE) \ + bufp->allocated = MAX_BUF_SIZE; \ + bufp->buffer = (UCHAR_T *) REALLOC (COMPILED_BUFFER_VAR, \ + bufp->allocated); \ + if (COMPILED_BUFFER_VAR == NULL) \ + return REG_ESPACE; \ + /* If the buffer moved, move all the pointers into it. */ \ + if (old_buffer != COMPILED_BUFFER_VAR) \ + { \ + int incr = COMPILED_BUFFER_VAR - old_buffer; \ + MOVE_BUFFER_POINTER (b); \ + MOVE_BUFFER_POINTER (begalt); \ + if (fixup_alt_jump) \ + MOVE_BUFFER_POINTER (fixup_alt_jump); \ + if (laststart) \ + MOVE_BUFFER_POINTER (laststart); \ + if (pending_exact) \ + MOVE_BUFFER_POINTER (pending_exact); \ + } \ + ELSE_EXTEND_BUFFER_HIGH_BOUND \ + } while (0) + # endif /* WCHAR */ + + # ifndef DEFINED_ONCE + /* Since we have one byte reserved for the register number argument to + {start,stop}_memory, the maximum number of groups we can report + things about is what fits in that byte. */ + # define MAX_REGNUM 255 + + /* But patterns can have more than `MAX_REGNUM' registers. We just + ignore the excess. */ + typedef unsigned regnum_t; + + + /* Macros for the compile stack. */ + + /* Since offsets can go either forwards or backwards, this type needs to + be able to hold values from -(MAX_BUF_SIZE - 1) to MAX_BUF_SIZE - 1. */ + /* int may be not enough when sizeof(int) == 2. */ + typedef long pattern_offset_t; + + typedef struct + { + pattern_offset_t begalt_offset; + pattern_offset_t fixup_alt_jump; + pattern_offset_t inner_group_offset; + pattern_offset_t laststart_offset; + regnum_t regnum; + } compile_stack_elt_t; + + + typedef struct + { + compile_stack_elt_t *stack; + unsigned size; + unsigned avail; /* Offset of next open position. */ + } compile_stack_type; + + + # define INIT_COMPILE_STACK_SIZE 32 + + # define COMPILE_STACK_EMPTY (compile_stack.avail == 0) + # define COMPILE_STACK_FULL (compile_stack.avail == compile_stack.size) + + /* The next available element. */ + # define COMPILE_STACK_TOP (compile_stack.stack[compile_stack.avail]) + + # endif /* not DEFINED_ONCE */ + + /* Set the bit for character C in a list. */ + # ifndef DEFINED_ONCE + # define SET_LIST_BIT(c) \ + (b[((unsigned char) (c)) / BYTEWIDTH] \ + |= 1 << (((unsigned char) c) % BYTEWIDTH)) + # endif /* DEFINED_ONCE */ + + /* Get the next unsigned number in the uncompiled pattern. */ + # define GET_UNSIGNED_NUMBER(num) \ + { \ + while (p != pend) \ + { \ + PATFETCH (c); \ + if (c < '0' || c > '9') \ + break; \ + if (num <= RE_DUP_MAX) \ + { \ + if (num < 0) \ + num = 0; \ + num = num * 10 + c - '0'; \ + } \ + } \ + } + + # ifndef DEFINED_ONCE + # if defined _LIBC || WIDE_CHAR_SUPPORT + /* The GNU C library provides support for user-defined character classes + and the functions from ISO C amendement 1. */ + # ifdef CHARCLASS_NAME_MAX + # define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX + # else + /* This shouldn't happen but some implementation might still have this + problem. Use a reasonable default value. */ + # define CHAR_CLASS_MAX_LENGTH 256 + # endif + + # ifdef _LIBC + # define IS_CHAR_CLASS(string) __wctype (string) + # else + # define IS_CHAR_CLASS(string) wctype (string) + # endif + # else + # define CHAR_CLASS_MAX_LENGTH 6 /* Namely, `xdigit'. */ + + # define IS_CHAR_CLASS(string) \ + (STREQ (string, "alpha") || STREQ (string, "upper") \ + || STREQ (string, "lower") || STREQ (string, "digit") \ + || STREQ (string, "alnum") || STREQ (string, "xdigit") \ + || STREQ (string, "space") || STREQ (string, "print") \ + || STREQ (string, "punct") || STREQ (string, "graph") \ + || STREQ (string, "cntrl") || STREQ (string, "blank")) + # endif + # endif /* DEFINED_ONCE */ + + # ifndef MATCH_MAY_ALLOCATE + + /* If we cannot allocate large objects within re_match_2_internal, + we make the fail stack and register vectors global. + The fail stack, we grow to the maximum size when a regexp + is compiled. + The register vectors, we adjust in size each time we + compile a regexp, according to the number of registers it needs. */ + + static PREFIX(fail_stack_type) fail_stack; + + /* Size with which the following vectors are currently allocated. + That is so we can make them bigger as needed, + but never make them smaller. */ + # ifdef DEFINED_ONCE + static int regs_allocated_size; + + static const char ** regstart, ** regend; + static const char ** old_regstart, ** old_regend; + static const char **best_regstart, **best_regend; + static const char **reg_dummy; + # endif /* DEFINED_ONCE */ + + static PREFIX(register_info_type) *PREFIX(reg_info); + static PREFIX(register_info_type) *PREFIX(reg_info_dummy); + + /* Make the register vectors big enough for NUM_REGS registers, + but don't make them smaller. */ + + static void + PREFIX(regex_grow_registers) (num_regs) + int num_regs; + { + if (num_regs > regs_allocated_size) + { + RETALLOC_IF (regstart, num_regs, const char *); + RETALLOC_IF (regend, num_regs, const char *); + RETALLOC_IF (old_regstart, num_regs, const char *); + RETALLOC_IF (old_regend, num_regs, const char *); + RETALLOC_IF (best_regstart, num_regs, const char *); + RETALLOC_IF (best_regend, num_regs, const char *); + RETALLOC_IF (PREFIX(reg_info), num_regs, PREFIX(register_info_type)); + RETALLOC_IF (reg_dummy, num_regs, const char *); + RETALLOC_IF (PREFIX(reg_info_dummy), num_regs, PREFIX(register_info_type)); + + regs_allocated_size = num_regs; + } + } + + # endif /* not MATCH_MAY_ALLOCATE */ + + # ifndef DEFINED_ONCE + static boolean group_in_compile_stack _RE_ARGS ((compile_stack_type + compile_stack, + regnum_t regnum)); + # endif /* not DEFINED_ONCE */ + + /* `regex_compile' compiles PATTERN (of length SIZE) according to SYNTAX. + Returns one of error codes defined in `regex.h', or zero for success. + + Assumes the `allocated' (and perhaps `buffer') and `translate' + fields are set in BUFP on entry. + + If it succeeds, results are put in BUFP (if it returns an error, the + contents of BUFP are undefined): + `buffer' is the compiled pattern; + `syntax' is set to SYNTAX; + `used' is set to the length of the compiled pattern; + `fastmap_accurate' is zero; + `re_nsub' is the number of subexpressions in PATTERN; + `not_bol' and `not_eol' are zero; + + The `fastmap' and `newline_anchor' fields are neither + examined nor set. */ + + /* Return, freeing storage we allocated. */ + # ifdef WCHAR + # define FREE_STACK_RETURN(value) \ + return (free(pattern), free(mbs_offset), free(is_binary), free (compile_stack.stack), value) + # else + # define FREE_STACK_RETURN(value) \ + return (free (compile_stack.stack), value) + # endif /* WCHAR */ + + static reg_errcode_t + PREFIX(regex_compile) (ARG_PREFIX(pattern), ARG_PREFIX(size), syntax, bufp) + const char *ARG_PREFIX(pattern); + size_t ARG_PREFIX(size); + reg_syntax_t syntax; + struct re_pattern_buffer *bufp; + { + /* We fetch characters from PATTERN here. Even though PATTERN is + `char *' (i.e., signed), we declare these variables as unsigned, so + they can be reliably used as array indices. */ + register UCHAR_T c, c1; + + #ifdef WCHAR + /* A temporary space to keep wchar_t pattern and compiled pattern. */ + CHAR_T *pattern, *COMPILED_BUFFER_VAR; + size_t size; + /* offset buffer for optimization. See convert_mbs_to_wc. */ + int *mbs_offset = NULL; + /* It hold whether each wchar_t is binary data or not. */ + char *is_binary = NULL; + /* A flag whether exactn is handling binary data or not. */ + char is_exactn_bin = FALSE; + #endif /* WCHAR */ + + /* A random temporary spot in PATTERN. */ + const CHAR_T *p1; + + /* Points to the end of the buffer, where we should append. */ + register UCHAR_T *b; + + /* Keeps track of unclosed groups. */ + compile_stack_type compile_stack; + + /* Points to the current (ending) position in the pattern. */ + #ifdef WCHAR + const CHAR_T *p; + const CHAR_T *pend; + #else /* BYTE */ + const CHAR_T *p = pattern; + const CHAR_T *pend = pattern + size; + #endif /* WCHAR */ + + /* How to translate the characters in the pattern. */ + RE_TRANSLATE_TYPE translate = bufp->translate; + + /* Address of the count-byte of the most recently inserted `exactn' + command. This makes it possible to tell if a new exact-match + character can be added to that command or if the character requires + a new `exactn' command. */ + UCHAR_T *pending_exact = 0; + + /* Address of start of the most recently finished expression. + This tells, e.g., postfix * where to find the start of its + operand. Reset at the beginning of groups and alternatives. */ + UCHAR_T *laststart = 0; + + /* Address of beginning of regexp, or inside of last group. */ + UCHAR_T *begalt; + + /* Address of the place where a forward jump should go to the end of + the containing expression. Each alternative of an `or' -- except the + last -- ends with a forward jump of this sort. */ + UCHAR_T *fixup_alt_jump = 0; + + /* Counts open-groups as they are encountered. Remembered for the + matching close-group on the compile stack, so the same register + number is put in the stop_memory as the start_memory. */ + regnum_t regnum = 0; + + #ifdef WCHAR + /* Initialize the wchar_t PATTERN and offset_buffer. */ + p = pend = pattern = TALLOC(csize + 1, CHAR_T); + mbs_offset = TALLOC(csize + 1, int); + is_binary = TALLOC(csize + 1, char); + if (pattern == NULL || mbs_offset == NULL || is_binary == NULL) + { + free(pattern); + free(mbs_offset); + free(is_binary); + return REG_ESPACE; + } + pattern[csize] = L'\0'; /* sentinel */ + size = convert_mbs_to_wcs(pattern, cpattern, csize, mbs_offset, is_binary); + pend = p + size; + if (size < 0) + { + free(pattern); + free(mbs_offset); + free(is_binary); + return REG_BADPAT; + } + #endif + + #ifdef DEBUG + DEBUG_PRINT1 ("\nCompiling pattern: "); + if (debug) + { + unsigned debug_count; + + for (debug_count = 0; debug_count < size; debug_count++) + PUT_CHAR (pattern[debug_count]); + putchar ('\n'); + } + #endif /* DEBUG */ + + /* Initialize the compile stack. */ + compile_stack.stack = TALLOC (INIT_COMPILE_STACK_SIZE, compile_stack_elt_t); + if (compile_stack.stack == NULL) + { + #ifdef WCHAR + free(pattern); + free(mbs_offset); + free(is_binary); + #endif + return REG_ESPACE; + } + + compile_stack.size = INIT_COMPILE_STACK_SIZE; + compile_stack.avail = 0; + + /* Initialize the pattern buffer. */ + bufp->syntax = syntax; + bufp->fastmap_accurate = 0; + bufp->not_bol = bufp->not_eol = 0; + + /* Set `used' to zero, so that if we return an error, the pattern + printer (for debugging) will think there's no pattern. We reset it + at the end. */ + bufp->used = 0; + + /* Always count groups, whether or not bufp->no_sub is set. */ + bufp->re_nsub = 0; + + #if !defined emacs && !defined SYNTAX_TABLE + /* Initialize the syntax table. */ + init_syntax_once (); + #endif + + if (bufp->allocated == 0) + { + if (bufp->buffer) + { /* If zero allocated, but buffer is non-null, try to realloc + enough space. This loses if buffer's address is bogus, but + that is the user's responsibility. */ + #ifdef WCHAR + /* Free bufp->buffer and allocate an array for wchar_t pattern + buffer. */ + free(bufp->buffer); + COMPILED_BUFFER_VAR = TALLOC (INIT_BUF_SIZE/sizeof(UCHAR_T), + UCHAR_T); + #else + RETALLOC (COMPILED_BUFFER_VAR, INIT_BUF_SIZE, UCHAR_T); + #endif /* WCHAR */ + } + else + { /* Caller did not allocate a buffer. Do it for them. */ + COMPILED_BUFFER_VAR = TALLOC (INIT_BUF_SIZE / sizeof(UCHAR_T), + UCHAR_T); + } + + if (!COMPILED_BUFFER_VAR) FREE_STACK_RETURN (REG_ESPACE); + #ifdef WCHAR + bufp->buffer = (char*)COMPILED_BUFFER_VAR; + #endif /* WCHAR */ + bufp->allocated = INIT_BUF_SIZE; + } + #ifdef WCHAR + else + COMPILED_BUFFER_VAR = (UCHAR_T*) bufp->buffer; + #endif + + begalt = b = COMPILED_BUFFER_VAR; + + /* Loop through the uncompiled pattern until we're at the end. */ + while (p != pend) + { + PATFETCH (c); + + switch (c) + { + case '^': + { + if ( /* If at start of pattern, it's an operator. */ + p == pattern + 1 + /* If context independent, it's an operator. */ + || syntax & RE_CONTEXT_INDEP_ANCHORS + /* Otherwise, depends on what's come before. */ + || PREFIX(at_begline_loc_p) (pattern, p, syntax)) + BUF_PUSH (begline); + else + goto normal_char; + } + break; + + + case '$': + { + if ( /* If at end of pattern, it's an operator. */ + p == pend + /* If context independent, it's an operator. */ + || syntax & RE_CONTEXT_INDEP_ANCHORS + /* Otherwise, depends on what's next. */ + || PREFIX(at_endline_loc_p) (p, pend, syntax)) + BUF_PUSH (endline); + else + goto normal_char; + } + break; + + + case '+': + case '?': + if ((syntax & RE_BK_PLUS_QM) + || (syntax & RE_LIMITED_OPS)) + goto normal_char; + handle_plus: + case '*': + /* If there is no previous pattern... */ + if (!laststart) + { + if (syntax & RE_CONTEXT_INVALID_OPS) + FREE_STACK_RETURN (REG_BADRPT); + else if (!(syntax & RE_CONTEXT_INDEP_OPS)) + goto normal_char; + } + + { + /* Are we optimizing this jump? */ + boolean keep_string_p = false; + + /* 1 means zero (many) matches is allowed. */ + char zero_times_ok = 0, many_times_ok = 0; + + /* If there is a sequence of repetition chars, collapse it + down to just one (the right one). We can't combine + interval operators with these because of, e.g., `a{2}*', + which should only match an even number of `a's. */ + + for (;;) + { + zero_times_ok |= c != '+'; + many_times_ok |= c != '?'; + + if (p == pend) + break; + + PATFETCH (c); + + if (c == '*' + || (!(syntax & RE_BK_PLUS_QM) && (c == '+' || c == '?'))) + ; + + else if (syntax & RE_BK_PLUS_QM && c == '\\') + { + if (p == pend) FREE_STACK_RETURN (REG_EESCAPE); + + PATFETCH (c1); + if (!(c1 == '+' || c1 == '?')) + { + PATUNFETCH; + PATUNFETCH; + break; + } + + c = c1; + } + else + { + PATUNFETCH; + break; + } + + /* If we get here, we found another repeat character. */ + } + + /* Star, etc. applied to an empty pattern is equivalent + to an empty pattern. */ + if (!laststart) + break; + + /* Now we know whether or not zero matches is allowed + and also whether or not two or more matches is allowed. */ + if (many_times_ok) + { /* More than one repetition is allowed, so put in at the + end a backward relative jump from `b' to before the next + jump we're going to put in below (which jumps from + laststart to after this jump). + + But if we are at the `*' in the exact sequence `.*\n', + insert an unconditional jump backwards to the ., + instead of the beginning of the loop. This way we only + push a failure point once, instead of every time + through the loop. */ + assert (p - 1 > pattern); + + /* Allocate the space for the jump. */ + GET_BUFFER_SPACE (1 + OFFSET_ADDRESS_SIZE); + + /* We know we are not at the first character of the pattern, + because laststart was nonzero. And we've already + incremented `p', by the way, to be the character after + the `*'. Do we have to do something analogous here + for null bytes, because of RE_DOT_NOT_NULL? */ + if (TRANSLATE (*(p - 2)) == TRANSLATE ('.') + && zero_times_ok + && p < pend && TRANSLATE (*p) == TRANSLATE ('\n') + && !(syntax & RE_DOT_NEWLINE)) + { /* We have .*\n. */ + STORE_JUMP (jump, b, laststart); + keep_string_p = true; + } + else + /* Anything else. */ + STORE_JUMP (maybe_pop_jump, b, laststart - + (1 + OFFSET_ADDRESS_SIZE)); + + /* We've added more stuff to the buffer. */ + b += 1 + OFFSET_ADDRESS_SIZE; + } + + /* On failure, jump from laststart to b + 3, which will be the + end of the buffer after this jump is inserted. */ + /* ifdef WCHAR, 'b + 1 + OFFSET_ADDRESS_SIZE' instead of + 'b + 3'. */ + GET_BUFFER_SPACE (1 + OFFSET_ADDRESS_SIZE); + INSERT_JUMP (keep_string_p ? on_failure_keep_string_jump + : on_failure_jump, + laststart, b + 1 + OFFSET_ADDRESS_SIZE); + pending_exact = 0; + b += 1 + OFFSET_ADDRESS_SIZE; + + if (!zero_times_ok) + { + /* At least one repetition is required, so insert a + `dummy_failure_jump' before the initial + `on_failure_jump' instruction of the loop. This + effects a skip over that instruction the first time + we hit that loop. */ + GET_BUFFER_SPACE (1 + OFFSET_ADDRESS_SIZE); + INSERT_JUMP (dummy_failure_jump, laststart, laststart + + 2 + 2 * OFFSET_ADDRESS_SIZE); + b += 1 + OFFSET_ADDRESS_SIZE; + } + } + break; + + + case '.': + laststart = b; + BUF_PUSH (anychar); + break; + + + case '[': + { + boolean had_char_class = false; + #ifdef WCHAR + CHAR_T range_start = 0xffffffff; + #else + unsigned int range_start = 0xffffffff; + #endif + if (p == pend) FREE_STACK_RETURN (REG_EBRACK); + + #ifdef WCHAR + /* We assume a charset(_not) structure as a wchar_t array. + charset[0] = (re_opcode_t) charset(_not) + charset[1] = l (= length of char_classes) + charset[2] = m (= length of collating_symbols) + charset[3] = n (= length of equivalence_classes) + charset[4] = o (= length of char_ranges) + charset[5] = p (= length of chars) + + charset[6] = char_class (wctype_t) + charset[6+CHAR_CLASS_SIZE] = char_class (wctype_t) + ... + charset[l+5] = char_class (wctype_t) + + charset[l+6] = collating_symbol (wchar_t) + ... + charset[l+m+5] = collating_symbol (wchar_t) + ifdef _LIBC we use the index if + _NL_COLLATE_SYMB_EXTRAMB instead of + wchar_t string. + + charset[l+m+6] = equivalence_classes (wchar_t) + ... + charset[l+m+n+5] = equivalence_classes (wchar_t) + ifdef _LIBC we use the index in + _NL_COLLATE_WEIGHT instead of + wchar_t string. + + charset[l+m+n+6] = range_start + charset[l+m+n+7] = range_end + ... + charset[l+m+n+2o+4] = range_start + charset[l+m+n+2o+5] = range_end + ifdef _LIBC we use the value looked up + in _NL_COLLATE_COLLSEQ instead of + wchar_t character. + + charset[l+m+n+2o+6] = char + ... + charset[l+m+n+2o+p+5] = char + + */ + + /* We need at least 6 spaces: the opcode, the length of + char_classes, the length of collating_symbols, the length of + equivalence_classes, the length of char_ranges, the length of + chars. */ + GET_BUFFER_SPACE (6); + + /* Save b as laststart. And We use laststart as the pointer + to the first element of the charset here. + In other words, laststart[i] indicates charset[i]. */ + laststart = b; + + /* We test `*p == '^' twice, instead of using an if + statement, so we only need one BUF_PUSH. */ + BUF_PUSH (*p == '^' ? charset_not : charset); + if (*p == '^') + p++; + + /* Push the length of char_classes, the length of + collating_symbols, the length of equivalence_classes, the + length of char_ranges and the length of chars. */ + BUF_PUSH_3 (0, 0, 0); + BUF_PUSH_2 (0, 0); + + /* Remember the first position in the bracket expression. */ + p1 = p; + + /* charset_not matches newline according to a syntax bit. */ + if ((re_opcode_t) b[-6] == charset_not + && (syntax & RE_HAT_LISTS_NOT_NEWLINE)) + { + BUF_PUSH('\n'); + laststart[5]++; /* Update the length of characters */ + } + + /* Read in characters and ranges, setting map bits. */ + for (;;) + { + if (p == pend) FREE_STACK_RETURN (REG_EBRACK); + + PATFETCH (c); + + /* \ might escape characters inside [...] and [^...]. */ + if ((syntax & RE_BACKSLASH_ESCAPE_IN_LISTS) && c == '\\') + { + if (p == pend) FREE_STACK_RETURN (REG_EESCAPE); + + PATFETCH (c1); + BUF_PUSH(c1); + laststart[5]++; /* Update the length of chars */ + range_start = c1; + continue; + } + + /* Could be the end of the bracket expression. If it's + not (i.e., when the bracket expression is `[]' so + far), the ']' character bit gets set way below. */ + if (c == ']' && p != p1 + 1) + break; + + /* Look ahead to see if it's a range when the last thing + was a character class. */ + if (had_char_class && c == '-' && *p != ']') + FREE_STACK_RETURN (REG_ERANGE); + + /* Look ahead to see if it's a range when the last thing + was a character: if this is a hyphen not at the + beginning or the end of a list, then it's the range + operator. */ + if (c == '-' + && !(p - 2 >= pattern && p[-2] == '[') + && !(p - 3 >= pattern && p[-3] == '[' && p[-2] == '^') + && *p != ']') + { + reg_errcode_t ret; + /* Allocate the space for range_start and range_end. */ + GET_BUFFER_SPACE (2); + /* Update the pointer to indicate end of buffer. */ + b += 2; + ret = wcs_compile_range (range_start, &p, pend, translate, + syntax, b, laststart); + if (ret != REG_NOERROR) FREE_STACK_RETURN (ret); + range_start = 0xffffffff; + } + else if (p[0] == '-' && p[1] != ']') + { /* This handles ranges made up of characters only. */ + reg_errcode_t ret; + + /* Move past the `-'. */ + PATFETCH (c1); + /* Allocate the space for range_start and range_end. */ + GET_BUFFER_SPACE (2); + /* Update the pointer to indicate end of buffer. */ + b += 2; + ret = wcs_compile_range (c, &p, pend, translate, syntax, b, + laststart); + if (ret != REG_NOERROR) FREE_STACK_RETURN (ret); + range_start = 0xffffffff; + } + + /* See if we're at the beginning of a possible character + class. */ + else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == ':') + { /* Leave room for the null. */ + char str[CHAR_CLASS_MAX_LENGTH + 1]; + + PATFETCH (c); + c1 = 0; + + /* If pattern is `[[:'. */ + if (p == pend) FREE_STACK_RETURN (REG_EBRACK); + + for (;;) + { + PATFETCH (c); + if ((c == ':' && *p == ']') || p == pend) + break; + if (c1 < CHAR_CLASS_MAX_LENGTH) + str[c1++] = c; + else + /* This is in any case an invalid class name. */ + str[0] = '\0'; + } + str[c1] = '\0'; + + /* If isn't a word bracketed by `[:' and `:]': + undo the ending character, the letters, and leave + the leading `:' and `[' (but store them as character). */ + if (c == ':' && *p == ']') + { + wctype_t wt; + uintptr_t alignedp; + + /* Query the character class as wctype_t. */ + wt = IS_CHAR_CLASS (str); + if (wt == 0) + FREE_STACK_RETURN (REG_ECTYPE); + + /* Throw away the ] at the end of the character + class. */ + PATFETCH (c); + + if (p == pend) FREE_STACK_RETURN (REG_EBRACK); + + /* Allocate the space for character class. */ + GET_BUFFER_SPACE(CHAR_CLASS_SIZE); + /* Update the pointer to indicate end of buffer. */ + b += CHAR_CLASS_SIZE; + /* Move data which follow character classes + not to violate the data. */ + insert_space(CHAR_CLASS_SIZE, + laststart + 6 + laststart[1], + b - 1); + alignedp = ((uintptr_t)(laststart + 6 + laststart[1]) + + __alignof__(wctype_t) - 1) + & ~(uintptr_t)(__alignof__(wctype_t) - 1); + /* Store the character class. */ + *((wctype_t*)alignedp) = wt; + /* Update length of char_classes */ + laststart[1] += CHAR_CLASS_SIZE; + + had_char_class = true; + } + else + { + c1++; + while (c1--) + PATUNFETCH; + BUF_PUSH ('['); + BUF_PUSH (':'); + laststart[5] += 2; /* Update the length of characters */ + range_start = ':'; + had_char_class = false; + } + } + else if (syntax & RE_CHAR_CLASSES && c == '[' && (*p == '=' + || *p == '.')) + { + CHAR_T str[128]; /* Should be large enough. */ + CHAR_T delim = *p; /* '=' or '.' */ + # ifdef _LIBC + uint32_t nrules = + _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); + # endif + PATFETCH (c); + c1 = 0; + + /* If pattern is `[[=' or '[[.'. */ + if (p == pend) FREE_STACK_RETURN (REG_EBRACK); + + for (;;) + { + PATFETCH (c); + if ((c == delim && *p == ']') || p == pend) + break; + if (c1 < sizeof (str) - 1) + str[c1++] = c; + else + /* This is in any case an invalid class name. */ + str[0] = '\0'; + } + str[c1] = '\0'; + + if (c == delim && *p == ']' && str[0] != '\0') + { + unsigned int i, offset; + /* If we have no collation data we use the default + collation in which each character is in a class + by itself. It also means that ASCII is the + character set and therefore we cannot have character + with more than one byte in the multibyte + representation. */ + + /* If not defined _LIBC, we push the name and + `\0' for the sake of matching performance. */ + int datasize = c1 + 1; + + # ifdef _LIBC + int32_t idx = 0; + if (nrules == 0) + # endif + { + if (c1 != 1) + FREE_STACK_RETURN (REG_ECOLLATE); + } + # ifdef _LIBC + else + { + const int32_t *table; + const int32_t *weights; + const int32_t *extra; + const int32_t *indirect; + wint_t *cp; + + /* This #include defines a local function! */ + # include + + if(delim == '=') + { + /* We push the index for equivalence class. */ + cp = (wint_t*)str; + + table = (const int32_t *) + _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_TABLEWC); + weights = (const int32_t *) + _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_WEIGHTWC); + extra = (const int32_t *) + _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_EXTRAWC); + indirect = (const int32_t *) + _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_INDIRECTWC); + + idx = findidx ((const wint_t**)&cp); + if (idx == 0 || cp < (wint_t*) str + c1) + /* This is no valid character. */ + FREE_STACK_RETURN (REG_ECOLLATE); + + str[0] = (wchar_t)idx; + } + else /* delim == '.' */ + { + /* We push collation sequence value + for collating symbol. */ + int32_t table_size; + const int32_t *symb_table; + const unsigned char *extra; + int32_t idx; + int32_t elem; + int32_t second; + int32_t hash; + char char_str[c1]; + + /* We have to convert the name to a single-byte + string. This is possible since the names + consist of ASCII characters and the internal + representation is UCS4. */ + for (i = 0; i < c1; ++i) + char_str[i] = str[i]; + + table_size = + _NL_CURRENT_WORD (LC_COLLATE, + _NL_COLLATE_SYMB_HASH_SIZEMB); + symb_table = (const int32_t *) + _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_SYMB_TABLEMB); + extra = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_SYMB_EXTRAMB); + + /* Locate the character in the hashing table. */ + hash = elem_hash (char_str, c1); + + idx = 0; + elem = hash % table_size; + second = hash % (table_size - 2); + while (symb_table[2 * elem] != 0) + { + /* First compare the hashing value. */ + if (symb_table[2 * elem] == hash + && c1 == extra[symb_table[2 * elem + 1]] + && memcmp (char_str, + &extra[symb_table[2 * elem + 1] + + 1], c1) == 0) + { + /* Yep, this is the entry. */ + idx = symb_table[2 * elem + 1]; + idx += 1 + extra[idx]; + break; + } + + /* Next entry. */ + elem += second; + } + + if (symb_table[2 * elem] != 0) + { + /* Compute the index of the byte sequence + in the table. */ + idx += 1 + extra[idx]; + /* Adjust for the alignment. */ + idx = (idx + 3) & ~3; + + str[0] = (wchar_t) idx + 4; + } + else if (symb_table[2 * elem] == 0 && c1 == 1) + { + /* No valid character. Match it as a + single byte character. */ + had_char_class = false; + BUF_PUSH(str[0]); + /* Update the length of characters */ + laststart[5]++; + range_start = str[0]; + + /* Throw away the ] at the end of the + collating symbol. */ + PATFETCH (c); + /* exit from the switch block. */ + continue; + } + else + FREE_STACK_RETURN (REG_ECOLLATE); + } + datasize = 1; + } + # endif + /* Throw away the ] at the end of the equivalence + class (or collating symbol). */ + PATFETCH (c); + + /* Allocate the space for the equivalence class + (or collating symbol) (and '\0' if needed). */ + GET_BUFFER_SPACE(datasize); + /* Update the pointer to indicate end of buffer. */ + b += datasize; + + if (delim == '=') + { /* equivalence class */ + /* Calculate the offset of char_ranges, + which is next to equivalence_classes. */ + offset = laststart[1] + laststart[2] + + laststart[3] +6; + /* Insert space. */ + insert_space(datasize, laststart + offset, b - 1); + + /* Write the equivalence_class and \0. */ + for (i = 0 ; i < datasize ; i++) + laststart[offset + i] = str[i]; + + /* Update the length of equivalence_classes. */ + laststart[3] += datasize; + had_char_class = true; + } + else /* delim == '.' */ + { /* collating symbol */ + /* Calculate the offset of the equivalence_classes, + which is next to collating_symbols. */ + offset = laststart[1] + laststart[2] + 6; + /* Insert space and write the collationg_symbol + and \0. */ + insert_space(datasize, laststart + offset, b-1); + for (i = 0 ; i < datasize ; i++) + laststart[offset + i] = str[i]; + + /* In re_match_2_internal if range_start < -1, we + assume -range_start is the offset of the + collating symbol which is specified as + the character of the range start. So we assign + -(laststart[1] + laststart[2] + 6) to + range_start. */ + range_start = -(laststart[1] + laststart[2] + 6); + /* Update the length of collating_symbol. */ + laststart[2] += datasize; + had_char_class = false; + } + } + else + { + c1++; + while (c1--) + PATUNFETCH; + BUF_PUSH ('['); + BUF_PUSH (delim); + laststart[5] += 2; /* Update the length of characters */ + range_start = delim; + had_char_class = false; + } + } + else + { + had_char_class = false; + BUF_PUSH(c); + laststart[5]++; /* Update the length of characters */ + range_start = c; + } + } + + #else /* BYTE */ + /* Ensure that we have enough space to push a charset: the + opcode, the length count, and the bitset; 34 bytes in all. */ + GET_BUFFER_SPACE (34); + + laststart = b; + + /* We test `*p == '^' twice, instead of using an if + statement, so we only need one BUF_PUSH. */ + BUF_PUSH (*p == '^' ? charset_not : charset); + if (*p == '^') + p++; + + /* Remember the first position in the bracket expression. */ + p1 = p; + + /* Push the number of bytes in the bitmap. */ + BUF_PUSH ((1 << BYTEWIDTH) / BYTEWIDTH); + + /* Clear the whole map. */ + bzero (b, (1 << BYTEWIDTH) / BYTEWIDTH); + + /* charset_not matches newline according to a syntax bit. */ + if ((re_opcode_t) b[-2] == charset_not + && (syntax & RE_HAT_LISTS_NOT_NEWLINE)) + SET_LIST_BIT ('\n'); + + /* Read in characters and ranges, setting map bits. */ + for (;;) + { + if (p == pend) FREE_STACK_RETURN (REG_EBRACK); + + PATFETCH (c); + + /* \ might escape characters inside [...] and [^...]. */ + if ((syntax & RE_BACKSLASH_ESCAPE_IN_LISTS) && c == '\\') + { + if (p == pend) FREE_STACK_RETURN (REG_EESCAPE); + + PATFETCH (c1); + SET_LIST_BIT (c1); + range_start = c1; + continue; + } + + /* Could be the end of the bracket expression. If it's + not (i.e., when the bracket expression is `[]' so + far), the ']' character bit gets set way below. */ + if (c == ']' && p != p1 + 1) + break; + + /* Look ahead to see if it's a range when the last thing + was a character class. */ + if (had_char_class && c == '-' && *p != ']') + FREE_STACK_RETURN (REG_ERANGE); + + /* Look ahead to see if it's a range when the last thing + was a character: if this is a hyphen not at the + beginning or the end of a list, then it's the range + operator. */ + if (c == '-' + && !(p - 2 >= pattern && p[-2] == '[') + && !(p - 3 >= pattern && p[-3] == '[' && p[-2] == '^') + && *p != ']') + { + reg_errcode_t ret + = byte_compile_range (range_start, &p, pend, translate, + syntax, b); + if (ret != REG_NOERROR) FREE_STACK_RETURN (ret); + range_start = 0xffffffff; + } + + else if (p[0] == '-' && p[1] != ']') + { /* This handles ranges made up of characters only. */ + reg_errcode_t ret; + + /* Move past the `-'. */ + PATFETCH (c1); + + ret = byte_compile_range (c, &p, pend, translate, syntax, b); + if (ret != REG_NOERROR) FREE_STACK_RETURN (ret); + range_start = 0xffffffff; + } + + /* See if we're at the beginning of a possible character + class. */ + + else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == ':') + { /* Leave room for the null. */ + char str[CHAR_CLASS_MAX_LENGTH + 1]; + + PATFETCH (c); + c1 = 0; + + /* If pattern is `[[:'. */ + if (p == pend) FREE_STACK_RETURN (REG_EBRACK); + + for (;;) + { + PATFETCH (c); + if ((c == ':' && *p == ']') || p == pend) + break; + if (c1 < CHAR_CLASS_MAX_LENGTH) + str[c1++] = c; + else + /* This is in any case an invalid class name. */ + str[0] = '\0'; + } + str[c1] = '\0'; + + /* If isn't a word bracketed by `[:' and `:]': + undo the ending character, the letters, and leave + the leading `:' and `[' (but set bits for them). */ + if (c == ':' && *p == ']') + { + # if defined _LIBC || WIDE_CHAR_SUPPORT + boolean is_lower = STREQ (str, "lower"); + boolean is_upper = STREQ (str, "upper"); + wctype_t wt; + int ch; + + wt = IS_CHAR_CLASS (str); + if (wt == 0) + FREE_STACK_RETURN (REG_ECTYPE); + + /* Throw away the ] at the end of the character + class. */ + PATFETCH (c); + + if (p == pend) FREE_STACK_RETURN (REG_EBRACK); + + for (ch = 0; ch < 1 << BYTEWIDTH; ++ch) + { + # ifdef _LIBC + if (__iswctype (__btowc (ch), wt)) + SET_LIST_BIT (ch); + # else + if (iswctype (btowc (ch), wt)) + SET_LIST_BIT (ch); + # endif + + if (translate && (is_upper || is_lower) + && (ISUPPER (ch) || ISLOWER (ch))) + SET_LIST_BIT (ch); + } + + had_char_class = true; + # else + int ch; + boolean is_alnum = STREQ (str, "alnum"); + boolean is_alpha = STREQ (str, "alpha"); + boolean is_blank = STREQ (str, "blank"); + boolean is_cntrl = STREQ (str, "cntrl"); + boolean is_digit = STREQ (str, "digit"); + boolean is_graph = STREQ (str, "graph"); + boolean is_lower = STREQ (str, "lower"); + boolean is_print = STREQ (str, "print"); + boolean is_punct = STREQ (str, "punct"); + boolean is_space = STREQ (str, "space"); + boolean is_upper = STREQ (str, "upper"); + boolean is_xdigit = STREQ (str, "xdigit"); + + if (!IS_CHAR_CLASS (str)) + FREE_STACK_RETURN (REG_ECTYPE); + + /* Throw away the ] at the end of the character + class. */ + PATFETCH (c); + + if (p == pend) FREE_STACK_RETURN (REG_EBRACK); + + for (ch = 0; ch < 1 << BYTEWIDTH; ch++) + { + /* This was split into 3 if's to + avoid an arbitrary limit in some compiler. */ + if ( (is_alnum && ISALNUM (ch)) + || (is_alpha && ISALPHA (ch)) + || (is_blank && ISBLANK (ch)) + || (is_cntrl && ISCNTRL (ch))) + SET_LIST_BIT (ch); + if ( (is_digit && ISDIGIT (ch)) + || (is_graph && ISGRAPH (ch)) + || (is_lower && ISLOWER (ch)) + || (is_print && ISPRINT (ch))) + SET_LIST_BIT (ch); + if ( (is_punct && ISPUNCT (ch)) + || (is_space && ISSPACE (ch)) + || (is_upper && ISUPPER (ch)) + || (is_xdigit && ISXDIGIT (ch))) + SET_LIST_BIT (ch); + if ( translate && (is_upper || is_lower) + && (ISUPPER (ch) || ISLOWER (ch))) + SET_LIST_BIT (ch); + } + had_char_class = true; + # endif /* libc || wctype.h */ + } + else + { + c1++; + while (c1--) + PATUNFETCH; + SET_LIST_BIT ('['); + SET_LIST_BIT (':'); + range_start = ':'; + had_char_class = false; + } + } + else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == '=') + { + unsigned char str[MB_LEN_MAX + 1]; + # ifdef _LIBC + uint32_t nrules = + _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); + # endif + + PATFETCH (c); + c1 = 0; + + /* If pattern is `[[='. */ + if (p == pend) FREE_STACK_RETURN (REG_EBRACK); + + for (;;) + { + PATFETCH (c); + if ((c == '=' && *p == ']') || p == pend) + break; + if (c1 < MB_LEN_MAX) + str[c1++] = c; + else + /* This is in any case an invalid class name. */ + str[0] = '\0'; + } + str[c1] = '\0'; + + if (c == '=' && *p == ']' && str[0] != '\0') + { + /* If we have no collation data we use the default + collation in which each character is in a class + by itself. It also means that ASCII is the + character set and therefore we cannot have character + with more than one byte in the multibyte + representation. */ + # ifdef _LIBC + if (nrules == 0) + # endif + { + if (c1 != 1) + FREE_STACK_RETURN (REG_ECOLLATE); + + /* Throw away the ] at the end of the equivalence + class. */ + PATFETCH (c); + + /* Set the bit for the character. */ + SET_LIST_BIT (str[0]); + } + # ifdef _LIBC + else + { + /* Try to match the byte sequence in `str' against + those known to the collate implementation. + First find out whether the bytes in `str' are + actually from exactly one character. */ + const int32_t *table; + const unsigned char *weights; + const unsigned char *extra; + const int32_t *indirect; + int32_t idx; + const unsigned char *cp = str; + int ch; + + /* This #include defines a local function! */ + # include + + table = (const int32_t *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); + weights = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB); + extra = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB); + indirect = (const int32_t *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB); + + idx = findidx (&cp); + if (idx == 0 || cp < str + c1) + /* This is no valid character. */ + FREE_STACK_RETURN (REG_ECOLLATE); + + /* Throw away the ] at the end of the equivalence + class. */ + PATFETCH (c); + + /* Now we have to go throught the whole table + and find all characters which have the same + first level weight. + + XXX Note that this is not entirely correct. + we would have to match multibyte sequences + but this is not possible with the current + implementation. */ + for (ch = 1; ch < 256; ++ch) + /* XXX This test would have to be changed if we + would allow matching multibyte sequences. */ + if (table[ch] > 0) + { + int32_t idx2 = table[ch]; + size_t len = weights[idx2]; + + /* Test whether the lenghts match. */ + if (weights[idx] == len) + { + /* They do. New compare the bytes of + the weight. */ + size_t cnt = 0; + + while (cnt < len + && (weights[idx + 1 + cnt] + == weights[idx2 + 1 + cnt])) + ++cnt; + + if (cnt == len) + /* They match. Mark the character as + acceptable. */ + SET_LIST_BIT (ch); + } + } + } + # endif + had_char_class = true; + } + else + { + c1++; + while (c1--) + PATUNFETCH; + SET_LIST_BIT ('['); + SET_LIST_BIT ('='); + range_start = '='; + had_char_class = false; + } + } + else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == '.') + { + unsigned char str[128]; /* Should be large enough. */ + # ifdef _LIBC + uint32_t nrules = + _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); + # endif + + PATFETCH (c); + c1 = 0; + + /* If pattern is `[[.'. */ + if (p == pend) FREE_STACK_RETURN (REG_EBRACK); + + for (;;) + { + PATFETCH (c); + if ((c == '.' && *p == ']') || p == pend) + break; + if (c1 < sizeof (str)) + str[c1++] = c; + else + /* This is in any case an invalid class name. */ + str[0] = '\0'; + } + str[c1] = '\0'; + + if (c == '.' && *p == ']' && str[0] != '\0') + { + /* If we have no collation data we use the default + collation in which each character is the name + for its own class which contains only the one + character. It also means that ASCII is the + character set and therefore we cannot have character + with more than one byte in the multibyte + representation. */ + # ifdef _LIBC + if (nrules == 0) + # endif + { + if (c1 != 1) + FREE_STACK_RETURN (REG_ECOLLATE); + + /* Throw away the ] at the end of the equivalence + class. */ + PATFETCH (c); + + /* Set the bit for the character. */ + SET_LIST_BIT (str[0]); + range_start = ((const unsigned char *) str)[0]; + } + # ifdef _LIBC + else + { + /* Try to match the byte sequence in `str' against + those known to the collate implementation. + First find out whether the bytes in `str' are + actually from exactly one character. */ + int32_t table_size; + const int32_t *symb_table; + const unsigned char *extra; + int32_t idx; + int32_t elem; + int32_t second; + int32_t hash; + + table_size = + _NL_CURRENT_WORD (LC_COLLATE, + _NL_COLLATE_SYMB_HASH_SIZEMB); + symb_table = (const int32_t *) + _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_SYMB_TABLEMB); + extra = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_SYMB_EXTRAMB); + + /* Locate the character in the hashing table. */ + hash = elem_hash (str, c1); + + idx = 0; + elem = hash % table_size; + second = hash % (table_size - 2); + while (symb_table[2 * elem] != 0) + { + /* First compare the hashing value. */ + if (symb_table[2 * elem] == hash + && c1 == extra[symb_table[2 * elem + 1]] + && memcmp (str, + &extra[symb_table[2 * elem + 1] + + 1], + c1) == 0) + { + /* Yep, this is the entry. */ + idx = symb_table[2 * elem + 1]; + idx += 1 + extra[idx]; + break; + } + + /* Next entry. */ + elem += second; + } + + if (symb_table[2 * elem] == 0) + /* This is no valid character. */ + FREE_STACK_RETURN (REG_ECOLLATE); + + /* Throw away the ] at the end of the equivalence + class. */ + PATFETCH (c); + + /* Now add the multibyte character(s) we found + to the accept list. + + XXX Note that this is not entirely correct. + we would have to match multibyte sequences + but this is not possible with the current + implementation. Also, we have to match + collating symbols, which expand to more than + one file, as a whole and not allow the + individual bytes. */ + c1 = extra[idx++]; + if (c1 == 1) + range_start = extra[idx]; + while (c1-- > 0) + { + SET_LIST_BIT (extra[idx]); + ++idx; + } + } + # endif + had_char_class = false; + } + else + { + c1++; + while (c1--) + PATUNFETCH; + SET_LIST_BIT ('['); + SET_LIST_BIT ('.'); + range_start = '.'; + had_char_class = false; + } + } + else + { + had_char_class = false; + SET_LIST_BIT (c); + range_start = c; + } + } + + /* Discard any (non)matching list bytes that are all 0 at the + end of the map. Decrease the map-length byte too. */ + while ((int) b[-1] > 0 && b[b[-1] - 1] == 0) + b[-1]--; + b += b[-1]; + #endif /* WCHAR */ + } + break; + + + case '(': + if (syntax & RE_NO_BK_PARENS) + goto handle_open; + else + goto normal_char; + + + case ')': + if (syntax & RE_NO_BK_PARENS) + goto handle_close; + else + goto normal_char; + + + case '\n': + if (syntax & RE_NEWLINE_ALT) + goto handle_alt; + else + goto normal_char; + + + case '|': + if (syntax & RE_NO_BK_VBAR) + goto handle_alt; + else + goto normal_char; + + + case '{': + if (syntax & RE_INTERVALS && syntax & RE_NO_BK_BRACES) + goto handle_interval; + else + goto normal_char; + + + case '\\': + if (p == pend) FREE_STACK_RETURN (REG_EESCAPE); + + /* Do not translate the character after the \, so that we can + distinguish, e.g., \B from \b, even if we normally would + translate, e.g., B to b. */ + PATFETCH_RAW (c); + + switch (c) + { + case '(': + if (syntax & RE_NO_BK_PARENS) + goto normal_backslash; + + handle_open: + bufp->re_nsub++; + regnum++; + + if (COMPILE_STACK_FULL) + { + RETALLOC (compile_stack.stack, compile_stack.size << 1, + compile_stack_elt_t); + if (compile_stack.stack == NULL) return REG_ESPACE; + + compile_stack.size <<= 1; + } + + /* These are the values to restore when we hit end of this + group. They are all relative offsets, so that if the + whole pattern moves because of realloc, they will still + be valid. */ + COMPILE_STACK_TOP.begalt_offset = begalt - COMPILED_BUFFER_VAR; + COMPILE_STACK_TOP.fixup_alt_jump + = fixup_alt_jump ? fixup_alt_jump - COMPILED_BUFFER_VAR + 1 : 0; + COMPILE_STACK_TOP.laststart_offset = b - COMPILED_BUFFER_VAR; + COMPILE_STACK_TOP.regnum = regnum; + + /* We will eventually replace the 0 with the number of + groups inner to this one. But do not push a + start_memory for groups beyond the last one we can + represent in the compiled pattern. */ + if (regnum <= MAX_REGNUM) + { + COMPILE_STACK_TOP.inner_group_offset = b + - COMPILED_BUFFER_VAR + 2; + BUF_PUSH_3 (start_memory, regnum, 0); + } + + compile_stack.avail++; + + fixup_alt_jump = 0; + laststart = 0; + begalt = b; + /* If we've reached MAX_REGNUM groups, then this open + won't actually generate any code, so we'll have to + clear pending_exact explicitly. */ + pending_exact = 0; + break; + + + case ')': + if (syntax & RE_NO_BK_PARENS) goto normal_backslash; + + if (COMPILE_STACK_EMPTY) + { + if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD) + goto normal_backslash; + else + FREE_STACK_RETURN (REG_ERPAREN); + } + + handle_close: + if (fixup_alt_jump) + { /* Push a dummy failure point at the end of the + alternative for a possible future + `pop_failure_jump' to pop. See comments at + `push_dummy_failure' in `re_match_2'. */ + BUF_PUSH (push_dummy_failure); + + /* We allocated space for this jump when we assigned + to `fixup_alt_jump', in the `handle_alt' case below. */ + STORE_JUMP (jump_past_alt, fixup_alt_jump, b - 1); + } + + /* See similar code for backslashed left paren above. */ + if (COMPILE_STACK_EMPTY) + { + if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD) + goto normal_char; + else + FREE_STACK_RETURN (REG_ERPAREN); + } + + /* Since we just checked for an empty stack above, this + ``can't happen''. */ + assert (compile_stack.avail != 0); + { + /* We don't just want to restore into `regnum', because + later groups should continue to be numbered higher, + as in `(ab)c(de)' -- the second group is #2. */ + regnum_t this_group_regnum; + + compile_stack.avail--; + begalt = COMPILED_BUFFER_VAR + COMPILE_STACK_TOP.begalt_offset; + fixup_alt_jump + = COMPILE_STACK_TOP.fixup_alt_jump + ? COMPILED_BUFFER_VAR + COMPILE_STACK_TOP.fixup_alt_jump - 1 + : 0; + laststart = COMPILED_BUFFER_VAR + COMPILE_STACK_TOP.laststart_offset; + this_group_regnum = COMPILE_STACK_TOP.regnum; + /* If we've reached MAX_REGNUM groups, then this open + won't actually generate any code, so we'll have to + clear pending_exact explicitly. */ + pending_exact = 0; + + /* We're at the end of the group, so now we know how many + groups were inside this one. */ + if (this_group_regnum <= MAX_REGNUM) + { + UCHAR_T *inner_group_loc + = COMPILED_BUFFER_VAR + COMPILE_STACK_TOP.inner_group_offset; + + *inner_group_loc = regnum - this_group_regnum; + BUF_PUSH_3 (stop_memory, this_group_regnum, + regnum - this_group_regnum); + } + } + break; + + + case '|': /* `\|'. */ + if (syntax & RE_LIMITED_OPS || syntax & RE_NO_BK_VBAR) + goto normal_backslash; + handle_alt: + if (syntax & RE_LIMITED_OPS) + goto normal_char; + + /* Insert before the previous alternative a jump which + jumps to this alternative if the former fails. */ + GET_BUFFER_SPACE (1 + OFFSET_ADDRESS_SIZE); + INSERT_JUMP (on_failure_jump, begalt, + b + 2 + 2 * OFFSET_ADDRESS_SIZE); + pending_exact = 0; + b += 1 + OFFSET_ADDRESS_SIZE; + + /* The alternative before this one has a jump after it + which gets executed if it gets matched. Adjust that + jump so it will jump to this alternative's analogous + jump (put in below, which in turn will jump to the next + (if any) alternative's such jump, etc.). The last such + jump jumps to the correct final destination. A picture: + _____ _____ + | | | | + | v | v + a | b | c + + If we are at `b', then fixup_alt_jump right now points to a + three-byte space after `a'. We'll put in the jump, set + fixup_alt_jump to right after `b', and leave behind three + bytes which we'll fill in when we get to after `c'. */ + + if (fixup_alt_jump) + STORE_JUMP (jump_past_alt, fixup_alt_jump, b); + + /* Mark and leave space for a jump after this alternative, + to be filled in later either by next alternative or + when know we're at the end of a series of alternatives. */ + fixup_alt_jump = b; + GET_BUFFER_SPACE (1 + OFFSET_ADDRESS_SIZE); + b += 1 + OFFSET_ADDRESS_SIZE; + + laststart = 0; + begalt = b; + break; + + + case '{': + /* If \{ is a literal. */ + if (!(syntax & RE_INTERVALS) + /* If we're at `\{' and it's not the open-interval + operator. */ + || (syntax & RE_NO_BK_BRACES)) + goto normal_backslash; + + handle_interval: + { + /* If got here, then the syntax allows intervals. */ + + /* At least (most) this many matches must be made. */ + int lower_bound = -1, upper_bound = -1; + + /* Place in the uncompiled pattern (i.e., just after + the '{') to go back to if the interval is invalid. */ + const CHAR_T *beg_interval = p; + + if (p == pend) + goto invalid_interval; + + GET_UNSIGNED_NUMBER (lower_bound); + + if (c == ',') + { + GET_UNSIGNED_NUMBER (upper_bound); + if (upper_bound < 0) + upper_bound = RE_DUP_MAX; + } + else + /* Interval such as `{1}' => match exactly once. */ + upper_bound = lower_bound; + + if (! (0 <= lower_bound && lower_bound <= upper_bound)) + goto invalid_interval; + + if (!(syntax & RE_NO_BK_BRACES)) + { + if (c != '\\' || p == pend) + goto invalid_interval; + PATFETCH (c); + } + + if (c != '}') + goto invalid_interval; + + /* If it's invalid to have no preceding re. */ + if (!laststart) + { + if (syntax & RE_CONTEXT_INVALID_OPS + && !(syntax & RE_INVALID_INTERVAL_ORD)) + FREE_STACK_RETURN (REG_BADRPT); + else if (syntax & RE_CONTEXT_INDEP_OPS) + laststart = b; + else + goto unfetch_interval; + } + + /* We just parsed a valid interval. */ + + if (RE_DUP_MAX < upper_bound) + FREE_STACK_RETURN (REG_BADBR); + + /* If the upper bound is zero, don't want to succeed at + all; jump from `laststart' to `b + 3', which will be + the end of the buffer after we insert the jump. */ + /* ifdef WCHAR, 'b + 1 + OFFSET_ADDRESS_SIZE' + instead of 'b + 3'. */ + if (upper_bound == 0) + { + GET_BUFFER_SPACE (1 + OFFSET_ADDRESS_SIZE); + INSERT_JUMP (jump, laststart, b + 1 + + OFFSET_ADDRESS_SIZE); + b += 1 + OFFSET_ADDRESS_SIZE; + } + + /* Otherwise, we have a nontrivial interval. When + we're all done, the pattern will look like: + set_number_at + set_number_at + succeed_n + + jump_n + (The upper bound and `jump_n' are omitted if + `upper_bound' is 1, though.) */ + else + { /* If the upper bound is > 1, we need to insert + more at the end of the loop. */ + unsigned nbytes = 2 + 4 * OFFSET_ADDRESS_SIZE + + (upper_bound > 1) * (2 + 4 * OFFSET_ADDRESS_SIZE); + + GET_BUFFER_SPACE (nbytes); + + /* Initialize lower bound of the `succeed_n', even + though it will be set during matching by its + attendant `set_number_at' (inserted next), + because `re_compile_fastmap' needs to know. + Jump to the `jump_n' we might insert below. */ + INSERT_JUMP2 (succeed_n, laststart, + b + 1 + 2 * OFFSET_ADDRESS_SIZE + + (upper_bound > 1) * (1 + 2 * OFFSET_ADDRESS_SIZE) + , lower_bound); + b += 1 + 2 * OFFSET_ADDRESS_SIZE; + + /* Code to initialize the lower bound. Insert + before the `succeed_n'. The `5' is the last two + bytes of this `set_number_at', plus 3 bytes of + the following `succeed_n'. */ + /* ifdef WCHAR, The '1+2*OFFSET_ADDRESS_SIZE' + is the 'set_number_at', plus '1+OFFSET_ADDRESS_SIZE' + of the following `succeed_n'. */ + PREFIX(insert_op2) (set_number_at, laststart, 1 + + 2 * OFFSET_ADDRESS_SIZE, lower_bound, b); + b += 1 + 2 * OFFSET_ADDRESS_SIZE; + + if (upper_bound > 1) + { /* More than one repetition is allowed, so + append a backward jump to the `succeed_n' + that starts this interval. + + When we've reached this during matching, + we'll have matched the interval once, so + jump back only `upper_bound - 1' times. */ + STORE_JUMP2 (jump_n, b, laststart + + 2 * OFFSET_ADDRESS_SIZE + 1, + upper_bound - 1); + b += 1 + 2 * OFFSET_ADDRESS_SIZE; + + /* The location we want to set is the second + parameter of the `jump_n'; that is `b-2' as + an absolute address. `laststart' will be + the `set_number_at' we're about to insert; + `laststart+3' the number to set, the source + for the relative address. But we are + inserting into the middle of the pattern -- + so everything is getting moved up by 5. + Conclusion: (b - 2) - (laststart + 3) + 5, + i.e., b - laststart. + + We insert this at the beginning of the loop + so that if we fail during matching, we'll + reinitialize the bounds. */ + PREFIX(insert_op2) (set_number_at, laststart, + b - laststart, + upper_bound - 1, b); + b += 1 + 2 * OFFSET_ADDRESS_SIZE; + } + } + pending_exact = 0; + break; + + invalid_interval: + if (!(syntax & RE_INVALID_INTERVAL_ORD)) + FREE_STACK_RETURN (p == pend ? REG_EBRACE : REG_BADBR); + unfetch_interval: + /* Match the characters as literals. */ + p = beg_interval; + c = '{'; + if (syntax & RE_NO_BK_BRACES) + goto normal_char; + else + goto normal_backslash; + } + + #ifdef emacs + /* There is no way to specify the before_dot and after_dot + operators. rms says this is ok. --karl */ + case '=': + BUF_PUSH (at_dot); + break; + + case 's': + laststart = b; + PATFETCH (c); + BUF_PUSH_2 (syntaxspec, syntax_spec_code[c]); + break; + + case 'S': + laststart = b; + PATFETCH (c); + BUF_PUSH_2 (notsyntaxspec, syntax_spec_code[c]); + break; + #endif /* emacs */ + + + case 'w': + if (syntax & RE_NO_GNU_OPS) + goto normal_char; + laststart = b; + BUF_PUSH (wordchar); + break; + + + case 'W': + if (syntax & RE_NO_GNU_OPS) + goto normal_char; + laststart = b; + BUF_PUSH (notwordchar); + break; + + + case '<': + if (syntax & RE_NO_GNU_OPS) + goto normal_char; + BUF_PUSH (wordbeg); + break; + + case '>': + if (syntax & RE_NO_GNU_OPS) + goto normal_char; + BUF_PUSH (wordend); + break; + + case 'b': + if (syntax & RE_NO_GNU_OPS) + goto normal_char; + BUF_PUSH (wordbound); + break; + + case 'B': + if (syntax & RE_NO_GNU_OPS) + goto normal_char; + BUF_PUSH (notwordbound); + break; + + case '`': + if (syntax & RE_NO_GNU_OPS) + goto normal_char; + BUF_PUSH (begbuf); + break; + + case '\'': + if (syntax & RE_NO_GNU_OPS) + goto normal_char; + BUF_PUSH (endbuf); + break; + + case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + if (syntax & RE_NO_BK_REFS) + goto normal_char; + + c1 = c - '0'; + + if (c1 > regnum) + FREE_STACK_RETURN (REG_ESUBREG); + + /* Can't back reference to a subexpression if inside of it. */ + if (group_in_compile_stack (compile_stack, (regnum_t) c1)) + goto normal_char; + + laststart = b; + BUF_PUSH_2 (duplicate, c1); + break; + + + case '+': + case '?': + if (syntax & RE_BK_PLUS_QM) + goto handle_plus; + else + goto normal_backslash; + + default: + normal_backslash: + /* You might think it would be useful for \ to mean + not to translate; but if we don't translate it + it will never match anything. */ + c = TRANSLATE (c); + goto normal_char; + } + break; + + + default: + /* Expects the character in `c'. */ + normal_char: + /* If no exactn currently being built. */ + if (!pending_exact + #ifdef WCHAR + /* If last exactn handle binary(or character) and + new exactn handle character(or binary). */ + || is_exactn_bin != is_binary[p - 1 - pattern] + #endif /* WCHAR */ + + /* If last exactn not at current position. */ + || pending_exact + *pending_exact + 1 != b + + /* We have only one byte following the exactn for the count. */ + || *pending_exact == (1 << BYTEWIDTH) - 1 + + /* If followed by a repetition operator. */ + || *p == '*' || *p == '^' + || ((syntax & RE_BK_PLUS_QM) + ? *p == '\\' && (p[1] == '+' || p[1] == '?') + : (*p == '+' || *p == '?')) + || ((syntax & RE_INTERVALS) + && ((syntax & RE_NO_BK_BRACES) + ? *p == '{' + : (p[0] == '\\' && p[1] == '{')))) + { + /* Start building a new exactn. */ + + laststart = b; + + #ifdef WCHAR + /* Is this exactn binary data or character? */ + is_exactn_bin = is_binary[p - 1 - pattern]; + if (is_exactn_bin) + BUF_PUSH_2 (exactn_bin, 0); + else + BUF_PUSH_2 (exactn, 0); + #else + BUF_PUSH_2 (exactn, 0); + #endif /* WCHAR */ + pending_exact = b - 1; + } + + BUF_PUSH (c); + (*pending_exact)++; + break; + } /* switch (c) */ + } /* while p != pend */ + + + /* Through the pattern now. */ + + if (fixup_alt_jump) + STORE_JUMP (jump_past_alt, fixup_alt_jump, b); + + if (!COMPILE_STACK_EMPTY) + FREE_STACK_RETURN (REG_EPAREN); + + /* If we don't want backtracking, force success + the first time we reach the end of the compiled pattern. */ + if (syntax & RE_NO_POSIX_BACKTRACKING) + BUF_PUSH (succeed); + + #ifdef WCHAR + free (pattern); + free (mbs_offset); + free (is_binary); + #endif + free (compile_stack.stack); + + /* We have succeeded; set the length of the buffer. */ + #ifdef WCHAR + bufp->used = (uintptr_t) b - (uintptr_t) COMPILED_BUFFER_VAR; + #else + bufp->used = b - bufp->buffer; + #endif + + #ifdef DEBUG + if (debug) + { + DEBUG_PRINT1 ("\nCompiled pattern: \n"); + PREFIX(print_compiled_pattern) (bufp); + } + #endif /* DEBUG */ + + #ifndef MATCH_MAY_ALLOCATE + /* Initialize the failure stack to the largest possible stack. This + isn't necessary unless we're trying to avoid calling alloca in + the search and match routines. */ + { + int num_regs = bufp->re_nsub + 1; + + /* Since DOUBLE_FAIL_STACK refuses to double only if the current size + is strictly greater than re_max_failures, the largest possible stack + is 2 * re_max_failures failure points. */ + if (fail_stack.size < (2 * re_max_failures * MAX_FAILURE_ITEMS)) + { + fail_stack.size = (2 * re_max_failures * MAX_FAILURE_ITEMS); + + # ifdef emacs + if (! fail_stack.stack) + fail_stack.stack + = (PREFIX(fail_stack_elt_t) *) xmalloc (fail_stack.size + * sizeof (PREFIX(fail_stack_elt_t))); + else + fail_stack.stack + = (PREFIX(fail_stack_elt_t) *) xrealloc (fail_stack.stack, + (fail_stack.size + * sizeof (PREFIX(fail_stack_elt_t)))); + # else /* not emacs */ + if (! fail_stack.stack) + fail_stack.stack + = (PREFIX(fail_stack_elt_t) *) malloc (fail_stack.size + * sizeof (PREFIX(fail_stack_elt_t))); + else + fail_stack.stack + = (PREFIX(fail_stack_elt_t) *) realloc (fail_stack.stack, + (fail_stack.size + * sizeof (PREFIX(fail_stack_elt_t)))); + # endif /* not emacs */ + } + + PREFIX(regex_grow_registers) (num_regs); + } + #endif /* not MATCH_MAY_ALLOCATE */ + + return REG_NOERROR; + } /* regex_compile */ + + /* Subroutines for `regex_compile'. */ + + /* Store OP at LOC followed by two-byte integer parameter ARG. */ + /* ifdef WCHAR, integer parameter is 1 wchar_t. */ + + static void + PREFIX(store_op1) (op, loc, arg) + re_opcode_t op; + UCHAR_T *loc; + int arg; + { + *loc = (UCHAR_T) op; + STORE_NUMBER (loc + 1, arg); + } + + + /* Like `store_op1', but for two two-byte parameters ARG1 and ARG2. */ + /* ifdef WCHAR, integer parameter is 1 wchar_t. */ + + static void + PREFIX(store_op2) (op, loc, arg1, arg2) + re_opcode_t op; + UCHAR_T *loc; + int arg1, arg2; + { + *loc = (UCHAR_T) op; + STORE_NUMBER (loc + 1, arg1); + STORE_NUMBER (loc + 1 + OFFSET_ADDRESS_SIZE, arg2); + } + + + /* Copy the bytes from LOC to END to open up three bytes of space at LOC + for OP followed by two-byte integer parameter ARG. */ + /* ifdef WCHAR, integer parameter is 1 wchar_t. */ + + static void + PREFIX(insert_op1) (op, loc, arg, end) + re_opcode_t op; + UCHAR_T *loc; + int arg; + UCHAR_T *end; + { + register UCHAR_T *pfrom = end; + register UCHAR_T *pto = end + 1 + OFFSET_ADDRESS_SIZE; + + while (pfrom != loc) + *--pto = *--pfrom; + + PREFIX(store_op1) (op, loc, arg); + } + + + /* Like `insert_op1', but for two two-byte parameters ARG1 and ARG2. */ + /* ifdef WCHAR, integer parameter is 1 wchar_t. */ + + static void + PREFIX(insert_op2) (op, loc, arg1, arg2, end) + re_opcode_t op; + UCHAR_T *loc; + int arg1, arg2; + UCHAR_T *end; + { + register UCHAR_T *pfrom = end; + register UCHAR_T *pto = end + 1 + 2 * OFFSET_ADDRESS_SIZE; + + while (pfrom != loc) + *--pto = *--pfrom; + + PREFIX(store_op2) (op, loc, arg1, arg2); + } + + + /* P points to just after a ^ in PATTERN. Return true if that ^ comes + after an alternative or a begin-subexpression. We assume there is at + least one character before the ^. */ + + static boolean + PREFIX(at_begline_loc_p) (pattern, p, syntax) + const CHAR_T *pattern, *p; + reg_syntax_t syntax; + { + const CHAR_T *prev = p - 2; + boolean prev_prev_backslash = prev > pattern && prev[-1] == '\\'; + + return + /* After a subexpression? */ + (*prev == '(' && (syntax & RE_NO_BK_PARENS || prev_prev_backslash)) + /* After an alternative? */ + || (*prev == '|' && (syntax & RE_NO_BK_VBAR || prev_prev_backslash)); + } + + + /* The dual of at_begline_loc_p. This one is for $. We assume there is + at least one character after the $, i.e., `P < PEND'. */ + + static boolean + PREFIX(at_endline_loc_p) (p, pend, syntax) + const CHAR_T *p, *pend; + reg_syntax_t syntax; + { + const CHAR_T *next = p; + boolean next_backslash = *next == '\\'; + const CHAR_T *next_next = p + 1 < pend ? p + 1 : 0; + + return + /* Before a subexpression? */ + (syntax & RE_NO_BK_PARENS ? *next == ')' + : next_backslash && next_next && *next_next == ')') + /* Before an alternative? */ + || (syntax & RE_NO_BK_VBAR ? *next == '|' + : next_backslash && next_next && *next_next == '|'); + } + + #else /* not INSIDE_RECURSION */ + + /* Returns true if REGNUM is in one of COMPILE_STACK's elements and + false if it's not. */ + + static boolean + group_in_compile_stack (compile_stack, regnum) + compile_stack_type compile_stack; + regnum_t regnum; + { + int this_element; + + for (this_element = compile_stack.avail - 1; + this_element >= 0; + this_element--) + if (compile_stack.stack[this_element].regnum == regnum) + return true; + + return false; + } + #endif /* not INSIDE_RECURSION */ + + #ifdef INSIDE_RECURSION + + #ifdef WCHAR + /* This insert space, which size is "num", into the pattern at "loc". + "end" must point the end of the allocated buffer. */ + static void + insert_space (num, loc, end) + int num; + CHAR_T *loc; + CHAR_T *end; + { + register CHAR_T *pto = end; + register CHAR_T *pfrom = end - num; + + while (pfrom >= loc) + *pto-- = *pfrom--; + } + #endif /* WCHAR */ + + #ifdef WCHAR + static reg_errcode_t + wcs_compile_range (range_start_char, p_ptr, pend, translate, syntax, b, + char_set) + CHAR_T range_start_char; + const CHAR_T **p_ptr, *pend; + CHAR_T *char_set, *b; + RE_TRANSLATE_TYPE translate; + reg_syntax_t syntax; + { + const CHAR_T *p = *p_ptr; + CHAR_T range_start, range_end; + reg_errcode_t ret; + # ifdef _LIBC + uint32_t nrules; + uint32_t start_val, end_val; + # endif + if (p == pend) + return REG_ERANGE; + + # ifdef _LIBC + nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); + if (nrules != 0) + { + const char *collseq = (const char *) _NL_CURRENT(LC_COLLATE, + _NL_COLLATE_COLLSEQWC); + const unsigned char *extra = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); + + if (range_start_char < -1) + { + /* range_start is a collating symbol. */ + int32_t *wextra; + /* Retreive the index and get collation sequence value. */ + wextra = (int32_t*)(extra + char_set[-range_start_char]); + start_val = wextra[1 + *wextra]; + } + else + start_val = collseq_table_lookup(collseq, TRANSLATE(range_start_char)); + + end_val = collseq_table_lookup (collseq, TRANSLATE (p[0])); + + /* Report an error if the range is empty and the syntax prohibits + this. */ + ret = ((syntax & RE_NO_EMPTY_RANGES) + && (start_val > end_val))? REG_ERANGE : REG_NOERROR; + + /* Insert space to the end of the char_ranges. */ + insert_space(2, b - char_set[5] - 2, b - 1); + *(b - char_set[5] - 2) = (wchar_t)start_val; + *(b - char_set[5] - 1) = (wchar_t)end_val; + char_set[4]++; /* ranges_index */ + } + else + # endif + { + range_start = (range_start_char >= 0)? TRANSLATE (range_start_char): + range_start_char; + range_end = TRANSLATE (p[0]); + /* Report an error if the range is empty and the syntax prohibits + this. */ + ret = ((syntax & RE_NO_EMPTY_RANGES) + && (range_start > range_end))? REG_ERANGE : REG_NOERROR; + + /* Insert space to the end of the char_ranges. */ + insert_space(2, b - char_set[5] - 2, b - 1); + *(b - char_set[5] - 2) = range_start; + *(b - char_set[5] - 1) = range_end; + char_set[4]++; /* ranges_index */ + } + /* Have to increment the pointer into the pattern string, so the + caller isn't still at the ending character. */ + (*p_ptr)++; + + return ret; + } + #else /* BYTE */ + /* Read the ending character of a range (in a bracket expression) from the + uncompiled pattern *P_PTR (which ends at PEND). We assume the + starting character is in `P[-2]'. (`P[-1]' is the character `-'.) + Then we set the translation of all bits between the starting and + ending characters (inclusive) in the compiled pattern B. + + Return an error code. + + We use these short variable names so we can use the same macros as + `regex_compile' itself. */ + + static reg_errcode_t + byte_compile_range (range_start_char, p_ptr, pend, translate, syntax, b) + unsigned int range_start_char; + const char **p_ptr, *pend; + RE_TRANSLATE_TYPE translate; + reg_syntax_t syntax; + unsigned char *b; + { + unsigned this_char; + const char *p = *p_ptr; + reg_errcode_t ret; + # if _LIBC + const unsigned char *collseq; + unsigned int start_colseq; + unsigned int end_colseq; + # else + unsigned end_char; + # endif + + if (p == pend) + return REG_ERANGE; + + /* Have to increment the pointer into the pattern string, so the + caller isn't still at the ending character. */ + (*p_ptr)++; + + /* Report an error if the range is empty and the syntax prohibits this. */ + ret = syntax & RE_NO_EMPTY_RANGES ? REG_ERANGE : REG_NOERROR; + + # if _LIBC + collseq = (const unsigned char *) _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_COLLSEQMB); + + start_colseq = collseq[(unsigned char) TRANSLATE (range_start_char)]; + end_colseq = collseq[(unsigned char) TRANSLATE (p[0])]; + for (this_char = 0; this_char <= (unsigned char) -1; ++this_char) + { + unsigned int this_colseq = collseq[(unsigned char) TRANSLATE (this_char)]; + + if (start_colseq <= this_colseq && this_colseq <= end_colseq) + { + SET_LIST_BIT (TRANSLATE (this_char)); + ret = REG_NOERROR; + } + } + # else + /* Here we see why `this_char' has to be larger than an `unsigned + char' -- we would otherwise go into an infinite loop, since all + characters <= 0xff. */ + range_start_char = TRANSLATE (range_start_char); + /* TRANSLATE(p[0]) is casted to char (not unsigned char) in TRANSLATE, + and some compilers cast it to int implicitly, so following for_loop + may fall to (almost) infinite loop. + e.g. If translate[p[0]] = 0xff, end_char may equals to 0xffffffff. + To avoid this, we cast p[0] to unsigned int and truncate it. */ + end_char = ((unsigned)TRANSLATE(p[0]) & ((1 << BYTEWIDTH) - 1)); + + for (this_char = range_start_char; this_char <= end_char; ++this_char) + { + SET_LIST_BIT (TRANSLATE (this_char)); + ret = REG_NOERROR; + } + # endif + + return ret; + } + #endif /* WCHAR */ + + /* re_compile_fastmap computes a ``fastmap'' for the compiled pattern in + BUFP. A fastmap records which of the (1 << BYTEWIDTH) possible + characters can start a string that matches the pattern. This fastmap + is used by re_search to skip quickly over impossible starting points. + + The caller must supply the address of a (1 << BYTEWIDTH)-byte data + area as BUFP->fastmap. + + We set the `fastmap', `fastmap_accurate', and `can_be_null' fields in + the pattern buffer. + + Returns 0 if we succeed, -2 if an internal error. */ + + #ifdef WCHAR + /* local function for re_compile_fastmap. + truncate wchar_t character to char. */ + static unsigned char truncate_wchar (CHAR_T c); + + static unsigned char + truncate_wchar (c) + CHAR_T c; + { + unsigned char buf[MB_CUR_MAX]; + mbstate_t state; + int retval; + memset (&state, '\0', sizeof (state)); + # ifdef _LIBC + retval = __wcrtomb (buf, c, &state); + # else + retval = wcrtomb (buf, c, &state); + # endif + return retval > 0 ? buf[0] : (unsigned char) c; + } + #endif /* WCHAR */ + + static int + PREFIX(re_compile_fastmap) (bufp) + struct re_pattern_buffer *bufp; + { + int j, k; + #ifdef MATCH_MAY_ALLOCATE + PREFIX(fail_stack_type) fail_stack; + #endif + #ifndef REGEX_MALLOC + char *destination; + #endif + + register char *fastmap = bufp->fastmap; + + #ifdef WCHAR + /* We need to cast pattern to (wchar_t*), because we casted this compiled + pattern to (char*) in regex_compile. */ + UCHAR_T *pattern = (UCHAR_T*)bufp->buffer; + register UCHAR_T *pend = (UCHAR_T*) (bufp->buffer + bufp->used); + #else /* BYTE */ + UCHAR_T *pattern = bufp->buffer; + register UCHAR_T *pend = pattern + bufp->used; + #endif /* WCHAR */ + UCHAR_T *p = pattern; + + #ifdef REL_ALLOC + /* This holds the pointer to the failure stack, when + it is allocated relocatably. */ + fail_stack_elt_t *failure_stack_ptr; + #endif + + /* Assume that each path through the pattern can be null until + proven otherwise. We set this false at the bottom of switch + statement, to which we get only if a particular path doesn't + match the empty string. */ + boolean path_can_be_null = true; + + /* We aren't doing a `succeed_n' to begin with. */ + boolean succeed_n_p = false; + + assert (fastmap != NULL && p != NULL); + + INIT_FAIL_STACK (); + bzero (fastmap, 1 << BYTEWIDTH); /* Assume nothing's valid. */ + bufp->fastmap_accurate = 1; /* It will be when we're done. */ + bufp->can_be_null = 0; + + while (1) + { + if (p == pend || *p == succeed) + { + /* We have reached the (effective) end of pattern. */ + if (!FAIL_STACK_EMPTY ()) + { + bufp->can_be_null |= path_can_be_null; + + /* Reset for next path. */ + path_can_be_null = true; + + p = fail_stack.stack[--fail_stack.avail].pointer; + + continue; + } + else + break; + } + + /* We should never be about to go beyond the end of the pattern. */ + assert (p < pend); + + switch (SWITCH_ENUM_CAST ((re_opcode_t) *p++)) + { + + /* I guess the idea here is to simply not bother with a fastmap + if a backreference is used, since it's too hard to figure out + the fastmap for the corresponding group. Setting + `can_be_null' stops `re_search_2' from using the fastmap, so + that is all we do. */ + case duplicate: + bufp->can_be_null = 1; + goto done; + + + /* Following are the cases which match a character. These end + with `break'. */ + + #ifdef WCHAR + case exactn: + fastmap[truncate_wchar(p[1])] = 1; + break; + #else /* BYTE */ + case exactn: + fastmap[p[1]] = 1; + break; + #endif /* WCHAR */ + #ifdef MBS_SUPPORT + case exactn_bin: + fastmap[p[1]] = 1; + break; + #endif + + #ifdef WCHAR + /* It is hard to distinguish fastmap from (multi byte) characters + which depends on current locale. */ + case charset: + case charset_not: + case wordchar: + case notwordchar: + bufp->can_be_null = 1; + goto done; + #else /* BYTE */ + case charset: + for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--) + if (p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH))) + fastmap[j] = 1; + break; + + + case charset_not: + /* Chars beyond end of map must be allowed. */ + for (j = *p * BYTEWIDTH; j < (1 << BYTEWIDTH); j++) + fastmap[j] = 1; + + for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--) + if (!(p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH)))) + fastmap[j] = 1; + break; + + + case wordchar: + for (j = 0; j < (1 << BYTEWIDTH); j++) + if (SYNTAX (j) == Sword) + fastmap[j] = 1; + break; + + + case notwordchar: + for (j = 0; j < (1 << BYTEWIDTH); j++) + if (SYNTAX (j) != Sword) + fastmap[j] = 1; + break; + #endif /* WCHAR */ + + case anychar: + { + int fastmap_newline = fastmap['\n']; + + /* `.' matches anything ... */ + for (j = 0; j < (1 << BYTEWIDTH); j++) + fastmap[j] = 1; + + /* ... except perhaps newline. */ + if (!(bufp->syntax & RE_DOT_NEWLINE)) + fastmap['\n'] = fastmap_newline; + + /* Return if we have already set `can_be_null'; if we have, + then the fastmap is irrelevant. Something's wrong here. */ + else if (bufp->can_be_null) + goto done; + + /* Otherwise, have to check alternative paths. */ + break; + } + + #ifdef emacs + case syntaxspec: + k = *p++; + for (j = 0; j < (1 << BYTEWIDTH); j++) + if (SYNTAX (j) == (enum syntaxcode) k) + fastmap[j] = 1; + break; + + + case notsyntaxspec: + k = *p++; + for (j = 0; j < (1 << BYTEWIDTH); j++) + if (SYNTAX (j) != (enum syntaxcode) k) + fastmap[j] = 1; + break; + + + /* All cases after this match the empty string. These end with + `continue'. */ + + + case before_dot: + case at_dot: + case after_dot: + continue; + #endif /* emacs */ + + + case no_op: + case begline: + case endline: + case begbuf: + case endbuf: + case wordbound: + case notwordbound: + case wordbeg: + case wordend: + case push_dummy_failure: + continue; + + + case jump_n: + case pop_failure_jump: + case maybe_pop_jump: + case jump: + case jump_past_alt: + case dummy_failure_jump: + EXTRACT_NUMBER_AND_INCR (j, p); + p += j; + if (j > 0) + continue; + + /* Jump backward implies we just went through the body of a + loop and matched nothing. Opcode jumped to should be + `on_failure_jump' or `succeed_n'. Just treat it like an + ordinary jump. For a * loop, it has pushed its failure + point already; if so, discard that as redundant. */ + if ((re_opcode_t) *p != on_failure_jump + && (re_opcode_t) *p != succeed_n) + continue; + + p++; + EXTRACT_NUMBER_AND_INCR (j, p); + p += j; + + /* If what's on the stack is where we are now, pop it. */ + if (!FAIL_STACK_EMPTY () + && fail_stack.stack[fail_stack.avail - 1].pointer == p) + fail_stack.avail--; + + continue; + + + case on_failure_jump: + case on_failure_keep_string_jump: + handle_on_failure_jump: + EXTRACT_NUMBER_AND_INCR (j, p); + + /* For some patterns, e.g., `(a?)?', `p+j' here points to the + end of the pattern. We don't want to push such a point, + since when we restore it above, entering the switch will + increment `p' past the end of the pattern. We don't need + to push such a point since we obviously won't find any more + fastmap entries beyond `pend'. Such a pattern can match + the null string, though. */ + if (p + j < pend) + { + if (!PUSH_PATTERN_OP (p + j, fail_stack)) + { + RESET_FAIL_STACK (); + return -2; + } + } + else + bufp->can_be_null = 1; + + if (succeed_n_p) + { + EXTRACT_NUMBER_AND_INCR (k, p); /* Skip the n. */ + succeed_n_p = false; + } + + continue; + + + case succeed_n: + /* Get to the number of times to succeed. */ + p += OFFSET_ADDRESS_SIZE; + + /* Increment p past the n for when k != 0. */ + EXTRACT_NUMBER_AND_INCR (k, p); + if (k == 0) + { + p -= 2 * OFFSET_ADDRESS_SIZE; + succeed_n_p = true; /* Spaghetti code alert. */ + goto handle_on_failure_jump; + } + continue; + + + case set_number_at: + p += 2 * OFFSET_ADDRESS_SIZE; + continue; + + + case start_memory: + case stop_memory: + p += 2; + continue; + + + default: + abort (); /* We have listed all the cases. */ + } /* switch *p++ */ + + /* Getting here means we have found the possible starting + characters for one path of the pattern -- and that the empty + string does not match. We need not follow this path further. + Instead, look at the next alternative (remembered on the + stack), or quit if no more. The test at the top of the loop + does these things. */ + path_can_be_null = false; + p = pend; + } /* while p */ + + /* Set `can_be_null' for the last path (also the first path, if the + pattern is empty). */ + bufp->can_be_null |= path_can_be_null; + + done: + RESET_FAIL_STACK (); + return 0; + } + + #else /* not INSIDE_RECURSION */ + + int + re_compile_fastmap (bufp) + struct re_pattern_buffer *bufp; + { + # ifdef MBS_SUPPORT + if (MB_CUR_MAX != 1) + return wcs_re_compile_fastmap(bufp); + else + # endif + return byte_re_compile_fastmap(bufp); + } /* re_compile_fastmap */ + #ifdef _LIBC + weak_alias (__re_compile_fastmap, re_compile_fastmap) + #endif + + + /* Set REGS to hold NUM_REGS registers, storing them in STARTS and + ENDS. Subsequent matches using PATTERN_BUFFER and REGS will use + this memory for recording register information. STARTS and ENDS + must be allocated using the malloc library routine, and must each + be at least NUM_REGS * sizeof (regoff_t) bytes long. + + If NUM_REGS == 0, then subsequent matches should allocate their own + register data. + + Unless this function is called, the first search or match using + PATTERN_BUFFER will allocate its own register data, without + freeing the old data. */ + + void + re_set_registers (bufp, regs, num_regs, starts, ends) + struct re_pattern_buffer *bufp; + struct re_registers *regs; + unsigned num_regs; + regoff_t *starts, *ends; + { + if (num_regs) + { + bufp->regs_allocated = REGS_REALLOCATE; + regs->num_regs = num_regs; + regs->start = starts; + regs->end = ends; + } + else + { + bufp->regs_allocated = REGS_UNALLOCATED; + regs->num_regs = 0; + regs->start = regs->end = (regoff_t *) 0; + } + } + #ifdef _LIBC + weak_alias (__re_set_registers, re_set_registers) + #endif + + /* Searching routines. */ + + /* Like re_search_2, below, but only one string is specified, and + doesn't let you say where to stop matching. */ + + int + re_search (bufp, string, size, startpos, range, regs) + struct re_pattern_buffer *bufp; + const char *string; + int size, startpos, range; + struct re_registers *regs; + { + return re_search_2 (bufp, NULL, 0, string, size, startpos, range, + regs, size); + } + #ifdef _LIBC + weak_alias (__re_search, re_search) + #endif + + + /* Using the compiled pattern in BUFP->buffer, first tries to match the + virtual concatenation of STRING1 and STRING2, starting first at index + STARTPOS, then at STARTPOS + 1, and so on. + + STRING1 and STRING2 have length SIZE1 and SIZE2, respectively. + + RANGE is how far to scan while trying to match. RANGE = 0 means try + only at STARTPOS; in general, the last start tried is STARTPOS + + RANGE. + + In REGS, return the indices of the virtual concatenation of STRING1 + and STRING2 that matched the entire BUFP->buffer and its contained + subexpressions. + + Do not consider matching one past the index STOP in the virtual + concatenation of STRING1 and STRING2. + + We return either the position in the strings at which the match was + found, -1 if no match, or -2 if error (such as failure + stack overflow). */ + + int + re_search_2 (bufp, string1, size1, string2, size2, startpos, range, regs, stop) + struct re_pattern_buffer *bufp; + const char *string1, *string2; + int size1, size2; + int startpos; + int range; + struct re_registers *regs; + int stop; + { + # ifdef MBS_SUPPORT + if (MB_CUR_MAX != 1) + return wcs_re_search_2 (bufp, string1, size1, string2, size2, startpos, + range, regs, stop); + else + # endif + return byte_re_search_2 (bufp, string1, size1, string2, size2, startpos, + range, regs, stop); + } /* re_search_2 */ + #ifdef _LIBC + weak_alias (__re_search_2, re_search_2) + #endif + + #endif /* not INSIDE_RECURSION */ + + #ifdef INSIDE_RECURSION + + #ifdef MATCH_MAY_ALLOCATE + # define FREE_VAR(var) if (var) REGEX_FREE (var); var = NULL + #else + # define FREE_VAR(var) if (var) free (var); var = NULL + #endif + + #ifdef WCHAR + # define MAX_ALLOCA_SIZE 2000 + + # define FREE_WCS_BUFFERS() \ + do { \ + if (size1 > MAX_ALLOCA_SIZE) \ + { \ + free (wcs_string1); \ + free (mbs_offset1); \ + } \ + else \ + { \ + FREE_VAR (wcs_string1); \ + FREE_VAR (mbs_offset1); \ + } \ + if (size2 > MAX_ALLOCA_SIZE) \ + { \ + free (wcs_string2); \ + free (mbs_offset2); \ + } \ + else \ + { \ + FREE_VAR (wcs_string2); \ + FREE_VAR (mbs_offset2); \ + } \ + } while (0) + + #endif + + + static int + PREFIX(re_search_2) (bufp, string1, size1, string2, size2, startpos, range, + regs, stop) + struct re_pattern_buffer *bufp; + const char *string1, *string2; + int size1, size2; + int startpos; + int range; + struct re_registers *regs; + int stop; + { + int val; + register char *fastmap = bufp->fastmap; + register RE_TRANSLATE_TYPE translate = bufp->translate; + int total_size = size1 + size2; + int endpos = startpos + range; + #ifdef WCHAR + /* We need wchar_t* buffers correspond to cstring1, cstring2. */ + wchar_t *wcs_string1 = NULL, *wcs_string2 = NULL; + /* We need the size of wchar_t buffers correspond to csize1, csize2. */ + int wcs_size1 = 0, wcs_size2 = 0; + /* offset buffer for optimizatoin. See convert_mbs_to_wc. */ + int *mbs_offset1 = NULL, *mbs_offset2 = NULL; + /* They hold whether each wchar_t is binary data or not. */ + char *is_binary = NULL; + #endif /* WCHAR */ + + /* Check for out-of-range STARTPOS. */ + if (startpos < 0 || startpos > total_size) + return -1; + + /* Fix up RANGE if it might eventually take us outside + the virtual concatenation of STRING1 and STRING2. + Make sure we won't move STARTPOS below 0 or above TOTAL_SIZE. */ + if (endpos < 0) + range = 0 - startpos; + else if (endpos > total_size) + range = total_size - startpos; + + /* If the search isn't to be a backwards one, don't waste time in a + search for a pattern that must be anchored. */ + if (bufp->used > 0 && range > 0 + && ((re_opcode_t) bufp->buffer[0] == begbuf + /* `begline' is like `begbuf' if it cannot match at newlines. */ + || ((re_opcode_t) bufp->buffer[0] == begline + && !bufp->newline_anchor))) + { + if (startpos > 0) + return -1; + else + range = 1; + } + + #ifdef emacs + /* In a forward search for something that starts with \=. + don't keep searching past point. */ + if (bufp->used > 0 && (re_opcode_t) bufp->buffer[0] == at_dot && range > 0) + { + range = PT - startpos; + if (range <= 0) + return -1; + } + #endif /* emacs */ + + /* Update the fastmap now if not correct already. */ + if (fastmap && !bufp->fastmap_accurate) + if (re_compile_fastmap (bufp) == -2) + return -2; + + #ifdef WCHAR + /* Allocate wchar_t array for wcs_string1 and wcs_string2 and + fill them with converted string. */ + if (size1 != 0) + { + if (size1 > MAX_ALLOCA_SIZE) + { + wcs_string1 = TALLOC (size1 + 1, CHAR_T); + mbs_offset1 = TALLOC (size1 + 1, int); + is_binary = TALLOC (size1 + 1, char); + } + else + { + wcs_string1 = REGEX_TALLOC (size1 + 1, CHAR_T); + mbs_offset1 = REGEX_TALLOC (size1 + 1, int); + is_binary = REGEX_TALLOC (size1 + 1, char); + } + if (!wcs_string1 || !mbs_offset1 || !is_binary) + { + if (size1 > MAX_ALLOCA_SIZE) + { + free (wcs_string1); + free (mbs_offset1); + free (is_binary); + } + else + { + FREE_VAR (wcs_string1); + FREE_VAR (mbs_offset1); + FREE_VAR (is_binary); + } + return -2; + } + wcs_size1 = convert_mbs_to_wcs(wcs_string1, string1, size1, + mbs_offset1, is_binary); + wcs_string1[wcs_size1] = L'\0'; /* for a sentinel */ + if (size1 > MAX_ALLOCA_SIZE) + free (is_binary); + else + FREE_VAR (is_binary); + } + if (size2 != 0) + { + if (size2 > MAX_ALLOCA_SIZE) + { + wcs_string2 = TALLOC (size2 + 1, CHAR_T); + mbs_offset2 = TALLOC (size2 + 1, int); + is_binary = TALLOC (size2 + 1, char); + } + else + { + wcs_string2 = REGEX_TALLOC (size2 + 1, CHAR_T); + mbs_offset2 = REGEX_TALLOC (size2 + 1, int); + is_binary = REGEX_TALLOC (size2 + 1, char); + } + if (!wcs_string2 || !mbs_offset2 || !is_binary) + { + FREE_WCS_BUFFERS (); + if (size2 > MAX_ALLOCA_SIZE) + free (is_binary); + else + FREE_VAR (is_binary); + return -2; + } + wcs_size2 = convert_mbs_to_wcs(wcs_string2, string2, size2, + mbs_offset2, is_binary); + wcs_string2[wcs_size2] = L'\0'; /* for a sentinel */ + if (size2 > MAX_ALLOCA_SIZE) + free (is_binary); + else + FREE_VAR (is_binary); + } + #endif /* WCHAR */ + + + /* Loop through the string, looking for a place to start matching. */ + for (;;) + { + /* If a fastmap is supplied, skip quickly over characters that + cannot be the start of a match. If the pattern can match the + null string, however, we don't need to skip characters; we want + the first null string. */ + if (fastmap && startpos < total_size && !bufp->can_be_null) + { + if (range > 0) /* Searching forwards. */ + { + register const char *d; + register int lim = 0; + int irange = range; + + if (startpos < size1 && startpos + range >= size1) + lim = range - (size1 - startpos); + + d = (startpos >= size1 ? string2 - size1 : string1) + startpos; + + /* Written out as an if-else to avoid testing `translate' + inside the loop. */ + if (translate) + while (range > lim + && !fastmap[(unsigned char) + translate[(unsigned char) *d++]]) + range--; + else + while (range > lim && !fastmap[(unsigned char) *d++]) + range--; + + startpos += irange - range; + } + else /* Searching backwards. */ + { + register CHAR_T c = (size1 == 0 || startpos >= size1 + ? string2[startpos - size1] + : string1[startpos]); + + if (!fastmap[(unsigned char) TRANSLATE (c)]) + goto advance; + } + } + + /* If can't match the null string, and that's all we have left, fail. */ + if (range >= 0 && startpos == total_size && fastmap + && !bufp->can_be_null) + { + #ifdef WCHAR + FREE_WCS_BUFFERS (); + #endif + return -1; + } + + #ifdef WCHAR + val = wcs_re_match_2_internal (bufp, string1, size1, string2, + size2, startpos, regs, stop, + wcs_string1, wcs_size1, + wcs_string2, wcs_size2, + mbs_offset1, mbs_offset2); + #else /* BYTE */ + val = byte_re_match_2_internal (bufp, string1, size1, string2, + size2, startpos, regs, stop); + #endif /* BYTE */ + + #ifndef REGEX_MALLOC + # ifdef C_ALLOCA + alloca (0); + # endif + #endif + + if (val >= 0) + { + #ifdef WCHAR + FREE_WCS_BUFFERS (); + #endif + return startpos; + } + + if (val == -2) + { + #ifdef WCHAR + FREE_WCS_BUFFERS (); + #endif + return -2; + } + + advance: + if (!range) + break; + else if (range > 0) + { + range--; + startpos++; + } + else + { + range++; + startpos--; + } + } + #ifdef WCHAR + FREE_WCS_BUFFERS (); + #endif + return -1; + } + + #ifdef WCHAR + /* This converts PTR, a pointer into one of the search wchar_t strings + `string1' and `string2' into an multibyte string offset from the + beginning of that string. We use mbs_offset to optimize. + See convert_mbs_to_wcs. */ + # define POINTER_TO_OFFSET(ptr) \ + (FIRST_STRING_P (ptr) \ + ? ((regoff_t)(mbs_offset1 != NULL? mbs_offset1[(ptr)-string1] : 0)) \ + : ((regoff_t)((mbs_offset2 != NULL? mbs_offset2[(ptr)-string2] : 0) \ + + csize1))) + #else /* BYTE */ + /* This converts PTR, a pointer into one of the search strings `string1' + and `string2' into an offset from the beginning of that string. */ + # define POINTER_TO_OFFSET(ptr) \ + (FIRST_STRING_P (ptr) \ + ? ((regoff_t) ((ptr) - string1)) \ + : ((regoff_t) ((ptr) - string2 + size1))) + #endif /* WCHAR */ + + /* Macros for dealing with the split strings in re_match_2. */ + + #define MATCHING_IN_FIRST_STRING (dend == end_match_1) + + /* Call before fetching a character with *d. This switches over to + string2 if necessary. */ + #define PREFETCH() \ + while (d == dend) \ + { \ + /* End of string2 => fail. */ \ + if (dend == end_match_2) \ + goto fail; \ + /* End of string1 => advance to string2. */ \ + d = string2; \ + dend = end_match_2; \ + } + + /* Test if at very beginning or at very end of the virtual concatenation + of `string1' and `string2'. If only one string, it's `string2'. */ + #define AT_STRINGS_BEG(d) ((d) == (size1 ? string1 : string2) || !size2) + #define AT_STRINGS_END(d) ((d) == end2) + + + /* Test if D points to a character which is word-constituent. We have + two special cases to check for: if past the end of string1, look at + the first character in string2; and if before the beginning of + string2, look at the last character in string1. */ + #ifdef WCHAR + /* Use internationalized API instead of SYNTAX. */ + # define WORDCHAR_P(d) \ + (iswalnum ((wint_t)((d) == end1 ? *string2 \ + : (d) == string2 - 1 ? *(end1 - 1) : *(d))) != 0 \ + || ((d) == end1 ? *string2 \ + : (d) == string2 - 1 ? *(end1 - 1) : *(d)) == L'_') + #else /* BYTE */ + # define WORDCHAR_P(d) \ + (SYNTAX ((d) == end1 ? *string2 \ + : (d) == string2 - 1 ? *(end1 - 1) : *(d)) \ + == Sword) + #endif /* WCHAR */ + + /* Disabled due to a compiler bug -- see comment at case wordbound */ + #if 0 + /* Test if the character before D and the one at D differ with respect + to being word-constituent. */ + #define AT_WORD_BOUNDARY(d) \ + (AT_STRINGS_BEG (d) || AT_STRINGS_END (d) \ + || WORDCHAR_P (d - 1) != WORDCHAR_P (d)) + #endif + + /* Free everything we malloc. */ + #ifdef MATCH_MAY_ALLOCATE + # ifdef WCHAR + # define FREE_VARIABLES() \ + do { \ + REGEX_FREE_STACK (fail_stack.stack); \ + FREE_VAR (regstart); \ + FREE_VAR (regend); \ + FREE_VAR (old_regstart); \ + FREE_VAR (old_regend); \ + FREE_VAR (best_regstart); \ + FREE_VAR (best_regend); \ + FREE_VAR (reg_info); \ + FREE_VAR (reg_dummy); \ + FREE_VAR (reg_info_dummy); \ + if (!cant_free_wcs_buf) \ + { \ + FREE_VAR (string1); \ + FREE_VAR (string2); \ + FREE_VAR (mbs_offset1); \ + FREE_VAR (mbs_offset2); \ + } \ + } while (0) + # else /* BYTE */ + # define FREE_VARIABLES() \ + do { \ + REGEX_FREE_STACK (fail_stack.stack); \ + FREE_VAR (regstart); \ + FREE_VAR (regend); \ + FREE_VAR (old_regstart); \ + FREE_VAR (old_regend); \ + FREE_VAR (best_regstart); \ + FREE_VAR (best_regend); \ + FREE_VAR (reg_info); \ + FREE_VAR (reg_dummy); \ + FREE_VAR (reg_info_dummy); \ + } while (0) + # endif /* WCHAR */ + #else + # ifdef WCHAR + # define FREE_VARIABLES() \ + do { \ + if (!cant_free_wcs_buf) \ + { \ + FREE_VAR (string1); \ + FREE_VAR (string2); \ + FREE_VAR (mbs_offset1); \ + FREE_VAR (mbs_offset2); \ + } \ + } while (0) + # else /* BYTE */ + # define FREE_VARIABLES() ((void)0) /* Do nothing! But inhibit gcc warning. */ + # endif /* WCHAR */ + #endif /* not MATCH_MAY_ALLOCATE */ + + /* These values must meet several constraints. They must not be valid + register values; since we have a limit of 255 registers (because + we use only one byte in the pattern for the register number), we can + use numbers larger than 255. They must differ by 1, because of + NUM_FAILURE_ITEMS above. And the value for the lowest register must + be larger than the value for the highest register, so we do not try + to actually save any registers when none are active. */ + #define NO_HIGHEST_ACTIVE_REG (1 << BYTEWIDTH) + #define NO_LOWEST_ACTIVE_REG (NO_HIGHEST_ACTIVE_REG + 1) + + #else /* not INSIDE_RECURSION */ + /* Matching routines. */ + + #ifndef emacs /* Emacs never uses this. */ + /* re_match is like re_match_2 except it takes only a single string. */ + + int + re_match (bufp, string, size, pos, regs) + struct re_pattern_buffer *bufp; + const char *string; + int size, pos; + struct re_registers *regs; + { + int result; + # ifdef MBS_SUPPORT + if (MB_CUR_MAX != 1) + result = wcs_re_match_2_internal (bufp, NULL, 0, string, size, + pos, regs, size, + NULL, 0, NULL, 0, NULL, NULL); + else + # endif + result = byte_re_match_2_internal (bufp, NULL, 0, string, size, + pos, regs, size); + # ifndef REGEX_MALLOC + # ifdef C_ALLOCA + alloca (0); + # endif + # endif + return result; + } + # ifdef _LIBC + weak_alias (__re_match, re_match) + # endif + #endif /* not emacs */ + + #endif /* not INSIDE_RECURSION */ + + #ifdef INSIDE_RECURSION + static boolean PREFIX(group_match_null_string_p) _RE_ARGS ((UCHAR_T **p, + UCHAR_T *end, + PREFIX(register_info_type) *reg_info)); + static boolean PREFIX(alt_match_null_string_p) _RE_ARGS ((UCHAR_T *p, + UCHAR_T *end, + PREFIX(register_info_type) *reg_info)); + static boolean PREFIX(common_op_match_null_string_p) _RE_ARGS ((UCHAR_T **p, + UCHAR_T *end, + PREFIX(register_info_type) *reg_info)); + static int PREFIX(bcmp_translate) _RE_ARGS ((const CHAR_T *s1, const CHAR_T *s2, + int len, char *translate)); + #else /* not INSIDE_RECURSION */ + + /* re_match_2 matches the compiled pattern in BUFP against the + the (virtual) concatenation of STRING1 and STRING2 (of length SIZE1 + and SIZE2, respectively). We start matching at POS, and stop + matching at STOP. + + If REGS is non-null and the `no_sub' field of BUFP is nonzero, we + store offsets for the substring each group matched in REGS. See the + documentation for exactly how many groups we fill. + + We return -1 if no match, -2 if an internal error (such as the + failure stack overflowing). Otherwise, we return the length of the + matched substring. */ + + int + re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop) + struct re_pattern_buffer *bufp; + const char *string1, *string2; + int size1, size2; + int pos; + struct re_registers *regs; + int stop; + { + int result; + # ifdef MBS_SUPPORT + if (MB_CUR_MAX != 1) + result = wcs_re_match_2_internal (bufp, string1, size1, string2, size2, + pos, regs, stop, + NULL, 0, NULL, 0, NULL, NULL); + else + # endif + result = byte_re_match_2_internal (bufp, string1, size1, string2, size2, + pos, regs, stop); + + #ifndef REGEX_MALLOC + # ifdef C_ALLOCA + alloca (0); + # endif + #endif + return result; + } + #ifdef _LIBC + weak_alias (__re_match_2, re_match_2) + #endif + + #endif /* not INSIDE_RECURSION */ + + #ifdef INSIDE_RECURSION + + #ifdef WCHAR + static int count_mbs_length PARAMS ((int *, int)); + + /* This check the substring (from 0, to length) of the multibyte string, + to which offset_buffer correspond. And count how many wchar_t_characters + the substring occupy. We use offset_buffer to optimization. + See convert_mbs_to_wcs. */ + + static int + count_mbs_length(offset_buffer, length) + int *offset_buffer; + int length; + { + int upper, lower; + + /* Check whether the size is valid. */ + if (length < 0) + return -1; + + if (offset_buffer == NULL) + return 0; + + /* If there are no multibyte character, offset_buffer[i] == i. + Optmize for this case. */ + if (offset_buffer[length] == length) + return length; + + /* Set up upper with length. (because for all i, offset_buffer[i] >= i) */ + upper = length; + lower = 0; + + while (true) + { + int middle = (lower + upper) / 2; + if (middle == lower || middle == upper) + break; + if (offset_buffer[middle] > length) + upper = middle; + else if (offset_buffer[middle] < length) + lower = middle; + else + return middle; + } + + return -1; + } + #endif /* WCHAR */ + + /* This is a separate function so that we can force an alloca cleanup + afterwards. */ + #ifdef WCHAR + static int + wcs_re_match_2_internal (bufp, cstring1, csize1, cstring2, csize2, pos, + regs, stop, string1, size1, string2, size2, + mbs_offset1, mbs_offset2) + struct re_pattern_buffer *bufp; + const char *cstring1, *cstring2; + int csize1, csize2; + int pos; + struct re_registers *regs; + int stop; + /* string1 == string2 == NULL means string1/2, size1/2 and + mbs_offset1/2 need seting up in this function. */ + /* We need wchar_t* buffers correspond to cstring1, cstring2. */ + wchar_t *string1, *string2; + /* We need the size of wchar_t buffers correspond to csize1, csize2. */ + int size1, size2; + /* offset buffer for optimizatoin. See convert_mbs_to_wc. */ + int *mbs_offset1, *mbs_offset2; + #else /* BYTE */ + static int + byte_re_match_2_internal (bufp, string1, size1,string2, size2, pos, + regs, stop) + struct re_pattern_buffer *bufp; + const char *string1, *string2; + int size1, size2; + int pos; + struct re_registers *regs; + int stop; + #endif /* BYTE */ + { + /* General temporaries. */ + int mcnt; + UCHAR_T *p1; + #ifdef WCHAR + /* They hold whether each wchar_t is binary data or not. */ + char *is_binary = NULL; + /* If true, we can't free string1/2, mbs_offset1/2. */ + int cant_free_wcs_buf = 1; + #endif /* WCHAR */ + + /* Just past the end of the corresponding string. */ + const CHAR_T *end1, *end2; + + /* Pointers into string1 and string2, just past the last characters in + each to consider matching. */ + const CHAR_T *end_match_1, *end_match_2; + + /* Where we are in the data, and the end of the current string. */ + const CHAR_T *d, *dend; + + /* Where we are in the pattern, and the end of the pattern. */ + #ifdef WCHAR + UCHAR_T *pattern, *p; + register UCHAR_T *pend; + #else /* BYTE */ + UCHAR_T *p = bufp->buffer; + register UCHAR_T *pend = p + bufp->used; + #endif /* WCHAR */ + + /* Mark the opcode just after a start_memory, so we can test for an + empty subpattern when we get to the stop_memory. */ + UCHAR_T *just_past_start_mem = 0; + + /* We use this to map every character in the string. */ + RE_TRANSLATE_TYPE translate = bufp->translate; + + /* Failure point stack. Each place that can handle a failure further + down the line pushes a failure point on this stack. It consists of + restart, regend, and reg_info for all registers corresponding to + the subexpressions we're currently inside, plus the number of such + registers, and, finally, two char *'s. The first char * is where + to resume scanning the pattern; the second one is where to resume + scanning the strings. If the latter is zero, the failure point is + a ``dummy''; if a failure happens and the failure point is a dummy, + it gets discarded and the next next one is tried. */ + #ifdef MATCH_MAY_ALLOCATE /* otherwise, this is global. */ + PREFIX(fail_stack_type) fail_stack; + #endif + #ifdef DEBUG + static unsigned failure_id; + unsigned nfailure_points_pushed = 0, nfailure_points_popped = 0; + #endif + + #ifdef REL_ALLOC + /* This holds the pointer to the failure stack, when + it is allocated relocatably. */ + fail_stack_elt_t *failure_stack_ptr; + #endif + + /* We fill all the registers internally, independent of what we + return, for use in backreferences. The number here includes + an element for register zero. */ + size_t num_regs = bufp->re_nsub + 1; + + /* The currently active registers. */ + active_reg_t lowest_active_reg = NO_LOWEST_ACTIVE_REG; + active_reg_t highest_active_reg = NO_HIGHEST_ACTIVE_REG; + + /* Information on the contents of registers. These are pointers into + the input strings; they record just what was matched (on this + attempt) by a subexpression part of the pattern, that is, the + regnum-th regstart pointer points to where in the pattern we began + matching and the regnum-th regend points to right after where we + stopped matching the regnum-th subexpression. (The zeroth register + keeps track of what the whole pattern matches.) */ + #ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global. */ + const CHAR_T **regstart, **regend; + #endif + + /* If a group that's operated upon by a repetition operator fails to + match anything, then the register for its start will need to be + restored because it will have been set to wherever in the string we + are when we last see its open-group operator. Similarly for a + register's end. */ + #ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global. */ + const CHAR_T **old_regstart, **old_regend; + #endif + + /* The is_active field of reg_info helps us keep track of which (possibly + nested) subexpressions we are currently in. The matched_something + field of reg_info[reg_num] helps us tell whether or not we have + matched any of the pattern so far this time through the reg_num-th + subexpression. These two fields get reset each time through any + loop their register is in. */ + #ifdef MATCH_MAY_ALLOCATE /* otherwise, this is global. */ + PREFIX(register_info_type) *reg_info; + #endif + + /* The following record the register info as found in the above + variables when we find a match better than any we've seen before. + This happens as we backtrack through the failure points, which in + turn happens only if we have not yet matched the entire string. */ + unsigned best_regs_set = false; + #ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global. */ + const CHAR_T **best_regstart, **best_regend; + #endif + + /* Logically, this is `best_regend[0]'. But we don't want to have to + allocate space for that if we're not allocating space for anything + else (see below). Also, we never need info about register 0 for + any of the other register vectors, and it seems rather a kludge to + treat `best_regend' differently than the rest. So we keep track of + the end of the best match so far in a separate variable. We + initialize this to NULL so that when we backtrack the first time + and need to test it, it's not garbage. */ + const CHAR_T *match_end = NULL; + + /* This helps SET_REGS_MATCHED avoid doing redundant work. */ + int set_regs_matched_done = 0; + + /* Used when we pop values we don't care about. */ + #ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global. */ + const CHAR_T **reg_dummy; + PREFIX(register_info_type) *reg_info_dummy; + #endif + + #ifdef DEBUG + /* Counts the total number of registers pushed. */ + unsigned num_regs_pushed = 0; + #endif + + DEBUG_PRINT1 ("\n\nEntering re_match_2.\n"); + + INIT_FAIL_STACK (); + + #ifdef MATCH_MAY_ALLOCATE + /* Do not bother to initialize all the register variables if there are + no groups in the pattern, as it takes a fair amount of time. If + there are groups, we include space for register 0 (the whole + pattern), even though we never use it, since it simplifies the + array indexing. We should fix this. */ + if (bufp->re_nsub) + { + regstart = REGEX_TALLOC (num_regs, const CHAR_T *); + regend = REGEX_TALLOC (num_regs, const CHAR_T *); + old_regstart = REGEX_TALLOC (num_regs, const CHAR_T *); + old_regend = REGEX_TALLOC (num_regs, const CHAR_T *); + best_regstart = REGEX_TALLOC (num_regs, const CHAR_T *); + best_regend = REGEX_TALLOC (num_regs, const CHAR_T *); + reg_info = REGEX_TALLOC (num_regs, PREFIX(register_info_type)); + reg_dummy = REGEX_TALLOC (num_regs, const CHAR_T *); + reg_info_dummy = REGEX_TALLOC (num_regs, PREFIX(register_info_type)); + + if (!(regstart && regend && old_regstart && old_regend && reg_info + && best_regstart && best_regend && reg_dummy && reg_info_dummy)) + { + FREE_VARIABLES (); + return -2; + } + } + else + { + /* We must initialize all our variables to NULL, so that + `FREE_VARIABLES' doesn't try to free them. */ + regstart = regend = old_regstart = old_regend = best_regstart + = best_regend = reg_dummy = NULL; + reg_info = reg_info_dummy = (PREFIX(register_info_type) *) NULL; + } + #endif /* MATCH_MAY_ALLOCATE */ + + /* The starting position is bogus. */ + #ifdef WCHAR + if (pos < 0 || pos > csize1 + csize2) + #else /* BYTE */ + if (pos < 0 || pos > size1 + size2) + #endif + { + FREE_VARIABLES (); + return -1; + } + + #ifdef WCHAR + /* Allocate wchar_t array for string1 and string2 and + fill them with converted string. */ + if (string1 == NULL && string2 == NULL) + { + /* We need seting up buffers here. */ + + /* We must free wcs buffers in this function. */ + cant_free_wcs_buf = 0; + + if (csize1 != 0) + { + string1 = REGEX_TALLOC (csize1 + 1, CHAR_T); + mbs_offset1 = REGEX_TALLOC (csize1 + 1, int); + is_binary = REGEX_TALLOC (csize1 + 1, char); + if (!string1 || !mbs_offset1 || !is_binary) + { + FREE_VAR (string1); + FREE_VAR (mbs_offset1); + FREE_VAR (is_binary); + return -2; + } + } + if (csize2 != 0) + { + string2 = REGEX_TALLOC (csize2 + 1, CHAR_T); + mbs_offset2 = REGEX_TALLOC (csize2 + 1, int); + is_binary = REGEX_TALLOC (csize2 + 1, char); + if (!string2 || !mbs_offset2 || !is_binary) + { + FREE_VAR (string1); + FREE_VAR (mbs_offset1); + FREE_VAR (string2); + FREE_VAR (mbs_offset2); + FREE_VAR (is_binary); + return -2; + } + size2 = convert_mbs_to_wcs(string2, cstring2, csize2, + mbs_offset2, is_binary); + string2[size2] = L'\0'; /* for a sentinel */ + FREE_VAR (is_binary); + } + } + + /* We need to cast pattern to (wchar_t*), because we casted this compiled + pattern to (char*) in regex_compile. */ + p = pattern = (CHAR_T*)bufp->buffer; + pend = (CHAR_T*)(bufp->buffer + bufp->used); + + #endif /* WCHAR */ + + /* Initialize subexpression text positions to -1 to mark ones that no + start_memory/stop_memory has been seen for. Also initialize the + register information struct. */ + for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++) + { + regstart[mcnt] = regend[mcnt] + = old_regstart[mcnt] = old_regend[mcnt] = REG_UNSET_VALUE; + + REG_MATCH_NULL_STRING_P (reg_info[mcnt]) = MATCH_NULL_UNSET_VALUE; + IS_ACTIVE (reg_info[mcnt]) = 0; + MATCHED_SOMETHING (reg_info[mcnt]) = 0; + EVER_MATCHED_SOMETHING (reg_info[mcnt]) = 0; + } + + /* We move `string1' into `string2' if the latter's empty -- but not if + `string1' is null. */ + if (size2 == 0 && string1 != NULL) + { + string2 = string1; + size2 = size1; + string1 = 0; + size1 = 0; + #ifdef WCHAR + mbs_offset2 = mbs_offset1; + csize2 = csize1; + mbs_offset1 = NULL; + csize1 = 0; + #endif + } + end1 = string1 + size1; + end2 = string2 + size2; + + /* Compute where to stop matching, within the two strings. */ + #ifdef WCHAR + if (stop <= csize1) + { + mcnt = count_mbs_length(mbs_offset1, stop); + end_match_1 = string1 + mcnt; + end_match_2 = string2; + } + else + { + if (stop > csize1 + csize2) + stop = csize1 + csize2; + end_match_1 = end1; + mcnt = count_mbs_length(mbs_offset2, stop-csize1); + end_match_2 = string2 + mcnt; + } + if (mcnt < 0) + { /* count_mbs_length return error. */ + FREE_VARIABLES (); + return -1; + } + #else + if (stop <= size1) + { + end_match_1 = string1 + stop; + end_match_2 = string2; + } + else + { + end_match_1 = end1; + end_match_2 = string2 + stop - size1; + } + #endif /* WCHAR */ + + /* `p' scans through the pattern as `d' scans through the data. + `dend' is the end of the input string that `d' points within. `d' + is advanced into the following input string whenever necessary, but + this happens before fetching; therefore, at the beginning of the + loop, `d' can be pointing at the end of a string, but it cannot + equal `string2'. */ + #ifdef WCHAR + if (size1 > 0 && pos <= csize1) + { + mcnt = count_mbs_length(mbs_offset1, pos); + d = string1 + mcnt; + dend = end_match_1; + } + else + { + mcnt = count_mbs_length(mbs_offset2, pos-csize1); + d = string2 + mcnt; + dend = end_match_2; + } + + if (mcnt < 0) + { /* count_mbs_length return error. */ + FREE_VARIABLES (); + return -1; + } + #else + if (size1 > 0 && pos <= size1) + { + d = string1 + pos; + dend = end_match_1; + } + else + { + d = string2 + pos - size1; + dend = end_match_2; + } + #endif /* WCHAR */ + + DEBUG_PRINT1 ("The compiled pattern is:\n"); + DEBUG_PRINT_COMPILED_PATTERN (bufp, p, pend); + DEBUG_PRINT1 ("The string to match is: `"); + DEBUG_PRINT_DOUBLE_STRING (d, string1, size1, string2, size2); + DEBUG_PRINT1 ("'\n"); + + /* This loops over pattern commands. It exits by returning from the + function if the match is complete, or it drops through if the match + fails at this starting point in the input data. */ + for (;;) + { + #ifdef _LIBC + DEBUG_PRINT2 ("\n%p: ", p); + #else + DEBUG_PRINT2 ("\n0x%x: ", p); + #endif + + if (p == pend) + { /* End of pattern means we might have succeeded. */ + DEBUG_PRINT1 ("end of pattern ... "); + + /* If we haven't matched the entire string, and we want the + longest match, try backtracking. */ + if (d != end_match_2) + { + /* 1 if this match ends in the same string (string1 or string2) + as the best previous match. */ + boolean same_str_p = (FIRST_STRING_P (match_end) + == MATCHING_IN_FIRST_STRING); + /* 1 if this match is the best seen so far. */ + boolean best_match_p; + + /* AIX compiler got confused when this was combined + with the previous declaration. */ + if (same_str_p) + best_match_p = d > match_end; + else + best_match_p = !MATCHING_IN_FIRST_STRING; + + DEBUG_PRINT1 ("backtracking.\n"); + + if (!FAIL_STACK_EMPTY ()) + { /* More failure points to try. */ + + /* If exceeds best match so far, save it. */ + if (!best_regs_set || best_match_p) + { + best_regs_set = true; + match_end = d; + + DEBUG_PRINT1 ("\nSAVING match as best so far.\n"); + + for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++) + { + best_regstart[mcnt] = regstart[mcnt]; + best_regend[mcnt] = regend[mcnt]; + } + } + goto fail; + } + + /* If no failure points, don't restore garbage. And if + last match is real best match, don't restore second + best one. */ + else if (best_regs_set && !best_match_p) + { + restore_best_regs: + /* Restore best match. It may happen that `dend == + end_match_1' while the restored d is in string2. + For example, the pattern `x.*y.*z' against the + strings `x-' and `y-z-', if the two strings are + not consecutive in memory. */ + DEBUG_PRINT1 ("Restoring best registers.\n"); + + d = match_end; + dend = ((d >= string1 && d <= end1) + ? end_match_1 : end_match_2); + + for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++) + { + regstart[mcnt] = best_regstart[mcnt]; + regend[mcnt] = best_regend[mcnt]; + } + } + } /* d != end_match_2 */ + + succeed_label: + DEBUG_PRINT1 ("Accepting match.\n"); + /* If caller wants register contents data back, do it. */ + if (regs && !bufp->no_sub) + { + /* Have the register data arrays been allocated? */ + if (bufp->regs_allocated == REGS_UNALLOCATED) + { /* No. So allocate them with malloc. We need one + extra element beyond `num_regs' for the `-1' marker + GNU code uses. */ + regs->num_regs = MAX (RE_NREGS, num_regs + 1); + regs->start = TALLOC (regs->num_regs, regoff_t); + regs->end = TALLOC (regs->num_regs, regoff_t); + if (regs->start == NULL || regs->end == NULL) + { + FREE_VARIABLES (); + return -2; + } + bufp->regs_allocated = REGS_REALLOCATE; + } + else if (bufp->regs_allocated == REGS_REALLOCATE) + { /* Yes. If we need more elements than were already + allocated, reallocate them. If we need fewer, just + leave it alone. */ + if (regs->num_regs < num_regs + 1) + { + regs->num_regs = num_regs + 1; + RETALLOC (regs->start, regs->num_regs, regoff_t); + RETALLOC (regs->end, regs->num_regs, regoff_t); + if (regs->start == NULL || regs->end == NULL) + { + FREE_VARIABLES (); + return -2; + } + } + } + else + { + /* These braces fend off a "empty body in an else-statement" + warning under GCC when assert expands to nothing. */ + assert (bufp->regs_allocated == REGS_FIXED); + } + + /* Convert the pointer data in `regstart' and `regend' to + indices. Register zero has to be set differently, + since we haven't kept track of any info for it. */ + if (regs->num_regs > 0) + { + regs->start[0] = pos; + #ifdef WCHAR + if (MATCHING_IN_FIRST_STRING) + regs->end[0] = mbs_offset1 != NULL ? + mbs_offset1[d-string1] : 0; + else + regs->end[0] = csize1 + (mbs_offset2 != NULL ? + mbs_offset2[d-string2] : 0); + #else + regs->end[0] = (MATCHING_IN_FIRST_STRING + ? ((regoff_t) (d - string1)) + : ((regoff_t) (d - string2 + size1))); + #endif /* WCHAR */ + } + + /* Go through the first `min (num_regs, regs->num_regs)' + registers, since that is all we initialized. */ + for (mcnt = 1; (unsigned) mcnt < MIN (num_regs, regs->num_regs); + mcnt++) + { + if (REG_UNSET (regstart[mcnt]) || REG_UNSET (regend[mcnt])) + regs->start[mcnt] = regs->end[mcnt] = -1; + else + { + regs->start[mcnt] + = (regoff_t) POINTER_TO_OFFSET (regstart[mcnt]); + regs->end[mcnt] + = (regoff_t) POINTER_TO_OFFSET (regend[mcnt]); + } + } + + /* If the regs structure we return has more elements than + were in the pattern, set the extra elements to -1. If + we (re)allocated the registers, this is the case, + because we always allocate enough to have at least one + -1 at the end. */ + for (mcnt = num_regs; (unsigned) mcnt < regs->num_regs; mcnt++) + regs->start[mcnt] = regs->end[mcnt] = -1; + } /* regs && !bufp->no_sub */ + + DEBUG_PRINT4 ("%u failure points pushed, %u popped (%u remain).\n", + nfailure_points_pushed, nfailure_points_popped, + nfailure_points_pushed - nfailure_points_popped); + DEBUG_PRINT2 ("%u registers pushed.\n", num_regs_pushed); + + #ifdef WCHAR + if (MATCHING_IN_FIRST_STRING) + mcnt = mbs_offset1 != NULL ? mbs_offset1[d-string1] : 0; + else + mcnt = (mbs_offset2 != NULL ? mbs_offset2[d-string2] : 0) + + csize1; + mcnt -= pos; + #else + mcnt = d - pos - (MATCHING_IN_FIRST_STRING + ? string1 + : string2 - size1); + #endif /* WCHAR */ + + DEBUG_PRINT2 ("Returning %d from re_match_2.\n", mcnt); + + FREE_VARIABLES (); + return mcnt; + } + + /* Otherwise match next pattern command. */ + switch (SWITCH_ENUM_CAST ((re_opcode_t) *p++)) + { + /* Ignore these. Used to ignore the n of succeed_n's which + currently have n == 0. */ + case no_op: + DEBUG_PRINT1 ("EXECUTING no_op.\n"); + break; + + case succeed: + DEBUG_PRINT1 ("EXECUTING succeed.\n"); + goto succeed_label; + + /* Match the next n pattern characters exactly. The following + byte in the pattern defines n, and the n bytes after that + are the characters to match. */ + case exactn: + #ifdef MBS_SUPPORT + case exactn_bin: + #endif + mcnt = *p++; + DEBUG_PRINT2 ("EXECUTING exactn %d.\n", mcnt); + + /* This is written out as an if-else so we don't waste time + testing `translate' inside the loop. */ + if (translate) + { + do + { + PREFETCH (); + #ifdef WCHAR + if (*d <= 0xff) + { + if ((UCHAR_T) translate[(unsigned char) *d++] + != (UCHAR_T) *p++) + goto fail; + } + else + { + if (*d++ != (CHAR_T) *p++) + goto fail; + } + #else + if ((UCHAR_T) translate[(unsigned char) *d++] + != (UCHAR_T) *p++) + goto fail; + #endif /* WCHAR */ + } + while (--mcnt); + } + else + { + do + { + PREFETCH (); + if (*d++ != (CHAR_T) *p++) goto fail; + } + while (--mcnt); + } + SET_REGS_MATCHED (); + break; + + + /* Match any character except possibly a newline or a null. */ + case anychar: + DEBUG_PRINT1 ("EXECUTING anychar.\n"); + + PREFETCH (); + + if ((!(bufp->syntax & RE_DOT_NEWLINE) && TRANSLATE (*d) == '\n') + || (bufp->syntax & RE_DOT_NOT_NULL && TRANSLATE (*d) == '\000')) + goto fail; + + SET_REGS_MATCHED (); + DEBUG_PRINT2 (" Matched `%ld'.\n", (long int) *d); + d++; + break; + + + case charset: + case charset_not: + { + register UCHAR_T c; + #ifdef WCHAR + unsigned int i, char_class_length, coll_symbol_length, + equiv_class_length, ranges_length, chars_length, length; + CHAR_T *workp, *workp2, *charset_top; + #define WORK_BUFFER_SIZE 128 + CHAR_T str_buf[WORK_BUFFER_SIZE]; + # ifdef _LIBC + uint32_t nrules; + # endif /* _LIBC */ + #endif /* WCHAR */ + boolean not = (re_opcode_t) *(p - 1) == charset_not; + + DEBUG_PRINT2 ("EXECUTING charset%s.\n", not ? "_not" : ""); + PREFETCH (); + c = TRANSLATE (*d); /* The character to match. */ + #ifdef WCHAR + # ifdef _LIBC + nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); + # endif /* _LIBC */ + charset_top = p - 1; + char_class_length = *p++; + coll_symbol_length = *p++; + equiv_class_length = *p++; + ranges_length = *p++; + chars_length = *p++; + /* p points charset[6], so the address of the next instruction + (charset[l+m+n+2o+k+p']) equals p[l+m+n+2*o+p'], + where l=length of char_classes, m=length of collating_symbol, + n=equivalence_class, o=length of char_range, + p'=length of character. */ + workp = p; + /* Update p to indicate the next instruction. */ + p += char_class_length + coll_symbol_length+ equiv_class_length + + 2*ranges_length + chars_length; + + /* match with char_class? */ + for (i = 0; i < char_class_length ; i += CHAR_CLASS_SIZE) + { + wctype_t wctype; + uintptr_t alignedp = ((uintptr_t)workp + + __alignof__(wctype_t) - 1) + & ~(uintptr_t)(__alignof__(wctype_t) - 1); + wctype = *((wctype_t*)alignedp); + workp += CHAR_CLASS_SIZE; + # ifdef _LIBC + if (__iswctype((wint_t)c, wctype)) + goto char_set_matched; + # else + if (iswctype((wint_t)c, wctype)) + goto char_set_matched; + # endif + } + + /* match with collating_symbol? */ + # ifdef _LIBC + if (nrules != 0) + { + const unsigned char *extra = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); + + for (workp2 = workp + coll_symbol_length ; workp < workp2 ; + workp++) + { + int32_t *wextra; + wextra = (int32_t*)(extra + *workp++); + for (i = 0; i < *wextra; ++i) + if (TRANSLATE(d[i]) != wextra[1 + i]) + break; + + if (i == *wextra) + { + /* Update d, however d will be incremented at + char_set_matched:, we decrement d here. */ + d += i - 1; + goto char_set_matched; + } + } + } + else /* (nrules == 0) */ + # endif + /* If we can't look up collation data, we use wcscoll + instead. */ + { + for (workp2 = workp + coll_symbol_length ; workp < workp2 ;) + { + const CHAR_T *backup_d = d, *backup_dend = dend; + # ifdef _LIBC + length = __wcslen (workp); + # else + length = wcslen (workp); + # endif + + /* If wcscoll(the collating symbol, whole string) > 0, + any substring of the string never match with the + collating symbol. */ + # ifdef _LIBC + if (__wcscoll (workp, d) > 0) + # else + if (wcscoll (workp, d) > 0) + # endif + { + workp += length + 1; + continue; + } + + /* First, we compare the collating symbol with + the first character of the string. + If it don't match, we add the next character to + the compare buffer in turn. */ + for (i = 0 ; i < WORK_BUFFER_SIZE-1 ; i++, d++) + { + int match; + if (d == dend) + { + if (dend == end_match_2) + break; + d = string2; + dend = end_match_2; + } + + /* add next character to the compare buffer. */ + str_buf[i] = TRANSLATE(*d); + str_buf[i+1] = '\0'; + + # ifdef _LIBC + match = __wcscoll (workp, str_buf); + # else + match = wcscoll (workp, str_buf); + # endif + if (match == 0) + goto char_set_matched; + + if (match < 0) + /* (str_buf > workp) indicate (str_buf + X > workp), + because for all X (str_buf + X > str_buf). + So we don't need continue this loop. */ + break; + + /* Otherwise(str_buf < workp), + (str_buf+next_character) may equals (workp). + So we continue this loop. */ + } + /* not matched */ + d = backup_d; + dend = backup_dend; + workp += length + 1; + } + } + /* match with equivalence_class? */ + # ifdef _LIBC + if (nrules != 0) + { + const CHAR_T *backup_d = d, *backup_dend = dend; + /* Try to match the equivalence class against + those known to the collate implementation. */ + const int32_t *table; + const int32_t *weights; + const int32_t *extra; + const int32_t *indirect; + int32_t idx, idx2; + wint_t *cp; + size_t len; + + /* This #include defines a local function! */ + # include + + table = (const int32_t *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEWC); + weights = (const wint_t *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTWC); + extra = (const wint_t *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAWC); + indirect = (const int32_t *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTWC); + + /* Write 1 collating element to str_buf, and + get its index. */ + idx2 = 0; + + for (i = 0 ; idx2 == 0 && i < WORK_BUFFER_SIZE - 1; i++) + { + cp = (wint_t*)str_buf; + if (d == dend) + { + if (dend == end_match_2) + break; + d = string2; + dend = end_match_2; + } + str_buf[i] = TRANSLATE(*(d+i)); + str_buf[i+1] = '\0'; /* sentinel */ + idx2 = findidx ((const wint_t**)&cp); + } + + /* Update d, however d will be incremented at + char_set_matched:, we decrement d here. */ + d = backup_d + ((wchar_t*)cp - (wchar_t*)str_buf - 1); + if (d >= dend) + { + if (dend == end_match_2) + d = dend; + else + { + d = string2; + dend = end_match_2; + } + } + + len = weights[idx2]; + + for (workp2 = workp + equiv_class_length ; workp < workp2 ; + workp++) + { + idx = (int32_t)*workp; + /* We already checked idx != 0 in regex_compile. */ + + if (idx2 != 0 && len == weights[idx]) + { + int cnt = 0; + while (cnt < len && (weights[idx + 1 + cnt] + == weights[idx2 + 1 + cnt])) + ++cnt; + + if (cnt == len) + goto char_set_matched; + } + } + /* not matched */ + d = backup_d; + dend = backup_dend; + } + else /* (nrules == 0) */ + # endif + /* If we can't look up collation data, we use wcscoll + instead. */ + { + for (workp2 = workp + equiv_class_length ; workp < workp2 ;) + { + const CHAR_T *backup_d = d, *backup_dend = dend; + # ifdef _LIBC + length = __wcslen (workp); + # else + length = wcslen (workp); + # endif + + /* If wcscoll(the collating symbol, whole string) > 0, + any substring of the string never match with the + collating symbol. */ + # ifdef _LIBC + if (__wcscoll (workp, d) > 0) + # else + if (wcscoll (workp, d) > 0) + # endif + { + workp += length + 1; + break; + } + + /* First, we compare the equivalence class with + the first character of the string. + If it don't match, we add the next character to + the compare buffer in turn. */ + for (i = 0 ; i < WORK_BUFFER_SIZE - 1 ; i++, d++) + { + int match; + if (d == dend) + { + if (dend == end_match_2) + break; + d = string2; + dend = end_match_2; + } + + /* add next character to the compare buffer. */ + str_buf[i] = TRANSLATE(*d); + str_buf[i+1] = '\0'; + + # ifdef _LIBC + match = __wcscoll (workp, str_buf); + # else + match = wcscoll (workp, str_buf); + # endif + + if (match == 0) + goto char_set_matched; + + if (match < 0) + /* (str_buf > workp) indicate (str_buf + X > workp), + because for all X (str_buf + X > str_buf). + So we don't need continue this loop. */ + break; + + /* Otherwise(str_buf < workp), + (str_buf+next_character) may equals (workp). + So we continue this loop. */ + } + /* not matched */ + d = backup_d; + dend = backup_dend; + workp += length + 1; + } + } + + /* match with char_range? */ + # ifdef _LIBC + if (nrules != 0) + { + uint32_t collseqval; + const char *collseq = (const char *) + _NL_CURRENT(LC_COLLATE, _NL_COLLATE_COLLSEQWC); + + collseqval = collseq_table_lookup (collseq, c); + + for (; workp < p - chars_length ;) + { + uint32_t start_val, end_val; + + /* We already compute the collation sequence value + of the characters (or collating symbols). */ + start_val = (uint32_t) *workp++; /* range_start */ + end_val = (uint32_t) *workp++; /* range_end */ + + if (start_val <= collseqval && collseqval <= end_val) + goto char_set_matched; + } + } + else + # endif + { + /* We set range_start_char at str_buf[0], range_end_char + at str_buf[4], and compared char at str_buf[2]. */ + str_buf[1] = 0; + str_buf[2] = c; + str_buf[3] = 0; + str_buf[5] = 0; + for (; workp < p - chars_length ;) + { + wchar_t *range_start_char, *range_end_char; + + /* match if (range_start_char <= c <= range_end_char). */ + + /* If range_start(or end) < 0, we assume -range_start(end) + is the offset of the collating symbol which is specified + as the character of the range start(end). */ + + /* range_start */ + if (*workp < 0) + range_start_char = charset_top - (*workp++); + else + { + str_buf[0] = *workp++; + range_start_char = str_buf; + } + + /* range_end */ + if (*workp < 0) + range_end_char = charset_top - (*workp++); + else + { + str_buf[4] = *workp++; + range_end_char = str_buf + 4; + } + + # ifdef _LIBC + if (__wcscoll (range_start_char, str_buf+2) <= 0 + && __wcscoll (str_buf+2, range_end_char) <= 0) + # else + if (wcscoll (range_start_char, str_buf+2) <= 0 + && wcscoll (str_buf+2, range_end_char) <= 0) + # endif + goto char_set_matched; + } + } + + /* match with char? */ + for (; workp < p ; workp++) + if (c == *workp) + goto char_set_matched; + + not = !not; + + char_set_matched: + if (not) goto fail; + #else + /* Cast to `unsigned' instead of `unsigned char' in case the + bit list is a full 32 bytes long. */ + if (c < (unsigned) (*p * BYTEWIDTH) + && p[1 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH))) + not = !not; + + p += 1 + *p; + + if (!not) goto fail; + #undef WORK_BUFFER_SIZE + #endif /* WCHAR */ + SET_REGS_MATCHED (); + d++; + break; + } + + + /* The beginning of a group is represented by start_memory. + The arguments are the register number in the next byte, and the + number of groups inner to this one in the next. The text + matched within the group is recorded (in the internal + registers data structure) under the register number. */ + case start_memory: + DEBUG_PRINT3 ("EXECUTING start_memory %ld (%ld):\n", + (long int) *p, (long int) p[1]); + + /* Find out if this group can match the empty string. */ + p1 = p; /* To send to group_match_null_string_p. */ + + if (REG_MATCH_NULL_STRING_P (reg_info[*p]) == MATCH_NULL_UNSET_VALUE) + REG_MATCH_NULL_STRING_P (reg_info[*p]) + = PREFIX(group_match_null_string_p) (&p1, pend, reg_info); + + /* Save the position in the string where we were the last time + we were at this open-group operator in case the group is + operated upon by a repetition operator, e.g., with `(a*)*b' + against `ab'; then we want to ignore where we are now in + the string in case this attempt to match fails. */ + old_regstart[*p] = REG_MATCH_NULL_STRING_P (reg_info[*p]) + ? REG_UNSET (regstart[*p]) ? d : regstart[*p] + : regstart[*p]; + DEBUG_PRINT2 (" old_regstart: %d\n", + POINTER_TO_OFFSET (old_regstart[*p])); + + regstart[*p] = d; + DEBUG_PRINT2 (" regstart: %d\n", POINTER_TO_OFFSET (regstart[*p])); + + IS_ACTIVE (reg_info[*p]) = 1; + MATCHED_SOMETHING (reg_info[*p]) = 0; + + /* Clear this whenever we change the register activity status. */ + set_regs_matched_done = 0; + + /* This is the new highest active register. */ + highest_active_reg = *p; + + /* If nothing was active before, this is the new lowest active + register. */ + if (lowest_active_reg == NO_LOWEST_ACTIVE_REG) + lowest_active_reg = *p; + + /* Move past the register number and inner group count. */ + p += 2; + just_past_start_mem = p; + + break; + + + /* The stop_memory opcode represents the end of a group. Its + arguments are the same as start_memory's: the register + number, and the number of inner groups. */ + case stop_memory: + DEBUG_PRINT3 ("EXECUTING stop_memory %ld (%ld):\n", + (long int) *p, (long int) p[1]); + + /* We need to save the string position the last time we were at + this close-group operator in case the group is operated + upon by a repetition operator, e.g., with `((a*)*(b*)*)*' + against `aba'; then we want to ignore where we are now in + the string in case this attempt to match fails. */ + old_regend[*p] = REG_MATCH_NULL_STRING_P (reg_info[*p]) + ? REG_UNSET (regend[*p]) ? d : regend[*p] + : regend[*p]; + DEBUG_PRINT2 (" old_regend: %d\n", + POINTER_TO_OFFSET (old_regend[*p])); + + regend[*p] = d; + DEBUG_PRINT2 (" regend: %d\n", POINTER_TO_OFFSET (regend[*p])); + + /* This register isn't active anymore. */ + IS_ACTIVE (reg_info[*p]) = 0; + + /* Clear this whenever we change the register activity status. */ + set_regs_matched_done = 0; + + /* If this was the only register active, nothing is active + anymore. */ + if (lowest_active_reg == highest_active_reg) + { + lowest_active_reg = NO_LOWEST_ACTIVE_REG; + highest_active_reg = NO_HIGHEST_ACTIVE_REG; + } + else + { /* We must scan for the new highest active register, since + it isn't necessarily one less than now: consider + (a(b)c(d(e)f)g). When group 3 ends, after the f), the + new highest active register is 1. */ + UCHAR_T r = *p - 1; + while (r > 0 && !IS_ACTIVE (reg_info[r])) + r--; + + /* If we end up at register zero, that means that we saved + the registers as the result of an `on_failure_jump', not + a `start_memory', and we jumped to past the innermost + `stop_memory'. For example, in ((.)*) we save + registers 1 and 2 as a result of the *, but when we pop + back to the second ), we are at the stop_memory 1. + Thus, nothing is active. */ + if (r == 0) + { + lowest_active_reg = NO_LOWEST_ACTIVE_REG; + highest_active_reg = NO_HIGHEST_ACTIVE_REG; + } + else + highest_active_reg = r; + } + + /* If just failed to match something this time around with a + group that's operated on by a repetition operator, try to + force exit from the ``loop'', and restore the register + information for this group that we had before trying this + last match. */ + if ((!MATCHED_SOMETHING (reg_info[*p]) + || just_past_start_mem == p - 1) + && (p + 2) < pend) + { + boolean is_a_jump_n = false; + + p1 = p + 2; + mcnt = 0; + switch ((re_opcode_t) *p1++) + { + case jump_n: + is_a_jump_n = true; + case pop_failure_jump: + case maybe_pop_jump: + case jump: + case dummy_failure_jump: + EXTRACT_NUMBER_AND_INCR (mcnt, p1); + if (is_a_jump_n) + p1 += OFFSET_ADDRESS_SIZE; + break; + + default: + /* do nothing */ ; + } + p1 += mcnt; + + /* If the next operation is a jump backwards in the pattern + to an on_failure_jump right before the start_memory + corresponding to this stop_memory, exit from the loop + by forcing a failure after pushing on the stack the + on_failure_jump's jump in the pattern, and d. */ + if (mcnt < 0 && (re_opcode_t) *p1 == on_failure_jump + && (re_opcode_t) p1[1+OFFSET_ADDRESS_SIZE] == start_memory + && p1[2+OFFSET_ADDRESS_SIZE] == *p) + { + /* If this group ever matched anything, then restore + what its registers were before trying this last + failed match, e.g., with `(a*)*b' against `ab' for + regstart[1], and, e.g., with `((a*)*(b*)*)*' + against `aba' for regend[3]. + + Also restore the registers for inner groups for, + e.g., `((a*)(b*))*' against `aba' (register 3 would + otherwise get trashed). */ + + if (EVER_MATCHED_SOMETHING (reg_info[*p])) + { + unsigned r; + + EVER_MATCHED_SOMETHING (reg_info[*p]) = 0; + + /* Restore this and inner groups' (if any) registers. */ + for (r = *p; r < (unsigned) *p + (unsigned) *(p + 1); + r++) + { + regstart[r] = old_regstart[r]; + + /* xx why this test? */ + if (old_regend[r] >= regstart[r]) + regend[r] = old_regend[r]; + } + } + p1++; + EXTRACT_NUMBER_AND_INCR (mcnt, p1); + PUSH_FAILURE_POINT (p1 + mcnt, d, -2); + + goto fail; + } + } + + /* Move past the register number and the inner group count. */ + p += 2; + break; + + + /* \ has been turned into a `duplicate' command which is + followed by the numeric value of as the register number. */ + case duplicate: + { + register const CHAR_T *d2, *dend2; + int regno = *p++; /* Get which register to match against. */ + DEBUG_PRINT2 ("EXECUTING duplicate %d.\n", regno); + + /* Can't back reference a group which we've never matched. */ + if (REG_UNSET (regstart[regno]) || REG_UNSET (regend[regno])) + goto fail; + + /* Where in input to try to start matching. */ + d2 = regstart[regno]; + + /* Where to stop matching; if both the place to start and + the place to stop matching are in the same string, then + set to the place to stop, otherwise, for now have to use + the end of the first string. */ + + dend2 = ((FIRST_STRING_P (regstart[regno]) + == FIRST_STRING_P (regend[regno])) + ? regend[regno] : end_match_1); + for (;;) + { + /* If necessary, advance to next segment in register + contents. */ + while (d2 == dend2) + { + if (dend2 == end_match_2) break; + if (dend2 == regend[regno]) break; + + /* End of string1 => advance to string2. */ + d2 = string2; + dend2 = regend[regno]; + } + /* At end of register contents => success */ + if (d2 == dend2) break; + + /* If necessary, advance to next segment in data. */ + PREFETCH (); + + /* How many characters left in this segment to match. */ + mcnt = dend - d; + + /* Want how many consecutive characters we can match in + one shot, so, if necessary, adjust the count. */ + if (mcnt > dend2 - d2) + mcnt = dend2 - d2; + + /* Compare that many; failure if mismatch, else move + past them. */ + if (translate + ? PREFIX(bcmp_translate) (d, d2, mcnt, translate) + : memcmp (d, d2, mcnt*sizeof(UCHAR_T))) + goto fail; + d += mcnt, d2 += mcnt; + + /* Do this because we've match some characters. */ + SET_REGS_MATCHED (); + } + } + break; + + + /* begline matches the empty string at the beginning of the string + (unless `not_bol' is set in `bufp'), and, if + `newline_anchor' is set, after newlines. */ + case begline: + DEBUG_PRINT1 ("EXECUTING begline.\n"); + + if (AT_STRINGS_BEG (d)) + { + if (!bufp->not_bol) break; + } + else if (d[-1] == '\n' && bufp->newline_anchor) + { + break; + } + /* In all other cases, we fail. */ + goto fail; + + + /* endline is the dual of begline. */ + case endline: + DEBUG_PRINT1 ("EXECUTING endline.\n"); + + if (AT_STRINGS_END (d)) + { + if (!bufp->not_eol) break; + } + + /* We have to ``prefetch'' the next character. */ + else if ((d == end1 ? *string2 : *d) == '\n' + && bufp->newline_anchor) + { + break; + } + goto fail; + + + /* Match at the very beginning of the data. */ + case begbuf: + DEBUG_PRINT1 ("EXECUTING begbuf.\n"); + if (AT_STRINGS_BEG (d)) + break; + goto fail; + + + /* Match at the very end of the data. */ + case endbuf: + DEBUG_PRINT1 ("EXECUTING endbuf.\n"); + if (AT_STRINGS_END (d)) + break; + goto fail; + + + /* on_failure_keep_string_jump is used to optimize `.*\n'. It + pushes NULL as the value for the string on the stack. Then + `pop_failure_point' will keep the current value for the + string, instead of restoring it. To see why, consider + matching `foo\nbar' against `.*\n'. The .* matches the foo; + then the . fails against the \n. But the next thing we want + to do is match the \n against the \n; if we restored the + string value, we would be back at the foo. + + Because this is used only in specific cases, we don't need to + check all the things that `on_failure_jump' does, to make + sure the right things get saved on the stack. Hence we don't + share its code. The only reason to push anything on the + stack at all is that otherwise we would have to change + `anychar's code to do something besides goto fail in this + case; that seems worse than this. */ + case on_failure_keep_string_jump: + DEBUG_PRINT1 ("EXECUTING on_failure_keep_string_jump"); + + EXTRACT_NUMBER_AND_INCR (mcnt, p); + #ifdef _LIBC + DEBUG_PRINT3 (" %d (to %p):\n", mcnt, p + mcnt); + #else + DEBUG_PRINT3 (" %d (to 0x%x):\n", mcnt, p + mcnt); + #endif + + PUSH_FAILURE_POINT (p + mcnt, NULL, -2); + break; + + + /* Uses of on_failure_jump: + + Each alternative starts with an on_failure_jump that points + to the beginning of the next alternative. Each alternative + except the last ends with a jump that in effect jumps past + the rest of the alternatives. (They really jump to the + ending jump of the following alternative, because tensioning + these jumps is a hassle.) + + Repeats start with an on_failure_jump that points past both + the repetition text and either the following jump or + pop_failure_jump back to this on_failure_jump. */ + case on_failure_jump: + on_failure: + DEBUG_PRINT1 ("EXECUTING on_failure_jump"); + + EXTRACT_NUMBER_AND_INCR (mcnt, p); + #ifdef _LIBC + DEBUG_PRINT3 (" %d (to %p)", mcnt, p + mcnt); + #else + DEBUG_PRINT3 (" %d (to 0x%x)", mcnt, p + mcnt); + #endif + + /* If this on_failure_jump comes right before a group (i.e., + the original * applied to a group), save the information + for that group and all inner ones, so that if we fail back + to this point, the group's information will be correct. + For example, in \(a*\)*\1, we need the preceding group, + and in \(zz\(a*\)b*\)\2, we need the inner group. */ + + /* We can't use `p' to check ahead because we push + a failure point to `p + mcnt' after we do this. */ + p1 = p; + + /* We need to skip no_op's before we look for the + start_memory in case this on_failure_jump is happening as + the result of a completed succeed_n, as in \(a\)\{1,3\}b\1 + against aba. */ + while (p1 < pend && (re_opcode_t) *p1 == no_op) + p1++; + + if (p1 < pend && (re_opcode_t) *p1 == start_memory) + { + /* We have a new highest active register now. This will + get reset at the start_memory we are about to get to, + but we will have saved all the registers relevant to + this repetition op, as described above. */ + highest_active_reg = *(p1 + 1) + *(p1 + 2); + if (lowest_active_reg == NO_LOWEST_ACTIVE_REG) + lowest_active_reg = *(p1 + 1); + } + + DEBUG_PRINT1 (":\n"); + PUSH_FAILURE_POINT (p + mcnt, d, -2); + break; + + + /* A smart repeat ends with `maybe_pop_jump'. + We change it to either `pop_failure_jump' or `jump'. */ + case maybe_pop_jump: + EXTRACT_NUMBER_AND_INCR (mcnt, p); + DEBUG_PRINT2 ("EXECUTING maybe_pop_jump %d.\n", mcnt); + { + register UCHAR_T *p2 = p; + + /* Compare the beginning of the repeat with what in the + pattern follows its end. If we can establish that there + is nothing that they would both match, i.e., that we + would have to backtrack because of (as in, e.g., `a*a') + then we can change to pop_failure_jump, because we'll + never have to backtrack. + + This is not true in the case of alternatives: in + `(a|ab)*' we do need to backtrack to the `ab' alternative + (e.g., if the string was `ab'). But instead of trying to + detect that here, the alternative has put on a dummy + failure point which is what we will end up popping. */ + + /* Skip over open/close-group commands. + If what follows this loop is a ...+ construct, + look at what begins its body, since we will have to + match at least one of that. */ + while (1) + { + if (p2 + 2 < pend + && ((re_opcode_t) *p2 == stop_memory + || (re_opcode_t) *p2 == start_memory)) + p2 += 3; + else if (p2 + 2 + 2 * OFFSET_ADDRESS_SIZE < pend + && (re_opcode_t) *p2 == dummy_failure_jump) + p2 += 2 + 2 * OFFSET_ADDRESS_SIZE; + else + break; + } + + p1 = p + mcnt; + /* p1[0] ... p1[2] are the `on_failure_jump' corresponding + to the `maybe_finalize_jump' of this case. Examine what + follows. */ + + /* If we're at the end of the pattern, we can change. */ + if (p2 == pend) + { + /* Consider what happens when matching ":\(.*\)" + against ":/". I don't really understand this code + yet. */ + p[-(1+OFFSET_ADDRESS_SIZE)] = (UCHAR_T) + pop_failure_jump; + DEBUG_PRINT1 + (" End of pattern: change to `pop_failure_jump'.\n"); + } + + else if ((re_opcode_t) *p2 == exactn + #ifdef MBS_SUPPORT + || (re_opcode_t) *p2 == exactn_bin + #endif + || (bufp->newline_anchor && (re_opcode_t) *p2 == endline)) + { + register UCHAR_T c + = *p2 == (UCHAR_T) endline ? '\n' : p2[2]; + + if (((re_opcode_t) p1[1+OFFSET_ADDRESS_SIZE] == exactn + #ifdef MBS_SUPPORT + || (re_opcode_t) p1[1+OFFSET_ADDRESS_SIZE] == exactn_bin + #endif + ) && p1[3+OFFSET_ADDRESS_SIZE] != c) + { + p[-(1+OFFSET_ADDRESS_SIZE)] = (UCHAR_T) + pop_failure_jump; + #ifdef WCHAR + DEBUG_PRINT3 (" %C != %C => pop_failure_jump.\n", + (wint_t) c, + (wint_t) p1[3+OFFSET_ADDRESS_SIZE]); + #else + DEBUG_PRINT3 (" %c != %c => pop_failure_jump.\n", + (char) c, + (char) p1[3+OFFSET_ADDRESS_SIZE]); + #endif + } + + #ifndef WCHAR + else if ((re_opcode_t) p1[3] == charset + || (re_opcode_t) p1[3] == charset_not) + { + int not = (re_opcode_t) p1[3] == charset_not; + + if (c < (unsigned) (p1[4] * BYTEWIDTH) + && p1[5 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH))) + not = !not; + + /* `not' is equal to 1 if c would match, which means + that we can't change to pop_failure_jump. */ + if (!not) + { + p[-3] = (unsigned char) pop_failure_jump; + DEBUG_PRINT1 (" No match => pop_failure_jump.\n"); + } + } + #endif /* not WCHAR */ + } + #ifndef WCHAR + else if ((re_opcode_t) *p2 == charset) + { + /* We win if the first character of the loop is not part + of the charset. */ + if ((re_opcode_t) p1[3] == exactn + && ! ((int) p2[1] * BYTEWIDTH > (int) p1[5] + && (p2[2 + p1[5] / BYTEWIDTH] + & (1 << (p1[5] % BYTEWIDTH))))) + { + p[-3] = (unsigned char) pop_failure_jump; + DEBUG_PRINT1 (" No match => pop_failure_jump.\n"); + } + + else if ((re_opcode_t) p1[3] == charset_not) + { + int idx; + /* We win if the charset_not inside the loop + lists every character listed in the charset after. */ + for (idx = 0; idx < (int) p2[1]; idx++) + if (! (p2[2 + idx] == 0 + || (idx < (int) p1[4] + && ((p2[2 + idx] & ~ p1[5 + idx]) == 0)))) + break; + + if (idx == p2[1]) + { + p[-3] = (unsigned char) pop_failure_jump; + DEBUG_PRINT1 (" No match => pop_failure_jump.\n"); + } + } + else if ((re_opcode_t) p1[3] == charset) + { + int idx; + /* We win if the charset inside the loop + has no overlap with the one after the loop. */ + for (idx = 0; + idx < (int) p2[1] && idx < (int) p1[4]; + idx++) + if ((p2[2 + idx] & p1[5 + idx]) != 0) + break; + + if (idx == p2[1] || idx == p1[4]) + { + p[-3] = (unsigned char) pop_failure_jump; + DEBUG_PRINT1 (" No match => pop_failure_jump.\n"); + } + } + } + #endif /* not WCHAR */ + } + p -= OFFSET_ADDRESS_SIZE; /* Point at relative address again. */ + if ((re_opcode_t) p[-1] != pop_failure_jump) + { + p[-1] = (UCHAR_T) jump; + DEBUG_PRINT1 (" Match => jump.\n"); + goto unconditional_jump; + } + /* Note fall through. */ + + + /* The end of a simple repeat has a pop_failure_jump back to + its matching on_failure_jump, where the latter will push a + failure point. The pop_failure_jump takes off failure + points put on by this pop_failure_jump's matching + on_failure_jump; we got through the pattern to here from the + matching on_failure_jump, so didn't fail. */ + case pop_failure_jump: + { + /* We need to pass separate storage for the lowest and + highest registers, even though we don't care about the + actual values. Otherwise, we will restore only one + register from the stack, since lowest will == highest in + `pop_failure_point'. */ + active_reg_t dummy_low_reg, dummy_high_reg; + UCHAR_T *pdummy = NULL; + const CHAR_T *sdummy = NULL; + + DEBUG_PRINT1 ("EXECUTING pop_failure_jump.\n"); + POP_FAILURE_POINT (sdummy, pdummy, + dummy_low_reg, dummy_high_reg, + reg_dummy, reg_dummy, reg_info_dummy); + } + /* Note fall through. */ + + unconditional_jump: + #ifdef _LIBC + DEBUG_PRINT2 ("\n%p: ", p); + #else + DEBUG_PRINT2 ("\n0x%x: ", p); + #endif + /* Note fall through. */ + + /* Unconditionally jump (without popping any failure points). */ + case jump: + EXTRACT_NUMBER_AND_INCR (mcnt, p); /* Get the amount to jump. */ + DEBUG_PRINT2 ("EXECUTING jump %d ", mcnt); + p += mcnt; /* Do the jump. */ + #ifdef _LIBC + DEBUG_PRINT2 ("(to %p).\n", p); + #else + DEBUG_PRINT2 ("(to 0x%x).\n", p); + #endif + break; + + + /* We need this opcode so we can detect where alternatives end + in `group_match_null_string_p' et al. */ + case jump_past_alt: + DEBUG_PRINT1 ("EXECUTING jump_past_alt.\n"); + goto unconditional_jump; + + + /* Normally, the on_failure_jump pushes a failure point, which + then gets popped at pop_failure_jump. We will end up at + pop_failure_jump, also, and with a pattern of, say, `a+', we + are skipping over the on_failure_jump, so we have to push + something meaningless for pop_failure_jump to pop. */ + case dummy_failure_jump: + DEBUG_PRINT1 ("EXECUTING dummy_failure_jump.\n"); + /* It doesn't matter what we push for the string here. What + the code at `fail' tests is the value for the pattern. */ + PUSH_FAILURE_POINT (NULL, NULL, -2); + goto unconditional_jump; + + + /* At the end of an alternative, we need to push a dummy failure + point in case we are followed by a `pop_failure_jump', because + we don't want the failure point for the alternative to be + popped. For example, matching `(a|ab)*' against `aab' + requires that we match the `ab' alternative. */ + case push_dummy_failure: + DEBUG_PRINT1 ("EXECUTING push_dummy_failure.\n"); + /* See comments just above at `dummy_failure_jump' about the + two zeroes. */ + PUSH_FAILURE_POINT (NULL, NULL, -2); + break; + + /* Have to succeed matching what follows at least n times. + After that, handle like `on_failure_jump'. */ + case succeed_n: + EXTRACT_NUMBER (mcnt, p + OFFSET_ADDRESS_SIZE); + DEBUG_PRINT2 ("EXECUTING succeed_n %d.\n", mcnt); + + assert (mcnt >= 0); + /* Originally, this is how many times we HAVE to succeed. */ + if (mcnt > 0) + { + mcnt--; + p += OFFSET_ADDRESS_SIZE; + STORE_NUMBER_AND_INCR (p, mcnt); + #ifdef _LIBC + DEBUG_PRINT3 (" Setting %p to %d.\n", p - OFFSET_ADDRESS_SIZE + , mcnt); + #else + DEBUG_PRINT3 (" Setting 0x%x to %d.\n", p - OFFSET_ADDRESS_SIZE + , mcnt); + #endif + } + else if (mcnt == 0) + { + #ifdef _LIBC + DEBUG_PRINT2 (" Setting two bytes from %p to no_op.\n", + p + OFFSET_ADDRESS_SIZE); + #else + DEBUG_PRINT2 (" Setting two bytes from 0x%x to no_op.\n", + p + OFFSET_ADDRESS_SIZE); + #endif /* _LIBC */ + + #ifdef WCHAR + p[1] = (UCHAR_T) no_op; + #else + p[2] = (UCHAR_T) no_op; + p[3] = (UCHAR_T) no_op; + #endif /* WCHAR */ + goto on_failure; + } + break; + + case jump_n: + EXTRACT_NUMBER (mcnt, p + OFFSET_ADDRESS_SIZE); + DEBUG_PRINT2 ("EXECUTING jump_n %d.\n", mcnt); + + /* Originally, this is how many times we CAN jump. */ + if (mcnt) + { + mcnt--; + STORE_NUMBER (p + OFFSET_ADDRESS_SIZE, mcnt); + + #ifdef _LIBC + DEBUG_PRINT3 (" Setting %p to %d.\n", p + OFFSET_ADDRESS_SIZE, + mcnt); + #else + DEBUG_PRINT3 (" Setting 0x%x to %d.\n", p + OFFSET_ADDRESS_SIZE, + mcnt); + #endif /* _LIBC */ + goto unconditional_jump; + } + /* If don't have to jump any more, skip over the rest of command. */ + else + p += 2 * OFFSET_ADDRESS_SIZE; + break; + + case set_number_at: + { + DEBUG_PRINT1 ("EXECUTING set_number_at.\n"); + + EXTRACT_NUMBER_AND_INCR (mcnt, p); + p1 = p + mcnt; + EXTRACT_NUMBER_AND_INCR (mcnt, p); + #ifdef _LIBC + DEBUG_PRINT3 (" Setting %p to %d.\n", p1, mcnt); + #else + DEBUG_PRINT3 (" Setting 0x%x to %d.\n", p1, mcnt); + #endif + STORE_NUMBER (p1, mcnt); + break; + } + + #if 0 + /* The DEC Alpha C compiler 3.x generates incorrect code for the + test WORDCHAR_P (d - 1) != WORDCHAR_P (d) in the expansion of + AT_WORD_BOUNDARY, so this code is disabled. Expanding the + macro and introducing temporary variables works around the bug. */ + + case wordbound: + DEBUG_PRINT1 ("EXECUTING wordbound.\n"); + if (AT_WORD_BOUNDARY (d)) + break; + goto fail; + + case notwordbound: + DEBUG_PRINT1 ("EXECUTING notwordbound.\n"); + if (AT_WORD_BOUNDARY (d)) + goto fail; + break; + #else + case wordbound: + { + boolean prevchar, thischar; + + DEBUG_PRINT1 ("EXECUTING wordbound.\n"); + if (AT_STRINGS_BEG (d) || AT_STRINGS_END (d)) + break; + + prevchar = WORDCHAR_P (d - 1); + thischar = WORDCHAR_P (d); + if (prevchar != thischar) + break; + goto fail; + } + + case notwordbound: + { + boolean prevchar, thischar; + + DEBUG_PRINT1 ("EXECUTING notwordbound.\n"); + if (AT_STRINGS_BEG (d) || AT_STRINGS_END (d)) + goto fail; + + prevchar = WORDCHAR_P (d - 1); + thischar = WORDCHAR_P (d); + if (prevchar != thischar) + goto fail; + break; + } + #endif + + case wordbeg: + DEBUG_PRINT1 ("EXECUTING wordbeg.\n"); + if (!AT_STRINGS_END (d) && WORDCHAR_P (d) + && (AT_STRINGS_BEG (d) || !WORDCHAR_P (d - 1))) + break; + goto fail; + + case wordend: + DEBUG_PRINT1 ("EXECUTING wordend.\n"); + if (!AT_STRINGS_BEG (d) && WORDCHAR_P (d - 1) + && (AT_STRINGS_END (d) || !WORDCHAR_P (d))) + break; + goto fail; + + #ifdef emacs + case before_dot: + DEBUG_PRINT1 ("EXECUTING before_dot.\n"); + if (PTR_CHAR_POS ((unsigned char *) d) >= point) + goto fail; + break; + + case at_dot: + DEBUG_PRINT1 ("EXECUTING at_dot.\n"); + if (PTR_CHAR_POS ((unsigned char *) d) != point) + goto fail; + break; + + case after_dot: + DEBUG_PRINT1 ("EXECUTING after_dot.\n"); + if (PTR_CHAR_POS ((unsigned char *) d) <= point) + goto fail; + break; + + case syntaxspec: + DEBUG_PRINT2 ("EXECUTING syntaxspec %d.\n", mcnt); + mcnt = *p++; + goto matchsyntax; + + case wordchar: + DEBUG_PRINT1 ("EXECUTING Emacs wordchar.\n"); + mcnt = (int) Sword; + matchsyntax: + PREFETCH (); + /* Can't use *d++ here; SYNTAX may be an unsafe macro. */ + d++; + if (SYNTAX (d[-1]) != (enum syntaxcode) mcnt) + goto fail; + SET_REGS_MATCHED (); + break; + + case notsyntaxspec: + DEBUG_PRINT2 ("EXECUTING notsyntaxspec %d.\n", mcnt); + mcnt = *p++; + goto matchnotsyntax; + + case notwordchar: + DEBUG_PRINT1 ("EXECUTING Emacs notwordchar.\n"); + mcnt = (int) Sword; + matchnotsyntax: + PREFETCH (); + /* Can't use *d++ here; SYNTAX may be an unsafe macro. */ + d++; + if (SYNTAX (d[-1]) == (enum syntaxcode) mcnt) + goto fail; + SET_REGS_MATCHED (); + break; + + #else /* not emacs */ + case wordchar: + DEBUG_PRINT1 ("EXECUTING non-Emacs wordchar.\n"); + PREFETCH (); + if (!WORDCHAR_P (d)) + goto fail; + SET_REGS_MATCHED (); + d++; + break; + + case notwordchar: + DEBUG_PRINT1 ("EXECUTING non-Emacs notwordchar.\n"); + PREFETCH (); + if (WORDCHAR_P (d)) + goto fail; + SET_REGS_MATCHED (); + d++; + break; + #endif /* not emacs */ + + default: + abort (); + } + continue; /* Successfully executed one pattern command; keep going. */ + + + /* We goto here if a matching operation fails. */ + fail: + if (!FAIL_STACK_EMPTY ()) + { /* A restart point is known. Restore to that state. */ + DEBUG_PRINT1 ("\nFAIL:\n"); + POP_FAILURE_POINT (d, p, + lowest_active_reg, highest_active_reg, + regstart, regend, reg_info); + + /* If this failure point is a dummy, try the next one. */ + if (!p) + goto fail; + + /* If we failed to the end of the pattern, don't examine *p. */ + assert (p <= pend); + if (p < pend) + { + boolean is_a_jump_n = false; + + /* If failed to a backwards jump that's part of a repetition + loop, need to pop this failure point and use the next one. */ + switch ((re_opcode_t) *p) + { + case jump_n: + is_a_jump_n = true; + case maybe_pop_jump: + case pop_failure_jump: + case jump: + p1 = p + 1; + EXTRACT_NUMBER_AND_INCR (mcnt, p1); + p1 += mcnt; + + if ((is_a_jump_n && (re_opcode_t) *p1 == succeed_n) + || (!is_a_jump_n + && (re_opcode_t) *p1 == on_failure_jump)) + goto fail; + break; + default: + /* do nothing */ ; + } + } + + if (d >= string1 && d <= end1) + dend = end_match_1; + } + else + break; /* Matching at this starting point really fails. */ + } /* for (;;) */ + + if (best_regs_set) + goto restore_best_regs; + + FREE_VARIABLES (); + + return -1; /* Failure to match. */ + } /* re_match_2 */ + + /* Subroutine definitions for re_match_2. */ + + + /* We are passed P pointing to a register number after a start_memory. + + Return true if the pattern up to the corresponding stop_memory can + match the empty string, and false otherwise. + + If we find the matching stop_memory, sets P to point to one past its number. + Otherwise, sets P to an undefined byte less than or equal to END. + + We don't handle duplicates properly (yet). */ + + static boolean + PREFIX(group_match_null_string_p) (p, end, reg_info) + UCHAR_T **p, *end; + PREFIX(register_info_type) *reg_info; + { + int mcnt; + /* Point to after the args to the start_memory. */ + UCHAR_T *p1 = *p + 2; + + while (p1 < end) + { + /* Skip over opcodes that can match nothing, and return true or + false, as appropriate, when we get to one that can't, or to the + matching stop_memory. */ + + switch ((re_opcode_t) *p1) + { + /* Could be either a loop or a series of alternatives. */ + case on_failure_jump: + p1++; + EXTRACT_NUMBER_AND_INCR (mcnt, p1); + + /* If the next operation is not a jump backwards in the + pattern. */ + + if (mcnt >= 0) + { + /* Go through the on_failure_jumps of the alternatives, + seeing if any of the alternatives cannot match nothing. + The last alternative starts with only a jump, + whereas the rest start with on_failure_jump and end + with a jump, e.g., here is the pattern for `a|b|c': + + /on_failure_jump/0/6/exactn/1/a/jump_past_alt/0/6 + /on_failure_jump/0/6/exactn/1/b/jump_past_alt/0/3 + /exactn/1/c + + So, we have to first go through the first (n-1) + alternatives and then deal with the last one separately. */ + + + /* Deal with the first (n-1) alternatives, which start + with an on_failure_jump (see above) that jumps to right + past a jump_past_alt. */ + + while ((re_opcode_t) p1[mcnt-(1+OFFSET_ADDRESS_SIZE)] == + jump_past_alt) + { + /* `mcnt' holds how many bytes long the alternative + is, including the ending `jump_past_alt' and + its number. */ + + if (!PREFIX(alt_match_null_string_p) (p1, p1 + mcnt - + (1 + OFFSET_ADDRESS_SIZE), + reg_info)) + return false; + + /* Move to right after this alternative, including the + jump_past_alt. */ + p1 += mcnt; + + /* Break if it's the beginning of an n-th alternative + that doesn't begin with an on_failure_jump. */ + if ((re_opcode_t) *p1 != on_failure_jump) + break; + + /* Still have to check that it's not an n-th + alternative that starts with an on_failure_jump. */ + p1++; + EXTRACT_NUMBER_AND_INCR (mcnt, p1); + if ((re_opcode_t) p1[mcnt-(1+OFFSET_ADDRESS_SIZE)] != + jump_past_alt) + { + /* Get to the beginning of the n-th alternative. */ + p1 -= 1 + OFFSET_ADDRESS_SIZE; + break; + } + } + + /* Deal with the last alternative: go back and get number + of the `jump_past_alt' just before it. `mcnt' contains + the length of the alternative. */ + EXTRACT_NUMBER (mcnt, p1 - OFFSET_ADDRESS_SIZE); + + if (!PREFIX(alt_match_null_string_p) (p1, p1 + mcnt, reg_info)) + return false; + + p1 += mcnt; /* Get past the n-th alternative. */ + } /* if mcnt > 0 */ + break; + + + case stop_memory: + assert (p1[1] == **p); + *p = p1 + 2; + return true; + + + default: + if (!PREFIX(common_op_match_null_string_p) (&p1, end, reg_info)) + return false; + } + } /* while p1 < end */ + + return false; + } /* group_match_null_string_p */ + + + /* Similar to group_match_null_string_p, but doesn't deal with alternatives: + It expects P to be the first byte of a single alternative and END one + byte past the last. The alternative can contain groups. */ + + static boolean + PREFIX(alt_match_null_string_p) (p, end, reg_info) + UCHAR_T *p, *end; + PREFIX(register_info_type) *reg_info; + { + int mcnt; + UCHAR_T *p1 = p; + + while (p1 < end) + { + /* Skip over opcodes that can match nothing, and break when we get + to one that can't. */ + + switch ((re_opcode_t) *p1) + { + /* It's a loop. */ + case on_failure_jump: + p1++; + EXTRACT_NUMBER_AND_INCR (mcnt, p1); + p1 += mcnt; + break; + + default: + if (!PREFIX(common_op_match_null_string_p) (&p1, end, reg_info)) + return false; + } + } /* while p1 < end */ + + return true; + } /* alt_match_null_string_p */ + + + /* Deals with the ops common to group_match_null_string_p and + alt_match_null_string_p. + + Sets P to one after the op and its arguments, if any. */ + + static boolean + PREFIX(common_op_match_null_string_p) (p, end, reg_info) + UCHAR_T **p, *end; + PREFIX(register_info_type) *reg_info; + { + int mcnt; + boolean ret; + int reg_no; + UCHAR_T *p1 = *p; + + switch ((re_opcode_t) *p1++) + { + case no_op: + case begline: + case endline: + case begbuf: + case endbuf: + case wordbeg: + case wordend: + case wordbound: + case notwordbound: + #ifdef emacs + case before_dot: + case at_dot: + case after_dot: + #endif + break; + + case start_memory: + reg_no = *p1; + assert (reg_no > 0 && reg_no <= MAX_REGNUM); + ret = PREFIX(group_match_null_string_p) (&p1, end, reg_info); + + /* Have to set this here in case we're checking a group which + contains a group and a back reference to it. */ + + if (REG_MATCH_NULL_STRING_P (reg_info[reg_no]) == MATCH_NULL_UNSET_VALUE) + REG_MATCH_NULL_STRING_P (reg_info[reg_no]) = ret; + + if (!ret) + return false; + break; + + /* If this is an optimized succeed_n for zero times, make the jump. */ + case jump: + EXTRACT_NUMBER_AND_INCR (mcnt, p1); + if (mcnt >= 0) + p1 += mcnt; + else + return false; + break; + + case succeed_n: + /* Get to the number of times to succeed. */ + p1 += OFFSET_ADDRESS_SIZE; + EXTRACT_NUMBER_AND_INCR (mcnt, p1); + + if (mcnt == 0) + { + p1 -= 2 * OFFSET_ADDRESS_SIZE; + EXTRACT_NUMBER_AND_INCR (mcnt, p1); + p1 += mcnt; + } + else + return false; + break; + + case duplicate: + if (!REG_MATCH_NULL_STRING_P (reg_info[*p1])) + return false; + break; + + case set_number_at: + p1 += 2 * OFFSET_ADDRESS_SIZE; + + default: + /* All other opcodes mean we cannot match the empty string. */ + return false; + } + + *p = p1; + return true; + } /* common_op_match_null_string_p */ + + + /* Return zero if TRANSLATE[S1] and TRANSLATE[S2] are identical for LEN + bytes; nonzero otherwise. */ + + static int + PREFIX(bcmp_translate) (s1, s2, len, translate) + const CHAR_T *s1, *s2; + register int len; + RE_TRANSLATE_TYPE translate; + { + register const UCHAR_T *p1 = (const UCHAR_T *) s1; + register const UCHAR_T *p2 = (const UCHAR_T *) s2; + while (len) + { + #ifdef WCHAR + if (((*p1<=0xff)?translate[*p1++]:*p1++) + != ((*p2<=0xff)?translate[*p2++]:*p2++)) + return 1; + #else /* BYTE */ + if (translate[*p1++] != translate[*p2++]) return 1; + #endif /* WCHAR */ + len--; + } + return 0; + } + + + #else /* not INSIDE_RECURSION */ + + /* Entry points for GNU code. */ + + /* re_compile_pattern is the GNU regular expression compiler: it + compiles PATTERN (of length SIZE) and puts the result in BUFP. + Returns 0 if the pattern was valid, otherwise an error string. + + Assumes the `allocated' (and perhaps `buffer') and `translate' fields + are set in BUFP on entry. + + We call regex_compile to do the actual compilation. */ + + const char * + re_compile_pattern (pattern, length, bufp) + const char *pattern; + size_t length; + struct re_pattern_buffer *bufp; + { + reg_errcode_t ret; + + /* GNU code is written to assume at least RE_NREGS registers will be set + (and at least one extra will be -1). */ + bufp->regs_allocated = REGS_UNALLOCATED; + + /* And GNU code determines whether or not to get register information + by passing null for the REGS argument to re_match, etc., not by + setting no_sub. */ + bufp->no_sub = 0; + + /* Match anchors at newline. */ + bufp->newline_anchor = 1; + + # ifdef MBS_SUPPORT + if (MB_CUR_MAX != 1) + ret = wcs_regex_compile (pattern, length, re_syntax_options, bufp); + else + # endif + ret = byte_regex_compile (pattern, length, re_syntax_options, bufp); + + if (!ret) + return NULL; + return gettext (re_error_msgid + re_error_msgid_idx[(int) ret]); + } + #ifdef _LIBC + weak_alias (__re_compile_pattern, re_compile_pattern) + #endif + + /* Entry points compatible with 4.2 BSD regex library. We don't define + them unless specifically requested. */ + + #if defined _REGEX_RE_COMP || defined _LIBC + + /* BSD has one and only one pattern buffer. */ + static struct re_pattern_buffer re_comp_buf; + + char * + #ifdef _LIBC + /* Make these definitions weak in libc, so POSIX programs can redefine + these names if they don't use our functions, and still use + regcomp/regexec below without link errors. */ + weak_function + #endif + re_comp (s) + const char *s; + { + reg_errcode_t ret; + + if (!s) + { + if (!re_comp_buf.buffer) + return gettext ("No previous regular expression"); + return 0; + } + + if (!re_comp_buf.buffer) + { + re_comp_buf.buffer = (unsigned char *) malloc (200); + if (re_comp_buf.buffer == NULL) + return (char *) gettext (re_error_msgid + + re_error_msgid_idx[(int) REG_ESPACE]); + re_comp_buf.allocated = 200; + + re_comp_buf.fastmap = (char *) malloc (1 << BYTEWIDTH); + if (re_comp_buf.fastmap == NULL) + return (char *) gettext (re_error_msgid + + re_error_msgid_idx[(int) REG_ESPACE]); + } + + /* Since `re_exec' always passes NULL for the `regs' argument, we + don't need to initialize the pattern buffer fields which affect it. */ + + /* Match anchors at newlines. */ + re_comp_buf.newline_anchor = 1; + + # ifdef MBS_SUPPORT + if (MB_CUR_MAX != 1) + ret = wcs_regex_compile (s, strlen (s), re_syntax_options, &re_comp_buf); + else + # endif + ret = byte_regex_compile (s, strlen (s), re_syntax_options, &re_comp_buf); + + if (!ret) + return NULL; + + /* Yes, we're discarding `const' here if !HAVE_LIBINTL. */ + return (char *) gettext (re_error_msgid + re_error_msgid_idx[(int) ret]); + } + + + int + #ifdef _LIBC + weak_function + #endif + re_exec (s) + const char *s; + { + const int len = strlen (s); + return + 0 <= re_search (&re_comp_buf, s, len, 0, len, (struct re_registers *) 0); + } + + #endif /* _REGEX_RE_COMP */ + + /* POSIX.2 functions. Don't define these for Emacs. */ + + #ifndef emacs + + /* regcomp takes a regular expression as a string and compiles it. + + PREG is a regex_t *. We do not expect any fields to be initialized, + since POSIX says we shouldn't. Thus, we set + + `buffer' to the compiled pattern; + `used' to the length of the compiled pattern; + `syntax' to RE_SYNTAX_POSIX_EXTENDED if the + REG_EXTENDED bit in CFLAGS is set; otherwise, to + RE_SYNTAX_POSIX_BASIC; + `newline_anchor' to REG_NEWLINE being set in CFLAGS; + `fastmap' to an allocated space for the fastmap; + `fastmap_accurate' to zero; + `re_nsub' to the number of subexpressions in PATTERN. + + PATTERN is the address of the pattern string. + + CFLAGS is a series of bits which affect compilation. + + If REG_EXTENDED is set, we use POSIX extended syntax; otherwise, we + use POSIX basic syntax. + + If REG_NEWLINE is set, then . and [^...] don't match newline. + Also, regexec will try a match beginning after every newline. + + If REG_ICASE is set, then we considers upper- and lowercase + versions of letters to be equivalent when matching. + + If REG_NOSUB is set, then when PREG is passed to regexec, that + routine will report only success or failure, and nothing about the + registers. + + It returns 0 if it succeeds, nonzero if it doesn't. (See regex.h for + the return codes and their meanings.) */ + + int + regcomp (preg, pattern, cflags) + regex_t *preg; + const char *pattern; + int cflags; + { + reg_errcode_t ret; + reg_syntax_t syntax + = (cflags & REG_EXTENDED) ? + RE_SYNTAX_POSIX_EXTENDED : RE_SYNTAX_POSIX_BASIC; + + /* regex_compile will allocate the space for the compiled pattern. */ + preg->buffer = 0; + preg->allocated = 0; + preg->used = 0; + + /* Try to allocate space for the fastmap. */ + preg->fastmap = (char *) malloc (1 << BYTEWIDTH); + + if (cflags & REG_ICASE) + { + unsigned i; + + preg->translate + = (RE_TRANSLATE_TYPE) malloc (CHAR_SET_SIZE + * sizeof (*(RE_TRANSLATE_TYPE)0)); + if (preg->translate == NULL) + return (int) REG_ESPACE; + + /* Map uppercase characters to corresponding lowercase ones. */ + for (i = 0; i < CHAR_SET_SIZE; i++) + preg->translate[i] = ISUPPER (i) ? TOLOWER (i) : i; + } + else + preg->translate = NULL; + + /* If REG_NEWLINE is set, newlines are treated differently. */ + if (cflags & REG_NEWLINE) + { /* REG_NEWLINE implies neither . nor [^...] match newline. */ + syntax &= ~RE_DOT_NEWLINE; + syntax |= RE_HAT_LISTS_NOT_NEWLINE; + /* It also changes the matching behavior. */ + preg->newline_anchor = 1; + } + else + preg->newline_anchor = 0; + + preg->no_sub = !!(cflags & REG_NOSUB); + + /* POSIX says a null character in the pattern terminates it, so we + can use strlen here in compiling the pattern. */ + # ifdef MBS_SUPPORT + if (MB_CUR_MAX != 1) + ret = wcs_regex_compile (pattern, strlen (pattern), syntax, preg); + else + # endif + ret = byte_regex_compile (pattern, strlen (pattern), syntax, preg); + + /* POSIX doesn't distinguish between an unmatched open-group and an + unmatched close-group: both are REG_EPAREN. */ + if (ret == REG_ERPAREN) ret = REG_EPAREN; + + if (ret == REG_NOERROR && preg->fastmap) + { + /* Compute the fastmap now, since regexec cannot modify the pattern + buffer. */ + if (re_compile_fastmap (preg) == -2) + { + /* Some error occurred while computing the fastmap, just forget + about it. */ + free (preg->fastmap); + preg->fastmap = NULL; + } + } + + return (int) ret; + } + #ifdef _LIBC + weak_alias (__regcomp, regcomp) + #endif + + + /* regexec searches for a given pattern, specified by PREG, in the + string STRING. + + If NMATCH is zero or REG_NOSUB was set in the cflags argument to + `regcomp', we ignore PMATCH. Otherwise, we assume PMATCH has at + least NMATCH elements, and we set them to the offsets of the + corresponding matched substrings. + + EFLAGS specifies `execution flags' which affect matching: if + REG_NOTBOL is set, then ^ does not match at the beginning of the + string; if REG_NOTEOL is set, then $ does not match at the end. + + We return 0 if we find a match and REG_NOMATCH if not. */ + + int + regexec (preg, string, nmatch, pmatch, eflags) + const regex_t *preg; + const char *string; + size_t nmatch; + regmatch_t pmatch[]; + int eflags; + { + int ret; + struct re_registers regs; + regex_t private_preg; + int len = strlen (string); + boolean want_reg_info = !preg->no_sub && nmatch > 0; + + private_preg = *preg; + + private_preg.not_bol = !!(eflags & REG_NOTBOL); + private_preg.not_eol = !!(eflags & REG_NOTEOL); + + /* The user has told us exactly how many registers to return + information about, via `nmatch'. We have to pass that on to the + matching routines. */ + private_preg.regs_allocated = REGS_FIXED; + + if (want_reg_info) + { + regs.num_regs = nmatch; + regs.start = TALLOC (nmatch * 2, regoff_t); + if (regs.start == NULL) + return (int) REG_NOMATCH; + regs.end = regs.start + nmatch; + } + + /* Perform the searching operation. */ + ret = re_search (&private_preg, string, len, + /* start: */ 0, /* range: */ len, + want_reg_info ? ®s : (struct re_registers *) 0); + + /* Copy the register information to the POSIX structure. */ + if (want_reg_info) + { + if (ret >= 0) + { + unsigned r; + + for (r = 0; r < nmatch; r++) + { + pmatch[r].rm_so = regs.start[r]; + pmatch[r].rm_eo = regs.end[r]; + } + } + + /* If we needed the temporary register info, free the space now. */ + free (regs.start); + } + + /* We want zero return to mean success, unlike `re_search'. */ + return ret >= 0 ? (int) REG_NOERROR : (int) REG_NOMATCH; + } + #ifdef _LIBC + weak_alias (__regexec, regexec) + #endif + + + /* Returns a message corresponding to an error code, ERRCODE, returned + from either regcomp or regexec. We don't use PREG here. */ + + size_t + regerror (errcode, preg, errbuf, errbuf_size) + int errcode; + const regex_t *preg; + char *errbuf; + size_t errbuf_size; + { + const char *msg; + size_t msg_size; + + if (errcode < 0 + || errcode >= (int) (sizeof (re_error_msgid_idx) + / sizeof (re_error_msgid_idx[0]))) + /* Only error codes returned by the rest of the code should be passed + to this routine. If we are given anything else, or if other regex + code generates an invalid error code, then the program has a bug. + Dump core so we can fix it. */ + abort (); + + msg = gettext (re_error_msgid + re_error_msgid_idx[errcode]); + + msg_size = strlen (msg) + 1; /* Includes the null. */ + + if (errbuf_size != 0) + { + if (msg_size > errbuf_size) + { + #if defined HAVE_MEMPCPY || defined _LIBC + *((char *) __mempcpy (errbuf, msg, errbuf_size - 1)) = '\0'; + #else + memcpy (errbuf, msg, errbuf_size - 1); + errbuf[errbuf_size - 1] = 0; + #endif + } + else + memcpy (errbuf, msg, msg_size); + } + + return msg_size; + } + #ifdef _LIBC + weak_alias (__regerror, regerror) + #endif + + + /* Free dynamically allocated space used by PREG. */ + + void + regfree (preg) + regex_t *preg; + { + if (preg->buffer != NULL) + free (preg->buffer); + preg->buffer = NULL; + + preg->allocated = 0; + preg->used = 0; + + if (preg->fastmap != NULL) + free (preg->fastmap); + preg->fastmap = NULL; + preg->fastmap_accurate = 0; + + if (preg->translate != NULL) + free (preg->translate); + preg->translate = NULL; + } + #ifdef _LIBC + weak_alias (__regfree, regfree) + #endif + + #endif /* not emacs */ + + #endif /* not INSIDE_RECURSION */ + + + #undef STORE_NUMBER + #undef STORE_NUMBER_AND_INCR + #undef EXTRACT_NUMBER + #undef EXTRACT_NUMBER_AND_INCR + + #undef DEBUG_PRINT_COMPILED_PATTERN + #undef DEBUG_PRINT_DOUBLE_STRING + + #undef INIT_FAIL_STACK + #undef RESET_FAIL_STACK + #undef DOUBLE_FAIL_STACK + #undef PUSH_PATTERN_OP + #undef PUSH_FAILURE_POINTER + #undef PUSH_FAILURE_INT + #undef PUSH_FAILURE_ELT + #undef POP_FAILURE_POINTER + #undef POP_FAILURE_INT + #undef POP_FAILURE_ELT + #undef DEBUG_PUSH + #undef DEBUG_POP + #undef PUSH_FAILURE_POINT + #undef POP_FAILURE_POINT + + #undef REG_UNSET_VALUE + #undef REG_UNSET + + #undef PATFETCH + #undef PATFETCH_RAW + #undef PATUNFETCH + #undef TRANSLATE + + #undef INIT_BUF_SIZE + #undef GET_BUFFER_SPACE + #undef BUF_PUSH + #undef BUF_PUSH_2 + #undef BUF_PUSH_3 + #undef STORE_JUMP + #undef STORE_JUMP2 + #undef INSERT_JUMP + #undef INSERT_JUMP2 + #undef EXTEND_BUFFER + #undef GET_UNSIGNED_NUMBER + #undef FREE_STACK_RETURN + + # undef POINTER_TO_OFFSET + # undef MATCHING_IN_FRST_STRING + # undef PREFETCH + # undef AT_STRINGS_BEG + # undef AT_STRINGS_END + # undef WORDCHAR_P + # undef FREE_VAR + # undef FREE_VARIABLES + # undef NO_HIGHEST_ACTIVE_REG + # undef NO_LOWEST_ACTIVE_REG + + # undef CHAR_T + # undef UCHAR_T + # undef COMPILED_BUFFER_VAR + # undef OFFSET_ADDRESS_SIZE + # undef CHAR_CLASS_SIZE + # undef PREFIX + # undef ARG_PREFIX + # undef PUT_CHAR + # undef BYTE + # undef WCHAR + + # define DEFINED_ONCE diff -Nrc3pad gcc-3.0.4/libiberty/rename.c gcc-3.1/libiberty/rename.c *** gcc-3.0.4/libiberty/rename.c Wed Jul 26 23:23:24 2000 --- gcc-3.1/libiberty/rename.c Wed Sep 26 18:16:17 2001 *************** *** 1,7 **** /* rename -- rename a file This function is in the public domain. */ ! /* Rename a file. */ #ifdef HAVE_CONFIG_H #include "config.h" --- 1,16 ---- /* rename -- rename a file This function is in the public domain. */ ! /* ! ! @deftypefn Supplemental int rename (const char *@var{old}, const char *@var{new}) ! ! Renames a file from @var{old} to @var{new}. If @var{new} already ! exists, it is removed. ! ! @end deftypefn ! ! */ #ifdef HAVE_CONFIG_H #include "config.h" diff -Nrc3pad gcc-3.0.4/libiberty/rindex.c gcc-3.1/libiberty/rindex.c *** gcc-3.0.4/libiberty/rindex.c Fri May 15 23:14:33 1998 --- gcc-3.1/libiberty/rindex.c Sun Oct 7 21:53:31 2001 *************** *** 1,5 **** --- 1,17 ---- /* Stub implementation of (obsolete) rindex(). */ + /* + + @deftypefn Supplemental char* rindex (const char *@var{s}, int @var{c}) + + Returns a pointer to the last occurrence of the character @var{c} in + the string @var{s}, or @code{NULL} if not found. The use of @code{rindex} is + deprecated in new programs in favor of @code{strrchr}. + + @end deftypefn + + */ + extern char *strrchr (); char * diff -Nrc3pad gcc-3.0.4/libiberty/setenv.c gcc-3.1/libiberty/setenv.c *** gcc-3.0.4/libiberty/setenv.c Fri Jul 21 20:08:36 2000 --- gcc-3.1/libiberty/setenv.c Tue Jan 22 20:03:29 2002 *************** *** 1,4 **** ! /* Copyright (C) 1992, 1995, 1996, 1997 Free Software Foundation, Inc. This file based on setenv.c in the GNU C Library. The GNU C Library is free software; you can redistribute it and/or --- 1,4 ---- ! /* Copyright (C) 1992, 1995, 1996, 1997, 2002 Free Software Foundation, Inc. This file based on setenv.c in the GNU C Library. The GNU C Library is free software; you can redistribute it and/or *************** *** 16,25 **** --- 16,44 ---- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + /* + + @deftypefn Supplemental int setenv (const char *@var{name}, const char *@var{value}, int @var{overwrite}) + @deftypefnx Supplemental void unsetenv (const char *@var{name}) + + @code{setenv} adds @var{name} to the environment with value + @var{value}. If the name was already present in the environment, + the new value will be stored only if @var{overwrite} is nonzero. + The companion @code{unsetenv} function removes @var{name} from the + environment. This implementation is not safe for multithreaded code. + + @end deftypefn + + */ + #if HAVE_CONFIG_H # include #endif + #define setenv libiberty_setenv + #define unsetenv libiberty_unsetenv + #include "ansidecl.h" #include /* For `size_t' */ #include /* For `NULL' */ *************** extern int errno; *** 45,50 **** --- 64,72 ---- extern char **environ; #endif + #undef setenv + #undef unsetenv + /* LOCK and UNLOCK are defined as no-ops. This makes the libiberty * implementation MT-Unsafe. */ #define LOCK diff -Nrc3pad gcc-3.0.4/libiberty/sigsetmask.c gcc-3.1/libiberty/sigsetmask.c *** gcc-3.0.4/libiberty/sigsetmask.c Fri Jul 21 20:08:36 2000 --- gcc-3.1/libiberty/sigsetmask.c Wed Sep 26 18:16:17 2001 *************** *** 3,10 **** Contributed by Cygnus Support. This file is in the public doamin. */ ! /* Set the current signal mask to the set provided, and return the ! previous value */ #define _POSIX_SOURCE #include --- 3,19 ---- Contributed by Cygnus Support. This file is in the public doamin. */ ! /* ! ! @deftypefn Supplemental int sigsetmask (int @var{set}) ! ! Sets the signal mask to the one provided in @var{set} and returns ! the old mask (which, for libiberty's implementation, will always ! be the value @code{1}). ! ! @end deftypefn ! ! */ #define _POSIX_SOURCE #include diff -Nrc3pad gcc-3.0.4/libiberty/spaces.c gcc-3.1/libiberty/spaces.c *** gcc-3.0.4/libiberty/spaces.c Fri May 15 23:14:35 1998 --- gcc-3.1/libiberty/spaces.c Tue Oct 16 02:50:13 2001 *************** Boston, MA 02111-1307, USA. */ *** 19,39 **** /* ! NAME ! ! spaces -- return a pointer to a buffer full of spaces ! ! SYNOPSIS ! ! char *spaces (int count) ! DESCRIPTION ! Returns a pointer to a memory region filled with the specified ! number of spaces and null terminated. The returned pointer is ! valid until at least the next call. ! ! BUGS */ --- 19,31 ---- /* ! @deftypefn Extension char* spaces (int @var{count}) ! Returns a pointer to a memory region filled with the specified ! number of spaces and null terminated. The returned pointer is ! valid until at least the next call. ! @end deftypefn */ diff -Nrc3pad gcc-3.0.4/libiberty/splay-tree.c gcc-3.1/libiberty/splay-tree.c *** gcc-3.0.4/libiberty/splay-tree.c Mon May 7 15:40:49 2001 --- gcc-3.1/libiberty/splay-tree.c Fri Apr 5 22:46:55 2002 *************** splay_tree_delete_helper (sp, node) *** 70,76 **** if (sp->delete_value) (*sp->delete_value)(node->value); ! free ((char*) node); } /* Help splay SP around KEY. PARENT and GRANDPARENT are the parent --- 70,76 ---- if (sp->delete_value) (*sp->delete_value)(node->value); ! (*sp->deallocate) ((char*) node, sp->allocate_data); } /* Help splay SP around KEY. PARENT and GRANDPARENT are the parent *************** splay_tree_foreach_helper (sp, node, fn, *** 227,235 **** return splay_tree_foreach_helper (sp, node->right, fn, data); } /* Allocate a new splay tree, using COMPARE_FN to compare nodes, DELETE_KEY_FN to deallocate keys, and DELETE_VALUE_FN to deallocate ! values. */ splay_tree splay_tree_new (compare_fn, delete_key_fn, delete_value_fn) --- 227,255 ---- return splay_tree_foreach_helper (sp, node->right, fn, data); } + + /* An allocator and deallocator based on xmalloc. */ + static void * + splay_tree_xmalloc_allocate (size, data) + int size; + void *data ATTRIBUTE_UNUSED; + { + return xmalloc (size); + } + + static void + splay_tree_xmalloc_deallocate (object, data) + void *object; + void *data ATTRIBUTE_UNUSED; + { + free (object); + } + + /* Allocate a new splay tree, using COMPARE_FN to compare nodes, DELETE_KEY_FN to deallocate keys, and DELETE_VALUE_FN to deallocate ! values. Use xmalloc to allocate the splay tree structure, and any ! nodes added. */ splay_tree splay_tree_new (compare_fn, delete_key_fn, delete_value_fn) *************** splay_tree_new (compare_fn, delete_key_f *** 237,247 **** splay_tree_delete_key_fn delete_key_fn; splay_tree_delete_value_fn delete_value_fn; { ! splay_tree sp = (splay_tree) xmalloc (sizeof (struct splay_tree_s)); sp->root = 0; sp->comp = compare_fn; sp->delete_key = delete_key_fn; sp->delete_value = delete_value_fn; return sp; } --- 257,291 ---- splay_tree_delete_key_fn delete_key_fn; splay_tree_delete_value_fn delete_value_fn; { ! return (splay_tree_new_with_allocator ! (compare_fn, delete_key_fn, delete_value_fn, ! splay_tree_xmalloc_allocate, splay_tree_xmalloc_deallocate, 0)); ! } ! ! ! /* Allocate a new splay tree, using COMPARE_FN to compare nodes, ! DELETE_KEY_FN to deallocate keys, and DELETE_VALUE_FN to deallocate ! values. */ ! ! splay_tree ! splay_tree_new_with_allocator (compare_fn, delete_key_fn, delete_value_fn, ! allocate_fn, deallocate_fn, allocate_data) ! splay_tree_compare_fn compare_fn; ! splay_tree_delete_key_fn delete_key_fn; ! splay_tree_delete_value_fn delete_value_fn; ! splay_tree_allocate_fn allocate_fn; ! splay_tree_deallocate_fn deallocate_fn; ! void *allocate_data; ! { ! splay_tree sp = (splay_tree) (*allocate_fn) (sizeof (struct splay_tree_s), ! allocate_data); sp->root = 0; sp->comp = compare_fn; sp->delete_key = delete_key_fn; sp->delete_value = delete_value_fn; + sp->allocate = allocate_fn; + sp->deallocate = deallocate_fn; + sp->allocate_data = allocate_data; return sp; } *************** splay_tree_delete (sp) *** 253,259 **** splay_tree sp; { splay_tree_delete_helper (sp, sp->root); ! free ((char*) sp); } /* Insert a new node (associating KEY with DATA) into SP. If a --- 297,303 ---- splay_tree sp; { splay_tree_delete_helper (sp, sp->root); ! (*sp->deallocate) ((char*) sp, sp->allocate_data); } /* Insert a new node (associating KEY with DATA) into SP. If a *************** splay_tree_insert (sp, key, value) *** 286,292 **** /* Create a new node, and insert it at the root. */ splay_tree_node node; ! node = (splay_tree_node) xmalloc (sizeof (struct splay_tree_node_s)); node->key = key; node->value = value; --- 330,338 ---- /* Create a new node, and insert it at the root. */ splay_tree_node node; ! node = ((splay_tree_node) ! (*sp->allocate) (sizeof (struct splay_tree_node_s), ! sp->allocate_data)); node->key = key; node->value = value; *************** splay_tree_remove (sp, key) *** 330,336 **** /* Delete the root node itself. */ if (sp->delete_value) (*sp->delete_value) (sp->root->value); ! free (sp->root); /* One of the children is now the root. Doesn't matter much which, so long as we preserve the properties of the tree. */ --- 376,382 ---- /* Delete the root node itself. */ if (sp->delete_value) (*sp->delete_value) (sp->root->value); ! (*sp->deallocate) (sp->root, sp->allocate_data); /* One of the children is now the root. Doesn't matter much which, so long as we preserve the properties of the tree. */ diff -Nrc3pad gcc-3.0.4/libiberty/strcasecmp.c gcc-3.1/libiberty/strcasecmp.c *** gcc-3.0.4/libiberty/strcasecmp.c Fri May 15 23:14:36 1998 --- gcc-3.1/libiberty/strcasecmp.c Sun Oct 7 14:45:04 2001 *************** *** 10,15 **** --- 10,25 ---- * is provided ``as is'' without express or implied warranty. */ + /* + + @deftypefn Supplemental int strcasecmp (const char *@var{s1}, const char *@var{s2}) + + A case-insensitive @code{strcmp}. + + @end deftypefn + + */ + #if defined(LIBC_SCCS) && !defined(lint) static char sccsid[] = "@(#)strcasecmp.c 5.5 (Berkeley) 11/24/87"; #endif /* LIBC_SCCS and not lint */ *************** static char sccsid[] = "@(#)strcasecmp.c *** 27,33 **** * based upon ascii character sequences. */ typedef unsigned char uc; ! static unsigned char charmap[] = { (uc)'\000',(uc)'\001',(uc)'\002',(uc)'\003',(uc)'\004',(uc)'\005',(uc)'\006',(uc)'\007', (uc)'\010',(uc)'\011',(uc)'\012',(uc)'\013',(uc)'\014',(uc)'\015',(uc)'\016',(uc)'\017', (uc)'\020',(uc)'\021',(uc)'\022',(uc)'\023',(uc)'\024',(uc)'\025',(uc)'\026',(uc)'\027', --- 37,43 ---- * based upon ascii character sequences. */ typedef unsigned char uc; ! static const unsigned char charmap[] = { (uc)'\000',(uc)'\001',(uc)'\002',(uc)'\003',(uc)'\004',(uc)'\005',(uc)'\006',(uc)'\007', (uc)'\010',(uc)'\011',(uc)'\012',(uc)'\013',(uc)'\014',(uc)'\015',(uc)'\016',(uc)'\017', (uc)'\020',(uc)'\021',(uc)'\022',(uc)'\023',(uc)'\024',(uc)'\025',(uc)'\026',(uc)'\027', diff -Nrc3pad gcc-3.0.4/libiberty/strchr.c gcc-3.1/libiberty/strchr.c *** gcc-3.0.4/libiberty/strchr.c Mon Dec 14 07:01:00 1998 --- gcc-3.1/libiberty/strchr.c Sun Oct 7 21:53:31 2001 *************** *** 2,20 **** This function is in the public domain. */ /* - NAME - strchr -- return pointer to first occurance of a character ! SYNOPSIS ! char *strchr (const char *s, int c) - DESCRIPTION - Returns a pointer to the first occurance of character C in - string S, or a NULL pointer if no occurance is found. - - BUGS - Behavior when character is the null character is implementation - dependent. */ #include --- 2,16 ---- This function is in the public domain. */ /* ! @deftypefn Supplemental char* strchr (const char *@var{s}, int @var{c}) ! ! Returns a pointer to the first occurrence of the character @var{c} in ! the string @var{s}, or @code{NULL} if not found. If @var{c} is itself the ! null character, the results are undefined. ! ! @end deftypefn */ #include diff -Nrc3pad gcc-3.0.4/libiberty/strdup.c gcc-3.1/libiberty/strdup.c *** gcc-3.0.4/libiberty/strdup.c Fri May 15 23:14:39 1998 --- gcc-3.1/libiberty/strdup.c Sun Oct 7 21:53:31 2001 *************** *** 1,3 **** --- 1,14 ---- + /* + + @deftypefn Supplemental char* strdup (const char *@var{s}) + + Returns a pointer to a copy of @var{s} in memory obtained from + @code{malloc}, or @code{NULL} if insufficient memory was available. + + @end deftypefn + + */ + char * strdup(s) char *s; diff -Nrc3pad gcc-3.0.4/libiberty/strerror.c gcc-3.1/libiberty/strerror.c *** gcc-3.0.4/libiberty/strerror.c Tue Jun 12 05:05:08 2001 --- gcc-3.1/libiberty/strerror.c Tue Oct 16 02:50:13 2001 *************** static void init_error_tables PARAMS ((v *** 58,67 **** struct error_info { ! int value; /* The numeric value from */ ! const char *name; /* The equivalent symbolic value */ #ifndef HAVE_SYS_ERRLIST ! const char *msg; /* Short message about this value */ #endif }; --- 58,67 ---- struct error_info { ! const int value; /* The numeric value from */ ! const char *const name; /* The equivalent symbolic value */ #ifndef HAVE_SYS_ERRLIST ! const char *const msg; /* Short message about this value */ #endif }; *************** init_error_tables () *** 562,589 **** /* - NAME - - errno_max -- return the max errno value - - SYNOPSIS ! int errno_max (); ! DESCRIPTION ! Returns the maximum errno value for which a corresponding symbolic ! name or message is available. Note that in the case where ! we use the sys_errlist supplied by the system, it is possible for ! there to be more symbolic names than messages, or vice versa. ! In fact, the manual page for perror(3C) explicitly warns that one ! should check the size of the table (sys_nerr) before indexing it, ! since new error codes may be added to the system before they are ! added to the table. Thus sys_nerr might be smaller than value ! implied by the largest errno value defined in . ! We return the maximum value that can be used to obtain a meaningful ! symbolic name or message. */ --- 562,584 ---- /* ! @deftypefn Extension int errno_max (void) ! Returns the maximum @code{errno} value for which a corresponding ! symbolic name or message is available. Note that in the case where we ! use the @code{sys_errlist} supplied by the system, it is possible for ! there to be more symbolic names than messages, or vice versa. In ! fact, the manual page for @code{perror(3C)} explicitly warns that one ! should check the size of the table (@code{sys_nerr}) before indexing ! it, since new error codes may be added to the system before they are ! added to the table. Thus @code{sys_nerr} might be smaller than value ! implied by the largest @code{errno} value defined in @code{}. ! We return the maximum value that can be used to obtain a meaningful ! symbolic name or message. ! @end deftypefn */ *************** errno_max () *** 604,634 **** /* ! NAME ! ! strerror -- map an error number to an error message string ! ! SYNOPSIS ! ! char *strerror (int errnoval) ! DESCRIPTION ! Maps an errno number to an error message string, the contents of ! which are implementation defined. On systems which have the external ! variables sys_nerr and sys_errlist, these strings will be the same ! as the ones used by perror(). ! If the supplied error number is within the valid range of indices ! for the sys_errlist, but no message is available for the particular ! error number, then returns the string "Error NUM", where NUM is the ! error number. ! If the supplied error number is not a valid index into sys_errlist, ! returns NULL. ! The returned string is only guaranteed to be valid only until the ! next call to strerror. */ --- 599,623 ---- /* ! @deftypefn Supplemental char* strerror (int @var{errnoval}) ! Maps an @code{errno} number to an error message string, the contents ! of which are implementation defined. On systems which have the ! external variables @code{sys_nerr} and @code{sys_errlist}, these ! strings will be the same as the ones used by @code{perror}. ! If the supplied error number is within the valid range of indices for ! the @code{sys_errlist}, but no message is available for the particular ! error number, then returns the string @samp{Error @var{num}}, where ! @var{num} is the error number. ! If the supplied error number is not a valid index into ! @code{sys_errlist}, returns @code{NULL}. ! The returned string is only guaranteed to be valid only until the ! next call to @code{strerror}. ! @end deftypefn */ *************** char * *** 636,642 **** strerror (errnoval) int errnoval; { ! char *msg; static char buf[32]; #ifndef HAVE_SYS_ERRLIST --- 625,631 ---- strerror (errnoval) int errnoval; { ! const char *msg; static char buf[32]; #ifndef HAVE_SYS_ERRLIST *************** strerror (errnoval) *** 678,709 **** /* ! NAME ! ! strerrno -- map an error number to a symbolic name string ! ! SYNOPSIS ! ! const char *strerrno (int errnoval) ! ! DESCRIPTION ! Given an error number returned from a system call (typically ! returned in errno), returns a pointer to a string containing the ! symbolic name of that error number, as found in . ! If the supplied error number is within the valid range of indices ! for symbolic names, but no name is available for the particular ! error number, then returns the string "Error NUM", where NUM is ! the error number. ! If the supplied error number is not within the range of valid ! indices, then returns NULL. ! BUGS ! The contents of the location pointed to are only guaranteed to be ! valid until the next call to strerrno. */ --- 667,690 ---- /* ! @deftypefn Replacement {const char*} strerrno (int @var{errnum}) ! Given an error number returned from a system call (typically returned ! in @code{errno}), returns a pointer to a string containing the ! symbolic name of that error number, as found in @code{}. ! If the supplied error number is within the valid range of indices for ! symbolic names, but no name is available for the particular error ! number, then returns the string @samp{Error @var{num}}, where @var{num} ! is the error number. ! If the supplied error number is not within the range of valid ! indices, then returns @code{NULL}. ! The contents of the location pointed to are only guaranteed to be ! valid until the next call to @code{strerrno}. ! @end deftypefn */ *************** strerrno (errnoval) *** 746,763 **** /* ! NAME ! ! strtoerrno -- map a symbolic errno name to a numeric value ! ! SYNOPSIS ! ! int strtoerrno (char *name) ! DESCRIPTION ! Given the symbolic name of a error number, map it to an errno value. ! If no translation is found, returns 0. */ --- 727,738 ---- /* ! @deftypefn Extension int strtoerrno (const char *@var{name}) ! Given the symbolic name of a error number (e.g., @code{EACCES}), map it ! to an errno value. If no translation is found, returns 0. ! @end deftypefn */ *************** main () *** 808,814 **** int errn; int errnmax; const char *name; ! char *msg; char *strerror (); errnmax = errno_max (); --- 783,789 ---- int errn; int errnmax; const char *name; ! const char *msg; char *strerror (); errnmax = errno_max (); diff -Nrc3pad gcc-3.0.4/libiberty/strncasecmp.c gcc-3.1/libiberty/strncasecmp.c *** gcc-3.0.4/libiberty/strncasecmp.c Fri May 15 23:14:41 1998 --- gcc-3.1/libiberty/strncasecmp.c Sun Oct 7 14:45:04 2001 *************** *** 10,15 **** --- 10,25 ---- * is provided ``as is'' without express or implied warranty. */ + /* + + @deftypefn Supplemental int strncasecmp (const char *@var{s1}, const char *@var{s2}) + + A case-insensitive @code{strncmp}. + + @end deftypefn + + */ + #if defined(LIBC_SCCS) && !defined(lint) static char sccsid[] = "@(#)strcasecmp.c 5.5 (Berkeley) 11/24/87"; #endif /* LIBC_SCCS and not lint */ *************** static char sccsid[] = "@(#)strcasecmp.c *** 26,32 **** * together for a case independent comparison. The mappings are * based upon ascii character sequences. */ ! static unsigned char charmap[] = { '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007', '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017', '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027', --- 36,42 ---- * together for a case independent comparison. The mappings are * based upon ascii character sequences. */ ! static const unsigned char charmap[] = { '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007', '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017', '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027', diff -Nrc3pad gcc-3.0.4/libiberty/strncmp.c gcc-3.1/libiberty/strncmp.c *** gcc-3.0.4/libiberty/strncmp.c Fri Apr 28 01:42:43 2000 --- gcc-3.1/libiberty/strncmp.c Wed Sep 26 18:16:17 2001 *************** *** 1,6 **** --- 1,17 ---- /* strncmp -- compare two strings, stop after n bytes. This function is in the public domain. */ + /* + + @deftypefn Supplemental int strncmp (const char *@var{s1}, const char *@var{s2}, size_t @var{n}) + + Compares the first @var{n} bytes of two strings, returning a value as + @code{strcmp}. + + @end deftypefn + + */ + #include #ifdef __STDC__ #include diff -Nrc3pad gcc-3.0.4/libiberty/strrchr.c gcc-3.1/libiberty/strrchr.c *** gcc-3.0.4/libiberty/strrchr.c Mon Dec 14 07:01:01 1998 --- gcc-3.1/libiberty/strrchr.c Sun Oct 7 21:53:31 2001 *************** *** 2,20 **** This function is in the public domain. */ /* - NAME - strrchr -- return pointer to last occurance of a character ! SYNOPSIS ! char *strrchr (const char *s, int c) - DESCRIPTION - Returns a pointer to the last occurance of character C in - string S, or a NULL pointer if no occurance is found. - - BUGS - Behavior when character is the null character is implementation - dependent. */ #include --- 2,16 ---- This function is in the public domain. */ /* ! @deftypefn Supplemental char* strrchr (const char *@var{s}, int @var{c}) ! ! Returns a pointer to the last occurrence of the character @var{c} in ! the string @var{s}, or @code{NULL} if not found. If @var{c} is itself the ! null character, the results are undefined. ! ! @end deftypefn */ #include diff -Nrc3pad gcc-3.0.4/libiberty/strsignal.c gcc-3.1/libiberty/strsignal.c *** gcc-3.0.4/libiberty/strsignal.c Tue Jun 12 05:05:08 2001 --- gcc-3.1/libiberty/strsignal.c Wed Oct 17 21:15:41 2001 *************** static void init_signal_tables PARAMS (( *** 67,76 **** struct signal_info { ! int value; /* The numeric value from */ ! const char *name; /* The equivalent symbolic value */ #ifndef HAVE_SYS_SIGLIST ! const char *msg; /* Short message about this value */ #endif }; --- 67,76 ---- struct signal_info { ! const int value; /* The numeric value from */ ! const char *const name; /* The equivalent symbolic value */ #ifndef HAVE_SYS_SIGLIST ! const char *const msg; /* Short message about this value */ #endif }; *************** init_signal_tables () *** 350,377 **** /* ! NAME ! ! signo_max -- return the max signo value ! ! SYNOPSIS ! ! int signo_max (); ! DESCRIPTION ! Returns the maximum signo value for which a corresponding symbolic ! name or message is available. Note that in the case where ! we use the sys_siglist supplied by the system, it is possible for ! there to be more symbolic names than messages, or vice versa. ! In fact, the manual page for psignal(3b) explicitly warns that one ! should check the size of the table (NSIG) before indexing it, ! since new signal codes may be added to the system before they are ! added to the table. Thus NSIG might be smaller than value ! implied by the largest signo value defined in . ! We return the maximum value that can be used to obtain a meaningful ! symbolic name or message. */ --- 350,371 ---- /* ! @deftypefn Extension int signo_max (void) ! Returns the maximum signal value for which a corresponding symbolic ! name or message is available. Note that in the case where we use the ! @code{sys_siglist} supplied by the system, it is possible for there to ! be more symbolic names than messages, or vice versa. In fact, the ! manual page for @code{psignal(3b)} explicitly warns that one should ! check the size of the table (@code{NSIG}) before indexing it, since ! new signal codes may be added to the system before they are added to ! the table. Thus @code{NSIG} might be smaller than value implied by ! the largest signo value defined in @code{}. ! We return the maximum value that can be used to obtain a meaningful ! symbolic name or message. ! @end deftypefn */ *************** signo_max () *** 391,421 **** /* ! NAME ! ! strsignal -- map a signal number to a signal message string ! ! SYNOPSIS ! ! const char *strsignal (int signo) ! DESCRIPTION ! Maps an signal number to an signal message string, the contents of ! which are implementation defined. On systems which have the external ! variable sys_siglist, these strings will be the same as the ones used ! by psignal(). ! If the supplied signal number is within the valid range of indices ! for the sys_siglist, but no message is available for the particular ! signal number, then returns the string "Signal NUM", where NUM is the ! signal number. ! If the supplied signal number is not a valid index into sys_siglist, ! returns NULL. ! The returned string is only guaranteed to be valid only until the ! next call to strsignal. */ --- 385,409 ---- /* ! @deftypefn Supplemental {const char *} strsignal (int @var{signo}) ! Maps an signal number to an signal message string, the contents of ! which are implementation defined. On systems which have the external ! variable @code{sys_siglist}, these strings will be the same as the ! ones used by @code{psignal()}. ! If the supplied signal number is within the valid range of indices for ! the @code{sys_siglist}, but no message is available for the particular ! signal number, then returns the string @samp{Signal @var{num}}, where ! @var{num} is the signal number. ! If the supplied signal number is not a valid index into ! @code{sys_siglist}, returns @code{NULL}. ! The returned string is only guaranteed to be valid only until the next ! call to @code{strsignal}. ! @end deftypefn */ *************** strsignal (signo) *** 461,491 **** /* ! NAME ! ! strsigno -- map an signal number to a symbolic name string ! ! SYNOPSIS ! ! const char *strsigno (int signo) ! ! DESCRIPTION ! Given an signal number, returns a pointer to a string containing ! the symbolic name of that signal number, as found in . ! If the supplied signal number is within the valid range of indices ! for symbolic names, but no name is available for the particular ! signal number, then returns the string "Signal NUM", where NUM is ! the signal number. ! If the supplied signal number is not within the range of valid ! indices, then returns NULL. ! BUGS ! The contents of the location pointed to are only guaranteed to be ! valid until the next call to strsigno. */ --- 449,471 ---- /* ! @deftypefn Extension {const char*} strsigno (int @var{signo}) ! Given an signal number, returns a pointer to a string containing the ! symbolic name of that signal number, as found in @code{}. ! If the supplied signal number is within the valid range of indices for ! symbolic names, but no name is available for the particular signal ! number, then returns the string @samp{Signal @var{num}}, where ! @var{num} is the signal number. ! If the supplied signal number is not within the range of valid ! indices, then returns @code{NULL}. ! The contents of the location pointed to are only guaranteed to be ! valid until the next call to @code{strsigno}. ! @end deftypefn */ *************** strsigno (signo) *** 524,541 **** /* ! NAME ! ! strtosigno -- map a symbolic signal name to a numeric value ! ! SYNOPSIS ! ! int strtosigno (char *name) ! DESCRIPTION ! Given the symbolic name of a signal, map it to a signal number. ! If no translation is found, returns 0. */ --- 504,515 ---- /* ! @deftypefn Extension int strtosigno (const char *@var{name}) ! Given the symbolic name of a signal, map it to a signal number. If no ! translation is found, returns 0. ! @end deftypefn */ *************** strtosigno (name) *** 570,588 **** /* ! NAME ! ! psignal -- print message about signal to stderr ! ! SYNOPSIS ! void psignal (unsigned signo, char *message); ! DESCRIPTION - Print to the standard error the message, followed by a colon, - followed by the description of the signal specified by signo, - followed by a newline. */ #ifndef HAVE_PSIGNAL --- 544,557 ---- /* ! @deftypefn Supplemental void psignal (unsigned @var{signo}, char *@var{message}) ! Print @var{message} to the standard error, followed by a colon, ! followed by the description of the signal specified by @var{signo}, ! followed by a newline. ! @end deftypefn */ #ifndef HAVE_PSIGNAL diff -Nrc3pad gcc-3.0.4/libiberty/strstr.c gcc-3.1/libiberty/strstr.c *** gcc-3.0.4/libiberty/strstr.c Fri May 15 23:14:44 1998 --- gcc-3.1/libiberty/strstr.c Sun Oct 7 21:53:31 2001 *************** *** 3,26 **** /* ! NAME ! ! strstr -- locate first occurance of a substring ! ! SYNOPSIS ! ! #include ! char *strstr (char *s1, char *s2) ! DESCRIPTION - Locates the first occurance in the string pointed to by S1 of - the string pointed to by S2. Returns a pointer to the substring - found, or a NULL pointer if not found. If S2 points to a string - with zero length, the function returns S1. - - BUGS */ --- 3,18 ---- /* ! @deftypefn Supplemental char* strstr (const char *@var{string}, const char *@var{sub}) ! This function searches for the substring @var{sub} in the string ! @var{string}, not including the terminating null characters. A pointer ! to the first occurrence of @var{sub} is returned, or @code{NULL} if the ! substring is absent. If @var{sub} points to a string with zero ! length, the function returns @var{string}. ! @end deftypefn */ diff -Nrc3pad gcc-3.0.4/libiberty/strtod.c gcc-3.1/libiberty/strtod.c *** gcc-3.0.4/libiberty/strtod.c Wed Dec 13 18:11:45 2000 --- gcc-3.1/libiberty/strtod.c Mon Mar 18 19:50:31 2002 *************** *** 1,5 **** /* Implementation of strtod for systems with atof. ! Copyright (C) 1991, 1995 Free Software Foundation, Inc. This file is part of the libiberty library. This library is free software; you can redistribute it and/or modify it under the --- 1,5 ---- /* Implementation of strtod for systems with atof. ! Copyright (C) 1991, 1995, 2002 Free Software Foundation, Inc. This file is part of the libiberty library. This library is free software; you can redistribute it and/or modify it under the *************** the resulting executable to be covered b *** 22,27 **** --- 22,42 ---- This exception does not however invalidate any other reasons why the executable file might be covered by the GNU General Public License. */ + /* + + @deftypefn Supplemental double strtod (const char *@var{string}, char **@var{endptr}) + + This ISO C function converts the initial portion of @var{string} to a + @code{double}. If @var{endptr} is not @code{NULL}, a pointer to the + character after the last character used in the conversion is stored in + the location referenced by @var{endptr}. If no conversion is + performed, zero is returned and the value of @var{string} is stored in + the location referenced by @var{endptr}. + + @end deftypefn + + */ + #include "ansidecl.h" #include "safe-ctype.h" *************** strtod (str, ptr) *** 60,66 **** && (p[6] == 't' || p[6] == 'T') && (p[7] == 'y' || p[7] == 'Y')) { ! *ptr = p + 7; return atof (str); } else --- 75,81 ---- && (p[6] == 't' || p[6] == 'T') && (p[7] == 'y' || p[7] == 'Y')) { ! *ptr = p + 8; return atof (str); } else diff -Nrc3pad gcc-3.0.4/libiberty/strtol.c gcc-3.1/libiberty/strtol.c *** gcc-3.0.4/libiberty/strtol.c Fri Dec 8 03:00:26 2000 --- gcc-3.1/libiberty/strtol.c Tue Oct 16 02:50:13 2001 *************** *** 28,33 **** --- 28,52 ---- * SUCH DAMAGE. */ + /* + + @deftypefn Supplemental {long int} strtol (const char *@var{string}, char **@var{endptr}, int @var{base}) + @deftypefnx Supplemental {unsigned long int} strtoul (const char *@var{string}, char **@var{endptr}, int @var{base}) + + The @code{strtol} function converts the string in @var{string} to a + long integer value according to the given @var{base}, which must be + between 2 and 36 inclusive, or be the special value 0. If @var{base} + is 0, @code{strtol} will look for the prefixes @code{0} and @code{0x} + to indicate bases 8 and 16, respectively, else default to base 10. + When the base is 16 (either explicitly or implicitly), a prefix of + @code{0x} is allowed. The handling of @var{endptr} is as that of + @code{strtod} above. The @code{strtoul} function is the same, except + that the converted value is unsigned. + + @end deftypefn + + */ + #ifdef HAVE_CONFIG_H #include "config.h" #endif diff -Nrc3pad gcc-3.0.4/libiberty/ternary.c gcc-3.1/libiberty/ternary.c *** gcc-3.0.4/libiberty/ternary.c Thu Jan 1 00:00:00 1970 --- gcc-3.1/libiberty/ternary.c Tue May 8 06:13:58 2001 *************** *** 0 **** --- 1,166 ---- + /* ternary.c - Ternary Search Trees + Copyright (C) 2001 Free Software Foundation, Inc. + + Contributed by Daniel Berlin (dan@cgsoftware.com) + + 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, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + #ifdef HAVE_CONFIG_H + #include "config.h" + #endif + + #ifdef HAVE_STDLIB_H + #include + #endif + + #include + + #include "libiberty.h" + #include "ternary.h" + + /* Non-recursive so we don't waste stack space/time on large + insertions. */ + + PTR + ternary_insert (root, s, data, replace) + ternary_tree *root; + const char *s; + PTR data; + int replace; + { + int diff; + ternary_tree curr, *pcurr; + + /* Start at the root. */ + pcurr = root; + /* Loop until we find the right position */ + while ((curr = *pcurr)) + { + /* Calculate the difference */ + diff = *s - curr->splitchar; + /* Handle current char equal to node splitchar */ + if (diff == 0) + { + /* Handle the case of a string we already have */ + if (*s++ == 0) + { + if (replace) + curr->eqkid = (ternary_tree) data; + return (PTR) curr->eqkid; + } + pcurr = &(curr->eqkid); + } + /* Handle current char less than node splitchar */ + else if (diff < 0) + { + pcurr = &(curr->lokid); + } + /* Handle current char greater than node splitchar */ + else + { + pcurr = &(curr->hikid); + } + } + /* It's not a duplicate string, and we should insert what's left of + the string, into the tree rooted at curr */ + for (;;) + { + /* Allocate the memory for the node, and fill it in */ + *pcurr = (ternary_tree) xmalloc (sizeof (ternary_node)); + curr = *pcurr; + curr->splitchar = *s; + curr->lokid = curr->hikid = curr->eqkid = 0; + + /* Place nodes until we hit the end of the string. + When we hit it, place the data in the right place, and + return. + */ + if (*s++ == 0) + { + curr->eqkid = (ternary_tree) data; + return data; + } + pcurr = &(curr->eqkid); + } + } + + /* Free the ternary search tree rooted at p. */ + void + ternary_cleanup (p) + ternary_tree p; + { + if (p) + { + ternary_cleanup (p->lokid); + if (p->splitchar) + ternary_cleanup (p->eqkid); + ternary_cleanup (p->hikid); + free (p); + } + } + + /* Non-recursive find of a string in the ternary tree */ + PTR + ternary_search (p, s) + const ternary_node *p; + const char *s; + { + const ternary_node *curr; + int diff, spchar; + spchar = *s; + curr = p; + /* Loop while we haven't hit a NULL node or returned */ + while (curr) + { + /* Calculate the difference */ + diff = spchar - curr->splitchar; + /* Handle the equal case */ + if (diff == 0) + { + if (spchar == 0) + return (PTR) curr->eqkid; + spchar = *++s; + curr = curr->eqkid; + } + /* Handle the less than case */ + else if (diff < 0) + curr = curr->lokid; + /* All that's left is greater than */ + else + curr = curr->hikid; + } + return NULL; + } + + /* For those who care, the recursive version of the search. Useful if + you want a starting point for pmsearch or nearsearch. */ + static PTR + ternary_recursivesearch (p, s) + const ternary_node *p; + const char *s; + { + if (!p) + return 0; + if (*s < p->splitchar) + return ternary_recursivesearch (p->lokid, s); + else if (*s > p->splitchar) + return ternary_recursivesearch (p->hikid, s); + else + { + if (*s == 0) + return (PTR) p->eqkid; + return ternary_recursivesearch (p->eqkid, ++s); + } + } diff -Nrc3pad gcc-3.0.4/libiberty/testsuite/demangle-expected gcc-3.1/libiberty/testsuite/demangle-expected *** gcc-3.0.4/libiberty/testsuite/demangle-expected Thu Dec 13 03:22:05 2001 --- gcc-3.1/libiberty/testsuite/demangle-expected Tue Feb 19 20:02:16 2002 *************** fn__FPQ21n1cPMQ21n1cFPQ21n1c_i *** 2476,2490 **** fn(n::c *, int (n::c::*)(n::c *)) # --format=gnu ! f__FGt3Bar1i21i f(Bar<2>, i) # --format=gnu ! f__FGt3Bar1i_21_i f(Bar<21>, int) # --format=gnu ! f__FGt3Bar1i24XY_t f(Bar<2>, XY_t) # --format=gnu --- 2476,2490 ---- fn(n::c *, int (n::c::*)(n::c *)) # --format=gnu ! f__FGt3Bar1i2G1i f(Bar<2>, i) # --format=gnu ! f__FGt3Bar1i21i f(Bar<21>, int) # --format=gnu ! f__FGt3Bar1i2G4XY_t f(Bar<2>, XY_t) # --format=gnu *************** foo__H1Zt2TA2ZRCiZt2NA1Ui9_X01_i *** 2492,2502 **** int foo > >(TA >) # --format=gnu ! foo__H1Zt2TA2ZcZt2NA1Ui_20__X01_i int foo > >(TA >) # --format=gnu ! foo__H1Zt2TA2ZiZt8N___A___1Ui_99__X01_i int foo > >(TA >) # --format=gnu --- 2492,2502 ---- int foo > >(TA >) # --format=gnu ! foo__H1Zt2TA2ZcZt2NA1Ui20_X01_i int foo > >(TA >) # --format=gnu ! foo__H1Zt2TA2ZiZt8N___A___1Ui99_X01_i int foo > >(TA >) # --format=gnu *************** __opi__t2TA2ZiZt8N___A___1i_m99_ *** 2532,2538 **** TA >::operator int(void) # --format=gnu ! foo___bar__baz_____H1Zt2TA2ZiZt8N___A___1i_99__X01_i int foo___bar__baz___ > >(TA >) # --format=gnu --- 2532,2538 ---- TA >::operator int(void) # --format=gnu ! foo___bar__baz_____H1Zt2TA2ZiZt8N___A___1i99_X01_i int foo___bar__baz___ > >(TA >) # --format=gnu *************** Prim.i(int, boolean, byte, double, float *** 2590,2592 **** --- 2590,2602 ---- --format=hp _Utf58_0_1__1_2147483647__2147483648 _Utf58_0_1__1_2147483647__2147483648 + # + --format=gnu-v3 + St9bad_alloc + std::bad_alloc + # + # This caused an infinite loop. + # We still don't demangle this correctly, but at least we don't hang. + --format=auto + __CPR212____ct__Q3_3std141list__tm__128_Q2_3edm41THandle__tm__26_Q2_4emid15EMparticleChunkQ2_3std68allocator__tm__51_Q2_3edmJ37J14const_iteratorFRCQ3_3std18list__tm__7_Z1ZZ2Z8iterator + _Z1ZZ2Z::__CPR212____ct__Q3_3std141list__tm__128_Q2_3edm41THandle__tm__26_Q2_4emid15EMparticleChunkQ2_3std68allocator__tm__51_Q2_3edmJ37J14const_iteratorFRCQ3_3std18list__tm(iterator) diff -Nrc3pad gcc-3.0.4/libiberty/testsuite/regress-demangle gcc-3.1/libiberty/testsuite/regress-demangle *** gcc-3.0.4/libiberty/testsuite/regress-demangle Mon Jul 17 10:35:41 2000 --- gcc-3.1/libiberty/testsuite/regress-demangle Sun Feb 3 04:00:36 2002 *************** sed -e '/^#/ d' "$1" | ( *** 10,16 **** read mangled read demangled ! x="`echo $mangled | ./test-filter $type`" count=`expr $count + 1` if test "x$x" != "x$demangled"; then failures=`expr $failures + 1` --- 10,16 ---- read mangled read demangled ! x="`./test-filter $type $mangled`" count=`expr $count + 1` if test "x$x" != "x$demangled"; then failures=`expr $failures + 1` diff -Nrc3pad gcc-3.0.4/libiberty/tmpnam.c gcc-3.1/libiberty/tmpnam.c *** gcc-3.0.4/libiberty/tmpnam.c Thu May 13 01:23:42 1999 --- gcc-3.1/libiberty/tmpnam.c Sun Oct 7 21:53:31 2001 *************** *** 1,3 **** --- 1,17 ---- + /* + + @deftypefn Supplemental char* tmpnam (char *@var{s}) + + This function attempts to create a name for a temporary file, which + will be a valid file name yet not exist when @code{tmpnam} checks for + it. @var{s} must point to a buffer of at least @code{L_tmpnam} bytes, + or be @code{NULL}. Use of this function creates a security risk, and it must + not be used in new projects. Use @code{mkstemp} instead. + + @end deftypefn + + */ + #include #ifndef L_tmpnam diff -Nrc3pad gcc-3.0.4/libiberty/vasprintf.c gcc-3.1/libiberty/vasprintf.c *** gcc-3.0.4/libiberty/vasprintf.c Fri Jul 21 20:08:36 2000 --- gcc-3.1/libiberty/vasprintf.c Wed Oct 17 21:15:41 2001 *************** Boston, MA 02111-1307, USA. */ *** 28,34 **** --- 28,36 ---- #include #endif #include + #ifdef HAVE_STRING_H #include + #endif #ifdef HAVE_STDLIB_H #include #else *************** extern PTR malloc (); *** 41,46 **** --- 43,63 ---- int global_total_width; #endif + /* + + @deftypefn Extension int vasprintf (char **@var{resptr}, const char *@var{format}, va_list @var{args}) + + Like @code{vsprintf}, but instead of passing a pointer to a buffer, + you pass a pointer to a pointer. This function will compute the size + of the buffer needed, allocate memory with @code{malloc}, and store a + pointer to the allocated memory in @code{*@var{resptr}}. The value + returned is the same as @code{vsprintf} would return. If memory could + not be allocated, zero is returned and @code{NULL} is stored in + @code{*@var{resptr}}. + + @end deftypefn + + */ static int int_vasprintf PARAMS ((char **, const char *, va_list *)); *************** vasprintf (result, format, args) *** 142,170 **** } #ifdef TEST ! static void checkit PARAMS ((const char *, ...)); ! ! static void ! checkit VPARAMS ((const char* format, ...)) { - va_list args; char *result; ! #ifndef ANSI_PROTOTYPES ! const char *format; ! #endif ! ! VA_START (args, format); ! ! #ifndef ANSI_PROTOTYPES ! format = va_arg (args, const char *); ! #endif ! vasprintf (&result, format, args); if (strlen (result) < (size_t) global_total_width) printf ("PASS: "); else printf ("FAIL: "); printf ("%d %s\n", global_total_width, result); } extern int main PARAMS ((void)); --- 159,180 ---- } #ifdef TEST ! static void ATTRIBUTE_PRINTF_1 ! checkit VPARAMS ((const char *format, ...)) { char *result; ! VA_OPEN (args, format); ! VA_FIXEDARG (args, const char *, format); vasprintf (&result, format, args); + VA_CLOSE (args); + if (strlen (result) < (size_t) global_total_width) printf ("PASS: "); else printf ("FAIL: "); printf ("%d %s\n", global_total_width, result); + + free (result); } extern int main PARAMS ((void)); diff -Nrc3pad gcc-3.0.4/libiberty/vfork.c gcc-3.1/libiberty/vfork.c *** gcc-3.0.4/libiberty/vfork.c Fri Jul 21 20:08:36 2000 --- gcc-3.1/libiberty/vfork.c Sun Oct 7 21:53:31 2001 *************** *** 1,6 **** --- 1,16 ---- /* Emulate vfork using just plain fork, for systems without a real vfork. This function is in the public domain. */ + /* + + @deftypefn Supplemental int vfork (void) + + Emulates @code{vfork} by calling @code{fork} and returning its value. + + @end deftypefn + + */ + #include "ansidecl.h" extern int fork PARAMS ((void)); diff -Nrc3pad gcc-3.0.4/libiberty/vprintf.c gcc-3.1/libiberty/vprintf.c *** gcc-3.0.4/libiberty/vprintf.c Mon Sep 7 20:37:13 1998 --- gcc-3.1/libiberty/vprintf.c Wed Sep 26 18:16:17 2001 *************** *** 1,3 **** --- 1,20 ---- + /* + + @deftypefn Supplemental int vprintf (const char *@var{format}, va_list @var{ap}) + @deftypefnx Supplemental int vfprintf (FILE *@var{stream}, const char *@var{format}, va_list @var{ap}) + @deftypefnx Supplemental int vsprintf (char *@var{str}, const char *@var{format}, va_list @var{ap}) + + These functions are the same as @code{printf}, @code{fprintf}, and + @code{sprintf}, respectively, except that they are called with a + @code{va_list} instead of a variable number of arguments. Note that + they do not call @code{va_end}; this is the application's + responsibility. In @libib{} they are implemented in terms of the + nonstandard but common function @code{_doprnt}. + + @end deftypefn + + */ + #ifdef __STDC__ #include #else diff -Nrc3pad gcc-3.0.4/libiberty/vsprintf.c gcc-3.1/libiberty/vsprintf.c *** gcc-3.0.4/libiberty/vsprintf.c Fri May 15 23:14:55 1998 --- gcc-3.1/libiberty/vsprintf.c Tue Jan 22 20:03:29 2002 *************** *** 3,9 **** implementations of stdio; newer ones should already have vsprintf. Written by Per Bothner of Cygnus Support. Based on libg++'s "form" (written by Doug Lea; dl@rocky.oswego.edu). ! Copyright (C) 1991, 1995 Free Software Foundation, Inc. This file is part of the libiberty library. This library is free software; you can redistribute it and/or modify it under the --- 3,9 ---- implementations of stdio; newer ones should already have vsprintf. Written by Per Bothner of Cygnus Support. Based on libg++'s "form" (written by Doug Lea; dl@rocky.oswego.edu). ! Copyright (C) 1991, 1995, 2002 Free Software Foundation, Inc. This file is part of the libiberty library. This library is free software; you can redistribute it and/or modify it under the *************** the executable file might be covered by *** 31,36 **** --- 31,38 ---- #include #undef vsprintf + #if defined _IOSTRG && defined _IOWRT + int vsprintf (buf, format, ap) char *buf; *************** vsprintf (buf, format, ap) *** 53,55 **** --- 55,59 ---- return ret; } + + #endif diff -Nrc3pad gcc-3.0.4/libiberty/waitpid.c gcc-3.1/libiberty/waitpid.c *** gcc-3.0.4/libiberty/waitpid.c Wed Jul 26 23:23:24 2000 --- gcc-3.1/libiberty/waitpid.c Wed Sep 26 18:16:17 2001 *************** *** 1,3 **** --- 1,15 ---- + /* + + @deftypefn Supplemental int waitpid (int @var{pid}, int *@var{status}, int) + + This is a wrapper around the @code{wait} function. Any ``special'' + values of @var{pid} depend on your implementation of @code{wait}, as + does the return value. The third argument is unused in @libib{}. + + @end deftypefn + + */ + #ifdef HAVE_CONFIG_H #include "config.h" #endif diff -Nrc3pad gcc-3.0.4/libiberty/xatexit.c gcc-3.1/libiberty/xatexit.c *** gcc-3.0.4/libiberty/xatexit.c Fri May 15 23:14:57 1998 --- gcc-3.1/libiberty/xatexit.c Mon Mar 11 12:46:54 2002 *************** *** 5,10 **** --- 5,24 ---- * %sccs.include.redist.c% */ + + /* + + @deftypefun int xatexit (void (*@var{fn}) (void)) + + Behaves as the standard @code{atexit} function, but with no limit on + the number of registered functions. Returns 0 on success, or @minus{}1 on + failure. If you use @code{xatexit} to register functions, you must use + @code{xexit} to terminate your program. + + @end deftypefun + + */ + /* Adapted from newlib/libc/stdlib/{,at}exit.[ch]. If you use xatexit, you must call xexit instead of exit. */ *************** *** 19,26 **** --- 33,45 ---- #define size_t unsigned long #endif + #if VMS + #include + #include + #else /* For systems with larger pointers than ints, this must be declared. */ PTR malloc PARAMS ((size_t)); + #endif static void xatexit_cleanup PARAMS ((void)); diff -Nrc3pad gcc-3.0.4/libiberty/xexit.c gcc-3.1/libiberty/xexit.c *** gcc-3.0.4/libiberty/xexit.c Fri Jul 21 20:08:36 2000 --- gcc-3.1/libiberty/xexit.c Thu Sep 27 19:55:37 2001 *************** License along with libiberty; see the fi *** 17,22 **** --- 17,34 ---- to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + /* + + @deftypefn Replacement void xexit (int @var{code}) + + Terminates the program. If any functions have been registered with + the @code{xatexit} replacement function, they will be called first. + Termination is handled via the system's normal @code{exit} call. + + @end deftypefn + + */ + #ifdef HAVE_CONFIG_H #include "config.h" #endif diff -Nrc3pad gcc-3.0.4/libiberty/xmalloc.c gcc-3.1/libiberty/xmalloc.c *** gcc-3.0.4/libiberty/xmalloc.c Wed Nov 22 08:32:26 2000 --- gcc-3.1/libiberty/xmalloc.c Sun Oct 7 21:53:31 2001 *************** License along with libiberty; see the fi *** 17,22 **** --- 17,65 ---- not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + /* + + @deftypefn Replacement void* xmalloc (size_t) + + Allocate memory without fail. If @code{malloc} fails, this will print + a message to @code{stderr} (using the name set by + @code{xmalloc_set_program_name}, + if any) and then call @code{xexit}. Note that it is therefore safe for + a program to contain @code{#define malloc xmalloc} in its source. + + @end deftypefn + + @deftypefn Replacement void* xrealloc (void *@var{ptr}, size_t @var{size}) + Reallocate memory without fail. This routine functions like @code{realloc}, + but will behave the same as @code{xmalloc} if memory cannot be found. + + @end deftypefn + + @deftypefn Replacement void* xcalloc (size_t @var{nelem}, size_t @var{elsize}) + + Allocate memory without fail, and set it to zero. This routine functions + like @code{calloc}, but will behave the same as @code{xmalloc} if memory + cannot be found. + + @end deftypefn + + @deftypefn Replacement void xmalloc_set_program_name (const char *@var{name}) + + You can use this to set the name of the program used by + @code{xmalloc_failed} when printing a failure message. + + @end deftypefn + + @deftypefn Replacement void xmalloc_failed (size_t) + + This function is not meant to be called by client code, and is listed + here for completeness only. If any of the allocation routines fail, this + function will be called to print an error message and terminate execution. + + @end deftypefn + + */ + #ifdef HAVE_CONFIG_H #include "config.h" #endif diff -Nrc3pad gcc-3.0.4/libiberty/xmemdup.c gcc-3.1/libiberty/xmemdup.c *** gcc-3.0.4/libiberty/xmemdup.c Mon May 29 19:33:52 2000 --- gcc-3.1/libiberty/xmemdup.c Wed Sep 26 18:16:17 2001 *************** *** 2,7 **** --- 2,20 ---- This trivial function is in the public domain. Jeff Garzik, September 1999. */ + /* + + @deftypefn Replacement void* xmemdup (void *@var{input}, size_t @var{copy_size}, size_t @var{alloc_size}) + + Duplicates a region of memory without fail. First, @var{alloc_size} bytes + are allocated, then @var{copy_size} bytes from @var{input} are copied into + it, and the new memory is returned. If fewer bytes are copied than were + allocated, the remaining memory is zeroed. + + @end deftypefn + + */ + #ifdef HAVE_CONFIG_H #include "config.h" #endif diff -Nrc3pad gcc-3.0.4/libiberty/xstrdup.c gcc-3.1/libiberty/xstrdup.c *** gcc-3.0.4/libiberty/xstrdup.c Tue Nov 2 10:25:28 1999 --- gcc-3.1/libiberty/xstrdup.c Wed Sep 26 18:16:17 2001 *************** *** 2,7 **** --- 2,18 ---- This trivial function is in the public domain. Ian Lance Taylor, Cygnus Support, December 1995. */ + /* + + @deftypefn Replacement char* xstrdup (const char *@var{s}) + + Duplicates a character string without fail, using @code{xmalloc} to + obtain memory. + + @end deftypefn + + */ + #include #ifdef HAVE_CONFIG_H #include "config.h" diff -Nrc3pad gcc-3.0.4/libiberty/xstrerror.c gcc-3.1/libiberty/xstrerror.c *** gcc-3.0.4/libiberty/xstrerror.c Fri May 15 23:15:01 1998 --- gcc-3.1/libiberty/xstrerror.c Sun Oct 7 21:53:31 2001 *************** *** 2,7 **** --- 2,18 ---- Fri Jun 16 18:30:00 1995 Pat Rankin This code is in the public domain. */ + /* + + @deftypefn Replacement char* xstrerror (int @var{errnum}) + + Behaves exactly like the standard @code{strerror} function, but + will never return a @code{NULL} pointer. + + @end deftypefn + + */ + #include #include "libiberty.h" diff -Nrc3pad gcc-3.0.4/ltmain.sh gcc-3.1/ltmain.sh *** gcc-3.0.4/ltmain.sh Sat Jul 21 04:32:39 2001 --- gcc-3.1/ltmain.sh Sat Mar 16 14:42:43 2002 *************** show_help= *** 107,112 **** --- 107,113 ---- execute_dlfiles= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" + taglist= # Parse our command line options once, thoroughly. while test $# -gt 0 *************** do *** 140,145 **** --- 141,147 ---- CC) # Don't test for the "default" C tag, as we know, it's there, but # not specially marked. + taglist="$taglist $tagname" ;; *) if grep "^### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$0" > /dev/null; then *************** fi\ *** 4299,4305 **** fi done # Quote the link command for shipping. ! relink_command="cd `pwd`; $SHELL $0 --mode=relink $libtool_args" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` # Only create the output if not a dry run. --- 4301,4311 ---- fi done # Quote the link command for shipping. ! tagopts= ! for tag in $taglist; do ! tagopts="$tagopts --tag $tag" ! done ! relink_command="(cd `pwd`; $SHELL $0$tagopts --mode=relink $libtool_args)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` # Only create the output if not a dry run. *************** relink_command=\"$relink_command\"" *** 4605,4611 **** if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 ! continue fi fi --- 4611,4617 ---- if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 ! exit 1 fi fi diff -Nrc3pad gcc-3.0.4/maintainer-scripts/ChangeLog gcc-3.1/maintainer-scripts/ChangeLog *** gcc-3.0.4/maintainer-scripts/ChangeLog Thu Jan 1 00:00:00 1970 --- gcc-3.1/maintainer-scripts/ChangeLog Wed May 15 02:27:28 2002 *************** *** 0 **** --- 1,184 ---- + 2002-05-14 Release Manager + + * GCC 3.1 Released. + + 2002-05-14 Release Manager + + * GCC 3.1 Released. + + 2002-05-08 Mark Mitchell + + * gcc_release: Correct upload handling. + + 2002-04-22 Mark Mitchell + + * gcc_release: Merge from mainline. + + 2002-04-19 Kelley R. Cook (kelly.r.cook@gm.com) + + * gcc_release: Set TZ to UTC0. + + 2002-04-15 Mark Mitchell + + * gcc_release (build_tarfiles): Do not build Chill tarfiles. + (CHILL_DIRS): Remove. + + 2002-02-23 Joseph S. Myers + + * gcc_release: Revert change to -p interface. Allow for local and + remote cases in creating directories. Give an error if -p + argument names a directory. + + 2002-02-21 Mark Mitchell + + * gcc_release: Correct handling of diff-generation. Add + "diffs" major mode. + + 2002-02-08 Joseph S. Myers + + * gcc_release: Substitute dates in snapshot-README and + snapshot-index.html files rather than directly using the old files + on the FTP site. Set QMAILHOST. + + 2002-02-08 Gerald Pfeifer + + * snapshot-index.html: Improve markup. + + 2002-01-29 Joseph S. Myers + + * snapshot-README, snapshot-index.html: Use expressions such as + @DATE@ rather than hardcoded dates. + + * snapshot-README, snapshot-index.html: New files. + + 2002-01-06 Gerald Pfeifer + + * update_web_docs (contrib_file): Remove. + Also removing special handling of thanks.html. + + 2001-12-17 Joseph S. Myers + + * update_web_docs: Use makeinfo --html instead of texi2html. + Remove support for pre-3.1 GCC versions. Build online docs for + gccint manual. + + 2001-12-17 Joseph S. Myers + + * update_web_docs_old: Copy from update_web_docs. Add comment + that this is for GCC 3.0.x and earlier versions. + + 2001-11-19 Joseph S. Myers + + * gcc_release: Add /usr/local/bin to path when local. + + 2001-11-06 Joseph S. Myers + + * update_web_docs: Set SOURCEDIR so that install manual can be + found when running install.texi2html. + + * gcc_release: Don't require a username if running locally. + + 2001-11-05 Joseph S. Myers + + * update_web_docs: Eliminate warnings about keeping files from web + page preprocessing. + + * update_web_docs: Allow for the same file name in different + directories. + + 2001-10-29 Joseph S. Myers + + * update_web_docs: Generate libiberty and gnat-style manuals. + + 2001-10-24 Joseph S. Myers + + * gcc_release: Build snapshots from mainline. Generate Ada and + Chill tarballs. Correct error check when building diffs. Check + for errors when building bzip2 files. + * crontab: Use /sourceware/snapshot-tmp for building snapshots. + + 2001-10-08 Joseph S. Myers + + * crontab: Build weekly snapshots. + + * gcc_release: Copy from 3.0 branch. Add support for building the + weekly snapshots on gcc.gnu.org. + + 2001-08-28 Joseph S. Myers + + * update_web_docs: Also check out texinfo.tex from + gcc/doc/include. + + 2001-08-06 Gerald Pfeifer + + * update_web_docs (PREPROCESS): Rename to WWWPREPROCESS. + Preprocess the entire web site, not just the install docs. + + 2001-06-25 Phil Edwards + + * update_version: Add command-line argument capability, also + bump version for libstdc++-v3, and exit with the return code from + the cvs commit. + * crontab: Call update_version with arguments instead of + calling update_branch_version. + * update_branch_version: Remove. + + 2001-06-08 Gerald Pfeifer + + * update_web_docs: Only update the install documentation for the + CVS HEAD. + + 2001-06-07 Joseph S. Myers + + * update_web_docs, doc_exclude: Check out files that may be in the + Attic. Check out texinfo.tex. Don't generate anything from + c-tree.texi. Generate PostScript output from manuals. + + 2001-06-04 Gerald Pfeifer + + * update_web_docs (WWWBASE_PREFORMATTED, PREPROCESS): New + variables. + Fix a comment and add another one. + Generate the installation documentation in HTML format from + gcc/doc/install.texi. + + 2001-05-03 Joseph S. Myers + + * update_web_docs: Don't generate HTML from gxxint.texi. Don't + run texi2html on manuals that aren't present. + + 2001-03-18 Phil Edwards + + * update_web_docs_libstdcxx: New script. + * crontab: Call said script. + + 2001-03-18 Joseph S. Myers + + * update_version, update_branch_version: Check out with gcc + directory instead of using egcs link. + + 2001-03-17 Joseph S. Myers + + * update_web_docs: Don't strip leading -r from argument following + -r, or leading -d from argument following -d. Bug pointed out by + Matt Kraai. + + * update_web_docs: Handle -r and -d options to generate docs for a + release or branch in a subdirectory. Determine names of G77 news + and bugs files and contributors file after updated docs have been + installed, not before. Don't remove files from a subdirectory. + Don't generate manuals for gcov (included in the GCC manual) or + iostream (obsolete). Do generate manuals for cppinternals, gcj + and porting. Update regular expressions for detecting whether + files have really changed when regenerated. + + 2001-03-15 Joseph S. Myers + + * update_web_docs: Use /usr/local/bin/texi2html rather than + gccadmin's local copy. + + 2001-03-10 Joseph S. Myers + + * crontab, doc_exclude, update_branch_version, update_version, + update_web_docs: New files (as currently used by gccadmin). + * README: New file. diff -Nrc3pad gcc-3.0.4/maintainer-scripts/README gcc-3.1/maintainer-scripts/README *** gcc-3.0.4/maintainer-scripts/README Thu Jan 1 00:00:00 1970 --- gcc-3.1/maintainer-scripts/README Sat Mar 10 00:08:49 2001 *************** *** 0 **** --- 1,6 ---- + This directory contains various files used by the gccadmin account on + gcc.gnu.org, mainly for automated tasks such as the daily update of + the date in version.c. There isn't presently any scheme for files + checked in here to be automatically checked out and used by gccadmin, + so the files in CVS and those used by gccadmin must be kept in sync + manually. diff -Nrc3pad gcc-3.0.4/maintainer-scripts/crontab gcc-3.1/maintainer-scripts/crontab *** gcc-3.0.4/maintainer-scripts/crontab Thu Jan 1 00:00:00 1970 --- gcc-3.1/maintainer-scripts/crontab Wed Oct 24 03:15:38 2001 *************** *** 0 **** --- 1,5 ---- + 16 0 * * * sh /home/gccadmin/scripts/update_version + 16 0 * * * sh /home/gccadmin/scripts/update_version -rgcc-3_0-branch + 50 0 * * * sh /home/gccadmin/scripts/update_web_docs + 55 0 * * * sh /home/gccadmin/scripts/update_web_docs_libstdcxx + 40 16 * * 1 sh /home/gccadmin/scripts/gcc_release -s -l -d /sourceware/snapshot-tmp all diff -Nrc3pad gcc-3.0.4/maintainer-scripts/doc_exclude gcc-3.1/maintainer-scripts/doc_exclude *** gcc-3.0.4/maintainer-scripts/doc_exclude Thu Jan 1 00:00:00 1970 --- gcc-3.1/maintainer-scripts/doc_exclude Thu Jun 7 07:27:49 2001 *************** *** 0 **** --- 1,2 ---- + texinfo + etc diff -Nrc3pad gcc-3.0.4/maintainer-scripts/gcc_release gcc-3.1/maintainer-scripts/gcc_release *** gcc-3.0.4/maintainer-scripts/gcc_release Thu Jan 1 00:00:00 1970 --- gcc-3.1/maintainer-scripts/gcc_release Thu May 9 05:50:34 2002 *************** *** 0 **** --- 1,646 ---- + #! /bin/sh + + ######################################################################## + # + # File: gcc_release + # Author: Jeffrey Law, Bernd Schmidt, Mark Mitchell + # Date: 2001-05-25 + # + # Contents: + # Script to create a GCC release. + # + # Copyright (c) 2001, 2002 Free Software Foundation. + # + # 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. + # + ######################################################################## + + ######################################################################## + # Notes + ######################################################################## + + # Here is an example usage of this script, to create a GCC 3.0.2 + # prerelease: + # + # gcc_release -r 3.0.2 + # + # This script will automatically use the head of the release branch + # to generate the release. + + ######################################################################## + # Functions + ######################################################################## + + # Issue the error message given by $1 and exit with a non-zero + # exit code. + + error() { + echo "gcc_release: error: $1" + exit 1 + } + + # Issue the informational message given by $1. + + inform() { + echo "gcc_release: $1" + } + + # Issue a usage message explaining how to use this script. + + usage() { + cat < ${x}.new < ${y}.new && \ + mv ${y}.new ${y} && \ + ${CVS} ci -m 'Update version' ${y}) || \ + error "Could not update ${x}" + done + for x in gcc/f/version.c libf2c/libF77/Version.c \ + libf2c/libI77/Version.c libf2c/libU77/Version.c; do + y=`basename ${x}` + (changedir `dirname ${SOURCE_DIRECTORY}/${x}` && \ + sed -e 's/experimental\|prerelease/release/g' < ${y} > ${y}.new && \ + mv ${y}.new ${y} && \ + ${CVS} ci -m 'Update version' ${y}) || \ + error "Could not update ${x}" + done + + # Make sure we tag the sources for a final release. + TAG="gcc_`echo ${RELEASE} | tr . _`_release" + + rm -rf ${SOURCE_DIRECTORY} + fi + + # Tag the sources. + if [ -n "${TAG}" ]; then + inform "Tagging release sources" + ${CVS} rtag -r ${BRANCH} -F ${TAG} gcc || \ + error "Could not tag release sources" + BRANCH=$TAG + fi + + # Export the current sources. + inform "Retrieving release sources" + ${CVS} \ + export -d "`basename ${SOURCE_DIRECTORY}`" \ + -r ${BRANCH} gcc || \ + error "Could not retrieve release sources" + + # Run gcc_update on them to set up the timestamps nicely. + changedir "gcc-${RELEASE}" + contrib/gcc_update --touch + + # Obtain some documentation files from the wwwdocs module. + inform "Retrieving HTML documentation" + changedir "${WORKING_DIRECTORY}" + for x in bugs gnats faq; do + (${CVS} export -r HEAD wwwdocs/htdocs/${x}.html && \ + cp ${WORKING_DIRECTORY}/wwwdocs/htdocs/${x}.html \ + ${SOURCE_DIRECTORY}) || \ + error "Could not retrieve ${x}.html" + done + + inform "Generating plain-text documentation from HTML" + changedir "${SOURCE_DIRECTORY}" + for file in *.html; do + newfile=`echo $file | sed -e 's/.html//' | tr "[:lower:]" "[:upper:]"` + (${ENV} TERM=vt100 lynx -dump $file \ + | sed -e "s#file://localhost`/bin/pwd`\(.*\)#http://gcc.gnu.org\1#g" \ + > $newfile) || \ + error "Could not regenerate documentation" + done + + # For a prerelease or real release, we need to generate additional + # files not present in CVS. + changedir "${SOURCE_DIRECTORY}" + if [ $SNAPSHOT -ne 1 ]; then + # Generate the documentation. + inform "Building install docs" + SOURCEDIR=${SOURCE_DIRECTORY}/gcc/doc + DESTDIR=${SOURCE_DIRECTORY}/INSTALL + export SOURCEDIR + export DESTDIR + ${SOURCE_DIRECTORY}/gcc/doc/install.texi2html + + # Regenerate the NEWS file. + contrib/gennews > gcc/NEWS || \ + error "Could not regenerate NEWS files" + + # Now, we must build the compiler in order to create any generated + # files that are supposed to go in the source directory. This is + # also a good sanity check to make sure that the release builds + # on at least one platform. + inform "Building compiler" + OBJECT_DIRECTORY=../objdir + contrib/gcc_build -d ${SOURCE_DIRECTORY} -o ${OBJECT_DIRECTORY} build || \ + error "Could not rebuild GCC" + + # Regenerate the Fotran NEWS and BUGS files. + (cd ${OBJECT_DIRECTORY}/gcc && make f77.rebuilt) || \ + error "Could not regenerate Fortran NEWS and BUGS files" + fi + + # Move message catalogs to source directory. + mv ../objdir/gcc/po/*.gmo gcc/po/ + + # Create a `.brik' file to use for checking the validity of the + # release. + changedir "${SOURCE_DIRECTORY}" + BRIK_FILE=`mktemp /tmp/gcc_release.XXXXXXX` + ((find . -type f | sort > $BRIK_FILE) && \ + brik -Gb -f ${BRIK_FILE} > .brik && \ + rm ${BRIK_FILE}) || \ + error "Could not compute brik checksum" + } + + # Buid a single tarfile. The first argument is the name of the name + # of the tarfile to build, without any suffixes. They will be added + # automatically. The rest of the arguments are the files or + # directories to include. + + build_tarfile() { + # Get the name of the destination tar file. + TARFILE="$1.tar.gz" + shift + + # Build the tar file itself. + (${TAR} cf - "$@" | ${GZIP} > ${TARFILE}) || \ + error "Could not build tarfile" + FILE_LIST="${FILE_LIST} ${TARFILE}" + } + + # Build the various tar files for the release. + + build_tarfiles() { + inform "Building tarfiles" + + changedir "${WORKING_DIRECTORY}" + + # The GNU Coding Standards specify that all files should + # world readable. + chmod -R a+r ${SOURCE_DIRECTORY} + # And that all directories have mode 777. + find ${SOURCE_DIRECTORY} -type d -exec chmod 777 {} \; + + # Build one huge tarfile for the entire distribution. + build_tarfile gcc-${RELEASE} `basename ${SOURCE_DIRECTORY}` + + # Now, build one for each of the languages. + build_tarfile gcc-ada-${RELEASE} ${ADA_DIRS} + build_tarfile gcc-g++-${RELEASE} ${CPLUSPLUS_DIRS} + build_tarfile gcc-g77-${RELEASE} ${FORTRAN_DIRS} + build_tarfile gcc-java-${RELEASE} ${JAVA_DIRS} + build_tarfile gcc-objc-${RELEASE} ${OBJECTIVEC_DIRS} + build_tarfile gcc-testsuite-${RELEASE} ${TESTSUITE_DIRS} + + # The core is everything else. + EXCLUDES="" + for x in ${ADA_DIRS} ${CPLUSPLUS_DIRS} ${FORTRAN_DIRS} \ + ${JAVA_DIRS} ${OBJECTIVEC_DIRS} ${TESTSUITE_DIRS}; do + EXCLUDES="${EXCLUDES} --exclude $x" + done + build_tarfile gcc-core-${RELEASE} ${EXCLUDES} \ + `basename ${SOURCE_DIRECTORY}` + } + + # Build .bz2 files. + build_bzip2() { + for f in ${FILE_LIST}; do + bzfile=${f%.gz}.bz2 + (zcat $f | ${BZIP2} > ${bzfile}) || error "Could not create ${bzfile}" + done + } + + # Build diffs against an old release. + build_diffs() { + old_dir=${1%/*} + old_file=${1##*/} + old_vers=${old_file%.tar.gz} + old_vers=${old_vers#gcc-} + inform "Building diffs against version $old_vers" + for f in gcc gcc-ada gcc-g++ gcc-g77 gcc-java gcc-objc gcc-testsuite gcc-core; do + old_tar=${old_dir}/${f}-${old_vers}.tar.gz + new_tar=${WORKING_DIRECTORY}/${f}-${RELEASE}.tar.gz + if [ -e $old_tar ] && [ -e $new_tar ]; then + build_diff $old_tar gcc-${old_vers} $new_tar gcc-${RELEASE} \ + ${f}-${old_vers}-${RELEASE}.diff.gz + fi + done + } + + # Build an individual diff. + build_diff() { + changedir "${WORKING_DIRECTORY}" + tmpdir=gccdiff.$$ + mkdir $tmpdir || error "Could not create directory $tmpdir" + changedir $tmpdir + tar xfz $1 || error "Could not unpack $1 for diffs" + tar xfz $3 || error "Could not unpack $3 for diffs" + ${DIFF} $2 $4 > ../${5%.gz} + if [ $? -eq 2 ]; then + error "Trouble making diffs from $1 to $3" + fi + ${GZIP} ../${5%.gz} || error "Could not gzip ../${5%.gz}" + changedir .. + rm -rf $tmpdir + FILE_LIST="${FILE_LIST} $5" + } + + # Upload the files to the FTP server. + + upload_files() { + inform "Uploading files" + + changedir "${WORKING_DIRECTORY}" + + # Make sure the directory exists on the server. + if [ $LOCAL -eq 0 ]; then + ${SSH} -l ${GCC_USERNAME} ${GCC_HOSTNAME} mkdir ${FTP_PATH} + UPLOAD_PATH="${GCC_USERNAME}@${GCC_HOSTNAME}:${FTP_PATH}" + else + mkdir -p "${FTP_PATH}" \ + || error "Could not create \`${FTP_PATH}'" + UPLOAD_PATH=${FTP_PATH} + fi + + for x in gcc*.gz gcc*.bz2; do + if [ -e ${x} ]; then + # Make sure the file will be readable on the server. + chmod a+r ${x} + # Copy it. + if [ $LOCAL -eq 0 ]; then + ${SCP} ${x} ${UPLOAD_PATH} || error "Could not upload ${x}" + fi + fi + done + } + + ######################################################################## + # Initialization + ######################################################################## + + # Today's date. + DATE=`date "+%Y%m%d"` + LONG_DATE=`date "+%Y-%m-%d"` + + # The CVS server containing the GCC repository. + CVS_SERVER="gcc.gnu.org" + # The path to the repository on that server. + CVS_REPOSITORY="/cvs/gcc" + # The CVS protocol to use. + CVS_PROTOCOL="ext" + # The username to use when connecting to the server. + CVS_USERNAME="${USER}" + + # The machine to which files will be uploaded. + GCC_HOSTNAME="gcc.gnu.org" + # The name of the account on the machine to which files are uploaded. + GCC_USERNAME="gccadmin" + # The directory in which the files will be placed. + FTP_PATH="~ftp/pub/gcc" + + # The major number for the release. For release `3.0.2' this would be + # `3' + RELEASE_MAJOR="" + # The minor number for the release. For release `3.0.2' this would be + # `0'. + RELEASE_MINOR="" + # The revision number for the release. For release `3.0.2' this would + # be `2'. + RELEASE_REVISION="" + # The complete name of the release. + RELEASE="" + + # The name of the branch from which the release should be made. + BRANCH="" + + # The tag to apply to the sources used for the release. + TAG="" + + # The old tarballs from which to generate diffs. + OLD_TARS="" + + # The directory that will be used to construct the release. The + # release itself will be placed in a subdirectory of this diretory. + DESTINATION=${HOME} + # The subdirectory. + WORKING_DIRECTORY="" + # The directory that will contain the GCC sources. + SOURCE_DIRECTORY="" + + # The directories that should be part of the various language-specific + # tar files. These are all relative to the top of the source tree. + ADA_DIRS="gcc/ada" + CPLUSPLUS_DIRS="gcc/cp libstdc++-v3" + FORTRAN_DIRS="gcc/f libf2c" + JAVA_DIRS="gcc/java libjava libffi fastjar zlib boehm-gc" + OBJECTIVEC_DIRS="gcc/objc libobjc" + TESTSUITE_DIRS="gcc/testsuite" + + # Non-zero if this is the final release, rather than a prerelease. + FINAL=0 + + # Non-zero if we are building a snapshot, and don't build gcc or + # include generated files. + SNAPSHOT=0 + + # Non-zero if we are running locally on gcc.gnu.org, and use local CVS + # and copy directly to the FTP directory. + LOCAL=0 + + # Major operation modes. + MODE_BZIP2=0 + MODE_DIFFS=0 + MODE_SOURCES=0 + MODE_TARFILES=0 + MODE_UPLOAD=0 + + # .gz files generated to create .bz2 files from. + FILE_LIST="" + + # Programs we use. + + BZIP2="${BZIP2:-bzip2}" + CVS="${CVS:-cvs -f -Q -z9}" + DIFF="${DIFF:-diff -Nrc3pad}" + ENV="${ENV:-env}" + GZIP="${GZIP:-gzip --best}" + SCP="${SCP:-scp -p}" + SSH="${SSH:-ssh}" + TAR="${TAR:-tar}" + + ######################################################################## + # Command Line Processing + ######################################################################## + + # Parse the options. + while getopts "d:fr:u:t:p:sl" ARG; do + case $ARG in + d) DESTINATION="${OPTARG}";; + r) RELEASE="${OPTARG}";; + t) TAG="${OPTARG}";; + u) CVS_USERNAME="${OPTARG}";; + f) FINAL=1;; + s) SNAPSHOT=1;; + l) LOCAL=1 + SCP=cp + FTP_PATH=~ftp/pub/gcc + PATH=~:/usr/local/bin:$PATH;; + p) OLD_TARS="${OLD_TARS} ${OPTARG}" + if [ -d ${OPTARG} ]; then + error "-p argument must name a tarball" + fi;; + \?) usage;; + esac + done + shift `expr ${OPTIND} - 1` + + # Perform consistency checking. + if [ ${LOCAL} -eq 0 ] && [ -z ${CVS_USERNAME} ]; then + error "No username specified" + fi + + if [ ! -d ${DESTINATION} ]; then + error "\`${DESTINATION}' is not a directory" + fi + + if [ $SNAPSHOT -eq 0 ]; then + if [ -z ${RELEASE} ]; then + error "No release number specified" + fi + + # Compute the major and minor release numbers. + RELEASE_MAJOR=`echo $RELEASE | awk --assign FS=. '{ print $1; }'` + RELEASE_MINOR=`echo $RELEASE | awk --assign FS=. '{ print $2; }'` + RELEASE_REVISION=`echo $RELEASE | awk --assign FS=. '{ print $3; }'` + + if [ -z "${RELEASE_MAJOR}" ] || [ -z "${RELEASE_MINOR}" ]; then + error "Release number \`${RELEASE}' is invalid" + fi + + # Compute the full name of the release. + if [ -z "${RELEASE_REVISION}" ]; then + RELEASE="${RELEASE_MAJOR}.${RELEASE_MINOR}" + else + RELEASE="${RELEASE_MAJOR}.${RELEASE_MINOR}.${RELEASE_REVISION}" + fi + + # Compute the name of the branch, which is based solely on the major + # and minor release numbers. + BRANCH="gcc-${RELEASE_MAJOR}_${RELEASE_MINOR}-branch" + + # If this is not a final release, set various parameters acordingly. + if [ ${FINAL} -ne 1 ]; then + RELEASE="${RELEASE}-${DATE}" + FTP_PATH="${FTP_PATH}/snapshots/" + else + FTP_PATH="${FTP_PATH}/releases/gcc-${RELEASE}/" + fi + else + RELEASE=$DATE + # For now snapshots come from the 3.1 branch. + BRANCH=gcc-3_1-branch + FTP_PATH="${FTP_PATH}/snapshots/${LONG_DATE}" + TAG=gcc_ss_${DATE} + + # Building locally on gcc.gnu.org, we know what the last snapshot date + # was. + if [ $LOCAL -ne 0 ]; then + LAST_DATE=`cat ~/.snapshot_date` + LAST_LONG_DATE=`date --date=$LAST_DATE +%Y-%m-%d` + LAST_DIR=~ftp/pub/gcc/snapshots/${LAST_LONG_DATE} + OLD_TARS=${LAST_DIR}/gcc-${LAST_DATE}.tar.gz + fi + fi + + # Compute the name of the WORKING_DIRECTORY and the SOURCE_DIRECTORY. + WORKING_DIRECTORY="${DESTINATION}/gcc-${RELEASE}" + SOURCE_DIRECTORY="${WORKING_DIRECTORY}/gcc-${RELEASE}" + + # Recompute the names of all the language-specific directories, + # relative to the WORKING_DIRECTORY. + ADA_DIRS=`adjust_dirs ${ADA_DIRS}` + CPLUSPLUS_DIRS=`adjust_dirs ${CPLUSPLUS_DIRS}` + FORTRAN_DIRS=`adjust_dirs ${FORTRAN_DIRS}` + JAVA_DIRS=`adjust_dirs ${JAVA_DIRS}` + OBJECTIVEC_DIRS=`adjust_dirs ${OBJECTIVEC_DIRS}` + TESTSUITE_DIRS=`adjust_dirs ${TESTSUITE_DIRS}` + + # Set up CVSROOT. + if [ $LOCAL -eq 0 ]; then + CVSROOT=":${CVS_PROTOCOL}:${CVS_USERNAME}@" + CVSROOT="${CVSROOT}${CVS_SERVER}:${CVS_REPOSITORY}" + else + CVSROOT="${CVS_REPOSITORY}" + fi + export CVSROOT + + ######################################################################## + # Main Program + ######################################################################## + + # Set the timezone to UTC + TZ="UTC0" + export TZ + + # Handle the major modes. + while [ $# -ne 0 ]; do + case $1 in + bzip2) MODE_BZIP2=1;; + diffs) MODE_DIFFS=1;; + sources) MODE_SOURCES=1;; + tarfiles) MODE_TARFILES=1;; + upload) MODE_UPLOAD=1;; + all) MODE_SOURCES=1; MODE_TARFILES=1; MODE_DIFFS=1; MODE_BZIP2=1; MODE_UPLOAD=1;; + *) error "Unknown mode $1";; + esac + shift + done + + # Build the source directory. + + if [ $MODE_SOURCES -ne 0 ]; then + build_sources + fi + + # Build the tar files. + + if [ $MODE_TARFILES -ne 0 ]; then + build_tarfiles + fi + + # Build diffs + + if [ $MODE_DIFFS -ne 0 ]; then + # Possibly build diffs. + if [ -n "$OLD_TARS" ]; then + for old_tar in $OLD_TARS; do + build_diffs $old_tar + done + fi + fi + + # Build bzip2 files + if [ $MODE_BZIP2 -ne 0 ]; then + build_bzip2 + fi + + # Upload them to the FTP server. + + if [ $MODE_UPLOAD -ne 0 ]; then + upload_files + + # For snapshots, make some further updates. + if [ $SNAPSHOT -ne 0 ] && [ $LOCAL -ne 0 ]; then + # Update links on the FTP server. + TEXT_DATE=`date --date=$DATE +%B\ %d,\ %Y` + cd ~ftp/pub/gcc/snapshots + sed -e "s%@DATE@%$DATE%g" -e "s%@LAST_DATE@%$LAST_DATE%g" \ + -e "s%@LONG_DATE@%$LONG_DATE%g" \ + -e "s%@TEXT_DATE@%$TEXT_DATE%g" < ~/scripts/snapshot-README > $$ + mv $$ README + sed -e "s%@DATE@%$DATE%g" -e "s%@LAST_DATE@%$LAST_DATE%g" \ + -e "s%@LONG_DATE@%$LONG_DATE%g" \ + -e "s%@TEXT_DATE@%$TEXT_DATE%g" < ~/scripts/snapshot-index.html > $$ + mv $$ index.html + + touch LATEST-IS-$LONG_DATE + rm -f LATEST-IS-$LAST_LONG_DATE + + # Update snapshot date file. + changedir ~ + echo $DATE >.snapshot_date + + # Update gcc_latest_snapshot tag. + ${CVS} rtag -d gcc_latest_snapshot gcc + ${CVS} rtag -rgcc_ss_${DATE} gcc_latest_snapshot gcc + + # Announce the snapshot. + export QMAILHOST=gcc.gnu.org + mail -s "gcc-ss-$DATE is now available" gcc@gcc.gnu.org < ~ftp/pub/gcc/snapshots/README + + # Remove working directory + rm -rf ${WORKING_DIRECTORY} + fi + fi diff -Nrc3pad gcc-3.0.4/maintainer-scripts/snapshot-README gcc-3.1/maintainer-scripts/snapshot-README *** gcc-3.0.4/maintainer-scripts/snapshot-README Thu Jan 1 00:00:00 1970 --- gcc-3.1/maintainer-scripts/snapshot-README Tue Jan 29 14:08:04 2002 *************** *** 0 **** --- 1,48 ---- + gcc-ss-@DATE@ is now available on + ftp://gcc.gnu.org/pub/gcc/snapshots/@LONG_DATE@ + and on various mirrors, see http://gcc.gnu.org/mirrors.html for details. + + This snapshot has been generated from the current development mainline + which is going to become GCC 3.1. + + You'll find: + + gcc-@DATE@.tar.gz The full gcc snapshot, including all + languages runtime libraries. + + gcc-core-@DATE@.tar.gz Just the C front end and core compiler. + + gcc-tests-@DATE@.tar.gz The GCC testsuite. + + gcc-ada-@DATE@.tar.gz The Ada language and runtime. + + gcc-g++-@DATE@.tar.gz The g++ language and runtime. + + gcc-g++-tests-@DATE@.tar.gz The testsuite for G++. + + gcc-g77-@DATE@.tar.gz The g77 language and runtime. + + gcc-g77-testsuite-@DATE@.tar.gz The testsuite for G77. + + gcc-objc-@DATE@.tar.gz The Objective-C front end and runtime. + + gcc-java-@DATE@.tar.gz The Java front end. + + gcc-chill-@DATE@.tar.gz The Chill front end and runtime. + + Diffs from @LAST_DATE@ are available. + + Note at times you may find newer directories on the server with limited + permissions. These represent snapshots that have not yet been verified + as correct, or are known to be incorrect. + + When a particular snapshot is ready for public consumption the directory + permissions are relaxed, the LATEST-IS- file is updated and a message is + sent to the gcc list. + + Using a snapshot before it's officially made available is an unwise thing + to do since it may become impossible to update to an official snapshot. + + The "gcc_latest_snapshot" tag has been moved. You can use + cvs update -rgcc_latest_snapshot to update your CVS tree to the latest + official snapshot. diff -Nrc3pad gcc-3.0.4/maintainer-scripts/snapshot-index.html gcc-3.1/maintainer-scripts/snapshot-index.html *** gcc-3.0.4/maintainer-scripts/snapshot-index.html Thu Jan 1 00:00:00 1970 --- gcc-3.1/maintainer-scripts/snapshot-index.html Fri Feb 8 15:41:03 2002 *************** *** 0 **** --- 1,117 ---- + + + + GCC Snapshots + + + +

    GCC Snapshots

    + +
    + +

    The GCC Project makes + periodic snapshots of the GCC source tree available to the public + for testing purposes.

    + +

    If you are planning to download and use one of our snapshots, then + we highly recommend you join the GCC developers list. Details for + how to sign up can be found on the GCC project home page.

    + + +
    +

    + gcc @TEXT_DATE@ snapshot, includes all languages. + +

    + gcc-@LAST_DATE@-@DATE@ patch file to bring gcc-@LAST_DATE@ up to + gcc-@DATE@. + +

    + gcc-core @TEXT_DATE@ snapshot, includes just the C front + end and core compiler. + +

    + gcc-core-@LAST_DATE@-@DATE@ patch file to bring gcc-core-@LAST_DATE@ + up to gcc-core-@DATE@. + +

    + gcc-g++ @TEXT_DATE@ snapshot, includes just the G++ front + end and runtime. + +

    + gcc-g++-@LAST_DATE@-@DATE@ patch file to bring gcc-g++-@LAST_DATE@ + up to gcc-g++-@DATE@. + +

    + gcc-g77 @TEXT_DATE@ snapshot, includes just the G77 front + end and runtime. + +

    + gcc-g77-@LAST_DATE@-@DATE@ patch file to bring gcc-g77-@LAST_DATE@ + up to gcc-g77-@DATE@. + +

    + gcc-java @TEXT_DATE@ snapshot, includes just the Java + front end. + +

    + gcc-java-@LAST_DATE@-@DATE@ patch file to bring gcc-java-@LAST_DATE@ + up to gcc-java-@DATE@. + +

    + gcc-chill @TEXT_DATE@ snapshot, includes just the Chill + front end and runtime. + +

    + gcc-chill-@LAST_DATE@-@DATE@ patch file to bring gcc-chill-@LAST_DATE@ + up to gcc-chill-@DATE@. + +

    + gcc-objc @TEXT_DATE@ snapshot, includes just the Objective-C + front end and runtime. + +

    + gcc-objc-@LAST_DATE@-@DATE@ patch file to bring gcc-objc-@LAST_DATE@ + up to gcc-objc-@DATE@. + +

    + gcc-ada @TEXT_DATE@ snapshot, includes just the Ada + front end and runtime. + +

    + gcc-ada-@LAST_DATE@-@DATE@ patch file to bring gcc-ada-@LAST_DATE@ + up to gcc-ada-@DATE@. + +

    + +

    If you are using an x86 GNU/Linux system that uses RPMs to handle + installation, you may find the daily RPM snapshots at: + + http://www.codesourcery.com/gcc-snapshots.html + easier to install.

    + +

    Note at times you may find newer directories on the server with limited + permissions. These represent snapshots that have not yet been verified + as correct, or are known to be incorrect.

    + +

    When a particular snapshot is ready for public consumption the directory + permissions are relaxed, the LATEST-IS- file is updated and a message is + sent to the GCC list.

    + +

    Using a snapshot before it's officially made available is an unwise thing + to do since it may become impossible to update to an official snapshot.

    + +

    Old snapshots can be found on the ftp server ftp://gcc.gnu.org:/pub/gcc/snapshots.

    + +
    + +
    + gcc@gcc.gnu.org + gcc-bugs@gcc.gnu.org + +

    Last modified @TEXT_DATE@

    +
    + + + diff -Nrc3pad gcc-3.0.4/maintainer-scripts/update_version gcc-3.1/maintainer-scripts/update_version *** gcc-3.0.4/maintainer-scripts/update_version Thu Jan 1 00:00:00 1970 --- gcc-3.1/maintainer-scripts/update_version Mon Jun 25 19:26:25 2001 *************** *** 0 **** --- 1,41 ---- + #!/bin/sh + + # Run this from /tmp. + CVSROOT=/cvs/gcc + export CVSROOT + /bin/rm -rf /tmp/$$ + /bin/mkdir /tmp/$$ + cd /tmp/$$ + + # ARGS is passed to 'cvs co' + ARGS="$*" + CURR_DATE=`/bin/date +"%Y%m%d"` + + # version is contained within a char* + textstring_FILES="gcc/gcc/version.c gcc/gcc/f/version.c gcc/libf2c/libF77/Version.c gcc/libf2c/libI77/Version.c gcc/libf2c/libU77/Version.c" + + # version is contained within a #define + cppdefine_FILES="gcc/libstdc++-v3/include/bits/c++config" + + /usr/local/bin/cvs co $ARGS $textstring_FILES $cppdefine_FILES + + for file in $textstring_FILES; do + OLD_VERSION=`/bin/cat $file` + /bin/sed -e "s/\(.*\"[^ ]*\) [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/\1 ${CURR_DATE}/" >${file} <${file} <&2 + exit 1 + fi + RELEASE="${1#-r}" + if [ -z "$RELEASE" ]; then + shift + RELEASE="$1" + if [ -z "$RELEASE" ]; then + echo "No release specified with -r" >&2 + exit 1 + fi + fi + ;; + -d*) + if [ -n "$SUBDIR" ]; then + echo "Multiple subdirectories specified" >&2 + exit 1 + fi + SUBDIR="${1#-d}" + if [ -z "$SUBDIR" ]; then + shift + SUBDIR="$1" + if [ -z "$SUBDIR" ]; then + echo "No subdirectory specified with -d" >&2 + exit 1 + fi + fi + ;; + *) + echo "Unknown argument \"$1\"" >&2 + exit 1 + ;; + esac + shift + done + + if [ -n "$RELEASE" ] && [ -z "$SUBDIR" ]; then + echo "Release specified without subdirectory" >&2 + exit 1 + fi + + if [ -z "$SUBDIR" ]; then + DOCSDIR=$WWWBASE/onlinedocs + else + DOCSDIR=$WWWBASE/onlinedocs/$SUBDIR + fi + + if [ ! -d $DOCSDIR ]; then + mkdir $DOCSDIR + fi + + if [ -z "$RELEASE" ]; then + RELEASE=HEAD + fi + + WORKDIR=/tmp/gcc-doc-update.$$ + + /bin/rm -rf $WORKDIR + /bin/mkdir $WORKDIR + cd $WORKDIR + + # Find all the texi files in the repository, except those in directories + # we do not care about (texinfo, etc). + find $CVSROOT/gcc -name \*.texi,v -print | fgrep -v -f/home/gccadmin/scripts/doc_exclude | sed -e s#$CVSROOT/##g -e s#,v##g -e s#Attic/##g > FILES + + + # Checkout all the texi files. + cvs -Q co -r$RELEASE `cat FILES` gcc/gcc/doc/install.texi2html gcc/gcc/doc/include/texinfo.tex + + # The directory to pass to -I; this is the one with texinfo.tex + # and fdl.texi. + includedir=gcc/gcc/doc/include + + MANUALS="cpp chill cppinternals gcc gccint gcj g77 gnat-style libiberty porting" + + # Now convert the relevant files from texi to HTML and PostScript. + for file in $MANUALS; do + filename=`find . -name ${file}.texi` + if [ "${filename}" ]; then + makeinfo --html -I ${includedir} -I `dirname ${filename}` ${filename} + texi2dvi -I ${includedir} ${filename} $file.gz + done + + # On the 15th of the month, wipe all the old files from the + # web server. + today=`date +%d` + if test $today = 15; then + find $DOCSDIR -type f -maxdepth 1 -print | grep -v index.html | xargs rm + for m in $MANUALS; do + rm $DOCSDIR/$m/*.html + done + fi + + # And copy the resulting html files to the web server + for file in */*.html *.ps; do + cat $DOCSDIR/$file | + sed -e '/^ file1 + cat $file | + sed -e '/^ file2 + if cmp -s file1 file2; then + : + else + cp $file $DOCSDIR/$file + cp $file.gz $DOCSDIR/$file.gz + fi + done + + news_file=g77/News.html + bugs_file=g77/Trouble.html + + cd $DOCSDIR + + rm -f g77_news.html + rm -f g77_bugs.html + rm -f g77_news.html.gz + rm -f g77_bugs.html.gz + ln $news_file g77_news.html + ln $bugs_file g77_bugs.html + ln ${news_file}.gz g77_news.html.gz + ln ${bugs_file}.gz g77_bugs.html.gz + + # Finally, generate the installation documentation (but only for CVS HEAD). + if [ "$RELEASE" = "HEAD" ]; then + SOURCEDIR=$WORKDIR/gcc/gcc/doc + DESTDIR=$WWWBASE_PREFORMATTED/install + export SOURCEDIR + export DESTDIR + $WORKDIR/gcc/gcc/doc/install.texi2html + + # Preprocess the entire web site, not just the install docs! + echo "Invoking $WWWPREPROCESS" + $WWWPREPROCESS |grep -v '^ Warning: Keeping' + fi + + # Clean up behind us. + + rm -rf $WORKDIR diff -Nrc3pad gcc-3.0.4/maintainer-scripts/update_web_docs_libstdcxx gcc-3.1/maintainer-scripts/update_web_docs_libstdcxx *** gcc-3.0.4/maintainer-scripts/update_web_docs_libstdcxx Thu Jan 1 00:00:00 1970 --- gcc-3.1/maintainer-scripts/update_web_docs_libstdcxx Mon Mar 19 01:40:04 2001 *************** *** 0 **** --- 1,54 ---- + #!/bin/sh + + + # "sh update_web_docs_libstdcxx.sh" + # Checks out a copy of the libstdc++-v3 "inner" documentation and puts + # it in the onlinedocs area. For an initial description of "inner" + # docs, see the thread starting with + # http://gcc.gnu.org/ml/libstdc++/2000-11/msg00475.html + # + # Id: update_v3_web_docs.sh,v 1.4 2000/12/25 05:02:14 pedwards Exp + ##################################################################### + + CVSROOT=/cvs/gcc + GETTHIS='gcc/libstdc++-v3/docs/html' + WWWDIR=/www/gcc/htdocs/onlinedocs/libstdc++ + #WWWDIR=/tmp/fake-onlinedocs-testing + + + ## No more changes should be needed. Ha, right, whatever. + ##################################################################### + + + PATH=/usr/local/bin:$PATH + export CVSROOT + + test -d $WWWDIR || /bin/mkdir $WWWDIR + test -d $WWWDIR || { echo something is very wrong ; exit 1; } + + WORKDIR=/tmp/v3-doc-update.$$ + /bin/rm -rf $WORKDIR + /bin/mkdir $WORKDIR + cd $WORKDIR + + + # checkout all the HTML files, get down into an interesting directory + cvs -Q co $GETTHIS + cd $GETTHIS + + # pity the cvs 'export' would require a tag... maybe gcc_latest_snapshot + # would be recent enough? anyhow, get rid of the CVS dirs in the tree + find . -type d -name CVS -print | xargs rm -r Makefile + + # build a compressed copy of the HTML, preserve directory structure + for file in `find . -name "*.html" -print`; do + gzip --best < $file > $file.gz + done + + # copy the tree to the onlinedocs area, preserve directory structure + #find . -depth -print | cpio -pdv $WWWDIR + find . -depth -print | cpio -pd $WWWDIR > /dev/null 2>&1 + + cd / + /bin/rm -rf $WORKDIR + diff -Nrc3pad gcc-3.0.4/maintainer-scripts/update_web_docs_old gcc-3.1/maintainer-scripts/update_web_docs_old *** gcc-3.0.4/maintainer-scripts/update_web_docs_old Thu Jan 1 00:00:00 1970 --- gcc-3.1/maintainer-scripts/update_web_docs_old Mon Dec 17 17:35:01 2001 *************** *** 0 **** --- 1,178 ---- + #!/bin/sh -x + + # Generate HTML documentation from GCC Texinfo docs. + # This version is for GCC 3.0.x and earlier versions. + + # Run this from /tmp. + CVSROOT=/cvs/gcc + export CVSROOT + + PATH=/usr/local/bin:$PATH + + WWWBASE=/www/gcc/htdocs + WWWBASE_PREFORMATTED=/www/gcc/htdocs-preformatted + WWWPREPROCESS='/www/gcc/bin/preprocess -r' + + # Process options -rrelease and -ddirectory + RELEASE="" + SUBDIR="" + + while [ $# -gt 0 ]; do + case $1 in + -r*) + if [ -n "$RELEASE" ]; then + echo "Multiple releases specified" >&2 + exit 1 + fi + RELEASE="${1#-r}" + if [ -z "$RELEASE" ]; then + shift + RELEASE="$1" + if [ -z "$RELEASE" ]; then + echo "No release specified with -r" >&2 + exit 1 + fi + fi + ;; + -d*) + if [ -n "$SUBDIR" ]; then + echo "Multiple subdirectories specified" >&2 + exit 1 + fi + SUBDIR="${1#-d}" + if [ -z "$SUBDIR" ]; then + shift + SUBDIR="$1" + if [ -z "$SUBDIR" ]; then + echo "No subdirectory specified with -d" >&2 + exit 1 + fi + fi + ;; + *) + echo "Unknown argument \"$1\"" >&2 + exit 1 + ;; + esac + shift + done + + if [ -n "$RELEASE" ] && [ -z "$SUBDIR" ]; then + echo "Release specified without subdirectory" >&2 + exit 1 + fi + + if [ -z "$SUBDIR" ]; then + DOCSDIR=$WWWBASE/onlinedocs + else + DOCSDIR=$WWWBASE/onlinedocs/$SUBDIR + fi + + if [ ! -d $DOCSDIR ]; then + mkdir $DOCSDIR + fi + + if [ -z "$RELEASE" ]; then + RELEASE=HEAD + DO_THANKS_HTML=y + else + DO_THANKS_HTML=n + fi + + WORKDIR=/tmp/gcc-doc-update.$$ + + /bin/rm -rf $WORKDIR + /bin/mkdir $WORKDIR + cd $WORKDIR + + # Find all the texi files in the repository, except those in directories + # we do not care about (texinfo, etc). + find $CVSROOT/gcc -name \*.texi,v -print | fgrep -v -f/home/gccadmin/scripts/doc_exclude | sed -e s#$CVSROOT/##g -e s#,v##g -e s#Attic/##g > FILES + + + # Checkout all the texi files. + cvs -Q co -r$RELEASE `cat FILES` gcc/gcc/doc/install.texi2html gcc/gcc/texinfo.tex gcc/gcc/doc/texinfo.tex gcc/gcc/doc/include/texinfo.tex + + # Find the directory to pass to -I; this is the one with texinfo.tex + # and fdl.texi. + texitexloc=`find . -name texinfo.tex` + includedir=${texitexloc%/*} + + # Now convert the relevant files from texi to HTML and PostScript. + for file in cpp chill cppinternals gcc gcj g77 gnat-style libiberty \ + objc-features porting; do + filename=`find . -name ${file}.texi` + if [ "${filename}" ]; then + /usr/local/bin/texi2html -glossary -menu -split_chapter -I ${includedir} ${filename} + texi2dvi -I ${includedir} ${filename} $file.gz + done + + # On the 15th of the month, wipe all the old files from the + # web server. + today=`date +%d` + if test $today = 15; then + find $DOCSDIR -type f -maxdepth 1 -print | grep -v index.html | xargs rm + fi + + # And copy the resulting html files to the web server + for file in *.html *.ps; do + cat $DOCSDIR/$file | + sed -e '/^